{"columns":[{"name":"id","type":"string"},{"name":"src_hexsha","type":"string"},{"name":"example","type":"string"}],"n_rows":60000,"rows_kept":4500,"cut":true,"text_format":"parquet-jsonl-2026-10-02","bounds":{"document_bytes":16777216,"package_text_limit_bytes":33554432,"package_text_slack_bytes":1024,"rows_first":2000,"rows_last":500,"rows_between":2000,"halvings":0,"cell_chars":16384,"cell_head_chars":4096,"vector_min":64,"vector_head_fixed":16,"vector_head_variable":64,"kv_value_chars":1048576,"nesting_max":64,"binary_text":true},"cells_cut":214,"cells_bad_utf8":0,"cells_raw":0,"cells_binary":0,"cells_binary_text":0,"cells_vector":0,"n_row_groups":60,"reader":"pyarrow 23.0.1, python 3.13","created_by":"parquet-cpp-arrow version 15.0.2","schema":{"fields":[{"name":"id","type":"string","nullable":true,"metadata":null,"children":null},{"name":"src_hexsha","type":"string","nullable":true,"metadata":null,"children":null},{"name":"example","type":"string","nullable":true,"metadata":null,"children":null}],"parquet":"required group field_id=-1 schema {\n  optional binary field_id=-1 id (String);\n  optional binary field_id=-1 src_hexsha (String);\n  optional binary field_id=-1 example (String);\n}\n"},"kv_metadata":[["ARROW:schema",{"$cut":{"chars":588,"head":""}}],["huggingface","{\"info\": {\"features\": {\"id\": {\"dtype\": \"string\", \"_type\": \"Value\"}, \"src_hexsha\": {\"dtype\": \"string\", \"_type\": \"Value\"}, \"example\": {\"dtype\": \"string\", \"_type\": \"Value\"}}}}"]]}
["c1e5cb68755b4f48fe680e6ef71d2a8a6a0b2bff-1","c1e5cb68755b4f48fe680e6ef71d2a8a6a0b2bff","PHxmaW1fcHJlZml4fD4KCgpkZWYgdGVzdF9nZW5lcmljKCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGEgPSA0CiAgICBiID0gNAogICAgYXNzZXJ0IGE9PWIKPHxmaW1fZW5kfD4="]
["c1e5cb68755b4f48fe680e6ef71d2a8a6a0b2bff-2","c1e5cb68755b4f48fe680e6ef71d2a8a6a0b2bff","PHxmaW1fcHJlZml4fD4KCgpkZWYgdGVzdF9nZW5lcmljKCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGEgPSA0CiAgICBiID0gNAogICAgYXNzZXJ0IGE9PWIKPHxmaW1fZW5kfD4="]
["975cf75019d562c7ee420a34a7c15dabbe20bedd-1","975cf75019d562c7ee420a34a7c15dabbe20bedd","PHxmaW1fcHJlZml4fD4KCgpjbGFzcyBzZWN0aW9uOgogICAgZGVmIF9faW5pdF9fKHNlbGYsbmFtZSA9ICIiLGNvbnRlbnQ9IiIpOgogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICBzZWxmLmNvbnRlbnQgPSBjb250ZW50CiAgICAgICAgc2VsZi5zdWJzZWN0aW9ucyA9IFtdCiAgICAgICAgIyBzZWxmLnN1YnN1YnNlY3Rpb25zID0gW10KICAgIGRlZiBhZGRjb250ZW50KHNlbGYsY29udGVudD0iIik6CiAgICAgICAgc2VsZi5jb250ZW50ID0gY29udGVudAogICAgZGVmIGFkZHN1YnNlY3Rpb24oc2VsZixzMSk6CiAgICAgICAgc2VsZi5zdWJzZWN0aW9ucy5hcHBlbmQoczEpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAjIHNlbGYuY29udGVudCArPSAiXG5cblxcc3Vic2VjdGlvbnsiK3MubmFtZSsifVxuIgogICAgICAgICMgc2VsZi5jb250ZW50Kz1zLmNvbnRlbnQrIlxuIgogICAgCgo8fGZpbV9lbmR8Pg=="]
["975cf75019d562c7ee420a34a7c15dabbe20bedd-2","975cf75019d562c7ee420a34a7c15dabbe20bedd","PHxmaW1fcHJlZml4fD4KCgpjbGFzcyBzZWN0aW9uOgogICAgZGVmIF9faW5pdF9fKHNlbGYsbmFtZSA9ICIiLGNvbnRlbnQ9IiIpOgogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICBzZWxmLmNvbnRlbnQgPSBjb250ZW50CiAgICAgICAgc2VsZi5zdWJzZWN0aW9ucyA9IFtdCiAgICAgICAgIyBzZWxmLnN1YnN1YnNlY3Rpb25zID0gW10KICAgIGRlZiBhZGRjb250ZW50KHNlbGYsY29udGVudD0iIik6CiAgICAgICAgc2VsZi5jb250ZW50ID0gY29udGVudAogICAgZGVmIGFkZHN1YnNlY3Rpb24oc2VsZixzMSk6Cjx8ZmltX2hvbGV8PgoKCgoKICAgIAogICAgIAo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuc3Vic2VjdGlvbnMuYXBwZW5kKHMxKQogICAgICAgICMgc2VsZi5jb250ZW50ICs9ICJcblxuXFxzdWJzZWN0aW9ueyIrcy5uYW1lKyJ9XG4iCiAgICAgICAgIyBzZWxmLmNvbnRlbnQrPXMuY29udGVudCsiXG4iCiAgICAKPHxmaW1fZW5kfD4="]
["01c56733ecf00c8944680485347ea7235a6f3761-1","01c56733ecf00c8944680485347ea7235a6f3761","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgppbXBvcnQgc2lnbmFsCmZyb20gcHltb25nbyBpbXBvcnQgTW9uZ29DbGllbnQKZnJvbSBmbGFzayBpbXBvcnQgRmxhc2ssIHJlcXVlc3QsIHJlZGlyZWN0LCByZW5kZXJfdGVtcGxhdGUKCmFwcCA9IEZsYXNrKF9fbmFtZV9fKQoKQGFwcC5yb3V0ZSgnLycsIG1ldGhvZHM9WydHRVQnXSkKZGVmIGhlbGxvX3dvcmxkKCk6CiAgICBtb3RkPWdldF9tb3RkKCkKICAgIG1lc3NhZ2VfbGlzdD1nZXRfbWVzc2FnZXMoKQogICAgcmV0dXJuIHJlbmRlcl90ZW1wbGF0ZSgnbWFpbi5qaW5qYScsIG1vdGQ9bW90ZCwgbWVzc2FnZV9saXN0PW1lc3NhZ2VfbGlzdCkKCkBhcHAucm91dGUoJy8nLCBtZXRob2RzPVsnUE9TVCddKQpkZWYgc2F2ZV9tZXNzYWdlKCk6CiAgICBpZiBkYXRhYmFzZV9lbmFibGVkOgogICAgICAgIG1lc3NhZ2UgPSByZXF1ZXN0LmZvcm1bJ3RleHQnXQogICAgICAgIGRiLm1lc3NhZ2VzLmluc2VydF9vbmUoeyJ0ZXh0IjptZXNzYWdlfSkKICAgIHJldHVybiByZWRpcmVjdCgnLycpCgpkZWYgZ2V0X21lc3NhZ2VzKCk6CiAgICBpZiBkYXRhYmFzZV9lbmFibGVkOgogICAgICAgIHRyeToKICAgICAgICAgICAgcmV0dXJuIFttZXNzYWdlIGZvciBtZXNzYWdlIGluIGRiLm1lc3NhZ2VzLmZpbmQoKV0KICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHJldHVybiBOb25lCiAgICBlbHNlOgogICAgICAgIHJldHVybiBOb25lCgpkZWYgZ2V0X21vdGQoKToKICAgIHRyeToKICAgICAgICBtZXNzYWdlID0gb3BlbignL3dlYmNvbmZpZy9tb3RkJywncicpLnJlYWQoKQogICAgICAgIHJldHVybiBtZXNzYWdlCiAgICBleGNlcHQ6CiAgICAgICAgcmV0dXJuIE5vbmUKCmRlZiBzaWd0ZXJtX2hhbmRsZXIoX3NpZ25vLCBfc3RhY2tfZnJhbWUpOgogICAgc3lzLmV4aXQoMCkKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICB0cnk6CiAgICAgICAgZGJuYW1lID0gZW52aXJvblsnZGF0YWJhc2VfbmFtZSddCiAgICAgICAgZGJ1c2VyID0gZW52aXJvblsndXNlcm5hbWUnXQogICAgICAgIGRicGFzcyA9IGVudmlyb25bJ3Bhc3N3b3JkJ10KICAgICAgICBjbGllbnQgPSBNb25nb0NsaWVudCgnbW9uZ29kYjovLyVzOiVzQG1vbmdvZGIvJXMnICUgKGRidXNlcixkYnBhc3MsZGJuYW1lKSkKICAgICAgICBkYiA9IGNsaWVudFtkYm5hbWVdCiAgICAgICAgZGF0YWJhc2VfZW5hYmxlZCA9IFRydWUKICAgIGV4Y2VwdDoKICAgICAgICBkYXRhYmFzZV9lbmFibGVkID0gRmFsc2UKCiAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBzaWd0ZXJtX2hhbmRsZXIpCiAgICB0cnk6CiAgICAgICAgYXBwLnJ1bihob3N0PScwLjAuMC4wJywgcG9ydD0nODA4MCcpCiAgICBmaW5hbGx5OgogICAgICAgIHByaW50KCdFeGl0aW5nLi4uJykKPHxmaW1fc3VmZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgoKZnJvbSBvcyBpbXBvcnQgZW52aXJvbgppbXBvcnQgc3lzCjx8ZmltX2VuZHw+"]
["01c56733ecf00c8944680485347ea7235a6f3761-2","01c56733ecf00c8944680485347ea7235a6f3761","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgoKZnJvbSBvcyBpbXBvcnQgZW52aXJvbgppbXBvcnQgc3lzCmltcG9ydCBzaWduYWwKZnJvbSBweW1vbmdvIGltcG9ydCBNb25nb0NsaWVudApmcm9tIGZsYXNrIGltcG9ydCBGbGFzaywgcmVxdWVzdCwgcmVkaXJlY3QsIHJlbmRlcl90ZW1wbGF0ZQoKYXBwID0gRmxhc2soX19uYW1lX18pCgpAYXBwLnJvdXRlKCcvJywgbWV0aG9kcz1bJ0dFVCddKQpkZWYgaGVsbG9fd29ybGQoKToKICAgIG1vdGQ9Z2V0X21vdGQoKQogICAgbWVzc2FnZV9saXN0PWdldF9tZXNzYWdlcygpCiAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKCdtYWluLmppbmphJywgbW90ZD1tb3RkLCBtZXNzYWdlX2xpc3Q9bWVzc2FnZV9saXN0KQoKQGFwcC5yb3V0ZSgnLycsIG1ldGhvZHM9WydQT1NUJ10pCmRlZiBzYXZlX21lc3NhZ2UoKToKICAgIGlmIGRhdGFiYXNlX2VuYWJsZWQ6CiAgICAgICAgbWVzc2FnZSA9IHJlcXVlc3QuZm9ybVsndGV4dCddCiAgICAgICAgZGIubWVzc2FnZXMuaW5zZXJ0X29uZSh7InRleHQiOm1lc3NhZ2V9KQogICAgcmV0dXJuIHJlZGlyZWN0KCcvJykKCmRlZiBnZXRfbWVzc2FnZXMoKToKICAgIGlmIGRhdGFiYXNlX2VuYWJsZWQ6CiAgICAgICAgdHJ5OgogICAgICAgICAgICByZXR1cm4gW21lc3NhZ2UgZm9yIG1lc3NhZ2UgaW4gZGIubWVzc2FnZXMuZmluZCgpXQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIE5vbmUKCmRlZiBnZXRfbW90ZCgpOgogICAgdHJ5OgogICAgICAgIG1lc3NhZ2UgPSBvcGVuKCcvd2ViY29uZmlnL21vdGQnLCdyJykucmVhZCgpCiAgICAgICAgcmV0dXJuIG1lc3NhZ2UKICAgIGV4Y2VwdDoKICAgICAgICByZXR1cm4gTm9uZQoKZGVmIHNpZ3Rlcm1faGFuZGxlcihfc2lnbm8sIF9zdGFja19mcmFtZSk6CiAgICBzeXMuZXhpdCgwKQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHRyeToKICAgICAgICBkYm5hbWUgPSBlbnZpcm9uWydkYXRhYmFzZV9uYW1lJ10KICAgICAgICBkYnVzZXIgPSBlbnZpcm9uWyd1c2VybmFtZSddCjx8ZmltX2hvbGV8PgogICAgZXhjZXB0OgogICAgICAgIGRhdGFiYXNlX2VuYWJsZWQgPSBGYWxzZQoKICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHNpZ3Rlcm1faGFuZGxlcikKICAgIHRyeToKICAgICAgICBhcHAucnVuKGhvc3Q9JzAuMC4wLjAnLCBwb3J0PSc4MDgwJykKICAgIGZpbmFsbHk6CiAgICAgICAgcHJpbnQoJ0V4aXRpbmcuLi4nKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGRicGFzcyA9IGVudmlyb25bJ3Bhc3N3b3JkJ10KICAgICAgICBjbGllbnQgPSBNb25nb0NsaWVudCgnbW9uZ29kYjovLyVzOiVzQG1vbmdvZGIvJXMnICUgKGRidXNlcixkYnBhc3MsZGJuYW1lKSkKICAgICAgICBkYiA9IGNsaWVudFtkYm5hbWVdCiAgICAgICAgZGF0YWJhc2VfZW5hYmxlZCA9IFRydWUKPHxmaW1fZW5kfD4="]
["e7b1e45a97577b5c1ac1726d35c5d30b11438fe3-1","e7b1e45a97577b5c1ac1726d35c5d30b11438fe3","PHxmaW1fcHJlZml4fD4KIiIiIERldmVsb3BtZW50IHV0aWxpdHkgZnVuY3Rpb25zICIiIgppbXBvcnQgb3MKZnJvbSB0eXBpbmcgaW1wb3J0IEFueQpmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKZnJvbSBkamFuZ28uY29yZS5leGNlcHRpb25zIGltcG9ydCBJbXByb3Blcmx5Q29uZmlndXJlZAoKCmRlZiBnZXRfZW52X3ZhbHVlKGVudl92YXJpYWJsZTogc3RyKSAtPiBBbnk6CiAgICAiIiJHZXQgY3JlZGVudGlhbHMsIHNlY3JldCBrZXlzLCBwYXNzd29yZHMsIGV0Yy4KICAgIEZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzLCByYWlzaW5nIGEgZGVzY3JpcHRpdmUKICAgIGVycm9yIG1lc3NhZ2UgaWYgdGhleSBhcmUgbm90IHNldC4KICAgICIiIgogICAgdHJ5OgogICAgICAgIHJldHVybiBvcy5lbnZpcm9uW2Vudl92YXJpYWJsZV0KICAgIGV4Y2VwdCBLZXlFcnJvcjoKPHxmaW1faG9sZXw+CiMgZGVmIF9yZW1vdmVfYWxsX2ZpbGVuYW1lX2V4dGVuc2lvbnMoZmlsZTogUGF0aCkgLT4gc3RyOgojICAgICIiIlJlbW92ZSBvbmUgb3IgbW9yZSBmaWxlbmFtZQojICAgIGV4dGVuc2lvbnMgZnJvbSBhIHBhdGhsaWIuUGF0aCBvYmplY3QiIiIKIyAgICBpZiBub3QgaXNpbnN0YW5jZShmaWxlLCBQYXRoKToKIyAgICAgICAgcmFpc2UgVHlwZUVycm9yKAojICAgICAgICAgICAgZiJwYXJhbSAnZmlsZScgZXhwZWN0ZWQgdG8gYmUgYHBhdGhsaWIuUGF0aGAsIGdvdCB7dHlwZShmaWxlKX0gaW5zdGVhZCIKIyAgICAgICAgKQojICAgIGV4dGVuc2lvbnMgPSAiIi5qb2luKGZpbGUuc3VmZml4ZXMpCiMgICAgcmV0dXJuIHN0cihmaWxlKS5yZXBsYWNlKGV4dGVuc2lvbnMsICIiKQojCiMKIyBkZWYgX3JlcGxhY2VfZmlsZW5hbWVfZXh0ZW5zaW9uKGZpbGU6IFBhdGgsIG5ld19leHRlbnNpb246IHN0cikgLT4gc3RyOgojICAgICIiIlJlbW92ZSBhbGwgZmlsZW5hbWUgZXh0ZW5zaW9ucyBhbmQgYXBwZW5kIGBuZXdfZXh0ZW5zaW9uYCIiIgojICAgIGlmIG5ld19leHRlbnNpb24uc3RhcnRzd2l0aCgiLiIpOgojICAgICAgICBuZXdfZXh0ZW5zaW9uID0gbmV3X2V4dGVuc2lvblsxOl0KIyAgICByZXR1cm4gX3JlbW92ZV9hbGxfZmlsZW5hbWVfZXh0ZW5zaW9ucyhmaWxlKSArIGYiLntuZXdfZXh0ZW5zaW9ufSIKPHxmaW1fc3VmZml4fD4KICAgICAgICBlcnJvcl9tc2cgPSBmIlNldCB0aGUge2Vudl92YXJpYWJsZX0gZW52aXJvbm1lbnQgdmFyaWFibGUiCiAgICAgICAgcmFpc2UgSW1wcm9wZXJseUNvbmZpZ3VyZWQoZXJyb3JfbXNnKSBmcm9tIE5vbmUKCgo8fGZpbV9lbmR8Pg=="]
["e7b1e45a97577b5c1ac1726d35c5d30b11438fe3-2","e7b1e45a97577b5c1ac1726d35c5d30b11438fe3","PHxmaW1fcHJlZml4fD4KIiIiIERldmVsb3BtZW50IHV0aWxpdHkgZnVuY3Rpb25zICIiIgppbXBvcnQgb3MKZnJvbSB0eXBpbmcgaW1wb3J0IEFueQpmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKZnJvbSBkamFuZ28uY29yZS5leGNlcHRpb25zIGltcG9ydCBJbXByb3Blcmx5Q29uZmlndXJlZAoKCmRlZiBnZXRfZW52X3ZhbHVlKGVudl92YXJpYWJsZTogc3RyKSAtPiBBbnk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICIiIkdldCBjcmVkZW50aWFscywgc2VjcmV0IGtleXMsIHBhc3N3b3JkcywgZXRjLgogICAgRnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHJhaXNpbmcgYSBkZXNjcmlwdGl2ZQogICAgZXJyb3IgbWVzc2FnZSBpZiB0aGV5IGFyZSBub3Qgc2V0LgogICAgIiIiCjx8ZmltX2VuZHw+"]
["8248139a211e1f6d0e5a3b14a93602383c6e8225-1","8248139a211e1f6d0e5a3b14a93602383c6e8225","PHxmaW1fcHJlZml4fD4Kc19BID0gZGZfcHVyY2hhc2VfaXhbJ0EnXQpzX0FfMCA9IHNfQS5yZXBsYWNlKHsxOiAyfSkKc19BXzAucmVwbGFjZSh7MDogMX0saW5wbGFjZT1UcnVlKQpzX0FfMC5yZXBsYWNlKHsyOiAwfSxpbnBsYWNlPVRydWUpCmRmX0FfMCA9IHBkLkRhdGFGcmFtZShzX0FfMCwgY29sdW1ucz1bJ0FfMCddKQpzX0FfMSA9IHNfQS5yZXBsYWNlKHsyOiAwfSkKZGZfQV8xID0gcGQuRGF0YUZyYW1lKHNfQV8xLCBjb2x1bW5zPVsnQV8xJ10pCnNfQV8yID0gc19BLnJlcGxhY2UoezE6IDB9KQpzX0FfMi5yZXBsYWNlKHsyOiAxfSxpbnBsYWNlPVRydWUpCmRmX0FfMiA9IHBkLkRhdGFGcmFtZShzX0FfMiwgY29sdW1ucz1bJ0FfMiddKQoKc19CID0gZGZfcHVyY2hhc2VfaXhbJ0InXQpzX0JfMSA9IHNfQgpkZl9CXzEgPSBwZC5EYXRhRnJhbWUoc19CXzEsIGNvbHVtbnM9WydCXzEnXSkKCnNfQyA9IGRmX3B1cmNoYXNlX2l4WydDJ10Kc19DXzEgPSBzX0MucmVwbGFjZSh7MjogMH0pCnNfQ18xLnJlcGxhY2UoezM6IDB9LGlucGxhY2U9VHJ1ZSkKc19DXzEucmVwbGFjZSh7NDogMH0saW5wbGFjZT1UcnVlKQpkZl9DXzEgPSBwZC5EYXRhRnJhbWUoc19DXzEsIGNvbHVtbnM9WydDXzEnXSkKc19DXzIgPSBzX0MucmVwbGFjZSh7MTogMH0pCnNfQ18yLnJlcGxhY2UoezI6IDF9LGlucGxhY2U9VHJ1ZSkKc19DXzIucmVwbGFjZSh7MzogMH0saW5wbGFjZT1UcnVlKQpzX0NfMi5yZXBsYWNlKHs0OiAwfSxpbnBsYWNlPVRydWUpCmRmX0NfMiA9IHBkLkRhdGFGcmFtZShzX0NfMiwgY29sdW1ucz1bJ0NfMiddKQpzX0NfMyA9IHNfQy5yZXBsYWNlKHsxOiAwfSkKc19DXzMucmVwbGFjZSh7MjogMH0saW5wbGFjZT1UcnVlKQpzX0NfMy5yZXBsYWNlKHszOiAxfSxpbnBsYWNlPVRydWUpCnNfQ18zLnJlcGxhY2UoezQ6IDB9LGlucGxhY2U9VHJ1ZSkKZGZfQ18zID0gcGQuRGF0YUZyYW1lKHNfQ18zLCBjb2x1bW5zPVsnQ18zJ10pCnNfQ180ID0gc19DLnJlcGxhY2UoezE6IDB9KQpzX0NfNC5yZXBsYWNlKHsyOiAwfSxpbnBsYWNlPVRydWUpCnNfQ180LnJlcGxhY2UoezM6IDB9LGlucGxhY2U9VHJ1ZSkKc19DXzQucmVwbGFjZSh7NDogMX0saW5wbGFjZT1UcnVlKQpkZl9DXzQgPSBwZC5EYXRhRnJhbWUoc19DXzQsIGNvbHVtbnM9WydDXzQnXSkKCnNfRCA9IGRmX3B1cmNoYXNlX2l4WydEJ10Kc19EXzEgPSBzX0QucmVwbGFjZSh7MjogMH0pCnNfRF8xLnJlcGxhY2UoezM6IDB9LGlucGxhY2U9VHJ1ZSkKZGZfRF8xID0gcGQuRGF0YUZyYW1lKHNfRF8xLCBjb2x1bW5zPVsnRF8xJ10pCnNfRF8yID0gc19ELnJlcGxhY2UoezE6IDB9KQpzX0RfMi5yZXBsYWNlKHsyOiAxfSxpbnBsYWNlPVRydWUpCnNfRF8yLnJlcGxhY2UoezM6IDB9LGlucGxhY2U9VHJ1ZSkKZGZfRF8yID0gcGQuRGF0YUZyYW1lKHNfRF8yLCBjb2x1bW5zPVsnRF8yJ10pCnNfRF8zID0gc19ELnJlcGxhY2UoezE6IDB9KQpzX0RfMy5yZXBsYWNlKHsyOiAwfSxpbnBsYWNlPVRydWUpCnNfRF8zLnJlcGxhY2UoezM6IDF9LGlucGxhY2U9VHJ1ZSkKZGZfRF8zID0gcGQuRGF0YUZyYW1lKHNfRF8zLCBjb2x1bW5zPVsnRF8zJ10pCgpzX0UgPSBkZl9wdXJjaGFzZV9peFsnRSddCnNfRV8xID0gc19FCmRmX0VfMSA9IHBkLkRhdGFGcmFtZShzX0VfMSwgY29sdW1ucz1bJ0VfMSddKQoKc19GID0gZGZfcHVyY2hhc2VfaXhbJ0YnXQpzX0ZfMCA9IHNfRi5yZXBsYWNlKHsxOiAyfSkKc19GXzAucmVwbGFjZSh7MDogMX0saW5wbGFjZT1UcnVlKQpzX0ZfMC5yZXBsYWNlKHsyOiAwfSxpbnBsYWNlPVRydWUpCnNfRl8wLnJlcGxhY2UoezM6IDB9LGlucGxhY2U9VHJ1ZSkKZGZfRl8wID0gcGQuRGF0YUZyYW1lKHNfRl8wLCBjb2x1bW5zPVsnRl8wJ10pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4Kc19GXzEgPSBzX0YucmVwbGFjZSh7MjogMH0pCnNfRl8xLnJlcGxhY2UoezM6IDB9LGlucGxhY2U9VHJ1ZSkKZGZfRl8xID0gcGQuRGF0YUZyYW1lKHNfRl8xLCBjb2x1bW5zPVsnRl8xJ10pCnNfRl8yID0gc19GLnJlcGxhY2UoezE6IDB9KQo8fGZpbV9lbmR8Pg=="]
["8248139a211e1f6d0e5a3b14a93602383c6e8225-2","8248139a211e1f6d0e5a3b14a93602383c6e8225","PHxmaW1fcHJlZml4fD4Kc19BID0gZGZfcHVyY2hhc2VfaXhbJ0EnXQpzX0FfMCA9IHNfQS5yZXBsYWNlKHsxOiAyfSkKc19BXzAucmVwbGFjZSh7MDogMX0saW5wbGFjZT1UcnVlKQpzX0FfMC5yZXBsYWNlKHsyOiAwfSxpbnBsYWNlPVRydWUpCmRmX0FfMCA9IHBkLkRhdGFGcmFtZShzX0FfMCwgY29sdW1ucz1bJ0FfMCddKQpzX0FfMSA9IHNfQS5yZXBsYWNlKHsyOiAwfSkKZGZfQV8xID0gcGQuRGF0YUZyYW1lKHNfQV8xLCBjb2x1bW5zPVsnQV8xJ10pCnNfQV8yID0gc19BLnJlcGxhY2UoezE6IDB9KQpzX0FfMi5yZXBsYWNlKHsyOiAxfSxpbnBsYWNlPVRydWUpCmRmX0FfMiA9IHBkLkRhdGFGcmFtZShzX0FfMiwgY29sdW1ucz1bJ0FfMiddKQoKc19CID0gZGZfcHVyY2hhc2VfaXhbJ0InXQpzX0JfMSA9IHNfQgpkZl9CXzEgPSBwZC5EYXRhRnJhbWUoc19CXzEsIGNvbHVtbnM9WydCXzEnXSkKCnNfQyA9IGRmX3B1cmNoYXNlX2l4WydDJ10Kc19DXzEgPSBzX0MucmVwbGFjZSh7MjogMH0pCnNfQ18xLnJlcGxhY2UoezM6IDB9LGlucGxhY2U9VHJ1ZSkKc19DXzEucmVwbGFjZSh7NDogMH0saW5wbGFjZT1UcnVlKQpkZl9DXzEgPSBwZC5EYXRhRnJhbWUoc19DXzEsIGNvbHVtbnM9WydDXzEnXSkKc19DXzIgPSBzX0MucmVwbGFjZSh7MTogMH0pCnNfQ18yLnJlcGxhY2UoezI6IDF9LGlucGxhY2U9VHJ1ZSkKc19DXzIucmVwbGFjZSh7MzogMH0saW5wbGFjZT1UcnVlKQpzX0NfMi5yZXBsYWNlKHs0OiAwfSxpbnBsYWNlPVRydWUpCmRmX0NfMiA9IHBkLkRhdGFGcmFtZShzX0NfMiwgY29sdW1ucz1bJ0NfMiddKQpzX0NfMyA9IHNfQy5yZXBsYWNlKHsxOiAwfSkKc19DXzMucmVwbGFjZSh7MjogMH0saW5wbGFjZT1UcnVlKQpzX0NfMy5yZXBsYWNlKHszOiAxfSxpbnBsYWNlPVRydWUpCnNfQ18zLnJlcGxhY2UoezQ6IDB9LGlucGxhY2U9VHJ1ZSkKZGZfQ18zID0gcGQuRGF0YUZyYW1lKHNfQ18zLCBjb2x1bW5zPVsnQ18zJ10pCnNfQ180ID0gc19DLnJlcGxhY2UoezE6IDB9KQpzX0NfNC5yZXBsYWNlKHsyOiAwfSxpbnBsYWNlPVRydWUpCnNfQ180LnJlcGxhY2UoezM6IDB9LGlucGxhY2U9VHJ1ZSkKc19DXzQucmVwbGFjZSh7NDogMX0saW5wbGFjZT1UcnVlKQpkZl9DXzQgPSBwZC5EYXRhRnJhbWUoc19DXzQsIGNvbHVtbnM9WydDXzQnXSkKCnNfRCA9IGRmX3B1cmNoYXNlX2l4WydEJ10Kc19EXzEgPSBzX0QucmVwbGFjZSh7MjogMH0pCnNfRF8xLnJlcGxhY2UoezM6IDB9LGlucGxhY2U9VHJ1ZSkKZGZfRF8xID0gcGQuRGF0YUZyYW1lKHNfRF8xLCBjb2x1bW5zPVsnRF8xJ10pCnNfRF8yID0gc19ELnJlcGxhY2UoezE6IDB9KQpzX0RfMi5yZXBsYWNlKHsyOiAxfSxpbnBsYWNlPVRydWUpCnNfRF8yLnJlcGxhY2UoezM6IDB9LGlucGxhY2U9VHJ1ZSkKZGZfRF8yID0gcGQuRGF0YUZyYW1lKHNfRF8yLCBjb2x1bW5zPVsnRF8yJ10pCnNfRF8zID0gc19ELnJlcGxhY2UoezE6IDB9KQpzX0RfMy5yZXBsYWNlKHsyOiAwfSxpbnBsYWNlPVRydWUpCnNfRF8zLnJlcGxhY2UoezM6IDF9LGlucGxhY2U9VHJ1ZSkKZGZfRF8zID0gcGQuRGF0YUZyYW1lKHNfRF8zLCBjb2x1bW5zPVsnRF8zJ10pCgpzX0UgPSBkZl9wdXJjaGFzZV9peFsnRSddCnNfRV8xID0gc19FCmRmX0VfMSA9IHBkLkRhdGFGcmFtZShzX0VfMSwgY29sdW1ucz1bJ0VfMSddKQoKc19GID0gZGZfcHVyY2hhc2VfaXhbJ0YnXQpzX0ZfMCA9IHNfRi5yZXBsYWNlKHsxOiAyfSkKc19GXzAucmVwbGFjZSh7MDogMX0saW5wbGFjZT1UcnVlKQpzX0ZfMC5yZXBsYWNlKHsyOiAwfSxpbnBsYWNlPVRydWUpCnNfRl8wLnJlcGxhY2UoezM6IDB9LGlucGxhY2U9VHJ1ZSkKZGZfRl8wID0gcGQuRGF0YUZyYW1lKHNfRl8wLCBjb2x1bW5zPVsnRl8wJ10pCnNfRl8xID0gc19GLnJlcGxhY2UoezI6IDB9KQpzX0ZfMS5yZXBsYWNlKHszOiAwfSxpbnBsYWNlPVRydWUpCmRmX0ZfMSA9IHBkLkRhdGFGcmFtZShzX0ZfMSwgY29sdW1ucz1bJ0ZfMSddKQpzX0ZfMiA9IHNfRi5yZXBsYWNlKHsxOiAwfSkKc19GXzIucmVwbGFjZSh7MjogMX0saW5wbGFjZT1UcnVlKQpzX0ZfMi5yZXBsYWNlKHszOiAwfSxpbnBsYWNlPVRydWUpCmRmX0ZfMiA9IHBkLkRhdGFGcmFtZShzX0ZfMiwgY29sdW1ucz1bJ0ZfMSddKQpzX0ZfMyA9IHNfRi5yZXBsYWNlKHsxOiAwfSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpzX0ZfMy5yZXBsYWNlKHsyOiAwfSxpbnBsYWNlPVRydWUpCnNfRl8zLnJlcGxhY2UoezM6IDF9LGlucGxhY2U9VHJ1ZSkKZGZfRl8zID0gcGQuRGF0YUZyYW1lKHNfRl8zLCBjb2x1bW5zPVsnRl8zJ10pCgo8fGZpbV9lbmR8Pg=="]
["99f0324918283479cce148f2ce95b653d2884f89-1","99f0324918283479cce148f2ce95b653d2884f89","PHxmaW1fcHJlZml4fD4KZGVmIHNvbHV0aW9uKGEsIGIpOgogICAgd2VlayA9IFsnRlJJJywnU0FUJywnU1VOJywnTU9OJywnVFVFJywnV0VEJywnVEhVJ10KICAgIG1vbnRoID0gWzMxLDI5LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXQogICAgI+yblOydgCAx7JuU67aA7YSwIOyLnOyekSw07JuU7J20652866m0IDPsm5TquYzsp4Drp4wg642U7ZW07JW8IO2VmOuvgOuhnCBhLTEKICAgIGRheSA9IHN1bShtb250aFswOmEtMV0pICsgYgogICAgCiAgICBhbnN3ZXIgPSB3ZWVrWyhkYXklNyktMV0KICAgIHJldHVybiBhbnN3ZXIKCiPsmpTsnbzsnZgg7J2066aEIOyggOyepSA6U1VOLE1PTixUVUUsV0VELFRIVSxGUkksU0FUCiPsnKTrhYQgOiAyLzI57J286rmM7KeAIC0+IDHrhYQgPSAzNjbsnbwKIzHsm5QgMeydvOu2gO2EsCDsnbzsiJjroZwg6rOE7IKw7ZWY6rOgLCAlNyA9IHdlZWvsnZggP+uyiOynuCDsmpTshowKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKIVtpbWFnZS0yMDIxMDYyNzIwMzEyMTEwNl0oQzpcVXNlcnNcbWluYTFcQXBwRGF0YVxSb2FtaW5nXFR5cG9yYVx0eXBvcmEtdXNlci1pbWFnZXNcaW1hZ2UtMjAyMTA2MjcyMDMxMjExMDYucG5nKQoKIVtpbWFnZS0yMDIxMDYyNzIwMzE1MzYyMl0oQzpcVXNlcnNcbWluYTFcQXBwRGF0YVxSb2FtaW5nXFR5cG9yYVx0eXBvcmEtdXNlci1pbWFnZXNcaW1hZ2UtMjAyMTA2MjcyMDMxNTM2MjIucG5nKQo8fGZpbV9lbmR8Pg=="]
["99f0324918283479cce148f2ce95b653d2884f89-2","99f0324918283479cce148f2ce95b653d2884f89","PHxmaW1fcHJlZml4fD4KZGVmIHNvbHV0aW9uKGEsIGIpOgogICAgd2VlayA9IFsnRlJJJywnU0FUJywnU1VOJywnTU9OJywnVFVFJywnV0VEJywnVEhVJ10KICAgIG1vbnRoID0gWzMxLDI5LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXQogICAgI+yblOydgCAx7JuU67aA7YSwIOyLnOyekSw07JuU7J20652866m0IDPsm5TquYzsp4Drp4wg642U7ZW07JW8IO2VmOuvgOuhnCBhLTEKICAgIGRheSA9IHN1bShtb250aFswOmEtMV0pICsgYgogICAgCiAgICBhbnN3ZXIgPSB3ZWVrWyhkYXklNyktMV0KICAgIHJldHVybiBhbnN3ZXIKCiPsmpTsnbzsnZgg7J2066aEIOyggOyepSA6U1VOLE1PTixUVUUsV0VELFRIVSxGUkksU0FUCiPsnKTrhYQgOiAyLzI57J286rmM7KeAIC0+IDHrhYQgPSAzNjbsnbwKPHxmaW1faG9sZXw+CiFbaW1hZ2UtMjAyMTA2MjcyMDMxNTM2MjJdKEM6XFVzZXJzXG1pbmExXEFwcERhdGFcUm9hbWluZ1xUeXBvcmFcdHlwb3JhLXVzZXItaW1hZ2VzXGltYWdlLTIwMjEwNjI3MjAzMTUzNjIyLnBuZykKCjx8ZmltX3N1ZmZpeHw+CiMx7JuUIDHsnbzrtoDthLAg7J287IiY66GcIOqzhOyCsO2VmOqzoCwgJTcgPSB3ZWVr7J2YID/rsojsp7gg7JqU7IaMCgohW2ltYWdlLTIwMjEwNjI3MjAzMTIxMTA2XShDOlxVc2Vyc1xtaW5hMVxBcHBEYXRhXFJvYW1pbmdcVHlwb3JhXHR5cG9yYS11c2VyLWltYWdlc1xpbWFnZS0yMDIxMDYyNzIwMzEyMTEwNi5wbmcpCgo8fGZpbV9lbmR8Pg=="]
["99f0324918283479cce148f2ce95b653d2884f89-3","99f0324918283479cce148f2ce95b653d2884f89","PHxmaW1fcHJlZml4fD4KZGVmIHNvbHV0aW9uKGEsIGIpOgogICAgd2VlayA9IFsnRlJJJywnU0FUJywnU1VOJywnTU9OJywnVFVFJywnV0VEJywnVEhVJ10KICAgIG1vbnRoID0gWzMxLDI5LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXQogICAgI+yblOydgCAx7JuU67aA7YSwIOyLnOyekSw07JuU7J20652866m0IDPsm5TquYzsp4Drp4wg642U7ZW07JW8IO2VmOuvgOuhnCBhLTEKICAgIGRheSA9IHN1bShtb250aFswOmEtMV0pICsgYgogICAgCiAgICBhbnN3ZXIgPSB3ZWVrWyhkYXklNyktMV0KICAgIHJldHVybiBhbnN3ZXIKCiPsmpTsnbzsnZgg7J2066aEIOyggOyepSA6U1VOLE1PTixUVUUsV0VELFRIVSxGUkksU0FUCiPsnKTrhYQgOiAyLzI57J286rmM7KeAIC0+IDHrhYQgPSAzNjbsnbwKIzHsm5QgMeydvOu2gO2EsCDsnbzsiJjroZwg6rOE7IKw7ZWY6rOgLCAlNyA9IHdlZWvsnZggP+uyiOynuCDsmpTshowKCiFbaW1hZ2UtMjAyMTA2MjcyMDMxMjExMDZdKEM6XFVzZXJzXG1pbmExXEFwcERhdGFcUm9hbWluZ1xUeXBvcmFcdHlwb3JhLXVzZXItaW1hZ2VzXGltYWdlLTIwMjEwNjI3MjAzMTIxMTA2LnBuZykKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIVtpbWFnZS0yMDIxMDYyNzIwMzE1MzYyMl0oQzpcVXNlcnNcbWluYTFcQXBwRGF0YVxSb2FtaW5nXFR5cG9yYVx0eXBvcmEtdXNlci1pbWFnZXNcaW1hZ2UtMjAyMTA2MjcyMDMxNTM2MjIucG5nKQoKPHxmaW1fZW5kfD4="]
["99f0324918283479cce148f2ce95b653d2884f89-4","99f0324918283479cce148f2ce95b653d2884f89","PHxmaW1fcHJlZml4fD4KZGVmIHNvbHV0aW9uKGEsIGIpOgogICAgd2VlayA9IFsnRlJJJywnU0FUJywnU1VOJywnTU9OJywnVFVFJywnV0VEJywnVEhVJ10KICAgIG1vbnRoID0gWzMxLDI5LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXQogICAgI+yblOydgCAx7JuU67aA7YSwIOyLnOyekSw07JuU7J20652866m0IDPsm5TquYzsp4Drp4wg642U7ZW07JW8IO2VmOuvgOuhnCBhLTEKICAgIGRheSA9IHN1bShtb250aFswOmEtMV0pICsgYgogICAgCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGFuc3dlciA9IHdlZWtbKGRheSU3KS0xXQogICAgcmV0dXJuIGFuc3dlcgoKPHxmaW1fZW5kfD4="]
["99f0324918283479cce148f2ce95b653d2884f89-5","99f0324918283479cce148f2ce95b653d2884f89","PHxmaW1fcHJlZml4fD4KZGVmIHNvbHV0aW9uKGEsIGIpOgogICAgd2VlayA9IFsnRlJJJywnU0FUJywnU1VOJywnTU9OJywnVFVFJywnV0VEJywnVEhVJ10KICAgIG1vbnRoID0gWzMxLDI5LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXQogICAgI+yblOydgCAx7JuU67aA7YSwIOyLnOyekSw07JuU7J20652866m0IDPsm5TquYzsp4Drp4wg642U7ZW07JW8IO2VmOuvgOuhnCBhLTEKICAgIGRheSA9IHN1bShtb250aFswOmEtMV0pICsgYgogICAgCjx8ZmltX2hvbGV8Pgoj7JqU7J287J2YIOydtOumhCDsoIDsnqUgOlNVTixNT04sVFVFLFdFRCxUSFUsRlJJLFNBVAoj7Jyk64WEIDogMi8yOeydvOq5jOyngCAtPiAx64WEID0gMzY27J28CiMx7JuUIDHsnbzrtoDthLAg7J287IiY66GcIOqzhOyCsO2VmOqzoCwgJTcgPSB3ZWVr7J2YID/rsojsp7gg7JqU7IaMCgohW2ltYWdlLTIwMjEwNjI3MjAzMTIxMTA2XShDOlxVc2Vyc1xtaW5hMVxBcHBEYXRhXFJvYW1pbmdcVHlwb3JhXHR5cG9yYS11c2VyLWltYWdlc1xpbWFnZS0yMDIxMDYyNzIwMzEyMTEwNi5wbmcpCgohW2ltYWdlLTIwMjEwNjI3MjAzMTUzNjIyXShDOlxVc2Vyc1xtaW5hMVxBcHBEYXRhXFJvYW1pbmdcVHlwb3JhXHR5cG9yYS11c2VyLWltYWdlc1xpbWFnZS0yMDIxMDYyNzIwMzE1MzYyMi5wbmcpCgo8fGZpbV9zdWZmaXh8PgogICAgYW5zd2VyID0gd2Vla1soZGF5JTcpLTFdCiAgICByZXR1cm4gYW5zd2VyCgo8fGZpbV9lbmR8Pg=="]
["1e9089ab08d7968c523faccf084901915191d5cf-1","1e9089ab08d7968c523faccf084901915191d5cf","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAoKZnJvbSBjb3B5IGltcG9ydCBkZWVwY29weQpmcm9tIHR5cGluZyBpbXBvcnQgQ2FsbGFibGUsIERpY3QsIExpc3QsIE5vUmV0dXJuLCBPcHRpb25hbCwgVW5pb24KCmltcG9ydCBudW1weSBhcyBucApmcm9tIHNrbGVhcm4uY2x1c3RlciBpbXBvcnQgS01lYW5zLCBNaW5pQmF0Y2hLTWVhbnMKCmZyb20gbWFid2lzZXIuYmFzZV9tYWIgaW1wb3J0IEJhc2VNQUIKZnJvbSBtYWJ3aXNlci5ncmVlZHkgaW1wb3J0IF9FcHNpbG9uR3JlZWR5CmZyb20gbWFid2lzZXIubGluZWFyIGltcG9ydCBfTGluZWFyCmZyb20gbWFid2lzZXIucmFuZCBpbXBvcnQgX1JhbmRvbQpmcm9tIG1hYndpc2VyLnNvZnRtYXggaW1wb3J0IF9Tb2Z0bWF4CmZyb20gbWFid2lzZXIudGhvbXBzb24gaW1wb3J0IF9UaG9tcHNvblNhbXBsaW5nCmZyb20gbWFid2lzZXIudWNiIGltcG9ydCBfVUNCMQpmcm9tIG1hYndpc2VyLnV0aWxzIGltcG9ydCBBcm0sIE51bSwgcmVzZXQsIF9CYXNlUk5HLCBjcmVhdGVfcm5nCgoKY2xhc3MgX0NsdXN0ZXJzKEJhc2VNQUIpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBybmc6IF9CYXNlUk5HLCBhcm1zOiBMaXN0W0FybV0sIG5fam9iczogaW50LCBiYWNrZW5kOiBPcHRpb25hbFtzdHJdLAogICAgICAgICAgICAgICAgIGxwOiBVbmlvbltfRXBzaWxvbkdyZWVkeSwgX0xpbmVhciwgX1JhbmRvbSwgX1NvZnRtYXgsIF9UaG9tcHNvblNhbXBsaW5nLCBfVUNCMV0sCiAgICAgICAgICAgICAgICAgbl9jbHVzdGVyczogTnVtLCBpc19taW5pYmF0Y2g6IGJvb2wpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18ocm5nLCBhcm1zLCBuX2pvYnMsIGJhY2tlbmQpCgo8fGZpbV9ob2xlfD4KICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLmttZWFucyA9IEtNZWFucyhuX2NsdXN0ZXJzLCByYW5kb21fc3RhdGU9cm5nLnNlZWQpCgogICAgICAgICMgQ3JlYXRlIHRoZSBsaXN0IG9mIGxlYXJuaW5nIHBvbGljaWVzIGZvciBlYWNoIGNsdXN0ZXIKICAgICAgICAjIERlZXAgY29weSBhbGwgcGFyYW1ldGVycyBvZiB0aGUgbHAgb2JqZWN0cywgZXhjZXB0IHJlZmVyIHRvIHRoZSBvcmlnaW5hbHMgb2Ygcm5nIGFuZCBhcm1zCiAgICAgICAgc2VsZi5scF9saXN0ID0gW2RlZXBjb3B5KGxwKSBmb3IgXyBpbiByYW5nZShzZWxmLm5fY2x1c3RlcnMpXQogICAgICAgIGZvciBjIGluIHJhbmdlKHNlbGYubl9jbHVzdGVycyk6CiAgICAgICAgICAgIHNlbGYubHBfbGlzdFtjXS5ybmcgPSBybmcKICAgICAgICAgICAgc2VsZi5scF9saXN0W2NdLmFybXMgPSBhcm1zCgogICAgICAgIHNlbGYuZGVjaXNpb25zID0gTm9uZQogICAgICAgIHNlbGYucmV3YXJkcyA9IE5vbmUKICAgICAgICBzZWxmLmNvbnRleHRzID0gTm9uZQoKICAgICAgICAjIEluaXRpYWxpemUgdGhlIGFybSBleHBlY3RhdGlvbnMgdG8gbmFuCiAgICAgICAgIyBXaGVuIHRoZXJlIGFyZSBuZWlnaGJvcnMsIGV4cGVjdGF0aW9ucyBvZiB0aGUgdW5kZXJseWluZyBsZWFybmluZyBwb2xpY3kgaXMgdXNlZAogICAgICAgICMgV2hlbiB0aGVyZSBhcmUgbm8gbmVpZ2hib3JzLCByZXR1cm4gbmFuIGV4cGVjdGF0aW9ucwogICAgICAgIHJlc2V0KHNlbGYuYXJtX3RvX2V4cGVjdGF0aW9uLCBucC5uYW4pCgogICAgZGVmIGZpdChzZWxmLCBkZWNpc2lvbnM6IG5wLm5kYXJyYXksIHJld2FyZHM6IG5wLm5kYXJyYXksCiAgICAgICAgICAgIGNvbnRleHRzOiBPcHRpb25hbFtucC5uZGFycmF5XSA9IE5vbmUpIC0+IE5vUmV0dXJuOgoKICAgICAgICAjIFNldCB0aGUgaGlzdG9yaWNhbCBkYXRhIGZvciBwcmVkaWN0aW9uCiAgICAgICAgc2VsZi5kZWNpc2lvbnMgPSBkZWNpc2lvbnMKICAgICAgICBzZWxmLmNvbnRleHRzID0gY29udGV4dHMKCiAgICAgICAgIyBCaW5hcml6ZSB0aGUgcmV3YXJkcyBpZiB1c2luZyBUaG9tcHNvbiBTYW1wbGluZwogICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5scF9saXN0WzBdLCBfVGhvbXBzb25TYW1wbGluZykgYW5kIHNlbGYubHBfbGlzdFswXS5iaW5hcml6ZXI6CiAgICAgICAgICAgIGZvciBscCBpbiBzZWxmLmxwX2xpc3Q6CiAgICAgICAgICAgICAgICBscC5pc19jb250ZXh0dWFsX2JpbmFyaXplZCA9IEZhbHNlCiAgICAgICAgICAgIHNlbGYucmV3YXJkcyA9IHNlbGYubHBfbGlzdFswXS5fZ2V0X2JpbmFyeV9yZXdhcmRzKGRlY2lzaW9ucywgcmV3YXJkcykKICAgICAgICAgICAgZm9yIGxwIGluIHNlbGYubHBfbGlzdDoKICAgICAgICAgICAgICAgIGxwLmlzX2NvbnRleHR1YWxfYmluYXJpemVkID0gVHJ1ZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYucmV3YXJkcyA9IHJld2FyZHMKCiAgICAgICAgc2VsZi5fZml0X29wZXJhdGlvbigpCgogICAgZGVmIHBhcnRpYWxfZml0KHNlbGYsIGRlY2lzaW9uczogbnAubmRhcnJheSwgcmV3YXJkczogbnAubmRhcnJheSwKICAgICAgICAgICAgICAgICAgICBjb250ZXh0czogT3B0aW9uYWxbbnAubmRhcnJheV0gPSBOb25lKSAtPiBOb1JldHVybjoKCiAgICAgICAgIyBCaW5hcml6ZSB0aGUgcmV3YXJkcyBpZiB1c2luZyBUaG9tcHNvbiBTYW1wbGluZwogICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5scF9saXN0WzBdLCBfVGhvbXBzb25TYW1wbGluZykgYW5kIHNlbGYubHBfbGlzdFswXS5iaW5hcml6ZXI6CiAgICAgICAgICAgIGZvciBscCBpbiBzZWxmLmxwX2xpc3Q6CiAgICAgICAgICAgICAgICBscC5pc19jb250ZXh0dWFsX2JpbmFyaXplZCA9IEZhbHNlCiAgICAgICAgICAgIHJld2FyZHMgPSBzZWxmLmxwX2xpc3RbMF0uX2dldF9iaW5hcnlfcmV3YXJkcyhkZWNpc2lvbnMsIHJld2FyZHMpCiAgICAgICAgICAgIGZvciBscCBpbiBzZWxmLmxwX2xpc3Q6CiAgICAgICAgICAgICAgICBscC5pc19jb250ZXh0dWFsX2JpbmFyaXplZCA9IFRydWUKCiAgICAgICAgIyBBZGQgbW9yZSBoaXN0b3JpY2FsIGRhdGEgZm9yIHByZWRpY3Rpb24KICAgICAgICBzZWxmLmRlY2lzaW9ucyA9IG5wLmNvbmNhdGVuYXRlKChzZWxmLmRlY2lzaW9ucywgZGVjaXNpb25zKSkKICAgICAgICBzZWxmLmNvbnRleHRzID0gbnAuY29uY2F0ZW5hdGUoKHNlbGYuY29udGV4dHMsIGNvbnRleHRzKSkKICAgICAgICBzZWxmLnJld2FyZHMgPSBucC5jb25jYXRlbmF0ZSgoc2VsZi5yZXdhcmRzLCByZXdhcmRzKSkKCiAgICAgICAgc2VsZi5fZml0X29wZXJhdGlvbigpCgogICAgZGVmIHByZWRpY3Qoc2VsZiwgY29udGV4dHM6IG5wLm5kYXJyYXkgPSBOb25lKSAtPiBVbmlvbltBcm0sIExpc3RbQXJtXV06CiAgICAgICAgIyBSZXR1cm4gcHJlZGljdCB3aXRoaW4gdGhlIGNsdXN0ZXIKICAgICAgICByZXR1cm4gc2VsZi5fcGFyYWxsZWxfcHJlZGljdChjb250ZXh0cywgaXNfcHJlZGljdD1UcnVlKQoKICAgIGRlZiBwcmVkaWN0X2V4cGVjdGF0aW9ucyhzZWxmLCBjb250ZXh0czogbnAubmRhcnJheSA9IE5vbmUpIC0+IFVuaW9uW0RpY3RbQXJtLCBOdW1dLCBMaXN0W0RpY3RbQXJtLCBOdW1dXV06CiAgICAgICAgIyBSZXR1cm4gcHJlZGljdCBleHBlY3RhdGlvbnMgd2l0aGluIHRoZSBjbHVzdGVyCiAgICAgICAgcmV0dXJuIHNlbGYuX3BhcmFsbGVsX3ByZWRpY3QoY29udGV4dHMsIGlzX3ByZWRpY3Q9RmFsc2UpCgogICAgZGVmIHdhcm1fc3RhcnQoc2VsZiwgYXJtX3RvX2ZlYXR1cmVzOiBEaWN0W0FybSwgTGlzdFtOdW1dXSwgZGlzdGFuY2VfcXVhbnRpbGU6IGZsb2F0KToKICAgICAgICBmb3IgYyBpbiByYW5nZShzZWxmLm5fY2x1c3RlcnMpOgogICAgICAgICAgICBzZWxmLmxwX2xpc3RbY10ud2FybV9zdGFydChhcm1fdG9fZmVhdHVyZXMsIGRpc3RhbmNlX3F1YW50aWxlKQoKICAgIGRlZiBfY29weV9hcm1zKHNlbGYsIGNvbGRfYXJtX3RvX3dhcm1fYXJtKToKICAgICAgICBwYXNzCgogICAgZGVmIF91cHRha2VfbmV3X2FybShzZWxmLCBhcm06IEFybSwgYmluYXJpemVyOiBDYWxsYWJsZSA9IE5vbmUsIHNjYWxlcjogQ2FsbGFibGUgPSBOb25lKToKCiAgICAgICAgIyBVcGRhdGUgZWFjaCBsZWFybmluZyBwb2xpY3kKICAgICAgICBmb3IgbHAgaW4gc2VsZi5scF9saXN0OgogICAgICAgICAgICBscC5hZGRfYXJtKGFybSwgYmluYXJpemVyKQoKICAgIGRlZiBfZHJvcF9leGlzdGluZ19hcm0oc2VsZiwgYXJtOiBBcm0pIC0+IE5vUmV0dXJuOgogICAgICAgICMgVXBkYXRlIGVhY2ggbGVhcm5pbmcgcG9saWN5CiAgICAgICAgZm9yIGxwIGluIHNlbGYubHBfbGlzdDoKICAgICAgICAgICAgbHAucmVtb3ZlX2FybShhcm0pCgogICAgZGVmIF9maXRfb3BlcmF0aW9uKHNlbGYpOgoKICAgICAgICAjIFRyYWluIHRoZSBjbHVzdGVycyBmb3IgdGhlIGNvbnRleHRzCiAgICAgICAgc2VsZi5rbWVhbnMuZml0KHNlbGYuY29udGV4dHMpCiAgICAgICAgY2x1c3Rlcl9wcmVkaWN0aW9ucyA9IHNlbGYua21lYW5zLmxhYmVsc18KCiAgICAgICAgIyBUcmFpbiB0aGUgbGVhcm5pbmcgcG9saWN5IGZvciBlYWNoIGNsdXN0ZXIKICAgICAgICBmb3IgYyBpbiByYW5nZShzZWxmLm5fY2x1c3RlcnMpOgogICAgICAgICAgICBpbmRpY2VzID0gbnAud2hlcmUoY2x1c3Rlcl9wcmVkaWN0aW9ucyA9PSBjKQogICAgICAgICAgICBjX2RlY2lzaW9ucyA9IHNlbGYuZGVjaXNpb25zW2luZGljZXNdCiAgICAgICAgICAgIGNfcmV3YXJkcyA9IHNlbGYucmV3YXJkc1tpbmRpY2VzXQogICAgICAgICAgICBjX2NvbnRleHRzID0gc2VsZi5jb250ZXh0c1tpbmRpY2VzXQogICAgICAgICAgICBzZWxmLmxwX2xpc3RbY10uZml0KGNfZGVjaXNpb25zLCBjX3Jld2FyZHMsIGNfY29udGV4dHMpCgogICAgZGVmIF9maXRfYXJtKHNlbGYsIGFybTogQXJtLCBkZWNpc2lvbnM6IG5wLm5kYXJyYXksIHJld2FyZHM6IG5wLm5kYXJyYXksIGNvbnRleHRzOiBPcHRpb25hbFtucC5uZGFycmF5XSA9IE5vbmUpOgogICAgICAgIHBhc3MKCiAgICBkZWYgX3ByZWRpY3RfY29udGV4dHMoc2VsZiwgY29udGV4dHM6IG5wLm5kYXJyYXksIGlzX3ByZWRpY3Q6IGJvb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlZHM6IE9wdGlvbmFsW25wLm5kYXJyYXldID0gTm9uZSwgc3RhcnRfaW5kZXg6IE9wdGlvbmFsW2ludF0gPSBOb25lKSAtPiBMaXN0OgoKICAgICAgICAjIENvcHkgbGVhcm5pbmcgcG9saWN5IG9iamVjdAogICAgICAgIGxwX2xpc3QgPSBkZWVwY29weShzZWxmLmxwX2xpc3QpCgogICAgICAgICMgSWRlbnRpZnkgdGhlIGNsdXN0ZXIgZm9yIGVhY2ggY29udGV4dCB0byBwcmVkaWN0CiAgICAgICAgY2x1c3Rlcl9wcmVkaWN0aW9ucyA9IHNlbGYua21lYW5zLnByZWRpY3QoY29udGV4dHMpCgogICAgICAgICMgT2J0YWluIHByZWRpY3Rpb24gZm9yIGVhY2ggY29udGV4dAogICAgICAgIHByZWRpY3Rpb25zID0gW05vbmVdICogbGVuKGNvbnRleHRzKQogICAgICAgIGZvciBpbmRleCwgcm93IGluIGVudW1lcmF0ZShjb250ZXh0cyk6CiAgICAgICAgICAgIHJvd18yZCA9IHJvd1tucC5uZXdheGlzLCA6XQogICAgICAgICAgICBjbHVzdGVyID0gY2x1c3Rlcl9wcmVkaWN0aW9uc1tpbmRleF0KCiAgICAgICAgICAgICMgU2V0IHJhbmRvbSBzdGF0ZQogICAgICAgICAgICBscF9saXN0W2NsdXN0ZXJdLnJuZyA9IGNyZWF0ZV9ybmcoc2VlZD1zZWVkc1tpbmRleF0pCgogICAgICAgICAgICAjIFByZWRpY3QgYmFzZWQgb24gdGhlIGNsdXN0ZXIKICAgICAgICAgICAgaWYgaXNfcHJlZGljdDoKICAgICAgICAgICAgICAgIHByZWRpY3Rpb25zW2luZGV4XSA9IGxwX2xpc3RbY2x1c3Rlcl0ucHJlZGljdChyb3dfMmQpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwcmVkaWN0aW9uc1tpbmRleF0gPSBscF9saXN0W2NsdXN0ZXJdLnByZWRpY3RfZXhwZWN0YXRpb25zKHJvd18yZCkKCiAgICAgICAgIyBSZXR1cm4gdGhlIGxpc3Qgb2YgcHJlZGljdGlvbnMKICAgICAgICByZXR1cm4gcHJlZGljdGlvbnMKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLm5fY2x1c3RlcnMgPSBuX2NsdXN0ZXJzCgogICAgICAgIGlmIGlzX21pbmliYXRjaDoKICAgICAgICAgICAgc2VsZi5rbWVhbnMgPSBNaW5pQmF0Y2hLTWVhbnMobl9jbHVzdGVycywgcmFuZG9tX3N0YXRlPXJuZy5zZWVkKQo8fGZpbV9lbmR8Pg=="]
["1e9089ab08d7968c523faccf084901915191d5cf-2","1e9089ab08d7968c523faccf084901915191d5cf","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAoKZnJvbSBjb3B5IGltcG9ydCBkZWVwY29weQpmcm9tIHR5cGluZyBpbXBvcnQgQ2FsbGFibGUsIERpY3QsIExpc3QsIE5vUmV0dXJuLCBPcHRpb25hbCwgVW5pb24KCmltcG9ydCBudW1weSBhcyBucApmcm9tIHNrbGVhcm4uY2x1c3RlciBpbXBvcnQgS01lYW5zLCBNaW5pQmF0Y2hLTWVhbnMKCmZyb20gbWFid2lzZXIuYmFzZV9tYWIgaW1wb3J0IEJhc2VNQUIKZnJvbSBtYWJ3aXNlci5ncmVlZHkgaW1wb3J0IF9FcHNpbG9uR3JlZWR5CmZyb20gbWFid2lzZXIubGluZWFyIGltcG9ydCBfTGluZWFyCmZyb20gbWFid2lzZXIucmFuZCBpbXBvcnQgX1JhbmRvbQpmcm9tIG1hYndpc2VyLnNvZnRtYXggaW1wb3J0IF9Tb2Z0bWF4CmZyb20gbWFid2lzZXIudGhvbXBzb24gaW1wb3J0IF9UaG9tcHNvblNhbXBsaW5nCmZyb20gbWFid2lzZXIudWNiIGltcG9ydCBfVUNCMQpmcm9tIG1hYndpc2VyLnV0aWxzIGltcG9ydCBBcm0sIE51bSwgcmVzZXQsIF9CYXNlUk5HLCBjcmVhdGVfcm5nCgoKY2xhc3MgX0NsdXN0ZXJzKEJhc2VNQUIpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBybmc6IF9CYXNlUk5HLCBhcm1zOiBMaXN0W0FybV0sIG5fam9iczogaW50LCBiYWNrZW5kOiBPcHRpb25hbFtzdHJdLAogICAgICAgICAgICAgICAgIGxwOiBVbmlvbltfRXBzaWxvbkdyZWVkeSwgX0xpbmVhciwgX1JhbmRvbSwgX1NvZnRtYXgsIF9UaG9tcHNvblNhbXBsaW5nLCBfVUNCMV0sCiAgICAgICAgICAgICAgICAgbl9jbHVzdGVyczogTnVtLCBpc19taW5pYmF0Y2g6IGJvb2wpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18ocm5nLCBhcm1zLCBuX2pvYnMsIGJhY2tlbmQpCgogICAgICAgIHNlbGYubl9jbHVzdGVycyA9IG5fY2x1c3RlcnMKCiAgICAgICAgaWYgaXNfbWluaWJhdGNoOgogICAgICAgICAgICBzZWxmLmttZWFucyA9IE1pbmlCYXRjaEtNZWFucyhuX2NsdXN0ZXJzLCByYW5kb21fc3RhdGU9cm5nLnNlZWQpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5rbWVhbnMgPSBLTWVhbnMobl9jbHVzdGVycywgcmFuZG9tX3N0YXRlPXJuZy5zZWVkKQoKICAgICAgICAjIENyZWF0ZSB0aGUgbGlzdCBvZiBsZWFybmluZyBwb2xpY2llcyBmb3IgZWFjaCBjbHVzdGVyCiAgICAgICAgIyBEZWVwIGNvcHkgYWxsIHBhcmFtZXRlcnMgb2YgdGhlIGxwIG9iamVjdHMsIGV4Y2VwdCByZWZlciB0byB0aGUgb3JpZ2luYWxzIG9mIHJuZyBhbmQgYXJtcwogICAgICAgIHNlbGYubHBfbGlzdCA9IFtkZWVwY29weShscCkgZm9yIF8gaW4gcmFuZ2Uoc2VsZi5uX2NsdXN0ZXJzKV0KICAgICAgICBmb3IgYyBpbiByYW5nZShzZWxmLm5fY2x1c3RlcnMpOgogICAgICAgICAgICBzZWxmLmxwX2xpc3RbY10ucm5nID0gcm5nCiAgICAgICAgICAgIHNlbGYubHBfbGlzdFtjXS5hcm1zID0gYXJtcwoKICAgICAgICBzZWxmLmRlY2lzaW9ucyA9IE5vbmUKICAgICAgICBzZWxmLnJld2FyZHMgPSBOb25lCiAgICAgICAgc2VsZi5jb250ZXh0cyA9IE5vbmUKCiAgICAgICAgIyBJbml0aWFsaXplIHRoZSBhcm0gZXhwZWN0YXRpb25zIHRvIG5hbgogICAgICAgICMgV2hlbiB0aGVyZSBhcmUgbmVpZ2hib3JzLCBleHBlY3RhdGlvbnMgb2YgdGhlIHVuZGVybHlpbmcgbGVhcm5pbmcgcG9saWN5IGlzIHVzZWQKICAgICAgICAjIFdoZW4gdGhlcmUgYXJlIG5vIG5laWdoYm9ycywgcmV0dXJuIG5hbiBleHBlY3RhdGlvbnMKICAgICAgICByZXNldChzZWxmLmFybV90b19leHBlY3RhdGlvbiwgbnAubmFuKQoKICAgIGRlZiBmaXQoc2VsZiwgZGVjaXNpb25zOiBucC5uZGFycmF5LCByZXdhcmRzOiBucC5uZGFycmF5LAogICAgICAgICAgICBjb250ZXh0czogT3B0aW9uYWxbbnAubmRhcnJheV0gPSBOb25lKSAtPiBOb1JldHVybjoKCiAgICAgICAgIyBTZXQgdGhlIGhpc3RvcmljYWwgZGF0YSBmb3IgcHJlZGljdGlvbgogICAgICAgIHNlbGYuZGVjaXNpb25zID0gZGVjaXNpb25zCiAgICAgICAgc2VsZi5jb250ZXh0cyA9IGNvbnRleHRzCgogICAgICAgICMgQmluYXJpemUgdGhlIHJld2FyZHMgaWYgdXNpbmcgVGhvbXBzb24gU2FtcGxpbmcKICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYubHBfbGlzdFswXSwgX1Rob21wc29uU2FtcGxpbmcpIGFuZCBzZWxmLmxwX2xpc3RbMF0uYmluYXJpemVyOgogICAgICAgICAgICBmb3IgbHAgaW4gc2VsZi5scF9saXN0OgogICAgICAgICAgICAgICAgbHAuaXNfY29udGV4dHVhbF9iaW5hcml6ZWQgPSBGYWxzZQogICAgICAgICAgICBzZWxmLnJld2FyZHMgPSBzZWxmLmxwX2xpc3RbMF0uX2dldF9iaW5hcnlfcmV3YXJkcyhkZWNpc2lvbnMsIHJld2FyZHMpCiAgICAgICAgICAgIGZvciBscCBpbiBzZWxmLmxwX2xpc3Q6CiAgICAgICAgICAgICAgICBscC5pc19jb250ZXh0dWFsX2JpbmFyaXplZCA9IFRydWUKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLnJld2FyZHMgPSByZXdhcmRzCgogICAgICAgIHNlbGYuX2ZpdF9vcGVyYXRpb24oKQoKICAgIGRlZiBwYXJ0aWFsX2ZpdChzZWxmLCBkZWNpc2lvbnM6IG5wLm5kYXJyYXksIHJld2FyZHM6IG5wLm5kYXJyYXksCiAgICAgICAgICAgICAgICAgICAgY29udGV4dHM6IE9wdGlvbmFsW25wLm5kYXJyYXldID0gTm9uZSkgLT4gTm9SZXR1cm46CgogICAgICAgICMgQmluYXJpemUgdGhlIHJld2FyZHMgaWYgdXNpbmcgVGhvbXBzb24gU2FtcGxpbmcKICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYubHBfbGlzdFswXSwgX1Rob21wc29uU2FtcGxpbmcpIGFuZCBzZWxmLmxwX2xpc3RbMF0uYmluYXJpemVyOgogICAgICAgICAgICBmb3IgbHAgaW4gc2VsZi5scF9saXN0OgogICAgICAgICAgICAgICAgbHAuaXNfY29udGV4dHVhbF9iaW5hcml6ZWQgPSBGYWxzZQogICAgICAgICAgICByZXdhcmRzID0gc2VsZi5scF9saXN0WzBdLl9nZXRfYmluYXJ5X3Jld2FyZHMoZGVjaXNpb25zLCByZXdhcmRzKQogICAgICAgICAgICBmb3IgbHAgaW4gc2VsZi5scF9saXN0OgogICAgICAgICAgICAgICAgbHAuaXNfY29udGV4dHVhbF9iaW5hcml6ZWQgPSBUcnVlCgogICAgICAgICMgQWRkIG1vcmUgaGlzdG9yaWNhbCBkYXRhIGZvciBwcmVkaWN0aW9uCiAgICAgICAgc2VsZi5kZWNpc2lvbnMgPSBucC5jb25jYXRlbmF0ZSgoc2VsZi5kZWNpc2lvbnMsIGRlY2lzaW9ucykpCiAgICAgICAgc2VsZi5jb250ZXh0cyA9IG5wLmNvbmNhdGVuYXRlKChzZWxmLmNvbnRleHRzLCBjb250ZXh0cykpCiAgICAgICAgc2VsZi5yZXdhcmRzID0gbnAuY29uY2F0ZW5hdGUoKHNlbGYucmV3YXJkcywgcmV3YXJkcykpCgogICAgICAgIHNlbGYuX2ZpdF9vcGVyYXRpb24oKQoKICAgIGRlZiBwcmVkaWN0KHNlbGYsIGNvbnRleHRzOiBucC5uZGFycmF5ID0gTm9uZSkgLT4gVW5pb25bQXJtLCBMaXN0W0FybV1dOgogICAgICAgICMgUmV0dXJuIHByZWRpY3Qgd2l0aGluIHRoZSBjbHVzdGVyCiAgICAgICAgcmV0dXJuIHNlbGYuX3BhcmFsbGVsX3ByZWRpY3QoY29udGV4dHMsIGlzX3ByZWRpY3Q9VHJ1ZSkKCiAgICBkZWYgcHJlZGljdF9leHBlY3RhdGlvbnMoc2VsZiwgY29udGV4dHM6IG5wLm5kYXJyYXkgPSBOb25lKSAtPiBVbmlvbltEaWN0W0FybSwgTnVtXSwgTGlzdFtEaWN0W0FybSwgTnVtXV1dOgogICAgICAgICMgUmV0dXJuIHByZWRpY3QgZXhwZWN0YXRpb25zIHdpdGhpbiB0aGUgY2x1c3RlcgogICAgICAgIHJldHVybiBzZWxmLl9wYXJhbGxlbF9wcmVkaWN0KGNvbnRleHRzLCBpc19wcmVkaWN0PUZhbHNlKQoKICAgIGRlZiB3YXJtX3N0YXJ0KHNlbGYsIGFybV90b19mZWF0dXJlczogRGljdFtBcm0sIExpc3RbTnVtXV0sIGRpc3RhbmNlX3F1YW50aWxlOiBmbG9hdCk6CiAgICAgICAgZm9yIGMgaW4gcmFuZ2Uoc2VsZi5uX2NsdXN0ZXJzKToKICAgICAgICAgICAgc2VsZi5scF9saXN0W2NdLndhcm1fc3RhcnQoYXJtX3RvX2ZlYXR1cmVzLCBkaXN0YW5jZV9xdWFudGlsZSkKCiAgICBkZWYgX2NvcHlfYXJtcyhzZWxmLCBjb2xkX2FybV90b193YXJtX2FybSk6CiAgICAgICAgcGFzcwoKICAgIGRlZiBfdXB0YWtlX25ld19hcm0oc2VsZiwgYXJtOiBBcm0sIGJpbmFyaXplcjogQ2FsbGFibGUgPSBOb25lLCBzY2FsZXI6IENhbGxhYmxlID0gTm9uZSk6CgogICAgICAgICMgVXBkYXRlIGVhY2ggbGVhcm5pbmcgcG9saWN5CiAgICAgICAgZm9yIGxwIGluIHNlbGYubHBfbGlzdDoKICAgICAgICAgICAgbHAuYWRkX2FybShhcm0sIGJpbmFyaXplcikKCiAgICBkZWYgX2Ryb3BfZXhpc3RpbmdfYXJtKHNlbGYsIGFybTogQXJtKSAtPiBOb1JldHVybjoKICAgICAgICAjIFVwZGF0ZSBlYWNoIGxlYXJuaW5nIHBvbGljeQogICAgICAgIGZvciBscCBpbiBzZWxmLmxwX2xpc3Q6CiAgICAgICAgICAgIGxwLnJlbW92ZV9hcm0oYXJtKQoKICAgIGRlZiBfZml0X29wZXJhdGlvbihzZWxmKToKCiAgICAgICAgIyBUcmFpbiB0aGUgY2x1c3RlcnMgZm9yIHRoZSBjb250ZXh0cwogICAgICAgIHNlbGYua21lYW5zLmZpdChzZWxmLmNvbnRleHRzKQogICAgICAgIGNsdXN0ZXJfcHJlZGljdGlvbnMgPSBzZWxmLmttZWFucy5sYWJlbHNfCgogICAgICAgICMgVHJhaW4gdGhlIGxlYXJuaW5nIHBvbGljeSBmb3IgZWFjaCBjbHVzdGVyCiAgICAgICAgZm9yIGMgaW4gcmFuZ2Uoc2VsZi5uX2NsdXN0ZXJzKToKICAgICAgICAgICAgaW5kaWNlcyA9IG5wLndoZXJlKGNsdXN0ZXJfcHJlZGljdGlvbnMgPT0gYykKICAgICAgICAgICAgY19kZWNpc2lvbnMgPSBzZWxmLmRlY2lzaW9uc1tpbmRpY2VzXQogICAgICAgICAgICBjX3Jld2FyZHMgPSBzZWxmLnJld2FyZHNbaW5kaWNlc10KICAgICAgICAgICAgY19jb250ZXh0cyA9IHNlbGYuY29udGV4dHNbaW5kaWNlc10KICAgICAgICAgICAgc2VsZi5scF9saXN0W2NdLmZpdChjX2RlY2lzaW9ucywgY19yZXdhcmRzLCBjX2NvbnRleHRzKQoKICAgIGRlZiBfZml0X2FybShzZWxmLCBhcm06IEFybSwgZGVjaXNpb25zOiBucC5uZGFycmF5LCByZXdhcmRzOiBucC5uZGFycmF5LCBjb250ZXh0czogT3B0aW9uYWxbbnAubmRhcnJheV0gPSBOb25lKToKICAgICAgICBwYXNzCgogICAgZGVmIF9wcmVkaWN0X2NvbnRleHRzKHNlbGYsIGNvbnRleHRzOiBucC5uZGFycmF5LCBpc19wcmVkaWN0OiBib29sLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWRzOiBPcHRpb25hbFtucC5uZGFycmF5XSA9IE5vbmUsIHN0YXJ0X2luZGV4OiBPcHRpb25hbFtpbnRdID0gTm9uZSkgLT4gTGlzdDoKCiAgICAgICAgIyBDb3B5IGxlYXJuaW5nIHBvbGljeSBvYmplY3QKICAgICAgICBscF9saXN0ID0gZGVlcGNvcHkoc2VsZi5scF9saXN0KQoKICAgICAgICAjIElkZW50aWZ5IHRoZSBjbHVzdGVyIGZvciBlYWNoIGNvbnRleHQgdG8gcHJlZGljdAogICAgICAgIGNsdXN0ZXJfcHJlZGljdGlvbnMgPSBzZWxmLmttZWFucy5wcmVkaWN0KGNvbnRleHRzKQoKICAgICAgICAjIE9idGFpbiBwcmVkaWN0aW9uIGZvciBlYWNoIGNvbnRleHQKICAgICAgICBwcmVkaWN0aW9ucyA9IFtOb25lXSAqIGxlbihjb250ZXh0cykKICAgICAgICBmb3IgaW5kZXgsIHJvdyBpbiBlbnVtZXJhdGUoY29udGV4dHMpOgogICAgICAgICAgICByb3dfMmQgPSByb3dbbnAubmV3YXhpcywgOl0KICAgICAgICAgICAgY2x1c3RlciA9IGNsdXN0ZXJfcHJlZGljdGlvbnNbaW5kZXhdCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICMgU2V0IHJhbmRvbSBzdGF0ZQogICAgICAgICAgICBscF9saXN0W2NsdXN0ZXJdLnJuZyA9IGNyZWF0ZV9ybmcoc2VlZD1zZWVkc1tpbmRleF0pCgogICAgICAgICAgICAjIFByZWRpY3QgYmFzZWQgb24gdGhlIGNsdXN0ZXIKPHxmaW1fZW5kfD4="]
["1e9089ab08d7968c523faccf084901915191d5cf-3","1e9089ab08d7968c523faccf084901915191d5cf","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAoKZnJvbSBjb3B5IGltcG9ydCBkZWVwY29weQpmcm9tIHR5cGluZyBpbXBvcnQgQ2FsbGFibGUsIERpY3QsIExpc3QsIE5vUmV0dXJuLCBPcHRpb25hbCwgVW5pb24KCmltcG9ydCBudW1weSBhcyBucApmcm9tIHNrbGVhcm4uY2x1c3RlciBpbXBvcnQgS01lYW5zLCBNaW5pQmF0Y2hLTWVhbnMKCmZyb20gbWFid2lzZXIuYmFzZV9tYWIgaW1wb3J0IEJhc2VNQUIKZnJvbSBtYWJ3aXNlci5ncmVlZHkgaW1wb3J0IF9FcHNpbG9uR3JlZWR5CmZyb20gbWFid2lzZXIubGluZWFyIGltcG9ydCBfTGluZWFyCmZyb20gbWFid2lzZXIucmFuZCBpbXBvcnQgX1JhbmRvbQpmcm9tIG1hYndpc2VyLnNvZnRtYXggaW1wb3J0IF9Tb2Z0bWF4CmZyb20gbWFid2lzZXIudGhvbXBzb24gaW1wb3J0IF9UaG9tcHNvblNhbXBsaW5nCmZyb20gbWFid2lzZXIudWNiIGltcG9ydCBfVUNCMQpmcm9tIG1hYndpc2VyLnV0aWxzIGltcG9ydCBBcm0sIE51bSwgcmVzZXQsIF9CYXNlUk5HLCBjcmVhdGVfcm5nCgoKY2xhc3MgX0NsdXN0ZXJzKEJhc2VNQUIpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBybmc6IF9CYXNlUk5HLCBhcm1zOiBMaXN0W0FybV0sIG5fam9iczogaW50LCBiYWNrZW5kOiBPcHRpb25hbFtzdHJdLAogICAgICAgICAgICAgICAgIGxwOiBVbmlvbltfRXBzaWxvbkdyZWVkeSwgX0xpbmVhciwgX1JhbmRvbSwgX1NvZnRtYXgsIF9UaG9tcHNvblNhbXBsaW5nLCBfVUNCMV0sCiAgICAgICAgICAgICAgICAgbl9jbHVzdGVyczogTnVtLCBpc19taW5pYmF0Y2g6IGJvb2wpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18ocm5nLCBhcm1zLCBuX2pvYnMsIGJhY2tlbmQpCgogICAgICAgIHNlbGYubl9jbHVzdGVycyA9IG5fY2x1c3RlcnMKCiAgICAgICAgaWYgaXNfbWluaWJhdGNoOgogICAgICAgICAgICBzZWxmLmttZWFucyA9IE1pbmlCYXRjaEtNZWFucyhuX2NsdXN0ZXJzLCByYW5kb21fc3RhdGU9cm5nLnNlZWQpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5rbWVhbnMgPSBLTWVhbnMobl9jbHVzdGVycywgcmFuZG9tX3N0YXRlPXJuZy5zZWVkKQoKICAgICAgICAjIENyZWF0ZSB0aGUgbGlzdCBvZiBsZWFybmluZyBwb2xpY2llcyBmb3IgZWFjaCBjbHVzdGVyCiAgICAgICAgIyBEZWVwIGNvcHkgYWxsIHBhcmFtZXRlcnMgb2YgdGhlIGxwIG9iamVjdHMsIGV4Y2VwdCByZWZlciB0byB0aGUgb3JpZ2luYWxzIG9mIHJuZyBhbmQgYXJtcwogICAgICAgIHNlbGYubHBfbGlzdCA9IFtkZWVwY29weShscCkgZm9yIF8gaW4gcmFuZ2Uoc2VsZi5uX2NsdXN0ZXJzKV0KICAgICAgICBmb3IgYyBpbiByYW5nZShzZWxmLm5fY2x1c3RlcnMpOgogICAgICAgICAgICBzZWxmLmxwX2xpc3RbY10ucm5nID0gcm5nCiAgICAgICAgICAgIHNlbGYubHBfbGlzdFtjXS5hcm1zID0gYXJtcwoKICAgICAgICBzZWxmLmRlY2lzaW9ucyA9IE5vbmUKICAgICAgICBzZWxmLnJld2FyZHMgPSBOb25lCiAgICAgICAgc2VsZi5jb250ZXh0cyA9IE5vbmUKCiAgICAgICAgIyBJbml0aWFsaXplIHRoZSBhcm0gZXhwZWN0YXRpb25zIHRvIG5hbgogICAgICAgICMgV2hlbiB0aGVyZSBhcmUgbmVpZ2hib3JzLCBleHBlY3RhdGlvbnMgb2YgdGhlIHVuZGVybHlpbmcgbGVhcm5pbmcgcG9saWN5IGlzIHVzZWQKICAgICAgICAjIFdoZW4gdGhlcmUgYXJlIG5vIG5laWdoYm9ycywgcmV0dXJuIG5hbiBleHBlY3RhdGlvbnMKICAgICAgICByZXNldChzZWxmLmFybV90b19leHBlY3RhdGlvbiwgbnAubmFuKQoKICAgIGRlZiBmaXQoc2VsZiwgZGVjaXNpb25zOiBucC5uZGFycmF5LCByZXdhcmRzOiBucC5uZGFycmF5LAogICAgICAgICAgICBjb250ZXh0czogT3B0aW9uYWxbbnAubmRhcnJheV0gPSBOb25lKSAtPiBOb1JldHVybjoKCiAgICAgICAgIyBTZXQgdGhlIGhpc3RvcmljYWwgZGF0YSBmb3IgcHJlZGljdGlvbgogICAgICAgIHNlbGYuZGVjaXNpb25zID0gZGVjaXNpb25zCiAgICAgICAgc2VsZi5jb250ZXh0cyA9IGNvbnRleHRzCgogICAgICAgICMgQmluYXJpemUgdGhlIHJld2FyZHMgaWYgdXNpbmcgVGhvbXBzb24gU2FtcGxpbmcKICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYubHBfbGlzdFswXSwgX1Rob21wc29uU2FtcGxpbmcpIGFuZCBzZWxmLmxwX2xpc3RbMF0uYmluYXJpemVyOgogICAgICAgICAgICBmb3IgbHAgaW4gc2VsZi5scF9saXN0OgogICAgICAgICAgICAgICAgbHAuaXNfY29udGV4dHVhbF9iaW5hcml6ZWQgPSBGYWxzZQogICAgICAgICAgICBzZWxmLnJld2FyZHMgPSBzZWxmLmxwX2xpc3RbMF0uX2dldF9iaW5hcnlfcmV3YXJkcyhkZWNpc2lvbnMsIHJld2FyZHMpCiAgICAgICAgICAgIGZvciBscCBpbiBzZWxmLmxwX2xpc3Q6CiAgICAgICAgICAgICAgICBscC5pc19jb250ZXh0dWFsX2JpbmFyaXplZCA9IFRydWUKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLnJld2FyZHMgPSByZXdhcmRzCgogICAgICAgIHNlbGYuX2ZpdF9vcGVyYXRpb24oKQoKICAgIGRlZiBwYXJ0aWFsX2ZpdChzZWxmLCBkZWNpc2lvbnM6IG5wLm5kYXJyYXksIHJld2FyZHM6IG5wLm5kYXJyYXksCiAgICAgICAgICAgICAgICAgICAgY29udGV4dHM6IE9wdGlvbmFsW25wLm5kYXJyYXldID0gTm9uZSkgLT4gTm9SZXR1cm46CgogICAgICAgICMgQmluYXJpemUgdGhlIHJld2FyZHMgaWYgdXNpbmcgVGhvbXBzb24gU2FtcGxpbmcKICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYubHBfbGlzdFswXSwgX1Rob21wc29uU2FtcGxpbmcpIGFuZCBzZWxmLmxwX2xpc3RbMF0uYmluYXJpemVyOgogICAgICAgICAgICBmb3IgbHAgaW4gc2VsZi5scF9saXN0OgogICAgICAgICAgICAgICAgbHAuaXNfY29udGV4dHVhbF9iaW5hcml6ZWQgPSBGYWxzZQogICAgICAgICAgICByZXdhcmRzID0gc2VsZi5scF9saXN0WzBdLl9nZXRfYmluYXJ5X3Jld2FyZHMoZGVjaXNpb25zLCByZXdhcmRzKQogICAgICAgICAgICBmb3IgbHAgaW4gc2VsZi5scF9saXN0OgogICAgICAgICAgICAgICAgbHAuaXNfY29udGV4dHVhbF9iaW5hcml6ZWQgPSBUcnVlCgogICAgICAgICMgQWRkIG1vcmUgaGlzdG9yaWNhbCBkYXRhIGZvciBwcmVkaWN0aW9uCiAgICAgICAgc2VsZi5kZWNpc2lvbnMgPSBucC5jb25jYXRlbmF0ZSgoc2VsZi5kZWNpc2lvbnMsIGRlY2lzaW9ucykpCiAgICAgICAgc2VsZi5jb250ZXh0cyA9IG5wLmNvbmNhdGVuYXRlKChzZWxmLmNvbnRleHRzLCBjb250ZXh0cykpCiAgICAgICAgc2VsZi5yZXdhcmRzID0gbnAuY29uY2F0ZW5hdGUoKHNlbGYucmV3YXJkcywgcmV3YXJkcykpCgogICAgICAgIHNlbGYuX2ZpdF9vcGVyYXRpb24oKQoKICAgIGRlZiBwcmVkaWN0KHNlbGYsIGNvbnRleHRzOiBucC5uZGFycmF5ID0gTm9uZSkgLT4gVW5pb25bQXJtLCBMaXN0W0FybV1dOgogICAgICAgICMgUmV0dXJuIHByZWRpY3Qgd2l0aGluIHRoZSBjbHVzdGVyCiAgICAgICAgcmV0dXJuIHNlbGYuX3BhcmFsbGVsX3ByZWRpY3QoY29udGV4dHMsIGlzX3ByZWRpY3Q9VHJ1ZSkKCiAgICBkZWYgcHJlZGljdF9leHBlY3RhdGlvbnMoc2VsZiwgY29udGV4dHM6IG5wLm5kYXJyYXkgPSBOb25lKSAtPiBVbmlvbltEaWN0W0FybSwgTnVtXSwgTGlzdFtEaWN0W0FybSwgTnVtXV1dOgogICAgICAgICMgUmV0dXJuIHByZWRpY3QgZXhwZWN0YXRpb25zIHdpdGhpbiB0aGUgY2x1c3RlcgogICAgICAgIHJldHVybiBzZWxmLl9wYXJhbGxlbF9wcmVkaWN0KGNvbnRleHRzLCBpc19wcmVkaWN0PUZhbHNlKQoKICAgIGRlZiB3YXJtX3N0YXJ0KHNlbGYsIGFybV90b19mZWF0dXJlczogRGljdFtBcm0sIExpc3RbTnVtXV0sIGRpc3RhbmNlX3F1YW50aWxlOiBmbG9hdCk6CiAgICAgICAgZm9yIGMgaW4gcmFuZ2Uoc2VsZi5uX2NsdXN0ZXJzKToKICAgICAgICAgICAgc2VsZi5scF9saXN0W2NdLndhcm1fc3RhcnQoYXJtX3RvX2ZlYXR1cmVzLCBkaXN0YW5jZV9xdWFudGlsZSkKCiAgICBkZWYgX2NvcHlfYXJtcyhzZWxmLCBjb2xkX2FybV90b193YXJtX2FybSk6CiAgICAgICAgcGFzcwoKICAgIGRlZiBfdXB0YWtlX25ld19hcm0oc2VsZiwgYXJtOiBBcm0sIGJpbmFyaXplcjogQ2FsbGFibGUgPSBOb25lLCBzY2FsZXI6IENhbGxhYmxlID0gTm9uZSk6CgogICAgICAgICMgVXBkYXRlIGVhY2ggbGVhcm5pbmcgcG9saWN5CiAgICAgICAgZm9yIGxwIGluIHNlbGYubHBfbGlzdDoKICAgICAgICAgICAgbHAuYWRkX2FybShhcm0sIGJpbmFyaXplcikKCiAgICBkZWYgX2Ryb3BfZXhpc3RpbmdfYXJtKHNlbGYsIGFybTogQXJtKSAtPiBOb1JldHVybjoKICAgICAgICAjIFVwZGF0ZSBlYWNoIGxlYXJuaW5nIHBvbGljeQogICAgICAgIGZvciBscCBpbiBzZWxmLmxwX2xpc3Q6CiAgICAgICAgICAgIGxwLnJlbW92ZV9hcm0oYXJtKQoKICAgIGRlZiBfZml0X29wZXJhdGlvbihzZWxmKToKCiAgICAgICAgIyBUcmFpbiB0aGUgY2x1c3RlcnMgZm9yIHRoZSBjb250ZXh0cwogICAgICAgIHNlbGYua21lYW5zLmZpdChzZWxmLmNvbnRleHRzKQogICAgICAgIGNsdXN0ZXJfcHJlZGljdGlvbnMgPSBzZWxmLmttZWFucy5sYWJlbHNfCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgIyBUcmFpbiB0aGUgbGVhcm5pbmcgcG9saWN5IGZvciBlYWNoIGNsdXN0ZXIKICAgICAgICBmb3IgYyBpbiByYW5nZShzZWxmLm5fY2x1c3RlcnMpOgogICAgICAgICAgICBpbmRpY2VzID0gbnAud2hlcmUoY2x1c3Rlcl9wcmVkaWN0aW9ucyA9PSBjKQo8fGZpbV9lbmR8Pg=="]
["1e9089ab08d7968c523faccf084901915191d5cf-4","1e9089ab08d7968c523faccf084901915191d5cf","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAoKZnJvbSBjb3B5IGltcG9ydCBkZWVwY29weQpmcm9tIHR5cGluZyBpbXBvcnQgQ2FsbGFibGUsIERpY3QsIExpc3QsIE5vUmV0dXJuLCBPcHRpb25hbCwgVW5pb24KCmltcG9ydCBudW1weSBhcyBucApmcm9tIHNrbGVhcm4uY2x1c3RlciBpbXBvcnQgS01lYW5zLCBNaW5pQmF0Y2hLTWVhbnMKCmZyb20gbWFid2lzZXIuYmFzZV9tYWIgaW1wb3J0IEJhc2VNQUIKZnJvbSBtYWJ3aXNlci5ncmVlZHkgaW1wb3J0IF9FcHNpbG9uR3JlZWR5CmZyb20gbWFid2lzZXIubGluZWFyIGltcG9ydCBfTGluZWFyCmZyb20gbWFid2lzZXIucmFuZCBpbXBvcnQgX1JhbmRvbQpmcm9tIG1hYndpc2VyLnNvZnRtYXggaW1wb3J0IF9Tb2Z0bWF4CmZyb20gbWFid2lzZXIudGhvbXBzb24gaW1wb3J0IF9UaG9tcHNvblNhbXBsaW5nCmZyb20gbWFid2lzZXIudWNiIGltcG9ydCBfVUNCMQpmcm9tIG1hYndpc2VyLnV0aWxzIGltcG9ydCBBcm0sIE51bSwgcmVzZXQsIF9CYXNlUk5HLCBjcmVhdGVfcm5nCgoKY2xhc3MgX0NsdXN0ZXJzKEJhc2VNQUIpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBybmc6IF9CYXNlUk5HLCBhcm1zOiBMaXN0W0FybV0sIG5fam9iczogaW50LCBiYWNrZW5kOiBPcHRpb25hbFtzdHJdLAogICAgICAgICAgICAgICAgIGxwOiBVbmlvbltfRXBzaWxvbkdyZWVkeSwgX0xpbmVhciwgX1JhbmRvbSwgX1NvZnRtYXgsIF9UaG9tcHNvblNhbXBsaW5nLCBfVUNCMV0sCiAgICAgICAgICAgICAgICAgbl9jbHVzdGVyczogTnVtLCBpc19taW5pYmF0Y2g6IGJvb2wpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18ocm5nLCBhcm1zLCBuX2pvYnMsIGJhY2tlbmQpCgogICAgICAgIHNlbGYubl9jbHVzdGVycyA9IG5fY2x1c3RlcnMKCiAgICAgICAgaWYgaXNfbWluaWJhdGNoOgogICAgICAgICAgICBzZWxmLmttZWFucyA9IE1pbmlCYXRjaEtNZWFucyhuX2NsdXN0ZXJzLCByYW5kb21fc3RhdGU9cm5nLnNlZWQpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5rbWVhbnMgPSBLTWVhbnMobl9jbHVzdGVycywgcmFuZG9tX3N0YXRlPXJuZy5zZWVkKQoKICAgICAgICAjIENyZWF0ZSB0aGUgbGlzdCBvZiBsZWFybmluZyBwb2xpY2llcyBmb3IgZWFjaCBjbHVzdGVyCiAgICAgICAgIyBEZWVwIGNvcHkgYWxsIHBhcmFtZXRlcnMgb2YgdGhlIGxwIG9iamVjdHMsIGV4Y2VwdCByZWZlciB0byB0aGUgb3JpZ2luYWxzIG9mIHJuZyBhbmQgYXJtcwogICAgICAgIHNlbGYubHBfbGlzdCA9IFtkZWVwY29weShscCkgZm9yIF8gaW4gcmFuZ2Uoc2VsZi5uX2NsdXN0ZXJzKV0KICAgICAgICBmb3IgYyBpbiByYW5nZShzZWxmLm5fY2x1c3RlcnMpOgogICAgICAgICAgICBzZWxmLmxwX2xpc3RbY10ucm5nID0gcm5nCiAgICAgICAgICAgIHNlbGYubHBfbGlzdFtjXS5hcm1zID0gYXJtcwoKICAgICAgICBzZWxmLmRlY2lzaW9ucyA9IE5vbmUKICAgICAgICBzZWxmLnJld2FyZHMgPSBOb25lCiAgICAgICAgc2VsZi5jb250ZXh0cyA9IE5vbmUKCjx8ZmltX2hvbGV8PgoKICAgIGRlZiBmaXQoc2VsZiwgZGVjaXNpb25zOiBucC5uZGFycmF5LCByZXdhcmRzOiBucC5uZGFycmF5LAogICAgICAgICAgICBjb250ZXh0czogT3B0aW9uYWxbbnAubmRhcnJheV0gPSBOb25lKSAtPiBOb1JldHVybjoKCiAgICAgICAgIyBTZXQgdGhlIGhpc3RvcmljYWwgZGF0YSBmb3IgcHJlZGljdGlvbgogICAgICAgIHNlbGYuZGVjaXNpb25zID0gZGVjaXNpb25zCiAgICAgICAgc2VsZi5jb250ZXh0cyA9IGNvbnRleHRzCgogICAgICAgICMgQmluYXJpemUgdGhlIHJld2FyZHMgaWYgdXNpbmcgVGhvbXBzb24gU2FtcGxpbmcKICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYubHBfbGlzdFswXSwgX1Rob21wc29uU2FtcGxpbmcpIGFuZCBzZWxmLmxwX2xpc3RbMF0uYmluYXJpemVyOgogICAgICAgICAgICBmb3IgbHAgaW4gc2VsZi5scF9saXN0OgogICAgICAgICAgICAgICAgbHAuaXNfY29udGV4dHVhbF9iaW5hcml6ZWQgPSBGYWxzZQogICAgICAgICAgICBzZWxmLnJld2FyZHMgPSBzZWxmLmxwX2xpc3RbMF0uX2dldF9iaW5hcnlfcmV3YXJkcyhkZWNpc2lvbnMsIHJld2FyZHMpCiAgICAgICAgICAgIGZvciBscCBpbiBzZWxmLmxwX2xpc3Q6CiAgICAgICAgICAgICAgICBscC5pc19jb250ZXh0dWFsX2JpbmFyaXplZCA9IFRydWUKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLnJld2FyZHMgPSByZXdhcmRzCgogICAgICAgIHNlbGYuX2ZpdF9vcGVyYXRpb24oKQoKICAgIGRlZiBwYXJ0aWFsX2ZpdChzZWxmLCBkZWNpc2lvbnM6IG5wLm5kYXJyYXksIHJld2FyZHM6IG5wLm5kYXJyYXksCiAgICAgICAgICAgICAgICAgICAgY29udGV4dHM6IE9wdGlvbmFsW25wLm5kYXJyYXldID0gTm9uZSkgLT4gTm9SZXR1cm46CgogICAgICAgICMgQmluYXJpemUgdGhlIHJld2FyZHMgaWYgdXNpbmcgVGhvbXBzb24gU2FtcGxpbmcKICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYubHBfbGlzdFswXSwgX1Rob21wc29uU2FtcGxpbmcpIGFuZCBzZWxmLmxwX2xpc3RbMF0uYmluYXJpemVyOgogICAgICAgICAgICBmb3IgbHAgaW4gc2VsZi5scF9saXN0OgogICAgICAgICAgICAgICAgbHAuaXNfY29udGV4dHVhbF9iaW5hcml6ZWQgPSBGYWxzZQogICAgICAgICAgICByZXdhcmRzID0gc2VsZi5scF9saXN0WzBdLl9nZXRfYmluYXJ5X3Jld2FyZHMoZGVjaXNpb25zLCByZXdhcmRzKQogICAgICAgICAgICBmb3IgbHAgaW4gc2VsZi5scF9saXN0OgogICAgICAgICAgICAgICAgbHAuaXNfY29udGV4dHVhbF9iaW5hcml6ZWQgPSBUcnVlCgogICAgICAgICMgQWRkIG1vcmUgaGlzdG9yaWNhbCBkYXRhIGZvciBwcmVkaWN0aW9uCiAgICAgICAgc2VsZi5kZWNpc2lvbnMgPSBucC5jb25jYXRlbmF0ZSgoc2VsZi5kZWNpc2lvbnMsIGRlY2lzaW9ucykpCiAgICAgICAgc2VsZi5jb250ZXh0cyA9IG5wLmNvbmNhdGVuYXRlKChzZWxmLmNvbnRleHRzLCBjb250ZXh0cykpCiAgICAgICAgc2VsZi5yZXdhcmRzID0gbnAuY29uY2F0ZW5hdGUoKHNlbGYucmV3YXJkcywgcmV3YXJkcykpCgogICAgICAgIHNlbGYuX2ZpdF9vcGVyYXRpb24oKQoKICAgIGRlZiBwcmVkaWN0KHNlbGYsIGNvbnRleHRzOiBucC5uZGFycmF5ID0gTm9uZSkgLT4gVW5pb25bQXJtLCBMaXN0W0FybV1dOgogICAgICAgICMgUmV0dXJuIHByZWRpY3Qgd2l0aGluIHRoZSBjbHVzdGVyCiAgICAgICAgcmV0dXJuIHNlbGYuX3BhcmFsbGVsX3ByZWRpY3QoY29udGV4dHMsIGlzX3ByZWRpY3Q9VHJ1ZSkKCiAgICBkZWYgcHJlZGljdF9leHBlY3RhdGlvbnMoc2VsZiwgY29udGV4dHM6IG5wLm5kYXJyYXkgPSBOb25lKSAtPiBVbmlvbltEaWN0W0FybSwgTnVtXSwgTGlzdFtEaWN0W0FybSwgTnVtXV1dOgogICAgICAgICMgUmV0dXJuIHByZWRpY3QgZXhwZWN0YXRpb25zIHdpdGhpbiB0aGUgY2x1c3RlcgogICAgICAgIHJldHVybiBzZWxmLl9wYXJhbGxlbF9wcmVkaWN0KGNvbnRleHRzLCBpc19wcmVkaWN0PUZhbHNlKQoKICAgIGRlZiB3YXJtX3N0YXJ0KHNlbGYsIGFybV90b19mZWF0dXJlczogRGljdFtBcm0sIExpc3RbTnVtXV0sIGRpc3RhbmNlX3F1YW50aWxlOiBmbG9hdCk6CiAgICAgICAgZm9yIGMgaW4gcmFuZ2Uoc2VsZi5uX2NsdXN0ZXJzKToKICAgICAgICAgICAgc2VsZi5scF9saXN0W2NdLndhcm1fc3RhcnQoYXJtX3RvX2ZlYXR1cmVzLCBkaXN0YW5jZV9xdWFudGlsZSkKCiAgICBkZWYgX2NvcHlfYXJtcyhzZWxmLCBjb2xkX2FybV90b193YXJtX2FybSk6CiAgICAgICAgcGFzcwoKICAgIGRlZiBfdXB0YWtlX25ld19hcm0oc2VsZiwgYXJtOiBBcm0sIGJpbmFyaXplcjogQ2FsbGFibGUgPSBOb25lLCBzY2FsZXI6IENhbGxhYmxlID0gTm9uZSk6CgogICAgICAgICMgVXBkYXRlIGVhY2ggbGVhcm5pbmcgcG9saWN5CiAgICAgICAgZm9yIGxwIGluIHNlbGYubHBfbGlzdDoKICAgICAgICAgICAgbHAuYWRkX2FybShhcm0sIGJpbmFyaXplcikKCiAgICBkZWYgX2Ryb3BfZXhpc3RpbmdfYXJtKHNlbGYsIGFybTogQXJtKSAtPiBOb1JldHVybjoKICAgICAgICAjIFVwZGF0ZSBlYWNoIGxlYXJuaW5nIHBvbGljeQogICAgICAgIGZvciBscCBpbiBzZWxmLmxwX2xpc3Q6CiAgICAgICAgICAgIGxwLnJlbW92ZV9hcm0oYXJtKQoKICAgIGRlZiBfZml0X29wZXJhdGlvbihzZWxmKToKCiAgICAgICAgIyBUcmFpbiB0aGUgY2x1c3RlcnMgZm9yIHRoZSBjb250ZXh0cwogICAgICAgIHNlbGYua21lYW5zLmZpdChzZWxmLmNvbnRleHRzKQogICAgICAgIGNsdXN0ZXJfcHJlZGljdGlvbnMgPSBzZWxmLmttZWFucy5sYWJlbHNfCgogICAgICAgICMgVHJhaW4gdGhlIGxlYXJuaW5nIHBvbGljeSBmb3IgZWFjaCBjbHVzdGVyCiAgICAgICAgZm9yIGMgaW4gcmFuZ2Uoc2VsZi5uX2NsdXN0ZXJzKToKICAgICAgICAgICAgaW5kaWNlcyA9IG5wLndoZXJlKGNsdXN0ZXJfcHJlZGljdGlvbnMgPT0gYykKICAgICAgICAgICAgY19kZWNpc2lvbnMgPSBzZWxmLmRlY2lzaW9uc1tpbmRpY2VzXQogICAgICAgICAgICBjX3Jld2FyZHMgPSBzZWxmLnJld2FyZHNbaW5kaWNlc10KICAgICAgICAgICAgY19jb250ZXh0cyA9IHNlbGYuY29udGV4dHNbaW5kaWNlc10KICAgICAgICAgICAgc2VsZi5scF9saXN0W2NdLmZpdChjX2RlY2lzaW9ucywgY19yZXdhcmRzLCBjX2NvbnRleHRzKQoKICAgIGRlZiBfZml0X2FybShzZWxmLCBhcm06IEFybSwgZGVjaXNpb25zOiBucC5uZGFycmF5LCByZXdhcmRzOiBucC5uZGFycmF5LCBjb250ZXh0czogT3B0aW9uYWxbbnAubmRhcnJheV0gPSBOb25lKToKICAgICAgICBwYXNzCgogICAgZGVmIF9wcmVkaWN0X2NvbnRleHRzKHNlbGYsIGNvbnRleHRzOiBucC5uZGFycmF5LCBpc19wcmVkaWN0OiBib29sLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWRzOiBPcHRpb25hbFtucC5uZGFycmF5XSA9IE5vbmUsIHN0YXJ0X2luZGV4OiBPcHRpb25hbFtpbnRdID0gTm9uZSkgLT4gTGlzdDoKCiAgICAgICAgIyBDb3B5IGxlYXJuaW5nIHBvbGljeSBvYmplY3QKICAgICAgICBscF9saXN0ID0gZGVlcGNvcHkoc2VsZi5scF9saXN0KQoKICAgICAgICAjIElkZW50aWZ5IHRoZSBjbHVzdGVyIGZvciBlYWNoIGNvbnRleHQgdG8gcHJlZGljdAogICAgICAgIGNsdXN0ZXJfcHJlZGljdGlvbnMgPSBzZWxmLmttZWFucy5wcmVkaWN0KGNvbnRleHRzKQoKICAgICAgICAjIE9idGFpbiBwcmVkaWN0aW9uIGZvciBlYWNoIGNvbnRleHQKICAgICAgICBwcmVkaWN0aW9ucyA9IFtOb25lXSAqIGxlbihjb250ZXh0cykKICAgICAgICBmb3IgaW5kZXgsIHJvdyBpbiBlbnVtZXJhdGUoY29udGV4dHMpOgogICAgICAgICAgICByb3dfMmQgPSByb3dbbnAubmV3YXhpcywgOl0KICAgICAgICAgICAgY2x1c3RlciA9IGNsdXN0ZXJfcHJlZGljdGlvbnNbaW5kZXhdCgogICAgICAgICAgICAjIFNldCByYW5kb20gc3RhdGUKICAgICAgICAgICAgbHBfbGlzdFtjbHVzdGVyXS5ybmcgPSBjcmVhdGVfcm5nKHNlZWQ9c2VlZHNbaW5kZXhdKQoKICAgICAgICAgICAgIyBQcmVkaWN0IGJhc2VkIG9uIHRoZSBjbHVzdGVyCiAgICAgICAgICAgIGlmIGlzX3ByZWRpY3Q6CiAgICAgICAgICAgICAgICBwcmVkaWN0aW9uc1tpbmRleF0gPSBscF9saXN0W2NsdXN0ZXJdLnByZWRpY3Qocm93XzJkKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcHJlZGljdGlvbnNbaW5kZXhdID0gbHBfbGlzdFtjbHVzdGVyXS5wcmVkaWN0X2V4cGVjdGF0aW9ucyhyb3dfMmQpCgogICAgICAgICMgUmV0dXJuIHRoZSBsaXN0IG9mIHByZWRpY3Rpb25zCiAgICAgICAgcmV0dXJuIHByZWRpY3Rpb25zCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIyBJbml0aWFsaXplIHRoZSBhcm0gZXhwZWN0YXRpb25zIHRvIG5hbgogICAgICAgICMgV2hlbiB0aGVyZSBhcmUgbmVpZ2hib3JzLCBleHBlY3RhdGlvbnMgb2YgdGhlIHVuZGVybHlpbmcgbGVhcm5pbmcgcG9saWN5IGlzIHVzZWQKICAgICAgICAjIFdoZW4gdGhlcmUgYXJlIG5vIG5laWdoYm9ycywgcmV0dXJuIG5hbiBleHBlY3RhdGlvbnMKICAgICAgICByZXNldChzZWxmLmFybV90b19leHBlY3RhdGlvbiwgbnAubmFuKQo8fGZpbV9lbmR8Pg=="]
["99d42b1c5470278181ba6ec53f27356eebb517a7-1","99d42b1c5470278181ba6ec53f27356eebb517a7","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cAoKc2V0dXAobmFtZT0nZ3ltX2dvZG90JywKICAgICAgdmVyc2lvbj0nMC4wLjEnLAogICAgICBpbnN0YWxsX3JlcXVpcmVzPVsnZ3ltJywgJ3N0YWJsZS1iYXNlbGluZXMnLCAncHl6bXEnLCAndGVuc29yZmxvdyA9PSAxLjE1JywgJ251bXB5JywgJ29wdHVuYSddCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgKQo8fGZpbV9lbmR8Pg=="]
["99d42b1c5470278181ba6ec53f27356eebb517a7-2","99d42b1c5470278181ba6ec53f27356eebb517a7","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cAoKc2V0dXAobmFtZT0nZ3ltX2dvZG90JywKICAgICAgdmVyc2lvbj0nMC4wLjEnLAogICAgICBpbnN0YWxsX3JlcXVpcmVzPVsnZ3ltJywgJ3N0YWJsZS1iYXNlbGluZXMnLCAncHl6bXEnLCAndGVuc29yZmxvdyA9PSAxLjE1JywgJ251bXB5JywgJ29wdHVuYSddCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgKQo8fGZpbV9lbmR8Pg=="]
["99d42b1c5470278181ba6ec53f27356eebb517a7-3","99d42b1c5470278181ba6ec53f27356eebb517a7","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgogICAgICBpbnN0YWxsX3JlcXVpcmVzPVsnZ3ltJywgJ3N0YWJsZS1iYXNlbGluZXMnLCAncHl6bXEnLCAndGVuc29yZmxvdyA9PSAxLjE1JywgJ251bXB5JywgJ29wdHVuYSddCiAgICAgICkKPHxmaW1fc3VmZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cAoKc2V0dXAobmFtZT0nZ3ltX2dvZG90JywKICAgICAgdmVyc2lvbj0nMC4wLjEnLAo8fGZpbV9lbmR8Pg=="]
["e569bf42a60079de250dc4981253f101e006a5f4-1","e569bf42a60079de250dc4981253f101e006a5f4",{"$cut":{"chars":20320,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2xvY2FsL2F1dG9wa2cvcHl0aG9uCiMKIyBDb3B5cmlnaHQgMjAyMSBKYW1lcyBTdGV3YXJ0IEBKR1N0ZXcKIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIiIiU2VlIGRvY3N0cmluZyBmb3IgVVJMRG93bmxvYWRlclB5dGhvbiBjbGFzcyIiIgoKaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCBzc2wKZnJvbSBoYXNobGliIGltcG9ydCBtZDUsIHNoYTEsIHNoYTI1Ngpmcm9tIHVybGxpYi5yZXF1ZXN0IGltcG9ydCB1cmxvcGVuCgppbXBvcnQgY2VydGlmaQpmcm9tIGF1dG9wa2dsaWIgaW1wb3J0IFByb2Nlc3NvciwgUHJvY2Vzc29yRXJyb3IKZnJvbSBhdXRvcGtnbGliLlVSTERvd25sb2FkZXIgaW1wb3J0IFVSTERvd25sb2FkZXIKCl9fYWxsX18gPSBbIlVSTERvd25sb2FkZXJQeXRob24iXQoKCmNsYXNzIFVSTERvd25sb2FkZXJQeXRob24oVVJMRG93bmxvYWRlcik6CiAgICAiIiJUaGlzIGlzIG1lYW50IHRvIGJlIGEgcHVyZSBweXRob24gcmVwbGFjZW1lbnQgZm9yIFVSTERvd25sb2FkZXIKICAgIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2F1dG9wa2cvYXV0b3BrZy9ibG9iL21hc3Rlci9Db2RlL2F1dG9wa2dsaWIvVVJMRG93bmxvYWRlci5weQogICAgIiIiCgogICAgZGVzY3JpcHRpb24gPSBfX2RvY19fCiAgICBpbnB1dF92YXJpYWJsZXMgPSB7CiAgICAgICAgInVybCI6IHsicmVxdWlyZWQiOiBUcnVlLCAiZGVzY3JpcHRpb24iOiAiVGhlIFVSTCB0byBkb3dubG9hZC4ifSwKICAgICAgICAiZG93bmxvYWRfZGlyIjogewogICAgICAgICAgICAicmVxdWlyZWQiOiBGYWxzZSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogKAogICAgICAgICAgICAgICAgIlRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGZpbGUgd2lsbCBiZSBkb3dubG9hZGVkIHRvLiBEZWZhdWx0cyAiCiAgICAgICAgICAgICAgICAidG8gUkVDSVBFX0NBQ0hFX0RJUi9kb3dubG9hZHMuIgogICAgICAgICAgICApLAogICAgICAgIH0sCiAgICAgICAgImZpbGVuYW1lIjogewogICAgICAgICAgICAicmVxdWlyZWQiOiBGYWxzZSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZpbGVuYW1lIHRvIG92ZXJyaWRlIHRoZSBVUkwncyB0YWlsLiIsCiAgICAgICAgfSwKICAgICAgICAicHJlZmV0Y2hfZmlsZW5hbWUiOiB7CiAgICAgICAgICAgICJkZWZhdWx0IjogRmFsc2UsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IEZhbHNlLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAoCiAgICAgICAgICAgICAgICAiSWYgVHJ1ZSwgVVJMRG93bmxvYWRlciBhdHRlbXB0cyB0byBkZXRlcm1pbmUgZmlsZW5hbWUgZnJvbSBIVFRQICIKICAgICAgICAgICAgICAgICJoZWFkZXJzIGRvd25sb2FkZWQgYmVmb3JlIHRoZSBmaWxlIGl0c2VsZi4gJ3ByZWZldGNoX2ZpbGVuYW1lJyAiCiAgICAgICAgICAgICAgICAib3ZlcnJpZGVzICdmaWxlbmFtZScgb3B0aW9uLiBGaWxlbmFtZSBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIGZpcnN0ICIKICAgICAgICAgICAgICAgICJhdmFpbGFibGUgc291cmNlIG9mIGluZm9ybWF0aW9uIGluIHRoaXMgb3JkZXI6XG4iCiAgICAgICAgICAgICAgICAiXHQxLiBDb250ZW50LURpc3Bvc2l0aW9uIGhlYWRlclxuIgogICAgICAgICAgICAgICAgIlx0Mi4gTG9jYXRpb24gaGVhZGVyXG4iCiAgICAgICAgICAgICAgICAiXHQzLiAnZmlsZW5hbWUnIG9wdGlvbiAoaWYgc2V0KVxuIgogICAgICAgICAgICAgICAgIlx0NC4gbGFzdCBwYXJ0IG9mICd1cmwnLiAgXG4iCiAgICAgICAgICAgICAgICAiJ3ByZWZldGNoX2ZpbGVuYW1lJyBpcyB1c2VmdWwgZm9yIFVSTHMgd2l0aCByZWRpcmVjdHMuIgogICAgICAgICAgICApLAogICAgICAgIH0sCiAgICAgICAgIkNIRUNLX0ZJTEVTSVpFX09OTFkiOiB7CiAgICAgICAgICAgICJkZWZhdWx0IjogRmFsc2UsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IEZhbHNlLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAoCiAgICAgICAgICAgICAgICAiSWYgVHJ1ZSwgYSBzZXJ2ZXIncyBFVGFnIGFuZCBMYXN0LU1vZGlmaWVkICIKICAgICAgICAgICAgICAgICJoZWFkZXJzIHdpbGwgbm90IGJlIGNoZWNrZWQgdG8gdmVyaWZ5IHdoZXRoZXIgIgogICAgICAgICAgICAgICAgImEgZG93bmxvYWQgaXMgbmV3ZXIgdGhhbiBhIGNhY2hlZCBpdGVtLCBhbmQgb25seSAiCiAgICAgICAgICAgICAgICAiQ29udGVudC1MZW5ndGggKGZpbGVzaXplKSB3aWxsIGJlIHVzZWQuIFRoaXMgIgogICAgICAgICAgICAgICAgImlzIHVzZWZ1bCBmb3IgY2FzZXMgd2hlcmUgYSBkb3dubG9hZCBhbHdheXMgIgogICAgICAgICAgICAgICAgInJlZGlyZWN0cyB0byBkaWZmZXJlbnQgbWlycm9ycywgd2hpY2ggY291bGQgIgogICAgICAgICAgICAgICAgImNhdXNlIGl0ZW1zIHRvIGJlIG5lZWRsZXNzbHkgcmUtZG93bmxvYWRlZC4gIgogICAgICAgICAgICAgICAgIkRlZmF1bHRzIHRvIEZhbHNlLiIKICAgICAgICAgICAgKSwKICAgICAgICB9LAogICAgICAgICJQS0ciOiB7CiAgICAgICAgICAgICJyZXF1aXJlZCI6IEZhbHNlLAogICAgICAgICAgICAi"}}]
["973628b775f21c036e2ea9da36801f5d007a5cf5-1","973628b775f21c036e2ea9da36801f5d007a5cf5","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0ICB4ZHJsaWIgLHN5cwppbXBvcnQgIHhscmQKaW1wb3J0ICBzeXMKaW1wb3J0ICByZQppbXBvcnQgIGxpbmVjYWNoZQpyZWxvYWQoc3lzKQpzeXMuc2V0ZGVmYXVsdGVuY29kaW5nKCd1dGYtOCcpCgpkZWYgbGlzdF9vZl9ncm91cHMoaW5pdF9saXN0LCBjaGlsZGVybl9saXN0X2xlbik6CiAgICBsaXN0X29mX2dyb3VwID0gemlwKCooaXRlcihpbml0X2xpc3QpLCkgKmNoaWxkZXJuX2xpc3RfbGVuKQogICAgZW5kX2xpc3QgPSBbbGlzdChpKSBmb3IgaSBpbiBsaXN0X29mX2dyb3VwXQogICAgY291bnQgPSBsZW4oaW5pdF9saXN0KSAlIGNoaWxkZXJuX2xpc3RfbGVuCiAgICBlbmRfbGlzdC5hcHBlbmQoaW5pdF9saXN0Wy1jb3VudDpdKSBpZiBjb3VudCAhPTAgZWxzZSBlbmRfbGlzdAogICAgcmV0dXJuIGVuZF9saXN0CgpkZWYgbWFpbigpOgogICAgdGFiID0gJyAnICogNAogICAgcm9ib3RTdHIgPSAnJycqKiogU2V0dGluZ3MgKioqClJlc291cmNlICAgICAgICBWYXJpYWJsZXMudHh0CkxpYnJhcnkgICAgICAgICAuLlxcXFB5dGhvblxcXGNvbnRyb2wucHkgICAgaHR0cDovLzEyNy4wLjAuMTo4MDAzL1NlcnZpY2UKICAgICAgICAnJycKCiAgICB3aXRoIG9wZW4oJ1Rlc3RPcHRpb24ucm9ib3QnLCd3JykgYXMgZjoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGYud3JpdGUocm9ib3RTdHIpCiAgICAgICAgZi53cml0ZSgnXG4qKiogVGVzdCBDYXNlcyAqKionICsgJ1xuJykKICAgICAgICBmLndyaXRlKCclcyclKCdNYWNoaW5lQV9FV1NUZXN0UHJlcGFyZScpICsgJ1xuJykKICAgICAgICBmLndyaXRlKHRhYiArICdTZXRNb2RlICAgIEVXUycgKyAnXG4nKQo8fGZpbV9lbmR8Pg=="]
["a9ccb1f1de3f9aab244b7f9b16a45f7981fe21e9-1","a9ccb1f1de3f9aab244b7f9b16a45f7981fe21e9","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgphZGRpdGlvbmFsX3BhdGhzID0gWwogICMgd2hlcmUgeW91IGNhbiBwdXQgYWRkaXRpb25hbCBzdHJpbmdzIHRvIGxpa2UgdGhlIGdvcm9vdCBvZiB0aGUgYXBwZW5naW5lIFNESwpdCiMgVHlwaWNhbCB1c2VyIHNob3VsZCBub3QgaGF2ZSB0byBtb2RpZnkgYW55dGhpbmcgYmVsb3cuCgppbXBvcnQgb3MKaW1wb3J0IHN5cwppbXBvcnQgcGxhdGZvcm0KaW1wb3J0IHN1YnByb2Nlc3MKCgojIyMKIyMjIEZvcm0gc3RyaW5nIGZvciBPU19BUkNIIGZvbGRlci4KIyMjCgojIERldGVybWluZSBPUyB0eXBlLgpvc19lbnZfdmFyID0gcGxhdGZvcm0uc3lzdGVtKCkubG93ZXIoKQpvc19zdHJpbmcgPSAiIgppZiAibGludXgiIGluIG9zX2Vudl92YXI6CiAgb3Nfc3RyaW5nID0gImxpbnV4IgplbGlmICJkYXJ3aW4iIGluIG9zX2Vudl92YXI6CiAgb3Nfc3RyaW5nID0gImRhcndpbiIKZWxzZToKICBwcmludCAiVW5zdXBwb3J0ZWQgT1MsIGZvdW5kIGVudmlyb25tZW50IHZhcmlhYmxlID0gIiwgb3NfZW52X3ZhcgogIHN5cy5leGl0KDEpCgojIERldGVybWluZSBBcmNoaXRlY3R1cmUuCmhvc3RfZW52X3ZhciA9IHBsYXRmb3JtLm1hY2hpbmUoKS5sb3dlcigpCmlmICJ4ODZfNjQiIGluIGhvc3RfZW52X3ZhcjoKICBhcmNoX3N0cmluZyA9ICJhbWQ2NCIKZWxpZiAieDg2IiBpbiBob3N0X2Vudl92YXI6CiAgYXJjaF9zdHJpbmcgPSAiaTM4NiIKZWxzZToKICBwcmludCAiVW5zdXBwb3J0ZWQgQVJDSCwgZm91bmQgZW52aXJvbm1lbnQgdmFyaWFibGUgPSAiLCBob3N0X2Vudl92YXIKICBzeXMuZXhpdCgxKQoKbGliX2ZvbGRlciA9IG9zX3N0cmluZyArICJfIiArIGFyY2hfc3RyaW5nCnByaW50IGxpYl9mb2xkZXIKZ29wYXRoX2Vudl92YXIgPSBvcy5lbnZpcm9uWyJHT1BBVEgiXQpnb3BhdGhzID0gZ29wYXRoX2Vudl92YXIuc3BsaXQoIjoiKQpnb3BhdGhzID0gYWRkaXRpb25hbF9wYXRocyArIGdvcGF0aHMKZm9sZGVycyA9ICIiCmZvciBnb3BhdGggaW4gZ29wYXRoczoKICBmb2xkZXIgPSBnb3BhdGgKICAjIElmIHRoZSBwa2cgZm9sZGVyIGlzbnQgaW4gdGhlIHBhdGgsIGFkZCBpdC4KICBpZiBsaWJfZm9sZGVyIG5vdCBpbiBmb2xkZXI6CiAgICBmb2xkZXIgPSBvcy5wYXRoLmpvaW4oZ29wYXRoLCAicGtnIiwgbGliX2ZvbGRlcikKICBpZiBvcy5wYXRoLmlzZGlyKGZvbGRlcik6CiAgICBpZiBmb2xkZXJzID09ICIiOgogICAgICBmb2xkZXJzID0gZm9sZGVyCiAgICBlbHNlOgogICAgICBmb2xkZXJzID0gZm9sZGVycyArICI6IiArIGZvbGRlcgogIGVsc2U6CiAgICBwcmludCAiV2FybmluZyBjb3VsZCBub3QgZmluZCAlcy4gTm90IGFkZGluZyBpdCIsIGZvbGRlcgojIyMKIyMjIENoZWNrIGZvciBnb2NvZGUgYmluLgojIyMKaWYgZ29jb2RlX2JpbiA9PSAiIjoKICAjIEdvY29kZSBtdXN0IGJlIGluIHBhdGggaWYgbm90IHNwZWNpZmllZC4KICBnb2NvZGVfYmluID0gImdvY29kZSIKdHJ5OgogIHN1YnByb2Nlc3MuY2FsbChbZ29jb2RlX2JpbiwgImNsb3NlIl0pCiAgc3VicHJvY2Vzcy5jYWxsKFtnb2NvZGVfYmluLCAic2V0IiwgImxpYi1wYXRoIiwgZm9sZGVyc10pCiAgcHJpbnQgIkFkZGVkIHRoZSBmb2xsb3dpbmcgcGF0aCB0byBnb2NvZGU6ICIsIGZvbGRlcnMKZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6CiAgaWYgZXJyb3IuZXJybm8gPT0gb3MuZXJybm8uRU5PRU5UOgogICAgcHJpbnQgIkNhbid0IGZpbmQgZ29jb2RlIGJpbiIsIGdvY29kZV9iaW4KICBlbHNlOgogICAgcHJpbnQgIlVua25vd24gZXJyb3IiCiAgc3lzLmV4aXQoMSkKPHxmaW1fc3VmZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCiMgTW9kaWZ5IHRoaXMgc2VjdGlvbi4KZ29jb2RlX2JpbiA9ICIiCjx8ZmltX2VuZHw+"]
["a9ccb1f1de3f9aab244b7f9b16a45f7981fe21e9-2","a9ccb1f1de3f9aab244b7f9b16a45f7981fe21e9","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCiMgTW9kaWZ5IHRoaXMgc2VjdGlvbi4KZ29jb2RlX2JpbiA9ICIiCmFkZGl0aW9uYWxfcGF0aHMgPSBbCiAgIyB3aGVyZSB5b3UgY2FuIHB1dCBhZGRpdGlvbmFsIHN0cmluZ3MgdG8gbGlrZSB0aGUgZ29yb290IG9mIHRoZSBhcHBlbmdpbmUgU0RLCl0KIyBUeXBpY2FsIHVzZXIgc2hvdWxkIG5vdCBoYXZlIHRvIG1vZGlmeSBhbnl0aGluZyBiZWxvdy4KCmltcG9ydCBvcwppbXBvcnQgc3lzCmltcG9ydCBwbGF0Zm9ybQppbXBvcnQgc3VicHJvY2VzcwoKCiMjIwojIyMgRm9ybSBzdHJpbmcgZm9yIE9TX0FSQ0ggZm9sZGVyLgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMjIwoKIyBEZXRlcm1pbmUgT1MgdHlwZS4Kb3NfZW52X3ZhciA9IHBsYXRmb3JtLnN5c3RlbSgpLmxvd2VyKCkKPHxmaW1fZW5kfD4="]
["a9ccb1f1de3f9aab244b7f9b16a45f7981fe21e9-3","a9ccb1f1de3f9aab244b7f9b16a45f7981fe21e9","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCiMgTW9kaWZ5IHRoaXMgc2VjdGlvbi4KZ29jb2RlX2JpbiA9ICIiCmFkZGl0aW9uYWxfcGF0aHMgPSBbCiAgIyB3aGVyZSB5b3UgY2FuIHB1dCBhZGRpdGlvbmFsIHN0cmluZ3MgdG8gbGlrZSB0aGUgZ29yb290IG9mIHRoZSBhcHBlbmdpbmUgU0RLCl0KIyBUeXBpY2FsIHVzZXIgc2hvdWxkIG5vdCBoYXZlIHRvIG1vZGlmeSBhbnl0aGluZyBiZWxvdy4KCmltcG9ydCBvcwppbXBvcnQgc3lzCmltcG9ydCBwbGF0Zm9ybQppbXBvcnQgc3VicHJvY2VzcwoKCiMjIwojIyMgRm9ybSBzdHJpbmcgZm9yIE9TX0FSQ0ggZm9sZGVyLgojIyMKCiMgRGV0ZXJtaW5lIE9TIHR5cGUuCm9zX2Vudl92YXIgPSBwbGF0Zm9ybS5zeXN0ZW0oKS5sb3dlcigpCm9zX3N0cmluZyA9ICIiCmlmICJsaW51eCIgaW4gb3NfZW52X3ZhcjoKICBvc19zdHJpbmcgPSAibGludXgiCmVsaWYgImRhcndpbiIgaW4gb3NfZW52X3ZhcjoKICBvc19zdHJpbmcgPSAiZGFyd2luIgplbHNlOgogIHByaW50ICJVbnN1cHBvcnRlZCBPUywgZm91bmQgZW52aXJvbm1lbnQgdmFyaWFibGUgPSAiLCBvc19lbnZfdmFyCiAgc3lzLmV4aXQoMSkKCiMgRGV0ZXJtaW5lIEFyY2hpdGVjdHVyZS4KaG9zdF9lbnZfdmFyID0gcGxhdGZvcm0ubWFjaGluZSgpLmxvd2VyKCkKaWYgIng4Nl82NCIgaW4gaG9zdF9lbnZfdmFyOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgYXJjaF9zdHJpbmcgPSAiYW1kNjQiCjx8ZmltX2VuZHw+"]
["a9ccb1f1de3f9aab244b7f9b16a45f7981fe21e9-4","a9ccb1f1de3f9aab244b7f9b16a45f7981fe21e9","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCiMgTW9kaWZ5IHRoaXMgc2VjdGlvbi4KZ29jb2RlX2JpbiA9ICIiCmFkZGl0aW9uYWxfcGF0aHMgPSBbCiAgIyB3aGVyZSB5b3UgY2FuIHB1dCBhZGRpdGlvbmFsIHN0cmluZ3MgdG8gbGlrZSB0aGUgZ29yb290IG9mIHRoZSBhcHBlbmdpbmUgU0RLCl0KIyBUeXBpY2FsIHVzZXIgc2hvdWxkIG5vdCBoYXZlIHRvIG1vZGlmeSBhbnl0aGluZyBiZWxvdy4KCmltcG9ydCBvcwppbXBvcnQgc3lzCmltcG9ydCBwbGF0Zm9ybQppbXBvcnQgc3VicHJvY2VzcwoKCiMjIwojIyMgRm9ybSBzdHJpbmcgZm9yIE9TX0FSQ0ggZm9sZGVyLgojIyMKCiMgRGV0ZXJtaW5lIE9TIHR5cGUuCm9zX2Vudl92YXIgPSBwbGF0Zm9ybS5zeXN0ZW0oKS5sb3dlcigpCm9zX3N0cmluZyA9ICIiCmlmICJsaW51eCIgaW4gb3NfZW52X3ZhcjoKICBvc19zdHJpbmcgPSAibGludXgiCmVsaWYgImRhcndpbiIgaW4gb3NfZW52X3ZhcjoKICBvc19zdHJpbmcgPSAiZGFyd2luIgplbHNlOgogIHByaW50ICJVbnN1cHBvcnRlZCBPUywgZm91bmQgZW52aXJvbm1lbnQgdmFyaWFibGUgPSAiLCBvc19lbnZfdmFyCiAgc3lzLmV4aXQoMSkKCiMgRGV0ZXJtaW5lIEFyY2hpdGVjdHVyZS4KaG9zdF9lbnZfdmFyID0gcGxhdGZvcm0ubWFjaGluZSgpLmxvd2VyKCkKaWYgIng4Nl82NCIgaW4gaG9zdF9lbnZfdmFyOgogIGFyY2hfc3RyaW5nID0gImFtZDY0IgplbGlmICJ4ODYiIGluIGhvc3RfZW52X3ZhcjoKICBhcmNoX3N0cmluZyA9ICJpMzg2IgplbHNlOgogIHByaW50ICJVbnN1cHBvcnRlZCBBUkNILCBmb3VuZCBlbnZpcm9ubWVudCB2YXJpYWJsZSA9ICIsIGhvc3RfZW52X3ZhcgogIHN5cy5leGl0KDEpCgpsaWJfZm9sZGVyID0gb3Nfc3RyaW5nICsgIl8iICsgYXJjaF9zdHJpbmcKcHJpbnQgbGliX2ZvbGRlcgpnb3BhdGhfZW52X3ZhciA9IG9zLmVudmlyb25bIkdPUEFUSCJdCmdvcGF0aHMgPSBnb3BhdGhfZW52X3Zhci5zcGxpdCgiOiIpCmdvcGF0aHMgPSBhZGRpdGlvbmFsX3BhdGhzICsgZ29wYXRocwo8fGZpbV9ob2xlfD4KICBpZiBsaWJfZm9sZGVyIG5vdCBpbiBmb2xkZXI6CiAgICBmb2xkZXIgPSBvcy5wYXRoLmpvaW4oZ29wYXRoLCAicGtnIiwgbGliX2ZvbGRlcikKICBpZiBvcy5wYXRoLmlzZGlyKGZvbGRlcik6CiAgICBpZiBmb2xkZXJzID09ICIiOgogICAgICBmb2xkZXJzID0gZm9sZGVyCiAgICBlbHNlOgogICAgICBmb2xkZXJzID0gZm9sZGVycyArICI6IiArIGZvbGRlcgogIGVsc2U6CiAgICBwcmludCAiV2FybmluZyBjb3VsZCBub3QgZmluZCAlcy4gTm90IGFkZGluZyBpdCIsIGZvbGRlcgojIyMKIyMjIENoZWNrIGZvciBnb2NvZGUgYmluLgojIyMKaWYgZ29jb2RlX2JpbiA9PSAiIjoKICAjIEdvY29kZSBtdXN0IGJlIGluIHBhdGggaWYgbm90IHNwZWNpZmllZC4KICBnb2NvZGVfYmluID0gImdvY29kZSIKdHJ5OgogIHN1YnByb2Nlc3MuY2FsbChbZ29jb2RlX2JpbiwgImNsb3NlIl0pCiAgc3VicHJvY2Vzcy5jYWxsKFtnb2NvZGVfYmluLCAic2V0IiwgImxpYi1wYXRoIiwgZm9sZGVyc10pCiAgcHJpbnQgIkFkZGVkIHRoZSBmb2xsb3dpbmcgcGF0aCB0byBnb2NvZGU6ICIsIGZvbGRlcnMKZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6CiAgaWYgZXJyb3IuZXJybm8gPT0gb3MuZXJybm8uRU5PRU5UOgogICAgcHJpbnQgIkNhbid0IGZpbmQgZ29jb2RlIGJpbiIsIGdvY29kZV9iaW4KICBlbHNlOgogICAgcHJpbnQgIlVua25vd24gZXJyb3IiCiAgc3lzLmV4aXQoMSkKPHxmaW1fc3VmZml4fD4KZm9sZGVycyA9ICIiCmZvciBnb3BhdGggaW4gZ29wYXRoczoKICBmb2xkZXIgPSBnb3BhdGgKICAjIElmIHRoZSBwa2cgZm9sZGVyIGlzbnQgaW4gdGhlIHBhdGgsIGFkZCBpdC4KPHxmaW1fZW5kfD4="]
["a9ccb1f1de3f9aab244b7f9b16a45f7981fe21e9-5","a9ccb1f1de3f9aab244b7f9b16a45f7981fe21e9","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCiMgTW9kaWZ5IHRoaXMgc2VjdGlvbi4KZ29jb2RlX2JpbiA9ICIiCmFkZGl0aW9uYWxfcGF0aHMgPSBbCiAgIyB3aGVyZSB5b3UgY2FuIHB1dCBhZGRpdGlvbmFsIHN0cmluZ3MgdG8gbGlrZSB0aGUgZ29yb290IG9mIHRoZSBhcHBlbmdpbmUgU0RLCl0KIyBUeXBpY2FsIHVzZXIgc2hvdWxkIG5vdCBoYXZlIHRvIG1vZGlmeSBhbnl0aGluZyBiZWxvdy4KCmltcG9ydCBvcwppbXBvcnQgc3lzCmltcG9ydCBwbGF0Zm9ybQppbXBvcnQgc3VicHJvY2VzcwoKCiMjIwojIyMgRm9ybSBzdHJpbmcgZm9yIE9TX0FSQ0ggZm9sZGVyLgojIyMKCiMgRGV0ZXJtaW5lIE9TIHR5cGUuCm9zX2Vudl92YXIgPSBwbGF0Zm9ybS5zeXN0ZW0oKS5sb3dlcigpCm9zX3N0cmluZyA9ICIiCmlmICJsaW51eCIgaW4gb3NfZW52X3ZhcjoKICBvc19zdHJpbmcgPSAibGludXgiCmVsaWYgImRhcndpbiIgaW4gb3NfZW52X3ZhcjoKICBvc19zdHJpbmcgPSAiZGFyd2luIgplbHNlOgogIHByaW50ICJVbnN1cHBvcnRlZCBPUywgZm91bmQgZW52aXJvbm1lbnQgdmFyaWFibGUgPSAiLCBvc19lbnZfdmFyCiAgc3lzLmV4aXQoMSkKCiMgRGV0ZXJtaW5lIEFyY2hpdGVjdHVyZS4KaG9zdF9lbnZfdmFyID0gcGxhdGZvcm0ubWFjaGluZSgpLmxvd2VyKCkKaWYgIng4Nl82NCIgaW4gaG9zdF9lbnZfdmFyOgogIGFyY2hfc3RyaW5nID0gImFtZDY0IgplbGlmICJ4ODYiIGluIGhvc3RfZW52X3ZhcjoKICBhcmNoX3N0cmluZyA9ICJpMzg2IgplbHNlOgogIHByaW50ICJVbnN1cHBvcnRlZCBBUkNILCBmb3VuZCBlbnZpcm9ubWVudCB2YXJpYWJsZSA9ICIsIGhvc3RfZW52X3ZhcgogIHN5cy5leGl0KDEpCgpsaWJfZm9sZGVyID0gb3Nfc3RyaW5nICsgIl8iICsgYXJjaF9zdHJpbmcKcHJpbnQgbGliX2ZvbGRlcgpnb3BhdGhfZW52X3ZhciA9IG9zLmVudmlyb25bIkdPUEFUSCJdCmdvcGF0aHMgPSBnb3BhdGhfZW52X3Zhci5zcGxpdCgiOiIpCmdvcGF0aHMgPSBhZGRpdGlvbmFsX3BhdGhzICsgZ29wYXRocwpmb2xkZXJzID0gIiIKZm9yIGdvcGF0aCBpbiBnb3BhdGhzOgogIGZvbGRlciA9IGdvcGF0aAogICMgSWYgdGhlIHBrZyBmb2xkZXIgaXNudCBpbiB0aGUgcGF0aCwgYWRkIGl0LgogIGlmIGxpYl9mb2xkZXIgbm90IGluIGZvbGRlcjoKICAgIGZvbGRlciA9IG9zLnBhdGguam9pbihnb3BhdGgsICJwa2ciLCBsaWJfZm9sZGVyKQogIGlmIG9zLnBhdGguaXNkaXIoZm9sZGVyKToKICAgIGlmIGZvbGRlcnMgPT0gIiI6CiAgICAgIGZvbGRlcnMgPSBmb2xkZXIKICAgIGVsc2U6CiAgICAgIGZvbGRlcnMgPSBmb2xkZXJzICsgIjoiICsgZm9sZGVyCiAgZWxzZToKICAgIHByaW50ICJXYXJuaW5nIGNvdWxkIG5vdCBmaW5kICVzLiBOb3QgYWRkaW5nIGl0IiwgZm9sZGVyCiMjIwojIyMgQ2hlY2sgZm9yIGdvY29kZSBiaW4uCiMjIwppZiBnb2NvZGVfYmluID09ICIiOgogICMgR29jb2RlIG11c3QgYmUgaW4gcGF0aCBpZiBub3Qgc3BlY2lmaWVkLgogIGdvY29kZV9iaW4gPSAiZ29jb2RlIgo8fGZpbV9ob2xlfD4KZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6CiAgaWYgZXJyb3IuZXJybm8gPT0gb3MuZXJybm8uRU5PRU5UOgogICAgcHJpbnQgIkNhbid0IGZpbmQgZ29jb2RlIGJpbiIsIGdvY29kZV9iaW4KICBlbHNlOgogICAgcHJpbnQgIlVua25vd24gZXJyb3IiCiAgc3lzLmV4aXQoMSkKPHxmaW1fc3VmZml4fD4KdHJ5OgogIHN1YnByb2Nlc3MuY2FsbChbZ29jb2RlX2JpbiwgImNsb3NlIl0pCiAgc3VicHJvY2Vzcy5jYWxsKFtnb2NvZGVfYmluLCAic2V0IiwgImxpYi1wYXRoIiwgZm9sZGVyc10pCiAgcHJpbnQgIkFkZGVkIHRoZSBmb2xsb3dpbmcgcGF0aCB0byBnb2NvZGU6ICIsIGZvbGRlcnMKPHxmaW1fZW5kfD4="]
["9770ac9356554d42b9adf4e192e1ac297e0949c3-1","9770ac9356554d42b9adf4e192e1ac297e0949c3","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwgZmluZF9wYWNrYWdlcwoKc2V0dXAoCgluYW1lID0gInd1YmxvYWRlci1yZXN0cmVhbWVyIiwKCXZlcnNpb24gPSAiMC4wLjAiLAoJcGFja2FnZXMgPSBmaW5kX3BhY2thZ2VzKCksCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCWluc3RhbGxfcmVxdWlyZXMgPSBbCgkJImFyZ2giLAoJCSJweXRob24tZGF0ZXV0aWwiLAoJCSJmbGFzayIsCjx8ZmltX2VuZHw+"]
["9770ac9356554d42b9adf4e192e1ac297e0949c3-2","9770ac9356554d42b9adf4e192e1ac297e0949c3","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwgZmluZF9wYWNrYWdlcwoKc2V0dXAoCgluYW1lID0gInd1YmxvYWRlci1yZXN0cmVhbWVyIiwKCXZlcnNpb24gPSAiMC4wLjAiLAoJcGFja2FnZXMgPSBmaW5kX3BhY2thZ2VzKCksCglpbnN0YWxsX3JlcXVpcmVzID0gWwoJCSJhcmdoIiwKCQkicHl0aG9uLWRhdGV1dGlsIiwKCQkiZmxhc2siLAoJCSJnZXZlbnQiLAoJCSJtb25vdG9uaWMiLAoJCSJwcm9tZXRoZXVzLWNsaWVudCIsCgkJInd1YmxvYWRlci1jb21tb24iLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgldLAo8fGZpbV9lbmR8Pg=="]
["9770ac9356554d42b9adf4e192e1ac297e0949c3-3","9770ac9356554d42b9adf4e192e1ac297e0949c3","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwgZmluZF9wYWNrYWdlcwoKc2V0dXAoCgluYW1lID0gInd1YmxvYWRlci1yZXN0cmVhbWVyIiwKCXZlcnNpb24gPSAiMC4wLjAiLAoJcGFja2FnZXMgPSBmaW5kX3BhY2thZ2VzKCksCglpbnN0YWxsX3JlcXVpcmVzID0gWwoJCSJhcmdoIiwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoJCSJweXRob24tZGF0ZXV0aWwiLAoJCSJmbGFzayIsCgkJImdldmVudCIsCgkJIm1vbm90b25pYyIsCjx8ZmltX2VuZHw+"]
["9770ac9356554d42b9adf4e192e1ac297e0949c3-4","9770ac9356554d42b9adf4e192e1ac297e0949c3","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwgZmluZF9wYWNrYWdlcwoKc2V0dXAoCgluYW1lID0gInd1YmxvYWRlci1yZXN0cmVhbWVyIiwKCXZlcnNpb24gPSAiMC4wLjAiLAoJcGFja2FnZXMgPSBmaW5kX3BhY2thZ2VzKCksCglpbnN0YWxsX3JlcXVpcmVzID0gWwoJCSJhcmdoIiwKCQkicHl0aG9uLWRhdGV1dGlsIiwKCQkiZmxhc2siLAoJCSJnZXZlbnQiLAo8fGZpbV9ob2xlfD4KCV0sCikKPHxmaW1fc3VmZml4fD4KCQkibW9ub3RvbmljIiwKCQkicHJvbWV0aGV1cy1jbGllbnQiLAoJCSJ3dWJsb2FkZXItY29tbW9uIiwKPHxmaW1fZW5kfD4="]
["9770ac9356554d42b9adf4e192e1ac297e0949c3-5","9770ac9356554d42b9adf4e192e1ac297e0949c3","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwgZmluZF9wYWNrYWdlcwoKc2V0dXAoCgluYW1lID0gInd1YmxvYWRlci1yZXN0cmVhbWVyIiwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoJdmVyc2lvbiA9ICIwLjAuMCIsCglwYWNrYWdlcyA9IGZpbmRfcGFja2FnZXMoKSwKCWluc3RhbGxfcmVxdWlyZXMgPSBbCgkJImFyZ2giLAo8fGZpbV9lbmR8Pg=="]
["a9dab8cb0f57b955e3c25b848195b52dae370afa-1","a9dab8cb0f57b955e3c25b848195b52dae370afa","PHxmaW1fcHJlZml4fD4KZnJvbSBjb3JlIGltcG9ydCBtZXNzYWdlcwpmcm9tIGNvcmUud2VleGNlcHRpb25zIGltcG9ydCBGYXRhbEV4Y2VwdGlvbgpmcm9tIG1ha28gaW1wb3J0IHRlbXBsYXRlCmZyb20gY29yZS5jb25maWcgaW1wb3J0IHNlc3Npb25zX3BhdGgsIHNlc3Npb25zX2V4dApmcm9tIGNvcmUubG9nZ2VycyBpbXBvcnQgbG9nLCBkbG9nLCBzdHJlYW1faGFuZGxlcgpmcm9tIGNvcmUubW9kdWxlIGltcG9ydCBTdGF0dXMKaW1wb3J0IG9zCmltcG9ydCB5YW1sCmltcG9ydCBnbG9iCmltcG9ydCBsb2dnaW5nCmltcG9ydCB1cmxsaWIucGFyc2UKaW1wb3J0IGF0ZXhpdAppbXBvcnQgYXN0CmltcG9ydCBwcHJpbnQKCnByaW50X2ZpbHRlcnMgPSAoCiAgICAnZGVidWcnLAogICAgJ2NoYW5uZWwnLAogICAgJ3Byb3h5JwopCgpzZXRfZmlsdGVycyA9ICgKICAgICdkZWJ1ZycsCiAgICAnY2hhbm5lbCcsCiAgICAncHJveHknCikKCgpjbGFzcyBTZXNzaW9uKGRpY3QpOgoKICAgIGRlZiBfc2Vzc2lvbl9zYXZlX2F0ZXhpdChzZWxmKToKCiAgICAgICAgd2l0aCBvcGVuKHNlbGZbJ3BhdGgnXSwgJ3cnKSBhcyB5YW1sZmlsZToKICAgICAgICAgICAgeWFtbC5kdW1wKAogICAgICAgICAgICAgICAgZGljdChzZWxmKSwKICAgICAgICAgICAgICAgIHlhbWxmaWxlLAogICAgICAgICAgICAgICAgZGVmYXVsdF9mbG93X3N0eWxlPUZhbHNlCiAgICAgICAgICAgICkKCiAgICBkZWYgcHJpbnRfdG9fdXNlcihzZWxmLCBtb2R1bGVfZmlsdGVyPScnKToKCiAgICAgICAgZGxvZy5pbmZvKHBwcmludC5wZm9ybWF0KHNlbGYpKQoKICAgICAgICBmb3IgbW9kX25hbWUsIG1vZF92YWx1ZSBpbiBzZWxmLml0ZW1zKCk6CgogICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1vZF92YWx1ZSwgZGljdCk6CiAgICAgICAgICAgICAgICBtb2RfYXJncyA9IG1vZF92YWx1ZS5nZXQoJ3N0b3JlZF9hcmdzJykKCiAgICAgICAgICAgICAgICAjIElzIGEgbW9kdWxlLCBwcmludCBhbGwgdGhlIHN0b3JhYmxlIHN0b3JlZF9hcmd1bWVudHMKICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudCwgYXJnX3ZhbHVlIGluIG1vZF9hcmdzLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgICAgaWYgbm90IG1vZHVsZV9maWx0ZXIgb3IgKCIlcy4lcyIgJSAobW9kX25hbWUsIGFyZ3VtZW50KSkuc3RhcnRzd2l0aChtb2R1bGVfZmlsdGVyKToKICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8obWVzc2FnZXMuc2Vzc2lvbnMuc2V0X21vZHVsZV9zX3NfcyAlIChtb2RfbmFtZSwgYXJndW1lbnQsIGFyZ192YWx1ZSkpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAjIElmIGlzIG5vdCBhIG1vZHVsZSwganVzdCBwcmludCBpZiBtYXRjaGVzIHdpdGggcHJpbnRfZmlsdGVycwogICAgICAgICAgICAgICAgaWYgYW55KGYgZm9yIGYgaW4gcHJpbnRfZmlsdGVycyBpZiBmID09IG1vZF9uYW1lIGFuZCBmLnN0YXJ0c3dpdGgobW9kdWxlX2ZpbHRlcikpOgogICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKG1lc3NhZ2VzLnNlc3Npb25zLnNldF9zX3MgJSAobW9kX25hbWUsIG1vZF92YWx1ZSkpCgogICAgZGVmIGdldF9jb25uZWN0aW9uX2luZm8oc2VsZik6CiAgICAgICAgcmV0dXJuIHRlbXBsYXRlLlRlbXBsYXRlKG1lc3NhZ2VzLnNlc3Npb25zLmNvbm5lY3Rpb25faW5mbykucmVuZGVyKAogICAgICAgICAgICB1cmw9c2VsZlsndXJsJ10sCiAgICAgICAgICAgIHVzZXI9c2VsZlsnc3lzdGVtX2luZm8nXVsncmVzdWx0cyddLmdldCgnd2hvYW1pJywgJycpLAogICAgICAgICAgICBob3N0PXNlbGZbJ3N5c3RlbV9pbmZvJ11bJ3Jlc3VsdHMnXS5nZXQoJ2hvc3RuYW1lJywgJycpLAogICAgICAgICAgICBwYXRoPXNlbGZbJ2ZpbGVfY2QnXVsncmVzdWx0cyddLmdldCgnY3dkJywgJy4nKQogICAgICAgICkKCiAgICBkZWYgbG9hZF9zZXNzaW9uKHNlbGYsIGRhdGEpOgogICAgICAgICIiIgogICAgICAgIFVwZGF0ZSB0aGUgc2Vzc2lvbiBkaWN0aW9uYXJ5LCBhbmQgb2NjYXNpb25hbGx5IHJ1bgogICAgICAgIGFjdGlvbl88YXJnPiBmdW5jdGlvbi4KICAgICAgICAiIiIKCiAgICAgICAgc2VsZi51cGRhdGUoZGF0YSkKCiAgICAgICAgZm9yIG1vZHVsZV9hcmd1bWVudCwgdmFsdWUgaW4gZGF0YS5pdGVtcygpOgoKICAgICAgICAgICAgIyBJZiBhY3Rpb25fPG1vZHVsZV9hcmd1bWVudD4gZnVuY3Rpb24gZXhpc3RzLCB0cmlnZ2VyIHRoZSBhY3Rpb24KICAgICAgICAgICAgYWN0aW9uX25hbWUgPSAnYWN0aW9uXyVzJyAlIChtb2R1bGVfYXJndW1lbnQucmVwbGFjZSgnLicsICdfJykpCiAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgYWN0aW9uX25hbWUpOgogICAgICAgICAgICAgICAgYWN0aW9uX2Z1bmMgPSBnZXRhdHRyKHNlbGYsIGFjdGlvbl9uYW1lKQogICAgICAgICAgICAgICAgaWYgaGFzYXR0cihhY3Rpb25fZnVuYywgJ19fY2FsbF9fJyk6CiAgICAgICAgICAgICAgICAgICAgYWN0aW9uX2Z1bmMobW9kdWxlX2FyZ3VtZW50LCB2YWx1ZSkKCiAgICBkZWYgYWN0aW9uX2RlYnVnKHNlbGYsIG1vZHVsZV9hcmd1bWVudCwgdmFsdWUpOgoKICAgICAgICBpZiB2YWx1ZToKICAgICAgICAgICAgc3RyZWFtX2hhbmRsZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKICAgICAgICBlbHNlOgogICAgICAgICAgICBzdHJlYW1faGFuZGxlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCgogICAgZGVmIGFjdGlvbl9wcm94eShzZWxmLCBtb2R1bGVfYXJndW1lbnQsIHZhbHVlKToKICAgICAgICAiIiJBZnRlciBzZXR0aW5nIGEgbmV3IHByb3h5LCByZWluaXRpYXRlIGNoYW5uZWwgaWYgYWxyZWFkeSBzZXQiIiIKCiAgICAgICAgaWYgJ3NoZWxsX3BocCcgaW4gc2VsZjoKICAgICAgICAgICAgc2VsZlsnc2hlbGxfcGhwJ11bJ3N0YXR1cyddID0gU3RhdHVzLklETEUKCiAgICBkZWYgYWN0aW9uX2NoYW5uZWwoc2VsZiwgbW9kdWxlX2FyZ3VtZW50LCB2YWx1ZSk6CiAgICAgICAgIiIiQWZ0ZXIgc2V0dGluZyBhIG5ldyBjaGFubmVsLCByZWluaXRpYXRlIGl0IiIiCgogICAgICAgIGlmICdzaGVsbF9waHAnIGluIHNlbGY6CiAgICAgICAgICAgIHNlbGZbJ3NoZWxsX3BocCddWydzdGF0dXMnXSA9IFN0YXR1cy5JRExFCgogICAgZGVmIHVuc2V0KHNlbGYsIG1vZHVsZV9hcmd1bWVudCk6CiAgICAgICAgIiIiQ2FsbGVkIGJ5IHVzZXIgdG8gdW5zZXQgdGhlIHNlc3Npb24gdmFyaWFibGVzIiIiCgogICAgICAgICMgSWYgYWN0aW9uXzxtb2R1bGVfYXJndW1lbnQ+IGZ1bmN0aW9uIGV4aXN0cywgdHJpZ2dlciB0aGUgYWN0aW9uCiAgICAgICAgIyBwYXNzaW5nIE5vbmUKICAgICAgICBhY3Rpb25fbmFtZSA9ICdhY3Rpb25fJXMnICUgKG1vZHVsZV9hcmd1bWVudC5yZXBsYWNlKCcuJywgJ18nKSkKICAgICAgICBpZiBoYXNhdHRyKHNlbGYsIGFjdGlvbl9uYW1lKToKICAgICAgICAgICAgYWN0aW9uX2Z1bmMgPSBnZXRhdHRyKHNlbGYsIGFjdGlvbl9uYW1lKQogICAgICAgICAgICBpZiBoYXNhdHRyKGFjdGlvbl9mdW5jLCAnX19jYWxsX18nKToKICAgICAgICAgICAgICAgIGFjdGlvbl9mdW5jKG1vZHVsZV9hcmd1bWVudCwgTm9uZSkKCiAgICAgICAgaWYgbW9kdWxlX2FyZ3VtZW50LmNvdW50KCcuJykgPT0gMToKICAgICAgICAgICAgbW9kdWxlX25hbWUsIGFyZ19uYW1lID0gbW9kdWxlX2FyZ3VtZW50LnNwbGl0KCcuJykKICAgICAgICAgICAgaWYgYXJnX25hbWUgbm90IGluIHNlbGZbbW9kdWxlX25hbWVdWydzdG9yZWRfYXJncyddOgogICAgICAgICAgICAgICAgbG9nLndhcm5pbmcobWVzc2FnZXMuc2Vzc2lvbnMuZXJyb3Jfc2Vzc2lvbl9zX25vdF9tb2RpZmllZCAlICgnJXMuJXMnICUgKG1vZHVsZV9uYW1lLCBhcmdfbmFtZSkpKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgZGVsIHNlbGZbbW9kdWxlX25hbWVdWydzdG9yZWRfYXJncyddW2FyZ19uYW1lXQogICAgICAgICAgICAgICAgbG9nLmluZm8obWVzc2FnZXMuc2Vzc2lvbnMudW5zZXRfbW9kdWxlX3NfcyAlIChtb2R1bGVfbmFtZSwgYXJnX25hbWUpKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG1vZHVsZV9uYW1lID0gbW9kdWxlX2FyZ3VtZW50CiAgICAgICAgICAgIGlmIG1vZHVsZV9uYW1lIG5vdCBpbiBzZWxmIGFuZCBtb2R1bGVfbmFtZSBub3QgaW4gc2V0X2ZpbHRlcnM6CiAgICAgICAgICAgICAgICBsb2cud2FybmluZyhtZXNzYWdlcy5zZXNzaW9ucy5lcnJvcl9zZXNzaW9uX3Nfbm90X21vZGlmaWVkICUgKG1vZHVsZV9uYW1lKSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHNlbGZbbW9kdWxlX25hbWVdID0gTm9uZQogICAgICAgICAgICAgICAgbG9nLmluZm8obWVzc2FnZXMuc2Vzc2lvbnMudW5zZXRfcyAlIChtb2R1bGVfbmFtZSkpCgogICAgZGVmIHNldChzZWxmLCBtb2R1bGVfYXJndW1lbnQsIHZhbHVlKToKICAgICAgICAiIiJDYWxsZWQgYnkgdXNlciB0byBzZXQgb3Igc2hvdyB0aGUgc2Vzc2lvbiB2YXJpYWJsZXMiIiIKCiAgICAgICAgIyBJIHNhZmVseSBldmFsdWF0ZSB0aGUgdmFsdWUgdHlwZSB0byBhdm9pZCB0byBzYXZlIG9ubHkKICAgICAgICAjIHN0cmluZ3MgdHlwZS4gRGlydHkgYnV0IGVmZmVjdGl2ZS4KICAgICAgICAjIFRPRE86IHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgYXJndW1lbnQgY291bGQgYmUgYWNxdWlyZWQKICAgICAgICAjIGZyb20gbW9kdWxlc1ttb2R1bGVdLmFyZ3BhcnNlci4KICAgICAgICB0cnk6CiAgICAgICAgICAgIHZhbHVlID0gYXN0LmxpdGVyYWxfZXZhbCh2YWx1ZSkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICMgSWYgaXMgbm90IGV2YWx1ZWQsIGp1c3Qga2VlcCBpdCBhcyBzdHJpbmcKICAgICAgICAgICAgcGFzcwoKICAgICAgICAjIElmIGFjdGlvbl88bW9kdWxlX2FyZ3VtZW50PiBmdW5jdGlvbiBleGlzdHMsIHRyaWdnZXIgdGhlIGFjdGlvbgogICAgICAgIGFjdGlvbl9uYW1lID0gJ2FjdGlvbl8lcycgJSAobW9kdWxlX2FyZ3VtZW50LnJlcGxhY2UoJy4nLCAnXycpKQogICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgYWN0aW9uX25hbWUpOgogICAgICAgICAgICBhY3Rpb25fZnVuYyA9IGdldGF0dHIoc2VsZiwgYWN0aW9uX25hbWUpCiAgICAgICAgICAgIGlmIGhhc2F0dHIoYWN0aW9uX2Z1bmMsICdfX2NhbGxfXycpOgogICAgICAgICAgICAgICAgYWN0aW9uX2Z1bmMobW9kdWxlX2FyZ3VtZW50LCB2YWx1ZSkKCiAgICAgICAgaWYgbW9kdWxlX2FyZ3VtZW50LmNvdW50KCcuJykgPT0gMToKICAgICAgICAgICAgbW9kdWxlX25hbWUsIGFyZ19uYW1lID0gbW9kdWxlX2FyZ3VtZW50LnNwbGl0KCcuJykKCiAgICAgICAgICAgICMgU2hvdWxkIGJlIE9LIHRvIHNldCB3aGV0aGV2ZXIgdmFyaWFibGUgd2Ugd2FudAogICAgICAgICAgICAjIGFuZCB3aGljaCB3aWxsIGV2ZW50dWFsbHkgYmUgdXNlZCBieSBhIG1vZHVsZS4KICAgICAgICAgICAgc2VsZlttb2R1bGVfbmFtZV1bJ3N0b3JlZF9hcmdzJ11bYXJnX25hbWVdID0gdmFsdWUKICAgICAgICAgICAgbG9nLmluZm8obWVzc2FnZXMuc2Vzc2lvbnMuc2V0X21vZHVsZV9zX3NfcyAlIChtb2R1bGVfbmFtZSwgYXJnX25hbWUsIHZhbHVlKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBtb2R1bGVfbmFtZSA9IG1vZHVsZV9hcmd1bWVudAogICAgICAgICAgICBpZiBtb2R1bGVfbmFtZSBub3QgaW4gc2VsZiBhbmQgbW9kdWxlX25hbWUgbm90IGluIHNldF9maWx0ZXJzOgogICAgICAgICAgICAgICAgbG9nLndhcm5pbmcobWVzc2FnZXMuc2Vzc2lvbnMuZXJyb3Jfc2Vzc2lvbl9zX25vdF9tb2RpZmllZCAlIChtb2R1bGVfbmFtZSkpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBzZWxmW21vZHVsZV9uYW1lXSA9IHZhbHVlCiAgICAgICAgICAgICAgICBsb2cuaW5mbyhtZXNzYWdlcy5zZXNzaW9ucy5zZXRfc19zICUgKG1vZHVsZV9uYW1lLCB2YWx1ZSkpCgoKY2xhc3MgU2Vzc2lvbkZpbGUoU2Vzc2lvbik6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRicGF0aCwgdm9sYXRpbGU9RmFsc2UpOgoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHdpdGggb3BlbihkYnBhdGgsICdyJykgYXMgZGJmaWxlOgogICAgICAgICAgICAgICAgc2Vzc2lvbmRiID0geWFtbC5zYWZlX2xvYWQoZGJmaWxlLnJlYWQoKSkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgIGxvZy53YXJuaW5nKAogICAgICAgICAgICAgICAgbWVzc2FnZXMuZ2VuZXJpYy5lcnJvcl9sb2FkaW5nX2ZpbGVfc19zICUKICAgICAgICAgICAgICAgIChkYnBhdGgsIHN0cihlKSkpCiAgICAgICAgICAgIHJhaXNlIEZhdGFsRXhjZXB0aW9uKG1lc3NhZ2VzLnNlc3Npb25zLmVycm9yX2xvYWRpbmdfc2Vzc2lvbnMpCgogICAgICAgIGlmIHNlc3Npb25kYiBhbmQgaXNpbnN0YW5jZShzZXNzaW9uZGIsIGRpY3QpOgoKICAgICAgICAgICAgc2F2ZWRfdXJsID0gc2Vzc2lvbmRiLmdldCgndXJsJykKICAgICAgICAgICAgc2F2ZWRfcGFzc3dvcmQgPSBzZXNzaW9uZGIuZ2V0KCdwYXNzd29yZCcpCgogICAgICAgICAgICBpZiBzYXZlZF91cmwgYW5kIHNhdmVkX3Bhc3N3b3JkOgogICAgICAgICAgICAgICAgaWYgbm90IHZvbGF0aWxlOgogICAgICAgICAgICAgICAgICAgICMgUmVnaXN0ZXIgZHVtcCBhdCBleGl0IGFuZCByZXR1cm4KICAgICAgICAgICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIoc2VsZi5fc2Vzc2lvbl9zYXZlX2F0ZXhpdCkKCiAgICAgICAgICAgICAgICBzZWxmLmxvYWRfc2Vzc2lvbihzZXNzaW9uZGIpCiAgICAgICAgICAgICAgICByZXR1cm4KCiAgICAgICAgbG9nLndhcm5pbmcoCiAgICAgICAgICAgIG1lc3NhZ2VzLmdlbmVyaWMuZXJyb3JfbG9hZGluZ19maWxlX3NfcyAlCiAgICAgICAgICAgIChkYnBhdGgsICdubyB1cmwgb3IgcGFzc3dvcmQnKSkKCiAgICAgICAgcmFpc2UgRmF0YWxFeGNlcHRpb24obWVzc2FnZXMuc2Vzc2lvbnMuZXJyb3JfbG9hZGluZ19zZXNzaW9ucykKCgpjbGFzcyBTZXNzaW9uVVJMKFNlc3Npb24pOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmwsIHBhc3N3b3JkLCB2b2xhdGlsZT1GYWxzZSk6CgogICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNlc3Npb25zX3BhdGgpOgogICAgICAgICAgICBvcy5tYWtlZGlycyhzZXNzaW9uc19wYXRoKQoKICAgICAgICAjIEd1ZXNzIGEgZ2VuZXJpYyBob3N0Zm9sZGVyL2RibmFtZQogICAgICAgIGhvc3RuYW1lID0gdXJsbGliLnBhcnNlLnVybHBhcnNlKHVybCkuaG9zdG5hbWUKICAgICAgICBpZiBub3QgaG9zdG5hbWU6CiAgICAgICAgICAgIHJhaXNlIEZhdGFsRXhjZXB0aW9uKG1lc3NhZ2VzLmdlbmVyaWMuZXJyb3JfdXJsX2Zvcm1hdCkKCiAgICAgICAgaG9zdGZvbGRlciA9IG9zLnBhdGguam9pbihzZXNzaW9uc19wYXRoLCBob3N0bmFtZSkKICAgICAgICBkYm5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUodXJsbGliLnBhcnNlLnVybHNwbGl0KHVybCkucGF0aCkpWzBdCgogICAgICAgICMgQ2hlY2sgaWYgc2Vzc2lvbiBhbHJlYWR5IGV4aXN0cwogICAgICAgIHNlc3Npb25zX2F2YWlsYWJsZSA9IGdsb2IuZ2xvYigKICAgICAgICAgICAgb3MucGF0aC5qb2luKAogICAgICAgICAgICAgICAgaG9zdGZvbGRlciwKICAgICAgICAgICAgICAgICcqJXMnICUKICAgICAgICAgICAgICAgIHNlc3Npb25zX2V4dCkpCgogICAgICAgIGZvciBkYnBhdGggaW4gc2Vzc2lvbnNfYXZhaWxhYmxlOgoKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgd2l0aCBvcGVuKGRicGF0aCwgJ3InKSBhcyBkYmZpbGU6CiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbmRiID0geWFtbC5zYWZlX2xvYWQoZGJmaWxlLnJlYWQoKSkKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgbG9nLndhcm5pbmcoCiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXMuZ2VuZXJpYy5lcnJvcl9sb2FkaW5nX2ZpbGVfc19zICUKICAgICAgICAgICAgICAgICAgICAoZGJwYXRoLCBzdHIoZSkpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgICAgICBpZiBzZXNzaW9uZGIgYW5kIGlzaW5zdGFuY2Uoc2Vzc2lvbmRiLCBkaWN0KToKCiAgICAgICAgICAgICAgICBzYXZlZF91cmwgPSBzZXNzaW9uZGIuZ2V0KCd1cmwnKQo8fGZpbV9lbmR8Pg=="]
["a9dab8cb0f57b955e3c25b848195b52dae370afa-2","a9dab8cb0f57b955e3c25b848195b52dae370afa","PHxmaW1fcHJlZml4fD4KZnJvbSBjb3JlIGltcG9ydCBtZXNzYWdlcwpmcm9tIGNvcmUud2VleGNlcHRpb25zIGltcG9ydCBGYXRhbEV4Y2VwdGlvbgpmcm9tIG1ha28gaW1wb3J0IHRlbXBsYXRlCmZyb20gY29yZS5jb25maWcgaW1wb3J0IHNlc3Npb25zX3BhdGgsIHNlc3Npb25zX2V4dApmcm9tIGNvcmUubG9nZ2VycyBpbXBvcnQgbG9nLCBkbG9nLCBzdHJlYW1faGFuZGxlcgpmcm9tIGNvcmUubW9kdWxlIGltcG9ydCBTdGF0dXMKaW1wb3J0IG9zCmltcG9ydCB5YW1sCmltcG9ydCBnbG9iCmltcG9ydCBsb2dnaW5nCmltcG9ydCB1cmxsaWIucGFyc2UKaW1wb3J0IGF0ZXhpdAppbXBvcnQgYXN0CmltcG9ydCBwcHJpbnQKCnByaW50X2ZpbHRlcnMgPSAoCiAgICAnZGVidWcnLAogICAgJ2NoYW5uZWwnLAogICAgJ3Byb3h5JwopCgpzZXRfZmlsdGVycyA9ICgKICAgICdkZWJ1ZycsCiAgICAnY2hhbm5lbCcsCiAgICAncHJveHknCikKCgpjbGFzcyBTZXNzaW9uKGRpY3QpOgoKICAgIGRlZiBfc2Vzc2lvbl9zYXZlX2F0ZXhpdChzZWxmKToKCiAgICAgICAgd2l0aCBvcGVuKHNlbGZbJ3BhdGgnXSwgJ3cnKSBhcyB5YW1sZmlsZToKICAgICAgICAgICAgeWFtbC5kdW1wKAogICAgICAgICAgICAgICAgZGljdChzZWxmKSwKICAgICAgICAgICAgICAgIHlhbWxmaWxlLAogICAgICAgICAgICAgICAgZGVmYXVsdF9mbG93X3N0eWxlPUZhbHNlCiAgICAgICAgICAgICkKCiAgICBkZWYgcHJpbnRfdG9fdXNlcihzZWxmLCBtb2R1bGVfZmlsdGVyPScnKToKCiAgICAgICAgZGxvZy5pbmZvKHBwcmludC5wZm9ybWF0KHNlbGYpKQoKICAgICAgICBmb3IgbW9kX25hbWUsIG1vZF92YWx1ZSBpbiBzZWxmLml0ZW1zKCk6CgogICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1vZF92YWx1ZSwgZGljdCk6CiAgICAgICAgICAgICAgICBtb2RfYXJncyA9IG1vZF92YWx1ZS5nZXQoJ3N0b3JlZF9hcmdzJykKCiAgICAgICAgICAgICAgICAjIElzIGEgbW9kdWxlLCBwcmludCBhbGwgdGhlIHN0b3JhYmxlIHN0b3JlZF9hcmd1bWVudHMKICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudCwgYXJnX3ZhbHVlIGluIG1vZF9hcmdzLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgICAgaWYgbm90IG1vZHVsZV9maWx0ZXIgb3IgKCIlcy4lcyIgJSAobW9kX25hbWUsIGFyZ3VtZW50KSkuc3RhcnRzd2l0aChtb2R1bGVfZmlsdGVyKToKICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8obWVzc2FnZXMuc2Vzc2lvbnMuc2V0X21vZHVsZV9zX3NfcyAlIChtb2RfbmFtZSwgYXJndW1lbnQsIGFyZ192YWx1ZSkpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAjIElmIGlzIG5vdCBhIG1vZHVsZSwganVzdCBwcmludCBpZiBtYXRjaGVzIHdpdGggcHJpbnRfZmlsdGVycwogICAgICAgICAgICAgICAgaWYgYW55KGYgZm9yIGYgaW4gcHJpbnRfZmlsdGVycyBpZiBmID09IG1vZF9uYW1lIGFuZCBmLnN0YXJ0c3dpdGgobW9kdWxlX2ZpbHRlcikpOgogICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKG1lc3NhZ2VzLnNlc3Npb25zLnNldF9zX3MgJSAobW9kX25hbWUsIG1vZF92YWx1ZSkpCgogICAgZGVmIGdldF9jb25uZWN0aW9uX2luZm8oc2VsZik6CiAgICAgICAgcmV0dXJuIHRlbXBsYXRlLlRlbXBsYXRlKG1lc3NhZ2VzLnNlc3Npb25zLmNvbm5lY3Rpb25faW5mbykucmVuZGVyKAogICAgICAgICAgICB1cmw9c2VsZlsndXJsJ10sCiAgICAgICAgICAgIHVzZXI9c2VsZlsnc3lzdGVtX2luZm8nXVsncmVzdWx0cyddLmdldCgnd2hvYW1pJywgJycpLAogICAgICAgICAgICBob3N0PXNlbGZbJ3N5c3RlbV9pbmZvJ11bJ3Jlc3VsdHMnXS5nZXQoJ2hvc3RuYW1lJywgJycpLAogICAgICAgICAgICBwYXRoPXNlbGZbJ2ZpbGVfY2QnXVsncmVzdWx0cyddLmdldCgnY3dkJywgJy4nKQogICAgICAgICkKCiAgICBkZWYgbG9hZF9zZXNzaW9uKHNlbGYsIGRhdGEpOgogICAgICAgICIiIgogICAgICAgIFVwZGF0ZSB0aGUgc2Vzc2lvbiBkaWN0aW9uYXJ5LCBhbmQgb2NjYXNpb25hbGx5IHJ1bgogICAgICAgIGFjdGlvbl88YXJnPiBmdW5jdGlvbi4KICAgICAgICAiIiIKCiAgICAgICAgc2VsZi51cGRhdGUoZGF0YSkKCiAgICAgICAgZm9yIG1vZHVsZV9hcmd1bWVudCwgdmFsdWUgaW4gZGF0YS5pdGVtcygpOgoKICAgICAgICAgICAgIyBJZiBhY3Rpb25fPG1vZHVsZV9hcmd1bWVudD4gZnVuY3Rpb24gZXhpc3RzLCB0cmlnZ2VyIHRoZSBhY3Rpb24KICAgICAgICAgICAgYWN0aW9uX25hbWUgPSAnYWN0aW9uXyVzJyAlIChtb2R1bGVfYXJndW1lbnQucmVwbGFjZSgnLicsICdfJykpCiAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgYWN0aW9uX25hbWUpOgogICAgICAgICAgICAgICAgYWN0aW9uX2Z1bmMgPSBnZXRhdHRyKHNlbGYsIGFjdGlvbl9uYW1lKQogICAgICAgICAgICAgICAgaWYgaGFzYXR0cihhY3Rpb25fZnVuYywgJ19fY2FsbF9fJyk6CiAgICAgICAgICAgICAgICAgICAgYWN0aW9uX2Z1bmMobW9kdWxlX2FyZ3VtZW50LCB2YWx1ZSkKCiAgICBkZWYgYWN0aW9uX2RlYnVnKHNlbGYsIG1vZHVsZV9hcmd1bWVudCwgdmFsdWUpOgoKICAgICAgICBpZiB2YWx1ZToKICAgICAgICAgICAgc3RyZWFtX2hhbmRsZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKICAgICAgICBlbHNlOgogICAgICAgICAgICBzdHJlYW1faGFuZGxlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCgogICAgZGVmIGFjdGlvbl9wcm94eShzZWxmLCBtb2R1bGVfYXJndW1lbnQsIHZhbHVlKToKICAgICAgICAiIiJBZnRlciBzZXR0aW5nIGEgbmV3IHByb3h5LCByZWluaXRpYXRlIGNoYW5uZWwgaWYgYWxyZWFkeSBzZXQiIiIKCiAgICAgICAgaWYgJ3NoZWxsX3BocCcgaW4gc2VsZjoKICAgICAgICAgICAgc2VsZlsnc2hlbGxfcGhwJ11bJ3N0YXR1cyddID0gU3RhdHVzLklETEUKCiAgICBkZWYgYWN0aW9uX2NoYW5uZWwoc2VsZiwgbW9kdWxlX2FyZ3VtZW50LCB2YWx1ZSk6CiAgICAgICAgIiIiQWZ0ZXIgc2V0dGluZyBhIG5ldyBjaGFubmVsLCByZWluaXRpYXRlIGl0IiIiCgogICAgICAgIGlmICdzaGVsbF9waHAnIGluIHNlbGY6CiAgICAgICAgICAgIHNlbGZbJ3NoZWxsX3BocCddWydzdGF0dXMnXSA9IFN0YXR1cy5JRExFCgogICAgZGVmIHVuc2V0KHNlbGYsIG1vZHVsZV9hcmd1bWVudCk6CiAgICAgICAgIiIiQ2FsbGVkIGJ5IHVzZXIgdG8gdW5zZXQgdGhlIHNlc3Npb24gdmFyaWFibGVzIiIiCgogICAgICAgICMgSWYgYWN0aW9uXzxtb2R1bGVfYXJndW1lbnQ+IGZ1bmN0aW9uIGV4aXN0cywgdHJpZ2dlciB0aGUgYWN0aW9uCiAgICAgICAgIyBwYXNzaW5nIE5vbmUKICAgICAgICBhY3Rpb25fbmFtZSA9ICdhY3Rpb25fJXMnICUgKG1vZHVsZV9hcmd1bWVudC5yZXBsYWNlKCcuJywgJ18nKSkKICAgICAgICBpZiBoYXNhdHRyKHNlbGYsIGFjdGlvbl9uYW1lKToKICAgICAgICAgICAgYWN0aW9uX2Z1bmMgPSBnZXRhdHRyKHNlbGYsIGFjdGlvbl9uYW1lKQogICAgICAgICAgICBpZiBoYXNhdHRyKGFjdGlvbl9mdW5jLCAnX19jYWxsX18nKToKICAgICAgICAgICAgICAgIGFjdGlvbl9mdW5jKG1vZHVsZV9hcmd1bWVudCwgTm9uZSkKCiAgICAgICAgaWYgbW9kdWxlX2FyZ3VtZW50LmNvdW50KCcuJykgPT0gMToKICAgICAgICAgICAgbW9kdWxlX25hbWUsIGFyZ19uYW1lID0gbW9kdWxlX2FyZ3VtZW50LnNwbGl0KCcuJykKICAgICAgICAgICAgaWYgYXJnX25hbWUgbm90IGluIHNlbGZbbW9kdWxlX25hbWVdWydzdG9yZWRfYXJncyddOgogICAgICAgICAgICAgICAgbG9nLndhcm5pbmcobWVzc2FnZXMuc2Vzc2lvbnMuZXJyb3Jfc2Vzc2lvbl9zX25vdF9tb2RpZmllZCAlICgnJXMuJXMnICUgKG1vZHVsZV9uYW1lLCBhcmdfbmFtZSkpKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgZGVsIHNlbGZbbW9kdWxlX25hbWVdWydzdG9yZWRfYXJncyddW2FyZ19uYW1lXQogICAgICAgICAgICAgICAgbG9nLmluZm8obWVzc2FnZXMuc2Vzc2lvbnMudW5zZXRfbW9kdWxlX3NfcyAlIChtb2R1bGVfbmFtZSwgYXJnX25hbWUpKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG1vZHVsZV9uYW1lID0gbW9kdWxlX2FyZ3VtZW50CiAgICAgICAgICAgIGlmIG1vZHVsZV9uYW1lIG5vdCBpbiBzZWxmIGFuZCBtb2R1bGVfbmFtZSBub3QgaW4gc2V0X2ZpbHRlcnM6CiAgICAgICAgICAgICAgICBsb2cud2FybmluZyhtZXNzYWdlcy5zZXNzaW9ucy5lcnJvcl9zZXNzaW9uX3Nfbm90X21vZGlmaWVkICUgKG1vZHVsZV9uYW1lKSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHNlbGZbbW9kdWxlX25hbWVdID0gTm9uZQogICAgICAgICAgICAgICAgbG9nLmluZm8obWVzc2FnZXMuc2Vzc2lvbnMudW5zZXRfcyAlIChtb2R1bGVfbmFtZSkpCgogICAgZGVmIHNldChzZWxmLCBtb2R1bGVfYXJndW1lbnQsIHZhbHVlKToKICAgICAgICAiIiJDYWxsZWQgYnkgdXNlciB0byBzZXQgb3Igc2hvdyB0aGUgc2Vzc2lvbiB2YXJpYWJsZXMiIiIKCiAgICAgICAgIyBJIHNhZmVseSBldmFsdWF0ZSB0aGUgdmFsdWUgdHlwZSB0byBhdm9pZCB0byBzYXZlIG9ubHkKICAgICAgICAjIHN0cmluZ3MgdHlwZS4gRGlydHkgYnV0IGVmZmVjdGl2ZS4KICAgICAgICAjIFRPRE86IHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgYXJndW1lbnQgY291bGQgYmUgYWNxdWlyZWQKICAgICAgICAjIGZyb20gbW9kdWxlc1ttb2R1bGVdLmFyZ3BhcnNlci4KICAgICAgICB0cnk6CiAgICAgICAgICAgIHZhbHVlID0gYXN0LmxpdGVyYWxfZXZhbCh2YWx1ZSkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICMgSWYgaXMgbm90IGV2YWx1ZWQsIGp1c3Qga2VlcCBpdCBhcyBzdHJpbmcKICAgICAgICAgICAgcGFzcwoKICAgICAgICAjIElmIGFjdGlvbl88bW9kdWxlX2FyZ3VtZW50PiBmdW5jdGlvbiBleGlzdHMsIHRyaWdnZXIgdGhlIGFjdGlvbgogICAgICAgIGFjdGlvbl9uYW1lID0gJ2FjdGlvbl8lcycgJSAobW9kdWxlX2FyZ3VtZW50LnJlcGxhY2UoJy4nLCAnXycpKQogICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgYWN0aW9uX25hbWUpOgogICAgICAgICAgICBhY3Rpb25fZnVuYyA9IGdldGF0dHIoc2VsZiwgYWN0aW9uX25hbWUpCiAgICAgICAgICAgIGlmIGhhc2F0dHIoYWN0aW9uX2Z1bmMsICdfX2NhbGxfXycpOgogICAgICAgICAgICAgICAgYWN0aW9uX2Z1bmMobW9kdWxlX2FyZ3VtZW50LCB2YWx1ZSkKCiAgICAgICAgaWYgbW9kdWxlX2FyZ3VtZW50LmNvdW50KCcuJykgPT0gMToKICAgICAgICAgICAgbW9kdWxlX25hbWUsIGFyZ19uYW1lID0gbW9kdWxlX2FyZ3VtZW50LnNwbGl0KCcuJykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICAgICAgICAgIyBTaG91bGQgYmUgT0sgdG8gc2V0IHdoZXRoZXZlciB2YXJpYWJsZSB3ZSB3YW50CiAgICAgICAgICAgICMgYW5kIHdoaWNoIHdpbGwgZXZlbnR1YWxseSBiZSB1c2VkIGJ5IGEgbW9kdWxlLgogICAgICAgICAgICBzZWxmW21vZHVsZV9uYW1lXVsnc3RvcmVkX2FyZ3MnXVthcmdfbmFtZV0gPSB2YWx1ZQo8fGZpbV9lbmR8Pg=="]
["a9dab8cb0f57b955e3c25b848195b52dae370afa-3","a9dab8cb0f57b955e3c25b848195b52dae370afa","PHxmaW1fcHJlZml4fD4KZnJvbSBjb3JlIGltcG9ydCBtZXNzYWdlcwpmcm9tIGNvcmUud2VleGNlcHRpb25zIGltcG9ydCBGYXRhbEV4Y2VwdGlvbgpmcm9tIG1ha28gaW1wb3J0IHRlbXBsYXRlCmZyb20gY29yZS5jb25maWcgaW1wb3J0IHNlc3Npb25zX3BhdGgsIHNlc3Npb25zX2V4dApmcm9tIGNvcmUubG9nZ2VycyBpbXBvcnQgbG9nLCBkbG9nLCBzdHJlYW1faGFuZGxlcgpmcm9tIGNvcmUubW9kdWxlIGltcG9ydCBTdGF0dXMKaW1wb3J0IG9zCmltcG9ydCB5YW1sCmltcG9ydCBnbG9iCmltcG9ydCBsb2dnaW5nCmltcG9ydCB1cmxsaWIucGFyc2UKaW1wb3J0IGF0ZXhpdAppbXBvcnQgYXN0CmltcG9ydCBwcHJpbnQKCnByaW50X2ZpbHRlcnMgPSAoCiAgICAnZGVidWcnLAogICAgJ2NoYW5uZWwnLAogICAgJ3Byb3h5JwopCgpzZXRfZmlsdGVycyA9ICgKICAgICdkZWJ1ZycsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICdjaGFubmVsJywKICAgICdwcm94eScKPHxmaW1fZW5kfD4="]
["a9dab8cb0f57b955e3c25b848195b52dae370afa-4","a9dab8cb0f57b955e3c25b848195b52dae370afa","PHxmaW1fcHJlZml4fD4KZnJvbSBjb3JlIGltcG9ydCBtZXNzYWdlcwpmcm9tIGNvcmUud2VleGNlcHRpb25zIGltcG9ydCBGYXRhbEV4Y2VwdGlvbgpmcm9tIG1ha28gaW1wb3J0IHRlbXBsYXRlCmZyb20gY29yZS5jb25maWcgaW1wb3J0IHNlc3Npb25zX3BhdGgsIHNlc3Npb25zX2V4dApmcm9tIGNvcmUubG9nZ2VycyBpbXBvcnQgbG9nLCBkbG9nLCBzdHJlYW1faGFuZGxlcgpmcm9tIGNvcmUubW9kdWxlIGltcG9ydCBTdGF0dXMKaW1wb3J0IG9zCmltcG9ydCB5YW1sCmltcG9ydCBnbG9iCmltcG9ydCBsb2dnaW5nCmltcG9ydCB1cmxsaWIucGFyc2UKaW1wb3J0IGF0ZXhpdAppbXBvcnQgYXN0CmltcG9ydCBwcHJpbnQKCnByaW50X2ZpbHRlcnMgPSAoCiAgICAnZGVidWcnLAogICAgJ2NoYW5uZWwnLAogICAgJ3Byb3h5JwopCgpzZXRfZmlsdGVycyA9ICgKICAgICdkZWJ1ZycsCiAgICAnY2hhbm5lbCcsCiAgICAncHJveHknCikKCgpjbGFzcyBTZXNzaW9uKGRpY3QpOgoKICAgIGRlZiBfc2Vzc2lvbl9zYXZlX2F0ZXhpdChzZWxmKToKCiAgICAgICAgd2l0aCBvcGVuKHNlbGZbJ3BhdGgnXSwgJ3cnKSBhcyB5YW1sZmlsZToKICAgICAgICAgICAgeWFtbC5kdW1wKAogICAgICAgICAgICAgICAgZGljdChzZWxmKSwKICAgICAgICAgICAgICAgIHlhbWxmaWxlLAogICAgICAgICAgICAgICAgZGVmYXVsdF9mbG93X3N0eWxlPUZhbHNlCiAgICAgICAgICAgICkKCiAgICBkZWYgcHJpbnRfdG9fdXNlcihzZWxmLCBtb2R1bGVfZmlsdGVyPScnKToKCiAgICAgICAgZGxvZy5pbmZvKHBwcmludC5wZm9ybWF0KHNlbGYpKQoKICAgICAgICBmb3IgbW9kX25hbWUsIG1vZF92YWx1ZSBpbiBzZWxmLml0ZW1zKCk6CgogICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1vZF92YWx1ZSwgZGljdCk6CiAgICAgICAgICAgICAgICBtb2RfYXJncyA9IG1vZF92YWx1ZS5nZXQoJ3N0b3JlZF9hcmdzJykKCiAgICAgICAgICAgICAgICAjIElzIGEgbW9kdWxlLCBwcmludCBhbGwgdGhlIHN0b3JhYmxlIHN0b3JlZF9hcmd1bWVudHMKICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudCwgYXJnX3ZhbHVlIGluIG1vZF9hcmdzLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgICAgaWYgbm90IG1vZHVsZV9maWx0ZXIgb3IgKCIlcy4lcyIgJSAobW9kX25hbWUsIGFyZ3VtZW50KSkuc3RhcnRzd2l0aChtb2R1bGVfZmlsdGVyKToKICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8obWVzc2FnZXMuc2Vzc2lvbnMuc2V0X21vZHVsZV9zX3NfcyAlIChtb2RfbmFtZSwgYXJndW1lbnQsIGFyZ192YWx1ZSkpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAjIElmIGlzIG5vdCBhIG1vZHVsZSwganVzdCBwcmludCBpZiBtYXRjaGVzIHdpdGggcHJpbnRfZmlsdGVycwogICAgICAgICAgICAgICAgaWYgYW55KGYgZm9yIGYgaW4gcHJpbnRfZmlsdGVycyBpZiBmID09IG1vZF9uYW1lIGFuZCBmLnN0YXJ0c3dpdGgobW9kdWxlX2ZpbHRlcikpOgogICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKG1lc3NhZ2VzLnNlc3Npb25zLnNldF9zX3MgJSAobW9kX25hbWUsIG1vZF92YWx1ZSkpCgogICAgZGVmIGdldF9jb25uZWN0aW9uX2luZm8oc2VsZik6CiAgICAgICAgcmV0dXJuIHRlbXBsYXRlLlRlbXBsYXRlKG1lc3NhZ2VzLnNlc3Npb25zLmNvbm5lY3Rpb25faW5mbykucmVuZGVyKAogICAgICAgICAgICB1cmw9c2VsZlsndXJsJ10sCiAgICAgICAgICAgIHVzZXI9c2VsZlsnc3lzdGVtX2luZm8nXVsncmVzdWx0cyddLmdldCgnd2hvYW1pJywgJycpLAogICAgICAgICAgICBob3N0PXNlbGZbJ3N5c3RlbV9pbmZvJ11bJ3Jlc3VsdHMnXS5nZXQoJ2hvc3RuYW1lJywgJycpLAogICAgICAgICAgICBwYXRoPXNlbGZbJ2ZpbGVfY2QnXVsncmVzdWx0cyddLmdldCgnY3dkJywgJy4nKQogICAgICAgICkKCiAgICBkZWYgbG9hZF9zZXNzaW9uKHNlbGYsIGRhdGEpOgogICAgICAgICIiIgogICAgICAgIFVwZGF0ZSB0aGUgc2Vzc2lvbiBkaWN0aW9uYXJ5LCBhbmQgb2NjYXNpb25hbGx5IHJ1bgogICAgICAgIGFjdGlvbl88YXJnPiBmdW5jdGlvbi4KICAgICAgICAiIiIKCiAgICAgICAgc2VsZi51cGRhdGUoZGF0YSkKCiAgICAgICAgZm9yIG1vZHVsZV9hcmd1bWVudCwgdmFsdWUgaW4gZGF0YS5pdGVtcygpOgoKICAgICAgICAgICAgIyBJZiBhY3Rpb25fPG1vZHVsZV9hcmd1bWVudD4gZnVuY3Rpb24gZXhpc3RzLCB0cmlnZ2VyIHRoZSBhY3Rpb24KICAgICAgICAgICAgYWN0aW9uX25hbWUgPSAnYWN0aW9uXyVzJyAlIChtb2R1bGVfYXJndW1lbnQucmVwbGFjZSgnLicsICdfJykpCiAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgYWN0aW9uX25hbWUpOgogICAgICAgICAgICAgICAgYWN0aW9uX2Z1bmMgPSBnZXRhdHRyKHNlbGYsIGFjdGlvbl9uYW1lKQogICAgICAgICAgICAgICAgaWYgaGFzYXR0cihhY3Rpb25fZnVuYywgJ19fY2FsbF9fJyk6CiAgICAgICAgICAgICAgICAgICAgYWN0aW9uX2Z1bmMobW9kdWxlX2FyZ3VtZW50LCB2YWx1ZSkKCiAgICBkZWYgYWN0aW9uX2RlYnVnKHNlbGYsIG1vZHVsZV9hcmd1bWVudCwgdmFsdWUpOgoKICAgICAgICBpZiB2YWx1ZToKICAgICAgICAgICAgc3RyZWFtX2hhbmRsZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKICAgICAgICBlbHNlOgogICAgICAgICAgICBzdHJlYW1faGFuZGxlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCgogICAgZGVmIGFjdGlvbl9wcm94eShzZWxmLCBtb2R1bGVfYXJndW1lbnQsIHZhbHVlKToKICAgICAgICAiIiJBZnRlciBzZXR0aW5nIGEgbmV3IHByb3h5LCByZWluaXRpYXRlIGNoYW5uZWwgaWYgYWxyZWFkeSBzZXQiIiIKCiAgICAgICAgaWYgJ3NoZWxsX3BocCcgaW4gc2VsZjoKICAgICAgICAgICAgc2VsZlsnc2hlbGxfcGhwJ11bJ3N0YXR1cyddID0gU3RhdHVzLklETEUKCiAgICBkZWYgYWN0aW9uX2NoYW5uZWwoc2VsZiwgbW9kdWxlX2FyZ3VtZW50LCB2YWx1ZSk6CiAgICAgICAgIiIiQWZ0ZXIgc2V0dGluZyBhIG5ldyBjaGFubmVsLCByZWluaXRpYXRlIGl0IiIiCgogICAgICAgIGlmICdzaGVsbF9waHAnIGluIHNlbGY6CiAgICAgICAgICAgIHNlbGZbJ3NoZWxsX3BocCddWydzdGF0dXMnXSA9IFN0YXR1cy5JRExFCgogICAgZGVmIHVuc2V0KHNlbGYsIG1vZHVsZV9hcmd1bWVudCk6CiAgICAgICAgIiIiQ2FsbGVkIGJ5IHVzZXIgdG8gdW5zZXQgdGhlIHNlc3Npb24gdmFyaWFibGVzIiIiCgogICAgICAgICMgSWYgYWN0aW9uXzxtb2R1bGVfYXJndW1lbnQ+IGZ1bmN0aW9uIGV4aXN0cywgdHJpZ2dlciB0aGUgYWN0aW9uCiAgICAgICAgIyBwYXNzaW5nIE5vbmUKICAgICAgICBhY3Rpb25fbmFtZSA9ICdhY3Rpb25fJXMnICUgKG1vZHVsZV9hcmd1bWVudC5yZXBsYWNlKCcuJywgJ18nKSkKICAgICAgICBpZiBoYXNhdHRyKHNlbGYsIGFjdGlvbl9uYW1lKToKICAgICAgICAgICAgYWN0aW9uX2Z1bmMgPSBnZXRhdHRyKHNlbGYsIGFjdGlvbl9uYW1lKQogICAgICAgICAgICBpZiBoYXNhdHRyKGFjdGlvbl9mdW5jLCAnX19jYWxsX18nKToKICAgICAgICAgICAgICAgIGFjdGlvbl9mdW5jKG1vZHVsZV9hcmd1bWVudCwgTm9uZSkKCiAgICAgICAgaWYgbW9kdWxlX2FyZ3VtZW50LmNvdW50KCcuJykgPT0gMToKICAgICAgICAgICAgbW9kdWxlX25hbWUsIGFyZ19uYW1lID0gbW9kdWxlX2FyZ3VtZW50LnNwbGl0KCcuJykKICAgICAgICAgICAgaWYgYXJnX25hbWUgbm90IGluIHNlbGZbbW9kdWxlX25hbWVdWydzdG9yZWRfYXJncyddOgogICAgICAgICAgICAgICAgbG9nLndhcm5pbmcobWVzc2FnZXMuc2Vzc2lvbnMuZXJyb3Jfc2Vzc2lvbl9zX25vdF9tb2RpZmllZCAlICgnJXMuJXMnICUgKG1vZHVsZV9uYW1lLCBhcmdfbmFtZSkpKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgZGVsIHNlbGZbbW9kdWxlX25hbWVdWydzdG9yZWRfYXJncyddW2FyZ19uYW1lXQogICAgICAgICAgICAgICAgbG9nLmluZm8obWVzc2FnZXMuc2Vzc2lvbnMudW5zZXRfbW9kdWxlX3NfcyAlIChtb2R1bGVfbmFtZSwgYXJnX25hbWUpKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG1vZHVsZV9uYW1lID0gbW9kdWxlX2FyZ3VtZW50CiAgICAgICAgICAgIGlmIG1vZHVsZV9uYW1lIG5vdCBpbiBzZWxmIGFuZCBtb2R1bGVfbmFtZSBub3QgaW4gc2V0X2ZpbHRlcnM6CiAgICAgICAgICAgICAgICBsb2cud2FybmluZyhtZXNzYWdlcy5zZXNzaW9ucy5lcnJvcl9zZXNzaW9uX3Nfbm90X21vZGlmaWVkICUgKG1vZHVsZV9uYW1lKSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHNlbGZbbW9kdWxlX25hbWVdID0gTm9uZQogICAgICAgICAgICAgICAgbG9nLmluZm8obWVzc2FnZXMuc2Vzc2lvbnMudW5zZXRfcyAlIChtb2R1bGVfbmFtZSkpCgogICAgZGVmIHNldChzZWxmLCBtb2R1bGVfYXJndW1lbnQsIHZhbHVlKToKICAgICAgICAiIiJDYWxsZWQgYnkgdXNlciB0byBzZXQgb3Igc2hvdyB0aGUgc2Vzc2lvbiB2YXJpYWJsZXMiIiIKCiAgICAgICAgIyBJIHNhZmVseSBldmFsdWF0ZSB0aGUgdmFsdWUgdHlwZSB0byBhdm9pZCB0byBzYXZlIG9ubHkKICAgICAgICAjIHN0cmluZ3MgdHlwZS4gRGlydHkgYnV0IGVmZmVjdGl2ZS4KICAgICAgICAjIFRPRE86IHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgYXJndW1lbnQgY291bGQgYmUgYWNxdWlyZWQKICAgICAgICAjIGZyb20gbW9kdWxlc1ttb2R1bGVdLmFyZ3BhcnNlci4KICAgICAgICB0cnk6CiAgICAgICAgICAgIHZhbHVlID0gYXN0LmxpdGVyYWxfZXZhbCh2YWx1ZSkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICMgSWYgaXMgbm90IGV2YWx1ZWQsIGp1c3Qga2VlcCBpdCBhcyBzdHJpbmcKICAgICAgICAgICAgcGFzcwoKICAgICAgICAjIElmIGFjdGlvbl88bW9kdWxlX2FyZ3VtZW50PiBmdW5jdGlvbiBleGlzdHMsIHRyaWdnZXIgdGhlIGFjdGlvbgogICAgICAgIGFjdGlvbl9uYW1lID0gJ2FjdGlvbl8lcycgJSAobW9kdWxlX2FyZ3VtZW50LnJlcGxhY2UoJy4nLCAnXycpKQogICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgYWN0aW9uX25hbWUpOgogICAgICAgICAgICBhY3Rpb25fZnVuYyA9IGdldGF0dHIoc2VsZiwgYWN0aW9uX25hbWUpCiAgICAgICAgICAgIGlmIGhhc2F0dHIoYWN0aW9uX2Z1bmMsICdfX2NhbGxfXycpOgogICAgICAgICAgICAgICAgYWN0aW9uX2Z1bmMobW9kdWxlX2FyZ3VtZW50LCB2YWx1ZSkKCiAgICAgICAgaWYgbW9kdWxlX2FyZ3VtZW50LmNvdW50KCcuJykgPT0gMToKICAgICAgICAgICAgbW9kdWxlX25hbWUsIGFyZ19uYW1lID0gbW9kdWxlX2FyZ3VtZW50LnNwbGl0KCcuJykKCiAgICAgICAgICAgICMgU2hvdWxkIGJlIE9LIHRvIHNldCB3aGV0aGV2ZXIgdmFyaWFibGUgd2Ugd2FudAogICAgICAgICAgICAjIGFuZCB3aGljaCB3aWxsIGV2ZW50dWFsbHkgYmUgdXNlZCBieSBhIG1vZHVsZS4KICAgICAgICAgICAgc2VsZlttb2R1bGVfbmFtZV1bJ3N0b3JlZF9hcmdzJ11bYXJnX25hbWVdID0gdmFsdWUKICAgICAgICAgICAgbG9nLmluZm8obWVzc2FnZXMuc2Vzc2lvbnMuc2V0X21vZHVsZV9zX3NfcyAlIChtb2R1bGVfbmFtZSwgYXJnX25hbWUsIHZhbHVlKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBtb2R1bGVfbmFtZSA9IG1vZHVsZV9hcmd1bWVudAogICAgICAgICAgICBpZiBtb2R1bGVfbmFtZSBub3QgaW4gc2VsZiBhbmQgbW9kdWxlX25hbWUgbm90IGluIHNldF9maWx0ZXJzOgogICAgICAgICAgICAgICAgbG9nLndhcm5pbmcobWVzc2FnZXMuc2Vzc2lvbnMuZXJyb3Jfc2Vzc2lvbl9zX25vdF9tb2RpZmllZCAlIChtb2R1bGVfbmFtZSkpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBzZWxmW21vZHVsZV9uYW1lXSA9IHZhbHVlCiAgICAgICAgICAgICAgICBsb2cuaW5mbyhtZXNzYWdlcy5zZXNzaW9ucy5zZXRfc19zICUgKG1vZHVsZV9uYW1lLCB2YWx1ZSkpCgoKY2xhc3MgU2Vzc2lvbkZpbGUoU2Vzc2lvbik6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRicGF0aCwgdm9sYXRpbGU9RmFsc2UpOgoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHdpdGggb3BlbihkYnBhdGgsICdyJykgYXMgZGJmaWxlOgogICAgICAgICAgICAgICAgc2Vzc2lvbmRiID0geWFtbC5zYWZlX2xvYWQoZGJmaWxlLnJlYWQoKSkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgIGxvZy53YXJuaW5nKAogICAgICAgICAgICAgICAgbWVzc2FnZXMuZ2VuZXJpYy5lcnJvcl9sb2FkaW5nX2ZpbGVfc19zICUKICAgICAgICAgICAgICAgIChkYnBhdGgsIHN0cihlKSkpCiAgICAgICAgICAgIHJhaXNlIEZhdGFsRXhjZXB0aW9uKG1lc3NhZ2VzLnNlc3Npb25zLmVycm9yX2xvYWRpbmdfc2Vzc2lvbnMpCgogICAgICAgIGlmIHNlc3Npb25kYiBhbmQgaXNpbnN0YW5jZShzZXNzaW9uZGIsIGRpY3QpOgoKICAgICAgICAgICAgc2F2ZWRfdXJsID0gc2Vzc2lvbmRiLmdldCgndXJsJykKICAgICAgICAgICAgc2F2ZWRfcGFzc3dvcmQgPSBzZXNzaW9uZGIuZ2V0KCdwYXNzd29yZCcpCgogICAgICAgICAgICBpZiBzYXZlZF91cmwgYW5kIHNhdmVkX3Bhc3N3b3JkOgogICAgICAgICAgICAgICAgaWYgbm90IHZvbGF0aWxlOgogICAgICAgICAgICAgICAgICAgICMgUmVnaXN0ZXIgZHVtcCBhdCBleGl0IGFuZCByZXR1cm4KICAgICAgICAgICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIoc2VsZi5fc2Vzc2lvbl9zYXZlX2F0ZXhpdCkKCiAgICAgICAgICAgICAgICBzZWxmLmxvYWRfc2Vzc2lvbihzZXNzaW9uZGIpCiAgICAgICAgICAgICAgICByZXR1cm4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICAgICBsb2cud2FybmluZygKICAgICAgICAgICAgbWVzc2FnZXMuZ2VuZXJpYy5lcnJvcl9sb2FkaW5nX2ZpbGVfc19zICUKICAgICAgICAgICAgKGRicGF0aCwgJ25vIHVybCBvciBwYXNzd29yZCcpKQo8fGZpbV9lbmR8Pg=="]
["ec65cdc57e48927f311dd2e8d2961581ba419e2f-1","ec65cdc57e48927f311dd2e8d2961581ba419e2f","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiJNb2R1bGUgdGhhdCBtYWtlcyB0aGUgcmVjb3JkIHBhZ2VzLiIiIgoKaW1wb3J0IGNzdgppbXBvcnQgb3MKaW1wb3J0IGRhdGV0aW1lCmZyb20gcnVhbWVsLnlhbWwgaW1wb3J0IFlBTUwKCmltcG9ydCB1dGlsIGFzIFVUSUwKZnJvbSBjYXRlZ29yeV9nZW5lcmF0aW9uIGltcG9ydCBnZW5lcmF0ZV9jYXRlZ29yeQpmcm9tIGNvbnN0cyBpbXBvcnQgSURfRlJPTlRfTUFUVEVSX1ZBUklBQkxFX05BTUUsIElNQUdFU19GUk9OVF9NQVRURVJfVkFSSUFCTEVfTkFNRSwgXAogICAgUkVDT1JEX0lEX0NPTFVNTl9OQU1FLCBDU1ZfRklMRV9OQU1FLCBURU1QTEFURV9GSUxFX05BTUUsIEdFTkVSSUNfUkVDT1JEX1BBR0VfVElUTEUKCgpTSEVFVCA9IENTVl9GSUxFX05BTUUKVEVNUExBVEUgPSBURU1QTEFURV9GSUxFX05BTUUKREVTVCA9ICcuLi9fcG9zdHMnCgojIFRoZSBsaXN0IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGhvbGQgZGljdG9uYXJpZXMgd2hlcmUgZWFjaCBkaWN0aW9uYXJ5CiMgY29ycmVzcG9uZCB0byBhIHJvdyBpbiB0aGUgQ1NWLgpPQkpFQ1RTID0gW10gICMgUExFQVNFIERPIE5PVCBNT0RJRlkuCiMgVGhlIGxpc3QgdGhhdCB3aWxsIGJlIHVzZWQgdG8gaG9sZCB0aGUgY29sdW1uIG5hbWVzIG9mIHRoZSBDU1YuCkNTVl9IRUFESU5HUyA9IFtdICAjIFBMRUFTRSBETyBOT1QgTU9ESUZZLgoKIyBBIGdlbmVyaWMgdGl0bGUgZm9yIGVhY2ggUmVjb3JkIFBhZ2Ugd2hpY2ggd2lsbCBiZSBjb25jYXRlbmF0ZWQgd2l0aCB0aGUKIyBpZCBvZiBlYWNoIFJlY29yZC4KVElUTEUgPSBHRU5FUklDX1JFQ09SRF9QQUdFX1RJVExFCgojIENyZWF0ZXMgYSBsaXN0IG9mIGRpY3Rpb25hcnkgd2hlcmUgZWFjaCBkaWN0IGNvcnJlc3BvbmQgdG8gYSByb3cgaW4gdGhlIGNzdiwKIyBlYWNoIGtleSBjb3JyZXNwb25kIHRvIHRoZSBjb2x1bW4gbmFtZXMgYW5kIHN0b3JlIHRoYXQgaW50byB0aGUgbGlzdCBvYmplY3RzCiMgUExFQVNFIERPIE5PVCBNT0RJRlkgVEhFIE5FWFQgNSBMSU5FUyBPRiBDT0RFLgp3aXRoIG9wZW4oU0hFRVQsIG5ld2xpbmU9JycpIGFzIGNzdl9maWxlOgogICAgU0hFRVRfUkVBREVSID0gY3N2LkRpY3RSZWFkZXIoY3N2X2ZpbGUpCiAgICBDU1ZfSEVBRElOR1MgPSBTSEVFVF9SRUFERVIuZmllbGRuYW1lcwogICAgZm9yIHJvdyBpbiBTSEVFVF9SRUFERVI6CiAgICAgICAgT0JKRUNUUy5hcHBlbmQocm93KQoKIyBNYWtlIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGFsbCB0aGUgUmVjb3JkIFBhZ2VzIHdpbGwgYmUgY3JlYXRlZCBpbi4Kb3MubWFrZWRpcnMoREVTVCwgZXhpc3Rfb2s9VHJ1ZSkKCnByaW50KCJHZW5lcmF0aW5nIFJlY29yZCBQYWdlcyIpCgojIExvb3AgdGhyb3VnaCBvYmplY3RzIGxpc3QsIGVhY2ggaXRlbSBpbiBvYmplY3RzIGlzIGEgcmVjb3JkCiMgY3JlYXRlIGEgY29ycmVzcG9uZGluZyBwYWdlIGZvciB0aGF0IHJlY29yZCB3aXRoIGl0cyBmcm9udCBtYXR0ZXIgdmFyaWFibGVzLgpmb3Igb2JqIGluIE9CSkVDVFM6CiAgICAjIHJlY29yZF9pZCBzdG9yZXMgdGhlIGlkIG9mIHRoZSByZWNvcmQsIHRoZSBzdHJpcCgpIG1ldGhvZCByZW1vdmVzIGxlYWRpbmcgb3IKICAgICMgdHJhaWxpbmcgY2hhcmFjdGVycyByZWZlciB0bwogICAgIyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuc3RyaXAgZm9yCiAgICAjIG1vcmUgaW5mb3JtYXRpb24uCiAgICByZWNvcmRfaWQgPSBvYmpbUkVDT1JEX0lEX0NPTFVNTl9OQU1FXS5zdHJpcCgpICAjIFBMRUFTRSBETyBOT1QgTU9ESUZZLgogICAgIyBTdG9yZSB0aGUgZGF0ZSBhdCB0aGUgdGltZSBvZiBydW5uaW5nIHRoaXMgbW9kdWxlLgogICAgdG9kYXlfZGF0ZSA9IGRhdGV0aW1lLmRhdGUudG9kYXkoKSAgIyBQTEVBU0UgRE8gTk9UIE1PRElGWS4KCiAgICAjIHRhcmdldCBpcyB0aGUgcGF0aCBvZiB3aGVyZSB0aGUgZmlsZSBmb3IgdGhlIFJlY29yZCB3aWxsIGJlIG1hZGUKICAgICMgdGhpcyBpcyBkb25lIGJ5IGpvaW5pbmcgdGhlIGRlc3RpbmF0aW9uIHdpdGggdGhlIGZpbGUgbmFtZS4KICAgIHJlY29yZF9wYWdlX2ZpbGVfbmFtZSA9ICJ7MH0tezF9Lm1kIi5mb3JtYXQodG9kYXlfZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RSQVAnICsgcmVjb3JkX2lkKQogICAgdGFyZ2V0ID0gb3MucGF0aC5qb2luKERFU1QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkX3BhZ2VfZmlsZV9uYW1lKSAgIyBQTEVBU0UgRE8gTk9UIE1PRElGWS4KICAgIHlhbWwgPSBZQU1MKCkgICMgUExFQVNFIERPIE5PVCBNT0RJRlkKICAgIHdpdGggb3BlbihURU1QTEFURSkgYXMgdGVtcGxhdGVfZmlsZTogICMgUExFQVNFIERPIE5PVCBNT0RJRlkuCiAgICAgICAgb2JqeWFtbCA9IHlhbWwubG9hZCh0ZW1wbGF0ZV9maWxlLnJlYWQoKSkKICAgICAgICBpZiAnc3ViaGVhZGxpbmUnIGluIG9ianlhbWw6CiAgICAgICAgICAgICMgQ2hhbmdlIHRoZSBhc3NpZ25lZCB2YWx1ZSBvZiBvYmp5YW1sWydzdWJoZWFkbGluZSddCiAgICAgICAgICAgICMgdG8geW91ciBuZWVkcyxmb3IgZXhhbXBsZSwgY2hhbmdpbmcKICAgICAgICAgICAgIyBvYmp5YW1sWydzdWJoZWFkbGluZSddID0gIkNvbGxlY3Rpb246IFRSQVAgTW91bmRzIiAgdG8KICAgICAgICAgICAgIyBvYmp5YW1sWydzdWJoZWFkbGluZSddID0gIkNvbGxlY3Rpb246IEFub3RoZXIgdHlwZSBvZiBjb2xsZWN0aW9uIgogICAgICAgICAgICAjIHdpbGwgY2hhbmdlIHRoZSBzdWJoZWFkbGluZSBmcm9udCBtYXR0ZXIgdmFyaWFibGVzIG9mIGEgUmVjb3JkIHRvCiAgICAgICAgICAgICMgQ29sbGVjdGlvbjogQW5vdGhlciB0eXBlIG9mIGNvbGxlY3Rpb24uCiAgICAgICAgICAgIG9ianlhbWxbJ3N1YmhlYWRsaW5lJ10gPSAnQ29sbGVjdGlvbjogVFJBUCBNb3VuZHMnCgogICAgICAgICMgQXNzaWduIHRoZSBpZCBvZiB0aGUgcmVjb3JkIGludG8gdGhlIGlkIGZyb250IG1hdHRlciB2YXJpYWJsZS4KICAgICAgICBvYmp5YW1sW0lEX0ZST05UX01BVFRFUl9WQVJJQUJMRV9OQU1FXSA9IHJlY29yZF9pZAoKICAgICAgICBpZiAnVGFnJyBpbiBvYmo6CiAgICAgICAgICAgIG9ianlhbWxbJ3RhZ3MnXSA9IG9ialsnVGFncyddLnNwbGl0KCcgfCAnKQoKICAgICAgICAjIFNUQVJUIFBST0NFU1MgT0YgQURESU5HIENBVEVHT1JJRVMgRk9SIEEgUkVDT1JELgogICAgICAgICMgQ3JlYXRlcyBhIGxpc3QgdG8gaG9sZCB0aGUgY2F0ZWdvcmllcyBmb3IgYSByZWNvcmQuCiAgICAgICAgY2F0ZWdvcmllcyA9IFtdCgogICAgICAgIGdlbmVyYXRlX2NhdGVnb3J5KHJlY29yZF9pZCwgY2F0ZWdvcmllcykKCiAgICAgICAgb2JqeWFtbFsnY2F0ZWdvcmllcyddID0gY2F0ZWdvcmllcwogICAgICAgICMgRU5EIFBST0NFU1MgT0YgQURESU5HIENBVEVHT1JJRVMgRk9SIEEgUkVDT1JELgoKICAgICAgICAjIEFzc2lnbiB0aGUgY3VycmVudCBkYXRhIGludG8gdGhlIGZyb250IG1hdHRlciB2YXJpYWJsZSBkYXRlLgogICAgICAgIG9ianlhbWxbJ2RhdGUnXSA9IHRvZGF5X2RhdGUKCiAgICAgICAgIyBBZGQga2V5OnZhbHVlIHBhaXJzIHRvIHRoZSBmcm9udCBtYXR0ZXIsIHdoZXJlIGVhY2gga2V5IGNvcnJlc3BvbmQgdG8gYSBjb2x1bW4KICAgICAgICAjIGFuZCB0aGUgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoZSBjb2x1bW4gZm9yIHRoYXQgcm93LgogICAgICAgIGZvciBoZWFkaW5nIGluIENTVl9IRUFESU5HUzoKICAgICAgICAgICAgaGVhZGluZ193aXRoX25vX3NwYWNlID0gaGVhZGluZy5yZXBsYWNlKCIgIiwgIl8iKS5sb3dlcigpCiAgICAgICAgICAgICMgRXhjbHVkZSBhZGRpbmcgdGhlIGtleTp2YWx1ZSBwYWlyIGZvciB0aGUgY29sdW1uIHRoYXQgaXMgdGhlIGlkCiAgICAgICAgICAgICMgdGhhdCBpcyBiZWNhdXNlLCB3ZSBoYXZlIGl0IGluIHRoZSBmcm9udCBtYXR0ZXIgdmFyaWFibGUKICAgICAgICAgICAgIyByZWNvcmRfaWQsCiAgICAgICAgICAgIGlmIGhlYWRpbmcgIT0gUkVDT1JEX0lEX0NPTFVNTl9OQU1FOgogICAgICAgICAgICAgICAgb2JqeWFtbFtoZWFkaW5nX3dpdGhfbm9fc3BhY2VdID0gb2JqW2hlYWRpbmddCgogICAgICAgICMgQXNzaWduIHZhbHVlIHRvIHRoZSBmcm9udCBtYXR0ZXIgdmFyaWFibGUgdGl0bGUsCiAgICAgICAgb2JqeWFtbFsndGl0bGUnXSA9IFRJVExFICsgcmVjb3JkX2lkCgogICAgICAgICMgUmVtb3ZlIHRoZSBkdW1teSB2YWx1ZXMgZm9yIGltYWdlcyBmcm9udCBtYXR0ZXIsIHNvIHRoYXQgdGhlIFJlY29yZAogICAgICAgICMgcGhvdG8gZ2FsbGV5IHdpbGwgZGlzcGxheSBkZWZhdWx0IGltYWdlIGluc3RlYWQuCiAgICAgICAgb2JqeWFtbFtJTUFHRVNfRlJPTlRfTUFUVEVSX1ZBUklBQkxFX05BTUVdID0gW10KICAgICAgICBVVElMLmRlbGV0ZV9pbWFnZXNfa2V5X2Zyb21feWFtbF9kaWN0X3ZhbHVlX2ZhbHNlKG9ianlhbWwpCiAgICAgICAgIyBUaGlzIHdpbGwgd3JpdGUgdGhlIHZhbHVlIG9mIG9ianlhbWwgd2hpY2ggY29udGFpbnMgdGhlIGZyb250IG1hdHRlciB2YXJpYWJsZQogICAgICAgICMgaW50byB0aGUgdGFyZ2V0IGZpbGUuCiAgICAgICAgVVRJTC5kdW1wKHRhcmdldCwgeWFtbCwgb2JqeWFtbCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCnByaW50KCJGSU5JU0hFRCIpCjx8ZmltX2VuZHw+"]
["ec65cdc57e48927f311dd2e8d2961581ba419e2f-2","ec65cdc57e48927f311dd2e8d2961581ba419e2f","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgppbXBvcnQgb3MKaW1wb3J0IGRhdGV0aW1lCmZyb20gcnVhbWVsLnlhbWwgaW1wb3J0IFlBTUwKCmltcG9ydCB1dGlsIGFzIFVUSUwKZnJvbSBjYXRlZ29yeV9nZW5lcmF0aW9uIGltcG9ydCBnZW5lcmF0ZV9jYXRlZ29yeQpmcm9tIGNvbnN0cyBpbXBvcnQgSURfRlJPTlRfTUFUVEVSX1ZBUklBQkxFX05BTUUsIElNQUdFU19GUk9OVF9NQVRURVJfVkFSSUFCTEVfTkFNRSwgXAogICAgUkVDT1JEX0lEX0NPTFVNTl9OQU1FLCBDU1ZfRklMRV9OQU1FLCBURU1QTEFURV9GSUxFX05BTUUsIEdFTkVSSUNfUkVDT1JEX1BBR0VfVElUTEUKCgpTSEVFVCA9IENTVl9GSUxFX05BTUUKVEVNUExBVEUgPSBURU1QTEFURV9GSUxFX05BTUUKREVTVCA9ICcuLi9fcG9zdHMnCgojIFRoZSBsaXN0IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGhvbGQgZGljdG9uYXJpZXMgd2hlcmUgZWFjaCBkaWN0aW9uYXJ5CiMgY29ycmVzcG9uZCB0byBhIHJvdyBpbiB0aGUgQ1NWLgpPQkpFQ1RTID0gW10gICMgUExFQVNFIERPIE5PVCBNT0RJRlkuCiMgVGhlIGxpc3QgdGhhdCB3aWxsIGJlIHVzZWQgdG8gaG9sZCB0aGUgY29sdW1uIG5hbWVzIG9mIHRoZSBDU1YuCkNTVl9IRUFESU5HUyA9IFtdICAjIFBMRUFTRSBETyBOT1QgTU9ESUZZLgoKIyBBIGdlbmVyaWMgdGl0bGUgZm9yIGVhY2ggUmVjb3JkIFBhZ2Ugd2hpY2ggd2lsbCBiZSBjb25jYXRlbmF0ZWQgd2l0aCB0aGUKIyBpZCBvZiBlYWNoIFJlY29yZC4KVElUTEUgPSBHRU5FUklDX1JFQ09SRF9QQUdFX1RJVExFCgojIENyZWF0ZXMgYSBsaXN0IG9mIGRpY3Rpb25hcnkgd2hlcmUgZWFjaCBkaWN0IGNvcnJlc3BvbmQgdG8gYSByb3cgaW4gdGhlIGNzdiwKIyBlYWNoIGtleSBjb3JyZXNwb25kIHRvIHRoZSBjb2x1bW4gbmFtZXMgYW5kIHN0b3JlIHRoYXQgaW50byB0aGUgbGlzdCBvYmplY3RzCiMgUExFQVNFIERPIE5PVCBNT0RJRlkgVEhFIE5FWFQgNSBMSU5FUyBPRiBDT0RFLgp3aXRoIG9wZW4oU0hFRVQsIG5ld2xpbmU9JycpIGFzIGNzdl9maWxlOgogICAgU0hFRVRfUkVBREVSID0gY3N2LkRpY3RSZWFkZXIoY3N2X2ZpbGUpCiAgICBDU1ZfSEVBRElOR1MgPSBTSEVFVF9SRUFERVIuZmllbGRuYW1lcwogICAgZm9yIHJvdyBpbiBTSEVFVF9SRUFERVI6CiAgICAgICAgT0JKRUNUUy5hcHBlbmQocm93KQoKIyBNYWtlIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGFsbCB0aGUgUmVjb3JkIFBhZ2VzIHdpbGwgYmUgY3JlYXRlZCBpbi4Kb3MubWFrZWRpcnMoREVTVCwgZXhpc3Rfb2s9VHJ1ZSkKCnByaW50KCJHZW5lcmF0aW5nIFJlY29yZCBQYWdlcyIpCgojIExvb3AgdGhyb3VnaCBvYmplY3RzIGxpc3QsIGVhY2ggaXRlbSBpbiBvYmplY3RzIGlzIGEgcmVjb3JkCiMgY3JlYXRlIGEgY29ycmVzcG9uZGluZyBwYWdlIGZvciB0aGF0IHJlY29yZCB3aXRoIGl0cyBmcm9udCBtYXR0ZXIgdmFyaWFibGVzLgpmb3Igb2JqIGluIE9CSkVDVFM6CiAgICAjIHJlY29yZF9pZCBzdG9yZXMgdGhlIGlkIG9mIHRoZSByZWNvcmQsIHRoZSBzdHJpcCgpIG1ldGhvZCByZW1vdmVzIGxlYWRpbmcgb3IKICAgICMgdHJhaWxpbmcgY2hhcmFjdGVycyByZWZlciB0bwogICAgIyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuc3RyaXAgZm9yCiAgICAjIG1vcmUgaW5mb3JtYXRpb24uCiAgICByZWNvcmRfaWQgPSBvYmpbUkVDT1JEX0lEX0NPTFVNTl9OQU1FXS5zdHJpcCgpICAjIFBMRUFTRSBETyBOT1QgTU9ESUZZLgogICAgIyBTdG9yZSB0aGUgZGF0ZSBhdCB0aGUgdGltZSBvZiBydW5uaW5nIHRoaXMgbW9kdWxlLgogICAgdG9kYXlfZGF0ZSA9IGRhdGV0aW1lLmRhdGUudG9kYXkoKSAgIyBQTEVBU0UgRE8gTk9UIE1PRElGWS4KCiAgICAjIHRhcmdldCBpcyB0aGUgcGF0aCBvZiB3aGVyZSB0aGUgZmlsZSBmb3IgdGhlIFJlY29yZCB3aWxsIGJlIG1hZGUKICAgICMgdGhpcyBpcyBkb25lIGJ5IGpvaW5pbmcgdGhlIGRlc3RpbmF0aW9uIHdpdGggdGhlIGZpbGUgbmFtZS4KICAgIHJlY29yZF9wYWdlX2ZpbGVfbmFtZSA9ICJ7MH0tezF9Lm1kIi5mb3JtYXQodG9kYXlfZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RSQVAnICsgcmVjb3JkX2lkKQogICAgdGFyZ2V0ID0gb3MucGF0aC5qb2luKERFU1QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkX3BhZ2VfZmlsZV9uYW1lKSAgIyBQTEVBU0UgRE8gTk9UIE1PRElGWS4KICAgIHlhbWwgPSBZQU1MKCkgICMgUExFQVNFIERPIE5PVCBNT0RJRlkKICAgIHdpdGggb3BlbihURU1QTEFURSkgYXMgdGVtcGxhdGVfZmlsZTogICMgUExFQVNFIERPIE5PVCBNT0RJRlkuCiAgICAgICAgb2JqeWFtbCA9IHlhbWwubG9hZCh0ZW1wbGF0ZV9maWxlLnJlYWQoKSkKICAgICAgICBpZiAnc3ViaGVhZGxpbmUnIGluIG9ianlhbWw6CiAgICAgICAgICAgICMgQ2hhbmdlIHRoZSBhc3NpZ25lZCB2YWx1ZSBvZiBvYmp5YW1sWydzdWJoZWFkbGluZSddCiAgICAgICAgICAgICMgdG8geW91ciBuZWVkcyxmb3IgZXhhbXBsZSwgY2hhbmdpbmcKICAgICAgICAgICAgIyBvYmp5YW1sWydzdWJoZWFkbGluZSddID0gIkNvbGxlY3Rpb246IFRSQVAgTW91bmRzIiAgdG8KICAgICAgICAgICAgIyBvYmp5YW1sWydzdWJoZWFkbGluZSddID0gIkNvbGxlY3Rpb246IEFub3RoZXIgdHlwZSBvZiBjb2xsZWN0aW9uIgogICAgICAgICAgICAjIHdpbGwgY2hhbmdlIHRoZSBzdWJoZWFkbGluZSBmcm9udCBtYXR0ZXIgdmFyaWFibGVzIG9mIGEgUmVjb3JkIHRvCiAgICAgICAgICAgICMgQ29sbGVjdGlvbjogQW5vdGhlciB0eXBlIG9mIGNvbGxlY3Rpb24uCiAgICAgICAgICAgIG9ianlhbWxbJ3N1YmhlYWRsaW5lJ10gPSAnQ29sbGVjdGlvbjogVFJBUCBNb3VuZHMnCgogICAgICAgICMgQXNzaWduIHRoZSBpZCBvZiB0aGUgcmVjb3JkIGludG8gdGhlIGlkIGZyb250IG1hdHRlciB2YXJpYWJsZS4KICAgICAgICBvYmp5YW1sW0lEX0ZST05UX01BVFRFUl9WQVJJQUJMRV9OQU1FXSA9IHJlY29yZF9pZAoKICAgICAgICBpZiAnVGFnJyBpbiBvYmo6CiAgICAgICAgICAgIG9ianlhbWxbJ3RhZ3MnXSA9IG9ialsnVGFncyddLnNwbGl0KCcgfCAnKQoKICAgICAgICAjIFNUQVJUIFBST0NFU1MgT0YgQURESU5HIENBVEVHT1JJRVMgRk9SIEEgUkVDT1JELgogICAgICAgICMgQ3JlYXRlcyBhIGxpc3QgdG8gaG9sZCB0aGUgY2F0ZWdvcmllcyBmb3IgYSByZWNvcmQuCiAgICAgICAgY2F0ZWdvcmllcyA9IFtdCgogICAgICAgIGdlbmVyYXRlX2NhdGVnb3J5KHJlY29yZF9pZCwgY2F0ZWdvcmllcykKCiAgICAgICAgb2JqeWFtbFsnY2F0ZWdvcmllcyddID0gY2F0ZWdvcmllcwogICAgICAgICMgRU5EIFBST0NFU1MgT0YgQURESU5HIENBVEVHT1JJRVMgRk9SIEEgUkVDT1JELgoKICAgICAgICAjIEFzc2lnbiB0aGUgY3VycmVudCBkYXRhIGludG8gdGhlIGZyb250IG1hdHRlciB2YXJpYWJsZSBkYXRlLgogICAgICAgIG9ianlhbWxbJ2RhdGUnXSA9IHRvZGF5X2RhdGUKCiAgICAgICAgIyBBZGQga2V5OnZhbHVlIHBhaXJzIHRvIHRoZSBmcm9udCBtYXR0ZXIsIHdoZXJlIGVhY2gga2V5IGNvcnJlc3BvbmQgdG8gYSBjb2x1bW4KICAgICAgICAjIGFuZCB0aGUgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoZSBjb2x1bW4gZm9yIHRoYXQgcm93LgogICAgICAgIGZvciBoZWFkaW5nIGluIENTVl9IRUFESU5HUzoKICAgICAgICAgICAgaGVhZGluZ193aXRoX25vX3NwYWNlID0gaGVhZGluZy5yZXBsYWNlKCIgIiwgIl8iKS5sb3dlcigpCiAgICAgICAgICAgICMgRXhjbHVkZSBhZGRpbmcgdGhlIGtleTp2YWx1ZSBwYWlyIGZvciB0aGUgY29sdW1uIHRoYXQgaXMgdGhlIGlkCiAgICAgICAgICAgICMgdGhhdCBpcyBiZWNhdXNlLCB3ZSBoYXZlIGl0IGluIHRoZSBmcm9udCBtYXR0ZXIgdmFyaWFibGUKICAgICAgICAgICAgIyByZWNvcmRfaWQsCiAgICAgICAgICAgIGlmIGhlYWRpbmcgIT0gUkVDT1JEX0lEX0NPTFVNTl9OQU1FOgogICAgICAgICAgICAgICAgb2JqeWFtbFtoZWFkaW5nX3dpdGhfbm9fc3BhY2VdID0gb2JqW2hlYWRpbmddCgogICAgICAgICMgQXNzaWduIHZhbHVlIHRvIHRoZSBmcm9udCBtYXR0ZXIgdmFyaWFibGUgdGl0bGUsCiAgICAgICAgb2JqeWFtbFsndGl0bGUnXSA9IFRJVExFICsgcmVjb3JkX2lkCgogICAgICAgICMgUmVtb3ZlIHRoZSBkdW1teSB2YWx1ZXMgZm9yIGltYWdlcyBmcm9udCBtYXR0ZXIsIHNvIHRoYXQgdGhlIFJlY29yZAogICAgICAgICMgcGhvdG8gZ2FsbGV5IHdpbGwgZGlzcGxheSBkZWZhdWx0IGltYWdlIGluc3RlYWQuCiAgICAgICAgb2JqeWFtbFtJTUFHRVNfRlJPTlRfTUFUVEVSX1ZBUklBQkxFX05BTUVdID0gW10KICAgICAgICBVVElMLmRlbGV0ZV9pbWFnZXNfa2V5X2Zyb21feWFtbF9kaWN0X3ZhbHVlX2ZhbHNlKG9ianlhbWwpCiAgICAgICAgIyBUaGlzIHdpbGwgd3JpdGUgdGhlIHZhbHVlIG9mIG9ianlhbWwgd2hpY2ggY29udGFpbnMgdGhlIGZyb250IG1hdHRlciB2YXJpYWJsZQogICAgICAgICMgaW50byB0aGUgdGFyZ2V0IGZpbGUuCiAgICAgICAgVVRJTC5kdW1wKHRhcmdldCwgeWFtbCwgb2JqeWFtbCkKCgpwcmludCgiRklOSVNIRUQiKQo8fGZpbV9zdWZmaXh8PgojIS91c3IvYmluL2VudiBweXRob24zCiIiIk1vZHVsZSB0aGF0IG1ha2VzIHRoZSByZWNvcmQgcGFnZXMuIiIiCgppbXBvcnQgY3N2Cjx8ZmltX2VuZHw+"]
["ec87712973272586e3b8725bafd03fa8b0077deb-1","ec87712973272586e3b8725bafd03fa8b0077deb","PHxmaW1fcHJlZml4fD4KIyBTb3VyY2U6IGh0dHBzOi8vbGVldGNvZGUuY29tL3Byb2JsZW1zL2FkZC10d28tbnVtYmVycy8KCiMgMi4gQWRkIFR3byBOdW1iZXJzIFtNZWRpdW1dCgonJycKIFlvdSBhcmUgZ2l2ZW4gdHdvIG5vbi1lbXB0eSBsaW5rZWQgbGlzdHMgcmVwcmVzZW50aW5nIHR3byBub24tbmVnYXRpdmUgaW50ZWdlcnMuIAogVGhlIGRpZ2l0cyBhcmUgc3RvcmVkIGluIHJldmVyc2Ugb3JkZXIsIGFuZCBlYWNoIG9mIHRoZWlyIG5vZGVzIGNvbnRhaW5zIGEgCiBzaW5nbGUgZGlnaXQuIEFkZCB0aGUgdHdvIG51bWJlcnMgYW5kIHJldHVybiB0aGUgc3VtIGFzIGEgbGlua2VkIGxpc3QuCiAgCiBZb3UgbWF5IGFzc3VtZSB0aGUgdHdvIG51bWJlcnMgZG8gbm90IGNvbnRhaW4gYW55IGxlYWRpbmcgemVybywgZXhjZXB0IHRoZSBudW1iZXIgMCBpdHNlbGYuCicnJwoKIyBFeGFtcGxlCgonJycKIElucHV0OiBsMSA9IFsyLDQsM10sIGwyID0gWzUsNiw0XQogT3V0cHV0OiBbNywwLDhdCiBFeHBsYW5hdGlvbjogMzQyICsgNDY1ID0gODA3LgonJycKCiMgU29sdXRpb24gKEFwcHJvYWNoIDE6IEVsZW1lbnRhcnkgTWF0aCkKCicnJwogVGltZSBjb21wbGV4aXR5OiBPKG1heChtLG4pKQogU3BhY2UgY29tcGxleGl0eTogTyhtYXgobSxuKSkKJycnCgojIFN1Ym1pc3Npb25zICgwMS8xOS8yMDIxIDIyOjM1KQoKJycnCiBSdW50aW1lOiA2NCBtcywgZmFzdGVyIHRoYW4gODkuMzQlIG9mIFB5dGhvbjMgb25saW5lIHN1Ym1pc3Npb25zIGZvciBBZGQgVHdvIE51bWJlcnMuCiBNTWVtb3J5IFVzYWdlOiAxNC4zIE1CLCBsZXNzIHRoYW4gNzMuMzklIG9mIFB5dGhvbjMgb25saW5lIHN1Ym1pc3Npb25zIGZvciBBZGQgVHdvIE51bWJlcnMuCicnJwoKIyBEZWZpbml0aW9uIGZvciBzaW5nbHktbGlua2VkIGxpc3QuCiMgY2xhc3MgTGlzdE5vZGU6CiMgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWw9MCwgbmV4dD1Ob25lKToKIyAgICAgICAgIHNlbGYudmFsID0gdmFsCiMgICAgICAgICBzZWxmLm5leHQgPSBuZXh0Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgU29sdXRpb246CiAgICBkZWYgYWRkVHdvTnVtYmVycyhzZWxmLCBsMTogTGlzdE5vZGUsIGwyOiBMaXN0Tm9kZSkgLT4gTGlzdE5vZGU6CiAgICAgICAgaGVhZCA9IExpc3ROb2RlKE5vbmUpCiAgICAgICAgY3VyciA9IGhlYWQKPHxmaW1fZW5kfD4="]
["ec87712973272586e3b8725bafd03fa8b0077deb-2","ec87712973272586e3b8725bafd03fa8b0077deb","PHxmaW1fcHJlZml4fD4KIyBTb3VyY2U6IGh0dHBzOi8vbGVldGNvZGUuY29tL3Byb2JsZW1zL2FkZC10d28tbnVtYmVycy8KCiMgMi4gQWRkIFR3byBOdW1iZXJzIFtNZWRpdW1dCgonJycKIFlvdSBhcmUgZ2l2ZW4gdHdvIG5vbi1lbXB0eSBsaW5rZWQgbGlzdHMgcmVwcmVzZW50aW5nIHR3byBub24tbmVnYXRpdmUgaW50ZWdlcnMuIAogVGhlIGRpZ2l0cyBhcmUgc3RvcmVkIGluIHJldmVyc2Ugb3JkZXIsIGFuZCBlYWNoIG9mIHRoZWlyIG5vZGVzIGNvbnRhaW5zIGEgCiBzaW5nbGUgZGlnaXQuIEFkZCB0aGUgdHdvIG51bWJlcnMgYW5kIHJldHVybiB0aGUgc3VtIGFzIGEgbGlua2VkIGxpc3QuCiAgCiBZb3UgbWF5IGFzc3VtZSB0aGUgdHdvIG51bWJlcnMgZG8gbm90IGNvbnRhaW4gYW55IGxlYWRpbmcgemVybywgZXhjZXB0IHRoZSBudW1iZXIgMCBpdHNlbGYuCicnJwoKIyBFeGFtcGxlCgonJycKIElucHV0OiBsMSA9IFsyLDQsM10sIGwyID0gWzUsNiw0XQogT3V0cHV0OiBbNywwLDhdCiBFeHBsYW5hdGlvbjogMzQyICsgNDY1ID0gODA3LgonJycKCiMgU29sdXRpb24gKEFwcHJvYWNoIDE6IEVsZW1lbnRhcnkgTWF0aCkKCicnJwogVGltZSBjb21wbGV4aXR5OiBPKG1heChtLG4pKQogU3BhY2UgY29tcGxleGl0eTogTyhtYXgobSxuKSkKJycnCgojIFN1Ym1pc3Npb25zICgwMS8xOS8yMDIxIDIyOjM1KQoKJycnCiBSdW50aW1lOiA2NCBtcywgZmFzdGVyIHRoYW4gODkuMzQlIG9mIFB5dGhvbjMgb25saW5lIHN1Ym1pc3Npb25zIGZvciBBZGQgVHdvIE51bWJlcnMuCiBNTWVtb3J5IFVzYWdlOiAxNC4zIE1CLCBsZXNzIHRoYW4gNzMuMzklIG9mIFB5dGhvbjMgb25saW5lIHN1Ym1pc3Npb25zIGZvciBBZGQgVHdvIE51bWJlcnMuCicnJwoKIyBEZWZpbml0aW9uIGZvciBzaW5nbHktbGlua2VkIGxpc3QuCiMgY2xhc3MgTGlzdE5vZGU6CiMgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWw9MCwgbmV4dD1Ob25lKToKIyAgICAgICAgIHNlbGYudmFsID0gdmFsCiMgICAgICAgICBzZWxmLm5leHQgPSBuZXh0CmNsYXNzIFNvbHV0aW9uOgogICAgZGVmIGFkZFR3b051bWJlcnMoc2VsZiwgbDE6IExpc3ROb2RlLCBsMjogTGlzdE5vZGUpIC0+IExpc3ROb2RlOgogICAgICAgIGhlYWQgPSBMaXN0Tm9kZShOb25lKQogICAgICAgIGN1cnIgPSBoZWFkCiAgICAgICAgCiAgICAgICAgIyBmb3Igb3ZlcmZsb3cKICAgICAgICBjYXJ5ID0gMAogICAgICAgIAogICAgICAgIHdoaWxlKGwxICE9IE5vbmUgb3IgbDIgIT0gTm9uZSBvciBjYXJ5ICE9IDApOgogICAgICAgICAgICAjIGdldCBsMSB2YWx1ZSBhbmQgaXR0ZXJhdGlvbiBmb3IgbGlua2VkIGxpc3QgbDEKICAgICAgICAgICAgaWYobDEgIT0gTm9uZSk6CiAgICAgICAgICAgICAgICB4ID0gbDEudmFsCiAgICAgICAgICAgICAgICBsMSA9IGwxLm5leHQKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHggPSAwCiAgICAgICAgICAgICAKICAgICAgICAgICAgIyBnZXQgbDIgdmFsdWUgYW5kIGl0dGVyYXRpb24gZm9yIGxpbmtlZCBsaXN0IGwyCiAgICAgICAgICAgIGlmKGwyICE9IE5vbmUpOgogICAgICAgICAgICAgICAgeSA9IGwyLnZhbAogICAgICAgICAgICAgICAgbDIgPSBsMi5uZXh0CiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB5ID0gMAogICAgICAgICAgICAKICAgICAgICAgICAgIyBhZGRpbmcgdHdvIHZhbHVlcyBhbmQgY2FycnkgCiAgICAgICAgICAgIHN1bVZhbCA9IHggKyB5ICsgY2FyeQoKICAgICAgICAgICAgIyByZXNldCBjYXJyeQogICAgICAgICAgICBjYXJ5ID0gMAogICAgICAgICAgICAKICAgICAgICAgICAgIyBjaGVjayBpZiB2YWx1ZSBhZnRlciBzdW0gaXMgbW9yZSB0aGFuIDkgb3Igbm90CiAgICAgICAgICAgIGlmIHN1bVZhbCA+IDk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIHN1bVZhbCAlPSAxMAogICAgICAgICAgICAgICAgY2FyeSA9IDEKICAgICAgICAgICAgCjx8ZmltX2VuZHw+"]
["ec87712973272586e3b8725bafd03fa8b0077deb-3","ec87712973272586e3b8725bafd03fa8b0077deb","PHxmaW1fcHJlZml4fD4KIyBTb3VyY2U6IGh0dHBzOi8vbGVldGNvZGUuY29tL3Byb2JsZW1zL2FkZC10d28tbnVtYmVycy8KCiMgMi4gQWRkIFR3byBOdW1iZXJzIFtNZWRpdW1dCgonJycKIFlvdSBhcmUgZ2l2ZW4gdHdvIG5vbi1lbXB0eSBsaW5rZWQgbGlzdHMgcmVwcmVzZW50aW5nIHR3byBub24tbmVnYXRpdmUgaW50ZWdlcnMuIAogVGhlIGRpZ2l0cyBhcmUgc3RvcmVkIGluIHJldmVyc2Ugb3JkZXIsIGFuZCBlYWNoIG9mIHRoZWlyIG5vZGVzIGNvbnRhaW5zIGEgCiBzaW5nbGUgZGlnaXQuIEFkZCB0aGUgdHdvIG51bWJlcnMgYW5kIHJldHVybiB0aGUgc3VtIGFzIGEgbGlua2VkIGxpc3QuCiAgCiBZb3UgbWF5IGFzc3VtZSB0aGUgdHdvIG51bWJlcnMgZG8gbm90IGNvbnRhaW4gYW55IGxlYWRpbmcgemVybywgZXhjZXB0IHRoZSBudW1iZXIgMCBpdHNlbGYuCicnJwoKIyBFeGFtcGxlCgonJycKIElucHV0OiBsMSA9IFsyLDQsM10sIGwyID0gWzUsNiw0XQogT3V0cHV0OiBbNywwLDhdCiBFeHBsYW5hdGlvbjogMzQyICsgNDY1ID0gODA3LgonJycKCiMgU29sdXRpb24gKEFwcHJvYWNoIDE6IEVsZW1lbnRhcnkgTWF0aCkKCicnJwogVGltZSBjb21wbGV4aXR5OiBPKG1heChtLG4pKQogU3BhY2UgY29tcGxleGl0eTogTyhtYXgobSxuKSkKJycnCgojIFN1Ym1pc3Npb25zICgwMS8xOS8yMDIxIDIyOjM1KQoKJycnCiBSdW50aW1lOiA2NCBtcywgZmFzdGVyIHRoYW4gODkuMzQlIG9mIFB5dGhvbjMgb25saW5lIHN1Ym1pc3Npb25zIGZvciBBZGQgVHdvIE51bWJlcnMuCiBNTWVtb3J5IFVzYWdlOiAxNC4zIE1CLCBsZXNzIHRoYW4gNzMuMzklIG9mIFB5dGhvbjMgb25saW5lIHN1Ym1pc3Npb25zIGZvciBBZGQgVHdvIE51bWJlcnMuCicnJwoKIyBEZWZpbml0aW9uIGZvciBzaW5nbHktbGlua2VkIGxpc3QuCiMgY2xhc3MgTGlzdE5vZGU6CiMgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWw9MCwgbmV4dD1Ob25lKToKIyAgICAgICAgIHNlbGYudmFsID0gdmFsCiMgICAgICAgICBzZWxmLm5leHQgPSBuZXh0CmNsYXNzIFNvbHV0aW9uOgogICAgZGVmIGFkZFR3b051bWJlcnMoc2VsZiwgbDE6IExpc3ROb2RlLCBsMjogTGlzdE5vZGUpIC0+IExpc3ROb2RlOgogICAgICAgIGhlYWQgPSBMaXN0Tm9kZShOb25lKQogICAgICAgIGN1cnIgPSBoZWFkCiAgICAgICAgCiAgICAgICAgIyBmb3Igb3ZlcmZsb3cKICAgICAgICBjYXJ5ID0gMAogICAgICAgIAogICAgICAgIHdoaWxlKGwxICE9IE5vbmUgb3IgbDIgIT0gTm9uZSBvciBjYXJ5ICE9IDApOgogICAgICAgICAgICAjIGdldCBsMSB2YWx1ZSBhbmQgaXR0ZXJhdGlvbiBmb3IgbGlua2VkIGxpc3QgbDEKICAgICAgICAgICAgaWYobDEgIT0gTm9uZSk6CiAgICAgICAgICAgICAgICB4ID0gbDEudmFsCiAgICAgICAgICAgICAgICBsMSA9IGwxLm5leHQKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIGlmKGwyICE9IE5vbmUpOgogICAgICAgICAgICAgICAgeSA9IGwyLnZhbAogICAgICAgICAgICAgICAgbDIgPSBsMi5uZXh0CiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB5ID0gMAogICAgICAgICAgICAKICAgICAgICAgICAgIyBhZGRpbmcgdHdvIHZhbHVlcyBhbmQgY2FycnkgCiAgICAgICAgICAgIHN1bVZhbCA9IHggKyB5ICsgY2FyeQoKICAgICAgICAgICAgIyByZXNldCBjYXJyeQogICAgICAgICAgICBjYXJ5ID0gMAogICAgICAgICAgICAKICAgICAgICAgICAgIyBjaGVjayBpZiB2YWx1ZSBhZnRlciBzdW0gaXMgbW9yZSB0aGFuIDkgb3Igbm90CiAgICAgICAgICAgIGlmIHN1bVZhbCA+IDk6CiAgICAgICAgICAgICAgICBzdW1WYWwgJT0gMTAKICAgICAgICAgICAgICAgIGNhcnkgPSAxCiAgICAgICAgICAgIAogICAgICAgICAgICAjIGFkZCBub2RlIHRvIGxpc3QKICAgICAgICAgICAgY3Vyci5uZXh0ID0gTGlzdE5vZGUoc3VtVmFsKQogICAgICAgICAgICBjdXJyID0gY3Vyci5uZXh0CiAgICAgICAgICAgIAogICAgICAgIHJldHVybiBoZWFkLm5leHQKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHggPSAwCiAgICAgICAgICAgICAKICAgICAgICAgICAgIyBnZXQgbDIgdmFsdWUgYW5kIGl0dGVyYXRpb24gZm9yIGxpbmtlZCBsaXN0IGwyCjx8ZmltX2VuZHw+"]
["ec87712973272586e3b8725bafd03fa8b0077deb-4","ec87712973272586e3b8725bafd03fa8b0077deb","PHxmaW1fcHJlZml4fD4KIyBTb3VyY2U6IGh0dHBzOi8vbGVldGNvZGUuY29tL3Byb2JsZW1zL2FkZC10d28tbnVtYmVycy8KCiMgMi4gQWRkIFR3byBOdW1iZXJzIFtNZWRpdW1dCgonJycKIFlvdSBhcmUgZ2l2ZW4gdHdvIG5vbi1lbXB0eSBsaW5rZWQgbGlzdHMgcmVwcmVzZW50aW5nIHR3byBub24tbmVnYXRpdmUgaW50ZWdlcnMuIAogVGhlIGRpZ2l0cyBhcmUgc3RvcmVkIGluIHJldmVyc2Ugb3JkZXIsIGFuZCBlYWNoIG9mIHRoZWlyIG5vZGVzIGNvbnRhaW5zIGEgCiBzaW5nbGUgZGlnaXQuIEFkZCB0aGUgdHdvIG51bWJlcnMgYW5kIHJldHVybiB0aGUgc3VtIGFzIGEgbGlua2VkIGxpc3QuCiAgCiBZb3UgbWF5IGFzc3VtZSB0aGUgdHdvIG51bWJlcnMgZG8gbm90IGNvbnRhaW4gYW55IGxlYWRpbmcgemVybywgZXhjZXB0IHRoZSBudW1iZXIgMCBpdHNlbGYuCicnJwoKIyBFeGFtcGxlCgonJycKIElucHV0OiBsMSA9IFsyLDQsM10sIGwyID0gWzUsNiw0XQogT3V0cHV0OiBbNywwLDhdCiBFeHBsYW5hdGlvbjogMzQyICsgNDY1ID0gODA3LgonJycKCiMgU29sdXRpb24gKEFwcHJvYWNoIDE6IEVsZW1lbnRhcnkgTWF0aCkKCicnJwogVGltZSBjb21wbGV4aXR5OiBPKG1heChtLG4pKQogU3BhY2UgY29tcGxleGl0eTogTyhtYXgobSxuKSkKJycnCgojIFN1Ym1pc3Npb25zICgwMS8xOS8yMDIxIDIyOjM1KQoKJycnCiBSdW50aW1lOiA2NCBtcywgZmFzdGVyIHRoYW4gODkuMzQlIG9mIFB5dGhvbjMgb25saW5lIHN1Ym1pc3Npb25zIGZvciBBZGQgVHdvIE51bWJlcnMuCiBNTWVtb3J5IFVzYWdlOiAxNC4zIE1CLCBsZXNzIHRoYW4gNzMuMzklIG9mIFB5dGhvbjMgb25saW5lIHN1Ym1pc3Npb25zIGZvciBBZGQgVHdvIE51bWJlcnMuCicnJwoKIyBEZWZpbml0aW9uIGZvciBzaW5nbHktbGlua2VkIGxpc3QuCiMgY2xhc3MgTGlzdE5vZGU6CiMgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWw9MCwgbmV4dD1Ob25lKToKIyAgICAgICAgIHNlbGYudmFsID0gdmFsCiMgICAgICAgICBzZWxmLm5leHQgPSBuZXh0CmNsYXNzIFNvbHV0aW9uOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgYWRkVHdvTnVtYmVycyhzZWxmLCBsMTogTGlzdE5vZGUsIGwyOiBMaXN0Tm9kZSkgLT4gTGlzdE5vZGU6CiAgICAgICAgaGVhZCA9IExpc3ROb2RlKE5vbmUpCiAgICAgICAgY3VyciA9IGhlYWQKICAgICAgICAKPHxmaW1fZW5kfD4="]
["ec87712973272586e3b8725bafd03fa8b0077deb-5","ec87712973272586e3b8725bafd03fa8b0077deb","PHxmaW1fcHJlZml4fD4KIyBTb3VyY2U6IGh0dHBzOi8vbGVldGNvZGUuY29tL3Byb2JsZW1zL2FkZC10d28tbnVtYmVycy8KCiMgMi4gQWRkIFR3byBOdW1iZXJzIFtNZWRpdW1dCgonJycKIFlvdSBhcmUgZ2l2ZW4gdHdvIG5vbi1lbXB0eSBsaW5rZWQgbGlzdHMgcmVwcmVzZW50aW5nIHR3byBub24tbmVnYXRpdmUgaW50ZWdlcnMuIAogVGhlIGRpZ2l0cyBhcmUgc3RvcmVkIGluIHJldmVyc2Ugb3JkZXIsIGFuZCBlYWNoIG9mIHRoZWlyIG5vZGVzIGNvbnRhaW5zIGEgCiBzaW5nbGUgZGlnaXQuIEFkZCB0aGUgdHdvIG51bWJlcnMgYW5kIHJldHVybiB0aGUgc3VtIGFzIGEgbGlua2VkIGxpc3QuCiAgCiBZb3UgbWF5IGFzc3VtZSB0aGUgdHdvIG51bWJlcnMgZG8gbm90IGNvbnRhaW4gYW55IGxlYWRpbmcgemVybywgZXhjZXB0IHRoZSBudW1iZXIgMCBpdHNlbGYuCicnJwoKIyBFeGFtcGxlCgonJycKIElucHV0OiBsMSA9IFsyLDQsM10sIGwyID0gWzUsNiw0XQogT3V0cHV0OiBbNywwLDhdCiBFeHBsYW5hdGlvbjogMzQyICsgNDY1ID0gODA3LgonJycKCiMgU29sdXRpb24gKEFwcHJvYWNoIDE6IEVsZW1lbnRhcnkgTWF0aCkKCicnJwogVGltZSBjb21wbGV4aXR5OiBPKG1heChtLG4pKQogU3BhY2UgY29tcGxleGl0eTogTyhtYXgobSxuKSkKJycnCgojIFN1Ym1pc3Npb25zICgwMS8xOS8yMDIxIDIyOjM1KQoKJycnCiBSdW50aW1lOiA2NCBtcywgZmFzdGVyIHRoYW4gODkuMzQlIG9mIFB5dGhvbjMgb25saW5lIHN1Ym1pc3Npb25zIGZvciBBZGQgVHdvIE51bWJlcnMuCiBNTWVtb3J5IFVzYWdlOiAxNC4zIE1CLCBsZXNzIHRoYW4gNzMuMzklIG9mIFB5dGhvbjMgb25saW5lIHN1Ym1pc3Npb25zIGZvciBBZGQgVHdvIE51bWJlcnMuCicnJwoKIyBEZWZpbml0aW9uIGZvciBzaW5nbHktbGlua2VkIGxpc3QuCiMgY2xhc3MgTGlzdE5vZGU6CiMgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWw9MCwgbmV4dD1Ob25lKToKIyAgICAgICAgIHNlbGYudmFsID0gdmFsCiMgICAgICAgICBzZWxmLm5leHQgPSBuZXh0Cjx8ZmltX2hvbGV8PgogICAgICAgIAogICAgICAgICMgZm9yIG92ZXJmbG93CiAgICAgICAgY2FyeSA9IDAKICAgICAgICAKICAgICAgICB3aGlsZShsMSAhPSBOb25lIG9yIGwyICE9IE5vbmUgb3IgY2FyeSAhPSAwKToKICAgICAgICAgICAgIyBnZXQgbDEgdmFsdWUgYW5kIGl0dGVyYXRpb24gZm9yIGxpbmtlZCBsaXN0IGwxCiAgICAgICAgICAgIGlmKGwxICE9IE5vbmUpOgogICAgICAgICAgICAgICAgeCA9IGwxLnZhbAogICAgICAgICAgICAgICAgbDEgPSBsMS5uZXh0CiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB4ID0gMAogICAgICAgICAgICAgCiAgICAgICAgICAgICMgZ2V0IGwyIHZhbHVlIGFuZCBpdHRlcmF0aW9uIGZvciBsaW5rZWQgbGlzdCBsMgogICAgICAgICAgICBpZihsMiAhPSBOb25lKToKICAgICAgICAgICAgICAgIHkgPSBsMi52YWwKICAgICAgICAgICAgICAgIGwyID0gbDIubmV4dAogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgeSA9IDAKICAgICAgICAgICAgCiAgICAgICAgICAgICMgYWRkaW5nIHR3byB2YWx1ZXMgYW5kIGNhcnJ5IAogICAgICAgICAgICBzdW1WYWwgPSB4ICsgeSArIGNhcnkKCiAgICAgICAgICAgICMgcmVzZXQgY2FycnkKICAgICAgICAgICAgY2FyeSA9IDAKICAgICAgICAgICAgCiAgICAgICAgICAgICMgY2hlY2sgaWYgdmFsdWUgYWZ0ZXIgc3VtIGlzIG1vcmUgdGhhbiA5IG9yIG5vdAogICAgICAgICAgICBpZiBzdW1WYWwgPiA5OgogICAgICAgICAgICAgICAgc3VtVmFsICU9IDEwCiAgICAgICAgICAgICAgICBjYXJ5ID0gMQogICAgICAgICAgICAKICAgICAgICAgICAgIyBhZGQgbm9kZSB0byBsaXN0CiAgICAgICAgICAgIGN1cnIubmV4dCA9IExpc3ROb2RlKHN1bVZhbCkKICAgICAgICAgICAgY3VyciA9IGN1cnIubmV4dAogICAgICAgICAgICAKICAgICAgICByZXR1cm4gaGVhZC5uZXh0Cjx8ZmltX3N1ZmZpeHw+CmNsYXNzIFNvbHV0aW9uOgogICAgZGVmIGFkZFR3b051bWJlcnMoc2VsZiwgbDE6IExpc3ROb2RlLCBsMjogTGlzdE5vZGUpIC0+IExpc3ROb2RlOgogICAgICAgIGhlYWQgPSBMaXN0Tm9kZShOb25lKQogICAgICAgIGN1cnIgPSBoZWFkCjx8ZmltX2VuZHw+"]
["82421023d5fdd6e27cb24a614bbb3e8f6c957eaf-1","82421023d5fdd6e27cb24a614bbb3e8f6c957eaf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwpzeXMucGF0aC5hcHBlbmQoJy4uJykKPHxmaW1faG9sZXw+CmltcG9ydCBuZXQuY29uZmlnIGFzIGNmZwoKCmNsYXNzIGRhdGFzZXQob2JqZWN0KToKCglkZWYgX19pbml0X18oc2VsZiwgZGF0YV9zaXplID0gMTAwKToKCQlzZWxmLnBhdGggPSBjZmcuUEFUSCArICcvZGF0YS90cmFpbi9hbGwvJwoJCXNlbGYuaW1hZ2Vfc2l6ZSA9IGNmZy5JTUFHRV9TSVpFCgkJc2VsZi5jZWxsX3NpemUgPSBjZmcuQ0VMTF9TSVpFCgkJc2VsZi52aWV3X3BvaW50cyA9IGNmZy5WSUVXX1BPSU5UUwoJCXNlbGYuYmF0Y2hfc2l6ZSA9IGNmZy5CQVRDSF9TSVpFCgoJCXNlbGYuaW5kaWNlX2xpc3QgPSBsaXN0KHJhbmdlKGRhdGFfc2l6ZSkpCgkJcmFuZG9tLnNodWZmbGUoc2VsZi5pbmRpY2VfbGlzdCkKCQlzZWxmLnN0YXJ0X2luZGljZXMgPSAwCgkJc2VsZi5kYXRhX3N0ZXAgPSAwCgoJZGVmIGdldF9uZXh0X2JhdGNoKHNlbGYpOgoJCWltYWdlX2JhdGNoID0gbnAuZW1wdHkoKHNlbGYuYmF0Y2hfc2l6ZSwgc2VsZi5pbWFnZV9zaXplLCBzZWxmLmltYWdlX3NpemUsIDMpLCBkdHlwZSA9ICdmbG9hdDMyJykKCQlsYWJlbF9iYXRjaCA9IG5wLmVtcHR5KChzZWxmLmJhdGNoX3NpemUsIHNlbGYuY2VsbF9zaXplLCBzZWxmLmNlbGxfc2l6ZSwgNCArIHNlbGYudmlld19wb2ludHMpLCBkdHlwZSA9ICdmbG9hdDMyJykKCQlmb3IgaSBpbiByYW5nZShzZWxmLmJhdGNoX3NpemUpOgoJCQlpbmRpY2UgPSBpICsgc2VsZi5zdGFydF9pbmRpY2VzCgkJCXRyYWluaW5nX2RhdGFfbmFtZSA9IHNlbGYucGF0aCArIHN0cihpbmRpY2UpLnpmaWxsKDUpCgkJCXRyYWluaW5nX2RhdGEgPSBwaWNrbGUubG9hZChvcGVuKHRyYWluaW5nX2RhdGFfbmFtZSwgJ3JiJykpCgoJCQlpbWFnZV9iYXRjaFtpLCA6LCA6LCA6XSA9IHRyYWluaW5nX2RhdGFbMF0KCQkJbGFiZWxfYmF0Y2hbaSwgOiwgOiwgOl0gPSB0cmFpbmluZ19kYXRhWzFdCgoJCXNlbGYuc3RhcnRfaW5kaWNlcyA9IHNlbGYuc3RhcnRfaW5kaWNlcyArIHNlbGYuYmF0Y2hfc2l6ZQoJCXNlbGYuZGF0YV9zdGVwID0gc2VsZi5kYXRhX3N0ZXAgKyAxCgoJCWlmIHNlbGYuc3RhcnRfaW5kaWNlcyArIHNlbGYuYmF0Y2hfc2l6ZSA+IGxlbihzZWxmLmluZGljZV9saXN0KToKCQkjIHVwZGF0ZSB0aGUgYXJncyBhZnRlciBhbGwgdHJhaW5pbmcgZGF0YSBpcyBmZWQKCQkJcmFuZG9tLnNodWZmbGUoc2VsZi5pbmRpY2VfbGlzdCkKCQkJc2VsZi5zdGFydF9pbmRpY2VzID0gMAoJCXJldHVybiBpbWFnZV9iYXRjaCwgbGFiZWxfYmF0Y2gKCjx8ZmltX3N1ZmZpeHw+CgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHJhbmRvbQppbXBvcnQgcGlja2xlCjx8ZmltX2VuZHw+"]
["bfb28f837acdba042a9d58826d451fb869fb1025-1","bfb28f837acdba042a9d58826d451fb869fb1025","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29uZi51cmxzIGltcG9ydCB1cmwKZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLmRlY29yYXRvcnMgaW1wb3J0IGxvZ2luX3JlcXVpcmVkCgpmcm9tIG9mZmVyIGltcG9ydCB2aWV3cwoKdXJscGF0dGVybnMgPSBbCiAgICB1cmwocideY29kZXMvJCcsIGxvZ2luX3JlcXVpcmVkKHZpZXdzLkhhY2tlck9mZmVycy5hc192aWV3KCkpLCBuYW1lPSdjb2RlcycpLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cl0KPHxmaW1fZW5kfD4="]
["da08051bd47a3da223c1b5849a5d7df3dec70611-1","da08051bd47a3da223c1b5849a5d7df3dec70611",{"$cut":{"chars":66280,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIgYXMgbXBsCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IG11bHRpcHJvY2Vzc2luZyBhcyBtdWx0aQppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG9zIAppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBwbWFncHkKaW1wb3J0IHBtYWdweS5pcG1hZyBhcyBpcG1hZwppbXBvcnQgcG1hZ3B5LnBtYWcgYXMgcG1hZwppbXBvcnQgcG1hZ3B5LnBtYWdwbG90bGliIGFzIHBtYWdwbG90bGliCmltcG9ydCByZQppbXBvcnQgc2NpcHkuaW50ZWdyYXRlIGFzIGludGVncmF0ZQppbXBvcnQgc2NpcHkuc3RhdHMgYXMgc3RhdHMKaW1wb3J0IHNlYWJvcm4gYXMgc25zCmltcG9ydCBTUEQubGliLmxlYXN0c3FfamFjb2JpYW4gYXMgbGliX2sKaW1wb3J0IHN5cwoKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUgYXMgZHQKZnJvbSBpbXBvcnRsaWIgaW1wb3J0IHJlbG9hZApmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUG9vbApmcm9tIHNjaXB5LnN0YXRzIGltcG9ydCBsaW5yZWdyZXNzCgoKCmRlZiBBUElfcGFyYW1fY29tYmluZShzaWRfZGYsYWZucm0sYWZ0cm0xLHRybTFfc3Rhcl9taW4sbWluTik6CiAgICAjCiAgICAjIyBjYWxjdWxhdGluZyBmaXJzdCBoZWF0aW5nIHBhcmFtZXRlcnMKICAgIG50cm1SZWdzMT1bXQogICAgIwogICAgdXNlZF9kZj1zaWRfZGZbc2lkX2RmLnRyZWF0Pj10cm0xX3N0YXJfbWluXQogICAgdXNlZF9kZj11c2VkX2RmW1sndHJlYXQnLCducm0nLCd0cm0xX3N0YXInXV0KICAgIHRybTFfc3Rhcl9tYXg9dXNlZF9kZlsndHJlYXQnXS50b2xpc3QoKVtsZW4odXNlZF9kZiktMV0KICAgIHZhcmlhYmxlcyA9IFtdCiAgICBmb3IgaSBpbiByYW5nZShsZW4odXNlZF9kZiktbWluTisxKToKICAgICAgICBmb3IgaiBpbiByYW5nZShsZW4odXNlZF9kZiktbWluTisxLWkpOgogICAgICAgICAgICB2YXJpYWJsZXMgPSB2YXJpYWJsZXMgKyBbW3VzZWRfZGYsIGFmbnJtLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRfZGZbJ3RyZWF0J10udG9saXN0KClbaV0sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZF9kZlsndHJlYXQnXS50b2xpc3QoKVtpK2orbWluTi0xXSwndHJtMV9zdGFyJywnbnJtJ11dCiAgICBwPVBvb2wobXVsdGkuY3B1X2NvdW50KCkpCiAgICBudHJtUmVnczE9cGQuRGF0YUZyYW1lKHAubWFwKHdyYXBwZXJfbHRkX3BhcnNfbW9kLCB2YXJpYWJsZXMpKQogICAgbnRybVJlZ3MxLmNvbHVtbnM9WyduX24nLCdzbG9wZV9uJywncl9uJywnZEFJQ19uJywnZnJhY19uJyxcCiAgICAgICAgICAgICAgICAgICAgICAgJ3N0ZXBfbWluX24nLCdzdGVwX21heCcsJ2JldGFfbicsJ2tydl9uJywna3J2ZF9uJywnZl9yZXNpZF9uJ10KICAgIHAuY2xvc2UoKQogICAgcC50ZXJtaW5hdGUoKQogICAgcHJpbnQoJ1tjYWxjdWxhdGVkIGZvcicsIGxlbihudHJtUmVnczEpLFwKICAgICAgICAgICdzdGVwLWNvbWJpbmF0aW9ucyBmb3IgMXN0IGhlYXRpbmcgcGFyYW1ldGVycycsXAogICAgICAgICAgJygnLCB0cm0xX3N0YXJfbWluLCAnLScsIHRybTFfc3Rhcl9tYXgsICdtVCldJykKICAgICNwcmludChudHJtUmVnczEpCiAgICAjCiAgICAjIyBjYWxjdWxhdGluZyBzZWNvbmQgaGVhdGluZyBwYXJhbWV0ZXJzCiAgICB0cm1SZWdzMT1bXQogICAgIyBpbnRlcnZhbCBzZXJhY2ggZnJvbSBaRVJPIHVwIHRvIE1BWAogICAgdHJtMl9zdGFyX21pbj1zaWRfZGZbJ3RyZWF0J10udG9saXN0KClbMF0KICAgIHVzZWRfZGY9c2lkX2RmW3NpZF9kZi50cmVhdD49dHJtMl9zdGFyX21pbl0KICAgIHVzZWRfZGY9dXNlZF9kZltbJ3RyZWF0JywndHJtMScsJ3RybTJfc3RhciddXQogICAgdHJtMl9zdGFyX21heD11c2VkX2RmWyd0cmVhdCddLnRvbGlzdCgpW2xlbih1c2VkX2RmKS0xXQogICAgdmFyaWFibGVzID0gW10KICAgIGZvciBpIGluIHJhbmdlKGxlbih1c2VkX2RmKS1taW5OKzEpOgogICAgICAgIGZvciBqIGluIHJhbmdlKGxlbih1c2VkX2RmKS1taW5OKzEtaSk6CiAgICAgICAgICAgIHZhcmlhYmxlcyA9IHZhcmlhYmxlcyArIFtbdXNlZF9kZiwgYWZ0cm0xLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRfZGZbJ3RyZWF0J10udG9saXN0KClbaV0sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZF9kZlsndHJlYXQnXS50b2xpc3QoKVtpK2orbWluTi0xXSwndHJtMl9zdGFyJywndHJtMSddXQogICAgcD1Qb29sKG11bHRpLmNwdV9jb3VudCgpKQogICAgdHJtUmVnczE9cGQuRGF0YUZyYW1lKHAubWFwKHdyYXBwZXJfbHRkX3BhcnNfbW9kLCB2YXJpYWJsZXMpKQogICAgdHJtUmVnczEuY29sdW1ucz1bJ25fdCcsJ3Nsb3BlX3QnLCdyX3QnLCdkQUlDX3QnLCdmcmFjX3QnLFwKICAgICAgICAgICAgICAgICAgICAgICdzdGVwX21pbl90Jywnc3RlcF9tYXgnLCdiZXRhX3QnLCdrcnZfdCcsJ2tydmRfdCcsJ2ZfcmVzaWRfdCddCiAgICBwLmNsb3NlKCkKICAgIHAudGVybWluYXRlKCkKICAgIHByaW50KCdbY2FsY3VsYXRlZCBmb3InLCBsZW4odHJtUmVnczEpLFwKICAgICAgICAgICdzdGVwLWNvbWJpbmF0aW9ucyBmb3IgMm5kIGhlYXRpbmcgcGFyYW1ldGVycycsXAogICAgICAgICAgJygnLCB0cm0yX3N0YXJfbWluLCAnLScsIHRybTJfc3Rhcl9tYXgsICdtVCldJykKICAgICNwcmludCh0cm1SZWdzMSkKICAgICMKICAgIHByaW50KCdbbWVyZ2UgdGhlIGNvbWJpbmF0aW9ucyBmb3IgSF9taW5fbiA+PSBIX21pbl90IHdpdGggY29tbW9uIEhfbWF4XScpCiAgICBjb21iaW5lZFJlZ3MwPVtdCiAgICBjb21iaW5lZFJlZ3MwPXBkLm1lcmdlKG50cm1SZWdzMSwgdHJtUmVnczEsIG9uPSdzdGVwX21heCcsIGhvdz0nb3V0ZXInKQogICAgY29tYmluZWRSZWdzMT1bXQogICAgY29tYmluZWRSZWdzMT1jb21iaW5lZFJlZ3MwW2NvbWJpbmVkUmVnczAuc3RlcF9taW5fbj49Y29tYmluZWRSZWdzMC5zdGVwX21pbl90XQogICAgcHJpbnQoJyAnLCBsZW4oY29tYmluZWRSZWdzMCksICcgY29t"}}]
["da08051bd47a3da223c1b5849a5d7df3dec70611-2","da08051bd47a3da223c1b5849a5d7df3dec70611",{"$cut":{"chars":53732,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIgYXMgbXBsCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IG11bHRpcHJvY2Vzc2luZyBhcyBtdWx0aQppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG9zIAppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBwbWFncHkKaW1wb3J0IHBtYWdweS5pcG1hZyBhcyBpcG1hZwppbXBvcnQgcG1hZ3B5LnBtYWcgYXMgcG1hZwppbXBvcnQgcG1hZ3B5LnBtYWdwbG90bGliIGFzIHBtYWdwbG90bGliCmltcG9ydCByZQppbXBvcnQgc2NpcHkuaW50ZWdyYXRlIGFzIGludGVncmF0ZQppbXBvcnQgc2NpcHkuc3RhdHMgYXMgc3RhdHMKaW1wb3J0IHNlYWJvcm4gYXMgc25zCmltcG9ydCBTUEQubGliLmxlYXN0c3FfamFjb2JpYW4gYXMgbGliX2sKaW1wb3J0IHN5cwoKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUgYXMgZHQKZnJvbSBpbXBvcnRsaWIgaW1wb3J0IHJlbG9hZApmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUG9vbApmcm9tIHNjaXB5LnN0YXRzIGltcG9ydCBsaW5yZWdyZXNzCgoKCmRlZiBBUElfcGFyYW1fY29tYmluZShzaWRfZGYsYWZucm0sYWZ0cm0xLHRybTFfc3Rhcl9taW4sbWluTik6CiAgICAjCiAgICAjIyBjYWxjdWxhdGluZyBmaXJzdCBoZWF0aW5nIHBhcmFtZXRlcnMKICAgIG50cm1SZWdzMT1bXQogICAgIwogICAgdXNlZF9kZj1zaWRfZGZbc2lkX2RmLnRyZWF0Pj10cm0xX3N0YXJfbWluXQogICAgdXNlZF9kZj11c2VkX2RmW1sndHJlYXQnLCducm0nLCd0cm0xX3N0YXInXV0KICAgIHRybTFfc3Rhcl9tYXg9dXNlZF9kZlsndHJlYXQnXS50b2xpc3QoKVtsZW4odXNlZF9kZiktMV0KICAgIHZhcmlhYmxlcyA9IFtdCiAgICBmb3IgaSBpbiByYW5nZShsZW4odXNlZF9kZiktbWluTisxKToKICAgICAgICBmb3IgaiBpbiByYW5nZShsZW4odXNlZF9kZiktbWluTisxLWkpOgogICAgICAgICAgICB2YXJpYWJsZXMgPSB2YXJpYWJsZXMgKyBbW3VzZWRfZGYsIGFmbnJtLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRfZGZbJ3RyZWF0J10udG9saXN0KClbaV0sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZF9kZlsndHJlYXQnXS50b2xpc3QoKVtpK2orbWluTi0xXSwndHJtMV9zdGFyJywnbnJtJ11dCiAgICBwPVBvb2wobXVsdGkuY3B1X2NvdW50KCkpCiAgICBudHJtUmVnczE9cGQuRGF0YUZyYW1lKHAubWFwKHdyYXBwZXJfbHRkX3BhcnNfbW9kLCB2YXJpYWJsZXMpKQogICAgbnRybVJlZ3MxLmNvbHVtbnM9WyduX24nLCdzbG9wZV9uJywncl9uJywnZEFJQ19uJywnZnJhY19uJyxcCiAgICAgICAgICAgICAgICAgICAgICAgJ3N0ZXBfbWluX24nLCdzdGVwX21heCcsJ2JldGFfbicsJ2tydl9uJywna3J2ZF9uJywnZl9yZXNpZF9uJ10KICAgIHAuY2xvc2UoKQogICAgcC50ZXJtaW5hdGUoKQogICAgcHJpbnQoJ1tjYWxjdWxhdGVkIGZvcicsIGxlbihudHJtUmVnczEpLFwKICAgICAgICAgICdzdGVwLWNvbWJpbmF0aW9ucyBmb3IgMXN0IGhlYXRpbmcgcGFyYW1ldGVycycsXAogICAgICAgICAgJygnLCB0cm0xX3N0YXJfbWluLCAnLScsIHRybTFfc3Rhcl9tYXgsICdtVCldJykKICAgICNwcmludChudHJtUmVnczEpCiAgICAjCiAgICAjIyBjYWxjdWxhdGluZyBzZWNvbmQgaGVhdGluZyBwYXJhbWV0ZXJzCiAgICB0cm1SZWdzMT1bXQogICAgIyBpbnRlcnZhbCBzZXJhY2ggZnJvbSBaRVJPIHVwIHRvIE1BWAogICAgdHJtMl9zdGFyX21pbj1zaWRfZGZbJ3RyZWF0J10udG9saXN0KClbMF0KICAgIHVzZWRfZGY9c2lkX2RmW3NpZF9kZi50cmVhdD49dHJtMl9zdGFyX21pbl0KICAgIHVzZWRfZGY9dXNlZF9kZltbJ3RyZWF0JywndHJtMScsJ3RybTJfc3RhciddXQogICAgdHJtMl9zdGFyX21heD11c2VkX2RmWyd0cmVhdCddLnRvbGlzdCgpW2xlbih1c2VkX2RmKS0xXQogICAgdmFyaWFibGVzID0gW10KICAgIGZvciBpIGluIHJhbmdlKGxlbih1c2VkX2RmKS1taW5OKzEpOgogICAgICAgIGZvciBqIGluIHJhbmdlKGxlbih1c2VkX2RmKS1taW5OKzEtaSk6CiAgICAgICAgICAgIHZhcmlhYmxlcyA9IHZhcmlhYmxlcyArIFtbdXNlZF9kZiwgYWZ0cm0xLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRfZGZbJ3RyZWF0J10udG9saXN0KClbaV0sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZF9kZlsndHJlYXQnXS50b2xpc3QoKVtpK2orbWluTi0xXSwndHJtMl9zdGFyJywndHJtMSddXQogICAgcD1Qb29sKG11bHRpLmNwdV9jb3VudCgpKQogICAgdHJtUmVnczE9cGQuRGF0YUZyYW1lKHAubWFwKHdyYXBwZXJfbHRkX3BhcnNfbW9kLCB2YXJpYWJsZXMpKQogICAgdHJtUmVnczEuY29sdW1ucz1bJ25fdCcsJ3Nsb3BlX3QnLCdyX3QnLCdkQUlDX3QnLCdmcmFjX3QnLFwKICAgICAgICAgICAgICAgICAgICAgICdzdGVwX21pbl90Jywnc3RlcF9tYXgnLCdiZXRhX3QnLCdrcnZfdCcsJ2tydmRfdCcsJ2ZfcmVzaWRfdCddCiAgICBwLmNsb3NlKCkKICAgIHAudGVybWluYXRlKCkKICAgIHByaW50KCdbY2FsY3VsYXRlZCBmb3InLCBsZW4odHJtUmVnczEpLFwKICAgICAgICAgICdzdGVwLWNvbWJpbmF0aW9ucyBmb3IgMm5kIGhlYXRpbmcgcGFyYW1ldGVycycsXAogICAgICAgICAgJygnLCB0cm0yX3N0YXJfbWluLCAnLScsIHRybTJfc3Rhcl9tYXgsICdtVCldJykKICAgICNwcmludCh0cm1SZWdzMSkKICAgICMKICAgIHByaW50KCdbbWVyZ2UgdGhlIGNvbWJpbmF0aW9ucyBmb3IgSF9taW5fbiA+PSBIX21pbl90IHdpdGggY29tbW9uIEhfbWF4XScpCiAgICBjb21iaW5lZFJlZ3MwPVtdCiAgICBjb21iaW5lZFJlZ3MwPXBkLm1lcmdlKG50cm1SZWdzMSwgdHJtUmVnczEsIG9uPSdzdGVwX21heCcsIGhvdz0nb3V0ZXInKQogICAgY29tYmluZWRSZWdzMT1bXQogICAgY29tYmluZWRSZWdzMT1jb21iaW5lZFJlZ3MwW2NvbWJpbmVkUmVnczAuc3RlcF9taW5fbj49Y29tYmluZWRSZWdzMC5zdGVwX21pbl90XQogICAgcHJpbnQoJyAnLCBsZW4oY29tYmluZWRSZWdzMCksICcgY29t"}}]
["da08051bd47a3da223c1b5849a5d7df3dec70611-3","da08051bd47a3da223c1b5849a5d7df3dec70611",{"$cut":{"chars":48120,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIgYXMgbXBsCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IG11bHRpcHJvY2Vzc2luZyBhcyBtdWx0aQppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG9zIAppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBwbWFncHkKaW1wb3J0IHBtYWdweS5pcG1hZyBhcyBpcG1hZwppbXBvcnQgcG1hZ3B5LnBtYWcgYXMgcG1hZwppbXBvcnQgcG1hZ3B5LnBtYWdwbG90bGliIGFzIHBtYWdwbG90bGliCmltcG9ydCByZQppbXBvcnQgc2NpcHkuaW50ZWdyYXRlIGFzIGludGVncmF0ZQppbXBvcnQgc2NpcHkuc3RhdHMgYXMgc3RhdHMKaW1wb3J0IHNlYWJvcm4gYXMgc25zCmltcG9ydCBTUEQubGliLmxlYXN0c3FfamFjb2JpYW4gYXMgbGliX2sKaW1wb3J0IHN5cwoKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUgYXMgZHQKZnJvbSBpbXBvcnRsaWIgaW1wb3J0IHJlbG9hZApmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUG9vbApmcm9tIHNjaXB5LnN0YXRzIGltcG9ydCBsaW5yZWdyZXNzCgoKCmRlZiBBUElfcGFyYW1fY29tYmluZShzaWRfZGYsYWZucm0sYWZ0cm0xLHRybTFfc3Rhcl9taW4sbWluTik6CiAgICAjCiAgICAjIyBjYWxjdWxhdGluZyBmaXJzdCBoZWF0aW5nIHBhcmFtZXRlcnMKICAgIG50cm1SZWdzMT1bXQogICAgIwogICAgdXNlZF9kZj1zaWRfZGZbc2lkX2RmLnRyZWF0Pj10cm0xX3N0YXJfbWluXQogICAgdXNlZF9kZj11c2VkX2RmW1sndHJlYXQnLCducm0nLCd0cm0xX3N0YXInXV0KICAgIHRybTFfc3Rhcl9tYXg9dXNlZF9kZlsndHJlYXQnXS50b2xpc3QoKVtsZW4odXNlZF9kZiktMV0KICAgIHZhcmlhYmxlcyA9IFtdCiAgICBmb3IgaSBpbiByYW5nZShsZW4odXNlZF9kZiktbWluTisxKToKICAgICAgICBmb3IgaiBpbiByYW5nZShsZW4odXNlZF9kZiktbWluTisxLWkpOgogICAgICAgICAgICB2YXJpYWJsZXMgPSB2YXJpYWJsZXMgKyBbW3VzZWRfZGYsIGFmbnJtLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRfZGZbJ3RyZWF0J10udG9saXN0KClbaV0sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZF9kZlsndHJlYXQnXS50b2xpc3QoKVtpK2orbWluTi0xXSwndHJtMV9zdGFyJywnbnJtJ11dCiAgICBwPVBvb2wobXVsdGkuY3B1X2NvdW50KCkpCiAgICBudHJtUmVnczE9cGQuRGF0YUZyYW1lKHAubWFwKHdyYXBwZXJfbHRkX3BhcnNfbW9kLCB2YXJpYWJsZXMpKQogICAgbnRybVJlZ3MxLmNvbHVtbnM9WyduX24nLCdzbG9wZV9uJywncl9uJywnZEFJQ19uJywnZnJhY19uJyxcCiAgICAgICAgICAgICAgICAgICAgICAgJ3N0ZXBfbWluX24nLCdzdGVwX21heCcsJ2JldGFfbicsJ2tydl9uJywna3J2ZF9uJywnZl9yZXNpZF9uJ10KICAgIHAuY2xvc2UoKQogICAgcC50ZXJtaW5hdGUoKQogICAgcHJpbnQoJ1tjYWxjdWxhdGVkIGZvcicsIGxlbihudHJtUmVnczEpLFwKICAgICAgICAgICdzdGVwLWNvbWJpbmF0aW9ucyBmb3IgMXN0IGhlYXRpbmcgcGFyYW1ldGVycycsXAogICAgICAgICAgJygnLCB0cm0xX3N0YXJfbWluLCAnLScsIHRybTFfc3Rhcl9tYXgsICdtVCldJykKICAgICNwcmludChudHJtUmVnczEpCiAgICAjCiAgICAjIyBjYWxjdWxhdGluZyBzZWNvbmQgaGVhdGluZyBwYXJhbWV0ZXJzCiAgICB0cm1SZWdzMT1bXQogICAgIyBpbnRlcnZhbCBzZXJhY2ggZnJvbSBaRVJPIHVwIHRvIE1BWAogICAgdHJtMl9zdGFyX21pbj1zaWRfZGZbJ3RyZWF0J10udG9saXN0KClbMF0KICAgIHVzZWRfZGY9c2lkX2RmW3NpZF9kZi50cmVhdD49dHJtMl9zdGFyX21pbl0KICAgIHVzZWRfZGY9dXNlZF9kZltbJ3RyZWF0JywndHJtMScsJ3RybTJfc3RhciddXQogICAgdHJtMl9zdGFyX21heD11c2VkX2RmWyd0cmVhdCddLnRvbGlzdCgpW2xlbih1c2VkX2RmKS0xXQogICAgdmFyaWFibGVzID0gW10KICAgIGZvciBpIGluIHJhbmdlKGxlbih1c2VkX2RmKS1taW5OKzEpOgogICAgICAgIGZvciBqIGluIHJhbmdlKGxlbih1c2VkX2RmKS1taW5OKzEtaSk6CiAgICAgICAgICAgIHZhcmlhYmxlcyA9IHZhcmlhYmxlcyArIFtbdXNlZF9kZiwgYWZ0cm0xLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRfZGZbJ3RyZWF0J10udG9saXN0KClbaV0sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZF9kZlsndHJlYXQnXS50b2xpc3QoKVtpK2orbWluTi0xXSwndHJtMl9zdGFyJywndHJtMSddXQogICAgcD1Qb29sKG11bHRpLmNwdV9jb3VudCgpKQogICAgdHJtUmVnczE9cGQuRGF0YUZyYW1lKHAubWFwKHdyYXBwZXJfbHRkX3BhcnNfbW9kLCB2YXJpYWJsZXMpKQogICAgdHJtUmVnczEuY29sdW1ucz1bJ25fdCcsJ3Nsb3BlX3QnLCdyX3QnLCdkQUlDX3QnLCdmcmFjX3QnLFwKICAgICAgICAgICAgICAgICAgICAgICdzdGVwX21pbl90Jywnc3RlcF9tYXgnLCdiZXRhX3QnLCdrcnZfdCcsJ2tydmRfdCcsJ2ZfcmVzaWRfdCddCiAgICBwLmNsb3NlKCkKICAgIHAudGVybWluYXRlKCkKICAgIHByaW50KCdbY2FsY3VsYXRlZCBmb3InLCBsZW4odHJtUmVnczEpLFwKICAgICAgICAgICdzdGVwLWNvbWJpbmF0aW9ucyBmb3IgMm5kIGhlYXRpbmcgcGFyYW1ldGVycycsXAogICAgICAgICAgJygnLCB0cm0yX3N0YXJfbWluLCAnLScsIHRybTJfc3Rhcl9tYXgsICdtVCldJykKICAgICNwcmludCh0cm1SZWdzMSkKICAgICMKICAgIHByaW50KCdbbWVyZ2UgdGhlIGNvbWJpbmF0aW9ucyBmb3IgSF9taW5fbiA+PSBIX21pbl90IHdpdGggY29tbW9uIEhfbWF4XScpCiAgICBjb21iaW5lZFJlZ3MwPVtdCiAgICBjb21iaW5lZFJlZ3MwPXBkLm1lcmdlKG50cm1SZWdzMSwgdHJtUmVnczEsIG9uPSdzdGVwX21heCcsIGhvdz0nb3V0ZXInKQogICAgY29tYmluZWRSZWdzMT1bXQogICAgY29tYmluZWRSZWdzMT1jb21iaW5lZFJlZ3MwW2NvbWJpbmVkUmVnczAuc3RlcF9taW5fbj49Y29tYmluZWRSZWdzMC5zdGVwX21pbl90XQogICAgcHJpbnQoJyAnLCBsZW4oY29tYmluZWRSZWdzMCksICcgY29t"}}]
["da08051bd47a3da223c1b5849a5d7df3dec70611-4","da08051bd47a3da223c1b5849a5d7df3dec70611",{"$cut":{"chars":19960,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIgYXMgbXBsCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IG11bHRpcHJvY2Vzc2luZyBhcyBtdWx0aQppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG9zIAppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBwbWFncHkKaW1wb3J0IHBtYWdweS5pcG1hZyBhcyBpcG1hZwppbXBvcnQgcG1hZ3B5LnBtYWcgYXMgcG1hZwppbXBvcnQgcG1hZ3B5LnBtYWdwbG90bGliIGFzIHBtYWdwbG90bGliCmltcG9ydCByZQppbXBvcnQgc2NpcHkuaW50ZWdyYXRlIGFzIGludGVncmF0ZQppbXBvcnQgc2NpcHkuc3RhdHMgYXMgc3RhdHMKaW1wb3J0IHNlYWJvcm4gYXMgc25zCmltcG9ydCBTUEQubGliLmxlYXN0c3FfamFjb2JpYW4gYXMgbGliX2sKaW1wb3J0IHN5cwoKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUgYXMgZHQKZnJvbSBpbXBvcnRsaWIgaW1wb3J0IHJlbG9hZApmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUG9vbApmcm9tIHNjaXB5LnN0YXRzIGltcG9ydCBsaW5yZWdyZXNzCgoKCmRlZiBBUElfcGFyYW1fY29tYmluZShzaWRfZGYsYWZucm0sYWZ0cm0xLHRybTFfc3Rhcl9taW4sbWluTik6CiAgICAjCiAgICAjIyBjYWxjdWxhdGluZyBmaXJzdCBoZWF0aW5nIHBhcmFtZXRlcnMKICAgIG50cm1SZWdzMT1bXQogICAgIwogICAgdXNlZF9kZj1zaWRfZGZbc2lkX2RmLnRyZWF0Pj10cm0xX3N0YXJfbWluXQogICAgdXNlZF9kZj11c2VkX2RmW1sndHJlYXQnLCducm0nLCd0cm0xX3N0YXInXV0KICAgIHRybTFfc3Rhcl9tYXg9dXNlZF9kZlsndHJlYXQnXS50b2xpc3QoKVtsZW4odXNlZF9kZiktMV0KICAgIHZhcmlhYmxlcyA9IFtdCiAgICBmb3IgaSBpbiByYW5nZShsZW4odXNlZF9kZiktbWluTisxKToKICAgICAgICBmb3IgaiBpbiByYW5nZShsZW4odXNlZF9kZiktbWluTisxLWkpOgogICAgICAgICAgICB2YXJpYWJsZXMgPSB2YXJpYWJsZXMgKyBbW3VzZWRfZGYsIGFmbnJtLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRfZGZbJ3RyZWF0J10udG9saXN0KClbaV0sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZF9kZlsndHJlYXQnXS50b2xpc3QoKVtpK2orbWluTi0xXSwndHJtMV9zdGFyJywnbnJtJ11dCiAgICBwPVBvb2wobXVsdGkuY3B1X2NvdW50KCkpCiAgICBudHJtUmVnczE9cGQuRGF0YUZyYW1lKHAubWFwKHdyYXBwZXJfbHRkX3BhcnNfbW9kLCB2YXJpYWJsZXMpKQogICAgbnRybVJlZ3MxLmNvbHVtbnM9WyduX24nLCdzbG9wZV9uJywncl9uJywnZEFJQ19uJywnZnJhY19uJyxcCiAgICAgICAgICAgICAgICAgICAgICAgJ3N0ZXBfbWluX24nLCdzdGVwX21heCcsJ2JldGFfbicsJ2tydl9uJywna3J2ZF9uJywnZl9yZXNpZF9uJ10KICAgIHAuY2xvc2UoKQogICAgcC50ZXJtaW5hdGUoKQogICAgcHJpbnQoJ1tjYWxjdWxhdGVkIGZvcicsIGxlbihudHJtUmVnczEpLFwKICAgICAgICAgICdzdGVwLWNvbWJpbmF0aW9ucyBmb3IgMXN0IGhlYXRpbmcgcGFyYW1ldGVycycsXAogICAgICAgICAgJygnLCB0cm0xX3N0YXJfbWluLCAnLScsIHRybTFfc3Rhcl9tYXgsICdtVCldJykKICAgICNwcmludChudHJtUmVnczEpCiAgICAjCiAgICAjIyBjYWxjdWxhdGluZyBzZWNvbmQgaGVhdGluZyBwYXJhbWV0ZXJzCiAgICB0cm1SZWdzMT1bXQogICAgIyBpbnRlcnZhbCBzZXJhY2ggZnJvbSBaRVJPIHVwIHRvIE1BWAogICAgdHJtMl9zdGFyX21pbj1zaWRfZGZbJ3RyZWF0J10udG9saXN0KClbMF0KICAgIHVzZWRfZGY9c2lkX2RmW3NpZF9kZi50cmVhdD49dHJtMl9zdGFyX21pbl0KICAgIHVzZWRfZGY9dXNlZF9kZltbJ3RyZWF0JywndHJtMScsJ3RybTJfc3RhciddXQogICAgdHJtMl9zdGFyX21heD11c2VkX2RmWyd0cmVhdCddLnRvbGlzdCgpW2xlbih1c2VkX2RmKS0xXQogICAgdmFyaWFibGVzID0gW10KICAgIGZvciBpIGluIHJhbmdlKGxlbih1c2VkX2RmKS1taW5OKzEpOgogICAgICAgIGZvciBqIGluIHJhbmdlKGxlbih1c2VkX2RmKS1taW5OKzEtaSk6CiAgICAgICAgICAgIHZhcmlhYmxlcyA9IHZhcmlhYmxlcyArIFtbdXNlZF9kZiwgYWZ0cm0xLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRfZGZbJ3RyZWF0J10udG9saXN0KClbaV0sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZF9kZlsndHJlYXQnXS50b2xpc3QoKVtpK2orbWluTi0xXSwndHJtMl9zdGFyJywndHJtMSddXQogICAgcD1Qb29sKG11bHRpLmNwdV9jb3VudCgpKQogICAgdHJtUmVnczE9cGQuRGF0YUZyYW1lKHAubWFwKHdyYXBwZXJfbHRkX3BhcnNfbW9kLCB2YXJpYWJsZXMpKQogICAgdHJtUmVnczEuY29sdW1ucz1bJ25fdCcsJ3Nsb3BlX3QnLCdyX3QnLCdkQUlDX3QnLCdmcmFjX3QnLFwKICAgICAgICAgICAgICAgICAgICAgICdzdGVwX21pbl90Jywnc3RlcF9tYXgnLCdiZXRhX3QnLCdrcnZfdCcsJ2tydmRfdCcsJ2ZfcmVzaWRfdCddCiAgICBwLmNsb3NlKCkKICAgIHAudGVybWluYXRlKCkKICAgIHByaW50KCdbY2FsY3VsYXRlZCBmb3InLCBsZW4odHJtUmVnczEpLFwKICAgICAgICAgICdzdGVwLWNvbWJpbmF0aW9ucyBmb3IgMm5kIGhlYXRpbmcgcGFyYW1ldGVycycsXAogICAgICAgICAgJygnLCB0cm0yX3N0YXJfbWluLCAnLScsIHRybTJfc3Rhcl9tYXgsICdtVCldJykKICAgICNwcmludCh0cm1SZWdzMSkKICAgICMKICAgIHByaW50KCdbbWVyZ2UgdGhlIGNvbWJpbmF0aW9ucyBmb3IgSF9taW5fbiA+PSBIX21pbl90IHdpdGggY29tbW9uIEhfbWF4XScpCiAgICBjb21iaW5lZFJlZ3MwPVtdCiAgICBjb21iaW5lZFJlZ3MwPXBkLm1lcmdlKG50cm1SZWdzMSwgdHJtUmVnczEsIG9uPSdzdGVwX21heCcsIGhvdz0nb3V0ZXInKQogICAgY29tYmluZWRSZWdzMT1bXQogICAgY29tYmluZWRSZWdzMT1jb21iaW5lZFJlZ3MwW2NvbWJpbmVkUmVnczAuc3RlcF9taW5fbj49Y29tYmluZWRSZWdzMC5zdGVwX21pbl90XQogICAgcHJpbnQoJyAnLCBsZW4oY29tYmluZWRSZWdzMCksICcgY29t"}}]
["da08051bd47a3da223c1b5849a5d7df3dec70611-5","da08051bd47a3da223c1b5849a5d7df3dec70611",{"$cut":{"chars":43736,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIgYXMgbXBsCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IG11bHRpcHJvY2Vzc2luZyBhcyBtdWx0aQppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG9zIAppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBwbWFncHkKaW1wb3J0IHBtYWdweS5pcG1hZyBhcyBpcG1hZwppbXBvcnQgcG1hZ3B5LnBtYWcgYXMgcG1hZwppbXBvcnQgcG1hZ3B5LnBtYWdwbG90bGliIGFzIHBtYWdwbG90bGliCmltcG9ydCByZQppbXBvcnQgc2NpcHkuaW50ZWdyYXRlIGFzIGludGVncmF0ZQppbXBvcnQgc2NpcHkuc3RhdHMgYXMgc3RhdHMKaW1wb3J0IHNlYWJvcm4gYXMgc25zCmltcG9ydCBTUEQubGliLmxlYXN0c3FfamFjb2JpYW4gYXMgbGliX2sKaW1wb3J0IHN5cwoKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUgYXMgZHQKZnJvbSBpbXBvcnRsaWIgaW1wb3J0IHJlbG9hZApmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUG9vbApmcm9tIHNjaXB5LnN0YXRzIGltcG9ydCBsaW5yZWdyZXNzCgoKCmRlZiBBUElfcGFyYW1fY29tYmluZShzaWRfZGYsYWZucm0sYWZ0cm0xLHRybTFfc3Rhcl9taW4sbWluTik6CiAgICAjCiAgICAjIyBjYWxjdWxhdGluZyBmaXJzdCBoZWF0aW5nIHBhcmFtZXRlcnMKICAgIG50cm1SZWdzMT1bXQogICAgIwogICAgdXNlZF9kZj1zaWRfZGZbc2lkX2RmLnRyZWF0Pj10cm0xX3N0YXJfbWluXQogICAgdXNlZF9kZj11c2VkX2RmW1sndHJlYXQnLCducm0nLCd0cm0xX3N0YXInXV0KICAgIHRybTFfc3Rhcl9tYXg9dXNlZF9kZlsndHJlYXQnXS50b2xpc3QoKVtsZW4odXNlZF9kZiktMV0KICAgIHZhcmlhYmxlcyA9IFtdCiAgICBmb3IgaSBpbiByYW5nZShsZW4odXNlZF9kZiktbWluTisxKToKICAgICAgICBmb3IgaiBpbiByYW5nZShsZW4odXNlZF9kZiktbWluTisxLWkpOgogICAgICAgICAgICB2YXJpYWJsZXMgPSB2YXJpYWJsZXMgKyBbW3VzZWRfZGYsIGFmbnJtLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRfZGZbJ3RyZWF0J10udG9saXN0KClbaV0sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZF9kZlsndHJlYXQnXS50b2xpc3QoKVtpK2orbWluTi0xXSwndHJtMV9zdGFyJywnbnJtJ11dCiAgICBwPVBvb2wobXVsdGkuY3B1X2NvdW50KCkpCiAgICBudHJtUmVnczE9cGQuRGF0YUZyYW1lKHAubWFwKHdyYXBwZXJfbHRkX3BhcnNfbW9kLCB2YXJpYWJsZXMpKQogICAgbnRybVJlZ3MxLmNvbHVtbnM9WyduX24nLCdzbG9wZV9uJywncl9uJywnZEFJQ19uJywnZnJhY19uJyxcCiAgICAgICAgICAgICAgICAgICAgICAgJ3N0ZXBfbWluX24nLCdzdGVwX21heCcsJ2JldGFfbicsJ2tydl9uJywna3J2ZF9uJywnZl9yZXNpZF9uJ10KICAgIHAuY2xvc2UoKQogICAgcC50ZXJtaW5hdGUoKQogICAgcHJpbnQoJ1tjYWxjdWxhdGVkIGZvcicsIGxlbihudHJtUmVnczEpLFwKICAgICAgICAgICdzdGVwLWNvbWJpbmF0aW9ucyBmb3IgMXN0IGhlYXRpbmcgcGFyYW1ldGVycycsXAogICAgICAgICAgJygnLCB0cm0xX3N0YXJfbWluLCAnLScsIHRybTFfc3Rhcl9tYXgsICdtVCldJykKICAgICNwcmludChudHJtUmVnczEpCiAgICAjCiAgICAjIyBjYWxjdWxhdGluZyBzZWNvbmQgaGVhdGluZyBwYXJhbWV0ZXJzCiAgICB0cm1SZWdzMT1bXQogICAgIyBpbnRlcnZhbCBzZXJhY2ggZnJvbSBaRVJPIHVwIHRvIE1BWAogICAgdHJtMl9zdGFyX21pbj1zaWRfZGZbJ3RyZWF0J10udG9saXN0KClbMF0KICAgIHVzZWRfZGY9c2lkX2RmW3NpZF9kZi50cmVhdD49dHJtMl9zdGFyX21pbl0KICAgIHVzZWRfZGY9dXNlZF9kZltbJ3RyZWF0JywndHJtMScsJ3RybTJfc3RhciddXQogICAgdHJtMl9zdGFyX21heD11c2VkX2RmWyd0cmVhdCddLnRvbGlzdCgpW2xlbih1c2VkX2RmKS0xXQogICAgdmFyaWFibGVzID0gW10KICAgIGZvciBpIGluIHJhbmdlKGxlbih1c2VkX2RmKS1taW5OKzEpOgogICAgICAgIGZvciBqIGluIHJhbmdlKGxlbih1c2VkX2RmKS1taW5OKzEtaSk6CiAgICAgICAgICAgIHZhcmlhYmxlcyA9IHZhcmlhYmxlcyArIFtbdXNlZF9kZiwgYWZ0cm0xLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRfZGZbJ3RyZWF0J10udG9saXN0KClbaV0sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZF9kZlsndHJlYXQnXS50b2xpc3QoKVtpK2orbWluTi0xXSwndHJtMl9zdGFyJywndHJtMSddXQogICAgcD1Qb29sKG11bHRpLmNwdV9jb3VudCgpKQogICAgdHJtUmVnczE9cGQuRGF0YUZyYW1lKHAubWFwKHdyYXBwZXJfbHRkX3BhcnNfbW9kLCB2YXJpYWJsZXMpKQogICAgdHJtUmVnczEuY29sdW1ucz1bJ25fdCcsJ3Nsb3BlX3QnLCdyX3QnLCdkQUlDX3QnLCdmcmFjX3QnLFwKICAgICAgICAgICAgICAgICAgICAgICdzdGVwX21pbl90Jywnc3RlcF9tYXgnLCdiZXRhX3QnLCdrcnZfdCcsJ2tydmRfdCcsJ2ZfcmVzaWRfdCddCiAgICBwLmNsb3NlKCkKICAgIHAudGVybWluYXRlKCkKICAgIHByaW50KCdbY2FsY3VsYXRlZCBmb3InLCBsZW4odHJtUmVnczEpLFwKICAgICAgICAgICdzdGVwLWNvbWJpbmF0aW9ucyBmb3IgMm5kIGhlYXRpbmcgcGFyYW1ldGVycycsXAogICAgICAgICAgJygnLCB0cm0yX3N0YXJfbWluLCAnLScsIHRybTJfc3Rhcl9tYXgsICdtVCldJykKICAgICNwcmludCh0cm1SZWdzMSkKICAgICMKICAgIHByaW50KCdbbWVyZ2UgdGhlIGNvbWJpbmF0aW9ucyBmb3IgSF9taW5fbiA+PSBIX21pbl90IHdpdGggY29tbW9uIEhfbWF4XScpCiAgICBjb21iaW5lZFJlZ3MwPVtdCiAgICBjb21iaW5lZFJlZ3MwPXBkLm1lcmdlKG50cm1SZWdzMSwgdHJtUmVnczEsIG9uPSdzdGVwX21heCcsIGhvdz0nb3V0ZXInKQogICAgY29tYmluZWRSZWdzMT1bXQogICAgY29tYmluZWRSZWdzMT1jb21iaW5lZFJlZ3MwW2NvbWJpbmVkUmVnczAuc3RlcF9taW5fbj49Y29tYmluZWRSZWdzMC5zdGVwX21pbl90XQogICAgcHJpbnQoJyAnLCBsZW4oY29tYmluZWRSZWdzMCksICcgY29t"}}]
["01f84bf09c6a4e5d183fd2a19454138f21996967-1","01f84bf09c6a4e5d183fd2a19454138f21996967","PHxmaW1fcHJlZml4fD4KIiIiClZhcmlvdXMgdHJhbnNmb3JtcyBmb3IgRkNTIGRhdGEKIiIiCgppbXBvcnQgbnVtcHkgYXMgbnAKCiMgbm9pbnNwZWN0aW9uIFB5VW5yZXNvbHZlZFJlZmVyZW5jZXMKZnJvbSAuIGltcG9ydCBsb2dpY2xlX2MKCgpkZWYgX2xvZ2ljbGUoeSwgdD0yNjIxNDQsIG09NC41LCB3PTAuNSwgYT0wKToKICAgIHkgPSBucC5hcnJheSh5LCBkdHlwZT0nZG91YmxlJykKCiAgICAjIG5vaW5zcGVjdGlvbiBQeVVucmVzb2x2ZWRSZWZlcmVuY2VzCiAgICBsb2dpY2xlX2MubG9naWNsZV9zY2FsZSh0LCB3LCBtLCBhLCB5KQogICAgcmV0dXJuIHkKCgpkZWYgX2xvZ2ljbGVfaW52ZXJzZSh5LCB0PTI2MjE0NCwgbT00LjUsIHc9MC41LCBhPTApOgogICAgeSA9IG5wLmFycmF5KHksIGR0eXBlPSdkb3VibGUnKQoKICAgICMgbm9pbnNwZWN0aW9uIFB5VW5yZXNvbHZlZFJlZmVyZW5jZXMKICAgIGxvZ2ljbGVfYy5sb2dpY2xlX2ludmVyc2UodCwgdywgbSwgYSwgeSkKICAgIHJldHVybiB5CgoKZGVmIGxvZ2ljbGUoCiAgICAgICAgZGF0YSwKICAgICAgICBjaGFubmVsX2luZGljZXMsCiAgICAgICAgdD0yNjIxNDQsCiAgICAgICAgbT00LjUsCiAgICAgICAgdz0wLjUsCiAgICAgICAgYT0wCik6CiAgICAiIiIKICAgIExvZ2ljbGUgdHJhbnNmb3JtYXRpb24sIGltcGxlbWVudGVkIGFzIGRlZmluZWQgaW4gdGhlCiAgICBHYXRpbmdNTCAyLjAgc3BlY2lmaWNhdGlvbjoKCiAgICBsb2dpY2xlKHgsIFQsIFcsIE0sIEEpID0gcm9vdChCKHksIFQsIFcsIE0sIEEpIOKIkiB4KQoKICAgIHdoZXJlIEIgaXMgYSBtb2RpZmllZCBiaS1leHBvbmVudGlhbCBmdW5jdGlvbiBkZWZpbmVkIGFzOgoKICAgIEIoeSwgVCwgVywgTSwgQSkgPSBhZV4oYnkpIOKIkiBjZV4o4oiSZHkpIOKIkiBmCgogICAgVGhlIExvZ2ljbGUgdHJhbnNmb3JtYXRpb24gd2FzIG9yaWdpbmFsbHkgZGVmaW5lZCBpbiB0aGUgcHVibGljYXRpb246CgogICAgICAgIE1vb3JlIFdBIGFuZCBQYXJrcyBEUi4gVXBkYXRlIGZvciB0aGUgbG9naWNsZSBkYXRhIHNjYWxlIGluY2x1ZGluZyBvcGVyYXRpb25hbAogICAgICAgIGNvZGUgaW1wbGVtZW50YXRpb25zLiBDeXRvbWV0cnkgQS4sIDIwMTI6ODFBKDQpOjI3M+KAkzI3Ny4KCiAgICA6cGFyYW0gZGF0YTogTnVtUHkgYXJyYXkgb2YgRkNTIGV2ZW50IGRhdGEKICAgIDpwYXJhbSBjaGFubmVsX2luZGljZXM6IGNoYW5uZWwgaW5kaWNlcyB0byB0cmFuc2Zvcm0gKG90aGVyIGNoYW5uZWxzIHJldHVybmVkIGluIHBsYWNlLCB1bnRyYW5zZm9ybWVkKQogICAgOnBhcmFtIHQ6IHBhcmFtZXRlciBmb3IgdGhlIHRvcCBvZiB0aGUgbGluZWFyIHNjYWxlIChlLmcuIDI2MjE0NCkKICAgIDpwYXJhbSBtOiBwYXJhbWV0ZXIgZm9yIHRoZSBudW1iZXIgb2YgZGVjYWRlcyB0aGUgdHJ1ZSBsb2dhcml0aG1pYyBzY2FsZQogICAgICAgIGFwcHJvYWNoZXMgYXQgdGhlIGhpZ2ggZW5kIG9mIHRoZSBzY2FsZQogICAgOnBhcmFtIHc6IHBhcmFtZXRlciBmb3IgdGhlIGFwcHJveGltYXRlIG51bWJlciBvZiBkZWNhZGVzIGluIHRoZSBsaW5lYXIgcmVnaW9uCiAgICA6cGFyYW0gYTogcGFyYW1ldGVyIGZvciB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgbmVnYXRpdmUgZGVjYWRlcwoKICAgIDpyZXR1cm46IE51bVB5IGFycmF5IG9mIHRyYW5zZm9ybWVkIGV2ZW50cwogICAgIiIiCiAgICBkYXRhX2NvcHkgPSBkYXRhLmNvcHkoKQoKICAgICMgcnVuIGxvZ2ljbGUgc2NhbGUgZm9yIGVhY2ggY2hhbm5lbCBzZXBhcmF0ZWx5CiAgICBmb3IgaSBpbiBjaGFubmVsX2luZGljZXM6CiAgICAgICAgdG1wID0gX2xvZ2ljbGUoZGF0YV9jb3B5WzosIGldLlQsIHQsIG0sIHcsIGEpCiAgICAgICAgZGF0YV9jb3B5LlRbaV0gPSB0bXAKICAgIHJldHVybiBkYXRhX2NvcHkKCgpkZWYgbG9naWNsZV9pbnZlcnNlKAogICAgICAgIGRhdGEsCiAgICAgICAgY2hhbm5lbF9pbmRpY2VzLAogICAgICAgIHQ9MjYyMTQ0LAogICAgICAgIG09NC41LAogICAgICAgIHc9MC41LAogICAgICAgIGE9MAopOgogICAgIiIiCiAgICBJbnZlcnNlIG9mIHRoZSBMb2dpY2xlIHRyYW5zZm9ybWF0aW9uIChzZWUgYGxvZ2ljbGUoKWAgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzKQoKICAgIDpwYXJhbSBkYXRhOiBOdW1QeSBhcnJheSBvZiBGQ1MgZXZlbnQgZGF0YQogICAgOnBhcmFtIGNoYW5uZWxfaW5kaWNlczogY2hhbm5lbCBpbmRpY2VzIHRvIHRyYW5zZm9ybSAob3RoZXIgY2hhbm5lbHMgcmV0dXJuZWQgaW4gcGxhY2UsIHVudHJhbnNmb3JtZWQpCiAgICA6cGFyYW0gdDogcGFyYW1ldGVyIGZvciB0aGUgdG9wIG9mIHRoZSBsaW5lYXIgc2NhbGUgKGUuZy4gMjYyMTQ0KQogICAgOnBhcmFtIG06IHBhcmFtZXRlciBmb3IgdGhlIG51bWJlciBvZiBkZWNhZGVzIHRoZSB0cnVlIGxvZ2FyaXRobWljIHNjYWxlCiAgICAgICAgYXBwcm9hY2hlcyBhdCB0aGUgaGlnaCBlbmQgb2YgdGhlIHNjYWxlCiAgICA6cGFyYW0gdzogcGFyYW1ldGVyIGZvciB0aGUgYXBwcm94aW1hdGUgbnVtYmVyIG9mIGRlY2FkZXMgaW4gdGhlIGxpbmVhciByZWdpb24KICAgIDpwYXJhbSBhOiBwYXJhbWV0ZXIgZm9yIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBuZWdhdGl2ZSBkZWNhZGVzCgogICAgOnJldHVybjogTnVtUHkgYXJyYXkgb2YgdHJhbnNmb3JtZWQgZXZlbnRzCiAgICAiIiIKICAgIGRhdGFfY29weSA9IGRhdGEuY29weSgpCgogICAgIyBydW4gbG9naWNsZSBzY2FsZSBmb3IgZWFjaCBjaGFubmVsIHNlcGFyYXRlbHkKICAgIGZvciBpIGluIGNoYW5uZWxfaW5kaWNlczoKICAgICAgICB0bXAgPSBfbG9naWNsZV9pbnZlcnNlKGRhdGFfY29weVs6LCBpXS5ULCB0LCBtLCB3LCBhKQogICAgICAgIGRhdGFfY29weS5UW2ldID0gdG1wCiAgICByZXR1cm4gZGF0YV9jb3B5CgoKZGVmIF9oeXBlcmxvZyh5LCB0PTI2MjE0NCwgbT00LjUsIHc9MC41LCBhPTApOgogICAgeSA9IG5wLmFycmF5KHksIGR0eXBlPSdkb3VibGUnKQoKICAgICMgbm9pbnNwZWN0aW9uIFB5VW5yZXNvbHZlZFJlZmVyZW5jZXMKICAgIGxvZ2ljbGVfYy5oeXBlcmxvZ19zY2FsZSh0LCB3LCBtLCBhLCB5KQogICAgcmV0dXJuIHkKCgpkZWYgaHlwZXJsb2coCiAgICAgICAgZGF0YSwKICAgICAgICBjaGFubmVsX2luZGljZXMsCiAgICAgICAgdD0yNjIxNDQsCiAgICAgICAgbT00LjUsCiAgICAgICAgdz0wLjUsCiAgICAgICAgYT0wLAopOgogICAgIiIiCiAgICBIeXBlcmxvZyB0cmFuc2Zvcm1hdGlvbiwgaW1wbGVtZW50ZWQgYXMgZGVmaW5lZCBpbiB0aGUKICAgIEdhdGluZ01MIDIuMCBzcGVjaWZpY2F0aW9uOgoKICAgIGh5cGVybG9nKHgsIFQsIFcsIE0sIEEpID0gcm9vdChFSCh5LCBULCBXLCBNLCBBKSDiiJIgeCkKCiAgICB3aGVyZSBFSCBpcyBkZWZpbmVkIGFzOgoKICAgIEVIKHksIFQsIFcsIE0sIEEpID0gYWVeKGJ5KSArIGN5IOKIkiBmCgogICAgVGhlIEh5cGVybG9nIHRyYW5zZm9ybWF0aW9uIHdhcyBvcmlnaW5hbGx5IGRlZmluZWQgaW4gdGhlIHB1YmxpY2F0aW9uOgoKICAgICAgICBCYWd3ZWxsIENCLiBIeXBlcmxvZy1hIGZsZXhpYmxlIGxvZy1saWtlIHRyYW5zZm9ybSBmb3IgbmVnYXRpdmUsIHplcm8sIGFuZAogICAgICAgIHBvc2l0aXZlIHZhbHVlZCBkYXRhLiBDeXRvbWV0cnkgQS4sIDIwMDU6NjQoMSk6MzTigJM0Mi4KCiAgICA6cGFyYW0gZGF0YTogTnVtUHkgYXJyYXkgb2YgRkNTIGV2ZW50IGRhdGEKICAgIDpwYXJhbSBjaGFubmVsX2luZGljZXM6IGNoYW5uZWwgaW5kaWNlcyB0byB0cmFuc2Zvcm0gKG90aGVyIGNoYW5uZWxzIHJldHVybmVkIGluIHBsYWNlLCB1bnRyYW5zZm9ybWVkKQogICAgOnBhcmFtIHQ6IHBhcmFtZXRlciBmb3IgdGhlIHRvcCBvZiB0aGUgbGluZWFyIHNjYWxlIChlLmcuIDI2MjE0NCkKICAgIDpwYXJhbSBtOiBwYXJhbWV0ZXIgZm9yIGRlc2lyZWQgbnVtYmVyIG9mIGRlY2FkZXMKICAgIDpwYXJhbSB3OiBwYXJhbWV0ZXIgZm9yIHRoZSBhcHByb3hpbWF0ZSBudW1iZXIgb2YgZGVjYWRlcyBpbiB0aGUgbGluZWFyIHJlZ2lvbgogICAgOnBhcmFtIGE6IHBhcmFtZXRlciBmb3IgdGhlIGFkZGl0aW9uYWwgbnVtYmVyIG9mIG5lZ2F0aXZlIGRlY2FkZXMKCiAgICA6cmV0dXJuOiBOdW1QeSBhcnJheSBvZiB0cmFuc2Zvcm1lZCBldmVudHMKICAgICIiIgogICAgZGF0YV9jb3B5ID0gZGF0YS5jb3B5KCkKCiAgICAjIHJ1biBoeXBlcmxvZyBzY2FsZSBmb3IgZWFjaCBjaGFubmVsIHNlcGFyYXRlbHkKICAgIGZvciBpIGluIGNoYW5uZWxfaW5kaWNlczoKICAgICAgICB0bXAgPSBfaHlwZXJsb2coZGF0YV9jb3B5WzosIGldLlQsIHQsIG0sIHcsIGEpCiAgICAgICAgZGF0YV9jb3B5LlRbaV0gPSB0bXAKICAgIHJldHVybiBkYXRhX2NvcHkKCgpkZWYgX2h5cGVybG9nX2ludmVyc2UoeSwgdD0yNjIxNDQsIG09NC41LCB3PTAuNSwgYT0wKToKICAgIHkgPSBucC5hcnJheSh5LCBkdHlwZT0nZG91YmxlJykKCiAgICAjIG5vaW5zcGVjdGlvbiBQeVVucmVzb2x2ZWRSZWZlcmVuY2VzCiAgICBsb2dpY2xlX2MuaHlwZXJsb2dfaW52ZXJzZSh0LCB3LCBtLCBhLCB5KQogICAgcmV0dXJuIHkKCgpkZWYgaHlwZXJsb2dfaW52ZXJzZSgKICAgICAgICBkYXRhLAogICAgICAgIGNoYW5uZWxfaW5kaWNlcywKICAgICAgICB0PTI2MjE0NCwKICAgICAgICBtPTQuNSwKICAgICAgICB3PTAuNSwKICAgICAgICBhPTAsCik6CiAgICAiIiIKICAgIEludmVyc2Ugb2YgdGhlIEh5cGVybG9nIHRyYW5zZm9ybWF0aW9uLCBpbXBsZW1lbnRlZCBhcyBkZWZpbmVkIGluIHRoZQogICAgR2F0aW5nTUwgMi4wIHNwZWNpZmljYXRpb24gKHNlZSBoeXBlcmxvZygpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscykuCgogICAgOnBhcmFtIGRhdGE6IE51bVB5IGFycmF5IG9mIEZDUyBldmVudCBkYXRhCiAgICA6cGFyYW0gY2hhbm5lbF9pbmRpY2VzOiBjaGFubmVsIGluZGljZXMgdG8gdHJhbnNmb3JtIChvdGhlciBjaGFubmVscyByZXR1cm5lZCBpbiBwbGFjZSwgdW50cmFuc2Zvcm1lZCkKICAgIDpwYXJhbSB0OiBwYXJhbWV0ZXIgZm9yIHRoZSB0b3Agb2YgdGhlIGxpbmVhciBzY2FsZSAoZS5nLiAyNjIxNDQpCiAgICA6cGFyYW0gbTogcGFyYW1ldGVyIGZvciBkZXNpcmVkIG51bWJlciBvZiBkZWNhZGVzCiAgICA6cGFyYW0gdzogcGFyYW1ldGVyIGZvciB0aGUgYXBwcm94aW1hdGUgbnVtYmVyIG9mIGRlY2FkZXMgaW4gdGhlIGxpbmVhciByZWdpb24KICAgIDpwYXJhbSBhOiBwYXJhbWV0ZXIgZm9yIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBuZWdhdGl2ZSBkZWNhZGVzCgogICAgOnJldHVybjogTnVtUHkgYXJyYXkgb2YgdHJhbnNmb3JtZWQgZXZlbnRzCiAgICAiIiIKICAgIGRhdGFfY29weSA9IGRhdGEuY29weSgpCgogICAgIyBydW4gaHlwZXJsb2cgc2NhbGUgZm9yIGVhY2ggY2hhbm5lbCBzZXBhcmF0ZWx5CiAgICBmb3IgaSBpbiBjaGFubmVsX2luZGljZXM6CiAgICAgICAgdG1wID0gX2h5cGVybG9nX2ludmVyc2UoZGF0YV9jb3B5WzosIGldLlQsIHQsIG0sIHcsIGEpCiAgICAgICAgZGF0YV9jb3B5LlRbaV0gPSB0bXAKICAgIHJldHVybiBkYXRhX2NvcHkKCgpkZWYgYXNpbmgoZGF0YSwgY2hhbm5lbF9pbmRpY2VzLCB0LCBtLCBhKToKICAgICIiIgogICAgQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHBhcmFtZXRyaXplZCBpbnZlcnNlIGh5cGVyYm9saWMgc2luZSBmdW5jdGlvbgogICAgYXMgZGVmaW5lZCBpbiB0aGUgR2F0aW5nTUwgMi4wIHNwZWNpZmljYXRpb24uCgogICAgOnBhcmFtIGRhdGE6IE51bVB5IGFycmF5IG9mIEZDUyBldmVudCBkYXRhCiAgICA6cGFyYW0gY2hhbm5lbF9pbmRpY2VzOiBjaGFubmVsIGluZGljZXMgdG8gdHJhbnNmb3JtIChvdGhlciBjaGFubmVscyByZXR1cm5lZCBpbiBwbGFjZSwgdW50cmFuc2Zvcm1lZCkKICAgIDpwYXJhbSB0OiBwYXJhbWV0ZXIgc3BlY2lmeWluZyB0aGUgdG9wIG9mIHRoZSBzY2FsZSwgKGUuZy4gMjYyMTQ0KQogICAgOnBhcmFtIG06IHBhcmFtZXRlciBmb3IgdGhlIG51bWJlciBvZiBkZWNhZGVzCiAgICA6cGFyYW0gYTogcGFyYW1ldGVyIGZvciB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgbmVnYXRpdmUgZGVjYWRlcwoKICAgIDpyZXR1cm46IE51bVB5IGFycmF5IG9mIHRyYW5zZm9ybWVkIGV2ZW50cwogICAgIiIiCiAgICBwcmVfc2NhbGUgPSBucC5zaW5oKG0gKiBucC5sb2coMTApKSAvIHQKICAgIHRyYW5zcG9zZSA9IGEgKiBucC5sb2coMTApCiAgICBkaXZpc29yID0gKG0gKyBhKSAqIG5wLmxvZygxMCkKCiAgICBkYXRhX2NvcHkgPSBkYXRhLmNvcHkoKQoKICAgIHRtcF9kYXRhID0gKG5wLmFyY3NpbmgoZGF0YV9jb3B5WzosIGNoYW5uZWxfaW5kaWNlc10gKiBwcmVfc2NhbGUpICsgdHJhbnNwb3NlKSAvIGRpdmlzb3IKCiAgICBkYXRhX2NvcHlbOiwgY2hhbm5lbF9pbmRpY2VzXSA9IHRtcF9kYXRhCgogICAgcmV0dXJuIGRhdGFfY29weQoKCmRlZiBhc2luaF9pbnZlcnNlKGRhdGEsIGNoYW5uZWxfaW5kaWNlcywgdCwgbSwgYSk6CiAgICAiIiIKICAgIEludmVyc2Ugb2YgdGhlIHBhcmFtZXRyaXplZCBpbnZlcnNlIGh5cGVyYm9saWMgc2luZSBmdW5jdGlvbgogICAgYXMgZGVmaW5lZCBpbiB0aGUgR2F0aW5nTUwgMi4wIHNwZWNpZmljYXRpb24uCgogICAgOnBhcmFtIGRhdGE6IE51bVB5IGFycmF5IG9mIEZDUyBldmVudCBkYXRhCiAgICA6cGFyYW0gY2hhbm5lbF9pbmRpY2VzOiBjaGFubmVsIGluZGljZXMgdG8gdHJhbnNmb3JtIChvdGhlciBjaGFubmVscyByZXR1cm5lZCBpbiBwbGFjZSwgdW50cmFuc2Zvcm1lZCkKICAgIDpwYXJhbSB0OiBwYXJhbWV0ZXIgc3BlY2lmeWluZyB0aGUgdG9wIG9mIHRoZSBzY2FsZSwgKGUuZy4gMjYyMTQ0KQogICAgOnBhcmFtIG06IHBhcmFtZXRlciBmb3IgdGhlIG51bWJlciBvZiBkZWNhZGVzCiAgICA6cGFyYW0gYTogcGFyYW1ldGVyIGZvciB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgbmVnYXRpdmUgZGVjYWRlcwoKICAgIDpyZXR1cm46IE51bVB5IGFycmF5IG9mIHRyYW5zZm9ybWVkIGV2ZW50cwogICAgIiIiCiAgICBwcmVfc2NhbGUgPSBucC5zaW5oKG0gKiBucC5sb2coMTApKSAvIHQKICAgIHRyYW5zcG9zZSA9IGEgKiBucC5sb2coMTApCiAgICBkaXZpc29yID0gKG0gKyBhKSAqIG5wLmxvZygxMCkKCiAgICBkYXRhX2NvcHkgPSBkYXRhLmNvcHkoKQogICAgZGF0YV9jb3B5WzosIGNoYW5uZWxfaW5kaWNlc10gPSAobnAuc2luaCgoZGF0YV9jb3B5WzosIGNoYW5uZWxfaW5kaWNlc10gKiBkaXZpc29yKSAtIHRyYW5zcG9zZSkpIC8gcHJlX3NjYWxlCgogICAgcmV0dXJuIGRhdGFfY29weQoKCmRlZiBsb2coZGF0YSwgY2hhbm5lbF9pbmRpY2VzLCB0LCBtKToKICAgICIiIgogICAgUGFyYW1ldHJpemVkIGxvZ2FyaXRobWljIHRyYW5zZm9ybWF0aW9uLCBpbXBsZW1lbnRlZCBhcyBkZWZpbmVkIGluIHRoZQogICAgR2F0aW5nTUwgMi4wIHNwZWNpZmljYXRpb246CgogICAgZmxvZyh4LCBULCBNKSA9ICgxIC8gTSkgKiBsb2dfMTAoeCAvIFQpICsgMQoKICAgIDpwYXJhbSBkYXRhOiBOdW1QeSBhcnJheSBvZiBGQ1MgZXZlbnQgZGF0YQogICAgOnBhcmFtIGNoYW5uZWxfaW5kaWNlczogY2hhbm5lbCBpbmRpY2VzIHRvIHRyYW5zZm9ybSAob3RoZXIgY2hhbm5lbHMgcmV0dXJuZWQgaW4gcGxhY2UsIHVudHJhbnNmb3JtZWQpCiAgICA6cGFyYW0gdDogcGFyYW1ldGVyIGZvciB0aGUgdG9wIG9mIHRoZSBsaW5lYXIgc2NhbGUgKGUuZy4gMjYyMTQ0KQogICAgOnBhcmFtIG06IHBhcmFtZXRlciBmb3IgZGVzaXJlZCBudW1iZXIgb2YgZGVjYWRlcwoKICAgIDpyZXR1cm46IE51bVB5IGFycmF5IG9mIHRyYW5zZm9ybWVkIGV2ZW50cwogICAgIiIiCiAgICBkYXRhX2NvcHkgPSBkYXRhLmNvcHkoKQogICAgZGF0YV9jb3B5WzosIGNoYW5uZWxfaW5kaWNlc10gPSAoMS4gLyBtKSAqIG5wLmxvZzEwKGRhdGFfY29weVs6LCBjaGFubmVsX2luZGljZXNdIC8gdCkgKyAxLgoKICAgIHJldHVybiBkYXRhX2NvcHkKCgo8fGZpbV9ob2xlfD4KICAgIDpwYXJhbSBkYXRhOiBOdW1QeSBhcnJheSBvZiBGQ1MgZXZlbnQgZGF0YQogICAgOnBhcmFtIGNoYW5uZWxfaW5kaWNlczogY2hhbm5lbCBpbmRpY2VzIHRvIHRyYW5zZm9ybSAob3RoZXIgY2hhbm5lbHMgcmV0dXJuZWQgaW4gcGxhY2UsIHVudHJhbnNmb3JtZWQpCiAgICA6cGFyYW0gdDogcGFyYW1ldGVyIGZvciB0aGUgdG9wIG9mIHRoZSBsaW5lYXIgc2NhbGUgKGUuZy4gMjYyMTQ0KQogICAgOnBhcmFtIG06IHBhcmFtZXRlciBmb3IgZGVzaXJlZCBudW1iZXIgb2YgZGVjYWRlcwoKICAgIDpyZXR1cm46IE51bVB5IGFycmF5IG9mIHRyYW5zZm9ybWVkIGV2ZW50cwogICAgIiIiCiAgICBkYXRhX2NvcHkgPSBkYXRhLmNvcHkoKQogICAgZGF0YV9jb3B5WzosIGNoYW5uZWxfaW5kaWNlc10gPSB0ICogKDEwICoqICgoZGF0YV9jb3B5WzosIGNoYW5uZWxfaW5kaWNlc10gLSAxKSAqIG0pKQoKICAgIHJldHVybiBkYXRhX2NvcHkKPHxmaW1fc3VmZml4fD4KZGVmIGxvZ19pbnZlcnNlKGRhdGEsIGNoYW5uZWxfaW5kaWNlcywgdCwgbSk6CiAgICAiIiIKICAgIEludmVyc2Ugb2YgbG9nYXJpdGhtaWMgdHJhbnNmb3JtYXRpb24KCjx8ZmltX2VuZHw+"]
["01f84bf09c6a4e5d183fd2a19454138f21996967-2","01f84bf09c6a4e5d183fd2a19454138f21996967","PHxmaW1fcHJlZml4fD4KIiIiClZhcmlvdXMgdHJhbnNmb3JtcyBmb3IgRkNTIGRhdGEKIiIiCgppbXBvcnQgbnVtcHkgYXMgbnAKCiMgbm9pbnNwZWN0aW9uIFB5VW5yZXNvbHZlZFJlZmVyZW5jZXMKZnJvbSAuIGltcG9ydCBsb2dpY2xlX2MKCgpkZWYgX2xvZ2ljbGUoeSwgdD0yNjIxNDQsIG09NC41LCB3PTAuNSwgYT0wKToKICAgIHkgPSBucC5hcnJheSh5LCBkdHlwZT0nZG91YmxlJykKCiAgICAjIG5vaW5zcGVjdGlvbiBQeVVucmVzb2x2ZWRSZWZlcmVuY2VzCiAgICBsb2dpY2xlX2MubG9naWNsZV9zY2FsZSh0LCB3LCBtLCBhLCB5KQogICAgcmV0dXJuIHkKCgpkZWYgX2xvZ2ljbGVfaW52ZXJzZSh5LCB0PTI2MjE0NCwgbT00LjUsIHc9MC41LCBhPTApOgogICAgeSA9IG5wLmFycmF5KHksIGR0eXBlPSdkb3VibGUnKQoKICAgICMgbm9pbnNwZWN0aW9uIFB5VW5yZXNvbHZlZFJlZmVyZW5jZXMKICAgIGxvZ2ljbGVfYy5sb2dpY2xlX2ludmVyc2UodCwgdywgbSwgYSwgeSkKICAgIHJldHVybiB5CgoKZGVmIGxvZ2ljbGUoCiAgICAgICAgZGF0YSwKICAgICAgICBjaGFubmVsX2luZGljZXMsCiAgICAgICAgdD0yNjIxNDQsCiAgICAgICAgbT00LjUsCiAgICAgICAgdz0wLjUsCiAgICAgICAgYT0wCik6CiAgICAiIiIKICAgIExvZ2ljbGUgdHJhbnNmb3JtYXRpb24sIGltcGxlbWVudGVkIGFzIGRlZmluZWQgaW4gdGhlCiAgICBHYXRpbmdNTCAyLjAgc3BlY2lmaWNhdGlvbjoKCiAgICBsb2dpY2xlKHgsIFQsIFcsIE0sIEEpID0gcm9vdChCKHksIFQsIFcsIE0sIEEpIOKIkiB4KQoKICAgIHdoZXJlIEIgaXMgYSBtb2RpZmllZCBiaS1leHBvbmVudGlhbCBmdW5jdGlvbiBkZWZpbmVkIGFzOgoKICAgIEIoeSwgVCwgVywgTSwgQSkgPSBhZV4oYnkpIOKIkiBjZV4o4oiSZHkpIOKIkiBmCgogICAgVGhlIExvZ2ljbGUgdHJhbnNmb3JtYXRpb24gd2FzIG9yaWdpbmFsbHkgZGVmaW5lZCBpbiB0aGUgcHVibGljYXRpb246Cgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgTW9vcmUgV0EgYW5kIFBhcmtzIERSLiBVcGRhdGUgZm9yIHRoZSBsb2dpY2xlIGRhdGEgc2NhbGUgaW5jbHVkaW5nIG9wZXJhdGlvbmFsCiAgICAgICAgY29kZSBpbXBsZW1lbnRhdGlvbnMuIEN5dG9tZXRyeSBBLiwgMjAxMjo4MUEoNCk6Mjcz4oCTMjc3LgoKPHxmaW1fZW5kfD4="]
["01f84bf09c6a4e5d183fd2a19454138f21996967-3","01f84bf09c6a4e5d183fd2a19454138f21996967","PHxmaW1fcHJlZml4fD4KIiIiClZhcmlvdXMgdHJhbnNmb3JtcyBmb3IgRkNTIGRhdGEKIiIiCgppbXBvcnQgbnVtcHkgYXMgbnAKCiMgbm9pbnNwZWN0aW9uIFB5VW5yZXNvbHZlZFJlZmVyZW5jZXMKZnJvbSAuIGltcG9ydCBsb2dpY2xlX2MKCgpkZWYgX2xvZ2ljbGUoeSwgdD0yNjIxNDQsIG09NC41LCB3PTAuNSwgYT0wKToKICAgIHkgPSBucC5hcnJheSh5LCBkdHlwZT0nZG91YmxlJykKCiAgICAjIG5vaW5zcGVjdGlvbiBQeVVucmVzb2x2ZWRSZWZlcmVuY2VzCiAgICBsb2dpY2xlX2MubG9naWNsZV9zY2FsZSh0LCB3LCBtLCBhLCB5KQogICAgcmV0dXJuIHkKCgpkZWYgX2xvZ2ljbGVfaW52ZXJzZSh5LCB0PTI2MjE0NCwgbT00LjUsIHc9MC41LCBhPTApOgogICAgeSA9IG5wLmFycmF5KHksIGR0eXBlPSdkb3VibGUnKQoKICAgICMgbm9pbnNwZWN0aW9uIFB5VW5yZXNvbHZlZFJlZmVyZW5jZXMKICAgIGxvZ2ljbGVfYy5sb2dpY2xlX2ludmVyc2UodCwgdywgbSwgYSwgeSkKICAgIHJldHVybiB5CgoKZGVmIGxvZ2ljbGUoCiAgICAgICAgZGF0YSwKICAgICAgICBjaGFubmVsX2luZGljZXMsCiAgICAgICAgdD0yNjIxNDQsCiAgICAgICAgbT00LjUsCiAgICAgICAgdz0wLjUsCiAgICAgICAgYT0wCik6CiAgICAiIiIKICAgIExvZ2ljbGUgdHJhbnNmb3JtYXRpb24sIGltcGxlbWVudGVkIGFzIGRlZmluZWQgaW4gdGhlCiAgICBHYXRpbmdNTCAyLjAgc3BlY2lmaWNhdGlvbjoKCiAgICBsb2dpY2xlKHgsIFQsIFcsIE0sIEEpID0gcm9vdChCKHksIFQsIFcsIE0sIEEpIOKIkiB4KQoKICAgIHdoZXJlIEIgaXMgYSBtb2RpZmllZCBiaS1leHBvbmVudGlhbCBmdW5jdGlvbiBkZWZpbmVkIGFzOgoKICAgIEIoeSwgVCwgVywgTSwgQSkgPSBhZV4oYnkpIOKIkiBjZV4o4oiSZHkpIOKIkiBmCgogICAgVGhlIExvZ2ljbGUgdHJhbnNmb3JtYXRpb24gd2FzIG9yaWdpbmFsbHkgZGVmaW5lZCBpbiB0aGUgcHVibGljYXRpb246CgogICAgICAgIE1vb3JlIFdBIGFuZCBQYXJrcyBEUi4gVXBkYXRlIGZvciB0aGUgbG9naWNsZSBkYXRhIHNjYWxlIGluY2x1ZGluZyBvcGVyYXRpb25hbAogICAgICAgIGNvZGUgaW1wbGVtZW50YXRpb25zLiBDeXRvbWV0cnkgQS4sIDIwMTI6ODFBKDQpOjI3M+KAkzI3Ny4KCiAgICA6cGFyYW0gZGF0YTogTnVtUHkgYXJyYXkgb2YgRkNTIGV2ZW50IGRhdGEKICAgIDpwYXJhbSBjaGFubmVsX2luZGljZXM6IGNoYW5uZWwgaW5kaWNlcyB0byB0cmFuc2Zvcm0gKG90aGVyIGNoYW5uZWxzIHJldHVybmVkIGluIHBsYWNlLCB1bnRyYW5zZm9ybWVkKQogICAgOnBhcmFtIHQ6IHBhcmFtZXRlciBmb3IgdGhlIHRvcCBvZiB0aGUgbGluZWFyIHNjYWxlIChlLmcuIDI2MjE0NCkKICAgIDpwYXJhbSBtOiBwYXJhbWV0ZXIgZm9yIHRoZSBudW1iZXIgb2YgZGVjYWRlcyB0aGUgdHJ1ZSBsb2dhcml0aG1pYyBzY2FsZQogICAgICAgIGFwcHJvYWNoZXMgYXQgdGhlIGhpZ2ggZW5kIG9mIHRoZSBzY2FsZQogICAgOnBhcmFtIHc6IHBhcmFtZXRlciBmb3IgdGhlIGFwcHJveGltYXRlIG51bWJlciBvZiBkZWNhZGVzIGluIHRoZSBsaW5lYXIgcmVnaW9uCiAgICA6cGFyYW0gYTogcGFyYW1ldGVyIGZvciB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgbmVnYXRpdmUgZGVjYWRlcwoKICAgIDpyZXR1cm46IE51bVB5IGFycmF5IG9mIHRyYW5zZm9ybWVkIGV2ZW50cwogICAgIiIiCiAgICBkYXRhX2NvcHkgPSBkYXRhLmNvcHkoKQoKICAgICMgcnVuIGxvZ2ljbGUgc2NhbGUgZm9yIGVhY2ggY2hhbm5lbCBzZXBhcmF0ZWx5CiAgICBmb3IgaSBpbiBjaGFubmVsX2luZGljZXM6CiAgICAgICAgdG1wID0gX2xvZ2ljbGUoZGF0YV9jb3B5WzosIGldLlQsIHQsIG0sIHcsIGEpCiAgICAgICAgZGF0YV9jb3B5LlRbaV0gPSB0bXAKICAgIHJldHVybiBkYXRhX2NvcHkKCgpkZWYgbG9naWNsZV9pbnZlcnNlKAogICAgICAgIGRhdGEsCiAgICAgICAgY2hhbm5lbF9pbmRpY2VzLAogICAgICAgIHQ9MjYyMTQ0LAogICAgICAgIG09NC41LAogICAgICAgIHc9MC41LAogICAgICAgIGE9MAopOgogICAgIiIiCiAgICBJbnZlcnNlIG9mIHRoZSBMb2dpY2xlIHRyYW5zZm9ybWF0aW9uIChzZWUgYGxvZ2ljbGUoKWAgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzKQoKICAgIDpwYXJhbSBkYXRhOiBOdW1QeSBhcnJheSBvZiBGQ1MgZXZlbnQgZGF0YQogICAgOnBhcmFtIGNoYW5uZWxfaW5kaWNlczogY2hhbm5lbCBpbmRpY2VzIHRvIHRyYW5zZm9ybSAob3RoZXIgY2hhbm5lbHMgcmV0dXJuZWQgaW4gcGxhY2UsIHVudHJhbnNmb3JtZWQpCiAgICA6cGFyYW0gdDogcGFyYW1ldGVyIGZvciB0aGUgdG9wIG9mIHRoZSBsaW5lYXIgc2NhbGUgKGUuZy4gMjYyMTQ0KQogICAgOnBhcmFtIG06IHBhcmFtZXRlciBmb3IgdGhlIG51bWJlciBvZiBkZWNhZGVzIHRoZSB0cnVlIGxvZ2FyaXRobWljIHNjYWxlCiAgICAgICAgYXBwcm9hY2hlcyBhdCB0aGUgaGlnaCBlbmQgb2YgdGhlIHNjYWxlCiAgICA6cGFyYW0gdzogcGFyYW1ldGVyIGZvciB0aGUgYXBwcm94aW1hdGUgbnVtYmVyIG9mIGRlY2FkZXMgaW4gdGhlIGxpbmVhciByZWdpb24KICAgIDpwYXJhbSBhOiBwYXJhbWV0ZXIgZm9yIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBuZWdhdGl2ZSBkZWNhZGVzCgogICAgOnJldHVybjogTnVtUHkgYXJyYXkgb2YgdHJhbnNmb3JtZWQgZXZlbnRzCiAgICAiIiIKICAgIGRhdGFfY29weSA9IGRhdGEuY29weSgpCgogICAgIyBydW4gbG9naWNsZSBzY2FsZSBmb3IgZWFjaCBjaGFubmVsIHNlcGFyYXRlbHkKICAgIGZvciBpIGluIGNoYW5uZWxfaW5kaWNlczoKICAgICAgICB0bXAgPSBfbG9naWNsZV9pbnZlcnNlKGRhdGFfY29weVs6LCBpXS5ULCB0LCBtLCB3LCBhKQogICAgICAgIGRhdGFfY29weS5UW2ldID0gdG1wCiAgICByZXR1cm4gZGF0YV9jb3B5CgoKZGVmIF9oeXBlcmxvZyh5LCB0PTI2MjE0NCwgbT00LjUsIHc9MC41LCBhPTApOgogICAgeSA9IG5wLmFycmF5KHksIGR0eXBlPSdkb3VibGUnKQoKICAgICMgbm9pbnNwZWN0aW9uIFB5VW5yZXNvbHZlZFJlZmVyZW5jZXMKICAgIGxvZ2ljbGVfYy5oeXBlcmxvZ19zY2FsZSh0LCB3LCBtLCBhLCB5KQogICAgcmV0dXJuIHkKCgpkZWYgaHlwZXJsb2coCiAgICAgICAgZGF0YSwKICAgICAgICBjaGFubmVsX2luZGljZXMsCiAgICAgICAgdD0yNjIxNDQsCiAgICAgICAgbT00LjUsCiAgICAgICAgdz0wLjUsCiAgICAgICAgYT0wLAopOgogICAgIiIiCiAgICBIeXBlcmxvZyB0cmFuc2Zvcm1hdGlvbiwgaW1wbGVtZW50ZWQgYXMgZGVmaW5lZCBpbiB0aGUKICAgIEdhdGluZ01MIDIuMCBzcGVjaWZpY2F0aW9uOgoKICAgIGh5cGVybG9nKHgsIFQsIFcsIE0sIEEpID0gcm9vdChFSCh5LCBULCBXLCBNLCBBKSDiiJIgeCkKCiAgICB3aGVyZSBFSCBpcyBkZWZpbmVkIGFzOgoKICAgIEVIKHksIFQsIFcsIE0sIEEpID0gYWVeKGJ5KSArIGN5IOKIkiBmCgogICAgVGhlIEh5cGVybG9nIHRyYW5zZm9ybWF0aW9uIHdhcyBvcmlnaW5hbGx5IGRlZmluZWQgaW4gdGhlIHB1YmxpY2F0aW9uOgoKICAgICAgICBCYWd3ZWxsIENCLiBIeXBlcmxvZy1hIGZsZXhpYmxlIGxvZy1saWtlIHRyYW5zZm9ybSBmb3IgbmVnYXRpdmUsIHplcm8sIGFuZAogICAgICAgIHBvc2l0aXZlIHZhbHVlZCBkYXRhLiBDeXRvbWV0cnkgQS4sIDIwMDU6NjQoMSk6MzTigJM0Mi4KCiAgICA6cGFyYW0gZGF0YTogTnVtUHkgYXJyYXkgb2YgRkNTIGV2ZW50IGRhdGEKICAgIDpwYXJhbSBjaGFubmVsX2luZGljZXM6IGNoYW5uZWwgaW5kaWNlcyB0byB0cmFuc2Zvcm0gKG90aGVyIGNoYW5uZWxzIHJldHVybmVkIGluIHBsYWNlLCB1bnRyYW5zZm9ybWVkKQogICAgOnBhcmFtIHQ6IHBhcmFtZXRlciBmb3IgdGhlIHRvcCBvZiB0aGUgbGluZWFyIHNjYWxlIChlLmcuIDI2MjE0NCkKICAgIDpwYXJhbSBtOiBwYXJhbWV0ZXIgZm9yIGRlc2lyZWQgbnVtYmVyIG9mIGRlY2FkZXMKICAgIDpwYXJhbSB3OiBwYXJhbWV0ZXIgZm9yIHRoZSBhcHByb3hpbWF0ZSBudW1iZXIgb2YgZGVjYWRlcyBpbiB0aGUgbGluZWFyIHJlZ2lvbgogICAgOnBhcmFtIGE6IHBhcmFtZXRlciBmb3IgdGhlIGFkZGl0aW9uYWwgbnVtYmVyIG9mIG5lZ2F0aXZlIGRlY2FkZXMKCiAgICA6cmV0dXJuOiBOdW1QeSBhcnJheSBvZiB0cmFuc2Zvcm1lZCBldmVudHMKICAgICIiIgogICAgZGF0YV9jb3B5ID0gZGF0YS5jb3B5KCkKCiAgICAjIHJ1biBoeXBlcmxvZyBzY2FsZSBmb3IgZWFjaCBjaGFubmVsIHNlcGFyYXRlbHkKICAgIGZvciBpIGluIGNoYW5uZWxfaW5kaWNlczoKICAgICAgICB0bXAgPSBfaHlwZXJsb2coZGF0YV9jb3B5WzosIGldLlQsIHQsIG0sIHcsIGEpCiAgICAgICAgZGF0YV9jb3B5LlRbaV0gPSB0bXAKICAgIHJldHVybiBkYXRhX2NvcHkKCgpkZWYgX2h5cGVybG9nX2ludmVyc2UoeSwgdD0yNjIxNDQsIG09NC41LCB3PTAuNSwgYT0wKToKICAgIHkgPSBucC5hcnJheSh5LCBkdHlwZT0nZG91YmxlJykKCiAgICAjIG5vaW5zcGVjdGlvbiBQeVVucmVzb2x2ZWRSZWZlcmVuY2VzCiAgICBsb2dpY2xlX2MuaHlwZXJsb2dfaW52ZXJzZSh0LCB3LCBtLCBhLCB5KQogICAgcmV0dXJuIHkKCgpkZWYgaHlwZXJsb2dfaW52ZXJzZSgKICAgICAgICBkYXRhLAogICAgICAgIGNoYW5uZWxfaW5kaWNlcywKICAgICAgICB0PTI2MjE0NCwKICAgICAgICBtPTQuNSwKICAgICAgICB3PTAuNSwKICAgICAgICBhPTAsCjx8ZmltX2hvbGV8PgoKICAgIDpwYXJhbSBkYXRhOiBOdW1QeSBhcnJheSBvZiBGQ1MgZXZlbnQgZGF0YQogICAgOnBhcmFtIGNoYW5uZWxfaW5kaWNlczogY2hhbm5lbCBpbmRpY2VzIHRvIHRyYW5zZm9ybSAob3RoZXIgY2hhbm5lbHMgcmV0dXJuZWQgaW4gcGxhY2UsIHVudHJhbnNmb3JtZWQpCiAgICA6cGFyYW0gdDogcGFyYW1ldGVyIGZvciB0aGUgdG9wIG9mIHRoZSBsaW5lYXIgc2NhbGUgKGUuZy4gMjYyMTQ0KQogICAgOnBhcmFtIG06IHBhcmFtZXRlciBmb3IgZGVzaXJlZCBudW1iZXIgb2YgZGVjYWRlcwogICAgOnBhcmFtIHc6IHBhcmFtZXRlciBmb3IgdGhlIGFwcHJveGltYXRlIG51bWJlciBvZiBkZWNhZGVzIGluIHRoZSBsaW5lYXIgcmVnaW9uCiAgICA6cGFyYW0gYTogcGFyYW1ldGVyIGZvciB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgbmVnYXRpdmUgZGVjYWRlcwoKICAgIDpyZXR1cm46IE51bVB5IGFycmF5IG9mIHRyYW5zZm9ybWVkIGV2ZW50cwogICAgIiIiCiAgICBkYXRhX2NvcHkgPSBkYXRhLmNvcHkoKQoKICAgICMgcnVuIGh5cGVybG9nIHNjYWxlIGZvciBlYWNoIGNoYW5uZWwgc2VwYXJhdGVseQogICAgZm9yIGkgaW4gY2hhbm5lbF9pbmRpY2VzOgogICAgICAgIHRtcCA9IF9oeXBlcmxvZ19pbnZlcnNlKGRhdGFfY29weVs6LCBpXS5ULCB0LCBtLCB3LCBhKQogICAgICAgIGRhdGFfY29weS5UW2ldID0gdG1wCiAgICByZXR1cm4gZGF0YV9jb3B5CgoKZGVmIGFzaW5oKGRhdGEsIGNoYW5uZWxfaW5kaWNlcywgdCwgbSwgYSk6CiAgICAiIiIKICAgIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwYXJhbWV0cml6ZWQgaW52ZXJzZSBoeXBlcmJvbGljIHNpbmUgZnVuY3Rpb24KICAgIGFzIGRlZmluZWQgaW4gdGhlIEdhdGluZ01MIDIuMCBzcGVjaWZpY2F0aW9uLgoKICAgIDpwYXJhbSBkYXRhOiBOdW1QeSBhcnJheSBvZiBGQ1MgZXZlbnQgZGF0YQogICAgOnBhcmFtIGNoYW5uZWxfaW5kaWNlczogY2hhbm5lbCBpbmRpY2VzIHRvIHRyYW5zZm9ybSAob3RoZXIgY2hhbm5lbHMgcmV0dXJuZWQgaW4gcGxhY2UsIHVudHJhbnNmb3JtZWQpCiAgICA6cGFyYW0gdDogcGFyYW1ldGVyIHNwZWNpZnlpbmcgdGhlIHRvcCBvZiB0aGUgc2NhbGUsIChlLmcuIDI2MjE0NCkKICAgIDpwYXJhbSBtOiBwYXJhbWV0ZXIgZm9yIHRoZSBudW1iZXIgb2YgZGVjYWRlcwogICAgOnBhcmFtIGE6IHBhcmFtZXRlciBmb3IgdGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIG5lZ2F0aXZlIGRlY2FkZXMKCiAgICA6cmV0dXJuOiBOdW1QeSBhcnJheSBvZiB0cmFuc2Zvcm1lZCBldmVudHMKICAgICIiIgogICAgcHJlX3NjYWxlID0gbnAuc2luaChtICogbnAubG9nKDEwKSkgLyB0CiAgICB0cmFuc3Bvc2UgPSBhICogbnAubG9nKDEwKQogICAgZGl2aXNvciA9IChtICsgYSkgKiBucC5sb2coMTApCgogICAgZGF0YV9jb3B5ID0gZGF0YS5jb3B5KCkKCiAgICB0bXBfZGF0YSA9IChucC5hcmNzaW5oKGRhdGFfY29weVs6LCBjaGFubmVsX2luZGljZXNdICogcHJlX3NjYWxlKSArIHRyYW5zcG9zZSkgLyBkaXZpc29yCgogICAgZGF0YV9jb3B5WzosIGNoYW5uZWxfaW5kaWNlc10gPSB0bXBfZGF0YQoKICAgIHJldHVybiBkYXRhX2NvcHkKCgpkZWYgYXNpbmhfaW52ZXJzZShkYXRhLCBjaGFubmVsX2luZGljZXMsIHQsIG0sIGEpOgogICAgIiIiCiAgICBJbnZlcnNlIG9mIHRoZSBwYXJhbWV0cml6ZWQgaW52ZXJzZSBoeXBlcmJvbGljIHNpbmUgZnVuY3Rpb24KICAgIGFzIGRlZmluZWQgaW4gdGhlIEdhdGluZ01MIDIuMCBzcGVjaWZpY2F0aW9uLgoKICAgIDpwYXJhbSBkYXRhOiBOdW1QeSBhcnJheSBvZiBGQ1MgZXZlbnQgZGF0YQogICAgOnBhcmFtIGNoYW5uZWxfaW5kaWNlczogY2hhbm5lbCBpbmRpY2VzIHRvIHRyYW5zZm9ybSAob3RoZXIgY2hhbm5lbHMgcmV0dXJuZWQgaW4gcGxhY2UsIHVudHJhbnNmb3JtZWQpCiAgICA6cGFyYW0gdDogcGFyYW1ldGVyIHNwZWNpZnlpbmcgdGhlIHRvcCBvZiB0aGUgc2NhbGUsIChlLmcuIDI2MjE0NCkKICAgIDpwYXJhbSBtOiBwYXJhbWV0ZXIgZm9yIHRoZSBudW1iZXIgb2YgZGVjYWRlcwogICAgOnBhcmFtIGE6IHBhcmFtZXRlciBmb3IgdGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIG5lZ2F0aXZlIGRlY2FkZXMKCiAgICA6cmV0dXJuOiBOdW1QeSBhcnJheSBvZiB0cmFuc2Zvcm1lZCBldmVudHMKICAgICIiIgogICAgcHJlX3NjYWxlID0gbnAuc2luaChtICogbnAubG9nKDEwKSkgLyB0CiAgICB0cmFuc3Bvc2UgPSBhICogbnAubG9nKDEwKQogICAgZGl2aXNvciA9IChtICsgYSkgKiBucC5sb2coMTApCgogICAgZGF0YV9jb3B5ID0gZGF0YS5jb3B5KCkKICAgIGRhdGFfY29weVs6LCBjaGFubmVsX2luZGljZXNdID0gKG5wLnNpbmgoKGRhdGFfY29weVs6LCBjaGFubmVsX2luZGljZXNdICogZGl2aXNvcikgLSB0cmFuc3Bvc2UpKSAvIHByZV9zY2FsZQoKICAgIHJldHVybiBkYXRhX2NvcHkKCgpkZWYgbG9nKGRhdGEsIGNoYW5uZWxfaW5kaWNlcywgdCwgbSk6CiAgICAiIiIKICAgIFBhcmFtZXRyaXplZCBsb2dhcml0aG1pYyB0cmFuc2Zvcm1hdGlvbiwgaW1wbGVtZW50ZWQgYXMgZGVmaW5lZCBpbiB0aGUKICAgIEdhdGluZ01MIDIuMCBzcGVjaWZpY2F0aW9uOgoKICAgIGZsb2coeCwgVCwgTSkgPSAoMSAvIE0pICogbG9nXzEwKHggLyBUKSArIDEKCiAgICA6cGFyYW0gZGF0YTogTnVtUHkgYXJyYXkgb2YgRkNTIGV2ZW50IGRhdGEKICAgIDpwYXJhbSBjaGFubmVsX2luZGljZXM6IGNoYW5uZWwgaW5kaWNlcyB0byB0cmFuc2Zvcm0gKG90aGVyIGNoYW5uZWxzIHJldHVybmVkIGluIHBsYWNlLCB1bnRyYW5zZm9ybWVkKQogICAgOnBhcmFtIHQ6IHBhcmFtZXRlciBmb3IgdGhlIHRvcCBvZiB0aGUgbGluZWFyIHNjYWxlIChlLmcuIDI2MjE0NCkKICAgIDpwYXJhbSBtOiBwYXJhbWV0ZXIgZm9yIGRlc2lyZWQgbnVtYmVyIG9mIGRlY2FkZXMKCiAgICA6cmV0dXJuOiBOdW1QeSBhcnJheSBvZiB0cmFuc2Zvcm1lZCBldmVudHMKICAgICIiIgogICAgZGF0YV9jb3B5ID0gZGF0YS5jb3B5KCkKICAgIGRhdGFfY29weVs6LCBjaGFubmVsX2luZGljZXNdID0gKDEuIC8gbSkgKiBucC5sb2cxMChkYXRhX2NvcHlbOiwgY2hhbm5lbF9pbmRpY2VzXSAvIHQpICsgMS4KCiAgICByZXR1cm4gZGF0YV9jb3B5CgoKZGVmIGxvZ19pbnZlcnNlKGRhdGEsIGNoYW5uZWxfaW5kaWNlcywgdCwgbSk6CiAgICAiIiIKICAgIEludmVyc2Ugb2YgbG9nYXJpdGhtaWMgdHJhbnNmb3JtYXRpb24KCiAgICA6cGFyYW0gZGF0YTogTnVtUHkgYXJyYXkgb2YgRkNTIGV2ZW50IGRhdGEKICAgIDpwYXJhbSBjaGFubmVsX2luZGljZXM6IGNoYW5uZWwgaW5kaWNlcyB0byB0cmFuc2Zvcm0gKG90aGVyIGNoYW5uZWxzIHJldHVybmVkIGluIHBsYWNlLCB1bnRyYW5zZm9ybWVkKQogICAgOnBhcmFtIHQ6IHBhcmFtZXRlciBmb3IgdGhlIHRvcCBvZiB0aGUgbGluZWFyIHNjYWxlIChlLmcuIDI2MjE0NCkKICAgIDpwYXJhbSBtOiBwYXJhbWV0ZXIgZm9yIGRlc2lyZWQgbnVtYmVyIG9mIGRlY2FkZXMKCiAgICA6cmV0dXJuOiBOdW1QeSBhcnJheSBvZiB0cmFuc2Zvcm1lZCBldmVudHMKICAgICIiIgogICAgZGF0YV9jb3B5ID0gZGF0YS5jb3B5KCkKICAgIGRhdGFfY29weVs6LCBjaGFubmVsX2luZGljZXNdID0gdCAqICgxMCAqKiAoKGRhdGFfY29weVs6LCBjaGFubmVsX2luZGljZXNdIC0gMSkgKiBtKSkKCiAgICByZXR1cm4gZGF0YV9jb3B5Cjx8ZmltX3N1ZmZpeHw+Cik6CiAgICAiIiIKICAgIEludmVyc2Ugb2YgdGhlIEh5cGVybG9nIHRyYW5zZm9ybWF0aW9uLCBpbXBsZW1lbnRlZCBhcyBkZWZpbmVkIGluIHRoZQogICAgR2F0aW5nTUwgMi4wIHNwZWNpZmljYXRpb24gKHNlZSBoeXBlcmxvZygpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscykuCjx8ZmltX2VuZHw+"]
["01f84bf09c6a4e5d183fd2a19454138f21996967-4","01f84bf09c6a4e5d183fd2a19454138f21996967","PHxmaW1fcHJlZml4fD4KIiIiClZhcmlvdXMgdHJhbnNmb3JtcyBmb3IgRkNTIGRhdGEKIiIiCgppbXBvcnQgbnVtcHkgYXMgbnAKCiMgbm9pbnNwZWN0aW9uIFB5VW5yZXNvbHZlZFJlZmVyZW5jZXMKZnJvbSAuIGltcG9ydCBsb2dpY2xlX2MKCgpkZWYgX2xvZ2ljbGUoeSwgdD0yNjIxNDQsIG09NC41LCB3PTAuNSwgYT0wKToKICAgIHkgPSBucC5hcnJheSh5LCBkdHlwZT0nZG91YmxlJykKCiAgICAjIG5vaW5zcGVjdGlvbiBQeVVucmVzb2x2ZWRSZWZlcmVuY2VzCiAgICBsb2dpY2xlX2MubG9naWNsZV9zY2FsZSh0LCB3LCBtLCBhLCB5KQogICAgcmV0dXJuIHkKCgpkZWYgX2xvZ2ljbGVfaW52ZXJzZSh5LCB0PTI2MjE0NCwgbT00LjUsIHc9MC41LCBhPTApOgogICAgeSA9IG5wLmFycmF5KHksIGR0eXBlPSdkb3VibGUnKQoKICAgICMgbm9pbnNwZWN0aW9uIFB5VW5yZXNvbHZlZFJlZmVyZW5jZXMKICAgIGxvZ2ljbGVfYy5sb2dpY2xlX2ludmVyc2UodCwgdywgbSwgYSwgeSkKICAgIHJldHVybiB5CgoKZGVmIGxvZ2ljbGUoCiAgICAgICAgZGF0YSwKICAgICAgICBjaGFubmVsX2luZGljZXMsCiAgICAgICAgdD0yNjIxNDQsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBtPTQuNSwKICAgICAgICB3PTAuNSwKICAgICAgICBhPTAKPHxmaW1fZW5kfD4="]
["01f84bf09c6a4e5d183fd2a19454138f21996967-5","01f84bf09c6a4e5d183fd2a19454138f21996967","PHxmaW1fcHJlZml4fD4KIiIiClZhcmlvdXMgdHJhbnNmb3JtcyBmb3IgRkNTIGRhdGEKIiIiCgppbXBvcnQgbnVtcHkgYXMgbnAKCiMgbm9pbnNwZWN0aW9uIFB5VW5yZXNvbHZlZFJlZmVyZW5jZXMKZnJvbSAuIGltcG9ydCBsb2dpY2xlX2MKCgpkZWYgX2xvZ2ljbGUoeSwgdD0yNjIxNDQsIG09NC41LCB3PTAuNSwgYT0wKToKICAgIHkgPSBucC5hcnJheSh5LCBkdHlwZT0nZG91YmxlJykKCiAgICAjIG5vaW5zcGVjdGlvbiBQeVVucmVzb2x2ZWRSZWZlcmVuY2VzCiAgICBsb2dpY2xlX2MubG9naWNsZV9zY2FsZSh0LCB3LCBtLCBhLCB5KQogICAgcmV0dXJuIHkKCgpkZWYgX2xvZ2ljbGVfaW52ZXJzZSh5LCB0PTI2MjE0NCwgbT00LjUsIHc9MC41LCBhPTApOgogICAgeSA9IG5wLmFycmF5KHksIGR0eXBlPSdkb3VibGUnKQoKICAgICMgbm9pbnNwZWN0aW9uIFB5VW5yZXNvbHZlZFJlZmVyZW5jZXMKICAgIGxvZ2ljbGVfYy5sb2dpY2xlX2ludmVyc2UodCwgdywgbSwgYSwgeSkKICAgIHJldHVybiB5CgoKZGVmIGxvZ2ljbGUoCiAgICAgICAgZGF0YSwKICAgICAgICBjaGFubmVsX2luZGljZXMsCiAgICAgICAgdD0yNjIxNDQsCiAgICAgICAgbT00LjUsCiAgICAgICAgdz0wLjUsCiAgICAgICAgYT0wCik6CiAgICAiIiIKICAgIExvZ2ljbGUgdHJhbnNmb3JtYXRpb24sIGltcGxlbWVudGVkIGFzIGRlZmluZWQgaW4gdGhlCiAgICBHYXRpbmdNTCAyLjAgc3BlY2lmaWNhdGlvbjoKCiAgICBsb2dpY2xlKHgsIFQsIFcsIE0sIEEpID0gcm9vdChCKHksIFQsIFcsIE0sIEEpIOKIkiB4KQoKICAgIHdoZXJlIEIgaXMgYSBtb2RpZmllZCBiaS1leHBvbmVudGlhbCBmdW5jdGlvbiBkZWZpbmVkIGFzOgoKICAgIEIoeSwgVCwgVywgTSwgQSkgPSBhZV4oYnkpIOKIkiBjZV4o4oiSZHkpIOKIkiBmCgogICAgVGhlIExvZ2ljbGUgdHJhbnNmb3JtYXRpb24gd2FzIG9yaWdpbmFsbHkgZGVmaW5lZCBpbiB0aGUgcHVibGljYXRpb246CgogICAgICAgIE1vb3JlIFdBIGFuZCBQYXJrcyBEUi4gVXBkYXRlIGZvciB0aGUgbG9naWNsZSBkYXRhIHNjYWxlIGluY2x1ZGluZyBvcGVyYXRpb25hbAogICAgICAgIGNvZGUgaW1wbGVtZW50YXRpb25zLiBDeXRvbWV0cnkgQS4sIDIwMTI6ODFBKDQpOjI3M+KAkzI3Ny4KCiAgICA6cGFyYW0gZGF0YTogTnVtUHkgYXJyYXkgb2YgRkNTIGV2ZW50IGRhdGEKICAgIDpwYXJhbSBjaGFubmVsX2luZGljZXM6IGNoYW5uZWwgaW5kaWNlcyB0byB0cmFuc2Zvcm0gKG90aGVyIGNoYW5uZWxzIHJldHVybmVkIGluIHBsYWNlLCB1bnRyYW5zZm9ybWVkKQogICAgOnBhcmFtIHQ6IHBhcmFtZXRlciBmb3IgdGhlIHRvcCBvZiB0aGUgbGluZWFyIHNjYWxlIChlLmcuIDI2MjE0NCkKICAgIDpwYXJhbSBtOiBwYXJhbWV0ZXIgZm9yIHRoZSBudW1iZXIgb2YgZGVjYWRlcyB0aGUgdHJ1ZSBsb2dhcml0aG1pYyBzY2FsZQogICAgICAgIGFwcHJvYWNoZXMgYXQgdGhlIGhpZ2ggZW5kIG9mIHRoZSBzY2FsZQogICAgOnBhcmFtIHc6IHBhcmFtZXRlciBmb3IgdGhlIGFwcHJveGltYXRlIG51bWJlciBvZiBkZWNhZGVzIGluIHRoZSBsaW5lYXIgcmVnaW9uCiAgICA6cGFyYW0gYTogcGFyYW1ldGVyIGZvciB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgbmVnYXRpdmUgZGVjYWRlcwoKICAgIDpyZXR1cm46IE51bVB5IGFycmF5IG9mIHRyYW5zZm9ybWVkIGV2ZW50cwogICAgIiIiCiAgICBkYXRhX2NvcHkgPSBkYXRhLmNvcHkoKQoKICAgICMgcnVuIGxvZ2ljbGUgc2NhbGUgZm9yIGVhY2ggY2hhbm5lbCBzZXBhcmF0ZWx5CiAgICBmb3IgaSBpbiBjaGFubmVsX2luZGljZXM6CiAgICAgICAgdG1wID0gX2xvZ2ljbGUoZGF0YV9jb3B5WzosIGldLlQsIHQsIG0sIHcsIGEpCiAgICAgICAgZGF0YV9jb3B5LlRbaV0gPSB0bXAKICAgIHJldHVybiBkYXRhX2NvcHkKCgpkZWYgbG9naWNsZV9pbnZlcnNlKAogICAgICAgIGRhdGEsCiAgICAgICAgY2hhbm5lbF9pbmRpY2VzLAogICAgICAgIHQ9MjYyMTQ0LAogICAgICAgIG09NC41LAogICAgICAgIHc9MC41LAogICAgICAgIGE9MAopOgogICAgIiIiCiAgICBJbnZlcnNlIG9mIHRoZSBMb2dpY2xlIHRyYW5zZm9ybWF0aW9uIChzZWUgYGxvZ2ljbGUoKWAgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzKQoKICAgIDpwYXJhbSBkYXRhOiBOdW1QeSBhcnJheSBvZiBGQ1MgZXZlbnQgZGF0YQogICAgOnBhcmFtIGNoYW5uZWxfaW5kaWNlczogY2hhbm5lbCBpbmRpY2VzIHRvIHRyYW5zZm9ybSAob3RoZXIgY2hhbm5lbHMgcmV0dXJuZWQgaW4gcGxhY2UsIHVudHJhbnNmb3JtZWQpCiAgICA6cGFyYW0gdDogcGFyYW1ldGVyIGZvciB0aGUgdG9wIG9mIHRoZSBsaW5lYXIgc2NhbGUgKGUuZy4gMjYyMTQ0KQogICAgOnBhcmFtIG06IHBhcmFtZXRlciBmb3IgdGhlIG51bWJlciBvZiBkZWNhZGVzIHRoZSB0cnVlIGxvZ2FyaXRobWljIHNjYWxlCiAgICAgICAgYXBwcm9hY2hlcyBhdCB0aGUgaGlnaCBlbmQgb2YgdGhlIHNjYWxlCiAgICA6cGFyYW0gdzogcGFyYW1ldGVyIGZvciB0aGUgYXBwcm94aW1hdGUgbnVtYmVyIG9mIGRlY2FkZXMgaW4gdGhlIGxpbmVhciByZWdpb24KICAgIDpwYXJhbSBhOiBwYXJhbWV0ZXIgZm9yIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBuZWdhdGl2ZSBkZWNhZGVzCgogICAgOnJldHVybjogTnVtUHkgYXJyYXkgb2YgdHJhbnNmb3JtZWQgZXZlbnRzCiAgICAiIiIKICAgIGRhdGFfY29weSA9IGRhdGEuY29weSgpCgogICAgIyBydW4gbG9naWNsZSBzY2FsZSBmb3IgZWFjaCBjaGFubmVsIHNlcGFyYXRlbHkKICAgIGZvciBpIGluIGNoYW5uZWxfaW5kaWNlczoKICAgICAgICB0bXAgPSBfbG9naWNsZV9pbnZlcnNlKGRhdGFfY29weVs6LCBpXS5ULCB0LCBtLCB3LCBhKQogICAgICAgIGRhdGFfY29weS5UW2ldID0gdG1wCiAgICByZXR1cm4gZGF0YV9jb3B5CgoKZGVmIF9oeXBlcmxvZyh5LCB0PTI2MjE0NCwgbT00LjUsIHc9MC41LCBhPTApOgogICAgeSA9IG5wLmFycmF5KHksIGR0eXBlPSdkb3VibGUnKQoKICAgICMgbm9pbnNwZWN0aW9uIFB5VW5yZXNvbHZlZFJlZmVyZW5jZXMKICAgIGxvZ2ljbGVfYy5oeXBlcmxvZ19zY2FsZSh0LCB3LCBtLCBhLCB5KQogICAgcmV0dXJuIHkKCgpkZWYgaHlwZXJsb2coCiAgICAgICAgZGF0YSwKICAgICAgICBjaGFubmVsX2luZGljZXMsCiAgICAgICAgdD0yNjIxNDQsCiAgICAgICAgbT00LjUsCiAgICAgICAgdz0wLjUsCiAgICAgICAgYT0wLAopOgogICAgIiIiCiAgICBIeXBlcmxvZyB0cmFuc2Zvcm1hdGlvbiwgaW1wbGVtZW50ZWQgYXMgZGVmaW5lZCBpbiB0aGUKICAgIEdhdGluZ01MIDIuMCBzcGVjaWZpY2F0aW9uOgoKICAgIGh5cGVybG9nKHgsIFQsIFcsIE0sIEEpID0gcm9vdChFSCh5LCBULCBXLCBNLCBBKSDiiJIgeCkKCiAgICB3aGVyZSBFSCBpcyBkZWZpbmVkIGFzOgoKICAgIEVIKHksIFQsIFcsIE0sIEEpID0gYWVeKGJ5KSArIGN5IOKIkiBmCgogICAgVGhlIEh5cGVybG9nIHRyYW5zZm9ybWF0aW9uIHdhcyBvcmlnaW5hbGx5IGRlZmluZWQgaW4gdGhlIHB1YmxpY2F0aW9uOgoKICAgICAgICBCYWd3ZWxsIENCLiBIeXBlcmxvZy1hIGZsZXhpYmxlIGxvZy1saWtlIHRyYW5zZm9ybSBmb3IgbmVnYXRpdmUsIHplcm8sIGFuZAogICAgICAgIHBvc2l0aXZlIHZhbHVlZCBkYXRhLiBDeXRvbWV0cnkgQS4sIDIwMDU6NjQoMSk6MzTigJM0Mi4KCiAgICA6cGFyYW0gZGF0YTogTnVtUHkgYXJyYXkgb2YgRkNTIGV2ZW50IGRhdGEKICAgIDpwYXJhbSBjaGFubmVsX2luZGljZXM6IGNoYW5uZWwgaW5kaWNlcyB0byB0cmFuc2Zvcm0gKG90aGVyIGNoYW5uZWxzIHJldHVybmVkIGluIHBsYWNlLCB1bnRyYW5zZm9ybWVkKQogICAgOnBhcmFtIHQ6IHBhcmFtZXRlciBmb3IgdGhlIHRvcCBvZiB0aGUgbGluZWFyIHNjYWxlIChlLmcuIDI2MjE0NCkKICAgIDpwYXJhbSBtOiBwYXJhbWV0ZXIgZm9yIGRlc2lyZWQgbnVtYmVyIG9mIGRlY2FkZXMKICAgIDpwYXJhbSB3OiBwYXJhbWV0ZXIgZm9yIHRoZSBhcHByb3hpbWF0ZSBudW1iZXIgb2YgZGVjYWRlcyBpbiB0aGUgbGluZWFyIHJlZ2lvbgogICAgOnBhcmFtIGE6IHBhcmFtZXRlciBmb3IgdGhlIGFkZGl0aW9uYWwgbnVtYmVyIG9mIG5lZ2F0aXZlIGRlY2FkZXMKCiAgICA6cmV0dXJuOiBOdW1QeSBhcnJheSBvZiB0cmFuc2Zvcm1lZCBldmVudHMKICAgICIiIgogICAgZGF0YV9jb3B5ID0gZGF0YS5jb3B5KCkKCiAgICAjIHJ1biBoeXBlcmxvZyBzY2FsZSBmb3IgZWFjaCBjaGFubmVsIHNlcGFyYXRlbHkKICAgIGZvciBpIGluIGNoYW5uZWxfaW5kaWNlczoKICAgICAgICB0bXAgPSBfaHlwZXJsb2coZGF0YV9jb3B5WzosIGldLlQsIHQsIG0sIHcsIGEpCiAgICAgICAgZGF0YV9jb3B5LlRbaV0gPSB0bXAKICAgIHJldHVybiBkYXRhX2NvcHkKCgpkZWYgX2h5cGVybG9nX2ludmVyc2UoeSwgdD0yNjIxNDQsIG09NC41LCB3PTAuNSwgYT0wKToKICAgIHkgPSBucC5hcnJheSh5LCBkdHlwZT0nZG91YmxlJykKCiAgICAjIG5vaW5zcGVjdGlvbiBQeVVucmVzb2x2ZWRSZWZlcmVuY2VzCiAgICBsb2dpY2xlX2MuaHlwZXJsb2dfaW52ZXJzZSh0LCB3LCBtLCBhLCB5KQogICAgcmV0dXJuIHkKCgpkZWYgaHlwZXJsb2dfaW52ZXJzZSgKICAgICAgICBkYXRhLAogICAgICAgIGNoYW5uZWxfaW5kaWNlcywKICAgICAgICB0PTI2MjE0NCwKPHxmaW1faG9sZXw+Cik6CiAgICAiIiIKICAgIEludmVyc2Ugb2YgdGhlIEh5cGVybG9nIHRyYW5zZm9ybWF0aW9uLCBpbXBsZW1lbnRlZCBhcyBkZWZpbmVkIGluIHRoZQogICAgR2F0aW5nTUwgMi4wIHNwZWNpZmljYXRpb24gKHNlZSBoeXBlcmxvZygpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscykuCgogICAgOnBhcmFtIGRhdGE6IE51bVB5IGFycmF5IG9mIEZDUyBldmVudCBkYXRhCiAgICA6cGFyYW0gY2hhbm5lbF9pbmRpY2VzOiBjaGFubmVsIGluZGljZXMgdG8gdHJhbnNmb3JtIChvdGhlciBjaGFubmVscyByZXR1cm5lZCBpbiBwbGFjZSwgdW50cmFuc2Zvcm1lZCkKICAgIDpwYXJhbSB0OiBwYXJhbWV0ZXIgZm9yIHRoZSB0b3Agb2YgdGhlIGxpbmVhciBzY2FsZSAoZS5nLiAyNjIxNDQpCiAgICA6cGFyYW0gbTogcGFyYW1ldGVyIGZvciBkZXNpcmVkIG51bWJlciBvZiBkZWNhZGVzCiAgICA6cGFyYW0gdzogcGFyYW1ldGVyIGZvciB0aGUgYXBwcm94aW1hdGUgbnVtYmVyIG9mIGRlY2FkZXMgaW4gdGhlIGxpbmVhciByZWdpb24KICAgIDpwYXJhbSBhOiBwYXJhbWV0ZXIgZm9yIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBuZWdhdGl2ZSBkZWNhZGVzCgogICAgOnJldHVybjogTnVtUHkgYXJyYXkgb2YgdHJhbnNmb3JtZWQgZXZlbnRzCiAgICAiIiIKICAgIGRhdGFfY29weSA9IGRhdGEuY29weSgpCgogICAgIyBydW4gaHlwZXJsb2cgc2NhbGUgZm9yIGVhY2ggY2hhbm5lbCBzZXBhcmF0ZWx5CiAgICBmb3IgaSBpbiBjaGFubmVsX2luZGljZXM6CiAgICAgICAgdG1wID0gX2h5cGVybG9nX2ludmVyc2UoZGF0YV9jb3B5WzosIGldLlQsIHQsIG0sIHcsIGEpCiAgICAgICAgZGF0YV9jb3B5LlRbaV0gPSB0bXAKICAgIHJldHVybiBkYXRhX2NvcHkKCgpkZWYgYXNpbmgoZGF0YSwgY2hhbm5lbF9pbmRpY2VzLCB0LCBtLCBhKToKICAgICIiIgogICAgQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHBhcmFtZXRyaXplZCBpbnZlcnNlIGh5cGVyYm9saWMgc2luZSBmdW5jdGlvbgogICAgYXMgZGVmaW5lZCBpbiB0aGUgR2F0aW5nTUwgMi4wIHNwZWNpZmljYXRpb24uCgogICAgOnBhcmFtIGRhdGE6IE51bVB5IGFycmF5IG9mIEZDUyBldmVudCBkYXRhCiAgICA6cGFyYW0gY2hhbm5lbF9pbmRpY2VzOiBjaGFubmVsIGluZGljZXMgdG8gdHJhbnNmb3JtIChvdGhlciBjaGFubmVscyByZXR1cm5lZCBpbiBwbGFjZSwgdW50cmFuc2Zvcm1lZCkKICAgIDpwYXJhbSB0OiBwYXJhbWV0ZXIgc3BlY2lmeWluZyB0aGUgdG9wIG9mIHRoZSBzY2FsZSwgKGUuZy4gMjYyMTQ0KQogICAgOnBhcmFtIG06IHBhcmFtZXRlciBmb3IgdGhlIG51bWJlciBvZiBkZWNhZGVzCiAgICA6cGFyYW0gYTogcGFyYW1ldGVyIGZvciB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgbmVnYXRpdmUgZGVjYWRlcwoKICAgIDpyZXR1cm46IE51bVB5IGFycmF5IG9mIHRyYW5zZm9ybWVkIGV2ZW50cwogICAgIiIiCiAgICBwcmVfc2NhbGUgPSBucC5zaW5oKG0gKiBucC5sb2coMTApKSAvIHQKICAgIHRyYW5zcG9zZSA9IGEgKiBucC5sb2coMTApCiAgICBkaXZpc29yID0gKG0gKyBhKSAqIG5wLmxvZygxMCkKCiAgICBkYXRhX2NvcHkgPSBkYXRhLmNvcHkoKQoKICAgIHRtcF9kYXRhID0gKG5wLmFyY3NpbmgoZGF0YV9jb3B5WzosIGNoYW5uZWxfaW5kaWNlc10gKiBwcmVfc2NhbGUpICsgdHJhbnNwb3NlKSAvIGRpdmlzb3IKCiAgICBkYXRhX2NvcHlbOiwgY2hhbm5lbF9pbmRpY2VzXSA9IHRtcF9kYXRhCgogICAgcmV0dXJuIGRhdGFfY29weQoKCmRlZiBhc2luaF9pbnZlcnNlKGRhdGEsIGNoYW5uZWxfaW5kaWNlcywgdCwgbSwgYSk6CiAgICAiIiIKICAgIEludmVyc2Ugb2YgdGhlIHBhcmFtZXRyaXplZCBpbnZlcnNlIGh5cGVyYm9saWMgc2luZSBmdW5jdGlvbgogICAgYXMgZGVmaW5lZCBpbiB0aGUgR2F0aW5nTUwgMi4wIHNwZWNpZmljYXRpb24uCgogICAgOnBhcmFtIGRhdGE6IE51bVB5IGFycmF5IG9mIEZDUyBldmVudCBkYXRhCiAgICA6cGFyYW0gY2hhbm5lbF9pbmRpY2VzOiBjaGFubmVsIGluZGljZXMgdG8gdHJhbnNmb3JtIChvdGhlciBjaGFubmVscyByZXR1cm5lZCBpbiBwbGFjZSwgdW50cmFuc2Zvcm1lZCkKICAgIDpwYXJhbSB0OiBwYXJhbWV0ZXIgc3BlY2lmeWluZyB0aGUgdG9wIG9mIHRoZSBzY2FsZSwgKGUuZy4gMjYyMTQ0KQogICAgOnBhcmFtIG06IHBhcmFtZXRlciBmb3IgdGhlIG51bWJlciBvZiBkZWNhZGVzCiAgICA6cGFyYW0gYTogcGFyYW1ldGVyIGZvciB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgbmVnYXRpdmUgZGVjYWRlcwoKICAgIDpyZXR1cm46IE51bVB5IGFycmF5IG9mIHRyYW5zZm9ybWVkIGV2ZW50cwogICAgIiIiCiAgICBwcmVfc2NhbGUgPSBucC5zaW5oKG0gKiBucC5sb2coMTApKSAvIHQKICAgIHRyYW5zcG9zZSA9IGEgKiBucC5sb2coMTApCiAgICBkaXZpc29yID0gKG0gKyBhKSAqIG5wLmxvZygxMCkKCiAgICBkYXRhX2NvcHkgPSBkYXRhLmNvcHkoKQogICAgZGF0YV9jb3B5WzosIGNoYW5uZWxfaW5kaWNlc10gPSAobnAuc2luaCgoZGF0YV9jb3B5WzosIGNoYW5uZWxfaW5kaWNlc10gKiBkaXZpc29yKSAtIHRyYW5zcG9zZSkpIC8gcHJlX3NjYWxlCgogICAgcmV0dXJuIGRhdGFfY29weQoKCmRlZiBsb2coZGF0YSwgY2hhbm5lbF9pbmRpY2VzLCB0LCBtKToKICAgICIiIgogICAgUGFyYW1ldHJpemVkIGxvZ2FyaXRobWljIHRyYW5zZm9ybWF0aW9uLCBpbXBsZW1lbnRlZCBhcyBkZWZpbmVkIGluIHRoZQogICAgR2F0aW5nTUwgMi4wIHNwZWNpZmljYXRpb246CgogICAgZmxvZyh4LCBULCBNKSA9ICgxIC8gTSkgKiBsb2dfMTAoeCAvIFQpICsgMQoKICAgIDpwYXJhbSBkYXRhOiBOdW1QeSBhcnJheSBvZiBGQ1MgZXZlbnQgZGF0YQogICAgOnBhcmFtIGNoYW5uZWxfaW5kaWNlczogY2hhbm5lbCBpbmRpY2VzIHRvIHRyYW5zZm9ybSAob3RoZXIgY2hhbm5lbHMgcmV0dXJuZWQgaW4gcGxhY2UsIHVudHJhbnNmb3JtZWQpCiAgICA6cGFyYW0gdDogcGFyYW1ldGVyIGZvciB0aGUgdG9wIG9mIHRoZSBsaW5lYXIgc2NhbGUgKGUuZy4gMjYyMTQ0KQogICAgOnBhcmFtIG06IHBhcmFtZXRlciBmb3IgZGVzaXJlZCBudW1iZXIgb2YgZGVjYWRlcwoKICAgIDpyZXR1cm46IE51bVB5IGFycmF5IG9mIHRyYW5zZm9ybWVkIGV2ZW50cwogICAgIiIiCiAgICBkYXRhX2NvcHkgPSBkYXRhLmNvcHkoKQogICAgZGF0YV9jb3B5WzosIGNoYW5uZWxfaW5kaWNlc10gPSAoMS4gLyBtKSAqIG5wLmxvZzEwKGRhdGFfY29weVs6LCBjaGFubmVsX2luZGljZXNdIC8gdCkgKyAxLgoKICAgIHJldHVybiBkYXRhX2NvcHkKCgpkZWYgbG9nX2ludmVyc2UoZGF0YSwgY2hhbm5lbF9pbmRpY2VzLCB0LCBtKToKICAgICIiIgogICAgSW52ZXJzZSBvZiBsb2dhcml0aG1pYyB0cmFuc2Zvcm1hdGlvbgoKICAgIDpwYXJhbSBkYXRhOiBOdW1QeSBhcnJheSBvZiBGQ1MgZXZlbnQgZGF0YQogICAgOnBhcmFtIGNoYW5uZWxfaW5kaWNlczogY2hhbm5lbCBpbmRpY2VzIHRvIHRyYW5zZm9ybSAob3RoZXIgY2hhbm5lbHMgcmV0dXJuZWQgaW4gcGxhY2UsIHVudHJhbnNmb3JtZWQpCiAgICA6cGFyYW0gdDogcGFyYW1ldGVyIGZvciB0aGUgdG9wIG9mIHRoZSBsaW5lYXIgc2NhbGUgKGUuZy4gMjYyMTQ0KQogICAgOnBhcmFtIG06IHBhcmFtZXRlciBmb3IgZGVzaXJlZCBudW1iZXIgb2YgZGVjYWRlcwoKICAgIDpyZXR1cm46IE51bVB5IGFycmF5IG9mIHRyYW5zZm9ybWVkIGV2ZW50cwogICAgIiIiCiAgICBkYXRhX2NvcHkgPSBkYXRhLmNvcHkoKQogICAgZGF0YV9jb3B5WzosIGNoYW5uZWxfaW5kaWNlc10gPSB0ICogKDEwICoqICgoZGF0YV9jb3B5WzosIGNoYW5uZWxfaW5kaWNlc10gLSAxKSAqIG0pKQoKICAgIHJldHVybiBkYXRhX2NvcHkKPHxmaW1fc3VmZml4fD4KICAgICAgICBtPTQuNSwKICAgICAgICB3PTAuNSwKICAgICAgICBhPTAsCjx8ZmltX2VuZHw+"]
["e72ff0451327e5ae3644f0560471e1018fcde21c-1","e72ff0451327e5ae3644f0560471e1018fcde21c","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMgQEF1dGhvcjogb2VzdGViYW4KIyBARGF0ZTogICAyMDE1LTExLTE5IDE2OjQ0OjI3CiMgQExhc3QgTW9kaWZpZWQgYnk6ICAgb2VzdGViYW4KIiIiIG5pd29ya2Zsb3dzIHNldHVwIHNjcmlwdCAiIiIKClBBQ0tBR0VfTkFNRSA9ICduaXdvcmtmbG93cycKCgpkZWYgbWFpbigpOgogICAgIiIiIEluc3RhbGwgZW50cnktcG9pbnQgIiIiCiAgICBmcm9tIG9zIGltcG9ydCBwYXRoIGFzIG9wCiAgICBmcm9tIHNldHVwdG9vbHMgaW1wb3J0IHNldHVwLCBmaW5kX3BhY2thZ2VzCiAgICBpbXBvcnQgcnVucHkKCiAgICBsZGljdCA9IHJ1bnB5LnJ1bl9wYXRoKG9wLmpvaW4ob3AuYWJzcGF0aChvcC5kaXJuYW1lKF9fZmlsZV9fKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25pd29ya2Zsb3dzJywgJ2luZm8ucHknKSkKCiAgICBzZXR1cCgKICAgICAgICBuYW1lPVBBQ0tBR0VfTkFNRSwKICAgICAgICB2ZXJzaW9uPWxkaWN0WydfX3ZlcnNpb25fXyddLAogICAgICAgIGRlc2NyaXB0aW9uPWxkaWN0WydfX2Rlc2NyaXB0aW9uX18nXSwKICAgICAgICBsb25nX2Rlc2NyaXB0aW9uPWxkaWN0WydfX2xvbmdkZXNjX18nXSwKICAgICAgICBhdXRob3I9bGRpY3RbJ19fYXV0aG9yX18nXSwKICAgICAgICBhdXRob3JfZW1haWw9bGRpY3RbJ19fZW1haWxfXyddLAogICAgICAgIG1haW50YWluZXI9bGRpY3RbJ19fbWFpbnRhaW5lcl9fJ10sCiAgICAgICAgbWFpbnRhaW5lcl9lbWFpbD1sZGljdFsnX19lbWFpbF9fJ10sCiAgICAgICAgbGljZW5zZT1sZGljdFsnX19saWNlbnNlX18nXSwKICAgICAgICB1cmw9bGRpY3RbJ1VSTCddLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZG93bmxvYWRfdXJsPWxkaWN0WydET1dOTE9BRF9VUkwnXSwKICAgICAgICBjbGFzc2lmaWVycz1sZGljdFsnQ0xBU1NJRklFUlMnXSwKICAgICAgICBwYWNrYWdlcz1maW5kX3BhY2thZ2VzKGV4Y2x1ZGU9WycqLnRlc3RzJ10pLAogICAgICAgIHppcF9zYWZlPUZhbHNlLAo8fGZpbV9lbmR8Pg=="]
["e72ff0451327e5ae3644f0560471e1018fcde21c-2","e72ff0451327e5ae3644f0560471e1018fcde21c","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBAQXV0aG9yOiBvZXN0ZWJhbgojIEBEYXRlOiAgIDIwMTUtMTEtMTkgMTY6NDQ6MjcKIyBATGFzdCBNb2RpZmllZCBieTogICBvZXN0ZWJhbgo8fGZpbV9lbmR8Pg=="]
["e72ff0451327e5ae3644f0560471e1018fcde21c-3","e72ff0451327e5ae3644f0560471e1018fcde21c","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMgQEF1dGhvcjogb2VzdGViYW4KIyBARGF0ZTogICAyMDE1LTExLTE5IDE2OjQ0OjI3CiMgQExhc3QgTW9kaWZpZWQgYnk6ICAgb2VzdGViYW4KIiIiIG5pd29ya2Zsb3dzIHNldHVwIHNjcmlwdCAiIiIKClBBQ0tBR0VfTkFNRSA9ICduaXdvcmtmbG93cycKCgpkZWYgbWFpbigpOgogICAgIiIiIEluc3RhbGwgZW50cnktcG9pbnQgIiIiCiAgICBmcm9tIG9zIGltcG9ydCBwYXRoIGFzIG9wCiAgICBmcm9tIHNldHVwdG9vbHMgaW1wb3J0IHNldHVwLCBmaW5kX3BhY2thZ2VzCiAgICBpbXBvcnQgcnVucHkKCiAgICBsZGljdCA9IHJ1bnB5LnJ1bl9wYXRoKG9wLmpvaW4ob3AuYWJzcGF0aChvcC5kaXJuYW1lKF9fZmlsZV9fKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25pd29ya2Zsb3dzJywgJ2luZm8ucHknKSkKCiAgICBzZXR1cCgKICAgICAgICBuYW1lPVBBQ0tBR0VfTkFNRSwKICAgICAgICB2ZXJzaW9uPWxkaWN0WydfX3ZlcnNpb25fXyddLAogICAgICAgIGRlc2NyaXB0aW9uPWxkaWN0WydfX2Rlc2NyaXB0aW9uX18nXSwKICAgICAgICBsb25nX2Rlc2NyaXB0aW9uPWxkaWN0WydfX2xvbmdkZXNjX18nXSwKICAgICAgICBhdXRob3I9bGRpY3RbJ19fYXV0aG9yX18nXSwKICAgICAgICBhdXRob3JfZW1haWw9bGRpY3RbJ19fZW1haWxfXyddLAogICAgICAgIG1haW50YWluZXI9bGRpY3RbJ19fbWFpbnRhaW5lcl9fJ10sCiAgICAgICAgbWFpbnRhaW5lcl9lbWFpbD1sZGljdFsnX19lbWFpbF9fJ10sCiAgICAgICAgbGljZW5zZT1sZGljdFsnX19saWNlbnNlX18nXSwKICAgICAgICB1cmw9bGRpY3RbJ1VSTCddLAogICAgICAgIGRvd25sb2FkX3VybD1sZGljdFsnRE9XTkxPQURfVVJMJ10sCiAgICAgICAgY2xhc3NpZmllcnM9bGRpY3RbJ0NMQVNTSUZJRVJTJ10sCiAgICAgICAgcGFja2FnZXM9ZmluZF9wYWNrYWdlcyhleGNsdWRlPVsnKi50ZXN0cyddKSwKICAgICAgICB6aXBfc2FmZT1GYWxzZSwKICAgICAgICAjIERlcGVuZGVuY2llcyBoYW5kbGluZwogICAgICAgIHNldHVwX3JlcXVpcmVzPWxkaWN0WydTRVRVUF9SRVFVSVJFUyddLAogICAgICAgIGluc3RhbGxfcmVxdWlyZXM9bGlzdChzZXQobGRpY3RbJ1JFUVVJUkVTJ10pKSwKICAgICAgICBkZXBlbmRlbmN5X2xpbmtzPWxkaWN0WydMSU5LU19SRVFVSVJFUyddLAogICAgICAgIHRlc3RzX3JlcXVpcmU9bGRpY3RbJ1RFU1RTX1JFUVVJUkVTJ10sCiAgICAgICAgZXh0cmFzX3JlcXVpcmU9bGRpY3RbJ0VYVFJBX1JFUVVJUkVTJ10sCiAgICAgICAgIyBEYXRhCiAgICAgICAgcGFja2FnZV9kYXRhPXsnbml3b3JrZmxvd3MnOiBbJ2RhdGEvdDEtbW5pX3JlZ2lzdHJhdGlvbiouanNvbicsICd2aXovKi50cGwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduaXB5cGUvcGlwZWxpbmUvZW5naW5lL3JlcG9ydF90ZW1wbGF0ZS5odG1sJywKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduaXB5cGUvZXh0ZXJuYWwvZDMuanMnXX0sCjx8ZmltX2VuZHw+"]
["e72ff0451327e5ae3644f0560471e1018fcde21c-4","e72ff0451327e5ae3644f0560471e1018fcde21c","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMgQEF1dGhvcjogb2VzdGViYW4KIyBARGF0ZTogICAyMDE1LTExLTE5IDE2OjQ0OjI3CiMgQExhc3QgTW9kaWZpZWQgYnk6ICAgb2VzdGViYW4KIiIiIG5pd29ya2Zsb3dzIHNldHVwIHNjcmlwdCAiIiIKPHxmaW1faG9sZXw+CmRlZiBtYWluKCk6CiAgICAiIiIgSW5zdGFsbCBlbnRyeS1wb2ludCAiIiIKICAgIGZyb20gb3MgaW1wb3J0IHBhdGggYXMgb3AKICAgIGZyb20gc2V0dXB0b29scyBpbXBvcnQgc2V0dXAsIGZpbmRfcGFja2FnZXMKICAgIGltcG9ydCBydW5weQoKICAgIGxkaWN0ID0gcnVucHkucnVuX3BhdGgob3Auam9pbihvcC5hYnNwYXRoKG9wLmRpcm5hbWUoX19maWxlX18pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbml3b3JrZmxvd3MnLCAnaW5mby5weScpKQoKICAgIHNldHVwKAogICAgICAgIG5hbWU9UEFDS0FHRV9OQU1FLAogICAgICAgIHZlcnNpb249bGRpY3RbJ19fdmVyc2lvbl9fJ10sCiAgICAgICAgZGVzY3JpcHRpb249bGRpY3RbJ19fZGVzY3JpcHRpb25fXyddLAogICAgICAgIGxvbmdfZGVzY3JpcHRpb249bGRpY3RbJ19fbG9uZ2Rlc2NfXyddLAogICAgICAgIGF1dGhvcj1sZGljdFsnX19hdXRob3JfXyddLAogICAgICAgIGF1dGhvcl9lbWFpbD1sZGljdFsnX19lbWFpbF9fJ10sCiAgICAgICAgbWFpbnRhaW5lcj1sZGljdFsnX19tYWludGFpbmVyX18nXSwKICAgICAgICBtYWludGFpbmVyX2VtYWlsPWxkaWN0WydfX2VtYWlsX18nXSwKICAgICAgICBsaWNlbnNlPWxkaWN0WydfX2xpY2Vuc2VfXyddLAogICAgICAgIHVybD1sZGljdFsnVVJMJ10sCiAgICAgICAgZG93bmxvYWRfdXJsPWxkaWN0WydET1dOTE9BRF9VUkwnXSwKICAgICAgICBjbGFzc2lmaWVycz1sZGljdFsnQ0xBU1NJRklFUlMnXSwKICAgICAgICBwYWNrYWdlcz1maW5kX3BhY2thZ2VzKGV4Y2x1ZGU9WycqLnRlc3RzJ10pLAogICAgICAgIHppcF9zYWZlPUZhbHNlLAogICAgICAgICMgRGVwZW5kZW5jaWVzIGhhbmRsaW5nCiAgICAgICAgc2V0dXBfcmVxdWlyZXM9bGRpY3RbJ1NFVFVQX1JFUVVJUkVTJ10sCiAgICAgICAgaW5zdGFsbF9yZXF1aXJlcz1saXN0KHNldChsZGljdFsnUkVRVUlSRVMnXSkpLAogICAgICAgIGRlcGVuZGVuY3lfbGlua3M9bGRpY3RbJ0xJTktTX1JFUVVJUkVTJ10sCiAgICAgICAgdGVzdHNfcmVxdWlyZT1sZGljdFsnVEVTVFNfUkVRVUlSRVMnXSwKICAgICAgICBleHRyYXNfcmVxdWlyZT1sZGljdFsnRVhUUkFfUkVRVUlSRVMnXSwKICAgICAgICAjIERhdGEKICAgICAgICBwYWNrYWdlX2RhdGE9eyduaXdvcmtmbG93cyc6IFsnZGF0YS90MS1tbmlfcmVnaXN0cmF0aW9uKi5qc29uJywgJ3Zpei8qLnRwbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25pcHlwZS9waXBlbGluZS9lbmdpbmUvcmVwb3J0X3RlbXBsYXRlLmh0bWwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduaXB5cGUvZXh0ZXJuYWwvZDMuanMnXX0sCiAgICAgICAgaW5jbHVkZV9wYWNrYWdlX2RhdGE9VHJ1ZSwKICAgICkKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KClBBQ0tBR0VfTkFNRSA9ICduaXdvcmtmbG93cycKCgo8fGZpbV9lbmR8Pg=="]
["e72ff0451327e5ae3644f0560471e1018fcde21c-5","e72ff0451327e5ae3644f0560471e1018fcde21c","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMgQEF1dGhvcjogb2VzdGViYW4KIyBARGF0ZTogICAyMDE1LTExLTE5IDE2OjQ0OjI3CiMgQExhc3QgTW9kaWZpZWQgYnk6ICAgb2VzdGViYW4KIiIiIG5pd29ya2Zsb3dzIHNldHVwIHNjcmlwdCAiIiIKClBBQ0tBR0VfTkFNRSA9ICduaXdvcmtmbG93cycKCgpkZWYgbWFpbigpOgogICAgIiIiIEluc3RhbGwgZW50cnktcG9pbnQgIiIiCiAgICBmcm9tIG9zIGltcG9ydCBwYXRoIGFzIG9wCiAgICBmcm9tIHNldHVwdG9vbHMgaW1wb3J0IHNldHVwLCBmaW5kX3BhY2thZ2VzCiAgICBpbXBvcnQgcnVucHkKCiAgICBsZGljdCA9IHJ1bnB5LnJ1bl9wYXRoKG9wLmpvaW4ob3AuYWJzcGF0aChvcC5kaXJuYW1lKF9fZmlsZV9fKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25pd29ya2Zsb3dzJywgJ2luZm8ucHknKSkKCiAgICBzZXR1cCgKICAgICAgICBuYW1lPVBBQ0tBR0VfTkFNRSwKICAgICAgICB2ZXJzaW9uPWxkaWN0WydfX3ZlcnNpb25fXyddLAogICAgICAgIGRlc2NyaXB0aW9uPWxkaWN0WydfX2Rlc2NyaXB0aW9uX18nXSwKICAgICAgICBsb25nX2Rlc2NyaXB0aW9uPWxkaWN0WydfX2xvbmdkZXNjX18nXSwKICAgICAgICBhdXRob3I9bGRpY3RbJ19fYXV0aG9yX18nXSwKICAgICAgICBhdXRob3JfZW1haWw9bGRpY3RbJ19fZW1haWxfXyddLAogICAgICAgIG1haW50YWluZXI9bGRpY3RbJ19fbWFpbnRhaW5lcl9fJ10sCiAgICAgICAgbWFpbnRhaW5lcl9lbWFpbD1sZGljdFsnX19lbWFpbF9fJ10sCiAgICAgICAgbGljZW5zZT1sZGljdFsnX19saWNlbnNlX18nXSwKICAgICAgICB1cmw9bGRpY3RbJ1VSTCddLAogICAgICAgIGRvd25sb2FkX3VybD1sZGljdFsnRE9XTkxPQURfVVJMJ10sCiAgICAgICAgY2xhc3NpZmllcnM9bGRpY3RbJ0NMQVNTSUZJRVJTJ10sCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBwYWNrYWdlcz1maW5kX3BhY2thZ2VzKGV4Y2x1ZGU9WycqLnRlc3RzJ10pLAogICAgICAgIHppcF9zYWZlPUZhbHNlLAogICAgICAgICMgRGVwZW5kZW5jaWVzIGhhbmRsaW5nCiAgICAgICAgc2V0dXBfcmVxdWlyZXM9bGRpY3RbJ1NFVFVQX1JFUVVJUkVTJ10sCjx8ZmltX2VuZHw+"]
["e739c94d2c5c69ea7dade0502097de5a800d7df0-1","e739c94d2c5c69ea7dade0502097de5a800d7df0","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCjx8ZmltX2hvbGV8PgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmZWF0dXJlcywgZXBzPTFlLTYpOgogICAgICAgIHN1cGVyKExheWVyTm9ybSwgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYuZ2FtbWEgPSBubi5QYXJhbWV0ZXIodG9yY2gub25lcyhmZWF0dXJlcykpCiAgICAgICAgc2VsZi5iZXRhID0gbm4uUGFyYW1ldGVyKHRvcmNoLnplcm9zKGZlYXR1cmVzKSkKICAgICAgICBzZWxmLmVwcyA9IGVwcwoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHgpOgogICAgICAgIG1lYW4gPSB4Lm1lYW4oLTEsIGtlZXBkaW09VHJ1ZSkKICAgICAgICBzdGQgPSB4LnN0ZCgtMSwga2VlcGRpbT1UcnVlKQogICAgICAgIHJldHVybiBzZWxmLmdhbW1hICogKHggLSBtZWFuKSAvIChzdGQgKyBzZWxmLmVwcykgKyBzZWxmLmJldGEKCgpjbGFzcyBDb252Qk5SZUxVKG5uLlNlcXVlbnRpYWwpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGluX3BsYW5lcywgb3V0X3BsYW5lcywga2VybmVsX3NpemU9Mywgc3RyaWRlPTEsIGdyb3Vwcz0xKToKICAgICAgICBwYWRkaW5nID0gKGtlcm5lbF9zaXplIC0gMSkgLy8gMgogICAgICAgIHN1cGVyKENvbnZCTlJlTFUsIHNlbGYpLl9faW5pdF9fKAogICAgICAgICAgICBubi5Db252MWQoaW5fcGxhbmVzLCBvdXRfcGxhbmVzLCBrZXJuZWxfc2l6ZSwgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgcGFkZGluZywgZ3JvdXBzPWdyb3VwcywgYmlhcz1GYWxzZSksCiAgICAgICAgICAgIG5uLkJhdGNoTm9ybTFkKG91dF9wbGFuZXMpLAogICAgICAgICAgICBubi5SZUxVNihpbnBsYWNlPVRydWUpCiAgICAgICAgKQoKCmNsYXNzIEludmVydGVkUmVzaWR1YWwobm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnAsIG91cCwgc3RyaWRlLCBleHBhbmRfcmF0aW8pOgogICAgICAgIHN1cGVyKEludmVydGVkUmVzaWR1YWwsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLnN0cmlkZSA9IHN0cmlkZQogICAgICAgIGFzc2VydCBzdHJpZGUgaW4gWzEsIDJdCgogICAgICAgIGhpZGRlbl9kaW0gPSBpbnQocm91bmQoaW5wICogZXhwYW5kX3JhdGlvKSkKICAgICAgICBzZWxmLnVzZV9yZXNfY29ubmVjdCA9IHNlbGYuc3RyaWRlID09IDEgYW5kIGlucCA9PSBvdXAKCiAgICAgICAgbGF5ZXJzID0gW10KICAgICAgICBpZiBleHBhbmRfcmF0aW8gIT0gMToKICAgICAgICAgICAgIyBwdwogICAgICAgICAgICBsYXllcnMuYXBwZW5kKENvbnZCTlJlTFUoaW5wLCBoaWRkZW5fZGltLCBrZXJuZWxfc2l6ZT0xKSkKICAgICAgICBsYXllcnMuZXh0ZW5kKFsKICAgICAgICAgICAgIyBkdwogICAgICAgICAgICBDb252Qk5SZUxVKGhpZGRlbl9kaW0sIGhpZGRlbl9kaW0sCiAgICAgICAgICAgICAgICAgICAgICAgc3RyaWRlPXN0cmlkZSwgZ3JvdXBzPWhpZGRlbl9kaW0pLAogICAgICAgICAgICAjIHB3LWxpbmVhcgogICAgICAgICAgICBubi5Db252MWQoaGlkZGVuX2RpbSwgb3VwLCAxLCAxLCAwLCBiaWFzPUZhbHNlKSwKICAgICAgICAgICAgbm4uQmF0Y2hOb3JtMWQob3VwKSwKICAgICAgICBdKQogICAgICAgIHNlbGYuY29udiA9IG5uLlNlcXVlbnRpYWwoKmxheWVycykKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4KToKICAgICAgICBpZiBzZWxmLnVzZV9yZXNfY29ubmVjdDoKICAgICAgICAgICAgcmV0dXJuIHggKyBzZWxmLmNvbnYoeCkKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gc2VsZi5jb252KHgpCjx8ZmltX3N1ZmZpeHw+CmZyb20gdG9yY2ggaW1wb3J0IG5uCgoKY2xhc3MgTGF5ZXJOb3JtKG5uLk1vZHVsZSk6Cjx8ZmltX2VuZHw+"]
["e739c94d2c5c69ea7dade0502097de5a800d7df0-2","e739c94d2c5c69ea7dade0502097de5a800d7df0","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCmZyb20gdG9yY2ggaW1wb3J0IG5uCgoKY2xhc3MgTGF5ZXJOb3JtKG5uLk1vZHVsZSk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGZlYXR1cmVzLCBlcHM9MWUtNik6CiAgICAgICAgc3VwZXIoTGF5ZXJOb3JtLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5nYW1tYSA9IG5uLlBhcmFtZXRlcih0b3JjaC5vbmVzKGZlYXR1cmVzKSkKICAgICAgICBzZWxmLmJldGEgPSBubi5QYXJhbWV0ZXIodG9yY2guemVyb3MoZmVhdHVyZXMpKQogICAgICAgIHNlbGYuZXBzID0gZXBzCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBtZWFuID0geC5tZWFuKC0xLCBrZWVwZGltPVRydWUpCiAgICAgICAgc3RkID0geC5zdGQoLTEsIGtlZXBkaW09VHJ1ZSkKICAgICAgICByZXR1cm4gc2VsZi5nYW1tYSAqICh4IC0gbWVhbikgLyAoc3RkICsgc2VsZi5lcHMpICsgc2VsZi5iZXRhCgo8fGZpbV9lbmR8Pg=="]
["4161f1859969475220a9365b8193d2a8d51f8ac6-1","4161f1859969475220a9365b8193d2a8d51f8ac6","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cApmcm9tIHNldHVwdG9vbHMgaW1wb3J0IGZpbmRfcGFja2FnZXMKCndpdGggb3BlbigncmVxdWlyZW1lbnRzLnR4dCcpIGFzIHJlcXM6CiAgICBpbnN0YWxsX3JlcXVpcmVzID0gWwo8fGZpbV9ob2xlfD4Kc2V0dXAoCiAgICBuYW1lPSdqc29ubG9nMmVsYXN0aWNzZWFyY2gnLAogICAgcGFja2FnZXM9ZmluZF9wYWNrYWdlcygpLAogICAgaW5zdGFsbF9yZXF1aXJlcz1pbnN0YWxsX3JlcXVpcmVzLAogICAgZW50cnlfcG9pbnRzPXsKICAgICAgICAiY29uc29sZV9zY3JpcHRzIjogWwogICAgICAgICAgICAianNvbmxvZzJlbGFzdGljc2VhcmNoID0ganNvbmxvZzJlbGFzdGljc2VhcmNoOm1haW4iCiAgICAgICAgXQogICAgfQopCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgbGluZSBmb3IgbGluZSBpbiByZXFzLnJlYWQoKS5zcGxpdCgnXG4nKQogICAgICAgIGlmIGxpbmUgYW5kIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJy0tJykgYW5kIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJy0nKSBhbmQKICAgICAgICAoIjsiIG5vdCBpbiBsaW5lKV0KCjx8ZmltX2VuZHw+"]
["4161f1859969475220a9365b8193d2a8d51f8ac6-2","4161f1859969475220a9365b8193d2a8d51f8ac6","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cApmcm9tIHNldHVwdG9vbHMgaW1wb3J0IGZpbmRfcGFja2FnZXMKCndpdGggb3BlbigncmVxdWlyZW1lbnRzLnR4dCcpIGFzIHJlcXM6CiAgICBpbnN0YWxsX3JlcXVpcmVzID0gWwogICAgICAgIGxpbmUgZm9yIGxpbmUgaW4gcmVxcy5yZWFkKCkuc3BsaXQoJ1xuJykKICAgICAgICBpZiBsaW5lIGFuZCBub3QgbGluZS5zdGFydHN3aXRoKCctLScpIGFuZCBub3QgbGluZS5zdGFydHN3aXRoKCctJykgYW5kCiAgICAgICAgKCI7IiBub3QgaW4gbGluZSldCgpzZXR1cCgKICAgIG5hbWU9J2pzb25sb2cyZWxhc3RpY3NlYXJjaCcsCiAgICBwYWNrYWdlcz1maW5kX3BhY2thZ2VzKCksCjx8ZmltX2hvbGV8PgogICAgICAgIF0KICAgIH0KKQo8fGZpbV9zdWZmaXh8PgogICAgaW5zdGFsbF9yZXF1aXJlcz1pbnN0YWxsX3JlcXVpcmVzLAogICAgZW50cnlfcG9pbnRzPXsKICAgICAgICAiY29uc29sZV9zY3JpcHRzIjogWwogICAgICAgICAgICAianNvbmxvZzJlbGFzdGljc2VhcmNoID0ganNvbmxvZzJlbGFzdGljc2VhcmNoOm1haW4iCjx8ZmltX2VuZHw+"]
["4161f1859969475220a9365b8193d2a8d51f8ac6-3","4161f1859969475220a9365b8193d2a8d51f8ac6","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cApmcm9tIHNldHVwdG9vbHMgaW1wb3J0IGZpbmRfcGFja2FnZXMKCndpdGggb3BlbigncmVxdWlyZW1lbnRzLnR4dCcpIGFzIHJlcXM6CiAgICBpbnN0YWxsX3JlcXVpcmVzID0gWwogICAgICAgIGxpbmUgZm9yIGxpbmUgaW4gcmVxcy5yZWFkKCkuc3BsaXQoJ1xuJykKICAgICAgICBpZiBsaW5lIGFuZCBub3QgbGluZS5zdGFydHN3aXRoKCctLScpIGFuZCBub3QgbGluZS5zdGFydHN3aXRoKCctJykgYW5kCiAgICAgICAgKCI7IiBub3QgaW4gbGluZSldCjx8ZmltX2hvbGV8PgogICAgaW5zdGFsbF9yZXF1aXJlcz1pbnN0YWxsX3JlcXVpcmVzLAogICAgZW50cnlfcG9pbnRzPXsKICAgICAgICAiY29uc29sZV9zY3JpcHRzIjogWwogICAgICAgICAgICAianNvbmxvZzJlbGFzdGljc2VhcmNoID0ganNvbmxvZzJlbGFzdGljc2VhcmNoOm1haW4iCiAgICAgICAgXQogICAgfQopCjx8ZmltX3N1ZmZpeHw+CgpzZXR1cCgKICAgIG5hbWU9J2pzb25sb2cyZWxhc3RpY3NlYXJjaCcsCiAgICBwYWNrYWdlcz1maW5kX3BhY2thZ2VzKCksCjx8ZmltX2VuZHw+"]
["4161f1859969475220a9365b8193d2a8d51f8ac6-4","4161f1859969475220a9365b8193d2a8d51f8ac6","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cApmcm9tIHNldHVwdG9vbHMgaW1wb3J0IGZpbmRfcGFja2FnZXMKCndpdGggb3BlbigncmVxdWlyZW1lbnRzLnR4dCcpIGFzIHJlcXM6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGluc3RhbGxfcmVxdWlyZXMgPSBbCiAgICAgICAgbGluZSBmb3IgbGluZSBpbiByZXFzLnJlYWQoKS5zcGxpdCgnXG4nKQogICAgICAgIGlmIGxpbmUgYW5kIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJy0tJykgYW5kIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJy0nKSBhbmQKICAgICAgICAoIjsiIG5vdCBpbiBsaW5lKV0KPHxmaW1fZW5kfD4="]
["e55106245b46133bb4efba8f324d1853e0f34f7d-1","e55106245b46133bb4efba8f324d1853e0f34f7d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCmltcG9ydCB1cmxsaWIyCmltcG9ydCBvcwpmcm9tIGltZ3VyZ2FsbGVyeSBpbXBvcnQgKgpmcm9tIGVudHJvcHljYWxjIGltcG9ydCAqCgoKZGVmIGRvd25sb2FkaW1ndXIoc291cmNlKToKICAgIGYgPSBvcGVuKHNvdXJjZSwgJ3InKQoKIzxpbWcgc3JjPSIvL2kuaW1ndXIuY29tL3lVZG8zU01iLmpwZyIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4IiAvPgojICAgIGltZ2xpbmsgPSByZS5jb21waWxlKCdccyo8aW1nIHNyYz0iLy9pLmltZ3VyLmNvbS9bYS16QS1aMC05XSsKICAgIGNvdW50ID0gMAogICAgZm9yIGxpbmUgaW4gZjoKIyAgICAgICAgaWYgIndpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIiBpbiBsaW5lOgogICAgICAgIGlmICJjbGFzcz1cInBvc3RcIiIgaW4gbGluZToKICAgICAgICAgICAgY291bnQgKz0gMQogICAgICAgICAgICBwcmludCBjb3VudCAsICIgLSAiICxsaW5lCiAgICAgICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgiXCIiKQogICAgICAgICAgICAjcHJpbnQgcGFydHNbMV0KI2h0dHA6Ly9pLmltZ3VyLmNvbS9IVnZ1d3FhLmpwZwogICAgICAgICAgICBpbWdsaW5rID0gImh0dHA6Ly9pLmltZ3VyLmNvbS8iICsgcGFydHNbMV0gKyAiLmpwZyIKICAgICAgICAgICAgcHJpbnQgaW1nbGluawogICAgICAgICAgICBpbWcgPSB1cmxsaWIyLnVybG9wZW4oaW1nbGluaykKIyAgICAgICAgICAgIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQwMjg2OTcvaG93LWRvLWktZG93bmxvYWQtYS16aXAtZmlsZS1pbi1weXRob24tdXNpbmctdXJsbGliMgogICAgICAgICAgICB3aXRoIG9wZW4oImltZ3MvIitwYXJ0c1sxXSsiLmpwZyIsICJ3YiIpIGFzIGxvY2FsX2ZpbGU6CiAgICAgICAgICAgICAgICBsb2NhbF9maWxlLndyaXRlKGltZy5yZWFkKCkpCiAgICAgICAgICAgIAoKZGVmIGdldEdhbGxlcmllcyhzb3VyY2UpOgogICAgZiA9IG9wZW4oc291cmNlLCAncicpCiAgICBnYWxsZXJpZXMgPSBbXQogICAgY291bnQgPSAwCiAgICBmb3IgbGluZSBpbiBmOgogICAgICAgIGlmICJjbGFzcz1cInBvc3RcIiIgaW4gbGluZToKICAgICAgICAgICAgY291bnQgKz0gMQogICAgICAgICAgICBwYXJ0cyA9IGxpbmUuc3BsaXQoIlwiIikKICAgICAgICAgICAgZ2FsbGluayA9ICJodHRwOi8vaW1ndXIuY29tL2dhbGxlcnkvIiArIHBhcnRzWzFdCiAgICAgICAgICAgIGdhbGxlcmllcy5hcHBlbmQoZ2FsbGluaykKICAgICAgICAgICAgcHJpbnQgY291bnQsICIgLSAiLCBnYWxsaW5rCiAgICByZXR1cm4gZ2FsbGVyaWVzCgpkZWYgZG93bmxvYWRHYWxsZXJpZXMoZ2FsbGVyaWVzLCBkZXN0KToKICAgIGZvciBnYWwgaW4gZ2FsbGVyaWVzOgogICAgICAgIGRvd25sb2FkZXIgPSBJbWd1ckdhbGxlcnlEb3dubG9hZGVyKGdhbCkKICAgICAgICBwcmludCAiVGhpcyBnYWxsZXJ5IGhhcyAlZCBpbWFnZXMiICUgZG93bmxvYWRlci5udW1faW1hZ2VzKCkKICAgICAgICBkb3dubG9hZGVyLnNhdmVfaW1hZ2VzKGRlc3QpCgpkZWYgZG93bmxvYWRBbmRFbnRyb3B5R2FsbGVyaWVzKGdhbGxlcmllcywgZGVzdCk6CiAgICBmb3IgZ2FsIGluIGdhbGxlcmllczoKICAgICAgICBkb3dubG9hZGVyID0gSW1ndXJHYWxsZXJ5RG93bmxvYWRlcihnYWwpCiAgICAgICAgZG93bmxvYWRlci5vbl9pbWFnZV9kb3dubG9hZChhcHBlbmRUb0NTVikKICAgICAgICBwcmludCAiVGhpcyBnYWxsZXJ5IGhhcyAlZCBpbWFnZXMiICUgZG93bmxvYWRlci5udW1faW1hZ2VzKCkKICAgICAgICBkb3dubG9hZGVyLnNhdmVfaW1hZ2VzKGRlc3QpCgoKZGVmIGFwcGVuZFRvQ1NWKGNvdW50LCB1cmwsIGZpbGVuYW1lKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgI29ubHkgY2FyZSBhYm91dCB0aGUgZmlsZW5hbWUsIHRoZSByZXN0IGlnbm9yZQogICAgZW50cm9weSA9IGVudHJvcHlfb2ZfZmlsZShmaWxlbmFtZSkKICAgIGZpbGVzaXplID0gb3Muc3RhdChmaWxlbmFtZSkuc3Rfc2l6ZQoKPHxmaW1fZW5kfD4="]
["e55106245b46133bb4efba8f324d1853e0f34f7d-2","e55106245b46133bb4efba8f324d1853e0f34f7d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCmltcG9ydCB1cmxsaWIyCmltcG9ydCBvcwpmcm9tIGltZ3VyZ2FsbGVyeSBpbXBvcnQgKgpmcm9tIGVudHJvcHljYWxjIGltcG9ydCAqCgoKZGVmIGRvd25sb2FkaW1ndXIoc291cmNlKToKICAgIGYgPSBvcGVuKHNvdXJjZSwgJ3InKQoKIzxpbWcgc3JjPSIvL2kuaW1ndXIuY29tL3lVZG8zU01iLmpwZyIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4IiAvPgojICAgIGltZ2xpbmsgPSByZS5jb21waWxlKCdccyo8aW1nIHNyYz0iLy9pLmltZ3VyLmNvbS9bYS16QS1aMC05XSsKICAgIGNvdW50ID0gMAogICAgZm9yIGxpbmUgaW4gZjoKIyAgICAgICAgaWYgIndpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIiBpbiBsaW5lOgogICAgICAgIGlmICJjbGFzcz1cInBvc3RcIiIgaW4gbGluZToKICAgICAgICAgICAgY291bnQgKz0gMQogICAgICAgICAgICBwcmludCBjb3VudCAsICIgLSAiICxsaW5lCiAgICAgICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgiXCIiKQogICAgICAgICAgICAjcHJpbnQgcGFydHNbMV0KI2h0dHA6Ly9pLmltZ3VyLmNvbS9IVnZ1d3FhLmpwZwogICAgICAgICAgICBpbWdsaW5rID0gImh0dHA6Ly9pLmltZ3VyLmNvbS8iICsgcGFydHNbMV0gKyAiLmpwZyIKICAgICAgICAgICAgcHJpbnQgaW1nbGluawogICAgICAgICAgICBpbWcgPSB1cmxsaWIyLnVybG9wZW4oaW1nbGluaykKIyAgICAgICAgICAgIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQwMjg2OTcvaG93LWRvLWktZG93bmxvYWQtYS16aXAtZmlsZS1pbi1weXRob24tdXNpbmctdXJsbGliMgogICAgICAgICAgICB3aXRoIG9wZW4oImltZ3MvIitwYXJ0c1sxXSsiLmpwZyIsICJ3YiIpIGFzIGxvY2FsX2ZpbGU6CiAgICAgICAgICAgICAgICBsb2NhbF9maWxlLndyaXRlKGltZy5yZWFkKCkpCiAgICAgICAgICAgIAoKZGVmIGdldEdhbGxlcmllcyhzb3VyY2UpOgogICAgZiA9IG9wZW4oc291cmNlLCAncicpCiAgICBnYWxsZXJpZXMgPSBbXQogICAgY291bnQgPSAwCiAgICBmb3IgbGluZSBpbiBmOgogICAgICAgIGlmICJjbGFzcz1cInBvc3RcIiIgaW4gbGluZToKICAgICAgICAgICAgY291bnQgKz0gMQogICAgICAgICAgICBwYXJ0cyA9IGxpbmUuc3BsaXQoIlwiIikKICAgICAgICAgICAgZ2FsbGluayA9ICJodHRwOi8vaW1ndXIuY29tL2dhbGxlcnkvIiArIHBhcnRzWzFdCiAgICAgICAgICAgIGdhbGxlcmllcy5hcHBlbmQoZ2FsbGluaykKICAgICAgICAgICAgcHJpbnQgY291bnQsICIgLSAiLCBnYWxsaW5rCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHJldHVybiBnYWxsZXJpZXMKCjx8ZmltX2VuZHw+"]
["e55106245b46133bb4efba8f324d1853e0f34f7d-3","e55106245b46133bb4efba8f324d1853e0f34f7d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCmltcG9ydCB1cmxsaWIyCmltcG9ydCBvcwpmcm9tIGltZ3VyZ2FsbGVyeSBpbXBvcnQgKgpmcm9tIGVudHJvcHljYWxjIGltcG9ydCAqCgoKZGVmIGRvd25sb2FkaW1ndXIoc291cmNlKToKICAgIGYgPSBvcGVuKHNvdXJjZSwgJ3InKQoKIzxpbWcgc3JjPSIvL2kuaW1ndXIuY29tL3lVZG8zU01iLmpwZyIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4IiAvPgojICAgIGltZ2xpbmsgPSByZS5jb21waWxlKCdccyo8aW1nIHNyYz0iLy9pLmltZ3VyLmNvbS9bYS16QS1aMC05XSsKICAgIGNvdW50ID0gMAogICAgZm9yIGxpbmUgaW4gZjoKIyAgICAgICAgaWYgIndpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIiBpbiBsaW5lOgogICAgICAgIGlmICJjbGFzcz1cInBvc3RcIiIgaW4gbGluZToKICAgICAgICAgICAgY291bnQgKz0gMQogICAgICAgICAgICBwcmludCBjb3VudCAsICIgLSAiICxsaW5lCiAgICAgICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgiXCIiKQogICAgICAgICAgICAjcHJpbnQgcGFydHNbMV0KI2h0dHA6Ly9pLmltZ3VyLmNvbS9IVnZ1d3FhLmpwZwogICAgICAgICAgICBpbWdsaW5rID0gImh0dHA6Ly9pLmltZ3VyLmNvbS8iICsgcGFydHNbMV0gKyAiLmpwZyIKICAgICAgICAgICAgcHJpbnQgaW1nbGluawogICAgICAgICAgICBpbWcgPSB1cmxsaWIyLnVybG9wZW4oaW1nbGluaykKIyAgICAgICAgICAgIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQwMjg2OTcvaG93LWRvLWktZG93bmxvYWQtYS16aXAtZmlsZS1pbi1weXRob24tdXNpbmctdXJsbGliMgogICAgICAgICAgICB3aXRoIG9wZW4oImltZ3MvIitwYXJ0c1sxXSsiLmpwZyIsICJ3YiIpIGFzIGxvY2FsX2ZpbGU6CiAgICAgICAgICAgICAgICBsb2NhbF9maWxlLndyaXRlKGltZy5yZWFkKCkpCiAgICAgICAgICAgIAoKZGVmIGdldEdhbGxlcmllcyhzb3VyY2UpOgogICAgZiA9IG9wZW4oc291cmNlLCAncicpCiAgICBnYWxsZXJpZXMgPSBbXQogICAgY291bnQgPSAwCiAgICBmb3IgbGluZSBpbiBmOgogICAgICAgIGlmICJjbGFzcz1cInBvc3RcIiIgaW4gbGluZToKICAgICAgICAgICAgY291bnQgKz0gMQogICAgICAgICAgICBwYXJ0cyA9IGxpbmUuc3BsaXQoIlwiIikKICAgICAgICAgICAgZ2FsbGluayA9ICJodHRwOi8vaW1ndXIuY29tL2dhbGxlcnkvIiArIHBhcnRzWzFdCiAgICAgICAgICAgIGdhbGxlcmllcy5hcHBlbmQoZ2FsbGluaykKICAgICAgICAgICAgcHJpbnQgY291bnQsICIgLSAiLCBnYWxsaW5rCiAgICByZXR1cm4gZ2FsbGVyaWVzCgpkZWYgZG93bmxvYWRHYWxsZXJpZXMoZ2FsbGVyaWVzLCBkZXN0KToKICAgIGZvciBnYWwgaW4gZ2FsbGVyaWVzOgogICAgICAgIGRvd25sb2FkZXIgPSBJbWd1ckdhbGxlcnlEb3dubG9hZGVyKGdhbCkKICAgICAgICBwcmludCAiVGhpcyBnYWxsZXJ5IGhhcyAlZCBpbWFnZXMiICUgZG93bmxvYWRlci5udW1faW1hZ2VzKCkKICAgICAgICBkb3dubG9hZGVyLnNhdmVfaW1hZ2VzKGRlc3QpCgpkZWYgZG93bmxvYWRBbmRFbnRyb3B5R2FsbGVyaWVzKGdhbGxlcmllcywgZGVzdCk6CiAgICBmb3IgZ2FsIGluIGdhbGxlcmllczoKICAgICAgICBkb3dubG9hZGVyID0gSW1ndXJHYWxsZXJ5RG93bmxvYWRlcihnYWwpCiAgICAgICAgZG93bmxvYWRlci5vbl9pbWFnZV9kb3dubG9hZChhcHBlbmRUb0NTVikKICAgICAgICBwcmludCAiVGhpcyBnYWxsZXJ5IGhhcyAlZCBpbWFnZXMiICUgZG93bmxvYWRlci5udW1faW1hZ2VzKCkKICAgICAgICBkb3dubG9hZGVyLnNhdmVfaW1hZ2VzKGRlc3QpCgoKZGVmIGFwcGVuZFRvQ1NWKGNvdW50LCB1cmwsIGZpbGVuYW1lKToKICAgICNvbmx5IGNhcmUgYWJvdXQgdGhlIGZpbGVuYW1lLCB0aGUgcmVzdCBpZ25vcmUKICAgIGVudHJvcHkgPSBlbnRyb3B5X29mX2ZpbGUoZmlsZW5hbWUpCiAgICBmaWxlc2l6ZSA9IG9zLnN0YXQoZmlsZW5hbWUpLnN0X3NpemUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICNodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NDEzOTAvZXh0cmFjdGluZy1leHRlbnNpb24tZnJvbS1maWxlbmFtZS1pbi1weXRob24KICAgIGZpbGV0eXBlID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMV0KICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShmaWxlbmFtZSkKPHxmaW1fZW5kfD4="]
["e55106245b46133bb4efba8f324d1853e0f34f7d-4","e55106245b46133bb4efba8f324d1853e0f34f7d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCmltcG9ydCB1cmxsaWIyCmltcG9ydCBvcwpmcm9tIGltZ3VyZ2FsbGVyeSBpbXBvcnQgKgpmcm9tIGVudHJvcHljYWxjIGltcG9ydCAqCgoKZGVmIGRvd25sb2FkaW1ndXIoc291cmNlKToKICAgIGYgPSBvcGVuKHNvdXJjZSwgJ3InKQoKIzxpbWcgc3JjPSIvL2kuaW1ndXIuY29tL3lVZG8zU01iLmpwZyIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4IiAvPgojICAgIGltZ2xpbmsgPSByZS5jb21waWxlKCdccyo8aW1nIHNyYz0iLy9pLmltZ3VyLmNvbS9bYS16QS1aMC05XSsKICAgIGNvdW50ID0gMAogICAgZm9yIGxpbmUgaW4gZjoKIyAgICAgICAgaWYgIndpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIiBpbiBsaW5lOgogICAgICAgIGlmICJjbGFzcz1cInBvc3RcIiIgaW4gbGluZToKICAgICAgICAgICAgY291bnQgKz0gMQogICAgICAgICAgICBwcmludCBjb3VudCAsICIgLSAiICxsaW5lCiAgICAgICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgiXCIiKQogICAgICAgICAgICAjcHJpbnQgcGFydHNbMV0KI2h0dHA6Ly9pLmltZ3VyLmNvbS9IVnZ1d3FhLmpwZwogICAgICAgICAgICBpbWdsaW5rID0gImh0dHA6Ly9pLmltZ3VyLmNvbS8iICsgcGFydHNbMV0gKyAiLmpwZyIKICAgICAgICAgICAgcHJpbnQgaW1nbGluawogICAgICAgICAgICBpbWcgPSB1cmxsaWIyLnVybG9wZW4oaW1nbGluaykKIyAgICAgICAgICAgIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQwMjg2OTcvaG93LWRvLWktZG93bmxvYWQtYS16aXAtZmlsZS1pbi1weXRob24tdXNpbmctdXJsbGliMgogICAgICAgICAgICB3aXRoIG9wZW4oImltZ3MvIitwYXJ0c1sxXSsiLmpwZyIsICJ3YiIpIGFzIGxvY2FsX2ZpbGU6CiAgICAgICAgICAgICAgICBsb2NhbF9maWxlLndyaXRlKGltZy5yZWFkKCkpCiAgICAgICAgICAgIAoKZGVmIGdldEdhbGxlcmllcyhzb3VyY2UpOgogICAgZiA9IG9wZW4oc291cmNlLCAncicpCiAgICBnYWxsZXJpZXMgPSBbXQogICAgY291bnQgPSAwCiAgICBmb3IgbGluZSBpbiBmOgogICAgICAgIGlmICJjbGFzcz1cInBvc3RcIiIgaW4gbGluZToKICAgICAgICAgICAgY291bnQgKz0gMQogICAgICAgICAgICBwYXJ0cyA9IGxpbmUuc3BsaXQoIlwiIikKICAgICAgICAgICAgZ2FsbGluayA9ICJodHRwOi8vaW1ndXIuY29tL2dhbGxlcnkvIiArIHBhcnRzWzFdCiAgICAgICAgICAgIGdhbGxlcmllcy5hcHBlbmQoZ2FsbGluaykKICAgICAgICAgICAgcHJpbnQgY291bnQsICIgLSAiLCBnYWxsaW5rCiAgICByZXR1cm4gZ2FsbGVyaWVzCgpkZWYgZG93bmxvYWRHYWxsZXJpZXMoZ2FsbGVyaWVzLCBkZXN0KToKICAgIGZvciBnYWwgaW4gZ2FsbGVyaWVzOgogICAgICAgIGRvd25sb2FkZXIgPSBJbWd1ckdhbGxlcnlEb3dubG9hZGVyKGdhbCkKICAgICAgICBwcmludCAiVGhpcyBnYWxsZXJ5IGhhcyAlZCBpbWFnZXMiICUgZG93bmxvYWRlci5udW1faW1hZ2VzKCkKICAgICAgICBkb3dubG9hZGVyLnNhdmVfaW1hZ2VzKGRlc3QpCgpkZWYgZG93bmxvYWRBbmRFbnRyb3B5R2FsbGVyaWVzKGdhbGxlcmllcywgZGVzdCk6CiAgICBmb3IgZ2FsIGluIGdhbGxlcmllczoKICAgICAgICBkb3dubG9hZGVyID0gSW1ndXJHYWxsZXJ5RG93bmxvYWRlcihnYWwpCiAgICAgICAgZG93bmxvYWRlci5vbl9pbWFnZV9kb3dubG9hZChhcHBlbmRUb0NTVikKICAgICAgICBwcmludCAiVGhpcyBnYWxsZXJ5IGhhcyAlZCBpbWFnZXMiICUgZG93bmxvYWRlci5udW1faW1hZ2VzKCkKICAgICAgICBkb3dubG9hZGVyLnNhdmVfaW1hZ2VzKGRlc3QpCgoKZGVmIGFwcGVuZFRvQ1NWKGNvdW50LCB1cmwsIGZpbGVuYW1lKToKICAgICNvbmx5IGNhcmUgYWJvdXQgdGhlIGZpbGVuYW1lLCB0aGUgcmVzdCBpZ25vcmUKICAgIGVudHJvcHkgPSBlbnRyb3B5X29mX2ZpbGUoZmlsZW5hbWUpCiAgICBmaWxlc2l6ZSA9IG9zLnN0YXQoZmlsZW5hbWUpLnN0X3NpemUKCiAgICAjaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTQxMzkwL2V4dHJhY3RpbmctZXh0ZW5zaW9uLWZyb20tZmlsZW5hbWUtaW4tcHl0aG9uCiAgICBmaWxldHlwZSA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzFdCiAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZmlsZW5hbWUpCgogICAgc3RyaW5nID0gZmlsZW5hbWUgKyAiLCAiICsgZmlsZXR5cGUgKyAiLCAiICsgc3RyKGVudHJvcHkpICsgIiwgIiArIHN0cihmaWxlc2l6ZSkgKyAiXG4iCiMgICAgcHJpbnQgZmlsZW5hbWUsICIsICIsIGZpbGV0eXBlLCAiLCAiLCBlbnRyb3B5LCAiLCAiLCBmaWxlc2l6ZQoKICAgIHdpdGggb3BlbigidGVzdGRhdGEuY3N2IiwgImEiKSBhcyBteWZpbGU6CiAgICAgICAgbXlmaWxlLndyaXRlKHN0cmluZykKCmRlZiBzY3JhcGVEaXJlY3RvcnkoZGlyZWN0b3J5LCBvdXRwdXRmaWxlKToKICAgIGZvciBmaWxlbmFtZSBpbiBvcy5saXN0ZGlyKGRpcmVjdG9yeSk6CiAgICAgICAgcHJpbnQgInNjcmFwaW5nICIgKyBkaXJlY3RvcnkgKyBmaWxlbmFtZQogICAgICAgIGVudHJvcHlfb2ZfZmlsZV9jaHVua3MoZGlyZWN0b3J5ICsgZmlsZW5hbWUsIDEwMDAwLCBvdXRwdXRmaWxlKQoKZGVmIHNjcmFwZURpcmVjdG9yeVRvdGFscyhkaXJlY3RvcnksIG91dHB1dGZpbGUpOgogICAgb3V0ZmlsZSA9IG9wZW4ob3V0cHV0ZmlsZSwgInciKQogICAgZm9yIGZpbGVuYW1lIGluIG9zLmxpc3RkaXIoZGlyZWN0b3J5KToKICAgICAgICBwcmludCAic2NyYXBpbmcgIiArIGRpcmVjdG9yeSArIGZpbGVuYW1lCiAgICAgICAgZW50cm9weSA9IGVudHJvcHlfb2ZfZmlsZShkaXJlY3RvcnkgKyBmaWxlbmFtZSkKICAgICAgICBmaWxlc2l6ZSA9IG9zLnN0YXQoZGlyZWN0b3J5ICsgZmlsZW5hbWUpLnN0X3NpemUKICAgICAgICBmaWxldHlwZSA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzFdCgogICAgICAgIHN0cmluZyA9IGZpbGVuYW1lICsgIiwgIiArIGZpbGV0eXBlICsgIiwgIiArIHN0cihlbnRyb3B5KSArICIsICIgKyBzdHIoZmlsZXNpemUpICsgIiwgIiArICJcbiIKICAgICAgICBvdXRmaWxlLndyaXRlKHN0cmluZykKICAgIG91dGZpbGUuY2xvc2UoKQoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIGlucHV0X2ZpbGUgPSBzeXMuYXJndlsxXQogICAgb3V0cHV0X2RpciA9IHN5cy5hcmd2WzJdCiAgICBkb3dubG9hZEFuZEVudHJvcHlHYWxsZXJpZXMoZ2V0R2FsbGVyaWVzKGlucHV0X2ZpbGUpLCBvdXRwdXRfZGlyKQo8fGZpbV9lbmR8Pg=="]
["e55106245b46133bb4efba8f324d1853e0f34f7d-5","e55106245b46133bb4efba8f324d1853e0f34f7d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCmltcG9ydCB1cmxsaWIyCmltcG9ydCBvcwpmcm9tIGltZ3VyZ2FsbGVyeSBpbXBvcnQgKgpmcm9tIGVudHJvcHljYWxjIGltcG9ydCAqCgoKZGVmIGRvd25sb2FkaW1ndXIoc291cmNlKToKICAgIGYgPSBvcGVuKHNvdXJjZSwgJ3InKQoKIzxpbWcgc3JjPSIvL2kuaW1ndXIuY29tL3lVZG8zU01iLmpwZyIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4IiAvPgojICAgIGltZ2xpbmsgPSByZS5jb21waWxlKCdccyo8aW1nIHNyYz0iLy9pLmltZ3VyLmNvbS9bYS16QS1aMC05XSsKICAgIGNvdW50ID0gMAogICAgZm9yIGxpbmUgaW4gZjoKIyAgICAgICAgaWYgIndpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIiBpbiBsaW5lOgogICAgICAgIGlmICJjbGFzcz1cInBvc3RcIiIgaW4gbGluZToKICAgICAgICAgICAgY291bnQgKz0gMQogICAgICAgICAgICBwcmludCBjb3VudCAsICIgLSAiICxsaW5lCiAgICAgICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgiXCIiKQogICAgICAgICAgICAjcHJpbnQgcGFydHNbMV0KI2h0dHA6Ly9pLmltZ3VyLmNvbS9IVnZ1d3FhLmpwZwogICAgICAgICAgICBpbWdsaW5rID0gImh0dHA6Ly9pLmltZ3VyLmNvbS8iICsgcGFydHNbMV0gKyAiLmpwZyIKICAgICAgICAgICAgcHJpbnQgaW1nbGluawogICAgICAgICAgICBpbWcgPSB1cmxsaWIyLnVybG9wZW4oaW1nbGluaykKIyAgICAgICAgICAgIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQwMjg2OTcvaG93LWRvLWktZG93bmxvYWQtYS16aXAtZmlsZS1pbi1weXRob24tdXNpbmctdXJsbGliMgogICAgICAgICAgICB3aXRoIG9wZW4oImltZ3MvIitwYXJ0c1sxXSsiLmpwZyIsICJ3YiIpIGFzIGxvY2FsX2ZpbGU6CiAgICAgICAgICAgICAgICBsb2NhbF9maWxlLndyaXRlKGltZy5yZWFkKCkpCiAgICAgICAgICAgIAoKZGVmIGdldEdhbGxlcmllcyhzb3VyY2UpOgogICAgZiA9IG9wZW4oc291cmNlLCAncicpCiAgICBnYWxsZXJpZXMgPSBbXQogICAgY291bnQgPSAwCiAgICBmb3IgbGluZSBpbiBmOgogICAgICAgIGlmICJjbGFzcz1cInBvc3RcIiIgaW4gbGluZToKICAgICAgICAgICAgY291bnQgKz0gMQogICAgICAgICAgICBwYXJ0cyA9IGxpbmUuc3BsaXQoIlwiIikKICAgICAgICAgICAgZ2FsbGluayA9ICJodHRwOi8vaW1ndXIuY29tL2dhbGxlcnkvIiArIHBhcnRzWzFdCiAgICAgICAgICAgIGdhbGxlcmllcy5hcHBlbmQoZ2FsbGluaykKICAgICAgICAgICAgcHJpbnQgY291bnQsICIgLSAiLCBnYWxsaW5rCiAgICByZXR1cm4gZ2FsbGVyaWVzCgpkZWYgZG93bmxvYWRHYWxsZXJpZXMoZ2FsbGVyaWVzLCBkZXN0KToKICAgIGZvciBnYWwgaW4gZ2FsbGVyaWVzOgogICAgICAgIGRvd25sb2FkZXIgPSBJbWd1ckdhbGxlcnlEb3dubG9hZGVyKGdhbCkKICAgICAgICBwcmludCAiVGhpcyBnYWxsZXJ5IGhhcyAlZCBpbWFnZXMiICUgZG93bmxvYWRlci5udW1faW1hZ2VzKCkKICAgICAgICBkb3dubG9hZGVyLnNhdmVfaW1hZ2VzKGRlc3QpCgpkZWYgZG93bmxvYWRBbmRFbnRyb3B5R2FsbGVyaWVzKGdhbGxlcmllcywgZGVzdCk6CiAgICBmb3IgZ2FsIGluIGdhbGxlcmllczoKICAgICAgICBkb3dubG9hZGVyID0gSW1ndXJHYWxsZXJ5RG93bmxvYWRlcihnYWwpCiAgICAgICAgZG93bmxvYWRlci5vbl9pbWFnZV9kb3dubG9hZChhcHBlbmRUb0NTVikKICAgICAgICBwcmludCAiVGhpcyBnYWxsZXJ5IGhhcyAlZCBpbWFnZXMiICUgZG93bmxvYWRlci5udW1faW1hZ2VzKCkKICAgICAgICBkb3dubG9hZGVyLnNhdmVfaW1hZ2VzKGRlc3QpCgoKZGVmIGFwcGVuZFRvQ1NWKGNvdW50LCB1cmwsIGZpbGVuYW1lKToKICAgICNvbmx5IGNhcmUgYWJvdXQgdGhlIGZpbGVuYW1lLCB0aGUgcmVzdCBpZ25vcmUKICAgIGVudHJvcHkgPSBlbnRyb3B5X29mX2ZpbGUoZmlsZW5hbWUpCiAgICBmaWxlc2l6ZSA9IG9zLnN0YXQoZmlsZW5hbWUpLnN0X3NpemUKCiAgICAjaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTQxMzkwL2V4dHJhY3RpbmctZXh0ZW5zaW9uLWZyb20tZmlsZW5hbWUtaW4tcHl0aG9uCiAgICBmaWxldHlwZSA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzFdCiAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZmlsZW5hbWUpCgogICAgc3RyaW5nID0gZmlsZW5hbWUgKyAiLCAiICsgZmlsZXR5cGUgKyAiLCAiICsgc3RyKGVudHJvcHkpICsgIiwgIiArIHN0cihmaWxlc2l6ZSkgKyAiXG4iCiMgICAgcHJpbnQgZmlsZW5hbWUsICIsICIsIGZpbGV0eXBlLCAiLCAiLCBlbnRyb3B5LCAiLCAiLCBmaWxlc2l6ZQoKICAgIHdpdGggb3BlbigidGVzdGRhdGEuY3N2IiwgImEiKSBhcyBteWZpbGU6CiAgICAgICAgbXlmaWxlLndyaXRlKHN0cmluZykKCmRlZiBzY3JhcGVEaXJlY3RvcnkoZGlyZWN0b3J5LCBvdXRwdXRmaWxlKToKICAgIGZvciBmaWxlbmFtZSBpbiBvcy5saXN0ZGlyKGRpcmVjdG9yeSk6CiAgICAgICAgcHJpbnQgInNjcmFwaW5nICIgKyBkaXJlY3RvcnkgKyBmaWxlbmFtZQogICAgICAgIGVudHJvcHlfb2ZfZmlsZV9jaHVua3MoZGlyZWN0b3J5ICsgZmlsZW5hbWUsIDEwMDAwLCBvdXRwdXRmaWxlKQoKZGVmIHNjcmFwZURpcmVjdG9yeVRvdGFscyhkaXJlY3RvcnksIG91dHB1dGZpbGUpOgogICAgb3V0ZmlsZSA9IG9wZW4ob3V0cHV0ZmlsZSwgInciKQogICAgZm9yIGZpbGVuYW1lIGluIG9zLmxpc3RkaXIoZGlyZWN0b3J5KToKICAgICAgICBwcmludCAic2NyYXBpbmcgIiArIGRpcmVjdG9yeSArIGZpbGVuYW1lCiAgICAgICAgZW50cm9weSA9IGVudHJvcHlfb2ZfZmlsZShkaXJlY3RvcnkgKyBmaWxlbmFtZSkKICAgICAgICBmaWxlc2l6ZSA9IG9zLnN0YXQoZGlyZWN0b3J5ICsgZmlsZW5hbWUpLnN0X3NpemUKICAgICAgICBmaWxldHlwZSA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzFdCgogICAgICAgIHN0cmluZyA9IGZpbGVuYW1lICsgIiwgIiArIGZpbGV0eXBlICsgIiwgIiArIHN0cihlbnRyb3B5KSArICIsICIgKyBzdHIoZmlsZXNpemUpICsgIiwgIiArICJcbiIKICAgICAgICBvdXRmaWxlLndyaXRlKHN0cmluZykKICAgIG91dGZpbGUuY2xvc2UoKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGlucHV0X2ZpbGUgPSBzeXMuYXJndlsxXQogICAgb3V0cHV0X2RpciA9IHN5cy5hcmd2WzJdCiAgICBkb3dubG9hZEFuZEVudHJvcHlHYWxsZXJpZXMoZ2V0R2FsbGVyaWVzKGlucHV0X2ZpbGUpLCBvdXRwdXRfZGlyKQo8fGZpbV9lbmR8Pg=="]
["bd77c4ab8f26762fe79df21ac284bd5ca0dca153-1","bd77c4ab8f26762fe79df21ac284bd5ca0dca153","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KIiIiCiAgQWlyUmFjZSBjb21wZXRpdGlvbiBpbiBWaWVubmEuIFNlZSByb2JvdGNoYWxsZW5nZS5vcmcKICB1c2FnZToKICAgICAgIC4vYWlycmFjZS5weSA8VE9ETz4KIiIiCmltcG9ydCBzeXMKaW1wb3J0IGRhdGV0aW1lCmltcG9ydCBtdWx0aXByb2Nlc3NpbmcKaW1wb3J0IGN2MgppbXBvcnQgbWF0aApmcm9tIHBhdmUgaW1wb3J0IFBhVkUsIGlzSUZyYW1lLCBmcmFtZU51bWJlciwgdGltZXN0YW1wLCBjb3JyZWN0VGltZVBlcmlvZApmcm9tIGFpcnJhY2UgaW1wb3J0IHByb2Nlc3NGcmFtZSwgYWxsU3RyaXBQb3Nlcwpmcm9tIHNvdXJjZWxvZ2dlciBpbXBvcnQgU291cmNlTG9nZ2VyCmZyb20gYXJkcm9uZTIgaW1wb3J0IEFSRHJvbmUyLCBNYW51YWxDb250cm9sRXhjZXB0aW9uLCBtYW51YWxDb250cm9sLCBub3JtYWxpemVBbmdsZVBJUEksIGRpc3RhbmNlCmltcG9ydCB2aWV3bG9nCmZyb20gbGluZSBpbXBvcnQgTGluZQpmcm9tIHBvc2UgaW1wb3J0IFBvc2UKZnJvbSBzdHJpcGxvYyBpbXBvcnQgU3RyaXBzTG9jYWxpc2F0aW9uLCBSRUZfQ0lSQ0xFX1JBRElVUwpmcm9tIHN0cmlwbG9jIGltcG9ydCBQQVRIX1NUUkFJR0hULCBQQVRIX1RVUk5fTEVGVCwgUEFUSF9UVVJOX1JJR0hUCgoKTUFYX0FMTE9XRURfU1BFRUQgPSAwLjgKU1RSSVBTX0ZBSUxVUkVfU1BFRUQgPSAwLjUgIyA/Pz8gc3BlZWQgd2hlbiBsb2NhbGlzYXRpb24gaXMgbm90IHVwZGF0ZWQgZnJvbSBsYXN0IGltYWdlIC4uLiBtYXliZSB0d28gaW1hZ2VzPz8KVFJBTlNJVElPTl9TUEVFRCA9IDAuNApOVU1fRkFTVF9TVFJJUFMgPSA0ICMgbm93IHRoZSBzYW1lIG51bWJlciBmb3Igc3RyYWlnaHQgYW5kIHR1cm4gc2VnbWVudHMgLT4gVE9ETyBzcGxpdApNQVhfQUxMT1dFRF9WSURFT19ERUxBWSA9IDIuMCAjIGluIHNlY29uZHMsIHRoZW4gaXQgd2lsbCB3YWl0IChkZXNpcmVkU3BlZWQgPSAwLjApCgpkZWYgdGltZU5hbWUoIHByZWZpeCwgZXh0ICk6CiAgZHQgPSBkYXRldGltZS5kYXRldGltZS5ub3coKQogIGZpbGVuYW1lID0gcHJlZml4ICsgZHQuc3RyZnRpbWUoIiV5JW0lZF8lSCVNJVMuIikgKyBleHQKICByZXR1cm4gZmlsZW5hbWUKCmdfcGF2ZSA9IE5vbmUKCmRlZiB3cmFwcGVyKCBwYWNrZXQgKToKICBnbG9iYWwgZ19wYXZlCiAgaWYgZ19wYXZlID09IE5vbmU6CiAgICBnX3BhdmUgPSBQYVZFKCkKICBnX3BhdmUuYXBwZW5kKCBwYWNrZXQgKQogIGhlYWRlcixwYXlsb2FkID0gZ19wYXZlLmV4dHJhY3QoKQogIHdoaWxlIHBheWxvYWQ6CiAgICBpZiBpc0lGcmFtZSggaGVhZGVyICk6CiAgICAgIHRtcEZpbGUgPSBvcGVuKCAidG1wLmJpbiIsICJ3YiIgKQogICAgICB0bXBGaWxlLndyaXRlKCBwYXlsb2FkICkKICAgICAgdG1wRmlsZS5mbHVzaCgpCiAgICAgIHRtcEZpbGUuY2xvc2UoKQogICAgICBjYXAgPSBjdjIuVmlkZW9DYXB0dXJlKCAidG1wLmJpbiIgKQogICAgICByZXQsIGZyYW1lID0gY2FwLnJlYWQoKQogICAgICBhc3NlcnQgcmV0CiAgICAgIGlmIHJldDoKICAgICAgICByZXR1cm4gKGZyYW1lTnVtYmVyKCBoZWFkZXIgKSwgdGltZXN0YW1wKGhlYWRlcikpLCBwcm9jZXNzRnJhbWUoIGZyYW1lLCBkZWJ1Zz1GYWxzZSApCiAgICBoZWFkZXIscGF5bG9hZCA9IGdfcGF2ZS5leHRyYWN0KCkKCmdfcXVldWVSZXN1bHRzID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCkKCmRlZiBnZXRPck5vbmUoKToKICBpZiBnX3F1ZXVlUmVzdWx0cy5lbXB0eSgpOgogICAgcmV0dXJuIE5vbmUKICByZXR1cm4gZ19xdWV1ZVJlc3VsdHMuZ2V0KCkKCgpjbGFzcyBBaXJSYWNlRHJvbmUoIEFSRHJvbmUyICk6CiAgZGVmIF9faW5pdF9fKCBzZWxmLCByZXBsYXlMb2c9Tm9uZSwgc3BlZWQgPSAwLjIsIHNraXBDb25maWd1cmU9RmFsc2UsIG1ldGFMb2c9Tm9uZSwgY29uc29sZT1Ob25lICk6CiAgICBzZWxmLmxvZ2dlZFZpZGVvUmVzdWx0ID0gTm9uZQogICAgc2VsZi5sYXN0SW1hZ2VSZXN1bHQgPSBOb25lCiAgICBzZWxmLnZpZGVvSGlnaFJlc29sdXRpb24gPSBGYWxzZQogICAgQVJEcm9uZTIuX19pbml0X18oIHNlbGYsIHJlcGxheUxvZywgc3BlZWQsIHNraXBDb25maWd1cmUsIG1ldGFMb2csIGNvbnNvbGUgKQogICAgaWYgcmVwbGF5TG9nID09IE5vbmU6CiAgICAgIG5hbWUgPSB0aW1lTmFtZSggImxvZ3Mvc3JjX2N2Ml8iLCAibG9nIiApIAogICAgICBtZXRhTG9nLndyaXRlKCJjdjI6ICIrbmFtZSsnXG4nICkKICAgICAgc2VsZi5sb2dnZWRWaWRlb1Jlc3VsdCA9IFNvdXJjZUxvZ2dlciggZ2V0T3JOb25lLCBuYW1lICkuZ2V0CiAgICAgIHNlbGYuc3RhcnRWaWRlbyggd3JhcHBlciwgZ19xdWV1ZVJlc3VsdHMsIHJlY29yZD1UcnVlLCBoaWdoUmVzb2x1dGlvbj1zZWxmLnZpZGVvSGlnaFJlc29sdXRpb24gKQogICAgZWxzZToKICAgICAgYXNzZXJ0IG1ldGFMb2cKICAgICAgc2VsZi5sb2dnZWRWaWRlb1Jlc3VsdCA9IFNvdXJjZUxvZ2dlciggTm9uZSwgbWV0YUxvZy5nZXRMb2coImN2MjoiKSApLmdldAogICAgICBzZWxmLnN0YXJ0VmlkZW8oIHJlY29yZD1UcnVlLCBoaWdoUmVzb2x1dGlvbj1zZWxmLnZpZGVvSGlnaFJlc29sdXRpb24gKQoKICBkZWYgdXBkYXRlKCBzZWxmLCBjbWQ9IkFUKkNPTVdERz0laSxcciIgKToKICAgIEFSRHJvbmUyLnVwZGF0ZSggc2VsZiwgY21kICkKICAgIGlmIHNlbGYubG9nZ2VkVmlkZW9SZXN1bHQgIT0gTm9uZToKICAgICAgc2VsZi5sYXN0SW1hZ2VSZXN1bHQgPSBzZWxmLmxvZ2dlZFZpZGVvUmVzdWx0KCkKCgpkZWYgY29tcGV0ZUFpclJhY2UoIGRyb25lLCBkZXNpcmVkSGVpZ2h0ID0gMS43ICk6CiAgbG9vcHMgPSBbXQogIGRyb25lLnNwZWVkID0gMC4xCiAgbWF4VmlkZW9EZWxheSA9IDAuMAogIG1heENvbnRyb2xHYXAgPSAwLjAKICBsb2MgPSBTdHJpcHNMb2NhbGlzYXRpb24oKQogIAogIHJlbWFpbmluZ0Zhc3RTdHJpcHMgPSAwCiAgZGVzaXJlZFNwZWVkID0gVFJBTlNJVElPTl9TUEVFRAogIHVwZGF0ZUZhaWxlZENvdW50ID0gMAoKICB0cnk6CiAgICBkcm9uZS53YWl0KDEuMCkKICAgIGRyb25lLnNldFZpZGVvQ2hhbm5lbCggZnJvbnQ9RmFsc2UgKSAgICAKICAgIGRyb25lLnRha2VvZmYoKQogICAgcG9zZUhpc3RvcnkgPSBbXQogICAgc3RhcnRUaW1lID0gZHJvbmUudGltZQogICAgd2hpbGUgZHJvbmUudGltZSA8IHN0YXJ0VGltZSArIDEuMDoKICAgICAgZHJvbmUudXBkYXRlKCJBVCpQQ01EPSVpLDAsMCwwLDAsMFxyIikgIyBkcm9uZS5ob3ZlcigxLjApCiAgICAgIHBvc2VIaXN0b3J5LmFwcGVuZCggKGRyb25lLnRpbWUsIChkcm9uZS5jb29yZFswXSwgZHJvbmUuY29vcmRbMV0sIGRyb25lLmhlYWRpbmcpLCAoZHJvbmUuYW5nbGVGQiwgZHJvbmUuYW5nbGVMUikpICkKICAgIG1hZ25ldG9PblN0YXJ0ID0gZHJvbmUubWFnbmV0b1s6M10KICAgIHByaW50ICJOQVZJLU9OIgogICAgcGF0aFR5cGUgPSBQQVRIX1RVUk5fTEVGVAogICAgdmlydHVhbFJlZkNpcmNsZSA9IE5vbmUKICAgIHN0YXJ0VGltZSA9IGRyb25lLnRpbWUKICAgIHN4LHN5LHN6LHNhID0gMCwwLDAsMAogICAgbGFzdFVwZGF0ZSA9IE5vbmUKICAgIHdoaWxlIGRyb25lLnRpbWUgPCBzdGFydFRpbWUgKyA2MDAuMDoKICAgICAgc3ogPSBtYXgoIC0wLjIsIG1pbiggMC4yLCBkZXNpcmVkSGVpZ2h0IC0gZHJvbmUuY29vcmRbMl0gKSkKICAgICAgc3ggPSBtYXgoIDAsIG1pbiggZHJvbmUuc3BlZWQsIGRlc2lyZWRTcGVlZCAtIGRyb25lLnZ4ICkpCgogICAgICBpZiBkcm9uZS5sYXN0SW1hZ2VSZXN1bHQ6CiAgICAgICAgbGFzdFVwZGF0ZSA9IGRyb25lLnRpbWUKICAgICAgICBhc3NlcnQgbGVuKCBkcm9uZS5sYXN0SW1hZ2VSZXN1bHQgKSA9PSAyIGFuZCBsZW4oIGRyb25lLmxhc3RJbWFnZVJlc3VsdFswXSApID09IDIsIGRyb25lLmxhc3RJbWFnZVJlc3VsdAogICAgICAgIChmcmFtZU51bWJlciwgdGltZXN0YW1wKSwgcmVjdHMgPSBkcm9uZS5sYXN0SW1hZ2VSZXN1bHQKICAgICAgICB2aWV3bG9nLmR1bXBDYW1lcmEoICJ0bXBfJTA0ZC5qcGciICUgKGZyYW1lTnVtYmVyLzE1LCksIDAgKQoKICAgICAgICAjIGtlZXAgaGlzdG9yeSBzbWFsbAogICAgICAgIHZpZGVvVGltZSA9IGNvcnJlY3RUaW1lUGVyaW9kKCB0aW1lc3RhbXAvMTAwMC4sIHJlZj1kcm9uZS50aW1lICkKICAgICAgICB2aWRlb0RlbGF5ID0gZHJvbmUudGltZSAtIHZpZGVvVGltZQogICAgICAgIGlmIHZpZGVvRGVsYXkgPiAxLjA6CiAgICAgICAgICBwcmludCAiIURBTkdFUiEgLSB2aWRlbyBkZWxheSIsIHZpZGVvRGVsYXkKICAgICAgICBtYXhWaWRlb0RlbGF5ID0gbWF4KCB2aWRlb0RlbGF5LCBtYXhWaWRlb0RlbGF5ICkKICAgICAgICB0b0RlbCA9IDAKICAgICAgICBmb3Igb2xkVGltZSwgb2xkUG9zZSwgb2xkQW5nbGVzIGluIHBvc2VIaXN0b3J5OgogICAgICAgICAgdG9EZWwgKz0gMQogICAgICAgICAgaWYgb2xkVGltZSA+PSB2aWRlb1RpbWU6CiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgcG9zZUhpc3RvcnkgPSBwb3NlSGlzdG9yeVs6dG9EZWxdCgogICAgICAgIHRpbHRDb21wZW5zYXRpb24gPSBQb3NlKGRlc2lyZWRIZWlnaHQqb2xkQW5nbGVzWzBdLCBkZXNpcmVkSGVpZ2h0Km9sZEFuZ2xlc1sxXSwgMCkgIyBUT0RPIHJlYWwgaGVpZ2h0PwogICAgICAgIHByaW50ICJGUkFNRSIsIGZyYW1lTnVtYmVyLzE1LCAiWyUuMWYgJS4xZl0iICUgKG1hdGguZGVncmVlcyhvbGRBbmdsZXNbMF0pLCBtYXRoLmRlZ3JlZXMob2xkQW5nbGVzWzFdKSksCiAgICAgICAgbG9jLnVwZGF0ZUZyYW1lKCBQb3NlKCAqb2xkUG9zZSApLmFkZCh0aWx0Q29tcGVuc2F0aW9uKSwgYWxsU3RyaXBQb3NlcyggcmVjdHMsIGhpZ2hSZXNvbHV0aW9uPWRyb25lLnZpZGVvSGlnaFJlc29sdXRpb24gKSApCiAgICAgICAgaWYgbG9jLnBhdGhUeXBlICE9IHBhdGhUeXBlOgogICAgICAgICAgcHJpbnQgIlRSQU5TIiwgcGF0aFR5cGUsICItPiIsIGxvYy5wYXRoVHlwZQogICAgICAgICAgaWYgcGF0aFR5cGUgPT0gUEFUSF9UVVJOX0xFRlQgYW5kIGxvYy5wYXRoVHlwZSA9PSBQQVRIX1NUUkFJR0hUOgogICAgICAgICAgICBpZiBsZW4obG9vcHMpID4gMDoKICAgICAgICAgICAgICBwcmludCAiTG9vcCAlZCwgdGltZSAlZCIgJSAobGVuKGxvb3BzKSwgZHJvbmUudGltZS1sb29wc1stMV0pCiAgICAgICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgICAgICAgICAgbG9vcHMuYXBwZW5kKCBkcm9uZS50aW1lICkKICAgICAgICAgIGlmIGRyb25lLm1hZ25ldG9bOjNdID09IG1hZ25ldG9PblN0YXJ0OgogICAgICAgICAgICBwcmludCAiISEhISEhISEgQ09NUEFTUyBGQUlMVVJFICEhISEhISEhIgogICAgICAgICAgcGF0aFR5cGUgPSBsb2MucGF0aFR5cGUKICAgICAgICAgIHByaW50ICItLS0tIgogICAgICAgICAgcmVtYWluaW5nRmFzdFN0cmlwcyA9IE5VTV9GQVNUX1NUUklQUwoKICAgICAgICBpZiBsb2MuY3Jvc3Npbmc6CiAgICAgICAgICBwcmludCAiWCIsIFRydWUsIHJlbWFpbmluZ0Zhc3RTdHJpcHMKICAgICAgICBlbHNlOgogICAgICAgICAgcHJpbnQgcGF0aFR5cGUsIGxvYy5wYXRoVXBkYXRlZCwgcmVtYWluaW5nRmFzdFN0cmlwcwogICAgICAgIGlmIG5vdCBsb2MucGF0aFVwZGF0ZWQ6CiAgICAgICAgICB1cGRhdGVGYWlsZWRDb3VudCArPSAxCiAgICAgICAgICBpZiB1cGRhdGVGYWlsZWRDb3VudCA+IDE6CiAgICAgICAgICAgIHByaW50ICJVUERBVEUgRkFJTEVEIiwgdXBkYXRlRmFpbGVkQ291bnQKICAgICAgICBlbHNlOgogICAgICAgICAgdXBkYXRlRmFpbGVkQ291bnQgPSAwCgogICAgICAgIGlmIHJlbWFpbmluZ0Zhc3RTdHJpcHMgPiAwOgogICAgICAgICAgcmVtYWluaW5nRmFzdFN0cmlwcyAtPSAxCiAgICAgICAgICBkZXNpcmVkU3BlZWQgPSBNQVhfQUxMT1dFRF9TUEVFRAogICAgICAgICAgaWYgbm90IGxvYy5wYXRoVXBkYXRlZCBhbmQgbm90IGxvYy5jcm9zc2luZzoKICAgICAgICAgICAgZGVzaXJlZFNwZWVkID0gU1RSSVBTX0ZBSUxVUkVfU1BFRUQKICAgICAgICBlbHNlOgogICAgICAgICAgZGVzaXJlZFNwZWVkID0gVFJBTlNJVElPTl9TUEVFRAogICAgICAgIGlmIHZpZGVvRGVsYXkgPiBNQVhfQUxMT1dFRF9WSURFT19ERUxBWToKICAgICAgICAgIGRlc2lyZWRTcGVlZCA9IDAuMAoKICAgICAgICBpZiBkcm9uZS5iYXR0ZXJ5IDwgMTA6CiAgICAgICAgICBwcmludCAiQkFUVEVSWSBMT1chIiwgZHJvbmUuYmF0dGVyeQoKICAgICAgICAjIGhlaWdodCBkZWJ1Z2dpbmcKICAgICAgICAjcHJpbnQgIkhFSUdIVFx0JWRcdCVkXHQlLjJmXHQlZFx0JWRcdCVkXHQlZFx0JWRcdCVkIiAlIHR1cGxlKFttYXgoWzBdK1t3IGZvciAoKHgseSksKHcsaCksYSkgaW4gcmVjdHNdKV0gKyBsaXN0KGRyb25lLmFsdGl0dWRlRGF0YVs6NF0pICsgbGlzdChkcm9uZS5wcmVzc3VyZSkgKQoKICAgICAgICBmb3Igc3AgaW4gYWxsU3RyaXBQb3NlcyggcmVjdHMsIGhpZ2hSZXNvbHV0aW9uPWRyb25lLnZpZGVvSGlnaFJlc29sdXRpb24gKToKICAgICAgICAgIHNQb3NlID0gUG9zZSggKm9sZFBvc2UgKS5hZGQodGlsdENvbXBlbnNhdGlvbikuYWRkKCBzcCApCiAgICAgICAgICB2aWV3bG9nLmR1bXBCZWFjb24oIHNQb3NlLmNvb3JkKCksIGluZGV4PTMgKQogICAgICAgICAgdmlld2xvZy5kdW1wT2JzdGFjbGVzKCBbWyhzUG9zZS54LTAuMTUqbWF0aC5jb3Moc1Bvc2UuaGVhZGluZyksIHNQb3NlLnktMC4xNSptYXRoLnNpbihzUG9zZS5oZWFkaW5nKSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc1Bvc2UueCswLjE1Km1hdGguY29zKHNQb3NlLmhlYWRpbmcpLCBzUG9zZS55KzAuMTUqbWF0aC5zaW4oc1Bvc2UuaGVhZGluZykpXV0gKQoKICAgICAgcmVmQ2lyY2xlLHJlZkxpbmUgPSBsb2MuZ2V0UmVmQ2lyY2xlTGluZSggUG9zZShkcm9uZS5jb29yZFswXSwgZHJvbmUuY29vcmRbMV0sIGRyb25lLmhlYWRpbmcpICkKICAgICAgaWYgcmVmQ2lyY2xlID09IE5vbmUgYW5kIHJlZkxpbmUgPT0gTm9uZSBhbmQgdmlydHVhbFJlZkNpcmNsZSAhPSBOb25lOgogICAgICAgIHJlZkNpcmNsZSA9IHZpcnR1YWxSZWZDaXJjbGUKICAgICAgIyBlcnJvciBkZWZpbml0aW9uIC4uLiBpZiB5b3Ugc3Vic3RyYWN0IHRoYXQgeW91IGdldCBkZXNpcmVkIHBvc2l0aW9uIG9yIGFuZ2xlCiAgICAgICMgZXJyb3IgaXMgdGFrZW4gZnJvbSB0aGUgcGF0aCBwb2ludCBvZiB2aWV3LCB4LXBhdGggZGlyZWN0aW9uLCB5LXBvc2l0aXZlIGxlZnQsIGFuZ2xlLWFudGljbG9ja3dpc2UKICAgICAgZXJyWSwgZXJyQSA9IDAuMCwgMC4wCiAgICAgIGFzc2VydCByZWZDaXJjbGUgPT0gTm9uZSBvciByZWZMaW5lID09IE5vbmUgIyB0aGV5IGNhbm5vdCBiZSBib3RoIGFjdGl2ZSBhdCB0aGUgc2FtZSB0aW1lCiAgICAgIGlmIHJlZkNpcmNsZToKICAgICAgICBpZiBwYXRoVHlwZSA9PSBQQVRIX1RVUk5fTEVGVDoKICAgICAgICAgIGVyclkgPSByZWZDaXJjbGVbMV0gLSBtYXRoLmh5cG90KCBkcm9uZS5jb29yZFswXS1yZWZDaXJjbGVbMF1bMF0sIGRyb25lLmNvb3JkWzFdLXJlZkNpcmNsZVswXVsxXSApCiAgICAgICAgICBlcnJBID0gbm9ybWFsaXplQW5nbGVQSVBJKCAtIG1hdGguYXRhbjIoIHJlZkNpcmNsZVswXVsxXSAtIGRyb25lLmNvb3JkWzFdLCByZWZDaXJjbGVbMF1bMF0gLSBkcm9uZS5jb29yZFswXSApIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gbWF0aC5yYWRpYW5zKC05MCkgKyBkcm9uZS5oZWFkaW5nICkKICAgICAgICBpZiBwYXRoVHlwZSA9PSBQQVRIX1RVUk5fUklHSFQ6CiAgICAgICAgICBlcnJZID0gbWF0aC5oeXBvdCggZHJvbmUuY29vcmRbMF0tcmVmQ2lyY2xlWzBdWzBdLCBkcm9uZS5jb29yZFsxXS1yZWZDaXJjbGVbMF1bMV0gKSAtIHJlZkNpcmNsZVsxXQogICAgICAgICAgZXJyQSA9IG5vcm1hbGl6ZUFuZ2xlUElQSSggLSBtYXRoLmF0YW4yKCByZWZDaXJjbGVbMF1bMV0gLSBkcm9uZS5jb29yZFsxXSwgcmVmQ2lyY2xlWzBdWzBdIC0gZHJvbmUuY29vcmRbMF0gKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIG1hdGgucmFkaWFucyg5MCkgKyBkcm9uZS5oZWFkaW5nICkKICAgICAgaWYgcmVmTGluZToKICAgICAgICBlcnJZID0gcmVmTGluZS5zaWduZWREaXN0YW5jZSggZHJvbmUuY29vcmQgKQogICAgICAgIGVyckEgPSBub3JtYWxpemVBbmdsZVBJUEkoIGRyb25lLmhlYWRpbmcgLSByZWZMaW5lLmFuZ2xlICkKCiAgICAgICMgZ2V0IHRoZSBoZWlnaHQgZmlyc3QKPHxmaW1faG9sZXw+CiAgICAgICAgaWYgZHJvbmUuY29vcmRbMl0gPiBkZXNpcmVkSGVpZ2h0IC0gMC4xOgogICAgICAgICAgcHJpbnQgIlVTSU5HIFZJUlRVQUwgTEVGVCBUVVJOIENJUkNMRSEiCiAgICAgICAgICBjaXJjQ2VudGVyID0gUG9zZSggZHJvbmUuY29vcmRbMF0sIGRyb25lLmNvb3JkWzFdLCBkcm9uZS5oZWFkaW5nICkuYWRkKCBQb3NlKDAuMCwgUkVGX0NJUkNMRV9SQURJVVMsIDAgKSkuY29vcmQoKQogICAgICAgICAgdmlld2xvZy5kdW1wQmVhY29uKCBjaXJjQ2VudGVyLCBpbmRleD0wICkKICAgICAgICAgIHZpcnR1YWxSZWZDaXJjbGUgPSBjaXJjQ2VudGVyLCBSRUZfQ0lSQ0xFX1JBRElVUwoKICAgICAgIyBlcnJvciBjb3JyZWN0aW9uCiAgICAgICMgdGhlIGdvYWwgaXMgdG8gaGF2ZSBlcnJZIGFuZCBlcnJBIHplcm8gaW4gMSBzZWNvbmQgLT4gZXJyWSBkZWZpbmVzIGRlc2lyZWQgc3BlZWQgYXQgZ2l2ZW4gZGlzdGFuY2UgZnJvbSBwYXRoCiAgICAgIHN5ID0gbWF4KCAtMC4yLCBtaW4oIDAuMiwgLWVyclktZHJvbmUudnkgKSkvMi4wCiAgICAgIAogICAgICAjIHRoZXJlIGlzIG5vIGRyb25lLnZhIChpLmUuIGRlcml2YXRpdmUgb2YgaGVhZGluZykgYXZhaWxhYmxlIGF0IHRoZSBtb21lbnQgLi4uIAogICAgICBzYSA9IG1heCggLTAuMSwgbWluKCAwLjEsIC1lcnJBLzIuMCApKSoxLjM1KihkZXNpcmVkU3BlZWQvMC40KSAjIG9yaWdpbmFsbHkgc2V0IGZvciAwLjQ9T0sKCiMgICAgICBwcmludCAiJTAuMmZcdCVkXHQlMC4yZlx0JTAuMmZcdCUwLjJmIiAlIChlcnJZLCBpbnQobWF0aC5kZWdyZWVzKGVyckEpKSwgZHJvbmUudnksIHN5LCBzYSkKICAgICAgcHJldlRpbWUgPSBkcm9uZS50aW1lCiAgICAgIGRyb25lLm1vdmVYWVpBKCBzeCwgc3ksIHN6LCBzYSApCiAgICAgIG1heENvbnRyb2xHYXAgPSBtYXgoIGRyb25lLnRpbWUgLSBwcmV2VGltZSwgbWF4Q29udHJvbEdhcCApCiAgICAgIHBvc2VIaXN0b3J5LmFwcGVuZCggKGRyb25lLnRpbWUsIChkcm9uZS5jb29yZFswXSwgZHJvbmUuY29vcmRbMV0sIGRyb25lLmhlYWRpbmcpLCAoZHJvbmUuYW5nbGVGQiwgZHJvbmUuYW5nbGVMUikpICkKICAgIHByaW50ICJOQVZJLU9GRiIsIGRyb25lLnRpbWUgLSBzdGFydFRpbWUKICAgIGRyb25lLmhvdmVyKDAuNSkKICAgIGRyb25lLmxhbmQoKQogICAgZHJvbmUuc2V0VmlkZW9DaGFubmVsKCBmcm9udD1UcnVlICkgICAgCiAgZXhjZXB0IE1hbnVhbENvbnRyb2xFeGNlcHRpb24sIGU6CiAgICBwcmludCAiTWFudWFsQ29udHJvbEV4Y2VwdGlvbiIKICAgIGlmIGRyb25lLmN0cmxTdGF0ZSA9PSAzOiAjIENUUkxfRkxZSU5HPTMgLi4uIGkuZS4gc3RvcCB0aGUgY3VycmVudCBtb3Rpb24KICAgICAgZHJvbmUuaG92ZXIoMC4xKQogICAgZHJvbmUubGFuZCgpCiAgZHJvbmUud2FpdCgxLjApCiAgZHJvbmUuc3RvcFZpZGVvKCkKICBwcmludCAiTWF4VmlkZW9EZWxheSIsIG1heFZpZGVvRGVsYXkKICBwcmludCAiTWF4Q29udHJvbEdhcCIsIG1heENvbnRyb2xHYXAKICBwcmludCAiTG9vcHMiLCBsZW4obG9vcHMpLTEsIFtpbnQobm93LXByZXYpIGZvciBwcmV2LG5vdyBpbiB6aXAobG9vcHNbOi0xXSxsb29wc1sxOl0pXQogIHByaW50ICJCYXR0ZXJ5IiwgZHJvbmUuYmF0dGVyeQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6IAogIGltcG9ydCBsYXVuY2hlcgogIGxhdW5jaGVyLmxhdW5jaCggc3lzLmFyZ3YsIEFpclJhY2VEcm9uZSwgY29tcGV0ZUFpclJhY2UgKQoKPHxmaW1fc3VmZml4fD4KICAgICAgaWYgZHJvbmUuY29vcmRbMl0gPCBkZXNpcmVkSGVpZ2h0IC0gMC4xIGFuZCBkcm9uZS50aW1lLXN0YXJ0VGltZSA8IDUuMDoKICAgICAgICBzeCA9IDAuMAogICAgICBpZiByZWZDaXJjbGUgPT0gTm9uZSBhbmQgcmVmTGluZSA9PSBOb25lIGFuZCB2aXJ0dWFsUmVmQ2lyY2xlID09IE5vbmU6CiAgICAgICAgc3ggPSAwLjAgIyB3YWl0IGZvciBaLXVwCjx8ZmltX2VuZHw+"]
["e7438e77a2e5f4b3b1b28090a11657b92d3dde57-1","e7438e77a2e5f4b3b1b28090a11657b92d3dde57","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDEuMTEuMSBvbiAyMDE3LTA1LTI3IDE0OjUzCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscwoKZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMsIG1vZGVscwppbXBvcnQgZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbgoKCmNsYXNzIE1pZ3JhdGlvbihtaWdyYXRpb25zLk1pZ3JhdGlvbik6CgogICAgaW5pdGlhbCA9IFRydWUKCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5zd2FwcGFibGVfZGVwZW5kZW5jeShzZXR0aW5ncy5BVVRIX1VTRVJfTU9ERUwpLAogICAgXQoKICAgIG9wZXJhdGlvbnMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5DcmVhdGVNb2RlbCgKICAgICAgICAgICAgbmFtZT0nQXBwb2ludG1lbnRTbG90JywKICAgICAgICAgICAgZmllbGRzPVsKICAgICAgICAgICAgICAgICgnaWQnLCBtb2RlbHMuQXV0b0ZpZWxkKGF1dG9fY3JlYXRlZD1UcnVlLCBwcmltYXJ5X2tleT1UcnVlLCBzZXJpYWxpemU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nSUQnKSksCiAgICAgICAgICAgICAgICAoJ2RhdGUnLCBtb2RlbHMuRGF0ZUZpZWxkKCkpLAogICAgICAgICAgICAgICAgKCdzdGFydF90aW1lJywgbW9kZWxzLlRpbWVGaWVsZCgpKSwKICAgICAgICAgICAgICAgICgnZW5kX3RpbWUnLCBtb2RlbHMuVGltZUZpZWxkKCkpLAogICAgICAgICAgICAgICAgKCdzb2Z0X2RlbGV0ZWQnLCBtb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UpKSwKICAgICAgICAgICAgICAgICgndXNlcicsIG1vZGVscy5Gb3JlaWduS2V5KG9uX2RlbGV0ZT1kamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uLkNBU0NBREUsIHJlbGF0ZWRfbmFtZT0nc2xvdHMnLCB0bz1zZXR0aW5ncy5BVVRIX1VTRVJfTU9ERUwpKSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgb3B0aW9ucz17CiAgICAgICAgICAgICAgICAnZGJfdGFibGUnOiAnYXBwb2ludG1lbnRfc2xvdHMnLAogICAgICAgICAgICB9LAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5DcmVhdGVNb2RlbCgKICAgICAgICAgICAgbmFtZT0nRGVtb0FwcG9pbnRtZW50JywKICAgICAgICAgICAgZmllbGRzPVsKICAgICAgICAgICAgICAgICgnaWQnLCBtb2RlbHMuQXV0b0ZpZWxkKGF1dG9fY3JlYXRlZD1UcnVlLCBwcmltYXJ5X2tleT1UcnVlLCBzZXJpYWxpemU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nSUQnKSksCiAgICAgICAgICAgICAgICAoJ2RhdGUnLCBtb2RlbHMuRGF0ZUZpZWxkKCkpLAogICAgICAgICAgICAgICAgKCdzdGFydF90aW1lJywgbW9kZWxzLlRpbWVGaWVsZCgpKSwKICAgICAgICAgICAgICAgICgnY2xpZW50X2VtYWlsJywgbW9kZWxzLkVtYWlsRmllbGQobWF4X2xlbmd0aD0yNTUsIHZlcmJvc2VfbmFtZT0nZW1haWwgYWRkcmVzcycpKSwKICAgICAgICAgICAgICAgICgnc2NoZWR1bGVkJywgbW9kZWxzLkJvb2xlYW5GaWVsZChkZWZhdWx0PUZhbHNlKSksCiAgICAgICAgICAgICAgICAoJ3NvZnRfZGVsZXRlZCcsIG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdD1GYWxzZSkpLAogICAgICAgICAgICAgICAgKCd1c2VyJywgbW9kZWxzLkZvcmVpZ25LZXkoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUsIG9uX2RlbGV0ZT1kamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uLkNBU0NBREUsIHJlbGF0ZWRfbmFtZT0nYXBwb2ludG1lbnRzJywgdG89c2V0dGluZ3MuQVVUSF9VU0VSX01PREVMKSksCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG9wdGlvbnM9ewogICAgICAgICAgICAgICAgJ2RiX3RhYmxlJzogJ2FwcG9pbnRtZW50cycsCiAgICAgICAgICAgIH0sCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkNyZWF0ZU1vZGVsKAogICAgICAgICAgICBuYW1lPSdVc2VyQ2FsZW5kZXInLAogICAgICAgICAgICBmaWVsZHM9WwogICAgICAgICAgICAgICAgKCdpZCcsIG1vZGVscy5BdXRvRmllbGQoYXV0b19jcmVhdGVkPVRydWUsIHByaW1hcnlfa2V5PVRydWUsIHNlcmlhbGl6ZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdJRCcpKSwKICAgICAgICAgICAgICAgICgnY2FsZW5kZXJfaWQnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjU1KSksCjx8ZmltX2hvbGV8PgogICAgICAgICAgICBdLAogICAgICAgICksCiAgICBdCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAoJ3JlZnJlc2hfdG9rZW4nLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjU1KSksCiAgICAgICAgICAgICAgICAoJ3VzZXInLCBtb2RlbHMuRm9yZWlnbktleShvbl9kZWxldGU9ZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbi5DQVNDQURFLCByZWxhdGVkX25hbWU9J2NhbGVkZXInLCB0bz1zZXR0aW5ncy5BVVRIX1VTRVJfTU9ERUwpKSwKPHxmaW1fZW5kfD4="]
["ecd33646638a262b8af1e7cb06e9cd5fb663a95a-1","ecd33646638a262b8af1e7cb06e9cd5fb663a95a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwppbXBvcnQgYXJncGFyc2UKPHxmaW1faG9sZXw+CmZyb20gbGliIGltcG9ydCBoeWJyaXNfcmVxdWVzdHNfaGVscGVyCmZyb20gbGliIGltcG9ydCBsb2dnaW5nX2hlbHBlcgpmcm9tIGxpYiBpbXBvcnQgcmVxdWVzdHNfaGVscGVyCgojIHNldHMgKHRlbXBvcmFyaWx5KSBhIGxvZ2dlciB0byByZXF1ZXN0ZWQgbGV2ZWwKIyBpZiB5b3Ugd2FudCB0byBzZXQgYSBwZXJtYW5lbnQgbG9nZ2VyIGxldmVsIGFkZCB0byBsb2NhbC5wcm9wZXJ0aWVzIGxpbmVzIGxpa2UgYmVsb3c6CiMgbG9nNGoyLmxvZ2dlci5zb21lVW5pcXVlTmFtZS5uYW1lID0gb3JnLnNwcmluZ2ZyYW1ld29yay5pbnRlZ3JhdGlvbgojIGxvZzRqMi5sb2dnZXIuc29tZVVuaXF1ZU5hbWUubGV2ZWwgPSBJTkZPCgpwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcignU2NyaXB0IHRoYXQgY2hhbmdlcyBsb2c0ajIgbG9nZ2VyIGxldmVscycpCmh5YnJpc19hcmdwYXJzZV9oZWxwZXIuYWRkX2h5YnJpc19oYWNfYXJndW1lbnRzKHBhcnNlcikKbG9nZ2luZ19oZWxwZXIuYWRkX2xvZ2dpbmdfYXJndW1lbnRzX3RvX3BhcnNlcihwYXJzZXIpCnBhcnNlci5hZGRfYXJndW1lbnQoJ2xvZ2dlcicsIGhlbHA9J2xvZ2dlciBuYW1lJykKcGFyc2VyLmFkZF9hcmd1bWVudCgnbGV2ZWwnLCBoZWxwPSdsb2dnZXIgbGV2ZWwnLCBjaG9pY2VzPVsnQUxMJywgJ09GRicsICdERUJVRycsICdJTkZPJywgJ1dBUk4nLCAnRVJST1InLCAnRkFUQUwnLCAnVFJBQ0UnXSkKYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCmxvZ2dpbmcuZGVidWcoZidDaGFuZ2luZyBsb2dnZXIge2FyZ3MubG9nZ2VyfSBsZXZlbCB0byB7YXJncy5sZXZlbH0nKQoKc2Vzc2lvbiwgYWRkcmVzcyA9IHJlcXVlc3RzX2hlbHBlci5nZXRfc2Vzc2lvbl93aXRoX2Jhc2ljX2h0dHBfYXV0aF9hbmRfY2xlYW5lZF9hZGRyZXNzKGFyZ3MuYWRkcmVzcykKY3JlZGVudGlhbHMgPSB7J3VzZXInOiBhcmdzLnVzZXIsICdwYXNzd29yZCc6IGFyZ3MucGFzc3dvcmR9Cmh5YnJpc19yZXF1ZXN0c19oZWxwZXIubG9nX2ludG9faGFjX2FuZF9yZXR1cm5fY3NyZl9vcl9leGl0KHNlc3Npb24sIGFkZHJlc3MsIGNyZWRlbnRpYWxzKQoKc2NyaXB0X2dldF9yZXN1bHQgPSBzZXNzaW9uLmdldChhZGRyZXNzICsgJy9wbGF0Zm9ybS9sb2c0aicpCnNjcmlwdF9jc3JmX3Rva2VuID0gcmUuc2VhcmNoKHInbmFtZT0iX2NzcmYiXHMrdmFsdWU9IiguKz8pIlxzKi8+Jywgc2NyaXB0X2dldF9yZXN1bHQudGV4dCkuZ3JvdXAoMSkKCmZvcm1fZGF0YSA9IHsnbG9nZ2VyTmFtZSc6IGFyZ3MubG9nZ2VyLCAnbGV2ZWxOYW1lJzogYXJncy5sZXZlbCwgJ19jc3JmJzogc2NyaXB0X2NzcmZfdG9rZW59CmxvZ2dpbmcuZGVidWcoJy4uLmV4ZWN1dGluZy4uLicpCnNjcmlwdF9wb3N0X3Jlc3VsdCA9IHNlc3Npb24ucG9zdChhZGRyZXNzICsgJy9wbGF0Zm9ybS9sb2c0ai9jaGFuZ2VMZXZlbCcsIGRhdGE9Zm9ybV9kYXRhKQpsb2dnaW5nLmRlYnVnKCdsb2dnZXIgbGV2ZWwgY2hhbmdlZCcpCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBsb2dnaW5nCmltcG9ydCByZQoKZnJvbSBsaWIgaW1wb3J0IGh5YnJpc19hcmdwYXJzZV9oZWxwZXIKPHxmaW1fZW5kfD4="]
["ecd33646638a262b8af1e7cb06e9cd5fb663a95a-2","ecd33646638a262b8af1e7cb06e9cd5fb663a95a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwppbXBvcnQgYXJncGFyc2UKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHJlCgpmcm9tIGxpYiBpbXBvcnQgaHlicmlzX2FyZ3BhcnNlX2hlbHBlcgpmcm9tIGxpYiBpbXBvcnQgaHlicmlzX3JlcXVlc3RzX2hlbHBlcgpmcm9tIGxpYiBpbXBvcnQgbG9nZ2luZ19oZWxwZXIKZnJvbSBsaWIgaW1wb3J0IHJlcXVlc3RzX2hlbHBlcgoKIyBzZXRzICh0ZW1wb3JhcmlseSkgYSBsb2dnZXIgdG8gcmVxdWVzdGVkIGxldmVsCiMgaWYgeW91IHdhbnQgdG8gc2V0IGEgcGVybWFuZW50IGxvZ2dlciBsZXZlbCBhZGQgdG8gbG9jYWwucHJvcGVydGllcyBsaW5lcyBsaWtlIGJlbG93OgojIGxvZzRqMi5sb2dnZXIuc29tZVVuaXF1ZU5hbWUubmFtZSA9IG9yZy5zcHJpbmdmcmFtZXdvcmsuaW50ZWdyYXRpb24KIyBsb2c0ajIubG9nZ2VyLnNvbWVVbmlxdWVOYW1lLmxldmVsID0gSU5GTwoKcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoJ1NjcmlwdCB0aGF0IGNoYW5nZXMgbG9nNGoyIGxvZ2dlciBsZXZlbHMnKQpoeWJyaXNfYXJncGFyc2VfaGVscGVyLmFkZF9oeWJyaXNfaGFjX2FyZ3VtZW50cyhwYXJzZXIpCmxvZ2dpbmdfaGVscGVyLmFkZF9sb2dnaW5nX2FyZ3VtZW50c190b19wYXJzZXIocGFyc2VyKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCdsb2dnZXInLCBoZWxwPSdsb2dnZXIgbmFtZScpCnBhcnNlci5hZGRfYXJndW1lbnQoJ2xldmVsJywgaGVscD0nbG9nZ2VyIGxldmVsJywgY2hvaWNlcz1bJ0FMTCcsICdPRkYnLCAnREVCVUcnLCAnSU5GTycsICdXQVJOJywgJ0VSUk9SJywgJ0ZBVEFMJywgJ1RSQUNFJ10pCmFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCgpsb2dnaW5nLmRlYnVnKGYnQ2hhbmdpbmcgbG9nZ2VyIHthcmdzLmxvZ2dlcn0gbGV2ZWwgdG8ge2FyZ3MubGV2ZWx9JykKCnNlc3Npb24sIGFkZHJlc3MgPSByZXF1ZXN0c19oZWxwZXIuZ2V0X3Nlc3Npb25fd2l0aF9iYXNpY19odHRwX2F1dGhfYW5kX2NsZWFuZWRfYWRkcmVzcyhhcmdzLmFkZHJlc3MpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY3JlZGVudGlhbHMgPSB7J3VzZXInOiBhcmdzLnVzZXIsICdwYXNzd29yZCc6IGFyZ3MucGFzc3dvcmR9Cmh5YnJpc19yZXF1ZXN0c19oZWxwZXIubG9nX2ludG9faGFjX2FuZF9yZXR1cm5fY3NyZl9vcl9leGl0KHNlc3Npb24sIGFkZHJlc3MsIGNyZWRlbnRpYWxzKQoKc2NyaXB0X2dldF9yZXN1bHQgPSBzZXNzaW9uLmdldChhZGRyZXNzICsgJy9wbGF0Zm9ybS9sb2c0aicpCjx8ZmltX2VuZHw+"]
["ecd33646638a262b8af1e7cb06e9cd5fb663a95a-3","ecd33646638a262b8af1e7cb06e9cd5fb663a95a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwppbXBvcnQgYXJncGFyc2UKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHJlCgpmcm9tIGxpYiBpbXBvcnQgaHlicmlzX2FyZ3BhcnNlX2hlbHBlcgpmcm9tIGxpYiBpbXBvcnQgaHlicmlzX3JlcXVlc3RzX2hlbHBlcgpmcm9tIGxpYiBpbXBvcnQgbG9nZ2luZ19oZWxwZXIKZnJvbSBsaWIgaW1wb3J0IHJlcXVlc3RzX2hlbHBlcgoKIyBzZXRzICh0ZW1wb3JhcmlseSkgYSBsb2dnZXIgdG8gcmVxdWVzdGVkIGxldmVsCiMgaWYgeW91IHdhbnQgdG8gc2V0IGEgcGVybWFuZW50IGxvZ2dlciBsZXZlbCBhZGQgdG8gbG9jYWwucHJvcGVydGllcyBsaW5lcyBsaWtlIGJlbG93OgojIGxvZzRqMi5sb2dnZXIuc29tZVVuaXF1ZU5hbWUubmFtZSA9IG9yZy5zcHJpbmdmcmFtZXdvcmsuaW50ZWdyYXRpb24KIyBsb2c0ajIubG9nZ2VyLnNvbWVVbmlxdWVOYW1lLmxldmVsID0gSU5GTwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcignU2NyaXB0IHRoYXQgY2hhbmdlcyBsb2c0ajIgbG9nZ2VyIGxldmVscycpCmh5YnJpc19hcmdwYXJzZV9oZWxwZXIuYWRkX2h5YnJpc19oYWNfYXJndW1lbnRzKHBhcnNlcikKbG9nZ2luZ19oZWxwZXIuYWRkX2xvZ2dpbmdfYXJndW1lbnRzX3RvX3BhcnNlcihwYXJzZXIpCjx8ZmltX2VuZHw+"]
["01ce3442dcad2c7d03279917fc6d03d79fd4e538-1","01ce3442dcad2c7d03279917fc6d03d79fd4e538",{"$cut":{"chars":19000,"head":"PHxmaW1fcHJlZml4fD4KCgojIFN1aXQgQ29kZQojIEF1dGhvcjogQ2FsZWIgV29sZmUKIyBEYXRlIG9mIENyZWF0aW9uOiA2LzIvMjAxOAppbXBvcnQgdGltZQppbXBvcnQgQWRhZnJ1aXRfTUNQMzAwOAppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBuZW9waXhlbCBpbXBvcnQgKgppbXBvcnQgYW5pbWF0aW9uICNhbmltYXRpb24gYWJzdHJhY3QgY2xhc3MKaW1wb3J0IHNlY3Rpb24gI3NlY3Rpb25zIG9mIHRoZSBzdWl0IHRvIGxpZ2h0IHVwCmZyb20gc3RlcGFuaW1hdGlvbiBpbXBvcnQgKiAjc2ltcGxlIHN0ZXAgYW5pbWF0aW9uCmZyb20gc3BlY3RydW1hbmFseXplciBpbXBvcnQgU3BlY3RydW1BbmFseXplcgo8fGZpbV9ob2xlfD4KCgoKY2xhc3MgU3VpdDoKCglkZWYgX19pbml0X18oc2VsZik6CgkJIyBMRUQgc3RyaXAgY29uZmlndXJhdGlvbjoKICAgICAgICAJTEVEX0NPVU5UICAgICAgPSA0NDIgICAgIyBOdW1iZXIgb2YgTEVEIHBpeGVscy4KICAgIAkJTEVEX1BJTiAgICAgICAgPSAxOCAgICAgICMgR1BJTyBwaW4gY29ubmVjdGVkIHRvIHRoZSBwaXhlbHMgKDE4IHVzZXMgUFdNISkuCiAgICAJCUxFRF9GUkVRX0haICAgID0gODAwMDAwICAjIExFRCBzaWduYWwgZnJlcXVlbmN5IGluIGhlcnR6ICh1c3VhbGx5IDgwMGtoeikKICAgIAkJTEVEX0RNQSAgICAgICAgPSAxMCAgICAgICMgRE1BIGNoYW5uZWwgdG8gdXNlIGZvciBnZW5lcmF0aW5nIHNpZ25hbCAodHJ5IDEwKQogICAgCQlMRURfQlJJR0hUTkVTUyA9IDY0ICAgICAjIFNldCB0byAwIGZvciBkYXJrZXN0IGFuZCAyNTUgZm9yIGJyaWdodGVzdAogICAgCQlMRURfSU5WRVJUICAgICA9IEZhbHNlICAgIyBUcnVlIHRvIGludmVydCB0aGUgc2lnbmFsICh3aGVuIHVzaW5nIE5QTiB0cmFuc2lzdG9yIGxldmVsIHNoaWZ0KQogICAgCQlMRURfQ0hBTk5FTCAgICA9IDAgICAgICAgIyBzZXQgdG8gJzEnIGZvciBHUElPcyAxMywgMTksIDQxLCA0NSBvciA1MwogICAgCQlMRURfU1RSSVAgICAgICA9IHdzLlNLNjgxMl9TVFJJUF9HUkJXCgkJc2VsZi5zdHJpcCA9IEFkYWZydWl0X05lb1BpeGVsKExFRF9DT1VOVCwgTEVEX1BJTiwgTEVEX0ZSRVFfSFosIExFRF9ETUEsIExFRF9JTlZFUlQsIExFRF9CUklHSFRORVNTLCBMRURfQ0hBTk5FTCkgIyBSR0IgU3RyaXAKCQkjc2VsZi5zdHJpcCA9IEFkYWZydWl0X05lb1BpeGVsKExFRF9DT1VOVCwgTEVEX1BJTiwgTEVEX0ZSRVFfSFosIExFRF9ETUEsIExFRF9JTlZFUlQsIExFRF9CUklHSFRORVNTLCBMRURfQ0hBTk5FTCwgTEVEX1NUUklQKSAjIFJHQlcgU3RyaXAKCQlzZWxmLmJhY2tSaWdodFRvcCA9IHNlY3Rpb24uU2VjdGlvbigiYmFja1JpZ2h0IiwgMCwyNixUcnVlLCJTdGVwR3JlZW4iKSNTdGFydGluZyBwb2ludCBVcAoJCXNlbGYuYmFja1JpZ2h0Qm90dG9tID0gc2VjdGlvbi5TZWN0aW9uKCJiYWNrUmlnaHQiLCAyNiw1MyxGYWxzZSwiU3RlcEdyZWVuIikgI1N0YXJ0aW5nIHBvaW50IFVwCgkJCgkJc2VsZi5iYWNrTGVmdFRvcCA9IHNlY3Rpb24uU2VjdGlvbigiYmFja0xlZnQiLCA1Myw3OSxUcnVlLCJNZXRlb3JSYWluUmVkIikgI1VwCgkJc2VsZi5iYWNrTGVmdEJvdHRvbSA9IHNlY3Rpb24uU2VjdGlvbigiYmFja0xlZnQiLCA3OSwxMDYsRmFsc2UsIk1ldGVvclJhaW5SZWQiKSAjRG93bgoJCQoJCXNlbGYubGFwZWxMZWZ0VG9wID0gc2VjdGlvbi5TZWN0aW9uKCJsYXBlbExlZnQiLCAxMDYsMTQxLFRydWUsIlN0ZXBSZWQiKSAjVXAKCQlzZWxmLmxhcGVsTGVmdEJvdHRvbSA9IHNlY3Rpb24uU2VjdGlvbigibGFwZWxMZWZ0IiwgMTQxLDE3NSxGYWxzZSwiU3RlcFJlZCIpICNEb3duCgkJCgkJc2VsZi5jb2xsYXJMZWZ0Qm90dG9tID0gc2VjdGlvbi5TZWN0aW9uKCJjb2xsYXJMZWZ0IiwxNzUsMjA3LFRydWUsIlN0ZXBHcmVlbiIpICNVcCA2NQoJCXNlbGYuY29sbGFyTGVmdFRvcCA9IHNlY3Rpb24uU2VjdGlvbigiY29sbGFyTGVmdCIsMjA3LDI0MCxGYWxzZSwiU3RlcEdyZWVuIikgI0Rvd24KCQkKCQlzZWxmLmNvbGxhclJpZ2h0VG9wID0gc2VjdGlvbi5TZWN0aW9uKCJjb2xsYXJSaWdodCIsMjQwLDI3MixUcnVlLCJTdGVwR3JlZW4iKSAjVXAKCQlzZWxmLmNvbGxhclJpZ2h0Qm90dG9tID0gc2VjdGlvbi5TZWN0aW9uKCJjb2xsYXJSaWdodCIsMjcyLDMwNSxGYWxzZSwiU3RlcEdyZWVuIikgI0Rvd24KCQkKCQlzZWxmLmxhcGVsUmlnaHRCb3R0b20gPSBzZWN0aW9uLlNlY3Rpb24oImxhcGVsUmlnaHQiLDMwNSwzMzEsVHJ1ZSwiU3RlcFJlZCIpICNVcAoJCXNlbGYubGFwZWxSaWdodFRvcCA9IHNlY3Rpb24uU2VjdGlvbigibGFwZWxSaWdodCIsMzMxLDM3NCxGYWxzZSwiU3RlcFJlZCIpICNEb3duCgkJCgkJCgkJCgkJc2VsZi5fX3NlbmlzdGl2aXR5ID0gMC41CgkJc2VsZi5zcGVjdHJ1bWFuYWx5emVyID0gU3BlY3RydW1BbmFseXplcigxMDAwMDAwLHNlbGYuX19zZW5pc3Rpdml0eSwxMDI0KSAjQ3JlYXQgbmV3IHNwZWN0dW0gYW5hbHl6ZXIgKFNhbXBsZSBIeiBSYXRlLCBTZW5pc3RpdmUgaW4gYW1wbGl0dWRlLCBzYW1wbGUgc2l6ZSkKCQlzZWxmLnNlY3Rpb25zTGlzdCA9IFtzZWxmLmJhY2tMZWZ0VG9wLHNlbGYuYmFja0xlZnRCb3R0b20sc2VsZi5iYWNrUmlnaHRUb3Asc2VsZi5iYWNrUmlnaHRCb3R0b20sIHNlbGYubGFwZWxSaWdodFRvcCwgc2VsZi5sYXBlbFJpZ2h0Qm90dG9tLHNlbGYuY29sbGFyUmlnaHRUb3Asc2VsZi5jb2xsYXJSaWdodEJvdHRvbSxzZWxmLmNvbGxhckxlZnRUb3Asc2VsZi5jb2xsYXJMZWZ0Qm90dG9tLHNlbGYubGFwZWxMZWZ0VG9wLHNlbGYubGFwZWxMZWZ0Qm90dG9tXSAjUG9wdWxhdGUgdGhlIGxpc3Qgb2YgTEVEIHNlY3Rpb25zIChpbiBzaGFyZWQgbWVtb3J5CgkJc2VsZi5fX25hbWUgPSAiU3VpdCIKCQoJZGVmIGJsYWNrb3V0KHNlbGYpOgogICAgICAgIAlmb3IgaSBpbiByYW5nZSgwLCBzdHJpcC5udW1QaXhlbHMoKSk6CiAgICAgICAgICAgIAkJc2VsZi5zdHJpcC5zZXRQaXhlbENvbG9yKGksIENvbG9yKDAsMCwwKSkKICAgICAgICAgICAgCQkKCWRlZiBibGFja291dFBpeGVsKHNlbGYscCk6CgkJc2VsZi5zdHJpcC5zZXRQaXhlbENvbG9y"}}]
["01ce3442dcad2c7d03279917fc6d03d79fd4e538-2","01ce3442dcad2c7d03279917fc6d03d79fd4e538","PHxmaW1fcHJlZml4fD4KCgojIFN1aXQgQ29kZQojIEF1dGhvcjogQ2FsZWIgV29sZmUKIyBEYXRlIG9mIENyZWF0aW9uOiA2LzIvMjAxOAppbXBvcnQgdGltZQppbXBvcnQgQWRhZnJ1aXRfTUNQMzAwOAppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBuZW9waXhlbCBpbXBvcnQgKgppbXBvcnQgYW5pbWF0aW9uICNhbmltYXRpb24gYWJzdHJhY3QgY2xhc3MKaW1wb3J0IHNlY3Rpb24gI3NlY3Rpb25zIG9mIHRoZSBzdWl0IHRvIGxpZ2h0IHVwCmZyb20gc3RlcGFuaW1hdGlvbiBpbXBvcnQgKiAjc2ltcGxlIHN0ZXAgYW5pbWF0aW9uCmZyb20gc3BlY3RydW1hbmFseXplciBpbXBvcnQgU3BlY3RydW1BbmFseXplcgpmcm9tIFF1ZXVlIGltcG9ydCBRdWV1ZQpmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcywgUGlwZQpmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgIFF1ZXVlIGFzIE1RdWV1ZSAKZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0ICBMb2NrCgoKCmNsYXNzIFN1aXQ6CgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCSMgTEVEIHN0cmlwIGNvbmZpZ3VyYXRpb246CiAgICAgICAgCUxFRF9DT1VOVCAgICAgID0gNDQyICAgICMgTnVtYmVyIG9mIExFRCBwaXhlbHMuCiAgICAJCUxFRF9QSU4gICAgICAgID0gMTggICAgICAjIEdQSU8gcGluIGNvbm5lY3RlZCB0byB0aGUgcGl4ZWxzICgxOCB1c2VzIFBXTSEpLgogICAgCQlMRURfRlJFUV9IWiAgICA9IDgwMDAwMCAgIyBMRUQgc2lnbmFsIGZyZXF1ZW5jeSBpbiBoZXJ0eiAodXN1YWxseSA4MDBraHopCiAgICAJCUxFRF9ETUEgICAgICAgID0gMTAgICAgICAjIERNQSBjaGFubmVsIHRvIHVzZSBmb3IgZ2VuZXJhdGluZyBzaWduYWwgKHRyeSAxMCkKICAgIAkJTEVEX0JSSUdIVE5FU1MgPSA2NCAgICAgIyBTZXQgdG8gMCBmb3IgZGFya2VzdCBhbmQgMjU1IGZvciBicmlnaHRlc3QKICAgIAkJTEVEX0lOVkVSVCAgICAgPSBGYWxzZSAgICMgVHJ1ZSB0byBpbnZlcnQgdGhlIHNpZ25hbCAod2hlbiB1c2luZyBOUE4gdHJhbnNpc3RvciBsZXZlbCBzaGlmdCkKICAgIAkJTEVEX0NIQU5ORUwgICAgPSAwICAgICAgICMgc2V0IHRvICcxJyBmb3IgR1BJT3MgMTMsIDE5LCA0MSwgNDUgb3IgNTMKICAgIAkJTEVEX1NUUklQICAgICAgPSB3cy5TSzY4MTJfU1RSSVBfR1JCVwoJCXNlbGYuc3RyaXAgPSBBZGFmcnVpdF9OZW9QaXhlbChMRURfQ09VTlQsIExFRF9QSU4sIExFRF9GUkVRX0haLCBMRURfRE1BLCBMRURfSU5WRVJULCBMRURfQlJJR0hUTkVTUywgTEVEX0NIQU5ORUwpICMgUkdCIFN0cmlwCgkJI3NlbGYuc3RyaXAgPSBBZGFmcnVpdF9OZW9QaXhlbChMRURfQ09VTlQsIExFRF9QSU4sIExFRF9GUkVRX0haLCBMRURfRE1BLCBMRURfSU5WRVJULCBMRURfQlJJR0hUTkVTUywgTEVEX0NIQU5ORUwsIExFRF9TVFJJUCkgIyBSR0JXIFN0cmlwCgkJc2VsZi5iYWNrUmlnaHRUb3AgPSBzZWN0aW9uLlNlY3Rpb24oImJhY2tSaWdodCIsIDAsMjYsVHJ1ZSwiU3RlcEdyZWVuIikjU3RhcnRpbmcgcG9pbnQgVXAKCQlzZWxmLmJhY2tSaWdodEJvdHRvbSA9IHNlY3Rpb24uU2VjdGlvbigiYmFja1JpZ2h0IiwgMjYsNTMsRmFsc2UsIlN0ZXBHcmVlbiIpICNTdGFydGluZyBwb2ludCBVcAoJCQoJCXNlbGYuYmFja0xlZnRUb3AgPSBzZWN0aW9uLlNlY3Rpb24oImJhY2tMZWZ0IiwgNTMsNzksVHJ1ZSwiTWV0ZW9yUmFpblJlZCIpICNVcAoJCXNlbGYuYmFja0xlZnRCb3R0b20gPSBzZWN0aW9uLlNlY3Rpb24oImJhY2tMZWZ0IiwgNzksMTA2LEZhbHNlLCJNZXRlb3JSYWluUmVkIikgI0Rvd24KCQkKCQlzZWxmLmxhcGVsTGVmdFRvcCA9IHNlY3Rpb24uU2VjdGlvbigibGFwZWxMZWZ0IiwgMTA2LDE0MSxUcnVlLCJTdGVwUmVkIikgI1VwCgkJc2VsZi5sYXBlbExlZnRCb3R0b20gPSBzZWN0aW9uLlNlY3Rpb24oImxhcGVsTGVmdCIsIDE0MSwxNzUsRmFsc2UsIlN0ZXBSZWQiKSAjRG93bgoJCQoJCXNlbGYuY29sbGFyTGVmdEJvdHRvbSA9IHNlY3Rpb24uU2VjdGlvbigiY29sbGFyTGVmdCIsMTc1LDIwNyxUcnVlLCJTdGVwR3JlZW4iKSAjVXAgNjUKCQlzZWxmLmNvbGxhckxlZnRUb3AgPSBzZWN0aW9uLlNlY3Rpb24oImNvbGxhckxlZnQiLDIwNywyNDAsRmFsc2UsIlN0ZXBHcmVlbiIpICNEb3duCgkJCgkJc2VsZi5jb2xsYXJSaWdodFRvcCA9IHNlY3Rpb24uU2VjdGlvbigiY29sbGFyUmlnaHQiLDI0MCwyNzIsVHJ1ZSwiU3RlcEdyZWVuIikgI1VwCgkJc2VsZi5jb2xsYXJSaWdodEJvdHRvbSA9IHNlY3Rpb24uU2VjdGlvbigiY29sbGFyUmlnaHQiLDI3MiwzMDUsRmFsc2UsIlN0ZXBHcmVlbiIpICNEb3duCgkJCgkJc2VsZi5sYXBlbFJpZ2h0Qm90dG9tID0gc2VjdGlvbi5TZWN0aW9uKCJsYXBlbFJpZ2h0IiwzMDUsMzMxLFRydWUsIlN0ZXBSZWQiKSAjVXAKCQlzZWxmLmxhcGVsUmlnaHRUb3AgPSBzZWN0aW9uLlNlY3Rpb24oImxhcGVsUmlnaHQiLDMzMSwzNzQsRmFsc2UsIlN0ZXBSZWQiKSAjRG93bgoJCQoJCQoJCQoJCXNlbGYuX19zZW5pc3Rpdml0eSA9IDAuNQoJCXNlbGYuc3BlY3RydW1hbmFseXplciA9IFNwZWN0cnVtQW5hbHl6ZXIoMTAwMDAwMCxzZWxmLl9fc2VuaXN0aXZpdHksMTAyNCkgI0NyZWF0IG5ldyBzcGVjdHVtIGFuYWx5emVyIChTYW1wbGUgSHogUmF0ZSwgU2VuaXN0aXZlIGluIGFtcGxpdHVkZSwgc2FtcGxlIHNpemUpCgkJc2VsZi5zZWN0aW9uc0xpc3QgPSBbc2VsZi5iYWNrTGVmdFRvcCxzZWxmLmJhY2tMZWZ0Qm90dG9tLHNlbGYuYmFja1JpZ2h0VG9wLHNlbGYuYmFja1JpZ2h0Qm90dG9tLCBzZWxmLmxhcGVsUmlnaHRUb3AsIHNlbGYubGFwZWxSaWdodEJvdHRvbSxzZWxmLmNvbGxhclJpZ2h0VG9wLHNlbGYuY29sbGFyUmlnaHRCb3R0b20sc2VsZi5jb2xsYXJMZWZ0VG9wLHNlbGYuY29sbGFyTGVmdEJvdHRvbSxzZWxmLmxhcGVsTGVmdFRvcCxzZWxmLmxhcGVsTGVmdEJvdHRvbV0gI1BvcHVsYXRlIHRoZSBsaXN0IG9mIExFRCBzZWN0aW9ucyAoaW4gc2hhcmVkIG1lbW9yeQoJCXNlbGYuX19uYW1lID0gIlN1aXQiCgkKCWRlZiBibGFja291dChzZWxmKToKICAgICAgICAJZm9yIGkgaW4gcmFuZ2UoMCwgc3RyaXAubnVtUGl4ZWxzKCkpOgogICAgICAgICAgICAJCXNlbGYuc3RyaXAuc2V0UGl4ZWxDb2xvcihpLCBDb2xvcigwLDAsMCkpCiAgICAgICAgICAgIAkJCglkZWYgYmxhY2tvdXRQaXhlbChzZWxmLHApOgoJCXNlbGYuc3RyaXAuc2V0UGl4ZWxDb2xvcihwLCBDb2xvcigwLDAsMCkpCgkJCmRlZiBnZXRGcmVxSW5mbyhzdWl0LG1xdHJpZ2dlcnMpOgoJCQoJCXdoaWxlIFRydWU6IAoJCQkKCQkJaWYgbm90IG1xdHJpZ2dlcnMuZnVsbCgpOgoJCQkJCgkJCQlzdWl0LnNwZWN0cnVtYW5hbHl6ZXIuYW5hbHl6ZVNwZWN0cnVtKCkKCQkJCQoJCQkJYnVja2V0cyA9IHN1aXQuc3BlY3RydW1hbmFseXplci5nZXRTcGVjdHJ1bUJ1Y2tldHMoKQoJCQkJCgkJCQltcXRyaWdnZXJzLnB1dF9ub3dhaXQoYnVja2V0cykKCQkJCmRlZiBhbXBDaGVjayhjb25ucyk6CgkjQWRqdXN0cyB0aGUgYW1wbGl0dWRlIHRvIGFkanVzdCBmb3IgZHluYW1pYyBlbnZpcm9ubWVudHMgCgoKCWFtcGluaXQgPSBucC5hcnJheShbNjEuMCwgNS4wLCA1LjAsIDUuMCwgMy4wLDMuMCwzLjAsMy4wLDMuMCwyLjAsMi4wLDIuMCwyLjBdKSAjUGVyc2lzdGluZyBhcnJheSB0aGF0IGdldHMgdXBkYXRlZAoJc3RhcnQgPSBucC5hcnJheShbNTUuMCwgNS4wLCA1LjAsIDUuMCwgMy4wLDMuMCwzLjAsMy4wLDMuMCwyLjAsMS4wLDEuMCwxLjBdKSAjIE9yaWdpbmFsIHZhbHVlcyBhbmQgbWluaW11bSBhbXBsaXR1ZGVzCglkcm9wdmFsID0gbnAuYXJyYXkoWzMuMCwgLjUsIC41LCAuNSwgMi4wLDIuMCwyLjAsMS4wLC4yLC4yLC41LC4xLC4xXSkKCWxhc3RydW4gPSB0aW1lLmNsb2NrKCkKCQoJY291bnQgPSAxCgl3aGlsZSBUcnVlOiAKCQkKCQlpZiBjb25ucy5wb2xsKC4xKToKCQkJdG1wID0gW10KCQkJYW1wPWNvbm5zLnJlY3YoKQoJCQlpZiBhbXAuc2l6ZSA+IDAgYW5kIHRpbWUuY2xvY2soKSAtIGxhc3RydW4gPi4wMDAwMDE6CgkJCQlmb3IgaSBpbiByYW5nZSgwLHN0YXJ0LnNpemUpOiAjZGVjcmVtZW50IHRoZSBhbXBsaXR1ZGUgYnkgb25lICJkZWNpYmVsIiBldmVyeSAuMDAzIHNlY29uZHMJCgkJCQkJdmFsID0gYW1wW2ldCgkJCQkJCgkJCQkJaWYgIHZhbC1kcm9wdmFsW2ldID4gc3RhcnRbaV06ICNJZiB0aGUgY3VycmVudCBhbXBsaXR1ZGUgY2FuIGJlIGRlY3JlbWVudGVkIGFuZCBzdGlsbCBiZSBhYm92ZSB0aGUgbWluaW11bSBzZW5zaXRpdml0eSwgZGVjcmVtZW50CgkJCQkgCQl0bXAuYXBwZW5kKHZhbCAtZHJvcHZhbFtpXSkKCQkJIAkJZWxzZToKCQkJIAkJCXRtcC5hcHBlbmQodmFsKQkJI0Vsc2UsIGFwcGVuZCB0aGUgY3VycmVudCBhbXBsaXR1ZGUgCgkJCQlsYXN0cnVuID0gdGltZS5jbG9jaygpICMgVmFsaWRhdGUgdGhlIGxhc3QgdGltZSB0aGUgYW1wbGl0dWRlIHZhbHVlcyB3ZXJlIGRlY3JlbWVudGVkCgkJCQkKCQkJCWFtcCA9IG5wLmFwcGVuZChbXSx0bXApCgkJCQkKCQkJCWFtcGluaXQgPSBhbXAKCQkJCWNvbm5zLnNlbmQoYW1wKQoJCQoJCWVsc2U6CQoJCQljb25ucy5zZW5kKGFtcGluaXQpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgkJCQkKZGVmIGJ1aWxkQW5pbWF0aW9ucyhtcXRyaWdnZXJzLG1xYW1pbmF0aW9ucyxjb25ucik6Cgo8fGZpbV9lbmR8Pg=="]
["01ce3442dcad2c7d03279917fc6d03d79fd4e538-3","01ce3442dcad2c7d03279917fc6d03d79fd4e538",{"$cut":{"chars":19000,"head":"PHxmaW1fcHJlZml4fD4KCgojIFN1aXQgQ29kZQojIEF1dGhvcjogQ2FsZWIgV29sZmUKIyBEYXRlIG9mIENyZWF0aW9uOiA2LzIvMjAxOAppbXBvcnQgdGltZQppbXBvcnQgQWRhZnJ1aXRfTUNQMzAwOAppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBuZW9waXhlbCBpbXBvcnQgKgppbXBvcnQgYW5pbWF0aW9uICNhbmltYXRpb24gYWJzdHJhY3QgY2xhc3MKaW1wb3J0IHNlY3Rpb24gI3NlY3Rpb25zIG9mIHRoZSBzdWl0IHRvIGxpZ2h0IHVwCmZyb20gc3RlcGFuaW1hdGlvbiBpbXBvcnQgKiAjc2ltcGxlIHN0ZXAgYW5pbWF0aW9uCmZyb20gc3BlY3RydW1hbmFseXplciBpbXBvcnQgU3BlY3RydW1BbmFseXplcgpmcm9tIFF1ZXVlIGltcG9ydCBRdWV1ZQpmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcywgUGlwZQpmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgIFF1ZXVlIGFzIE1RdWV1ZSAKZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0ICBMb2NrCgoKCmNsYXNzIFN1aXQ6CgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCSMgTEVEIHN0cmlwIGNvbmZpZ3VyYXRpb246CiAgICAgICAgCUxFRF9DT1VOVCAgICAgID0gNDQyICAgICMgTnVtYmVyIG9mIExFRCBwaXhlbHMuCiAgICAJCUxFRF9QSU4gICAgICAgID0gMTggICAgICAjIEdQSU8gcGluIGNvbm5lY3RlZCB0byB0aGUgcGl4ZWxzICgxOCB1c2VzIFBXTSEpLgogICAgCQlMRURfRlJFUV9IWiAgICA9IDgwMDAwMCAgIyBMRUQgc2lnbmFsIGZyZXF1ZW5jeSBpbiBoZXJ0eiAodXN1YWxseSA4MDBraHopCjx8ZmltX2hvbGV8PgogICAgCQlMRURfU1RSSVAgICAgICA9IHdzLlNLNjgxMl9TVFJJUF9HUkJXCgkJc2VsZi5zdHJpcCA9IEFkYWZydWl0X05lb1BpeGVsKExFRF9DT1VOVCwgTEVEX1BJTiwgTEVEX0ZSRVFfSFosIExFRF9ETUEsIExFRF9JTlZFUlQsIExFRF9CUklHSFRORVNTLCBMRURfQ0hBTk5FTCkgIyBSR0IgU3RyaXAKCQkjc2VsZi5zdHJpcCA9IEFkYWZydWl0X05lb1BpeGVsKExFRF9DT1VOVCwgTEVEX1BJTiwgTEVEX0ZSRVFfSFosIExFRF9ETUEsIExFRF9JTlZFUlQsIExFRF9CUklHSFRORVNTLCBMRURfQ0hBTk5FTCwgTEVEX1NUUklQKSAjIFJHQlcgU3RyaXAKCQlzZWxmLmJhY2tSaWdodFRvcCA9IHNlY3Rpb24uU2VjdGlvbigiYmFja1JpZ2h0IiwgMCwyNixUcnVlLCJTdGVwR3JlZW4iKSNTdGFydGluZyBwb2ludCBVcAoJCXNlbGYuYmFja1JpZ2h0Qm90dG9tID0gc2VjdGlvbi5TZWN0aW9uKCJiYWNrUmlnaHQiLCAyNiw1MyxGYWxzZSwiU3RlcEdyZWVuIikgI1N0YXJ0aW5nIHBvaW50IFVwCgkJCgkJc2VsZi5iYWNrTGVmdFRvcCA9IHNlY3Rpb24uU2VjdGlvbigiYmFja0xlZnQiLCA1Myw3OSxUcnVlLCJNZXRlb3JSYWluUmVkIikgI1VwCgkJc2VsZi5iYWNrTGVmdEJvdHRvbSA9IHNlY3Rpb24uU2VjdGlvbigiYmFja0xlZnQiLCA3OSwxMDYsRmFsc2UsIk1ldGVvclJhaW5SZWQiKSAjRG93bgoJCQoJCXNlbGYubGFwZWxMZWZ0VG9wID0gc2VjdGlvbi5TZWN0aW9uKCJsYXBlbExlZnQiLCAxMDYsMTQxLFRydWUsIlN0ZXBSZWQiKSAjVXAKCQlzZWxmLmxhcGVsTGVmdEJvdHRvbSA9IHNlY3Rpb24uU2VjdGlvbigibGFwZWxMZWZ0IiwgMTQxLDE3NSxGYWxzZSwiU3RlcFJlZCIpICNEb3duCgkJCgkJc2VsZi5jb2xsYXJMZWZ0Qm90dG9tID0gc2VjdGlvbi5TZWN0aW9uKCJjb2xsYXJMZWZ0IiwxNzUsMjA3LFRydWUsIlN0ZXBHcmVlbiIpICNVcCA2NQoJCXNlbGYuY29sbGFyTGVmdFRvcCA9IHNlY3Rpb24uU2VjdGlvbigiY29sbGFyTGVmdCIsMjA3LDI0MCxGYWxzZSwiU3RlcEdyZWVuIikgI0Rvd24KCQkKCQlzZWxmLmNvbGxhclJpZ2h0VG9wID0gc2VjdGlvbi5TZWN0aW9uKCJjb2xsYXJSaWdodCIsMjQwLDI3MixUcnVlLCJTdGVwR3JlZW4iKSAjVXAKCQlzZWxmLmNvbGxhclJpZ2h0Qm90dG9tID0gc2VjdGlvbi5TZWN0aW9uKCJjb2xsYXJSaWdodCIsMjcyLDMwNSxGYWxzZSwiU3RlcEdyZWVuIikgI0Rvd24KCQkKCQlzZWxmLmxhcGVsUmlnaHRCb3R0b20gPSBzZWN0aW9uLlNlY3Rpb24oImxhcGVsUmlnaHQiLDMwNSwzMzEsVHJ1ZSwiU3RlcFJlZCIpICNVcAoJCXNlbGYubGFwZWxSaWdodFRvcCA9IHNlY3Rpb24uU2VjdGlvbigibGFwZWxSaWdodCIsMzMxLDM3NCxGYWxzZSwiU3RlcFJlZCIpICNEb3duCgkJCgkJCgkJCgkJc2VsZi5fX3NlbmlzdGl2aXR5ID0gMC41CgkJc2VsZi5zcGVjdHJ1bWFuYWx5emVyID0gU3BlY3RydW1BbmFseXplcigxMDAwMDAwLHNlbGYuX19zZW5pc3Rpdml0eSwxMDI0KSAjQ3JlYXQgbmV3IHNwZWN0dW0gYW5hbHl6ZXIgKFNhbXBsZSBIeiBSYXRlLCBTZW5pc3RpdmUgaW4gYW1wbGl0dWRlLCBzYW1wbGUgc2l6ZSkKCQlzZWxmLnNlY3Rpb25zTGlzdCA9IFtzZWxmLmJhY2tMZWZ0VG9wLHNlbGYuYmFja0xlZnRCb3R0b20sc2VsZi5iYWNrUmlnaHRUb3Asc2VsZi5iYWNrUmlnaHRCb3R0b20sIHNlbGYubGFwZWxSaWdodFRvcCwgc2VsZi5sYXBlbFJpZ2h0Qm90dG9tLHNlbGYuY29sbGFyUmlnaHRUb3Asc2VsZi5jb2xsYXJSaWdodEJvdHRvbSxzZWxmLmNvbGxhckxlZnRUb3Asc2VsZi5jb2xsYXJMZWZ0Qm90dG9tLHNlbGYubGFwZWxMZWZ0VG9wLHNlbGYubGFwZWxMZWZ0Qm90dG9tXSAjUG9wdWxhdGUgdGhlIGxpc3Qgb2YgTEVEIHNlY3Rpb25zIChpbiBzaGFyZWQgbWVtb3J5CgkJc2VsZi5fX25hbWUgPSAiU3VpdCIKCQoJZGVmIGJsYWNrb3V0KHNlbGYpOgogICAgICAgIAlmb3IgaSBpbiByYW5nZSgwLCBzdHJpcC5udW1QaXhlbHMoKSk6CiAgICAgICAgICAgIAkJc2VsZi5zdHJpcC5zZXRQaXhlbENvbG9yKGksIENvbG9yKDAsMCwwKSkKICAgICAgICAgICAgCQkKCWRlZiBibGFja291dFBpeGVsKHNlbGYscCk6CgkJc2VsZi5zdHJpcC5zZXRQaXhlbENvbG9yKHAsIENvbG9yKDAsMCwwKSkKCQkKZGVmIGdldEZyZXFJbmZvKHN1aXQsbXF0cmlnZ2Vycyk6CgkJCgkJd2hpbGUgVHJ1ZTogCgkJCQoJCQlpZiBub3QgbXF0cmlnZ2Vycy5mdWxsKCk6CgkJCQkKCQkJCXN1aXQuc3BlY3RydW1hbmFseXplci5hbmFseXplU3BlY3RydW0oKQoJCQkJCgkJCQlidWNrZXRzID0gc3VpdC5zcGVjdHJ1"}}]
["a9f3c51271f917afb16679f8856ffaefeee8a6c7-1","a9f3c51271f917afb16679f8856ffaefeee8a6c7",{"$cut":{"chars":25064,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzaHV0aWwKaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIGRlbWlzdG9fc2RrLmNvbW1hbmRzLmNvbW1vbi5naXRfdG9vbHMgaW1wb3J0IGdpdF9wYXRoCgoKY2xhc3MgVGVzdFJOVXBkYXRlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIEZJTEVTX1BBVEggPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihfX2ZpbGVfXywgZid7Z2l0X3BhdGgoKX0vZGVtaXN0b19zZGsvdGVzdHMnLCAndGVzdF9maWxlcycpKQoKICAgIGRlZiB0ZXN0X2J1aWxkX3JuX3RlbXBsYXRlX2ludGVncmF0aW9uKHNlbGYpOgogICAgICAgICIiIgogICAgICAgICAgICBHaXZlbjoKICAgICAgICAgICAgICAgIC0gYSBkaWN0IG9mIGNoYW5nZWQgaXRlbXMKICAgICAgICAgICAgV2hlbjoKICAgICAgICAgICAgICAgIC0gd2Ugd2FudCB0byBwcm9kdWNlIGEgcmVsZWFzZSBub3RlcyB0ZW1wbGF0ZQogICAgICAgICAgICBUaGVuOgogICAgICAgICAgICAgICAgLSByZXR1cm4gYSBtYXJrZG93biBzdHJpbmcKICAgICAgICAiIiIKICAgICAgICBleHBlY3RlZF9yZXN1bHQgPSAiXG4jIyMjIEludGVncmF0aW9uc1xuLSBfX0hlbGxvIFdvcmxkIEludGVncmF0aW9uX19cbiUlVVBEQVRFX1JOJSVcbiIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICJcbiMjIyMgUGxheWJvb2tzXG4tIF9fSGVsbG8gV29ybGQgUGxheWJvb2tfX1xuJSVVUERBVEVfUk4lJVxuIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIyMjIyBTY3JpcHRzXG4tIF9fSGVsbG8gV29ybGQgU2NyaXB0X19cbiUlVVBEQVRFX1JOJSVcbiIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICJcbiMjIyMgSW5jaWRlbnRGaWVsZHNcbi0gX19IZWxsbyBXb3JsZCBJbmNpZGVudEZpZWxkX19cbiUlVVBEQVRFX1JOJSVcbiIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICJcbiMjIyMgQ2xhc3NpZmllcnNcbi0gX19IZWxsbyBXb3JsZCBDbGFzc2lmaWVyX19cbiUlVVBEQVRFX1JOJSVcbiIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICJcbiMjIyMgTGF5b3V0c1xuLSBfX0hlbGxvIFdvcmxkIExheW91dF9fXG4lJVVQREFURV9STiUlXG4iIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4jIyMjIEluY2lkZW50VHlwZXNcbi0gX19IZWxsbyBXb3JsZCBJbmNpZGVudCBUeXBlX19cbiUlVVBEQVRFX1JOJSVcbiIKICAgICAgICBmcm9tIGRlbWlzdG9fc2RrLmNvbW1hbmRzLnVwZGF0ZV9yZWxlYXNlX25vdGVzLnVwZGF0ZV9ybiBpbXBvcnQgVXBkYXRlUk4KICAgICAgICB1cGRhdGVfcm4gPSBVcGRhdGVSTihwYWNrPSJIZWxsb1dvcmxkIiwgdXBkYXRlX3R5cGU9J21pbm9yJywgcGFja19maWxlcz17J0hlbGxvV29ybGQnfSkKICAgICAgICBjaGFuZ2VkX2l0ZW1zID0gewogICAgICAgICAgICAiSGVsbG8gV29ybGQgSW50ZWdyYXRpb24iOiAiSW50ZWdyYXRpb24iLAogICAgICAgICAgICAiSGVsbG8gV29ybGQgUGxheWJvb2siOiAiUGxheWJvb2siLAogICAgICAgICAgICAiSGVsbG8gV29ybGQgU2NyaXB0IjogIlNjcmlwdCIsCiAgICAgICAgICAgICJIZWxsbyBXb3JsZCBJbmNpZGVudEZpZWxkIjogIkluY2lkZW50RmllbGRzIiwKICAgICAgICAgICAgIkhlbGxvIFdvcmxkIENsYXNzaWZpZXIiOiAiQ2xhc3NpZmllcnMiLAogICAgICAgICAgICAiTi9BIjogIkludGVncmF0aW9uIiwKICAgICAgICAgICAgIkhlbGxvIFdvcmxkIExheW91dCI6ICJMYXlvdXRzIiwKICAgICAgICAgICAgIkhlbGxvIFdvcmxkIEluY2lkZW50IFR5cGUiOiAiSW5jaWRlbnRUeXBlcyIsCiAgICAgICAgfQogICAgICAgIHJlbGVhc2Vfbm90ZXMgPSB1cGRhdGVfcm4uYnVpbGRfcm5fdGVtcGxhdGUoY2hhbmdlZF9pdGVtcykKICAgICAgICBhc3NlcnQgZXhwZWN0ZWRfcmVzdWx0ID09IHJlbGVhc2Vfbm90ZXMKCiAgICBkZWYgdGVzdF9maW5kX2NvcnJlc3BvbmRpbmdfeW1sKHNlbGYpOgogICAgICAgICIiIgogICAgICAgICAgICBHaXZlbjoKICAgICAgICAgICAgICAgIC0gYSBmaWxlcGF0aCBjb250YWluaW5nIGEgcHl0aG9uIGZpbGUKICAgICAgICAgICAgV2hlbjoKICAgICAgICAgICAgICAgIC0gZGV0ZXJtaW5pbmcgdGhlIGNoYW5nZWQgZmlsZQogICAgICAgICAgICBUaGVuOgogICAgICAgICAgICAgICAgLSByZXR1cm4gb25seSB0aGUgeW1sIG9mIHRoZSBjaGFuZ2VkIGZpbGUKICAgICAgICAiIiIKICAgICAgICBleHBlY3RlZF9yZXN1bHQgPSAiSW50ZWdyYXRpb24vSGVsbG9Xb3JsZC55bWwiCiAgICAgICAgZnJvbSBkZW1pc3RvX3Nkay5jb21tYW5kcy51cGRhdGVfcmVsZWFzZV9ub3Rlcy51cGRhdGVfcm4gaW1wb3J0IFVwZGF0ZVJOCiAgICAgICAgdXBkYXRlX3JuID0gVXBkYXRlUk4ocGFjaz0iSGVsbG9Xb3JsZCIsIHVwZGF0ZV90eXBlPSdtaW5vcicsIHBhY2tfZmlsZXM9eydIZWxsb1dvcmxkJ30pCiAgICAgICAgZmlsZXBhdGggPSAnSW50ZWdyYXRpb24vSGVsbG9Xb3JsZC5weScKICAgICAgICBmaWxlbmFtZSA9IHVwZGF0ZV9ybi5maW5kX2NvcnJlc3BvbmRpbmdfeW1sKGZpbGVwYXRoKQogICAgICAgIGFzc2VydCBleHBlY3RlZF9yZXN1bHQgPT0gZmlsZW5hbWUKCiAgICBkZWYgdGVzdF9yZXR1cm5fcmVsZWFzZV9ub3Rlc19wYXRoKHNlbGYpOgogICAgICAgICIiIgogICAgICAgICAgICBHaXZlbjoKICAgICAgICAgICAgICAgIC0gYSBwYWNrIG5hbWUgYW5kIHZlcnNpb24KICAgICAgICAgICAgV2hlbjoKICAgICAgICAgICAgICAgIC0gYnVpbGRpbmcgdGhlIHJlbGVhc2Ugbm90ZXMgZmlsZSB3aXRoaW4gdGhlIFJlbGVhc2VOb3RlcyBkaXJlY3RvcnkKICAgICAgICAgICAgVGhlbjoKICAgICAgICAgICAgICAgIC0gdGhlIGZpbGVwYXRoIG9mIHRoZSBjb3JyZWN0IHJlbGVhc2Ugbm90ZXMuCiAgICAgICAgIiIiCiAgICAgICAgZXhwZWN0ZWRfcmVzdWx0ID0gJ1BhY2tzL0hlbGxvV29ybGQvUmVsZWFzZU5vdGVzLzFfMV8xLm1kJwogICAgICAgIGZyb20gZGVtaXN0b19zZGsuY29tbWFuZHMudXBkYXRlX3JlbGVhc2Vfbm90ZXMudXBkYXRlX3JuIGltcG9ydCBVcGRhdGVSTgogICAgICAgIHVwZGF0ZV9ybiA9"}}]
["a9f3c51271f917afb16679f8856ffaefeee8a6c7-2","a9f3c51271f917afb16679f8856ffaefeee8a6c7",{"$cut":{"chars":22104,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzaHV0aWwKaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIGRlbWlzdG9fc2RrLmNvbW1hbmRzLmNvbW1vbi5naXRfdG9vbHMgaW1wb3J0IGdpdF9wYXRoCgoKY2xhc3MgVGVzdFJOVXBkYXRlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIEZJTEVTX1BBVEggPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihfX2ZpbGVfXywgZid7Z2l0X3BhdGgoKX0vZGVtaXN0b19zZGsvdGVzdHMnLCAndGVzdF9maWxlcycpKQoKICAgIGRlZiB0ZXN0X2J1aWxkX3JuX3RlbXBsYXRlX2ludGVncmF0aW9uKHNlbGYpOgogICAgICAgICIiIgogICAgICAgICAgICBHaXZlbjoKICAgICAgICAgICAgICAgIC0gYSBkaWN0IG9mIGNoYW5nZWQgaXRlbXMKICAgICAgICAgICAgV2hlbjoKICAgICAgICAgICAgICAgIC0gd2Ugd2FudCB0byBwcm9kdWNlIGEgcmVsZWFzZSBub3RlcyB0ZW1wbGF0ZQogICAgICAgICAgICBUaGVuOgogICAgICAgICAgICAgICAgLSByZXR1cm4gYSBtYXJrZG93biBzdHJpbmcKICAgICAgICAiIiIKICAgICAgICBleHBlY3RlZF9yZXN1bHQgPSAiXG4jIyMjIEludGVncmF0aW9uc1xuLSBfX0hlbGxvIFdvcmxkIEludGVncmF0aW9uX19cbiUlVVBEQVRFX1JOJSVcbiIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICJcbiMjIyMgUGxheWJvb2tzXG4tIF9fSGVsbG8gV29ybGQgUGxheWJvb2tfX1xuJSVVUERBVEVfUk4lJVxuIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIyMjIyBTY3JpcHRzXG4tIF9fSGVsbG8gV29ybGQgU2NyaXB0X19cbiUlVVBEQVRFX1JOJSVcbiIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICJcbiMjIyMgSW5jaWRlbnRGaWVsZHNcbi0gX19IZWxsbyBXb3JsZCBJbmNpZGVudEZpZWxkX19cbiUlVVBEQVRFX1JOJSVcbiIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICJcbiMjIyMgQ2xhc3NpZmllcnNcbi0gX19IZWxsbyBXb3JsZCBDbGFzc2lmaWVyX19cbiUlVVBEQVRFX1JOJSVcbiIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICJcbiMjIyMgTGF5b3V0c1xuLSBfX0hlbGxvIFdvcmxkIExheW91dF9fXG4lJVVQREFURV9STiUlXG4iIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4jIyMjIEluY2lkZW50VHlwZXNcbi0gX19IZWxsbyBXb3JsZCBJbmNpZGVudCBUeXBlX19cbiUlVVBEQVRFX1JOJSVcbiIKICAgICAgICBmcm9tIGRlbWlzdG9fc2RrLmNvbW1hbmRzLnVwZGF0ZV9yZWxlYXNlX25vdGVzLnVwZGF0ZV9ybiBpbXBvcnQgVXBkYXRlUk4KICAgICAgICB1cGRhdGVfcm4gPSBVcGRhdGVSTihwYWNrPSJIZWxsb1dvcmxkIiwgdXBkYXRlX3R5cGU9J21pbm9yJywgcGFja19maWxlcz17J0hlbGxvV29ybGQnfSkKICAgICAgICBjaGFuZ2VkX2l0ZW1zID0gewogICAgICAgICAgICAiSGVsbG8gV29ybGQgSW50ZWdyYXRpb24iOiAiSW50ZWdyYXRpb24iLAogICAgICAgICAgICAiSGVsbG8gV29ybGQgUGxheWJvb2siOiAiUGxheWJvb2siLAogICAgICAgICAgICAiSGVsbG8gV29ybGQgU2NyaXB0IjogIlNjcmlwdCIsCiAgICAgICAgICAgICJIZWxsbyBXb3JsZCBJbmNpZGVudEZpZWxkIjogIkluY2lkZW50RmllbGRzIiwKICAgICAgICAgICAgIkhlbGxvIFdvcmxkIENsYXNzaWZpZXIiOiAiQ2xhc3NpZmllcnMiLAogICAgICAgICAgICAiTi9BIjogIkludGVncmF0aW9uIiwKICAgICAgICAgICAgIkhlbGxvIFdvcmxkIExheW91dCI6ICJMYXlvdXRzIiwKICAgICAgICAgICAgIkhlbGxvIFdvcmxkIEluY2lkZW50IFR5cGUiOiAiSW5jaWRlbnRUeXBlcyIsCiAgICAgICAgfQogICAgICAgIHJlbGVhc2Vfbm90ZXMgPSB1cGRhdGVfcm4uYnVpbGRfcm5fdGVtcGxhdGUoY2hhbmdlZF9pdGVtcykKICAgICAgICBhc3NlcnQgZXhwZWN0ZWRfcmVzdWx0ID09IHJlbGVhc2Vfbm90ZXMKCiAgICBkZWYgdGVzdF9maW5kX2NvcnJlc3BvbmRpbmdfeW1sKHNlbGYpOgogICAgICAgICIiIgogICAgICAgICAgICBHaXZlbjoKICAgICAgICAgICAgICAgIC0gYSBmaWxlcGF0aCBjb250YWluaW5nIGEgcHl0aG9uIGZpbGUKICAgICAgICAgICAgV2hlbjoKICAgICAgICAgICAgICAgIC0gZGV0ZXJtaW5pbmcgdGhlIGNoYW5nZWQgZmlsZQogICAgICAgICAgICBUaGVuOgogICAgICAgICAgICAgICAgLSByZXR1cm4gb25seSB0aGUgeW1sIG9mIHRoZSBjaGFuZ2VkIGZpbGUKICAgICAgICAiIiIKICAgICAgICBleHBlY3RlZF9yZXN1bHQgPSAiSW50ZWdyYXRpb24vSGVsbG9Xb3JsZC55bWwiCiAgICAgICAgZnJvbSBkZW1pc3RvX3Nkay5jb21tYW5kcy51cGRhdGVfcmVsZWFzZV9ub3Rlcy51cGRhdGVfcm4gaW1wb3J0IFVwZGF0ZVJOCiAgICAgICAgdXBkYXRlX3JuID0gVXBkYXRlUk4ocGFjaz0iSGVsbG9Xb3JsZCIsIHVwZGF0ZV90eXBlPSdtaW5vcicsIHBhY2tfZmlsZXM9eydIZWxsb1dvcmxkJ30pCiAgICAgICAgZmlsZXBhdGggPSAnSW50ZWdyYXRpb24vSGVsbG9Xb3JsZC5weScKICAgICAgICBmaWxlbmFtZSA9IHVwZGF0ZV9ybi5maW5kX2NvcnJlc3BvbmRpbmdfeW1sKGZpbGVwYXRoKQogICAgICAgIGFzc2VydCBleHBlY3RlZF9yZXN1bHQgPT0gZmlsZW5hbWUKCiAgICBkZWYgdGVzdF9yZXR1cm5fcmVsZWFzZV9ub3Rlc19wYXRoKHNlbGYpOgogICAgICAgICIiIgogICAgICAgICAgICBHaXZlbjoKICAgICAgICAgICAgICAgIC0gYSBwYWNrIG5hbWUgYW5kIHZlcnNpb24KICAgICAgICAgICAgV2hlbjoKICAgICAgICAgICAgICAgIC0gYnVpbGRpbmcgdGhlIHJlbGVhc2Ugbm90ZXMgZmlsZSB3aXRoaW4gdGhlIFJlbGVhc2VOb3RlcyBkaXJlY3RvcnkKICAgICAgICAgICAgVGhlbjoKICAgICAgICAgICAgICAgIC0gdGhlIGZpbGVwYXRoIG9mIHRoZSBjb3JyZWN0IHJlbGVhc2Ugbm90ZXMuCiAgICAgICAgIiIiCiAgICAgICAgZXhwZWN0ZWRfcmVzdWx0ID0gJ1BhY2tzL0hlbGxvV29ybGQvUmVsZWFzZU5vdGVzLzFfMV8xLm1kJwogICAgICAgIGZyb20gZGVtaXN0b19zZGsuY29tbWFuZHMudXBkYXRlX3JlbGVhc2Vfbm90ZXMudXBkYXRlX3JuIGltcG9ydCBVcGRhdGVSTgogICAgICAgIHVwZGF0ZV9ybiA9"}}]
["e750eeaf440756e3c424c2a74b31f6c7fbd9ca08-1","e750eeaf440756e3c424c2a74b31f6c7fbd9ca08","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKCmRlZiBtYWluKCk6CiAgICBrZWVwX3RhZ3MgPSBbJ0ItT1JHJywgJ0ktT1JHJywgJ0ItTE9DJywgJ0ktTE9DJywgJ0ItUEVSJywgJ0ktUEVSJywgJ08nXQogICAgCiAgICBzZW50ZW5jZV9ib3VuZGFyeSA9IFRydWUKICAgIGZvciBsaW5lIGluIHN5cy5zdGRpbjoKICAgICAgICBpZiBsaW5lID09ICdcbicgb3IgbGluZSA9PSAnXHRcdFxuJzoKICAgICAgICAgICAgaWYgbm90IHNlbnRlbmNlX2JvdW5kYXJ5OgogICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nKQogICAgICAgICAgICBzZW50ZW5jZV9ib3VuZGFyeSA9IFRydWUKICAgICAgICBlbGlmIGxpbmUgaW4gWyc8SEVBRExJTkU+XHRcdFxuJywgJzxCT0RZPlx0XHRcbicsICc8SU5HUkVTUz5cdFx0XG4nXToKICAgICAgICAgICAgc2VudGVuY2VfYm91bmRhcnkgPSBUcnVlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VudGVuY2VfYm91bmRhcnkgPSBGYWxzZQoKICAgICAgICAgICAgY29scyA9IGxpbmUuc3BsaXQoJ1x0JykKICAgICAgICAgICAgdGFnID0gY29sc1sxXSBpZiBjb2xzWzFdIGluIGtlZXBfdGFncyBlbHNlICdPJwogICAgICAgICAgICBvdXRjb2xzID0gW2NvbHNbMF0sIHRhZ10KICAgICAgICAgICAgCiAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1x0Jy5qb2luKG91dGNvbHMpKQogICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcbicpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbWFpbigpCjx8ZmltX2VuZHw+"]
["c12194b5dfaeca985d36d0770f1dae3758b0ba5b-1","c12194b5dfaeca985d36d0770f1dae3758b0ba5b","PHxmaW1fcHJlZml4fD4KIiIiCkNvbW1vbiBzdHJpbmdzIHVzZWQgaW4gdGhlIHRhc2tpbmcgYXBwCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIiIiCmZyb20gZGphbmdvLnV0aWxzLnRyYW5zbGF0aW9uIGltcG9ydCB1Z2V0dGV4dCBhcyBfCgpUQVJHRVRfRE9FU19OT1RfRVhJU1QgPSBfKCJUaGUgdGFyZ2V0IGNvbnRlbnQgdHlwZSBkb2VzIG5vdCBleGlzdC4iKQo8fGZpbV9lbmR8Pg=="]
["c12194b5dfaeca985d36d0770f1dae3758b0ba5b-2","c12194b5dfaeca985d36d0770f1dae3758b0ba5b","PHxmaW1fcHJlZml4fD4KIiIiCkNvbW1vbiBzdHJpbmdzIHVzZWQgaW4gdGhlIHRhc2tpbmcgYXBwCiIiIgpmcm9tIGRqYW5nby51dGlscy50cmFuc2xhdGlvbiBpbXBvcnQgdWdldHRleHQgYXMgXwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpUQVJHRVRfRE9FU19OT1RfRVhJU1QgPSBfKCJUaGUgdGFyZ2V0IGNvbnRlbnQgdHlwZSBkb2VzIG5vdCBleGlzdC4iKQpJTlZBTElEX1RJTUlOR19SVUxFID0gXygiSW52YWxpZCBUaW1pbmcgUnVsZS4iKQpSQURJVVNfTUlTU0lORyA9IF8oIlRoZSBSYWRpdXMgZm9yIEdlb3BvaW50IGlzIG1pc3NpbmcuIikKPHxmaW1fZW5kfD4="]
["c12194b5dfaeca985d36d0770f1dae3758b0ba5b-3","c12194b5dfaeca985d36d0770f1dae3758b0ba5b","PHxmaW1fcHJlZml4fD4KIiIiCkNvbW1vbiBzdHJpbmdzIHVzZWQgaW4gdGhlIHRhc2tpbmcgYXBwCiIiIgpmcm9tIGRqYW5nby51dGlscy50cmFuc2xhdGlvbiBpbXBvcnQgdWdldHRleHQgYXMgXwoKVEFSR0VUX0RPRVNfTk9UX0VYSVNUID0gXygiVGhlIHRhcmdldCBjb250ZW50IHR5cGUgZG9lcyBub3QgZXhpc3QuIikKSU5WQUxJRF9USU1JTkdfUlVMRSA9IF8oIkludmFsaWQgVGltaW5nIFJ1bGUuIikKUkFESVVTX01JU1NJTkcgPSBfKCJUaGUgUmFkaXVzIGZvciBHZW9wb2ludCBpcyBtaXNzaW5nLiIpCkdFT0RFVEFJTFNfT05MWSA9IF8oIkNhbm5vdCBJbXBvcnQgR2VvcG9pbnQgYW5kIFJhZGl1cyB3aXRoIFNoYXBlZmlsZS4iKQpTSEFQRUZJTEVfUkFESVVTID0gXygiQ2Fubm90IGltcG9ydCBTaGFwZWZpbGUgd2l0aCByYWRpdXMuIikKR0VPUE9JTlRfTUlTU0lORyA9IF8oIlRoZSBHZW9wb2ludCBmb3IgUmFkaXVzIGlzIG1pc3NpbmcuIikKQ0FOVF9FRElUX1RBU0sgPSBfKCJDYW5ub3QgQ2hhbmdlIFRhc2suIikKTk9fU0hBUEVGSUxFID0gXygiQ291bGQgbm90IGZpbmQgdGhlIC5zaHAgaW4gaW1wb3J0ZWQgemlwLiIpCk1JU1NJTkdfRklMRSA9IF8oIkVpdGhlciB0aGUgLmRiZiAsIC5zaHggb3IgLnNocCBmaWxlIGlzIG1pc3NpbmcuIikKPHxmaW1faG9sZXw+CklOVkFMSURfU1RBUlRfREFURSA9IF8oIlRoZSBzdGFydCBkYXRlIGNhbm5ub3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBlbmQgZGF0ZSIpCklOVkFMSURfRU5EX0RBVEUgPSBfKCJUaGUgZW5kIGRhdGUgY2Fubm5vdCBiZSBsZXNzZXIgdGhhbiB0aGUgc3RhcnQgZGF0ZS4iKQpNSVNTSU5HX1NUQVJUX0RBVEUgPSBfKAogICAgIkNhbm5vdCBkZXRlcm1pbmUgdGhlIHN0YXJ0IGRhdGUuICBQbGVhc2UgcHJvdmlkZSAiCiAgICAiZWl0aGVyIHRoZSBzdGFydCBkYXRlIG9yIHRpbWluZyBydWxlKHMpIgopCklOVkFMSURfU0hBUEVGSUxFID0gXygiSW52YWxpZCBzaGFwZWZpbGUiKQpOT19WQUxJRF9QT0xZR09OUyA9IF8oIk5vIHZhbGlkIHBvbHlnb25zIGluIHNoYXBlZmlsZSIpCjx8ZmltX3N1ZmZpeHw+ClVOTkVDRVNTQVJZX0ZJTEUgPSBfKAogICAgIlVwbG9hZGVkIGFuIHVubmVjZXNzYXJ5IGZpbGUuIFBsZWFzZSBtYWtlIHN1cmUgb25seSBhIC5zaHggLCAuc2hwIGFuZCAiCiAgICAiLmRiZiBmaWxlIGlzIGJlaW5nIHVwbG9hZGVkLiIKKQo8fGZpbV9lbmR8Pg=="]
["c12194b5dfaeca985d36d0770f1dae3758b0ba5b-4","c12194b5dfaeca985d36d0770f1dae3758b0ba5b","PHxmaW1fcHJlZml4fD4KIiIiCkNvbW1vbiBzdHJpbmdzIHVzZWQgaW4gdGhlIHRhc2tpbmcgYXBwCiIiIgpmcm9tIGRqYW5nby51dGlscy50cmFuc2xhdGlvbiBpbXBvcnQgdWdldHRleHQgYXMgXwoKVEFSR0VUX0RPRVNfTk9UX0VYSVNUID0gXygiVGhlIHRhcmdldCBjb250ZW50IHR5cGUgZG9lcyBub3QgZXhpc3QuIikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpJTlZBTElEX1RJTUlOR19SVUxFID0gXygiSW52YWxpZCBUaW1pbmcgUnVsZS4iKQpSQURJVVNfTUlTU0lORyA9IF8oIlRoZSBSYWRpdXMgZm9yIEdlb3BvaW50IGlzIG1pc3NpbmcuIikKR0VPREVUQUlMU19PTkxZID0gXygiQ2Fubm90IEltcG9ydCBHZW9wb2ludCBhbmQgUmFkaXVzIHdpdGggU2hhcGVmaWxlLiIpClNIQVBFRklMRV9SQURJVVMgPSBfKCJDYW5ub3QgaW1wb3J0IFNoYXBlZmlsZSB3aXRoIHJhZGl1cy4iKQo8fGZpbV9lbmR8Pg=="]
["c12194b5dfaeca985d36d0770f1dae3758b0ba5b-5","c12194b5dfaeca985d36d0770f1dae3758b0ba5b","PHxmaW1fcHJlZml4fD4KIiIiCkNvbW1vbiBzdHJpbmdzIHVzZWQgaW4gdGhlIHRhc2tpbmcgYXBwCiIiIgpmcm9tIGRqYW5nby51dGlscy50cmFuc2xhdGlvbiBpbXBvcnQgdWdldHRleHQgYXMgXwoKVEFSR0VUX0RPRVNfTk9UX0VYSVNUID0gXygiVGhlIHRhcmdldCBjb250ZW50IHR5cGUgZG9lcyBub3QgZXhpc3QuIikKSU5WQUxJRF9USU1JTkdfUlVMRSA9IF8oIkludmFsaWQgVGltaW5nIFJ1bGUuIikKUkFESVVTX01JU1NJTkcgPSBfKCJUaGUgUmFkaXVzIGZvciBHZW9wb2ludCBpcyBtaXNzaW5nLiIpCkdFT0RFVEFJTFNfT05MWSA9IF8oIkNhbm5vdCBJbXBvcnQgR2VvcG9pbnQgYW5kIFJhZGl1cyB3aXRoIFNoYXBlZmlsZS4iKQpTSEFQRUZJTEVfUkFESVVTID0gXygiQ2Fubm90IGltcG9ydCBTaGFwZWZpbGUgd2l0aCByYWRpdXMuIikKR0VPUE9JTlRfTUlTU0lORyA9IF8oIlRoZSBHZW9wb2ludCBmb3IgUmFkaXVzIGlzIG1pc3NpbmcuIikKQ0FOVF9FRElUX1RBU0sgPSBfKCJDYW5ub3QgQ2hhbmdlIFRhc2suIikKTk9fU0hBUEVGSUxFID0gXygiQ291bGQgbm90IGZpbmQgdGhlIC5zaHAgaW4gaW1wb3J0ZWQgemlwLiIpCk1JU1NJTkdfRklMRSA9IF8oIkVpdGhlciB0aGUgLmRiZiAsIC5zaHggb3IgLnNocCBmaWxlIGlzIG1pc3NpbmcuIikKVU5ORUNFU1NBUllfRklMRSA9IF8oCiAgICAiVXBsb2FkZWQgYW4gdW5uZWNlc3NhcnkgZmlsZS4gUGxlYXNlIG1ha2Ugc3VyZSBvbmx5IGEgLnNoeCAsIC5zaHAgYW5kICIKICAgICIuZGJmIGZpbGUgaXMgYmVpbmcgdXBsb2FkZWQuIgopCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KSU5WQUxJRF9TVEFSVF9EQVRFID0gXygiVGhlIHN0YXJ0IGRhdGUgY2Fubm5vdCBiZSBncmVhdGVyIHRoYW4gdGhlIGVuZCBkYXRlIikKSU5WQUxJRF9FTkRfREFURSA9IF8oIlRoZSBlbmQgZGF0ZSBjYW5ubm90IGJlIGxlc3NlciB0aGFuIHRoZSBzdGFydCBkYXRlLiIpCk1JU1NJTkdfU1RBUlRfREFURSA9IF8oCiAgICAiQ2Fubm90IGRldGVybWluZSB0aGUgc3RhcnQgZGF0ZS4gIFBsZWFzZSBwcm92aWRlICIKPHxmaW1fZW5kfD4="]
["01d899dd39b1d20bae06d9a27f083a7535d0b33d-1","01d899dd39b1d20bae06d9a27f083a7535d0b33d","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcGF0aCwgaW5jbHVkZQoKZnJvbSAuIGltcG9ydCB2aWV3cwoKPHxmaW1faG9sZXw+CiAgICBwYXRoKCdjYWR1c3VhcmlvLycsIHZpZXdzLnZpZXdfY2FkYXN0cmFyX3VzdWFyaW8sIG5hbWU9J2NhZGFzdHJhX3VzdWFyaW8nKSwKICAgICMgcGF0aCgnY2FkdXN1YXJpby1wYXNzLycsIHZpZXdzLnZpZXdfY2FkYXN0cmFyX3VzdWFyaW9fcGFzc2l2bywgbmFtZT0nY2FkYXN0cmFfdXN1YXJpb19wYXNzaXZvJyksCiAgICAjIHBhdGgoJ2NhZHZlaWN1bG8vJywgdmlld3Mudmlld19jYWRhc3RyYXJfdmVpY3VsbywgbmFtZT0nY2FkYXN0cmFfdmVpY3VsbycpLAogICAgcGF0aCgnbG9naW4vJywgdmlld3Mudmlld19sb2dpbiwgbmFtZT0nbG9naW4nKSwKICAgIHBhdGgoJ2xvZ291dC8nLCB2aWV3cy52aWV3X2xvZ291dCwgbmFtZT0nbG9nb3V0JyksCiAgICBwYXRoKCcnLCB2aWV3cy5pbmRleHYyLCBuYW1lPSdpbmRleCcpLAogICAgcGF0aCgnYWRtaW5pc3RyYWNhby8nLCB2aWV3cy5hZG1pbiwgbmFtZT0nY29uc3RlbF9hZG1pbicpLAogICAgcGF0aCgnYWRtaW5pc3RyYWNhby91c3Vhcmlvcy8nLCB2aWV3cy51c3VhcmlvcywgbmFtZT0nY29uc3RlbF9hZG1pbl91c3VhcmlvcycpLAogICAgcGF0aCgnYWRtaW5pc3RyYWNhby91c3Vhcmlvcy88c3RyOm1hdHJpY3VsYT4vJywgdmlld3MudXN1YXJpb3NfZWRpdGEsIG5hbWU9J2NvbnN0ZWxfYWRtaW5fdXN1YXJpb3NfZWRpdGEnKSwKICAgIHBhdGgoJ2FkbWluaXN0cmFjYW8vdXN1YXJpb3MvPHN0cjptYXRyaWN1bGE+L2luZm8vJywgdmlld3MudXN1YXJpb3NfaW5mbywgbmFtZT0nY29uc3RlbF9hZG1pbl91c3Vhcmlvc19pbmZvJyksCiAgICBwYXRoKCdhZG1pbmlzdHJhY2FvL3VzdWFyaW9zL3NlbmhhLzxpbnQ6dXNlcj4vJywgdmlld3MudXN1YXJpb3Nfc2VuaGEsIG5hbWU9J2NvbnN0ZWxfYWRtaW5fdXN1YXJpb3Nfc2VuaGEnKSwKICAgIHBhdGgoCiAgICAgICAgJ2FkbWluaXN0cmFjYW8vdXN1YXJpb3MvY2FkYXN0cm8vc2VtX2FjZXNzby8nLAogICAgICAgIHZpZXdzLmNhZGFzdHJhcl91c3VhcmlvX3Bhc3Npdm8sCiAgICAgICAgbmFtZT0nY29uc3RlbF9hZG1pbl9jYWRhc3Ryb191c3VhcmlvX3Bhc3Npdm8nCiAgICApLAogICAgcGF0aCgnY29uc3VsdGEvdXN1YXJpb3MvbmV4dD08c3RyOnJvbGxiYWNrPicsIHZpZXdzLnZpZXdfY29uc3VsdGFfZnVuY2lvbmFyaW9zLCBuYW1lPSdjb25zdWx0YV9mdW5jaW9uYXJpb3MnKSwKICAgIHBhdGgoJ2FkbWluaXN0cmFjYW8vY2FkYXN0cm8vJywgdmlld3MuY2FkYXN0cm9zLCBuYW1lPSdjb25zdGVsX2FkbWluX2NhZGFzdHJvcycpLAogICAgcGF0aCgnY29uc3VsdGEvdmVpY3Vsb3MvbmV4dD08c3RyOnJvbGxiYWNrPicsIHZpZXdzLnZpZXdfY29uc3VsdGFfdmVpY3Vsb3MsIG5hbWU9J2NvbnN1bHRhX3ZlaWN1bG9zJyksCl0KPHxmaW1fc3VmZml4fD4KdXJscGF0dGVybnMgPSBbCiAgICBwYXRoKCcnLCBpbmNsdWRlKCdjb25zdGVsLmFwcHMuY29udHJvbGVfYWNlc3Nvcy51cmxzJykpLAogICAgcGF0aCgnJywgaW5jbHVkZSgnY29uc3RlbC5hcHBzLmdlcmVuY2lhLnVybHMnKSksCgo8fGZpbV9lbmR8Pg=="]
["01d899dd39b1d20bae06d9a27f083a7535d0b33d-2","01d899dd39b1d20bae06d9a27f083a7535d0b33d","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcGF0aCwgaW5jbHVkZQoKZnJvbSAuIGltcG9ydCB2aWV3cwoKdXJscGF0dGVybnMgPSBbCiAgICBwYXRoKCcnLCBpbmNsdWRlKCdjb25zdGVsLmFwcHMuY29udHJvbGVfYWNlc3Nvcy51cmxzJykpLAogICAgcGF0aCgnJywgaW5jbHVkZSgnY29uc3RlbC5hcHBzLmdlcmVuY2lhLnVybHMnKSksCgo8fGZpbV9ob2xlfD4KICAgIHBhdGgoJ2xvZ291dC8nLCB2aWV3cy52aWV3X2xvZ291dCwgbmFtZT0nbG9nb3V0JyksCiAgICBwYXRoKCcnLCB2aWV3cy5pbmRleHYyLCBuYW1lPSdpbmRleCcpLAogICAgcGF0aCgnYWRtaW5pc3RyYWNhby8nLCB2aWV3cy5hZG1pbiwgbmFtZT0nY29uc3RlbF9hZG1pbicpLAogICAgcGF0aCgnYWRtaW5pc3RyYWNhby91c3Vhcmlvcy8nLCB2aWV3cy51c3VhcmlvcywgbmFtZT0nY29uc3RlbF9hZG1pbl91c3VhcmlvcycpLAogICAgcGF0aCgnYWRtaW5pc3RyYWNhby91c3Vhcmlvcy88c3RyOm1hdHJpY3VsYT4vJywgdmlld3MudXN1YXJpb3NfZWRpdGEsIG5hbWU9J2NvbnN0ZWxfYWRtaW5fdXN1YXJpb3NfZWRpdGEnKSwKICAgIHBhdGgoJ2FkbWluaXN0cmFjYW8vdXN1YXJpb3MvPHN0cjptYXRyaWN1bGE+L2luZm8vJywgdmlld3MudXN1YXJpb3NfaW5mbywgbmFtZT0nY29uc3RlbF9hZG1pbl91c3Vhcmlvc19pbmZvJyksCiAgICBwYXRoKCdhZG1pbmlzdHJhY2FvL3VzdWFyaW9zL3NlbmhhLzxpbnQ6dXNlcj4vJywgdmlld3MudXN1YXJpb3Nfc2VuaGEsIG5hbWU9J2NvbnN0ZWxfYWRtaW5fdXN1YXJpb3Nfc2VuaGEnKSwKICAgIHBhdGgoCiAgICAgICAgJ2FkbWluaXN0cmFjYW8vdXN1YXJpb3MvY2FkYXN0cm8vc2VtX2FjZXNzby8nLAogICAgICAgIHZpZXdzLmNhZGFzdHJhcl91c3VhcmlvX3Bhc3Npdm8sCiAgICAgICAgbmFtZT0nY29uc3RlbF9hZG1pbl9jYWRhc3Ryb191c3VhcmlvX3Bhc3Npdm8nCiAgICApLAogICAgcGF0aCgnY29uc3VsdGEvdXN1YXJpb3MvbmV4dD08c3RyOnJvbGxiYWNrPicsIHZpZXdzLnZpZXdfY29uc3VsdGFfZnVuY2lvbmFyaW9zLCBuYW1lPSdjb25zdWx0YV9mdW5jaW9uYXJpb3MnKSwKICAgIHBhdGgoJ2FkbWluaXN0cmFjYW8vY2FkYXN0cm8vJywgdmlld3MuY2FkYXN0cm9zLCBuYW1lPSdjb25zdGVsX2FkbWluX2NhZGFzdHJvcycpLAogICAgcGF0aCgnY29uc3VsdGEvdmVpY3Vsb3MvbmV4dD08c3RyOnJvbGxiYWNrPicsIHZpZXdzLnZpZXdfY29uc3VsdGFfdmVpY3Vsb3MsIG5hbWU9J2NvbnN1bHRhX3ZlaWN1bG9zJyksCl0KPHxmaW1fc3VmZml4fD4KICAgIHBhdGgoJ2NhZHVzdWFyaW8vJywgdmlld3Mudmlld19jYWRhc3RyYXJfdXN1YXJpbywgbmFtZT0nY2FkYXN0cmFfdXN1YXJpbycpLAogICAgIyBwYXRoKCdjYWR1c3VhcmlvLXBhc3MvJywgdmlld3Mudmlld19jYWRhc3RyYXJfdXN1YXJpb19wYXNzaXZvLCBuYW1lPSdjYWRhc3RyYV91c3VhcmlvX3Bhc3Npdm8nKSwKICAgICMgcGF0aCgnY2FkdmVpY3Vsby8nLCB2aWV3cy52aWV3X2NhZGFzdHJhcl92ZWljdWxvLCBuYW1lPSdjYWRhc3RyYV92ZWljdWxvJyksCiAgICBwYXRoKCdsb2dpbi8nLCB2aWV3cy52aWV3X2xvZ2luLCBuYW1lPSdsb2dpbicpLAo8fGZpbV9lbmR8Pg=="]
["01d899dd39b1d20bae06d9a27f083a7535d0b33d-3","01d899dd39b1d20bae06d9a27f083a7535d0b33d","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcGF0aCwgaW5jbHVkZQoKZnJvbSAuIGltcG9ydCB2aWV3cwoKdXJscGF0dGVybnMgPSBbCiAgICBwYXRoKCcnLCBpbmNsdWRlKCdjb25zdGVsLmFwcHMuY29udHJvbGVfYWNlc3Nvcy51cmxzJykpLAogICAgcGF0aCgnJywgaW5jbHVkZSgnY29uc3RlbC5hcHBzLmdlcmVuY2lhLnVybHMnKSksCgogICAgcGF0aCgnY2FkdXN1YXJpby8nLCB2aWV3cy52aWV3X2NhZGFzdHJhcl91c3VhcmlvLCBuYW1lPSdjYWRhc3RyYV91c3VhcmlvJyksCiAgICAjIHBhdGgoJ2NhZHVzdWFyaW8tcGFzcy8nLCB2aWV3cy52aWV3X2NhZGFzdHJhcl91c3VhcmlvX3Bhc3Npdm8sIG5hbWU9J2NhZGFzdHJhX3VzdWFyaW9fcGFzc2l2bycpLAo8fGZpbV9ob2xlfD4KICAgIHBhdGgoJ2FkbWluaXN0cmFjYW8vJywgdmlld3MuYWRtaW4sIG5hbWU9J2NvbnN0ZWxfYWRtaW4nKSwKICAgIHBhdGgoJ2FkbWluaXN0cmFjYW8vdXN1YXJpb3MvJywgdmlld3MudXN1YXJpb3MsIG5hbWU9J2NvbnN0ZWxfYWRtaW5fdXN1YXJpb3MnKSwKICAgIHBhdGgoJ2FkbWluaXN0cmFjYW8vdXN1YXJpb3MvPHN0cjptYXRyaWN1bGE+LycsIHZpZXdzLnVzdWFyaW9zX2VkaXRhLCBuYW1lPSdjb25zdGVsX2FkbWluX3VzdWFyaW9zX2VkaXRhJyksCiAgICBwYXRoKCdhZG1pbmlzdHJhY2FvL3VzdWFyaW9zLzxzdHI6bWF0cmljdWxhPi9pbmZvLycsIHZpZXdzLnVzdWFyaW9zX2luZm8sIG5hbWU9J2NvbnN0ZWxfYWRtaW5fdXN1YXJpb3NfaW5mbycpLAogICAgcGF0aCgnYWRtaW5pc3RyYWNhby91c3Vhcmlvcy9zZW5oYS88aW50OnVzZXI+LycsIHZpZXdzLnVzdWFyaW9zX3NlbmhhLCBuYW1lPSdjb25zdGVsX2FkbWluX3VzdWFyaW9zX3NlbmhhJyksCiAgICBwYXRoKAogICAgICAgICdhZG1pbmlzdHJhY2FvL3VzdWFyaW9zL2NhZGFzdHJvL3NlbV9hY2Vzc28vJywKICAgICAgICB2aWV3cy5jYWRhc3RyYXJfdXN1YXJpb19wYXNzaXZvLAogICAgICAgIG5hbWU9J2NvbnN0ZWxfYWRtaW5fY2FkYXN0cm9fdXN1YXJpb19wYXNzaXZvJwogICAgKSwKICAgIHBhdGgoJ2NvbnN1bHRhL3VzdWFyaW9zL25leHQ9PHN0cjpyb2xsYmFjaz4nLCB2aWV3cy52aWV3X2NvbnN1bHRhX2Z1bmNpb25hcmlvcywgbmFtZT0nY29uc3VsdGFfZnVuY2lvbmFyaW9zJyksCiAgICBwYXRoKCdhZG1pbmlzdHJhY2FvL2NhZGFzdHJvLycsIHZpZXdzLmNhZGFzdHJvcywgbmFtZT0nY29uc3RlbF9hZG1pbl9jYWRhc3Ryb3MnKSwKICAgIHBhdGgoJ2NvbnN1bHRhL3ZlaWN1bG9zL25leHQ9PHN0cjpyb2xsYmFjaz4nLCB2aWV3cy52aWV3X2NvbnN1bHRhX3ZlaWN1bG9zLCBuYW1lPSdjb25zdWx0YV92ZWljdWxvcycpLApdCjx8ZmltX3N1ZmZpeHw+CiAgICAjIHBhdGgoJ2NhZHZlaWN1bG8vJywgdmlld3Mudmlld19jYWRhc3RyYXJfdmVpY3VsbywgbmFtZT0nY2FkYXN0cmFfdmVpY3VsbycpLAogICAgcGF0aCgnbG9naW4vJywgdmlld3Mudmlld19sb2dpbiwgbmFtZT0nbG9naW4nKSwKICAgIHBhdGgoJ2xvZ291dC8nLCB2aWV3cy52aWV3X2xvZ291dCwgbmFtZT0nbG9nb3V0JyksCiAgICBwYXRoKCcnLCB2aWV3cy5pbmRleHYyLCBuYW1lPSdpbmRleCcpLAo8fGZpbV9lbmR8Pg=="]
["dac48cc2624c4740640ddb5c6474a15193c78062-1","dac48cc2624c4740640ddb5c6474a15193c78062","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KV0lLSV9VUkwgPSAiaHR0cHM6Ly9zMy11cy13ZXN0LTIuYW1hem9uYXdzLmNvbS9waW5hZm9yZS11cy13ZXN0LTIvcWFudGEtam1sci1kYXRhc2V0cy93aWtpcGVkaWEvd2lraV9sb29rdXAuanNvbiIKPHxmaW1fZW5kfD4="]
["a9bbebc405dba9b17e980a65174e4ac801b85c91-1","a9bbebc405dba9b17e980a65174e4ac801b85c91","PHxmaW1fcHJlZml4fD4KZnJvbSBhcmdwYXJzZSBpbXBvcnQgQXJndW1lbnRFcnJvcgpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAppbXBvcnQgbG9nZ2luZwpmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWV6b25lLCB0aW1lZGVsdGEKZnJvbSByZSBpbXBvcnQgSQoKaW1wb3J0IGJvdG8zCmltcG9ydCBweXRlc3QKCmZyb20gd29ya2RvY3NfZHIuY2xpX2FyZ3VtZW50cyBpbXBvcnQgYnVja2V0X3VybF9mcm9tX2lucHV0LCBjbGllbnRzX2Zyb21faW5wdXQsIG9yZ2FuaXphdGlvbl9pZF9mcm9tX2lucHV0CmZyb20gd29ya2RvY3NfZHIuZGlyZWN0b3J5X21pbmRlciBpbXBvcnQgRGlyZWN0b3J5QmFja3VwTWluZGVyLCBSdW5FdmVudCwgUnVuU3R5bGUKZnJvbSB3b3JrZG9jc19kci5saXN0aW5ncyBpbXBvcnQgV2REaXJlY3RvcnksIFdkSXRlbUFwZXhPd25lcgpmcm9tIHdvcmtkb2NzX2RyLnVzZXIgaW1wb3J0IFVzZXJIZWxwZXIsIFVzZXJLZXlIZWxwZXIKZnJvbSB3b3JrZG9jc19kci53b3JrZG9jc19idWNrZXRfc3luYyBpbXBvcnQgV29ya0RvY3MyQnVja2V0U3luYwoKY2xhc3MgVGVzdEFjdGl2aXRpZXM6CgogICAgd2RkaXJfa3dhcmdzID0gewogICAgICAgICJjbGllbnRzIjogY2xpZW50c19mcm9tX2lucHV0KCksCiAgICAgICAgIm9yZ2FuaXphdGlvbl9pZCI6IG9yZ2FuaXphdGlvbl9pZF9mcm9tX2lucHV0KCksCiAgICB9CiAgICBzdGRfd2RiX2t3YXJncyA9IHsqKndkZGlyX2t3YXJncywgKip7ImJ1Y2tldF91cmwiOiBidWNrZXRfdXJsX2Zyb21faW5wdXQoKX19CgogICAgQHB5dGVzdC5tYXJrLmludGVncmF0aW9uCiAgICBkZWYgdGVzdF9nZXRfYWN0aXZpdGllc19yYXcoc2VsZik6CiAgICAgICAgZGlyZWN0b3J5ID0gV2REaXJlY3RvcnkoKipzZWxmLndkZGlyX2t3YXJncykKICAgICAgICAjIHN0YXJ0X3RpbWUgaXMgNyBob3VycyBhZ28KICAgICAgICBzdGFydF90aW1lID0gZGF0ZXRpbWUubm93KHR6PXRpbWV6b25lLnV0YykgKyB0aW1lZGVsdGEoc2Vjb25kcz0tMzYwMCo3KQogICAgICAgICMgdHlwZXMgPSAiRE9DVU1FTlRfTU9WRUQiCiAgICAgICAgYWN0X2dlbiA9IGRpcmVjdG9yeS5nZW5lcmF0ZV9hY3Rpdml0aWVzKHN0YXJ0X3RpbWU9c3RhcnRfdGltZSkKICAgICAgICBhY3Rpdml0aWVzID0gW2EgZm9yIGEgaW4gYWN0X2dlbl0KICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShhY3Rpdml0aWVzLCBsaXN0KQogICAgCiAgICBAcHl0ZXN0Lm1hcmsuaW50ZWdyYXRpb24KICAgIGRlZiB0ZXN0X3J1bl9zdHlsZXMoc2VsZik6CiAgICAgICAgZGJtID0gRGlyZWN0b3J5QmFja3VwTWluZGVyKCoqc2VsZi5zdGRfd2RiX2t3YXJncykKICAgICAgICBydW5fc3R5bGUgPSBkYm0uZ2V0X2Jlc3RfcnVuX3N0eWxlKCkKICAgICAgICBhc3NlcnQgcnVuX3N0eWxlIGluIGxpc3QoUnVuU3R5bGUpCgogICAgIyBAcHl0ZXN0Lm1hcmsuaW50ZWdyYXRpb24KICAgICMgZGVmIHRlc3RfdXBkYXRlX3J1bnRpbWVzX2Z1bGwoc2VsZik6CiAgICAjICAgICBkYm0gPSBEaXJlY3RvcnlCYWNrdXBNaW5kZXIoKipzZWxmLnN0ZF93ZGJfa3dhcmdzKQogICAgIyAgICAgZnVsbF9zdGFydCA9IGRhdGV0aW1lKDIwMjIsIDEsIDEyLCA5LCAzMCwgMCwgdHppbmZvPXRpbWV6b25lLnV0YykKICAgICMgICAgIGZ1bGxfZW5kID0gZGF0ZXRpbWUoMjAyMiwgMSwgMTIsIDEyLCAzMCwgMCwgdHppbmZvPXRpbWV6b25lLnV0YykKICAgICMgICAgIGRibS51cGRhdGVfbGFzdF9ldmVudF90aW1lKFJ1blN0eWxlLkZVTEwsIFJ1bkV2ZW50LlNUQVJULCBleHRyYV9pbmZvPU5vbmUsIGV2ZW50X3RpbWU9ZnVsbF9zdGFydCkKICAgICMgICAgIGRibS51cGRhdGVfbGFzdF9ldmVudF90aW1lKFJ1blN0eWxlLkZVTEwsIFJ1bkV2ZW50LkVORCwgZXh0cmFfaW5mbz1Ob25lLCBldmVudF90aW1lPWZ1bGxfZW5kKQogICAgIyAgICAgbWV0YWRhdGEgPSBkYm0uZ2V0X2xhc3RfbWV0YWRhdGEoZGJtLmdldF9rZXkoUnVuU3R5bGUuRlVMTCwgUnVuRXZlbnQuU1RBUlQpKQogICAgIyAgICAgYXNzZXJ0ICJTdGFydFRpbWUiIGluIG1ldGFkYXRhCgogICAgQHB5dGVzdC5tYXJrLmludGVncmF0aW9uCiAgICBkZWYgdGVzdF91cGRhdGVfcnVudGltZXNfYWN0aXZpdGllc18yMDIyXzAxXzExKHNlbGYpOgogICAgICAgIGRibSA9IERpcmVjdG9yeUJhY2t1cE1pbmRlcigqKnNlbGYuc3RkX3dkYl9rd2FyZ3MpCiAgICAgICAgYWN0aXZpdHlfc3RhcnQgPSBkYXRldGltZSgyMDIyLCAxLCAxMSwgOSwgMzAsIDAsIHR6aW5mbz10aW1lem9uZS51dGMpCiAgICAgICAgYWN0aXZpdHlfZW5kID0gZGF0ZXRpbWUoMjAyMiwgMSwgMTEsIDEyLCAzMCwgMCwgdHppbmZvPXRpbWV6b25lLnV0YykKICAgICAgICBkYm0udXBkYXRlX2xhc3RfZXZlbnRfdGltZShSdW5TdHlsZS5BQ1RJVklUSUVTLCBSdW5FdmVudC5TVEFSVCwgZXh0cmFfaW5mbz1Ob25lLCBldmVudF90aW1lPWFjdGl2aXR5X3N0YXJ0KQogICAgICAgIGRibS51cGRhdGVfbGFzdF9ldmVudF90aW1lKFJ1blN0eWxlLkFDVElWSVRJRVMsIFJ1bkV2ZW50LkVORCwgZXh0cmFfaW5mbz1Ob25lLCBldmVudF90aW1lPWFjdGl2aXR5X2VuZCkKICAgICAgICBtZXRhZGF0YSA9IGRibS5nZXRfbGFzdF9tZXRhZGF0YShkYm0uZ2V0X2tleShSdW5TdHlsZS5GVUxMLCBSdW5FdmVudC5TVEFSVCkpCiAgICAgICAgYXNzZXJ0ICJTdGFydFRpbWUiIGluIG1ldGFkYXRhCgogICAgQHB5dGVzdC5tYXJrLmludGVncmF0aW9uCiAgICBkZWYgdGVzdF91cGRhdGVfcnVudGltZXNfYWN0aXZpdGllc18yMDIyXzAxXzIwKHNlbGYpOgogICAgICAgIGRibSA9IERpcmVjdG9yeUJhY2t1cE1pbmRlcigqKnNlbGYuc3RkX3dkYl9rd2FyZ3MpCiAgICAgICAgYWN0aXZpdHlfc3RhcnQgPSBkYXRldGltZSgyMDIyLCAxLCAyMCwgNywgMzAsIDAsIHR6aW5mbz10aW1lem9uZS51dGMpCiAgICAgICAgYWN0aXZpdHlfZW5kID0gZGF0ZXRpbWUoMjAyMiwgMSwgMjAsIDcsIDMwLCAwLCB0emluZm89dGltZXpvbmUudXRjKQogICAgICAgIGRibS51cGRhdGVfbGFzdF9ldmVudF90aW1lKFJ1blN0eWxlLkFDVElWSVRJRVMsIFJ1bkV2ZW50LlNUQVJULCBleHRyYV9pbmZvPU5vbmUsIGV2ZW50X3RpbWU9YWN0aXZpdHlfc3RhcnQpCiAgICAgICAgZGJtLnVwZGF0ZV9sYXN0X2V2ZW50X3RpbWUoUnVuU3R5bGUuQUNUSVZJVElFUywgUnVuRXZlbnQuRU5ELCBleHRyYV9pbmZvPU5vbmUsIGV2ZW50X3RpbWU9YWN0aXZpdHlfZW5kKQogICAgICAgIG1ldGFkYXRhID0gZGJtLmdldF9sYXN0X21ldGFkYXRhKGRibS5nZXRfa2V5KFJ1blN0eWxlLkZVTEwsIFJ1bkV2ZW50LlNUQVJUKSkKICAgICAgICBhc3NlcnQgIlN0YXJ0VGltZSIgaW4gbWV0YWRhdGEKCgoKICAgIEBweXRlc3QubWFyay5pbnRlZ3JhdGlvbgogICAgQHB5dGVzdC5tYXJrLmN1cnJlbnQKICAgIGRlZiB0ZXN0X3N5bmNfYWN0aXZpdGllc19zY3JhdGNoKHNlbGYpOgogICAgICAgICIiIlNjcmF0Y2hwYWQgdG8gcHJvdG90eXBlIHVwIHRoZSBhY3Rpdml0aWVzIHN5bmMiIiIKICAgICAgICBkaXJlY3RvcnkgPSBXZERpcmVjdG9yeSgqKnNlbGYud2RkaXJfa3dhcmdzKQogICAgICAgICMgRmlyc3QgZ2V0IGEgbGlzdCBvZiB1c2VycyAtLSB3ZSBhcmUgZ29pbmcgdG8gbmVlZCB0aGVtIGFsb25nIHdpdGggdGhlaXIgc3luYyBvYmplY3RzCiAgICAgICAgdXNlcnMgPSBsaXN0KGRpcmVjdG9yeS5nZW5lcmF0ZV91c2VycygpKQogICAgICAgIHVzZXJfaGVscGVycyA9IHt1WyJJZCJdOiBVc2VySGVscGVyKHUpIGZvciB1IGluIHVzZXJzfQogICAgICAgIHVzZXJfa2V5aGVscGVycyA9IHt1aWQ6IFVzZXJLZXlIZWxwZXIodWgsIHNlbGYuc3RkX3dkYl9rd2FyZ3NbImJ1Y2tldF91cmwiXSkgZm9yIHVpZCwgdWggaW4gdXNlcl9oZWxwZXJzLml0ZW1zKCl9CiAgICAgICAgYXdzY2xpZW50cyA9IHNlbGYud2RkaXJfa3dhcmdzWyJjbGllbnRzIl0KICAgICAgICB1c2VyX3N5bmNlcnMgPSB7dVsiSWQiXTogV29ya0RvY3MyQnVja2V0U3luYyhhd3NjbGllbnRzLCB1c2VyX2hlbHBlcnNbdVsiSWQiXV0sIHVzZXJfa2V5aGVscGVyc1t1WyJJZCJdXSkgZm9yIHUgaW4gdXNlcnN9CiAgICAgICAgYXBleF9zeW5jZXIgPSBXZEl0ZW1BcGV4T3duZXIoYXdzY2xpZW50cywgdXNlcnMsIHVzZXJfc3luY2VycykKICAgICAgICAjIE5leHQgZmlndXJlIG91dCB3aGF0IHRoZSBzdGFydC10aW1lIGlzCiAgICAgICAgI1RPRE86IEdvb2QgaGV1cmlzdGljcyBmb3IgZGV0ZXJtaW5pbmcgbGFzdCBydW50aW1lCiAgICAgICAgc3RhcnRfdGltZSA9IGRhdGV0aW1lLm5vdyh0ej10aW1lem9uZS51dGMpICsgdGltZWRlbHRhKHNlY29uZHM9LTM2MDAqNDgpCiAgICAgICAgIyBOb3cgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIGFjdGlvbnMKICAgICAgICBhY3Rpdml0aWVzID0gbGlzdChkaXJlY3RvcnkuZ2VuZXJhdGVfYWN0aXZpdGllcyhzdGFydF90aW1lKSkKICAgICAgICAjIENvbnNvbGlkYXRpbmcgZXZlbnRzIHdpdGhvdXQgYSBwYXJlbnQKICAgICAgICBkb2NfZmluYWxldmVudHMgPSBkaWN0KCkgIyBLZXllZCBieSBkb2N1bWVudGlkLCB2YWx1ZSBpcyBmaW5hbCBldmVudAogICAgICAgIGRvY19tb3ZlcyA9IGRlZmF1bHRkaWN0KGxpc3QpICMgS2V5ZWQgYnkgZG9jdW1lbnRpZCwgdmFsdWUgaXMgbGlzdCBvZiBtb3ZlIGV2ZW50cwogICAgICAgIGZvbGRlcl9maW5hbGV2ZW50cyA9IGRpY3QoKSAjIEtleWVkIGJ5IGZvbGRlcmlkLCB2YWx1ZSBpcyBmaW5hbCBldmVudAogICAgICAgIGZvbGRlcl9tb3ZlcyA9IGRlZmF1bHRkaWN0KGxpc3QpICMgS2V5ZWQgYnkgZm9sZGVyaWQsIHZhbHVlIGlzIGxpc3Qgb2YgbW92ZSBldmVudHMKICAgICAgICBmb3IgYSBpbiBhY3Rpdml0aWVzOgogICAgICAgICAgICBtb3ZlX21hcCA9IGZvbGRlcl9tb3ZlcyBpZiBhWyJUeXBlIl0uc3RhcnRzd2l0aCgiRk9MREVSXyIpIGVsc2UgZG9jX21vdmVzCjx8ZmltX2hvbGV8PgoKICAgICAgICAgICAgaWYgaXRlbV9pZCBpbiBpdGVtX21hcDoKICAgICAgICAgICAgICAgIGlmIGFbIlRpbWVTdGFtcCJdID49IGl0ZW1fbWFwW2l0ZW1faWRdWyJUaW1lU3RhbXAiXToKICAgICAgICAgICAgICAgICAgICBpdGVtX21hcCA9IGEKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGl0ZW1fbWFwW2l0ZW1faWRdID0gYQogICAgICAgICMgdXBkYXRlIGZvbGRlciBkZXNjcmlwdGlvbnMgCiAgICAgICAgZm9sZGVyX3VwZGF0ZXMgPSBbeyJmb2xkZXJfaWQiOiBrLCAidXNlciI6IGFbIlJlc291cmNlTWV0YWRhdGEiXVsiT3duZXIiXVsiSWQiXX0gZm9yIGssIGEgaW4gZm9sZGVyX2ZpbmFsZXZlbnRzLml0ZW1zKCldCgogICAgICAgICMgUGF0Y2ggb2xkIGZvbGRlcnMgaW50byBkb2N1bWVudCBhY3Rpdml0aWVzCiAgICAgICAgZm9yIGRvY19pZCwgbW92ZXMgaW4gZG9jX21vdmVzLml0ZW1zKCk6CiAgICAgICAgICAgIG9sZF9mb2xkZXJzID0gW2FbIk9yaWdpbmFsUGFyZW50Il1bIklkIl0gZm9yIGEgaW4gbW92ZXNdCiAgICAgICAgICAgIGRvY19maW5hbGV2ZW50c1tkb2NfaWRdWyJPbGRGb2xkZXJJZHMiXSA9IG9sZF9mb2xkZXJzCgogICAgICAgIGRvY191cGRhdGVzID0gW3siZG9jdW1lbnRfaWQiOiBrLCAidXNlciI6IGFbIlJlc291cmNlTWV0YWRhdGEiXVsiT3duZXIiXVsiSWQiXSwgIm9sZF9mb2xkZXJfaWRzIjogYS5nZXQoIk9sZEZvbGRlcklkcyIsIFtdKX0gZm9yIGssIGEgaW4gZG9jX2ZpbmFsZXZlbnRzLml0ZW1zKCldCgogICAgICAgICMgVE9ETzogSGFuZGxlIHNpdHVhdGlvbnMgd2hlcmUgd2UgY2FuJ3QgcmVhZCB0aGUgZG9jdW1lbnQgKHBvc3NpYmx5IGJlY2F1c2UgaXQncyBkZWxldGVkKSBiZXR0ZXIuCiAgICAgICAgYWN0aW9ucyA9IFtdCiAgICAgICAgZGVmIGNob29zZV9zeW5jZXIoc3luY2VyX21hcHBlcjogV2RJdGVtQXBleE93bmVyLCBvd25lcl9ndWVzczpzdHIsIHN5bmNlcl9hcmdzLCBmb2xkZXJfaWQgPSBOb25lLCBkb2N1bWVudF9pZCA9IE5vbmUpOgogICAgICAgICAgICBpZiBkb2N1bWVudF9pZCBpcyBOb25lIGFuZCBmb2xkZXJfaWQgaXMgTm9uZToKICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiZm9sZGVyX2lkIGFuZCBkb2N1bWVudF9pZCBjYW4ndCBib3RoIGJlIGFic2VudCIpCiAgICAgICAgICAgIHN5bmNlciA9IE5vbmUKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgaWYgZG9jdW1lbnRfaWQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgc3luY2VyID0gc3luY2VyX21hcHBlci5nZXRfYnlfZG9jdW1lbnRfaWQoZG9jdW1lbnRfaWQpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHN5bmNlciA9IHN5bmNlcl9tYXBwZXIuZ2V0X2J5X2ZvbGRlcl9pZChmb2xkZXJfaWQpCiAgICAgICAgICAgIGV4Y2VwdCAoYXdzY2xpZW50cy5kb2NzX2NsaWVudCgpLmV4Y2VwdGlvbnMuRW50aXR5Tm90RXhpc3RzRXhjZXB0aW9uLCBcCiAgICAgICAgICAgICAgICBhd3NjbGllbnRzLmRvY3NfY2xpZW50KCkuZXhjZXB0aW9ucy5VbmF1dGhvcml6ZWRSZXNvdXJjZUFjY2Vzc0V4Y2VwdGlvbik6CiAgICAgICAgICAgICAgICBpZiBvd25lcl9ndWVzcyBpbiBzeW5jZXJfbWFwcGVyLnJlc3VsdF9tYXA6CiAgICAgICAgICAgICAgICAgICAgIyBzeW5jZXIgPSBzeW5jZXJfbWFwcGVyLnJlc3VsdF9tYXBbb3duZXJfZ3Vlc3NdCiAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkNvbnNpZGVyIHJldHVybmluZyBhIGRlbGV0ZSBsYW1iZGE/IikKICAgICAgICAgICAgaWYgc3luY2VyIGlzIE5vbmU6CiAgICAgICAgICAgICAgICByZXR1cm4gbGFtYmRhIGFyZ3M9c3luY2VyX2FyZ3M6IHt9CiAgICAgICAgICAgIGlmIGRvY3VtZW50X2lkIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgcmV0dXJuIGxhbWJkYSBhcmdzPXN5bmNlcl9hcmdzOiBzeW5jZXIuc3luY19kb2N1bWVudF90b19idWNrZXQoKiphcmdzKQogICAgICAgICAgICByZXR1cm4gbGFtYmRhIGFyZ3M9c3luY2VyX2FyZ3M6IHN5bmNlci51cGRhdGVfZm9sZGVyX3N1bW1hcnkoKiphcmdzKQoKCiAgICAgICAgZm9yIHVwZCBpbiBmb2xkZXJfdXBkYXRlczoKICAgICAgICAgICAgYWN0aW9ucy5hcHBlbmQoY2hvb3NlX3N5bmNlcihhcGV4X3N5bmNlciwgdXBkWyJ1c2VyIl0sIFwKICAgICAgICAgICAgICAgIHN5bmNlcl9hcmdzPXsiZm9sZGVyX2lkIjogdXBkWyJmb2xkZXJfaWQiXX0sIGZvbGRlcl9pZD11cGRbImZvbGRlcl9pZCJdKSkKICAgICAgICBmb3IgdXBkIGluIGRvY191cGRhdGVzOgogICAgICAgICAgICBhY3Rpb25zLmFwcGVuZChjaG9vc2Vfc3luY2VyKGFwZXhfc3luY2VyLCB1cGRbInVzZXIiXSwgXAogICAgICAgICAgICAgICAgc3luY2VyX2FyZ3M9eyJkb2N1bWVudF9pZCI6IHVwZFsiZG9jdW1lbnRfaWQiXSwgIm9sZF9mb2xkZXJfaWRzIjogdXBkWyJvbGRfZm9sZGVyX2lkcyJdfSwgZG9jdW1lbnRfaWQ9dXBkWyJkb2N1bWVudF9pZCJdKSkKICAgICAgICBmb3IgYWN0IGluIGFjdGlvbnM6CiAgICAgICAgICAgIGFjdCgpCgoKCgoKICAgICAgICBwYXNzCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGl0ZW1fbWFwID0gZm9sZGVyX2ZpbmFsZXZlbnRzIGlmIGFbIlR5cGUiXS5zdGFydHN3aXRoKCJGT0xERVJfIikgZWxzZSBkb2NfZmluYWxldmVudHMKICAgICAgICAgICAgaXRlbV9pZCA9IGFbIlJlc291cmNlTWV0YWRhdGEiXVsiSWQiXQogICAgICAgICAgICBpZiBhWyJUeXBlIl0uZW5kc3dpdGgoIl9NT1ZFRCIpOgogICAgICAgICAgICAgICAgbW92ZV9tYXBbaXRlbV9pZF0uYXBwZW5kKGEpCjx8ZmltX2VuZHw+"]
["972592f139a75186359159470702d3a4ec7f57b9-1","972592f139a75186359159470702d3a4ec7f57b9","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc9dXRmLTgKCiIiIgpJbWFnZV9BbGdvcml0aG1fVG9vbGJveApSZXNpemUgcGljIHRvIGRlZmluZWQgc2l6ZS4KCl9fYXV0aG9yX18gPSAnSk5pbmdXZWknCiIiIgoKaW1wb3J0IG9zCmltcG9ydCBjdjIKCgpkZWYgZHN0X2NoZWNrKGRzdCk6CiAgICBpbXBvcnQgc2h1dGlsCiAgICB0cnk6CiAgICAgICAgc2h1dGlsLnJtdHJlZShkc3QpCiAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICBwYXNzCiAgICBvcy5tYWtlZGlycyhkc3QpCgoKZGVmIGJvdW5kYXJ5X2NvbnRyb2wodmFsdWUsIG1pbiwgbWF4KToKICAgICMg57G75Z6L5qOA5p+lCiAgICB2YWx1ZSA9IGludCh2YWx1ZSkKICAgICMg6L6555WM5rqi5Ye65qOA5p+lCiAgICB2YWx1ZSA9IG1pbiBpZiB2YWx1ZSA8IG1pbiBlbHNlIHZhbHVlCiAgICB2YWx1ZSA9IG1heCBpZiB2YWx1ZSA+IG1heCBlbHNlIHZhbHVlCiAgICByZXR1cm4gdmFsdWUKCgpkZWYgZ2V0X3BhdGhfbGlzdHMoc3JjKToKICAgIGNoZWNrX3N1ZmZpeCA9IGxhbWJkYSB4IDogVHJ1ZSBpZiBvcy5wYXRoLnNwbGl0ZXh0KHgpWzFdIGluIFsiLmpwZyIsICIuSlBHIiwgIi5wbmciLCAiLlBORyJdIGVsc2UgRmFsc2UKICAgIHNyY19pbWFnZV9wYXRocyA9IFtvcy5wYXRoLmpvaW4oc3JjLCBuYW1lKSBmb3IgbmFtZSBpbiBvcy5saXN0ZGlyKHNyYykgaWYgY2hlY2tfc3VmZml4KG5hbWUpXQogICAgYXNzZXJ0IGxlbihzcmNfaW1hZ2VfcGF0aHMpCiAgICBzcmNfaW1hZ2VfcGF0aHMuc29ydCgpCiAgICBzcmNfbGFiZWxfcGF0aHMgPSBbcGF0aC5yZXBsYWNlKG9zLnBhdGguc3BsaXRleHQocGF0aClbMV0sICIudHh0IikgZm9yIHBhdGggaW4gc3JjX2ltYWdlX3BhdGhzXQogICAgZHN0X2ltYWdlX3BhdGhzID0gW3BhdGgucmVwbGFjZSgic3JjIiwgImRzdCIpLnJlcGxhY2Uob3MucGF0aC5zcGxpdGV4dChwYXRoKVsxXSwgb3MucGF0aC5zcGxpdGV4dChwYXRoKVsxXS5sb3dlcigpKSBmb3IgcGF0aCBpbiBzcmNfaW1hZ2VfcGF0aHNdCiAgICBkc3RfbGFiZWxfcGF0aHMgPSBbcGF0aC5yZXBsYWNlKCJzcmMiLCAiZHN0IikucmVwbGFjZShvcy5wYXRoLnNwbGl0ZXh0KHBhdGgpWzFdLCAiLnR4dCIpIGZvciBwYXRoIGluIHNyY19pbWFnZV9wYXRoc10KICAgIHJldHVybiBzcmNfaW1hZ2VfcGF0aHMsIHNyY19sYWJlbF9wYXRocywgZHN0X2ltYWdlX3BhdGhzLCBkc3RfbGFiZWxfcGF0aHMKCgpkZWYgZ2V0X2ltYWdlX3NpemUoaW1hZ2VfcGF0aCk6CiAgICBpbWFnZSA9IGN2Mi5pbXJlYWQoaW1hZ2VfcGF0aCkKICAgIGgsIHcgPSBpbWFnZS5zaGFwZVs6Ml0KICAgIGhfbWF4LCB3X21heCA9IGggLSAxLCB3IC0gMQogICAgcmV0dXJuIGhfbWF4LCB3X21heAoKCjx8ZmltX2hvbGV8PgogICAgICAgIGN2Mi5pbXdyaXRlKG9zLnBhdGguc3BsaXRleHQoZHN0X2ltYWdlX3BhdGgpWzBdKyItbyIrb3MucGF0aC5zcGxpdGV4dChkc3RfaW1hZ2VfcGF0aClbMV0sIGltYWdlKQogICAgaWYgaF9mbGlwOgogICAgICAgICMgRmxpcHBlZCBIb3Jpem9udGFsbHkg5Zu+5YOP5rC05bmz57+76L2sCiAgICAgICAgaF9mbGlwID0gY3YyLmZsaXAoaW1hZ2UsIDEpCiAgICAgICAgY3YyLmltd3JpdGUob3MucGF0aC5zcGxpdGV4dChkc3RfaW1hZ2VfcGF0aClbMF0rIi1oIitvcy5wYXRoLnNwbGl0ZXh0KGRzdF9pbWFnZV9wYXRoKVsxXSwgaF9mbGlwKQogICAgaWYgdl9mbGlwOgogICAgICAgICMgRmxpcHBlZCBWZXJ0aWNhbGx5IOWbvuWDj+WeguebtOe/u+i9rAogICAgICAgIHZfZmxpcCA9IGN2Mi5mbGlwKGltYWdlLCAwKQogICAgICAgIGN2Mi5pbXdyaXRlKG9zLnBhdGguc3BsaXRleHQoZHN0X2ltYWdlX3BhdGgpWzBdKyItdiIrb3MucGF0aC5zcGxpdGV4dChkc3RfaW1hZ2VfcGF0aClbMV0sIHZfZmxpcCkKICAgIGlmIGh2X2ZsaXA6CiAgICAgICAgIyBGbGlwcGVkIEhvcml6b250YWxseSAmIFZlcnRpY2FsbHkg5Zu+5YOP5rC05bmz5Z6C55u057+76L2sCiAgICAgICAgaHZfZmxpcCA9IGN2Mi5mbGlwKGltYWdlLCAtMSkKICAgICAgICBjdjIuaW13cml0ZShvcy5wYXRoLnNwbGl0ZXh0KGRzdF9pbWFnZV9wYXRoKVswXSsiLWh2Iitvcy5wYXRoLnNwbGl0ZXh0KGRzdF9pbWFnZV9wYXRoKVsxXSwgaHZfZmxpcCkKCgpkZWYgZW5oYW5jZV9sYWJlbChzcmNfbGFiZWxfcGF0aCwgZHN0X2xhYmVsX3BhdGgsIGhfZmxpcCwgdl9mbGlwLCBoX3ZfZmxpcCwgaCwgdyk6CiAgICByX2ZpbGUgPSBvcGVuKHNyY19sYWJlbF9wYXRoLCAiciIpCiAgICBsaW5lcyA9IHJfZmlsZS5yZWFkbGluZXMoKQogICAgXywgbWVzc2FnZXMgPSBsaW5lc1swXSwgbGluZXNbMTpdCiAgICByX2ZpbGUuY2xvc2UoKQogICAgaWYgVHJ1ZToKICAgICAgICAjIE9yaWdpbmFsIGxhYmVsCiAgICAgICAgb19maWxlID0gb3Blbihvcy5wYXRoLnNwbGl0ZXh0KGRzdF9sYWJlbF9wYXRoKVswXSsiLW8iK29zLnBhdGguc3BsaXRleHQoZHN0X2xhYmVsX3BhdGgpWzFdLCAidyIpCiAgICAgICAgb19maWxlLndyaXRlbGluZXMobGluZXNbMF0pCiAgICAgICAgb19maWxlLndyaXRlbGluZXMobWVzc2FnZXMpCiAgICAgICAgb19maWxlLmNsb3NlKCkKICAgIGlmIGhfZmxpcDoKICAgICAgICAjIEZsaXBwZWQgSG9yaXpvbnRhbGx5IOawtOW5s+e/u+i9rAogICAgICAgIGhfZmlsZSA9IG9wZW4ob3MucGF0aC5zcGxpdGV4dChkc3RfbGFiZWxfcGF0aClbMF0rIi1oIitvcy5wYXRoLnNwbGl0ZXh0KGRzdF9sYWJlbF9wYXRoKVsxXSwgInciKQogICAgICAgIGhfZmlsZS53cml0ZWxpbmVzKGxpbmVzWzBdKQogICAgICAgIGZvciBtZXNzIGluIG1lc3NhZ2VzOgogICAgICAgICAgICBpZiBtZXNzLnNwbGl0KCk6CiAgICAgICAgICAgICAgICB4MSwgeTEsIHgyLCB5MiA9IGxpc3QobWFwKGludCwgbWVzcy5zcGxpdCgpKSkKICAgICAgICAgICAgICAgICMgYm91bmRhcnkgY29udHJvbAogICAgICAgICAgICAgICAgeDEsIHgyID0gYm91bmRhcnlfY29udHJvbCh4MSwgMCwgdyksIGJvdW5kYXJ5X2NvbnRyb2woeDIsIDAsIHcpCiAgICAgICAgICAgICAgICB5MSwgeTIgPSBib3VuZGFyeV9jb250cm9sKHkxLCAwLCBoKSwgYm91bmRhcnlfY29udHJvbCh5MiwgMCwgaCkKICAgICAgICAgICAgICAgICMgZmxpcAogICAgICAgICAgICAgICAgeDFfbmV3ID0gdyAtIHgxCiAgICAgICAgICAgICAgICB5MV9uZXcgPSB5MQogICAgICAgICAgICAgICAgeDJfbmV3ID0gdyAtIHgyCiAgICAgICAgICAgICAgICB5Ml9uZXcgPSB5MgogICAgICAgICAgICAgICAgbmV3X21lc3MgPSAiezB9IHsxfSB7Mn0gezN9XG4iLmZvcm1hdCh4MV9uZXcsIHkxX25ldywgeDJfbmV3LCB5Ml9uZXcpCiAgICAgICAgICAgICAgICBoX2ZpbGUud3JpdGVsaW5lcyhuZXdfbWVzcykKICAgICAgICBoX2ZpbGUuY2xvc2UoKQogICAgaWYgdl9mbGlwOgogICAgICAgICMgRmxpcHBlZCBWZXJ0aWNhbGx5IOWeguebtOe/u+i9rAogICAgICAgIHZfZmlsZSA9IG9wZW4ob3MucGF0aC5zcGxpdGV4dChkc3RfbGFiZWxfcGF0aClbMF0rIi12Iitvcy5wYXRoLnNwbGl0ZXh0KGRzdF9sYWJlbF9wYXRoKVsxXSwgInciKQogICAgICAgIHZfZmlsZS53cml0ZWxpbmVzKGxpbmVzWzBdKQogICAgICAgIGZvciBtZXNzIGluIG1lc3NhZ2VzOgogICAgICAgICAgICBpZiBtZXNzLnNwbGl0KCk6CiAgICAgICAgICAgICAgICB4MSwgeTEsIHgyLCB5MiA9IGxpc3QobWFwKGludCwgbWVzcy5zcGxpdCgpKSkKICAgICAgICAgICAgICAgICMgYm91bmRhcnkgY29udHJvbAogICAgICAgICAgICAgICAgeDEsIHgyID0gYm91bmRhcnlfY29udHJvbCh4MSwgMCwgdyksIGJvdW5kYXJ5X2NvbnRyb2woeDIsIDAsIHcpCiAgICAgICAgICAgICAgICB5MSwgeTIgPSBib3VuZGFyeV9jb250cm9sKHkxLCAwLCBoKSwgYm91bmRhcnlfY29udHJvbCh5MiwgMCwgaCkKICAgICAgICAgICAgICAgICMgZmxpcAogICAgICAgICAgICAgICAgeDFfbmV3ID0geDEKICAgICAgICAgICAgICAgIHkxX25ldyA9IGggLSB5MQogICAgICAgICAgICAgICAgeDJfbmV3ID0geDIKICAgICAgICAgICAgICAgIHkyX25ldyA9IGggLSB5MgogICAgICAgICAgICAgICAgbmV3X21lc3MgPSAiezB9IHsxfSB7Mn0gezN9XG4iLmZvcm1hdCh4MV9uZXcsIHkxX25ldywgeDJfbmV3LCB5Ml9uZXcpCiAgICAgICAgICAgICAgICB2X2ZpbGUud3JpdGVsaW5lcyhuZXdfbWVzcykKICAgICAgICB2X2ZpbGUuY2xvc2UoKQogICAgaWYgaHZfZmxpcDoKICAgICAgICAjIEZsaXBwZWQgSG9yaXpvbnRhbGx5ICYgVmVydGljYWxseSDmsLTlubPlnoLnm7Tnv7vovawKICAgICAgICBodl9maWxlID0gb3Blbihvcy5wYXRoLnNwbGl0ZXh0KGRzdF9sYWJlbF9wYXRoKVswXSsiLWh2Iitvcy5wYXRoLnNwbGl0ZXh0KGRzdF9sYWJlbF9wYXRoKVsxXSwgInciKQogICAgICAgIGh2X2ZpbGUud3JpdGVsaW5lcyhsaW5lc1swXSkKICAgICAgICBmb3IgbWVzcyBpbiBtZXNzYWdlczoKICAgICAgICAgICAgaWYgbWVzcy5zcGxpdCgpOgogICAgICAgICAgICAgICAgeDEsIHkxLCB4MiwgeTIgPSBsaXN0KG1hcChpbnQsIG1lc3Muc3BsaXQoKSkpCiAgICAgICAgICAgICAgICAjIGJvdW5kYXJ5IGNvbnRyb2wKICAgICAgICAgICAgICAgIHgxLCB4MiA9IGJvdW5kYXJ5X2NvbnRyb2woeDEsIDAsIHcpLCBib3VuZGFyeV9jb250cm9sKHgyLCAwLCB3KQogICAgICAgICAgICAgICAgeTEsIHkyID0gYm91bmRhcnlfY29udHJvbCh5MSwgMCwgaCksIGJvdW5kYXJ5X2NvbnRyb2woeTIsIDAsIGgpCiAgICAgICAgICAgICAgICAjIGZsaXAKICAgICAgICAgICAgICAgIHgxX25ldyA9IHcgLSB4MQogICAgICAgICAgICAgICAgeTFfbmV3ID0gaCAtIHkxCiAgICAgICAgICAgICAgICB4Ml9uZXcgPSB3IC0geDIKICAgICAgICAgICAgICAgIHkyX25ldyA9IGggLSB5MgogICAgICAgICAgICAgICAgbmV3X21lc3MgPSAiezB9IHsxfSB7Mn0gezN9XG4iLmZvcm1hdCh4MV9uZXcsIHkxX25ldywgeDJfbmV3LCB5Ml9uZXcpCiAgICAgICAgICAgICAgICBodl9maWxlLndyaXRlbGluZXMobmV3X21lc3MpCiAgICAgICAgaHZfZmlsZS5jbG9zZSgpCgoKZGVmIG1haW4oc3JjLCBkc3QsIGhfZmxpcCwgdl9mbGlwLCBodl9mbGlwKToKICAgIGRzdF9jaGVjayhkc3QpCiAgICBzcmNfaW1hZ2VfcGF0aHMsIHNyY19sYWJlbF9wYXRocywgZHN0X2ltYWdlX3BhdGhzLCBkc3RfbGFiZWxfcGF0aHMgPSBnZXRfcGF0aF9saXN0cyhzcmMpCiAgICBmb3IgKHNyY19pbWFnZV9wYXRoLCBzcmNfbGFiZWxfcGF0aCwgZHN0X2ltYWdlX3BhdGgsIGRzdF9sYWJlbF9wYXRoKSBpbiB6aXAoc3JjX2ltYWdlX3BhdGhzLCBzcmNfbGFiZWxfcGF0aHMsIGRzdF9pbWFnZV9wYXRocywgZHN0X2xhYmVsX3BhdGhzKToKICAgICAgICBoX21heCwgd19tYXggPSBnZXRfaW1hZ2Vfc2l6ZShzcmNfaW1hZ2VfcGF0aCkKICAgICAgICBlbmhhbmNlX2ltYWdlKHNyY19pbWFnZV9wYXRoLCBkc3RfaW1hZ2VfcGF0aCwgaF9mbGlwLCB2X2ZsaXAsIGh2X2ZsaXApCiAgICAgICAgZW5oYW5jZV9sYWJlbChzcmNfbGFiZWxfcGF0aCwgZHN0X2xhYmVsX3BhdGgsIGhfZmxpcCwgdl9mbGlwLCBodl9mbGlwLCBoX21heCwgd19tYXgpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIFNSQyA9ICcuL3NyYycgICAgIyBkaXIgZm9yIG9yaWdpbiBwaWNzCiAgICBEU1QgPSAnLi9kc3QnICAgICMgZGlyIGZvciBnZW5lcmF0ZWQgcGljcwogICAgaF9mbGlwID0gVHJ1ZSAgICAjIGhvcml6b250YWwgZmxpcAogICAgdl9mbGlwID0gVHJ1ZSAgICAjIHZlcnRpY2FsIGZsaXAKICAgIGh2X2ZsaXAgPSBUcnVlICAgIyBib3RoIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGZsaXAKICAgIG1haW4oU1JDLCBEU1QsIGhfZmxpcCwgdl9mbGlwLCBodl9mbGlwKQo8fGZpbV9zdWZmaXh8PgpkZWYgZW5oYW5jZV9pbWFnZShzcmNfaW1hZ2VfcGF0aCwgZHN0X2ltYWdlX3BhdGgsIGhfZmxpcCwgdl9mbGlwLCBodl9mbGlwKToKICAgIGltYWdlID0gY3YyLmltcmVhZChzcmNfaW1hZ2VfcGF0aCkKICAgIGlmIFRydWU6CiAgICAgICAgIyBPcmlnaW5hbCBpbWFnZSDljp/lm77lg48KPHxmaW1fZW5kfD4="]
["e7a4ef198f6f16e4b5e44d2135ef6ff1133905c6-1","e7a4ef198f6f16e4b5e44d2135ef6ff1133905c6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRhdGV0aW1lCmZyb20gdGltZSBpbXBvcnQgc2xlZXAKCmZyb20gc2VsZW5pdW0gaW1wb3J0IHdlYmRyaXZlcgpmcm9tIHNlbGVuaXVtLndlYmRyaXZlci5zdXBwb3J0LnVpIGltcG9ydCBTZWxlY3QKCgpkZWYgY2xyX3RhYmxlKGRyaXZlcik6CiAgICB0cnk6CiAgICAgICAgZHJpdmVyLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3t9JykucmVtb3ZlKCk7Ii5mb3JtYXQoCiAgICAgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vdGhbdGV4dCgpPSfQotC40L8g0YHQvtC+0LHRidC10L3QuNGPJ10vYW5jZXN0b3I6OnRhYmxlWzFdIikuZ2V0X3Byb3BlcnR5KCdpZCcpCiAgICAgICAgKSkKICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgcGFzcwoKCmNocm9tZV9vcHRpb25zID0gd2ViZHJpdmVyLmNocm9tZS5vcHRpb25zLk9wdGlvbnMoKQpjaHJvbWVfb3B0aW9ucy5oZWFkbGVzcyA9IFRydWUKZHJpdmVyID0gd2ViZHJpdmVyLkNocm9tZShvcHRpb25zPWNocm9tZV9vcHRpb25zKQpkcml2ZXIubWF4aW1pemVfd2luZG93KCkKZHJpdmVyLmltcGxpY2l0bHlfd2FpdCgzKQpkcml2ZXIuZ2V0KCdodHRwczovL2Jhbmtyb3QuZmVkcmVzdXJzLnJ1L01lc3NhZ2VzLmFzcHgnKQoKZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgnY3RsMDBfY3BoQm9keV9tZHNNZXNzYWdlVHlwZV90YlNlbGVjdGVkVGV4dCcpLmNsaWNrKCkKCmlmcmFtZSA9IGRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vZm9ybS8vaWZyYW1lIikKZHJpdmVyLnN3aXRjaF90by5mcmFtZShpZnJhbWUpCmZvciBpIGluIHJhbmdlKDEwMDApOgogICAgdHJ5OgogICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vc3Bhblt0ZXh0KCk9J9Ch0L7QvtCx0YnQtdC90LjQtSDQviDRgdGD0LTQtdCx0L3QvtC8INCw0LrRgtC1J10iKS5jbGljaygpCiAgICAgICAgYnJlYWsKICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgc2xlZXAoMC4wMSkKZHJpdmVyLnN3aXRjaF90by5kZWZhdWx0X2NvbnRlbnQoKQoKZm9yIGkgaW4gcmFuZ2UoMTAwMCk6CiAgICB0cnk6CiAgICAgICAgU2VsZWN0KGRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoJ2N0bDAwX2NwaEJvZHlfZGRsQ291cnREZWNpc2lvblR5cGUnKSkuc2VsZWN0X2J5X3Zpc2libGVfdGV4dCgi0L4g0L/RgNC40LfQvdCw0L3QuNC4INC00L7Qu9C20L3QuNC60LAg0LHQsNC90LrRgNC+0YLQvtC8INC4INC+0YLQutGA0YvRgtC40Lgg0LrQvtC90LrRg9GA0YHQvdC+0LPQviDQv9GA0L7QuNC30LLQvtC00YHRgtCy0LAiKQogICAgICAgIGJyZWFrCiAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgIHNsZWVwKDAuMDEpCgpkID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAxMiwgMSwgMSkKCmNscl90YWJsZShkcml2ZXIpCndoaWxlIGQgPCBkYXRldGltZS5kYXRldGltZSgyMDE4LCAxLCAxKToKCiAgICBkcyA9IGQuc3RyZnRpbWUoIiVkLiVtLiVZIikKCiAgICBpbnB1dF9iZWdpbiA9IGRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoJ2N0bDAwX2NwaEJvZHlfY2xkckJlZ2luRGF0ZV90YlNlbGVjdGVkRGF0ZScpCgogICAgaW5wdXRfYmVnaW4uY2xlYXIoKQogICAgaW5wdXRfYmVnaW4uc2VuZF9rZXlzKGRzKQoKICAgIGlucHV0X2VuZCA9IGRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoJ2N0bDAwX2NwaEJvZHlfY2xkckVuZERhdGVfdGJTZWxlY3RlZERhdGUnKQogICAgaW5wdXRfZW5kLmNsZWFyKCkKICAgIGlucHV0X2VuZC5zZW5kX2tleXMoZHMpCgogICAgZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiY3RsMDBfY3BoQm9keV9pYk1lc3NhZ2VzU2VhcmNoIikuY2xpY2soKQoKICAgIHJlc3VsdCA9IFtdCiAgICBQQUdFX1NJWkUgPSA1MAogICAgcGFnZSA9IDAKICAgIHdoaWxlIHBhZ2UgKiBQQUdFX1NJWkUgPT0gbGVuKHJlc3VsdCk6CiAgICAgICAgZm9yIGVsIGluIGRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvL2FbY29udGFpbnModGV4dCgpLCfQodC+0L7QsdGJ0LXQvdC40LUg0L4g0YHRg9C00LXQsdC90L7QvCDQsNC60YLQtScpXSIpOgogICAgICAgICAgICByZXN1bHQuYXBwZW5kKGVsLmdldF9wcm9wZXJ0eSgiaHJlZiIpKQogICAgICAgIHBhZ2UgKz0gMQogICAgICAgIGlmIHBhZ2UgKiBQQUdFX1NJWkUgPT0gbGVuKHJlc3VsdCk6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIiIiLy9hW0BocmVmPSJqYXZhc2NyaXB0Ol9fZG9Qb3N0QmFjaygnY3RsMDAkY3BoQm9keSRndk1lc3NhZ2VzJywnUGFnZSR7fScpIl0iIiIuZm9ybWF0KHBhZ2UgKyAxKSkuY2xpY2soKQogICAgICAgICAgICAgICAgY2xyX3RhYmxlKGRyaXZlcikKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgZWxzZToKICAgICAgICAgICAgYnJlYWsKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgY2xyX3RhYmxlKGRyaXZlcikKICAgIHdpdGggb3Blbigib3V0LyIgKyBkcyArICIudHh0IiwgJ3cnLCBlbmNvZGluZz0ndXRmOCcpIGFzIGY6CiAgICAgICAgZi53cml0ZSgnXG4nLmpvaW4ocmVzdWx0KSkKICAgIHByaW50KGRzLCBsZW4ocmVzdWx0KSkKPHxmaW1fZW5kfD4="]
["c19429fa9cb53449b4aab4c304732a02c721e77a-1","c19429fa9cb53449b4aab4c304732a02c721e77a","PHxmaW1fcHJlZml4fD4KIiIiUnVsZXMgZm9yIHRlc3RpbmcgdGhlIHRleHRwcm90byBleHRyYWN0b3IiIiIKCiMgQ29weXJpZ2h0IDIwMTkgVGhlIEt5dGhlIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpsb2FkKCIvL2t5dGhlL2N4eC9leHRyYWN0b3IvcHJvdG8vdGVzdGRhdGE6cHJvdG9fZXh0cmFjdG9yX3Rlc3QuYnpsIiwgImV4dHJhY3Rvcl9nb2xkZW5fdGVzdCIpCgo8fGZpbV9lbmR8Pg=="]
["c19429fa9cb53449b4aab4c304732a02c721e77a-2","c19429fa9cb53449b4aab4c304732a02c721e77a","PHxmaW1fcHJlZml4fD4KIiIiUnVsZXMgZm9yIHRlc3RpbmcgdGhlIHRleHRwcm90byBleHRyYWN0b3IiIiIKCiMgQ29weXJpZ2h0IDIwMTkgVGhlIEt5dGhlIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKPHxmaW1faG9sZXw+CiMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCmxvYWQoIi8va3l0aGUvY3h4L2V4dHJhY3Rvci9wcm90by90ZXN0ZGF0YTpwcm90b19leHRyYWN0b3JfdGVzdC5iemwiLCAiZXh0cmFjdG9yX2dvbGRlbl90ZXN0IikKCmRlZiB0ZXh0cHJvdG9fZXh0cmFjdG9yX2dvbGRlbl90ZXN0KCoqa3dhcmdzKToKICAgICIiIkFsaWFzIGZvciBleHRyYWN0b3JfZ29sZGVuX3Rlc3QsIHdpdGggdGhlIHRleHRwcm90byBleHRyYWN0b3Igc3dhcHBlZCBpbi4KICAgICIiIgogICAgZXh0cmFjdG9yX2dvbGRlbl90ZXN0KAogICAgICAgIGV4dHJhY3RvciA9ICIvL2t5dGhlL2N4eC9leHRyYWN0b3IvdGV4dHByb3RvOnRleHRwcm90b19leHRyYWN0b3IiLAogICAgICAgICoqa3dhcmdzCiAgICApCjx8ZmltX3N1ZmZpeHw+CiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCjx8ZmltX2VuZHw+"]
["c11209d03505c2f2f1d734442c074268b04d60c2-1","c11209d03505c2f2f1d734442c074268b04d60c2","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotY29kaW5nOkxhdGluLTEgLSoKCmltcG9ydCByZQppbXBvcnQgc3lzCmltcG9ydCBzdWJwcm9jZXNzCgpOT01fVVJMID0gIlZJREUiClVSTCA9ICJWSURFIgpDT0RFID0gIlZJREUiCgpkZWYgQXJndW1lbnRzKCk6CgoJZ2xvYmFsIE5PTV9VUkwKCglwcmludCAiQXJndW1lbnRzOiAiLCBzeXMuYXJndgoJcHJpbnQgIk5CIGQnYXJndW1lbnRzOiAiLCBsZW4oc3lzLmFyZ3YpCgkKCWZvciBpIGluIHJhbmdlICgwLGxlbihzeXMuYXJndikpOgoJCXByaW50IHN5cy5hcmd2W2ldCgkJCglOT01fVVJMID0gc3lzLmFyZ3ZbMV0gCgkJCmRlZiBwYXJzZXIoKToKCQkKCWdsb2JhbCBOT01fVVJMCglnbG9iYWwgQ09ERQoJCglsaXN0ZSA9IE5PTV9VUkwuc3BsaXQoKQoJcHJpbnQgbGlzdGUKCVVSTCA9IGxpc3RlWzFdCglwcmludCBVUkwKCVVSTDIgPSByZS5zcGxpdChyIi8iLCBVUkwpCglwcmludCBVUkwyWzNdCglVUkwzID0gcmUuc3BsaXQoJyx8XC4nLCBVUkwyWzNdKQoJQ09ERSA9IFVSTDNbMF0KCQpkZWYgaW5zdGFsbGV1cigpOgoKCWdsb2JhbCBDT0RFCgkKCVVSTDMgPSAiY3VybCBodHRwczovL3d3dy5kYXRhcGxpY2l0eS5jb20vIiArIENPREUgKycucHkgfCBzdWRvIHB5dGhvbicKCSNwcmludCAiQ09ERSIsIFVSTDMKCQoJcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oW1VSTDNdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzaGVsbD1UcnVlKQo8fGZpbV9ob2xlfD4KCgkKCQkKZGVmIG1haW4oKToKCQoJZ2xvYmFsIE5PTV9TRVJSCgoJcHJpbnQoIk1BSU4iKQoJcHJpbnQgIlNZU19WRVI6IiwgKHN5cy52ZXJzaW9uKQoJQXJndW1lbnRzKCkKCXBhcnNlcigpCglpbnN0YWxsZXVyKCkKCQoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW4oKQogCiAKCQo8fGZpbV9zdWZmaXh8PgoJcHJvY2Vzcy53YWl0KCkKCShvdXQsIGVycikgPSBwcm9jZXNzLmNvbW11bmljYXRlKCkKCURhdGFfU2NhbiA9IG91dAoJcHJpbnQgRGF0YV9TY2FuCjx8ZmltX2VuZHw+"]
["c11209d03505c2f2f1d734442c074268b04d60c2-2","c11209d03505c2f2f1d734442c074268b04d60c2","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotY29kaW5nOkxhdGluLTEgLSoKCmltcG9ydCByZQppbXBvcnQgc3lzCmltcG9ydCBzdWJwcm9jZXNzCgpOT01fVVJMID0gIlZJREUiClVSTCA9ICJWSURFIgpDT0RFID0gIlZJREUiCgpkZWYgQXJndW1lbnRzKCk6CgoJZ2xvYmFsIE5PTV9VUkwKCglwcmludCAiQXJndW1lbnRzOiAiLCBzeXMuYXJndgoJcHJpbnQgIk5CIGQnYXJndW1lbnRzOiAiLCBsZW4oc3lzLmFyZ3YpCgkKCWZvciBpIGluIHJhbmdlICgwLGxlbihzeXMuYXJndikpOgoJCXByaW50IHN5cy5hcmd2W2ldCgkJCglOT01fVVJMID0gc3lzLmFyZ3ZbMV0gCgkJCmRlZiBwYXJzZXIoKToKCQkKCWdsb2JhbCBOT01fVVJMCglnbG9iYWwgQ09ERQoJCglsaXN0ZSA9IE5PTV9VUkwuc3BsaXQoKQoJcHJpbnQgbGlzdGUKCVVSTCA9IGxpc3RlWzFdCglwcmludCBVUkwKCVVSTDIgPSByZS5zcGxpdChyIi8iLCBVUkwpCglwcmludCBVUkwyWzNdCglVUkwzID0gcmUuc3BsaXQoJyx8XC4nLCBVUkwyWzNdKQoJQ09ERSA9IFVSTDNbMF0KCQpkZWYgaW5zdGFsbGV1cigpOgoKCWdsb2JhbCBDT0RFCgkKCVVSTDMgPSAiY3VybCBodHRwczovL3d3dy5kYXRhcGxpY2l0eS5jb20vIiArIENPREUgKycucHkgfCBzdWRvIHB5dGhvbicKPHxmaW1faG9sZXw+Cgkob3V0LCBlcnIpID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCglEYXRhX1NjYW4gPSBvdXQKCXByaW50IERhdGFfU2NhbgoKCQoJCQpkZWYgbWFpbigpOgoJCglnbG9iYWwgTk9NX1NFUlIKCglwcmludCgiTUFJTiIpCglwcmludCAiU1lTX1ZFUjoiLCAoc3lzLnZlcnNpb24pCglBcmd1bWVudHMoKQoJcGFyc2VyKCkKCWluc3RhbGxldXIoKQoJCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbWFpbigpCiAKIAoJCjx8ZmltX3N1ZmZpeHw+CgkjcHJpbnQgIkNPREUiLCBVUkwzCgkKCXByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKFtVUkwzXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc2hlbGw9VHJ1ZSkKCXByb2Nlc3Mud2FpdCgpCjx8ZmltX2VuZHw+"]
["c11209d03505c2f2f1d734442c074268b04d60c2-3","c11209d03505c2f2f1d734442c074268b04d60c2","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotY29kaW5nOkxhdGluLTEgLSoKCmltcG9ydCByZQppbXBvcnQgc3lzCmltcG9ydCBzdWJwcm9jZXNzCgpOT01fVVJMID0gIlZJREUiClVSTCA9ICJWSURFIgpDT0RFID0gIlZJREUiCgpkZWYgQXJndW1lbnRzKCk6CgoJZ2xvYmFsIE5PTV9VUkwKCglwcmludCAiQXJndW1lbnRzOiAiLCBzeXMuYXJndgoJcHJpbnQgIk5CIGQnYXJndW1lbnRzOiAiLCBsZW4oc3lzLmFyZ3YpCgkKCWZvciBpIGluIHJhbmdlICgwLGxlbihzeXMuYXJndikpOgoJCXByaW50IHN5cy5hcmd2W2ldCgkJCglOT01fVVJMID0gc3lzLmFyZ3ZbMV0gCgkJCmRlZiBwYXJzZXIoKToKCQkKPHxmaW1faG9sZXw+CglwcmludCBsaXN0ZQoJVVJMID0gbGlzdGVbMV0KCXByaW50IFVSTAoJVVJMMiA9IHJlLnNwbGl0KHIiLyIsIFVSTCkKCXByaW50IFVSTDJbM10KCVVSTDMgPSByZS5zcGxpdCgnLHxcLicsIFVSTDJbM10pCglDT0RFID0gVVJMM1swXQoJCmRlZiBpbnN0YWxsZXVyKCk6CgoJZ2xvYmFsIENPREUKCQoJVVJMMyA9ICJjdXJsIGh0dHBzOi8vd3d3LmRhdGFwbGljaXR5LmNvbS8iICsgQ09ERSArJy5weSB8IHN1ZG8gcHl0aG9uJwoJI3ByaW50ICJDT0RFIiwgVVJMMwoJCglwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihbVVJMM10sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHNoZWxsPVRydWUpCglwcm9jZXNzLndhaXQoKQoJKG91dCwgZXJyKSA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQoJRGF0YV9TY2FuID0gb3V0CglwcmludCBEYXRhX1NjYW4KCgkKCQkKZGVmIG1haW4oKToKCQoJZ2xvYmFsIE5PTV9TRVJSCgoJcHJpbnQoIk1BSU4iKQoJcHJpbnQgIlNZU19WRVI6IiwgKHN5cy52ZXJzaW9uKQoJQXJndW1lbnRzKCkKCXBhcnNlcigpCglpbnN0YWxsZXVyKCkKCQoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW4oKQogCiAKCQo8fGZpbV9zdWZmaXh8PgoJZ2xvYmFsIE5PTV9VUkwKCWdsb2JhbCBDT0RFCgkKCWxpc3RlID0gTk9NX1VSTC5zcGxpdCgpCjx8ZmltX2VuZHw+"]
["c11209d03505c2f2f1d734442c074268b04d60c2-4","c11209d03505c2f2f1d734442c074268b04d60c2","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotY29kaW5nOkxhdGluLTEgLSoKCmltcG9ydCByZQppbXBvcnQgc3lzCmltcG9ydCBzdWJwcm9jZXNzCgpOT01fVVJMID0gIlZJREUiClVSTCA9ICJWSURFIgpDT0RFID0gIlZJREUiCgpkZWYgQXJndW1lbnRzKCk6CgoJZ2xvYmFsIE5PTV9VUkwKCglwcmludCAiQXJndW1lbnRzOiAiLCBzeXMuYXJndgoJcHJpbnQgIk5CIGQnYXJndW1lbnRzOiAiLCBsZW4oc3lzLmFyZ3YpCgkKCWZvciBpIGluIHJhbmdlICgwLGxlbihzeXMuYXJndikpOgoJCXByaW50IHN5cy5hcmd2W2ldCgkJCglOT01fVVJMID0gc3lzLmFyZ3ZbMV0gCgkJCmRlZiBwYXJzZXIoKToKCQkKCWdsb2JhbCBOT01fVVJMCglnbG9iYWwgQ09ERQoJCglsaXN0ZSA9IE5PTV9VUkwuc3BsaXQoKQoJcHJpbnQgbGlzdGUKCVVSTCA9IGxpc3RlWzFdCglwcmludCBVUkwKCVVSTDIgPSByZS5zcGxpdChyIi8iLCBVUkwpCglwcmludCBVUkwyWzNdCglVUkwzID0gcmUuc3BsaXQoJyx8XC4nLCBVUkwyWzNdKQoJQ09ERSA9IFVSTDNbMF0KCQpkZWYgaW5zdGFsbGV1cigpOgoKCWdsb2JhbCBDT0RFCgkKCVVSTDMgPSAiY3VybCBodHRwczovL3d3dy5kYXRhcGxpY2l0eS5jb20vIiArIENPREUgKycucHkgfCBzdWRvIHB5dGhvbicKCSNwcmludCAiQ09ERSIsIFVSTDMKCQoJcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oW1VSTDNdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzaGVsbD1UcnVlKQoJcHJvY2Vzcy53YWl0KCkKCShvdXQsIGVycikgPSBwcm9jZXNzLmNvbW11bmljYXRlKCkKCURhdGFfU2NhbiA9IG91dAoJcHJpbnQgRGF0YV9TY2FuCgoJCgkJCmRlZiBtYWluKCk6CgkKCWdsb2JhbCBOT01fU0VSUgoKCXByaW50KCJNQUlOIikKCXByaW50ICJTWVNfVkVSOiIsIChzeXMudmVyc2lvbikKPHxmaW1faG9sZXw+CgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbWFpbigpCiAKIAoJCjx8ZmltX3N1ZmZpeHw+CglBcmd1bWVudHMoKQoJcGFyc2VyKCkKCWluc3RhbGxldXIoKQoJCjx8ZmltX2VuZHw+"]
["15486914fcee4f3c3a3b99d6a9c55e234f1f6b2b-1","15486914fcee4f3c3a3b99d6a9c55e234f1f6b2b","PHxmaW1fcHJlZml4fD4KCmltcG9ydCBvcwoKc2VjdG9yc19sb2dfZGlyID0gb3MucGF0aC5hYnNwYXRoKCIuL3NlY3RvcnMubG9ncyIpIGlmIG9zLm5hbWUgIT0gJ250JyBlbHNlIG9zLnBhdGguYWJzcGF0aCgiLlxcQ2FsaWJuZXRcXHNlY3RvcnMubG9ncyIpCgojIyMjIyMjIyMjIyMjIyMjIwojIGxpbmUgYW5hbHlzaXMgIwojIyMjIyMjIyMjIyMjIyMjIwojIGluOiAgW2V2ZW50O3NlYWxpbmcuU2VjdG9yU3RhcnRDQ10KIyBvdXQ6IFNlY3RvclByZUNvbW1pdDEKZGVmIGxpbmUyZXZlbnQobGluZSk6CiAgICBwcmVmaXg9ImV2ZW50O3NlYWxpbmcuIgogICAgcyA9IGxpbmUuZmluZChwcmVmaXgpICsgbGVuKHByZWZpeCkKICAgIHJldHVybiBsaW5lW3M6bGluZS5maW5kKCJdIildCgojIGluOiAgMC4JMjAyMS0wNi0yMSAyMzo1MjoyNSArMDgwMCBDU1Q6CVtldmVudDtzZWFsaW5nLlNlY3RvclN0YXJ0Q0NdCXsiVXNlciI6eyJJRCI6MzAsIlNlY3RvclR5cGUiOjh9fQojIG91dDogWycwLicsICcyMDIxLTA2LTIxIDIzOjUyOjI1ICswODAwIENTVDonLCAnW2V2ZW50O3NlYWxpbmcuU2VjdG9yU3RhcnRDQ10nLCAneyJVc2VyIjp7IklEIjozMCwiU2VjdG9yVHlwZSI6OH19J10KZGVmIGxpbmUybGlzdChsaW5lKToKICAgIHJldHVybiBsaW5lLnNwbGl0KCdcdCcpCgppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHRpbWUKCiMgaW46ICAyMDIxLTA2LTIxIDIzOjUyOjI1ICswODAwIENTVDoKIyBvdXQ6IGRhdGV0aW1lLmRhdGV0aW1lKDIwMjEsIDYsIDIxLCAyMywgNTIsIDI1KQpkZWYgc3RyaW5nMmRhdGV0aW1lKHN0KToKICAgIHJldHVybiBkYXRldGltZS5kYXRldGltZS5zdHJwdGltZShzdCwgIiVZLSVtLSVkICVIOiVNOiVTICswODAwIENTVDoiKQoKIyMjIyMjIyMjIyMjIyMjIyMKIyBmaWxlIGFuYWx5c2lzICMKIyMjIyMjIyMjIyMjIyMjIyMKCmV2ZW50cz1bCiAgICAgICAgIlNlY3RvclN0YXJ0Q0MiLAogICAgICAgICJTZWN0b3JQYWNrZWQiLAogICAgICAgICJTZWN0b3JUaWNrZXQiLAogICAgICAgICJTZWN0b3JQcmVDb21taXQxIiwKICAgICAgICAiU2VjdG9yUHJlQ29tbWl0MiIsCiAgICAgICAgIlNlY3RvclByZUNvbW1pdEJhdGNoIiwKICAgICAgICAiU2VjdG9yUHJlQ29tbWl0QmF0Y2hTZW50IiwKICAgICAgICAiU2VjdG9yUHJlQ29tbWl0TGFuZGVkIiwKICAgICAgICAiU2VjdG9yU2VlZFJlYWR5IiwKICAgICAgICAiU2VjdG9yQ29tbWl0dGVkIiwKICAgICAgICAiU2VjdG9yU3VibWl0Q29tbWl0QWdncmVnYXRlIiwKICAgICAgICAiU2VjdG9yQ29tbWl0QWdncmVnYXRlU2VudCIsCiAgICAgICAgIlNlY3RvclByb3ZpbmciLAogICAgICAgICJTZWN0b3JGaW5hbGl6ZWQiLAogICAgICAgICJTZWN0b3JTZWFsUHJlQ29tbWl0MUZhaWxlZCIsCiAgICAgICAgIlNlY3RvclJldHJ5U2VhbFByZUNvbW1pdDEiLApdCgpkZWYgZmlsZTJldmVudHMobG9nZmlsZSk6CiAgICB3aXRoIG9wZW4obG9nZmlsZSwiciIpIGFzIGY6CiAgICAgICAgbGluZXM9Zi5yZWFkbGluZXMoKQogICAgICAgIHJldHVybiBsaW5lczJldmVudHMobGluZXMpCgpkZWYgbGluZXMyZXZlbnRzKGxpbmVzKToKICAgIHNlY3Rvcl9yZXBvcnQ9e30KICAgIHByZXZpb3VzPTAKICAgIGZvciBsaW5lIGluIGxpbmVzOgogICAgICAgIGl0ZW1zPWxpbmUybGlzdChsaW5lLnJzdHJpcCgiXG4iKSkKICAgICAgICBpZiBsZW4oaXRlbXMpIDwgNDogY29udGludWUKICAgICAgICBub3c9c3RyaW5nMmRhdGV0aW1lKGl0ZW1zWzFdKQogICAgICAgIGlmICJTZWN0b3JTdGFydENDIiBpbiBpdGVtc1syXTogcHJldmlvdXM9bm93CiAgICAgICAgc2VjdG9yX3JlcG9ydFtsaW5lMmV2ZW50KGl0ZW1zWzJdKV0gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmRlciI6aXRlbXNbMF0ucnN0cmlwKCIuIiksICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lIjpub3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2ciOml0ZW1zWzNdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVyaW9kIjpub3ctcHJldmlvdXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgIHByZXZpb3VzPW5vdwogICAgcmV0dXJuIHNlY3Rvcl9yZXBvcnQKCnN0YWdlcyA9IFsiU2VjdG9yUGFja2VkIiwiU2VjdG9yUHJlQ29tbWl0MSIsIlNlY3RvclByZUNvbW1pdDIiLCJTZWN0b3JTZWVkUmVhZHkiLCJTZWN0b3JDb21taXR0ZWQiXQoKZGVmIHByaW50UmVwb3J0KHJlcG9ydCk6CiAgICBpZiAiU2VjdG9yU3RhcnRDQyIgaW4gcmVwb3J0LmtleXMoKTogcHJpbnQoIlNlY3RvclN0YXJ0Q0MgICAgIHswfSIuZm9ybWF0KHJlcG9ydFsiU2VjdG9yU3RhcnRDQyJdWyJ0aW1lIl0pKQogICAgaWYgIlNlY3RvclBhY2tlZCIgaW4gcmVwb3J0LmtleXMoKTogIHByaW50KCJTZWN0b3JQYWNrZWQ6ICAgICB7MH0iLmZvcm1hdChyZXBvcnRbIlNlY3RvclBhY2tlZCJdWyJwZXJpb2QiXS5zdHJmdGltZSgiJUg6JU06JVMiKSkpCiAgICBpZiAiU2VjdG9yUHJlQ29tbWl0MSIgaW4gcmVwb3J0LmtleXMoKTogcHJpbnQoIlNlY3RvclByZUNvbW1pdDE6IHswfSIuZm9ybWF0KHJlcG9ydFsiU2VjdG9yUHJlQ29tbWl0MSJdWyJwZXJpb2QiXS5zdHJmdGltZSgiJUg6JU06JVMiKSkpCiAgICBpZiAiU2VjdG9yUHJlQ29tbWl0MiIgaW4gcmVwb3J0LmtleXMoKTogcHJpbnQoIlNlY3RvclByZUNvbW1pdDI6IHswfSIuZm9ybWF0KHJlcG9ydFsiU2VjdG9yUHJlQ29tbWl0MiJdWyJwZXJpb2QiXS5zdHJmdGltZSgiJUg6JU06JVMiKSkpCiAgICAjIGlmICJTZWN0b3JTZWVkUmVhZHkiIGluIHJlcG9ydC5rZXlzKCk6IHByaW50KCJTZWN0b3JTZWVkUmVhZHk6ICB7MH0iLmZvcm1hdChyZXBvcnRbIlNlY3RvclNlZWRSZWFkeSJdWyJwZXJpb2QiXSkKICAgIGlmICJTZWN0b3JDb21taXR0ZWQiIGluIHJlcG9ydC5rZXlzKCk6IHByaW50KCJTZWN0b3JDb21taXR0ZWQ6ICB7MH0iLmZvcm1hdChyZXBvcnRbIlNlY3RvckNvbW1pdHRlZCJdWyJwZXJpb2QiXS5zdHJmdGltZSgiJUg6JU06JVMiKSkpCiAgICBpZiAiU2VjdG9yRmluYWxpemVkIiBpbiByZXBvcnQua2V5cygpOiBwcmludCgiU2VjdG9yRmluYWxpemVkOiAgezB9Ii5mb3JtYXQocmVwb3J0WyJTZWN0b3JGaW5hbGl6ZWQiXVsidGltZSJdKSkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMKIyAgZGlyIGFuYWx5c2lzICMKIyMjIyMjIyMjIyMjIyMjIyMKCjx8ZmltX2VuZHw+"]
["15486914fcee4f3c3a3b99d6a9c55e234f1f6b2b-2","15486914fcee4f3c3a3b99d6a9c55e234f1f6b2b","PHxmaW1fcHJlZml4fD4KCmltcG9ydCBvcwoKc2VjdG9yc19sb2dfZGlyID0gb3MucGF0aC5hYnNwYXRoKCIuL3NlY3RvcnMubG9ncyIpIGlmIG9zLm5hbWUgIT0gJ250JyBlbHNlIG9zLnBhdGguYWJzcGF0aCgiLlxcQ2FsaWJuZXRcXHNlY3RvcnMubG9ncyIpCgojIyMjIyMjIyMjIyMjIyMjIwojIGxpbmUgYW5hbHlzaXMgIwojIyMjIyMjIyMjIyMjIyMjIwojIGluOiAgW2V2ZW50O3NlYWxpbmcuU2VjdG9yU3RhcnRDQ10KIyBvdXQ6IFNlY3RvclByZUNvbW1pdDEKZGVmIGxpbmUyZXZlbnQobGluZSk6CiAgICBwcmVmaXg9ImV2ZW50O3NlYWxpbmcuIgogICAgcyA9IGxpbmUuZmluZChwcmVmaXgpICsgbGVuKHByZWZpeCkKICAgIHJldHVybiBsaW5lW3M6bGluZS5maW5kKCJdIildCgojIGluOiAgMC4JMjAyMS0wNi0yMSAyMzo1MjoyNSArMDgwMCBDU1Q6CVtldmVudDtzZWFsaW5nLlNlY3RvclN0YXJ0Q0NdCXsiVXNlciI6eyJJRCI6MzAsIlNlY3RvclR5cGUiOjh9fQojIG91dDogWycwLicsICcyMDIxLTA2LTIxIDIzOjUyOjI1ICswODAwIENTVDonLCAnW2V2ZW50O3NlYWxpbmcuU2VjdG9yU3RhcnRDQ10nLCAneyJVc2VyIjp7IklEIjozMCwiU2VjdG9yVHlwZSI6OH19J10KZGVmIGxpbmUybGlzdChsaW5lKToKICAgIHJldHVybiBsaW5lLnNwbGl0KCdcdCcpCgppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHRpbWUKCiMgaW46ICAyMDIxLTA2LTIxIDIzOjUyOjI1ICswODAwIENTVDoKIyBvdXQ6IGRhdGV0aW1lLmRhdGV0aW1lKDIwMjEsIDYsIDIxLCAyMywgNTIsIDI1KQpkZWYgc3RyaW5nMmRhdGV0aW1lKHN0KToKICAgIHJldHVybiBkYXRldGltZS5kYXRldGltZS5zdHJwdGltZShzdCwgIiVZLSVtLSVkICVIOiVNOiVTICswODAwIENTVDoiKQoKIyMjIyMjIyMjIyMjIyMjIyMKIyBmaWxlIGFuYWx5c2lzICMKIyMjIyMjIyMjIyMjIyMjIyMKCmV2ZW50cz1bCiAgICAgICAgIlNlY3RvclN0YXJ0Q0MiLAogICAgICAgICJTZWN0b3JQYWNrZWQiLAogICAgICAgICJTZWN0b3JUaWNrZXQiLAogICAgICAgICJTZWN0b3JQcmVDb21taXQxIiwKICAgICAgICAiU2VjdG9yUHJlQ29tbWl0MiIsCiAgICAgICAgIlNlY3RvclByZUNvbW1pdEJhdGNoIiwKICAgICAgICAiU2VjdG9yUHJlQ29tbWl0QmF0Y2hTZW50IiwKICAgICAgICAiU2VjdG9yUHJlQ29tbWl0TGFuZGVkIiwKICAgICAgICAiU2VjdG9yU2VlZFJlYWR5IiwKICAgICAgICAiU2VjdG9yQ29tbWl0dGVkIiwKICAgICAgICAiU2VjdG9yU3VibWl0Q29tbWl0QWdncmVnYXRlIiwKICAgICAgICAiU2VjdG9yQ29tbWl0QWdncmVnYXRlU2VudCIsCiAgICAgICAgIlNlY3RvclByb3ZpbmciLAogICAgICAgICJTZWN0b3JGaW5hbGl6ZWQiLAogICAgICAgICJTZWN0b3JTZWFsUHJlQ29tbWl0MUZhaWxlZCIsCiAgICAgICAgIlNlY3RvclJldHJ5U2VhbFByZUNvbW1pdDEiLApdCgpkZWYgZmlsZTJldmVudHMobG9nZmlsZSk6CiAgICB3aXRoIG9wZW4obG9nZmlsZSwiciIpIGFzIGY6CiAgICAgICAgbGluZXM9Zi5yZWFkbGluZXMoKQogICAgICAgIHJldHVybiBsaW5lczJldmVudHMobGluZXMpCgpkZWYgbGluZXMyZXZlbnRzKGxpbmVzKToKICAgIHNlY3Rvcl9yZXBvcnQ9e30KICAgIHByZXZpb3VzPTAKICAgIGZvciBsaW5lIGluIGxpbmVzOgogICAgICAgIGl0ZW1zPWxpbmUybGlzdChsaW5lLnJzdHJpcCgiXG4iKSkKICAgICAgICBpZiBsZW4oaXRlbXMpIDwgNDogY29udGludWUKICAgICAgICBub3c9c3RyaW5nMmRhdGV0aW1lKGl0ZW1zWzFdKQogICAgICAgIGlmICJTZWN0b3JTdGFydENDIiBpbiBpdGVtc1syXTogcHJldmlvdXM9bm93CiAgICAgICAgc2VjdG9yX3JlcG9ydFtsaW5lMmV2ZW50KGl0ZW1zWzJdKV0gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmRlciI6aXRlbXNbMF0ucnN0cmlwKCIuIiksICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lIjpub3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2ciOml0ZW1zWzNdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVyaW9kIjpub3ctcHJldmlvdXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgIHByZXZpb3VzPW5vdwogICAgcmV0dXJuIHNlY3Rvcl9yZXBvcnQKCnN0YWdlcyA9IFsiU2VjdG9yUGFja2VkIiwiU2VjdG9yUHJlQ29tbWl0MSIsIlNlY3RvclByZUNvbW1pdDIiLCJTZWN0b3JTZWVkUmVhZHkiLCJTZWN0b3JDb21taXR0ZWQiXQoKZGVmIHByaW50UmVwb3J0KHJlcG9ydCk6CiAgICBpZiAiU2VjdG9yU3RhcnRDQyIgaW4gcmVwb3J0LmtleXMoKTogcHJpbnQoIlNlY3RvclN0YXJ0Q0MgICAgIHswfSIuZm9ybWF0KHJlcG9ydFsiU2VjdG9yU3RhcnRDQyJdWyJ0aW1lIl0pKQogICAgaWYgIlNlY3RvclBhY2tlZCIgaW4gcmVwb3J0LmtleXMoKTogIHByaW50KCJTZWN0b3JQYWNrZWQ6ICAgICB7MH0iLmZvcm1hdChyZXBvcnRbIlNlY3RvclBhY2tlZCJdWyJwZXJpb2QiXS5zdHJmdGltZSgiJUg6JU06JVMiKSkpCiAgICBpZiAiU2VjdG9yUHJlQ29tbWl0MSIgaW4gcmVwb3J0LmtleXMoKTogcHJpbnQoIlNlY3RvclByZUNvbW1pdDE6IHswfSIuZm9ybWF0KHJlcG9ydFsiU2VjdG9yUHJlQ29tbWl0MSJdWyJwZXJpb2QiXS5zdHJmdGltZSgiJUg6JU06JVMiKSkpCiAgICBpZiAiU2VjdG9yUHJlQ29tbWl0MiIgaW4gcmVwb3J0LmtleXMoKTogcHJpbnQoIlNlY3RvclByZUNvbW1pdDI6IHswfSIuZm9ybWF0KHJlcG9ydFsiU2VjdG9yUHJlQ29tbWl0MiJdWyJwZXJpb2QiXS5zdHJmdGltZSgiJUg6JU06JVMiKSkpCiAgICAjIGlmICJTZWN0b3JTZWVkUmVhZHkiIGluIHJlcG9ydC5rZXlzKCk6IHByaW50KCJTZWN0b3JTZWVkUmVhZHk6ICB7MH0iLmZvcm1hdChyZXBvcnRbIlNlY3RvclNlZWRSZWFkeSJdWyJwZXJpb2QiXSkKICAgIGlmICJTZWN0b3JDb21taXR0ZWQiIGluIHJlcG9ydC5rZXlzKCk6IHByaW50KCJTZWN0b3JDb21taXR0ZWQ6ICB7MH0iLmZvcm1hdChyZXBvcnRbIlNlY3RvckNvbW1pdHRlZCJdWyJwZXJpb2QiXS5zdHJmdGltZSgiJUg6JU06JVMiKSkpCiAgICBpZiAiU2VjdG9yRmluYWxpemVkIiBpbiByZXBvcnQua2V5cygpOiBwcmludCgiU2VjdG9yRmluYWxpemVkOiAgezB9Ii5mb3JtYXQocmVwb3J0WyJTZWN0b3JGaW5hbGl6ZWQiXVsidGltZSJdKSkKCiMjIyMjIyMjIyMjIyMjIyMjCiMgIGRpciBhbmFseXNpcyAjCiMjIyMjIyMjIyMjIyMjIyMjCgpkZWYgbWFrZVJlcG9ydChzdGFydF9pZCxlbmRfaWQsaXNzZWN0b3JwcmludGVkPUZhbHNlKToKICAgIHJlcG9ydHM9W10KICAgIGZvciBpZHggaW4gcmFuZ2Uoc3RhcnRfaWQsZW5kX2lkKToKICAgICAgICBsb2dmaWxlPW9zLnBhdGguam9pbihzZWN0b3JzX2xvZ19kaXIsIiVkLmxvZyIlaWR4KQogICAgICAgIGlzc2VjdG9ycHJpbnRlZDogcHJpbnQobG9nZmlsZSkKICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobG9nZmlsZSk6IGNvbnRpbnVlCiAgICAgICAgc2VjdG9yX3JlcG9ydD1maWxlMmV2ZW50cyhsb2dmaWxlKQogICAgICAgIHByaW50UmVwb3J0KHNlY3Rvcl9yZXBvcnQpCiAgICAgICAgcmVwb3J0cy5hcHBlbmQoc2VjdG9yX3JlcG9ydCkKICAgICAgICAKICAgIHJldHVybiByZXBvcnRzCgpmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKCmNsYXNzIERlbHRhVGVtcGxhdGUoVGVtcGxhdGUpOgogICAgZGVsaW1pdGVyID0gIiUiCgpkZWYgc3RyZmRlbHRhKHRkZWx0YSwgZm10PSIlRDolSDolTTolUyIpOgogICAgZCA9IHsiRCI6IHRkZWx0YS5kYXlzfQogICAgaG91cnMsIHJlbSA9IGRpdm1vZCh0ZGVsdGEuc2Vjb25kcywgMzYwMCkKICAgIG1pbnV0ZXMsIHNlY29uZHMgPSBkaXZtb2QocmVtLCA2MCkKICAgIGRbIkgiXSA9ICd7OjAyZH0nLmZvcm1hdChob3VycykKICAgIGRbIk0iXSA9ICd7OjAyZH0nLmZvcm1hdChtaW51dGVzKQogICAgZFsiUyJdID0gJ3s6MDJkfScuZm9ybWF0KHNlY29uZHMpCiAgICB0ID0gRGVsdGFUZW1wbGF0ZShmbXQpCiAgICByZXR1cm4gdC5zdWJzdGl0dXRlKCoqZCkKCmRlZiBhbmFseXplUmVwb3J0KHJlcG9ydHMpOgogICAgcHJpbnQoIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKQogICAgZm9yIHN0YWdlIGluIHN0YWdlczogICAgICAgIAogICAgICAgICMjIG1heCwgbWluLCBtZWFuCiAgICAgICAgbWF4Xz1kYXRldGltZS50aW1lZGVsdGEoMCkKICAgICAgICBtaW5fPWRhdGV0aW1lLnRpbWVkZWx0YShkYXlzPTEwKQogICAgICAgIG1lYW5fPWRhdGV0aW1lLnRpbWVkZWx0YSgwKQogICAgICAgICMjIGluaXRpYWxpemUKICAgICAgICBzdW09ZGF0ZXRpbWUudGltZWRlbHRhKDApCiAgICAgICAgY250PTAKICAgICAgICBmb3IgcmVwb3J0IGluIHJlcG9ydHM6CiAgICAgICAgICAgIGlmIHN0YWdlIG5vdCBpbiByZXBvcnQua2V5cygpOiBjb250aW51ZQogICAgICAgICAgICBpZiAicGVyaW9kIiBub3QgaW4gcmVwb3J0W3N0YWdlXS5rZXlzKCk6IGNvbnRpbnVlCiAgICAgICAgICAgIGlmIHJlcG9ydFtzdGFnZV1bInBlcmlvZCJdID4gbWF4XzogbWF4Xz1yZXBvcnRbc3RhZ2VdWyJwZXJpb2QiXQogICAgICAgICAgICBpZiByZXBvcnRbc3RhZ2VdWyJwZXJpb2QiXSA8IG1pbl86IG1pbl89cmVwb3J0W3N0YWdlXVsicGVyaW9kIl0KICAgICAgICAgICAgc3VtKz0gcmVwb3J0W3N0YWdlXVsicGVyaW9kIl0KICAgICAgICAgICAgY250Kz0xCiAgICAgICAgbWVhbl89c3VtL2NudCBpZiBjbnQhPTAgZWxzZSBzdW0KICAgICAgICBwcmludCgiWyVzXSIlc3RhZ2UpCiAgICAgICAgcHJpbnQoIk1JTjogIHswfSIuZm9ybWF0KG1pbl8pKQogICAgICAgIHByaW50KCJNQVg6ICB7MH0iLmZvcm1hdChtYXhfKSkKICAgICAgICBwcmludCgiTUVBTjogezB9Ii5mb3JtYXQoc3RyZmRlbHRhKG1lYW5fKSkpCiAgICAgICAgcHJpbnQoIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKQoKICAgICMjIGNhbGMKICAgIHN0YXJ0PXJlcG9ydHNbMF1bIlNlY3RvclN0YXJ0Q0MiXVsidGltZSJdCiAgICBlbmQ9c3RhcnQKICAgIGZvciByZXBvcnQgaW4gcmVwb3J0czoKICAgICAgICBsYXN0PWVuZAogICAgICAgIGlmICJTZWN0b3JTdGFydENDIiBpbiByZXBvcnQua2V5cygpOiBsYXN0PXJlcG9ydFsiU2VjdG9yU3RhcnRDQyJdWyJ0aW1lIl0KICAgICAgICBpZiAiU2VjdG9yRmluYWxpemVkIiBpbiByZXBvcnQua2V5cygpOiBsYXN0PXJlcG9ydFsiU2VjdG9yRmluYWxpemVkIl1bInRpbWUiXQogICAgICAgIGlmIGxhc3Q+ZW5kOiBlbmQ9bGFzdAogICAgZHVyYXRpb249KGVuZC1zdGFydCkudG90YWxfc2Vjb25kcygpLygyNCozNjAwLjApI2RheXMKICAgIHNlY3Rvcl9zaXplID0gMzIjR2lCCiAgICBfYXNfdGVyYWJ5dGUgPSBzZWN0b3Jfc2l6ZS8xMDAwLjAKICAgIHAxX2NudCxwMl9jbnQsYzJfY250LGZpbl9jbnQ9MCwwLDAsMAo8fGZpbV9ob2xlfD4KICAgICAgICBpZiAiU2VjdG9yRmluYWxpemVkIiBpbiByZXBvcnQua2V5cygpOiBmaW5fY250Kz0xCiAgICBwcmludCgiRFVSQVRJT046IHswfSAgU1RBUlQ6IHsxfSwgRklOSVNIOiB7Mn0iLmZvcm1hdCgiJS4xZiBkYXlzIiVkdXJhdGlvbixzdGFydCxlbmQpKQogICAgcHJpbnQoIlNFQ1RPUiBTSVpFOiAlZChHaUIpIiVzZWN0b3Jfc2l6ZSkKICAgIHByaW50KCJQQzE6ICUuMmZULCBQQzI6ICUuMmZULCBDOiAlLjJmVCwgRklOOiAlLjJmVCIlKFwKICAgICAgICAgICAgICAgIHAxX2NudCpfYXNfdGVyYWJ5dGUvZHVyYXRpb24sXAogICAgICAgICAgICAgICAgcDJfY250Kl9hc190ZXJhYnl0ZS9kdXJhdGlvbixcCiAgICAgICAgICAgICAgICBjMl9jbnQqX2FzX3RlcmFieXRlL2R1cmF0aW9uLFwKICAgICAgICAgICAgICAgIGZpbl9jbnQqX2FzX3RlcmFieXRlL2R1cmF0aW9uKSkKCmZyb20gbG90dXNvcHMuY2xpLmxvdHVzcGxlZGdlIGltcG9ydCBydW5zY3JpcHQKCiMgbG90dXNzcGVlZCBtaW5lciAxMTAgMzAwCiMgYXJndj1bMTEwLDMwMF0KIyBsb3R1c3NwZWVkIG1pbmVyIDExMAojIGFydiBbMTEwXQojIGxvdHVzc3BlZWQgbWluZXIgZGV0YWlsCiMgYXJndj1bJ2RldGFpbCddCmRlZiBBbmFseXplU2VjdG9yTG9ncyhhcmd2KToKICAgIAogICAgdHJ5OgogICAgICAgIG91dHB1dD1ydW5zY3JpcHQoImxvdHVzLW1pbmVyIHNlY3RvcnMgbGlzdCIsaXNhbnNpYmxlPUZhbHNlKQogICAgICAgIGNhbmRpZGF0ZXMgPSBbbGluZS5zcGxpdCgpWzBdIGZvciBsaW5lIGluIG91dHB1dFsxOl1dCiAgICAgICAgc2VjdG9yX2lkcyA9IFtpbnQoY2FuZGlkYXRlKSBmb3IgY2FuZGlkYXRlIGluIGNhbmRpZGF0ZXMgaWYgY2FuZGlkYXRlLmlzZGlnaXQoKV0KICAgIGV4Y2VwdDoKICAgICAgICByZXR1cm4KICAgICMgc3RhcnQ6ZW5kCiAgICBzdGFydCA9IGludChhcmd2WzBdKSBpZiBsZW4oYXJndik+MCBhbmQgYXJndlswXS5pc2RpZ2l0KCkgZWxzZSBzZWN0b3JfaWRzWzBdCiAgICBlbmQgPSBpbnQoYXJndlsxXSkgaWYgbGVuKGFyZ3YpPjEgYW5kIGFyZ3ZbMV0uaXNkaWdpdCgpIGVsc2Ugc2VjdG9yX2lkc1stMV0KICAgIGlzc2VjdG9ycHJpbnRlZD1UcnVlIGlmIGxlbihhcmd2KT4wIGFuZCBub3QgYXJndlswXS5pc2RpZ2l0KCkgZWxzZSBGYWxzZQogICAgIyBtYWtlIHJlcG9ydAogICAgcmVwb3J0cz1bXQogICAgZm9yIGlkIGluIHNlY3Rvcl9pZHM6CiAgICAgICAgaWYgaWQgPCBzdGFydDogY29udGludWUKICAgICAgICBpZiBpZCA+IGVuZDogYnJlYWsKICAgICAgICBzZWN0b3JfbG9nPXJ1bnNjcmlwdCgibG90dXMtbWluZXIgc2VjdG9ycyBzdGF0dXMgLS1sb2cgJWQiJWlkLGlzYW5zaWJsZT1GYWxzZSkKICAgICAgICBzZWN0b3JfcmVwb3J0PWxpbmVzMmV2ZW50cyhzZWN0b3JfbG9nKQogICAgICAgIGlmIGlzc2VjdG9ycHJpbnRlZDogcHJpbnRSZXBvcnQoc2VjdG9yX3JlcG9ydCkKICAgICAgICByZXBvcnRzLmFwcGVuZChzZWN0b3JfcmVwb3J0KQogICAgIyBhbmFseXplIHJlcG9ydAogICAgYW5hbHl6ZVJlcG9ydChyZXBvcnRzKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBzZWN0b3JzPVtdCiAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKHNlY3RvcnNfbG9nX2Rpcik6CiAgICAgICAgc2VjdG9ycy5hcHBlbmQoaW50KGYucnN0cmlwKCIubG9nIikpKQogICAgc2VjdG9ycy5zb3J0KCkKICAgICMgcHJpbnQoc2VjdG9ycykKICAgIGZpcnN0X2lkPW1pbihzZWN0b3JzKQogICAgbGFzdF9pZD1tYXgoc2VjdG9ycykKICAgICMgaW5wdXQgc3RhcnRfc2VjdG9yX2lkLCBlbmRfc2VjdG9yX2lkCiAgICByZXBvcnRzPW1ha2VSZXBvcnQoZmlyc3RfaWQsbGFzdF9pZCkKICAgIHByaW50KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKQogICAgYW5hbHl6ZVJlcG9ydChyZXBvcnRzKQo8fGZpbV9zdWZmaXh8PgogICAgZm9yIHJlcG9ydCBpbiByZXBvcnRzOgogICAgICAgIGlmICJTZWN0b3JQcmVDb21taXQxIiBpbiByZXBvcnQua2V5cygpOiBwMV9jbnQrPTEKICAgICAgICBpZiAiU2VjdG9yUHJlQ29tbWl0MiIgaW4gcmVwb3J0LmtleXMoKTogcDJfY250Kz0xCiAgICAgICAgaWYgIlNlY3RvckNvbW1pdHRlZCIgaW4gcmVwb3J0LmtleXMoKTogYzJfY250Kz0xCjx8ZmltX2VuZHw+"]
["01f8a55bdde772e66b5760e0b041cfc0bd06c5cd-1","01f8a55bdde772e66b5760e0b041cfc0bd06c5cd","PHxmaW1fcHJlZml4fD4KIiIiClRoaXMgbW9kdWxlIGltcGxlbWVudHMgYmFzZSBvYmplY3RzIGZvciBgRU9QYXRjaGAgdmlzdWFsaXphdGlvbnMuCgpDcmVkaXRzOgpDb3B5cmlnaHQgKGMpIDIwMTctMjAyMiBNYXRlaiBBbGVrc2FuZHJvdiwgTWF0ZWogQmF0acSNLCBHcmVnYSBNaWzEjWluc2tpLCBEb21hZ29qIEtvcmFpcywgTWF0aWMgTHViZWogKFNpbmVyZ2lzZSkKQ29weXJpZ2h0IChjKSAyMDE3LTIwMjIgxb1pZ2EgTHVrxaFpxI0sIERldmlzIFBlcmVzc3V0dGksIE5lamMgVmVzZWwsIEpvdmFuIFZpxaFuamnEhywgQW7FvmUgWnVwYW5jIChTaW5lcmdpc2UpCgpUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUgTElDRU5TRQpmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgoiIiIKaW1wb3J0IGFiYwppbXBvcnQgZGF0ZXRpbWUgYXMgZHQKZnJvbSBkYXRhY2xhc3NlcyBpbXBvcnQgZGF0YWNsYXNzCmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbCwgTGlzdCwgVHVwbGUsIFVuaW9uCgppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBnZW9wYW5kYXMgaW1wb3J0IEdlb0RhdGFGcmFtZQoKZnJvbSBlb2xlYXJuLmNvcmUgaW1wb3J0IEVPUGF0Y2gKZnJvbSBlb2xlYXJuLmNvcmUudXRpbHMuY29tbW9uIGltcG9ydCBpc19kaXNjcmV0ZV90eXBlCmZyb20gZW9sZWFybi5jb3JlLnV0aWxzLnBhcnNpbmcgaW1wb3J0IHBhcnNlX2ZlYXR1cmUKCgpAZGF0YWNsYXNzCmNsYXNzIEJhc2VQbG90Q29uZmlnOgogICAgIiIiQSBiYXNlIGNsYXNzIGZvciBhZHZhbmNlZCBwbG90dGluZyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCgogICAgOnBhcmFtIHJnYl9mYWN0b3I6IEEgZmFjdG9yIGJ5IHdoaWNoIHRvIHNjYWxlIFJHQiBpbWFnZXMgdG8gbWFrZSB0aGVtIGxvb2sgYmV0dGVyLgogICAgOnBhcmFtIHRpbWVzdGFtcF9jb2x1bW46IEEgbmFtZSBvZiBhIGNvbHVtbiBjb250YWluaW5nIHRpbWVzdGFtcHMgaW4gYSBgR2VvRGF0YUZyYW1lYCBmZWF0dXJlLiBJZiBzZXQgdG8gYE5vbmVgIGl0CiAgICAgICAgd2lsbCBwbG90IHRlbXBvcmFsIHZlY3RvciBmZWF0dXJlcyBhcyBpZiB0aGV5IHdlcmUgdGltZWxlc3MuCiAgICA6cGFyYW0gZ2VvbWV0cnlfY29sdW1uOiBBIG5hbWUgb2YgYSBjb2x1bW4gY29udGFpbmluZyBnZW9tZXRyaWVzIGluIGEgYEdlb0RhdGFGcmFtZWAgZmVhdHVyZS4KICAgICIiIgoKICAgIHJnYl9mYWN0b3I6IE9wdGlvbmFsW2Zsb2F0XSA9IDMuNQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICB0aW1lc3RhbXBfY29sdW1uOiBPcHRpb25hbFtzdHJdID0gIlRJTUVTVEFNUCIKICAgIGdlb21ldHJ5X2NvbHVtbjogc3RyID0gImdlb21ldHJ5IgoKCjx8ZmltX2VuZHw+"]
["01f8a55bdde772e66b5760e0b041cfc0bd06c5cd-2","01f8a55bdde772e66b5760e0b041cfc0bd06c5cd","PHxmaW1fcHJlZml4fD4KIiIiClRoaXMgbW9kdWxlIGltcGxlbWVudHMgYmFzZSBvYmplY3RzIGZvciBgRU9QYXRjaGAgdmlzdWFsaXphdGlvbnMuCgpDcmVkaXRzOgpDb3B5cmlnaHQgKGMpIDIwMTctMjAyMiBNYXRlaiBBbGVrc2FuZHJvdiwgTWF0ZWogQmF0acSNLCBHcmVnYSBNaWzEjWluc2tpLCBEb21hZ29qIEtvcmFpcywgTWF0aWMgTHViZWogKFNpbmVyZ2lzZSkKQ29weXJpZ2h0IChjKSAyMDE3LTIwMjIgxb1pZ2EgTHVrxaFpxI0sIERldmlzIFBlcmVzc3V0dGksIE5lamMgVmVzZWwsIEpvdmFuIFZpxaFuamnEhywgQW7FvmUgWnVwYW5jIChTaW5lcmdpc2UpCgpUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUgTElDRU5TRQpmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgoiIiIKaW1wb3J0IGFiYwppbXBvcnQgZGF0ZXRpbWUgYXMgZHQKZnJvbSBkYXRhY2xhc3NlcyBpbXBvcnQgZGF0YWNsYXNzCmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbCwgTGlzdCwgVHVwbGUsIFVuaW9uCgppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBnZW9wYW5kYXMgaW1wb3J0IEdlb0RhdGFGcmFtZQoKZnJvbSBlb2xlYXJuLmNvcmUgaW1wb3J0IEVPUGF0Y2gKZnJvbSBlb2xlYXJuLmNvcmUudXRpbHMuY29tbW9uIGltcG9ydCBpc19kaXNjcmV0ZV90eXBlCmZyb20gZW9sZWFybi5jb3JlLnV0aWxzLnBhcnNpbmcgaW1wb3J0IHBhcnNlX2ZlYXR1cmUKCgpAZGF0YWNsYXNzCmNsYXNzIEJhc2VQbG90Q29uZmlnOgogICAgIiIiQSBiYXNlIGNsYXNzIGZvciBhZHZhbmNlZCBwbG90dGluZyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCgogICAgOnBhcmFtIHJnYl9mYWN0b3I6IEEgZmFjdG9yIGJ5IHdoaWNoIHRvIHNjYWxlIFJHQiBpbWFnZXMgdG8gbWFrZSB0aGVtIGxvb2sgYmV0dGVyLgogICAgOnBhcmFtIHRpbWVzdGFtcF9jb2x1bW46IEEgbmFtZSBvZiBhIGNvbHVtbiBjb250YWluaW5nIHRpbWVzdGFtcHMgaW4gYSBgR2VvRGF0YUZyYW1lYCBmZWF0dXJlLiBJZiBzZXQgdG8gYE5vbmVgIGl0CiAgICAgICAgd2lsbCBwbG90IHRlbXBvcmFsIHZlY3RvciBmZWF0dXJlcyBhcyBpZiB0aGV5IHdlcmUgdGltZWxlc3MuCiAgICA6cGFyYW0gZ2VvbWV0cnlfY29sdW1uOiBBIG5hbWUgb2YgYSBjb2x1bW4gY29udGFpbmluZyBnZW9tZXRyaWVzIGluIGEgYEdlb0RhdGFGcmFtZWAgZmVhdHVyZS4KICAgICIiIgoKICAgIHJnYl9mYWN0b3I6IE9wdGlvbmFsW2Zsb2F0XSA9IDMuNQogICAgdGltZXN0YW1wX2NvbHVtbjogT3B0aW9uYWxbc3RyXSA9ICJUSU1FU1RBTVAiCiAgICBnZW9tZXRyeV9jb2x1bW46IHN0ciA9ICJnZW9tZXRyeSIKCgpjbGFzcyBCYXNlRU9QYXRjaFZpc3VhbGl6YXRpb24obWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKICAgICIiIkEgYmFzZSBjbGFzcyBmb3IgRU9QYXRjaCB2aXN1YWxpemF0aW9uIiIiCgogICAgZGVmIF9faW5pdF9fKAogICAgICAgIHNlbGYsCiAgICAgICAgZW9wYXRjaDogRU9QYXRjaCwKICAgICAgICBmZWF0dXJlLAogICAgICAgICosCiAgICAgICAgY29uZmlnOiBCYXNlUGxvdENvbmZpZywKICAgICAgICB0aW1lczogVW5pb25bTGlzdFtpbnRdLCBzbGljZSwgTm9uZV0gPSBOb25lLAogICAgICAgIGNoYW5uZWxzOiBVbmlvbltMaXN0W2ludF0sIHNsaWNlLCBOb25lXSA9IE5vbmUsCiAgICAgICAgY2hhbm5lbF9uYW1lczogT3B0aW9uYWxbTGlzdFtzdHJdXSA9IE5vbmUsCiAgICAgICAgcmdiOiBPcHRpb25hbFtUdXBsZVtpbnQsIGludCwgaW50XV0gPSBOb25lLAogICAgKToKICAgICAgICAiIiIKICAgICAgICA6cGFyYW0gZW9wYXRjaDogQW4gRU9QYXRjaCB3aXRoIGEgZmVhdHVyZSB0byBwbG90LgogICAgICAgIDpwYXJhbSBmZWF0dXJlOiBBIGZlYXR1cmUgZnJvbSB0aGUgZ2l2ZW4gRU9QYXRjaCB0byBwbG90LgogICAgICAgIDpwYXJhbSBjb25maWc6IEEgY29uZmlndXJhdGlvbiBvYmplY3Qgd2l0aCBhZHZhbmNlZCBwbG90dGluZyBwYXJhbWV0ZXJzLgogICAgICAgIDpwYXJhbSB0aW1lczogQSBsaXN0IG9yIGEgc2xpY2Ugb2YgaW5kaWNlcyBvbiB0ZW1wb3JhbCBheGlzIHRvIGJlIHVzZWQgZm9yIHBsb3R0aW5nLiBJZiBub3QgcHJvdmlkZWQgYWxsCiAgICAgICAgICAgIGluZGljZXMgd2lsbCBiZSB1c2VkLgogICAgICAgIDpwYXJhbSBjaGFubmVsczogQSBsaXN0IG9yIGEgc2xpY2Ugb2YgaW5kaWNlcyBvbiBjaGFubmVscyBheGlzIHRvIGJlIHVzZWQgZm9yIHBsb3R0aW5nLiBJZiBub3QgcHJvdmlkZWQgYWxsCiAgICAgICAgICAgIGluZGljZXMgd2lsbCBiZSB1c2VkLgogICAgICAgIDpwYXJhbSBjaGFubmVsX25hbWVzOiBOYW1lcyBvZiBjaGFubmVscyBvZiB0aGUgbGFzdCBkaW1lbnNpb24gaW4gdGhlIGdpdmVuIHJhc3RlciBmZWF0dXJlLgogICAgICAgIDpwYXJhbSByZ2I6IElmIHByb3ZpZGVkLCBpdCBzaG91bGQgYmUgYSBsaXN0IG9mIDMgaW5kaWNlcyBvZiBSR0IgY2hhbm5lbHMgdG8gYmUgcGxvdHRlZC4gSXQgd2lsbCBwbG90IG9ubHkgUkdCCiAgICAgICAgICAgIGltYWdlcyB3aXRoIHRoZXNlIGNoYW5uZWxzLiBUaGlzIG9ubHkgd29ya3MgZm9yIHJhc3RlciBmZWF0dXJlcyB3aXRoIHNwYXRpYWwgZGltZW5zaW9uLgogICAgICAgICIiIgogICAgICAgIHNlbGYuZW9wYXRjaCA9IGVvcGF0Y2gKICAgICAgICBzZWxmLmZlYXR1cmUgPSBwYXJzZV9mZWF0dXJlKGZlYXR1cmUpCiAgICAgICAgZmVhdHVyZV90eXBlLCBfID0gc2VsZi5mZWF0dXJlCiAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKCiAgICAgICAgaWYgdGltZXMgaXMgbm90IE5vbmUgYW5kIG5vdCBmZWF0dXJlX3R5cGUuaXNfdGVtcG9yYWwoKToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUGFyYW1ldGVyIHRpbWVzIGNhbiBvbmx5IGJlIHByb3ZpZGVkIGZvciB0ZW1wb3JhbCBmZWF0dXJlcy4iKQogICAgICAgIHNlbGYudGltZXMgPSB0aW1lcwoKICAgICAgICBzZWxmLmNoYW5uZWxzID0gY2hhbm5lbHMKICAgICAgICBzZWxmLmNoYW5uZWxfbmFtZXMgPSBOb25lIGlmIGNoYW5uZWxfbmFtZXMgaXMgTm9uZSBlbHNlIFtzdHIobmFtZSkgZm9yIG5hbWUgaW4gY2hhbm5lbF9uYW1lc10KCiAgICAgICAgaWYgcmdiIGFuZCBsZW4ocmdiKSAhPSAzOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGYiUGFyYW1ldGVyIHJnYiBzaG91bGQgYmUgYSBsaXN0IG9mIDMgaW5kaWNlcyBidXQgZ290IHtyZ2J9IikKICAgICAgICBpZiByZ2IgYW5kIG5vdCAoZmVhdHVyZV90eXBlLmlzX3NwYXRpYWwoKSBhbmQgZmVhdHVyZV90eXBlLmlzX3Jhc3RlcigpKToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUGFyYW1ldGVyIHJnYiBjYW4gb25seSBiZSBwcm92aWRlZCBmb3IgcGxvdHRpbmcgc3BhdGlhbCByYXN0ZXIgZmVhdHVyZXMuIikKICAgICAgICBzZWxmLnJnYiA9IHJnYgoKICAgICAgICBpZiBzZWxmLmNoYW5uZWxzIGFuZCBzZWxmLnJnYjoKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiT25seSBvbmUgb2YgcGFyYW1ldGVycyBjaGFubmVscyBhbmQgcmdiIGNhbiBiZSBwcm92aWRlZC4iKQoKICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKICAgIGRlZiBwbG90KHNlbGYpIC0+IG9iamVjdDoKICAgICAgICAiIiJQbG90cyB0aGUgZ2l2ZW4gZmVhdHVyZSIiIgoKICAgIGRlZiBjb2xsZWN0X2FuZF9wcmVwYXJlX2ZlYXR1cmUoc2VsZikgLT4gVHVwbGVbb2JqZWN0LCBMaXN0W2R0LmRhdGV0aW1lXV06CiAgICAgICAgIiIiQ29sbGVjdHMgYSBmZWF0dXJlIGZyb20gRU9QYXRjaCBhbmQgbW9kaWZpZXMgaXQgYWNjb3JkaW5nIHRvIHBsb3R0aW5nIHBhcmFtZXRlcnMiIiIKICAgICAgICBmZWF0dXJlX3R5cGUsIF8gPSBzZWxmLmZlYXR1cmUKICAgICAgICBkYXRhID0gc2VsZi5lb3BhdGNoW3NlbGYuZmVhdHVyZV0KICAgICAgICB0aW1lc3RhbXBzID0gc2VsZi5lb3BhdGNoLnRpbWVzdGFtcAoKICAgICAgICBpZiBmZWF0dXJlX3R5cGUuaXNfcmFzdGVyKCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgaWYgc2VsZi50aW1lcyBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW3NlbGYudGltZXMsIC4uLl0KICAgICAgICAgICAgICAgIGlmIHRpbWVzdGFtcHM6CiAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wcyA9IGxpc3QobnAuYXJyYXkodGltZXN0YW1wcylbc2VsZi50aW1lc10pCjx8ZmltX2VuZHw+"]
["01f8a55bdde772e66b5760e0b041cfc0bd06c5cd-3","01f8a55bdde772e66b5760e0b041cfc0bd06c5cd","PHxmaW1fcHJlZml4fD4KIiIiClRoaXMgbW9kdWxlIGltcGxlbWVudHMgYmFzZSBvYmplY3RzIGZvciBgRU9QYXRjaGAgdmlzdWFsaXphdGlvbnMuCgpDcmVkaXRzOgpDb3B5cmlnaHQgKGMpIDIwMTctMjAyMiBNYXRlaiBBbGVrc2FuZHJvdiwgTWF0ZWogQmF0acSNLCBHcmVnYSBNaWzEjWluc2tpLCBEb21hZ29qIEtvcmFpcywgTWF0aWMgTHViZWogKFNpbmVyZ2lzZSkKQ29weXJpZ2h0IChjKSAyMDE3LTIwMjIgxb1pZ2EgTHVrxaFpxI0sIERldmlzIFBlcmVzc3V0dGksIE5lamMgVmVzZWwsIEpvdmFuIFZpxaFuamnEhywgQW7FvmUgWnVwYW5jIChTaW5lcmdpc2UpCjx8ZmltX2hvbGV8PgppbXBvcnQgYWJjCmltcG9ydCBkYXRldGltZSBhcyBkdApmcm9tIGRhdGFjbGFzc2VzIGltcG9ydCBkYXRhY2xhc3MKZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsLCBMaXN0LCBUdXBsZSwgVW5pb24KCmltcG9ydCBudW1weSBhcyBucApmcm9tIGdlb3BhbmRhcyBpbXBvcnQgR2VvRGF0YUZyYW1lCgpmcm9tIGVvbGVhcm4uY29yZSBpbXBvcnQgRU9QYXRjaApmcm9tIGVvbGVhcm4uY29yZS51dGlscy5jb21tb24gaW1wb3J0IGlzX2Rpc2NyZXRlX3R5cGUKZnJvbSBlb2xlYXJuLmNvcmUudXRpbHMucGFyc2luZyBpbXBvcnQgcGFyc2VfZmVhdHVyZQoKCkBkYXRhY2xhc3MKY2xhc3MgQmFzZVBsb3RDb25maWc6CiAgICAiIiJBIGJhc2UgY2xhc3MgZm9yIGFkdmFuY2VkIHBsb3R0aW5nIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KCiAgICA6cGFyYW0gcmdiX2ZhY3RvcjogQSBmYWN0b3IgYnkgd2hpY2ggdG8gc2NhbGUgUkdCIGltYWdlcyB0byBtYWtlIHRoZW0gbG9vayBiZXR0ZXIuCiAgICA6cGFyYW0gdGltZXN0YW1wX2NvbHVtbjogQSBuYW1lIG9mIGEgY29sdW1uIGNvbnRhaW5pbmcgdGltZXN0YW1wcyBpbiBhIGBHZW9EYXRhRnJhbWVgIGZlYXR1cmUuIElmIHNldCB0byBgTm9uZWAgaXQKICAgICAgICB3aWxsIHBsb3QgdGVtcG9yYWwgdmVjdG9yIGZlYXR1cmVzIGFzIGlmIHRoZXkgd2VyZSB0aW1lbGVzcy4KICAgIDpwYXJhbSBnZW9tZXRyeV9jb2x1bW46IEEgbmFtZSBvZiBhIGNvbHVtbiBjb250YWluaW5nIGdlb21ldHJpZXMgaW4gYSBgR2VvRGF0YUZyYW1lYCBmZWF0dXJlLgogICAgIiIiCgogICAgcmdiX2ZhY3RvcjogT3B0aW9uYWxbZmxvYXRdID0gMy41CiAgICB0aW1lc3RhbXBfY29sdW1uOiBPcHRpb25hbFtzdHJdID0gIlRJTUVTVEFNUCIKICAgIGdlb21ldHJ5X2NvbHVtbjogc3RyID0gImdlb21ldHJ5IgoKCmNsYXNzIEJhc2VFT1BhdGNoVmlzdWFsaXphdGlvbihtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgogICAgIiIiQSBiYXNlIGNsYXNzIGZvciBFT1BhdGNoIHZpc3VhbGl6YXRpb24iIiIKCiAgICBkZWYgX19pbml0X18oCiAgICAgICAgc2VsZiwKICAgICAgICBlb3BhdGNoOiBFT1BhdGNoLAogICAgICAgIGZlYXR1cmUsCiAgICAgICAgKiwKICAgICAgICBjb25maWc6IEJhc2VQbG90Q29uZmlnLAogICAgICAgIHRpbWVzOiBVbmlvbltMaXN0W2ludF0sIHNsaWNlLCBOb25lXSA9IE5vbmUsCiAgICAgICAgY2hhbm5lbHM6IFVuaW9uW0xpc3RbaW50XSwgc2xpY2UsIE5vbmVdID0gTm9uZSwKICAgICAgICBjaGFubmVsX25hbWVzOiBPcHRpb25hbFtMaXN0W3N0cl1dID0gTm9uZSwKICAgICAgICByZ2I6IE9wdGlvbmFsW1R1cGxlW2ludCwgaW50LCBpbnRdXSA9IE5vbmUsCiAgICApOgogICAgICAgICIiIgogICAgICAgIDpwYXJhbSBlb3BhdGNoOiBBbiBFT1BhdGNoIHdpdGggYSBmZWF0dXJlIHRvIHBsb3QuCiAgICAgICAgOnBhcmFtIGZlYXR1cmU6IEEgZmVhdHVyZSBmcm9tIHRoZSBnaXZlbiBFT1BhdGNoIHRvIHBsb3QuCiAgICAgICAgOnBhcmFtIGNvbmZpZzogQSBjb25maWd1cmF0aW9uIG9iamVjdCB3aXRoIGFkdmFuY2VkIHBsb3R0aW5nIHBhcmFtZXRlcnMuCiAgICAgICAgOnBhcmFtIHRpbWVzOiBBIGxpc3Qgb3IgYSBzbGljZSBvZiBpbmRpY2VzIG9uIHRlbXBvcmFsIGF4aXMgdG8gYmUgdXNlZCBmb3IgcGxvdHRpbmcuIElmIG5vdCBwcm92aWRlZCBhbGwKICAgICAgICAgICAgaW5kaWNlcyB3aWxsIGJlIHVzZWQuCiAgICAgICAgOnBhcmFtIGNoYW5uZWxzOiBBIGxpc3Qgb3IgYSBzbGljZSBvZiBpbmRpY2VzIG9uIGNoYW5uZWxzIGF4aXMgdG8gYmUgdXNlZCBmb3IgcGxvdHRpbmcuIElmIG5vdCBwcm92aWRlZCBhbGwKICAgICAgICAgICAgaW5kaWNlcyB3aWxsIGJlIHVzZWQuCiAgICAgICAgOnBhcmFtIGNoYW5uZWxfbmFtZXM6IE5hbWVzIG9mIGNoYW5uZWxzIG9mIHRoZSBsYXN0IGRpbWVuc2lvbiBpbiB0aGUgZ2l2ZW4gcmFzdGVyIGZlYXR1cmUuCiAgICAgICAgOnBhcmFtIHJnYjogSWYgcHJvdmlkZWQsIGl0IHNob3VsZCBiZSBhIGxpc3Qgb2YgMyBpbmRpY2VzIG9mIFJHQiBjaGFubmVscyB0byBiZSBwbG90dGVkLiBJdCB3aWxsIHBsb3Qgb25seSBSR0IKICAgICAgICAgICAgaW1hZ2VzIHdpdGggdGhlc2UgY2hhbm5lbHMuIFRoaXMgb25seSB3b3JrcyBmb3IgcmFzdGVyIGZlYXR1cmVzIHdpdGggc3BhdGlhbCBkaW1lbnNpb24uCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5lb3BhdGNoID0gZW9wYXRjaAogICAgICAgIHNlbGYuZmVhdHVyZSA9IHBhcnNlX2ZlYXR1cmUoZmVhdHVyZSkKICAgICAgICBmZWF0dXJlX3R5cGUsIF8gPSBzZWxmLmZlYXR1cmUKICAgICAgICBzZWxmLmNvbmZpZyA9IGNvbmZpZwoKICAgICAgICBpZiB0aW1lcyBpcyBub3QgTm9uZSBhbmQgbm90IGZlYXR1cmVfdHlwZS5pc190ZW1wb3JhbCgpOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJQYXJhbWV0ZXIgdGltZXMgY2FuIG9ubHkgYmUgcHJvdmlkZWQgZm9yIHRlbXBvcmFsIGZlYXR1cmVzLiIpCiAgICAgICAgc2VsZi50aW1lcyA9IHRpbWVzCgogICAgICAgIHNlbGYuY2hhbm5lbHMgPSBjaGFubmVscwogICAgICAgIHNlbGYuY2hhbm5lbF9uYW1lcyA9IE5vbmUgaWYgY2hhbm5lbF9uYW1lcyBpcyBOb25lIGVsc2UgW3N0cihuYW1lKSBmb3IgbmFtZSBpbiBjaGFubmVsX25hbWVzXQoKICAgICAgICBpZiByZ2IgYW5kIGxlbihyZ2IpICE9IDM6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZiJQYXJhbWV0ZXIgcmdiIHNob3VsZCBiZSBhIGxpc3Qgb2YgMyBpbmRpY2VzIGJ1dCBnb3Qge3JnYn0iKQogICAgICAgIGlmIHJnYiBhbmQgbm90IChmZWF0dXJlX3R5cGUuaXNfc3BhdGlhbCgpIGFuZCBmZWF0dXJlX3R5cGUuaXNfcmFzdGVyKCkpOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJQYXJhbWV0ZXIgcmdiIGNhbiBvbmx5IGJlIHByb3ZpZGVkIGZvciBwbG90dGluZyBzcGF0aWFsIHJhc3RlciBmZWF0dXJlcy4iKQogICAgICAgIHNlbGYucmdiID0gcmdiCgogICAgICAgIGlmIHNlbGYuY2hhbm5lbHMgYW5kIHNlbGYucmdiOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJPbmx5IG9uZSBvZiBwYXJhbWV0ZXJzIGNoYW5uZWxzIGFuZCByZ2IgY2FuIGJlIHByb3ZpZGVkLiIpCgogICAgQGFiYy5hYnN0cmFjdG1ldGhvZAogICAgZGVmIHBsb3Qoc2VsZikgLT4gb2JqZWN0OgogICAgICAgICIiIlBsb3RzIHRoZSBnaXZlbiBmZWF0dXJlIiIiCgogICAgZGVmIGNvbGxlY3RfYW5kX3ByZXBhcmVfZmVhdHVyZShzZWxmKSAtPiBUdXBsZVtvYmplY3QsIExpc3RbZHQuZGF0ZXRpbWVdXToKICAgICAgICAiIiJDb2xsZWN0cyBhIGZlYXR1cmUgZnJvbSBFT1BhdGNoIGFuZCBtb2RpZmllcyBpdCBhY2NvcmRpbmcgdG8gcGxvdHRpbmcgcGFyYW1ldGVycyIiIgogICAgICAgIGZlYXR1cmVfdHlwZSwgXyA9IHNlbGYuZmVhdHVyZQogICAgICAgIGRhdGEgPSBzZWxmLmVvcGF0Y2hbc2VsZi5mZWF0dXJlXQogICAgICAgIHRpbWVzdGFtcHMgPSBzZWxmLmVvcGF0Y2gudGltZXN0YW1wCgogICAgICAgIGlmIGZlYXR1cmVfdHlwZS5pc19yYXN0ZXIoKToKICAgICAgICAgICAgaWYgc2VsZi50aW1lcyBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW3NlbGYudGltZXMsIC4uLl0KICAgICAgICAgICAgICAgIGlmIHRpbWVzdGFtcHM6CiAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wcyA9IGxpc3QobnAuYXJyYXkodGltZXN0YW1wcylbc2VsZi50aW1lc10pCgogICAgICAgICAgICBpZiBzZWxmLmNoYW5uZWxzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbLi4uLCBzZWxmLmNoYW5uZWxzXQoKICAgICAgICAgICAgaWYgZmVhdHVyZV90eXBlLmlzX3NwYXRpYWwoKSBhbmQgc2VsZi5yZ2I6CiAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fcHJlcGFyZV9yZ2JfZGF0YShkYXRhKQoKICAgICAgICAgICAgbnVtYmVyX29mX3Bsb3RfY29sdW1ucyA9IDEgaWYgc2VsZi5yZ2IgZWxzZSBkYXRhLnNoYXBlWy0xXQogICAgICAgICAgICBpZiBzZWxmLmNoYW5uZWxfbmFtZXMgYW5kIGxlbihzZWxmLmNoYW5uZWxfbmFtZXMpICE9IG51bWJlcl9vZl9wbG90X2NvbHVtbnM6CiAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAgICAgICAgIGYiUHJvdmlkZWQge2xlbihzZWxmLmNoYW5uZWxfbmFtZXMpfSBjaGFubmVsIG5hbWVzIGJ1dCBhdHRlbXB0aW5nIHRvIG1ha2UgcGxvdHMgd2l0aCAiCiAgICAgICAgICAgICAgICAgICAgZiJ7bnVtYmVyX29mX3Bsb3RfY29sdW1uc30gY29sdW1ucyBmb3IgdGhlIGdpdmVuIGZlYXR1cmUgY2hhbm5lbHMuIgogICAgICAgICAgICAgICAgKQoKICAgICAgICBpZiBmZWF0dXJlX3R5cGUuaXNfdmVjdG9yKCkgYW5kIHNlbGYudGltZXMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9maWx0ZXJfdGVtcG9yYWxfZGF0YWZyYW1lKGRhdGEpCgogICAgICAgIHJldHVybiBkYXRhLCB0aW1lc3RhbXBzCgogICAgZGVmIF9wcmVwYXJlX3JnYl9kYXRhKHNlbGYsIGRhdGE6IG5wLm5kYXJyYXkpIC0+IG5wLm5kYXJyYXk6CiAgICAgICAgIiIiUHJlcGFyZXMgZGF0YSBhcnJheSBmb3IgUkdCIHBsb3R0aW5nIiIiCiAgICAgICAgZGF0YSA9IGRhdGFbLi4uLCBzZWxmLnJnYl0KCiAgICAgICAgaWYgc2VsZi5jb25maWcucmdiX2ZhY3RvciBpcyBub3QgTm9uZToKICAgICAgICAgICAgZGF0YSA9IGRhdGEgKiBzZWxmLmNvbmZpZy5yZ2JfZmFjdG9yCgogICAgICAgIGlmIGlzX2Rpc2NyZXRlX3R5cGUoZGF0YS5kdHlwZSk6CiAgICAgICAgICAgIGRhdGEgPSBucC5jbGlwKGRhdGEsIDAsIDI1NSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBkYXRhID0gbnAuY2xpcChkYXRhLCAwLjAsIDEuMCkKCiAgICAgICAgcmV0dXJuIGRhdGEKCiAgICBkZWYgX2ZpbHRlcl90ZW1wb3JhbF9kYXRhZnJhbWUoc2VsZiwgZGF0YWZyYW1lOiBHZW9EYXRhRnJhbWUpIC0+IEdlb0RhdGFGcmFtZToKICAgICAgICAiIiJQcmVwYXJlcyBhIGxpc3Qgb2YgdW5pcXVlIHRpbWVzdGFtcHMgZnJvbSB0aGUgZGF0YWZyYW1lLCBhcHBsaWVzIGZpbHRlciBvbiB0aGVtIGFuZCByZXR1cm5zIGEgbmV3CiAgICAgICAgZGF0YWZyYW1lIHdpdGggcm93cyB0aGF0IG9ubHkgY29udGFpbiBmaWx0ZXJlZCB0aW1lc3RhbXBzLiIiIgogICAgICAgIHVuaXF1ZV90aW1lc3RhbXBzID0gZGF0YWZyYW1lW3NlbGYuY29uZmlnLnRpbWVzdGFtcF9jb2x1bW5dLnVuaXF1ZSgpCiAgICAgICAgZmlsdGVyZWRfdGltZXN0YW1wcyA9IG5wLnNvcnQodW5pcXVlX3RpbWVzdGFtcHMpW3NlbGYudGltZXNdCiAgICAgICAgZmlsdGVyZWRfcm93cyA9IGRhdGFmcmFtZVtzZWxmLmNvbmZpZy50aW1lc3RhbXBfY29sdW1uXS5pc2luKGZpbHRlcmVkX3RpbWVzdGFtcHMpCiAgICAgICAgcmV0dXJuIGRhdGFmcmFtZVtmaWx0ZXJlZF9yb3dzXQo8fGZpbV9zdWZmaXh8PgoKVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlIExJQ0VOU0UKZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KIiIiCjx8ZmltX2VuZHw+"]
["78b0a6280c83a32cf5688a5366ac55030272db94-1","78b0a6280c83a32cf5688a5366ac55030272db94","PHxmaW1fcHJlZml4fD4KZnJvbSBjc3lzdGVtZHNwYXduZXIuY3N5c3RlbWRzcGF3bmVyIGltcG9ydCBDU3lzdGVtZFNwYXduZXIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKX19hbGxfXyA9IFtDU3lzdGVtZFNwYXduZXJdCjx8ZmltX2VuZHw+"]
["78b0a6280c83a32cf5688a5366ac55030272db94-2","78b0a6280c83a32cf5688a5366ac55030272db94","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBjc3lzdGVtZHNwYXduZXIuY3N5c3RlbWRzcGF3bmVyIGltcG9ydCBDU3lzdGVtZFNwYXduZXIKCl9fYWxsX18gPSBbQ1N5c3RlbWRTcGF3bmVyXQo8fGZpbV9lbmR8Pg=="]
["78b0a6280c83a32cf5688a5366ac55030272db94-3","78b0a6280c83a32cf5688a5366ac55030272db94","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBjc3lzdGVtZHNwYXduZXIuY3N5c3RlbWRzcGF3bmVyIGltcG9ydCBDU3lzdGVtZFNwYXduZXIKCl9fYWxsX18gPSBbQ1N5c3RlbWRTcGF3bmVyXQo8fGZpbV9lbmR8Pg=="]
["78b0a6280c83a32cf5688a5366ac55030272db94-4","78b0a6280c83a32cf5688a5366ac55030272db94","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBjc3lzdGVtZHNwYXduZXIuY3N5c3RlbWRzcGF3bmVyIGltcG9ydCBDU3lzdGVtZFNwYXduZXIKCl9fYWxsX18gPSBbQ1N5c3RlbWRTcGF3bmVyXQo8fGZpbV9lbmR8Pg=="]
["c1827313c0a76ae6635430ad73971684476f8aa4-1","c1827313c0a76ae6635430ad73971684476f8aa4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKCmZyb20gcm9ja2V0Y2hhdC5jYWxscy5iYXNlIGltcG9ydCBSb2NrZXRDaGF0QmFzZQoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCjx8ZmltX2hvbGV8PgoKICAgIGRlZiBidWlsZF9lbmRwb2ludChzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgcmV0dXJuICd7ZW5kcG9pbnR9P3VzZXJuYW1lPXt1c2VyX25hbWV9Jy5mb3JtYXQoCiAgICAgICAgICAgIGVuZHBvaW50PXNlbGYuZW5kcG9pbnQsCiAgICAgICAgICAgIHVzZXJfbmFtZT1rd2FyZ3MuZ2V0KCd1c2VyX25hbWUnKQogICAgICAgICkKCiAgICBkZWYgcG9zdF9yZXNwb25zZShzZWxmLCByZXN1bHQpOgogICAgICAgIHJldHVybiByZXN1bHRbJ3VzZXInXVsnX2lkJ10KPHxmaW1fc3VmZml4fD4KCgpjbGFzcyBHZXRVc2VySWQoUm9ja2V0Q2hhdEJhc2UpOgogICAgZW5kcG9pbnQgPSAnL2FwaS92MS91c2Vycy5pbmZvJwo8fGZpbV9lbmR8Pg=="]
["c1827313c0a76ae6635430ad73971684476f8aa4-2","c1827313c0a76ae6635430ad73971684476f8aa4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKCmZyb20gcm9ja2V0Y2hhdC5jYWxscy5iYXNlIGltcG9ydCBSb2NrZXRDaGF0QmFzZQoKPHxmaW1faG9sZXw+CiAgICBlbmRwb2ludCA9ICcvYXBpL3YxL3VzZXJzLmluZm8nCgogICAgZGVmIGJ1aWxkX2VuZHBvaW50KHNlbGYsICoqa3dhcmdzKToKICAgICAgICByZXR1cm4gJ3tlbmRwb2ludH0/dXNlcm5hbWU9e3VzZXJfbmFtZX0nLmZvcm1hdCgKICAgICAgICAgICAgZW5kcG9pbnQ9c2VsZi5lbmRwb2ludCwKICAgICAgICAgICAgdXNlcl9uYW1lPWt3YXJncy5nZXQoJ3VzZXJfbmFtZScpCiAgICAgICAgKQoKICAgIGRlZiBwb3N0X3Jlc3BvbnNlKHNlbGYsIHJlc3VsdCk6CiAgICAgICAgcmV0dXJuIHJlc3VsdFsndXNlciddWydfaWQnXQo8fGZpbV9zdWZmaXh8Pgpsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpjbGFzcyBHZXRVc2VySWQoUm9ja2V0Q2hhdEJhc2UpOgo8fGZpbV9lbmR8Pg=="]
["c1b6435093e51fa499cfecb51ffd2d17ad84e0b0-1","c1b6435093e51fa499cfecb51ffd2d17ad84e0b0","PHxmaW1fcHJlZml4fD4KIiIiCmZ1bmN0aW9uIERpdmlkZVBhcGVyCglCQVNFIENBU0U6IAoJCWlucHV07J20IO2VmOyWgOyDieycvOuhnOunjCwg65iQ64qUIO2MjOuegOyDieycvOuhnOunjCDqtazshLHrkJjslrQg7J6I64qU7KeAIO2ZleyduAoJCeunjOyVvSDqt7jroIfri6TrqbQgY291bnQg7Kad6rCA7Iuc7YK0CglSRUNVUlNJVkUgU1RFUDoKCQlpbnB1dOydmCDsg4nsnbQg7ISe7JesIOyeiOycvOuptCA065Ox67aE7ZW07IScIOyerOq3gAoiIiIKI2luaXQKd2hpdGVQYXBlciA9IDAKYmx1ZVBhcGVyID0gMApwYXBlciA9IFtdCgojaW5wdXQKTiA9IGludChpbnB1dCgpKQpmb3IgaSBpbiByYW5nZShOKToKCXBhcGVyLmFwcGVuZChsaXN0KG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkpKQoKI2FsZwpkZWYgRGl2aWRlUGFwZXIoc3RhcnRYLCBzdGFydFksIGxlbmd0aCk6CglnbG9iYWwgd2hpdGVQYXBlcgoJZ2xvYmFsIGJsdWVQYXBlcgoJY29sb3JzID0gMAoKCWZvciBpIGluIHJhbmdlKGxlbmd0aCk6CgkJY29sb3JzICs9IHN1bShwYXBlcltzdGFydFkgKyBpXVtzdGFydFggOiBzdGFydFggKyBsZW5ndGhdKQoKCWlmIGNvbG9ycyA9PSAwOgoJCXdoaXRlUGFwZXIgKz0gMQoJCXJldHVybgoJZWxpZiBjb2xvcnMgPT0gbGVuZ3RoKmxlbmd0aDoKCQlibHVlUGFwZXIgKz0gMQoJCXJldHVybgoJCglsZW5ndGggPSBpbnQobGVuZ3RoLzIpCglEaXZpZGVQYXBlcihzdGFydFgsIHN0YXJ0WSwgbGVuZ3RoKQoJRGl2aWRlUGFwZXIoc3RhcnRYLCBzdGFydFkgKyBsZW5ndGgsIGxlbmd0aCkKCURpdmlkZVBhcGVyKHN0YXJ0WCArIGxlbmd0aCwgc3RhcnRZLCBsZW5ndGgpCglEaXZpZGVQYXBlcihzdGFydFggKyBsZW5ndGgsIHN0YXJ0WSArIGxlbmd0aCwgbGVuZ3RoKQoJcmV0dXJuCgpEaXZpZGVQYXBlcigwLCAwLCBOKQoKI291dHB1dApwcmludCh3aGl0ZVBhcGVyKQpwcmludChibHVlUGFwZXIpCgonJycKYXJyID0gW10KCmFyci5hcHBlbmQobGlzdChtYXAoaW50LCBpbnB1dCgpLnNwbGl0KCkpKSkKYXJyLmFwcGVuZChsaXN0KG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkpKQoKcHJpbnQoYXJyKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CicnJwo8fGZpbV9lbmR8Pg=="]
["c1b6435093e51fa499cfecb51ffd2d17ad84e0b0-2","c1b6435093e51fa499cfecb51ffd2d17ad84e0b0","PHxmaW1fcHJlZml4fD4KIiIiCmZ1bmN0aW9uIERpdmlkZVBhcGVyCglCQVNFIENBU0U6IAoJCWlucHV07J20IO2VmOyWgOyDieycvOuhnOunjCwg65iQ64qUIO2MjOuegOyDieycvOuhnOunjCDqtazshLHrkJjslrQg7J6I64qU7KeAIO2ZleyduAo8fGZpbV9ob2xlfD4KCVJFQ1VSU0lWRSBTVEVQOgoJCWlucHV07J2YIOyDieydtCDshJ7sl6wg7J6I7Jy866m0IDTrk7HrtoTtlbTshJwg7J6s6reACiIiIgojaW5pdAp3aGl0ZVBhcGVyID0gMApibHVlUGFwZXIgPSAwCnBhcGVyID0gW10KCiNpbnB1dApOID0gaW50KGlucHV0KCkpCmZvciBpIGluIHJhbmdlKE4pOgoJcGFwZXIuYXBwZW5kKGxpc3QobWFwKGludCwgaW5wdXQoKS5zcGxpdCgpKSkpCgojYWxnCmRlZiBEaXZpZGVQYXBlcihzdGFydFgsIHN0YXJ0WSwgbGVuZ3RoKToKCWdsb2JhbCB3aGl0ZVBhcGVyCglnbG9iYWwgYmx1ZVBhcGVyCgljb2xvcnMgPSAwCgoJZm9yIGkgaW4gcmFuZ2UobGVuZ3RoKToKCQljb2xvcnMgKz0gc3VtKHBhcGVyW3N0YXJ0WSArIGldW3N0YXJ0WCA6IHN0YXJ0WCArIGxlbmd0aF0pCgoJaWYgY29sb3JzID09IDA6CgkJd2hpdGVQYXBlciArPSAxCgkJcmV0dXJuCgllbGlmIGNvbG9ycyA9PSBsZW5ndGgqbGVuZ3RoOgoJCWJsdWVQYXBlciArPSAxCgkJcmV0dXJuCgkKCWxlbmd0aCA9IGludChsZW5ndGgvMikKCURpdmlkZVBhcGVyKHN0YXJ0WCwgc3RhcnRZLCBsZW5ndGgpCglEaXZpZGVQYXBlcihzdGFydFgsIHN0YXJ0WSArIGxlbmd0aCwgbGVuZ3RoKQoJRGl2aWRlUGFwZXIoc3RhcnRYICsgbGVuZ3RoLCBzdGFydFksIGxlbmd0aCkKCURpdmlkZVBhcGVyKHN0YXJ0WCArIGxlbmd0aCwgc3RhcnRZICsgbGVuZ3RoLCBsZW5ndGgpCglyZXR1cm4KCkRpdmlkZVBhcGVyKDAsIDAsIE4pCgojb3V0cHV0CnByaW50KHdoaXRlUGFwZXIpCnByaW50KGJsdWVQYXBlcikKCicnJwphcnIgPSBbXQoKYXJyLmFwcGVuZChsaXN0KG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkpKQphcnIuYXBwZW5kKGxpc3QobWFwKGludCwgaW5wdXQoKS5zcGxpdCgpKSkpCgpwcmludChhcnIpCicnJwo8fGZpbV9zdWZmaXh8PgoJCeunjOyVvSDqt7jroIfri6TrqbQgY291bnQg7Kad6rCA7Iuc7YK0Cjx8ZmltX2VuZHw+"]
["c1b6435093e51fa499cfecb51ffd2d17ad84e0b0-3","c1b6435093e51fa499cfecb51ffd2d17ad84e0b0","PHxmaW1fcHJlZml4fD4KIiIiCmZ1bmN0aW9uIERpdmlkZVBhcGVyCglCQVNFIENBU0U6IAoJCWlucHV07J20IO2VmOyWgOyDieycvOuhnOunjCwg65iQ64qUIO2MjOuegOyDieycvOuhnOunjCDqtazshLHrkJjslrQg7J6I64qU7KeAIO2ZleyduAoJCeunjOyVvSDqt7jroIfri6TrqbQgY291bnQg7Kad6rCA7Iuc7YK0CglSRUNVUlNJVkUgU1RFUDoKCQlpbnB1dOydmCDsg4nsnbQg7ISe7JesIOyeiOycvOuptCA065Ox67aE7ZW07IScIOyerOq3gAoiIiIKI2luaXQKd2hpdGVQYXBlciA9IDAKYmx1ZVBhcGVyID0gMAo8fGZpbV9ob2xlfD4KZm9yIGkgaW4gcmFuZ2UoTik6CglwYXBlci5hcHBlbmQobGlzdChtYXAoaW50LCBpbnB1dCgpLnNwbGl0KCkpKSkKCiNhbGcKZGVmIERpdmlkZVBhcGVyKHN0YXJ0WCwgc3RhcnRZLCBsZW5ndGgpOgoJZ2xvYmFsIHdoaXRlUGFwZXIKCWdsb2JhbCBibHVlUGFwZXIKCWNvbG9ycyA9IDAKCglmb3IgaSBpbiByYW5nZShsZW5ndGgpOgoJCWNvbG9ycyArPSBzdW0ocGFwZXJbc3RhcnRZICsgaV1bc3RhcnRYIDogc3RhcnRYICsgbGVuZ3RoXSkKCglpZiBjb2xvcnMgPT0gMDoKCQl3aGl0ZVBhcGVyICs9IDEKCQlyZXR1cm4KCWVsaWYgY29sb3JzID09IGxlbmd0aCpsZW5ndGg6CgkJYmx1ZVBhcGVyICs9IDEKCQlyZXR1cm4KCQoJbGVuZ3RoID0gaW50KGxlbmd0aC8yKQoJRGl2aWRlUGFwZXIoc3RhcnRYLCBzdGFydFksIGxlbmd0aCkKCURpdmlkZVBhcGVyKHN0YXJ0WCwgc3RhcnRZICsgbGVuZ3RoLCBsZW5ndGgpCglEaXZpZGVQYXBlcihzdGFydFggKyBsZW5ndGgsIHN0YXJ0WSwgbGVuZ3RoKQoJRGl2aWRlUGFwZXIoc3RhcnRYICsgbGVuZ3RoLCBzdGFydFkgKyBsZW5ndGgsIGxlbmd0aCkKCXJldHVybgoKRGl2aWRlUGFwZXIoMCwgMCwgTikKCiNvdXRwdXQKcHJpbnQod2hpdGVQYXBlcikKcHJpbnQoYmx1ZVBhcGVyKQoKJycnCmFyciA9IFtdCgphcnIuYXBwZW5kKGxpc3QobWFwKGludCwgaW5wdXQoKS5zcGxpdCgpKSkpCmFyci5hcHBlbmQobGlzdChtYXAoaW50LCBpbnB1dCgpLnNwbGl0KCkpKSkKCnByaW50KGFycikKJycnCjx8ZmltX3N1ZmZpeHw+CnBhcGVyID0gW10KCiNpbnB1dApOID0gaW50KGlucHV0KCkpCjx8ZmltX2VuZHw+"]
["823382328cfb6be6d24f13957fdb5c9edab25833-1","823382328cfb6be6d24f13957fdb5c9edab25833","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQgc3VicHJvY2VzcwoKZnJvbSBwZXJjeSBpbXBvcnQgZXJyb3JzCmZyb20gcGVyY3kgaW1wb3J0IHV0aWxzCgpfX2FsbF9fID0gWydFbnZpcm9ubWVudCddCgpHSVRfQ09NTUlUX0ZPUk1BVCA9ICclbicuam9pbihbCiAgJ0NPTU1JVF9TSEE6JUgnLAogICdBVVRIT1JfTkFNRTolYW4nLAogICdBVVRIT1JfRU1BSUw6JWFlJywKICAnQ09NTUlUVEVSX05BTUU6JWNuJywKICAnQ09NTUlUVEVSX0VNQUlMOiVjZScsCiAgJ0NPTU1JVFRFRF9EQVRFOiVhaScsCiAgIyBOb3RlOiBvcmRlciBpcyBpbXBvcnRhbnQsIHRoaXMgbXVzdCBjb21lIGxhc3QgYmVjYXVzZSB0aGUgcmVnZXggaXMgYSBtdWx0aWxpbmUgbWF0Y2guCiAgJ0NPTU1JVF9NRVNTQUdFOiVCJywKXSk7ICMgZ2l0IHNob3cgZm9ybWF0IHVzZXMgJW4gZm9yIG5ld2xpbmVzLgoKCmNsYXNzIEVudmlyb25tZW50KG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5fcmVhbF9lbnYgPSBOb25lCiAgICAgICAgaWYgb3MuZ2V0ZW52KCdUUkFWSVNfQlVJTERfSUQnKToKICAgICAgICAgICAgc2VsZi5fcmVhbF9lbnYgPSBUcmF2aXNFbnZpcm9ubWVudCgpCiAgICAgICAgZWxpZiBvcy5nZXRlbnYoJ0pFTktJTlNfVVJMJyk6CiAgICAgICAgICAgIHNlbGYuX3JlYWxfZW52ID0gSmVua2luc0Vudmlyb25tZW50KCkKICAgICAgICBlbGlmIG9zLmdldGVudignQ0lSQ0xFQ0knKToKICAgICAgICAgICAgc2VsZi5fcmVhbF9lbnYgPSBDaXJjbGVFbnZpcm9ubWVudCgpCiAgICAgICAgZWxpZiBvcy5nZXRlbnYoJ0NJX05BTUUnKSA9PSAnY29kZXNoaXAnOgogICAgICAgICAgICBzZWxmLl9yZWFsX2VudiA9IENvZGVzaGlwRW52aXJvbm1lbnQoKQogICAgICAgIGVsaWYgb3MuZ2V0ZW52KCdEUk9ORScpID09ICd0cnVlJzoKICAgICAgICAgICAgc2VsZi5fcmVhbF9lbnYgPSBEcm9uZUVudmlyb25tZW50KCkKICAgICAgICBlbGlmIG9zLmdldGVudignU0VNQVBIT1JFJykgPT0gJ3RydWUnOgogICAgICAgICAgICBzZWxmLl9yZWFsX2VudiA9IFNlbWFwaG9yZUVudmlyb25tZW50KCkKICAgICAgICBlbGlmIG9zLmdldGVudignQlVJTERLSVRFJykgPT0gJ3RydWUnOgogICAgICAgICAgICBzZWxmLl9yZWFsX2VudiA9IEJ1aWxka2l0ZUVudmlyb25tZW50KCkKICAgICAgICBlbGlmIG9zLmdldGVudignR0lUTEFCX0NJJykgPT0gJ3RydWUnOgogICAgICAgICAgICBzZWxmLl9yZWFsX2VudiA9IEdpdGxhYkVudmlyb25tZW50KCkKCiAgICBAcHJvcGVydHkKICAgIGRlZiBjdXJyZW50X2NpKHNlbGYpOgogICAgICAgIGlmIHNlbGYuX3JlYWxfZW52OgogICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF9lbnYuY3VycmVudF9jaQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIHB1bGxfcmVxdWVzdF9udW1iZXIoc2VsZik6CiAgICAgICAgaWYgb3MuZ2V0ZW52KCdQRVJDWV9QVUxMX1JFUVVFU1QnKToKICAgICAgICAgICAgcmV0dXJuIG9zLmdldGVudignUEVSQ1lfUFVMTF9SRVFVRVNUJykKICAgICAgICBpZiBzZWxmLl9yZWFsX2VudiBhbmQgaGFzYXR0cihzZWxmLl9yZWFsX2VudiwgJ3B1bGxfcmVxdWVzdF9udW1iZXInKToKICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWxfZW52LnB1bGxfcmVxdWVzdF9udW1iZXIKCiAgICBAcHJvcGVydHkKICAgIGRlZiBicmFuY2goc2VsZik6CiAgICAgICAgIyBGaXJzdCwgcGVyY3kgZW52IHZhci4KICAgICAgICBpZiBvcy5nZXRlbnYoJ1BFUkNZX0JSQU5DSCcpOgogICAgICAgICAgICByZXR1cm4gb3MuZ2V0ZW52KCdQRVJDWV9CUkFOQ0gnKQogICAgICAgICMgU2Vjb25kLCBmcm9tIHRoZSBDSSBlbnZpcm9ubWVudC4KICAgICAgICBpZiBzZWxmLl9yZWFsX2VudiBhbmQgaGFzYXR0cihzZWxmLl9yZWFsX2VudiwgJ2JyYW5jaCcpOgogICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF9lbnYuYnJhbmNoCiAgICAgICAgIyBUaGlyZCwgZnJvbSB0aGUgbG9jYWwgZ2l0IHJlcG8uCiAgICAgICAgcmF3X2JyYW5jaF9vdXRwdXQgPSBzZWxmLl9yYXdfYnJhbmNoX291dHB1dCgpCiAgICAgICAgaWYgcmF3X2JyYW5jaF9vdXRwdXQ6CiAgICAgICAgICAgIHJldHVybiByYXdfYnJhbmNoX291dHB1dAogICAgICAgICMgRm91cnRoLCBmYWxsYmFjayB0byBOT05FLgogICAgICAgIHV0aWxzLnByaW50X2Vycm9yKCdbcGVyY3ldIFdhcm5pbmc6IHVua25vd24gZ2l0IHJlcG8sIGJyYW5jaCBub3QgZGV0ZWN0ZWQuJykKICAgICAgICByZXR1cm4gTm9uZQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIHRhcmdldF9icmFuY2goc2VsZik6CiAgICAgICAgaWYgb3MuZ2V0ZW52KCdQRVJDWV9UQVJHRVRfQlJBTkNIJyk6CiAgICAgICAgICAgIHJldHVybiBvcy5nZXRlbnYoJ1BFUkNZX1RBUkdFVF9CUkFOQ0gnKQogICAgICAgIHJldHVybiBOb25lCgogICAgQHByb3BlcnR5CiAgICBkZWYgY29tbWl0X2RhdGEoc2VsZik6CgogICAgICAgICMgVHJ5IGdldHRpbmcgZGF0YSBmcm9tIGdpdAogICAgICAgICMgSWYgdGhpcyBoYXMgYSByZXN1bHQsIGl0IG1lYW5zIGdpdCBpcyBwcmVzZW50IGluIHRoZSBzeXN0ZW0uCiAgICAgICAgcmF3X2dpdF9vdXRwdXQgPSBzZWxmLl9naXRfY29tbWl0X291dHB1dCgpCgogICAgICAgICMgSWYgbm90IHJ1bm5pbmcgaW4gYSBnaXQgcmVwbywgYWxsb3cgdW5kZWZpbmVkIGZvciBjZXJ0YWluIGNvbW1pdCBhdHRyaWJ1dGVzLgogICAgICAgIGRlZiBwYXJzZShyZWdleCk6CiAgICAgICAgICAgIGlmIG5vdCByYXdfZ2l0X291dHB1dDoKICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgIG1hdGNoID0gcmVnZXguc2VhcmNoKHJhd19naXRfb3V0cHV0KQogICAgICAgICAgICBpZiBtYXRjaDoKICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgxKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgIyBUaGUgb25seSByZXF1aXJlZCBhdHRyaWJ1dGU6CiAgICAgICAgICAgICdicmFuY2gnOiBzZWxmLmJyYW5jaCwKICAgICAgICAgICAgIyBBbiBvcHRpb25hbCBidXQgaW1wb3J0YW50IGF0dHJpYnV0ZToKICAgICAgICAgICAgJ3NoYSc6IHNlbGYuY29tbWl0X3NoYSBvciBwYXJzZShyZS5jb21waWxlKCJDT01NSVRfU0hBOiguKikiKSksCgogICAgICAgICAgICAjIE9wdGlvbmFsIGF0dHJpYnV0ZXM6CiAgICAgICAgICAgICMgSWYgd2UgaGF2ZSB0aGUgZ2l0IGluZm9ybWF0aW9uLCByZWFkIGZyb20gdGhvc2UgcmF0aGVyIHRoYW4gZW52IHZhcnMuCiAgICAgICAgICAgICMgVGhlIEdJVF8gZW52aXJvbm1lbnQgdmFycyBhcmUgZnJvbSB0aGUgSmVua2lucyBHaXQgUGx1Z2luLCBidXQgY291bGQgYmUKICAgICAgICAgICAgIyB1c2VkIGdlbmVyaWNhbGx5LiBUaGlzIGJlaGF2aW9yIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KICAgICAgICAgICAgJ21lc3NhZ2UnOiBwYXJzZShyZS5jb21waWxlKCJDT01NSVRfTUVTU0FHRTooLiopIiwgZmxhZ3M9cmUuTVVMVElMSU5FKSksCiAgICAgICAgICAgICdjb21taXR0ZWRfYXQnOiBwYXJzZShyZS5jb21waWxlKCJDT01NSVRURURfREFURTooLiopIikpLAogICAgICAgICAgICAnYXV0aG9yX25hbWUnOiBwYXJzZShyZS5jb21waWxlKCJBVVRIT1JfTkFNRTooLiopIikpIG9yIG9zLmdldGVudignR0lUX0FVVEhPUl9OQU1FJyksCiAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiBwYXJzZShyZS5jb21waWxlKCJBVVRIT1JfRU1BSUw6KC4qKSIpKSBvciBvcy5nZXRlbnYoJ0dJVF9BVVRIT1JfRU1BSUwnKSwKICAgICAgICAgICAgJ2NvbW1pdHRlcl9uYW1lJzogcGFyc2UocmUuY29tcGlsZSgiQ09NTUlUVEVSX05BTUU6KC4qKSIpKSBvciBvcy5nZXRlbnYoJ0dJVF9DT01NSVRURVJfTkFNRScpLAogICAgICAgICAgICAnY29tbWl0dGVyX2VtYWlsJzogcGFyc2UocmUuY29tcGlsZSgiQ09NTUlUVEVSX0VNQUlMOiguKikiKSkgb3Igb3MuZ2V0ZW52KCdHSVRfQ09NTUlUVEVSX0VNQUlMJyksCiAgICAgICAgfQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGNvbW1pdF9zaGEoc2VsZik6CiAgICAgICAgIyBGaXJzdCwgcGVyY3kgZW52IHZhci4KICAgICAgICBpZiBvcy5nZXRlbnYoJ1BFUkNZX0NPTU1JVCcpOgogICAgICAgICAgICByZXR1cm4gb3MuZ2V0ZW52KCdQRVJDWV9DT01NSVQnKQogICAgICAgICMgU2Vjb25kLCBmcm9tIHRoZSBDSSBlbnZpcm9ubWVudC4KICAgICAgICBpZiBzZWxmLl9yZWFsX2VudiBhbmQgaGFzYXR0cihzZWxmLl9yZWFsX2VudiwgJ2NvbW1pdF9zaGEnKToKICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWxfZW52LmNvbW1pdF9zaGEKCiAgICBAcHJvcGVydHkKICAgIGRlZiB0YXJnZXRfY29tbWl0X3NoYShzZWxmKToKICAgICAgICBpZiBvcy5nZXRlbnYoJ1BFUkNZX1RBUkdFVF9DT01NSVQnKToKICAgICAgICAgICAgcmV0dXJuIG9zLmdldGVudignUEVSQ1lfVEFSR0VUX0NPTU1JVCcpCiAgICAgICAgcmV0dXJuIE5vbmUKCiAgICBAcHJvcGVydHkKICAgIGRlZiBwYXJhbGxlbF9ub25jZShzZWxmKToKICAgICAgICBpZiBvcy5nZXRlbnYoJ1BFUkNZX1BBUkFMTEVMX05PTkNFJyk6CiAgICAgICAgICByZXR1cm4gb3MuZ2V0ZW52KCdQRVJDWV9QQVJBTExFTF9OT05DRScpCiAgICAgICAgaWYgc2VsZi5fcmVhbF9lbnYgYW5kIGhhc2F0dHIoc2VsZi5fcmVhbF9lbnYsICdwYXJhbGxlbF9ub25jZScpOgogICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF9lbnYucGFyYWxsZWxfbm9uY2UKCiAgICBAcHJvcGVydHkKICAgIGRlZiBwYXJhbGxlbF90b3RhbF9zaGFyZHMoc2VsZik6CiAgICAgICAgaWYgb3MuZ2V0ZW52KCdQRVJDWV9QQVJBTExFTF9UT1RBTCcpOgogICAgICAgICAgICByZXR1cm4gaW50KG9zLmdldGVudignUEVSQ1lfUEFSQUxMRUxfVE9UQUwnKSkKICAgICAgICBpZiBzZWxmLl9yZWFsX2VudiBhbmQgaGFzYXR0cihzZWxmLl9yZWFsX2VudiwgJ3BhcmFsbGVsX3RvdGFsX3NoYXJkcycpOgogICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF9lbnYucGFyYWxsZWxfdG90YWxfc2hhcmRzCgogICAgZGVmIF9yYXdfZ2l0X291dHB1dChzZWxmLCBhcmdzKToKICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbigKICAgICAgICAgICAgWydnaXQnXSArIGFyZ3MsCiAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgIHNoZWxsPUZhbHNlCiAgICAgICAgKQogICAgICAgIHJldHVybiBwcm9jZXNzLnN0ZG91dC5yZWFkKCkuc3RyaXAoKS5kZWNvZGUoJ3V0Zi04JykKCiAgICBkZWYgX3Jhd19jb21taXRfb3V0cHV0KHNlbGYsIGNvbW1pdF9zaGEpOgogICAgICAgICMgTWFrZSBzdXJlIGNvbW1pdF9zaGEgaXMgb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyB0byBwcmV2ZW50IGNvbW1hbmQgaW5qZWN0aW9uLgogICAgICAgIGlmIG5vdCBjb21taXRfc2hhIG9yIGxlbihjb21taXRfc2hhKSA+IDEwMCBvciBub3QgY29tbWl0X3NoYS5pc2FsbnVtKCk6CiAgICAgICAgICAgIHJldHVybiAnJwoKICAgICAgICBhcmdzID0gWydzaG93JywgY29tbWl0X3NoYSwgJy0tcXVpZXQnLCAnLS1mb3JtYXQ9IicgKyBHSVRfQ09NTUlUX0ZPUk1BVCArICciJ107CiAgICAgICAgcmV0dXJuIHNlbGYuX3Jhd19naXRfb3V0cHV0KGFyZ3MpCgogICAgZGVmIF9naXRfY29tbWl0X291dHB1dChzZWxmKToKICAgICAgICByYXdfZ2l0X291dHB1dCA9ICcnCiAgICAgICAgIyBUcnkgZ2V0dGluZyBjb21taXQgZGF0YSBmcm9tIGNvbW1pdF9zaGEgc2V0IGJ5IGVudmlyb25tZW50IHZhcmlhYmxlcwogICAgICAgIGlmIHNlbGYuY29tbWl0X3NoYToKICAgICAgICAgIHJhd19naXRfb3V0cHV0ID0gc2VsZi5fcmF3X2NvbW1pdF9vdXRwdXQoc2VsZi5jb21taXRfc2hhKQoKICAgICAgICAjIElmIHRoZXJlJ3Mgbm8gcmF3X2dpdF9vdXRwdXQsIGl0IHByb2JhYmx5IG1lYW5zIHRoZXJlJ3Mgbm90IGEgc2hhLCBzbyB0cnkgYEhFQURgCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBpZiBub3QgcmF3X2dpdF9vdXRwdXQ6CiAgICAgICAgICByYXdfZ2l0X291dHB1dCA9IHNlbGYuX3Jhd19jb21taXRfb3V0cHV0KCdIRUFEJykKCiAgICAgICAgcmV0dXJuIHJhd19naXRfb3V0cHV0Cjx8ZmltX2VuZHw+"]
["823382328cfb6be6d24f13957fdb5c9edab25833-2","823382328cfb6be6d24f13957fdb5c9edab25833","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQgc3VicHJvY2VzcwoKZnJvbSBwZXJjeSBpbXBvcnQgZXJyb3JzCmZyb20gcGVyY3kgaW1wb3J0IHV0aWxzCgpfX2FsbF9fID0gWydFbnZpcm9ubWVudCddCgpHSVRfQ09NTUlUX0ZPUk1BVCA9ICclbicuam9pbihbCiAgJ0NPTU1JVF9TSEE6JUgnLAogICdBVVRIT1JfTkFNRTolYW4nLAogICdBVVRIT1JfRU1BSUw6JWFlJywKICAnQ09NTUlUVEVSX05BTUU6JWNuJywKICAnQ09NTUlUVEVSX0VNQUlMOiVjZScsCiAgJ0NPTU1JVFRFRF9EQVRFOiVhaScsCiAgIyBOb3RlOiBvcmRlciBpcyBpbXBvcnRhbnQsIHRoaXMgbXVzdCBjb21lIGxhc3QgYmVjYXVzZSB0aGUgcmVnZXggaXMgYSBtdWx0aWxpbmUgbWF0Y2guCiAgJ0NPTU1JVF9NRVNTQUdFOiVCJywKXSk7ICMgZ2l0IHNob3cgZm9ybWF0IHVzZXMgJW4gZm9yIG5ld2xpbmVzLgoKCmNsYXNzIEVudmlyb25tZW50KG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5fcmVhbF9lbnYgPSBOb25lCiAgICAgICAgaWYgb3MuZ2V0ZW52KCdUUkFWSVNfQlVJTERfSUQnKToKICAgICAgICAgICAgc2VsZi5fcmVhbF9lbnYgPSBUcmF2aXNFbnZpcm9ubWVudCgpCiAgICAgICAgZWxpZiBvcy5nZXRlbnYoJ0pFTktJTlNfVVJMJyk6CiAgICAgICAgICAgIHNlbGYuX3JlYWxfZW52ID0gSmVua2luc0Vudmlyb25tZW50KCkKICAgICAgICBlbGlmIG9zLmdldGVudignQ0lSQ0xFQ0knKToKICAgICAgICAgICAgc2VsZi5fcmVhbF9lbnYgPSBDaXJjbGVFbnZpcm9ubWVudCgpCiAgICAgICAgZWxpZiBvcy5nZXRlbnYoJ0NJX05BTUUnKSA9PSAnY29kZXNoaXAnOgogICAgICAgICAgICBzZWxmLl9yZWFsX2VudiA9IENvZGVzaGlwRW52aXJvbm1lbnQoKQogICAgICAgIGVsaWYgb3MuZ2V0ZW52KCdEUk9ORScpID09ICd0cnVlJzoKICAgICAgICAgICAgc2VsZi5fcmVhbF9lbnYgPSBEcm9uZUVudmlyb25tZW50KCkKICAgICAgICBlbGlmIG9zLmdldGVudignU0VNQVBIT1JFJykgPT0gJ3RydWUnOgogICAgICAgICAgICBzZWxmLl9yZWFsX2VudiA9IFNlbWFwaG9yZUVudmlyb25tZW50KCkKICAgICAgICBlbGlmIG9zLmdldGVudignQlVJTERLSVRFJykgPT0gJ3RydWUnOgogICAgICAgICAgICBzZWxmLl9yZWFsX2VudiA9IEJ1aWxka2l0ZUVudmlyb25tZW50KCkKICAgICAgICBlbGlmIG9zLmdldGVudignR0lUTEFCX0NJJykgPT0gJ3RydWUnOgogICAgICAgICAgICBzZWxmLl9yZWFsX2VudiA9IEdpdGxhYkVudmlyb25tZW50KCkKCiAgICBAcHJvcGVydHkKICAgIGRlZiBjdXJyZW50X2NpKHNlbGYpOgogICAgICAgIGlmIHNlbGYuX3JlYWxfZW52OgogICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF9lbnYuY3VycmVudF9jaQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIHB1bGxfcmVxdWVzdF9udW1iZXIoc2VsZik6CiAgICAgICAgaWYgb3MuZ2V0ZW52KCdQRVJDWV9QVUxMX1JFUVVFU1QnKToKICAgICAgICAgICAgcmV0dXJuIG9zLmdldGVudignUEVSQ1lfUFVMTF9SRVFVRVNUJykKICAgICAgICBpZiBzZWxmLl9yZWFsX2VudiBhbmQgaGFzYXR0cihzZWxmLl9yZWFsX2VudiwgJ3B1bGxfcmVxdWVzdF9udW1iZXInKToKICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWxfZW52LnB1bGxfcmVxdWVzdF9udW1iZXIKCiAgICBAcHJvcGVydHkKICAgIGRlZiBicmFuY2goc2VsZik6CiAgICAgICAgIyBGaXJzdCwgcGVyY3kgZW52IHZhci4KICAgICAgICBpZiBvcy5nZXRlbnYoJ1BFUkNZX0JSQU5DSCcpOgogICAgICAgICAgICByZXR1cm4gb3MuZ2V0ZW52KCdQRVJDWV9CUkFOQ0gnKQogICAgICAgICMgU2Vjb25kLCBmcm9tIHRoZSBDSSBlbnZpcm9ubWVudC4KICAgICAgICBpZiBzZWxmLl9yZWFsX2VudiBhbmQgaGFzYXR0cihzZWxmLl9yZWFsX2VudiwgJ2JyYW5jaCcpOgogICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF9lbnYuYnJhbmNoCiAgICAgICAgIyBUaGlyZCwgZnJvbSB0aGUgbG9jYWwgZ2l0IHJlcG8uCiAgICAgICAgcmF3X2JyYW5jaF9vdXRwdXQgPSBzZWxmLl9yYXdfYnJhbmNoX291dHB1dCgpCiAgICAgICAgaWYgcmF3X2JyYW5jaF9vdXRwdXQ6CiAgICAgICAgICAgIHJldHVybiByYXdfYnJhbmNoX291dHB1dAogICAgICAgICMgRm91cnRoLCBmYWxsYmFjayB0byBOT05FLgogICAgICAgIHV0aWxzLnByaW50X2Vycm9yKCdbcGVyY3ldIFdhcm5pbmc6IHVua25vd24gZ2l0IHJlcG8sIGJyYW5jaCBub3QgZGV0ZWN0ZWQuJykKICAgICAgICByZXR1cm4gTm9uZQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIHRhcmdldF9icmFuY2goc2VsZik6CiAgICAgICAgaWYgb3MuZ2V0ZW52KCdQRVJDWV9UQVJHRVRfQlJBTkNIJyk6CiAgICAgICAgICAgIHJldHVybiBvcy5nZXRlbnYoJ1BFUkNZX1RBUkdFVF9CUkFOQ0gnKQogICAgICAgIHJldHVybiBOb25lCgogICAgQHByb3BlcnR5CiAgICBkZWYgY29tbWl0X2RhdGEoc2VsZik6CgogICAgICAgICMgVHJ5IGdldHRpbmcgZGF0YSBmcm9tIGdpdAogICAgICAgICMgSWYgdGhpcyBoYXMgYSByZXN1bHQsIGl0IG1lYW5zIGdpdCBpcyBwcmVzZW50IGluIHRoZSBzeXN0ZW0uCiAgICAgICAgcmF3X2dpdF9vdXRwdXQgPSBzZWxmLl9naXRfY29tbWl0X291dHB1dCgpCgogICAgICAgICMgSWYgbm90IHJ1bm5pbmcgaW4gYSBnaXQgcmVwbywgYWxsb3cgdW5kZWZpbmVkIGZvciBjZXJ0YWluIGNvbW1pdCBhdHRyaWJ1dGVzLgogICAgICAgIGRlZiBwYXJzZShyZWdleCk6CiAgICAgICAgICAgIGlmIG5vdCByYXdfZ2l0X291dHB1dDoKICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgIG1hdGNoID0gcmVnZXguc2VhcmNoKHJhd19naXRfb3V0cHV0KQogICAgICAgICAgICBpZiBtYXRjaDoKICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgxKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgIyBUaGUgb25seSByZXF1aXJlZCBhdHRyaWJ1dGU6CiAgICAgICAgICAgICdicmFuY2gnOiBzZWxmLmJyYW5jaCwKICAgICAgICAgICAgIyBBbiBvcHRpb25hbCBidXQgaW1wb3J0YW50IGF0dHJpYnV0ZToKICAgICAgICAgICAgJ3NoYSc6IHNlbGYuY29tbWl0X3NoYSBvciBwYXJzZShyZS5jb21waWxlKCJDT01NSVRfU0hBOiguKikiKSksCgogICAgICAgICAgICAjIE9wdGlvbmFsIGF0dHJpYnV0ZXM6CiAgICAgICAgICAgICMgSWYgd2UgaGF2ZSB0aGUgZ2l0IGluZm9ybWF0aW9uLCByZWFkIGZyb20gdGhvc2UgcmF0aGVyIHRoYW4gZW52IHZhcnMuCiAgICAgICAgICAgICMgVGhlIEdJVF8gZW52aXJvbm1lbnQgdmFycyBhcmUgZnJvbSB0aGUgSmVua2lucyBHaXQgUGx1Z2luLCBidXQgY291bGQgYmUKICAgICAgICAgICAgIyB1c2VkIGdlbmVyaWNhbGx5LiBUaGlzIGJlaGF2aW9yIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KICAgICAgICAgICAgJ21lc3NhZ2UnOiBwYXJzZShyZS5jb21waWxlKCJDT01NSVRfTUVTU0FHRTooLiopIiwgZmxhZ3M9cmUuTVVMVElMSU5FKSksCiAgICAgICAgICAgICdjb21taXR0ZWRfYXQnOiBwYXJzZShyZS5jb21waWxlKCJDT01NSVRURURfREFURTooLiopIikpLAogICAgICAgICAgICAnYXV0aG9yX25hbWUnOiBwYXJzZShyZS5jb21waWxlKCJBVVRIT1JfTkFNRTooLiopIikpIG9yIG9zLmdldGVudignR0lUX0FVVEhPUl9OQU1FJyksCiAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiBwYXJzZShyZS5jb21waWxlKCJBVVRIT1JfRU1BSUw6KC4qKSIpKSBvciBvcy5nZXRlbnYoJ0dJVF9BVVRIT1JfRU1BSUwnKSwKICAgICAgICAgICAgJ2NvbW1pdHRlcl9uYW1lJzogcGFyc2UocmUuY29tcGlsZSgiQ09NTUlUVEVSX05BTUU6KC4qKSIpKSBvciBvcy5nZXRlbnYoJ0dJVF9DT01NSVRURVJfTkFNRScpLAogICAgICAgICAgICAnY29tbWl0dGVyX2VtYWlsJzogcGFyc2UocmUuY29tcGlsZSgiQ09NTUlUVEVSX0VNQUlMOiguKikiKSkgb3Igb3MuZ2V0ZW52KCdHSVRfQ09NTUlUVEVSX0VNQUlMJyksCiAgICAgICAgfQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGNvbW1pdF9zaGEoc2VsZik6CiAgICAgICAgIyBGaXJzdCwgcGVyY3kgZW52IHZhci4KICAgICAgICBpZiBvcy5nZXRlbnYoJ1BFUkNZX0NPTU1JVCcpOgogICAgICAgICAgICByZXR1cm4gb3MuZ2V0ZW52KCdQRVJDWV9DT01NSVQnKQogICAgICAgICMgU2Vjb25kLCBmcm9tIHRoZSBDSSBlbnZpcm9ubWVudC4KICAgICAgICBpZiBzZWxmLl9yZWFsX2VudiBhbmQgaGFzYXR0cihzZWxmLl9yZWFsX2VudiwgJ2NvbW1pdF9zaGEnKToKICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWxfZW52LmNvbW1pdF9zaGEKCiAgICBAcHJvcGVydHkKICAgIGRlZiB0YXJnZXRfY29tbWl0X3NoYShzZWxmKToKICAgICAgICBpZiBvcy5nZXRlbnYoJ1BFUkNZX1RBUkdFVF9DT01NSVQnKToKICAgICAgICAgICAgcmV0dXJuIG9zLmdldGVudignUEVSQ1lfVEFSR0VUX0NPTU1JVCcpCiAgICAgICAgcmV0dXJuIE5vbmUKCiAgICBAcHJvcGVydHkKICAgIGRlZiBwYXJhbGxlbF9ub25jZShzZWxmKToKICAgICAgICBpZiBvcy5nZXRlbnYoJ1BFUkNZX1BBUkFMTEVMX05PTkNFJyk6CiAgICAgICAgICByZXR1cm4gb3MuZ2V0ZW52KCdQRVJDWV9QQVJBTExFTF9OT05DRScpCiAgICAgICAgaWYgc2VsZi5fcmVhbF9lbnYgYW5kIGhhc2F0dHIoc2VsZi5fcmVhbF9lbnYsICdwYXJhbGxlbF9ub25jZScpOgogICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF9lbnYucGFyYWxsZWxfbm9uY2UKCiAgICBAcHJvcGVydHkKICAgIGRlZiBwYXJhbGxlbF90b3RhbF9zaGFyZHMoc2VsZik6CiAgICAgICAgaWYgb3MuZ2V0ZW52KCdQRVJDWV9QQVJBTExFTF9UT1RBTCcpOgogICAgICAgICAgICByZXR1cm4gaW50KG9zLmdldGVudignUEVSQ1lfUEFSQUxMRUxfVE9UQUwnKSkKICAgICAgICBpZiBzZWxmLl9yZWFsX2VudiBhbmQgaGFzYXR0cihzZWxmLl9yZWFsX2VudiwgJ3BhcmFsbGVsX3RvdGFsX3NoYXJkcycpOgogICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF9lbnYucGFyYWxsZWxfdG90YWxfc2hhcmRzCgogICAgZGVmIF9yYXdfZ2l0X291dHB1dChzZWxmLCBhcmdzKToKICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbigKICAgICAgICAgICAgWydnaXQnXSArIGFyZ3MsCiAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgIHNoZWxsPUZhbHNlCiAgICAgICAgKQogICAgICAgIHJldHVybiBwcm9jZXNzLnN0ZG91dC5yZWFkKCkuc3RyaXAoKS5kZWNvZGUoJ3V0Zi04JykKCiAgICBkZWYgX3Jhd19jb21taXRfb3V0cHV0KHNlbGYsIGNvbW1pdF9zaGEpOgogICAgICAgICMgTWFrZSBzdXJlIGNvbW1pdF9zaGEgaXMgb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyB0byBwcmV2ZW50IGNvbW1hbmQgaW5qZWN0aW9uLgogICAgICAgIGlmIG5vdCBjb21taXRfc2hhIG9yIGxlbihjb21taXRfc2hhKSA+IDEwMCBvciBub3QgY29tbWl0X3NoYS5pc2FsbnVtKCk6CiAgICAgICAgICAgIHJldHVybiAnJwoKICAgICAgICBhcmdzID0gWydzaG93JywgY29tbWl0X3NoYSwgJy0tcXVpZXQnLCAnLS1mb3JtYXQ9IicgKyBHSVRfQ09NTUlUX0ZPUk1BVCArICciJ107CiAgICAgICAgcmV0dXJuIHNlbGYuX3Jhd19naXRfb3V0cHV0KGFyZ3MpCgogICAgZGVmIF9naXRfY29tbWl0X291dHB1dChzZWxmKToKICAgICAgICByYXdfZ2l0X291dHB1dCA9ICcnCiAgICAgICAgIyBUcnkgZ2V0dGluZyBjb21taXQgZGF0YSBmcm9tIGNvbW1pdF9zaGEgc2V0IGJ5IGVudmlyb25tZW50IHZhcmlhYmxlcwogICAgICAgIGlmIHNlbGYuY29tbWl0X3NoYToKICAgICAgICAgIHJhd19naXRfb3V0cHV0ID0gc2VsZi5fcmF3X2NvbW1pdF9vdXRwdXQoc2VsZi5jb21taXRfc2hhKQoKICAgICAgICAjIElmIHRoZXJlJ3Mgbm8gcmF3X2dpdF9vdXRwdXQsIGl0IHByb2JhYmx5IG1lYW5zIHRoZXJlJ3Mgbm90IGEgc2hhLCBzbyB0cnkgYEhFQURgCiAgICAgICAgaWYgbm90IHJhd19naXRfb3V0cHV0OgogICAgICAgICAgcmF3X2dpdF9vdXRwdXQgPSBzZWxmLl9yYXdfY29tbWl0X291dHB1dCgnSEVBRCcpCgogICAgICAgIHJldHVybiByYXdfZ2l0X291dHB1dAoKICAgIGRlZiBfcmF3X2JyYW5jaF9vdXRwdXQoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX3Jhd19naXRfb3V0cHV0KFsncmV2LXBhcnNlJywgJy0tYWJicmV2LXJlZicsICdIRUFEJ10pCgogICAgZGVmIF9nZXRfb3JpZ2luX3VybChzZWxmKToKICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbigKICAgICAgICAgICAgJ2dpdCBjb25maWcgLS1nZXQgcmVtb3RlLm9yaWdpbi51cmwnLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzaGVsbD1UcnVlKQogICAgICAgIHJldHVybiBwcm9jZXNzLnN0ZG91dC5yZWFkKCkuc3RyaXAoKS5kZWNvZGUoJ3V0Zi04JykKCgoKY2xhc3MgVHJhdmlzRW52aXJvbm1lbnQob2JqZWN0KToKICAgIEBwcm9wZXJ0eQogICAgZGVmIGN1cnJlbnRfY2koc2VsZik6CiAgICAgICAgcmV0dXJuICd0cmF2aXMnCgogICAgQHByb3BlcnR5CiAgICBkZWYgcHVsbF9yZXF1ZXN0X251bWJlcihzZWxmKToKICAgICAgICBwcl9udW0gPSBvcy5nZXRlbnYoJ1RSQVZJU19QVUxMX1JFUVVFU1QnKQogICAgICAgIGlmIHByX251bSAhPSAnZmFsc2UnOgogICAgICAgICAgICByZXR1cm4gcHJfbnVtCgogICAgQHByb3BlcnR5CiAgICBkZWYgYnJhbmNoKHNlbGYpOgogICAgICAgIGlmIHNlbGYucHVsbF9yZXF1ZXN0X251bWJlciBhbmQgb3MuZ2V0ZW52KCdUUkFWSVNfUFVMTF9SRVFVRVNUX0JSQU5DSCcpOgogICAgICAgICAgICByZXR1cm4gb3MuZ2V0ZW52KCdUUkFWSVNfUFVMTF9SRVFVRVNUX0JSQU5DSCcpCiAgICAgICAgcmV0dXJuIG9zLmdldGVudignVFJBVklTX0JSQU5DSCcpCgogICAgQHByb3BlcnR5CiAgICBkZWYgY29tbWl0X3NoYShzZWxmKToKICAgICAgICByZXR1cm4gb3MuZ2V0ZW52KCdUUkFWSVNfQ09NTUlUJykKCiAgICBAcHJvcGVydHkKICAgIGRlZiBwYXJhbGxlbF9ub25jZShzZWxmKToKICAgICAgICByZXR1cm4gb3MuZ2V0ZW52KCdUUkFWSVNfQlVJTERfTlVNQkVSJykKCiAgICBAcHJvcGVydHkKICAgIGRlZiBwYXJhbGxlbF90b3RhbF9zaGFyZHMoc2VsZik6CiAgICAgICAgaWYgb3MuZ2V0ZW52KCdDSV9OT0RFX1RPVEFMJywgJycpLmlzZGlnaXQoKToKICAgICAgICAgICAgcmV0dXJuIGludChvcy5nZXRlbnYoJ0NJX05PREVfVE9UQUwnKSkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmNsYXNzIEplbmtpbnNFbnZpcm9ubWVudChvYmplY3QpOgogICAgQHByb3BlcnR5CiAgICBkZWYgY3VycmVudF9jaShzZWxmKToKPHxmaW1fZW5kfD4="]
["4167fc5087660b92310dd5765a38814e25d24d13-1","4167fc5087660b92310dd5765a38814e25d24d13","PHxmaW1fcHJlZml4fD4KZnJvbSBsZWRnZXIuc2V0dGluZ3NfYmFzZSBpbXBvcnQgKgpmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKClJPT1RfVVJMQ09ORiA9ICdwYXJrc3RheS51cmxzJwpTSVRFX0lEID0gMQoKU1RBVElDX1JPT1QgPSBvcy5wYXRoLmpvaW4oQkFTRV9ESVIsICdzdGF0aWNmaWxlc19wcycpCgojIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSBleHBpcmluZyBhIHRlbXBvcmFyeSBib29raW5nCkJPT0tJTkdfVElNRU9VVCA9IDEyMDAKCklOU1RBTExFRF9BUFBTICs9IFsKICAgICdib290c3RyYXAzJywKICAgICdwYXJrc3RheScsCiAgICAndGFnZ2l0JywKICAgICdyZXN0X2ZyYW1ld29yaycsCiAgICAncmVzdF9mcmFtZXdvcmtfZ2lzJwpdCgpNSURETEVXQVJFX0NMQVNTRVMgKz0gWwogICAgJ3BhcmtzdGF5Lm1pZGRsZXdhcmUuQm9va2luZ1RpbWVyTWlkZGxld2FyZScKXQoKIyBtYXhpbXVtIG51bWJlciBvZiBkYXlzIGFsbG93ZWQgZm9yIGEgYm9va2luZwpQU19NQVhfQk9PS0lOR19MRU5HVEggPSAyOAoKIyBtaW5pbXVtIG51bWJlciBvZiByZW1haW5pbmcgY2FtcHNpdGVzIHRvIHRyaWdnZXIgYW4gYXZhaWxhaWJsaXR5IHdhcm5pbmcKUFNfQ0FNUFNJVEVfQ09VTlRfV0FSTklORyA9IDEwCgojIG51bWJlciBvZiBkYXlzIGJlZm9yZSBjbGVhcmluZyB1biB1bnBhaWQgYm9va2luZwpQU19VTlBBSURfQk9PS0lOR19MQVBTRV9EQVlTID0gNQoKV1NHSV9BUFBMSUNBVElPTiA9ICdwYXJrc3RheS53c2dpLmFwcGxpY2F0aW9uJwoKUkVTVF9GUkFNRVdPUksgPSB7CiAgICAnREVGQVVMVF9QRVJNSVNTSU9OX0NMQVNTRVMnOiAoCiAgICAgICAgJ3BhcmtzdGF5LnBlcm1zLk9mZmljZXJQZXJtaXNzaW9uJywKICAgICkKfQoKIyBkaXNhYmxlIERqYW5nbyBSRVNUIEZyYW1ld29yayBVSSBvbiBwcm9kCmlmIG5vdCBERUJVRzoKICAgIFJFU1RfRlJBTUVXT1JLWydERUZBVUxUX1JFTkRFUkVSX0NMQVNTRVMnXT0oJ3Jlc3RfZnJhbWV3b3JrLnJlbmRlcmVycy5KU09OUmVuZGVyZXInLCkKZWxzZToKICAgIFJFU1RfRlJBTUVXT1JLWydERUZBVUxUX1JFTkRFUkVSX0NMQVNTRVMnXT0oJ3Jlc3RfZnJhbWV3b3JrLnJlbmRlcmVycy5KU09OUmVuZGVyZXInLCdyZXN0X2ZyYW1ld29ya19jc3YucmVuZGVyZXJzLkNTVlJlbmRlcmVyJykKCgpURU1QTEFURVNbMF1bJ0RJUlMnXS5hcHBlbmQob3MucGF0aC5qb2luKEJBU0VfRElSLCAncGFya3N0YXknLCAndGVtcGxhdGVzJykpClRFTVBMQVRFU1swXVsnT1BUSU9OUyddWydjb250ZXh0X3Byb2Nlc3NvcnMnXS5hcHBlbmQoJ3BhcmtzdGF5LmNvbnRleHRfcHJvY2Vzc29ycy5wYXJrc3RheV91cmwnKQonJydCT09UU1RSQVAzID0gewogICAgJ2pxdWVyeV91cmwnOiAnLy9zdGF0aWMuZHBhdy53YS5nb3YuYXUvc3RhdGljL2xpYnMvanF1ZXJ5LzIuMi4xL2pxdWVyeS5taW4uanMnLAogICAgJ2Jhc2VfdXJsJzogJy8vc3RhdGljLmRwYXcud2EuZ292LmF1L3N0YXRpYy9saWJzL3R3aXR0ZXItYm9vdHN0cmFwLzMuMy42LycsCiAgICAnY3NzX3VybCc6IE5vbmUsCiAgICAndGhlbWVfdXJsJzogTm9uZSwKICAgICdqYXZhc2NyaXB0X3VybCc6IE5vbmUsCiAgICAnamF2YXNjcmlwdF9pbl9oZWFkJzogRmFsc2UsCiAgICAnaW5jbHVkZV9qcXVlcnknOiBGYWxzZSwKICAgICdyZXF1aXJlZF9jc3NfY2xhc3MnOiAncmVxdWlyZWQtZm9ybS1maWVsZCcsCiAgICAnc2V0X3BsYWNlaG9sZGVyJzogRmFsc2UsCn0nJycKQ0FDSEVTID0gewogICAgJ2RlZmF1bHQnOiB7CiAgICAgICAgJ0JBQ0tFTkQnOiAnZGphbmdvLmNvcmUuY2FjaGUuYmFja2VuZHMuZmlsZWJhc2VkLkZpbGVCYXNlZENhY2hlJywKICAgICAgICAnTE9DQVRJT04nOiBvcy5wYXRoLmpvaW4oQkFTRV9ESVIsICdwYXJrc3RheScsICdjYWNoZScpLAogICAgfQp9ClNUQVRJQ0ZJTEVTX0RJUlMuYXBwZW5kKG9zLnBhdGguam9pbihvcy5wYXRoLmpvaW4oQkFTRV9ESVIsICdwYXJrc3RheScsICdzdGF0aWMnKSkpCgoKQlBBWV9BTExPV0VEID0gZW52KCdCUEFZX0FMTE9XRUQnLEZhbHNlKQoKT1NDQVJfQkFTS0VUX0NPT0tJRV9PUEVOID0gJ3BhcmtzdGF5X2Jhc2tldCcKCgpDUk9OX0NMQVNTRVMgPSBbCiAgICAjJ3BhcmtzdGF5LmNyb24uU2VuZEJvb2tpbmdzQ29uZmlybWF0aW9uQ3JvbkpvYicsCiAgICAncGFya3N0YXkuY3Jvbi5VbnBhaWRCb29raW5nc1JlcG9ydENyb25Kb2InLAogICAgJ3BhcmtzdGF5LmNyb24uT3JhY2xlSW50ZWdyYXRpb25Dcm9uSm9iJywKXQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgojIEFkZGl0aW9uYWwgbG9nZ2luZyBmb3IgcGFya3N0YXkKTE9HR0lOR1snaGFuZGxlcnMnXVsnYm9va2luZ19jaGVja291dCddID0gewogICAgICAgICAgICAnbGV2ZWwnOiAnSU5GTycsCjx8ZmltX2VuZHw+"]
["4167fc5087660b92310dd5765a38814e25d24d13-2","4167fc5087660b92310dd5765a38814e25d24d13","PHxmaW1fcHJlZml4fD4KZnJvbSBsZWRnZXIuc2V0dGluZ3NfYmFzZSBpbXBvcnQgKgpmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKClJPT1RfVVJMQ09ORiA9ICdwYXJrc3RheS51cmxzJwpTSVRFX0lEID0gMQoKU1RBVElDX1JPT1QgPSBvcy5wYXRoLmpvaW4oQkFTRV9ESVIsICdzdGF0aWNmaWxlc19wcycpCgojIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSBleHBpcmluZyBhIHRlbXBvcmFyeSBib29raW5nCkJPT0tJTkdfVElNRU9VVCA9IDEyMDAKCklOU1RBTExFRF9BUFBTICs9IFsKICAgICdib290c3RyYXAzJywKICAgICdwYXJrc3RheScsCiAgICAndGFnZ2l0JywKICAgICdyZXN0X2ZyYW1ld29yaycsCiAgICAncmVzdF9mcmFtZXdvcmtfZ2lzJwpdCgpNSURETEVXQVJFX0NMQVNTRVMgKz0gWwogICAgJ3BhcmtzdGF5Lm1pZGRsZXdhcmUuQm9va2luZ1RpbWVyTWlkZGxld2FyZScKXQoKIyBtYXhpbXVtIG51bWJlciBvZiBkYXlzIGFsbG93ZWQgZm9yIGEgYm9va2luZwpQU19NQVhfQk9PS0lOR19MRU5HVEggPSAyOAoKIyBtaW5pbXVtIG51bWJlciBvZiByZW1haW5pbmcgY2FtcHNpdGVzIHRvIHRyaWdnZXIgYW4gYXZhaWxhaWJsaXR5IHdhcm5pbmcKUFNfQ0FNUFNJVEVfQ09VTlRfV0FSTklORyA9IDEwCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgbnVtYmVyIG9mIGRheXMgYmVmb3JlIGNsZWFyaW5nIHVuIHVucGFpZCBib29raW5nClBTX1VOUEFJRF9CT09LSU5HX0xBUFNFX0RBWVMgPSA1CgpXU0dJX0FQUExJQ0FUSU9OID0gJ3BhcmtzdGF5LndzZ2kuYXBwbGljYXRpb24nCjx8ZmltX2VuZHw+"]
["4167fc5087660b92310dd5765a38814e25d24d13-3","4167fc5087660b92310dd5765a38814e25d24d13","PHxmaW1fcHJlZml4fD4KZnJvbSBsZWRnZXIuc2V0dGluZ3NfYmFzZSBpbXBvcnQgKgpmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKClJPT1RfVVJMQ09ORiA9ICdwYXJrc3RheS51cmxzJwpTSVRFX0lEID0gMQoKU1RBVElDX1JPT1QgPSBvcy5wYXRoLmpvaW4oQkFTRV9ESVIsICdzdGF0aWNmaWxlc19wcycpCgojIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSBleHBpcmluZyBhIHRlbXBvcmFyeSBib29raW5nCkJPT0tJTkdfVElNRU9VVCA9IDEyMDAKCklOU1RBTExFRF9BUFBTICs9IFsKICAgICdib290c3RyYXAzJywKICAgICdwYXJrc3RheScsCiAgICAndGFnZ2l0JywKICAgICdyZXN0X2ZyYW1ld29yaycsCiAgICAncmVzdF9mcmFtZXdvcmtfZ2lzJwpdCgpNSURETEVXQVJFX0NMQVNTRVMgKz0gWwogICAgJ3BhcmtzdGF5Lm1pZGRsZXdhcmUuQm9va2luZ1RpbWVyTWlkZGxld2FyZScKXQoKIyBtYXhpbXVtIG51bWJlciBvZiBkYXlzIGFsbG93ZWQgZm9yIGEgYm9va2luZwpQU19NQVhfQk9PS0lOR19MRU5HVEggPSAyOAoKIyBtaW5pbXVtIG51bWJlciBvZiByZW1haW5pbmcgY2FtcHNpdGVzIHRvIHRyaWdnZXIgYW4gYXZhaWxhaWJsaXR5IHdhcm5pbmcKUFNfQ0FNUFNJVEVfQ09VTlRfV0FSTklORyA9IDEwCgojIG51bWJlciBvZiBkYXlzIGJlZm9yZSBjbGVhcmluZyB1biB1bnBhaWQgYm9va2luZwpQU19VTlBBSURfQk9PS0lOR19MQVBTRV9EQVlTID0gNQoKV1NHSV9BUFBMSUNBVElPTiA9ICdwYXJrc3RheS53c2dpLmFwcGxpY2F0aW9uJwoKUkVTVF9GUkFNRVdPUksgPSB7CiAgICAnREVGQVVMVF9QRVJNSVNTSU9OX0NMQVNTRVMnOiAoCiAgICAgICAgJ3BhcmtzdGF5LnBlcm1zLk9mZmljZXJQZXJtaXNzaW9uJywKICAgICkKfQoKIyBkaXNhYmxlIERqYW5nbyBSRVNUIEZyYW1ld29yayBVSSBvbiBwcm9kCmlmIG5vdCBERUJVRzoKICAgIFJFU1RfRlJBTUVXT1JLWydERUZBVUxUX1JFTkRFUkVSX0NMQVNTRVMnXT0oJ3Jlc3RfZnJhbWV3b3JrLnJlbmRlcmVycy5KU09OUmVuZGVyZXInLCkKZWxzZToKICAgIFJFU1RfRlJBTUVXT1JLWydERUZBVUxUX1JFTkRFUkVSX0NMQVNTRVMnXT0oJ3Jlc3RfZnJhbWV3b3JrLnJlbmRlcmVycy5KU09OUmVuZGVyZXInLCdyZXN0X2ZyYW1ld29ya19jc3YucmVuZGVyZXJzLkNTVlJlbmRlcmVyJykKCgpURU1QTEFURVNbMF1bJ0RJUlMnXS5hcHBlbmQob3MucGF0aC5qb2luKEJBU0VfRElSLCAncGFya3N0YXknLCAndGVtcGxhdGVzJykpClRFTVBMQVRFU1swXVsnT1BUSU9OUyddWydjb250ZXh0X3Byb2Nlc3NvcnMnXS5hcHBlbmQoJ3BhcmtzdGF5LmNvbnRleHRfcHJvY2Vzc29ycy5wYXJrc3RheV91cmwnKQonJydCT09UU1RSQVAzID0gewogICAgJ2pxdWVyeV91cmwnOiAnLy9zdGF0aWMuZHBhdy53YS5nb3YuYXUvc3RhdGljL2xpYnMvanF1ZXJ5LzIuMi4xL2pxdWVyeS5taW4uanMnLAogICAgJ2Jhc2VfdXJsJzogJy8vc3RhdGljLmRwYXcud2EuZ292LmF1L3N0YXRpYy9saWJzL3R3aXR0ZXItYm9vdHN0cmFwLzMuMy42LycsCiAgICAnY3NzX3VybCc6IE5vbmUsCiAgICAndGhlbWVfdXJsJzogTm9uZSwKICAgICdqYXZhc2NyaXB0X3VybCc6IE5vbmUsCjx8ZmltX2hvbGV8Pgp9JycnCkNBQ0hFUyA9IHsKICAgICdkZWZhdWx0JzogewogICAgICAgICdCQUNLRU5EJzogJ2RqYW5nby5jb3JlLmNhY2hlLmJhY2tlbmRzLmZpbGViYXNlZC5GaWxlQmFzZWRDYWNoZScsCiAgICAgICAgJ0xPQ0FUSU9OJzogb3MucGF0aC5qb2luKEJBU0VfRElSLCAncGFya3N0YXknLCAnY2FjaGUnKSwKICAgIH0KfQpTVEFUSUNGSUxFU19ESVJTLmFwcGVuZChvcy5wYXRoLmpvaW4ob3MucGF0aC5qb2luKEJBU0VfRElSLCAncGFya3N0YXknLCAnc3RhdGljJykpKQoKCkJQQVlfQUxMT1dFRCA9IGVudignQlBBWV9BTExPV0VEJyxGYWxzZSkKCk9TQ0FSX0JBU0tFVF9DT09LSUVfT1BFTiA9ICdwYXJrc3RheV9iYXNrZXQnCgoKQ1JPTl9DTEFTU0VTID0gWwogICAgIydwYXJrc3RheS5jcm9uLlNlbmRCb29raW5nc0NvbmZpcm1hdGlvbkNyb25Kb2InLAogICAgJ3BhcmtzdGF5LmNyb24uVW5wYWlkQm9va2luZ3NSZXBvcnRDcm9uSm9iJywKICAgICdwYXJrc3RheS5jcm9uLk9yYWNsZUludGVncmF0aW9uQ3JvbkpvYicsCl0KCiMgQWRkaXRpb25hbCBsb2dnaW5nIGZvciBwYXJrc3RheQpMT0dHSU5HWydoYW5kbGVycyddWydib29raW5nX2NoZWNrb3V0J10gPSB7CiAgICAgICAgICAgICdsZXZlbCc6ICdJTkZPJywKICAgICAgICAgICAgJ2NsYXNzJzogJ2xvZ2dpbmcuaGFuZGxlcnMuUm90YXRpbmdGaWxlSGFuZGxlcicsCiAgICAgICAgICAgICdmaWxlbmFtZSc6IG9zLnBhdGguam9pbihCQVNFX0RJUiwgJ2xvZ3MnLCAncGFya3N0YXlfYm9va2luZ19jaGVja291dC5sb2cnKSwKICAgICAgICAgICAgJ2Zvcm1hdHRlcic6ICd2ZXJib3NlJywKICAgICAgICAgICAgJ21heEJ5dGVzJzogNTI0Mjg4MAogICAgICAgIH0KTE9HR0lOR1snbG9nZ2VycyddWydib29raW5nX2NoZWNrb3V0J10gPSB7CiAgICAgICAgICAgICdoYW5kbGVycyc6IFsnYm9va2luZ19jaGVja291dCddLAogICAgICAgICAgICAnbGV2ZWwnOiAnSU5GTycKICAgICAgICB9CgpDQU1QR1JPVU5EU19FTUFJTCA9IGVudignQ0FNUEdST1VORFNfRU1BSUwnLCdwYXJrc3RheWJvb2tpbmdzQGRiY2Eud2EuZ292LmF1JykKRVhQTE9SRV9QQVJLU19VUkwgPSBlbnYoJ0VYUExPUkVfUEFSS1NfVVJMJywnaHR0cHM6Ly9wYXJrcy1vaW0uZHBhdy53YS5nb3YuYXUnKQpQQVJLU1RBWV9FWFRFUk5BTF9VUkwgPSBlbnYoJ1BBUktTVEFZX0VYVEVSTkFMX1VSTCcsJ2h0dHBzOi8vcGFya3N0YXkuZGJjYS53YS5nb3YuYXUnKQpERVZfU1RBVElDID0gZW52KCdERVZfU1RBVElDJyxGYWxzZSkKREVWX1NUQVRJQ19VUkwgPSBlbnYoJ0RFVl9TVEFUSUNfVVJMJykKPHxmaW1fc3VmZml4fD4KICAgICdqYXZhc2NyaXB0X2luX2hlYWQnOiBGYWxzZSwKICAgICdpbmNsdWRlX2pxdWVyeSc6IEZhbHNlLAogICAgJ3JlcXVpcmVkX2Nzc19jbGFzcyc6ICdyZXF1aXJlZC1mb3JtLWZpZWxkJywKICAgICdzZXRfcGxhY2Vob2xkZXInOiBGYWxzZSwKPHxmaW1fZW5kfD4="]
["4167fc5087660b92310dd5765a38814e25d24d13-4","4167fc5087660b92310dd5765a38814e25d24d13","PHxmaW1fcHJlZml4fD4KZnJvbSBsZWRnZXIuc2V0dGluZ3NfYmFzZSBpbXBvcnQgKgpmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKClJPT1RfVVJMQ09ORiA9ICdwYXJrc3RheS51cmxzJwpTSVRFX0lEID0gMQoKU1RBVElDX1JPT1QgPSBvcy5wYXRoLmpvaW4oQkFTRV9ESVIsICdzdGF0aWNmaWxlc19wcycpCgojIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSBleHBpcmluZyBhIHRlbXBvcmFyeSBib29raW5nCkJPT0tJTkdfVElNRU9VVCA9IDEyMDAKCklOU1RBTExFRF9BUFBTICs9IFsKICAgICdib290c3RyYXAzJywKICAgICdwYXJrc3RheScsCiAgICAndGFnZ2l0JywKICAgICdyZXN0X2ZyYW1ld29yaycsCiAgICAncmVzdF9mcmFtZXdvcmtfZ2lzJwpdCgo8fGZpbV9ob2xlfD4KIyBtYXhpbXVtIG51bWJlciBvZiBkYXlzIGFsbG93ZWQgZm9yIGEgYm9va2luZwpQU19NQVhfQk9PS0lOR19MRU5HVEggPSAyOAoKIyBtaW5pbXVtIG51bWJlciBvZiByZW1haW5pbmcgY2FtcHNpdGVzIHRvIHRyaWdnZXIgYW4gYXZhaWxhaWJsaXR5IHdhcm5pbmcKUFNfQ0FNUFNJVEVfQ09VTlRfV0FSTklORyA9IDEwCgojIG51bWJlciBvZiBkYXlzIGJlZm9yZSBjbGVhcmluZyB1biB1bnBhaWQgYm9va2luZwpQU19VTlBBSURfQk9PS0lOR19MQVBTRV9EQVlTID0gNQoKV1NHSV9BUFBMSUNBVElPTiA9ICdwYXJrc3RheS53c2dpLmFwcGxpY2F0aW9uJwoKUkVTVF9GUkFNRVdPUksgPSB7CiAgICAnREVGQVVMVF9QRVJNSVNTSU9OX0NMQVNTRVMnOiAoCiAgICAgICAgJ3BhcmtzdGF5LnBlcm1zLk9mZmljZXJQZXJtaXNzaW9uJywKICAgICkKfQoKIyBkaXNhYmxlIERqYW5nbyBSRVNUIEZyYW1ld29yayBVSSBvbiBwcm9kCmlmIG5vdCBERUJVRzoKICAgIFJFU1RfRlJBTUVXT1JLWydERUZBVUxUX1JFTkRFUkVSX0NMQVNTRVMnXT0oJ3Jlc3RfZnJhbWV3b3JrLnJlbmRlcmVycy5KU09OUmVuZGVyZXInLCkKZWxzZToKICAgIFJFU1RfRlJBTUVXT1JLWydERUZBVUxUX1JFTkRFUkVSX0NMQVNTRVMnXT0oJ3Jlc3RfZnJhbWV3b3JrLnJlbmRlcmVycy5KU09OUmVuZGVyZXInLCdyZXN0X2ZyYW1ld29ya19jc3YucmVuZGVyZXJzLkNTVlJlbmRlcmVyJykKCgpURU1QTEFURVNbMF1bJ0RJUlMnXS5hcHBlbmQob3MucGF0aC5qb2luKEJBU0VfRElSLCAncGFya3N0YXknLCAndGVtcGxhdGVzJykpClRFTVBMQVRFU1swXVsnT1BUSU9OUyddWydjb250ZXh0X3Byb2Nlc3NvcnMnXS5hcHBlbmQoJ3BhcmtzdGF5LmNvbnRleHRfcHJvY2Vzc29ycy5wYXJrc3RheV91cmwnKQonJydCT09UU1RSQVAzID0gewogICAgJ2pxdWVyeV91cmwnOiAnLy9zdGF0aWMuZHBhdy53YS5nb3YuYXUvc3RhdGljL2xpYnMvanF1ZXJ5LzIuMi4xL2pxdWVyeS5taW4uanMnLAogICAgJ2Jhc2VfdXJsJzogJy8vc3RhdGljLmRwYXcud2EuZ292LmF1L3N0YXRpYy9saWJzL3R3aXR0ZXItYm9vdHN0cmFwLzMuMy42LycsCiAgICAnY3NzX3VybCc6IE5vbmUsCiAgICAndGhlbWVfdXJsJzogTm9uZSwKICAgICdqYXZhc2NyaXB0X3VybCc6IE5vbmUsCiAgICAnamF2YXNjcmlwdF9pbl9oZWFkJzogRmFsc2UsCiAgICAnaW5jbHVkZV9qcXVlcnknOiBGYWxzZSwKICAgICdyZXF1aXJlZF9jc3NfY2xhc3MnOiAncmVxdWlyZWQtZm9ybS1maWVsZCcsCiAgICAnc2V0X3BsYWNlaG9sZGVyJzogRmFsc2UsCn0nJycKQ0FDSEVTID0gewogICAgJ2RlZmF1bHQnOiB7CiAgICAgICAgJ0JBQ0tFTkQnOiAnZGphbmdvLmNvcmUuY2FjaGUuYmFja2VuZHMuZmlsZWJhc2VkLkZpbGVCYXNlZENhY2hlJywKICAgICAgICAnTE9DQVRJT04nOiBvcy5wYXRoLmpvaW4oQkFTRV9ESVIsICdwYXJrc3RheScsICdjYWNoZScpLAogICAgfQp9ClNUQVRJQ0ZJTEVTX0RJUlMuYXBwZW5kKG9zLnBhdGguam9pbihvcy5wYXRoLmpvaW4oQkFTRV9ESVIsICdwYXJrc3RheScsICdzdGF0aWMnKSkpCgoKQlBBWV9BTExPV0VEID0gZW52KCdCUEFZX0FMTE9XRUQnLEZhbHNlKQoKT1NDQVJfQkFTS0VUX0NPT0tJRV9PUEVOID0gJ3BhcmtzdGF5X2Jhc2tldCcKCgpDUk9OX0NMQVNTRVMgPSBbCiAgICAjJ3BhcmtzdGF5LmNyb24uU2VuZEJvb2tpbmdzQ29uZmlybWF0aW9uQ3JvbkpvYicsCiAgICAncGFya3N0YXkuY3Jvbi5VbnBhaWRCb29raW5nc1JlcG9ydENyb25Kb2InLAogICAgJ3BhcmtzdGF5LmNyb24uT3JhY2xlSW50ZWdyYXRpb25Dcm9uSm9iJywKXQoKIyBBZGRpdGlvbmFsIGxvZ2dpbmcgZm9yIHBhcmtzdGF5CkxPR0dJTkdbJ2hhbmRsZXJzJ11bJ2Jvb2tpbmdfY2hlY2tvdXQnXSA9IHsKICAgICAgICAgICAgJ2xldmVsJzogJ0lORk8nLAogICAgICAgICAgICAnY2xhc3MnOiAnbG9nZ2luZy5oYW5kbGVycy5Sb3RhdGluZ0ZpbGVIYW5kbGVyJywKICAgICAgICAgICAgJ2ZpbGVuYW1lJzogb3MucGF0aC5qb2luKEJBU0VfRElSLCAnbG9ncycsICdwYXJrc3RheV9ib29raW5nX2NoZWNrb3V0LmxvZycpLAogICAgICAgICAgICAnZm9ybWF0dGVyJzogJ3ZlcmJvc2UnLAogICAgICAgICAgICAnbWF4Qnl0ZXMnOiA1MjQyODgwCiAgICAgICAgfQpMT0dHSU5HWydsb2dnZXJzJ11bJ2Jvb2tpbmdfY2hlY2tvdXQnXSA9IHsKICAgICAgICAgICAgJ2hhbmRsZXJzJzogWydib29raW5nX2NoZWNrb3V0J10sCiAgICAgICAgICAgICdsZXZlbCc6ICdJTkZPJwogICAgICAgIH0KCkNBTVBHUk9VTkRTX0VNQUlMID0gZW52KCdDQU1QR1JPVU5EU19FTUFJTCcsJ3BhcmtzdGF5Ym9va2luZ3NAZGJjYS53YS5nb3YuYXUnKQpFWFBMT1JFX1BBUktTX1VSTCA9IGVudignRVhQTE9SRV9QQVJLU19VUkwnLCdodHRwczovL3BhcmtzLW9pbS5kcGF3LndhLmdvdi5hdScpClBBUktTVEFZX0VYVEVSTkFMX1VSTCA9IGVudignUEFSS1NUQVlfRVhURVJOQUxfVVJMJywnaHR0cHM6Ly9wYXJrc3RheS5kYmNhLndhLmdvdi5hdScpCkRFVl9TVEFUSUMgPSBlbnYoJ0RFVl9TVEFUSUMnLEZhbHNlKQpERVZfU1RBVElDX1VSTCA9IGVudignREVWX1NUQVRJQ19VUkwnKQo8fGZpbV9zdWZmaXh8PgpNSURETEVXQVJFX0NMQVNTRVMgKz0gWwogICAgJ3BhcmtzdGF5Lm1pZGRsZXdhcmUuQm9va2luZ1RpbWVyTWlkZGxld2FyZScKXQoKPHxmaW1fZW5kfD4="]
["4167fc5087660b92310dd5765a38814e25d24d13-5","4167fc5087660b92310dd5765a38814e25d24d13","PHxmaW1fcHJlZml4fD4KZnJvbSBsZWRnZXIuc2V0dGluZ3NfYmFzZSBpbXBvcnQgKgpmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKClJPT1RfVVJMQ09ORiA9ICdwYXJrc3RheS51cmxzJwpTSVRFX0lEID0gMQoKU1RBVElDX1JPT1QgPSBvcy5wYXRoLmpvaW4oQkFTRV9ESVIsICdzdGF0aWNmaWxlc19wcycpCgojIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSBleHBpcmluZyBhIHRlbXBvcmFyeSBib29raW5nCkJPT0tJTkdfVElNRU9VVCA9IDEyMDAKCklOU1RBTExFRF9BUFBTICs9IFsKICAgICdib290c3RyYXAzJywKICAgICdwYXJrc3RheScsCiAgICAndGFnZ2l0JywKICAgICdyZXN0X2ZyYW1ld29yaycsCiAgICAncmVzdF9mcmFtZXdvcmtfZ2lzJwo8fGZpbV9ob2xlfD4KXQoKIyBtYXhpbXVtIG51bWJlciBvZiBkYXlzIGFsbG93ZWQgZm9yIGEgYm9va2luZwpQU19NQVhfQk9PS0lOR19MRU5HVEggPSAyOAoKIyBtaW5pbXVtIG51bWJlciBvZiByZW1haW5pbmcgY2FtcHNpdGVzIHRvIHRyaWdnZXIgYW4gYXZhaWxhaWJsaXR5IHdhcm5pbmcKUFNfQ0FNUFNJVEVfQ09VTlRfV0FSTklORyA9IDEwCgojIG51bWJlciBvZiBkYXlzIGJlZm9yZSBjbGVhcmluZyB1biB1bnBhaWQgYm9va2luZwpQU19VTlBBSURfQk9PS0lOR19MQVBTRV9EQVlTID0gNQoKV1NHSV9BUFBMSUNBVElPTiA9ICdwYXJrc3RheS53c2dpLmFwcGxpY2F0aW9uJwoKUkVTVF9GUkFNRVdPUksgPSB7CiAgICAnREVGQVVMVF9QRVJNSVNTSU9OX0NMQVNTRVMnOiAoCiAgICAgICAgJ3BhcmtzdGF5LnBlcm1zLk9mZmljZXJQZXJtaXNzaW9uJywKICAgICkKfQoKIyBkaXNhYmxlIERqYW5nbyBSRVNUIEZyYW1ld29yayBVSSBvbiBwcm9kCmlmIG5vdCBERUJVRzoKICAgIFJFU1RfRlJBTUVXT1JLWydERUZBVUxUX1JFTkRFUkVSX0NMQVNTRVMnXT0oJ3Jlc3RfZnJhbWV3b3JrLnJlbmRlcmVycy5KU09OUmVuZGVyZXInLCkKZWxzZToKICAgIFJFU1RfRlJBTUVXT1JLWydERUZBVUxUX1JFTkRFUkVSX0NMQVNTRVMnXT0oJ3Jlc3RfZnJhbWV3b3JrLnJlbmRlcmVycy5KU09OUmVuZGVyZXInLCdyZXN0X2ZyYW1ld29ya19jc3YucmVuZGVyZXJzLkNTVlJlbmRlcmVyJykKCgpURU1QTEFURVNbMF1bJ0RJUlMnXS5hcHBlbmQob3MucGF0aC5qb2luKEJBU0VfRElSLCAncGFya3N0YXknLCAndGVtcGxhdGVzJykpClRFTVBMQVRFU1swXVsnT1BUSU9OUyddWydjb250ZXh0X3Byb2Nlc3NvcnMnXS5hcHBlbmQoJ3BhcmtzdGF5LmNvbnRleHRfcHJvY2Vzc29ycy5wYXJrc3RheV91cmwnKQonJydCT09UU1RSQVAzID0gewogICAgJ2pxdWVyeV91cmwnOiAnLy9zdGF0aWMuZHBhdy53YS5nb3YuYXUvc3RhdGljL2xpYnMvanF1ZXJ5LzIuMi4xL2pxdWVyeS5taW4uanMnLAogICAgJ2Jhc2VfdXJsJzogJy8vc3RhdGljLmRwYXcud2EuZ292LmF1L3N0YXRpYy9saWJzL3R3aXR0ZXItYm9vdHN0cmFwLzMuMy42LycsCiAgICAnY3NzX3VybCc6IE5vbmUsCiAgICAndGhlbWVfdXJsJzogTm9uZSwKICAgICdqYXZhc2NyaXB0X3VybCc6IE5vbmUsCiAgICAnamF2YXNjcmlwdF9pbl9oZWFkJzogRmFsc2UsCiAgICAnaW5jbHVkZV9qcXVlcnknOiBGYWxzZSwKICAgICdyZXF1aXJlZF9jc3NfY2xhc3MnOiAncmVxdWlyZWQtZm9ybS1maWVsZCcsCiAgICAnc2V0X3BsYWNlaG9sZGVyJzogRmFsc2UsCn0nJycKQ0FDSEVTID0gewogICAgJ2RlZmF1bHQnOiB7CiAgICAgICAgJ0JBQ0tFTkQnOiAnZGphbmdvLmNvcmUuY2FjaGUuYmFja2VuZHMuZmlsZWJhc2VkLkZpbGVCYXNlZENhY2hlJywKICAgICAgICAnTE9DQVRJT04nOiBvcy5wYXRoLmpvaW4oQkFTRV9ESVIsICdwYXJrc3RheScsICdjYWNoZScpLAogICAgfQp9ClNUQVRJQ0ZJTEVTX0RJUlMuYXBwZW5kKG9zLnBhdGguam9pbihvcy5wYXRoLmpvaW4oQkFTRV9ESVIsICdwYXJrc3RheScsICdzdGF0aWMnKSkpCgoKQlBBWV9BTExPV0VEID0gZW52KCdCUEFZX0FMTE9XRUQnLEZhbHNlKQoKT1NDQVJfQkFTS0VUX0NPT0tJRV9PUEVOID0gJ3BhcmtzdGF5X2Jhc2tldCcKCgpDUk9OX0NMQVNTRVMgPSBbCiAgICAjJ3BhcmtzdGF5LmNyb24uU2VuZEJvb2tpbmdzQ29uZmlybWF0aW9uQ3JvbkpvYicsCiAgICAncGFya3N0YXkuY3Jvbi5VbnBhaWRCb29raW5nc1JlcG9ydENyb25Kb2InLAogICAgJ3BhcmtzdGF5LmNyb24uT3JhY2xlSW50ZWdyYXRpb25Dcm9uSm9iJywKXQoKIyBBZGRpdGlvbmFsIGxvZ2dpbmcgZm9yIHBhcmtzdGF5CkxPR0dJTkdbJ2hhbmRsZXJzJ11bJ2Jvb2tpbmdfY2hlY2tvdXQnXSA9IHsKICAgICAgICAgICAgJ2xldmVsJzogJ0lORk8nLAogICAgICAgICAgICAnY2xhc3MnOiAnbG9nZ2luZy5oYW5kbGVycy5Sb3RhdGluZ0ZpbGVIYW5kbGVyJywKICAgICAgICAgICAgJ2ZpbGVuYW1lJzogb3MucGF0aC5qb2luKEJBU0VfRElSLCAnbG9ncycsICdwYXJrc3RheV9ib29raW5nX2NoZWNrb3V0LmxvZycpLAogICAgICAgICAgICAnZm9ybWF0dGVyJzogJ3ZlcmJvc2UnLAogICAgICAgICAgICAnbWF4Qnl0ZXMnOiA1MjQyODgwCiAgICAgICAgfQpMT0dHSU5HWydsb2dnZXJzJ11bJ2Jvb2tpbmdfY2hlY2tvdXQnXSA9IHsKICAgICAgICAgICAgJ2hhbmRsZXJzJzogWydib29raW5nX2NoZWNrb3V0J10sCiAgICAgICAgICAgICdsZXZlbCc6ICdJTkZPJwogICAgICAgIH0KCkNBTVBHUk9VTkRTX0VNQUlMID0gZW52KCdDQU1QR1JPVU5EU19FTUFJTCcsJ3BhcmtzdGF5Ym9va2luZ3NAZGJjYS53YS5nb3YuYXUnKQpFWFBMT1JFX1BBUktTX1VSTCA9IGVudignRVhQTE9SRV9QQVJLU19VUkwnLCdodHRwczovL3BhcmtzLW9pbS5kcGF3LndhLmdvdi5hdScpClBBUktTVEFZX0VYVEVSTkFMX1VSTCA9IGVudignUEFSS1NUQVlfRVhURVJOQUxfVVJMJywnaHR0cHM6Ly9wYXJrc3RheS5kYmNhLndhLmdvdi5hdScpCkRFVl9TVEFUSUMgPSBlbnYoJ0RFVl9TVEFUSUMnLEZhbHNlKQpERVZfU1RBVElDX1VSTCA9IGVudignREVWX1NUQVRJQ19VUkwnKQo8fGZpbV9zdWZmaXh8PgpdCgpNSURETEVXQVJFX0NMQVNTRVMgKz0gWwogICAgJ3BhcmtzdGF5Lm1pZGRsZXdhcmUuQm9va2luZ1RpbWVyTWlkZGxld2FyZScKPHxmaW1fZW5kfD4="]
["99ccacbfc19fd99947d29fcb52a4d53e4b77ecdb-1","99ccacbfc19fd99947d29fcb52a4d53e4b77ecdb","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zLCBzeXMKCiMgTm8gRmlsZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmlmIGxlbihzeXMuYXJndikgPCAyOgogICAgcHJpbnQoIk11c3Qgc3VwcGx5IGZpbGUgbmFtZSEiKQogICAgZXhpdCgpCgo8fGZpbV9lbmR8Pg=="]
["99ccacbfc19fd99947d29fcb52a4d53e4b77ecdb-2","99ccacbfc19fd99947d29fcb52a4d53e4b77ecdb","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zLCBzeXMKCiMgTm8gRmlsZQppZiBsZW4oc3lzLmFyZ3YpIDwgMjoKICAgIHByaW50KCJNdXN0IHN1cHBseSBmaWxlIG5hbWUhIikKICAgIGV4aXQoKQoKIyBOT1RFOiB3aGVuIGFkZGluZyBmbGFncywgcG9zIDEgd2lsbCBiZSAtW3J8Zl0KIyAgICAgICBhbmQgcG9zIDIgd2lsbCBiZSBmaWxlIG5hbWUKCiMgRmlsZSBQYXRoCmZpbGVfcGF0aCA9IG9zLmdldGN3ZCgpICsgIi8iICsgc3lzLmFyZ3ZbMV0KCiMgRmlsZSBFeGlzdHMKaWYgb3MucGF0aC5leGlzdHMoZmlsZV9wYXRoKToKCiAgICAjIFJlbW92ZSBEaXJlY3RvcnkKICAgIGlmIG9zLnBhdGguaXNkaXIoZmlsZV9wYXRoKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIG9zLnJtZGlyKGZpbGVfcGF0aCkKICAgICAgICAjIE5PVEU6IGlmIGRpcmVjdG9yeSB3aXRoIGNvbnRlbnRzIHRoZW4gZG9uJ3QgZGVsZXRlIHVubGVzcyBmbGFncyBhcmUgcHJlc2VudAogICAgICAgICMgICAgICAgYW5kIGEgZGlmZmVyZW50IG1ldGhvZCBpcyByZXF1aXJlZAoKPHxmaW1fZW5kfD4="]
["99ccacbfc19fd99947d29fcb52a4d53e4b77ecdb-3","99ccacbfc19fd99947d29fcb52a4d53e4b77ecdb","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zLCBzeXMKCiMgTm8gRmlsZQppZiBsZW4oc3lzLmFyZ3YpIDwgMjoKICAgIHByaW50KCJNdXN0IHN1cHBseSBmaWxlIG5hbWUhIikKICAgIGV4aXQoKQoKIyBOT1RFOiB3aGVuIGFkZGluZyBmbGFncywgcG9zIDEgd2lsbCBiZSAtW3J8Zl0KIyAgICAgICBhbmQgcG9zIDIgd2lsbCBiZSBmaWxlIG5hbWUKCiMgRmlsZSBQYXRoCmZpbGVfcGF0aCA9IG9zLmdldGN3ZCgpICsgIi8iICsgc3lzLmFyZ3ZbMV0KCiMgRmlsZSBFeGlzdHMKaWYgb3MucGF0aC5leGlzdHMoZmlsZV9wYXRoKToKCiAgICAjIFJlbW92ZSBEaXJlY3RvcnkKICAgIGlmIG9zLnBhdGguaXNkaXIoZmlsZV9wYXRoKToKICAgICAgICBvcy5ybWRpcihmaWxlX3BhdGgpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAjIE5PVEU6IGlmIGRpcmVjdG9yeSB3aXRoIGNvbnRlbnRzIHRoZW4gZG9uJ3QgZGVsZXRlIHVubGVzcyBmbGFncyBhcmUgcHJlc2VudAogICAgICAgICMgICAgICAgYW5kIGEgZGlmZmVyZW50IG1ldGhvZCBpcyByZXF1aXJlZAoKPHxmaW1fZW5kfD4="]
["99ccacbfc19fd99947d29fcb52a4d53e4b77ecdb-4","99ccacbfc19fd99947d29fcb52a4d53e4b77ecdb","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zLCBzeXMKCiMgTm8gRmlsZQppZiBsZW4oc3lzLmFyZ3YpIDwgMjoKICAgIHByaW50KCJNdXN0IHN1cHBseSBmaWxlIG5hbWUhIikKICAgIGV4aXQoKQoKIyBOT1RFOiB3aGVuIGFkZGluZyBmbGFncywgcG9zIDEgd2lsbCBiZSAtW3J8Zl0KIyAgICAgICBhbmQgcG9zIDIgd2lsbCBiZSBmaWxlIG5hbWUKCiMgRmlsZSBQYXRoCmZpbGVfcGF0aCA9IG9zLmdldGN3ZCgpICsgIi8iICsgc3lzLmFyZ3ZbMV0KCiMgRmlsZSBFeGlzdHMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppZiBvcy5wYXRoLmV4aXN0cyhmaWxlX3BhdGgpOgoKICAgICMgUmVtb3ZlIERpcmVjdG9yeQogICAgaWYgb3MucGF0aC5pc2RpcihmaWxlX3BhdGgpOgo8fGZpbV9lbmR8Pg=="]
["e5973bf67a72785e26917cb843db06a450af1d81-1","e5973bf67a72785e26917cb843db06a450af1d81","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwpmcm9tIC5hdHRyaWJ1dGUgaW1wb3J0IEF0dHJpYnV0ZQpmcm9tIC5jb3Jwb3JhIGltcG9ydCBDb3Jwb3JhCmZyb20gLmRvY3VtZW50IGltcG9ydCBEb2N1bWVudApmcm9tIC5lbGVtZW50IGltcG9ydCBFbGVtZW50Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAucGFydCBpbXBvcnQgUGFydApmcm9tIC5wbGFjZWhvbGRlcl9hdHRyaWJ1dGUgaW1wb3J0IFBsYWNlaG9sZGVyQXR0cmlidXRlCmZyb20gLnBsYWNlaG9sZGVyX2RpdmlzaW9uIGltcG9ydCBQbGFjZWhvbGRlckRpdmlzaW9uCmZyb20gLnBsYWNlaG9sZGVyX2VsZW1lbnQgaW1wb3J0IFBsYWNlaG9sZGVyRWxlbWVudAo8fGZpbV9lbmR8Pg=="]
["e756d3ea47ebfbff753fd78a4568c9e1e4aa7400-1","e756d3ea47ebfbff753fd78a4568c9e1e4aa7400","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKZnJvbSB0ZW5zb3JmbG93IGltcG9ydCBrZXJhcwppbXBvcnQgc2h1dGlsCmltcG9ydCBzeXMKCmltZGIgPSBrZXJhcy5kYXRhc2V0cy5pbWRiCm51bV93b3JkcyA9IDEwMDAwCgpwcmludCgibG9hZGluZyBkYXRhLi4uIikKKHRyYWluX2RhdGEsIHRyYWluX2xhYmVscyksICh0ZXN0X2RhdGEsIHRlc3RfbGFiZWxzKSA9IGltZGIubG9hZF9kYXRhKG51bV93b3Jkcz1udW1fd29yZHMpCgpwcmludCgncGFkZGluZyByZXZpZXdzIHRvIGZpeGVkIGxlbmd0aC4uLicpCnRyYWluX2RhdGEgPSBrZXJhcy5wcmVwcm9jZXNzaW5nLnNlcXVlbmNlLnBhZF9zZXF1ZW5jZXModHJhaW5fZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc9J3Bvc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGxlbj0yNTYpCnRlc3RfZGF0YSA9IGtlcmFzLnByZXByb2Nlc3Npbmcuc2VxdWVuY2UucGFkX3NlcXVlbmNlcyh0ZXN0X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZz0ncG9zdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhsZW49MjU2KQoKbW9kZWwgPSBrZXJhcy5TZXF1ZW50aWFsKCkKbW9kZWwuYWRkKGtlcmFzLmxheWVycy5FbWJlZGRpbmcobnVtX3dvcmRzLCAxNikpCm1vZGVsLmFkZChrZXJhcy5sYXllcnMuR2xvYmFsQXZlcmFnZVBvb2xpbmcxRCgpKQptb2RlbC5hZGQoa2VyYXMubGF5ZXJzLkRlbnNlKDE2LCBhY3RpdmF0aW9uPXRmLm5uLnJlbHUpKQptb2RlbC5hZGQoa2VyYXMubGF5ZXJzLkRlbnNlKDEsIGFjdGl2YXRpb249dGYubm4uc2lnbW9pZCkpCgptb2RlbC5zdW1tYXJ5KCkKCm1vZGVsLmNvbXBpbGUob3B0aW1pemVyPSdhZGFtJywKICAgICAgICAgICAgICBsb3NzPSdiaW5hcnlfY3Jvc3NlbnRyb3B5JywKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgIG1ldHJpY3M9WydhY2N1cmFjeSddKQoKPHxmaW1fZW5kfD4="]
["e756d3ea47ebfbff753fd78a4568c9e1e4aa7400-2","e756d3ea47ebfbff753fd78a4568c9e1e4aa7400","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKZnJvbSB0ZW5zb3JmbG93IGltcG9ydCBrZXJhcwppbXBvcnQgc2h1dGlsCmltcG9ydCBzeXMKCmltZGIgPSBrZXJhcy5kYXRhc2V0cy5pbWRiCm51bV93b3JkcyA9IDEwMDAwCgpwcmludCgibG9hZGluZyBkYXRhLi4uIikKKHRyYWluX2RhdGEsIHRyYWluX2xhYmVscyksICh0ZXN0X2RhdGEsIHRlc3RfbGFiZWxzKSA9IGltZGIubG9hZF9kYXRhKG51bV93b3Jkcz1udW1fd29yZHMpCgpwcmludCgncGFkZGluZyByZXZpZXdzIHRvIGZpeGVkIGxlbmd0aC4uLicpCnRyYWluX2RhdGEgPSBrZXJhcy5wcmVwcm9jZXNzaW5nLnNlcXVlbmNlLnBhZF9zZXF1ZW5jZXModHJhaW5fZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc9J3Bvc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGxlbj0yNTYpCnRlc3RfZGF0YSA9IGtlcmFzLnByZXByb2Nlc3Npbmcuc2VxdWVuY2UucGFkX3NlcXVlbmNlcyh0ZXN0X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZz0ncG9zdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhsZW49MjU2KQoKbW9kZWwgPSBrZXJhcy5TZXF1ZW50aWFsKCkKbW9kZWwuYWRkKGtlcmFzLmxheWVycy5FbWJlZGRpbmcobnVtX3dvcmRzLCAxNikpCm1vZGVsLmFkZChrZXJhcy5sYXllcnMuR2xvYmFsQXZlcmFnZVBvb2xpbmcxRCgpKQptb2RlbC5hZGQoa2VyYXMubGF5ZXJzLkRlbnNlKDE2LCBhY3RpdmF0aW9uPXRmLm5uLnJlbHUpKQptb2RlbC5hZGQoa2VyYXMubGF5ZXJzLkRlbnNlKDEsIGFjdGl2YXRpb249dGYubm4uc2lnbW9pZCkpCgptb2RlbC5zdW1tYXJ5KCkKCm1vZGVsLmNvbXBpbGUob3B0aW1pemVyPSdhZGFtJywKICAgICAgICAgICAgICBsb3NzPSdiaW5hcnlfY3Jvc3NlbnRyb3B5JywKICAgICAgICAgICAgICBtZXRyaWNzPVsnYWNjdXJhY3knXSkKCnhfdmFsID0gdHJhaW5fZGF0YVs6MTAwMDBdCnBhcnRpYWxfeF90cmFpbiA9IHRyYWluX2RhdGFbMTAwMDA6XQoKeV92YWwgPSB0cmFpbl9sYWJlbHNbOjEwMDAwXQpwYXJ0aWFsX3lfdHJhaW4gPSB0cmFpbl9sYWJlbHNbMTAwMDA6XQoKIyB0cmFpbiB0aGUgbW9kZWwKcHJpbnQoJ3RyYWluaW5nLi4uJykKaGlzdG9yeSA9IG1vZGVsLmZpdChwYXJ0aWFsX3hfdHJhaW4sCiAgICAgICAgICAgICAgICAgICAgcGFydGlhbF95X3RyYWluLAogICAgICAgICAgICAgICAgICAgIGVwb2Nocz00MCwKICAgICAgICAgICAgICAgICAgICBiYXRjaF9zaXplPTUxMiwKICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uX2RhdGE9KHhfdmFsLCB5X3ZhbCksCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICB2ZXJib3NlPTEpCgo8fGZpbV9lbmR8Pg=="]
["e756d3ea47ebfbff753fd78a4568c9e1e4aa7400-3","e756d3ea47ebfbff753fd78a4568c9e1e4aa7400","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKZnJvbSB0ZW5zb3JmbG93IGltcG9ydCBrZXJhcwppbXBvcnQgc2h1dGlsCmltcG9ydCBzeXMKCmltZGIgPSBrZXJhcy5kYXRhc2V0cy5pbWRiCm51bV93b3JkcyA9IDEwMDAwCgpwcmludCgibG9hZGluZyBkYXRhLi4uIikKKHRyYWluX2RhdGEsIHRyYWluX2xhYmVscyksICh0ZXN0X2RhdGEsIHRlc3RfbGFiZWxzKSA9IGltZGIubG9hZF9kYXRhKG51bV93b3Jkcz1udW1fd29yZHMpCgpwcmludCgncGFkZGluZyByZXZpZXdzIHRvIGZpeGVkIGxlbmd0aC4uLicpCnRyYWluX2RhdGEgPSBrZXJhcy5wcmVwcm9jZXNzaW5nLnNlcXVlbmNlLnBhZF9zZXF1ZW5jZXModHJhaW5fZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc9J3Bvc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGxlbj0yNTYpCnRlc3RfZGF0YSA9IGtlcmFzLnByZXByb2Nlc3Npbmcuc2VxdWVuY2UucGFkX3NlcXVlbmNlcyh0ZXN0X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZz0ncG9zdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhsZW49MjU2KQoKbW9kZWwgPSBrZXJhcy5TZXF1ZW50aWFsKCkKbW9kZWwuYWRkKGtlcmFzLmxheWVycy5FbWJlZGRpbmcobnVtX3dvcmRzLCAxNikpCm1vZGVsLmFkZChrZXJhcy5sYXllcnMuR2xvYmFsQXZlcmFnZVBvb2xpbmcxRCgpKQptb2RlbC5hZGQoa2VyYXMubGF5ZXJzLkRlbnNlKDE2LCBhY3RpdmF0aW9uPXRmLm5uLnJlbHUpKQptb2RlbC5hZGQoa2VyYXMubGF5ZXJzLkRlbnNlKDEsIGFjdGl2YXRpb249dGYubm4uc2lnbW9pZCkpCgptb2RlbC5zdW1tYXJ5KCkKCm1vZGVsLmNvbXBpbGUob3B0aW1pemVyPSdhZGFtJywKICAgICAgICAgICAgICBsb3NzPSdiaW5hcnlfY3Jvc3NlbnRyb3B5JywKICAgICAgICAgICAgICBtZXRyaWNzPVsnYWNjdXJhY3knXSkKCnhfdmFsID0gdHJhaW5fZGF0YVs6MTAwMDBdCnBhcnRpYWxfeF90cmFpbiA9IHRyYWluX2RhdGFbMTAwMDA6XQoKeV92YWwgPSB0cmFpbl9sYWJlbHNbOjEwMDAwXQpwYXJ0aWFsX3lfdHJhaW4gPSB0cmFpbl9sYWJlbHNbMTAwMDA6XQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojIHRyYWluIHRoZSBtb2RlbApwcmludCgndHJhaW5pbmcuLi4nKQpoaXN0b3J5ID0gbW9kZWwuZml0KHBhcnRpYWxfeF90cmFpbiwKICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsX3lfdHJhaW4sCjx8ZmltX2VuZHw+"]
["e756d3ea47ebfbff753fd78a4568c9e1e4aa7400-4","e756d3ea47ebfbff753fd78a4568c9e1e4aa7400","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKZnJvbSB0ZW5zb3JmbG93IGltcG9ydCBrZXJhcwppbXBvcnQgc2h1dGlsCmltcG9ydCBzeXMKCmltZGIgPSBrZXJhcy5kYXRhc2V0cy5pbWRiCm51bV93b3JkcyA9IDEwMDAwCgpwcmludCgibG9hZGluZyBkYXRhLi4uIikKKHRyYWluX2RhdGEsIHRyYWluX2xhYmVscyksICh0ZXN0X2RhdGEsIHRlc3RfbGFiZWxzKSA9IGltZGIubG9hZF9kYXRhKG51bV93b3Jkcz1udW1fd29yZHMpCgpwcmludCgncGFkZGluZyByZXZpZXdzIHRvIGZpeGVkIGxlbmd0aC4uLicpCnRyYWluX2RhdGEgPSBrZXJhcy5wcmVwcm9jZXNzaW5nLnNlcXVlbmNlLnBhZF9zZXF1ZW5jZXModHJhaW5fZGF0YSwKPHxmaW1faG9sZXw+CnRlc3RfZGF0YSA9IGtlcmFzLnByZXByb2Nlc3Npbmcuc2VxdWVuY2UucGFkX3NlcXVlbmNlcyh0ZXN0X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZz0ncG9zdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhsZW49MjU2KQoKbW9kZWwgPSBrZXJhcy5TZXF1ZW50aWFsKCkKbW9kZWwuYWRkKGtlcmFzLmxheWVycy5FbWJlZGRpbmcobnVtX3dvcmRzLCAxNikpCm1vZGVsLmFkZChrZXJhcy5sYXllcnMuR2xvYmFsQXZlcmFnZVBvb2xpbmcxRCgpKQptb2RlbC5hZGQoa2VyYXMubGF5ZXJzLkRlbnNlKDE2LCBhY3RpdmF0aW9uPXRmLm5uLnJlbHUpKQptb2RlbC5hZGQoa2VyYXMubGF5ZXJzLkRlbnNlKDEsIGFjdGl2YXRpb249dGYubm4uc2lnbW9pZCkpCgptb2RlbC5zdW1tYXJ5KCkKCm1vZGVsLmNvbXBpbGUob3B0aW1pemVyPSdhZGFtJywKICAgICAgICAgICAgICBsb3NzPSdiaW5hcnlfY3Jvc3NlbnRyb3B5JywKICAgICAgICAgICAgICBtZXRyaWNzPVsnYWNjdXJhY3knXSkKCnhfdmFsID0gdHJhaW5fZGF0YVs6MTAwMDBdCnBhcnRpYWxfeF90cmFpbiA9IHRyYWluX2RhdGFbMTAwMDA6XQoKeV92YWwgPSB0cmFpbl9sYWJlbHNbOjEwMDAwXQpwYXJ0aWFsX3lfdHJhaW4gPSB0cmFpbl9sYWJlbHNbMTAwMDA6XQoKIyB0cmFpbiB0aGUgbW9kZWwKcHJpbnQoJ3RyYWluaW5nLi4uJykKaGlzdG9yeSA9IG1vZGVsLmZpdChwYXJ0aWFsX3hfdHJhaW4sCiAgICAgICAgICAgICAgICAgICAgcGFydGlhbF95X3RyYWluLAogICAgICAgICAgICAgICAgICAgIGVwb2Nocz00MCwKICAgICAgICAgICAgICAgICAgICBiYXRjaF9zaXplPTUxMiwKICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uX2RhdGE9KHhfdmFsLCB5X3ZhbCksCiAgICAgICAgICAgICAgICAgICAgdmVyYm9zZT0xKQoKcHJpbnQoJ3RyYWluaW5nIGRvbmUuJykKCiMgc2F2ZSB0aGUgbW9kZWwKc2VzcyA9IHRmLmtlcmFzLmJhY2tlbmQuZ2V0X3Nlc3Npb24oKQpkYXRhRGlyID0gc3lzLnBhdGhbMF0gKyAiLy4uL2RhdGEiCm1vZGVsRGlyID0gZGF0YURpciArICIvbW9kZWwvMSIKc2h1dGlsLnJtdHJlZShtb2RlbERpciwgaWdub3JlX2Vycm9ycz1UcnVlKQp0Zi5zYXZlZF9tb2RlbC5zaW1wbGVfc2F2ZShzZXNzLCBtb2RlbERpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzPXsiaW5wdXRfcmV2aWV3IjogbW9kZWwuaW5wdXR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRzPXt0Lm5hbWU6dCBmb3IgdCBpbiBtb2RlbC5vdXRwdXRzfSkKcHJpbnQoIk1vZGVsIHNhdmVkIHRvICIgKyBtb2RlbERpcikKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc9J3Bvc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGxlbj0yNTYpCjx8ZmltX2VuZHw+"]
["e7dad02ef16282d4175aec2d25557048012fab5e-1","e7dad02ef16282d4175aec2d25557048012fab5e","PHxmaW1fcHJlZml4fD4KY2xhc3MgYXJyYXkob2JqZWN0KToKICAgICAjICBNZXRob2RzOgogICAgIAogICAgIGRlZiBhcHBlbmQoKTogcGFzcwogICAgIGRlZiBidWZmZXJfaW5mbygpOiBwYXNzCiAgICAgZGVmIGJ5dGVzd2FwKCk6IHBhc3MKICAgICBkZWYgY291bnQoKTogcGFzcwogICAgIGRlZiBleHRlbmQoKTogcGFzcwogICAgIGRlZiBmcm9tZmlsZSgpOiBwYXNzCiAgICAgZGVmIGZyb21saXN0KCk6IHBhc3MKICAgICBkZWYgZnJvbXN0cmluZygpOiBwYXNzCiAgICAgZGVmIGluZGV4KCk6IHBhc3MKICAgICBkZWYgaW5zZXJ0KCk6IHBhc3MKICAgICBkZWYgcG9wKCk6IHBhc3MKICAgICBkZWYgcmVhZCgpOiBwYXNzCiAgICAgZGVmIHJlbW92ZSgpOiBwYXNzCiAgICAgZGVmIHJldmVyc2UoKTogcGFzcwo8fGZpbV9ob2xlfD4KICAgICAKICAgICAKICAgICAjICBBdHRyaWJ1dGVzOgogICAgIHR5cGVjb2RlID0gMAogICAgIGl0ZW1zaXplID0gMAogICAgICAgIAogICAgICMgIE1ldGhvZHMgZGVmaW5lZCBoZXJlOgogICAgIGRlZiBfX2FkZF9fKCk6IHBhc3MKICAgICBkZWYgX19jb250YWluc19fKCk6IHBhc3MKICAgICBkZWYgX19jb3B5X18oKTogcGFzcwogICAgIGRlZiBfX2RlZXBjb3B5X18oKTogcGFzcwogICAgIGRlZiBfX2RlbGl0ZW1fXygpOiBwYXNzCiAgICAgZGVmIF9fZGVsc2xpY2VfXygpOiBwYXNzCiAgICAgZGVmIF9fZXFfXygpOiBwYXNzCiAgICAgZGVmIF9fZ2VfXygpOiBwYXNzCiAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oKTogcGFzcwogICAgIGRlZiBfX2dldGl0ZW1fXygpOiBwYXNzCiAgICAgZGVmIF9fZ2V0c2xpY2VfXygpOiBwYXNzCiAgICAgZGVmIF9fZ3RfXygpOiBwYXNzCiAgICAgZGVmIF9faWFkZF9fKCk6IHBhc3MKICAgICBkZWYgX19pbXVsX18oKTogcGFzcwogICAgIGRlZiBfX2l0ZXJfXygpOiBwYXNzCiAgICAgZGVmIF9fbGVfXygpOiBwYXNzCiAgICAgZGVmIF9fbGVuX18oKTogcGFzcwogICAgIGRlZiBfX2x0X18oKTogcGFzcwogICAgIGRlZiBfX211bF9fKCk6IHBhc3MKICAgICBkZWYgX19uZV9fKCk6IHBhc3MKICAgICBkZWYgX19yZWR1Y2VfXygpOiBwYXNzCiAgICAgZGVmIF9fcmVwcl9fKCk6IHBhc3MKICAgICBkZWYgX19ybXVsX18oKTogcGFzcwogICAgIGRlZiBfX3NldGl0ZW1fXygpOiBwYXNzCiAgICAgZGVmIF9fc2V0c2xpY2VfXygpOiBwYXNzCiAgICAgZGVmIGFwcGVuZCgpOiBwYXNzCiAgICAgZGVmIGJ1ZmZlcl9pbmZvKCk6IHBhc3MKICAgICBkZWYgYnl0ZXN3YXAoKTogcGFzcwogICAgIGRlZiBjb3VudCgpOiBwYXNzCiAgICAgZGVmIGV4dGVuZCgpOiBwYXNzCiAgICAgZGVmIGZyb21maWxlKCk6IHBhc3MKICAgICBkZWYgZnJvbWxpc3QoKTogcGFzcwogICAgIGRlZiBmcm9tc3RyaW5nKCk6IHBhc3MKICAgICBkZWYgZnJvbXVuaWNvZGUoKTogcGFzcwogICAgIGRlZiBpbmRleCgpOiBwYXNzCiAgICAgZGVmIGluc2VydCgpOiBwYXNzCiAgICAgZGVmIHBvcCgpOiBwYXNzCiAgICAgZGVmIHJlYWQoKTogcGFzcwogICAgIGRlZiByZW1vdmUoKTogcGFzcwogICAgIGRlZiByZXZlcnNlKCk6IHBhc3MKICAgICBkZWYgdG9maWxlKCk6IHBhc3MKICAgICBkZWYgdG9saXN0KCk6IHBhc3MKICAgICBkZWYgdG9zdHJpbmcoKTogcGFzcwogICAgIGRlZiB0b3VuaWNvZGUoKTogcGFzcwogICAgIGRlZiB3cml0ZSgpOiBwYXNzCiAgICAgIyAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBkZWZpbmVkIGhlcmU6CiAgICAgX19uZXdfXyA9IDEKCkFycmF5VHlwZSA9IGFycmF5Cjx8ZmltX3N1ZmZpeHw+CiAgICAgZGVmIHRvZmlsZSgpOiBwYXNzCiAgICAgZGVmIHRvbGlzdCgpOiBwYXNzCiAgICAgZGVmIHRvc3RyaW5nKCk6IHBhc3MKICAgICBkZWYgd3JpdGUoKTogcGFzcwo8fGZpbV9lbmR8Pg=="]
["a9d425c6e774106a55e01db040395ddb7ef5e0a2-1","a9d425c6e774106a55e01db040395ddb7ef5e0a2","PHxmaW1fcHJlZml4fD4KZnJvbSBiaXRjb2luIGltcG9ydCAqCmltcG9ydCBqc29uCgoKZGVmIGJ0Y19wcml2X2tleV9nZW5lcmF0b3IobXlWYXJpYWJsZSk6CiAgICBwcml2ID0gc2hhMjU2KG15VmFyaWFibGUpCiAgICBwcml2d2lmID0gZW5jb2RlX3ByaXZrZXkocHJpdiwgJ3dpZicpCiAgICBwcml2cHViID0gcHJpdnRvcHViKHByaXYpCiAgICBhZGRyID0gcHVidG9hZGRyKHByaXZwdWIpCiAgICBwcmludChmJ3ByaXZhdGUga2V5OiB7cHJpdndpZn0nKQogICAgcHJpbnQoZidwdWJsaWMga2V5OiB7YWRkcn0nKQogICAga2V5cyA9IHsncHJpdmF0ZSBrZXknOiBmJ3twcml2d2lmfScsICdwdWJsaWMga2V5JzogZid7YWRkcn0nfQo8fGZpbV9ob2xlfD4KaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1uZW1vbmljX2tleSA9IGlucHV0KCJFbnRlciBwYXNzcGhyYXNlOiIpCiAgICBidGNfcHJpdl9rZXlfZ2VuZXJhdG9yKGYie21uZW1vbmljX2tleX0iKQo8fGZpbV9zdWZmaXh8PgogICAganNvbl9rZXlzID0ganNvbi5kdW1wcyhrZXlzKQogICAgcmV0dXJuIGpzb25fa2V5cwoKPHxmaW1fZW5kfD4="]
["a9d425c6e774106a55e01db040395ddb7ef5e0a2-2","a9d425c6e774106a55e01db040395ddb7ef5e0a2","PHxmaW1fcHJlZml4fD4KZnJvbSBiaXRjb2luIGltcG9ydCAqCmltcG9ydCBqc29uCgoKZGVmIGJ0Y19wcml2X2tleV9nZW5lcmF0b3IobXlWYXJpYWJsZSk6CiAgICBwcml2ID0gc2hhMjU2KG15VmFyaWFibGUpCiAgICBwcml2d2lmID0gZW5jb2RlX3ByaXZrZXkocHJpdiwgJ3dpZicpCiAgICBwcml2cHViID0gcHJpdnRvcHViKHByaXYpCiAgICBhZGRyID0gcHVidG9hZGRyKHByaXZwdWIpCiAgICBwcmludChmJ3ByaXZhdGUga2V5OiB7cHJpdndpZn0nKQogICAgcHJpbnQoZidwdWJsaWMga2V5OiB7YWRkcn0nKQogICAga2V5cyA9IHsncHJpdmF0ZSBrZXknOiBmJ3twcml2d2lmfScsICdwdWJsaWMga2V5JzogZid7YWRkcn0nfQogICAganNvbl9rZXlzID0ganNvbi5kdW1wcyhrZXlzKQogICAgcmV0dXJuIGpzb25fa2V5cwoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbW5lbW9uaWNfa2V5ID0gaW5wdXQoIkVudGVyIHBhc3NwaHJhc2U6IikKICAgIGJ0Y19wcml2X2tleV9nZW5lcmF0b3IoZiJ7bW5lbW9uaWNfa2V5fSIpCjx8ZmltX2VuZHw+"]
["99c264d137012366054832c2e0181bbca8a7618e-1","99c264d137012366054832c2e0181bbca8a7618e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9wZXJhdG9yCgppbXBvcnQgcHl0ZXN0Cgpmcm9tIG5ldHRsZXNvbWUudGVybXMgaW1wb3J0ICgKICAgIENvbnRleHRSZWdpc3RlciwKICAgIEV4cGxhbmF0aW9uLAogICAgRmFjdG9yTWF0Y2gsCiAgICBjb25zaXN0ZW50X3dpdGgsCiAgICBjb250cmFkaWN0cywKICAgIG1lYW5zLAopCmZyb20gbmV0dGxlc29tZS5wcmVkaWNhdGVzIGltcG9ydCBQcmVkaWNhdGUKZnJvbSBuZXR0bGVzb21lLnF1YW50aXRpZXMgaW1wb3J0IENvbXBhcmlzb24KZnJvbSBuZXR0bGVzb21lLnN0YXRlbWVudHMgaW1wb3J0IFN0YXRlbWVudApmcm9tIG5ldHRsZXNvbWUuZW50aXRpZXMgaW1wb3J0IEVudGl0eQpmcm9tIG5ldHRsZXNvbWUuZ3JvdXBzIGltcG9ydCBGYWN0b3JHcm91cAoKCmNsYXNzIFRlc3RDb250ZXh0OgogICAgc2FsZSA9IFByZWRpY2F0ZShjb250ZW50PSIkc2VsbGVyIHNvbGQgJHByb2R1Y3QgdG8gJGJ1eWVyIikKICAgIGZhY3RfYWwgPSBTdGF0ZW1lbnQoCiAgICAgICAgcHJlZGljYXRlPXNhbGUsCiAgICAgICAgdGVybXM9W0VudGl0eShuYW1lPSJBbCIpLCBFbnRpdHkobmFtZT0idGhlIGJ1bGwiKSwgRW50aXR5KG5hbWU9IkJldHR5IildLAogICAgKQogICAgZmFjdF9hbGljZSA9IFN0YXRlbWVudCgKICAgICAgICBwcmVkaWNhdGU9c2FsZSwKICAgICAgICB0ZXJtcz1bRW50aXR5KG5hbWU9IkFsaWNlIiksIEVudGl0eShuYW1lPSJ0aGUgY293IiksIEVudGl0eShuYW1lPSJCb2IiKV0sCiAgICApCgogICAgZGVmIHRlc3RfaW1wb3NzaWJsZV9yZWdpc3RlcihzZWxmKToKICAgICAgICBjb250ZXh0ID0gQ29udGV4dFJlZ2lzdGVyKCkKICAgICAgICBjb250ZXh0Lmluc2VydF9wYWlyKEVudGl0eShuYW1lPSJBbCIpLCBFbnRpdHkobmFtZT0iQm9iIikpCiAgICAgICAgYW5zd2VycyA9IHNlbGYuZmFjdF9hbC51cGRhdGVfY29udGV4dF9yZWdpc3RlcihzZWxmLmZhY3RfYWxpY2UsIGNvbnRleHQsIG1lYW5zKQogICAgICAgIGFzc2VydCBub3QgYW55KGFuc3dlcnMpCgogICAgZGVmIHRlc3RfcG9zc2libGVfcmVnaXN0ZXIoc2VsZik6CiAgICAgICAgcmVnaXN0ZXIgPSBDb250ZXh0UmVnaXN0ZXIoKQogICAgICAgIHJlZ2lzdGVyLmluc2VydF9wYWlyKEVudGl0eShuYW1lPSJBbCIpLCBFbnRpdHkobmFtZT0iQWxpY2UiKSkKICAgICAgICBhbnN3ZXJzID0gc2VsZi5mYWN0X2FsLnVwZGF0ZV9jb250ZXh0X3JlZ2lzdGVyKHNlbGYuZmFjdF9hbGljZSwgcmVnaXN0ZXIsIG1lYW5zKQogICAgICAgIGFzc2VydCBFbnRpdHkobmFtZT0idGhlIGJ1bGwiKS5zaG9ydF9zdHJpbmcgaW4gbmV4dChhbnN3ZXJzKS5rZXlzKCkKCiAgICBkZWYgdGVzdF9leHBsYWluX2NvbnNpc3RlbmN5KHNlbGYpOgogICAgICAgIHJlZ2lzdGVyID0gQ29udGV4dFJlZ2lzdGVyKCkKICAgICAgICByZWdpc3Rlci5pbnNlcnRfcGFpcihFbnRpdHkobmFtZT0iQWwiKSwgRW50aXR5KG5hbWU9IkFsaWNlIikpCiAgICAgICAgZXhwbGFuYXRpb24gPSBzZWxmLmZhY3RfYWwuZXhwbGFpbl9jb25zaXN0ZW50X3dpdGgoc2VsZi5mYWN0X2FsaWNlLCByZWdpc3RlcikKCiAgICAgICAgYXNzZXJ0ICI8dGhlIGJ1bGw+IGlzIGxpa2UgPHRoZSBjb3c+IiBpbiBleHBsYW5hdGlvbi5jb250ZXh0LnJlYXNvbgogICAgICAgIGFzc2VydCAiPVtFbnRpdHkobmFtZT0nQWwnIiBpbiByZXByKGV4cGxhbmF0aW9uKQoKCmNsYXNzIFRlc3RNYWtlRXhwbGFuYXRpb246CiAgICBkZWYgdGVzdF9jb250ZXh0X3R5cGUoc2VsZiwgbWFrZV9zdGF0ZW1lbnQpOgogICAgICAgIGV4cGxhbmF0aW9uID0gbWFrZV9zdGF0ZW1lbnRbImxhcmdlX3dlaWdodCJdLmV4cGxhaW5faW1wbGljYXRpb24oCiAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJzbWFsbF93ZWlnaHQiXQogICAgICAgICkKICAgICAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgRXhwbGFuYXRpb24ocmVhc29ucz1bXSwgY29udGV4dD1leHBsYW5hdGlvbikKCgpjbGFzcyBUZXN0Q29udGludWVkRXhwbGFuYXRpb246CiAgICBkZWYgdGVzdF9pbXBsaWNhdGlvbl9hbmRfY29udHJhZGljdGlvbihzZWxmKToKICAgICAgICBsaXZlZF9hdCA9IFByZWRpY2F0ZShjb250ZW50PSIkcGVyc29uIGxpdmVkIGF0ICRyZXNpZGVuY2UiKQogICAgICAgIGJvYl9saXZlZCA9IFN0YXRlbWVudCgKICAgICAgICAgICAgcHJlZGljYXRlPWxpdmVkX2F0LCB0ZXJtcz1bRW50aXR5KG5hbWU9IkJvYiIpLCBFbnRpdHkobmFtZT0iQm9iJ3MgaG91c2UiKV0KICAgICAgICApCiAgICAgICAgY2FybF9saXZlZCA9IFN0YXRlbWVudCgKICAgICAgICAgICAgcHJlZGljYXRlPWxpdmVkX2F0LCB0ZXJtcz1bRW50aXR5KG5hbWU9IkNhcmwiKSwgRW50aXR5KG5hbWU9IkNhcmwncyBob3VzZSIpXQogICAgICAgICkKICAgICAgICBleHBsYW5hdGlvbiA9IGJvYl9saXZlZC5leHBsYWluX2ltcGxpY2F0aW9uKGNhcmxfbGl2ZWQpCgogICAgICAgIGRpc3RhbmNlX2xvbmcgPSBDb21wYXJpc29uKAogICAgICAgICAgICBjb250ZW50PSJ0aGUgZGlzdGFuY2UgZnJvbSB0aGUgY2VudGVyIG9mICRjaXR5IHRvICRyZXNpZGVuY2Ugd2FzIiwKICAgICAgICAgICAgc2lnbj0iPj0iLAogICAgICAgICAgICBleHByZXNzaW9uPSI1MCBtaWxlcyIsCiAgICAgICAgKQogICAgICAgIHN0YXRlbWVudF9sb25nID0gU3RhdGVtZW50KAogICAgICAgICAgICBwcmVkaWNhdGU9ZGlzdGFuY2VfbG9uZywKICAgICAgICAgICAgdGVybXM9W0VudGl0eShuYW1lPSJIb3VzdG9uIiksIEVudGl0eShuYW1lPSJCb2IncyBob3VzZSIpXSwKICAgICAgICApCgogICAgICAgIGRpc3RhbmNlX3Nob3J0ID0gQ29tcGFyaXNvbigKICAgICAgICAgICAgY29udGVudD0idGhlIGRpc3RhbmNlIGZyb20gdGhlIGNlbnRlciBvZiAkY2l0eSB0byAkcmVzaWRlbmNlIHdhcyIsCiAgICAgICAgICAgIHNpZ249Ijw9IiwKICAgICAgICAgICAgZXhwcmVzc2lvbj0iMTAga2lsb21ldGVycyIsCiAgICAgICAgKQogICAgICAgIHN0YXRlbWVudF9zaG9ydCA9IFN0YXRlbWVudCgKICAgICAgICAgICAgcHJlZGljYXRlPWRpc3RhbmNlX3Nob3J0LAogICAgICAgICAgICB0ZXJtcz1bRW50aXR5KG5hbWU9IkVsIFBhc28iKSwgRW50aXR5KG5hbWU9IkNhcmwncyBob3VzZSIpXSwKICAgICAgICApCgogICAgICAgIGxlZnQgPSBGYWN0b3JHcm91cChzdGF0ZW1lbnRfbG9uZykKICAgICAgICByaWdodCA9IEZhY3Rvckdyb3VwKHN0YXRlbWVudF9zaG9ydCkKICAgICAgICBuZXdfZXhwbGFuYXRpb24gPSBsZWZ0LmV4cGxhaW5fY29udHJhZGljdGlvbihyaWdodCwgY29udGV4dD1leHBsYW5hdGlvbikKCiAgICAgICAgZXhwZWN0ZWQgPSAidGhlIHN0YXRlbWVudCB0aGF0IDxib2I+IGxpdmVkIGF0IDxib2IncyBob3VzZT4iCiAgICAgICAgYXNzZXJ0IG5ld19leHBsYW5hdGlvbi5yZWFzb25zWzBdLmxlZnQua2V5Lmxvd2VyKCkgPT0gZXhwZWN0ZWQKICAgICAgICBhc3NlcnQgbmV3X2V4cGxhbmF0aW9uLnJlYXNvbnNbMF0ub3BlcmF0aW9uID09IG9wZXJhdG9yLmdlCgogICAgICAgIHBhcnQgPSAiZnJvbSB0aGUgY2VudGVyIG9mIDxob3VzdG9uPiB0byA8Ym9iJ3MgaG91c2U+IHdhcyBhdCBsZWFzdCA1MCBtaWxlIgogICAgICAgIGFzc2VydCBwYXJ0IGluIG5ld19leHBsYW5hdGlvbi5yZWFzb25zWzFdLmxlZnQua2V5Lmxvd2VyKCkKICAgICAgICBhc3NlcnQgbmV3X2V4cGxhbmF0aW9uLnJlYXNvbnNbMV0ub3BlcmF0aW9uID09IGNvbnRyYWRpY3RzCgogICAgZGVmIHRlc3RfdHdvX2ltcGx5aW5nX2dyb3VwcyhzZWxmLCBtYWtlX3N0YXRlbWVudCk6CiAgICAgICAgbGVmdF93ZWlnaHQgPSBGYWN0b3JHcm91cChtYWtlX3N0YXRlbWVudFsibGFyZ2Vfd2VpZ2h0Il0pCiAgICAgICAgcmlnaHRfd2VpZ2h0ID0gRmFjdG9yR3JvdXAobWFrZV9zdGF0ZW1lbnRbInNtYWxsX3dlaWdodCJdKQogICAgICAgIGV4cGxhbmF0aW9uID0gbGVmdF93ZWlnaHQuZXhwbGFpbl9pbXBsaWNhdGlvbihyaWdodF93ZWlnaHQpCiAgICAgICAgbGVmdF9tb3JlID0gRmFjdG9yR3JvdXAobWFrZV9zdGF0ZW1lbnRbIndheV9tb3JlIl0pCiAgICAgICAgcmlnaHRfbW9yZSA9IEZhY3Rvckdyb3VwKG1ha2Vfc3RhdGVtZW50WyJtb3JlIl0pCiAgICAgICAgbmV3ID0gbGVmdF9tb3JlLmV4cGxhaW5faW1wbGljYXRpb24ocmlnaHRfbW9yZSwgY29udGV4dD1leHBsYW5hdGlvbikKICAgICAgICBhc3NlcnQgbGVuKG5ldy5yZWFzb25zKSA9PSAyCiAgICAgICAgYXNzZXJ0IG5ldy5yZWFzb25zWzBdLm9wZXJhdGlvbiA9PSBvcGVyYXRvci5nZQogICAgICAgIGFzc2VydCBuZXcucmVhc29uc1sxXS5vcGVyYXRpb24gPT0gb3BlcmF0b3IuZ2UKCiAgICBkZWYgdGVzdF9jb25zaXN0ZW50X2FuZF9zYW1lX21lYW5pbmcoc2VsZiwgbWFrZV9zdGF0ZW1lbnQpOgogICAgICAgIGxlZnRfd2VpZ2h0ID0gRmFjdG9yR3JvdXAobWFrZV9zdGF0ZW1lbnRbInNtYWxsX3dlaWdodF9ib2IiXSkKICAgICAgICByaWdodF93ZWlnaHQgPSBGYWN0b3JHcm91cChtYWtlX3N0YXRlbWVudFsibGFyZ2Vfd2VpZ2h0Il0pCiAgICAgICAgZXhwbGFuYXRpb24gPSBsZWZ0X3dlaWdodC5leHBsYWluX2NvbnNpc3RlbnRfd2l0aChyaWdodF93ZWlnaHQpCiAgICAgICAgbmV3X2V4cGxhbmF0aW9uID0gbWFrZV9zdGF0ZW1lbnRbImNyaW1lX2JvYiJdLmV4cGxhaW5fc2FtZV9tZWFuaW5nKAogICAgICAgICAgICBtYWtlX3N0YXRlbWVudFsiY3JpbWUiXSwgY29udGV4dD1leHBsYW5hdGlvbgogICAgICAgICkKICAgICAgICBhc3NlcnQgIkJlY2F1c2UgPEJvYj4gaXMgbGlrZSA8QWxpY2U+IiBpbiBzdHIobmV3X2V4cGxhbmF0aW9uKQogICAgICAgIGFzc2VydCAiRmFjdG9yR3JvdXAoWyIgbm90IGluIHN0cihuZXdfZXhwbGFuYXRpb24pCgogICAgZGVmIHRlc3Rfc2FtZV9tZWFuaW5nX2ZhY3RvcnNfbm90X2dyb3VwZWQoc2VsZiwgbWFrZV9zdGF0ZW1lbnQpOgogICAgICAgIGxlZnRfd2VpZ2h0ID0gbWFrZV9zdGF0ZW1lbnRbInNtYWxsX3dlaWdodF9ib2IiXQogICAgICAgIHJpZ2h0X3dlaWdodCA9IG1ha2Vfc3RhdGVtZW50WyJsYXJnZV93ZWlnaHQiXQogICAgICAgIGV4cGxhbmF0aW9uID0gbGVmdF93ZWlnaHQuZXhwbGFpbl9jb25zaXN0ZW50X3dpdGgocmlnaHRfd2VpZ2h0KQogICAgICAgIG5ldyA9IEZhY3Rvckdyb3VwKG1ha2Vfc3RhdGVtZW50WyJjcmltZV9ib2IiXSkuZXhwbGFpbl9zYW1lX21lYW5pbmcoCiAgICAgICAgICAgIEZhY3Rvckdyb3VwKG1ha2Vfc3RhdGVtZW50WyJjcmltZSJdKSwgY29udGV4dD1leHBsYW5hdGlvbgogICAgICAgICkKICAgICAgICBhc3NlcnQgIkJlY2F1c2UgPEJvYj4gaXMgbGlrZSA8QWxpY2U+IiBpbiBzdHIobmV3KQogICAgICAgIGFzc2VydCBuZXcucmVhc29uc1sxXS5vcGVyYXRpb24gPT0gbWVhbnMKICAgICAgICBhc3NlcnQgIndhcyBhdCBsZWFzdCAxMDAga2lsb2dyYW0sIGFuZCB0aGUgc3RhdGVtZW50IiBpbiBuZXcuc2hvcnRfc3RyaW5nCgogICAgZGVmIHRlc3RfbWVhbnNfdG9fY29udHJhZGljdHMoc2VsZiwgbWFrZV9zdGF0ZW1lbnQpOgogICAgICAgIGV4cGxhbmF0aW9uID0gbWFrZV9zdGF0ZW1lbnRbImNyaW1lIl0uZXhwbGFpbl9zYW1lX21lYW5pbmcoCiAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJjcmltZV9ib2IiXQogICAgICAgICkKICAgICAgICBsZWZ0ID0gRmFjdG9yR3JvdXAoW21ha2Vfc3RhdGVtZW50WyJzaG9vdGluZ19jcmFpZyJdLCBtYWtlX3N0YXRlbWVudFsibGVzcyJdXSkKICAgICAgICByaWdodCA9IEZhY3Rvckdyb3VwKFttYWtlX3N0YXRlbWVudFsibXVyZGVyX2NyYWlnIl0sIG1ha2Vfc3RhdGVtZW50WyJtb3JlIl1dKQogICAgICAgIG5ldyA9IGxlZnQuZXhwbGFpbl9jb250cmFkaWN0aW9uKHJpZ2h0LCBjb250ZXh0PWV4cGxhbmF0aW9uKQogICAgICAgIGFzc2VydCBsZW4obmV3LnJlYXNvbnMpID09IDIKICAgICAgICBhc3NlcnQgbmV3LnJlYXNvbnNbMV0ub3BlcmF0aW9uID09IGNvbnRyYWRpY3RzCgogICAgZGVmIHRlc3Rfc2FtZV9tZWFuaW5nX2xvbmdfZ3JvdXAoc2VsZiwgbWFrZV9zdGF0ZW1lbnQpOgogICAgICAgIGV4cGxhbmF0aW9uID0gbWFrZV9zdGF0ZW1lbnRbImNyaW1lIl0uZXhwbGFpbl9zYW1lX21lYW5pbmcoCiAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJjcmltZV9jcmFpZyJdCiAgICAgICAgKQogICAgICAgIGxlZnQgPSBGYWN0b3JHcm91cCgKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgbWFrZV9zdGF0ZW1lbnRbImxhcmdlX3dlaWdodCJdLAogICAgICAgICAgICAgICAgbWFrZV9zdGF0ZW1lbnRbIm11cmRlciJdLAogICAgICAgICAgICAgICAgbWFrZV9zdGF0ZW1lbnRbIm5vX2NvbnRleHQiXSwKICAgICAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJzaG9vdGluZyJdLAo8fGZpbV9ob2xlfD4KICAgICAgICApCiAgICAgICAgcmlnaHQgPSBGYWN0b3JHcm91cCgKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgbWFrZV9zdGF0ZW1lbnRbImxhcmdlX3dlaWdodF9jcmFpZyJdLAogICAgICAgICAgICAgICAgbWFrZV9zdGF0ZW1lbnRbIm11cmRlcl9jcmFpZyJdLAogICAgICAgICAgICAgICAgbWFrZV9zdGF0ZW1lbnRbInNob290aW5nX2NyYWlnIl0sCiAgICAgICAgICAgICAgICBtYWtlX3N0YXRlbWVudFsibm9fY29udGV4dCJdLAogICAgICAgICAgICBdCiAgICAgICAgKQogICAgICAgIG5ldyA9IGxlZnQuZXhwbGFpbl9zYW1lX21lYW5pbmcocmlnaHQsIGV4cGxhbmF0aW9uKQogICAgICAgIGFzc2VydCBsZW4obmV3LnJlYXNvbnMpID09IDUKCiAgICBkZWYgdGVzdF9ub3Rfc2FtZV9tZWFuaW5nX25vX2ZhY3Rvcl9tYXRjaChzZWxmLCBtYWtlX3N0YXRlbWVudCk6CiAgICAgICAgZXhwbGFuYXRpb24gPSBtYWtlX3N0YXRlbWVudFsiY3JpbWVfY3JhaWciXS5leHBsYWluX3NhbWVfbWVhbmluZygKICAgICAgICAgICAgbWFrZV9zdGF0ZW1lbnRbImNyaW1lIl0KICAgICAgICApCiAgICAgICAgbGVmdCA9IEZhY3Rvckdyb3VwKAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICBtYWtlX3N0YXRlbWVudFsibGFyZ2Vfd2VpZ2h0Il0sCiAgICAgICAgICAgICAgICBtYWtlX3N0YXRlbWVudFsibXVyZGVyX2VudGl0eV9vcmRlciJdLAogICAgICAgICAgICAgICAgbWFrZV9zdGF0ZW1lbnRbIm5vX2NvbnRleHQiXSwKICAgICAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJzaG9vdGluZyJdLAogICAgICAgICAgICBdCiAgICAgICAgKQogICAgICAgIHJpZ2h0ID0gRmFjdG9yR3JvdXAoCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJsYXJnZV93ZWlnaHRfY3JhaWciXSwKICAgICAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJtdXJkZXJfY3JhaWciXSwKICAgICAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJzaG9vdGluZ19jcmFpZyJdLAogICAgICAgICAgICAgICAgbWFrZV9zdGF0ZW1lbnRbIm5vX2NvbnRleHQiXSwKICAgICAgICAgICAgXQogICAgICAgICkKICAgICAgICBuZXcgPSByaWdodC5leHBsYWluX3NhbWVfbWVhbmluZyhsZWZ0LCBleHBsYW5hdGlvbikKICAgICAgICBhc3NlcnQgbmV3IGlzIE5vbmUKCgpjbGFzcyBUZXN0QXBwbHlPcGVyYXRpb246CiAgICBkZWYgdGVzdF9tZWFuc190b19jb250cmFkaWN0c19mcm9tX2V4cGxhbmF0aW9uKHNlbGYsIG1ha2Vfc3RhdGVtZW50KToKICAgICAgICBleHBsYW5hdGlvbiA9IG1ha2Vfc3RhdGVtZW50WyJjcmltZSJdLmV4cGxhaW5fc2FtZV9tZWFuaW5nKAogICAgICAgICAgICBtYWtlX3N0YXRlbWVudFsiY3JpbWVfYm9iIl0KICAgICAgICApCiAgICAgICAgbGVmdCA9IEZhY3Rvckdyb3VwKFttYWtlX3N0YXRlbWVudFsic2hvb3RpbmdfY3JhaWciXSwgbWFrZV9zdGF0ZW1lbnRbImxlc3MiXV0pCiAgICAgICAgcmlnaHQgPSBGYWN0b3JHcm91cChbbWFrZV9zdGF0ZW1lbnRbIm11cmRlcl9jcmFpZyJdLCBtYWtlX3N0YXRlbWVudFsibW9yZSJdXSkKICAgICAgICBleHBsYW5hdGlvbi5vcGVyYXRpb24gPSBjb250cmFkaWN0cwogICAgICAgIGdlbiA9IGV4cGxhbmF0aW9uLm9wZXJhdGUobGVmdCwgcmlnaHQpCiAgICAgICAgbmV3ID0gbmV4dChnZW4pCiAgICAgICAgYXNzZXJ0IGxlbihuZXcucmVhc29ucykgPT0gMgogICAgICAgIGFzc2VydCBuZXcucmVhc29uc1sxXS5vcGVyYXRpb24gPT0gY29udHJhZGljdHMKCiAgICBkZWYgdGVzdF9tZWFuc190b19jb25zaXN0ZW50X2Zyb21fZXhwbGFuYXRpb24oc2VsZiwgbWFrZV9zdGF0ZW1lbnQpOgogICAgICAgIGV4cGxhbmF0aW9uID0gbWFrZV9zdGF0ZW1lbnRbImNyaW1lIl0uZXhwbGFpbl9zYW1lX21lYW5pbmcoCiAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJjcmltZV9ib2IiXQogICAgICAgICkKICAgICAgICBsZWZ0ID0gRmFjdG9yR3JvdXAoW21ha2Vfc3RhdGVtZW50WyJzaG9vdGluZ19jcmFpZyJdLCBtYWtlX3N0YXRlbWVudFsibGVzcyJdXSkKICAgICAgICByaWdodCA9IEZhY3Rvckdyb3VwKFttYWtlX3N0YXRlbWVudFsibXVyZGVyX2NyYWlnIl0sIG1ha2Vfc3RhdGVtZW50WyJtb3JlIl1dKQogICAgICAgIGV4cGxhbmF0aW9uLm9wZXJhdGlvbiA9IGNvbnNpc3RlbnRfd2l0aAogICAgICAgIGdlbiA9IGV4cGxhbmF0aW9uLm9wZXJhdGUobGVmdCwgcmlnaHQpCiAgICAgICAgbmV3ID0gbmV4dChnZW4pCiAgICAgICAgYXNzZXJ0IGxlbihuZXcucmVhc29ucykgPT0gMgogICAgICAgIGFzc2VydCBuZXcucmVhc29uc1sxXS5vcGVyYXRpb24gPT0gY29uc2lzdGVudF93aXRoCiAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UobmV3LnJlYXNvbnNbMV0ubGVmdCwgRmFjdG9yR3JvdXApCgogICAgZGVmIHRlc3RfbWVhbnNfdG9faW1wbGllZF9ieShzZWxmLCBtYWtlX3N0YXRlbWVudCk6CiAgICAgICAgZXhwbGFuYXRpb24gPSBtYWtlX3N0YXRlbWVudFsiY3JpbWVfYm9iIl0uZXhwbGFpbl9zYW1lX21lYW5pbmcoCiAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJjcmltZSJdCiAgICAgICAgKQogICAgICAgIGxlZnQgPSBGYWN0b3JHcm91cChbbWFrZV9zdGF0ZW1lbnRbInNtYWxsX3dlaWdodF9ib2IiXV0pCiAgICAgICAgcmlnaHQgPSBGYWN0b3JHcm91cChbbWFrZV9zdGF0ZW1lbnRbImxhcmdlX3dlaWdodCJdXSkKICAgICAgICBuZXcgPSBsZWZ0LmV4cGxhaW5faW1wbGllZF9ieShyaWdodCwgZXhwbGFuYXRpb24pCiAgICAgICAgYXNzZXJ0IGxlbihuZXcucmVhc29ucykgPT0gMgogICAgICAgIGFzc2VydCBuZXcucmVhc29uc1sxXS5vcGVyYXRpb24gPT0gb3BlcmF0b3IuZ2UKCiAgICBkZWYgdGVzdF9jYW5ub3RfYXBwbHlfbHQoc2VsZiwgbWFrZV9zdGF0ZW1lbnQpOgogICAgICAgIGV4cGxhbmF0aW9uID0gbWFrZV9zdGF0ZW1lbnRbImNyaW1lIl0uZXhwbGFpbl9zYW1lX21lYW5pbmcoCiAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJjcmltZV9ib2IiXQogICAgICAgICkKICAgICAgICBsZWZ0ID0gRmFjdG9yR3JvdXAoW21ha2Vfc3RhdGVtZW50WyJzaG9vdGluZ19jcmFpZyJdLCBtYWtlX3N0YXRlbWVudFsibGVzcyJdXSkKICAgICAgICByaWdodCA9IEZhY3Rvckdyb3VwKFttYWtlX3N0YXRlbWVudFsibXVyZGVyX2NyYWlnIl0sIG1ha2Vfc3RhdGVtZW50WyJtb3JlIl1dKQogICAgICAgIGV4cGxhbmF0aW9uLm9wZXJhdGlvbiA9IG9wZXJhdG9yLmx0CiAgICAgICAgZ2VuID0gZXhwbGFuYXRpb24ub3BlcmF0ZShsZWZ0LCByaWdodCkKICAgICAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgIG5leHQoZ2VuKQoKCmNsYXNzIFRlc3RTYW1lTWVhbmluZzoKICAgIGRlZiB0ZXN0X3NhbWVfbWVhbmluZyhzZWxmLCBtYWtlX3N0YXRlbWVudCk6CiAgICAgICAgbGVmdCA9IG1ha2Vfc3RhdGVtZW50WyJzaG9vdGluZyJdLmV4cGxhaW5fc2FtZV9tZWFuaW5nKAogICAgICAgICAgICBtYWtlX3N0YXRlbWVudFsic2hvb3RpbmdfY3JhaWciXQogICAgICAgICkKICAgICAgICByaWdodCA9IG1ha2Vfc3RhdGVtZW50WyJzaG9vdGluZyJdLmV4cGxhaW5fc2FtZV9tZWFuaW5nKAogICAgICAgICAgICBtYWtlX3N0YXRlbWVudFsic2hvb3RpbmdfY3JhaWciXQogICAgICAgICkKICAgICAgICBhc3NlcnQgbGVmdC5tZWFucyhyaWdodCkKCiAgICBkZWYgdGVzdF9ub3Rfc2FtZV9tZWFuaW5nKHNlbGYsIG1ha2Vfc3RhdGVtZW50KToKICAgICAgICBsZWZ0ID0gbWFrZV9zdGF0ZW1lbnRbInNob290aW5nIl0uZXhwbGFpbl9zYW1lX21lYW5pbmcoCiAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJzaG9vdGluZ19jcmFpZyJdCiAgICAgICAgKQogICAgICAgIHJpZ2h0ID0gbWFrZV9zdGF0ZW1lbnRbIm11cmRlciJdLmV4cGxhaW5fc2FtZV9tZWFuaW5nKAogICAgICAgICAgICBtYWtlX3N0YXRlbWVudFsibXVyZGVyX2NyYWlnIl0KICAgICAgICApCiAgICAgICAgYXNzZXJ0IG5vdCBsZWZ0Lm1lYW5zKHJpZ2h0KQoKICAgIGRlZiB0ZXN0X25vdF9zYW1lX21lYW5pbmdfbW9yZV9yZWFzb25zKHNlbGYsIG1ha2Vfc3RhdGVtZW50KToKICAgICAgICBsZWZ0ID0gRmFjdG9yR3JvdXAoCiAgICAgICAgICAgIFttYWtlX3N0YXRlbWVudFsic2hvb3RpbmciXSwgbWFrZV9zdGF0ZW1lbnRbImNyaW1lIl1dCiAgICAgICAgKS5leHBsYWluX3NhbWVfbWVhbmluZygKICAgICAgICAgICAgRmFjdG9yR3JvdXAoCiAgICAgICAgICAgICAgICBbbWFrZV9zdGF0ZW1lbnRbInNob290aW5nX2NyYWlnIl0sIG1ha2Vfc3RhdGVtZW50WyJjcmltZV9jcmFpZyJdXQogICAgICAgICAgICApCiAgICAgICAgKQogICAgICAgIHJpZ2h0ID0gbWFrZV9zdGF0ZW1lbnRbIm11cmRlciJdLmV4cGxhaW5fc2FtZV9tZWFuaW5nKAogICAgICAgICAgICBtYWtlX3N0YXRlbWVudFsibXVyZGVyX2NyYWlnIl0KICAgICAgICApCiAgICAgICAgYXNzZXJ0IG5vdCBsZWZ0Lm1lYW5zKHJpZ2h0KQoKICAgIGRlZiB0ZXN0X25vdF9zYW1lX21lYW5pbmdfYXNfY29udGV4dHJlZ2lzdGVyKHNlbGYsIG1ha2Vfc3RhdGVtZW50KToKICAgICAgICBsZWZ0ID0gbWFrZV9zdGF0ZW1lbnRbInNob290aW5nIl0uZXhwbGFpbl9zYW1lX21lYW5pbmcoCiAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJzaG9vdGluZ19jcmFpZyJdCiAgICAgICAgKQogICAgICAgIHJpZ2h0ID0gbWFrZV9zdGF0ZW1lbnRbIm11cmRlciJdLmV4cGxhaW5fc2FtZV9tZWFuaW5nKAogICAgICAgICAgICBtYWtlX3N0YXRlbWVudFsibXVyZGVyX2NyYWlnIl0KICAgICAgICApCiAgICAgICAgYXNzZXJ0IG5vdCBsZWZ0Lm1lYW5zKHJpZ2h0LmNvbnRleHQpCiAgICAgICAgYXNzZXJ0IG5vdCByaWdodC5jb250ZXh0Lm1lYW5zKGxlZnQpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIF0KPHxmaW1fZW5kfD4="]
["99c264d137012366054832c2e0181bbca8a7618e-2","99c264d137012366054832c2e0181bbca8a7618e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9wZXJhdG9yCgppbXBvcnQgcHl0ZXN0Cgpmcm9tIG5ldHRsZXNvbWUudGVybXMgaW1wb3J0ICgKICAgIENvbnRleHRSZWdpc3RlciwKICAgIEV4cGxhbmF0aW9uLAogICAgRmFjdG9yTWF0Y2gsCiAgICBjb25zaXN0ZW50X3dpdGgsCiAgICBjb250cmFkaWN0cywKICAgIG1lYW5zLAopCmZyb20gbmV0dGxlc29tZS5wcmVkaWNhdGVzIGltcG9ydCBQcmVkaWNhdGUKZnJvbSBuZXR0bGVzb21lLnF1YW50aXRpZXMgaW1wb3J0IENvbXBhcmlzb24KZnJvbSBuZXR0bGVzb21lLnN0YXRlbWVudHMgaW1wb3J0IFN0YXRlbWVudApmcm9tIG5ldHRsZXNvbWUuZW50aXRpZXMgaW1wb3J0IEVudGl0eQpmcm9tIG5ldHRsZXNvbWUuZ3JvdXBzIGltcG9ydCBGYWN0b3JHcm91cAoKCmNsYXNzIFRlc3RDb250ZXh0OgogICAgc2FsZSA9IFByZWRpY2F0ZShjb250ZW50PSIkc2VsbGVyIHNvbGQgJHByb2R1Y3QgdG8gJGJ1eWVyIikKICAgIGZhY3RfYWwgPSBTdGF0ZW1lbnQoCiAgICAgICAgcHJlZGljYXRlPXNhbGUsCiAgICAgICAgdGVybXM9W0VudGl0eShuYW1lPSJBbCIpLCBFbnRpdHkobmFtZT0idGhlIGJ1bGwiKSwgRW50aXR5KG5hbWU9IkJldHR5IildLAogICAgKQogICAgZmFjdF9hbGljZSA9IFN0YXRlbWVudCgKICAgICAgICBwcmVkaWNhdGU9c2FsZSwKICAgICAgICB0ZXJtcz1bRW50aXR5KG5hbWU9IkFsaWNlIiksIEVudGl0eShuYW1lPSJ0aGUgY293IiksIEVudGl0eShuYW1lPSJCb2IiKV0sCiAgICApCgogICAgZGVmIHRlc3RfaW1wb3NzaWJsZV9yZWdpc3RlcihzZWxmKToKICAgICAgICBjb250ZXh0ID0gQ29udGV4dFJlZ2lzdGVyKCkKICAgICAgICBjb250ZXh0Lmluc2VydF9wYWlyKEVudGl0eShuYW1lPSJBbCIpLCBFbnRpdHkobmFtZT0iQm9iIikpCiAgICAgICAgYW5zd2VycyA9IHNlbGYuZmFjdF9hbC51cGRhdGVfY29udGV4dF9yZWdpc3RlcihzZWxmLmZhY3RfYWxpY2UsIGNvbnRleHQsIG1lYW5zKQogICAgICAgIGFzc2VydCBub3QgYW55KGFuc3dlcnMpCgogICAgZGVmIHRlc3RfcG9zc2libGVfcmVnaXN0ZXIoc2VsZik6CiAgICAgICAgcmVnaXN0ZXIgPSBDb250ZXh0UmVnaXN0ZXIoKQogICAgICAgIHJlZ2lzdGVyLmluc2VydF9wYWlyKEVudGl0eShuYW1lPSJBbCIpLCBFbnRpdHkobmFtZT0iQWxpY2UiKSkKICAgICAgICBhbnN3ZXJzID0gc2VsZi5mYWN0X2FsLnVwZGF0ZV9jb250ZXh0X3JlZ2lzdGVyKHNlbGYuZmFjdF9hbGljZSwgcmVnaXN0ZXIsIG1lYW5zKQogICAgICAgIGFzc2VydCBFbnRpdHkobmFtZT0idGhlIGJ1bGwiKS5zaG9ydF9zdHJpbmcgaW4gbmV4dChhbnN3ZXJzKS5rZXlzKCkKCiAgICBkZWYgdGVzdF9leHBsYWluX2NvbnNpc3RlbmN5KHNlbGYpOgogICAgICAgIHJlZ2lzdGVyID0gQ29udGV4dFJlZ2lzdGVyKCkKICAgICAgICByZWdpc3Rlci5pbnNlcnRfcGFpcihFbnRpdHkobmFtZT0iQWwiKSwgRW50aXR5KG5hbWU9IkFsaWNlIikpCiAgICAgICAgZXhwbGFuYXRpb24gPSBzZWxmLmZhY3RfYWwuZXhwbGFpbl9jb25zaXN0ZW50X3dpdGgoc2VsZi5mYWN0X2FsaWNlLCByZWdpc3RlcikKCiAgICAgICAgYXNzZXJ0ICI8dGhlIGJ1bGw+IGlzIGxpa2UgPHRoZSBjb3c+IiBpbiBleHBsYW5hdGlvbi5jb250ZXh0LnJlYXNvbgogICAgICAgIGFzc2VydCAiPVtFbnRpdHkobmFtZT0nQWwnIiBpbiByZXByKGV4cGxhbmF0aW9uKQoKCmNsYXNzIFRlc3RNYWtlRXhwbGFuYXRpb246CiAgICBkZWYgdGVzdF9jb250ZXh0X3R5cGUoc2VsZiwgbWFrZV9zdGF0ZW1lbnQpOgogICAgICAgIGV4cGxhbmF0aW9uID0gbWFrZV9zdGF0ZW1lbnRbImxhcmdlX3dlaWdodCJdLmV4cGxhaW5faW1wbGljYXRpb24oCiAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJzbWFsbF93ZWlnaHQiXQogICAgICAgICkKICAgICAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgRXhwbGFuYXRpb24ocmVhc29ucz1bXSwgY29udGV4dD1leHBsYW5hdGlvbikKCgpjbGFzcyBUZXN0Q29udGludWVkRXhwbGFuYXRpb246CiAgICBkZWYgdGVzdF9pbXBsaWNhdGlvbl9hbmRfY29udHJhZGljdGlvbihzZWxmKToKICAgICAgICBsaXZlZF9hdCA9IFByZWRpY2F0ZShjb250ZW50PSIkcGVyc29uIGxpdmVkIGF0ICRyZXNpZGVuY2UiKQogICAgICAgIGJvYl9saXZlZCA9IFN0YXRlbWVudCgKICAgICAgICAgICAgcHJlZGljYXRlPWxpdmVkX2F0LCB0ZXJtcz1bRW50aXR5KG5hbWU9IkJvYiIpLCBFbnRpdHkobmFtZT0iQm9iJ3MgaG91c2UiKV0KICAgICAgICApCiAgICAgICAgY2FybF9saXZlZCA9IFN0YXRlbWVudCgKICAgICAgICAgICAgcHJlZGljYXRlPWxpdmVkX2F0LCB0ZXJtcz1bRW50aXR5KG5hbWU9IkNhcmwiKSwgRW50aXR5KG5hbWU9IkNhcmwncyBob3VzZSIpXQogICAgICAgICkKICAgICAgICBleHBsYW5hdGlvbiA9IGJvYl9saXZlZC5leHBsYWluX2ltcGxpY2F0aW9uKGNhcmxfbGl2ZWQpCgogICAgICAgIGRpc3RhbmNlX2xvbmcgPSBDb21wYXJpc29uKAogICAgICAgICAgICBjb250ZW50PSJ0aGUgZGlzdGFuY2UgZnJvbSB0aGUgY2VudGVyIG9mICRjaXR5IHRvICRyZXNpZGVuY2Ugd2FzIiwKICAgICAgICAgICAgc2lnbj0iPj0iLAogICAgICAgICAgICBleHByZXNzaW9uPSI1MCBtaWxlcyIsCiAgICAgICAgKQogICAgICAgIHN0YXRlbWVudF9sb25nID0gU3RhdGVtZW50KAogICAgICAgICAgICBwcmVkaWNhdGU9ZGlzdGFuY2VfbG9uZywKICAgICAgICAgICAgdGVybXM9W0VudGl0eShuYW1lPSJIb3VzdG9uIiksIEVudGl0eShuYW1lPSJCb2IncyBob3VzZSIpXSwKICAgICAgICApCgogICAgICAgIGRpc3RhbmNlX3Nob3J0ID0gQ29tcGFyaXNvbigKICAgICAgICAgICAgY29udGVudD0idGhlIGRpc3RhbmNlIGZyb20gdGhlIGNlbnRlciBvZiAkY2l0eSB0byAkcmVzaWRlbmNlIHdhcyIsCiAgICAgICAgICAgIHNpZ249Ijw9IiwKICAgICAgICAgICAgZXhwcmVzc2lvbj0iMTAga2lsb21ldGVycyIsCiAgICAgICAgKQogICAgICAgIHN0YXRlbWVudF9zaG9ydCA9IFN0YXRlbWVudCgKICAgICAgICAgICAgcHJlZGljYXRlPWRpc3RhbmNlX3Nob3J0LAogICAgICAgICAgICB0ZXJtcz1bRW50aXR5KG5hbWU9IkVsIFBhc28iKSwgRW50aXR5KG5hbWU9IkNhcmwncyBob3VzZSIpXSwKICAgICAgICApCgogICAgICAgIGxlZnQgPSBGYWN0b3JHcm91cChzdGF0ZW1lbnRfbG9uZykKICAgICAgICByaWdodCA9IEZhY3Rvckdyb3VwKHN0YXRlbWVudF9zaG9ydCkKICAgICAgICBuZXdfZXhwbGFuYXRpb24gPSBsZWZ0LmV4cGxhaW5fY29udHJhZGljdGlvbihyaWdodCwgY29udGV4dD1leHBsYW5hdGlvbikKCiAgICAgICAgZXhwZWN0ZWQgPSAidGhlIHN0YXRlbWVudCB0aGF0IDxib2I+IGxpdmVkIGF0IDxib2IncyBob3VzZT4iCiAgICAgICAgYXNzZXJ0IG5ld19leHBsYW5hdGlvbi5yZWFzb25zWzBdLmxlZnQua2V5Lmxvd2VyKCkgPT0gZXhwZWN0ZWQKICAgICAgICBhc3NlcnQgbmV3X2V4cGxhbmF0aW9uLnJlYXNvbnNbMF0ub3BlcmF0aW9uID09IG9wZXJhdG9yLmdlCgogICAgICAgIHBhcnQgPSAiZnJvbSB0aGUgY2VudGVyIG9mIDxob3VzdG9uPiB0byA8Ym9iJ3MgaG91c2U+IHdhcyBhdCBsZWFzdCA1MCBtaWxlIgogICAgICAgIGFzc2VydCBwYXJ0IGluIG5ld19leHBsYW5hdGlvbi5yZWFzb25zWzFdLmxlZnQua2V5Lmxvd2VyKCkKICAgICAgICBhc3NlcnQgbmV3X2V4cGxhbmF0aW9uLnJlYXNvbnNbMV0ub3BlcmF0aW9uID09IGNvbnRyYWRpY3RzCgogICAgZGVmIHRlc3RfdHdvX2ltcGx5aW5nX2dyb3VwcyhzZWxmLCBtYWtlX3N0YXRlbWVudCk6CiAgICAgICAgbGVmdF93ZWlnaHQgPSBGYWN0b3JHcm91cChtYWtlX3N0YXRlbWVudFsibGFyZ2Vfd2VpZ2h0Il0pCiAgICAgICAgcmlnaHRfd2VpZ2h0ID0gRmFjdG9yR3JvdXAobWFrZV9zdGF0ZW1lbnRbInNtYWxsX3dlaWdodCJdKQogICAgICAgIGV4cGxhbmF0aW9uID0gbGVmdF93ZWlnaHQuZXhwbGFpbl9pbXBsaWNhdGlvbihyaWdodF93ZWlnaHQpCiAgICAgICAgbGVmdF9tb3JlID0gRmFjdG9yR3JvdXAobWFrZV9zdGF0ZW1lbnRbIndheV9tb3JlIl0pCiAgICAgICAgcmlnaHRfbW9yZSA9IEZhY3Rvckdyb3VwKG1ha2Vfc3RhdGVtZW50WyJtb3JlIl0pCiAgICAgICAgbmV3ID0gbGVmdF9tb3JlLmV4cGxhaW5faW1wbGljYXRpb24ocmlnaHRfbW9yZSwgY29udGV4dD1leHBsYW5hdGlvbikKICAgICAgICBhc3NlcnQgbGVuKG5ldy5yZWFzb25zKSA9PSAyCiAgICAgICAgYXNzZXJ0IG5ldy5yZWFzb25zWzBdLm9wZXJhdGlvbiA9PSBvcGVyYXRvci5nZQogICAgICAgIGFzc2VydCBuZXcucmVhc29uc1sxXS5vcGVyYXRpb24gPT0gb3BlcmF0b3IuZ2UKCiAgICBkZWYgdGVzdF9jb25zaXN0ZW50X2FuZF9zYW1lX21lYW5pbmcoc2VsZiwgbWFrZV9zdGF0ZW1lbnQpOgogICAgICAgIGxlZnRfd2VpZ2h0ID0gRmFjdG9yR3JvdXAobWFrZV9zdGF0ZW1lbnRbInNtYWxsX3dlaWdodF9ib2IiXSkKICAgICAgICByaWdodF93ZWlnaHQgPSBGYWN0b3JHcm91cChtYWtlX3N0YXRlbWVudFsibGFyZ2Vfd2VpZ2h0Il0pCiAgICAgICAgZXhwbGFuYXRpb24gPSBsZWZ0X3dlaWdodC5leHBsYWluX2NvbnNpc3RlbnRfd2l0aChyaWdodF93ZWlnaHQpCiAgICAgICAgbmV3X2V4cGxhbmF0aW9uID0gbWFrZV9zdGF0ZW1lbnRbImNyaW1lX2JvYiJdLmV4cGxhaW5fc2FtZV9tZWFuaW5nKAogICAgICAgICAgICBtYWtlX3N0YXRlbWVudFsiY3JpbWUiXSwgY29udGV4dD1leHBsYW5hdGlvbgogICAgICAgICkKICAgICAgICBhc3NlcnQgIkJlY2F1c2UgPEJvYj4gaXMgbGlrZSA8QWxpY2U+IiBpbiBzdHIobmV3X2V4cGxhbmF0aW9uKQogICAgICAgIGFzc2VydCAiRmFjdG9yR3JvdXAoWyIgbm90IGluIHN0cihuZXdfZXhwbGFuYXRpb24pCgogICAgZGVmIHRlc3Rfc2FtZV9tZWFuaW5nX2ZhY3RvcnNfbm90X2dyb3VwZWQoc2VsZiwgbWFrZV9zdGF0ZW1lbnQpOgogICAgICAgIGxlZnRfd2VpZ2h0ID0gbWFrZV9zdGF0ZW1lbnRbInNtYWxsX3dlaWdodF9ib2IiXQogICAgICAgIHJpZ2h0X3dlaWdodCA9IG1ha2Vfc3RhdGVtZW50WyJsYXJnZV93ZWlnaHQiXQogICAgICAgIGV4cGxhbmF0aW9uID0gbGVmdF93ZWlnaHQuZXhwbGFpbl9jb25zaXN0ZW50X3dpdGgocmlnaHRfd2VpZ2h0KQogICAgICAgIG5ldyA9IEZhY3Rvckdyb3VwKG1ha2Vfc3RhdGVtZW50WyJjcmltZV9ib2IiXSkuZXhwbGFpbl9zYW1lX21lYW5pbmcoCiAgICAgICAgICAgIEZhY3Rvckdyb3VwKG1ha2Vfc3RhdGVtZW50WyJjcmltZSJdKSwgY29udGV4dD1leHBsYW5hdGlvbgogICAgICAgICkKICAgICAgICBhc3NlcnQgIkJlY2F1c2UgPEJvYj4gaXMgbGlrZSA8QWxpY2U+IiBpbiBzdHIobmV3KQogICAgICAgIGFzc2VydCBuZXcucmVhc29uc1sxXS5vcGVyYXRpb24gPT0gbWVhbnMKICAgICAgICBhc3NlcnQgIndhcyBhdCBsZWFzdCAxMDAga2lsb2dyYW0sIGFuZCB0aGUgc3RhdGVtZW50IiBpbiBuZXcuc2hvcnRfc3RyaW5nCgogICAgZGVmIHRlc3RfbWVhbnNfdG9fY29udHJhZGljdHMoc2VsZiwgbWFrZV9zdGF0ZW1lbnQpOgogICAgICAgIGV4cGxhbmF0aW9uID0gbWFrZV9zdGF0ZW1lbnRbImNyaW1lIl0uZXhwbGFpbl9zYW1lX21lYW5pbmcoCiAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJjcmltZV9ib2IiXQogICAgICAgICkKICAgICAgICBsZWZ0ID0gRmFjdG9yR3JvdXAoW21ha2Vfc3RhdGVtZW50WyJzaG9vdGluZ19jcmFpZyJdLCBtYWtlX3N0YXRlbWVudFsibGVzcyJdXSkKICAgICAgICByaWdodCA9IEZhY3Rvckdyb3VwKFttYWtlX3N0YXRlbWVudFsibXVyZGVyX2NyYWlnIl0sIG1ha2Vfc3RhdGVtZW50WyJtb3JlIl1dKQogICAgICAgIG5ldyA9IGxlZnQuZXhwbGFpbl9jb250cmFkaWN0aW9uKHJpZ2h0LCBjb250ZXh0PWV4cGxhbmF0aW9uKQogICAgICAgIGFzc2VydCBsZW4obmV3LnJlYXNvbnMpID09IDIKICAgICAgICBhc3NlcnQgbmV3LnJlYXNvbnNbMV0ub3BlcmF0aW9uID09IGNvbnRyYWRpY3RzCgogICAgZGVmIHRlc3Rfc2FtZV9tZWFuaW5nX2xvbmdfZ3JvdXAoc2VsZiwgbWFrZV9zdGF0ZW1lbnQpOgogICAgICAgIGV4cGxhbmF0aW9uID0gbWFrZV9zdGF0ZW1lbnRbImNyaW1lIl0uZXhwbGFpbl9zYW1lX21lYW5pbmcoCiAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJjcmltZV9jcmFpZyJdCiAgICAgICAgKQogICAgICAgIGxlZnQgPSBGYWN0b3JHcm91cCgKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgbWFrZV9zdGF0ZW1lbnRbImxhcmdlX3dlaWdodCJdLAogICAgICAgICAgICAgICAgbWFrZV9zdGF0ZW1lbnRbIm11cmRlciJdLAogICAgICAgICAgICAgICAgbWFrZV9zdGF0ZW1lbnRbIm5vX2NvbnRleHQiXSwKICAgICAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJzaG9vdGluZyJdLAogICAgICAgICAgICBdCiAgICAgICAgKQogICAgICAgIHJpZ2h0ID0gRmFjdG9yR3JvdXAoCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJsYXJnZV93ZWlnaHRfY3JhaWciXSwKICAgICAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJtdXJkZXJfY3JhaWciXSwKICAgICAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJzaG9vdGluZ19jcmFpZyJdLAogICAgICAgICAgICAgICAgbWFrZV9zdGF0ZW1lbnRbIm5vX2NvbnRleHQiXSwKICAgICAgICAgICAgXQogICAgICAgICkKICAgICAgICBuZXcgPSBsZWZ0LmV4cGxhaW5fc2FtZV9tZWFuaW5nKHJpZ2h0LCBleHBsYW5hdGlvbikKICAgICAgICBhc3NlcnQgbGVuKG5ldy5yZWFzb25zKSA9PSA1CgogICAgZGVmIHRlc3Rfbm90X3NhbWVfbWVhbmluZ19ub19mYWN0b3JfbWF0Y2goc2VsZiwgbWFrZV9zdGF0ZW1lbnQpOgogICAgICAgIGV4cGxhbmF0aW9uID0gbWFrZV9zdGF0ZW1lbnRbImNyaW1lX2NyYWlnIl0uZXhwbGFpbl9zYW1lX21lYW5pbmcoCiAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJjcmltZSJdCiAgICAgICAgKQogICAgICAgIGxlZnQgPSBGYWN0b3JHcm91cCgKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgbWFrZV9zdGF0ZW1lbnRbImxhcmdlX3dlaWdodCJdLAogICAgICAgICAgICAgICAgbWFrZV9zdGF0ZW1lbnRbIm11cmRlcl9lbnRpdHlfb3JkZXIiXSwKICAgICAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJub19jb250ZXh0Il0sCiAgICAgICAgICAgICAgICBtYWtlX3N0YXRlbWVudFsic2hvb3RpbmciXSwKICAgICAgICAgICAgXQogICAgICAgICkKICAgICAgICByaWdodCA9IEZhY3Rvckdyb3VwKAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICBtYWtlX3N0YXRlbWVudFsibGFyZ2Vfd2VpZ2h0X2NyYWlnIl0sCiAgICAgICAgICAgICAgICBtYWtlX3N0YXRlbWVudFsibXVyZGVyX2NyYWlnIl0sCiAgICAgICAgICAgICAgICBtYWtlX3N0YXRlbWVudFsic2hvb3RpbmdfY3JhaWciXSwKICAgICAgICAgICAgICAgIG1ha2Vfc3RhdGVtZW50WyJub19jb250ZXh0Il0sCiAgICAgICAgICAgIF0KICAgICAgICApCiAgICAgICAgbmV3ID0gcmlnaHQuZXhwbGFpbl9zYW1lX21lYW5pbmcobGVmdCwgZXhwbGFuYXRpb24pCiAgICAgICAgYXNzZXJ0IG5ldyBpcyBOb25lCgoKY2xhc3MgVGVzdEFwcGx5T3BlcmF0aW9uOgogICAgZGVmIHRlc3RfbWVhbnNfdG9fY29udHJhZGljdHNfZnJvbV9leHBsYW5hdGlvbihzZWxmLCBtYWtlX3N0YXRlbWVudCk6CiAgICAgICAgZXhwbGFuYXRpb24gPSBtYWtlX3N0YXRlbWVudFsiY3JpbWUiXS5leHBsYWluX3NhbWVfbWVhbmluZygKICAgICAgICAgICAgbWFrZV9zdGF0ZW1lbnRbImNyaW1lX2JvYiJdCiAgICAgICAgKQogICAgICAgIGxlZnQgPSBGYWN0b3JHcm91cChbbWFrZV9zdGF0ZW1lbnRbInNob290aW5nX2NyYWlnIl0sIG1ha2Vfc3RhdGVtZW50WyJsZXNzIl1dKQogICAgICAgIHJpZ2h0ID0gRmFjdG9yR3JvdXAoW21ha2Vfc3RhdGVtZW50WyJtdXJkZXJfY3JhaWciXSwgbWFrZV9zdGF0ZW1lbnRbIm1vcmUiXV0pCiAgICAgICAgZXhwbGFuYXRpb24ub3BlcmF0aW9uID0gY29udHJhZGljdHMKICAgICAgICBnZW4gPSBleHBsYW5hdGlvbi5vcGVyYXRlKGxlZnQsIHJpZ2h0KQogICAgICAgIG5ldyA9IG5leHQoZ2VuKQogICAgICAgIGFzc2VydCBsZW4obmV3LnJlYXNvbnMpID09IDIKICAgICAgICBhc3NlcnQgbmV3LnJlYXNvbnNbMV0ub3BlcmF0aW9uID09IGNvbnRyYWRpY3RzCgogICAgZGVmIHRlc3RfbWVhbnNfdG9fY29uc2lzdGVudF9mcm9tX2V4cGxhbmF0aW9uKHNlbGYsIG1ha2Vfc3RhdGVtZW50KToKICAgICAgICBleHBsYW5hdGlvbiA9IG1ha2Vfc3RhdGVtZW50WyJjcmltZSJdLmV4cGxhaW5fc2FtZV9tZWFuaW5nKAogICAgICAgICAgICBtYWtlX3N0YXRlbWVudFsiY3JpbWVfYm9iIl0KICAgICAgICApCiAgICAgICAgbGVmdCA9IEZhY3Rvckdyb3VwKFttYWtlX3N0YXRlbWVudFsic2hvb3RpbmdfY3JhaWciXSwgbWFrZV9zdGF0ZW1lbnRbImxlc3MiXV0pCiAgICAgICAgcmlnaHQgPSBGYWN0b3JHcm91cChbbWFrZV9zdGF0ZW1lbnRbIm11cmRlcl9jcmFpZyJdLCBtYWtlX3N0YXRlbWVudFsibW9yZSJdXSkKICAgICAgICBleHBsYW5hdGlvbi5vcGVyYXRpb24gPSBjb25zaXN0ZW50X3dpdGgKICAgICAgICBnZW4gPSBleHBsYW5hdGlvbi5vcGVyYXRlKGxlZnQsIHJpZ2h0KQogICAgICAgIG5ldyA9IG5leHQoZ2VuKQogICAgICAgIGFzc2VydCBsZW4obmV3LnJlYXNvbnMpID09IDIKICAgICAgICBhc3NlcnQgbmV3LnJlYXNvbnNbMV0ub3BlcmF0aW9uID09IGNvbnNpc3RlbnRfd2l0aAogICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG5ldy5yZWFzb25zWzFdLmxlZnQsIEZhY3Rvckdyb3VwKQoKICAgIGRlZiB0ZXN0X21lYW5zX3RvX2ltcGxpZWRfYnkoc2VsZiwgbWFrZV9zdGF0ZW1lbnQpOgogICAgICAgIGV4cGxhbmF0aW9uID0gbWFrZV9zdGF0ZW1lbnRbImNyaW1lX2JvYiJdLmV4cGxhaW5fc2FtZV9tZWFuaW5nKAogICAgICAgICAgICBtYWtlX3N0YXRlbWVudFsiY3JpbWUiXQogICAgICAgICkKICAgICAgICBsZWZ0ID0gRmFjdG9yR3JvdXAoW21ha2Vfc3RhdGVtZW50WyJzbWFsbF93ZWlnaHRfYm9iIl1dKQogICAgICAgIHJpZ2h0ID0gRmFjdG9yR3JvdXAoW21ha2Vfc3RhdGVtZW50WyJsYXJnZV93ZWlnaHQiXV0pCiAgICAgICAgbmV3ID0gbGVmdC5leHBsYWluX2ltcGxpZWRfYnkocmlnaHQsIGV4cGxhbmF0aW9uKQogICAgICAgIGFzc2VydCBsZW4obmV3LnJlYXNvbnMpID09IDIKICAgICAgICBhc3NlcnQgbmV3LnJlYXNvbnNbMV0ub3BlcmF0aW9uID09IG9wZXJhdG9yLmdlCgogICAgZGVmIHRlc3RfY2Fubm90X2FwcGx5X2x0KHNlbGYsIG1ha2Vfc3RhdGVtZW50KToKICAgICAgICBleHBsYW5hdGlvbiA9IG1ha2Vfc3RhdGVtZW50WyJjcmltZSJdLmV4cGxhaW5fc2FtZV9tZWFuaW5nKAogICAgICAgICAgICBtYWtlX3N0YXRlbWVudFsiY3JpbWVfYm9iIl0KICAgICAgICApCiAgICAgICAgbGVmdCA9IEZhY3Rvckdyb3VwKFttYWtlX3N0YXRlbWVudFsic2hvb3RpbmdfY3JhaWciXSwgbWFrZV9zdGF0ZW1lbnRbImxlc3MiXV0pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICByaWdodCA9IEZhY3Rvckdyb3VwKFttYWtlX3N0YXRlbWVudFsibXVyZGVyX2NyYWlnIl0sIG1ha2Vfc3RhdGVtZW50WyJtb3JlIl1dKQogICAgICAgIGV4cGxhbmF0aW9uLm9wZXJhdGlvbiA9IG9wZXJhdG9yLmx0CiAgICAgICAgZ2VuID0gZXhwbGFuYXRpb24ub3BlcmF0ZShsZWZ0LCByaWdodCkKICAgICAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVmFsdWVFcnJvcik6Cjx8ZmltX2VuZHw+"]
["e5672c3c261ed0fe20108d3000faa9242dc0e5e0-1","e5672c3c261ed0fe20108d3000faa9242dc0e5e0","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKZGVmIHBhaXJzKGxzLCBuKToKICBsLCBwLCBjbnQgPSBsZW4obHMpLCBbXSwgMAogIGZvciBpIGluIHhyYW5nZShsKToKICAgIGZvciBqIGluIHhyYW5nZShpKzEsIGwpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgIHMgPSBsc1tpXSArIGxzW2pdCiAgICAgIGlmIHMgPT0gbjoKICAgICAgICBwLmFwcGVuZChzdHIobHNbaV0pICsgIiwiICsgc3RyKGxzW2pdKSkKICAgICAgICBjbnQgKz0gMQo8fGZpbV9lbmR8Pg=="]
["e5ed00cd35cafc75f061b07961568cdb06025be3-1","e5ed00cd35cafc75f061b07961568cdb06025be3","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBDb3B5cmlnaHQgKGMpIFN5ZG5leSBFcmlja3NvbiAyMDE3CmltcG9ydCBidWlsZGxpYgppbXBvcnQgYnVpbGRzZXR0aW5ncwoKPHxmaW1fZW5kfD4="]
["e5ed00cd35cafc75f061b07961568cdb06025be3-2","e5ed00cd35cafc75f061b07961568cdb06025be3","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIFN5ZG5leSBFcmlja3NvbiAyMDE3Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IGJ1aWxkbGliCmltcG9ydCBidWlsZHNldHRpbmdzCgpidWlsZGxpYi5idWlsZF9jb25maWd1cmUoInlhc20tMS4zLjAudGFyLmd6IiwgIiIpCjx8ZmltX2VuZHw+"]
["978cddd7e20b0097a8adc73e23012d863a5524dd-1","978cddd7e20b0097a8adc73e23012d863a5524dd","PHxmaW1fcHJlZml4fD4KREVGQVVMVF9QT0lOVCA9IHsKICAgICduYW1lJzogMSwKICAgICdpbWFnZSc6IDgsCiAgICAnc3VtbWFyeSc6IDEsCiAgICAnZGVzY3JpcHRpb24nOiAxLAogICAgJ2ltYWdlcyc6IDUsCgoKICAgICd0b3BpY3MnOiAxLAoKICAgICdmYWNlYm9va191cmwnOiAyLAogICAgJ3R3aXR0ZXJfdXJsJzogMiwKICAgICMnbGlua2VkaW5fdXJsJzogMSwKICAgICdob21lcGFnZV91cmwnOiA1LAoKICAgICduYW1lX29mX3JlcHJlc2VudGF0aXZlJzogMiwKICAgICdlbWFpbF9vZl9jb250YWN0X3BlcnNvbic6IDUsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICMnZm9ybXNldF9fcGhvbmVfbnVtYmVyJzogNSwgIyBUT0RPOiBkZXRlY3Qgd2l0aCBmb3Jtc2V0CiAgICAnbG9jYXRpb25fb2Zfb3JnYW5pemF0aW9uc19oZWFkcXVhcnRlcnMnOiAyLAoKICAgICdwZW9wbGVzJzogMywKPHxmaW1fZW5kfD4="]
["99e08b1b3ffcdb9690154af5d2d8eee985b96346-1","99e08b1b3ffcdb9690154af5d2d8eee985b96346","PHxmaW1fcHJlZml4fD4KIiIiCkh1bWFuLWV4cGxhaW5hYmxlIEFJLgoKVGhpcyBpcyB0aGUgY2xhc3MgYW5kIGZ1bmN0aW9uIHJlZmVyZW5jZSBvZiBGQUNFVCBmb3IgYWR2YW5jZWQgbW9kZWwgc2VsZWN0aW9uLAppbnNwZWN0aW9uLCBhbmQgc2ltdWxhdGlvbi4KIiIiCgoKX192ZXJzaW9uX18gPSAiMS4yLjAiCgpfX2xvZ29fXyA9ICgKICAgIHIiIiIKICAgIF8gICAgICAgICBfX19fICAgIF8gICAgICAgICAgICAgICAgICAgICAgICAgXyAgICAgICBfX18gICAgICAgIF9fICAgX19fIF9fX19fCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIF8twrQgXy0gICAgICAvIF9fX1wgIC8gXCAgICAvXCAgL1wgICAvXCAgL1wgICAgLyBcICAgICB8ICAgICAvXCAgIC8gIGAgfCAgICAgIHwKPHxmaW1fZW5kfD4="]
["99e08b1b3ffcdb9690154af5d2d8eee985b96346-2","99e08b1b3ffcdb9690154af5d2d8eee985b96346","PHxmaW1fcHJlZml4fD4KIiIiCkh1bWFuLWV4cGxhaW5hYmxlIEFJLgoKVGhpcyBpcyB0aGUgY2xhc3MgYW5kIGZ1bmN0aW9uIHJlZmVyZW5jZSBvZiBGQUNFVCBmb3IgYWR2YW5jZWQgbW9kZWwgc2VsZWN0aW9uLAppbnNwZWN0aW9uLCBhbmQgc2ltdWxhdGlvbi4KIiIiCgoKX192ZXJzaW9uX18gPSAiMS4yLjAiCgpfX2xvZ29fXyA9ICgKICAgIHIiIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgXyAgICAgICAgIF9fX18gICAgXyAgICAgICAgICAgICAgICAgICAgICAgICBfICAgICAgIF9fXyAgICAgICAgX18gICBfX18gX19fX18KPHxmaW1fZW5kfD4="]
["99e08b1b3ffcdb9690154af5d2d8eee985b96346-3","99e08b1b3ffcdb9690154af5d2d8eee985b96346","PHxmaW1fcHJlZml4fD4KIiIiCkh1bWFuLWV4cGxhaW5hYmxlIEFJLgoKVGhpcyBpcyB0aGUgY2xhc3MgYW5kIGZ1bmN0aW9uIHJlZmVyZW5jZSBvZiBGQUNFVCBmb3IgYWR2YW5jZWQgbW9kZWwgc2VsZWN0aW9uLAppbnNwZWN0aW9uLCBhbmQgc2ltdWxhdGlvbi4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoiIiIKCgpfX3ZlcnNpb25fXyA9ICIxLjIuMCIKPHxmaW1fZW5kfD4="]
["99e08b1b3ffcdb9690154af5d2d8eee985b96346-4","99e08b1b3ffcdb9690154af5d2d8eee985b96346","PHxmaW1fcHJlZml4fD4KIiIiCkh1bWFuLWV4cGxhaW5hYmxlIEFJLgoKVGhpcyBpcyB0aGUgY2xhc3MgYW5kIGZ1bmN0aW9uIHJlZmVyZW5jZSBvZiBGQUNFVCBmb3IgYWR2YW5jZWQgbW9kZWwgc2VsZWN0aW9uLAppbnNwZWN0aW9uLCBhbmQgc2ltdWxhdGlvbi4KIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgpfX3ZlcnNpb25fXyA9ICIxLjIuMCIKCjx8ZmltX2VuZHw+"]
["c1402f79c46f752a4f26e897b772ccd406a94142-1","c1402f79c46f752a4f26e897b772ccd406a94142","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDEuMTAuNSBvbiAyMDIxLTAzLTMwIDEwOjQ5CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscwoKZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMsIG1vZGVscwoKCmNsYXNzIE1pZ3JhdGlvbihtaWdyYXRpb25zLk1pZ3JhdGlvbik6CgogICAgZGVwZW5kZW5jaWVzID0gWwogICAgICAgICgnc2VydmljZXMnLCAnMDAxNF9hdXRvXzIwMjAwMjA0XzEyMTgnKSwKICAgIF0KCiAgICBvcGVyYXRpb25zID0gWwogICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nc2VydmljZScsCiAgICAgICAgICAgIG5hbWU9J2JpbGxpbmdfcG9pbnQnLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuQ2hhckZpZWxkKGNob2ljZXM9WygnT05fUkVHSVNURVInLCAnUmVnaXN0cmF0aW9uIGRhdGUnKSwgKCdPTl9GSVhFRF9EQVRFJywgJ0V2ZXJ5IEphbnVhcnknKV0sIGRlZmF1bHQ9J09OX0ZJWEVEX0RBVEUnLCBoZWxwX3RleHQ9J1JlZmVyZW5jZSBwb2ludCBmb3IgY2FsY3VsYXRpbmcgdGhlIHJlbmV3YWwgZGF0ZSBvbiByZWN1cnJpbmcgaW52b2ljZXMnLCBtYXhfbGVuZ3RoPTE2LCB2ZXJib3NlX25hbWU9J2JpbGxpbmcgcG9pbnQnKSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdzZXJ2aWNlJywKICAgICAgICAgICAgbmFtZT0ncmF0ZV9hbGdvcml0aG0nLAo8fGZpbV9lbmR8Pg=="]
["eccf936320b49f02e14d666d1ce9b814e3536fb9-1","eccf936320b49f02e14d666d1ce9b814e3536fb9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCjx8ZmltX2hvbGV8PgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVwYXRoKToKICAgICAgICBzZWxmLmxpc3QgPSBbXQogICAgICAgIHNlbGYuZmlsZXBhdGggPSBmaWxlcGF0aAoKICAgIGRlZiBsZXhfZmlsZShzZWxmKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZpbGUgPSBvcGVuKHNlbGYuZmlsZXBhdGgsICJyIikKICAgICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgICAgcHJpbnQoIkZpbGUgZG9lc24ndCBleGlzdCIpCiAgICAgICAgICAgIGV4aXQoMSkKICAgICAgICAKICAgICAgICByZWdleCA9ICdcW3xcXXx7fH18XCh8XCl8O3xcLnwsfFthLXpBLVpdXHcqfFswLTldK3wtPnwtfH58IT18IXxcK3xcKnwvfD09fFx8XHx8JiZ8Jnw+PXw8PXw+fDx8JXw9fGNoYXJ8c2hvcnR8aW50fGxvbmd8aWZ8ZWxzZXxyZXR1cm58Zm9yfHdoaWxlfGRvfGJyZWFrfGNvbnRpbnVlfHR5cGVkZWZ8c3RydWN0JwogICAgICAgIHRva2VucyA9IFtdCiAgICAgICAgCiAgICAgICAgZm9yIGxpbmUgaW4gZmlsZS5yZWFkbGluZXMoKToKICAgICAgICAgICAgbWF0Y2ggPSByZS5maW5kYWxsKHJlZ2V4LCBsaW5lKQogICAgICAgICAgICB0b2tlbnMuZXh0ZW5kKG1hdGNoKQogICAgICAgICAgICAKICAgICAgICBmb3IgdG9rIGluIHRva2VuczoKICAgICAgICAgICAgbmV3X3Rva2VuID0gVG9rZW4odG9rKQogICAgICAgICAgICBuZXdfdG9rZW4uZ2V0X3Rva2VuX3R5cGUoKQogICAgICAgICAgICBzZWxmLmxpc3QuYXBwZW5kKG5ld190b2tlbikKCiAgICAgICAgZmlsZS5jbG9zZSgpCiAgICAgICAgcmV0dXJuIHNlbGYubGlzdAo8fGZpbV9zdWZmaXh8PgppbXBvcnQgc3lzCmZyb20gdG9rZW4gaW1wb3J0IFRva2VuCgpjbGFzcyBMZXhlcjoKPHxmaW1fZW5kfD4="]
["eccf936320b49f02e14d666d1ce9b814e3536fb9-2","eccf936320b49f02e14d666d1ce9b814e3536fb9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCmltcG9ydCBzeXMKZnJvbSB0b2tlbiBpbXBvcnQgVG9rZW4KCmNsYXNzIExleGVyOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVwYXRoKToKICAgICAgICBzZWxmLmxpc3QgPSBbXQogICAgICAgIHNlbGYuZmlsZXBhdGggPSBmaWxlcGF0aAoKICAgIGRlZiBsZXhfZmlsZShzZWxmKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZpbGUgPSBvcGVuKHNlbGYuZmlsZXBhdGgsICJyIikKICAgICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgICAgcHJpbnQoIkZpbGUgZG9lc24ndCBleGlzdCIpCiAgICAgICAgICAgIGV4aXQoMSkKICAgICAgICAKICAgICAgICByZWdleCA9ICdcW3xcXXx7fH18XCh8XCl8O3xcLnwsfFthLXpBLVpdXHcqfFswLTldK3wtPnwtfH58IT18IXxcK3xcKnwvfD09fFx8XHx8JiZ8Jnw+PXw8PXw+fDx8JXw9fGNoYXJ8c2hvcnR8aW50fGxvbmd8aWZ8ZWxzZXxyZXR1cm58Zm9yfHdoaWxlfGRvfGJyZWFrfGNvbnRpbnVlfHR5cGVkZWZ8c3RydWN0JwogICAgICAgIHRva2VucyA9IFtdCiAgICAgICAgCiAgICAgICAgZm9yIGxpbmUgaW4gZmlsZS5yZWFkbGluZXMoKToKICAgICAgICAgICAgbWF0Y2ggPSByZS5maW5kYWxsKHJlZ2V4LCBsaW5lKQogICAgICAgICAgICB0b2tlbnMuZXh0ZW5kKG1hdGNoKQogICAgICAgICAgICAKICAgICAgICBmb3IgdG9rIGluIHRva2VuczoKICAgICAgICAgICAgbmV3X3Rva2VuID0gVG9rZW4odG9rKQo8fGZpbV9ob2xlfD4KICAgICAgICBmaWxlLmNsb3NlKCkKICAgICAgICByZXR1cm4gc2VsZi5saXN0Cjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIG5ld190b2tlbi5nZXRfdG9rZW5fdHlwZSgpCiAgICAgICAgICAgIHNlbGYubGlzdC5hcHBlbmQobmV3X3Rva2VuKQoKPHxmaW1fZW5kfD4="]
["eccf936320b49f02e14d666d1ce9b814e3536fb9-3","eccf936320b49f02e14d666d1ce9b814e3536fb9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCmltcG9ydCBzeXMKZnJvbSB0b2tlbiBpbXBvcnQgVG9rZW4KCmNsYXNzIExleGVyOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVwYXRoKToKICAgICAgICBzZWxmLmxpc3QgPSBbXQogICAgICAgIHNlbGYuZmlsZXBhdGggPSBmaWxlcGF0aAo8fGZpbV9ob2xlfD4KICAgICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgICAgcHJpbnQoIkZpbGUgZG9lc24ndCBleGlzdCIpCiAgICAgICAgICAgIGV4aXQoMSkKICAgICAgICAKICAgICAgICByZWdleCA9ICdcW3xcXXx7fH18XCh8XCl8O3xcLnwsfFthLXpBLVpdXHcqfFswLTldK3wtPnwtfH58IT18IXxcK3xcKnwvfD09fFx8XHx8JiZ8Jnw+PXw8PXw+fDx8JXw9fGNoYXJ8c2hvcnR8aW50fGxvbmd8aWZ8ZWxzZXxyZXR1cm58Zm9yfHdoaWxlfGRvfGJyZWFrfGNvbnRpbnVlfHR5cGVkZWZ8c3RydWN0JwogICAgICAgIHRva2VucyA9IFtdCiAgICAgICAgCiAgICAgICAgZm9yIGxpbmUgaW4gZmlsZS5yZWFkbGluZXMoKToKICAgICAgICAgICAgbWF0Y2ggPSByZS5maW5kYWxsKHJlZ2V4LCBsaW5lKQogICAgICAgICAgICB0b2tlbnMuZXh0ZW5kKG1hdGNoKQogICAgICAgICAgICAKICAgICAgICBmb3IgdG9rIGluIHRva2VuczoKICAgICAgICAgICAgbmV3X3Rva2VuID0gVG9rZW4odG9rKQogICAgICAgICAgICBuZXdfdG9rZW4uZ2V0X3Rva2VuX3R5cGUoKQogICAgICAgICAgICBzZWxmLmxpc3QuYXBwZW5kKG5ld190b2tlbikKCiAgICAgICAgZmlsZS5jbG9zZSgpCiAgICAgICAgcmV0dXJuIHNlbGYubGlzdAo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiBsZXhfZmlsZShzZWxmKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZpbGUgPSBvcGVuKHNlbGYuZmlsZXBhdGgsICJyIikKPHxmaW1fZW5kfD4="]
["a9db16815a0ad2cf5861782ae1711d165941d696-1","a9db16815a0ad2cf5861782ae1711d165941d696","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGluc3BlY3QKZnJvbSB0eXBpbmcgaW1wb3J0IENhbGxhYmxlLCBEaWN0LCBUeXBlLCBVbmlvbgoKZnJvbSBzdGFybGV0dGUuYXBwbGljYXRpb25zIGltcG9ydCBTdGFybGV0dGUKZnJvbSBzdGFybGV0dGUuZW5kcG9pbnRzIGltcG9ydCBIVFRQRW5kcG9pbnQKZnJvbSBzdGFybGV0dGUucm91dGluZyBpbXBvcnQgUm91dGUKCmZyb20gcGFpdC5nIGltcG9ydCBwYWl0X2RhdGEKZnJvbSBwYWl0Lm1vZGVsLmNvcmUgaW1wb3J0IFBhaXRDb3JlTW9kZWwKCmZyb20gLl9hcHBfaGVscGVyIGltcG9ydCBBcHBIZWxwZXIKCl9fYWxsX18gPSBbImxvYWRfYXBwIl0KCgpkZWYgbG9hZF9hcHAoYXBwOiBTdGFybGV0dGUsIHByb2plY3RfbmFtZTogc3RyID0gIiIpIC0+IERpY3Rbc3RyLCBQYWl0Q29yZU1vZGVsXToKICAgICIiIlJlYWQgZGF0YSBmcm9tIHRoZSByb3V0ZSB0aGF0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgdG8gYHBhaXRgIiIiCiAgICBfcGFpdF9kYXRhOiBEaWN0W3N0ciwgUGFpdENvcmVNb2RlbF0gPSB7fQogICAgZm9yIHJvdXRlIGluIGFwcC5yb3V0ZXM6CiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uocm91dGUsIFJvdXRlKToKICAgICAgICAgICAgIyBub3Qgc3VwcG9ydAogICAgICAgICAgICBjb250aW51ZQogICAgICAgIHBhdGg6IHN0ciA9IHJvdXRlLnBhdGgKICAgICAgICBvcGVuYXBpX3BhdGg6IHN0ciA9IHBhdGgKICAgICAgICBtZXRob2Rfc2V0OiBzZXQgPSByb3V0ZS5tZXRob2RzIG9yIHNldCgpCiAgICAgICAgcm91dGVfbmFtZTogc3RyID0gcm91dGUubmFtZQogICAgICAgIGVuZHBvaW50OiBVbmlvbltDYWxsYWJsZSwgVHlwZV0gPSByb3V0ZS5lbmRwb2ludAogICAgICAgIHBhaXRfaWQ6IHN0ciA9IGdldGF0dHIocm91dGUuZW5kcG9pbnQsICJfcGFpdF9pZCIsIE5vbmUpCiAgICAgICAgaWYgbm90IHBhaXRfaWQgYW5kIGluc3BlY3QuaXNjbGFzcyhlbmRwb2ludCkgYW5kIGlzc3ViY2xhc3MoZW5kcG9pbnQsIEhUVFBFbmRwb2ludCk6ICAjIHR5cGU6IGlnbm9yZQogICAgICAgICAgICBmb3IgbWV0aG9kIGluIFsiZ2V0IiwgInBvc3QiLCAiaGVhZCIsICJvcHRpb25zIiwgImRlbGV0ZSIsICJwdXQiLCAidHJhY2UiLCAicGF0Y2giXToKICAgICAgICAgICAgICAgIG1ldGhvZF9lbmRwb2ludCA9IGdldGF0dHIoZW5kcG9pbnQsIG1ldGhvZCwgTm9uZSkKICAgICAgICAgICAgICAgIGlmIG5vdCBtZXRob2RfZW5kcG9pbnQ6CiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIG1ldGhvZF9zZXQgPSB7bWV0aG9kfQogICAgICAgICAgICAgICAgcGFpdF9pZCA9IGdldGF0dHIobWV0aG9kX2VuZHBvaW50LCAiX3BhaXRfaWQiLCBOb25lKQogICAgICAgICAgICAgICAgaWYgbm90IHBhaXRfaWQ6CiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIHBhaXRfZGF0YS5hZGRfcm91dGVfaW5mbygKICAgICAgICAgICAgICAgICAgICBBcHBIZWxwZXIuYXBwX25hbWUsIHBhaXRfaWQsIHBhdGgsIG9wZW5hcGlfcGF0aCwgbWV0aG9kX3NldCwgZiJ7cm91dGVfbmFtZX0ue21ldGhvZH0iLCBwcm9qZWN0X25hbWUKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIF9wYWl0X2RhdGFbcGFpdF9pZF0gPSBwYWl0X2RhdGEuZ2V0X3BhaXRfZGF0YShBcHBIZWxwZXIuYXBwX25hbWUsIHBhaXRfaWQpCiAgICAgICAgZWxpZiBwYWl0X2lkOgo8fGZpbV9ob2xlfD4KICAgIHJldHVybiBfcGFpdF9kYXRhCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHBhaXRfZGF0YS5hZGRfcm91dGVfaW5mbygKICAgICAgICAgICAgICAgIEFwcEhlbHBlci5hcHBfbmFtZSwgcGFpdF9pZCwgcGF0aCwgb3BlbmFwaV9wYXRoLCBtZXRob2Rfc2V0LCByb3V0ZV9uYW1lLCBwcm9qZWN0X25hbWUKICAgICAgICAgICAgKQogICAgICAgICAgICBfcGFpdF9kYXRhW3BhaXRfaWRdID0gcGFpdF9kYXRhLmdldF9wYWl0X2RhdGEoQXBwSGVscGVyLmFwcF9uYW1lLCBwYWl0X2lkKQo8fGZpbV9lbmR8Pg=="]
["a9db16815a0ad2cf5861782ae1711d165941d696-2","a9db16815a0ad2cf5861782ae1711d165941d696","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGluc3BlY3QKZnJvbSB0eXBpbmcgaW1wb3J0IENhbGxhYmxlLCBEaWN0LCBUeXBlLCBVbmlvbgoKZnJvbSBzdGFybGV0dGUuYXBwbGljYXRpb25zIGltcG9ydCBTdGFybGV0dGUKZnJvbSBzdGFybGV0dGUuZW5kcG9pbnRzIGltcG9ydCBIVFRQRW5kcG9pbnQKZnJvbSBzdGFybGV0dGUucm91dGluZyBpbXBvcnQgUm91dGUKCmZyb20gcGFpdC5nIGltcG9ydCBwYWl0X2RhdGEKZnJvbSBwYWl0Lm1vZGVsLmNvcmUgaW1wb3J0IFBhaXRDb3JlTW9kZWwKCmZyb20gLl9hcHBfaGVscGVyIGltcG9ydCBBcHBIZWxwZXIKCl9fYWxsX18gPSBbImxvYWRfYXBwIl0KCgpkZWYgbG9hZF9hcHAoYXBwOiBTdGFybGV0dGUsIHByb2plY3RfbmFtZTogc3RyID0gIiIpIC0+IERpY3Rbc3RyLCBQYWl0Q29yZU1vZGVsXToKICAgICIiIlJlYWQgZGF0YSBmcm9tIHRoZSByb3V0ZSB0aGF0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgdG8gYHBhaXRgIiIiCiAgICBfcGFpdF9kYXRhOiBEaWN0W3N0ciwgUGFpdENvcmVNb2RlbF0gPSB7fQogICAgZm9yIHJvdXRlIGluIGFwcC5yb3V0ZXM6CiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uocm91dGUsIFJvdXRlKToKICAgICAgICAgICAgIyBub3Qgc3VwcG9ydAogICAgICAgICAgICBjb250aW51ZQogICAgICAgIHBhdGg6IHN0ciA9IHJvdXRlLnBhdGgKICAgICAgICBvcGVuYXBpX3BhdGg6IHN0ciA9IHBhdGgKICAgICAgICBtZXRob2Rfc2V0OiBzZXQgPSByb3V0ZS5tZXRob2RzIG9yIHNldCgpCiAgICAgICAgcm91dGVfbmFtZTogc3RyID0gcm91dGUubmFtZQogICAgICAgIGVuZHBvaW50OiBVbmlvbltDYWxsYWJsZSwgVHlwZV0gPSByb3V0ZS5lbmRwb2ludAogICAgICAgIHBhaXRfaWQ6IHN0ciA9IGdldGF0dHIocm91dGUuZW5kcG9pbnQsICJfcGFpdF9pZCIsIE5vbmUpCiAgICAgICAgaWYgbm90IHBhaXRfaWQgYW5kIGluc3BlY3QuaXNjbGFzcyhlbmRwb2ludCkgYW5kIGlzc3ViY2xhc3MoZW5kcG9pbnQsIEhUVFBFbmRwb2ludCk6ICAjIHR5cGU6IGlnbm9yZQogICAgICAgICAgICBmb3IgbWV0aG9kIGluIFsiZ2V0IiwgInBvc3QiLCAiaGVhZCIsICJvcHRpb25zIiwgImRlbGV0ZSIsICJwdXQiLCAidHJhY2UiLCAicGF0Y2giXToKICAgICAgICAgICAgICAgIG1ldGhvZF9lbmRwb2ludCA9IGdldGF0dHIoZW5kcG9pbnQsIG1ldGhvZCwgTm9uZSkKICAgICAgICAgICAgICAgIGlmIG5vdCBtZXRob2RfZW5kcG9pbnQ6CiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIG1ldGhvZF9zZXQgPSB7bWV0aG9kfQogICAgICAgICAgICAgICAgcGFpdF9pZCA9IGdldGF0dHIobWV0aG9kX2VuZHBvaW50LCAiX3BhaXRfaWQiLCBOb25lKQogICAgICAgICAgICAgICAgaWYgbm90IHBhaXRfaWQ6CiAgICAgICAgICAgICAgICAgICAgY29udGludWUKPHxmaW1faG9sZXw+CiAgICAgICAgZWxpZiBwYWl0X2lkOgogICAgICAgICAgICBwYWl0X2RhdGEuYWRkX3JvdXRlX2luZm8oCiAgICAgICAgICAgICAgICBBcHBIZWxwZXIuYXBwX25hbWUsIHBhaXRfaWQsIHBhdGgsIG9wZW5hcGlfcGF0aCwgbWV0aG9kX3NldCwgcm91dGVfbmFtZSwgcHJvamVjdF9uYW1lCiAgICAgICAgICAgICkKICAgICAgICAgICAgX3BhaXRfZGF0YVtwYWl0X2lkXSA9IHBhaXRfZGF0YS5nZXRfcGFpdF9kYXRhKEFwcEhlbHBlci5hcHBfbmFtZSwgcGFpdF9pZCkKICAgIHJldHVybiBfcGFpdF9kYXRhCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICBwYWl0X2RhdGEuYWRkX3JvdXRlX2luZm8oCiAgICAgICAgICAgICAgICAgICAgQXBwSGVscGVyLmFwcF9uYW1lLCBwYWl0X2lkLCBwYXRoLCBvcGVuYXBpX3BhdGgsIG1ldGhvZF9zZXQsIGYie3JvdXRlX25hbWV9LnttZXRob2R9IiwgcHJvamVjdF9uYW1lCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICBfcGFpdF9kYXRhW3BhaXRfaWRdID0gcGFpdF9kYXRhLmdldF9wYWl0X2RhdGEoQXBwSGVscGVyLmFwcF9uYW1lLCBwYWl0X2lkKQo8fGZpbV9lbmR8Pg=="]
["a9db16815a0ad2cf5861782ae1711d165941d696-3","a9db16815a0ad2cf5861782ae1711d165941d696","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGluc3BlY3QKPHxmaW1faG9sZXw+CmZyb20gc3RhcmxldHRlLnJvdXRpbmcgaW1wb3J0IFJvdXRlCgpmcm9tIHBhaXQuZyBpbXBvcnQgcGFpdF9kYXRhCmZyb20gcGFpdC5tb2RlbC5jb3JlIGltcG9ydCBQYWl0Q29yZU1vZGVsCgpmcm9tIC5fYXBwX2hlbHBlciBpbXBvcnQgQXBwSGVscGVyCgpfX2FsbF9fID0gWyJsb2FkX2FwcCJdCgoKZGVmIGxvYWRfYXBwKGFwcDogU3RhcmxldHRlLCBwcm9qZWN0X25hbWU6IHN0ciA9ICIiKSAtPiBEaWN0W3N0ciwgUGFpdENvcmVNb2RlbF06CiAgICAiIiJSZWFkIGRhdGEgZnJvbSB0aGUgcm91dGUgdGhhdCBoYXMgYmVlbiByZWdpc3RlcmVkIHRvIGBwYWl0YCIiIgogICAgX3BhaXRfZGF0YTogRGljdFtzdHIsIFBhaXRDb3JlTW9kZWxdID0ge30KICAgIGZvciByb3V0ZSBpbiBhcHAucm91dGVzOgogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHJvdXRlLCBSb3V0ZSk6CiAgICAgICAgICAgICMgbm90IHN1cHBvcnQKICAgICAgICAgICAgY29udGludWUKICAgICAgICBwYXRoOiBzdHIgPSByb3V0ZS5wYXRoCiAgICAgICAgb3BlbmFwaV9wYXRoOiBzdHIgPSBwYXRoCiAgICAgICAgbWV0aG9kX3NldDogc2V0ID0gcm91dGUubWV0aG9kcyBvciBzZXQoKQogICAgICAgIHJvdXRlX25hbWU6IHN0ciA9IHJvdXRlLm5hbWUKICAgICAgICBlbmRwb2ludDogVW5pb25bQ2FsbGFibGUsIFR5cGVdID0gcm91dGUuZW5kcG9pbnQKICAgICAgICBwYWl0X2lkOiBzdHIgPSBnZXRhdHRyKHJvdXRlLmVuZHBvaW50LCAiX3BhaXRfaWQiLCBOb25lKQogICAgICAgIGlmIG5vdCBwYWl0X2lkIGFuZCBpbnNwZWN0LmlzY2xhc3MoZW5kcG9pbnQpIGFuZCBpc3N1YmNsYXNzKGVuZHBvaW50LCBIVFRQRW5kcG9pbnQpOiAgIyB0eXBlOiBpZ25vcmUKICAgICAgICAgICAgZm9yIG1ldGhvZCBpbiBbImdldCIsICJwb3N0IiwgImhlYWQiLCAib3B0aW9ucyIsICJkZWxldGUiLCAicHV0IiwgInRyYWNlIiwgInBhdGNoIl06CiAgICAgICAgICAgICAgICBtZXRob2RfZW5kcG9pbnQgPSBnZXRhdHRyKGVuZHBvaW50LCBtZXRob2QsIE5vbmUpCiAgICAgICAgICAgICAgICBpZiBub3QgbWV0aG9kX2VuZHBvaW50OgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBtZXRob2Rfc2V0ID0ge21ldGhvZH0KICAgICAgICAgICAgICAgIHBhaXRfaWQgPSBnZXRhdHRyKG1ldGhvZF9lbmRwb2ludCwgIl9wYWl0X2lkIiwgTm9uZSkKICAgICAgICAgICAgICAgIGlmIG5vdCBwYWl0X2lkOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBwYWl0X2RhdGEuYWRkX3JvdXRlX2luZm8oCiAgICAgICAgICAgICAgICAgICAgQXBwSGVscGVyLmFwcF9uYW1lLCBwYWl0X2lkLCBwYXRoLCBvcGVuYXBpX3BhdGgsIG1ldGhvZF9zZXQsIGYie3JvdXRlX25hbWV9LnttZXRob2R9IiwgcHJvamVjdF9uYW1lCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICBfcGFpdF9kYXRhW3BhaXRfaWRdID0gcGFpdF9kYXRhLmdldF9wYWl0X2RhdGEoQXBwSGVscGVyLmFwcF9uYW1lLCBwYWl0X2lkKQogICAgICAgIGVsaWYgcGFpdF9pZDoKICAgICAgICAgICAgcGFpdF9kYXRhLmFkZF9yb3V0ZV9pbmZvKAogICAgICAgICAgICAgICAgQXBwSGVscGVyLmFwcF9uYW1lLCBwYWl0X2lkLCBwYXRoLCBvcGVuYXBpX3BhdGgsIG1ldGhvZF9zZXQsIHJvdXRlX25hbWUsIHByb2plY3RfbmFtZQogICAgICAgICAgICApCiAgICAgICAgICAgIF9wYWl0X2RhdGFbcGFpdF9pZF0gPSBwYWl0X2RhdGEuZ2V0X3BhaXRfZGF0YShBcHBIZWxwZXIuYXBwX25hbWUsIHBhaXRfaWQpCiAgICByZXR1cm4gX3BhaXRfZGF0YQo8fGZpbV9zdWZmaXh8Pgpmcm9tIHR5cGluZyBpbXBvcnQgQ2FsbGFibGUsIERpY3QsIFR5cGUsIFVuaW9uCgpmcm9tIHN0YXJsZXR0ZS5hcHBsaWNhdGlvbnMgaW1wb3J0IFN0YXJsZXR0ZQpmcm9tIHN0YXJsZXR0ZS5lbmRwb2ludHMgaW1wb3J0IEhUVFBFbmRwb2ludAo8fGZpbV9lbmR8Pg=="]
["a9db16815a0ad2cf5861782ae1711d165941d696-4","a9db16815a0ad2cf5861782ae1711d165941d696","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGluc3BlY3QKZnJvbSB0eXBpbmcgaW1wb3J0IENhbGxhYmxlLCBEaWN0LCBUeXBlLCBVbmlvbgoKZnJvbSBzdGFybGV0dGUuYXBwbGljYXRpb25zIGltcG9ydCBTdGFybGV0dGUKZnJvbSBzdGFybGV0dGUuZW5kcG9pbnRzIGltcG9ydCBIVFRQRW5kcG9pbnQKZnJvbSBzdGFybGV0dGUucm91dGluZyBpbXBvcnQgUm91dGUKCmZyb20gcGFpdC5nIGltcG9ydCBwYWl0X2RhdGEKZnJvbSBwYWl0Lm1vZGVsLmNvcmUgaW1wb3J0IFBhaXRDb3JlTW9kZWwKCmZyb20gLl9hcHBfaGVscGVyIGltcG9ydCBBcHBIZWxwZXIKCl9fYWxsX18gPSBbImxvYWRfYXBwIl0KCgpkZWYgbG9hZF9hcHAoYXBwOiBTdGFybGV0dGUsIHByb2plY3RfbmFtZTogc3RyID0gIiIpIC0+IERpY3Rbc3RyLCBQYWl0Q29yZU1vZGVsXToKICAgICIiIlJlYWQgZGF0YSBmcm9tIHRoZSByb3V0ZSB0aGF0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgdG8gYHBhaXRgIiIiCiAgICBfcGFpdF9kYXRhOiBEaWN0W3N0ciwgUGFpdENvcmVNb2RlbF0gPSB7fQogICAgZm9yIHJvdXRlIGluIGFwcC5yb3V0ZXM6CiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uocm91dGUsIFJvdXRlKToKICAgICAgICAgICAgIyBub3Qgc3VwcG9ydAogICAgICAgICAgICBjb250aW51ZQogICAgICAgIHBhdGg6IHN0ciA9IHJvdXRlLnBhdGgKICAgICAgICBvcGVuYXBpX3BhdGg6IHN0ciA9IHBhdGgKICAgICAgICBtZXRob2Rfc2V0OiBzZXQgPSByb3V0ZS5tZXRob2RzIG9yIHNldCgpCiAgICAgICAgcm91dGVfbmFtZTogc3RyID0gcm91dGUubmFtZQogICAgICAgIGVuZHBvaW50OiBVbmlvbltDYWxsYWJsZSwgVHlwZV0gPSByb3V0ZS5lbmRwb2ludAogICAgICAgIHBhaXRfaWQ6IHN0ciA9IGdldGF0dHIocm91dGUuZW5kcG9pbnQsICJfcGFpdF9pZCIsIE5vbmUpCiAgICAgICAgaWYgbm90IHBhaXRfaWQgYW5kIGluc3BlY3QuaXNjbGFzcyhlbmRwb2ludCkgYW5kIGlzc3ViY2xhc3MoZW5kcG9pbnQsIEhUVFBFbmRwb2ludCk6ICAjIHR5cGU6IGlnbm9yZQogICAgICAgICAgICBmb3IgbWV0aG9kIGluIFsiZ2V0IiwgInBvc3QiLCAiaGVhZCIsICJvcHRpb25zIiwgImRlbGV0ZSIsICJwdXQiLCAidHJhY2UiLCAicGF0Y2giXToKICAgICAgICAgICAgICAgIG1ldGhvZF9lbmRwb2ludCA9IGdldGF0dHIoZW5kcG9pbnQsIG1ldGhvZCwgTm9uZSkKICAgICAgICAgICAgICAgIGlmIG5vdCBtZXRob2RfZW5kcG9pbnQ6CiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIG1ldGhvZF9zZXQgPSB7bWV0aG9kfQogICAgICAgICAgICAgICAgcGFpdF9pZCA9IGdldGF0dHIobWV0aG9kX2VuZHBvaW50LCAiX3BhaXRfaWQiLCBOb25lKQogICAgICAgICAgICAgICAgaWYgbm90IHBhaXRfaWQ6CiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIHBhaXRfZGF0YS5hZGRfcm91dGVfaW5mbygKICAgICAgICAgICAgICAgICAgICBBcHBIZWxwZXIuYXBwX25hbWUsIHBhaXRfaWQsIHBhdGgsIG9wZW5hcGlfcGF0aCwgbWV0aG9kX3NldCwgZiJ7cm91dGVfbmFtZX0ue21ldGhvZH0iLCBwcm9qZWN0X25hbWUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgX3BhaXRfZGF0YVtwYWl0X2lkXSA9IHBhaXRfZGF0YS5nZXRfcGFpdF9kYXRhKEFwcEhlbHBlci5hcHBfbmFtZSwgcGFpdF9pZCkKPHxmaW1fZW5kfD4="]
["01d4f4a498eb74d1f8dd61e12173077c03a38178-1","01d4f4a498eb74d1f8dd61e12173077c03a38178","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCgpmcm9tIC4uc2ltdWxhdG9ycy53b3JrZXIgaW1wb3J0IEJ5emFudGluZVdvcmtlcgoKCmNsYXNzIEJpdEZsaXBwaW5nV29ya2VyKEJ5emFudGluZVdvcmtlcik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBfX3N0cl9fKHNlbGYpIC0+IHN0cjoKICAgICAgICByZXR1cm4gIkJpdEZsaXBwaW5nV29ya2VyIgoKICAgIGRlZiBnZXRfZ3JhZGllbnQoc2VsZik6Cjx8ZmltX2VuZHw+"]
["01d4f4a498eb74d1f8dd61e12173077c03a38178-2","01d4f4a498eb74d1f8dd61e12173077c03a38178","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCgpmcm9tIC4uc2ltdWxhdG9ycy53b3JrZXIgaW1wb3J0IEJ5emFudGluZVdvcmtlcgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgQml0RmxpcHBpbmdXb3JrZXIoQnl6YW50aW5lV29ya2VyKToKICAgIGRlZiBfX3N0cl9fKHNlbGYpIC0+IHN0cjoKICAgICAgICByZXR1cm4gIkJpdEZsaXBwaW5nV29ya2VyIgo8fGZpbV9lbmR8Pg=="]
["01d4f4a498eb74d1f8dd61e12173077c03a38178-3","01d4f4a498eb74d1f8dd61e12173077c03a38178","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCgpmcm9tIC4uc2ltdWxhdG9ycy53b3JrZXIgaW1wb3J0IEJ5emFudGluZVdvcmtlcgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgQml0RmxpcHBpbmdXb3JrZXIoQnl6YW50aW5lV29ya2VyKToKICAgIGRlZiBfX3N0cl9fKHNlbGYpIC0+IHN0cjoKICAgICAgICByZXR1cm4gIkJpdEZsaXBwaW5nV29ya2VyIgo8fGZpbV9lbmR8Pg=="]
["01d4f4a498eb74d1f8dd61e12173077c03a38178-4","01d4f4a498eb74d1f8dd61e12173077c03a38178","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCgpmcm9tIC4uc2ltdWxhdG9ycy53b3JrZXIgaW1wb3J0IEJ5emFudGluZVdvcmtlcgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKY2xhc3MgQml0RmxpcHBpbmdXb3JrZXIoQnl6YW50aW5lV29ya2VyKToKICAgIGRlZiBfX3N0cl9fKHNlbGYpIC0+IHN0cjoKPHxmaW1fZW5kfD4="]
["01d4f4a498eb74d1f8dd61e12173077c03a38178-5","01d4f4a498eb74d1f8dd61e12173077c03a38178","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gLi5zaW11bGF0b3JzLndvcmtlciBpbXBvcnQgQnl6YW50aW5lV29ya2VyCgoKY2xhc3MgQml0RmxpcHBpbmdXb3JrZXIoQnl6YW50aW5lV29ya2VyKToKPHxmaW1fZW5kfD4="]
["9774b89cc44390dc98698ca72c0171018f0f3b89-1","9774b89cc44390dc98698ca72c0171018f0f3b89","PHxmaW1fcHJlZml4fD4KIyBQcm9ncmFtYSBwYXJhIGd1YXJkYXIgZW4gYXJjaGl2b3MgZGlzdGludGFzIHBlcm11dGFjaW9uZXMgZGUgbGFzCiMgY29tYmlhY2lvbmVzIHBvc2libGVzIHBhcmEgbGFzIGLDs3ZlZGFzIGRpZnVzYXMKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCByYW5kb20KaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQgcGF0aGxpYgppbXBvcnQgbWF0aCBhcyBtCgpkZWYgY29tYnMobixyKToKICByZXR1cm4gbS5mYWN0b3JpYWwobikvKG0uZmFjdG9yaWFsKHIpKm0uZmFjdG9yaWFsKG4tcikpCgpkZWYgcmVhZEZpbGUodGV4dEZpbGUsIG1ldGhvZCA9IDEpOgogICAgdmF1bHQgPSBbXQogICAgaWYgbWV0aG9kID09IDE6CiAgICAgICAgd2l0aCBvcGVuKHRleHRGaWxlKSBhcyBmaWxlOgogICAgICAgICAgICB2YXVsdCA9IFt0dXBsZShtYXAoaW50LG1hcChmbG9hdCwgbGluZS5yZXBsYWNlKCcgJywnJywyKS5zcGxpdCgnICAgJykpKSkgZm9yIGxpbmUgaW4gZmlsZV0KICAgICAgICByZXR1cm4gdmF1bHQKICAgIGVsaWYgbWV0aG9kID09IDI6CiAgICAgICAgd2l0aCBvcGVuKHRleHRGaWxlKSBhcyBmaWxlOgogICAgICAgICAgICB2YXVsdCA9IG5wLmFycmF5KFtsaXN0KG1hcChpbnQsbWFwKGZsb2F0LCBsaW5lLnJlcGxhY2UoJyAnLCcnLDIpLnNwbGl0KCcgICAnKSkpKSBmb3IgbGluZSBpbiBmaWxlXSkKICAgICAgICByZXR1cm4gdmF1bHQKCmRlZiBnZXRfZmlsZW5hbWVzX29mX3BhdGgocGF0aDogcGF0aGxpYi5QYXRoLCBleHQ6IHN0ciA9ICIqIik6CiAgICAiIiIKICAgIFJlZ3Jlc2EgdW5hIGxpc3RhIGRlIGFyY2hpdm9zIGVuIHVuIGRpcmVjdG9yaW8sIGRhZG8gY29tbyBvYmpldG8gZGUgcGF0aGxpYi4KICAgICIiIgogICAgZmlsZW5hbWVzID0gW2ZpbGUgZm9yIGZpbGUgaW4gcGF0aC5nbG9iKGV4dCkgaWYgZmlsZS5pc19maWxlKCldCiAgICBhc3NlcnQgbGVuKGZpbGVuYW1lcykgPiAwLCBmIk5vIGZpbGVzIGZvdW5kIGluIHBhdGg6IHtwYXRofSIKICAgIHJldHVybiBmaWxlbmFtZXMKCmRlZiBjcmVhdGVQZXJtcyhGVixzYXZlTixrPTgsbnBlcm1zPTUsIG1ldGhvZCA9IDApOgogICAgRlZOYW1lID0gRlYKICAgIHAgPSBwYXRobGliLlBhdGgoc3RyKEZWKVstMTQ6LTRdKQogICAgcGF0aCA9IHNhdmVOIC8gcAogICAgcGF0aC5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpCiAgICBGViA9IHJlYWRGaWxlKEZWKQo8fGZpbV9ob2xlfD4KICAgICAgICAjIHByaW50KCdMZW5naHQgcnBtOiB7fScuZm9ybWF0KGxlbihycG0pKSkKICAgICAgICBpZiBtZXRob2QgPT0gMDoKICAgICAgICAgICAgUFIgPSBbc3RyKGtDb21iaW5hdGlvbnNbaWR4XSkgZm9yIGlkeCBpbiBycG1dCiAgICAgICAgZWxzZToKICAgICAgICAgICAgUFIgPSBbc3RyKGlkeCkgZm9yIGlkeCBpbiBycG1dCiAgICAgICAgd2l0aCBvcGVuKCBwYXRoIC8gKHN0cihGVk5hbWUpWy0xNDotNF0rICdQZXJtJyArIHN0cihpKSArICcudHh0JyksICdhJykgYXMgZjoKICAgICAgICAgICAgZi53cml0ZWxpbmVzKCdcbicuam9pbihQUikpCiAgICAgICAgZi5jbG9zZSgpCgoKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKIyBlamVjaWNpw7NuIGRlIGxhcyBpdGVyYWNpb25lcy4KCmltcG9ydCBwYXRobGliCgpWYXVsdHMgPSBnZXRfZmlsZW5hbWVzX29mX3BhdGgocGF0aGxpYi5QYXRoKCdQcnVlYmFzL1ZhdWx0cycpKQoKCmZvciBpIGluIHJhbmdlKGxlbihWYXVsdHMpKToKICAgIGNyZWF0ZVBlcm1zKFZhdWx0c1tpXSwnUHJ1ZWJhcy9QZXJtcycpCgojIGltcG9ydCBudW1weSBhcyBucAojIHJwbSA9ICBucC5yYW5kb20ucGVybXV0YXRpb24oaW50KG1hdGguZmFjdG9yaWFsKDcyKS8obWF0aC5mYWN0b3JpYWwoOSkqbWF0aC5mYWN0b3JpYWwoNzItOSkpKSkuZHR5cGUoInVpbnQ4IikKIwojIGltcG9ydCBtYXRoCiMgKG1hdGguZmFjdG9yaWFsKDcyKS8obWF0aC5mYWN0b3JpYWwoOSkqbWF0aC5mYWN0b3JpYWwoNzItOSkpKS8xMDI0KiozCiMKIwojIGltcG9ydCBwYXRobGliCiMgcCA9IHBhdGhsaWIuUGF0aCgnSG9sYScrIi8iKQojIHAubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKQojIHAKPHxmaW1fc3VmZml4fD4KICAgICMgcHJpbnQoJ0xlbmdodCBGVjoge30sIGNhbGN1bG86IHt9Jy5mb3JtYXQobGVuKEZWKSwgY29tYnMobGVuKEZWKSxrKzEpKSkKICAgIGtDb21iaW5hdGlvbnMgPSBsaXN0KGl0ZXJ0b29scy5jb21iaW5hdGlvbnMoRlYsIGsgKyAxKSkKICAgIGZvciBpIGluIHJhbmdlKG5wZXJtcyk6CiAgICAgICAgcnBtID0gIG5wLnJhbmRvbS5wZXJtdXRhdGlvbihsZW4oa0NvbWJpbmF0aW9ucykpCjx8ZmltX2VuZHw+"]
["9774b89cc44390dc98698ca72c0171018f0f3b89-2","9774b89cc44390dc98698ca72c0171018f0f3b89","PHxmaW1fcHJlZml4fD4KIyBQcm9ncmFtYSBwYXJhIGd1YXJkYXIgZW4gYXJjaGl2b3MgZGlzdGludGFzIHBlcm11dGFjaW9uZXMgZGUgbGFzCiMgY29tYmlhY2lvbmVzIHBvc2libGVzIHBhcmEgbGFzIGLDs3ZlZGFzIGRpZnVzYXMKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCByYW5kb20KaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQgcGF0aGxpYgppbXBvcnQgbWF0aCBhcyBtCgpkZWYgY29tYnMobixyKToKICByZXR1cm4gbS5mYWN0b3JpYWwobikvKG0uZmFjdG9yaWFsKHIpKm0uZmFjdG9yaWFsKG4tcikpCgpkZWYgcmVhZEZpbGUodGV4dEZpbGUsIG1ldGhvZCA9IDEpOgogICAgdmF1bHQgPSBbXQogICAgaWYgbWV0aG9kID09IDE6CiAgICAgICAgd2l0aCBvcGVuKHRleHRGaWxlKSBhcyBmaWxlOgogICAgICAgICAgICB2YXVsdCA9IFt0dXBsZShtYXAoaW50LG1hcChmbG9hdCwgbGluZS5yZXBsYWNlKCcgJywnJywyKS5zcGxpdCgnICAgJykpKSkgZm9yIGxpbmUgaW4gZmlsZV0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJldHVybiB2YXVsdAo8fGZpbV9lbmR8Pg=="]
["9774b89cc44390dc98698ca72c0171018f0f3b89-3","9774b89cc44390dc98698ca72c0171018f0f3b89","PHxmaW1fcHJlZml4fD4KIyBQcm9ncmFtYSBwYXJhIGd1YXJkYXIgZW4gYXJjaGl2b3MgZGlzdGludGFzIHBlcm11dGFjaW9uZXMgZGUgbGFzCiMgY29tYmlhY2lvbmVzIHBvc2libGVzIHBhcmEgbGFzIGLDs3ZlZGFzIGRpZnVzYXMKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCByYW5kb20KaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQgcGF0aGxpYgppbXBvcnQgbWF0aCBhcyBtCgpkZWYgY29tYnMobixyKToKICByZXR1cm4gbS5mYWN0b3JpYWwobikvKG0uZmFjdG9yaWFsKHIpKm0uZmFjdG9yaWFsKG4tcikpCgpkZWYgcmVhZEZpbGUodGV4dEZpbGUsIG1ldGhvZCA9IDEpOgogICAgdmF1bHQgPSBbXQogICAgaWYgbWV0aG9kID09IDE6CiAgICAgICAgd2l0aCBvcGVuKHRleHRGaWxlKSBhcyBmaWxlOgogICAgICAgICAgICB2YXVsdCA9IFt0dXBsZShtYXAoaW50LG1hcChmbG9hdCwgbGluZS5yZXBsYWNlKCcgJywnJywyKS5zcGxpdCgnICAgJykpKSkgZm9yIGxpbmUgaW4gZmlsZV0KICAgICAgICByZXR1cm4gdmF1bHQKICAgIGVsaWYgbWV0aG9kID09IDI6CiAgICAgICAgd2l0aCBvcGVuKHRleHRGaWxlKSBhcyBmaWxlOgogICAgICAgICAgICB2YXVsdCA9IG5wLmFycmF5KFtsaXN0KG1hcChpbnQsbWFwKGZsb2F0LCBsaW5lLnJlcGxhY2UoJyAnLCcnLDIpLnNwbGl0KCcgICAnKSkpKSBmb3IgbGluZSBpbiBmaWxlXSkKICAgICAgICByZXR1cm4gdmF1bHQKCmRlZiBnZXRfZmlsZW5hbWVzX29mX3BhdGgocGF0aDogcGF0aGxpYi5QYXRoLCBleHQ6IHN0ciA9ICIqIik6CiAgICAiIiIKICAgIFJlZ3Jlc2EgdW5hIGxpc3RhIGRlIGFyY2hpdm9zIGVuIHVuIGRpcmVjdG9yaW8sIGRhZG8gY29tbyBvYmpldG8gZGUgcGF0aGxpYi4KICAgICIiIgogICAgZmlsZW5hbWVzID0gW2ZpbGUgZm9yIGZpbGUgaW4gcGF0aC5nbG9iKGV4dCkgaWYgZmlsZS5pc19maWxlKCldCiAgICBhc3NlcnQgbGVuKGZpbGVuYW1lcykgPiAwLCBmIk5vIGZpbGVzIGZvdW5kIGluIHBhdGg6IHtwYXRofSIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcmV0dXJuIGZpbGVuYW1lcwoKPHxmaW1fZW5kfD4="]
["416422da874f12cc5bb2de541e0b71a08ce42ba6-1","416422da874f12cc5bb2de541e0b71a08ce42ba6","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyA9ICd0b25ucGEnCgoKZGVmIGJ1aWxkX2FkamFjZW5jeV9saXN0KGFkal9saXN0LCBjb21tZW50cywgY29tbV9hdXRob3JzKToKICAgICIiIgogICAgQnVpbGRzIHRoZSBhZGphY2VuY3kgbGlzdCBieSBhcHBlbmRpbmcgdGhlIGF1dGhvcnMgYW5kIHRoZWlyCiAgICByZWxhdGlvbnMgdG8gb3RoZXIgYXV0aG9ycyBleHRyYWN0ZWQgZnJvbSB0aGUgY29tbWVudHMKICAgIDpwYXJhbSBjb21tX2F1dGhvcnM6IGRpY3Rpb25hcnkgdGhhdCBjb250YWlucyB3aGljaCBjb21tZW50cwogICAgICAgICAgIHdlcmUgd3JpdHRlbiBieSB3aG9tCiAgICAiIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZm9yIGNvbW1lbnQgaW4gY29tbWVudHM6CiAgICAgICAgIyBhbm9ueW1vdXMgcG9zdHMgZG8gbm90IGNvbnRyaWJ1dGUgdG8gYXV0aG9yIHJlbGF0aW9ucwogICAgICAgIGlmIG5vdCBjb21tZW50WydhdXRob3InXVsnaXNBbm9ueW1vdXMnXToKICAgICAgICAgICAgYXV0aG9yX3VuYW1lID0gY29tbWVudFsnYXV0aG9yJ11bJ3VzZXJuYW1lJ10KPHxmaW1fZW5kfD4="]
["416422da874f12cc5bb2de541e0b71a08ce42ba6-2","416422da874f12cc5bb2de541e0b71a08ce42ba6","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyA9ICd0b25ucGEnCgoKZGVmIGJ1aWxkX2FkamFjZW5jeV9saXN0KGFkal9saXN0LCBjb21tZW50cywgY29tbV9hdXRob3JzKToKICAgICIiIgogICAgQnVpbGRzIHRoZSBhZGphY2VuY3kgbGlzdCBieSBhcHBlbmRpbmcgdGhlIGF1dGhvcnMgYW5kIHRoZWlyCiAgICByZWxhdGlvbnMgdG8gb3RoZXIgYXV0aG9ycyBleHRyYWN0ZWQgZnJvbSB0aGUgY29tbWVudHMKICAgIDpwYXJhbSBjb21tX2F1dGhvcnM6IGRpY3Rpb25hcnkgdGhhdCBjb250YWlucyB3aGljaCBjb21tZW50cwogICAgICAgICAgIHdlcmUgd3JpdHRlbiBieSB3aG9tCiAgICAiIiIKICAgIGZvciBjb21tZW50IGluIGNvbW1lbnRzOgogICAgICAgICMgYW5vbnltb3VzIHBvc3RzIGRvIG5vdCBjb250cmlidXRlIHRvIGF1dGhvciByZWxhdGlvbnMKICAgICAgICBpZiBub3QgY29tbWVudFsnYXV0aG9yJ11bJ2lzQW5vbnltb3VzJ106CiAgICAgICAgICAgIGF1dGhvcl91bmFtZSA9IGNvbW1lbnRbJ2F1dGhvciddWyd1c2VybmFtZSddCiAgICAgICAgICAgIGF1dGhvcl9yZWdfZGF0ZSA9IGNvbW1lbnRbJ2F1dGhvciddWydqb2luZWRBdCddLnNwbGl0KCdUJylbMF0KICAgICAgICAgICAgY3JlYXRlZF9hdCA9IGNvbW1lbnRbJ2NyZWF0ZWRBdCddLnNwbGl0KCdUJylbMF0KCiAgICAgICAgICAgIGNvbW1fYXV0aG9yc1tjb21tZW50WydpZCddXSA9IGF1dGhvcl91bmFtZQoKICAgICAgICAgICAgaWYgYXV0aG9yX3VuYW1lIG5vdCBpbiBhZGpfbGlzdDoKICAgICAgICAgICAgICAgIGFkal9saXN0W2F1dGhvcl91bmFtZV0gPSB7fQogICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnam9pbmVkQXQnXSA9IGF1dGhvcl9yZWdfZGF0ZQogICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnaW5hY3RpdmVTaW5jZSddID0gYXV0aG9yX3JlZ19kYXRlCiAgICAgICAgICAgICAgICBhZGpfbGlzdFthdXRob3JfdW5hbWVdWydlZGdlcyddID0ge30KICAgICAgICAgICAgICAgIGFkal9saXN0W2F1dGhvcl91bmFtZV1bJ2xpa2VzJ10gPSAwCiAgICAgICAgICAgICAgICBhZGpfbGlzdFthdXRob3JfdW5hbWVdWydkaXNsaWtlcyddID0gMAoKICAgICAgICAgICAgIyBhZGQgbnVtYmVyIG9mIGxpa2VzIGFuZCBkaXNsaWtlcwogICAgICAgICAgICBhZGpfbGlzdFthdXRob3JfdW5hbWVdWydsaWtlcyddICs9IGNvbW1lbnRbJ2xpa2VzJ10KICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnZGlzbGlrZXMnXSArPSBjb21tZW50WydkaXNsaWtlcyddCiAgICAgICAgICAgICMgdXBkYXRlIHVzZXIgYWN0aXZpdHkKICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnaW5hY3RpdmVTaW5jZSddID0gbWF4KGNyZWF0ZWRfYXQsIGFkal9saXN0W2F1dGhvcl91bmFtZV1bJ2luYWN0aXZlU2luY2UnXSkKCiAgICAgICAgICAgICMgVHlwZUVycm9yOiBwYXJlbnQgaWQgaXMgbm90IHN1cnJvdW5kZWQgYnkgcXVvdGUgbWFya3MsIHRodXMgaXQKICAgICAgICAgICAgIyAgICAgICAgICAgIGlzIG5vdCBhIHN0cmluZyBsaWtlIHRoZSBvdGhlciBmaWVsZHMsIHJlcXVpcmVzIGNhc3RpbmcKICAgICAgICAgICAgcGFyZW50X2lkID0gc3RyKGNvbW1lbnRbJ3BhcmVudCddKQogICAgICAgICAgICBpZiBwYXJlbnRfaWQgIT0gJ05vbmUnIGFuZCBwYXJlbnRfaWQgaW4gY29tbV9hdXRob3JzOgogICAgICAgICAgICAgICAgcGFyZW50X2F1dGhvciA9IGNvbW1fYXV0aG9yc1twYXJlbnRfaWRdCiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIyBhZGQgYXV0aG9yIGFuZCBvdGhlciBkZXRhaWxzIGFzIGEgZGljdGlvbmFyeQogICAgICAgICAgICAgICAgICAgICMgdXBkYXRlIGRhdGUgb2YgbGFzdCBjb21tZW50CiAgICAgICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnZWRnZXMnXVtwYXJlbnRfYXV0aG9yXVsnY3JlYXRlZEF0J10gPSBcCiAgICAgICAgICAgICAgICAgICAgICAgIG1pbihjcmVhdGVkX2F0LCBhZGpfbGlzdFthdXRob3JfdW5hbWVdWydlZGdlcyddW3BhcmVudF9hdXRob3JdWydjcmVhdGVkQXQnXSkKICAgICAgICAgICAgICAgICAgICBhZGpfbGlzdFthdXRob3JfdW5hbWVdWydlZGdlcyddW3BhcmVudF9hdXRob3JdWydzdG9wcGVkQXQnXSA9IFwKICAgICAgICAgICAgICAgICAgICAgICAgbWF4KGNyZWF0ZWRfYXQsIGFkal9saXN0W2F1dGhvcl91bmFtZV1bJ2VkZ2VzJ11bcGFyZW50X2F1dGhvcl1bJ3N0b3BwZWRBdCddKQoKICAgICAgICAgICAgICAgICAgICBhZGpfbGlzdFthdXRob3JfdW5hbWVdWydlZGdlcyddW3BhcmVudF9hdXRob3JdWydpbnRlcmFjdGlvbnMnXSArPSAxCiAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIyBwYXJlbnRfYXV0aG9yIHdhcyB1bmtub3duCiAgICAgICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnZWRnZXMnXVtwYXJlbnRfYXV0aG9yXSA9IHt9CiAgICAgICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnZWRnZXMnXVtwYXJlbnRfYXV0aG9yXVsnY3JlYXRlZEF0J10gPSBjcmVhdGVkX2F0CiAgICAgICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnZWRnZXMnXVtwYXJlbnRfYXV0aG9yXVsnc3RvcHBlZEF0J10gPSBjcmVhdGVkX2F0CiAgICAgICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnZWRnZXMnXVtwYXJlbnRfYXV0aG9yXVsnaW50ZXJhY3Rpb25zJ10gPSAxCgoKZGVmIGJ1aWxkX2dyYXBoKGdyYXBoLCBhZGphY2VuY3lfbGlzdCk6CiAgICAiIiIKICAgIEJ1aWxkcyB0aGUgZ3JhcGhzIGJ5IGFwcGVuZGluZyB0aGUgbm9kZXMgYW5kIGVkZ2VzIGRlZmluZWQKICAgIGluIHRoZSBhZGphY2VuY3lfbGlzdAogICAgOnBhcmFtIGdyYXBoOiB0aGUgZ3JhcGhzIHRvIHdoaWNoIGVsZW1lbnRzIGFyZSBhcHBlbmRlZAogICAgIiIiCiAgICAjIG5vZGVzCiAgICBmb3Igbm9kZSBpbiBhZGphY2VuY3lfbGlzdDoKICAgICAgICBncmFwaC5hZGRfbm9kZShub2RlLAogICAgICAgICAgICAgICAgICAgICAgIGpvaW5lZEF0PWFkamFjZW5jeV9saXN0W25vZGVdWydqb2luZWRBdCddLAogICAgICAgICAgICAgICAgICAgICAgIGluYWN0aXZlU2luY2U9YWRqYWNlbmN5X2xpc3Rbbm9kZV1bJ2luYWN0aXZlU2luY2UnXSwKICAgICAgICAgICAgICAgICAgICAgICBsaWtlcz1hZGphY2VuY3lfbGlzdFtub2RlXVsnbGlrZXMnXSwKICAgICAgICAgICAgICAgICAgICAgICBkaXNsaWtlcz1hZGphY2VuY3lfbGlzdFtub2RlXVsnZGlzbGlrZXMnXSkKICAgICMgZWRnZXMKICAgIGZvciBub2RlIGluIGFkamFjZW5jeV9saXN0OgogICAgICAgIGVkZ2VzID0gYWRqYWNlbmN5X2xpc3Rbbm9kZV1bJ2VkZ2VzJ10KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGZvciB0b19ub2RlLCBhdHRyaWJ1dGVzIGluIGVkZ2VzLml0ZW1zKCk6CiAgICAgICAgICAgIGdyYXBoLmFkZF9lZGdlKG5vZGUsIHRvX25vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRBdD1hdHRyaWJ1dGVzWydjcmVhdGVkQXQnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHBlZEF0PWF0dHJpYnV0ZXNbJ3N0b3BwZWRBdCddLAo8fGZpbV9lbmR8Pg=="]
["416422da874f12cc5bb2de541e0b71a08ce42ba6-3","416422da874f12cc5bb2de541e0b71a08ce42ba6","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyA9ICd0b25ucGEnCgoKZGVmIGJ1aWxkX2FkamFjZW5jeV9saXN0KGFkal9saXN0LCBjb21tZW50cywgY29tbV9hdXRob3JzKToKICAgICIiIgogICAgQnVpbGRzIHRoZSBhZGphY2VuY3kgbGlzdCBieSBhcHBlbmRpbmcgdGhlIGF1dGhvcnMgYW5kIHRoZWlyCiAgICByZWxhdGlvbnMgdG8gb3RoZXIgYXV0aG9ycyBleHRyYWN0ZWQgZnJvbSB0aGUgY29tbWVudHMKICAgIDpwYXJhbSBjb21tX2F1dGhvcnM6IGRpY3Rpb25hcnkgdGhhdCBjb250YWlucyB3aGljaCBjb21tZW50cwogICAgICAgICAgIHdlcmUgd3JpdHRlbiBieSB3aG9tCiAgICAiIiIKICAgIGZvciBjb21tZW50IGluIGNvbW1lbnRzOgogICAgICAgICMgYW5vbnltb3VzIHBvc3RzIGRvIG5vdCBjb250cmlidXRlIHRvIGF1dGhvciByZWxhdGlvbnMKICAgICAgICBpZiBub3QgY29tbWVudFsnYXV0aG9yJ11bJ2lzQW5vbnltb3VzJ106CiAgICAgICAgICAgIGF1dGhvcl91bmFtZSA9IGNvbW1lbnRbJ2F1dGhvciddWyd1c2VybmFtZSddCiAgICAgICAgICAgIGF1dGhvcl9yZWdfZGF0ZSA9IGNvbW1lbnRbJ2F1dGhvciddWydqb2luZWRBdCddLnNwbGl0KCdUJylbMF0KICAgICAgICAgICAgY3JlYXRlZF9hdCA9IGNvbW1lbnRbJ2NyZWF0ZWRBdCddLnNwbGl0KCdUJylbMF0KCiAgICAgICAgICAgIGNvbW1fYXV0aG9yc1tjb21tZW50WydpZCddXSA9IGF1dGhvcl91bmFtZQoKICAgICAgICAgICAgaWYgYXV0aG9yX3VuYW1lIG5vdCBpbiBhZGpfbGlzdDoKICAgICAgICAgICAgICAgIGFkal9saXN0W2F1dGhvcl91bmFtZV0gPSB7fQogICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnam9pbmVkQXQnXSA9IGF1dGhvcl9yZWdfZGF0ZQogICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnaW5hY3RpdmVTaW5jZSddID0gYXV0aG9yX3JlZ19kYXRlCiAgICAgICAgICAgICAgICBhZGpfbGlzdFthdXRob3JfdW5hbWVdWydlZGdlcyddID0ge30KICAgICAgICAgICAgICAgIGFkal9saXN0W2F1dGhvcl91bmFtZV1bJ2xpa2VzJ10gPSAwCiAgICAgICAgICAgICAgICBhZGpfbGlzdFthdXRob3JfdW5hbWVdWydkaXNsaWtlcyddID0gMAoKICAgICAgICAgICAgIyBhZGQgbnVtYmVyIG9mIGxpa2VzIGFuZCBkaXNsaWtlcwogICAgICAgICAgICBhZGpfbGlzdFthdXRob3JfdW5hbWVdWydsaWtlcyddICs9IGNvbW1lbnRbJ2xpa2VzJ10KICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnZGlzbGlrZXMnXSArPSBjb21tZW50WydkaXNsaWtlcyddCiAgICAgICAgICAgICMgdXBkYXRlIHVzZXIgYWN0aXZpdHkKICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnaW5hY3RpdmVTaW5jZSddID0gbWF4KGNyZWF0ZWRfYXQsIGFkal9saXN0W2F1dGhvcl91bmFtZV1bJ2luYWN0aXZlU2luY2UnXSkKCiAgICAgICAgICAgICMgVHlwZUVycm9yOiBwYXJlbnQgaWQgaXMgbm90IHN1cnJvdW5kZWQgYnkgcXVvdGUgbWFya3MsIHRodXMgaXQKICAgICAgICAgICAgIyAgICAgICAgICAgIGlzIG5vdCBhIHN0cmluZyBsaWtlIHRoZSBvdGhlciBmaWVsZHMsIHJlcXVpcmVzIGNhc3RpbmcKICAgICAgICAgICAgcGFyZW50X2lkID0gc3RyKGNvbW1lbnRbJ3BhcmVudCddKQogICAgICAgICAgICBpZiBwYXJlbnRfaWQgIT0gJ05vbmUnIGFuZCBwYXJlbnRfaWQgaW4gY29tbV9hdXRob3JzOgogICAgICAgICAgICAgICAgcGFyZW50X2F1dGhvciA9IGNvbW1fYXV0aG9yc1twYXJlbnRfaWRdCiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIyBhZGQgYXV0aG9yIGFuZCBvdGhlciBkZXRhaWxzIGFzIGEgZGljdGlvbmFyeQogICAgICAgICAgICAgICAgICAgICMgdXBkYXRlIGRhdGUgb2YgbGFzdCBjb21tZW50CiAgICAgICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnZWRnZXMnXVtwYXJlbnRfYXV0aG9yXVsnY3JlYXRlZEF0J10gPSBcCiAgICAgICAgICAgICAgICAgICAgICAgIG1pbihjcmVhdGVkX2F0LCBhZGpfbGlzdFthdXRob3JfdW5hbWVdWydlZGdlcyddW3BhcmVudF9hdXRob3JdWydjcmVhdGVkQXQnXSkKICAgICAgICAgICAgICAgICAgICBhZGpfbGlzdFthdXRob3JfdW5hbWVdWydlZGdlcyddW3BhcmVudF9hdXRob3JdWydzdG9wcGVkQXQnXSA9IFwKICAgICAgICAgICAgICAgICAgICAgICAgbWF4KGNyZWF0ZWRfYXQsIGFkal9saXN0W2F1dGhvcl91bmFtZV1bJ2VkZ2VzJ11bcGFyZW50X2F1dGhvcl1bJ3N0b3BwZWRBdCddKQoKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIyBwYXJlbnRfYXV0aG9yIHdhcyB1bmtub3duCiAgICAgICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnZWRnZXMnXVtwYXJlbnRfYXV0aG9yXSA9IHt9CiAgICAgICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnZWRnZXMnXVtwYXJlbnRfYXV0aG9yXVsnY3JlYXRlZEF0J10gPSBjcmVhdGVkX2F0CiAgICAgICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnZWRnZXMnXVtwYXJlbnRfYXV0aG9yXVsnc3RvcHBlZEF0J10gPSBjcmVhdGVkX2F0CiAgICAgICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnZWRnZXMnXVtwYXJlbnRfYXV0aG9yXVsnaW50ZXJhY3Rpb25zJ10gPSAxCgoKZGVmIGJ1aWxkX2dyYXBoKGdyYXBoLCBhZGphY2VuY3lfbGlzdCk6CiAgICAiIiIKICAgIEJ1aWxkcyB0aGUgZ3JhcGhzIGJ5IGFwcGVuZGluZyB0aGUgbm9kZXMgYW5kIGVkZ2VzIGRlZmluZWQKICAgIGluIHRoZSBhZGphY2VuY3lfbGlzdAogICAgOnBhcmFtIGdyYXBoOiB0aGUgZ3JhcGhzIHRvIHdoaWNoIGVsZW1lbnRzIGFyZSBhcHBlbmRlZAogICAgIiIiCiAgICAjIG5vZGVzCiAgICBmb3Igbm9kZSBpbiBhZGphY2VuY3lfbGlzdDoKICAgICAgICBncmFwaC5hZGRfbm9kZShub2RlLAogICAgICAgICAgICAgICAgICAgICAgIGpvaW5lZEF0PWFkamFjZW5jeV9saXN0W25vZGVdWydqb2luZWRBdCddLAogICAgICAgICAgICAgICAgICAgICAgIGluYWN0aXZlU2luY2U9YWRqYWNlbmN5X2xpc3Rbbm9kZV1bJ2luYWN0aXZlU2luY2UnXSwKICAgICAgICAgICAgICAgICAgICAgICBsaWtlcz1hZGphY2VuY3lfbGlzdFtub2RlXVsnbGlrZXMnXSwKICAgICAgICAgICAgICAgICAgICAgICBkaXNsaWtlcz1hZGphY2VuY3lfbGlzdFtub2RlXVsnZGlzbGlrZXMnXSkKICAgICMgZWRnZXMKICAgIGZvciBub2RlIGluIGFkamFjZW5jeV9saXN0OgogICAgICAgIGVkZ2VzID0gYWRqYWNlbmN5X2xpc3Rbbm9kZV1bJ2VkZ2VzJ10KICAgICAgICBmb3IgdG9fbm9kZSwgYXR0cmlidXRlcyBpbiBlZGdlcy5pdGVtcygpOgogICAgICAgICAgICBncmFwaC5hZGRfZWRnZShub2RlLCB0b19ub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXQ9YXR0cmlidXRlc1snY3JlYXRlZEF0J10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BwZWRBdD1hdHRyaWJ1dGVzWydzdG9wcGVkQXQnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3Rpb25zPWF0dHJpYnV0ZXNbJ2ludGVyYWN0aW9ucyddKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgIGFkal9saXN0W2F1dGhvcl91bmFtZV1bJ2VkZ2VzJ11bcGFyZW50X2F1dGhvcl1bJ2ludGVyYWN0aW9ucyddICs9IDEKPHxmaW1fZW5kfD4="]
["416422da874f12cc5bb2de541e0b71a08ce42ba6-4","416422da874f12cc5bb2de541e0b71a08ce42ba6","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyA9ICd0b25ucGEnCgoKZGVmIGJ1aWxkX2FkamFjZW5jeV9saXN0KGFkal9saXN0LCBjb21tZW50cywgY29tbV9hdXRob3JzKToKICAgICIiIgogICAgQnVpbGRzIHRoZSBhZGphY2VuY3kgbGlzdCBieSBhcHBlbmRpbmcgdGhlIGF1dGhvcnMgYW5kIHRoZWlyCiAgICByZWxhdGlvbnMgdG8gb3RoZXIgYXV0aG9ycyBleHRyYWN0ZWQgZnJvbSB0aGUgY29tbWVudHMKICAgIDpwYXJhbSBjb21tX2F1dGhvcnM6IGRpY3Rpb25hcnkgdGhhdCBjb250YWlucyB3aGljaCBjb21tZW50cwogICAgICAgICAgIHdlcmUgd3JpdHRlbiBieSB3aG9tCiAgICAiIiIKICAgIGZvciBjb21tZW50IGluIGNvbW1lbnRzOgogICAgICAgICMgYW5vbnltb3VzIHBvc3RzIGRvIG5vdCBjb250cmlidXRlIHRvIGF1dGhvciByZWxhdGlvbnMKICAgICAgICBpZiBub3QgY29tbWVudFsnYXV0aG9yJ11bJ2lzQW5vbnltb3VzJ106CiAgICAgICAgICAgIGF1dGhvcl91bmFtZSA9IGNvbW1lbnRbJ2F1dGhvciddWyd1c2VybmFtZSddCiAgICAgICAgICAgIGF1dGhvcl9yZWdfZGF0ZSA9IGNvbW1lbnRbJ2F1dGhvciddWydqb2luZWRBdCddLnNwbGl0KCdUJylbMF0KICAgICAgICAgICAgY3JlYXRlZF9hdCA9IGNvbW1lbnRbJ2NyZWF0ZWRBdCddLnNwbGl0KCdUJylbMF0KCiAgICAgICAgICAgIGNvbW1fYXV0aG9yc1tjb21tZW50WydpZCddXSA9IGF1dGhvcl91bmFtZQoKICAgICAgICAgICAgaWYgYXV0aG9yX3VuYW1lIG5vdCBpbiBhZGpfbGlzdDoKICAgICAgICAgICAgICAgIGFkal9saXN0W2F1dGhvcl91bmFtZV0gPSB7fQogICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnam9pbmVkQXQnXSA9IGF1dGhvcl9yZWdfZGF0ZQogICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnaW5hY3RpdmVTaW5jZSddID0gYXV0aG9yX3JlZ19kYXRlCiAgICAgICAgICAgICAgICBhZGpfbGlzdFthdXRob3JfdW5hbWVdWydlZGdlcyddID0ge30KICAgICAgICAgICAgICAgIGFkal9saXN0W2F1dGhvcl91bmFtZV1bJ2xpa2VzJ10gPSAwCiAgICAgICAgICAgICAgICBhZGpfbGlzdFthdXRob3JfdW5hbWVdWydkaXNsaWtlcyddID0gMAoKICAgICAgICAgICAgIyBhZGQgbnVtYmVyIG9mIGxpa2VzIGFuZCBkaXNsaWtlcwogICAgICAgICAgICBhZGpfbGlzdFthdXRob3JfdW5hbWVdWydsaWtlcyddICs9IGNvbW1lbnRbJ2xpa2VzJ10KICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnZGlzbGlrZXMnXSArPSBjb21tZW50WydkaXNsaWtlcyddCiAgICAgICAgICAgICMgdXBkYXRlIHVzZXIgYWN0aXZpdHkKICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnaW5hY3RpdmVTaW5jZSddID0gbWF4KGNyZWF0ZWRfYXQsIGFkal9saXN0W2F1dGhvcl91bmFtZV1bJ2luYWN0aXZlU2luY2UnXSkKCiAgICAgICAgICAgICMgVHlwZUVycm9yOiBwYXJlbnQgaWQgaXMgbm90IHN1cnJvdW5kZWQgYnkgcXVvdGUgbWFya3MsIHRodXMgaXQKICAgICAgICAgICAgIyAgICAgICAgICAgIGlzIG5vdCBhIHN0cmluZyBsaWtlIHRoZSBvdGhlciBmaWVsZHMsIHJlcXVpcmVzIGNhc3RpbmcKICAgICAgICAgICAgcGFyZW50X2lkID0gc3RyKGNvbW1lbnRbJ3BhcmVudCddKQogICAgICAgICAgICBpZiBwYXJlbnRfaWQgIT0gJ05vbmUnIGFuZCBwYXJlbnRfaWQgaW4gY29tbV9hdXRob3JzOgogICAgICAgICAgICAgICAgcGFyZW50X2F1dGhvciA9IGNvbW1fYXV0aG9yc1twYXJlbnRfaWRdCiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIyBhZGQgYXV0aG9yIGFuZCBvdGhlciBkZXRhaWxzIGFzIGEgZGljdGlvbmFyeQogICAgICAgICAgICAgICAgICAgICMgdXBkYXRlIGRhdGUgb2YgbGFzdCBjb21tZW50CiAgICAgICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnZWRnZXMnXVtwYXJlbnRfYXV0aG9yXVsnY3JlYXRlZEF0J10gPSBcCiAgICAgICAgICAgICAgICAgICAgICAgIG1pbihjcmVhdGVkX2F0LCBhZGpfbGlzdFthdXRob3JfdW5hbWVdWydlZGdlcyddW3BhcmVudF9hdXRob3JdWydjcmVhdGVkQXQnXSkKICAgICAgICAgICAgICAgICAgICBhZGpfbGlzdFthdXRob3JfdW5hbWVdWydlZGdlcyddW3BhcmVudF9hdXRob3JdWydzdG9wcGVkQXQnXSA9IFwKICAgICAgICAgICAgICAgICAgICAgICAgbWF4KGNyZWF0ZWRfYXQsIGFkal9saXN0W2F1dGhvcl91bmFtZV1bJ2VkZ2VzJ11bcGFyZW50X2F1dGhvcl1bJ3N0b3BwZWRBdCddKQoKICAgICAgICAgICAgICAgICAgICBhZGpfbGlzdFthdXRob3JfdW5hbWVdWydlZGdlcyddW3BhcmVudF9hdXRob3JdWydpbnRlcmFjdGlvbnMnXSArPSAxCiAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIyBwYXJlbnRfYXV0aG9yIHdhcyB1bmtub3duCiAgICAgICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnZWRnZXMnXVtwYXJlbnRfYXV0aG9yXSA9IHt9CiAgICAgICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnZWRnZXMnXVtwYXJlbnRfYXV0aG9yXVsnY3JlYXRlZEF0J10gPSBjcmVhdGVkX2F0CiAgICAgICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnZWRnZXMnXVtwYXJlbnRfYXV0aG9yXVsnc3RvcHBlZEF0J10gPSBjcmVhdGVkX2F0CiAgICAgICAgICAgICAgICAgICAgYWRqX2xpc3RbYXV0aG9yX3VuYW1lXVsnZWRnZXMnXVtwYXJlbnRfYXV0aG9yXVsnaW50ZXJhY3Rpb25zJ10gPSAxCgoKZGVmIGJ1aWxkX2dyYXBoKGdyYXBoLCBhZGphY2VuY3lfbGlzdCk6CiAgICAiIiIKICAgIEJ1aWxkcyB0aGUgZ3JhcGhzIGJ5IGFwcGVuZGluZyB0aGUgbm9kZXMgYW5kIGVkZ2VzIGRlZmluZWQKICAgIGluIHRoZSBhZGphY2VuY3lfbGlzdAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICA6cGFyYW0gZ3JhcGg6IHRoZSBncmFwaHMgdG8gd2hpY2ggZWxlbWVudHMgYXJlIGFwcGVuZGVkCiAgICAiIiIKICAgICMgbm9kZXMKICAgIGZvciBub2RlIGluIGFkamFjZW5jeV9saXN0Ogo8fGZpbV9lbmR8Pg=="]
["c16c7f7511e5aede70addcf9c72846fa0ba88157-1","c16c7f7511e5aede70addcf9c72846fa0ba88157","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uYXBwcyBpbXBvcnQgQXBwQ29uZmlnCmZyb20gZGphbmdvLmRiLm1vZGVscy5zaWduYWxzIGltcG9ydCBwb3N0X21pZ3JhdGUKCgpkZWYgb25fcG9zdF9taWdyYXRlKHNlbmRlciwgKiprd2FyZ3MpOgogICAgaW1wb3J0IHN0YXJ0dXAKICAgIHN0YXJ0dXAuZ3JhbnRfcGVybWlzc2lvbnMoKQoKCmNsYXNzIEFwaUNvbmZpZyhBcHBDb25maWcpOgogICAgbmFtZSA9ICdhcGknCiAgICB2ZXJib3NlX25hbWUgPSAnU2FuYSBQcm90b2NvbCBCdWlsZGVyIC0gUkVTVGZ1bCBBUEkgTW9kdWxlJwoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIHJlYWR5KHNlbGYpOgogICAgICAgIHBvc3RfbWlncmF0ZS5jb25uZWN0KG9uX3Bvc3RfbWlncmF0ZSwgc2VuZGVyPXNlbGYpCjx8ZmltX2VuZHw+"]
["c1cbd3afdc12ad160594c1ed8fc1bc81bf912122-1","c1cbd3afdc12ad160594c1ed8fc1bc81bf912122","PHxmaW1fcHJlZml4fD4KZnJvbSBiaXRtb3Zpbi5yZXNvdXJjZXMgaW1wb3J0IEFic3RyYWN0SWRSZXNvdXJjZQoKCmNsYXNzIFZhcmlhbnRTdHJlYW0oQWJzdHJhY3RJZFJlc291cmNlKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgZW5jb2RpbmdfaWQsIHN0cmVhbV9pZCwgbXV4aW5nX2lkLCB1cmksIHNlZ21lbnRfcGF0aCwKICAgICAgICAgICAgICAgICBjbG9zZWRfY2FwdGlvbnM9J05PTkUnLCBhdWRpbz1Ob25lLCB2aWRlbz1Ob25lLCBzdWJ0aXRsZXM9Tm9uZSwKICAgICAgICAgICAgICAgICBkcm1faWQ9Tm9uZSwgc3RhcnRfc2VnbWVudF9udW1iZXI9Tm9uZSwgZW5kX3NlZ21lbnRfbnVtYmVyPU5vbmUsIGlkXz1Ob25lKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKGlkXz1pZF8pCiAgICAgICAgc2VsZi5lbmNvZGluZ0lkID0gZW5jb2RpbmdfaWQKICAgICAgICBzZWxmLnN0cmVhbUlkID0gc3RyZWFtX2lkCiAgICAgICAgc2VsZi5tdXhpbmdJZCA9IG11eGluZ19pZAogICAgICAgIHNlbGYudXJpID0gdXJpCiAgICAgICAgc2VsZi5zZWdtZW50UGF0aCA9IHNlZ21lbnRfcGF0aAogICAgICAgIHNlbGYuY2xvc2VkQ2FwdGlvbnMgPSBjbG9zZWRfY2FwdGlvbnMKICAgICAgICBzZWxmLmF1ZGlvID0gYXVkaW8KICAgICAgICBzZWxmLnZpZGVvID0gdmlkZW8KICAgICAgICBzZWxmLnN1YnRpdGxlcyA9IHN1YnRpdGxlcwogICAgICAgIHNlbGYuZHJtSWQgPSBkcm1faWQKICAgICAgICBzZWxmLnN0YXJ0U2VnbWVudE51bWJlciA9IHN0YXJ0X3NlZ21lbnRfbnVtYmVyCiAgICAgICAgc2VsZi5lbmRTZWdtZW50TnVtYmVyID0gZW5kX3NlZ21lbnRfbnVtYmVyCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgcGFyc2VfZnJvbV9qc29uX29iamVjdChjbHMsIGpzb25fb2JqZWN0KToKICAgICAgICBpZF8gPSBqc29uX29iamVjdC5nZXQoJ2lkJykKICAgICAgICBlbmNvZGluZ19pZCA9IGpzb25fb2JqZWN0LmdldCgnZW5jb2RpbmdJZCcpCiAgICAgICAgc3RyZWFtX2lkID0ganNvbl9vYmplY3QuZ2V0KCdzdHJlYW1JZCcpCiAgICAgICAgbXV4aW5nX2lkID0ganNvbl9vYmplY3QuZ2V0KCdtdXhpbmdJZCcpCiAgICAgICAgdXJpID0ganNvbl9vYmplY3QuZ2V0KCd1cmknKQogICAgICAgIHNlZ21lbnRfcGF0aCA9IGpzb25fb2JqZWN0LmdldCgnc2VnbWVudFBhdGgnKQogICAgICAgIGNsb3NlZF9jYXB0aW9ucyA9IGpzb25fb2JqZWN0LmdldCgnY2xvc2VkQ2FwdGlvbnMnKQogICAgICAgIGF1ZGlvID0ganNvbl9vYmplY3QuZ2V0KCdhdWRpbycpCiAgICAgICAgdmlkZW8gPSBqc29uX29iamVjdC5nZXQoJ3ZpZGVvJykKICAgICAgICBzdWJ0aXRsZXMgPSBqc29uX29iamVjdC5nZXQoJ3N1YnRpdGxlcycpCjx8ZmltX2hvbGV8PgogICAgICAgIHZhcmlhbnRfc3RyZWFtID0gVmFyaWFudFN0cmVhbShpZF89aWRfLCBlbmNvZGluZ19pZD1lbmNvZGluZ19pZCwgc3RyZWFtX2lkPXN0cmVhbV9pZCwgbXV4aW5nX2lkPW11eGluZ19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpPXVyaSwgc2VnbWVudF9wYXRoPXNlZ21lbnRfcGF0aCwgY2xvc2VkX2NhcHRpb25zPWNsb3NlZF9jYXB0aW9ucywgYXVkaW89YXVkaW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvPXZpZGVvLCBzdWJ0aXRsZXM9c3VidGl0bGVzLCBkcm1faWQ9ZHJtX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9zZWdtZW50X251bWJlcj1zdGFydF9zZWdtZW50X251bWJlciwgZW5kX3NlZ21lbnRfbnVtYmVyPWVuZF9zZWdtZW50X251bWJlcikKCiAgICAgICAgcmV0dXJuIHZhcmlhbnRfc3RyZWFtCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZHJtX2lkID0ganNvbl9vYmplY3QuZ2V0KCdkcm1JZCcpCiAgICAgICAgc3RhcnRfc2VnbWVudF9udW1iZXIgPSBqc29uX29iamVjdC5nZXQoJ3N0YXJ0U2VnbWVudE51bWJlcicpCiAgICAgICAgZW5kX3NlZ21lbnRfbnVtYmVyID0ganNvbl9vYmplY3QuZ2V0KCdlbmRTZWdtZW50TnVtYmVyJykKCjx8ZmltX2VuZHw+"]
["c1cbd3afdc12ad160594c1ed8fc1bc81bf912122-2","c1cbd3afdc12ad160594c1ed8fc1bc81bf912122","PHxmaW1fcHJlZml4fD4KZnJvbSBiaXRtb3Zpbi5yZXNvdXJjZXMgaW1wb3J0IEFic3RyYWN0SWRSZXNvdXJjZQo8fGZpbV9ob2xlfD4KICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbmNvZGluZ19pZCwgc3RyZWFtX2lkLCBtdXhpbmdfaWQsIHVyaSwgc2VnbWVudF9wYXRoLAogICAgICAgICAgICAgICAgIGNsb3NlZF9jYXB0aW9ucz0nTk9ORScsIGF1ZGlvPU5vbmUsIHZpZGVvPU5vbmUsIHN1YnRpdGxlcz1Ob25lLAogICAgICAgICAgICAgICAgIGRybV9pZD1Ob25lLCBzdGFydF9zZWdtZW50X251bWJlcj1Ob25lLCBlbmRfc2VnbWVudF9udW1iZXI9Tm9uZSwgaWRfPU5vbmUpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oaWRfPWlkXykKICAgICAgICBzZWxmLmVuY29kaW5nSWQgPSBlbmNvZGluZ19pZAogICAgICAgIHNlbGYuc3RyZWFtSWQgPSBzdHJlYW1faWQKICAgICAgICBzZWxmLm11eGluZ0lkID0gbXV4aW5nX2lkCiAgICAgICAgc2VsZi51cmkgPSB1cmkKICAgICAgICBzZWxmLnNlZ21lbnRQYXRoID0gc2VnbWVudF9wYXRoCiAgICAgICAgc2VsZi5jbG9zZWRDYXB0aW9ucyA9IGNsb3NlZF9jYXB0aW9ucwogICAgICAgIHNlbGYuYXVkaW8gPSBhdWRpbwogICAgICAgIHNlbGYudmlkZW8gPSB2aWRlbwogICAgICAgIHNlbGYuc3VidGl0bGVzID0gc3VidGl0bGVzCiAgICAgICAgc2VsZi5kcm1JZCA9IGRybV9pZAogICAgICAgIHNlbGYuc3RhcnRTZWdtZW50TnVtYmVyID0gc3RhcnRfc2VnbWVudF9udW1iZXIKICAgICAgICBzZWxmLmVuZFNlZ21lbnROdW1iZXIgPSBlbmRfc2VnbWVudF9udW1iZXIKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBwYXJzZV9mcm9tX2pzb25fb2JqZWN0KGNscywganNvbl9vYmplY3QpOgogICAgICAgIGlkXyA9IGpzb25fb2JqZWN0LmdldCgnaWQnKQogICAgICAgIGVuY29kaW5nX2lkID0ganNvbl9vYmplY3QuZ2V0KCdlbmNvZGluZ0lkJykKICAgICAgICBzdHJlYW1faWQgPSBqc29uX29iamVjdC5nZXQoJ3N0cmVhbUlkJykKICAgICAgICBtdXhpbmdfaWQgPSBqc29uX29iamVjdC5nZXQoJ211eGluZ0lkJykKICAgICAgICB1cmkgPSBqc29uX29iamVjdC5nZXQoJ3VyaScpCiAgICAgICAgc2VnbWVudF9wYXRoID0ganNvbl9vYmplY3QuZ2V0KCdzZWdtZW50UGF0aCcpCiAgICAgICAgY2xvc2VkX2NhcHRpb25zID0ganNvbl9vYmplY3QuZ2V0KCdjbG9zZWRDYXB0aW9ucycpCiAgICAgICAgYXVkaW8gPSBqc29uX29iamVjdC5nZXQoJ2F1ZGlvJykKICAgICAgICB2aWRlbyA9IGpzb25fb2JqZWN0LmdldCgndmlkZW8nKQogICAgICAgIHN1YnRpdGxlcyA9IGpzb25fb2JqZWN0LmdldCgnc3VidGl0bGVzJykKICAgICAgICBkcm1faWQgPSBqc29uX29iamVjdC5nZXQoJ2RybUlkJykKICAgICAgICBzdGFydF9zZWdtZW50X251bWJlciA9IGpzb25fb2JqZWN0LmdldCgnc3RhcnRTZWdtZW50TnVtYmVyJykKICAgICAgICBlbmRfc2VnbWVudF9udW1iZXIgPSBqc29uX29iamVjdC5nZXQoJ2VuZFNlZ21lbnROdW1iZXInKQoKICAgICAgICB2YXJpYW50X3N0cmVhbSA9IFZhcmlhbnRTdHJlYW0oaWRfPWlkXywgZW5jb2RpbmdfaWQ9ZW5jb2RpbmdfaWQsIHN0cmVhbV9pZD1zdHJlYW1faWQsIG11eGluZ19pZD1tdXhpbmdfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaT11cmksIHNlZ21lbnRfcGF0aD1zZWdtZW50X3BhdGgsIGNsb3NlZF9jYXB0aW9ucz1jbG9zZWRfY2FwdGlvbnMsIGF1ZGlvPWF1ZGlvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlbz12aWRlbywgc3VidGl0bGVzPXN1YnRpdGxlcywgZHJtX2lkPWRybV9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfc2VnbWVudF9udW1iZXI9c3RhcnRfc2VnbWVudF9udW1iZXIsIGVuZF9zZWdtZW50X251bWJlcj1lbmRfc2VnbWVudF9udW1iZXIpCgogICAgICAgIHJldHVybiB2YXJpYW50X3N0cmVhbQo8fGZpbV9zdWZmaXh8PgoKCmNsYXNzIFZhcmlhbnRTdHJlYW0oQWJzdHJhY3RJZFJlc291cmNlKToKCjx8ZmltX2VuZHw+"]
["c1cbd3afdc12ad160594c1ed8fc1bc81bf912122-3","c1cbd3afdc12ad160594c1ed8fc1bc81bf912122","PHxmaW1fcHJlZml4fD4KZnJvbSBiaXRtb3Zpbi5yZXNvdXJjZXMgaW1wb3J0IEFic3RyYWN0SWRSZXNvdXJjZQoKCmNsYXNzIFZhcmlhbnRTdHJlYW0oQWJzdHJhY3RJZFJlc291cmNlKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgZW5jb2RpbmdfaWQsIHN0cmVhbV9pZCwgbXV4aW5nX2lkLCB1cmksIHNlZ21lbnRfcGF0aCwKICAgICAgICAgICAgICAgICBjbG9zZWRfY2FwdGlvbnM9J05PTkUnLCBhdWRpbz1Ob25lLCB2aWRlbz1Ob25lLCBzdWJ0aXRsZXM9Tm9uZSwKICAgICAgICAgICAgICAgICBkcm1faWQ9Tm9uZSwgc3RhcnRfc2VnbWVudF9udW1iZXI9Tm9uZSwgZW5kX3NlZ21lbnRfbnVtYmVyPU5vbmUsIGlkXz1Ob25lKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKGlkXz1pZF8pCiAgICAgICAgc2VsZi5lbmNvZGluZ0lkID0gZW5jb2RpbmdfaWQKICAgICAgICBzZWxmLnN0cmVhbUlkID0gc3RyZWFtX2lkCiAgICAgICAgc2VsZi5tdXhpbmdJZCA9IG11eGluZ19pZAogICAgICAgIHNlbGYudXJpID0gdXJpCiAgICAgICAgc2VsZi5zZWdtZW50UGF0aCA9IHNlZ21lbnRfcGF0aAogICAgICAgIHNlbGYuY2xvc2VkQ2FwdGlvbnMgPSBjbG9zZWRfY2FwdGlvbnMKICAgICAgICBzZWxmLmF1ZGlvID0gYXVkaW8KICAgICAgICBzZWxmLnZpZGVvID0gdmlkZW8KICAgICAgICBzZWxmLnN1YnRpdGxlcyA9IHN1YnRpdGxlcwogICAgICAgIHNlbGYuZHJtSWQgPSBkcm1faWQKICAgICAgICBzZWxmLnN0YXJ0U2VnbWVudE51bWJlciA9IHN0YXJ0X3NlZ21lbnRfbnVtYmVyCiAgICAgICAgc2VsZi5lbmRTZWdtZW50TnVtYmVyID0gZW5kX3NlZ21lbnRfbnVtYmVyCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgcGFyc2VfZnJvbV9qc29uX29iamVjdChjbHMsIGpzb25fb2JqZWN0KToKICAgICAgICBpZF8gPSBqc29uX29iamVjdC5nZXQoJ2lkJykKICAgICAgICBlbmNvZGluZ19pZCA9IGpzb25fb2JqZWN0LmdldCgnZW5jb2RpbmdJZCcpCiAgICAgICAgc3RyZWFtX2lkID0ganNvbl9vYmplY3QuZ2V0KCdzdHJlYW1JZCcpCiAgICAgICAgbXV4aW5nX2lkID0ganNvbl9vYmplY3QuZ2V0KCdtdXhpbmdJZCcpCjx8ZmltX2hvbGV8PgogICAgICAgIHZpZGVvID0ganNvbl9vYmplY3QuZ2V0KCd2aWRlbycpCiAgICAgICAgc3VidGl0bGVzID0ganNvbl9vYmplY3QuZ2V0KCdzdWJ0aXRsZXMnKQogICAgICAgIGRybV9pZCA9IGpzb25fb2JqZWN0LmdldCgnZHJtSWQnKQogICAgICAgIHN0YXJ0X3NlZ21lbnRfbnVtYmVyID0ganNvbl9vYmplY3QuZ2V0KCdzdGFydFNlZ21lbnROdW1iZXInKQogICAgICAgIGVuZF9zZWdtZW50X251bWJlciA9IGpzb25fb2JqZWN0LmdldCgnZW5kU2VnbWVudE51bWJlcicpCgogICAgICAgIHZhcmlhbnRfc3RyZWFtID0gVmFyaWFudFN0cmVhbShpZF89aWRfLCBlbmNvZGluZ19pZD1lbmNvZGluZ19pZCwgc3RyZWFtX2lkPXN0cmVhbV9pZCwgbXV4aW5nX2lkPW11eGluZ19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpPXVyaSwgc2VnbWVudF9wYXRoPXNlZ21lbnRfcGF0aCwgY2xvc2VkX2NhcHRpb25zPWNsb3NlZF9jYXB0aW9ucywgYXVkaW89YXVkaW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvPXZpZGVvLCBzdWJ0aXRsZXM9c3VidGl0bGVzLCBkcm1faWQ9ZHJtX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9zZWdtZW50X251bWJlcj1zdGFydF9zZWdtZW50X251bWJlciwgZW5kX3NlZ21lbnRfbnVtYmVyPWVuZF9zZWdtZW50X251bWJlcikKCiAgICAgICAgcmV0dXJuIHZhcmlhbnRfc3RyZWFtCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgdXJpID0ganNvbl9vYmplY3QuZ2V0KCd1cmknKQogICAgICAgIHNlZ21lbnRfcGF0aCA9IGpzb25fb2JqZWN0LmdldCgnc2VnbWVudFBhdGgnKQogICAgICAgIGNsb3NlZF9jYXB0aW9ucyA9IGpzb25fb2JqZWN0LmdldCgnY2xvc2VkQ2FwdGlvbnMnKQogICAgICAgIGF1ZGlvID0ganNvbl9vYmplY3QuZ2V0KCdhdWRpbycpCjx8ZmltX2VuZHw+"]
["c1cbd3afdc12ad160594c1ed8fc1bc81bf912122-4","c1cbd3afdc12ad160594c1ed8fc1bc81bf912122","PHxmaW1fcHJlZml4fD4KZnJvbSBiaXRtb3Zpbi5yZXNvdXJjZXMgaW1wb3J0IEFic3RyYWN0SWRSZXNvdXJjZQoKCmNsYXNzIFZhcmlhbnRTdHJlYW0oQWJzdHJhY3RJZFJlc291cmNlKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgZW5jb2RpbmdfaWQsIHN0cmVhbV9pZCwgbXV4aW5nX2lkLCB1cmksIHNlZ21lbnRfcGF0aCwKICAgICAgICAgICAgICAgICBjbG9zZWRfY2FwdGlvbnM9J05PTkUnLCBhdWRpbz1Ob25lLCB2aWRlbz1Ob25lLCBzdWJ0aXRsZXM9Tm9uZSwKICAgICAgICAgICAgICAgICBkcm1faWQ9Tm9uZSwgc3RhcnRfc2VnbWVudF9udW1iZXI9Tm9uZSwgZW5kX3NlZ21lbnRfbnVtYmVyPU5vbmUsIGlkXz1Ob25lKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKGlkXz1pZF8pCiAgICAgICAgc2VsZi5lbmNvZGluZ0lkID0gZW5jb2RpbmdfaWQKICAgICAgICBzZWxmLnN0cmVhbUlkID0gc3RyZWFtX2lkCiAgICAgICAgc2VsZi5tdXhpbmdJZCA9IG11eGluZ19pZAogICAgICAgIHNlbGYudXJpID0gdXJpCiAgICAgICAgc2VsZi5zZWdtZW50UGF0aCA9IHNlZ21lbnRfcGF0aAogICAgICAgIHNlbGYuY2xvc2VkQ2FwdGlvbnMgPSBjbG9zZWRfY2FwdGlvbnMKICAgICAgICBzZWxmLmF1ZGlvID0gYXVkaW8KICAgICAgICBzZWxmLnZpZGVvID0gdmlkZW8KICAgICAgICBzZWxmLnN1YnRpdGxlcyA9IHN1YnRpdGxlcwogICAgICAgIHNlbGYuZHJtSWQgPSBkcm1faWQKICAgICAgICBzZWxmLnN0YXJ0U2VnbWVudE51bWJlciA9IHN0YXJ0X3NlZ21lbnRfbnVtYmVyCiAgICAgICAgc2VsZi5lbmRTZWdtZW50TnVtYmVyID0gZW5kX3NlZ21lbnRfbnVtYmVyCgogICAgQGNsYXNzbWV0aG9kCjx8ZmltX2hvbGV8PgogICAgICAgIG11eGluZ19pZCA9IGpzb25fb2JqZWN0LmdldCgnbXV4aW5nSWQnKQogICAgICAgIHVyaSA9IGpzb25fb2JqZWN0LmdldCgndXJpJykKICAgICAgICBzZWdtZW50X3BhdGggPSBqc29uX29iamVjdC5nZXQoJ3NlZ21lbnRQYXRoJykKICAgICAgICBjbG9zZWRfY2FwdGlvbnMgPSBqc29uX29iamVjdC5nZXQoJ2Nsb3NlZENhcHRpb25zJykKICAgICAgICBhdWRpbyA9IGpzb25fb2JqZWN0LmdldCgnYXVkaW8nKQogICAgICAgIHZpZGVvID0ganNvbl9vYmplY3QuZ2V0KCd2aWRlbycpCiAgICAgICAgc3VidGl0bGVzID0ganNvbl9vYmplY3QuZ2V0KCdzdWJ0aXRsZXMnKQogICAgICAgIGRybV9pZCA9IGpzb25fb2JqZWN0LmdldCgnZHJtSWQnKQogICAgICAgIHN0YXJ0X3NlZ21lbnRfbnVtYmVyID0ganNvbl9vYmplY3QuZ2V0KCdzdGFydFNlZ21lbnROdW1iZXInKQogICAgICAgIGVuZF9zZWdtZW50X251bWJlciA9IGpzb25fb2JqZWN0LmdldCgnZW5kU2VnbWVudE51bWJlcicpCgogICAgICAgIHZhcmlhbnRfc3RyZWFtID0gVmFyaWFudFN0cmVhbShpZF89aWRfLCBlbmNvZGluZ19pZD1lbmNvZGluZ19pZCwgc3RyZWFtX2lkPXN0cmVhbV9pZCwgbXV4aW5nX2lkPW11eGluZ19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpPXVyaSwgc2VnbWVudF9wYXRoPXNlZ21lbnRfcGF0aCwgY2xvc2VkX2NhcHRpb25zPWNsb3NlZF9jYXB0aW9ucywgYXVkaW89YXVkaW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvPXZpZGVvLCBzdWJ0aXRsZXM9c3VidGl0bGVzLCBkcm1faWQ9ZHJtX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9zZWdtZW50X251bWJlcj1zdGFydF9zZWdtZW50X251bWJlciwgZW5kX3NlZ21lbnRfbnVtYmVyPWVuZF9zZWdtZW50X251bWJlcikKCiAgICAgICAgcmV0dXJuIHZhcmlhbnRfc3RyZWFtCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgcGFyc2VfZnJvbV9qc29uX29iamVjdChjbHMsIGpzb25fb2JqZWN0KToKICAgICAgICBpZF8gPSBqc29uX29iamVjdC5nZXQoJ2lkJykKICAgICAgICBlbmNvZGluZ19pZCA9IGpzb25fb2JqZWN0LmdldCgnZW5jb2RpbmdJZCcpCiAgICAgICAgc3RyZWFtX2lkID0ganNvbl9vYmplY3QuZ2V0KCdzdHJlYW1JZCcpCjx8ZmltX2VuZHw+"]
["c1cbd3afdc12ad160594c1ed8fc1bc81bf912122-5","c1cbd3afdc12ad160594c1ed8fc1bc81bf912122","PHxmaW1fcHJlZml4fD4KZnJvbSBiaXRtb3Zpbi5yZXNvdXJjZXMgaW1wb3J0IEFic3RyYWN0SWRSZXNvdXJjZQoKCmNsYXNzIFZhcmlhbnRTdHJlYW0oQWJzdHJhY3RJZFJlc291cmNlKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgZW5jb2RpbmdfaWQsIHN0cmVhbV9pZCwgbXV4aW5nX2lkLCB1cmksIHNlZ21lbnRfcGF0aCwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgIGNsb3NlZF9jYXB0aW9ucz0nTk9ORScsIGF1ZGlvPU5vbmUsIHZpZGVvPU5vbmUsIHN1YnRpdGxlcz1Ob25lLAogICAgICAgICAgICAgICAgIGRybV9pZD1Ob25lLCBzdGFydF9zZWdtZW50X251bWJlcj1Ob25lLCBlbmRfc2VnbWVudF9udW1iZXI9Tm9uZSwgaWRfPU5vbmUpOgo8fGZpbV9lbmR8Pg=="]
["00da47d04964406cbea2cb48ee3a639ff8ee4075-1","00da47d04964406cbea2cb48ee3a639ff8ee4075","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCgpmcm9tIGRqYW5nby5jb25mLnVybHMgaW1wb3J0IHVybCwgaW5jbHVkZQpmcm9tIGRqYW5nby51cmxzIGltcG9ydCBwYXRoLCByZV9wYXRoCgpmcm9tIHJlc3RfZnJhbWV3b3JrLnJvdXRlcnMgaW1wb3J0IERlZmF1bHRSb3V0ZXIKCmZyb20gLiBpbXBvcnQgdmlld3MKZnJvbSAuYXBpIGltcG9ydCAoCiAgICBCdWRnZXRPdmVyaGVhZE1hdGVyaWFsVmlldywKICAgIEJ1ZGdldE92ZXJoZWFkU3RhbmRieVZpZXcsCiAgICBCdWRnZXRTdGFuZGJ5RXF1aXBtZW50VmlldywKICAgIEJ1ZGdldFN0YW5kYnlNYW5wb3dlclZpZXcsCiAgICBCdWRnZXRWaWV3U2V0LAogICAgQ2xvc2VEaXJlY3RWaWV3LAogICAgRXF1aXBtZW50QnVkZ2V0Vmlld1NldCwKICAgIEVxdWlwbWVudFN1bW1hcnlCdWRnZXRWaWV3LAogICAgRXF1aXBtZW50VGFza1ZpZXdTZXQsCiAgICBNYW5wb3dlckJ1ZGdldFZpZXdTZXQsCiAgICBNYW5wb3dlck92ZXJoZWFkQnVkZ2V0VmlldywKICAgIE1hbnBvd2VyU3VtbWFyeUJ1ZGdldFZpZXcsCiAgICBNYW5wb3dlclRhc2tWaWV3U2V0LAogICAgTWF0ZXJpYWxCdWRnZXRWaWV3U2V0LAogICAgIyBNYXRlcmlhbE92ZXJoZWFkQnVkZ2V0VmlldywKICAgIE1hdGVyaWFsVGFza1ZpZXdTZXQsCiAgICBTdGF0dXNCdWRnZXRWaWV3LAogICAgU3ViVG90YWxFcXVpcG1lbnRUYXNrQnVkZ2V0VmlldywKICAgIFN1YlRvdGFsTWFucG93ZXJUYXNrQnVkZ2V0VmlldywKICAgIFN1YlRvdGFsTWF0ZXJpYWxUYXNrQnVkZ2V0VmlldywKICAgIFN1YmNvbnRyYWN0QnVkZ2V0Vmlld1NldCwKICAgIFN1YmNvbnRyYWN0VGFza1ZpZXdTZXQsCiAgICBUYXNrQnVkZ2V0Vmlld1NldCwKICAgIGRlbGV0ZV9hbGxfdGFza3MsCiAgICBnZXRfY2hpbGRyZW5fdGFzaywKICAgIG5vZGVhcGksCiAgICBFUFBCdWRnZXRWaWV3U2V0LAogICAgRVBQQnVkZ2V0RGVsZXRlZFZpZXdTZXQsCiAgICBFUFBCdWRnZXREZXRhaWxWaWV3U2V0LAogICAgIyBFUFBCdWRnZXREZXRhaWxEZWxldGVkVmlld1NldCwKICAgIENlcnRpZmljYWNpb25CdWRnZXRWaWV3U2V0LAogICAgQ2VydGlmaWNhY2lvbkJ1ZGdldERlbGV0ZWRWaWV3U2V0LAogICAgQnVkZ2V0VHJlZVZpZXdTZXQKKQoKYXBwX25hbWUgPSAiYnVkZ2V0IgoKcm91dGVyID0gRGVmYXVsdFJvdXRlcigpCnJvdXRlci5yZWdpc3RlcihyJ2J1ZGdldHMnLCBCdWRnZXRWaWV3U2V0KQojIHJvdXRlci5yZWdpc3RlcihyJ2J1ZGdldF90cmVlJywgQnVkZ2V0VHJlZVZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ3Rhc2tzJywgVGFza0J1ZGdldFZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ21hbnBvd2VyX2J1ZGdldCcsIE1hbnBvd2VyQnVkZ2V0Vmlld1NldCkKcm91dGVyLnJlZ2lzdGVyKHInbWF0ZXJpYWxfYnVkZ2V0JywgTWF0ZXJpYWxCdWRnZXRWaWV3U2V0KQpyb3V0ZXIucmVnaXN0ZXIocidzdWJjb250cmFjdF9idWRnZXQnLCBTdWJjb250cmFjdEJ1ZGdldFZpZXdTZXQpCjx8ZmltX2hvbGV8Pgpyb3V0ZXIucmVnaXN0ZXIocidzdWJjb250cmFjdF90YXNrJywgU3ViY29udHJhY3RUYXNrVmlld1NldCkKcm91dGVyLnJlZ2lzdGVyKHInZXF1aXBtZW50X3Rhc2snLCBFcXVpcG1lbnRUYXNrVmlld1NldCkKcm91dGVyLnJlZ2lzdGVyKHInZXBwX2J1ZGdldCcsIEVQUEJ1ZGdldFZpZXdTZXQpCiMgcm91dGVyLnJlZ2lzdGVyKHInZXBwX2J1ZGdldF9kZWxldGVkJywgRVBQQnVkZ2V0RGVsZXRlZFZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ2VwcF9idWRnZXRfZGV0YWlsJywgRVBQQnVkZ2V0RGV0YWlsVmlld1NldCkKIyByb3V0ZXIucmVnaXN0ZXIocidlcHBfYnVkZ2V0X2RldGFpbF9kZWxldGVkJywgRVBQQnVkZ2V0RGV0YWlsRGVsZXRlZFZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ2NlcnRpZmljYWNpb25fYnVkZ2V0JywgQ2VydGlmaWNhY2lvbkJ1ZGdldFZpZXdTZXQpCiMgcm91dGVyLnJlZ2lzdGVyKHInY2VydGlmaWNhY2lvbl9idWRnZXRfZGVsZXRlZCcsIENlcnRpZmljYWNpb25CdWRnZXREZWxldGVkVmlld1NldCkKCnVybHBhdHRlcm5zID0gWwogICAgcmVfcGF0aChyJ14kJywgdmlld3MuQnVkZ2V0Vmlldy5hc192aWV3KCksIG5hbWU9ImJ1ZGdldF92aWV3IiksCiAgICByZV9wYXRoKHInXmFwaS8nLCBpbmNsdWRlKHJvdXRlci51cmxzKSksCiAgICByZV9wYXRoKHInXmFwaS9zdGF0dXMvJCcsIFN0YXR1c0J1ZGdldFZpZXcuYXNfdmlldygpLCBuYW1lPSJzdGF0dXNfYnVkZ2V0IiksCiAgICByZV9wYXRoKAogICAgICAgIHInXmFwaS9idWRnZXRzLyg/UDxiYWRnZXRfaWQ+XHcrKS9tYW5wb3dlci9zdW1tYXJ5JCcsCiAgICAgICAgTWFucG93ZXJTdW1tYXJ5QnVkZ2V0Vmlldy5hc192aWV3KCksCiAgICAgICAgbmFtZT0nYnVkZ2V0X21hbnBvd2VyX3N1bW1hcnknKSwKICAgIHJlX3BhdGgoCiAgICAgICAgcideYXBpL2J1ZGdldHMvKD9QPGJhZGdldF9pZD5cdyspL2VxdWlwbWVudC9zdW1tYXJ5JCcsCiAgICAgICAgRXF1aXBtZW50U3VtbWFyeUJ1ZGdldFZpZXcuYXNfdmlldygpLAogICAgICAgIG5hbWU9J2J1ZGdldF9lcXVpcG1lbnRfc3VtbWFyeScpLAogICAgcmVfcGF0aCgKICAgICAgICByJ15hcGkvYnVkZ2V0cy8oP1A8YmFkZ2V0X2lkPlx3KykvbWFucG93ZXJzLyg/UDx0YXNrX2lkPlx3KykvYXB1JCcsCiAgICAgICAgU3ViVG90YWxNYW5wb3dlclRhc2tCdWRnZXRWaWV3LmFzX3ZpZXcoKSwKICAgICAgICBuYW1lPSdidWRnZXRzX21hbnBvd2Vyc19hcHUnKSwKICAgIHJlX3BhdGgoCiAgICAgICAgcideYXBpL2J1ZGdldHMvKD9QPGJhZGdldF9pZD5cdyspL21hdGVyaWFscy8oP1A8dGFza19pZD5cdyspL2FwdSQnLAogICAgICAgIFN1YlRvdGFsTWF0ZXJpYWxUYXNrQnVkZ2V0Vmlldy5hc192aWV3KCksCiAgICAgICAgbmFtZT0nYnVkZ2V0c19tYXRlcmlhbHNfYXB1JyksCiAgICByZV9wYXRoKAogICAgICAgIHInXmFwaS9idWRnZXRzLyg/UDxiYWRnZXRfaWQ+XHcrKS9lcXVpcG1lbnRzLyg/UDx0YXNrX2lkPlx3KykvYXB1JCcsCiAgICAgICAgU3ViVG90YWxFcXVpcG1lbnRUYXNrQnVkZ2V0Vmlldy5hc192aWV3KCksCiAgICAgICAgbmFtZT0nYnVkZ2V0c19lcXVpcG1lbnRzX2FwdScpLAogICAgcmVfcGF0aCgKICAgICAgICByJ15hcGkvYnVkZ2V0cy8oP1A8YmFkZ2V0X2lkPlx3KykvbWFucG93ZXIvb3ZlcmhlYWQkJywKICAgICAgICBNYW5wb3dlck92ZXJoZWFkQnVkZ2V0Vmlldy5hc192aWV3KCksCiAgICAgICAgbmFtZT0nYnVkZ2V0X21hbnBvd2VyX292ZXJoZWFkJyksCiAgICByZV9wYXRoKAogICAgICAgIHInXmFwaS9idWRnZXRzLyg/UDxiYWRnZXRfaWQ+XHcrKS9kaXJlY3QvY2xvc2UkJywKICAgICAgICBDbG9zZURpcmVjdFZpZXcuYXNfdmlldygpLAogICAgICAgIG5hbWU9J2J1ZGdldF9kaXJlY3RfY2xvc2UnKSwKICAgIHJlX3BhdGgoCiAgICAgICAgcideYXBpL2J1ZGdldHMvKD9QPHBrPlx3KykvdGFza3MvZGVsZXRlJCcsCiAgICAgICAgZGVsZXRlX2FsbF90YXNrcywKICAgICAgICBuYW1lPSdidWRnZXRfdGFza3NfZGVsZXRlJyksCiAgICByZV9wYXRoKAogICAgICAgIHInXmFwaS90YXNrcy8oP1A8cGs+XHcrKS9jaGlsZHJlbiQnLAogICAgICAgIGdldF9jaGlsZHJlbl90YXNrLAogICAgICAgIG5hbWU9J2dldF9jaGlsZHJlbl90YXNrJyksCiAgICByZV9wYXRoKAogICAgICAgIHInXmFwaS9ub2RlYXBpJCcsCiAgICAgICAgbm9kZWFwaSwKICAgICAgICBuYW1lPSdub2RlYXBpJyksCiAgICByZV9wYXRoKAogICAgICAgIHInXig/UDxwaz5cdyspL2Rvd25sb2FkJCcsCiAgICAgICAgdmlld3MuZXhwb3J0X2J1ZGdldF94bWwsCiAgICAgICAgbmFtZT0nYnVkZ2V0X2Rvd25sb2FkJyksCgogICAgIyBJbmljaW86IFN0YW5kYnkKICAgIHJlX3BhdGgoCiAgICAgICAgcideYXBpL2J1ZGdldHMvKD9QPGJhZGdldF9pZD5cdyspL21hbnBvd2VyL3N0YW5kYnkkJywKICAgICAgICBCdWRnZXRTdGFuZGJ5TWFucG93ZXJWaWV3LmFzX3ZpZXcoKSwKICAgICAgICBuYW1lPSdidWRnZXRfc3RhbmRieV9tYW5wb3dlcicpLAogICAgcmVfcGF0aCgKICAgICAgICByJ15hcGkvYnVkZ2V0cy8oP1A8YmFkZ2V0X2lkPlx3KykvZXF1aXBtZW50L3N0YW5kYnkkJywKICAgICAgICBCdWRnZXRTdGFuZGJ5RXF1aXBtZW50Vmlldy5hc192aWV3KCksCiAgICAgICAgbmFtZT0nYnVkZ2V0X3N0YW5kYnlfZXF1aXBtZW50JyksCiAgICAjIEZpbjogU3RhbmRieQoKICAgICMgSW5pY2lvOiBPdmVyaGVhZAogICAgcmVfcGF0aCgKICAgICAgICByJ15hcGkvYnVkZ2V0cy8oP1A8YmFkZ2V0X2lkPlx3Kykvc3RhbmRieS9vdmVyaGVhZCQnLAogICAgICAgIEJ1ZGdldE92ZXJoZWFkU3RhbmRieVZpZXcuYXNfdmlldygpLAogICAgICAgIG5hbWU9J2J1ZGdldF9vdmVyaGVhZF9zdGFuZGJ5JyksCiAgICByZV9wYXRoKAogICAgICAgIHInXmFwaS9idWRnZXRzLyg/UDxiYWRnZXRfaWQ+XHcrKS9tYXRlcmlhbC8oP1A8dHlwZV9tYXRlcmlhbD5cdyspL292ZXJoZWFkJCcsCiAgICAgICAgQnVkZ2V0T3ZlcmhlYWRNYXRlcmlhbFZpZXcuYXNfdmlldygpLAogICAgICAgIG5hbWU9J2J1ZGdldF9vdmVyaGVhZF9tYXRlcmlhbCcpLAogICAgIyBGaW46IE92ZXJoZWFkCl0KPHxmaW1fc3VmZml4fD4Kcm91dGVyLnJlZ2lzdGVyKHInZXF1aXBtZW50X2J1ZGdldCcsIEVxdWlwbWVudEJ1ZGdldFZpZXdTZXQpCiMgcm91dGVyLnJlZ2lzdGVyKHInb3ZlcmhlYWRfYnVkZ2V0JywgT3ZlckhlYWRCdWRnZXRWaWV3U2V0KQpyb3V0ZXIucmVnaXN0ZXIocidtYW5wb3dlcl90YXNrJywgTWFucG93ZXJUYXNrVmlld1NldCkKcm91dGVyLnJlZ2lzdGVyKHInbWF0ZXJpYWxfdGFzaycsIE1hdGVyaWFsVGFza1ZpZXdTZXQpCjx8ZmltX2VuZHw+"]
["00da47d04964406cbea2cb48ee3a639ff8ee4075-2","00da47d04964406cbea2cb48ee3a639ff8ee4075","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCgpmcm9tIGRqYW5nby5jb25mLnVybHMgaW1wb3J0IHVybCwgaW5jbHVkZQpmcm9tIGRqYW5nby51cmxzIGltcG9ydCBwYXRoLCByZV9wYXRoCgpmcm9tIHJlc3RfZnJhbWV3b3JrLnJvdXRlcnMgaW1wb3J0IERlZmF1bHRSb3V0ZXIKCmZyb20gLiBpbXBvcnQgdmlld3MKZnJvbSAuYXBpIGltcG9ydCAoCiAgICBCdWRnZXRPdmVyaGVhZE1hdGVyaWFsVmlldywKICAgIEJ1ZGdldE92ZXJoZWFkU3RhbmRieVZpZXcsCiAgICBCdWRnZXRTdGFuZGJ5RXF1aXBtZW50VmlldywKICAgIEJ1ZGdldFN0YW5kYnlNYW5wb3dlclZpZXcsCiAgICBCdWRnZXRWaWV3U2V0LAogICAgQ2xvc2VEaXJlY3RWaWV3LAogICAgRXF1aXBtZW50QnVkZ2V0Vmlld1NldCwKICAgIEVxdWlwbWVudFN1bW1hcnlCdWRnZXRWaWV3LAogICAgRXF1aXBtZW50VGFza1ZpZXdTZXQsCiAgICBNYW5wb3dlckJ1ZGdldFZpZXdTZXQsCiAgICBNYW5wb3dlck92ZXJoZWFkQnVkZ2V0VmlldywKICAgIE1hbnBvd2VyU3VtbWFyeUJ1ZGdldFZpZXcsCiAgICBNYW5wb3dlclRhc2tWaWV3U2V0LAogICAgTWF0ZXJpYWxCdWRnZXRWaWV3U2V0LAogICAgIyBNYXRlcmlhbE92ZXJoZWFkQnVkZ2V0VmlldywKICAgIE1hdGVyaWFsVGFza1ZpZXdTZXQsCiAgICBTdGF0dXNCdWRnZXRWaWV3LAogICAgU3ViVG90YWxFcXVpcG1lbnRUYXNrQnVkZ2V0VmlldywKICAgIFN1YlRvdGFsTWFucG93ZXJUYXNrQnVkZ2V0VmlldywKICAgIFN1YlRvdGFsTWF0ZXJpYWxUYXNrQnVkZ2V0VmlldywKICAgIFN1YmNvbnRyYWN0QnVkZ2V0Vmlld1NldCwKICAgIFN1YmNvbnRyYWN0VGFza1ZpZXdTZXQsCiAgICBUYXNrQnVkZ2V0Vmlld1NldCwKICAgIGRlbGV0ZV9hbGxfdGFza3MsCiAgICBnZXRfY2hpbGRyZW5fdGFzaywKICAgIG5vZGVhcGksCiAgICBFUFBCdWRnZXRWaWV3U2V0LAogICAgRVBQQnVkZ2V0RGVsZXRlZFZpZXdTZXQsCiAgICBFUFBCdWRnZXREZXRhaWxWaWV3U2V0LAogICAgIyBFUFBCdWRnZXREZXRhaWxEZWxldGVkVmlld1NldCwKICAgIENlcnRpZmljYWNpb25CdWRnZXRWaWV3U2V0LAogICAgQ2VydGlmaWNhY2lvbkJ1ZGdldERlbGV0ZWRWaWV3U2V0LAogICAgQnVkZ2V0VHJlZVZpZXdTZXQKKQoKYXBwX25hbWUgPSAiYnVkZ2V0IgoKcm91dGVyID0gRGVmYXVsdFJvdXRlcigpCnJvdXRlci5yZWdpc3RlcihyJ2J1ZGdldHMnLCBCdWRnZXRWaWV3U2V0KQojIHJvdXRlci5yZWdpc3RlcihyJ2J1ZGdldF90cmVlJywgQnVkZ2V0VHJlZVZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ3Rhc2tzJywgVGFza0J1ZGdldFZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ21hbnBvd2VyX2J1ZGdldCcsIE1hbnBvd2VyQnVkZ2V0Vmlld1NldCkKcm91dGVyLnJlZ2lzdGVyKHInbWF0ZXJpYWxfYnVkZ2V0JywgTWF0ZXJpYWxCdWRnZXRWaWV3U2V0KQpyb3V0ZXIucmVnaXN0ZXIocidzdWJjb250cmFjdF9idWRnZXQnLCBTdWJjb250cmFjdEJ1ZGdldFZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ2VxdWlwbWVudF9idWRnZXQnLCBFcXVpcG1lbnRCdWRnZXRWaWV3U2V0KQojIHJvdXRlci5yZWdpc3RlcihyJ292ZXJoZWFkX2J1ZGdldCcsIE92ZXJIZWFkQnVkZ2V0Vmlld1NldCkKcm91dGVyLnJlZ2lzdGVyKHInbWFucG93ZXJfdGFzaycsIE1hbnBvd2VyVGFza1ZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ21hdGVyaWFsX3Rhc2snLCBNYXRlcmlhbFRhc2tWaWV3U2V0KQpyb3V0ZXIucmVnaXN0ZXIocidzdWJjb250cmFjdF90YXNrJywgU3ViY29udHJhY3RUYXNrVmlld1NldCkKcm91dGVyLnJlZ2lzdGVyKHInZXF1aXBtZW50X3Rhc2snLCBFcXVpcG1lbnRUYXNrVmlld1NldCkKcm91dGVyLnJlZ2lzdGVyKHInZXBwX2J1ZGdldCcsIEVQUEJ1ZGdldFZpZXdTZXQpCiMgcm91dGVyLnJlZ2lzdGVyKHInZXBwX2J1ZGdldF9kZWxldGVkJywgRVBQQnVkZ2V0RGVsZXRlZFZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ2VwcF9idWRnZXRfZGV0YWlsJywgRVBQQnVkZ2V0RGV0YWlsVmlld1NldCkKIyByb3V0ZXIucmVnaXN0ZXIocidlcHBfYnVkZ2V0X2RldGFpbF9kZWxldGVkJywgRVBQQnVkZ2V0RGV0YWlsRGVsZXRlZFZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ2NlcnRpZmljYWNpb25fYnVkZ2V0JywgQ2VydGlmaWNhY2lvbkJ1ZGdldFZpZXdTZXQpCiMgcm91dGVyLnJlZ2lzdGVyKHInY2VydGlmaWNhY2lvbl9idWRnZXRfZGVsZXRlZCcsIENlcnRpZmljYWNpb25CdWRnZXREZWxldGVkVmlld1NldCkKCnVybHBhdHRlcm5zID0gWwogICAgcmVfcGF0aChyJ14kJywgdmlld3MuQnVkZ2V0Vmlldy5hc192aWV3KCksIG5hbWU9ImJ1ZGdldF92aWV3IiksCiAgICByZV9wYXRoKHInXmFwaS8nLCBpbmNsdWRlKHJvdXRlci51cmxzKSksCiAgICByZV9wYXRoKHInXmFwaS9zdGF0dXMvJCcsIFN0YXR1c0J1ZGdldFZpZXcuYXNfdmlldygpLCBuYW1lPSJzdGF0dXNfYnVkZ2V0IiksCiAgICByZV9wYXRoKAogICAgICAgIHInXmFwaS9idWRnZXRzLyg/UDxiYWRnZXRfaWQ+XHcrKS9tYW5wb3dlci9zdW1tYXJ5JCcsCiAgICAgICAgTWFucG93ZXJTdW1tYXJ5QnVkZ2V0Vmlldy5hc192aWV3KCksCiAgICAgICAgbmFtZT0nYnVkZ2V0X21hbnBvd2VyX3N1bW1hcnknKSwKICAgIHJlX3BhdGgoCiAgICAgICAgcideYXBpL2J1ZGdldHMvKD9QPGJhZGdldF9pZD5cdyspL2VxdWlwbWVudC9zdW1tYXJ5JCcsCiAgICAgICAgRXF1aXBtZW50U3VtbWFyeUJ1ZGdldFZpZXcuYXNfdmlldygpLAogICAgICAgIG5hbWU9J2J1ZGdldF9lcXVpcG1lbnRfc3VtbWFyeScpLAogICAgcmVfcGF0aCgKICAgICAgICByJ15hcGkvYnVkZ2V0cy8oP1A8YmFkZ2V0X2lkPlx3KykvbWFucG93ZXJzLyg/UDx0YXNrX2lkPlx3KykvYXB1JCcsCiAgICAgICAgU3ViVG90YWxNYW5wb3dlclRhc2tCdWRnZXRWaWV3LmFzX3ZpZXcoKSwKICAgICAgICBuYW1lPSdidWRnZXRzX21hbnBvd2Vyc19hcHUnKSwKICAgIHJlX3BhdGgoCiAgICAgICAgcideYXBpL2J1ZGdldHMvKD9QPGJhZGdldF9pZD5cdyspL21hdGVyaWFscy8oP1A8dGFza19pZD5cdyspL2FwdSQnLAogICAgICAgIFN1YlRvdGFsTWF0ZXJpYWxUYXNrQnVkZ2V0Vmlldy5hc192aWV3KCksCiAgICAgICAgbmFtZT0nYnVkZ2V0c19tYXRlcmlhbHNfYXB1JyksCiAgICByZV9wYXRoKAogICAgICAgIHInXmFwaS9idWRnZXRzLyg/UDxiYWRnZXRfaWQ+XHcrKS9lcXVpcG1lbnRzLyg/UDx0YXNrX2lkPlx3KykvYXB1JCcsCiAgICAgICAgU3ViVG90YWxFcXVpcG1lbnRUYXNrQnVkZ2V0Vmlldy5hc192aWV3KCksCiAgICAgICAgbmFtZT0nYnVkZ2V0c19lcXVpcG1lbnRzX2FwdScpLAogICAgcmVfcGF0aCgKICAgICAgICByJ15hcGkvYnVkZ2V0cy8oP1A8YmFkZ2V0X2lkPlx3KykvbWFucG93ZXIvb3ZlcmhlYWQkJywKICAgICAgICBNYW5wb3dlck92ZXJoZWFkQnVkZ2V0Vmlldy5hc192aWV3KCksCiAgICAgICAgbmFtZT0nYnVkZ2V0X21hbnBvd2VyX292ZXJoZWFkJyksCiAgICByZV9wYXRoKAogICAgICAgIHInXmFwaS9idWRnZXRzLyg/UDxiYWRnZXRfaWQ+XHcrKS9kaXJlY3QvY2xvc2UkJywKICAgICAgICBDbG9zZURpcmVjdFZpZXcuYXNfdmlldygpLAogICAgICAgIG5hbWU9J2J1ZGdldF9kaXJlY3RfY2xvc2UnKSwKICAgIHJlX3BhdGgoCiAgICAgICAgcideYXBpL2J1ZGdldHMvKD9QPHBrPlx3KykvdGFza3MvZGVsZXRlJCcsCiAgICAgICAgZGVsZXRlX2FsbF90YXNrcywKICAgICAgICBuYW1lPSdidWRnZXRfdGFza3NfZGVsZXRlJyksCiAgICByZV9wYXRoKAogICAgICAgIHInXmFwaS90YXNrcy8oP1A8cGs+XHcrKS9jaGlsZHJlbiQnLAogICAgICAgIGdldF9jaGlsZHJlbl90YXNrLAogICAgICAgIG5hbWU9J2dldF9jaGlsZHJlbl90YXNrJyksCiAgICByZV9wYXRoKAogICAgICAgIHInXmFwaS9ub2RlYXBpJCcsCiAgICAgICAgbm9kZWFwaSwKICAgICAgICBuYW1lPSdub2RlYXBpJyksCiAgICByZV9wYXRoKAogICAgICAgIHInXig/UDxwaz5cdyspL2Rvd25sb2FkJCcsCiAgICAgICAgdmlld3MuZXhwb3J0X2J1ZGdldF94bWwsCiAgICAgICAgbmFtZT0nYnVkZ2V0X2Rvd25sb2FkJyksCgogICAgIyBJbmljaW86IFN0YW5kYnkKICAgIHJlX3BhdGgoCiAgICAgICAgcideYXBpL2J1ZGdldHMvKD9QPGJhZGdldF9pZD5cdyspL21hbnBvd2VyL3N0YW5kYnkkJywKPHxmaW1faG9sZXw+CiAgICByZV9wYXRoKAogICAgICAgIHInXmFwaS9idWRnZXRzLyg/UDxiYWRnZXRfaWQ+XHcrKS9lcXVpcG1lbnQvc3RhbmRieSQnLAogICAgICAgIEJ1ZGdldFN0YW5kYnlFcXVpcG1lbnRWaWV3LmFzX3ZpZXcoKSwKICAgICAgICBuYW1lPSdidWRnZXRfc3RhbmRieV9lcXVpcG1lbnQnKSwKICAgICMgRmluOiBTdGFuZGJ5CgogICAgIyBJbmljaW86IE92ZXJoZWFkCiAgICByZV9wYXRoKAogICAgICAgIHInXmFwaS9idWRnZXRzLyg/UDxiYWRnZXRfaWQ+XHcrKS9zdGFuZGJ5L292ZXJoZWFkJCcsCiAgICAgICAgQnVkZ2V0T3ZlcmhlYWRTdGFuZGJ5Vmlldy5hc192aWV3KCksCiAgICAgICAgbmFtZT0nYnVkZ2V0X292ZXJoZWFkX3N0YW5kYnknKSwKICAgIHJlX3BhdGgoCiAgICAgICAgcideYXBpL2J1ZGdldHMvKD9QPGJhZGdldF9pZD5cdyspL21hdGVyaWFsLyg/UDx0eXBlX21hdGVyaWFsPlx3Kykvb3ZlcmhlYWQkJywKICAgICAgICBCdWRnZXRPdmVyaGVhZE1hdGVyaWFsVmlldy5hc192aWV3KCksCiAgICAgICAgbmFtZT0nYnVkZ2V0X292ZXJoZWFkX21hdGVyaWFsJyksCiAgICAjIEZpbjogT3ZlcmhlYWQKXQo8fGZpbV9zdWZmaXh8PgogICAgICAgIEJ1ZGdldFN0YW5kYnlNYW5wb3dlclZpZXcuYXNfdmlldygpLAogICAgICAgIG5hbWU9J2J1ZGdldF9zdGFuZGJ5X21hbnBvd2VyJyksCjx8ZmltX2VuZHw+"]
["00da47d04964406cbea2cb48ee3a639ff8ee4075-3","00da47d04964406cbea2cb48ee3a639ff8ee4075","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCgpmcm9tIGRqYW5nby5jb25mLnVybHMgaW1wb3J0IHVybCwgaW5jbHVkZQpmcm9tIGRqYW5nby51cmxzIGltcG9ydCBwYXRoLCByZV9wYXRoCgpmcm9tIHJlc3RfZnJhbWV3b3JrLnJvdXRlcnMgaW1wb3J0IERlZmF1bHRSb3V0ZXIKCmZyb20gLiBpbXBvcnQgdmlld3MKZnJvbSAuYXBpIGltcG9ydCAoCiAgICBCdWRnZXRPdmVyaGVhZE1hdGVyaWFsVmlldywKICAgIEJ1ZGdldE92ZXJoZWFkU3RhbmRieVZpZXcsCiAgICBCdWRnZXRTdGFuZGJ5RXF1aXBtZW50VmlldywKICAgIEJ1ZGdldFN0YW5kYnlNYW5wb3dlclZpZXcsCiAgICBCdWRnZXRWaWV3U2V0LAogICAgQ2xvc2VEaXJlY3RWaWV3LAogICAgRXF1aXBtZW50QnVkZ2V0Vmlld1NldCwKICAgIEVxdWlwbWVudFN1bW1hcnlCdWRnZXRWaWV3LAogICAgRXF1aXBtZW50VGFza1ZpZXdTZXQsCiAgICBNYW5wb3dlckJ1ZGdldFZpZXdTZXQsCiAgICBNYW5wb3dlck92ZXJoZWFkQnVkZ2V0VmlldywKICAgIE1hbnBvd2VyU3VtbWFyeUJ1ZGdldFZpZXcsCiAgICBNYW5wb3dlclRhc2tWaWV3U2V0LAogICAgTWF0ZXJpYWxCdWRnZXRWaWV3U2V0LAogICAgIyBNYXRlcmlhbE92ZXJoZWFkQnVkZ2V0VmlldywKICAgIE1hdGVyaWFsVGFza1ZpZXdTZXQsCiAgICBTdGF0dXNCdWRnZXRWaWV3LAogICAgU3ViVG90YWxFcXVpcG1lbnRUYXNrQnVkZ2V0VmlldywKICAgIFN1YlRvdGFsTWFucG93ZXJUYXNrQnVkZ2V0VmlldywKICAgIFN1YlRvdGFsTWF0ZXJpYWxUYXNrQnVkZ2V0VmlldywKICAgIFN1YmNvbnRyYWN0QnVkZ2V0Vmlld1NldCwKICAgIFN1YmNvbnRyYWN0VGFza1ZpZXdTZXQsCiAgICBUYXNrQnVkZ2V0Vmlld1NldCwKICAgIGRlbGV0ZV9hbGxfdGFza3MsCiAgICBnZXRfY2hpbGRyZW5fdGFzaywKICAgIG5vZGVhcGksCiAgICBFUFBCdWRnZXRWaWV3U2V0LAogICAgRVBQQnVkZ2V0RGVsZXRlZFZpZXdTZXQsCiAgICBFUFBCdWRnZXREZXRhaWxWaWV3U2V0LAogICAgIyBFUFBCdWRnZXREZXRhaWxEZWxldGVkVmlld1NldCwKICAgIENlcnRpZmljYWNpb25CdWRnZXRWaWV3U2V0LAogICAgQ2VydGlmaWNhY2lvbkJ1ZGdldERlbGV0ZWRWaWV3U2V0LAogICAgQnVkZ2V0VHJlZVZpZXdTZXQKKQoKYXBwX25hbWUgPSAiYnVkZ2V0IgoKcm91dGVyID0gRGVmYXVsdFJvdXRlcigpCnJvdXRlci5yZWdpc3RlcihyJ2J1ZGdldHMnLCBCdWRnZXRWaWV3U2V0KQojIHJvdXRlci5yZWdpc3RlcihyJ2J1ZGdldF90cmVlJywgQnVkZ2V0VHJlZVZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ3Rhc2tzJywgVGFza0J1ZGdldFZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ21hbnBvd2VyX2J1ZGdldCcsIE1hbnBvd2VyQnVkZ2V0Vmlld1NldCkKcm91dGVyLnJlZ2lzdGVyKHInbWF0ZXJpYWxfYnVkZ2V0JywgTWF0ZXJpYWxCdWRnZXRWaWV3U2V0KQpyb3V0ZXIucmVnaXN0ZXIocidzdWJjb250cmFjdF9idWRnZXQnLCBTdWJjb250cmFjdEJ1ZGdldFZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ2VxdWlwbWVudF9idWRnZXQnLCBFcXVpcG1lbnRCdWRnZXRWaWV3U2V0KQojIHJvdXRlci5yZWdpc3RlcihyJ292ZXJoZWFkX2J1ZGdldCcsIE92ZXJIZWFkQnVkZ2V0Vmlld1NldCkKcm91dGVyLnJlZ2lzdGVyKHInbWFucG93ZXJfdGFzaycsIE1hbnBvd2VyVGFza1ZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ21hdGVyaWFsX3Rhc2snLCBNYXRlcmlhbFRhc2tWaWV3U2V0KQpyb3V0ZXIucmVnaXN0ZXIocidzdWJjb250cmFjdF90YXNrJywgU3ViY29udHJhY3RUYXNrVmlld1NldCkKcm91dGVyLnJlZ2lzdGVyKHInZXF1aXBtZW50X3Rhc2snLCBFcXVpcG1lbnRUYXNrVmlld1NldCkKcm91dGVyLnJlZ2lzdGVyKHInZXBwX2J1ZGdldCcsIEVQUEJ1ZGdldFZpZXdTZXQpCiMgcm91dGVyLnJlZ2lzdGVyKHInZXBwX2J1ZGdldF9kZWxldGVkJywgRVBQQnVkZ2V0RGVsZXRlZFZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ2VwcF9idWRnZXRfZGV0YWlsJywgRVBQQnVkZ2V0RGV0YWlsVmlld1NldCkKIyByb3V0ZXIucmVnaXN0ZXIocidlcHBfYnVkZ2V0X2RldGFpbF9kZWxldGVkJywgRVBQQnVkZ2V0RGV0YWlsRGVsZXRlZFZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ2NlcnRpZmljYWNpb25fYnVkZ2V0JywgQ2VydGlmaWNhY2lvbkJ1ZGdldFZpZXdTZXQpCiMgcm91dGVyLnJlZ2lzdGVyKHInY2VydGlmaWNhY2lvbl9idWRnZXRfZGVsZXRlZCcsIENlcnRpZmljYWNpb25CdWRnZXREZWxldGVkVmlld1NldCkKCnVybHBhdHRlcm5zID0gWwogICAgcmVfcGF0aChyJ14kJywgdmlld3MuQnVkZ2V0Vmlldy5hc192aWV3KCksIG5hbWU9ImJ1ZGdldF92aWV3IiksCiAgICByZV9wYXRoKHInXmFwaS8nLCBpbmNsdWRlKHJvdXRlci51cmxzKSksCiAgICByZV9wYXRoKHInXmFwaS9zdGF0dXMvJCcsIFN0YXR1c0J1ZGdldFZpZXcuYXNfdmlldygpLCBuYW1lPSJzdGF0dXNfYnVkZ2V0IiksCiAgICByZV9wYXRoKAogICAgICAgIHInXmFwaS9idWRnZXRzLyg/UDxiYWRnZXRfaWQ+XHcrKS9tYW5wb3dlci9zdW1tYXJ5JCcsCiAgICAgICAgTWFucG93ZXJTdW1tYXJ5QnVkZ2V0Vmlldy5hc192aWV3KCksCiAgICAgICAgbmFtZT0nYnVkZ2V0X21hbnBvd2VyX3N1bW1hcnknKSwKICAgIHJlX3BhdGgoCiAgICAgICAgcideYXBpL2J1ZGdldHMvKD9QPGJhZGdldF9pZD5cdyspL2VxdWlwbWVudC9zdW1tYXJ5JCcsCiAgICAgICAgRXF1aXBtZW50U3VtbWFyeUJ1ZGdldFZpZXcuYXNfdmlldygpLAogICAgICAgIG5hbWU9J2J1ZGdldF9lcXVpcG1lbnRfc3VtbWFyeScpLAogICAgcmVfcGF0aCgKICAgICAgICByJ15hcGkvYnVkZ2V0cy8oP1A8YmFkZ2V0X2lkPlx3KykvbWFucG93ZXJzLyg/UDx0YXNrX2lkPlx3KykvYXB1JCcsCiAgICAgICAgU3ViVG90YWxNYW5wb3dlclRhc2tCdWRnZXRWaWV3LmFzX3ZpZXcoKSwKICAgICAgICBuYW1lPSdidWRnZXRzX21hbnBvd2Vyc19hcHUnKSwKICAgIHJlX3BhdGgoCiAgICAgICAgcideYXBpL2J1ZGdldHMvKD9QPGJhZGdldF9pZD5cdyspL21hdGVyaWFscy8oP1A8dGFza19pZD5cdyspL2FwdSQnLAogICAgICAgIFN1YlRvdGFsTWF0ZXJpYWxUYXNrQnVkZ2V0Vmlldy5hc192aWV3KCksCiAgICAgICAgbmFtZT0nYnVkZ2V0c19tYXRlcmlhbHNfYXB1JyksCiAgICByZV9wYXRoKAogICAgICAgIHInXmFwaS9idWRnZXRzLyg/UDxiYWRnZXRfaWQ+XHcrKS9lcXVpcG1lbnRzLyg/UDx0YXNrX2lkPlx3KykvYXB1JCcsCiAgICAgICAgU3ViVG90YWxFcXVpcG1lbnRUYXNrQnVkZ2V0Vmlldy5hc192aWV3KCksCiAgICAgICAgbmFtZT0nYnVkZ2V0c19lcXVpcG1lbnRzX2FwdScpLAogICAgcmVfcGF0aCgKICAgICAgICByJ15hcGkvYnVkZ2V0cy8oP1A8YmFkZ2V0X2lkPlx3KykvbWFucG93ZXIvb3ZlcmhlYWQkJywKICAgICAgICBNYW5wb3dlck92ZXJoZWFkQnVkZ2V0Vmlldy5hc192aWV3KCksCiAgICAgICAgbmFtZT0nYnVkZ2V0X21hbnBvd2VyX292ZXJoZWFkJyksCiAgICByZV9wYXRoKAogICAgICAgIHInXmFwaS9idWRnZXRzLyg/UDxiYWRnZXRfaWQ+XHcrKS9kaXJlY3QvY2xvc2UkJywKICAgICAgICBDbG9zZURpcmVjdFZpZXcuYXNfdmlldygpLAogICAgICAgIG5hbWU9J2J1ZGdldF9kaXJlY3RfY2xvc2UnKSwKICAgIHJlX3BhdGgoCiAgICAgICAgcideYXBpL2J1ZGdldHMvKD9QPHBrPlx3KykvdGFza3MvZGVsZXRlJCcsCiAgICAgICAgZGVsZXRlX2FsbF90YXNrcywKICAgICAgICBuYW1lPSdidWRnZXRfdGFza3NfZGVsZXRlJyksCjx8ZmltX2hvbGV8PgogICAgcmVfcGF0aCgKICAgICAgICByJ15hcGkvbm9kZWFwaSQnLAogICAgICAgIG5vZGVhcGksCiAgICAgICAgbmFtZT0nbm9kZWFwaScpLAogICAgcmVfcGF0aCgKICAgICAgICByJ14oP1A8cGs+XHcrKS9kb3dubG9hZCQnLAogICAgICAgIHZpZXdzLmV4cG9ydF9idWRnZXRfeG1sLAogICAgICAgIG5hbWU9J2J1ZGdldF9kb3dubG9hZCcpLAoKICAgICMgSW5pY2lvOiBTdGFuZGJ5CiAgICByZV9wYXRoKAogICAgICAgIHInXmFwaS9idWRnZXRzLyg/UDxiYWRnZXRfaWQ+XHcrKS9tYW5wb3dlci9zdGFuZGJ5JCcsCiAgICAgICAgQnVkZ2V0U3RhbmRieU1hbnBvd2VyVmlldy5hc192aWV3KCksCiAgICAgICAgbmFtZT0nYnVkZ2V0X3N0YW5kYnlfbWFucG93ZXInKSwKICAgIHJlX3BhdGgoCiAgICAgICAgcideYXBpL2J1ZGdldHMvKD9QPGJhZGdldF9pZD5cdyspL2VxdWlwbWVudC9zdGFuZGJ5JCcsCiAgICAgICAgQnVkZ2V0U3RhbmRieUVxdWlwbWVudFZpZXcuYXNfdmlldygpLAogICAgICAgIG5hbWU9J2J1ZGdldF9zdGFuZGJ5X2VxdWlwbWVudCcpLAogICAgIyBGaW46IFN0YW5kYnkKCiAgICAjIEluaWNpbzogT3ZlcmhlYWQKICAgIHJlX3BhdGgoCiAgICAgICAgcideYXBpL2J1ZGdldHMvKD9QPGJhZGdldF9pZD5cdyspL3N0YW5kYnkvb3ZlcmhlYWQkJywKICAgICAgICBCdWRnZXRPdmVyaGVhZFN0YW5kYnlWaWV3LmFzX3ZpZXcoKSwKICAgICAgICBuYW1lPSdidWRnZXRfb3ZlcmhlYWRfc3RhbmRieScpLAogICAgcmVfcGF0aCgKICAgICAgICByJ15hcGkvYnVkZ2V0cy8oP1A8YmFkZ2V0X2lkPlx3KykvbWF0ZXJpYWwvKD9QPHR5cGVfbWF0ZXJpYWw+XHcrKS9vdmVyaGVhZCQnLAogICAgICAgIEJ1ZGdldE92ZXJoZWFkTWF0ZXJpYWxWaWV3LmFzX3ZpZXcoKSwKICAgICAgICBuYW1lPSdidWRnZXRfb3ZlcmhlYWRfbWF0ZXJpYWwnKSwKICAgICMgRmluOiBPdmVyaGVhZApdCjx8ZmltX3N1ZmZpeHw+CiAgICByZV9wYXRoKAogICAgICAgIHInXmFwaS90YXNrcy8oP1A8cGs+XHcrKS9jaGlsZHJlbiQnLAogICAgICAgIGdldF9jaGlsZHJlbl90YXNrLAogICAgICAgIG5hbWU9J2dldF9jaGlsZHJlbl90YXNrJyksCjx8ZmltX2VuZHw+"]
["00da47d04964406cbea2cb48ee3a639ff8ee4075-4","00da47d04964406cbea2cb48ee3a639ff8ee4075","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCgpmcm9tIGRqYW5nby5jb25mLnVybHMgaW1wb3J0IHVybCwgaW5jbHVkZQpmcm9tIGRqYW5nby51cmxzIGltcG9ydCBwYXRoLCByZV9wYXRoCgpmcm9tIHJlc3RfZnJhbWV3b3JrLnJvdXRlcnMgaW1wb3J0IERlZmF1bHRSb3V0ZXIKCmZyb20gLiBpbXBvcnQgdmlld3MKZnJvbSAuYXBpIGltcG9ydCAoCiAgICBCdWRnZXRPdmVyaGVhZE1hdGVyaWFsVmlldywKICAgIEJ1ZGdldE92ZXJoZWFkU3RhbmRieVZpZXcsCiAgICBCdWRnZXRTdGFuZGJ5RXF1aXBtZW50VmlldywKICAgIEJ1ZGdldFN0YW5kYnlNYW5wb3dlclZpZXcsCiAgICBCdWRnZXRWaWV3U2V0LAogICAgQ2xvc2VEaXJlY3RWaWV3LAogICAgRXF1aXBtZW50QnVkZ2V0Vmlld1NldCwKICAgIEVxdWlwbWVudFN1bW1hcnlCdWRnZXRWaWV3LAogICAgRXF1aXBtZW50VGFza1ZpZXdTZXQsCiAgICBNYW5wb3dlckJ1ZGdldFZpZXdTZXQsCiAgICBNYW5wb3dlck92ZXJoZWFkQnVkZ2V0VmlldywKICAgIE1hbnBvd2VyU3VtbWFyeUJ1ZGdldFZpZXcsCiAgICBNYW5wb3dlclRhc2tWaWV3U2V0LAogICAgTWF0ZXJpYWxCdWRnZXRWaWV3U2V0LAogICAgIyBNYXRlcmlhbE92ZXJoZWFkQnVkZ2V0VmlldywKICAgIE1hdGVyaWFsVGFza1ZpZXdTZXQsCiAgICBTdGF0dXNCdWRnZXRWaWV3LAogICAgU3ViVG90YWxFcXVpcG1lbnRUYXNrQnVkZ2V0VmlldywKICAgIFN1YlRvdGFsTWFucG93ZXJUYXNrQnVkZ2V0VmlldywKICAgIFN1YlRvdGFsTWF0ZXJpYWxUYXNrQnVkZ2V0VmlldywKICAgIFN1YmNvbnRyYWN0QnVkZ2V0Vmlld1NldCwKICAgIFN1YmNvbnRyYWN0VGFza1ZpZXdTZXQsCiAgICBUYXNrQnVkZ2V0Vmlld1NldCwKICAgIGRlbGV0ZV9hbGxfdGFza3MsCiAgICBnZXRfY2hpbGRyZW5fdGFzaywKICAgIG5vZGVhcGksCiAgICBFUFBCdWRnZXRWaWV3U2V0LAogICAgRVBQQnVkZ2V0RGVsZXRlZFZpZXdTZXQsCiAgICBFUFBCdWRnZXREZXRhaWxWaWV3U2V0LAogICAgIyBFUFBCdWRnZXREZXRhaWxEZWxldGVkVmlld1NldCwKICAgIENlcnRpZmljYWNpb25CdWRnZXRWaWV3U2V0LAogICAgQ2VydGlmaWNhY2lvbkJ1ZGdldERlbGV0ZWRWaWV3U2V0LAogICAgQnVkZ2V0VHJlZVZpZXdTZXQKKQoKYXBwX25hbWUgPSAiYnVkZ2V0IgoKcm91dGVyID0gRGVmYXVsdFJvdXRlcigpCnJvdXRlci5yZWdpc3RlcihyJ2J1ZGdldHMnLCBCdWRnZXRWaWV3U2V0KQojIHJvdXRlci5yZWdpc3RlcihyJ2J1ZGdldF90cmVlJywgQnVkZ2V0VHJlZVZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ3Rhc2tzJywgVGFza0J1ZGdldFZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ21hbnBvd2VyX2J1ZGdldCcsIE1hbnBvd2VyQnVkZ2V0Vmlld1NldCkKcm91dGVyLnJlZ2lzdGVyKHInbWF0ZXJpYWxfYnVkZ2V0JywgTWF0ZXJpYWxCdWRnZXRWaWV3U2V0KQpyb3V0ZXIucmVnaXN0ZXIocidzdWJjb250cmFjdF9idWRnZXQnLCBTdWJjb250cmFjdEJ1ZGdldFZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ2VxdWlwbWVudF9idWRnZXQnLCBFcXVpcG1lbnRCdWRnZXRWaWV3U2V0KQojIHJvdXRlci5yZWdpc3RlcihyJ292ZXJoZWFkX2J1ZGdldCcsIE92ZXJIZWFkQnVkZ2V0Vmlld1NldCkKcm91dGVyLnJlZ2lzdGVyKHInbWFucG93ZXJfdGFzaycsIE1hbnBvd2VyVGFza1ZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ21hdGVyaWFsX3Rhc2snLCBNYXRlcmlhbFRhc2tWaWV3U2V0KQpyb3V0ZXIucmVnaXN0ZXIocidzdWJjb250cmFjdF90YXNrJywgU3ViY29udHJhY3RUYXNrVmlld1NldCkKcm91dGVyLnJlZ2lzdGVyKHInZXF1aXBtZW50X3Rhc2snLCBFcXVpcG1lbnRUYXNrVmlld1NldCkKcm91dGVyLnJlZ2lzdGVyKHInZXBwX2J1ZGdldCcsIEVQUEJ1ZGdldFZpZXdTZXQpCiMgcm91dGVyLnJlZ2lzdGVyKHInZXBwX2J1ZGdldF9kZWxldGVkJywgRVBQQnVkZ2V0RGVsZXRlZFZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ2VwcF9idWRnZXRfZGV0YWlsJywgRVBQQnVkZ2V0RGV0YWlsVmlld1NldCkKIyByb3V0ZXIucmVnaXN0ZXIocidlcHBfYnVkZ2V0X2RldGFpbF9kZWxldGVkJywgRVBQQnVkZ2V0RGV0YWlsRGVsZXRlZFZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ2NlcnRpZmljYWNpb25fYnVkZ2V0JywgQ2VydGlmaWNhY2lvbkJ1ZGdldFZpZXdTZXQpCiMgcm91dGVyLnJlZ2lzdGVyKHInY2VydGlmaWNhY2lvbl9idWRnZXRfZGVsZXRlZCcsIENlcnRpZmljYWNpb25CdWRnZXREZWxldGVkVmlld1NldCkKCnVybHBhdHRlcm5zID0gWwogICAgcmVfcGF0aChyJ14kJywgdmlld3MuQnVkZ2V0Vmlldy5hc192aWV3KCksIG5hbWU9ImJ1ZGdldF92aWV3IiksCiAgICByZV9wYXRoKHInXmFwaS8nLCBpbmNsdWRlKHJvdXRlci51cmxzKSksCiAgICByZV9wYXRoKHInXmFwaS9zdGF0dXMvJCcsIFN0YXR1c0J1ZGdldFZpZXcuYXNfdmlldygpLCBuYW1lPSJzdGF0dXNfYnVkZ2V0IiksCiAgICByZV9wYXRoKAogICAgICAgIHInXmFwaS9idWRnZXRzLyg/UDxiYWRnZXRfaWQ+XHcrKS9tYW5wb3dlci9zdW1tYXJ5JCcsCiAgICAgICAgTWFucG93ZXJTdW1tYXJ5QnVkZ2V0Vmlldy5hc192aWV3KCksCiAgICAgICAgbmFtZT0nYnVkZ2V0X21hbnBvd2VyX3N1bW1hcnknKSwKICAgIHJlX3BhdGgoCiAgICAgICAgcideYXBpL2J1ZGdldHMvKD9QPGJhZGdldF9pZD5cdyspL2VxdWlwbWVudC9zdW1tYXJ5JCcsCiAgICAgICAgRXF1aXBtZW50U3VtbWFyeUJ1ZGdldFZpZXcuYXNfdmlldygpLAogICAgICAgIG5hbWU9J2J1ZGdldF9lcXVpcG1lbnRfc3VtbWFyeScpLAogICAgcmVfcGF0aCgKICAgICAgICByJ15hcGkvYnVkZ2V0cy8oP1A8YmFkZ2V0X2lkPlx3KykvbWFucG93ZXJzLyg/UDx0YXNrX2lkPlx3KykvYXB1JCcsCiAgICAgICAgU3ViVG90YWxNYW5wb3dlclRhc2tCdWRnZXRWaWV3LmFzX3ZpZXcoKSwKICAgICAgICBuYW1lPSdidWRnZXRzX21hbnBvd2Vyc19hcHUnKSwKICAgIHJlX3BhdGgoCiAgICAgICAgcideYXBpL2J1ZGdldHMvKD9QPGJhZGdldF9pZD5cdyspL21hdGVyaWFscy8oP1A8dGFza19pZD5cdyspL2FwdSQnLAogICAgICAgIFN1YlRvdGFsTWF0ZXJpYWxUYXNrQnVkZ2V0Vmlldy5hc192aWV3KCksCiAgICAgICAgbmFtZT0nYnVkZ2V0c19tYXRlcmlhbHNfYXB1JyksCiAgICByZV9wYXRoKAogICAgICAgIHInXmFwaS9idWRnZXRzLyg/UDxiYWRnZXRfaWQ+XHcrKS9lcXVpcG1lbnRzLyg/UDx0YXNrX2lkPlx3KykvYXB1JCcsCiAgICAgICAgU3ViVG90YWxFcXVpcG1lbnRUYXNrQnVkZ2V0Vmlldy5hc192aWV3KCksCiAgICAgICAgbmFtZT0nYnVkZ2V0c19lcXVpcG1lbnRzX2FwdScpLAogICAgcmVfcGF0aCgKICAgICAgICByJ15hcGkvYnVkZ2V0cy8oP1A8YmFkZ2V0X2lkPlx3KykvbWFucG93ZXIvb3ZlcmhlYWQkJywKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIE1hbnBvd2VyT3ZlcmhlYWRCdWRnZXRWaWV3LmFzX3ZpZXcoKSwKICAgICAgICBuYW1lPSdidWRnZXRfbWFucG93ZXJfb3ZlcmhlYWQnKSwKPHxmaW1fZW5kfD4="]
["c1004000573e269d283e6557346225767f3bbce3-1","c1004000573e269d283e6557346225767f3bbce3","PHxmaW1fcHJlZml4fD4KIiIiClNvcnQgdGhlIENTViByZXBvcnQgYnkgbG9jYXRpb24gYW5kIGRpc3RhbmNlLAogIHNvIHRoYXQgaW4gc3Vic2VxdWVudCBzdGVwcyB3ZSBjYW4gZ3JvdXAgYW5kCiAgc3VtbWFyaXplCiIiIgoKaW1wb3J0IGNzdgppbXBvcnQgc3lzCmltcG9ydCBzY2hlbWF0YQoKc2NoZW1hID0gc2NoZW1hdGEucnVzYV9zbmFyZgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpzdGF0ZV9wb3MgPSBzY2hlbWEuaW5kZXgoIlN0YXRlIikKY2l0eV9wb3MgPSBzY2hlbWEuaW5kZXgoIkNpdHkiKQpkaXN0X3BvcyA9IHNjaGVtYS5pbmRleCgiUGVybV9rbSIpCgo8fGZpbV9lbmR8Pg=="]
["c1004000573e269d283e6557346225767f3bbce3-2","c1004000573e269d283e6557346225767f3bbce3","PHxmaW1fcHJlZml4fD4KIiIiClNvcnQgdGhlIENTViByZXBvcnQgYnkgbG9jYXRpb24gYW5kIGRpc3RhbmNlLAogIHNvIHRoYXQgaW4gc3Vic2VxdWVudCBzdGVwcyB3ZSBjYW4gZ3JvdXAgYW5kCiAgc3VtbWFyaXplCiIiIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgppbXBvcnQgY3N2CmltcG9ydCBzeXMKaW1wb3J0IHNjaGVtYXRhCjx8ZmltX2VuZHw+"]
["c1004000573e269d283e6557346225767f3bbce3-3","c1004000573e269d283e6557346225767f3bbce3","PHxmaW1fcHJlZml4fD4KIiIiClNvcnQgdGhlIENTViByZXBvcnQgYnkgbG9jYXRpb24gYW5kIGRpc3RhbmNlLAogIHNvIHRoYXQgaW4gc3Vic2VxdWVudCBzdGVwcyB3ZSBjYW4gZ3JvdXAgYW5kCiAgc3VtbWFyaXplCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIiIiCgppbXBvcnQgY3N2CmltcG9ydCBzeXMKPHxmaW1fZW5kfD4="]
["c1004000573e269d283e6557346225767f3bbce3-4","c1004000573e269d283e6557346225767f3bbce3","PHxmaW1fcHJlZml4fD4KIiIiClNvcnQgdGhlIENTViByZXBvcnQgYnkgbG9jYXRpb24gYW5kIGRpc3RhbmNlLAogIHNvIHRoYXQgaW4gc3Vic2VxdWVudCBzdGVwcyB3ZSBjYW4gZ3JvdXAgYW5kCiAgc3VtbWFyaXplCiIiIgoKaW1wb3J0IGNzdgppbXBvcnQgc3lzCmltcG9ydCBzY2hlbWF0YQoKc2NoZW1hID0gc2NoZW1hdGEucnVzYV9zbmFyZgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpzdGF0ZV9wb3MgPSBzY2hlbWEuaW5kZXgoIlN0YXRlIikKY2l0eV9wb3MgPSBzY2hlbWEuaW5kZXgoIkNpdHkiKQpkaXN0X3BvcyA9IHNjaGVtYS5pbmRleCgiUGVybV9rbSIpCjx8ZmltX2VuZHw+"]
["8231b25c2dd8c25e48d0ed1a39796e3c73d26a6d-1","8231b25c2dd8c25e48d0ed1a39796e3c73d26a6d","PHxmaW1fcHJlZml4fD4K77u/aW1wb3J0IG9zCgppbXBvcnQgcHlnYW1lIGFzIHBnCgppbXBvcnQgdG9vbHMKaW1wb3J0IG9wdGlvbnMKaW1wb3J0IG1hcF90b29scwoKCm9wdHMgPSBvcHRpb25zLk9wdGlvbnMoKQp0aGVfbWFwID0gbWFwX3Rvb2xzLk1hcChvcHRzKQoKc2NyZWVuX3dpZHRoID0gb3B0cy5jZWxsX3dpZHRoICogKHRoZV9tYXAubnVtX2NlbGxzX3ggKyBvcHRzLndyYXBhcm91bmRfcmVwZWF0ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiArIG9wdHMuY29vcmRfZGlzcGxheSkKc2NyZWVuX2hlaWdodCA9IG9wdHMuY2VsbF9oZWlnaHQgKiAodGhlX21hcC5udW1fY2VsbHNfeSArIG9wdHMud3JhcGFyb3VuZF9yZXBlYXQgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKyBvcHRzLmNvb3JkX2Rpc3BsYXkpCgpwZy5pbml0KCkKc2NyZWVuID0gcGcuZGlzcGxheS5zZXRfbW9kZSgoc2NyZWVuX3dpZHRoLCBzY3JlZW5faGVpZ2h0KSwgcGcuUkVTSVpBQkxFLCAzMikKcGcuZGlzcGxheS5zZXRfY2FwdGlvbigiTWFwTWFrZXIgQlQgYnkgQ2FudWNrTW9ua2V5IEdhbWVzIikKCgpHRlggPSB0b29scy5sb2FkX2FsbF9nZngob3MucGF0aC5qb2luKCJhc3NldCIsICJpbWFnZSIpKQpTRlggPSB0b29scy5sb2FkX2FsbF9zZngob3MucGF0aC5qb2luKCJhc3NldCIsICJzb3VuZCIpKQpGT05UUyA9IHRvb2xzLmxvYWRfYWxsX2ZvbnRzKG9zLnBhdGguam9pbigiYXNzZXQiLCAiZm9udCIpKQpNVVNJQyA9IHRvb2xzLmxvYWRfYWxsX211c2ljKG9zLnBhdGguam9pbigiYXNzZXQiLCAibXVzaWMiKSkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KYmFja2dyb3VuZCA9IHBnLlN1cmZhY2Uoc2NyZWVuLmdldF9zaXplKCkpCmJhY2tncm91bmQgPSBiYWNrZ3JvdW5kLmNvbnZlcnQoKQpvdmVybGF5ID0gcGcuU3VyZmFjZShzY3JlZW4uZ2V0X3NpemUoKSkKb3ZlcmxheSA9IHNjcmVlbi5jb252ZXJ0X2FscGhhKCkKPHxmaW1fZW5kfD4="]
["8231b25c2dd8c25e48d0ed1a39796e3c73d26a6d-2","8231b25c2dd8c25e48d0ed1a39796e3c73d26a6d","PHxmaW1fcHJlZml4fD4K77u/aW1wb3J0IG9zCgppbXBvcnQgcHlnYW1lIGFzIHBnCgppbXBvcnQgdG9vbHMKaW1wb3J0IG9wdGlvbnMKaW1wb3J0IG1hcF90b29scwoKCm9wdHMgPSBvcHRpb25zLk9wdGlvbnMoKQp0aGVfbWFwID0gbWFwX3Rvb2xzLk1hcChvcHRzKQoKc2NyZWVuX3dpZHRoID0gb3B0cy5jZWxsX3dpZHRoICogKHRoZV9tYXAubnVtX2NlbGxzX3ggKyBvcHRzLndyYXBhcm91bmRfcmVwZWF0ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiArIG9wdHMuY29vcmRfZGlzcGxheSkKc2NyZWVuX2hlaWdodCA9IG9wdHMuY2VsbF9oZWlnaHQgKiAodGhlX21hcC5udW1fY2VsbHNfeSArIG9wdHMud3JhcGFyb3VuZF9yZXBlYXQgKgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiArIG9wdHMuY29vcmRfZGlzcGxheSkKCjx8ZmltX2VuZHw+"]
["8231b25c2dd8c25e48d0ed1a39796e3c73d26a6d-3","8231b25c2dd8c25e48d0ed1a39796e3c73d26a6d","PHxmaW1fcHJlZml4fD4K77u/aW1wb3J0IG9zCgppbXBvcnQgcHlnYW1lIGFzIHBnCgppbXBvcnQgdG9vbHMKaW1wb3J0IG9wdGlvbnMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppbXBvcnQgbWFwX3Rvb2xzCgoKb3B0cyA9IG9wdGlvbnMuT3B0aW9ucygpCjx8ZmltX2VuZHw+"]
["823cd6c8c583e11629f757db7a6eb4fec265a8e0-1","823cd6c8c583e11629f757db7a6eb4fec265a8e0","PHxmaW1fcHJlZml4fD4KIwojIHJlbmRlci5weSAtLSBiYXNlIGNsYXNzIGFuZCB1dGlsaXRpZXMgZm9yIEdpbmdhIHJlbmRlcmVycwojCiMgVGhpcyBpcyBvcGVuLXNvdXJjZSBzb2Z0d2FyZSBsaWNlbnNlZCB1bmRlciBhIEJTRCBsaWNlbnNlLgojIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRS50eHQgZm9yIGRldGFpbHMuCgpmcm9tIGlvIGltcG9ydCBCeXRlc0lPCgp0cnk6CiAgICBpbXBvcnQgUElMLkltYWdlIGFzIFBJTGltYWdlCiAgICBoYXZlX1BJTCA9IFRydWUKCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgIGhhdmVfUElMID0gRmFsc2UKCmZyb20gZ2luZ2EgaW1wb3J0IHRyY2FsYwpmcm9tIGdpbmdhLmZvbnRzIGltcG9ydCBmb250X2Fzc3QKCgpjbGFzcyBSZW5kZXJFcnJvcihFeGNlcHRpb24pOgogICAgIiIiQmFzZSBjbGFzcyBmb3IgZXhjZXB0aW9ucyB0aHJvd24gYnkgY2FudmFzIHJlbmRlcmVycy4iIiIKICAgIHBhc3MKCgpjbGFzcyBSZW5kZXJDb250ZXh0QmFzZShvYmplY3QpOgogICAgIiIiQmFzZSBjbGFzcyBmcm9tIHdoaWNoIGFsbCBSZW5kZXJDb250ZXh0IGNsYXNzZXMgYXJlIGRlcml2ZWQuIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlbmRlcmVyLCB2aWV3ZXIpOgogICAgICAgIHNlbGYucmVuZGVyZXIgPSByZW5kZXJlcgogICAgICAgIHNlbGYudmlld2VyID0gdmlld2VyCiAgICAgICAgc2VsZi5yZW5kZXJrZXkgPSByZW5kZXJlci5raW5kCgogICAgZGVmIHNjYWxlX2ZvbnRzaXplKHNlbGYsIGZvbnRzaXplKToKICAgICAgICByZXR1cm4gZm9udF9hc3N0LnNjYWxlX2ZvbnRzaXplKHNlbGYucmVuZGVya2V5LCBmb250c2l6ZSkKCgpjbGFzcyBSZW5kZXJlckJhc2Uob2JqZWN0KToKICAgICIiIkJhc2UgY2xhc3MgZnJvbSB3aGljaCBhbGwgUmVuZGVyZXIgY2xhc3NlcyBhcmUgZGVyaXZlZC4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgdmlld2VyKToKICAgICAgICBzZWxmLnZpZXdlciA9IHZpZXdlcgogICAgICAgIHNlbGYubG9nZ2VyID0gdmlld2VyLmdldF9sb2dnZXIoKQogICAgICAgIHNlbGYuc3VyZmFjZSA9IE5vbmUKCiAgICBkZWYgZ2V0X3N1cmZhY2VfYXNfYXJyYXkoc2VsZiwgb3JkZXI9Tm9uZSk6CiAgICAgICAgcmFpc2UgUmVuZGVyRXJyb3IoInN1YmNsYXNzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCEiKQoKICAgIGRlZiBnZXRfc3VyZmFjZV9hc19ieXRlcyhzZWxmLCBvcmRlcj1Ob25lKToKICAgICAgICAiIiJSZXR1cm5zIHRoZSBzdXJmYWNlIGFyZWEgYXMgYSBieXRlcyBlbmNvZGVkIFJHQiBpbWFnZSBidWZmZXIuCiAgICAgICAgU3ViY2xhc3Mgc2hvdWxkIG92ZXJyaWRlIGlmIHRoZXJlIGlzIGEgbW9yZSBlZmZpY2llbnQgY29udmVyc2lvbgogICAgICAgIHRoYW4gZnJvbSBnZW5lcmF0aW5nIGEgbnVtcHkgYXJyYXkgZmlyc3QuCiAgICAgICAgIiIiCiAgICAgICAgYXJyOCA9IHNlbGYuZ2V0X3N1cmZhY2VfYXNfYXJyYXkob3JkZXI9b3JkZXIpCiAgICAgICAgcmV0dXJuIGFycjgudG9ieXRlcyhvcmRlcj0nQycpCgogICAgZGVmIGdldF9zdXJmYWNlX2FzX2J1ZmZlcihzZWxmLCBvdXRwdXQ9Tm9uZSwgb3JkZXI9Tm9uZSk6CiAgICAgICAgb2J1ZiA9IG91dHB1dAogICAgICAgIGlmIG9idWYgaXMgTm9uZToKICAgICAgICAgICAgb2J1ZiA9IEJ5dGVzSU8oKQoKICAgICAgICBvYnVmLndyaXRlKHNlbGYuZ2V0X3N1cmZhY2VfYXNfYnl0ZXMob3JkZXI9b3JkZXIpKQogICAgICAgIHJldHVybiBvYnVmCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgZ2V0X3N1cmZhY2VfYXNfcmdiX2Zvcm1hdF9idWZmZXIoc2VsZiwgb3V0cHV0PU5vbmUsIGZvcm1hdD0ncG5nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFsaXR5PTkwKToKICAgICAgICBpZiBub3QgaGF2ZV9QSUw6CiAgICAgICAgICAgIHJhaXNlIFJlbmRlckVycm9yKCJQbGVhc2UgaW5zdGFsbCBQSUwgdG8gdXNlIHRoaXMgbWV0aG9kIikKPHxmaW1fZW5kfD4="]
["971f4fcd87c74e17b5b019b8355ec440dc9a1c53-1","971f4fcd87c74e17b5b019b8355ec440dc9a1c53","PHxmaW1fcHJlZml4fD4KZnJvbSB1dGlsLmZ1bmN0aW9uIGltcG9ydCBnZXRfbWVtYmVyX2luX2NoYW5uZWwKZnJvbSB1dGlsLmV4Y2VwdGlvbiBpbXBvcnQgTm90Rm91bmQsIEludmFsaWRBcmdzCgppbXBvcnQgcmFuZG9tCgpjbGFzcyBDbWRVdGlsaXR5OgogICAgYXN5bmMgZGVmIGNtZF9waW5ndm9jYWwoc2VsZiwgKmFyZ3MsIGNoYW5uZWwsIG1lbWJlciwgKipfKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIG1lbWJlcnMgPSBnZXRfbWVtYmVyX2luX2NoYW5uZWwobWVtYmVyLnZvaWNlKQogICAgICAgIGlmIG5vdCBtZW1iZXJzOgogICAgICAgICAgICByYWlzZSBOb3RGb3VuZCgiTWVtYmVyIG5vdCBmb3VuZCBpbiBjaGFubmVscyIpCiAgICAgICAgYXdhaXQgY2hhbm5lbC5zZW5kKCcgJy5qb2luKG1lbWJlci5tZW50aW9uIGZvciBtZW1iZXIgaW4gbWVtYmVycykpCjx8ZmltX2VuZHw+"]
["971f4fcd87c74e17b5b019b8355ec440dc9a1c53-2","971f4fcd87c74e17b5b019b8355ec440dc9a1c53","PHxmaW1fcHJlZml4fD4KZnJvbSB1dGlsLmZ1bmN0aW9uIGltcG9ydCBnZXRfbWVtYmVyX2luX2NoYW5uZWwKZnJvbSB1dGlsLmV4Y2VwdGlvbiBpbXBvcnQgTm90Rm91bmQsIEludmFsaWRBcmdzCgppbXBvcnQgcmFuZG9tCgpjbGFzcyBDbWRVdGlsaXR5OgogICAgYXN5bmMgZGVmIGNtZF9waW5ndm9jYWwoc2VsZiwgKmFyZ3MsIGNoYW5uZWwsIG1lbWJlciwgKipfKToKICAgICAgICBtZW1iZXJzID0gZ2V0X21lbWJlcl9pbl9jaGFubmVsKG1lbWJlci52b2ljZSkKICAgICAgICBpZiBub3QgbWVtYmVyczoKICAgICAgICAgICAgcmFpc2UgTm90Rm91bmQoIk1lbWJlciBub3QgZm91bmQgaW4gY2hhbm5lbHMiKQogICAgICAgIGF3YWl0IGNoYW5uZWwuc2VuZCgnICcuam9pbihtZW1iZXIubWVudGlvbiBmb3IgbWVtYmVyIGluIG1lbWJlcnMpKQoKICAgIGFzeW5jIGRlZiBjbWRfcmFuZG9tZ3JvdXAoc2VsZiwgKmFyZ3MsIGNoYW5uZWwsIG1lbWJlciwgY2xpZW50LCAqKl8pOgogICAgICAgIGlmIGxlbihhcmdzKSA+PSAyOgogICAgICAgICAgICBpZiBub3QgYXJnc1sxXS5pc2RpZ2l0KCk6CiAgICAgICAgICAgICAgICByYWlzZSBJbnZhbGlkQXJncygiMm5kIEFyZ3VtZW50IG11c3QgYmUgYSBjaGFubmVsIElEIikKICAgICAgICAgICAgdGFyZ2V0ID0gY2xpZW50LmdldF9jaGFubmVsKGludChhcmdzWzFdKSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBpZiBub3QgdGFyZ2V0OgogICAgICAgICAgICAgICAgcmFpc2UgTm90Rm91bmQoZiJDaGFubmVsIElEIHthcmdzWzFdfSBub3QgZm91bmQiKQo8fGZpbV9lbmR8Pg=="]
["971f4fcd87c74e17b5b019b8355ec440dc9a1c53-3","971f4fcd87c74e17b5b019b8355ec440dc9a1c53","PHxmaW1fcHJlZml4fD4KZnJvbSB1dGlsLmZ1bmN0aW9uIGltcG9ydCBnZXRfbWVtYmVyX2luX2NoYW5uZWwKZnJvbSB1dGlsLmV4Y2VwdGlvbiBpbXBvcnQgTm90Rm91bmQsIEludmFsaWRBcmdzCgppbXBvcnQgcmFuZG9tCgpjbGFzcyBDbWRVdGlsaXR5OgogICAgYXN5bmMgZGVmIGNtZF9waW5ndm9jYWwoc2VsZiwgKmFyZ3MsIGNoYW5uZWwsIG1lbWJlciwgKipfKToKICAgICAgICBtZW1iZXJzID0gZ2V0X21lbWJlcl9pbl9jaGFubmVsKG1lbWJlci52b2ljZSkKICAgICAgICBpZiBub3QgbWVtYmVyczoKICAgICAgICAgICAgcmFpc2UgTm90Rm91bmQoIk1lbWJlciBub3QgZm91bmQgaW4gY2hhbm5lbHMiKQogICAgICAgIGF3YWl0IGNoYW5uZWwuc2VuZCgnICcuam9pbihtZW1iZXIubWVudGlvbiBmb3IgbWVtYmVyIGluIG1lbWJlcnMpKQoKICAgIGFzeW5jIGRlZiBjbWRfcmFuZG9tZ3JvdXAoc2VsZiwgKmFyZ3MsIGNoYW5uZWwsIG1lbWJlciwgY2xpZW50LCAqKl8pOgogICAgICAgIGlmIGxlbihhcmdzKSA+PSAyOgogICAgICAgICAgICBpZiBub3QgYXJnc1sxXS5pc2RpZ2l0KCk6CiAgICAgICAgICAgICAgICByYWlzZSBJbnZhbGlkQXJncygiMm5kIEFyZ3VtZW50IG11c3QgYmUgYSBjaGFubmVsIElEIikKICAgICAgICAgICAgdGFyZ2V0ID0gY2xpZW50LmdldF9jaGFubmVsKGludChhcmdzWzFdKSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBpZiBub3QgdGFyZ2V0OgogICAgICAgICAgICAgICAgcmFpc2UgTm90Rm91bmQoZiJDaGFubmVsIElEIHthcmdzWzFdfSBub3QgZm91bmQiKQo8fGZpbV9lbmR8Pg=="]
["4182c45256edc61b4a5bf16ad3e7e5cc87bf92ef-1","4182c45256edc61b4a5bf16ad3e7e5cc87bf92ef","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gUGxheWVyIGltcG9ydCBQbGF5ZXIKaW1wb3J0IHJhbmRvbQppbXBvcnQgbnVtcHkKaW1wb3J0IHN5cwppbXBvcnQgbWF0aApmcm9tIE1vdmUgaW1wb3J0IE1vdmUKZnJvbSBza2xlYXJuLm5ldXJhbF9uZXR3b3JrIGltcG9ydCBNTFBDbGFzc2lmaWVyCmZyb20gc2tsZWFybi5leHRlcm5hbHMgaW1wb3J0IGpvYmxpYgpmcm9tIERhdGFUeXBlcyBpbXBvcnQgU3F1YXJlVHlwZQppbXBvcnQgd2FybmluZ3MKCmRlZiBpbnZlcnRCb2FyZChib2FyZCk6CglyZXR1cm4gW1soLSh4LTEpKSBpZiAoeDwyKSBlbHNlIHggZm9yIHggaW4geV0gZm9yIHkgaW4gYm9hcmRdCgkKY2xhc3MgSnVnYWRvckdydXBvMTMoUGxheWVyKToKCW5hbWUgPSAnSnVnYWRvckdydXBvMTMnCgoJZGVmIF9faW5pdF9fKHNlbGYsIGNvbG9yKToKCQlzdXBlcihKdWdhZG9yR3J1cG8xMywgc2VsZikuX19pbml0X18oc2VsZi5uYW1lLCBjb2xvcj1jb2xvcikKCQlzZWxmLm5ldXJhbE5ldHdvcmsgPSBqb2JsaWIubG9hZCgncmVkLW5ldXJvbmFsLnBrbCcpIAoJCXByaW50ICJSZWQgbmV1cm9uYWwgY2FyZ2FkYS4iCgoJZGVmIG1vdmUoc2VsZiwgYm9hcmQsIG9wcG9uZW50X21vdmUpOgoJCXdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcpCjx8ZmltX2hvbGV8PgoJCWZvciBtb3ZlIGluIHBvc3NpYmxlX21vdmVzOgoJCQltb3ZlVHVwbGVzLmFwcGVuZCgobW92ZS5nZXRfcm93KCksIG1vdmUuZ2V0X2NvbCgpKSkKCgkJWCA9IGJvYXJkLmdldF9hc19tYXRyaXgoKQoKCQlpZiAoc2VsZi5jb2xvcj09U3F1YXJlVHlwZS5XSElURSk6CgkJCSMgcHJpbnQgJ1RhYmxlcm8gaW52ZXJ0aWRvJwoJCQlYID0gaW52ZXJ0Qm9hcmQoWCkKCQlYPSBjb252ZXJ0X21hdHJpeF9ib2FyZF90b19ucGFycmF5KFgpCgkJcHJlZGljdGlvbiA9IHNlbGYubmV1cmFsTmV0d29yay5wcmVkaWN0KFgpCQkKCQkjT3JkZW5vIGVsIHRhYmxlcm8gZGUgbWF5b3IgYSBtZW5vciB5IHBhc28gYSB0dXBsYXMgZGUgbW92aW1pZW50b3MKCQlzb3J0ZWRNb3ZlcyA9IFsoZGl2bW9kKHByZWRpY3Rpb25bMF0udG9saXN0KCkuaW5kZXgoeCksOClbMF0sIGRpdm1vZChwcmVkaWN0aW9uWzBdLnRvbGlzdCgpLmluZGV4KHgpLDgpWzFdKSBmb3IgeCBpbiBzb3J0ZWQocHJlZGljdGlvblswXSwgcmV2ZXJzZT1UcnVlKV0KCQlpPTAKCQkjQWdhcnJvIGVsIG1lam9yIG1vdmltaWVudG8gZGVudHJvIGRlIGxvcyBwb3NpYmxlcwoJCWZvciBwIGluIHNvcnRlZE1vdmVzOgoJCQlpPWkrMQoJCQlpZiAocCBpbiBtb3ZlVHVwbGVzKToKCQkJCW09cAoJCQkJYnJlYWsKCQkJCQoJCSNRdWUgdGFuIGxlam9zIG5vcyB0dXZpbW9zIHF1ZSBpciBlbiBsYSBsaXN0YSBkZSBtb3ZpbWllbnRvcyAic3VnZXJpZG9zIiBwYXJhIGVuY29udHJhciB1bm8gbGVnYWwuCgkJI3ByaW50ICJQb3NpY2nDs24gZGVsIG1lam9yIG1vdmltaWVudG8iCgkJI3ByaW50IGkKCQlyZXR1cm4gTW92ZShtWzBdLCBtWzFdKQoKCglkZWYgb25fd2luKHNlbGYsIGJvYXJkKToKCQkjIGpvYmxpYi5kdW1wKG5ldXJhbE5ldHdvcmssICdyZWQtbmV1cm9uYWwtdGVzdC5wa2wnKQoJCXByaW50ICdHYW7DqSB5IHNveSBlbCBjb2xvcjonICsgc2VsZi5jb2xvci5uYW1lCgoJZGVmIG9uX2RlZmVhdChzZWxmLCBib2FyZCk6CgkJIyBqb2JsaWIuZHVtcChuZXVyYWxOZXR3b3JrLCAncmVkLW5ldXJvbmFsLXRlc3QucGtsJykKCQlwcmludCAnUGVyZMOtIHkgc295IGVsIGNvbG9yOicgKyBzZWxmLmNvbG9yLm5hbWUKCglkZWYgb25fZHJhdyhzZWxmLCBib2FyZCk6CgkJIyBqb2JsaWIuZHVtcChuZXVyYWxOZXR3b3JrLCAncmVkLW5ldXJvbmFsLXRlc3QucGtsJykKCQlwcmludCAnRW1wYXTDqSB5IHNveSBlbCBjb2xvcjonICsgc2VsZi5jb2xvci5uYW1lCgoJZGVmIG9uX2Vycm9yKHNlbGYsIGJvYXJkKToKCQlyYWlzZSBFeGNlcHRpb24oJ0h1Ym8gdW4gZXJyb3IuJykKCmRlZiBjb252ZXJ0X21hdHJpeF9ib2FyZF90b19ucGFycmF5KGJvYXJkKToKCWxzdCA9IFtdCglmb3Igcm93IGluIGJvYXJkOgoJCWZvciBlbGVtZW50IGluIHJvdzoKCQkJbHN0LmFwcGVuZChlbGVtZW50KQoJIyBwcmludCBsc3QKCXJldHVybiBudW1weS5hcnJheShsc3QpCjx8ZmltX3N1ZmZpeHw+CgkJcG9zc2libGVfbW92ZXMgPSBib2FyZC5nZXRfcG9zc2libGVfbW92ZXMoc2VsZi5jb2xvcikKCQkjIExpc3RhIGNvbiB0dXBsYXMsIGRvbmRlIGNhZGEgdHVwbGEgdGllbmUgbGFzIGNvb3JkZW5hZGFzICh4LHkpCgkJIyBkZSB1biBtb3ZpbWllbnRvIHBvc2libGUuCgkJbW92ZVR1cGxlcyA9IFtdCjx8ZmltX2VuZHw+"]
["4182c45256edc61b4a5bf16ad3e7e5cc87bf92ef-2","4182c45256edc61b4a5bf16ad3e7e5cc87bf92ef","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gUGxheWVyIGltcG9ydCBQbGF5ZXIKaW1wb3J0IHJhbmRvbQppbXBvcnQgbnVtcHkKaW1wb3J0IHN5cwppbXBvcnQgbWF0aApmcm9tIE1vdmUgaW1wb3J0IE1vdmUKZnJvbSBza2xlYXJuLm5ldXJhbF9uZXR3b3JrIGltcG9ydCBNTFBDbGFzc2lmaWVyCmZyb20gc2tsZWFybi5leHRlcm5hbHMgaW1wb3J0IGpvYmxpYgpmcm9tIERhdGFUeXBlcyBpbXBvcnQgU3F1YXJlVHlwZQppbXBvcnQgd2FybmluZ3MKCmRlZiBpbnZlcnRCb2FyZChib2FyZCk6CglyZXR1cm4gW1soLSh4LTEpKSBpZiAoeDwyKSBlbHNlIHggZm9yIHggaW4geV0gZm9yIHkgaW4gYm9hcmRdCgkKY2xhc3MgSnVnYWRvckdydXBvMTMoUGxheWVyKToKCW5hbWUgPSAnSnVnYWRvckdydXBvMTMnCgoJZGVmIF9faW5pdF9fKHNlbGYsIGNvbG9yKToKCQlzdXBlcihKdWdhZG9yR3J1cG8xMywgc2VsZikuX19pbml0X18oc2VsZi5uYW1lLCBjb2xvcj1jb2xvcikKCQlzZWxmLm5ldXJhbE5ldHdvcmsgPSBqb2JsaWIubG9hZCgncmVkLW5ldXJvbmFsLnBrbCcpIAoJCXByaW50ICJSZWQgbmV1cm9uYWwgY2FyZ2FkYS4iCgoJZGVmIG1vdmUoc2VsZiwgYm9hcmQsIG9wcG9uZW50X21vdmUpOgoJCXdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcpCgkJcG9zc2libGVfbW92ZXMgPSBib2FyZC5nZXRfcG9zc2libGVfbW92ZXMoc2VsZi5jb2xvcikKCQkjIExpc3RhIGNvbiB0dXBsYXMsIGRvbmRlIGNhZGEgdHVwbGEgdGllbmUgbGFzIGNvb3JkZW5hZGFzICh4LHkpCgkJIyBkZSB1biBtb3ZpbWllbnRvIHBvc2libGUuCgkJbW92ZVR1cGxlcyA9IFtdCgkJZm9yIG1vdmUgaW4gcG9zc2libGVfbW92ZXM6CgkJCW1vdmVUdXBsZXMuYXBwZW5kKChtb3ZlLmdldF9yb3coKSwgbW92ZS5nZXRfY29sKCkpKQoKCQlYID0gYm9hcmQuZ2V0X2FzX21hdHJpeCgpCgoJCWlmIChzZWxmLmNvbG9yPT1TcXVhcmVUeXBlLldISVRFKToKCQkJIyBwcmludCAnVGFibGVybyBpbnZlcnRpZG8nCgkJCVggPSBpbnZlcnRCb2FyZChYKQoJCVg9IGNvbnZlcnRfbWF0cml4X2JvYXJkX3RvX25wYXJyYXkoWCkKCQlwcmVkaWN0aW9uID0gc2VsZi5uZXVyYWxOZXR3b3JrLnByZWRpY3QoWCkJCQoJCSNPcmRlbm8gZWwgdGFibGVybyBkZSBtYXlvciBhIG1lbm9yIHkgcGFzbyBhIHR1cGxhcyBkZSBtb3ZpbWllbnRvcwoJCXNvcnRlZE1vdmVzID0gWyhkaXZtb2QocHJlZGljdGlvblswXS50b2xpc3QoKS5pbmRleCh4KSw4KVswXSwgZGl2bW9kKHByZWRpY3Rpb25bMF0udG9saXN0KCkuaW5kZXgoeCksOClbMV0pIGZvciB4IGluIHNvcnRlZChwcmVkaWN0aW9uWzBdLCByZXZlcnNlPVRydWUpXQoJCWk9MAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgkJI0FnYXJybyBlbCBtZWpvciBtb3ZpbWllbnRvIGRlbnRybyBkZSBsb3MgcG9zaWJsZXMKCQlmb3IgcCBpbiBzb3J0ZWRNb3ZlczoKCQkJaT1pKzEKCQkJaWYgKHAgaW4gbW92ZVR1cGxlcyk6Cjx8ZmltX2VuZHw+"]
["4182c45256edc61b4a5bf16ad3e7e5cc87bf92ef-3","4182c45256edc61b4a5bf16ad3e7e5cc87bf92ef","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gUGxheWVyIGltcG9ydCBQbGF5ZXIKaW1wb3J0IHJhbmRvbQppbXBvcnQgbnVtcHkKaW1wb3J0IHN5cwppbXBvcnQgbWF0aApmcm9tIE1vdmUgaW1wb3J0IE1vdmUKZnJvbSBza2xlYXJuLm5ldXJhbF9uZXR3b3JrIGltcG9ydCBNTFBDbGFzc2lmaWVyCmZyb20gc2tsZWFybi5leHRlcm5hbHMgaW1wb3J0IGpvYmxpYgpmcm9tIERhdGFUeXBlcyBpbXBvcnQgU3F1YXJlVHlwZQppbXBvcnQgd2FybmluZ3MKCmRlZiBpbnZlcnRCb2FyZChib2FyZCk6CglyZXR1cm4gW1soLSh4LTEpKSBpZiAoeDwyKSBlbHNlIHggZm9yIHggaW4geV0gZm9yIHkgaW4gYm9hcmRdCgkKY2xhc3MgSnVnYWRvckdydXBvMTMoUGxheWVyKToKCW5hbWUgPSAnSnVnYWRvckdydXBvMTMnCgoJZGVmIF9faW5pdF9fKHNlbGYsIGNvbG9yKToKCQlzdXBlcihKdWdhZG9yR3J1cG8xMywgc2VsZikuX19pbml0X18oc2VsZi5uYW1lLCBjb2xvcj1jb2xvcikKCQlzZWxmLm5ldXJhbE5ldHdvcmsgPSBqb2JsaWIubG9hZCgncmVkLW5ldXJvbmFsLnBrbCcpIAoJCXByaW50ICJSZWQgbmV1cm9uYWwgY2FyZ2FkYS4iCgoJZGVmIG1vdmUoc2VsZiwgYm9hcmQsIG9wcG9uZW50X21vdmUpOgoJCXdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcpCgkJcG9zc2libGVfbW92ZXMgPSBib2FyZC5nZXRfcG9zc2libGVfbW92ZXMoc2VsZi5jb2xvcikKCQkjIExpc3RhIGNvbiB0dXBsYXMsIGRvbmRlIGNhZGEgdHVwbGEgdGllbmUgbGFzIGNvb3JkZW5hZGFzICh4LHkpCgkJIyBkZSB1biBtb3ZpbWllbnRvIHBvc2libGUuCgkJbW92ZVR1cGxlcyA9IFtdCgkJZm9yIG1vdmUgaW4gcG9zc2libGVfbW92ZXM6CgkJCW1vdmVUdXBsZXMuYXBwZW5kKChtb3ZlLmdldF9yb3coKSwgbW92ZS5nZXRfY29sKCkpKQoKCQlYID0gYm9hcmQuZ2V0X2FzX21hdHJpeCgpCgoJCWlmIChzZWxmLmNvbG9yPT1TcXVhcmVUeXBlLldISVRFKToKCQkJIyBwcmludCAnVGFibGVybyBpbnZlcnRpZG8nCgkJCVggPSBpbnZlcnRCb2FyZChYKQoJCVg9IGNvbnZlcnRfbWF0cml4X2JvYXJkX3RvX25wYXJyYXkoWCkKCQlwcmVkaWN0aW9uID0gc2VsZi5uZXVyYWxOZXR3b3JrLnByZWRpY3QoWCkJCQoJCSNPcmRlbm8gZWwgdGFibGVybyBkZSBtYXlvciBhIG1lbm9yIHkgcGFzbyBhIHR1cGxhcyBkZSBtb3ZpbWllbnRvcwoJCXNvcnRlZE1vdmVzID0gWyhkaXZtb2QocHJlZGljdGlvblswXS50b2xpc3QoKS5pbmRleCh4KSw4KVswXSwgZGl2bW9kKHByZWRpY3Rpb25bMF0udG9saXN0KCkuaW5kZXgoeCksOClbMV0pIGZvciB4IGluIHNvcnRlZChwcmVkaWN0aW9uWzBdLCByZXZlcnNlPVRydWUpXQoJCWk9MAoJCSNBZ2Fycm8gZWwgbWVqb3IgbW92aW1pZW50byBkZW50cm8gZGUgbG9zIHBvc2libGVzCgkJZm9yIHAgaW4gc29ydGVkTW92ZXM6CgkJCWk9aSsxCgkJCWlmIChwIGluIG1vdmVUdXBsZXMpOgoJCQkJbT1wCgkJCQlicmVhawoJCQkJCgkJI1F1ZSB0YW4gbGVqb3Mgbm9zIHR1dmltb3MgcXVlIGlyIGVuIGxhIGxpc3RhIGRlIG1vdmltaWVudG9zICJzdWdlcmlkb3MiIHBhcmEgZW5jb250cmFyIHVubyBsZWdhbC4KCQkjcHJpbnQgIlBvc2ljacOzbiBkZWwgbWVqb3IgbW92aW1pZW50byIKCQkjcHJpbnQgaQoJCXJldHVybiBNb3ZlKG1bMF0sIG1bMV0pCgoKCWRlZiBvbl93aW4oc2VsZiwgYm9hcmQpOgoJCSMgam9ibGliLmR1bXAobmV1cmFsTmV0d29yaywgJ3JlZC1uZXVyb25hbC10ZXN0LnBrbCcpCgkJcHJpbnQgJ0dhbsOpIHkgc295IGVsIGNvbG9yOicgKyBzZWxmLmNvbG9yLm5hbWUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCWRlZiBvbl9kZWZlYXQoc2VsZiwgYm9hcmQpOgoJCSMgam9ibGliLmR1bXAobmV1cmFsTmV0d29yaywgJ3JlZC1uZXVyb25hbC10ZXN0LnBrbCcpCgkJcHJpbnQgJ1BlcmTDrSB5IHNveSBlbCBjb2xvcjonICsgc2VsZi5jb2xvci5uYW1lCjx8ZmltX2VuZHw+"]
["4182c45256edc61b4a5bf16ad3e7e5cc87bf92ef-4","4182c45256edc61b4a5bf16ad3e7e5cc87bf92ef","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gUGxheWVyIGltcG9ydCBQbGF5ZXIKaW1wb3J0IHJhbmRvbQppbXBvcnQgbnVtcHkKaW1wb3J0IHN5cwppbXBvcnQgbWF0aApmcm9tIE1vdmUgaW1wb3J0IE1vdmUKZnJvbSBza2xlYXJuLm5ldXJhbF9uZXR3b3JrIGltcG9ydCBNTFBDbGFzc2lmaWVyCmZyb20gc2tsZWFybi5leHRlcm5hbHMgaW1wb3J0IGpvYmxpYgpmcm9tIERhdGFUeXBlcyBpbXBvcnQgU3F1YXJlVHlwZQppbXBvcnQgd2FybmluZ3MKCmRlZiBpbnZlcnRCb2FyZChib2FyZCk6CglyZXR1cm4gW1soLSh4LTEpKSBpZiAoeDwyKSBlbHNlIHggZm9yIHggaW4geV0gZm9yIHkgaW4gYm9hcmRdCgkKY2xhc3MgSnVnYWRvckdydXBvMTMoUGxheWVyKToKCW5hbWUgPSAnSnVnYWRvckdydXBvMTMnCgoJZGVmIF9faW5pdF9fKHNlbGYsIGNvbG9yKToKCQlzdXBlcihKdWdhZG9yR3J1cG8xMywgc2VsZikuX19pbml0X18oc2VsZi5uYW1lLCBjb2xvcj1jb2xvcikKCQlzZWxmLm5ldXJhbE5ldHdvcmsgPSBqb2JsaWIubG9hZCgncmVkLW5ldXJvbmFsLnBrbCcpIAoJCXByaW50ICJSZWQgbmV1cm9uYWwgY2FyZ2FkYS4iCgoJZGVmIG1vdmUoc2VsZiwgYm9hcmQsIG9wcG9uZW50X21vdmUpOgoJCXdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcpCgkJcG9zc2libGVfbW92ZXMgPSBib2FyZC5nZXRfcG9zc2libGVfbW92ZXMoc2VsZi5jb2xvcikKCQkjIExpc3RhIGNvbiB0dXBsYXMsIGRvbmRlIGNhZGEgdHVwbGEgdGllbmUgbGFzIGNvb3JkZW5hZGFzICh4LHkpCgkJIyBkZSB1biBtb3ZpbWllbnRvIHBvc2libGUuCgkJbW92ZVR1cGxlcyA9IFtdCgkJZm9yIG1vdmUgaW4gcG9zc2libGVfbW92ZXM6CgkJCW1vdmVUdXBsZXMuYXBwZW5kKChtb3ZlLmdldF9yb3coKSwgbW92ZS5nZXRfY29sKCkpKQoKCQlYID0gYm9hcmQuZ2V0X2FzX21hdHJpeCgpCgoJCWlmIChzZWxmLmNvbG9yPT1TcXVhcmVUeXBlLldISVRFKToKCQkJIyBwcmludCAnVGFibGVybyBpbnZlcnRpZG8nCgkJCVggPSBpbnZlcnRCb2FyZChYKQoJCVg9IGNvbnZlcnRfbWF0cml4X2JvYXJkX3RvX25wYXJyYXkoWCkKCQlwcmVkaWN0aW9uID0gc2VsZi5uZXVyYWxOZXR3b3JrLnByZWRpY3QoWCkJCQoJCSNPcmRlbm8gZWwgdGFibGVybyBkZSBtYXlvciBhIG1lbm9yIHkgcGFzbyBhIHR1cGxhcyBkZSBtb3ZpbWllbnRvcwoJCXNvcnRlZE1vdmVzID0gWyhkaXZtb2QocHJlZGljdGlvblswXS50b2xpc3QoKS5pbmRleCh4KSw4KVswXSwgZGl2bW9kKHByZWRpY3Rpb25bMF0udG9saXN0KCkuaW5kZXgoeCksOClbMV0pIGZvciB4IGluIHNvcnRlZChwcmVkaWN0aW9uWzBdLCByZXZlcnNlPVRydWUpXQoJCWk9MAoJCSNBZ2Fycm8gZWwgbWVqb3IgbW92aW1pZW50byBkZW50cm8gZGUgbG9zIHBvc2libGVzCgkJZm9yIHAgaW4gc29ydGVkTW92ZXM6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCQkJaT1pKzEKCQkJaWYgKHAgaW4gbW92ZVR1cGxlcyk6CgkJCQltPXAKCQkJCWJyZWFrCjx8ZmltX2VuZHw+"]
["4182c45256edc61b4a5bf16ad3e7e5cc87bf92ef-5","4182c45256edc61b4a5bf16ad3e7e5cc87bf92ef","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gUGxheWVyIGltcG9ydCBQbGF5ZXIKaW1wb3J0IHJhbmRvbQppbXBvcnQgbnVtcHkKaW1wb3J0IHN5cwppbXBvcnQgbWF0aApmcm9tIE1vdmUgaW1wb3J0IE1vdmUKZnJvbSBza2xlYXJuLm5ldXJhbF9uZXR3b3JrIGltcG9ydCBNTFBDbGFzc2lmaWVyCmZyb20gc2tsZWFybi5leHRlcm5hbHMgaW1wb3J0IGpvYmxpYgpmcm9tIERhdGFUeXBlcyBpbXBvcnQgU3F1YXJlVHlwZQppbXBvcnQgd2FybmluZ3MKCmRlZiBpbnZlcnRCb2FyZChib2FyZCk6CglyZXR1cm4gW1soLSh4LTEpKSBpZiAoeDwyKSBlbHNlIHggZm9yIHggaW4geV0gZm9yIHkgaW4gYm9hcmRdCgkKY2xhc3MgSnVnYWRvckdydXBvMTMoUGxheWVyKToKCW5hbWUgPSAnSnVnYWRvckdydXBvMTMnCgoJZGVmIF9faW5pdF9fKHNlbGYsIGNvbG9yKToKCQlzdXBlcihKdWdhZG9yR3J1cG8xMywgc2VsZikuX19pbml0X18oc2VsZi5uYW1lLCBjb2xvcj1jb2xvcikKCQlzZWxmLm5ldXJhbE5ldHdvcmsgPSBqb2JsaWIubG9hZCgncmVkLW5ldXJvbmFsLnBrbCcpIAoJCXByaW50ICJSZWQgbmV1cm9uYWwgY2FyZ2FkYS4iCgoJZGVmIG1vdmUoc2VsZiwgYm9hcmQsIG9wcG9uZW50X21vdmUpOgoJCXdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcpCgkJcG9zc2libGVfbW92ZXMgPSBib2FyZC5nZXRfcG9zc2libGVfbW92ZXMoc2VsZi5jb2xvcikKCQkjIExpc3RhIGNvbiB0dXBsYXMsIGRvbmRlIGNhZGEgdHVwbGEgdGllbmUgbGFzIGNvb3JkZW5hZGFzICh4LHkpCgkJIyBkZSB1biBtb3ZpbWllbnRvIHBvc2libGUuCgkJbW92ZVR1cGxlcyA9IFtdCgkJZm9yIG1vdmUgaW4gcG9zc2libGVfbW92ZXM6CgkJCW1vdmVUdXBsZXMuYXBwZW5kKChtb3ZlLmdldF9yb3coKSwgbW92ZS5nZXRfY29sKCkpKQoKCQlYID0gYm9hcmQuZ2V0X2FzX21hdHJpeCgpCgoJCWlmIChzZWxmLmNvbG9yPT1TcXVhcmVUeXBlLldISVRFKToKCQkJIyBwcmludCAnVGFibGVybyBpbnZlcnRpZG8nCgkJCVggPSBpbnZlcnRCb2FyZChYKQoJCVg9IGNvbnZlcnRfbWF0cml4X2JvYXJkX3RvX25wYXJyYXkoWCkKCQlwcmVkaWN0aW9uID0gc2VsZi5uZXVyYWxOZXR3b3JrLnByZWRpY3QoWCkJCQoJCSNPcmRlbm8gZWwgdGFibGVybyBkZSBtYXlvciBhIG1lbm9yIHkgcGFzbyBhIHR1cGxhcyBkZSBtb3ZpbWllbnRvcwoJCXNvcnRlZE1vdmVzID0gWyhkaXZtb2QocHJlZGljdGlvblswXS50b2xpc3QoKS5pbmRleCh4KSw4KVswXSwgZGl2bW9kKHByZWRpY3Rpb25bMF0udG9saXN0KCkuaW5kZXgoeCksOClbMV0pIGZvciB4IGluIHNvcnRlZChwcmVkaWN0aW9uWzBdLCByZXZlcnNlPVRydWUpXQoJCWk9MAoJCSNBZ2Fycm8gZWwgbWVqb3IgbW92aW1pZW50byBkZW50cm8gZGUgbG9zIHBvc2libGVzCjx8ZmltX2hvbGV8PgoJCQkJYnJlYWsKCQkJCQoJCSNRdWUgdGFuIGxlam9zIG5vcyB0dXZpbW9zIHF1ZSBpciBlbiBsYSBsaXN0YSBkZSBtb3ZpbWllbnRvcyAic3VnZXJpZG9zIiBwYXJhIGVuY29udHJhciB1bm8gbGVnYWwuCgkJI3ByaW50ICJQb3NpY2nDs24gZGVsIG1lam9yIG1vdmltaWVudG8iCgkJI3ByaW50IGkKCQlyZXR1cm4gTW92ZShtWzBdLCBtWzFdKQoKCglkZWYgb25fd2luKHNlbGYsIGJvYXJkKToKCQkjIGpvYmxpYi5kdW1wKG5ldXJhbE5ldHdvcmssICdyZWQtbmV1cm9uYWwtdGVzdC5wa2wnKQoJCXByaW50ICdHYW7DqSB5IHNveSBlbCBjb2xvcjonICsgc2VsZi5jb2xvci5uYW1lCgoJZGVmIG9uX2RlZmVhdChzZWxmLCBib2FyZCk6CgkJIyBqb2JsaWIuZHVtcChuZXVyYWxOZXR3b3JrLCAncmVkLW5ldXJvbmFsLXRlc3QucGtsJykKCQlwcmludCAnUGVyZMOtIHkgc295IGVsIGNvbG9yOicgKyBzZWxmLmNvbG9yLm5hbWUKCglkZWYgb25fZHJhdyhzZWxmLCBib2FyZCk6CgkJIyBqb2JsaWIuZHVtcChuZXVyYWxOZXR3b3JrLCAncmVkLW5ldXJvbmFsLXRlc3QucGtsJykKCQlwcmludCAnRW1wYXTDqSB5IHNveSBlbCBjb2xvcjonICsgc2VsZi5jb2xvci5uYW1lCgoJZGVmIG9uX2Vycm9yKHNlbGYsIGJvYXJkKToKCQlyYWlzZSBFeGNlcHRpb24oJ0h1Ym8gdW4gZXJyb3IuJykKCmRlZiBjb252ZXJ0X21hdHJpeF9ib2FyZF90b19ucGFycmF5KGJvYXJkKToKCWxzdCA9IFtdCglmb3Igcm93IGluIGJvYXJkOgoJCWZvciBlbGVtZW50IGluIHJvdzoKCQkJbHN0LmFwcGVuZChlbGVtZW50KQoJIyBwcmludCBsc3QKCXJldHVybiBudW1weS5hcnJheShsc3QpCjx8ZmltX3N1ZmZpeHw+CgkJZm9yIHAgaW4gc29ydGVkTW92ZXM6CgkJCWk9aSsxCgkJCWlmIChwIGluIG1vdmVUdXBsZXMpOgoJCQkJbT1wCjx8ZmltX2VuZHw+"]
["c191338e9a23c8769d9dfa47a5ae5e19c8bf6a7e-1","c191338e9a23c8769d9dfa47a5ae5e19c8bf6a7e","PHxmaW1fcHJlZml4fD4KZGVmIGNsZWFuX2RhdGFfZnJvbV9zY3JhcChsaXN0X29mX29iamVjdCA9IGxpc3QsZW1wdHlfbGlzdCA9IGxpc3QpOgogICAgZm9yIG9iamV0IGluIGxpc3Rfb2Zfb2JqZWN0OgogICAgICAgIG9iaiA9IHt9CiAgICAgICAgZm9yIGVsZW1lbnQgaW4gb2JqZXQ6CiAgICAgICAgICAgIGEgPSBlbGVtZW50LnNwbGl0KCc6JywxKQogICAgICAgICAgICBpZiBsZW4oYSkgPT0gMjoKICAgICAgICAgICAgICAgIGtleSA9IHN0cihhWzBdKS5yZXBsYWNlKCciJywnJykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgY29udD0gc3RyKGFbMV0pLnJlcGxhY2UoJyInLCcnKQogICAgICAgICAgICAgICAgb2JqW2tleV09Y29udAo8fGZpbV9lbmR8Pg=="]
["c1dd8e7655453de375cedbff15a250dc7d911d28-1","c1dd8e7655453de375cedbff15a250dc7d911d28","PHxmaW1fcHJlZml4fD4KZnJvbSB0Z3RfZ3JlYXNlLmNvcmUuVHlwZXMgaW1wb3J0IENvbW1hbmQKZnJvbSB0Z3RfZ3JlYXNlLm1hbmFnZW1lbnQuTW9kZWwgaW1wb3J0IE5vZGVNb25pdG9yaW5nCmltcG9ydCByYW5kb20KaW1wb3J0IHRpbWUKCgpjbGFzcyBDbHVzdGVyTW9uaXRvcihDb21tYW5kKToKICAgICIiIkNsdXN0ZXIgTW9uaXRvciB0byBlbnN1cmUgbm9kZXMgYXJlIGFsaXZlIiIiCgogICAgX19hdXRob3JfXyA9ICJKYW1lcyBFLiBCZWxsIEpyLiIKICAgIF9fdmVyc2lvbl9fID0gIjIuMC4wIgogICAgcHVycG9zZSA9ICJDb250cm9sIGNsdXN0ZXIgaGVhbHRoIgogICAgaGVscCA9ICIiIgogICAgRW5zdXJlcyBoZWFsdGggb2YgR1JFQVNFIGNsdXN0ZXIgYnkgcHJvdmlkaW5nIGEgUHJvdG90eXBlIHRvCiAgICBzY2FuIHRoZSBhY3RpdmUgbm9kZXMgYW5kIGRpc2FibGUgdGhvc2UgdGhhdCBhcmUgdW5oZWFsdGh5CiAgICAKICAgIEFyZ3M6CiAgICAgICAgLS1sb29wOjxpbnQ+CiAgICAgICAgICAgIEhvdyBtYW55IHNjYW5zIHlvdSB3b3VsZCBsaWtlIHRvIHBlcmZvcm0gb2YgY2x1c3RlcgogICAgICAgIC0tZm9yZWdyb3VuZAogICAgICAgICAgICBJZiBzZXQgd2lsbCBwcmludCBsb2cgbWVzc2FnZXMgdG8gdGhlIGNvbW1hbmRsaW5lCiAgICAKICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzdXBlcihDbHVzdGVyTW9uaXRvciwgc2VsZikuX19pbml0X18oKQoKICAgIGRlZiBleGVjdXRlKHNlbGYsIGNvbnRleHQpOgogICAgICAgICIiIlRoaXMgbWV0aG9kIG1vbml0b3JzIHRoZSBlbnZpcm9ubWVudAoKICAgICAgICBBbiBbaW5dZmluaXRlIGxvb3AgbW9uaXRvcmluZyB0aGUgY2x1c3RlciBub2RlcyBmb3IgdW5oZWFsdGh5IG9uZXMKCiAgICAgICAgQXJnczoKICAgICAgICAgICAgY29udGV4dCAoZGljdCk6IGNvbnRleHQgZm9yIHRoZSBjb21tYW5kIHRvIHVzZQoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBib29sOiBDb21tYW5kIFN1Y2Nlc3MKCiAgICAgICAgIiIiCiAgICAgICAgaWYgY29udGV4dC5nZXQoJ2ZvcmVncm91bmQnKToKICAgICAgICAgICAgc2VsZi5pb2MuZ2V0TG9nZ2VyKCkuZm9yZWdyb3VuZCA9IFRydWUKICAgICAgICBtb25pdG9yID0gTm9kZU1vbml0b3Jpbmcoc2VsZi5pb2MpCiAgICAgICAgaWYgY29udGV4dC5nZXQoJ2xvb3AnKToKICAgICAgICAgICAgaSA9IDAKICAgICAgICAgICAgd2hpbGUgaSA8IGludChjb250ZXh0LmdldCgnbG9vcCcsIDApKToKICAgICAgICAgICAgICAgIGlmIG5vdCBtb25pdG9yLm1vbml0b3IoKToKICAgICAgICAgICAgICAgICAgICBzZWxmLmlvYy5nZXRMb2dnZXIoKS5lcnJvcigiTW9uaXRvcmluZyBQcm9jZXNzIEZhaWxlZCIsIG5vdGlmeT1GYWxzZSkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgbW9uaXRvci5zY2FuQ29tcGxldGUoKQogICAgICAgICAgICAgICAgaSArPSAxCiAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDUpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgIGlmIG5vdCBtb25pdG9yLm1vbml0b3IoKToKICAgICAgICAgICAgICAgICAgICBzZWxmLmlvYy5nZXRMb2dnZXIoKS5lcnJvcigiTW9uaXRvcmluZyBQcm9jZXNzIEZhaWxlZCIsIG5vdGlmeT1GYWxzZSkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgbW9uaXRvci5zY2FuQ29tcGxldGUoKQogICAgICAgICAgICAgICAgIyBzbGVlcCBmb3IgYSByYW5kb20gaW50ZXJ2YWwgdG8gZW5zdXJlIG5vdCBhbGwgbm9kZXMgcG9sbCBhdCB0aGUgc2FtZSB0aW1lCjx8ZmltX2hvbGV8PgogICAgICAgIGlmIGNvbnRleHQuZ2V0KCdmb3JlZ3JvdW5kJyk6CiAgICAgICAgICAgIHNlbGYuaW9jLmdldExvZ2dlcigpLmZvcmVncm91bmQgPSBGYWxzZQogICAgICAgIHJldHVybiBUcnVlCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKGludChzdHIocmFuZG9tLmNob2ljZShyYW5nZSgxLCA1KSkpICsgc3RyKHJhbmRvbS5jaG9pY2UocmFuZ2UoMCwgOSkpKSkpCjx8ZmltX2VuZHw+"]
["c1dd8e7655453de375cedbff15a250dc7d911d28-2","c1dd8e7655453de375cedbff15a250dc7d911d28","PHxmaW1fcHJlZml4fD4KZnJvbSB0Z3RfZ3JlYXNlLmNvcmUuVHlwZXMgaW1wb3J0IENvbW1hbmQKZnJvbSB0Z3RfZ3JlYXNlLm1hbmFnZW1lbnQuTW9kZWwgaW1wb3J0IE5vZGVNb25pdG9yaW5nCmltcG9ydCByYW5kb20KaW1wb3J0IHRpbWUKCgpjbGFzcyBDbHVzdGVyTW9uaXRvcihDb21tYW5kKToKICAgICIiIkNsdXN0ZXIgTW9uaXRvciB0byBlbnN1cmUgbm9kZXMgYXJlIGFsaXZlIiIiCgogICAgX19hdXRob3JfXyA9ICJKYW1lcyBFLiBCZWxsIEpyLiIKICAgIF9fdmVyc2lvbl9fID0gIjIuMC4wIgogICAgcHVycG9zZSA9ICJDb250cm9sIGNsdXN0ZXIgaGVhbHRoIgogICAgaGVscCA9ICIiIgogICAgRW5zdXJlcyBoZWFsdGggb2YgR1JFQVNFIGNsdXN0ZXIgYnkgcHJvdmlkaW5nIGEgUHJvdG90eXBlIHRvCiAgICBzY2FuIHRoZSBhY3RpdmUgbm9kZXMgYW5kIGRpc2FibGUgdGhvc2UgdGhhdCBhcmUgdW5oZWFsdGh5CiAgICAKICAgIEFyZ3M6CiAgICAgICAgLS1sb29wOjxpbnQ+CiAgICAgICAgICAgIEhvdyBtYW55IHNjYW5zIHlvdSB3b3VsZCBsaWtlIHRvIHBlcmZvcm0gb2YgY2x1c3RlcgogICAgICAgIC0tZm9yZWdyb3VuZAogICAgICAgICAgICBJZiBzZXQgd2lsbCBwcmludCBsb2cgbWVzc2FnZXMgdG8gdGhlIGNvbW1hbmRsaW5lCiAgICAKICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzdXBlcihDbHVzdGVyTW9uaXRvciwgc2VsZikuX19pbml0X18oKQoKICAgIGRlZiBleGVjdXRlKHNlbGYsIGNvbnRleHQpOgogICAgICAgICIiIlRoaXMgbWV0aG9kIG1vbml0b3JzIHRoZSBlbnZpcm9ubWVudAoKICAgICAgICBBbiBbaW5dZmluaXRlIGxvb3AgbW9uaXRvcmluZyB0aGUgY2x1c3RlciBub2RlcyBmb3IgdW5oZWFsdGh5IG9uZXMKCiAgICAgICAgQXJnczoKICAgICAgICAgICAgY29udGV4dCAoZGljdCk6IGNvbnRleHQgZm9yIHRoZSBjb21tYW5kIHRvIHVzZQoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBib29sOiBDb21tYW5kIFN1Y2Nlc3MKCiAgICAgICAgIiIiCiAgICAgICAgaWYgY29udGV4dC5nZXQoJ2ZvcmVncm91bmQnKToKICAgICAgICAgICAgc2VsZi5pb2MuZ2V0TG9nZ2VyKCkuZm9yZWdyb3VuZCA9IFRydWUKICAgICAgICBtb25pdG9yID0gTm9kZU1vbml0b3Jpbmcoc2VsZi5pb2MpCiAgICAgICAgaWYgY29udGV4dC5nZXQoJ2xvb3AnKToKICAgICAgICAgICAgaSA9IDAKICAgICAgICAgICAgd2hpbGUgaSA8IGludChjb250ZXh0LmdldCgnbG9vcCcsIDApKToKICAgICAgICAgICAgICAgIGlmIG5vdCBtb25pdG9yLm1vbml0b3IoKToKICAgICAgICAgICAgICAgICAgICBzZWxmLmlvYy5nZXRMb2dnZXIoKS5lcnJvcigiTW9uaXRvcmluZyBQcm9jZXNzIEZhaWxlZCIsIG5vdGlmeT1GYWxzZSkKPHxmaW1faG9sZXw+CiAgICAgICAgZWxzZToKICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgIGlmIG5vdCBtb25pdG9yLm1vbml0b3IoKToKICAgICAgICAgICAgICAgICAgICBzZWxmLmlvYy5nZXRMb2dnZXIoKS5lcnJvcigiTW9uaXRvcmluZyBQcm9jZXNzIEZhaWxlZCIsIG5vdGlmeT1GYWxzZSkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgbW9uaXRvci5zY2FuQ29tcGxldGUoKQogICAgICAgICAgICAgICAgIyBzbGVlcCBmb3IgYSByYW5kb20gaW50ZXJ2YWwgdG8gZW5zdXJlIG5vdCBhbGwgbm9kZXMgcG9sbCBhdCB0aGUgc2FtZSB0aW1lCiAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKGludChzdHIocmFuZG9tLmNob2ljZShyYW5nZSgxLCA1KSkpICsgc3RyKHJhbmRvbS5jaG9pY2UocmFuZ2UoMCwgOSkpKSkpCiAgICAgICAgaWYgY29udGV4dC5nZXQoJ2ZvcmVncm91bmQnKToKICAgICAgICAgICAgc2VsZi5pb2MuZ2V0TG9nZ2VyKCkuZm9yZWdyb3VuZCA9IEZhbHNlCiAgICAgICAgcmV0dXJuIFRydWUKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgbW9uaXRvci5zY2FuQ29tcGxldGUoKQogICAgICAgICAgICAgICAgaSArPSAxCiAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDUpCjx8ZmltX2VuZHw+"]
["c1dd8e7655453de375cedbff15a250dc7d911d28-3","c1dd8e7655453de375cedbff15a250dc7d911d28","PHxmaW1fcHJlZml4fD4KZnJvbSB0Z3RfZ3JlYXNlLmNvcmUuVHlwZXMgaW1wb3J0IENvbW1hbmQKZnJvbSB0Z3RfZ3JlYXNlLm1hbmFnZW1lbnQuTW9kZWwgaW1wb3J0IE5vZGVNb25pdG9yaW5nCmltcG9ydCByYW5kb20KaW1wb3J0IHRpbWUKCgpjbGFzcyBDbHVzdGVyTW9uaXRvcihDb21tYW5kKToKICAgICIiIkNsdXN0ZXIgTW9uaXRvciB0byBlbnN1cmUgbm9kZXMgYXJlIGFsaXZlIiIiCgogICAgX19hdXRob3JfXyA9ICJKYW1lcyBFLiBCZWxsIEpyLiIKICAgIF9fdmVyc2lvbl9fID0gIjIuMC4wIgogICAgcHVycG9zZSA9ICJDb250cm9sIGNsdXN0ZXIgaGVhbHRoIgogICAgaGVscCA9ICIiIgogICAgRW5zdXJlcyBoZWFsdGggb2YgR1JFQVNFIGNsdXN0ZXIgYnkgcHJvdmlkaW5nIGEgUHJvdG90eXBlIHRvCiAgICBzY2FuIHRoZSBhY3RpdmUgbm9kZXMgYW5kIGRpc2FibGUgdGhvc2UgdGhhdCBhcmUgdW5oZWFsdGh5CiAgICAKICAgIEFyZ3M6CiAgICAgICAgLS1sb29wOjxpbnQ+CiAgICAgICAgICAgIEhvdyBtYW55IHNjYW5zIHlvdSB3b3VsZCBsaWtlIHRvIHBlcmZvcm0gb2YgY2x1c3RlcgogICAgICAgIC0tZm9yZWdyb3VuZAogICAgICAgICAgICBJZiBzZXQgd2lsbCBwcmludCBsb2cgbWVzc2FnZXMgdG8gdGhlIGNvbW1hbmRsaW5lCiAgICAKICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzdXBlcihDbHVzdGVyTW9uaXRvciwgc2VsZikuX19pbml0X18oKQoKICAgIGRlZiBleGVjdXRlKHNlbGYsIGNvbnRleHQpOgogICAgICAgICIiIlRoaXMgbWV0aG9kIG1vbml0b3JzIHRoZSBlbnZpcm9ubWVudAoKICAgICAgICBBbiBbaW5dZmluaXRlIGxvb3AgbW9uaXRvcmluZyB0aGUgY2x1c3RlciBub2RlcyBmb3IgdW5oZWFsdGh5IG9uZXMKCiAgICAgICAgQXJnczoKICAgICAgICAgICAgY29udGV4dCAoZGljdCk6IGNvbnRleHQgZm9yIHRoZSBjb21tYW5kIHRvIHVzZQoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBib29sOiBDb21tYW5kIFN1Y2Nlc3MKCiAgICAgICAgIiIiCiAgICAgICAgaWYgY29udGV4dC5nZXQoJ2ZvcmVncm91bmQnKToKICAgICAgICAgICAgc2VsZi5pb2MuZ2V0TG9nZ2VyKCkuZm9yZWdyb3VuZCA9IFRydWUKICAgICAgICBtb25pdG9yID0gTm9kZU1vbml0b3Jpbmcoc2VsZi5pb2MpCiAgICAgICAgaWYgY29udGV4dC5nZXQoJ2xvb3AnKToKICAgICAgICAgICAgaSA9IDAKICAgICAgICAgICAgd2hpbGUgaSA8IGludChjb250ZXh0LmdldCgnbG9vcCcsIDApKToKICAgICAgICAgICAgICAgIGlmIG5vdCBtb25pdG9yLm1vbml0b3IoKToKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIG1vbml0b3Iuc2NhbkNvbXBsZXRlKCkKICAgICAgICAgICAgICAgIGkgKz0gMQogICAgICAgICAgICAgICAgdGltZS5zbGVlcCg1KQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICBpZiBub3QgbW9uaXRvci5tb25pdG9yKCk6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5pb2MuZ2V0TG9nZ2VyKCkuZXJyb3IoIk1vbml0b3JpbmcgUHJvY2VzcyBGYWlsZWQiLCBub3RpZnk9RmFsc2UpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIG1vbml0b3Iuc2NhbkNvbXBsZXRlKCkKICAgICAgICAgICAgICAgICMgc2xlZXAgZm9yIGEgcmFuZG9tIGludGVydmFsIHRvIGVuc3VyZSBub3QgYWxsIG5vZGVzIHBvbGwgYXQgdGhlIHNhbWUgdGltZQogICAgICAgICAgICAgICAgdGltZS5zbGVlcChpbnQoc3RyKHJhbmRvbS5jaG9pY2UocmFuZ2UoMSwgNSkpKSArIHN0cihyYW5kb20uY2hvaWNlKHJhbmdlKDAsIDkpKSkpKQogICAgICAgIGlmIGNvbnRleHQuZ2V0KCdmb3JlZ3JvdW5kJyk6CiAgICAgICAgICAgIHNlbGYuaW9jLmdldExvZ2dlcigpLmZvcmVncm91bmQgPSBGYWxzZQogICAgICAgIHJldHVybiBUcnVlCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgc2VsZi5pb2MuZ2V0TG9nZ2VyKCkuZXJyb3IoIk1vbml0b3JpbmcgUHJvY2VzcyBGYWlsZWQiLCBub3RpZnk9RmFsc2UpCjx8ZmltX2VuZHw+"]
["4179a1bb7f5afdf221984c9176a58525d9d5e963-1","4179a1bb7f5afdf221984c9176a58525d9d5e963","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1tYXAKaW1wb3J0IHN0cnVjdAoKCmNsYXNzIHNjc3Nka2NsaWVudDoKICAgIGRlZiB1cGRhdGUoc2VsZik6CiAgICAgICAgc2VsZi5tbSA9IG1tYXAubW1hcCgwLCAxMDI0LCAiTG9jYWxcXFNpbVRlbGVtZXRyeUVUUzIiKQoKICAgICAgICBzZWxmLmV0czJfdGVsZW1ldHJ5X3BsdWdpbl9yZXZpc2lvbiA9IHN0cnVjdC51bnBhY2soIkkiLCBzZWxmLm1tWzg6MTJdKVswXQoKICAgICAgICBzZWxmLmV0czJfdmVyc2lvbl9tYWpvciA9IHN0cnVjdC51bnBhY2soIkkiLCBzZWxmLm1tWzEyOjE2XSlbMF0KCiAgICAgICAgc2VsZi5ldHMyX3ZlcnNpb25fbWlub3IgPSBzdHJ1Y3QudW5wYWNrKCJJIiwgc2VsZi5tbVsxNjoyMF0pWzBdCgogICAgICAgIHNlbGYuZmxhZ3MgPSBzZWxmLm1tWzIwOjI0XQoKICAgICAgICBzZWxmLnNwZWVkID0gc3RydWN0LnVucGFjaygiZiIsIHNlbGYubW1bMjQ6MjhdKVswXQoKICAgICAgICBzZWxmLmNvb3JkaW5hdGVYID0gc3RydWN0LnVucGFjaygiZiIsIHNlbGYubW1bNDA6NDRdKVswXQoKICAgICAgICBzZWxmLmNvb3JkaW5hdGVZID0gc3RydWN0LnVucGFjaygiZiIsIHNlbGYubW1bNDQ6NDhdKVswXQoKPHxmaW1faG9sZXw+CiAgICAgICAgc2VsZi50cmFpbGVyTmFtZSA9IHNlbGYubW1bMjM2OjMwMF0uZGVjb2RlKCJ1dGYtOCIpLnJlcGxhY2UoIlx4MDAiLCAiIikKCiAgICAgICAgc2VsZi50cnVja01ha2UgPSBzZWxmLm1tWzY3Njo3NDBdLmRlY29kZSgidXRmLTgiKS5yZXBsYWNlKCJceDAwIiwgIiIpCgogICAgICAgIHNlbGYudHJ1Y2tNb2RlbCA9IHNlbGYubW1bODA0Ojg2OF0uZGVjb2RlKCJ1dGYtOCIpLnJlcGxhY2UoIlx4MDAiLCAiIikKCiAgICAgICAgc2VsZi5yb3V0ZURpc3RhbmNlID0gc3RydWN0LnVucGFjaygiZiIsIHNlbGYubW1bODcyOjg3Nl0pWzBdCgogICAgICAgIHNlbGYubW0uY2xvc2UoKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuY29vcmRpbmF0ZVogPSBzdHJ1Y3QudW5wYWNrKCJmIiwgc2VsZi5tbVs0ODo1Ml0pWzBdCgogICAgICAgIHNlbGYudHJhaWxlck1hc3MgPSBzdHJ1Y3QudW5wYWNrKCJmIiwgc2VsZi5tbVsxNjg6MTcyXSlbMF0KCjx8ZmltX2VuZHw+"]
["4179a1bb7f5afdf221984c9176a58525d9d5e963-2","4179a1bb7f5afdf221984c9176a58525d9d5e963","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1tYXAKaW1wb3J0IHN0cnVjdAoKCmNsYXNzIHNjc3Nka2NsaWVudDoKICAgIGRlZiB1cGRhdGUoc2VsZik6CiAgICAgICAgc2VsZi5tbSA9IG1tYXAubW1hcCgwLCAxMDI0LCAiTG9jYWxcXFNpbVRlbGVtZXRyeUVUUzIiKQoKICAgICAgICBzZWxmLmV0czJfdGVsZW1ldHJ5X3BsdWdpbl9yZXZpc2lvbiA9IHN0cnVjdC51bnBhY2soIkkiLCBzZWxmLm1tWzg6MTJdKVswXQoKICAgICAgICBzZWxmLmV0czJfdmVyc2lvbl9tYWpvciA9IHN0cnVjdC51bnBhY2soIkkiLCBzZWxmLm1tWzEyOjE2XSlbMF0KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmV0czJfdmVyc2lvbl9taW5vciA9IHN0cnVjdC51bnBhY2soIkkiLCBzZWxmLm1tWzE2OjIwXSlbMF0KCiAgICAgICAgc2VsZi5mbGFncyA9IHNlbGYubW1bMjA6MjRdCgo8fGZpbV9lbmR8Pg=="]
["4179a1bb7f5afdf221984c9176a58525d9d5e963-3","4179a1bb7f5afdf221984c9176a58525d9d5e963","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1tYXAKaW1wb3J0IHN0cnVjdAoKCmNsYXNzIHNjc3Nka2NsaWVudDoKICAgIGRlZiB1cGRhdGUoc2VsZik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLm1tID0gbW1hcC5tbWFwKDAsIDEwMjQsICJMb2NhbFxcU2ltVGVsZW1ldHJ5RVRTMiIpCgogICAgICAgIHNlbGYuZXRzMl90ZWxlbWV0cnlfcGx1Z2luX3JldmlzaW9uID0gc3RydWN0LnVucGFjaygiSSIsIHNlbGYubW1bODoxMl0pWzBdCgo8fGZpbV9lbmR8Pg=="]
["4179a1bb7f5afdf221984c9176a58525d9d5e963-4","4179a1bb7f5afdf221984c9176a58525d9d5e963","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1tYXAKaW1wb3J0IHN0cnVjdAoKCmNsYXNzIHNjc3Nka2NsaWVudDoKICAgIGRlZiB1cGRhdGUoc2VsZik6CiAgICAgICAgc2VsZi5tbSA9IG1tYXAubW1hcCgwLCAxMDI0LCAiTG9jYWxcXFNpbVRlbGVtZXRyeUVUUzIiKQoKICAgICAgICBzZWxmLmV0czJfdGVsZW1ldHJ5X3BsdWdpbl9yZXZpc2lvbiA9IHN0cnVjdC51bnBhY2soIkkiLCBzZWxmLm1tWzg6MTJdKVswXQoKPHxmaW1faG9sZXw+CiAgICAgICAgc2VsZi5mbGFncyA9IHNlbGYubW1bMjA6MjRdCgogICAgICAgIHNlbGYuc3BlZWQgPSBzdHJ1Y3QudW5wYWNrKCJmIiwgc2VsZi5tbVsyNDoyOF0pWzBdCgogICAgICAgIHNlbGYuY29vcmRpbmF0ZVggPSBzdHJ1Y3QudW5wYWNrKCJmIiwgc2VsZi5tbVs0MDo0NF0pWzBdCgogICAgICAgIHNlbGYuY29vcmRpbmF0ZVkgPSBzdHJ1Y3QudW5wYWNrKCJmIiwgc2VsZi5tbVs0NDo0OF0pWzBdCgogICAgICAgIHNlbGYuY29vcmRpbmF0ZVogPSBzdHJ1Y3QudW5wYWNrKCJmIiwgc2VsZi5tbVs0ODo1Ml0pWzBdCgogICAgICAgIHNlbGYudHJhaWxlck1hc3MgPSBzdHJ1Y3QudW5wYWNrKCJmIiwgc2VsZi5tbVsxNjg6MTcyXSlbMF0KCiAgICAgICAgc2VsZi50cmFpbGVyTmFtZSA9IHNlbGYubW1bMjM2OjMwMF0uZGVjb2RlKCJ1dGYtOCIpLnJlcGxhY2UoIlx4MDAiLCAiIikKCiAgICAgICAgc2VsZi50cnVja01ha2UgPSBzZWxmLm1tWzY3Njo3NDBdLmRlY29kZSgidXRmLTgiKS5yZXBsYWNlKCJceDAwIiwgIiIpCgogICAgICAgIHNlbGYudHJ1Y2tNb2RlbCA9IHNlbGYubW1bODA0Ojg2OF0uZGVjb2RlKCJ1dGYtOCIpLnJlcGxhY2UoIlx4MDAiLCAiIikKCiAgICAgICAgc2VsZi5yb3V0ZURpc3RhbmNlID0gc3RydWN0LnVucGFjaygiZiIsIHNlbGYubW1bODcyOjg3Nl0pWzBdCgogICAgICAgIHNlbGYubW0uY2xvc2UoKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuZXRzMl92ZXJzaW9uX21ham9yID0gc3RydWN0LnVucGFjaygiSSIsIHNlbGYubW1bMTI6MTZdKVswXQoKICAgICAgICBzZWxmLmV0czJfdmVyc2lvbl9taW5vciA9IHN0cnVjdC51bnBhY2soIkkiLCBzZWxmLm1tWzE2OjIwXSlbMF0KCjx8ZmltX2VuZHw+"]
["c1b9d13ca710e50753d04b63bcf48a36688df2d9-1","c1b9d13ca710e50753d04b63bcf48a36688df2d9","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAxOSBTYW0gVmVydmFlY2sKIyAKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMgCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojIAojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAo8fGZpbV9ob2xlfD4KaW1wb3J0IGFzdApmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCwgT3B0aW9uYWwsIEFueSwgVHVwbGUsIFVuaW9uCgpmcm9tIHN3ZWV0ZW5lciBpbXBvcnQgQmFzZU5vZGUsIFJlY29yZAoKY2xhc3MgVGV4dFBvcyhSZWNvcmQpOgoKICAgIG9mZnNldDogaW50ID0gMAogICAgbGluZTogaW50ID0gMQogICAgY29sdW1uOiBpbnQgPSAxCgogICAgZGVmIGFkdmFuY2Uoc2VsZiwgdGV4dCk6CiAgICAgICAgZm9yIGNoIGluIHRleHQ6CiAgICAgICAgICAgIGlmIGNoID09ICdcbic6CiAgICAgICAgICAgICAgICBzZWxmLmxpbmUgKz0gMQogICAgICAgICAgICAgICAgc2VsZi5jb2x1bW4gPSAwCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBzZWxmLmNvbHVtbiArPSAxCiAgICAgICAgICAgIHNlbGYub2Zmc2V0ICs9IDEKCgpjbGFzcyBUZXh0U3BhbihSZWNvcmQpOgogICAgc3RhcnRfcG9zOiBUZXh0UG9zCiAgICBlbmRfcG9zOiBUZXh0UG9zCgpjbGFzcyBOb2RlKEJhc2VOb2RlKToKICAgIHNwYW46IE9wdGlvbmFsW1RleHRTcGFuXSA9IE5vbmUKCmNsYXNzIFBhdHRlcm4oTm9kZSk6CiAgICBwYXNzCgpjbGFzcyBUdXBsZVBhdHRlcm4oUGF0dGVybik6CiAgICBlbGVtZW50czogTGlzdFtQYXR0ZXJuXQoKY2xhc3MgVmFyUGF0dGVybihQYXR0ZXJuKToKICAgIG5hbWU6IHN0cgoKY2xhc3MgRXhwcmVzc2lvbihOb2RlKToKICAgIHBhc3MKCmNsYXNzIEluZGV4RXhwcmVzc2lvbihFeHByZXNzaW9uKToKICAgIGV4cHJlc3Npb246IEV4cHJlc3Npb24KICAgIGluZGV4OiBFeHByZXNzaW9uCgpjbGFzcyBTbGljZUV4cHJlc3Npb24oRXhwcmVzc2lvbik6CiAgICBleHByZXNzaW9uOiBFeHByZXNzaW9uCiAgICBtaW46IE9wdGlvbmFsW0V4cHJlc3Npb25dCiAgICBtYXg6IE9wdGlvbmFsW0V4cHJlc3Npb25dCgpjbGFzcyBNZW1iZXJFeHByZXNzaW9uKEV4cHJlc3Npb24pOgogICAgZXhwcmVzc2lvbjogRXhwcmVzc2lvbgogICAgbWVtYmVyczogTGlzdFtzdHJdCgpjbGFzcyBWYXJSZWZFeHByZXNzaW9uKEV4cHJlc3Npb24pOgogICAgbmFtZTogc3RyCgpjbGFzcyBDb25zdEV4cHJlc3Npb24oRXhwcmVzc2lvbik6CiAgICB2YWx1ZTogQW55CgpjbGFzcyBBcHBFeHByZXNzaW9uKEV4cHJlc3Npb24pOgogICAgb3BlcmF0b3I6IEV4cHJlc3Npb24KICAgIG9wZXJhbmRzOiBMaXN0W0V4cHJlc3Npb25dCgpjbGFzcyBUdXBsZUV4cHJlc3Npb24oRXhwcmVzc2lvbik6CiAgICBlbGVtZW50czogTGlzdFtFeHByZXNzaW9uXQoKY2xhc3MgU3RhdGVtZW50KE5vZGUpOgogICAgcGFzcwoKY2xhc3MgVGV4dFN0YXRlbWVudChTdGF0ZW1lbnQpOgogICAgdGV4dDogc3RyCgpjbGFzcyBFeHByZXNzaW9uU3RhdGVtZW50KFN0YXRlbWVudCk6CiAgICBleHByZXNzaW9uOiBFeHByZXNzaW9uCgpjbGFzcyBJZlN0YXRlbWVudENhc2UoTm9kZSk6CiAgICB0ZXN0OiBPcHRpb25hbFtFeHByZXNzaW9uXQogICAgYm9keTogTGlzdFtTdGF0ZW1lbnRdCgpjbGFzcyBJZlN0YXRlbWVudChTdGF0ZW1lbnQpOgogICAgY2FzZXM6IExpc3RbSWZTdGF0ZW1lbnRDYXNlXQoKY2xhc3MgQ29kZUJsb2NrKFN0YXRlbWVudCk6CiAgICBtb2R1bGU6IGFzdC5Nb2R1bGUKCmNsYXNzIFNldEluZGVudFN0YXRlbWVudChTdGF0ZW1lbnQpOgogICAgbGV2ZWw6IEV4cHJlc3Npb24KICAgIGJvZHk6IExpc3RbU3RhdGVtZW50XQoKY2xhc3MgSm9pblN0YXRlbWVudChTdGF0ZW1lbnQpOgogICAgcGF0dGVybjogUGF0dGVybgogICAgZXhwcmVzc2lvbjogRXhwcmVzc2lvbgogICAgc2VwYXJhdG9yOiBFeHByZXNzaW9uCiAgICBib2R5OiBMaXN0W1N0YXRlbWVudF0KCmNsYXNzIEZvckluU3RhdGVtZW50KFN0YXRlbWVudCk6CiAgICBwYXR0ZXJuOiBQYXR0ZXJuCiAgICBleHByZXNzaW9uOiBFeHByZXNzaW9uCiAgICBib2R5OiBMaXN0W1N0YXRlbWVudF0KCmNsYXNzIFRlbXBsYXRlKE5vZGUpOgogICAgYm9keTogTGlzdFtTdGF0ZW1lbnRdCgpkZWYgc2V0X2FsbF9wYXJlbnRzKG5vZGUsIHBhcmVudD1Ob25lKToKICAgIG5vZGUucGFyZW50ID0gcGFyZW50CiAgICBmb3IgY2hpbGQgaW4gbm9kZS5nZXRfY2hpbGRfbm9kZXMoKToKICAgICAgICBzZXRfYWxsX3BhcmVudHMoY2hpbGQsIG5vZGUpCgo8fGZpbV9zdWZmaXh8PgojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCjx8ZmltX2VuZHw+"]
["c1b9d13ca710e50753d04b63bcf48a36688df2d9-2","c1b9d13ca710e50753d04b63bcf48a36688df2d9","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAxOSBTYW0gVmVydmFlY2sKIyAKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMgCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojIAojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCmltcG9ydCBhc3QKZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QsIE9wdGlvbmFsLCBBbnksIFR1cGxlLCBVbmlvbgoKZnJvbSBzd2VldGVuZXIgaW1wb3J0IEJhc2VOb2RlLCBSZWNvcmQKCmNsYXNzIFRleHRQb3MoUmVjb3JkKToKCiAgICBvZmZzZXQ6IGludCA9IDAKICAgIGxpbmU6IGludCA9IDEKICAgIGNvbHVtbjogaW50ID0gMQoKICAgIGRlZiBhZHZhbmNlKHNlbGYsIHRleHQpOgogICAgICAgIGZvciBjaCBpbiB0ZXh0OgogICAgICAgICAgICBpZiBjaCA9PSAnXG4nOgogICAgICAgICAgICAgICAgc2VsZi5saW5lICs9IDEKICAgICAgICAgICAgICAgIHNlbGYuY29sdW1uID0gMAogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgc2VsZi5jb2x1bW4gKz0gMQogICAgICAgICAgICBzZWxmLm9mZnNldCArPSAxCgoKY2xhc3MgVGV4dFNwYW4oUmVjb3JkKToKICAgIHN0YXJ0X3BvczogVGV4dFBvcwogICAgZW5kX3BvczogVGV4dFBvcwoKY2xhc3MgTm9kZShCYXNlTm9kZSk6CiAgICBzcGFuOiBPcHRpb25hbFtUZXh0U3Bhbl0gPSBOb25lCgpjbGFzcyBQYXR0ZXJuKE5vZGUpOgogICAgcGFzcwoKY2xhc3MgVHVwbGVQYXR0ZXJuKFBhdHRlcm4pOgogICAgZWxlbWVudHM6IExpc3RbUGF0dGVybl0KCmNsYXNzIFZhclBhdHRlcm4oUGF0dGVybik6CiAgICBuYW1lOiBzdHIKCmNsYXNzIEV4cHJlc3Npb24oTm9kZSk6CiAgICBwYXNzCgpjbGFzcyBJbmRleEV4cHJlc3Npb24oRXhwcmVzc2lvbik6CiAgICBleHByZXNzaW9uOiBFeHByZXNzaW9uCiAgICBpbmRleDogRXhwcmVzc2lvbgoKY2xhc3MgU2xpY2VFeHByZXNzaW9uKEV4cHJlc3Npb24pOgogICAgZXhwcmVzc2lvbjogRXhwcmVzc2lvbgogICAgbWluOiBPcHRpb25hbFtFeHByZXNzaW9uXQogICAgbWF4OiBPcHRpb25hbFtFeHByZXNzaW9uXQoKY2xhc3MgTWVtYmVyRXhwcmVzc2lvbihFeHByZXNzaW9uKToKICAgIGV4cHJlc3Npb246IEV4cHJlc3Npb24KICAgIG1lbWJlcnM6IExpc3Rbc3RyXQoKPHxmaW1faG9sZXw+CiAgICB2YWx1ZTogQW55CgpjbGFzcyBBcHBFeHByZXNzaW9uKEV4cHJlc3Npb24pOgogICAgb3BlcmF0b3I6IEV4cHJlc3Npb24KICAgIG9wZXJhbmRzOiBMaXN0W0V4cHJlc3Npb25dCgpjbGFzcyBUdXBsZUV4cHJlc3Npb24oRXhwcmVzc2lvbik6CiAgICBlbGVtZW50czogTGlzdFtFeHByZXNzaW9uXQoKY2xhc3MgU3RhdGVtZW50KE5vZGUpOgogICAgcGFzcwoKY2xhc3MgVGV4dFN0YXRlbWVudChTdGF0ZW1lbnQpOgogICAgdGV4dDogc3RyCgpjbGFzcyBFeHByZXNzaW9uU3RhdGVtZW50KFN0YXRlbWVudCk6CiAgICBleHByZXNzaW9uOiBFeHByZXNzaW9uCgpjbGFzcyBJZlN0YXRlbWVudENhc2UoTm9kZSk6CiAgICB0ZXN0OiBPcHRpb25hbFtFeHByZXNzaW9uXQogICAgYm9keTogTGlzdFtTdGF0ZW1lbnRdCgpjbGFzcyBJZlN0YXRlbWVudChTdGF0ZW1lbnQpOgogICAgY2FzZXM6IExpc3RbSWZTdGF0ZW1lbnRDYXNlXQoKY2xhc3MgQ29kZUJsb2NrKFN0YXRlbWVudCk6CiAgICBtb2R1bGU6IGFzdC5Nb2R1bGUKCmNsYXNzIFNldEluZGVudFN0YXRlbWVudChTdGF0ZW1lbnQpOgogICAgbGV2ZWw6IEV4cHJlc3Npb24KICAgIGJvZHk6IExpc3RbU3RhdGVtZW50XQoKY2xhc3MgSm9pblN0YXRlbWVudChTdGF0ZW1lbnQpOgogICAgcGF0dGVybjogUGF0dGVybgogICAgZXhwcmVzc2lvbjogRXhwcmVzc2lvbgogICAgc2VwYXJhdG9yOiBFeHByZXNzaW9uCiAgICBib2R5OiBMaXN0W1N0YXRlbWVudF0KCmNsYXNzIEZvckluU3RhdGVtZW50KFN0YXRlbWVudCk6CiAgICBwYXR0ZXJuOiBQYXR0ZXJuCiAgICBleHByZXNzaW9uOiBFeHByZXNzaW9uCiAgICBib2R5OiBMaXN0W1N0YXRlbWVudF0KCmNsYXNzIFRlbXBsYXRlKE5vZGUpOgogICAgYm9keTogTGlzdFtTdGF0ZW1lbnRdCgpkZWYgc2V0X2FsbF9wYXJlbnRzKG5vZGUsIHBhcmVudD1Ob25lKToKICAgIG5vZGUucGFyZW50ID0gcGFyZW50CiAgICBmb3IgY2hpbGQgaW4gbm9kZS5nZXRfY2hpbGRfbm9kZXMoKToKICAgICAgICBzZXRfYWxsX3BhcmVudHMoY2hpbGQsIG5vZGUpCgo8fGZpbV9zdWZmaXh8PgpjbGFzcyBWYXJSZWZFeHByZXNzaW9uKEV4cHJlc3Npb24pOgogICAgbmFtZTogc3RyCgpjbGFzcyBDb25zdEV4cHJlc3Npb24oRXhwcmVzc2lvbik6Cjx8ZmltX2VuZHw+"]
["c1b9d13ca710e50753d04b63bcf48a36688df2d9-3","c1b9d13ca710e50753d04b63bcf48a36688df2d9","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAxOSBTYW0gVmVydmFlY2sKIyAKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIyAKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMgCjx8ZmltX2VuZHw+"]
["c1b9d13ca710e50753d04b63bcf48a36688df2d9-4","c1b9d13ca710e50753d04b63bcf48a36688df2d9","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAxOSBTYW0gVmVydmFlY2sKIyAKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMgCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojIAojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCmltcG9ydCBhc3QKZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QsIE9wdGlvbmFsLCBBbnksIFR1cGxlLCBVbmlvbgoKZnJvbSBzd2VldGVuZXIgaW1wb3J0IEJhc2VOb2RlLCBSZWNvcmQKCmNsYXNzIFRleHRQb3MoUmVjb3JkKToKCiAgICBvZmZzZXQ6IGludCA9IDAKICAgIGxpbmU6IGludCA9IDEKICAgIGNvbHVtbjogaW50ID0gMQoKICAgIGRlZiBhZHZhbmNlKHNlbGYsIHRleHQpOgogICAgICAgIGZvciBjaCBpbiB0ZXh0OgogICAgICAgICAgICBpZiBjaCA9PSAnXG4nOgogICAgICAgICAgICAgICAgc2VsZi5saW5lICs9IDEKICAgICAgICAgICAgICAgIHNlbGYuY29sdW1uID0gMAogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgc2VsZi5jb2x1bW4gKz0gMQogICAgICAgICAgICBzZWxmLm9mZnNldCArPSAxCgoKY2xhc3MgVGV4dFNwYW4oUmVjb3JkKToKICAgIHN0YXJ0X3BvczogVGV4dFBvcwogICAgZW5kX3BvczogVGV4dFBvcwoKY2xhc3MgTm9kZShCYXNlTm9kZSk6CiAgICBzcGFuOiBPcHRpb25hbFtUZXh0U3Bhbl0gPSBOb25lCgpjbGFzcyBQYXR0ZXJuKE5vZGUpOgogICAgcGFzcwoKY2xhc3MgVHVwbGVQYXR0ZXJuKFBhdHRlcm4pOgogICAgZWxlbWVudHM6IExpc3RbUGF0dGVybl0KCmNsYXNzIFZhclBhdHRlcm4oUGF0dGVybik6CiAgICBuYW1lOiBzdHIKCmNsYXNzIEV4cHJlc3Npb24oTm9kZSk6CiAgICBwYXNzCgpjbGFzcyBJbmRleEV4cHJlc3Npb24oRXhwcmVzc2lvbik6CiAgICBleHByZXNzaW9uOiBFeHByZXNzaW9uCiAgICBpbmRleDogRXhwcmVzc2lvbgoKY2xhc3MgU2xpY2VFeHByZXNzaW9uKEV4cHJlc3Npb24pOgogICAgZXhwcmVzc2lvbjogRXhwcmVzc2lvbgogICAgbWluOiBPcHRpb25hbFtFeHByZXNzaW9uXQogICAgbWF4OiBPcHRpb25hbFtFeHByZXNzaW9uXQoKY2xhc3MgTWVtYmVyRXhwcmVzc2lvbihFeHByZXNzaW9uKToKICAgIGV4cHJlc3Npb246IEV4cHJlc3Npb24KICAgIG1lbWJlcnM6IExpc3Rbc3RyXQoKY2xhc3MgVmFyUmVmRXhwcmVzc2lvbihFeHByZXNzaW9uKToKICAgIG5hbWU6IHN0cgoKY2xhc3MgQ29uc3RFeHByZXNzaW9uKEV4cHJlc3Npb24pOgogICAgdmFsdWU6IEFueQoKY2xhc3MgQXBwRXhwcmVzc2lvbihFeHByZXNzaW9uKToKICAgIG9wZXJhdG9yOiBFeHByZXNzaW9uCiAgICBvcGVyYW5kczogTGlzdFtFeHByZXNzaW9uXQoKY2xhc3MgVHVwbGVFeHByZXNzaW9uKEV4cHJlc3Npb24pOgogICAgZWxlbWVudHM6IExpc3RbRXhwcmVzc2lvbl0KCmNsYXNzIFN0YXRlbWVudChOb2RlKToKPHxmaW1faG9sZXw+CmNsYXNzIFRleHRTdGF0ZW1lbnQoU3RhdGVtZW50KToKICAgIHRleHQ6IHN0cgoKY2xhc3MgRXhwcmVzc2lvblN0YXRlbWVudChTdGF0ZW1lbnQpOgogICAgZXhwcmVzc2lvbjogRXhwcmVzc2lvbgoKY2xhc3MgSWZTdGF0ZW1lbnRDYXNlKE5vZGUpOgogICAgdGVzdDogT3B0aW9uYWxbRXhwcmVzc2lvbl0KICAgIGJvZHk6IExpc3RbU3RhdGVtZW50XQoKY2xhc3MgSWZTdGF0ZW1lbnQoU3RhdGVtZW50KToKICAgIGNhc2VzOiBMaXN0W0lmU3RhdGVtZW50Q2FzZV0KCmNsYXNzIENvZGVCbG9jayhTdGF0ZW1lbnQpOgogICAgbW9kdWxlOiBhc3QuTW9kdWxlCgpjbGFzcyBTZXRJbmRlbnRTdGF0ZW1lbnQoU3RhdGVtZW50KToKICAgIGxldmVsOiBFeHByZXNzaW9uCiAgICBib2R5OiBMaXN0W1N0YXRlbWVudF0KCmNsYXNzIEpvaW5TdGF0ZW1lbnQoU3RhdGVtZW50KToKICAgIHBhdHRlcm46IFBhdHRlcm4KICAgIGV4cHJlc3Npb246IEV4cHJlc3Npb24KICAgIHNlcGFyYXRvcjogRXhwcmVzc2lvbgogICAgYm9keTogTGlzdFtTdGF0ZW1lbnRdCgpjbGFzcyBGb3JJblN0YXRlbWVudChTdGF0ZW1lbnQpOgogICAgcGF0dGVybjogUGF0dGVybgogICAgZXhwcmVzc2lvbjogRXhwcmVzc2lvbgogICAgYm9keTogTGlzdFtTdGF0ZW1lbnRdCgpjbGFzcyBUZW1wbGF0ZShOb2RlKToKICAgIGJvZHk6IExpc3RbU3RhdGVtZW50XQoKZGVmIHNldF9hbGxfcGFyZW50cyhub2RlLCBwYXJlbnQ9Tm9uZSk6CiAgICBub2RlLnBhcmVudCA9IHBhcmVudAogICAgZm9yIGNoaWxkIGluIG5vZGUuZ2V0X2NoaWxkX25vZGVzKCk6CiAgICAgICAgc2V0X2FsbF9wYXJlbnRzKGNoaWxkLCBub2RlKQoKPHxmaW1fc3VmZml4fD4KICAgIHBhc3MKCjx8ZmltX2VuZHw+"]
["417c9c984b45fdd4c25fd2c733101aa5293aa805-1","417c9c984b45fdd4c25fd2c733101aa5293aa805","PHxmaW1fcHJlZml4fD4KIyDsnbTsp4TtirjrpqzsnZgg7LWc64yA6rmK7J2066W8IOq1rO2VmOyXrOudvAojIFszLCA5LCAyMCwgbnVsbCwgbnVsbCwgMTUsIDddCiMg7KCV64u1OiAzCiMg7J2065+w7IudIQoKbnVsbCA9ICJudWxsIgoKdHJlZSA9IFszLDksMjAsIG51bGwsIG51bGwsIDE1LDddCgpjbGFzcyBUcmVlTm9kZToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhLCByaWdodD1Ob25lLCBsZWZ0PU5vbmUpOgogICAgICAgIHNlbGYudmFsID0gZGF0YQogICAgICAgIHNlbGYucmlnaHQgPSByaWdodAogICAgICAgIHNlbGYubGVmdCA9IGxlZnQKCiAgICBkZWYgcHJpbnRfYWxsKCk6CiAgICAgICAgLi4uCgpyb290PVRyZWVOb2RlKE5vbmUpCgoKCmJyYW5jaHMgPSBbcm9vdF0Kd2hpbGUgYnJhbmNoczoKICAgIHRyeToKICAgICAgICBicmFuY2ggPSBicmFuY2hzLnBvcCgwKQogICAgICAgIGlmIHJvb3QudmFsPT1Ob25lOgogICAgICAgICAgICBpID0gdHJlZS5wb3AoMCkKICAgICAgICAgICAgcm9vdCA9IFRyZWVOb2RlKGkpCiAgICAgICAgICAgIGJyYW5jaHMuYXBwZW5kKHJvb3QpCiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgaWYgYnJhbmNoLmxlZnQ9PU5vbmU6CiAgICAgICAgICAgIGkgPSB0cmVlLnBvcCgwKQogICAgICAgICAgICBicmFuY2gubGVmdD1UcmVlTm9kZShpKQogICAgICAgICAgICBicmFuY2hzLmFwcGVuZChicmFuY2gubGVmdCkKICAgICAgICBpZiBicmFuY2gucmlnaHQ9PU5vbmU6CiAgICAgICAgICAgIGkgPSB0cmVlLnBvcCgwKQogICAgICAgICAgICBicmFuY2gucmlnaHQ9VHJlZU5vZGUoaSkKICAgICAgICAgICAgYnJhbmNocy5hcHBlbmQoYnJhbmNoLnJpZ2h0KQogICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgcHJpbnQoImFsbCBkbyB0aGF0IikKICAgICAgICBicmVhawo8fGZpbV9ob2xlfD4KCgoKPHxmaW1fc3VmZml4fD4KCgoKcHJpbnQocm9vdC5yaWdodC5sZWZ0LnZhbCkKPHxmaW1fZW5kfD4="]
["417c9c984b45fdd4c25fd2c733101aa5293aa805-2","417c9c984b45fdd4c25fd2c733101aa5293aa805","PHxmaW1fcHJlZml4fD4KIyDsnbTsp4TtirjrpqzsnZgg7LWc64yA6rmK7J2066W8IOq1rO2VmOyXrOudvAojIFszLCA5LCAyMCwgbnVsbCwgbnVsbCwgMTUsIDddCiMg7KCV64u1OiAzCiMg7J2065+w7IudIQoKbnVsbCA9ICJudWxsIgoKdHJlZSA9IFszLDksMjAsIG51bGwsIG51bGwsIDE1LDddCgpjbGFzcyBUcmVlTm9kZToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhLCByaWdodD1Ob25lLCBsZWZ0PU5vbmUpOgogICAgICAgIHNlbGYudmFsID0gZGF0YQogICAgICAgIHNlbGYucmlnaHQgPSByaWdodAogICAgICAgIHNlbGYubGVmdCA9IGxlZnQKCiAgICBkZWYgcHJpbnRfYWxsKCk6CiAgICAgICAgLi4uCgpyb290PVRyZWVOb2RlKE5vbmUpCgoKCmJyYW5jaHMgPSBbcm9vdF0Kd2hpbGUgYnJhbmNoczoKICAgIHRyeToKICAgICAgICBicmFuY2ggPSBicmFuY2hzLnBvcCgwKQogICAgICAgIGlmIHJvb3QudmFsPT1Ob25lOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGkgPSB0cmVlLnBvcCgwKQogICAgICAgICAgICByb290ID0gVHJlZU5vZGUoaSkKICAgICAgICAgICAgYnJhbmNocy5hcHBlbmQocm9vdCkKICAgICAgICAgICAgY29udGludWUKPHxmaW1fZW5kfD4="]
["417c9c984b45fdd4c25fd2c733101aa5293aa805-3","417c9c984b45fdd4c25fd2c733101aa5293aa805","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyDsnbTsp4TtirjrpqzsnZgg7LWc64yA6rmK7J2066W8IOq1rO2VmOyXrOudvAojIFszLCA5LCAyMCwgbnVsbCwgbnVsbCwgMTUsIDddCiMg7KCV64u1OiAzCiMg7J2065+w7IudIQo8fGZpbV9lbmR8Pg=="]
["824605ce2da758cffc67f57b812684631df92964-1","824605ce2da758cffc67f57b812684631df92964","PHxmaW1fcHJlZml4fD4KIy8qCiMgKiAgICAgIENvcHlyaWdodCAoQykgMjAxMyBKb29zdCBLb3AKIyAqCiMgKgojICogIFRoaXMgUHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCiMgKiAgYW55IGxhdGVyIHZlcnNpb24uCiMgKgojICogIFRoaXMgUHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCiMgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyAqCiMgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCiMgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiMgKiAgaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCiMgKgojICovCgppbXBvcnQgeGJtY3BsdWdpbgppbXBvcnQgeGJtY2d1aQoKaW1wb3J0IHRpbWUKCmZyb20gcmVzb3VyY2VzLmxpYi51dGlscyBpbXBvcnQgKgpmcm9tIHJlc291cmNlcy5saWIuZHJvcGJveGNsaWVudCBpbXBvcnQgWEJNQ0Ryb3BCb3hDbGllbnQsIERvd25sb2FkZXIKZnJvbSByZXNvdXJjZXMubGliLmRyb3Bib3hmaWxlYnJvd3NlciBpbXBvcnQgRHJvcGJveEZpbGVCcm93c2VyCmZyb20gcmVzb3VyY2VzLmxpYi5zeW5jLm5vdGlmeXN5bmMgaW1wb3J0IE5vdGlmeVN5bmNDbGllbnQKaW1wb3J0IHJlc291cmNlcy5saWIubG9naW4gYXMgbG9naW4KCmlmICggX19uYW1lX18gPT0gIl9fbWFpbl9fIiApOgogICAgbG9nX2RlYnVnKCdBcmd1bWVudCBMaXN0OiAlcycgJSBzdHIoc3lzLmFyZ3YpKQogICAgcnVuQXNTY3JpcHQsIHBhcmFtcyA9IHBhcnNlX2FyZ3YoKQogICAgaWYgbm90IHJ1bkFzU2NyaXB0OgogICAgICAgIGlmIGludChzeXMuYXJndlsxXSkgPCAwOgogICAgICAgICAgICAjaGFuZGxlIGFjdGlvbiBvZiBhIGZpbGUgKG9yIGEgIlNob3cgbWUgbW9yZS4uLiIgaXRlbSkKICAgICAgICAgICAgaWYgJ21lZGlhX2l0ZW1zJyBpbiBwYXJhbXM6CiAgICAgICAgICAgICAgICAjTG9hZGluZyBtb3JlIG1lZGlhIGl0ZW1zIHJlcXVlc3RlZC4uLgogICAgICAgICAgICAgICAgcGF0aCA9IHN5cy5hcmd2WzBdICsgc3lzLmFyZ3ZbMl0KICAgICAgICAgICAgICAgICN4Ym1jLmV4ZWN1dGVidWlsdGluKCdjb250YWluZXIudXBkYXRlKCVzLCByZXBsYWNlKSclcGF0aCkgIyBkb24ndCB1c2UgcmVwbGFjZSBiZWNhdXNlIHRoYXQgcmVtb3ZlcyB0aGUgY29udGVudF90eXBlIGZyb20gdGhlIHBhdGguLi4KICAgICAgICAgICAgICAgIHhibWMuZXhlY3V0ZWJ1aWx0aW4oJ2NvbnRhaW5lci51cGRhdGUoJXMpJyVwYXRoKQogICAgICAgICAgICBlbGlmICdtb2R1bGUnIGluIHBhcmFtczogIyBwbHVnaW4gKG1vZHVsZSkgdG8gcnVuCiAgICAgICAgICAgICAgICBwYXRoID0gc3lzLmFyZ3ZbMF0gKyBzeXMuYXJndlsyXQogICAgICAgICAgICAgICAgeGJtYy5leGVjdXRlYnVpbHRpbignY29udGFpbmVyLnVwZGF0ZSglcyknJXBhdGgpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgJ21vZHVsZScgaW4gcGFyYW1zOiAjIE1vZHVsZSBjaG9zZW4sIGxvYWQgYW5kIGV4ZWN1dGUgbW9kdWxlCiAgICAgICAgICAgICAgICBtb2R1bGUgPSBwYXJhbXNbJ21vZHVsZSddCiAgICAgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZHVsZSkKICAgICAgICAgICAgICAgIGN1cnJlbnRfbW9kdWxlID0gc3lzLm1vZHVsZXNbbW9kdWxlXQogICAgICAgICAgICAgICAgY3VycmVudF9tb2R1bGUucnVuKHBhcmFtcykKICAgICAgICAgICAgZWxpZiAnYWN0aW9uJyBpbiBwYXJhbXMgYW5kIHBhcmFtc1snYWN0aW9uJ10gPT0gJ3BsYXknOgogICAgICAgICAgICAgICAgYWNjb3VudF9uYW1lID0gdXJsbGliLnVucXVvdGUoIHBhcmFtcy5nZXQoJ2FjY291bnQnLCAnJykgKS5kZWNvZGUoInV0Zi04IikKICAgICAgICAgICAgICAgIGFjY291bnRfc2V0dGluZ3MgPSBsb2dpbi5nZXRfYWNjb3VudChhY2NvdW50X25hbWUpIAogICAgICAgICAgICAgICAgaWYgYWNjb3VudF9zZXR0aW5nczoKICAgICAgICAgICAgICAgICAgICBjbGllbnQgPSBYQk1DRHJvcEJveENsaWVudChhY2Nlc3NfdG9rZW49YWNjb3VudF9zZXR0aW5ncy5hY2Nlc3NfdG9rZW4pCiAgICAgICAgICAgICAgICAgICAgaXRlbSA9IHVybGxpYi51bnF1b3RlKCB1cmxsaWIudW5xdW90ZSggcGFyYW1zWydwYXRoJ10gKSApLmRlY29kZSgidXRmLTgiKQogICAgICAgICAgICAgICAgICAgIHVybCA9IGNsaWVudC5nZXRNZWRpYVVybChpdGVtKQogICAgICAgICAgICAgICAgICAgIGxvZ19kZWJ1ZygnTWVkaWFVcmw6ICVzJyV1cmwpCiAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW0gPSB4Ym1jZ3VpLkxpc3RJdGVtKGl0ZW0pCiAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW0uc2VsZWN0KFRydWUpCiAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW0uc2V0UGF0aCh1cmwpCiAgICAgICAgICAgICAgICAgICAgeGJtY3BsdWdpbi5zZXRSZXNvbHZlZFVybChoYW5kbGU9aW50KHN5cy5hcmd2WzFdKSwgc3VjY2VlZGVkPVRydWUsIGxpc3RpdGVtPWxpc3RJdGVtKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBsb2dfZXJyb3IoIkFjdGlvbiBwbGF5OiBubyBhY2NvdW50IG5hbWUgcHJvdmlkZWQhIikKICAgICAgICAgICAgICAgICAgICB4Ym1jcGx1Z2luLmVuZE9mRGlyZWN0b3J5KGludChzeXMuYXJndlsxXSksIHN1Y2NlZWRlZD1GYWxzZSkKICAgICAgICAgICAgZWxzZTogIyBObyBtb2R1bGUgY2hvc2VuCiAgICAgICAgICAgICAgICAjUnVuIHRoZSBicm93c2VfZm9sZGVyIG1vZHVsZQogICAgICAgICAgICAgICAgbW9kdWxlID0gJ2Jyb3dzZV9hY2NvdW50JwogICAgICAgICAgICAgICAgcGFyYW1zWydtb2R1bGUnXSA9IG1vZHVsZQogICAgICAgICAgICAgICAgX19pbXBvcnRfXyhtb2R1bGUpCiAgICAgICAgICAgICAgICBjdXJyZW50X21vZHVsZSA9IHN5cy5tb2R1bGVzW21vZHVsZV0KICAgICAgICAgICAgICAgIGN1cnJlbnRfbW9kdWxlLnJ1bihwYXJhbXMpCiAgICBlbHNlOiAjIHJ1biBhcyBzY3JpcHQKICAgICAgICBhY2NvdW50X25hbWUgPSB1cmxsaWIudW5xdW90ZSggcGFyYW1zLmdldCgnYWNjb3VudCcsICcnKSApLmRlY29kZSgidXRmLTgiKQogICAgICAgIGFjY291bnRfc2V0dGluZ3MgPSBsb2dpbi5nZXRfYWNjb3VudChhY2NvdW50X25hbWUpIAogICAgICAgIGlmIGFjY291bnRfc2V0dGluZ3M6CiAgICAgICAgICAgICNBbGwgYWN0aW9ucyBiZWxvdyByZXF1aXJlIGFuIFhCTUNEcm9wQm94Q2xpZW50CiAgICAgICAgICAgIGNsaWVudCA9IFhCTUNEcm9wQm94Q2xpZW50KGFjY2Vzc190b2tlbj1hY2NvdW50X3NldHRpbmdzLmFjY2Vzc190b2tlbikKICAgICAgICAgICAgYWN0aW9uID0gcGFyYW1zLmdldCgnYWN0aW9uJywgJycpCiAgICAgICAgICAgIGlmIGFjdGlvbiA9PSAnZGVsZXRlJzoKICAgICAgICAgICAgICAgIGlmICdwYXRoJyBpbiBwYXJhbXM6CiAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHVybGxpYi51bnF1b3RlKCBwYXJhbXNbJ3BhdGgnXSApLmRlY29kZSgidXRmLTgiKQogICAgICAgICAgICAgICAgICAgIGRpYWxvZyA9IHhibWNndWkuRGlhbG9nKCkKICAgICAgICAgICAgICAgICAgICBpZiBkaWFsb2cueWVzbm8oQURET05fTkFNRSwgTEFOR1VBR0VfU1RSSU5HKDMwMDIzKSwgcGF0aCApID09IFRydWU6CiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBjbGllbnQuZGVsZXRlKHBhdGgpCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN1Y2Nlc3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coJ0ZpbGUgcmVtb3ZlZDogJXMnICUgcGF0aCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmeVN5bmNDbGllbnQoKS5zeW5jX3BhdGgoYWNjb3VudF9zZXR0aW5ncywgcGF0aCkKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ19lcnJvcignRmlsZSByZW1vdmVkIEZhaWxlZDogJXMnICUgcGF0aCkKICAgICAgICAgICAgICAgICAgICAgICAgeGJtYy5leGVjdXRlYnVpbHRpbignY29udGFpbmVyLlJlZnJlc2goKScpCiAgICAgICAgICAgIGVsaWYgYWN0aW9uID09ICdjb3B5JzoKICAgICAgICAgICAgICAgIGlmICdwYXRoJyBpbiBwYXJhbXM6CiAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHVybGxpYi51bnF1b3RlKCBwYXJhbXNbJ3BhdGgnXSApLmRlY29kZSgidXRmLTgiKQogICAgICAgICAgICAgICAgICAgIGRpYWxvZyA9IERyb3Bib3hGaWxlQnJvd3NlcigiRmlsZUJyb3dzZXIueG1sIiwgQURET05fUEFUSCkKICAgICAgICAgICAgICAgICAgICBkaWFsb2cuc2V0REJDbGllbnQoY2xpZW50KQogICAgICAgICAgICAgICAgICAgIGRpYWxvZy5zZXRIZWFkaW5nKExBTkdVQUdFX1NUUklORygzMDAyNSkgKyBMQU5HVUFHRV9TVFJJTkcoMzAwMjYpKQogICAgICAgICAgICAgICAgICAgIGRpYWxvZy5kb01vZGFsKCkKICAgICAgICAgICAgICAgICAgICBpZiBkaWFsb2cuc2VsZWN0ZWRGb2xkZXI6CiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wYm94IHBhdGggLT4gZG9uJ3QgdXNlIG9zLnBhdGguam9pbigpIQogICAgICAgICAgICAgICAgICAgICAgICB0b1BhdGggPSBkaWFsb2cuc2VsZWN0ZWRGb2xkZXIKICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGlhbG9nLnNlbGVjdGVkRm9sZGVyWy0xOl0gIT0gRFJPUEJPWF9TRVA6IHRvUGF0aCArPSBEUk9QQk9YX1NFUAogICAgICAgICAgICAgICAgICAgICAgICB0b1BhdGggKz0gb3MucGF0aC5iYXNlbmFtZShwYXRoKQogICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gY2xpZW50LmNvcHkocGF0aCwgdG9QYXRoKQogICAgICAgICAgICAgICAgICAgICAgICBpZiBzdWNjZXNzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCdGaWxlIGNvcGllZDogJXMgdG8gJXMnICUgKHBhdGgsIHRvUGF0aCkgKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmeVN5bmNDbGllbnQoKS5zeW5jX3BhdGgoYWNjb3VudF9zZXR0aW5ncywgdG9QYXRoKQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nX2Vycm9yKCdGaWxlIGNvcHkgRmFpbGVkOiAlcyB0byAlcycgJSAocGF0aCwgdG9QYXRoKSApCiAgICAgICAgICAgICAgICAgICAgZGVsIGRpYWxvZwogICAgICAgICAgICBlbGlmIGFjdGlvbiA9PSAnbW92ZSc6CiAgICAgICAgICAgICAgICBpZiAncGF0aCcgaW4gcGFyYW1zOgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgICAgICBkaWFsb2cuZG9Nb2RhbCgpCiAgICAgICAgICAgICAgICAgICAgaWYgZGlhbG9nLnNlbGVjdGVkRm9sZGVyOgogICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGJveCBwYXRoIC0+IGRvbid0IHVzZSBvcy5wYXRoLmpvaW4oKSEKICAgICAgICAgICAgICAgICAgICAgICAgdG9QYXRoID0gZGlhbG9nLnNlbGVjdGVkRm9sZGVyCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRpYWxvZy5zZWxlY3RlZEZvbGRlclstMTpdICE9IERST1BCT1hfU0VQOiB0b1BhdGggKz0gRFJPUEJPWF9TRVAKICAgICAgICAgICAgICAgICAgICAgICAgdG9QYXRoICs9IG9zLnBhdGguYmFzZW5hbWUocGF0aCkKICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGNsaWVudC5tb3ZlKHBhdGgsIHRvUGF0aCkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3VjY2VzczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygnRmlsZSBtb3ZlZDogZnJvbSAlcyB0byAlcycgJSAocGF0aCwgdG9QYXRoKSApIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeGJtYy5leGVjdXRlYnVpbHRpbignY29udGFpbmVyLlJlZnJlc2goKScpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RpZnlTeW5jQ2xpZW50KCkuc3luY19wYXRoKGFjY291bnRfc2V0dGluZ3MsIHBhdGgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RpZnlTeW5jQ2xpZW50KCkuc3luY19wYXRoKGFjY291bnRfc2V0dGluZ3MsIHRvUGF0aCkKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ19lcnJvcignRmlsZSBtb3ZlIEZhaWxlZDogZnJvbSAlcyB0byAlcycgJSAocGF0aCwgdG9QYXRoKSApCiAgICAgICAgICAgICAgICAgICAgZGVsIGRpYWxvZwogICAgICAgICAgICBlbGlmIGFjdGlvbiA9PSAnY3JlYXRlX2ZvbGRlcic6CiAgICAgICAgICAgICAgICBpZiAncGF0aCcgaW4gcGFyYW1zOgogICAgICAgICAgICAgICAgICAgIHBhdGggPSB1cmxsaWIudW5xdW90ZSggcGFyYW1zWydwYXRoJ10gKS5kZWNvZGUoInV0Zi04IikKICAgICAgICAgICAgICAgICAgICBrZXlib2FyZCA9IHhibWMuS2V5Ym9hcmQoJycsIExBTkdVQUdFX1NUUklORygzMDAzMCkpCiAgICAgICAgICAgICAgICAgICAga2V5Ym9hcmQuZG9Nb2RhbCgpCiAgICAgICAgICAgICAgICAgICAgaWYga2V5Ym9hcmQuaXNDb25maXJtZWQoKToKICAgICAgICAgICAgICAgICAgICAgICAgbmV3Rm9sZGVyID0gcGF0aAogICAgICAgICAgICAgICAgICAgICAgICBpZiBwYXRoWy0xOl0gIT0gRFJPUEJPWF9TRVA6IG5ld0ZvbGRlciArPSBEUk9QQk9YX1NFUAogICAgICAgICAgICAgICAgICAgICAgICBuZXdGb2xkZXIgKz0gdW5pY29kZShrZXlib2FyZC5nZXRUZXh0KCksICJ1dGYtOCIpCiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBjbGllbnQuY3JlYXRlRm9sZGVyKG5ld0ZvbGRlcikKICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3VjY2VzczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygnTmV3IGZvbGRlciBjcmVhdGVkOiAlcycgJSBuZXdGb2xkZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Ym1jLmV4ZWN1dGVidWlsdGluKCdjb250YWluZXIuUmVmcmVzaCgpJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmeVN5bmNDbGllbnQoKS5zeW5jX3BhdGgoYWNjb3VudF9zZXR0aW5ncywgbmV3Rm9sZGVyKQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nX2Vycm9yKCdDcmVhdGluZyBuZXcgZm9sZGVyIEZhaWxlZDogJXMnICUgbmV3Rm9sZGVyKQogICAgICAgICAgICBlbGlmIGFjdGlvbiA9PSAndXBsb2FkJzoKICAgICAgICAgICAgICAgIGlmICd0b19wYXRoJyBpbiBwYXJhbXM6CiAgICAgICAgICAgICAgICAgICAgdG9QYXRoID0gdXJsbGliLnVucXVvdGUoIHBhcmFtc1sndG9fcGF0aCddICkuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICAgICAgICAgZGlhbG9nID0geGJtY2d1aS5EaWFsb2coKQogICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gZGlhbG9nLmJyb3dzZSgxLCBMQU5HVUFHRV9TVFJJTkcoMzAwMzIpLCAnZmlsZXMnKS5kZWNvZGUoInV0Zi04IikKICAgICAgICAgICAgICAgICAgICBpZiBmaWxlTmFtZToKICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGNsaWVudC51cGxvYWQoZmlsZU5hbWUsIHRvUGF0aCwgZGlhbG9nPVRydWUpCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN1Y2Nlc3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coJ0ZpbGUgdXBsb2FkZWQ6ICVzIHRvICVzJyAlIChmaWxlTmFtZSwgdG9QYXRoKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Ym1jLmV4ZWN1dGVidWlsdGluKCdjb250YWluZXIuUmVmcmVzaCgpJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmeVN5bmNDbGllbnQoKS5zeW5jX3BhdGgoYWNjb3VudF9zZXR0aW5ncywgdG9QYXRoKQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nX2Vycm9yKCdGaWxlIHVwbG9hZGluZyBGYWlsZWQ6ICVzIHRvICVzJyAlIChmaWxlTmFtZSwgdG9QYXRoKSkKICAgICAgICAgICAgZWxpZiBhY3Rpb24gPT0gJ2Rvd25sb2FkJzoKICAgICAgICAgICAgICAgIGlmICdwYXRoJyBpbiBwYXJhbXM6CiAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHVybGxpYi51bnF1b3RlKCBwYXJhbXNbJ3BhdGgnXSApLmRlY29kZSgidXRmLTgiKQogICAgICAgICAgICAgICAgICAgIGlzRGlyID0gKCd0cnVlJyA9PSBwYXJhbXNbJ2lzRGlyJ10ubG93ZXIoKSkKICAgICAgICAgICAgICAgICAgICBkaWFsb2cgPSB4Ym1jZ3VpLkRpYWxvZygpCiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBkaWFsb2cuYnJvd3NlKDMsIExBTkdVQUdFX1NUUklORygzMDAyNSkgKyBMQU5HVUFHRV9TVFJJTkcoMzAwMzgpLCAnZmlsZXMnKS5kZWNvZGUoInV0Zi04IikKICAgICAgICAgICAgICAgICAgICBpZiBsb2NhdGlvbjoKICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFRydWUKICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRlciA9IERvd25sb2FkZXIoY2xpZW50LCBwYXRoLCBsb2NhdGlvbiwgaXNEaXIpCiAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkZXIuc3RhcnQoKQogICAgICAgICAgICAgICAgICAgICAgICAjbm93IHdhaXQgZm9yIHRoZSBGaWxlTG9hZGVyCiAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkZXIuc3RvcFdoZW5GaW5pc2hlZCA9IFRydWUKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgZG93bmxvYWRlci5pc0FsaXZlKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Ym1jLnNsZWVwKDEwMCkKICAgICAgICAgICAgICAgICAgICAgICAgI1dhaXQgZm9yIHRoZSB0aHJlYWQKICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRlci5qb2luKCkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgZG93bmxvYWRlci5jYW5jZWxlZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygnRG93bmxvYWRpbmcgY2FuY2VsZWQnKQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCdEb3dubG9hZGluZyBmaW5pc2hlZCcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2cgPSB4Ym1jZ3VpLkRpYWxvZygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2cub2soQURET05fTkFNRSwgTEFOR1VBR0VfU1RSSU5HKDMwMDQwKSwgbG9jYXRpb24pCiAgICAgICAgICAgIGVsaWYgYWN0aW9uID09ICdzeW5jX25vdyc6CiAgICAgICAgICAgICAgICBwYXRoID0gdXJsbGliLnVucXVvdGUoIHBhcmFtc1sncGF0aCddICkuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICAgICBOb3RpZnlTeW5jQ2xpZW50KCkuc3luY19wYXRoKGFjY291bnRfc2V0dGluZ3MsIHBhdGgpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBsb2dfZXJyb3IoJ1Vua25vd24gYWN0aW9uIHJlY2VpdmVkOiAlcycgJSAoYWN0aW9uKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBsb2dfZXJyb3IoIlJ1biBhcyBzY3JpcHQ6IG5vIGFjY291bnQgbmFtZSBwcm92aWRlZCEiKQogICAgICAgICAgICBkaWFsb2cgPSB4Ym1jZ3VpLkRpYWxvZygpCiAgICAgICAgICAgIGRpYWxvZy5vayhBRERPTl9OQU1FLCBMQU5HVUFHRV9TVFJJTkcoMzAyMDMpKQogICAgICAgICAgICAjc2NyaXB0IFNvIHN5cy5hcmd2WzFdIGlkIG5vdCBhIGhhbmRsZS4uLiBEb24ndCBleGVjdXRlIHRoZSBuZXh0IQogICAgICAgICAgICAjeGJtY3BsdWdpbi5lbmRPZkRpcmVjdG9yeShpbnQoc3lzLmFyZ3ZbMV0pLCBzdWNjZWVkZWQ9RmFsc2UpCgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgIHBhdGggPSB1cmxsaWIudW5xdW90ZSggcGFyYW1zWydwYXRoJ10gKS5kZWNvZGUoInV0Zi04IikKICAgICAgICAgICAgICAgICAgICBkaWFsb2cgPSBEcm9wYm94RmlsZUJyb3dzZXIoIkZpbGVCcm93c2VyLnhtbCIsIEFERE9OX1BBVEgpCiAgICAgICAgICAgICAgICAgICAgZGlhbG9nLnNldERCQ2xpZW50KGNsaWVudCkKICAgICAgICAgICAgICAgICAgICBkaWFsb2cuc2V0SGVhZGluZyhMQU5HVUFHRV9TVFJJTkcoMzAwMjUpICsgTEFOR1VBR0VfU1RSSU5HKDMwMDI4KSkKPHxmaW1fZW5kfD4="]
["c19afc9d8a75ba858e309d3ffa008e19db27ab2a-1","c19afc9d8a75ba858e309d3ffa008e19db27ab2a","PHxmaW1fcHJlZml4fD4KJycnCkNyZWF0ZWQgb24gMjAxNS0xMC0yMgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpAYXV0aG9yOiBNUQonJycKPHxmaW1fZW5kfD4="]
["c12ece64b9228eb08470a5955e9624e0b7cf23c4-1","c12ece64b9228eb08470a5955e9624e0b7cf23c4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN0cnVjdAppbXBvcnQgc3lzCgo8fGZpbV9ob2xlfD4KCmZyb20gICAuYmluYXJ5MmFzY2lpZmlsZSAgICAgICAgICAgICAgICBpbXBvcnQgKgpmcm9tICAgLnRlY3Bsb3Quem9uZSAgICAgICAgICAgICAgICAgICAgaW1wb3J0ICoKZnJvbSAgIC50ZWNwbG90LmJpbmFyeSAgICAgICAgICAgICAgICAgIGltcG9ydCAqCmZyb20gICAudGVjcGxvdC5iaW5hcnkuZmlsZXN0cnVjdHVyZSAgICBpbXBvcnQgKgoKCmRlZiBMb2FkVGVjcGxvdEZpbGUoZmlsZW5hbWUsIG1vZGUgPSAnYmluYXJ5JywgaW5mbyA9IEZhbHNlKTogCgoJaWYgICBtb2RlLmxvd2VyKCkgPT0gJ2JpbmFyeSc6IG91dCA9ICBGaWxlU3RydWN0dXJlKGZpbGVuYW1lKQoJZWxpZiBtb2RlLmxvd2VyKCkgPT0gJ2FzY2lpJyA6IHByaW50KCJDYW5ub3QgcmVhZCBhc2NpaSBmaWxlcyBhdCB0aGUgbW9tZW50LiIpOyBzeXMuZXhpdCgtMSkgCgllbHNlICAgICAgICAgICAgICAgICAgICAgICAgIDogcHJpbnQoIkluY29ycmVjdCB2YWx1ZSBvZiBtb2RlIGFyZ3VtZW50IHt9Ii5mb3JtYXQobW9kZSkpCgoKCWlmIGluZm86IHByaW50KG91dCkKCglyZXR1cm4gb3V0CgoKCjx8ZmltX3N1ZmZpeHw+CiNmcm9tICAgbXlpby5iaW5hcnl0ZWNwbG90LmJpbmFyeTJhc2NpaWZpbGUgICAgICAgICAgICAgICAgaW1wb3J0ICoKI2Zyb20gICBteWlvLmJpbmFyeXRlY3Bsb3QudGVjcGxvdC56b25lICAgICAgICAgICAgICAgICAgICBpbXBvcnQgKgojZnJvbSAgIG15aW8uYmluYXJ5dGVjcGxvdC50ZWNwbG90LmJpbmFyeSAgICAgICAgICAgICAgICAgIGltcG9ydCAqCiNmcm9tICAgbXlpby5iaW5hcnl0ZWNwbG90LnRlY3Bsb3QuYmluYXJ5LmZpbGVzdHJ1Y3R1cmUgICAgaW1wb3J0ICoKPHxmaW1fZW5kfD4="]
["c12ece64b9228eb08470a5955e9624e0b7cf23c4-2","c12ece64b9228eb08470a5955e9624e0b7cf23c4","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IHN0cnVjdAppbXBvcnQgc3lzCgojZnJvbSAgIG15aW8uYmluYXJ5dGVjcGxvdC5iaW5hcnkyYXNjaWlmaWxlICAgICAgICAgICAgICAgIGltcG9ydCAqCjx8ZmltX2VuZHw+"]
["c12ece64b9228eb08470a5955e9624e0b7cf23c4-3","c12ece64b9228eb08470a5955e9624e0b7cf23c4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN0cnVjdAppbXBvcnQgc3lzCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiNmcm9tICAgbXlpby5iaW5hcnl0ZWNwbG90LmJpbmFyeTJhc2NpaWZpbGUgICAgICAgICAgICAgICAgaW1wb3J0ICoKI2Zyb20gICBteWlvLmJpbmFyeXRlY3Bsb3QudGVjcGxvdC56b25lICAgICAgICAgICAgICAgICAgICBpbXBvcnQgKgojZnJvbSAgIG15aW8uYmluYXJ5dGVjcGxvdC50ZWNwbG90LmJpbmFyeSAgICAgICAgICAgICAgICAgIGltcG9ydCAqCiNmcm9tICAgbXlpby5iaW5hcnl0ZWNwbG90LnRlY3Bsb3QuYmluYXJ5LmZpbGVzdHJ1Y3R1cmUgICAgaW1wb3J0ICoKPHxmaW1fZW5kfD4="]
["c12ece64b9228eb08470a5955e9624e0b7cf23c4-4","c12ece64b9228eb08470a5955e9624e0b7cf23c4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN0cnVjdAo8fGZpbV9ob2xlfD4KI2Zyb20gICBteWlvLmJpbmFyeXRlY3Bsb3QudGVjcGxvdC5iaW5hcnkgICAgICAgICAgICAgICAgICBpbXBvcnQgKgojZnJvbSAgIG15aW8uYmluYXJ5dGVjcGxvdC50ZWNwbG90LmJpbmFyeS5maWxlc3RydWN0dXJlICAgIGltcG9ydCAqCgpmcm9tICAgLmJpbmFyeTJhc2NpaWZpbGUgICAgICAgICAgICAgICAgaW1wb3J0ICoKZnJvbSAgIC50ZWNwbG90LnpvbmUgICAgICAgICAgICAgICAgICAgIGltcG9ydCAqCmZyb20gICAudGVjcGxvdC5iaW5hcnkgICAgICAgICAgICAgICAgICBpbXBvcnQgKgpmcm9tICAgLnRlY3Bsb3QuYmluYXJ5LmZpbGVzdHJ1Y3R1cmUgICAgaW1wb3J0ICoKCgpkZWYgTG9hZFRlY3Bsb3RGaWxlKGZpbGVuYW1lLCBtb2RlID0gJ2JpbmFyeScsIGluZm8gPSBGYWxzZSk6IAoKCWlmICAgbW9kZS5sb3dlcigpID09ICdiaW5hcnknOiBvdXQgPSAgRmlsZVN0cnVjdHVyZShmaWxlbmFtZSkKCWVsaWYgbW9kZS5sb3dlcigpID09ICdhc2NpaScgOiBwcmludCgiQ2Fubm90IHJlYWQgYXNjaWkgZmlsZXMgYXQgdGhlIG1vbWVudC4iKTsgc3lzLmV4aXQoLTEpIAoJZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICA6IHByaW50KCJJbmNvcnJlY3QgdmFsdWUgb2YgbW9kZSBhcmd1bWVudCB7fSIuZm9ybWF0KG1vZGUpKQoKCglpZiBpbmZvOiBwcmludChvdXQpCgoJcmV0dXJuIG91dAoKCgo8fGZpbV9zdWZmaXh8PgppbXBvcnQgc3lzCgojZnJvbSAgIG15aW8uYmluYXJ5dGVjcGxvdC5iaW5hcnkyYXNjaWlmaWxlICAgICAgICAgICAgICAgIGltcG9ydCAqCiNmcm9tICAgbXlpby5iaW5hcnl0ZWNwbG90LnRlY3Bsb3Quem9uZSAgICAgICAgICAgICAgICAgICAgaW1wb3J0ICoKPHxmaW1fZW5kfD4="]
["c12708ba869ed509345514c9387388a829535217-1","c12708ba869ed509345514c9387388a829535217","PHxmaW1fcHJlZml4fD4KIyBodHRwczovL2xlZXRjb2RlLmNvbS9wcm9ibGVtcy9jb3VudC1zb3J0ZWQtdm93ZWwtc3RyaW5ncy8KCmNsYXNzIFNvbHV0aW9uOgogICAgZGVmIGNvdW50Vm93ZWxTdHJpbmdzKHNlbGYsIG46IGludCkgLT4gaW50OgogICAgICAgIHJldHVybiBzZWxmLmNvdW50KDAsIG4pCgogICAgZGVmIGNvdW50KHNlbGYsIHYsIG4sIG1lbW89e30pOgogICAgICAgICIiIgogICAgICAgIHYg5oyH55qE5piv5omA5pyJ5a2X5q+N5b+F6aG7562J5LqO5YW25oiW5Zyo5YW25LmL5ZCO77yMdiDmmK/kuIDkuKrmlbDlrZfvvIzmr5TlpoIgYT0w77yMZT0x77yMLi4uCiAgICAgICAgbiDmjIfnmoTmmK/mnInlh6DkvY0KICAgICAgICAiIiIKICAgICAgICBpZiBmJ3t2fTp7bn0nIGluIG1lbW86CiAgICAgICAgICAgIHJldHVybiBtZW1vW2Yne3Z9OntufSddCiAgICAgICAgaWYgbiA9PSAxOgogICAgICAgICAgICByZXMgPSA1IC0gdgogICAgICAgIGVsaWYgbiA+IDE6CiAgICAgICAgICAgIHJlcyA9IHN1bShbc2VsZi5jb3VudChfdiwgbiAtIDEpIGZvciBfdiBpbiByYW5nZSh2LCA1KV0pCiAgICAgICAgbWVtb1tmJ3t2fTp7bn0nXSA9IHJlcwo8fGZpbV9ob2xlfD4KcyA9IFNvbHV0aW9uKCkKcHJpbnQocy5jb3VudFZvd2VsU3RyaW5ncygxKSkgICMgNQpwcmludChzLmNvdW50Vm93ZWxTdHJpbmdzKDIpKSAgIyAxNQpwcmludChzLmNvdW50Vm93ZWxTdHJpbmdzKDMpKSAgIyAzNQpwcmludChzLmNvdW50Vm93ZWxTdHJpbmdzKDMzKSkgICMgNjYwNDUKPHxmaW1fc3VmZml4fD4KICAgICAgICByZXR1cm4gcmVzCgo8fGZpbV9lbmR8Pg=="]
["c12708ba869ed509345514c9387388a829535217-2","c12708ba869ed509345514c9387388a829535217","PHxmaW1fcHJlZml4fD4KIyBodHRwczovL2xlZXRjb2RlLmNvbS9wcm9ibGVtcy9jb3VudC1zb3J0ZWQtdm93ZWwtc3RyaW5ncy8KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgU29sdXRpb246CiAgICBkZWYgY291bnRWb3dlbFN0cmluZ3Moc2VsZiwgbjogaW50KSAtPiBpbnQ6CiAgICAgICAgcmV0dXJuIHNlbGYuY291bnQoMCwgbikKPHxmaW1fZW5kfD4="]
["dad5764e150372c1e74211420378846f3c79732a-1","dad5764e150372c1e74211420378846f3c79732a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgpfX2F1dGhvcl9fID0gJ2h6c3Vuc2h4JwoKI2ltcG9ydCBudW1weSBhcyBucAppbXBvcnQgY3YyCiNmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHB5cGxvdCBhcyBwbHQKCgpNSU5fTUFUQ0hfQ09VTlQgPSA4CgpkZWYgX21pZGRsZVBvaW50KHB0cyk6CiAgICBkZWYgYWRkKHAxLCBwMik6CiAgICAgICAgcmV0dXJuIChwMVswXStwMlswXSwgcDFbMV0rcDJbMV0pCiAgICBkZWYgZGlzdGFuY2UocDEsIHAyKToKICAgICAgICBpbXBvcnQgbWF0aAogICAgICAgIGwyID0gKHAxWzBdLXAyWzBdKSoocDFbMF0tcDJbMF0pICsgKHAxWzFdLXAyWzFdKSoocDFbMV0tcDJbMV0pCiAgICAgICAgcmV0dXJuIG1hdGguc3FydChsMikKICAgICMgZGVidWcKICAgIGZvciBwIGluIHB0czoKICAgICAgICBwcmludCAnUG9pbnQ6JywgcC5wdAogICAgbGVuZ3RoID0gbGVuKHB0cykKICAgIHN1bXgsIHN1bXkgPSByZWR1Y2UoYWRkLCBbcC5wdCBmb3IgcCBpbiBwdHNdKQogICAgcG9pbnQgPSBzdW14L2xlbmd0aCwgc3VteS9sZW5ndGgKICAgIHByaW50ICdzdGVwMTogcmVzdWx0PScsIHBvaW50CgogICAgIyBmaWx0ZXIgb3V0IG9rIHBvaW50cwogICAgYXZnX2Rpc3RhbmNlID0gc3VtKFtkaXN0YW5jZShwb2ludCwgcC5wdCkgZm9yIHAgaW4gcHRzXSkvbGVuZ3RoCiAgICBwcmludCAnYXZnIGRpc3RhbmNlPScsIGF2Z19kaXN0YW5jZQogICAgZ29vZCA9IFtdCiAgICBzdW14LCBzdW15ID0gMC4wLCAwLjAKICAgIGZvciBwIGluIHB0czoKICAgICAgICBwcmludCAncG9pbnQ6ICVzLCBkaXN0YW5jZTogJS4yZicgJShwLnB0LCBkaXN0YW5jZShwLnB0LCBwb2ludCkpCiAgICAgICAgaWYgZGlzdGFuY2UocC5wdCwgcG9pbnQpIDwgMS4yKmF2Z19kaXN0YW5jZToKICAgICAgICAgICAgZ29vZC5hcHBlbmQocC5wdCkKICAgICAgICAgICAgc3VteCArPSBwLnB0WzBdCiAgICAgICAgICAgIHN1bXkgKz0gcC5wdFsxXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50ICdub3QgZ29vZCcsIHAucHQKICAgIHByaW50ICdzdGVwMTogcmVzdWx0PScsIHBvaW50CiAgICBwb2ludCA9IG1hcChsb25nLCAoc3VteC9sZW4oZ29vZCksIHN1bXkvbGVuKGdvb2QpKSkKICAgIHByaW50ICdzdGVwMjogcG9pbnQ9JywgcG9pbnQKICAgIHJldHVybiBwb2ludAoKZGVmIGZpbmRfaW1hZ2VfcG9zaXRpb24ob3JpZ2luPSdvcmlnaW4ucG5nJywgcXVlcnk9J3F1ZXJ5LnBuZycsIG91dGZpbGU9Tm9uZSk6CiAgICAnJycKICAgIGZpbmQgYWxsIGltYWdlIHBvc2l0aW9ucwogICAgQHJldHVybiBOb25lIGlmIG5vdCBmb3VuZCBlbHNlIGEgdHVwbGU6IChvcmlnaW4uc2hhcGUsIHF1ZXJ5LnNoYXBlLCBwb3N0aW9ucykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgbWlnaHQgcmFpc2UgRXhjZXB0aW9uCiAgICAnJycKICAgIGltZzEgPSBjdjIuaW1yZWFkKHF1ZXJ5LCAwKSAjIHF1ZXJ5IGltYWdlKHNtYWxsKQogICAgaW1nMiA9IGN2Mi5pbXJlYWQob3JpZ2luLCAwKSAjIHRyYWluIGltYWdlKGJpZykKPHxmaW1fZW5kfD4="]
["dad5764e150372c1e74211420378846f3c79732a-2","dad5764e150372c1e74211420378846f3c79732a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgpfX2F1dGhvcl9fID0gJ2h6c3Vuc2h4JwoKI2ltcG9ydCBudW1weSBhcyBucAppbXBvcnQgY3YyCiNmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHB5cGxvdCBhcyBwbHQKCgpNSU5fTUFUQ0hfQ09VTlQgPSA4CgpkZWYgX21pZGRsZVBvaW50KHB0cyk6CiAgICBkZWYgYWRkKHAxLCBwMik6CiAgICAgICAgcmV0dXJuIChwMVswXStwMlswXSwgcDFbMV0rcDJbMV0pCiAgICBkZWYgZGlzdGFuY2UocDEsIHAyKToKICAgICAgICBpbXBvcnQgbWF0aAogICAgICAgIGwyID0gKHAxWzBdLXAyWzBdKSoocDFbMF0tcDJbMF0pICsgKHAxWzFdLXAyWzFdKSoocDFbMV0tcDJbMV0pCiAgICAgICAgcmV0dXJuIG1hdGguc3FydChsMikKICAgICMgZGVidWcKICAgIGZvciBwIGluIHB0czoKICAgICAgICBwcmludCAnUG9pbnQ6JywgcC5wdAogICAgbGVuZ3RoID0gbGVuKHB0cykKICAgIHN1bXgsIHN1bXkgPSByZWR1Y2UoYWRkLCBbcC5wdCBmb3IgcCBpbiBwdHNdKQogICAgcG9pbnQgPSBzdW14L2xlbmd0aCwgc3VteS9sZW5ndGgKICAgIHByaW50ICdzdGVwMTogcmVzdWx0PScsIHBvaW50CgogICAgIyBmaWx0ZXIgb3V0IG9rIHBvaW50cwogICAgYXZnX2Rpc3RhbmNlID0gc3VtKFtkaXN0YW5jZShwb2ludCwgcC5wdCkgZm9yIHAgaW4gcHRzXSkvbGVuZ3RoCiAgICBwcmludCAnYXZnIGRpc3RhbmNlPScsIGF2Z19kaXN0YW5jZQogICAgZ29vZCA9IFtdCiAgICBzdW14LCBzdW15ID0gMC4wLCAwLjAKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZm9yIHAgaW4gcHRzOgogICAgICAgIHByaW50ICdwb2ludDogJXMsIGRpc3RhbmNlOiAlLjJmJyAlKHAucHQsIGRpc3RhbmNlKHAucHQsIHBvaW50KSkKICAgICAgICBpZiBkaXN0YW5jZShwLnB0LCBwb2ludCkgPCAxLjIqYXZnX2Rpc3RhbmNlOgogICAgICAgICAgICBnb29kLmFwcGVuZChwLnB0KQo8fGZpbV9lbmR8Pg=="]
["dad5764e150372c1e74211420378846f3c79732a-3","dad5764e150372c1e74211420378846f3c79732a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgpfX2F1dGhvcl9fID0gJ2h6c3Vuc2h4JwoKI2ltcG9ydCBudW1weSBhcyBucAppbXBvcnQgY3YyCiNmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHB5cGxvdCBhcyBwbHQKCgpNSU5fTUFUQ0hfQ09VTlQgPSA4CgpkZWYgX21pZGRsZVBvaW50KHB0cyk6CiAgICBkZWYgYWRkKHAxLCBwMik6CiAgICAgICAgcmV0dXJuIChwMVswXStwMlswXSwgcDFbMV0rcDJbMV0pCiAgICBkZWYgZGlzdGFuY2UocDEsIHAyKToKICAgICAgICBpbXBvcnQgbWF0aAogICAgICAgIGwyID0gKHAxWzBdLXAyWzBdKSoocDFbMF0tcDJbMF0pICsgKHAxWzFdLXAyWzFdKSoocDFbMV0tcDJbMV0pCiAgICAgICAgcmV0dXJuIG1hdGguc3FydChsMikKICAgICMgZGVidWcKICAgIGZvciBwIGluIHB0czoKICAgICAgICBwcmludCAnUG9pbnQ6JywgcC5wdAogICAgbGVuZ3RoID0gbGVuKHB0cykKICAgIHN1bXgsIHN1bXkgPSByZWR1Y2UoYWRkLCBbcC5wdCBmb3IgcCBpbiBwdHNdKQogICAgcG9pbnQgPSBzdW14L2xlbmd0aCwgc3VteS9sZW5ndGgKICAgIHByaW50ICdzdGVwMTogcmVzdWx0PScsIHBvaW50CgogICAgIyBmaWx0ZXIgb3V0IG9rIHBvaW50cwogICAgYXZnX2Rpc3RhbmNlID0gc3VtKFtkaXN0YW5jZShwb2ludCwgcC5wdCkgZm9yIHAgaW4gcHRzXSkvbGVuZ3RoCiAgICBwcmludCAnYXZnIGRpc3RhbmNlPScsIGF2Z19kaXN0YW5jZQogICAgZ29vZCA9IFtdCiAgICBzdW14LCBzdW15ID0gMC4wLCAwLjAKICAgIGZvciBwIGluIHB0czoKICAgICAgICBwcmludCAncG9pbnQ6ICVzLCBkaXN0YW5jZTogJS4yZicgJShwLnB0LCBkaXN0YW5jZShwLnB0LCBwb2ludCkpCiAgICAgICAgaWYgZGlzdGFuY2UocC5wdCwgcG9pbnQpIDwgMS4yKmF2Z19kaXN0YW5jZToKICAgICAgICAgICAgZ29vZC5hcHBlbmQocC5wdCkKICAgICAgICAgICAgc3VteCArPSBwLnB0WzBdCiAgICAgICAgICAgIHN1bXkgKz0gcC5wdFsxXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50ICdub3QgZ29vZCcsIHAucHQKICAgIHByaW50ICdzdGVwMTogcmVzdWx0PScsIHBvaW50CiAgICBwb2ludCA9IG1hcChsb25nLCAoc3VteC9sZW4oZ29vZCksIHN1bXkvbGVuKGdvb2QpKSkKICAgIHByaW50ICdzdGVwMjogcG9pbnQ9JywgcG9pbnQKICAgIHJldHVybiBwb2ludAoKZGVmIGZpbmRfaW1hZ2VfcG9zaXRpb24ob3JpZ2luPSdvcmlnaW4ucG5nJywgcXVlcnk9J3F1ZXJ5LnBuZycsIG91dGZpbGU9Tm9uZSk6CiAgICAnJycKICAgIGZpbmQgYWxsIGltYWdlIHBvc2l0aW9ucwogICAgQHJldHVybiBOb25lIGlmIG5vdCBmb3VuZCBlbHNlIGEgdHVwbGU6IChvcmlnaW4uc2hhcGUsIHF1ZXJ5LnNoYXBlLCBwb3N0aW9ucykKICAgIG1pZ2h0IHJhaXNlIEV4Y2VwdGlvbgogICAgJycnCiAgICBpbWcxID0gY3YyLmltcmVhZChxdWVyeSwgMCkgIyBxdWVyeSBpbWFnZShzbWFsbCkKICAgIGltZzIgPSBjdjIuaW1yZWFkKG9yaWdpbiwgMCkgIyB0cmFpbiBpbWFnZShiaWcpCgogICAgIyBJbml0aWF0ZSBTSUZUIGRldGVjdG9yCiAgICBzaWZ0ID0gY3YyLlNJRlQoKQoKICAgICMgZmluZCB0aGUga2V5cG9pbnRzIGFuZCBkZXNjcmlwdG9ycyB3aXRoIFNJRlQKICAgIGtwMSwgZGVzMSA9IHNpZnQuZGV0ZWN0QW5kQ29tcHV0ZShpbWcxLE5vbmUpCiAgICBrcDIsIGRlczIgPSBzaWZ0LmRldGVjdEFuZENvbXB1dGUoaW1nMixOb25lKQogICAgcHJpbnQgbGVuKGtwMSksIGxlbihrcDIpCgogICAgRkxBTk5fSU5ERVhfS0RUUkVFID0gMAogICAgaW5kZXhfcGFyYW1zID0gZGljdChhbGdvcml0aG0gPSBGTEFOTl9JTkRFWF9LRFRSRUUsIHRyZWVzID0gNSkKICAgIHNlYXJjaF9wYXJhbXMgPSBkaWN0KGNoZWNrcyA9IDUwKQoKICAgICMgZmxhbm4KICAgIGZsYW5uID0gY3YyLkZsYW5uQmFzZWRNYXRjaGVyKGluZGV4X3BhcmFtcywgc2VhcmNoX3BhcmFtcykKICAgIG1hdGNoZXMgPSBmbGFubi5rbm5NYXRjaChkZXMxLCBkZXMyLCBrPTIpCgogICAgIyBzdG9yZSBhbGwgdGhlIGdvb2QgbWF0Y2hlcyBhcyBwZXIgTG93ZSdzIHJhdGlvIHRlc3QuCiAgICBnb29kID0gW10KICAgIGZvciBtLG4gaW4gbWF0Y2hlczoKICAgICAgICBpZiBtLmRpc3RhbmNlIDwgMC43Km4uZGlzdGFuY2U6CiAgICAgICAgICAgIGdvb2QuYXBwZW5kKG0pCiAgICBwcmludCBsZW4oa3AxKSwgbGVuKGtwMiksICdnb29kIGNudDonLCBsZW4oZ29vZCkKCiAgICBpZiBsZW4oZ29vZCkqMS4wL2xlbihrcDEpIDwgMC41OgogICAgI2lmIGxlbihnb29kKTxNSU5fTUFUQ0hfQ09VTlQ6CiAgICAgICAgcHJpbnQgIk5vdCBlbm91Z2ggbWF0Y2hlcyBhcmUgZm91bmQgLSAlZC8lZCIgJSAobGVuKGdvb2QpLE1JTl9NQVRDSF9DT1VOVCkKICAgICAgICByZXR1cm4gaW1nMi5zaGFwZSwgaW1nMS5zaGFwZSwgW10KCiAgICBxdWVyeVB0cyA9IFtdCiAgICB0cmFpblB0cyA9IFtdCiAgICBmb3IgZG0gaW4gZ29vZDoKICAgICAgICBxdWVyeVB0cy5hcHBlbmQoa3AxW2RtLnF1ZXJ5SWR4XSkKICAgICAgICB0cmFpblB0cy5hcHBlbmQoa3AyW2RtLnRyYWluSWR4XSkKCiAgICBpbWczID0gY3YyLmRyYXdLZXlwb2ludHMoaW1nMSwgcXVlcnlQdHMpCiAgICBjdjIuaW13cml0ZSgnaW1hZ2UvcXVlcnkucG5nJywgaW1nMykKCiAgICBpbWczID0gY3YyLmRyYXdLZXlwb2ludHMoaW1nMiwgdHJhaW5QdHMpCiAgICBwb2ludCA9IF9taWRkbGVQb2ludCh0cmFpblB0cykKICAgIHByaW50ICdwb3NpdGlvbiBpbicsIHBvaW50CgogICAgaWYgb3V0ZmlsZToKICAgICAgICBlZGdlID0gMTAKICAgICAgICB0b3BfbGVmdCA9IChwb2ludFswXS1lZGdlLCBwb2ludFsxXS1lZGdlKQogICAgICAgIGJvdHRvbV9yaWdodCA9IChwb2ludFswXStlZGdlLCBwb2ludFsxXStlZGdlKQogICAgICAgIGN2Mi5yZWN0YW5nbGUoaW1nMywgdG9wX2xlZnQsIGJvdHRvbV9yaWdodCwgMjU1LCAyKQogICAgICAgIGN2Mi5pbXdyaXRlKG91dGZpbGUsIGltZzMpCiAgICByZXR1cm4gaW1nMi5zaGFwZSwgaW1nMS5zaGFwZSwgW3BvaW50XQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgcHRzID0gZmluZF9pbWFnZV9wb3NpdGlvbignaW1hZ2UvbXVsZS5wbmcnLCAnaW1hZ2UvdGVtcGxhdGUucG5nJywgCiAgICAgICAgb3V0ZmlsZT0naW1hZ2UvdHJhaW4ucG5nJykKICAgIHByaW50IHB0cwo8fGZpbV9lbmR8Pg=="]
["dad5764e150372c1e74211420378846f3c79732a-4","dad5764e150372c1e74211420378846f3c79732a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgpfX2F1dGhvcl9fID0gJ2h6c3Vuc2h4JwoKI2ltcG9ydCBudW1weSBhcyBucAppbXBvcnQgY3YyCiNmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHB5cGxvdCBhcyBwbHQKCgpNSU5fTUFUQ0hfQ09VTlQgPSA4CgpkZWYgX21pZGRsZVBvaW50KHB0cyk6CiAgICBkZWYgYWRkKHAxLCBwMik6CiAgICAgICAgcmV0dXJuIChwMVswXStwMlswXSwgcDFbMV0rcDJbMV0pCiAgICBkZWYgZGlzdGFuY2UocDEsIHAyKToKICAgICAgICBpbXBvcnQgbWF0aAogICAgICAgIGwyID0gKHAxWzBdLXAyWzBdKSoocDFbMF0tcDJbMF0pICsgKHAxWzFdLXAyWzFdKSoocDFbMV0tcDJbMV0pCiAgICAgICAgcmV0dXJuIG1hdGguc3FydChsMikKICAgICMgZGVidWcKICAgIGZvciBwIGluIHB0czoKICAgICAgICBwcmludCAnUG9pbnQ6JywgcC5wdAogICAgbGVuZ3RoID0gbGVuKHB0cykKICAgIHN1bXgsIHN1bXkgPSByZWR1Y2UoYWRkLCBbcC5wdCBmb3IgcCBpbiBwdHNdKQogICAgcG9pbnQgPSBzdW14L2xlbmd0aCwgc3VteS9sZW5ndGgKICAgIHByaW50ICdzdGVwMTogcmVzdWx0PScsIHBvaW50CgogICAgIyBmaWx0ZXIgb3V0IG9rIHBvaW50cwogICAgYXZnX2Rpc3RhbmNlID0gc3VtKFtkaXN0YW5jZShwb2ludCwgcC5wdCkgZm9yIHAgaW4gcHRzXSkvbGVuZ3RoCiAgICBwcmludCAnYXZnIGRpc3RhbmNlPScsIGF2Z19kaXN0YW5jZQogICAgZ29vZCA9IFtdCiAgICBzdW14LCBzdW15ID0gMC4wLCAwLjAKICAgIGZvciBwIGluIHB0czoKICAgICAgICBwcmludCAncG9pbnQ6ICVzLCBkaXN0YW5jZTogJS4yZicgJShwLnB0LCBkaXN0YW5jZShwLnB0LCBwb2ludCkpCiAgICAgICAgaWYgZGlzdGFuY2UocC5wdCwgcG9pbnQpIDwgMS4yKmF2Z19kaXN0YW5jZToKICAgICAgICAgICAgZ29vZC5hcHBlbmQocC5wdCkKICAgICAgICAgICAgc3VteCArPSBwLnB0WzBdCiAgICAgICAgICAgIHN1bXkgKz0gcC5wdFsxXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50ICdub3QgZ29vZCcsIHAucHQKICAgIHByaW50ICdzdGVwMTogcmVzdWx0PScsIHBvaW50CiAgICBwb2ludCA9IG1hcChsb25nLCAoc3VteC9sZW4oZ29vZCksIHN1bXkvbGVuKGdvb2QpKSkKICAgIHByaW50ICdzdGVwMjogcG9pbnQ9JywgcG9pbnQKICAgIHJldHVybiBwb2ludAoKZGVmIGZpbmRfaW1hZ2VfcG9zaXRpb24ob3JpZ2luPSdvcmlnaW4ucG5nJywgcXVlcnk9J3F1ZXJ5LnBuZycsIG91dGZpbGU9Tm9uZSk6CiAgICAnJycKICAgIGZpbmQgYWxsIGltYWdlIHBvc2l0aW9ucwogICAgQHJldHVybiBOb25lIGlmIG5vdCBmb3VuZCBlbHNlIGEgdHVwbGU6IChvcmlnaW4uc2hhcGUsIHF1ZXJ5LnNoYXBlLCBwb3N0aW9ucykKICAgIG1pZ2h0IHJhaXNlIEV4Y2VwdGlvbgo8fGZpbV9ob2xlfD4KICAgICMgSW5pdGlhdGUgU0lGVCBkZXRlY3RvcgogICAgc2lmdCA9IGN2Mi5TSUZUKCkKCiAgICAjIGZpbmQgdGhlIGtleXBvaW50cyBhbmQgZGVzY3JpcHRvcnMgd2l0aCBTSUZUCiAgICBrcDEsIGRlczEgPSBzaWZ0LmRldGVjdEFuZENvbXB1dGUoaW1nMSxOb25lKQogICAga3AyLCBkZXMyID0gc2lmdC5kZXRlY3RBbmRDb21wdXRlKGltZzIsTm9uZSkKICAgIHByaW50IGxlbihrcDEpLCBsZW4oa3AyKQoKICAgIEZMQU5OX0lOREVYX0tEVFJFRSA9IDAKICAgIGluZGV4X3BhcmFtcyA9IGRpY3QoYWxnb3JpdGhtID0gRkxBTk5fSU5ERVhfS0RUUkVFLCB0cmVlcyA9IDUpCiAgICBzZWFyY2hfcGFyYW1zID0gZGljdChjaGVja3MgPSA1MCkKCiAgICAjIGZsYW5uCiAgICBmbGFubiA9IGN2Mi5GbGFubkJhc2VkTWF0Y2hlcihpbmRleF9wYXJhbXMsIHNlYXJjaF9wYXJhbXMpCiAgICBtYXRjaGVzID0gZmxhbm4ua25uTWF0Y2goZGVzMSwgZGVzMiwgaz0yKQoKICAgICMgc3RvcmUgYWxsIHRoZSBnb29kIG1hdGNoZXMgYXMgcGVyIExvd2UncyByYXRpbyB0ZXN0LgogICAgZ29vZCA9IFtdCiAgICBmb3IgbSxuIGluIG1hdGNoZXM6CiAgICAgICAgaWYgbS5kaXN0YW5jZSA8IDAuNypuLmRpc3RhbmNlOgogICAgICAgICAgICBnb29kLmFwcGVuZChtKQogICAgcHJpbnQgbGVuKGtwMSksIGxlbihrcDIpLCAnZ29vZCBjbnQ6JywgbGVuKGdvb2QpCgogICAgaWYgbGVuKGdvb2QpKjEuMC9sZW4oa3AxKSA8IDAuNToKICAgICNpZiBsZW4oZ29vZCk8TUlOX01BVENIX0NPVU5UOgogICAgICAgIHByaW50ICJOb3QgZW5vdWdoIG1hdGNoZXMgYXJlIGZvdW5kIC0gJWQvJWQiICUgKGxlbihnb29kKSxNSU5fTUFUQ0hfQ09VTlQpCiAgICAgICAgcmV0dXJuIGltZzIuc2hhcGUsIGltZzEuc2hhcGUsIFtdCgogICAgcXVlcnlQdHMgPSBbXQogICAgdHJhaW5QdHMgPSBbXQogICAgZm9yIGRtIGluIGdvb2Q6CiAgICAgICAgcXVlcnlQdHMuYXBwZW5kKGtwMVtkbS5xdWVyeUlkeF0pCiAgICAgICAgdHJhaW5QdHMuYXBwZW5kKGtwMltkbS50cmFpbklkeF0pCgogICAgaW1nMyA9IGN2Mi5kcmF3S2V5cG9pbnRzKGltZzEsIHF1ZXJ5UHRzKQogICAgY3YyLmltd3JpdGUoJ2ltYWdlL3F1ZXJ5LnBuZycsIGltZzMpCgogICAgaW1nMyA9IGN2Mi5kcmF3S2V5cG9pbnRzKGltZzIsIHRyYWluUHRzKQogICAgcG9pbnQgPSBfbWlkZGxlUG9pbnQodHJhaW5QdHMpCiAgICBwcmludCAncG9zaXRpb24gaW4nLCBwb2ludAoKICAgIGlmIG91dGZpbGU6CiAgICAgICAgZWRnZSA9IDEwCiAgICAgICAgdG9wX2xlZnQgPSAocG9pbnRbMF0tZWRnZSwgcG9pbnRbMV0tZWRnZSkKICAgICAgICBib3R0b21fcmlnaHQgPSAocG9pbnRbMF0rZWRnZSwgcG9pbnRbMV0rZWRnZSkKICAgICAgICBjdjIucmVjdGFuZ2xlKGltZzMsIHRvcF9sZWZ0LCBib3R0b21fcmlnaHQsIDI1NSwgMikKICAgICAgICBjdjIuaW13cml0ZShvdXRmaWxlLCBpbWczKQogICAgcmV0dXJuIGltZzIuc2hhcGUsIGltZzEuc2hhcGUsIFtwb2ludF0KCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBwdHMgPSBmaW5kX2ltYWdlX3Bvc2l0aW9uKCdpbWFnZS9tdWxlLnBuZycsICdpbWFnZS90ZW1wbGF0ZS5wbmcnLCAKICAgICAgICBvdXRmaWxlPSdpbWFnZS90cmFpbi5wbmcnKQogICAgcHJpbnQgcHRzCjx8ZmltX3N1ZmZpeHw+CiAgICAnJycKICAgIGltZzEgPSBjdjIuaW1yZWFkKHF1ZXJ5LCAwKSAjIHF1ZXJ5IGltYWdlKHNtYWxsKQogICAgaW1nMiA9IGN2Mi5pbXJlYWQob3JpZ2luLCAwKSAjIHRyYWluIGltYWdlKGJpZykKCjx8ZmltX2VuZHw+"]
["dad5764e150372c1e74211420378846f3c79732a-5","dad5764e150372c1e74211420378846f3c79732a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgpfX2F1dGhvcl9fID0gJ2h6c3Vuc2h4JwoKI2ltcG9ydCBudW1weSBhcyBucAppbXBvcnQgY3YyCiNmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHB5cGxvdCBhcyBwbHQKCgpNSU5fTUFUQ0hfQ09VTlQgPSA4CgpkZWYgX21pZGRsZVBvaW50KHB0cyk6CiAgICBkZWYgYWRkKHAxLCBwMik6CiAgICAgICAgcmV0dXJuIChwMVswXStwMlswXSwgcDFbMV0rcDJbMV0pCiAgICBkZWYgZGlzdGFuY2UocDEsIHAyKToKICAgICAgICBpbXBvcnQgbWF0aAogICAgICAgIGwyID0gKHAxWzBdLXAyWzBdKSoocDFbMF0tcDJbMF0pICsgKHAxWzFdLXAyWzFdKSoocDFbMV0tcDJbMV0pCiAgICAgICAgcmV0dXJuIG1hdGguc3FydChsMikKICAgICMgZGVidWcKICAgIGZvciBwIGluIHB0czoKICAgICAgICBwcmludCAnUG9pbnQ6JywgcC5wdAogICAgbGVuZ3RoID0gbGVuKHB0cykKICAgIHN1bXgsIHN1bXkgPSByZWR1Y2UoYWRkLCBbcC5wdCBmb3IgcCBpbiBwdHNdKQogICAgcG9pbnQgPSBzdW14L2xlbmd0aCwgc3VteS9sZW5ndGgKICAgIHByaW50ICdzdGVwMTogcmVzdWx0PScsIHBvaW50CgogICAgIyBmaWx0ZXIgb3V0IG9rIHBvaW50cwogICAgYXZnX2Rpc3RhbmNlID0gc3VtKFtkaXN0YW5jZShwb2ludCwgcC5wdCkgZm9yIHAgaW4gcHRzXSkvbGVuZ3RoCiAgICBwcmludCAnYXZnIGRpc3RhbmNlPScsIGF2Z19kaXN0YW5jZQogICAgZ29vZCA9IFtdCiAgICBzdW14LCBzdW15ID0gMC4wLCAwLjAKICAgIGZvciBwIGluIHB0czoKICAgICAgICBwcmludCAncG9pbnQ6ICVzLCBkaXN0YW5jZTogJS4yZicgJShwLnB0LCBkaXN0YW5jZShwLnB0LCBwb2ludCkpCjx8ZmltX2hvbGV8PgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50ICdub3QgZ29vZCcsIHAucHQKICAgIHByaW50ICdzdGVwMTogcmVzdWx0PScsIHBvaW50CiAgICBwb2ludCA9IG1hcChsb25nLCAoc3VteC9sZW4oZ29vZCksIHN1bXkvbGVuKGdvb2QpKSkKICAgIHByaW50ICdzdGVwMjogcG9pbnQ9JywgcG9pbnQKICAgIHJldHVybiBwb2ludAoKZGVmIGZpbmRfaW1hZ2VfcG9zaXRpb24ob3JpZ2luPSdvcmlnaW4ucG5nJywgcXVlcnk9J3F1ZXJ5LnBuZycsIG91dGZpbGU9Tm9uZSk6CiAgICAnJycKICAgIGZpbmQgYWxsIGltYWdlIHBvc2l0aW9ucwogICAgQHJldHVybiBOb25lIGlmIG5vdCBmb3VuZCBlbHNlIGEgdHVwbGU6IChvcmlnaW4uc2hhcGUsIHF1ZXJ5LnNoYXBlLCBwb3N0aW9ucykKICAgIG1pZ2h0IHJhaXNlIEV4Y2VwdGlvbgogICAgJycnCiAgICBpbWcxID0gY3YyLmltcmVhZChxdWVyeSwgMCkgIyBxdWVyeSBpbWFnZShzbWFsbCkKICAgIGltZzIgPSBjdjIuaW1yZWFkKG9yaWdpbiwgMCkgIyB0cmFpbiBpbWFnZShiaWcpCgogICAgIyBJbml0aWF0ZSBTSUZUIGRldGVjdG9yCiAgICBzaWZ0ID0gY3YyLlNJRlQoKQoKICAgICMgZmluZCB0aGUga2V5cG9pbnRzIGFuZCBkZXNjcmlwdG9ycyB3aXRoIFNJRlQKICAgIGtwMSwgZGVzMSA9IHNpZnQuZGV0ZWN0QW5kQ29tcHV0ZShpbWcxLE5vbmUpCiAgICBrcDIsIGRlczIgPSBzaWZ0LmRldGVjdEFuZENvbXB1dGUoaW1nMixOb25lKQogICAgcHJpbnQgbGVuKGtwMSksIGxlbihrcDIpCgogICAgRkxBTk5fSU5ERVhfS0RUUkVFID0gMAogICAgaW5kZXhfcGFyYW1zID0gZGljdChhbGdvcml0aG0gPSBGTEFOTl9JTkRFWF9LRFRSRUUsIHRyZWVzID0gNSkKICAgIHNlYXJjaF9wYXJhbXMgPSBkaWN0KGNoZWNrcyA9IDUwKQoKICAgICMgZmxhbm4KICAgIGZsYW5uID0gY3YyLkZsYW5uQmFzZWRNYXRjaGVyKGluZGV4X3BhcmFtcywgc2VhcmNoX3BhcmFtcykKICAgIG1hdGNoZXMgPSBmbGFubi5rbm5NYXRjaChkZXMxLCBkZXMyLCBrPTIpCgogICAgIyBzdG9yZSBhbGwgdGhlIGdvb2QgbWF0Y2hlcyBhcyBwZXIgTG93ZSdzIHJhdGlvIHRlc3QuCiAgICBnb29kID0gW10KICAgIGZvciBtLG4gaW4gbWF0Y2hlczoKICAgICAgICBpZiBtLmRpc3RhbmNlIDwgMC43Km4uZGlzdGFuY2U6CiAgICAgICAgICAgIGdvb2QuYXBwZW5kKG0pCiAgICBwcmludCBsZW4oa3AxKSwgbGVuKGtwMiksICdnb29kIGNudDonLCBsZW4oZ29vZCkKCiAgICBpZiBsZW4oZ29vZCkqMS4wL2xlbihrcDEpIDwgMC41OgogICAgI2lmIGxlbihnb29kKTxNSU5fTUFUQ0hfQ09VTlQ6CiAgICAgICAgcHJpbnQgIk5vdCBlbm91Z2ggbWF0Y2hlcyBhcmUgZm91bmQgLSAlZC8lZCIgJSAobGVuKGdvb2QpLE1JTl9NQVRDSF9DT1VOVCkKICAgICAgICByZXR1cm4gaW1nMi5zaGFwZSwgaW1nMS5zaGFwZSwgW10KCiAgICBxdWVyeVB0cyA9IFtdCiAgICB0cmFpblB0cyA9IFtdCiAgICBmb3IgZG0gaW4gZ29vZDoKICAgICAgICBxdWVyeVB0cy5hcHBlbmQoa3AxW2RtLnF1ZXJ5SWR4XSkKICAgICAgICB0cmFpblB0cy5hcHBlbmQoa3AyW2RtLnRyYWluSWR4XSkKCiAgICBpbWczID0gY3YyLmRyYXdLZXlwb2ludHMoaW1nMSwgcXVlcnlQdHMpCiAgICBjdjIuaW13cml0ZSgnaW1hZ2UvcXVlcnkucG5nJywgaW1nMykKCiAgICBpbWczID0gY3YyLmRyYXdLZXlwb2ludHMoaW1nMiwgdHJhaW5QdHMpCiAgICBwb2ludCA9IF9taWRkbGVQb2ludCh0cmFpblB0cykKICAgIHByaW50ICdwb3NpdGlvbiBpbicsIHBvaW50CgogICAgaWYgb3V0ZmlsZToKICAgICAgICBlZGdlID0gMTAKICAgICAgICB0b3BfbGVmdCA9IChwb2ludFswXS1lZGdlLCBwb2ludFsxXS1lZGdlKQogICAgICAgIGJvdHRvbV9yaWdodCA9IChwb2ludFswXStlZGdlLCBwb2ludFsxXStlZGdlKQogICAgICAgIGN2Mi5yZWN0YW5nbGUoaW1nMywgdG9wX2xlZnQsIGJvdHRvbV9yaWdodCwgMjU1LCAyKQogICAgICAgIGN2Mi5pbXdyaXRlKG91dGZpbGUsIGltZzMpCiAgICByZXR1cm4gaW1nMi5zaGFwZSwgaW1nMS5zaGFwZSwgW3BvaW50XQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHB0cyA9IGZpbmRfaW1hZ2VfcG9zaXRpb24oJ2ltYWdlL211bGUucG5nJywgJ2ltYWdlL3RlbXBsYXRlLnBuZycsIAogICAgICAgIG91dGZpbGU9J2ltYWdlL3RyYWluLnBuZycpCiAgICBwcmludCBwdHMKPHxmaW1fc3VmZml4fD4KICAgICAgICBpZiBkaXN0YW5jZShwLnB0LCBwb2ludCkgPCAxLjIqYXZnX2Rpc3RhbmNlOgogICAgICAgICAgICBnb29kLmFwcGVuZChwLnB0KQogICAgICAgICAgICBzdW14ICs9IHAucHRbMF0KICAgICAgICAgICAgc3VteSArPSBwLnB0WzFdCjx8ZmltX2VuZHw+"]
["c122312f1629dea50046584c50a557847c902ddf-1","c122312f1629dea50046584c50a557847c902ddf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdApmcm9tIHRlc3RzLmV4YW1wbGVzIGltcG9ydCBUZXN0RXhhbXBsZSBhcyBiYXNlX2NsYXNzCgoKQHB5dGVzdC5tYXJrLnN1aXRlKCdtcGknKQpjbGFzcyBUZXN0RXhhbXBsZU1vZGVsRXJyb3JXaXRoSU8oYmFzZV9jbGFzcyk6CiAgICByIiIiVGVzdCB0aGUgbW9kZWxfZXJyb3Jfd2l0aF9pbyBleGFtcGxlLiIiIgogICAgCiAgICBAcHl0ZXN0LmZpeHR1cmUoc2NvcGU9ImNsYXNzIikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIGV4YW1wbGVfbmFtZShzZWxmKToKICAgICAgICByIiIic3RyOiBOYW1lIG9mIGV4YW1wbGUgYmVpbmcgdGVzdGVkLiIiIgogICAgICAgIHJldHVybiAibW9kZWxfZXJyb3Jfd2l0aF9pbyIKPHxmaW1fZW5kfD4="]
["c122312f1629dea50046584c50a557847c902ddf-2","c122312f1629dea50046584c50a557847c902ddf","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IHB5dGVzdApmcm9tIHRlc3RzLmV4YW1wbGVzIGltcG9ydCBUZXN0RXhhbXBsZSBhcyBiYXNlX2NsYXNzCgoKPHxmaW1fZW5kfD4="]
["c122312f1629dea50046584c50a557847c902ddf-3","c122312f1629dea50046584c50a557847c902ddf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdApmcm9tIHRlc3RzLmV4YW1wbGVzIGltcG9ydCBUZXN0RXhhbXBsZSBhcyBiYXNlX2NsYXNzCgoKQHB5dGVzdC5tYXJrLnN1aXRlKCdtcGknKQpjbGFzcyBUZXN0RXhhbXBsZU1vZGVsRXJyb3JXaXRoSU8oYmFzZV9jbGFzcyk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHIiIiJUZXN0IHRoZSBtb2RlbF9lcnJvcl93aXRoX2lvIGV4YW1wbGUuIiIiCiAgICAKICAgIEBweXRlc3QuZml4dHVyZShzY29wZT0iY2xhc3MiKQogICAgZGVmIGV4YW1wbGVfbmFtZShzZWxmKToKPHxmaW1fZW5kfD4="]
["c122312f1629dea50046584c50a557847c902ddf-4","c122312f1629dea50046584c50a557847c902ddf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gdGVzdHMuZXhhbXBsZXMgaW1wb3J0IFRlc3RFeGFtcGxlIGFzIGJhc2VfY2xhc3MKCgpAcHl0ZXN0Lm1hcmsuc3VpdGUoJ21waScpCjx8ZmltX2VuZHw+"]
["c122312f1629dea50046584c50a557847c902ddf-5","c122312f1629dea50046584c50a557847c902ddf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdApmcm9tIHRlc3RzLmV4YW1wbGVzIGltcG9ydCBUZXN0RXhhbXBsZSBhcyBiYXNlX2NsYXNzCgo8fGZpbV9ob2xlfD4KICAgIAogICAgQHB5dGVzdC5maXh0dXJlKHNjb3BlPSJjbGFzcyIpCiAgICBkZWYgZXhhbXBsZV9uYW1lKHNlbGYpOgogICAgICAgIHIiIiJzdHI6IE5hbWUgb2YgZXhhbXBsZSBiZWluZyB0ZXN0ZWQuIiIiCiAgICAgICAgcmV0dXJuICJtb2RlbF9lcnJvcl93aXRoX2lvIgo8fGZpbV9zdWZmaXh8PgoKQHB5dGVzdC5tYXJrLnN1aXRlKCdtcGknKQpjbGFzcyBUZXN0RXhhbXBsZU1vZGVsRXJyb3JXaXRoSU8oYmFzZV9jbGFzcyk6CiAgICByIiIiVGVzdCB0aGUgbW9kZWxfZXJyb3Jfd2l0aF9pbyBleGFtcGxlLiIiIgo8fGZpbV9lbmR8Pg=="]
["7855924514aec11deeb130881634e4240263088b-1","7855924514aec11deeb130881634e4240263088b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNvbnNvbGUgYXMgY24KaW1wb3J0IHN5cwoKeiA9IGNuLmZuKHN5cy5hcmd2WzFdKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CnByaW50KHopCgojZm9yIGFyZyBpbiBzeXMuYXJndjoKIwlwcmludChhcmcpCjx8ZmltX2VuZHw+"]
["7855924514aec11deeb130881634e4240263088b-2","7855924514aec11deeb130881634e4240263088b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNvbnNvbGUgYXMgY24KaW1wb3J0IHN5cwoKeiA9IGNuLmZuKHN5cy5hcmd2WzFdKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CnByaW50KHopCgojZm9yIGFyZyBpbiBzeXMuYXJndjoKIwlwcmludChhcmcpCjx8ZmltX2VuZHw+"]
["97785983f9d39d2b68115e44fbf38ea221efe45d-1","97785983f9d39d2b68115e44fbf38ea221efe45d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGVub2tpIGFzIGVrCmltcG9ydCBtaXRzdWJhCgojIFNldCB0aGUgZGVzaXJlZCBtaXRzdWJhIHZhcmlhbnQKbWl0c3ViYS5zZXRfdmFyaWFudCgncGFja2V0X3JnYicpCgpmcm9tIG1pdHN1YmEuY29yZSBpbXBvcnQgRmxvYXQsIFZlY3RvcjNmCmZyb20gbWl0c3ViYS5jb3JlLnhtbCBpbXBvcnQgbG9hZF9zdHJpbmcKZnJvbSBtaXRzdWJhLnJlbmRlciBpbXBvcnQgU3VyZmFjZUludGVyYWN0aW9uM2YsIEJTREZDb250ZXh0CgoKZGVmIHNwaF9kaXIodGhldGEsIHBoaSk6CiAgICAiIiIgTWFwIHNwaGVyaWNhbCB0byBFdWNsaWRlYW4gY29vcmRpbmF0ZXMgIiIiCiAgICBzdCwgY3QgPSBlay5zaW5jb3ModGhldGEpCiAgICBzcCwgY3AgPSBlay5zaW5jb3MocGhpKQogICAgcmV0dXJuIFZlY3RvcjNmKGNwICogc3QsIHNwICogc3QsIGN0KQoKCiMgTG9hZCBkZXNpcmVkIEJTREYgcGx1Z2luCmJzZGYgPSBsb2FkX3N0cmluZygiIiI8YnNkZiB2ZXJzaW9uPScyLjAuMCcgdHlwZT0ncm91Z2hjb25kdWN0b3InPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbG9hdCBuYW1lPSJhbHBoYSIgdmFsdWU9IjAuMiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmcgbmFtZT0iZGlzdHJpYnV0aW9uIiB2YWx1ZT0iZ2d4Ii8+CiAgICAgICAgICAgICAgICAgICAgICA8L2JzZGY+IiIiKQoKIyBDcmVhdGUgYSAoZHVtbXkpIHN1cmZhY2UgaW50ZXJhY3Rpb24gdG8gdXNlIGZvciB0aGUgZXZhbHVhdGlvbgpzaSA9IFN1cmZhY2VJbnRlcmFjdGlvbjNmKCkKCiMgU3BlY2lmeSBhbiBpbmNpZGVudCBkaXJlY3Rpb24gd2l0aCA0NSBkZWdyZWVzIGVsZXZhdGlvbgpzaS53aSA9IHNwaF9kaXIoZWsucGkgKiA0NSAvIDE4MCwgMC4wKQoKIyBDcmVhdGUgZ3JpZCBpbiBzcGhlcmljYWwgY29vcmRpbmF0ZXMgYW5kIG1hcCBpdCBvbnRvIHRoZSBzcGhlcmUKcmVzID0gMzAwCnRoZXRhX28sIHBoaV9vID0gZWsubWVzaGdyaWQoCiAgICBlay5saW5zcGFjZShGbG9hdCwgMCwgICAgIGVrLnBpLCAgICAgcmVzKSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZWsubGluc3BhY2UoRmxvYXQsIDAsIDIgKiBlay5waSwgMiAqIHJlcykKPHxmaW1fZW5kfD4="]
["97785983f9d39d2b68115e44fbf38ea221efe45d-2","97785983f9d39d2b68115e44fbf38ea221efe45d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGVub2tpIGFzIGVrCmltcG9ydCBtaXRzdWJhCgojIFNldCB0aGUgZGVzaXJlZCBtaXRzdWJhIHZhcmlhbnQKbWl0c3ViYS5zZXRfdmFyaWFudCgncGFja2V0X3JnYicpCgpmcm9tIG1pdHN1YmEuY29yZSBpbXBvcnQgRmxvYXQsIFZlY3RvcjNmCmZyb20gbWl0c3ViYS5jb3JlLnhtbCBpbXBvcnQgbG9hZF9zdHJpbmcKZnJvbSBtaXRzdWJhLnJlbmRlciBpbXBvcnQgU3VyZmFjZUludGVyYWN0aW9uM2YsIEJTREZDb250ZXh0CgoKZGVmIHNwaF9kaXIodGhldGEsIHBoaSk6CiAgICAiIiIgTWFwIHNwaGVyaWNhbCB0byBFdWNsaWRlYW4gY29vcmRpbmF0ZXMgIiIiCiAgICBzdCwgY3QgPSBlay5zaW5jb3ModGhldGEpCiAgICBzcCwgY3AgPSBlay5zaW5jb3MocGhpKQogICAgcmV0dXJuIFZlY3RvcjNmKGNwICogc3QsIHNwICogc3QsIGN0KQoKCiMgTG9hZCBkZXNpcmVkIEJTREYgcGx1Z2luCmJzZGYgPSBsb2FkX3N0cmluZygiIiI8YnNkZiB2ZXJzaW9uPScyLjAuMCcgdHlwZT0ncm91Z2hjb25kdWN0b3InPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbG9hdCBuYW1lPSJhbHBoYSIgdmFsdWU9IjAuMiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmcgbmFtZT0iZGlzdHJpYnV0aW9uIiB2YWx1ZT0iZ2d4Ii8+CiAgICAgICAgICAgICAgICAgICAgICA8L2JzZGY+IiIiKQoKIyBDcmVhdGUgYSAoZHVtbXkpIHN1cmZhY2UgaW50ZXJhY3Rpb24gdG8gdXNlIGZvciB0aGUgZXZhbHVhdGlvbgpzaSA9IFN1cmZhY2VJbnRlcmFjdGlvbjNmKCkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBTcGVjaWZ5IGFuIGluY2lkZW50IGRpcmVjdGlvbiB3aXRoIDQ1IGRlZ3JlZXMgZWxldmF0aW9uCnNpLndpID0gc3BoX2Rpcihlay5waSAqIDQ1IC8gMTgwLCAwLjApCgojIENyZWF0ZSBncmlkIGluIHNwaGVyaWNhbCBjb29yZGluYXRlcyBhbmQgbWFwIGl0IG9udG8gdGhlIHNwaGVyZQo8fGZpbV9lbmR8Pg=="]
["97785983f9d39d2b68115e44fbf38ea221efe45d-3","97785983f9d39d2b68115e44fbf38ea221efe45d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGVub2tpIGFzIGVrCmltcG9ydCBtaXRzdWJhCgojIFNldCB0aGUgZGVzaXJlZCBtaXRzdWJhIHZhcmlhbnQKbWl0c3ViYS5zZXRfdmFyaWFudCgncGFja2V0X3JnYicpCgpmcm9tIG1pdHN1YmEuY29yZSBpbXBvcnQgRmxvYXQsIFZlY3RvcjNmCmZyb20gbWl0c3ViYS5jb3JlLnhtbCBpbXBvcnQgbG9hZF9zdHJpbmcKZnJvbSBtaXRzdWJhLnJlbmRlciBpbXBvcnQgU3VyZmFjZUludGVyYWN0aW9uM2YsIEJTREZDb250ZXh0CgoKZGVmIHNwaF9kaXIodGhldGEsIHBoaSk6CiAgICAiIiIgTWFwIHNwaGVyaWNhbCB0byBFdWNsaWRlYW4gY29vcmRpbmF0ZXMgIiIiCiAgICBzdCwgY3QgPSBlay5zaW5jb3ModGhldGEpCiAgICBzcCwgY3AgPSBlay5zaW5jb3MocGhpKQogICAgcmV0dXJuIFZlY3RvcjNmKGNwICogc3QsIHNwICogc3QsIGN0KQoKCiMgTG9hZCBkZXNpcmVkIEJTREYgcGx1Z2luCmJzZGYgPSBsb2FkX3N0cmluZygiIiI8YnNkZiB2ZXJzaW9uPScyLjAuMCcgdHlwZT0ncm91Z2hjb25kdWN0b3InPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbG9hdCBuYW1lPSJhbHBoYSIgdmFsdWU9IjAuMiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmcgbmFtZT0iZGlzdHJpYnV0aW9uIiB2YWx1ZT0iZ2d4Ii8+CiAgICAgICAgICAgICAgICAgICAgICA8L2JzZGY+IiIiKQoKIyBDcmVhdGUgYSAoZHVtbXkpIHN1cmZhY2UgaW50ZXJhY3Rpb24gdG8gdXNlIGZvciB0aGUgZXZhbHVhdGlvbgpzaSA9IFN1cmZhY2VJbnRlcmFjdGlvbjNmKCkKCiMgU3BlY2lmeSBhbiBpbmNpZGVudCBkaXJlY3Rpb24gd2l0aCA0NSBkZWdyZWVzIGVsZXZhdGlvbgpzaS53aSA9IHNwaF9kaXIoZWsucGkgKiA0NSAvIDE4MCwgMC4wKQo8fGZpbV9ob2xlfD4KICAgIGVrLmxpbnNwYWNlKEZsb2F0LCAwLCAgICAgZWsucGksICAgICByZXMpLAogICAgZWsubGluc3BhY2UoRmxvYXQsIDAsIDIgKiBlay5waSwgMiAqIHJlcykKKQp3byA9IHNwaF9kaXIodGhldGFfbywgcGhpX28pCgojIEV2YWx1YXRlIHRoZSB3aG9sZSBhcnJheSAoMTgwMDAgZGlyZWN0aW9ucykgYXQgb25jZQp2YWx1ZXMgPSBic2RmLmV2YWwoQlNERkNvbnRleHQoKSwgc2ksIHdvKQoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKZnJvbSBtcGxfdG9vbGtpdHMuYXhlc19ncmlkMSBpbXBvcnQgbWFrZV9heGVzX2xvY2F0YWJsZQoKIyBFeHRyYWN0IHJlZCBjaGFubmVsIG9mIEJSREYgdmFsdWVzIGFuZCByZXNoYXBlIGludG8gMkQgZ3JpZAp2YWx1ZXNfciA9IG5wLmFycmF5KHZhbHVlcylbOiwgMF0KdmFsdWVzX3IgPSB2YWx1ZXNfci5yZXNoYXBlKDIgKiByZXMsIHJlcykuVAoKIyBQbG90IHZhbHVlcyBmb3Igc3BoZXJpY2FsIGNvb3JkaW5hdGVzCmZpZywgYXggPSBwbHQuc3VicGxvdHMoZmlnc2l6ZT0oMTIsIDcpKQoKaW0gPSBheC5pbXNob3codmFsdWVzX3IsIGV4dGVudD1bMCwgMiAqIG5wLnBpLCBucC5waSwgMF0sCiAgICAgICAgICAgICAgIGNtYXA9J2pldCcsIGludGVycG9sYXRpb249J2JpY3ViaWMnKQoKYXguc2V0X3hsYWJlbChyJyRccGhpX28kJywgc2l6ZT0xNCkKYXguc2V0X3h0aWNrcyhbMCwgbnAucGksIDIgKiBucC5waV0pCmF4LnNldF94dGlja2xhYmVscyhbJzAnLCAnJFxccGkkJywgJyQyXFxwaSQnXSkKYXguc2V0X3lsYWJlbChyJyRcdGhldGFfbyQnLCBzaXplPTE0KQpheC5zZXRfeXRpY2tzKFswLCBucC5waSAvIDIsIG5wLnBpXSkKYXguc2V0X3l0aWNrbGFiZWxzKFsnMCcsICckXFxwaS8yJCcsICckXFxwaSQnXSkKCmRpdmlkZXIgPSBtYWtlX2F4ZXNfbG9jYXRhYmxlKGF4KQpjYXggPSBkaXZpZGVyLmFwcGVuZF9heGVzKCJyaWdodCIsIHNpemU9IjMlIiwgcGFkPTAuMDUpCnBsdC5jb2xvcmJhcihpbSwgY2F4PWNheCkKCmZpZy5zYXZlZmlnKCJic2RmX2V2YWwuanBnIiwgZHBpPTE1MCwgYmJveF9pbmNoZXM9J3RpZ2h0JywgcGFkX2luY2hlcz0wKQpwbHQuc2hvdygpCjx8ZmltX3N1ZmZpeHw+CgojIENyZWF0ZSBncmlkIGluIHNwaGVyaWNhbCBjb29yZGluYXRlcyBhbmQgbWFwIGl0IG9udG8gdGhlIHNwaGVyZQpyZXMgPSAzMDAKdGhldGFfbywgcGhpX28gPSBlay5tZXNoZ3JpZCgKPHxmaW1fZW5kfD4="]
["00a5413924023d14520e3a8d4354dd736c337930-1","00a5413924023d14520e3a8d4354dd736c337930","PHxmaW1fcHJlZml4fD4KZnJvbSBleGFtcGxlcy5yZWdpc3RyeSBpbXBvcnQgRXhhbXBsZXMKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmRlZiB0ZXN0X2RvY19zdHJpbmdzKCk6CiAgICBteV9leGFtcGxlcyA9IEV4YW1wbGVzKCkKCjx8ZmltX2VuZHw+"]
["00a5413924023d14520e3a8d4354dd736c337930-2","00a5413924023d14520e3a8d4354dd736c337930","PHxmaW1fcHJlZml4fD4KZnJvbSBleGFtcGxlcy5yZWdpc3RyeSBpbXBvcnQgRXhhbXBsZXMKCgpkZWYgdGVzdF9kb2Nfc3RyaW5ncygpOgogICAgbXlfZXhhbXBsZXMgPSBFeGFtcGxlcygpCgogICAgQG15X2V4YW1wbGVzLmV4YW1wbGUoMSwgMikKICAgIGRlZiBhZGQobnVtYmVyXzE6IGludCwgbnVtYmVyXzI6IGludCkgLT4gaW50OgogICAgICAgIHJldHVybiBudW1iZXJfMSArIG51bWJlcl8yCgogICAgYXNzZXJ0IGFkZC5fX2RvY19fIGFuZCAiRXhhbXBsZXMiIGluIGFkZC5fX2RvY19fIGFuZCAiYWRkIiBpbiBhZGQuX19kb2NfXyBhbmQgIjEiIGluIGFkZC5fX2RvY19fCgogICAgbXlfZG9jbGVzc19leGFtcGxlcyA9IEV4YW1wbGVzKGFkZF90b19kb2Nfc3RyaW5ncz1GYWxzZSkKCiAgICBAbXlfZG9jbGVzc19leGFtcGxlcy5leGFtcGxlKDEsIDIpCiAgICBkZWYgYWRkX2RvY2xlc3MobnVtYmVyXzE6IGludCwgbnVtYmVyXzI6IGludCkgLT4gaW50Ogo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcmV0dXJuIG51bWJlcl8xICsgbnVtYmVyXzIKCjx8ZmltX2VuZHw+"]
["00a5413924023d14520e3a8d4354dd736c337930-3","00a5413924023d14520e3a8d4354dd736c337930","PHxmaW1fcHJlZml4fD4KZnJvbSBleGFtcGxlcy5yZWdpc3RyeSBpbXBvcnQgRXhhbXBsZXMKCgpkZWYgdGVzdF9kb2Nfc3RyaW5ncygpOgogICAgbXlfZXhhbXBsZXMgPSBFeGFtcGxlcygpCgogICAgQG15X2V4YW1wbGVzLmV4YW1wbGUoMSwgMikKICAgIGRlZiBhZGQobnVtYmVyXzE6IGludCwgbnVtYmVyXzI6IGludCkgLT4gaW50OgogICAgICAgIHJldHVybiBudW1iZXJfMSArIG51bWJlcl8yCjx8ZmltX2hvbGV8PgoKICAgIEBteV9kb2NsZXNzX2V4YW1wbGVzLmV4YW1wbGUoMSwgMikKICAgIGRlZiBhZGRfZG9jbGVzcyhudW1iZXJfMTogaW50LCBudW1iZXJfMjogaW50KSAtPiBpbnQ6CiAgICAgICAgcmV0dXJuIG51bWJlcl8xICsgbnVtYmVyXzIKCiAgICBhc3NlcnQgbm90IGFkZF9kb2NsZXNzLl9fZG9jX18KPHxmaW1fc3VmZml4fD4KCiAgICBhc3NlcnQgYWRkLl9fZG9jX18gYW5kICJFeGFtcGxlcyIgaW4gYWRkLl9fZG9jX18gYW5kICJhZGQiIGluIGFkZC5fX2RvY19fIGFuZCAiMSIgaW4gYWRkLl9fZG9jX18KCiAgICBteV9kb2NsZXNzX2V4YW1wbGVzID0gRXhhbXBsZXMoYWRkX3RvX2RvY19zdHJpbmdzPUZhbHNlKQo8fGZpbV9lbmR8Pg=="]
["c114865f88c7b88d2e92aa13cbbff7cda0bded4d-1","c114865f88c7b88d2e92aa13cbbff7cda0bded4d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IGltcG9ydGxpYgppbXBvcnQgY2FsZW5kYXIKaW1wb3J0IG9zCgpmcm9tIGFwcHNmbHllci5hcHBzZmx5ZXJfcGlsb3QgaW1wb3J0IEFwcHNGbHllclBpbG90CmZyb20gYXBwc2ZseWVyLmFwcHNmbHllcl9wcm9jZXNzb3IgaW1wb3J0IEFwcHNGbHllclByb2Nlc3NvcgoKZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIuY29tbW9uLmtleXMgaW1wb3J0IEtleXMKZnJvbSByYXNwYWRvciBpbXBvcnQgTWFuZXV2ZXIsIE9yZG5hbmNlTWFuZXV2ZXIsIE5hdmlnYXRpb25NYW5ldXZlciwgU2VxdWVuY2VNYW5ldXZlciwgVXBsb2FkUmVwb3J0UmFzcGFkb3IsIENsaWNrWFBhdGhTZXF1ZW5jZU1hbmV1dmVyLCBJbnRlcmFjdE1hbmV1dmVyLCBPcmRuYW5jZVBhcnNlciwgWFBhdGgsIFJhc3BhZG9yTm9PcmRuYW5jZUVycm9yLCBDbGlja1hQYXRoTWFuZXV2ZXIsIFNlZWtQYXJzZXIsIFNvdXBFbGVtZW50UGFyc2VyLCBGaW5kRWxlbWVudE1hbmV1dmVyLCBDbGlja1NvdXBFbGVtZW50TWFuZXV2ZXIsIEVsZW1lbnQsIENsaWNrRWxlbWVudE1hbmV1dmVyLCBDb2xsZWN0UmVwb3J0TWFuZXV2ZXIKZnJvbSB0eXBpbmcgaW1wb3J0IEdlbmVyYXRvciwgT3B0aW9uYWwsIERpY3QsIExpc3QsIENhbGxhYmxlCmZyb20gdGltZSBpbXBvcnQgc2xlZXAKZnJvbSBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lLCBkYXRlCgppbXBvcnQgYXBwc2ZseWVyLmFwcHNmbHllcl9wYXJzZXIKaW1wb3J0bGliLnJlbG9hZChhcHBzZmx5ZXIuYXBwc2ZseWVyX3BhcnNlcikKZnJvbSBhcHBzZmx5ZXIuYXBwc2ZseWVyX3BhcnNlciBpbXBvcnQgR3JvdXBCeURyb3Bkb3duc1BhcnNlciwgUmVwb3J0Q2FsZW5kYXJzUGFyc2VyLCBEb3dubG9hZEJ1dHRvblBhcnNlcgoKY2xhc3MgU2lnbkluTWFuZXV2ZXIoTWFuZXV2ZXJbQXBwc0ZseWVyUGlsb3RdKToKICBkZWYgYXR0ZW1wdChzZWxmLCBwaWxvdDogQXBwc0ZseWVyUGlsb3QpOgogICAgZW1haWxfZWxlbWVudCA9IHlpZWxkIENsaWNrRWxlbWVudE1hbmV1dmVyKAogICAgICBpbnN0cnVjdGlvbj0nY2xpY2sgdGhlIGVtYWlsIGZpbGVkJywKICAgICAgc2Vla2VyPWxhbWJkYSBwOiBwLnNvdXAuZmluZCgnaW5wdXQnLCB7J2lkJzogJ3VzZXItZW1haWwnfSkKICAgICkKICAgIGVtYWlsX2VsZW1lbnQub3JkbmFuY2Uuc2VuZF9rZXlzKHBpbG90LmVtYWlsKQogICAgc2xlZXAoMSkKCiAgICBwYXNzd29yZF9lbGVtZW50ID0geWllbGQgQ2xpY2tFbGVtZW50TWFuZXV2ZXIoCiAgICAgIGluc3RydWN0aW9uPSdjbGljayB0aGUgcGFzc3dvcmQgZmllbGQnLAogICAgICBzZWVrZXI9bGFtYmRhIHA6IHAuc291cC5maW5kKCdpbnB1dCcsIHsnaWQnOiAncGFzc3dvcmQtZmllbGQnfSkKICAgICkKICAgIHBhc3N3b3JkX2VsZW1lbnQub3JkbmFuY2Uuc2VuZF9rZXlzKHBpbG90LnBhc3N3b3JkKQogICAgc2xlZXAoMSkKICAgIHBhc3N3b3JkX2VsZW1lbnQub3JkbmFuY2Uuc2VuZF9rZXlzKEtleXMuUkVUVVJOKQogICAgc2xlZXAocGlsb3Quc2lnbl9pbl93YWl0KQoKY2xhc3MgQWRkUmVwb3J0R3JvdXBpbmdzTWFuZXV2ZXIoTWFuZXV2ZXJbQXBwc0ZseWVyUGlsb3RdKToKICBncm91cGluZ3M6IExpc3Rbc3RyXQoKICBkZWYgX19pbml0X18oc2VsZiwgZ3JvdXBpbmdzOiBMaXN0W3N0cl0pOgogICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICBzZWxmLmdyb3VwaW5ncyA9IGdyb3VwaW5ncwoKICBkZWYgYXR0ZW1wdChzZWxmLCBwaWxvdDogQXBwc0ZseWVyUGlsb3QpOgogICAgeWllbGQgQ2xpY2tFbGVtZW50TWFuZXV2ZXIoCiAgICAgIGluc3RydWN0aW9uPSdjbGljayB0aGUgZWRpdCBjb2hvcnQgYnV0dG9uJywKICAgICAgc2Vla2VyPWxhbWJkYSBwOiBwLnNvdXAuZmluZCgnZGl2JywgeydjbGFzcyc6ICdlZGl0LWJ1dHRvbid9LCB0ZXh0PXJlLmNvbXBpbGUoJ0VkaXQgY29ob3J0JykpCiAgICApCiAgICBzbGVlcCgxKQogICAgZm9yIF8gaW4gcmFuZ2UobWF4KDAsIGxlbihzZWxmLmdyb3VwaW5ncykgLSAxKSk6CiAgICAgIHlpZWxkIENsaWNrRWxlbWVudE1hbmV1dmVyKAogICAgICAgIGluc3RydWN0aW9uPSdhZGQgYSByZXBvcnQgZ3JvdXBpbmcnLAogICAgICAgIHNlZWtlcj1sYW1iZGEgcDogcC5zb3VwLmZpbmQoJ2RpdicsIHsnY2xhc3MnOiAnbGluay10aXRsZSd9LCB0ZXh0PXJlLmNvbXBpbGUoJ0dyb3VwIGJ5JykpCiAgICAgICkKICAgICAgc2xlZXAoLjUpCiAgICAKICAgIHBhcnNlciA9IEdyb3VwQnlEcm9wZG93bnNQYXJzZXIuZnJvbV9icm93c2VyKGJyb3dzZXI9cGlsb3QuYnJvd3NlcikKICAgIGdyb3VwX2J5X2NoaWxkcmVuID0gcGFyc2VyLnBhcnNlKCkuZGVwbG95KCkKCiAgICBhc3NlcnQgbGVuKGdyb3VwX2J5X2NoaWxkcmVuKSA9PSBsZW4oc2VsZi5ncm91cGluZ3MpCiAgICBjaGlsZHJlbiA9IFtFbGVtZW50KHNvdXBfZWxlbWVudD1jLCBicm93c2VyPXBpbG90LmJyb3dzZXIpIGZvciBjIGluIGdyb3VwX2J5X2NoaWxkcmVuXQogICAgY2hpbGRyZW4gPSBbYyBmb3IgYyBpbiBjaGlsZHJlbiBpZiBjLnNvdXBfZWxlbWVudC50ZXh0IG5vdCBpbiBzZWxmLmdyb3VwaW5nc10KICAgIGZpbHRlcmVkX2dyb3VwaW5ncyA9IFtnIGZvciBnIGluIHNlbGYuZ3JvdXBpbmdzIGlmIGcgbm90IGluIFtnLnRleHQgZm9yIGcgaW4gZ3JvdXBfYnlfY2hpbGRyZW5dXQoKICAgIGZvciBpbmRleCwgY2hpbGQgaW4gZW51bWVyYXRlKGNoaWxkcmVuKToKICAgICAgY2hpbGQuY2xpY2soKQogICAgICBpbnB1dF9lbGVtZW50ID0gRWxlbWVudCgKICAgICAgICBzb3VwX2VsZW1lbnQ9Y2hpbGQuc291cF9lbGVtZW50LmZpbmRDaGlsZCgnaW5wdXQnKSwKICAgICAgICBicm93c2VyPXBpbG90LmJyb3dzZXIKICAgICAgKQogICAgICBpbnB1dF9lbGVtZW50LnNlbmRfa2V5cyhmaWx0ZXJlZF9ncm91cGluZ3NbaW5kZXhdKQogICAgICBzbGVlcCguNSkKICAgICAgaW5wdXRfZWxlbWVudC5zZW5kX2tleXMoS2V5cy5ET1dOKQogICAgICBpbnB1dF9lbGVtZW50LnNlbmRfa2V5cyhLZXlzLkVOVEVSKQogICAgICBzbGVlcCguNSkKICAgIAogICAgeWllbGQgQ2xpY2tFbGVtZW50TWFuZXV2ZXIoCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgaW5zdHJ1Y3Rpb249J2NsaWNrIHRoZSBhcHBseSBjaGFuZ2VzIGJ1dHRvbicsCiAgICAgIHNlZWtlcj1sYW1iZGEgcDogcC5zb3VwLmZpbmQoJ2J1dHRvbicsIHRleHQ9cmUuY29tcGlsZSgnQXBwbHkgY2hhbmdlcycpKQo8fGZpbV9lbmR8Pg=="]
["e753687fe91b0118efefbd5b1f6e720a0f34be0c-1","e753687fe91b0118efefbd5b1f6e720a0f34be0c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIGtlcmFzLmxheWVycyBpbXBvcnQgSW5wdXQsIENvbnYyRCwgRmxhdHRlbiwgRGVuc2UsIENvbnYyRFRyYW5zcG9zZSwgTGFtYmRhLCBSZXNoYXBlCmZyb20ga2VyYXMubW9kZWxzIGltcG9ydCBNb2RlbApmcm9tIGtlcmFzLnJlZ3VsYXJpemVycyBpbXBvcnQgbDIKZnJvbSBrZXJhcyBpbXBvcnQgYmFja2VuZCBhcyBLICAgIyBodHRwczovL2tlcmFzLmlvL2JhY2tlbmQvCmZyb20ga2VyYXMub3B0aW1pemVycyBpbXBvcnQgQWRhbSwgU0dECmZyb20ga2VyYXMuY2FsbGJhY2tzIGltcG9ydCBDYWxsYmFjawppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CgoKaW1wb3J0IHN5cwpzeXMucGF0aC5hcHBlbmQoIi4uIikKaW1wb3J0IGNvbmZpZwoKSU5QVVRfRElNID0gY29uZmlnLmlucHV0X2RpbQojIEVuY29kZXIKQ09OVl9GSUxURVJTID0gWzMyLCA2NCwgMTI4LCAyNTZdCkNPTlZfS0VSTkVMX1NJWkVTID0gWygzLCA0KSwgKDMsIDQpLCAoMywgNCksICgzLCA0KV0KQ09OVl9TVFJJREVTID0gWzIsIDIsIDIsIDJdCkNPTlZfQUNUSVZBVElPTlMgPSBbJ3JlbHUnLCAncmVsdScsICdyZWx1JywgJ3JlbHUnXQoKREVOU0VfU0laRSA9IDEwMjQKCiMgRGVjb2RlcgpDT05WX1RfRklMVEVSUyA9IFsxMjgsIDY0LCAzMiwgM10KQ09OVl9UX0tFUk5FTF9TSVpFUyA9IFsoNCwgNSksICg0LCA1KSwgKDQsIDYpLCAoNiwgNildCkNPTlZfVF9TVFJJREVTID0gWzIsIDIsIDIsIDJdCkNPTlZfVF9BQ1RJVkFUSU9OUyA9IFsncmVsdScsICdyZWx1JywgJ3JlbHUnLCAnc2lnbW9pZCddCgpaX0RJTSA9IGNvbmZpZy5sYXRlbnRfdmVjdG9yX2RpbQpFUE9DSFMgPSAyCkJBVENIX1NJWkUgPSAyNTYKCgpkZWYgc2FtcGxpbmcoYXJncyk6CiAgICB6X21lYW4sIHpfbG9nX3ZhciA9IGFyZ3MKICAgIGVwc2lsb24gPSBLLnJhbmRvbV9ub3JtYWwoc2hhcGU9KEsuc2hhcGUoel9tZWFuKVswXSwgWl9ESU0pLCBtZWFuPTAuLCBzdGRkZXY9MS4pCiAgICByZXR1cm4gel9tZWFuICsgSy5leHAoel9sb2dfdmFyIC8gMikgKiBlcHNpbG9uCgoKIyBkcmF3IHRoZSB0cmFpbmluZyBsb3NzCmNsYXNzIExvc3NIaXN0b3J5KENhbGxiYWNrKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmxvc3NlcyA9IHsnYmF0Y2gnOiBbXSwgJ2Vwb2NoJzogW119CiAgICAgICAgc2VsZi5hY2N1cmFjeSA9IHsnYmF0Y2gnOiBbXSwgJ2Vwb2NoJzogW119CiAgICAgICAgc2VsZi52YWxfbG9zcyA9IHsnYmF0Y2gnOiBbXSwgJ2Vwb2NoJzogW119CiAgICAgICAgc2VsZi52YWxfYWNjID0geydiYXRjaCc6IFtdLCAnZXBvY2gnOiBbXX0KCiAgICBkZWYgb25fdHJhaW5fYmVnaW4oc2VsZiwgbG9ncz17fSk6CiAgICAgICAgcGFzcwoKICAgIGRlZiBvbl9iYXRjaF9lbmQoc2VsZiwgYmF0Y2gsIGxvZ3M9e30pOgogICAgICAgIHNlbGYubG9zc2VzWydiYXRjaCddLmFwcGVuZChsb2dzLmdldCgnbG9zcycpKQogICAgICAgIHNlbGYuYWNjdXJhY3lbJ2JhdGNoJ10uYXBwZW5kKGxvZ3MuZ2V0KCdhY2MnKSkKICAgICAgICBzZWxmLnZhbF9sb3NzWydiYXRjaCddLmFwcGVuZChsb2dzLmdldCgndmFsX2xvc3MnKSkKICAgICAgICBzZWxmLnZhbF9hY2NbJ2JhdGNoJ10uYXBwZW5kKGxvZ3MuZ2V0KCd2YWxfYWNjJykpCgogICAgZGVmIG9uX2Vwb2NoX2VuZChzZWxmLCBiYXRjaCwgbG9ncz17fSk6CiAgICAgICAgc2VsZi5sb3NzZXNbJ2Vwb2NoJ10uYXBwZW5kKGxvZ3MuZ2V0KCdsb3NzJykpCiAgICAgICAgc2VsZi5hY2N1cmFjeVsnZXBvY2gnXS5hcHBlbmQobG9ncy5nZXQoJ2FjYycpKQogICAgICAgIHNlbGYudmFsX2xvc3NbJ2Vwb2NoJ10uYXBwZW5kKGxvZ3MuZ2V0KCd2YWxfbG9zcycpKQogICAgICAgIHNlbGYudmFsX2FjY1snZXBvY2gnXS5hcHBlbmQobG9ncy5nZXQoJ3ZhbF9hY2MnKSkKCiAgICBkZWYgbG9zc19wbG90KHNlbGYsIGxvc3NfdHlwZSk6CiAgICAgICAgaXRlcnMgPSByYW5nZShsZW4oc2VsZi5sb3NzZXNbbG9zc190eXBlXSkpCiAgICAgICAgcGx0LmZpZ3VyZSgpCiAgICAgICAgIyBhY2MKICAgICAgICAjIHBsdC5wbG90KGl0ZXJzLCBzZWxmLmFjY3VyYWN5W2xvc3NfdHlwZV0sICdyJywgbGFiZWw9J3RyYWluIGFjYycpCiAgICAgICAgIyBsb3NzCiAgICAgICAgcGx0LnBsb3QoaXRlcnMsIHNlbGYubG9zc2VzW2xvc3NfdHlwZV0sICdnJywgbGFiZWw9J3RyYWluIGxvc3MnKQogICAgICAgIGlmIGxvc3NfdHlwZSA9PSAnZXBvY2gnOgogICAgICAgICAgICAjIHZhbF9hY2MKICAgICAgICAgICAgIyBwbHQucGxvdChpdGVycywgc2VsZi52YWxfYWNjW2xvc3NfdHlwZV0sICdiJywgbGFiZWw9J3ZhbCBhY2MnKQogICAgICAgICAgICAjIHZhbF9sb3NzCiAgICAgICAgICAgIHBsdC5wbG90KGl0ZXJzLCBzZWxmLnZhbF9sb3NzW2xvc3NfdHlwZV0sICdrJywgbGFiZWw9J3ZhbCBsb3NzJykKICAgICAgICBwbHQuZ3JpZChUcnVlKQogICAgICAgIHBsdC54bGFiZWwobG9zc190eXBlKQogICAgICAgIHBsdC55bGFiZWwoJ2FjYy1sb3NzJykKICAgICAgICBwbHQubGVnZW5kKGxvYz0idXBwZXIgcmlnaHQiKQogICAgICAgIHBsdC5zaG93KCkKCgpjbGFzcyBWQUUoKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLm1vZGVscyA9IHNlbGYuX2J1aWxkKCkKICAgICAgICBzZWxmLm1vZGVsID0gc2VsZi5tb2RlbHNbMF0KICAgICAgICBzZWxmLmVuY29kZXIgPSBzZWxmLm1vZGVsc1sxXQogICAgICAgIHNlbGYuZGVjb2RlciA9IHNlbGYubW9kZWxzWzJdCiAgICAgICAgc2VsZi5oaXN0b3J5ID0gTG9zc0hpc3RvcnkoKQoKICAgICAgICBzZWxmLmlucHV0X2RpbSA9IElOUFVUX0RJTQogICAgICAgIHNlbGYuel9kaW0gPSBaX0RJTQoKICAgIGRlZiBfYnVpbGQoc2VsZik6CiAgICAgICAgdmFlX3ggPSBJbnB1dChzaGFwZT1JTlBVVF9ESU0pCiAgICAgICAgdmFlX2MxID0gQ29udjJEKGZpbHRlcnM9Q09OVl9GSUxURVJTWzBdLCBrZXJuZWxfc2l6ZT1DT05WX0tFUk5FTF9TSVpFU1swXSwgc3RyaWRlcz1DT05WX1NUUklERVNbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc9J3ZhbGlkJywgZGF0YV9mb3JtYXQ9J2NoYW5uZWxzX2xhc3QnLCBhY3RpdmF0aW9uPUNPTlZfQUNUSVZBVElPTlNbMF0pKHZhZV94KSAgIyAsIGtlcm5lbF9yZWd1bGFyaXplcj1sMigwLjAwMDEpKSh2YWVfeCkKICAgICAgICB2YWVfYzIgPSBDb252MkQoZmlsdGVycz1DT05WX0ZJTFRFUlNbMV0sIGtlcm5lbF9zaXplPUNPTlZfS0VSTkVMX1NJWkVTWzFdLCBzdHJpZGVzPUNPTlZfU1RSSURFU1sxXSwKICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZz0ndmFsaWQnLCBkYXRhX2Zvcm1hdD0nY2hhbm5lbHNfbGFzdCcsIGFjdGl2YXRpb249Q09OVl9BQ1RJVkFUSU9OU1sxXSkodmFlX2MxKSAgIyAsIGtlcm5lbF9yZWd1bGFyaXplcj1sMigwLjAwMDEpKSh2YWVfYzEpCiAgICAgICAgdmFlX2MzID0gQ29udjJEKGZpbHRlcnM9Q09OVl9GSUxURVJTWzJdLCBrZXJuZWxfc2l6ZT1DT05WX0tFUk5FTF9TSVpFU1syXSwgc3RyaWRlcz1DT05WX1NUUklERVNbMl0sCiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc9J3ZhbGlkJywgZGF0YV9mb3JtYXQ9J2NoYW5uZWxzX2xhc3QnLCBhY3RpdmF0aW9uPUNPTlZfQUNUSVZBVElPTlNbMl0pKHZhZV9jMikgICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKSkodmFlX2MyKQogICAgICAgIHZhZV9jNCA9IENvbnYyRChmaWx0ZXJzPUNPTlZfRklMVEVSU1szXSwga2VybmVsX3NpemU9Q09OVl9LRVJORUxfU0laRVNbM10sIHN0cmlkZXM9Q09OVl9TVFJJREVTWzNdLAogICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nPSd2YWxpZCcsIGRhdGFfZm9ybWF0PSdjaGFubmVsc19sYXN0JywgYWN0aXZhdGlvbj1DT05WX0FDVElWQVRJT05TWzNdKSh2YWVfYzMpICAjICwga2VybmVsX3JlZ3VsYXJpemVyPWwyKDAuMDAwMSkpKHZhZV9jMykKCiAgICAgICAgdmFlX3pfaW4gPSBGbGF0dGVuKCkodmFlX2M0KQoKICAgICAgICB2YWVfel9tZWFuID0gRGVuc2UoWl9ESU0pKHZhZV96X2luKSAgIyAsIGtlcm5lbF9yZWd1bGFyaXplcj1sMigwLjAwMDEpCiAgICAgICAgdmFlX3pfbG9nX3ZhciA9IERlbnNlKFpfRElNKSh2YWVfel9pbikgICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKQoKICAgICAgICB2YWVfeiA9IExhbWJkYShzYW1wbGluZykoW3ZhZV96X21lYW4sIHZhZV96X2xvZ192YXJdKQogICAgICAgIHZhZV96X2lucHV0ID0gSW5wdXQoc2hhcGU9KFpfRElNLCkpCgogICAgICAgICMgd2UgaW5zdGFudGlhdGUgdGhlc2UgbGF5ZXJzIHNlcGFyYXRlbHkgc28gYXMgdG8gcmV1c2UgdGhlbSBsYXRlcgogICAgICAgIHZhZV9kZW5zZSA9IERlbnNlKDEwMjQpICAjICwga2VybmVsX3JlZ3VsYXJpemVyPWwyKDAuMDAwMSkKICAgICAgICB2YWVfZGVuc2VfbW9kZWwgPSB2YWVfZGVuc2UodmFlX3opCgogICAgICAgIHZhZV96X291dCA9IFJlc2hhcGUoKDEsIDEsIERFTlNFX1NJWkUpKQogICAgICAgIHZhZV96X291dF9tb2RlbCA9IHZhZV96X291dCh2YWVfZGVuc2VfbW9kZWwpCgogICAgICAgIHZhZV9kMSA9IENvbnYyRFRyYW5zcG9zZShmaWx0ZXJzPUNPTlZfVF9GSUxURVJTWzBdLCBrZXJuZWxfc2l6ZT1DT05WX1RfS0VSTkVMX1NJWkVTWzBdLCBwYWRkaW5nPSd2YWxpZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZm9ybWF0PSdjaGFubmVsc19sYXN0Jywgc3RyaWRlcz1DT05WX1RfU1RSSURFU1swXSwgYWN0aXZhdGlvbj1DT05WX1RfQUNUSVZBVElPTlNbMF0pICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKSkKICAgICAgICB2YWVfZDFfbW9kZWwgPSB2YWVfZDEodmFlX3pfb3V0X21vZGVsKQogICAgICAgIHZhZV9kMiA9IENvbnYyRFRyYW5zcG9zZShmaWx0ZXJzPUNPTlZfVF9GSUxURVJTWzFdLCBrZXJuZWxfc2l6ZT1DT05WX1RfS0VSTkVMX1NJWkVTWzFdLCBwYWRkaW5nPSd2YWxpZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZm9ybWF0PSdjaGFubmVsc19sYXN0Jywgc3RyaWRlcz1DT05WX1RfU1RSSURFU1sxXSwgYWN0aXZhdGlvbj1DT05WX1RfQUNUSVZBVElPTlNbMV0pICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKSkKICAgICAgICB2YWVfZDJfbW9kZWwgPSB2YWVfZDIodmFlX2QxX21vZGVsKQogICAgICAgIHZhZV9kMyA9IENvbnYyRFRyYW5zcG9zZShmaWx0ZXJzPUNPTlZfVF9GSUxURVJTWzJdLCBrZXJuZWxfc2l6ZT1DT05WX1RfS0VSTkVMX1NJWkVTWzJdLCBwYWRkaW5nPSd2YWxpZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZm9ybWF0PSdjaGFubmVsc19sYXN0Jywgc3RyaWRlcz1DT05WX1RfU1RSSURFU1syXSwgYWN0aXZhdGlvbj1DT05WX1RfQUNUSVZBVElPTlNbMl0pICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKSkKICAgICAgICB2YWVfZDNfbW9kZWwgPSB2YWVfZDModmFlX2QyX21vZGVsKQogICAgICAgIHZhZV9kNCA9IENvbnYyRFRyYW5zcG9zZShmaWx0ZXJzPUNPTlZfVF9GSUxURVJTWzNdLCBrZXJuZWxfc2l6ZT1DT05WX1RfS0VSTkVMX1NJWkVTWzNdLCBwYWRkaW5nPSd2YWxpZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZm9ybWF0PSdjaGFubmVsc19sYXN0Jywgc3RyaWRlcz1DT05WX1RfU1RSSURFU1szXSwgYWN0aXZhdGlvbj1DT05WX1RfQUNUSVZBVElPTlNbM10pICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKSkKICAgICAgICB2YWVfZDRfbW9kZWwgPSB2YWVfZDQodmFlX2QzX21vZGVsKQoKICAgICAgICAjIERFQ09ERVIgT05MWQogICAgICAgIHZhZV9kZW5zZV9kZWNvZGVyID0gdmFlX2RlbnNlKHZhZV96X2lucHV0KQogICAgICAgIHZhZV96X291dF9kZWNvZGVyID0gdmFlX3pfb3V0KHZhZV9kZW5zZV9kZWNvZGVyKQoKICAgICAgICB2YWVfZDFfZGVjb2RlciA9IHZhZV9kMSh2YWVfel9vdXRfZGVjb2RlcikKICAgICAgICB2YWVfZDJfZGVjb2RlciA9IHZhZV9kMih2YWVfZDFfZGVjb2RlcikKICAgICAgICB2YWVfZDNfZGVjb2RlciA9IHZhZV9kMyh2YWVfZDJfZGVjb2RlcikKICAgICAgICB2YWVfZDRfZGVjb2RlciA9IHZhZV9kNCh2YWVfZDNfZGVjb2RlcikKCiAgICAgICAgIyBNT0RFTFMKICAgICAgICB2YWUgPSBNb2RlbCh2YWVfeCwgdmFlX2Q0X21vZGVsKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgdmFlX2VuY29kZXIgPSBNb2RlbCh2YWVfeCwgdmFlX3opCiAgICAgICAgdmFlX2RlY29kZXIgPSBNb2RlbCh2YWVfel9pbnB1dCwgdmFlX2Q0X2RlY29kZXIpCgogICAgICAgIGRlZiB2YWVfcl9sb3NzKHlfdHJ1ZSwgeV9wcmVkKToKPHxmaW1fZW5kfD4="]
["e753687fe91b0118efefbd5b1f6e720a0f34be0c-2","e753687fe91b0118efefbd5b1f6e720a0f34be0c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIGtlcmFzLmxheWVycyBpbXBvcnQgSW5wdXQsIENvbnYyRCwgRmxhdHRlbiwgRGVuc2UsIENvbnYyRFRyYW5zcG9zZSwgTGFtYmRhLCBSZXNoYXBlCmZyb20ga2VyYXMubW9kZWxzIGltcG9ydCBNb2RlbApmcm9tIGtlcmFzLnJlZ3VsYXJpemVycyBpbXBvcnQgbDIKZnJvbSBrZXJhcyBpbXBvcnQgYmFja2VuZCBhcyBLICAgIyBodHRwczovL2tlcmFzLmlvL2JhY2tlbmQvCmZyb20ga2VyYXMub3B0aW1pemVycyBpbXBvcnQgQWRhbSwgU0dECmZyb20ga2VyYXMuY2FsbGJhY2tzIGltcG9ydCBDYWxsYmFjawppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CgoKaW1wb3J0IHN5cwpzeXMucGF0aC5hcHBlbmQoIi4uIikKaW1wb3J0IGNvbmZpZwoKSU5QVVRfRElNID0gY29uZmlnLmlucHV0X2RpbQojIEVuY29kZXIKQ09OVl9GSUxURVJTID0gWzMyLCA2NCwgMTI4LCAyNTZdCkNPTlZfS0VSTkVMX1NJWkVTID0gWygzLCA0KSwgKDMsIDQpLCAoMywgNCksICgzLCA0KV0KQ09OVl9TVFJJREVTID0gWzIsIDIsIDIsIDJdCkNPTlZfQUNUSVZBVElPTlMgPSBbJ3JlbHUnLCAncmVsdScsICdyZWx1JywgJ3JlbHUnXQoKREVOU0VfU0laRSA9IDEwMjQKCiMgRGVjb2RlcgpDT05WX1RfRklMVEVSUyA9IFsxMjgsIDY0LCAzMiwgM10KQ09OVl9UX0tFUk5FTF9TSVpFUyA9IFsoNCwgNSksICg0LCA1KSwgKDQsIDYpLCAoNiwgNildCkNPTlZfVF9TVFJJREVTID0gWzIsIDIsIDIsIDJdCkNPTlZfVF9BQ1RJVkFUSU9OUyA9IFsncmVsdScsICdyZWx1JywgJ3JlbHUnLCAnc2lnbW9pZCddCgpaX0RJTSA9IGNvbmZpZy5sYXRlbnRfdmVjdG9yX2RpbQpFUE9DSFMgPSAyCkJBVENIX1NJWkUgPSAyNTYKCgpkZWYgc2FtcGxpbmcoYXJncyk6CiAgICB6X21lYW4sIHpfbG9nX3ZhciA9IGFyZ3MKICAgIGVwc2lsb24gPSBLLnJhbmRvbV9ub3JtYWwoc2hhcGU9KEsuc2hhcGUoel9tZWFuKVswXSwgWl9ESU0pLCBtZWFuPTAuLCBzdGRkZXY9MS4pCiAgICByZXR1cm4gel9tZWFuICsgSy5leHAoel9sb2dfdmFyIC8gMikgKiBlcHNpbG9uCgoKIyBkcmF3IHRoZSB0cmFpbmluZyBsb3NzCmNsYXNzIExvc3NIaXN0b3J5KENhbGxiYWNrKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmxvc3NlcyA9IHsnYmF0Y2gnOiBbXSwgJ2Vwb2NoJzogW119CiAgICAgICAgc2VsZi5hY2N1cmFjeSA9IHsnYmF0Y2gnOiBbXSwgJ2Vwb2NoJzogW119CiAgICAgICAgc2VsZi52YWxfbG9zcyA9IHsnYmF0Y2gnOiBbXSwgJ2Vwb2NoJzogW119CiAgICAgICAgc2VsZi52YWxfYWNjID0geydiYXRjaCc6IFtdLCAnZXBvY2gnOiBbXX0KCiAgICBkZWYgb25fdHJhaW5fYmVnaW4oc2VsZiwgbG9ncz17fSk6CiAgICAgICAgcGFzcwoKICAgIGRlZiBvbl9iYXRjaF9lbmQoc2VsZiwgYmF0Y2gsIGxvZ3M9e30pOgogICAgICAgIHNlbGYubG9zc2VzWydiYXRjaCddLmFwcGVuZChsb2dzLmdldCgnbG9zcycpKQogICAgICAgIHNlbGYuYWNjdXJhY3lbJ2JhdGNoJ10uYXBwZW5kKGxvZ3MuZ2V0KCdhY2MnKSkKICAgICAgICBzZWxmLnZhbF9sb3NzWydiYXRjaCddLmFwcGVuZChsb2dzLmdldCgndmFsX2xvc3MnKSkKICAgICAgICBzZWxmLnZhbF9hY2NbJ2JhdGNoJ10uYXBwZW5kKGxvZ3MuZ2V0KCd2YWxfYWNjJykpCgogICAgZGVmIG9uX2Vwb2NoX2VuZChzZWxmLCBiYXRjaCwgbG9ncz17fSk6CiAgICAgICAgc2VsZi5sb3NzZXNbJ2Vwb2NoJ10uYXBwZW5kKGxvZ3MuZ2V0KCdsb3NzJykpCiAgICAgICAgc2VsZi5hY2N1cmFjeVsnZXBvY2gnXS5hcHBlbmQobG9ncy5nZXQoJ2FjYycpKQogICAgICAgIHNlbGYudmFsX2xvc3NbJ2Vwb2NoJ10uYXBwZW5kKGxvZ3MuZ2V0KCd2YWxfbG9zcycpKQo8fGZpbV9ob2xlfD4KICAgIGRlZiBsb3NzX3Bsb3Qoc2VsZiwgbG9zc190eXBlKToKICAgICAgICBpdGVycyA9IHJhbmdlKGxlbihzZWxmLmxvc3Nlc1tsb3NzX3R5cGVdKSkKICAgICAgICBwbHQuZmlndXJlKCkKICAgICAgICAjIGFjYwogICAgICAgICMgcGx0LnBsb3QoaXRlcnMsIHNlbGYuYWNjdXJhY3lbbG9zc190eXBlXSwgJ3InLCBsYWJlbD0ndHJhaW4gYWNjJykKICAgICAgICAjIGxvc3MKICAgICAgICBwbHQucGxvdChpdGVycywgc2VsZi5sb3NzZXNbbG9zc190eXBlXSwgJ2cnLCBsYWJlbD0ndHJhaW4gbG9zcycpCiAgICAgICAgaWYgbG9zc190eXBlID09ICdlcG9jaCc6CiAgICAgICAgICAgICMgdmFsX2FjYwogICAgICAgICAgICAjIHBsdC5wbG90KGl0ZXJzLCBzZWxmLnZhbF9hY2NbbG9zc190eXBlXSwgJ2InLCBsYWJlbD0ndmFsIGFjYycpCiAgICAgICAgICAgICMgdmFsX2xvc3MKICAgICAgICAgICAgcGx0LnBsb3QoaXRlcnMsIHNlbGYudmFsX2xvc3NbbG9zc190eXBlXSwgJ2snLCBsYWJlbD0ndmFsIGxvc3MnKQogICAgICAgIHBsdC5ncmlkKFRydWUpCiAgICAgICAgcGx0LnhsYWJlbChsb3NzX3R5cGUpCiAgICAgICAgcGx0LnlsYWJlbCgnYWNjLWxvc3MnKQogICAgICAgIHBsdC5sZWdlbmQobG9jPSJ1cHBlciByaWdodCIpCiAgICAgICAgcGx0LnNob3coKQoKCmNsYXNzIFZBRSgpOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYubW9kZWxzID0gc2VsZi5fYnVpbGQoKQogICAgICAgIHNlbGYubW9kZWwgPSBzZWxmLm1vZGVsc1swXQogICAgICAgIHNlbGYuZW5jb2RlciA9IHNlbGYubW9kZWxzWzFdCiAgICAgICAgc2VsZi5kZWNvZGVyID0gc2VsZi5tb2RlbHNbMl0KICAgICAgICBzZWxmLmhpc3RvcnkgPSBMb3NzSGlzdG9yeSgpCgogICAgICAgIHNlbGYuaW5wdXRfZGltID0gSU5QVVRfRElNCiAgICAgICAgc2VsZi56X2RpbSA9IFpfRElNCgogICAgZGVmIF9idWlsZChzZWxmKToKICAgICAgICB2YWVfeCA9IElucHV0KHNoYXBlPUlOUFVUX0RJTSkKICAgICAgICB2YWVfYzEgPSBDb252MkQoZmlsdGVycz1DT05WX0ZJTFRFUlNbMF0sIGtlcm5lbF9zaXplPUNPTlZfS0VSTkVMX1NJWkVTWzBdLCBzdHJpZGVzPUNPTlZfU1RSSURFU1swXSwKICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZz0ndmFsaWQnLCBkYXRhX2Zvcm1hdD0nY2hhbm5lbHNfbGFzdCcsIGFjdGl2YXRpb249Q09OVl9BQ1RJVkFUSU9OU1swXSkodmFlX3gpICAjICwga2VybmVsX3JlZ3VsYXJpemVyPWwyKDAuMDAwMSkpKHZhZV94KQogICAgICAgIHZhZV9jMiA9IENvbnYyRChmaWx0ZXJzPUNPTlZfRklMVEVSU1sxXSwga2VybmVsX3NpemU9Q09OVl9LRVJORUxfU0laRVNbMV0sIHN0cmlkZXM9Q09OVl9TVFJJREVTWzFdLAogICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nPSd2YWxpZCcsIGRhdGFfZm9ybWF0PSdjaGFubmVsc19sYXN0JywgYWN0aXZhdGlvbj1DT05WX0FDVElWQVRJT05TWzFdKSh2YWVfYzEpICAjICwga2VybmVsX3JlZ3VsYXJpemVyPWwyKDAuMDAwMSkpKHZhZV9jMSkKICAgICAgICB2YWVfYzMgPSBDb252MkQoZmlsdGVycz1DT05WX0ZJTFRFUlNbMl0sIGtlcm5lbF9zaXplPUNPTlZfS0VSTkVMX1NJWkVTWzJdLCBzdHJpZGVzPUNPTlZfU1RSSURFU1syXSwKICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZz0ndmFsaWQnLCBkYXRhX2Zvcm1hdD0nY2hhbm5lbHNfbGFzdCcsIGFjdGl2YXRpb249Q09OVl9BQ1RJVkFUSU9OU1syXSkodmFlX2MyKSAgIyAsIGtlcm5lbF9yZWd1bGFyaXplcj1sMigwLjAwMDEpKSh2YWVfYzIpCiAgICAgICAgdmFlX2M0ID0gQ29udjJEKGZpbHRlcnM9Q09OVl9GSUxURVJTWzNdLCBrZXJuZWxfc2l6ZT1DT05WX0tFUk5FTF9TSVpFU1szXSwgc3RyaWRlcz1DT05WX1NUUklERVNbM10sCiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc9J3ZhbGlkJywgZGF0YV9mb3JtYXQ9J2NoYW5uZWxzX2xhc3QnLCBhY3RpdmF0aW9uPUNPTlZfQUNUSVZBVElPTlNbM10pKHZhZV9jMykgICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKSkodmFlX2MzKQoKICAgICAgICB2YWVfel9pbiA9IEZsYXR0ZW4oKSh2YWVfYzQpCgogICAgICAgIHZhZV96X21lYW4gPSBEZW5zZShaX0RJTSkodmFlX3pfaW4pICAjICwga2VybmVsX3JlZ3VsYXJpemVyPWwyKDAuMDAwMSkKICAgICAgICB2YWVfel9sb2dfdmFyID0gRGVuc2UoWl9ESU0pKHZhZV96X2luKSAgIyAsIGtlcm5lbF9yZWd1bGFyaXplcj1sMigwLjAwMDEpCgogICAgICAgIHZhZV96ID0gTGFtYmRhKHNhbXBsaW5nKShbdmFlX3pfbWVhbiwgdmFlX3pfbG9nX3Zhcl0pCiAgICAgICAgdmFlX3pfaW5wdXQgPSBJbnB1dChzaGFwZT0oWl9ESU0sKSkKCiAgICAgICAgIyB3ZSBpbnN0YW50aWF0ZSB0aGVzZSBsYXllcnMgc2VwYXJhdGVseSBzbyBhcyB0byByZXVzZSB0aGVtIGxhdGVyCiAgICAgICAgdmFlX2RlbnNlID0gRGVuc2UoMTAyNCkgICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKQogICAgICAgIHZhZV9kZW5zZV9tb2RlbCA9IHZhZV9kZW5zZSh2YWVfeikKCiAgICAgICAgdmFlX3pfb3V0ID0gUmVzaGFwZSgoMSwgMSwgREVOU0VfU0laRSkpCiAgICAgICAgdmFlX3pfb3V0X21vZGVsID0gdmFlX3pfb3V0KHZhZV9kZW5zZV9tb2RlbCkKCiAgICAgICAgdmFlX2QxID0gQ29udjJEVHJhbnNwb3NlKGZpbHRlcnM9Q09OVl9UX0ZJTFRFUlNbMF0sIGtlcm5lbF9zaXplPUNPTlZfVF9LRVJORUxfU0laRVNbMF0sIHBhZGRpbmc9J3ZhbGlkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9mb3JtYXQ9J2NoYW5uZWxzX2xhc3QnLCBzdHJpZGVzPUNPTlZfVF9TVFJJREVTWzBdLCBhY3RpdmF0aW9uPUNPTlZfVF9BQ1RJVkFUSU9OU1swXSkgIyAsIGtlcm5lbF9yZWd1bGFyaXplcj1sMigwLjAwMDEpKQogICAgICAgIHZhZV9kMV9tb2RlbCA9IHZhZV9kMSh2YWVfel9vdXRfbW9kZWwpCiAgICAgICAgdmFlX2QyID0gQ29udjJEVHJhbnNwb3NlKGZpbHRlcnM9Q09OVl9UX0ZJTFRFUlNbMV0sIGtlcm5lbF9zaXplPUNPTlZfVF9LRVJORUxfU0laRVNbMV0sIHBhZGRpbmc9J3ZhbGlkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9mb3JtYXQ9J2NoYW5uZWxzX2xhc3QnLCBzdHJpZGVzPUNPTlZfVF9TVFJJREVTWzFdLCBhY3RpdmF0aW9uPUNPTlZfVF9BQ1RJVkFUSU9OU1sxXSkgIyAsIGtlcm5lbF9yZWd1bGFyaXplcj1sMigwLjAwMDEpKQogICAgICAgIHZhZV9kMl9tb2RlbCA9IHZhZV9kMih2YWVfZDFfbW9kZWwpCiAgICAgICAgdmFlX2QzID0gQ29udjJEVHJhbnNwb3NlKGZpbHRlcnM9Q09OVl9UX0ZJTFRFUlNbMl0sIGtlcm5lbF9zaXplPUNPTlZfVF9LRVJORUxfU0laRVNbMl0sIHBhZGRpbmc9J3ZhbGlkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9mb3JtYXQ9J2NoYW5uZWxzX2xhc3QnLCBzdHJpZGVzPUNPTlZfVF9TVFJJREVTWzJdLCBhY3RpdmF0aW9uPUNPTlZfVF9BQ1RJVkFUSU9OU1syXSkgIyAsIGtlcm5lbF9yZWd1bGFyaXplcj1sMigwLjAwMDEpKQogICAgICAgIHZhZV9kM19tb2RlbCA9IHZhZV9kMyh2YWVfZDJfbW9kZWwpCiAgICAgICAgdmFlX2Q0ID0gQ29udjJEVHJhbnNwb3NlKGZpbHRlcnM9Q09OVl9UX0ZJTFRFUlNbM10sIGtlcm5lbF9zaXplPUNPTlZfVF9LRVJORUxfU0laRVNbM10sIHBhZGRpbmc9J3ZhbGlkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9mb3JtYXQ9J2NoYW5uZWxzX2xhc3QnLCBzdHJpZGVzPUNPTlZfVF9TVFJJREVTWzNdLCBhY3RpdmF0aW9uPUNPTlZfVF9BQ1RJVkFUSU9OU1szXSkgIyAsIGtlcm5lbF9yZWd1bGFyaXplcj1sMigwLjAwMDEpKQogICAgICAgIHZhZV9kNF9tb2RlbCA9IHZhZV9kNCh2YWVfZDNfbW9kZWwpCgogICAgICAgICMgREVDT0RFUiBPTkxZCiAgICAgICAgdmFlX2RlbnNlX2RlY29kZXIgPSB2YWVfZGVuc2UodmFlX3pfaW5wdXQpCiAgICAgICAgdmFlX3pfb3V0X2RlY29kZXIgPSB2YWVfel9vdXQodmFlX2RlbnNlX2RlY29kZXIpCgogICAgICAgIHZhZV9kMV9kZWNvZGVyID0gdmFlX2QxKHZhZV96X291dF9kZWNvZGVyKQogICAgICAgIHZhZV9kMl9kZWNvZGVyID0gdmFlX2QyKHZhZV9kMV9kZWNvZGVyKQogICAgICAgIHZhZV9kM19kZWNvZGVyID0gdmFlX2QzKHZhZV9kMl9kZWNvZGVyKQogICAgICAgIHZhZV9kNF9kZWNvZGVyID0gdmFlX2Q0KHZhZV9kM19kZWNvZGVyKQoKICAgICAgICAjIE1PREVMUwogICAgICAgIHZhZSA9IE1vZGVsKHZhZV94LCB2YWVfZDRfbW9kZWwpCiAgICAgICAgdmFlX2VuY29kZXIgPSBNb2RlbCh2YWVfeCwgdmFlX3opCiAgICAgICAgdmFlX2RlY29kZXIgPSBNb2RlbCh2YWVfel9pbnB1dCwgdmFlX2Q0X2RlY29kZXIpCgogICAgICAgIGRlZiB2YWVfcl9sb3NzKHlfdHJ1ZSwgeV9wcmVkKToKICAgICAgICAgICAgeV90cnVlX2ZsYXQgPSBLLmZsYXR0ZW4oeV90cnVlKQogICAgICAgICAgICB5X3ByZWRfZmxhdCA9IEsuZmxhdHRlbih5X3ByZWQpCgogICAgICAgICAgICByZXR1cm4gMTAgKiBLLm1lYW4oSy5zcXVhcmUoeV90cnVlX2ZsYXQgLSB5X3ByZWRfZmxhdCksIGF4aXM9LTEpCgogICAgICAgIGRlZiB2YWVfa2xfbG9zcyh5X3RydWUsIHlfcHJlZCk6CiAgICAgICAgICAgIGtsX2xvc3MgPSAtIDAuNSAqIEsubWVhbigxICsgdmFlX3pfbG9nX3ZhciAtIEsuc3F1YXJlKHZhZV96X21lYW4pIC0gSy5leHAodmFlX3pfbG9nX3ZhciksIGF4aXM9LTEpCiAgICAgICAgICAgICMgc3RvcCBvcHRpbWl6aW5nIGZvciBLTCBsb3NzIHRlcm0gb25jZSBpdCBpcyBsb3dlciB0aGFuIHNvbWUgbGV2ZWwsIHJhdGhlciB0aGFuIGxldHRpbmcgaXQgZ28gdG8gbmVhciB6ZXJvLgogICAgICAgICAgICAjIFNvIG9wdGltaXplIGZvciB0Zi5tYXgoS0wsIGdvb2RfZW5vdWdoX2tsX2xldmVsKSBpbnN0ZWFkLCB0byByZWxheCB0aGUgaW5mb3JtYXRpb24gYm90dGxlbmVjayBvZiB0aGUgVkFFLgogICAgICAgICAgICBrbF90b2xlcmFuY2UgPSAwLjUKICAgICAgICAgICAga2xfbG9zcyA9IEsubWF4aW11bShrbF9sb3NzLCBrbF90b2xlcmFuY2UqWl9ESU0pCiAgICAgICAgICAgIHJldHVybiBrbF9sb3NzCgogICAgICAgIGRlZiB2YWVfbG9zcyh5X3RydWUsIHlfcHJlZCk6CiAgICAgICAgICAgIHJldHVybiB2YWVfcl9sb3NzKHlfdHJ1ZSwgeV9wcmVkKSArIHZhZV9rbF9sb3NzKHlfdHJ1ZSwgeV9wcmVkKQoKICAgICAgICBvcHRpbWl6ZXIgPSBBZGFtKGxyPTAuMDAwMSkKICAgICAgICAjIG9wdGltaXplciA9IFNHRChscj0wLjAwMSwgZGVjYXk9MWUtNCwgbW9tZW50dW09MC45LCBuZXN0ZXJvdj1UcnVlKQogICAgICAgIHZhZS5jb21waWxlKG9wdGltaXplcj1vcHRpbWl6ZXIsIGxvc3M9dmFlX2xvc3MsIG1ldHJpY3M9W3ZhZV9yX2xvc3MsIHZhZV9rbF9sb3NzXSkKCiAgICAgICAgcmV0dXJuIFt2YWUsIHZhZV9lbmNvZGVyLCB2YWVfZGVjb2Rlcl0KCiAgICBkZWYgc2V0X3dlaWdodHMoc2VsZiwgZmlsZXBhdGgpOgogICAgICAgIHNlbGYubW9kZWwubG9hZF93ZWlnaHRzKGZpbGVwYXRoKQogICAgICAgIHByaW50KCJsb2FkIHdlaWdodHMge30gc3VjY2Vzc2Z1bGx5Ii5mb3JtYXQoZmlsZXBhdGgpKQoKICAgIGRlZiB0cmFpbihzZWxmLCBkYXRhLCBqPTAsIGk9MCk6CiAgICAgICAgY2FsbGJhY2tzX2xpc3QgPSBbc2VsZi5oaXN0b3J5XQoKICAgICAgICBzZWxmLm1vZGVsLmZpdChkYXRhLCBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgIHNodWZmbGU9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICBlcG9jaHM9RVBPQ0hTLAogICAgICAgICAgICAgICAgICAgICAgIGJhdGNoX3NpemU9QkFUQ0hfU0laRSwKICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3M9Y2FsbGJhY2tzX2xpc3QpCgogICAgICAgIHNlbGYubW9kZWwuc2F2ZV93ZWlnaHRzKCcuL21vZGVscy92YWVfd2VpZ2h0c18nICsgc3RyKGopICsgJ18nICsgc3RyKGkpICsgJy5oNScpCgogICAgZGVmIHBsb3RfbG9zcyhzZWxmKToKICAgICAgICBzZWxmLmhpc3RvcnkubG9zc19wbG90KCdiYXRjaCcpCgogICAgZGVmIHNhdmVfd2VpZ2h0cyhzZWxmLCBmaWxlcGF0aCk6CiAgICAgICAgc2VsZi5tb2RlbC5zYXZlX3dlaWdodHMoZmlsZXBhdGgpCgogICAgZGVmIGdldF92ZWN0b3Ioc2VsZiwgb2JzX2RhdGEpOgogICAgICAgIHogPSBzZWxmLmVuY29kZXIucHJlZGljdChucC5hcnJheShvYnNfZGF0YSkpCiAgICAgICAgcmV0dXJuIHoKCiAgICBkZWYgZ2V0X291dHB1dChzZWxmLCBpbnB1dF9kYXRhKToKICAgICAgICBpbnB1dF9kYXRhID0gbnAuYXNhcnJheShpbnB1dF9kYXRhKQogICAgICAgIGlmIGlucHV0X2RhdGEuc2hhcGUgPT0gKDEsIDMyKTogICMgMzItZGltIHZlY3RvcgogICAgICAgICAgICBvdXRwdXQgPSBzZWxmLmRlY29kZXIucHJlZGljdChpbnB1dF9kYXRhKQogICAgICAgICAgICByZXR1cm4gb3V0cHV0CiAgICAgICAgZWxpZiBpbnB1dF9kYXRhLnNoYXBlID09ICgxLCA0OCwgNjQsIDMpOiAgIyB0aGUgcmF3IGltYWdlCiAgICAgICAgICAgIG91dHB1dCA9IHNlbGYubW9kZWwucHJlZGljdChpbnB1dF9kYXRhKQogICAgICAgICAgICByZXR1cm4gb3V0cHV0CiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJJbnB1dCBzaGFwZSB7fSBpcyBub3QgcmlnaHQsIGl0IG5lZWRzIHRvIGJlICgxLDMyKSBvciAoMSw0OCw2NCwzKS4iLmZvcm1hdChpbnB1dF9kYXRhLnNoYXBlKSkKCiAgICBkZWYgZ2VuZXJhdGVfcm5uX2RhdGEoc2VsZiwgb2JzX2RhdGEsIGFjdGlvbl9kYXRhKToKICAgICAgICBybm5faW5wdXQgPSBbXQogICAgICAgIHJubl9vdXRwdXQgPSBbXQoKICAgICAgICBmb3IgaSwgaiBpbiB6aXAob2JzX2RhdGEsIGFjdGlvbl9kYXRhKToKICAgICAgICAgICAgaSA9IG5wLmFzYXJyYXkoaSkgLyAyNTUuMAogICAgICAgICAgICBybm5fel9pbnB1dCA9IHNlbGYuZW5jb2Rlci5wcmVkaWN0KGkpCiAgICAgICAgICAgIGNvbmMgPSBbbnAuY29uY2F0ZW5hdGUoW3gsIHldKSBmb3IgeCwgeSBpbiB6aXAocm5uX3pfaW5wdXQsIGopXQogICAgICAgICAgICBybm5faW5wdXQuYXBwZW5kKGNvbmNbOi0xXSkKICAgICAgICAgICAgcm5uX291dHB1dC5hcHBlbmQobnAuYXJyYXkocm5uX3pfaW5wdXRbMTpdKSkKCiAgICAgICAgcm5uX2lucHV0ID0gbnAuYXJyYXkocm5uX2lucHV0KQogICAgICAgIHJubl9vdXRwdXQgPSBucC5hcnJheShybm5fb3V0cHV0KQoKICAgICAgICByZXR1cm4gW3Jubl9pbnB1dCwgcm5uX291dHB1dF0KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi52YWxfYWNjWydlcG9jaCddLmFwcGVuZChsb2dzLmdldCgndmFsX2FjYycpKQoKPHxmaW1fZW5kfD4="]
["e753687fe91b0118efefbd5b1f6e720a0f34be0c-3","e753687fe91b0118efefbd5b1f6e720a0f34be0c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIGtlcmFzLmxheWVycyBpbXBvcnQgSW5wdXQsIENvbnYyRCwgRmxhdHRlbiwgRGVuc2UsIENvbnYyRFRyYW5zcG9zZSwgTGFtYmRhLCBSZXNoYXBlCmZyb20ga2VyYXMubW9kZWxzIGltcG9ydCBNb2RlbApmcm9tIGtlcmFzLnJlZ3VsYXJpemVycyBpbXBvcnQgbDIKZnJvbSBrZXJhcyBpbXBvcnQgYmFja2VuZCBhcyBLICAgIyBodHRwczovL2tlcmFzLmlvL2JhY2tlbmQvCmZyb20ga2VyYXMub3B0aW1pemVycyBpbXBvcnQgQWRhbSwgU0dECmZyb20ga2VyYXMuY2FsbGJhY2tzIGltcG9ydCBDYWxsYmFjawppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CgoKaW1wb3J0IHN5cwpzeXMucGF0aC5hcHBlbmQoIi4uIikKaW1wb3J0IGNvbmZpZwoKSU5QVVRfRElNID0gY29uZmlnLmlucHV0X2RpbQojIEVuY29kZXIKQ09OVl9GSUxURVJTID0gWzMyLCA2NCwgMTI4LCAyNTZdCkNPTlZfS0VSTkVMX1NJWkVTID0gWygzLCA0KSwgKDMsIDQpLCAoMywgNCksICgzLCA0KV0KQ09OVl9TVFJJREVTID0gWzIsIDIsIDIsIDJdCkNPTlZfQUNUSVZBVElPTlMgPSBbJ3JlbHUnLCAncmVsdScsICdyZWx1JywgJ3JlbHUnXQoKREVOU0VfU0laRSA9IDEwMjQKCiMgRGVjb2RlcgpDT05WX1RfRklMVEVSUyA9IFsxMjgsIDY0LCAzMiwgM10KQ09OVl9UX0tFUk5FTF9TSVpFUyA9IFsoNCwgNSksICg0LCA1KSwgKDQsIDYpLCAoNiwgNildCkNPTlZfVF9TVFJJREVTID0gWzIsIDIsIDIsIDJdCkNPTlZfVF9BQ1RJVkFUSU9OUyA9IFsncmVsdScsICdyZWx1JywgJ3JlbHUnLCAnc2lnbW9pZCddCgpaX0RJTSA9IGNvbmZpZy5sYXRlbnRfdmVjdG9yX2RpbQpFUE9DSFMgPSAyCkJBVENIX1NJWkUgPSAyNTYKCgpkZWYgc2FtcGxpbmcoYXJncyk6CiAgICB6X21lYW4sIHpfbG9nX3ZhciA9IGFyZ3MKICAgIGVwc2lsb24gPSBLLnJhbmRvbV9ub3JtYWwoc2hhcGU9KEsuc2hhcGUoel9tZWFuKVswXSwgWl9ESU0pLCBtZWFuPTAuLCBzdGRkZXY9MS4pCiAgICByZXR1cm4gel9tZWFuICsgSy5leHAoel9sb2dfdmFyIC8gMikgKiBlcHNpbG9uCgoKIyBkcmF3IHRoZSB0cmFpbmluZyBsb3NzCmNsYXNzIExvc3NIaXN0b3J5KENhbGxiYWNrKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmxvc3NlcyA9IHsnYmF0Y2gnOiBbXSwgJ2Vwb2NoJzogW119CiAgICAgICAgc2VsZi5hY2N1cmFjeSA9IHsnYmF0Y2gnOiBbXSwgJ2Vwb2NoJzogW119CiAgICAgICAgc2VsZi52YWxfbG9zcyA9IHsnYmF0Y2gnOiBbXSwgJ2Vwb2NoJzogW119CiAgICAgICAgc2VsZi52YWxfYWNjID0geydiYXRjaCc6IFtdLCAnZXBvY2gnOiBbXX0KCiAgICBkZWYgb25fdHJhaW5fYmVnaW4oc2VsZiwgbG9ncz17fSk6CiAgICAgICAgcGFzcwoKICAgIGRlZiBvbl9iYXRjaF9lbmQoc2VsZiwgYmF0Y2gsIGxvZ3M9e30pOgogICAgICAgIHNlbGYubG9zc2VzWydiYXRjaCddLmFwcGVuZChsb2dzLmdldCgnbG9zcycpKQogICAgICAgIHNlbGYuYWNjdXJhY3lbJ2JhdGNoJ10uYXBwZW5kKGxvZ3MuZ2V0KCdhY2MnKSkKICAgICAgICBzZWxmLnZhbF9sb3NzWydiYXRjaCddLmFwcGVuZChsb2dzLmdldCgndmFsX2xvc3MnKSkKICAgICAgICBzZWxmLnZhbF9hY2NbJ2JhdGNoJ10uYXBwZW5kKGxvZ3MuZ2V0KCd2YWxfYWNjJykpCgogICAgZGVmIG9uX2Vwb2NoX2VuZChzZWxmLCBiYXRjaCwgbG9ncz17fSk6CiAgICAgICAgc2VsZi5sb3NzZXNbJ2Vwb2NoJ10uYXBwZW5kKGxvZ3MuZ2V0KCdsb3NzJykpCiAgICAgICAgc2VsZi5hY2N1cmFjeVsnZXBvY2gnXS5hcHBlbmQobG9ncy5nZXQoJ2FjYycpKQogICAgICAgIHNlbGYudmFsX2xvc3NbJ2Vwb2NoJ10uYXBwZW5kKGxvZ3MuZ2V0KCd2YWxfbG9zcycpKQogICAgICAgIHNlbGYudmFsX2FjY1snZXBvY2gnXS5hcHBlbmQobG9ncy5nZXQoJ3ZhbF9hY2MnKSkKCiAgICBkZWYgbG9zc19wbG90KHNlbGYsIGxvc3NfdHlwZSk6CiAgICAgICAgaXRlcnMgPSByYW5nZShsZW4oc2VsZi5sb3NzZXNbbG9zc190eXBlXSkpCiAgICAgICAgcGx0LmZpZ3VyZSgpCiAgICAgICAgIyBhY2MKICAgICAgICAjIHBsdC5wbG90KGl0ZXJzLCBzZWxmLmFjY3VyYWN5W2xvc3NfdHlwZV0sICdyJywgbGFiZWw9J3RyYWluIGFjYycpCiAgICAgICAgIyBsb3NzCiAgICAgICAgcGx0LnBsb3QoaXRlcnMsIHNlbGYubG9zc2VzW2xvc3NfdHlwZV0sICdnJywgbGFiZWw9J3RyYWluIGxvc3MnKQogICAgICAgIGlmIGxvc3NfdHlwZSA9PSAnZXBvY2gnOgogICAgICAgICAgICAjIHZhbF9hY2MKICAgICAgICAgICAgIyBwbHQucGxvdChpdGVycywgc2VsZi52YWxfYWNjW2xvc3NfdHlwZV0sICdiJywgbGFiZWw9J3ZhbCBhY2MnKQogICAgICAgICAgICAjIHZhbF9sb3NzCiAgICAgICAgICAgIHBsdC5wbG90KGl0ZXJzLCBzZWxmLnZhbF9sb3NzW2xvc3NfdHlwZV0sICdrJywgbGFiZWw9J3ZhbCBsb3NzJykKICAgICAgICBwbHQuZ3JpZChUcnVlKQogICAgICAgIHBsdC54bGFiZWwobG9zc190eXBlKQogICAgICAgIHBsdC55bGFiZWwoJ2FjYy1sb3NzJykKICAgICAgICBwbHQubGVnZW5kKGxvYz0idXBwZXIgcmlnaHQiKQogICAgICAgIHBsdC5zaG93KCkKCgpjbGFzcyBWQUUoKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLm1vZGVscyA9IHNlbGYuX2J1aWxkKCkKICAgICAgICBzZWxmLm1vZGVsID0gc2VsZi5tb2RlbHNbMF0KICAgICAgICBzZWxmLmVuY29kZXIgPSBzZWxmLm1vZGVsc1sxXQo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLnpfZGltID0gWl9ESU0KCiAgICBkZWYgX2J1aWxkKHNlbGYpOgogICAgICAgIHZhZV94ID0gSW5wdXQoc2hhcGU9SU5QVVRfRElNKQogICAgICAgIHZhZV9jMSA9IENvbnYyRChmaWx0ZXJzPUNPTlZfRklMVEVSU1swXSwga2VybmVsX3NpemU9Q09OVl9LRVJORUxfU0laRVNbMF0sIHN0cmlkZXM9Q09OVl9TVFJJREVTWzBdLAogICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nPSd2YWxpZCcsIGRhdGFfZm9ybWF0PSdjaGFubmVsc19sYXN0JywgYWN0aXZhdGlvbj1DT05WX0FDVElWQVRJT05TWzBdKSh2YWVfeCkgICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKSkodmFlX3gpCiAgICAgICAgdmFlX2MyID0gQ29udjJEKGZpbHRlcnM9Q09OVl9GSUxURVJTWzFdLCBrZXJuZWxfc2l6ZT1DT05WX0tFUk5FTF9TSVpFU1sxXSwgc3RyaWRlcz1DT05WX1NUUklERVNbMV0sCiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc9J3ZhbGlkJywgZGF0YV9mb3JtYXQ9J2NoYW5uZWxzX2xhc3QnLCBhY3RpdmF0aW9uPUNPTlZfQUNUSVZBVElPTlNbMV0pKHZhZV9jMSkgICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKSkodmFlX2MxKQogICAgICAgIHZhZV9jMyA9IENvbnYyRChmaWx0ZXJzPUNPTlZfRklMVEVSU1syXSwga2VybmVsX3NpemU9Q09OVl9LRVJORUxfU0laRVNbMl0sIHN0cmlkZXM9Q09OVl9TVFJJREVTWzJdLAogICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nPSd2YWxpZCcsIGRhdGFfZm9ybWF0PSdjaGFubmVsc19sYXN0JywgYWN0aXZhdGlvbj1DT05WX0FDVElWQVRJT05TWzJdKSh2YWVfYzIpICAjICwga2VybmVsX3JlZ3VsYXJpemVyPWwyKDAuMDAwMSkpKHZhZV9jMikKICAgICAgICB2YWVfYzQgPSBDb252MkQoZmlsdGVycz1DT05WX0ZJTFRFUlNbM10sIGtlcm5lbF9zaXplPUNPTlZfS0VSTkVMX1NJWkVTWzNdLCBzdHJpZGVzPUNPTlZfU1RSSURFU1szXSwKICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZz0ndmFsaWQnLCBkYXRhX2Zvcm1hdD0nY2hhbm5lbHNfbGFzdCcsIGFjdGl2YXRpb249Q09OVl9BQ1RJVkFUSU9OU1szXSkodmFlX2MzKSAgIyAsIGtlcm5lbF9yZWd1bGFyaXplcj1sMigwLjAwMDEpKSh2YWVfYzMpCgogICAgICAgIHZhZV96X2luID0gRmxhdHRlbigpKHZhZV9jNCkKCiAgICAgICAgdmFlX3pfbWVhbiA9IERlbnNlKFpfRElNKSh2YWVfel9pbikgICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKQogICAgICAgIHZhZV96X2xvZ192YXIgPSBEZW5zZShaX0RJTSkodmFlX3pfaW4pICAjICwga2VybmVsX3JlZ3VsYXJpemVyPWwyKDAuMDAwMSkKCiAgICAgICAgdmFlX3ogPSBMYW1iZGEoc2FtcGxpbmcpKFt2YWVfel9tZWFuLCB2YWVfel9sb2dfdmFyXSkKICAgICAgICB2YWVfel9pbnB1dCA9IElucHV0KHNoYXBlPShaX0RJTSwpKQoKICAgICAgICAjIHdlIGluc3RhbnRpYXRlIHRoZXNlIGxheWVycyBzZXBhcmF0ZWx5IHNvIGFzIHRvIHJldXNlIHRoZW0gbGF0ZXIKICAgICAgICB2YWVfZGVuc2UgPSBEZW5zZSgxMDI0KSAgIyAsIGtlcm5lbF9yZWd1bGFyaXplcj1sMigwLjAwMDEpCiAgICAgICAgdmFlX2RlbnNlX21vZGVsID0gdmFlX2RlbnNlKHZhZV96KQoKICAgICAgICB2YWVfel9vdXQgPSBSZXNoYXBlKCgxLCAxLCBERU5TRV9TSVpFKSkKICAgICAgICB2YWVfel9vdXRfbW9kZWwgPSB2YWVfel9vdXQodmFlX2RlbnNlX21vZGVsKQoKICAgICAgICB2YWVfZDEgPSBDb252MkRUcmFuc3Bvc2UoZmlsdGVycz1DT05WX1RfRklMVEVSU1swXSwga2VybmVsX3NpemU9Q09OVl9UX0tFUk5FTF9TSVpFU1swXSwgcGFkZGluZz0ndmFsaWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2Zvcm1hdD0nY2hhbm5lbHNfbGFzdCcsIHN0cmlkZXM9Q09OVl9UX1NUUklERVNbMF0sIGFjdGl2YXRpb249Q09OVl9UX0FDVElWQVRJT05TWzBdKSAjICwga2VybmVsX3JlZ3VsYXJpemVyPWwyKDAuMDAwMSkpCiAgICAgICAgdmFlX2QxX21vZGVsID0gdmFlX2QxKHZhZV96X291dF9tb2RlbCkKICAgICAgICB2YWVfZDIgPSBDb252MkRUcmFuc3Bvc2UoZmlsdGVycz1DT05WX1RfRklMVEVSU1sxXSwga2VybmVsX3NpemU9Q09OVl9UX0tFUk5FTF9TSVpFU1sxXSwgcGFkZGluZz0ndmFsaWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2Zvcm1hdD0nY2hhbm5lbHNfbGFzdCcsIHN0cmlkZXM9Q09OVl9UX1NUUklERVNbMV0sIGFjdGl2YXRpb249Q09OVl9UX0FDVElWQVRJT05TWzFdKSAjICwga2VybmVsX3JlZ3VsYXJpemVyPWwyKDAuMDAwMSkpCiAgICAgICAgdmFlX2QyX21vZGVsID0gdmFlX2QyKHZhZV9kMV9tb2RlbCkKICAgICAgICB2YWVfZDMgPSBDb252MkRUcmFuc3Bvc2UoZmlsdGVycz1DT05WX1RfRklMVEVSU1syXSwga2VybmVsX3NpemU9Q09OVl9UX0tFUk5FTF9TSVpFU1syXSwgcGFkZGluZz0ndmFsaWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2Zvcm1hdD0nY2hhbm5lbHNfbGFzdCcsIHN0cmlkZXM9Q09OVl9UX1NUUklERVNbMl0sIGFjdGl2YXRpb249Q09OVl9UX0FDVElWQVRJT05TWzJdKSAjICwga2VybmVsX3JlZ3VsYXJpemVyPWwyKDAuMDAwMSkpCiAgICAgICAgdmFlX2QzX21vZGVsID0gdmFlX2QzKHZhZV9kMl9tb2RlbCkKICAgICAgICB2YWVfZDQgPSBDb252MkRUcmFuc3Bvc2UoZmlsdGVycz1DT05WX1RfRklMVEVSU1szXSwga2VybmVsX3NpemU9Q09OVl9UX0tFUk5FTF9TSVpFU1szXSwgcGFkZGluZz0ndmFsaWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2Zvcm1hdD0nY2hhbm5lbHNfbGFzdCcsIHN0cmlkZXM9Q09OVl9UX1NUUklERVNbM10sIGFjdGl2YXRpb249Q09OVl9UX0FDVElWQVRJT05TWzNdKSAjICwga2VybmVsX3JlZ3VsYXJpemVyPWwyKDAuMDAwMSkpCiAgICAgICAgdmFlX2Q0X21vZGVsID0gdmFlX2Q0KHZhZV9kM19tb2RlbCkKCiAgICAgICAgIyBERUNPREVSIE9OTFkKICAgICAgICB2YWVfZGVuc2VfZGVjb2RlciA9IHZhZV9kZW5zZSh2YWVfel9pbnB1dCkKICAgICAgICB2YWVfel9vdXRfZGVjb2RlciA9IHZhZV96X291dCh2YWVfZGVuc2VfZGVjb2RlcikKCiAgICAgICAgdmFlX2QxX2RlY29kZXIgPSB2YWVfZDEodmFlX3pfb3V0X2RlY29kZXIpCiAgICAgICAgdmFlX2QyX2RlY29kZXIgPSB2YWVfZDIodmFlX2QxX2RlY29kZXIpCiAgICAgICAgdmFlX2QzX2RlY29kZXIgPSB2YWVfZDModmFlX2QyX2RlY29kZXIpCiAgICAgICAgdmFlX2Q0X2RlY29kZXIgPSB2YWVfZDQodmFlX2QzX2RlY29kZXIpCgogICAgICAgICMgTU9ERUxTCiAgICAgICAgdmFlID0gTW9kZWwodmFlX3gsIHZhZV9kNF9tb2RlbCkKICAgICAgICB2YWVfZW5jb2RlciA9IE1vZGVsKHZhZV94LCB2YWVfeikKICAgICAgICB2YWVfZGVjb2RlciA9IE1vZGVsKHZhZV96X2lucHV0LCB2YWVfZDRfZGVjb2RlcikKCiAgICAgICAgZGVmIHZhZV9yX2xvc3MoeV90cnVlLCB5X3ByZWQpOgogICAgICAgICAgICB5X3RydWVfZmxhdCA9IEsuZmxhdHRlbih5X3RydWUpCiAgICAgICAgICAgIHlfcHJlZF9mbGF0ID0gSy5mbGF0dGVuKHlfcHJlZCkKCiAgICAgICAgICAgIHJldHVybiAxMCAqIEsubWVhbihLLnNxdWFyZSh5X3RydWVfZmxhdCAtIHlfcHJlZF9mbGF0KSwgYXhpcz0tMSkKCiAgICAgICAgZGVmIHZhZV9rbF9sb3NzKHlfdHJ1ZSwgeV9wcmVkKToKICAgICAgICAgICAga2xfbG9zcyA9IC0gMC41ICogSy5tZWFuKDEgKyB2YWVfel9sb2dfdmFyIC0gSy5zcXVhcmUodmFlX3pfbWVhbikgLSBLLmV4cCh2YWVfel9sb2dfdmFyKSwgYXhpcz0tMSkKICAgICAgICAgICAgIyBzdG9wIG9wdGltaXppbmcgZm9yIEtMIGxvc3MgdGVybSBvbmNlIGl0IGlzIGxvd2VyIHRoYW4gc29tZSBsZXZlbCwgcmF0aGVyIHRoYW4gbGV0dGluZyBpdCBnbyB0byBuZWFyIHplcm8uCiAgICAgICAgICAgICMgU28gb3B0aW1pemUgZm9yIHRmLm1heChLTCwgZ29vZF9lbm91Z2hfa2xfbGV2ZWwpIGluc3RlYWQsIHRvIHJlbGF4IHRoZSBpbmZvcm1hdGlvbiBib3R0bGVuZWNrIG9mIHRoZSBWQUUuCiAgICAgICAgICAgIGtsX3RvbGVyYW5jZSA9IDAuNQogICAgICAgICAgICBrbF9sb3NzID0gSy5tYXhpbXVtKGtsX2xvc3MsIGtsX3RvbGVyYW5jZSpaX0RJTSkKICAgICAgICAgICAgcmV0dXJuIGtsX2xvc3MKCiAgICAgICAgZGVmIHZhZV9sb3NzKHlfdHJ1ZSwgeV9wcmVkKToKICAgICAgICAgICAgcmV0dXJuIHZhZV9yX2xvc3MoeV90cnVlLCB5X3ByZWQpICsgdmFlX2tsX2xvc3MoeV90cnVlLCB5X3ByZWQpCgogICAgICAgIG9wdGltaXplciA9IEFkYW0obHI9MC4wMDAxKQogICAgICAgICMgb3B0aW1pemVyID0gU0dEKGxyPTAuMDAxLCBkZWNheT0xZS00LCBtb21lbnR1bT0wLjksIG5lc3Rlcm92PVRydWUpCiAgICAgICAgdmFlLmNvbXBpbGUob3B0aW1pemVyPW9wdGltaXplciwgbG9zcz12YWVfbG9zcywgbWV0cmljcz1bdmFlX3JfbG9zcywgdmFlX2tsX2xvc3NdKQoKICAgICAgICByZXR1cm4gW3ZhZSwgdmFlX2VuY29kZXIsIHZhZV9kZWNvZGVyXQoKICAgIGRlZiBzZXRfd2VpZ2h0cyhzZWxmLCBmaWxlcGF0aCk6CiAgICAgICAgc2VsZi5tb2RlbC5sb2FkX3dlaWdodHMoZmlsZXBhdGgpCiAgICAgICAgcHJpbnQoImxvYWQgd2VpZ2h0cyB7fSBzdWNjZXNzZnVsbHkiLmZvcm1hdChmaWxlcGF0aCkpCgogICAgZGVmIHRyYWluKHNlbGYsIGRhdGEsIGo9MCwgaT0wKToKICAgICAgICBjYWxsYmFja3NfbGlzdCA9IFtzZWxmLmhpc3RvcnldCgogICAgICAgIHNlbGYubW9kZWwuZml0KGRhdGEsIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZT1UcnVlLAogICAgICAgICAgICAgICAgICAgICAgIGVwb2Nocz1FUE9DSFMsCiAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2hfc2l6ZT1CQVRDSF9TSVpFLAogICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcz1jYWxsYmFja3NfbGlzdCkKCiAgICAgICAgc2VsZi5tb2RlbC5zYXZlX3dlaWdodHMoJy4vbW9kZWxzL3ZhZV93ZWlnaHRzXycgKyBzdHIoaikgKyAnXycgKyBzdHIoaSkgKyAnLmg1JykKCiAgICBkZWYgcGxvdF9sb3NzKHNlbGYpOgogICAgICAgIHNlbGYuaGlzdG9yeS5sb3NzX3Bsb3QoJ2JhdGNoJykKCiAgICBkZWYgc2F2ZV93ZWlnaHRzKHNlbGYsIGZpbGVwYXRoKToKICAgICAgICBzZWxmLm1vZGVsLnNhdmVfd2VpZ2h0cyhmaWxlcGF0aCkKCiAgICBkZWYgZ2V0X3ZlY3RvcihzZWxmLCBvYnNfZGF0YSk6CiAgICAgICAgeiA9IHNlbGYuZW5jb2Rlci5wcmVkaWN0KG5wLmFycmF5KG9ic19kYXRhKSkKICAgICAgICByZXR1cm4gegoKICAgIGRlZiBnZXRfb3V0cHV0KHNlbGYsIGlucHV0X2RhdGEpOgogICAgICAgIGlucHV0X2RhdGEgPSBucC5hc2FycmF5KGlucHV0X2RhdGEpCiAgICAgICAgaWYgaW5wdXRfZGF0YS5zaGFwZSA9PSAoMSwgMzIpOiAgIyAzMi1kaW0gdmVjdG9yCiAgICAgICAgICAgIG91dHB1dCA9IHNlbGYuZGVjb2Rlci5wcmVkaWN0KGlucHV0X2RhdGEpCiAgICAgICAgICAgIHJldHVybiBvdXRwdXQKICAgICAgICBlbGlmIGlucHV0X2RhdGEuc2hhcGUgPT0gKDEsIDQ4LCA2NCwgMyk6ICAjIHRoZSByYXcgaW1hZ2UKICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5tb2RlbC5wcmVkaWN0KGlucHV0X2RhdGEpCiAgICAgICAgICAgIHJldHVybiBvdXRwdXQKICAgICAgICBlbHNlOgogICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIklucHV0IHNoYXBlIHt9IGlzIG5vdCByaWdodCwgaXQgbmVlZHMgdG8gYmUgKDEsMzIpIG9yICgxLDQ4LDY0LDMpLiIuZm9ybWF0KGlucHV0X2RhdGEuc2hhcGUpKQoKICAgIGRlZiBnZW5lcmF0ZV9ybm5fZGF0YShzZWxmLCBvYnNfZGF0YSwgYWN0aW9uX2RhdGEpOgogICAgICAgIHJubl9pbnB1dCA9IFtdCiAgICAgICAgcm5uX291dHB1dCA9IFtdCgogICAgICAgIGZvciBpLCBqIGluIHppcChvYnNfZGF0YSwgYWN0aW9uX2RhdGEpOgogICAgICAgICAgICBpID0gbnAuYXNhcnJheShpKSAvIDI1NS4wCiAgICAgICAgICAgIHJubl96X2lucHV0ID0gc2VsZi5lbmNvZGVyLnByZWRpY3QoaSkKICAgICAgICAgICAgY29uYyA9IFtucC5jb25jYXRlbmF0ZShbeCwgeV0pIGZvciB4LCB5IGluIHppcChybm5fel9pbnB1dCwgaildCiAgICAgICAgICAgIHJubl9pbnB1dC5hcHBlbmQoY29uY1s6LTFdKQogICAgICAgICAgICBybm5fb3V0cHV0LmFwcGVuZChucC5hcnJheShybm5fel9pbnB1dFsxOl0pKQoKICAgICAgICBybm5faW5wdXQgPSBucC5hcnJheShybm5faW5wdXQpCiAgICAgICAgcm5uX291dHB1dCA9IG5wLmFycmF5KHJubl9vdXRwdXQpCgogICAgICAgIHJldHVybiBbcm5uX2lucHV0LCBybm5fb3V0cHV0XQoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmRlY29kZXIgPSBzZWxmLm1vZGVsc1syXQogICAgICAgIHNlbGYuaGlzdG9yeSA9IExvc3NIaXN0b3J5KCkKCiAgICAgICAgc2VsZi5pbnB1dF9kaW0gPSBJTlBVVF9ESU0KPHxmaW1fZW5kfD4="]
["e753687fe91b0118efefbd5b1f6e720a0f34be0c-4","e753687fe91b0118efefbd5b1f6e720a0f34be0c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIGtlcmFzLmxheWVycyBpbXBvcnQgSW5wdXQsIENvbnYyRCwgRmxhdHRlbiwgRGVuc2UsIENvbnYyRFRyYW5zcG9zZSwgTGFtYmRhLCBSZXNoYXBlCmZyb20ga2VyYXMubW9kZWxzIGltcG9ydCBNb2RlbApmcm9tIGtlcmFzLnJlZ3VsYXJpemVycyBpbXBvcnQgbDIKZnJvbSBrZXJhcyBpbXBvcnQgYmFja2VuZCBhcyBLICAgIyBodHRwczovL2tlcmFzLmlvL2JhY2tlbmQvCmZyb20ga2VyYXMub3B0aW1pemVycyBpbXBvcnQgQWRhbSwgU0dECmZyb20ga2VyYXMuY2FsbGJhY2tzIGltcG9ydCBDYWxsYmFjawppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CgoKaW1wb3J0IHN5cwpzeXMucGF0aC5hcHBlbmQoIi4uIikKaW1wb3J0IGNvbmZpZwoKSU5QVVRfRElNID0gY29uZmlnLmlucHV0X2RpbQojIEVuY29kZXIKQ09OVl9GSUxURVJTID0gWzMyLCA2NCwgMTI4LCAyNTZdCkNPTlZfS0VSTkVMX1NJWkVTID0gWygzLCA0KSwgKDMsIDQpLCAoMywgNCksICgzLCA0KV0KQ09OVl9TVFJJREVTID0gWzIsIDIsIDIsIDJdCkNPTlZfQUNUSVZBVElPTlMgPSBbJ3JlbHUnLCAncmVsdScsICdyZWx1JywgJ3JlbHUnXQoKREVOU0VfU0laRSA9IDEwMjQKCiMgRGVjb2RlcgpDT05WX1RfRklMVEVSUyA9IFsxMjgsIDY0LCAzMiwgM10KQ09OVl9UX0tFUk5FTF9TSVpFUyA9IFsoNCwgNSksICg0LCA1KSwgKDQsIDYpLCAoNiwgNildCkNPTlZfVF9TVFJJREVTID0gWzIsIDIsIDIsIDJdCkNPTlZfVF9BQ1RJVkFUSU9OUyA9IFsncmVsdScsICdyZWx1JywgJ3JlbHUnLCAnc2lnbW9pZCddCgpaX0RJTSA9IGNvbmZpZy5sYXRlbnRfdmVjdG9yX2RpbQpFUE9DSFMgPSAyCkJBVENIX1NJWkUgPSAyNTYKCgpkZWYgc2FtcGxpbmcoYXJncyk6CiAgICB6X21lYW4sIHpfbG9nX3ZhciA9IGFyZ3MKICAgIGVwc2lsb24gPSBLLnJhbmRvbV9ub3JtYWwoc2hhcGU9KEsuc2hhcGUoel9tZWFuKVswXSwgWl9ESU0pLCBtZWFuPTAuLCBzdGRkZXY9MS4pCiAgICByZXR1cm4gel9tZWFuICsgSy5leHAoel9sb2dfdmFyIC8gMikgKiBlcHNpbG9uCgoKIyBkcmF3IHRoZSB0cmFpbmluZyBsb3NzCmNsYXNzIExvc3NIaXN0b3J5KENhbGxiYWNrKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmxvc3NlcyA9IHsnYmF0Y2gnOiBbXSwgJ2Vwb2NoJzogW119CiAgICAgICAgc2VsZi5hY2N1cmFjeSA9IHsnYmF0Y2gnOiBbXSwgJ2Vwb2NoJzogW119CiAgICAgICAgc2VsZi52YWxfbG9zcyA9IHsnYmF0Y2gnOiBbXSwgJ2Vwb2NoJzogW119CiAgICAgICAgc2VsZi52YWxfYWNjID0geydiYXRjaCc6IFtdLCAnZXBvY2gnOiBbXX0KCiAgICBkZWYgb25fdHJhaW5fYmVnaW4oc2VsZiwgbG9ncz17fSk6CiAgICAgICAgcGFzcwoKICAgIGRlZiBvbl9iYXRjaF9lbmQoc2VsZiwgYmF0Y2gsIGxvZ3M9e30pOgogICAgICAgIHNlbGYubG9zc2VzWydiYXRjaCddLmFwcGVuZChsb2dzLmdldCgnbG9zcycpKQogICAgICAgIHNlbGYuYWNjdXJhY3lbJ2JhdGNoJ10uYXBwZW5kKGxvZ3MuZ2V0KCdhY2MnKSkKICAgICAgICBzZWxmLnZhbF9sb3NzWydiYXRjaCddLmFwcGVuZChsb2dzLmdldCgndmFsX2xvc3MnKSkKICAgICAgICBzZWxmLnZhbF9hY2NbJ2JhdGNoJ10uYXBwZW5kKGxvZ3MuZ2V0KCd2YWxfYWNjJykpCgogICAgZGVmIG9uX2Vwb2NoX2VuZChzZWxmLCBiYXRjaCwgbG9ncz17fSk6CiAgICAgICAgc2VsZi5sb3NzZXNbJ2Vwb2NoJ10uYXBwZW5kKGxvZ3MuZ2V0KCdsb3NzJykpCiAgICAgICAgc2VsZi5hY2N1cmFjeVsnZXBvY2gnXS5hcHBlbmQobG9ncy5nZXQoJ2FjYycpKQogICAgICAgIHNlbGYudmFsX2xvc3NbJ2Vwb2NoJ10uYXBwZW5kKGxvZ3MuZ2V0KCd2YWxfbG9zcycpKQogICAgICAgIHNlbGYudmFsX2FjY1snZXBvY2gnXS5hcHBlbmQobG9ncy5nZXQoJ3ZhbF9hY2MnKSkKCiAgICBkZWYgbG9zc19wbG90KHNlbGYsIGxvc3NfdHlwZSk6CiAgICAgICAgaXRlcnMgPSByYW5nZShsZW4oc2VsZi5sb3NzZXNbbG9zc190eXBlXSkpCiAgICAgICAgcGx0LmZpZ3VyZSgpCiAgICAgICAgIyBhY2MKICAgICAgICAjIHBsdC5wbG90KGl0ZXJzLCBzZWxmLmFjY3VyYWN5W2xvc3NfdHlwZV0sICdyJywgbGFiZWw9J3RyYWluIGFjYycpCiAgICAgICAgIyBsb3NzCiAgICAgICAgcGx0LnBsb3QoaXRlcnMsIHNlbGYubG9zc2VzW2xvc3NfdHlwZV0sICdnJywgbGFiZWw9J3RyYWluIGxvc3MnKQogICAgICAgIGlmIGxvc3NfdHlwZSA9PSAnZXBvY2gnOgogICAgICAgICAgICAjIHZhbF9hY2MKICAgICAgICAgICAgIyBwbHQucGxvdChpdGVycywgc2VsZi52YWxfYWNjW2xvc3NfdHlwZV0sICdiJywgbGFiZWw9J3ZhbCBhY2MnKQogICAgICAgICAgICAjIHZhbF9sb3NzCiAgICAgICAgICAgIHBsdC5wbG90KGl0ZXJzLCBzZWxmLnZhbF9sb3NzW2xvc3NfdHlwZV0sICdrJywgbGFiZWw9J3ZhbCBsb3NzJykKICAgICAgICBwbHQuZ3JpZChUcnVlKQogICAgICAgIHBsdC54bGFiZWwobG9zc190eXBlKQogICAgICAgIHBsdC55bGFiZWwoJ2FjYy1sb3NzJykKICAgICAgICBwbHQubGVnZW5kKGxvYz0idXBwZXIgcmlnaHQiKQogICAgICAgIHBsdC5zaG93KCkKCgpjbGFzcyBWQUUoKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLm1vZGVscyA9IHNlbGYuX2J1aWxkKCkKICAgICAgICBzZWxmLm1vZGVsID0gc2VsZi5tb2RlbHNbMF0KICAgICAgICBzZWxmLmVuY29kZXIgPSBzZWxmLm1vZGVsc1sxXQogICAgICAgIHNlbGYuZGVjb2RlciA9IHNlbGYubW9kZWxzWzJdCiAgICAgICAgc2VsZi5oaXN0b3J5ID0gTG9zc0hpc3RvcnkoKQoKICAgICAgICBzZWxmLmlucHV0X2RpbSA9IElOUFVUX0RJTQogICAgICAgIHNlbGYuel9kaW0gPSBaX0RJTQoKICAgIGRlZiBfYnVpbGQoc2VsZik6CiAgICAgICAgdmFlX3ggPSBJbnB1dChzaGFwZT1JTlBVVF9ESU0pCiAgICAgICAgdmFlX2MxID0gQ29udjJEKGZpbHRlcnM9Q09OVl9GSUxURVJTWzBdLCBrZXJuZWxfc2l6ZT1DT05WX0tFUk5FTF9TSVpFU1swXSwgc3RyaWRlcz1DT05WX1NUUklERVNbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc9J3ZhbGlkJywgZGF0YV9mb3JtYXQ9J2NoYW5uZWxzX2xhc3QnLCBhY3RpdmF0aW9uPUNPTlZfQUNUSVZBVElPTlNbMF0pKHZhZV94KSAgIyAsIGtlcm5lbF9yZWd1bGFyaXplcj1sMigwLjAwMDEpKSh2YWVfeCkKICAgICAgICB2YWVfYzIgPSBDb252MkQoZmlsdGVycz1DT05WX0ZJTFRFUlNbMV0sIGtlcm5lbF9zaXplPUNPTlZfS0VSTkVMX1NJWkVTWzFdLCBzdHJpZGVzPUNPTlZfU1RSSURFU1sxXSwKICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZz0ndmFsaWQnLCBkYXRhX2Zvcm1hdD0nY2hhbm5lbHNfbGFzdCcsIGFjdGl2YXRpb249Q09OVl9BQ1RJVkFUSU9OU1sxXSkodmFlX2MxKSAgIyAsIGtlcm5lbF9yZWd1bGFyaXplcj1sMigwLjAwMDEpKSh2YWVfYzEpCiAgICAgICAgdmFlX2MzID0gQ29udjJEKGZpbHRlcnM9Q09OVl9GSUxURVJTWzJdLCBrZXJuZWxfc2l6ZT1DT05WX0tFUk5FTF9TSVpFU1syXSwgc3RyaWRlcz1DT05WX1NUUklERVNbMl0sCiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc9J3ZhbGlkJywgZGF0YV9mb3JtYXQ9J2NoYW5uZWxzX2xhc3QnLCBhY3RpdmF0aW9uPUNPTlZfQUNUSVZBVElPTlNbMl0pKHZhZV9jMikgICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKSkodmFlX2MyKQogICAgICAgIHZhZV9jNCA9IENvbnYyRChmaWx0ZXJzPUNPTlZfRklMVEVSU1szXSwga2VybmVsX3NpemU9Q09OVl9LRVJORUxfU0laRVNbM10sIHN0cmlkZXM9Q09OVl9TVFJJREVTWzNdLAogICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nPSd2YWxpZCcsIGRhdGFfZm9ybWF0PSdjaGFubmVsc19sYXN0JywgYWN0aXZhdGlvbj1DT05WX0FDVElWQVRJT05TWzNdKSh2YWVfYzMpICAjICwga2VybmVsX3JlZ3VsYXJpemVyPWwyKDAuMDAwMSkpKHZhZV9jMykKCiAgICAgICAgdmFlX3pfaW4gPSBGbGF0dGVuKCkodmFlX2M0KQoKICAgICAgICB2YWVfel9tZWFuID0gRGVuc2UoWl9ESU0pKHZhZV96X2luKSAgIyAsIGtlcm5lbF9yZWd1bGFyaXplcj1sMigwLjAwMDEpCiAgICAgICAgdmFlX3pfbG9nX3ZhciA9IERlbnNlKFpfRElNKSh2YWVfel9pbikgICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKQoKICAgICAgICB2YWVfeiA9IExhbWJkYShzYW1wbGluZykoW3ZhZV96X21lYW4sIHZhZV96X2xvZ192YXJdKQogICAgICAgIHZhZV96X2lucHV0ID0gSW5wdXQoc2hhcGU9KFpfRElNLCkpCgogICAgICAgICMgd2UgaW5zdGFudGlhdGUgdGhlc2UgbGF5ZXJzIHNlcGFyYXRlbHkgc28gYXMgdG8gcmV1c2UgdGhlbSBsYXRlcgogICAgICAgIHZhZV9kZW5zZSA9IERlbnNlKDEwMjQpICAjICwga2VybmVsX3JlZ3VsYXJpemVyPWwyKDAuMDAwMSkKICAgICAgICB2YWVfZGVuc2VfbW9kZWwgPSB2YWVfZGVuc2UodmFlX3opCgogICAgICAgIHZhZV96X291dCA9IFJlc2hhcGUoKDEsIDEsIERFTlNFX1NJWkUpKQogICAgICAgIHZhZV96X291dF9tb2RlbCA9IHZhZV96X291dCh2YWVfZGVuc2VfbW9kZWwpCgogICAgICAgIHZhZV9kMSA9IENvbnYyRFRyYW5zcG9zZShmaWx0ZXJzPUNPTlZfVF9GSUxURVJTWzBdLCBrZXJuZWxfc2l6ZT1DT05WX1RfS0VSTkVMX1NJWkVTWzBdLCBwYWRkaW5nPSd2YWxpZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZm9ybWF0PSdjaGFubmVsc19sYXN0Jywgc3RyaWRlcz1DT05WX1RfU1RSSURFU1swXSwgYWN0aXZhdGlvbj1DT05WX1RfQUNUSVZBVElPTlNbMF0pICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKSkKICAgICAgICB2YWVfZDFfbW9kZWwgPSB2YWVfZDEodmFlX3pfb3V0X21vZGVsKQogICAgICAgIHZhZV9kMiA9IENvbnYyRFRyYW5zcG9zZShmaWx0ZXJzPUNPTlZfVF9GSUxURVJTWzFdLCBrZXJuZWxfc2l6ZT1DT05WX1RfS0VSTkVMX1NJWkVTWzFdLCBwYWRkaW5nPSd2YWxpZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZm9ybWF0PSdjaGFubmVsc19sYXN0Jywgc3RyaWRlcz1DT05WX1RfU1RSSURFU1sxXSwgYWN0aXZhdGlvbj1DT05WX1RfQUNUSVZBVElPTlNbMV0pICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKSkKICAgICAgICB2YWVfZDJfbW9kZWwgPSB2YWVfZDIodmFlX2QxX21vZGVsKQogICAgICAgIHZhZV9kMyA9IENvbnYyRFRyYW5zcG9zZShmaWx0ZXJzPUNPTlZfVF9GSUxURVJTWzJdLCBrZXJuZWxfc2l6ZT1DT05WX1RfS0VSTkVMX1NJWkVTWzJdLCBwYWRkaW5nPSd2YWxpZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZm9ybWF0PSdjaGFubmVsc19sYXN0Jywgc3RyaWRlcz1DT05WX1RfU1RSSURFU1syXSwgYWN0aXZhdGlvbj1DT05WX1RfQUNUSVZBVElPTlNbMl0pICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKSkKICAgICAgICB2YWVfZDNfbW9kZWwgPSB2YWVfZDModmFlX2QyX21vZGVsKQogICAgICAgIHZhZV9kNCA9IENvbnYyRFRyYW5zcG9zZShmaWx0ZXJzPUNPTlZfVF9GSUxURVJTWzNdLCBrZXJuZWxfc2l6ZT1DT05WX1RfS0VSTkVMX1NJWkVTWzNdLCBwYWRkaW5nPSd2YWxpZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZm9ybWF0PSdjaGFubmVsc19sYXN0Jywgc3RyaWRlcz1DT05WX1RfU1RSSURFU1szXSwgYWN0aXZhdGlvbj1DT05WX1RfQUNUSVZBVElPTlNbM10pICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKSkKICAgICAgICB2YWVfZDRfbW9kZWwgPSB2YWVfZDQodmFlX2QzX21vZGVsKQoKICAgICAgICAjIERFQ09ERVIgT05MWQogICAgICAgIHZhZV9kZW5zZV9kZWNvZGVyID0gdmFlX2RlbnNlKHZhZV96X2lucHV0KQogICAgICAgIHZhZV96X291dF9kZWNvZGVyID0gdmFlX3pfb3V0KHZhZV9kZW5zZV9kZWNvZGVyKQoKICAgICAgICB2YWVfZDFfZGVjb2RlciA9IHZhZV9kMSh2YWVfel9vdXRfZGVjb2RlcikKICAgICAgICB2YWVfZDJfZGVjb2RlciA9IHZhZV9kMih2YWVfZDFfZGVjb2RlcikKICAgICAgICB2YWVfZDNfZGVjb2RlciA9IHZhZV9kMyh2YWVfZDJfZGVjb2RlcikKICAgICAgICB2YWVfZDRfZGVjb2RlciA9IHZhZV9kNCh2YWVfZDNfZGVjb2RlcikKCiAgICAgICAgIyBNT0RFTFMKICAgICAgICB2YWUgPSBNb2RlbCh2YWVfeCwgdmFlX2Q0X21vZGVsKQogICAgICAgIHZhZV9lbmNvZGVyID0gTW9kZWwodmFlX3gsIHZhZV96KQogICAgICAgIHZhZV9kZWNvZGVyID0gTW9kZWwodmFlX3pfaW5wdXQsIHZhZV9kNF9kZWNvZGVyKQoKICAgICAgICBkZWYgdmFlX3JfbG9zcyh5X3RydWUsIHlfcHJlZCk6CiAgICAgICAgICAgIHlfdHJ1ZV9mbGF0ID0gSy5mbGF0dGVuKHlfdHJ1ZSkKICAgICAgICAgICAgeV9wcmVkX2ZsYXQgPSBLLmZsYXR0ZW4oeV9wcmVkKQoKICAgICAgICAgICAgcmV0dXJuIDEwICogSy5tZWFuKEsuc3F1YXJlKHlfdHJ1ZV9mbGF0IC0geV9wcmVkX2ZsYXQpLCBheGlzPS0xKQoKICAgICAgICBkZWYgdmFlX2tsX2xvc3MoeV90cnVlLCB5X3ByZWQpOgogICAgICAgICAgICBrbF9sb3NzID0gLSAwLjUgKiBLLm1lYW4oMSArIHZhZV96X2xvZ192YXIgLSBLLnNxdWFyZSh2YWVfel9tZWFuKSAtIEsuZXhwKHZhZV96X2xvZ192YXIpLCBheGlzPS0xKQogICAgICAgICAgICAjIHN0b3Agb3B0aW1pemluZyBmb3IgS0wgbG9zcyB0ZXJtIG9uY2UgaXQgaXMgbG93ZXIgdGhhbiBzb21lIGxldmVsLCByYXRoZXIgdGhhbiBsZXR0aW5nIGl0IGdvIHRvIG5lYXIgemVyby4KICAgICAgICAgICAgIyBTbyBvcHRpbWl6ZSBmb3IgdGYubWF4KEtMLCBnb29kX2Vub3VnaF9rbF9sZXZlbCkgaW5zdGVhZCwgdG8gcmVsYXggdGhlIGluZm9ybWF0aW9uIGJvdHRsZW5lY2sgb2YgdGhlIFZBRS4KICAgICAgICAgICAga2xfdG9sZXJhbmNlID0gMC41CiAgICAgICAgICAgIGtsX2xvc3MgPSBLLm1heGltdW0oa2xfbG9zcywga2xfdG9sZXJhbmNlKlpfRElNKQogICAgICAgICAgICByZXR1cm4ga2xfbG9zcwoKICAgICAgICBkZWYgdmFlX2xvc3MoeV90cnVlLCB5X3ByZWQpOgogICAgICAgICAgICByZXR1cm4gdmFlX3JfbG9zcyh5X3RydWUsIHlfcHJlZCkgKyB2YWVfa2xfbG9zcyh5X3RydWUsIHlfcHJlZCkKCiAgICAgICAgb3B0aW1pemVyID0gQWRhbShscj0wLjAwMDEpCiAgICAgICAgIyBvcHRpbWl6ZXIgPSBTR0QobHI9MC4wMDEsIGRlY2F5PTFlLTQsIG1vbWVudHVtPTAuOSwgbmVzdGVyb3Y9VHJ1ZSkKICAgICAgICB2YWUuY29tcGlsZShvcHRpbWl6ZXI9b3B0aW1pemVyLCBsb3NzPXZhZV9sb3NzLCBtZXRyaWNzPVt2YWVfcl9sb3NzLCB2YWVfa2xfbG9zc10pCgogICAgICAgIHJldHVybiBbdmFlLCB2YWVfZW5jb2RlciwgdmFlX2RlY29kZXJdCgogICAgZGVmIHNldF93ZWlnaHRzKHNlbGYsIGZpbGVwYXRoKToKICAgICAgICBzZWxmLm1vZGVsLmxvYWRfd2VpZ2h0cyhmaWxlcGF0aCkKICAgICAgICBwcmludCgibG9hZCB3ZWlnaHRzIHt9IHN1Y2Nlc3NmdWxseSIuZm9ybWF0KGZpbGVwYXRoKSkKCiAgICBkZWYgdHJhaW4oc2VsZiwgZGF0YSwgaj0wLCBpPTApOgogICAgICAgIGNhbGxiYWNrc19saXN0ID0gW3NlbGYuaGlzdG9yeV0KCiAgICAgICAgc2VsZi5tb2RlbC5maXQoZGF0YSwgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICBzaHVmZmxlPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgZXBvY2hzPUVQT0NIUywKICAgICAgICAgICAgICAgICAgICAgICBiYXRjaF9zaXplPUJBVENIX1NJWkUsCiAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzPWNhbGxiYWNrc19saXN0KQoKICAgICAgICBzZWxmLm1vZGVsLnNhdmVfd2VpZ2h0cygnLi9tb2RlbHMvdmFlX3dlaWdodHNfJyArIHN0cihqKSArICdfJyArIHN0cihpKSArICcuaDUnKQoKICAgIGRlZiBwbG90X2xvc3Moc2VsZik6CiAgICAgICAgc2VsZi5oaXN0b3J5Lmxvc3NfcGxvdCgnYmF0Y2gnKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIHNhdmVfd2VpZ2h0cyhzZWxmLCBmaWxlcGF0aCk6CiAgICAgICAgc2VsZi5tb2RlbC5zYXZlX3dlaWdodHMoZmlsZXBhdGgpCgo8fGZpbV9lbmR8Pg=="]
["e753687fe91b0118efefbd5b1f6e720a0f34be0c-5","e753687fe91b0118efefbd5b1f6e720a0f34be0c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIGtlcmFzLmxheWVycyBpbXBvcnQgSW5wdXQsIENvbnYyRCwgRmxhdHRlbiwgRGVuc2UsIENvbnYyRFRyYW5zcG9zZSwgTGFtYmRhLCBSZXNoYXBlCmZyb20ga2VyYXMubW9kZWxzIGltcG9ydCBNb2RlbApmcm9tIGtlcmFzLnJlZ3VsYXJpemVycyBpbXBvcnQgbDIKZnJvbSBrZXJhcyBpbXBvcnQgYmFja2VuZCBhcyBLICAgIyBodHRwczovL2tlcmFzLmlvL2JhY2tlbmQvCmZyb20ga2VyYXMub3B0aW1pemVycyBpbXBvcnQgQWRhbSwgU0dECmZyb20ga2VyYXMuY2FsbGJhY2tzIGltcG9ydCBDYWxsYmFjawppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CgoKaW1wb3J0IHN5cwpzeXMucGF0aC5hcHBlbmQoIi4uIikKaW1wb3J0IGNvbmZpZwoKSU5QVVRfRElNID0gY29uZmlnLmlucHV0X2RpbQojIEVuY29kZXIKQ09OVl9GSUxURVJTID0gWzMyLCA2NCwgMTI4LCAyNTZdCkNPTlZfS0VSTkVMX1NJWkVTID0gWygzLCA0KSwgKDMsIDQpLCAoMywgNCksICgzLCA0KV0KQ09OVl9TVFJJREVTID0gWzIsIDIsIDIsIDJdCkNPTlZfQUNUSVZBVElPTlMgPSBbJ3JlbHUnLCAncmVsdScsICdyZWx1JywgJ3JlbHUnXQoKREVOU0VfU0laRSA9IDEwMjQKCiMgRGVjb2RlcgpDT05WX1RfRklMVEVSUyA9IFsxMjgsIDY0LCAzMiwgM10KQ09OVl9UX0tFUk5FTF9TSVpFUyA9IFsoNCwgNSksICg0LCA1KSwgKDQsIDYpLCAoNiwgNildCkNPTlZfVF9TVFJJREVTID0gWzIsIDIsIDIsIDJdCkNPTlZfVF9BQ1RJVkFUSU9OUyA9IFsncmVsdScsICdyZWx1JywgJ3JlbHUnLCAnc2lnbW9pZCddCgpaX0RJTSA9IGNvbmZpZy5sYXRlbnRfdmVjdG9yX2RpbQpFUE9DSFMgPSAyCkJBVENIX1NJWkUgPSAyNTYKCgpkZWYgc2FtcGxpbmcoYXJncyk6CiAgICB6X21lYW4sIHpfbG9nX3ZhciA9IGFyZ3MKICAgIGVwc2lsb24gPSBLLnJhbmRvbV9ub3JtYWwoc2hhcGU9KEsuc2hhcGUoel9tZWFuKVswXSwgWl9ESU0pLCBtZWFuPTAuLCBzdGRkZXY9MS4pCiAgICByZXR1cm4gel9tZWFuICsgSy5leHAoel9sb2dfdmFyIC8gMikgKiBlcHNpbG9uCgoKIyBkcmF3IHRoZSB0cmFpbmluZyBsb3NzCmNsYXNzIExvc3NIaXN0b3J5KENhbGxiYWNrKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmxvc3NlcyA9IHsnYmF0Y2gnOiBbXSwgJ2Vwb2NoJzogW119CiAgICAgICAgc2VsZi5hY2N1cmFjeSA9IHsnYmF0Y2gnOiBbXSwgJ2Vwb2NoJzogW119CiAgICAgICAgc2VsZi52YWxfbG9zcyA9IHsnYmF0Y2gnOiBbXSwgJ2Vwb2NoJzogW119CiAgICAgICAgc2VsZi52YWxfYWNjID0geydiYXRjaCc6IFtdLCAnZXBvY2gnOiBbXX0KCiAgICBkZWYgb25fdHJhaW5fYmVnaW4oc2VsZiwgbG9ncz17fSk6CiAgICAgICAgcGFzcwoKICAgIGRlZiBvbl9iYXRjaF9lbmQoc2VsZiwgYmF0Y2gsIGxvZ3M9e30pOgogICAgICAgIHNlbGYubG9zc2VzWydiYXRjaCddLmFwcGVuZChsb2dzLmdldCgnbG9zcycpKQogICAgICAgIHNlbGYuYWNjdXJhY3lbJ2JhdGNoJ10uYXBwZW5kKGxvZ3MuZ2V0KCdhY2MnKSkKICAgICAgICBzZWxmLnZhbF9sb3NzWydiYXRjaCddLmFwcGVuZChsb2dzLmdldCgndmFsX2xvc3MnKSkKICAgICAgICBzZWxmLnZhbF9hY2NbJ2JhdGNoJ10uYXBwZW5kKGxvZ3MuZ2V0KCd2YWxfYWNjJykpCgogICAgZGVmIG9uX2Vwb2NoX2VuZChzZWxmLCBiYXRjaCwgbG9ncz17fSk6CiAgICAgICAgc2VsZi5sb3NzZXNbJ2Vwb2NoJ10uYXBwZW5kKGxvZ3MuZ2V0KCdsb3NzJykpCiAgICAgICAgc2VsZi5hY2N1cmFjeVsnZXBvY2gnXS5hcHBlbmQobG9ncy5nZXQoJ2FjYycpKQogICAgICAgIHNlbGYudmFsX2xvc3NbJ2Vwb2NoJ10uYXBwZW5kKGxvZ3MuZ2V0KCd2YWxfbG9zcycpKQogICAgICAgIHNlbGYudmFsX2FjY1snZXBvY2gnXS5hcHBlbmQobG9ncy5nZXQoJ3ZhbF9hY2MnKSkKCiAgICBkZWYgbG9zc19wbG90KHNlbGYsIGxvc3NfdHlwZSk6CiAgICAgICAgaXRlcnMgPSByYW5nZShsZW4oc2VsZi5sb3NzZXNbbG9zc190eXBlXSkpCiAgICAgICAgcGx0LmZpZ3VyZSgpCjx8ZmltX2hvbGV8PgogICAgICAgIGlmIGxvc3NfdHlwZSA9PSAnZXBvY2gnOgogICAgICAgICAgICAjIHZhbF9hY2MKICAgICAgICAgICAgIyBwbHQucGxvdChpdGVycywgc2VsZi52YWxfYWNjW2xvc3NfdHlwZV0sICdiJywgbGFiZWw9J3ZhbCBhY2MnKQogICAgICAgICAgICAjIHZhbF9sb3NzCiAgICAgICAgICAgIHBsdC5wbG90KGl0ZXJzLCBzZWxmLnZhbF9sb3NzW2xvc3NfdHlwZV0sICdrJywgbGFiZWw9J3ZhbCBsb3NzJykKICAgICAgICBwbHQuZ3JpZChUcnVlKQogICAgICAgIHBsdC54bGFiZWwobG9zc190eXBlKQogICAgICAgIHBsdC55bGFiZWwoJ2FjYy1sb3NzJykKICAgICAgICBwbHQubGVnZW5kKGxvYz0idXBwZXIgcmlnaHQiKQogICAgICAgIHBsdC5zaG93KCkKCgpjbGFzcyBWQUUoKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLm1vZGVscyA9IHNlbGYuX2J1aWxkKCkKICAgICAgICBzZWxmLm1vZGVsID0gc2VsZi5tb2RlbHNbMF0KICAgICAgICBzZWxmLmVuY29kZXIgPSBzZWxmLm1vZGVsc1sxXQogICAgICAgIHNlbGYuZGVjb2RlciA9IHNlbGYubW9kZWxzWzJdCiAgICAgICAgc2VsZi5oaXN0b3J5ID0gTG9zc0hpc3RvcnkoKQoKICAgICAgICBzZWxmLmlucHV0X2RpbSA9IElOUFVUX0RJTQogICAgICAgIHNlbGYuel9kaW0gPSBaX0RJTQoKICAgIGRlZiBfYnVpbGQoc2VsZik6CiAgICAgICAgdmFlX3ggPSBJbnB1dChzaGFwZT1JTlBVVF9ESU0pCiAgICAgICAgdmFlX2MxID0gQ29udjJEKGZpbHRlcnM9Q09OVl9GSUxURVJTWzBdLCBrZXJuZWxfc2l6ZT1DT05WX0tFUk5FTF9TSVpFU1swXSwgc3RyaWRlcz1DT05WX1NUUklERVNbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc9J3ZhbGlkJywgZGF0YV9mb3JtYXQ9J2NoYW5uZWxzX2xhc3QnLCBhY3RpdmF0aW9uPUNPTlZfQUNUSVZBVElPTlNbMF0pKHZhZV94KSAgIyAsIGtlcm5lbF9yZWd1bGFyaXplcj1sMigwLjAwMDEpKSh2YWVfeCkKICAgICAgICB2YWVfYzIgPSBDb252MkQoZmlsdGVycz1DT05WX0ZJTFRFUlNbMV0sIGtlcm5lbF9zaXplPUNPTlZfS0VSTkVMX1NJWkVTWzFdLCBzdHJpZGVzPUNPTlZfU1RSSURFU1sxXSwKICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZz0ndmFsaWQnLCBkYXRhX2Zvcm1hdD0nY2hhbm5lbHNfbGFzdCcsIGFjdGl2YXRpb249Q09OVl9BQ1RJVkFUSU9OU1sxXSkodmFlX2MxKSAgIyAsIGtlcm5lbF9yZWd1bGFyaXplcj1sMigwLjAwMDEpKSh2YWVfYzEpCiAgICAgICAgdmFlX2MzID0gQ29udjJEKGZpbHRlcnM9Q09OVl9GSUxURVJTWzJdLCBrZXJuZWxfc2l6ZT1DT05WX0tFUk5FTF9TSVpFU1syXSwgc3RyaWRlcz1DT05WX1NUUklERVNbMl0sCiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc9J3ZhbGlkJywgZGF0YV9mb3JtYXQ9J2NoYW5uZWxzX2xhc3QnLCBhY3RpdmF0aW9uPUNPTlZfQUNUSVZBVElPTlNbMl0pKHZhZV9jMikgICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKSkodmFlX2MyKQogICAgICAgIHZhZV9jNCA9IENvbnYyRChmaWx0ZXJzPUNPTlZfRklMVEVSU1szXSwga2VybmVsX3NpemU9Q09OVl9LRVJORUxfU0laRVNbM10sIHN0cmlkZXM9Q09OVl9TVFJJREVTWzNdLAogICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nPSd2YWxpZCcsIGRhdGFfZm9ybWF0PSdjaGFubmVsc19sYXN0JywgYWN0aXZhdGlvbj1DT05WX0FDVElWQVRJT05TWzNdKSh2YWVfYzMpICAjICwga2VybmVsX3JlZ3VsYXJpemVyPWwyKDAuMDAwMSkpKHZhZV9jMykKCiAgICAgICAgdmFlX3pfaW4gPSBGbGF0dGVuKCkodmFlX2M0KQoKICAgICAgICB2YWVfel9tZWFuID0gRGVuc2UoWl9ESU0pKHZhZV96X2luKSAgIyAsIGtlcm5lbF9yZWd1bGFyaXplcj1sMigwLjAwMDEpCiAgICAgICAgdmFlX3pfbG9nX3ZhciA9IERlbnNlKFpfRElNKSh2YWVfel9pbikgICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKQoKICAgICAgICB2YWVfeiA9IExhbWJkYShzYW1wbGluZykoW3ZhZV96X21lYW4sIHZhZV96X2xvZ192YXJdKQogICAgICAgIHZhZV96X2lucHV0ID0gSW5wdXQoc2hhcGU9KFpfRElNLCkpCgogICAgICAgICMgd2UgaW5zdGFudGlhdGUgdGhlc2UgbGF5ZXJzIHNlcGFyYXRlbHkgc28gYXMgdG8gcmV1c2UgdGhlbSBsYXRlcgogICAgICAgIHZhZV9kZW5zZSA9IERlbnNlKDEwMjQpICAjICwga2VybmVsX3JlZ3VsYXJpemVyPWwyKDAuMDAwMSkKICAgICAgICB2YWVfZGVuc2VfbW9kZWwgPSB2YWVfZGVuc2UodmFlX3opCgogICAgICAgIHZhZV96X291dCA9IFJlc2hhcGUoKDEsIDEsIERFTlNFX1NJWkUpKQogICAgICAgIHZhZV96X291dF9tb2RlbCA9IHZhZV96X291dCh2YWVfZGVuc2VfbW9kZWwpCgogICAgICAgIHZhZV9kMSA9IENvbnYyRFRyYW5zcG9zZShmaWx0ZXJzPUNPTlZfVF9GSUxURVJTWzBdLCBrZXJuZWxfc2l6ZT1DT05WX1RfS0VSTkVMX1NJWkVTWzBdLCBwYWRkaW5nPSd2YWxpZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZm9ybWF0PSdjaGFubmVsc19sYXN0Jywgc3RyaWRlcz1DT05WX1RfU1RSSURFU1swXSwgYWN0aXZhdGlvbj1DT05WX1RfQUNUSVZBVElPTlNbMF0pICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKSkKICAgICAgICB2YWVfZDFfbW9kZWwgPSB2YWVfZDEodmFlX3pfb3V0X21vZGVsKQogICAgICAgIHZhZV9kMiA9IENvbnYyRFRyYW5zcG9zZShmaWx0ZXJzPUNPTlZfVF9GSUxURVJTWzFdLCBrZXJuZWxfc2l6ZT1DT05WX1RfS0VSTkVMX1NJWkVTWzFdLCBwYWRkaW5nPSd2YWxpZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZm9ybWF0PSdjaGFubmVsc19sYXN0Jywgc3RyaWRlcz1DT05WX1RfU1RSSURFU1sxXSwgYWN0aXZhdGlvbj1DT05WX1RfQUNUSVZBVElPTlNbMV0pICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKSkKICAgICAgICB2YWVfZDJfbW9kZWwgPSB2YWVfZDIodmFlX2QxX21vZGVsKQogICAgICAgIHZhZV9kMyA9IENvbnYyRFRyYW5zcG9zZShmaWx0ZXJzPUNPTlZfVF9GSUxURVJTWzJdLCBrZXJuZWxfc2l6ZT1DT05WX1RfS0VSTkVMX1NJWkVTWzJdLCBwYWRkaW5nPSd2YWxpZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZm9ybWF0PSdjaGFubmVsc19sYXN0Jywgc3RyaWRlcz1DT05WX1RfU1RSSURFU1syXSwgYWN0aXZhdGlvbj1DT05WX1RfQUNUSVZBVElPTlNbMl0pICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKSkKICAgICAgICB2YWVfZDNfbW9kZWwgPSB2YWVfZDModmFlX2QyX21vZGVsKQogICAgICAgIHZhZV9kNCA9IENvbnYyRFRyYW5zcG9zZShmaWx0ZXJzPUNPTlZfVF9GSUxURVJTWzNdLCBrZXJuZWxfc2l6ZT1DT05WX1RfS0VSTkVMX1NJWkVTWzNdLCBwYWRkaW5nPSd2YWxpZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZm9ybWF0PSdjaGFubmVsc19sYXN0Jywgc3RyaWRlcz1DT05WX1RfU1RSSURFU1szXSwgYWN0aXZhdGlvbj1DT05WX1RfQUNUSVZBVElPTlNbM10pICMgLCBrZXJuZWxfcmVndWxhcml6ZXI9bDIoMC4wMDAxKSkKICAgICAgICB2YWVfZDRfbW9kZWwgPSB2YWVfZDQodmFlX2QzX21vZGVsKQoKICAgICAgICAjIERFQ09ERVIgT05MWQogICAgICAgIHZhZV9kZW5zZV9kZWNvZGVyID0gdmFlX2RlbnNlKHZhZV96X2lucHV0KQogICAgICAgIHZhZV96X291dF9kZWNvZGVyID0gdmFlX3pfb3V0KHZhZV9kZW5zZV9kZWNvZGVyKQoKICAgICAgICB2YWVfZDFfZGVjb2RlciA9IHZhZV9kMSh2YWVfel9vdXRfZGVjb2RlcikKICAgICAgICB2YWVfZDJfZGVjb2RlciA9IHZhZV9kMih2YWVfZDFfZGVjb2RlcikKICAgICAgICB2YWVfZDNfZGVjb2RlciA9IHZhZV9kMyh2YWVfZDJfZGVjb2RlcikKICAgICAgICB2YWVfZDRfZGVjb2RlciA9IHZhZV9kNCh2YWVfZDNfZGVjb2RlcikKCiAgICAgICAgIyBNT0RFTFMKICAgICAgICB2YWUgPSBNb2RlbCh2YWVfeCwgdmFlX2Q0X21vZGVsKQogICAgICAgIHZhZV9lbmNvZGVyID0gTW9kZWwodmFlX3gsIHZhZV96KQogICAgICAgIHZhZV9kZWNvZGVyID0gTW9kZWwodmFlX3pfaW5wdXQsIHZhZV9kNF9kZWNvZGVyKQoKICAgICAgICBkZWYgdmFlX3JfbG9zcyh5X3RydWUsIHlfcHJlZCk6CiAgICAgICAgICAgIHlfdHJ1ZV9mbGF0ID0gSy5mbGF0dGVuKHlfdHJ1ZSkKICAgICAgICAgICAgeV9wcmVkX2ZsYXQgPSBLLmZsYXR0ZW4oeV9wcmVkKQoKICAgICAgICAgICAgcmV0dXJuIDEwICogSy5tZWFuKEsuc3F1YXJlKHlfdHJ1ZV9mbGF0IC0geV9wcmVkX2ZsYXQpLCBheGlzPS0xKQoKICAgICAgICBkZWYgdmFlX2tsX2xvc3MoeV90cnVlLCB5X3ByZWQpOgogICAgICAgICAgICBrbF9sb3NzID0gLSAwLjUgKiBLLm1lYW4oMSArIHZhZV96X2xvZ192YXIgLSBLLnNxdWFyZSh2YWVfel9tZWFuKSAtIEsuZXhwKHZhZV96X2xvZ192YXIpLCBheGlzPS0xKQogICAgICAgICAgICAjIHN0b3Agb3B0aW1pemluZyBmb3IgS0wgbG9zcyB0ZXJtIG9uY2UgaXQgaXMgbG93ZXIgdGhhbiBzb21lIGxldmVsLCByYXRoZXIgdGhhbiBsZXR0aW5nIGl0IGdvIHRvIG5lYXIgemVyby4KICAgICAgICAgICAgIyBTbyBvcHRpbWl6ZSBmb3IgdGYubWF4KEtMLCBnb29kX2Vub3VnaF9rbF9sZXZlbCkgaW5zdGVhZCwgdG8gcmVsYXggdGhlIGluZm9ybWF0aW9uIGJvdHRsZW5lY2sgb2YgdGhlIFZBRS4KICAgICAgICAgICAga2xfdG9sZXJhbmNlID0gMC41CiAgICAgICAgICAgIGtsX2xvc3MgPSBLLm1heGltdW0oa2xfbG9zcywga2xfdG9sZXJhbmNlKlpfRElNKQogICAgICAgICAgICByZXR1cm4ga2xfbG9zcwoKICAgICAgICBkZWYgdmFlX2xvc3MoeV90cnVlLCB5X3ByZWQpOgogICAgICAgICAgICByZXR1cm4gdmFlX3JfbG9zcyh5X3RydWUsIHlfcHJlZCkgKyB2YWVfa2xfbG9zcyh5X3RydWUsIHlfcHJlZCkKCiAgICAgICAgb3B0aW1pemVyID0gQWRhbShscj0wLjAwMDEpCiAgICAgICAgIyBvcHRpbWl6ZXIgPSBTR0QobHI9MC4wMDEsIGRlY2F5PTFlLTQsIG1vbWVudHVtPTAuOSwgbmVzdGVyb3Y9VHJ1ZSkKICAgICAgICB2YWUuY29tcGlsZShvcHRpbWl6ZXI9b3B0aW1pemVyLCBsb3NzPXZhZV9sb3NzLCBtZXRyaWNzPVt2YWVfcl9sb3NzLCB2YWVfa2xfbG9zc10pCgogICAgICAgIHJldHVybiBbdmFlLCB2YWVfZW5jb2RlciwgdmFlX2RlY29kZXJdCgogICAgZGVmIHNldF93ZWlnaHRzKHNlbGYsIGZpbGVwYXRoKToKICAgICAgICBzZWxmLm1vZGVsLmxvYWRfd2VpZ2h0cyhmaWxlcGF0aCkKICAgICAgICBwcmludCgibG9hZCB3ZWlnaHRzIHt9IHN1Y2Nlc3NmdWxseSIuZm9ybWF0KGZpbGVwYXRoKSkKCiAgICBkZWYgdHJhaW4oc2VsZiwgZGF0YSwgaj0wLCBpPTApOgogICAgICAgIGNhbGxiYWNrc19saXN0ID0gW3NlbGYuaGlzdG9yeV0KCiAgICAgICAgc2VsZi5tb2RlbC5maXQoZGF0YSwgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICBzaHVmZmxlPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgZXBvY2hzPUVQT0NIUywKICAgICAgICAgICAgICAgICAgICAgICBiYXRjaF9zaXplPUJBVENIX1NJWkUsCiAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzPWNhbGxiYWNrc19saXN0KQoKICAgICAgICBzZWxmLm1vZGVsLnNhdmVfd2VpZ2h0cygnLi9tb2RlbHMvdmFlX3dlaWdodHNfJyArIHN0cihqKSArICdfJyArIHN0cihpKSArICcuaDUnKQoKICAgIGRlZiBwbG90X2xvc3Moc2VsZik6CiAgICAgICAgc2VsZi5oaXN0b3J5Lmxvc3NfcGxvdCgnYmF0Y2gnKQoKICAgIGRlZiBzYXZlX3dlaWdodHMoc2VsZiwgZmlsZXBhdGgpOgogICAgICAgIHNlbGYubW9kZWwuc2F2ZV93ZWlnaHRzKGZpbGVwYXRoKQoKICAgIGRlZiBnZXRfdmVjdG9yKHNlbGYsIG9ic19kYXRhKToKICAgICAgICB6ID0gc2VsZi5lbmNvZGVyLnByZWRpY3QobnAuYXJyYXkob2JzX2RhdGEpKQogICAgICAgIHJldHVybiB6CgogICAgZGVmIGdldF9vdXRwdXQoc2VsZiwgaW5wdXRfZGF0YSk6CiAgICAgICAgaW5wdXRfZGF0YSA9IG5wLmFzYXJyYXkoaW5wdXRfZGF0YSkKICAgICAgICBpZiBpbnB1dF9kYXRhLnNoYXBlID09ICgxLCAzMik6ICAjIDMyLWRpbSB2ZWN0b3IKICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5kZWNvZGVyLnByZWRpY3QoaW5wdXRfZGF0YSkKICAgICAgICAgICAgcmV0dXJuIG91dHB1dAogICAgICAgIGVsaWYgaW5wdXRfZGF0YS5zaGFwZSA9PSAoMSwgNDgsIDY0LCAzKTogICMgdGhlIHJhdyBpbWFnZQogICAgICAgICAgICBvdXRwdXQgPSBzZWxmLm1vZGVsLnByZWRpY3QoaW5wdXRfZGF0YSkKICAgICAgICAgICAgcmV0dXJuIG91dHB1dAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiSW5wdXQgc2hhcGUge30gaXMgbm90IHJpZ2h0LCBpdCBuZWVkcyB0byBiZSAoMSwzMikgb3IgKDEsNDgsNjQsMykuIi5mb3JtYXQoaW5wdXRfZGF0YS5zaGFwZSkpCgogICAgZGVmIGdlbmVyYXRlX3Jubl9kYXRhKHNlbGYsIG9ic19kYXRhLCBhY3Rpb25fZGF0YSk6CiAgICAgICAgcm5uX2lucHV0ID0gW10KICAgICAgICBybm5fb3V0cHV0ID0gW10KCiAgICAgICAgZm9yIGksIGogaW4gemlwKG9ic19kYXRhLCBhY3Rpb25fZGF0YSk6CiAgICAgICAgICAgIGkgPSBucC5hc2FycmF5KGkpIC8gMjU1LjAKICAgICAgICAgICAgcm5uX3pfaW5wdXQgPSBzZWxmLmVuY29kZXIucHJlZGljdChpKQogICAgICAgICAgICBjb25jID0gW25wLmNvbmNhdGVuYXRlKFt4LCB5XSkgZm9yIHgsIHkgaW4gemlwKHJubl96X2lucHV0LCBqKV0KICAgICAgICAgICAgcm5uX2lucHV0LmFwcGVuZChjb25jWzotMV0pCiAgICAgICAgICAgIHJubl9vdXRwdXQuYXBwZW5kKG5wLmFycmF5KHJubl96X2lucHV0WzE6XSkpCgogICAgICAgIHJubl9pbnB1dCA9IG5wLmFycmF5KHJubl9pbnB1dCkKICAgICAgICBybm5fb3V0cHV0ID0gbnAuYXJyYXkocm5uX291dHB1dCkKCiAgICAgICAgcmV0dXJuIFtybm5faW5wdXQsIHJubl9vdXRwdXRdCgo8fGZpbV9zdWZmaXh8PgogICAgICAgICMgYWNjCiAgICAgICAgIyBwbHQucGxvdChpdGVycywgc2VsZi5hY2N1cmFjeVtsb3NzX3R5cGVdLCAncicsIGxhYmVsPSd0cmFpbiBhY2MnKQogICAgICAgICMgbG9zcwogICAgICAgIHBsdC5wbG90KGl0ZXJzLCBzZWxmLmxvc3Nlc1tsb3NzX3R5cGVdLCAnZycsIGxhYmVsPSd0cmFpbiBsb3NzJykKPHxmaW1fZW5kfD4="]
["f91ab994295123c1c214ee3f998d9c3b99207218-1","f91ab994295123c1c214ee3f998d9c3b99207218","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKEMpIDIwMjAgYnkgTGFuZG1hcmsgQWNvdXN0aWNzIExMQwoKaW1wb3J0IHN5bXB5IGFzIHNwCmltcG9ydCBudW1weSBhcyBucApmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHB5cGxvdCBhcyBwbHQKPHxmaW1faG9sZXw+CkQgPSBBICogc3AubG9nKE4pICsgQiAqIHNwLmxvZyhOKSAvIEsgKyBDCgpEX2NoZWNrID0gRC5zdWJzKEssIEtfY2hlY2spIC0gRC5zdWJzKEssIHNwLnNxcnQoTikpCgpLX2V4cHJlc3Npb24gPSBzcC5zaW1wbGlmeShzcC5zb2x2ZShzcC5FcShEX2NoZWNrLCBlcHNpbG9uKSwgS19jaGVjaylbMF0pCgprYXlfcHJlZGljdG9yID0gc3AubGFtYmRpZnkoKEIsIE4sIGVwc2lsb24pLCBLX2V4cHJlc3Npb24pCgpwcmludChzcC5sYXRleChLX2V4cHJlc3Npb24pKQoKYWxwaGFzID0gbnAubGluc3BhY2UoLTIsIDIsIDQwMSkKYiA9IHNwLnN5bWJvbHMocidiX3tcYWxwaGFcXCwwOjEwfScpCmRlZl9iZXR0ZXIgPSBhbHBoYSAqIHN1bShbYltpKzFdKihhbHBoYSoqaSAtICgtMikqKmkpIGZvciBpIGluICgxLCAyLCA0LCA2KV0pCmJlZV9jb2VmcyA9IG5wLmFycmF5KFstMC4wMDY5MjU2ODcyLAogICAgICAgICAgICAgICAgICAgICAgMC4wMDI5Mzc5NjY0LAogICAgICAgICAgICAgICAgICAgICAgLTAuMDAwNzc5OTU5NSwKICAgICAgICAgICAgICAgICAgICAgIDAuMDAwMjY3MzIwOV0pCgpiZWVfcHJlZGljdG9yID0gc3AubGFtYmRpZnkoYWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZfYmV0dGVyLnN1YnMoWyhiW2ldLCBiYykgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIGJjIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppcChbMiwgMywgNSwgN10sIGJlZV9jb2VmcyldKSkKYmVlcyA9IGJlZV9wcmVkaWN0b3IoYWxwaGFzKQpkYSA9IDAuMDEKCnBsdC5ncmlkKCkKcGx0LmhsaW5lcygwLCAtMiwgMikKZm9yIGkgaW4gcmFuZ2UoNSk6CiAgICBwbHQucGxvdChhbHBoYXNbaTpdLWkqZGEvMiwgbnAuZGlmZihiZWVzLCBpKS9kYSoqaSkKCnBsdC55bGltKFstMC4xLCAwLjFdKQpwbHQuc2hvdygpCgoKZGVmIGtheV9jaGVjayhhbHBoYSwgTiwgZXBzaWxvbik6CiAgICByZXR1cm4ga2F5X3ByZWRpY3RvcihucC5hYnMoYmVlX3ByZWRpY3RvcihhbHBoYSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgTiwKICAgICAgICAgICAgICAgICAgICAgICAgIGVwc2lsb24pCgoKPHxmaW1fc3VmZml4fD4KCkssIEtfY2hlY2ssIE4sIGFscGhhID0gc3Auc3ltYm9scyhyJ0sgXGNoZWNre0t9IE4gYWxwaGEnKQpBLCBCLCBDLCBlcHNpbG9uID0gc3Auc3ltYm9scyhyJ0EgQiBDIGVwc2lsb24nKQoKPHxmaW1fZW5kfD4="]
["f91ab994295123c1c214ee3f998d9c3b99207218-2","f91ab994295123c1c214ee3f998d9c3b99207218","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKEMpIDIwMjAgYnkgTGFuZG1hcmsgQWNvdXN0aWNzIExMQwoKaW1wb3J0IHN5bXB5IGFzIHNwCmltcG9ydCBudW1weSBhcyBucApmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHB5cGxvdCBhcyBwbHQKCkssIEtfY2hlY2ssIE4sIGFscGhhID0gc3Auc3ltYm9scyhyJ0sgXGNoZWNre0t9IE4gYWxwaGEnKQpBLCBCLCBDLCBlcHNpbG9uID0gc3Auc3ltYm9scyhyJ0EgQiBDIGVwc2lsb24nKQoKRCA9IEEgKiBzcC5sb2coTikgKyBCICogc3AubG9nKE4pIC8gSyArIEMKCkRfY2hlY2sgPSBELnN1YnMoSywgS19jaGVjaykgLSBELnN1YnMoSywgc3Auc3FydChOKSkKPHxmaW1faG9sZXw+CgpwcmludChzcC5sYXRleChLX2V4cHJlc3Npb24pKQoKYWxwaGFzID0gbnAubGluc3BhY2UoLTIsIDIsIDQwMSkKYiA9IHNwLnN5bWJvbHMocidiX3tcYWxwaGFcXCwwOjEwfScpCmRlZl9iZXR0ZXIgPSBhbHBoYSAqIHN1bShbYltpKzFdKihhbHBoYSoqaSAtICgtMikqKmkpIGZvciBpIGluICgxLCAyLCA0LCA2KV0pCmJlZV9jb2VmcyA9IG5wLmFycmF5KFstMC4wMDY5MjU2ODcyLAogICAgICAgICAgICAgICAgICAgICAgMC4wMDI5Mzc5NjY0LAogICAgICAgICAgICAgICAgICAgICAgLTAuMDAwNzc5OTU5NSwKICAgICAgICAgICAgICAgICAgICAgIDAuMDAwMjY3MzIwOV0pCgpiZWVfcHJlZGljdG9yID0gc3AubGFtYmRpZnkoYWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZfYmV0dGVyLnN1YnMoWyhiW2ldLCBiYykgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIGJjIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppcChbMiwgMywgNSwgN10sIGJlZV9jb2VmcyldKSkKYmVlcyA9IGJlZV9wcmVkaWN0b3IoYWxwaGFzKQpkYSA9IDAuMDEKCnBsdC5ncmlkKCkKcGx0LmhsaW5lcygwLCAtMiwgMikKZm9yIGkgaW4gcmFuZ2UoNSk6CiAgICBwbHQucGxvdChhbHBoYXNbaTpdLWkqZGEvMiwgbnAuZGlmZihiZWVzLCBpKS9kYSoqaSkKCnBsdC55bGltKFstMC4xLCAwLjFdKQpwbHQuc2hvdygpCgoKZGVmIGtheV9jaGVjayhhbHBoYSwgTiwgZXBzaWxvbik6CiAgICByZXR1cm4ga2F5X3ByZWRpY3RvcihucC5hYnMoYmVlX3ByZWRpY3RvcihhbHBoYSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgTiwKICAgICAgICAgICAgICAgICAgICAgICAgIGVwc2lsb24pCgoKPHxmaW1fc3VmZml4fD4KCktfZXhwcmVzc2lvbiA9IHNwLnNpbXBsaWZ5KHNwLnNvbHZlKHNwLkVxKERfY2hlY2ssIGVwc2lsb24pLCBLX2NoZWNrKVswXSkKCmtheV9wcmVkaWN0b3IgPSBzcC5sYW1iZGlmeSgoQiwgTiwgZXBzaWxvbiksIEtfZXhwcmVzc2lvbikKPHxmaW1fZW5kfD4="]
["44a80bf66d73df55fc6eaffe7a81b7855fa3fff5-1","44a80bf66d73df55fc6eaffe7a81b7855fa3fff5","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vcHl0aG9uMwoKIyBDb3B5cmlnaHQgKGMpIDIwMTkgRmlsaXBwbyBSYW56YSA8ZmlsaXBwb3JhbnphQGdtYWlsLmNvbT4KCgoiIiIKVGhpcyBzY3JpcHQgY29udGFpbnMgTWFpbFNlbmRlciBhIHdyYXBwZXIgYXJvdW5kCnB5dGhvbidzIGVtYWlsIGFuZCBzbXRwIGltcGxlbWVudGF0aW9uIGFuZCBpdCdzCmZhY3RvcnkgZnVuY3Rpb24KIiIiCjx8ZmltX2hvbGV8Pgpmcm9tIGVtYWlsLm1pbWUubXVsdGlwYXJ0IGltcG9ydCBNSU1FTXVsdGlwYXJ0CmZyb20gZW1haWwubWltZS5hcHBsaWNhdGlvbiBpbXBvcnQgTUlNRUFwcGxpY2F0aW9uCmZyb20gZW1haWwubWltZS50ZXh0IGltcG9ydCBNSU1FVGV4dAoKY2xhc3MgTWFpbFNlbmRlcjoKCiAgICBkZWYgX19pbml0X18oc2VsZiwgdXNlciwgcGFzc3dkLCBzZXJ2ZXIsIHBvcnQpOgogICAgICAgIHNlbGYudXNlciA9IHVzZXIKICAgICAgICBzZWxmLnBhc3N3ZCA9IHBhc3N3ZAogICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyCiAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAogICAgICAgIHNlbGYubWFpbCA9IE5vbmUKCiAgICBkZWYgX19idWlsZF9tYWlsX18oc2VsZik6CiAgICAgICAgaWYgc2VsZi5tYWlsOgogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgbWFpbCA9IE1JTUVNdWx0aXBhcnQoKQogICAgICAgIG1haWxbJ2Zyb20nXSA9IHNlbGYudXNlcgogICAgICAgIHNlbGYubWFpbCA9IG1haWwKCiAgICBkZWYgbWFrZV9tYWlsKHNlbGYsIG1zZyk6CiAgICAgICAgc2VsZi5fX2J1aWxkX21haWxfXygpCiAgICAgICAgdGV4dCA9IE1JTUVUZXh0KG1zZywgJ3BsYWluJykKICAgICAgICBzZWxmLm1haWwuYXR0YWNoKHRleHQpCgogICAgZGVmIG1ha2VfYXR0YWNobWVudChzZWxmLCBkYXRhLCBuYW1lKToKICAgICAgICBzZWxmLl9fYnVpbGRfbWFpbF9fKCkKICAgICAgICBhdHRhY2ggPSBNSU1FQXBwbGljYXRpb24oZGF0YSwgTmFtZT1uYW1lKQogICAgICAgIGF0dGFjaFsnQ29udGVudC1EaXNwb3NpdGlvbiddID0gJ2F0dGFjaG1lbnQ7IGZpbGVuYW1lPSIlcyInICUgbmFtZQogICAgICAgIHNlbGYubWFpbC5hdHRhY2goYXR0YWNoKQoKICAgIGRlZiBzZXRfc3ViamVjdChzZWxmLCBzdWJqKToKICAgICAgICBzZWxmLl9fYnVpbGRfbWFpbF9fKCkKICAgICAgICBzZWxmLm1haWxbJ1N1YmplY3QnXSA9IHN1YmoKCiAgICBkZWYgc2VuZF9tYWlsKHNlbGYsIGRlc3QpOgogICAgICAgIHNlcnZlciA9IHNtdHBsaWIuU01UUChzZWxmLnNlcnZlciwgcG9ydD1zZWxmLnBvcnQpCiAgICAgICAgc2VydmVyLnN0YXJ0dGxzKCkKICAgICAgICBzZXJ2ZXIubG9naW4oc2VsZi51c2VyLCBzZWxmLnBhc3N3ZCkKICAgICAgICBzZXJ2ZXIuc2VuZF9tZXNzYWdlKHNlbGYubWFpbCwgdG9fYWRkcnM9ZGVzdCkKICAgICAgICBzZXJ2ZXIucXVpdCgpCgoKZGVmIGxvYWRfY29uZmlnX2ZpbGUoY29uZl9maWxlKToKICAgIHdpdGggb3Blbihjb25mX2ZpbGUpIGFzIGZfaW46CiAgICAgICAgdHJ5OgogICAgICAgICAgICBvdXQgPSBqc29uLmxvYWQoZl9pbikKICAgICAgICBleGNlcHQganNvbi5KU09ORGVjb2RlRXJyb3I6CiAgICAgICAgICAgIG91dCA9IE5vbmUKICAgIHJldHVybiBvdXQKCgpkZWYgbWFpbF9zZW5kZXJfZmFjdG9yeShjb25mX2ZpbGUpOgogICAgY29uZiA9IGxvYWRfY29uZmlnX2ZpbGUoY29uZl9maWxlKQogICAgaWYgY29uZjoKICAgICAgICB0cnk6CiAgICAgICAgICAgIG91dCA9IE1haWxTZW5kZXIoKipjb25mKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ29uZmlndXJhdGlvbiBFcnJvcicpCiAgICBlbHNlOgogICAgICAgIHJhaXNlIFR5cGVFcnJvcignRXJyb3IgaW4gQ29uZmlndXJhdGlvbiBGaWxlJykKICAgIHJldHVybiBvdXQKPHxmaW1fc3VmZml4fD4KCmltcG9ydCBqc29uCmltcG9ydCBzbXRwbGliCgo8fGZpbV9lbmR8Pg=="]
["99c7d0367d0fab512d3dd779f42a4e0a70512687-1","99c7d0367d0fab512d3dd779f42a4e0a70512687","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gbWF0cGxvdGxpYiBpbXBvcnQgcHlwbG90IGFzIHBsdAoKCmRlZiBwbG90X3ByZWRpY3Rpb25zKGRhdGFfaW5wdXRzLCBleHBlY3RlZF9vdXRwdXRzLCBwcmVkaWN0ZWRfb3V0cHV0cywgc2F2ZT1GYWxzZSk6CiAgICBwbHQuZmlndXJlKGZpZ3NpemU9KDEyLCAzKSkKCiAgICBmb3Igb3V0cHV0X2RpbV9pbmRleCBpbiByYW5nZShwcmVkaWN0ZWRfb3V0cHV0cy5zaGFwZVstMV0pOgogICAgICAgIHBhc3QgPSBkYXRhX2lucHV0c1s6LCBvdXRwdXRfZGltX2luZGV4XQo8fGZpbV9ob2xlfD4KICAgICAgICBsYWJlbDIgPSAiVHJ1ZSBmdXR1cmUgdmFsdWVzIiBpZiBvdXRwdXRfZGltX2luZGV4ID09IDAgZWxzZSAiX25vbGVnZW5kXyIKICAgICAgICBsYWJlbDMgPSAiUHJlZGljdGlvbnMiIGlmIG91dHB1dF9kaW1faW5kZXggPT0gMCBlbHNlICJfbm9sZWdlbmRfIgoKICAgICAgICBwbHQucGxvdChyYW5nZShwYXN0LnNoYXBlWzBdKSwgcGFzdCwgIm8tLWIiLCBsYWJlbD1sYWJlbDEpCiAgICAgICAgcGx0LnBsb3QocmFuZ2UocGFzdC5zaGFwZVswXSwgZXhwZWN0ZWQuc2hhcGVbMF0gKyBwYXN0LnNoYXBlWzBdKSwgZXhwZWN0ZWQsICJ4LS1iIiwgbGFiZWw9bGFiZWwyKQogICAgICAgIHBsdC5wbG90KHJhbmdlKHBhc3Quc2hhcGVbMF0sIHByZWQuc2hhcGVbMF0gKyBwYXN0LnNoYXBlWzBdKSwgcHJlZCwgIm8tLXkiLCBsYWJlbD1sYWJlbDMpCgogICAgcGx0LmxlZ2VuZChsb2M9J2Jlc3QnKQogICAgdGl0bGUgPSAiRXhlcmNpY2UgUHJlZGljdGlvbnMgdi5zLiB0cnVlIHZhbHVlcyIKICAgIHBsdC50aXRsZSh0aXRsZSkKCiAgICBpZiBzYXZlOgogICAgICAgIHBsdC5zYXZlZmlnKHRpdGxlICsgJy5wbmcnKQoKICAgIHBsdC5zaG93KCkKCgpkZWYgcGxvdF9tZXRyaWNzKHBpcGVsaW5lLCBleGVyY2ljZV9udW1iZXIpOgogICAgbXNlX3RyYWluID0gcGlwZWxpbmUuZ2V0X3N0ZXBfYnlfbmFtZSgnZXBvY2hfbWV0cmljcycpLmdldF9tZXRyaWNfdHJhaW4oJ21zZScpCiAgICBwcmludCgnbGFzdCBtc2UgdHJhaW46IHt9Jy5mb3JtYXQobXNlX3RyYWluWy0xXSkpCiAgICBwcmludCgnYmVzdCBtc2UgdHJhaW46IHt9Jy5mb3JtYXQobWluKG1zZV90cmFpbikpKQoKICAgIG1zZV92YWxpZGF0aW9uID0gcGlwZWxpbmUuZ2V0X3N0ZXBfYnlfbmFtZSgnZXBvY2hfbWV0cmljcycpLmdldF9tZXRyaWNfdmFsaWRhdGlvbignbXNlJykKICAgIHByaW50KCdsYXN0IG1zZSB2YWxpZGF0aW9uOiB7fScuZm9ybWF0KG1zZV92YWxpZGF0aW9uWy0xXSkpCiAgICBwcmludCgnYmVzdCBtc2UgdmFsaWRhdGlvbjoge30nLmZvcm1hdChtaW4obXNlX3ZhbGlkYXRpb24pKSkKCiAgICBwbG90X21ldHJpYygKICAgICAgICBtc2VfdHJhaW4sCiAgICAgICAgbXNlX3ZhbGlkYXRpb24sCiAgICAgICAgeGxhYmVsPSdlcG9jaCcsCiAgICAgICAgeWxhYmVsPSdtc2UnLAogICAgICAgIHRpdGxlPSdFeGVyY2ljZSB7fSBNb2RlbCBNZWFuIFNxdWFyZWQgRXJyb3InLmZvcm1hdChleGVyY2ljZV9udW1iZXIpCiAgICApCgoKZGVmIHBsb3RfbWV0cmljKG1ldHJpY190cmFpbiwgbWV0cmljX3ZhbGlkYXRpb249Tm9uZSwgeGxhYmVsPSd4JywgeWxhYmVsPSd5JywgdGl0bGU9J01ldHJpYycsIHNhdmU9RmFsc2UpOgogICAgcGx0LnBsb3QocmFuZ2UobGVuKG1ldHJpY190cmFpbikpLCBtZXRyaWNfdHJhaW4pCgogICAgaWYgbGVuKG1ldHJpY192YWxpZGF0aW9uKSA8PSBsZW4obWV0cmljX3RyYWluKToKICAgICAgICBkb21haW5fdmFsID0gbGlzdChucC5saW5zcGFjZSgwLCBsZW4obWV0cmljX3RyYWluKSAtIDEsIG51bT1sZW4obWV0cmljX3ZhbGlkYXRpb24pKSkKICAgIGVsc2U6CiAgICAgICAgZG9tYWluX3ZhbCA9IGxpc3QocmFuZ2UobGVuKG1ldHJpY192YWxpZGF0aW9uKSkpCgogICAgbGVnZW5kID0gWyd0cmFpbmluZyddCiAgICBpZiBtZXRyaWNfdmFsaWRhdGlvbiBpcyBub3QgTm9uZToKICAgICAgICBwbHQucGxvdChkb21haW5fdmFsLCBtZXRyaWNfdmFsaWRhdGlvbikKICAgICAgICBsZWdlbmQuYXBwZW5kKCd2YWxpZGF0aW9uJykKCiAgICBwbHQueGxhYmVsKHhsYWJlbCkKICAgIHBsdC55bGFiZWwoeWxhYmVsKQogICAgcGx0LnRpdGxlKHRpdGxlKQoKICAgIHBsdC5sZWdlbmQobGVnZW5kLCBsb2M9J3VwcGVyIGxlZnQnKQogICAgaWYgc2F2ZToKICAgICAgICBwbHQuc2F2ZWZpZyh0aXRsZSArICcucG5nJykKICAgIHBsdC5zaG93KCkKICAgIHBsdC5jbG9zZSgpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3RlZF9vdXRwdXRzWzosIG91dHB1dF9kaW1faW5kZXhdCiAgICAgICAgcHJlZCA9IHByZWRpY3RlZF9vdXRwdXRzWzosIG91dHB1dF9kaW1faW5kZXhdCgogICAgICAgIGxhYmVsMSA9ICJTZWVuIChwYXN0KSB2YWx1ZXMiIGlmIG91dHB1dF9kaW1faW5kZXggPT0gMCBlbHNlICJfbm9sZWdlbmRfIgo8fGZpbV9lbmR8Pg=="]
["99c7d0367d0fab512d3dd779f42a4e0a70512687-2","99c7d0367d0fab512d3dd779f42a4e0a70512687","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gbWF0cGxvdGxpYiBpbXBvcnQgcHlwbG90IGFzIHBsdAoKCmRlZiBwbG90X3ByZWRpY3Rpb25zKGRhdGFfaW5wdXRzLCBleHBlY3RlZF9vdXRwdXRzLCBwcmVkaWN0ZWRfb3V0cHV0cywgc2F2ZT1GYWxzZSk6CiAgICBwbHQuZmlndXJlKGZpZ3NpemU9KDEyLCAzKSkKCiAgICBmb3Igb3V0cHV0X2RpbV9pbmRleCBpbiByYW5nZShwcmVkaWN0ZWRfb3V0cHV0cy5zaGFwZVstMV0pOgogICAgICAgIHBhc3QgPSBkYXRhX2lucHV0c1s6LCBvdXRwdXRfZGltX2luZGV4XQogICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWRfb3V0cHV0c1s6LCBvdXRwdXRfZGltX2luZGV4XQogICAgICAgIHByZWQgPSBwcmVkaWN0ZWRfb3V0cHV0c1s6LCBvdXRwdXRfZGltX2luZGV4XQoKICAgICAgICBsYWJlbDEgPSAiU2VlbiAocGFzdCkgdmFsdWVzIiBpZiBvdXRwdXRfZGltX2luZGV4ID09IDAgZWxzZSAiX25vbGVnZW5kXyIKICAgICAgICBsYWJlbDIgPSAiVHJ1ZSBmdXR1cmUgdmFsdWVzIiBpZiBvdXRwdXRfZGltX2luZGV4ID09IDAgZWxzZSAiX25vbGVnZW5kXyIKICAgICAgICBsYWJlbDMgPSAiUHJlZGljdGlvbnMiIGlmIG91dHB1dF9kaW1faW5kZXggPT0gMCBlbHNlICJfbm9sZWdlbmRfIgoKICAgICAgICBwbHQucGxvdChyYW5nZShwYXN0LnNoYXBlWzBdKSwgcGFzdCwgIm8tLWIiLCBsYWJlbD1sYWJlbDEpCiAgICAgICAgcGx0LnBsb3QocmFuZ2UocGFzdC5zaGFwZVswXSwgZXhwZWN0ZWQuc2hhcGVbMF0gKyBwYXN0LnNoYXBlWzBdKSwgZXhwZWN0ZWQsICJ4LS1iIiwgbGFiZWw9bGFiZWwyKQogICAgICAgIHBsdC5wbG90KHJhbmdlKHBhc3Quc2hhcGVbMF0sIHByZWQuc2hhcGVbMF0gKyBwYXN0LnNoYXBlWzBdKSwgcHJlZCwgIm8tLXkiLCBsYWJlbD1sYWJlbDMpCgogICAgcGx0LmxlZ2VuZChsb2M9J2Jlc3QnKQogICAgdGl0bGUgPSAiRXhlcmNpY2UgUHJlZGljdGlvbnMgdi5zLiB0cnVlIHZhbHVlcyIKICAgIHBsdC50aXRsZSh0aXRsZSkKCiAgICBpZiBzYXZlOgogICAgICAgIHBsdC5zYXZlZmlnKHRpdGxlICsgJy5wbmcnKQoKICAgIHBsdC5zaG93KCkKCgpkZWYgcGxvdF9tZXRyaWNzKHBpcGVsaW5lLCBleGVyY2ljZV9udW1iZXIpOgogICAgbXNlX3RyYWluID0gcGlwZWxpbmUuZ2V0X3N0ZXBfYnlfbmFtZSgnZXBvY2hfbWV0cmljcycpLmdldF9tZXRyaWNfdHJhaW4oJ21zZScpCiAgICBwcmludCgnbGFzdCBtc2UgdHJhaW46IHt9Jy5mb3JtYXQobXNlX3RyYWluWy0xXSkpCiAgICBwcmludCgnYmVzdCBtc2UgdHJhaW46IHt9Jy5mb3JtYXQobWluKG1zZV90cmFpbikpKQoKICAgIG1zZV92YWxpZGF0aW9uID0gcGlwZWxpbmUuZ2V0X3N0ZXBfYnlfbmFtZSgnZXBvY2hfbWV0cmljcycpLmdldF9tZXRyaWNfdmFsaWRhdGlvbignbXNlJykKICAgIHByaW50KCdsYXN0IG1zZSB2YWxpZGF0aW9uOiB7fScuZm9ybWF0KG1zZV92YWxpZGF0aW9uWy0xXSkpCiAgICBwcmludCgnYmVzdCBtc2UgdmFsaWRhdGlvbjoge30nLmZvcm1hdChtaW4obXNlX3ZhbGlkYXRpb24pKSkKCiAgICBwbG90X21ldHJpYygKICAgICAgICBtc2VfdHJhaW4sCiAgICAgICAgbXNlX3ZhbGlkYXRpb24sCiAgICAgICAgeGxhYmVsPSdlcG9jaCcsCiAgICAgICAgeWxhYmVsPSdtc2UnLAogICAgICAgIHRpdGxlPSdFeGVyY2ljZSB7fSBNb2RlbCBNZWFuIFNxdWFyZWQgRXJyb3InLmZvcm1hdChleGVyY2ljZV9udW1iZXIpCiAgICApCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpkZWYgcGxvdF9tZXRyaWMobWV0cmljX3RyYWluLCBtZXRyaWNfdmFsaWRhdGlvbj1Ob25lLCB4bGFiZWw9J3gnLCB5bGFiZWw9J3knLCB0aXRsZT0nTWV0cmljJywgc2F2ZT1GYWxzZSk6CiAgICBwbHQucGxvdChyYW5nZShsZW4obWV0cmljX3RyYWluKSksIG1ldHJpY190cmFpbikKCjx8ZmltX2VuZHw+"]
["c12a830c54abf01fab9cd6b40e526da0567acade-1","c12a830c54abf01fab9cd6b40e526da0567acade",{"$cut":{"chars":18656,"head":"PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbiwgdW5pY29kZV9saXRlcmFscwppbXBvcnQgb3MKaW1wb3J0IHN5cwppbXBvcnQganNvbgppbXBvcnQgdHlwZXMKaW1wb3J0IHVybGxpYgppbXBvcnQgaGFzaGxpYgppbXBvcnQgdXJscGFyc2UKaW1wb3J0IGRhdGV0aW1lCmltcG9ydCB0cmFjZWJhY2sKaW1wb3J0IHRocmVhZGluZwoKZnJvbSBiYWJlbCBpbXBvcnQgTG9jYWxlCmZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcywgcGFydGlhbApmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAoKZnJvbSBmbGFzayBpbXBvcnQgcmVxdWVzdCwgUmVzcG9uc2UsIG1ha2VfcmVzcG9uc2UsIHVybF9mb3IKCmZyb20gdm9vZG9vLmxvZyBpbXBvcnQgbG9nLCBsZXZlbCwgbG9nX2V4YywgbG9nZ2VkCmltcG9ydCB3ZWJsYWIuY29yZS5jb2RlcyBhcyBFcnJvckNvZGVzCmltcG9ydCB3ZWJsYWIuY29uZmlndXJhdGlvbl9kb2MgYXMgY29uZmlndXJhdGlvbl9kb2MKCiMgVE9ETzogY2xlYW4gdGhlc2UgaW1wb3J0cwppbXBvcnQgd2VibGFiLmNvcmUubG9naW4uZXhjIGFzIExvZ2luRXJyb3JzCmltcG9ydCB3ZWJsYWIuY29yZS5leGMgYXMgY29yZUV4YwppbXBvcnQgd2VibGFiLmV4YyBhcyBXZWJMYWJFcnJvcnMKaW1wb3J0IHZvb2Rvby5leGMgYXMgVm9vZG9vRXJyb3JzCgpkZWYgc2ltcGxpZnlfcmVzcG9uc2UocmVzcG9uc2UsIGxpbWl0ID0gMTUsIGNvdW50ZXIgPSAwKToKICAgICIiIgogICAgUmVjdXJzaXZlbHkgc2VyaWFsaXplcyB0aGUgcmVzcG9uc2UgaW50byBhIEpTT04gZGljdGlvbmFyeS4gQmVjYXVzZSB0aGUgcmVzcG9uc2Ugb2JqZWN0IGNvdWxkIGFjdHVhbGx5CiAgICBjb250YWluIGN5Y2xpYyByZWZlcmVuY2VzLCB3ZSBsaW1pdCB0aGUgbWF4aW11bSBkZXB0aC4KICAgICIiIgogICAgaWYgY291bnRlciA9PSBsaW1pdDoKICAgICAgICByZXR1cm4gTm9uZQogICAgaWYgaXNpbnN0YW5jZShyZXNwb25zZSwgKGJhc2VzdHJpbmcsIGludCwgbG9uZywgZmxvYXQsIGJvb2wpKToKICAgICAgICByZXR1cm4gcmVzcG9uc2UKICAgIGlmIGlzaW5zdGFuY2UocmVzcG9uc2UsIChsaXN0LCB0dXBsZSkpOgogICAgICAgIG5ld19yZXNwb25zZSA9IFtdCiAgICAgICAgZm9yIGkgaW4gcmVzcG9uc2U6CiAgICAgICAgICAgIG5ld19yZXNwb25zZS5hcHBlbmQoc2ltcGxpZnlfcmVzcG9uc2UoaSwgbGltaXQsIGNvdW50ZXIgKyAxLCkpCiAgICAgICAgcmV0dXJuIG5ld19yZXNwb25zZQogICAgaWYgaXNpbnN0YW5jZShyZXNwb25zZSwgZGljdCk6CiAgICAgICAgbmV3X3Jlc3BvbnNlID0ge30KICAgICAgICBmb3IgaSBpbiByZXNwb25zZToKICAgICAgICAgICAgbmV3X3Jlc3BvbnNlW2ldID0gc2ltcGxpZnlfcmVzcG9uc2UocmVzcG9uc2VbaV0sIGxpbWl0LCBjb3VudGVyICsgMSkKICAgICAgICByZXR1cm4gbmV3X3Jlc3BvbnNlCiAgICBpZiBpc2luc3RhbmNlKHJlc3BvbnNlLCAoZGF0ZXRpbWUuZGF0ZXRpbWUsIGRhdGV0aW1lLmRhdGUsIGRhdGV0aW1lLnRpbWUpKToKICAgICAgICByZXR1cm4gcmVzcG9uc2UuaXNvZm9ybWF0KCkKICAgIHJldCA9IHt9CiAgICBmb3IgYXR0ciBpbiBbIGEgZm9yIGEgaW4gZGlyKHJlc3BvbnNlKSBpZiBub3QgYS5zdGFydHN3aXRoKCdfJykgXToKICAgICAgICBpZiBub3QgaGFzYXR0cihyZXNwb25zZS5fX2NsYXNzX18sIGF0dHIpOgogICAgICAgICAgICBhdHRyX3ZhbHVlID0gZ2V0YXR0cihyZXNwb25zZSwgYXR0cikKICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXR0cl92YWx1ZSwgdHlwZXMuRnVuY3Rpb25UeXBlKSBhbmQgbm90IGlzaW5zdGFuY2UoYXR0cl92YWx1ZSwgdHlwZXMuTWV0aG9kVHlwZSk6CiAgICAgICAgICAgICAgICByZXRbYXR0cl0gPSBzaW1wbGlmeV9yZXNwb25zZShhdHRyX3ZhbHVlLCBsaW1pdCwgY291bnRlciArIDEpCiAgICByZXR1cm4gcmV0CgpFWENFUFRJT05TID0gKAogICAgICAgICMKICAgICAgICAjIEVYQ0VQVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QQUdBVEUgVE8gQ0xJRU5UCiAgICAgICAgIwogICAgICAgIChMb2dpbkVycm9ycy5JbnZhbGlkQ3JlZGVudGlhbHNFcnJvciwgRXJyb3JDb2Rlcy5DTElFTlRfSU5WQUxJRF9DUkVERU5USUFMU19FWENFUFRJT05fQ09ERSwgICAgIFRydWUpLAogICAgICAgIChMb2dpbkVycm9ycy5Mb2dpbkVycm9yLCAgICAgICAgICAgICAgRXJyb3JDb2Rlcy5MT0dJTl9TRVJWRVJfRVhDRVBUSU9OX0NPREUsICAgICAgICAgICAgICAgICAgIEZhbHNlKSwKICAgICAgICAoY29yZUV4Yy5TZXNzaW9uTm90Rm91bmRFcnJvciwgICAgICAgIEVycm9yQ29kZXMuQ0xJRU5UX1NFU1NJT05fTk9UX0ZPVU5EX0VYQ0VQVElPTl9DT0RFLCAgICAgIFRydWUpLAogICAgICAgIChjb3JlRXhjLk5vQ3VycmVudFJlc2VydmF0aW9uRXJyb3IsICAgRXJyb3JDb2Rlcy5DTElFTlRfTk9fQ1VSUkVOVF9SRVNFUlZBVElPTl9FWENFUFRJT05fQ09ERSwgVHJ1ZSksCiAgICAgICAgKGNvcmVFeGMuVW5rbm93bkV4cGVyaW1lbnRJZEVycm9yLCAgICBFcnJvckNvZGVzLkNMSUVOVF9VTktOT1dOX0VYUEVSSU1FTlRfSURfRVhDRVBUSU9OX0NPREUsICBUcnVlKSwKICAgICAgICAoY29yZUV4Yy5XZWJMYWJDb3JlRXJyb3IsICAgICAgICAgICAgIEVycm9yQ29kZXMuVVBTX0dFTkVSQUxfRVhDRVBUSU9OX0NPREUsICAgICAgICAgICAgICAgICAgIEZhbHNlKSwKICAgICAgICAoV2ViTGFiRXJyb3JzLldlYkxhYkVycm9yLCAgICAgICAgICAgIEVycm9yQ29kZXMuV0VCTEFCX0dFTkVSQUxfRVhDRVBUSU9OX0NPREUsICAgICAgICAgICAgICAgIEZhbHNlKSwKICAgICAgICAoVm9vZG9vRXJyb3JzLlZvb2Rvb0Vycm9yLCAgICAgICAgIEVycm9yQ29kZXMuVk9PRE9PX0dFTkVSQUxfRVhDRVBUSU9OX0NPREUsICAgICAgICAgICAgICAgIEZhbHNlKSwKICAgICAgICAoRXhjZXB0aW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZXMuUFlUSE9O"}}]
["c12a830c54abf01fab9cd6b40e526da0567acade-2","c12a830c54abf01fab9cd6b40e526da0567acade","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbiwgdW5pY29kZV9saXRlcmFscwppbXBvcnQgb3MKaW1wb3J0IHN5cwppbXBvcnQganNvbgppbXBvcnQgdHlwZXMKaW1wb3J0IHVybGxpYgppbXBvcnQgaGFzaGxpYgppbXBvcnQgdXJscGFyc2UKaW1wb3J0IGRhdGV0aW1lCmltcG9ydCB0cmFjZWJhY2sKaW1wb3J0IHRocmVhZGluZwoKZnJvbSBiYWJlbCBpbXBvcnQgTG9jYWxlCmZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcywgcGFydGlhbApmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAoKZnJvbSBmbGFzayBpbXBvcnQgcmVxdWVzdCwgUmVzcG9uc2UsIG1ha2VfcmVzcG9uc2UsIHVybF9mb3IKCmZyb20gdm9vZG9vLmxvZyBpbXBvcnQgbG9nLCBsZXZlbCwgbG9nX2V4YywgbG9nZ2VkCmltcG9ydCB3ZWJsYWIuY29yZS5jb2RlcyBhcyBFcnJvckNvZGVzCmltcG9ydCB3ZWJsYWIuY29uZmlndXJhdGlvbl9kb2MgYXMgY29uZmlndXJhdGlvbl9kb2MKCiMgVE9ETzogY2xlYW4gdGhlc2UgaW1wb3J0cwppbXBvcnQgd2VibGFiLmNvcmUubG9naW4uZXhjIGFzIExvZ2luRXJyb3JzCmltcG9ydCB3ZWJsYWIuY29yZS5leGMgYXMgY29yZUV4YwppbXBvcnQgd2VibGFiLmV4YyBhcyBXZWJMYWJFcnJvcnMKaW1wb3J0IHZvb2Rvby5leGMgYXMgVm9vZG9vRXJyb3JzCgpkZWYgc2ltcGxpZnlfcmVzcG9uc2UocmVzcG9uc2UsIGxpbWl0ID0gMTUsIGNvdW50ZXIgPSAwKToKICAgICIiIgogICAgUmVjdXJzaXZlbHkgc2VyaWFsaXplcyB0aGUgcmVzcG9uc2UgaW50byBhIEpTT04gZGljdGlvbmFyeS4gQmVjYXVzZSB0aGUgcmVzcG9uc2Ugb2JqZWN0IGNvdWxkIGFjdHVhbGx5CiAgICBjb250YWluIGN5Y2xpYyByZWZlcmVuY2VzLCB3ZSBsaW1pdCB0aGUgbWF4aW11bSBkZXB0aC4KICAgICIiIgogICAgaWYgY291bnRlciA9PSBsaW1pdDoKICAgICAgICByZXR1cm4gTm9uZQogICAgaWYgaXNpbnN0YW5jZShyZXNwb25zZSwgKGJhc2VzdHJpbmcsIGludCwgbG9uZywgZmxvYXQsIGJvb2wpKToKICAgICAgICByZXR1cm4gcmVzcG9uc2UKICAgIGlmIGlzaW5zdGFuY2UocmVzcG9uc2UsIChsaXN0LCB0dXBsZSkpOgogICAgICAgIG5ld19yZXNwb25zZSA9IFtdCiAgICAgICAgZm9yIGkgaW4gcmVzcG9uc2U6CiAgICAgICAgICAgIG5ld19yZXNwb25zZS5hcHBlbmQoc2ltcGxpZnlfcmVzcG9uc2UoaSwgbGltaXQsIGNvdW50ZXIgKyAxLCkpCiAgICAgICAgcmV0dXJuIG5ld19yZXNwb25zZQogICAgaWYgaXNpbnN0YW5jZShyZXNwb25zZSwgZGljdCk6CiAgICAgICAgbmV3X3Jlc3BvbnNlID0ge30KICAgICAgICBmb3IgaSBpbiByZXNwb25zZToKICAgICAgICAgICAgbmV3X3Jlc3BvbnNlW2ldID0gc2ltcGxpZnlfcmVzcG9uc2UocmVzcG9uc2VbaV0sIGxpbWl0LCBjb3VudGVyICsgMSkKICAgICAgICByZXR1cm4gbmV3X3Jlc3BvbnNlCiAgICBpZiBpc2luc3RhbmNlKHJlc3BvbnNlLCAoZGF0ZXRpbWUuZGF0ZXRpbWUsIGRhdGV0aW1lLmRhdGUsIGRhdGV0aW1lLnRpbWUpKToKICAgICAgICByZXR1cm4gcmVzcG9uc2UuaXNvZm9ybWF0KCkKICAgIHJldCA9IHt9CiAgICBmb3IgYXR0ciBpbiBbIGEgZm9yIGEgaW4gZGlyKHJlc3BvbnNlKSBpZiBub3QgYS5zdGFydHN3aXRoKCdfJykgXToKICAgICAgICBpZiBub3QgaGFzYXR0cihyZXNwb25zZS5fX2NsYXNzX18sIGF0dHIpOgogICAgICAgICAgICBhdHRyX3ZhbHVlID0gZ2V0YXR0cihyZXNwb25zZSwgYXR0cikKICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXR0cl92YWx1ZSwgdHlwZXMuRnVuY3Rpb25UeXBlKSBhbmQgbm90IGlzaW5zdGFuY2UoYXR0cl92YWx1ZSwgdHlwZXMuTWV0aG9kVHlwZSk6CiAgICAgICAgICAgICAgICByZXRbYXR0cl0gPSBzaW1wbGlmeV9yZXNwb25zZShhdHRyX3ZhbHVlLCBsaW1pdCwgY291bnRlciArIDEpCiAgICByZXR1cm4gcmV0CgpFWENFUFRJT05TID0gKAogICAgICAgICMKICAgICAgICAjIEVYQ0VQVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QQUdBVEUgVE8gQ0xJRU5UCiAgICAgICAgIwogICAgICAgIChMb2dpbkVycm9ycy5JbnZhbGlkQ3JlZGVudGlhbHNFcnJvciwgRXJyb3JDb2Rlcy5DTElFTlRfSU5WQUxJRF9DUkVERU5USUFMU19FWENFUFRJT05fQ09ERSwgICAgIFRydWUpLAogICAgICAgIChMb2dpbkVycm9ycy5Mb2dpbkVycm9yLCAgICAgICAgICAgICAgRXJyb3JDb2Rlcy5MT0dJTl9TRVJWRVJfRVhDRVBUSU9OX0NPREUsICAgICAgICAgICAgICAgICAgIEZhbHNlKSwKICAgICAgICAoY29yZUV4Yy5TZXNzaW9uTm90Rm91bmRFcnJvciwgICAgICAgIEVycm9yQ29kZXMuQ0xJRU5UX1NFU1NJT05fTk9UX0ZPVU5EX0VYQ0VQVElPTl9DT0RFLCAgICAgIFRydWUpLAogICAgICAgIChjb3JlRXhjLk5vQ3VycmVudFJlc2VydmF0aW9uRXJyb3IsICAgRXJyb3JDb2Rlcy5DTElFTlRfTk9fQ1VSUkVOVF9SRVNFUlZBVElPTl9FWENFUFRJT05fQ09ERSwgVHJ1ZSksCiAgICAgICAgKGNvcmVFeGMuVW5rbm93bkV4cGVyaW1lbnRJZEVycm9yLCAgICBFcnJvckNvZGVzLkNMSUVOVF9VTktOT1dOX0VYUEVSSU1FTlRfSURfRVhDRVBUSU9OX0NPREUsICBUcnVlKSwKICAgICAgICAoY29yZUV4Yy5XZWJMYWJDb3JlRXJyb3IsICAgICAgICAgICAgIEVycm9yQ29kZXMuVVBTX0dFTkVSQUxfRVhDRVBUSU9OX0NPREUsICAgICAgICAgICAgICAgICAgIEZhbHNlKSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIChXZWJMYWJFcnJvcnMuV2ViTGFiRXJyb3IsICAgICAgICAgICAgRXJyb3JDb2Rlcy5XRUJMQUJfR0VORVJBTF9FWENFUFRJT05fQ09ERSwgICAgICAgICAgICAgICAgRmFsc2UpLAogICAgICAgIChWb29kb29FcnJvcnMuVm9vZG9vRXJyb3IsICAgICAgICAgRXJyb3JDb2Rlcy5WT09ET09fR0VORVJBTF9FWENFUFRJT05fQ09ERSwgICAgICAgICAgICAgICAgRmFsc2UpLAogICAgICAgIChFeGNlcHRpb24sICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2Rlcy5QWVRIT05fR0VORVJBTF9FWENFUFRJT05fQ09ERSwgICAgICAgICAgICAgICAgRmFsc2UpCgo8fGZpbV9lbmR8Pg=="]
["e5bce290d5ecd5f860e74c9ee9db126e5448df95-1","e5bce290d5ecd5f860e74c9ee9db126e5448df95","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuc2VyaWVzMyBpbXBvcnQgU2VyaWVzMywgU2VyaWVzM0xpbmUKPHxmaW1fZW5kfD4="]
["e5bce290d5ecd5f860e74c9ee9db126e5448df95-2","e5bce290d5ecd5f860e74c9ee9db126e5448df95","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuc2VyaWVzMyBpbXBvcnQgU2VyaWVzMywgU2VyaWVzM0xpbmUKPHxmaW1fZW5kfD4="]
["97083e4a789816682a5b677cbe993e0fa65704e3-1","97083e4a789816682a5b677cbe993e0fa65704e3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmNvcmUuZXhjZXB0aW9ucyBpbXBvcnQgT2JqZWN0RG9lc05vdEV4aXN0CmZyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgUQoKZnJvbSBhcHBzLnN0cmVhbWRhdGEubW9kZWxzIGltcG9ydCBTdHJlYW1EYXRhCmZyb20gYXBwcy5zdHJlYW1ldmVudC5tb2RlbHMgaW1wb3J0IFN0cmVhbUV2ZW50RGF0YQpmcm9tIGFwcHMudXRpbHMuYXdzLmtpbmVzaXMgaW1wb3J0IHNlbmRfdG9fZmlyZWhvc2UKCmZyb20gLmJhc2UgaW1wb3J0IERqYW5nb0Jhc2VEYXRhTWFuYWdlcgoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKY2xhc3MgRGphbmdvU3RyZWFtRGF0YU1hbmFnZXIoRGphbmdvQmFzZURhdGFNYW5hZ2VyKToKICAgICIiIgogICAgRGF0YSBtYW5hZ2VyIGZvciB0aGUgb2xkIG1vZGVsczogU3RyZWFtRGF0YSBhbmQgU3RyZWFtRXZlbnREYXRhCiAgICAiIiIKCiAgICBkZWYgX2dldF9maXJlaG9zZV9wYXlsb2FkKGNscywgc3RyZWFtX2RhdGEpOgogICAgICAgICIiIlNhbWUgYXMgU3RyZWFtRGF0YUJ1aWxkZXJIZWxwZXIuZ2V0X2ZpcmVob3NlX3BheWxvYWQiIiIKICAgICAgICBwYXlsb2FkID0gewogICAgICAgICAgICAnc3RyZWFtX3NsdWcnOiBzdHJlYW1fZGF0YS5zdHJlYW1fc2x1ZywKICAgICAgICAgICAgJ3Byb2plY3Rfc2x1Zyc6IHN0cmVhbV9kYXRhLnByb2plY3Rfc2x1ZywKICAgICAgICAgICAgJ2RldmljZV9zbHVnJzogc3RyZWFtX2RhdGEuZGV2aWNlX3NsdWcsCiAgICAgICAgICAgICd2YXJpYWJsZV9zbHVnJzogc3RyZWFtX2RhdGEudmFyaWFibGVfc2x1ZywKICAgICAgICAgICAgJ3R5cGUnOiBzdHJlYW1fZGF0YS50eXBlLAogICAgICAgICAgICAnZGlydHlfdHMnOiBzdHJlYW1fZGF0YS5kaXJ0eV90cywKICAgICAgICAgICAgJ3N0YXR1cyc6IHN0cmVhbV9kYXRhLnN0YXR1cywKICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHN0cmVhbV9kYXRhLnRpbWVzdGFtcC5zdHJmdGltZSgnJVktJW0tJWQgJUg6JU06JVMuJWYnKQogICAgICAgIH0KICAgICAgICBpZiBzdHJlYW1fZGF0YS5kZXZpY2VfdGltZXN0YW1wIGlzIG5vdCBOb25lOgogICAgICAgICAgICBwYXlsb2FkWydkZXZpY2VfdGltZXN0YW1wJ10gPSBzdHJlYW1fZGF0YS5kZXZpY2VfdGltZXN0YW1wCiAgICAgICAgaWYgc3RyZWFtX2RhdGEuaW50X3ZhbHVlIGlzIG5vdCBOb25lOgogICAgICAgICAgICBwYXlsb2FkWydpbnRfdmFsdWUnXSA9IHN0cmVhbV9kYXRhLmludF92YWx1ZQogICAgICAgIGlmIHN0cmVhbV9kYXRhLnZhbHVlIGlzIG5vdCBOb25lOgogICAgICAgICAgICBwYXlsb2FkWyd2YWx1ZSddID0gc3RyZWFtX2RhdGEudmFsdWUKICAgICAgICBpZiBzdHJlYW1fZGF0YS5zdHJlYW1lcl9sb2NhbF9pZCBpcyBub3QgTm9uZToKICAgICAgICAgICAgcGF5bG9hZFsnc3RyZWFtZXJfbG9jYWxfaWQnXSA9IHN0cmVhbV9kYXRhLnN0cmVhbWVyX2xvY2FsX2lkCjx8ZmltX2hvbGV8PgogICAgZGVmIGdldF9tb2RlbChjbHMsIG5hbWUpOgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICdkYXRhJzogU3RyZWFtRGF0YSwKICAgICAgICAgICAgJ2V2ZW50JzogU3RyZWFtRXZlbnREYXRhLAogICAgICAgIH1bbmFtZV0KCiAgICBkZWYgc2VuZF90b19maXJlaG9zZShjbHMsIG1vZGVsLCBwYXlsb2FkKToKICAgICAgICAiIiJTZW5kcyB0aGUgcGF5bG9hZCB0byBGaXJlaG9zZQoKICAgICAgICBBcmdzOgogICAgICAgICAgICBtb2RlbCAoc3RyKTogdHlwZSBvZiBtb2RlbCBzZW50IHRvIEZpcmVob3NlIChPTkxZICdkYXRhJyBpcyB2YWxpZCBmb3IgdGhpcyBtYW5hZ2VyKS4KICAgICAgICAgICAgcGF5bG9hZCAobGlzdCk6IGxpc3Qgb2YgbW9kZWwgaW5zdGFuY2VzLgogICAgICAgICAgICAgICAgVGhpcyBsaXN0L2NvbGxlY3Rpb24gc2hvdWxkIGJlIGEgY29sbGVjdGlvbiBvZiBTdHJlYW1EYXRhCiAgICAgICAgICAgICAgICBpbnN0YW5jZXMgdGhhdCBoYXZlIHRvIGJlIHNlbnQgdG8gRmlyZWhvc2UuIFRoZXknbGwgYmUKICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWQgdG8gYSBKU09OIHBheWxvYWQgYnkgdGhpcyBtZXRob2QuCiAgICAgICAgIiIiCiAgICAgICAgYXNzZXJ0IG1vZGVsID09ICdkYXRhJwogICAgICAgIGZpcmVob3NlX2RhdGFfZW50cmllcyA9IFtdCiAgICAgICAgZm9yIGRhdGEgaW4gcGF5bG9hZDoKICAgICAgICAgICAgZmlyZWhvc2VfcGF5bG9hZCA9IGNscy5fZ2V0X2ZpcmVob3NlX3BheWxvYWQoZGF0YSkKICAgICAgICAgICAgYXNzZXJ0IChmaXJlaG9zZV9wYXlsb2FkWydpbnRfdmFsdWUnXSBpcyBub3QgTm9uZSkKICAgICAgICAgICAgYXNzZXJ0IChmaXJlaG9zZV9wYXlsb2FkWydpbnRfdmFsdWUnXSA9PSBkYXRhLmludF92YWx1ZSkKICAgICAgICAgICAgZmlyZWhvc2VfZGF0YV9lbnRyaWVzLmFwcGVuZChmaXJlaG9zZV9wYXlsb2FkKQogICAgICAgIGxvZ2dlci5kZWJ1ZygnVXNpbmcgZmlyZWhvc2UgKFByb2R1Y3Rpb24gPSB7MH0pJy5mb3JtYXQoZ2V0YXR0cihzZXR0aW5ncywgJ1BST0RVQ1RJT04nKSkpCiAgICAgICAgc2VuZF90b19maXJlaG9zZShmaXJlaG9zZV9kYXRhX2VudHJpZXMsIGJhdGNoX251bT00OTApCgogICAgZGVmIGJ1aWxkKGNscywgbW9kZWwsICoqa3dhcmdzKToKICAgICAgICBjbHMuX3ZhbGlkYXRlX2t3YXJncyhtb2RlbCwgJ2J1aWxkJywga3dhcmdzKQogICAgICAgIHJldHVybiBjbHMuZ2V0X21vZGVsKG1vZGVsKSgqKmt3YXJncykKCiAgICBkZWYgZ2V0KGNscywgbW9kZWwsICoqa3dhcmdzKToKICAgICAgICBjbHMuX3ZhbGlkYXRlX2t3YXJncyhtb2RlbCwgJ2dldCcsIGt3YXJncykKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJldHVybiBjbHMuZ2V0X21vZGVsKG1vZGVsKS5vYmplY3RzLmdldCgqKmt3YXJncykKICAgICAgICBleGNlcHQgY2xzLmdldF9tb2RlbChtb2RlbCkuRG9lc05vdEV4aXN0OgogICAgICAgICAgICByYWlzZSBPYmplY3REb2VzTm90RXhpc3QobW9kZWwpCgogICAgZGVmIGZpbHRlcl9xcyhjbHMsIG1vZGVsLCAqKmt3YXJncyk6CiAgICAgICAgY2xzLl92YWxpZGF0ZV9rd2FyZ3MobW9kZWwsICdmaWx0ZXInLCBrd2FyZ3MpCiAgICAgICAgcmV0dXJuIGNscy5nZXRfbW9kZWwobW9kZWwpLm9iamVjdHMuZmlsdGVyKCoqa3dhcmdzKQoKICAgIGRlZiBmaWx0ZXJfcXNfdXNpbmdfcShjbHMsIG1vZGVsLCBxLCBleHRyYXM9W10pOgogICAgICAgIGFzc2VydCB0eXBlKHEpIGlzIFEsICdJbnZhbGlkIGFyZ3VtZW50OiBtdXN0IGJlIGEgUSBvYmplY3QnCiAgICAgICAgY2xzLl92YWxpZGF0ZV9xKG1vZGVsLCAnZmlsdGVyJywgcSwgZXh0cmFzKQogICAgICAgIHJldHVybiBjbHMuZ2V0X21vZGVsKG1vZGVsKS5vYmplY3RzLmZpbHRlcihxKQoKICAgIGRlZiBkZl9maWx0ZXJfcXNfdXNpbmdfcShjbHMsIG1vZGVsLCBxLCBleHRyYXM9W10pOgogICAgICAgIGFzc2VydCB0eXBlKHEpIGlzIFEsICdJbnZhbGlkIGFyZ3VtZW50OiBtdXN0IGJlIGEgUSBvYmplY3QnCiAgICAgICAgY2xzLl92YWxpZGF0ZV9xKG1vZGVsLCAnZmlsdGVyJywgcSwgZXh0cmFzKQogICAgICAgIHJldHVybiBjbHMuZ2V0X21vZGVsKG1vZGVsKS5kZl9vYmplY3RzLmZpbHRlcihxKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJldHVybiBwYXlsb2FkCgo8fGZpbV9lbmR8Pg=="]
["97083e4a789816682a5b677cbe993e0fa65704e3-2","97083e4a789816682a5b677cbe993e0fa65704e3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmNvcmUuZXhjZXB0aW9ucyBpbXBvcnQgT2JqZWN0RG9lc05vdEV4aXN0CmZyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgUQoKZnJvbSBhcHBzLnN0cmVhbWRhdGEubW9kZWxzIGltcG9ydCBTdHJlYW1EYXRhCmZyb20gYXBwcy5zdHJlYW1ldmVudC5tb2RlbHMgaW1wb3J0IFN0cmVhbUV2ZW50RGF0YQpmcm9tIGFwcHMudXRpbHMuYXdzLmtpbmVzaXMgaW1wb3J0IHNlbmRfdG9fZmlyZWhvc2UKCjx8ZmltX2hvbGV8PgoKY2xhc3MgRGphbmdvU3RyZWFtRGF0YU1hbmFnZXIoRGphbmdvQmFzZURhdGFNYW5hZ2VyKToKICAgICIiIgogICAgRGF0YSBtYW5hZ2VyIGZvciB0aGUgb2xkIG1vZGVsczogU3RyZWFtRGF0YSBhbmQgU3RyZWFtRXZlbnREYXRhCiAgICAiIiIKCiAgICBkZWYgX2dldF9maXJlaG9zZV9wYXlsb2FkKGNscywgc3RyZWFtX2RhdGEpOgogICAgICAgICIiIlNhbWUgYXMgU3RyZWFtRGF0YUJ1aWxkZXJIZWxwZXIuZ2V0X2ZpcmVob3NlX3BheWxvYWQiIiIKICAgICAgICBwYXlsb2FkID0gewogICAgICAgICAgICAnc3RyZWFtX3NsdWcnOiBzdHJlYW1fZGF0YS5zdHJlYW1fc2x1ZywKICAgICAgICAgICAgJ3Byb2plY3Rfc2x1Zyc6IHN0cmVhbV9kYXRhLnByb2plY3Rfc2x1ZywKICAgICAgICAgICAgJ2RldmljZV9zbHVnJzogc3RyZWFtX2RhdGEuZGV2aWNlX3NsdWcsCiAgICAgICAgICAgICd2YXJpYWJsZV9zbHVnJzogc3RyZWFtX2RhdGEudmFyaWFibGVfc2x1ZywKICAgICAgICAgICAgJ3R5cGUnOiBzdHJlYW1fZGF0YS50eXBlLAogICAgICAgICAgICAnZGlydHlfdHMnOiBzdHJlYW1fZGF0YS5kaXJ0eV90cywKICAgICAgICAgICAgJ3N0YXR1cyc6IHN0cmVhbV9kYXRhLnN0YXR1cywKICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHN0cmVhbV9kYXRhLnRpbWVzdGFtcC5zdHJmdGltZSgnJVktJW0tJWQgJUg6JU06JVMuJWYnKQogICAgICAgIH0KICAgICAgICBpZiBzdHJlYW1fZGF0YS5kZXZpY2VfdGltZXN0YW1wIGlzIG5vdCBOb25lOgogICAgICAgICAgICBwYXlsb2FkWydkZXZpY2VfdGltZXN0YW1wJ10gPSBzdHJlYW1fZGF0YS5kZXZpY2VfdGltZXN0YW1wCiAgICAgICAgaWYgc3RyZWFtX2RhdGEuaW50X3ZhbHVlIGlzIG5vdCBOb25lOgogICAgICAgICAgICBwYXlsb2FkWydpbnRfdmFsdWUnXSA9IHN0cmVhbV9kYXRhLmludF92YWx1ZQogICAgICAgIGlmIHN0cmVhbV9kYXRhLnZhbHVlIGlzIG5vdCBOb25lOgogICAgICAgICAgICBwYXlsb2FkWyd2YWx1ZSddID0gc3RyZWFtX2RhdGEudmFsdWUKICAgICAgICBpZiBzdHJlYW1fZGF0YS5zdHJlYW1lcl9sb2NhbF9pZCBpcyBub3QgTm9uZToKICAgICAgICAgICAgcGF5bG9hZFsnc3RyZWFtZXJfbG9jYWxfaWQnXSA9IHN0cmVhbV9kYXRhLnN0cmVhbWVyX2xvY2FsX2lkCiAgICAgICAgcmV0dXJuIHBheWxvYWQKCiAgICBkZWYgZ2V0X21vZGVsKGNscywgbmFtZSk6CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgJ2RhdGEnOiBTdHJlYW1EYXRhLAogICAgICAgICAgICAnZXZlbnQnOiBTdHJlYW1FdmVudERhdGEsCiAgICAgICAgfVtuYW1lXQoKICAgIGRlZiBzZW5kX3RvX2ZpcmVob3NlKGNscywgbW9kZWwsIHBheWxvYWQpOgogICAgICAgICIiIlNlbmRzIHRoZSBwYXlsb2FkIHRvIEZpcmVob3NlCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIG1vZGVsIChzdHIpOiB0eXBlIG9mIG1vZGVsIHNlbnQgdG8gRmlyZWhvc2UgKE9OTFkgJ2RhdGEnIGlzIHZhbGlkIGZvciB0aGlzIG1hbmFnZXIpLgogICAgICAgICAgICBwYXlsb2FkIChsaXN0KTogbGlzdCBvZiBtb2RlbCBpbnN0YW5jZXMuCiAgICAgICAgICAgICAgICBUaGlzIGxpc3QvY29sbGVjdGlvbiBzaG91bGQgYmUgYSBjb2xsZWN0aW9uIG9mIFN0cmVhbURhdGEKICAgICAgICAgICAgICAgIGluc3RhbmNlcyB0aGF0IGhhdmUgdG8gYmUgc2VudCB0byBGaXJlaG9zZS4gVGhleSdsbCBiZQogICAgICAgICAgICAgICAgc2VyaWFsaXplZCB0byBhIEpTT04gcGF5bG9hZCBieSB0aGlzIG1ldGhvZC4KICAgICAgICAiIiIKICAgICAgICBhc3NlcnQgbW9kZWwgPT0gJ2RhdGEnCiAgICAgICAgZmlyZWhvc2VfZGF0YV9lbnRyaWVzID0gW10KICAgICAgICBmb3IgZGF0YSBpbiBwYXlsb2FkOgogICAgICAgICAgICBmaXJlaG9zZV9wYXlsb2FkID0gY2xzLl9nZXRfZmlyZWhvc2VfcGF5bG9hZChkYXRhKQogICAgICAgICAgICBhc3NlcnQgKGZpcmVob3NlX3BheWxvYWRbJ2ludF92YWx1ZSddIGlzIG5vdCBOb25lKQogICAgICAgICAgICBhc3NlcnQgKGZpcmVob3NlX3BheWxvYWRbJ2ludF92YWx1ZSddID09IGRhdGEuaW50X3ZhbHVlKQogICAgICAgICAgICBmaXJlaG9zZV9kYXRhX2VudHJpZXMuYXBwZW5kKGZpcmVob3NlX3BheWxvYWQpCiAgICAgICAgbG9nZ2VyLmRlYnVnKCdVc2luZyBmaXJlaG9zZSAoUHJvZHVjdGlvbiA9IHswfSknLmZvcm1hdChnZXRhdHRyKHNldHRpbmdzLCAnUFJPRFVDVElPTicpKSkKICAgICAgICBzZW5kX3RvX2ZpcmVob3NlKGZpcmVob3NlX2RhdGFfZW50cmllcywgYmF0Y2hfbnVtPTQ5MCkKCiAgICBkZWYgYnVpbGQoY2xzLCBtb2RlbCwgKiprd2FyZ3MpOgogICAgICAgIGNscy5fdmFsaWRhdGVfa3dhcmdzKG1vZGVsLCAnYnVpbGQnLCBrd2FyZ3MpCiAgICAgICAgcmV0dXJuIGNscy5nZXRfbW9kZWwobW9kZWwpKCoqa3dhcmdzKQoKICAgIGRlZiBnZXQoY2xzLCBtb2RlbCwgKiprd2FyZ3MpOgogICAgICAgIGNscy5fdmFsaWRhdGVfa3dhcmdzKG1vZGVsLCAnZ2V0Jywga3dhcmdzKQogICAgICAgIHRyeToKICAgICAgICAgICAgcmV0dXJuIGNscy5nZXRfbW9kZWwobW9kZWwpLm9iamVjdHMuZ2V0KCoqa3dhcmdzKQogICAgICAgIGV4Y2VwdCBjbHMuZ2V0X21vZGVsKG1vZGVsKS5Eb2VzTm90RXhpc3Q6CiAgICAgICAgICAgIHJhaXNlIE9iamVjdERvZXNOb3RFeGlzdChtb2RlbCkKCiAgICBkZWYgZmlsdGVyX3FzKGNscywgbW9kZWwsICoqa3dhcmdzKToKICAgICAgICBjbHMuX3ZhbGlkYXRlX2t3YXJncyhtb2RlbCwgJ2ZpbHRlcicsIGt3YXJncykKICAgICAgICByZXR1cm4gY2xzLmdldF9tb2RlbChtb2RlbCkub2JqZWN0cy5maWx0ZXIoKiprd2FyZ3MpCgogICAgZGVmIGZpbHRlcl9xc191c2luZ19xKGNscywgbW9kZWwsIHEsIGV4dHJhcz1bXSk6CiAgICAgICAgYXNzZXJ0IHR5cGUocSkgaXMgUSwgJ0ludmFsaWQgYXJndW1lbnQ6IG11c3QgYmUgYSBRIG9iamVjdCcKICAgICAgICBjbHMuX3ZhbGlkYXRlX3EobW9kZWwsICdmaWx0ZXInLCBxLCBleHRyYXMpCiAgICAgICAgcmV0dXJuIGNscy5nZXRfbW9kZWwobW9kZWwpLm9iamVjdHMuZmlsdGVyKHEpCgogICAgZGVmIGRmX2ZpbHRlcl9xc191c2luZ19xKGNscywgbW9kZWwsIHEsIGV4dHJhcz1bXSk6CiAgICAgICAgYXNzZXJ0IHR5cGUocSkgaXMgUSwgJ0ludmFsaWQgYXJndW1lbnQ6IG11c3QgYmUgYSBRIG9iamVjdCcKICAgICAgICBjbHMuX3ZhbGlkYXRlX3EobW9kZWwsICdmaWx0ZXInLCBxLCBleHRyYXMpCiAgICAgICAgcmV0dXJuIGNscy5nZXRfbW9kZWwobW9kZWwpLmRmX29iamVjdHMuZmlsdGVyKHEpCjx8ZmltX3N1ZmZpeHw+CmZyb20gLmJhc2UgaW1wb3J0IERqYW5nb0Jhc2VEYXRhTWFuYWdlcgoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgo8fGZpbV9lbmR8Pg=="]
["97083e4a789816682a5b677cbe993e0fa65704e3-3","97083e4a789816682a5b677cbe993e0fa65704e3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmNvcmUuZXhjZXB0aW9ucyBpbXBvcnQgT2JqZWN0RG9lc05vdEV4aXN0CmZyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgUQoKZnJvbSBhcHBzLnN0cmVhbWRhdGEubW9kZWxzIGltcG9ydCBTdHJlYW1EYXRhCmZyb20gYXBwcy5zdHJlYW1ldmVudC5tb2RlbHMgaW1wb3J0IFN0cmVhbUV2ZW50RGF0YQpmcm9tIGFwcHMudXRpbHMuYXdzLmtpbmVzaXMgaW1wb3J0IHNlbmRfdG9fZmlyZWhvc2UKCmZyb20gLmJhc2UgaW1wb3J0IERqYW5nb0Jhc2VEYXRhTWFuYWdlcgoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKY2xhc3MgRGphbmdvU3RyZWFtRGF0YU1hbmFnZXIoRGphbmdvQmFzZURhdGFNYW5hZ2VyKToKICAgICIiIgogICAgRGF0YSBtYW5hZ2VyIGZvciB0aGUgb2xkIG1vZGVsczogU3RyZWFtRGF0YSBhbmQgU3RyZWFtRXZlbnREYXRhCiAgICAiIiIKCiAgICBkZWYgX2dldF9maXJlaG9zZV9wYXlsb2FkKGNscywgc3RyZWFtX2RhdGEpOgogICAgICAgICIiIlNhbWUgYXMgU3RyZWFtRGF0YUJ1aWxkZXJIZWxwZXIuZ2V0X2ZpcmVob3NlX3BheWxvYWQiIiIKICAgICAgICBwYXlsb2FkID0gewogICAgICAgICAgICAnc3RyZWFtX3NsdWcnOiBzdHJlYW1fZGF0YS5zdHJlYW1fc2x1ZywKICAgICAgICAgICAgJ3Byb2plY3Rfc2x1Zyc6IHN0cmVhbV9kYXRhLnByb2plY3Rfc2x1ZywKICAgICAgICAgICAgJ2RldmljZV9zbHVnJzogc3RyZWFtX2RhdGEuZGV2aWNlX3NsdWcsCiAgICAgICAgICAgICd2YXJpYWJsZV9zbHVnJzogc3RyZWFtX2RhdGEudmFyaWFibGVfc2x1ZywKICAgICAgICAgICAgJ3R5cGUnOiBzdHJlYW1fZGF0YS50eXBlLAogICAgICAgICAgICAnZGlydHlfdHMnOiBzdHJlYW1fZGF0YS5kaXJ0eV90cywKICAgICAgICAgICAgJ3N0YXR1cyc6IHN0cmVhbV9kYXRhLnN0YXR1cywKICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHN0cmVhbV9kYXRhLnRpbWVzdGFtcC5zdHJmdGltZSgnJVktJW0tJWQgJUg6JU06JVMuJWYnKQogICAgICAgIH0KICAgICAgICBpZiBzdHJlYW1fZGF0YS5kZXZpY2VfdGltZXN0YW1wIGlzIG5vdCBOb25lOgogICAgICAgICAgICBwYXlsb2FkWydkZXZpY2VfdGltZXN0YW1wJ10gPSBzdHJlYW1fZGF0YS5kZXZpY2VfdGltZXN0YW1wCiAgICAgICAgaWYgc3RyZWFtX2RhdGEuaW50X3ZhbHVlIGlzIG5vdCBOb25lOgogICAgICAgICAgICBwYXlsb2FkWydpbnRfdmFsdWUnXSA9IHN0cmVhbV9kYXRhLmludF92YWx1ZQogICAgICAgIGlmIHN0cmVhbV9kYXRhLnZhbHVlIGlzIG5vdCBOb25lOgogICAgICAgICAgICBwYXlsb2FkWyd2YWx1ZSddID0gc3RyZWFtX2RhdGEudmFsdWUKICAgICAgICBpZiBzdHJlYW1fZGF0YS5zdHJlYW1lcl9sb2NhbF9pZCBpcyBub3QgTm9uZToKICAgICAgICAgICAgcGF5bG9hZFsnc3RyZWFtZXJfbG9jYWxfaWQnXSA9IHN0cmVhbV9kYXRhLnN0cmVhbWVyX2xvY2FsX2lkCiAgICAgICAgcmV0dXJuIHBheWxvYWQKCiAgICBkZWYgZ2V0X21vZGVsKGNscywgbmFtZSk6CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgJ2RhdGEnOiBTdHJlYW1EYXRhLAogICAgICAgICAgICAnZXZlbnQnOiBTdHJlYW1FdmVudERhdGEsCiAgICAgICAgfVtuYW1lXQoKICAgIGRlZiBzZW5kX3RvX2ZpcmVob3NlKGNscywgbW9kZWwsIHBheWxvYWQpOgogICAgICAgICIiIlNlbmRzIHRoZSBwYXlsb2FkIHRvIEZpcmVob3NlCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIG1vZGVsIChzdHIpOiB0eXBlIG9mIG1vZGVsIHNlbnQgdG8gRmlyZWhvc2UgKE9OTFkgJ2RhdGEnIGlzIHZhbGlkIGZvciB0aGlzIG1hbmFnZXIpLgogICAgICAgICAgICBwYXlsb2FkIChsaXN0KTogbGlzdCBvZiBtb2RlbCBpbnN0YW5jZXMuCiAgICAgICAgICAgICAgICBUaGlzIGxpc3QvY29sbGVjdGlvbiBzaG91bGQgYmUgYSBjb2xsZWN0aW9uIG9mIFN0cmVhbURhdGEKICAgICAgICAgICAgICAgIGluc3RhbmNlcyB0aGF0IGhhdmUgdG8gYmUgc2VudCB0byBGaXJlaG9zZS4gVGhleSdsbCBiZQogICAgICAgICAgICAgICAgc2VyaWFsaXplZCB0byBhIEpTT04gcGF5bG9hZCBieSB0aGlzIG1ldGhvZC4KICAgICAgICAiIiIKICAgICAgICBhc3NlcnQgbW9kZWwgPT0gJ2RhdGEnCiAgICAgICAgZmlyZWhvc2VfZGF0YV9lbnRyaWVzID0gW10KICAgICAgICBmb3IgZGF0YSBpbiBwYXlsb2FkOgogICAgICAgICAgICBmaXJlaG9zZV9wYXlsb2FkID0gY2xzLl9nZXRfZmlyZWhvc2VfcGF5bG9hZChkYXRhKQogICAgICAgICAgICBhc3NlcnQgKGZpcmVob3NlX3BheWxvYWRbJ2ludF92YWx1ZSddIGlzIG5vdCBOb25lKQogICAgICAgICAgICBhc3NlcnQgKGZpcmVob3NlX3BheWxvYWRbJ2ludF92YWx1ZSddID09IGRhdGEuaW50X3ZhbHVlKQogICAgICAgICAgICBmaXJlaG9zZV9kYXRhX2VudHJpZXMuYXBwZW5kKGZpcmVob3NlX3BheWxvYWQpCiAgICAgICAgbG9nZ2VyLmRlYnVnKCdVc2luZyBmaXJlaG9zZSAoUHJvZHVjdGlvbiA9IHswfSknLmZvcm1hdChnZXRhdHRyKHNldHRpbmdzLCAnUFJPRFVDVElPTicpKSkKICAgICAgICBzZW5kX3RvX2ZpcmVob3NlKGZpcmVob3NlX2RhdGFfZW50cmllcywgYmF0Y2hfbnVtPTQ5MCkKCiAgICBkZWYgYnVpbGQoY2xzLCBtb2RlbCwgKiprd2FyZ3MpOgogICAgICAgIGNscy5fdmFsaWRhdGVfa3dhcmdzKG1vZGVsLCAnYnVpbGQnLCBrd2FyZ3MpCiAgICAgICAgcmV0dXJuIGNscy5nZXRfbW9kZWwobW9kZWwpKCoqa3dhcmdzKQoKICAgIGRlZiBnZXQoY2xzLCBtb2RlbCwgKiprd2FyZ3MpOgogICAgICAgIGNscy5fdmFsaWRhdGVfa3dhcmdzKG1vZGVsLCAnZ2V0Jywga3dhcmdzKQogICAgICAgIHRyeToKPHxmaW1faG9sZXw+CiAgICAgICAgZXhjZXB0IGNscy5nZXRfbW9kZWwobW9kZWwpLkRvZXNOb3RFeGlzdDoKICAgICAgICAgICAgcmFpc2UgT2JqZWN0RG9lc05vdEV4aXN0KG1vZGVsKQoKICAgIGRlZiBmaWx0ZXJfcXMoY2xzLCBtb2RlbCwgKiprd2FyZ3MpOgogICAgICAgIGNscy5fdmFsaWRhdGVfa3dhcmdzKG1vZGVsLCAnZmlsdGVyJywga3dhcmdzKQogICAgICAgIHJldHVybiBjbHMuZ2V0X21vZGVsKG1vZGVsKS5vYmplY3RzLmZpbHRlcigqKmt3YXJncykKCiAgICBkZWYgZmlsdGVyX3FzX3VzaW5nX3EoY2xzLCBtb2RlbCwgcSwgZXh0cmFzPVtdKToKICAgICAgICBhc3NlcnQgdHlwZShxKSBpcyBRLCAnSW52YWxpZCBhcmd1bWVudDogbXVzdCBiZSBhIFEgb2JqZWN0JwogICAgICAgIGNscy5fdmFsaWRhdGVfcShtb2RlbCwgJ2ZpbHRlcicsIHEsIGV4dHJhcykKICAgICAgICByZXR1cm4gY2xzLmdldF9tb2RlbChtb2RlbCkub2JqZWN0cy5maWx0ZXIocSkKCiAgICBkZWYgZGZfZmlsdGVyX3FzX3VzaW5nX3EoY2xzLCBtb2RlbCwgcSwgZXh0cmFzPVtdKToKICAgICAgICBhc3NlcnQgdHlwZShxKSBpcyBRLCAnSW52YWxpZCBhcmd1bWVudDogbXVzdCBiZSBhIFEgb2JqZWN0JwogICAgICAgIGNscy5fdmFsaWRhdGVfcShtb2RlbCwgJ2ZpbHRlcicsIHEsIGV4dHJhcykKICAgICAgICByZXR1cm4gY2xzLmdldF9tb2RlbChtb2RlbCkuZGZfb2JqZWN0cy5maWx0ZXIocSkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgcmV0dXJuIGNscy5nZXRfbW9kZWwobW9kZWwpLm9iamVjdHMuZ2V0KCoqa3dhcmdzKQo8fGZpbV9lbmR8Pg=="]
["97083e4a789816682a5b677cbe993e0fa65704e3-4","97083e4a789816682a5b677cbe993e0fa65704e3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmNvcmUuZXhjZXB0aW9ucyBpbXBvcnQgT2JqZWN0RG9lc05vdEV4aXN0CmZyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgUQoKZnJvbSBhcHBzLnN0cmVhbWRhdGEubW9kZWxzIGltcG9ydCBTdHJlYW1EYXRhCmZyb20gYXBwcy5zdHJlYW1ldmVudC5tb2RlbHMgaW1wb3J0IFN0cmVhbUV2ZW50RGF0YQpmcm9tIGFwcHMudXRpbHMuYXdzLmtpbmVzaXMgaW1wb3J0IHNlbmRfdG9fZmlyZWhvc2UKCmZyb20gLmJhc2UgaW1wb3J0IERqYW5nb0Jhc2VEYXRhTWFuYWdlcgoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKY2xhc3MgRGphbmdvU3RyZWFtRGF0YU1hbmFnZXIoRGphbmdvQmFzZURhdGFNYW5hZ2VyKToKICAgICIiIgogICAgRGF0YSBtYW5hZ2VyIGZvciB0aGUgb2xkIG1vZGVsczogU3RyZWFtRGF0YSBhbmQgU3RyZWFtRXZlbnREYXRhCiAgICAiIiIKCiAgICBkZWYgX2dldF9maXJlaG9zZV9wYXlsb2FkKGNscywgc3RyZWFtX2RhdGEpOgogICAgICAgICIiIlNhbWUgYXMgU3RyZWFtRGF0YUJ1aWxkZXJIZWxwZXIuZ2V0X2ZpcmVob3NlX3BheWxvYWQiIiIKICAgICAgICBwYXlsb2FkID0gewogICAgICAgICAgICAnc3RyZWFtX3NsdWcnOiBzdHJlYW1fZGF0YS5zdHJlYW1fc2x1ZywKICAgICAgICAgICAgJ3Byb2plY3Rfc2x1Zyc6IHN0cmVhbV9kYXRhLnByb2plY3Rfc2x1ZywKICAgICAgICAgICAgJ2RldmljZV9zbHVnJzogc3RyZWFtX2RhdGEuZGV2aWNlX3NsdWcsCiAgICAgICAgICAgICd2YXJpYWJsZV9zbHVnJzogc3RyZWFtX2RhdGEudmFyaWFibGVfc2x1ZywKICAgICAgICAgICAgJ3R5cGUnOiBzdHJlYW1fZGF0YS50eXBlLAogICAgICAgICAgICAnZGlydHlfdHMnOiBzdHJlYW1fZGF0YS5kaXJ0eV90cywKICAgICAgICAgICAgJ3N0YXR1cyc6IHN0cmVhbV9kYXRhLnN0YXR1cywKICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHN0cmVhbV9kYXRhLnRpbWVzdGFtcC5zdHJmdGltZSgnJVktJW0tJWQgJUg6JU06JVMuJWYnKQogICAgICAgIH0KICAgICAgICBpZiBzdHJlYW1fZGF0YS5kZXZpY2VfdGltZXN0YW1wIGlzIG5vdCBOb25lOgogICAgICAgICAgICBwYXlsb2FkWydkZXZpY2VfdGltZXN0YW1wJ10gPSBzdHJlYW1fZGF0YS5kZXZpY2VfdGltZXN0YW1wCiAgICAgICAgaWYgc3RyZWFtX2RhdGEuaW50X3ZhbHVlIGlzIG5vdCBOb25lOgogICAgICAgICAgICBwYXlsb2FkWydpbnRfdmFsdWUnXSA9IHN0cmVhbV9kYXRhLmludF92YWx1ZQogICAgICAgIGlmIHN0cmVhbV9kYXRhLnZhbHVlIGlzIG5vdCBOb25lOgogICAgICAgICAgICBwYXlsb2FkWyd2YWx1ZSddID0gc3RyZWFtX2RhdGEudmFsdWUKICAgICAgICBpZiBzdHJlYW1fZGF0YS5zdHJlYW1lcl9sb2NhbF9pZCBpcyBub3QgTm9uZToKICAgICAgICAgICAgcGF5bG9hZFsnc3RyZWFtZXJfbG9jYWxfaWQnXSA9IHN0cmVhbV9kYXRhLnN0cmVhbWVyX2xvY2FsX2lkCiAgICAgICAgcmV0dXJuIHBheWxvYWQKCiAgICBkZWYgZ2V0X21vZGVsKGNscywgbmFtZSk6CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgJ2RhdGEnOiBTdHJlYW1EYXRhLAogICAgICAgICAgICAnZXZlbnQnOiBTdHJlYW1FdmVudERhdGEsCiAgICAgICAgfVtuYW1lXQoKICAgIGRlZiBzZW5kX3RvX2ZpcmVob3NlKGNscywgbW9kZWwsIHBheWxvYWQpOgogICAgICAgICIiIlNlbmRzIHRoZSBwYXlsb2FkIHRvIEZpcmVob3NlCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIG1vZGVsIChzdHIpOiB0eXBlIG9mIG1vZGVsIHNlbnQgdG8gRmlyZWhvc2UgKE9OTFkgJ2RhdGEnIGlzIHZhbGlkIGZvciB0aGlzIG1hbmFnZXIpLgogICAgICAgICAgICBwYXlsb2FkIChsaXN0KTogbGlzdCBvZiBtb2RlbCBpbnN0YW5jZXMuCiAgICAgICAgICAgICAgICBUaGlzIGxpc3QvY29sbGVjdGlvbiBzaG91bGQgYmUgYSBjb2xsZWN0aW9uIG9mIFN0cmVhbURhdGEKICAgICAgICAgICAgICAgIGluc3RhbmNlcyB0aGF0IGhhdmUgdG8gYmUgc2VudCB0byBGaXJlaG9zZS4gVGhleSdsbCBiZQogICAgICAgICAgICAgICAgc2VyaWFsaXplZCB0byBhIEpTT04gcGF5bG9hZCBieSB0aGlzIG1ldGhvZC4KICAgICAgICAiIiIKICAgICAgICBhc3NlcnQgbW9kZWwgPT0gJ2RhdGEnCiAgICAgICAgZmlyZWhvc2VfZGF0YV9lbnRyaWVzID0gW10KICAgICAgICBmb3IgZGF0YSBpbiBwYXlsb2FkOgogICAgICAgICAgICBmaXJlaG9zZV9wYXlsb2FkID0gY2xzLl9nZXRfZmlyZWhvc2VfcGF5bG9hZChkYXRhKQogICAgICAgICAgICBhc3NlcnQgKGZpcmVob3NlX3BheWxvYWRbJ2ludF92YWx1ZSddIGlzIG5vdCBOb25lKQo8fGZpbV9ob2xlfD4KICAgICAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIGZpcmVob3NlIChQcm9kdWN0aW9uID0gezB9KScuZm9ybWF0KGdldGF0dHIoc2V0dGluZ3MsICdQUk9EVUNUSU9OJykpKQogICAgICAgIHNlbmRfdG9fZmlyZWhvc2UoZmlyZWhvc2VfZGF0YV9lbnRyaWVzLCBiYXRjaF9udW09NDkwKQoKICAgIGRlZiBidWlsZChjbHMsIG1vZGVsLCAqKmt3YXJncyk6CiAgICAgICAgY2xzLl92YWxpZGF0ZV9rd2FyZ3MobW9kZWwsICdidWlsZCcsIGt3YXJncykKICAgICAgICByZXR1cm4gY2xzLmdldF9tb2RlbChtb2RlbCkoKiprd2FyZ3MpCgogICAgZGVmIGdldChjbHMsIG1vZGVsLCAqKmt3YXJncyk6CiAgICAgICAgY2xzLl92YWxpZGF0ZV9rd2FyZ3MobW9kZWwsICdnZXQnLCBrd2FyZ3MpCiAgICAgICAgdHJ5OgogICAgICAgICAgICByZXR1cm4gY2xzLmdldF9tb2RlbChtb2RlbCkub2JqZWN0cy5nZXQoKiprd2FyZ3MpCiAgICAgICAgZXhjZXB0IGNscy5nZXRfbW9kZWwobW9kZWwpLkRvZXNOb3RFeGlzdDoKICAgICAgICAgICAgcmFpc2UgT2JqZWN0RG9lc05vdEV4aXN0KG1vZGVsKQoKICAgIGRlZiBmaWx0ZXJfcXMoY2xzLCBtb2RlbCwgKiprd2FyZ3MpOgogICAgICAgIGNscy5fdmFsaWRhdGVfa3dhcmdzKG1vZGVsLCAnZmlsdGVyJywga3dhcmdzKQogICAgICAgIHJldHVybiBjbHMuZ2V0X21vZGVsKG1vZGVsKS5vYmplY3RzLmZpbHRlcigqKmt3YXJncykKCiAgICBkZWYgZmlsdGVyX3FzX3VzaW5nX3EoY2xzLCBtb2RlbCwgcSwgZXh0cmFzPVtdKToKICAgICAgICBhc3NlcnQgdHlwZShxKSBpcyBRLCAnSW52YWxpZCBhcmd1bWVudDogbXVzdCBiZSBhIFEgb2JqZWN0JwogICAgICAgIGNscy5fdmFsaWRhdGVfcShtb2RlbCwgJ2ZpbHRlcicsIHEsIGV4dHJhcykKICAgICAgICByZXR1cm4gY2xzLmdldF9tb2RlbChtb2RlbCkub2JqZWN0cy5maWx0ZXIocSkKCiAgICBkZWYgZGZfZmlsdGVyX3FzX3VzaW5nX3EoY2xzLCBtb2RlbCwgcSwgZXh0cmFzPVtdKToKICAgICAgICBhc3NlcnQgdHlwZShxKSBpcyBRLCAnSW52YWxpZCBhcmd1bWVudDogbXVzdCBiZSBhIFEgb2JqZWN0JwogICAgICAgIGNscy5fdmFsaWRhdGVfcShtb2RlbCwgJ2ZpbHRlcicsIHEsIGV4dHJhcykKICAgICAgICByZXR1cm4gY2xzLmdldF9tb2RlbChtb2RlbCkuZGZfb2JqZWN0cy5maWx0ZXIocSkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgYXNzZXJ0IChmaXJlaG9zZV9wYXlsb2FkWydpbnRfdmFsdWUnXSA9PSBkYXRhLmludF92YWx1ZSkKICAgICAgICAgICAgZmlyZWhvc2VfZGF0YV9lbnRyaWVzLmFwcGVuZChmaXJlaG9zZV9wYXlsb2FkKQo8fGZpbV9lbmR8Pg=="]
["97083e4a789816682a5b677cbe993e0fa65704e3-5","97083e4a789816682a5b677cbe993e0fa65704e3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmNvcmUuZXhjZXB0aW9ucyBpbXBvcnQgT2JqZWN0RG9lc05vdEV4aXN0CmZyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgUQoKZnJvbSBhcHBzLnN0cmVhbWRhdGEubW9kZWxzIGltcG9ydCBTdHJlYW1EYXRhCmZyb20gYXBwcy5zdHJlYW1ldmVudC5tb2RlbHMgaW1wb3J0IFN0cmVhbUV2ZW50RGF0YQpmcm9tIGFwcHMudXRpbHMuYXdzLmtpbmVzaXMgaW1wb3J0IHNlbmRfdG9fZmlyZWhvc2UKCmZyb20gLmJhc2UgaW1wb3J0IERqYW5nb0Jhc2VEYXRhTWFuYWdlcgoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKY2xhc3MgRGphbmdvU3RyZWFtRGF0YU1hbmFnZXIoRGphbmdvQmFzZURhdGFNYW5hZ2VyKToKICAgICIiIgogICAgRGF0YSBtYW5hZ2VyIGZvciB0aGUgb2xkIG1vZGVsczogU3RyZWFtRGF0YSBhbmQgU3RyZWFtRXZlbnREYXRhCiAgICAiIiIKCiAgICBkZWYgX2dldF9maXJlaG9zZV9wYXlsb2FkKGNscywgc3RyZWFtX2RhdGEpOgogICAgICAgICIiIlNhbWUgYXMgU3RyZWFtRGF0YUJ1aWxkZXJIZWxwZXIuZ2V0X2ZpcmVob3NlX3BheWxvYWQiIiIKICAgICAgICBwYXlsb2FkID0gewogICAgICAgICAgICAnc3RyZWFtX3NsdWcnOiBzdHJlYW1fZGF0YS5zdHJlYW1fc2x1ZywKICAgICAgICAgICAgJ3Byb2plY3Rfc2x1Zyc6IHN0cmVhbV9kYXRhLnByb2plY3Rfc2x1ZywKICAgICAgICAgICAgJ2RldmljZV9zbHVnJzogc3RyZWFtX2RhdGEuZGV2aWNlX3NsdWcsCiAgICAgICAgICAgICd2YXJpYWJsZV9zbHVnJzogc3RyZWFtX2RhdGEudmFyaWFibGVfc2x1ZywKPHxmaW1faG9sZXw+CiAgICAgICAgfQogICAgICAgIGlmIHN0cmVhbV9kYXRhLmRldmljZV90aW1lc3RhbXAgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHBheWxvYWRbJ2RldmljZV90aW1lc3RhbXAnXSA9IHN0cmVhbV9kYXRhLmRldmljZV90aW1lc3RhbXAKICAgICAgICBpZiBzdHJlYW1fZGF0YS5pbnRfdmFsdWUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHBheWxvYWRbJ2ludF92YWx1ZSddID0gc3RyZWFtX2RhdGEuaW50X3ZhbHVlCiAgICAgICAgaWYgc3RyZWFtX2RhdGEudmFsdWUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHBheWxvYWRbJ3ZhbHVlJ10gPSBzdHJlYW1fZGF0YS52YWx1ZQogICAgICAgIGlmIHN0cmVhbV9kYXRhLnN0cmVhbWVyX2xvY2FsX2lkIGlzIG5vdCBOb25lOgogICAgICAgICAgICBwYXlsb2FkWydzdHJlYW1lcl9sb2NhbF9pZCddID0gc3RyZWFtX2RhdGEuc3RyZWFtZXJfbG9jYWxfaWQKICAgICAgICByZXR1cm4gcGF5bG9hZAoKICAgIGRlZiBnZXRfbW9kZWwoY2xzLCBuYW1lKToKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAnZGF0YSc6IFN0cmVhbURhdGEsCiAgICAgICAgICAgICdldmVudCc6IFN0cmVhbUV2ZW50RGF0YSwKICAgICAgICB9W25hbWVdCgogICAgZGVmIHNlbmRfdG9fZmlyZWhvc2UoY2xzLCBtb2RlbCwgcGF5bG9hZCk6CiAgICAgICAgIiIiU2VuZHMgdGhlIHBheWxvYWQgdG8gRmlyZWhvc2UKCiAgICAgICAgQXJnczoKICAgICAgICAgICAgbW9kZWwgKHN0cik6IHR5cGUgb2YgbW9kZWwgc2VudCB0byBGaXJlaG9zZSAoT05MWSAnZGF0YScgaXMgdmFsaWQgZm9yIHRoaXMgbWFuYWdlcikuCiAgICAgICAgICAgIHBheWxvYWQgKGxpc3QpOiBsaXN0IG9mIG1vZGVsIGluc3RhbmNlcy4KICAgICAgICAgICAgICAgIFRoaXMgbGlzdC9jb2xsZWN0aW9uIHNob3VsZCBiZSBhIGNvbGxlY3Rpb24gb2YgU3RyZWFtRGF0YQogICAgICAgICAgICAgICAgaW5zdGFuY2VzIHRoYXQgaGF2ZSB0byBiZSBzZW50IHRvIEZpcmVob3NlLiBUaGV5J2xsIGJlCiAgICAgICAgICAgICAgICBzZXJpYWxpemVkIHRvIGEgSlNPTiBwYXlsb2FkIGJ5IHRoaXMgbWV0aG9kLgogICAgICAgICIiIgogICAgICAgIGFzc2VydCBtb2RlbCA9PSAnZGF0YScKICAgICAgICBmaXJlaG9zZV9kYXRhX2VudHJpZXMgPSBbXQogICAgICAgIGZvciBkYXRhIGluIHBheWxvYWQ6CiAgICAgICAgICAgIGZpcmVob3NlX3BheWxvYWQgPSBjbHMuX2dldF9maXJlaG9zZV9wYXlsb2FkKGRhdGEpCiAgICAgICAgICAgIGFzc2VydCAoZmlyZWhvc2VfcGF5bG9hZFsnaW50X3ZhbHVlJ10gaXMgbm90IE5vbmUpCiAgICAgICAgICAgIGFzc2VydCAoZmlyZWhvc2VfcGF5bG9hZFsnaW50X3ZhbHVlJ10gPT0gZGF0YS5pbnRfdmFsdWUpCiAgICAgICAgICAgIGZpcmVob3NlX2RhdGFfZW50cmllcy5hcHBlbmQoZmlyZWhvc2VfcGF5bG9hZCkKICAgICAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIGZpcmVob3NlIChQcm9kdWN0aW9uID0gezB9KScuZm9ybWF0KGdldGF0dHIoc2V0dGluZ3MsICdQUk9EVUNUSU9OJykpKQogICAgICAgIHNlbmRfdG9fZmlyZWhvc2UoZmlyZWhvc2VfZGF0YV9lbnRyaWVzLCBiYXRjaF9udW09NDkwKQoKICAgIGRlZiBidWlsZChjbHMsIG1vZGVsLCAqKmt3YXJncyk6CiAgICAgICAgY2xzLl92YWxpZGF0ZV9rd2FyZ3MobW9kZWwsICdidWlsZCcsIGt3YXJncykKICAgICAgICByZXR1cm4gY2xzLmdldF9tb2RlbChtb2RlbCkoKiprd2FyZ3MpCgogICAgZGVmIGdldChjbHMsIG1vZGVsLCAqKmt3YXJncyk6CiAgICAgICAgY2xzLl92YWxpZGF0ZV9rd2FyZ3MobW9kZWwsICdnZXQnLCBrd2FyZ3MpCiAgICAgICAgdHJ5OgogICAgICAgICAgICByZXR1cm4gY2xzLmdldF9tb2RlbChtb2RlbCkub2JqZWN0cy5nZXQoKiprd2FyZ3MpCiAgICAgICAgZXhjZXB0IGNscy5nZXRfbW9kZWwobW9kZWwpLkRvZXNOb3RFeGlzdDoKICAgICAgICAgICAgcmFpc2UgT2JqZWN0RG9lc05vdEV4aXN0KG1vZGVsKQoKICAgIGRlZiBmaWx0ZXJfcXMoY2xzLCBtb2RlbCwgKiprd2FyZ3MpOgogICAgICAgIGNscy5fdmFsaWRhdGVfa3dhcmdzKG1vZGVsLCAnZmlsdGVyJywga3dhcmdzKQogICAgICAgIHJldHVybiBjbHMuZ2V0X21vZGVsKG1vZGVsKS5vYmplY3RzLmZpbHRlcigqKmt3YXJncykKCiAgICBkZWYgZmlsdGVyX3FzX3VzaW5nX3EoY2xzLCBtb2RlbCwgcSwgZXh0cmFzPVtdKToKICAgICAgICBhc3NlcnQgdHlwZShxKSBpcyBRLCAnSW52YWxpZCBhcmd1bWVudDogbXVzdCBiZSBhIFEgb2JqZWN0JwogICAgICAgIGNscy5fdmFsaWRhdGVfcShtb2RlbCwgJ2ZpbHRlcicsIHEsIGV4dHJhcykKICAgICAgICByZXR1cm4gY2xzLmdldF9tb2RlbChtb2RlbCkub2JqZWN0cy5maWx0ZXIocSkKCiAgICBkZWYgZGZfZmlsdGVyX3FzX3VzaW5nX3EoY2xzLCBtb2RlbCwgcSwgZXh0cmFzPVtdKToKICAgICAgICBhc3NlcnQgdHlwZShxKSBpcyBRLCAnSW52YWxpZCBhcmd1bWVudDogbXVzdCBiZSBhIFEgb2JqZWN0JwogICAgICAgIGNscy5fdmFsaWRhdGVfcShtb2RlbCwgJ2ZpbHRlcicsIHEsIGV4dHJhcykKICAgICAgICByZXR1cm4gY2xzLmdldF9tb2RlbChtb2RlbCkuZGZfb2JqZWN0cy5maWx0ZXIocSkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgJ3R5cGUnOiBzdHJlYW1fZGF0YS50eXBlLAogICAgICAgICAgICAnZGlydHlfdHMnOiBzdHJlYW1fZGF0YS5kaXJ0eV90cywKICAgICAgICAgICAgJ3N0YXR1cyc6IHN0cmVhbV9kYXRhLnN0YXR1cywKICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHN0cmVhbV9kYXRhLnRpbWVzdGFtcC5zdHJmdGltZSgnJVktJW0tJWQgJUg6JU06JVMuJWYnKQo8fGZpbV9lbmR8Pg=="]
["b66c9702239df05139adfa8dda18341bb2d20fba-1","b66c9702239df05139adfa8dda18341bb2d20fba","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFzayBpbXBvcnQgRmxhc2ssIHJlbmRlcl90ZW1wbGF0ZSwgcmVkaXJlY3QsIHJlcXVlc3QKZnJvbSBmbGFza19zcWxhbGNoZW15IGltcG9ydCBTUUxBbGNoZW15CmltcG9ydCBvcwoKYXBwID0gRmxhc2soX19uYW1lX18pCmJhc2VkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKYXBwLmNvbmZpZ1snU1FMQUxDSEVNWV9EQVRBQkFTRV9VUkknXSA9ICdzcWxpdGU6Ly8vJyArIG9zLnBhdGguam9pbihiYXNlZGlyLCAnYXBwLnNxbGl0ZScpCmRiID0gU1FMQWxjaGVteShhcHApCgpjbGFzcyBOb3RlKGRiLk1vZGVsKToKICAgIGlkID0gZGIuQ29sdW1uKGRiLkludGVnZXIsIHByaW1hcnlfa2V5PVRydWUpCiAgICB0aXRsZSA9IGRiLkNvbHVtbihkYi5TdHJpbmcoODApKQogICAgYm9keSA9IGRiLkNvbHVtbihkYi5UZXh0KQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXRsZSwgYm9keSk6CiAgICAgICAgc2VsZi50aXRsZSA9IHRpdGxlCiAgICAgICAgc2VsZi5ib2R5ID0gYm9keQo8fGZpbV9ob2xlfD4KCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBhcHAucnVuKGRlYnVnPVRydWUpCjx8ZmltX3N1ZmZpeHw+CgpAYXBwLnJvdXRlKCIvIikKZGVmIGhvbWUoKToKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoImhvbWUuaHRtbCIpCjx8ZmltX2VuZHw+"]
["b66c9702239df05139adfa8dda18341bb2d20fba-2","b66c9702239df05139adfa8dda18341bb2d20fba","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFzayBpbXBvcnQgRmxhc2ssIHJlbmRlcl90ZW1wbGF0ZSwgcmVkaXJlY3QsIHJlcXVlc3QKZnJvbSBmbGFza19zcWxhbGNoZW15IGltcG9ydCBTUUxBbGNoZW15CmltcG9ydCBvcwoKYXBwID0gRmxhc2soX19uYW1lX18pCmJhc2VkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKYXBwLmNvbmZpZ1snU1FMQUxDSEVNWV9EQVRBQkFTRV9VUkknXSA9ICdzcWxpdGU6Ly8vJyArIG9zLnBhdGguam9pbihiYXNlZGlyLCAnYXBwLnNxbGl0ZScpCmRiID0gU1FMQWxjaGVteShhcHApCgpjbGFzcyBOb3RlKGRiLk1vZGVsKToKICAgIGlkID0gZGIuQ29sdW1uKGRiLkludGVnZXIsIHByaW1hcnlfa2V5PVRydWUpCiAgICB0aXRsZSA9IGRiLkNvbHVtbihkYi5TdHJpbmcoODApKQogICAgYm9keSA9IGRiLkNvbHVtbihkYi5UZXh0KQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXRsZSwgYm9keSk6CiAgICAgICAgc2VsZi50aXRsZSA9IHRpdGxlCjx8ZmltX2hvbGV8PgpAYXBwLnJvdXRlKCIvIikKZGVmIGhvbWUoKToKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoImhvbWUuaHRtbCIpCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgYXBwLnJ1bihkZWJ1Zz1UcnVlKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuYm9keSA9IGJvZHkKCjx8ZmltX2VuZHw+"]
["b66c9702239df05139adfa8dda18341bb2d20fba-3","b66c9702239df05139adfa8dda18341bb2d20fba","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFzayBpbXBvcnQgRmxhc2ssIHJlbmRlcl90ZW1wbGF0ZSwgcmVkaXJlY3QsIHJlcXVlc3QKZnJvbSBmbGFza19zcWxhbGNoZW15IGltcG9ydCBTUUxBbGNoZW15CmltcG9ydCBvcwoKYXBwID0gRmxhc2soX19uYW1lX18pCmJhc2VkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKYXBwLmNvbmZpZ1snU1FMQUxDSEVNWV9EQVRBQkFTRV9VUkknXSA9ICdzcWxpdGU6Ly8vJyArIG9zLnBhdGguam9pbihiYXNlZGlyLCAnYXBwLnNxbGl0ZScpCmRiID0gU1FMQWxjaGVteShhcHApCgpjbGFzcyBOb3RlKGRiLk1vZGVsKToKICAgIGlkID0gZGIuQ29sdW1uKGRiLkludGVnZXIsIHByaW1hcnlfa2V5PVRydWUpCiAgICB0aXRsZSA9IGRiLkNvbHVtbihkYi5TdHJpbmcoODApKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBib2R5ID0gZGIuQ29sdW1uKGRiLlRleHQpCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpdGxlLCBib2R5KToKICAgICAgICBzZWxmLnRpdGxlID0gdGl0bGUKPHxmaW1fZW5kfD4="]
["b66c9702239df05139adfa8dda18341bb2d20fba-4","b66c9702239df05139adfa8dda18341bb2d20fba","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFzayBpbXBvcnQgRmxhc2ssIHJlbmRlcl90ZW1wbGF0ZSwgcmVkaXJlY3QsIHJlcXVlc3QKZnJvbSBmbGFza19zcWxhbGNoZW15IGltcG9ydCBTUUxBbGNoZW15CmltcG9ydCBvcwoKYXBwID0gRmxhc2soX19uYW1lX18pCmJhc2VkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKYXBwLmNvbmZpZ1snU1FMQUxDSEVNWV9EQVRBQkFTRV9VUkknXSA9ICdzcWxpdGU6Ly8vJyArIG9zLnBhdGguam9pbihiYXNlZGlyLCAnYXBwLnNxbGl0ZScpCmRiID0gU1FMQWxjaGVteShhcHApCgpjbGFzcyBOb3RlKGRiLk1vZGVsKToKPHxmaW1faG9sZXw+CiAgICBkZWYgX19pbml0X18oc2VsZiwgdGl0bGUsIGJvZHkpOgogICAgICAgIHNlbGYudGl0bGUgPSB0aXRsZQogICAgICAgIHNlbGYuYm9keSA9IGJvZHkKCkBhcHAucm91dGUoIi8iKQpkZWYgaG9tZSgpOgogICAgcmV0dXJuIHJlbmRlcl90ZW1wbGF0ZSgiaG9tZS5odG1sIikKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBhcHAucnVuKGRlYnVnPVRydWUpCjx8ZmltX3N1ZmZpeHw+CiAgICBpZCA9IGRiLkNvbHVtbihkYi5JbnRlZ2VyLCBwcmltYXJ5X2tleT1UcnVlKQogICAgdGl0bGUgPSBkYi5Db2x1bW4oZGIuU3RyaW5nKDgwKSkKICAgIGJvZHkgPSBkYi5Db2x1bW4oZGIuVGV4dCkKCjx8ZmltX2VuZHw+"]
["e760f45ed80a053526f7a359bc15025fd45a0a9a-1","e760f45ed80a053526f7a359bc15025fd45a0a9a",{"$cut":{"chars":30928,"head":"PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtODsgLSotCiIiIkZpbmQgYW5kIGV4cGFuZCBtYWNyb3MuCgpUaGlzIGxheWVyIHByb3ZpZGVzIHRoZSBhY3R1YWwgbWFjcm8gZXhwYW5kZXIsIGRlZmluaW5nOgoKIC0gU3ludGF4IGZvciBlc3RhYmxpc2hpbmcgbWFjcm8gYmluZGluZ3M6OgogICAgICAgZnJvbSAuLi4gaW1wb3J0IG1hY3JvcywgLi4uCgogLSBNYWNybyBpbnZvY2F0aW9uIHR5cGVzOgogICAtIGV4cHI6ICAgICAgYG1hY3JvbmFtZVsuLi5dYCwgYG1hY3JvbmFtZVthcmcwLCAuLi5dWy4uLl1gCiAgIC0gYmxvY2s6ICAgICBgd2l0aCBtYWNyb25hbWU6YCwgYHdpdGggbWFjcm9uYW1lIGFzIHJlc3VsdDpgLAogICAgICAgICAgICAgICAgYHdpdGggbWFjcm9uYW1lW2FyZzAsIC4uLl06YCwgYHdpdGggbWFjcm9uYW1lW2FyZzAsIC4uLl0gYXMgcmVzdWx0OmAKICAgLSBkZWNvcmF0b3I6IGBAbWFjcm9uYW1lYCwgYEBtYWNyb25hbWVbYXJnMCwgLi4uXWAKICAgLSBuYW1lOiAgICAgIGBtYWNyb25hbWVgCiIiIgoKIyBXZSB1c2UgYnJhY2tldCBzeW50YXggZm9yIHNlbmRpbmcgbWFjcm8gYXJndW1lbnRzLCBiZWNhdXNlIHBhcmVudGhlc2VzIGV2b2tlCiMgdGhlIGlkZWEgb2YgZnVsbCBmdW5jdGlvbi1jYWxsIHN5bnRheC4gVGhpcyBpbmNsdWRlcyBrZXl3b3JkIGFyZ3VtZW50cywgYW5kCiMgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gcGFyYW1ldGVyIHNsb3RzICh3aGljaCBhcmUgYWx3YXlzIG5hbWVkKSBhbmQgaG93IHRoZQojIGFjdHVhbCBhcmd1bWVudHMgcHJvdmlkZWQgaW4gYSBjYWxsIGFyZSBib3VuZCB0byB0aG9zZSBzbG90cyAod2hldGhlciBieQojIHBvc2l0aW9uIG9yIGJ5IG5hbWU7IGFuZCBkb24ndCBmb3JnZXQgKmFyZ3MgYW5kICoqa3dhcmdzLCBib3RoIGF0IHRoZQojIHJlY2VpdmluZyBhbmQgc2VuZGluZyBlbmQpLgojCiMgTm93YWRheXMgaXQncyBwb3NzaWJsZSB0byBlYXNpbHkgc3VwcG9ydCBhbGwgdGhpcyBwcm9wZXJseSB2aWEgYGluc3BlY3Quc2lnbmF0dXJlYAojIGFuZCBgaW5zcGVjdC5TaWduYXR1cmUuYmluZGAuIEJ1dCB0byBnZXQgYSBjYWxsIHNpZ25hdHVyZSB0byBiaW5kIHRvLCB0aGUKIyBtYWNybyBmdW5jdGlvbidzIG93biBzaWduYXR1cmUgd29uJ3QgZG8gLSB0aGF0J3MgZm9yIHdoZW4gdGhlIGZ1bmN0aW9uIGlzCiMgY2FsbGVkIGJ5IHRoZSBtYWNybyBleHBhbmRlciwgbm90IGZvciBzZW5kaW5nIG1hY3JvIGFyZ3VtZW50cyAod2hpY2ggZm9ybQojIGEgc2VwYXJhdGUgbmFtZXNwYWNlKS4KIwojIFNvIHdlIHdvdWxkIG5lZWQgYSByZWZlcmVuY2UgY2FsbGFibGUgdG8gYEBwYXJhbWV0cmljbWFjcm9gLCBub3QgdG8gYmUKIyBjYWxsZWQsIGJ1dCBvbmx5IHRvIGhhdmUgaXRzIGNhbGwgc2lnbmF0dXJlIGV4dHJhY3RlZC4gSW4gcHJhY3RpY2UsIGl0IHdvdWxkCiMgYmUgYSBgbGFtYmRhIC4uLjogTm9uZWAsIHdpdGggdGhlIGNvbmZ1c2luZyBgbGFtYmRhYCBhbmQgYE5vbmVgIG1hbmRhdG9yeSwKIyB3aGVuIHRoZSBvbmx5IGludGVyZXN0aW5nIHBhcnQgaXMgaW4gdGhlIGAuLi5gLCB0aGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9ucy4KIwojIFRoaXMgY291bGQgdGhlbiBiZSB1c2VkIHRvIGVzdGFibGlzaCBhICpzZWNvbmQqIGNhbGwgc2lnbmF0dXJlIGZvciB0aGUKIyBwYXJhbWV0cmljIG1hY3JvIGZ1bmN0aW9uLCB0byByZWNlaXZlIHRoZSBtYWNybyBhcmd1bWVudHMgaW4sIHNheSwgYQojIGRpY3Rpb25hcnkgYWx3YXlzIG5hbWVkIGBhcmdzYCAoYmluZGluZyBwYXJhbWV0ZXIgbmFtZXMgdG8gdmFsdWVzIHByb3ZpZGVkCiMgaW4gdGhlIG1hY3JvIGNhbGw7IGNmLiBvdXIgY3VycmVudCBsaXN0IGBhcmdzYCwgd2hpY2gganVzdCBsaXN0cyB0aGUgdmFsdWVzKS4KIyBDb25mdXNlZCB5ZXQ/IFNlZSBjb21taXQgMTA2OTFjZSBmb3IgYSBza2V0Y2guCiMKIyBUaGUgc3lzdGVtIGlzIG11Y2ggc2ltcGxlciB0byBleHBsYWluIGlmIHdlIGp1c3QgdXNlIGJyYWNrZXRzLCBhbmQgaGF2ZQojIHBvc2l0aW9uYWwgYXJncyBvbmx5LgojCiMgRXZlbiB0aGlzIGNob2ljZSBvZiBzeW50YXggdW5mb3J0dW5hdGVseSBsZWFkcyB0byBhbiBhbWJpZ3VpdHkgYXMgdG8gd2hhdAojIGBtYWNyb1suLi5dWy4uLl1gIGFuZCBldmVuIGp1c3QgYG1hY3JvWy4uLl1gIG1lYW4sIGJ1dCBwZXJoYXBzIGl0J3MgdGhlCiMgbGVzc2VyIGV2aWwuIFRoaXMgaXMgb25lIHJlYXNvbiB3aHkgd2UgcmVxdWlyZSBwYXJhbWV0cmljIG1hY3JvcyB0byBiZQojIGV4cGxpY2l0bHkgZGVjbGFyZWQgLSBhdm9pZCB0aGF0IGFtYmlndWl0eSB3aGVuIG5vdCBuZWVkZWQuCgpfX2FsbF9fID0gWyJuYW1lbWFjcm8iLCAiaXNuYW1lbWFjcm8iLAogICAgICAgICAgICJwYXJhbWV0cmljbWFjcm8iLCAiaXNwYXJhbWV0cmljbWFjcm8iLAogICAgICAgICAgICJNYWNyb0V4cGFuZGVyIiwgIk1hY3JvQ29sbGVjdG9yIiwKICAgICAgICAgICAiZXhwYW5kX21hY3JvcyIsICJmaW5kX21hY3JvcyJdCgppbXBvcnQgc3lzCmZyb20gYXN0IGltcG9ydCAoQVNULCBBc3NpZ24sIENhbGwsIFN0YXJyZWQsIENvbnN0YW50LCBJbXBvcnQsIExhbWJkYSwgTmFtZSwKICAgICAgICAgICAgICAgICBOb2RlVmlzaXRvciwgU3RvcmUsIFN1YnNjcmlwdCwgVHVwbGUsIGFsaWFzLCBhcmd1bWVudHMsCiAgICAgICAgICAgICAgICAgY29weV9sb2NhdGlvbiwgaXRlcl9maWVsZHMpCmZyb20gY29weSBpbXBvcnQgY29weQpmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuX2V4cGxpY2l0Cgpmcm9tIC5jb3JlIGltcG9ydCBCYXNlTWFjcm9FeHBhbmRlciwgRG9uZSwgZ2xvYmFsX3Bvc3Rwcm9jZXNzCmZyb20gLmNvcmV1dGlscyBpbXBvcnQgZ2V0X21hY3JvcywgaXNtYWNyb2ltcG9ydApmcm9tIC51bnBhcnNlciBpbXBvcnQgdW5wYXJzZV93aXRoX2ZhbGxiYWNrcwpmcm9tIC51dGlscyBpbXBvcnQgZm9ybWF0X2xvY2F0aW9uLCBmb3JtYXRfbWFjcm9mdW5jdGlvbgoKCmRlZiBuYW1lbWFjcm8oZnVuY3Rpb24pOgogICAgIiIiRGVjb3JhdG9yLiBEZWNsYXJlIGEgbWFjcm8gZnVuY3Rpb24gYXMgYW4gaWRlbnRp"}}]
["e760f45ed80a053526f7a359bc15025fd45a0a9a-2","e760f45ed80a053526f7a359bc15025fd45a0a9a",{"$cut":{"chars":39396,"head":"PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtODsgLSotCiIiIkZpbmQgYW5kIGV4cGFuZCBtYWNyb3MuCgpUaGlzIGxheWVyIHByb3ZpZGVzIHRoZSBhY3R1YWwgbWFjcm8gZXhwYW5kZXIsIGRlZmluaW5nOgoKIC0gU3ludGF4IGZvciBlc3RhYmxpc2hpbmcgbWFjcm8gYmluZGluZ3M6OgogICAgICAgZnJvbSAuLi4gaW1wb3J0IG1hY3JvcywgLi4uCgogLSBNYWNybyBpbnZvY2F0aW9uIHR5cGVzOgogICAtIGV4cHI6ICAgICAgYG1hY3JvbmFtZVsuLi5dYCwgYG1hY3JvbmFtZVthcmcwLCAuLi5dWy4uLl1gCiAgIC0gYmxvY2s6ICAgICBgd2l0aCBtYWNyb25hbWU6YCwgYHdpdGggbWFjcm9uYW1lIGFzIHJlc3VsdDpgLAogICAgICAgICAgICAgICAgYHdpdGggbWFjcm9uYW1lW2FyZzAsIC4uLl06YCwgYHdpdGggbWFjcm9uYW1lW2FyZzAsIC4uLl0gYXMgcmVzdWx0OmAKICAgLSBkZWNvcmF0b3I6IGBAbWFjcm9uYW1lYCwgYEBtYWNyb25hbWVbYXJnMCwgLi4uXWAKICAgLSBuYW1lOiAgICAgIGBtYWNyb25hbWVgCiIiIgoKIyBXZSB1c2UgYnJhY2tldCBzeW50YXggZm9yIHNlbmRpbmcgbWFjcm8gYXJndW1lbnRzLCBiZWNhdXNlIHBhcmVudGhlc2VzIGV2b2tlCiMgdGhlIGlkZWEgb2YgZnVsbCBmdW5jdGlvbi1jYWxsIHN5bnRheC4gVGhpcyBpbmNsdWRlcyBrZXl3b3JkIGFyZ3VtZW50cywgYW5kCiMgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gcGFyYW1ldGVyIHNsb3RzICh3aGljaCBhcmUgYWx3YXlzIG5hbWVkKSBhbmQgaG93IHRoZQojIGFjdHVhbCBhcmd1bWVudHMgcHJvdmlkZWQgaW4gYSBjYWxsIGFyZSBib3VuZCB0byB0aG9zZSBzbG90cyAod2hldGhlciBieQojIHBvc2l0aW9uIG9yIGJ5IG5hbWU7IGFuZCBkb24ndCBmb3JnZXQgKmFyZ3MgYW5kICoqa3dhcmdzLCBib3RoIGF0IHRoZQojIHJlY2VpdmluZyBhbmQgc2VuZGluZyBlbmQpLgojCiMgTm93YWRheXMgaXQncyBwb3NzaWJsZSB0byBlYXNpbHkgc3VwcG9ydCBhbGwgdGhpcyBwcm9wZXJseSB2aWEgYGluc3BlY3Quc2lnbmF0dXJlYAojIGFuZCBgaW5zcGVjdC5TaWduYXR1cmUuYmluZGAuIEJ1dCB0byBnZXQgYSBjYWxsIHNpZ25hdHVyZSB0byBiaW5kIHRvLCB0aGUKIyBtYWNybyBmdW5jdGlvbidzIG93biBzaWduYXR1cmUgd29uJ3QgZG8gLSB0aGF0J3MgZm9yIHdoZW4gdGhlIGZ1bmN0aW9uIGlzCiMgY2FsbGVkIGJ5IHRoZSBtYWNybyBleHBhbmRlciwgbm90IGZvciBzZW5kaW5nIG1hY3JvIGFyZ3VtZW50cyAod2hpY2ggZm9ybQojIGEgc2VwYXJhdGUgbmFtZXNwYWNlKS4KIwojIFNvIHdlIHdvdWxkIG5lZWQgYSByZWZlcmVuY2UgY2FsbGFibGUgdG8gYEBwYXJhbWV0cmljbWFjcm9gLCBub3QgdG8gYmUKIyBjYWxsZWQsIGJ1dCBvbmx5IHRvIGhhdmUgaXRzIGNhbGwgc2lnbmF0dXJlIGV4dHJhY3RlZC4gSW4gcHJhY3RpY2UsIGl0IHdvdWxkCiMgYmUgYSBgbGFtYmRhIC4uLjogTm9uZWAsIHdpdGggdGhlIGNvbmZ1c2luZyBgbGFtYmRhYCBhbmQgYE5vbmVgIG1hbmRhdG9yeSwKIyB3aGVuIHRoZSBvbmx5IGludGVyZXN0aW5nIHBhcnQgaXMgaW4gdGhlIGAuLi5gLCB0aGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9ucy4KIwojIFRoaXMgY291bGQgdGhlbiBiZSB1c2VkIHRvIGVzdGFibGlzaCBhICpzZWNvbmQqIGNhbGwgc2lnbmF0dXJlIGZvciB0aGUKIyBwYXJhbWV0cmljIG1hY3JvIGZ1bmN0aW9uLCB0byByZWNlaXZlIHRoZSBtYWNybyBhcmd1bWVudHMgaW4sIHNheSwgYQojIGRpY3Rpb25hcnkgYWx3YXlzIG5hbWVkIGBhcmdzYCAoYmluZGluZyBwYXJhbWV0ZXIgbmFtZXMgdG8gdmFsdWVzIHByb3ZpZGVkCiMgaW4gdGhlIG1hY3JvIGNhbGw7IGNmLiBvdXIgY3VycmVudCBsaXN0IGBhcmdzYCwgd2hpY2gganVzdCBsaXN0cyB0aGUgdmFsdWVzKS4KIyBDb25mdXNlZCB5ZXQ/IFNlZSBjb21taXQgMTA2OTFjZSBmb3IgYSBza2V0Y2guCiMKIyBUaGUgc3lzdGVtIGlzIG11Y2ggc2ltcGxlciB0byBleHBsYWluIGlmIHdlIGp1c3QgdXNlIGJyYWNrZXRzLCBhbmQgaGF2ZQojIHBvc2l0aW9uYWwgYXJncyBvbmx5LgojCiMgRXZlbiB0aGlzIGNob2ljZSBvZiBzeW50YXggdW5mb3J0dW5hdGVseSBsZWFkcyB0byBhbiBhbWJpZ3VpdHkgYXMgdG8gd2hhdAojIGBtYWNyb1suLi5dWy4uLl1gIGFuZCBldmVuIGp1c3QgYG1hY3JvWy4uLl1gIG1lYW4sIGJ1dCBwZXJoYXBzIGl0J3MgdGhlCiMgbGVzc2VyIGV2aWwuIFRoaXMgaXMgb25lIHJlYXNvbiB3aHkgd2UgcmVxdWlyZSBwYXJhbWV0cmljIG1hY3JvcyB0byBiZQojIGV4cGxpY2l0bHkgZGVjbGFyZWQgLSBhdm9pZCB0aGF0IGFtYmlndWl0eSB3aGVuIG5vdCBuZWVkZWQuCgpfX2FsbF9fID0gWyJuYW1lbWFjcm8iLCAiaXNuYW1lbWFjcm8iLAogICAgICAgICAgICJwYXJhbWV0cmljbWFjcm8iLCAiaXNwYXJhbWV0cmljbWFjcm8iLAogICAgICAgICAgICJNYWNyb0V4cGFuZGVyIiwgIk1hY3JvQ29sbGVjdG9yIiwKICAgICAgICAgICAiZXhwYW5kX21hY3JvcyIsICJmaW5kX21hY3JvcyJdCgppbXBvcnQgc3lzCmZyb20gYXN0IGltcG9ydCAoQVNULCBBc3NpZ24sIENhbGwsIFN0YXJyZWQsIENvbnN0YW50LCBJbXBvcnQsIExhbWJkYSwgTmFtZSwKICAgICAgICAgICAgICAgICBOb2RlVmlzaXRvciwgU3RvcmUsIFN1YnNjcmlwdCwgVHVwbGUsIGFsaWFzLCBhcmd1bWVudHMsCiAgICAgICAgICAgICAgICAgY29weV9sb2NhdGlvbiwgaXRlcl9maWVsZHMpCmZyb20gY29weSBpbXBvcnQgY29weQpmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuX2V4cGxpY2l0Cgpmcm9tIC5jb3JlIGltcG9ydCBCYXNlTWFjcm9FeHBhbmRlciwgRG9uZSwgZ2xvYmFsX3Bvc3Rwcm9jZXNzCmZyb20gLmNvcmV1dGlscyBpbXBvcnQgZ2V0X21hY3JvcywgaXNtYWNyb2ltcG9ydApmcm9tIC51bnBhcnNlciBpbXBvcnQgdW5wYXJzZV93aXRoX2ZhbGxiYWNrcwpmcm9tIC51dGlscyBpbXBvcnQgZm9ybWF0X2xvY2F0aW9uLCBmb3JtYXRfbWFjcm9mdW5jdGlvbgoKCmRlZiBuYW1lbWFjcm8oZnVuY3Rpb24pOgogICAgIiIiRGVjb3JhdG9yLiBEZWNsYXJlIGEgbWFjcm8gZnVuY3Rpb24gYXMgYW4gaWRlbnRp"}}]
["da6c7acdd304778282a2558ce7687dc2d0ff83ce-1","da6c7acdd304778282a2558ce7687dc2d0ff83ce","PHxmaW1fcHJlZml4fD4KJycnCkNvcHlyaWdodCAyMDExIFNSSSBJbnRlcm5hdGlvbmFsCgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpDcmVhdGVkIG9uIEF1ZyAxMiwgMjAxMQoKQGF1dGhvcjogamtsbwonJycKaW1wb3J0IGFiYwppbXBvcnQganNvbgppbXBvcnQgbG9nZ2luZwppbXBvcnQgdHlwZXMKCmxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKY2xhc3MgQ291Y2hEQkRvY1Byb2Nlc3NvcigpOgogICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCiAgICAKICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKICAgIGRlZiBwcm9jZXNzKHNlbGYsIGRvYyk6CiAgICAgICAgIiIiUHJvY2VzcyBhIHNpbmdsZSBDb3VjaERCIGRvY3VtZW50IiIiCiAgICAgICAgcmV0dXJuCjx8ZmltX2hvbGV8PgogICAgCiAgICBkZWYgcGFyc2Uoc2VsZiwgaW5zdHJlYW0pOgogICAgICAgIGZyb20gaWpzb24gaW1wb3J0IGl0ZW1zCiAgICAgICAgCiAgICAgICAgZG9jcyA9IGl0ZW1zKGluc3RyZWFtLCAncm93cy5pdGVtJykKICAgICAgICBjb3VudCA9IDAKICAgICAgICBmb3IgZG9jIGluIGRvY3M6CiAgICAgICAgICAgIGNvdW50ICs9IDEKICAgICAgICAgICAgaWYgc2VsZi5kb2NIYW5kbGVyICE9IE5vbmUgYW5kIGlzaW5zdGFuY2Uoc2VsZi5kb2NIYW5kbGVyLCB0eXBlcy5GdW5jdGlvblR5cGUpOgogICAgICAgICAgICAgICAgc2VsZi5kb2NIYW5kbGVyKGRvYykKICAgICAgICAgICAgZWxpZiBzZWxmLmRvY0hhbmRsZXIgIT0gTm9uZSBhbmQgaXNpbnN0YW5jZShzZWxmLmRvY0hhbmRsZXIsIENvdWNoREJEb2NQcm9jZXNzb3IpOgogICAgICAgICAgICAgICAgc2VsZi5kb2NIYW5kbGVyLnByb2Nlc3MoZG9jKQogICAgCiAgICAgICAgICAgIGxvZy5kZWJ1ZygiRE9DOiAlcyIgJShqc29uLmR1bXBzKGRvYykpKQogICAgICAgIAogICAgICAgIHJldHVybiBjb3VudAogICAgCiAgICBkZWYgZ2VuZXJhdG9yKHNlbGYsIGluc3RyZWFtKToKICAgICAgICBmcm9tIGlqc29uIGltcG9ydCBpdGVtcwogICAgICAgIAogICAgICAgIGRvY3MgPSBpdGVtcyhpbnN0cmVhbSwgJ3Jvd3MuaXRlbScpCiAgICAgICAgc2VsZi5nZW5lcmF0b3JfaW5kZXggPSAtMQogICAgICAgIGZvciBkb2MgaW4gZG9jczoKICAgICAgICAgICAgc2VsZi5nZW5lcmF0b3JfaW5kZXggKz0gMQogICAgICAgICAgICBpZiBzZWxmLmRvY0hhbmRsZXIgIT0gTm9uZSBhbmQgaXNpbnN0YW5jZShzZWxmLmRvY0hhbmRsZXIsIHR5cGVzLkZ1bmN0aW9uVHlwZSk6CiAgICAgICAgICAgICAgICB5aWVsZCBzZWxmLmRvY0hhbmRsZXIoZG9jKQogICAgICAgICAgICBlbGlmIHNlbGYuZG9jSGFuZGxlciAhPSBOb25lIGFuZCBpc2luc3RhbmNlKHNlbGYuZG9jSGFuZGxlciwgQ291Y2hEQkRvY1Byb2Nlc3Nvcik6CiAgICAgICAgICAgICAgICB5aWVsZCBzZWxmLmRvY0hhbmRsZXIucHJvY2Vzcyhkb2MpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB5aWVsZCBkb2MKICAgIAogICAgICAgIAoKPHxmaW1fc3VmZml4fD4KCmNsYXNzIFN0cmVhbWluZ0NvdWNoREJEb2NIYW5kbGVyKCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZG9jdW1lbnRIYW5kbGVyPU5vbmUpOgogICAgICAgIHNlbGYuZG9jSGFuZGxlciA9IGRvY3VtZW50SGFuZGxlcgo8fGZpbV9lbmR8Pg=="]
["da6c7acdd304778282a2558ce7687dc2d0ff83ce-2","da6c7acdd304778282a2558ce7687dc2d0ff83ce","PHxmaW1fcHJlZml4fD4KJycnCkNvcHlyaWdodCAyMDExIFNSSSBJbnRlcm5hdGlvbmFsCgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpDcmVhdGVkIG9uIEF1ZyAxMiwgMjAxMQoKQGF1dGhvcjogamtsbwonJycKaW1wb3J0IGFiYwppbXBvcnQganNvbgppbXBvcnQgbG9nZ2luZwppbXBvcnQgdHlwZXMKCmxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKY2xhc3MgQ291Y2hEQkRvY1Byb2Nlc3NvcigpOgogICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCiAgICAKICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKICAgIGRlZiBwcm9jZXNzKHNlbGYsIGRvYyk6CiAgICAgICAgIiIiUHJvY2VzcyBhIHNpbmdsZSBDb3VjaERCIGRvY3VtZW50IiIiCiAgICAgICAgcmV0dXJuCgpjbGFzcyBTdHJlYW1pbmdDb3VjaERCRG9jSGFuZGxlcigpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRvY3VtZW50SGFuZGxlcj1Ob25lKToKICAgICAgICBzZWxmLmRvY0hhbmRsZXIgPSBkb2N1bWVudEhhbmRsZXIKICAgIAogICAgZGVmIHBhcnNlKHNlbGYsIGluc3RyZWFtKToKICAgICAgICBmcm9tIGlqc29uIGltcG9ydCBpdGVtcwogICAgICAgIAogICAgICAgIGRvY3MgPSBpdGVtcyhpbnN0cmVhbSwgJ3Jvd3MuaXRlbScpCiAgICAgICAgY291bnQgPSAwCiAgICAgICAgZm9yIGRvYyBpbiBkb2NzOgogICAgICAgICAgICBjb3VudCArPSAxCiAgICAgICAgICAgIGlmIHNlbGYuZG9jSGFuZGxlciAhPSBOb25lIGFuZCBpc2luc3RhbmNlKHNlbGYuZG9jSGFuZGxlciwgdHlwZXMuRnVuY3Rpb25UeXBlKToKICAgICAgICAgICAgICAgIHNlbGYuZG9jSGFuZGxlcihkb2MpCiAgICAgICAgICAgIGVsaWYgc2VsZi5kb2NIYW5kbGVyICE9IE5vbmUgYW5kIGlzaW5zdGFuY2Uoc2VsZi5kb2NIYW5kbGVyLCBDb3VjaERCRG9jUHJvY2Vzc29yKToKICAgICAgICAgICAgICAgIHNlbGYuZG9jSGFuZGxlci5wcm9jZXNzKGRvYykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgCiAgICAgICAgICAgIGxvZy5kZWJ1ZygiRE9DOiAlcyIgJShqc29uLmR1bXBzKGRvYykpKQogICAgICAgIAogICAgICAgIHJldHVybiBjb3VudAo8fGZpbV9lbmR8Pg=="]
["da6c7acdd304778282a2558ce7687dc2d0ff83ce-3","da6c7acdd304778282a2558ce7687dc2d0ff83ce","PHxmaW1fcHJlZml4fD4KJycnCkNvcHlyaWdodCAyMDExIFNSSSBJbnRlcm5hdGlvbmFsCgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpDcmVhdGVkIG9uIEF1ZyAxMiwgMjAxMQoKQGF1dGhvcjogamtsbwonJycKaW1wb3J0IGFiYwppbXBvcnQganNvbgppbXBvcnQgbG9nZ2luZwppbXBvcnQgdHlwZXMKCmxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKY2xhc3MgQ291Y2hEQkRvY1Byb2Nlc3NvcigpOgogICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCiAgICAKICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKICAgIGRlZiBwcm9jZXNzKHNlbGYsIGRvYyk6CiAgICAgICAgIiIiUHJvY2VzcyBhIHNpbmdsZSBDb3VjaERCIGRvY3VtZW50IiIiCiAgICAgICAgcmV0dXJuCgpjbGFzcyBTdHJlYW1pbmdDb3VjaERCRG9jSGFuZGxlcigpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRvY3VtZW50SGFuZGxlcj1Ob25lKToKICAgICAgICBzZWxmLmRvY0hhbmRsZXIgPSBkb2N1bWVudEhhbmRsZXIKICAgIAogICAgZGVmIHBhcnNlKHNlbGYsIGluc3RyZWFtKToKICAgICAgICBmcm9tIGlqc29uIGltcG9ydCBpdGVtcwogICAgICAgIAogICAgICAgIGRvY3MgPSBpdGVtcyhpbnN0cmVhbSwgJ3Jvd3MuaXRlbScpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBjb3VudCA9IDAKICAgICAgICBmb3IgZG9jIGluIGRvY3M6CiAgICAgICAgICAgIGNvdW50ICs9IDEKICAgICAgICAgICAgaWYgc2VsZi5kb2NIYW5kbGVyICE9IE5vbmUgYW5kIGlzaW5zdGFuY2Uoc2VsZi5kb2NIYW5kbGVyLCB0eXBlcy5GdW5jdGlvblR5cGUpOgo8fGZpbV9lbmR8Pg=="]
["94d05e6db0d95a750b2e23d5ca8c1a20ad500347-1","94d05e6db0d95a750b2e23d5ca8c1a20ad500347","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIG5heXZ5LmltcG9ydGluZy51dGlscyBpbXBvcnQgKAogICAgZ2V0X2ZpcnN0X2xpbmVfbnVtLAogICAgZ2V0X2ltcG9ydF9ibG9ja19pbmRpY2VzLAogICAgZmluZF90YXJnZXRfbGluZV9udW0sCikKCgpjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKCiAgICBkZWYgdGVzdF9nZXRfZmlyc3RfbGluZV9udW0oc2VsZikgLT4gTm9uZToKICAgICAgICBnaXZlbiA9IFsKPHxmaW1faG9sZXw+CiAgICAgICAgXQoKICAgICAgICBhc3NlcnQgZ2V0X2ZpcnN0X2xpbmVfbnVtKGdpdmVuKSA9PSAzCgogICAgICAgIGdpdmVuID0gWwogICAgICAgICAgICAnIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMycsCiAgICAgICAgICAgICciIiInLAogICAgICAgICAgICAnTXVsdGkgbGluZSBkb2NzdHJpbmcgc3Vycm91bmRlZCBieSBkb3VibGUgcXVvdGVzJywKICAgICAgICAgICAgJyIiIicsCiAgICAgICAgICAgICcnLAogICAgICAgIF0KCiAgICAgICAgYXNzZXJ0IGdldF9maXJzdF9saW5lX251bShnaXZlbikgPT0gNAogICAgICAgIHJldHVybgoKICAgIGRlZiB0ZXN0X2dldF9pbXBvcnRfYmxvY2tfaW5kaWNlcyhzZWxmKSAtPiBOb25lOgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgbmF0dXJhbCB0aHJlZSBibG9ja3MKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpbnB1dF9saW5lcyA9IFsKICAgICAgICAgICAgJyMhL3Vzci9iaW4vZW52IHB5dGhvbjMnLAogICAgICAgICAgICAnZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QnLAogICAgICAgICAgICAnJywKICAgICAgICAgICAgJ2ltcG9ydCBudW1weSBhcyBucCcsCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAnZnJvbSAuaG9nZSBpbXBvcnQgSG9nZScKICAgICAgICBdCiAgICAgICAgYmVnaW5fZW5kX2luZGljZXMgPSBnZXRfaW1wb3J0X2Jsb2NrX2luZGljZXMoaW5wdXRfbGluZXMpCiAgICAgICAgYXNzZXJ0IGxlbihiZWdpbl9lbmRfaW5kaWNlcykgPT0gMwogICAgICAgIGFzc2VydCBiZWdpbl9lbmRfaW5kaWNlc1swXSA9PSAoMSwgMikKICAgICAgICBhc3NlcnQgYmVnaW5fZW5kX2luZGljZXNbMV0gPT0gKDMsIDQpCiAgICAgICAgYXNzZXJ0IGJlZ2luX2VuZF9pbmRpY2VzWzJdID09ICg1LCA2KQoKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIGRvY3N0cmluZyBpZ25vcmVkCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaW5wdXRfbGluZXMgPSBbCiAgICAgICAgICAgICcjIS91c3IvYmluL2VudiBweXRob24zJywKICAgICAgICAgICAgIicnJyIsCiAgICAgICAgICAgICd0aGlzIGlzIGEgZG9jc3RyaW5nJywKICAgICAgICAgICAgIicnJyIsCiAgICAgICAgICAgICdmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCcsCiAgICAgICAgICAgICdmcm9tIHR5cGluZyBpbXBvcnQgRGljdCcsCiAgICAgICAgICAgICcnCiAgICAgICAgXQogICAgICAgIGJlZ2luX2VuZF9pbmRpY2VzID0gZ2V0X2ltcG9ydF9ibG9ja19pbmRpY2VzKGlucHV0X2xpbmVzKQogICAgICAgIGFzc2VydCBsZW4oYmVnaW5fZW5kX2luZGljZXMpID09IDEKICAgICAgICBhc3NlcnQgYmVnaW5fZW5kX2luZGljZXNbMF0gPT0gKDQsIDYpCgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgTm9uIG5ldy1saW5lIHNlcGVyYXRlZCBibG9jayBhbmQgY29kZXMKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpbnB1dF9saW5lcyA9IFsKICAgICAgICAgICAgJyMhL3Vzci9iaW4vZW52IHB5dGhvbjMnLAogICAgICAgICAgICAnZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QnLAogICAgICAgICAgICAnZGVmIG1haW4oKSAtPiBOb25lOicsCiAgICAgICAgICAgICcgICAgcGFzcycsCiAgICAgICAgXQogICAgICAgIGJlZ2luX2VuZF9pbmRpY2VzID0gZ2V0X2ltcG9ydF9ibG9ja19pbmRpY2VzKGlucHV0X2xpbmVzKQogICAgICAgIGFzc2VydCBsZW4oYmVnaW5fZW5kX2luZGljZXMpID09IDEKICAgICAgICBhc3NlcnQgYmVnaW5fZW5kX2luZGljZXNbMF0gPT0gKDEsIDIpCiAgICAgICAgcmV0dXJuCgogICAgZGVmIHRlc3RfZmluZF90YXJnZXRfbGluZV9udW0oc2VsZikgLT4gTm9uZToKICAgICAgICBnaXZlbiA9IFsKICAgICAgICAgICAgJyMhL3Vzci9iaW4vZW52IHB5dGhvbjMnLAogICAgICAgICAgICAnIiIiIHNvbWUgZG9jc3RyaW5nJywKICAgICAgICAgICAgJyIiIicsCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAnaW1wb3J0IG9zJywKICAgICAgICAgICAgJ2ltcG9ydCBzeXMnLAogICAgICAgICAgICAnJywKICAgICAgICAgICAgJ2ltcG9ydCBudW1weSBhcyBucCcsCiAgICAgICAgICAgICcnLAogICAgICAgIF0KCiAgICAgICAgYXNzZXJ0IGZpbmRfdGFyZ2V0X2xpbmVfbnVtKDAsIGdpdmVuKSA9PSA2CiAgICAgICAgYXNzZXJ0IGZpbmRfdGFyZ2V0X2xpbmVfbnVtKDEsIGdpdmVuKSA9PSA4CiAgICAgICAgYXNzZXJ0IGZpbmRfdGFyZ2V0X2xpbmVfbnVtKDIsIGdpdmVuKSA9PSA5CiAgICAgICAgcmV0dXJuCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICcjIS91c3IvYmluL2VudiBweXRob24zJywKICAgICAgICAgICAgIicnJyBvbmUgbGluZSBkb2NzdHJpbmcgc3Vycm91bmRlZCBieSBzaW5nbGUgcXVvdGVzIiwKICAgICAgICAgICAgIicnJyIsCiAgICAgICAgICAgICcnLAo8fGZpbV9lbmR8Pg=="]
["94d05e6db0d95a750b2e23d5ca8c1a20ad500347-2","94d05e6db0d95a750b2e23d5ca8c1a20ad500347","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIG5heXZ5LmltcG9ydGluZy51dGlscyBpbXBvcnQgKAogICAgZ2V0X2ZpcnN0X2xpbmVfbnVtLAogICAgZ2V0X2ltcG9ydF9ibG9ja19pbmRpY2VzLAogICAgZmluZF90YXJnZXRfbGluZV9udW0sCikKCgpjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKCiAgICBkZWYgdGVzdF9nZXRfZmlyc3RfbGluZV9udW0oc2VsZikgLT4gTm9uZToKICAgICAgICBnaXZlbiA9IFsKICAgICAgICAgICAgJyMhL3Vzci9iaW4vZW52IHB5dGhvbjMnLAogICAgICAgICAgICAiJycnIG9uZSBsaW5lIGRvY3N0cmluZyBzdXJyb3VuZGVkIGJ5IHNpbmdsZSBxdW90ZXMiLAogICAgICAgICAgICAiJycnIiwKICAgICAgICAgICAgJycsCiAgICAgICAgXQoKICAgICAgICBhc3NlcnQgZ2V0X2ZpcnN0X2xpbmVfbnVtKGdpdmVuKSA9PSAzCgogICAgICAgIGdpdmVuID0gWwogICAgICAgICAgICAnIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMycsCiAgICAgICAgICAgICciIiInLAogICAgICAgICAgICAnTXVsdGkgbGluZSBkb2NzdHJpbmcgc3Vycm91bmRlZCBieSBkb3VibGUgcXVvdGVzJywKICAgICAgICAgICAgJyIiIicsCiAgICAgICAgICAgICcnLAogICAgICAgIF0KCiAgICAgICAgYXNzZXJ0IGdldF9maXJzdF9saW5lX251bShnaXZlbikgPT0gNAogICAgICAgIHJldHVybgoKICAgIGRlZiB0ZXN0X2dldF9pbXBvcnRfYmxvY2tfaW5kaWNlcyhzZWxmKSAtPiBOb25lOgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgbmF0dXJhbCB0aHJlZSBibG9ja3MKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpbnB1dF9saW5lcyA9IFsKICAgICAgICAgICAgJyMhL3Vzci9iaW4vZW52IHB5dGhvbjMnLAogICAgICAgICAgICAnZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QnLAogICAgICAgICAgICAnJywKICAgICAgICAgICAgJ2ltcG9ydCBudW1weSBhcyBucCcsCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAnZnJvbSAuaG9nZSBpbXBvcnQgSG9nZScKICAgICAgICBdCiAgICAgICAgYmVnaW5fZW5kX2luZGljZXMgPSBnZXRfaW1wb3J0X2Jsb2NrX2luZGljZXMoaW5wdXRfbGluZXMpCiAgICAgICAgYXNzZXJ0IGxlbihiZWdpbl9lbmRfaW5kaWNlcykgPT0gMwogICAgICAgIGFzc2VydCBiZWdpbl9lbmRfaW5kaWNlc1swXSA9PSAoMSwgMikKICAgICAgICBhc3NlcnQgYmVnaW5fZW5kX2luZGljZXNbMV0gPT0gKDMsIDQpCiAgICAgICAgYXNzZXJ0IGJlZ2luX2VuZF9pbmRpY2VzWzJdID09ICg1LCA2KQoKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIGRvY3N0cmluZyBpZ25vcmVkCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaW5wdXRfbGluZXMgPSBbCiAgICAgICAgICAgICcjIS91c3IvYmluL2VudiBweXRob24zJywKICAgICAgICAgICAgIicnJyIsCiAgICAgICAgICAgICd0aGlzIGlzIGEgZG9jc3RyaW5nJywKICAgICAgICAgICAgIicnJyIsCiAgICAgICAgICAgICdmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCcsCiAgICAgICAgICAgICdmcm9tIHR5cGluZyBpbXBvcnQgRGljdCcsCiAgICAgICAgICAgICcnCiAgICAgICAgXQogICAgICAgIGJlZ2luX2VuZF9pbmRpY2VzID0gZ2V0X2ltcG9ydF9ibG9ja19pbmRpY2VzKGlucHV0X2xpbmVzKQogICAgICAgIGFzc2VydCBsZW4oYmVnaW5fZW5kX2luZGljZXMpID09IDEKICAgICAgICBhc3NlcnQgYmVnaW5fZW5kX2luZGljZXNbMF0gPT0gKDQsIDYpCgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgTm9uIG5ldy1saW5lIHNlcGVyYXRlZCBibG9jayBhbmQgY29kZXMKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpbnB1dF9saW5lcyA9IFsKICAgICAgICAgICAgJyMhL3Vzci9iaW4vZW52IHB5dGhvbjMnLAo8fGZpbV9ob2xlfD4KICAgICAgICBdCiAgICAgICAgYmVnaW5fZW5kX2luZGljZXMgPSBnZXRfaW1wb3J0X2Jsb2NrX2luZGljZXMoaW5wdXRfbGluZXMpCiAgICAgICAgYXNzZXJ0IGxlbihiZWdpbl9lbmRfaW5kaWNlcykgPT0gMQogICAgICAgIGFzc2VydCBiZWdpbl9lbmRfaW5kaWNlc1swXSA9PSAoMSwgMikKICAgICAgICByZXR1cm4KCiAgICBkZWYgdGVzdF9maW5kX3RhcmdldF9saW5lX251bShzZWxmKSAtPiBOb25lOgogICAgICAgIGdpdmVuID0gWwogICAgICAgICAgICAnIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMycsCiAgICAgICAgICAgICciIiIgc29tZSBkb2NzdHJpbmcnLAogICAgICAgICAgICAnIiIiJywKICAgICAgICAgICAgJycsCiAgICAgICAgICAgICdpbXBvcnQgb3MnLAogICAgICAgICAgICAnaW1wb3J0IHN5cycsCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAnaW1wb3J0IG51bXB5IGFzIG5wJywKICAgICAgICAgICAgJycsCiAgICAgICAgXQoKICAgICAgICBhc3NlcnQgZmluZF90YXJnZXRfbGluZV9udW0oMCwgZ2l2ZW4pID09IDYKICAgICAgICBhc3NlcnQgZmluZF90YXJnZXRfbGluZV9udW0oMSwgZ2l2ZW4pID09IDgKICAgICAgICBhc3NlcnQgZmluZF90YXJnZXRfbGluZV9udW0oMiwgZ2l2ZW4pID09IDkKICAgICAgICByZXR1cm4KPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgJ2Zyb20gdHlwaW5nIGltcG9ydCBMaXN0JywKICAgICAgICAgICAgJ2RlZiBtYWluKCkgLT4gTm9uZTonLAogICAgICAgICAgICAnICAgIHBhc3MnLAo8fGZpbV9lbmR8Pg=="]
["94d05e6db0d95a750b2e23d5ca8c1a20ad500347-3","94d05e6db0d95a750b2e23d5ca8c1a20ad500347","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIG5heXZ5LmltcG9ydGluZy51dGlscyBpbXBvcnQgKAogICAgZ2V0X2ZpcnN0X2xpbmVfbnVtLAogICAgZ2V0X2ltcG9ydF9ibG9ja19pbmRpY2VzLAogICAgZmluZF90YXJnZXRfbGluZV9udW0sCikKCgpjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKCiAgICBkZWYgdGVzdF9nZXRfZmlyc3RfbGluZV9udW0oc2VsZikgLT4gTm9uZToKICAgICAgICBnaXZlbiA9IFsKICAgICAgICAgICAgJyMhL3Vzci9iaW4vZW52IHB5dGhvbjMnLAogICAgICAgICAgICAiJycnIG9uZSBsaW5lIGRvY3N0cmluZyBzdXJyb3VuZGVkIGJ5IHNpbmdsZSBxdW90ZXMiLAogICAgICAgICAgICAiJycnIiwKICAgICAgICAgICAgJycsCiAgICAgICAgXQoKICAgICAgICBhc3NlcnQgZ2V0X2ZpcnN0X2xpbmVfbnVtKGdpdmVuKSA9PSAzCgogICAgICAgIGdpdmVuID0gWwogICAgICAgICAgICAnIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMycsCiAgICAgICAgICAgICciIiInLAogICAgICAgICAgICAnTXVsdGkgbGluZSBkb2NzdHJpbmcgc3Vycm91bmRlZCBieSBkb3VibGUgcXVvdGVzJywKICAgICAgICAgICAgJyIiIicsCiAgICAgICAgICAgICcnLAogICAgICAgIF0KCiAgICAgICAgYXNzZXJ0IGdldF9maXJzdF9saW5lX251bShnaXZlbikgPT0gNAogICAgICAgIHJldHVybgoKICAgIGRlZiB0ZXN0X2dldF9pbXBvcnRfYmxvY2tfaW5kaWNlcyhzZWxmKSAtPiBOb25lOgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgbmF0dXJhbCB0aHJlZSBibG9ja3MKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpbnB1dF9saW5lcyA9IFsKICAgICAgICAgICAgJyMhL3Vzci9iaW4vZW52IHB5dGhvbjMnLAogICAgICAgICAgICAnZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QnLAogICAgICAgICAgICAnJywKICAgICAgICAgICAgJ2ltcG9ydCBudW1weSBhcyBucCcsCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAnZnJvbSAuaG9nZSBpbXBvcnQgSG9nZScKICAgICAgICBdCiAgICAgICAgYmVnaW5fZW5kX2luZGljZXMgPSBnZXRfaW1wb3J0X2Jsb2NrX2luZGljZXMoaW5wdXRfbGluZXMpCiAgICAgICAgYXNzZXJ0IGxlbihiZWdpbl9lbmRfaW5kaWNlcykgPT0gMwogICAgICAgIGFzc2VydCBiZWdpbl9lbmRfaW5kaWNlc1swXSA9PSAoMSwgMikKICAgICAgICBhc3NlcnQgYmVnaW5fZW5kX2luZGljZXNbMV0gPT0gKDMsIDQpCiAgICAgICAgYXNzZXJ0IGJlZ2luX2VuZF9pbmRpY2VzWzJdID09ICg1LCA2KQoKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIGRvY3N0cmluZyBpZ25vcmVkCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaW5wdXRfbGluZXMgPSBbCiAgICAgICAgICAgICcjIS91c3IvYmluL2VudiBweXRob24zJywKICAgICAgICAgICAgIicnJyIsCiAgICAgICAgICAgICd0aGlzIGlzIGEgZG9jc3RyaW5nJywKICAgICAgICAgICAgIicnJyIsCiAgICAgICAgICAgICdmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCcsCiAgICAgICAgICAgICdmcm9tIHR5cGluZyBpbXBvcnQgRGljdCcsCiAgICAgICAgICAgICcnCiAgICAgICAgXQogICAgICAgIGJlZ2luX2VuZF9pbmRpY2VzID0gZ2V0X2ltcG9ydF9ibG9ja19pbmRpY2VzKGlucHV0X2xpbmVzKQogICAgICAgIGFzc2VydCBsZW4oYmVnaW5fZW5kX2luZGljZXMpID09IDEKICAgICAgICBhc3NlcnQgYmVnaW5fZW5kX2luZGljZXNbMF0gPT0gKDQsIDYpCgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgTm9uIG5ldy1saW5lIHNlcGVyYXRlZCBibG9jayBhbmQgY29kZXMKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpbnB1dF9saW5lcyA9IFsKICAgICAgICAgICAgJyMhL3Vzci9iaW4vZW52IHB5dGhvbjMnLAogICAgICAgICAgICAnZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QnLAogICAgICAgICAgICAnZGVmIG1haW4oKSAtPiBOb25lOicsCiAgICAgICAgICAgICcgICAgcGFzcycsCiAgICAgICAgXQogICAgICAgIGJlZ2luX2VuZF9pbmRpY2VzID0gZ2V0X2ltcG9ydF9ibG9ja19pbmRpY2VzKGlucHV0X2xpbmVzKQogICAgICAgIGFzc2VydCBsZW4oYmVnaW5fZW5kX2luZGljZXMpID09IDEKICAgICAgICBhc3NlcnQgYmVnaW5fZW5kX2luZGljZXNbMF0gPT0gKDEsIDIpCiAgICAgICAgcmV0dXJuCgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgJyIiIicsCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAnaW1wb3J0IG9zJywKICAgICAgICAgICAgJ2ltcG9ydCBzeXMnLAogICAgICAgICAgICAnJywKICAgICAgICAgICAgJ2ltcG9ydCBudW1weSBhcyBucCcsCiAgICAgICAgICAgICcnLAogICAgICAgIF0KCiAgICAgICAgYXNzZXJ0IGZpbmRfdGFyZ2V0X2xpbmVfbnVtKDAsIGdpdmVuKSA9PSA2CiAgICAgICAgYXNzZXJ0IGZpbmRfdGFyZ2V0X2xpbmVfbnVtKDEsIGdpdmVuKSA9PSA4CiAgICAgICAgYXNzZXJ0IGZpbmRfdGFyZ2V0X2xpbmVfbnVtKDIsIGdpdmVuKSA9PSA5CiAgICAgICAgcmV0dXJuCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgdGVzdF9maW5kX3RhcmdldF9saW5lX251bShzZWxmKSAtPiBOb25lOgogICAgICAgIGdpdmVuID0gWwogICAgICAgICAgICAnIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMycsCiAgICAgICAgICAgICciIiIgc29tZSBkb2NzdHJpbmcnLAo8fGZpbV9lbmR8Pg=="]
["94d05e6db0d95a750b2e23d5ca8c1a20ad500347-4","94d05e6db0d95a750b2e23d5ca8c1a20ad500347","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIG5heXZ5LmltcG9ydGluZy51dGlscyBpbXBvcnQgKAogICAgZ2V0X2ZpcnN0X2xpbmVfbnVtLAogICAgZ2V0X2ltcG9ydF9ibG9ja19pbmRpY2VzLAogICAgZmluZF90YXJnZXRfbGluZV9udW0sCikKCgpjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKCiAgICBkZWYgdGVzdF9nZXRfZmlyc3RfbGluZV9udW0oc2VsZikgLT4gTm9uZToKICAgICAgICBnaXZlbiA9IFsKICAgICAgICAgICAgJyMhL3Vzci9iaW4vZW52IHB5dGhvbjMnLAogICAgICAgICAgICAiJycnIG9uZSBsaW5lIGRvY3N0cmluZyBzdXJyb3VuZGVkIGJ5IHNpbmdsZSBxdW90ZXMiLAogICAgICAgICAgICAiJycnIiwKICAgICAgICAgICAgJycsCiAgICAgICAgXQoKICAgICAgICBhc3NlcnQgZ2V0X2ZpcnN0X2xpbmVfbnVtKGdpdmVuKSA9PSAzCgogICAgICAgIGdpdmVuID0gWwogICAgICAgICAgICAnIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMycsCiAgICAgICAgICAgICciIiInLAogICAgICAgICAgICAnTXVsdGkgbGluZSBkb2NzdHJpbmcgc3Vycm91bmRlZCBieSBkb3VibGUgcXVvdGVzJywKICAgICAgICAgICAgJyIiIicsCiAgICAgICAgICAgICcnLAogICAgICAgIF0KCiAgICAgICAgYXNzZXJ0IGdldF9maXJzdF9saW5lX251bShnaXZlbikgPT0gNAogICAgICAgIHJldHVybgoKICAgIGRlZiB0ZXN0X2dldF9pbXBvcnRfYmxvY2tfaW5kaWNlcyhzZWxmKSAtPiBOb25lOgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgbmF0dXJhbCB0aHJlZSBibG9ja3MKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpbnB1dF9saW5lcyA9IFsKICAgICAgICAgICAgJyMhL3Vzci9iaW4vZW52IHB5dGhvbjMnLAogICAgICAgICAgICAnZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QnLAogICAgICAgICAgICAnJywKICAgICAgICAgICAgJ2ltcG9ydCBudW1weSBhcyBucCcsCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAnZnJvbSAuaG9nZSBpbXBvcnQgSG9nZScKICAgICAgICBdCiAgICAgICAgYmVnaW5fZW5kX2luZGljZXMgPSBnZXRfaW1wb3J0X2Jsb2NrX2luZGljZXMoaW5wdXRfbGluZXMpCiAgICAgICAgYXNzZXJ0IGxlbihiZWdpbl9lbmRfaW5kaWNlcykgPT0gMwogICAgICAgIGFzc2VydCBiZWdpbl9lbmRfaW5kaWNlc1swXSA9PSAoMSwgMikKICAgICAgICBhc3NlcnQgYmVnaW5fZW5kX2luZGljZXNbMV0gPT0gKDMsIDQpCiAgICAgICAgYXNzZXJ0IGJlZ2luX2VuZF9pbmRpY2VzWzJdID09ICg1LCA2KQoKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIGRvY3N0cmluZyBpZ25vcmVkCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaW5wdXRfbGluZXMgPSBbCiAgICAgICAgICAgICcjIS91c3IvYmluL2VudiBweXRob24zJywKICAgICAgICAgICAgIicnJyIsCiAgICAgICAgICAgICd0aGlzIGlzIGEgZG9jc3RyaW5nJywKICAgICAgICAgICAgIicnJyIsCiAgICAgICAgICAgICdmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCcsCiAgICAgICAgICAgICdmcm9tIHR5cGluZyBpbXBvcnQgRGljdCcsCiAgICAgICAgICAgICcnCiAgICAgICAgXQogICAgICAgIGJlZ2luX2VuZF9pbmRpY2VzID0gZ2V0X2ltcG9ydF9ibG9ja19pbmRpY2VzKGlucHV0X2xpbmVzKQogICAgICAgIGFzc2VydCBsZW4oYmVnaW5fZW5kX2luZGljZXMpID09IDEKICAgICAgICBhc3NlcnQgYmVnaW5fZW5kX2luZGljZXNbMF0gPT0gKDQsIDYpCgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgTm9uIG5ldy1saW5lIHNlcGVyYXRlZCBibG9jayBhbmQgY29kZXMKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpbnB1dF9saW5lcyA9IFsKICAgICAgICAgICAgJyMhL3Vzci9iaW4vZW52IHB5dGhvbjMnLAogICAgICAgICAgICAnZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QnLAogICAgICAgICAgICAnZGVmIG1haW4oKSAtPiBOb25lOicsCiAgICAgICAgICAgICcgICAgcGFzcycsCiAgICAgICAgXQogICAgICAgIGJlZ2luX2VuZF9pbmRpY2VzID0gZ2V0X2ltcG9ydF9ibG9ja19pbmRpY2VzKGlucHV0X2xpbmVzKQogICAgICAgIGFzc2VydCBsZW4oYmVnaW5fZW5kX2luZGljZXMpID09IDEKICAgICAgICBhc3NlcnQgYmVnaW5fZW5kX2luZGljZXNbMF0gPT0gKDEsIDIpCiAgICAgICAgcmV0dXJuCgogICAgZGVmIHRlc3RfZmluZF90YXJnZXRfbGluZV9udW0oc2VsZikgLT4gTm9uZToKICAgICAgICBnaXZlbiA9IFsKICAgICAgICAgICAgJyMhL3Vzci9iaW4vZW52IHB5dGhvbjMnLAogICAgICAgICAgICAnIiIiIHNvbWUgZG9jc3RyaW5nJywKICAgICAgICAgICAgJyIiIicsCiAgICAgICAgICAgICcnLAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgJycsCiAgICAgICAgXQoKICAgICAgICBhc3NlcnQgZmluZF90YXJnZXRfbGluZV9udW0oMCwgZ2l2ZW4pID09IDYKICAgICAgICBhc3NlcnQgZmluZF90YXJnZXRfbGluZV9udW0oMSwgZ2l2ZW4pID09IDgKICAgICAgICBhc3NlcnQgZmluZF90YXJnZXRfbGluZV9udW0oMiwgZ2l2ZW4pID09IDkKICAgICAgICByZXR1cm4KPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgJ2ltcG9ydCBvcycsCiAgICAgICAgICAgICdpbXBvcnQgc3lzJywKICAgICAgICAgICAgJycsCiAgICAgICAgICAgICdpbXBvcnQgbnVtcHkgYXMgbnAnLAo8fGZpbV9lbmR8Pg=="]
["94d05e6db0d95a750b2e23d5ca8c1a20ad500347-5","94d05e6db0d95a750b2e23d5ca8c1a20ad500347","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIG5heXZ5LmltcG9ydGluZy51dGlscyBpbXBvcnQgKAogICAgZ2V0X2ZpcnN0X2xpbmVfbnVtLAogICAgZ2V0X2ltcG9ydF9ibG9ja19pbmRpY2VzLAogICAgZmluZF90YXJnZXRfbGluZV9udW0sCikKCgpjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKCiAgICBkZWYgdGVzdF9nZXRfZmlyc3RfbGluZV9udW0oc2VsZikgLT4gTm9uZToKICAgICAgICBnaXZlbiA9IFsKICAgICAgICAgICAgJyMhL3Vzci9iaW4vZW52IHB5dGhvbjMnLAogICAgICAgICAgICAiJycnIG9uZSBsaW5lIGRvY3N0cmluZyBzdXJyb3VuZGVkIGJ5IHNpbmdsZSBxdW90ZXMiLAogICAgICAgICAgICAiJycnIiwKICAgICAgICAgICAgJycsCiAgICAgICAgXQoKICAgICAgICBhc3NlcnQgZ2V0X2ZpcnN0X2xpbmVfbnVtKGdpdmVuKSA9PSAzCgogICAgICAgIGdpdmVuID0gWwogICAgICAgICAgICAnIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMycsCiAgICAgICAgICAgICciIiInLAogICAgICAgICAgICAnTXVsdGkgbGluZSBkb2NzdHJpbmcgc3Vycm91bmRlZCBieSBkb3VibGUgcXVvdGVzJywKICAgICAgICAgICAgJyIiIicsCiAgICAgICAgICAgICcnLAogICAgICAgIF0KCiAgICAgICAgYXNzZXJ0IGdldF9maXJzdF9saW5lX251bShnaXZlbikgPT0gNAogICAgICAgIHJldHVybgoKICAgIGRlZiB0ZXN0X2dldF9pbXBvcnRfYmxvY2tfaW5kaWNlcyhzZWxmKSAtPiBOb25lOgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgbmF0dXJhbCB0aHJlZSBibG9ja3MKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpbnB1dF9saW5lcyA9IFsKICAgICAgICAgICAgJyMhL3Vzci9iaW4vZW52IHB5dGhvbjMnLAogICAgICAgICAgICAnZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QnLAogICAgICAgICAgICAnJywKICAgICAgICAgICAgJ2ltcG9ydCBudW1weSBhcyBucCcsCiAgICAgICAgICAgICcnLAo8fGZpbV9ob2xlfD4KICAgICAgICBdCiAgICAgICAgYmVnaW5fZW5kX2luZGljZXMgPSBnZXRfaW1wb3J0X2Jsb2NrX2luZGljZXMoaW5wdXRfbGluZXMpCiAgICAgICAgYXNzZXJ0IGxlbihiZWdpbl9lbmRfaW5kaWNlcykgPT0gMwogICAgICAgIGFzc2VydCBiZWdpbl9lbmRfaW5kaWNlc1swXSA9PSAoMSwgMikKICAgICAgICBhc3NlcnQgYmVnaW5fZW5kX2luZGljZXNbMV0gPT0gKDMsIDQpCiAgICAgICAgYXNzZXJ0IGJlZ2luX2VuZF9pbmRpY2VzWzJdID09ICg1LCA2KQoKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIGRvY3N0cmluZyBpZ25vcmVkCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaW5wdXRfbGluZXMgPSBbCiAgICAgICAgICAgICcjIS91c3IvYmluL2VudiBweXRob24zJywKICAgICAgICAgICAgIicnJyIsCiAgICAgICAgICAgICd0aGlzIGlzIGEgZG9jc3RyaW5nJywKICAgICAgICAgICAgIicnJyIsCiAgICAgICAgICAgICdmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCcsCiAgICAgICAgICAgICdmcm9tIHR5cGluZyBpbXBvcnQgRGljdCcsCiAgICAgICAgICAgICcnCiAgICAgICAgXQogICAgICAgIGJlZ2luX2VuZF9pbmRpY2VzID0gZ2V0X2ltcG9ydF9ibG9ja19pbmRpY2VzKGlucHV0X2xpbmVzKQogICAgICAgIGFzc2VydCBsZW4oYmVnaW5fZW5kX2luZGljZXMpID09IDEKICAgICAgICBhc3NlcnQgYmVnaW5fZW5kX2luZGljZXNbMF0gPT0gKDQsIDYpCgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgTm9uIG5ldy1saW5lIHNlcGVyYXRlZCBibG9jayBhbmQgY29kZXMKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpbnB1dF9saW5lcyA9IFsKICAgICAgICAgICAgJyMhL3Vzci9iaW4vZW52IHB5dGhvbjMnLAogICAgICAgICAgICAnZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QnLAogICAgICAgICAgICAnZGVmIG1haW4oKSAtPiBOb25lOicsCiAgICAgICAgICAgICcgICAgcGFzcycsCiAgICAgICAgXQogICAgICAgIGJlZ2luX2VuZF9pbmRpY2VzID0gZ2V0X2ltcG9ydF9ibG9ja19pbmRpY2VzKGlucHV0X2xpbmVzKQogICAgICAgIGFzc2VydCBsZW4oYmVnaW5fZW5kX2luZGljZXMpID09IDEKICAgICAgICBhc3NlcnQgYmVnaW5fZW5kX2luZGljZXNbMF0gPT0gKDEsIDIpCiAgICAgICAgcmV0dXJuCgogICAgZGVmIHRlc3RfZmluZF90YXJnZXRfbGluZV9udW0oc2VsZikgLT4gTm9uZToKICAgICAgICBnaXZlbiA9IFsKICAgICAgICAgICAgJyMhL3Vzci9iaW4vZW52IHB5dGhvbjMnLAogICAgICAgICAgICAnIiIiIHNvbWUgZG9jc3RyaW5nJywKICAgICAgICAgICAgJyIiIicsCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAnaW1wb3J0IG9zJywKICAgICAgICAgICAgJ2ltcG9ydCBzeXMnLAogICAgICAgICAgICAnJywKICAgICAgICAgICAgJ2ltcG9ydCBudW1weSBhcyBucCcsCiAgICAgICAgICAgICcnLAogICAgICAgIF0KCiAgICAgICAgYXNzZXJ0IGZpbmRfdGFyZ2V0X2xpbmVfbnVtKDAsIGdpdmVuKSA9PSA2CiAgICAgICAgYXNzZXJ0IGZpbmRfdGFyZ2V0X2xpbmVfbnVtKDEsIGdpdmVuKSA9PSA4CiAgICAgICAgYXNzZXJ0IGZpbmRfdGFyZ2V0X2xpbmVfbnVtKDIsIGdpdmVuKSA9PSA5CiAgICAgICAgcmV0dXJuCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICdmcm9tIC5ob2dlIGltcG9ydCBIb2dlJwo8fGZpbV9lbmR8Pg=="]
["c17b82b69fe3d30cc1c7959760c3dc616ca9491e-1","c17b82b69fe3d30cc1c7959760c3dc616ca9491e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBsb2dnaW5nCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAoKZnJvbSBweXNwYXJrLnNxbCBpbXBvcnQgU3BhcmtTZXNzaW9uCgpmcm9tIHRwcC5wcmVwcm9jZXNzaW5nIGltcG9ydCBEYXRhc2V0LCBnZXRfc2RmX3BhcnNlcgpmcm9tIHRwcC51dGlscy5hcmdjaGVjayBpbXBvcnQgY2hlY2tfaW5wdXRfcGF0aCwgY2hlY2tfb3V0cHV0X3BhdGgKCl9wdWJjaGVtX2NvbXBvdW5kX3BhdGggPSBQYXRoKCJmdHAubmNiaS5ubG0ubmloLmdvdi9wdWJjaGVtL0NvbXBvdW5kL0NVUlJFTlQtRnVsbC9TREYvIikKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKICAgICAgICBwcm9nPSJTREYgRXhwb3J0IiwgZGVzY3JpcHRpb249IkV4cG9ydCBTREYgaW50byBgcGFycXVldGAgZm9ybWF0IgogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1pbnB1dCIsCiAgICAgICAgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgICB0eXBlPVBhdGgsCiAgICAgICAgbWV0YXZhcj0iUEFUSCIsCiAgICAgICAgZGVzdD0iaW5wdXRfcGF0aCIsCiAgICAgICAgaGVscD1mIlBhdGggdG8gZm9sZGVyIHdpdGggU0RGIGZpbGVzIiwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tb3V0cHV0IiwKICAgICAgICByZXF1aXJlZD1UcnVlLAogICAgICAgIHR5cGU9UGF0aCwKICAgICAgICBtZXRhdmFyPSJQQVRIIiwKICAgICAgICBkZXN0PSJvdXRwdXRfcGF0aCIsCiAgICAgICAgaGVscD0iUGF0aCB3aGVyZSBvdXRwdXQgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gaW4gYHBhcnF1ZXRgIGZvcm1hdCIsCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLWRhdGFzZXQiLCByZXF1aXJlZD1UcnVlLCB0eXBlPURhdGFzZXQsIGRlc3Q9ImRhdGFzZXQiLCBjaG9pY2VzPWxpc3QoRGF0YXNldCkKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAiLS1udW0tcGFydGl0aW9ucyIsIHR5cGU9aW50LCBkZXN0PSJudW1fcGFydGl0aW9ucyIsIGRlZmF1bHQ9MjAwCjx8ZmltX2VuZHw+"]
["c17b82b69fe3d30cc1c7959760c3dc616ca9491e-2","c17b82b69fe3d30cc1c7959760c3dc616ca9491e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBsb2dnaW5nCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAoKZnJvbSBweXNwYXJrLnNxbCBpbXBvcnQgU3BhcmtTZXNzaW9uCgpmcm9tIHRwcC5wcmVwcm9jZXNzaW5nIGltcG9ydCBEYXRhc2V0LCBnZXRfc2RmX3BhcnNlcgpmcm9tIHRwcC51dGlscy5hcmdjaGVjayBpbXBvcnQgY2hlY2tfaW5wdXRfcGF0aCwgY2hlY2tfb3V0cHV0X3BhdGgKCl9wdWJjaGVtX2NvbXBvdW5kX3BhdGggPSBQYXRoKCJmdHAubmNiaS5ubG0ubmloLmdvdi9wdWJjaGVtL0NvbXBvdW5kL0NVUlJFTlQtRnVsbC9TREYvIikKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKICAgICAgICBwcm9nPSJTREYgRXhwb3J0IiwgZGVzY3JpcHRpb249IkV4cG9ydCBTREYgaW50byBgcGFycXVldGAgZm9ybWF0IgogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1pbnB1dCIsCiAgICAgICAgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgICB0eXBlPVBhdGgsCiAgICAgICAgbWV0YXZhcj0iUEFUSCIsCiAgICAgICAgZGVzdD0iaW5wdXRfcGF0aCIsCiAgICAgICAgaGVscD1mIlBhdGggdG8gZm9sZGVyIHdpdGggU0RGIGZpbGVzIiwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tb3V0cHV0IiwKICAgICAgICByZXF1aXJlZD1UcnVlLAogICAgICAgIHR5cGU9UGF0aCwKICAgICAgICBtZXRhdmFyPSJQQVRIIiwKICAgICAgICBkZXN0PSJvdXRwdXRfcGF0aCIsCiAgICAgICAgaGVscD0iUGF0aCB3aGVyZSBvdXRwdXQgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gaW4gYHBhcnF1ZXRgIGZvcm1hdCIsCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLWRhdGFzZXQiLCByZXF1aXJlZD1UcnVlLCB0eXBlPURhdGFzZXQsIGRlc3Q9ImRhdGFzZXQiLCBjaG9pY2VzPWxpc3QoRGF0YXNldCkKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tbnVtLXBhcnRpdGlvbnMiLCB0eXBlPWludCwgZGVzdD0ibnVtX3BhcnRpdGlvbnMiLCBkZWZhdWx0PTIwMAogICAgKQoKICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCgogICAgY2hlY2tfaW5wdXRfcGF0aChhcmdzLmlucHV0X3BhdGgpCiAgICBjaGVja19vdXRwdXRfcGF0aChhcmdzLm91dHB1dF9wYXRoKQoKICAgIHNkZl9wYXJzZXIgPSBnZXRfc2RmX3BhcnNlcihhcmdzLmRhdGFzZXQpCiAgICBzY2hlbWEgPSBzZGZfcGFyc2VyLmdldF9zY2hlbWEoKQoKICAgIGlucHV0X3BhdGggPSBhcmdzLmlucHV0X3BhdGgKICAgIGdsb2JfcGF0dGVybiA9ICIqLnNkZiIKCiAgICBpZiBhcmdzLmRhdGFzZXQgPT0gRGF0YXNldC5QVUJDSEVNOgogICAgICAgIGlucHV0X3BhdGggPSBhcmdzLmlucHV0X3BhdGggLyBfcHViY2hlbV9jb21wb3VuZF9wYXRoCiAgICAgICAgZ2xvYl9wYXR0ZXJuID0gIiouc2RmLmd6IgoKICAgIHRyeToKICAgICAgICBzcGFyayA9ICgKICAgICAgICAgICAgU3BhcmtTZXNzaW9uLmJ1aWxkZXIuYXBwTmFtZShwYXJzZXIucHJvZykKICAgICAgICAgICAgLmNvbmZpZygic3Bhcmsuc3FsLmV4ZWN1dGlvbi5hcnJvdy5lbmFibGVkIiwgInRydWUiKQogICAgICAgICAgICAuY29uZmlnKCJzcGFyay5zZXJpYWxpemVyIiwgIm9yZy5hcGFjaGUuc3Bhcmsuc2VyaWFsaXplci5LcnlvU2VyaWFsaXplciIpCiAgICAgICAgICAgIC5nZXRPckNyZWF0ZSgpCiAgICAgICAgKQoKICAgICAgICBzYyA9IHNwYXJrLnNwYXJrQ29udGV4dAoKICAgICAgICBzZGZfZmlsZXMgPSBsaXN0KGlucHV0X3BhdGguZ2xvYihnbG9iX3BhdHRlcm4pKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2RmX2ZpbGVzID0gc2MucGFyYWxsZWxpemUoc2RmX2ZpbGVzKS5yZXBhcnRpdGlvbihhcmdzLm51bV9wYXJ0aXRpb25zKQoKICAgICAgICBzZGZfcGFycXVldCA9IHNkZl9maWxlcy5mbGF0TWFwKHNkZl9wYXJzZXIucGFyc2Vfc2RmKS50b0RGKHNjaGVtYT1zY2hlbWEpCgo8fGZpbV9lbmR8Pg=="]
["c17b82b69fe3d30cc1c7959760c3dc616ca9491e-3","c17b82b69fe3d30cc1c7959760c3dc616ca9491e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IGxvZ2dpbmcKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCgpmcm9tIHB5c3Bhcmsuc3FsIGltcG9ydCBTcGFya1Nlc3Npb24KPHxmaW1fZW5kfD4="]
["c17b82b69fe3d30cc1c7959760c3dc616ca9491e-4","c17b82b69fe3d30cc1c7959760c3dc616ca9491e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBsb2dnaW5nCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAoKZnJvbSBweXNwYXJrLnNxbCBpbXBvcnQgU3BhcmtTZXNzaW9uCgpmcm9tIHRwcC5wcmVwcm9jZXNzaW5nIGltcG9ydCBEYXRhc2V0LCBnZXRfc2RmX3BhcnNlcgpmcm9tIHRwcC51dGlscy5hcmdjaGVjayBpbXBvcnQgY2hlY2tfaW5wdXRfcGF0aCwgY2hlY2tfb3V0cHV0X3BhdGgKCl9wdWJjaGVtX2NvbXBvdW5kX3BhdGggPSBQYXRoKCJmdHAubmNiaS5ubG0ubmloLmdvdi9wdWJjaGVtL0NvbXBvdW5kL0NVUlJFTlQtRnVsbC9TREYvIikKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKICAgICAgICBwcm9nPSJTREYgRXhwb3J0IiwgZGVzY3JpcHRpb249IkV4cG9ydCBTREYgaW50byBgcGFycXVldGAgZm9ybWF0IgogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1pbnB1dCIsCiAgICAgICAgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgICB0eXBlPVBhdGgsCiAgICAgICAgbWV0YXZhcj0iUEFUSCIsCiAgICAgICAgZGVzdD0iaW5wdXRfcGF0aCIsCiAgICAgICAgaGVscD1mIlBhdGggdG8gZm9sZGVyIHdpdGggU0RGIGZpbGVzIiwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tb3V0cHV0IiwKICAgICAgICByZXF1aXJlZD1UcnVlLAogICAgICAgIHR5cGU9UGF0aCwKICAgICAgICBtZXRhdmFyPSJQQVRIIiwKICAgICAgICBkZXN0PSJvdXRwdXRfcGF0aCIsCiAgICAgICAgaGVscD0iUGF0aCB3aGVyZSBvdXRwdXQgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gaW4gYHBhcnF1ZXRgIGZvcm1hdCIsCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLWRhdGFzZXQiLCByZXF1aXJlZD1UcnVlLCB0eXBlPURhdGFzZXQsIGRlc3Q9ImRhdGFzZXQiLCBjaG9pY2VzPWxpc3QoRGF0YXNldCkKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tbnVtLXBhcnRpdGlvbnMiLCB0eXBlPWludCwgZGVzdD0ibnVtX3BhcnRpdGlvbnMiLCBkZWZhdWx0PTIwMAogICAgKQoKICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCgogICAgY2hlY2tfaW5wdXRfcGF0aChhcmdzLmlucHV0X3BhdGgpCiAgICBjaGVja19vdXRwdXRfcGF0aChhcmdzLm91dHB1dF9wYXRoKQoKICAgIHNkZl9wYXJzZXIgPSBnZXRfc2RmX3BhcnNlcihhcmdzLmRhdGFzZXQpCiAgICBzY2hlbWEgPSBzZGZfcGFyc2VyLmdldF9zY2hlbWEoKQoKICAgIGlucHV0X3BhdGggPSBhcmdzLmlucHV0X3BhdGgKICAgIGdsb2JfcGF0dGVybiA9ICIqLnNkZiIKCiAgICBpZiBhcmdzLmRhdGFzZXQgPT0gRGF0YXNldC5QVUJDSEVNOgogICAgICAgIGlucHV0X3BhdGggPSBhcmdzLmlucHV0X3BhdGggLyBfcHViY2hlbV9jb21wb3VuZF9wYXRoCiAgICAgICAgZ2xvYl9wYXR0ZXJuID0gIiouc2RmLmd6IgoKICAgIHRyeToKICAgICAgICBzcGFyayA9ICgKICAgICAgICAgICAgU3BhcmtTZXNzaW9uLmJ1aWxkZXIuYXBwTmFtZShwYXJzZXIucHJvZykKICAgICAgICAgICAgLmNvbmZpZygic3Bhcmsuc3FsLmV4ZWN1dGlvbi5hcnJvdy5lbmFibGVkIiwgInRydWUiKQogICAgICAgICAgICAuY29uZmlnKCJzcGFyay5zZXJpYWxpemVyIiwgIm9yZy5hcGFjaGUuc3Bhcmsuc2VyaWFsaXplci5LcnlvU2VyaWFsaXplciIpCiAgICAgICAgICAgIC5nZXRPckNyZWF0ZSgpCjx8ZmltX2hvbGV8PgogICAgICAgIHNkZl9maWxlcyA9IGxpc3QoaW5wdXRfcGF0aC5nbG9iKGdsb2JfcGF0dGVybikpCiAgICAgICAgc2RmX2ZpbGVzID0gc2MucGFyYWxsZWxpemUoc2RmX2ZpbGVzKS5yZXBhcnRpdGlvbihhcmdzLm51bV9wYXJ0aXRpb25zKQoKICAgICAgICBzZGZfcGFycXVldCA9IHNkZl9maWxlcy5mbGF0TWFwKHNkZl9wYXJzZXIucGFyc2Vfc2RmKS50b0RGKHNjaGVtYT1zY2hlbWEpCgogICAgICAgIHNkZl9wYXJxdWV0LndyaXRlLnBhcnF1ZXQoYXJncy5vdXRwdXRfcGF0aC5hc19wb3NpeCgpKQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKGUpCiAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgKICAgICAgICAgICAgIlNwYXJrIEpvYiBlbmNvdW50ZXJlZCBhIHByb2JsZW0uIENoZWNrIHRoZSBsb2dzIGZvciBtb3JlIGluZm9ybWF0aW9uIgogICAgICAgICkKICAgIGZpbmFsbHk6CiAgICAgICAgc3Bhcmsuc3RvcCgpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgKQoKICAgICAgICBzYyA9IHNwYXJrLnNwYXJrQ29udGV4dAoKPHxmaW1fZW5kfD4="]
["15840fda12b2f777de8d2c43b460f8d9c47acb1c-1","15840fda12b2f777de8d2c43b460f8d9c47acb1c","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgbWVzc2FnZXMKZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLmRlY29yYXRvcnMgaW1wb3J0IGxvZ2luX3JlcXVpcmVkCmZyb20gZGphbmdvLmNvbnRyaWIuY29udGVudHR5cGVzLm1vZGVscyBpbXBvcnQgQ29udGVudFR5cGUKZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlc3BvbnNlUmVkaXJlY3QsIEh0dHA0MDQsIEh0dHBSZXNwb25zZQpmcm9tIGRqYW5nby5zaG9ydGN1dHMgaW1wb3J0IHJlbmRlciwgZ2V0X29iamVjdF9vcl80MDQKZnJvbSAuZm9ybXMgaW1wb3J0IENvbW1lbnRGb3JtCmZyb20gLm1vZGVscyBpbXBvcnQgQ29tbWVudAoKCmRlZiBjb21tZW50X3RocmVhZChyZXF1ZXN0LCBpZCk6CiAgICAjIGNvbW1lbnQgPSBnZXRfb2JqZWN0X29yXzQwNChDb21tZW50LCBpZD1pZCkKICAgIHRyeToKICAgICAgICBjb21tZW50ID0gQ29tbWVudC5vYmplY3RzLmdldChpZD1pZCkKICAgIGV4Y2VwdDoKICAgICAgICByYWlzZSBIdHRwNDA0CiAgICAjIGNvbnRlbnRfb2JqZWN0ID0gY29tbWVudC5jb250ZW50X29iamVjdAogICAgIyBjb250ZW50X2lkID0gY29tbWVudC5jb250ZW50X29iamVjdC5pZAoKICAgIGluaXRpYWxfZGF0YSA9IHsKICAgICAgICAiY29udGVudF90eXBlIjogY29tbWVudC5jb250ZW50X3R5cGUsCiAgICAgICAgIm9iamVjdF9pZCI6IGNvbW1lbnQub2JqZWN0X2lkCiAgICB9CgogICAgZm9ybSA9IENvbW1lbnRGb3JtKHJlcXVlc3QuUE9TVCBvciBOb25lLCBpbml0aWFsPWluaXRpYWxfZGF0YSkKPHxmaW1faG9sZXw+CiAgICAgICAgY190eXBlID0gZm9ybS5jbGVhbmVkX2RhdGEuZ2V0KCJjb250ZW50X3R5cGUiKQogICAgICAgIGNvbnRlbnRfdHlwZSA9IENvbnRlbnRUeXBlLm9iamVjdHMuZ2V0KG1vZGVsPWNfdHlwZSkKICAgICAgICBvYmplY3RfaWQgPSBmb3JtLmNsZWFuZWRfZGF0YS5nZXQoIm9iamVjdF9pZCIpCiAgICAgICAgbWVzc2FnZSA9IGZvcm0uY2xlYW5lZF9kYXRhLmdldCgibWVzc2FnZSIpCiAgICAgICAgcGFyZW50X29iaiA9IE5vbmUKICAgICAgICB0cnk6CiAgICAgICAgICAgIHBhcmVudF9pZCA9IGludChyZXF1ZXN0LlBPU1QuZ2V0KCJwYXJlbnRfaWQiKSkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHBhcmVudF9pZCA9IE5vbmUKCiAgICAgICAgaWYgcGFyZW50X2lkOgogICAgICAgICAgICBwYXJlbnRfcXMgPSBDb21tZW50Lm9iamVjdHMuZmlsdGVyKGlkPXBhcmVudF9pZCkKICAgICAgICAgICAgaWYgcGFyZW50X3FzLmV4aXN0cygpIGFuZCBwYXJlbnRfcXMuY291bnQoKSA9PSAxIDoKICAgICAgICAgICAgICAgIHBhcmVudF9vYmogPSBwYXJlbnRfcXMuZmlyc3QoKQoKICAgICAgICBuZXdfY29tbWVudCwgY3JlYXRlZCA9IENvbW1lbnQub2JqZWN0cy5nZXRfb3JfY3JlYXRlKAogICAgICAgICAgICAgICAgdXNlciA9IHJlcXVlc3QudXNlciwKICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9IGNvbnRlbnRfdHlwZSwKICAgICAgICAgICAgICAgIG9iamVjdF9pZCA9IG9iamVjdF9pZCwKICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLAogICAgICAgICAgICAgICAgcGFyZW50X2lkID0gcGFyZW50X2lkLAogICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50X29iagogICAgICAgICkKCiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZVJlZGlyZWN0KG5ld19jb21tZW50LmNvbnRlbnRfb2JqZWN0LmdldF9hYnNvbHV0ZV91cmwoKSkKCiAgICBjb250ZXh0ID0gewogICAgICAgICJjb21tZW50IiA6IGNvbW1lbnQsCiAgICAgICAgImNvbW1lbnRfZm9ybSIgOiBmb3JtCiAgICB9CiAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICJjb21tZW50L2NvbW1lbnRfdGhyZWFkLmh0bWwiLCBjb250ZXh0KQoKCkBsb2dpbl9yZXF1aXJlZApkZWYgY29tbWVudF9kZWxldGUocmVxdWVzdCwgaWQpOgogICAgIyBjb21tZW50ID0gZ2V0X29iamVjdF9vcl80MDQoQ29tbWVudCwgaWQ9aWQpCiAgICB0cnk6CiAgICAgICAgY29tbWVudCA9IENvbW1lbnQub2JqZWN0cy5nZXQoaWQ9aWQpCiAgICBleGNlcHQ6CiAgICAgICAgcmFpc2UgSHR0cDQwNAoKICAgIGlmIGNvbW1lbnQudXNlciAhPSByZXF1ZXN0LnVzZXI6CiAgICAgICAgIyBtZXNzYWdlcy5zdWNjZXNzKHJlcXVlc3QsICJZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHZpZXcgdGhpcyIpCiAgICAgICAgIyByYWlzZSBIdHRwNDA0CiAgICAgICAgcmVzcG9uc2UgPSBIdHRwUmVzcG9uc2UoIllvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gdmlldyB0aGlzIikKICAgICAgICByZXNwb25zZS5zdGF0dXNfY29kZSA9IDQwMwogICAgICAgIHJldHVybiByZXNwb25zZQoKICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICJQT1NUIjoKICAgICAgICBwYXJlbnRfY29tbWVudF91cmwgPSBjb21tZW50LmNvbnRlbnRfb2JqZWN0LmdldF9hYnNvbHV0ZV91cmwoKQogICAgICAgIGNvbW1lbnQuZGVsZXRlKCkKICAgICAgICBtZXNzYWdlcy5zdWNjZXNzKHJlcXVlc3QsICJUaGlzIGhhcyBiZW4gZGVsZXRlZC4iKQogICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2VSZWRpcmVjdChwYXJlbnRfY29tbWVudF91cmwpCiAgICBjb250ZXh0ID0gewogICAgICAgICJjb21tZW50IiA6IGNvbW1lbnQKICAgIH0KICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgImNvbW1lbnQvY29uZmlybV9kZWxldGUuaHRtbCIsIGNvbnRleHQpCjx8ZmltX3N1ZmZpeHw+CiAgICAjIHByaW50KGRpcihmb3JtKSkKICAgICMgcHJpbnQoZm9ybS5lcnJvcnMpCgogICAgaWYgZm9ybS5pc192YWxpZCgpIGFuZCByZXF1ZXN0LnVzZXIuaXNfYXV0aGVudGljYXRlZCgpOgo8fGZpbV9lbmR8Pg=="]
["15840fda12b2f777de8d2c43b460f8d9c47acb1c-2","15840fda12b2f777de8d2c43b460f8d9c47acb1c","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgbWVzc2FnZXMKZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLmRlY29yYXRvcnMgaW1wb3J0IGxvZ2luX3JlcXVpcmVkCmZyb20gZGphbmdvLmNvbnRyaWIuY29udGVudHR5cGVzLm1vZGVscyBpbXBvcnQgQ29udGVudFR5cGUKZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlc3BvbnNlUmVkaXJlY3QsIEh0dHA0MDQsIEh0dHBSZXNwb25zZQpmcm9tIGRqYW5nby5zaG9ydGN1dHMgaW1wb3J0IHJlbmRlciwgZ2V0X29iamVjdF9vcl80MDQKZnJvbSAuZm9ybXMgaW1wb3J0IENvbW1lbnRGb3JtCmZyb20gLm1vZGVscyBpbXBvcnQgQ29tbWVudAoKCmRlZiBjb21tZW50X3RocmVhZChyZXF1ZXN0LCBpZCk6CiAgICAjIGNvbW1lbnQgPSBnZXRfb2JqZWN0X29yXzQwNChDb21tZW50LCBpZD1pZCkKICAgIHRyeToKICAgICAgICBjb21tZW50ID0gQ29tbWVudC5vYmplY3RzLmdldChpZD1pZCkKICAgIGV4Y2VwdDoKICAgICAgICByYWlzZSBIdHRwNDA0CiAgICAjIGNvbnRlbnRfb2JqZWN0ID0gY29tbWVudC5jb250ZW50X29iamVjdAogICAgIyBjb250ZW50X2lkID0gY29tbWVudC5jb250ZW50X29iamVjdC5pZAoKICAgIGluaXRpYWxfZGF0YSA9IHsKICAgICAgICAiY29udGVudF90eXBlIjogY29tbWVudC5jb250ZW50X3R5cGUsCiAgICAgICAgIm9iamVjdF9pZCI6IGNvbW1lbnQub2JqZWN0X2lkCiAgICB9CgogICAgZm9ybSA9IENvbW1lbnRGb3JtKHJlcXVlc3QuUE9TVCBvciBOb25lLCBpbml0aWFsPWluaXRpYWxfZGF0YSkKICAgICMgcHJpbnQoZGlyKGZvcm0pKQogICAgIyBwcmludChmb3JtLmVycm9ycykKCiAgICBpZiBmb3JtLmlzX3ZhbGlkKCkgYW5kIHJlcXVlc3QudXNlci5pc19hdXRoZW50aWNhdGVkKCk6CiAgICAgICAgY190eXBlID0gZm9ybS5jbGVhbmVkX2RhdGEuZ2V0KCJjb250ZW50X3R5cGUiKQogICAgICAgIGNvbnRlbnRfdHlwZSA9IENvbnRlbnRUeXBlLm9iamVjdHMuZ2V0KG1vZGVsPWNfdHlwZSkKICAgICAgICBvYmplY3RfaWQgPSBmb3JtLmNsZWFuZWRfZGF0YS5nZXQoIm9iamVjdF9pZCIpCiAgICAgICAgbWVzc2FnZSA9IGZvcm0uY2xlYW5lZF9kYXRhLmdldCgibWVzc2FnZSIpCiAgICAgICAgcGFyZW50X29iaiA9IE5vbmUKICAgICAgICB0cnk6CiAgICAgICAgICAgIHBhcmVudF9pZCA9IGludChyZXF1ZXN0LlBPU1QuZ2V0KCJwYXJlbnRfaWQiKSkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHBhcmVudF9pZCA9IE5vbmUKCiAgICAgICAgaWYgcGFyZW50X2lkOgogICAgICAgICAgICBwYXJlbnRfcXMgPSBDb21tZW50Lm9iamVjdHMuZmlsdGVyKGlkPXBhcmVudF9pZCkKICAgICAgICAgICAgaWYgcGFyZW50X3FzLmV4aXN0cygpIGFuZCBwYXJlbnRfcXMuY291bnQoKSA9PSAxIDoKICAgICAgICAgICAgICAgIHBhcmVudF9vYmogPSBwYXJlbnRfcXMuZmlyc3QoKQoKICAgICAgICBuZXdfY29tbWVudCwgY3JlYXRlZCA9IENvbW1lbnQub2JqZWN0cy5nZXRfb3JfY3JlYXRlKAogICAgICAgICAgICAgICAgdXNlciA9IHJlcXVlc3QudXNlciwKICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9IGNvbnRlbnRfdHlwZSwKICAgICAgICAgICAgICAgIG9iamVjdF9pZCA9IG9iamVjdF9pZCwKICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLAogICAgICAgICAgICAgICAgcGFyZW50X2lkID0gcGFyZW50X2lkLAogICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50X29iagogICAgICAgICkKCiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZVJlZGlyZWN0KG5ld19jb21tZW50LmNvbnRlbnRfb2JqZWN0LmdldF9hYnNvbHV0ZV91cmwoKSkKCiAgICBjb250ZXh0ID0gewogICAgICAgICJjb21tZW50IiA6IGNvbW1lbnQsCiAgICAgICAgImNvbW1lbnRfZm9ybSIgOiBmb3JtCiAgICB9CiAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICJjb21tZW50L2NvbW1lbnRfdGhyZWFkLmh0bWwiLCBjb250ZXh0KQoKCkBsb2dpbl9yZXF1aXJlZApkZWYgY29tbWVudF9kZWxldGUocmVxdWVzdCwgaWQpOgogICAgIyBjb21tZW50ID0gZ2V0X29iamVjdF9vcl80MDQoQ29tbWVudCwgaWQ9aWQpCiAgICB0cnk6CiAgICAgICAgY29tbWVudCA9IENvbW1lbnQub2JqZWN0cy5nZXQoaWQ9aWQpCiAgICBleGNlcHQ6CiAgICAgICAgcmFpc2UgSHR0cDQwNAoKICAgIGlmIGNvbW1lbnQudXNlciAhPSByZXF1ZXN0LnVzZXI6CiAgICAgICAgIyBtZXNzYWdlcy5zdWNjZXNzKHJlcXVlc3QsICJZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHZpZXcgdGhpcyIpCiAgICAgICAgIyByYWlzZSBIdHRwNDA0CiAgICAgICAgcmVzcG9uc2UgPSBIdHRwUmVzcG9uc2UoIllvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gdmlldyB0aGlzIikKICAgICAgICByZXNwb25zZS5zdGF0dXNfY29kZSA9IDQwMwogICAgICAgIHJldHVybiByZXNwb25zZQoKPHxmaW1faG9sZXw+CiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZVJlZGlyZWN0KHBhcmVudF9jb21tZW50X3VybCkKICAgIGNvbnRleHQgPSB7CiAgICAgICAgImNvbW1lbnQiIDogY29tbWVudAogICAgfQogICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCAiY29tbWVudC9jb25maXJtX2RlbGV0ZS5odG1sIiwgY29udGV4dCkKPHxmaW1fc3VmZml4fD4KICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICJQT1NUIjoKICAgICAgICBwYXJlbnRfY29tbWVudF91cmwgPSBjb21tZW50LmNvbnRlbnRfb2JqZWN0LmdldF9hYnNvbHV0ZV91cmwoKQogICAgICAgIGNvbW1lbnQuZGVsZXRlKCkKICAgICAgICBtZXNzYWdlcy5zdWNjZXNzKHJlcXVlc3QsICJUaGlzIGhhcyBiZW4gZGVsZXRlZC4iKQo8fGZpbV9lbmR8Pg=="]
["15840fda12b2f777de8d2c43b460f8d9c47acb1c-3","15840fda12b2f777de8d2c43b460f8d9c47acb1c","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgbWVzc2FnZXMKZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLmRlY29yYXRvcnMgaW1wb3J0IGxvZ2luX3JlcXVpcmVkCmZyb20gZGphbmdvLmNvbnRyaWIuY29udGVudHR5cGVzLm1vZGVscyBpbXBvcnQgQ29udGVudFR5cGUKZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlc3BvbnNlUmVkaXJlY3QsIEh0dHA0MDQsIEh0dHBSZXNwb25zZQpmcm9tIGRqYW5nby5zaG9ydGN1dHMgaW1wb3J0IHJlbmRlciwgZ2V0X29iamVjdF9vcl80MDQKZnJvbSAuZm9ybXMgaW1wb3J0IENvbW1lbnRGb3JtCmZyb20gLm1vZGVscyBpbXBvcnQgQ29tbWVudAoKCmRlZiBjb21tZW50X3RocmVhZChyZXF1ZXN0LCBpZCk6CiAgICAjIGNvbW1lbnQgPSBnZXRfb2JqZWN0X29yXzQwNChDb21tZW50LCBpZD1pZCkKICAgIHRyeToKICAgICAgICBjb21tZW50ID0gQ29tbWVudC5vYmplY3RzLmdldChpZD1pZCkKICAgIGV4Y2VwdDoKICAgICAgICByYWlzZSBIdHRwNDA0CiAgICAjIGNvbnRlbnRfb2JqZWN0ID0gY29tbWVudC5jb250ZW50X29iamVjdAogICAgIyBjb250ZW50X2lkID0gY29tbWVudC5jb250ZW50X29iamVjdC5pZAoKICAgIGluaXRpYWxfZGF0YSA9IHsKICAgICAgICAiY29udGVudF90eXBlIjogY29tbWVudC5jb250ZW50X3R5cGUsCiAgICAgICAgIm9iamVjdF9pZCI6IGNvbW1lbnQub2JqZWN0X2lkCiAgICB9CgogICAgZm9ybSA9IENvbW1lbnRGb3JtKHJlcXVlc3QuUE9TVCBvciBOb25lLCBpbml0aWFsPWluaXRpYWxfZGF0YSkKICAgICMgcHJpbnQoZGlyKGZvcm0pKQogICAgIyBwcmludChmb3JtLmVycm9ycykKCiAgICBpZiBmb3JtLmlzX3ZhbGlkKCkgYW5kIHJlcXVlc3QudXNlci5pc19hdXRoZW50aWNhdGVkKCk6CiAgICAgICAgY190eXBlID0gZm9ybS5jbGVhbmVkX2RhdGEuZ2V0KCJjb250ZW50X3R5cGUiKQogICAgICAgIGNvbnRlbnRfdHlwZSA9IENvbnRlbnRUeXBlLm9iamVjdHMuZ2V0KG1vZGVsPWNfdHlwZSkKICAgICAgICBvYmplY3RfaWQgPSBmb3JtLmNsZWFuZWRfZGF0YS5nZXQoIm9iamVjdF9pZCIpCiAgICAgICAgbWVzc2FnZSA9IGZvcm0uY2xlYW5lZF9kYXRhLmdldCgibWVzc2FnZSIpCiAgICAgICAgcGFyZW50X29iaiA9IE5vbmUKICAgICAgICB0cnk6CiAgICAgICAgICAgIHBhcmVudF9pZCA9IGludChyZXF1ZXN0LlBPU1QuZ2V0KCJwYXJlbnRfaWQiKSkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHBhcmVudF9pZCA9IE5vbmUKCiAgICAgICAgaWYgcGFyZW50X2lkOgogICAgICAgICAgICBwYXJlbnRfcXMgPSBDb21tZW50Lm9iamVjdHMuZmlsdGVyKGlkPXBhcmVudF9pZCkKICAgICAgICAgICAgaWYgcGFyZW50X3FzLmV4aXN0cygpIGFuZCBwYXJlbnRfcXMuY291bnQoKSA9PSAxIDoKICAgICAgICAgICAgICAgIHBhcmVudF9vYmogPSBwYXJlbnRfcXMuZmlyc3QoKQoKICAgICAgICBuZXdfY29tbWVudCwgY3JlYXRlZCA9IENvbW1lbnQub2JqZWN0cy5nZXRfb3JfY3JlYXRlKAogICAgICAgICAgICAgICAgdXNlciA9IHJlcXVlc3QudXNlciwKICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9IGNvbnRlbnRfdHlwZSwKICAgICAgICAgICAgICAgIG9iamVjdF9pZCA9IG9iamVjdF9pZCwKICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLAogICAgICAgICAgICAgICAgcGFyZW50X2lkID0gcGFyZW50X2lkLAogICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50X29iagogICAgICAgICkKCiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZVJlZGlyZWN0KG5ld19jb21tZW50LmNvbnRlbnRfb2JqZWN0LmdldF9hYnNvbHV0ZV91cmwoKSkKCiAgICBjb250ZXh0ID0gewogICAgICAgICJjb21tZW50IiA6IGNvbW1lbnQsCiAgICAgICAgImNvbW1lbnRfZm9ybSIgOiBmb3JtCiAgICB9CiAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICJjb21tZW50L2NvbW1lbnRfdGhyZWFkLmh0bWwiLCBjb250ZXh0KQoKCkBsb2dpbl9yZXF1aXJlZApkZWYgY29tbWVudF9kZWxldGUocmVxdWVzdCwgaWQpOgogICAgIyBjb21tZW50ID0gZ2V0X29iamVjdF9vcl80MDQoQ29tbWVudCwgaWQ9aWQpCiAgICB0cnk6CiAgICAgICAgY29tbWVudCA9IENvbW1lbnQub2JqZWN0cy5nZXQoaWQ9aWQpCiAgICBleGNlcHQ6CiAgICAgICAgcmFpc2UgSHR0cDQwNAoKICAgIGlmIGNvbW1lbnQudXNlciAhPSByZXF1ZXN0LnVzZXI6CiAgICAgICAgIyBtZXNzYWdlcy5zdWNjZXNzKHJlcXVlc3QsICJZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHZpZXcgdGhpcyIpCiAgICAgICAgIyByYWlzZSBIdHRwNDA0CiAgICAgICAgcmVzcG9uc2UgPSBIdHRwUmVzcG9uc2UoIllvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gdmlldyB0aGlzIikKICAgICAgICByZXNwb25zZS5zdGF0dXNfY29kZSA9IDQwMwogICAgICAgIHJldHVybiByZXNwb25zZQoKICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICJQT1NUIjoKICAgICAgICBwYXJlbnRfY29tbWVudF91cmwgPSBjb21tZW50LmNvbnRlbnRfb2JqZWN0LmdldF9hYnNvbHV0ZV91cmwoKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgY29tbWVudC5kZWxldGUoKQogICAgICAgIG1lc3NhZ2VzLnN1Y2Nlc3MocmVxdWVzdCwgIlRoaXMgaGFzIGJlbiBkZWxldGVkLiIpCiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZVJlZGlyZWN0KHBhcmVudF9jb21tZW50X3VybCkKPHxmaW1fZW5kfD4="]
["15840fda12b2f777de8d2c43b460f8d9c47acb1c-4","15840fda12b2f777de8d2c43b460f8d9c47acb1c","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgbWVzc2FnZXMKZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLmRlY29yYXRvcnMgaW1wb3J0IGxvZ2luX3JlcXVpcmVkCmZyb20gZGphbmdvLmNvbnRyaWIuY29udGVudHR5cGVzLm1vZGVscyBpbXBvcnQgQ29udGVudFR5cGUKZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlc3BvbnNlUmVkaXJlY3QsIEh0dHA0MDQsIEh0dHBSZXNwb25zZQpmcm9tIGRqYW5nby5zaG9ydGN1dHMgaW1wb3J0IHJlbmRlciwgZ2V0X29iamVjdF9vcl80MDQKZnJvbSAuZm9ybXMgaW1wb3J0IENvbW1lbnRGb3JtCmZyb20gLm1vZGVscyBpbXBvcnQgQ29tbWVudAoKCmRlZiBjb21tZW50X3RocmVhZChyZXF1ZXN0LCBpZCk6CiAgICAjIGNvbW1lbnQgPSBnZXRfb2JqZWN0X29yXzQwNChDb21tZW50LCBpZD1pZCkKICAgIHRyeToKICAgICAgICBjb21tZW50ID0gQ29tbWVudC5vYmplY3RzLmdldChpZD1pZCkKICAgIGV4Y2VwdDoKICAgICAgICByYWlzZSBIdHRwNDA0CiAgICAjIGNvbnRlbnRfb2JqZWN0ID0gY29tbWVudC5jb250ZW50X29iamVjdAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAjIGNvbnRlbnRfaWQgPSBjb21tZW50LmNvbnRlbnRfb2JqZWN0LmlkCgogICAgaW5pdGlhbF9kYXRhID0gewogICAgICAgICJjb250ZW50X3R5cGUiOiBjb21tZW50LmNvbnRlbnRfdHlwZSwKPHxmaW1fZW5kfD4="]
["c11133bbbf6fd45d23e74b934dec155b386e966a-1","c11133bbbf6fd45d23e74b934dec155b386e966a","PHxmaW1fcHJlZml4fD4KIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUZMLTMuMAoKaW1wb3J0IG9zCmltcG9ydCBzeXMKCnN5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpKQppbXBvcnQgdmlzCmltcG9ydCBpbnNwZWN0CgpnZGIgPSBfX2ltcG9ydF9fKCJnZGIiKQpwcmludGVycyA9IHt9CgoKZGVmIHJlZ2lzdGVyX3ByaW50ZXJzKG9iamZpbGUpOgogICAgZ2xvYmFsIHByaW50ZXJzCiAgICBwcmludGVycyA9IHZpcy5yZWdpc3RlcigpCiAgICBnZGIucHJpbnRpbmcucmVnaXN0ZXJfcHJldHR5X3ByaW50ZXIob2JqZmlsZSwgR0RCVmFsdWVQcmludGVyLmZhY3RvcnkpCgoKZGVmIGxvb2t1cCh2YWxvYmopOgogICAgZnJvbSB2aXNfbGliIGltcG9ydCBwYXJzZV90ZW1wbGF0ZV9hcmdzCgogICAgdmFsX3R5cGUgPSB2YWxvYmoudHlwZQogICAgbG9va3VwX3RhZyA9IHZhbF90eXBlLnRhZwogICAgaWYgbm90IGxvb2t1cF90YWc6CiAgICAgICAgcmV0dXJuIE5vbmUKICAgIHRlbXBsYXRlX2FyZ3MgPSBsaXN0KHBhcnNlX3RlbXBsYXRlX2FyZ3MobG9va3VwX3RhZykpCiAgICBpZiBsZW4odGVtcGxhdGVfYXJncyk6CiAgICAgICAgbG9va3VwX3RhZyA9IGxvb2t1cF90YWdbOmxvb2t1cF90YWcuZmluZCgiPCIpXQogICAgcHJpbnRlciA9IHByaW50ZXJzLmdldChsb29rdXBfdGFnKQoKICAgIGRlZiBnZW5hcmdzKCk6CiAgICAgICAgaSA9IDAKICAgICAgICBuID0gbGVuKHRlbXBsYXRlX2FyZ3MpCiAgICAgICAgd2hpbGUgaSA8IG46CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIGFyZyA9IHZhbF90eXBlLnRlbXBsYXRlX2FyZ3VtZW50KGkpCiAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgIGFyZyA9IGdkYi5sb29rdXBfdHlwZSh0ZW1wbGF0ZV9hcmdzW2ldKQogICAgICAgICAgICBpc2ludGVncmFsID0gbm90IGlzaW5zdGFuY2UoYXJnLCBnZGIuVHlwZSkKICAgICAgICAgICAgaSArPSAxCiAgICAgICAgICAgIHlpZWxkIHsKICAgICAgICAgICAgICAgICJrZXkiOiBhcmcudGFnIGlmIG5vdCBpc2ludGVncmFsIGVsc2UgRmFsc2UsCiAgICAgICAgICAgICAgICAidmFsIjogVHlwZShhcmcpIGlmIG5vdCBpc2ludGVncmFsIGVsc2UgYXJnLAogICAgICAgICAgICB9CgogICAgYXJncyA9IGxpc3QoZ2VuYXJncygpKQogICAgaSA9IDAKICAgIHdoaWxlIGlzaW5zdGFuY2UocHJpbnRlciwgZGljdCk6CiAgICAgICAgYXJnID0gYXJnc1tpXQogICAgICAgIGkgKz0gMQogICAgICAgIGR5biA9IHByaW50ZXIuZ2V0KE5vbmUpCiAgICAgICAgdmFyYXJncyA9IG1hcChsYW1iZGEgaXQ6IGl0WyJ2YWwiXSwgYXJnc1tpOl0pIGlmIGR5biBhbmQgaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyhkeW4pLnZhcmFyZ3MgZWxzZSBbXQogICAgICAgIHByaW50ZXIgPSBwcmludGVyLmdldChhcmdbImtleSJdKSBvciBkeW4oYXJnWyJ2YWwiXSwgKnZhcmFyZ3MpCiAgICByZXR1cm4gcHJpbnRlcgoKCmNsYXNzIFR5cGU6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZ2RidHlwZSk6CiAgICAgICAgc2VsZi5nZGJ0eXBlID0gZ2RidHlwZQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmdkYnR5cGUubmFtZQoKCmNsYXNzIFZhbHVlOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGdkYnZhbHVlKToKICAgICAgICBzZWxmLmdkYnZhbHVlID0gZ2RidmFsdWUKCiAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaXRlbSk6CiAgICAgICAgcmV0dXJuIFZhbHVlKHNlbGYuZ2RidmFsdWUuX19nZXRpdGVtX18oaXRlbSkpCgogICAgZGVmIF9faW5kZXhfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5nZGJ2YWx1ZS5fX2luZGV4X18oKQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmdkYnZhbHVlLl9fc3RyX18oKQoKICAgIGRlZiBjYXN0KHNlbGYsIHQpOgogICAgICAgIHJldHVybiBWYWx1ZShzZWxmLmdkYnZhbHVlLmNhc3QodC5nZGJ0eXBlKSkKCiAgICBkZWYgY2hpbGQoc2VsZiwgaSk6CiAgICAgICAgZmxkID0gc2VsZi5nZGJ2YWx1ZS50eXBlLmZpZWxkcygpW2ldCiAgICAgICAgcmV0dXJuIFZhbHVlKHNlbGYuZ2RidmFsdWVbZmxkXSkKCgpjbGFzcyBHREJWYWx1ZVByaW50ZXI6CiAgICAiIiIKICAgIGh0dHBzOi8vc291cmNld2FyZS5vcmcvZ2RiL29ubGluZWRvY3MvZ2RiL1ByZXR0eS1QcmludGluZy1BUEkuaHRtbCNQcmV0dHktUHJpbnRpbmctQVBJCiAgICBodHRwczovL3NvdXJjZXdhcmUub3JnL2dkYi9vbmxpbmVkb2NzL2dkYi9UeXBlcy1Jbi1QeXRob24uaHRtbCNUeXBlcy1Jbi1QeXRob24KICAgIGh0dHBzOi8vc291cmNld2FyZS5vcmcvZ2RiL29ubGluZWRvY3MvZ2RiL1ZhbHVlcy1Gcm9tLUluZmVyaW9yLmh0bWwjVmFsdWVzLUZyb20tSW5mZXJpb3IKICAgICIiIgoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGZhY3RvcnkoY2xzLCB2YWwpOgogICAgICAgIHByaW50ZXIgPSBsb29rdXAodmFsKQogICAgICAgIGlmIG5vdCBwcmludGVyOgogICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgIHJldHVybiBHREJWYWx1ZVByaW50ZXIocHJpbnRlciwgdmFsKQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcmludGVyLCB2YWwpOgogICAgICAgIHNlbGYucHJpbnRlciA9IHByaW50ZXIKICAgICAgICBzZWxmLnZhbCA9IHZhbAoKICAgICAgICBkZWYgYmluZChrLCBmLCB0cmFuc2Zvcm09bGFtYmRhIGl0OiBpdCk6CiAgICAgICAgICAgIGlmIGdldGF0dHIoZiwgIl9faXNhYnN0cmFjdG1ldGhvZF9fIiwgRmFsc2UpOgogICAgICAgICAgICAgICAgcmV0dXJuCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGRlZiBtZXRob2QoKToKICAgICAgICAgICAgICAgIHByaW50ZXIudXBkYXRlKFZhbHVlKHNlbGYudmFsKSkKICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm0oZigpKQoKPHxmaW1fZW5kfD4="]
["4161b36cdb7dff2300933f8fdb2b2685e4fe29e8-1","4161b36cdb7dff2300933f8fdb2b2685e4fe29e8","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHFyY29kZQppbXBvcnQgbnVtcHkgYXMgbnAKIyBkYXRhIHRvIGVuY29kZQpkYXRhID0gImh0dHBzOi8vd3d3LnRoZXB5dGhvbmNvZGUuY29tIgo8fGZpbV9ob2xlfD4KcXIuYWRkX2RhdGEoZGF0YSkKIyBjb21waWxlIHRoZSBkYXRhIGludG8gYSBRUiBjb2RlIGFycmF5CnFyLm1ha2UoKQojIHByaW50IHRoZSBpbWFnZSBzaGFwZQpwcmludCgiVGhlIHNoYXBlIG9mIHRoZSBRUiBpbWFnZToiLCBucC5hcnJheShxci5nZXRfbWF0cml4KCkpLnNoYXBlKQojIHRyYW5zZmVyIHRoZSBhcnJheSBpbnRvIGFuIGFjdHVhbCBpbWFnZQppbWcgPSBxci5tYWtlX2ltYWdlKGZpbGxfY29sb3I9IndoaXRlIiwgYmFja19jb2xvcj0iYmxhY2siKQojIHNhdmUgaXQgdG8gYSBmaWxlCmltZy5zYXZlKCJzaXRlX2ludmVyc2VkLnBuZyIpCjx8ZmltX3N1ZmZpeHw+CgojIGluc3RhbnRpYXRlIFFSQ29kZSBvYmplY3QKcXIgPSBxcmNvZGUuUVJDb2RlKHZlcnNpb249MSwgYm94X3NpemU9MTAsIGJvcmRlcj00KQojIGFkZCBkYXRhIHRvIHRoZSBRUiBjb2RlCjx8ZmltX2VuZHw+"]
["4161b36cdb7dff2300933f8fdb2b2685e4fe29e8-2","4161b36cdb7dff2300933f8fdb2b2685e4fe29e8","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHFyY29kZQppbXBvcnQgbnVtcHkgYXMgbnAKIyBkYXRhIHRvIGVuY29kZQpkYXRhID0gImh0dHBzOi8vd3d3LnRoZXB5dGhvbmNvZGUuY29tIgoKIyBpbnN0YW50aWF0ZSBRUkNvZGUgb2JqZWN0CnFyID0gcXJjb2RlLlFSQ29kZSh2ZXJzaW9uPTEsIGJveF9zaXplPTEwLCBib3JkZXI9NCkKIyBhZGQgZGF0YSB0byB0aGUgUVIgY29kZQo8fGZpbV9ob2xlfD4KcHJpbnQoIlRoZSBzaGFwZSBvZiB0aGUgUVIgaW1hZ2U6IiwgbnAuYXJyYXkocXIuZ2V0X21hdHJpeCgpKS5zaGFwZSkKIyB0cmFuc2ZlciB0aGUgYXJyYXkgaW50byBhbiBhY3R1YWwgaW1hZ2UKaW1nID0gcXIubWFrZV9pbWFnZShmaWxsX2NvbG9yPSJ3aGl0ZSIsIGJhY2tfY29sb3I9ImJsYWNrIikKIyBzYXZlIGl0IHRvIGEgZmlsZQppbWcuc2F2ZSgic2l0ZV9pbnZlcnNlZC5wbmciKQo8fGZpbV9zdWZmaXh8Pgpxci5hZGRfZGF0YShkYXRhKQojIGNvbXBpbGUgdGhlIGRhdGEgaW50byBhIFFSIGNvZGUgYXJyYXkKcXIubWFrZSgpCiMgcHJpbnQgdGhlIGltYWdlIHNoYXBlCjx8ZmltX2VuZHw+"]
["e554f42d3800a60feb2352864653b670b11eda04-1","e554f42d3800a60feb2352864653b670b11eda04","PHxmaW1fcHJlZml4fD4KY2xhc3MgTWlzc2lvbjoKICAgIHBsYXllcnNNID0gW10gIyBwbGF5ZXJzTSByZXByZXNlbnRzIG9ubHkgcGxheWVycyBjdXJyZW50bHkgaW4gbWlzc2lvbgogICAgbnVtX3BsYXlpbmcgPSAwCiAgICBmYWlsc19yZXEgPSAwCiAgICBvdXRjb21lID0gTm9uZSAjIHN1Y2NlZWRlZCA9IFRydWUsIGZhaWxlZCA9IEZhbHNlCiAgICB0ZWFtX2xlYWRlciA9ICcnCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHBsYXllcnNNLCBmYWlsc19yZXEsIHRlYW1fbGVhZGVyKToKICAgICAgICBzZWxmLnBsYXllcnNNID0gcGxheWVyc00KPHxmaW1faG9sZXw+CiAgICBkZWYgZGV0ZXJtaW5lT3V0Y29tZShzZWxmKToKICAgICAgICBmYWlscyA9IDAKICAgICAgICBmb3IgcGxheWVyIGluIHNlbGYucGxheWVyc006CiAgICAgICAgICAgIGZhaWxzICs9IHBsYXllci5taXNzaW9uVm90ZQogICAgICAgIGlmIGZhaWxzID49IHNlbGYuZmFpbHNfcmVxOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gVHJ1ZQoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmZhaWxzX3JlcSA9IGZhaWxzX3JlcQogICAgICAgIHNlbGYudGVhbV9sZWFkZXIgPSB0ZWFtX2xlYWRlcgogICAgICAgIHNlbGYub3V0Y29tZSA9IHNlbGYuZGV0ZXJtaW5lT3V0Y29tZSgpCgo8fGZpbV9lbmR8Pg=="]
["e554f42d3800a60feb2352864653b670b11eda04-2","e554f42d3800a60feb2352864653b670b11eda04","PHxmaW1fcHJlZml4fD4KY2xhc3MgTWlzc2lvbjoKICAgIHBsYXllcnNNID0gW10gIyBwbGF5ZXJzTSByZXByZXNlbnRzIG9ubHkgcGxheWVycyBjdXJyZW50bHkgaW4gbWlzc2lvbgogICAgbnVtX3BsYXlpbmcgPSAwCiAgICBmYWlsc19yZXEgPSAwCiAgICBvdXRjb21lID0gTm9uZSAjIHN1Y2NlZWRlZCA9IFRydWUsIGZhaWxlZCA9IEZhbHNlCiAgICB0ZWFtX2xlYWRlciA9ICcnCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHBsYXllcnNNLCBmYWlsc19yZXEsIHRlYW1fbGVhZGVyKToKICAgICAgICBzZWxmLnBsYXllcnNNID0gcGxheWVyc00KICAgICAgICBzZWxmLmZhaWxzX3JlcSA9IGZhaWxzX3JlcQogICAgICAgIHNlbGYudGVhbV9sZWFkZXIgPSB0ZWFtX2xlYWRlcgogICAgICAgIHNlbGYub3V0Y29tZSA9IHNlbGYuZGV0ZXJtaW5lT3V0Y29tZSgpCgogICAgZGVmIGRldGVybWluZU91dGNvbWUoc2VsZik6CiAgICAgICAgZmFpbHMgPSAwCiAgICAgICAgZm9yIHBsYXllciBpbiBzZWxmLnBsYXllcnNNOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGZhaWxzICs9IHBsYXllci5taXNzaW9uVm90ZQo8fGZpbV9lbmR8Pg=="]
["e554f42d3800a60feb2352864653b670b11eda04-3","e554f42d3800a60feb2352864653b670b11eda04","PHxmaW1fcHJlZml4fD4KY2xhc3MgTWlzc2lvbjoKICAgIHBsYXllcnNNID0gW10gIyBwbGF5ZXJzTSByZXByZXNlbnRzIG9ubHkgcGxheWVycyBjdXJyZW50bHkgaW4gbWlzc2lvbgogICAgbnVtX3BsYXlpbmcgPSAwCiAgICBmYWlsc19yZXEgPSAwCiAgICBvdXRjb21lID0gTm9uZSAjIHN1Y2NlZWRlZCA9IFRydWUsIGZhaWxlZCA9IEZhbHNlCiAgICB0ZWFtX2xlYWRlciA9ICcnCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHBsYXllcnNNLCBmYWlsc19yZXEsIHRlYW1fbGVhZGVyKToKICAgICAgICBzZWxmLnBsYXllcnNNID0gcGxheWVyc00KICAgICAgICBzZWxmLmZhaWxzX3JlcSA9IGZhaWxzX3JlcQogICAgICAgIHNlbGYudGVhbV9sZWFkZXIgPSB0ZWFtX2xlYWRlcgogICAgICAgIHNlbGYub3V0Y29tZSA9IHNlbGYuZGV0ZXJtaW5lT3V0Y29tZSgpCgogICAgZGVmIGRldGVybWluZU91dGNvbWUoc2VsZik6Cjx8ZmltX2hvbGV8PgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gVHJ1ZQoKPHxmaW1fc3VmZml4fD4KICAgICAgICBmYWlscyA9IDAKICAgICAgICBmb3IgcGxheWVyIGluIHNlbGYucGxheWVyc006CiAgICAgICAgICAgIGZhaWxzICs9IHBsYXllci5taXNzaW9uVm90ZQogICAgICAgIGlmIGZhaWxzID49IHNlbGYuZmFpbHNfcmVxOgo8fGZpbV9lbmR8Pg=="]
["e554f42d3800a60feb2352864653b670b11eda04-4","e554f42d3800a60feb2352864653b670b11eda04","PHxmaW1fcHJlZml4fD4KY2xhc3MgTWlzc2lvbjoKICAgIHBsYXllcnNNID0gW10gIyBwbGF5ZXJzTSByZXByZXNlbnRzIG9ubHkgcGxheWVycyBjdXJyZW50bHkgaW4gbWlzc2lvbgogICAgbnVtX3BsYXlpbmcgPSAwCiAgICBmYWlsc19yZXEgPSAwCiAgICBvdXRjb21lID0gTm9uZSAjIHN1Y2NlZWRlZCA9IFRydWUsIGZhaWxlZCA9IEZhbHNlCiAgICB0ZWFtX2xlYWRlciA9ICcnCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHBsYXllcnNNLCBmYWlsc19yZXEsIHRlYW1fbGVhZGVyKToKICAgICAgICBzZWxmLnBsYXllcnNNID0gcGxheWVyc00KICAgICAgICBzZWxmLmZhaWxzX3JlcSA9IGZhaWxzX3JlcQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi50ZWFtX2xlYWRlciA9IHRlYW1fbGVhZGVyCiAgICAgICAgc2VsZi5vdXRjb21lID0gc2VsZi5kZXRlcm1pbmVPdXRjb21lKCkKCjx8ZmltX2VuZHw+"]
["82178ea577ae3c8a882b9f94d58b9968bb6f5cb9-1","82178ea577ae3c8a882b9f94d58b9968bb6f5cb9","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IG9zCmltcG9ydCBzeXMKaW1wb3J0IGhhc2hsaWIKaW1wb3J0IGdsb2IKaW1wb3J0IGpzb24KaW1wb3J0IGRhdGV0aW1lCgppZiAnTUlOSVRFU1RTJyBpbiBvcy5lbnZpcm9uOgogIHN5cy5leGl0KDApCgpyb290ID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicpCgp3ZWJwYWNrID0gb3MucGF0aC5qb2luKHJvb3QsICdidWlsZC9jb250ZW50L3dlYnBhY2suanMnKQpsb2FkZXIgPSAnJwp3cmFwcGVkID0gTm9uZQpwcmVmaXggPSAiaWYgKCFab3Rlcm8uV2ViUGFja2VkQmV0dGVyQmliVGVYKSB7XG5cbiIKcG9zdGZpeCA9ICJcblxufVxuIgoKd2l0aCBvcGVuKHdlYnBhY2spIGFzIGY6CiAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKICAgIGlmIHdyYXBwZWQgaXMgTm9uZToKICAgICAgd3JhcHBlZCA9IChsaW5lLnN0cmlwKCkgPT0gcHJlZml4LnN0cmlwKCkpCiAgICAgIGlmIG5vdCB3cmFwcGVkOiBsb2FkZXIgPSBwcmVmaXgKICAgIGxvYWRlciArPSBsaW5lCiAgaWYgbm90IHdyYXBwZWQ6IGxvYWRlciArPSBwb3N0Zml4Cgp3aXRoIG9wZW4od2VicGFjaywgJ3cnKSBhcyBmOgogIGYud3JpdGUobG9hZGVyKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpsYXN0VXBkYXRlZCA9IGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLmlzb2Zvcm1hdCgpLnJlcGxhY2UoJ1QnLCAnICcpLnNwbGl0KCcuJylbMF0KCmZvciBoZWFkZXIgaW4gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihyb290LCAndHJhbnNsYXRvcnMnLCAnKi5qc29uJykpOgo8fGZpbV9lbmR8Pg=="]
["c1baa41e8445164ea139276ffff5a42ff7618b5b-1","c1baa41e8445164ea139276ffff5a42ff7618b5b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKaW1wb3J0IHRvcmNoCmltcG9ydCBsb2dnaW5nCmltcG9ydCBmdW5jdG9vbHMKaW1wb3J0IHNjaG5ldHBhY2sgYXMgc3BrCmZyb20gYXNlLmRhdGEgaW1wb3J0IGF0b21pY19udW1iZXJzCmltcG9ydCB0b3JjaC5ubiBhcyBubgpmcm9tIHRvcmNoLm5uIGltcG9ydCBmdW5jdGlvbmFsIGFzIEYKZnJvbSB0b3JjaC5ubi5pbml0IGltcG9ydCBub3JtYWxfLCB1bmlmb3JtXywgb25lc18sIHplcm9zXywgeGF2aWVyX3VuaWZvcm1fLCB4YXZpZXJfbm9ybWFsXywgX25vX2dyYWRfdW5pZm9ybV8sIFwKICAgIF9ub19ncmFkX25vcm1hbF8sIF9jYWxjdWxhdGVfZmFuX2luX2FuZF9mYW5fb3V0CmltcG9ydCB0b3JjaC5kaXN0cmlidXRpb25zIGFzIHRkaXN0CgpfX2FsbF9fID0gWyJnZXRfcmVwcmVzZW50YXRpb24iLCAiZ2V0X291dHB1dF9tb2R1bGUiLCAiZ2V0X21vZGVsIl0KCgpkZWYgX25vX2dyYWRfYmVybm91bGxpXyh0ZW5zb3IpOgogICAgd2l0aCB0b3JjaC5ub19ncmFkKCk6CiAgICAgICAgcmV0dXJuIHRlbnNvci5iZXJub3VsbGlfKCkKCgpkZWYgYmVybm91bGxpKHRlbnNvcik6CiAgICByZXR1cm4gX25vX2dyYWRfYmVybm91bGxpXyh0ZW5zb3IpCgoKZGVmIF9ub19ncmFkX2JldGFfKGJldGExLCBiZXRhMiwgdGVuc29yKToKICAgIHdpdGggdG9yY2gubm9fZ3JhZCgpOgogICAgICAgIGJldGFfZGlzdCA9IHRkaXN0LkJldGEodG9yY2gudGVuc29yKFtiZXRhMV0pLCB0b3JjaC50ZW5zb3IoW2JldGEyXSkpCiAgICAgICAgdGVuc29yLmRhdGEgPSBiZXRhX2Rpc3Quc2FtcGxlKHRlbnNvci5zaGFwZSkuc3F1ZWV6ZSgtMSkuY2xvbmUoKQogICAgICAgIHJldHVybiB0ZW5zb3IKCgpkZWYgYmV0YShiZXRhMSwgYmV0YTIsIHRlbnNvcik6CiAgICByZXR1cm4gX25vX2dyYWRfYmV0YV8oYmV0YTEsIGJldGEyLCB0ZW5zb3IpCgoKZGVmIGJldGFfYXJncyhhcmdzKToKICAgIHJldHVybiBmdW5jdG9vbHMucGFydGlhbChiZXRhLCBhcmdzLmJldGFfYXJnc1swXSwgYXJncy5iZXRhX2FyZ3NbMV0pCgoKZGVmIGthaW1pbmdfbm9ybWFsKHRlbnNvcik6CiAgICBmYW5faW4sIF8gPSBfY2FsY3VsYXRlX2Zhbl9pbl9hbmRfZmFuX291dCh0ZW5zb3IpCiAgICBzdGQgPSBtYXRoLnNxcnQoMi4wIC8gZmxvYXQoZmFuX2luKSkKCiAgICByZXR1cm4gX25vX2dyYWRfbm9ybWFsXyh0ZW5zb3IsIDAuLCBzdGQpCgoKZGVmIGthaW1pbmdfdW5pZm9ybSh0ZW5zb3IpOgogICAgZmFuX2luLCBfID0gX2NhbGN1bGF0ZV9mYW5faW5fYW5kX2Zhbl9vdXQodGVuc29yKQogICAgc3RkID0gbWF0aC5zcXJ0KDIuMCAvIGZsb2F0KGZhbl9pbikpCiAgICBhID0gbWF0aC5zcXJ0KDMuMCkgKiBzdGQgICMgQ2FsY3VsYXRlIHVuaWZvcm0gYm91bmRzIGZyb20gc3RhbmRhcmQgZGV2aWF0aW9uCgogICAgcmV0dXJuIF9ub19ncmFkX3VuaWZvcm1fKHRlbnNvciwgLWEsIGEpCgoKZGVmIGxlY3VuX25vcm1hbCh0ZW5zb3IpOgogICAgZmFuX2luLCBfID0gX2NhbGN1bGF0ZV9mYW5faW5fYW5kX2Zhbl9vdXQodGVuc29yKQogICAgc3RkID0gbWF0aC5zcXJ0KDEuMCAvIGZsb2F0KGZhbl9pbikpCgogICAgcmV0dXJuIF9ub19ncmFkX25vcm1hbF8odGVuc29yLCAwLiwgc3RkKQoKCmRlZiBsZWN1bl91bmlmb3JtKHRlbnNvcik6CiAgICBmYW5faW4sIF8gPSBfY2FsY3VsYXRlX2Zhbl9pbl9hbmRfZmFuX291dCh0ZW5zb3IpCiAgICBzdGQgPSBtYXRoLnNxcnQoMS4wIC8gZmxvYXQoZmFuX2luKSkKICAgIGEgPSBtYXRoLnNxcnQoMy4wKSAqIHN0ZCAgIyBDYWxjdWxhdGUgdW5pZm9ybSBib3VuZHMgZnJvbSBzdGFuZGFyZCBkZXZpYXRpb24KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHJldHVybiBfbm9fZ3JhZF91bmlmb3JtXyh0ZW5zb3IsIC1hLCBhKQoKCjx8ZmltX2VuZHw+"]
["c1baa41e8445164ea139276ffff5a42ff7618b5b-2","c1baa41e8445164ea139276ffff5a42ff7618b5b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKaW1wb3J0IHRvcmNoCmltcG9ydCBsb2dnaW5nCmltcG9ydCBmdW5jdG9vbHMKaW1wb3J0IHNjaG5ldHBhY2sgYXMgc3BrCmZyb20gYXNlLmRhdGEgaW1wb3J0IGF0b21pY19udW1iZXJzCmltcG9ydCB0b3JjaC5ubiBhcyBubgpmcm9tIHRvcmNoLm5uIGltcG9ydCBmdW5jdGlvbmFsIGFzIEYKZnJvbSB0b3JjaC5ubi5pbml0IGltcG9ydCBub3JtYWxfLCB1bmlmb3JtXywgb25lc18sIHplcm9zXywgeGF2aWVyX3VuaWZvcm1fLCB4YXZpZXJfbm9ybWFsXywgX25vX2dyYWRfdW5pZm9ybV8sIFwKICAgIF9ub19ncmFkX25vcm1hbF8sIF9jYWxjdWxhdGVfZmFuX2luX2FuZF9mYW5fb3V0CmltcG9ydCB0b3JjaC5kaXN0cmlidXRpb25zIGFzIHRkaXN0CgpfX2FsbF9fID0gWyJnZXRfcmVwcmVzZW50YXRpb24iLCAiZ2V0X291dHB1dF9tb2R1bGUiLCAiZ2V0X21vZGVsIl0KCgpkZWYgX25vX2dyYWRfYmVybm91bGxpXyh0ZW5zb3IpOgogICAgd2l0aCB0b3JjaC5ub19ncmFkKCk6CiAgICAgICAgcmV0dXJuIHRlbnNvci5iZXJub3VsbGlfKCkKCgpkZWYgYmVybm91bGxpKHRlbnNvcik6CiAgICByZXR1cm4gX25vX2dyYWRfYmVybm91bGxpXyh0ZW5zb3IpCgoKZGVmIF9ub19ncmFkX2JldGFfKGJldGExLCBiZXRhMiwgdGVuc29yKToKICAgIHdpdGggdG9yY2gubm9fZ3JhZCgpOgogICAgICAgIGJldGFfZGlzdCA9IHRkaXN0LkJldGEodG9yY2gudGVuc29yKFtiZXRhMV0pLCB0b3JjaC50ZW5zb3IoW2JldGEyXSkpCiAgICAgICAgdGVuc29yLmRhdGEgPSBiZXRhX2Rpc3Quc2FtcGxlKHRlbnNvci5zaGFwZSkuc3F1ZWV6ZSgtMSkuY2xvbmUoKQogICAgICAgIHJldHVybiB0ZW5zb3IKCgpkZWYgYmV0YShiZXRhMSwgYmV0YTIsIHRlbnNvcik6CiAgICByZXR1cm4gX25vX2dyYWRfYmV0YV8oYmV0YTEsIGJldGEyLCB0ZW5zb3IpCgoKZGVmIGJldGFfYXJncyhhcmdzKToKICAgIHJldHVybiBmdW5jdG9vbHMucGFydGlhbChiZXRhLCBhcmdzLmJldGFfYXJnc1swXSwgYXJncy5iZXRhX2FyZ3NbMV0pCgoKZGVmIGthaW1pbmdfbm9ybWFsKHRlbnNvcik6CiAgICBmYW5faW4sIF8gPSBfY2FsY3VsYXRlX2Zhbl9pbl9hbmRfZmFuX291dCh0ZW5zb3IpCiAgICBzdGQgPSBtYXRoLnNxcnQoMi4wIC8gZmxvYXQoZmFuX2luKSkKCiAgICByZXR1cm4gX25vX2dyYWRfbm9ybWFsXyh0ZW5zb3IsIDAuLCBzdGQpCgoKZGVmIGthaW1pbmdfdW5pZm9ybSh0ZW5zb3IpOgogICAgZmFuX2luLCBfID0gX2NhbGN1bGF0ZV9mYW5faW5fYW5kX2Zhbl9vdXQodGVuc29yKQogICAgc3RkID0gbWF0aC5zcXJ0KDIuMCAvIGZsb2F0KGZhbl9pbikpCiAgICBhID0gbWF0aC5zcXJ0KDMuMCkgKiBzdGQgICMgQ2FsY3VsYXRlIHVuaWZvcm0gYm91bmRzIGZyb20gc3RhbmRhcmQgZGV2aWF0aW9uCgogICAgcmV0dXJuIF9ub19ncmFkX3VuaWZvcm1fKHRlbnNvciwgLWEsIGEpCgoKZGVmIGxlY3VuX25vcm1hbCh0ZW5zb3IpOgogICAgZmFuX2luLCBfID0gX2NhbGN1bGF0ZV9mYW5faW5fYW5kX2Zhbl9vdXQodGVuc29yKQogICAgc3RkID0gbWF0aC5zcXJ0KDEuMCAvIGZsb2F0KGZhbl9pbikpCgogICAgcmV0dXJuIF9ub19ncmFkX25vcm1hbF8odGVuc29yLCAwLiwgc3RkKQoKCmRlZiBsZWN1bl91bmlmb3JtKHRlbnNvcik6CiAgICBmYW5faW4sIF8gPSBfY2FsY3VsYXRlX2Zhbl9pbl9hbmRfZmFuX291dCh0ZW5zb3IpCiAgICBzdGQgPSBtYXRoLnNxcnQoMS4wIC8gZmxvYXQoZmFuX2luKSkKICAgIGEgPSBtYXRoLnNxcnQoMy4wKSAqIHN0ZCAgIyBDYWxjdWxhdGUgdW5pZm9ybSBib3VuZHMgZnJvbSBzdGFuZGFyZCBkZXZpYXRpb24KCiAgICByZXR1cm4gX25vX2dyYWRfdW5pZm9ybV8odGVuc29yLCAtYSwgYSkKCgpkZWYgdHJ1bmNhdGVkX25vcm1hbF8odGVuc29yLCBtZWFuPTAsIHN0ZD0wLjA1KToKICAgIHNpemUgPSB0ZW5zb3Iuc2hhcGUKICAgIHRtcCA9IHRlbnNvci5uZXdfZW1wdHkoc2l6ZSArICg0LCkpLm5vcm1hbF8oKQogICAgdmFsaWQgPSAodG1wIDwgMiAqIHN0ZCkgJiAodG1wID4gLTIgKiBzdGQpCiAgICBpbmQgPSB2YWxpZC5tYXgoLTEsIGtlZXBkaW09VHJ1ZSlbMV0KICAgIHRlbnNvci5kYXRhLmNvcHlfKHRtcC5nYXRoZXIoLTEsIGluZCkuc3F1ZWV6ZSgtMSkpCiAgICB0ZW5zb3IuZGF0YS5tdWxfKHN0ZCkuYWRkXyhtZWFuKQoKCmRlZiB1bmlmb3JtKHRlbnNvcik6CiAgICByZXR1cm4gdW5pZm9ybV8odGVuc29yLCBhPS0wLjA1LCBiPTAuMDUpCgoKZGVmIGdldF9yZXByZXNlbnRhdGlvbihhcmdzLCB0cmFpbl9sb2FkZXI9Tm9uZSk6CiAgICAjIGJ1aWxkIHJlcHJlc2VudGF0aW9uCiAgICBpZiBhcmdzLm1vZGVsID09ICJzY2huZXQiOgoKICAgICAgICBhY3RpdmF0aW9uID0gRi5yZWx1IGlmIGFyZ3MuYWN0aXZhdGlvbl9mdW5jdGlvbiA9PSAncmVsdScgZWxzZSBGLmxlYWt5X3JlbHUgXAogICAgICAgICAgICBpZiBhcmdzLmFjdGl2YXRpb25fZnVuY3Rpb24gPT0gJ2xlYWt5X3JlbHUnIGVsc2UgRi5lbHUgaWYgYXJncy5hY3RpdmF0aW9uX2Z1bmN0aW9uID09ICdlbHUnIFwKICAgICAgICAgICAgZWxzZSBGLnNlbHUgaWYgYXJncy5hY3RpdmF0aW9uX2Z1bmN0aW9uID09ICdzZWx1JyBlbHNlIHNway5ubi5zd2lzaCBcCiAgICAgICAgICAgIGlmIGFyZ3MuYWN0aXZhdGlvbl9mdW5jdGlvbiA9PSAnc3dpc2gnIGVsc2Ugc3BrLm5uLnNoaWZ0ZWRfc29mdHBsdXMKCiAgICAgICAgY3V0b2ZmX25ldHdvcmsgPSBzcGsubm4uY3V0b2ZmLmdldF9jdXRvZmZfYnlfc3RyaW5nKGFyZ3MuY3V0b2ZmX2Z1bmN0aW9uKQoKICAgICAgICBpZiBhcmdzLndlaWdodF9pbml0ICE9ICd4YXZpZXInOgogICAgICAgICAgICBiZXRhX2ludGl0X2Z1bmMgPSBiZXRhX2FyZ3MoYXJncykKICAgICAgICAgICAgd2VpZ2h0X2luaXQgPSB4YXZpZXJfbm9ybWFsXyBpZiBhcmdzLndlaWdodF9pbml0ID09ICd4YXZpZXJfbm9ybWFsJyBcCiAgICAgICAgICAgICAgICBlbHNlIGthaW1pbmdfdW5pZm9ybSBpZiBhcmdzLndlaWdodF9pbml0ID09ICdrYWltaW5nJyBcCiAgICAgICAgICAgICAgICBlbHNlIGthaW1pbmdfbm9ybWFsIGlmIGFyZ3Mud2VpZ2h0X2luaXQgPT0gJ2thaW1pbmdfbm9ybWFsJyBcCiAgICAgICAgICAgICAgICBlbHNlIGxlY3VuX3VuaWZvcm0gaWYgYXJncy53ZWlnaHRfaW5pdCA9PSAnbGVjdW4nIFwKICAgICAgICAgICAgICAgIGVsc2UgbGVjdW5fbm9ybWFsIGlmIGFyZ3Mud2VpZ2h0X2luaXQgPT0gJ2xlY3VuX25vcm1hbCcgXAogICAgICAgICAgICAgICAgZWxzZSB1bmlmb3JtIGlmIGFyZ3Mud2VpZ2h0X2luaXQgPT0gJ3VuaWZvcm0nIGVsc2UgemVyb3NfIGlmIGFyZ3Mud2VpZ2h0X2luaXQgPT0gJ3plcm9lcycgXAogICAgICAgICAgICAgICAgZWxzZSBvbmVzXyBpZiBhcmdzLndlaWdodF9pbml0ID09ICdvbmVzJyBlbHNlIHRydW5jYXRlZF9ub3JtYWxfIGlmIGFyZ3Mud2VpZ2h0X2luaXQgPT0gJ25vcm1hbCcgXAogICAgICAgICAgICAgICAgZWxzZSBiZXJub3VsbGkgaWYgYXJncy53ZWlnaHRfaW5pdCA9PSAnYmVybm91bGxpJyBlbHNlIGJldGFfaW50aXRfZnVuYwoKICAgICAgICAgICAgcmV0dXJuIHNway5yZXByZXNlbnRhdGlvbi5TY2hOZXQoCiAgICAgICAgICAgICAgICBuX2F0b21fYmFzaXM9YXJncy5mZWF0dXJlcywKICAgICAgICAgICAgICAgIG5fZmlsdGVycz1hcmdzLmZlYXR1cmVzLAogICAgICAgICAgICAgICAgbl9pbnRlcmFjdGlvbnM9YXJncy5pbnRlcmFjdGlvbnMsCiAgICAgICAgICAgICAgICBjdXRvZmY9YXJncy5jdXRvZmYsCiAgICAgICAgICAgICAgICBuX2dhdXNzaWFucz1hcmdzLm51bV9nYXVzc2lhbnMsCiAgICAgICAgICAgICAgICBjdXRvZmZfbmV0d29yaz1jdXRvZmZfbmV0d29yaywKICAgICAgICAgICAgICAgIGFjdGl2YXRpb249YWN0aXZhdGlvbiwKICAgICAgICAgICAgICAgIHdlaWdodF9pbml0PXdlaWdodF9pbml0CiAgICAgICAgICAgICkKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gc3BrLnJlcHJlc2VudGF0aW9uLlNjaE5ldCgKICAgICAgICAgICAgICAgIG5fYXRvbV9iYXNpcz1hcmdzLmZlYXR1cmVzLAogICAgICAgICAgICAgICAgbl9maWx0ZXJzPWFyZ3MuZmVhdHVyZXMsCiAgICAgICAgICAgICAgICBuX2ludGVyYWN0aW9ucz1hcmdzLmludGVyYWN0aW9ucywKICAgICAgICAgICAgICAgIGN1dG9mZj1hcmdzLmN1dG9mZiwKICAgICAgICAgICAgICAgIG5fZ2F1c3NpYW5zPWFyZ3MubnVtX2dhdXNzaWFucywKICAgICAgICAgICAgICAgIGN1dG9mZl9uZXR3b3JrPWN1dG9mZl9uZXR3b3JrLAogICAgICAgICAgICAgICAgYWN0aXZhdGlvbj1hY3RpdmF0aW9uCiAgICAgICAgICAgICkKCiAgICBlbGlmIGFyZ3MubW9kZWwgPT0gIndhY3NmIjoKICAgICAgICBzZm1vZGUgPSAoIndlaWdodGVkIiwgIkJlaGxlciIpW2FyZ3MuYmVobGVyXQogICAgICAgICMgQ29udmVydCBlbGVtZW50IHN0cmluZ3MgdG8gYXRvbWljIGNoYXJnZXMKICAgICAgICBlbGVtZW50cyA9IGZyb3plbnNldCgoYXRvbWljX251bWJlcnNbaV0gZm9yIGkgaW4gc29ydGVkKGFyZ3MuZWxlbWVudHMpKSkKICAgICAgICByZXByZXNlbnRhdGlvbiA9IHNway5yZXByZXNlbnRhdGlvbi5CZWhsZXJTRkJsb2NrKAogICAgICAgICAgICBhcmdzLnJhZGlhbCwKICAgICAgICAgICAgYXJncy5hbmd1bGFyLAogICAgICAgICAgICB6ZXRhcz1zZXQoYXJncy56ZXRhcyksCiAgICAgICAgICAgIGN1dG9mZl9yYWRpdXM9YXJncy5jdXRvZmYsCiAgICAgICAgICAgIGNlbnRlcmVkPWFyZ3MuY2VudGVyZWQsCiAgICAgICAgICAgIGNyb3NzdGVybXM9YXJncy5jcm9zc3Rlcm1zLAogICAgICAgICAgICBlbGVtZW50cz1lbGVtZW50cywKICAgICAgICAgICAgbW9kZT1zZm1vZGUsCiAgICAgICAgKQogICAgICAgIGxvZ2dpbmcuaW5mbygKICAgICAgICAgICAgIlVzaW5nIHs6ZH0gezpzfS10eXBlIFNGIi5mb3JtYXQocmVwcmVzZW50YXRpb24ubl9zeW1mdW5jcywgc2Ztb2RlKQogICAgICAgICkKICAgICAgICAjIFN0YW5kYXJkaXplIHJlcHJlc2VudGF0aW9uIGlmIHJlcXVlc3RlZAogICAgICAgIGlmIGFyZ3Muc3RhbmRhcmRpemU6CiAgICAgICAgICAgIGlmIHRyYWluX2xvYWRlciBpcyBOb25lOgogICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAgICAgICAiU3BlY2lmaWNhdGlvbiBvZiBhIHRyYWluaW5nX2xvYWRlciBpcyByZXF1aXJlZCB0byBzdGFuZGFyZGl6ZSAiCiAgICAgICAgICAgICAgICAgICAgIndBQ1NGIgogICAgICAgICAgICAgICAgKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJDb21wdXRpbmcgYW5kIHN0YW5kYXJkaXppbmcgc3ltbWV0cnkgZnVuY3Rpb24gc3RhdGlzdGljcyIpCiAgICAgICAgICAgICAgICByZXR1cm4gc3BrLnJlcHJlc2VudGF0aW9uLlN0YW5kYXJkaXplU0YoCiAgICAgICAgICAgICAgICAgICAgcmVwcmVzZW50YXRpb24sIHRyYWluX2xvYWRlciwgY3VkYT1hcmdzLmN1ZGEKICAgICAgICAgICAgICAgICkKCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIHJlcHJlc2VudGF0aW9uCgogICAgZWxzZToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJVbmtub3duIG1vZGVsIGNsYXNzOiIsIGFyZ3MubW9kZWwpCgoKZGVmIGdldF9vdXRwdXRfbW9kdWxlX2J5X3N0cihtb2R1bGVfc3RyKToKICAgIGlmIG1vZHVsZV9zdHIgPT0gImF0b213aXNlIjoKICAgICAgICByZXR1cm4gc3BrLmF0b21pc3RpYy5BdG9td2lzZQogICAgZWxpZiBtb2R1bGVfc3RyID09ICJlbGVtZW50YWxfYXRvbXdpc2UiOgogICAgICAgIHJldHVybiBzcGsuYXRvbWlzdGljLkVsZW1lbnRhbEF0b213aXNlCiAgICBlbGlmIG1vZHVsZV9zdHIgPT0gImRpcG9sZV9tb21lbnQiOgogICAgICAgIHJldHVybiBzcGsuYXRvbWlzdGljLkRpcG9sZU1vbWVudAogICAgZWxpZiBtb2R1bGVfc3RyID09ICJlbGVtZW50YWxfZGlwb2xlX21vbWVudCI6CiAgICAgICAgcmV0dXJuIHNway5hdG9taXN0aWMuRWxlbWVudGFsRGlwb2xlTW9tZW50CiAgICBlbGlmIG1vZHVsZV9zdHIgPT0gInBvbGFyaXphYmlsaXR5IjoKICAgICAgICByZXR1cm4gc3BrLmF0b21pc3RpYy5Qb2xhcml6YWJpbGl0eQogICAgZWxpZiBtb2R1bGVfc3RyID09ICJlbGVjdHJvbmljX3NwYXRpYWxfc3h0ZW50IjoKICAgICAgICByZXR1cm4gc3BrLmF0b21pc3RpYy5FbGVjdHJvbmljU3BhdGlhbEV4dGVudAogICAgZWxzZToKICAgICAgICByYWlzZSBzcGsudXRpbHMuU2NyaXB0RXJyb3IoCiAgICAgICAgICAgICJ7fSBpcyBub3QgYSB2YWxpZCBvdXRwdXQgIiAibW9kdWxlISIuZm9ybWF0KG1vZHVsZV9zdHIpCiAgICAgICAgKQoKCmRlZiBnZXRfb3V0cHV0X21vZHVsZShhcmdzLCByZXByZXNlbnRhdGlvbiwgbWVhbiwgc3RkZGV2LCBhdG9tcmVmKToKICAgIGRlcml2YXRpdmUgPSBzcGsudXRpbHMuZ2V0X2Rlcml2YXRpdmUoYXJncykKICAgIG5lZ2F0aXZlX2RyID0gc3BrLnV0aWxzLmdldF9uZWdhdGl2ZV9kcihhcmdzKQogICAgY29udHJpYnV0aW9ucyA9IHNway51dGlscy5nZXRfY29udHJpYnV0aW9ucyhhcmdzKQogICAgc3RyZXNzID0gc3BrLnV0aWxzLmdldF9zdHJlc3MoYXJncykKICAgIGlmIGFyZ3MuZGF0YXNldCA9PSAibWQxNyIgYW5kIG5vdCBhcmdzLmlnbm9yZV9mb3JjZXM6CiAgICAgICAgZGVyaXZhdGl2ZSA9IHNway5kYXRhc2V0cy5NRDE3LmZvcmNlcwogICAgb3V0cHV0X21vZHVsZV9zdHIgPSBzcGsudXRpbHMuZ2V0X21vZHVsZV9zdHIoYXJncykKICAgIGlmIG91dHB1dF9tb2R1bGVfc3RyID09ICJkaXBvbGVfbW9tZW50IjoKICAgICAgICByZXR1cm4gc3BrLmF0b21pc3RpYy5vdXRwdXRfbW9kdWxlcy5EaXBvbGVNb21lbnQoCiAgICAgICAgICAgIGFyZ3MuZmVhdHVyZXMsCiAgICAgICAgICAgIHByZWRpY3RfbWFnbml0dWRlPVRydWUsCiAgICAgICAgICAgIG1lYW49bWVhblthcmdzLnByb3BlcnR5XSwKICAgICAgICAgICAgc3RkZGV2PXN0ZGRldlthcmdzLnByb3BlcnR5XSwKICAgICAgICAgICAgcHJvcGVydHk9YXJncy5wcm9wZXJ0eSwKICAgICAgICAgICAgY29udHJpYnV0aW9ucz1jb250cmlidXRpb25zLAogICAgICAgICkKICAgIGVsaWYgb3V0cHV0X21vZHVsZV9zdHIgPT0gImVsZWN0cm9uaWNfc3BhdGlhbF9leHRlbnQiOgogICAgICAgIHJldHVybiBzcGsuYXRvbWlzdGljLm91dHB1dF9tb2R1bGVzLkVsZWN0cm9uaWNTcGF0aWFsRXh0ZW50KAogICAgICAgICAgICBhcmdzLmZlYXR1cmVzLAogICAgICAgICAgICBtZWFuPW1lYW5bYXJncy5wcm9wZXJ0eV0sCiAgICAgICAgICAgIHN0ZGRldj1zdGRkZXZbYXJncy5wcm9wZXJ0eV0sCiAgICAgICAgICAgIHByb3BlcnR5PWFyZ3MucHJvcGVydHksCiAgICAgICAgICAgIGNvbnRyaWJ1dGlvbnM9Y29udHJpYnV0aW9ucywKICAgICAgICApCiAgICBlbGlmIG91dHB1dF9tb2R1bGVfc3RyID09ICJhdG9td2lzZSI6CiAgICAgICAgcmV0dXJuIHNway5hdG9taXN0aWMub3V0cHV0X21vZHVsZXMuQXRvbXdpc2UoCiAgICAgICAgICAgIGFyZ3MuZmVhdHVyZXMsCiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uX21vZGU9c3BrLnV0aWxzLmdldF9wb29saW5nX21vZGUoYXJncyksCiAgICAgICAgICAgIG1lYW49bWVhblthcmdzLnByb3BlcnR5XSwKICAgICAgICAgICAgc3RkZGV2PXN0ZGRldlthcmdzLnByb3BlcnR5XSwKICAgICAgICAgICAgYXRvbXJlZj1hdG9tcmVmW2FyZ3MucHJvcGVydHldLAogICAgICAgICAgICBwcm9wZXJ0eT1hcmdzLnByb3BlcnR5LAogICAgICAgICAgICBkZXJpdmF0aXZlPWRlcml2YXRpdmUsCiAgICAgICAgICAgIG5lZ2F0aXZlX2RyPW5lZ2F0aXZlX2RyLAogICAgICAgICAgICBjb250cmlidXRpb25zPWNvbnRyaWJ1dGlvbnMsCiAgICAgICAgICAgIHN0cmVzcz1zdHJlc3MsCiAgICAgICAgKQogICAgZWxpZiBvdXRwdXRfbW9kdWxlX3N0ciA9PSAicG9sYXJpemFiaWxpdHkiOgogICAgICAgIHJldHVybiBzcGsuYXRvbWlzdGljLm91dHB1dF9tb2R1bGVzLlBvbGFyaXphYmlsaXR5KAogICAgICAgICAgICBhcmdzLmZlYXR1cmVzLAogICAgICAgICAgICBhZ2dyZWdhdGlvbl9tb2RlPXNway51dGlscy5nZXRfcG9vbGluZ19tb2RlKGFyZ3MpLAogICAgICAgICAgICBwcm9wZXJ0eT1hcmdzLnByb3BlcnR5LAogICAgICAgICkKICAgIGVsaWYgb3V0cHV0X21vZHVsZV9zdHIgPT0gImlzb3Ryb3BpY19wb2xhcml6YWJpbGl0eSI6CiAgICAgICAgcmV0dXJuIHNway5hdG9taXN0aWMub3V0cHV0X21vZHVsZXMuUG9sYXJpemFiaWxpdHkoCiAgICAgICAgICAgIGFyZ3MuZmVhdHVyZXMsCiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uX21vZGU9c3BrLnV0aWxzLmdldF9wb29saW5nX21vZGUoYXJncyksCiAgICAgICAgICAgIHByb3BlcnR5PWFyZ3MucHJvcGVydHksCiAgICAgICAgICAgIGlzb3Ryb3BpYz1UcnVlLAogICAgICAgICkKICAgICMgd2Fjc2YgbW9kdWxlcwogICAgZWxpZiBvdXRwdXRfbW9kdWxlX3N0ciA9PSAiZWxlbWVudGFsX2RpcG9sZV9tb21lbnQiOgogICAgICAgIGVsZW1lbnRzID0gZnJvemVuc2V0KChhdG9taWNfbnVtYmVyc1tpXSBmb3IgaSBpbiBzb3J0ZWQoYXJncy5lbGVtZW50cykpKQogICAgICAgIHJldHVybiBzcGsuYXRvbWlzdGljLm91dHB1dF9tb2R1bGVzLkVsZW1lbnRhbERpcG9sZU1vbWVudCgKICAgICAgICAgICAgcmVwcmVzZW50YXRpb24ubl9zeW1mdW5jcywKICAgICAgICAgICAgbl9oaWRkZW49YXJncy5uX25vZGVzLAogICAgICAgICAgICBuX2xheWVycz1hcmdzLm5fbGF5ZXJzLAogICAgICAgICAgICBwcmVkaWN0X21hZ25pdHVkZT1UcnVlLAogICAgICAgICAgICBlbGVtZW50cz1lbGVtZW50cywKICAgICAgICAgICAgcHJvcGVydHk9YXJncy5wcm9wZXJ0eSwKICAgICAgICApCiAgICBlbGlmIG91dHB1dF9tb2R1bGVfc3RyID09ICJlbGVtZW50YWxfYXRvbXdpc2UiOgogICAgICAgIGVsZW1lbnRzID0gZnJvemVuc2V0KChhdG9taWNfbnVtYmVyc1tpXSBmb3IgaSBpbiBzb3J0ZWQoYXJncy5lbGVtZW50cykpKQogICAgICAgIHJldHVybiBzcGsuYXRvbWlzdGljLm91dHB1dF9tb2R1bGVzLkVsZW1lbnRhbEF0b213aXNlKAogICAgICAgICAgICByZXByZXNlbnRhdGlvbi5uX3N5bWZ1bmNzLAogICAgICAgICAgICBuX2hpZGRlbj1hcmdzLm5fbm9kZXMsCiAgICAgICAgICAgIG5fbGF5ZXJzPWFyZ3Mubl9sYXllcnMsCiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uX21vZGU9c3BrLnV0aWxzLmdldF9wb29saW5nX21vZGUoYXJncyksCiAgICAgICAgICAgIG1lYW49bWVhblthcmdzLnByb3BlcnR5XSwKICAgICAgICAgICAgc3RkZGV2PXN0ZGRldlthcmdzLnByb3BlcnR5XSwKICAgICAgICAgICAgYXRvbXJlZj1hdG9tcmVmW2FyZ3MucHJvcGVydHldLAogICAgICAgICAgICBlbGVtZW50cz1lbGVtZW50cywKICAgICAgICAgICAgcHJvcGVydHk9YXJncy5wcm9wZXJ0eSwKICAgICAgICAgICAgZGVyaXZhdGl2ZT1kZXJpdmF0aXZlLAogICAgICAgICAgICBuZWdhdGl2ZV9kcj1uZWdhdGl2ZV9kciwKICAgICAgICApCiAgICBlbHNlOgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpkZWYgZ2V0X21vZGVsKGFyZ3MsIHRyYWluX2xvYWRlciwgbWVhbiwgc3RkZGV2LCBhdG9tcmVmLCBsb2dnaW5nPU5vbmUpOgogICAgIiIiCiAgICBCdWlsZCBhIG1vZGVsIGZyb20gc2VsZWN0ZWQgcGFyYW1ldGVycyBvciBsb2FkIHRyYWluZWQgbW9kZWwgZm9yIGV2YWx1YXRpb24uCgogICAgQXJnczoKICAgICAgICBhcmdzIChhcmdzcGFyc2UuTmFtZXNwYWNlKTogU2NyaXB0IGFyZ3VtZW50cwogICAgICAgIHRyYWluX2xvYWRlciAoc3BrLkF0b21zTG9hZGVyKTogbG9hZGVyIGZvciB0cmFpbmluZyBkYXRhCiAgICAgICAgbWVhbiAodG9yY2guVGVuc29yKTogbWVhbiBvZiB0cmFpbmluZyBkYXRhCiAgICAgICAgc3RkZGV2ICh0b3JjaC5UZW5zb3IpOiBzdGRkZXYgb2YgdHJhaW5pbmcgZGF0YQogICAgICAgIGF0b21yZWYgKGRpY3QpOiBhdG9taWMgcmVmZXJlbmNlcwogICAgICAgIGxvZ2dpbmc6IGxvZ2dlcgoKPHxmaW1faG9sZXw+CiAgICAgICAgaWYgbG9nZ2luZzoKICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJidWlsZGluZyBtb2RlbC4uLiIpCiAgICAgICAgcmVwcmVzZW50YXRpb24gPSBnZXRfcmVwcmVzZW50YXRpb24oYXJncywgdHJhaW5fbG9hZGVyKQogICAgICAgIG91dHB1dF9tb2R1bGUgPSBnZXRfb3V0cHV0X21vZHVsZSgKICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgcmVwcmVzZW50YXRpb249cmVwcmVzZW50YXRpb24sCiAgICAgICAgICAgIG1lYW49bWVhbiwKICAgICAgICAgICAgc3RkZGV2PXN0ZGRldiwKICAgICAgICAgICAgYXRvbXJlZj1hdG9tcmVmLAogICAgICAgICkKICAgICAgICBtb2RlbCA9IHNway5BdG9taXN0aWNNb2RlbChyZXByZXNlbnRhdGlvbiwgW291dHB1dF9tb2R1bGVdKQoKICAgICAgICBpZiBhcmdzLnBhcmFsbGVsOgogICAgICAgICAgICBtb2RlbCA9IG5uLkRhdGFQYXJhbGxlbChtb2RlbCkKICAgICAgICBpZiBsb2dnaW5nOgogICAgICAgICAgICBsb2dnaW5nLmluZm8oCiAgICAgICAgICAgICAgICAiVGhlIG1vZGVsIHlvdSBidWlsdCBoYXM6ICVkIHBhcmFtZXRlcnMiICUgc3BrLnV0aWxzLmNvdW50X3BhcmFtcyhtb2RlbCkKICAgICAgICAgICAgKQogICAgICAgIHJldHVybiBtb2RlbAogICAgZWxzZToKICAgICAgICByYWlzZSBzcGsudXRpbHMuU2NyaXB0RXJyb3IoIkludmFsaWQgbW9kZSBzZWxlY3RlZDoge30iLmZvcm1hdChhcmdzLm1vZGUpKQo8fGZpbV9zdWZmaXh8PgogICAgUmV0dXJuczoKICAgICAgICBzcGsuQXRvbWlzdGljTW9kZWw6IG1vZGVsIGZvciB0cmFpbmluZyBvciBldmFsdWF0aW9uCiAgICAiIiIKICAgIGlmIGFyZ3MubW9kZSA9PSAidHJhaW4iOgo8fGZpbV9lbmR8Pg=="]
["c1baa41e8445164ea139276ffff5a42ff7618b5b-3","c1baa41e8445164ea139276ffff5a42ff7618b5b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKaW1wb3J0IHRvcmNoCmltcG9ydCBsb2dnaW5nCmltcG9ydCBmdW5jdG9vbHMKaW1wb3J0IHNjaG5ldHBhY2sgYXMgc3BrCmZyb20gYXNlLmRhdGEgaW1wb3J0IGF0b21pY19udW1iZXJzCmltcG9ydCB0b3JjaC5ubiBhcyBubgpmcm9tIHRvcmNoLm5uIGltcG9ydCBmdW5jdGlvbmFsIGFzIEYKZnJvbSB0b3JjaC5ubi5pbml0IGltcG9ydCBub3JtYWxfLCB1bmlmb3JtXywgb25lc18sIHplcm9zXywgeGF2aWVyX3VuaWZvcm1fLCB4YXZpZXJfbm9ybWFsXywgX25vX2dyYWRfdW5pZm9ybV8sIFwKICAgIF9ub19ncmFkX25vcm1hbF8sIF9jYWxjdWxhdGVfZmFuX2luX2FuZF9mYW5fb3V0CmltcG9ydCB0b3JjaC5kaXN0cmlidXRpb25zIGFzIHRkaXN0CgpfX2FsbF9fID0gWyJnZXRfcmVwcmVzZW50YXRpb24iLCAiZ2V0X291dHB1dF9tb2R1bGUiLCAiZ2V0X21vZGVsIl0KCgpkZWYgX25vX2dyYWRfYmVybm91bGxpXyh0ZW5zb3IpOgogICAgd2l0aCB0b3JjaC5ub19ncmFkKCk6CiAgICAgICAgcmV0dXJuIHRlbnNvci5iZXJub3VsbGlfKCkKCgpkZWYgYmVybm91bGxpKHRlbnNvcik6CiAgICByZXR1cm4gX25vX2dyYWRfYmVybm91bGxpXyh0ZW5zb3IpCgoKZGVmIF9ub19ncmFkX2JldGFfKGJldGExLCBiZXRhMiwgdGVuc29yKToKICAgIHdpdGggdG9yY2gubm9fZ3JhZCgpOgogICAgICAgIGJldGFfZGlzdCA9IHRkaXN0LkJldGEodG9yY2gudGVuc29yKFtiZXRhMV0pLCB0b3JjaC50ZW5zb3IoW2JldGEyXSkpCiAgICAgICAgdGVuc29yLmRhdGEgPSBiZXRhX2Rpc3Quc2FtcGxlKHRlbnNvci5zaGFwZSkuc3F1ZWV6ZSgtMSkuY2xvbmUoKQogICAgICAgIHJldHVybiB0ZW5zb3IKCgpkZWYgYmV0YShiZXRhMSwgYmV0YTIsIHRlbnNvcik6CiAgICByZXR1cm4gX25vX2dyYWRfYmV0YV8oYmV0YTEsIGJldGEyLCB0ZW5zb3IpCgoKZGVmIGJldGFfYXJncyhhcmdzKToKICAgIHJldHVybiBmdW5jdG9vbHMucGFydGlhbChiZXRhLCBhcmdzLmJldGFfYXJnc1swXSwgYXJncy5iZXRhX2FyZ3NbMV0pCgoKZGVmIGthaW1pbmdfbm9ybWFsKHRlbnNvcik6CiAgICBmYW5faW4sIF8gPSBfY2FsY3VsYXRlX2Zhbl9pbl9hbmRfZmFuX291dCh0ZW5zb3IpCiAgICBzdGQgPSBtYXRoLnNxcnQoMi4wIC8gZmxvYXQoZmFuX2luKSkKCiAgICByZXR1cm4gX25vX2dyYWRfbm9ybWFsXyh0ZW5zb3IsIDAuLCBzdGQpCgoKZGVmIGthaW1pbmdfdW5pZm9ybSh0ZW5zb3IpOgogICAgZmFuX2luLCBfID0gX2NhbGN1bGF0ZV9mYW5faW5fYW5kX2Zhbl9vdXQodGVuc29yKQogICAgc3RkID0gbWF0aC5zcXJ0KDIuMCAvIGZsb2F0KGZhbl9pbikpCiAgICBhID0gbWF0aC5zcXJ0KDMuMCkgKiBzdGQgICMgQ2FsY3VsYXRlIHVuaWZvcm0gYm91bmRzIGZyb20gc3RhbmRhcmQgZGV2aWF0aW9uCgogICAgcmV0dXJuIF9ub19ncmFkX3VuaWZvcm1fKHRlbnNvciwgLWEsIGEpCgoKZGVmIGxlY3VuX25vcm1hbCh0ZW5zb3IpOgogICAgZmFuX2luLCBfID0gX2NhbGN1bGF0ZV9mYW5faW5fYW5kX2Zhbl9vdXQodGVuc29yKQogICAgc3RkID0gbWF0aC5zcXJ0KDEuMCAvIGZsb2F0KGZhbl9pbikpCgogICAgcmV0dXJuIF9ub19ncmFkX25vcm1hbF8odGVuc29yLCAwLiwgc3RkKQoKCmRlZiBsZWN1bl91bmlmb3JtKHRlbnNvcik6CiAgICBmYW5faW4sIF8gPSBfY2FsY3VsYXRlX2Zhbl9pbl9hbmRfZmFuX291dCh0ZW5zb3IpCiAgICBzdGQgPSBtYXRoLnNxcnQoMS4wIC8gZmxvYXQoZmFuX2luKSkKICAgIGEgPSBtYXRoLnNxcnQoMy4wKSAqIHN0ZCAgIyBDYWxjdWxhdGUgdW5pZm9ybSBib3VuZHMgZnJvbSBzdGFuZGFyZCBkZXZpYXRpb24KCiAgICByZXR1cm4gX25vX2dyYWRfdW5pZm9ybV8odGVuc29yLCAtYSwgYSkKCgpkZWYgdHJ1bmNhdGVkX25vcm1hbF8odGVuc29yLCBtZWFuPTAsIHN0ZD0wLjA1KToKICAgIHNpemUgPSB0ZW5zb3Iuc2hhcGUKICAgIHRtcCA9IHRlbnNvci5uZXdfZW1wdHkoc2l6ZSArICg0LCkpLm5vcm1hbF8oKQogICAgdmFsaWQgPSAodG1wIDwgMiAqIHN0ZCkgJiAodG1wID4gLTIgKiBzdGQpCiAgICBpbmQgPSB2YWxpZC5tYXgoLTEsIGtlZXBkaW09VHJ1ZSlbMV0KICAgIHRlbnNvci5kYXRhLmNvcHlfKHRtcC5nYXRoZXIoLTEsIGluZCkuc3F1ZWV6ZSgtMSkpCiAgICB0ZW5zb3IuZGF0YS5tdWxfKHN0ZCkuYWRkXyhtZWFuKQoKCmRlZiB1bmlmb3JtKHRlbnNvcik6CiAgICByZXR1cm4gdW5pZm9ybV8odGVuc29yLCBhPS0wLjA1LCBiPTAuMDUpCgoKZGVmIGdldF9yZXByZXNlbnRhdGlvbihhcmdzLCB0cmFpbl9sb2FkZXI9Tm9uZSk6CiAgICAjIGJ1aWxkIHJlcHJlc2VudGF0aW9uCiAgICBpZiBhcmdzLm1vZGVsID09ICJzY2huZXQiOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgIGFjdGl2YXRpb24gPSBGLnJlbHUgaWYgYXJncy5hY3RpdmF0aW9uX2Z1bmN0aW9uID09ICdyZWx1JyBlbHNlIEYubGVha3lfcmVsdSBcCiAgICAgICAgICAgIGlmIGFyZ3MuYWN0aXZhdGlvbl9mdW5jdGlvbiA9PSAnbGVha3lfcmVsdScgZWxzZSBGLmVsdSBpZiBhcmdzLmFjdGl2YXRpb25fZnVuY3Rpb24gPT0gJ2VsdScgXAogICAgICAgICAgICBlbHNlIEYuc2VsdSBpZiBhcmdzLmFjdGl2YXRpb25fZnVuY3Rpb24gPT0gJ3NlbHUnIGVsc2Ugc3BrLm5uLnN3aXNoIFwKPHxmaW1fZW5kfD4="]
["970ee6404db8237f0de4005be5a186ffe53b934f-1","970ee6404db8237f0de4005be5a186ffe53b934f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVyd2lkCmltcG9ydCByYW5kb20KaW1wb3J0IHN0cnVjdAppbXBvcnQgZ2V0b3B0CmltcG9ydCBzeXMKaW1wb3J0IG9zCgpjbGFzcyBMYXBzZVJlYWRlcjoKCiAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIHBhdGgpOgogICAgICAgIHNlbGYuaWR4RmlsZSA9IG9wZW4oZmlsZW5hbWUsIG1vZGU9J3JiJykKICAgICAgICBzZWxmLl9sb2FkSGVhZGVyKCkKICAgICAgICBzZWxmLmhlYWRlclNpemUgPSA5NgogICAgICAgIHNlbGYuY3VycmVudFN0ZXAgPSAwCgogICAgZGVmIGdldFN0ZXBEYXRhKHNlbGYsc3RlcCk6CiAgICAgICAgc2VsZi5jdXJyZW50U3RlcCA9IHN0ZXAKCiAgICAgICAgb2Zmc2V0ID0gc2VsZi5oZWFkZXJTaXplICsgc3RlcCAqIDY0OwogICAgICAgIHNlbGYuaWR4RmlsZS5zZWVrKG9mZnNldCwwKQoKICAgICAgICBudW0gPSBzdHJ1Y3QudW5wYWNrKCc8TCcsIHNlbGYuaWR4RmlsZS5yZWFkKDQpKVswXQogICAgICAgIGx0aW1lID0gc3RydWN0LnVucGFjaygnPEwnLCBzZWxmLmlkeEZpbGUucmVhZCg0KSlbMF0KICAgICAgICB0dGltZSA9IHN0cnVjdC51bnBhY2soJzxMJywgc2VsZi5pZHhGaWxlLnJlYWQoNCkpWzBdCiAgICAgICAgbWVtID0gc3RydWN0LnVucGFjaygnPEwnLCBzZWxmLmlkeEZpbGUucmVhZCg0KSlbMF0KICAgICAgICBtZW1fcGVhayA9IHN0cnVjdC51bnBhY2soJzxMJywgc2VsZi5pZHhGaWxlLnJlYWQoNCkpWzBdCiAgICAgICAgZm5hbWUgPSBzdHJ1Y3QudW5wYWNrKCcyMHMnLCBzZWxmLmlkeEZpbGUucmVhZCgyMCkpWzBdLnJzdHJpcCgnXHgwMCcpCiAgICAgICAgY25hbWUgPSBzdHJ1Y3QudW5wYWNrKCcyMHMnLCBzZWxmLmlkeEZpbGUucmVhZCgyMCkpWzBdLnJzdHJpcCgnXHgwMCcpCiAgICAgICAgY29udGV4dF9pbmRleCA9IHN0cnVjdC51bnBhY2soJzxMJywgc2VsZi5pZHhGaWxlLnJlYWQoNCkpWzBdCgoKICAgICAgICBzZWxmLmRhdEZpbGUuc2Vlayhjb250ZXh0X2luZGV4LDApCgogICAgICAgIGZpbGVuYW1lID0gc2VsZi5kYXRGaWxlLnJlYWRsaW5lKCkucnN0cmlwKCdcbicpCgogICAgICAgIE49MTEKICAgICAgICBjb250ZXh0ID1bXQogICAgICAgIGNvbnRleHQuZXh0ZW5kKHNlbGYuZGF0RmlsZS5yZWFkbGluZSgpIGZvciBpIGluIHhyYW5nZShOKSkKCgogICAgICAgIHJldHVybiB7Im51bSIgOiBudW0sCiAgICAgICAgICAgICAgICAibHRpbWUiIDogbHRpbWUsCiAgICAgICAgICAgICAgICAidHRpbWUiIDogdHRpbWUsCiAgICAgICAgICAgICAgICAibWVtIiA6IG1lbSwgCiAgICAgICAgICAgICAgICAibWVtX3BlYWsiIDogbWVtX3BlYWssCiAgICAgICAgICAgICAgICAiZm5hbWUiIDogZm5hbWUsCiAgICAgICAgICAgICAgICAiY25hbWUiIDogY25hbWUsCiAgICAgICAgICAgICAgICAiZmlsZW5hbWUiIDogZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAiY29udGV4dCIgOiBjb250ZXh0fQoKICAgIGRlZiByZXdpbmQoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0U3RlcERhdGEoMCkKCgogICAgZGVmIGdvTmV4dChzZWxmKToKICAgICAgICBpZiAoc2VsZi5jdXJyZW50U3RlcDxzZWxmLnN0ZXBzKToKICAgICAgICAgICAgc2VsZi5jdXJyZW50U3RlcCs9MQogICAgICAgIHJldHVybiBzZWxmLmdldFN0ZXBEYXRhKHNlbGYuY3VycmVudFN0ZXApCgogICAgZGVmIGdvQmFjayhzZWxmKToKICAgICAgICBpZiAoc2VsZi5jdXJyZW50U3RlcD4wKToKICAgICAgICAgICAgc2VsZi5jdXJyZW50U3RlcC09MQogICAgICAgIHJldHVybiBzZWxmLmdldFN0ZXBEYXRhKHNlbGYuY3VycmVudFN0ZXApCgogICAgZGVmIF9sb2FkSGVhZGVyKHNlbGYpOgogICAgICAgIHByaW50ICJSZWFkaW5nIGhlYWRlciIKICAgICAgICBzZWxmLnZlcnNpb24gPSBzdHJ1Y3QudW5wYWNrKCc8SCcsIHNlbGYuaWR4RmlsZS5yZWFkKDIpKVswXQogICAgICAgIHNlbGYuaWR4RmlsZU5hbWUgPSBzdHJ1Y3QudW5wYWNrKCc3MHMnLCBzZWxmLmlkeEZpbGUucmVhZCg3MCkpWzBdLnJzdHJpcCgnXHgwMCcpCiAgICAgICAgc2VsZi5kYXRGaWxlID0gb3BlbihwYXRoKyIvIitzZWxmLmlkeEZpbGVOYW1lLCBtb2RlPSdyYicpCiAgICAgICAgc2VsZi5kYXRlID0gc3RydWN0LnVucGFjaygnMjBzJywgc2VsZi5pZHhGaWxlLnJlYWQoMjApKVswXS5yc3RyaXAoJ1x4MDAnKQogICAgICAgIHNlbGYuc3RlcHMgPSBzdHJ1Y3QudW5wYWNrKCc8TCcsIHNlbGYuaWR4RmlsZS5yZWFkKDQpKVswXQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiAiVmVyc2lvbiAiICsgc3RyKHNlbGYudmVyc2lvbikgKyAiXG5EYXRlICIgKyBzZWxmLmRhdGUgKyAgIlxuU3RlcHMgIiArIHN0cihzZWxmLnN0ZXBzKSArICJcbiIKICAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICAgIAoKZGVmIG1haW4gKGxhcHNlUmVhZGVyKToKCiAgICBwYWxldHRlID0gWwogICAgICAgICgnYm9keScsJ3doaXRlJywgJycsICdzdGFuZG91dCcpLAogICAgICAgICgnY29udGV4dCcsJ2RhcmsgZ3JlZW4nLCAnJywgJ3N0YW5kb3V0JyksCiAgICAgICAgKCdjb250ZXh0IHJ1bicsJ2RhcmsgY3lhbicsICcnLCAnc3RhbmRvdXQnKSwKICAgICAgICAoJ2ZvY3VzJywnZGFyayByZWQnLCAnJywgJ3N0YW5kb3V0JyksCiAgICAgICAgKCdoZWFkJywnbGlnaHQgcmVkJywgJ2JsYWNrJyksCiAgICAgICAgKCdmb290ZXInLCdsaWdodCByZWQnLCAnYmxhY2snKSwKICAgICAgICAoJ3BnIG5vcm1hbCcsICAgICd3aGl0ZScsICAgICAgJ2JsYWNrJywgJ3N0YW5kb3V0JyksCiAgICAgICAgKCdwZyBjb21wbGV0ZScsICAnd2hpdGUnLCAgICAgICdsaWdodCBjeWFuJyksCiAgICAgICAgXQoKCiAgICBkZWYga2V5c3Ryb2tlIChpbnB1dCk6CiAgICAgICAgaWYgaW5wdXQgaW4gKCdxJywgJ1EnKToKICAgICAgICAgICAgcmFpc2UgdXJ3aWQuRXhpdE1haW5Mb29wKCkKCiAgICAgICAgaWYgaW5wdXQgaW4gKCdyJywgJ1InKToKICAgICAgICAgICAgc3RlcCA9IGxhcHNlUmVhZGVyLnJld2luZCgpCiAgICAgICAgICAgIHdyaXRlU3RlcChzdGVwKQoKICAgICAgICBpZiBpbnB1dCBpcyAnbGVmdCc6CiAgICAgICAgICAgIHN0ZXAgPSBsYXBzZVJlYWRlci5nb0JhY2soKQogICAgICAgICAgICB3cml0ZVN0ZXAoc3RlcCkKCiAgICAgICAgaWYgaW5wdXQgaXMgJ3JpZ2h0JzoKICAgICAgICAgICAgc3RlcCA9IGxhcHNlUmVhZGVyLmdvTmV4dCgpCiAgICAgICAgICAgIHdyaXRlU3RlcChzdGVwKQoKICAgIGRlZiB3cml0ZVN0ZXAoc3RlcCk6CiAgICAgICAgc3RlcHMuc2V0X3RleHQoIlN0ZXA6ICIrc3RyKHN0ZXBbJ251bSddKSsiLyIrc3RyKGxhcHNlUmVhZGVyLnN0ZXBzKSkKICAgICAgICBjb250ZXh0Q29kZS5zZXRfdGV4dChzdGVwWydjb250ZXh0J10pCiAgICAgICAgZmlsZW5hbWUuc2V0X3RleHQoJ0ZpbGU6ICcgKyBzdGVwWydmaWxlbmFtZSddKQogICAgICAgIHRpbWUuc2V0X3RleHQoJ1RpbWU6ICcrc3RyKHN0ZXBbJ2x0aW1lJ10pICsndXMnKQogICAgICAgIHRvdGFsVGltZS5zZXRfdGV4dCgnVG90YWwgVGltZTogJyArc3RyKHN0ZXBbJ3R0aW1lJ10vMTAwMCkgKydtcycpCiAgICAgICAgbWVtLnNldF90ZXh0KCdNZW06ICcrc3RyKHN0ZXBbJ21lbSddKSsnS2InKQogICAgICAgIG1lbVBlYWsuc2V0X3RleHQoJ01lbSBQZWFrOiAnK3N0cihzdGVwWydtZW1fcGVhayddKSsnS2InKQogICAgICAgIGNuYW1lLnNldF90ZXh0KCdDbGFzczogJytzdGVwWydjbmFtZSddKQogICAgICAgIGZuYW1lLnNldF90ZXh0KCdGdW5jdGlvbjogJytzdGVwWydmbmFtZSddKQogICAgICAgIHByZy5zZXRfY29tcGxldGlvbihzdGVwWydudW0nXS0xKQoKCiAgICBoZWFkZXIgPSB1cndpZC5BdHRyTWFwKHVyd2lkLlRleHQoJ1BIUExhcHNlIFZpZXdlciAxLjAnKSwgJ2hlYWQnKQoKICAgIGNvbnRleHRDb2RlID0gdXJ3aWQuVGV4dCgnXG5cblxuXG5cblxuXG5cblxuXG4nKQogICAgY2VudGVyID0gdXJ3aWQuQXR0ck1hcChjb250ZXh0Q29kZSwnY29udGV4dCcpCiAgICBjZW50ZXIgPSB1cndpZC5MaW5lQm94KGNlbnRlcikKCgogICAgZmlsZW5hbWUgPSB1cndpZC5UZXh0KCdGaWxlOiAnKQoKICAgIHN0ZXBzID0gdXJ3aWQuVGV4dCgnU3RlcHM6ICcpCiAgICBjbmFtZSA9IHVyd2lkLlRleHQoJ0NsYXNzOiAnKQogICAgZm5hbWUgPSB1cndpZC5UZXh0KCdGdW5jdGlvbjogJykKICAgIG9vID0gdXJ3aWQuQ29sdW1ucyhbc3RlcHMsY25hbWUsZm5hbWVdKQoKICAgIHRpbWUgPSB1cndpZC5UZXh0KCdUaW1lOiAwbXMnKQogICAgZHRpbWUgPSB1cndpZC5BdHRyTWFwKHRpbWUsJ2NvbnRleHQgcnVuJykKCiAgICB0b3RhbFRpbWUgPSB1cndpZC5UZXh0KCdUb3RhbCBUaW1lOiAwbXMnKQogICAgZHRvdGFsVGltZSA9IHVyd2lkLkF0dHJNYXAodG90YWxUaW1lLCdjb250ZXh0IHJ1bicpCgogICAgbWVtID0gdXJ3aWQuVGV4dCgnTWVtOiAwS2InKQogICAgZG1lbSA9IHVyd2lkLkF0dHJNYXAobWVtLCdjb250ZXh0IHJ1bicpCgogICAgbWVtUGVhayA9IHVyd2lkLlRleHQoJ01lbSBQZWFrOiAwS2InKQogICAgZG1lbVBlYWsgPSB1cndpZC5BdHRyTWFwKG1lbVBlYWssJ2NvbnRleHQgcnVuJykKCgogICAgY29udGV4dFJ1biA9IHVyd2lkLkF0dHJXcmFwKHVyd2lkLkNvbHVtbnMoW2R0aW1lLGR0b3RhbFRpbWUsZG1lbSxkbWVtUGVha10sNCksICdicmlnaHQnKQoKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBwcmcgPSAgdXJ3aWQuUHJvZ3Jlc3NCYXIoJ3BnIG5vcm1hbCcsJ3BnIGNvbXBsZXRlJyxjdXJyZW50PTAsIGRvbmU9bGFwc2VSZWFkZXIuc3RlcHMpCgoKCjx8ZmltX2VuZHw+"]
["970ee6404db8237f0de4005be5a186ffe53b934f-2","970ee6404db8237f0de4005be5a186ffe53b934f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVyd2lkCmltcG9ydCByYW5kb20KaW1wb3J0IHN0cnVjdAppbXBvcnQgZ2V0b3B0CmltcG9ydCBzeXMKaW1wb3J0IG9zCgpjbGFzcyBMYXBzZVJlYWRlcjoKCiAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIHBhdGgpOgogICAgICAgIHNlbGYuaWR4RmlsZSA9IG9wZW4oZmlsZW5hbWUsIG1vZGU9J3JiJykKICAgICAgICBzZWxmLl9sb2FkSGVhZGVyKCkKICAgICAgICBzZWxmLmhlYWRlclNpemUgPSA5NgogICAgICAgIHNlbGYuY3VycmVudFN0ZXAgPSAwCgogICAgZGVmIGdldFN0ZXBEYXRhKHNlbGYsc3RlcCk6CiAgICAgICAgc2VsZi5jdXJyZW50U3RlcCA9IHN0ZXAKCiAgICAgICAgb2Zmc2V0ID0gc2VsZi5oZWFkZXJTaXplICsgc3RlcCAqIDY0OwogICAgICAgIHNlbGYuaWR4RmlsZS5zZWVrKG9mZnNldCwwKQoKICAgICAgICBudW0gPSBzdHJ1Y3QudW5wYWNrKCc8TCcsIHNlbGYuaWR4RmlsZS5yZWFkKDQpKVswXQogICAgICAgIGx0aW1lID0gc3RydWN0LnVucGFjaygnPEwnLCBzZWxmLmlkeEZpbGUucmVhZCg0KSlbMF0KICAgICAgICB0dGltZSA9IHN0cnVjdC51bnBhY2soJzxMJywgc2VsZi5pZHhGaWxlLnJlYWQoNCkpWzBdCiAgICAgICAgbWVtID0gc3RydWN0LnVucGFjaygnPEwnLCBzZWxmLmlkeEZpbGUucmVhZCg0KSlbMF0KICAgICAgICBtZW1fcGVhayA9IHN0cnVjdC51bnBhY2soJzxMJywgc2VsZi5pZHhGaWxlLnJlYWQoNCkpWzBdCiAgICAgICAgZm5hbWUgPSBzdHJ1Y3QudW5wYWNrKCcyMHMnLCBzZWxmLmlkeEZpbGUucmVhZCgyMCkpWzBdLnJzdHJpcCgnXHgwMCcpCiAgICAgICAgY25hbWUgPSBzdHJ1Y3QudW5wYWNrKCcyMHMnLCBzZWxmLmlkeEZpbGUucmVhZCgyMCkpWzBdLnJzdHJpcCgnXHgwMCcpCiAgICAgICAgY29udGV4dF9pbmRleCA9IHN0cnVjdC51bnBhY2soJzxMJywgc2VsZi5pZHhGaWxlLnJlYWQoNCkpWzBdCgoKICAgICAgICBzZWxmLmRhdEZpbGUuc2Vlayhjb250ZXh0X2luZGV4LDApCgogICAgICAgIGZpbGVuYW1lID0gc2VsZi5kYXRGaWxlLnJlYWRsaW5lKCkucnN0cmlwKCdcbicpCgogICAgICAgIE49MTEKICAgICAgICBjb250ZXh0ID1bXQogICAgICAgIGNvbnRleHQuZXh0ZW5kKHNlbGYuZGF0RmlsZS5yZWFkbGluZSgpIGZvciBpIGluIHhyYW5nZShOKSkKCgogICAgICAgIHJldHVybiB7Im51bSIgOiBudW0sCiAgICAgICAgICAgICAgICAibHRpbWUiIDogbHRpbWUsCiAgICAgICAgICAgICAgICAidHRpbWUiIDogdHRpbWUsCiAgICAgICAgICAgICAgICAibWVtIiA6IG1lbSwgCiAgICAgICAgICAgICAgICAibWVtX3BlYWsiIDogbWVtX3BlYWssCiAgICAgICAgICAgICAgICAiZm5hbWUiIDogZm5hbWUsCiAgICAgICAgICAgICAgICAiY25hbWUiIDogY25hbWUsCiAgICAgICAgICAgICAgICAiZmlsZW5hbWUiIDogZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAiY29udGV4dCIgOiBjb250ZXh0fQoKICAgIGRlZiByZXdpbmQoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0U3RlcERhdGEoMCkKCgogICAgZGVmIGdvTmV4dChzZWxmKToKICAgICAgICBpZiAoc2VsZi5jdXJyZW50U3RlcDxzZWxmLnN0ZXBzKToKICAgICAgICAgICAgc2VsZi5jdXJyZW50U3RlcCs9MQogICAgICAgIHJldHVybiBzZWxmLmdldFN0ZXBEYXRhKHNlbGYuY3VycmVudFN0ZXApCgogICAgZGVmIGdvQmFjayhzZWxmKToKICAgICAgICBpZiAoc2VsZi5jdXJyZW50U3RlcD4wKToKICAgICAgICAgICAgc2VsZi5jdXJyZW50U3RlcC09MQogICAgICAgIHJldHVybiBzZWxmLmdldFN0ZXBEYXRhKHNlbGYuY3VycmVudFN0ZXApCgogICAgZGVmIF9sb2FkSGVhZGVyKHNlbGYpOgogICAgICAgIHByaW50ICJSZWFkaW5nIGhlYWRlciIKICAgICAgICBzZWxmLnZlcnNpb24gPSBzdHJ1Y3QudW5wYWNrKCc8SCcsIHNlbGYuaWR4RmlsZS5yZWFkKDIpKVswXQogICAgICAgIHNlbGYuaWR4RmlsZU5hbWUgPSBzdHJ1Y3QudW5wYWNrKCc3MHMnLCBzZWxmLmlkeEZpbGUucmVhZCg3MCkpWzBdLnJzdHJpcCgnXHgwMCcpCiAgICAgICAgc2VsZi5kYXRGaWxlID0gb3BlbihwYXRoKyIvIitzZWxmLmlkeEZpbGVOYW1lLCBtb2RlPSdyYicpCiAgICAgICAgc2VsZi5kYXRlID0gc3RydWN0LnVucGFjaygnMjBzJywgc2VsZi5pZHhGaWxlLnJlYWQoMjApKVswXS5yc3RyaXAoJ1x4MDAnKQogICAgICAgIHNlbGYuc3RlcHMgPSBzdHJ1Y3QudW5wYWNrKCc8TCcsIHNlbGYuaWR4RmlsZS5yZWFkKDQpKVswXQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiAiVmVyc2lvbiAiICsgc3RyKHNlbGYudmVyc2lvbikgKyAiXG5EYXRlICIgKyBzZWxmLmRhdGUgKyAgIlxuU3RlcHMgIiArIHN0cihzZWxmLnN0ZXBzKSArICJcbiIKICAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICAgIAoKZGVmIG1haW4gKGxhcHNlUmVhZGVyKToKCiAgICBwYWxldHRlID0gWwogICAgICAgICgnYm9keScsJ3doaXRlJywgJycsICdzdGFuZG91dCcpLAogICAgICAgICgnY29udGV4dCcsJ2RhcmsgZ3JlZW4nLCAnJywgJ3N0YW5kb3V0JyksCiAgICAgICAgKCdjb250ZXh0IHJ1bicsJ2RhcmsgY3lhbicsICcnLCAnc3RhbmRvdXQnKSwKICAgICAgICAoJ2ZvY3VzJywnZGFyayByZWQnLCAnJywgJ3N0YW5kb3V0JyksCiAgICAgICAgKCdoZWFkJywnbGlnaHQgcmVkJywgJ2JsYWNrJyksCiAgICAgICAgKCdmb290ZXInLCdsaWdodCByZWQnLCAnYmxhY2snKSwKICAgICAgICAoJ3BnIG5vcm1hbCcsICAgICd3aGl0ZScsICAgICAgJ2JsYWNrJywgJ3N0YW5kb3V0JyksCiAgICAgICAgKCdwZyBjb21wbGV0ZScsICAnd2hpdGUnLCAgICAgICdsaWdodCBjeWFuJyksCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBdCgoKPHxmaW1fZW5kfD4="]
["970ee6404db8237f0de4005be5a186ffe53b934f-3","970ee6404db8237f0de4005be5a186ffe53b934f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVyd2lkCmltcG9ydCByYW5kb20KaW1wb3J0IHN0cnVjdAppbXBvcnQgZ2V0b3B0CmltcG9ydCBzeXMKaW1wb3J0IG9zCgpjbGFzcyBMYXBzZVJlYWRlcjoKCiAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIHBhdGgpOgogICAgICAgIHNlbGYuaWR4RmlsZSA9IG9wZW4oZmlsZW5hbWUsIG1vZGU9J3JiJykKICAgICAgICBzZWxmLl9sb2FkSGVhZGVyKCkKICAgICAgICBzZWxmLmhlYWRlclNpemUgPSA5NgogICAgICAgIHNlbGYuY3VycmVudFN0ZXAgPSAwCgogICAgZGVmIGdldFN0ZXBEYXRhKHNlbGYsc3RlcCk6CiAgICAgICAgc2VsZi5jdXJyZW50U3RlcCA9IHN0ZXAKCiAgICAgICAgb2Zmc2V0ID0gc2VsZi5oZWFkZXJTaXplICsgc3RlcCAqIDY0OwogICAgICAgIHNlbGYuaWR4RmlsZS5zZWVrKG9mZnNldCwwKQoKICAgICAgICBudW0gPSBzdHJ1Y3QudW5wYWNrKCc8TCcsIHNlbGYuaWR4RmlsZS5yZWFkKDQpKVswXQogICAgICAgIGx0aW1lID0gc3RydWN0LnVucGFjaygnPEwnLCBzZWxmLmlkeEZpbGUucmVhZCg0KSlbMF0KICAgICAgICB0dGltZSA9IHN0cnVjdC51bnBhY2soJzxMJywgc2VsZi5pZHhGaWxlLnJlYWQoNCkpWzBdCiAgICAgICAgbWVtID0gc3RydWN0LnVucGFjaygnPEwnLCBzZWxmLmlkeEZpbGUucmVhZCg0KSlbMF0KICAgICAgICBtZW1fcGVhayA9IHN0cnVjdC51bnBhY2soJzxMJywgc2VsZi5pZHhGaWxlLnJlYWQoNCkpWzBdCiAgICAgICAgZm5hbWUgPSBzdHJ1Y3QudW5wYWNrKCcyMHMnLCBzZWxmLmlkeEZpbGUucmVhZCgyMCkpWzBdLnJzdHJpcCgnXHgwMCcpCiAgICAgICAgY25hbWUgPSBzdHJ1Y3QudW5wYWNrKCcyMHMnLCBzZWxmLmlkeEZpbGUucmVhZCgyMCkpWzBdLnJzdHJpcCgnXHgwMCcpCiAgICAgICAgY29udGV4dF9pbmRleCA9IHN0cnVjdC51bnBhY2soJzxMJywgc2VsZi5pZHhGaWxlLnJlYWQoNCkpWzBdCgoKICAgICAgICBzZWxmLmRhdEZpbGUuc2Vlayhjb250ZXh0X2luZGV4LDApCgogICAgICAgIGZpbGVuYW1lID0gc2VsZi5kYXRGaWxlLnJlYWRsaW5lKCkucnN0cmlwKCdcbicpCgogICAgICAgIE49MTEKICAgICAgICBjb250ZXh0ID1bXQogICAgICAgIGNvbnRleHQuZXh0ZW5kKHNlbGYuZGF0RmlsZS5yZWFkbGluZSgpIGZvciBpIGluIHhyYW5nZShOKSkKCgogICAgICAgIHJldHVybiB7Im51bSIgOiBudW0sCiAgICAgICAgICAgICAgICAibHRpbWUiIDogbHRpbWUsCiAgICAgICAgICAgICAgICAidHRpbWUiIDogdHRpbWUsCiAgICAgICAgICAgICAgICAibWVtIiA6IG1lbSwgCiAgICAgICAgICAgICAgICAibWVtX3BlYWsiIDogbWVtX3BlYWssCiAgICAgICAgICAgICAgICAiZm5hbWUiIDogZm5hbWUsCiAgICAgICAgICAgICAgICAiY25hbWUiIDogY25hbWUsCiAgICAgICAgICAgICAgICAiZmlsZW5hbWUiIDogZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAiY29udGV4dCIgOiBjb250ZXh0fQoKICAgIGRlZiByZXdpbmQoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0U3RlcERhdGEoMCkKCgogICAgZGVmIGdvTmV4dChzZWxmKToKICAgICAgICBpZiAoc2VsZi5jdXJyZW50U3RlcDxzZWxmLnN0ZXBzKToKICAgICAgICAgICAgc2VsZi5jdXJyZW50U3RlcCs9MQogICAgICAgIHJldHVybiBzZWxmLmdldFN0ZXBEYXRhKHNlbGYuY3VycmVudFN0ZXApCgogICAgZGVmIGdvQmFjayhzZWxmKToKICAgICAgICBpZiAoc2VsZi5jdXJyZW50U3RlcD4wKToKICAgICAgICAgICAgc2VsZi5jdXJyZW50U3RlcC09MQogICAgICAgIHJldHVybiBzZWxmLmdldFN0ZXBEYXRhKHNlbGYuY3VycmVudFN0ZXApCgogICAgZGVmIF9sb2FkSGVhZGVyKHNlbGYpOgogICAgICAgIHByaW50ICJSZWFkaW5nIGhlYWRlciIKICAgICAgICBzZWxmLnZlcnNpb24gPSBzdHJ1Y3QudW5wYWNrKCc8SCcsIHNlbGYuaWR4RmlsZS5yZWFkKDIpKVswXQogICAgICAgIHNlbGYuaWR4RmlsZU5hbWUgPSBzdHJ1Y3QudW5wYWNrKCc3MHMnLCBzZWxmLmlkeEZpbGUucmVhZCg3MCkpWzBdLnJzdHJpcCgnXHgwMCcpCiAgICAgICAgc2VsZi5kYXRGaWxlID0gb3BlbihwYXRoKyIvIitzZWxmLmlkeEZpbGVOYW1lLCBtb2RlPSdyYicpCiAgICAgICAgc2VsZi5kYXRlID0gc3RydWN0LnVucGFjaygnMjBzJywgc2VsZi5pZHhGaWxlLnJlYWQoMjApKVswXS5yc3RyaXAoJ1x4MDAnKQogICAgICAgIHNlbGYuc3RlcHMgPSBzdHJ1Y3QudW5wYWNrKCc8TCcsIHNlbGYuaWR4RmlsZS5yZWFkKDQpKVswXQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiAiVmVyc2lvbiAiICsgc3RyKHNlbGYudmVyc2lvbikgKyAiXG5EYXRlICIgKyBzZWxmLmRhdGUgKyAgIlxuU3RlcHMgIiArIHN0cihzZWxmLnN0ZXBzKSArICJcbiIKICAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICAgIAoKZGVmIG1haW4gKGxhcHNlUmVhZGVyKToKCiAgICBwYWxldHRlID0gWwogICAgICAgICgnYm9keScsJ3doaXRlJywgJycsICdzdGFuZG91dCcpLAogICAgICAgICgnY29udGV4dCcsJ2RhcmsgZ3JlZW4nLCAnJywgJ3N0YW5kb3V0JyksCiAgICAgICAgKCdjb250ZXh0IHJ1bicsJ2RhcmsgY3lhbicsICcnLCAnc3RhbmRvdXQnKSwKICAgICAgICAoJ2ZvY3VzJywnZGFyayByZWQnLCAnJywgJ3N0YW5kb3V0JyksCiAgICAgICAgKCdoZWFkJywnbGlnaHQgcmVkJywgJ2JsYWNrJyksCiAgICAgICAgKCdmb290ZXInLCdsaWdodCByZWQnLCAnYmxhY2snKSwKICAgICAgICAoJ3BnIG5vcm1hbCcsICAgICd3aGl0ZScsICAgICAgJ2JsYWNrJywgJ3N0YW5kb3V0JyksCiAgICAgICAgKCdwZyBjb21wbGV0ZScsICAnd2hpdGUnLCAgICAgICdsaWdodCBjeWFuJyksCiAgICAgICAgXQoKCiAgICBkZWYga2V5c3Ryb2tlIChpbnB1dCk6CiAgICAgICAgaWYgaW5wdXQgaW4gKCdxJywgJ1EnKToKICAgICAgICAgICAgcmFpc2UgdXJ3aWQuRXhpdE1haW5Mb29wKCkKCiAgICAgICAgaWYgaW5wdXQgaW4gKCdyJywgJ1InKToKICAgICAgICAgICAgc3RlcCA9IGxhcHNlUmVhZGVyLnJld2luZCgpCiAgICAgICAgICAgIHdyaXRlU3RlcChzdGVwKQoKICAgICAgICBpZiBpbnB1dCBpcyAnbGVmdCc6CiAgICAgICAgICAgIHN0ZXAgPSBsYXBzZVJlYWRlci5nb0JhY2soKQogICAgICAgICAgICB3cml0ZVN0ZXAoc3RlcCkKCiAgICAgICAgaWYgaW5wdXQgaXMgJ3JpZ2h0JzoKICAgICAgICAgICAgc3RlcCA9IGxhcHNlUmVhZGVyLmdvTmV4dCgpCiAgICAgICAgICAgIHdyaXRlU3RlcChzdGVwKQoKICAgIGRlZiB3cml0ZVN0ZXAoc3RlcCk6CiAgICAgICAgc3RlcHMuc2V0X3RleHQoIlN0ZXA6ICIrc3RyKHN0ZXBbJ251bSddKSsiLyIrc3RyKGxhcHNlUmVhZGVyLnN0ZXBzKSkKICAgICAgICBjb250ZXh0Q29kZS5zZXRfdGV4dChzdGVwWydjb250ZXh0J10pCiAgICAgICAgZmlsZW5hbWUuc2V0X3RleHQoJ0ZpbGU6ICcgKyBzdGVwWydmaWxlbmFtZSddKQogICAgICAgIHRpbWUuc2V0X3RleHQoJ1RpbWU6ICcrc3RyKHN0ZXBbJ2x0aW1lJ10pICsndXMnKQogICAgICAgIHRvdGFsVGltZS5zZXRfdGV4dCgnVG90YWwgVGltZTogJyArc3RyKHN0ZXBbJ3R0aW1lJ10vMTAwMCkgKydtcycpCiAgICAgICAgbWVtLnNldF90ZXh0KCdNZW06ICcrc3RyKHN0ZXBbJ21lbSddKSsnS2InKQogICAgICAgIG1lbVBlYWsuc2V0X3RleHQoJ01lbSBQZWFrOiAnK3N0cihzdGVwWydtZW1fcGVhayddKSsnS2InKQogICAgICAgIGNuYW1lLnNldF90ZXh0KCdDbGFzczogJytzdGVwWydjbmFtZSddKQogICAgICAgIGZuYW1lLnNldF90ZXh0KCdGdW5jdGlvbjogJytzdGVwWydmbmFtZSddKQogICAgICAgIHByZy5zZXRfY29tcGxldGlvbihzdGVwWydudW0nXS0xKQoKCiAgICBoZWFkZXIgPSB1cndpZC5BdHRyTWFwKHVyd2lkLlRleHQoJ1BIUExhcHNlIFZpZXdlciAxLjAnKSwgJ2hlYWQnKQoKICAgIGNvbnRleHRDb2RlID0gdXJ3aWQuVGV4dCgnXG5cblxuXG5cblxuXG5cblxuXG4nKQogICAgY2VudGVyID0gdXJ3aWQuQXR0ck1hcChjb250ZXh0Q29kZSwnY29udGV4dCcpCiAgICBjZW50ZXIgPSB1cndpZC5MaW5lQm94KGNlbnRlcikKCgogICAgZmlsZW5hbWUgPSB1cndpZC5UZXh0KCdGaWxlOiAnKQoKICAgIHN0ZXBzID0gdXJ3aWQuVGV4dCgnU3RlcHM6ICcpCiAgICBjbmFtZSA9IHVyd2lkLlRleHQoJ0NsYXNzOiAnKQogICAgZm5hbWUgPSB1cndpZC5UZXh0KCdGdW5jdGlvbjogJykKICAgIG9vID0gdXJ3aWQuQ29sdW1ucyhbc3RlcHMsY25hbWUsZm5hbWVdKQoKICAgIHRpbWUgPSB1cndpZC5UZXh0KCdUaW1lOiAwbXMnKQogICAgZHRpbWUgPSB1cndpZC5BdHRyTWFwKHRpbWUsJ2NvbnRleHQgcnVuJykKCiAgICB0b3RhbFRpbWUgPSB1cndpZC5UZXh0KCdUb3RhbCBUaW1lOiAwbXMnKQogICAgZHRvdGFsVGltZSA9IHVyd2lkLkF0dHJNYXAodG90YWxUaW1lLCdjb250ZXh0IHJ1bicpCgogICAgbWVtID0gdXJ3aWQuVGV4dCgnTWVtOiAwS2InKQogICAgZG1lbSA9IHVyd2lkLkF0dHJNYXAobWVtLCdjb250ZXh0IHJ1bicpCgogICAgbWVtUGVhayA9IHVyd2lkLlRleHQoJ01lbSBQZWFrOiAwS2InKQogICAgZG1lbVBlYWsgPSB1cndpZC5BdHRyTWFwKG1lbVBlYWssJ2NvbnRleHQgcnVuJykKCgogICAgY29udGV4dFJ1biA9IHVyd2lkLkF0dHJXcmFwKHVyd2lkLkNvbHVtbnMoW2R0aW1lLGR0b3RhbFRpbWUsZG1lbSxkbWVtUGVha10sNCksICdicmlnaHQnKQoKCgogICAgcHJnID0gIHVyd2lkLlByb2dyZXNzQmFyKCdwZyBub3JtYWwnLCdwZyBjb21wbGV0ZScsY3VycmVudD0wLCBkb25lPWxhcHNlUmVhZGVyLnN0ZXBzKQoKCgogICAgbCA9IFsgdXJ3aWQuRGl2aWRlcigiPSIpLCBjb250ZXh0UnVuICwgdXJ3aWQuRGl2aWRlcigiPSIpLCBvbyAgLCB1cndpZC5EaXZpZGVyKCI9IiksIGZpbGVuYW1lLCB1cndpZC5EaXZpZGVyKCI9IiksIGNlbnRlciAsIHVyd2lkLkRpdmlkZXIoIj0iKSwgdXJ3aWQuRGl2aWRlcigpLHByZyAgXQogICAgdyA9IHVyd2lkLkxpc3RCb3godXJ3aWQuU2ltcGxlTGlzdFdhbGtlcihsKSkKCiAgICAjIEZyYW1lCiAgICB3ID0gdXJ3aWQuQXR0cldyYXAodywgJ2JvZHknKQoKCiAgICBmb290ZXIgPSB1cndpZC5Db2x1bW5zKFt1cndpZC5UZXh0KCdbUV06IFF1aXQnKSx1cndpZC5UZXh0KCdbUl06IFJld2luZCcpLHVyd2lkLlRleHQoJ1s8XTogQmFjaycpLHVyd2lkLlRleHQoJ1s+XTogTmV4dCcpXSw0KQogICAgZm9vdGVyID0gdXJ3aWQuQXR0ck1hcChmb290ZXIsICdmb290ZXInKQoKCiAgICB2aWV3ID0gdXJ3aWQuRnJhbWUoYm9keT13LCBoZWFkZXI9aGVhZGVyLCBmb290ZXI9Zm9vdGVyKQogICAgbG9vcCA9IHVyd2lkLk1haW5Mb29wKHZpZXcsIHBhbGV0dGUsIHVuaGFuZGxlZF9pbnB1dD1rZXlzdHJva2UpCgogICAgI2xvYWQgZmlyc3Qgc3RlcAogICAgd3JpdGVTdGVwKGxhcHNlUmVhZGVyLmdldFN0ZXBEYXRhKDApKQoKICAgIGxvb3AucnVuKCkKCmRlZiB1c2FnZSgpOgogICAgcHJpbnQgIkxhcHNlUmVhZGVyIC1pIGluZGV4X2ZpbGUuaWR4IFstcCBwYXRoX29mX2RhdGFfZmlsZV1cbiIKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdHJ5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAiaGk6cCIsIFsiaGVscCIsICJpbnB1dD0iLCAicGF0aD0iXSkKICAgIGV4Y2VwdCBnZXRvcHQuR2V0b3B0RXJyb3I6CiAgICAgICAgdXNhZ2UoKQogICAgICAgIHN5cy5leGl0KDIpCgogICAgcGF0aCA9IEZhbHNlCiAgICBpbmRleF9maWxlID0gRmFsc2UKICAgIGZvciBvcHQsIGFyZyBpbiBvcHRzOgogICAgICAgIGlmIG9wdCBpbiAoIi1oIiwgIi0taGVscCIpOgogICAgICAgICAgICB1c2FnZSgpICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHN5cy5leGl0KCkgICAgICAgICAgICAgIAogICAgICAgIGVsaWYgb3B0IGluICgiLWkiLCAiLS1pbnB1dCIpOgogICAgICAgICAgICBpbmRleF9maWxlID0gYXJnCiAgICAgICAgZWxpZiBvcHQgaW4gKCItcCIsICItLXBhdGgiKToKICAgICAgICAgICAgcGF0aCA9IGFyZwogICAgCiAgICBpZiAoaW5kZXhfZmlsZSAhPSBGYWxzZSBhbmQgcGF0aCA9PSBGYWxzZSkgOgo8fGZpbV9ob2xlfD4KICAgIGlmIChwYXRoPT1GYWxzZSBvciBpbmRleF9maWxlPT1GYWxzZSk6CiAgICAgICAgdXNhZ2UoKSAKICAgICAgICBzeXMuZXhpdCgpCgogICAgbGFwc2VSZWFkZXIgPSBMYXBzZVJlYWRlcihpbmRleF9maWxlLHBhdGgpCiAgICBwcmludCBzdHIobGFwc2VSZWFkZXIpCiAgICBtYWluKGxhcHNlUmVhZGVyKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoaW5kZXhfZmlsZSkKCjx8ZmltX2VuZHw+"]
["970ee6404db8237f0de4005be5a186ffe53b934f-4","970ee6404db8237f0de4005be5a186ffe53b934f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVyd2lkCmltcG9ydCByYW5kb20KaW1wb3J0IHN0cnVjdAppbXBvcnQgZ2V0b3B0CmltcG9ydCBzeXMKaW1wb3J0IG9zCgpjbGFzcyBMYXBzZVJlYWRlcjoKCiAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIHBhdGgpOgogICAgICAgIHNlbGYuaWR4RmlsZSA9IG9wZW4oZmlsZW5hbWUsIG1vZGU9J3JiJykKICAgICAgICBzZWxmLl9sb2FkSGVhZGVyKCkKICAgICAgICBzZWxmLmhlYWRlclNpemUgPSA5NgogICAgICAgIHNlbGYuY3VycmVudFN0ZXAgPSAwCgo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLmlkeEZpbGUuc2VlayhvZmZzZXQsMCkKCiAgICAgICAgbnVtID0gc3RydWN0LnVucGFjaygnPEwnLCBzZWxmLmlkeEZpbGUucmVhZCg0KSlbMF0KICAgICAgICBsdGltZSA9IHN0cnVjdC51bnBhY2soJzxMJywgc2VsZi5pZHhGaWxlLnJlYWQoNCkpWzBdCiAgICAgICAgdHRpbWUgPSBzdHJ1Y3QudW5wYWNrKCc8TCcsIHNlbGYuaWR4RmlsZS5yZWFkKDQpKVswXQogICAgICAgIG1lbSA9IHN0cnVjdC51bnBhY2soJzxMJywgc2VsZi5pZHhGaWxlLnJlYWQoNCkpWzBdCiAgICAgICAgbWVtX3BlYWsgPSBzdHJ1Y3QudW5wYWNrKCc8TCcsIHNlbGYuaWR4RmlsZS5yZWFkKDQpKVswXQogICAgICAgIGZuYW1lID0gc3RydWN0LnVucGFjaygnMjBzJywgc2VsZi5pZHhGaWxlLnJlYWQoMjApKVswXS5yc3RyaXAoJ1x4MDAnKQogICAgICAgIGNuYW1lID0gc3RydWN0LnVucGFjaygnMjBzJywgc2VsZi5pZHhGaWxlLnJlYWQoMjApKVswXS5yc3RyaXAoJ1x4MDAnKQogICAgICAgIGNvbnRleHRfaW5kZXggPSBzdHJ1Y3QudW5wYWNrKCc8TCcsIHNlbGYuaWR4RmlsZS5yZWFkKDQpKVswXQoKCiAgICAgICAgc2VsZi5kYXRGaWxlLnNlZWsoY29udGV4dF9pbmRleCwwKQoKICAgICAgICBmaWxlbmFtZSA9IHNlbGYuZGF0RmlsZS5yZWFkbGluZSgpLnJzdHJpcCgnXG4nKQoKICAgICAgICBOPTExCiAgICAgICAgY29udGV4dCA9W10KICAgICAgICBjb250ZXh0LmV4dGVuZChzZWxmLmRhdEZpbGUucmVhZGxpbmUoKSBmb3IgaSBpbiB4cmFuZ2UoTikpCgoKICAgICAgICByZXR1cm4geyJudW0iIDogbnVtLAogICAgICAgICAgICAgICAgImx0aW1lIiA6IGx0aW1lLAogICAgICAgICAgICAgICAgInR0aW1lIiA6IHR0aW1lLAogICAgICAgICAgICAgICAgIm1lbSIgOiBtZW0sIAogICAgICAgICAgICAgICAgIm1lbV9wZWFrIiA6IG1lbV9wZWFrLAogICAgICAgICAgICAgICAgImZuYW1lIiA6IGZuYW1lLAogICAgICAgICAgICAgICAgImNuYW1lIiA6IGNuYW1lLAogICAgICAgICAgICAgICAgImZpbGVuYW1lIiA6IGZpbGVuYW1lLAogICAgICAgICAgICAgICAgImNvbnRleHQiIDogY29udGV4dH0KCiAgICBkZWYgcmV3aW5kKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmdldFN0ZXBEYXRhKDApCgoKICAgIGRlZiBnb05leHQoc2VsZik6CiAgICAgICAgaWYgKHNlbGYuY3VycmVudFN0ZXA8c2VsZi5zdGVwcyk6CiAgICAgICAgICAgIHNlbGYuY3VycmVudFN0ZXArPTEKICAgICAgICByZXR1cm4gc2VsZi5nZXRTdGVwRGF0YShzZWxmLmN1cnJlbnRTdGVwKQoKICAgIGRlZiBnb0JhY2soc2VsZik6CiAgICAgICAgaWYgKHNlbGYuY3VycmVudFN0ZXA+MCk6CiAgICAgICAgICAgIHNlbGYuY3VycmVudFN0ZXAtPTEKICAgICAgICByZXR1cm4gc2VsZi5nZXRTdGVwRGF0YShzZWxmLmN1cnJlbnRTdGVwKQoKICAgIGRlZiBfbG9hZEhlYWRlcihzZWxmKToKICAgICAgICBwcmludCAiUmVhZGluZyBoZWFkZXIiCiAgICAgICAgc2VsZi52ZXJzaW9uID0gc3RydWN0LnVucGFjaygnPEgnLCBzZWxmLmlkeEZpbGUucmVhZCgyKSlbMF0KICAgICAgICBzZWxmLmlkeEZpbGVOYW1lID0gc3RydWN0LnVucGFjaygnNzBzJywgc2VsZi5pZHhGaWxlLnJlYWQoNzApKVswXS5yc3RyaXAoJ1x4MDAnKQogICAgICAgIHNlbGYuZGF0RmlsZSA9IG9wZW4ocGF0aCsiLyIrc2VsZi5pZHhGaWxlTmFtZSwgbW9kZT0ncmInKQogICAgICAgIHNlbGYuZGF0ZSA9IHN0cnVjdC51bnBhY2soJzIwcycsIHNlbGYuaWR4RmlsZS5yZWFkKDIwKSlbMF0ucnN0cmlwKCdceDAwJykKICAgICAgICBzZWxmLnN0ZXBzID0gc3RydWN0LnVucGFjaygnPEwnLCBzZWxmLmlkeEZpbGUucmVhZCg0KSlbMF0KCiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gIlZlcnNpb24gIiArIHN0cihzZWxmLnZlcnNpb24pICsgIlxuRGF0ZSAiICsgc2VsZi5kYXRlICsgICJcblN0ZXBzICIgKyBzdHIoc2VsZi5zdGVwcykgKyAiXG4iCiAgCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICAgICAKCmRlZiBtYWluIChsYXBzZVJlYWRlcik6CgogICAgcGFsZXR0ZSA9IFsKICAgICAgICAoJ2JvZHknLCd3aGl0ZScsICcnLCAnc3RhbmRvdXQnKSwKICAgICAgICAoJ2NvbnRleHQnLCdkYXJrIGdyZWVuJywgJycsICdzdGFuZG91dCcpLAogICAgICAgICgnY29udGV4dCBydW4nLCdkYXJrIGN5YW4nLCAnJywgJ3N0YW5kb3V0JyksCiAgICAgICAgKCdmb2N1cycsJ2RhcmsgcmVkJywgJycsICdzdGFuZG91dCcpLAogICAgICAgICgnaGVhZCcsJ2xpZ2h0IHJlZCcsICdibGFjaycpLAogICAgICAgICgnZm9vdGVyJywnbGlnaHQgcmVkJywgJ2JsYWNrJyksCiAgICAgICAgKCdwZyBub3JtYWwnLCAgICAnd2hpdGUnLCAgICAgICdibGFjaycsICdzdGFuZG91dCcpLAogICAgICAgICgncGcgY29tcGxldGUnLCAgJ3doaXRlJywgICAgICAnbGlnaHQgY3lhbicpLAogICAgICAgIF0KCgogICAgZGVmIGtleXN0cm9rZSAoaW5wdXQpOgogICAgICAgIGlmIGlucHV0IGluICgncScsICdRJyk6CiAgICAgICAgICAgIHJhaXNlIHVyd2lkLkV4aXRNYWluTG9vcCgpCgogICAgICAgIGlmIGlucHV0IGluICgncicsICdSJyk6CiAgICAgICAgICAgIHN0ZXAgPSBsYXBzZVJlYWRlci5yZXdpbmQoKQogICAgICAgICAgICB3cml0ZVN0ZXAoc3RlcCkKCiAgICAgICAgaWYgaW5wdXQgaXMgJ2xlZnQnOgogICAgICAgICAgICBzdGVwID0gbGFwc2VSZWFkZXIuZ29CYWNrKCkKICAgICAgICAgICAgd3JpdGVTdGVwKHN0ZXApCgogICAgICAgIGlmIGlucHV0IGlzICdyaWdodCc6CiAgICAgICAgICAgIHN0ZXAgPSBsYXBzZVJlYWRlci5nb05leHQoKQogICAgICAgICAgICB3cml0ZVN0ZXAoc3RlcCkKCiAgICBkZWYgd3JpdGVTdGVwKHN0ZXApOgogICAgICAgIHN0ZXBzLnNldF90ZXh0KCJTdGVwOiAiK3N0cihzdGVwWydudW0nXSkrIi8iK3N0cihsYXBzZVJlYWRlci5zdGVwcykpCiAgICAgICAgY29udGV4dENvZGUuc2V0X3RleHQoc3RlcFsnY29udGV4dCddKQogICAgICAgIGZpbGVuYW1lLnNldF90ZXh0KCdGaWxlOiAnICsgc3RlcFsnZmlsZW5hbWUnXSkKICAgICAgICB0aW1lLnNldF90ZXh0KCdUaW1lOiAnK3N0cihzdGVwWydsdGltZSddKSArJ3VzJykKICAgICAgICB0b3RhbFRpbWUuc2V0X3RleHQoJ1RvdGFsIFRpbWU6ICcgK3N0cihzdGVwWyd0dGltZSddLzEwMDApICsnbXMnKQogICAgICAgIG1lbS5zZXRfdGV4dCgnTWVtOiAnK3N0cihzdGVwWydtZW0nXSkrJ0tiJykKICAgICAgICBtZW1QZWFrLnNldF90ZXh0KCdNZW0gUGVhazogJytzdHIoc3RlcFsnbWVtX3BlYWsnXSkrJ0tiJykKICAgICAgICBjbmFtZS5zZXRfdGV4dCgnQ2xhc3M6ICcrc3RlcFsnY25hbWUnXSkKICAgICAgICBmbmFtZS5zZXRfdGV4dCgnRnVuY3Rpb246ICcrc3RlcFsnZm5hbWUnXSkKICAgICAgICBwcmcuc2V0X2NvbXBsZXRpb24oc3RlcFsnbnVtJ10tMSkKCgogICAgaGVhZGVyID0gdXJ3aWQuQXR0ck1hcCh1cndpZC5UZXh0KCdQSFBMYXBzZSBWaWV3ZXIgMS4wJyksICdoZWFkJykKCiAgICBjb250ZXh0Q29kZSA9IHVyd2lkLlRleHQoJ1xuXG5cblxuXG5cblxuXG5cblxuJykKICAgIGNlbnRlciA9IHVyd2lkLkF0dHJNYXAoY29udGV4dENvZGUsJ2NvbnRleHQnKQogICAgY2VudGVyID0gdXJ3aWQuTGluZUJveChjZW50ZXIpCgoKICAgIGZpbGVuYW1lID0gdXJ3aWQuVGV4dCgnRmlsZTogJykKCiAgICBzdGVwcyA9IHVyd2lkLlRleHQoJ1N0ZXBzOiAnKQogICAgY25hbWUgPSB1cndpZC5UZXh0KCdDbGFzczogJykKICAgIGZuYW1lID0gdXJ3aWQuVGV4dCgnRnVuY3Rpb246ICcpCiAgICBvbyA9IHVyd2lkLkNvbHVtbnMoW3N0ZXBzLGNuYW1lLGZuYW1lXSkKCiAgICB0aW1lID0gdXJ3aWQuVGV4dCgnVGltZTogMG1zJykKICAgIGR0aW1lID0gdXJ3aWQuQXR0ck1hcCh0aW1lLCdjb250ZXh0IHJ1bicpCgogICAgdG90YWxUaW1lID0gdXJ3aWQuVGV4dCgnVG90YWwgVGltZTogMG1zJykKICAgIGR0b3RhbFRpbWUgPSB1cndpZC5BdHRyTWFwKHRvdGFsVGltZSwnY29udGV4dCBydW4nKQoKICAgIG1lbSA9IHVyd2lkLlRleHQoJ01lbTogMEtiJykKICAgIGRtZW0gPSB1cndpZC5BdHRyTWFwKG1lbSwnY29udGV4dCBydW4nKQoKICAgIG1lbVBlYWsgPSB1cndpZC5UZXh0KCdNZW0gUGVhazogMEtiJykKICAgIGRtZW1QZWFrID0gdXJ3aWQuQXR0ck1hcChtZW1QZWFrLCdjb250ZXh0IHJ1bicpCgoKICAgIGNvbnRleHRSdW4gPSB1cndpZC5BdHRyV3JhcCh1cndpZC5Db2x1bW5zKFtkdGltZSxkdG90YWxUaW1lLGRtZW0sZG1lbVBlYWtdLDQpLCAnYnJpZ2h0JykKCgoKICAgIHByZyA9ICB1cndpZC5Qcm9ncmVzc0JhcigncGcgbm9ybWFsJywncGcgY29tcGxldGUnLGN1cnJlbnQ9MCwgZG9uZT1sYXBzZVJlYWRlci5zdGVwcykKCgoKICAgIGwgPSBbIHVyd2lkLkRpdmlkZXIoIj0iKSwgY29udGV4dFJ1biAsIHVyd2lkLkRpdmlkZXIoIj0iKSwgb28gICwgdXJ3aWQuRGl2aWRlcigiPSIpLCBmaWxlbmFtZSwgdXJ3aWQuRGl2aWRlcigiPSIpLCBjZW50ZXIgLCB1cndpZC5EaXZpZGVyKCI9IiksIHVyd2lkLkRpdmlkZXIoKSxwcmcgIF0KICAgIHcgPSB1cndpZC5MaXN0Qm94KHVyd2lkLlNpbXBsZUxpc3RXYWxrZXIobCkpCgogICAgIyBGcmFtZQogICAgdyA9IHVyd2lkLkF0dHJXcmFwKHcsICdib2R5JykKCgogICAgZm9vdGVyID0gdXJ3aWQuQ29sdW1ucyhbdXJ3aWQuVGV4dCgnW1FdOiBRdWl0JyksdXJ3aWQuVGV4dCgnW1JdOiBSZXdpbmQnKSx1cndpZC5UZXh0KCdbPF06IEJhY2snKSx1cndpZC5UZXh0KCdbPl06IE5leHQnKV0sNCkKICAgIGZvb3RlciA9IHVyd2lkLkF0dHJNYXAoZm9vdGVyLCAnZm9vdGVyJykKCgogICAgdmlldyA9IHVyd2lkLkZyYW1lKGJvZHk9dywgaGVhZGVyPWhlYWRlciwgZm9vdGVyPWZvb3RlcikKICAgIGxvb3AgPSB1cndpZC5NYWluTG9vcCh2aWV3LCBwYWxldHRlLCB1bmhhbmRsZWRfaW5wdXQ9a2V5c3Ryb2tlKQoKICAgICNsb2FkIGZpcnN0IHN0ZXAKICAgIHdyaXRlU3RlcChsYXBzZVJlYWRlci5nZXRTdGVwRGF0YSgwKSkKCiAgICBsb29wLnJ1bigpCgpkZWYgdXNhZ2UoKToKICAgIHByaW50ICJMYXBzZVJlYWRlciAtaSBpbmRleF9maWxlLmlkeCBbLXAgcGF0aF9vZl9kYXRhX2ZpbGVdXG4iCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHRyeTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgImhpOnAiLCBbImhlbHAiLCAiaW5wdXQ9IiwgInBhdGg9Il0pCiAgICBleGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yOgogICAgICAgIHVzYWdlKCkKICAgICAgICBzeXMuZXhpdCgyKQoKICAgIHBhdGggPSBGYWxzZQogICAgaW5kZXhfZmlsZSA9IEZhbHNlCiAgICBmb3Igb3B0LCBhcmcgaW4gb3B0czoKICAgICAgICBpZiBvcHQgaW4gKCItaCIsICItLWhlbHAiKToKICAgICAgICAgICAgdXNhZ2UoKSAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBzeXMuZXhpdCgpICAgICAgICAgICAgICAKICAgICAgICBlbGlmIG9wdCBpbiAoIi1pIiwgIi0taW5wdXQiKToKICAgICAgICAgICAgaW5kZXhfZmlsZSA9IGFyZwogICAgICAgIGVsaWYgb3B0IGluICgiLXAiLCAiLS1wYXRoIik6CiAgICAgICAgICAgIHBhdGggPSBhcmcKICAgIAogICAgaWYgKGluZGV4X2ZpbGUgIT0gRmFsc2UgYW5kIHBhdGggPT0gRmFsc2UpIDoKICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKGluZGV4X2ZpbGUpCgogICAgaWYgKHBhdGg9PUZhbHNlIG9yIGluZGV4X2ZpbGU9PUZhbHNlKToKICAgICAgICB1c2FnZSgpIAogICAgICAgIHN5cy5leGl0KCkKCiAgICBsYXBzZVJlYWRlciA9IExhcHNlUmVhZGVyKGluZGV4X2ZpbGUscGF0aCkKICAgIHByaW50IHN0cihsYXBzZVJlYWRlcikKICAgIG1haW4obGFwc2VSZWFkZXIpCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgZ2V0U3RlcERhdGEoc2VsZixzdGVwKToKICAgICAgICBzZWxmLmN1cnJlbnRTdGVwID0gc3RlcAoKICAgICAgICBvZmZzZXQgPSBzZWxmLmhlYWRlclNpemUgKyBzdGVwICogNjQ7Cjx8ZmltX2VuZHw+"]
["970ee6404db8237f0de4005be5a186ffe53b934f-5","970ee6404db8237f0de4005be5a186ffe53b934f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVyd2lkCmltcG9ydCByYW5kb20KaW1wb3J0IHN0cnVjdAppbXBvcnQgZ2V0b3B0CmltcG9ydCBzeXMKaW1wb3J0IG9zCgpjbGFzcyBMYXBzZVJlYWRlcjoKCiAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIHBhdGgpOgogICAgICAgIHNlbGYuaWR4RmlsZSA9IG9wZW4oZmlsZW5hbWUsIG1vZGU9J3JiJykKICAgICAgICBzZWxmLl9sb2FkSGVhZGVyKCkKICAgICAgICBzZWxmLmhlYWRlclNpemUgPSA5NgogICAgICAgIHNlbGYuY3VycmVudFN0ZXAgPSAwCgogICAgZGVmIGdldFN0ZXBEYXRhKHNlbGYsc3RlcCk6CiAgICAgICAgc2VsZi5jdXJyZW50U3RlcCA9IHN0ZXAKCiAgICAgICAgb2Zmc2V0ID0gc2VsZi5oZWFkZXJTaXplICsgc3RlcCAqIDY0OwogICAgICAgIHNlbGYuaWR4RmlsZS5zZWVrKG9mZnNldCwwKQoKICAgICAgICBudW0gPSBzdHJ1Y3QudW5wYWNrKCc8TCcsIHNlbGYuaWR4RmlsZS5yZWFkKDQpKVswXQogICAgICAgIGx0aW1lID0gc3RydWN0LnVucGFjaygnPEwnLCBzZWxmLmlkeEZpbGUucmVhZCg0KSlbMF0KICAgICAgICB0dGltZSA9IHN0cnVjdC51bnBhY2soJzxMJywgc2VsZi5pZHhGaWxlLnJlYWQoNCkpWzBdCiAgICAgICAgbWVtID0gc3RydWN0LnVucGFjaygnPEwnLCBzZWxmLmlkeEZpbGUucmVhZCg0KSlbMF0KICAgICAgICBtZW1fcGVhayA9IHN0cnVjdC51bnBhY2soJzxMJywgc2VsZi5pZHhGaWxlLnJlYWQoNCkpWzBdCiAgICAgICAgZm5hbWUgPSBzdHJ1Y3QudW5wYWNrKCcyMHMnLCBzZWxmLmlkeEZpbGUucmVhZCgyMCkpWzBdLnJzdHJpcCgnXHgwMCcpCiAgICAgICAgY25hbWUgPSBzdHJ1Y3QudW5wYWNrKCcyMHMnLCBzZWxmLmlkeEZpbGUucmVhZCgyMCkpWzBdLnJzdHJpcCgnXHgwMCcpCiAgICAgICAgY29udGV4dF9pbmRleCA9IHN0cnVjdC51bnBhY2soJzxMJywgc2VsZi5pZHhGaWxlLnJlYWQoNCkpWzBdCgoKICAgICAgICBzZWxmLmRhdEZpbGUuc2Vlayhjb250ZXh0X2luZGV4LDApCgogICAgICAgIGZpbGVuYW1lID0gc2VsZi5kYXRGaWxlLnJlYWRsaW5lKCkucnN0cmlwKCdcbicpCgogICAgICAgIE49MTEKICAgICAgICBjb250ZXh0ID1bXQogICAgICAgIGNvbnRleHQuZXh0ZW5kKHNlbGYuZGF0RmlsZS5yZWFkbGluZSgpIGZvciBpIGluIHhyYW5nZShOKSkKCgogICAgICAgIHJldHVybiB7Im51bSIgOiBudW0sCiAgICAgICAgICAgICAgICAibHRpbWUiIDogbHRpbWUsCiAgICAgICAgICAgICAgICAidHRpbWUiIDogdHRpbWUsCiAgICAgICAgICAgICAgICAibWVtIiA6IG1lbSwgCiAgICAgICAgICAgICAgICAibWVtX3BlYWsiIDogbWVtX3BlYWssCiAgICAgICAgICAgICAgICAiZm5hbWUiIDogZm5hbWUsCiAgICAgICAgICAgICAgICAiY25hbWUiIDogY25hbWUsCiAgICAgICAgICAgICAgICAiZmlsZW5hbWUiIDogZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAiY29udGV4dCIgOiBjb250ZXh0fQoKICAgIGRlZiByZXdpbmQoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0U3RlcERhdGEoMCkKCgogICAgZGVmIGdvTmV4dChzZWxmKToKICAgICAgICBpZiAoc2VsZi5jdXJyZW50U3RlcDxzZWxmLnN0ZXBzKToKICAgICAgICAgICAgc2VsZi5jdXJyZW50U3RlcCs9MQogICAgICAgIHJldHVybiBzZWxmLmdldFN0ZXBEYXRhKHNlbGYuY3VycmVudFN0ZXApCgogICAgZGVmIGdvQmFjayhzZWxmKToKICAgICAgICBpZiAoc2VsZi5jdXJyZW50U3RlcD4wKToKICAgICAgICAgICAgc2VsZi5jdXJyZW50U3RlcC09MQogICAgICAgIHJldHVybiBzZWxmLmdldFN0ZXBEYXRhKHNlbGYuY3VycmVudFN0ZXApCgogICAgZGVmIF9sb2FkSGVhZGVyKHNlbGYpOgogICAgICAgIHByaW50ICJSZWFkaW5nIGhlYWRlciIKICAgICAgICBzZWxmLnZlcnNpb24gPSBzdHJ1Y3QudW5wYWNrKCc8SCcsIHNlbGYuaWR4RmlsZS5yZWFkKDIpKVswXQogICAgICAgIHNlbGYuaWR4RmlsZU5hbWUgPSBzdHJ1Y3QudW5wYWNrKCc3MHMnLCBzZWxmLmlkeEZpbGUucmVhZCg3MCkpWzBdLnJzdHJpcCgnXHgwMCcpCiAgICAgICAgc2VsZi5kYXRGaWxlID0gb3BlbihwYXRoKyIvIitzZWxmLmlkeEZpbGVOYW1lLCBtb2RlPSdyYicpCiAgICAgICAgc2VsZi5kYXRlID0gc3RydWN0LnVucGFjaygnMjBzJywgc2VsZi5pZHhGaWxlLnJlYWQoMjApKVswXS5yc3RyaXAoJ1x4MDAnKQogICAgICAgIHNlbGYuc3RlcHMgPSBzdHJ1Y3QudW5wYWNrKCc8TCcsIHNlbGYuaWR4RmlsZS5yZWFkKDQpKVswXQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiAiVmVyc2lvbiAiICsgc3RyKHNlbGYudmVyc2lvbikgKyAiXG5EYXRlICIgKyBzZWxmLmRhdGUgKyAgIlxuU3RlcHMgIiArIHN0cihzZWxmLnN0ZXBzKSArICJcbiIKICAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICAgIAoKZGVmIG1haW4gKGxhcHNlUmVhZGVyKToKCiAgICBwYWxldHRlID0gWwogICAgICAgICgnYm9keScsJ3doaXRlJywgJycsICdzdGFuZG91dCcpLAogICAgICAgICgnY29udGV4dCcsJ2RhcmsgZ3JlZW4nLCAnJywgJ3N0YW5kb3V0JyksCiAgICAgICAgKCdjb250ZXh0IHJ1bicsJ2RhcmsgY3lhbicsICcnLCAnc3RhbmRvdXQnKSwKICAgICAgICAoJ2ZvY3VzJywnZGFyayByZWQnLCAnJywgJ3N0YW5kb3V0JyksCiAgICAgICAgKCdoZWFkJywnbGlnaHQgcmVkJywgJ2JsYWNrJyksCiAgICAgICAgKCdmb290ZXInLCdsaWdodCByZWQnLCAnYmxhY2snKSwKICAgICAgICAoJ3BnIG5vcm1hbCcsICAgICd3aGl0ZScsICAgICAgJ2JsYWNrJywgJ3N0YW5kb3V0JyksCiAgICAgICAgKCdwZyBjb21wbGV0ZScsICAnd2hpdGUnLCAgICAgICdsaWdodCBjeWFuJyksCiAgICAgICAgXQoKPHxmaW1faG9sZXw+CgogICAgICAgIGlmIGlucHV0IGluICgncicsICdSJyk6CiAgICAgICAgICAgIHN0ZXAgPSBsYXBzZVJlYWRlci5yZXdpbmQoKQogICAgICAgICAgICB3cml0ZVN0ZXAoc3RlcCkKCiAgICAgICAgaWYgaW5wdXQgaXMgJ2xlZnQnOgogICAgICAgICAgICBzdGVwID0gbGFwc2VSZWFkZXIuZ29CYWNrKCkKICAgICAgICAgICAgd3JpdGVTdGVwKHN0ZXApCgogICAgICAgIGlmIGlucHV0IGlzICdyaWdodCc6CiAgICAgICAgICAgIHN0ZXAgPSBsYXBzZVJlYWRlci5nb05leHQoKQogICAgICAgICAgICB3cml0ZVN0ZXAoc3RlcCkKCiAgICBkZWYgd3JpdGVTdGVwKHN0ZXApOgogICAgICAgIHN0ZXBzLnNldF90ZXh0KCJTdGVwOiAiK3N0cihzdGVwWydudW0nXSkrIi8iK3N0cihsYXBzZVJlYWRlci5zdGVwcykpCiAgICAgICAgY29udGV4dENvZGUuc2V0X3RleHQoc3RlcFsnY29udGV4dCddKQogICAgICAgIGZpbGVuYW1lLnNldF90ZXh0KCdGaWxlOiAnICsgc3RlcFsnZmlsZW5hbWUnXSkKICAgICAgICB0aW1lLnNldF90ZXh0KCdUaW1lOiAnK3N0cihzdGVwWydsdGltZSddKSArJ3VzJykKICAgICAgICB0b3RhbFRpbWUuc2V0X3RleHQoJ1RvdGFsIFRpbWU6ICcgK3N0cihzdGVwWyd0dGltZSddLzEwMDApICsnbXMnKQogICAgICAgIG1lbS5zZXRfdGV4dCgnTWVtOiAnK3N0cihzdGVwWydtZW0nXSkrJ0tiJykKICAgICAgICBtZW1QZWFrLnNldF90ZXh0KCdNZW0gUGVhazogJytzdHIoc3RlcFsnbWVtX3BlYWsnXSkrJ0tiJykKICAgICAgICBjbmFtZS5zZXRfdGV4dCgnQ2xhc3M6ICcrc3RlcFsnY25hbWUnXSkKICAgICAgICBmbmFtZS5zZXRfdGV4dCgnRnVuY3Rpb246ICcrc3RlcFsnZm5hbWUnXSkKICAgICAgICBwcmcuc2V0X2NvbXBsZXRpb24oc3RlcFsnbnVtJ10tMSkKCgogICAgaGVhZGVyID0gdXJ3aWQuQXR0ck1hcCh1cndpZC5UZXh0KCdQSFBMYXBzZSBWaWV3ZXIgMS4wJyksICdoZWFkJykKCiAgICBjb250ZXh0Q29kZSA9IHVyd2lkLlRleHQoJ1xuXG5cblxuXG5cblxuXG5cblxuJykKICAgIGNlbnRlciA9IHVyd2lkLkF0dHJNYXAoY29udGV4dENvZGUsJ2NvbnRleHQnKQogICAgY2VudGVyID0gdXJ3aWQuTGluZUJveChjZW50ZXIpCgoKICAgIGZpbGVuYW1lID0gdXJ3aWQuVGV4dCgnRmlsZTogJykKCiAgICBzdGVwcyA9IHVyd2lkLlRleHQoJ1N0ZXBzOiAnKQogICAgY25hbWUgPSB1cndpZC5UZXh0KCdDbGFzczogJykKICAgIGZuYW1lID0gdXJ3aWQuVGV4dCgnRnVuY3Rpb246ICcpCiAgICBvbyA9IHVyd2lkLkNvbHVtbnMoW3N0ZXBzLGNuYW1lLGZuYW1lXSkKCiAgICB0aW1lID0gdXJ3aWQuVGV4dCgnVGltZTogMG1zJykKICAgIGR0aW1lID0gdXJ3aWQuQXR0ck1hcCh0aW1lLCdjb250ZXh0IHJ1bicpCgogICAgdG90YWxUaW1lID0gdXJ3aWQuVGV4dCgnVG90YWwgVGltZTogMG1zJykKICAgIGR0b3RhbFRpbWUgPSB1cndpZC5BdHRyTWFwKHRvdGFsVGltZSwnY29udGV4dCBydW4nKQoKICAgIG1lbSA9IHVyd2lkLlRleHQoJ01lbTogMEtiJykKICAgIGRtZW0gPSB1cndpZC5BdHRyTWFwKG1lbSwnY29udGV4dCBydW4nKQoKICAgIG1lbVBlYWsgPSB1cndpZC5UZXh0KCdNZW0gUGVhazogMEtiJykKICAgIGRtZW1QZWFrID0gdXJ3aWQuQXR0ck1hcChtZW1QZWFrLCdjb250ZXh0IHJ1bicpCgoKICAgIGNvbnRleHRSdW4gPSB1cndpZC5BdHRyV3JhcCh1cndpZC5Db2x1bW5zKFtkdGltZSxkdG90YWxUaW1lLGRtZW0sZG1lbVBlYWtdLDQpLCAnYnJpZ2h0JykKCgoKICAgIHByZyA9ICB1cndpZC5Qcm9ncmVzc0JhcigncGcgbm9ybWFsJywncGcgY29tcGxldGUnLGN1cnJlbnQ9MCwgZG9uZT1sYXBzZVJlYWRlci5zdGVwcykKCgoKICAgIGwgPSBbIHVyd2lkLkRpdmlkZXIoIj0iKSwgY29udGV4dFJ1biAsIHVyd2lkLkRpdmlkZXIoIj0iKSwgb28gICwgdXJ3aWQuRGl2aWRlcigiPSIpLCBmaWxlbmFtZSwgdXJ3aWQuRGl2aWRlcigiPSIpLCBjZW50ZXIgLCB1cndpZC5EaXZpZGVyKCI9IiksIHVyd2lkLkRpdmlkZXIoKSxwcmcgIF0KICAgIHcgPSB1cndpZC5MaXN0Qm94KHVyd2lkLlNpbXBsZUxpc3RXYWxrZXIobCkpCgogICAgIyBGcmFtZQogICAgdyA9IHVyd2lkLkF0dHJXcmFwKHcsICdib2R5JykKCgogICAgZm9vdGVyID0gdXJ3aWQuQ29sdW1ucyhbdXJ3aWQuVGV4dCgnW1FdOiBRdWl0JyksdXJ3aWQuVGV4dCgnW1JdOiBSZXdpbmQnKSx1cndpZC5UZXh0KCdbPF06IEJhY2snKSx1cndpZC5UZXh0KCdbPl06IE5leHQnKV0sNCkKICAgIGZvb3RlciA9IHVyd2lkLkF0dHJNYXAoZm9vdGVyLCAnZm9vdGVyJykKCgogICAgdmlldyA9IHVyd2lkLkZyYW1lKGJvZHk9dywgaGVhZGVyPWhlYWRlciwgZm9vdGVyPWZvb3RlcikKICAgIGxvb3AgPSB1cndpZC5NYWluTG9vcCh2aWV3LCBwYWxldHRlLCB1bmhhbmRsZWRfaW5wdXQ9a2V5c3Ryb2tlKQoKICAgICNsb2FkIGZpcnN0IHN0ZXAKICAgIHdyaXRlU3RlcChsYXBzZVJlYWRlci5nZXRTdGVwRGF0YSgwKSkKCiAgICBsb29wLnJ1bigpCgpkZWYgdXNhZ2UoKToKICAgIHByaW50ICJMYXBzZVJlYWRlciAtaSBpbmRleF9maWxlLmlkeCBbLXAgcGF0aF9vZl9kYXRhX2ZpbGVdXG4iCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHRyeTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgImhpOnAiLCBbImhlbHAiLCAiaW5wdXQ9IiwgInBhdGg9Il0pCiAgICBleGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yOgogICAgICAgIHVzYWdlKCkKICAgICAgICBzeXMuZXhpdCgyKQoKICAgIHBhdGggPSBGYWxzZQogICAgaW5kZXhfZmlsZSA9IEZhbHNlCiAgICBmb3Igb3B0LCBhcmcgaW4gb3B0czoKICAgICAgICBpZiBvcHQgaW4gKCItaCIsICItLWhlbHAiKToKICAgICAgICAgICAgdXNhZ2UoKSAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBzeXMuZXhpdCgpICAgICAgICAgICAgICAKICAgICAgICBlbGlmIG9wdCBpbiAoIi1pIiwgIi0taW5wdXQiKToKICAgICAgICAgICAgaW5kZXhfZmlsZSA9IGFyZwogICAgICAgIGVsaWYgb3B0IGluICgiLXAiLCAiLS1wYXRoIik6CiAgICAgICAgICAgIHBhdGggPSBhcmcKICAgIAogICAgaWYgKGluZGV4X2ZpbGUgIT0gRmFsc2UgYW5kIHBhdGggPT0gRmFsc2UpIDoKICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKGluZGV4X2ZpbGUpCgogICAgaWYgKHBhdGg9PUZhbHNlIG9yIGluZGV4X2ZpbGU9PUZhbHNlKToKICAgICAgICB1c2FnZSgpIAogICAgICAgIHN5cy5leGl0KCkKCiAgICBsYXBzZVJlYWRlciA9IExhcHNlUmVhZGVyKGluZGV4X2ZpbGUscGF0aCkKICAgIHByaW50IHN0cihsYXBzZVJlYWRlcikKICAgIG1haW4obGFwc2VSZWFkZXIpCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIGtleXN0cm9rZSAoaW5wdXQpOgogICAgICAgIGlmIGlucHV0IGluICgncScsICdRJyk6CiAgICAgICAgICAgIHJhaXNlIHVyd2lkLkV4aXRNYWluTG9vcCgpCjx8ZmltX2VuZHw+"]
["00f1c5e9ad01568746952f611192be81584b6805-1","00f1c5e9ad01568746952f611192be81584b6805","PHxmaW1fcHJlZml4fD4KIiIiCgpVc2VyRGF0YSBhbmQgSGFzVXNlckRhdGEgYWxsb3cgYSBQeXRob24gY2xhc3MgdG8gaGF2ZSBhbiB1bmRlcnNjb3JlIGBfYCBwcm9wZXJ0eSBmb3IKYWNjZXNzaW5nIGN1c3RvbSBmaWVsZHMuIERhdGEgY2FwdHVyZWQgd2l0aGluIHRoaXMgcHJvcGVydHkgY2FuIGJlIHNlcmlhbGl6ZWQgYWxvbmcgd2l0aAphbnkgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzLgoKIiIiCmZyb20gdHlwaW5nIGltcG9ydCBBbnksIENhbGxhYmxlLCBEaWN0LCBPcHRpb25hbAoKCmNsYXNzIFVzZXJEYXRhOgogICAgX2RhdGE6IERpY3Rbc3RyLCBBbnldCiAgICBfY2FsbGJhY2s6IE9wdGlvbmFsW0NhbGxhYmxlW1tBbnldLCBOb25lXV0KCiAgICBkZWYgX19pbml0X18oc2VsZiwgYWZ0ZXJfc2V0X2NhbGxiYWNrOiBDYWxsYWJsZVtbQW55XSwgTm9uZV0gPSBOb25lKToKICAgICAgICAjIFVzZSBvYmplY3QuX19zZXRhdHRyX18gdG8gYXZvaWQgbG9vcCBvbiBzZWxmLl9fc2V0YXR0cl9fIGR1cmluZyBpbml0Cjx8ZmltX2hvbGV8PgogICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWU6IHN0ciwgdmFsdWU6IEFueSkgLT4gTm9uZToKICAgICAgICBpZiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihmIkNhbm5vdCBzZXQgcmVzZXJ2ZWQgbmFtZSB7bmFtZX0hIikKCiAgICAgICAgc2VsZi5fZGF0YS5fX3NldGl0ZW1fXyhuYW1lLCB2YWx1ZSkKCiAgICAgICAgaWYgbm90IHNlbGYuX2NhbGxiYWNrOgogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgc2VsZi5fY2FsbGJhY2sobmFtZSwgdmFsdWUpCgogICAgZGVmIF9fZGVsYXR0cl9fKHNlbGYsIG5hbWU6IHN0cikgLT4gTm9uZToKICAgICAgICBzZWxmLl9kYXRhLl9fZGVsaXRlbV9fKG5hbWUpCgogICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWU6IHN0cikgLT4gQW55OgogICAgICAgIHJldHVybiBzZWxmLl9kYXRhW25hbWVdCgogICAgZGVmIGtleXMoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX2RhdGEua2V5cygpCgoKY2xhc3MgSGFzVXNlckRhdGE6CiAgICBfdXNlcl9kYXRhOiBVc2VyRGF0YQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZnRlcl9zZXRfY2FsbGJhY2s9Tm9uZSk6CiAgICAgICAgc2VsZi5fdXNlcl9kYXRhID0gVXNlckRhdGEoYWZ0ZXJfc2V0X2NhbGxiYWNrPWFmdGVyX3NldF9jYWxsYmFjaykKCiAgICBAcHJvcGVydHkKICAgIGRlZiBfKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl91c2VyX2RhdGEKPHxmaW1fc3VmZml4fD4KICAgICAgICBvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgIl9kYXRhIiwgZGljdCgpKQogICAgICAgIG9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCAiX2NhbGxiYWNrIiwgYWZ0ZXJfc2V0X2NhbGxiYWNrKQoKPHxmaW1fZW5kfD4="]
["00f1c5e9ad01568746952f611192be81584b6805-2","00f1c5e9ad01568746952f611192be81584b6805","PHxmaW1fcHJlZml4fD4KIiIiCgpVc2VyRGF0YSBhbmQgSGFzVXNlckRhdGEgYWxsb3cgYSBQeXRob24gY2xhc3MgdG8gaGF2ZSBhbiB1bmRlcnNjb3JlIGBfYCBwcm9wZXJ0eSBmb3IKYWNjZXNzaW5nIGN1c3RvbSBmaWVsZHMuIERhdGEgY2FwdHVyZWQgd2l0aGluIHRoaXMgcHJvcGVydHkgY2FuIGJlIHNlcmlhbGl6ZWQgYWxvbmcgd2l0aAo8fGZpbV9ob2xlfD4KCgpjbGFzcyBVc2VyRGF0YToKICAgIF9kYXRhOiBEaWN0W3N0ciwgQW55XQogICAgX2NhbGxiYWNrOiBPcHRpb25hbFtDYWxsYWJsZVtbQW55XSwgTm9uZV1dCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFmdGVyX3NldF9jYWxsYmFjazogQ2FsbGFibGVbW0FueV0sIE5vbmVdID0gTm9uZSk6CiAgICAgICAgIyBVc2Ugb2JqZWN0Ll9fc2V0YXR0cl9fIHRvIGF2b2lkIGxvb3Agb24gc2VsZi5fX3NldGF0dHJfXyBkdXJpbmcgaW5pdAogICAgICAgIG9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCAiX2RhdGEiLCBkaWN0KCkpCiAgICAgICAgb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsICJfY2FsbGJhY2siLCBhZnRlcl9zZXRfY2FsbGJhY2spCgogICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWU6IHN0ciwgdmFsdWU6IEFueSkgLT4gTm9uZToKICAgICAgICBpZiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihmIkNhbm5vdCBzZXQgcmVzZXJ2ZWQgbmFtZSB7bmFtZX0hIikKCiAgICAgICAgc2VsZi5fZGF0YS5fX3NldGl0ZW1fXyhuYW1lLCB2YWx1ZSkKCiAgICAgICAgaWYgbm90IHNlbGYuX2NhbGxiYWNrOgogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgc2VsZi5fY2FsbGJhY2sobmFtZSwgdmFsdWUpCgogICAgZGVmIF9fZGVsYXR0cl9fKHNlbGYsIG5hbWU6IHN0cikgLT4gTm9uZToKICAgICAgICBzZWxmLl9kYXRhLl9fZGVsaXRlbV9fKG5hbWUpCgogICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWU6IHN0cikgLT4gQW55OgogICAgICAgIHJldHVybiBzZWxmLl9kYXRhW25hbWVdCgogICAgZGVmIGtleXMoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX2RhdGEua2V5cygpCgoKY2xhc3MgSGFzVXNlckRhdGE6CiAgICBfdXNlcl9kYXRhOiBVc2VyRGF0YQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZnRlcl9zZXRfY2FsbGJhY2s9Tm9uZSk6CiAgICAgICAgc2VsZi5fdXNlcl9kYXRhID0gVXNlckRhdGEoYWZ0ZXJfc2V0X2NhbGxiYWNrPWFmdGVyX3NldF9jYWxsYmFjaykKCiAgICBAcHJvcGVydHkKICAgIGRlZiBfKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl91c2VyX2RhdGEKPHxmaW1fc3VmZml4fD4KYW55IGluc3RhbmNlIG9mIHRoZSBjbGFzcy4KCiIiIgpmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBDYWxsYWJsZSwgRGljdCwgT3B0aW9uYWwKPHxmaW1fZW5kfD4="]
["a9d32f6ef11941b118206beffdb5e74f3fb57f87-1","a9d32f6ef11941b118206beffdb5e74f3fb57f87","PHxmaW1fcHJlZml4fD4KIyBQcmVkaWN0IHRoZSBjbGFzcyBvZiB0aGUgZmxvd2VyIGJhc2VkIG9uIGF2YWlsYWJsZSBhdHRyaWJ1dGVzLgoKaW1wb3J0IG1hdGgKaW1wb3J0IHBhbmRhcwppbXBvcnQgc2tsZWFybgppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmZyb20gcGFuZGFzLnBsb3R0aW5nIGltcG9ydCBzY2F0dGVyX21hdHJpeApmcm9tIHNrbGVhcm4ubGluZWFyX21vZGVsIGltcG9ydCBMb2dpc3RpY1JlZ3Jlc3Npb24KZnJvbSBza2xlYXJuLmRpc2NyaW1pbmFudF9hbmFseXNpcyBpbXBvcnQgTGluZWFyRGlzY3JpbWluYW50QW5hbHlzaXMKZnJvbSBza2xlYXJuLm5laWdoYm9ycyBpbXBvcnQgS05laWdoYm9yc0NsYXNzaWZpZXIKZnJvbSBza2xlYXJuLnRyZWUgaW1wb3J0IERlY2lzaW9uVHJlZUNsYXNzaWZpZXIKZnJvbSBza2xlYXJuLm5haXZlX2JheWVzIGltcG9ydCBHYXVzc2lhbk5CCmZyb20gc2tsZWFybi5zdm0gaW1wb3J0IFNWQwpmcm9tIHNrbGVhcm4ubWV0cmljcyBpbXBvcnQgYWNjdXJhY3lfc2NvcmUsIGNvbmZ1c2lvbl9tYXRyaXgsIGNsYXNzaWZpY2F0aW9uX3JlcG9ydAoKIyBGdW5jdGlvbiB0byBmaW5kIGNvbW1vbiBzdGF0cyBhYm91dCBwbGFudCBzcGVjaWVzCiMgUGFyYW1ldGVyOiBhIDItZCBhcnJheSBjb25zaXN0aW5nIG9mIHRoZSBzcGVjaWVzIG9mIHRoZSBwbGFudAojIFJldHVybnM6IGEgMS1kIGFycmF5IG9mIGNvbW1vbiBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbgpkZWYgc3VtbWFyeV9zdGF0cyhzcGVjaWVzKToKICAgICMgSW5pdGFsaXplIHNvbWUgdmFyaWFsYmxlcwoKICAgIHNpemUgPSBsZW4oc3BlY2llcykKCiAgICBzZXBhbF9sZW5ndGhfYXZnPTAKICAgIHNlcGFsX3dpZHRoX2F2Zz0wCiAgICBwZXRhbF9sZW5ndGhfYXZnPTAKICAgIHBldGFsX3dpZHRoX2F2Zz0wCgogICAgIyBTaG91bGRuJ3QgaW5pdGFsaXplIHRoZSBiZWxvdyB2YXJpYWJsZXMgdG8gMCBhcyAwIG1heSBub3QgYmUgcGFydCBvZiB0aGUgcG9wdWxhdGlvbiBnaXZpbmcgdXMgaW5jb3JyZWN0IHJlc3VsdHMgc28gaW5pdGFsaXplIHRvIGZpcnN0IHJlbGV2YW50IGRhdGEgcG9pbnQKICAgIHNlcGFsX2xlbmd0aF9tYXg9c3BlY2llc1swXVswXQogICAgc2VwYWxfd2lkdGhfbWF4PXNwZWNpZXNbMF1bMV0KICAgIHBldGFsX2xlbmd0aF9tYXg9c3BlY2llc1swXVsyXQogICAgcGV0YWxfd2lkdGhfbWF4PXNwZWNpZXNbMF1bM10KCiAgICBzZXBhbF9sZW5ndGhfbWluPXNwZWNpZXNbMF1bMF0KICAgIHNlcGFsX3dpZHRoX21pbj1zcGVjaWVzWzBdWzFdCiAgICBwZXRhbF9sZW5ndGhfbWluPXNwZWNpZXNbMF1bMl0KICAgIHBldGFsX3dpZHRoX21pbj1zcGVjaWVzWzBdWzNdCgogICAgdHlwZSA9JycKICAgIGlmIChzcGVjaWVzWzBdWy0xXT09MS4wKToKICAgICAgICB0eXBlID0gJ0lyaXMgU2V0b3NhJwoKICAgIGVsaWYoc3BlY2llc1swXVstMV09PTIuMCk6CiAgICAgICAgdHlwZSA9ICdJcmlzIFZlcnNpY29sb3InCiAgICBlbHNlOgogICAgICAgIHR5cGUgPSAnSXJpcyBWaXJnaW5pY2EnCgoKICAgICMgQ2FsY3VsYXRlIHRoZSBhdmVyYWdlLCBtaW4gYW5kIG1heCBvZiBpcmlzX3NldG9zYSBhbmQgb3RoZXIgc3BlY2llcwogICAgZm9yIGkgaW4gc3BlY2llczoKICAgICAgICBzZXBhbF9sZW5ndGhfYXZnKz1pWzBdCiAgICAgICAgc2VwYWxfd2lkdGhfYXZnKz1pWzFdCiAgICAgICAgcGV0YWxfbGVuZ3RoX2F2Zys9aVsyXQogICAgICAgIHBldGFsX3dpZHRoX2F2Zys9aVszXQoKICAgICAgICBpZihzZXBhbF9sZW5ndGhfbWF4IDwgaVswXSk6CiAgICAgICAgICAgc2VwYWxfbGVuZ3RoX21heD1pWzBdCiAgICAgICAgZWxpZihzZXBhbF9sZW5ndGhfbWluID4gaVswXSk6CiAgICAgICAgICAgc2VwYWxfbGVuZ3RoX21pbj1pWzBdCgoKCiAgICAgICAgaWYoc2VwYWxfd2lkdGhfbWF4IDwgaVsxXSk6CiAgICAgICAgICAgc2VwYWxfd2lkdGhfbWF4PWlbMV0KICAgICAgICBlbGlmKHNlcGFsX3dpZHRoX21pbiA+IGlbMV0pOgogICAgICAgICAgIHNlcGFsX3dpZHRoX21pbj1pWzFdCgoKICAgICAgICBpZihwZXRhbF9sZW5ndGhfbWF4IDwgaVsyXSk6CiAgICAgICAgICAgcGV0YWxfbGVuZ3RoX21heD1pWzJdCiAgICAgICAgZWxpZihwZXRhbF9sZW5ndGhfbWluID4gaVsyXSk6CiAgICAgICAgICAgcGV0YWxfbGVuZ3RoX21pbj1pWzJdCgoKCiAgICAgICAgaWYocGV0YWxfd2lkdGhfbWF4IDwgaVszXSk6CiAgICAgICAgICAgcGV0YWxfd2lkdGhfbWF4PWlbM10KICAgICAgICBlbGlmKHBldGFsX3dpZHRoX21pbiA+IGlbM10pOgogICAgICAgICAgIHBldGFsX3dpZHRoX21pbj1pWzNdCgogICAgc3RhdHMgPSBbc2VwYWxfbGVuZ3RoX2F2Zy9zaXplLHNlcGFsX3dpZHRoX2F2Zy9zaXplLHBldGFsX2xlbmd0aF9hdmcvc2l6ZSxwZXRhbF93aWR0aF9hdmcvc2l6ZSwKICAgICAgICBzZXBhbF9sZW5ndGhfbWF4LHNlcGFsX3dpZHRoX21heCxwZXRhbF9sZW5ndGhfbWF4LHBldGFsX3dpZHRoX21heCwKICAgICAgICBzZXBhbF9sZW5ndGhfbWluLHNlcGFsX3dpZHRoX21pbixwZXRhbF9sZW5ndGhfbWluLHBldGFsX3dpZHRoX21pbl0KICAgIHByaW50KHR5cGUgKyIgRGF0YSA6IikKICAgIHByaW50KCJOdW1iZXIgb2YgU2FtcGxlcyA6Iiwgc2l6ZSkKICAgIHByaW50KCJBdmVyYWdlIHNlcGFsIGxlbmd0aCA6Iiwgc3RhdHNbMF0pCiAgICBwcmludCgiQXZlcmFnZSBzZXBhbCB3aWR0aCA6IiAsc3RhdHNbMV0pCiAgICBwcmludCgiQXZlcmFnZSBwZXRhbCBsZW5ndGggOiIsc3RhdHNbMl0pCiAgICBwcmludCgiQXZlcmFnZSBwZXRhbCB3aWR0aCA6IixzdGF0c1szXSkKCiAgICBwcmludCgiTWF4IHNlcGFsIGxlbmd0aCA6IixzdGF0c1s0XSkKICAgIHByaW50KCJNYXggc2VwYWwgd2lkdGggOiIsc3RhdHNbNV0pCiAgICBwcmludCgiTWF4IHBldGFsIGxlbmd0aCA6IixzdGF0c1s2XSkKICAgIHByaW50KCJNYXggcGV0YWwgd2lkdGggOiIsc3RhdHNbN10pCgogICAgcHJpbnQoIk1pbmltdW0gc2VwYWwgbGVuZ3RoIDoiLHN0YXRzWzhdKQogICAgcHJpbnQoIk1pbmltdW0gc2VwYWwgd2lkdGggOiIsc3RhdHNbOV0pCiAgICBwcmludCgiTWluaW11bSBwZXRhbCBsZWd0aCA6IixzdGF0c1sxMF0pCiAgICBwcmludCgiTWluaW11bSBwZXRhbCB3aWR0aCA6IixzdGF0c1sxMV0pCgogICAgcHJpbnQoIlN0YW5kYXJkIERldmlhdGlvbiBzZXBhbCBsZW5ndGggOiIsc3RhbmRhcmRfZGV2KHNwZWNpZXMsc3RhdHNbMF0sMCkpCiAgICBwcmludCgiU3RhbmRhcmQgRGV2aWF0aW9uIHNlcGFsIHdpZHRoIDoiLHN0YW5kYXJkX2RldihzcGVjaWVzLHN0YXRzWzFdLDEpKQogICAgcHJpbnQoIlN0YW5kYXJkIERldmlhdGlvbiBwZXRhbCBsZWd0aCA6IixzdGFuZGFyZF9kZXYoc3BlY2llcyxzdGF0c1syXSwyKSkKICAgIHByaW50KCJTdGFuZGFyZCBEZXZpYXRpb24gcGV0YWwgd2lkdGggOiIsc3RhbmRhcmRfZGV2KHNwZWNpZXMsc3RhdHNbM10sMykpCgogICAgcHJpbnQoKQoKICAgIHJldHVybiBzdGF0cwoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojIEZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgY29ycmVsYXRpb24gYmV0d2VlbiB0byBzZXRzIG9mIGRhdGEKIyBQYXJhbWV0ZXJzIDogMi1kIGFycmF5LCBpbnQsIGludAojIFJldHVybnMgOiBmbG9hdApkZWYgY29ycmVsYXRpb24oZGF0YSwgY29sdW1uX2EsIGNvbHVtbl9iKToKPHxmaW1fZW5kfD4="]
["a9d32f6ef11941b118206beffdb5e74f3fb57f87-2","a9d32f6ef11941b118206beffdb5e74f3fb57f87","PHxmaW1fcHJlZml4fD4KIyBQcmVkaWN0IHRoZSBjbGFzcyBvZiB0aGUgZmxvd2VyIGJhc2VkIG9uIGF2YWlsYWJsZSBhdHRyaWJ1dGVzLgoKaW1wb3J0IG1hdGgKaW1wb3J0IHBhbmRhcwppbXBvcnQgc2tsZWFybgppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmZyb20gcGFuZGFzLnBsb3R0aW5nIGltcG9ydCBzY2F0dGVyX21hdHJpeApmcm9tIHNrbGVhcm4ubGluZWFyX21vZGVsIGltcG9ydCBMb2dpc3RpY1JlZ3Jlc3Npb24KZnJvbSBza2xlYXJuLmRpc2NyaW1pbmFudF9hbmFseXNpcyBpbXBvcnQgTGluZWFyRGlzY3JpbWluYW50QW5hbHlzaXMKZnJvbSBza2xlYXJuLm5laWdoYm9ycyBpbXBvcnQgS05laWdoYm9yc0NsYXNzaWZpZXIKZnJvbSBza2xlYXJuLnRyZWUgaW1wb3J0IERlY2lzaW9uVHJlZUNsYXNzaWZpZXIKZnJvbSBza2xlYXJuLm5haXZlX2JheWVzIGltcG9ydCBHYXVzc2lhbk5CCmZyb20gc2tsZWFybi5zdm0gaW1wb3J0IFNWQwo8fGZpbV9ob2xlfD4KIyBSZXR1cm5zOiBhIDEtZCBhcnJheSBvZiBjb21tb24gc3RhdGlzdGljYWwgaW5mb3JtYXRpb24KZGVmIHN1bW1hcnlfc3RhdHMoc3BlY2llcyk6CiAgICAjIEluaXRhbGl6ZSBzb21lIHZhcmlhbGJsZXMKCiAgICBzaXplID0gbGVuKHNwZWNpZXMpCgogICAgc2VwYWxfbGVuZ3RoX2F2Zz0wCiAgICBzZXBhbF93aWR0aF9hdmc9MAogICAgcGV0YWxfbGVuZ3RoX2F2Zz0wCiAgICBwZXRhbF93aWR0aF9hdmc9MAoKICAgICMgU2hvdWxkbid0IGluaXRhbGl6ZSB0aGUgYmVsb3cgdmFyaWFibGVzIHRvIDAgYXMgMCBtYXkgbm90IGJlIHBhcnQgb2YgdGhlIHBvcHVsYXRpb24gZ2l2aW5nIHVzIGluY29ycmVjdCByZXN1bHRzIHNvIGluaXRhbGl6ZSB0byBmaXJzdCByZWxldmFudCBkYXRhIHBvaW50CiAgICBzZXBhbF9sZW5ndGhfbWF4PXNwZWNpZXNbMF1bMF0KICAgIHNlcGFsX3dpZHRoX21heD1zcGVjaWVzWzBdWzFdCiAgICBwZXRhbF9sZW5ndGhfbWF4PXNwZWNpZXNbMF1bMl0KICAgIHBldGFsX3dpZHRoX21heD1zcGVjaWVzWzBdWzNdCgogICAgc2VwYWxfbGVuZ3RoX21pbj1zcGVjaWVzWzBdWzBdCiAgICBzZXBhbF93aWR0aF9taW49c3BlY2llc1swXVsxXQogICAgcGV0YWxfbGVuZ3RoX21pbj1zcGVjaWVzWzBdWzJdCiAgICBwZXRhbF93aWR0aF9taW49c3BlY2llc1swXVszXQoKICAgIHR5cGUgPScnCiAgICBpZiAoc3BlY2llc1swXVstMV09PTEuMCk6CiAgICAgICAgdHlwZSA9ICdJcmlzIFNldG9zYScKCiAgICBlbGlmKHNwZWNpZXNbMF1bLTFdPT0yLjApOgogICAgICAgIHR5cGUgPSAnSXJpcyBWZXJzaWNvbG9yJwogICAgZWxzZToKICAgICAgICB0eXBlID0gJ0lyaXMgVmlyZ2luaWNhJwoKCiAgICAjIENhbGN1bGF0ZSB0aGUgYXZlcmFnZSwgbWluIGFuZCBtYXggb2YgaXJpc19zZXRvc2EgYW5kIG90aGVyIHNwZWNpZXMKICAgIGZvciBpIGluIHNwZWNpZXM6CiAgICAgICAgc2VwYWxfbGVuZ3RoX2F2Zys9aVswXQogICAgICAgIHNlcGFsX3dpZHRoX2F2Zys9aVsxXQogICAgICAgIHBldGFsX2xlbmd0aF9hdmcrPWlbMl0KICAgICAgICBwZXRhbF93aWR0aF9hdmcrPWlbM10KCiAgICAgICAgaWYoc2VwYWxfbGVuZ3RoX21heCA8IGlbMF0pOgogICAgICAgICAgIHNlcGFsX2xlbmd0aF9tYXg9aVswXQogICAgICAgIGVsaWYoc2VwYWxfbGVuZ3RoX21pbiA+IGlbMF0pOgogICAgICAgICAgIHNlcGFsX2xlbmd0aF9taW49aVswXQoKCgogICAgICAgIGlmKHNlcGFsX3dpZHRoX21heCA8IGlbMV0pOgogICAgICAgICAgIHNlcGFsX3dpZHRoX21heD1pWzFdCiAgICAgICAgZWxpZihzZXBhbF93aWR0aF9taW4gPiBpWzFdKToKICAgICAgICAgICBzZXBhbF93aWR0aF9taW49aVsxXQoKCiAgICAgICAgaWYocGV0YWxfbGVuZ3RoX21heCA8IGlbMl0pOgogICAgICAgICAgIHBldGFsX2xlbmd0aF9tYXg9aVsyXQogICAgICAgIGVsaWYocGV0YWxfbGVuZ3RoX21pbiA+IGlbMl0pOgogICAgICAgICAgIHBldGFsX2xlbmd0aF9taW49aVsyXQoKCgogICAgICAgIGlmKHBldGFsX3dpZHRoX21heCA8IGlbM10pOgogICAgICAgICAgIHBldGFsX3dpZHRoX21heD1pWzNdCiAgICAgICAgZWxpZihwZXRhbF93aWR0aF9taW4gPiBpWzNdKToKICAgICAgICAgICBwZXRhbF93aWR0aF9taW49aVszXQoKICAgIHN0YXRzID0gW3NlcGFsX2xlbmd0aF9hdmcvc2l6ZSxzZXBhbF93aWR0aF9hdmcvc2l6ZSxwZXRhbF9sZW5ndGhfYXZnL3NpemUscGV0YWxfd2lkdGhfYXZnL3NpemUsCiAgICAgICAgc2VwYWxfbGVuZ3RoX21heCxzZXBhbF93aWR0aF9tYXgscGV0YWxfbGVuZ3RoX21heCxwZXRhbF93aWR0aF9tYXgsCiAgICAgICAgc2VwYWxfbGVuZ3RoX21pbixzZXBhbF93aWR0aF9taW4scGV0YWxfbGVuZ3RoX21pbixwZXRhbF93aWR0aF9taW5dCiAgICBwcmludCh0eXBlICsiIERhdGEgOiIpCiAgICBwcmludCgiTnVtYmVyIG9mIFNhbXBsZXMgOiIsIHNpemUpCiAgICBwcmludCgiQXZlcmFnZSBzZXBhbCBsZW5ndGggOiIsIHN0YXRzWzBdKQogICAgcHJpbnQoIkF2ZXJhZ2Ugc2VwYWwgd2lkdGggOiIgLHN0YXRzWzFdKQogICAgcHJpbnQoIkF2ZXJhZ2UgcGV0YWwgbGVuZ3RoIDoiLHN0YXRzWzJdKQogICAgcHJpbnQoIkF2ZXJhZ2UgcGV0YWwgd2lkdGggOiIsc3RhdHNbM10pCgogICAgcHJpbnQoIk1heCBzZXBhbCBsZW5ndGggOiIsc3RhdHNbNF0pCiAgICBwcmludCgiTWF4IHNlcGFsIHdpZHRoIDoiLHN0YXRzWzVdKQogICAgcHJpbnQoIk1heCBwZXRhbCBsZW5ndGggOiIsc3RhdHNbNl0pCiAgICBwcmludCgiTWF4IHBldGFsIHdpZHRoIDoiLHN0YXRzWzddKQoKICAgIHByaW50KCJNaW5pbXVtIHNlcGFsIGxlbmd0aCA6IixzdGF0c1s4XSkKICAgIHByaW50KCJNaW5pbXVtIHNlcGFsIHdpZHRoIDoiLHN0YXRzWzldKQogICAgcHJpbnQoIk1pbmltdW0gcGV0YWwgbGVndGggOiIsc3RhdHNbMTBdKQogICAgcHJpbnQoIk1pbmltdW0gcGV0YWwgd2lkdGggOiIsc3RhdHNbMTFdKQoKICAgIHByaW50KCJTdGFuZGFyZCBEZXZpYXRpb24gc2VwYWwgbGVuZ3RoIDoiLHN0YW5kYXJkX2RldihzcGVjaWVzLHN0YXRzWzBdLDApKQogICAgcHJpbnQoIlN0YW5kYXJkIERldmlhdGlvbiBzZXBhbCB3aWR0aCA6IixzdGFuZGFyZF9kZXYoc3BlY2llcyxzdGF0c1sxXSwxKSkKICAgIHByaW50KCJTdGFuZGFyZCBEZXZpYXRpb24gcGV0YWwgbGVndGggOiIsc3RhbmRhcmRfZGV2KHNwZWNpZXMsc3RhdHNbMl0sMikpCiAgICBwcmludCgiU3RhbmRhcmQgRGV2aWF0aW9uIHBldGFsIHdpZHRoIDoiLHN0YW5kYXJkX2RldihzcGVjaWVzLHN0YXRzWzNdLDMpKQoKICAgIHByaW50KCkKCiAgICByZXR1cm4gc3RhdHMKCiMgRnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRoZSBjb3JyZWxhdGlvbiBiZXR3ZWVuIHRvIHNldHMgb2YgZGF0YQojIFBhcmFtZXRlcnMgOiAyLWQgYXJyYXksIGludCwgaW50CiMgUmV0dXJucyA6IGZsb2F0CmRlZiBjb3JyZWxhdGlvbihkYXRhLCBjb2x1bW5fYSwgY29sdW1uX2IpOgoKICAgICMgRmluZCB0aGUgbWVhbiBvZiB0aGUgdHdvIGNvbHVtbnMgd2UgYXJlIGdvaW5nIHRvIGdldCB0aGUgY29ycmVsYXRpb24gZm9yCiAgICBzdW1feD0wLjAKICAgIHN1bV95PTAuMAogICAgZm9yIGkgaW4gZGF0YToKICAgICAgICBzdW1feCs9aVtjb2x1bW5fYV0KICAgICAgICBzdW1feSs9aVtjb2x1bW5fYl0KCiAgICBhdmdfeCA9IHN1bV94L2xlbihkYXRhKQogICAgYXZnX3kgPSBzdW1feS9sZW4oZGF0YSkKCiAgICAjIENhbGN1bGF0ZSB0aGUgYSAtIG1lYW4gJiBiIC0gbWVhbiBmb3IgYWxsIHRoZSB2YWx1ZXMgaW4gdGhlIGxpc3QKICAgIGE9W10KICAgIGI9W10KICAgIGZvciBpIGluIGRhdGE6CiAgICAgICAgYS5hcHBlbmQoaVtjb2x1bW5fYV0tYXZnX3gpCiAgICAgICAgYi5hcHBlbmQoaVtjb2x1bW5fYl0tYXZnX3kpCgogICAgIyBDYWxjdWxhdGUgYSpiLCBhXjIgJiBiXjIgZm9yIGFsbCB2YWx1ZXMgaW4gYm90aCBjb2x1bW5zCiAgICBhX2I9MC4wCiAgICBhX3NxdWFyZWQ9MC4wCiAgICBiX3NxdWFyZWQ9MC4wCiAgICBmb3IgaSBpbiByYW5nZShsZW4oZGF0YSkpOgogICAgICAgIGFfYis9YVtpXSpiW2ldCiAgICAgICAgYV9zcXVhcmVkKz1hW2ldKmFbaV0KICAgICAgICBiX3NxdWFyZWQrPWJbaV0qYltpXQoKICAgICMgV29yayBvdXQgdGhlIHNxdWFyZSByb290IG9mIGFeMiB4IGJeMgogICAgYV9iX3NxcnQgPSBtYXRoLnNxcnQoYV9zcXVhcmVkKmJfc3F1YXJlZCkKCiAgICAjIERpdmlkZSBhKmIgdG8gdGhlIGFuc3dlciBhYm92ZQogICAgcmV0dXJuKGFfYi9hX2Jfc3FydCkKCgoKIyBGdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbgojIFBhcmFtZXRlciA6IDItZCBhcnJheSwgZmxvYXQsIGludAojIFJldHVybnMgOiBmbG9hdApkZWYgc3RhbmRhcmRfZGV2KGZsb3dlcixtZWFuLGNvbHVtbik6CgogICAgIyBDYWxjdWxhdGUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBieSBzdW1taW5nIHRoZSBlYWNoIHZhbHVlIGZyb20gc3VidHJhY3RlZCBieSB0aGUgbWVhbiBhbmQgc3F1YXJpbmcgdGhlIHJlc3VsdAogICAgdG90YWwgPSAwLjAKICAgIHN1bT0wLjAKICAgIGZvciBpIGluIGZsb3dlcjoKCiAgICAgICAgc3VtPWlbY29sdW1uXS1tZWFuCgogICAgICAgIHNxdWFyZT1zdW0qc3VtCiAgICAgICAgdG90YWwrPXNxdWFyZQoKICAgICMgZGl2aWRlIHRoZSB0b2FsIGJ5IHRoZSBwb3B1bGF0aW9uCiAgICBzX2RldiA9IHRvdGFsL2xlbihmbG93ZXIpCgogICAgIyByZXR1cm4gdGhlIHNxdWFyZSByb290IHRvIGdldCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uCiAgICByZXR1cm4gbWF0aC5zcXJ0KHNfZGV2KQoKCgpkZWYgbWFpbigpOgoKICAgICMgT3BlbiB0aGUgZmlsZQogICAgZmlsZSA9IG9wZW4oImlyaXMuZGF0YSIsICJyIikKCiAgICAjIHJlYWQgZWFjaCBsaW5lIG9mIHRoZSBmaWxlIGFuZCBwdXQgaXQgaW50byBhIGxpc3QKICAgIGxpbmVzID0gZmlsZS5yZWFkbGluZXMoKQoKICAgICMgSW5pdGFsaXplIHNvbWUgdmFyaWFibGVzCiAgICBmbG93ZXJfZGF0YSA9W10KICAgIGZsb3dlcl9kYXRhX25hbWU9W10KICAgIGlyaXNfc2V0b3NhPVtdCiAgICBpcmlzX3ZlcnNpY29sb3VyPVtdCiAgICBpcmlzX3ZpcmdpbmljYT1bXQoKICAgICMgUmVtb3ZlIGtub3duIGVycm9ycyBmcm9tIGRhdGEKICAgICNlcnJvcnMgPSBbXQogICAgI2Vycm9ycy5hcHBlbmQobGluZXNbMzRdKQogICAgI2Vycm9ycy5hcHBlbmQobGluZXNbMzddKQogICAgI2xpbmVzLnBvcCgzNCkKICAgICNsaW5lcy5wb3AoMzcpCgogICAgIyBMb29wIHRocm91Z2ggYWxsIGxpbmVzIGV4Y2VwdCB0aGUgbGFzdCBsaW5lIGFzIGl0J3MgZW1wdHkKICAgIGZvciBsaW5lIGluIGxpbmVzWzotMV06CgogICAgICAgICMgRm9yIGVhY2ggbGluZSByZW1vdmUgYW55IHRyYWlsaW5nIHdoaXRlc3BhY2UgZS5nLiBuZXdsaW5lIGNoYXJhY3RlcnMgXG4gYW5kIHNwbGl0IGl0IGJ5ICwgY3JlYXRpbmcgYSBsaXN0CiAgICAgICAgcm93ID0gbGluZS5yc3RyaXAoKS5zcGxpdCgnLCcpCgogICAgICAgICMgV2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCBkYXRhIHNldCBidXQgd2l0aCB0aGUgbnVtYmVycyBjb252ZXJ0ZWQgdG8gZmxvYXRzIGFuZCBhcyB3ZWxsIGFzIHRoZSBjbGFzcyBuYW1lIGluIHN0cmluZwogICAgICAgIGZsb3dlcl9kYXRhX25hbWUuYXBwZW5kKFtmbG9hdCh4KSBmb3IgeCBpbiByb3dbOi0xXV0pCiAgICAgICAgZmxvd2VyX2RhdGFfbmFtZVstMV0rPVtyb3dbLTFdXQoKICAgICAgICAjIFNlcGVyYXRlIGVhY2ggbGlzdCBiYXNlZCBvbiB0aGUgc3BlY2llcwogICAgICAgIGlmKHJvd1s0XT09IklyaXMtc2V0b3NhIik6CiAgICAgICAgICAgIGlyaXNfc2V0b3NhLmFwcGVuZChbZmxvYXQoeCkgZm9yIHggaW4gcm93WzotMV0gKyBbMS4wXV0pCgogICAgICAgICAgICAjIEFkZCBzb21lIHNvcnQgb2YgaW5kaWNhdG9yIGZvciBlYWNoIHNwZWNpZXMgZS5nLiAxLjAgZm9yIGlyaXMgc2V0b3NhIGV0Yy4uCiAgICAgICAgICAgIGZsb3dlcl9kYXRhLmFwcGVuZChbZmxvYXQoeCkgZm9yIHggaW4gcm93WzotMV0gKyBbMS4wXV0pCgoKICAgICAgICBlbGlmKHJvd1s0XT09IklyaXMtdmVyc2ljb2xvciIpOgoKICAgICAgICAgICAgaXJpc192ZXJzaWNvbG91ci5hcHBlbmQoW2Zsb2F0KHgpIGZvciB4IGluIHJvd1s6LTFdICsgWzIuMF1dKQogICAgICAgICAgICBmbG93ZXJfZGF0YS5hcHBlbmQoW2Zsb2F0KHgpIGZvciB4IGluIHJvd1s6LTFdICsgWzIuMF1dKQoKCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaXJpc192aXJnaW5pY2EuYXBwZW5kKFtmbG9hdCh4KSBmb3IgeCBpbiByb3dbOi0xXSArIFszLjBdXSkKICAgICAgICAgICAgZmxvd2VyX2RhdGEuYXBwZW5kKFtmbG9hdCh4KSBmb3IgeCBpbiByb3dbOi0xXSArIFszLjBdXSkKCgogICAgIyBHZXQgc3VtbWFyeSBvZiBzdGF0cyByZWdhcmRpbmcgZWFjaCBzcGVjaWVzCiAgICBzdW1tYXJ5X3N0YXRzKGlyaXNfc2V0b3NhKQogICAgc3VtbWFyeV9zdGF0cyhpcmlzX3ZlcnNpY29sb3VyKQogICAgc3VtbWFyeV9zdGF0cyhpcmlzX3ZpcmdpbmljYSkKCgogICAgIyBGaW5kIHRoZSBjb3JyZWxhdGlvbiBmcm9tIHNwZWNpZXMgdG8gZWFjaCBudW1lcmljIGF0dHJpYnV0ZSBvZiB0aGUgcGxhbnQgc3BlY2llcwogICAgcHJpbnQoIkNvcnJlbGF0aW9ucyA6IikKICAgIHByaW50KCJDb3JyZWxhdGlvbiBiZXR3ZWVuIFNwZWNpZXMgYW5kIFNlcGFsIExlbmd0aCA6Iixjb3JyZWxhdGlvbihmbG93ZXJfZGF0YSwwLDQpKQogICAgcHJpbnQoIkNvcnJlbGF0aW9uIGJldHdlZW4gU3BlY2llcyBhbmQgU2VwYWwgV2lkdGggOiIsY29ycmVsYXRpb24oZmxvd2VyX2RhdGEsMSw0KSkKICAgIHByaW50KCJDb3JyZWxhdGlvbiBiZXR3ZWVuIFNwZWNpZXMgYW5kIFBldGFsIExlbmd0aCA6Iixjb3JyZWxhdGlvbihmbG93ZXJfZGF0YSwyLDQpKQogICAgcHJpbnQoIkNvcnJlbGF0aW9uIGJldHdlZW4gU3BlY2llcyBhbmQgUGV0YWwgV2lkdGggOiIsY29ycmVsYXRpb24oZmxvd2VyX2RhdGEsMyw0KSkKCiAgICBwcmludCgpCgogICAgIyBoaXN0IHBsb3RzCiAgICBkYXRhc2V0ID0gcGFuZGFzLkRhdGFGcmFtZShmbG93ZXJfZGF0YV9uYW1lKQogICAgI3ByaW50KGRhdGFzZXQpCiAgICBkYXRhc2V0Lmhpc3QoKQogICAgI3BsdC5zaG93KCkKICAgIHBsdC5zYXZlZmlnKCdoaXN0X3Bsb3QucG5nJykKCiAgICBzY2F0dGVyX21hdHJpeChkYXRhc2V0KQogICAgcGx0LnNhdmVmaWcoJ3NjYXR0ZXJfcGxvdC5wbmcnKQoKCiAgICAjIFNwbGl0LW91dCB2YWxpZGF0aW9uIGRhdGFzZXQKICAgIGFycmF5ID0gZGF0YXNldC52YWx1ZXMKCiAgICAjIEV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGNvbHVtbiBzdG9yZWQgYXMgYSAyZCBhcnJheQogICAgWCA9IGFycmF5WzosMDo0XQoKICAgICMgSnVzdCB0aGUgbGFzdCBjb2x1bW4gc3RvcmVkIGFzIGEgMWQgYXJyYXkKICAgIFkgPSBhcnJheVs6LDRdCgogICAgIyBXZSB3aWxsIHNwbGl0IHRoZSBsb2FkZWQgZGF0YXNldCBpbnRvIHR3bywgODAlIG9mIHdoaWNoIHdlIHdpbGwgdXNlIHRvIHRyYWluIG91ciBtb2RlbHMgYW5kIDIwJSB0aGF0IHdlIHdpbGwgaG9sZCBiYWNrIGFzIGEgdmFsaWRhdGlvbiBkYXRhc2V0LgogICAgdmFsaWRhdGlvbl9zaXplID0gMC4yMAogICAgc2VlZCA9IDcKICAgIFhfdHJhaW4sIFhfdmFsaWRhdGlvbiwgWV90cmFpbiwgWV92YWxpZGF0aW9uID0gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24udHJhaW5fdGVzdF9zcGxpdChYLCBZLCB0ZXN0X3NpemU9dmFsaWRhdGlvbl9zaXplLCByYW5kb21fc3RhdGU9c2VlZCkKCgogICAgIyBUZXN0IG9wdGlvbnMgYW5kIGV2YWx1YXRpb24gbWV0cmljCiAgICBzZWVkID0gNwogICAgc2NvcmluZyA9ICdhY2N1cmFjeScKCiAgICAjIFNwb3QgQ2hlY2sgQWxnb3JpdGhtcwogICAgbW9kZWxzID0gW10KICAgIG1vZGVscy5hcHBlbmQoKCdMUicsIExvZ2lzdGljUmVncmVzc2lvbihzb2x2ZXI9J2xpYmxpbmVhcicsIG11bHRpX2NsYXNzPSdvdnInKSkpCiAgICBtb2RlbHMuYXBwZW5kKCgnTERBJywgTGluZWFyRGlzY3JpbWluYW50QW5hbHlzaXMoKSkpCiAgICBtb2RlbHMuYXBwZW5kKCgnS05OJywgS05laWdoYm9yc0NsYXNzaWZpZXIoKSkpCiAgICBtb2RlbHMuYXBwZW5kKCgnQ0FSVCcsIERlY2lzaW9uVHJlZUNsYXNzaWZpZXIoKSkpCiAgICBtb2RlbHMuYXBwZW5kKCgnTkInLCBHYXVzc2lhbk5CKCkpKQogICAgbW9kZWxzLmFwcGVuZCgoJ1NWTScsIFNWQyhnYW1tYT0nYXV0bycpKSkKCiAgICAjIGV2YWx1YXRlIGVhY2ggbW9kZWwgaW4gdHVybgogICAgcmVzdWx0cyA9IFtdCiAgICBuYW1lcyA9IFtdCiAgICBmb3IgbmFtZSwgbW9kZWwgaW4gbW9kZWxzOgogICAgICAgIGtmb2xkID0gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24uS0ZvbGQobl9zcGxpdHM9MTAsIHJhbmRvbV9zdGF0ZT1zZWVkKQogICAgICAgIGN2X3Jlc3VsdHMgPSBza2xlYXJuLm1vZGVsX3NlbGVjdGlvbi5jcm9zc192YWxfc2NvcmUobW9kZWwsIFhfdHJhaW4sIFlfdHJhaW4sIGN2PWtmb2xkLCBzY29yaW5nPXNjb3JpbmcpCiAgICAgICAgcmVzdWx0cy5hcHBlbmQoY3ZfcmVzdWx0cykKICAgICAgICBuYW1lcy5hcHBlbmQobmFtZSkKICAgICAgICBtc2cgPSAiJXM6ICVmICglZikiICUgKG5hbWUsIGN2X3Jlc3VsdHMubWVhbigpLCBjdl9yZXN1bHRzLnN0ZCgpKQogICAgICAgIHByaW50KG1zZykKCgogICAgIyBDb21wYXJlIEFsZ29yaXRobXMKICAgIGZpZyA9IHBsdC5maWd1cmUoKQogICAgZmlnLnN1cHRpdGxlKCdBbGdvcml0aG0gQ29tcGFyaXNvbicpCiAgICBheCA9IGZpZy5hZGRfc3VicGxvdCgxMTEpCiAgICBwbHQuYm94cGxvdChyZXN1bHRzKQogICAgYXguc2V0X3h0aWNrbGFiZWxzKG5hbWVzKQogICAgcGx0LnNhdmVmaWcoJ2FsZ29yaXRobV9jb21wYXJpc29uLnBuZycpCgoKICAgICMgTWFrZSBwcmVkaWN0aW9ucyBvbiB2YWxpZGF0aW9uIGRhdGFzZXQKICAgICMgV2UgY2FuIHJ1biB0aGUgS05OIG1vZGVsIGRpcmVjdGx5IG9uIHRoZSB2YWxpZGF0aW9uIHNldCBhbmQgc3VtbWFyaXplIHRoZSByZXN1bHRzIGFzIGEgZmluYWwgYWNjdXJhY3kgc2NvcmUsCiAgICAjIGEgY29uZnVzaW9uIG1hdHJpeCBhbmQgYSBjbGFzc2lmaWNhdGlvbiByZXBvcnQuCiAgICBrbm4gPSBLTmVpZ2hib3JzQ2xhc3NpZmllcigpCiAgICBrbm4uZml0KFhfdHJhaW4sIFlfdHJhaW4pCiAgICBwcmVkaWN0aW9ucyA9IGtubi5wcmVkaWN0KFhfdmFsaWRhdGlvbikKICAgIHByaW50KCkKICAgIHByaW50KCJLTk4gbW9kZWwiKQogICAgcHJpbnQoIkFjY3VyYWN5IFNjb3JlIDoiLGFjY3VyYWN5X3Njb3JlKFlfdmFsaWRhdGlvbiwgcHJlZGljdGlvbnMpKQogICAgcHJpbnQoKQogICAgcHJpbnQoIkNvbmZ1c2lvbiBNYXRyaXggOlxuIixjb25mdXNpb25fbWF0cml4KFlfdmFsaWRhdGlvbiwgcHJlZGljdGlvbnMpKQogICAgcHJpbnQoKQogICAgcHJpbnQoIkNsYXNzaWZpY2F0aW9uIFJlcG9ydCA6XG4iLGNsYXNzaWZpY2F0aW9uX3JlcG9ydChZX3ZhbGlkYXRpb24sIHByZWRpY3Rpb25zKSkKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KZnJvbSBza2xlYXJuLm1ldHJpY3MgaW1wb3J0IGFjY3VyYWN5X3Njb3JlLCBjb25mdXNpb25fbWF0cml4LCBjbGFzc2lmaWNhdGlvbl9yZXBvcnQKCiMgRnVuY3Rpb24gdG8gZmluZCBjb21tb24gc3RhdHMgYWJvdXQgcGxhbnQgc3BlY2llcwojIFBhcmFtZXRlcjogYSAyLWQgYXJyYXkgY29uc2lzdGluZyBvZiB0aGUgc3BlY2llcyBvZiB0aGUgcGxhbnQKPHxmaW1fZW5kfD4="]
["e5a4c76dddf4b5dd1e576dfe6268eac2fbd2ad85-1","e5a4c76dddf4b5dd1e576dfe6268eac2fbd2ad85","PHxmaW1fcHJlZml4fD4KZnJvbSBjb2RlIGltcG9ydCBjYW5jZXIKZnJvbSBjb2RlIGltcG9ydCBjZWxscwppbXBvcnQgcHlsYWIgYXMgcHkKCmZyb20gY29uZmlnIGltcG9ydCBjb25maWcKaW1wb3J0IHNjaXB5IGFzIHNwCgoKY29uZmlnWydYU0laRSddID0gMTAwCmNvbmZpZ1snWVNJWkUnXSA9IDEwMApjb25maWdbJ2Jhc2FsX2hlaWdodCddID0gNQpjb25maWdbJ2ZpcnN0X2NhbmNlcl9jZWxsX3lvZmZzZXQnXSA9IDEuNQoKCgpkZWYgc3RhcnRvZmYoKToKCiAgICAjcHkuZmlndXJlKDEpCiAgICAjcHkuc2hvdygpCgogICAgUSA9IGNhbmNlci5DYW5jZXJTaW0oY29uZmlnKQoKICAgIGZpcnN0Y2VsbCA9IGNlbGxzLkNlbGwoWzAsMF0sUS5jYW5jZXIsMSkKCiAgICBRLmNhbmNlcl9jZWxscy5hcHBlbmQoZmlyc3RjZWxsKQogICAgUS5hZGRfY2VsbChmaXJzdGNlbGwpCgogICAgI1EucGxvdF9zaXplZF9jZWxscygpCiAgICAjcHkuZHJhdygpCgogICAgcmV0dXJuIFEKCiNRLl9zZXR1cCgpCgojcHkuaW9mZigpCgpjbHVzdGVyZGlyID0gImNsdXN0ZXJzLyIKCnNpemVzID0gWzYwLDgwLDEwMF0KCmZyb20gdXVpZCBpbXBvcnQgdXVpZDQKaW1wb3J0IG9zCgpkZWYgcnVuKHN0ZXBzPTQwKToKICAgIHBrID0gdXVpZDQoKQogICAgZm9yIGkgaW4gcmFuZ2Uoc3RlcHMpOgogICAgICAgIFEudGltZV9zdGVwKCkKICAgICAgICBpZiBpJTEwID09IDA6CiAgICAgICAgICAgIHByaW50IGkqMS4vc3RlcHMKICAgICAgICBRLnBsb3RfbGlua3MoKQogICAgICAgIHB5LnhsaW0oKC0yNSwyNSkpCiAgICAgICAgcHkueWxpbSgoLTI1LGNvbmZpZ1snWVNJWkUnXSkpCiAgICAgICAgcHkuZHJhdygpCgogICAgeHlmaWxlID0gb3MucGF0aC5qb2luKGNsdXN0ZXJkaXIsc3RyKHN0ZXBzKSxzdHIocGspICsgIi5neiIpCiAgICAjUS5zYXZlKCdjbHVzdGVycy80MC97OjA4ZH0uZGF0Jy5mb3JtYXQocGspKQogICAgc3Auc2F2ZXR4dCh4eWZpbGUsUS5nZXRfcG9zX2Fycihmb3JjZT1UcnVlKSkKICAgICNweS5kcmF3KCkgIAoKCmltcG9ydCB0aW1lCmZyb20gZW1haWxtZSBpbXBvcnQgc2VuZF9lbWFpbAoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKCiAgICBmb3Igc2l6ZSBpbiBzaXplczoKICAgICAgICBmb3IgciBpbiB4cmFuZ2UoMTAwMCk6CiAgICAgICAgICAgIHN0YXJ0dGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgICAgIFEgPSBzdGFydG9mZigpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgcnVuKHNpemUpCiAgICAgICAgICAgIGVsYXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnR0aW1lCiAgICAgICAgICAgIHByaW50ICJUaGlzIHRpbWUgdG9vayB7fSBzZWNvbmRzIi5mb3JtYXQoZWxhcHNlZF90aW1lKQogICAgICAgICAgICBzZW5kX2VtYWlsKG1lc3NhZ2U9IlRoZSBydW4gb2Ygc2l6ZT17fSBmaW5pc2hlZCwgaXQgdG9vayB7fSBzZWNvbmRzIi5mb3JtYXQoc2l6ZSwgZWxhcHNlZF90aW1lKSkKPHxmaW1fZW5kfD4="]
["e5a4c76dddf4b5dd1e576dfe6268eac2fbd2ad85-2","e5a4c76dddf4b5dd1e576dfe6268eac2fbd2ad85","PHxmaW1fcHJlZml4fD4KZnJvbSBjb2RlIGltcG9ydCBjYW5jZXIKZnJvbSBjb2RlIGltcG9ydCBjZWxscwppbXBvcnQgcHlsYWIgYXMgcHkKCmZyb20gY29uZmlnIGltcG9ydCBjb25maWcKaW1wb3J0IHNjaXB5IGFzIHNwCgoKY29uZmlnWydYU0laRSddID0gMTAwCmNvbmZpZ1snWVNJWkUnXSA9IDEwMApjb25maWdbJ2Jhc2FsX2hlaWdodCddID0gNQpjb25maWdbJ2ZpcnN0X2NhbmNlcl9jZWxsX3lvZmZzZXQnXSA9IDEuNQoKCgpkZWYgc3RhcnRvZmYoKToKCiAgICAjcHkuZmlndXJlKDEpCjx8ZmltX2hvbGV8PgogICAgZmlyc3RjZWxsID0gY2VsbHMuQ2VsbChbMCwwXSxRLmNhbmNlciwxKQoKICAgIFEuY2FuY2VyX2NlbGxzLmFwcGVuZChmaXJzdGNlbGwpCiAgICBRLmFkZF9jZWxsKGZpcnN0Y2VsbCkKCiAgICAjUS5wbG90X3NpemVkX2NlbGxzKCkKICAgICNweS5kcmF3KCkKCiAgICByZXR1cm4gUQoKI1EuX3NldHVwKCkKCiNweS5pb2ZmKCkKCmNsdXN0ZXJkaXIgPSAiY2x1c3RlcnMvIgoKc2l6ZXMgPSBbNjAsODAsMTAwXQoKZnJvbSB1dWlkIGltcG9ydCB1dWlkNAppbXBvcnQgb3MKCmRlZiBydW4oc3RlcHM9NDApOgogICAgcGsgPSB1dWlkNCgpCiAgICBmb3IgaSBpbiByYW5nZShzdGVwcyk6CiAgICAgICAgUS50aW1lX3N0ZXAoKQogICAgICAgIGlmIGklMTAgPT0gMDoKICAgICAgICAgICAgcHJpbnQgaSoxLi9zdGVwcwogICAgICAgIFEucGxvdF9saW5rcygpCiAgICAgICAgcHkueGxpbSgoLTI1LDI1KSkKICAgICAgICBweS55bGltKCgtMjUsY29uZmlnWydZU0laRSddKSkKICAgICAgICBweS5kcmF3KCkKCiAgICB4eWZpbGUgPSBvcy5wYXRoLmpvaW4oY2x1c3RlcmRpcixzdHIoc3RlcHMpLHN0cihwaykgKyAiLmd6IikKICAgICNRLnNhdmUoJ2NsdXN0ZXJzLzQwL3s6MDhkfS5kYXQnLmZvcm1hdChwaykpCiAgICBzcC5zYXZldHh0KHh5ZmlsZSxRLmdldF9wb3NfYXJyKGZvcmNlPVRydWUpKQogICAgI3B5LmRyYXcoKSAgCgoKaW1wb3J0IHRpbWUKZnJvbSBlbWFpbG1lIGltcG9ydCBzZW5kX2VtYWlsCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgoKICAgIGZvciBzaXplIGluIHNpemVzOgogICAgICAgIGZvciByIGluIHhyYW5nZSgxMDAwKToKICAgICAgICAgICAgc3RhcnR0aW1lID0gdGltZS50aW1lKCkKICAgICAgICAgICAgUSA9IHN0YXJ0b2ZmKCkKICAgICAgICAgICAgcnVuKHNpemUpCiAgICAgICAgICAgIGVsYXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnR0aW1lCiAgICAgICAgICAgIHByaW50ICJUaGlzIHRpbWUgdG9vayB7fSBzZWNvbmRzIi5mb3JtYXQoZWxhcHNlZF90aW1lKQogICAgICAgICAgICBzZW5kX2VtYWlsKG1lc3NhZ2U9IlRoZSBydW4gb2Ygc2l6ZT17fSBmaW5pc2hlZCwgaXQgdG9vayB7fSBzZWNvbmRzIi5mb3JtYXQoc2l6ZSwgZWxhcHNlZF90aW1lKSkKCjx8ZmltX3N1ZmZpeHw+CiAgICAjcHkuc2hvdygpCgogICAgUSA9IGNhbmNlci5DYW5jZXJTaW0oY29uZmlnKQoKPHxmaW1fZW5kfD4="]
["e5a4c76dddf4b5dd1e576dfe6268eac2fbd2ad85-3","e5a4c76dddf4b5dd1e576dfe6268eac2fbd2ad85","PHxmaW1fcHJlZml4fD4KZnJvbSBjb2RlIGltcG9ydCBjYW5jZXIKZnJvbSBjb2RlIGltcG9ydCBjZWxscwppbXBvcnQgcHlsYWIgYXMgcHkKCmZyb20gY29uZmlnIGltcG9ydCBjb25maWcKaW1wb3J0IHNjaXB5IGFzIHNwCgoKY29uZmlnWydYU0laRSddID0gMTAwCmNvbmZpZ1snWVNJWkUnXSA9IDEwMApjb25maWdbJ2Jhc2FsX2hlaWdodCddID0gNQpjb25maWdbJ2ZpcnN0X2NhbmNlcl9jZWxsX3lvZmZzZXQnXSA9IDEuNQoKCgpkZWYgc3RhcnRvZmYoKToKCiAgICAjcHkuZmlndXJlKDEpCiAgICAjcHkuc2hvdygpCgogICAgUSA9IGNhbmNlci5DYW5jZXJTaW0oY29uZmlnKQoKICAgIGZpcnN0Y2VsbCA9IGNlbGxzLkNlbGwoWzAsMF0sUS5jYW5jZXIsMSkKCiAgICBRLmNhbmNlcl9jZWxscy5hcHBlbmQoZmlyc3RjZWxsKQogICAgUS5hZGRfY2VsbChmaXJzdGNlbGwpCgogICAgI1EucGxvdF9zaXplZF9jZWxscygpCiAgICAjcHkuZHJhdygpCgogICAgcmV0dXJuIFEKCiNRLl9zZXR1cCgpCgojcHkuaW9mZigpCgpjbHVzdGVyZGlyID0gImNsdXN0ZXJzLyIKCnNpemVzID0gWzYwLDgwLDEwMF0KCmZyb20gdXVpZCBpbXBvcnQgdXVpZDQKaW1wb3J0IG9zCgpkZWYgcnVuKHN0ZXBzPTQwKToKICAgIHBrID0gdXVpZDQoKQogICAgZm9yIGkgaW4gcmFuZ2Uoc3RlcHMpOgogICAgICAgIFEudGltZV9zdGVwKCkKICAgICAgICBpZiBpJTEwID09IDA6CiAgICAgICAgICAgIHByaW50IGkqMS4vc3RlcHMKICAgICAgICBRLnBsb3RfbGlua3MoKQogICAgICAgIHB5LnhsaW0oKC0yNSwyNSkpCiAgICAgICAgcHkueWxpbSgoLTI1LGNvbmZpZ1snWVNJWkUnXSkpCiAgICAgICAgcHkuZHJhdygpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICB4eWZpbGUgPSBvcy5wYXRoLmpvaW4oY2x1c3RlcmRpcixzdHIoc3RlcHMpLHN0cihwaykgKyAiLmd6IikKICAgICNRLnNhdmUoJ2NsdXN0ZXJzLzQwL3s6MDhkfS5kYXQnLmZvcm1hdChwaykpCiAgICBzcC5zYXZldHh0KHh5ZmlsZSxRLmdldF9wb3NfYXJyKGZvcmNlPVRydWUpKQogICAgI3B5LmRyYXcoKSAgCjx8ZmltX2VuZHw+"]
["82351c661f6d95b7eb8e2cf48da9d0ab668ac333-1","82351c661f6d95b7eb8e2cf48da9d0ab668ac333","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGN2MgppbXBvcnQgdGltZQppbXBvcnQgbnVtcHkgYXMgbnAKCmltZyA9IGN2Mi5pbXJlYWQoImxlbmEucG5nIikKCiMgaW1nX2hmbGlwID0gCgojIOWeguebtOe/u+i9iSAodmVydGljYWwpCmltZ192ZmxpcCA9IGN2Mi5mbGlwKGltZywxKQppbWdfaGZsaXAgPSBjdjIuZmxpcChpbWcsLTEpCgpjdjIuaW1zaG93KCJpbWdfdmZsaXAiLGltZ192ZmxpcCkKY3YyLmltc2hvdygiaW1nX2hmbGlwIixpbWdfaGZsaXApCgoKCiMg5bCH5ZyW54mH57iu5bCP5oiQ5Y6f5pys55qEIDIwJQppbWdfdGVzdCA9IGN2Mi5yZXNpemUoaW1nLCBOb25lLCBmeD0wLjIsIGZ5PTAuMikKCjx8ZmltX2hvbGV8PgpzdGFydF90aW1lID0gdGltZS50aW1lKCkKaW1nX2FyZWFfc2NhbGUgPSAKcHJpbnQoJ0lOVEVSX05FQVJFU1Qgem9vbSBjb3N0IHt9Jy5mb3JtYXQodGltZS50aW1lKCkgLSBzdGFydF90aW1lKSkKCiMg6ZuZ56uL5pa55beu6KOcIHNjYWxlICsg6KiI566X6Iqx6LK75pmC6ZaTCnN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQppbWdfY3ViaWNfc2NhbGUgPSAKcHJpbnQoJ0lOVEVSX0NVQklDIHpvb20gY29zdCB7fScuZm9ybWF0KHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSkpCgojIOe1hOWQiCArIOmhr+ekuuWclueJhwppbWdfem9vbSA9IG5wLmhzdGFjaygoaW1nX2FyZWFfc2NhbGUsIGltZ19jdWJpY19zY2FsZSkpCndoaWxlIFRydWU6CiAgICBjdjIuaW1zaG93KCd6b29tIGltYWdlJywgaW1nX3pvb20pCiAgICBrID0gY3YyLndhaXRLZXkoMCkKICAgIGlmIGsgPT0gMjc6CiAgICAgICAgY3YyLmRlc3Ryb3lBbGxXaW5kb3dzKCkKICAgICAgICBicmVhawo8fGZpbV9zdWZmaXh8PgojIOWwh+WclueJh+aUvuWkp+eCuiLlsI/lnJbniYci55qEIDgg5YCN5aSnID0g5Y6f5ZyW55qEIDEuNiDlgI3lpKcKZngsIGZ5ID0gOCwgOAoKIyDphLDov5Hlt67lgLwgc2NhbGUgKyDoqIjnrpfoirHosrvmmYLplpMKPHxmaW1fZW5kfD4="]
["82351c661f6d95b7eb8e2cf48da9d0ab668ac333-2","82351c661f6d95b7eb8e2cf48da9d0ab668ac333","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGN2MgppbXBvcnQgdGltZQppbXBvcnQgbnVtcHkgYXMgbnAKCmltZyA9IGN2Mi5pbXJlYWQoImxlbmEucG5nIikKCiMgaW1nX2hmbGlwID0gCgojIOWeguebtOe/u+i9iSAodmVydGljYWwpCmltZ192ZmxpcCA9IGN2Mi5mbGlwKGltZywxKQppbWdfaGZsaXAgPSBjdjIuZmxpcChpbWcsLTEpCgpjdjIuaW1zaG93KCJpbWdfdmZsaXAiLGltZ192ZmxpcCkKY3YyLmltc2hvdygiaW1nX2hmbGlwIixpbWdfaGZsaXApCgoKCiMg5bCH5ZyW54mH57iu5bCP5oiQ5Y6f5pys55qEIDIwJQppbWdfdGVzdCA9IGN2Mi5yZXNpemUoaW1nLCBOb25lLCBmeD0wLjIsIGZ5PTAuMikKCiMg5bCH5ZyW54mH5pS+5aSn54K6IuWwj+WclueJhyLnmoQgOCDlgI3lpKcgPSDljp/lnJbnmoQgMS42IOWAjeWkpwpmeCwgZnkgPSA4LCA4Cgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMg6YSw6L+R5beu5YC8IHNjYWxlICsg6KiI566X6Iqx6LK75pmC6ZaTCnN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQppbWdfYXJlYV9zY2FsZSA9IApwcmludCgnSU5URVJfTkVBUkVTVCB6b29tIGNvc3Qge30nLmZvcm1hdCh0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUpKQo8fGZpbV9lbmR8Pg=="]
["82351c661f6d95b7eb8e2cf48da9d0ab668ac333-3","82351c661f6d95b7eb8e2cf48da9d0ab668ac333","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGN2MgppbXBvcnQgdGltZQppbXBvcnQgbnVtcHkgYXMgbnAKCmltZyA9IGN2Mi5pbXJlYWQoImxlbmEucG5nIikKCiMgaW1nX2hmbGlwID0gCgojIOWeguebtOe/u+i9iSAodmVydGljYWwpCmltZ192ZmxpcCA9IGN2Mi5mbGlwKGltZywxKQppbWdfaGZsaXAgPSBjdjIuZmxpcChpbWcsLTEpCgpjdjIuaW1zaG93KCJpbWdfdmZsaXAiLGltZ192ZmxpcCkKY3YyLmltc2hvdygiaW1nX2hmbGlwIixpbWdfaGZsaXApCgoKCiMg5bCH5ZyW54mH57iu5bCP5oiQ5Y6f5pys55qEIDIwJQppbWdfdGVzdCA9IGN2Mi5yZXNpemUoaW1nLCBOb25lLCBmeD0wLjIsIGZ5PTAuMikKCiMg5bCH5ZyW54mH5pS+5aSn54K6IuWwj+WclueJhyLnmoQgOCDlgI3lpKcgPSDljp/lnJbnmoQgMS42IOWAjeWkpwpmeCwgZnkgPSA4LCA4CgojIOmEsOi/keW3ruWAvCBzY2FsZSArIOioiOeul+iKseiyu+aZgumWkwpzdGFydF90aW1lID0gdGltZS50aW1lKCkKaW1nX2FyZWFfc2NhbGUgPSAKcHJpbnQoJ0lOVEVSX05FQVJFU1Qgem9vbSBjb3N0IHt9Jy5mb3JtYXQodGltZS50aW1lKCkgLSBzdGFydF90aW1lKSkKCiMg6ZuZ56uL5pa55beu6KOcIHNjYWxlICsg6KiI566X6Iqx6LK75pmC6ZaTCnN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQppbWdfY3ViaWNfc2NhbGUgPSAKcHJpbnQoJ0lOVEVSX0NVQklDIHpvb20gY29zdCB7fScuZm9ybWF0KHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSkpCgojIOe1hOWQiCArIOmhr+ekuuWclueJhwppbWdfem9vbSA9IG5wLmhzdGFjaygoaW1nX2FyZWFfc2NhbGUsIGltZ19jdWJpY19zY2FsZSkpCndoaWxlIFRydWU6CiAgICBjdjIuaW1zaG93KCd6b29tIGltYWdlJywgaW1nX3pvb20pCiAgICBrID0gY3YyLndhaXRLZXkoMCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgaWYgayA9PSAyNzoKICAgICAgICBjdjIuZGVzdHJveUFsbFdpbmRvd3MoKQogICAgICAgIGJyZWFrCjx8ZmltX2VuZHw+"]
["82351c661f6d95b7eb8e2cf48da9d0ab668ac333-4","82351c661f6d95b7eb8e2cf48da9d0ab668ac333","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGN2MgppbXBvcnQgdGltZQppbXBvcnQgbnVtcHkgYXMgbnAKCmltZyA9IGN2Mi5pbXJlYWQoImxlbmEucG5nIikKCiMgaW1nX2hmbGlwID0gCgojIOWeguebtOe/u+i9iSAodmVydGljYWwpCmltZ192ZmxpcCA9IGN2Mi5mbGlwKGltZywxKQppbWdfaGZsaXAgPSBjdjIuZmxpcChpbWcsLTEpCgpjdjIuaW1zaG93KCJpbWdfdmZsaXAiLGltZ192ZmxpcCkKY3YyLmltc2hvdygiaW1nX2hmbGlwIixpbWdfaGZsaXApCgoKCiMg5bCH5ZyW54mH57iu5bCP5oiQ5Y6f5pys55qEIDIwJQppbWdfdGVzdCA9IGN2Mi5yZXNpemUoaW1nLCBOb25lLCBmeD0wLjIsIGZ5PTAuMikKCiMg5bCH5ZyW54mH5pS+5aSn54K6IuWwj+WclueJhyLnmoQgOCDlgI3lpKcgPSDljp/lnJbnmoQgMS42IOWAjeWkpwpmeCwgZnkgPSA4LCA4CgojIOmEsOi/keW3ruWAvCBzY2FsZSArIOioiOeul+iKseiyu+aZgumWkwpzdGFydF90aW1lID0gdGltZS50aW1lKCkKaW1nX2FyZWFfc2NhbGUgPSAKcHJpbnQoJ0lOVEVSX05FQVJFU1Qgem9vbSBjb3N0IHt9Jy5mb3JtYXQodGltZS50aW1lKCkgLSBzdGFydF90aW1lKSkKCiMg6ZuZ56uL5pa55beu6KOcIHNjYWxlICsg6KiI566X6Iqx6LK75pmC6ZaTCnN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQppbWdfY3ViaWNfc2NhbGUgPSAKcHJpbnQoJ0lOVEVSX0NVQklDIHpvb20gY29zdCB7fScuZm9ybWF0KHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSkpCgojIOe1hOWQiCArIOmhr+ekuuWclueJhwppbWdfem9vbSA9IG5wLmhzdGFjaygoaW1nX2FyZWFfc2NhbGUsIGltZ19jdWJpY19zY2FsZSkpCndoaWxlIFRydWU6CiAgICBjdjIuaW1zaG93KCd6b29tIGltYWdlJywgaW1nX3pvb20pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGsgPSBjdjIud2FpdEtleSgwKQogICAgaWYgayA9PSAyNzoKICAgICAgICBjdjIuZGVzdHJveUFsbFdpbmRvd3MoKQogICAgICAgIGJyZWFrCjx8ZmltX2VuZHw+"]
["82351c661f6d95b7eb8e2cf48da9d0ab668ac333-5","82351c661f6d95b7eb8e2cf48da9d0ab668ac333","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGN2MgppbXBvcnQgdGltZQppbXBvcnQgbnVtcHkgYXMgbnAKCmltZyA9IGN2Mi5pbXJlYWQoImxlbmEucG5nIikKCiMgaW1nX2hmbGlwID0gCgojIOWeguebtOe/u+i9iSAodmVydGljYWwpCmltZ192ZmxpcCA9IGN2Mi5mbGlwKGltZywxKQppbWdfaGZsaXAgPSBjdjIuZmxpcChpbWcsLTEpCgpjdjIuaW1zaG93KCJpbWdfdmZsaXAiLGltZ192ZmxpcCkKY3YyLmltc2hvdygiaW1nX2hmbGlwIixpbWdfaGZsaXApCgoKCiMg5bCH5ZyW54mH57iu5bCP5oiQ5Y6f5pys55qEIDIwJQppbWdfdGVzdCA9IGN2Mi5yZXNpemUoaW1nLCBOb25lLCBmeD0wLjIsIGZ5PTAuMikKCiMg5bCH5ZyW54mH5pS+5aSn54K6IuWwj+WclueJhyLnmoQgOCDlgI3lpKcgPSDljp/lnJbnmoQgMS42IOWAjeWkpwpmeCwgZnkgPSA4LCA4CgojIOmEsOi/keW3ruWAvCBzY2FsZSArIOioiOeul+iKseiyu+aZgumWkwpzdGFydF90aW1lID0gdGltZS50aW1lKCkKaW1nX2FyZWFfc2NhbGUgPSAKcHJpbnQoJ0lOVEVSX05FQVJFU1Qgem9vbSBjb3N0IHt9Jy5mb3JtYXQodGltZS50aW1lKCkgLSBzdGFydF90aW1lKSkKCiMg6ZuZ56uL5pa55beu6KOcIHNjYWxlICsg6KiI566X6Iqx6LK75pmC6ZaTCnN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQppbWdfY3ViaWNfc2NhbGUgPSAKcHJpbnQoJ0lOVEVSX0NVQklDIHpvb20gY29zdCB7fScuZm9ybWF0KHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSkpCgojIOe1hOWQiCArIOmhr+ekuuWclueJhwppbWdfem9vbSA9IG5wLmhzdGFjaygoaW1nX2FyZWFfc2NhbGUsIGltZ19jdWJpY19zY2FsZSkpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4Kd2hpbGUgVHJ1ZToKICAgIGN2Mi5pbXNob3coJ3pvb20gaW1hZ2UnLCBpbWdfem9vbSkKICAgIGsgPSBjdjIud2FpdEtleSgwKQogICAgaWYgayA9PSAyNzoKPHxmaW1fZW5kfD4="]
["00d075f767719ab7bed0635030982f99b884db55-1","00d075f767719ab7bed0635030982f99b884db55","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wIAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBuZXR3b3JreCBhcyBueApmcm9tIG5ldHdvcmt4LmdlbmVyYXRvcnMuY2xhc3NpYyBpbXBvcnQgY29tcGxldGVfZ3JhcGgKZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFBvb2wsIGNwdV9jb3VudApmcm9tIGZ1bmN0b29scyBpbXBvcnQgcGFydGlhbApmcm9tIHRxZG0gaW1wb3J0IHRxZG0KCmdyYXBoX3NpemUgPSAxMApudW1fdHJpYWxzID0gMTAwMDAKbmV0d29ya19yZWZyZXNoX2ludGVydmFsID0gMTAwCm51bV9yZWZyZXNoZXMgPSBudW1fdHJpYWxzLy9uZXR3b3JrX3JlZnJlc2hfaW50ZXJ2YWwKbnVtX3dvcmtlcnMgPSBjcHVfY291bnQoKQoKCmRlZiBnZXRfbmVpZ2hib3Vyc19saXN0KEcsbm9kZSk6CiAgICBhZGogPSBbKG4sbmJyZGljdCkgZm9yIG4sIG5icmRpY3QgaW4gRy5hZGphY2VuY3koKSBpZiBuPT1ub2RlXQogICAgcmV0dXJuIGxpc3QoYWRqWzBdWzFdLmtleXMoKSkKCmRlZiBkZWF0aF9iaXJ0aF9maXRuZXNzKEcsbm9kZSxiKToKICAgIGMgPSAxCiAgICB3PSAxCiAgICBDX2ZpdG5lc3MgPSBEX2ZpdG5lc3MgPSAwCiAgICAjIGdldCBhbGwgbmVpZ2hib3VycyBvZiBjZWxsCiAgICBuZWlnaGJvdXJzID0gZ2V0X25laWdoYm91cnNfbGlzdChHLG5vZGUpCiAgICBmb3IgbmJyIGluIG5laWdoYm91cnM6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAjIGZpbmQgaXQncyBuZWlnaGJvdXJzCiAgICAgICAgbmJyX2xpc3QgPSBnZXRfbmVpZ2hib3Vyc19saXN0KEcsbmJyKQogICAgICAgIG51bV9DID0gbnVtX0QgPSAwCiAgICAgICAgZm9yIG5iIGluIG5icl9saXN0OiAgIAo8fGZpbV9lbmR8Pg=="]
["00d075f767719ab7bed0635030982f99b884db55-2","00d075f767719ab7bed0635030982f99b884db55","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wIAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBuZXR3b3JreCBhcyBueApmcm9tIG5ldHdvcmt4LmdlbmVyYXRvcnMuY2xhc3NpYyBpbXBvcnQgY29tcGxldGVfZ3JhcGgKZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFBvb2wsIGNwdV9jb3VudApmcm9tIGZ1bmN0b29scyBpbXBvcnQgcGFydGlhbApmcm9tIHRxZG0gaW1wb3J0IHRxZG0KCmdyYXBoX3NpemUgPSAxMApudW1fdHJpYWxzID0gMTAwMDAKbmV0d29ya19yZWZyZXNoX2ludGVydmFsID0gMTAwCm51bV9yZWZyZXNoZXMgPSBudW1fdHJpYWxzLy9uZXR3b3JrX3JlZnJlc2hfaW50ZXJ2YWwKbnVtX3dvcmtlcnMgPSBjcHVfY291bnQoKQoKCmRlZiBnZXRfbmVpZ2hib3Vyc19saXN0KEcsbm9kZSk6CiAgICBhZGogPSBbKG4sbmJyZGljdCkgZm9yIG4sIG5icmRpY3QgaW4gRy5hZGphY2VuY3koKSBpZiBuPT1ub2RlXQogICAgcmV0dXJuIGxpc3QoYWRqWzBdWzFdLmtleXMoKSkKCmRlZiBkZWF0aF9iaXJ0aF9maXRuZXNzKEcsbm9kZSxiKToKICAgIGMgPSAxCiAgICB3PSAxCiAgICBDX2ZpdG5lc3MgPSBEX2ZpdG5lc3MgPSAwCiAgICAjIGdldCBhbGwgbmVpZ2hib3VycyBvZiBjZWxsCiAgICBuZWlnaGJvdXJzID0gZ2V0X25laWdoYm91cnNfbGlzdChHLG5vZGUpCiAgICBmb3IgbmJyIGluIG5laWdoYm91cnM6CiAgICAgICAgIyBmaW5kIGl0J3MgbmVpZ2hib3VycwogICAgICAgIG5icl9saXN0ID0gZ2V0X25laWdoYm91cnNfbGlzdChHLG5icikKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIGVsaWYgRy5ub2Rlc1tuYl1bJ25hbWUnXSA9PSAnRCc6CiAgICAgICAgICAgICAgICBudW1fRCArPSAxCiAgICAgICAgaWYgRy5ub2Rlc1tuYnJdWyduYW1lJ10gPT0gJ0MnOgogICAgICAgICAgICAgICAgQ19maXRuZXNzICs9IDEtdyt3KihudW1fQypiIC0gYyoobnVtX0MrbnVtX0QpKQogICAgICAgIGVsaWYgRy5ub2Rlc1tuYnJdWyduYW1lJ10gPT0gJ0QnOgogICAgICAgICAgICAgICAgRF9maXRuZXNzICs9IDEtdyt3KihudW1fQypiKQogICAgZml0bmVzc2VzID0gW0NfZml0bmVzcywgRF9maXRuZXNzXQogICAgcmV0dXJuIG5wLmFycmF5KGZpdG5lc3Nlcykvc3VtKGZpdG5lc3NlcykKCmRlZiBjb3VudF9mcmVxdWVuY2llcyhHKToKICAgIG51bV9DID0gbnVtX0QgPSAwCiAgICBmb3Igbm9kZSBpbiBHOgogICAgICAgIGlmIEcubm9kZXNbbm9kZV1bJ25hbWUnXSA9PSAnQyc6CiAgICAgICAgICAgICAgICBudW1fQyArPSAxCiAgICAgICAgZWxpZiBHLm5vZGVzW25vZGVdWyduYW1lJ10gPT0gJ0QnOgogICAgICAgICAgICAgICAgbnVtX0QgKz0gMQogICAgbnVtcyA9IFtudW1fQywgbnVtX0RdCiAgICByZXR1cm4gbnAuYXJyYXkobnVtcykvc3VtKG51bXMpCgpkZWYgbGlzdF9wbGF5ZXJzKEcpOgogICAgcGxheWVycyA9IFtdCiAgICBmb3Igbm9kZSBpbiBHOgogICAgICAgIHBsYXllcnMuYXBwZW5kKEcubm9kZXNbbm9kZV1bJ25hbWUnXSkKICAgIHJldHVybiBwbGF5ZXJzCgpkZWYgZXZvbHZlKGdyYXBoLGIpOgogICAgd2hpbGUgY291bnRfZnJlcXVlbmNpZXMoZ3JhcGgpWzBdIG5vdCBpbiBbMC4wLDEuMF06CiAgICAgICAgY2hvc2VuID0gbnAucmFuZG9tLnJhbmRpbnQoMCxncmFwaF9zaXplKQogICAgICAgIGZuX0MgPSBkZWF0aF9iaXJ0aF9maXRuZXNzKGdyYXBoLGNob3NlbixiKVswXSAgICAKICAgICAgICBncmFwaC5ub2Rlc1tjaG9zZW5dWyduYW1lJ10gPSAnQycgaWYgbnAucmFuZG9tLnJhbmRvbSgpIDwgZm5fQyBlbHNlICdEJwogICAgcmV0dXJuIGNvdW50X2ZyZXF1ZW5jaWVzKGdyYXBoKVswXQoKaWYgX19uYW1lX189PSdfX21haW5fXyc6CiAgICAKICAgIGJlbmVmaXQgPSAxMAogICAgd2l0aCBQb29sKG51bV93b3JrZXJzKSBhcyBwb29sOgogICAgICAgIHJlc3VsdHMgPSBbXQogICAgICAgIGZvciBpIGluIHRxZG0ocmFuZ2UobnVtX3JlZnJlc2hlcyksbGVhdmU9RmFsc2UsZGVzYz0nVG90YWwnKToKICAgICAgICAgICAgZm9yIGogaW4gdHFkbShyYW5nZShuZXR3b3JrX3JlZnJlc2hfaW50ZXJ2YWwvL251bV93b3JrZXJzKSxkZXNjPSdCYXRjaCcsIGxlYXZlPUZhbHNlKToKICAgICAgICAgICAgICAgICMgR2VuZXJhdGUgYSBmcmVzaCBncmFwaCB3aXRoIGEgcmFuZG9tIGNvb3BlcmF0b3IKICAgICAgICAgICAgICAgIGludmFkZXIgPSBucC5yYW5kb20ucmFuZGludChncmFwaF9zaXplKSAgICAgIAogICAgICAgICAgICAgICAgZ3JhcGhzID0gW2NvbXBsZXRlX2dyYXBoKGdyYXBoX3NpemUpZm9yIF8gaW4gcmFuZ2UobnVtX3dvcmtlcnMpXQogICAgICAgICAgICAgICAgIyBJbml0aWFsaXppbmcgZ3JhcGggbm9kZXMKICAgICAgICAgICAgICAgIGZvciBHIGluIGdyYXBoczoKICAgICAgICAgICAgICAgICAgICBmb3Igbm9kZSBpbiBHOgogICAgICAgICAgICAgICAgICAgICAgICBHLm5vZGVzW25vZGVdWyduYW1lJ10gPSAnQycgaWYgbm9kZSA9PSBpbnZhZGVyIGVsc2UgJ0QnCiAgICAgICAgICAgICAgICBzZXRfcmVzdWx0ID0gcG9vbC5tYXAocGFydGlhbChldm9sdmUsYj1iZW5lZml0KSAsZ3JhcGhzKQogICAgICAgICAgICAgICAgcmVzdWx0cys9c2V0X3Jlc3VsdAogICAgICAgICAgICAgICAgIyBwcmludCgne30gLS0+IHt9Jy5mb3JtYXQoaSpuZXR3b3JrX3JlZnJlc2hfaW50ZXJ2YWwraipudW1fd29ya2VycyxzZXRfcmVzdWx0KSkKICAgICAgICBwcmludCgiXG5GaXhhdGlvbiBwcm9iYWJpbGl0eSBvZiBDOiB7fSIuZm9ybWF0KHN1bShyZXN1bHRzKS9udW1fdHJpYWxzKSkKICAgIAo8fGZpbV9zdWZmaXh8PgogICAgICAgIG51bV9DID0gbnVtX0QgPSAwCiAgICAgICAgZm9yIG5iIGluIG5icl9saXN0OiAgIAogICAgICAgICAgICBpZiBHLm5vZGVzW25iXVsnbmFtZSddID09ICdDJzoKICAgICAgICAgICAgICAgIG51bV9DICs9IDEKPHxmaW1fZW5kfD4="]
["00d075f767719ab7bed0635030982f99b884db55-3","00d075f767719ab7bed0635030982f99b884db55","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wIAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBuZXR3b3JreCBhcyBueApmcm9tIG5ldHdvcmt4LmdlbmVyYXRvcnMuY2xhc3NpYyBpbXBvcnQgY29tcGxldGVfZ3JhcGgKZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFBvb2wsIGNwdV9jb3VudApmcm9tIGZ1bmN0b29scyBpbXBvcnQgcGFydGlhbApmcm9tIHRxZG0gaW1wb3J0IHRxZG0KCmdyYXBoX3NpemUgPSAxMApudW1fdHJpYWxzID0gMTAwMDAKbmV0d29ya19yZWZyZXNoX2ludGVydmFsID0gMTAwCm51bV9yZWZyZXNoZXMgPSBudW1fdHJpYWxzLy9uZXR3b3JrX3JlZnJlc2hfaW50ZXJ2YWwKbnVtX3dvcmtlcnMgPSBjcHVfY291bnQoKQoKCmRlZiBnZXRfbmVpZ2hib3Vyc19saXN0KEcsbm9kZSk6CiAgICBhZGogPSBbKG4sbmJyZGljdCkgZm9yIG4sIG5icmRpY3QgaW4gRy5hZGphY2VuY3koKSBpZiBuPT1ub2RlXQogICAgcmV0dXJuIGxpc3QoYWRqWzBdWzFdLmtleXMoKSkKCmRlZiBkZWF0aF9iaXJ0aF9maXRuZXNzKEcsbm9kZSxiKToKICAgIGMgPSAxCiAgICB3PSAxCiAgICBDX2ZpdG5lc3MgPSBEX2ZpdG5lc3MgPSAwCiAgICAjIGdldCBhbGwgbmVpZ2hib3VycyBvZiBjZWxsCiAgICBuZWlnaGJvdXJzID0gZ2V0X25laWdoYm91cnNfbGlzdChHLG5vZGUpCiAgICBmb3IgbmJyIGluIG5laWdoYm91cnM6CiAgICAgICAgIyBmaW5kIGl0J3MgbmVpZ2hib3VycwogICAgICAgIG5icl9saXN0ID0gZ2V0X25laWdoYm91cnNfbGlzdChHLG5icikKICAgICAgICBudW1fQyA9IG51bV9EID0gMAogICAgICAgIGZvciBuYiBpbiBuYnJfbGlzdDogICAKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBpZiBHLm5vZGVzW25iXVsnbmFtZSddID09ICdDJzoKICAgICAgICAgICAgICAgIG51bV9DICs9IDEKICAgICAgICAgICAgZWxpZiBHLm5vZGVzW25iXVsnbmFtZSddID09ICdEJzoKICAgICAgICAgICAgICAgIG51bV9EICs9IDEKPHxmaW1fZW5kfD4="]
["00d075f767719ab7bed0635030982f99b884db55-4","00d075f767719ab7bed0635030982f99b884db55","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wIAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBuZXR3b3JreCBhcyBueApmcm9tIG5ldHdvcmt4LmdlbmVyYXRvcnMuY2xhc3NpYyBpbXBvcnQgY29tcGxldGVfZ3JhcGgKZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFBvb2wsIGNwdV9jb3VudApmcm9tIGZ1bmN0b29scyBpbXBvcnQgcGFydGlhbApmcm9tIHRxZG0gaW1wb3J0IHRxZG0KCmdyYXBoX3NpemUgPSAxMApudW1fdHJpYWxzID0gMTAwMDAKbmV0d29ya19yZWZyZXNoX2ludGVydmFsID0gMTAwCm51bV9yZWZyZXNoZXMgPSBudW1fdHJpYWxzLy9uZXR3b3JrX3JlZnJlc2hfaW50ZXJ2YWwKbnVtX3dvcmtlcnMgPSBjcHVfY291bnQoKQoKCmRlZiBnZXRfbmVpZ2hib3Vyc19saXN0KEcsbm9kZSk6CiAgICBhZGogPSBbKG4sbmJyZGljdCkgZm9yIG4sIG5icmRpY3QgaW4gRy5hZGphY2VuY3koKSBpZiBuPT1ub2RlXQogICAgcmV0dXJuIGxpc3QoYWRqWzBdWzFdLmtleXMoKSkKCmRlZiBkZWF0aF9iaXJ0aF9maXRuZXNzKEcsbm9kZSxiKToKICAgIGMgPSAxCiAgICB3PSAxCiAgICBDX2ZpdG5lc3MgPSBEX2ZpdG5lc3MgPSAwCiAgICAjIGdldCBhbGwgbmVpZ2hib3VycyBvZiBjZWxsCiAgICBuZWlnaGJvdXJzID0gZ2V0X25laWdoYm91cnNfbGlzdChHLG5vZGUpCiAgICBmb3IgbmJyIGluIG5laWdoYm91cnM6CiAgICAgICAgIyBmaW5kIGl0J3MgbmVpZ2hib3VycwogICAgICAgIG5icl9saXN0ID0gZ2V0X25laWdoYm91cnNfbGlzdChHLG5icikKICAgICAgICBudW1fQyA9IG51bV9EID0gMAogICAgICAgIGZvciBuYiBpbiBuYnJfbGlzdDogICAKICAgICAgICAgICAgaWYgRy5ub2Rlc1tuYl1bJ25hbWUnXSA9PSAnQyc6CiAgICAgICAgICAgICAgICBudW1fQyArPSAxCiAgICAgICAgICAgIGVsaWYgRy5ub2Rlc1tuYl1bJ25hbWUnXSA9PSAnRCc6CiAgICAgICAgICAgICAgICBudW1fRCArPSAxCiAgICAgICAgaWYgRy5ub2Rlc1tuYnJdWyduYW1lJ10gPT0gJ0MnOgogICAgICAgICAgICAgICAgQ19maXRuZXNzICs9IDEtdyt3KihudW1fQypiIC0gYyoobnVtX0MrbnVtX0QpKQogICAgICAgIGVsaWYgRy5ub2Rlc1tuYnJdWyduYW1lJ10gPT0gJ0QnOgogICAgICAgICAgICAgICAgRF9maXRuZXNzICs9IDEtdyt3KihudW1fQypiKQogICAgZml0bmVzc2VzID0gW0NfZml0bmVzcywgRF9maXRuZXNzXQogICAgcmV0dXJuIG5wLmFycmF5KGZpdG5lc3Nlcykvc3VtKGZpdG5lc3NlcykKPHxmaW1faG9sZXw+CiAgICAgICAgaWYgRy5ub2Rlc1tub2RlXVsnbmFtZSddID09ICdDJzoKICAgICAgICAgICAgICAgIG51bV9DICs9IDEKICAgICAgICBlbGlmIEcubm9kZXNbbm9kZV1bJ25hbWUnXSA9PSAnRCc6CiAgICAgICAgICAgICAgICBudW1fRCArPSAxCiAgICBudW1zID0gW251bV9DLCBudW1fRF0KICAgIHJldHVybiBucC5hcnJheShudW1zKS9zdW0obnVtcykKCmRlZiBsaXN0X3BsYXllcnMoRyk6CiAgICBwbGF5ZXJzID0gW10KICAgIGZvciBub2RlIGluIEc6CiAgICAgICAgcGxheWVycy5hcHBlbmQoRy5ub2Rlc1tub2RlXVsnbmFtZSddKQogICAgcmV0dXJuIHBsYXllcnMKCmRlZiBldm9sdmUoZ3JhcGgsYik6CiAgICB3aGlsZSBjb3VudF9mcmVxdWVuY2llcyhncmFwaClbMF0gbm90IGluIFswLjAsMS4wXToKICAgICAgICBjaG9zZW4gPSBucC5yYW5kb20ucmFuZGludCgwLGdyYXBoX3NpemUpCiAgICAgICAgZm5fQyA9IGRlYXRoX2JpcnRoX2ZpdG5lc3MoZ3JhcGgsY2hvc2VuLGIpWzBdICAgIAogICAgICAgIGdyYXBoLm5vZGVzW2Nob3Nlbl1bJ25hbWUnXSA9ICdDJyBpZiBucC5yYW5kb20ucmFuZG9tKCkgPCBmbl9DIGVsc2UgJ0QnCiAgICByZXR1cm4gY291bnRfZnJlcXVlbmNpZXMoZ3JhcGgpWzBdCgppZiBfX25hbWVfXz09J19fbWFpbl9fJzoKICAgIAogICAgYmVuZWZpdCA9IDEwCiAgICB3aXRoIFBvb2wobnVtX3dvcmtlcnMpIGFzIHBvb2w6CiAgICAgICAgcmVzdWx0cyA9IFtdCiAgICAgICAgZm9yIGkgaW4gdHFkbShyYW5nZShudW1fcmVmcmVzaGVzKSxsZWF2ZT1GYWxzZSxkZXNjPSdUb3RhbCcpOgogICAgICAgICAgICBmb3IgaiBpbiB0cWRtKHJhbmdlKG5ldHdvcmtfcmVmcmVzaF9pbnRlcnZhbC8vbnVtX3dvcmtlcnMpLGRlc2M9J0JhdGNoJywgbGVhdmU9RmFsc2UpOgogICAgICAgICAgICAgICAgIyBHZW5lcmF0ZSBhIGZyZXNoIGdyYXBoIHdpdGggYSByYW5kb20gY29vcGVyYXRvcgogICAgICAgICAgICAgICAgaW52YWRlciA9IG5wLnJhbmRvbS5yYW5kaW50KGdyYXBoX3NpemUpICAgICAgCiAgICAgICAgICAgICAgICBncmFwaHMgPSBbY29tcGxldGVfZ3JhcGgoZ3JhcGhfc2l6ZSlmb3IgXyBpbiByYW5nZShudW1fd29ya2VycyldCiAgICAgICAgICAgICAgICAjIEluaXRpYWxpemluZyBncmFwaCBub2RlcwogICAgICAgICAgICAgICAgZm9yIEcgaW4gZ3JhcGhzOgogICAgICAgICAgICAgICAgICAgIGZvciBub2RlIGluIEc6CiAgICAgICAgICAgICAgICAgICAgICAgIEcubm9kZXNbbm9kZV1bJ25hbWUnXSA9ICdDJyBpZiBub2RlID09IGludmFkZXIgZWxzZSAnRCcKICAgICAgICAgICAgICAgIHNldF9yZXN1bHQgPSBwb29sLm1hcChwYXJ0aWFsKGV2b2x2ZSxiPWJlbmVmaXQpICxncmFwaHMpCiAgICAgICAgICAgICAgICByZXN1bHRzKz1zZXRfcmVzdWx0CiAgICAgICAgICAgICAgICAjIHByaW50KCd7fSAtLT4ge30nLmZvcm1hdChpKm5ldHdvcmtfcmVmcmVzaF9pbnRlcnZhbCtqKm51bV93b3JrZXJzLHNldF9yZXN1bHQpKQogICAgICAgIHByaW50KCJcbkZpeGF0aW9uIHByb2JhYmlsaXR5IG9mIEM6IHt9Ii5mb3JtYXQoc3VtKHJlc3VsdHMpL251bV90cmlhbHMpKQogICAgCjx8ZmltX3N1ZmZpeHw+CgpkZWYgY291bnRfZnJlcXVlbmNpZXMoRyk6CiAgICBudW1fQyA9IG51bV9EID0gMAogICAgZm9yIG5vZGUgaW4gRzoKPHxmaW1fZW5kfD4="]
["a9f261d050499ba528a9dfddd2793fa107f4b305-1","a9f261d050499ba528a9dfddd2793fa107f4b305","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiClRlc3QgdGhlIGJhc2UgZmxvdyBjbGFzcwoiIiIKaW1wb3J0IHB5dGVzdApmcm9tIHVuaXR0ZXN0Lm1vY2sgaW1wb3J0IGNyZWF0ZV9hdXRvc3BlYywgcGF0Y2gKCmZyb20gbmVzc2FpLmZsb3dzIGltcG9ydCBCYXNlRmxvdywgTkZsb3cKZnJvbSBuZmxvd3MudHJhbnNmb3JtcyBpbXBvcnQgVHJhbnNmb3JtCgoKQHB5dGVzdC5maXh0dXJlCmRlZiBmbG93KCk6CiAgICByZXR1cm4gY3JlYXRlX2F1dG9zcGVjKEJhc2VGbG93KQoKCmRlZiB0ZXN0X2Jhc2VfZmxvd19hYnN0cmFjdF9tZXRob2RzKCk6CiAgICAiIiJBc3NlcnQgYW4gZXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBtZXRob2RzIGFyZSBub3QgaW1wbGVtZW50ZWQuIiIiCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVHlwZUVycm9yKSBhcyBleGNpbmZvOgogICAgICAgIEJhc2VGbG93KCkKICAgIGFzc2VydCAnaW5zdGFudGlhdGUgYWJzdHJhY3QgY2xhc3MgQmFzZUZsb3cgd2l0aCBhYnN0cmFjdCBtZXRob2QnIFwKICAgICAgICBpbiBzdHIoZXhjaW5mby52YWx1ZSkKCgpAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCiAgICAnbWV0aG9kJywKICAgIFsnZm9yd2FyZCcsICdpbnZlcnNlJywgJ3NhbXBsZScsICdsb2dfcHJvYicsICdiYXNlX2Rpc3RyaWJ1dGlvbl9sb2dfcHJvYicsCiAgICAgJ2ZvcndhcmRfYW5kX2xvZ19wcm9iJywgJ3NhbXBsZV9hbmRfbG9nX3Byb2InXQopCmRlZiB0ZXN0X2Jhc2VfZmxvd19tZXRob2RzKG1ldGhvZCwgZmxvdyk6CiAgICAiIiJUZXN0IHRvIG1ha2Ugc3VyZSBhbGwgb2YgdGhlIG1ldGhvZCBpbiB0aGUgYmFzZSBjbGFzcyByYWlzZSBlcnJvcnMiIiIKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKICAgICAgICBnZXRhdHRyKEJhc2VGbG93LCBtZXRob2QpKGZsb3csIE5vbmUpCgoKZGVmIHRlc3RfYmFzZV9mbG93X3RvKGZsb3cpOgogICAgIiIiQXNzZXJ0IHRoZSB0byBtZXRob2Qgd29ya3MgYXMgaW50ZW5kZWQiIiIKICAgIGZsb3cuZGV2aWNlID0gTm9uZQogICAgd2l0aCBwYXRjaCgnbmVzc2FpLmZsb3dzLmJhc2UuTW9kdWxlLnRvJykgYXMgc3VwZXJfaW5pdDoKICAgICAgICBCYXNlRmxvdy50byhmbG93LCAnY3B1JykKICAgIHN1cGVyX2luaXQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoJ2NwdScpCiAgICBhc3NlcnQgZmxvdy5kZXZpY2UgPT0gJ2NwdScKCgpkZWYgdGVzdF9uZmxvd19iYXNlX3RyYW5zZm9ybSgpOgogICAgIiIiQXNzZXJ0IGFuIGVycm9yIGlzIHJhaXNlZCBpZiB0aGUgdHJhbnNmb3JtIGNsYXNzIGlzIGludmFsaWQuIiIiCiAgICBjbGFzcyBUZXN0OgogICAgICAgIHBhc3MKCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVHlwZUVycm9yKSBhcyBleGNpbmZvOgogICAgICAgIE5GbG93KFRlc3QoKSwgVGVzdCgpKQogICAgYXNzZXJ0ICd0cmFuc2Zvcm0gbXVzdCBpbmhlcml0JyBpbiBzdHIoZXhjaW5mby52YWx1ZSkKCgpkZWYgdGVzdF9uZmxvd19iYXNlX2Rpc3RyaWJ1dGlvbigpOgogICAgIiIiQXNzZXJ0IGFuIGVycm9yIGlzIHJhaXNlZCBpZiB0aGUgZGlzdHJpYnV0aW9uIGNsYXNzIGlzIGludmFsaWQuIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGNsYXNzIFRlc3Q6CiAgICAgICAgcGFzcwoKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhUeXBlRXJyb3IpIGFzIGV4Y2luZm86Cjx8ZmltX2VuZHw+"]
["a9f261d050499ba528a9dfddd2793fa107f4b305-2","a9f261d050499ba528a9dfddd2793fa107f4b305","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiClRlc3QgdGhlIGJhc2UgZmxvdyBjbGFzcwoiIiIKaW1wb3J0IHB5dGVzdApmcm9tIHVuaXR0ZXN0Lm1vY2sgaW1wb3J0IGNyZWF0ZV9hdXRvc3BlYywgcGF0Y2gKCmZyb20gbmVzc2FpLmZsb3dzIGltcG9ydCBCYXNlRmxvdywgTkZsb3cKZnJvbSBuZmxvd3MudHJhbnNmb3JtcyBpbXBvcnQgVHJhbnNmb3JtCgoKQHB5dGVzdC5maXh0dXJlCmRlZiBmbG93KCk6CiAgICByZXR1cm4gY3JlYXRlX2F1dG9zcGVjKEJhc2VGbG93KQoKCmRlZiB0ZXN0X2Jhc2VfZmxvd19hYnN0cmFjdF9tZXRob2RzKCk6CiAgICAiIiJBc3NlcnQgYW4gZXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBtZXRob2RzIGFyZSBub3QgaW1wbGVtZW50ZWQuIiIiCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVHlwZUVycm9yKSBhcyBleGNpbmZvOgogICAgICAgIEJhc2VGbG93KCkKICAgIGFzc2VydCAnaW5zdGFudGlhdGUgYWJzdHJhY3QgY2xhc3MgQmFzZUZsb3cgd2l0aCBhYnN0cmFjdCBtZXRob2QnIFwKICAgICAgICBpbiBzdHIoZXhjaW5mby52YWx1ZSkKCgpAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoCiAgICAnbWV0aG9kJywKICAgIFsnZm9yd2FyZCcsICdpbnZlcnNlJywgJ3NhbXBsZScsICdsb2dfcHJvYicsICdiYXNlX2Rpc3RyaWJ1dGlvbl9sb2dfcHJvYicsCiAgICAgJ2ZvcndhcmRfYW5kX2xvZ19wcm9iJywgJ3NhbXBsZV9hbmRfbG9nX3Byb2InXQopCmRlZiB0ZXN0X2Jhc2VfZmxvd19tZXRob2RzKG1ldGhvZCwgZmxvdyk6CiAgICAiIiJUZXN0IHRvIG1ha2Ugc3VyZSBhbGwgb2YgdGhlIG1ldGhvZCBpbiB0aGUgYmFzZSBjbGFzcyByYWlzZSBlcnJvcnMiIiIKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKICAgICAgICBnZXRhdHRyKEJhc2VGbG93LCBtZXRob2QpKGZsb3csIE5vbmUpCgoKZGVmIHRlc3RfYmFzZV9mbG93X3RvKGZsb3cpOgogICAgIiIiQXNzZXJ0IHRoZSB0byBtZXRob2Qgd29ya3MgYXMgaW50ZW5kZWQiIiIKICAgIGZsb3cuZGV2aWNlID0gTm9uZQogICAgd2l0aCBwYXRjaCgnbmVzc2FpLmZsb3dzLmJhc2UuTW9kdWxlLnRvJykgYXMgc3VwZXJfaW5pdDoKICAgICAgICBCYXNlRmxvdy50byhmbG93LCAnY3B1JykKICAgIHN1cGVyX2luaXQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoJ2NwdScpCiAgICBhc3NlcnQgZmxvdy5kZXZpY2UgPT0gJ2NwdScKCgpkZWYgdGVzdF9uZmxvd19iYXNlX3RyYW5zZm9ybSgpOgogICAgIiIiQXNzZXJ0IGFuIGVycm9yIGlzIHJhaXNlZCBpZiB0aGUgdHJhbnNmb3JtIGNsYXNzIGlzIGludmFsaWQuIiIiCiAgICBjbGFzcyBUZXN0OgogICAgICAgIHBhc3MKCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVHlwZUVycm9yKSBhcyBleGNpbmZvOgogICAgICAgIE5GbG93KFRlc3QoKSwgVGVzdCgpKQogICAgYXNzZXJ0ICd0cmFuc2Zvcm0gbXVzdCBpbmhlcml0JyBpbiBzdHIoZXhjaW5mby52YWx1ZSkKCgpkZWYgdGVzdF9uZmxvd19iYXNlX2Rpc3RyaWJ1dGlvbigpOgogICAgIiIiQXNzZXJ0IGFuIGVycm9yIGlzIHJhaXNlZCBpZiB0aGUgZGlzdHJpYnV0aW9uIGNsYXNzIGlzIGludmFsaWQuIiIiCiAgICBjbGFzcyBUZXN0OgogICAgICAgIHBhc3MKCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVHlwZUVycm9yKSBhcyBleGNpbmZvOgo8fGZpbV9ob2xlfD4KICAgIGFzc2VydCAnZGlzdHJpYnV0aW9uIG11c3QgaW5oZXJpdCcgaW4gc3RyKGV4Y2luZm8udmFsdWUpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgTkZsb3coVHJhbnNmb3JtKCksIFRlc3QoKSkKPHxmaW1fZW5kfD4="]
["0072e085669cf822e1ae539724f57530fdc2f891-1","0072e085669cf822e1ae539724f57530fdc2f891","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRpc2NvcmQKZnJvbSBkaXNjb3JkLmV4dCBpbXBvcnQgY29tbWFuZHMKCmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbAoKCkBjb21tYW5kcy5jb21tYW5kKCkKYXN5bmMgZGVmIGhlbHAoY3R4LCBjb21tYW5kX25hbWU6IE9wdGlvbmFsW3N0cl0pOgogICAgIiIiCiAgICBQcmludHMgaGVscCBtZXNzYWdlcyBmb3IgY29tbWFuZHMuCiAgICAiIiIKICAgIHByZWZpeCA9IGN0eC5ib3Quc2V0dGluZ3NbY3R4Lmd1aWxkXS5jb21tYW5kX3ByZWZpeAogICAgaWYgY29tbWFuZF9uYW1lIGlzIE5vbmU6CiAgICAgICAgbXNnID0gZGlzY29yZC5FbWJlZCh0aXRsZT0iQ29tbWFuZHMgfCBBcmNoaXR1cyBEb2NzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGVzY3JpcHRpb249IlNlZSBhIHNob3J0IGhlbHAgbWVzc2FnZSBvZiBob3cgdG8gdXNlIGFyY2hpdHVzIGNvbW1hbmRzLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw9Imh0dHBzOi8vZG9jcy5hcmNoaXQudXMvY29tbWFuZHMiKQogICAgICAgIG1zZy5hZGRfZmllbGQobmFtZT0iVXNhZ2UiLAogICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ZiJgYGB7cHJlZml4fWhlbHAgPGNvbW1hbmQgbmFtZT5gYGBWaWV3IGRldGFpbHMgYWJvdXQgYSBjb21tYW5kLlxuXG4iCjx8ZmltX2hvbGV8PgogICAgZWxzZToKICAgICAgICAjIEV4dHJhY3QgY29tbWFuZCBmcm9tIGxpc3Qgb2YgY29tbWFuZHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBib3QKICAgICAgICBjb21tYW5kID0gTm9uZQogICAgICAgIGZvciBjIGluIGN0eC5ib3QuY29tbWFuZHM6CiAgICAgICAgICAgIGlmIGMubmFtZSA9PSBjb21tYW5kX25hbWUgb3IgY29tbWFuZF9uYW1lIGluIGMuYWxpYXNlczoKICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBjCgogICAgICAgIGlmIGNvbW1hbmQgaXMgTm9uZToKICAgICAgICAgICAgYXdhaXQgY3R4LnNlbmQoIkNvdWxkIG5vdCBmaW5kIHRoYXQgY29tbWFuZCIpCiAgICAgICAgICAgIHJldHVybgoKICAgICAgICBjb21tYW5kX3RpdGxlID0gIiAiLmpvaW4oY29tbWFuZF9uYW1lLnNwbGl0KCJfIikpLnRpdGxlKCkKICAgICAgICBoZWxwX3RleHQgPSBjb21tYW5kLmNhbGxiYWNrLl9fZG9jX18KICAgICAgICB1c2FnZV9zdGFydCA9IGhlbHBfdGV4dC5maW5kKCcgJykgKyAxCiAgICAgICAgdXNhZ2VfZW5kID0gaGVscF90ZXh0LmZpbmQoJ1xuJykKICAgICAgICBpZiB1c2FnZV9zdGFydCA9PSAtMSBvciB1c2FnZV9zdGFydCA+IHVzYWdlX2VuZDoKICAgICAgICAgICAgdXNhZ2Vfc3RhcnQgPSB1c2FnZV9lbmQKICAgICAgICB1c2FnZSA9IGhlbHBfdGV4dFt1c2FnZV9zdGFydDp1c2FnZV9lbmRdCiAgICAgICAgZXh0cmEgPSBoZWxwX3RleHRbaGVscF90ZXh0LmZpbmQoJ1xuJykgKyAxOl0ucmVwbGFjZSgnXG4nLCAnICcpCiAgICAgICAgdHJ5OgogICAgICAgICAgICB1cmwgPSBjb21tYW5kLmNhbGxiYWNrLl9fZG9jX3VybF9fCiAgICAgICAgICAgIGxpbmsgPSBmIiBbbW9yZSBpbmZvLi4uXSh7dXJsfSkiCiAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICBsaW5rID0gIiIKICAgICAgICAgICAgdXJsID0gTm9uZQogICAgICAgIG1zZyA9IGRpc2NvcmQuRW1iZWQodGl0bGU9ZiJ7Y29tbWFuZF90aXRsZX0gfCBBcmNoaXR1cyBEb2NzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGVzY3JpcHRpb249ZXh0cmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw9dXJsKQogICAgICAgIG1zZy5hZGRfZmllbGQobmFtZT0iVXNhZ2UiLAogICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ZiJgYGB7cHJlZml4fXtjb21tYW5kX25hbWV9IHt1c2FnZX1gYGB7ZXh0cmF9e2xpbmt9IikKICAgIG1zZy5jb2xvdXIgPSAweDgzYmRmZgogICAgbXNnLnNldF9hdXRob3IobmFtZT0iQXJjaGl0dXMgRG9jcyIsCiAgICAgICAgICAgICAgICAgICBpY29uX3VybD0iaHR0cHM6Ly9kb2NzLmFyY2hpdC51cy9pbWcvbG9nb19oZXgucG5nIikKICAgIGF3YWl0IGN0eC5zZW5kKGVtYmVkPW1zZykKCgpkZWYgc2V0dXAoYm90KToKICAgIGJvdC5hZGRfY29tbWFuZChoZWxwKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNsaWNrIFtoZXJlXShodHRwczovL2RvY3MuYXJjaGl0LnVzL2NvbW1hbmRzKSB0byAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VlIGEgbGlzdCBvZiBhbGwgdGhlIGFyY2hpdHVzIGNvbW1hbmRzLiIpCjx8ZmltX2VuZHw+"]
["0072e085669cf822e1ae539724f57530fdc2f891-2","0072e085669cf822e1ae539724f57530fdc2f891","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRpc2NvcmQKZnJvbSBkaXNjb3JkLmV4dCBpbXBvcnQgY29tbWFuZHMKCmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbAoKCkBjb21tYW5kcy5jb21tYW5kKCkKYXN5bmMgZGVmIGhlbHAoY3R4LCBjb21tYW5kX25hbWU6IE9wdGlvbmFsW3N0cl0pOgogICAgIiIiCiAgICBQcmludHMgaGVscCBtZXNzYWdlcyBmb3IgY29tbWFuZHMuCiAgICAiIiIKICAgIHByZWZpeCA9IGN0eC5ib3Quc2V0dGluZ3NbY3R4Lmd1aWxkXS5jb21tYW5kX3ByZWZpeAogICAgaWYgY29tbWFuZF9uYW1lIGlzIE5vbmU6CiAgICAgICAgbXNnID0gZGlzY29yZC5FbWJlZCh0aXRsZT0iQ29tbWFuZHMgfCBBcmNoaXR1cyBEb2NzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGVzY3JpcHRpb249IlNlZSBhIHNob3J0IGhlbHAgbWVzc2FnZSBvZiBob3cgdG8gdXNlIGFyY2hpdHVzIGNvbW1hbmRzLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw9Imh0dHBzOi8vZG9jcy5hcmNoaXQudXMvY29tbWFuZHMiKQogICAgICAgIG1zZy5hZGRfZmllbGQobmFtZT0iVXNhZ2UiLAogICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ZiJgYGB7cHJlZml4fWhlbHAgPGNvbW1hbmQgbmFtZT5gYGBWaWV3IGRldGFpbHMgYWJvdXQgYSBjb21tYW5kLlxuXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2xpY2sgW2hlcmVdKGh0dHBzOi8vZG9jcy5hcmNoaXQudXMvY29tbWFuZHMpIHRvICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZWUgYSBsaXN0IG9mIGFsbCB0aGUgYXJjaGl0dXMgY29tbWFuZHMuIikKICAgIGVsc2U6CiAgICAgICAgIyBFeHRyYWN0IGNvbW1hbmQgZnJvbSBsaXN0IG9mIGNvbW1hbmRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYm90CiAgICAgICAgY29tbWFuZCA9IE5vbmUKICAgICAgICBmb3IgYyBpbiBjdHguYm90LmNvbW1hbmRzOgogICAgICAgICAgICBpZiBjLm5hbWUgPT0gY29tbWFuZF9uYW1lIG9yIGNvbW1hbmRfbmFtZSBpbiBjLmFsaWFzZXM6CiAgICAgICAgICAgICAgICBjb21tYW5kID0gYwoKICAgICAgICBpZiBjb21tYW5kIGlzIE5vbmU6CiAgICAgICAgICAgIGF3YWl0IGN0eC5zZW5kKCJDb3VsZCBub3QgZmluZCB0aGF0IGNvbW1hbmQiKQogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgY29tbWFuZF90aXRsZSA9ICIgIi5qb2luKGNvbW1hbmRfbmFtZS5zcGxpdCgiXyIpKS50aXRsZSgpCiAgICAgICAgaGVscF90ZXh0ID0gY29tbWFuZC5jYWxsYmFjay5fX2RvY19fCiAgICAgICAgdXNhZ2Vfc3RhcnQgPSBoZWxwX3RleHQuZmluZCgnICcpICsgMQogICAgICAgIHVzYWdlX2VuZCA9IGhlbHBfdGV4dC5maW5kKCdcbicpCiAgICAgICAgaWYgdXNhZ2Vfc3RhcnQgPT0gLTEgb3IgdXNhZ2Vfc3RhcnQgPiB1c2FnZV9lbmQ6CiAgICAgICAgICAgIHVzYWdlX3N0YXJ0ID0gdXNhZ2VfZW5kCiAgICAgICAgdXNhZ2UgPSBoZWxwX3RleHRbdXNhZ2Vfc3RhcnQ6dXNhZ2VfZW5kXQogICAgICAgIGV4dHJhID0gaGVscF90ZXh0W2hlbHBfdGV4dC5maW5kKCdcbicpICsgMTpdLnJlcGxhY2UoJ1xuJywgJyAnKQogICAgICAgIHRyeToKICAgICAgICAgICAgdXJsID0gY29tbWFuZC5jYWxsYmFjay5fX2RvY191cmxfXwogICAgICAgICAgICBsaW5rID0gZiIgW21vcmUgaW5mby4uLl0oe3VybH0pIgogICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgbGluayA9ICIiCiAgICAgICAgICAgIHVybCA9IE5vbmUKICAgICAgICBtc2cgPSBkaXNjb3JkLkVtYmVkKHRpdGxlPWYie2NvbW1hbmRfdGl0bGV9IHwgQXJjaGl0dXMgRG9jcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRlc2NyaXB0aW9uPWV4dHJhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsPXVybCkKICAgICAgICBtc2cuYWRkX2ZpZWxkKG5hbWU9IlVzYWdlIiwKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPWYiYGBge3ByZWZpeH17Y29tbWFuZF9uYW1lfSB7dXNhZ2V9YGBge2V4dHJhfXtsaW5rfSIpCiAgICBtc2cuY29sb3VyID0gMHg4M2JkZmYKICAgIG1zZy5zZXRfYXV0aG9yKG5hbWU9IkFyY2hpdHVzIERvY3MiLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICBpY29uX3VybD0iaHR0cHM6Ly9kb2NzLmFyY2hpdC51cy9pbWcvbG9nb19oZXgucG5nIikKPHxmaW1fZW5kfD4="]
["0072e085669cf822e1ae539724f57530fdc2f891-3","0072e085669cf822e1ae539724f57530fdc2f891","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRpc2NvcmQKZnJvbSBkaXNjb3JkLmV4dCBpbXBvcnQgY29tbWFuZHMKCmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbAoKCkBjb21tYW5kcy5jb21tYW5kKCkKYXN5bmMgZGVmIGhlbHAoY3R4LCBjb21tYW5kX25hbWU6IE9wdGlvbmFsW3N0cl0pOgogICAgIiIiCiAgICBQcmludHMgaGVscCBtZXNzYWdlcyBmb3IgY29tbWFuZHMuCiAgICAiIiIKICAgIHByZWZpeCA9IGN0eC5ib3Quc2V0dGluZ3NbY3R4Lmd1aWxkXS5jb21tYW5kX3ByZWZpeAogICAgaWYgY29tbWFuZF9uYW1lIGlzIE5vbmU6CiAgICAgICAgbXNnID0gZGlzY29yZC5FbWJlZCh0aXRsZT0iQ29tbWFuZHMgfCBBcmNoaXR1cyBEb2NzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGVzY3JpcHRpb249IlNlZSBhIHNob3J0IGhlbHAgbWVzc2FnZSBvZiBob3cgdG8gdXNlIGFyY2hpdHVzIGNvbW1hbmRzLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw9Imh0dHBzOi8vZG9jcy5hcmNoaXQudXMvY29tbWFuZHMiKQogICAgICAgIG1zZy5hZGRfZmllbGQobmFtZT0iVXNhZ2UiLAogICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ZiJgYGB7cHJlZml4fWhlbHAgPGNvbW1hbmQgbmFtZT5gYGBWaWV3IGRldGFpbHMgYWJvdXQgYSBjb21tYW5kLlxuXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2xpY2sgW2hlcmVdKGh0dHBzOi8vZG9jcy5hcmNoaXQudXMvY29tbWFuZHMpIHRvICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZWUgYSBsaXN0IG9mIGFsbCB0aGUgYXJjaGl0dXMgY29tbWFuZHMuIikKICAgIGVsc2U6CiAgICAgICAgIyBFeHRyYWN0IGNvbW1hbmQgZnJvbSBsaXN0IG9mIGNvbW1hbmRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYm90CiAgICAgICAgY29tbWFuZCA9IE5vbmUKICAgICAgICBmb3IgYyBpbiBjdHguYm90LmNvbW1hbmRzOgogICAgICAgICAgICBpZiBjLm5hbWUgPT0gY29tbWFuZF9uYW1lIG9yIGNvbW1hbmRfbmFtZSBpbiBjLmFsaWFzZXM6CiAgICAgICAgICAgICAgICBjb21tYW5kID0gYwo8fGZpbV9ob2xlfD4KCiAgICAgICAgY29tbWFuZF90aXRsZSA9ICIgIi5qb2luKGNvbW1hbmRfbmFtZS5zcGxpdCgiXyIpKS50aXRsZSgpCiAgICAgICAgaGVscF90ZXh0ID0gY29tbWFuZC5jYWxsYmFjay5fX2RvY19fCiAgICAgICAgdXNhZ2Vfc3RhcnQgPSBoZWxwX3RleHQuZmluZCgnICcpICsgMQogICAgICAgIHVzYWdlX2VuZCA9IGhlbHBfdGV4dC5maW5kKCdcbicpCiAgICAgICAgaWYgdXNhZ2Vfc3RhcnQgPT0gLTEgb3IgdXNhZ2Vfc3RhcnQgPiB1c2FnZV9lbmQ6CiAgICAgICAgICAgIHVzYWdlX3N0YXJ0ID0gdXNhZ2VfZW5kCiAgICAgICAgdXNhZ2UgPSBoZWxwX3RleHRbdXNhZ2Vfc3RhcnQ6dXNhZ2VfZW5kXQogICAgICAgIGV4dHJhID0gaGVscF90ZXh0W2hlbHBfdGV4dC5maW5kKCdcbicpICsgMTpdLnJlcGxhY2UoJ1xuJywgJyAnKQogICAgICAgIHRyeToKICAgICAgICAgICAgdXJsID0gY29tbWFuZC5jYWxsYmFjay5fX2RvY191cmxfXwogICAgICAgICAgICBsaW5rID0gZiIgW21vcmUgaW5mby4uLl0oe3VybH0pIgogICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgbGluayA9ICIiCiAgICAgICAgICAgIHVybCA9IE5vbmUKICAgICAgICBtc2cgPSBkaXNjb3JkLkVtYmVkKHRpdGxlPWYie2NvbW1hbmRfdGl0bGV9IHwgQXJjaGl0dXMgRG9jcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRlc2NyaXB0aW9uPWV4dHJhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsPXVybCkKICAgICAgICBtc2cuYWRkX2ZpZWxkKG5hbWU9IlVzYWdlIiwKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPWYiYGBge3ByZWZpeH17Y29tbWFuZF9uYW1lfSB7dXNhZ2V9YGBge2V4dHJhfXtsaW5rfSIpCiAgICBtc2cuY29sb3VyID0gMHg4M2JkZmYKICAgIG1zZy5zZXRfYXV0aG9yKG5hbWU9IkFyY2hpdHVzIERvY3MiLAogICAgICAgICAgICAgICAgICAgaWNvbl91cmw9Imh0dHBzOi8vZG9jcy5hcmNoaXQudXMvaW1nL2xvZ29faGV4LnBuZyIpCiAgICBhd2FpdCBjdHguc2VuZChlbWJlZD1tc2cpCgoKZGVmIHNldHVwKGJvdCk6CiAgICBib3QuYWRkX2NvbW1hbmQoaGVscCkKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgaWYgY29tbWFuZCBpcyBOb25lOgogICAgICAgICAgICBhd2FpdCBjdHguc2VuZCgiQ291bGQgbm90IGZpbmQgdGhhdCBjb21tYW5kIikKICAgICAgICAgICAgcmV0dXJuCjx8ZmltX2VuZHw+"]
["0072e085669cf822e1ae539724f57530fdc2f891-4","0072e085669cf822e1ae539724f57530fdc2f891","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRpc2NvcmQKZnJvbSBkaXNjb3JkLmV4dCBpbXBvcnQgY29tbWFuZHMKCmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbAoKCkBjb21tYW5kcy5jb21tYW5kKCkKYXN5bmMgZGVmIGhlbHAoY3R4LCBjb21tYW5kX25hbWU6IE9wdGlvbmFsW3N0cl0pOgogICAgIiIiCiAgICBQcmludHMgaGVscCBtZXNzYWdlcyBmb3IgY29tbWFuZHMuCiAgICAiIiIKICAgIHByZWZpeCA9IGN0eC5ib3Quc2V0dGluZ3NbY3R4Lmd1aWxkXS5jb21tYW5kX3ByZWZpeAogICAgaWYgY29tbWFuZF9uYW1lIGlzIE5vbmU6CiAgICAgICAgbXNnID0gZGlzY29yZC5FbWJlZCh0aXRsZT0iQ29tbWFuZHMgfCBBcmNoaXR1cyBEb2NzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGVzY3JpcHRpb249IlNlZSBhIHNob3J0IGhlbHAgbWVzc2FnZSBvZiBob3cgdG8gdXNlIGFyY2hpdHVzIGNvbW1hbmRzLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw9Imh0dHBzOi8vZG9jcy5hcmNoaXQudXMvY29tbWFuZHMiKQogICAgICAgIG1zZy5hZGRfZmllbGQobmFtZT0iVXNhZ2UiLAogICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ZiJgYGB7cHJlZml4fWhlbHAgPGNvbW1hbmQgbmFtZT5gYGBWaWV3IGRldGFpbHMgYWJvdXQgYSBjb21tYW5kLlxuXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2xpY2sgW2hlcmVdKGh0dHBzOi8vZG9jcy5hcmNoaXQudXMvY29tbWFuZHMpIHRvICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZWUgYSBsaXN0IG9mIGFsbCB0aGUgYXJjaGl0dXMgY29tbWFuZHMuIikKICAgIGVsc2U6CiAgICAgICAgIyBFeHRyYWN0IGNvbW1hbmQgZnJvbSBsaXN0IG9mIGNvbW1hbmRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYm90CiAgICAgICAgY29tbWFuZCA9IE5vbmUKICAgICAgICBmb3IgYyBpbiBjdHguYm90LmNvbW1hbmRzOgogICAgICAgICAgICBpZiBjLm5hbWUgPT0gY29tbWFuZF9uYW1lIG9yIGNvbW1hbmRfbmFtZSBpbiBjLmFsaWFzZXM6CiAgICAgICAgICAgICAgICBjb21tYW5kID0gYwoKICAgICAgICBpZiBjb21tYW5kIGlzIE5vbmU6CiAgICAgICAgICAgIGF3YWl0IGN0eC5zZW5kKCJDb3VsZCBub3QgZmluZCB0aGF0IGNvbW1hbmQiKQogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgY29tbWFuZF90aXRsZSA9ICIgIi5qb2luKGNvbW1hbmRfbmFtZS5zcGxpdCgiXyIpKS50aXRsZSgpCiAgICAgICAgaGVscF90ZXh0ID0gY29tbWFuZC5jYWxsYmFjay5fX2RvY19fCiAgICAgICAgdXNhZ2Vfc3RhcnQgPSBoZWxwX3RleHQuZmluZCgnICcpICsgMQogICAgICAgIHVzYWdlX2VuZCA9IGhlbHBfdGV4dC5maW5kKCdcbicpCiAgICAgICAgaWYgdXNhZ2Vfc3RhcnQgPT0gLTEgb3IgdXNhZ2Vfc3RhcnQgPiB1c2FnZV9lbmQ6CiAgICAgICAgICAgIHVzYWdlX3N0YXJ0ID0gdXNhZ2VfZW5kCiAgICAgICAgdXNhZ2UgPSBoZWxwX3RleHRbdXNhZ2Vfc3RhcnQ6dXNhZ2VfZW5kXQogICAgICAgIGV4dHJhID0gaGVscF90ZXh0W2hlbHBfdGV4dC5maW5kKCdcbicpICsgMTpdLnJlcGxhY2UoJ1xuJywgJyAnKQogICAgICAgIHRyeToKICAgICAgICAgICAgdXJsID0gY29tbWFuZC5jYWxsYmFjay5fX2RvY191cmxfXwogICAgICAgICAgICBsaW5rID0gZiIgW21vcmUgaW5mby4uLl0oe3VybH0pIgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGVzY3JpcHRpb249ZXh0cmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw9dXJsKQogICAgICAgIG1zZy5hZGRfZmllbGQobmFtZT0iVXNhZ2UiLAogICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ZiJgYGB7cHJlZml4fXtjb21tYW5kX25hbWV9IHt1c2FnZX1gYGB7ZXh0cmF9e2xpbmt9IikKICAgIG1zZy5jb2xvdXIgPSAweDgzYmRmZgogICAgbXNnLnNldF9hdXRob3IobmFtZT0iQXJjaGl0dXMgRG9jcyIsCiAgICAgICAgICAgICAgICAgICBpY29uX3VybD0iaHR0cHM6Ly9kb2NzLmFyY2hpdC51cy9pbWcvbG9nb19oZXgucG5nIikKICAgIGF3YWl0IGN0eC5zZW5kKGVtYmVkPW1zZykKCgpkZWYgc2V0dXAoYm90KToKICAgIGJvdC5hZGRfY29tbWFuZChoZWxwKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgbGluayA9ICIiCiAgICAgICAgICAgIHVybCA9IE5vbmUKICAgICAgICBtc2cgPSBkaXNjb3JkLkVtYmVkKHRpdGxlPWYie2NvbW1hbmRfdGl0bGV9IHwgQXJjaGl0dXMgRG9jcyIsCjx8ZmltX2VuZHw+"]
["0072e085669cf822e1ae539724f57530fdc2f891-5","0072e085669cf822e1ae539724f57530fdc2f891","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRpc2NvcmQKZnJvbSBkaXNjb3JkLmV4dCBpbXBvcnQgY29tbWFuZHMKCmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbAoKCkBjb21tYW5kcy5jb21tYW5kKCkKYXN5bmMgZGVmIGhlbHAoY3R4LCBjb21tYW5kX25hbWU6IE9wdGlvbmFsW3N0cl0pOgogICAgIiIiCiAgICBQcmludHMgaGVscCBtZXNzYWdlcyBmb3IgY29tbWFuZHMuCiAgICAiIiIKICAgIHByZWZpeCA9IGN0eC5ib3Quc2V0dGluZ3NbY3R4Lmd1aWxkXS5jb21tYW5kX3ByZWZpeAo8fGZpbV9ob2xlfD4KICAgICAgICBtc2cuYWRkX2ZpZWxkKG5hbWU9IlVzYWdlIiwKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPWYiYGBge3ByZWZpeH1oZWxwIDxjb21tYW5kIG5hbWU+YGBgVmlldyBkZXRhaWxzIGFib3V0IGEgY29tbWFuZC5cblxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNsaWNrIFtoZXJlXShodHRwczovL2RvY3MuYXJjaGl0LnVzL2NvbW1hbmRzKSB0byAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VlIGEgbGlzdCBvZiBhbGwgdGhlIGFyY2hpdHVzIGNvbW1hbmRzLiIpCiAgICBlbHNlOgogICAgICAgICMgRXh0cmFjdCBjb21tYW5kIGZyb20gbGlzdCBvZiBjb21tYW5kcyBhc3NvY2lhdGVkIHdpdGggdGhlIGJvdAogICAgICAgIGNvbW1hbmQgPSBOb25lCiAgICAgICAgZm9yIGMgaW4gY3R4LmJvdC5jb21tYW5kczoKICAgICAgICAgICAgaWYgYy5uYW1lID09IGNvbW1hbmRfbmFtZSBvciBjb21tYW5kX25hbWUgaW4gYy5hbGlhc2VzOgogICAgICAgICAgICAgICAgY29tbWFuZCA9IGMKCiAgICAgICAgaWYgY29tbWFuZCBpcyBOb25lOgogICAgICAgICAgICBhd2FpdCBjdHguc2VuZCgiQ291bGQgbm90IGZpbmQgdGhhdCBjb21tYW5kIikKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIGNvbW1hbmRfdGl0bGUgPSAiICIuam9pbihjb21tYW5kX25hbWUuc3BsaXQoIl8iKSkudGl0bGUoKQogICAgICAgIGhlbHBfdGV4dCA9IGNvbW1hbmQuY2FsbGJhY2suX19kb2NfXwogICAgICAgIHVzYWdlX3N0YXJ0ID0gaGVscF90ZXh0LmZpbmQoJyAnKSArIDEKICAgICAgICB1c2FnZV9lbmQgPSBoZWxwX3RleHQuZmluZCgnXG4nKQogICAgICAgIGlmIHVzYWdlX3N0YXJ0ID09IC0xIG9yIHVzYWdlX3N0YXJ0ID4gdXNhZ2VfZW5kOgogICAgICAgICAgICB1c2FnZV9zdGFydCA9IHVzYWdlX2VuZAogICAgICAgIHVzYWdlID0gaGVscF90ZXh0W3VzYWdlX3N0YXJ0OnVzYWdlX2VuZF0KICAgICAgICBleHRyYSA9IGhlbHBfdGV4dFtoZWxwX3RleHQuZmluZCgnXG4nKSArIDE6XS5yZXBsYWNlKCdcbicsICcgJykKICAgICAgICB0cnk6CiAgICAgICAgICAgIHVybCA9IGNvbW1hbmQuY2FsbGJhY2suX19kb2NfdXJsX18KICAgICAgICAgICAgbGluayA9IGYiIFttb3JlIGluZm8uLi5dKHt1cmx9KSIKICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgIGxpbmsgPSAiIgogICAgICAgICAgICB1cmwgPSBOb25lCiAgICAgICAgbXNnID0gZGlzY29yZC5FbWJlZCh0aXRsZT1mIntjb21tYW5kX3RpdGxlfSB8IEFyY2hpdHVzIERvY3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkZXNjcmlwdGlvbj1leHRyYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybD11cmwpCiAgICAgICAgbXNnLmFkZF9maWVsZChuYW1lPSJVc2FnZSIsCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1mImBgYHtwcmVmaXh9e2NvbW1hbmRfbmFtZX0ge3VzYWdlfWBgYHtleHRyYX17bGlua30iKQogICAgbXNnLmNvbG91ciA9IDB4ODNiZGZmCiAgICBtc2cuc2V0X2F1dGhvcihuYW1lPSJBcmNoaXR1cyBEb2NzIiwKICAgICAgICAgICAgICAgICAgIGljb25fdXJsPSJodHRwczovL2RvY3MuYXJjaGl0LnVzL2ltZy9sb2dvX2hleC5wbmciKQogICAgYXdhaXQgY3R4LnNlbmQoZW1iZWQ9bXNnKQoKCmRlZiBzZXR1cChib3QpOgogICAgYm90LmFkZF9jb21tYW5kKGhlbHApCjx8ZmltX3N1ZmZpeHw+CiAgICBpZiBjb21tYW5kX25hbWUgaXMgTm9uZToKICAgICAgICBtc2cgPSBkaXNjb3JkLkVtYmVkKHRpdGxlPSJDb21tYW5kcyB8IEFyY2hpdHVzIERvY3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkZXNjcmlwdGlvbj0iU2VlIGEgc2hvcnQgaGVscCBtZXNzYWdlIG9mIGhvdyB0byB1c2UgYXJjaGl0dXMgY29tbWFuZHMuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybD0iaHR0cHM6Ly9kb2NzLmFyY2hpdC51cy9jb21tYW5kcyIpCjx8ZmltX2VuZHw+"]
["8adecb6f2571826f7bb2fd13f7939f382a0bdf8a-1","8adecb6f2571826f7bb2fd13f7939f382a0bdf8a","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KPHxmaW1faG9sZXw+CiIiIgppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBtYXRwbG90bGliLmFuaW1hdGlvbgppbXBvcnQgbnVtcHkgYXMgbnAKcGx0LnN0eWxlLnVzZSgnZGFya19iYWNrZ3JvdW5kJykKCgpkZWYgZjEoeCk6CiAgICByZXR1cm4gNC4vKHgqKjIrMSkKCmRlZiBmMih4KToKICAgIHJldHVybiA4KihucC5zcXJ0KDEteCoqMikteCkKCmRlZiBTaW1wc29uKGYsYSxiLGVwcywgbGV2ZWwsIGxldmVsX21heCk6ICAgIAogICAgbGV2ZWwgKz0gMQogICAgaCA9IGItYQogICAgYyA9IChhK2IpLzIKICAgIG9uZV9zaW1wc29uID0gaCAqIChmKGEpKzQgKiBmKGMpICsgZihiKSkvNgogICAgZCA9IChhK2MpLzIKICAgIGUgPSAoYytiKS8yCiAgICB0d29fc2ltcHNvbiA9IGggKiAoZihhKSArIDQqIGYoZCkrMipmKGMpKzQqZihlKStmKGIpKS8xMgogICAgaWYgbGV2ZWw+PSBsZXZlbF9tYXg6CiAgICAgICAgcHJpbnQoIm1heGltdW0gbGV2ZWwgcmVhY2hlZCEiKQogICAgICAgIHByaW50KCJQYXJpdGlvbjogW3s6Nn0sezo2fSx7OjZ9XSIuZm9ybWF0KGEsYyxiKSkKICAgICAgICBwYXJpdGlvbnMuYXBwZW5kKGMpCiAgICAgICAgcmV0dXJuIHR3b19zaW1wc29uCiAgICBlbHNlOgogICAgICAgIGlmIGFicyh0d29fc2ltcHNvbiAtIG9uZV9zaW1wc29uKSA8IDE1KmVwczoKICAgICAgICAgICAgcGFyaXRpb25zLmFwcGVuZChjKQogICAgICAgICAgICByZXN1bHQgPSB0d29fc2ltcHNvbisodHdvX3NpbXBzb24tb25lX3NpbXBzb24pLzE1CiAgICAgICAgZWxzZToKICAgICAgICAgICAgbGVmdF9zaW1wc29uID0gU2ltcHNvbihmLGEsYyxlcHMvMiwgbGV2ZWwsIGxldmVsX21heCkKICAgICAgICAgICAgcmlnaHRfc2ltcHNvbiA9IFNpbXBzb24oZixjLGIsZXBzLzIsbGV2ZWwsIGxldmVsX21heCkKICAgICAgICAgICAgcmVzdWx0ID0gbGVmdF9zaW1wc29uICsgcmlnaHRfc2ltcHNvbgogICAgICAgICAgICAKICAgIHJldHVybiByZXN1bHQKCgpkZWYgcGxvdChmaWcsIGF4LCBwYXJpdGlvbnMsZixhLGIsIHlsaW0wLCB5bGltMSwgZm5hbWUgPSAnJyk6CiAgICB4LCB5ID0gW10sW10KICAgIHNjID0gYXguc2NhdHRlcih4LHksYz0ncicpCiAgICBwbHQueGxpbShhLTAuMDQsYiArIC4wNCkKICAgIHBsdC55bGltKHlsaW0wLTAuMDQseWxpbTErLjA0KQoKICAgIHhfbGluZSA9IG5wLmxpbnNwYWNlKDAsIDEuLCAyMDApCiAgICB5X2xpbmUgPSBmKHhfbGluZSkKCiAgICBheC5wbG90KHhfbGluZSwgeV9saW5lKQogICAgYXguc2NhdHRlcihbYSxiXSwgW2YoMCksZigxKV0sIGMgPSAncicpCgogICAgZGVmIGFuaW1hdGUoaSk6CiAgICAgICAgeC5hcHBlbmQocGFyaXRpb25zW2ldKQogICAgICAgIHkuYXBwZW5kKGYocGFyaXRpb25zW2ldKSkKICAgICAgICAKICAgICAgICBheC5zZXRfdGl0bGUoInt9XG5TdGVwID0ge30sIGMgPSB7OjA2fSIuZm9ybWF0KGZuYW1lLGkscGFyaXRpb25zW2ldKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9J2cnLCBzaXplID0gMTYpCiAgICAgICAgc2Muc2V0X29mZnNldHMobnAuY19beCx5XSkKCiAgICBheC5zcGluZXNbJ3RvcCddLnNldF92aXNpYmxlKEZhbHNlKQogICAgYXguc3BpbmVzWydyaWdodCddLnNldF92aXNpYmxlKEZhbHNlKQoKICAgIGFuaSA9IG1hdHBsb3RsaWIuYW5pbWF0aW9uLkZ1bmNBbmltYXRpb24oZmlnLCBhbmltYXRlLCAKICAgICAgICAgICAgICAgIGZyYW1lcz1ucC5hcmFuZ2UobGVuKHBhcml0aW9ucykpLCBpbnRlcnZhbD03MDAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdD1GYWxzZSkgIAogICAgcmV0dXJuIGFuaQoKZmlnMSwgYXgxID0gcGx0LnN1YnBsb3RzKCkKCnByaW50KCJGdW5jdGlvbiAxIikKcGFyaXRpb25zID0gW10KcmVzdWx0ID0gU2ltcHNvbihmMSwwLDEsMWUtOSwgMCwgNCkKYW5pID0gcGxvdChmaWcxLCBheDEscGFyaXRpb25zLGYxLDAsMSwwLCA0LCAnZih4KSA9IDQvKDEreF4yKScpCnBsdC5zaG93KCkKCnByaW50KCJJID0gIixyZXN1bHQpCgpmaWcyLCBheDIgPSBwbHQuc3VicGxvdHMoKQoKcHJpbnQoIkZ1bmN0aW9uIDIiKQpwYXJpdGlvbnMgPSBbXQpyZXN1bHQgPSBTaW1wc29uKGYyLDAsMS4vbnAuc3FydCgyKSwxZS05LCAwLCA0KQphbmkyID0gcGxvdChmaWcyLCBheDIscGFyaXRpb25zLGYyLDAsMS4vbnAuc3FydCgyKSwwLCA4LCdmKHgpID0gOChzcXJ0KDEteF4yKS0xKScpCnBsdC5zaG93KCkKcHJpbnQoIkkgPSAiLHJlc3VsdCkKPHxmaW1fc3VmZml4fD4KIiIiCkNyZWF0ZWQgb24gRnJpIE5vdiAyMiAxMToxNzoyOCAyMDE5CgpAYXV0aG9yOiBsZW5vdm8KPHxmaW1fZW5kfD4="]
["c14d65b09becaab187ccc43cc809c72754b120fe-1","c14d65b09becaab187ccc43cc809c72754b120fe","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBBZGFmcnVpdF9DaGFyTENEIGltcG9ydCAqCjx8ZmltX2VuZHw+"]
["c14d65b09becaab187ccc43cc809c72754b120fe-2","c14d65b09becaab187ccc43cc809c72754b120fe","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBBZGFmcnVpdF9DaGFyTENEIGltcG9ydCAqCjx8ZmltX2VuZHw+"]
["c14d65b09becaab187ccc43cc809c72754b120fe-3","c14d65b09becaab187ccc43cc809c72754b120fe","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBBZGFmcnVpdF9DaGFyTENEIGltcG9ydCAqCjx8ZmltX2VuZHw+"]
["416eca459138b0ed064a291d5f0242af9e40035a-1","416eca459138b0ed064a291d5f0242af9e40035a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBkYXRlOiAgICAgIDIwMTktMDktMjQKIyBhdXRob3I6ICAgIGFsZXhhbmRlci5yYXVzY2hAZGNzby5kZQojIHNoYXJpbmc6ICAgVExQOkdSRUVOCiMgcmVmZXJlbmNlOiBpbnRlcm5hbCB0b29saW5nCiMKIyBSZWFkIE1hbHBlZGlhIGluZm9ybWF0aW9uCiMgVGhpcyBzY3JpcHQgaXMgcnVuIHdpdGggYSBwYXRoIHRvIGEgZmlsZSBpbiB0aGUgTWFscGVkaWEgcmVwb3NpdG9yeSBhcwojIGFyZ3VtZW50LiBUaGUgc2NyaXB0IHdpbGwgcHJpbnQgdGhlIEpTT04gZmlsZSBjb250YWluaW5nIG1ldGEgaW5mb3JtYXRpb24KIyBhbmQgdGhlIGRlc2NyaXB0aW9uIHRvIHN0ZG91dC4KIwo8fGZpbV9ob2xlfD4KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCBzeXMKCmZyb20gb3MgaW1wb3J0IGxpc3RkaXIKZnJvbSBvcy5wYXRoIGltcG9ydCBpc2ZpbGUsIGpvaW4KCmRlZiBnZXRfanNvbl9maWxlcyhkaXJlY3RvcnkpOgogICAgZmlsZXMgPSBbIGYgZm9yIGYgaW4gbGlzdGRpcihkaXJlY3RvcnkpIGlmIGlzZmlsZShqb2luKGRpcmVjdG9yeSwgZikpIF0KICAgIGZpbGVzID0gWyBmIGZvciBmIGluIGZpbGVzIGlmIGYuZW5kc3dpdGgoIi5qc29uIikgXQogICAgcmV0dXJuIGZpbGVzCgpkZWYgd2Fsa19kb3duKHBhdGgpOgogICAgZmlsZXMgPSBnZXRfanNvbl9maWxlcyhwYXRoKQogICAgaWYgbGVuKGZpbGVzKSA+IDA6CiAgICAgICAgcmV0dXJuIChwYXRoLCBmaWxlcykKICAgIG5ld19wYXRoID0gb3Muc2VwLmpvaW4ocGF0aC5zcGxpdChvcy5zZXApWzotMV0pCiAgICBpZiBuZXdfcGF0aCAhPSAiIjoKICAgICAgICByZXR1cm4gd2Fsa19kb3duKG5ld19wYXRoKQogICAgcmV0dXJuIFtdCgpkZWYgcmVhZF9pbmZvKHBhdGgpOgogICAgIyBhc3N1bWUgaW5wdXQgc29tZS9kaXIvcGF0aC9iaW5hcnkKICAgIGRpcmVjdG9yeSA9IG9zLnBhdGguYWJzcGF0aChvcy5zZXAuam9pbihwYXRoLnNwbGl0KG9zLnNlcClbOi0xXSkpCiAgICBwYXRoX2ZpbGVzID0gd2Fsa19kb3duKGRpcmVjdG9yeSkKICAgIGpzb25fcGF0aCA9IHBhdGhfZmlsZXNbMF0KICAgIGZpbGVzID0gcGF0aF9maWxlc1sxXQogICAgYXNzZXJ0KGxlbihmaWxlcykgPT0gMSkKICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oanNvbl9wYXRoLCBmaWxlc1swXSksICJyIikgYXMgZjoKICAgICAgICBkYXRhID0ganNvbi5sb2FkKGYpCiAgICByZXR1cm4gZGF0YQoKZGVmIGdldF90YWduYW1lKHBhdGgpOgogICAgcmV0dXJuIHBhdGguc3BsaXQob3Muc2VwKVstM10KCmRlZiBtYWluKCk6CiAgICBtZXRhID0gcmVhZF9pbmZvKHN5cy5hcmd2WzFdKQogICAgcHJpbnQoanNvbi5kdW1wcyhtZXRhKSkKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KIyB1c2FnZTogJSAuL3JlYWRfbWFscGVkaWFfaW5mb3JtYXRpb24ucHkgcGF0aC90by9zYW1wbGUvaW4vbWFscGVkaWEvcmVwbwojCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cgo8fGZpbV9lbmR8Pg=="]
["416eca459138b0ed064a291d5f0242af9e40035a-2","416eca459138b0ed064a291d5f0242af9e40035a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBkYXRlOiAgICAgIDIwMTktMDktMjQKIyBhdXRob3I6ICAgIGFsZXhhbmRlci5yYXVzY2hAZGNzby5kZQojIHNoYXJpbmc6ICAgVExQOkdSRUVOCiMgcmVmZXJlbmNlOiBpbnRlcm5hbCB0b29saW5nCiMKIyBSZWFkIE1hbHBlZGlhIGluZm9ybWF0aW9uCiMgVGhpcyBzY3JpcHQgaXMgcnVuIHdpdGggYSBwYXRoIHRvIGEgZmlsZSBpbiB0aGUgTWFscGVkaWEgcmVwb3NpdG9yeSBhcwojIGFyZ3VtZW50LiBUaGUgc2NyaXB0IHdpbGwgcHJpbnQgdGhlIEpTT04gZmlsZSBjb250YWluaW5nIG1ldGEgaW5mb3JtYXRpb24KIyBhbmQgdGhlIGRlc2NyaXB0aW9uIHRvIHN0ZG91dC4KIwojIHVzYWdlOiAlIC4vcmVhZF9tYWxwZWRpYV9pbmZvcm1hdGlvbi5weSBwYXRoL3RvL3NhbXBsZS9pbi9tYWxwZWRpYS9yZXBvCiMKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCmltcG9ydCBqc29uCmltcG9ydCBvcwppbXBvcnQgc3lzCgpmcm9tIG9zIGltcG9ydCBsaXN0ZGlyCmZyb20gb3MucGF0aCBpbXBvcnQgaXNmaWxlLCBqb2luCgpkZWYgZ2V0X2pzb25fZmlsZXMoZGlyZWN0b3J5KToKICAgIGZpbGVzID0gWyBmIGZvciBmIGluIGxpc3RkaXIoZGlyZWN0b3J5KSBpZiBpc2ZpbGUoam9pbihkaXJlY3RvcnksIGYpKSBdCiAgICBmaWxlcyA9IFsgZiBmb3IgZiBpbiBmaWxlcyBpZiBmLmVuZHN3aXRoKCIuanNvbiIpIF0KICAgIHJldHVybiBmaWxlcwoKZGVmIHdhbGtfZG93bihwYXRoKToKICAgIGZpbGVzID0gZ2V0X2pzb25fZmlsZXMocGF0aCkKICAgIGlmIGxlbihmaWxlcykgPiAwOgogICAgICAgIHJldHVybiAocGF0aCwgZmlsZXMpCiAgICBuZXdfcGF0aCA9IG9zLnNlcC5qb2luKHBhdGguc3BsaXQob3Muc2VwKVs6LTFdKQogICAgaWYgbmV3X3BhdGggIT0gIiI6CiAgICAgICAgcmV0dXJuIHdhbGtfZG93bihuZXdfcGF0aCkKICAgIHJldHVybiBbXQoKZGVmIHJlYWRfaW5mbyhwYXRoKToKPHxmaW1faG9sZXw+CiAgICBmaWxlcyA9IHBhdGhfZmlsZXNbMV0KICAgIGFzc2VydChsZW4oZmlsZXMpID09IDEpCiAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGpzb25fcGF0aCwgZmlsZXNbMF0pLCAiciIpIGFzIGY6CiAgICAgICAgZGF0YSA9IGpzb24ubG9hZChmKQogICAgcmV0dXJuIGRhdGEKCmRlZiBnZXRfdGFnbmFtZShwYXRoKToKICAgIHJldHVybiBwYXRoLnNwbGl0KG9zLnNlcClbLTNdCgpkZWYgbWFpbigpOgogICAgbWV0YSA9IHJlYWRfaW5mbyhzeXMuYXJndlsxXSkKICAgIHByaW50KGpzb24uZHVtcHMobWV0YSkpCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAjIGFzc3VtZSBpbnB1dCBzb21lL2Rpci9wYXRoL2JpbmFyeQogICAgZGlyZWN0b3J5ID0gb3MucGF0aC5hYnNwYXRoKG9zLnNlcC5qb2luKHBhdGguc3BsaXQob3Muc2VwKVs6LTFdKSkKICAgIHBhdGhfZmlsZXMgPSB3YWxrX2Rvd24oZGlyZWN0b3J5KQogICAganNvbl9wYXRoID0gcGF0aF9maWxlc1swXQo8fGZpbV9lbmR8Pg=="]
["416eca459138b0ed064a291d5f0242af9e40035a-3","416eca459138b0ed064a291d5f0242af9e40035a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBkYXRlOiAgICAgIDIwMTktMDktMjQKIyBhdXRob3I6ICAgIGFsZXhhbmRlci5yYXVzY2hAZGNzby5kZQojIHNoYXJpbmc6ICAgVExQOkdSRUVOCiMgcmVmZXJlbmNlOiBpbnRlcm5hbCB0b29saW5nCiMKIyBSZWFkIE1hbHBlZGlhIGluZm9ybWF0aW9uCiMgVGhpcyBzY3JpcHQgaXMgcnVuIHdpdGggYSBwYXRoIHRvIGEgZmlsZSBpbiB0aGUgTWFscGVkaWEgcmVwb3NpdG9yeSBhcwojIGFyZ3VtZW50LiBUaGUgc2NyaXB0IHdpbGwgcHJpbnQgdGhlIEpTT04gZmlsZSBjb250YWluaW5nIG1ldGEgaW5mb3JtYXRpb24KIyBhbmQgdGhlIGRlc2NyaXB0aW9uIHRvIHN0ZG91dC4KIwo8fGZpbV9ob2xlfD4KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCBzeXMKCmZyb20gb3MgaW1wb3J0IGxpc3RkaXIKZnJvbSBvcy5wYXRoIGltcG9ydCBpc2ZpbGUsIGpvaW4KCmRlZiBnZXRfanNvbl9maWxlcyhkaXJlY3RvcnkpOgogICAgZmlsZXMgPSBbIGYgZm9yIGYgaW4gbGlzdGRpcihkaXJlY3RvcnkpIGlmIGlzZmlsZShqb2luKGRpcmVjdG9yeSwgZikpIF0KICAgIGZpbGVzID0gWyBmIGZvciBmIGluIGZpbGVzIGlmIGYuZW5kc3dpdGgoIi5qc29uIikgXQogICAgcmV0dXJuIGZpbGVzCgpkZWYgd2Fsa19kb3duKHBhdGgpOgogICAgZmlsZXMgPSBnZXRfanNvbl9maWxlcyhwYXRoKQogICAgaWYgbGVuKGZpbGVzKSA+IDA6CiAgICAgICAgcmV0dXJuIChwYXRoLCBmaWxlcykKICAgIG5ld19wYXRoID0gb3Muc2VwLmpvaW4ocGF0aC5zcGxpdChvcy5zZXApWzotMV0pCiAgICBpZiBuZXdfcGF0aCAhPSAiIjoKICAgICAgICByZXR1cm4gd2Fsa19kb3duKG5ld19wYXRoKQogICAgcmV0dXJuIFtdCgpkZWYgcmVhZF9pbmZvKHBhdGgpOgogICAgIyBhc3N1bWUgaW5wdXQgc29tZS9kaXIvcGF0aC9iaW5hcnkKICAgIGRpcmVjdG9yeSA9IG9zLnBhdGguYWJzcGF0aChvcy5zZXAuam9pbihwYXRoLnNwbGl0KG9zLnNlcClbOi0xXSkpCiAgICBwYXRoX2ZpbGVzID0gd2Fsa19kb3duKGRpcmVjdG9yeSkKICAgIGpzb25fcGF0aCA9IHBhdGhfZmlsZXNbMF0KICAgIGZpbGVzID0gcGF0aF9maWxlc1sxXQogICAgYXNzZXJ0KGxlbihmaWxlcykgPT0gMSkKICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oanNvbl9wYXRoLCBmaWxlc1swXSksICJyIikgYXMgZjoKICAgICAgICBkYXRhID0ganNvbi5sb2FkKGYpCiAgICByZXR1cm4gZGF0YQoKZGVmIGdldF90YWduYW1lKHBhdGgpOgogICAgcmV0dXJuIHBhdGguc3BsaXQob3Muc2VwKVstM10KCmRlZiBtYWluKCk6CiAgICBtZXRhID0gcmVhZF9pbmZvKHN5cy5hcmd2WzFdKQogICAgcHJpbnQoanNvbi5kdW1wcyhtZXRhKSkKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KIyB1c2FnZTogJSAuL3JlYWRfbWFscGVkaWFfaW5mb3JtYXRpb24ucHkgcGF0aC90by9zYW1wbGUvaW4vbWFscGVkaWEvcmVwbwojCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cgo8fGZpbV9lbmR8Pg=="]
["a9beb6b47d09dadcc5125b44163b4314679fb2ee-1","a9beb6b47d09dadcc5125b44163b4314679fb2ee","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udGVzdCBpbXBvcnQgVGVzdENhc2UKZnJvbSBkamFuZ28udGVzdC51dGlscyBpbXBvcnQgb3ZlcnJpZGVfc2V0dGluZ3MKCmZyb20gZ29vZ2xlX2FkZHJlc3MubW9kZWxzIGltcG9ydCBBZGRyZXNzCmZyb20gZ29vZ2xlX2FkZHJlc3MubW9kZWxzIGltcG9ydCBBZGRyZXNzQ29tcG9uZW50CmZyb20gZ29vZ2xlX2FkZHJlc3MubW9kZWxzIGltcG9ydCBBZGRyZXNzQ29tcG9uZW50VHlwZQoKZGVmIHJlbW92ZV9jb21wb25lbnQoYWRkcmVzcywgdHlwZXMpOgogIGZvciBjb21wb25lbnQgaW4gYWRkcmVzcy5hZGRyZXNzX2NvbXBvbmVudHMuYWxsKCk6CiAgICBmb3IgdHlwZSBpbiBjb21wb25lbnQudHlwZXMuYWxsKCk6CiAgICAgIGlmIHR5cGUubmFtZSBpbiB0eXBlczoKICAgICAgICBjb21wb25lbnQuZGVsZXRlKCkKCiAgcmV0dXJuIGFkZHJlc3MKPHxmaW1faG9sZXw+CiAgZGVmIHRlc3RfYXBpX2NhbGwoc2VsZik6CiAgICAiIiJBc3NlcnQgQWRkcmVzcyBjYWxscyBnb29nbGUgQVBJIGFuZCBnZXQgYWRkcmVzcyIiIgogICAgYSA9IEFkZHJlc3MocmF3PSJSdWEgVGXDp2FpbmTDoSwgODEsIFNQIiwgcmF3Mj0iQ2FzYSIpCiAgICBhLnNhdmUoKQoKICAgIGEgPSBBZGRyZXNzLm9iamVjdHMuZ2V0KHBrPWEucGspCiAgICBzZWxmLmFzc2VydFRydWUoYS5yYXcgPT0gIlJ1YSBUZcOnYWluZMOhLCA4MSwgU1AiKQogICAgc2VsZi5hc3NlcnRUcnVlKGEucmF3MiA9PSAiQ2FzYSIpCiAgICBzZWxmLmFzc2VydFRydWUoYS5hZGRyZXNzX2xpbmUgPT0gIlJ1YSBUZcOnYWluZMOhLCA4MSwgUGluaGVpcm9zLCBTw6NvIFBhdWxvLCBTUCwgQnJhemlsIikKICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLl9fc3RyX18oKSA9PSAiUnVhIFRlw6dhaW5kw6EsIDgxLCBQaW5oZWlyb3MsIFPDo28gUGF1bG8sIFNQLCBCcmF6aWwiKQogICAgc2VsZi5hc3NlcnRUcnVlKGEubGF0KQogICAgc2VsZi5hc3NlcnRUcnVlKGEubG5nKQoKICAgIGEucmF3PSJSdWEgQ2Fwb3RlIFZhbGVudGUsIDcwMSwgU1AiCiAgICBhLnNhdmUoKQogICAgYSA9IEFkZHJlc3Mub2JqZWN0cy5nZXQocGs9YS5waykKICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLnJhdyA9PSAiUnVhIENhcG90ZSBWYWxlbnRlLCA3MDEsIFNQIikKICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLnJhdzIgPT0gIkNhc2EiKQogICAgc2VsZi5hc3NlcnRUcnVlKGEuYWRkcmVzc19saW5lID09ICJSdWEgQ2Fwb3RlIFZhbGVudGUsIDcwMSwgUGluaGVpcm9zLCBTw6NvIFBhdWxvLCBTUCwgQnJhemlsIikKICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLl9fc3RyX18oKSAgPT0gIlJ1YSBDYXBvdGUgVmFsZW50ZSwgNzAxLCBQaW5oZWlyb3MsIFPDo28gUGF1bG8sIFNQLCBCcmF6aWwiKQogICAgc2VsZi5hc3NlcnRUcnVlKGEubGF0KQogICAgc2VsZi5hc3NlcnRUcnVlKGEubG5nKQoKICAgIGEuYWRkcmVzc19saW5lPU5vbmUKICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLl9fc3RyX18oKSA9PSAiIikKCiAgZGVmIHRlc3RfbG9jYWxpdHkoc2VsZik6CiAgICAiIiJBc3NlcnQgQWRkcmVzc01vZGVsLmdldF9jaXR5X3N0YXRlIHByZWZlcmVuY2Ugb3JkZXIgaXMgbG9jYWxpdHksIGFkbWluaXN0cmF0aXZlX2FyZWFfMiIiIgogICAgYSA9IEFkZHJlc3MocmF3PSJDaGljYWdvIikKICAgIGEuc2F2ZSgpCiAgICBzZWxmLmFzc2VydFRydWUoIkNoaWNhZ28iIGluIGEuZ2V0X2NpdHlfc3RhdGUoKSkKCiAgICBhID0gcmVtb3ZlX2NvbXBvbmVudChhLCBbJ2xvY2FsaXR5J10pCiAgICBzZWxmLmFzc2VydFRydWUoIkNvb2siIGluIGEuZ2V0X2NpdHlfc3RhdGUoKSkKCiAgZGVmIHRlc3Rfbm9fY291bnRyeShzZWxmKToKICAgICIiIkFzc2VydCBBZGRyZXNzTW9kZWwuZ2V0X2NvdW50cnlfY29kZSByZXR1cm5zIE5vbmUgaW5zdGVhZCBvZiByYXNpbmcgQXR0cmlidXRlRXJyb3IgaWYgbm8gY291bnRyeSBleGlzdHMiIiIKICAgIGEgPSBBZGRyZXNzKHJhdz0iQ2hpY2FnbyIpCiAgICBhLnNhdmUoKQoKICAgIEFkZHJlc3NDb21wb25lbnQub2JqZWN0cy5hbGwoKS5kZWxldGUoKQoKICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLmdldF9jb3VudHJ5X2NvZGUoKSA9PSBOb25lKQoKICBkZWYgdGVzdF9zaWduYWxfcmV0dXJuc19pbl9jYXNlX29mX25vX3Jlc3VsdChzZWxmKToKICAgICIiIkFzc2VydCBBZGRyZXNzTW9kZWwuZ2V0X2NvdW50cnlfY29kZSByZXR1cm5zIE5vbmUgaW5zdGVhZCBvZiByYXNpbmcgQXR0cmlidXRlRXJyb3IgaWYgbm8gY291bnRyeSBleGlzdHMiIiIKICAgIGEgPSBBZGRyZXNzKHJhdz0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiKQogICAgYS5zYXZlKCkKICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLmFkZHJlc3NfbGluZSA9PSBOb25lKQoKCmNsYXNzIEFkZHJlc3NDb21wb25lbnRUeXBlTW9kZWxUZXN0Q2FzZShUZXN0Q2FzZSk6CiAgZGVmIHRlc3Rfc3RyX2NhbGwoc2VsZik6CiAgICAiIiJBc3NlcnQgQWRkcmVzc0NvbXBvbmVudFR5cGUgX19zdHJfXyByZXR1cm5zIG5hbWUiIiIKICAgIGEgPSBBZGRyZXNzQ29tcG9uZW50VHlwZShuYW1lPSJ4eXoiKQogICAgYS5zYXZlKCkKCiAgICBzZWxmLmFzc2VydFRydWUoYS5fX3N0cl9fKCkgPT0gInh5eiIpCgpjbGFzcyBBZGRyZXNzQ29tcG9uZW50TW9kZWxUZXN0Q2FzZShUZXN0Q2FzZSk6CiAgZGVmIHRlc3Rfc3RyX2NhbGwoc2VsZik6CiAgICAiIiJBc3NlcnQgQWRkcmVzc0NvbXBvbmVudCBfX3N0cl9fIHJldHVybnMgbG9uZyBuYW1lIiIiCiAgICBhID0gQWRkcmVzc0NvbXBvbmVudChzaG9ydF9uYW1lPSJzaG9ydCIsIGxvbmdfbmFtZT0ibG9uZyIpCiAgICBhLnNhdmUoKQoKICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLl9fc3RyX18oKSA9PSAibG9uZyIpCjx8ZmltX3N1ZmZpeHw+CgoKQG92ZXJyaWRlX3NldHRpbmdzKEdPT0dMRV9BRERSRVNTPXsnQVBJX0xBTkdVQUdFJzogJ2VuX1VTJ30pCmNsYXNzIEFkZHJlc3NNb2RlbFRlc3RDYXNlKFRlc3RDYXNlKToKPHxmaW1fZW5kfD4="]
["68c3fb27c2dcd7f22bce54efaa0b3fb7ab7bbe1b-1","68c3fb27c2dcd7f22bce54efaa0b3fb7ab7bbe1b","PHxmaW1fcHJlZml4fD4KIiIiClVuaXQgdGVzdGluZyBmb3IgdGhlIG1lYXN1cmUgbW9kdWxlLgoiIiIKCmltcG9ydCBtb2xlY29vbAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHB5dGVzdAoKZGVmIHRlc3RfY2FsY3VsYXRlX2Rpc3RhbmNlKCk6Cgo8fGZpbV9ob2xlfD4KCiAgICBjYWxjdWxhdGVkX2Rpc3RhbmNlID0gbW9sZWNvb2wuY2FsY3VsYXRlX2Rpc3RhbmNlKHIxLCByMikKCiAgICBhc3NlcnQgZXhwZWN0ZWRfZGlzdGFuY2UgPT0gY2FsY3VsYXRlZF9kaXN0YW5jZQoKQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJwMSwgcDIsIHAzLCBleHBlY3RlZF9hbmdsZSIsIFsKICAgICAgICAobnAuYXJyYXkoW25wLnNxcnQoMikvMiwgbnAuc3FydCgyKS8yLCAwXSksIG5wLmFycmF5KFswLDAsMF0pLCBucC5hcnJheShbMSwwLDBdKSwgNDUpLAogICAgICAgIChucC5hcnJheShbMCwwLC0xXSksIG5wLmFycmF5KFswLDEsMF0pLCBucC5hcnJheShbMSwwLDBdKSwgNjApLAogICAgICAgIChucC5hcnJheShbbnAuc3FydCgzKS8yLCgxLi8yLiksIDBdKSwgbnAuYXJyYXkoWzAsMCwwXSksIG5wLmFycmF5KFsxLDAsMF0pLDMwKSwKICAgIF0pCgpkZWYgdGVzdF9jYWxjdWxhdGVfYW5nbGVfbWFueShwMSxwMixwMywgZXhwZWN0ZWRfYW5nbGUpOgoKICAgIGNhbGN1bGF0ZWRfYW5nbGUgPSBtb2xlY29vbC5jYWxjdWxhdGVfYW5nbGUocDEsIHAyLCBwMywgZGVncmVlcyA9IFRydWUpCgogICAgYXNzZXJ0IGNhbGN1bGF0ZWRfYW5nbGUgPT0gcHl0ZXN0LmFwcHJveChleHBlY3RlZF9hbmdsZSkKPHxmaW1fc3VmZml4fD4KICAgIHIxID0gbnAuYXJyYXkoWzAsMCwwXSkKICAgIHIyID0gbnAuYXJyYXkoWzAuMSwwLDBdKQoKICAgIGV4cGVjdGVkX2Rpc3RhbmNlID0gMC4xCjx8ZmltX2VuZHw+"]
["68c3fb27c2dcd7f22bce54efaa0b3fb7ab7bbe1b-2","68c3fb27c2dcd7f22bce54efaa0b3fb7ab7bbe1b","PHxmaW1fcHJlZml4fD4KIiIiClVuaXQgdGVzdGluZyBmb3IgdGhlIG1lYXN1cmUgbW9kdWxlLgoiIiIKCmltcG9ydCBtb2xlY29vbAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHB5dGVzdAoKZGVmIHRlc3RfY2FsY3VsYXRlX2Rpc3RhbmNlKCk6CgogICAgcjEgPSBucC5hcnJheShbMCwwLDBdKQogICAgcjIgPSBucC5hcnJheShbMC4xLDAsMF0pCjx8ZmltX2hvbGV8PgoKICAgIGFzc2VydCBleHBlY3RlZF9kaXN0YW5jZSA9PSBjYWxjdWxhdGVkX2Rpc3RhbmNlCgpAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInAxLCBwMiwgcDMsIGV4cGVjdGVkX2FuZ2xlIiwgWwogICAgICAgIChucC5hcnJheShbbnAuc3FydCgyKS8yLCBucC5zcXJ0KDIpLzIsIDBdKSwgbnAuYXJyYXkoWzAsMCwwXSksIG5wLmFycmF5KFsxLDAsMF0pLCA0NSksCiAgICAgICAgKG5wLmFycmF5KFswLDAsLTFdKSwgbnAuYXJyYXkoWzAsMSwwXSksIG5wLmFycmF5KFsxLDAsMF0pLCA2MCksCiAgICAgICAgKG5wLmFycmF5KFtucC5zcXJ0KDMpLzIsKDEuLzIuKSwgMF0pLCBucC5hcnJheShbMCwwLDBdKSwgbnAuYXJyYXkoWzEsMCwwXSksMzApLAogICAgXSkKCmRlZiB0ZXN0X2NhbGN1bGF0ZV9hbmdsZV9tYW55KHAxLHAyLHAzLCBleHBlY3RlZF9hbmdsZSk6CgogICAgY2FsY3VsYXRlZF9hbmdsZSA9IG1vbGVjb29sLmNhbGN1bGF0ZV9hbmdsZShwMSwgcDIsIHAzLCBkZWdyZWVzID0gVHJ1ZSkKCiAgICBhc3NlcnQgY2FsY3VsYXRlZF9hbmdsZSA9PSBweXRlc3QuYXBwcm94KGV4cGVjdGVkX2FuZ2xlKQo8fGZpbV9zdWZmaXh8PgoKICAgIGV4cGVjdGVkX2Rpc3RhbmNlID0gMC4xCgogICAgY2FsY3VsYXRlZF9kaXN0YW5jZSA9IG1vbGVjb29sLmNhbGN1bGF0ZV9kaXN0YW5jZShyMSwgcjIpCjx8ZmltX2VuZHw+"]
["e75fa4e693b74400600e97db9b34b91c7b72b158-1","e75fa4e693b74400600e97db9b34b91c7b72b158","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIwojIENvcHlyaWdodCAoQykgMjAwOSAgUmVuZSBMaWVic2NoZXIKIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIAojIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CiMgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCAKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKIyBkZXRhaWxzLgojIAojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uIAojCiIiIkdlbmVyYWwgaW5zdGFuY2Ugb2YgYW4gb3V0cHV0IHZhcmlhYmxlLiIiIgpfX3JldmlzaW9uX18gPSAiJElkOiBPdXRwdXRWYXJpYWJsZS5weSx2IDEuMTQgMjAxMC0wMy0yOCAxODozODowOCBybGllYnNjaGVyIEV4cCAkIgoKZnJvbSBmdXp6eS5WYXJpYWJsZSBpbXBvcnQgVmFyaWFibGUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgT3V0cHV0VmFyaWFibGUoVmFyaWFibGUpOgogICAgIiIiR2VuZXJhbCBpbnN0YW5jZSBvZiBhbiBvdXRwdXQgdmFyaWFibGUuCiAgICAgICAgVGhlIGRlZnV6emlmaWNhdGlvbiBpcyBwcm92aWRlZCBieSBzcGVjaWFsIG9iamVjdCBmb3IgdGhpcyBwdXJwb3NlLAo8fGZpbV9lbmR8Pg=="]
["e75fa4e693b74400600e97db9b34b91c7b72b158-2","e75fa4e693b74400600e97db9b34b91c7b72b158","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIwojIENvcHlyaWdodCAoQykgMjAwOSAgUmVuZSBMaWVic2NoZXIKIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIAojIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CiMgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCAKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKIyBkZXRhaWxzLgojIAojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uIAojCiIiIkdlbmVyYWwgaW5zdGFuY2Ugb2YgYW4gb3V0cHV0IHZhcmlhYmxlLiIiIgpfX3JldmlzaW9uX18gPSAiJElkOiBPdXRwdXRWYXJpYWJsZS5weSx2IDEuMTQgMjAxMC0wMy0yOCAxODozODowOCBybGllYnNjaGVyIEV4cCAkIgoKZnJvbSBmdXp6eS5WYXJpYWJsZSBpbXBvcnQgVmFyaWFibGUKCmNsYXNzIE91dHB1dFZhcmlhYmxlKFZhcmlhYmxlKToKICAgICIiIkdlbmVyYWwgaW5zdGFuY2Ugb2YgYW4gb3V0cHV0IHZhcmlhYmxlLgogICAgICAgIFRoZSBkZWZ1enppZmljYXRpb24gaXMgcHJvdmlkZWQgYnkgc3BlY2lhbCBvYmplY3QgZm9yIHRoaXMgcHVycG9zZSwKICAgICAgICBzZXQgYXMgZGVmdXp6aWZ5IHBhcmFtLgogICAgICAgIEFsc28gbWFya2VyLCBzbyB5b3UgY2FuIGNoZWNrIGlmIGFueSB2YXJpYWJsZSBpcyBhbiAoaW5zdGFuY2Ugb2YpIG91dHB1dCB2YXJpYWJsZSAKCiAgICAgICAgQGl2YXIgZGVmdXp6aWZ5OiBEZWZ1enppZmljYXRpb24gbWV0aG9kLgogICAgICAgIEB0eXBlIGRlZnV6emlmeTogTHtmdXp6eS5kZWZ1enppZnkuQmFzZS5CYXNlfQogICAgICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlZnV6emlmeT1Ob25lLCAqYXJncywgKiprZXl3b3Jkcyk6CiAgICAgICAgIiIiSW5pdGlhbGl6ZSB0aGlzIG91dHB1dCB2YXJpYWJsZSB3aXRoIGEgZGVmdXp6aWZpY2F0aW9uIG1ldGhvZC4KCiAgICAgICAgQHBhcmFtIGRlZnV6emlmeTogRGVmdXp6aWZpY2F0aW9uIG1ldGhvZC4KICAgICAgICBAdHlwZSBkZWZ1enppZnk6IEx7ZnV6enkuZGVmdXp6aWZ5LkJhc2UuQmFzZX0KICAgICAgICAiIiIKICAgICAgICBzdXBlcihPdXRwdXRWYXJpYWJsZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa2V5d29yZHMpCiAgICAgICAgc2VsZi5kZWZ1enppZnkgPSBkZWZ1enppZnkKCiAgICBkZWYgZ2V0VmFsdWUoc2VsZik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAiIiJkZWZ1enppZmljYXRpb24iIiIKICAgICAgICByZXR1cm4gc2VsZi5kZWZ1enppZnkuZ2V0VmFsdWUoc2VsZikKCjx8ZmltX2VuZHw+"]
["e75fa4e693b74400600e97db9b34b91c7b72b158-3","e75fa4e693b74400600e97db9b34b91c7b72b158","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIwojIENvcHlyaWdodCAoQykgMjAwOSAgUmVuZSBMaWVic2NoZXIKIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIAojIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CiMgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCAKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKIyBkZXRhaWxzLgojIAojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uIAojCiIiIkdlbmVyYWwgaW5zdGFuY2Ugb2YgYW4gb3V0cHV0IHZhcmlhYmxlLiIiIgpfX3JldmlzaW9uX18gPSAiJElkOiBPdXRwdXRWYXJpYWJsZS5weSx2IDEuMTQgMjAxMC0wMy0yOCAxODozODowOCBybGllYnNjaGVyIEV4cCAkIgoKZnJvbSBmdXp6eS5WYXJpYWJsZSBpbXBvcnQgVmFyaWFibGUKCmNsYXNzIE91dHB1dFZhcmlhYmxlKFZhcmlhYmxlKToKICAgICIiIkdlbmVyYWwgaW5zdGFuY2Ugb2YgYW4gb3V0cHV0IHZhcmlhYmxlLgogICAgICAgIFRoZSBkZWZ1enppZmljYXRpb24gaXMgcHJvdmlkZWQgYnkgc3BlY2lhbCBvYmplY3QgZm9yIHRoaXMgcHVycG9zZSwKICAgICAgICBzZXQgYXMgZGVmdXp6aWZ5IHBhcmFtLgogICAgICAgIEFsc28gbWFya2VyLCBzbyB5b3UgY2FuIGNoZWNrIGlmIGFueSB2YXJpYWJsZSBpcyBhbiAoaW5zdGFuY2Ugb2YpIG91dHB1dCB2YXJpYWJsZSAKCiAgICAgICAgQGl2YXIgZGVmdXp6aWZ5OiBEZWZ1enppZmljYXRpb24gbWV0aG9kLgogICAgICAgIEB0eXBlIGRlZnV6emlmeTogTHtmdXp6eS5kZWZ1enppZnkuQmFzZS5CYXNlfQogICAgICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlZnV6emlmeT1Ob25lLCAqYXJncywgKiprZXl3b3Jkcyk6CiAgICAgICAgIiIiSW5pdGlhbGl6ZSB0aGlzIG91dHB1dCB2YXJpYWJsZSB3aXRoIGEgZGVmdXp6aWZpY2F0aW9uIG1ldGhvZC4KCiAgICAgICAgQHBhcmFtIGRlZnV6emlmeTogRGVmdXp6aWZpY2F0aW9uIG1ldGhvZC4KICAgICAgICBAdHlwZSBkZWZ1enppZnk6IEx7ZnV6enkuZGVmdXp6aWZ5LkJhc2UuQmFzZX0KICAgICAgICAiIiIKICAgICAgICBzdXBlcihPdXRwdXRWYXJpYWJsZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa2V5d29yZHMpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmRlZnV6emlmeSA9IGRlZnV6emlmeQoKPHxmaW1fZW5kfD4="]
["e75fa4e693b74400600e97db9b34b91c7b72b158-4","e75fa4e693b74400600e97db9b34b91c7b72b158","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIwojIENvcHlyaWdodCAoQykgMjAwOSAgUmVuZSBMaWVic2NoZXIKIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIAojIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CiMgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCAKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKIyBkZXRhaWxzLgojIAojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uIAojCiIiIkdlbmVyYWwgaW5zdGFuY2Ugb2YgYW4gb3V0cHV0IHZhcmlhYmxlLiIiIgpfX3JldmlzaW9uX18gPSAiJElkOiBPdXRwdXRWYXJpYWJsZS5weSx2IDEuMTQgMjAxMC0wMy0yOCAxODozODowOCBybGllYnNjaGVyIEV4cCAkIgoKZnJvbSBmdXp6eS5WYXJpYWJsZSBpbXBvcnQgVmFyaWFibGUKCmNsYXNzIE91dHB1dFZhcmlhYmxlKFZhcmlhYmxlKToKICAgICIiIkdlbmVyYWwgaW5zdGFuY2Ugb2YgYW4gb3V0cHV0IHZhcmlhYmxlLgogICAgICAgIFRoZSBkZWZ1enppZmljYXRpb24gaXMgcHJvdmlkZWQgYnkgc3BlY2lhbCBvYmplY3QgZm9yIHRoaXMgcHVycG9zZSwKICAgICAgICBzZXQgYXMgZGVmdXp6aWZ5IHBhcmFtLgogICAgICAgIEFsc28gbWFya2VyLCBzbyB5b3UgY2FuIGNoZWNrIGlmIGFueSB2YXJpYWJsZSBpcyBhbiAoaW5zdGFuY2Ugb2YpIG91dHB1dCB2YXJpYWJsZSAKCiAgICAgICAgQGl2YXIgZGVmdXp6aWZ5OiBEZWZ1enppZmljYXRpb24gbWV0aG9kLgogICAgICAgIEB0eXBlIGRlZnV6emlmeTogTHtmdXp6eS5kZWZ1enppZnkuQmFzZS5CYXNlfQogICAgICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlZnV6emlmeT1Ob25lLCAqYXJncywgKiprZXl3b3Jkcyk6CiAgICAgICAgIiIiSW5pdGlhbGl6ZSB0aGlzIG91dHB1dCB2YXJpYWJsZSB3aXRoIGEgZGVmdXp6aWZpY2F0aW9uIG1ldGhvZC4KCiAgICAgICAgQHBhcmFtIGRlZnV6emlmeTogRGVmdXp6aWZpY2F0aW9uIG1ldGhvZC4KICAgICAgICBAdHlwZSBkZWZ1enppZnk6IEx7ZnV6enkuZGVmdXp6aWZ5LkJhc2UuQmFzZX0KICAgICAgICAiIiIKICAgICAgICBzdXBlcihPdXRwdXRWYXJpYWJsZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa2V5d29yZHMpCiAgICAgICAgc2VsZi5kZWZ1enppZnkgPSBkZWZ1enppZnkKPHxmaW1faG9sZXw+CgogICAgZGVmIF9yZXByX3BhcmFtcyhzZWxmLCBwYXJhbXMpOgogICAgICAgICIiIkhlbHBlciBmb3IgcmVwcmVzZW50YXRpb24gb2YgaW5zdGFuY2UuCiAgICAgICAgCiAgICAgICAgQWRkIGFsbCBvd24gcGFyYW1zIHRvIGdpdmVuIGxpc3QgaW4gcGFyYW1zLiAgICAKICAgICAgICAiIiIKICAgICAgICBwYXJhbXMuYXBwZW5kKHJlcHIoc2VsZi5kZWZ1enppZnkpKQogICAgICAgIHN1cGVyKE91dHB1dFZhcmlhYmxlLCBzZWxmKS5fcmVwcl9wYXJhbXMocGFyYW1zKQo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiBnZXRWYWx1ZShzZWxmKToKICAgICAgICAiIiJkZWZ1enppZmljYXRpb24iIiIKICAgICAgICByZXR1cm4gc2VsZi5kZWZ1enppZnkuZ2V0VmFsdWUoc2VsZikKPHxmaW1fZW5kfD4="]
["e75fa4e693b74400600e97db9b34b91c7b72b158-5","e75fa4e693b74400600e97db9b34b91c7b72b158","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIwojIENvcHlyaWdodCAoQykgMjAwOSAgUmVuZSBMaWVic2NoZXIKIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIAojIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CiMgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCAKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKIyBkZXRhaWxzLgojIAojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uIAojCiIiIkdlbmVyYWwgaW5zdGFuY2Ugb2YgYW4gb3V0cHV0IHZhcmlhYmxlLiIiIgpfX3JldmlzaW9uX18gPSAiJElkOiBPdXRwdXRWYXJpYWJsZS5weSx2IDEuMTQgMjAxMC0wMy0yOCAxODozODowOCBybGllYnNjaGVyIEV4cCAkIgoKZnJvbSBmdXp6eS5WYXJpYWJsZSBpbXBvcnQgVmFyaWFibGUKCmNsYXNzIE91dHB1dFZhcmlhYmxlKFZhcmlhYmxlKToKICAgICIiIkdlbmVyYWwgaW5zdGFuY2Ugb2YgYW4gb3V0cHV0IHZhcmlhYmxlLgogICAgICAgIFRoZSBkZWZ1enppZmljYXRpb24gaXMgcHJvdmlkZWQgYnkgc3BlY2lhbCBvYmplY3QgZm9yIHRoaXMgcHVycG9zZSwKICAgICAgICBzZXQgYXMgZGVmdXp6aWZ5IHBhcmFtLgogICAgICAgIEFsc28gbWFya2VyLCBzbyB5b3UgY2FuIGNoZWNrIGlmIGFueSB2YXJpYWJsZSBpcyBhbiAoaW5zdGFuY2Ugb2YpIG91dHB1dCB2YXJpYWJsZSAKCiAgICAgICAgQGl2YXIgZGVmdXp6aWZ5OiBEZWZ1enppZmljYXRpb24gbWV0aG9kLgogICAgICAgIEB0eXBlIGRlZnV6emlmeTogTHtmdXp6eS5kZWZ1enppZnkuQmFzZS5CYXNlfQogICAgICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlZnV6emlmeT1Ob25lLCAqYXJncywgKiprZXl3b3Jkcyk6CiAgICAgICAgIiIiSW5pdGlhbGl6ZSB0aGlzIG91dHB1dCB2YXJpYWJsZSB3aXRoIGEgZGVmdXp6aWZpY2F0aW9uIG1ldGhvZC4KCiAgICAgICAgQHBhcmFtIGRlZnV6emlmeTogRGVmdXp6aWZpY2F0aW9uIG1ldGhvZC4KICAgICAgICBAdHlwZSBkZWZ1enppZnk6IEx7ZnV6enkuZGVmdXp6aWZ5LkJhc2UuQmFzZX0KICAgICAgICAiIiIKICAgICAgICBzdXBlcihPdXRwdXRWYXJpYWJsZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa2V5d29yZHMpCiAgICAgICAgc2VsZi5kZWZ1enppZnkgPSBkZWZ1enppZnkKCiAgICBkZWYgZ2V0VmFsdWUoc2VsZik6CiAgICAgICAgIiIiZGVmdXp6aWZpY2F0aW9uIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuZGVmdXp6aWZ5LmdldFZhbHVlKHNlbGYpCgogICAgZGVmIF9yZXByX3BhcmFtcyhzZWxmLCBwYXJhbXMpOgogICAgICAgICIiIkhlbHBlciBmb3IgcmVwcmVzZW50YXRpb24gb2YgaW5zdGFuY2UuCiAgICAgICAgCiAgICAgICAgQWRkIGFsbCBvd24gcGFyYW1zIHRvIGdpdmVuIGxpc3QgaW4gcGFyYW1zLiAgICAKICAgICAgICAiIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHBhcmFtcy5hcHBlbmQocmVwcihzZWxmLmRlZnV6emlmeSkpCiAgICAgICAgc3VwZXIoT3V0cHV0VmFyaWFibGUsIHNlbGYpLl9yZXByX3BhcmFtcyhwYXJhbXMpCjx8ZmltX2VuZHw+"]
["c174169764c4d7acaa9e3e5ff313dab53867c22b-1","c174169764c4d7acaa9e3e5ff313dab53867c22b","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgZW5jb2Rpbmc6IHV0Zi04CgoiIiIKQHZlcnNpb246IHB5dGhvbi4zLjYKQGF1dGhvcjogemhhbmdqaWFoZW5nCkBzb2Z0d2FyZTogUHlDaGFybQpAdGltZTogMjAxNy85LzIzIDEwOjQxCiIiIgoKZnJvbSAuYmFzZSBpbXBvcnQgUHlzZQoKY2xhc3MgTGFuZGxvcmRGb3J1bVBhZ2UoUHlzZSk6CiAgICAnJyfmiL/kuJzorrLloIInJycKCiAgICAj5oi/5Lic6K6y5aCC5paH5qGICjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBmb3J1bV90ZXh0KHNlbGYpOgogICAgICAgIHRleHQgPSBzZWxmLmdldF90ZXh0KCJ4cGF0aD0+L2h0bWwvYm9keS9kaXZbMTRdL2Rpdls1XS9kaXYiKQogICAgICAgIHJldHVybiB0ZXh0Cjx8ZmltX2VuZHw+"]
["c174169764c4d7acaa9e3e5ff313dab53867c22b-2","c174169764c4d7acaa9e3e5ff313dab53867c22b","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgZW5jb2Rpbmc6IHV0Zi04CgoiIiIKQHZlcnNpb246IHB5dGhvbi4zLjYKQGF1dGhvcjogemhhbmdqaWFoZW5nCkBzb2Z0d2FyZTogUHlDaGFybQpAdGltZTogMjAxNy85LzIzIDEwOjQxCiIiIgoKZnJvbSAuYmFzZSBpbXBvcnQgUHlzZQoKY2xhc3MgTGFuZGxvcmRGb3J1bVBhZ2UoUHlzZSk6CiAgICAnJyfmiL/kuJzorrLloIInJycKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICPmiL/kuJzorrLloILmlofmoYgKICAgIGRlZiBmb3J1bV90ZXh0KHNlbGYpOgogICAgICAgIHRleHQgPSBzZWxmLmdldF90ZXh0KCJ4cGF0aD0+L2h0bWwvYm9keS9kaXZbMTRdL2Rpdls1XS9kaXYiKQogICAgICAgIHJldHVybiB0ZXh0Cjx8ZmltX2VuZHw+"]
["c174169764c4d7acaa9e3e5ff313dab53867c22b-3","c174169764c4d7acaa9e3e5ff313dab53867c22b","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgZW5jb2Rpbmc6IHV0Zi04CgoiIiIKPHxmaW1fZW5kfD4="]
["c174169764c4d7acaa9e3e5ff313dab53867c22b-4","c174169764c4d7acaa9e3e5ff313dab53867c22b","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBlbmNvZGluZzogdXRmLTgKCiIiIgpAdmVyc2lvbjogcHl0aG9uLjMuNgo8fGZpbV9lbmR8Pg=="]
["c174169764c4d7acaa9e3e5ff313dab53867c22b-5","c174169764c4d7acaa9e3e5ff313dab53867c22b","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgZW5jb2Rpbmc6IHV0Zi04CgoiIiIKQHZlcnNpb246IHB5dGhvbi4zLjYKQGF1dGhvcjogemhhbmdqaWFoZW5nCkBzb2Z0d2FyZTogUHlDaGFybQpAdGltZTogMjAxNy85LzIzIDEwOjQxCiIiIgoKZnJvbSAuYmFzZSBpbXBvcnQgUHlzZQoKY2xhc3MgTGFuZGxvcmRGb3J1bVBhZ2UoUHlzZSk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICcnJ+aIv+S4nOiusuWggicnJwoKICAgICPmiL/kuJzorrLloILmlofmoYgKICAgIGRlZiBmb3J1bV90ZXh0KHNlbGYpOgo8fGZpbV9lbmR8Pg=="]
["99c5b6b796138fb4801a09db60048d25895b04e9-1","99c5b6b796138fb4801a09db60048d25895b04e9","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgojICogQ29weXJpZ2h0IDIwMTkgUGV0ZSBEaU1hcmNvCiMgKgojICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIyAqCiMgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMgKgojICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiMKIyBOYW1lOiB1bmNvbHVtbi5weQojIFZlcnNpb246IDAuMQojIERhdGU6IDIwMTktMDktMjIKIyBXcml0dGVuIGJ5OiBQZXRlIERpTWFyY28gPHBldGUuZGltYXJjby5zb2Z0d2FyZUBnbWFpbC5jb20+CiMKIyBEZXNjcmlwdGlvbjoKIyBUaGlzIHByb2dyYW0gd2lsbCBwYXJzZSBhIHRleHQgZmlsZSB0aGF0IGNvbnRhaW5zIG11bHRpcGxlIGNvbHVtbnMgb2YgdGV4dAojIGFuZCByZXR1cm4gYSBmaWxlIG9mIHRleHQgd2l0aCB0aG9zZSBjb2x1bW5zIGluIG9yZGVyLiAgRS5nLjoKIyAgICAgdW5jb2x1bW4ucHkgLWMgMzAsNjAgLWkgdGVzdGZpbGUKIyAiLWMgMzAsNjAiIG1lYW5zIHRoZXJlIGFyZSAzIGNvbHVtbnMgaW4gdGhlIHRleHQgZmlsZTogIFRoZSBmaXJzdCBzdGFydHMgYXQKIyBwb3NpdGlvbiAxLCB0aGUgc2Vjb25kIHN0YXJ0cyBhdCBwb3NpdGlvbiAzMCwgYW5kIHRoZSB0aGlyZCBzdGFydHMgYXQKIyBwb3NpdGlvbiA2MC4gIHVuY29sdW1uLnB5IHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBjb2x1bW4gZm9sbG93ZWQgYnkgdGhlIHNlY29uZAojIGZvbGxvd2VkIGJ5IHRoZSB0aGlyZC4KIwojIERlcGVuZGVuY2llczoKIyBQeXRob24gMy54CgppbXBvcnQgb3MKaW1wb3J0IHN5cwppbXBvcnQgYXJncGFyc2UKCiMgRGVmYXVsdHM6Cjx8ZmltX2hvbGV8PgoKRXhhbXBsZSAoaW4gVmltKToKICAgICA6OCwxOSAhIHtwcm9ncmFtX25hbWV9IC1jIDMwLDYwCndpbGwgdGFrZSBsaW5lcyA4IHRocm91Z2ggMTkgYW5kIHBhc3MgdGhlbSB0byB7cHJvZ3JhbV9uYW1lfS4gICItYyAzMCw2MCIgbWVhbnMKdGhlcmUgYXJlIDMgY29sdW1ucyBpbiB0aGUgdGV4dCBmaWxlOiAgVGhlIGZpcnN0IHN0YXJ0cyBhdCBwb3NpdGlvbiAxLCB0aGUKc2Vjb25kIHN0YXJ0cyBhdCBwb3NpdGlvbiAzMCwgYW5kIHRoZSB0aGlyZCBzdGFydHMgYXQgcG9zaXRpb24gNjAuCnVuY29sdW1uLnB5IHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBjb2x1bW4gZm9sbG93ZWQgYnkgdGhlIHNlY29uZCBmb2xsb3dlZCBieQp0aGUgdGhpcmQuCiIiIgoKCmRlZiBwcmludF9lcnJvcihtc2c6IHN0ciwgb3V0ZmlsZT1zeXMuc3RkZXJyLCByYXc6IGJvb2wgPSBGYWxzZSwgZXJyb3I6IGludCA9IDEpOgogICAgIiIiCiAgICBQcmludCBhbiBlcnJvciBtZXNzYWdlIGFuZCBleGl0LgogICAgIiIiCiAgICBpZiBub3QgcmF3OgogICAgICAgIG1zZyA9ICJFUlJPUjogIiArIG1zZyArICJcbiIKICAgIG91dGZpbGUud3JpdGUobXNnKQogICAgZXhpdChlcnJvcikKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIyBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCiAgICAgICAgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNlLlJhd0Rlc2NyaXB0aW9uSGVscEZvcm1hdHRlciwKICAgICAgICBkZXNjcmlwdGlvbj0iVGFrZXMgYSBzdHJlYW0gY29udGFpbmluZyBjb2x1bW5zIG9mIHRleHQgYW5kIHJldHVybnMgYSBzaW5nbGUgY29sdW1uLiIsCiAgICAgICAgZXBpbG9nPWVwaWxvZywKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi1jIiwKICAgICAgICAiLS1jb2x1bW5zIiwKICAgICAgICB0eXBlPXN0ciwKICAgICAgICByZXF1aXJlZD1UcnVlLAogICAgICAgIGhlbHA9IlN0YXJ0IHBvc2l0aW9uIG9mIHRleHQgY29sdW1ucyBzZXBhcmF0ZWQgYnkgY29tbWFzLiAgQ291bnRzIGZyb20gMS4iLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLWkiLAogICAgICAgICItLWlucHV0IiwKICAgICAgICBkZWZhdWx0PSIiLAogICAgICAgIHR5cGU9c3RyLAogICAgICAgIG5hcmdzPSI/IiwKICAgICAgICBoZWxwPSJJbnB1dCBmaWxlLiAgRGVmYXVsdHMgdG8gc3RkaW4uIiwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi1vIiwKICAgICAgICAiLS1vdXRwdXQiLAogICAgICAgIGRlZmF1bHQ9IiIsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgbmFyZ3M9Ij8iLAogICAgICAgIGhlbHA9Ik91dHB1dCBmaWxlLiAgRGVmYXVsdHMgdG8gc3Rkb3V0LiIsCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItdCIsCiAgICAgICAgIi0tdGFic2l6ZSIsCiAgICAgICAgZGVmYXVsdD04LAogICAgICAgIHR5cGU9aW50LAogICAgICAgIGhlbHA9IlRhYiBjaGFyYWN0ZXIgd2lkdGguICBEZWZhdWx0cyB0byA4LiIsCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItZiIsCiAgICAgICAgIi0tZm9yY2UiLAogICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBoZWxwPSJGb3JjZSBvdmVyd3JpdGUgb2Ygb3V0cHV0IGZpbGUuIiwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi1EIiwKICAgICAgICAiLS1ERUJVRyIsCiAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgICAgIGhlbHA9IkVuYWJsZSBkZWJ1Z2dpbmcgbW9kZS4iLAogICAgKQogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKICAgIERFQlVHID0gYXJncy5ERUJVRwoKICAgICMgUGFyc2UgYW5kIG5vcm1hbGl6ZSBjb2x1bW4gbnVtYmVycy4KICAgIGNvbHVtbl9pbmRzID0gW10KICAgIHByZXYgPSAtMQogICAgZm9yIGMgaW4gYXJncy5jb2x1bW5zLnNwbGl0KCIsIik6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBjb2wgPSBpbnQoYy5zdHJpcCgpKSAtIDEKICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgcHJpbnRfZXJyb3IoZiJCYWQgdmFsdWUgZm9yIGNvbHVtbiBudW1iZXIgKHtjfSkuIikKICAgICAgICBpZiBjb2wgPCAwOgogICAgICAgICAgICBwcmludF9lcnJvcigiQ29sdW1uIG51bWJlciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLiIpCiAgICAgICAgaWYgY29sIDw9IHByZXY6CiAgICAgICAgICAgIHByaW50X2Vycm9yKCJDb2x1bW4gbnVtYmVycyBtdXN0IGJlIGluIGFzY2VuZGluZyBvcmRlci4iKQogICAgICAgIHByZXYgPSBjb2wKICAgICAgICBjb2x1bW5faW5kcy5hcHBlbmQoY29sKQoKICAgIGlmIGxlbihjb2x1bW5faW5kcykgPCAxOgogICAgICAgIHByaW50X2Vycm9yKCJFbnRlciBhIGxpc3Qgb2YgMSBvciBtb3JlIGNvbHVtbiBudW1iZXJzIHNlcGFyYXRlZCBieSBjb21tYXMuIikKCiAgICAjIFRoZSBmaXJzdCBjb2x1bW4gYWx3YXlzIHN0YXJ0cyB3aXRoIDAuCiAgICBpZiBjb2x1bW5faW5kc1swXSAhPSAwOgogICAgICAgIGNvbHVtbl9pbmRzLmluc2VydCgwLCAwKQogICAgIyBUaGUgbGFzdCBjb2x1bW4gaW5kZXggaXMgYWx3YXlzIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KICAgIGlmIGNvbHVtbl9pbmRzWy0xXSAhPSAtMToKICAgICAgICBjb2x1bW5faW5kcy5hcHBlbmQoLTEpCgogICAgaWYgYXJncy50YWJzaXplIDwgMDoKICAgICAgICBwcmludF9lcnJvcigiVGFiIHNpemUgbXVzdCBiZSBhdCBsZWFzdCAwLiIpCgogICAgIyBJZiBubyBpbnB1dCBmaWxlLCB1c2Ugc3RkaW46CiAgICBpZiBub3QgYXJncy5pbnB1dDoKICAgICAgICBpbmZpbGUgPSBzeXMuc3RkaW4KICAgIGVsaWYgb3MucGF0aC5leGlzdHMoYXJncy5pbnB1dCk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBpbmZpbGUgPSBvcGVuKGFyZ3MuaW5wdXQsICJyIikKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHByaW50X2Vycm9yKCJVbmFibGUgdG8gb3BlbiBpbnB1dCBmaWxlLiIpCiAgICBlbHNlOgogICAgICAgIHByaW50X2Vycm9yKCJJbnB1dCBmaWxlIGRvZXMgbm90IGV4aXN0LiIpCgogICAgIyBJZiBubyBvdXRwdXQgZmlsZSwgdXNlIHN0ZG91dDoKICAgIGlmIG5vdCBhcmdzLm91dHB1dDoKICAgICAgICBvdXRmaWxlID0gc3lzLnN0ZG91dAogICAgZWxpZiBub3Qgb3MucGF0aC5leGlzdHMoYXJncy5vdXRwdXQpIG9yIGFyZ3MuZm9yY2U6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBvdXRmaWxlID0gb3BlbihhcmdzLm91dHB1dCwgInciKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcHJpbnRfZXJyb3IoIlVuYWJsZSB0byBvcGVuIG91dHB1dCBmaWxlLiIpCiAgICBlbHNlOgogICAgICAgIHByaW50X2Vycm9yKCJPdXRwdXQgZmlsZSBhbHJlYWR5IGV4aXN0cy4gIFVzZSAtZiB0byBmb3JjZSBvdmVyd3JpdGUuIikKCiAgICAjIENyZWF0ZSBhIGxpc3Qgb2Ygc2xpY2Ugb2JqZWN0cyB0byBhcHBseSB0byBsaW5lcyBvZiB0aGUgZmlsZS4KICAgIHNsaWNlcyA9IFtdCiAgICBmb3IgaW5kIGluIHJhbmdlKGxlbihjb2x1bW5faW5kcykgLSAxKToKICAgICAgICBzbGljZXMuYXBwZW5kKHNsaWNlKGNvbHVtbl9pbmRzW2luZF0sIGNvbHVtbl9pbmRzW2luZCArIDFdKSkKICAgIG51bV9jb2xzID0gbGVuKHNsaWNlcykgICMgTnVtYmVyIG9mIHNsaWNlcyA9PSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgdGV4dC4KICAgIG91dHB1dF9idWZmZXJzID0gWyIiXSAqIG51bV9jb2xzICAjIDEgYnVmZmVyIHBlciBjb2x1bW4uCgogICAgZm9yIGxpbmUgaW4gaW5maWxlOgogICAgICAgIGxpbmUgPSBsaW5lLmV4cGFuZHRhYnMoYXJncy50YWJzaXplKQogICAgICAgIGZvciBjb2wgaW4gcmFuZ2UobnVtX2NvbHMpOgogICAgICAgICAgICAjIENvcHkgc2xpY2Ugb2YgbGluZSB0byBhcHByb3ByaWF0ZSBidWZmZXI6CiAgICAgICAgICAgIG91dHB1dF9idWZmZXJzW2NvbF0gKz0gbGluZVtzbGljZXNbY29sXV0gKyAiXG4iCgogICAgZm9yIGJ1ZmYgaW4gb3V0cHV0X2J1ZmZlcnM6CiAgICAgICAgb3V0ZmlsZS53cml0ZShidWZmKQoKICAgIGluZmlsZS5jbG9zZSgpCiAgICBvdXRmaWxlLmNsb3NlKCkKCiAgICBleGl0KDApCjx8ZmltX3N1ZmZpeHw+CnByb2dyYW1fbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCmVwaWxvZyA9IGYiIiIKVGhpcyBwcm9ncmFtIHdpbGwgcGFyc2UgYSB0ZXh0IGZpbGUgdGhhdCBjb250YWlucyBtdWx0aXBsZSBjb2x1bW5zIG9mIHRleHQKYW5kIHJldHVybiBhIGZpbGUgb2YgdGV4dCB3aXRoIHRob3NlIGNvbHVtbnMgaW4gcHJvcGVyIHNlcXVlbnRpYWwgb3JkZXIuCjx8ZmltX2VuZHw+"]
["99c5b6b796138fb4801a09db60048d25895b04e9-2","99c5b6b796138fb4801a09db60048d25895b04e9","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgojICogQ29weXJpZ2h0IDIwMTkgUGV0ZSBEaU1hcmNvCiMgKgojICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIyAqCiMgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMgKgojICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiMKIyBOYW1lOiB1bmNvbHVtbi5weQojIFZlcnNpb246IDAuMQojIERhdGU6IDIwMTktMDktMjIKIyBXcml0dGVuIGJ5OiBQZXRlIERpTWFyY28gPHBldGUuZGltYXJjby5zb2Z0d2FyZUBnbWFpbC5jb20+CiMKIyBEZXNjcmlwdGlvbjoKIyBUaGlzIHByb2dyYW0gd2lsbCBwYXJzZSBhIHRleHQgZmlsZSB0aGF0IGNvbnRhaW5zIG11bHRpcGxlIGNvbHVtbnMgb2YgdGV4dAojIGFuZCByZXR1cm4gYSBmaWxlIG9mIHRleHQgd2l0aCB0aG9zZSBjb2x1bW5zIGluIG9yZGVyLiAgRS5nLjoKIyAgICAgdW5jb2x1bW4ucHkgLWMgMzAsNjAgLWkgdGVzdGZpbGUKPHxmaW1faG9sZXw+CiMKIyBEZXBlbmRlbmNpZXM6CiMgUHl0aG9uIDMueAoKaW1wb3J0IG9zCmltcG9ydCBzeXMKaW1wb3J0IGFyZ3BhcnNlCgojIERlZmF1bHRzOgpwcm9ncmFtX25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKQplcGlsb2cgPSBmIiIiClRoaXMgcHJvZ3JhbSB3aWxsIHBhcnNlIGEgdGV4dCBmaWxlIHRoYXQgY29udGFpbnMgbXVsdGlwbGUgY29sdW1ucyBvZiB0ZXh0CmFuZCByZXR1cm4gYSBmaWxlIG9mIHRleHQgd2l0aCB0aG9zZSBjb2x1bW5zIGluIHByb3BlciBzZXF1ZW50aWFsIG9yZGVyLgoKRXhhbXBsZSAoaW4gVmltKToKICAgICA6OCwxOSAhIHtwcm9ncmFtX25hbWV9IC1jIDMwLDYwCndpbGwgdGFrZSBsaW5lcyA4IHRocm91Z2ggMTkgYW5kIHBhc3MgdGhlbSB0byB7cHJvZ3JhbV9uYW1lfS4gICItYyAzMCw2MCIgbWVhbnMKdGhlcmUgYXJlIDMgY29sdW1ucyBpbiB0aGUgdGV4dCBmaWxlOiAgVGhlIGZpcnN0IHN0YXJ0cyBhdCBwb3NpdGlvbiAxLCB0aGUKc2Vjb25kIHN0YXJ0cyBhdCBwb3NpdGlvbiAzMCwgYW5kIHRoZSB0aGlyZCBzdGFydHMgYXQgcG9zaXRpb24gNjAuCnVuY29sdW1uLnB5IHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBjb2x1bW4gZm9sbG93ZWQgYnkgdGhlIHNlY29uZCBmb2xsb3dlZCBieQp0aGUgdGhpcmQuCiIiIgoKCmRlZiBwcmludF9lcnJvcihtc2c6IHN0ciwgb3V0ZmlsZT1zeXMuc3RkZXJyLCByYXc6IGJvb2wgPSBGYWxzZSwgZXJyb3I6IGludCA9IDEpOgogICAgIiIiCiAgICBQcmludCBhbiBlcnJvciBtZXNzYWdlIGFuZCBleGl0LgogICAgIiIiCiAgICBpZiBub3QgcmF3OgogICAgICAgIG1zZyA9ICJFUlJPUjogIiArIG1zZyArICJcbiIKICAgIG91dGZpbGUud3JpdGUobXNnKQogICAgZXhpdChlcnJvcikKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIyBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCiAgICAgICAgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNlLlJhd0Rlc2NyaXB0aW9uSGVscEZvcm1hdHRlciwKICAgICAgICBkZXNjcmlwdGlvbj0iVGFrZXMgYSBzdHJlYW0gY29udGFpbmluZyBjb2x1bW5zIG9mIHRleHQgYW5kIHJldHVybnMgYSBzaW5nbGUgY29sdW1uLiIsCiAgICAgICAgZXBpbG9nPWVwaWxvZywKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi1jIiwKICAgICAgICAiLS1jb2x1bW5zIiwKICAgICAgICB0eXBlPXN0ciwKICAgICAgICByZXF1aXJlZD1UcnVlLAogICAgICAgIGhlbHA9IlN0YXJ0IHBvc2l0aW9uIG9mIHRleHQgY29sdW1ucyBzZXBhcmF0ZWQgYnkgY29tbWFzLiAgQ291bnRzIGZyb20gMS4iLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLWkiLAogICAgICAgICItLWlucHV0IiwKICAgICAgICBkZWZhdWx0PSIiLAogICAgICAgIHR5cGU9c3RyLAogICAgICAgIG5hcmdzPSI/IiwKICAgICAgICBoZWxwPSJJbnB1dCBmaWxlLiAgRGVmYXVsdHMgdG8gc3RkaW4uIiwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi1vIiwKICAgICAgICAiLS1vdXRwdXQiLAogICAgICAgIGRlZmF1bHQ9IiIsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgbmFyZ3M9Ij8iLAogICAgICAgIGhlbHA9Ik91dHB1dCBmaWxlLiAgRGVmYXVsdHMgdG8gc3Rkb3V0LiIsCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItdCIsCiAgICAgICAgIi0tdGFic2l6ZSIsCiAgICAgICAgZGVmYXVsdD04LAogICAgICAgIHR5cGU9aW50LAogICAgICAgIGhlbHA9IlRhYiBjaGFyYWN0ZXIgd2lkdGguICBEZWZhdWx0cyB0byA4LiIsCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItZiIsCiAgICAgICAgIi0tZm9yY2UiLAogICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBoZWxwPSJGb3JjZSBvdmVyd3JpdGUgb2Ygb3V0cHV0IGZpbGUuIiwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi1EIiwKICAgICAgICAiLS1ERUJVRyIsCiAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgICAgIGhlbHA9IkVuYWJsZSBkZWJ1Z2dpbmcgbW9kZS4iLAogICAgKQogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKICAgIERFQlVHID0gYXJncy5ERUJVRwoKICAgICMgUGFyc2UgYW5kIG5vcm1hbGl6ZSBjb2x1bW4gbnVtYmVycy4KICAgIGNvbHVtbl9pbmRzID0gW10KICAgIHByZXYgPSAtMQogICAgZm9yIGMgaW4gYXJncy5jb2x1bW5zLnNwbGl0KCIsIik6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBjb2wgPSBpbnQoYy5zdHJpcCgpKSAtIDEKICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgcHJpbnRfZXJyb3IoZiJCYWQgdmFsdWUgZm9yIGNvbHVtbiBudW1iZXIgKHtjfSkuIikKICAgICAgICBpZiBjb2wgPCAwOgogICAgICAgICAgICBwcmludF9lcnJvcigiQ29sdW1uIG51bWJlciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLiIpCiAgICAgICAgaWYgY29sIDw9IHByZXY6CiAgICAgICAgICAgIHByaW50X2Vycm9yKCJDb2x1bW4gbnVtYmVycyBtdXN0IGJlIGluIGFzY2VuZGluZyBvcmRlci4iKQogICAgICAgIHByZXYgPSBjb2wKICAgICAgICBjb2x1bW5faW5kcy5hcHBlbmQoY29sKQoKICAgIGlmIGxlbihjb2x1bW5faW5kcykgPCAxOgogICAgICAgIHByaW50X2Vycm9yKCJFbnRlciBhIGxpc3Qgb2YgMSBvciBtb3JlIGNvbHVtbiBudW1iZXJzIHNlcGFyYXRlZCBieSBjb21tYXMuIikKCiAgICAjIFRoZSBmaXJzdCBjb2x1bW4gYWx3YXlzIHN0YXJ0cyB3aXRoIDAuCiAgICBpZiBjb2x1bW5faW5kc1swXSAhPSAwOgogICAgICAgIGNvbHVtbl9pbmRzLmluc2VydCgwLCAwKQogICAgIyBUaGUgbGFzdCBjb2x1bW4gaW5kZXggaXMgYWx3YXlzIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KICAgIGlmIGNvbHVtbl9pbmRzWy0xXSAhPSAtMToKICAgICAgICBjb2x1bW5faW5kcy5hcHBlbmQoLTEpCgogICAgaWYgYXJncy50YWJzaXplIDwgMDoKICAgICAgICBwcmludF9lcnJvcigiVGFiIHNpemUgbXVzdCBiZSBhdCBsZWFzdCAwLiIpCgogICAgIyBJZiBubyBpbnB1dCBmaWxlLCB1c2Ugc3RkaW46CiAgICBpZiBub3QgYXJncy5pbnB1dDoKICAgICAgICBpbmZpbGUgPSBzeXMuc3RkaW4KICAgIGVsaWYgb3MucGF0aC5leGlzdHMoYXJncy5pbnB1dCk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBpbmZpbGUgPSBvcGVuKGFyZ3MuaW5wdXQsICJyIikKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHByaW50X2Vycm9yKCJVbmFibGUgdG8gb3BlbiBpbnB1dCBmaWxlLiIpCiAgICBlbHNlOgogICAgICAgIHByaW50X2Vycm9yKCJJbnB1dCBmaWxlIGRvZXMgbm90IGV4aXN0LiIpCgogICAgIyBJZiBubyBvdXRwdXQgZmlsZSwgdXNlIHN0ZG91dDoKICAgIGlmIG5vdCBhcmdzLm91dHB1dDoKICAgICAgICBvdXRmaWxlID0gc3lzLnN0ZG91dAogICAgZWxpZiBub3Qgb3MucGF0aC5leGlzdHMoYXJncy5vdXRwdXQpIG9yIGFyZ3MuZm9yY2U6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBvdXRmaWxlID0gb3BlbihhcmdzLm91dHB1dCwgInciKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcHJpbnRfZXJyb3IoIlVuYWJsZSB0byBvcGVuIG91dHB1dCBmaWxlLiIpCiAgICBlbHNlOgogICAgICAgIHByaW50X2Vycm9yKCJPdXRwdXQgZmlsZSBhbHJlYWR5IGV4aXN0cy4gIFVzZSAtZiB0byBmb3JjZSBvdmVyd3JpdGUuIikKCiAgICAjIENyZWF0ZSBhIGxpc3Qgb2Ygc2xpY2Ugb2JqZWN0cyB0byBhcHBseSB0byBsaW5lcyBvZiB0aGUgZmlsZS4KICAgIHNsaWNlcyA9IFtdCiAgICBmb3IgaW5kIGluIHJhbmdlKGxlbihjb2x1bW5faW5kcykgLSAxKToKICAgICAgICBzbGljZXMuYXBwZW5kKHNsaWNlKGNvbHVtbl9pbmRzW2luZF0sIGNvbHVtbl9pbmRzW2luZCArIDFdKSkKICAgIG51bV9jb2xzID0gbGVuKHNsaWNlcykgICMgTnVtYmVyIG9mIHNsaWNlcyA9PSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgdGV4dC4KICAgIG91dHB1dF9idWZmZXJzID0gWyIiXSAqIG51bV9jb2xzICAjIDEgYnVmZmVyIHBlciBjb2x1bW4uCgogICAgZm9yIGxpbmUgaW4gaW5maWxlOgogICAgICAgIGxpbmUgPSBsaW5lLmV4cGFuZHRhYnMoYXJncy50YWJzaXplKQogICAgICAgIGZvciBjb2wgaW4gcmFuZ2UobnVtX2NvbHMpOgogICAgICAgICAgICAjIENvcHkgc2xpY2Ugb2YgbGluZSB0byBhcHByb3ByaWF0ZSBidWZmZXI6CiAgICAgICAgICAgIG91dHB1dF9idWZmZXJzW2NvbF0gKz0gbGluZVtzbGljZXNbY29sXV0gKyAiXG4iCgogICAgZm9yIGJ1ZmYgaW4gb3V0cHV0X2J1ZmZlcnM6CiAgICAgICAgb3V0ZmlsZS53cml0ZShidWZmKQoKICAgIGluZmlsZS5jbG9zZSgpCiAgICBvdXRmaWxlLmNsb3NlKCkKCiAgICBleGl0KDApCjx8ZmltX3N1ZmZpeHw+CiMgIi1jIDMwLDYwIiBtZWFucyB0aGVyZSBhcmUgMyBjb2x1bW5zIGluIHRoZSB0ZXh0IGZpbGU6ICBUaGUgZmlyc3Qgc3RhcnRzIGF0CiMgcG9zaXRpb24gMSwgdGhlIHNlY29uZCBzdGFydHMgYXQgcG9zaXRpb24gMzAsIGFuZCB0aGUgdGhpcmQgc3RhcnRzIGF0CiMgcG9zaXRpb24gNjAuICB1bmNvbHVtbi5weSB3aWxsIHJldHVybiB0aGUgZmlyc3QgY29sdW1uIGZvbGxvd2VkIGJ5IHRoZSBzZWNvbmQKIyBmb2xsb3dlZCBieSB0aGUgdGhpcmQuCjx8ZmltX2VuZHw+"]
["99c5b6b796138fb4801a09db60048d25895b04e9-3","99c5b6b796138fb4801a09db60048d25895b04e9","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgojICogQ29weXJpZ2h0IDIwMTkgUGV0ZSBEaU1hcmNvCiMgKgojICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIyAqCiMgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMgKgojICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiMKIyBOYW1lOiB1bmNvbHVtbi5weQojIFZlcnNpb246IDAuMQojIERhdGU6IDIwMTktMDktMjIKIyBXcml0dGVuIGJ5OiBQZXRlIERpTWFyY28gPHBldGUuZGltYXJjby5zb2Z0d2FyZUBnbWFpbC5jb20+CiMKIyBEZXNjcmlwdGlvbjoKIyBUaGlzIHByb2dyYW0gd2lsbCBwYXJzZSBhIHRleHQgZmlsZSB0aGF0IGNvbnRhaW5zIG11bHRpcGxlIGNvbHVtbnMgb2YgdGV4dAojIGFuZCByZXR1cm4gYSBmaWxlIG9mIHRleHQgd2l0aCB0aG9zZSBjb2x1bW5zIGluIG9yZGVyLiAgRS5nLjoKIyAgICAgdW5jb2x1bW4ucHkgLWMgMzAsNjAgLWkgdGVzdGZpbGUKIyAiLWMgMzAsNjAiIG1lYW5zIHRoZXJlIGFyZSAzIGNvbHVtbnMgaW4gdGhlIHRleHQgZmlsZTogIFRoZSBmaXJzdCBzdGFydHMgYXQKIyBwb3NpdGlvbiAxLCB0aGUgc2Vjb25kIHN0YXJ0cyBhdCBwb3NpdGlvbiAzMCwgYW5kIHRoZSB0aGlyZCBzdGFydHMgYXQKIyBwb3NpdGlvbiA2MC4gIHVuY29sdW1uLnB5IHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBjb2x1bW4gZm9sbG93ZWQgYnkgdGhlIHNlY29uZAojIGZvbGxvd2VkIGJ5IHRoZSB0aGlyZC4KIwojIERlcGVuZGVuY2llczoKIyBQeXRob24gMy54CgppbXBvcnQgb3MKaW1wb3J0IHN5cwppbXBvcnQgYXJncGFyc2UKCiMgRGVmYXVsdHM6CnByb2dyYW1fbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCmVwaWxvZyA9IGYiIiIKVGhpcyBwcm9ncmFtIHdpbGwgcGFyc2UgYSB0ZXh0IGZpbGUgdGhhdCBjb250YWlucyBtdWx0aXBsZSBjb2x1bW5zIG9mIHRleHQKYW5kIHJldHVybiBhIGZpbGUgb2YgdGV4dCB3aXRoIHRob3NlIGNvbHVtbnMgaW4gcHJvcGVyIHNlcXVlbnRpYWwgb3JkZXIuCgpFeGFtcGxlIChpbiBWaW0pOgogICAgIDo4LDE5ICEge3Byb2dyYW1fbmFtZX0gLWMgMzAsNjAKd2lsbCB0YWtlIGxpbmVzIDggdGhyb3VnaCAxOSBhbmQgcGFzcyB0aGVtIHRvIHtwcm9ncmFtX25hbWV9LiAgIi1jIDMwLDYwIiBtZWFucwp0aGVyZSBhcmUgMyBjb2x1bW5zIGluIHRoZSB0ZXh0IGZpbGU6ICBUaGUgZmlyc3Qgc3RhcnRzIGF0IHBvc2l0aW9uIDEsIHRoZQpzZWNvbmQgc3RhcnRzIGF0IHBvc2l0aW9uIDMwLCBhbmQgdGhlIHRoaXJkIHN0YXJ0cyBhdCBwb3NpdGlvbiA2MC4KdW5jb2x1bW4ucHkgd2lsbCByZXR1cm4gdGhlIGZpcnN0IGNvbHVtbiBmb2xsb3dlZCBieSB0aGUgc2Vjb25kIGZvbGxvd2VkIGJ5CnRoZSB0aGlyZC4KIiIiCgoKZGVmIHByaW50X2Vycm9yKG1zZzogc3RyLCBvdXRmaWxlPXN5cy5zdGRlcnIsIHJhdzogYm9vbCA9IEZhbHNlLCBlcnJvcjogaW50ID0gMSk6CiAgICAiIiIKICAgIFByaW50IGFuIGVycm9yIG1lc3NhZ2UgYW5kIGV4aXQuCiAgICAiIiIKICAgIGlmIG5vdCByYXc6CiAgICAgICAgbXNnID0gIkVSUk9SOiAiICsgbXNnICsgIlxuIgogICAgb3V0ZmlsZS53cml0ZShtc2cpCiAgICBleGl0KGVycm9yKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAjIFBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHM6CiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyLAogICAgICAgIGRlc2NyaXB0aW9uPSJUYWtlcyBhIHN0cmVhbSBjb250YWluaW5nIGNvbHVtbnMgb2YgdGV4dCBhbmQgcmV0dXJucyBhIHNpbmdsZSBjb2x1bW4uIiwKICAgICAgICBlcGlsb2c9ZXBpbG9nLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLWMiLAogICAgICAgICItLWNvbHVtbnMiLAogICAgICAgIHR5cGU9c3RyLAogICAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgICAgaGVscD0iU3RhcnQgcG9zaXRpb24gb2YgdGV4dCBjb2x1bW5zIHNlcGFyYXRlZCBieSBjb21tYXMuICBDb3VudHMgZnJvbSAxLiIsCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItaSIsCiAgICAgICAgIi0taW5wdXQiLAogICAgICAgIGRlZmF1bHQ9IiIsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgbmFyZ3M9Ij8iLAogICAgICAgIGhlbHA9IklucHV0IGZpbGUuICBEZWZhdWx0cyB0byBzdGRpbi4iLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLW8iLAogICAgICAgICItLW91dHB1dCIsCiAgICAgICAgZGVmYXVsdD0iIiwKICAgICAgICB0eXBlPXN0ciwKICAgICAgICBuYXJncz0iPyIsCiAgICAgICAgaGVscD0iT3V0cHV0IGZpbGUuICBEZWZhdWx0cyB0byBzdGRvdXQuIiwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi10IiwKICAgICAgICAiLS10YWJzaXplIiwKICAgICAgICBkZWZhdWx0PTgsCiAgICAgICAgdHlwZT1pbnQsCiAgICAgICAgaGVscD0iVGFiIGNoYXJhY3RlciB3aWR0aC4gIERlZmF1bHRzIHRvIDguIiwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi1mIiwKICAgICAgICAiLS1mb3JjZSIsCiAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgaGVscD0iRm9yY2Ugb3ZlcndyaXRlIG9mIG91dHB1dCBmaWxlLiIsCjx8ZmltX2VuZHw+"]
["99c5b6b796138fb4801a09db60048d25895b04e9-4","99c5b6b796138fb4801a09db60048d25895b04e9","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgojICogQ29weXJpZ2h0IDIwMTkgUGV0ZSBEaU1hcmNvCiMgKgojICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIyAqCiMgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMgKgojICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiMKIyBOYW1lOiB1bmNvbHVtbi5weQojIFZlcnNpb246IDAuMQojIERhdGU6IDIwMTktMDktMjIKIyBXcml0dGVuIGJ5OiBQZXRlIERpTWFyY28gPHBldGUuZGltYXJjby5zb2Z0d2FyZUBnbWFpbC5jb20+CiMKIyBEZXNjcmlwdGlvbjoKIyBUaGlzIHByb2dyYW0gd2lsbCBwYXJzZSBhIHRleHQgZmlsZSB0aGF0IGNvbnRhaW5zIG11bHRpcGxlIGNvbHVtbnMgb2YgdGV4dAojIGFuZCByZXR1cm4gYSBmaWxlIG9mIHRleHQgd2l0aCB0aG9zZSBjb2x1bW5zIGluIG9yZGVyLiAgRS5nLjoKIyAgICAgdW5jb2x1bW4ucHkgLWMgMzAsNjAgLWkgdGVzdGZpbGUKIyAiLWMgMzAsNjAiIG1lYW5zIHRoZXJlIGFyZSAzIGNvbHVtbnMgaW4gdGhlIHRleHQgZmlsZTogIFRoZSBmaXJzdCBzdGFydHMgYXQKIyBwb3NpdGlvbiAxLCB0aGUgc2Vjb25kIHN0YXJ0cyBhdCBwb3NpdGlvbiAzMCwgYW5kIHRoZSB0aGlyZCBzdGFydHMgYXQKIyBwb3NpdGlvbiA2MC4gIHVuY29sdW1uLnB5IHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBjb2x1bW4gZm9sbG93ZWQgYnkgdGhlIHNlY29uZAojIGZvbGxvd2VkIGJ5IHRoZSB0aGlyZC4KIwojIERlcGVuZGVuY2llczoKIyBQeXRob24gMy54CgppbXBvcnQgb3MKaW1wb3J0IHN5cwppbXBvcnQgYXJncGFyc2UKCiMgRGVmYXVsdHM6CnByb2dyYW1fbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCmVwaWxvZyA9IGYiIiIKVGhpcyBwcm9ncmFtIHdpbGwgcGFyc2UgYSB0ZXh0IGZpbGUgdGhhdCBjb250YWlucyBtdWx0aXBsZSBjb2x1bW5zIG9mIHRleHQKYW5kIHJldHVybiBhIGZpbGUgb2YgdGV4dCB3aXRoIHRob3NlIGNvbHVtbnMgaW4gcHJvcGVyIHNlcXVlbnRpYWwgb3JkZXIuCgpFeGFtcGxlIChpbiBWaW0pOgogICAgIDo4LDE5ICEge3Byb2dyYW1fbmFtZX0gLWMgMzAsNjAKd2lsbCB0YWtlIGxpbmVzIDggdGhyb3VnaCAxOSBhbmQgcGFzcyB0aGVtIHRvIHtwcm9ncmFtX25hbWV9LiAgIi1jIDMwLDYwIiBtZWFucwp0aGVyZSBhcmUgMyBjb2x1bW5zIGluIHRoZSB0ZXh0IGZpbGU6ICBUaGUgZmlyc3Qgc3RhcnRzIGF0IHBvc2l0aW9uIDEsIHRoZQpzZWNvbmQgc3RhcnRzIGF0IHBvc2l0aW9uIDMwLCBhbmQgdGhlIHRoaXJkIHN0YXJ0cyBhdCBwb3NpdGlvbiA2MC4KdW5jb2x1bW4ucHkgd2lsbCByZXR1cm4gdGhlIGZpcnN0IGNvbHVtbiBmb2xsb3dlZCBieSB0aGUgc2Vjb25kIGZvbGxvd2VkIGJ5CnRoZSB0aGlyZC4KIiIiCgoKZGVmIHByaW50X2Vycm9yKG1zZzogc3RyLCBvdXRmaWxlPXN5cy5zdGRlcnIsIHJhdzogYm9vbCA9IEZhbHNlLCBlcnJvcjogaW50ID0gMSk6CiAgICAiIiIKICAgIFByaW50IGFuIGVycm9yIG1lc3NhZ2UgYW5kIGV4aXQuCiAgICAiIiIKICAgIGlmIG5vdCByYXc6CiAgICAgICAgbXNnID0gIkVSUk9SOiAiICsgbXNnICsgIlxuIgogICAgb3V0ZmlsZS53cml0ZShtc2cpCiAgICBleGl0KGVycm9yKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAjIFBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHM6CiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyLAogICAgICAgIGRlc2NyaXB0aW9uPSJUYWtlcyBhIHN0cmVhbSBjb250YWluaW5nIGNvbHVtbnMgb2YgdGV4dCBhbmQgcmV0dXJucyBhIHNpbmdsZSBjb2x1bW4uIiwKICAgICAgICBlcGlsb2c9ZXBpbG9nLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLWMiLAogICAgICAgICItLWNvbHVtbnMiLAogICAgICAgIHR5cGU9c3RyLAogICAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgICAgaGVscD0iU3RhcnQgcG9zaXRpb24gb2YgdGV4dCBjb2x1bW5zIHNlcGFyYXRlZCBieSBjb21tYXMuICBDb3VudHMgZnJvbSAxLiIsCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItaSIsCiAgICAgICAgIi0taW5wdXQiLAogICAgICAgIGRlZmF1bHQ9IiIsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgbmFyZ3M9Ij8iLAogICAgICAgIGhlbHA9IklucHV0IGZpbGUuICBEZWZhdWx0cyB0byBzdGRpbi4iLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLW8iLAogICAgICAgICItLW91dHB1dCIsCiAgICAgICAgZGVmYXVsdD0iIiwKICAgICAgICB0eXBlPXN0ciwKICAgICAgICBuYXJncz0iPyIsCiAgICAgICAgaGVscD0iT3V0cHV0IGZpbGUuICBEZWZhdWx0cyB0byBzdGRvdXQuIiwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi10IiwKICAgICAgICAiLS10YWJzaXplIiwKICAgICAgICBkZWZhdWx0PTgsCiAgICAgICAgdHlwZT1pbnQsCiAgICAgICAgaGVscD0iVGFiIGNoYXJhY3RlciB3aWR0aC4gIERlZmF1bHRzIHRvIDguIiwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi1mIiwKICAgICAgICAiLS1mb3JjZSIsCiAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgICAgIGhlbHA9IkZvcmNlIG92ZXJ3cml0ZSBvZiBvdXRwdXQgZmlsZS4iLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLUQiLAogICAgICAgICItLURFQlVHIiwKICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAogICAgICAgIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgaGVscD0iRW5hYmxlIGRlYnVnZ2luZyBtb2RlLiIsCiAgICApCiAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogICAgREVCVUcgPSBhcmdzLkRFQlVHCgogICAgIyBQYXJzZSBhbmQgbm9ybWFsaXplIGNvbHVtbiBudW1iZXJzLgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgY29sID0gaW50KGMuc3RyaXAoKSkgLSAxCiAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgIHByaW50X2Vycm9yKGYiQmFkIHZhbHVlIGZvciBjb2x1bW4gbnVtYmVyICh7Y30pLiIpCiAgICAgICAgaWYgY29sIDwgMDoKICAgICAgICAgICAgcHJpbnRfZXJyb3IoIkNvbHVtbiBudW1iZXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4iKQogICAgICAgIGlmIGNvbCA8PSBwcmV2OgogICAgICAgICAgICBwcmludF9lcnJvcigiQ29sdW1uIG51bWJlcnMgbXVzdCBiZSBpbiBhc2NlbmRpbmcgb3JkZXIuIikKICAgICAgICBwcmV2ID0gY29sCiAgICAgICAgY29sdW1uX2luZHMuYXBwZW5kKGNvbCkKCiAgICBpZiBsZW4oY29sdW1uX2luZHMpIDwgMToKICAgICAgICBwcmludF9lcnJvcigiRW50ZXIgYSBsaXN0IG9mIDEgb3IgbW9yZSBjb2x1bW4gbnVtYmVycyBzZXBhcmF0ZWQgYnkgY29tbWFzLiIpCgogICAgIyBUaGUgZmlyc3QgY29sdW1uIGFsd2F5cyBzdGFydHMgd2l0aCAwLgogICAgaWYgY29sdW1uX2luZHNbMF0gIT0gMDoKICAgICAgICBjb2x1bW5faW5kcy5pbnNlcnQoMCwgMCkKICAgICMgVGhlIGxhc3QgY29sdW1uIGluZGV4IGlzIGFsd2F5cyB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCiAgICBpZiBjb2x1bW5faW5kc1stMV0gIT0gLTE6CiAgICAgICAgY29sdW1uX2luZHMuYXBwZW5kKC0xKQoKICAgIGlmIGFyZ3MudGFic2l6ZSA8IDA6CiAgICAgICAgcHJpbnRfZXJyb3IoIlRhYiBzaXplIG11c3QgYmUgYXQgbGVhc3QgMC4iKQoKICAgICMgSWYgbm8gaW5wdXQgZmlsZSwgdXNlIHN0ZGluOgogICAgaWYgbm90IGFyZ3MuaW5wdXQ6CiAgICAgICAgaW5maWxlID0gc3lzLnN0ZGluCiAgICBlbGlmIG9zLnBhdGguZXhpc3RzKGFyZ3MuaW5wdXQpOgogICAgICAgIHRyeToKICAgICAgICAgICAgaW5maWxlID0gb3BlbihhcmdzLmlucHV0LCAiciIpCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICBwcmludF9lcnJvcigiVW5hYmxlIHRvIG9wZW4gaW5wdXQgZmlsZS4iKQogICAgZWxzZToKICAgICAgICBwcmludF9lcnJvcigiSW5wdXQgZmlsZSBkb2VzIG5vdCBleGlzdC4iKQoKICAgICMgSWYgbm8gb3V0cHV0IGZpbGUsIHVzZSBzdGRvdXQ6CiAgICBpZiBub3QgYXJncy5vdXRwdXQ6CiAgICAgICAgb3V0ZmlsZSA9IHN5cy5zdGRvdXQKICAgIGVsaWYgbm90IG9zLnBhdGguZXhpc3RzKGFyZ3Mub3V0cHV0KSBvciBhcmdzLmZvcmNlOgogICAgICAgIHRyeToKICAgICAgICAgICAgb3V0ZmlsZSA9IG9wZW4oYXJncy5vdXRwdXQsICJ3IikKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHByaW50X2Vycm9yKCJVbmFibGUgdG8gb3BlbiBvdXRwdXQgZmlsZS4iKQogICAgZWxzZToKICAgICAgICBwcmludF9lcnJvcigiT3V0cHV0IGZpbGUgYWxyZWFkeSBleGlzdHMuICBVc2UgLWYgdG8gZm9yY2Ugb3ZlcndyaXRlLiIpCgogICAgIyBDcmVhdGUgYSBsaXN0IG9mIHNsaWNlIG9iamVjdHMgdG8gYXBwbHkgdG8gbGluZXMgb2YgdGhlIGZpbGUuCiAgICBzbGljZXMgPSBbXQogICAgZm9yIGluZCBpbiByYW5nZShsZW4oY29sdW1uX2luZHMpIC0gMSk6CiAgICAgICAgc2xpY2VzLmFwcGVuZChzbGljZShjb2x1bW5faW5kc1tpbmRdLCBjb2x1bW5faW5kc1tpbmQgKyAxXSkpCiAgICBudW1fY29scyA9IGxlbihzbGljZXMpICAjIE51bWJlciBvZiBzbGljZXMgPT0gbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIHRleHQuCiAgICBvdXRwdXRfYnVmZmVycyA9IFsiIl0gKiBudW1fY29scyAgIyAxIGJ1ZmZlciBwZXIgY29sdW1uLgoKICAgIGZvciBsaW5lIGluIGluZmlsZToKICAgICAgICBsaW5lID0gbGluZS5leHBhbmR0YWJzKGFyZ3MudGFic2l6ZSkKICAgICAgICBmb3IgY29sIGluIHJhbmdlKG51bV9jb2xzKToKICAgICAgICAgICAgIyBDb3B5IHNsaWNlIG9mIGxpbmUgdG8gYXBwcm9wcmlhdGUgYnVmZmVyOgogICAgICAgICAgICBvdXRwdXRfYnVmZmVyc1tjb2xdICs9IGxpbmVbc2xpY2VzW2NvbF1dICsgIlxuIgoKICAgIGZvciBidWZmIGluIG91dHB1dF9idWZmZXJzOgogICAgICAgIG91dGZpbGUud3JpdGUoYnVmZikKCiAgICBpbmZpbGUuY2xvc2UoKQogICAgb3V0ZmlsZS5jbG9zZSgpCgogICAgZXhpdCgwKQo8fGZpbV9zdWZmaXh8PgogICAgY29sdW1uX2luZHMgPSBbXQogICAgcHJldiA9IC0xCiAgICBmb3IgYyBpbiBhcmdzLmNvbHVtbnMuc3BsaXQoIiwiKToKICAgICAgICB0cnk6Cjx8ZmltX2VuZHw+"]
["99c5b6b796138fb4801a09db60048d25895b04e9-5","99c5b6b796138fb4801a09db60048d25895b04e9","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgojICogQ29weXJpZ2h0IDIwMTkgUGV0ZSBEaU1hcmNvCiMgKgojICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIyAqCiMgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMgKgojICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiMKIyBOYW1lOiB1bmNvbHVtbi5weQojIFZlcnNpb246IDAuMQojIERhdGU6IDIwMTktMDktMjIKIyBXcml0dGVuIGJ5OiBQZXRlIERpTWFyY28gPHBldGUuZGltYXJjby5zb2Z0d2FyZUBnbWFpbC5jb20+CiMKIyBEZXNjcmlwdGlvbjoKIyBUaGlzIHByb2dyYW0gd2lsbCBwYXJzZSBhIHRleHQgZmlsZSB0aGF0IGNvbnRhaW5zIG11bHRpcGxlIGNvbHVtbnMgb2YgdGV4dAojIGFuZCByZXR1cm4gYSBmaWxlIG9mIHRleHQgd2l0aCB0aG9zZSBjb2x1bW5zIGluIG9yZGVyLiAgRS5nLjoKIyAgICAgdW5jb2x1bW4ucHkgLWMgMzAsNjAgLWkgdGVzdGZpbGUKIyAiLWMgMzAsNjAiIG1lYW5zIHRoZXJlIGFyZSAzIGNvbHVtbnMgaW4gdGhlIHRleHQgZmlsZTogIFRoZSBmaXJzdCBzdGFydHMgYXQKIyBwb3NpdGlvbiAxLCB0aGUgc2Vjb25kIHN0YXJ0cyBhdCBwb3NpdGlvbiAzMCwgYW5kIHRoZSB0aGlyZCBzdGFydHMgYXQKIyBwb3NpdGlvbiA2MC4gIHVuY29sdW1uLnB5IHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBjb2x1bW4gZm9sbG93ZWQgYnkgdGhlIHNlY29uZAojIGZvbGxvd2VkIGJ5IHRoZSB0aGlyZC4KIwojIERlcGVuZGVuY2llczoKIyBQeXRob24gMy54CgppbXBvcnQgb3MKaW1wb3J0IHN5cwppbXBvcnQgYXJncGFyc2UKCiMgRGVmYXVsdHM6CnByb2dyYW1fbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCmVwaWxvZyA9IGYiIiIKVGhpcyBwcm9ncmFtIHdpbGwgcGFyc2UgYSB0ZXh0IGZpbGUgdGhhdCBjb250YWlucyBtdWx0aXBsZSBjb2x1bW5zIG9mIHRleHQKYW5kIHJldHVybiBhIGZpbGUgb2YgdGV4dCB3aXRoIHRob3NlIGNvbHVtbnMgaW4gcHJvcGVyIHNlcXVlbnRpYWwgb3JkZXIuCgpFeGFtcGxlIChpbiBWaW0pOgogICAgIDo4LDE5ICEge3Byb2dyYW1fbmFtZX0gLWMgMzAsNjAKd2lsbCB0YWtlIGxpbmVzIDggdGhyb3VnaCAxOSBhbmQgcGFzcyB0aGVtIHRvIHtwcm9ncmFtX25hbWV9LiAgIi1jIDMwLDYwIiBtZWFucwp0aGVyZSBhcmUgMyBjb2x1bW5zIGluIHRoZSB0ZXh0IGZpbGU6ICBUaGUgZmlyc3Qgc3RhcnRzIGF0IHBvc2l0aW9uIDEsIHRoZQpzZWNvbmQgc3RhcnRzIGF0IHBvc2l0aW9uIDMwLCBhbmQgdGhlIHRoaXJkIHN0YXJ0cyBhdCBwb3NpdGlvbiA2MC4KdW5jb2x1bW4ucHkgd2lsbCByZXR1cm4gdGhlIGZpcnN0IGNvbHVtbiBmb2xsb3dlZCBieSB0aGUgc2Vjb25kIGZvbGxvd2VkIGJ5CnRoZSB0aGlyZC4KIiIiCgoKZGVmIHByaW50X2Vycm9yKG1zZzogc3RyLCBvdXRmaWxlPXN5cy5zdGRlcnIsIHJhdzogYm9vbCA9IEZhbHNlLCBlcnJvcjogaW50ID0gMSk6CiAgICAiIiIKICAgIFByaW50IGFuIGVycm9yIG1lc3NhZ2UgYW5kIGV4aXQuCiAgICAiIiIKICAgIGlmIG5vdCByYXc6CiAgICAgICAgbXNnID0gIkVSUk9SOiAiICsgbXNnICsgIlxuIgogICAgb3V0ZmlsZS53cml0ZShtc2cpCiAgICBleGl0KGVycm9yKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAjIFBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHM6CiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyLAogICAgICAgIGRlc2NyaXB0aW9uPSJUYWtlcyBhIHN0cmVhbSBjb250YWluaW5nIGNvbHVtbnMgb2YgdGV4dCBhbmQgcmV0dXJucyBhIHNpbmdsZSBjb2x1bW4uIiwKICAgICAgICBlcGlsb2c9ZXBpbG9nLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLWMiLAogICAgICAgICItLWNvbHVtbnMiLAogICAgICAgIHR5cGU9c3RyLAogICAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgICAgaGVscD0iU3RhcnQgcG9zaXRpb24gb2YgdGV4dCBjb2x1bW5zIHNlcGFyYXRlZCBieSBjb21tYXMuICBDb3VudHMgZnJvbSAxLiIsCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItaSIsCiAgICAgICAgIi0taW5wdXQiLAogICAgICAgIGRlZmF1bHQ9IiIsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgbmFyZ3M9Ij8iLAogICAgICAgIGhlbHA9IklucHV0IGZpbGUuICBEZWZhdWx0cyB0byBzdGRpbi4iLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLW8iLAogICAgICAgICItLW91dHB1dCIsCiAgICAgICAgZGVmYXVsdD0iIiwKICAgICAgICB0eXBlPXN0ciwKICAgICAgICBuYXJncz0iPyIsCiAgICAgICAgaGVscD0iT3V0cHV0IGZpbGUuICBEZWZhdWx0cyB0byBzdGRvdXQuIiwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi10IiwKICAgICAgICAiLS10YWJzaXplIiwKICAgICAgICBkZWZhdWx0PTgsCiAgICAgICAgdHlwZT1pbnQsCiAgICAgICAgaGVscD0iVGFiIGNoYXJhY3RlciB3aWR0aC4gIERlZmF1bHRzIHRvIDguIiwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi1mIiwKICAgICAgICAiLS1mb3JjZSIsCiAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgICAgIGhlbHA9IkZvcmNlIG92ZXJ3cml0ZSBvZiBvdXRwdXQgZmlsZS4iLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLUQiLAogICAgICAgICItLURFQlVHIiwKICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAogICAgICAgIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgaGVscD0iRW5hYmxlIGRlYnVnZ2luZyBtb2RlLiIsCiAgICApCiAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogICAgREVCVUcgPSBhcmdzLkRFQlVHCgogICAgIyBQYXJzZSBhbmQgbm9ybWFsaXplIGNvbHVtbiBudW1iZXJzLgogICAgY29sdW1uX2luZHMgPSBbXQogICAgcHJldiA9IC0xCiAgICBmb3IgYyBpbiBhcmdzLmNvbHVtbnMuc3BsaXQoIiwiKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHRyeToKICAgICAgICAgICAgY29sID0gaW50KGMuc3RyaXAoKSkgLSAxCiAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgIHByaW50X2Vycm9yKGYiQmFkIHZhbHVlIGZvciBjb2x1bW4gbnVtYmVyICh7Y30pLiIpCjx8ZmltX2VuZHw+"]
["00bdee9049605c8f4ea0bf8a1e4f3cb02d830775-1","00bdee9049605c8f4ea0bf8a1e4f3cb02d830775","PHxmaW1fcHJlZml4fD4KZnJvbSByYW5kb20gaW1wb3J0IHJhbmRpbnQKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZQppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCB0aW1lCmltcG9ydCB3eAoKY2xhc3MgVGltZXJQYW5lbCh3eC5QYW5lbCk6CiAgICAiIiIKICAgIFRpbWVyCgogICAgQ3JlYXRlcyB0cmFuc2l0aW9uYWwgc2NyZWVuIGJldHdlZW4gTWFpblBhbmVsIGFuZCBQbGF5UGFuZWwKICAgIHdpdGggY291bnRlci4KCiAgICB0aW1lcl9tZXRob2QgLSByZXNwb25zaWJsZSBmb3IgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBjb3VudGVyCgogICAgdGltZXJfb24gLSBzdGFydHMgY291bnRlcgoKICAgIHRpbWVyX29mZiAtIHN0b3BzIGNvdW50ZXIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50KToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKHBhcmVudD1wYXJlbnQpCiAgICAgICAgc2VsZi5wYXJlbnQgPSBwYXJlbnQKPHxmaW1fZW5kfD4="]
["00bdee9049605c8f4ea0bf8a1e4f3cb02d830775-2","00bdee9049605c8f4ea0bf8a1e4f3cb02d830775","PHxmaW1fcHJlZml4fD4KZnJvbSByYW5kb20gaW1wb3J0IHJhbmRpbnQKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZQppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCB0aW1lCmltcG9ydCB3eAoKY2xhc3MgVGltZXJQYW5lbCh3eC5QYW5lbCk6CiAgICAiIiIKICAgIFRpbWVyCgogICAgQ3JlYXRlcyB0cmFuc2l0aW9uYWwgc2NyZWVuIGJldHdlZW4gTWFpblBhbmVsIGFuZCBQbGF5UGFuZWwKICAgIHdpdGggY291bnRlci4KCiAgICB0aW1lcl9tZXRob2QgLSByZXNwb25zaWJsZSBmb3IgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBjb3VudGVyCgogICAgdGltZXJfb24gLSBzdGFydHMgY291bnRlcgoKICAgIHRpbWVyX29mZiAtIHN0b3BzIGNvdW50ZXIKICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhwYXJlbnQ9cGFyZW50KQogICAgICAgIHNlbGYucGFyZW50ID0gcGFyZW50CiAgICAgICAgc2VsZi5TZXRPd25CYWNrZ3JvdW5kQ29sb3VyKHd4LkNvbG91cig2MCwgNjAsIDYwLCAwKSkKICAgICAgICBzZWxmLnNpemVyX3ZlcnRpY2FsID0gd3guQm94U2l6ZXIod3guVkVSVElDQUwpCgogICAgICAgIHNlbGYudGltZV9yZW1haW5pbmcgPSAzCiAgICAgICAgc2VsZi50aW1lciA9IHd4LlRpbWVyKHNlbGYpCiAgICAgICAgc2VsZi5CaW5kKHd4LkVWVF9USU1FUiwgc2VsZi50aW1lcl9tZXRob2QsIHNlbGYudGltZXIpCgogICAgICAgIHNlbGYuc2l6ZXJfdmVydGljYWwuQWRkU3BhY2VyKDQwKQoKICAgICAgICBmb250ID0gd3guRm9udCgpCgogICAgICAgIGZvbnQuU2V0UG9pbnRTaXplKDMwKQogICAgICAgIHNlbGYuaW5mb190ZXh0ID0gd3guU3RhdGljVGV4dChzZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD0iUHJlcGFyZSBmb3IgdHlwaW5nISIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXd4LkFMSUdOX0NFTlRFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT0od3guU2l6ZS5HZXRXaWR0aChzZWxmLnBhcmVudC5TaXplKSwgMTAwKSkKICAgICAgICBzZWxmLmluZm9fdGV4dC5TZXRGb250KGZvbnQpCiAgICAgICAgc2VsZi5zaXplcl92ZXJ0aWNhbC5BZGQoc2VsZi5pbmZvX3RleHQsIDAsIHd4LkNFTlRFUiwgMCkKCiAgICAgICAgZm9udC5TZXRQb2ludFNpemUoMTAwKQogICAgICAgIHNlbGYuY291bnRlcl90ZXh0ID0gd3guU3RhdGljVGV4dChzZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT13eC5BTElHTl9DRU5URVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9KHd4LlNpemUuR2V0V2lkdGgoc2VsZi5wYXJlbnQuU2l6ZSksIDEwMCkpCiAgICAgICAgc2VsZi5jb3VudGVyX3RleHQuU2V0Rm9udChmb250KQogICAgICAgIHNlbGYuc2l6ZXJfdmVydGljYWwuQWRkKHNlbGYuY291bnRlcl90ZXh0LCAwLCB3eC5DRU5URVIsIDApCgogICAgICAgIHNlbGYuU2V0U2l6ZXIoc2VsZi5zaXplcl92ZXJ0aWNhbCkKICAgICAgICBzZWxmLkxheW91dCgpCgogICAgICAgIGlmIHNlbGYudGltZV9yZW1haW5pbmcgPD0gMDoKICAgICAgICAgICAgc2VsZi50aW1lcl9vZmYoKQoKICAgIGRlZiB0aW1lcl9tZXRob2Qoc2VsZiwgZXZlbnQpOgogICAgICAgIGlmIHNlbGYudGltZV9yZW1haW5pbmcgPCAwOgogICAgICAgICAgICBzZWxmLnRpbWVfcmVtYWluaW5nID0gMwogICAgICAgICAgICBzZWxmLnRpbWVyX29mZigpCiAgICAgICAgICAgIHNlbGYucGFyZW50LnN3aXRjaF9wYW5lbChzZWxmLCBzZWxmLnBhcmVudC5wbGF5X3BhbmVsKQogICAgICAgICAgICBzZWxmLnBhcmVudC5wbGF5X3BhbmVsLmdhbWUoKQogICAgICAgICAgICBzZWxmLmNvdW50ZXJfdGV4dC5TZXRMYWJlbChsYWJlbD1zdHIoc2VsZi50aW1lX3JlbWFpbmluZykpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgY291bnRlcl90ZXh0ID0gc3RyKHNlbGYudGltZV9yZW1haW5pbmcpCiAgICAgICAgICAgIHNlbGYuY291bnRlcl90ZXh0LlNldExhYmVsKGxhYmVsPWNvdW50ZXJfdGV4dCkKICAgICAgICAgICAgc2VsZi50aW1lX3JlbWFpbmluZyAtPSAxCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBkZWYgdGltZXJfb24oc2VsZik6CiAgICAgICAgc2VsZi50aW1lci5TdGFydCgxMDAwKQoKPHxmaW1fZW5kfD4="]
["414b3d5756ffdcb978f350ce2e4c925b635551cf-1","414b3d5756ffdcb978f350ce2e4c925b635551cf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgY3N2Cgpmcm9tIEZpeGVkV2lkdGhUZXh0UGFyc2VyLlNlaXNtaWMuU3BzUGFyc2VyIGltcG9ydCBTcHNQYXJzZXIsIFJlbGF0aW9uLCBQb2ludApmcm9tIFNlaXNtaWNGb2xkLkdyaWQgaW1wb3J0IEdyaWQKZnJvbSBTZWlzbWljRm9sZC5oZWxwZXJzIGltcG9ydCBjcmVhdGVfcG9pbnRfYnlfZWFzdGluZ19ub3J0aGluZwoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgRm9sZDoKICAgIGRlZiBfX2luaXRfXygKICAgICAgICAgICAgc2VsZiwKPHxmaW1fZW5kfD4="]
["414b3d5756ffdcb978f350ce2e4c925b635551cf-2","414b3d5756ffdcb978f350ce2e4c925b635551cf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgY3N2Cgpmcm9tIEZpeGVkV2lkdGhUZXh0UGFyc2VyLlNlaXNtaWMuU3BzUGFyc2VyIGltcG9ydCBTcHNQYXJzZXIsIFJlbGF0aW9uLCBQb2ludApmcm9tIFNlaXNtaWNGb2xkLkdyaWQgaW1wb3J0IEdyaWQKZnJvbSBTZWlzbWljRm9sZC5oZWxwZXJzIGltcG9ydCBjcmVhdGVfcG9pbnRfYnlfZWFzdGluZ19ub3J0aGluZwoKCmNsYXNzIEZvbGQ6CiAgICBkZWYgX19pbml0X18oCiAgICAgICAgICAgIHNlbGYsCiAgICAgICAgICAgIGdyaWQ6IEdyaWQsCiAgICAgICAgICAgIHBhcnNlcjogU3BzUGFyc2VyLAogICAgICAgICAgICBzcHNfZmlsZTogc3RyLAogICAgICAgICAgICBycHNfZmlsZTogc3RyLAogICAgICAgICAgICB4cHNfZmlsZTogc3RyLAogICAgICAgICAgICB2ZXJib3NlPUZhbHNlLAogICAgICAgICAgICBldmVyeT0xMDAwMAogICAgKToKICAgICAgICBzZWxmLl9fcGFyc2VyID0gcGFyc2VyCiAgICAgICAgc2VsZi5fX2dyaWQgPSBncmlkCiAgICAgICAgc2VsZi5fX3Nwc19maWxlID0gc3BzX2ZpbGUKICAgICAgICBzZWxmLl9fcnBzX2ZpbGUgPSBycHNfZmlsZQogICAgICAgIHNlbGYuX194cHNfZmlsZSA9IHhwc19maWxlCgogICAgICAgIHNlbGYuX19zcHM6IGRpY3QgPSB7fSAgIyBrZXkgaXMgY29tYmluZWQgbGluZSBwb2ludCBpbmRleCwgdmFsdWUgaXMgUG9pbnQgb2JqZWN0CiAgICAgICAgc2VsZi5fX3JwczogZGljdCA9IHt9ICAjIGtleSBpcyBsaW5lLCB2YWx1ZSBpcyBMaXN0IG9mIFBvaW50IG9iamVjdHMKCjx8ZmltX2hvbGV8PgogICAgICAgIHNlbGYuX192ZXJib3NlID0gdmVyYm9zZQogICAgICAgIHNlbGYuX19ldmVyeSA9IGV2ZXJ5CgogICAgZGVmIGdldF9zcHMoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX19zcHMKCiAgICBkZWYgZ2V0X3JwcyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5fX3JwcwoKICAgIGRlZiBfX2xvYWRfcG9pbnRzKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICBwb2ludHMgPSBbXQogICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSkgYXMgc3BzOgogICAgICAgICAgICBsaW5lID0gc3BzLnJlYWRsaW5lKCkKICAgICAgICAgICAgd2hpbGUgbGluZToKICAgICAgICAgICAgICAgIHBhcnNlZCA9IHNlbGYuX19wYXJzZXIucGFyc2VfcG9pbnQobGluZSkKICAgICAgICAgICAgICAgIGlmIHBhcnNlZCBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICBwb2ludHMuYXBwZW5kKFBvaW50KHBhcnNlZCkpCiAgICAgICAgICAgICAgICBsaW5lID0gc3BzLnJlYWRsaW5lKCkKICAgICAgICByZXR1cm4gcG9pbnRzCgogICAgZGVmIGxvYWRfc3BzKHNlbGYpOgogICAgICAgIHBvaW50OiBQb2ludAogICAgICAgIGZvciBwb2ludCBpbiBzZWxmLl9fbG9hZF9wb2ludHMoc2VsZi5fX3Nwc19maWxlKToKICAgICAgICAgICAgc2VsZi5fX3Nwc1tGb2xkLmNvbWJpbmVfcG9pbnRfbnVtYmVyKHBvaW50KV0gPSBwb2ludAoKICAgIGRlZiBsb2FkX3JwcyhzZWxmKToKICAgICAgICBwb2ludDogUG9pbnQKICAgICAgICBmb3IgcG9pbnQgaW4gc2VsZi5fX2xvYWRfcG9pbnRzKHNlbGYuX19ycHNfZmlsZSk6CiAgICAgICAgICAgIG51bWJlciA9IHBvaW50LmxpbmUKICAgICAgICAgICAgaWYgbnVtYmVyIGluIHNlbGYuX19ycHMua2V5cygpOgogICAgICAgICAgICAgICAgc2VsZi5fX3Jwc1tudW1iZXJdLmFwcGVuZChwb2ludCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHNlbGYuX19ycHNbbnVtYmVyXSA9IFtwb2ludF0KCiAgICBkZWYgbG9hZF9kYXRhKHNlbGYpOgogICAgICAgIHNlbGYubG9hZF9zcHMoKQogICAgICAgIHNlbGYubG9hZF9ycHMoKQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBjb21iaW5lX3BvaW50X251bWJlcihwb2ludDogUG9pbnQpOgogICAgICAgIHJldHVybiBzdHIocG9pbnQubGluZSkgKyBzdHIocG9pbnQucG9pbnQpICsgc3RyKHBvaW50LnBvaW50X2lkeCkKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgY29tYmluZV9wb2ludF9udW1iZXJfZnJvbV9wYXJ0aWFscyhsaW5lOiBmbG9hdCwgcG9pbnQ6IGZsb2F0LCBpZHg6IGludCk6CiAgICAgICAgcmV0dXJuIHN0cihsaW5lKSArIHN0cihwb2ludCkgKyBzdHIoaWR4KQoKICAgIGRlZiBnZXRfcjRsaW5lX3JhbmdlX3BvaW50cyhzZWxmLCBsaW5lOiBmbG9hdCwgZnA6IGZsb2F0LCB0cDogZmxvYXQpOgogICAgICAgIHBvaW50cyA9IHNlbGYuX19ycHNbbGluZV0KICAgICAgICBwb2ludHNfcmFuZ2UgPSBbXQoKICAgICAgICBwb2ludDogUG9pbnQKICAgICAgICBmb3IgcG9pbnQgaW4gcG9pbnRzOgogICAgICAgICAgICBwbiA9IHBvaW50LnBvaW50CiAgICAgICAgICAgIGlmIGZwIDw9IHBuIDw9IHRwOgogICAgICAgICAgICAgICAgcG9pbnRzX3JhbmdlLmFwcGVuZChwb2ludCkKCiAgICAgICAgcmV0dXJuIHBvaW50c19yYW5nZQoKICAgIGRlZiBjYWxjdWxhdGVfZm9sZChzZWxmKToKCiAgICAgICAgcHJldmlvdXNfc2xuOiBmbG9hdCA9IDAKICAgICAgICBwcmV2aW91c19zcG46IGZsb2F0ID0gMAogICAgICAgIHByZXZpb3VzX3NpZHg6IGludCA9IDAKCiAgICAgICAgY291bnRlciA9IDAKICAgICAgICB3aXRoIG9wZW4oc2VsZi5fX3hwc19maWxlLCBtb2RlPSdyJywgYnVmZmVyaW5nPSgyIDw8IDE2KSArIDgpIGFzIHhwczoKICAgICAgICAgICAgbGluZSA9IHhwcy5yZWFkbGluZSgpCiAgICAgICAgICAgIHdoaWxlIGxpbmU6CiAgICAgICAgICAgICAgICByZWxhdGlvbiA9IHNlbGYucGFyc2VfeHBzX3JlY29yZChsaW5lKQogICAgICAgICAgICAgICAgaWYgcmVsYXRpb24gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fX3ZlcmJvc2UgaXMgVHJ1ZToKICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlciArPSAxCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvdW50ZXIgJSBzZWxmLl9fZXZlcnkgPT0gMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIns6MTUsZH1cbiIuZm9ybWF0KGNvdW50ZXIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgICAgICAgICAgc2xuID0gcmVsYXRpb24ubGluZQogICAgICAgICAgICAgICAgICAgIHNwbiA9IHJlbGF0aW9uLnBvaW50CiAgICAgICAgICAgICAgICAgICAgc2lkeCA9IHJlbGF0aW9uLnBvaW50X2lkeAoKICAgICAgICAgICAgICAgICAgICBpZiBzbG4gIT0gcHJldmlvdXNfc2xuIG9yIHNwbiAhPSBwcmV2aW91c19zcG4gb3Igc2lkeCAhPSBwcmV2aW91c19zaWR4OgogICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lZF9zcCA9IHNlbGYuY29tYmluZV9wb2ludF9udW1iZXJfZnJvbV9wYXJ0aWFscyhzbG4sIHNwbiwgc2lkeCkKICAgICAgICAgICAgICAgICAgICAgICAgc3A6IFBvaW50CiAgICAgICAgICAgICAgICAgICAgICAgIHNwID0gc2VsZi5fX3Nwc1tjb21iaW5lZF9zcF0KCiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfc2xuID0gc2xuCiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfc3BuID0gc3BuCiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfc2lkeCA9IHNpZHgKCiAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxjdWxhdGVfZm9sZDR4cHNfcmVjb3JkKHNwLCByZWxhdGlvbikKCiAgICAgICAgICAgICAgICBsaW5lID0geHBzLnJlYWRsaW5lKCkKICAgICAgICAgICAgaWYgc2VsZi5fX3ZlcmJvc2UgaXMgVHJ1ZToKICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIns6MTUsZH1cbiIuZm9ybWF0KGNvdW50ZXIpKQogICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCgogICAgZGVmIHBhcnNlX3hwc19yZWNvcmQoc2VsZiwgcmVjb3JkOiBzdHIpOgogICAgICAgIHBhcnNlZCA9IHNlbGYuX19wYXJzZXIucGFyc2VfcmVsYXRpb24ocmVjb3JkKQogICAgICAgIGlmIHBhcnNlZCBpcyBub3QgTm9uZToKICAgICAgICAgICAgcmVsYXRpb24gPSBSZWxhdGlvbihwYXJzZWQpCiAgICAgICAgICAgIHJldHVybiByZWxhdGlvbgoKICAgICAgICByZXR1cm4gTm9uZQoKICAgIGRlZiBhZGRfZm9sZF90b19iaW4oc2VsZiwgYmlubjogaW50LCBjb2x1bW46IGludCwgcm93OiBpbnQpOgogICAgICAgIGlmIGJpbm4gaW4gc2VsZi5fX2ZvbGQ6CiAgICAgICAgICAgIHNlbGYuX19mb2xkW2Jpbm5dID0gc2VsZi5fX2ZvbGRbYmlubl0gKyAxCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5fX2ZvbGRbYmlubl0gPSAxCiAgICAgICAgICAgIHNlbGYuX19jb2xbYmlubl0gPSBjb2x1bW4KICAgICAgICAgICAgc2VsZi5fX3Jvd1tiaW5uXSA9IHJvdwoKICAgIGRlZiBjYWxjdWxhdGVfZm9sZDR4cHNfcmVjb3JkKHNlbGYsIHNyY19wb2ludDogUG9pbnQsIHJlbGF0aW9uOiBSZWxhdGlvbik6CiAgICAgICAgc3ggPSBzcmNfcG9pbnQuZWFzdGluZwogICAgICAgIHN5ID0gc3JjX3BvaW50Lm5vcnRoaW5nCiAgICAgICAgcl9wb2ludHMgPSBzZWxmLmdldF9yNGxpbmVfcmFuZ2VfcG9pbnRzKHJlbGF0aW9uLnJjdl9saW5lLCByZWxhdGlvbi5mcm9tX3JjdiwgcmVsYXRpb24udG9fcmN2KQogICAgICAgIHBvaW50OiBQb2ludAogICAgICAgIGZvciBwb2ludCBpbiByX3BvaW50czoKICAgICAgICAgICAgcnggPSBwb2ludC5lYXN0aW5nCiAgICAgICAgICAgIHJ5ID0gcG9pbnQubm9ydGhpbmcKICAgICAgICAgICAgYnggPSAoc3ggKyByeCkgLyAyCiAgICAgICAgICAgIGJ5ID0gKHN5ICsgcnkpIC8gMgoKICAgICAgICAgICAgYmluX3BvaW50ID0gY3JlYXRlX3BvaW50X2J5X2Vhc3Rpbmdfbm9ydGhpbmcoYngsIGJ5KQoKICAgICAgICAgICAgaWYgMC4wICE9IHNlbGYuX19ncmlkLmdldF9yb3QoKToKICAgICAgICAgICAgICAgIGJpbl9yb3RfcG9pbnQgPSBzZWxmLl9fZ3JpZC5yb3RhdGVfcG9pbnRfeF95KGJpbl9wb2ludCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGJpbl9yb3RfcG9pbnQgPSBiaW5fcG9pbnQKCiAgICAgICAgICAgIGJpbiA9IHNlbGYuX19ncmlkLmJpbl94eTJjcihiaW5fcm90X3BvaW50KQogICAgICAgICAgICBiaW5uID0gc2VsZi5fX2dyaWQuYmluX251bWJlcihiaW4pCgogICAgICAgICAgICBzZWxmLmFkZF9mb2xkX3RvX2JpbihiaW5uLCBiaW4uY29sdW1uLCBiaW4ucm93KQoKICAgIGRlZiB3cml0ZV9mb2xkMmNzdihzZWxmLCBmaWxlbmFtZTogc3RyKToKICAgICAgICBjc3ZfZmlsZSA9IG9wZW4oZmlsZW5hbWUsICJ3IikKCiAgICAgICAgY3N2X3dyaXRlciA9IGNzdi53cml0ZXIoY3N2X2ZpbGUsIGRlbGltaXRlcj0nLCcsIHF1b3RlY2hhcj0nIicsIHF1b3Rpbmc9Y3N2LlFVT1RFX01JTklNQUwpCiAgICAgICAgY3N2X3dyaXRlci53cml0ZXJvdyhbJ0Vhc3RpbmcnLCAnTm9ydGhpbmcnLCAnRm9sZCcsICdCaW4gTnVtYmVyJywgJ1JvdycsICdDb2x1bW4nXSkKCiAgICAgICAgZm9yIGJpbm4gaW4gc2VsZi5fX2ZvbGQua2V5cygpOgogICAgICAgICAgICBjID0gc2VsZi5fX2NvbFtiaW5uXQogICAgICAgICAgICByID0gc2VsZi5fX3Jvd1tiaW5uXQogICAgICAgICAgICBmb2xkX3ZhbCA9IHNlbGYuX19mb2xkW2Jpbm5dCgogICAgICAgICAgICBieHIgPSBzZWxmLl9fZ3JpZC5nZXRfeDAoKSArIHNlbGYuX19ncmlkLmdldF9keGIoKSAvIDIgKyAoYyAtIDEpICogc2VsZi5fX2dyaWQuZ2V0X2R4YigpCiAgICAgICAgICAgIGJ5ciA9IHNlbGYuX19ncmlkLmdldF95MCgpICsgc2VsZi5fX2dyaWQuZ2V0X2R5YigpIC8gMiArIChyIC0gMSkgKiBzZWxmLl9fZ3JpZC5nZXRfZHliKCkKICAgICAgICAgICAgcGJyID0gY3JlYXRlX3BvaW50X2J5X2Vhc3Rpbmdfbm9ydGhpbmcoYnhyLCBieXIpCgogICAgICAgICAgICBpZiAwLjAgIT0gc2VsZi5fX2dyaWQuZ2V0X3JvdCgpOgogICAgICAgICAgICAgICAgcGIgPSBzZWxmLl9fZ3JpZC5yb3RhdGVfcG9pbnRfeF95KHBiciwgVHJ1ZSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHBiID0gcGJyCgogICAgICAgICAgICBjc3Zfd3JpdGVyLndyaXRlcm93KFsKICAgICAgICAgICAgICAgIHBiLmVhc3RpbmcsCiAgICAgICAgICAgICAgICBwYi5ub3J0aGluZywKICAgICAgICAgICAgICAgIGZvbGRfdmFsLAogICAgICAgICAgICAgICAgYmlubiwKICAgICAgICAgICAgICAgIHIsCiAgICAgICAgICAgICAgICBjCiAgICAgICAgICAgIF0pCgogICAgICAgIGNzdl9maWxlLmNsb3NlKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLl9fZm9sZDogZGljdCA9IHt9ICAjIGtleSBpcyBiaW4gbnVtYmVyCiAgICAgICAgc2VsZi5fX3JvdzogZGljdCA9IHt9ICAjIGtleSBpcyBiaW4gbnVtYmVyCiAgICAgICAgc2VsZi5fX2NvbDogZGljdCA9IHt9ICAjIGtleSBpcyBiaW4gbnVtYmVyCgo8fGZpbV9lbmR8Pg=="]
["414b3d5756ffdcb978f350ce2e4c925b635551cf-3","414b3d5756ffdcb978f350ce2e4c925b635551cf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgY3N2Cgpmcm9tIEZpeGVkV2lkdGhUZXh0UGFyc2VyLlNlaXNtaWMuU3BzUGFyc2VyIGltcG9ydCBTcHNQYXJzZXIsIFJlbGF0aW9uLCBQb2ludApmcm9tIFNlaXNtaWNGb2xkLkdyaWQgaW1wb3J0IEdyaWQKZnJvbSBTZWlzbWljRm9sZC5oZWxwZXJzIGltcG9ydCBjcmVhdGVfcG9pbnRfYnlfZWFzdGluZ19ub3J0aGluZwoKCmNsYXNzIEZvbGQ6CiAgICBkZWYgX19pbml0X18oCiAgICAgICAgICAgIHNlbGYsCiAgICAgICAgICAgIGdyaWQ6IEdyaWQsCiAgICAgICAgICAgIHBhcnNlcjogU3BzUGFyc2VyLAogICAgICAgICAgICBzcHNfZmlsZTogc3RyLAogICAgICAgICAgICBycHNfZmlsZTogc3RyLAogICAgICAgICAgICB4cHNfZmlsZTogc3RyLAogICAgICAgICAgICB2ZXJib3NlPUZhbHNlLAogICAgICAgICAgICBldmVyeT0xMDAwMAogICAgKToKICAgICAgICBzZWxmLl9fcGFyc2VyID0gcGFyc2VyCiAgICAgICAgc2VsZi5fX2dyaWQgPSBncmlkCiAgICAgICAgc2VsZi5fX3Nwc19maWxlID0gc3BzX2ZpbGUKICAgICAgICBzZWxmLl9fcnBzX2ZpbGUgPSBycHNfZmlsZQogICAgICAgIHNlbGYuX194cHNfZmlsZSA9IHhwc19maWxlCgogICAgICAgIHNlbGYuX19zcHM6IGRpY3QgPSB7fSAgIyBrZXkgaXMgY29tYmluZWQgbGluZSBwb2ludCBpbmRleCwgdmFsdWUgaXMgUG9pbnQgb2JqZWN0CiAgICAgICAgc2VsZi5fX3JwczogZGljdCA9IHt9ICAjIGtleSBpcyBsaW5lLCB2YWx1ZSBpcyBMaXN0IG9mIFBvaW50IG9iamVjdHMKCiAgICAgICAgc2VsZi5fX2ZvbGQ6IGRpY3QgPSB7fSAgIyBrZXkgaXMgYmluIG51bWJlcgogICAgICAgIHNlbGYuX19yb3c6IGRpY3QgPSB7fSAgIyBrZXkgaXMgYmluIG51bWJlcgogICAgICAgIHNlbGYuX19jb2w6IGRpY3QgPSB7fSAgIyBrZXkgaXMgYmluIG51bWJlcgoKICAgICAgICBzZWxmLl9fdmVyYm9zZSA9IHZlcmJvc2UKICAgICAgICBzZWxmLl9fZXZlcnkgPSBldmVyeQoKICAgIGRlZiBnZXRfc3BzKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl9fc3BzCgogICAgZGVmIGdldF9ycHMoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX19ycHMKCiAgICBkZWYgX19sb2FkX3BvaW50cyhzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgcG9pbnRzID0gW10KICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUpIGFzIHNwczoKICAgICAgICAgICAgbGluZSA9IHNwcy5yZWFkbGluZSgpCiAgICAgICAgICAgIHdoaWxlIGxpbmU6CiAgICAgICAgICAgICAgICBwYXJzZWQgPSBzZWxmLl9fcGFyc2VyLnBhcnNlX3BvaW50KGxpbmUpCiAgICAgICAgICAgICAgICBpZiBwYXJzZWQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgcG9pbnRzLmFwcGVuZChQb2ludChwYXJzZWQpKQogICAgICAgICAgICAgICAgbGluZSA9IHNwcy5yZWFkbGluZSgpCiAgICAgICAgcmV0dXJuIHBvaW50cwoKICAgIGRlZiBsb2FkX3NwcyhzZWxmKToKICAgICAgICBwb2ludDogUG9pbnQKICAgICAgICBmb3IgcG9pbnQgaW4gc2VsZi5fX2xvYWRfcG9pbnRzKHNlbGYuX19zcHNfZmlsZSk6CiAgICAgICAgICAgIHNlbGYuX19zcHNbRm9sZC5jb21iaW5lX3BvaW50X251bWJlcihwb2ludCldID0gcG9pbnQKCiAgICBkZWYgbG9hZF9ycHMoc2VsZik6CiAgICAgICAgcG9pbnQ6IFBvaW50CiAgICAgICAgZm9yIHBvaW50IGluIHNlbGYuX19sb2FkX3BvaW50cyhzZWxmLl9fcnBzX2ZpbGUpOgogICAgICAgICAgICBudW1iZXIgPSBwb2ludC5saW5lCiAgICAgICAgICAgIGlmIG51bWJlciBpbiBzZWxmLl9fcnBzLmtleXMoKToKICAgICAgICAgICAgICAgIHNlbGYuX19ycHNbbnVtYmVyXS5hcHBlbmQocG9pbnQpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBzZWxmLl9fcnBzW251bWJlcl0gPSBbcG9pbnRdCgogICAgZGVmIGxvYWRfZGF0YShzZWxmKToKICAgICAgICBzZWxmLmxvYWRfc3BzKCkKICAgICAgICBzZWxmLmxvYWRfcnBzKCkKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgY29tYmluZV9wb2ludF9udW1iZXIocG9pbnQ6IFBvaW50KToKICAgICAgICByZXR1cm4gc3RyKHBvaW50LmxpbmUpICsgc3RyKHBvaW50LnBvaW50KSArIHN0cihwb2ludC5wb2ludF9pZHgpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgY29tYmluZV9wb2ludF9udW1iZXJfZnJvbV9wYXJ0aWFscyhsaW5lOiBmbG9hdCwgcG9pbnQ6IGZsb2F0LCBpZHg6IGludCk6CiAgICAgICAgcmV0dXJuIHN0cihsaW5lKSArIHN0cihwb2ludCkgKyBzdHIoaWR4KQoKPHxmaW1fZW5kfD4="]
["414b3d5756ffdcb978f350ce2e4c925b635551cf-4","414b3d5756ffdcb978f350ce2e4c925b635551cf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgY3N2Cgpmcm9tIEZpeGVkV2lkdGhUZXh0UGFyc2VyLlNlaXNtaWMuU3BzUGFyc2VyIGltcG9ydCBTcHNQYXJzZXIsIFJlbGF0aW9uLCBQb2ludApmcm9tIFNlaXNtaWNGb2xkLkdyaWQgaW1wb3J0IEdyaWQKZnJvbSBTZWlzbWljRm9sZC5oZWxwZXJzIGltcG9ydCBjcmVhdGVfcG9pbnRfYnlfZWFzdGluZ19ub3J0aGluZwoKCmNsYXNzIEZvbGQ6CiAgICBkZWYgX19pbml0X18oCiAgICAgICAgICAgIHNlbGYsCiAgICAgICAgICAgIGdyaWQ6IEdyaWQsCiAgICAgICAgICAgIHBhcnNlcjogU3BzUGFyc2VyLAogICAgICAgICAgICBzcHNfZmlsZTogc3RyLAogICAgICAgICAgICBycHNfZmlsZTogc3RyLAogICAgICAgICAgICB4cHNfZmlsZTogc3RyLAogICAgICAgICAgICB2ZXJib3NlPUZhbHNlLAogICAgICAgICAgICBldmVyeT0xMDAwMAogICAgKToKICAgICAgICBzZWxmLl9fcGFyc2VyID0gcGFyc2VyCiAgICAgICAgc2VsZi5fX2dyaWQgPSBncmlkCiAgICAgICAgc2VsZi5fX3Nwc19maWxlID0gc3BzX2ZpbGUKICAgICAgICBzZWxmLl9fcnBzX2ZpbGUgPSBycHNfZmlsZQo8fGZpbV9ob2xlfD4KCiAgICAgICAgc2VsZi5fX2ZvbGQ6IGRpY3QgPSB7fSAgIyBrZXkgaXMgYmluIG51bWJlcgogICAgICAgIHNlbGYuX19yb3c6IGRpY3QgPSB7fSAgIyBrZXkgaXMgYmluIG51bWJlcgogICAgICAgIHNlbGYuX19jb2w6IGRpY3QgPSB7fSAgIyBrZXkgaXMgYmluIG51bWJlcgoKICAgICAgICBzZWxmLl9fdmVyYm9zZSA9IHZlcmJvc2UKICAgICAgICBzZWxmLl9fZXZlcnkgPSBldmVyeQoKICAgIGRlZiBnZXRfc3BzKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl9fc3BzCgogICAgZGVmIGdldF9ycHMoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX19ycHMKCiAgICBkZWYgX19sb2FkX3BvaW50cyhzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgcG9pbnRzID0gW10KICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUpIGFzIHNwczoKICAgICAgICAgICAgbGluZSA9IHNwcy5yZWFkbGluZSgpCiAgICAgICAgICAgIHdoaWxlIGxpbmU6CiAgICAgICAgICAgICAgICBwYXJzZWQgPSBzZWxmLl9fcGFyc2VyLnBhcnNlX3BvaW50KGxpbmUpCiAgICAgICAgICAgICAgICBpZiBwYXJzZWQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgcG9pbnRzLmFwcGVuZChQb2ludChwYXJzZWQpKQogICAgICAgICAgICAgICAgbGluZSA9IHNwcy5yZWFkbGluZSgpCiAgICAgICAgcmV0dXJuIHBvaW50cwoKICAgIGRlZiBsb2FkX3NwcyhzZWxmKToKICAgICAgICBwb2ludDogUG9pbnQKICAgICAgICBmb3IgcG9pbnQgaW4gc2VsZi5fX2xvYWRfcG9pbnRzKHNlbGYuX19zcHNfZmlsZSk6CiAgICAgICAgICAgIHNlbGYuX19zcHNbRm9sZC5jb21iaW5lX3BvaW50X251bWJlcihwb2ludCldID0gcG9pbnQKCiAgICBkZWYgbG9hZF9ycHMoc2VsZik6CiAgICAgICAgcG9pbnQ6IFBvaW50CiAgICAgICAgZm9yIHBvaW50IGluIHNlbGYuX19sb2FkX3BvaW50cyhzZWxmLl9fcnBzX2ZpbGUpOgogICAgICAgICAgICBudW1iZXIgPSBwb2ludC5saW5lCiAgICAgICAgICAgIGlmIG51bWJlciBpbiBzZWxmLl9fcnBzLmtleXMoKToKICAgICAgICAgICAgICAgIHNlbGYuX19ycHNbbnVtYmVyXS5hcHBlbmQocG9pbnQpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBzZWxmLl9fcnBzW251bWJlcl0gPSBbcG9pbnRdCgogICAgZGVmIGxvYWRfZGF0YShzZWxmKToKICAgICAgICBzZWxmLmxvYWRfc3BzKCkKICAgICAgICBzZWxmLmxvYWRfcnBzKCkKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgY29tYmluZV9wb2ludF9udW1iZXIocG9pbnQ6IFBvaW50KToKICAgICAgICByZXR1cm4gc3RyKHBvaW50LmxpbmUpICsgc3RyKHBvaW50LnBvaW50KSArIHN0cihwb2ludC5wb2ludF9pZHgpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGNvbWJpbmVfcG9pbnRfbnVtYmVyX2Zyb21fcGFydGlhbHMobGluZTogZmxvYXQsIHBvaW50OiBmbG9hdCwgaWR4OiBpbnQpOgogICAgICAgIHJldHVybiBzdHIobGluZSkgKyBzdHIocG9pbnQpICsgc3RyKGlkeCkKCiAgICBkZWYgZ2V0X3I0bGluZV9yYW5nZV9wb2ludHMoc2VsZiwgbGluZTogZmxvYXQsIGZwOiBmbG9hdCwgdHA6IGZsb2F0KToKICAgICAgICBwb2ludHMgPSBzZWxmLl9fcnBzW2xpbmVdCiAgICAgICAgcG9pbnRzX3JhbmdlID0gW10KCiAgICAgICAgcG9pbnQ6IFBvaW50CiAgICAgICAgZm9yIHBvaW50IGluIHBvaW50czoKICAgICAgICAgICAgcG4gPSBwb2ludC5wb2ludAogICAgICAgICAgICBpZiBmcCA8PSBwbiA8PSB0cDoKICAgICAgICAgICAgICAgIHBvaW50c19yYW5nZS5hcHBlbmQocG9pbnQpCgogICAgICAgIHJldHVybiBwb2ludHNfcmFuZ2UKCiAgICBkZWYgY2FsY3VsYXRlX2ZvbGQoc2VsZik6CgogICAgICAgIHByZXZpb3VzX3NsbjogZmxvYXQgPSAwCiAgICAgICAgcHJldmlvdXNfc3BuOiBmbG9hdCA9IDAKICAgICAgICBwcmV2aW91c19zaWR4OiBpbnQgPSAwCgogICAgICAgIGNvdW50ZXIgPSAwCiAgICAgICAgd2l0aCBvcGVuKHNlbGYuX194cHNfZmlsZSwgbW9kZT0ncicsIGJ1ZmZlcmluZz0oMiA8PCAxNikgKyA4KSBhcyB4cHM6CiAgICAgICAgICAgIGxpbmUgPSB4cHMucmVhZGxpbmUoKQogICAgICAgICAgICB3aGlsZSBsaW5lOgogICAgICAgICAgICAgICAgcmVsYXRpb24gPSBzZWxmLnBhcnNlX3hwc19yZWNvcmQobGluZSkKICAgICAgICAgICAgICAgIGlmIHJlbGF0aW9uIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX192ZXJib3NlIGlzIFRydWU6CiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXIgKz0gMQogICAgICAgICAgICAgICAgICAgICAgICBpZiBjb3VudGVyICUgc2VsZi5fX2V2ZXJ5ID09IDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJ7OjE1LGR9XG4iLmZvcm1hdChjb3VudGVyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICAgICAgICAgICAgIHNsbiA9IHJlbGF0aW9uLmxpbmUKICAgICAgICAgICAgICAgICAgICBzcG4gPSByZWxhdGlvbi5wb2ludAogICAgICAgICAgICAgICAgICAgIHNpZHggPSByZWxhdGlvbi5wb2ludF9pZHgKCiAgICAgICAgICAgICAgICAgICAgaWYgc2xuICE9IHByZXZpb3VzX3NsbiBvciBzcG4gIT0gcHJldmlvdXNfc3BuIG9yIHNpZHggIT0gcHJldmlvdXNfc2lkeDoKICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZWRfc3AgPSBzZWxmLmNvbWJpbmVfcG9pbnRfbnVtYmVyX2Zyb21fcGFydGlhbHMoc2xuLCBzcG4sIHNpZHgpCiAgICAgICAgICAgICAgICAgICAgICAgIHNwOiBQb2ludAogICAgICAgICAgICAgICAgICAgICAgICBzcCA9IHNlbGYuX19zcHNbY29tYmluZWRfc3BdCgogICAgICAgICAgICAgICAgICAgIHByZXZpb3VzX3NsbiA9IHNsbgogICAgICAgICAgICAgICAgICAgIHByZXZpb3VzX3NwbiA9IHNwbgogICAgICAgICAgICAgICAgICAgIHByZXZpb3VzX3NpZHggPSBzaWR4CgogICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsY3VsYXRlX2ZvbGQ0eHBzX3JlY29yZChzcCwgcmVsYXRpb24pCgogICAgICAgICAgICAgICAgbGluZSA9IHhwcy5yZWFkbGluZSgpCiAgICAgICAgICAgIGlmIHNlbGYuX192ZXJib3NlIGlzIFRydWU6CiAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJ7OjE1LGR9XG4iLmZvcm1hdChjb3VudGVyKSkKICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQoKICAgIGRlZiBwYXJzZV94cHNfcmVjb3JkKHNlbGYsIHJlY29yZDogc3RyKToKICAgICAgICBwYXJzZWQgPSBzZWxmLl9fcGFyc2VyLnBhcnNlX3JlbGF0aW9uKHJlY29yZCkKICAgICAgICBpZiBwYXJzZWQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHJlbGF0aW9uID0gUmVsYXRpb24ocGFyc2VkKQogICAgICAgICAgICByZXR1cm4gcmVsYXRpb24KCiAgICAgICAgcmV0dXJuIE5vbmUKCiAgICBkZWYgYWRkX2ZvbGRfdG9fYmluKHNlbGYsIGJpbm46IGludCwgY29sdW1uOiBpbnQsIHJvdzogaW50KToKICAgICAgICBpZiBiaW5uIGluIHNlbGYuX19mb2xkOgogICAgICAgICAgICBzZWxmLl9fZm9sZFtiaW5uXSA9IHNlbGYuX19mb2xkW2Jpbm5dICsgMQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYuX19mb2xkW2Jpbm5dID0gMQogICAgICAgICAgICBzZWxmLl9fY29sW2Jpbm5dID0gY29sdW1uCiAgICAgICAgICAgIHNlbGYuX19yb3dbYmlubl0gPSByb3cKCiAgICBkZWYgY2FsY3VsYXRlX2ZvbGQ0eHBzX3JlY29yZChzZWxmLCBzcmNfcG9pbnQ6IFBvaW50LCByZWxhdGlvbjogUmVsYXRpb24pOgogICAgICAgIHN4ID0gc3JjX3BvaW50LmVhc3RpbmcKICAgICAgICBzeSA9IHNyY19wb2ludC5ub3J0aGluZwogICAgICAgIHJfcG9pbnRzID0gc2VsZi5nZXRfcjRsaW5lX3JhbmdlX3BvaW50cyhyZWxhdGlvbi5yY3ZfbGluZSwgcmVsYXRpb24uZnJvbV9yY3YsIHJlbGF0aW9uLnRvX3JjdikKICAgICAgICBwb2ludDogUG9pbnQKICAgICAgICBmb3IgcG9pbnQgaW4gcl9wb2ludHM6CiAgICAgICAgICAgIHJ4ID0gcG9pbnQuZWFzdGluZwogICAgICAgICAgICByeSA9IHBvaW50Lm5vcnRoaW5nCiAgICAgICAgICAgIGJ4ID0gKHN4ICsgcngpIC8gMgogICAgICAgICAgICBieSA9IChzeSArIHJ5KSAvIDIKCiAgICAgICAgICAgIGJpbl9wb2ludCA9IGNyZWF0ZV9wb2ludF9ieV9lYXN0aW5nX25vcnRoaW5nKGJ4LCBieSkKCiAgICAgICAgICAgIGlmIDAuMCAhPSBzZWxmLl9fZ3JpZC5nZXRfcm90KCk6CiAgICAgICAgICAgICAgICBiaW5fcm90X3BvaW50ID0gc2VsZi5fX2dyaWQucm90YXRlX3BvaW50X3hfeShiaW5fcG9pbnQpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBiaW5fcm90X3BvaW50ID0gYmluX3BvaW50CgogICAgICAgICAgICBiaW4gPSBzZWxmLl9fZ3JpZC5iaW5feHkyY3IoYmluX3JvdF9wb2ludCkKICAgICAgICAgICAgYmlubiA9IHNlbGYuX19ncmlkLmJpbl9udW1iZXIoYmluKQoKICAgICAgICAgICAgc2VsZi5hZGRfZm9sZF90b19iaW4oYmlubiwgYmluLmNvbHVtbiwgYmluLnJvdykKCiAgICBkZWYgd3JpdGVfZm9sZDJjc3Yoc2VsZiwgZmlsZW5hbWU6IHN0cik6CiAgICAgICAgY3N2X2ZpbGUgPSBvcGVuKGZpbGVuYW1lLCAidyIpCgogICAgICAgIGNzdl93cml0ZXIgPSBjc3Yud3JpdGVyKGNzdl9maWxlLCBkZWxpbWl0ZXI9JywnLCBxdW90ZWNoYXI9JyInLCBxdW90aW5nPWNzdi5RVU9URV9NSU5JTUFMKQogICAgICAgIGNzdl93cml0ZXIud3JpdGVyb3coWydFYXN0aW5nJywgJ05vcnRoaW5nJywgJ0ZvbGQnLCAnQmluIE51bWJlcicsICdSb3cnLCAnQ29sdW1uJ10pCgogICAgICAgIGZvciBiaW5uIGluIHNlbGYuX19mb2xkLmtleXMoKToKICAgICAgICAgICAgYyA9IHNlbGYuX19jb2xbYmlubl0KICAgICAgICAgICAgciA9IHNlbGYuX19yb3dbYmlubl0KICAgICAgICAgICAgZm9sZF92YWwgPSBzZWxmLl9fZm9sZFtiaW5uXQoKICAgICAgICAgICAgYnhyID0gc2VsZi5fX2dyaWQuZ2V0X3gwKCkgKyBzZWxmLl9fZ3JpZC5nZXRfZHhiKCkgLyAyICsgKGMgLSAxKSAqIHNlbGYuX19ncmlkLmdldF9keGIoKQogICAgICAgICAgICBieXIgPSBzZWxmLl9fZ3JpZC5nZXRfeTAoKSArIHNlbGYuX19ncmlkLmdldF9keWIoKSAvIDIgKyAociAtIDEpICogc2VsZi5fX2dyaWQuZ2V0X2R5YigpCiAgICAgICAgICAgIHBiciA9IGNyZWF0ZV9wb2ludF9ieV9lYXN0aW5nX25vcnRoaW5nKGJ4ciwgYnlyKQoKICAgICAgICAgICAgaWYgMC4wICE9IHNlbGYuX19ncmlkLmdldF9yb3QoKToKICAgICAgICAgICAgICAgIHBiID0gc2VsZi5fX2dyaWQucm90YXRlX3BvaW50X3hfeShwYnIsIFRydWUpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwYiA9IHBicgoKICAgICAgICAgICAgY3N2X3dyaXRlci53cml0ZXJvdyhbCiAgICAgICAgICAgICAgICBwYi5lYXN0aW5nLAogICAgICAgICAgICAgICAgcGIubm9ydGhpbmcsCiAgICAgICAgICAgICAgICBmb2xkX3ZhbCwKICAgICAgICAgICAgICAgIGJpbm4sCiAgICAgICAgICAgICAgICByLAogICAgICAgICAgICAgICAgYwogICAgICAgICAgICBdKQoKICAgICAgICBjc3ZfZmlsZS5jbG9zZSgpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5fX3hwc19maWxlID0geHBzX2ZpbGUKCiAgICAgICAgc2VsZi5fX3NwczogZGljdCA9IHt9ICAjIGtleSBpcyBjb21iaW5lZCBsaW5lIHBvaW50IGluZGV4LCB2YWx1ZSBpcyBQb2ludCBvYmplY3QKICAgICAgICBzZWxmLl9fcnBzOiBkaWN0ID0ge30gICMga2V5IGlzIGxpbmUsIHZhbHVlIGlzIExpc3Qgb2YgUG9pbnQgb2JqZWN0cwo8fGZpbV9lbmR8Pg=="]
["dacc73193bf3b9b7c8f3baa789cbc7b0bb9a587b-1","dacc73193bf3b9b7c8f3baa789cbc7b0bb9a587b","PHxmaW1fcHJlZml4fD4KIiIiCk1vZHVsZSB0byBob2xkIFZ5UFIgbW9uaXRvcmluZyBpbnN0YW5jZSBzaGFyZWQgYWNyb3NzIGFsbCBtb25pdG9yZWQgbW9kdWxlcy4KIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiMgaW5pdGlhbGlzZSBvbmxpbmUgbW9uaXRvciB0byBiZSBhY2Nlc3NlZCBhY3Jvc3MgbW9kdWxlcwpvbmxpbmVfbW9uaXRvciA9IE5vbmUKPHxmaW1fZW5kfD4="]
["dacc73193bf3b9b7c8f3baa789cbc7b0bb9a587b-2","dacc73193bf3b9b7c8f3baa789cbc7b0bb9a587b","PHxmaW1fcHJlZml4fD4KIiIiCk1vZHVsZSB0byBob2xkIFZ5UFIgbW9uaXRvcmluZyBpbnN0YW5jZSBzaGFyZWQgYWNyb3NzIGFsbCBtb25pdG9yZWQgbW9kdWxlcy4KIiIiCgojIGluaXRpYWxpc2Ugb25saW5lIG1vbml0b3IgdG8gYmUgYWNjZXNzZWQgYWNyb3NzIG1vZHVsZXMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpvbmxpbmVfbW9uaXRvciA9IE5vbmUKPHxmaW1fZW5kfD4="]
["82301a53348a5fc8fede4a6f826ffb993fb6c517-1","82301a53348a5fc8fede4a6f826ffb993fb6c517","PHxmaW1fcHJlZml4fD4KIyBBdWxhIGRlIEZ1bsOnw7VlcwoKdmFsb3JlcyA9WzIsIDMsIDUsIDYsIDg5XQpkZWYgbGluaGEoKToKICAgIHByaW50KCctJyAqIDMwKQoKCmRlZiBtZW5zYWdlbShtc2cpOgogICAgbGluaGEoKQogICAgcHJpbnQobXNnKQogICAgbGluaGEoKQoKCgpkZWYgZG9icmEobHN0KToKICAgIGNvbnQgPSAwCiAgICB3aGlsZSBjb250IDwgbGVuKGxzdCk6CiAgICAgICAgbHN0W2NvbnRdICo9IDIKICAgIGNvbnQgKz0gMQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpkZWYgc29tYShhLGIpOgogICAgcyA9IGEgKyBiCiAgICBwcmludChzKQo8fGZpbV9lbmR8Pg=="]
["82301a53348a5fc8fede4a6f826ffb993fb6c517-2","82301a53348a5fc8fede4a6f826ffb993fb6c517","PHxmaW1fcHJlZml4fD4KIyBBdWxhIGRlIEZ1bsOnw7VlcwoKdmFsb3JlcyA9WzIsIDMsIDUsIDYsIDg5XQpkZWYgbGluaGEoKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcHJpbnQoJy0nICogMzApCgoKPHxmaW1fZW5kfD4="]
["c1749fad58cfb84b2cc3dd01368dbd2e66e31b1a-1","c1749fad58cfb84b2cc3dd01368dbd2e66e31b1a","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBkamFuZ28uYXBwcyBpbXBvcnQgQXBwQ29uZmlnCgoKY2xhc3MgVXNlcm1hbmFnZW1lbnRDb25maWcoQXBwQ29uZmlnKToKPHxmaW1fZW5kfD4="]
["c1749fad58cfb84b2cc3dd01368dbd2e66e31b1a-2","c1749fad58cfb84b2cc3dd01368dbd2e66e31b1a","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uYXBwcyBpbXBvcnQgQXBwQ29uZmlnCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpjbGFzcyBVc2VybWFuYWdlbWVudENvbmZpZyhBcHBDb25maWcpOgogICAgbmFtZSA9ICd1c2VyX21hbmFnZW1lbnQnCjx8ZmltX2VuZHw+"]
["c1749fad58cfb84b2cc3dd01368dbd2e66e31b1a-3","c1749fad58cfb84b2cc3dd01368dbd2e66e31b1a","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBkamFuZ28uYXBwcyBpbXBvcnQgQXBwQ29uZmlnCgoKY2xhc3MgVXNlcm1hbmFnZW1lbnRDb25maWcoQXBwQ29uZmlnKToKPHxmaW1fZW5kfD4="]
["e7c4ab08d5fc64554905861e0a174e83f2a665f5-1","e7c4ab08d5fc64554905861e0a174e83f2a665f5","PHxmaW1fcHJlZml4fD4KIiIiCgpTQVZFIENMQVNTSUZJRUQgSU1BR0UKCj09PT09PT09PT09PT09PT09PT0KVGhpcyBtb2R1bGUgYWxsb3dzIHVzZXIgdG8gc2F2ZSBjbGFzc2lmaWVkIGltYWdlLgotLS0tLS0tLS0tLS0tLS0tLS0tCgpAYXV0aG9yOiBGbG9yZW5jaWEgTWloYWljaApAdmVyc2lvbjogMS4wCkBkYXRlOiBKdW5lIDZ0aCwgMjAxNAoKIiIiCgpmcm9tIFRraW50ZXIgaW1wb3J0IEZyYW1lLCBCdXR0b24KZnJvbSBhbm5pYy51aS5maWxlX21hbmFnZW1lbnQuaW1hZ2VfZmlsZSBpbXBvcnQgc2F2ZV9pbWFnZV9maWxlCgpjbGFzcyBTYXZlQ2xhc3NpZmllZEltYWdlKEZyYW1lKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgRnJhbWUuX19pbml0X18oc2VsZiwgcGFyZW50KQogICAgICAgIAogICAgICAgIHNlbGYucGFyZW50ID0gcGFyZW50CiAgICAgICAgc2VsZi5jbGFzc2lmaWVkX2ltZyA9IE5vbmUKPHxmaW1fZW5kfD4="]
["e7c4ab08d5fc64554905861e0a174e83f2a665f5-2","e7c4ab08d5fc64554905861e0a174e83f2a665f5","PHxmaW1fcHJlZml4fD4KIiIiCgpTQVZFIENMQVNTSUZJRUQgSU1BR0UKCj09PT09PT09PT09PT09PT09PT0KVGhpcyBtb2R1bGUgYWxsb3dzIHVzZXIgdG8gc2F2ZSBjbGFzc2lmaWVkIGltYWdlLgotLS0tLS0tLS0tLS0tLS0tLS0tCgo8fGZpbV9ob2xlfD4KIiIiCgpmcm9tIFRraW50ZXIgaW1wb3J0IEZyYW1lLCBCdXR0b24KZnJvbSBhbm5pYy51aS5maWxlX21hbmFnZW1lbnQuaW1hZ2VfZmlsZSBpbXBvcnQgc2F2ZV9pbWFnZV9maWxlCgpjbGFzcyBTYXZlQ2xhc3NpZmllZEltYWdlKEZyYW1lKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQpOgogICAgICAgIEZyYW1lLl9faW5pdF9fKHNlbGYsIHBhcmVudCkKICAgICAgICAKICAgICAgICBzZWxmLnBhcmVudCA9IHBhcmVudAogICAgICAgIHNlbGYuY2xhc3NpZmllZF9pbWcgPSBOb25lCiAgICAgICAgCiAgICAgICAgc2VsZi5zYXZlX2J1dHRvbiA9IEJ1dHRvbihzZWxmLCB0ZXh0ID0gJ1NhdmUgY2xhc3NpZmllZCBpbWFnZScsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWVmID0gJ3JhaXNlZCcsIHdpZHRoID0gMjMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuX3NhdmVfY2xhc3NpZmllZF9pbWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2Rpc2FibGVkJykKICAgICAgICBzZWxmLnNhdmVfYnV0dG9uLnBhY2soKQogICAgICAgIAogICAgZGVmIHNldF9jbGFzc2lmaWVkX2ltYWdlKHNlbGYsIGNsYXNzaWZpZWRfaW1nKToKICAgICAgICBzZWxmLmNsYXNzaWZpZWRfaW1nID0gY2xhc3NpZmllZF9pbWcKICAgICAgICBzZWxmLnNhdmVfYnV0dG9uLmNvbmZpZyhzdGF0ZSA9ICdub3JtYWwnKQogICAgICAgIAogICAgZGVmIF9zYXZlX2NsYXNzaWZpZWRfaW1hZ2Uoc2VsZik6CiAgICAgICAgc2F2ZV9pbWFnZV9maWxlKHNlbGYsIHNlbGYuY2xhc3NpZmllZF9pbWcpCjx8ZmltX3N1ZmZpeHw+CkBhdXRob3I6IEZsb3JlbmNpYSBNaWhhaWNoCkB2ZXJzaW9uOiAxLjAKQGRhdGU6IEp1bmUgNnRoLCAyMDE0Cgo8fGZpbV9lbmR8Pg=="]
["e7c4ab08d5fc64554905861e0a174e83f2a665f5-3","e7c4ab08d5fc64554905861e0a174e83f2a665f5","PHxmaW1fcHJlZml4fD4KIiIiCgpTQVZFIENMQVNTSUZJRUQgSU1BR0UKCj09PT09PT09PT09PT09PT09PT0KVGhpcyBtb2R1bGUgYWxsb3dzIHVzZXIgdG8gc2F2ZSBjbGFzc2lmaWVkIGltYWdlLgotLS0tLS0tLS0tLS0tLS0tLS0tCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CkBhdXRob3I6IEZsb3JlbmNpYSBNaWhhaWNoCkB2ZXJzaW9uOiAxLjAKQGRhdGU6IEp1bmUgNnRoLCAyMDE0Cgo8fGZpbV9lbmR8Pg=="]
["c1ff4cd125b66af087ebf7293a79f1c3ca8aef4a-1","c1ff4cd125b66af087ebf7293a79f1c3ca8aef4a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmZyb20gZnVuY3Rvb2xzIGltcG9ydCBjYWNoZQoKZGVmIGdldF90cmVuY2hfbWFwKGZpbGVuYW1lKToKICAnJydHZXQgdGhlIGltYWdlIGVuaGFuY2VtZW50IHN0cmluZyBhbmQgZ3JpZCBmcm9tIHRoZSBmaWxlLicnJwogIGltYWdlX2VuaGFuY2VtZW50X2FsZ29yaXRobSA9IE5vbmUKICBncmlkID0gZGljdCgpCiAgbWF4X3ggPSAwCiAgbWF4X3kgPSAwCiAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicpIGFzIGZoOgogICAgaW1hZ2VfZW5oYW5jZW1lbnRfYWxnb3JpdGhtID0gZmgucmVhZGxpbmUoKS5zdHJpcCgpCiAgICBmaC5yZWFkbGluZSgpCiAgICBsaW5lID0gZmgucmVhZGxpbmUoKS5zdHJpcCgpCiAgICBtYXhfeCA9IGxlbihsaW5lKQogICAgd2hpbGUgbGluZToKICAgICAgZm9yIHgsIGNoIGluIGVudW1lcmF0ZShsaW5lKToKICAgICAgICBpZiBjaCA9PSAnIyc6CiAgICAgICAgICB2YWx1ZSA9ICcjJwogICAgICAgIGVsc2U6CiAgICAgICAgICB2YWx1ZSA9ICcgJwogICAgICAgIGdyaWRbKHgsIG1heF95KV0gPSB2YWx1ZQoKICAgICAgbGluZSA9IGZoLnJlYWRsaW5lKCkuc3RyaXAoKQogICAgICBtYXhfeSArPSAxCgogIHJldHVybiAoaW1hZ2VfZW5oYW5jZW1lbnRfYWxnb3JpdGhtLCBncmlkLCBtYXhfeCwgbWF4X3kpCgpAY2FjaGUKZGVmIGdldF9uZWlnaGJvcnMoeCwgeSk6CiAgJycnR2V0cyBhbiBvcmRlcmVkIGxpc3Qgb2YgbmVpZ2hib3JzIHRvIGEgcG9zaXRpb24uJycnCiAgcmV0dXJuIFsKICAgICh4IC0gMSwgeSAtIDEpLCAoeCwgeSAtIDEpLCAoeCArIDEsIHkgLSAxKSwKICAgICh4IC0gMSwgeSksICAgICAoeCwgeSksICAgICAoeCArIDEsIHkpLAogICAgKHggLSAxLCB5ICsgMSksICh4LCB5ICsgMSksICh4ICsgMSwgeSArIDEpCiAgXQoKZGVmIGdldF9pbmRleCh4LCB5LCBncmlkLCBpbmZpbml0ZV92YWx1ZSk6CiAgJycnQ29udmVydHMgYW4geCwgeSBwb2ludCBpbnRvIGFuIGluZGV4IG9uIHRoZSBJRUEuJycnCiAgZGlnaXRzID0gJycKCiAgZm9yIG5laWdoYm9yIGluIGdldF9uZWlnaGJvcnMoeCwgeSk6CiAgICBpZiBuZWlnaGJvciBub3QgaW4gZ3JpZDoKICAgICAgZGlnaXRzICs9IGluZmluaXRlX3ZhbHVlCiAgICBlbGlmIGdyaWRbbmVpZ2hib3JdID09ICcjJzoKICAgICAgZGlnaXRzICs9ICcxJwogICAgZWxzZToKICAgICAgZGlnaXRzICs9ICcwJwoKICByZXR1cm4gaW50KGRpZ2l0cywgMikKCmRlZiBjb3VudF9waXhlbHMoZ3JpZCk6CiAgJycnQ291bnRzIHRoZSBudW1iZXIgb2YgIm9uIiBwaXhlbHMgaW4gdGhlIGltYWdlLicnJwogIHJldHVybiBzdW0oMSBmb3IgcCBpbiBncmlkLmtleXMoKSBpZiBncmlkW3BdID09ICcjJykKCmRlZiBkb19zdGVwKGdyaWQsIHN0ZXAsIGllYSwgZGltZW5zaW9ucyk6CiAgJycnRW5oYW5jZXMgdGhlIGltYWdlIGFjY29yZGluZyB0byB0aGUgSUVBLicnJwogIG5ld19ncmlkID0gZGljdCgpCiAgbWlueCA9IGRpbWVuc2lvbnNbMF0gLSAxCiAgbWlueSA9IGRpbWVuc2lvbnNbMV0gLSAxCiAgbWF4eCA9IGRpbWVuc2lvbnNbMl0gKyAxCiAgbWF4eSA9IGRpbWVuc2lvbnNbM10gKyAxCgogIGlmIGllYVswXSA9PSAnLic6CiAgICBpbmZpbml0ZV92YWx1ZSA9ICcwJwogIGVsaWYgc3RlcCAlIDIgPT0gMDoKICAgIGluZmluaXRlX3ZhbHVlID0gJzEnCiAgZWxzZToKICAgIGluZmluaXRlX3ZhbHVlID0gJzAnCgogIGZvciB5IGluIHJhbmdlKG1pbnksIG1heHkgKyAxKToKICAgIGZvciB4IGluIHJhbmdlKG1pbngsIG1heHggKyAxKToKICAgICAgbmV3X2dyaWRbKHgsIHkpXSA9IGllYVtnZXRfaW5kZXgoeCwgeSwgZ3JpZCwgaW5maW5pdGVfdmFsdWUpXQoKICByZXR1cm4gKG5ld19ncmlkLCAobWlueCwgbWlueSwgbWF4eCwgbWF4eSkpCgpkZWYgbWFpbigpOgogICcnJ1pvb20gYW5kIGVuaGFuY2UhJycnCiAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogIHBhcnNlci5hZGRfYXJndW1lbnQoJy1mJywgJy0tZmlsZW5hbWUnLCBkZWZhdWx0PScuLi9pbnB1dC9zYW1wbGUudHh0JykKICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcCcsICctLXBhcnQnLCBjaG9pY2VzPVsxLCAyXSwgZGVmYXVsdD0xLCB0eXBlPWludCkKICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQoKICAoaW1hZ2VfZW5oYW5jZW1lbnRfYWxnb3JpdGhtLCBncmlkLCBtYXh4LCBtYXh5KSA9IGdldF90cmVuY2hfbWFwKGFyZ3MuZmlsZW5hbWUpCgogIGlmIGFyZ3MucGFydCA9PSAxOgogICAgc3RlcHMgPSAyCiAgZWxpZiBhcmdzLnBhcnQgPT0gMjoKICAgIHN0ZXBzID0gNTAKCiAgZGltZW5zaW9ucyA9ICgwLCAwLCBtYXh4LCBtYXh5KQoKICBmb3Igc3RlcCBpbiByYW5nZShzdGVwcyk6CiAgICAoZ3JpZCwgZGltZW5zaW9ucykgPSBkb19zdGVwKGdyaWQsIHN0ZXAgKyAxLCBpbWFnZV9lbmhhbmNlbWVudF9hbGdvcml0aG0sIGRpbWVuc2lvbnMpCgogIHRvdGFsID0gY291bnRfcGl4ZWxzKGdyaWQpCiAgcHJpbnQoZidBZnRlciB7c3RlcHN9IHN0ZXBzLCB0aGVyZSBhcmUge3RvdGFsfSBwaXhlbHMgb24uJykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICBtYWluKCkKPHxmaW1fZW5kfD4="]
["c1ff4cd125b66af087ebf7293a79f1c3ca8aef4a-2","c1ff4cd125b66af087ebf7293a79f1c3ca8aef4a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmZyb20gZnVuY3Rvb2xzIGltcG9ydCBjYWNoZQoKZGVmIGdldF90cmVuY2hfbWFwKGZpbGVuYW1lKToKICAnJydHZXQgdGhlIGltYWdlIGVuaGFuY2VtZW50IHN0cmluZyBhbmQgZ3JpZCBmcm9tIHRoZSBmaWxlLicnJwogIGltYWdlX2VuaGFuY2VtZW50X2FsZ29yaXRobSA9IE5vbmUKICBncmlkID0gZGljdCgpCiAgbWF4X3ggPSAwCiAgbWF4X3kgPSAwCiAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicpIGFzIGZoOgogICAgaW1hZ2VfZW5oYW5jZW1lbnRfYWxnb3JpdGhtID0gZmgucmVhZGxpbmUoKS5zdHJpcCgpCiAgICBmaC5yZWFkbGluZSgpCiAgICBsaW5lID0gZmgucmVhZGxpbmUoKS5zdHJpcCgpCiAgICBtYXhfeCA9IGxlbihsaW5lKQogICAgd2hpbGUgbGluZToKICAgICAgZm9yIHgsIGNoIGluIGVudW1lcmF0ZShsaW5lKToKICAgICAgICBpZiBjaCA9PSAnIyc6CiAgICAgICAgICB2YWx1ZSA9ICcjJwogICAgICAgIGVsc2U6CiAgICAgICAgICB2YWx1ZSA9ICcgJwogICAgICAgIGdyaWRbKHgsIG1heF95KV0gPSB2YWx1ZQoKICAgICAgbGluZSA9IGZoLnJlYWRsaW5lKCkuc3RyaXAoKQogICAgICBtYXhfeSArPSAxCgogIHJldHVybiAoaW1hZ2VfZW5oYW5jZW1lbnRfYWxnb3JpdGhtLCBncmlkLCBtYXhfeCwgbWF4X3kpCgpAY2FjaGUKZGVmIGdldF9uZWlnaGJvcnMoeCwgeSk6CiAgJycnR2V0cyBhbiBvcmRlcmVkIGxpc3Qgb2YgbmVpZ2hib3JzIHRvIGEgcG9zaXRpb24uJycnCiAgcmV0dXJuIFsKICAgICh4IC0gMSwgeSAtIDEpLCAoeCwgeSAtIDEpLCAoeCArIDEsIHkgLSAxKSwKICAgICh4IC0gMSwgeSksICAgICAoeCwgeSksICAgICAoeCArIDEsIHkpLAogICAgKHggLSAxLCB5ICsgMSksICh4LCB5ICsgMSksICh4ICsgMSwgeSArIDEpCiAgXQoKZGVmIGdldF9pbmRleCh4LCB5LCBncmlkLCBpbmZpbml0ZV92YWx1ZSk6CiAgJycnQ29udmVydHMgYW4geCwgeSBwb2ludCBpbnRvIGFuIGluZGV4IG9uIHRoZSBJRUEuJycnCiAgZGlnaXRzID0gJycKCiAgZm9yIG5laWdoYm9yIGluIGdldF9uZWlnaGJvcnMoeCwgeSk6CiAgICBpZiBuZWlnaGJvciBub3QgaW4gZ3JpZDoKICAgICAgZGlnaXRzICs9IGluZmluaXRlX3ZhbHVlCiAgICBlbGlmIGdyaWRbbmVpZ2hib3JdID09ICcjJzoKICAgICAgZGlnaXRzICs9ICcxJwogICAgZWxzZToKICAgICAgZGlnaXRzICs9ICcwJwoKPHxmaW1faG9sZXw+CmRlZiBjb3VudF9waXhlbHMoZ3JpZCk6CiAgJycnQ291bnRzIHRoZSBudW1iZXIgb2YgIm9uIiBwaXhlbHMgaW4gdGhlIGltYWdlLicnJwogIHJldHVybiBzdW0oMSBmb3IgcCBpbiBncmlkLmtleXMoKSBpZiBncmlkW3BdID09ICcjJykKCmRlZiBkb19zdGVwKGdyaWQsIHN0ZXAsIGllYSwgZGltZW5zaW9ucyk6CiAgJycnRW5oYW5jZXMgdGhlIGltYWdlIGFjY29yZGluZyB0byB0aGUgSUVBLicnJwogIG5ld19ncmlkID0gZGljdCgpCiAgbWlueCA9IGRpbWVuc2lvbnNbMF0gLSAxCiAgbWlueSA9IGRpbWVuc2lvbnNbMV0gLSAxCiAgbWF4eCA9IGRpbWVuc2lvbnNbMl0gKyAxCiAgbWF4eSA9IGRpbWVuc2lvbnNbM10gKyAxCgogIGlmIGllYVswXSA9PSAnLic6CiAgICBpbmZpbml0ZV92YWx1ZSA9ICcwJwogIGVsaWYgc3RlcCAlIDIgPT0gMDoKICAgIGluZmluaXRlX3ZhbHVlID0gJzEnCiAgZWxzZToKICAgIGluZmluaXRlX3ZhbHVlID0gJzAnCgogIGZvciB5IGluIHJhbmdlKG1pbnksIG1heHkgKyAxKToKICAgIGZvciB4IGluIHJhbmdlKG1pbngsIG1heHggKyAxKToKICAgICAgbmV3X2dyaWRbKHgsIHkpXSA9IGllYVtnZXRfaW5kZXgoeCwgeSwgZ3JpZCwgaW5maW5pdGVfdmFsdWUpXQoKICByZXR1cm4gKG5ld19ncmlkLCAobWlueCwgbWlueSwgbWF4eCwgbWF4eSkpCgpkZWYgbWFpbigpOgogICcnJ1pvb20gYW5kIGVuaGFuY2UhJycnCiAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogIHBhcnNlci5hZGRfYXJndW1lbnQoJy1mJywgJy0tZmlsZW5hbWUnLCBkZWZhdWx0PScuLi9pbnB1dC9zYW1wbGUudHh0JykKICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcCcsICctLXBhcnQnLCBjaG9pY2VzPVsxLCAyXSwgZGVmYXVsdD0xLCB0eXBlPWludCkKICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQoKICAoaW1hZ2VfZW5oYW5jZW1lbnRfYWxnb3JpdGhtLCBncmlkLCBtYXh4LCBtYXh5KSA9IGdldF90cmVuY2hfbWFwKGFyZ3MuZmlsZW5hbWUpCgogIGlmIGFyZ3MucGFydCA9PSAxOgogICAgc3RlcHMgPSAyCiAgZWxpZiBhcmdzLnBhcnQgPT0gMjoKICAgIHN0ZXBzID0gNTAKCiAgZGltZW5zaW9ucyA9ICgwLCAwLCBtYXh4LCBtYXh5KQoKICBmb3Igc3RlcCBpbiByYW5nZShzdGVwcyk6CiAgICAoZ3JpZCwgZGltZW5zaW9ucykgPSBkb19zdGVwKGdyaWQsIHN0ZXAgKyAxLCBpbWFnZV9lbmhhbmNlbWVudF9hbGdvcml0aG0sIGRpbWVuc2lvbnMpCgogIHRvdGFsID0gY291bnRfcGl4ZWxzKGdyaWQpCiAgcHJpbnQoZidBZnRlciB7c3RlcHN9IHN0ZXBzLCB0aGVyZSBhcmUge3RvdGFsfSBwaXhlbHMgb24uJykKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgcmV0dXJuIGludChkaWdpdHMsIDIpCgo8fGZpbV9lbmR8Pg=="]
["822ff3fc26c71462417be8d2d6f73da4eb252229-1","822ff3fc26c71462417be8d2d6f73da4eb252229","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCmltcG9ydCB0b3JjaC5ubiBhcyBubgoKaW1wb3J0IGV4cGVyaW1lbnRzLnV0aWxzCgoKY2xhc3MgTUxQKG5uLk1vZHVsZSk6CiAgICAjIElmIG11bHRpX2hlYWQgaXMgZmFsc2UsIEEgc2luZ2xlIGhlYWQgaXMgY29uc3RydWN0ZWQgd2l0aCB0aGUgdG90YWwgbnVtYmVyIG9mIGNsYXNzZXMKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnB1dF9zaGFwZSwgbnVtX3Rhc2tzLCBjbGFzc2VzX3Blcl90YXNrLCBudW1faGlkZGVuX2xheWVycz0xLCBoaWRkZW5fc2l6ZXM9MTI4LAogICAgICAgICAgICAgICAgIG11bHRpX2hlYWQ9RmFsc2UpOgogICAgICAgIHN1cGVyKE1MUCwgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYuaGlkZGVuX3NpemVzID0gZXhwZXJpbWVudHMudXRpbHMuZXh0ZW5kX2xpc3QoaGlkZGVuX3NpemVzLCBudW1faGlkZGVuX2xheWVycykKICAgICAgICBzZWxmLmNsYXNzZXNfcGVyX3Rhc2sgPSBleHBlcmltZW50cy51dGlscy5leHRlbmRfbGlzdChjbGFzc2VzX3Blcl90YXNrLCBudW1fdGFza3MpCiAgICAgICAgc2VsZi5udW1faGlkZGVuX2xheWVycyA9IG51bV9oaWRkZW5fbGF5ZXJzCiAgICAgICAgc2VsZi5udW1fdGFza3MgPSBudW1fdGFza3MKICAgICAgICBzZWxmLm11bHRpX2hlYWQgPSBtdWx0aV9oZWFkCgogICAgICAgIHNlbGYubGF5ZXJzID0gbm4uTW9kdWxlTGlzdChbbm4uTGluZWFyKGlucHV0X3NoYXBlLCBzZWxmLmhpZGRlbl9zaXplc1swXSwgYmlhcz1UcnVlKV0pCiAgICAgICAgc2VsZi5sYXllcnMuZXh0ZW5kKG5uLk1vZHVsZUxpc3QoW25uLkxpbmVhcihzZWxmLmhpZGRlbl9zaXplc1tpXSwgc2VsZi5oaWRkZW5fc2l6ZXNbaSArIDFdLCBiaWFzPVRydWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYubnVtX2hpZGRlbl9sYXllcnMgLSAxKV0pKQogICAgICAgIGlmIHNlbGYubXVsdGlfaGVhZDoKICAgICAgICAgICAgc2VsZi5vdXRwdXRfbGF5ZXIgPSBubi5Nb2R1bGVMaXN0KAo8fGZpbV9ob2xlfD4KICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLm91dHB1dF9sYXllciA9IG5uLkxpbmVhcihzZWxmLmhpZGRlbl9zaXplc1stMV0sIHN1bShzZWxmLmNsYXNzZXNfcGVyX3Rhc2spKQoKICAgICAgICBzZWxmLnJlbHUgPSB0b3JjaC5ubi5SZUxVKCkKCiAgICBkZWYgZm9yd2FyZChzZWxmLCBpbnB1dF8pOgogICAgICAgIHggPSBzZWxmLmxheWVyc1swXShpbnB1dF8pCiAgICAgICAgeCA9IHNlbGYucmVsdSh4KQogICAgICAgIGZvciBsYXllciBpbiBzZWxmLmxheWVyc1sxOl06CiAgICAgICAgICAgIHggPSBsYXllcih4KQogICAgICAgICAgICB4ID0gc2VsZi5yZWx1KHgpCiAgICAgICAgaWYgc2VsZi5tdWx0aV9oZWFkOgogICAgICAgICAgICBvdXRwdXQgPSBbc2VsZi5vdXRwdXRfbGF5ZXJbdF0oeCkgZm9yIHQgaW4gcmFuZ2Uoc2VsZi5udW1fdGFza3MpXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG91dHB1dCA9IHNlbGYub3V0cHV0X2xheWVyKHgpCiAgICAgICAgcmV0dXJuIG91dHB1dCwgeAo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgW25uLkxpbmVhcihzZWxmLmhpZGRlbl9zaXplc1stMV0sIG51bV9jbGFzc2VzKSBmb3IgbnVtX2NsYXNzZXMgaW4gc2VsZi5jbGFzc2VzX3Blcl90YXNrXSkKPHxmaW1fZW5kfD4="]
["822ff3fc26c71462417be8d2d6f73da4eb252229-2","822ff3fc26c71462417be8d2d6f73da4eb252229","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCmltcG9ydCB0b3JjaC5ubiBhcyBubgo8fGZpbV9ob2xlfD4KY2xhc3MgTUxQKG5uLk1vZHVsZSk6CiAgICAjIElmIG11bHRpX2hlYWQgaXMgZmFsc2UsIEEgc2luZ2xlIGhlYWQgaXMgY29uc3RydWN0ZWQgd2l0aCB0aGUgdG90YWwgbnVtYmVyIG9mIGNsYXNzZXMKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnB1dF9zaGFwZSwgbnVtX3Rhc2tzLCBjbGFzc2VzX3Blcl90YXNrLCBudW1faGlkZGVuX2xheWVycz0xLCBoaWRkZW5fc2l6ZXM9MTI4LAogICAgICAgICAgICAgICAgIG11bHRpX2hlYWQ9RmFsc2UpOgogICAgICAgIHN1cGVyKE1MUCwgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYuaGlkZGVuX3NpemVzID0gZXhwZXJpbWVudHMudXRpbHMuZXh0ZW5kX2xpc3QoaGlkZGVuX3NpemVzLCBudW1faGlkZGVuX2xheWVycykKICAgICAgICBzZWxmLmNsYXNzZXNfcGVyX3Rhc2sgPSBleHBlcmltZW50cy51dGlscy5leHRlbmRfbGlzdChjbGFzc2VzX3Blcl90YXNrLCBudW1fdGFza3MpCiAgICAgICAgc2VsZi5udW1faGlkZGVuX2xheWVycyA9IG51bV9oaWRkZW5fbGF5ZXJzCiAgICAgICAgc2VsZi5udW1fdGFza3MgPSBudW1fdGFza3MKICAgICAgICBzZWxmLm11bHRpX2hlYWQgPSBtdWx0aV9oZWFkCgogICAgICAgIHNlbGYubGF5ZXJzID0gbm4uTW9kdWxlTGlzdChbbm4uTGluZWFyKGlucHV0X3NoYXBlLCBzZWxmLmhpZGRlbl9zaXplc1swXSwgYmlhcz1UcnVlKV0pCiAgICAgICAgc2VsZi5sYXllcnMuZXh0ZW5kKG5uLk1vZHVsZUxpc3QoW25uLkxpbmVhcihzZWxmLmhpZGRlbl9zaXplc1tpXSwgc2VsZi5oaWRkZW5fc2l6ZXNbaSArIDFdLCBiaWFzPVRydWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYubnVtX2hpZGRlbl9sYXllcnMgLSAxKV0pKQogICAgICAgIGlmIHNlbGYubXVsdGlfaGVhZDoKICAgICAgICAgICAgc2VsZi5vdXRwdXRfbGF5ZXIgPSBubi5Nb2R1bGVMaXN0KAogICAgICAgICAgICAgICAgW25uLkxpbmVhcihzZWxmLmhpZGRlbl9zaXplc1stMV0sIG51bV9jbGFzc2VzKSBmb3IgbnVtX2NsYXNzZXMgaW4gc2VsZi5jbGFzc2VzX3Blcl90YXNrXSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLm91dHB1dF9sYXllciA9IG5uLkxpbmVhcihzZWxmLmhpZGRlbl9zaXplc1stMV0sIHN1bShzZWxmLmNsYXNzZXNfcGVyX3Rhc2spKQoKICAgICAgICBzZWxmLnJlbHUgPSB0b3JjaC5ubi5SZUxVKCkKCiAgICBkZWYgZm9yd2FyZChzZWxmLCBpbnB1dF8pOgogICAgICAgIHggPSBzZWxmLmxheWVyc1swXShpbnB1dF8pCiAgICAgICAgeCA9IHNlbGYucmVsdSh4KQogICAgICAgIGZvciBsYXllciBpbiBzZWxmLmxheWVyc1sxOl06CiAgICAgICAgICAgIHggPSBsYXllcih4KQogICAgICAgICAgICB4ID0gc2VsZi5yZWx1KHgpCiAgICAgICAgaWYgc2VsZi5tdWx0aV9oZWFkOgogICAgICAgICAgICBvdXRwdXQgPSBbc2VsZi5vdXRwdXRfbGF5ZXJbdF0oeCkgZm9yIHQgaW4gcmFuZ2Uoc2VsZi5udW1fdGFza3MpXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG91dHB1dCA9IHNlbGYub3V0cHV0X2xheWVyKHgpCiAgICAgICAgcmV0dXJuIG91dHB1dCwgeAo8fGZpbV9zdWZmaXh8PgoKaW1wb3J0IGV4cGVyaW1lbnRzLnV0aWxzCgoKPHxmaW1fZW5kfD4="]
["822ff3fc26c71462417be8d2d6f73da4eb252229-3","822ff3fc26c71462417be8d2d6f73da4eb252229","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCmltcG9ydCB0b3JjaC5ubiBhcyBubgoKaW1wb3J0IGV4cGVyaW1lbnRzLnV0aWxzCgoKY2xhc3MgTUxQKG5uLk1vZHVsZSk6CiAgICAjIElmIG11bHRpX2hlYWQgaXMgZmFsc2UsIEEgc2luZ2xlIGhlYWQgaXMgY29uc3RydWN0ZWQgd2l0aCB0aGUgdG90YWwgbnVtYmVyIG9mIGNsYXNzZXMKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnB1dF9zaGFwZSwgbnVtX3Rhc2tzLCBjbGFzc2VzX3Blcl90YXNrLCBudW1faGlkZGVuX2xheWVycz0xLCBoaWRkZW5fc2l6ZXM9MTI4LAogICAgICAgICAgICAgICAgIG11bHRpX2hlYWQ9RmFsc2UpOgogICAgICAgIHN1cGVyKE1MUCwgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYuaGlkZGVuX3NpemVzID0gZXhwZXJpbWVudHMudXRpbHMuZXh0ZW5kX2xpc3QoaGlkZGVuX3NpemVzLCBudW1faGlkZGVuX2xheWVycykKICAgICAgICBzZWxmLmNsYXNzZXNfcGVyX3Rhc2sgPSBleHBlcmltZW50cy51dGlscy5leHRlbmRfbGlzdChjbGFzc2VzX3Blcl90YXNrLCBudW1fdGFza3MpCiAgICAgICAgc2VsZi5udW1faGlkZGVuX2xheWVycyA9IG51bV9oaWRkZW5fbGF5ZXJzCiAgICAgICAgc2VsZi5udW1fdGFza3MgPSBudW1fdGFza3MKICAgICAgICBzZWxmLm11bHRpX2hlYWQgPSBtdWx0aV9oZWFkCgogICAgICAgIHNlbGYubGF5ZXJzID0gbm4uTW9kdWxlTGlzdChbbm4uTGluZWFyKGlucHV0X3NoYXBlLCBzZWxmLmhpZGRlbl9zaXplc1swXSwgYmlhcz1UcnVlKV0pCiAgICAgICAgc2VsZi5sYXllcnMuZXh0ZW5kKG5uLk1vZHVsZUxpc3QoW25uLkxpbmVhcihzZWxmLmhpZGRlbl9zaXplc1tpXSwgc2VsZi5oaWRkZW5fc2l6ZXNbaSArIDFdLCBiaWFzPVRydWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYubnVtX2hpZGRlbl9sYXllcnMgLSAxKV0pKQogICAgICAgIGlmIHNlbGYubXVsdGlfaGVhZDoKICAgICAgICAgICAgc2VsZi5vdXRwdXRfbGF5ZXIgPSBubi5Nb2R1bGVMaXN0KAogICAgICAgICAgICAgICAgW25uLkxpbmVhcihzZWxmLmhpZGRlbl9zaXplc1stMV0sIG51bV9jbGFzc2VzKSBmb3IgbnVtX2NsYXNzZXMgaW4gc2VsZi5jbGFzc2VzX3Blcl90YXNrXSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLm91dHB1dF9sYXllciA9IG5uLkxpbmVhcihzZWxmLmhpZGRlbl9zaXplc1stMV0sIHN1bShzZWxmLmNsYXNzZXNfcGVyX3Rhc2spKQoKICAgICAgICBzZWxmLnJlbHUgPSB0b3JjaC5ubi5SZUxVKCkKCiAgICBkZWYgZm9yd2FyZChzZWxmLCBpbnB1dF8pOgogICAgICAgIHggPSBzZWxmLmxheWVyc1swXShpbnB1dF8pCiAgICAgICAgeCA9IHNlbGYucmVsdSh4KQogICAgICAgIGZvciBsYXllciBpbiBzZWxmLmxheWVyc1sxOl06CiAgICAgICAgICAgIHggPSBsYXllcih4KQogICAgICAgICAgICB4ID0gc2VsZi5yZWx1KHgpCiAgICAgICAgaWYgc2VsZi5tdWx0aV9oZWFkOgogICAgICAgICAgICBvdXRwdXQgPSBbc2VsZi5vdXRwdXRfbGF5ZXJbdF0oeCkgZm9yIHQgaW4gcmFuZ2Uoc2VsZi5udW1fdGFza3MpXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG91dHB1dCA9IHNlbGYub3V0cHV0X2xheWVyKHgpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICByZXR1cm4gb3V0cHV0LCB4Cjx8ZmltX2VuZHw+"]
["e54b20d5eb8f0351e078bfa6ff1726aa29e0cb21-1","e54b20d5eb8f0351e078bfa6ff1726aa29e0cb21","PHxmaW1fcHJlZml4fD4KZnJvbSBQSUwgaW1wb3J0IEltYWdlLEltYWdlRHJhdyxJbWFnZUZvbnQKZnJvbSByYW5kb20gaW1wb3J0IHJhbmRpbnQKaW1wb3J0IHN5cwoKaWYgbGVuKHN5cy5hcmd2KSA8IDI6CiAgICBwcmludCgiWW91IG5lZWQgYXQgbGVhc3QgMSBmaWxlIGFzIGFuIGFyZ3VtZW50IikKICAgIHN5cy5leGl0KDEpCgpmaWxlcyA9IHN5cy5hcmd2WzE6XQoKIyBkcmF3LnRleHRzaXplKDE0KQpXSURUSCxIRUlHSFQgPSAyMDAwLDIwMDAKZnVsbEltYWdlID0gSW1hZ2UubmV3KCJSR0JBIiwgKFdJRFRILEhFSUdIVCksICgwLDAsMCwyNTUpKQoKcFgscFkgPSAwLDAgIy1IRUlHSFQvMTAKaT0xCm9uQUxpbmUgPSAxMApzWCxzWSA9IFdJRFRIL29uQUxpbmUsSEVJR0hULyhsZW4oZmlsZXMpLyhvbkFMaW5lKSkKZm9yIGYgaW4gZmlsZXM6CiAgICBwcmludCgiQnVzeSBXaXRoICVzIiVmKQogICAgaW1hZ2UgPSBJbWFnZS5uZXcoIlJHQkEiLCAoV0lEVEgvMixIRUlHSFQpLCAoMCwwLDAsMCkpCjx8ZmltX2hvbGV8PgogICAgeT0xNQogICAgZm9yIGxpbmUgaW4gZmk6CiAgICAgICAgZHJhdy50ZXh0KCgyMCx5KSwgbGluZS5zdHJpcCgpLCBmaWxsPWMpCiAgICAgICAgeSs9MTUKICAgIGlUID0gaW1hZ2UgI2ltYWdlLnJvdGF0ZShyYW5kaW50KC0xNSwxNSksIHJlc2FtcGxlPUltYWdlLkJJTElORUFSLCBleHBhbmQ9VHJ1ZSkKICAgIGZ1bGxJbWFnZS5wYXN0ZShpVCwgYm94PShwWCxwWSksIG1hc2s9aVQpCiAgICBpZiBpID49IG9uQUxpbmU6CiAgICAgICAgaT0xCiAgICAgICAgcFgscFkgPSAwLHBZK3NZCiAgICBlbHNlOgogICAgICAgIGkrPTEKICAgICAgICBwWCs9c1gKCmZ1bGxJbWFnZS5zYXZlKCJ0ZXN0LnBuZyIpCjx8ZmltX3N1ZmZpeHw+CiAgICBkcmF3ID0gSW1hZ2VEcmF3LkRyYXcoaW1hZ2UpCiAgICBkcmF3LnNldGZvbnQoSW1hZ2VGb250LkZyZWVUeXBlRm9udChmaWxlPSJVYnVudHVNb25vLVIudHRmIiwgc2l6ZT0yMCkpCiAgICBmaSA9IG9wZW4oZiwgInIiKQogICAgYyA9IChyYW5kaW50KDEwMCwyMDApLHJhbmRpbnQoMTAwLDIwMCkscmFuZGludCgxMDAsMjAwKSwyMDApCjx8ZmltX2VuZHw+"]
["e54b20d5eb8f0351e078bfa6ff1726aa29e0cb21-2","e54b20d5eb8f0351e078bfa6ff1726aa29e0cb21","PHxmaW1fcHJlZml4fD4KZnJvbSBQSUwgaW1wb3J0IEltYWdlLEltYWdlRHJhdyxJbWFnZUZvbnQKZnJvbSByYW5kb20gaW1wb3J0IHJhbmRpbnQKaW1wb3J0IHN5cwoKaWYgbGVuKHN5cy5hcmd2KSA8IDI6CiAgICBwcmludCgiWW91IG5lZWQgYXQgbGVhc3QgMSBmaWxlIGFzIGFuIGFyZ3VtZW50IikKICAgIHN5cy5leGl0KDEpCgpmaWxlcyA9IHN5cy5hcmd2WzE6XQoKIyBkcmF3LnRleHRzaXplKDE0KQpXSURUSCxIRUlHSFQgPSAyMDAwLDIwMDAKZnVsbEltYWdlID0gSW1hZ2UubmV3KCJSR0JBIiwgKFdJRFRILEhFSUdIVCksICgwLDAsMCwyNTUpKQoKcFgscFkgPSAwLDAgIy1IRUlHSFQvMTAKaT0xCm9uQUxpbmUgPSAxMAo8fGZpbV9ob2xlfD4KICAgIGRyYXcgPSBJbWFnZURyYXcuRHJhdyhpbWFnZSkKICAgIGRyYXcuc2V0Zm9udChJbWFnZUZvbnQuRnJlZVR5cGVGb250KGZpbGU9IlVidW50dU1vbm8tUi50dGYiLCBzaXplPTIwKSkKICAgIGZpID0gb3BlbihmLCAiciIpCiAgICBjID0gKHJhbmRpbnQoMTAwLDIwMCkscmFuZGludCgxMDAsMjAwKSxyYW5kaW50KDEwMCwyMDApLDIwMCkKICAgIHk9MTUKICAgIGZvciBsaW5lIGluIGZpOgogICAgICAgIGRyYXcudGV4dCgoMjAseSksIGxpbmUuc3RyaXAoKSwgZmlsbD1jKQogICAgICAgIHkrPTE1CiAgICBpVCA9IGltYWdlICNpbWFnZS5yb3RhdGUocmFuZGludCgtMTUsMTUpLCByZXNhbXBsZT1JbWFnZS5CSUxJTkVBUiwgZXhwYW5kPVRydWUpCiAgICBmdWxsSW1hZ2UucGFzdGUoaVQsIGJveD0ocFgscFkpLCBtYXNrPWlUKQogICAgaWYgaSA+PSBvbkFMaW5lOgogICAgICAgIGk9MQogICAgICAgIHBYLHBZID0gMCxwWStzWQogICAgZWxzZToKICAgICAgICBpKz0xCiAgICAgICAgcFgrPXNYCgpmdWxsSW1hZ2Uuc2F2ZSgidGVzdC5wbmciKQo8fGZpbV9zdWZmaXh8PgpzWCxzWSA9IFdJRFRIL29uQUxpbmUsSEVJR0hULyhsZW4oZmlsZXMpLyhvbkFMaW5lKSkKZm9yIGYgaW4gZmlsZXM6CiAgICBwcmludCgiQnVzeSBXaXRoICVzIiVmKQogICAgaW1hZ2UgPSBJbWFnZS5uZXcoIlJHQkEiLCAoV0lEVEgvMixIRUlHSFQpLCAoMCwwLDAsMCkpCjx8ZmltX2VuZHw+"]
["e54b20d5eb8f0351e078bfa6ff1726aa29e0cb21-3","e54b20d5eb8f0351e078bfa6ff1726aa29e0cb21","PHxmaW1fcHJlZml4fD4KZnJvbSBQSUwgaW1wb3J0IEltYWdlLEltYWdlRHJhdyxJbWFnZUZvbnQKZnJvbSByYW5kb20gaW1wb3J0IHJhbmRpbnQKaW1wb3J0IHN5cwoKaWYgbGVuKHN5cy5hcmd2KSA8IDI6CiAgICBwcmludCgiWW91IG5lZWQgYXQgbGVhc3QgMSBmaWxlIGFzIGFuIGFyZ3VtZW50IikKICAgIHN5cy5leGl0KDEpCgpmaWxlcyA9IHN5cy5hcmd2WzE6XQoKIyBkcmF3LnRleHRzaXplKDE0KQpXSURUSCxIRUlHSFQgPSAyMDAwLDIwMDAKZnVsbEltYWdlID0gSW1hZ2UubmV3KCJSR0JBIiwgKFdJRFRILEhFSUdIVCksICgwLDAsMCwyNTUpKQoKcFgscFkgPSAwLDAgIy1IRUlHSFQvMTAKaT0xCm9uQUxpbmUgPSAxMApzWCxzWSA9IFdJRFRIL29uQUxpbmUsSEVJR0hULyhsZW4oZmlsZXMpLyhvbkFMaW5lKSkKZm9yIGYgaW4gZmlsZXM6CiAgICBwcmludCgiQnVzeSBXaXRoICVzIiVmKQogICAgaW1hZ2UgPSBJbWFnZS5uZXcoIlJHQkEiLCAoV0lEVEgvMixIRUlHSFQpLCAoMCwwLDAsMCkpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRyYXcgPSBJbWFnZURyYXcuRHJhdyhpbWFnZSkKICAgIGRyYXcuc2V0Zm9udChJbWFnZUZvbnQuRnJlZVR5cGVGb250KGZpbGU9IlVidW50dU1vbm8tUi50dGYiLCBzaXplPTIwKSkKICAgIGZpID0gb3BlbihmLCAiciIpCiAgICBjID0gKHJhbmRpbnQoMTAwLDIwMCkscmFuZGludCgxMDAsMjAwKSxyYW5kaW50KDEwMCwyMDApLDIwMCkKPHxmaW1fZW5kfD4="]
["e54b20d5eb8f0351e078bfa6ff1726aa29e0cb21-4","e54b20d5eb8f0351e078bfa6ff1726aa29e0cb21","PHxmaW1fcHJlZml4fD4KZnJvbSBQSUwgaW1wb3J0IEltYWdlLEltYWdlRHJhdyxJbWFnZUZvbnQKZnJvbSByYW5kb20gaW1wb3J0IHJhbmRpbnQKaW1wb3J0IHN5cwoKaWYgbGVuKHN5cy5hcmd2KSA8IDI6CiAgICBwcmludCgiWW91IG5lZWQgYXQgbGVhc3QgMSBmaWxlIGFzIGFuIGFyZ3VtZW50IikKICAgIHN5cy5leGl0KDEpCgpmaWxlcyA9IHN5cy5hcmd2WzE6XQoKIyBkcmF3LnRleHRzaXplKDE0KQpXSURUSCxIRUlHSFQgPSAyMDAwLDIwMDAKZnVsbEltYWdlID0gSW1hZ2UubmV3KCJSR0JBIiwgKFdJRFRILEhFSUdIVCksICgwLDAsMCwyNTUpKQoKcFgscFkgPSAwLDAgIy1IRUlHSFQvMTAKaT0xCm9uQUxpbmUgPSAxMApzWCxzWSA9IFdJRFRIL29uQUxpbmUsSEVJR0hULyhsZW4oZmlsZXMpLyhvbkFMaW5lKSkKZm9yIGYgaW4gZmlsZXM6CiAgICBwcmludCgiQnVzeSBXaXRoICVzIiVmKQogICAgaW1hZ2UgPSBJbWFnZS5uZXcoIlJHQkEiLCAoV0lEVEgvMixIRUlHSFQpLCAoMCwwLDAsMCkpCiAgICBkcmF3ID0gSW1hZ2VEcmF3LkRyYXcoaW1hZ2UpCiAgICBkcmF3LnNldGZvbnQoSW1hZ2VGb250LkZyZWVUeXBlRm9udChmaWxlPSJVYnVudHVNb25vLVIudHRmIiwgc2l6ZT0yMCkpCiAgICBmaSA9IG9wZW4oZiwgInIiKQogICAgYyA9IChyYW5kaW50KDEwMCwyMDApLHJhbmRpbnQoMTAwLDIwMCkscmFuZGludCgxMDAsMjAwKSwyMDApCiAgICB5PTE1CiAgICBmb3IgbGluZSBpbiBmaToKICAgICAgICBkcmF3LnRleHQoKDIwLHkpLCBsaW5lLnN0cmlwKCksIGZpbGw9YykKICAgICAgICB5Kz0xNQogICAgaVQgPSBpbWFnZSAjaW1hZ2Uucm90YXRlKHJhbmRpbnQoLTE1LDE1KSwgcmVzYW1wbGU9SW1hZ2UuQklMSU5FQVIsIGV4cGFuZD1UcnVlKQogICAgZnVsbEltYWdlLnBhc3RlKGlULCBib3g9KHBYLHBZKSwgbWFzaz1pVCkKICAgIGlmIGkgPj0gb25BTGluZToKICAgICAgICBpPTEKICAgICAgICBwWCxwWSA9IDAscFkrc1kKICAgIGVsc2U6CiAgICAgICAgaSs9MQogICAgICAgIHBYKz1zWAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpmdWxsSW1hZ2Uuc2F2ZSgidGVzdC5wbmciKQo8fGZpbV9lbmR8Pg=="]
["e54b20d5eb8f0351e078bfa6ff1726aa29e0cb21-5","e54b20d5eb8f0351e078bfa6ff1726aa29e0cb21","PHxmaW1fcHJlZml4fD4KZnJvbSBQSUwgaW1wb3J0IEltYWdlLEltYWdlRHJhdyxJbWFnZUZvbnQKZnJvbSByYW5kb20gaW1wb3J0IHJhbmRpbnQKaW1wb3J0IHN5cwoKaWYgbGVuKHN5cy5hcmd2KSA8IDI6CiAgICBwcmludCgiWW91IG5lZWQgYXQgbGVhc3QgMSBmaWxlIGFzIGFuIGFyZ3VtZW50IikKICAgIHN5cy5leGl0KDEpCgpmaWxlcyA9IHN5cy5hcmd2WzE6XQoKIyBkcmF3LnRleHRzaXplKDE0KQpXSURUSCxIRUlHSFQgPSAyMDAwLDIwMDAKPHxmaW1faG9sZXw+Cm9uQUxpbmUgPSAxMApzWCxzWSA9IFdJRFRIL29uQUxpbmUsSEVJR0hULyhsZW4oZmlsZXMpLyhvbkFMaW5lKSkKZm9yIGYgaW4gZmlsZXM6CiAgICBwcmludCgiQnVzeSBXaXRoICVzIiVmKQogICAgaW1hZ2UgPSBJbWFnZS5uZXcoIlJHQkEiLCAoV0lEVEgvMixIRUlHSFQpLCAoMCwwLDAsMCkpCiAgICBkcmF3ID0gSW1hZ2VEcmF3LkRyYXcoaW1hZ2UpCiAgICBkcmF3LnNldGZvbnQoSW1hZ2VGb250LkZyZWVUeXBlRm9udChmaWxlPSJVYnVudHVNb25vLVIudHRmIiwgc2l6ZT0yMCkpCiAgICBmaSA9IG9wZW4oZiwgInIiKQogICAgYyA9IChyYW5kaW50KDEwMCwyMDApLHJhbmRpbnQoMTAwLDIwMCkscmFuZGludCgxMDAsMjAwKSwyMDApCiAgICB5PTE1CiAgICBmb3IgbGluZSBpbiBmaToKICAgICAgICBkcmF3LnRleHQoKDIwLHkpLCBsaW5lLnN0cmlwKCksIGZpbGw9YykKICAgICAgICB5Kz0xNQogICAgaVQgPSBpbWFnZSAjaW1hZ2Uucm90YXRlKHJhbmRpbnQoLTE1LDE1KSwgcmVzYW1wbGU9SW1hZ2UuQklMSU5FQVIsIGV4cGFuZD1UcnVlKQogICAgZnVsbEltYWdlLnBhc3RlKGlULCBib3g9KHBYLHBZKSwgbWFzaz1pVCkKICAgIGlmIGkgPj0gb25BTGluZToKICAgICAgICBpPTEKICAgICAgICBwWCxwWSA9IDAscFkrc1kKICAgIGVsc2U6CiAgICAgICAgaSs9MQogICAgICAgIHBYKz1zWAoKZnVsbEltYWdlLnNhdmUoInRlc3QucG5nIikKPHxmaW1fc3VmZml4fD4KZnVsbEltYWdlID0gSW1hZ2UubmV3KCJSR0JBIiwgKFdJRFRILEhFSUdIVCksICgwLDAsMCwyNTUpKQoKcFgscFkgPSAwLDAgIy1IRUlHSFQvMTAKaT0xCjx8ZmltX2VuZHw+"]
["c15930f2f5c46d75e3b7bad06d3a8ebda29e084c-1","c15930f2f5c46d75e3b7bad06d3a8ebda29e084c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCBqc29uCmZyb20gbW9jayBpbXBvcnQgTW9jawoKZnJvbSB3ZXh0cmFjdG9yLmxvYWRlcnMucG9zdGdyZXMgaW1wb3J0IFBvc3RncmVzTG9hZGVyCgpjbGFzcyBUZXN0UG9zdGdyZXNMb2FkZXJOb1JlbGF0aW9uc2hpcHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIHNlbGYubG9hZGVyID0gUG9zdGdyZXNMb2FkZXIoCiAgICAgICAgICAgIHsnZGF0YWJhc2UnOiAnZHVtbXlfZGInLCAndXNlcic6ICdkdW1teV91c2VyJ30sCiAgICAgICAgICAgIHNjaGVtYT1bewogICAgICAgICAgICAgICAgJ3RhYmxlX25hbWUnOiAndGVzdCcsCiAgICAgICAgICAgICAgICAncGtleSc6IE5vbmUsCiAgICAgICAgICAgICAgICAnY29sdW1ucyc6ICgKICAgICAgICAgICAgICAgICAgICAoJ2ZvbycsICdURVhUJyksCiAgICAgICAgICAgICAgICAgICAgKCdiYXInLCAnVEVYVCcpCiAgICAgICAgICAgICAgICApCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgfV0KPHxmaW1fZW5kfD4="]
["c15930f2f5c46d75e3b7bad06d3a8ebda29e084c-2","c15930f2f5c46d75e3b7bad06d3a8ebda29e084c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCBqc29uCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBtb2NrIGltcG9ydCBNb2NrCgpmcm9tIHdleHRyYWN0b3IubG9hZGVycy5wb3N0Z3JlcyBpbXBvcnQgUG9zdGdyZXNMb2FkZXIKCjx8ZmltX2VuZHw+"]
["82075174215fbf7c130e7061e1dedbf3a7b03143-1","82075174215fbf7c130e7061e1dedbf3a7b03143","PHxmaW1fcHJlZml4fD4KIyAlJQppbXBvcnQgbGllZgpmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IFNURE9VVCwgQ2FsbGVkUHJvY2Vzc0Vycm9yLCBjaGVja19vdXRwdXQKCgpkZWYgYWxpZ24oeCwgYWwpOgogICAgIiIiIHJldHVybiA8eD4gYWxpZ25lZCB0byA8YWw+ICIiIgogICAgcmV0dXJuICgoeCsoYWwtMSkpLy9hbCkqYWwKCgojICUlCiMgY29tcGlsZSBvcmlnaW4gZGVtbyBwcm9ncmFtCnRyeToKICAgIGNoZWNrX291dHB1dCgnZ2NjIGV4YW1wbGUuYyAtbTMyIC1PMiAtbyBleGFtcGxlLmV4ZScsIHNoZWxsPVRydWUsIHN0ZGVycj1TVERPVVQpCmV4Y2VwdCBDYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKICAgIHByaW50KGYnWyFdIGRlbW8gcHJvZ3JhbSBjb21waWxhdGlvbiBmYWlsZWQsIHtlLnN0ZG91dC5kZWNvZGUoKX0nKQogICAgcmFpc2UKCmJpbmFyeSA9IGxpZWYuUEUucGFyc2UoJ2V4YW1wbGUuZXhlJykKcHJpbnQoJ1srXSBjb21waWxlIG9yaWdpbiBkZW1vIHByb2dyYW0gc3VjY2Vzcy4nKQoKIyAlJQojIGNhbGN1bGF0ZSBzaGlmdCBvZmZzZXQgYW5kIHJlc2VydmVkIHNlY3Rpb24gc2l6ZQppbWFnZV9iYXNlID0gYmluYXJ5Lm9wdGlvbmFsX2hlYWRlci5pbWFnZWJhc2UKbG93ZXN0X3J2YSA9IG1pbihbcy52aXJ0dWFsX2FkZHJlc3MgZm9yIHMgaW4gYmluYXJ5LnNlY3Rpb25zXSkKaGlnaGVzdF9ydmEgPSBtYXgoW3MudmlydHVhbF9hZGRyZXNzICsgcy5zaXplIGZvciBzIGluIGJpbmFyeS5zZWN0aW9uc10pCnNlY3RfYWxpZ25tZW50ID0gYmluYXJ5Lm9wdGlvbmFsX2hlYWRlci5zZWN0aW9uX2FsaWdubWVudApwcmludCgnWytdIGFuYWx5emUgb3JpZ2luIGRlbW8gcHJvZ3JhbSBiaW5hcnkgc3VjY2Vzcy4nKQoKIyAlJQojIGNvbXBpbGUgc2hpZnRlZCBsb2FkZXIgcHJvZ3JhbQpjb21waWxlX2FyZ3MgPSBbCiAgICAnbG9hZGVyLmMnLAogICAgJy1tMzInLAogICAgJy1PMicsCiAgICAnLVdhbGwnLAogICAgJy1XbCwtLWVudHJ5PV9fc3RhcnQnLAogICAgJy1ub2RlZmF1bHRsaWJzJywKICAgICctbm9zdGFydGZpbGVzJywKICAgICctbGtlcm5lbDMyJywKICAgICctbHVzZXIzMicsCiAgICBmJy1XbCwtLWltYWdlLWJhc2U9e2hleChpbWFnZV9iYXNlKX0nLAogICAgZictV2wsLS1zZWN0aW9uLXN0YXJ0PS50ZXh0PXtoZXgoYWxpZ24oaW1hZ2VfYmFzZStoaWdoZXN0X3J2YSxzZWN0X2FsaWdubWVudCkpfScsCiAgICAnLW8nLAogICAgJ3NoaWZ0ZWQtbG9hZGVyLmV4ZScKXQoKdHJ5OgogICAgY2hlY2tfb3V0cHV0KCcgJy5qb2luKFsnZ2NjJywgKmNvbXBpbGVfYXJnc10pLCBzaGVsbD1UcnVlLCBzdGRlcnI9U1RET1VUKQogICAgcHJpbnQoJ1srXSBjb21waWxlIHNoaWZ0ZWQgbG9hZGVyIHByb2dyYW0gc3VjY2Vzcy4nKQpleGNlcHQgQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CiAgICBwcmludChmJ1shXSBsb2FkZXIgY29tcGlsYXRpb24gZmFpbGVkLCB7ZS5zdGRvdXQuZGVjb2RlKCl9JykKICAgIHJhaXNlCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCnNoaWZ0ZWRfbG9hZGVyID0gbGllZi5QRS5wYXJzZSgnc2hpZnRlZC1sb2FkZXIuZXhlJykKc2VjdF9hbGlnbm1lbnQgPSBzaGlmdGVkX2xvYWRlci5vcHRpb25hbF9oZWFkZXIuc2VjdGlvbl9hbGlnbm1lbnQKZmlsZV9hbGlnbm1lbnQgPSBzaGlmdGVkX2xvYWRlci5vcHRpb25hbF9oZWFkZXIuZmlsZV9hbGlnbm1lbnQKPHxmaW1fZW5kfD4="]
["82075174215fbf7c130e7061e1dedbf3a7b03143-2","82075174215fbf7c130e7061e1dedbf3a7b03143","PHxmaW1fcHJlZml4fD4KIyAlJQppbXBvcnQgbGllZgpmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IFNURE9VVCwgQ2FsbGVkUHJvY2Vzc0Vycm9yLCBjaGVja19vdXRwdXQKCgpkZWYgYWxpZ24oeCwgYWwpOgogICAgIiIiIHJldHVybiA8eD4gYWxpZ25lZCB0byA8YWw+ICIiIgogICAgcmV0dXJuICgoeCsoYWwtMSkpLy9hbCkqYWwKCgojICUlCiMgY29tcGlsZSBvcmlnaW4gZGVtbyBwcm9ncmFtCnRyeToKICAgIGNoZWNrX291dHB1dCgnZ2NjIGV4YW1wbGUuYyAtbTMyIC1PMiAtbyBleGFtcGxlLmV4ZScsIHNoZWxsPVRydWUsIHN0ZGVycj1TVERPVVQpCmV4Y2VwdCBDYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKICAgIHByaW50KGYnWyFdIGRlbW8gcHJvZ3JhbSBjb21waWxhdGlvbiBmYWlsZWQsIHtlLnN0ZG91dC5kZWNvZGUoKX0nKQogICAgcmFpc2UKCmJpbmFyeSA9IGxpZWYuUEUucGFyc2UoJ2V4YW1wbGUuZXhlJykKcHJpbnQoJ1srXSBjb21waWxlIG9yaWdpbiBkZW1vIHByb2dyYW0gc3VjY2Vzcy4nKQoKIyAlJQojIGNhbGN1bGF0ZSBzaGlmdCBvZmZzZXQgYW5kIHJlc2VydmVkIHNlY3Rpb24gc2l6ZQppbWFnZV9iYXNlID0gYmluYXJ5Lm9wdGlvbmFsX2hlYWRlci5pbWFnZWJhc2UKbG93ZXN0X3J2YSA9IG1pbihbcy52aXJ0dWFsX2FkZHJlc3MgZm9yIHMgaW4gYmluYXJ5LnNlY3Rpb25zXSkKaGlnaGVzdF9ydmEgPSBtYXgoW3MudmlydHVhbF9hZGRyZXNzICsgcy5zaXplIGZvciBzIGluIGJpbmFyeS5zZWN0aW9uc10pCnNlY3RfYWxpZ25tZW50ID0gYmluYXJ5Lm9wdGlvbmFsX2hlYWRlci5zZWN0aW9uX2FsaWdubWVudApwcmludCgnWytdIGFuYWx5emUgb3JpZ2luIGRlbW8gcHJvZ3JhbSBiaW5hcnkgc3VjY2Vzcy4nKQoKIyAlJQojIGNvbXBpbGUgc2hpZnRlZCBsb2FkZXIgcHJvZ3JhbQpjb21waWxlX2FyZ3MgPSBbCiAgICAnbG9hZGVyLmMnLAogICAgJy1tMzInLAogICAgJy1PMicsCiAgICAnLVdhbGwnLAogICAgJy1XbCwtLWVudHJ5PV9fc3RhcnQnLAogICAgJy1ub2RlZmF1bHRsaWJzJywKICAgICctbm9zdGFydGZpbGVzJywKICAgICctbGtlcm5lbDMyJywKICAgICctbHVzZXIzMicsCiAgICBmJy1XbCwtLWltYWdlLWJhc2U9e2hleChpbWFnZV9iYXNlKX0nLAogICAgZictV2wsLS1zZWN0aW9uLXN0YXJ0PS50ZXh0PXtoZXgoYWxpZ24oaW1hZ2VfYmFzZStoaWdoZXN0X3J2YSxzZWN0X2FsaWdubWVudCkpfScsCiAgICAnLW8nLAogICAgJ3NoaWZ0ZWQtbG9hZGVyLmV4ZScKXQoKdHJ5OgogICAgY2hlY2tfb3V0cHV0KCcgJy5qb2luKFsnZ2NjJywgKmNvbXBpbGVfYXJnc10pLCBzaGVsbD1UcnVlLCBzdGRlcnI9U1RET1VUKQogICAgcHJpbnQoJ1srXSBjb21waWxlIHNoaWZ0ZWQgbG9hZGVyIHByb2dyYW0gc3VjY2Vzcy4nKQpleGNlcHQgQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CiAgICBwcmludChmJ1shXSBsb2FkZXIgY29tcGlsYXRpb24gZmFpbGVkLCB7ZS5zdGRvdXQuZGVjb2RlKCl9JykKICAgIHJhaXNlCgpzaGlmdGVkX2xvYWRlciA9IGxpZWYuUEUucGFyc2UoJ3NoaWZ0ZWQtbG9hZGVyLmV4ZScpCnNlY3RfYWxpZ25tZW50ID0gc2hpZnRlZF9sb2FkZXIub3B0aW9uYWxfaGVhZGVyLnNlY3Rpb25fYWxpZ25tZW50CmZpbGVfYWxpZ25tZW50ID0gc2hpZnRlZF9sb2FkZXIub3B0aW9uYWxfaGVhZGVyLmZpbGVfYWxpZ25tZW50CgojICUlCiMgY3JlYXRlIG5ldyBiaW5hcnkgZnJvbSBzY3JhdGNoCm91dHB1dCA9IGxpZWYuUEUuQmluYXJ5KCdwYWNrZWQnLCBsaWVmLlBFLlBFX1RZUEUuUEUzMikKCiMgY29weSBlc3NlbnRpYWwgZmllbGRzIGZyb20gc2hpZnRlZF9sb2FkZXIKb3V0cHV0Lm9wdGlvbmFsX2hlYWRlci5pbWFnZWJhc2UgPSBzaGlmdGVkX2xvYWRlci5vcHRpb25hbF9oZWFkZXIuaW1hZ2ViYXNlCm91dHB1dC5vcHRpb25hbF9oZWFkZXIuc2VjdGlvbl9hbGlnbm1lbnQgPSBzaGlmdGVkX2xvYWRlci5vcHRpb25hbF9oZWFkZXIuc2VjdGlvbl9hbGlnbm1lbnQKb3V0cHV0Lm9wdGlvbmFsX2hlYWRlci5maWxlX2FsaWdubWVudCA9IHNoaWZ0ZWRfbG9hZGVyLm9wdGlvbmFsX2hlYWRlci5maWxlX2FsaWdubWVudAoKIyBkaXNhYmxlIEFTTFIKb3V0cHV0Lm9wdGlvbmFsX2hlYWRlci5kbGxfY2hhcmFjdGVyaXN0aWNzID0gMAoKIyBhZGQgLmFsbG9jIHNlY3Rpb24KYWxsb2NhdGVfc2l6ZSA9IGFsaWduKGhpZ2hlc3RfcnZhLWxvd2VzdF9ydmEsIHNlY3RfYWxpZ25tZW50KQphbGxvY2F0ZV9zZWN0aW9uID0gbGllZi5QRS5TZWN0aW9uKCIuYWxsb2MiKQphbGxvY2F0ZV9zZWN0aW9uLnZpcnR1YWxfYWRkcmVzcyA9IGxvd2VzdF9ydmEKYWxsb2NhdGVfc2VjdGlvbi52aXJ0dWFsX3NpemUgPSBhbGxvY2F0ZV9zaXplCmFsbG9jYXRlX3NlY3Rpb24uY2hhcmFjdGVyaXN0aWNzID0gKGxpZWYuUEUuU0VDVElPTl9DSEFSQUNURVJJU1RJQ1MuTUVNX1JFQUQKPHxmaW1faG9sZXw+Cm91dHB1dC5hZGRfc2VjdGlvbihhbGxvY2F0ZV9zZWN0aW9uKQoKIyBjb3B5IHNlY3Rpb25zCmZvciBzIGluIHNoaWZ0ZWRfbG9hZGVyLnNlY3Rpb25zOgogICAgIyBsZXQgbGllZiByZWNhbGN1bGF0ZSBzZWN0aW9uIG9mZnNldCBhbmQgc2l6ZW9mIHJhdyBkYXRhCiAgICBzLm9mZnNldCA9IDAKICAgIHMuc2l6ZW9mX3Jhd19kYXRhID0gMAogICAgb3V0cHV0LmFkZF9zZWN0aW9uKHMpCgojIGFkZCBwYWNrZWQgc2VjdGlvbgp3aXRoIG9wZW4oJ2V4YW1wbGUuZXhlJywgJ3JiJykgYXMgZjoKICAgIHBhY2tlZF9zZWN0aW9uID0gbGllZi5QRS5TZWN0aW9uKCcucGFja2VkJykKICAgIHBhY2tlZF9zZWN0aW9uLmNvbnRlbnQgPSBsaXN0KGYucmVhZCgpKQogICAgcGFja2VkX3NlY3Rpb24uY2hhcmFjdGVyaXN0aWNzID0gKGxpZWYuUEUuU0VDVElPTl9DSEFSQUNURVJJU1RJQ1MuTUVNX1JFQUQgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZWYuUEUuU0VDVElPTl9DSEFSQUNURVJJU1RJQ1MuQ05UX0lOSVRJQUxJWkVEX0RBVEEpCiAgICBvdXRwdXQuYWRkX3NlY3Rpb24ocGFja2VkX3NlY3Rpb24pCgojIGNvcHkgZGF0YSBkaXJlY3Rvcmllcwpmb3IgaSBpbiByYW5nZSgwLCAxNSk6CiAgICBzcmMgPSBzaGlmdGVkX2xvYWRlci5kYXRhX2RpcmVjdG9yaWVzW2ldCiAgICBvdXRwdXQuZGF0YV9kaXJlY3Rvcmllc1tpXS5ydmEgPSBzcmMucnZhCiAgICBvdXRwdXQuZGF0YV9kaXJlY3Rvcmllc1tpXS5zaXplID0gc3JjLnNpemUKCiMgY29ycmVjdCBudW1iZXIgb2YgZGF0YSBkaXJlY3RvcmllcwojIHdhcm5pbmc6IHNpemUgb2YgZGF0YSBkaXJlY3RvcmllcyBtYXkgZGlzYWdyZWUgd2l0aCBJTUFHRV9OVF9IRUFERVJTLkRhdGFEaXJlY3RvcnkgaW4gd2lubnQuaApvdXRwdXQub3B0aW9uYWxfaGVhZGVyLm51bWJlcm9mX3J2YV9hbmRfc2l6ZSA9IGxlbihvdXRwdXQuZGF0YV9kaXJlY3RvcmllcykKIyBjb3B5IG9yaWdpbmFsIGFkZHJlc3Mgb2YgZW50cnlwb2ludApvdXRwdXQub3B0aW9uYWxfaGVhZGVyLmFkZHJlc3NvZl9lbnRyeXBvaW50ID0gc2hpZnRlZF9sb2FkZXIub3B0aW9uYWxfaGVhZGVyLmFkZHJlc3NvZl9lbnRyeXBvaW50CiMgbGV0IGxpZWYgcmVjYWxjdWxhdGUgc2l6ZSBvZiBpbWFnZQpvdXRwdXQub3B0aW9uYWxfaGVhZGVyLnNpemVvZl9pbWFnZSA9IDAKCiMgYnVpbGQgb3V0cHV0IGJpbmFyeQpidWlsZGVyID0gbGllZi5QRS5CdWlsZGVyKG91dHB1dCkKYnVpbGRlci5idWlsZCgpCmJ1aWxkZXIud3JpdGUoJ3BhY2tlZC5leGUnKQpwcmludCgnWytdIGNyZWF0ZSBwYWNrZWQgYmluYXJ5IHN1Y2Nlc3MuJykKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBsaWVmLlBFLlNFQ1RJT05fQ0hBUkFDVEVSSVNUSUNTLk1FTV9XUklURQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGxpZWYuUEUuU0VDVElPTl9DSEFSQUNURVJJU1RJQ1MuQ05UX1VOSU5JVElBTElaRURfREFUQSkKPHxmaW1fZW5kfD4="]
["82075174215fbf7c130e7061e1dedbf3a7b03143-3","82075174215fbf7c130e7061e1dedbf3a7b03143","PHxmaW1fcHJlZml4fD4KIyAlJQppbXBvcnQgbGllZgpmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IFNURE9VVCwgQ2FsbGVkUHJvY2Vzc0Vycm9yLCBjaGVja19vdXRwdXQKCgpkZWYgYWxpZ24oeCwgYWwpOgogICAgIiIiIHJldHVybiA8eD4gYWxpZ25lZCB0byA8YWw+ICIiIgogICAgcmV0dXJuICgoeCsoYWwtMSkpLy9hbCkqYWwKCgojICUlCiMgY29tcGlsZSBvcmlnaW4gZGVtbyBwcm9ncmFtCnRyeToKICAgIGNoZWNrX291dHB1dCgnZ2NjIGV4YW1wbGUuYyAtbTMyIC1PMiAtbyBleGFtcGxlLmV4ZScsIHNoZWxsPVRydWUsIHN0ZGVycj1TVERPVVQpCmV4Y2VwdCBDYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKICAgIHByaW50KGYnWyFdIGRlbW8gcHJvZ3JhbSBjb21waWxhdGlvbiBmYWlsZWQsIHtlLnN0ZG91dC5kZWNvZGUoKX0nKQogICAgcmFpc2UKCmJpbmFyeSA9IGxpZWYuUEUucGFyc2UoJ2V4YW1wbGUuZXhlJykKcHJpbnQoJ1srXSBjb21waWxlIG9yaWdpbiBkZW1vIHByb2dyYW0gc3VjY2Vzcy4nKQoKIyAlJQojIGNhbGN1bGF0ZSBzaGlmdCBvZmZzZXQgYW5kIHJlc2VydmVkIHNlY3Rpb24gc2l6ZQppbWFnZV9iYXNlID0gYmluYXJ5Lm9wdGlvbmFsX2hlYWRlci5pbWFnZWJhc2UKbG93ZXN0X3J2YSA9IG1pbihbcy52aXJ0dWFsX2FkZHJlc3MgZm9yIHMgaW4gYmluYXJ5LnNlY3Rpb25zXSkKaGlnaGVzdF9ydmEgPSBtYXgoW3MudmlydHVhbF9hZGRyZXNzICsgcy5zaXplIGZvciBzIGluIGJpbmFyeS5zZWN0aW9uc10pCnNlY3RfYWxpZ25tZW50ID0gYmluYXJ5Lm9wdGlvbmFsX2hlYWRlci5zZWN0aW9uX2FsaWdubWVudApwcmludCgnWytdIGFuYWx5emUgb3JpZ2luIGRlbW8gcHJvZ3JhbSBiaW5hcnkgc3VjY2Vzcy4nKQoKIyAlJQojIGNvbXBpbGUgc2hpZnRlZCBsb2FkZXIgcHJvZ3JhbQpjb21waWxlX2FyZ3MgPSBbCiAgICAnbG9hZGVyLmMnLAogICAgJy1tMzInLAogICAgJy1PMicsCiAgICAnLVdhbGwnLAogICAgJy1XbCwtLWVudHJ5PV9fc3RhcnQnLAogICAgJy1ub2RlZmF1bHRsaWJzJywKICAgICctbm9zdGFydGZpbGVzJywKICAgICctbGtlcm5lbDMyJywKICAgICctbHVzZXIzMicsCiAgICBmJy1XbCwtLWltYWdlLWJhc2U9e2hleChpbWFnZV9iYXNlKX0nLAogICAgZictV2wsLS1zZWN0aW9uLXN0YXJ0PS50ZXh0PXtoZXgoYWxpZ24oaW1hZ2VfYmFzZStoaWdoZXN0X3J2YSxzZWN0X2FsaWdubWVudCkpfScsCiAgICAnLW8nLAogICAgJ3NoaWZ0ZWQtbG9hZGVyLmV4ZScKXQoKdHJ5OgogICAgY2hlY2tfb3V0cHV0KCcgJy5qb2luKFsnZ2NjJywgKmNvbXBpbGVfYXJnc10pLCBzaGVsbD1UcnVlLCBzdGRlcnI9U1RET1VUKQogICAgcHJpbnQoJ1srXSBjb21waWxlIHNoaWZ0ZWQgbG9hZGVyIHByb2dyYW0gc3VjY2Vzcy4nKQpleGNlcHQgQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CiAgICBwcmludChmJ1shXSBsb2FkZXIgY29tcGlsYXRpb24gZmFpbGVkLCB7ZS5zdGRvdXQuZGVjb2RlKCl9JykKICAgIHJhaXNlCgpzaGlmdGVkX2xvYWRlciA9IGxpZWYuUEUucGFyc2UoJ3NoaWZ0ZWQtbG9hZGVyLmV4ZScpCnNlY3RfYWxpZ25tZW50ID0gc2hpZnRlZF9sb2FkZXIub3B0aW9uYWxfaGVhZGVyLnNlY3Rpb25fYWxpZ25tZW50CmZpbGVfYWxpZ25tZW50ID0gc2hpZnRlZF9sb2FkZXIub3B0aW9uYWxfaGVhZGVyLmZpbGVfYWxpZ25tZW50CgojICUlCiMgY3JlYXRlIG5ldyBiaW5hcnkgZnJvbSBzY3JhdGNoCm91dHB1dCA9IGxpZWYuUEUuQmluYXJ5KCdwYWNrZWQnLCBsaWVmLlBFLlBFX1RZUEUuUEUzMikKCiMgY29weSBlc3NlbnRpYWwgZmllbGRzIGZyb20gc2hpZnRlZF9sb2FkZXIKb3V0cHV0Lm9wdGlvbmFsX2hlYWRlci5pbWFnZWJhc2UgPSBzaGlmdGVkX2xvYWRlci5vcHRpb25hbF9oZWFkZXIuaW1hZ2ViYXNlCm91dHB1dC5vcHRpb25hbF9oZWFkZXIuc2VjdGlvbl9hbGlnbm1lbnQgPSBzaGlmdGVkX2xvYWRlci5vcHRpb25hbF9oZWFkZXIuc2VjdGlvbl9hbGlnbm1lbnQKb3V0cHV0Lm9wdGlvbmFsX2hlYWRlci5maWxlX2FsaWdubWVudCA9IHNoaWZ0ZWRfbG9hZGVyLm9wdGlvbmFsX2hlYWRlci5maWxlX2FsaWdubWVudAoKIyBkaXNhYmxlIEFTTFIKb3V0cHV0Lm9wdGlvbmFsX2hlYWRlci5kbGxfY2hhcmFjdGVyaXN0aWNzID0gMAoKIyBhZGQgLmFsbG9jIHNlY3Rpb24KYWxsb2NhdGVfc2l6ZSA9IGFsaWduKGhpZ2hlc3RfcnZhLWxvd2VzdF9ydmEsIHNlY3RfYWxpZ25tZW50KQphbGxvY2F0ZV9zZWN0aW9uID0gbGllZi5QRS5TZWN0aW9uKCIuYWxsb2MiKQphbGxvY2F0ZV9zZWN0aW9uLnZpcnR1YWxfYWRkcmVzcyA9IGxvd2VzdF9ydmEKYWxsb2NhdGVfc2VjdGlvbi52aXJ0dWFsX3NpemUgPSBhbGxvY2F0ZV9zaXplCmFsbG9jYXRlX3NlY3Rpb24uY2hhcmFjdGVyaXN0aWNzID0gKGxpZWYuUEUuU0VDVElPTl9DSEFSQUNURVJJU1RJQ1MuTUVNX1JFQUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBsaWVmLlBFLlNFQ1RJT05fQ0hBUkFDVEVSSVNUSUNTLk1FTV9XUklURQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGxpZWYuUEUuU0VDVElPTl9DSEFSQUNURVJJU1RJQ1MuQ05UX1VOSU5JVElBTElaRURfREFUQSkKb3V0cHV0LmFkZF9zZWN0aW9uKGFsbG9jYXRlX3NlY3Rpb24pCgojIGNvcHkgc2VjdGlvbnMKZm9yIHMgaW4gc2hpZnRlZF9sb2FkZXIuc2VjdGlvbnM6CiAgICAjIGxldCBsaWVmIHJlY2FsY3VsYXRlIHNlY3Rpb24gb2Zmc2V0IGFuZCBzaXplb2YgcmF3IGRhdGEKICAgIHMub2Zmc2V0ID0gMAogICAgcy5zaXplb2ZfcmF3X2RhdGEgPSAwCiAgICBvdXRwdXQuYWRkX3NlY3Rpb24ocykKCjx8ZmltX2hvbGV8PgogICAgcGFja2VkX3NlY3Rpb24uY2hhcmFjdGVyaXN0aWNzID0gKGxpZWYuUEUuU0VDVElPTl9DSEFSQUNURVJJU1RJQ1MuTUVNX1JFQUQgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZWYuUEUuU0VDVElPTl9DSEFSQUNURVJJU1RJQ1MuQ05UX0lOSVRJQUxJWkVEX0RBVEEpCiAgICBvdXRwdXQuYWRkX3NlY3Rpb24ocGFja2VkX3NlY3Rpb24pCgojIGNvcHkgZGF0YSBkaXJlY3Rvcmllcwpmb3IgaSBpbiByYW5nZSgwLCAxNSk6CiAgICBzcmMgPSBzaGlmdGVkX2xvYWRlci5kYXRhX2RpcmVjdG9yaWVzW2ldCiAgICBvdXRwdXQuZGF0YV9kaXJlY3Rvcmllc1tpXS5ydmEgPSBzcmMucnZhCiAgICBvdXRwdXQuZGF0YV9kaXJlY3Rvcmllc1tpXS5zaXplID0gc3JjLnNpemUKCiMgY29ycmVjdCBudW1iZXIgb2YgZGF0YSBkaXJlY3RvcmllcwojIHdhcm5pbmc6IHNpemUgb2YgZGF0YSBkaXJlY3RvcmllcyBtYXkgZGlzYWdyZWUgd2l0aCBJTUFHRV9OVF9IRUFERVJTLkRhdGFEaXJlY3RvcnkgaW4gd2lubnQuaApvdXRwdXQub3B0aW9uYWxfaGVhZGVyLm51bWJlcm9mX3J2YV9hbmRfc2l6ZSA9IGxlbihvdXRwdXQuZGF0YV9kaXJlY3RvcmllcykKIyBjb3B5IG9yaWdpbmFsIGFkZHJlc3Mgb2YgZW50cnlwb2ludApvdXRwdXQub3B0aW9uYWxfaGVhZGVyLmFkZHJlc3NvZl9lbnRyeXBvaW50ID0gc2hpZnRlZF9sb2FkZXIub3B0aW9uYWxfaGVhZGVyLmFkZHJlc3NvZl9lbnRyeXBvaW50CiMgbGV0IGxpZWYgcmVjYWxjdWxhdGUgc2l6ZSBvZiBpbWFnZQpvdXRwdXQub3B0aW9uYWxfaGVhZGVyLnNpemVvZl9pbWFnZSA9IDAKCiMgYnVpbGQgb3V0cHV0IGJpbmFyeQpidWlsZGVyID0gbGllZi5QRS5CdWlsZGVyKG91dHB1dCkKYnVpbGRlci5idWlsZCgpCmJ1aWxkZXIud3JpdGUoJ3BhY2tlZC5leGUnKQpwcmludCgnWytdIGNyZWF0ZSBwYWNrZWQgYmluYXJ5IHN1Y2Nlc3MuJykKPHxmaW1fc3VmZml4fD4KIyBhZGQgcGFja2VkIHNlY3Rpb24Kd2l0aCBvcGVuKCdleGFtcGxlLmV4ZScsICdyYicpIGFzIGY6CiAgICBwYWNrZWRfc2VjdGlvbiA9IGxpZWYuUEUuU2VjdGlvbignLnBhY2tlZCcpCiAgICBwYWNrZWRfc2VjdGlvbi5jb250ZW50ID0gbGlzdChmLnJlYWQoKSkKPHxmaW1fZW5kfD4="]
["82075174215fbf7c130e7061e1dedbf3a7b03143-4","82075174215fbf7c130e7061e1dedbf3a7b03143","PHxmaW1fcHJlZml4fD4KIyAlJQppbXBvcnQgbGllZgpmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IFNURE9VVCwgQ2FsbGVkUHJvY2Vzc0Vycm9yLCBjaGVja19vdXRwdXQKCgpkZWYgYWxpZ24oeCwgYWwpOgogICAgIiIiIHJldHVybiA8eD4gYWxpZ25lZCB0byA8YWw+ICIiIgogICAgcmV0dXJuICgoeCsoYWwtMSkpLy9hbCkqYWwKCgojICUlCiMgY29tcGlsZSBvcmlnaW4gZGVtbyBwcm9ncmFtCnRyeToKICAgIGNoZWNrX291dHB1dCgnZ2NjIGV4YW1wbGUuYyAtbTMyIC1PMiAtbyBleGFtcGxlLmV4ZScsIHNoZWxsPVRydWUsIHN0ZGVycj1TVERPVVQpCmV4Y2VwdCBDYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKICAgIHByaW50KGYnWyFdIGRlbW8gcHJvZ3JhbSBjb21waWxhdGlvbiBmYWlsZWQsIHtlLnN0ZG91dC5kZWNvZGUoKX0nKQogICAgcmFpc2UKCmJpbmFyeSA9IGxpZWYuUEUucGFyc2UoJ2V4YW1wbGUuZXhlJykKcHJpbnQoJ1srXSBjb21waWxlIG9yaWdpbiBkZW1vIHByb2dyYW0gc3VjY2Vzcy4nKQoKIyAlJQojIGNhbGN1bGF0ZSBzaGlmdCBvZmZzZXQgYW5kIHJlc2VydmVkIHNlY3Rpb24gc2l6ZQppbWFnZV9iYXNlID0gYmluYXJ5Lm9wdGlvbmFsX2hlYWRlci5pbWFnZWJhc2UKbG93ZXN0X3J2YSA9IG1pbihbcy52aXJ0dWFsX2FkZHJlc3MgZm9yIHMgaW4gYmluYXJ5LnNlY3Rpb25zXSkKaGlnaGVzdF9ydmEgPSBtYXgoW3MudmlydHVhbF9hZGRyZXNzICsgcy5zaXplIGZvciBzIGluIGJpbmFyeS5zZWN0aW9uc10pCnNlY3RfYWxpZ25tZW50ID0gYmluYXJ5Lm9wdGlvbmFsX2hlYWRlci5zZWN0aW9uX2FsaWdubWVudApwcmludCgnWytdIGFuYWx5emUgb3JpZ2luIGRlbW8gcHJvZ3JhbSBiaW5hcnkgc3VjY2Vzcy4nKQoKIyAlJQojIGNvbXBpbGUgc2hpZnRlZCBsb2FkZXIgcHJvZ3JhbQpjb21waWxlX2FyZ3MgPSBbCiAgICAnbG9hZGVyLmMnLAogICAgJy1tMzInLAogICAgJy1PMicsCiAgICAnLVdhbGwnLAogICAgJy1XbCwtLWVudHJ5PV9fc3RhcnQnLAogICAgJy1ub2RlZmF1bHRsaWJzJywKICAgICctbm9zdGFydGZpbGVzJywKICAgICctbGtlcm5lbDMyJywKICAgICctbHVzZXIzMicsCiAgICBmJy1XbCwtLWltYWdlLWJhc2U9e2hleChpbWFnZV9iYXNlKX0nLAogICAgZictV2wsLS1zZWN0aW9uLXN0YXJ0PS50ZXh0PXtoZXgoYWxpZ24oaW1hZ2VfYmFzZStoaWdoZXN0X3J2YSxzZWN0X2FsaWdubWVudCkpfScsCiAgICAnLW8nLAogICAgJ3NoaWZ0ZWQtbG9hZGVyLmV4ZScKXQoKdHJ5OgogICAgY2hlY2tfb3V0cHV0KCcgJy5qb2luKFsnZ2NjJywgKmNvbXBpbGVfYXJnc10pLCBzaGVsbD1UcnVlLCBzdGRlcnI9U1RET1VUKQogICAgcHJpbnQoJ1srXSBjb21waWxlIHNoaWZ0ZWQgbG9hZGVyIHByb2dyYW0gc3VjY2Vzcy4nKQpleGNlcHQgQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CiAgICBwcmludChmJ1shXSBsb2FkZXIgY29tcGlsYXRpb24gZmFpbGVkLCB7ZS5zdGRvdXQuZGVjb2RlKCl9JykKICAgIHJhaXNlCgpzaGlmdGVkX2xvYWRlciA9IGxpZWYuUEUucGFyc2UoJ3NoaWZ0ZWQtbG9hZGVyLmV4ZScpCnNlY3RfYWxpZ25tZW50ID0gc2hpZnRlZF9sb2FkZXIub3B0aW9uYWxfaGVhZGVyLnNlY3Rpb25fYWxpZ25tZW50CmZpbGVfYWxpZ25tZW50ID0gc2hpZnRlZF9sb2FkZXIub3B0aW9uYWxfaGVhZGVyLmZpbGVfYWxpZ25tZW50CgojICUlCiMgY3JlYXRlIG5ldyBiaW5hcnkgZnJvbSBzY3JhdGNoCm91dHB1dCA9IGxpZWYuUEUuQmluYXJ5KCdwYWNrZWQnLCBsaWVmLlBFLlBFX1RZUEUuUEUzMikKCiMgY29weSBlc3NlbnRpYWwgZmllbGRzIGZyb20gc2hpZnRlZF9sb2FkZXIKb3V0cHV0Lm9wdGlvbmFsX2hlYWRlci5pbWFnZWJhc2UgPSBzaGlmdGVkX2xvYWRlci5vcHRpb25hbF9oZWFkZXIuaW1hZ2ViYXNlCm91dHB1dC5vcHRpb25hbF9oZWFkZXIuc2VjdGlvbl9hbGlnbm1lbnQgPSBzaGlmdGVkX2xvYWRlci5vcHRpb25hbF9oZWFkZXIuc2VjdGlvbl9hbGlnbm1lbnQKb3V0cHV0Lm9wdGlvbmFsX2hlYWRlci5maWxlX2FsaWdubWVudCA9IHNoaWZ0ZWRfbG9hZGVyLm9wdGlvbmFsX2hlYWRlci5maWxlX2FsaWdubWVudAoKIyBkaXNhYmxlIEFTTFIKb3V0cHV0Lm9wdGlvbmFsX2hlYWRlci5kbGxfY2hhcmFjdGVyaXN0aWNzID0gMAoKIyBhZGQgLmFsbG9jIHNlY3Rpb24KYWxsb2NhdGVfc2l6ZSA9IGFsaWduKGhpZ2hlc3RfcnZhLWxvd2VzdF9ydmEsIHNlY3RfYWxpZ25tZW50KQphbGxvY2F0ZV9zZWN0aW9uID0gbGllZi5QRS5TZWN0aW9uKCIuYWxsb2MiKQphbGxvY2F0ZV9zZWN0aW9uLnZpcnR1YWxfYWRkcmVzcyA9IGxvd2VzdF9ydmEKYWxsb2NhdGVfc2VjdGlvbi52aXJ0dWFsX3NpemUgPSBhbGxvY2F0ZV9zaXplCmFsbG9jYXRlX3NlY3Rpb24uY2hhcmFjdGVyaXN0aWNzID0gKGxpZWYuUEUuU0VDVElPTl9DSEFSQUNURVJJU1RJQ1MuTUVNX1JFQUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBsaWVmLlBFLlNFQ1RJT05fQ0hBUkFDVEVSSVNUSUNTLk1FTV9XUklURQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGxpZWYuUEUuU0VDVElPTl9DSEFSQUNURVJJU1RJQ1MuQ05UX1VOSU5JVElBTElaRURfREFUQSkKb3V0cHV0LmFkZF9zZWN0aW9uKGFsbG9jYXRlX3NlY3Rpb24pCgojIGNvcHkgc2VjdGlvbnMKZm9yIHMgaW4gc2hpZnRlZF9sb2FkZXIuc2VjdGlvbnM6CiAgICAjIGxldCBsaWVmIHJlY2FsY3VsYXRlIHNlY3Rpb24gb2Zmc2V0IGFuZCBzaXplb2YgcmF3IGRhdGEKICAgIHMub2Zmc2V0ID0gMAogICAgcy5zaXplb2ZfcmF3X2RhdGEgPSAwCiAgICBvdXRwdXQuYWRkX3NlY3Rpb24ocykKCiMgYWRkIHBhY2tlZCBzZWN0aW9uCndpdGggb3BlbignZXhhbXBsZS5leGUnLCAncmInKSBhcyBmOgogICAgcGFja2VkX3NlY3Rpb24gPSBsaWVmLlBFLlNlY3Rpb24oJy5wYWNrZWQnKQogICAgcGFja2VkX3NlY3Rpb24uY29udGVudCA9IGxpc3QoZi5yZWFkKCkpCiAgICBwYWNrZWRfc2VjdGlvbi5jaGFyYWN0ZXJpc3RpY3MgPSAobGllZi5QRS5TRUNUSU9OX0NIQVJBQ1RFUklTVElDUy5NRU1fUkVBRCB8Cjx8ZmltX2hvbGV8PgogICAgb3V0cHV0LmFkZF9zZWN0aW9uKHBhY2tlZF9zZWN0aW9uKQoKIyBjb3B5IGRhdGEgZGlyZWN0b3JpZXMKZm9yIGkgaW4gcmFuZ2UoMCwgMTUpOgogICAgc3JjID0gc2hpZnRlZF9sb2FkZXIuZGF0YV9kaXJlY3Rvcmllc1tpXQogICAgb3V0cHV0LmRhdGFfZGlyZWN0b3JpZXNbaV0ucnZhID0gc3JjLnJ2YQogICAgb3V0cHV0LmRhdGFfZGlyZWN0b3JpZXNbaV0uc2l6ZSA9IHNyYy5zaXplCgojIGNvcnJlY3QgbnVtYmVyIG9mIGRhdGEgZGlyZWN0b3JpZXMKIyB3YXJuaW5nOiBzaXplIG9mIGRhdGEgZGlyZWN0b3JpZXMgbWF5IGRpc2FncmVlIHdpdGggSU1BR0VfTlRfSEVBREVSUy5EYXRhRGlyZWN0b3J5IGluIHdpbm50LmgKb3V0cHV0Lm9wdGlvbmFsX2hlYWRlci5udW1iZXJvZl9ydmFfYW5kX3NpemUgPSBsZW4ob3V0cHV0LmRhdGFfZGlyZWN0b3JpZXMpCiMgY29weSBvcmlnaW5hbCBhZGRyZXNzIG9mIGVudHJ5cG9pbnQKb3V0cHV0Lm9wdGlvbmFsX2hlYWRlci5hZGRyZXNzb2ZfZW50cnlwb2ludCA9IHNoaWZ0ZWRfbG9hZGVyLm9wdGlvbmFsX2hlYWRlci5hZGRyZXNzb2ZfZW50cnlwb2ludAojIGxldCBsaWVmIHJlY2FsY3VsYXRlIHNpemUgb2YgaW1hZ2UKb3V0cHV0Lm9wdGlvbmFsX2hlYWRlci5zaXplb2ZfaW1hZ2UgPSAwCgojIGJ1aWxkIG91dHB1dCBiaW5hcnkKYnVpbGRlciA9IGxpZWYuUEUuQnVpbGRlcihvdXRwdXQpCmJ1aWxkZXIuYnVpbGQoKQpidWlsZGVyLndyaXRlKCdwYWNrZWQuZXhlJykKcHJpbnQoJ1srXSBjcmVhdGUgcGFja2VkIGJpbmFyeSBzdWNjZXNzLicpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGllZi5QRS5TRUNUSU9OX0NIQVJBQ1RFUklTVElDUy5DTlRfSU5JVElBTElaRURfREFUQSkKPHxmaW1fZW5kfD4="]
["1e206f5a95f5ea991a0ab0c4a2840bab48e0ebe1-1","1e206f5a95f5ea991a0ab0c4a2840bab48e0ebe1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKZnJvbSBjb3B5IGltcG9ydCBjb3B5CgojIEZpbGVzeXN0ZW0gICAgICAgICAgICAgIFNpemUgIFVzZWQgIEF2YWlsICBVc2UlCiMgJy9kZXYvZ3JpZC9ub2RlLXgwLXkwICAgICA5MFQgICA2OVQgICAgMjFUICAgNzYlJwoKeHMgPSAzNQp5cyA9IDI3CgpVU0VEID0gMApBVkFJTCA9IDEKClRBUkdFVCA9ICgwLCAwKQpTT1VSQ0UgPSAoeHMgLSAxLCAwKQojIFNPVVJDRV9BTU9VTlQgPSBub2Rlc1t4cyAtIDFdWzBdWzBdCgpub2RlcyA9IFtbTm9uZSBmb3IgXyBpbiByYW5nZSh5cyldIGZvciBfIGluIHJhbmdlKHhzKV0Kc3RhdGUgPSBbW05vbmUgZm9yIF8gaW4gcmFuZ2UoeXMpXSBmb3IgXyBpbiByYW5nZSh4cyldCgp3aXRoIG9wZW4oc3lzLmFyZ3ZbMV0pIGFzIGY6CiAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKCiAgICBmb3IgbGluZSBpbiBsaW5lczoKICAgICAgICAjIHByaW50IGxpbmUKICAgICAgICBub2RlLCBzaXplLCB1c2VkLCBhdmFpbCwgcGVyY2VudCA9IGxpbmUuc3BsaXQoKQoKICAgICAgICB1c2VkID0gaW50KHVzZWRbOi0xXSkKICAgICAgICBhdmFpbCA9IGludChhdmFpbFs6LTFdKQoKICAgICAgICBub2RleCA9IGludChub2RlLnNwbGl0KCItIilbMV1bMTpdKQogICAgICAgIG5vZGV5ID0gaW50KG5vZGUuc3BsaXQoIi0iKVsyXVsxOl0pCgogICAgICAgIG5vZGVzW25vZGV4XVtub2RleV0gPSBbdXNlZCwgYXZhaWxdCgpudmlhYmxlID0gMApmb3IgaSBpbiByYW5nZSh4cyk6CiAgICBmb3IgaiBpbiByYW5nZSh5cyk6CiAgICAgICAgbm9kZWEgPSAoaSwgaikKICAgICAgICBmb3IgbSBpbiByYW5nZSh4cyk6CiAgICAgICAgICAgIGZvciBuIGluIHJhbmdlKHlzKToKICAgICAgICAgICAgICAgIG5vZGViID0gKG0sIG4pCiAgICAgICAgICAgICAgICBpZiBub2RlYSA9PSBub2RlYjoKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgICAgIGlmIG5vZGVzW2ldW2pdW1VTRURdID09IDA6ICMgdXNlZCA9PSAwCiAgICAgICAgICAgICAgICAgICAgc3RhdGVbaV1bal0gPSAiXyIKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgICAgIGlmIG5vZGVzW2ldW2pdW1VTRURdIDw9IG5vZGVzW21dW25dW0FWQUlMXTogICAgIyBmaXJzdC51c2VkIDw9IHNlY29uZC5hdmFpbAogICAgICAgICAgICAgICAgICAgIG52aWFibGUgKz0gMQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgaWYgbm9kZXNbaV1bal1bVVNFRF0gPj0gMTAwOgogICAgICAgICAgICAgICAgICAgIHN0YXRlW2ldW2pdID0gIiMiCgo8fGZpbV9lbmR8Pg=="]
["1e206f5a95f5ea991a0ab0c4a2840bab48e0ebe1-2","1e206f5a95f5ea991a0ab0c4a2840bab48e0ebe1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKZnJvbSBjb3B5IGltcG9ydCBjb3B5CgojIEZpbGVzeXN0ZW0gICAgICAgICAgICAgIFNpemUgIFVzZWQgIEF2YWlsICBVc2UlCjx8ZmltX2hvbGV8PgoKVVNFRCA9IDAKQVZBSUwgPSAxCgpUQVJHRVQgPSAoMCwgMCkKU09VUkNFID0gKHhzIC0gMSwgMCkKIyBTT1VSQ0VfQU1PVU5UID0gbm9kZXNbeHMgLSAxXVswXVswXQoKbm9kZXMgPSBbW05vbmUgZm9yIF8gaW4gcmFuZ2UoeXMpXSBmb3IgXyBpbiByYW5nZSh4cyldCnN0YXRlID0gW1tOb25lIGZvciBfIGluIHJhbmdlKHlzKV0gZm9yIF8gaW4gcmFuZ2UoeHMpXQoKd2l0aCBvcGVuKHN5cy5hcmd2WzFdKSBhcyBmOgogICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCgogICAgZm9yIGxpbmUgaW4gbGluZXM6CiAgICAgICAgIyBwcmludCBsaW5lCiAgICAgICAgbm9kZSwgc2l6ZSwgdXNlZCwgYXZhaWwsIHBlcmNlbnQgPSBsaW5lLnNwbGl0KCkKCiAgICAgICAgdXNlZCA9IGludCh1c2VkWzotMV0pCiAgICAgICAgYXZhaWwgPSBpbnQoYXZhaWxbOi0xXSkKCiAgICAgICAgbm9kZXggPSBpbnQobm9kZS5zcGxpdCgiLSIpWzFdWzE6XSkKICAgICAgICBub2RleSA9IGludChub2RlLnNwbGl0KCItIilbMl1bMTpdKQoKICAgICAgICBub2Rlc1tub2RleF1bbm9kZXldID0gW3VzZWQsIGF2YWlsXQoKbnZpYWJsZSA9IDAKZm9yIGkgaW4gcmFuZ2UoeHMpOgogICAgZm9yIGogaW4gcmFuZ2UoeXMpOgogICAgICAgIG5vZGVhID0gKGksIGopCiAgICAgICAgZm9yIG0gaW4gcmFuZ2UoeHMpOgogICAgICAgICAgICBmb3IgbiBpbiByYW5nZSh5cyk6CiAgICAgICAgICAgICAgICBub2RlYiA9IChtLCBuKQogICAgICAgICAgICAgICAgaWYgbm9kZWEgPT0gbm9kZWI6CiAgICAgICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgICAgICBpZiBub2Rlc1tpXVtqXVtVU0VEXSA9PSAwOiAjIHVzZWQgPT0gMAogICAgICAgICAgICAgICAgICAgIHN0YXRlW2ldW2pdID0gIl8iCiAgICAgICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgICAgICBpZiBub2Rlc1tpXVtqXVtVU0VEXSA8PSBub2Rlc1ttXVtuXVtBVkFJTF06ICAgICMgZmlyc3QudXNlZCA8PSBzZWNvbmQuYXZhaWwKICAgICAgICAgICAgICAgICAgICBudmlhYmxlICs9IDEKCiAgICAgICAgICAgICAgICBpZiBub2Rlc1tpXVtqXVtVU0VEXSA+PSAxMDA6CiAgICAgICAgICAgICAgICAgICAgc3RhdGVbaV1bal0gPSAiIyIKCnByaW50IG52aWFibGUKCmZvciBqIGluIHJhbmdlKHlzKToKICAgIGZvciBpIGluIHJhbmdlKHhzKToKICAgICAgICBpZiAoaSwgaikgPT0gKDAsIDApOgogICAgICAgICAgICBwcmludCAiVCIsCiAgICAgICAgZWxpZiAoaSwgaikgPT0gKHhzIC0gMSwgMCk6CiAgICAgICAgICAgIHByaW50ICJHIiwKICAgICAgICBlbGlmIHN0YXRlW2ldW2pdIGlzIE5vbmU6CiAgICAgICAgICAgIHByaW50ICIuIiwKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCBzdGF0ZVtpXVtqXSwKICAgIHByaW50Cjx8ZmltX3N1ZmZpeHw+CiMgJy9kZXYvZ3JpZC9ub2RlLXgwLXkwICAgICA5MFQgICA2OVQgICAgMjFUICAgNzYlJwoKeHMgPSAzNQp5cyA9IDI3Cjx8ZmltX2VuZHw+"]
["1e206f5a95f5ea991a0ab0c4a2840bab48e0ebe1-3","1e206f5a95f5ea991a0ab0c4a2840bab48e0ebe1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKZnJvbSBjb3B5IGltcG9ydCBjb3B5CgojIEZpbGVzeXN0ZW0gICAgICAgICAgICAgIFNpemUgIFVzZWQgIEF2YWlsICBVc2UlCiMgJy9kZXYvZ3JpZC9ub2RlLXgwLXkwICAgICA5MFQgICA2OVQgICAgMjFUICAgNzYlJwoKeHMgPSAzNQp5cyA9IDI3CgpVU0VEID0gMApBVkFJTCA9IDEKClRBUkdFVCA9ICgwLCAwKQpTT1VSQ0UgPSAoeHMgLSAxLCAwKQojIFNPVVJDRV9BTU9VTlQgPSBub2Rlc1t4cyAtIDFdWzBdWzBdCgpub2RlcyA9IFtbTm9uZSBmb3IgXyBpbiByYW5nZSh5cyldIGZvciBfIGluIHJhbmdlKHhzKV0Kc3RhdGUgPSBbW05vbmUgZm9yIF8gaW4gcmFuZ2UoeXMpXSBmb3IgXyBpbiByYW5nZSh4cyldCgp3aXRoIG9wZW4oc3lzLmFyZ3ZbMV0pIGFzIGY6CiAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKCiAgICBmb3IgbGluZSBpbiBsaW5lczoKICAgICAgICAjIHByaW50IGxpbmUKICAgICAgICBub2RlLCBzaXplLCB1c2VkLCBhdmFpbCwgcGVyY2VudCA9IGxpbmUuc3BsaXQoKQoKICAgICAgICB1c2VkID0gaW50KHVzZWRbOi0xXSkKICAgICAgICBhdmFpbCA9IGludChhdmFpbFs6LTFdKQoKICAgICAgICBub2RleCA9IGludChub2RlLnNwbGl0KCItIilbMV1bMTpdKQogICAgICAgIG5vZGV5ID0gaW50KG5vZGUuc3BsaXQoIi0iKVsyXVsxOl0pCgogICAgICAgIG5vZGVzW25vZGV4XVtub2RleV0gPSBbdXNlZCwgYXZhaWxdCgpudmlhYmxlID0gMApmb3IgaSBpbiByYW5nZSh4cyk6CiAgICBmb3IgaiBpbiByYW5nZSh5cyk6CiAgICAgICAgbm9kZWEgPSAoaSwgaikKICAgICAgICBmb3IgbSBpbiByYW5nZSh4cyk6CiAgICAgICAgICAgIGZvciBuIGluIHJhbmdlKHlzKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgbm9kZWIgPSAobSwgbikKICAgICAgICAgICAgICAgIGlmIG5vZGVhID09IG5vZGViOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgo8fGZpbV9lbmR8Pg=="]
["a9a53a0ab6c2f0c98cc5abc03e528342a0bfee22-1","a9a53a0ab6c2f0c98cc5abc03e528342a0bfee22","PHxmaW1fcHJlZml4fD4KZnJvbSB0d2lzdGVkLnB5dGhvbiBpbXBvcnQgbG9nCmZyb20gY29tbG9jYWwudXRpbC5OZXR3b3JrTGF5ZXIgaW1wb3J0IE5ldHdvcmtMYXllcgppbXBvcnQgdGltZQoKCmNsYXNzIFJhZGlvTWFuYWdlciAoTmV0d29ya0xheWVyKToKCQoJZGVmIF9faW5pdF9fIChzZWxmLCBuYW1lKToKCQlOZXR3b3JrTGF5ZXIuX19pbml0X18oc2VsZiwgbmFtZSkKCgkJc2VsZi5wcm9wcyA9IHNlbGYuX3NldHVwUHJvcGVydGllcygpCgoJCXNlbGYucmVhZENCID0gTm9uZQoJCXNlbGYudHJhbnNwb3J0ID0gTm9uZQoJCXNlbGYuY29ubmVjdGlvbnMgPSB7fQoKCWRlZiBfc2V0dXBQcm9wZXJ0aWVzKHNlbGYpOgoJCSIiIgoJCVNldCB1cCB0aGUgcmFkaW8gcHJvcGVydGllcyB3ZSBtaWdodCBuZWVkCgoJCU1VU1QgSU1QTEVNRU5UIQoKCQlSZXR1cm4gYSBkaWN0aW9uYXJ5IHdpdGg6CgkJewoJCQknYWRkcicgOiA8dGhlIGFkZHJlc3Mgb2YgdGhlIHJhZGlvPiwKCQkJJ2JjYXN0QWRkcicgOiA8dGhlIGJyb2FkY2FzdCBhZGRyZXNzIHVzZWQgYnkgdGhpcyByYWRpbyBpZiBhbnk+LAoJCQknY29zdFBlckJ5dGUnIDogPGNvc3QgdG8gc2VuZCAxIGJ5dGUgb24gdGhpcyByYWRpbz4KCQl9CgoJCSIiIgoJCXJldHVybiB7fQoKCWRlZiBzZXRUcmFuc3BvcnQoc2VsZiwgdHJhbnNwb3J0KToKCQlzZWxmLnRyYW5zcG9ydCA9IHRyYW5zcG9ydAoKCWRlZiBfZ2V0U3RhdHVzKHNlbGYpOgoJCXJldHVybiB7J3J1bm5pbmcnOlRydWV9CgoJZGVmIGNtZChzZWxmLCBjbWQpOgoJCSNsb2cubXNnKCdyZWNlaXZlZCBjb21tYW5kOiAlcycgJSBjbWQpCgkJdHJ5OgoJCQlpZiAnZ2V0X3Byb3BzJyA9PSBjbWRbJ2NtZCddOgoJCQkJY21kWydyZXN1bHQnXSA9IHNlbGYucHJvcHMKCQkJZWxpZiAnZ2V0X3N0YXR1cycgPT0gY21kWydjbWQnXToKCQkJCWNtZFsncmVzdWx0J10gPSBzZWxmLl9nZXRTdGF0dXMoKQoJCQllbHNlOgoJCQkJY21kWydyZXN1bHQnXSA9IHNlbGYuZmFpbHVyZSgibm8gY29tbWFuZCAlcyIgJSAoY21kWydjbWQnXSkpCgoJCWV4Y2VwdCBLZXlFcnJvcjoKCQkJY21kWydyZXN1bHQnXSA9IHNlbGYuZmFpbHVyZSgncG9vcmx5IGZvcm1hdHRlZCBjb21tYW5kIChtaXNzaW5nIGEgZmllbGQ/KScpCgoJCXJldHVybiBjbWQKCglkZWYgd3JpdGUoc2VsZiwgbWVzc2FnZSk6CgkJdHJ5OgoJCQkjbWVzc2FnZVsnc2VudGJ5J10gPSBzZWxmLnByb3BzWydhZGRyJ10KCQkJYWRkciA9IG1lc3NhZ2UucG9wKCdhZGRyJykKCQkJc2VsZi50cmFuc3BvcnQud3JpdGUobWVzc2FnZSwgYWRkcikKCQkJbWVzc2FnZVsncmVzdWx0J10gPSBzZWxmLnN1Y2Nlc3MoJycpCgkJZXhjZXB0IEtleUVycm9yOgoJCQltZXNzYWdlWydyZXN1bHQnXSA9IHNlbGYuZmFpbHVyZSgnbWlzc2luZyAiYWRkciIgZmllbGQnKQoJCWV4Y2VwdCBFeGNlcHRpb24gYXMgZToKCQkJbWVzc2FnZVsncmVzdWx0J10gPSBzZWxmLmZhaWx1cmUoc3RyKGUpKQoJCgkJcmV0dXJuIG1lc3NhZ2UKCglkZWYgcmVhZCAoc2VsZiwgbWVzc2FnZSk6Cjx8ZmltX2hvbGV8PgoKCQlzZWxmLmNvbm5lY3Rpb25zW21lc3NhZ2VbJ3NlbnRieSddXVsndGltZSddID0gdGltZS50aW1lKCkKCgkJaWYgc2VsZi5yZWFkQ0IgaXMgbm90IE5vbmU6CgkJCXNlbGYucmVhZENCKG1lc3NhZ2UpCgoJZGVmIHNldFJlYWRDQiAoc2VsZiwgY2IpOgoJCSN1c2UgdGhpcyBjYWxsYmFjayBpbiB0cmFuc3BvcnQgaW1wbGVtZW50ZWQgZm9yIHRoZSByYWRpbwoJCXNlbGYucmVhZENCID0gY2IKCmNsYXNzIFJhZGlvVHJhbnNwb3J0KG9iamVjdCk6CglkZWYgX19pbml0X18oc2VsZik6CgkJc2VsZi5tYW5hZ2VyID0gTm9uZQoKCWRlZiBzZXRNYW5hZ2VyIChzZWxmLCBtYW5hZ2VyKToKCQlzZWxmLm1hbmFnZXIgPSBtYW5hZ2VyCgoJZGVmIHdyaXRlKHNlbGYsIG1lc3NhZ2UsIGFkZHIpOgoJCXBhc3MKCglkZWYgcmVhZChzZWxmLCBtZXNzYWdlKToKCQlwYXNzCgo8fGZpbV9zdWZmaXh8PgoJCQoJCSN1cGRhdGUgdGhpbmdzIGFib3V0IGNvbm5lY3Rpb25zIGZyb20gVHJhbnNwb3J0IGNsYXNzCgkJaWYgbWVzc2FnZVsnc2VudGJ5J10gbm90IGluIHNlbGYuY29ubmVjdGlvbnM6CgkJCXNlbGYuY29ubmVjdGlvbnNbbWVzc2FnZVsnc2VudGJ5J11dID0ge30KPHxmaW1fZW5kfD4="]
["a9a53a0ab6c2f0c98cc5abc03e528342a0bfee22-2","a9a53a0ab6c2f0c98cc5abc03e528342a0bfee22","PHxmaW1fcHJlZml4fD4KZnJvbSB0d2lzdGVkLnB5dGhvbiBpbXBvcnQgbG9nCmZyb20gY29tbG9jYWwudXRpbC5OZXR3b3JrTGF5ZXIgaW1wb3J0IE5ldHdvcmtMYXllcgppbXBvcnQgdGltZQoKCmNsYXNzIFJhZGlvTWFuYWdlciAoTmV0d29ya0xheWVyKToKCQoJZGVmIF9faW5pdF9fIChzZWxmLCBuYW1lKToKCQlOZXR3b3JrTGF5ZXIuX19pbml0X18oc2VsZiwgbmFtZSkKCgkJc2VsZi5wcm9wcyA9IHNlbGYuX3NldHVwUHJvcGVydGllcygpCgoJCXNlbGYucmVhZENCID0gTm9uZQoJCXNlbGYudHJhbnNwb3J0ID0gTm9uZQoJCXNlbGYuY29ubmVjdGlvbnMgPSB7fQoKCWRlZiBfc2V0dXBQcm9wZXJ0aWVzKHNlbGYpOgoJCSIiIgoJCVNldCB1cCB0aGUgcmFkaW8gcHJvcGVydGllcyB3ZSBtaWdodCBuZWVkCgoJCU1VU1QgSU1QTEVNRU5UIQoKCQlSZXR1cm4gYSBkaWN0aW9uYXJ5IHdpdGg6CgkJewoJCQknYWRkcicgOiA8dGhlIGFkZHJlc3Mgb2YgdGhlIHJhZGlvPiwKCQkJJ2JjYXN0QWRkcicgOiA8dGhlIGJyb2FkY2FzdCBhZGRyZXNzIHVzZWQgYnkgdGhpcyByYWRpbyBpZiBhbnk+LAoJCQknY29zdFBlckJ5dGUnIDogPGNvc3QgdG8gc2VuZCAxIGJ5dGUgb24gdGhpcyByYWRpbz4KCQl9CgoJCSIiIgoJCXJldHVybiB7fQoKPHxmaW1faG9sZXw+CgkJcmV0dXJuIHsncnVubmluZyc6VHJ1ZX0KCglkZWYgY21kKHNlbGYsIGNtZCk6CgkJI2xvZy5tc2coJ3JlY2VpdmVkIGNvbW1hbmQ6ICVzJyAlIGNtZCkKCQl0cnk6CgkJCWlmICdnZXRfcHJvcHMnID09IGNtZFsnY21kJ106CgkJCQljbWRbJ3Jlc3VsdCddID0gc2VsZi5wcm9wcwoJCQllbGlmICdnZXRfc3RhdHVzJyA9PSBjbWRbJ2NtZCddOgoJCQkJY21kWydyZXN1bHQnXSA9IHNlbGYuX2dldFN0YXR1cygpCgkJCWVsc2U6CgkJCQljbWRbJ3Jlc3VsdCddID0gc2VsZi5mYWlsdXJlKCJubyBjb21tYW5kICVzIiAlIChjbWRbJ2NtZCddKSkKCgkJZXhjZXB0IEtleUVycm9yOgoJCQljbWRbJ3Jlc3VsdCddID0gc2VsZi5mYWlsdXJlKCdwb29ybHkgZm9ybWF0dGVkIGNvbW1hbmQgKG1pc3NpbmcgYSBmaWVsZD8pJykKCgkJcmV0dXJuIGNtZAoKCWRlZiB3cml0ZShzZWxmLCBtZXNzYWdlKToKCQl0cnk6CgkJCSNtZXNzYWdlWydzZW50YnknXSA9IHNlbGYucHJvcHNbJ2FkZHInXQoJCQlhZGRyID0gbWVzc2FnZS5wb3AoJ2FkZHInKQoJCQlzZWxmLnRyYW5zcG9ydC53cml0ZShtZXNzYWdlLCBhZGRyKQoJCQltZXNzYWdlWydyZXN1bHQnXSA9IHNlbGYuc3VjY2VzcygnJykKCQlleGNlcHQgS2V5RXJyb3I6CgkJCW1lc3NhZ2VbJ3Jlc3VsdCddID0gc2VsZi5mYWlsdXJlKCdtaXNzaW5nICJhZGRyIiBmaWVsZCcpCgkJZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgoJCQltZXNzYWdlWydyZXN1bHQnXSA9IHNlbGYuZmFpbHVyZShzdHIoZSkpCgkKCQlyZXR1cm4gbWVzc2FnZQoKCWRlZiByZWFkIChzZWxmLCBtZXNzYWdlKToKCQkKCQkjdXBkYXRlIHRoaW5ncyBhYm91dCBjb25uZWN0aW9ucyBmcm9tIFRyYW5zcG9ydCBjbGFzcwoJCWlmIG1lc3NhZ2VbJ3NlbnRieSddIG5vdCBpbiBzZWxmLmNvbm5lY3Rpb25zOgoJCQlzZWxmLmNvbm5lY3Rpb25zW21lc3NhZ2VbJ3NlbnRieSddXSA9IHt9CgoJCXNlbGYuY29ubmVjdGlvbnNbbWVzc2FnZVsnc2VudGJ5J11dWyd0aW1lJ10gPSB0aW1lLnRpbWUoKQoKCQlpZiBzZWxmLnJlYWRDQiBpcyBub3QgTm9uZToKCQkJc2VsZi5yZWFkQ0IobWVzc2FnZSkKCglkZWYgc2V0UmVhZENCIChzZWxmLCBjYik6CgkJI3VzZSB0aGlzIGNhbGxiYWNrIGluIHRyYW5zcG9ydCBpbXBsZW1lbnRlZCBmb3IgdGhlIHJhZGlvCgkJc2VsZi5yZWFkQ0IgPSBjYgoKY2xhc3MgUmFkaW9UcmFuc3BvcnQob2JqZWN0KToKCWRlZiBfX2luaXRfXyhzZWxmKToKCQlzZWxmLm1hbmFnZXIgPSBOb25lCgoJZGVmIHNldE1hbmFnZXIgKHNlbGYsIG1hbmFnZXIpOgoJCXNlbGYubWFuYWdlciA9IG1hbmFnZXIKCglkZWYgd3JpdGUoc2VsZiwgbWVzc2FnZSwgYWRkcik6CgkJcGFzcwoKCWRlZiByZWFkKHNlbGYsIG1lc3NhZ2UpOgoJCXBhc3MKCjx8ZmltX3N1ZmZpeHw+CglkZWYgc2V0VHJhbnNwb3J0KHNlbGYsIHRyYW5zcG9ydCk6CgkJc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKCglkZWYgX2dldFN0YXR1cyhzZWxmKToKPHxmaW1fZW5kfD4="]
["a9a53a0ab6c2f0c98cc5abc03e528342a0bfee22-3","a9a53a0ab6c2f0c98cc5abc03e528342a0bfee22","PHxmaW1fcHJlZml4fD4KZnJvbSB0d2lzdGVkLnB5dGhvbiBpbXBvcnQgbG9nCmZyb20gY29tbG9jYWwudXRpbC5OZXR3b3JrTGF5ZXIgaW1wb3J0IE5ldHdvcmtMYXllcgppbXBvcnQgdGltZQoKCmNsYXNzIFJhZGlvTWFuYWdlciAoTmV0d29ya0xheWVyKToKCQoJZGVmIF9faW5pdF9fIChzZWxmLCBuYW1lKToKCQlOZXR3b3JrTGF5ZXIuX19pbml0X18oc2VsZiwgbmFtZSkKCgkJc2VsZi5wcm9wcyA9IHNlbGYuX3NldHVwUHJvcGVydGllcygpCgoJCXNlbGYucmVhZENCID0gTm9uZQoJCXNlbGYudHJhbnNwb3J0ID0gTm9uZQoJCXNlbGYuY29ubmVjdGlvbnMgPSB7fQoKCWRlZiBfc2V0dXBQcm9wZXJ0aWVzKHNlbGYpOgoJCSIiIgoJCVNldCB1cCB0aGUgcmFkaW8gcHJvcGVydGllcyB3ZSBtaWdodCBuZWVkCgoJCU1VU1QgSU1QTEVNRU5UIQoKCQlSZXR1cm4gYSBkaWN0aW9uYXJ5IHdpdGg6CgkJewoJCQknYWRkcicgOiA8dGhlIGFkZHJlc3Mgb2YgdGhlIHJhZGlvPiwKCQkJJ2JjYXN0QWRkcicgOiA8dGhlIGJyb2FkY2FzdCBhZGRyZXNzIHVzZWQgYnkgdGhpcyByYWRpbyBpZiBhbnk+LAoJCQknY29zdFBlckJ5dGUnIDogPGNvc3QgdG8gc2VuZCAxIGJ5dGUgb24gdGhpcyByYWRpbz4KCQl9CgoJCSIiIgoJCXJldHVybiB7fQoKCWRlZiBzZXRUcmFuc3BvcnQoc2VsZiwgdHJhbnNwb3J0KToKCQlzZWxmLnRyYW5zcG9ydCA9IHRyYW5zcG9ydAoKCWRlZiBfZ2V0U3RhdHVzKHNlbGYpOgoJCXJldHVybiB7J3J1bm5pbmcnOlRydWV9CgoJZGVmIGNtZChzZWxmLCBjbWQpOgoJCSNsb2cubXNnKCdyZWNlaXZlZCBjb21tYW5kOiAlcycgJSBjbWQpCgkJdHJ5OgoJCQlpZiAnZ2V0X3Byb3BzJyA9PSBjbWRbJ2NtZCddOgoJCQkJY21kWydyZXN1bHQnXSA9IHNlbGYucHJvcHMKCQkJZWxpZiAnZ2V0X3N0YXR1cycgPT0gY21kWydjbWQnXToKCQkJCWNtZFsncmVzdWx0J10gPSBzZWxmLl9nZXRTdGF0dXMoKQo8fGZpbV9ob2xlfD4KCQlleGNlcHQgS2V5RXJyb3I6CgkJCWNtZFsncmVzdWx0J10gPSBzZWxmLmZhaWx1cmUoJ3Bvb3JseSBmb3JtYXR0ZWQgY29tbWFuZCAobWlzc2luZyBhIGZpZWxkPyknKQoKCQlyZXR1cm4gY21kCgoJZGVmIHdyaXRlKHNlbGYsIG1lc3NhZ2UpOgoJCXRyeToKCQkJI21lc3NhZ2VbJ3NlbnRieSddID0gc2VsZi5wcm9wc1snYWRkciddCgkJCWFkZHIgPSBtZXNzYWdlLnBvcCgnYWRkcicpCgkJCXNlbGYudHJhbnNwb3J0LndyaXRlKG1lc3NhZ2UsIGFkZHIpCgkJCW1lc3NhZ2VbJ3Jlc3VsdCddID0gc2VsZi5zdWNjZXNzKCcnKQoJCWV4Y2VwdCBLZXlFcnJvcjoKCQkJbWVzc2FnZVsncmVzdWx0J10gPSBzZWxmLmZhaWx1cmUoJ21pc3NpbmcgImFkZHIiIGZpZWxkJykKCQlleGNlcHQgRXhjZXB0aW9uIGFzIGU6CgkJCW1lc3NhZ2VbJ3Jlc3VsdCddID0gc2VsZi5mYWlsdXJlKHN0cihlKSkKCQoJCXJldHVybiBtZXNzYWdlCgoJZGVmIHJlYWQgKHNlbGYsIG1lc3NhZ2UpOgoJCQoJCSN1cGRhdGUgdGhpbmdzIGFib3V0IGNvbm5lY3Rpb25zIGZyb20gVHJhbnNwb3J0IGNsYXNzCgkJaWYgbWVzc2FnZVsnc2VudGJ5J10gbm90IGluIHNlbGYuY29ubmVjdGlvbnM6CgkJCXNlbGYuY29ubmVjdGlvbnNbbWVzc2FnZVsnc2VudGJ5J11dID0ge30KCgkJc2VsZi5jb25uZWN0aW9uc1ttZXNzYWdlWydzZW50YnknXV1bJ3RpbWUnXSA9IHRpbWUudGltZSgpCgoJCWlmIHNlbGYucmVhZENCIGlzIG5vdCBOb25lOgoJCQlzZWxmLnJlYWRDQihtZXNzYWdlKQoKCWRlZiBzZXRSZWFkQ0IgKHNlbGYsIGNiKToKCQkjdXNlIHRoaXMgY2FsbGJhY2sgaW4gdHJhbnNwb3J0IGltcGxlbWVudGVkIGZvciB0aGUgcmFkaW8KCQlzZWxmLnJlYWRDQiA9IGNiCgpjbGFzcyBSYWRpb1RyYW5zcG9ydChvYmplY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXNlbGYubWFuYWdlciA9IE5vbmUKCglkZWYgc2V0TWFuYWdlciAoc2VsZiwgbWFuYWdlcik6CgkJc2VsZi5tYW5hZ2VyID0gbWFuYWdlcgoKCWRlZiB3cml0ZShzZWxmLCBtZXNzYWdlLCBhZGRyKToKCQlwYXNzCgoJZGVmIHJlYWQoc2VsZiwgbWVzc2FnZSk6CgkJcGFzcwoKPHxmaW1fc3VmZml4fD4KCQkJZWxzZToKCQkJCWNtZFsncmVzdWx0J10gPSBzZWxmLmZhaWx1cmUoIm5vIGNvbW1hbmQgJXMiICUgKGNtZFsnY21kJ10pKQoKPHxmaW1fZW5kfD4="]
["da6db3a03e314e607d14d70df63e4d22cb5b826b-1","da6db3a03e314e607d14d70df63e4d22cb5b826b","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMKIyBDbG91ZGxldCBJbmZyYXN0cnVjdHVyZSBmb3IgTW9iaWxlIENvbXB1dGluZwojCiMgICBBdXRob3I6IEtpcnlvbmcgSGEgPGtyaGFAY211LmVkdT4KIwojICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkKIyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KaW1wb3J0IHN0cnVjdAppbXBvcnQgbG9nZ2luZwoKTE9HID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCmltcG9ydCBzdWJwcm9jZXNzCgoKY2xhc3MgTWFjaGluZUdlbmVyYXRpb25FcnJvcihFeGNlcHRpb24pOgogICAgcGFzcwoKCiMgRmlsZSBoYW5kbGUgYXJndW1lbnRzIGRvbid0IG5lZWQgbW9yZSB0aGFuIHR3byBsZXR0ZXJzCiMgcHlsaW50OiBkaXNhYmxlPUMwMTAzCmNsYXNzIF9RZW11TWVtb3J5SGVhZGVyKG9iamVjdCk6CiAgICBIRUFERVJfTUFHSUMgPSAnTGlidmlydFFlbXVkU2F2ZScKICAgIEhFQURFUl9WRVJTSU9OID0gMgogICAgIyBIZWFkZXIgdmFsdWVzIGFyZSBzdG9yZWQgIm5hdGl2ZS1lbmRpYW4iLiAgV2Ugb25seSBzdXBwb3J0IHg4Niwgc28KICAgICMgYXNzdW1lIHdlIGRvbid0IG5lZWQgdG8gYnl0ZXN3YXAuCiAgICBIRUFERVJfRk9STUFUID0gc3RyKGxlbihIRUFERVJfTUFHSUMpKSArICdzMTlJJwogICAgSEVBREVSX0xFTkdUSCA9IHN0cnVjdC5jYWxjc2l6ZShIRUFERVJfRk9STUFUKQogICAgSEVBREVSX1VOVVNFRF9WQUxVRVMgPSAxNQoKICAgIENPTVBSRVNTX1JBVyA9IDAKICAgIENPTVBSRVNTX1haID0gMwogICAgQ09NUFJFU1NfQ0xPVURMRVQgPSA0CgogICAgRVhQRUNURURfSEVBREVSX0xFTkdUSCA9IDQwOTYqMgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmKToKICAgICAgICAjIFJlYWQgaGVhZGVyIHN0cnVjdAogICAgICAgIGYuc2VlaygwKQogICAgICAgIGJ1ZiA9IGYucmVhZChzZWxmLkhFQURFUl9MRU5HVEgpCiAgICAgICAgaGVhZGVyID0gbGlzdChzdHJ1Y3QudW5wYWNrKHNlbGYuSEVBREVSX0ZPUk1BVCwgYnVmKSkKICAgICAgICBtYWdpYyA9IGhlYWRlci5wb3AoMCkKICAgICAgICB2ZXJzaW9uID0gaGVhZGVyLnBvcCgwKQogICAgICAgIHNlbGYuX3htbF9sZW4gPSBoZWFkZXIucG9wKDApCiAgICAgICAgc2VsZi53YXNfcnVubmluZyA9IGhlYWRlci5wb3AoMCkKICAgICAgICBzZWxmLmNvbXByZXNzZWQgPSBoZWFkZXIucG9wKDApCgogICAgICAgICMgQ2hlY2sgaGVhZGVyCiAgICAgICAgaWYgbWFnaWMgIT0gc2VsZi5IRUFERVJfTUFHSUM6CiAgICAgICAgICAgIHJhaXNlIE1hY2hpbmVHZW5lcmF0aW9uRXJyb3IoJ0ludmFsaWQgbWVtb3J5IGltYWdlIG1hZ2ljJykKICAgICAgICBpZiB2ZXJzaW9uICE9IHNlbGYuSEVBREVSX1ZFUlNJT046CiAgICAgICAgICAgIHJhaXNlIE1hY2hpbmVHZW5lcmF0aW9uRXJyb3IoJ1Vua25vd24gbWVtb3J5IGltYWdlIHZlcnNpb24gJWQnICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uKQogICAgICAgIGlmIGhlYWRlciAhPSBbMF0gKiBzZWxmLkhFQURFUl9VTlVTRURfVkFMVUVTOgogICAgICAgICAgICByYWlzZSBNYWNoaW5lR2VuZXJhdGlvbkVycm9yKCdVbnVzZWQgaGVhZGVyIHZhbHVlcyBub3QgMCcpCgogICAgICAgIGxpYnZpcnRfaGVhZGVyX2xlbiA9IHNlbGYuX3htbF9sZW4gKyBzZWxmLkhFQURFUl9MRU5HVEgKICAgICAgICBpZiBsaWJ2aXJ0X2hlYWRlcl9sZW4gIT0gc2VsZi5FWFBFQ1RFRF9IRUFERVJfTEVOR1RIOgogICAgICAgICAgICBMT0cud2FybmluZygibGlidmlydCBoZWFkZXIgbGVuZ3RoIGlzIG5vdCBhbGlnbmVkIHdpdGggOEtCIikKCiAgICAgICAgIyBSZWFkIFhNTCwgZHJvcCB0cmFpbGluZyBOVUwgcGFkZGluZwo8fGZpbV9ob2xlfD4KICAgIGRlZiBzZWVrX2JvZHkoc2VsZiwgZik6CiAgICAgICAgZi5zZWVrKHNlbGYuSEVBREVSX0xFTkdUSCArIHNlbGYuX3htbF9sZW4pCgogICAgZGVmIHdyaXRlKHNlbGYsIGYpOgogICAgICAgICMgQ2FsY3VsYXRlIGhlYWRlcgogICAgICAgIGhlYWRlciA9IFtzZWxmLkhFQURFUl9NQUdJQywKICAgICAgICAgICAgICAgICAgc2VsZi5IRUFERVJfVkVSU0lPTiwKICAgICAgICAgICAgICAgICAgc2VsZi5feG1sX2xlbiwKICAgICAgICAgICAgICAgICAgc2VsZi53YXNfcnVubmluZywKICAgICAgICAgICAgICAgICAgc2VsZi5jb21wcmVzc2VkXQogICAgICAgIGhlYWRlci5leHRlbmQoWzBdICogc2VsZi5IRUFERVJfVU5VU0VEX1ZBTFVFUykKCiAgICAgICAgIyBXcml0ZSBkYXRhCiAgICAgICAgZi5zZWVrKDApCiAgICAgICAgZi53cml0ZShzdHJ1Y3QucGFjayhzZWxmLkhFQURFUl9GT1JNQVQsICpoZWFkZXIpKQogICAgICAgIGYud3JpdGUoc3RydWN0LnBhY2soJyVkcycgJSBzZWxmLl94bWxfbGVuLCBzZWxmLnhtbCkpCiMgcHlsaW50OiBlbmFibGU9QzAxMDMKCiAgICBkZWYgb3ZlcndyaXRlKHNlbGYsIGYsIG5ld194bWwpOgogICAgICAgICMgQ2FsY3VsYXRlIGhlYWRlcgogICAgICAgIGlmIGxlbihuZXdfeG1sKSA+IHNlbGYuX3htbF9sZW4gLSAxOgogICAgICAgICAgICAjIElmIHRoaXMgYmVjb21lcyBhIHByb2JsZW0sIHdlIGNvdWxkIHdyaXRlIG91dCBhIGxhcmdlciB4bWxfbGVuLAogICAgICAgICAgICAjIHRob3VnaCB0aGlzIG11c3QgYmUgcGFnZS1hbGlnbmVkLgogICAgICAgICAgICByYWlzZSBNYWNoaW5lR2VuZXJhdGlvbkVycm9yKCdzZWxmLnhtbCBpcyB0b28gbGFyZ2UnKQogICAgICAgIGhlYWRlciA9IFtzZWxmLkhFQURFUl9NQUdJQywKICAgICAgICAgICAgICAgICAgc2VsZi5IRUFERVJfVkVSU0lPTiwKICAgICAgICAgICAgICAgICAgc2VsZi5feG1sX2xlbiwKICAgICAgICAgICAgICAgICAgc2VsZi53YXNfcnVubmluZywKICAgICAgICAgICAgICAgICAgc2VsZi5jb21wcmVzc2VkXQogICAgICAgIGhlYWRlci5leHRlbmQoWzBdICogc2VsZi5IRUFERVJfVU5VU0VEX1ZBTFVFUykKCiAgICAgICAgIyBXcml0ZSBkYXRhCiAgICAgICAgZi5zZWVrKDApCiAgICAgICAgZi53cml0ZShzdHJ1Y3QucGFjayhzZWxmLkhFQURFUl9GT1JNQVQsICpoZWFkZXIpKQogICAgICAgIGYud3JpdGUoc3RydWN0LnBhY2soJyVkcycgJSBzZWxmLl94bWxfbGVuLCBuZXdfeG1sKSkKIyBweWxpbnQ6IGVuYWJsZT1DMDEwMwoKCmNsYXNzIF9RZW11TWVtb3J5SGVhZGVyRGF0YShfUWVtdU1lbW9yeUhlYWRlcik6CiAgICBIRUFERVJfTUFHSUNfUEFSVElBTCA9ICdMaWJ2aXJ0UWVtdWRQYXJ0JwoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKICAgICAgICAjIFJlYWQgaGVhZGVyIHN0cnVjdAogICAgICAgIGJ1ZiA9IGRhdGFbOnNlbGYuSEVBREVSX0xFTkdUSF0KICAgICAgICBoZWFkZXIgPSBsaXN0KHN0cnVjdC51bnBhY2soc2VsZi5IRUFERVJfRk9STUFULCBidWYpKQogICAgICAgIG1hZ2ljID0gaGVhZGVyLnBvcCgwKQogICAgICAgIHZlcnNpb24gPSBoZWFkZXIucG9wKDApCiAgICAgICAgc2VsZi5feG1sX2xlbiA9IGhlYWRlci5wb3AoMCkKICAgICAgICBzZWxmLndhc19ydW5uaW5nID0gaGVhZGVyLnBvcCgwKQogICAgICAgIHNlbGYuY29tcHJlc3NlZCA9IGhlYWRlci5wb3AoMCkKCiAgICAgICAgIyBDaGVjayBoZWFkZXIKICAgICAgICBpZiBtYWdpYyAhPSBzZWxmLkhFQURFUl9NQUdJQyBhbmQgbWFnaWMgIT0gc2VsZi5IRUFERVJfTUFHSUNfUEFSVElBTDoKICAgICAgICAgICAgIyBsaWJ2aXJ0IHJlcGxhY2UgbWFnaWNfcGFydGlhbCB0byBtYWdpYyBhZnRlciBmaW5pc2hpbmcgc2F2aW5nCiAgICAgICAgICAgIG1zZyA9ICdJbnZhbGlkIG1lbW9yeSBpbWFnZSBtYWdpYycKICAgICAgICAgICAgTE9HLmVycm9yKG1zZykKICAgICAgICAgICAgcmFpc2UgTWFjaGluZUdlbmVyYXRpb25FcnJvcihtc2cpCiAgICAgICAgaWYgdmVyc2lvbiAhPSBzZWxmLkhFQURFUl9WRVJTSU9OOgogICAgICAgICAgICBtc2cgPSAnVW5rbm93biBtZW1vcnkgaW1hZ2UgdmVyc2lvbiAlZCcgJSB2ZXJzaW9uCiAgICAgICAgICAgIExPRy5lcnJvcihtc2cpCiAgICAgICAgICAgIHJhaXNlIE1hY2hpbmVHZW5lcmF0aW9uRXJyb3IobXNnKQogICAgICAgIGlmIGhlYWRlciAhPSBbMF0gKiBzZWxmLkhFQURFUl9VTlVTRURfVkFMVUVTOgogICAgICAgICAgICBtc2cgPSAnVW51c2VkIGhlYWRlciB2YWx1ZXMgbm90IDAnCiAgICAgICAgICAgIExPRy5lcnJvcihtc2cpCiAgICAgICAgICAgIHJhaXNlIE1hY2hpbmVHZW5lcmF0aW9uRXJyb3IobXNnKQoKICAgICAgICAjIFJlYWQgWE1MLCBkcm9wIHRyYWlsaW5nIE5VTCBwYWRkaW5nCiAgICAgICAgc2VsZi54bWwgPSBkYXRhW3NlbGYuSEVBREVSX0xFTkdUSDpzZWxmLkhFQURFUl9MRU5HVEgrc2VsZi5feG1sX2xlbl0KICAgICAgICBpZiBzZWxmLnhtbFstMV0gIT0gJ1wwJzoKICAgICAgICAgICAgcmFpc2UgTWFjaGluZUdlbmVyYXRpb25FcnJvcignTWlzc2luZyBOVUwgYnl0ZSBhZnRlciBYTUwnKQoKICAgIGRlZiBnZXRfYWxpZ25lZF9oZWFkZXIoc2VsZiwgZXhwZWN0ZWRfaGVhZGVyX3NpemUpOgogICAgICAgIGN1cnJlbnRfc2l6ZSA9IHNlbGYuSEVBREVSX0xFTkdUSCArIGxlbihzZWxmLnhtbCkKICAgICAgICBwYWRkaW5nX3NpemUgPSBleHBlY3RlZF9oZWFkZXJfc2l6ZSAtIGN1cnJlbnRfc2l6ZQogICAgICAgIGlmIHBhZGRpbmdfc2l6ZSA8IDA6CiAgICAgICAgICAgIG1zZyA9ICJXRSBGSVhFRCBMSUJWSVJUIEhFQURFUiBTSVpFIFRPIDIqNDA5NlxuIiArIFwKICAgICAgICAgICAgICAgICJCdXQgZ2l2ZW4geG1sIHNpemUgaXMgYmlnZ2VyIHRoYW4gMio0MDk2IgogICAgICAgICAgICByYWlzZSBNYWNoaW5lR2VuZXJhdGlvbkVycm9yKG1zZykKICAgICAgICBlbGlmIHBhZGRpbmdfc2l6ZSA+IDA6CiAgICAgICAgICAgIG5ld194bWwgPSBzZWxmLnhtbCArICgiXDAiICogcGFkZGluZ19zaXplKQogICAgICAgICAgICBzZWxmLl94bWxfbGVuID0gbGVuKG5ld194bWwpCiAgICAgICAgICAgIHNlbGYueG1sID0gbmV3X3htbAogICAgICAgIHJldHVybiBzZWxmLmdldF9oZWFkZXIoKQoKICAgIGRlZiBnZXRfaGVhZGVyKHNlbGYpOgogICAgICAgICMgQ2FsY3VsYXRlIGhlYWRlcgogICAgICAgIGhlYWRlciA9IFtzZWxmLkhFQURFUl9NQUdJQywKICAgICAgICAgICAgICAgICAgc2VsZi5IRUFERVJfVkVSU0lPTiwKICAgICAgICAgICAgICAgICAgc2VsZi5feG1sX2xlbiwKICAgICAgICAgICAgICAgICAgc2VsZi53YXNfcnVubmluZywKICAgICAgICAgICAgICAgICAgc2VsZi5jb21wcmVzc2VkXQogICAgICAgIGhlYWRlci5leHRlbmQoWzBdICogc2VsZi5IRUFERVJfVU5VU0VEX1ZBTFVFUykKCiAgICAgICAgIyBXcml0ZSBkYXRhCiAgICAgICAgaGVhZGVyX2JpbmFyeSA9IHN0cnVjdC5wYWNrKHNlbGYuSEVBREVSX0ZPUk1BVCwgKmhlYWRlcikKICAgICAgICBoZWFkZXJfYmluYXJ5ICs9IHN0cnVjdC5wYWNrKCclZHMnICUgc2VsZi5feG1sX2xlbiwgc2VsZi54bWwpCiAgICAgICAgcmV0dXJuIGhlYWRlcl9iaW5hcnkKCgpkZWYgY29weV9tZW1vcnkoaW5fcGF0aCwgb3V0X3BhdGgsIHhtbCk6CiAgICAjIFJlY29tcHJlc3MgaWYgcG9zc2libGUKICAgIGZpbiA9IG9wZW4oaW5fcGF0aCkKICAgIGZvdXQgPSBvcGVuKG91dF9wYXRoLCAndycpCgogICAgIyBXcml0ZSBoZWFkZXIgdG8gb3V0cHV0CiAgICBoZHIgPSBfUWVtdU1lbW9yeUhlYWRlcihmaW4pCiAgICBoZHIuX3htbF9sZW4gPSBsZW4oeG1sKQogICAgaGRyLnhtbCA9IHhtbAogICAgaGRyLndyaXRlKGZvdXQpCgogICAgIyBtb3ZlIGZpbiBwb3NpdGlvbiB0byBkYXRhCiAgICBoZHIgPSBfUWVtdU1lbW9yeUhlYWRlcihmaW4pCiAgICBoZHIuc2Vla19ib2R5KGZpbikKCiAgICAjIFdyaXRlIGJvZHkKICAgIHdoaWxlIFRydWU6CiAgICAgICAgZGF0YSA9IGZpbi5yZWFkKDEwMDAqMTAwMCoxMCkKICAgICAgICBpZiBsZW4oZGF0YSkgPT0gMDoKICAgICAgICAgICAgYnJlYWsKICAgICAgICBmb3V0LndyaXRlKGRhdGEpCiAgICBmb3V0LmZsdXNoKCkKCgpkZWYgY29weV9kaXNrKGluX3BhdGgsIG91dF9wYXRoKToKICAgIHByaW50ICdDb3B5aW5nIGFuZCBjb21wcmVzc2luZyBkaXNrIGltYWdlLi4uJwogICAgaWYgc3VicHJvY2Vzcy5jYWxsKFsncWVtdS1pbWcnLCAnY29udmVydCcsICctY3AnLCAnLU8nLCAncWNvdzInLAogICAgICAgICAgICAgICAgICAgICAgICBpbl9wYXRoLCBvdXRfcGF0aF0pICE9IDA6CiAgICAgICAgcmFpc2UgTWFjaGluZUdlbmVyYXRpb25FcnJvcigncWVtdS1pbWcgZmFpbGVkJykKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLnhtbCA9IGYucmVhZChzZWxmLl94bWxfbGVuIC0gMSkucnN0cmlwKCdcMCcpCiAgICAgICAgaWYgZi5yZWFkKDEpICE9ICdcMCc6CiAgICAgICAgICAgIHJhaXNlIE1hY2hpbmVHZW5lcmF0aW9uRXJyb3IoJ01pc3NpbmcgTlVMIGJ5dGUgYWZ0ZXIgWE1MJykKCjx8ZmltX2VuZHw+"]
["da6db3a03e314e607d14d70df63e4d22cb5b826b-2","da6db3a03e314e607d14d70df63e4d22cb5b826b","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMKIyBDbG91ZGxldCBJbmZyYXN0cnVjdHVyZSBmb3IgTW9iaWxlIENvbXB1dGluZwojCiMgICBBdXRob3I6IEtpcnlvbmcgSGEgPGtyaGFAY211LmVkdT4KIwojICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkKIyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KaW1wb3J0IHN0cnVjdAppbXBvcnQgbG9nZ2luZwoKTE9HID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCmltcG9ydCBzdWJwcm9jZXNzCgoKY2xhc3MgTWFjaGluZUdlbmVyYXRpb25FcnJvcihFeGNlcHRpb24pOgogICAgcGFzcwoKCiMgRmlsZSBoYW5kbGUgYXJndW1lbnRzIGRvbid0IG5lZWQgbW9yZSB0aGFuIHR3byBsZXR0ZXJzCiMgcHlsaW50OiBkaXNhYmxlPUMwMTAzCmNsYXNzIF9RZW11TWVtb3J5SGVhZGVyKG9iamVjdCk6CiAgICBIRUFERVJfTUFHSUMgPSAnTGlidmlydFFlbXVkU2F2ZScKICAgIEhFQURFUl9WRVJTSU9OID0gMgogICAgIyBIZWFkZXIgdmFsdWVzIGFyZSBzdG9yZWQgIm5hdGl2ZS1lbmRpYW4iLiAgV2Ugb25seSBzdXBwb3J0IHg4Niwgc28KICAgICMgYXNzdW1lIHdlIGRvbid0IG5lZWQgdG8gYnl0ZXN3YXAuCiAgICBIRUFERVJfRk9STUFUID0gc3RyKGxlbihIRUFERVJfTUFHSUMpKSArICdzMTlJJwogICAgSEVBREVSX0xFTkdUSCA9IHN0cnVjdC5jYWxjc2l6ZShIRUFERVJfRk9STUFUKQogICAgSEVBREVSX1VOVVNFRF9WQUxVRVMgPSAxNQoKICAgIENPTVBSRVNTX1JBVyA9IDAKICAgIENPTVBSRVNTX1haID0gMwogICAgQ09NUFJFU1NfQ0xPVURMRVQgPSA0Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBFWFBFQ1RFRF9IRUFERVJfTEVOR1RIID0gNDA5NioyCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGYpOgo8fGZpbV9lbmR8Pg=="]
["8afe05e46203beb539b714d3b753f9d56b8b9fd4-1","8afe05e46203beb539b714d3b753f9d56b8b9fd4","PHxmaW1fcHJlZml4fD4KJycnCkNyZWF0ZWQgb24gMzEuMDUuMjAxOQoKQGF1dGhvcjogTEgKJycnCgppbXBvcnQgY2FuCgpmcm9tIFB5VHJpbmFtaWMuY29ubmVjdGlvbnMudG1jbF9pbnRlcmZhY2UgaW1wb3J0IHRtY2xfaW50ZXJmYWNlCmZyb20gY2FuLmludGVyZmFjZXMucGNhbi5wY2FuIGltcG9ydCBQY2FuRXJyb3IKZnJvbSBjYW4gaW1wb3J0IENhbkVycm9yCgpfQ0hBTk5FTFMgPSBbCiAgICAiUENBTl9VU0JCVVMxIiwgICJQQ0FOX1VTQkJVUzIiLCAgIlBDQU5fVVNCQlVTMyIsICAiUENBTl9VU0JCVVM0IiwKICAgICJQQ0FOX1VTQkJVUzUiLCAgIlBDQU5fVVNCQlVTNiIsICAiUENBTl9VU0JCVVM3IiwgICJQQ0FOX1VTQkJVUzgiLAogICAgIlBDQU5fVVNCQlVTOSIsICAiUENBTl9VU0JCVVMxMCIsICJQQ0FOX1VTQkJVUzExIiwgIlBDQU5fVVNCQlVTMTIiLAogICAgIlBDQU5fVVNCQlVTMTMiLCAiUENBTl9VU0JCVVMxNCIsICJQQ0FOX1VTQkJVUzE1IiwgIlBDQU5fVVNCQlVTMTYiLAoKICAgICJQQ0FOX0lTQUJVUzEiLCAgIlBDQU5fSVNBQlVTMiIsICAiUENBTl9JU0FCVVMzIiwgICJQQ0FOX0lTQUJVUzQiLAogICAgIlBDQU5fSVNBQlVTNSIsICAiUENBTl9JU0FCVVM2IiwgICJQQ0FOX0lTQUJVUzciLCAgIlBDQU5fSVNBQlVTOCIsCgogICAgIlBDQU5fRE5HQlVTMSIsCgogICAgIlBDQU5fUENJQlVTMSIsICAiUENBTl9QQ0lCVVMyIiwgICJQQ0FOX1BDSUJVUzMiLCAgIlBDQU5fUENJQlVTNCIsCiAgICAiUENBTl9QQ0lCVVM1IiwgICJQQ0FOX1BDSUJVUzYiLCAgIlBDQU5fUENJQlVTNyIsICAiUENBTl9QQ0lCVVM4IiwKICAgICJQQ0FOX1BDSUJVUzkiLCAgIlBDQU5fUENJQlVTMTAiLCAiUENBTl9QQ0lCVVMxMSIsICJQQ0FOX1BDSUJVUzEyIiwKICAgICJQQ0FOX1BDSUJVUzEzIiwgIlBDQU5fUENJQlVTMTQiLCAiUENBTl9QQ0lCVVMxNSIsICJQQ0FOX1BDSUJVUzE2IiwKCiAgICAiUENBTl9QQ0NCVVMxIiwgICJQQ0FOX1BDQ0JVUzIiLAoKICAgICJQQ0FOX0xBTkJVUzEiLCAgIlBDQU5fTEFOQlVTMiIsICAiUENBTl9MQU5CVVMzIiwgICJQQ0FOX0xBTkJVUzQiLAogICAgIlBDQU5fTEFOQlVTNSIsICAiUENBTl9MQU5CVVM2IiwgICJQQ0FOX0xBTkJVUzciLCAgIlBDQU5fTEFOQlVTOCIsCiAgICAiUENBTl9MQU5CVVM5IiwgICJQQ0FOX0xBTkJVUzEwIiwgIlBDQU5fTEFOQlVTMTEiLCAiUENBTl9MQU5CVVMxMiIsCiAgICAiUENBTl9MQU5CVVMxMyIsICJQQ0FOX0xBTkJVUzE0IiwgIlBDQU5fTEFOQlVTMTUiLCAiUENBTl9MQU5CVVMxNiIKICAgIF0KCmNsYXNzIHBjYW5fdG1jbF9pbnRlcmZhY2UodG1jbF9pbnRlcmZhY2UpOgogICAgIiIiCiAgICBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBUTUNMIGNvbm5lY3Rpb24gb3ZlciBhIFBDQU4gYWRhcHRlci4KICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBkYXRhcmF0ZT0xMDAwMDAwLCBob3N0SUQ9MiwgbW9kdWxlSUQ9MSwgZGVidWc9RmFsc2UpOgogICAgICAgIGlmIHR5cGUocG9ydCkgIT0gc3RyOgogICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKCiAgICAgICAgaWYgbm90IHBvcnQgaW4gX0NIQU5ORUxTOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHBvcnQiKQoKICAgICAgICB0bWNsX2ludGVyZmFjZS5fX2luaXRfXyhzZWxmLCBob3N0SUQsIG1vZHVsZUlELCBkZWJ1ZykKCiAgICAgICAgc2VsZi5fZGVidWcgICAgPSBkZWJ1ZwogICAgICAgIHNlbGYuX19jaGFubmVsICA9IHBvcnQKICAgICAgICBzZWxmLl9fYml0cmF0ZSAgPSBkYXRhcmF0ZQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYuX19jb25uZWN0aW9uID0gY2FuLkJ1cyhpbnRlcmZhY2U9InBjYW4iLCBjaGFubmVsPXNlbGYuX19jaGFubmVsLCBiaXRyYXRlPXNlbGYuX19iaXRyYXRlKQoKICAgICAgICAgICAgc2VsZi5fX2Nvbm5lY3Rpb24uc2V0X2ZpbHRlcnMoW3sgImNhbl9pZCI6IGhvc3RJRCwgImNhbl9tYXNrIjogMHhGRkZGRkZGRiB9XSkKCiAgICAgICAgZXhjZXB0IFBjYW5FcnJvciBhcyBlOgogICAgICAgICAgICBzZWxmLl9fY29ubmVjdGlvbiA9IE5vbmUKICAgICAgICAgICAgcmFpc2UgQ29ubmVjdGlvbkVycm9yKCJGYWlsZWQgdG8gY29ubmVjdCB0byBQQ0FOIGJ1cyIpIGZyb20gZQoKICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKICAgICAgICAgICAgcHJpbnQoIk9wZW5lZCBidXMgb24gY2hhbm5lbCAiICsgc2VsZi5fX2NoYW5uZWwpCgogICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZgoKICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGl0VHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CiAgICAgICAgIiIiCiAgICAgICAgQ2xvc2UgdGhlIGNvbm5lY3Rpb24gYXQgdGhlIGVuZCBvZiBhIHdpdGgtc3RhdGVtZW50IGJsb2NrLgogICAgICAgICIiIgogICAgICAgIGRlbCBleGl0VHlwZSwgdmFsdWUsIHRyYWNlYmFjawogICAgICAgIHNlbGYuY2xvc2UoKQoKICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKICAgICAgICAgICAgcHJpbnQoIkNsb3NpbmcgUENBTiBidXMiKQoKICAgICAgICBzZWxmLl9fY29ubmVjdGlvbi5zaHV0ZG93bigpCgogICAgZGVmIF9zZW5kKHNlbGYsIGhvc3RJRCwgbW9kdWxlSUQsIGRhdGEpOgogICAgICAgICIiIgogICAgICAgICAgICBTZW5kIHRoZSBieXRlYXJyYXkgcGFyYW1ldGVyIFtkYXRhXS4KCiAgICAgICAgICAgIFRoaXMgaXMgYSByZXF1aXJlZCBvdmVycmlkZSBmdW5jdGlvbiBmb3IgdXNpbmcgdGhlIHRtY2xfaW50ZXJmYWNlCiAgICAgICAgICAgIGNsYXNzLgogICAgICAgICIiIgogICAgICAgIGRlbCBob3N0SUQKCiAgICAgICAgbXNnID0gY2FuLk1lc3NhZ2UoYXJiaXRyYXRpb25faWQ9bW9kdWxlSUQsIGlzX2V4dGVuZGVkX2lkPUZhbHNlLCBkYXRhPWRhdGFbMTpdKQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYuX19jb25uZWN0aW9uLnNlbmQobXNnKQogICAgICAgIGV4Y2VwdCBDYW5FcnJvciBhcyBlOgogICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uRXJyb3IoIkZhaWxlZCB0byBzZW5kIGEgVE1DTCBtZXNzYWdlIikgZnJvbSBlCgoKICAgIGRlZiBfcmVjdihzZWxmLCBob3N0SUQsIG1vZHVsZUlEKToKICAgICAgICAiIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBSZWFkIDkgYnl0ZXMgYW5kIHJldHVybiB0aGVtIGFzIGEgYnl0ZWFycmF5LgoKICAgICAgICAgICAgVGhpcyBpcyBhIHJlcXVpcmVkIG92ZXJyaWRlIGZ1bmN0aW9uIGZvciB1c2luZyB0aGUgdG1jbF9pbnRlcmZhY2UKICAgICAgICAgICAgY2xhc3MuCjx8ZmltX2VuZHw+"]
["8afe05e46203beb539b714d3b753f9d56b8b9fd4-2","8afe05e46203beb539b714d3b753f9d56b8b9fd4","PHxmaW1fcHJlZml4fD4KJycnCkNyZWF0ZWQgb24gMzEuMDUuMjAxOQoKQGF1dGhvcjogTEgKJycnCgppbXBvcnQgY2FuCgpmcm9tIFB5VHJpbmFtaWMuY29ubmVjdGlvbnMudG1jbF9pbnRlcmZhY2UgaW1wb3J0IHRtY2xfaW50ZXJmYWNlCmZyb20gY2FuLmludGVyZmFjZXMucGNhbi5wY2FuIGltcG9ydCBQY2FuRXJyb3IKZnJvbSBjYW4gaW1wb3J0IENhbkVycm9yCgpfQ0hBTk5FTFMgPSBbCiAgICAiUENBTl9VU0JCVVMxIiwgICJQQ0FOX1VTQkJVUzIiLCAgIlBDQU5fVVNCQlVTMyIsICAiUENBTl9VU0JCVVM0IiwKICAgICJQQ0FOX1VTQkJVUzUiLCAgIlBDQU5fVVNCQlVTNiIsICAiUENBTl9VU0JCVVM3IiwgICJQQ0FOX1VTQkJVUzgiLAogICAgIlBDQU5fVVNCQlVTOSIsICAiUENBTl9VU0JCVVMxMCIsICJQQ0FOX1VTQkJVUzExIiwgIlBDQU5fVVNCQlVTMTIiLAogICAgIlBDQU5fVVNCQlVTMTMiLCAiUENBTl9VU0JCVVMxNCIsICJQQ0FOX1VTQkJVUzE1IiwgIlBDQU5fVVNCQlVTMTYiLAoKICAgICJQQ0FOX0lTQUJVUzEiLCAgIlBDQU5fSVNBQlVTMiIsICAiUENBTl9JU0FCVVMzIiwgICJQQ0FOX0lTQUJVUzQiLAogICAgIlBDQU5fSVNBQlVTNSIsICAiUENBTl9JU0FCVVM2IiwgICJQQ0FOX0lTQUJVUzciLCAgIlBDQU5fSVNBQlVTOCIsCgogICAgIlBDQU5fRE5HQlVTMSIsCgogICAgIlBDQU5fUENJQlVTMSIsICAiUENBTl9QQ0lCVVMyIiwgICJQQ0FOX1BDSUJVUzMiLCAgIlBDQU5fUENJQlVTNCIsCiAgICAiUENBTl9QQ0lCVVM1IiwgICJQQ0FOX1BDSUJVUzYiLCAgIlBDQU5fUENJQlVTNyIsICAiUENBTl9QQ0lCVVM4IiwKICAgICJQQ0FOX1BDSUJVUzkiLCAgIlBDQU5fUENJQlVTMTAiLCAiUENBTl9QQ0lCVVMxMSIsICJQQ0FOX1BDSUJVUzEyIiwKICAgICJQQ0FOX1BDSUJVUzEzIiwgIlBDQU5fUENJQlVTMTQiLCAiUENBTl9QQ0lCVVMxNSIsICJQQ0FOX1BDSUJVUzE2IiwKCiAgICAiUENBTl9QQ0NCVVMxIiwgICJQQ0FOX1BDQ0JVUzIiLAoKICAgICJQQ0FOX0xBTkJVUzEiLCAgIlBDQU5fTEFOQlVTMiIsICAiUENBTl9MQU5CVVMzIiwgICJQQ0FOX0xBTkJVUzQiLAogICAgIlBDQU5fTEFOQlVTNSIsICAiUENBTl9MQU5CVVM2IiwgICJQQ0FOX0xBTkJVUzciLCAgIlBDQU5fTEFOQlVTOCIsCiAgICAiUENBTl9MQU5CVVM5IiwgICJQQ0FOX0xBTkJVUzEwIiwgIlBDQU5fTEFOQlVTMTEiLCAiUENBTl9MQU5CVVMxMiIsCiAgICAiUENBTl9MQU5CVVMxMyIsICJQQ0FOX0xBTkJVUzE0IiwgIlBDQU5fTEFOQlVTMTUiLCAiUENBTl9MQU5CVVMxNiIKICAgIF0KCmNsYXNzIHBjYW5fdG1jbF9pbnRlcmZhY2UodG1jbF9pbnRlcmZhY2UpOgogICAgIiIiCiAgICBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBUTUNMIGNvbm5lY3Rpb24gb3ZlciBhIFBDQU4gYWRhcHRlci4KICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBkYXRhcmF0ZT0xMDAwMDAwLCBob3N0SUQ9MiwgbW9kdWxlSUQ9MSwgZGVidWc9RmFsc2UpOgogICAgICAgIGlmIHR5cGUocG9ydCkgIT0gc3RyOgogICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKCiAgICAgICAgaWYgbm90IHBvcnQgaW4gX0NIQU5ORUxTOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHBvcnQiKQoKICAgICAgICB0bWNsX2ludGVyZmFjZS5fX2luaXRfXyhzZWxmLCBob3N0SUQsIG1vZHVsZUlELCBkZWJ1ZykKCiAgICAgICAgc2VsZi5fZGVidWcgICAgPSBkZWJ1ZwogICAgICAgIHNlbGYuX19jaGFubmVsICA9IHBvcnQKICAgICAgICBzZWxmLl9fYml0cmF0ZSAgPSBkYXRhcmF0ZQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYuX19jb25uZWN0aW9uID0gY2FuLkJ1cyhpbnRlcmZhY2U9InBjYW4iLCBjaGFubmVsPXNlbGYuX19jaGFubmVsLCBiaXRyYXRlPXNlbGYuX19iaXRyYXRlKQoKICAgICAgICAgICAgc2VsZi5fX2Nvbm5lY3Rpb24uc2V0X2ZpbHRlcnMoW3sgImNhbl9pZCI6IGhvc3RJRCwgImNhbl9tYXNrIjogMHhGRkZGRkZGRiB9XSkKCiAgICAgICAgZXhjZXB0IFBjYW5FcnJvciBhcyBlOgogICAgICAgICAgICBzZWxmLl9fY29ubmVjdGlvbiA9IE5vbmUKICAgICAgICAgICAgcmFpc2UgQ29ubmVjdGlvbkVycm9yKCJGYWlsZWQgdG8gY29ubmVjdCB0byBQQ0FOIGJ1cyIpIGZyb20gZQoKICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKICAgICAgICAgICAgcHJpbnQoIk9wZW5lZCBidXMgb24gY2hhbm5lbCAiICsgc2VsZi5fX2NoYW5uZWwpCgogICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZgoKICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGl0VHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CiAgICAgICAgIiIiCiAgICAgICAgQ2xvc2UgdGhlIGNvbm5lY3Rpb24gYXQgdGhlIGVuZCBvZiBhIHdpdGgtc3RhdGVtZW50IGJsb2NrLgogICAgICAgICIiIgogICAgICAgIGRlbCBleGl0VHlwZSwgdmFsdWUsIHRyYWNlYmFjawogICAgICAgIHNlbGYuY2xvc2UoKQoKICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKICAgICAgICAgICAgcHJpbnQoIkNsb3NpbmcgUENBTiBidXMiKQoKICAgICAgICBzZWxmLl9fY29ubmVjdGlvbi5zaHV0ZG93bigpCgogICAgZGVmIF9zZW5kKHNlbGYsIGhvc3RJRCwgbW9kdWxlSUQsIGRhdGEpOgogICAgICAgICIiIgogICAgICAgICAgICBTZW5kIHRoZSBieXRlYXJyYXkgcGFyYW1ldGVyIFtkYXRhXS4KCiAgICAgICAgICAgIFRoaXMgaXMgYSByZXF1aXJlZCBvdmVycmlkZSBmdW5jdGlvbiBmb3IgdXNpbmcgdGhlIHRtY2xfaW50ZXJmYWNlCiAgICAgICAgICAgIGNsYXNzLgogICAgICAgICIiIgogICAgICAgIGRlbCBob3N0SUQKCiAgICAgICAgbXNnID0gY2FuLk1lc3NhZ2UoYXJiaXRyYXRpb25faWQ9bW9kdWxlSUQsIGlzX2V4dGVuZGVkX2lkPUZhbHNlLCBkYXRhPWRhdGFbMTpdKQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYuX19jb25uZWN0aW9uLnNlbmQobXNnKQogICAgICAgIGV4Y2VwdCBDYW5FcnJvciBhcyBlOgogICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uRXJyb3IoIkZhaWxlZCB0byBzZW5kIGEgVE1DTCBtZXNzYWdlIikgZnJvbSBlCgoKICAgIGRlZiBfcmVjdihzZWxmLCBob3N0SUQsIG1vZHVsZUlEKToKICAgICAgICAiIiIKICAgICAgICAgICAgUmVhZCA5IGJ5dGVzIGFuZCByZXR1cm4gdGhlbSBhcyBhIGJ5dGVhcnJheS4KCiAgICAgICAgICAgIFRoaXMgaXMgYSByZXF1aXJlZCBvdmVycmlkZSBmdW5jdGlvbiBmb3IgdXNpbmcgdGhlIHRtY2xfaW50ZXJmYWNlCiAgICAgICAgICAgIGNsYXNzLgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgbXNnID0gc2VsZi5fX2Nvbm5lY3Rpb24ucmVjdih0aW1lb3V0PTMpCiAgICAgICAgZXhjZXB0IENhbkVycm9yIGFzIGU6CiAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25FcnJvcigiRmFpbGVkIHRvIHJlY2VpdmUgYSBUTUNMIG1lc3NhZ2UiKSBmcm9tIGUKCiAgICAgICAgaWYgbm90IG1zZzoKICAgICAgICAgICAgIyBUb2RvOiBUaW1lb3V0IHJldHJ5IG1lY2hhbmlzbQogICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uRXJyb3IoIlJlY3YgdGltZWQgb3V0IikKCiAgICAgICAgaWYgbXNnLmFyYml0cmF0aW9uX2lkICE9IGhvc3RJRDoKICAgICAgICAgICAgIyBUaGUgZmlsdGVyIHNob3VsZG4ndCBsZXQgd3JvbmcgbWVzc2FnZXMgdGhyb3VnaC4KICAgICAgICAgICAgIyBUaGlzIGlzIGp1c3QgYSBzYW5pdHkgY2hlY2sKICAgICAgICAgICAgcmFpc2UgQ29ubmVjdGlvbkVycm9yKCJSZWNlaXZlZCB3cm9uZyBJRCIpCgogICAgICAgIHJldHVybiBieXRlYXJyYXkoW21zZy5hcmJpdHJhdGlvbl9pZF0pICsgbXNnLmRhdGEKCiAgICBkZWYgcHJpbnRJbmZvKHNlbGYpOgogICAgICAgIHByaW50KCJDb25uZWN0aW9uOiB0eXBlPXBjYW5fdG1jbF9pbnRlcmZhY2UgY2hhbm5lbD0iICsgc2VsZi5fX2NoYW5uZWwgKyAiIGJpdHJhdGU9IiArIHN0cihzZWxmLl9fYml0cmF0ZSkpCgogICAgZGVmIGVuYWJsZURlYnVnKHNlbGYsIGVuYWJsZSk6CiAgICAgICAgc2VsZi5fZGVidWcgPSBlbmFibGUKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgc3VwcG9ydHNUTUNMKCk6CiAgICAgICAgcmV0dXJuIFRydWUKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgc3VwcG9ydHNDQU5vcGVuKCk6CiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGxpc3QoKToKICAgICAgICAiIiIKICAgICAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiBhdmFpbGFibGUgY29ubmVjdGlvbiBwb3J0cyBhcyBhIGxpc3Qgb2Ygc3RyaW5ncy4KCiAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIHVzaW5nIHRoaXMgaW50ZXJmYWNlIHdpdGggdGhlCiAgICAgICAgICAgIGNvbm5lY3Rpb24gbWFuYWdlci4KICAgICAgICAiIiIKICAgICAgICByZXR1cm4gX0NIQU5ORUxTCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIiIiCiAgICAgICAgZGVsIG1vZHVsZUlECgogICAgICAgIHRyeToKPHxmaW1fZW5kfD4="]
["8afe05e46203beb539b714d3b753f9d56b8b9fd4-3","8afe05e46203beb539b714d3b753f9d56b8b9fd4","PHxmaW1fcHJlZml4fD4KJycnCkNyZWF0ZWQgb24gMzEuMDUuMjAxOQoKQGF1dGhvcjogTEgKJycnCgppbXBvcnQgY2FuCgpmcm9tIFB5VHJpbmFtaWMuY29ubmVjdGlvbnMudG1jbF9pbnRlcmZhY2UgaW1wb3J0IHRtY2xfaW50ZXJmYWNlCmZyb20gY2FuLmludGVyZmFjZXMucGNhbi5wY2FuIGltcG9ydCBQY2FuRXJyb3IKZnJvbSBjYW4gaW1wb3J0IENhbkVycm9yCgpfQ0hBTk5FTFMgPSBbCiAgICAiUENBTl9VU0JCVVMxIiwgICJQQ0FOX1VTQkJVUzIiLCAgIlBDQU5fVVNCQlVTMyIsICAiUENBTl9VU0JCVVM0IiwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgIlBDQU5fVVNCQlVTNSIsICAiUENBTl9VU0JCVVM2IiwgICJQQ0FOX1VTQkJVUzciLCAgIlBDQU5fVVNCQlVTOCIsCiAgICAiUENBTl9VU0JCVVM5IiwgICJQQ0FOX1VTQkJVUzEwIiwgIlBDQU5fVVNCQlVTMTEiLCAiUENBTl9VU0JCVVMxMiIsCiAgICAiUENBTl9VU0JCVVMxMyIsICJQQ0FOX1VTQkJVUzE0IiwgIlBDQU5fVVNCQlVTMTUiLCAiUENBTl9VU0JCVVMxNiIsCgo8fGZpbV9lbmR8Pg=="]
["8afe05e46203beb539b714d3b753f9d56b8b9fd4-4","8afe05e46203beb539b714d3b753f9d56b8b9fd4","PHxmaW1fcHJlZml4fD4KJycnCkNyZWF0ZWQgb24gMzEuMDUuMjAxOQoKQGF1dGhvcjogTEgKJycnCgppbXBvcnQgY2FuCgpmcm9tIFB5VHJpbmFtaWMuY29ubmVjdGlvbnMudG1jbF9pbnRlcmZhY2UgaW1wb3J0IHRtY2xfaW50ZXJmYWNlCmZyb20gY2FuLmludGVyZmFjZXMucGNhbi5wY2FuIGltcG9ydCBQY2FuRXJyb3IKZnJvbSBjYW4gaW1wb3J0IENhbkVycm9yCgpfQ0hBTk5FTFMgPSBbCiAgICAiUENBTl9VU0JCVVMxIiwgICJQQ0FOX1VTQkJVUzIiLCAgIlBDQU5fVVNCQlVTMyIsICAiUENBTl9VU0JCVVM0IiwKICAgICJQQ0FOX1VTQkJVUzUiLCAgIlBDQU5fVVNCQlVTNiIsICAiUENBTl9VU0JCVVM3IiwgICJQQ0FOX1VTQkJVUzgiLAogICAgIlBDQU5fVVNCQlVTOSIsICAiUENBTl9VU0JCVVMxMCIsICJQQ0FOX1VTQkJVUzExIiwgIlBDQU5fVVNCQlVTMTIiLAogICAgIlBDQU5fVVNCQlVTMTMiLCAiUENBTl9VU0JCVVMxNCIsICJQQ0FOX1VTQkJVUzE1IiwgIlBDQU5fVVNCQlVTMTYiLAoKICAgICJQQ0FOX0lTQUJVUzEiLCAgIlBDQU5fSVNBQlVTMiIsICAiUENBTl9JU0FCVVMzIiwgICJQQ0FOX0lTQUJVUzQiLAogICAgIlBDQU5fSVNBQlVTNSIsICAiUENBTl9JU0FCVVM2IiwgICJQQ0FOX0lTQUJVUzciLCAgIlBDQU5fSVNBQlVTOCIsCgogICAgIlBDQU5fRE5HQlVTMSIsCgogICAgIlBDQU5fUENJQlVTMSIsICAiUENBTl9QQ0lCVVMyIiwgICJQQ0FOX1BDSUJVUzMiLCAgIlBDQU5fUENJQlVTNCIsCiAgICAiUENBTl9QQ0lCVVM1IiwgICJQQ0FOX1BDSUJVUzYiLCAgIlBDQU5fUENJQlVTNyIsICAiUENBTl9QQ0lCVVM4IiwKICAgICJQQ0FOX1BDSUJVUzkiLCAgIlBDQU5fUENJQlVTMTAiLCAiUENBTl9QQ0lCVVMxMSIsICJQQ0FOX1BDSUJVUzEyIiwKICAgICJQQ0FOX1BDSUJVUzEzIiwgIlBDQU5fUENJQlVTMTQiLCAiUENBTl9QQ0lCVVMxNSIsICJQQ0FOX1BDSUJVUzE2IiwKCiAgICAiUENBTl9QQ0NCVVMxIiwgICJQQ0FOX1BDQ0JVUzIiLAoKICAgICJQQ0FOX0xBTkJVUzEiLCAgIlBDQU5fTEFOQlVTMiIsICAiUENBTl9MQU5CVVMzIiwgICJQQ0FOX0xBTkJVUzQiLAogICAgIlBDQU5fTEFOQlVTNSIsICAiUENBTl9MQU5CVVM2IiwgICJQQ0FOX0xBTkJVUzciLCAgIlBDQU5fTEFOQlVTOCIsCiAgICAiUENBTl9MQU5CVVM5IiwgICJQQ0FOX0xBTkJVUzEwIiwgIlBDQU5fTEFOQlVTMTEiLCAiUENBTl9MQU5CVVMxMiIsCiAgICAiUENBTl9MQU5CVVMxMyIsICJQQ0FOX0xBTkJVUzE0IiwgIlBDQU5fTEFOQlVTMTUiLCAiUENBTl9MQU5CVVMxNiIKICAgIF0KCmNsYXNzIHBjYW5fdG1jbF9pbnRlcmZhY2UodG1jbF9pbnRlcmZhY2UpOgogICAgIiIiCiAgICBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBUTUNMIGNvbm5lY3Rpb24gb3ZlciBhIFBDQU4gYWRhcHRlci4KICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBkYXRhcmF0ZT0xMDAwMDAwLCBob3N0SUQ9MiwgbW9kdWxlSUQ9MSwgZGVidWc9RmFsc2UpOgogICAgICAgIGlmIHR5cGUocG9ydCkgIT0gc3RyOgogICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKCiAgICAgICAgaWYgbm90IHBvcnQgaW4gX0NIQU5ORUxTOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHBvcnQiKQoKICAgICAgICB0bWNsX2ludGVyZmFjZS5fX2luaXRfXyhzZWxmLCBob3N0SUQsIG1vZHVsZUlELCBkZWJ1ZykKCiAgICAgICAgc2VsZi5fZGVidWcgICAgPSBkZWJ1ZwogICAgICAgIHNlbGYuX19jaGFubmVsICA9IHBvcnQKICAgICAgICBzZWxmLl9fYml0cmF0ZSAgPSBkYXRhcmF0ZQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYuX19jb25uZWN0aW9uID0gY2FuLkJ1cyhpbnRlcmZhY2U9InBjYW4iLCBjaGFubmVsPXNlbGYuX19jaGFubmVsLCBiaXRyYXRlPXNlbGYuX19iaXRyYXRlKQoKICAgICAgICAgICAgc2VsZi5fX2Nvbm5lY3Rpb24uc2V0X2ZpbHRlcnMoW3sgImNhbl9pZCI6IGhvc3RJRCwgImNhbl9tYXNrIjogMHhGRkZGRkZGRiB9XSkKCiAgICAgICAgZXhjZXB0IFBjYW5FcnJvciBhcyBlOgogICAgICAgICAgICBzZWxmLl9fY29ubmVjdGlvbiA9IE5vbmUKICAgICAgICAgICAgcmFpc2UgQ29ubmVjdGlvbkVycm9yKCJGYWlsZWQgdG8gY29ubmVjdCB0byBQQ0FOIGJ1cyIpIGZyb20gZQoKICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKICAgICAgICAgICAgcHJpbnQoIk9wZW5lZCBidXMgb24gY2hhbm5lbCAiICsgc2VsZi5fX2NoYW5uZWwpCgogICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZgoKICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGl0VHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CiAgICAgICAgIiIiCiAgICAgICAgQ2xvc2UgdGhlIGNvbm5lY3Rpb24gYXQgdGhlIGVuZCBvZiBhIHdpdGgtc3RhdGVtZW50IGJsb2NrLgogICAgICAgICIiIgogICAgICAgIGRlbCBleGl0VHlwZSwgdmFsdWUsIHRyYWNlYmFjawogICAgICAgIHNlbGYuY2xvc2UoKQoKICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKICAgICAgICAgICAgcHJpbnQoIkNsb3NpbmcgUENBTiBidXMiKQoKICAgICAgICBzZWxmLl9fY29ubmVjdGlvbi5zaHV0ZG93bigpCgogICAgZGVmIF9zZW5kKHNlbGYsIGhvc3RJRCwgbW9kdWxlSUQsIGRhdGEpOgogICAgICAgICIiIgogICAgICAgICAgICBTZW5kIHRoZSBieXRlYXJyYXkgcGFyYW1ldGVyIFtkYXRhXS4KCiAgICAgICAgICAgIFRoaXMgaXMgYSByZXF1aXJlZCBvdmVycmlkZSBmdW5jdGlvbiBmb3IgdXNpbmcgdGhlIHRtY2xfaW50ZXJmYWNlCiAgICAgICAgICAgIGNsYXNzLgogICAgICAgICIiIgogICAgICAgIGRlbCBob3N0SUQKCiAgICAgICAgbXNnID0gY2FuLk1lc3NhZ2UoYXJiaXRyYXRpb25faWQ9bW9kdWxlSUQsIGlzX2V4dGVuZGVkX2lkPUZhbHNlLCBkYXRhPWRhdGFbMTpdKQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYuX19jb25uZWN0aW9uLnNlbmQobXNnKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZXhjZXB0IENhbkVycm9yIGFzIGU6CiAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25FcnJvcigiRmFpbGVkIHRvIHNlbmQgYSBUTUNMIG1lc3NhZ2UiKSBmcm9tIGUKCgo8fGZpbV9lbmR8Pg=="]
["e7b3acf245e03faf5bb1ae791b190c25ae8c6396-1","e7b3acf245e03faf5bb1ae791b190c25ae8c6396","PHxmaW1fcHJlZml4fD4KIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIwojIENvcHlyaWdodCAyMDE4IERhbmllbCBNYXJrIEdhc3MKIwojIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAojIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKIwojIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCiMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiMKIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgojIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAojIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQojIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAojIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KIyBUSEUgU09GVFdBUkUuCiMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0LCBkaXZpc2lvbiwgcHJpbnRfZnVuY3Rpb24sIHVuaWNvZGVfbGl0ZXJhbHMKCmltcG9ydCBvcwppbXBvcnQgc3lzCmZyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCmZyb20gZ2xvYiBpbXBvcnQgZ2xvYgo8fGZpbV9ob2xlfD4KClVQREFURV9FWFQgPSAnLnVwZGF0ZS5weScKCgpkZWYgbWFpbihhcmdzPU5vbmUpOgogICAgIiIiQ29tbWFuZCBsaW5lIGludGVyZmFjZS4KCiAgICA6cGFyYW0gbGlzdCBhcmdzOiBjb21tYW5kIGxpbmUgb3B0aW9ucyAoZGVmYXVsdHMgdG8gc3lzLmFyZ3YpCiAgICA6cmV0dXJuczogZXhpdCBjb2RlCiAgICA6cnR5cGU6IGludAoKICAgICIiIgogICAgcGFyc2VyID0gQXJndW1lbnRQYXJzZXIoCiAgICAgICAgcHJvZz0nYmFzZWxpbmUnLAogICAgICAgIGRlc2NyaXB0aW9uPSdPdmVyd3JpdGUgc2NyaXB0IHdpdGggYmFzZWxpbmUgdXBkYXRlLicpCgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAncGF0aCcsIG5hcmdzPScqJywKICAgICAgICBoZWxwPSdtb2R1bGUgb3IgZGlyZWN0b3J5IHBhdGgnKQoKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy13JywgJy0td2FsaycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgaGVscD0ncmVjdXJzaXZlbHkgd2FsayBkaXJlY3RvcmllcycpCgogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCgogICAgcGF0aHMgPSBhcmdzLnBhdGggb3IgWycuJ10KCiAgICBwYXRocyA9IFtwYXRoIGZvciBwYXR0ZXJuIGluIHBhdGhzIGZvciBwYXRoIGluIGdsb2IocGF0dGVybildCgogICAgaWYgYXJncy53YWxrOgogICAgICAgIGZvciBkaXJwYXRoIGluIChwIGZvciBwIGluIHBhdGhzIGlmIG9zLnBhdGguaXNkaXIocCkpOgogICAgICAgICAgICBmb3Igcm9vdCwgX2RpcnMsIGZpbGVzIGluIG9zLndhbGsoZGlycGF0aCk6CiAgICAgICAgICAgICAgICBwYXRocyArPSAob3MucGF0aC5qb2luKHJvb3QsIGZpbGVuYW1lKSBmb3IgZmlsZW5hbWUgaW4gZmlsZXMpCiAgICBlbHNlOgogICAgICAgIGZvciBkaXJwYXRoIGluIChwIGZvciBwIGluIHBhdGhzIGlmIG9zLnBhdGguaXNkaXIocCkpOgogICAgICAgICAgICBwYXRocyArPSAob3MucGF0aC5qb2luKGRpcnBhdGgsIHB0aCkgZm9yIHB0aCBpbiBvcy5saXN0ZGlyKGRpcnBhdGgpKQoKICAgIHVwZGF0ZV9wYXRocyA9IFsKICAgICAgICBvcy5wYXRoLmFic3BhdGgocCkgZm9yIHAgaW4gcGF0aHMgaWYgcC5sb3dlcigpLmVuZHN3aXRoKFVQREFURV9FWFQpXQoKICAgIGlmIHVwZGF0ZV9wYXRoczoKICAgICAgICBzY3JpcHRfcGF0aHMgPSBbcHRoWzotbGVuKFVQREFURV9FWFQpXSArICcucHknIGZvciBwdGggaW4gdXBkYXRlX3BhdGhzXQoKICAgICAgICBwcmludCgnRm91bmQgdXBkYXRlcyBmb3I6JykKICAgICAgICBmb3IgcGF0aCBpbiBzY3JpcHRfcGF0aHM6CiAgICAgICAgICAgIHByaW50KCcgICcgKyBvcy5wYXRoLnJlbHBhdGgocGF0aCkpCiAgICAgICAgcHJpbnQoKQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGlucHV0KCdIaXQgW0VOVEVSXSB0byB1cGRhdGUsIFtDdHJsLUNdIHRvIGNhbmNlbCAnKQogICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgICAgcHJpbnQoKQogICAgICAgICAgICBwcmludCgnVXBkYXRlIGNhbmNlbGVkLicpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQoKQogICAgICAgICAgICBmb3Igc2NyaXB0X3BhdGgsIHVwZGF0ZV9wYXRoIGluIHppcChzY3JpcHRfcGF0aHMsIHVwZGF0ZV9wYXRocyk6CiAgICAgICAgICAgICAgICB3aXRoIG9wZW4odXBkYXRlX3BhdGgpIGFzIHVwZGF0ZToKICAgICAgICAgICAgICAgICAgICBuZXdfY29udGVudCA9IHVwZGF0ZS5yZWFkKCkKICAgICAgICAgICAgICAgIHdpdGggb3BlbihzY3JpcHRfcGF0aCwgJ3cnKSBhcyBzY3JpcHQ6CiAgICAgICAgICAgICAgICAgICAgc2NyaXB0LndyaXRlKG5ld19jb250ZW50KQogICAgICAgICAgICAgICAgb3MucmVtb3ZlKHVwZGF0ZV9wYXRoKQogICAgICAgICAgICAgICAgcHJpbnQoCiAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5yZWxwYXRoKHVwZGF0ZV9wYXRoKSArCiAgICAgICAgICAgICAgICAgICAgJyAtPiAnICsKICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLnJlbHBhdGgoc2NyaXB0X3BhdGgpKQoKICAgIHJldHVybiAwCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKCiAgICBzeXMuZXhpdChtYWluKCkpCjx8ZmltX3N1ZmZpeHw+CgpQWTIgPSBzeXMudmVyc2lvbl9pbmZvLm1ham9yIDwgMwppZiBQWTI6ICAjIHByYWdtYTogbm8gY292ZXIKICAgIGlucHV0ID0gcmF3X2lucHV0Cjx8ZmltX2VuZHw+"]
["4179c2b34ec948cd2db1445fda1abcbd0ae932ca-1","4179c2b34ec948cd2db1445fda1abcbd0ae932ca","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCmltcG9ydCBjc3YKaW1wb3J0IHN5cwppbXBvcnQgbWF0aAoKIyBST05zIGFuZCBOb25lIFZvdGUgYXJlIG5vdCBlcXVpdmFsZW50LCBST04gaXMgYSBjYW5kaWRhdGUsIE5vbmUgVm90ZSBpcyBqdXN0CiMgdGhyb3duIG91dC4KIyBOb25lIHZvdGVzIGluIGZyb250IG9mIHByZWZlcmVuY2VzIGFyZSBpZ25vcmVkLCBlLmcuIGZpcnN0IC0gTm9uZSwgc2Vjb25kIC0KIyBBbGljZSwgdGhpcmQgLSBCb2IgaXMgZXF1aXZhbGVudCB0byBmaXJzdCAtIEFsaWNlLCBzZWNvbmQgLSBCb2IuCiMgUXVvdGEgaXMgcGVyIHBvc2l0aW9uIG5vdCBpbmNsdWRpbmcgcGVvcGxlIHdobyB2b3RlZCBub25lIGluIGV2ZXJ5dGhpbmcsIGFuZAojIGlzIGZsb29yKGhhbGYgb2YgdGhhdCkgKyAxLgojIElmIG9ubHkgdHdvIGNhbmRpZGF0ZXMgYXJlIGxlZnQgd2UgZm9yZWdvIHRoZSBxdW90YQojIElmIHRpZS1icmVhayBiZXR3ZWVuIGxvd2VzdCB0d28gY2FuZGlkYXRlcywgbG9vayBhdCBhbGwgc2Vjb25kIGhpZ2hlc3QKIyBwcmVmZXJlbmNlcyBvZiByZW1haW5pbmcgYmFsbG90cyAoaS5lLiBvbmVzIHdoaWNoIHN0aWxsIGhhdmUgdmFsaWQgY2FuZGlkYXRlcwojIGxlZnQgb24gdGhlbSkgYW5kIHRpZS1icmVhayBvbiB0aGF0LgojIElmIHRpZXMgY29udGludWUgdG8gdGhlIGVuZCB3aXRoIG9ubHkgdHdvIGNhbmRpZGF0ZXMgbGVmdCBhbmQgc2Vjb25kIGFuZAojIHRoaXJkIHByZWZlcmVuY2VzIGRvbid0IGJyZWFrIHRoZSB0aWUsIGZsaXAgYSBjb2luICh0aGUgY2hhbmNlcyBvZiB0aGlzIGV2ZXJ5CiMgaGFwcGVuaW5nIGFyZSBhbG1vc3QgbmlsKS4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKIyAtIE5vbmUgdm90ZSBpcyBlbXB0eSBzdHJpbmcgJycKIyAtIE9ubHkgdXAgdG8gdGhyZWUgcHJlZmVyZW5jZXMsIHNob3VsZCBiZSBsYWJlbGVkCiMgICAiZmlyc3RfY2hvaWNlX3Bvc2l0aW9uX25hbWUiLCBldGMKPHxmaW1fZW5kfD4="]
["4179c2b34ec948cd2db1445fda1abcbd0ae932ca-2","4179c2b34ec948cd2db1445fda1abcbd0ae932ca","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCmltcG9ydCBjc3YKaW1wb3J0IHN5cwppbXBvcnQgbWF0aAoKIyBST05zIGFuZCBOb25lIFZvdGUgYXJlIG5vdCBlcXVpdmFsZW50LCBST04gaXMgYSBjYW5kaWRhdGUsIE5vbmUgVm90ZSBpcyBqdXN0CiMgdGhyb3duIG91dC4KIyBOb25lIHZvdGVzIGluIGZyb250IG9mIHByZWZlcmVuY2VzIGFyZSBpZ25vcmVkLCBlLmcuIGZpcnN0IC0gTm9uZSwgc2Vjb25kIC0KIyBBbGljZSwgdGhpcmQgLSBCb2IgaXMgZXF1aXZhbGVudCB0byBmaXJzdCAtIEFsaWNlLCBzZWNvbmQgLSBCb2IuCiMgUXVvdGEgaXMgcGVyIHBvc2l0aW9uIG5vdCBpbmNsdWRpbmcgcGVvcGxlIHdobyB2b3RlZCBub25lIGluIGV2ZXJ5dGhpbmcsIGFuZAojIGlzIGZsb29yKGhhbGYgb2YgdGhhdCkgKyAxLgojIElmIG9ubHkgdHdvIGNhbmRpZGF0ZXMgYXJlIGxlZnQgd2UgZm9yZWdvIHRoZSBxdW90YQojIElmIHRpZS1icmVhayBiZXR3ZWVuIGxvd2VzdCB0d28gY2FuZGlkYXRlcywgbG9vayBhdCBhbGwgc2Vjb25kIGhpZ2hlc3QKIyBwcmVmZXJlbmNlcyBvZiByZW1haW5pbmcgYmFsbG90cyAoaS5lLiBvbmVzIHdoaWNoIHN0aWxsIGhhdmUgdmFsaWQgY2FuZGlkYXRlcwojIGxlZnQgb24gdGhlbSkgYW5kIHRpZS1icmVhayBvbiB0aGF0LgojIElmIHRpZXMgY29udGludWUgdG8gdGhlIGVuZCB3aXRoIG9ubHkgdHdvIGNhbmRpZGF0ZXMgbGVmdCBhbmQgc2Vjb25kIGFuZAojIHRoaXJkIHByZWZlcmVuY2VzIGRvbid0IGJyZWFrIHRoZSB0aWUsIGZsaXAgYSBjb2luICh0aGUgY2hhbmNlcyBvZiB0aGlzIGV2ZXJ5CiMgaGFwcGVuaW5nIGFyZSBhbG1vc3QgbmlsKS4KCiMgLSBOb25lIHZvdGUgaXMgZW1wdHkgc3RyaW5nICcnCiMgLSBPbmx5IHVwIHRvIHRocmVlIHByZWZlcmVuY2VzLCBzaG91bGQgYmUgbGFiZWxlZAojICAgImZpcnN0X2Nob2ljZV9wb3NpdGlvbl9uYW1lIiwgZXRjCiMgLSBJJ20gZGVmaW5pbmcgdGhlIGZvbGxvd2luZyB0ZXJtczogQSAiYmFsbG90IiByZWZlciB0byB0aGUgcmFua2VkIHByZWZlcmVuY2UKIyAgIG9mIG9uZSB2b3RlciBmb3IgYSBzaW5nbGUgcG9zaXRpb24sIGFzIG9wcG9zZWQgdG8gYSAidm90ZSIgd2hpY2ggcmVmZXJzIHRvCiMgICBvbmUgdm90ZXIncyBiYWxsb3RzIGZvciBhbGwgdGhlIHBvc2l0aW9ucwpYX0NIT0lDRV9LRVlTID0geydmaXJzdCc6IDEsICdzZWNvbmQnOiAyLCAndGhpcmQnOiAzfQpGSVJTVF9DSE9JQ0VfS0VZID0gJ2ZpcnN0X2Nob2ljZV8nClJPTiA9ICdST04nCk5PTkVfVk9URSA9ICcnCgoKIyBDb3VudHMgdGhlIGZpcnN0IHByZWZlcmVuY2UgYmFsbG90cyBmb3IgZWFjaCBjYW5kaWRhdGUsIHJldHVybmluZyBhCiMgZGljdGlvbmFyeSBvZiBjYW5kaWRhdGU6IG51bWJlciBvZiBmaXJzdCBwcmVmZXJlbmNlcy4KIyBiYWxsb3RzIC0gYSBsaXN0IG9mIGRpY3Rpb25hcmllcyByZXByZXNlbnRpbmcgcHJlZmVyZW5jZSBiYWxsb3RzLAojICAgICAgICAgZS5nLiBbezE6ICdBJywgMjogJ0InLCAuLi59LCAuLi5dCmRlZiB0YWxseShiYWxsb3RzLCBjYW5kaWRhdGVzKToKICAgIHJlc3VsdHMgPSB7Y2FuZGlkYXRlOiAwIGZvciBjYW5kaWRhdGUgaW4gY2FuZGlkYXRlc30KICAgIGZvciBiYWxsb3QgaW4gYmFsbG90czoKICAgICAgICByZXN1bHRzW2JhbGxvdFsxXV0gKz0gMQogICAgcmV0dXJuIHJlc3VsdHMKCgojIEVsaW1pbmF0ZXMgY2FuZGlkYXRlIGJ5IHJlZGlzdHJpYnV0aW5nIGFsbCBvZiBoaXMgZmlyc3RfY2hvaWNlIGJhbGxvdHMgdG8KIyBzZWNvbmRfY2hvaWNlIGNhbmRpZGF0ZSAob3IgdG8gbm8gb25lIGlmIG5vIHNlY29uZF9jaG9pY2UgZXhpc3RzKS4KIyBwb3NpdGlvbiAtIGEgc3RyaW5nLCBlLmcuICdwcmVzaWRlbnQnLCAnZmVtYWxlX3dlbGZhcmUnCiMgY2FuZGlkYXRlc19yZW1haW5pbmcgLSB0aGUgbmFtZSBvZiB0aGUgYWxsIHRoZSBjYW5kaWRhdGVzIHRoYXQgcmVtYWluICppLmUuCiMgICAgICAgICAgICAgICAgICAgICAgICBub3QgaW5jbHVkaW5nIHRoZSBvbmUgd2UncmUgZWxpbWluYXRpbmchKgojIGJhbGxvdHMgLSBhIGxpc3Qgb2YgZGljdGlvbmFyaWVzIHJlcHJlc2VudGluZyBwcmVmZXJlbmNlIGJhbGxvdHMsCiMgICAgICAgICBlLmcuIFt7MTogJ0EnLCAyOiAnQicsIC4uLn0sIC4uLl0KZGVmIGVsaW1pbmF0ZShjYW5kaWRhdGVzX3JlbWFpbmluZywgYmFsbG90cyk6CiAgICByZXN1bHQgPSBbXQogICAgZm9yIGJhbGxvdCBpbiBiYWxsb3RzOgogICAgICAgICMgWW91IG5lZWQgdG8gcnVuIGl0IGZvciB0aHJlZSB0aW1lcyBpbiBjYXNlIHNvbWVvbmUncyB2b3RlZCBsaWtlIHRoaXM6CiAgICAgICAgIyB7MTogY2FuZGlkYXRlLCAyOiBjYW5kaWRhdGUsIDM6IGNhbmRpZGF0ZX0KICAgICAgICBmb3IgaSBpbiByYW5nZSgzKToKICAgICAgICAgICAgaWYgYmFsbG90WzFdIG5vdCBpbiBjYW5kaWRhdGVzX3JlbWFpbmluZzoKICAgICAgICAgICAgICAgIGJhbGxvdCA9IHsxOiBiYWxsb3RbMl0sIDI6IGJhbGxvdFszXSwgMzogTk9ORV9WT1RFfQogICAgICAgICMgSWYgaXQncyBub25lIHZvdGUsIHRoZXJlIGFyZSBubyBtb3JlIHByZWZlcmVuY2VzLCBzbyB0aHJvdyBpdCBvdXQKICAgICAgICBpZiBiYWxsb3RbMV0gIT0gTk9ORV9WT1RFOgogICAgICAgICAgICByZXN1bHQuYXBwZW5kKGJhbGxvdCkKICAgIHJldHVybiByZXN1bHQKCgojIFJ1bnMgYWx0ZXJuYXRlIHZvdGluZyAoQVYpIGNvdW50aW5nIG9uIHRoZSBiYWxsb3RzIGZvciBwb3NpdGlvbi4KIyBwb3NpdGlvbiAtIGEgc3RyaW5nLCBlLmcuICdwcmVzaWRlbnQnLCAnZmVtYWxlX3dlbGZhcmUnCiMgYmFsbG90cyAtIGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgcmVwcmVzZW50aW5nIHByZWZlcmVuY2UgYmFsbG90cywKIyAgICAgICAgIGUuZy4gW3sxOiAnQScsIDI6ICdCJywgLi4ufSwgLi4uXQpkZWYgcnVuX2NvdW50KHBvc2l0aW9uLCBiYWxsb3RzKToKICAgIGNhbmRpZGF0ZXMgPSBzZXQoW2JhbGxvdFtpXSBmb3IgaSBpbiBbMSwgMiwgM10gZm9yIGJhbGxvdCBpbiBiYWxsb3RzXSkKICAgIGlmIE5PTkVfVk9URSBpbiBjYW5kaWRhdGVzOgogICAgICAgIGNhbmRpZGF0ZXMucmVtb3ZlKE5PTkVfVk9URSkgICMgaXNuJ3QgYSBjYW5kaWRhdGUKICAgICAgICBiYWxsb3RzID0gZWxpbWluYXRlKGNhbmRpZGF0ZXMsIGJhbGxvdHMpCiAgICBxdW90YSA9IG1hdGguZmxvb3IobGVuKGJhbGxvdHMpIC8gMikgKyAxCgogICAgcHJpbnQoJ1xuIyMgQ291bnRpbmcgZm9yIHBvc2l0aW9uIHswfSwgezF9IHZvdGVzIGNhc3QsIHF1b3RhIGlzIHsyfS4nCiAgICAgICAgICAuZm9ybWF0KHBvc2l0aW9uLCBsZW4oYmFsbG90cyksIHF1b3RhKSkKICAgIHByaW50KCdfQ2FuZGlkYXRlcyBzdGFuZGluZyBmb3IgdGhlIHBvc2l0aW9uOiB7MH1fJwogICAgICAgICAgLmZvcm1hdCgnLCAnLmpvaW4oY2FuZGlkYXRlcykpKQoKICAgIHJvdW5kX251bSA9IDAKICAgIHdoaWxlIFRydWU6CiAgICAgICAgcm91bmRfbnVtICs9IDEKICAgICAgICByb3VuZF9yZXN1bHRzID0gdGFsbHkoYmFsbG90cywgY2FuZGlkYXRlcykKICAgICAgICByb3VuZF9yZXN1bHRzLnBvcCgnJywgTm9uZSkKICAgICAgICBwcmludCgnXG4jIyMgUm91bmQgezB9IFJlc3VsdHM6Jy5mb3JtYXQocm91bmRfbnVtKSkKICAgICAgICBwcmludCgnXG5DYW5kaWRhdGUgfCBWb3Rlc1xuOi0tIHwgLS06JykKICAgICAgICBmb3IgY2FuZGlkYXRlLCBudW1fdm90ZXMgaW4gcm91bmRfcmVzdWx0cy5pdGVtcygpOgogICAgICAgICAgICBwcmludCgnezB9IHwgezF9Jy5mb3JtYXQoY2FuZGlkYXRlLCBudW1fdm90ZXMpKQoKICAgICAgICAjIENoZWNrIGZvciB0aWVzLCBvdXRwdXQgbWVzc2FnZSB0byB3YXJuIHBlcnNvbiB0byBjaGVja292ZXIgcmVzdWx0cwogICAgICAgIHZvdGVfbnVtcyA9IFtudW0gZm9yIGNhbmRpZGF0ZSwgbnVtIGluIHJvdW5kX3Jlc3VsdHMuaXRlbXMoKV0KICAgICAgICBpZiBsZW4odm90ZV9udW1zKSAhPSBsZW4oc2V0KHZvdGVfbnVtcykpOgogICAgICAgICAgICBwcmludCgnV0FSTklORyEgVGhlcmVcJ3MgYSB0aWUgaW4gdGhpcyByb3VuZFwncyByZXN1bHRzLiBJdCBtaWdodCAnCiAgICAgICAgICAgICAgICAgICdub3QgYWZmZWN0IGFueXRoaW5nLCBidXQgaWYgaXQgZG9lcyB5b3UgbWlnaHQgaGF2ZSB0byAnCiAgICAgICAgICAgICAgICAgICdtYW51YWxseSBjb3VudC4nKQoKICAgICAgICAjIFNlZSBpZiBxdW90YSByZWFjaCBvciBpZiB3ZSBuZWVkIHRvIGVsaW1pbmF0ZQogICAgICAgIGhpZ2hlc3RfY2FuZGlkYXRlID0gbWF4KHJvdW5kX3Jlc3VsdHMua2V5cygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT1sYW1iZGEgazogcm91bmRfcmVzdWx0c1trXSkKICAgICAgICBsb3dlc3RfY2FuZGlkYXRlID0gbWluKHJvdW5kX3Jlc3VsdHMua2V5cygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PWxhbWJkYSBrOiByb3VuZF9yZXN1bHRzW2tdKQogICAgICAgIGlmIHJvdW5kX3Jlc3VsdHNbaGlnaGVzdF9jYW5kaWRhdGVdID49IHF1b3RhOgogICAgICAgICAgICBwcmludCgnXG4qKkNhbmRpZGF0ZSB7MH0sIGhhdmluZyBleGNlZWRlZCB0aGUgcXVvdGEgb24gdGhpcyByb3VuZCwnCiAgICAgICAgICAgICAgICAgICcgaXMgZHVseSBlbGVjdGVkLioqJy5mb3JtYXQoaGlnaGVzdF9jYW5kaWRhdGUpKQogICAgICAgICAgICByZXR1cm4gKGhpZ2hlc3RfY2FuZGlkYXRlLCByb3VuZF9yZXN1bHRzW2hpZ2hlc3RfY2FuZGlkYXRlXSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCgnXG5fQ2FuZGlkYXRlIHswfSwgaGF2aW5nIHRoZSBsb3dlc3QgbnVtYmVyIG9mIHZvdGVzLCBpcyAnCiAgICAgICAgICAgICAgICAgICdlbGltaW5hdGVkIGFuZCB0aGVpciB2b3RlcyB3aWxsIGJlIHJlZGlzdHJpYnV0ZWQgdG8gdGhlICcKICAgICAgICAgICAgICAgICAgJ3NlY29uZCBoaWdoZXN0IHByZWZlcmVuY2UgY2FuZGlkYXRlIG9uIGVhY2guXycKICAgICAgICAgICAgICAgICAgLmZvcm1hdChsb3dlc3RfY2FuZGlkYXRlKSkKICAgICAgICAgICAgY2FuZGlkYXRlcy5yZW1vdmUobG93ZXN0X2NhbmRpZGF0ZSkKICAgICAgICAgICAgYmFsbG90cyA9IGVsaW1pbmF0ZShjYW5kaWRhdGVzLCBiYWxsb3RzKQoKCiMgUmV0dXJucyBhIGxpc3Qgb2YgdGhlIGZvcm0gW3sxOiAnQScsIDI6ICdCJywgLi4ufSwgLi4uXSBpbmRpY2F0aW5nIGJhbGxvdAojIHByZWZlcmVuY2VzIGZvciB0aGUgcG9zaXRpb24gZ2l2ZW4sIGV4bHVkaW5nIGJhbGxvdHMgd2hpY2ggYXJlIGFsbCBub25lIHZvdGVzCiMgcG9zaXRpb24gLSBhIHN0cmluZywgZS5nLiAncHJlc2lkZW50JywgJ2ZlbWFsZV93ZWxmYXJlJwojIHJhdyB2b3RlcyAtIGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgb2YgcHJlZmVyZW5jZSBiYWxsb3RzIGZvciBhbGwgdGhlCiMgICAgICAgICAgICAgcG9zaXRpb25zCmRlZiBnZXRfYmFsbG90c19mb3JfcG9zdGl0aW9uKHBvc2l0aW9uLCByYXdfdm90ZXMpOgogICAgIyBDcmVhdGUgbGlzdCBvZiBkaWN0aW9uYXJpZXMgb2YgZWFjaCBiYWxsb3QgZm9yIHRoYXQgcG9zaXRpb24KICAgICMgWF9DSE9JQ0VfS0VZUyBjb252ZXJzdCAnZmlyc3RfY2hvaWNlX3Bvc2l0aW9uJyB0byAxLCBldGMKICAgIGJhbGxvdHMgPSBbXQogICAgZm9yIHZvdGUgaW4gcmF3X3ZvdGVzOgogICAgICAgIGJhbGxvdCA9IHtYX0NIT0lDRV9LRVlTW3ByZWYuc3BsaXQoJ18nKVswXV06IGNhbmRpZGF0ZQogICAgICAgICAgICAgICAgICBmb3IgcHJlZiwgY2FuZGlkYXRlIGluIHZvdGUuaXRlbXMoKQogICAgICAgICAgICAgICAgICBpZiAnXycgKyBwb3NpdGlvbiBpbiBwcmVmIGFuZCBub3QgcHJlZi5zdGFydHN3aXRoKCdpcycpfQogICAgICAgICMgRmlsbCBpbiBzZWNvbmQvdGhpcmQgY2hvaWNlcyBpZiBub3QgcHJlc2VudAogICAgICAgIGJhbGxvdFsyXSA9IGJhbGxvdFsyXSBpZiAyIGluIGJhbGxvdCBlbHNlIE5PTkVfVk9URQogICAgICAgIGJhbGxvdFszXSA9IGJhbGxvdFszXSBpZiAzIGluIGJhbGxvdCBlbHNlIE5PTkVfVk9URQogICAgICAgIGJhbGxvdHMuYXBwZW5kKGJhbGxvdCkKICAgICMgRXhjbHVkZSBlbXB0eSBiYWxsb3RzIHNvIHdlIGNhbiBnZXQgdGhlIHF1b3RhIG9mIHBlb3BsZSB3aG8gdm90ZWQgZm9yCiAgICAjIHRoaXMgcG9zaXRpb24sIG5vdCB2b3RlZCBvdmVyYWxsCiAgICBiYWxsb3RzID0gW2JhbGxvdCBmb3IgYmFsbG90IGluIGJhbGxvdHMKICAgICAgICAgICAgICAgaWYgbm90IGFsbChjYW5kaWRhdGUgPT0gTk9ORV9WT1RFCiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByZWYsIGNhbmRpZGF0ZSBpbiBiYWxsb3QuaXRlbXMoKSldCiAgICByZXR1cm4gYmFsbG90cwoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBpZiBsZW4oc3lzLmFyZ3YpICE9IDI6CiAgICAgICAgcHJpbnQoJ1VzYWdlOiAuL2NvdW50LnB5IEZJTEUnKQo8fGZpbV9ob2xlfD4KICAgIHRpdGxlID0gJycKICAgIHJhd192b3RlcyA9IFtdCiAgICB3aXRoIG9wZW4oc3lzLmFyZ3ZbMV0sICdyJykgYXMgY3N2X2ZpbGU6CiAgICAgICAgdGl0bGUgPSBjc3ZfZmlsZS5yZWFkbGluZSgpCiAgICAgICAgbmV4dChjc3ZfZmlsZSkgICMgU2tpcCBqdW5rIGxpbmUgc28gZmllbGRuYW1lcyBhcmUgbmV4dAogICAgICAgIHJlYWRlciA9IGNzdi5EaWN0UmVhZGVyKGNzdl9maWxlLCBkZWxpbWl0ZXI9JywnLCBxdW90ZWNoYXI9JyInKQogICAgICAgIHJhd192b3RlcyA9IFtyb3cgZm9yIHJvdyBpbiByZWFkZXJdCiAgICBwcmludCgnIyAnICsgdGl0bGUucmVwbGFjZSgnIicsICcnKS5yZXBsYWNlKCcsJywgJycpKQoKICAgICMgRmluZCB0aGUgcG9zaXRpb25zIGJlaW5nIGNvbnRlc3RlZCBieSBsb29raW5nIGF0IGFsbCBmaXJzdF9jaG9pY2VfKiBrZXlzCiAgICBwb3NpdGlvbnMgPSBbeC5yZXBsYWNlKEZJUlNUX0NIT0lDRV9LRVksICcnKQogICAgICAgICAgICAgICAgIGZvciB4IGluIHJhd192b3Rlc1swXSBpZiBGSVJTVF9DSE9JQ0VfS0VZIGluIHhdCiAgICBwcmludCgnQ291bnRpbmcgdm90ZXMgZm9yIHRoZSBmb2xsb3dpbmcgcG9zaXRpb25zOiB7fVxuJy5mb3JtYXQocG9zaXRpb25zKSkKCiAgICBmb3IgcG9zaXRpb24gaW4gcG9zaXRpb25zOgogICAgICAgIGJhbGxvdHMgPSBnZXRfYmFsbG90c19mb3JfcG9zdGl0aW9uKHBvc2l0aW9uLCByYXdfdm90ZXMpCiAgICAgICAgcnVuX2NvdW50KHBvc2l0aW9uLCBiYWxsb3RzKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHByaW50KCd3aGVyZSBGSUxFIGlzIGEgQ1NWIGZpbGUgZXhwb3J0ZWQgZnJvbSBEcnVwYWxcJ3Mgd2ViZm9ybSAnCiAgICAgICAgICAgICAgJ21vZHVsZSwgc2VlIGV4YW1wbGUnKQogICAgICAgIGV4aXQoMSkKCjx8ZmltX2VuZHw+"]
["4179c2b34ec948cd2db1445fda1abcbd0ae932ca-3","4179c2b34ec948cd2db1445fda1abcbd0ae932ca","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCmltcG9ydCBjc3YKaW1wb3J0IHN5cwppbXBvcnQgbWF0aAoKIyBST05zIGFuZCBOb25lIFZvdGUgYXJlIG5vdCBlcXVpdmFsZW50LCBST04gaXMgYSBjYW5kaWRhdGUsIE5vbmUgVm90ZSBpcyBqdXN0CiMgdGhyb3duIG91dC4KIyBOb25lIHZvdGVzIGluIGZyb250IG9mIHByZWZlcmVuY2VzIGFyZSBpZ25vcmVkLCBlLmcuIGZpcnN0IC0gTm9uZSwgc2Vjb25kIC0KIyBBbGljZSwgdGhpcmQgLSBCb2IgaXMgZXF1aXZhbGVudCB0byBmaXJzdCAtIEFsaWNlLCBzZWNvbmQgLSBCb2IuCiMgUXVvdGEgaXMgcGVyIHBvc2l0aW9uIG5vdCBpbmNsdWRpbmcgcGVvcGxlIHdobyB2b3RlZCBub25lIGluIGV2ZXJ5dGhpbmcsIGFuZAojIGlzIGZsb29yKGhhbGYgb2YgdGhhdCkgKyAxLgojIElmIG9ubHkgdHdvIGNhbmRpZGF0ZXMgYXJlIGxlZnQgd2UgZm9yZWdvIHRoZSBxdW90YQojIElmIHRpZS1icmVhayBiZXR3ZWVuIGxvd2VzdCB0d28gY2FuZGlkYXRlcywgbG9vayBhdCBhbGwgc2Vjb25kIGhpZ2hlc3QKIyBwcmVmZXJlbmNlcyBvZiByZW1haW5pbmcgYmFsbG90cyAoaS5lLiBvbmVzIHdoaWNoIHN0aWxsIGhhdmUgdmFsaWQgY2FuZGlkYXRlcwojIGxlZnQgb24gdGhlbSkgYW5kIHRpZS1icmVhayBvbiB0aGF0LgojIElmIHRpZXMgY29udGludWUgdG8gdGhlIGVuZCB3aXRoIG9ubHkgdHdvIGNhbmRpZGF0ZXMgbGVmdCBhbmQgc2Vjb25kIGFuZAojIHRoaXJkIHByZWZlcmVuY2VzIGRvbid0IGJyZWFrIHRoZSB0aWUsIGZsaXAgYSBjb2luICh0aGUgY2hhbmNlcyBvZiB0aGlzIGV2ZXJ5CiMgaGFwcGVuaW5nIGFyZSBhbG1vc3QgbmlsKS4KCiMgLSBOb25lIHZvdGUgaXMgZW1wdHkgc3RyaW5nICcnCiMgLSBPbmx5IHVwIHRvIHRocmVlIHByZWZlcmVuY2VzLCBzaG91bGQgYmUgbGFiZWxlZAojICAgImZpcnN0X2Nob2ljZV9wb3NpdGlvbl9uYW1lIiwgZXRjCiMgLSBJJ20gZGVmaW5pbmcgdGhlIGZvbGxvd2luZyB0ZXJtczogQSAiYmFsbG90IiByZWZlciB0byB0aGUgcmFua2VkIHByZWZlcmVuY2UKIyAgIG9mIG9uZSB2b3RlciBmb3IgYSBzaW5nbGUgcG9zaXRpb24sIGFzIG9wcG9zZWQgdG8gYSAidm90ZSIgd2hpY2ggcmVmZXJzIHRvCiMgICBvbmUgdm90ZXIncyBiYWxsb3RzIGZvciBhbGwgdGhlIHBvc2l0aW9ucwpYX0NIT0lDRV9LRVlTID0geydmaXJzdCc6IDEsICdzZWNvbmQnOiAyLCAndGhpcmQnOiAzfQpGSVJTVF9DSE9JQ0VfS0VZID0gJ2ZpcnN0X2Nob2ljZV8nClJPTiA9ICdST04nCk5PTkVfVk9URSA9ICcnCgoKIyBDb3VudHMgdGhlIGZpcnN0IHByZWZlcmVuY2UgYmFsbG90cyBmb3IgZWFjaCBjYW5kaWRhdGUsIHJldHVybmluZyBhCiMgZGljdGlvbmFyeSBvZiBjYW5kaWRhdGU6IG51bWJlciBvZiBmaXJzdCBwcmVmZXJlbmNlcy4KIyBiYWxsb3RzIC0gYSBsaXN0IG9mIGRpY3Rpb25hcmllcyByZXByZXNlbnRpbmcgcHJlZmVyZW5jZSBiYWxsb3RzLAojICAgICAgICAgZS5nLiBbezE6ICdBJywgMjogJ0InLCAuLi59LCAuLi5dCmRlZiB0YWxseShiYWxsb3RzLCBjYW5kaWRhdGVzKToKICAgIHJlc3VsdHMgPSB7Y2FuZGlkYXRlOiAwIGZvciBjYW5kaWRhdGUgaW4gY2FuZGlkYXRlc30KICAgIGZvciBiYWxsb3QgaW4gYmFsbG90czoKICAgICAgICByZXN1bHRzW2JhbGxvdFsxXV0gKz0gMQogICAgcmV0dXJuIHJlc3VsdHMKCgojIEVsaW1pbmF0ZXMgY2FuZGlkYXRlIGJ5IHJlZGlzdHJpYnV0aW5nIGFsbCBvZiBoaXMgZmlyc3RfY2hvaWNlIGJhbGxvdHMgdG8KIyBzZWNvbmRfY2hvaWNlIGNhbmRpZGF0ZSAob3IgdG8gbm8gb25lIGlmIG5vIHNlY29uZF9jaG9pY2UgZXhpc3RzKS4KIyBwb3NpdGlvbiAtIGEgc3RyaW5nLCBlLmcuICdwcmVzaWRlbnQnLCAnZmVtYWxlX3dlbGZhcmUnCiMgY2FuZGlkYXRlc19yZW1haW5pbmcgLSB0aGUgbmFtZSBvZiB0aGUgYWxsIHRoZSBjYW5kaWRhdGVzIHRoYXQgcmVtYWluICppLmUuCiMgICAgICAgICAgICAgICAgICAgICAgICBub3QgaW5jbHVkaW5nIHRoZSBvbmUgd2UncmUgZWxpbWluYXRpbmchKgojIGJhbGxvdHMgLSBhIGxpc3Qgb2YgZGljdGlvbmFyaWVzIHJlcHJlc2VudGluZyBwcmVmZXJlbmNlIGJhbGxvdHMsCiMgICAgICAgICBlLmcuIFt7MTogJ0EnLCAyOiAnQicsIC4uLn0sIC4uLl0KZGVmIGVsaW1pbmF0ZShjYW5kaWRhdGVzX3JlbWFpbmluZywgYmFsbG90cyk6CiAgICByZXN1bHQgPSBbXQogICAgZm9yIGJhbGxvdCBpbiBiYWxsb3RzOgogICAgICAgICMgWW91IG5lZWQgdG8gcnVuIGl0IGZvciB0aHJlZSB0aW1lcyBpbiBjYXNlIHNvbWVvbmUncyB2b3RlZCBsaWtlIHRoaXM6CiAgICAgICAgIyB7MTogY2FuZGlkYXRlLCAyOiBjYW5kaWRhdGUsIDM6IGNhbmRpZGF0ZX0KICAgICAgICBmb3IgaSBpbiByYW5nZSgzKToKICAgICAgICAgICAgaWYgYmFsbG90WzFdIG5vdCBpbiBjYW5kaWRhdGVzX3JlbWFpbmluZzoKICAgICAgICAgICAgICAgIGJhbGxvdCA9IHsxOiBiYWxsb3RbMl0sIDI6IGJhbGxvdFszXSwgMzogTk9ORV9WT1RFfQogICAgICAgICMgSWYgaXQncyBub25lIHZvdGUsIHRoZXJlIGFyZSBubyBtb3JlIHByZWZlcmVuY2VzLCBzbyB0aHJvdyBpdCBvdXQKICAgICAgICBpZiBiYWxsb3RbMV0gIT0gTk9ORV9WT1RFOgogICAgICAgICAgICByZXN1bHQuYXBwZW5kKGJhbGxvdCkKICAgIHJldHVybiByZXN1bHQKCgojIFJ1bnMgYWx0ZXJuYXRlIHZvdGluZyAoQVYpIGNvdW50aW5nIG9uIHRoZSBiYWxsb3RzIGZvciBwb3NpdGlvbi4KIyBwb3NpdGlvbiAtIGEgc3RyaW5nLCBlLmcuICdwcmVzaWRlbnQnLCAnZmVtYWxlX3dlbGZhcmUnCiMgYmFsbG90cyAtIGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgcmVwcmVzZW50aW5nIHByZWZlcmVuY2UgYmFsbG90cywKIyAgICAgICAgIGUuZy4gW3sxOiAnQScsIDI6ICdCJywgLi4ufSwgLi4uXQpkZWYgcnVuX2NvdW50KHBvc2l0aW9uLCBiYWxsb3RzKToKICAgIGNhbmRpZGF0ZXMgPSBzZXQoW2JhbGxvdFtpXSBmb3IgaSBpbiBbMSwgMiwgM10gZm9yIGJhbGxvdCBpbiBiYWxsb3RzXSkKICAgIGlmIE5PTkVfVk9URSBpbiBjYW5kaWRhdGVzOgogICAgICAgIGNhbmRpZGF0ZXMucmVtb3ZlKE5PTkVfVk9URSkgICMgaXNuJ3QgYSBjYW5kaWRhdGUKICAgICAgICBiYWxsb3RzID0gZWxpbWluYXRlKGNhbmRpZGF0ZXMsIGJhbGxvdHMpCiAgICBxdW90YSA9IG1hdGguZmxvb3IobGVuKGJhbGxvdHMpIC8gMikgKyAxCgogICAgcHJpbnQoJ1xuIyMgQ291bnRpbmcgZm9yIHBvc2l0aW9uIHswfSwgezF9IHZvdGVzIGNhc3QsIHF1b3RhIGlzIHsyfS4nCiAgICAgICAgICAuZm9ybWF0KHBvc2l0aW9uLCBsZW4oYmFsbG90cyksIHF1b3RhKSkKICAgIHByaW50KCdfQ2FuZGlkYXRlcyBzdGFuZGluZyBmb3IgdGhlIHBvc2l0aW9uOiB7MH1fJwogICAgICAgICAgLmZvcm1hdCgnLCAnLmpvaW4oY2FuZGlkYXRlcykpKQoKICAgIHJvdW5kX251bSA9IDAKICAgIHdoaWxlIFRydWU6CiAgICAgICAgcm91bmRfbnVtICs9IDEKICAgICAgICByb3VuZF9yZXN1bHRzID0gdGFsbHkoYmFsbG90cywgY2FuZGlkYXRlcykKICAgICAgICByb3VuZF9yZXN1bHRzLnBvcCgnJywgTm9uZSkKICAgICAgICBwcmludCgnXG4jIyMgUm91bmQgezB9IFJlc3VsdHM6Jy5mb3JtYXQocm91bmRfbnVtKSkKICAgICAgICBwcmludCgnXG5DYW5kaWRhdGUgfCBWb3Rlc1xuOi0tIHwgLS06JykKICAgICAgICBmb3IgY2FuZGlkYXRlLCBudW1fdm90ZXMgaW4gcm91bmRfcmVzdWx0cy5pdGVtcygpOgogICAgICAgICAgICBwcmludCgnezB9IHwgezF9Jy5mb3JtYXQoY2FuZGlkYXRlLCBudW1fdm90ZXMpKQoKICAgICAgICAjIENoZWNrIGZvciB0aWVzLCBvdXRwdXQgbWVzc2FnZSB0byB3YXJuIHBlcnNvbiB0byBjaGVja292ZXIgcmVzdWx0cwogICAgICAgIHZvdGVfbnVtcyA9IFtudW0gZm9yIGNhbmRpZGF0ZSwgbnVtIGluIHJvdW5kX3Jlc3VsdHMuaXRlbXMoKV0KICAgICAgICBpZiBsZW4odm90ZV9udW1zKSAhPSBsZW4oc2V0KHZvdGVfbnVtcykpOgogICAgICAgICAgICBwcmludCgnV0FSTklORyEgVGhlcmVcJ3MgYSB0aWUgaW4gdGhpcyByb3VuZFwncyByZXN1bHRzLiBJdCBtaWdodCAnCiAgICAgICAgICAgICAgICAgICdub3QgYWZmZWN0IGFueXRoaW5nLCBidXQgaWYgaXQgZG9lcyB5b3UgbWlnaHQgaGF2ZSB0byAnCiAgICAgICAgICAgICAgICAgICdtYW51YWxseSBjb3VudC4nKQoKICAgICAgICAjIFNlZSBpZiBxdW90YSByZWFjaCBvciBpZiB3ZSBuZWVkIHRvIGVsaW1pbmF0ZQogICAgICAgIGhpZ2hlc3RfY2FuZGlkYXRlID0gbWF4KHJvdW5kX3Jlc3VsdHMua2V5cygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT1sYW1iZGEgazogcm91bmRfcmVzdWx0c1trXSkKICAgICAgICBsb3dlc3RfY2FuZGlkYXRlID0gbWluKHJvdW5kX3Jlc3VsdHMua2V5cygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PWxhbWJkYSBrOiByb3VuZF9yZXN1bHRzW2tdKQogICAgICAgIGlmIHJvdW5kX3Jlc3VsdHNbaGlnaGVzdF9jYW5kaWRhdGVdID49IHF1b3RhOgogICAgICAgICAgICBwcmludCgnXG4qKkNhbmRpZGF0ZSB7MH0sIGhhdmluZyBleGNlZWRlZCB0aGUgcXVvdGEgb24gdGhpcyByb3VuZCwnCiAgICAgICAgICAgICAgICAgICcgaXMgZHVseSBlbGVjdGVkLioqJy5mb3JtYXQoaGlnaGVzdF9jYW5kaWRhdGUpKQogICAgICAgICAgICByZXR1cm4gKGhpZ2hlc3RfY2FuZGlkYXRlLCByb3VuZF9yZXN1bHRzW2hpZ2hlc3RfY2FuZGlkYXRlXSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCgnXG5fQ2FuZGlkYXRlIHswfSwgaGF2aW5nIHRoZSBsb3dlc3QgbnVtYmVyIG9mIHZvdGVzLCBpcyAnCiAgICAgICAgICAgICAgICAgICdlbGltaW5hdGVkIGFuZCB0aGVpciB2b3RlcyB3aWxsIGJlIHJlZGlzdHJpYnV0ZWQgdG8gdGhlICcKICAgICAgICAgICAgICAgICAgJ3NlY29uZCBoaWdoZXN0IHByZWZlcmVuY2UgY2FuZGlkYXRlIG9uIGVhY2guXycKICAgICAgICAgICAgICAgICAgLmZvcm1hdChsb3dlc3RfY2FuZGlkYXRlKSkKICAgICAgICAgICAgY2FuZGlkYXRlcy5yZW1vdmUobG93ZXN0X2NhbmRpZGF0ZSkKICAgICAgICAgICAgYmFsbG90cyA9IGVsaW1pbmF0ZShjYW5kaWRhdGVzLCBiYWxsb3RzKQoKPHxmaW1faG9sZXw+CiMgcmF3IHZvdGVzIC0gYSBsaXN0IG9mIGRpY3Rpb25hcmllcyBvZiBwcmVmZXJlbmNlIGJhbGxvdHMgZm9yIGFsbCB0aGUKIyAgICAgICAgICAgICBwb3NpdGlvbnMKZGVmIGdldF9iYWxsb3RzX2Zvcl9wb3N0aXRpb24ocG9zaXRpb24sIHJhd192b3Rlcyk6CiAgICAjIENyZWF0ZSBsaXN0IG9mIGRpY3Rpb25hcmllcyBvZiBlYWNoIGJhbGxvdCBmb3IgdGhhdCBwb3NpdGlvbgogICAgIyBYX0NIT0lDRV9LRVlTIGNvbnZlcnN0ICdmaXJzdF9jaG9pY2VfcG9zaXRpb24nIHRvIDEsIGV0YwogICAgYmFsbG90cyA9IFtdCiAgICBmb3Igdm90ZSBpbiByYXdfdm90ZXM6CiAgICAgICAgYmFsbG90ID0ge1hfQ0hPSUNFX0tFWVNbcHJlZi5zcGxpdCgnXycpWzBdXTogY2FuZGlkYXRlCiAgICAgICAgICAgICAgICAgIGZvciBwcmVmLCBjYW5kaWRhdGUgaW4gdm90ZS5pdGVtcygpCiAgICAgICAgICAgICAgICAgIGlmICdfJyArIHBvc2l0aW9uIGluIHByZWYgYW5kIG5vdCBwcmVmLnN0YXJ0c3dpdGgoJ2lzJyl9CiAgICAgICAgIyBGaWxsIGluIHNlY29uZC90aGlyZCBjaG9pY2VzIGlmIG5vdCBwcmVzZW50CiAgICAgICAgYmFsbG90WzJdID0gYmFsbG90WzJdIGlmIDIgaW4gYmFsbG90IGVsc2UgTk9ORV9WT1RFCiAgICAgICAgYmFsbG90WzNdID0gYmFsbG90WzNdIGlmIDMgaW4gYmFsbG90IGVsc2UgTk9ORV9WT1RFCiAgICAgICAgYmFsbG90cy5hcHBlbmQoYmFsbG90KQogICAgIyBFeGNsdWRlIGVtcHR5IGJhbGxvdHMgc28gd2UgY2FuIGdldCB0aGUgcXVvdGEgb2YgcGVvcGxlIHdobyB2b3RlZCBmb3IKICAgICMgdGhpcyBwb3NpdGlvbiwgbm90IHZvdGVkIG92ZXJhbGwKICAgIGJhbGxvdHMgPSBbYmFsbG90IGZvciBiYWxsb3QgaW4gYmFsbG90cwogICAgICAgICAgICAgICBpZiBub3QgYWxsKGNhbmRpZGF0ZSA9PSBOT05FX1ZPVEUKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJlZiwgY2FuZGlkYXRlIGluIGJhbGxvdC5pdGVtcygpKV0KICAgIHJldHVybiBiYWxsb3RzCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGlmIGxlbihzeXMuYXJndikgIT0gMjoKICAgICAgICBwcmludCgnVXNhZ2U6IC4vY291bnQucHkgRklMRScpCiAgICAgICAgcHJpbnQoJ3doZXJlIEZJTEUgaXMgYSBDU1YgZmlsZSBleHBvcnRlZCBmcm9tIERydXBhbFwncyB3ZWJmb3JtICcKICAgICAgICAgICAgICAnbW9kdWxlLCBzZWUgZXhhbXBsZScpCiAgICAgICAgZXhpdCgxKQoKICAgIHRpdGxlID0gJycKICAgIHJhd192b3RlcyA9IFtdCiAgICB3aXRoIG9wZW4oc3lzLmFyZ3ZbMV0sICdyJykgYXMgY3N2X2ZpbGU6CiAgICAgICAgdGl0bGUgPSBjc3ZfZmlsZS5yZWFkbGluZSgpCiAgICAgICAgbmV4dChjc3ZfZmlsZSkgICMgU2tpcCBqdW5rIGxpbmUgc28gZmllbGRuYW1lcyBhcmUgbmV4dAogICAgICAgIHJlYWRlciA9IGNzdi5EaWN0UmVhZGVyKGNzdl9maWxlLCBkZWxpbWl0ZXI9JywnLCBxdW90ZWNoYXI9JyInKQogICAgICAgIHJhd192b3RlcyA9IFtyb3cgZm9yIHJvdyBpbiByZWFkZXJdCiAgICBwcmludCgnIyAnICsgdGl0bGUucmVwbGFjZSgnIicsICcnKS5yZXBsYWNlKCcsJywgJycpKQoKICAgICMgRmluZCB0aGUgcG9zaXRpb25zIGJlaW5nIGNvbnRlc3RlZCBieSBsb29raW5nIGF0IGFsbCBmaXJzdF9jaG9pY2VfKiBrZXlzCiAgICBwb3NpdGlvbnMgPSBbeC5yZXBsYWNlKEZJUlNUX0NIT0lDRV9LRVksICcnKQogICAgICAgICAgICAgICAgIGZvciB4IGluIHJhd192b3Rlc1swXSBpZiBGSVJTVF9DSE9JQ0VfS0VZIGluIHhdCiAgICBwcmludCgnQ291bnRpbmcgdm90ZXMgZm9yIHRoZSBmb2xsb3dpbmcgcG9zaXRpb25zOiB7fVxuJy5mb3JtYXQocG9zaXRpb25zKSkKCiAgICBmb3IgcG9zaXRpb24gaW4gcG9zaXRpb25zOgogICAgICAgIGJhbGxvdHMgPSBnZXRfYmFsbG90c19mb3JfcG9zdGl0aW9uKHBvc2l0aW9uLCByYXdfdm90ZXMpCiAgICAgICAgcnVuX2NvdW50KHBvc2l0aW9uLCBiYWxsb3RzKQo8fGZpbV9zdWZmaXh8PgoKIyBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgZm9ybSBbezE6ICdBJywgMjogJ0InLCAuLi59LCAuLi5dIGluZGljYXRpbmcgYmFsbG90CiMgcHJlZmVyZW5jZXMgZm9yIHRoZSBwb3NpdGlvbiBnaXZlbiwgZXhsdWRpbmcgYmFsbG90cyB3aGljaCBhcmUgYWxsIG5vbmUgdm90ZXMKIyBwb3NpdGlvbiAtIGEgc3RyaW5nLCBlLmcuICdwcmVzaWRlbnQnLCAnZmVtYWxlX3dlbGZhcmUnCjx8ZmltX2VuZHw+"]
["4179c2b34ec948cd2db1445fda1abcbd0ae932ca-4","4179c2b34ec948cd2db1445fda1abcbd0ae932ca","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCmltcG9ydCBjc3YKaW1wb3J0IHN5cwppbXBvcnQgbWF0aAoKIyBST05zIGFuZCBOb25lIFZvdGUgYXJlIG5vdCBlcXVpdmFsZW50LCBST04gaXMgYSBjYW5kaWRhdGUsIE5vbmUgVm90ZSBpcyBqdXN0CiMgdGhyb3duIG91dC4KIyBOb25lIHZvdGVzIGluIGZyb250IG9mIHByZWZlcmVuY2VzIGFyZSBpZ25vcmVkLCBlLmcuIGZpcnN0IC0gTm9uZSwgc2Vjb25kIC0KIyBBbGljZSwgdGhpcmQgLSBCb2IgaXMgZXF1aXZhbGVudCB0byBmaXJzdCAtIEFsaWNlLCBzZWNvbmQgLSBCb2IuCiMgUXVvdGEgaXMgcGVyIHBvc2l0aW9uIG5vdCBpbmNsdWRpbmcgcGVvcGxlIHdobyB2b3RlZCBub25lIGluIGV2ZXJ5dGhpbmcsIGFuZAojIGlzIGZsb29yKGhhbGYgb2YgdGhhdCkgKyAxLgojIElmIG9ubHkgdHdvIGNhbmRpZGF0ZXMgYXJlIGxlZnQgd2UgZm9yZWdvIHRoZSBxdW90YQojIElmIHRpZS1icmVhayBiZXR3ZWVuIGxvd2VzdCB0d28gY2FuZGlkYXRlcywgbG9vayBhdCBhbGwgc2Vjb25kIGhpZ2hlc3QKIyBwcmVmZXJlbmNlcyBvZiByZW1haW5pbmcgYmFsbG90cyAoaS5lLiBvbmVzIHdoaWNoIHN0aWxsIGhhdmUgdmFsaWQgY2FuZGlkYXRlcwojIGxlZnQgb24gdGhlbSkgYW5kIHRpZS1icmVhayBvbiB0aGF0LgojIElmIHRpZXMgY29udGludWUgdG8gdGhlIGVuZCB3aXRoIG9ubHkgdHdvIGNhbmRpZGF0ZXMgbGVmdCBhbmQgc2Vjb25kIGFuZAojIHRoaXJkIHByZWZlcmVuY2VzIGRvbid0IGJyZWFrIHRoZSB0aWUsIGZsaXAgYSBjb2luICh0aGUgY2hhbmNlcyBvZiB0aGlzIGV2ZXJ5CiMgaGFwcGVuaW5nIGFyZSBhbG1vc3QgbmlsKS4KCiMgLSBOb25lIHZvdGUgaXMgZW1wdHkgc3RyaW5nICcnCiMgLSBPbmx5IHVwIHRvIHRocmVlIHByZWZlcmVuY2VzLCBzaG91bGQgYmUgbGFiZWxlZAojICAgImZpcnN0X2Nob2ljZV9wb3NpdGlvbl9uYW1lIiwgZXRjCiMgLSBJJ20gZGVmaW5pbmcgdGhlIGZvbGxvd2luZyB0ZXJtczogQSAiYmFsbG90IiByZWZlciB0byB0aGUgcmFua2VkIHByZWZlcmVuY2UKIyAgIG9mIG9uZSB2b3RlciBmb3IgYSBzaW5nbGUgcG9zaXRpb24sIGFzIG9wcG9zZWQgdG8gYSAidm90ZSIgd2hpY2ggcmVmZXJzIHRvCiMgICBvbmUgdm90ZXIncyBiYWxsb3RzIGZvciBhbGwgdGhlIHBvc2l0aW9ucwpYX0NIT0lDRV9LRVlTID0geydmaXJzdCc6IDEsICdzZWNvbmQnOiAyLCAndGhpcmQnOiAzfQpGSVJTVF9DSE9JQ0VfS0VZID0gJ2ZpcnN0X2Nob2ljZV8nClJPTiA9ICdST04nCk5PTkVfVk9URSA9ICcnCgoKIyBDb3VudHMgdGhlIGZpcnN0IHByZWZlcmVuY2UgYmFsbG90cyBmb3IgZWFjaCBjYW5kaWRhdGUsIHJldHVybmluZyBhCiMgZGljdGlvbmFyeSBvZiBjYW5kaWRhdGU6IG51bWJlciBvZiBmaXJzdCBwcmVmZXJlbmNlcy4KIyBiYWxsb3RzIC0gYSBsaXN0IG9mIGRpY3Rpb25hcmllcyByZXByZXNlbnRpbmcgcHJlZmVyZW5jZSBiYWxsb3RzLAojICAgICAgICAgZS5nLiBbezE6ICdBJywgMjogJ0InLCAuLi59LCAuLi5dCmRlZiB0YWxseShiYWxsb3RzLCBjYW5kaWRhdGVzKToKICAgIHJlc3VsdHMgPSB7Y2FuZGlkYXRlOiAwIGZvciBjYW5kaWRhdGUgaW4gY2FuZGlkYXRlc30KICAgIGZvciBiYWxsb3QgaW4gYmFsbG90czoKICAgICAgICByZXN1bHRzW2JhbGxvdFsxXV0gKz0gMQogICAgcmV0dXJuIHJlc3VsdHMKCgojIEVsaW1pbmF0ZXMgY2FuZGlkYXRlIGJ5IHJlZGlzdHJpYnV0aW5nIGFsbCBvZiBoaXMgZmlyc3RfY2hvaWNlIGJhbGxvdHMgdG8KIyBzZWNvbmRfY2hvaWNlIGNhbmRpZGF0ZSAob3IgdG8gbm8gb25lIGlmIG5vIHNlY29uZF9jaG9pY2UgZXhpc3RzKS4KIyBwb3NpdGlvbiAtIGEgc3RyaW5nLCBlLmcuICdwcmVzaWRlbnQnLCAnZmVtYWxlX3dlbGZhcmUnCiMgY2FuZGlkYXRlc19yZW1haW5pbmcgLSB0aGUgbmFtZSBvZiB0aGUgYWxsIHRoZSBjYW5kaWRhdGVzIHRoYXQgcmVtYWluICppLmUuCiMgICAgICAgICAgICAgICAgICAgICAgICBub3QgaW5jbHVkaW5nIHRoZSBvbmUgd2UncmUgZWxpbWluYXRpbmchKgojIGJhbGxvdHMgLSBhIGxpc3Qgb2YgZGljdGlvbmFyaWVzIHJlcHJlc2VudGluZyBwcmVmZXJlbmNlIGJhbGxvdHMsCiMgICAgICAgICBlLmcuIFt7MTogJ0EnLCAyOiAnQicsIC4uLn0sIC4uLl0KZGVmIGVsaW1pbmF0ZShjYW5kaWRhdGVzX3JlbWFpbmluZywgYmFsbG90cyk6CiAgICByZXN1bHQgPSBbXQogICAgZm9yIGJhbGxvdCBpbiBiYWxsb3RzOgogICAgICAgICMgWW91IG5lZWQgdG8gcnVuIGl0IGZvciB0aHJlZSB0aW1lcyBpbiBjYXNlIHNvbWVvbmUncyB2b3RlZCBsaWtlIHRoaXM6CiAgICAgICAgIyB7MTogY2FuZGlkYXRlLCAyOiBjYW5kaWRhdGUsIDM6IGNhbmRpZGF0ZX0KICAgICAgICBmb3IgaSBpbiByYW5nZSgzKToKICAgICAgICAgICAgaWYgYmFsbG90WzFdIG5vdCBpbiBjYW5kaWRhdGVzX3JlbWFpbmluZzoKICAgICAgICAgICAgICAgIGJhbGxvdCA9IHsxOiBiYWxsb3RbMl0sIDI6IGJhbGxvdFszXSwgMzogTk9ORV9WT1RFfQogICAgICAgICMgSWYgaXQncyBub25lIHZvdGUsIHRoZXJlIGFyZSBubyBtb3JlIHByZWZlcmVuY2VzLCBzbyB0aHJvdyBpdCBvdXQKICAgICAgICBpZiBiYWxsb3RbMV0gIT0gTk9ORV9WT1RFOgogICAgICAgICAgICByZXN1bHQuYXBwZW5kKGJhbGxvdCkKICAgIHJldHVybiByZXN1bHQKCgojIFJ1bnMgYWx0ZXJuYXRlIHZvdGluZyAoQVYpIGNvdW50aW5nIG9uIHRoZSBiYWxsb3RzIGZvciBwb3NpdGlvbi4KIyBwb3NpdGlvbiAtIGEgc3RyaW5nLCBlLmcuICdwcmVzaWRlbnQnLCAnZmVtYWxlX3dlbGZhcmUnCiMgYmFsbG90cyAtIGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgcmVwcmVzZW50aW5nIHByZWZlcmVuY2UgYmFsbG90cywKIyAgICAgICAgIGUuZy4gW3sxOiAnQScsIDI6ICdCJywgLi4ufSwgLi4uXQpkZWYgcnVuX2NvdW50KHBvc2l0aW9uLCBiYWxsb3RzKToKICAgIGNhbmRpZGF0ZXMgPSBzZXQoW2JhbGxvdFtpXSBmb3IgaSBpbiBbMSwgMiwgM10gZm9yIGJhbGxvdCBpbiBiYWxsb3RzXSkKICAgIGlmIE5PTkVfVk9URSBpbiBjYW5kaWRhdGVzOgogICAgICAgIGNhbmRpZGF0ZXMucmVtb3ZlKE5PTkVfVk9URSkgICMgaXNuJ3QgYSBjYW5kaWRhdGUKICAgICAgICBiYWxsb3RzID0gZWxpbWluYXRlKGNhbmRpZGF0ZXMsIGJhbGxvdHMpCiAgICBxdW90YSA9IG1hdGguZmxvb3IobGVuKGJhbGxvdHMpIC8gMikgKyAxCgogICAgcHJpbnQoJ1xuIyMgQ291bnRpbmcgZm9yIHBvc2l0aW9uIHswfSwgezF9IHZvdGVzIGNhc3QsIHF1b3RhIGlzIHsyfS4nCiAgICAgICAgICAuZm9ybWF0KHBvc2l0aW9uLCBsZW4oYmFsbG90cyksIHF1b3RhKSkKICAgIHByaW50KCdfQ2FuZGlkYXRlcyBzdGFuZGluZyBmb3IgdGhlIHBvc2l0aW9uOiB7MH1fJwogICAgICAgICAgLmZvcm1hdCgnLCAnLmpvaW4oY2FuZGlkYXRlcykpKQoKICAgIHJvdW5kX251bSA9IDAKICAgIHdoaWxlIFRydWU6CiAgICAgICAgcm91bmRfbnVtICs9IDEKICAgICAgICByb3VuZF9yZXN1bHRzID0gdGFsbHkoYmFsbG90cywgY2FuZGlkYXRlcykKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIHByaW50KCd7MH0gfCB7MX0nLmZvcm1hdChjYW5kaWRhdGUsIG51bV92b3RlcykpCgogICAgICAgICMgQ2hlY2sgZm9yIHRpZXMsIG91dHB1dCBtZXNzYWdlIHRvIHdhcm4gcGVyc29uIHRvIGNoZWNrb3ZlciByZXN1bHRzCiAgICAgICAgdm90ZV9udW1zID0gW251bSBmb3IgY2FuZGlkYXRlLCBudW0gaW4gcm91bmRfcmVzdWx0cy5pdGVtcygpXQogICAgICAgIGlmIGxlbih2b3RlX251bXMpICE9IGxlbihzZXQodm90ZV9udW1zKSk6CiAgICAgICAgICAgIHByaW50KCdXQVJOSU5HISBUaGVyZVwncyBhIHRpZSBpbiB0aGlzIHJvdW5kXCdzIHJlc3VsdHMuIEl0IG1pZ2h0ICcKICAgICAgICAgICAgICAgICAgJ25vdCBhZmZlY3QgYW55dGhpbmcsIGJ1dCBpZiBpdCBkb2VzIHlvdSBtaWdodCBoYXZlIHRvICcKICAgICAgICAgICAgICAgICAgJ21hbnVhbGx5IGNvdW50LicpCgogICAgICAgICMgU2VlIGlmIHF1b3RhIHJlYWNoIG9yIGlmIHdlIG5lZWQgdG8gZWxpbWluYXRlCiAgICAgICAgaGlnaGVzdF9jYW5kaWRhdGUgPSBtYXgocm91bmRfcmVzdWx0cy5rZXlzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PWxhbWJkYSBrOiByb3VuZF9yZXN1bHRzW2tdKQogICAgICAgIGxvd2VzdF9jYW5kaWRhdGUgPSBtaW4ocm91bmRfcmVzdWx0cy5rZXlzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9bGFtYmRhIGs6IHJvdW5kX3Jlc3VsdHNba10pCiAgICAgICAgaWYgcm91bmRfcmVzdWx0c1toaWdoZXN0X2NhbmRpZGF0ZV0gPj0gcXVvdGE6CiAgICAgICAgICAgIHByaW50KCdcbioqQ2FuZGlkYXRlIHswfSwgaGF2aW5nIGV4Y2VlZGVkIHRoZSBxdW90YSBvbiB0aGlzIHJvdW5kLCcKICAgICAgICAgICAgICAgICAgJyBpcyBkdWx5IGVsZWN0ZWQuKionLmZvcm1hdChoaWdoZXN0X2NhbmRpZGF0ZSkpCiAgICAgICAgICAgIHJldHVybiAoaGlnaGVzdF9jYW5kaWRhdGUsIHJvdW5kX3Jlc3VsdHNbaGlnaGVzdF9jYW5kaWRhdGVdKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50KCdcbl9DYW5kaWRhdGUgezB9LCBoYXZpbmcgdGhlIGxvd2VzdCBudW1iZXIgb2Ygdm90ZXMsIGlzICcKICAgICAgICAgICAgICAgICAgJ2VsaW1pbmF0ZWQgYW5kIHRoZWlyIHZvdGVzIHdpbGwgYmUgcmVkaXN0cmlidXRlZCB0byB0aGUgJwogICAgICAgICAgICAgICAgICAnc2Vjb25kIGhpZ2hlc3QgcHJlZmVyZW5jZSBjYW5kaWRhdGUgb24gZWFjaC5fJwogICAgICAgICAgICAgICAgICAuZm9ybWF0KGxvd2VzdF9jYW5kaWRhdGUpKQogICAgICAgICAgICBjYW5kaWRhdGVzLnJlbW92ZShsb3dlc3RfY2FuZGlkYXRlKQogICAgICAgICAgICBiYWxsb3RzID0gZWxpbWluYXRlKGNhbmRpZGF0ZXMsIGJhbGxvdHMpCgoKIyBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgZm9ybSBbezE6ICdBJywgMjogJ0InLCAuLi59LCAuLi5dIGluZGljYXRpbmcgYmFsbG90CiMgcHJlZmVyZW5jZXMgZm9yIHRoZSBwb3NpdGlvbiBnaXZlbiwgZXhsdWRpbmcgYmFsbG90cyB3aGljaCBhcmUgYWxsIG5vbmUgdm90ZXMKIyBwb3NpdGlvbiAtIGEgc3RyaW5nLCBlLmcuICdwcmVzaWRlbnQnLCAnZmVtYWxlX3dlbGZhcmUnCiMgcmF3IHZvdGVzIC0gYSBsaXN0IG9mIGRpY3Rpb25hcmllcyBvZiBwcmVmZXJlbmNlIGJhbGxvdHMgZm9yIGFsbCB0aGUKIyAgICAgICAgICAgICBwb3NpdGlvbnMKZGVmIGdldF9iYWxsb3RzX2Zvcl9wb3N0aXRpb24ocG9zaXRpb24sIHJhd192b3Rlcyk6CiAgICAjIENyZWF0ZSBsaXN0IG9mIGRpY3Rpb25hcmllcyBvZiBlYWNoIGJhbGxvdCBmb3IgdGhhdCBwb3NpdGlvbgogICAgIyBYX0NIT0lDRV9LRVlTIGNvbnZlcnN0ICdmaXJzdF9jaG9pY2VfcG9zaXRpb24nIHRvIDEsIGV0YwogICAgYmFsbG90cyA9IFtdCiAgICBmb3Igdm90ZSBpbiByYXdfdm90ZXM6CiAgICAgICAgYmFsbG90ID0ge1hfQ0hPSUNFX0tFWVNbcHJlZi5zcGxpdCgnXycpWzBdXTogY2FuZGlkYXRlCiAgICAgICAgICAgICAgICAgIGZvciBwcmVmLCBjYW5kaWRhdGUgaW4gdm90ZS5pdGVtcygpCiAgICAgICAgICAgICAgICAgIGlmICdfJyArIHBvc2l0aW9uIGluIHByZWYgYW5kIG5vdCBwcmVmLnN0YXJ0c3dpdGgoJ2lzJyl9CiAgICAgICAgIyBGaWxsIGluIHNlY29uZC90aGlyZCBjaG9pY2VzIGlmIG5vdCBwcmVzZW50CiAgICAgICAgYmFsbG90WzJdID0gYmFsbG90WzJdIGlmIDIgaW4gYmFsbG90IGVsc2UgTk9ORV9WT1RFCiAgICAgICAgYmFsbG90WzNdID0gYmFsbG90WzNdIGlmIDMgaW4gYmFsbG90IGVsc2UgTk9ORV9WT1RFCiAgICAgICAgYmFsbG90cy5hcHBlbmQoYmFsbG90KQogICAgIyBFeGNsdWRlIGVtcHR5IGJhbGxvdHMgc28gd2UgY2FuIGdldCB0aGUgcXVvdGEgb2YgcGVvcGxlIHdobyB2b3RlZCBmb3IKICAgICMgdGhpcyBwb3NpdGlvbiwgbm90IHZvdGVkIG92ZXJhbGwKICAgIGJhbGxvdHMgPSBbYmFsbG90IGZvciBiYWxsb3QgaW4gYmFsbG90cwogICAgICAgICAgICAgICBpZiBub3QgYWxsKGNhbmRpZGF0ZSA9PSBOT05FX1ZPVEUKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJlZiwgY2FuZGlkYXRlIGluIGJhbGxvdC5pdGVtcygpKV0KICAgIHJldHVybiBiYWxsb3RzCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGlmIGxlbihzeXMuYXJndikgIT0gMjoKICAgICAgICBwcmludCgnVXNhZ2U6IC4vY291bnQucHkgRklMRScpCiAgICAgICAgcHJpbnQoJ3doZXJlIEZJTEUgaXMgYSBDU1YgZmlsZSBleHBvcnRlZCBmcm9tIERydXBhbFwncyB3ZWJmb3JtICcKICAgICAgICAgICAgICAnbW9kdWxlLCBzZWUgZXhhbXBsZScpCiAgICAgICAgZXhpdCgxKQoKICAgIHRpdGxlID0gJycKICAgIHJhd192b3RlcyA9IFtdCiAgICB3aXRoIG9wZW4oc3lzLmFyZ3ZbMV0sICdyJykgYXMgY3N2X2ZpbGU6CiAgICAgICAgdGl0bGUgPSBjc3ZfZmlsZS5yZWFkbGluZSgpCiAgICAgICAgbmV4dChjc3ZfZmlsZSkgICMgU2tpcCBqdW5rIGxpbmUgc28gZmllbGRuYW1lcyBhcmUgbmV4dAogICAgICAgIHJlYWRlciA9IGNzdi5EaWN0UmVhZGVyKGNzdl9maWxlLCBkZWxpbWl0ZXI9JywnLCBxdW90ZWNoYXI9JyInKQogICAgICAgIHJhd192b3RlcyA9IFtyb3cgZm9yIHJvdyBpbiByZWFkZXJdCiAgICBwcmludCgnIyAnICsgdGl0bGUucmVwbGFjZSgnIicsICcnKS5yZXBsYWNlKCcsJywgJycpKQoKICAgICMgRmluZCB0aGUgcG9zaXRpb25zIGJlaW5nIGNvbnRlc3RlZCBieSBsb29raW5nIGF0IGFsbCBmaXJzdF9jaG9pY2VfKiBrZXlzCiAgICBwb3NpdGlvbnMgPSBbeC5yZXBsYWNlKEZJUlNUX0NIT0lDRV9LRVksICcnKQogICAgICAgICAgICAgICAgIGZvciB4IGluIHJhd192b3Rlc1swXSBpZiBGSVJTVF9DSE9JQ0VfS0VZIGluIHhdCiAgICBwcmludCgnQ291bnRpbmcgdm90ZXMgZm9yIHRoZSBmb2xsb3dpbmcgcG9zaXRpb25zOiB7fVxuJy5mb3JtYXQocG9zaXRpb25zKSkKCiAgICBmb3IgcG9zaXRpb24gaW4gcG9zaXRpb25zOgogICAgICAgIGJhbGxvdHMgPSBnZXRfYmFsbG90c19mb3JfcG9zdGl0aW9uKHBvc2l0aW9uLCByYXdfdm90ZXMpCiAgICAgICAgcnVuX2NvdW50KHBvc2l0aW9uLCBiYWxsb3RzKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJvdW5kX3Jlc3VsdHMucG9wKCcnLCBOb25lKQogICAgICAgIHByaW50KCdcbiMjIyBSb3VuZCB7MH0gUmVzdWx0czonLmZvcm1hdChyb3VuZF9udW0pKQogICAgICAgIHByaW50KCdcbkNhbmRpZGF0ZSB8IFZvdGVzXG46LS0gfCAtLTonKQogICAgICAgIGZvciBjYW5kaWRhdGUsIG51bV92b3RlcyBpbiByb3VuZF9yZXN1bHRzLml0ZW1zKCk6Cjx8ZmltX2VuZHw+"]
["4179c2b34ec948cd2db1445fda1abcbd0ae932ca-5","4179c2b34ec948cd2db1445fda1abcbd0ae932ca","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCmltcG9ydCBjc3YKaW1wb3J0IHN5cwppbXBvcnQgbWF0aAoKIyBST05zIGFuZCBOb25lIFZvdGUgYXJlIG5vdCBlcXVpdmFsZW50LCBST04gaXMgYSBjYW5kaWRhdGUsIE5vbmUgVm90ZSBpcyBqdXN0CiMgdGhyb3duIG91dC4KIyBOb25lIHZvdGVzIGluIGZyb250IG9mIHByZWZlcmVuY2VzIGFyZSBpZ25vcmVkLCBlLmcuIGZpcnN0IC0gTm9uZSwgc2Vjb25kIC0KIyBBbGljZSwgdGhpcmQgLSBCb2IgaXMgZXF1aXZhbGVudCB0byBmaXJzdCAtIEFsaWNlLCBzZWNvbmQgLSBCb2IuCiMgUXVvdGEgaXMgcGVyIHBvc2l0aW9uIG5vdCBpbmNsdWRpbmcgcGVvcGxlIHdobyB2b3RlZCBub25lIGluIGV2ZXJ5dGhpbmcsIGFuZAojIGlzIGZsb29yKGhhbGYgb2YgdGhhdCkgKyAxLgojIElmIG9ubHkgdHdvIGNhbmRpZGF0ZXMgYXJlIGxlZnQgd2UgZm9yZWdvIHRoZSBxdW90YQojIElmIHRpZS1icmVhayBiZXR3ZWVuIGxvd2VzdCB0d28gY2FuZGlkYXRlcywgbG9vayBhdCBhbGwgc2Vjb25kIGhpZ2hlc3QKIyBwcmVmZXJlbmNlcyBvZiByZW1haW5pbmcgYmFsbG90cyAoaS5lLiBvbmVzIHdoaWNoIHN0aWxsIGhhdmUgdmFsaWQgY2FuZGlkYXRlcwojIGxlZnQgb24gdGhlbSkgYW5kIHRpZS1icmVhayBvbiB0aGF0LgojIElmIHRpZXMgY29udGludWUgdG8gdGhlIGVuZCB3aXRoIG9ubHkgdHdvIGNhbmRpZGF0ZXMgbGVmdCBhbmQgc2Vjb25kIGFuZAojIHRoaXJkIHByZWZlcmVuY2VzIGRvbid0IGJyZWFrIHRoZSB0aWUsIGZsaXAgYSBjb2luICh0aGUgY2hhbmNlcyBvZiB0aGlzIGV2ZXJ5CiMgaGFwcGVuaW5nIGFyZSBhbG1vc3QgbmlsKS4KCiMgLSBOb25lIHZvdGUgaXMgZW1wdHkgc3RyaW5nICcnCiMgLSBPbmx5IHVwIHRvIHRocmVlIHByZWZlcmVuY2VzLCBzaG91bGQgYmUgbGFiZWxlZAojICAgImZpcnN0X2Nob2ljZV9wb3NpdGlvbl9uYW1lIiwgZXRjCiMgLSBJJ20gZGVmaW5pbmcgdGhlIGZvbGxvd2luZyB0ZXJtczogQSAiYmFsbG90IiByZWZlciB0byB0aGUgcmFua2VkIHByZWZlcmVuY2UKIyAgIG9mIG9uZSB2b3RlciBmb3IgYSBzaW5nbGUgcG9zaXRpb24sIGFzIG9wcG9zZWQgdG8gYSAidm90ZSIgd2hpY2ggcmVmZXJzIHRvCiMgICBvbmUgdm90ZXIncyBiYWxsb3RzIGZvciBhbGwgdGhlIHBvc2l0aW9ucwpYX0NIT0lDRV9LRVlTID0geydmaXJzdCc6IDEsICdzZWNvbmQnOiAyLCAndGhpcmQnOiAzfQpGSVJTVF9DSE9JQ0VfS0VZID0gJ2ZpcnN0X2Nob2ljZV8nClJPTiA9ICdST04nCk5PTkVfVk9URSA9ICcnCgoKIyBDb3VudHMgdGhlIGZpcnN0IHByZWZlcmVuY2UgYmFsbG90cyBmb3IgZWFjaCBjYW5kaWRhdGUsIHJldHVybmluZyBhCiMgZGljdGlvbmFyeSBvZiBjYW5kaWRhdGU6IG51bWJlciBvZiBmaXJzdCBwcmVmZXJlbmNlcy4KIyBiYWxsb3RzIC0gYSBsaXN0IG9mIGRpY3Rpb25hcmllcyByZXByZXNlbnRpbmcgcHJlZmVyZW5jZSBiYWxsb3RzLAojICAgICAgICAgZS5nLiBbezE6ICdBJywgMjogJ0InLCAuLi59LCAuLi5dCmRlZiB0YWxseShiYWxsb3RzLCBjYW5kaWRhdGVzKToKICAgIHJlc3VsdHMgPSB7Y2FuZGlkYXRlOiAwIGZvciBjYW5kaWRhdGUgaW4gY2FuZGlkYXRlc30KICAgIGZvciBiYWxsb3QgaW4gYmFsbG90czoKICAgICAgICByZXN1bHRzW2JhbGxvdFsxXV0gKz0gMQogICAgcmV0dXJuIHJlc3VsdHMKCgojIEVsaW1pbmF0ZXMgY2FuZGlkYXRlIGJ5IHJlZGlzdHJpYnV0aW5nIGFsbCBvZiBoaXMgZmlyc3RfY2hvaWNlIGJhbGxvdHMgdG8KIyBzZWNvbmRfY2hvaWNlIGNhbmRpZGF0ZSAob3IgdG8gbm8gb25lIGlmIG5vIHNlY29uZF9jaG9pY2UgZXhpc3RzKS4KIyBwb3NpdGlvbiAtIGEgc3RyaW5nLCBlLmcuICdwcmVzaWRlbnQnLCAnZmVtYWxlX3dlbGZhcmUnCiMgY2FuZGlkYXRlc19yZW1haW5pbmcgLSB0aGUgbmFtZSBvZiB0aGUgYWxsIHRoZSBjYW5kaWRhdGVzIHRoYXQgcmVtYWluICppLmUuCiMgICAgICAgICAgICAgICAgICAgICAgICBub3QgaW5jbHVkaW5nIHRoZSBvbmUgd2UncmUgZWxpbWluYXRpbmchKgojIGJhbGxvdHMgLSBhIGxpc3Qgb2YgZGljdGlvbmFyaWVzIHJlcHJlc2VudGluZyBwcmVmZXJlbmNlIGJhbGxvdHMsCiMgICAgICAgICBlLmcuIFt7MTogJ0EnLCAyOiAnQicsIC4uLn0sIC4uLl0KZGVmIGVsaW1pbmF0ZShjYW5kaWRhdGVzX3JlbWFpbmluZywgYmFsbG90cyk6CiAgICByZXN1bHQgPSBbXQogICAgZm9yIGJhbGxvdCBpbiBiYWxsb3RzOgogICAgICAgICMgWW91IG5lZWQgdG8gcnVuIGl0IGZvciB0aHJlZSB0aW1lcyBpbiBjYXNlIHNvbWVvbmUncyB2b3RlZCBsaWtlIHRoaXM6CiAgICAgICAgIyB7MTogY2FuZGlkYXRlLCAyOiBjYW5kaWRhdGUsIDM6IGNhbmRpZGF0ZX0KICAgICAgICBmb3IgaSBpbiByYW5nZSgzKToKICAgICAgICAgICAgaWYgYmFsbG90WzFdIG5vdCBpbiBjYW5kaWRhdGVzX3JlbWFpbmluZzoKICAgICAgICAgICAgICAgIGJhbGxvdCA9IHsxOiBiYWxsb3RbMl0sIDI6IGJhbGxvdFszXSwgMzogTk9ORV9WT1RFfQogICAgICAgICMgSWYgaXQncyBub25lIHZvdGUsIHRoZXJlIGFyZSBubyBtb3JlIHByZWZlcmVuY2VzLCBzbyB0aHJvdyBpdCBvdXQKICAgICAgICBpZiBiYWxsb3RbMV0gIT0gTk9ORV9WT1RFOgogICAgICAgICAgICByZXN1bHQuYXBwZW5kKGJhbGxvdCkKICAgIHJldHVybiByZXN1bHQKCgojIFJ1bnMgYWx0ZXJuYXRlIHZvdGluZyAoQVYpIGNvdW50aW5nIG9uIHRoZSBiYWxsb3RzIGZvciBwb3NpdGlvbi4KIyBwb3NpdGlvbiAtIGEgc3RyaW5nLCBlLmcuICdwcmVzaWRlbnQnLCAnZmVtYWxlX3dlbGZhcmUnCiMgYmFsbG90cyAtIGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgcmVwcmVzZW50aW5nIHByZWZlcmVuY2UgYmFsbG90cywKIyAgICAgICAgIGUuZy4gW3sxOiAnQScsIDI6ICdCJywgLi4ufSwgLi4uXQpkZWYgcnVuX2NvdW50KHBvc2l0aW9uLCBiYWxsb3RzKToKICAgIGNhbmRpZGF0ZXMgPSBzZXQoW2JhbGxvdFtpXSBmb3IgaSBpbiBbMSwgMiwgM10gZm9yIGJhbGxvdCBpbiBiYWxsb3RzXSkKICAgIGlmIE5PTkVfVk9URSBpbiBjYW5kaWRhdGVzOgogICAgICAgIGNhbmRpZGF0ZXMucmVtb3ZlKE5PTkVfVk9URSkgICMgaXNuJ3QgYSBjYW5kaWRhdGUKICAgICAgICBiYWxsb3RzID0gZWxpbWluYXRlKGNhbmRpZGF0ZXMsIGJhbGxvdHMpCiAgICBxdW90YSA9IG1hdGguZmxvb3IobGVuKGJhbGxvdHMpIC8gMikgKyAxCjx8ZmltX2hvbGV8PgogICAgICAgICAgLmZvcm1hdCgnLCAnLmpvaW4oY2FuZGlkYXRlcykpKQoKICAgIHJvdW5kX251bSA9IDAKICAgIHdoaWxlIFRydWU6CiAgICAgICAgcm91bmRfbnVtICs9IDEKICAgICAgICByb3VuZF9yZXN1bHRzID0gdGFsbHkoYmFsbG90cywgY2FuZGlkYXRlcykKICAgICAgICByb3VuZF9yZXN1bHRzLnBvcCgnJywgTm9uZSkKICAgICAgICBwcmludCgnXG4jIyMgUm91bmQgezB9IFJlc3VsdHM6Jy5mb3JtYXQocm91bmRfbnVtKSkKICAgICAgICBwcmludCgnXG5DYW5kaWRhdGUgfCBWb3Rlc1xuOi0tIHwgLS06JykKICAgICAgICBmb3IgY2FuZGlkYXRlLCBudW1fdm90ZXMgaW4gcm91bmRfcmVzdWx0cy5pdGVtcygpOgogICAgICAgICAgICBwcmludCgnezB9IHwgezF9Jy5mb3JtYXQoY2FuZGlkYXRlLCBudW1fdm90ZXMpKQoKICAgICAgICAjIENoZWNrIGZvciB0aWVzLCBvdXRwdXQgbWVzc2FnZSB0byB3YXJuIHBlcnNvbiB0byBjaGVja292ZXIgcmVzdWx0cwogICAgICAgIHZvdGVfbnVtcyA9IFtudW0gZm9yIGNhbmRpZGF0ZSwgbnVtIGluIHJvdW5kX3Jlc3VsdHMuaXRlbXMoKV0KICAgICAgICBpZiBsZW4odm90ZV9udW1zKSAhPSBsZW4oc2V0KHZvdGVfbnVtcykpOgogICAgICAgICAgICBwcmludCgnV0FSTklORyEgVGhlcmVcJ3MgYSB0aWUgaW4gdGhpcyByb3VuZFwncyByZXN1bHRzLiBJdCBtaWdodCAnCiAgICAgICAgICAgICAgICAgICdub3QgYWZmZWN0IGFueXRoaW5nLCBidXQgaWYgaXQgZG9lcyB5b3UgbWlnaHQgaGF2ZSB0byAnCiAgICAgICAgICAgICAgICAgICdtYW51YWxseSBjb3VudC4nKQoKICAgICAgICAjIFNlZSBpZiBxdW90YSByZWFjaCBvciBpZiB3ZSBuZWVkIHRvIGVsaW1pbmF0ZQogICAgICAgIGhpZ2hlc3RfY2FuZGlkYXRlID0gbWF4KHJvdW5kX3Jlc3VsdHMua2V5cygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT1sYW1iZGEgazogcm91bmRfcmVzdWx0c1trXSkKICAgICAgICBsb3dlc3RfY2FuZGlkYXRlID0gbWluKHJvdW5kX3Jlc3VsdHMua2V5cygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PWxhbWJkYSBrOiByb3VuZF9yZXN1bHRzW2tdKQogICAgICAgIGlmIHJvdW5kX3Jlc3VsdHNbaGlnaGVzdF9jYW5kaWRhdGVdID49IHF1b3RhOgogICAgICAgICAgICBwcmludCgnXG4qKkNhbmRpZGF0ZSB7MH0sIGhhdmluZyBleGNlZWRlZCB0aGUgcXVvdGEgb24gdGhpcyByb3VuZCwnCiAgICAgICAgICAgICAgICAgICcgaXMgZHVseSBlbGVjdGVkLioqJy5mb3JtYXQoaGlnaGVzdF9jYW5kaWRhdGUpKQogICAgICAgICAgICByZXR1cm4gKGhpZ2hlc3RfY2FuZGlkYXRlLCByb3VuZF9yZXN1bHRzW2hpZ2hlc3RfY2FuZGlkYXRlXSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCgnXG5fQ2FuZGlkYXRlIHswfSwgaGF2aW5nIHRoZSBsb3dlc3QgbnVtYmVyIG9mIHZvdGVzLCBpcyAnCiAgICAgICAgICAgICAgICAgICdlbGltaW5hdGVkIGFuZCB0aGVpciB2b3RlcyB3aWxsIGJlIHJlZGlzdHJpYnV0ZWQgdG8gdGhlICcKICAgICAgICAgICAgICAgICAgJ3NlY29uZCBoaWdoZXN0IHByZWZlcmVuY2UgY2FuZGlkYXRlIG9uIGVhY2guXycKICAgICAgICAgICAgICAgICAgLmZvcm1hdChsb3dlc3RfY2FuZGlkYXRlKSkKICAgICAgICAgICAgY2FuZGlkYXRlcy5yZW1vdmUobG93ZXN0X2NhbmRpZGF0ZSkKICAgICAgICAgICAgYmFsbG90cyA9IGVsaW1pbmF0ZShjYW5kaWRhdGVzLCBiYWxsb3RzKQoKCiMgUmV0dXJucyBhIGxpc3Qgb2YgdGhlIGZvcm0gW3sxOiAnQScsIDI6ICdCJywgLi4ufSwgLi4uXSBpbmRpY2F0aW5nIGJhbGxvdAojIHByZWZlcmVuY2VzIGZvciB0aGUgcG9zaXRpb24gZ2l2ZW4sIGV4bHVkaW5nIGJhbGxvdHMgd2hpY2ggYXJlIGFsbCBub25lIHZvdGVzCiMgcG9zaXRpb24gLSBhIHN0cmluZywgZS5nLiAncHJlc2lkZW50JywgJ2ZlbWFsZV93ZWxmYXJlJwojIHJhdyB2b3RlcyAtIGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgb2YgcHJlZmVyZW5jZSBiYWxsb3RzIGZvciBhbGwgdGhlCiMgICAgICAgICAgICAgcG9zaXRpb25zCmRlZiBnZXRfYmFsbG90c19mb3JfcG9zdGl0aW9uKHBvc2l0aW9uLCByYXdfdm90ZXMpOgogICAgIyBDcmVhdGUgbGlzdCBvZiBkaWN0aW9uYXJpZXMgb2YgZWFjaCBiYWxsb3QgZm9yIHRoYXQgcG9zaXRpb24KICAgICMgWF9DSE9JQ0VfS0VZUyBjb252ZXJzdCAnZmlyc3RfY2hvaWNlX3Bvc2l0aW9uJyB0byAxLCBldGMKICAgIGJhbGxvdHMgPSBbXQogICAgZm9yIHZvdGUgaW4gcmF3X3ZvdGVzOgogICAgICAgIGJhbGxvdCA9IHtYX0NIT0lDRV9LRVlTW3ByZWYuc3BsaXQoJ18nKVswXV06IGNhbmRpZGF0ZQogICAgICAgICAgICAgICAgICBmb3IgcHJlZiwgY2FuZGlkYXRlIGluIHZvdGUuaXRlbXMoKQogICAgICAgICAgICAgICAgICBpZiAnXycgKyBwb3NpdGlvbiBpbiBwcmVmIGFuZCBub3QgcHJlZi5zdGFydHN3aXRoKCdpcycpfQogICAgICAgICMgRmlsbCBpbiBzZWNvbmQvdGhpcmQgY2hvaWNlcyBpZiBub3QgcHJlc2VudAogICAgICAgIGJhbGxvdFsyXSA9IGJhbGxvdFsyXSBpZiAyIGluIGJhbGxvdCBlbHNlIE5PTkVfVk9URQogICAgICAgIGJhbGxvdFszXSA9IGJhbGxvdFszXSBpZiAzIGluIGJhbGxvdCBlbHNlIE5PTkVfVk9URQogICAgICAgIGJhbGxvdHMuYXBwZW5kKGJhbGxvdCkKICAgICMgRXhjbHVkZSBlbXB0eSBiYWxsb3RzIHNvIHdlIGNhbiBnZXQgdGhlIHF1b3RhIG9mIHBlb3BsZSB3aG8gdm90ZWQgZm9yCiAgICAjIHRoaXMgcG9zaXRpb24sIG5vdCB2b3RlZCBvdmVyYWxsCiAgICBiYWxsb3RzID0gW2JhbGxvdCBmb3IgYmFsbG90IGluIGJhbGxvdHMKICAgICAgICAgICAgICAgaWYgbm90IGFsbChjYW5kaWRhdGUgPT0gTk9ORV9WT1RFCiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByZWYsIGNhbmRpZGF0ZSBpbiBiYWxsb3QuaXRlbXMoKSldCiAgICByZXR1cm4gYmFsbG90cwoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBpZiBsZW4oc3lzLmFyZ3YpICE9IDI6CiAgICAgICAgcHJpbnQoJ1VzYWdlOiAuL2NvdW50LnB5IEZJTEUnKQogICAgICAgIHByaW50KCd3aGVyZSBGSUxFIGlzIGEgQ1NWIGZpbGUgZXhwb3J0ZWQgZnJvbSBEcnVwYWxcJ3Mgd2ViZm9ybSAnCiAgICAgICAgICAgICAgJ21vZHVsZSwgc2VlIGV4YW1wbGUnKQogICAgICAgIGV4aXQoMSkKCiAgICB0aXRsZSA9ICcnCiAgICByYXdfdm90ZXMgPSBbXQogICAgd2l0aCBvcGVuKHN5cy5hcmd2WzFdLCAncicpIGFzIGNzdl9maWxlOgogICAgICAgIHRpdGxlID0gY3N2X2ZpbGUucmVhZGxpbmUoKQogICAgICAgIG5leHQoY3N2X2ZpbGUpICAjIFNraXAganVuayBsaW5lIHNvIGZpZWxkbmFtZXMgYXJlIG5leHQKICAgICAgICByZWFkZXIgPSBjc3YuRGljdFJlYWRlcihjc3ZfZmlsZSwgZGVsaW1pdGVyPScsJywgcXVvdGVjaGFyPSciJykKICAgICAgICByYXdfdm90ZXMgPSBbcm93IGZvciByb3cgaW4gcmVhZGVyXQogICAgcHJpbnQoJyMgJyArIHRpdGxlLnJlcGxhY2UoJyInLCAnJykucmVwbGFjZSgnLCcsICcnKSkKCiAgICAjIEZpbmQgdGhlIHBvc2l0aW9ucyBiZWluZyBjb250ZXN0ZWQgYnkgbG9va2luZyBhdCBhbGwgZmlyc3RfY2hvaWNlXyoga2V5cwogICAgcG9zaXRpb25zID0gW3gucmVwbGFjZShGSVJTVF9DSE9JQ0VfS0VZLCAnJykKICAgICAgICAgICAgICAgICBmb3IgeCBpbiByYXdfdm90ZXNbMF0gaWYgRklSU1RfQ0hPSUNFX0tFWSBpbiB4XQogICAgcHJpbnQoJ0NvdW50aW5nIHZvdGVzIGZvciB0aGUgZm9sbG93aW5nIHBvc2l0aW9uczoge31cbicuZm9ybWF0KHBvc2l0aW9ucykpCgogICAgZm9yIHBvc2l0aW9uIGluIHBvc2l0aW9uczoKICAgICAgICBiYWxsb3RzID0gZ2V0X2JhbGxvdHNfZm9yX3Bvc3RpdGlvbihwb3NpdGlvbiwgcmF3X3ZvdGVzKQogICAgICAgIHJ1bl9jb3VudChwb3NpdGlvbiwgYmFsbG90cykKPHxmaW1fc3VmZml4fD4KCiAgICBwcmludCgnXG4jIyBDb3VudGluZyBmb3IgcG9zaXRpb24gezB9LCB7MX0gdm90ZXMgY2FzdCwgcXVvdGEgaXMgezJ9LicKICAgICAgICAgIC5mb3JtYXQocG9zaXRpb24sIGxlbihiYWxsb3RzKSwgcXVvdGEpKQogICAgcHJpbnQoJ19DYW5kaWRhdGVzIHN0YW5kaW5nIGZvciB0aGUgcG9zaXRpb246IHswfV8nCjx8ZmltX2VuZHw+"]
["c1e7340b3d98ee281247869c6f2966f1b7e243d8-1","c1e7340b3d98ee281247869c6f2966f1b7e243d8","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAxNiBSYWNrc3BhY2UKIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgpmcm9tIG9zbG9fY29uZmlnIGltcG9ydCBjZmcKCmltcG9ydCBzeW50cmlib3Muc2lnbmFsCgpDT05GID0gY2ZnLkNPTkYKCgpkZWYgcGVyY2VudGFnZV9kaWZmZXJlbmNlKHRlc3QpOgogICAgIiIiVmFsaWRhdGVzIGxlbmd0aCBvZiB0d28gcmVzcG9uc2VzCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBDb21wYXJlcyB0aGUgbGVuZ3RoIG9mIGEgZnV6emVkIHJlc3BvbnNlIHdpdGggYSByZXNwb25zZSB0byB0aGUKICAgIGJhc2VsaW5lIHJlcXVlc3QuIElmIHRoZSByZXNwb25zZSBpcyBsb25nZXIgdGhhbiBleHBlY3RlZCwgcmV0dXJucwogICAgYSBgTGVuZ3RoUGVyY2VudGFnZURpZmZTaWduYWxgCjx8ZmltX2VuZHw+"]
["41a73df7c9108f74602b51604dbf9ee60d17bb06-1","41a73df7c9108f74602b51604dbf9ee60d17bb06","PHxmaW1fcHJlZml4fD4KZnJvbSBjb3JlaHEuYXBwcy5sb2NhdGlvbnMuZGJhY2Nlc3NvcnMgaW1wb3J0IGdldF93ZWJfdXNlcnNfYnlfbG9jYXRpb24KZnJvbSBjb3JlaHEuYXBwcy5sb2NhdGlvbnMubW9kZWxzIGltcG9ydCBTUUxMb2NhdGlvbgpmcm9tIGNvcmVocS5hcHBzLnJlbWluZGVycy51dGlsIGltcG9ydCBnZXRfcHJlZmVycmVkX3Bob25lX251bWJlcl9mb3JfcmVjaXBpZW50CmZyb20gY29yZWhxLmFwcHMudXNlcnMubW9kZWxzIGltcG9ydCBDb21tQ2FyZVVzZXIKZnJvbSBjdXN0b20uZXdzZ2hhbmEucmVtaW5kZXJzLnNlY29uZF9zb2hfcmVtaW5kZXIgaW1wb3J0IFNlY29uZFNPSFJlbWluZGVyCmZyb20gY3VzdG9tLmV3c2doYW5hLnV0aWxzIGltcG9ydCBzZW5kX3NtcywgaGFzX25vdGlmaWNhdGlvbnNfZW5hYmxlZApmcm9tIGRpbWFnaS51dGlscy5jb3VjaC5kYXRhYmFzZSBpbXBvcnQgaXRlcl9kb2NzCgoKY2xhc3MgVGhpcmRTT0hSZW1pbmRlcihTZWNvbmRTT0hSZW1pbmRlcik6CgogICAgZGVmIGdldF91c2Vyc19tZXNzYWdlcyhzZWxmKToKICAgICAgICBmb3Igc3FsX2xvY2F0aW9uIGluIFNRTExvY2F0aW9uLm9iamVjdHMuZmlsdGVyKGRvbWFpbj1zZWxmLmRvbWFpbiwgbG9jYXRpb25fdHlwZV9fYWRtaW5pc3RyYXRpdmU9RmFsc2UpOgogICAgICAgICAgICBpbl9jaGFyZ2VzID0gbWFwKENvbW1DYXJlVXNlci53cmFwLCBpdGVyX2RvY3MoCiAgICAgICAgICAgICAgICBDb21tQ2FyZVVzZXIuZ2V0X2RiKCksCiAgICAgICAgICAgICAgICBbaW5fY2hhcmdlLnVzZXJfaWQgZm9yIGluX2NoYXJnZSBpbiBzcWxfbG9jYXRpb24uZmFjaWxpdHlpbmNoYXJnZV9zZXQuYWxsKCldCiAgICAgICAgICAgICkpCiAgICAgICAgICAgIHdlYl91c2VycyA9IFsKICAgICAgICAgICAgICAgIHdlYl91c2VyCiAgICAgICAgICAgICAgICBmb3Igd2ViX3VzZXIgaW4gZ2V0X3dlYl91c2Vyc19ieV9sb2NhdGlvbihzZWxmLmRvbWFpbiwgc3FsX2xvY2F0aW9uLmxvY2F0aW9uX2lkKQogICAgICAgICAgICAgICAgaWYgaGFzX25vdGlmaWNhdGlvbnNfZW5hYmxlZChzZWxmLmRvbWFpbiwgd2ViX3VzZXIpCiAgICAgICAgICAgIF0KICAgICAgICAgICAgbWVzc2FnZSwga3dhcmdzID0gc2VsZi5nZXRfbWVzc2FnZV9mb3JfbG9jYXRpb24oc3FsX2xvY2F0aW9uLmNvdWNoX2xvY2F0aW9uKQoKICAgICAgICAgICAgZm9yIHVzZXIgaW4gd2ViX3VzZXJzICsgaW5fY2hhcmdlczoKICAgICAgICAgICAgICAgIHBob25lX251bWJlciA9IGdldF9wcmVmZXJyZWRfcGhvbmVfbnVtYmVyX2Zvcl9yZWNpcGllbnQodXNlcikKICAgICAgICAgICAgICAgIGlmIG5vdCBwaG9uZV9udW1iZXI6CiAgICAgICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgICAgICBrd2FyZ3NbJ25hbWUnXSA9IHVzZXIuZnVsbF9uYW1lCiAgICAgICAgICAgICAgICBpZiBtZXNzYWdlOgogICAgICAgICAgICAgICAgICAgIHlpZWxkIHVzZXIsIHBob25lX251bWJlciwgbWVzc2FnZSAlIGt3YXJncwoKICAgIGRlZiBzZW5kKHNlbGYpOgogICAgICAgIGZvciB1c2VyLCBwaG9uZV9udW1iZXIsIG1lc3NhZ2UgaW4gc2VsZi5nZXRfdXNlcnNfbWVzc2FnZXMoKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBzZW5kX3NtcyhzZWxmLmRvbWFpbiwgdXNlciwgcGhvbmVfbnVtYmVyLCBtZXNzYWdlKQo8fGZpbV9lbmR8Pg=="]
["00b64bc8a0363a2906dd6f5372f76d244022a61e-1","00b64bc8a0363a2906dd6f5372f76d244022a61e","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMi43IG9uIDIwMTktMTItMDEgMDY6MTEKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKPHxmaW1faG9sZXw+CiAgICBvcGVyYXRpb25zID0gWwogICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nbm90ZXMnLAogICAgICAgICAgICBuYW1lPSdib2R5JywKICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1MCksCiAgICAgICAgKSwKICAgIF0KPHxmaW1fc3VmZml4fD4KICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ25vdGVzJywgJzAwMDJfYXV0b18yMDE5MTIwMV8wNDIyJyksCiAgICBdCgo8fGZpbV9lbmR8Pg=="]
["00b64bc8a0363a2906dd6f5372f76d244022a61e-2","00b64bc8a0363a2906dd6f5372f76d244022a61e","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMi43IG9uIDIwMTktMTItMDEgMDY6MTEKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ25vdGVzJywgJzAwMDJfYXV0b18yMDE5MTIwMV8wNDIyJyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nbm90ZXMnLAogICAgICAgICAgICBuYW1lPSdib2R5JywKICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1MCksCjx8ZmltX2VuZHw+"]
["00b64bc8a0363a2906dd6f5372f76d244022a61e-3","00b64bc8a0363a2906dd6f5372f76d244022a61e","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMi43IG9uIDIwMTktMTItMDEgMDY6MTEKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCmNsYXNzIE1pZ3JhdGlvbihtaWdyYXRpb25zLk1pZ3JhdGlvbik6Cgo8fGZpbV9lbmR8Pg=="]
["00b64bc8a0363a2906dd6f5372f76d244022a61e-4","00b64bc8a0363a2906dd6f5372f76d244022a61e","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMi43IG9uIDIwMTktMTItMDEgMDY6MTEKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ25vdGVzJywgJzAwMDJfYXV0b18yMDE5MTIwMV8wNDIyJyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J25vdGVzJywKICAgICAgICAgICAgbmFtZT0nYm9keScsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNTApLAo8fGZpbV9ob2xlfD4KICAgIF0KPHxmaW1fc3VmZml4fD4KICAgICAgICApLAo8fGZpbV9lbmR8Pg=="]
["b6eb4cfb4bcde2b10e679246b3c0bef8425cbf4b-1","b6eb4cfb4bcde2b10e679246b3c0bef8425cbf4b",{"$cut":{"chars":20764,"head":"PHxmaW1fcHJlZml4fD4KIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIGNvbm5lY3RvciBmb3Igc2VuZGluZyBBUEkgcmVxdWVzdHMgdG8gdGhlIEdDUCBSZWNvbW1lbmRhdGlvbnMgQUkKQVBJIChodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vcmVjb21tZW5kYXRpb25zKS4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSB0eXBpbmcgaW1wb3J0IFNlcXVlbmNlCmZyb20gdHlwaW5nIGltcG9ydCBUdXBsZQoKZnJvbSBnb29nbGUuYXBpX2NvcmUucmV0cnkgaW1wb3J0IFJldHJ5Cgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzIGltcG9ydCBNZXRyaWNzCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBHb29nbGVDbG91ZE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBEb0ZuCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgUGFyRG8KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBQVHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsIGltcG9ydCBHcm91cEludG9CYXRjaGVzCmZyb20gY2FjaGV0b29scy5mdW5jIGltcG9ydCB0dGxfY2FjaGUKCiMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uLCB1bmdyb3VwZWQtaW1wb3J0cwp0cnk6CiAgZnJvbSBnb29nbGUuY2xvdWQgaW1wb3J0IHJlY29tbWVuZGF0aW9uZW5naW5lCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICByYWlzZSBJbXBvcnRFcnJvcigKICAgICAgJ0dvb2dsZSBDbG91ZCBSZWNvbW1lbmRhdGlvbiBBSSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGV4ZWN1dGlvbiAnCiAgICAgICdlbnZpcm9ubWVudCAoY291bGQgbm90IGltcG9ydCBnb29nbGUuY2xvdWQucmVjb21tZW5kYXRpb25lbmdpbmUpLicpCiMgcHlsaW50OiBlbmFibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24sIHVuZ3JvdXBlZC1pbXBvcnRzCgpfX2FsbF9fID0gWwogICAgJ0NyZWF0ZUNhdGFsb2dJdGVtJywKICAgICdXcml0ZVVzZXJFdmVudCcsCiAgICAnSW1wb3J0Q2F0YWxvZ0l0ZW1zJywKICAgICdJbXBvcnRVc2VyRXZlbnRzJywKICAgICdQcmVkaWN0VXNlckV2ZW50JwpdCgpGQUlMRURfQ0FUQUxPR19JVEVNUyA9ICJmYWlsZWRfY2F0YWxvZ19pdGVtcyIKCgpAdHRsX2NhY2hlKG1heHNpemU9MTI4LCB0dGw9MzYwMCkKZGVmIGdldF9yZWNvbW1lbmRhdGlvbl9wcmVkaWN0aW9uX2NsaWVudCgpOgogICIiIlJldHVybnMgYSBSZWNvbW1lbmRhdGlvbiBBSSAtIFByZWRpY3Rpb24gU2VydmljZSBjbGllbnQuIiIiCiAgX2NsaWVudCA9IHJlY29tbWVuZGF0aW9uZW5naW5lLlByZWRpY3Rpb25TZXJ2aWNlQ2xpZW50KCkKICByZXR1cm4gX2NsaWVudAoKCkB0dGxfY2FjaGUobWF4c2l6ZT0xMjgsIHR0bD0zNjAwKQpkZWYgZ2V0X3JlY29tbWVuZGF0aW9uX2NhdGFsb2dfY2xpZW50KCk6CiAgIiIiUmV0dXJucyBhIFJlY29tbWVuZGF0aW9uIEFJIC0gQ2F0YWxvZyBTZXJ2aWNlIGNsaWVudC4iIiIKICBfY2xpZW50ID0gcmVjb21tZW5kYXRpb25lbmdpbmUuQ2F0YWxvZ1NlcnZpY2VDbGllbnQoKQogIHJldHVybiBfY2xpZW50CgoKQHR0bF9jYWNoZShtYXhzaXplPTEyOCwgdHRsPTM2MDApCmRlZiBnZXRfcmVjb21tZW5kYXRpb25fdXNlcl9ldmVudF9jbGllbnQoKToKICAiIiJSZXR1cm5zIGEgUmVjb21tZW5kYXRpb24gQUkgLSBVc2VyRXZlbnQgU2VydmljZSBjbGllbnQuIiIiCiAgX2NsaWVudCA9IHJlY29tbWVuZGF0aW9uZW5naW5lLlVzZXJFdmVudFNlcnZpY2VDbGllbnQoKQogIHJldHVybiBfY2xpZW50CgoKY2xhc3MgQ3JlYXRlQ2F0YWxvZ0l0ZW0oUFRyYW5zZm9ybSk6CiAgIiIiQ3JlYXRlcyBjYXRhbG9naXRlbSBpbmZvcm1hdGlvbi4KICAgIFRoZSBgYFBUcmFuZm9ybWBgIHJldHVybnMgYSBQQ29sbGVjdGlvblR1cGxlIHdpdGggYSBQQ29sbGVjdGlvbnMgb2YKICAgIHN1Y2Nlc3NmdWxseSBhbmQgZmFpbGVkIGNyZWF0ZWQgQ2F0YWxvZ0l0ZW1zLgoKICAgIEV4YW1wbGUgdXNhZ2U6OgoKICAgICAgcGlwZWxpbmUgfCBDcmVhdGVDYXRhbG9nSXRlbSgKICAgICAgICBwcm9qZWN0PSdleGFtcGxlLWdjcC1wcm9qZWN0JywKICAgICAgICBjYXRhbG9nX25hbWU9J215LWNhdGFsb2cnKQogICAgIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBwcm9qZWN0OiBzdHIgPSBOb25lLAogICAgICByZXRyeTogUmV0cnkgPSBOb25l"}}]
["b6eb4cfb4bcde2b10e679246b3c0bef8425cbf4b-2","b6eb4cfb4bcde2b10e679246b3c0bef8425cbf4b",{"$cut":{"chars":26144,"head":"PHxmaW1fcHJlZml4fD4KIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIGNvbm5lY3RvciBmb3Igc2VuZGluZyBBUEkgcmVxdWVzdHMgdG8gdGhlIEdDUCBSZWNvbW1lbmRhdGlvbnMgQUkKQVBJIChodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vcmVjb21tZW5kYXRpb25zKS4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSB0eXBpbmcgaW1wb3J0IFNlcXVlbmNlCmZyb20gdHlwaW5nIGltcG9ydCBUdXBsZQoKZnJvbSBnb29nbGUuYXBpX2NvcmUucmV0cnkgaW1wb3J0IFJldHJ5Cgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzIGltcG9ydCBNZXRyaWNzCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBHb29nbGVDbG91ZE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBEb0ZuCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgUGFyRG8KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBQVHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsIGltcG9ydCBHcm91cEludG9CYXRjaGVzCmZyb20gY2FjaGV0b29scy5mdW5jIGltcG9ydCB0dGxfY2FjaGUKCiMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uLCB1bmdyb3VwZWQtaW1wb3J0cwp0cnk6CiAgZnJvbSBnb29nbGUuY2xvdWQgaW1wb3J0IHJlY29tbWVuZGF0aW9uZW5naW5lCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICByYWlzZSBJbXBvcnRFcnJvcigKICAgICAgJ0dvb2dsZSBDbG91ZCBSZWNvbW1lbmRhdGlvbiBBSSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGV4ZWN1dGlvbiAnCiAgICAgICdlbnZpcm9ubWVudCAoY291bGQgbm90IGltcG9ydCBnb29nbGUuY2xvdWQucmVjb21tZW5kYXRpb25lbmdpbmUpLicpCiMgcHlsaW50OiBlbmFibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24sIHVuZ3JvdXBlZC1pbXBvcnRzCgpfX2FsbF9fID0gWwogICAgJ0NyZWF0ZUNhdGFsb2dJdGVtJywKICAgICdXcml0ZVVzZXJFdmVudCcsCiAgICAnSW1wb3J0Q2F0YWxvZ0l0ZW1zJywKICAgICdJbXBvcnRVc2VyRXZlbnRzJywKICAgICdQcmVkaWN0VXNlckV2ZW50JwpdCgpGQUlMRURfQ0FUQUxPR19JVEVNUyA9ICJmYWlsZWRfY2F0YWxvZ19pdGVtcyIKCgpAdHRsX2NhY2hlKG1heHNpemU9MTI4LCB0dGw9MzYwMCkKZGVmIGdldF9yZWNvbW1lbmRhdGlvbl9wcmVkaWN0aW9uX2NsaWVudCgpOgogICIiIlJldHVybnMgYSBSZWNvbW1lbmRhdGlvbiBBSSAtIFByZWRpY3Rpb24gU2VydmljZSBjbGllbnQuIiIiCiAgX2NsaWVudCA9IHJlY29tbWVuZGF0aW9uZW5naW5lLlByZWRpY3Rpb25TZXJ2aWNlQ2xpZW50KCkKICByZXR1cm4gX2NsaWVudAoKCkB0dGxfY2FjaGUobWF4c2l6ZT0xMjgsIHR0bD0zNjAwKQpkZWYgZ2V0X3JlY29tbWVuZGF0aW9uX2NhdGFsb2dfY2xpZW50KCk6CiAgIiIiUmV0dXJucyBhIFJlY29tbWVuZGF0aW9uIEFJIC0gQ2F0YWxvZyBTZXJ2aWNlIGNsaWVudC4iIiIKICBfY2xpZW50ID0gcmVjb21tZW5kYXRpb25lbmdpbmUuQ2F0YWxvZ1NlcnZpY2VDbGllbnQoKQogIHJldHVybiBfY2xpZW50CgoKQHR0bF9jYWNoZShtYXhzaXplPTEyOCwgdHRsPTM2MDApCmRlZiBnZXRfcmVjb21tZW5kYXRpb25fdXNlcl9ldmVudF9jbGllbnQoKToKICAiIiJSZXR1cm5zIGEgUmVjb21tZW5kYXRpb24gQUkgLSBVc2VyRXZlbnQgU2VydmljZSBjbGllbnQuIiIiCiAgX2NsaWVudCA9IHJlY29tbWVuZGF0aW9uZW5naW5lLlVzZXJFdmVudFNlcnZpY2VDbGllbnQoKQogIHJldHVybiBfY2xpZW50CgoKY2xhc3MgQ3JlYXRlQ2F0YWxvZ0l0ZW0oUFRyYW5zZm9ybSk6CiAgIiIiQ3JlYXRlcyBjYXRhbG9naXRlbSBpbmZvcm1hdGlvbi4KICAgIFRoZSBgYFBUcmFuZm9ybWBgIHJldHVybnMgYSBQQ29sbGVjdGlvblR1cGxlIHdpdGggYSBQQ29sbGVjdGlvbnMgb2YKICAgIHN1Y2Nlc3NmdWxseSBhbmQgZmFpbGVkIGNyZWF0ZWQgQ2F0YWxvZ0l0ZW1zLgoKICAgIEV4YW1wbGUgdXNhZ2U6OgoKICAgICAgcGlwZWxpbmUgfCBDcmVhdGVDYXRhbG9nSXRlbSgKICAgICAgICBwcm9qZWN0PSdleGFtcGxlLWdjcC1wcm9qZWN0JywKICAgICAgICBjYXRhbG9nX25hbWU9J215LWNhdGFsb2cnKQogICAgIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBwcm9qZWN0OiBzdHIgPSBOb25lLAogICAgICByZXRyeTogUmV0cnkgPSBOb25l"}}]
["b6eb4cfb4bcde2b10e679246b3c0bef8425cbf4b-3","b6eb4cfb4bcde2b10e679246b3c0bef8425cbf4b","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KPHxmaW1fZW5kfD4="]
["b6eb4cfb4bcde2b10e679246b3c0bef8425cbf4b-4","b6eb4cfb4bcde2b10e679246b3c0bef8425cbf4b",{"$cut":{"chars":19064,"head":"PHxmaW1fcHJlZml4fD4KIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIGNvbm5lY3RvciBmb3Igc2VuZGluZyBBUEkgcmVxdWVzdHMgdG8gdGhlIEdDUCBSZWNvbW1lbmRhdGlvbnMgQUkKQVBJIChodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vcmVjb21tZW5kYXRpb25zKS4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSB0eXBpbmcgaW1wb3J0IFNlcXVlbmNlCmZyb20gdHlwaW5nIGltcG9ydCBUdXBsZQoKZnJvbSBnb29nbGUuYXBpX2NvcmUucmV0cnkgaW1wb3J0IFJldHJ5Cgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzIGltcG9ydCBNZXRyaWNzCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBHb29nbGVDbG91ZE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBEb0ZuCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgUGFyRG8KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBQVHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsIGltcG9ydCBHcm91cEludG9CYXRjaGVzCmZyb20gY2FjaGV0b29scy5mdW5jIGltcG9ydCB0dGxfY2FjaGUKCiMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uLCB1bmdyb3VwZWQtaW1wb3J0cwp0cnk6CiAgZnJvbSBnb29nbGUuY2xvdWQgaW1wb3J0IHJlY29tbWVuZGF0aW9uZW5naW5lCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICByYWlzZSBJbXBvcnRFcnJvcigKICAgICAgJ0dvb2dsZSBDbG91ZCBSZWNvbW1lbmRhdGlvbiBBSSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGV4ZWN1dGlvbiAnCiAgICAgICdlbnZpcm9ubWVudCAoY291bGQgbm90IGltcG9ydCBnb29nbGUuY2xvdWQucmVjb21tZW5kYXRpb25lbmdpbmUpLicpCiMgcHlsaW50OiBlbmFibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24sIHVuZ3JvdXBlZC1pbXBvcnRzCgpfX2FsbF9fID0gWwogICAgJ0NyZWF0ZUNhdGFsb2dJdGVtJywKICAgICdXcml0ZVVzZXJFdmVudCcsCiAgICAnSW1wb3J0Q2F0YWxvZ0l0ZW1zJywKICAgICdJbXBvcnRVc2VyRXZlbnRzJywKICAgICdQcmVkaWN0VXNlckV2ZW50JwpdCgpGQUlMRURfQ0FUQUxPR19JVEVNUyA9ICJmYWlsZWRfY2F0YWxvZ19pdGVtcyIKCgpAdHRsX2NhY2hlKG1heHNpemU9MTI4LCB0dGw9MzYwMCkKZGVmIGdldF9yZWNvbW1lbmRhdGlvbl9wcmVkaWN0aW9uX2NsaWVudCgpOgogICIiIlJldHVybnMgYSBSZWNvbW1lbmRhdGlvbiBBSSAtIFByZWRpY3Rpb24gU2VydmljZSBjbGllbnQuIiIiCiAgX2NsaWVudCA9IHJlY29tbWVuZGF0aW9uZW5naW5lLlByZWRpY3Rpb25TZXJ2aWNlQ2xpZW50KCkKICByZXR1cm4gX2NsaWVudAoKCkB0dGxfY2FjaGUobWF4c2l6ZT0xMjgsIHR0bD0zNjAwKQpkZWYgZ2V0X3JlY29tbWVuZGF0aW9uX2NhdGFsb2dfY2xpZW50KCk6CiAgIiIiUmV0dXJucyBhIFJlY29tbWVuZGF0aW9uIEFJIC0gQ2F0YWxvZyBTZXJ2aWNlIGNsaWVudC4iIiIKICBfY2xpZW50ID0gcmVjb21tZW5kYXRpb25lbmdpbmUuQ2F0YWxvZ1NlcnZpY2VDbGllbnQoKQogIHJldHVybiBfY2xpZW50CgoKQHR0bF9jYWNoZShtYXhzaXplPTEyOCwgdHRsPTM2MDApCmRlZiBnZXRfcmVjb21tZW5kYXRpb25fdXNlcl9ldmVudF9jbGllbnQoKToKICAiIiJSZXR1cm5zIGEgUmVjb21tZW5kYXRpb24gQUkgLSBVc2VyRXZlbnQgU2VydmljZSBjbGllbnQuIiIiCiAgX2NsaWVudCA9IHJlY29tbWVuZGF0aW9uZW5naW5lLlVzZXJFdmVudFNlcnZpY2VDbGllbnQoKQogIHJldHVybiBfY2xpZW50CgoKY2xhc3MgQ3JlYXRlQ2F0YWxvZ0l0ZW0oUFRyYW5zZm9ybSk6CiAgIiIiQ3JlYXRlcyBjYXRhbG9naXRlbSBpbmZvcm1hdGlvbi4KICAgIFRoZSBgYFBUcmFuZm9ybWBgIHJldHVybnMgYSBQQ29sbGVjdGlvblR1cGxlIHdpdGggYSBQQ29sbGVjdGlvbnMgb2YKICAgIHN1Y2Nlc3NmdWxseSBhbmQgZmFpbGVkIGNyZWF0ZWQgQ2F0YWxvZ0l0ZW1zLgoKICAgIEV4YW1wbGUgdXNhZ2U6OgoKICAgICAgcGlwZWxpbmUgfCBDcmVhdGVDYXRhbG9nSXRlbSgKICAgICAgICBwcm9qZWN0PSdleGFtcGxlLWdjcC1wcm9qZWN0JywKICAgICAgICBjYXRhbG9nX25hbWU9J215LWNhdGFsb2cnKQogICAgIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBwcm9qZWN0OiBzdHIgPSBOb25lLAogICAgICByZXRyeTogUmV0cnkgPSBOb25l"}}]
["b6eb4cfb4bcde2b10e679246b3c0bef8425cbf4b-5","b6eb4cfb4bcde2b10e679246b3c0bef8425cbf4b",{"$cut":{"chars":26144,"head":"PHxmaW1fcHJlZml4fD4KIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIGNvbm5lY3RvciBmb3Igc2VuZGluZyBBUEkgcmVxdWVzdHMgdG8gdGhlIEdDUCBSZWNvbW1lbmRhdGlvbnMgQUkKQVBJIChodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vcmVjb21tZW5kYXRpb25zKS4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSB0eXBpbmcgaW1wb3J0IFNlcXVlbmNlCmZyb20gdHlwaW5nIGltcG9ydCBUdXBsZQoKZnJvbSBnb29nbGUuYXBpX2NvcmUucmV0cnkgaW1wb3J0IFJldHJ5Cgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzIGltcG9ydCBNZXRyaWNzCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBHb29nbGVDbG91ZE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBEb0ZuCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgUGFyRG8KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBQVHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsIGltcG9ydCBHcm91cEludG9CYXRjaGVzCmZyb20gY2FjaGV0b29scy5mdW5jIGltcG9ydCB0dGxfY2FjaGUKCiMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uLCB1bmdyb3VwZWQtaW1wb3J0cwp0cnk6CiAgZnJvbSBnb29nbGUuY2xvdWQgaW1wb3J0IHJlY29tbWVuZGF0aW9uZW5naW5lCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICByYWlzZSBJbXBvcnRFcnJvcigKICAgICAgJ0dvb2dsZSBDbG91ZCBSZWNvbW1lbmRhdGlvbiBBSSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGV4ZWN1dGlvbiAnCiAgICAgICdlbnZpcm9ubWVudCAoY291bGQgbm90IGltcG9ydCBnb29nbGUuY2xvdWQucmVjb21tZW5kYXRpb25lbmdpbmUpLicpCiMgcHlsaW50OiBlbmFibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24sIHVuZ3JvdXBlZC1pbXBvcnRzCgpfX2FsbF9fID0gWwogICAgJ0NyZWF0ZUNhdGFsb2dJdGVtJywKICAgICdXcml0ZVVzZXJFdmVudCcsCiAgICAnSW1wb3J0Q2F0YWxvZ0l0ZW1zJywKICAgICdJbXBvcnRVc2VyRXZlbnRzJywKICAgICdQcmVkaWN0VXNlckV2ZW50JwpdCgpGQUlMRURfQ0FUQUxPR19JVEVNUyA9ICJmYWlsZWRfY2F0YWxvZ19pdGVtcyIKCgpAdHRsX2NhY2hlKG1heHNpemU9MTI4LCB0dGw9MzYwMCkKZGVmIGdldF9yZWNvbW1lbmRhdGlvbl9wcmVkaWN0aW9uX2NsaWVudCgpOgogICIiIlJldHVybnMgYSBSZWNvbW1lbmRhdGlvbiBBSSAtIFByZWRpY3Rpb24gU2VydmljZSBjbGllbnQuIiIiCiAgX2NsaWVudCA9IHJlY29tbWVuZGF0aW9uZW5naW5lLlByZWRpY3Rpb25TZXJ2aWNlQ2xpZW50KCkKICByZXR1cm4gX2NsaWVudAoKCkB0dGxfY2FjaGUobWF4c2l6ZT0xMjgsIHR0bD0zNjAwKQpkZWYgZ2V0X3JlY29tbWVuZGF0aW9uX2NhdGFsb2dfY2xpZW50KCk6CiAgIiIiUmV0dXJucyBhIFJlY29tbWVuZGF0aW9uIEFJIC0gQ2F0YWxvZyBTZXJ2aWNlIGNsaWVudC4iIiIKICBfY2xpZW50ID0gcmVjb21tZW5kYXRpb25lbmdpbmUuQ2F0YWxvZ1NlcnZpY2VDbGllbnQoKQogIHJldHVybiBfY2xpZW50CgoKQHR0bF9jYWNoZShtYXhzaXplPTEyOCwgdHRsPTM2MDApCmRlZiBnZXRfcmVjb21tZW5kYXRpb25fdXNlcl9ldmVudF9jbGllbnQoKToKICAiIiJSZXR1cm5zIGEgUmVjb21tZW5kYXRpb24gQUkgLSBVc2VyRXZlbnQgU2VydmljZSBjbGllbnQuIiIiCiAgX2NsaWVudCA9IHJlY29tbWVuZGF0aW9uZW5naW5lLlVzZXJFdmVudFNlcnZpY2VDbGllbnQoKQogIHJldHVybiBfY2xpZW50CgoKY2xhc3MgQ3JlYXRlQ2F0YWxvZ0l0ZW0oUFRyYW5zZm9ybSk6CiAgIiIiQ3JlYXRlcyBjYXRhbG9naXRlbSBpbmZvcm1hdGlvbi4KICAgIFRoZSBgYFBUcmFuZm9ybWBgIHJldHVybnMgYSBQQ29sbGVjdGlvblR1cGxlIHdpdGggYSBQQ29sbGVjdGlvbnMgb2YKICAgIHN1Y2Nlc3NmdWxseSBhbmQgZmFpbGVkIGNyZWF0ZWQgQ2F0YWxvZ0l0ZW1zLgoKICAgIEV4YW1wbGUgdXNhZ2U6OgoKICAgICAgcGlwZWxpbmUgfCBDcmVhdGVDYXRhbG9nSXRlbSgKICAgICAgICBwcm9qZWN0PSdleGFtcGxlLWdjcC1wcm9qZWN0JywKICAgICAgICBjYXRhbG9nX25hbWU9J215LWNhdGFsb2cnKQogICAgIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBwcm9qZWN0OiBzdHIgPSBOb25lLAogICAgICByZXRyeTogUmV0cnkgPSBOb25l"}}]
["c1eae778022be5e34f4624fdceaf362d50c110cf-1","c1eae778022be5e34f4624fdceaf362d50c110cf","PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRhY2xhc3NlcyBpbXBvcnQgZGF0YWNsYXNzCmZyb20gb3MgaW1wb3J0IGdldGVudgoKCkBkYXRhY2xhc3MKY2xhc3MgQm90OgogICAgdG9rZW46IHN0cgoKCkBkYXRhY2xhc3MKY2xhc3MgREI6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGhvc3Q6IHN0cgogICAgcG9ydDogaW50CiAgICBuYW1lOiBzdHIKICAgIGxvZ2luOiBzdHIKPHxmaW1fZW5kfD4="]
["e72f60a70a6c74ece59519a3d8055adb351c3b3d-1","e72f60a70a6c74ece59519a3d8055adb351c3b3d","PHxmaW1fcHJlZml4fD4KIyMgMi4gSW50cm9kdWN0aW9uIHRvIHRoZSBEYXRhIFNldCAjIwoKaW1wb3J0IHBhbmRhcyBhcyBwZAoKdGl0YW5pYyA9IHBkLnJlYWRfY3N2KCd0cmFpbi5jc3YnKQoKdGl0YW5pYyA9IHRpdGFuaWNbWydTdXJ2aXZlZCcsICdQY2xhc3MnLCAnU2V4JywgJ0FnZScsICdTaWJTcCcsICdQYXJjaCcsICdGYXJlJywgJ0VtYmFya2VkJ11dLmRyb3BuYSgpCgojIyAzLiBDcmVhdGluZyBIaXN0b2dyYW1zIEluIFNlYWJvcm4gIyMKCmltcG9ydCBzZWFib3JuIGFzIHNucwppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CgpzbnMuZGlzdHBsb3QodGl0YW5pY1snQWdlJ10pCnBsdC5zaG93KCkKCiMjIDQuIEdlbmVyYXRpbmcgQSBLZXJuZWwgRGVuc2l0eSBQbG90ICMjCgpzbnMua2RlcGxvdCh0aXRhbmljWyJBZ2UiXSwgc2hhZGUgPSBUcnVlKQoKcGx0LnhsYWJlbCgiQWdlIikKCnBsdC5zaG93KCkKCiMjIDUuIE1vZGlmeWluZyBUaGUgQXBwZWFyYW5jZSBPZiBUaGUgUGxvdHMgIyMKCnNucy5zZXRfc3R5bGUoIndoaXRlIikKCnNucy5rZGVwbG90KHRpdGFuaWNbIkFnZSJdLCBzaGFkZSA9IFRydWUpCgpwbHQueGxhYmVsKCJBZ2UiKQoKc25zLmRlc3BpbmUobGVmdCA9IFRydWUsIGJvdHRvbSA9IFRydWUpCgpwbHQuc2hvdygpCgojIyA2LiBDb25kaXRpb25hbCBEaXN0cmlidXRpb25zIFVzaW5nIEEgU2luZ2xlIENvbmRpdGlvbiAjIwoKZ3JpZCA9IHNucy5GYWNldEdyaWQodGl0YW5pYywgY29sID0gIlBjbGFzcyIsIHNpemUgPSA2KQoKPHxmaW1faG9sZXw+CnBsdC5zaG93KCkKCiMjIDcuIENyZWF0aW5nIENvbmRpdGlvbmFsIFBsb3RzIFVzaW5nIFR3byBDb25kaXRpb25zICMjCgpnID0gc25zLkZhY2V0R3JpZCh0aXRhbmljLCBjb2w9IlN1cnZpdmVkIiwgcm93PSJQY2xhc3MiLCBzaXplID0gNikKZy5tYXAoc25zLmtkZXBsb3QsICJBZ2UiLCBzaGFkZT1UcnVlKQpzbnMuZGVzcGluZShsZWZ0PVRydWUsIGJvdHRvbT1UcnVlKQpwbHQuc2hvdygpCgojIyA4LiBDcmVhdGluZyBDb25kaXRpb25hbCBQbG90cyBVc2luZyBUaHJlZSBDb25kaXRpb25zICMjCgpnID0gc25zLkZhY2V0R3JpZCh0aXRhbmljLCBjb2w9IlN1cnZpdmVkIiwgcm93PSJQY2xhc3MiLCBodWU9IlNleCIsIHNpemU9MykKZy5tYXAoc25zLmtkZXBsb3QsICJBZ2UiLCBzaGFkZT1UcnVlKQpzbnMuZGVzcGluZShsZWZ0PVRydWUsIGJvdHRvbT1UcnVlKQpwbHQuc2hvdygpCgojIyA5LiBBZGRpbmcgQSBMZWdlbmQgIyMKCmcgPSBzbnMuRmFjZXRHcmlkKHRpdGFuaWMsIGNvbD0iU3Vydml2ZWQiLCByb3c9IlBjbGFzcyIsIGh1ZT0iU2V4Iiwgc2l6ZT0zKQpnLm1hcChzbnMua2RlcGxvdCwgIkFnZSIsIHNoYWRlPVRydWUpCmcuYWRkX2xlZ2VuZCgpCnNucy5kZXNwaW5lKGxlZnQ9VHJ1ZSwgYm90dG9tPVRydWUpCnBsdC5zaG93KCkKPHxmaW1fc3VmZml4fD4KZ3JpZC5tYXAoc25zLmtkZXBsb3QsICJBZ2UiLCBzaGFkZSA9IFRydWUpCgpzbnMuZGVzcGluZShsZWZ0ID0gVHJ1ZSwgYm90dG9tID0gVHJ1ZSkKCjx8ZmltX2VuZHw+"]
["e7095f70bf9b5c1eddc19b253b3b81fc1628a3a5-1","e7095f70bf9b5c1eddc19b253b3b81fc1628a3a5","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB1bml0dGVzdAppbXBvcnQgcmFuZG9tCmltcG9ydCBpdGVydG9vbHMKaW1wb3J0IGNvcHkKCmZyb20gRFNMLmdlbmVyYWxfSG90RmxpcCBpbXBvcnQgR2VuZXJhbEhvdEZsaXBBdHRhY2ssIENhbmRpZGF0ZQpmcm9tIERTTC50cmFuc2Zvcm1hdGlvbiBpbXBvcnQgU3ViLCBJbnMsIERlbApmcm9tIHV0aWxzIGltcG9ydCBCZWFtCgoKY2xhc3MgVGVzdE1vZGVsMToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaW0pOgogICAgICAgIHNlbGYuZW1iZWQgPSB7fQogICAgICAgIHNlbGYuZGltID0gZGltCgoKY2xhc3MgVGVzdE1vZGVsOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpbSk6CiAgICAgICAgc2VsZi5lbWJlZCA9IHt9CiAgICAgICAgc2VsZi5kaW0gPSBkaW0KCiAgICBkZWYgZ2V0X2dyYWQoc2VsZiwgeCwgeSk6CiAgICAgICAgc2VsZi5zY2FuKHgpCiAgICAgICAgcmV0dXJuIG5wLmFycmF5KFtzZWxmLmVtYmVkW3ddIGZvciB3IGluIHhdKQoKICAgIGRlZiBnZXRfZW1iZWQoc2VsZiwgeCwgcmV0X2xlbj1Ob25lKToKICAgICAgICBzZWxmLnNjYW4oeCkKICAgICAgICBpZiByZXRfbGVuIGlzIE5vbmU6CiAgICAgICAgICAgIHJldF9sZW4gPSBsZW4oeCkKICAgICAgICByZXQgPSBucC56ZXJvcygocmV0X2xlbiwgc2VsZi5kaW0pKQogICAgICAgIGZvciAoaSwgdykgaW4gZW51bWVyYXRlKHgpOgogICAgICAgICAgICByZXRbaV0gPSBzZWxmLmVtYmVkW3ddCiAgICAgICAgcmV0dXJuIHJldAoKICAgIGRlZiBzY2FuKHNlbGYsIHgpOgogICAgICAgIGZvciB3IGluIHg6CiAgICAgICAgICAgIGlmIHcgbm90IGluIHNlbGYuZW1iZWQ6CiAgICAgICAgICAgICAgICBzZWxmLmVtYmVkW3ddID0gbnAucmFuZG9tLnJhbmRvbShzZWxmLmRpbSkKCgpjbGFzcyBUZXN0R2VuZXJhbEhvdEZsaXBBdHRhY2sodW5pdHRlc3QuVGVzdENhc2UpOgogICAgZGVmIHRlc3RfYXJndW1lbnRzKHNlbGYpOgogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICBHZW5lcmFsSG90RmxpcEF0dGFjayhbKDEsIDMsIDQpXSkKICAgICAgICBhdHRhY2sgPSBHZW5lcmFsSG90RmxpcEF0dGFjayhbKFN1YigiZGF0YS9wZGRiIiwgVHJ1ZSksIDEpLCAoRGVsKCksIDIpLCAoSW5zKCksIDMpXSkKICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgICAgYXR0YWNrLmdlbl9hZHYoVGVzdE1vZGVsMSgxMDApLCBbXSwgMSwgNSwgTm9uZSkKCiAgICBkZWYgdGVzdF9iZWFtKHNlbGYpOgogICAgICAgIGJlYW1zID0gW0JlYW0oNCksIEJlYW0oMyksIEJlYW0oMildCiAgICAgICAgdGVzdF9zZXRzID0gW1soImFhYSIsIDEpLCAoImJiYiIsIDApLCAoImNjYyIsIC0zKV0sIFsoImFhYSIsIDEpLCAoImJiYiIsIC0zKSwgKCJjY2MiLCAwKV0sCiAgICAgICAgICAgICAgICAgICAgIFsoImFhYSIsIDEpLCAoImJiYiIsIC0zKSwgKCJjY2MiLCAwKSwgKCJkZGQiLCAyKV1dCiAgICAgICAgZm9yIChjYW5kaWRhdGVzLCB0ZXN0cykgaW4gemlwKGJlYW1zLCB0ZXN0X3NldHMpOgogICAgICAgICAgICByYW5kb20uc2h1ZmZsZSh0ZXN0cykKICAgICAgICAgICAgZm9yIGEgaW4gdGVzdHM6CiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFkZCgqYSkKICAgICAgICAgICAgdGVzdHMuc29ydChrZXk9bGFtYmRhIHg6IC14WzFdKQogICAgICAgICAgICB0ZXN0cyA9IHRlc3RzWzpjYW5kaWRhdGVzLmJ1ZGdldF0KICAgICAgICAgICAgYW5zID0gY2FuZGlkYXRlcy5jaGVja19iYWxhbmNlKCkKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGVzdHMpLCBsZW4oYW5zKSkKICAgICAgICAgICAgZm9yIChhLCBiKSBpbiB6aXAodGVzdHMsIGFucyk6CiAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwoYSwgYikKCiAgICBkZWYgdGVzdF9wZXJ0dXJiYXRpb24oc2VsZik6CiAgICAgICAgbW9kZWwgPSBUZXN0TW9kZWwoMTAwKQogICAgICAgIHBlcnR1cmIgPSBbKFN1YigiZGF0YS9wZGRiIiwgVHJ1ZSksIDMpLCAoRGVsKCksIDIpLCAoSW5zKCksIDEpXQogICAgICAgIGF0dGFjayA9IEdlbmVyYWxIb3RGbGlwQXR0YWNrKHBlcnR1cmIpCiAgICAgICAgc2VuID0gImkgc2VlIHRoYXQgYSBjYXQgc2l0cyBvbiB0aGUgZmxvb3IgLiIuc3BsaXQoKQogICAgICAgIHN1Yl9wb3MgPSBwZXJ0dXJiWzBdWzBdLmdldF9wb3Moc2VuKQogICAgICAgIGRlbF9wb3MgPSBwZXJ0dXJiWzFdWzBdLmdldF9wb3Moc2VuKQogICAgICAgIGluc19wb3MgPSBwZXJ0dXJiWzJdWzBdLmdldF9wb3Moc2VuKQogICAgICAgIGNudCA9IDAKICAgICAgICBmb3Igc3ViX2NudCBpbiByYW5nZShwZXJ0dXJiWzBdWzFdICsgMSk6CiAgICAgICAgICAgIGZvciBkZWxfY250IGluIHJhbmdlKHBlcnR1cmJbMV1bMV0gKyAxKToKICAgICAgICAgICAgICAgIGZvciBpbnNfY250IGluIHJhbmdlKHBlcnR1cmJbMl1bMV0gKyAxKToKICAgICAgICAgICAgICAgICAgICBmb3IgYSBpbiBpdGVydG9vbHMucGVybXV0YXRpb25zKHN1Yl9wb3MsIHN1Yl9jbnQpOgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgYiBpbiBpdGVydG9vbHMucGVybXV0YXRpb25zKGRlbF9wb3MsIGRlbF9jbnQpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gaXRlcnRvb2xzLnBlcm11dGF0aW9ucyhpbnNfcG9zLCBpbnNfY250KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc2V0KGEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHNldChiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBzZXQoYykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhLmlzZGlzam9pbnQoYikgYW5kIGEuaXNkaXNqb2ludChjKSBhbmQgYi5pc2Rpc2pvaW50KGMpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbnQgKz0gMQoKICAgICAgICBhbnMgPSBhdHRhY2suZ2VuX2Fkdihtb2RlbCwgc2VuLCAwLCAxMDAwMCwgbW9kZWwuZ2V0X2VtYmVkLCBUcnVlKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY250LCBsZW4oYW5zKSkKICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oYW5zKSk6CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnNbaV1bMV0gPD0gYW5zW2kgLSAxXVsxXSkKCiAgICBkZWYgdGVzdF9tdWx0aV9jaG9pY2Uoc2VsZik6CiAgICAgICAgbW9kZWwgPSBUZXN0TW9kZWwoMTAwKQogICAgICAgIHBlcnR1cmIgPSBbKFN1YigiZGF0YS9wZGRiIiwgRmFsc2UpLCAzKV0KICAgICAgICBhdHRhY2sgPSBHZW5lcmFsSG90RmxpcEF0dGFjayhwZXJ0dXJiKQogICAgICAgIHNlbiA9ICJpIHNlZSB0aGF0IGEgY2F0IHNpdHMgb24gdGhlIGZsb29yIC4iLnNwbGl0KCkKICAgICAgICBzdWJfcG9zID0gcGVydHVyYlswXVswXS5nZXRfcG9zKHNlbikKICAgICAgICBmb3IgaSwgKHN0YXJ0X3BvcywgZW5kX3BvcykgaW4gZW51bWVyYXRlKHN1Yl9wb3MpOgogICAgICAgICAgICBjbnQgPSAwCiAgICAgICAgICAgIGZvciBfIGluIHBlcnR1cmJbMF1bMF0udHJhbnNmb3JtZXIoc2VuLCBzdGFydF9wb3MsIGVuZF9wb3MpOgogICAgICAgICAgICAgICAgY250ICs9IDEKICAgICAgICAgICAgc3ViX3Bvc1tpXSA9IGNudAoKICAgICAgICBjbnQgPSAwCiAgICAgICAgZm9yIHN1Yl9jbnQgaW4gcmFuZ2UocGVydHVyYlswXVsxXSArIDEpOgogICAgICAgICAgICBmb3IgYSBpbiBpdGVydG9vbHMucGVybXV0YXRpb25zKHN1Yl9wb3MsIHN1Yl9jbnQpOgogICAgICAgICAgICAgICAgY250ICs9IG5wLnByb2QobGlzdChhKSkKCiAgICAgICAgYW5zID0gYXR0YWNrLmdlbl9hZHYobW9kZWwsIHNlbiwgMCwgMTAwMDAsIG1vZGVsLmdldF9lbWJlZCwgVHJ1ZSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNudCwgbGVuKGFucykpCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKGFucykpOgogICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYW5zW2ldWzFdIDw9IGFuc1tpIC0gMV1bMV0pCgogICAgZGVmIHRlc3Rfc2luZ2xlX3RyYW5zZm9ybWF0aW9uKHNlbGYpOgogICAgICAgIG1vZGVsID0gVGVzdE1vZGVsKDEwMCkKICAgICAgICBwZXJ0dXJiMSA9IFsoU3ViKCJkYXRhL3BkZGIiLCBUcnVlKSwgMildCiAgICAgICAgcGVydHVyYjIgPSBbKERlbCgpLCAyKV0KICAgICAgICBwZXJ0dXJiMyA9IFsoSW5zKCksIDIpXQogICAgICAgIGF0dGFjazEgPSBHZW5lcmFsSG90RmxpcEF0dGFjayhwZXJ0dXJiMSkKICAgICAgICBhdHRhY2syID0gR2VuZXJhbEhvdEZsaXBBdHRhY2socGVydHVyYjIpCiAgICAgICAgYXR0YWNrMyA9IEdlbmVyYWxIb3RGbGlwQXR0YWNrKHBlcnR1cmIzKQogICAgICAgIHNlbiA9ICJpIHNlZSB0aGF0IGEgY2F0IHNpdHMgb24gdGhlIGZsb29yIC4iLnNwbGl0KCkKICAgICAgICBzdWJfcG9zID0gcGVydHVyYjFbMF1bMF0uZ2V0X3BvcyhzZW4pCiAgICAgICAgZXhwX2FuczEgPSBbXQogICAgICAgIGZvciBzdWJfY250IGluIHJhbmdlKHBlcnR1cmIxWzBdWzFdICsgMSk6CiAgICAgICAgICAgIGZvciBhIGluIGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMoc3ViX3Bvcywgc3ViX2NudCk6CiAgICAgICAgICAgICAgICBuZXdfeCA9IHNlbgogICAgICAgICAgICAgICAgZm9yIChzdGFydF9wb3MsIGVuZF9wb3MpIGluIGE6CiAgICAgICAgICAgICAgICAgICAgbmV3X3ggPSBuZXh0KHBlcnR1cmIxWzBdWzBdLnRyYW5zZm9ybWVyKG5ld194LCBzdGFydF9wb3MsIGVuZF9wb3MpKQogICAgICAgICAgICAgICAgZXhwX2FuczEuYXBwZW5kKG5ld194KQoKICAgICAgICBkZWxfcG9zID0gcGVydHVyYjJbMF1bMF0uZ2V0X3BvcyhzZW4pCiAgICAgICAgZXhwX2FuczIgPSBbXQogICAgICAgIGZvciBkZWxfY250IGluIHJhbmdlKHBlcnR1cmIyWzBdWzFdICsgMSk6CiAgICAgICAgICAgIGZvciBhIGluIGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMoZGVsX3BvcywgZGVsX2NudCk6CiAgICAgICAgICAgICAgICBuZXdfeCA9IFtdCiAgICAgICAgICAgICAgICBmb3IgKGksIHcpIGluIGVudW1lcmF0ZShzZW4pOgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgIGV4cF9hbnMyLmFwcGVuZChuZXdfeCkKCiAgICAgICAgaW5zX3BvcyA9IHBlcnR1cmIzWzBdWzBdLmdldF9wb3Moc2VuKQogICAgICAgIGV4cF9hbnMzID0gW10KICAgICAgICBmb3IgaW5zX2NudCBpbiByYW5nZShwZXJ0dXJiM1swXVsxXSArIDEpOgogICAgICAgICAgICBmb3IgYSBpbiBpdGVydG9vbHMucGVybXV0YXRpb25zKGluc19wb3MsIGluc19jbnQpOgogICAgICAgICAgICAgICAgbmV3X3ggPSBbXQogICAgICAgICAgICAgICAgZm9yIChpLCB3KSBpbiBlbnVtZXJhdGUoc2VuKToKICAgICAgICAgICAgICAgICAgICBpZiAoaSwgaSArIDEpIG5vdCBpbiBhOgogICAgICAgICAgICAgICAgICAgICAgICBuZXdfeC5hcHBlbmQodykKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBuZXdfeC5hcHBlbmQodykKICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3guYXBwZW5kKHcpCgogICAgICAgICAgICAgICAgZXhwX2FuczMuYXBwZW5kKG5ld194KQoKICAgICAgICBhbnMxID0gYXR0YWNrMS5nZW5fYWR2KG1vZGVsLCBzZW4sIDAsIDEwMDAwLCBtb2RlbC5nZXRfZW1iZWQpCiAgICAgICAgYW5zMiA9IGF0dGFjazIuZ2VuX2Fkdihtb2RlbCwgc2VuLCAwLCAxMDAwMCwgbW9kZWwuZ2V0X2VtYmVkKQogICAgICAgIGFuczMgPSBhdHRhY2szLmdlbl9hZHYobW9kZWwsIHNlbiwgMCwgMTAwMDAsIG1vZGVsLmdldF9lbWJlZCkKCiAgICAgICAgZGVmIGxpc3QybWFwKGwpOgogICAgICAgICAgICByZXQgPSB7fQogICAgICAgICAgICBmb3IgeCBpbiBsOgogICAgICAgICAgICAgICAgeCA9IHR1cGxlKHgpCiAgICAgICAgICAgICAgICByZXRbeF0gPSByZXQuc2V0ZGVmYXVsdCh4LCAwKSArIDEKICAgICAgICAgICAgcmV0dXJuIHJldAoKICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbChsaXN0Mm1hcChleHBfYW5zMSksIGxpc3QybWFwKGFuczEpKQogICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKGxpc3QybWFwKGV4cF9hbnMyKSwgbGlzdDJtYXAoYW5zMikpCiAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwobGlzdDJtYXAoZXhwX2FuczMpLCBsaXN0Mm1hcChhbnMzKSkKCiAgICBkZWYgdGVzdF9tYXBfb3JpMngoc2VsZik6CiAgICAgICAgbW9kZWwgPSBUZXN0TW9kZWwoMTAwKQogICAgICAgIHBlcnR1cmIgPSBbKFN1YigiZGF0YS9wZGRiIiwgVHJ1ZSksIDMpLCAoRGVsKHsiZmxvb3IifSksIDIpLCAoSW5zKCksIDEpXQogICAgICAgIHNlbiA9ICJpIHNlZSB0aGF0IGEgY2F0IHNpdHMgb24gdGhlIGZsb29yIC4iLnNwbGl0KCkKICAgICAgICBzdWJfcG9zID0gcGVydHVyYlswXVswXS5nZXRfcG9zKHNlbikKICAgICAgICBkZWxfcG9zID0gcGVydHVyYlsxXVswXS5nZXRfcG9zKHNlbikKICAgICAgICBpbnNfcG9zID0gcGVydHVyYlsyXVswXS5nZXRfcG9zKHNlbikKICAgICAgICBjYW5kaWRhdGUgPSBDYW5kaWRhdGUoWyJkdW1teSJdLCAwLCBbTm9uZV0gKiBsZW4oc2VuKSkKICAgICAgICBjYW5kaWRhdGVzID0gQmVhbSgxKQogICAgICAgIGNhbmRpZGF0ZS50cnlfYWxsX3BvcyhpbnNfcG9zLCBwZXJ0dXJiWzJdWzBdLCBtb2RlbC5nZXRfZ3JhZChjYW5kaWRhdGUueCwgMCksIG1vZGVsLmdldF9lbWJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbihjYW5kaWRhdGVzLnF1ZXVlKSkKICAgICAgICBtYXBfb3JpMnggPSBbTm9uZV0gKiBsZW4oc2VuKQogICAgICAgIG1hcF9vcmkyeFtzZW4uaW5kZXgoImZsb29yIildID0gMQogICAgICAgIGNhbmRpZGF0ZSA9IENhbmRpZGF0ZShbImR1bW15MSIsICJmbG9vciIsICJkdW1teTIiXSwgMCwgbWFwX29yaTJ4KSAgIyBhbGwgcGVydHVyYmF0aW9uIGNhbiBiZSBhcHBsaWVkCiAgICAgICAgY2FuZGlkYXRlcyA9IEJlYW0oMSkKICAgICAgICBjYW5kaWRhdGUudHJ5X2FsbF9wb3Moc3ViX3BvcywgcGVydHVyYlswXVswXSwgbW9kZWwuZ2V0X2dyYWQoY2FuZGlkYXRlLngsIDApLCBtb2RlbC5nZXRfZW1iZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMpCiAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKFsiZHVtbXkxIiwgImZsb29yaW5nIiwgImR1bW15MiJdLCBjYW5kaWRhdGVzLmNoZWNrX2JhbGFuY2UoKVswXVswXS54KQoKICAgICAgICBjYW5kaWRhdGVzID0gQmVhbSgxKQogICAgICAgIGNhbmRpZGF0ZS50cnlfYWxsX3BvcyhkZWxfcG9zLCBwZXJ0dXJiWzFdWzBdLCBtb2RlbC5nZXRfZ3JhZChjYW5kaWRhdGUueCwgMCksIG1vZGVsLmdldF9lbWJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcykKICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwoWyJkdW1teTEiLCAiZHVtbXkyIl0sIGNhbmRpZGF0ZXMuY2hlY2tfYmFsYW5jZSgpWzBdWzBdLngpCgogICAgICAgIGNhbmRpZGF0ZXMgPSBCZWFtKDEpCiAgICAgICAgY2FuZGlkYXRlLnRyeV9hbGxfcG9zKGluc19wb3MsIHBlcnR1cmJbMl1bMF0sIG1vZGVsLmdldF9ncmFkKGNhbmRpZGF0ZS54LCAwKSwgbW9kZWwuZ2V0X2VtYmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzKQogICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChbImR1bW15MSIsICJmbG9vciIsICJmbG9vciIsICJkdW1teTIiXSwgY2FuZGlkYXRlcy5jaGVja19iYWxhbmNlKClbMF1bMF0ueCkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdW5pdHRlc3QubWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgaWYgKGksIGkgKyAxKSBub3QgaW4gYToKICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3guYXBwZW5kKHcpCgo8fGZpbV9lbmR8Pg=="]
["e7095f70bf9b5c1eddc19b253b3b81fc1628a3a5-2","e7095f70bf9b5c1eddc19b253b3b81fc1628a3a5","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB1bml0dGVzdAppbXBvcnQgcmFuZG9tCmltcG9ydCBpdGVydG9vbHMKaW1wb3J0IGNvcHkKCmZyb20gRFNMLmdlbmVyYWxfSG90RmxpcCBpbXBvcnQgR2VuZXJhbEhvdEZsaXBBdHRhY2ssIENhbmRpZGF0ZQpmcm9tIERTTC50cmFuc2Zvcm1hdGlvbiBpbXBvcnQgU3ViLCBJbnMsIERlbApmcm9tIHV0aWxzIGltcG9ydCBCZWFtCgoKY2xhc3MgVGVzdE1vZGVsMToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaW0pOgo8fGZpbV9ob2xlfD4KY2xhc3MgVGVzdE1vZGVsOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpbSk6CiAgICAgICAgc2VsZi5lbWJlZCA9IHt9CiAgICAgICAgc2VsZi5kaW0gPSBkaW0KCiAgICBkZWYgZ2V0X2dyYWQoc2VsZiwgeCwgeSk6CiAgICAgICAgc2VsZi5zY2FuKHgpCiAgICAgICAgcmV0dXJuIG5wLmFycmF5KFtzZWxmLmVtYmVkW3ddIGZvciB3IGluIHhdKQoKICAgIGRlZiBnZXRfZW1iZWQoc2VsZiwgeCwgcmV0X2xlbj1Ob25lKToKICAgICAgICBzZWxmLnNjYW4oeCkKICAgICAgICBpZiByZXRfbGVuIGlzIE5vbmU6CiAgICAgICAgICAgIHJldF9sZW4gPSBsZW4oeCkKICAgICAgICByZXQgPSBucC56ZXJvcygocmV0X2xlbiwgc2VsZi5kaW0pKQogICAgICAgIGZvciAoaSwgdykgaW4gZW51bWVyYXRlKHgpOgogICAgICAgICAgICByZXRbaV0gPSBzZWxmLmVtYmVkW3ddCiAgICAgICAgcmV0dXJuIHJldAoKICAgIGRlZiBzY2FuKHNlbGYsIHgpOgogICAgICAgIGZvciB3IGluIHg6CiAgICAgICAgICAgIGlmIHcgbm90IGluIHNlbGYuZW1iZWQ6CiAgICAgICAgICAgICAgICBzZWxmLmVtYmVkW3ddID0gbnAucmFuZG9tLnJhbmRvbShzZWxmLmRpbSkKCgpjbGFzcyBUZXN0R2VuZXJhbEhvdEZsaXBBdHRhY2sodW5pdHRlc3QuVGVzdENhc2UpOgogICAgZGVmIHRlc3RfYXJndW1lbnRzKHNlbGYpOgogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICBHZW5lcmFsSG90RmxpcEF0dGFjayhbKDEsIDMsIDQpXSkKICAgICAgICBhdHRhY2sgPSBHZW5lcmFsSG90RmxpcEF0dGFjayhbKFN1YigiZGF0YS9wZGRiIiwgVHJ1ZSksIDEpLCAoRGVsKCksIDIpLCAoSW5zKCksIDMpXSkKICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgICAgYXR0YWNrLmdlbl9hZHYoVGVzdE1vZGVsMSgxMDApLCBbXSwgMSwgNSwgTm9uZSkKCiAgICBkZWYgdGVzdF9iZWFtKHNlbGYpOgogICAgICAgIGJlYW1zID0gW0JlYW0oNCksIEJlYW0oMyksIEJlYW0oMildCiAgICAgICAgdGVzdF9zZXRzID0gW1soImFhYSIsIDEpLCAoImJiYiIsIDApLCAoImNjYyIsIC0zKV0sIFsoImFhYSIsIDEpLCAoImJiYiIsIC0zKSwgKCJjY2MiLCAwKV0sCiAgICAgICAgICAgICAgICAgICAgIFsoImFhYSIsIDEpLCAoImJiYiIsIC0zKSwgKCJjY2MiLCAwKSwgKCJkZGQiLCAyKV1dCiAgICAgICAgZm9yIChjYW5kaWRhdGVzLCB0ZXN0cykgaW4gemlwKGJlYW1zLCB0ZXN0X3NldHMpOgogICAgICAgICAgICByYW5kb20uc2h1ZmZsZSh0ZXN0cykKICAgICAgICAgICAgZm9yIGEgaW4gdGVzdHM6CiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFkZCgqYSkKICAgICAgICAgICAgdGVzdHMuc29ydChrZXk9bGFtYmRhIHg6IC14WzFdKQogICAgICAgICAgICB0ZXN0cyA9IHRlc3RzWzpjYW5kaWRhdGVzLmJ1ZGdldF0KICAgICAgICAgICAgYW5zID0gY2FuZGlkYXRlcy5jaGVja19iYWxhbmNlKCkKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGVzdHMpLCBsZW4oYW5zKSkKICAgICAgICAgICAgZm9yIChhLCBiKSBpbiB6aXAodGVzdHMsIGFucyk6CiAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwoYSwgYikKCiAgICBkZWYgdGVzdF9wZXJ0dXJiYXRpb24oc2VsZik6CiAgICAgICAgbW9kZWwgPSBUZXN0TW9kZWwoMTAwKQogICAgICAgIHBlcnR1cmIgPSBbKFN1YigiZGF0YS9wZGRiIiwgVHJ1ZSksIDMpLCAoRGVsKCksIDIpLCAoSW5zKCksIDEpXQogICAgICAgIGF0dGFjayA9IEdlbmVyYWxIb3RGbGlwQXR0YWNrKHBlcnR1cmIpCiAgICAgICAgc2VuID0gImkgc2VlIHRoYXQgYSBjYXQgc2l0cyBvbiB0aGUgZmxvb3IgLiIuc3BsaXQoKQogICAgICAgIHN1Yl9wb3MgPSBwZXJ0dXJiWzBdWzBdLmdldF9wb3Moc2VuKQogICAgICAgIGRlbF9wb3MgPSBwZXJ0dXJiWzFdWzBdLmdldF9wb3Moc2VuKQogICAgICAgIGluc19wb3MgPSBwZXJ0dXJiWzJdWzBdLmdldF9wb3Moc2VuKQogICAgICAgIGNudCA9IDAKICAgICAgICBmb3Igc3ViX2NudCBpbiByYW5nZShwZXJ0dXJiWzBdWzFdICsgMSk6CiAgICAgICAgICAgIGZvciBkZWxfY250IGluIHJhbmdlKHBlcnR1cmJbMV1bMV0gKyAxKToKICAgICAgICAgICAgICAgIGZvciBpbnNfY250IGluIHJhbmdlKHBlcnR1cmJbMl1bMV0gKyAxKToKICAgICAgICAgICAgICAgICAgICBmb3IgYSBpbiBpdGVydG9vbHMucGVybXV0YXRpb25zKHN1Yl9wb3MsIHN1Yl9jbnQpOgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgYiBpbiBpdGVydG9vbHMucGVybXV0YXRpb25zKGRlbF9wb3MsIGRlbF9jbnQpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gaXRlcnRvb2xzLnBlcm11dGF0aW9ucyhpbnNfcG9zLCBpbnNfY250KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc2V0KGEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHNldChiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBzZXQoYykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhLmlzZGlzam9pbnQoYikgYW5kIGEuaXNkaXNqb2ludChjKSBhbmQgYi5pc2Rpc2pvaW50KGMpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbnQgKz0gMQoKICAgICAgICBhbnMgPSBhdHRhY2suZ2VuX2Fkdihtb2RlbCwgc2VuLCAwLCAxMDAwMCwgbW9kZWwuZ2V0X2VtYmVkLCBUcnVlKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY250LCBsZW4oYW5zKSkKICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oYW5zKSk6CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnNbaV1bMV0gPD0gYW5zW2kgLSAxXVsxXSkKCiAgICBkZWYgdGVzdF9tdWx0aV9jaG9pY2Uoc2VsZik6CiAgICAgICAgbW9kZWwgPSBUZXN0TW9kZWwoMTAwKQogICAgICAgIHBlcnR1cmIgPSBbKFN1YigiZGF0YS9wZGRiIiwgRmFsc2UpLCAzKV0KICAgICAgICBhdHRhY2sgPSBHZW5lcmFsSG90RmxpcEF0dGFjayhwZXJ0dXJiKQogICAgICAgIHNlbiA9ICJpIHNlZSB0aGF0IGEgY2F0IHNpdHMgb24gdGhlIGZsb29yIC4iLnNwbGl0KCkKICAgICAgICBzdWJfcG9zID0gcGVydHVyYlswXVswXS5nZXRfcG9zKHNlbikKICAgICAgICBmb3IgaSwgKHN0YXJ0X3BvcywgZW5kX3BvcykgaW4gZW51bWVyYXRlKHN1Yl9wb3MpOgogICAgICAgICAgICBjbnQgPSAwCiAgICAgICAgICAgIGZvciBfIGluIHBlcnR1cmJbMF1bMF0udHJhbnNmb3JtZXIoc2VuLCBzdGFydF9wb3MsIGVuZF9wb3MpOgogICAgICAgICAgICAgICAgY250ICs9IDEKICAgICAgICAgICAgc3ViX3Bvc1tpXSA9IGNudAoKICAgICAgICBjbnQgPSAwCiAgICAgICAgZm9yIHN1Yl9jbnQgaW4gcmFuZ2UocGVydHVyYlswXVsxXSArIDEpOgogICAgICAgICAgICBmb3IgYSBpbiBpdGVydG9vbHMucGVybXV0YXRpb25zKHN1Yl9wb3MsIHN1Yl9jbnQpOgogICAgICAgICAgICAgICAgY250ICs9IG5wLnByb2QobGlzdChhKSkKCiAgICAgICAgYW5zID0gYXR0YWNrLmdlbl9hZHYobW9kZWwsIHNlbiwgMCwgMTAwMDAsIG1vZGVsLmdldF9lbWJlZCwgVHJ1ZSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNudCwgbGVuKGFucykpCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKGFucykpOgogICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYW5zW2ldWzFdIDw9IGFuc1tpIC0gMV1bMV0pCgogICAgZGVmIHRlc3Rfc2luZ2xlX3RyYW5zZm9ybWF0aW9uKHNlbGYpOgogICAgICAgIG1vZGVsID0gVGVzdE1vZGVsKDEwMCkKICAgICAgICBwZXJ0dXJiMSA9IFsoU3ViKCJkYXRhL3BkZGIiLCBUcnVlKSwgMildCiAgICAgICAgcGVydHVyYjIgPSBbKERlbCgpLCAyKV0KICAgICAgICBwZXJ0dXJiMyA9IFsoSW5zKCksIDIpXQogICAgICAgIGF0dGFjazEgPSBHZW5lcmFsSG90RmxpcEF0dGFjayhwZXJ0dXJiMSkKICAgICAgICBhdHRhY2syID0gR2VuZXJhbEhvdEZsaXBBdHRhY2socGVydHVyYjIpCiAgICAgICAgYXR0YWNrMyA9IEdlbmVyYWxIb3RGbGlwQXR0YWNrKHBlcnR1cmIzKQogICAgICAgIHNlbiA9ICJpIHNlZSB0aGF0IGEgY2F0IHNpdHMgb24gdGhlIGZsb29yIC4iLnNwbGl0KCkKICAgICAgICBzdWJfcG9zID0gcGVydHVyYjFbMF1bMF0uZ2V0X3BvcyhzZW4pCiAgICAgICAgZXhwX2FuczEgPSBbXQogICAgICAgIGZvciBzdWJfY250IGluIHJhbmdlKHBlcnR1cmIxWzBdWzFdICsgMSk6CiAgICAgICAgICAgIGZvciBhIGluIGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMoc3ViX3Bvcywgc3ViX2NudCk6CiAgICAgICAgICAgICAgICBuZXdfeCA9IHNlbgogICAgICAgICAgICAgICAgZm9yIChzdGFydF9wb3MsIGVuZF9wb3MpIGluIGE6CiAgICAgICAgICAgICAgICAgICAgbmV3X3ggPSBuZXh0KHBlcnR1cmIxWzBdWzBdLnRyYW5zZm9ybWVyKG5ld194LCBzdGFydF9wb3MsIGVuZF9wb3MpKQogICAgICAgICAgICAgICAgZXhwX2FuczEuYXBwZW5kKG5ld194KQoKICAgICAgICBkZWxfcG9zID0gcGVydHVyYjJbMF1bMF0uZ2V0X3BvcyhzZW4pCiAgICAgICAgZXhwX2FuczIgPSBbXQogICAgICAgIGZvciBkZWxfY250IGluIHJhbmdlKHBlcnR1cmIyWzBdWzFdICsgMSk6CiAgICAgICAgICAgIGZvciBhIGluIGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMoZGVsX3BvcywgZGVsX2NudCk6CiAgICAgICAgICAgICAgICBuZXdfeCA9IFtdCiAgICAgICAgICAgICAgICBmb3IgKGksIHcpIGluIGVudW1lcmF0ZShzZW4pOgogICAgICAgICAgICAgICAgICAgIGlmIChpLCBpICsgMSkgbm90IGluIGE6CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld194LmFwcGVuZCh3KQoKICAgICAgICAgICAgICAgIGV4cF9hbnMyLmFwcGVuZChuZXdfeCkKCiAgICAgICAgaW5zX3BvcyA9IHBlcnR1cmIzWzBdWzBdLmdldF9wb3Moc2VuKQogICAgICAgIGV4cF9hbnMzID0gW10KICAgICAgICBmb3IgaW5zX2NudCBpbiByYW5nZShwZXJ0dXJiM1swXVsxXSArIDEpOgogICAgICAgICAgICBmb3IgYSBpbiBpdGVydG9vbHMucGVybXV0YXRpb25zKGluc19wb3MsIGluc19jbnQpOgogICAgICAgICAgICAgICAgbmV3X3ggPSBbXQogICAgICAgICAgICAgICAgZm9yIChpLCB3KSBpbiBlbnVtZXJhdGUoc2VuKToKICAgICAgICAgICAgICAgICAgICBpZiAoaSwgaSArIDEpIG5vdCBpbiBhOgogICAgICAgICAgICAgICAgICAgICAgICBuZXdfeC5hcHBlbmQodykKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBuZXdfeC5hcHBlbmQodykKICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3guYXBwZW5kKHcpCgogICAgICAgICAgICAgICAgZXhwX2FuczMuYXBwZW5kKG5ld194KQoKICAgICAgICBhbnMxID0gYXR0YWNrMS5nZW5fYWR2KG1vZGVsLCBzZW4sIDAsIDEwMDAwLCBtb2RlbC5nZXRfZW1iZWQpCiAgICAgICAgYW5zMiA9IGF0dGFjazIuZ2VuX2Fkdihtb2RlbCwgc2VuLCAwLCAxMDAwMCwgbW9kZWwuZ2V0X2VtYmVkKQogICAgICAgIGFuczMgPSBhdHRhY2szLmdlbl9hZHYobW9kZWwsIHNlbiwgMCwgMTAwMDAsIG1vZGVsLmdldF9lbWJlZCkKCiAgICAgICAgZGVmIGxpc3QybWFwKGwpOgogICAgICAgICAgICByZXQgPSB7fQogICAgICAgICAgICBmb3IgeCBpbiBsOgogICAgICAgICAgICAgICAgeCA9IHR1cGxlKHgpCiAgICAgICAgICAgICAgICByZXRbeF0gPSByZXQuc2V0ZGVmYXVsdCh4LCAwKSArIDEKICAgICAgICAgICAgcmV0dXJuIHJldAoKICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbChsaXN0Mm1hcChleHBfYW5zMSksIGxpc3QybWFwKGFuczEpKQogICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKGxpc3QybWFwKGV4cF9hbnMyKSwgbGlzdDJtYXAoYW5zMikpCiAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwobGlzdDJtYXAoZXhwX2FuczMpLCBsaXN0Mm1hcChhbnMzKSkKCiAgICBkZWYgdGVzdF9tYXBfb3JpMngoc2VsZik6CiAgICAgICAgbW9kZWwgPSBUZXN0TW9kZWwoMTAwKQogICAgICAgIHBlcnR1cmIgPSBbKFN1YigiZGF0YS9wZGRiIiwgVHJ1ZSksIDMpLCAoRGVsKHsiZmxvb3IifSksIDIpLCAoSW5zKCksIDEpXQogICAgICAgIHNlbiA9ICJpIHNlZSB0aGF0IGEgY2F0IHNpdHMgb24gdGhlIGZsb29yIC4iLnNwbGl0KCkKICAgICAgICBzdWJfcG9zID0gcGVydHVyYlswXVswXS5nZXRfcG9zKHNlbikKICAgICAgICBkZWxfcG9zID0gcGVydHVyYlsxXVswXS5nZXRfcG9zKHNlbikKICAgICAgICBpbnNfcG9zID0gcGVydHVyYlsyXVswXS5nZXRfcG9zKHNlbikKICAgICAgICBjYW5kaWRhdGUgPSBDYW5kaWRhdGUoWyJkdW1teSJdLCAwLCBbTm9uZV0gKiBsZW4oc2VuKSkKICAgICAgICBjYW5kaWRhdGVzID0gQmVhbSgxKQogICAgICAgIGNhbmRpZGF0ZS50cnlfYWxsX3BvcyhpbnNfcG9zLCBwZXJ0dXJiWzJdWzBdLCBtb2RlbC5nZXRfZ3JhZChjYW5kaWRhdGUueCwgMCksIG1vZGVsLmdldF9lbWJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbihjYW5kaWRhdGVzLnF1ZXVlKSkKICAgICAgICBtYXBfb3JpMnggPSBbTm9uZV0gKiBsZW4oc2VuKQogICAgICAgIG1hcF9vcmkyeFtzZW4uaW5kZXgoImZsb29yIildID0gMQogICAgICAgIGNhbmRpZGF0ZSA9IENhbmRpZGF0ZShbImR1bW15MSIsICJmbG9vciIsICJkdW1teTIiXSwgMCwgbWFwX29yaTJ4KSAgIyBhbGwgcGVydHVyYmF0aW9uIGNhbiBiZSBhcHBsaWVkCiAgICAgICAgY2FuZGlkYXRlcyA9IEJlYW0oMSkKICAgICAgICBjYW5kaWRhdGUudHJ5X2FsbF9wb3Moc3ViX3BvcywgcGVydHVyYlswXVswXSwgbW9kZWwuZ2V0X2dyYWQoY2FuZGlkYXRlLngsIDApLCBtb2RlbC5nZXRfZW1iZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMpCiAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKFsiZHVtbXkxIiwgImZsb29yaW5nIiwgImR1bW15MiJdLCBjYW5kaWRhdGVzLmNoZWNrX2JhbGFuY2UoKVswXVswXS54KQoKICAgICAgICBjYW5kaWRhdGVzID0gQmVhbSgxKQogICAgICAgIGNhbmRpZGF0ZS50cnlfYWxsX3BvcyhkZWxfcG9zLCBwZXJ0dXJiWzFdWzBdLCBtb2RlbC5nZXRfZ3JhZChjYW5kaWRhdGUueCwgMCksIG1vZGVsLmdldF9lbWJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcykKICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwoWyJkdW1teTEiLCAiZHVtbXkyIl0sIGNhbmRpZGF0ZXMuY2hlY2tfYmFsYW5jZSgpWzBdWzBdLngpCgogICAgICAgIGNhbmRpZGF0ZXMgPSBCZWFtKDEpCiAgICAgICAgY2FuZGlkYXRlLnRyeV9hbGxfcG9zKGluc19wb3MsIHBlcnR1cmJbMl1bMF0sIG1vZGVsLmdldF9ncmFkKGNhbmRpZGF0ZS54LCAwKSwgbW9kZWwuZ2V0X2VtYmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzKQogICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChbImR1bW15MSIsICJmbG9vciIsICJmbG9vciIsICJkdW1teTIiXSwgY2FuZGlkYXRlcy5jaGVja19iYWxhbmNlKClbMF1bMF0ueCkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdW5pdHRlc3QubWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5lbWJlZCA9IHt9CiAgICAgICAgc2VsZi5kaW0gPSBkaW0KCgo8fGZpbV9lbmR8Pg=="]
["e7095f70bf9b5c1eddc19b253b3b81fc1628a3a5-3","e7095f70bf9b5c1eddc19b253b3b81fc1628a3a5","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB1bml0dGVzdAppbXBvcnQgcmFuZG9tCmltcG9ydCBpdGVydG9vbHMKaW1wb3J0IGNvcHkKCmZyb20gRFNMLmdlbmVyYWxfSG90RmxpcCBpbXBvcnQgR2VuZXJhbEhvdEZsaXBBdHRhY2ssIENhbmRpZGF0ZQpmcm9tIERTTC50cmFuc2Zvcm1hdGlvbiBpbXBvcnQgU3ViLCBJbnMsIERlbApmcm9tIHV0aWxzIGltcG9ydCBCZWFtCgoKY2xhc3MgVGVzdE1vZGVsMToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaW0pOgogICAgICAgIHNlbGYuZW1iZWQgPSB7fQogICAgICAgIHNlbGYuZGltID0gZGltCgoKY2xhc3MgVGVzdE1vZGVsOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpbSk6CiAgICAgICAgc2VsZi5lbWJlZCA9IHt9CiAgICAgICAgc2VsZi5kaW0gPSBkaW0KCiAgICBkZWYgZ2V0X2dyYWQoc2VsZiwgeCwgeSk6CiAgICAgICAgc2VsZi5zY2FuKHgpCiAgICAgICAgcmV0dXJuIG5wLmFycmF5KFtzZWxmLmVtYmVkW3ddIGZvciB3IGluIHhdKQoKICAgIGRlZiBnZXRfZW1iZWQoc2VsZiwgeCwgcmV0X2xlbj1Ob25lKToKICAgICAgICBzZWxmLnNjYW4oeCkKICAgICAgICBpZiByZXRfbGVuIGlzIE5vbmU6CiAgICAgICAgICAgIHJldF9sZW4gPSBsZW4oeCkKICAgICAgICByZXQgPSBucC56ZXJvcygocmV0X2xlbiwgc2VsZi5kaW0pKQogICAgICAgIGZvciAoaSwgdykgaW4gZW51bWVyYXRlKHgpOgogICAgICAgICAgICByZXRbaV0gPSBzZWxmLmVtYmVkW3ddCiAgICAgICAgcmV0dXJuIHJldAoKICAgIGRlZiBzY2FuKHNlbGYsIHgpOgogICAgICAgIGZvciB3IGluIHg6CiAgICAgICAgICAgIGlmIHcgbm90IGluIHNlbGYuZW1iZWQ6CiAgICAgICAgICAgICAgICBzZWxmLmVtYmVkW3ddID0gbnAucmFuZG9tLnJhbmRvbShzZWxmLmRpbSkKCgpjbGFzcyBUZXN0R2VuZXJhbEhvdEZsaXBBdHRhY2sodW5pdHRlc3QuVGVzdENhc2UpOgogICAgZGVmIHRlc3RfYXJndW1lbnRzKHNlbGYpOgogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICBHZW5lcmFsSG90RmxpcEF0dGFjayhbKDEsIDMsIDQpXSkKICAgICAgICBhdHRhY2sgPSBHZW5lcmFsSG90RmxpcEF0dGFjayhbKFN1YigiZGF0YS9wZGRiIiwgVHJ1ZSksIDEpLCAoRGVsKCksIDIpLCAoSW5zKCksIDMpXSkKICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgICAgYXR0YWNrLmdlbl9hZHYoVGVzdE1vZGVsMSgxMDApLCBbXSwgMSwgNSwgTm9uZSkKCiAgICBkZWYgdGVzdF9iZWFtKHNlbGYpOgogICAgICAgIGJlYW1zID0gW0JlYW0oNCksIEJlYW0oMyksIEJlYW0oMildCiAgICAgICAgdGVzdF9zZXRzID0gW1soImFhYSIsIDEpLCAoImJiYiIsIDApLCAoImNjYyIsIC0zKV0sIFsoImFhYSIsIDEpLCAoImJiYiIsIC0zKSwgKCJjY2MiLCAwKV0sCiAgICAgICAgICAgICAgICAgICAgIFsoImFhYSIsIDEpLCAoImJiYiIsIC0zKSwgKCJjY2MiLCAwKSwgKCJkZGQiLCAyKV1dCiAgICAgICAgZm9yIChjYW5kaWRhdGVzLCB0ZXN0cykgaW4gemlwKGJlYW1zLCB0ZXN0X3NldHMpOgogICAgICAgICAgICByYW5kb20uc2h1ZmZsZSh0ZXN0cykKICAgICAgICAgICAgZm9yIGEgaW4gdGVzdHM6CiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFkZCgqYSkKICAgICAgICAgICAgdGVzdHMuc29ydChrZXk9bGFtYmRhIHg6IC14WzFdKQogICAgICAgICAgICB0ZXN0cyA9IHRlc3RzWzpjYW5kaWRhdGVzLmJ1ZGdldF0KICAgICAgICAgICAgYW5zID0gY2FuZGlkYXRlcy5jaGVja19iYWxhbmNlKCkKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGVzdHMpLCBsZW4oYW5zKSkKICAgICAgICAgICAgZm9yIChhLCBiKSBpbiB6aXAodGVzdHMsIGFucyk6CiAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwoYSwgYikKCiAgICBkZWYgdGVzdF9wZXJ0dXJiYXRpb24oc2VsZik6CiAgICAgICAgbW9kZWwgPSBUZXN0TW9kZWwoMTAwKQogICAgICAgIHBlcnR1cmIgPSBbKFN1YigiZGF0YS9wZGRiIiwgVHJ1ZSksIDMpLCAoRGVsKCksIDIpLCAoSW5zKCksIDEpXQogICAgICAgIGF0dGFjayA9IEdlbmVyYWxIb3RGbGlwQXR0YWNrKHBlcnR1cmIpCiAgICAgICAgc2VuID0gImkgc2VlIHRoYXQgYSBjYXQgc2l0cyBvbiB0aGUgZmxvb3IgLiIuc3BsaXQoKQogICAgICAgIHN1Yl9wb3MgPSBwZXJ0dXJiWzBdWzBdLmdldF9wb3Moc2VuKQogICAgICAgIGRlbF9wb3MgPSBwZXJ0dXJiWzFdWzBdLmdldF9wb3Moc2VuKQogICAgICAgIGluc19wb3MgPSBwZXJ0dXJiWzJdWzBdLmdldF9wb3Moc2VuKQogICAgICAgIGNudCA9IDAKICAgICAgICBmb3Igc3ViX2NudCBpbiByYW5nZShwZXJ0dXJiWzBdWzFdICsgMSk6CiAgICAgICAgICAgIGZvciBkZWxfY250IGluIHJhbmdlKHBlcnR1cmJbMV1bMV0gKyAxKToKICAgICAgICAgICAgICAgIGZvciBpbnNfY250IGluIHJhbmdlKHBlcnR1cmJbMl1bMV0gKyAxKToKICAgICAgICAgICAgICAgICAgICBmb3IgYSBpbiBpdGVydG9vbHMucGVybXV0YXRpb25zKHN1Yl9wb3MsIHN1Yl9jbnQpOgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgYiBpbiBpdGVydG9vbHMucGVybXV0YXRpb25zKGRlbF9wb3MsIGRlbF9jbnQpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gaXRlcnRvb2xzLnBlcm11dGF0aW9ucyhpbnNfcG9zLCBpbnNfY250KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc2V0KGEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHNldChiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBzZXQoYykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhLmlzZGlzam9pbnQoYikgYW5kIGEuaXNkaXNqb2ludChjKSBhbmQgYi5pc2Rpc2pvaW50KGMpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbnQgKz0gMQoKICAgICAgICBhbnMgPSBhdHRhY2suZ2VuX2Fkdihtb2RlbCwgc2VuLCAwLCAxMDAwMCwgbW9kZWwuZ2V0X2VtYmVkLCBUcnVlKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY250LCBsZW4oYW5zKSkKICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oYW5zKSk6CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnNbaV1bMV0gPD0gYW5zW2kgLSAxXVsxXSkKCiAgICBkZWYgdGVzdF9tdWx0aV9jaG9pY2Uoc2VsZik6CiAgICAgICAgbW9kZWwgPSBUZXN0TW9kZWwoMTAwKQogICAgICAgIHBlcnR1cmIgPSBbKFN1YigiZGF0YS9wZGRiIiwgRmFsc2UpLCAzKV0KICAgICAgICBhdHRhY2sgPSBHZW5lcmFsSG90RmxpcEF0dGFjayhwZXJ0dXJiKQogICAgICAgIHNlbiA9ICJpIHNlZSB0aGF0IGEgY2F0IHNpdHMgb24gdGhlIGZsb29yIC4iLnNwbGl0KCkKICAgICAgICBzdWJfcG9zID0gcGVydHVyYlswXVswXS5nZXRfcG9zKHNlbikKICAgICAgICBmb3IgaSwgKHN0YXJ0X3BvcywgZW5kX3BvcykgaW4gZW51bWVyYXRlKHN1Yl9wb3MpOgogICAgICAgICAgICBjbnQgPSAwCiAgICAgICAgICAgIGZvciBfIGluIHBlcnR1cmJbMF1bMF0udHJhbnNmb3JtZXIoc2VuLCBzdGFydF9wb3MsIGVuZF9wb3MpOgogICAgICAgICAgICAgICAgY250ICs9IDEKICAgICAgICAgICAgc3ViX3Bvc1tpXSA9IGNudAoKICAgICAgICBjbnQgPSAwCiAgICAgICAgZm9yIHN1Yl9jbnQgaW4gcmFuZ2UocGVydHVyYlswXVsxXSArIDEpOgogICAgICAgICAgICBmb3IgYSBpbiBpdGVydG9vbHMucGVybXV0YXRpb25zKHN1Yl9wb3MsIHN1Yl9jbnQpOgogICAgICAgICAgICAgICAgY250ICs9IG5wLnByb2QobGlzdChhKSkKCiAgICAgICAgYW5zID0gYXR0YWNrLmdlbl9hZHYobW9kZWwsIHNlbiwgMCwgMTAwMDAsIG1vZGVsLmdldF9lbWJlZCwgVHJ1ZSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNudCwgbGVuKGFucykpCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKGFucykpOgogICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYW5zW2ldWzFdIDw9IGFuc1tpIC0gMV1bMV0pCgogICAgZGVmIHRlc3Rfc2luZ2xlX3RyYW5zZm9ybWF0aW9uKHNlbGYpOgogICAgICAgIG1vZGVsID0gVGVzdE1vZGVsKDEwMCkKICAgICAgICBwZXJ0dXJiMSA9IFsoU3ViKCJkYXRhL3BkZGIiLCBUcnVlKSwgMildCiAgICAgICAgcGVydHVyYjIgPSBbKERlbCgpLCAyKV0KICAgICAgICBwZXJ0dXJiMyA9IFsoSW5zKCksIDIpXQogICAgICAgIGF0dGFjazEgPSBHZW5lcmFsSG90RmxpcEF0dGFjayhwZXJ0dXJiMSkKICAgICAgICBhdHRhY2syID0gR2VuZXJhbEhvdEZsaXBBdHRhY2socGVydHVyYjIpCiAgICAgICAgYXR0YWNrMyA9IEdlbmVyYWxIb3RGbGlwQXR0YWNrKHBlcnR1cmIzKQogICAgICAgIHNlbiA9ICJpIHNlZSB0aGF0IGEgY2F0IHNpdHMgb24gdGhlIGZsb29yIC4iLnNwbGl0KCkKICAgICAgICBzdWJfcG9zID0gcGVydHVyYjFbMF1bMF0uZ2V0X3BvcyhzZW4pCiAgICAgICAgZXhwX2FuczEgPSBbXQogICAgICAgIGZvciBzdWJfY250IGluIHJhbmdlKHBlcnR1cmIxWzBdWzFdICsgMSk6CiAgICAgICAgICAgIGZvciBhIGluIGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMoc3ViX3Bvcywgc3ViX2NudCk6CiAgICAgICAgICAgICAgICBuZXdfeCA9IHNlbgogICAgICAgICAgICAgICAgZm9yIChzdGFydF9wb3MsIGVuZF9wb3MpIGluIGE6CiAgICAgICAgICAgICAgICAgICAgbmV3X3ggPSBuZXh0KHBlcnR1cmIxWzBdWzBdLnRyYW5zZm9ybWVyKG5ld194LCBzdGFydF9wb3MsIGVuZF9wb3MpKQogICAgICAgICAgICAgICAgZXhwX2FuczEuYXBwZW5kKG5ld194KQoKICAgICAgICBkZWxfcG9zID0gcGVydHVyYjJbMF1bMF0uZ2V0X3BvcyhzZW4pCiAgICAgICAgZXhwX2FuczIgPSBbXQogICAgICAgIGZvciBkZWxfY250IGluIHJhbmdlKHBlcnR1cmIyWzBdWzFdICsgMSk6CiAgICAgICAgICAgIGZvciBhIGluIGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMoZGVsX3BvcywgZGVsX2NudCk6CiAgICAgICAgICAgICAgICBuZXdfeCA9IFtdCiAgICAgICAgICAgICAgICBmb3IgKGksIHcpIGluIGVudW1lcmF0ZShzZW4pOgogICAgICAgICAgICAgICAgICAgIGlmIChpLCBpICsgMSkgbm90IGluIGE6CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld194LmFwcGVuZCh3KQoKICAgICAgICAgICAgICAgIGV4cF9hbnMyLmFwcGVuZChuZXdfeCkKCiAgICAgICAgaW5zX3BvcyA9IHBlcnR1cmIzWzBdWzBdLmdldF9wb3Moc2VuKQogICAgICAgIGV4cF9hbnMzID0gW10KICAgICAgICBmb3IgaW5zX2NudCBpbiByYW5nZShwZXJ0dXJiM1swXVsxXSArIDEpOgogICAgICAgICAgICBmb3IgYSBpbiBpdGVydG9vbHMucGVybXV0YXRpb25zKGluc19wb3MsIGluc19jbnQpOgogICAgICAgICAgICAgICAgbmV3X3ggPSBbXQogICAgICAgICAgICAgICAgZm9yIChpLCB3KSBpbiBlbnVtZXJhdGUoc2VuKToKICAgICAgICAgICAgICAgICAgICBpZiAoaSwgaSArIDEpIG5vdCBpbiBhOgogICAgICAgICAgICAgICAgICAgICAgICBuZXdfeC5hcHBlbmQodykKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBuZXdfeC5hcHBlbmQodykKICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3guYXBwZW5kKHcpCgogICAgICAgICAgICAgICAgZXhwX2FuczMuYXBwZW5kKG5ld194KQoKICAgICAgICBhbnMxID0gYXR0YWNrMS5nZW5fYWR2KG1vZGVsLCBzZW4sIDAsIDEwMDAwLCBtb2RlbC5nZXRfZW1iZWQpCiAgICAgICAgYW5zMiA9IGF0dGFjazIuZ2VuX2Fkdihtb2RlbCwgc2VuLCAwLCAxMDAwMCwgbW9kZWwuZ2V0X2VtYmVkKQogICAgICAgIGFuczMgPSBhdHRhY2szLmdlbl9hZHYobW9kZWwsIHNlbiwgMCwgMTAwMDAsIG1vZGVsLmdldF9lbWJlZCkKCiAgICAgICAgZGVmIGxpc3QybWFwKGwpOgogICAgICAgICAgICByZXQgPSB7fQogICAgICAgICAgICBmb3IgeCBpbiBsOgogICAgICAgICAgICAgICAgeCA9IHR1cGxlKHgpCiAgICAgICAgICAgICAgICByZXRbeF0gPSByZXQuc2V0ZGVmYXVsdCh4LCAwKSArIDEKICAgICAgICAgICAgcmV0dXJuIHJldAoKICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbChsaXN0Mm1hcChleHBfYW5zMSksIGxpc3QybWFwKGFuczEpKQogICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKGxpc3QybWFwKGV4cF9hbnMyKSwgbGlzdDJtYXAoYW5zMikpCiAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwobGlzdDJtYXAoZXhwX2FuczMpLCBsaXN0Mm1hcChhbnMzKSkKCiAgICBkZWYgdGVzdF9tYXBfb3JpMngoc2VsZik6CiAgICAgICAgbW9kZWwgPSBUZXN0TW9kZWwoMTAwKQogICAgICAgIHBlcnR1cmIgPSBbKFN1YigiZGF0YS9wZGRiIiwgVHJ1ZSksIDMpLCAoRGVsKHsiZmxvb3IifSksIDIpLCAoSW5zKCksIDEpXQogICAgICAgIHNlbiA9ICJpIHNlZSB0aGF0IGEgY2F0IHNpdHMgb24gdGhlIGZsb29yIC4iLnNwbGl0KCkKICAgICAgICBzdWJfcG9zID0gcGVydHVyYlswXVswXS5nZXRfcG9zKHNlbikKICAgICAgICBkZWxfcG9zID0gcGVydHVyYlsxXVswXS5nZXRfcG9zKHNlbikKICAgICAgICBpbnNfcG9zID0gcGVydHVyYlsyXVswXS5nZXRfcG9zKHNlbikKICAgICAgICBjYW5kaWRhdGUgPSBDYW5kaWRhdGUoWyJkdW1teSJdLCAwLCBbTm9uZV0gKiBsZW4oc2VuKSkKICAgICAgICBjYW5kaWRhdGVzID0gQmVhbSgxKQogICAgICAgIGNhbmRpZGF0ZS50cnlfYWxsX3BvcyhpbnNfcG9zLCBwZXJ0dXJiWzJdWzBdLCBtb2RlbC5nZXRfZ3JhZChjYW5kaWRhdGUueCwgMCksIG1vZGVsLmdldF9lbWJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbihjYW5kaWRhdGVzLnF1ZXVlKSkKICAgICAgICBtYXBfb3JpMnggPSBbTm9uZV0gKiBsZW4oc2VuKQogICAgICAgIG1hcF9vcmkyeFtzZW4uaW5kZXgoImZsb29yIildID0gMQogICAgICAgIGNhbmRpZGF0ZSA9IENhbmRpZGF0ZShbImR1bW15MSIsICJmbG9vciIsICJkdW1teTIiXSwgMCwgbWFwX29yaTJ4KSAgIyBhbGwgcGVydHVyYmF0aW9uIGNhbiBiZSBhcHBsaWVkCiAgICAgICAgY2FuZGlkYXRlcyA9IEJlYW0oMSkKICAgICAgICBjYW5kaWRhdGUudHJ5X2FsbF9wb3Moc3ViX3BvcywgcGVydHVyYlswXVswXSwgbW9kZWwuZ2V0X2dyYWQoY2FuZGlkYXRlLngsIDApLCBtb2RlbC5nZXRfZW1iZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMpCiAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKFsiZHVtbXkxIiwgImZsb29yaW5nIiwgImR1bW15MiJdLCBjYW5kaWRhdGVzLmNoZWNrX2JhbGFuY2UoKVswXVswXS54KQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGNhbmRpZGF0ZXMgPSBCZWFtKDEpCiAgICAgICAgY2FuZGlkYXRlLnRyeV9hbGxfcG9zKGRlbF9wb3MsIHBlcnR1cmJbMV1bMF0sIG1vZGVsLmdldF9ncmFkKGNhbmRpZGF0ZS54LCAwKSwgbW9kZWwuZ2V0X2VtYmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzKQogICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChbImR1bW15MSIsICJkdW1teTIiXSwgY2FuZGlkYXRlcy5jaGVja19iYWxhbmNlKClbMF1bMF0ueCkKPHxmaW1fZW5kfD4="]
["15a25db8351191b51893adabdef848c5fd1d6fc5-1","15a25db8351191b51893adabdef848c5fd1d6fc5","PHxmaW1fcHJlZml4fD4KZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQb3BlbiwgREVWTlVMTCwgVGltZW91dEV4cGlyZWQKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBqc29uCmltcG9ydCBvcwpmcm9tIG9zLnBhdGggaW1wb3J0IGpvaW4sIGV4aXN0cwppbXBvcnQgc3VicHJvY2VzcwppbXBvcnQgc2h1dGlsCmltcG9ydCBwYXRobGliCmltcG9ydCB0ZW1wZmlsZQoKcm9vdF9kaXIgPSBvcy5nZXRjd2QoKQoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImFkZF90YXJnZXQiKQpwcm9nX2NvbmZpZyA9IGRpY3QoKQoKCmNsYXNzIEN1c3RvbUV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZyk6CiAgICAgICAgc2VsZi5tc2cgPSBtc2cKCiAgICBkZWYgZ2V0X21zZyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5tc2cKCgpjbGFzcyBBZGRUYXJnZXQ6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2plY3QsIGJ1Z19pZCwgc3JjX3BhdGNoX2lkLCBwYXRjaF9maWxlKToKICAgICAgICBzZWxmLnByb2plY3QgPSBwcm9qZWN0CiAgICAgICAgc2VsZi5idWdfaWQgPSBidWdfaWQKICAgICAgICBzZWxmLnNyY19wYXRjaF9pZCA9IHNyY19wYXRjaF9pZAogICAgICAgIHNlbGYucGF0Y2hfZmlsZSA9IHBhdGNoX2ZpbGUKCiAgICBkZWYgX19jYWxsX18oc2VsZik6CiAgICAgICAgaWYgbm90IGV4aXN0cyhzZWxmLnBhdGNoX2ZpbGUpOgogICAgICAgICAgICByYWlzZSBDdXN0b21FeGNlcHRpb24oJ1BhdGNoIGZpbGUgZG9lcyBub3QgZXhpc3RzOiB7fScuZm9ybWF0KHNlbGYucGF0Y2hfZmlsZSkpCgogICAgICAgIHRhcmdldF9maWxlID0gc2VsZi5nZXRfdGFyZ2V0X2ZpbGUoKQogICAgICAgIGxvZ2dlci5pbmZvKCd0YXJnZXQgZmlsZToge30nLmZvcm1hdCh0YXJnZXRfZmlsZSkpCiAgICAgICAgCiAgICBkZWYgZ2V0X3RhcmdldF9maWxlKHNlbGYpOgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgIHJhaXNlIEN1c3RvbUV4Y2VwdGlvbignVW5zdXBwb3J0ZWQgcHJvamVjdDoge30nLmZvcm1hdChzZWxmLnByb2plY3QpKQoKICAgICAgICBjbWQgPSAiYXdrICcvXCtcK1wrLyB7e3ByaW50ICQyfX0nIHt9Ii5mb3JtYXQoc2VsZi5wYXRjaF9maWxlKQogICAgICAgIG91dCA9IHNlbGYuY2hlY2tfb3V0cHV0KGNtZCkuZGVjb2RlKCd1dGYtOCcpCiAgICAgICAgY21wdHMgPSBvdXQuc3BsaXQob3Muc2VwKQogICAgICAgIHN0YXJ0X2lkeCA9IG91dC5zcGxpdChvcy5zZXApLmluZGV4KGdldF9yb290KCkpCiAgICAgICAgcmV0dXJuIG9zLnNlcC5qb2luKGNtcHRzW3N0YXJ0X2lkeDpdKQoKICAgIGRlZiBydW4oc2VsZiwgY21kLCBlbnY9b3MuZW52aXJvbiwgcXVpZXQ9RmFsc2UpOgogICAgICAgIGxvZ2dlci5kZWJ1ZygnY21kOiB7fScuZm9ybWF0KGNtZCkpCiAgICAgICAgaWYgcHJvZ19jb25maWdbJ3F1aWV0J10gb3IgcXVpZXQ6CiAgICAgICAgICAgIHByb2MgPSBQb3BlbihjbWQsIGVudj1lbnYsIHN0ZG91dD1ERVZOVUxMLCBzdGRlcnI9REVWTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPVRydWUpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJvYyA9IFBvcGVuKGNtZCwgZW52PWVudiwgc2hlbGw9VHJ1ZSkKICAgICAgICB0cnk6CiAgICAgICAgICAgIGNvZGUgPSBwcm9jLndhaXQoKQogICAgICAgICAgICByZXR1cm4gY29kZQogICAgICAgIGV4Y2VwdCBUaW1lb3V0RXhwaXJlZDoKICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3RpbWVvdXQgZm9yOiB7fScuZm9ybWF0KGNtZCkpCiAgICAgICAgICAgIHJldHVybiAxCgogICAgZGVmIGNoZWNrX291dHB1dChzZWxmLCBjbWQsIGVudj1vcy5lbnZpcm9uKToKICAgICAgICBsb2dnZXIuZGVidWcoJ2NtZDoge30nLmZvcm1hdChjbWQpKQogICAgICAgIG91dCA9IHN1YnByb2Nlc3MucnVuKGNtZCwgZW52PWVudiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9VHJ1ZSkuc3Rkb3V0CiAgICAgICAgb3V0ID0gb3V0LnN0cmlwKCkKICAgICAgICBsb2dnZXIuZGVidWcoJ291dDoge30nLmZvcm1hdChvdXQpKQogICAgICAgIHJldHVybiBvdXQKCiAgICBkZWYgcHJlcF9kaXIoc2VsZiwgZCk6CiAgICAgICAgaWYgbm90IGV4aXN0cyhkKToKICAgICAgICAgICAgcGF0aGxpYi5QYXRoKGQpLm1rZGlyKHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSkKICAgICAgICByZXR1cm4gZAoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcignYWRkX3RhcmdldCcpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdjb25maWdfZmlsZScsIG1ldGF2YXI9J0NPTkZJR19GSUxFJywgaGVscD0nY29uZmlnIGZpbGUnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgncGF0Y2hfZmlsZScsIG1ldGF2YXI9J1BBVENIX0ZJTEUnLCBoZWxwPSdwYXRjaCBmaWxlJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbG9nJywgbWV0YXZhcj0nTE9HJywgZGVmYXVsdD1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPVsnREVCVUcnLCAnSU5GTycsICdXQVJOSU5HJywgJ0VSUk9SJywgJ0NSSVRJQ0FMJ10sCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3NldCB0aGUgbG9nZ2luZyBsZXZlbCcpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXF1aWV0JywgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncHJpbnQgb25seSBlcnJvcnMgKGRlZmF1bHQ6ICUoZGVmYXVsdClzKScpCgogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCiAgICBwcm9nX2NvbmZpZ1sncXVpZXQnXSA9IGFyZ3MucXVpZXQKCiAgICByb290TG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQogICAgRk9STUFUID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyUobGV2ZWxuYW1lKS04cyAlKG5hbWUpLTE1cyAlKG1lc3NhZ2UpcycpCiAgICBpZiBhcmdzLnF1aWV0OgogICAgICAgIHJvb3RMb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5FUlJPUikKICAgIGVsaWYgYXJncy5sb2cgaXMgbm90IE5vbmU6CiAgICAgICAgbG9nX2xldmVsID0gZ2V0YXR0cihsb2dnaW5nLCBhcmdzLmxvZywgTm9uZSkKICAgICAgICByb290TG9nZ2VyLnNldExldmVsKGxvZ19sZXZlbCkKICAgIGVsc2U6CiAgICAgICAgcm9vdExvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCiAgICBmaWxlSGFuZGxlciA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoInswfS97MX0ubG9nIi5mb3JtYXQob3MuZ2V0Y3dkKCksICdydW5leHAnKSkKICAgIGZpbGVIYW5kbGVyLnNldEZvcm1hdHRlcihGT1JNQVQpCiAgICByb290TG9nZ2VyLmFkZEhhbmRsZXIoZmlsZUhhbmRsZXIpCiAgICBjb25zb2xlSGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCiAgICBjb25zb2xlSGFuZGxlci5zZXRGb3JtYXR0ZXIoRk9STUFUKQogICAgcm9vdExvZ2dlci5hZGRIYW5kbGVyKGNvbnNvbGVIYW5kbGVyKQoKICAgIHdpdGggb3BlbihhcmdzLmNvbmZpZ19maWxlLCAiciIpIGFzIHJlYWRfZmlsZToKICAgICAgICBkYXRhID0ganNvbi5sb2FkKHJlYWRfZmlsZSkKICAgICAgICBwcm9qZWN0ID0gZGF0YVsncHJvamVjdCddCiAgICAgICAgYnVnX2lkID0gZGF0YVsnYnVnX2lkJ10KICAgICAgICBzcmNfcGF0Y2hfaWQgPSBkYXRhWydJRCddCgogICAgICAgIHRyeToKICAgICAgICAgICAgYWRkX3RhcmdldCA9IEFkZFRhcmdldChwcm9qZWN0LCBidWdfaWQsIHNyY19wYXRjaF9pZCwgYXJncy5wYXRjaF9maWxlKQogICAgICAgICAgICBhZGRfdGFyZ2V0KCkKICAgICAgICBleGNlcHQgQ3VzdG9tRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihlLmdldF9tc2coKSkKPHxmaW1fc3VmZml4fD4KICAgICAgICBkZWYgZ2V0X3Jvb3QoKToKICAgICAgICAgICAgaWYgc2VsZi5wcm9qZWN0IGluIFsnQ2hhcnQnXToKICAgICAgICAgICAgICAgIHJldHVybiAnb3JnJwogICAgICAgICAgICBlbHNlOgo8fGZpbV9lbmR8Pg=="]
["15a25db8351191b51893adabdef848c5fd1d6fc5-2","15a25db8351191b51893adabdef848c5fd1d6fc5","PHxmaW1fcHJlZml4fD4KZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQb3BlbiwgREVWTlVMTCwgVGltZW91dEV4cGlyZWQKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBqc29uCmltcG9ydCBvcwpmcm9tIG9zLnBhdGggaW1wb3J0IGpvaW4sIGV4aXN0cwppbXBvcnQgc3VicHJvY2VzcwppbXBvcnQgc2h1dGlsCmltcG9ydCBwYXRobGliCmltcG9ydCB0ZW1wZmlsZQoKcm9vdF9kaXIgPSBvcy5nZXRjd2QoKQoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImFkZF90YXJnZXQiKQpwcm9nX2NvbmZpZyA9IGRpY3QoKQoKCmNsYXNzIEN1c3RvbUV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZyk6CiAgICAgICAgc2VsZi5tc2cgPSBtc2cKCiAgICBkZWYgZ2V0X21zZyhzZWxmKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJldHVybiBzZWxmLm1zZwoKCjx8ZmltX2VuZHw+"]
["15a25db8351191b51893adabdef848c5fd1d6fc5-3","15a25db8351191b51893adabdef848c5fd1d6fc5","PHxmaW1fcHJlZml4fD4KZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQb3BlbiwgREVWTlVMTCwgVGltZW91dEV4cGlyZWQKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBqc29uCmltcG9ydCBvcwpmcm9tIG9zLnBhdGggaW1wb3J0IGpvaW4sIGV4aXN0cwppbXBvcnQgc3VicHJvY2VzcwppbXBvcnQgc2h1dGlsCmltcG9ydCBwYXRobGliCmltcG9ydCB0ZW1wZmlsZQoKcm9vdF9kaXIgPSBvcy5nZXRjd2QoKQoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImFkZF90YXJnZXQiKQpwcm9nX2NvbmZpZyA9IGRpY3QoKQoKCmNsYXNzIEN1c3RvbUV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZyk6CiAgICAgICAgc2VsZi5tc2cgPSBtc2cKCiAgICBkZWYgZ2V0X21zZyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5tc2cKCgpjbGFzcyBBZGRUYXJnZXQ6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2plY3QsIGJ1Z19pZCwgc3JjX3BhdGNoX2lkLCBwYXRjaF9maWxlKToKICAgICAgICBzZWxmLnByb2plY3QgPSBwcm9qZWN0CiAgICAgICAgc2VsZi5idWdfaWQgPSBidWdfaWQKICAgICAgICBzZWxmLnNyY19wYXRjaF9pZCA9IHNyY19wYXRjaF9pZAogICAgICAgIHNlbGYucGF0Y2hfZmlsZSA9IHBhdGNoX2ZpbGUKCiAgICBkZWYgX19jYWxsX18oc2VsZik6CiAgICAgICAgaWYgbm90IGV4aXN0cyhzZWxmLnBhdGNoX2ZpbGUpOgogICAgICAgICAgICByYWlzZSBDdXN0b21FeGNlcHRpb24oJ1BhdGNoIGZpbGUgZG9lcyBub3QgZXhpc3RzOiB7fScuZm9ybWF0KHNlbGYucGF0Y2hfZmlsZSkpCgogICAgICAgIHRhcmdldF9maWxlID0gc2VsZi5nZXRfdGFyZ2V0X2ZpbGUoKQogICAgICAgIGxvZ2dlci5pbmZvKCd0YXJnZXQgZmlsZToge30nLmZvcm1hdCh0YXJnZXRfZmlsZSkpCiAgICAgICAgCiAgICBkZWYgZ2V0X3RhcmdldF9maWxlKHNlbGYpOgogICAgICAgIGRlZiBnZXRfcm9vdCgpOgo8fGZpbV9ob2xlfD4KCiAgICAgICAgY21kID0gImF3ayAnL1wrXCtcKy8ge3twcmludCAkMn19JyB7fSIuZm9ybWF0KHNlbGYucGF0Y2hfZmlsZSkKICAgICAgICBvdXQgPSBzZWxmLmNoZWNrX291dHB1dChjbWQpLmRlY29kZSgndXRmLTgnKQogICAgICAgIGNtcHRzID0gb3V0LnNwbGl0KG9zLnNlcCkKICAgICAgICBzdGFydF9pZHggPSBvdXQuc3BsaXQob3Muc2VwKS5pbmRleChnZXRfcm9vdCgpKQogICAgICAgIHJldHVybiBvcy5zZXAuam9pbihjbXB0c1tzdGFydF9pZHg6XSkKCiAgICBkZWYgcnVuKHNlbGYsIGNtZCwgZW52PW9zLmVudmlyb24sIHF1aWV0PUZhbHNlKToKICAgICAgICBsb2dnZXIuZGVidWcoJ2NtZDoge30nLmZvcm1hdChjbWQpKQogICAgICAgIGlmIHByb2dfY29uZmlnWydxdWlldCddIG9yIHF1aWV0OgogICAgICAgICAgICBwcm9jID0gUG9wZW4oY21kLCBlbnY9ZW52LCBzdGRvdXQ9REVWTlVMTCwgc3RkZXJyPURFVk5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD1UcnVlKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByb2MgPSBQb3BlbihjbWQsIGVudj1lbnYsIHNoZWxsPVRydWUpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBjb2RlID0gcHJvYy53YWl0KCkKICAgICAgICAgICAgcmV0dXJuIGNvZGUKICAgICAgICBleGNlcHQgVGltZW91dEV4cGlyZWQ6CiAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCd0aW1lb3V0IGZvcjoge30nLmZvcm1hdChjbWQpKQogICAgICAgICAgICByZXR1cm4gMQoKICAgIGRlZiBjaGVja19vdXRwdXQoc2VsZiwgY21kLCBlbnY9b3MuZW52aXJvbik6CiAgICAgICAgbG9nZ2VyLmRlYnVnKCdjbWQ6IHt9Jy5mb3JtYXQoY21kKSkKICAgICAgICBvdXQgPSBzdWJwcm9jZXNzLnJ1bihjbWQsIGVudj1lbnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPVRydWUpLnN0ZG91dAogICAgICAgIG91dCA9IG91dC5zdHJpcCgpCiAgICAgICAgbG9nZ2VyLmRlYnVnKCdvdXQ6IHt9Jy5mb3JtYXQob3V0KSkKICAgICAgICByZXR1cm4gb3V0CgogICAgZGVmIHByZXBfZGlyKHNlbGYsIGQpOgogICAgICAgIGlmIG5vdCBleGlzdHMoZCk6CiAgICAgICAgICAgIHBhdGhsaWIuUGF0aChkKS5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpCiAgICAgICAgcmV0dXJuIGQKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoJ2FkZF90YXJnZXQnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnY29uZmlnX2ZpbGUnLCBtZXRhdmFyPSdDT05GSUdfRklMRScsIGhlbHA9J2NvbmZpZyBmaWxlJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3BhdGNoX2ZpbGUnLCBtZXRhdmFyPSdQQVRDSF9GSUxFJywgaGVscD0ncGF0Y2ggZmlsZScpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWxvZycsIG1ldGF2YXI9J0xPRycsIGRlZmF1bHQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz1bJ0RFQlVHJywgJ0lORk8nLCAnV0FSTklORycsICdFUlJPUicsICdDUklUSUNBTCddLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzZXQgdGhlIGxvZ2dpbmcgbGV2ZWwnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1xdWlldCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3ByaW50IG9ubHkgZXJyb3JzIChkZWZhdWx0OiAlKGRlZmF1bHQpcyknKQoKICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCgogICAgcHJvZ19jb25maWdbJ3F1aWV0J10gPSBhcmdzLnF1aWV0CgogICAgcm9vdExvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKICAgIEZPUk1BVCA9IGxvZ2dpbmcuRm9ybWF0dGVyKCclKGxldmVsbmFtZSktOHMgJShuYW1lKS0xNXMgJShtZXNzYWdlKXMnKQogICAgaWYgYXJncy5xdWlldDoKICAgICAgICByb290TG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuRVJST1IpCiAgICBlbGlmIGFyZ3MubG9nIGlzIG5vdCBOb25lOgogICAgICAgIGxvZ19sZXZlbCA9IGdldGF0dHIobG9nZ2luZywgYXJncy5sb2csIE5vbmUpCiAgICAgICAgcm9vdExvZ2dlci5zZXRMZXZlbChsb2dfbGV2ZWwpCiAgICBlbHNlOgogICAgICAgIHJvb3RMb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQogICAgZmlsZUhhbmRsZXIgPSBsb2dnaW5nLkZpbGVIYW5kbGVyKCJ7MH0vezF9LmxvZyIuZm9ybWF0KG9zLmdldGN3ZCgpLCAncnVuZXhwJykpCiAgICBmaWxlSGFuZGxlci5zZXRGb3JtYXR0ZXIoRk9STUFUKQogICAgcm9vdExvZ2dlci5hZGRIYW5kbGVyKGZpbGVIYW5kbGVyKQogICAgY29uc29sZUhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQogICAgY29uc29sZUhhbmRsZXIuc2V0Rm9ybWF0dGVyKEZPUk1BVCkKICAgIHJvb3RMb2dnZXIuYWRkSGFuZGxlcihjb25zb2xlSGFuZGxlcikKCiAgICB3aXRoIG9wZW4oYXJncy5jb25maWdfZmlsZSwgInIiKSBhcyByZWFkX2ZpbGU6CiAgICAgICAgZGF0YSA9IGpzb24ubG9hZChyZWFkX2ZpbGUpCiAgICAgICAgcHJvamVjdCA9IGRhdGFbJ3Byb2plY3QnXQogICAgICAgIGJ1Z19pZCA9IGRhdGFbJ2J1Z19pZCddCiAgICAgICAgc3JjX3BhdGNoX2lkID0gZGF0YVsnSUQnXQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGFkZF90YXJnZXQgPSBBZGRUYXJnZXQocHJvamVjdCwgYnVnX2lkLCBzcmNfcGF0Y2hfaWQsIGFyZ3MucGF0Y2hfZmlsZSkKICAgICAgICAgICAgYWRkX3RhcmdldCgpCiAgICAgICAgZXhjZXB0IEN1c3RvbUV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBsb2dnZXIuZXJyb3IoZS5nZXRfbXNnKCkpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGlmIHNlbGYucHJvamVjdCBpbiBbJ0NoYXJ0J106CiAgICAgICAgICAgICAgICByZXR1cm4gJ29yZycKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJhaXNlIEN1c3RvbUV4Y2VwdGlvbignVW5zdXBwb3J0ZWQgcHJvamVjdDoge30nLmZvcm1hdChzZWxmLnByb2plY3QpKQo8fGZpbV9lbmR8Pg=="]
["978c74c045da331b628246a7f80a79bb664e0d21-1","978c74c045da331b628246a7f80a79bb664e0d21","PHxmaW1fcHJlZml4fD4KZnJvbSBnb29nbGVhcGljbGllbnQuZGlzY292ZXJ5IGltcG9ydCBidWlsZApmcm9tIG9hdXRoMmNsaWVudC5zZXJ2aWNlX2FjY291bnQgaW1wb3J0IFNlcnZpY2VBY2NvdW50Q3JlZGVudGlhbHMKaW1wb3J0IGpzb24KCgpjbGFzcyBHb29nbGVCYXNlOgoKICAgIGNyZWRlbnRpYWxzID0gTm9uZQogICAgY2xpZW50X2VtYWlsID0gTm9uZQo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgc2VsZi5jbGllbnRfZW1haWwgPSBkYXRhWydjbGllbnRfZW1haWwnXQoKICAgIGRlZiBfX2dldF9zaGVldHNfc2VydmljZV9fKHNlbGYpOgogICAgICAgICMgdXNlIGNyZWRzIHRvIGNyZWF0ZSBhIGNsaWVudCB0byBpbnRlcmFjdCB3aXRoIHRoZSBHb29nbGUgRHJpdmUgQVBJCiAgICAgICAgc2NvcGUgPSBbJ2h0dHBzOi8vc3ByZWFkc2hlZXRzLmdvb2dsZS5jb20vZmVlZHMnXQogICAgICAgIGNyZWRzID0gU2VydmljZUFjY291bnRDcmVkZW50aWFscy5mcm9tX2pzb25fa2V5ZmlsZV9uYW1lKHNlbGYuY3JlZGVudGlhbHMsIHNjb3BlKQogICAgICAgIHJldHVybiBidWlsZCgnc2hlZXRzJywgJ3Y0JywgY3JlZGVudGlhbHM9Y3JlZHMpCgogICAgZGVmIF9fZ2V0X2RyaXZlX3NlcnZpY2VfXyhzZWxmKToKICAgICAgICAjIHVzZSBjcmVkcyB0byBjcmVhdGUgYSBjbGllbnQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgR29vZ2xlIERyaXZlIEFQSQogICAgICAgIHNjb3BlID0gWydodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9hdXRoL2RyaXZlLm1ldGFkYXRhLnJlYWRvbmx5JywKICAgICAgICAgICAgICAgICAnaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vYXV0aC9kcml2ZS5maWxlJ10KICAgICAgICBjcmVkcyA9IFNlcnZpY2VBY2NvdW50Q3JlZGVudGlhbHMuZnJvbV9qc29uX2tleWZpbGVfbmFtZShzZWxmLmNyZWRlbnRpYWxzLCBzY29wZSkKICAgICAgICByZXR1cm4gYnVpbGQoJ2RyaXZlJywgJ3YzJywgY3JlZGVudGlhbHM9Y3JlZHMpCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIF9fcmVhZF9jbGllbnRfZW1haWxfXyhzZWxmKToKICAgICAgICB3aXRoIG9wZW4oc2VsZi5jcmVkZW50aWFscywgInIiKSBhcyBmOgogICAgICAgICAgICBkYXRhID0ganNvbi5sb2FkKGYpCjx8ZmltX2VuZHw+"]
["e5c0bf208f6726c5fc8790ec04e72a3afe6614b9-1","e5c0bf208f6726c5fc8790ec04e72a3afe6614b9","PHxmaW1fcHJlZml4fD4KJycnCkEgc2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIGEgY2xpZW50IHRvIGdldCBCYXRjaENvbXB1dGUgU2VydmljZS4KPHxmaW1faG9sZXw+CicnJwoKCl9fYWxsX18gPSBbCiAgICAiQ2xpZW50IiwKXQoKZnJvbSAuY2xpZW50IGltcG9ydCBDbGllbnQKPHxmaW1fc3VmZml4fD4KCldpdGggYSBgQ2xpZW50YCBpbnN0YW5jZSwgeW91IGNhbiBjcmVhdGUgbmV3IGpvYnMsIGxpc3QgYWxsIHJ1bm5pbmcgam9icywKZ2V0IGEgam9iIHN0YXR1cywgc3RvcCBhIHJ1bm5pbmcgam9iLCByZXN0YXJ0IGEgc3RvcHBlZCBqb2IsIG9yIGxpc3QgYWxsCmF2YWlsYWJsZSBpbWFnZXMsIGFuZCBzbyBvbi4KPHxmaW1fZW5kfD4="]
["a9be5c38fad0d395d5cee318ecc745fd0223583f-1","a9be5c38fad0d395d5cee318ecc745fd0223583f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KCmltcG9ydCBweXRlc3QKZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cDQwNApmcm9tIGRqYW5nby50ZXN0IGltcG9ydCBSZXF1ZXN0RmFjdG9yeSwgb3ZlcnJpZGVfc2V0dGluZ3MKCmZyb20gc2NoZW1hX2dyYXBoLnNjaGVtYSBpbXBvcnQgZ2V0X3NjaGVtYQpmcm9tIHNjaGVtYV9ncmFwaC52aWV3cyBpbXBvcnQgU2NoZW1hCgoKZGVmIGNyZWF0ZV9yZXF1ZXN0KCk6Cjx8ZmltX2hvbGV8PgpkZWYgdGVzdF9jb250ZXh0KCk6CiAgICAiIiJUaGUgc2NoZW1hIHNob3VsZCBiZSBhdmFpbGFibGUgaW4gdGhlIHRlbXBsYXRlIGNvbnRleHQuIiIiCiAgICByZXF1ZXN0ID0gY3JlYXRlX3JlcXVlc3QoKQogICAgdmlldyA9IFNjaGVtYShyZXF1ZXN0PXJlcXVlc3QpCiAgICBjb250ZXh0ID0gdmlldy5nZXRfY29udGV4dF9kYXRhKCkKICAgIHNjaGVtYSA9IGdldF9zY2hlbWEoKQogICAgYXNzZXJ0IGNvbnRleHRbIm1vZGVscyJdID09IGpzb24uZHVtcHMoc2NoZW1hLm1vZGVscykKICAgIGFzc2VydCBjb250ZXh0WyJmb3JlaWduX2tleXMiXSA9PSBqc29uLmR1bXBzKHNjaGVtYS5mb3JlaWduX2tleXMpCiAgICBhc3NlcnQgY29udGV4dFsibWFueV90b19tYW55cyJdID09IGpzb24uZHVtcHMoc2NoZW1hLm1hbnlfdG9fbWFueXMpCiAgICBhc3NlcnQgY29udGV4dFsib25lX3RvX29uZXMiXSA9PSBqc29uLmR1bXBzKHNjaGVtYS5vbmVfdG9fb25lcykKICAgIGFzc2VydCBjb250ZXh0WyJpbmhlcml0YW5jZSJdID09IGpzb24uZHVtcHMoc2NoZW1hLmluaGVyaXRhbmNlKQogICAgYXNzZXJ0IGNvbnRleHRbInByb3hpZXMiXSA9PSBqc29uLmR1bXBzKHNjaGVtYS5wcm94aWVzKQoKCmRlZiB0ZXN0X2NvbnRlbnQoKToKICAgICIiIlRoZSBwYWdlIHNob3VsZCBiZSByZW5kZXJlZC4iIiIKICAgIHZpZXcgPSBTY2hlbWEuYXNfdmlldygpCiAgICByZXF1ZXN0ID0gY3JlYXRlX3JlcXVlc3QoKQogICAgd2l0aCBvdmVycmlkZV9zZXR0aW5ncyhERUJVRz1UcnVlKToKICAgICAgICByZXNwb25zZSA9IHZpZXcocmVxdWVzdCkKCiAgICBhc3NlcnQgcmVzcG9uc2UucmVuZGVyZWRfY29udGVudC5zdGFydHN3aXRoKCI8IWRvY3R5cGUgaHRtbD4iKQoKCmRlZiB0ZXN0X2RlYnVnKCk6CiAgICAiIiJTY2hlbWEgc2hvdWxkIGJlIGFjY2Vzc2libGUgaW4gREVCVUcgbW9kZS4iIiIKICAgIHZpZXcgPSBTY2hlbWEuYXNfdmlldygpCiAgICByZXF1ZXN0ID0gY3JlYXRlX3JlcXVlc3QoKQogICAgd2l0aCBvdmVycmlkZV9zZXR0aW5ncyhERUJVRz1UcnVlKToKICAgICAgICByZXNwb25zZSA9IHZpZXcocmVxdWVzdCkKICAgIGFzc2VydCByZXNwb25zZS5zdGF0dXNfY29kZSA9PSAyMDAKCgpkZWYgdGVzdF9ub19kZWJ1ZygpOgogICAgIiIiU2NoZW1hIHNob3VsZCBiZSBpbmFjY2Vzc2libGUgb3V0d2l0aCBERUJVRyBtb2RlLiIiIgogICAgdmlldyA9IFNjaGVtYS5hc192aWV3KCkKICAgIHJlcXVlc3QgPSBjcmVhdGVfcmVxdWVzdCgpCiAgICB3aXRoIG92ZXJyaWRlX3NldHRpbmdzKERFQlVHPUZhbHNlKToKICAgICAgICB3aXRoIHB5dGVzdC5yYWlzZXMoSHR0cDQwNCk6CiAgICAgICAgICAgIHZpZXcocmVxdWVzdCkKPHxmaW1fc3VmZml4fD4KICAgIHJldHVybiBSZXF1ZXN0RmFjdG9yeSgpLmdldCgiL2lnbm9yZWQvIikKCgo8fGZpbV9lbmR8Pg=="]
["e758d0121986b8f961f2f4c03aff6f20e7b367d1-1","e758d0121986b8f961f2f4c03aff6f20e7b367d1","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gb3MucGF0aCBpbXBvcnQgZGlybmFtZSwgcmVhbHBhdGgKZGlyX3BhdGggPSBkaXJuYW1lKHJlYWxwYXRoKF9fZmlsZV9fKSkKCndpdGggb3BlbihmJ3tkaXJfcGF0aH0vaW5wdXQnKSBhcyBmOgogIHB1enpsZV9pbnB1dCA9IGYucmVhZCgpLnNwbGl0KCdcbicpWzotMV0KCmRlZiBwYXJzZV9pbnB1dCgpOgogIHJldHVybiBwdXp6bGVfaW5wdXRbOl0KCmRlZiBnZXRfZGVwYXJ0dXJlcyhzZXEpOgogIHJldHVybiBbaW50KGspIGZvciBrIGluIHNlcS5zcGxpdCgnLCcpIGlmIGsgIT0gJ3gnXQoKZGVmIGdldF9kZXBzX2tleXMoc2VxKToKICByZXR1cm4gW1tpbnQoayksIGVdIGZvciBlLCBrIGluIGVudW1lcmF0ZShzZXEuc3BsaXQoJywnKSkgaWYgayAhPSAneCddCgpkZWYgY29tcGFyZV9pZHMoZSk6CiAgcmV0dXJuIGVbMF0KCmRlZiBwYXJ0MSgpOgogIHBpID0gcGFyc2VfaW5wdXQoKQogIHJlZl90aW1lID0gaW50KHBpWzBdKQoKICBkZXBhcnR1cmVzID0gZ2V0X2RlcGFydHVyZXMocGlbMV0pCiAgZGVsdGFzID0gW2ludChucC5jZWlsKHJlZl90aW1lIC8gZGVwKSkgKiBkZXAgLSByZWZfdGltZSBmb3IgZGVwIGluIGRlcGFydHVyZXNdCiAgCiAgbWluX2luZCA9IG5wLmFyZ21pbihkZWx0YXMpCiAgcmV0dXJuIGRlcGFydHVyZXNbbWluX2luZF0gKiBkZWx0YXNbbWluX2luZF0KCmRlZiBwYXJ0MigpOgogIHBpID0gcGFyc2VfaW5wdXQoKQogIHJlZl90aW1lID0gaW50KHBpWzBdKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgZGVwYXJ0dXJlcyA9IGdldF9kZXBzX2tleXMocGlbMV0pCiAgbXVsdGlwbGllciA9IDEKICB0aW1lID0gMAoKPHxmaW1fZW5kfD4="]
["e758d0121986b8f961f2f4c03aff6f20e7b367d1-2","e758d0121986b8f961f2f4c03aff6f20e7b367d1","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwppbXBvcnQgbnVtcHkgYXMgbnAKCjx8ZmltX2hvbGV8PgogIHB1enpsZV9pbnB1dCA9IGYucmVhZCgpLnNwbGl0KCdcbicpWzotMV0KCmRlZiBwYXJzZV9pbnB1dCgpOgogIHJldHVybiBwdXp6bGVfaW5wdXRbOl0KCmRlZiBnZXRfZGVwYXJ0dXJlcyhzZXEpOgogIHJldHVybiBbaW50KGspIGZvciBrIGluIHNlcS5zcGxpdCgnLCcpIGlmIGsgIT0gJ3gnXQoKZGVmIGdldF9kZXBzX2tleXMoc2VxKToKICByZXR1cm4gW1tpbnQoayksIGVdIGZvciBlLCBrIGluIGVudW1lcmF0ZShzZXEuc3BsaXQoJywnKSkgaWYgayAhPSAneCddCgpkZWYgY29tcGFyZV9pZHMoZSk6CiAgcmV0dXJuIGVbMF0KCmRlZiBwYXJ0MSgpOgogIHBpID0gcGFyc2VfaW5wdXQoKQogIHJlZl90aW1lID0gaW50KHBpWzBdKQoKICBkZXBhcnR1cmVzID0gZ2V0X2RlcGFydHVyZXMocGlbMV0pCiAgZGVsdGFzID0gW2ludChucC5jZWlsKHJlZl90aW1lIC8gZGVwKSkgKiBkZXAgLSByZWZfdGltZSBmb3IgZGVwIGluIGRlcGFydHVyZXNdCiAgCiAgbWluX2luZCA9IG5wLmFyZ21pbihkZWx0YXMpCiAgcmV0dXJuIGRlcGFydHVyZXNbbWluX2luZF0gKiBkZWx0YXNbbWluX2luZF0KCmRlZiBwYXJ0MigpOgogIHBpID0gcGFyc2VfaW5wdXQoKQogIHJlZl90aW1lID0gaW50KHBpWzBdKQogIGRlcGFydHVyZXMgPSBnZXRfZGVwc19rZXlzKHBpWzFdKQogIG11bHRpcGxpZXIgPSAxCiAgdGltZSA9IDAKCiAgcHJpbnQoZGVwYXJ0dXJlcykKICBmb3IgaSBpbiByYW5nZShsZW4oZGVwYXJ0dXJlcyktMSk6CiAgICBidXNfaWQgPSBkZXBhcnR1cmVzW2krMV1bMF0KICAgIG9mZnNldCA9IGRlcGFydHVyZXNbaSsxXVsxXQogICAgbXVsdGlwbGllciAqPSBkZXBhcnR1cmVzW2ldWzBdCgogICAgd2hpbGUgKHRpbWUgKyBvZmZzZXQpICUgYnVzX2lkICE9IDA6CiAgICAgIHRpbWUgKz0gbXVsdGlwbGllcgogIAogIHJldHVybiB0aW1lCgpkZWYgbWFpbigpOgogIHBhcnQxX3JlcyA9IHBhcnQxKCkKICBwcmludChmJ1BhcnQgMToge3BhcnQxX3Jlc30nKQoKICBwYXJ0Ml9yZXMgPSBwYXJ0MigpCiAgcHJpbnQoZidQYXJ0IDI6IHtwYXJ0Ml9yZXN9JykKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CmZyb20gb3MucGF0aCBpbXBvcnQgZGlybmFtZSwgcmVhbHBhdGgKZGlyX3BhdGggPSBkaXJuYW1lKHJlYWxwYXRoKF9fZmlsZV9fKSkKCndpdGggb3BlbihmJ3tkaXJfcGF0aH0vaW5wdXQnKSBhcyBmOgo8fGZpbV9lbmR8Pg=="]
["e758d0121986b8f961f2f4c03aff6f20e7b367d1-3","e758d0121986b8f961f2f4c03aff6f20e7b367d1","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gb3MucGF0aCBpbXBvcnQgZGlybmFtZSwgcmVhbHBhdGgKZGlyX3BhdGggPSBkaXJuYW1lKHJlYWxwYXRoKF9fZmlsZV9fKSkKCndpdGggb3BlbihmJ3tkaXJfcGF0aH0vaW5wdXQnKSBhcyBmOgogIHB1enpsZV9pbnB1dCA9IGYucmVhZCgpLnNwbGl0KCdcbicpWzotMV0KCmRlZiBwYXJzZV9pbnB1dCgpOgogIHJldHVybiBwdXp6bGVfaW5wdXRbOl0KCmRlZiBnZXRfZGVwYXJ0dXJlcyhzZXEpOgogIHJldHVybiBbaW50KGspIGZvciBrIGluIHNlcS5zcGxpdCgnLCcpIGlmIGsgIT0gJ3gnXQoKZGVmIGdldF9kZXBzX2tleXMoc2VxKToKICByZXR1cm4gW1tpbnQoayksIGVdIGZvciBlLCBrIGluIGVudW1lcmF0ZShzZXEuc3BsaXQoJywnKSkgaWYgayAhPSAneCddCgpkZWYgY29tcGFyZV9pZHMoZSk6CiAgcmV0dXJuIGVbMF0KCmRlZiBwYXJ0MSgpOgogIHBpID0gcGFyc2VfaW5wdXQoKQogIHJlZl90aW1lID0gaW50KHBpWzBdKQoKICBkZXBhcnR1cmVzID0gZ2V0X2RlcGFydHVyZXMocGlbMV0pCiAgZGVsdGFzID0gW2ludChucC5jZWlsKHJlZl90aW1lIC8gZGVwKSkgKiBkZXAgLSByZWZfdGltZSBmb3IgZGVwIGluIGRlcGFydHVyZXNdCiAgCiAgbWluX2luZCA9IG5wLmFyZ21pbihkZWx0YXMpCiAgcmV0dXJuIGRlcGFydHVyZXNbbWluX2luZF0gKiBkZWx0YXNbbWluX2luZF0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZGVmIHBhcnQyKCk6CiAgcGkgPSBwYXJzZV9pbnB1dCgpCiAgcmVmX3RpbWUgPSBpbnQocGlbMF0pCjx8ZmltX2VuZHw+"]
["e758d0121986b8f961f2f4c03aff6f20e7b367d1-4","e758d0121986b8f961f2f4c03aff6f20e7b367d1","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gb3MucGF0aCBpbXBvcnQgZGlybmFtZSwgcmVhbHBhdGgKZGlyX3BhdGggPSBkaXJuYW1lKHJlYWxwYXRoKF9fZmlsZV9fKSkKCndpdGggb3BlbihmJ3tkaXJfcGF0aH0vaW5wdXQnKSBhcyBmOgogIHB1enpsZV9pbnB1dCA9IGYucmVhZCgpLnNwbGl0KCdcbicpWzotMV0KCmRlZiBwYXJzZV9pbnB1dCgpOgogIHJldHVybiBwdXp6bGVfaW5wdXRbOl0KCmRlZiBnZXRfZGVwYXJ0dXJlcyhzZXEpOgogIHJldHVybiBbaW50KGspIGZvciBrIGluIHNlcS5zcGxpdCgnLCcpIGlmIGsgIT0gJ3gnXQoKZGVmIGdldF9kZXBzX2tleXMoc2VxKToKICByZXR1cm4gW1tpbnQoayksIGVdIGZvciBlLCBrIGluIGVudW1lcmF0ZShzZXEuc3BsaXQoJywnKSkgaWYgayAhPSAneCddCgpkZWYgY29tcGFyZV9pZHMoZSk6CiAgcmV0dXJuIGVbMF0KCmRlZiBwYXJ0MSgpOgogIHBpID0gcGFyc2VfaW5wdXQoKQogIHJlZl90aW1lID0gaW50KHBpWzBdKQoKICBkZXBhcnR1cmVzID0gZ2V0X2RlcGFydHVyZXMocGlbMV0pCiAgZGVsdGFzID0gW2ludChucC5jZWlsKHJlZl90aW1lIC8gZGVwKSkgKiBkZXAgLSByZWZfdGltZSBmb3IgZGVwIGluIGRlcGFydHVyZXNdCiAgCiAgbWluX2luZCA9IG5wLmFyZ21pbihkZWx0YXMpCiAgcmV0dXJuIGRlcGFydHVyZXNbbWluX2luZF0gKiBkZWx0YXNbbWluX2luZF0KCmRlZiBwYXJ0MigpOgogIHBpID0gcGFyc2VfaW5wdXQoKQogIHJlZl90aW1lID0gaW50KHBpWzBdKQogIGRlcGFydHVyZXMgPSBnZXRfZGVwc19rZXlzKHBpWzFdKQogIG11bHRpcGxpZXIgPSAxCjx8ZmltX2hvbGV8PgogICAgYnVzX2lkID0gZGVwYXJ0dXJlc1tpKzFdWzBdCiAgICBvZmZzZXQgPSBkZXBhcnR1cmVzW2krMV1bMV0KICAgIG11bHRpcGxpZXIgKj0gZGVwYXJ0dXJlc1tpXVswXQoKICAgIHdoaWxlICh0aW1lICsgb2Zmc2V0KSAlIGJ1c19pZCAhPSAwOgogICAgICB0aW1lICs9IG11bHRpcGxpZXIKICAKICByZXR1cm4gdGltZQoKZGVmIG1haW4oKToKICBwYXJ0MV9yZXMgPSBwYXJ0MSgpCiAgcHJpbnQoZidQYXJ0IDE6IHtwYXJ0MV9yZXN9JykKCiAgcGFydDJfcmVzID0gcGFydDIoKQogIHByaW50KGYnUGFydCAyOiB7cGFydDJfcmVzfScpCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogIG1haW4oKQo8fGZpbV9zdWZmaXh8PgogIHRpbWUgPSAwCgogIHByaW50KGRlcGFydHVyZXMpCiAgZm9yIGkgaW4gcmFuZ2UobGVuKGRlcGFydHVyZXMpLTEpOgo8fGZpbV9lbmR8Pg=="]
["e758d0121986b8f961f2f4c03aff6f20e7b367d1-5","e758d0121986b8f961f2f4c03aff6f20e7b367d1","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwppbXBvcnQgbnVtcHkgYXMgbnAKPHxmaW1faG9sZXw+CndpdGggb3BlbihmJ3tkaXJfcGF0aH0vaW5wdXQnKSBhcyBmOgogIHB1enpsZV9pbnB1dCA9IGYucmVhZCgpLnNwbGl0KCdcbicpWzotMV0KCmRlZiBwYXJzZV9pbnB1dCgpOgogIHJldHVybiBwdXp6bGVfaW5wdXRbOl0KCmRlZiBnZXRfZGVwYXJ0dXJlcyhzZXEpOgogIHJldHVybiBbaW50KGspIGZvciBrIGluIHNlcS5zcGxpdCgnLCcpIGlmIGsgIT0gJ3gnXQoKZGVmIGdldF9kZXBzX2tleXMoc2VxKToKICByZXR1cm4gW1tpbnQoayksIGVdIGZvciBlLCBrIGluIGVudW1lcmF0ZShzZXEuc3BsaXQoJywnKSkgaWYgayAhPSAneCddCgpkZWYgY29tcGFyZV9pZHMoZSk6CiAgcmV0dXJuIGVbMF0KCmRlZiBwYXJ0MSgpOgogIHBpID0gcGFyc2VfaW5wdXQoKQogIHJlZl90aW1lID0gaW50KHBpWzBdKQoKICBkZXBhcnR1cmVzID0gZ2V0X2RlcGFydHVyZXMocGlbMV0pCiAgZGVsdGFzID0gW2ludChucC5jZWlsKHJlZl90aW1lIC8gZGVwKSkgKiBkZXAgLSByZWZfdGltZSBmb3IgZGVwIGluIGRlcGFydHVyZXNdCiAgCiAgbWluX2luZCA9IG5wLmFyZ21pbihkZWx0YXMpCiAgcmV0dXJuIGRlcGFydHVyZXNbbWluX2luZF0gKiBkZWx0YXNbbWluX2luZF0KCmRlZiBwYXJ0MigpOgogIHBpID0gcGFyc2VfaW5wdXQoKQogIHJlZl90aW1lID0gaW50KHBpWzBdKQogIGRlcGFydHVyZXMgPSBnZXRfZGVwc19rZXlzKHBpWzFdKQogIG11bHRpcGxpZXIgPSAxCiAgdGltZSA9IDAKCiAgcHJpbnQoZGVwYXJ0dXJlcykKICBmb3IgaSBpbiByYW5nZShsZW4oZGVwYXJ0dXJlcyktMSk6CiAgICBidXNfaWQgPSBkZXBhcnR1cmVzW2krMV1bMF0KICAgIG9mZnNldCA9IGRlcGFydHVyZXNbaSsxXVsxXQogICAgbXVsdGlwbGllciAqPSBkZXBhcnR1cmVzW2ldWzBdCgogICAgd2hpbGUgKHRpbWUgKyBvZmZzZXQpICUgYnVzX2lkICE9IDA6CiAgICAgIHRpbWUgKz0gbXVsdGlwbGllcgogIAogIHJldHVybiB0aW1lCgpkZWYgbWFpbigpOgogIHBhcnQxX3JlcyA9IHBhcnQxKCkKICBwcmludChmJ1BhcnQgMToge3BhcnQxX3Jlc30nKQoKICBwYXJ0Ml9yZXMgPSBwYXJ0MigpCiAgcHJpbnQoZidQYXJ0IDI6IHtwYXJ0Ml9yZXN9JykKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+Cgpmcm9tIG9zLnBhdGggaW1wb3J0IGRpcm5hbWUsIHJlYWxwYXRoCmRpcl9wYXRoID0gZGlybmFtZShyZWFscGF0aChfX2ZpbGVfXykpCgo8fGZpbV9lbmR8Pg=="]
["e75687844c90d39af8eedde9d7bb7ca7911a35fa-1","e75687844c90d39af8eedde9d7bb7ca7911a35fa","PHxmaW1fcHJlZml4fD4KZnJvbSBrZXlib2FyZCBpbXBvcnQgKgpmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCmltcG9ydCBtb3VzZQoKCgpydW49VHJ1ZQpkZWYgc3RvcCgpOgogICAgZ2xvYmFsIHJ1bgogICAgcnVuPUZhbHNlCiAgICAKZGVmIGNsaWNraW5nKCk6CiAgICB3aGlsZSBydW46Cjx8ZmltX2hvbGV8PgoKYWRkX2hvdGtleSgnWycsY2xpY2tpbmcpCndhaXQoJ10nLCBzdG9wKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGlmIG1vdXNlLmlzX3ByZXNzZWQoYnV0dG9uPSJyaWdodCIpOgogICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgc2xlZXAoMC4wMSkKICAgICAgICAgICAgICAgIG1vdXNlLmRvdWJsZV9jbGljayhidXR0b249InJpZ2h0IikKPHxmaW1fZW5kfD4="]
["e75687844c90d39af8eedde9d7bb7ca7911a35fa-2","e75687844c90d39af8eedde9d7bb7ca7911a35fa","PHxmaW1fcHJlZml4fD4KZnJvbSBrZXlib2FyZCBpbXBvcnQgKgpmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCmltcG9ydCBtb3VzZQoKCgpydW49VHJ1ZQpkZWYgc3RvcCgpOgogICAgZ2xvYmFsIHJ1bgogICAgcnVuPUZhbHNlCiAgICAKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICBzbGVlcCgwLjAxKQogICAgICAgICAgICAgICAgbW91c2UuZG91YmxlX2NsaWNrKGJ1dHRvbj0icmlnaHQiKQoKYWRkX2hvdGtleSgnWycsY2xpY2tpbmcpCndhaXQoJ10nLCBzdG9wKQo8fGZpbV9zdWZmaXh8PgpkZWYgY2xpY2tpbmcoKToKICAgIHdoaWxlIHJ1bjoKICAgICAgICBpZiBtb3VzZS5pc19wcmVzc2VkKGJ1dHRvbj0icmlnaHQiKToKICAgICAgICAgICAgd2hpbGUgVHJ1ZToKPHxmaW1fZW5kfD4="]
["e75687844c90d39af8eedde9d7bb7ca7911a35fa-3","e75687844c90d39af8eedde9d7bb7ca7911a35fa","PHxmaW1fcHJlZml4fD4KZnJvbSBrZXlib2FyZCBpbXBvcnQgKgpmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCmltcG9ydCBtb3VzZQoKCgpydW49VHJ1ZQpkZWYgc3RvcCgpOgogICAgZ2xvYmFsIHJ1bgogICAgcnVuPUZhbHNlCiAgICAKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpkZWYgY2xpY2tpbmcoKToKICAgIHdoaWxlIHJ1bjoKICAgICAgICBpZiBtb3VzZS5pc19wcmVzc2VkKGJ1dHRvbj0icmlnaHQiKToKICAgICAgICAgICAgd2hpbGUgVHJ1ZToKPHxmaW1fZW5kfD4="]
["e75687844c90d39af8eedde9d7bb7ca7911a35fa-4","e75687844c90d39af8eedde9d7bb7ca7911a35fa","PHxmaW1fcHJlZml4fD4KZnJvbSBrZXlib2FyZCBpbXBvcnQgKgpmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCjx8ZmltX2hvbGV8PgpydW49VHJ1ZQpkZWYgc3RvcCgpOgogICAgZ2xvYmFsIHJ1bgogICAgcnVuPUZhbHNlCiAgICAKZGVmIGNsaWNraW5nKCk6CiAgICB3aGlsZSBydW46CiAgICAgICAgaWYgbW91c2UuaXNfcHJlc3NlZChidXR0b249InJpZ2h0Iik6CiAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICBzbGVlcCgwLjAxKQogICAgICAgICAgICAgICAgbW91c2UuZG91YmxlX2NsaWNrKGJ1dHRvbj0icmlnaHQiKQoKYWRkX2hvdGtleSgnWycsY2xpY2tpbmcpCndhaXQoJ10nLCBzdG9wKQo8fGZpbV9zdWZmaXh8PgppbXBvcnQgbW91c2UKCgoKPHxmaW1fZW5kfD4="]
["e75687844c90d39af8eedde9d7bb7ca7911a35fa-5","e75687844c90d39af8eedde9d7bb7ca7911a35fa","PHxmaW1fcHJlZml4fD4KZnJvbSBrZXlib2FyZCBpbXBvcnQgKgpmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCmltcG9ydCBtb3VzZQoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCnJ1bj1UcnVlCmRlZiBzdG9wKCk6CiAgICBnbG9iYWwgcnVuCjx8ZmltX2VuZHw+"]
["bdb173efbd5a1d6027d38d3629c177d40ac16748-1","bdb173efbd5a1d6027d38d3629c177d40ac16748","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKZnJvbSBpYmV4Lmdlb21ldHJ5IGltcG9ydCBpYjNzaGFwZXMKZnJvbSBpYmV4LnV0aWxpdGllcy5jb25zdGFudHMgaW1wb3J0ICoKCgpjbGFzcyBNZXRhRGF0YToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcmVmaXgpOgogICAgICAgICMgaW5pdGlhbGl6ZSB0aGUgcHJlZml4IHZhcmlhYmxlCiAgICAgICAgc2VsZi5wcmVmaXggPSBwcmVmaXgKCiAgICAgICAgIyBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eSB2YXJpYWJsZSBkZWZhdWx0cwogICAgICAgIHNlbGYuYWZmaW5pdHlfZmlsZW5hbWUgPSBOb25lCiAgICAgICAgc2VsZi5ib3VuZGFyeV9maWxlbmFtZSA9IE5vbmUKICAgICAgICBzZWxmLmdvbGRfZmlsZW5hbWUgPSBOb25lCiAgICAgICAgc2VsZi5pbWFnZV9maWxlbmFtZSA9IE5vbmUKICAgICAgICBzZWxmLm1hc2tfZmlsZW5hbWUgPSBOb25lCiAgICAgICAgc2VsZi5yaG9hbmFfZmlsZW5hbWUgPSBOb25lCiAgICAgICAgc2VsZi5zeW5hcHNlID0gTm9uZQogICAgICAgIHNlbGYuY3JvcF94bWluID0gTm9uZQogICAgICAgIHNlbGYuY3JvcF94bWF4ID0gTm9uZQogICAgICAgIHNlbGYuY3JvcF95bWluID0gTm9uZQogICAgICAgIHNlbGYuY3JvcF95bWF4ID0gTm9uZQogICAgICAgIHNlbGYuY3JvcF96bWluID0gTm9uZQogICAgICAgIHNlbGYuY3JvcF96bWF4ID0gTm9uZQoKICAgICAgICAjIG9wZW4gdGhlIG1ldGEgZGF0YSB0eHQgZmlsZQogICAgICAgIGZpbGVuYW1lID0gJ21ldGEve30ubWV0YScuZm9ybWF0KHByZWZpeCkKICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyJykgYXMgZmQ6CiAgICAgICAgICAgIGxpbmVzID0gZmQucmVhZGxpbmVzKCkKCiAgICAgICAgICAgIGZvciBpeCBpbiByYW5nZSgwLCBsZW4obGluZXMpLCAyKToKICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBjb21tZW50IGFuZCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZQogICAgICAgICAgICAgICAgY29tbWVudCA9IGxpbmVzW2l4XS5zdHJpcCgpCiAgICAgICAgICAgICAgICB2YWx1ZSA9IGxpbmVzW2l4ICsgMV0uc3RyaXAoKQoKICAgICAgICAgICAgICAgIGlmIGNvbW1lbnQgPT0gJyMgcmVzb2x1dGlvbiBpbiBubSc6CiAgICAgICAgICAgICAgICAgICAgIyBzZXBhcmF0ZSBpbnRvIGluZGl2aWR1YWwgZGltZW5zaW9ucwogICAgICAgICAgICAgICAgICAgIHNhbXBsZXMgPSB2YWx1ZS5zcGxpdCgneCcpCiAgICAgICAgICAgICAgICAgICAgIyBuZWVkIHRvIHVzZSAyLCAxLCBhbmQgMCBoZXJlIHNpbmNlIHRoZSBvdXR3YXJkIGZhY2luZyBjb252ZW50aW9uIGlzIHgseSx6LCBub3QgeiwgeSwgeAogICAgICAgICAgICAgICAgICAgIHNlbGYucmVzb2x1dGlvbiA9IChmbG9hdChzYW1wbGVzWzJdKSwgZmxvYXQoc2FtcGxlc1sxXSksIGZsb2F0KHNhbXBsZXNbMF0pKQogICAgICAgICAgICAgICAgZWxpZiBjb21tZW50ID09ICcjIGFmZmluaXR5IGZpbGVuYW1lJzoKICAgICAgICAgICAgICAgICAgICBzZWxmLmFmZmluaXR5X2ZpbGVuYW1lID0gdmFsdWUKICAgICAgICAgICAgICAgIGVsaWYgY29tbWVudCA9PSAnIyBib3VuZGFyeSBmaWxlbmFtZSc6Cjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgZWxpZiBjb21tZW50ID09ICcjIGdvbGQgZmlsZW5hbWUnOgogICAgICAgICAgICAgICAgICAgIHNlbGYuZ29sZF9maWxlbmFtZSA9IHZhbHVlCiAgICAgICAgICAgICAgICBlbGlmIGNvbW1lbnQgPT0gJyMgaW1hZ2UgZmlsZW5hbWUnOgogICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2VfZmlsZW5hbWUgPSB2YWx1ZQogICAgICAgICAgICAgICAgZWxpZiBjb21tZW50ID09ICcjIG1hc2sgZmlsZW5hbWUnOgogICAgICAgICAgICAgICAgICAgIHNlbGYubWFza19maWxlbmFtZSA9IHZhbHVlCiAgICAgICAgICAgICAgICBlbGlmIGNvbW1lbnQgPT0gJyMgcmhvYW5hIGZpbGVuYW1lJzoKICAgICAgICAgICAgICAgICAgICBzZWxmLnJob2FuYV9maWxlbmFtZSA9IHZhbHVlCiAgICAgICAgICAgICAgICBlbGlmIGNvbW1lbnQgPT0gJyMgc3luYXBzZSBmaWxlbmFtZSc6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5zeW5hcHNlX2ZpbGVuYW1lID0gdmFsdWUKICAgICAgICAgICAgICAgIGVsaWYgY29tbWVudCA9PSAnIyB3b3JsZCBib3VuZGluZyBib3gnOgogICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlID09ICdOb25lJzogCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYm91bmRpbmdfYm94ID0gaWIzc2hhcGVzLklCQm94KCgwLCAwLCAwKSwgKC0xLCAtMSwgLTEpKQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICMgc2VwYXJhdGUgaW50byBtaW5pbXVtcyBhbmQgbWF4aW11bXMKICAgICAgICAgICAgICAgICAgICBtaW5tYXggPSB2YWx1ZS5zcGxpdCgnLScpCiAgICAgICAgICAgICAgICAgICAgbWlucyA9IChtaW5tYXhbMF0uc3RyaXAoJygpJykpLnNwbGl0KCcsJykKICAgICAgICAgICAgICAgICAgICBtYXhzID0gKG1pbm1heFsxXS5zdHJpcCgnKCknKSkuc3BsaXQoJywnKQoKICAgICAgICAgICAgICAgICAgICAjIHNwbGl0IGludG8gaW5kaXZpZHVhbCBtaW5zCiAgICAgICAgICAgICAgICAgICAgZm9yIGl2IGluIHJhbmdlKE5ESU1TKToKICAgICAgICAgICAgICAgICAgICAgICAgbWluc1tpdl0gPSBpbnQobWluc1tpdl0pCiAgICAgICAgICAgICAgICAgICAgICAgIG1heHNbaXZdID0gaW50KG1heHNbaXZdKQoKICAgICAgICAgICAgICAgICAgICAjIHN3YXAgeCBhbmQgegogICAgICAgICAgICAgICAgICAgIHRtcCA9IG1pbnNbMF0KICAgICAgICAgICAgICAgICAgICBtaW5zWzBdID0gbWluc1syXQogICAgICAgICAgICAgICAgICAgIG1pbnNbMl0gPSB0bXAKCiAgICAgICAgICAgICAgICAgICAgdG1wID0gbWF4c1swXQogICAgICAgICAgICAgICAgICAgIG1heHNbMF0gPSBtYXhzWzJdCiAgICAgICAgICAgICAgICAgICAgbWF4c1syXSA9IHRtcAoKICAgICAgICAgICAgICAgICAgICAjIHNhdmUgdGhlIGJvdW5kaW5nIGJveAogICAgICAgICAgICAgICAgICAgIHNlbGYuYm91bmRpbmdfYm94ID0gaWIzc2hhcGVzLklCQm94KG1pbnMsIG1heHMpCiAgICAgICAgICAgICAgICBlbGlmIGNvbW1lbnQgPT0gJyMgZ3JpZCBzaXplJzoKICAgICAgICAgICAgICAgICAgICAjIHJlYWQgdGhlIGdyaWQgc2l6ZSBpbiB4LCB5LCB6IG9yZGVyCiAgICAgICAgICAgICAgICAgICAgc2FtcGxlcyA9IHZhbHVlLnNwbGl0KCd4JykKICAgICAgICAgICAgICAgICAgICBzZWxmLmdyaWRfc2l6ZSA9IChpbnQoc2FtcGxlc1syXSksIGludChzYW1wbGVzWzFdKSwgaW50KHNhbXBsZXNbMF0pKQogICAgICAgICAgICAgICAgZWxpZiBjb21tZW50ID09ICcjIHRyYWluL3ZhbC90ZXN0IGNyb3AnOgogICAgICAgICAgICAgICAgICAgIHNhbXBsZXMgPSB2YWx1ZS5zcGxpdCgneCcpCiAgICAgICAgICAgICAgICAgICAgIyByZWFkIHRoZSBjcm9wIGluIHgsIHksIHogb3JkZXIKICAgICAgICAgICAgICAgICAgICBzZWxmLmNyb3BfeG1pbiA9IGludChzYW1wbGVzWzBdLnNwbGl0KCc6JylbMF0pCiAgICAgICAgICAgICAgICAgICAgc2VsZi5jcm9wX3htYXggPSBpbnQoc2FtcGxlc1swXS5zcGxpdCgnOicpWzFdKQogICAgICAgICAgICAgICAgICAgIHNlbGYuY3JvcF95bWluID0gaW50KHNhbXBsZXNbMV0uc3BsaXQoJzonKVswXSkKICAgICAgICAgICAgICAgICAgICBzZWxmLmNyb3BfeW1heCA9IGludChzYW1wbGVzWzFdLnNwbGl0KCc6JylbMV0pCiAgICAgICAgICAgICAgICAgICAgc2VsZi5jcm9wX3ptaW4gPSBpbnQoc2FtcGxlc1syXS5zcGxpdCgnOicpWzBdKQogICAgICAgICAgICAgICAgICAgIHNlbGYuY3JvcF96bWF4ID0gaW50KHNhbXBsZXNbMl0uc3BsaXQoJzonKVsxXSkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnVW5yZWNvZ25pemVkIGF0dHJpYnV0ZSBpbiB7fToge31cbicuZm9ybWF0KHByZWZpeCwgY29tbWVudCkpCiAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoKQoKICAgIGRlZiBDcm9wcGluZ0JveChzZWxmKToKICAgICAgICBpZiBzZWxmLmNyb3BfeG1pbiA9PSBOb25lOgogICAgICAgICAgICByZXR1cm4gKCgwLCBzZWxmLmdyaWRfc2l6ZVtJQl9aXSksICgwLCBzZWxmLmdyaWRfc2l6ZVtJQl9ZXSksICgwLCBzZWxmLmdyaWRfc2l6ZVtJQl9YXSkpCiAgICAgICAgcmV0dXJuICgoc2VsZi5jcm9wX3ptaW4sIHNlbGYuY3JvcF96bWF4KSwgKHNlbGYuY3JvcF95bWluLCBzZWxmLmNyb3BfeW1heCksIChzZWxmLmNyb3BfeG1pbiwgc2VsZi5jcm9wX3htYXgpKQoKICAgIGRlZiBXb3JsZEJCb3goc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuYm91bmRpbmdfYm94CgogICAgZGVmIFJlc29sdXRpb24oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYucmVzb2x1dGlvbgoKICAgIGRlZiBHb2xkRmlsZW5hbWUoc2VsZik6CiAgICAgICAgaWYgc2VsZi5nb2xkX2ZpbGVuYW1lID09IE5vbmU6CiAgICAgICAgICAgIHJldHVybiAnZ29sZC97fV9nb2xkLmg1Jy5mb3JtYXQoc2VsZi5wcmVmaXgpLCAnbWFpbicKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gc2VsZi5nb2xkX2ZpbGVuYW1lLnNwbGl0KClbMF0sIHNlbGYuZ29sZF9maWxlbmFtZS5zcGxpdCgpWzFdCgogICAgZGVmIEltYWdlRmlsZW5hbWUoc2VsZik6CiAgICAgICAgaWYgc2VsZi5pbWFnZV9maWxlbmFtZSA9PSBOb25lOgogICAgICAgICAgICByZXR1cm4gJ2ltYWdlcy97fV9pbWFnZS5oNScuZm9ybWF0KHNlbGYucHJlZml4KSwgJ21haW4nCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW1hZ2VfZmlsZW5hbWUuc3BsaXQoKVswXSwgc2VsZi5pbWFnZV9maWxlbmFtZS5zcGxpdCgpWzFdCgogICAgZGVmIFNlZ21lbnRhdGlvbkZpbGVuYW1lKHNlbGYpOgogICAgICAgIGlmIHNlbGYucmhvYW5hX2ZpbGVuYW1lID09IE5vbmU6CiAgICAgICAgICAgIHJldHVybiAncmhvYW5hL3t9X3Job2FuYS5oNScuZm9ybWF0KHNlbGYucHJlZml4KSwgJ21haW4nCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIHNlbGYucmhvYW5hX2ZpbGVuYW1lLnNwbGl0KClbMF0sIHNlbGYucmhvYW5hX2ZpbGVuYW1lLnNwbGl0KClbMV0KCiAgICBkZWYgQWZmaW5pdHlGaWxlbmFtZShzZWxmKToKICAgICAgICBpZiBzZWxmLmFmZmluaXR5X2ZpbGVuYW1lID09IE5vbmU6CiAgICAgICAgICAgIHJldHVybiAnYWZmaW5pdGllcy97fV9hZmZpbml0aWVzLmg1Jy5mb3JtYXQoc2VsZi5wcmVmaXgpLCAnbWFpbicKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gc2VsZi5hZmZpbml0eV9maWxlbmFtZS5zcGxpdCgpWzBdLCBzZWxmLmFmZmluaXR5X2ZpbGVuYW1lLnNwbGl0KClbMV0KCiAgICBkZWYgR3JpZFNpemUoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuZ3JpZF9zaXplCgogICAgZGVmIFdyaXRlTWV0YUZpbGUoc2VsZik6CiAgICAgICAgbWV0YV9maWxlbmFtZSA9ICdtZXRhL3t9Lm1ldGEnLmZvcm1hdChzZWxmLnByZWZpeCkKCiAgICAgICAgd2l0aCBvcGVuKG1ldGFfZmlsZW5hbWUsICd3JykgYXMgZmQ6CiAgICAgICAgICAgICMgd3JpdGUgdGhlIHJlc29sdXRpb24gaW4geCwgeSwgeiBvcmRlcgogICAgICAgICAgICBmZC53cml0ZSgnIyByZXNvbHV0aW9uIGluIG5tXG4nKQogICAgICAgICAgICBmZC53cml0ZSgne314e314e31cbicuZm9ybWF0KHNlbGYucmVzb2x1dGlvblsyXSwgc2VsZi5yZXNvbHV0aW9uWzFdLCBzZWxmLnJlc29sdXRpb25bMF0pKQoKICAgICAgICAgICAgZmQud3JpdGUoJyMgYWZmaW5pdHkgZmlsZW5hbWVcbicpCiAgICAgICAgICAgIGZkLndyaXRlKCd7fVxuJy5mb3JtYXQoc2VsZi5hZmZpbml0eV9maWxlbmFtZSkpCgogICAgICAgICAgICBmZC53cml0ZSgnIyBib3VuZGFyeSBmaWxlbmFtZVxuJykKICAgICAgICAgICAgZmQud3JpdGUoJ3t9XG4nLmZvcm1hdChzZWxmLmJvdW5kYXJ5X2ZpbGVuYW1lKSkKCiAgICAgICAgICAgIGZkLndyaXRlKCcjIGdvbGQgZmlsZW5hbWVcbicpCiAgICAgICAgICAgIGZkLndyaXRlKCd7fVxuJy5mb3JtYXQoc2VsZi5nb2xkX2ZpbGVuYW1lKSkKCiAgICAgICAgICAgIGZkLndyaXRlKCcjIGltYWdlIGZpbGVuYW1lXG4nKQogICAgICAgICAgICBmZC53cml0ZSgne31cbicuZm9ybWF0KHNlbGYuaW1hZ2VfZmlsZW5hbWUpKQoKICAgICAgICAgICAgZmQud3JpdGUoJyMgbWFzayBmaWxlbmFtZVxuJykKICAgICAgICAgICAgZmQud3JpdGUoJ3t9XG4nLmZvcm1hdChzZWxmLm1hc2tfZmlsZW5hbWUpKQoKICAgICAgICAgICAgZmQud3JpdGUoJyMgcmhvYW5hIGZpbGVuYW1lXG4nKQogICAgICAgICAgICBmZC53cml0ZSgne31cbicuZm9ybWF0KHNlbGYucmhvYW5hX2ZpbGVuYW1lKSkKCiAgICAgICAgICAgIGZkLndyaXRlKCcjIHN5bmFwc2UgZmlsZW5hbWVcbicpCiAgICAgICAgICAgIGZkLndyaXRlKCd7fVxuJy5mb3JtYXQoc2VsZi5zeW5hcHNlX2ZpbGVuYW1lKSkKCiAgICAgICAgICAgICMjIyBURU1QT1JBUlkgSEFDSyAjIyMKICAgICAgICAgICAgZmQud3JpdGUoJyMgd29ybGQgYm91bmRpbmcgYm94XG4nKQogICAgICAgICAgICBmZC53cml0ZSgnTm9uZVxuJykKCiAgICAgICAgICAgICMgd3JpdGUgdGhlIGdyaWQgc2l6ZSBpbiB4LCB5LCB6IG9yZGVyCiAgICAgICAgICAgIGZkLndyaXRlKCcjIGdyaWQgc2l6ZVxuJykKICAgICAgICAgICAgZmQud3JpdGUoJ3t9eHt9eHt9XG4nLmZvcm1hdChzZWxmLmdyaWRfc2l6ZVsyXSwgc2VsZi5ncmlkX3NpemVbMV0sIHNlbGYuZ3JpZF9zaXplWzBdKSkKCiAgICAgICAgICAgICMgd3JpdGUgdGhlIGNyb3AgaW4geCwgeSwgeiBvcmRlcgogICAgICAgICAgICBmZC53cml0ZSgnIyB0cmFpbi92YWwvdGVzdCBjcm9wXG4nKQogICAgICAgICAgICAjIG5lZWQgdG8gY2FsbCB0aGUgZnVuY3Rpb24gaGVyZSBzbyB0aGF0IHdlIGdldCB0aGUgZ3JpZCBzaXplIGlmIHRoZXJlIHdhcyBub24gaW4gdGhlIG9yaWdpbmFsIG1ldGEgZmlsZQogICAgICAgICAgICAoY3JvcF96bWluLCBjcm9wX3ptYXgpLCAoY3JvcF95bWluLCBjcm9wX3ltYXgpLCAoY3JvcF94bWluLCBjcm9wX3htYXgpID0gc2VsZi5Dcm9wcGluZ0JveCgpCiAgICAgICAgICAgIGZkLndyaXRlKCd7fTp7fXh7fTp7fXh7fTp7fVxuJy5mb3JtYXQoY3JvcF94bWluLCBjcm9wX3htYXgsIGNyb3BfeW1pbiwgY3JvcF95bWF4LCBjcm9wX3ptaW4sIGNyb3Bfem1heCkpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgc2VsZi5ib3VuZGFyeV9maWxlbmFtZSA9IHZhbHVlCjx8ZmltX2VuZHw+"]
["bdb173efbd5a1d6027d38d3629c177d40ac16748-2","bdb173efbd5a1d6027d38d3629c177d40ac16748","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKZnJvbSBpYmV4Lmdlb21ldHJ5IGltcG9ydCBpYjNzaGFwZXMKZnJvbSBpYmV4LnV0aWxpdGllcy5jb25zdGFudHMgaW1wb3J0ICoKCgpjbGFzcyBNZXRhRGF0YToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcmVmaXgpOgogICAgICAgICMgaW5pdGlhbGl6ZSB0aGUgcHJlZml4IHZhcmlhYmxlCiAgICAgICAgc2VsZi5wcmVmaXggPSBwcmVmaXgKCiAgICAgICAgIyBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eSB2YXJpYWJsZSBkZWZhdWx0cwogICAgICAgIHNlbGYuYWZmaW5pdHlfZmlsZW5hbWUgPSBOb25lCiAgICAgICAgc2VsZi5ib3VuZGFyeV9maWxlbmFtZSA9IE5vbmUKICAgICAgICBzZWxmLmdvbGRfZmlsZW5hbWUgPSBOb25lCiAgICAgICAgc2VsZi5pbWFnZV9maWxlbmFtZSA9IE5vbmUKICAgICAgICBzZWxmLm1hc2tfZmlsZW5hbWUgPSBOb25lCiAgICAgICAgc2VsZi5yaG9hbmFfZmlsZW5hbWUgPSBOb25lCiAgICAgICAgc2VsZi5zeW5hcHNlID0gTm9uZQogICAgICAgIHNlbGYuY3JvcF94bWluID0gTm9uZQogICAgICAgIHNlbGYuY3JvcF94bWF4ID0gTm9uZQogICAgICAgIHNlbGYuY3JvcF95bWluID0gTm9uZQogICAgICAgIHNlbGYuY3JvcF95bWF4ID0gTm9uZQogICAgICAgIHNlbGYuY3JvcF96bWluID0gTm9uZQogICAgICAgIHNlbGYuY3JvcF96bWF4ID0gTm9uZQoKICAgICAgICAjIG9wZW4gdGhlIG1ldGEgZGF0YSB0eHQgZmlsZQogICAgICAgIGZpbGVuYW1lID0gJ21ldGEve30ubWV0YScuZm9ybWF0KHByZWZpeCkKICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyJykgYXMgZmQ6CiAgICAgICAgICAgIGxpbmVzID0gZmQucmVhZGxpbmVzKCkKCiAgICAgICAgICAgIGZvciBpeCBpbiByYW5nZSgwLCBsZW4obGluZXMpLCAyKToKICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBjb21tZW50IGFuZCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZQogICAgICAgICAgICAgICAgY29tbWVudCA9IGxpbmVzW2l4XS5zdHJpcCgpCiAgICAgICAgICAgICAgICB2YWx1ZSA9IGxpbmVzW2l4ICsgMV0uc3RyaXAoKQoKICAgICAgICAgICAgICAgIGlmIGNvbW1lbnQgPT0gJyMgcmVzb2x1dGlvbiBpbiBubSc6CiAgICAgICAgICAgICAgICAgICAgIyBzZXBhcmF0ZSBpbnRvIGluZGl2aWR1YWwgZGltZW5zaW9ucwogICAgICAgICAgICAgICAgICAgIHNhbXBsZXMgPSB2YWx1ZS5zcGxpdCgneCcpCiAgICAgICAgICAgICAgICAgICAgIyBuZWVkIHRvIHVzZSAyLCAxLCBhbmQgMCBoZXJlIHNpbmNlIHRoZSBvdXR3YXJkIGZhY2luZyBjb252ZW50aW9uIGlzIHgseSx6LCBub3QgeiwgeSwgeAogICAgICAgICAgICAgICAgICAgIHNlbGYucmVzb2x1dGlvbiA9IChmbG9hdChzYW1wbGVzWzJdKSwgZmxvYXQoc2FtcGxlc1sxXSksIGZsb2F0KHNhbXBsZXNbMF0pKQogICAgICAgICAgICAgICAgZWxpZiBjb21tZW50ID09ICcjIGFmZmluaXR5IGZpbGVuYW1lJzoKICAgICAgICAgICAgICAgICAgICBzZWxmLmFmZmluaXR5X2ZpbGVuYW1lID0gdmFsdWUKICAgICAgICAgICAgICAgIGVsaWYgY29tbWVudCA9PSAnIyBib3VuZGFyeSBmaWxlbmFtZSc6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5ib3VuZGFyeV9maWxlbmFtZSA9IHZhbHVlCiAgICAgICAgICAgICAgICBlbGlmIGNvbW1lbnQgPT0gJyMgZ29sZCBmaWxlbmFtZSc6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5nb2xkX2ZpbGVuYW1lID0gdmFsdWUKICAgICAgICAgICAgICAgIGVsaWYgY29tbWVudCA9PSAnIyBpbWFnZSBmaWxlbmFtZSc6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbWFnZV9maWxlbmFtZSA9IHZhbHVlCiAgICAgICAgICAgICAgICBlbGlmIGNvbW1lbnQgPT0gJyMgbWFzayBmaWxlbmFtZSc6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXNrX2ZpbGVuYW1lID0gdmFsdWUKICAgICAgICAgICAgICAgIGVsaWYgY29tbWVudCA9PSAnIyByaG9hbmEgZmlsZW5hbWUnOgogICAgICAgICAgICAgICAgICAgIHNlbGYucmhvYW5hX2ZpbGVuYW1lID0gdmFsdWUKICAgICAgICAgICAgICAgIGVsaWYgY29tbWVudCA9PSAnIyBzeW5hcHNlIGZpbGVuYW1lJzoKICAgICAgICAgICAgICAgICAgICBzZWxmLnN5bmFwc2VfZmlsZW5hbWUgPSB2YWx1ZQogICAgICAgICAgICAgICAgZWxpZiBjb21tZW50ID09ICcjIHdvcmxkIGJvdW5kaW5nIGJveCc6CiAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUgPT0gJ05vbmUnOiAKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ib3VuZGluZ19ib3ggPSBpYjNzaGFwZXMuSUJCb3goKDAsIDAsIDApLCAoLTEsIC0xLCAtMSkpCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgIyBzZXBhcmF0ZSBpbnRvIG1pbmltdW1zIGFuZCBtYXhpbXVtcwogICAgICAgICAgICAgICAgICAgIG1pbm1heCA9IHZhbHVlLnNwbGl0KCctJykKICAgICAgICAgICAgICAgICAgICBtaW5zID0gKG1pbm1heFswXS5zdHJpcCgnKCknKSkuc3BsaXQoJywnKQogICAgICAgICAgICAgICAgICAgIG1heHMgPSAobWlubWF4WzFdLnN0cmlwKCcoKScpKS5zcGxpdCgnLCcpCgogICAgICAgICAgICAgICAgICAgICMgc3BsaXQgaW50byBpbmRpdmlkdWFsIG1pbnMKICAgICAgICAgICAgICAgICAgICBmb3IgaXYgaW4gcmFuZ2UoTkRJTVMpOgogICAgICAgICAgICAgICAgICAgICAgICBtaW5zW2l2XSA9IGludChtaW5zW2l2XSkKICAgICAgICAgICAgICAgICAgICAgICAgbWF4c1tpdl0gPSBpbnQobWF4c1tpdl0pCgogICAgICAgICAgICAgICAgICAgICMgc3dhcCB4IGFuZCB6CiAgICAgICAgICAgICAgICAgICAgdG1wID0gbWluc1swXQogICAgICAgICAgICAgICAgICAgIG1pbnNbMF0gPSBtaW5zWzJdCiAgICAgICAgICAgICAgICAgICAgbWluc1syXSA9IHRtcAoKICAgICAgICAgICAgICAgICAgICB0bXAgPSBtYXhzWzBdCiAgICAgICAgICAgICAgICAgICAgbWF4c1swXSA9IG1heHNbMl0KICAgICAgICAgICAgICAgICAgICBtYXhzWzJdID0gdG1wCgogICAgICAgICAgICAgICAgICAgICMgc2F2ZSB0aGUgYm91bmRpbmcgYm94CiAgICAgICAgICAgICAgICAgICAgc2VsZi5ib3VuZGluZ19ib3ggPSBpYjNzaGFwZXMuSUJCb3gobWlucywgbWF4cykKICAgICAgICAgICAgICAgIGVsaWYgY29tbWVudCA9PSAnIyBncmlkIHNpemUnOgogICAgICAgICAgICAgICAgICAgICMgcmVhZCB0aGUgZ3JpZCBzaXplIGluIHgsIHksIHogb3JkZXIKICAgICAgICAgICAgICAgICAgICBzYW1wbGVzID0gdmFsdWUuc3BsaXQoJ3gnKQogICAgICAgICAgICAgICAgICAgIHNlbGYuZ3JpZF9zaXplID0gKGludChzYW1wbGVzWzJdKSwgaW50KHNhbXBsZXNbMV0pLCBpbnQoc2FtcGxlc1swXSkpCiAgICAgICAgICAgICAgICBlbGlmIGNvbW1lbnQgPT0gJyMgdHJhaW4vdmFsL3Rlc3QgY3JvcCc6CiAgICAgICAgICAgICAgICAgICAgc2FtcGxlcyA9IHZhbHVlLnNwbGl0KCd4JykKICAgICAgICAgICAgICAgICAgICAjIHJlYWQgdGhlIGNyb3AgaW4geCwgeSwgeiBvcmRlcgogICAgICAgICAgICAgICAgICAgIHNlbGYuY3JvcF94bWluID0gaW50KHNhbXBsZXNbMF0uc3BsaXQoJzonKVswXSkKICAgICAgICAgICAgICAgICAgICBzZWxmLmNyb3BfeG1heCA9IGludChzYW1wbGVzWzBdLnNwbGl0KCc6JylbMV0pCiAgICAgICAgICAgICAgICAgICAgc2VsZi5jcm9wX3ltaW4gPSBpbnQoc2FtcGxlc1sxXS5zcGxpdCgnOicpWzBdKQogICAgICAgICAgICAgICAgICAgIHNlbGYuY3JvcF95bWF4ID0gaW50KHNhbXBsZXNbMV0uc3BsaXQoJzonKVsxXSkKICAgICAgICAgICAgICAgICAgICBzZWxmLmNyb3Bfem1pbiA9IGludChzYW1wbGVzWzJdLnNwbGl0KCc6JylbMF0pCiAgICAgICAgICAgICAgICAgICAgc2VsZi5jcm9wX3ptYXggPSBpbnQoc2FtcGxlc1syXS5zcGxpdCgnOicpWzFdKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdVbnJlY29nbml6ZWQgYXR0cmlidXRlIGluIHt9OiB7fVxuJy5mb3JtYXQocHJlZml4LCBjb21tZW50KSkKICAgICAgICAgICAgICAgICAgICBzeXMuZXhpdCgpCgogICAgZGVmIENyb3BwaW5nQm94KHNlbGYpOgogICAgICAgIGlmIHNlbGYuY3JvcF94bWluID09IE5vbmU6CiAgICAgICAgICAgIHJldHVybiAoKDAsIHNlbGYuZ3JpZF9zaXplW0lCX1pdKSwgKDAsIHNlbGYuZ3JpZF9zaXplW0lCX1ldKSwgKDAsIHNlbGYuZ3JpZF9zaXplW0lCX1hdKSkKICAgICAgICByZXR1cm4gKChzZWxmLmNyb3Bfem1pbiwgc2VsZi5jcm9wX3ptYXgpLCAoc2VsZi5jcm9wX3ltaW4sIHNlbGYuY3JvcF95bWF4KSwgKHNlbGYuY3JvcF94bWluLCBzZWxmLmNyb3BfeG1heCkpCgogICAgZGVmIFdvcmxkQkJveChzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5ib3VuZGluZ19ib3gKCiAgICBkZWYgUmVzb2x1dGlvbihzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5yZXNvbHV0aW9uCgogICAgZGVmIEdvbGRGaWxlbmFtZShzZWxmKToKICAgICAgICBpZiBzZWxmLmdvbGRfZmlsZW5hbWUgPT0gTm9uZToKICAgICAgICAgICAgcmV0dXJuICdnb2xkL3t9X2dvbGQuaDUnLmZvcm1hdChzZWxmLnByZWZpeCksICdtYWluJwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBzZWxmLmdvbGRfZmlsZW5hbWUuc3BsaXQoKVswXSwgc2VsZi5nb2xkX2ZpbGVuYW1lLnNwbGl0KClbMV0KCiAgICBkZWYgSW1hZ2VGaWxlbmFtZShzZWxmKToKICAgICAgICBpZiBzZWxmLmltYWdlX2ZpbGVuYW1lID09IE5vbmU6Cjx8ZmltX2hvbGV8PgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBzZWxmLmltYWdlX2ZpbGVuYW1lLnNwbGl0KClbMF0sIHNlbGYuaW1hZ2VfZmlsZW5hbWUuc3BsaXQoKVsxXQoKICAgIGRlZiBTZWdtZW50YXRpb25GaWxlbmFtZShzZWxmKToKICAgICAgICBpZiBzZWxmLnJob2FuYV9maWxlbmFtZSA9PSBOb25lOgogICAgICAgICAgICByZXR1cm4gJ3Job2FuYS97fV9yaG9hbmEuaDUnLmZvcm1hdChzZWxmLnByZWZpeCksICdtYWluJwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBzZWxmLnJob2FuYV9maWxlbmFtZS5zcGxpdCgpWzBdLCBzZWxmLnJob2FuYV9maWxlbmFtZS5zcGxpdCgpWzFdCgogICAgZGVmIEFmZmluaXR5RmlsZW5hbWUoc2VsZik6CiAgICAgICAgaWYgc2VsZi5hZmZpbml0eV9maWxlbmFtZSA9PSBOb25lOgogICAgICAgICAgICByZXR1cm4gJ2FmZmluaXRpZXMve31fYWZmaW5pdGllcy5oNScuZm9ybWF0KHNlbGYucHJlZml4KSwgJ21haW4nCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIHNlbGYuYWZmaW5pdHlfZmlsZW5hbWUuc3BsaXQoKVswXSwgc2VsZi5hZmZpbml0eV9maWxlbmFtZS5zcGxpdCgpWzFdCgogICAgZGVmIEdyaWRTaXplKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmdyaWRfc2l6ZQoKICAgIGRlZiBXcml0ZU1ldGFGaWxlKHNlbGYpOgogICAgICAgIG1ldGFfZmlsZW5hbWUgPSAnbWV0YS97fS5tZXRhJy5mb3JtYXQoc2VsZi5wcmVmaXgpCgogICAgICAgIHdpdGggb3BlbihtZXRhX2ZpbGVuYW1lLCAndycpIGFzIGZkOgogICAgICAgICAgICAjIHdyaXRlIHRoZSByZXNvbHV0aW9uIGluIHgsIHksIHogb3JkZXIKICAgICAgICAgICAgZmQud3JpdGUoJyMgcmVzb2x1dGlvbiBpbiBubVxuJykKICAgICAgICAgICAgZmQud3JpdGUoJ3t9eHt9eHt9XG4nLmZvcm1hdChzZWxmLnJlc29sdXRpb25bMl0sIHNlbGYucmVzb2x1dGlvblsxXSwgc2VsZi5yZXNvbHV0aW9uWzBdKSkKCiAgICAgICAgICAgIGZkLndyaXRlKCcjIGFmZmluaXR5IGZpbGVuYW1lXG4nKQogICAgICAgICAgICBmZC53cml0ZSgne31cbicuZm9ybWF0KHNlbGYuYWZmaW5pdHlfZmlsZW5hbWUpKQoKICAgICAgICAgICAgZmQud3JpdGUoJyMgYm91bmRhcnkgZmlsZW5hbWVcbicpCiAgICAgICAgICAgIGZkLndyaXRlKCd7fVxuJy5mb3JtYXQoc2VsZi5ib3VuZGFyeV9maWxlbmFtZSkpCgogICAgICAgICAgICBmZC53cml0ZSgnIyBnb2xkIGZpbGVuYW1lXG4nKQogICAgICAgICAgICBmZC53cml0ZSgne31cbicuZm9ybWF0KHNlbGYuZ29sZF9maWxlbmFtZSkpCgogICAgICAgICAgICBmZC53cml0ZSgnIyBpbWFnZSBmaWxlbmFtZVxuJykKICAgICAgICAgICAgZmQud3JpdGUoJ3t9XG4nLmZvcm1hdChzZWxmLmltYWdlX2ZpbGVuYW1lKSkKCiAgICAgICAgICAgIGZkLndyaXRlKCcjIG1hc2sgZmlsZW5hbWVcbicpCiAgICAgICAgICAgIGZkLndyaXRlKCd7fVxuJy5mb3JtYXQoc2VsZi5tYXNrX2ZpbGVuYW1lKSkKCiAgICAgICAgICAgIGZkLndyaXRlKCcjIHJob2FuYSBmaWxlbmFtZVxuJykKICAgICAgICAgICAgZmQud3JpdGUoJ3t9XG4nLmZvcm1hdChzZWxmLnJob2FuYV9maWxlbmFtZSkpCgogICAgICAgICAgICBmZC53cml0ZSgnIyBzeW5hcHNlIGZpbGVuYW1lXG4nKQogICAgICAgICAgICBmZC53cml0ZSgne31cbicuZm9ybWF0KHNlbGYuc3luYXBzZV9maWxlbmFtZSkpCgogICAgICAgICAgICAjIyMgVEVNUE9SQVJZIEhBQ0sgIyMjCiAgICAgICAgICAgIGZkLndyaXRlKCcjIHdvcmxkIGJvdW5kaW5nIGJveFxuJykKICAgICAgICAgICAgZmQud3JpdGUoJ05vbmVcbicpCgogICAgICAgICAgICAjIHdyaXRlIHRoZSBncmlkIHNpemUgaW4geCwgeSwgeiBvcmRlcgogICAgICAgICAgICBmZC53cml0ZSgnIyBncmlkIHNpemVcbicpCiAgICAgICAgICAgIGZkLndyaXRlKCd7fXh7fXh7fVxuJy5mb3JtYXQoc2VsZi5ncmlkX3NpemVbMl0sIHNlbGYuZ3JpZF9zaXplWzFdLCBzZWxmLmdyaWRfc2l6ZVswXSkpCgogICAgICAgICAgICAjIHdyaXRlIHRoZSBjcm9wIGluIHgsIHksIHogb3JkZXIKICAgICAgICAgICAgZmQud3JpdGUoJyMgdHJhaW4vdmFsL3Rlc3QgY3JvcFxuJykKICAgICAgICAgICAgIyBuZWVkIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIGhlcmUgc28gdGhhdCB3ZSBnZXQgdGhlIGdyaWQgc2l6ZSBpZiB0aGVyZSB3YXMgbm9uIGluIHRoZSBvcmlnaW5hbCBtZXRhIGZpbGUKICAgICAgICAgICAgKGNyb3Bfem1pbiwgY3JvcF96bWF4KSwgKGNyb3BfeW1pbiwgY3JvcF95bWF4KSwgKGNyb3BfeG1pbiwgY3JvcF94bWF4KSA9IHNlbGYuQ3JvcHBpbmdCb3goKQogICAgICAgICAgICBmZC53cml0ZSgne306e314e306e314e306e31cbicuZm9ybWF0KGNyb3BfeG1pbiwgY3JvcF94bWF4LCBjcm9wX3ltaW4sIGNyb3BfeW1heCwgY3JvcF96bWluLCBjcm9wX3ptYXgpKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICByZXR1cm4gJ2ltYWdlcy97fV9pbWFnZS5oNScuZm9ybWF0KHNlbGYucHJlZml4KSwgJ21haW4nCjx8ZmltX2VuZHw+"]
["bdb173efbd5a1d6027d38d3629c177d40ac16748-3","bdb173efbd5a1d6027d38d3629c177d40ac16748","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKZnJvbSBpYmV4Lmdlb21ldHJ5IGltcG9ydCBpYjNzaGFwZXMKZnJvbSBpYmV4LnV0aWxpdGllcy5jb25zdGFudHMgaW1wb3J0ICoKCgpjbGFzcyBNZXRhRGF0YToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcmVmaXgpOgogICAgICAgICMgaW5pdGlhbGl6ZSB0aGUgcHJlZml4IHZhcmlhYmxlCiAgICAgICAgc2VsZi5wcmVmaXggPSBwcmVmaXgKCiAgICAgICAgIyBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eSB2YXJpYWJsZSBkZWZhdWx0cwogICAgICAgIHNlbGYuYWZmaW5pdHlfZmlsZW5hbWUgPSBOb25lCiAgICAgICAgc2VsZi5ib3VuZGFyeV9maWxlbmFtZSA9IE5vbmUKICAgICAgICBzZWxmLmdvbGRfZmlsZW5hbWUgPSBOb25lCiAgICAgICAgc2VsZi5pbWFnZV9maWxlbmFtZSA9IE5vbmUKICAgICAgICBzZWxmLm1hc2tfZmlsZW5hbWUgPSBOb25lCiAgICAgICAgc2VsZi5yaG9hbmFfZmlsZW5hbWUgPSBOb25lCiAgICAgICAgc2VsZi5zeW5hcHNlID0gTm9uZQogICAgICAgIHNlbGYuY3JvcF94bWluID0gTm9uZQogICAgICAgIHNlbGYuY3JvcF94bWF4ID0gTm9uZQogICAgICAgIHNlbGYuY3JvcF95bWluID0gTm9uZQo8fGZpbV9ob2xlfD4KICAgICAgICAjIG9wZW4gdGhlIG1ldGEgZGF0YSB0eHQgZmlsZQogICAgICAgIGZpbGVuYW1lID0gJ21ldGEve30ubWV0YScuZm9ybWF0KHByZWZpeCkKICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyJykgYXMgZmQ6CiAgICAgICAgICAgIGxpbmVzID0gZmQucmVhZGxpbmVzKCkKCiAgICAgICAgICAgIGZvciBpeCBpbiByYW5nZSgwLCBsZW4obGluZXMpLCAyKToKICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBjb21tZW50IGFuZCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZQogICAgICAgICAgICAgICAgY29tbWVudCA9IGxpbmVzW2l4XS5zdHJpcCgpCiAgICAgICAgICAgICAgICB2YWx1ZSA9IGxpbmVzW2l4ICsgMV0uc3RyaXAoKQoKICAgICAgICAgICAgICAgIGlmIGNvbW1lbnQgPT0gJyMgcmVzb2x1dGlvbiBpbiBubSc6CiAgICAgICAgICAgICAgICAgICAgIyBzZXBhcmF0ZSBpbnRvIGluZGl2aWR1YWwgZGltZW5zaW9ucwogICAgICAgICAgICAgICAgICAgIHNhbXBsZXMgPSB2YWx1ZS5zcGxpdCgneCcpCiAgICAgICAgICAgICAgICAgICAgIyBuZWVkIHRvIHVzZSAyLCAxLCBhbmQgMCBoZXJlIHNpbmNlIHRoZSBvdXR3YXJkIGZhY2luZyBjb252ZW50aW9uIGlzIHgseSx6LCBub3QgeiwgeSwgeAogICAgICAgICAgICAgICAgICAgIHNlbGYucmVzb2x1dGlvbiA9IChmbG9hdChzYW1wbGVzWzJdKSwgZmxvYXQoc2FtcGxlc1sxXSksIGZsb2F0KHNhbXBsZXNbMF0pKQogICAgICAgICAgICAgICAgZWxpZiBjb21tZW50ID09ICcjIGFmZmluaXR5IGZpbGVuYW1lJzoKICAgICAgICAgICAgICAgICAgICBzZWxmLmFmZmluaXR5X2ZpbGVuYW1lID0gdmFsdWUKICAgICAgICAgICAgICAgIGVsaWYgY29tbWVudCA9PSAnIyBib3VuZGFyeSBmaWxlbmFtZSc6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5ib3VuZGFyeV9maWxlbmFtZSA9IHZhbHVlCiAgICAgICAgICAgICAgICBlbGlmIGNvbW1lbnQgPT0gJyMgZ29sZCBmaWxlbmFtZSc6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5nb2xkX2ZpbGVuYW1lID0gdmFsdWUKICAgICAgICAgICAgICAgIGVsaWYgY29tbWVudCA9PSAnIyBpbWFnZSBmaWxlbmFtZSc6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbWFnZV9maWxlbmFtZSA9IHZhbHVlCiAgICAgICAgICAgICAgICBlbGlmIGNvbW1lbnQgPT0gJyMgbWFzayBmaWxlbmFtZSc6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXNrX2ZpbGVuYW1lID0gdmFsdWUKICAgICAgICAgICAgICAgIGVsaWYgY29tbWVudCA9PSAnIyByaG9hbmEgZmlsZW5hbWUnOgogICAgICAgICAgICAgICAgICAgIHNlbGYucmhvYW5hX2ZpbGVuYW1lID0gdmFsdWUKICAgICAgICAgICAgICAgIGVsaWYgY29tbWVudCA9PSAnIyBzeW5hcHNlIGZpbGVuYW1lJzoKICAgICAgICAgICAgICAgICAgICBzZWxmLnN5bmFwc2VfZmlsZW5hbWUgPSB2YWx1ZQogICAgICAgICAgICAgICAgZWxpZiBjb21tZW50ID09ICcjIHdvcmxkIGJvdW5kaW5nIGJveCc6CiAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUgPT0gJ05vbmUnOiAKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ib3VuZGluZ19ib3ggPSBpYjNzaGFwZXMuSUJCb3goKDAsIDAsIDApLCAoLTEsIC0xLCAtMSkpCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgIyBzZXBhcmF0ZSBpbnRvIG1pbmltdW1zIGFuZCBtYXhpbXVtcwogICAgICAgICAgICAgICAgICAgIG1pbm1heCA9IHZhbHVlLnNwbGl0KCctJykKICAgICAgICAgICAgICAgICAgICBtaW5zID0gKG1pbm1heFswXS5zdHJpcCgnKCknKSkuc3BsaXQoJywnKQogICAgICAgICAgICAgICAgICAgIG1heHMgPSAobWlubWF4WzFdLnN0cmlwKCcoKScpKS5zcGxpdCgnLCcpCgogICAgICAgICAgICAgICAgICAgICMgc3BsaXQgaW50byBpbmRpdmlkdWFsIG1pbnMKICAgICAgICAgICAgICAgICAgICBmb3IgaXYgaW4gcmFuZ2UoTkRJTVMpOgogICAgICAgICAgICAgICAgICAgICAgICBtaW5zW2l2XSA9IGludChtaW5zW2l2XSkKICAgICAgICAgICAgICAgICAgICAgICAgbWF4c1tpdl0gPSBpbnQobWF4c1tpdl0pCgogICAgICAgICAgICAgICAgICAgICMgc3dhcCB4IGFuZCB6CiAgICAgICAgICAgICAgICAgICAgdG1wID0gbWluc1swXQogICAgICAgICAgICAgICAgICAgIG1pbnNbMF0gPSBtaW5zWzJdCiAgICAgICAgICAgICAgICAgICAgbWluc1syXSA9IHRtcAoKICAgICAgICAgICAgICAgICAgICB0bXAgPSBtYXhzWzBdCiAgICAgICAgICAgICAgICAgICAgbWF4c1swXSA9IG1heHNbMl0KICAgICAgICAgICAgICAgICAgICBtYXhzWzJdID0gdG1wCgogICAgICAgICAgICAgICAgICAgICMgc2F2ZSB0aGUgYm91bmRpbmcgYm94CiAgICAgICAgICAgICAgICAgICAgc2VsZi5ib3VuZGluZ19ib3ggPSBpYjNzaGFwZXMuSUJCb3gobWlucywgbWF4cykKICAgICAgICAgICAgICAgIGVsaWYgY29tbWVudCA9PSAnIyBncmlkIHNpemUnOgogICAgICAgICAgICAgICAgICAgICMgcmVhZCB0aGUgZ3JpZCBzaXplIGluIHgsIHksIHogb3JkZXIKICAgICAgICAgICAgICAgICAgICBzYW1wbGVzID0gdmFsdWUuc3BsaXQoJ3gnKQogICAgICAgICAgICAgICAgICAgIHNlbGYuZ3JpZF9zaXplID0gKGludChzYW1wbGVzWzJdKSwgaW50KHNhbXBsZXNbMV0pLCBpbnQoc2FtcGxlc1swXSkpCiAgICAgICAgICAgICAgICBlbGlmIGNvbW1lbnQgPT0gJyMgdHJhaW4vdmFsL3Rlc3QgY3JvcCc6CiAgICAgICAgICAgICAgICAgICAgc2FtcGxlcyA9IHZhbHVlLnNwbGl0KCd4JykKICAgICAgICAgICAgICAgICAgICAjIHJlYWQgdGhlIGNyb3AgaW4geCwgeSwgeiBvcmRlcgogICAgICAgICAgICAgICAgICAgIHNlbGYuY3JvcF94bWluID0gaW50KHNhbXBsZXNbMF0uc3BsaXQoJzonKVswXSkKICAgICAgICAgICAgICAgICAgICBzZWxmLmNyb3BfeG1heCA9IGludChzYW1wbGVzWzBdLnNwbGl0KCc6JylbMV0pCiAgICAgICAgICAgICAgICAgICAgc2VsZi5jcm9wX3ltaW4gPSBpbnQoc2FtcGxlc1sxXS5zcGxpdCgnOicpWzBdKQogICAgICAgICAgICAgICAgICAgIHNlbGYuY3JvcF95bWF4ID0gaW50KHNhbXBsZXNbMV0uc3BsaXQoJzonKVsxXSkKICAgICAgICAgICAgICAgICAgICBzZWxmLmNyb3Bfem1pbiA9IGludChzYW1wbGVzWzJdLnNwbGl0KCc6JylbMF0pCiAgICAgICAgICAgICAgICAgICAgc2VsZi5jcm9wX3ptYXggPSBpbnQoc2FtcGxlc1syXS5zcGxpdCgnOicpWzFdKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdVbnJlY29nbml6ZWQgYXR0cmlidXRlIGluIHt9OiB7fVxuJy5mb3JtYXQocHJlZml4LCBjb21tZW50KSkKICAgICAgICAgICAgICAgICAgICBzeXMuZXhpdCgpCgogICAgZGVmIENyb3BwaW5nQm94KHNlbGYpOgogICAgICAgIGlmIHNlbGYuY3JvcF94bWluID09IE5vbmU6CiAgICAgICAgICAgIHJldHVybiAoKDAsIHNlbGYuZ3JpZF9zaXplW0lCX1pdKSwgKDAsIHNlbGYuZ3JpZF9zaXplW0lCX1ldKSwgKDAsIHNlbGYuZ3JpZF9zaXplW0lCX1hdKSkKICAgICAgICByZXR1cm4gKChzZWxmLmNyb3Bfem1pbiwgc2VsZi5jcm9wX3ptYXgpLCAoc2VsZi5jcm9wX3ltaW4sIHNlbGYuY3JvcF95bWF4KSwgKHNlbGYuY3JvcF94bWluLCBzZWxmLmNyb3BfeG1heCkpCgogICAgZGVmIFdvcmxkQkJveChzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5ib3VuZGluZ19ib3gKCiAgICBkZWYgUmVzb2x1dGlvbihzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5yZXNvbHV0aW9uCgogICAgZGVmIEdvbGRGaWxlbmFtZShzZWxmKToKICAgICAgICBpZiBzZWxmLmdvbGRfZmlsZW5hbWUgPT0gTm9uZToKICAgICAgICAgICAgcmV0dXJuICdnb2xkL3t9X2dvbGQuaDUnLmZvcm1hdChzZWxmLnByZWZpeCksICdtYWluJwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBzZWxmLmdvbGRfZmlsZW5hbWUuc3BsaXQoKVswXSwgc2VsZi5nb2xkX2ZpbGVuYW1lLnNwbGl0KClbMV0KCiAgICBkZWYgSW1hZ2VGaWxlbmFtZShzZWxmKToKICAgICAgICBpZiBzZWxmLmltYWdlX2ZpbGVuYW1lID09IE5vbmU6CiAgICAgICAgICAgIHJldHVybiAnaW1hZ2VzL3t9X2ltYWdlLmg1Jy5mb3JtYXQoc2VsZi5wcmVmaXgpLCAnbWFpbicKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gc2VsZi5pbWFnZV9maWxlbmFtZS5zcGxpdCgpWzBdLCBzZWxmLmltYWdlX2ZpbGVuYW1lLnNwbGl0KClbMV0KCiAgICBkZWYgU2VnbWVudGF0aW9uRmlsZW5hbWUoc2VsZik6CiAgICAgICAgaWYgc2VsZi5yaG9hbmFfZmlsZW5hbWUgPT0gTm9uZToKICAgICAgICAgICAgcmV0dXJuICdyaG9hbmEve31fcmhvYW5hLmg1Jy5mb3JtYXQoc2VsZi5wcmVmaXgpLCAnbWFpbicKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gc2VsZi5yaG9hbmFfZmlsZW5hbWUuc3BsaXQoKVswXSwgc2VsZi5yaG9hbmFfZmlsZW5hbWUuc3BsaXQoKVsxXQoKICAgIGRlZiBBZmZpbml0eUZpbGVuYW1lKHNlbGYpOgogICAgICAgIGlmIHNlbGYuYWZmaW5pdHlfZmlsZW5hbWUgPT0gTm9uZToKICAgICAgICAgICAgcmV0dXJuICdhZmZpbml0aWVzL3t9X2FmZmluaXRpZXMuaDUnLmZvcm1hdChzZWxmLnByZWZpeCksICdtYWluJwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBzZWxmLmFmZmluaXR5X2ZpbGVuYW1lLnNwbGl0KClbMF0sIHNlbGYuYWZmaW5pdHlfZmlsZW5hbWUuc3BsaXQoKVsxXQoKICAgIGRlZiBHcmlkU2l6ZShzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5ncmlkX3NpemUKCiAgICBkZWYgV3JpdGVNZXRhRmlsZShzZWxmKToKICAgICAgICBtZXRhX2ZpbGVuYW1lID0gJ21ldGEve30ubWV0YScuZm9ybWF0KHNlbGYucHJlZml4KQoKICAgICAgICB3aXRoIG9wZW4obWV0YV9maWxlbmFtZSwgJ3cnKSBhcyBmZDoKICAgICAgICAgICAgIyB3cml0ZSB0aGUgcmVzb2x1dGlvbiBpbiB4LCB5LCB6IG9yZGVyCiAgICAgICAgICAgIGZkLndyaXRlKCcjIHJlc29sdXRpb24gaW4gbm1cbicpCiAgICAgICAgICAgIGZkLndyaXRlKCd7fXh7fXh7fVxuJy5mb3JtYXQoc2VsZi5yZXNvbHV0aW9uWzJdLCBzZWxmLnJlc29sdXRpb25bMV0sIHNlbGYucmVzb2x1dGlvblswXSkpCgogICAgICAgICAgICBmZC53cml0ZSgnIyBhZmZpbml0eSBmaWxlbmFtZVxuJykKICAgICAgICAgICAgZmQud3JpdGUoJ3t9XG4nLmZvcm1hdChzZWxmLmFmZmluaXR5X2ZpbGVuYW1lKSkKCiAgICAgICAgICAgIGZkLndyaXRlKCcjIGJvdW5kYXJ5IGZpbGVuYW1lXG4nKQogICAgICAgICAgICBmZC53cml0ZSgne31cbicuZm9ybWF0KHNlbGYuYm91bmRhcnlfZmlsZW5hbWUpKQoKICAgICAgICAgICAgZmQud3JpdGUoJyMgZ29sZCBmaWxlbmFtZVxuJykKICAgICAgICAgICAgZmQud3JpdGUoJ3t9XG4nLmZvcm1hdChzZWxmLmdvbGRfZmlsZW5hbWUpKQoKICAgICAgICAgICAgZmQud3JpdGUoJyMgaW1hZ2UgZmlsZW5hbWVcbicpCiAgICAgICAgICAgIGZkLndyaXRlKCd7fVxuJy5mb3JtYXQoc2VsZi5pbWFnZV9maWxlbmFtZSkpCgogICAgICAgICAgICBmZC53cml0ZSgnIyBtYXNrIGZpbGVuYW1lXG4nKQogICAgICAgICAgICBmZC53cml0ZSgne31cbicuZm9ybWF0KHNlbGYubWFza19maWxlbmFtZSkpCgogICAgICAgICAgICBmZC53cml0ZSgnIyByaG9hbmEgZmlsZW5hbWVcbicpCiAgICAgICAgICAgIGZkLndyaXRlKCd7fVxuJy5mb3JtYXQoc2VsZi5yaG9hbmFfZmlsZW5hbWUpKQoKICAgICAgICAgICAgZmQud3JpdGUoJyMgc3luYXBzZSBmaWxlbmFtZVxuJykKICAgICAgICAgICAgZmQud3JpdGUoJ3t9XG4nLmZvcm1hdChzZWxmLnN5bmFwc2VfZmlsZW5hbWUpKQoKICAgICAgICAgICAgIyMjIFRFTVBPUkFSWSBIQUNLICMjIwogICAgICAgICAgICBmZC53cml0ZSgnIyB3b3JsZCBib3VuZGluZyBib3hcbicpCiAgICAgICAgICAgIGZkLndyaXRlKCdOb25lXG4nKQoKICAgICAgICAgICAgIyB3cml0ZSB0aGUgZ3JpZCBzaXplIGluIHgsIHksIHogb3JkZXIKICAgICAgICAgICAgZmQud3JpdGUoJyMgZ3JpZCBzaXplXG4nKQogICAgICAgICAgICBmZC53cml0ZSgne314e314e31cbicuZm9ybWF0KHNlbGYuZ3JpZF9zaXplWzJdLCBzZWxmLmdyaWRfc2l6ZVsxXSwgc2VsZi5ncmlkX3NpemVbMF0pKQoKICAgICAgICAgICAgIyB3cml0ZSB0aGUgY3JvcCBpbiB4LCB5LCB6IG9yZGVyCiAgICAgICAgICAgIGZkLndyaXRlKCcjIHRyYWluL3ZhbC90ZXN0IGNyb3BcbicpCiAgICAgICAgICAgICMgbmVlZCB0byBjYWxsIHRoZSBmdW5jdGlvbiBoZXJlIHNvIHRoYXQgd2UgZ2V0IHRoZSBncmlkIHNpemUgaWYgdGhlcmUgd2FzIG5vbiBpbiB0aGUgb3JpZ2luYWwgbWV0YSBmaWxlCiAgICAgICAgICAgIChjcm9wX3ptaW4sIGNyb3Bfem1heCksIChjcm9wX3ltaW4sIGNyb3BfeW1heCksIChjcm9wX3htaW4sIGNyb3BfeG1heCkgPSBzZWxmLkNyb3BwaW5nQm94KCkKICAgICAgICAgICAgZmQud3JpdGUoJ3t9Ont9eHt9Ont9eHt9Ont9XG4nLmZvcm1hdChjcm9wX3htaW4sIGNyb3BfeG1heCwgY3JvcF95bWluLCBjcm9wX3ltYXgsIGNyb3Bfem1pbiwgY3JvcF96bWF4KSkKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmNyb3BfeW1heCA9IE5vbmUKICAgICAgICBzZWxmLmNyb3Bfem1pbiA9IE5vbmUKICAgICAgICBzZWxmLmNyb3Bfem1heCA9IE5vbmUKCjx8ZmltX2VuZHw+"]
["a9c9c2adc66e9646a0ef54adfd6fb88dc7e72fbb-1","a9c9c2adc66e9646a0ef54adfd6fb88dc7e72fbb","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KX19hdXRob3JfXyA9ICdjaGVuZmVpJwo8fGZpbV9lbmR8Pg=="]
["68ccdd4ade464cbd2d29bb7366cb7099377043e0-1","68ccdd4ade464cbd2d29bb7366cb7099377043e0","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyA9ICdqZ2FybWFuJwoKaW1wb3J0IHVuaXR0ZXN0CmZyb20gY2JpbnQudXRpbHMuZGV0b25hdGlvbiBpbXBvcnQgRGV0b25hdGlvbkRhZW1vbiwgQ2JBUElVcFRvRGF0ZVByb2R1Y2VyVGhyZWFkLCBDYkFQSUhpc3RvcmljYWxQcm9kdWNlclRocmVhZAppbXBvcnQgb3MKaW1wb3J0IHRlbXBmaWxlCmltcG9ydCBzeXMKaW1wb3J0IHRocmVhZGluZwppbXBvcnQgc29ja2V0CmZyb20gdGltZSBpbXBvcnQgc2xlZXAKaW1wb3J0IGRhdGV1dGlsLnBhcnNlcgppbXBvcnQgbG9nZ2luZwoKc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkKZnJvbSB1dGlscy5tb2NrX3NlcnZlciBpbXBvcnQgZ2V0X21vY2tlZF9zZXJ2ZXIKCmxvZ2dpbmcuYmFzaWNDb25maWcoKQpsb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKbG9nLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCgoKY2xhc3MgVGVzdERhZW1vbihEZXRvbmF0aW9uRGFlbW9uKToKICAgIHBhc3MKCgpjbGFzcyBTZXJ2ZXJOZXZlcldva2VVcEVycm9yKEV4Y2VwdGlvbik6CiAgICBwYXNzCgoKZGVmIHNsZWVwX3RpbGxfYXZhaWxhYmxlKGNvbm5fdHVwbGUpOgogICAgbnVtX3JldHJpZXMgPSA1CiAgICB3aGlsZSBudW1fcmV0cmllczoKICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBzLmNvbm5lY3QoY29ubl90dXBsZSkKICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgogICAgICAgICAgICBudW1fcmV0cmllcyAtPSAxCiAgICAgICAgICAgIHNsZWVwKC4xKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybgoKICAgIHJhaXNlIFNlcnZlck5ldmVyV29rZVVwRXJyb3IoY29ubl90dXBsZSkKCgpjbGFzcyBEYWVtb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKICAgICAgICBteWRpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQoKICAgICAgICBiaW5hcmllc19kaXIgPSBvcy5wYXRoLmpvaW4obXlkaXIsICdkYXRhJywgJ2JpbmFyeV9tZXRhZGF0YScpCiAgICAgICAgY2xzLm1vY2tfc2VydmVyID0gZ2V0X21vY2tlZF9zZXJ2ZXIoYmluYXJpZXNfZGlyKQogICAgICAgIGNscy5tb2NrX3NlcnZlcl90aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1jbHMubW9ja19zZXJ2ZXIucnVuLCBhcmdzPVsnMTI3LjAuMC4xJywgNzk4Ml0pCiAgICAgICAgY2xzLm1vY2tfc2VydmVyX3RocmVhZC5kYWVtb24gPSBUcnVlCiAgICAgICAgY2xzLm1vY2tfc2VydmVyX3RocmVhZC5zdGFydCgpCiAgICAgICAgc2xlZXBfdGlsbF9hdmFpbGFibGUoKCcxMjcuMC4wLjEnLCA3OTgyKSkKCiAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgc2VsZi50ZW1wX2RpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQogICAgICAgIGNvbmZpZ19wYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSwgImRhdGEiLCAiZGFlbW9uLmNvbmYiKQogICAgICAgIHNlbGYuZGFlbW9uID0gVGVzdERhZW1vbigidGVzdGRhZW1vbiIsIGNvbmZpZ2ZpbGU9Y29uZmlnX3BhdGgsIHdvcmtfZGlyZWN0b3J5PXNlbGYudGVtcF9kaXJlY3RvcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ZpbGU9b3MucGF0aC5qb2luKHNlbGYudGVtcF9kaXJlY3RvcnksICd0ZXN0LmxvZycpLCBkZWJ1Zz1UcnVlKQogICAgICAgIHNlbGYuZGFlbW9uLnZhbGlkYXRlX2NvbmZpZygpCgogICAgICAgIHNlbGYuZGFlbW9uLmluaXRpYWxpemVfcXVldWUoKQoKICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAjIG9zLnJtZGlyKHNlbGYudGVtcF9kaXJlY3RvcnkpCiAgICAgICAgIyBzZWxmLm1vY2tfc2VydmVyX3RocmVhZC50ZXJtaW5hdGUoKQogICAgICAgIHBhc3MKCiAgICBkZWYgdGVzdF9iaW5hcnlfY29sbGVjdG9ycyhzZWxmKToKICAgICAgICBub3cgPSBkYXRldXRpbC5wYXJzZXIucGFyc2UoJzIwMTUtMDctMDEnKQogICAgICAgIGhpc3RvcmljYWxfcHJvZHVjZXIgPSBDYkFQSUhpc3RvcmljYWxQcm9kdWNlclRocmVhZChzZWxmLmRhZW1vbi53b3JrX3F1ZXVlLCBzZWxmLmRhZW1vbi5jYiwgc2VsZi5kYWVtb24ubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0ZV9saW1pdGVyPTAsIHN0b3Bfd2hlbl9kb25lPVRydWUsIHN0YXJ0X3RpbWU9bm93KQogICAgICAgIGhpc3RvcmljYWxfcHJvZHVjZXIucnVuKCkKCiAgICAgICAgdXBfdG9fZGF0ZV9wcm9kdWNlciA9IENiQVBJVXBUb0RhdGVQcm9kdWNlclRocmVhZChzZWxmLmRhZW1vbi53b3JrX3F1ZXVlLCBzZWxmLmRhZW1vbi5jYiwgc2VsZi5kYWVtb24ubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdGVfbGltaXRlcj0wLCBzdG9wX3doZW5fZG9uZT1UcnVlLCBzdGFydF90aW1lPW5vdykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHVwX3RvX2RhdGVfcHJvZHVjZXIucnVuKCkKCiAgICAgICAgbG9nLmluZm8oJ2VhcmxpZXN0IGJpbmFyeTogJXMnICUgc2VsZi5kYWVtb24ud29ya19xdWV1ZS5nZXRfdmFsdWUoJ0NiQVBJSGlzdG9yaWNhbFByb2R1Y2VyVGhyZWFkX3N0YXJ0X3RpbWUnKSkKICAgICAgICBsb2cuaW5mbygnbGF0ZXN0IGJpbmFyeSAgOiAlcycgJSBzZWxmLmRhZW1vbi53b3JrX3F1ZXVlLmdldF92YWx1ZSgnQ2JBUElVcFRvRGF0ZVByb2R1Y2VyVGhyZWFkX3N0YXJ0X3RpbWUnKSkKPHxmaW1fZW5kfD4="]
["68ccdd4ade464cbd2d29bb7366cb7099377043e0-2","68ccdd4ade464cbd2d29bb7366cb7099377043e0","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyA9ICdqZ2FybWFuJwoKaW1wb3J0IHVuaXR0ZXN0CmZyb20gY2JpbnQudXRpbHMuZGV0b25hdGlvbiBpbXBvcnQgRGV0b25hdGlvbkRhZW1vbiwgQ2JBUElVcFRvRGF0ZVByb2R1Y2VyVGhyZWFkLCBDYkFQSUhpc3RvcmljYWxQcm9kdWNlclRocmVhZAppbXBvcnQgb3MKaW1wb3J0IHRlbXBmaWxlCmltcG9ydCBzeXMKaW1wb3J0IHRocmVhZGluZwppbXBvcnQgc29ja2V0CmZyb20gdGltZSBpbXBvcnQgc2xlZXAKaW1wb3J0IGRhdGV1dGlsLnBhcnNlcgppbXBvcnQgbG9nZ2luZwoKc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkKZnJvbSB1dGlscy5tb2NrX3NlcnZlciBpbXBvcnQgZ2V0X21vY2tlZF9zZXJ2ZXIKCmxvZ2dpbmcuYmFzaWNDb25maWcoKQpsb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKbG9nLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCgoKY2xhc3MgVGVzdERhZW1vbihEZXRvbmF0aW9uRGFlbW9uKToKICAgIHBhc3MKCgpjbGFzcyBTZXJ2ZXJOZXZlcldva2VVcEVycm9yKEV4Y2VwdGlvbik6CiAgICBwYXNzCgoKZGVmIHNsZWVwX3RpbGxfYXZhaWxhYmxlKGNvbm5fdHVwbGUpOgogICAgbnVtX3JldHJpZXMgPSA1CiAgICB3aGlsZSBudW1fcmV0cmllczoKICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBzLmNvbm5lY3QoY29ubl90dXBsZSkKICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIG51bV9yZXRyaWVzIC09IDEKICAgICAgICAgICAgc2xlZXAoLjEpCjx8ZmltX2VuZHw+"]
["68ccdd4ade464cbd2d29bb7366cb7099377043e0-3","68ccdd4ade464cbd2d29bb7366cb7099377043e0","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyA9ICdqZ2FybWFuJwoKaW1wb3J0IHVuaXR0ZXN0CmZyb20gY2JpbnQudXRpbHMuZGV0b25hdGlvbiBpbXBvcnQgRGV0b25hdGlvbkRhZW1vbiwgQ2JBUElVcFRvRGF0ZVByb2R1Y2VyVGhyZWFkLCBDYkFQSUhpc3RvcmljYWxQcm9kdWNlclRocmVhZAppbXBvcnQgb3MKaW1wb3J0IHRlbXBmaWxlCmltcG9ydCBzeXMKaW1wb3J0IHRocmVhZGluZwppbXBvcnQgc29ja2V0CmZyb20gdGltZSBpbXBvcnQgc2xlZXAKaW1wb3J0IGRhdGV1dGlsLnBhcnNlcgppbXBvcnQgbG9nZ2luZwoKc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkKZnJvbSB1dGlscy5tb2NrX3NlcnZlciBpbXBvcnQgZ2V0X21vY2tlZF9zZXJ2ZXIKCmxvZ2dpbmcuYmFzaWNDb25maWcoKQpsb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKbG9nLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCgoKY2xhc3MgVGVzdERhZW1vbihEZXRvbmF0aW9uRGFlbW9uKToKICAgIHBhc3MKCgpjbGFzcyBTZXJ2ZXJOZXZlcldva2VVcEVycm9yKEV4Y2VwdGlvbik6CiAgICBwYXNzCgoKZGVmIHNsZWVwX3RpbGxfYXZhaWxhYmxlKGNvbm5fdHVwbGUpOgogICAgbnVtX3JldHJpZXMgPSA1CiAgICB3aGlsZSBudW1fcmV0cmllczoKICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBzLmNvbm5lY3QoY29ubl90dXBsZSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CiAgICAgICAgICAgIG51bV9yZXRyaWVzIC09IDEKICAgICAgICAgICAgc2xlZXAoLjEpCiAgICAgICAgZWxzZToKPHxmaW1fZW5kfD4="]
["68ccdd4ade464cbd2d29bb7366cb7099377043e0-4","68ccdd4ade464cbd2d29bb7366cb7099377043e0","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyA9ICdqZ2FybWFuJwoKaW1wb3J0IHVuaXR0ZXN0CmZyb20gY2JpbnQudXRpbHMuZGV0b25hdGlvbiBpbXBvcnQgRGV0b25hdGlvbkRhZW1vbiwgQ2JBUElVcFRvRGF0ZVByb2R1Y2VyVGhyZWFkLCBDYkFQSUhpc3RvcmljYWxQcm9kdWNlclRocmVhZAppbXBvcnQgb3MKaW1wb3J0IHRlbXBmaWxlCmltcG9ydCBzeXMKaW1wb3J0IHRocmVhZGluZwppbXBvcnQgc29ja2V0Cjx8ZmltX2hvbGV8PgpzeXMucGF0aC5hcHBlbmQob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKQpmcm9tIHV0aWxzLm1vY2tfc2VydmVyIGltcG9ydCBnZXRfbW9ja2VkX3NlcnZlcgoKbG9nZ2luZy5iYXNpY0NvbmZpZygpCmxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpsb2cuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKCgpjbGFzcyBUZXN0RGFlbW9uKERldG9uYXRpb25EYWVtb24pOgogICAgcGFzcwoKCmNsYXNzIFNlcnZlck5ldmVyV29rZVVwRXJyb3IoRXhjZXB0aW9uKToKICAgIHBhc3MKCgpkZWYgc2xlZXBfdGlsbF9hdmFpbGFibGUoY29ubl90dXBsZSk6CiAgICBudW1fcmV0cmllcyA9IDUKICAgIHdoaWxlIG51bV9yZXRyaWVzOgogICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKICAgICAgICB0cnk6CiAgICAgICAgICAgIHMuY29ubmVjdChjb25uX3R1cGxlKQogICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CiAgICAgICAgICAgIG51bV9yZXRyaWVzIC09IDEKICAgICAgICAgICAgc2xlZXAoLjEpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuCgogICAgcmFpc2UgU2VydmVyTmV2ZXJXb2tlVXBFcnJvcihjb25uX3R1cGxlKQoKCmNsYXNzIERhZW1vblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgogICAgICAgIG15ZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCgogICAgICAgIGJpbmFyaWVzX2RpciA9IG9zLnBhdGguam9pbihteWRpciwgJ2RhdGEnLCAnYmluYXJ5X21ldGFkYXRhJykKICAgICAgICBjbHMubW9ja19zZXJ2ZXIgPSBnZXRfbW9ja2VkX3NlcnZlcihiaW5hcmllc19kaXIpCiAgICAgICAgY2xzLm1vY2tfc2VydmVyX3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWNscy5tb2NrX3NlcnZlci5ydW4sIGFyZ3M9WycxMjcuMC4wLjEnLCA3OTgyXSkKICAgICAgICBjbHMubW9ja19zZXJ2ZXJfdGhyZWFkLmRhZW1vbiA9IFRydWUKICAgICAgICBjbHMubW9ja19zZXJ2ZXJfdGhyZWFkLnN0YXJ0KCkKICAgICAgICBzbGVlcF90aWxsX2F2YWlsYWJsZSgoJzEyNy4wLjAuMScsIDc5ODIpKQoKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBzZWxmLnRlbXBfZGlyZWN0b3J5ID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICAgICAgY29uZmlnX3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpLCAiZGF0YSIsICJkYWVtb24uY29uZiIpCiAgICAgICAgc2VsZi5kYWVtb24gPSBUZXN0RGFlbW9uKCJ0ZXN0ZGFlbW9uIiwgY29uZmlnZmlsZT1jb25maWdfcGF0aCwgd29ya19kaXJlY3Rvcnk9c2VsZi50ZW1wX2RpcmVjdG9yeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZmlsZT1vcy5wYXRoLmpvaW4oc2VsZi50ZW1wX2RpcmVjdG9yeSwgJ3Rlc3QubG9nJyksIGRlYnVnPVRydWUpCiAgICAgICAgc2VsZi5kYWVtb24udmFsaWRhdGVfY29uZmlnKCkKCiAgICAgICAgc2VsZi5kYWVtb24uaW5pdGlhbGl6ZV9xdWV1ZSgpCgogICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICMgb3Mucm1kaXIoc2VsZi50ZW1wX2RpcmVjdG9yeSkKICAgICAgICAjIHNlbGYubW9ja19zZXJ2ZXJfdGhyZWFkLnRlcm1pbmF0ZSgpCiAgICAgICAgcGFzcwoKICAgIGRlZiB0ZXN0X2JpbmFyeV9jb2xsZWN0b3JzKHNlbGYpOgogICAgICAgIG5vdyA9IGRhdGV1dGlsLnBhcnNlci5wYXJzZSgnMjAxNS0wNy0wMScpCiAgICAgICAgaGlzdG9yaWNhbF9wcm9kdWNlciA9IENiQVBJSGlzdG9yaWNhbFByb2R1Y2VyVGhyZWFkKHNlbGYuZGFlbW9uLndvcmtfcXVldWUsIHNlbGYuZGFlbW9uLmNiLCBzZWxmLmRhZW1vbi5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXRlX2xpbWl0ZXI9MCwgc3RvcF93aGVuX2RvbmU9VHJ1ZSwgc3RhcnRfdGltZT1ub3cpCiAgICAgICAgaGlzdG9yaWNhbF9wcm9kdWNlci5ydW4oKQoKICAgICAgICB1cF90b19kYXRlX3Byb2R1Y2VyID0gQ2JBUElVcFRvRGF0ZVByb2R1Y2VyVGhyZWFkKHNlbGYuZGFlbW9uLndvcmtfcXVldWUsIHNlbGYuZGFlbW9uLmNiLCBzZWxmLmRhZW1vbi5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0ZV9saW1pdGVyPTAsIHN0b3Bfd2hlbl9kb25lPVRydWUsIHN0YXJ0X3RpbWU9bm93KQogICAgICAgIHVwX3RvX2RhdGVfcHJvZHVjZXIucnVuKCkKCiAgICAgICAgbG9nLmluZm8oJ2VhcmxpZXN0IGJpbmFyeTogJXMnICUgc2VsZi5kYWVtb24ud29ya19xdWV1ZS5nZXRfdmFsdWUoJ0NiQVBJSGlzdG9yaWNhbFByb2R1Y2VyVGhyZWFkX3N0YXJ0X3RpbWUnKSkKICAgICAgICBsb2cuaW5mbygnbGF0ZXN0IGJpbmFyeSAgOiAlcycgJSBzZWxmLmRhZW1vbi53b3JrX3F1ZXVlLmdldF92YWx1ZSgnQ2JBUElVcFRvRGF0ZVByb2R1Y2VyVGhyZWFkX3N0YXJ0X3RpbWUnKSkKCiAgICAgICAgY2JfdG90YWwgPSBzZWxmLmRhZW1vbi5jYi5iaW5hcnlfc2VhcmNoKCcnLCByb3dzPTEwMDApWyd0b3RhbF9yZXN1bHRzJ10KICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRhZW1vbi53b3JrX3F1ZXVlLm51bWJlcl91bmFuYWx5emVkKCksIGNiX3RvdGFsKQoKICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZGFlbW9uLndvcmtfcXVldWUubnVtYmVyX3VuYW5hbHl6ZWQoKSwgMCkKPHxmaW1fc3VmZml4fD4KZnJvbSB0aW1lIGltcG9ydCBzbGVlcAppbXBvcnQgZGF0ZXV0aWwucGFyc2VyCmltcG9ydCBsb2dnaW5nCgo8fGZpbV9lbmR8Pg=="]
["a9eca0f716d5977a9ca93e649baaace513984bdd-1","a9eca0f716d5977a9ca93e649baaace513984bdd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBpY2tsZQppbXBvcnQganNvbgppbXBvcnQgbmV0d29ya3ggYXMgbngKCgpkZWYgbG9hZF9qc29uKG5hbWUpOgogICAgd2l0aCBvcGVuKG5hbWUgKyAnLmpzb24nLCAncicpIGFzIGY6CiAgICAgICAgcmV0dXJuIGpzb24ubG9hZChmKQoKCmRlZiBsb2FkX29ial9waWNrbGUobmFtZSk6CiAgICB3aXRoIG9wZW4obmFtZSArICcucGtsJywgJ3JiJykgYXMgZjoKPHxmaW1faG9sZXw+CmRlZiBzYXZlX29ial9waWNrbGUob2JqLCBuYW1lKToKICAgIHdpdGggb3BlbihuYW1lICsgJy5wa2wnLCAnd2IrJykgYXMgZjoKICAgICAgICBwaWNrbGUuZHVtcChvYmosIGYsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MKSAgCgoKZGVmIHNhdmVfZ3JhcGgoZ3JhcGgsZmlsZSk6CiAgICAKICAgIHJldHVybiBueC53cml0ZV9ncGlja2xlKGdyYXBoLCBmaWxlICsgJ2dwaWNrbGUnKQogICAgCgoKZGVmIHJlYWRfZ3JhcGgoZmlsZSk6ICAgCiAgICAKICAgIHJldHVybiBueC5yZWFkX2dwaWNrbGUoZmlsZSArICdncGlja2xlJykgICAgCiAgICAKPHxmaW1fc3VmZml4fD4KICAgICAgICByZXR1cm4gcGlja2xlLmxvYWQoZikKCgo8fGZpbV9lbmR8Pg=="]
["a9eca0f716d5977a9ca93e649baaace513984bdd-2","a9eca0f716d5977a9ca93e649baaace513984bdd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBpY2tsZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBqc29uCmltcG9ydCBuZXR3b3JreCBhcyBueAoKCjx8ZmltX2VuZHw+"]
["a9eca0f716d5977a9ca93e649baaace513984bdd-3","a9eca0f716d5977a9ca93e649baaace513984bdd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBpY2tsZQppbXBvcnQganNvbgppbXBvcnQgbmV0d29ya3ggYXMgbngKCgpkZWYgbG9hZF9qc29uKG5hbWUpOgogICAgd2l0aCBvcGVuKG5hbWUgKyAnLmpzb24nLCAncicpIGFzIGY6CiAgICAgICAgcmV0dXJuIGpzb24ubG9hZChmKQoKPHxmaW1faG9sZXw+CgoKZGVmIHNhdmVfb2JqX3BpY2tsZShvYmosIG5hbWUpOgogICAgd2l0aCBvcGVuKG5hbWUgKyAnLnBrbCcsICd3YisnKSBhcyBmOgogICAgICAgIHBpY2tsZS5kdW1wKG9iaiwgZiwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpICAKCgpkZWYgc2F2ZV9ncmFwaChncmFwaCxmaWxlKToKICAgIAogICAgcmV0dXJuIG54LndyaXRlX2dwaWNrbGUoZ3JhcGgsIGZpbGUgKyAnZ3BpY2tsZScpCiAgICAKCgpkZWYgcmVhZF9ncmFwaChmaWxlKTogICAKICAgIAogICAgcmV0dXJuIG54LnJlYWRfZ3BpY2tsZShmaWxlICsgJ2dwaWNrbGUnKSAgICAKICAgIAo8fGZpbV9zdWZmaXh8PgoKZGVmIGxvYWRfb2JqX3BpY2tsZShuYW1lKToKICAgIHdpdGggb3BlbihuYW1lICsgJy5wa2wnLCAncmInKSBhcyBmOgogICAgICAgIHJldHVybiBwaWNrbGUubG9hZChmKQo8fGZpbV9lbmR8Pg=="]
["c1ecfb6d65427230759363ab7d73783cb267cd39-1","c1ecfb6d65427230759363ab7d73783cb267cd39","PHxmaW1fcHJlZml4fD4KI+ebruagh++8muWcqOaOp+WItuWPsOaJk+WNsOespuWQiOimgeaxgueahOaVsOWtl++8jOi+k+WHujfkuKrmlbDlrZfljbPlj6/vvIzkuI3pnIDopoHluKbpopzoibIKI+WFt+S9k+e7huiKgu+8mjEu57qi55CD5Yy6NuS4qu+8jOmXreWMuumXtDEtMzMs6JOd6Imy55CDMeS4qu+8jOmXreWMuumXtDEtMTbvvIzkuIDlhbE35LiqCiMgICAgICAgICAyLumcgOimgea7oei2s+adoeS7tu+8muKRoOiDveWkn+maj+acuui+k+WHujfkuKrlnKjljLrpl7TlhoXnmoTmlbDlrZfvvIw25Liq57qi55CDMeS4quiTneeQg++8jDbkuKrnuqLnkIPkuI3og73ph43lpI3vvIzok53nkIPlj6/ku6XlkozliY3pnaLmnInph43lpI0KIyAgICAgICAgICDkvovlpoLvvJrlnKjmjqfliLblj7DkuIrovpPlh7rnu5PmnpzvvJpbMSwzLDUsMTcsMjYsMzMgNV0KIyAgICAgICAgIOKRoeiDveWkn+maj+acuk7ms6hO5YCN77yM5L6L5aaC6ZqP5py6MeazqDXlgI3vvIwy5rOo5q+P5rOoNeWAjQojICAgICAgICAgIOS+i+Wmgu+8muWcqOaOp+WItuWPsOi+k+WHuue7k+aenO+8mlsxLDMsNSwxNywyNiwzMyA1XSozCiMgICAgICAgICBbMSw1LDgsMTUsMjAsMjYgIDldKjUKIyAgICAgICAgIOKRouiDveWkn+aJi+WKqOi+k+WFpTbkuKrnuqLnkIPvvIwx5Liq6JOd55CD77yM5bm25LiU5Y+v5Lul5LmY5Lul5YCN5pWwCiMgICAgICAgICDkvovlpoLvvJpbMSw1LDgsMTUsMjAsMjYgIDldKjUKIyAgICAgICAgIDMu6Zmk5LqG5ruh6Laz5Lul5LiK6KaB5rGC77yM6L+Y6KaB6IO95aSf5YGa5aW96L6555WM5qOA5p+l77yM5L+d6K+B5Ye95pWw5Lyg5YWl6Z2e5rOV5Y+C5pWw6IO95aSf5q2j5bi45Y+N5bqUCiMgICAgICAgICDkvovlpoLvvJrovpPlhaXkuobkuI3mu6HotrPmoLzlvI/nmoTvvIzovpPlhaXkuobpnZ7mlbTmlbDnsbvlnovnrYnnrYkKIyAgICAgICAgIDQu5Lya55qE5aSa55qE5Y+v5Lul55SoaW5wdXTvvIzkuI3kvJrkvb/nlKjlj6/ku6Xnm7TmjqXmlrnms5XosIPnlKjnmoTlvaLlvI/vvIzlj6/kvKDkuI3lkIzlj4LmlbDlrp7njrAKI+aIkeS8mumaj+acuumAiTbkuKrnu4TlkZjmnaXorrLoh6rlt7HnmoTku6PnoIHvvIzkuZ/lj6/ku6Xorqnop4nlvpfoh6rlt7HlhpnnmoTlpb3nmoTmnaXorrLvvIzkvZzkuJrmo4Dmn6XlkozorrLop6PnmoTml7bpl7Q6IOS4i+asoeWIhuS6q+aXtu+8iOiAg+iZkeS4i+WRqOaUvuWBh++8jOaUueS4uuS4i+S4i+WRqDTvvIkKaW1wb3J0IHJhbmRvbSBhcyByZAoKZGVmIGlucHV0X2lzX3JhbmRvbShtc2cpOgogICAgcHJpbnQobXNnKQogICAgaXNfcmFuZG9tX2lucHV0ID0gaW5wdXQoIuivt+ehruWumuaYr+WQpuacuumAiXllcy9ubzogIikKICAgIGlmICJ5ZXMiID09IGlzX3JhbmRvbV9pbnB1dC5yc3RyaXAoKS5sc3RyaXAoKS5sb3dlcigpOgogICAgICAgIGlzX3JhbmRvbSA9IFRydWUKICAgICAgICBpbnB1dF9iZXRfbnVtKGlzX3JhbmRvbSkKICAgIGVsaWYgIm5vIiA9PSBpc19yYW5kb21faW5wdXQucnN0cmlwKCkubHN0cmlwKCkubG93ZXIoKToKICAgICAgICBpc19yYW5kb20gPSBGYWxzZQogICAgICAgIGlucHV0X2JldF9udW0oaXNfcmFuZG9tKQogICAgZWxzZToKICAgICAgICBpbnB1dF9pc19yYW5kb20oIui+k+WFpeeahOS4jeWvueWTpizor7fph43mlrDovpPlhaUiKQo8fGZpbV9ob2xlfD4KICAgICAgICBiZXRfbnVtID0gaW50KGJldF9udW1faW5wdXQpCiAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICBwcmludCgi6L6T5YWl55qE5LiN5a+55ZOm77yM6K+36YeN5paw6L6T5YWlIikKICAgICAgICBpbnB1dF9iZXRfbnVtKGlzX3JhbmRvbSkKICAgIGVsc2U6CiAgICAgICAgaW5wdXRfbXV0bGlwbGVfbnVtKGlzX3JhbmRvbSxiZXRfbnVtKQoKZGVmIGlucHV0X211dGxpcGxlX251bShpc19yYW5kb20gLGJldF9udW0pOgogICAgbXV0bGlwbGVfbnVtX2lucHV0ID0gaW5wdXQoIuivt+i+k+WFpeS4i+azqOWAjeaVsDogIikKICAgIHRyeToKICAgICAgICBtdXRsaXBsZV9udW0gPSBpbnQobXV0bGlwbGVfbnVtX2lucHV0KQogICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgcHJpbnQoIui+k+WFpeeahOS4jeWvueWTpu+8jOivt+mHjeaWsOi+k+WFpSIpCiAgICAgICAgaW5wdXRfbXV0bGlwbGVfbnVtKGlzX3JhbmRvbSxiZXRfbnVtKQogICAgZWxzZToKICAgICAgICBpZiBpc19yYW5kb20gOgogICAgICAgICAgICBjcmVhdF9yYW5kb21fbG90dGVyeShiZXRfbnVtLG11dGxpcGxlX251bSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBjcmVhdF93cml0ZV9sb3R0ZXJ5KGJldF9udW0sbXV0bGlwbGVfbnVtKQoKZGVmIGNyZWF0X3JhbmRvbV9sb3R0ZXJ5KGJldF9udW0sbXV0bGlwbGVfbnVtKToKICAgIHJkX2xpc3QgPSBbXQogICAgd2hpbGUgbGVuKHJkX2xpc3QpIDwgYmV0X251bToKICAgICAgICByYW5kb21fbGlzdCA9IGxpc3QocmFuZ2UoMSwgMzQpKQogICAgICAgIG51bV9saXN0ID0gW10KICAgICAgICB3aGlsZSBsZW4obnVtX2xpc3QpPDY6CiAgICAgICAgICAgIHYgPSByZC5jaG9pY2UocmFuZG9tX2xpc3QpCiAgICAgICAgICAgIHJhbmRvbV9saXN0LnJlbW92ZSh2KQogICAgICAgICAgICBudW1fbGlzdC5hcHBlbmQodikKICAgICAgICBudW1fbGlzdC5hcHBlbmQocmQucmFuZGludCgxLDE2KSkKICAgICAgICByZF9saXN0LmFwcGVuZChudW1fbGlzdCkKICAgICAgICBwcmludChudW1fbGlzdCwiKiIsbXV0bGlwbGVfbnVtKQoKCmRlZiBjcmVhdF93cml0ZV9sb3R0ZXJ5KGJldF9udW0sbXV0bGlwbGVfbnVtKToKICAgIHJkX2xpc3QgPSBbXQogICAgd2hpbGUgbGVuKHJkX2xpc3QpPGJldF9udW06CiAgICAgICAgbnVtX2xpc3QgPSBbXQogICAgICAgIHdoaWxlIGxlbihudW1fbGlzdCk8NjoKICAgICAgICAgICAgbnVtID0gaW5wdXRfY29ycmVjdF9udW0obGVuKHJkX2xpc3QpLG51bV9saXN0KQogICAgICAgICAgICBudW1fbGlzdC5hcHBlbmQobnVtKQogICAgICAgIGJsdWVfbnVtID0gaW5wdXRfY29ycmVjdF9udW0obGVuKHJkX2xpc3QpLG51bV9saXN0KQogICAgICAgIG51bV9saXN0LmFwcGVuZChibHVlX251bSkKICAgICAgICByZF9saXN0LmFwcGVuZChudW1fbGlzdCkKICAgIGZvciBsIGluIHJkX2xpc3Q6CiAgICAgICAgcHJpbnQobCwiKiIsbXV0bGlwbGVfbnVtKQoKZGVmIGlucHV0X2NvcnJlY3RfbnVtKG11dGxpcGxlLG51bV9saXN0KToKICAgIGlmIGxlbihudW1fbGlzdCk8NjoKICAgICAgICBpbnB1dF9udW0gPSBpbnB1dCgi6K+36L6T5YWl56ysIitzdHIobXV0bGlwbGUrMSkrIuazqOesrCIrc3RyKGxlbihudW1fbGlzdCkrMSkrIuS4que6oueQg+WPt+eggToiICkKICAgICAgICB0cnk6CiAgICAgICAgICAgIG51bSA9IGludChpbnB1dF9udW0pCiAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgIHByaW50KCLovpPlhaXnmoTkuI3lr7nlk6bvvIzor7fph43mlrDovpPlhaUiKQogICAgICAgICAgICByZXR1cm4gaW5wdXRfY29ycmVjdF9udW0obXV0bGlwbGUsbnVtX2xpc3QpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgbnVtIGluIG51bV9saXN0IG9yIG51bT4zMyBvciBudW08MToKICAgICAgICAgICAgICAgIHByaW50KCLor7fovpPlhaXmnKrovpPlhaXov4fnmoQx5YiwMzPnmoTmlbTmlbAiKQogICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0X2NvcnJlY3RfbnVtKG11dGxpcGxlLCBudW1fbGlzdCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJldHVybiBudW0KICAgIGVsc2U6CiAgICAgICAgaW5wdXRfbnVtID0gaW5wdXQoIuivt+i+k+WFpeesrCIgKyBzdHIobXV0bGlwbGUrMSkgKyAi5rOo6JOd55CD5Y+356CBOiIpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBudW0gPSBpbnQoaW5wdXRfbnVtKQogICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICBwcmludCgi6L6T5YWl55qE5LiN5a+55ZOm77yM6K+36YeN5paw6L6T5YWlIikKICAgICAgICAgICAgcmV0dXJuIGlucHV0X2NvcnJlY3RfbnVtKG11dGxpcGxlLCBudW1fbGlzdCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiBudW0+MTYgb3IgbnVtIDwxOgogICAgICAgICAgICAgICAgcHJpbnQoIuivt+i+k+WFpTHliLAxNueahOaVtOaVsCIpCiAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRfY29ycmVjdF9udW0obXV0bGlwbGUsIG51bV9saXN0KQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmV0dXJuIG51bQoKaW5wdXRfaXNfcmFuZG9tKCLmrKLov47mnaXliLDkuK3lm73npo/liKnlvannpagiKQo8fGZpbV9zdWZmaXh8PgoKZGVmIGlucHV0X2JldF9udW0oaXNfcmFuZG9tKToKICAgIGJldF9udW1faW5wdXQgPSBpbnB1dCgi6K+36L6T5YWl5LiL5rOo5pWw55uuOiAiKQogICAgdHJ5Ogo8fGZpbV9lbmR8Pg=="]
["c1ecfb6d65427230759363ab7d73783cb267cd39-2","c1ecfb6d65427230759363ab7d73783cb267cd39","PHxmaW1fcHJlZml4fD4KI+ebruagh++8muWcqOaOp+WItuWPsOaJk+WNsOespuWQiOimgeaxgueahOaVsOWtl++8jOi+k+WHujfkuKrmlbDlrZfljbPlj6/vvIzkuI3pnIDopoHluKbpopzoibIKI+WFt+S9k+e7huiKgu+8mjEu57qi55CD5Yy6NuS4qu+8jOmXreWMuumXtDEtMzMs6JOd6Imy55CDMeS4qu+8jOmXreWMuumXtDEtMTbvvIzkuIDlhbE35LiqCiMgICAgICAgICAyLumcgOimgea7oei2s+adoeS7tu+8muKRoOiDveWkn+maj+acuui+k+WHujfkuKrlnKjljLrpl7TlhoXnmoTmlbDlrZfvvIw25Liq57qi55CDMeS4quiTneeQg++8jDbkuKrnuqLnkIPkuI3og73ph43lpI3vvIzok53nkIPlj6/ku6XlkozliY3pnaLmnInph43lpI0KIyAgICAgICAgICDkvovlpoLvvJrlnKjmjqfliLblj7DkuIrovpPlh7rnu5PmnpzvvJpbMSwzLDUsMTcsMjYsMzMgNV0KIyAgICAgICAgIOKRoeiDveWkn+maj+acuk7ms6hO5YCN77yM5L6L5aaC6ZqP5py6MeazqDXlgI3vvIwy5rOo5q+P5rOoNeWAjQojICAgICAgICAgIOS+i+Wmgu+8muWcqOaOp+WItuWPsOi+k+WHuue7k+aenO+8mlsxLDMsNSwxNywyNiwzMyA1XSozCiMgICAgICAgICBbMSw1LDgsMTUsMjAsMjYgIDldKjUKIyAgICAgICAgIOKRouiDveWkn+aJi+WKqOi+k+WFpTbkuKrnuqLnkIPvvIwx5Liq6JOd55CD77yM5bm25LiU5Y+v5Lul5LmY5Lul5YCN5pWwCiMgICAgICAgICDkvovlpoLvvJpbMSw1LDgsMTUsMjAsMjYgIDldKjUKIyAgICAgICAgIDMu6Zmk5LqG5ruh6Laz5Lul5LiK6KaB5rGC77yM6L+Y6KaB6IO95aSf5YGa5aW96L6555WM5qOA5p+l77yM5L+d6K+B5Ye95pWw5Lyg5YWl6Z2e5rOV5Y+C5pWw6IO95aSf5q2j5bi45Y+N5bqUCiMgICAgICAgICDkvovlpoLvvJrovpPlhaXkuobkuI3mu6HotrPmoLzlvI/nmoTvvIzovpPlhaXkuobpnZ7mlbTmlbDnsbvlnovnrYnnrYkKIyAgICAgICAgIDQu5Lya55qE5aSa55qE5Y+v5Lul55SoaW5wdXTvvIzkuI3kvJrkvb/nlKjlj6/ku6Xnm7TmjqXmlrnms5XosIPnlKjnmoTlvaLlvI/vvIzlj6/kvKDkuI3lkIzlj4LmlbDlrp7njrAKI+aIkeS8mumaj+acuumAiTbkuKrnu4TlkZjmnaXorrLoh6rlt7HnmoTku6PnoIHvvIzkuZ/lj6/ku6Xorqnop4nlvpfoh6rlt7HlhpnnmoTlpb3nmoTmnaXorrLvvIzkvZzkuJrmo4Dmn6XlkozorrLop6PnmoTml7bpl7Q6IOS4i+asoeWIhuS6q+aXtu+8iOiAg+iZkeS4i+WRqOaUvuWBh++8jOaUueS4uuS4i+S4i+WRqDTvvIkKaW1wb3J0IHJhbmRvbSBhcyByZAoKZGVmIGlucHV0X2lzX3JhbmRvbShtc2cpOgogICAgcHJpbnQobXNnKQogICAgaXNfcmFuZG9tX2lucHV0ID0gaW5wdXQoIuivt+ehruWumuaYr+WQpuacuumAiXllcy9ubzogIikKICAgIGlmICJ5ZXMiID09IGlzX3JhbmRvbV9pbnB1dC5yc3RyaXAoKS5sc3RyaXAoKS5sb3dlcigpOgogICAgICAgIGlzX3JhbmRvbSA9IFRydWUKICAgICAgICBpbnB1dF9iZXRfbnVtKGlzX3JhbmRvbSkKICAgIGVsaWYgIm5vIiA9PSBpc19yYW5kb21faW5wdXQucnN0cmlwKCkubHN0cmlwKCkubG93ZXIoKToKICAgICAgICBpc19yYW5kb20gPSBGYWxzZQogICAgICAgIGlucHV0X2JldF9udW0oaXNfcmFuZG9tKQogICAgZWxzZToKICAgICAgICBpbnB1dF9pc19yYW5kb20oIui+k+WFpeeahOS4jeWvueWTpizor7fph43mlrDovpPlhaUiKQoKZGVmIGlucHV0X2JldF9udW0oaXNfcmFuZG9tKToKICAgIGJldF9udW1faW5wdXQgPSBpbnB1dCgi6K+36L6T5YWl5LiL5rOo5pWw55uuOiAiKQogICAgdHJ5OgogICAgICAgIGJldF9udW0gPSBpbnQoYmV0X251bV9pbnB1dCkKICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgIHByaW50KCLovpPlhaXnmoTkuI3lr7nlk6bvvIzor7fph43mlrDovpPlhaUiKQogICAgICAgIGlucHV0X2JldF9udW0oaXNfcmFuZG9tKQogICAgZWxzZToKICAgICAgICBpbnB1dF9tdXRsaXBsZV9udW0oaXNfcmFuZG9tLGJldF9udW0pCgpkZWYgaW5wdXRfbXV0bGlwbGVfbnVtKGlzX3JhbmRvbSAsYmV0X251bSk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIG11dGxpcGxlX251bV9pbnB1dCA9IGlucHV0KCLor7fovpPlhaXkuIvms6jlgI3mlbA6ICIpCiAgICB0cnk6CiAgICAgICAgbXV0bGlwbGVfbnVtID0gaW50KG11dGxpcGxlX251bV9pbnB1dCkKICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgo8fGZpbV9lbmR8Pg=="]
["b64266a045d4c6e52b9b82ab8f422d5030c47401-1","b64266a045d4c6e52b9b82ab8f422d5030c47401","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMS43IG9uIDIwMTktMDQtMDMgMTU6MzUKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ2l0ZW1zJywgJzAwMDVfYXV0b18yMDE5MDQwM18yMzMzJyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J2l0ZW0nLAogICAgICAgICAgICBuYW1lPSdkaXNwbGF5UGhvdG8nLAo8fGZpbV9ob2xlfD4KICAgICAgICApLAogICAgXQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBmaWVsZD1tb2RlbHMuSW1hZ2VGaWVsZChibGFuaz1UcnVlLCBudWxsPVRydWUsIHVwbG9hZF90bz0naXRlbV9waWNzJyksCjx8ZmltX2VuZHw+"]
["b64266a045d4c6e52b9b82ab8f422d5030c47401-2","b64266a045d4c6e52b9b82ab8f422d5030c47401","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMS43IG9uIDIwMTktMDQtMDMgMTU6MzUKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ2l0ZW1zJywgJzAwMDVfYXV0b18yMDE5MDQwM18yMzMzJyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKPHxmaW1faG9sZXw+CiAgICAgICAgKSwKICAgIF0KPHxmaW1fc3VmZml4fD4KICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J2l0ZW0nLAogICAgICAgICAgICBuYW1lPSdkaXNwbGF5UGhvdG8nLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuSW1hZ2VGaWVsZChibGFuaz1UcnVlLCBudWxsPVRydWUsIHVwbG9hZF90bz0naXRlbV9waWNzJyksCjx8ZmltX2VuZHw+"]
["b64266a045d4c6e52b9b82ab8f422d5030c47401-3","b64266a045d4c6e52b9b82ab8f422d5030c47401","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMS43IG9uIDIwMTktMDQtMDMgMTU6MzUKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKPHxmaW1faG9sZXw+CiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J2l0ZW0nLAogICAgICAgICAgICBuYW1lPSdkaXNwbGF5UGhvdG8nLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuSW1hZ2VGaWVsZChibGFuaz1UcnVlLCBudWxsPVRydWUsIHVwbG9hZF90bz0naXRlbV9waWNzJyksCiAgICAgICAgKSwKICAgIF0KPHxmaW1fc3VmZml4fD4KICAgICAgICAoJ2l0ZW1zJywgJzAwMDVfYXV0b18yMDE5MDQwM18yMzMzJyksCjx8ZmltX2VuZHw+"]
["b64266a045d4c6e52b9b82ab8f422d5030c47401-4","b64266a045d4c6e52b9b82ab8f422d5030c47401","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMS43IG9uIDIwMTktMDQtMDMgMTU6MzUKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ2l0ZW1zJywgJzAwMDVfYXV0b18yMDE5MDQwM18yMzMzJyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J2l0ZW0nLAogICAgICAgICAgICBuYW1lPSdkaXNwbGF5UGhvdG8nLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuSW1hZ2VGaWVsZChibGFuaz1UcnVlLCBudWxsPVRydWUsIHVwbG9hZF90bz0naXRlbV9waWNzJyksCjx8ZmltX2hvbGV8PgogICAgXQo8fGZpbV9zdWZmaXh8PgogICAgICAgICksCjx8ZmltX2VuZHw+"]
["68d00d4348ec5b33801a33e970b5bb0b223b8aa4-1","68d00d4348ec5b33801a33e970b5bb0b223b8aa4",{"$cut":{"chars":35052,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRhdGV0aW1lCmZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCmltcG9ydCB0eXBpbmcKaW1wb3J0IGRpc2NvcmQKZnJvbSBkaXNjb3JkIGltcG9ydCBhY3Rpdml0eQpmcm9tIGRpc2NvcmQgaW1wb3J0IG1lc3NhZ2UKZnJvbSBkaXNjb3JkIGltcG9ydCBNZW1iZXIKZnJvbSBkaXNjb3JkIGltcG9ydCBtZW1iZXIKZnJvbSBkaXNjb3JkIGltcG9ydCBwZXJtaXNzaW9ucwpmcm9tIGRpc2NvcmQuYWJjIGltcG9ydCBVc2VyCmZyb20gZGlzY29yZC5jbGllbnQgaW1wb3J0IENsaWVudApmcm9tIGRpc2NvcmQuZW1iZWRzIGltcG9ydCBFbWJlZApmcm9tIGRpc2NvcmQuZXh0IGltcG9ydCBjb21tYW5kcwpmcm9tIGRpc2NvcmQuZXh0LmNvbW1hbmRzLmJvdCBpbXBvcnQgQm90CmZyb20gZGlzY29yZC5lcnJvcnMgaW1wb3J0IEZvcmJpZGRlbgpmcm9tIGRpc2NvcmQuZXh0LmNvbW1hbmRzLmNvcmUgaW1wb3J0IGNvbW1hbmQsIGhhc19hbnlfcm9sZSwgaGFzX3Blcm1pc3Npb25zCmZyb20gZGlzY29yZC5leHQuY29tbWFuZHMuZXJyb3JzIGltcG9ydCBDb21tYW5kTm90Rm91bmQsIE1pc3NpbmdQZXJtaXNzaW9ucwppbXBvcnQganNvbgppbXBvcnQgZnVuY3Rvb2xzCgpmcm9tIFBhcGVyWmVwcGVsaW4gaW1wb3J0IHVwZGF0ZV9sb2dzCgoKY2xhc3MgTW9kKGNvbW1hbmRzLkNvZyk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY2xpZW50OiBDbGllbnQpIC0+IE5vbmU6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5jbGllbnQgPSBjbGllbnQKCiAgICBkZWYgc3RhZmZfb3JfcGVybWlzc2lvbihzZWxmLCBjdHgsIG1lbWJlciwgcGVybWlzc2lvbnMpOgogICAgICAgIGdldHRlciA9IGZ1bmN0b29scy5wYXJ0aWFsKGRpc2NvcmQudXRpbHMuZ2V0LCBjdHguYXV0aG9yLnJvbGVzKQogICAgICAgIHN0YWZmID0gYW55KAogICAgICAgICAgICBnZXR0ZXIoaWQ9aXRlbSkgaXMgbm90IE5vbmUKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpdGVtLCBpbnQpCiAgICAgICAgICAgIGVsc2UgZ2V0dGVyKG5hbWU9aXRlbSkgaXMgbm90IE5vbmUKICAgICAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5jbGllbnQuZ3VpbGRfY2FjaGVbY3R4Lmd1aWxkLmlkXVsibW9kX3JvbGVzIl0KICAgICAgICApCiAgICAgICAgcmV0dXJuIHN0YWZmIG9yIHBlcm1pc3Npb25zCgogICAgZGVmIGNhbl9pbnRlcmFjdChzZWxmLCBpc3N1ZXI6IE1lbWJlciwgdGFyZ2V0OiBNZW1iZXIpOgogICAgICAgICMgcmV0dXJuIGlzc3Vlci5yb2xlc1swXS5wb3NpdGlvbiA+IHRhcmdldC5yb2xlc1swXS5wb3NpdGlvbgogICAgICAgIHJldHVybiAoCiAgICAgICAgICAgIGlzc3Vlci5yb2xlc1tsZW4oaXNzdWVyLnJvbGVzKSAtIDFdLnBvc2l0aW9uCiAgICAgICAgICAgID4gdGFyZ2V0LnJvbGVzW2xlbih0YXJnZXQucm9sZXMpIC0gMV0ucG9zaXRpb24KICAgICAgICAgICAgb3IgaXNzdWVyLmlkID09IGlzc3Vlci5ndWlsZC5vd25lci5pZAogICAgICAgICkKCiAgICBAY29tbWFuZHMuY29tbWFuZChuYW1lPSJiYW4iKQogICAgQGNvbW1hbmRzLmd1aWxkX29ubHkoKQo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgY3R4LmF1dGhvciwgY3R4LmF1dGhvci5ndWlsZF9wZXJtaXNzaW9ucy5iYW5fbWVtYmVycwogICAgICAgICk6CiAgICAgICAgICAgIGF3YWl0IGN0eC5jaGFubmVsLnNlbmQoZiLwn5SSIFlvdSBhcmUgbm90IGFsbG93ZWQgdG8gdXNlIHRoaXMgY29tbWFuZCIpCiAgICAgICAgICAgIHJldHVybgogICAgICAgIGlmIGxlbihpbnB1dHMpID09IDA6CiAgICAgICAgICAgIGF3YWl0IGN0eC5jaGFubmVsLnNlbmQoCiAgICAgICAgICAgICAgICBmIk1pc3NpbmcgcmVxdWlyZWQgYXJndWVtZW50IGBtZW1iZXJgXG5Db21tYW5kIHVzYWdlOiBge3NlbGYuY2xpZW50LnByZWZpeFtzdHIoY3R4Lmd1aWxkLmlkKV19YmFuIFttZW1iZXJdIDxyZWFzb24+YCIKICAgICAgICAgICAgKQogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgdGltZSA9IGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCIlWS0lbS0lZCAlSDolTTolUyIpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBpZiBsZW4oY3R4Lm1lc3NhZ2UubWVudGlvbnMpID4gMCBhbmQgbGVuKGN0eC5tZXNzYWdlLm1lbnRpb25zKSA8IDI6CiAgICAgICAgICAgICAgICBtZW1iZXIgPSBjdHgubWVzc2FnZS5tZW50aW9uc1swXQogICAgICAgICAgICBlbGlmIGN0eC5ndWlsZC5nZXRfbWVtYmVyKGludChpbnB1dHNbMF0pKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgIG1lbWJlciA9IGN0eC5ndWlsZC5nZXRfbWVtYmVyKGludChpbnB1dHNbMF0pKQogICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICBhd2FpdCBjdHguY2hhbm5lbC5zZW5kKGYiQ291bGQgbm90IHBhcnNlIHRoZSBgbWVtYmVyYCBhcmd1ZW1lbnQiKQogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgcmVhc29uID0gTm9uZQoKICAgICAgICBpZiBsZW4oaW5wdXRzKSA+IDE6CiAgICAgICAgICAgIHJlYXNvbiA9ICIgIi5qb2luKGlucHV0c1sxOl0pCgogICAgICAgIGlmIG1lbWJlci5pZCA9PSBjdHguYXV0aG9yLmlkOgogICAgICAgICAgICBzZWxmLmNsaWVudC5sb2dzW3N0cihjdHguZ3VpbGQuaWQpXS5pbnNlcnQoCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgZiJ7dGltZX17JyAnICogNH17Y3R4LmF1dGhvci5uYW1lfSN7Y3R4LmF1dGhvci5kaXNjcmltaW5hdG9yfSAoe2N0eC5hdXRob3IuaWR9KSBhdHRlbXB0ZWQgKGZhaWxlZCkgdG8gIGJhbiB0aGVtc2VsZiwge21lbWJlci5uYW1lfSN7bWVtYmVyLmRpc2NyaW1pbmF0b3J9ICh7bWVtYmVyLmlkfSkge2YnZm9yIHJlYXNvbjoge3JlYXNvbn0nIGlmIHJlYXNvbiBpcyBub3QgTm9uZSBlbHNlICcnfSIsCiAgICAgICAgICAgICkKICAgICAgICAgICAgdXBkYXRlX2xvZ3Moc2VsZi5jbGllbnQubG9ncykKICAgICAgICAgICAgYXdhaXQgY3R4LmNoYW5uZWwuc2VuZChmIllvdSBjYW5ub3QgYmFuIHlvdXJzZWxmISIpCiAgICAgICAgICAgIHJldHVybgoKICAgICAgICBpZiBtZW1iZXIuaWQg"}}]
["68d00d4348ec5b33801a33e970b5bb0b223b8aa4-2","68d00d4348ec5b33801a33e970b5bb0b223b8aa4",{"$cut":{"chars":35052,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRhdGV0aW1lCmZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCmltcG9ydCB0eXBpbmcKaW1wb3J0IGRpc2NvcmQKZnJvbSBkaXNjb3JkIGltcG9ydCBhY3Rpdml0eQpmcm9tIGRpc2NvcmQgaW1wb3J0IG1lc3NhZ2UKZnJvbSBkaXNjb3JkIGltcG9ydCBNZW1iZXIKZnJvbSBkaXNjb3JkIGltcG9ydCBtZW1iZXIKZnJvbSBkaXNjb3JkIGltcG9ydCBwZXJtaXNzaW9ucwpmcm9tIGRpc2NvcmQuYWJjIGltcG9ydCBVc2VyCmZyb20gZGlzY29yZC5jbGllbnQgaW1wb3J0IENsaWVudApmcm9tIGRpc2NvcmQuZW1iZWRzIGltcG9ydCBFbWJlZApmcm9tIGRpc2NvcmQuZXh0IGltcG9ydCBjb21tYW5kcwpmcm9tIGRpc2NvcmQuZXh0LmNvbW1hbmRzLmJvdCBpbXBvcnQgQm90CmZyb20gZGlzY29yZC5lcnJvcnMgaW1wb3J0IEZvcmJpZGRlbgpmcm9tIGRpc2NvcmQuZXh0LmNvbW1hbmRzLmNvcmUgaW1wb3J0IGNvbW1hbmQsIGhhc19hbnlfcm9sZSwgaGFzX3Blcm1pc3Npb25zCmZyb20gZGlzY29yZC5leHQuY29tbWFuZHMuZXJyb3JzIGltcG9ydCBDb21tYW5kTm90Rm91bmQsIE1pc3NpbmdQZXJtaXNzaW9ucwppbXBvcnQganNvbgppbXBvcnQgZnVuY3Rvb2xzCgpmcm9tIFBhcGVyWmVwcGVsaW4gaW1wb3J0IHVwZGF0ZV9sb2dzCgoKY2xhc3MgTW9kKGNvbW1hbmRzLkNvZyk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY2xpZW50OiBDbGllbnQpIC0+IE5vbmU6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5jbGllbnQgPSBjbGllbnQKCiAgICBkZWYgc3RhZmZfb3JfcGVybWlzc2lvbihzZWxmLCBjdHgsIG1lbWJlciwgcGVybWlzc2lvbnMpOgogICAgICAgIGdldHRlciA9IGZ1bmN0b29scy5wYXJ0aWFsKGRpc2NvcmQudXRpbHMuZ2V0LCBjdHguYXV0aG9yLnJvbGVzKQogICAgICAgIHN0YWZmID0gYW55KAogICAgICAgICAgICBnZXR0ZXIoaWQ9aXRlbSkgaXMgbm90IE5vbmUKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpdGVtLCBpbnQpCiAgICAgICAgICAgIGVsc2UgZ2V0dGVyKG5hbWU9aXRlbSkgaXMgbm90IE5vbmUKICAgICAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5jbGllbnQuZ3VpbGRfY2FjaGVbY3R4Lmd1aWxkLmlkXVsibW9kX3JvbGVzIl0KICAgICAgICApCiAgICAgICAgcmV0dXJuIHN0YWZmIG9yIHBlcm1pc3Npb25zCgogICAgZGVmIGNhbl9pbnRlcmFjdChzZWxmLCBpc3N1ZXI6IE1lbWJlciwgdGFyZ2V0OiBNZW1iZXIpOgogICAgICAgICMgcmV0dXJuIGlzc3Vlci5yb2xlc1swXS5wb3NpdGlvbiA+IHRhcmdldC5yb2xlc1swXS5wb3NpdGlvbgogICAgICAgIHJldHVybiAoCiAgICAgICAgICAgIGlzc3Vlci5yb2xlc1tsZW4oaXNzdWVyLnJvbGVzKSAtIDFdLnBvc2l0aW9uCiAgICAgICAgICAgID4gdGFyZ2V0LnJvbGVzW2xlbih0YXJnZXQucm9sZXMpIC0gMV0ucG9zaXRpb24KICAgICAgICAgICAgb3IgaXNzdWVyLmlkID09IGlzc3Vlci5ndWlsZC5vd25lci5pZAogICAgICAgICkKCiAgICBAY29tbWFuZHMuY29tbWFuZChuYW1lPSJiYW4iKQogICAgQGNvbW1hbmRzLmd1aWxkX29ubHkoKQogICAgQGNvbW1hbmRzLmJvdF9oYXNfZ3VpbGRfcGVybWlzc2lvbnMoYmFuX21lbWJlcnM9VHJ1ZSkKICAgIGFzeW5jIGRlZiBiYW5fY29tbWFuZChzZWxmLCBjdHg6IGNvbW1hbmRzLkNvbnRleHQsICppbnB1dHMpOgogICAgICAgICIiIkJhbiBhIHVzZXIgZnJvbSB0aGUgc2VydmVyIiIiCiAgICAgICAgaWYgbm90IHNlbGYuc3RhZmZfb3JfcGVybWlzc2lvbigKICAgICAgICAgICAgY3R4LmF1dGhvciwgY3R4LmF1dGhvci5ndWlsZF9wZXJtaXNzaW9ucy5iYW5fbWVtYmVycwogICAgICAgICk6CiAgICAgICAgICAgIGF3YWl0IGN0eC5jaGFubmVsLnNlbmQoZiLwn5SSIFlvdSBhcmUgbm90IGFsbG93ZWQgdG8gdXNlIHRoaXMgY29tbWFuZCIpCiAgICAgICAgICAgIHJldHVybgogICAgICAgIGlmIGxlbihpbnB1dHMpID09IDA6CiAgICAgICAgICAgIGF3YWl0IGN0eC5jaGFubmVsLnNlbmQoCiAgICAgICAgICAgICAgICBmIk1pc3NpbmcgcmVxdWlyZWQgYXJndWVtZW50IGBtZW1iZXJgXG5Db21tYW5kIHVzYWdlOiBge3NlbGYuY2xpZW50LnByZWZpeFtzdHIoY3R4Lmd1aWxkLmlkKV19YmFuIFttZW1iZXJdIDxyZWFzb24+YCIKICAgICAgICAgICAgKQogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgdGltZSA9IGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCIlWS0lbS0lZCAlSDolTTolUyIpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBpZiBsZW4oY3R4Lm1lc3NhZ2UubWVudGlvbnMpID4gMCBhbmQgbGVuKGN0eC5tZXNzYWdlLm1lbnRpb25zKSA8IDI6CiAgICAgICAgICAgICAgICBtZW1iZXIgPSBjdHgubWVzc2FnZS5tZW50aW9uc1swXQogICAgICAgICAgICBlbGlmIGN0eC5ndWlsZC5nZXRfbWVtYmVyKGludChpbnB1dHNbMF0pKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgIG1lbWJlciA9IGN0eC5ndWlsZC5nZXRfbWVtYmVyKGludChpbnB1dHNbMF0pKQogICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICBhd2FpdCBjdHguY2hhbm5lbC5zZW5kKGYiQ291bGQgbm90IHBhcnNlIHRoZSBgbWVtYmVyYCBhcmd1ZW1lbnQiKQogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgcmVhc29uID0gTm9uZQoKICAgICAgICBpZiBsZW4oaW5wdXRzKSA+IDE6CiAgICAgICAgICAgIHJlYXNvbiA9ICIgIi5qb2luKGlucHV0c1sxOl0pCgogICAgICAgIGlmIG1lbWJlci5pZCA9PSBjdHguYXV0aG9yLmlkOgogICAgICAgICAgICBzZWxmLmNsaWVudC5sb2dzW3N0cihjdHguZ3VpbGQuaWQpXS5pbnNlcnQoCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgZiJ7dGltZX17JyAnICogNH17Y3R4LmF1dGhvci5uYW1lfSN7Y3R4LmF1dGhvci5kaXNjcmltaW5hdG9yfSAoe2N0eC5hdXRob3IuaWR9KSBhdHRlbXB0ZWQgKGZhaWxlZCkgdG8gIGJhbiB0aGVtc2VsZiwge21lbWJlci5uYW1lfSN7bWVtYmVyLmRpc2NyaW1pbmF0b3J9ICh7bWVtYmVyLmlkfSkge2YnZm9yIHJlYXNvbjoge3JlYXNvbn0nIGlm"}}]
["68d00d4348ec5b33801a33e970b5bb0b223b8aa4-3","68d00d4348ec5b33801a33e970b5bb0b223b8aa4",{"$cut":{"chars":23308,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRhdGV0aW1lCmZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCmltcG9ydCB0eXBpbmcKaW1wb3J0IGRpc2NvcmQKZnJvbSBkaXNjb3JkIGltcG9ydCBhY3Rpdml0eQpmcm9tIGRpc2NvcmQgaW1wb3J0IG1lc3NhZ2UKZnJvbSBkaXNjb3JkIGltcG9ydCBNZW1iZXIKZnJvbSBkaXNjb3JkIGltcG9ydCBtZW1iZXIKZnJvbSBkaXNjb3JkIGltcG9ydCBwZXJtaXNzaW9ucwpmcm9tIGRpc2NvcmQuYWJjIGltcG9ydCBVc2VyCmZyb20gZGlzY29yZC5jbGllbnQgaW1wb3J0IENsaWVudApmcm9tIGRpc2NvcmQuZW1iZWRzIGltcG9ydCBFbWJlZApmcm9tIGRpc2NvcmQuZXh0IGltcG9ydCBjb21tYW5kcwpmcm9tIGRpc2NvcmQuZXh0LmNvbW1hbmRzLmJvdCBpbXBvcnQgQm90CmZyb20gZGlzY29yZC5lcnJvcnMgaW1wb3J0IEZvcmJpZGRlbgpmcm9tIGRpc2NvcmQuZXh0LmNvbW1hbmRzLmNvcmUgaW1wb3J0IGNvbW1hbmQsIGhhc19hbnlfcm9sZSwgaGFzX3Blcm1pc3Npb25zCmZyb20gZGlzY29yZC5leHQuY29tbWFuZHMuZXJyb3JzIGltcG9ydCBDb21tYW5kTm90Rm91bmQsIE1pc3NpbmdQZXJtaXNzaW9ucwppbXBvcnQganNvbgppbXBvcnQgZnVuY3Rvb2xzCgpmcm9tIFBhcGVyWmVwcGVsaW4gaW1wb3J0IHVwZGF0ZV9sb2dzCgoKY2xhc3MgTW9kKGNvbW1hbmRzLkNvZyk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY2xpZW50OiBDbGllbnQpIC0+IE5vbmU6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5jbGllbnQgPSBjbGllbnQKCiAgICBkZWYgc3RhZmZfb3JfcGVybWlzc2lvbihzZWxmLCBjdHgsIG1lbWJlciwgcGVybWlzc2lvbnMpOgogICAgICAgIGdldHRlciA9IGZ1bmN0b29scy5wYXJ0aWFsKGRpc2NvcmQudXRpbHMuZ2V0LCBjdHguYXV0aG9yLnJvbGVzKQogICAgICAgIHN0YWZmID0gYW55KAogICAgICAgICAgICBnZXR0ZXIoaWQ9aXRlbSkgaXMgbm90IE5vbmUKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpdGVtLCBpbnQpCiAgICAgICAgICAgIGVsc2UgZ2V0dGVyKG5hbWU9aXRlbSkgaXMgbm90IE5vbmUKICAgICAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5jbGllbnQuZ3VpbGRfY2FjaGVbY3R4Lmd1aWxkLmlkXVsibW9kX3JvbGVzIl0KICAgICAgICApCiAgICAgICAgcmV0dXJuIHN0YWZmIG9yIHBlcm1pc3Npb25zCgogICAgZGVmIGNhbl9pbnRlcmFjdChzZWxmLCBpc3N1ZXI6IE1lbWJlciwgdGFyZ2V0OiBNZW1iZXIpOgogICAgICAgICMgcmV0dXJuIGlzc3Vlci5yb2xlc1swXS5wb3NpdGlvbiA+IHRhcmdldC5yb2xlc1swXS5wb3NpdGlvbgogICAgICAgIHJldHVybiAoCiAgICAgICAgICAgIGlzc3Vlci5yb2xlc1tsZW4oaXNzdWVyLnJvbGVzKSAtIDFdLnBvc2l0aW9uCiAgICAgICAgICAgID4gdGFyZ2V0LnJvbGVzW2xlbih0YXJnZXQucm9sZXMpIC0gMV0ucG9zaXRpb24KICAgICAgICAgICAgb3IgaXNzdWVyLmlkID09IGlzc3Vlci5ndWlsZC5vd25lci5pZAogICAgICAgICkKCiAgICBAY29tbWFuZHMuY29tbWFuZChuYW1lPSJiYW4iKQogICAgQGNvbW1hbmRzLmd1aWxkX29ubHkoKQogICAgQGNvbW1hbmRzLmJvdF9oYXNfZ3VpbGRfcGVybWlzc2lvbnMoYmFuX21lbWJlcnM9VHJ1ZSkKICAgIGFzeW5jIGRlZiBiYW5fY29tbWFuZChzZWxmLCBjdHg6IGNvbW1hbmRzLkNvbnRleHQsICppbnB1dHMpOgogICAgICAgICIiIkJhbiBhIHVzZXIgZnJvbSB0aGUgc2VydmVyIiIiCiAgICAgICAgaWYgbm90IHNlbGYuc3RhZmZfb3JfcGVybWlzc2lvbigKICAgICAgICAgICAgY3R4LmF1dGhvciwgY3R4LmF1dGhvci5ndWlsZF9wZXJtaXNzaW9ucy5iYW5fbWVtYmVycwogICAgICAgICk6CiAgICAgICAgICAgIGF3YWl0IGN0eC5jaGFubmVsLnNlbmQoZiLwn5SSIFlvdSBhcmUgbm90IGFsbG93ZWQgdG8gdXNlIHRoaXMgY29tbWFuZCIpCiAgICAgICAgICAgIHJldHVybgogICAgICAgIGlmIGxlbihpbnB1dHMpID09IDA6CiAgICAgICAgICAgIGF3YWl0IGN0eC5jaGFubmVsLnNlbmQoCiAgICAgICAgICAgICAgICBmIk1pc3NpbmcgcmVxdWlyZWQgYXJndWVtZW50IGBtZW1iZXJgXG5Db21tYW5kIHVzYWdlOiBge3NlbGYuY2xpZW50LnByZWZpeFtzdHIoY3R4Lmd1aWxkLmlkKV19YmFuIFttZW1iZXJdIDxyZWFzb24+YCIKICAgICAgICAgICAgKQogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgdGltZSA9IGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCIlWS0lbS0lZCAlSDolTTolUyIpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBpZiBsZW4oY3R4Lm1lc3NhZ2UubWVudGlvbnMpID4gMCBhbmQgbGVuKGN0eC5tZXNzYWdlLm1lbnRpb25zKSA8IDI6CiAgICAgICAgICAgICAgICBtZW1iZXIgPSBjdHgubWVzc2FnZS5tZW50aW9uc1swXQogICAgICAgICAgICBlbGlmIGN0eC5ndWlsZC5nZXRfbWVtYmVyKGludChpbnB1dHNbMF0pKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgIG1lbWJlciA9IGN0eC5ndWlsZC5nZXRfbWVtYmVyKGludChpbnB1dHNbMF0pKQogICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICBhd2FpdCBjdHguY2hhbm5lbC5zZW5kKGYiQ291bGQgbm90IHBhcnNlIHRoZSBgbWVtYmVyYCBhcmd1ZW1lbnQiKQogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgcmVhc29uID0gTm9uZQoKICAgICAgICBpZiBsZW4oaW5wdXRzKSA+IDE6CiAgICAgICAgICAgIHJlYXNvbiA9ICIgIi5qb2luKGlucHV0c1sxOl0pCgogICAgICAgIGlmIG1lbWJlci5pZCA9PSBjdHguYXV0aG9yLmlkOgogICAgICAgICAgICBzZWxmLmNsaWVudC5sb2dzW3N0cihjdHguZ3VpbGQuaWQpXS5pbnNlcnQoCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgZiJ7dGltZX17JyAnICogNH17Y3R4LmF1dGhvci5uYW1lfSN7Y3R4LmF1dGhvci5kaXNjcmltaW5hdG9yfSAoe2N0eC5hdXRob3IuaWR9KSBhdHRlbXB0ZWQgKGZhaWxlZCkgdG8gIGJhbiB0aGVtc2VsZiwge21lbWJlci5uYW1lfSN7bWVtYmVyLmRpc2NyaW1pbmF0b3J9ICh7bWVtYmVyLmlkfSkge2YnZm9yIHJlYXNvbjoge3JlYXNvbn0nIGlm"}}]
["e7954b85b7061553df8c3c163ba84ba1dd30f4f4-1","e7954b85b7061553df8c3c163ba84ba1dd30f4f4",{"$cut":{"chars":63944,"head":"PHxmaW1fcHJlZml4fD4KIyB0ZXN0cy90ZXN0X3Byb3ZpZGVyX2ZvcnRpbmV0ZGV2X2ZvcnRpb3MucHkKIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSB0b29scy9tYWtlY29kZS5weSAoMjQtU2VwLTIwMjEgMTU6MTY6NDEgVVRDKQoKCmRlZiB0ZXN0X3Byb3ZpZGVyX2ltcG9ydCgpOgogICAgaW1wb3J0IHRlcnJhc2NyaXB0LnByb3ZpZGVyLmZvcnRpbmV0ZGV2LmZvcnRpb3MKCgpkZWYgdGVzdF9yZXNvdXJjZV9pbXBvcnQoKToKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19hbGVydGVtYWlsX3NldHRpbmcKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfYW50aXZpcnVzX2hldXJpc3RpYwoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19hbnRpdmlydXNfcHJvZmlsZQoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19hbnRpdmlydXNfcXVhcmFudGluZQoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19hbnRpdmlydXNfc2V0dGluZ3MKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfYXBwbGljYXRpb25fY3VzdG9tCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2FwcGxpY2F0aW9uX2dyb3VwCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2FwcGxpY2F0aW9uX2xpc3QKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfYXBwbGljYXRpb25fbmFtZQoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgKAogICAgICAgIGZvcnRpb3NfYXBwbGljYXRpb25fcnVsZXNldHRpbmdzLAogICAgKQoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19hdXRoZW50aWNhdGlvbl9ydWxlCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2F1dGhlbnRpY2F0aW9uX3NjaGVtZQoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19hdXRoZW50aWNhdGlvbl9zZXR0aW5nCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2NlcnRpZmljYXRlX2NhCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2NlcnRpZmljYXRlX2NybAoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19jZXJ0aWZpY2F0ZV9sb2NhbAoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19jZXJ0aWZpY2F0ZV9yZW1vdGUKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfY2lmc19kb21haW5jb250cm9sbGVyCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2NpZnNfcHJvZmlsZQoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgKAogICAgICAgIGZvcnRpb3NfY3JlZGVudGlhbHN0b3JlX2RvbWFpbmNvbnRyb2xsZXIsCiAgICApCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2RscF9maWxlcGF0dGVybgoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19kbHBfZnBkb2Nzb3VyY2UKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfZGxwX2Zwc2Vuc2l0aXZpdHkKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfZGxwX3NlbnNpdGl2aXR5CgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2RscF9zZW5zb3IKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfZGxwX3NldHRpbmdzCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2Ruc2ZpbHRlcl9kb21haW5maWx0ZXIKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfZG5zZmlsdGVyX3Byb2ZpbGUKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfZHBka19jcHVzCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2RwZGtfZ2xvYmFsCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCAoCiAgICAgICAgZm9ydGlvc19lbWFpbGZpbHRlcl9ibG9ja2FsbG93bGlzdCwKICAgICkKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfZW1haWxmaWx0ZXJfYndsCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2VtYWlsZmls"}}]
["e7954b85b7061553df8c3c163ba84ba1dd30f4f4-2","e7954b85b7061553df8c3c163ba84ba1dd30f4f4",{"$cut":{"chars":102008,"head":"PHxmaW1fcHJlZml4fD4KIyB0ZXN0cy90ZXN0X3Byb3ZpZGVyX2ZvcnRpbmV0ZGV2X2ZvcnRpb3MucHkKIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSB0b29scy9tYWtlY29kZS5weSAoMjQtU2VwLTIwMjEgMTU6MTY6NDEgVVRDKQoKCmRlZiB0ZXN0X3Byb3ZpZGVyX2ltcG9ydCgpOgogICAgaW1wb3J0IHRlcnJhc2NyaXB0LnByb3ZpZGVyLmZvcnRpbmV0ZGV2LmZvcnRpb3MKCgpkZWYgdGVzdF9yZXNvdXJjZV9pbXBvcnQoKToKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19hbGVydGVtYWlsX3NldHRpbmcKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfYW50aXZpcnVzX2hldXJpc3RpYwoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19hbnRpdmlydXNfcHJvZmlsZQoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19hbnRpdmlydXNfcXVhcmFudGluZQoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19hbnRpdmlydXNfc2V0dGluZ3MKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfYXBwbGljYXRpb25fY3VzdG9tCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2FwcGxpY2F0aW9uX2dyb3VwCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2FwcGxpY2F0aW9uX2xpc3QKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfYXBwbGljYXRpb25fbmFtZQoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgKAogICAgICAgIGZvcnRpb3NfYXBwbGljYXRpb25fcnVsZXNldHRpbmdzLAogICAgKQoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19hdXRoZW50aWNhdGlvbl9ydWxlCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2F1dGhlbnRpY2F0aW9uX3NjaGVtZQoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19hdXRoZW50aWNhdGlvbl9zZXR0aW5nCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2NlcnRpZmljYXRlX2NhCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2NlcnRpZmljYXRlX2NybAoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19jZXJ0aWZpY2F0ZV9sb2NhbAoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19jZXJ0aWZpY2F0ZV9yZW1vdGUKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfY2lmc19kb21haW5jb250cm9sbGVyCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2NpZnNfcHJvZmlsZQoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgKAogICAgICAgIGZvcnRpb3NfY3JlZGVudGlhbHN0b3JlX2RvbWFpbmNvbnRyb2xsZXIsCiAgICApCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2RscF9maWxlcGF0dGVybgoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19kbHBfZnBkb2Nzb3VyY2UKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfZGxwX2Zwc2Vuc2l0aXZpdHkKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfZGxwX3NlbnNpdGl2aXR5CgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2RscF9zZW5zb3IKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfZGxwX3NldHRpbmdzCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2Ruc2ZpbHRlcl9kb21haW5maWx0ZXIKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfZG5zZmlsdGVyX3Byb2ZpbGUKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfZHBka19jcHVzCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2RwZGtfZ2xvYmFsCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCAoCiAgICAgICAgZm9ydGlvc19lbWFpbGZpbHRlcl9ibG9ja2FsbG93bGlzdCwKICAgICkKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfZW1haWxmaWx0ZXJfYndsCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2VtYWlsZmls"}}]
["e7954b85b7061553df8c3c163ba84ba1dd30f4f4-3","e7954b85b7061553df8c3c163ba84ba1dd30f4f4",{"$cut":{"chars":102980,"head":"PHxmaW1fcHJlZml4fD4KIyB0ZXN0cy90ZXN0X3Byb3ZpZGVyX2ZvcnRpbmV0ZGV2X2ZvcnRpb3MucHkKIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSB0b29scy9tYWtlY29kZS5weSAoMjQtU2VwLTIwMjEgMTU6MTY6NDEgVVRDKQoKCmRlZiB0ZXN0X3Byb3ZpZGVyX2ltcG9ydCgpOgogICAgaW1wb3J0IHRlcnJhc2NyaXB0LnByb3ZpZGVyLmZvcnRpbmV0ZGV2LmZvcnRpb3MKCgpkZWYgdGVzdF9yZXNvdXJjZV9pbXBvcnQoKToKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19hbGVydGVtYWlsX3NldHRpbmcKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfYW50aXZpcnVzX2hldXJpc3RpYwoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19hbnRpdmlydXNfcHJvZmlsZQoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19hbnRpdmlydXNfcXVhcmFudGluZQoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19hbnRpdmlydXNfc2V0dGluZ3MKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfYXBwbGljYXRpb25fY3VzdG9tCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2FwcGxpY2F0aW9uX2dyb3VwCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2FwcGxpY2F0aW9uX2xpc3QKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfYXBwbGljYXRpb25fbmFtZQoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgKAogICAgICAgIGZvcnRpb3NfYXBwbGljYXRpb25fcnVsZXNldHRpbmdzLAogICAgKQoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19hdXRoZW50aWNhdGlvbl9ydWxlCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2F1dGhlbnRpY2F0aW9uX3NjaGVtZQoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19hdXRoZW50aWNhdGlvbl9zZXR0aW5nCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2NlcnRpZmljYXRlX2NhCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2NlcnRpZmljYXRlX2NybAoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19jZXJ0aWZpY2F0ZV9sb2NhbAoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19jZXJ0aWZpY2F0ZV9yZW1vdGUKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfY2lmc19kb21haW5jb250cm9sbGVyCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2NpZnNfcHJvZmlsZQoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgKAogICAgICAgIGZvcnRpb3NfY3JlZGVudGlhbHN0b3JlX2RvbWFpbmNvbnRyb2xsZXIsCiAgICApCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2RscF9maWxlcGF0dGVybgoKICAgIGZyb20gdGVycmFzY3JpcHQucmVzb3VyY2UuZm9ydGluZXRkZXYuZm9ydGlvcyBpbXBvcnQgZm9ydGlvc19kbHBfZnBkb2Nzb3VyY2UKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfZGxwX2Zwc2Vuc2l0aXZpdHkKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfZGxwX3NlbnNpdGl2aXR5CgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2RscF9zZW5zb3IKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfZGxwX3NldHRpbmdzCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2Ruc2ZpbHRlcl9kb21haW5maWx0ZXIKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfZG5zZmlsdGVyX3Byb2ZpbGUKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfZHBka19jcHVzCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2RwZGtfZ2xvYmFsCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCAoCiAgICAgICAgZm9ydGlvc19lbWFpbGZpbHRlcl9ibG9ja2FsbG93bGlzdCwKICAgICkKCiAgICBmcm9tIHRlcnJhc2NyaXB0LnJlc291cmNlLmZvcnRpbmV0ZGV2LmZvcnRpb3MgaW1wb3J0IGZvcnRpb3NfZW1haWxmaWx0ZXJfYndsCgogICAgZnJvbSB0ZXJyYXNjcmlwdC5yZXNvdXJjZS5mb3J0aW5ldGRldi5mb3J0aW9zIGltcG9ydCBmb3J0aW9zX2VtYWlsZmls"}}]
["1528569b310f0c9f9a8e5fd56d141f745c12e7ff-1","1528569b310f0c9f9a8e5fd56d141f745c12e7ff","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgoKaW1wb3J0IHJvc2xpYgpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZWRlbHRhCnJvc2xpYi5sb2FkX21hbmlmZXN0KCduZXh0Zm9vZF90YXNrcycpCmltcG9ydCByb3NweQppbXBvcnQgYWN0aW9ubGliCjx8ZmltX2hvbGV8Pgpmcm9tIG5leHRmb29kX3Rhc2tzLm1zZyBpbXBvcnQgKgoKCmNsYXNzIERvV2F0ZXJQdW1waW5nU2VydmVyOgoKCiAgX3B1bXBfc3RhcnR1cF90aW1lID0gMAogIF9kZXZpY2VfdmFsdmVfMSA9IDEKICBfZGV2aWNlX3ZhbHZlXzIgPSAyCiAgX2RldmljZV92YWx2ZV8zID0gMwoKICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CiAgICBzZWxmLl9hY3Rpb25fbmFtZSA9IG5hbWUKICAgIHNlbGYuY29ubmVjdF9zZXJ2ZXIoKQoKICBkZWYgY29ubmVjdF9zZXJ2ZXIoc2VsZik6CiAgICByb3NweS5sb2dpbmZvKCJSZWdpc3RlcmluZyBhbmQgc3RhcnRpbmcgYWN0aW9uIHNlcnZlcjogIiArIHNlbGYuX2FjdGlvbl9uYW1lKQogICAgc2VsZi5fc2VydmVyID0gYWN0aW9ubGliLlNpbXBsZUFjdGlvblNlcnZlcihzZWxmLl9hY3Rpb25fbmFtZSwgRG9XYXRlclB1bXBpbmdBY3Rpb24sIHNlbGYuZXhlY3V0ZSwgRmFsc2UpCiAgICBzZWxmLl9zZXJ2ZXIuc3RhcnQoKQoKICBkZWYgZXhlY3V0ZShzZWxmLCBnb2FsKToKICAgIHN1Y2Nlc3MgPSBUcnVlCiAgICByb3NweS5sb2dpbmZvKCJTdGFydGluZyBXYXRlciBQdW1waW5nLiBXYXRlciBQdW1waW5nIGZvciB7fSBzIi5mb3JtYXQoZ29hbC53YXRlcl9wdW1waW5nX3RpbWUpKQoKICAgIHNldF9wdW1wID0gTm9uZQogICAgdHJ5OgogICAgICAgIHNldF9wdW1wID0gcm9zcHkuU2VydmljZVByb3h5KCdncm93Ym94X3dhdGVyX3B1bXAvcmVsYXknLCBPcGVyYXRlUmVsYXkpCiAgICAgICAgcHVtcF90aW1lID0gdGltZS50aW1lKCkKICAgICAgICAjIFNldHVwCiAgICAgICAgcm9zcHkubG9naW5mbygiRW5hYmxpbmcgV2F0ZXIgUHVtcGluZy4iKQogICAgICAgIHNldF9wdW1wKFRydWUpCiAgICAgICAgdGltZS5zbGVlcChnb2FsLndhdGVyX3B1bXBpbmdfdGltZSkKICAgICAgICBzZXRfcHVtcChGYWxzZSkKICAgICAgICByb3NweS5sb2dpbmZvKCJTaHV0dGluZyBvZmYgV2F0ZXIgUHVtcDogRWxhcHNlZCB7fSBzIi5mb3JtYXQodGltZS50aW1lKCktcHVtcF90aW1lKSkKICAgICAgICB0b3RhbF9wdW1wX3RpbWUgPSB0aW1lLnRpbWUoKSAtIHB1bXBfdGltZQoKICAgICAgICByZXMgPSBEb1dhdGVyUHVtcGluZ1Jlc3VsdCgpCiAgICAgICAgcmVzLnRvdGFsX3B1bXBfdGltZSA9IHRvdGFsX3B1bXBfdGltZQogICAgICAgIHJvc3B5LmxvZ2luZm8oJ1dhdGVyIFB1bXBpbmcgYWN0aW9uIHNlcnZlciBoYXMgZmluaXNoZWQgaXRzIGdvYWwuIFRvdGFsIHdhdGVyIHB1bXAgdGltZSB7fSBzLicuZm9ybWF0KHRvdGFsX3B1bXBfdGltZSkpCiAgICAgICAgc2VsZi5fc2VydmVyLnNldF9zdWNjZWVkZWQocmVzKQoKICAgIGV4Y2VwdCByb3NweS5TZXJ2aWNlRXhjZXB0aW9uLCBlOgogICAgICAgIHJvc3B5LmxvZ2VycigiU2VydmljZSBjYWxsIGZvciBXYXRlciBQdW1waW5nIGZhaWxlZDoge30iLmZvcm1hdChlKSkKICAgICAgICBpZiBzZXRfcHVtcDoKICAgICAgICAgICAgc2V0X3B1bXAoRmFsc2UpCiAgICAgICAgc2VsZi5jb25uZWN0X3NlcnZlcigpCiAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBlOgogICAgICAgIHJvc3B5LmxvZ2VycigiV2F0ZXIgUHVtcGluZyBleGVjdXRpb24gZmFpbGVkOiAiICsgc3RyKGUpKQogICAgICAgIGlmIHNldF9wdW1wOgogICAgICAgICAgICBzZXRfcHVtcChGYWxzZSkKICAgICAgICBzZWxmLmNvbm5lY3Rfc2VydmVyKCkKCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICByb3NweS5pbml0X25vZGUoJ3dhdGVyX3B1bXBpbmdfc2VydmVyJykKICBzZXJ2ZXIgPSBEb1dhdGVyUHVtcGluZ1NlcnZlcihyb3NweS5nZXRfbmFtZSgpKQogIHJvc3B5LnNwaW4oKQo8fGZpbV9zdWZmaXh8PgppbXBvcnQgdGltZQpmcm9tIGNsaWVudF9wd21fZHJpdmVyX3g2LnNydiBpbXBvcnQgT3BlcmF0ZVB3bQpmcm9tIGNsaWVudF9yZWxheV94MS5zcnYgaW1wb3J0IE9wZXJhdGVSZWxheQoKPHxmaW1fZW5kfD4="]
["1528569b310f0c9f9a8e5fd56d141f745c12e7ff-2","1528569b310f0c9f9a8e5fd56d141f745c12e7ff","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgoKaW1wb3J0IHJvc2xpYgpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZWRlbHRhCnJvc2xpYi5sb2FkX21hbmlmZXN0KCduZXh0Zm9vZF90YXNrcycpCmltcG9ydCByb3NweQppbXBvcnQgYWN0aW9ubGliCmltcG9ydCB0aW1lCmZyb20gY2xpZW50X3B3bV9kcml2ZXJfeDYuc3J2IGltcG9ydCBPcGVyYXRlUHdtCmZyb20gY2xpZW50X3JlbGF5X3gxLnNydiBpbXBvcnQgT3BlcmF0ZVJlbGF5Cgpmcm9tIG5leHRmb29kX3Rhc2tzLm1zZyBpbXBvcnQgKgoKCmNsYXNzIERvV2F0ZXJQdW1waW5nU2VydmVyOgoKCiAgX3B1bXBfc3RhcnR1cF90aW1lID0gMAogIF9kZXZpY2VfdmFsdmVfMSA9IDEKICBfZGV2aWNlX3ZhbHZlXzIgPSAyCiAgX2RldmljZV92YWx2ZV8zID0gMwoKICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CiAgICBzZWxmLl9hY3Rpb25fbmFtZSA9IG5hbWUKICAgIHNlbGYuY29ubmVjdF9zZXJ2ZXIoKQoKICBkZWYgY29ubmVjdF9zZXJ2ZXIoc2VsZik6CiAgICByb3NweS5sb2dpbmZvKCJSZWdpc3RlcmluZyBhbmQgc3RhcnRpbmcgYWN0aW9uIHNlcnZlcjogIiArIHNlbGYuX2FjdGlvbl9uYW1lKQogICAgc2VsZi5fc2VydmVyID0gYWN0aW9ubGliLlNpbXBsZUFjdGlvblNlcnZlcihzZWxmLl9hY3Rpb25fbmFtZSwgRG9XYXRlclB1bXBpbmdBY3Rpb24sIHNlbGYuZXhlY3V0ZSwgRmFsc2UpCiAgICBzZWxmLl9zZXJ2ZXIuc3RhcnQoKQoKICBkZWYgZXhlY3V0ZShzZWxmLCBnb2FsKToKICAgIHN1Y2Nlc3MgPSBUcnVlCiAgICByb3NweS5sb2dpbmZvKCJTdGFydGluZyBXYXRlciBQdW1waW5nLiBXYXRlciBQdW1waW5nIGZvciB7fSBzIi5mb3JtYXQoZ29hbC53YXRlcl9wdW1waW5nX3RpbWUpKQoKICAgIHNldF9wdW1wID0gTm9uZQogICAgdHJ5OgogICAgICAgIHNldF9wdW1wID0gcm9zcHkuU2VydmljZVByb3h5KCdncm93Ym94X3dhdGVyX3B1bXAvcmVsYXknLCBPcGVyYXRlUmVsYXkpCiAgICAgICAgcHVtcF90aW1lID0gdGltZS50aW1lKCkKICAgICAgICAjIFNldHVwCiAgICAgICAgcm9zcHkubG9naW5mbygiRW5hYmxpbmcgV2F0ZXIgUHVtcGluZy4iKQogICAgICAgIHNldF9wdW1wKFRydWUpCiAgICAgICAgdGltZS5zbGVlcChnb2FsLndhdGVyX3B1bXBpbmdfdGltZSkKICAgICAgICBzZXRfcHVtcChGYWxzZSkKICAgICAgICByb3NweS5sb2dpbmZvKCJTaHV0dGluZyBvZmYgV2F0ZXIgUHVtcDogRWxhcHNlZCB7fSBzIi5mb3JtYXQodGltZS50aW1lKCktcHVtcF90aW1lKSkKICAgICAgICB0b3RhbF9wdW1wX3RpbWUgPSB0aW1lLnRpbWUoKSAtIHB1bXBfdGltZQoKICAgICAgICByZXMgPSBEb1dhdGVyUHVtcGluZ1Jlc3VsdCgpCiAgICAgICAgcmVzLnRvdGFsX3B1bXBfdGltZSA9IHRvdGFsX3B1bXBfdGltZQogICAgICAgIHJvc3B5LmxvZ2luZm8oJ1dhdGVyIFB1bXBpbmcgYWN0aW9uIHNlcnZlciBoYXMgZmluaXNoZWQgaXRzIGdvYWwuIFRvdGFsIHdhdGVyIHB1bXAgdGltZSB7fSBzLicuZm9ybWF0KHRvdGFsX3B1bXBfdGltZSkpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLl9zZXJ2ZXIuc2V0X3N1Y2NlZWRlZChyZXMpCgo8fGZpbV9lbmR8Pg=="]
["1528569b310f0c9f9a8e5fd56d141f745c12e7ff-3","1528569b310f0c9f9a8e5fd56d141f745c12e7ff","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgoKaW1wb3J0IHJvc2xpYgpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZWRlbHRhCnJvc2xpYi5sb2FkX21hbmlmZXN0KCduZXh0Zm9vZF90YXNrcycpCmltcG9ydCByb3NweQppbXBvcnQgYWN0aW9ubGliCmltcG9ydCB0aW1lCmZyb20gY2xpZW50X3B3bV9kcml2ZXJfeDYuc3J2IGltcG9ydCBPcGVyYXRlUHdtCmZyb20gY2xpZW50X3JlbGF5X3gxLnNydiBpbXBvcnQgT3BlcmF0ZVJlbGF5Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmZyb20gbmV4dGZvb2RfdGFza3MubXNnIGltcG9ydCAqCgoKPHxmaW1fZW5kfD4="]
["a9d10d086c585e317982d2fe53d1e8764e1ab18e-1","a9d10d086c585e317982d2fe53d1e8764e1ab18e","PHxmaW1fcHJlZml4fD4KIwojIFB5U05NUCBNSUIgbW9kdWxlIFdXUC1MRU9TLUVYVC1MQUctTUlCIChodHRwOi8vc25tcGxhYnMuY29tL3B5c21pKQojIEFTTi4xIHNvdXJjZSBmaWxlOi8vL1VzZXJzL2Rhdndhbmc0L0Rldi9taWJzLnNubXBsYWJzLmNvbS9hc24xL1dXUC1MRU9TLUVYVC1MQUctTUlCCiMgUHJvZHVjZWQgYnkgcHlzbWktMC4zLjQgYXQgV2VkIE1heSAgMSAxNTozNzo1MyAyMDE5CiMgT24gaG9zdCBEQVZXQU5HNC1NLTE0NzUgcGxhdGZvcm0gRGFyd2luIHZlcnNpb24gMTguNS4wIGJ5IHVzZXIgZGF2d2FuZzQKIyBVc2luZyBQeXRob24gdmVyc2lvbiAzLjcuMyAoZGVmYXVsdCwgTWFyIDI3IDIwMTksIDA5OjIzOjE1KSAKIwpPYmplY3RJZGVudGlmaWVyLCBPY3RldFN0cmluZywgSW50ZWdlciA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiQVNOMSIsICJPYmplY3RJZGVudGlmaWVyIiwgIk9jdGV0U3RyaW5nIiwgIkludGVnZXIiKQpOYW1lZFZhbHVlcywgPSBtaWJCdWlsZGVyLmltcG9ydFN5bWJvbHMoIkFTTjEtRU5VTUVSQVRJT04iLCAiTmFtZWRWYWx1ZXMiKQpDb25zdHJhaW50c0ludGVyc2VjdGlvbiwgU2luZ2xlVmFsdWVDb25zdHJhaW50LCBWYWx1ZVNpemVDb25zdHJhaW50LCBDb25zdHJhaW50c1VuaW9uLCBWYWx1ZVJhbmdlQ29uc3RyYWludCA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiQVNOMS1SRUZJTkVNRU5UIiwgIkNvbnN0cmFpbnRzSW50ZXJzZWN0aW9uIiwgIlNpbmdsZVZhbHVlQ29uc3RyYWludCIsICJWYWx1ZVNpemVDb25zdHJhaW50IiwgIkNvbnN0cmFpbnRzVW5pb24iLCAiVmFsdWVSYW5nZUNvbnN0cmFpbnQiKQpNb2R1bGVDb21wbGlhbmNlLCBOb3RpZmljYXRpb25Hcm91cCA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiU05NUHYyLUNPTkYiLCAiTW9kdWxlQ29tcGxpYW5jZSIsICJOb3RpZmljYXRpb25Hcm91cCIpCk9iamVjdElkZW50aXR5LCBJcEFkZHJlc3MsIENvdW50ZXI2NCwgSW50ZWdlcjMyLCBNaWJJZGVudGlmaWVyLCBNaWJTY2FsYXIsIE1pYlRhYmxlLCBNaWJUYWJsZVJvdywgTWliVGFibGVDb2x1bW4sIE5vdGlmaWNhdGlvblR5cGUsIEJpdHMsIEdhdWdlMzIsIENvdW50ZXIzMiwgVGltZVRpY2tzLCBpc28sIFVuc2lnbmVkMzIsIE1vZHVsZUlkZW50aXR5ID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJTTk1QdjItU01JIiwgIk9iamVjdElkZW50aXR5IiwgIklwQWRkcmVzcyIsICJDb3VudGVyNjQiLCAiSW50ZWdlcjMyIiwgIk1pYklkZW50aWZpZXIiLCAiTWliU2NhbGFyIiwgIk1pYlRhYmxlIiwgIk1pYlRhYmxlUm93IiwgIk1pYlRhYmxlQ29sdW1uIiwgIk5vdGlmaWNhdGlvblR5cGUiLCAiQml0cyIsICJHYXVnZTMyIiwgIkNvdW50ZXIzMiIsICJUaW1lVGlja3MiLCAiaXNvIiwgIlVuc2lnbmVkMzIiLCAiTW9kdWxlSWRlbnRpdHkiKQpSb3dTdGF0dXMsIERpc3BsYXlTdHJpbmcsIFRleHR1YWxDb252ZW50aW9uID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJTTk1QdjItVEMiLCAiUm93U3RhdHVzIiwgIkRpc3BsYXlTdHJpbmciLCAiVGV4dHVhbENvbnZlbnRpb24iKQp3d3BNb2R1bGVzTGVvcywgPSBtaWJCdWlsZGVyLmltcG9ydFN5bWJvbHMoIldXUC1TTUkiLCAid3dwTW9kdWxlc0xlb3MiKQp3d3BMZW9zRXh0TGFnTUlCID0gTW9kdWxlSWRlbnRpdHkoKDEsIDMsIDYsIDEsIDQsIDEsIDYxNDEsIDIsIDYwLCAxNCkpCnd3cExlb3NFeHRMYWdNSUIuc2V0UmV2aXNpb25zKCgnMjAwMy0wMS0xNSAxNzowMCcsKSkKCmlmIGdldGF0dHIobWliQnVpbGRlciwgJ3ZlcnNpb24nLCAoMCwgMCwgMCkpID4gKDQsIDQsIDApOgogICAgaWYgbWliQnVpbGRlci5sb2FkVGV4dHM6IHd3cExlb3NFeHRMYWdNSUIuc2V0UmV2aXNpb25zRGVzY3JpcHRpb25zKCgnSW5pdGlhbCBjcmVhdGlvbi4nLCkpCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiB3d3BMZW9zRXh0TGFnTUlCLnNldExhc3RVcGRhdGVkKCcyMDAzMDExNTE3MDBaJykKaWYgbWliQnVpbGRlci5sb2FkVGV4dHM6IHd3cExlb3NFeHRMYWdNSUIuc2V0T3JnYW5pemF0aW9uKCdDaWVuYSwgSW5jJykKaWYgbWliQnVpbGRlci5sb2FkVGV4dHM6IHd3cExlb3NFeHRMYWdNSUIuc2V0Q29udGFjdEluZm8oJyBNaWIgTWVpc3RlciAxMTUgTm9ydGggU3VsbGl2YW4gUm9hZCBTcG9rYW5lIFZhbGxleSwgV0EgOTkwMzcgVVNBIFBob25lOiArMSA1MDkgMjQyIDkwMDAgRW1haWw6IHN1cHBvcnRAY2llbmEuY29tJykKaWYgbWliQnVpbGRlci5sb2FkVGV4dHM6IHd3cExlb3NFeHRMYWdNSUIuc2V0RGVzY3JpcHRpb24oJ1RoaXMgTUlCIG1vZHVsZSBpcyBhbiBleHRlbnNpb24gdG8gdGhlIElFRUU4MDIzLUxBRy1taWIuIFRoaXMgTUlCIGRlZmluZXMgdGhlIG1hbmFnZWQgb2JqZWN0cyBmb3IgdGhlIGNyZWF0aW9uIGFuZCBkZWxldGlvbiBvZiBBZ2dyZWdhdG9ycy4nKQp3d3BMZW9zRXh0TGFnTUlCT2JqZWN0cyA9IE1pYklkZW50aWZpZXIoKDEsIDMsIDYsIDEsIDQsIDEsIDYxNDEsIDIsIDYwLCAxNCwgMSkpCnd3cExlb3NFeHRMYWcgPSBNaWJJZGVudGlmaWVyKCgxLCAzLCA2LCAxLCA0LCAxLCA2MTQxLCAyLCA2MCwgMTQsIDEsIDEpKQp3d3BMZW9zRXh0TGFnTUlCTm90aWZpY2F0aW9uUHJlZml4ID0gTWliSWRlbnRpZmllcigoMSwgMywgNiwgMSwgNCwgMSwgNjE0MSwgMiwgNjAsIDE0LCAyKSkKd3dwTGVvc0V4dExhZ01JQk5vdGlmaWNhdGlvbnMgPSBNaWJJZGVudGlmaWVyKCgxLCAzLCA2LCAxLCA0LCAxLCA2MTQxLCAyLCA2MCwgMTQsIDIsIDApKQp3d3BMZW9zRXh0TGFnTUlCQ29uZm9ybWFuY2UgPSBNaWJJZGVudGlmaWVyKCgxLCAzLCA2LCAxLCA0LCAxLCA2MTQxLCAyLCA2MCwgMTQsIDMpKQp3d3BMZW9zRXh0TGFnTUlCQ29tcGxpYW5jZXMgPSBNaWJJZGVudGlmaWVyKCgxLCAzLCA2LCAxLCA0LCAxLCA2MTQxLCAyLCA2MCwgMTQsIDMsIDEpKQp3d3BMZW9zRXh0TGFnTUlCR3JvdXBzID0gTWliSWRlbnRpZmllcigoMSwgMywgNiwgMSwgNCwgMSwgNjE0MSwgMiwgNjAsIDE0LCAzLCAyKSkKd3dwTGVvc01heExhZ3MgPSBNaWJTY2FsYXIoKDEsIDMsIDYsIDEsIDQsIDEsIDYxNDEsIDIsIDYwLCAxNCwgMSwgMSwgMSksIFVuc2lnbmVkMzIoKSkuc2V0TWF4QWNjZXNzKCJyZWFkb25seSIpCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiB3d3BMZW9zTWF4TGFncy5zZXRTdGF0dXMoJ2N1cnJlbnQnKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogd3dwTGVvc01heExhZ3Muc2V0RGVzY3JpcHRpb24oJ1RoZSBtYXhpbXVtIG51bWJlciBvZiBhZ2dyZWdhdG9ycyB0aGF0IHRoaXMgZGV2aWNlIHN1cHBvcnRzLicpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4Kd3dwTGVvc051bUxhZ3MgPSBNaWJTY2FsYXIoKDEsIDMsIDYsIDEsIDQsIDEsIDYxNDEsIDIsIDYwLCAxNCwgMSwgMSwgMiksIFVuc2lnbmVkMzIoKSkuc2V0TWF4QWNjZXNzKCJyZWFkb25seSIpCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiB3d3BMZW9zTnVtTGFncy5zZXRTdGF0dXMoJ2N1cnJlbnQnKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogd3dwTGVvc051bUxhZ3Muc2V0RGVzY3JpcHRpb24oJ1RoZSBjdXJyZW50IG51bWJlciBvZiBMQUdzIHRoYXQgYXJlIGNvbmZpZ3VyZWQgaW4gdGhpcyBkZXZpY2UuJykKd3dwTGVvc0V4dExhZ1RhYmxlID0gTWliVGFibGUoKDEsIDMsIDYsIDEsIDQsIDEsIDYxNDEsIDIsIDYwLCAxNCwgMSwgMSwgMyksICkKPHxmaW1fZW5kfD4="]
["416f96dba7a9c1abffdc44c7890115fc89fd58ee-1","416f96dba7a9c1abffdc44c7890115fc89fd58ee","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKCmZyb20gbWF0cGxvdGxpYiBpbXBvcnQgcGF0Y2hlcwoKZnJvbSBsaWIuSW50ZXJwb2xhdGlvbiBpbXBvcnQgSW50ZXJwb2xhdGlvbgpmcm9tIGxpYi5kYXRhLmludGVydmFsIGltcG9ydCBJbnRlcnZhbApmcm9tIGxpYi5kYXRhLm9wdGlvbnMgaW1wb3J0IE9wdGlvbnMKZnJvbSBsaWIuZGF0YS5wcm9wZXJ0eSBpbXBvcnQgUHJvcGVydHkKZnJvbSBsaWIubW92aWUgaW1wb3J0IE1vdmllCmZyb20gbGliLnNjZW5lIGltcG9ydCBTY2VuZQpmcm9tIGxpYi5zaGFwZXMuYW5pbWF0ZWRfZ3JpZCBpbXBvcnQgQW5pbWF0ZWRHcmlkCmZyb20gbGliLmFuaW1hdGlvbl9pbml0aWFsaXplcnMudmFsdWVfYW5pbWF0aW9uIGltcG9ydCBWYWx1ZUFuaW1hdGlvbgoKIyBDcmVhdGUgYSBuZXcgbW92aWUgd2l0aCBvbmUgc2NlbmUKbW92aWUgPSBNb3ZpZSgpCnNjZW5lID0gU2NlbmUoKQptb3ZpZS5zY2VuZXMuYXBwZW5kKHNjZW5lKQoKIyBDcmVhdGUgYSBncmlkIHdpdGggY2VudGVyICgwLCAwKSwgd2l0aCAzMCBwb2ludHMgaW4gZWFjaCBkaXJlY3Rpb24gdGhhdCBhcmUgLjA1IGFwYXJ0CmdyaWQgPSBBbmltYXRlZEdyaWQoKDAsIDApLCAzMCwgLjA1KQoKIyBBZGQgdGhlIHZpc2libGUgcGFydHMgb2YgdGhlIGdyaWQgdG8gdGhlIHNjZW5lCnNjZW5lLmFkZF9hcnRpc3RzKGdyaWQuYXJ0aXN0cykKCiMgQWRkIGEgY2lyY2xlICh0aGUgInVuaXQgY2lyY2xlIikgdG8gdGhlIHNjZW5lCnNjZW5lLmFkZF9hcnRpc3RzKFtwYXRjaGVzLkNpcmNsZSgoMCwgMCksIC41LCBmYWNlY29sb3I9J05vbmUnKV0pCgppbnRlcnBvbGF0aW9uID0gSW50ZXJwb2xhdGlvbi5xdWludGljCgojIEFkZCBhbiBhbmltYXRpb24gb2YgdGhlIHRoZXRhIHBhcmFtZXRlcnMgb2YgdGhlIHBvaW50cyBpbiB0aGUgZ3JpZCB0byB0aGUgc2NlbmUgKHJvdGF0ZSBldmVyeSBwb2ludCBwaSByYWRpYW5zIHdpdGgKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojICByZXNwZWN0IHRvIHRoZSBvcmlnaW4pCnNjZW5lLmluaXRpYWxpemVycy5hcHBlbmQoZ3JpZC5hbmltYXRlKFZhbHVlQW5pbWF0aW9uKEludGVydmFsKDAsIDIpLCBtYXRoLnBpLCBQcm9wZXJ0eShOb25lLCAidGhldGEiKSwgaW50ZXJwb2xhdGlvbikpKQoKIyBBZGQgYW4gYW5pbWF0aW9uIG9mIHRoZSByIHBhcmFtZXRlcnMgb2YgdGhlIHBvaW50cyBpbiB0aGUgZ3JpZCB0byB0aGUgc2NlbmUgKG1vdmUgZXZlcnkgcG9pbnQgdG8gdGhlIHNxdWFyZSByb290IG9mCjx8ZmltX2VuZHw+"]
["416f96dba7a9c1abffdc44c7890115fc89fd58ee-2","416f96dba7a9c1abffdc44c7890115fc89fd58ee","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKCmZyb20gbWF0cGxvdGxpYiBpbXBvcnQgcGF0Y2hlcwoKZnJvbSBsaWIuSW50ZXJwb2xhdGlvbiBpbXBvcnQgSW50ZXJwb2xhdGlvbgpmcm9tIGxpYi5kYXRhLmludGVydmFsIGltcG9ydCBJbnRlcnZhbApmcm9tIGxpYi5kYXRhLm9wdGlvbnMgaW1wb3J0IE9wdGlvbnMKZnJvbSBsaWIuZGF0YS5wcm9wZXJ0eSBpbXBvcnQgUHJvcGVydHkKZnJvbSBsaWIubW92aWUgaW1wb3J0IE1vdmllCmZyb20gbGliLnNjZW5lIGltcG9ydCBTY2VuZQpmcm9tIGxpYi5zaGFwZXMuYW5pbWF0ZWRfZ3JpZCBpbXBvcnQgQW5pbWF0ZWRHcmlkCmZyb20gbGliLmFuaW1hdGlvbl9pbml0aWFsaXplcnMudmFsdWVfYW5pbWF0aW9uIGltcG9ydCBWYWx1ZUFuaW1hdGlvbgoKIyBDcmVhdGUgYSBuZXcgbW92aWUgd2l0aCBvbmUgc2NlbmUKbW92aWUgPSBNb3ZpZSgpCnNjZW5lID0gU2NlbmUoKQptb3ZpZS5zY2VuZXMuYXBwZW5kKHNjZW5lKQoKIyBDcmVhdGUgYSBncmlkIHdpdGggY2VudGVyICgwLCAwKSwgd2l0aCAzMCBwb2ludHMgaW4gZWFjaCBkaXJlY3Rpb24gdGhhdCBhcmUgLjA1IGFwYXJ0CmdyaWQgPSBBbmltYXRlZEdyaWQoKDAsIDApLCAzMCwgLjA1KQoKIyBBZGQgdGhlIHZpc2libGUgcGFydHMgb2YgdGhlIGdyaWQgdG8gdGhlIHNjZW5lCnNjZW5lLmFkZF9hcnRpc3RzKGdyaWQuYXJ0aXN0cykKCiMgQWRkIGEgY2lyY2xlICh0aGUgInVuaXQgY2lyY2xlIikgdG8gdGhlIHNjZW5lCnNjZW5lLmFkZF9hcnRpc3RzKFtwYXRjaGVzLkNpcmNsZSgoMCwgMCksIC41LCBmYWNlY29sb3I9J05vbmUnKV0pCgppbnRlcnBvbGF0aW9uID0gSW50ZXJwb2xhdGlvbi5xdWludGljCgojIEFkZCBhbiBhbmltYXRpb24gb2YgdGhlIHRoZXRhIHBhcmFtZXRlcnMgb2YgdGhlIHBvaW50cyBpbiB0aGUgZ3JpZCB0byB0aGUgc2NlbmUgKHJvdGF0ZSBldmVyeSBwb2ludCBwaSByYWRpYW5zIHdpdGgKIyAgcmVzcGVjdCB0byB0aGUgb3JpZ2luKQpzY2VuZS5pbml0aWFsaXplcnMuYXBwZW5kKGdyaWQuYW5pbWF0ZShWYWx1ZUFuaW1hdGlvbihJbnRlcnZhbCgwLCAyKSwgbWF0aC5waSwgUHJvcGVydHkoTm9uZSwgInRoZXRhIiksIGludGVycG9sYXRpb24pKSkKCjx8ZmltX2hvbGV8PgoKIyBFeHBvcnQgdGhlIG1vdmllIHdpdGggYSBxdWFsaXR5IG9mIDcyMHAKbW92aWUuYmFrZShPcHRpb25zLnByZXNldHNbIjcyMHAiXSkKPHxmaW1fc3VmZml4fD4KIyBBZGQgYW4gYW5pbWF0aW9uIG9mIHRoZSByIHBhcmFtZXRlcnMgb2YgdGhlIHBvaW50cyBpbiB0aGUgZ3JpZCB0byB0aGUgc2NlbmUgKG1vdmUgZXZlcnkgcG9pbnQgdG8gdGhlIHNxdWFyZSByb290IG9mCiMgIGl0cyBkaXN0YW5jZSB0byB0aGUgb3JpZ2luKQpzY2VuZS5pbml0aWFsaXplcnMuYXBwZW5kKGdyaWQuYW5pbWF0ZShWYWx1ZUFuaW1hdGlvbihJbnRlcnZhbCgyLCA0KSwgbGFtYmRhIHA6IG1hdGguc3FydChwLnIgLyAyKSAtIHAuciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHkoTm9uZSwgInIiKSwgaW50ZXJwb2xhdGlvbikpKQo8fGZpbV9lbmR8Pg=="]
["416f96dba7a9c1abffdc44c7890115fc89fd58ee-3","416f96dba7a9c1abffdc44c7890115fc89fd58ee","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKCmZyb20gbWF0cGxvdGxpYiBpbXBvcnQgcGF0Y2hlcwoKZnJvbSBsaWIuSW50ZXJwb2xhdGlvbiBpbXBvcnQgSW50ZXJwb2xhdGlvbgpmcm9tIGxpYi5kYXRhLmludGVydmFsIGltcG9ydCBJbnRlcnZhbApmcm9tIGxpYi5kYXRhLm9wdGlvbnMgaW1wb3J0IE9wdGlvbnMKZnJvbSBsaWIuZGF0YS5wcm9wZXJ0eSBpbXBvcnQgUHJvcGVydHkKZnJvbSBsaWIubW92aWUgaW1wb3J0IE1vdmllCmZyb20gbGliLnNjZW5lIGltcG9ydCBTY2VuZQpmcm9tIGxpYi5zaGFwZXMuYW5pbWF0ZWRfZ3JpZCBpbXBvcnQgQW5pbWF0ZWRHcmlkCmZyb20gbGliLmFuaW1hdGlvbl9pbml0aWFsaXplcnMudmFsdWVfYW5pbWF0aW9uIGltcG9ydCBWYWx1ZUFuaW1hdGlvbgoKIyBDcmVhdGUgYSBuZXcgbW92aWUgd2l0aCBvbmUgc2NlbmUKbW92aWUgPSBNb3ZpZSgpCnNjZW5lID0gU2NlbmUoKQptb3ZpZS5zY2VuZXMuYXBwZW5kKHNjZW5lKQoKIyBDcmVhdGUgYSBncmlkIHdpdGggY2VudGVyICgwLCAwKSwgd2l0aCAzMCBwb2ludHMgaW4gZWFjaCBkaXJlY3Rpb24gdGhhdCBhcmUgLjA1IGFwYXJ0CmdyaWQgPSBBbmltYXRlZEdyaWQoKDAsIDApLCAzMCwgLjA1KQoKIyBBZGQgdGhlIHZpc2libGUgcGFydHMgb2YgdGhlIGdyaWQgdG8gdGhlIHNjZW5lCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4Kc2NlbmUuYWRkX2FydGlzdHMoZ3JpZC5hcnRpc3RzKQoKIyBBZGQgYSBjaXJjbGUgKHRoZSAidW5pdCBjaXJjbGUiKSB0byB0aGUgc2NlbmUKc2NlbmUuYWRkX2FydGlzdHMoW3BhdGNoZXMuQ2lyY2xlKCgwLCAwKSwgLjUsIGZhY2Vjb2xvcj0nTm9uZScpXSkKPHxmaW1fZW5kfD4="]
["416f96dba7a9c1abffdc44c7890115fc89fd58ee-4","416f96dba7a9c1abffdc44c7890115fc89fd58ee","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKCmZyb20gbWF0cGxvdGxpYiBpbXBvcnQgcGF0Y2hlcwoKZnJvbSBsaWIuSW50ZXJwb2xhdGlvbiBpbXBvcnQgSW50ZXJwb2xhdGlvbgpmcm9tIGxpYi5kYXRhLmludGVydmFsIGltcG9ydCBJbnRlcnZhbApmcm9tIGxpYi5kYXRhLm9wdGlvbnMgaW1wb3J0IE9wdGlvbnMKZnJvbSBsaWIuZGF0YS5wcm9wZXJ0eSBpbXBvcnQgUHJvcGVydHkKZnJvbSBsaWIubW92aWUgaW1wb3J0IE1vdmllCmZyb20gbGliLnNjZW5lIGltcG9ydCBTY2VuZQpmcm9tIGxpYi5zaGFwZXMuYW5pbWF0ZWRfZ3JpZCBpbXBvcnQgQW5pbWF0ZWRHcmlkCmZyb20gbGliLmFuaW1hdGlvbl9pbml0aWFsaXplcnMudmFsdWVfYW5pbWF0aW9uIGltcG9ydCBWYWx1ZUFuaW1hdGlvbgoKIyBDcmVhdGUgYSBuZXcgbW92aWUgd2l0aCBvbmUgc2NlbmUKbW92aWUgPSBNb3ZpZSgpCnNjZW5lID0gU2NlbmUoKQptb3ZpZS5zY2VuZXMuYXBwZW5kKHNjZW5lKQoKIyBDcmVhdGUgYSBncmlkIHdpdGggY2VudGVyICgwLCAwKSwgd2l0aCAzMCBwb2ludHMgaW4gZWFjaCBkaXJlY3Rpb24gdGhhdCBhcmUgLjA1IGFwYXJ0CmdyaWQgPSBBbmltYXRlZEdyaWQoKDAsIDApLCAzMCwgLjA1KQoKIyBBZGQgdGhlIHZpc2libGUgcGFydHMgb2YgdGhlIGdyaWQgdG8gdGhlIHNjZW5lCnNjZW5lLmFkZF9hcnRpc3RzKGdyaWQuYXJ0aXN0cykKCiMgQWRkIGEgY2lyY2xlICh0aGUgInVuaXQgY2lyY2xlIikgdG8gdGhlIHNjZW5lCnNjZW5lLmFkZF9hcnRpc3RzKFtwYXRjaGVzLkNpcmNsZSgoMCwgMCksIC41LCBmYWNlY29sb3I9J05vbmUnKV0pCgppbnRlcnBvbGF0aW9uID0gSW50ZXJwb2xhdGlvbi5xdWludGljCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgQWRkIGFuIGFuaW1hdGlvbiBvZiB0aGUgdGhldGEgcGFyYW1ldGVycyBvZiB0aGUgcG9pbnRzIGluIHRoZSBncmlkIHRvIHRoZSBzY2VuZSAocm90YXRlIGV2ZXJ5IHBvaW50IHBpIHJhZGlhbnMgd2l0aAojICByZXNwZWN0IHRvIHRoZSBvcmlnaW4pCnNjZW5lLmluaXRpYWxpemVycy5hcHBlbmQoZ3JpZC5hbmltYXRlKFZhbHVlQW5pbWF0aW9uKEludGVydmFsKDAsIDIpLCBtYXRoLnBpLCBQcm9wZXJ0eShOb25lLCAidGhldGEiKSwgaW50ZXJwb2xhdGlvbikpKQoKPHxmaW1fZW5kfD4="]
["416f96dba7a9c1abffdc44c7890115fc89fd58ee-5","416f96dba7a9c1abffdc44c7890115fc89fd58ee","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKCmZyb20gbWF0cGxvdGxpYiBpbXBvcnQgcGF0Y2hlcwoKZnJvbSBsaWIuSW50ZXJwb2xhdGlvbiBpbXBvcnQgSW50ZXJwb2xhdGlvbgpmcm9tIGxpYi5kYXRhLmludGVydmFsIGltcG9ydCBJbnRlcnZhbApmcm9tIGxpYi5kYXRhLm9wdGlvbnMgaW1wb3J0IE9wdGlvbnMKZnJvbSBsaWIuZGF0YS5wcm9wZXJ0eSBpbXBvcnQgUHJvcGVydHkKZnJvbSBsaWIubW92aWUgaW1wb3J0IE1vdmllCmZyb20gbGliLnNjZW5lIGltcG9ydCBTY2VuZQpmcm9tIGxpYi5zaGFwZXMuYW5pbWF0ZWRfZ3JpZCBpbXBvcnQgQW5pbWF0ZWRHcmlkCmZyb20gbGliLmFuaW1hdGlvbl9pbml0aWFsaXplcnMudmFsdWVfYW5pbWF0aW9uIGltcG9ydCBWYWx1ZUFuaW1hdGlvbgoKIyBDcmVhdGUgYSBuZXcgbW92aWUgd2l0aCBvbmUgc2NlbmUKbW92aWUgPSBNb3ZpZSgpCnNjZW5lID0gU2NlbmUoKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cm1vdmllLnNjZW5lcy5hcHBlbmQoc2NlbmUpCgojIENyZWF0ZSBhIGdyaWQgd2l0aCBjZW50ZXIgKDAsIDApLCB3aXRoIDMwIHBvaW50cyBpbiBlYWNoIGRpcmVjdGlvbiB0aGF0IGFyZSAuMDUgYXBhcnQKZ3JpZCA9IEFuaW1hdGVkR3JpZCgoMCwgMCksIDMwLCAuMDUpCjx8ZmltX2VuZHw+"]
["17738443a9c115abeb08be751fe6f754513fdb7a-1","17738443a9c115abeb08be751fe6f754513fdb7a","PHxmaW1fcHJlZml4fD4KZnJvbSB3b3JkY2xvdWQgaW1wb3J0IFdvcmRDbG91ZAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkIAoKZGF0YV9maWxlbmFtZSA9ICIuLi9kYXRhL3Byb2Nlc3NlZC9jc3YvcHJvYy10d2l0dGVyLXRyYWluaW5nLWRhdGEuY3N2IgoKZGF0YSA9IHBkLnJlYWRfY3N2KGRhdGFfZmlsZW5hbWUpCgoKbmVnX3R3ZWV0cyA9IGRhdGFbZGF0YS5TZW50aW1lbnQgPT0gMF0KbmV1X3R3ZWV0cyA9IGRhdGFbZGF0YS5TZW50aW1lbnQgPT0gMV0KcG9zX3R3ZWV0cyA9IGRhdGFbZGF0YS5TZW50aW1lbnQgPT0gMl0KCm5lZ190ZXh0ID0gbGlzdCgpCm5ldV90ZXh0ID0gbGlzdCgpCnBvc190ZXh0ID0gbGlzdCgpCgpmb3IgdHdlZXQgaW4gbmVnX3R3ZWV0cy5Ud2VldDoKCW5lZ190ZXh0LmFwcGVuZCh0d2VldCkKbmVnX3RleHQgPSBwZC5TZXJpZXMobmVnX3RleHQpLnN0ci5jYXQoc2VwPScgJykKCmZvciB0d2VldCBpbiBuZXVfdHdlZXRzLlR3ZWV0OgoJbmV1X3RleHQuYXBwZW5kKHR3ZWV0KQpuZXVfdGV4dCA9IHBkLlNlcmllcyhuZXVfdGV4dCkuc3RyLmNhdChzZXA9JyAnKQoKZm9yIHR3ZWV0IGluIHBvc190d2VldHMuVHdlZXQ6Cglwb3NfdGV4dC5hcHBlbmQodHdlZXQpCnBvc190ZXh0ID0gcGQuU2VyaWVzKHBvc190ZXh0KS5zdHIuY2F0KHNlcD0nICcpCgpuZWdhdGl2ZV93b3JkY2xvdWQgPSBXb3JkQ2xvdWQod2lkdGg9MTYwMCwgaGVpZ2h0PTE2MDAsIG1heF9mb250X3NpemU9MjAwKS5nZW5lcmF0ZShuZWdfdGV4dCkKbmV1dHJhbF93b3JkY2xvdWQgPSBXb3JkQ2xvdWQod2lkdGg9MTYwMCwgaGVpZ2h0PTE2MDAsIG1heF9mb250X3NpemU9MjAwKS5nZW5lcmF0ZShuZXVfdGV4dCkKcG9zaXRpdmVfd29yZGNsb3VkID0gV29yZENsb3VkKHdpZHRoPTE2MDAsIGhlaWdodD0xNjAwLCBtYXhfZm9udF9zaXplPTIwMCkuZ2VuZXJhdGUocG9zX3RleHQpCgpwbHQuZmlndXJlKCkKPHxmaW1faG9sZXw+CnBsdC5maWd1cmUoKQpwbHQuaW1zaG93KG5ldXRyYWxfd29yZGNsb3VkLCBpbnRlcnBvbGF0aW9uPSdiaWxpbmVhcicpCnBsdC5heGlzKCJvZmYiKQpwbHQuc2hvdygpCgpwbHQuZmlndXJlKCkKcGx0Lmltc2hvdyhwb3NpdGl2ZV93b3JkY2xvdWQsIGludGVycG9sYXRpb249J2JpbGluZWFyJykKcGx0LmF4aXMoIm9mZiIpCnBsdC5zaG93KCkKPHxmaW1fc3VmZml4fD4KcGx0Lmltc2hvdyhuZWdhdGl2ZV93b3JkY2xvdWQsIGludGVycG9sYXRpb249J2JpbGluZWFyJykKcGx0LmF4aXMoIm9mZiIpCnBsdC5zaG93KCkKCjx8ZmltX2VuZHw+"]
["17738443a9c115abeb08be751fe6f754513fdb7a-2","17738443a9c115abeb08be751fe6f754513fdb7a","PHxmaW1fcHJlZml4fD4KZnJvbSB3b3JkY2xvdWQgaW1wb3J0IFdvcmRDbG91ZAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkIAoKZGF0YV9maWxlbmFtZSA9ICIuLi9kYXRhL3Byb2Nlc3NlZC9jc3YvcHJvYy10d2l0dGVyLXRyYWluaW5nLWRhdGEuY3N2IgoKZGF0YSA9IHBkLnJlYWRfY3N2KGRhdGFfZmlsZW5hbWUpCgoKbmVnX3R3ZWV0cyA9IGRhdGFbZGF0YS5TZW50aW1lbnQgPT0gMF0KbmV1X3R3ZWV0cyA9IGRhdGFbZGF0YS5TZW50aW1lbnQgPT0gMV0KcG9zX3R3ZWV0cyA9IGRhdGFbZGF0YS5TZW50aW1lbnQgPT0gMl0KCm5lZ190ZXh0ID0gbGlzdCgpCm5ldV90ZXh0ID0gbGlzdCgpCnBvc190ZXh0ID0gbGlzdCgpCgpmb3IgdHdlZXQgaW4gbmVnX3R3ZWV0cy5Ud2VldDoKCW5lZ190ZXh0LmFwcGVuZCh0d2VldCkKbmVnX3RleHQgPSBwZC5TZXJpZXMobmVnX3RleHQpLnN0ci5jYXQoc2VwPScgJykKCmZvciB0d2VldCBpbiBuZXVfdHdlZXRzLlR3ZWV0OgoJbmV1X3RleHQuYXBwZW5kKHR3ZWV0KQpuZXVfdGV4dCA9IHBkLlNlcmllcyhuZXVfdGV4dCkuc3RyLmNhdChzZXA9JyAnKQoKZm9yIHR3ZWV0IGluIHBvc190d2VldHMuVHdlZXQ6Cglwb3NfdGV4dC5hcHBlbmQodHdlZXQpCnBvc190ZXh0ID0gcGQuU2VyaWVzKHBvc190ZXh0KS5zdHIuY2F0KHNlcD0nICcpCgpuZWdhdGl2ZV93b3JkY2xvdWQgPSBXb3JkQ2xvdWQod2lkdGg9MTYwMCwgaGVpZ2h0PTE2MDAsIG1heF9mb250X3NpemU9MjAwKS5nZW5lcmF0ZShuZWdfdGV4dCkKbmV1dHJhbF93b3JkY2xvdWQgPSBXb3JkQ2xvdWQod2lkdGg9MTYwMCwgaGVpZ2h0PTE2MDAsIG1heF9mb250X3NpemU9MjAwKS5nZW5lcmF0ZShuZXVfdGV4dCkKcG9zaXRpdmVfd29yZGNsb3VkID0gV29yZENsb3VkKHdpZHRoPTE2MDAsIGhlaWdodD0xNjAwLCBtYXhfZm9udF9zaXplPTIwMCkuZ2VuZXJhdGUocG9zX3RleHQpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCnBsdC5maWd1cmUoKQpwbHQuaW1zaG93KG5lZ2F0aXZlX3dvcmRjbG91ZCwgaW50ZXJwb2xhdGlvbj0nYmlsaW5lYXInKQpwbHQuYXhpcygib2ZmIikKPHxmaW1fZW5kfD4="]
["17738443a9c115abeb08be751fe6f754513fdb7a-3","17738443a9c115abeb08be751fe6f754513fdb7a","PHxmaW1fcHJlZml4fD4KZnJvbSB3b3JkY2xvdWQgaW1wb3J0IFdvcmRDbG91ZAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkIAoKZGF0YV9maWxlbmFtZSA9ICIuLi9kYXRhL3Byb2Nlc3NlZC9jc3YvcHJvYy10d2l0dGVyLXRyYWluaW5nLWRhdGEuY3N2IgoKZGF0YSA9IHBkLnJlYWRfY3N2KGRhdGFfZmlsZW5hbWUpCgoKbmVnX3R3ZWV0cyA9IGRhdGFbZGF0YS5TZW50aW1lbnQgPT0gMF0KbmV1X3R3ZWV0cyA9IGRhdGFbZGF0YS5TZW50aW1lbnQgPT0gMV0KcG9zX3R3ZWV0cyA9IGRhdGFbZGF0YS5TZW50aW1lbnQgPT0gMl0KCm5lZ190ZXh0ID0gbGlzdCgpCm5ldV90ZXh0ID0gbGlzdCgpCnBvc190ZXh0ID0gbGlzdCgpCgpmb3IgdHdlZXQgaW4gbmVnX3R3ZWV0cy5Ud2VldDoKCW5lZ190ZXh0LmFwcGVuZCh0d2VldCkKbmVnX3RleHQgPSBwZC5TZXJpZXMobmVnX3RleHQpLnN0ci5jYXQoc2VwPScgJykKCmZvciB0d2VldCBpbiBuZXVfdHdlZXRzLlR3ZWV0Ogo8fGZpbV9ob2xlfD4KbmV1X3RleHQgPSBwZC5TZXJpZXMobmV1X3RleHQpLnN0ci5jYXQoc2VwPScgJykKCmZvciB0d2VldCBpbiBwb3NfdHdlZXRzLlR3ZWV0OgoJcG9zX3RleHQuYXBwZW5kKHR3ZWV0KQpwb3NfdGV4dCA9IHBkLlNlcmllcyhwb3NfdGV4dCkuc3RyLmNhdChzZXA9JyAnKQoKbmVnYXRpdmVfd29yZGNsb3VkID0gV29yZENsb3VkKHdpZHRoPTE2MDAsIGhlaWdodD0xNjAwLCBtYXhfZm9udF9zaXplPTIwMCkuZ2VuZXJhdGUobmVnX3RleHQpCm5ldXRyYWxfd29yZGNsb3VkID0gV29yZENsb3VkKHdpZHRoPTE2MDAsIGhlaWdodD0xNjAwLCBtYXhfZm9udF9zaXplPTIwMCkuZ2VuZXJhdGUobmV1X3RleHQpCnBvc2l0aXZlX3dvcmRjbG91ZCA9IFdvcmRDbG91ZCh3aWR0aD0xNjAwLCBoZWlnaHQ9MTYwMCwgbWF4X2ZvbnRfc2l6ZT0yMDApLmdlbmVyYXRlKHBvc190ZXh0KQoKcGx0LmZpZ3VyZSgpCnBsdC5pbXNob3cobmVnYXRpdmVfd29yZGNsb3VkLCBpbnRlcnBvbGF0aW9uPSdiaWxpbmVhcicpCnBsdC5heGlzKCJvZmYiKQpwbHQuc2hvdygpCgpwbHQuZmlndXJlKCkKcGx0Lmltc2hvdyhuZXV0cmFsX3dvcmRjbG91ZCwgaW50ZXJwb2xhdGlvbj0nYmlsaW5lYXInKQpwbHQuYXhpcygib2ZmIikKcGx0LnNob3coKQoKcGx0LmZpZ3VyZSgpCnBsdC5pbXNob3cocG9zaXRpdmVfd29yZGNsb3VkLCBpbnRlcnBvbGF0aW9uPSdiaWxpbmVhcicpCnBsdC5heGlzKCJvZmYiKQpwbHQuc2hvdygpCjx8ZmltX3N1ZmZpeHw+CgluZXVfdGV4dC5hcHBlbmQodHdlZXQpCjx8ZmltX2VuZHw+"]
["17738443a9c115abeb08be751fe6f754513fdb7a-4","17738443a9c115abeb08be751fe6f754513fdb7a","PHxmaW1fcHJlZml4fD4KZnJvbSB3b3JkY2xvdWQgaW1wb3J0IFdvcmRDbG91ZAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkIAoKZGF0YV9maWxlbmFtZSA9ICIuLi9kYXRhL3Byb2Nlc3NlZC9jc3YvcHJvYy10d2l0dGVyLXRyYWluaW5nLWRhdGEuY3N2IgoKZGF0YSA9IHBkLnJlYWRfY3N2KGRhdGFfZmlsZW5hbWUpCgoKbmVnX3R3ZWV0cyA9IGRhdGFbZGF0YS5TZW50aW1lbnQgPT0gMF0KbmV1X3R3ZWV0cyA9IGRhdGFbZGF0YS5TZW50aW1lbnQgPT0gMV0KcG9zX3R3ZWV0cyA9IGRhdGFbZGF0YS5TZW50aW1lbnQgPT0gMl0KCm5lZ190ZXh0ID0gbGlzdCgpCm5ldV90ZXh0ID0gbGlzdCgpCnBvc190ZXh0ID0gbGlzdCgpCgpmb3IgdHdlZXQgaW4gbmVnX3R3ZWV0cy5Ud2VldDoKCW5lZ190ZXh0LmFwcGVuZCh0d2VldCkKbmVnX3RleHQgPSBwZC5TZXJpZXMobmVnX3RleHQpLnN0ci5jYXQoc2VwPScgJykKCmZvciB0d2VldCBpbiBuZXVfdHdlZXRzLlR3ZWV0OgoJbmV1X3RleHQuYXBwZW5kKHR3ZWV0KQpuZXVfdGV4dCA9IHBkLlNlcmllcyhuZXVfdGV4dCkuc3RyLmNhdChzZXA9JyAnKQoKZm9yIHR3ZWV0IGluIHBvc190d2VldHMuVHdlZXQ6Cglwb3NfdGV4dC5hcHBlbmQodHdlZXQpCnBvc190ZXh0ID0gcGQuU2VyaWVzKHBvc190ZXh0KS5zdHIuY2F0KHNlcD0nICcpCgpuZWdhdGl2ZV93b3JkY2xvdWQgPSBXb3JkQ2xvdWQod2lkdGg9MTYwMCwgaGVpZ2h0PTE2MDAsIG1heF9mb250X3NpemU9MjAwKS5nZW5lcmF0ZShuZWdfdGV4dCkKbmV1dHJhbF93b3JkY2xvdWQgPSBXb3JkQ2xvdWQod2lkdGg9MTYwMCwgaGVpZ2h0PTE2MDAsIG1heF9mb250X3NpemU9MjAwKS5nZW5lcmF0ZShuZXVfdGV4dCkKcG9zaXRpdmVfd29yZGNsb3VkID0gV29yZENsb3VkKHdpZHRoPTE2MDAsIGhlaWdodD0xNjAwLCBtYXhfZm9udF9zaXplPTIwMCkuZ2VuZXJhdGUocG9zX3RleHQpCgpwbHQuZmlndXJlKCkKcGx0Lmltc2hvdyhuZWdhdGl2ZV93b3JkY2xvdWQsIGludGVycG9sYXRpb249J2JpbGluZWFyJykKPHxmaW1faG9sZXw+CnBsdC5pbXNob3cobmV1dHJhbF93b3JkY2xvdWQsIGludGVycG9sYXRpb249J2JpbGluZWFyJykKcGx0LmF4aXMoIm9mZiIpCnBsdC5zaG93KCkKCnBsdC5maWd1cmUoKQpwbHQuaW1zaG93KHBvc2l0aXZlX3dvcmRjbG91ZCwgaW50ZXJwb2xhdGlvbj0nYmlsaW5lYXInKQpwbHQuYXhpcygib2ZmIikKcGx0LnNob3coKQo8fGZpbV9zdWZmaXh8PgpwbHQuYXhpcygib2ZmIikKcGx0LnNob3coKQoKcGx0LmZpZ3VyZSgpCjx8ZmltX2VuZHw+"]
["dad269733eaf79667c03073b0f911f918cbd79fd-1","dad269733eaf79667c03073b0f911f918cbd79fd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGF1ZGlvb3AKCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgc25kZmlsZQoKZnJvbSAuZHRtZiBpbXBvcnQgRFRNRl9NQVAKZnJvbSAucGFja2V0IGltcG9ydCBSVFAsIFJUUEV2ZW50CgoKY2xhc3MgQXVkaW9GaWxlOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB0aW1lZnJhbWUsICosIGxvb3A9Tm9uZSwgZnV0dXJlPU5vbmUpOgogICAgICAgIGF1ZGlvID0gc25kZmlsZS5vcGVuKGZpbGVuYW1lKQogICAgICAgIGZyYW1lcyA9IGF1ZGlvLnJlYWRfZnJhbWVzKCdoJykKICAgICAgICBzZWxmLm1lZGlhID0gYXVkaW9vcC5saW4ydWxhdyhmcmFtZXMudG9ieXRlcygpLCBmcmFtZXMuaXRlbXNpemUpCgogICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCiAgICAgICAgc2VsZi5fZnV0dXJlID0gZnV0dXJlCgogICAgICAgIHNlbGYuZm9ybWF0ID0gMAogICAgICAgIHNlbGYudGltZWZyYW1lID0gdGltZWZyYW1lCgogICAgICAgIHNlbGYuc3RvcHBlZCA9IEZhbHNlCiAgICAgICAgc2VsZi50aW1lc3RhbXAgPSAyMAogICAgICAgIHNlbGYuc2VxID0gNDk3MDkKICAgICAgICBzZWxmLnNzcmMgPSAxNjc0MTE5NzYKICAgICAgICBzZWxmLm1hcmtlZCA9IEZhbHNlCgogICAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmCgogICAgZGVmIF9fbmV4dF9fKHNlbGYpOgogICAgICAgIGlmIG5vdCBzZWxmLm1lZGlhOgogICAgICAgICAgICBzZWxmLnN0b3BwZWQgPSBUcnVlCgogICAgICAgIGlmIHNlbGYuc3RvcHBlZDoKICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbigpCgogICAgICAgIHNlbGYubWVkaWEsIGNodW5rID0gc2VsZi5tZWRpYVtzZWxmLnRpbWVmcmFtZTpdLCBzZWxmLm1lZGlhWzpzZWxmLnRpbWVmcmFtZV0KICAgICAgICByZXN1bHQgPSBSVFAobWFya2VyPXNlbGYubWFya2VkLCBwX3R5cGU9c2VsZi5mb3JtYXQsIHNlcT1zZWxmLnNlcSwKICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wPXNlbGYudGltZXN0YW1wLCBzc3JjPXNlbGYuc3NyYywgcGF5bG9hZD1jaHVuaykKICAgICAgICBzZWxmLnRpbWVzdGFtcCArPSBzZWxmLnRpbWVmcmFtZQogICAgICAgIHNlbGYuc2VxICs9IDEKICAgICAgICByZXR1cm4gcmVzdWx0CgogICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgaWYgc2VsZi5fbG9vcCBhbmQgc2VsZi5fZnV0dXJlOgogICAgICAgICAgICBzZWxmLl9mdXR1cmUuY2FuY2VsKCkKICAgICAgICBzZWxmLnN0b3BwZWQgPSBUcnVlCgoKY2xhc3MgVG9uZToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcmVxdWVuY3ksIGR1cmF0aW9uLCB0aW1lZnJhbWUsICosCiAgICAgICAgICAgICAgICAgbG9vcD1Ob25lLCBmdXR1cmU9Tm9uZSwgc2FtcGxlX3JhdGU9ODAwMCwgYW1wbGl0dWRlPTEwMDAwKToKICAgICAgICBzYW1wbGVfdGltZXMgPSBucC5hcmFuZ2Uoc2FtcGxlX3JhdGUgKiBkdXJhdGlvbikgLyBzYW1wbGVfcmF0ZQogICAgICAgIHdhdmUgPSBhbXBsaXR1ZGUgKiBucC5zaW4oMiAqIG5wLnBpICogZnJlcXVlbmN5ICogc2FtcGxlX3RpbWVzKQogICAgICAgIHNhbXBsZXMgPSBucC5hcnJheSh3YXZlLCBkdHlwZT1ucC5pbnQxNikKICAgICAgICBzZWxmLm1lZGlhID0gYXVkaW9vcC5saW4ydWxhdyhzYW1wbGVzLnRvYnl0ZXMoKSwgMikKCiAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKICAgICAgICBzZWxmLl9mdXR1cmUgPSBmdXR1cmUKCiAgICAgICAgc2VsZi5mb3JtYXQgPSAwCiAgICAgICAgc2VsZi50aW1lZnJhbWUgPSB0aW1lZnJhbWUKICAgICAgICBzZWxmLnN0b3BwZWQgPSBGYWxzZQogICAgICAgIHNlbGYudGltZXN0YW1wID0gMAogICAgICAgIHNlbGYuc2VxID0gMzkyMjcKICAgICAgICBzZWxmLnNzcmMgPSAzNDkxOTI2CiAgICAgICAgc2VsZi5tYXJrZWQgPSBGYWxzZQoKICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZgoKICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICBpZiBub3Qgc2VsZi5tZWRpYToKICAgICAgICAgICAgc2VsZi5zdG9wcGVkID0gVHJ1ZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgIGlmIHNlbGYuc3RvcHBlZDoKICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbigpCgo8fGZpbV9lbmR8Pg=="]
["dad269733eaf79667c03073b0f911f918cbd79fd-2","dad269733eaf79667c03073b0f911f918cbd79fd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGF1ZGlvb3AKCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgc25kZmlsZQoKZnJvbSAuZHRtZiBpbXBvcnQgRFRNRl9NQVAKZnJvbSAucGFja2V0IGltcG9ydCBSVFAsIFJUUEV2ZW50CgoKY2xhc3MgQXVkaW9GaWxlOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB0aW1lZnJhbWUsICosIGxvb3A9Tm9uZSwgZnV0dXJlPU5vbmUpOgogICAgICAgIGF1ZGlvID0gc25kZmlsZS5vcGVuKGZpbGVuYW1lKQogICAgICAgIGZyYW1lcyA9IGF1ZGlvLnJlYWRfZnJhbWVzKCdoJykKICAgICAgICBzZWxmLm1lZGlhID0gYXVkaW9vcC5saW4ydWxhdyhmcmFtZXMudG9ieXRlcygpLCBmcmFtZXMuaXRlbXNpemUpCgogICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCiAgICAgICAgc2VsZi5fZnV0dXJlID0gZnV0dXJlCgogICAgICAgIHNlbGYuZm9ybWF0ID0gMAogICAgICAgIHNlbGYudGltZWZyYW1lID0gdGltZWZyYW1lCgogICAgICAgIHNlbGYuc3RvcHBlZCA9IEZhbHNlCiAgICAgICAgc2VsZi50aW1lc3RhbXAgPSAyMAogICAgICAgIHNlbGYuc2VxID0gNDk3MDkKICAgICAgICBzZWxmLnNzcmMgPSAxNjc0MTE5NzYKICAgICAgICBzZWxmLm1hcmtlZCA9IEZhbHNlCgogICAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmCgogICAgZGVmIF9fbmV4dF9fKHNlbGYpOgogICAgICAgIGlmIG5vdCBzZWxmLm1lZGlhOgogICAgICAgICAgICBzZWxmLnN0b3BwZWQgPSBUcnVlCgogICAgICAgIGlmIHNlbGYuc3RvcHBlZDoKICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbigpCgogICAgICAgIHNlbGYubWVkaWEsIGNodW5rID0gc2VsZi5tZWRpYVtzZWxmLnRpbWVmcmFtZTpdLCBzZWxmLm1lZGlhWzpzZWxmLnRpbWVmcmFtZV0KICAgICAgICByZXN1bHQgPSBSVFAobWFya2VyPXNlbGYubWFya2VkLCBwX3R5cGU9c2VsZi5mb3JtYXQsIHNlcT1zZWxmLnNlcSwKICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wPXNlbGYudGltZXN0YW1wLCBzc3JjPXNlbGYuc3NyYywgcGF5bG9hZD1jaHVuaykKICAgICAgICBzZWxmLnRpbWVzdGFtcCArPSBzZWxmLnRpbWVmcmFtZQogICAgICAgIHNlbGYuc2VxICs9IDEKICAgICAgICByZXR1cm4gcmVzdWx0CgogICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgaWYgc2VsZi5fbG9vcCBhbmQgc2VsZi5fZnV0dXJlOgogICAgICAgICAgICBzZWxmLl9mdXR1cmUuY2FuY2VsKCkKICAgICAgICBzZWxmLnN0b3BwZWQgPSBUcnVlCgoKY2xhc3MgVG9uZToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcmVxdWVuY3ksIGR1cmF0aW9uLCB0aW1lZnJhbWUsICosCiAgICAgICAgICAgICAgICAgbG9vcD1Ob25lLCBmdXR1cmU9Tm9uZSwgc2FtcGxlX3JhdGU9ODAwMCwgYW1wbGl0dWRlPTEwMDAwKToKICAgICAgICBzYW1wbGVfdGltZXMgPSBucC5hcmFuZ2Uoc2FtcGxlX3JhdGUgKiBkdXJhdGlvbikgLyBzYW1wbGVfcmF0ZQogICAgICAgIHdhdmUgPSBhbXBsaXR1ZGUgKiBucC5zaW4oMiAqIG5wLnBpICogZnJlcXVlbmN5ICogc2FtcGxlX3RpbWVzKQo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLl9mdXR1cmUgPSBmdXR1cmUKCiAgICAgICAgc2VsZi5mb3JtYXQgPSAwCiAgICAgICAgc2VsZi50aW1lZnJhbWUgPSB0aW1lZnJhbWUKICAgICAgICBzZWxmLnN0b3BwZWQgPSBGYWxzZQogICAgICAgIHNlbGYudGltZXN0YW1wID0gMAogICAgICAgIHNlbGYuc2VxID0gMzkyMjcKICAgICAgICBzZWxmLnNzcmMgPSAzNDkxOTI2CiAgICAgICAgc2VsZi5tYXJrZWQgPSBGYWxzZQoKICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZgoKICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICBpZiBub3Qgc2VsZi5tZWRpYToKICAgICAgICAgICAgc2VsZi5zdG9wcGVkID0gVHJ1ZQoKICAgICAgICBpZiBzZWxmLnN0b3BwZWQ6CiAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24oKQoKICAgICAgICBjaHVuayA9IHNlbGYubWVkaWFbOnNlbGYudGltZWZyYW1lXQogICAgICAgIHNlbGYubWVkaWEgPSBzZWxmLm1lZGlhW3NlbGYudGltZWZyYW1lOl0KCiAgICAgICAgcmVzdWx0ID0gUlRQKG1hcmtlcj1zZWxmLm1hcmtlZCwgcF90eXBlPXNlbGYuZm9ybWF0LCBzZXE9c2VsZi5zZXEsCiAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcD1zZWxmLnRpbWVzdGFtcCwgc3NyYz1zZWxmLnNzcmMsIHBheWxvYWQ9Y2h1bmspCiAgICAgICAgc2VsZi50aW1lc3RhbXAgKz0gc2VsZi50aW1lZnJhbWUKICAgICAgICByZXR1cm4gcmVzdWx0CgogICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgaWYgc2VsZi5fbG9vcCBhbmQgc2VsZi5fZnV0dXJlOgogICAgICAgICAgICBzZWxmLl9mdXR1cmUuY2FuY2VsKCkKICAgICAgICBzZWxmLnN0b3BwZWQgPSBUcnVlCgoKY2xhc3MgRFRNRjoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXF1ZW5jZSwgKiwgdG9uZV9sZW5ndGg9Tm9uZSwgbG9vcD1Ob25lLCBmdXR1cmU9Tm9uZSk6CiAgICAgICAgc2VsZi5zZXF1ZW5jZSA9IFtEVE1GX01BUFt4XSBmb3IgeCBpbiBzZXF1ZW5jZV0KICAgICAgICBzZWxmLnRvbmVfbGVuZ3RoID0gdG9uZV9sZW5ndGggb3IgMjAwCgogICAgICAgIHNlbGYuc2VxX2l0ZXIgPSBpdGVyKHNlbGYuc2VxdWVuY2UpCiAgICAgICAgc2VsZi5jdXJyZW50ID0gbmV4dChzZWxmLnNlcV9pdGVyKQogICAgICAgIHNlbGYuY3VyX2xlbmd0aCA9IDAKCiAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKICAgICAgICBzZWxmLl9mdXR1cmUgPSBmdXR1cmUKCiAgICAgICAgc2VsZi5mb3JtYXQgPSAxMDEKICAgICAgICBzZWxmLnRpbWVmcmFtZSA9IDIwCiAgICAgICAgc2VsZi5zdG9wcGVkID0gRmFsc2UKICAgICAgICBzZWxmLnRpbWVzdGFtcCA9IDIwCiAgICAgICAgc2VsZi5zZXEgPSA0OTcxMAogICAgICAgIHNlbGYuc3NyYyA9IDE2NzQxMTk3OAogICAgICAgIHNlbGYubWFya2VkID0gVHJ1ZQoKICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZgoKICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICBpZiBzZWxmLnN0b3BwZWQ6CiAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24oKQoKICAgICAgICBpZiBzZWxmLm1hcmtlZCBhbmQgc2VsZi5jdXJfbGVuZ3RoOgogICAgICAgICAgICBzZWxmLm1hcmtlZCA9IEZhbHNlCgogICAgICAgICMgSWYgd2UncmUgb2ZmIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGR0bWYgcGFja2V0LCBnZXQgYSBuZXcgb25lCiAgICAgICAgaWYgc2VsZi5jdXJfbGVuZ3RoID4gc2VsZi50b25lX2xlbmd0aDoKICAgICAgICAgICAgc2VsZi50aW1lc3RhbXAgKz0gMjAgICMgc2VsZi50b25lX2xlbmd0aCAtIDYwCiAgICAgICAgICAgIHNlbGYuY3VyX2xlbmd0aCA9IDAKICAgICAgICAgICAgc2VsZi5jdXJyZW50ID0gbmV4dChzZWxmLnNlcV9pdGVyKQogICAgICAgICAgICBzZWxmLm1hcmtlZCA9IFRydWUKCiAgICAgICAgIyBMYXN0IHRocmVlIHJ0cGV2ZW50IG1lc3NhZ2VzIHNob3VsZCBiZSBtYXJrZWQgYXMgdGhlIGVuZCBvZiBldmVudAogICAgICAgIGVuZCA9IGJvb2woc2VsZi5jdXJfbGVuZ3RoICsgNjAgPj0gc2VsZi50b25lX2xlbmd0aCkKICAgICAgICBldmVudCA9IFJUUEV2ZW50KAogICAgICAgICAgICBldmVudF9pZD1zZWxmLmN1cnJlbnQsCiAgICAgICAgICAgIGVuZF9vZl9ldmVudD1lbmQsCiAgICAgICAgICAgIHJlc2VydmVkPTAsCiAgICAgICAgICAgIHZvbHVtZT0xMCwKICAgICAgICAgICAgZHVyYXRpb249c2VsZi5jdXJfbGVuZ3RoICogOAogICAgICAgICkKCiAgICAgICAgc2VsZi5jdXJfbGVuZ3RoICs9IDIwCiAgICAgICAgcmV0dXJuIFJUUChtYXJrZXI9c2VsZi5tYXJrZWQsIHBfdHlwZT1zZWxmLmZvcm1hdCwgc2VxPXNlbGYuc2VxLAogICAgICAgICAgICAgICAgICAgdGltZXN0YW1wPXNlbGYudGltZXN0YW1wLCBzc3JjPXNlbGYuc3NyYywgcGF5bG9hZD1ldmVudCkKCiAgICBkZWYgc3RvcChzZWxmKToKICAgICAgICBpZiBzZWxmLl9sb29wIGFuZCBzZWxmLl9mdXR1cmU6CiAgICAgICAgICAgIHNlbGYuX2Z1dHVyZS5jYW5jZWwoKQogICAgICAgIHNlbGYuc3RvcHBlZCA9IFRydWUKPHxmaW1fc3VmZml4fD4KICAgICAgICBzYW1wbGVzID0gbnAuYXJyYXkod2F2ZSwgZHR5cGU9bnAuaW50MTYpCiAgICAgICAgc2VsZi5tZWRpYSA9IGF1ZGlvb3AubGluMnVsYXcoc2FtcGxlcy50b2J5dGVzKCksIDIpCgogICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCjx8ZmltX2VuZHw+"]
["dad269733eaf79667c03073b0f911f918cbd79fd-3","dad269733eaf79667c03073b0f911f918cbd79fd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGF1ZGlvb3AKCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgc25kZmlsZQoKZnJvbSAuZHRtZiBpbXBvcnQgRFRNRl9NQVAKZnJvbSAucGFja2V0IGltcG9ydCBSVFAsIFJUUEV2ZW50CgoKY2xhc3MgQXVkaW9GaWxlOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB0aW1lZnJhbWUsICosIGxvb3A9Tm9uZSwgZnV0dXJlPU5vbmUpOgogICAgICAgIGF1ZGlvID0gc25kZmlsZS5vcGVuKGZpbGVuYW1lKQogICAgICAgIGZyYW1lcyA9IGF1ZGlvLnJlYWRfZnJhbWVzKCdoJykKICAgICAgICBzZWxmLm1lZGlhID0gYXVkaW9vcC5saW4ydWxhdyhmcmFtZXMudG9ieXRlcygpLCBmcmFtZXMuaXRlbXNpemUpCgogICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCiAgICAgICAgc2VsZi5fZnV0dXJlID0gZnV0dXJlCgogICAgICAgIHNlbGYuZm9ybWF0ID0gMAo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLnNlcSA9IDQ5NzA5CiAgICAgICAgc2VsZi5zc3JjID0gMTY3NDExOTc2CiAgICAgICAgc2VsZi5tYXJrZWQgPSBGYWxzZQoKICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZgoKICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICBpZiBub3Qgc2VsZi5tZWRpYToKICAgICAgICAgICAgc2VsZi5zdG9wcGVkID0gVHJ1ZQoKICAgICAgICBpZiBzZWxmLnN0b3BwZWQ6CiAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24oKQoKICAgICAgICBzZWxmLm1lZGlhLCBjaHVuayA9IHNlbGYubWVkaWFbc2VsZi50aW1lZnJhbWU6XSwgc2VsZi5tZWRpYVs6c2VsZi50aW1lZnJhbWVdCiAgICAgICAgcmVzdWx0ID0gUlRQKG1hcmtlcj1zZWxmLm1hcmtlZCwgcF90eXBlPXNlbGYuZm9ybWF0LCBzZXE9c2VsZi5zZXEsCiAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcD1zZWxmLnRpbWVzdGFtcCwgc3NyYz1zZWxmLnNzcmMsIHBheWxvYWQ9Y2h1bmspCiAgICAgICAgc2VsZi50aW1lc3RhbXAgKz0gc2VsZi50aW1lZnJhbWUKICAgICAgICBzZWxmLnNlcSArPSAxCiAgICAgICAgcmV0dXJuIHJlc3VsdAoKICAgIGRlZiBzdG9wKHNlbGYpOgogICAgICAgIGlmIHNlbGYuX2xvb3AgYW5kIHNlbGYuX2Z1dHVyZToKICAgICAgICAgICAgc2VsZi5fZnV0dXJlLmNhbmNlbCgpCiAgICAgICAgc2VsZi5zdG9wcGVkID0gVHJ1ZQoKCmNsYXNzIFRvbmU6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZnJlcXVlbmN5LCBkdXJhdGlvbiwgdGltZWZyYW1lLCAqLAogICAgICAgICAgICAgICAgIGxvb3A9Tm9uZSwgZnV0dXJlPU5vbmUsIHNhbXBsZV9yYXRlPTgwMDAsIGFtcGxpdHVkZT0xMDAwMCk6CiAgICAgICAgc2FtcGxlX3RpbWVzID0gbnAuYXJhbmdlKHNhbXBsZV9yYXRlICogZHVyYXRpb24pIC8gc2FtcGxlX3JhdGUKICAgICAgICB3YXZlID0gYW1wbGl0dWRlICogbnAuc2luKDIgKiBucC5waSAqIGZyZXF1ZW5jeSAqIHNhbXBsZV90aW1lcykKICAgICAgICBzYW1wbGVzID0gbnAuYXJyYXkod2F2ZSwgZHR5cGU9bnAuaW50MTYpCiAgICAgICAgc2VsZi5tZWRpYSA9IGF1ZGlvb3AubGluMnVsYXcoc2FtcGxlcy50b2J5dGVzKCksIDIpCgogICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCiAgICAgICAgc2VsZi5fZnV0dXJlID0gZnV0dXJlCgogICAgICAgIHNlbGYuZm9ybWF0ID0gMAogICAgICAgIHNlbGYudGltZWZyYW1lID0gdGltZWZyYW1lCiAgICAgICAgc2VsZi5zdG9wcGVkID0gRmFsc2UKICAgICAgICBzZWxmLnRpbWVzdGFtcCA9IDAKICAgICAgICBzZWxmLnNlcSA9IDM5MjI3CiAgICAgICAgc2VsZi5zc3JjID0gMzQ5MTkyNgogICAgICAgIHNlbGYubWFya2VkID0gRmFsc2UKCiAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYKCiAgICBkZWYgX19uZXh0X18oc2VsZik6CiAgICAgICAgaWYgbm90IHNlbGYubWVkaWE6CiAgICAgICAgICAgIHNlbGYuc3RvcHBlZCA9IFRydWUKCiAgICAgICAgaWYgc2VsZi5zdG9wcGVkOgogICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uKCkKCiAgICAgICAgY2h1bmsgPSBzZWxmLm1lZGlhWzpzZWxmLnRpbWVmcmFtZV0KICAgICAgICBzZWxmLm1lZGlhID0gc2VsZi5tZWRpYVtzZWxmLnRpbWVmcmFtZTpdCgogICAgICAgIHJlc3VsdCA9IFJUUChtYXJrZXI9c2VsZi5tYXJrZWQsIHBfdHlwZT1zZWxmLmZvcm1hdCwgc2VxPXNlbGYuc2VxLAogICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA9c2VsZi50aW1lc3RhbXAsIHNzcmM9c2VsZi5zc3JjLCBwYXlsb2FkPWNodW5rKQogICAgICAgIHNlbGYudGltZXN0YW1wICs9IHNlbGYudGltZWZyYW1lCiAgICAgICAgcmV0dXJuIHJlc3VsdAoKICAgIGRlZiBzdG9wKHNlbGYpOgogICAgICAgIGlmIHNlbGYuX2xvb3AgYW5kIHNlbGYuX2Z1dHVyZToKICAgICAgICAgICAgc2VsZi5fZnV0dXJlLmNhbmNlbCgpCiAgICAgICAgc2VsZi5zdG9wcGVkID0gVHJ1ZQoKCmNsYXNzIERUTUY6CiAgICBkZWYgX19pbml0X18oc2VsZiwgc2VxdWVuY2UsICosIHRvbmVfbGVuZ3RoPU5vbmUsIGxvb3A9Tm9uZSwgZnV0dXJlPU5vbmUpOgogICAgICAgIHNlbGYuc2VxdWVuY2UgPSBbRFRNRl9NQVBbeF0gZm9yIHggaW4gc2VxdWVuY2VdCiAgICAgICAgc2VsZi50b25lX2xlbmd0aCA9IHRvbmVfbGVuZ3RoIG9yIDIwMAoKICAgICAgICBzZWxmLnNlcV9pdGVyID0gaXRlcihzZWxmLnNlcXVlbmNlKQogICAgICAgIHNlbGYuY3VycmVudCA9IG5leHQoc2VsZi5zZXFfaXRlcikKICAgICAgICBzZWxmLmN1cl9sZW5ndGggPSAwCgogICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCiAgICAgICAgc2VsZi5fZnV0dXJlID0gZnV0dXJlCgogICAgICAgIHNlbGYuZm9ybWF0ID0gMTAxCiAgICAgICAgc2VsZi50aW1lZnJhbWUgPSAyMAogICAgICAgIHNlbGYuc3RvcHBlZCA9IEZhbHNlCiAgICAgICAgc2VsZi50aW1lc3RhbXAgPSAyMAogICAgICAgIHNlbGYuc2VxID0gNDk3MTAKICAgICAgICBzZWxmLnNzcmMgPSAxNjc0MTE5NzgKICAgICAgICBzZWxmLm1hcmtlZCA9IFRydWUKCiAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYKCiAgICBkZWYgX19uZXh0X18oc2VsZik6CiAgICAgICAgaWYgc2VsZi5zdG9wcGVkOgogICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uKCkKCiAgICAgICAgaWYgc2VsZi5tYXJrZWQgYW5kIHNlbGYuY3VyX2xlbmd0aDoKICAgICAgICAgICAgc2VsZi5tYXJrZWQgPSBGYWxzZQoKICAgICAgICAjIElmIHdlJ3JlIG9mZiB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBkdG1mIHBhY2tldCwgZ2V0IGEgbmV3IG9uZQogICAgICAgIGlmIHNlbGYuY3VyX2xlbmd0aCA+IHNlbGYudG9uZV9sZW5ndGg6CiAgICAgICAgICAgIHNlbGYudGltZXN0YW1wICs9IDIwICAjIHNlbGYudG9uZV9sZW5ndGggLSA2MAogICAgICAgICAgICBzZWxmLmN1cl9sZW5ndGggPSAwCiAgICAgICAgICAgIHNlbGYuY3VycmVudCA9IG5leHQoc2VsZi5zZXFfaXRlcikKICAgICAgICAgICAgc2VsZi5tYXJrZWQgPSBUcnVlCgogICAgICAgICMgTGFzdCB0aHJlZSBydHBldmVudCBtZXNzYWdlcyBzaG91bGQgYmUgbWFya2VkIGFzIHRoZSBlbmQgb2YgZXZlbnQKICAgICAgICBlbmQgPSBib29sKHNlbGYuY3VyX2xlbmd0aCArIDYwID49IHNlbGYudG9uZV9sZW5ndGgpCiAgICAgICAgZXZlbnQgPSBSVFBFdmVudCgKICAgICAgICAgICAgZXZlbnRfaWQ9c2VsZi5jdXJyZW50LAogICAgICAgICAgICBlbmRfb2ZfZXZlbnQ9ZW5kLAogICAgICAgICAgICByZXNlcnZlZD0wLAogICAgICAgICAgICB2b2x1bWU9MTAsCiAgICAgICAgICAgIGR1cmF0aW9uPXNlbGYuY3VyX2xlbmd0aCAqIDgKICAgICAgICApCgogICAgICAgIHNlbGYuY3VyX2xlbmd0aCArPSAyMAogICAgICAgIHJldHVybiBSVFAobWFya2VyPXNlbGYubWFya2VkLCBwX3R5cGU9c2VsZi5mb3JtYXQsIHNlcT1zZWxmLnNlcSwKICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcD1zZWxmLnRpbWVzdGFtcCwgc3NyYz1zZWxmLnNzcmMsIHBheWxvYWQ9ZXZlbnQpCgogICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgaWYgc2VsZi5fbG9vcCBhbmQgc2VsZi5fZnV0dXJlOgogICAgICAgICAgICBzZWxmLl9mdXR1cmUuY2FuY2VsKCkKICAgICAgICBzZWxmLnN0b3BwZWQgPSBUcnVlCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi50aW1lZnJhbWUgPSB0aW1lZnJhbWUKCiAgICAgICAgc2VsZi5zdG9wcGVkID0gRmFsc2UKICAgICAgICBzZWxmLnRpbWVzdGFtcCA9IDIwCjx8ZmltX2VuZHw+"]
["dad269733eaf79667c03073b0f911f918cbd79fd-4","dad269733eaf79667c03073b0f911f918cbd79fd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGF1ZGlvb3AKCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgc25kZmlsZQoKZnJvbSAuZHRtZiBpbXBvcnQgRFRNRl9NQVAKZnJvbSAucGFja2V0IGltcG9ydCBSVFAsIFJUUEV2ZW50CgoKY2xhc3MgQXVkaW9GaWxlOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB0aW1lZnJhbWUsICosIGxvb3A9Tm9uZSwgZnV0dXJlPU5vbmUpOgogICAgICAgIGF1ZGlvID0gc25kZmlsZS5vcGVuKGZpbGVuYW1lKQogICAgICAgIGZyYW1lcyA9IGF1ZGlvLnJlYWRfZnJhbWVzKCdoJykKICAgICAgICBzZWxmLm1lZGlhID0gYXVkaW9vcC5saW4ydWxhdyhmcmFtZXMudG9ieXRlcygpLCBmcmFtZXMuaXRlbXNpemUpCgogICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCiAgICAgICAgc2VsZi5fZnV0dXJlID0gZnV0dXJlCgogICAgICAgIHNlbGYuZm9ybWF0ID0gMAogICAgICAgIHNlbGYudGltZWZyYW1lID0gdGltZWZyYW1lCgogICAgICAgIHNlbGYuc3RvcHBlZCA9IEZhbHNlCiAgICAgICAgc2VsZi50aW1lc3RhbXAgPSAyMAogICAgICAgIHNlbGYuc2VxID0gNDk3MDkKICAgICAgICBzZWxmLnNzcmMgPSAxNjc0MTE5NzYKICAgICAgICBzZWxmLm1hcmtlZCA9IEZhbHNlCgogICAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmCgogICAgZGVmIF9fbmV4dF9fKHNlbGYpOgogICAgICAgIGlmIG5vdCBzZWxmLm1lZGlhOgogICAgICAgICAgICBzZWxmLnN0b3BwZWQgPSBUcnVlCgogICAgICAgIGlmIHNlbGYuc3RvcHBlZDoKICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbigpCgogICAgICAgIHNlbGYubWVkaWEsIGNodW5rID0gc2VsZi5tZWRpYVtzZWxmLnRpbWVmcmFtZTpdLCBzZWxmLm1lZGlhWzpzZWxmLnRpbWVmcmFtZV0KICAgICAgICByZXN1bHQgPSBSVFAobWFya2VyPXNlbGYubWFya2VkLCBwX3R5cGU9c2VsZi5mb3JtYXQsIHNlcT1zZWxmLnNlcSwKICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wPXNlbGYudGltZXN0YW1wLCBzc3JjPXNlbGYuc3NyYywgcGF5bG9hZD1jaHVuaykKICAgICAgICBzZWxmLnRpbWVzdGFtcCArPSBzZWxmLnRpbWVmcmFtZQogICAgICAgIHNlbGYuc2VxICs9IDEKICAgICAgICByZXR1cm4gcmVzdWx0CgogICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgaWYgc2VsZi5fbG9vcCBhbmQgc2VsZi5fZnV0dXJlOgogICAgICAgICAgICBzZWxmLl9mdXR1cmUuY2FuY2VsKCkKICAgICAgICBzZWxmLnN0b3BwZWQgPSBUcnVlCgoKY2xhc3MgVG9uZToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcmVxdWVuY3ksIGR1cmF0aW9uLCB0aW1lZnJhbWUsICosCiAgICAgICAgICAgICAgICAgbG9vcD1Ob25lLCBmdXR1cmU9Tm9uZSwgc2FtcGxlX3JhdGU9ODAwMCwgYW1wbGl0dWRlPTEwMDAwKToKICAgICAgICBzYW1wbGVfdGltZXMgPSBucC5hcmFuZ2Uoc2FtcGxlX3JhdGUgKiBkdXJhdGlvbikgLyBzYW1wbGVfcmF0ZQogICAgICAgIHdhdmUgPSBhbXBsaXR1ZGUgKiBucC5zaW4oMiAqIG5wLnBpICogZnJlcXVlbmN5ICogc2FtcGxlX3RpbWVzKQogICAgICAgIHNhbXBsZXMgPSBucC5hcnJheSh3YXZlLCBkdHlwZT1ucC5pbnQxNikKICAgICAgICBzZWxmLm1lZGlhID0gYXVkaW9vcC5saW4ydWxhdyhzYW1wbGVzLnRvYnl0ZXMoKSwgMikKCiAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKICAgICAgICBzZWxmLl9mdXR1cmUgPSBmdXR1cmUKCiAgICAgICAgc2VsZi5mb3JtYXQgPSAwCiAgICAgICAgc2VsZi50aW1lZnJhbWUgPSB0aW1lZnJhbWUKICAgICAgICBzZWxmLnN0b3BwZWQgPSBGYWxzZQogICAgICAgIHNlbGYudGltZXN0YW1wID0gMAogICAgICAgIHNlbGYuc2VxID0gMzkyMjcKICAgICAgICBzZWxmLnNzcmMgPSAzNDkxOTI2CiAgICAgICAgc2VsZi5tYXJrZWQgPSBGYWxzZQoKICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZgoKICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICBpZiBub3Qgc2VsZi5tZWRpYToKICAgICAgICAgICAgc2VsZi5zdG9wcGVkID0gVHJ1ZQoKICAgICAgICBpZiBzZWxmLnN0b3BwZWQ6CiAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24oKQoKICAgICAgICBjaHVuayA9IHNlbGYubWVkaWFbOnNlbGYudGltZWZyYW1lXQogICAgICAgIHNlbGYubWVkaWEgPSBzZWxmLm1lZGlhW3NlbGYudGltZWZyYW1lOl0KCiAgICAgICAgcmVzdWx0ID0gUlRQKG1hcmtlcj1zZWxmLm1hcmtlZCwgcF90eXBlPXNlbGYuZm9ybWF0LCBzZXE9c2VsZi5zZXEsCiAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcD1zZWxmLnRpbWVzdGFtcCwgc3NyYz1zZWxmLnNzcmMsIHBheWxvYWQ9Y2h1bmspCiAgICAgICAgc2VsZi50aW1lc3RhbXAgKz0gc2VsZi50aW1lZnJhbWUKICAgICAgICByZXR1cm4gcmVzdWx0CgogICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgaWYgc2VsZi5fbG9vcCBhbmQgc2VsZi5fZnV0dXJlOgogICAgICAgICAgICBzZWxmLl9mdXR1cmUuY2FuY2VsKCkKICAgICAgICBzZWxmLnN0b3BwZWQgPSBUcnVlCgoKY2xhc3MgRFRNRjoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXF1ZW5jZSwgKiwgdG9uZV9sZW5ndGg9Tm9uZSwgbG9vcD1Ob25lLCBmdXR1cmU9Tm9uZSk6CiAgICAgICAgc2VsZi5zZXF1ZW5jZSA9IFtEVE1GX01BUFt4XSBmb3IgeCBpbiBzZXF1ZW5jZV0KICAgICAgICBzZWxmLnRvbmVfbGVuZ3RoID0gdG9uZV9sZW5ndGggb3IgMjAwCgogICAgICAgIHNlbGYuc2VxX2l0ZXIgPSBpdGVyKHNlbGYuc2VxdWVuY2UpCiAgICAgICAgc2VsZi5jdXJyZW50ID0gbmV4dChzZWxmLnNlcV9pdGVyKQogICAgICAgIHNlbGYuY3VyX2xlbmd0aCA9IDAKCiAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKICAgICAgICBzZWxmLl9mdXR1cmUgPSBmdXR1cmUKCiAgICAgICAgc2VsZi5mb3JtYXQgPSAxMDEKICAgICAgICBzZWxmLnRpbWVmcmFtZSA9IDIwCiAgICAgICAgc2VsZi5zdG9wcGVkID0gRmFsc2UKICAgICAgICBzZWxmLnRpbWVzdGFtcCA9IDIwCiAgICAgICAgc2VsZi5zZXEgPSA0OTcxMAo8fGZpbV9ob2xlfD4KICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZgoKICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICBpZiBzZWxmLnN0b3BwZWQ6CiAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24oKQoKICAgICAgICBpZiBzZWxmLm1hcmtlZCBhbmQgc2VsZi5jdXJfbGVuZ3RoOgogICAgICAgICAgICBzZWxmLm1hcmtlZCA9IEZhbHNlCgogICAgICAgICMgSWYgd2UncmUgb2ZmIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGR0bWYgcGFja2V0LCBnZXQgYSBuZXcgb25lCiAgICAgICAgaWYgc2VsZi5jdXJfbGVuZ3RoID4gc2VsZi50b25lX2xlbmd0aDoKICAgICAgICAgICAgc2VsZi50aW1lc3RhbXAgKz0gMjAgICMgc2VsZi50b25lX2xlbmd0aCAtIDYwCiAgICAgICAgICAgIHNlbGYuY3VyX2xlbmd0aCA9IDAKICAgICAgICAgICAgc2VsZi5jdXJyZW50ID0gbmV4dChzZWxmLnNlcV9pdGVyKQogICAgICAgICAgICBzZWxmLm1hcmtlZCA9IFRydWUKCiAgICAgICAgIyBMYXN0IHRocmVlIHJ0cGV2ZW50IG1lc3NhZ2VzIHNob3VsZCBiZSBtYXJrZWQgYXMgdGhlIGVuZCBvZiBldmVudAogICAgICAgIGVuZCA9IGJvb2woc2VsZi5jdXJfbGVuZ3RoICsgNjAgPj0gc2VsZi50b25lX2xlbmd0aCkKICAgICAgICBldmVudCA9IFJUUEV2ZW50KAogICAgICAgICAgICBldmVudF9pZD1zZWxmLmN1cnJlbnQsCiAgICAgICAgICAgIGVuZF9vZl9ldmVudD1lbmQsCiAgICAgICAgICAgIHJlc2VydmVkPTAsCiAgICAgICAgICAgIHZvbHVtZT0xMCwKICAgICAgICAgICAgZHVyYXRpb249c2VsZi5jdXJfbGVuZ3RoICogOAogICAgICAgICkKCiAgICAgICAgc2VsZi5jdXJfbGVuZ3RoICs9IDIwCiAgICAgICAgcmV0dXJuIFJUUChtYXJrZXI9c2VsZi5tYXJrZWQsIHBfdHlwZT1zZWxmLmZvcm1hdCwgc2VxPXNlbGYuc2VxLAogICAgICAgICAgICAgICAgICAgdGltZXN0YW1wPXNlbGYudGltZXN0YW1wLCBzc3JjPXNlbGYuc3NyYywgcGF5bG9hZD1ldmVudCkKCiAgICBkZWYgc3RvcChzZWxmKToKICAgICAgICBpZiBzZWxmLl9sb29wIGFuZCBzZWxmLl9mdXR1cmU6CiAgICAgICAgICAgIHNlbGYuX2Z1dHVyZS5jYW5jZWwoKQogICAgICAgIHNlbGYuc3RvcHBlZCA9IFRydWUKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLnNzcmMgPSAxNjc0MTE5NzgKICAgICAgICBzZWxmLm1hcmtlZCA9IFRydWUKCjx8ZmltX2VuZHw+"]
["dad269733eaf79667c03073b0f911f918cbd79fd-5","dad269733eaf79667c03073b0f911f918cbd79fd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGF1ZGlvb3AKCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgc25kZmlsZQoKZnJvbSAuZHRtZiBpbXBvcnQgRFRNRl9NQVAKZnJvbSAucGFja2V0IGltcG9ydCBSVFAsIFJUUEV2ZW50CgoKY2xhc3MgQXVkaW9GaWxlOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB0aW1lZnJhbWUsICosIGxvb3A9Tm9uZSwgZnV0dXJlPU5vbmUpOgogICAgICAgIGF1ZGlvID0gc25kZmlsZS5vcGVuKGZpbGVuYW1lKQogICAgICAgIGZyYW1lcyA9IGF1ZGlvLnJlYWRfZnJhbWVzKCdoJykKICAgICAgICBzZWxmLm1lZGlhID0gYXVkaW9vcC5saW4ydWxhdyhmcmFtZXMudG9ieXRlcygpLCBmcmFtZXMuaXRlbXNpemUpCgogICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCiAgICAgICAgc2VsZi5fZnV0dXJlID0gZnV0dXJlCgogICAgICAgIHNlbGYuZm9ybWF0ID0gMAogICAgICAgIHNlbGYudGltZWZyYW1lID0gdGltZWZyYW1lCgogICAgICAgIHNlbGYuc3RvcHBlZCA9IEZhbHNlCiAgICAgICAgc2VsZi50aW1lc3RhbXAgPSAyMAogICAgICAgIHNlbGYuc2VxID0gNDk3MDkKICAgICAgICBzZWxmLnNzcmMgPSAxNjc0MTE5NzYKICAgICAgICBzZWxmLm1hcmtlZCA9IEZhbHNlCgogICAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmCgogICAgZGVmIF9fbmV4dF9fKHNlbGYpOgogICAgICAgIGlmIG5vdCBzZWxmLm1lZGlhOgogICAgICAgICAgICBzZWxmLnN0b3BwZWQgPSBUcnVlCgogICAgICAgIGlmIHNlbGYuc3RvcHBlZDoKICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbigpCgogICAgICAgIHNlbGYubWVkaWEsIGNodW5rID0gc2VsZi5tZWRpYVtzZWxmLnRpbWVmcmFtZTpdLCBzZWxmLm1lZGlhWzpzZWxmLnRpbWVmcmFtZV0KICAgICAgICByZXN1bHQgPSBSVFAobWFya2VyPXNlbGYubWFya2VkLCBwX3R5cGU9c2VsZi5mb3JtYXQsIHNlcT1zZWxmLnNlcSwKICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wPXNlbGYudGltZXN0YW1wLCBzc3JjPXNlbGYuc3NyYywgcGF5bG9hZD1jaHVuaykKICAgICAgICBzZWxmLnRpbWVzdGFtcCArPSBzZWxmLnRpbWVmcmFtZQogICAgICAgIHNlbGYuc2VxICs9IDEKICAgICAgICByZXR1cm4gcmVzdWx0CgogICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgaWYgc2VsZi5fbG9vcCBhbmQgc2VsZi5fZnV0dXJlOgogICAgICAgICAgICBzZWxmLl9mdXR1cmUuY2FuY2VsKCkKICAgICAgICBzZWxmLnN0b3BwZWQgPSBUcnVlCgoKY2xhc3MgVG9uZToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcmVxdWVuY3ksIGR1cmF0aW9uLCB0aW1lZnJhbWUsICosCiAgICAgICAgICAgICAgICAgbG9vcD1Ob25lLCBmdXR1cmU9Tm9uZSwgc2FtcGxlX3JhdGU9ODAwMCwgYW1wbGl0dWRlPTEwMDAwKToKICAgICAgICBzYW1wbGVfdGltZXMgPSBucC5hcmFuZ2Uoc2FtcGxlX3JhdGUgKiBkdXJhdGlvbikgLyBzYW1wbGVfcmF0ZQogICAgICAgIHdhdmUgPSBhbXBsaXR1ZGUgKiBucC5zaW4oMiAqIG5wLnBpICogZnJlcXVlbmN5ICogc2FtcGxlX3RpbWVzKQogICAgICAgIHNhbXBsZXMgPSBucC5hcnJheSh3YXZlLCBkdHlwZT1ucC5pbnQxNikKICAgICAgICBzZWxmLm1lZGlhID0gYXVkaW9vcC5saW4ydWxhdyhzYW1wbGVzLnRvYnl0ZXMoKSwgMikKCiAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKICAgICAgICBzZWxmLl9mdXR1cmUgPSBmdXR1cmUKCjx8ZmltX2hvbGV8PgogICAgICAgIHNlbGYuc2VxID0gMzkyMjcKICAgICAgICBzZWxmLnNzcmMgPSAzNDkxOTI2CiAgICAgICAgc2VsZi5tYXJrZWQgPSBGYWxzZQoKICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZgoKICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICBpZiBub3Qgc2VsZi5tZWRpYToKICAgICAgICAgICAgc2VsZi5zdG9wcGVkID0gVHJ1ZQoKICAgICAgICBpZiBzZWxmLnN0b3BwZWQ6CiAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24oKQoKICAgICAgICBjaHVuayA9IHNlbGYubWVkaWFbOnNlbGYudGltZWZyYW1lXQogICAgICAgIHNlbGYubWVkaWEgPSBzZWxmLm1lZGlhW3NlbGYudGltZWZyYW1lOl0KCiAgICAgICAgcmVzdWx0ID0gUlRQKG1hcmtlcj1zZWxmLm1hcmtlZCwgcF90eXBlPXNlbGYuZm9ybWF0LCBzZXE9c2VsZi5zZXEsCiAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcD1zZWxmLnRpbWVzdGFtcCwgc3NyYz1zZWxmLnNzcmMsIHBheWxvYWQ9Y2h1bmspCiAgICAgICAgc2VsZi50aW1lc3RhbXAgKz0gc2VsZi50aW1lZnJhbWUKICAgICAgICByZXR1cm4gcmVzdWx0CgogICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgaWYgc2VsZi5fbG9vcCBhbmQgc2VsZi5fZnV0dXJlOgogICAgICAgICAgICBzZWxmLl9mdXR1cmUuY2FuY2VsKCkKICAgICAgICBzZWxmLnN0b3BwZWQgPSBUcnVlCgoKY2xhc3MgRFRNRjoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXF1ZW5jZSwgKiwgdG9uZV9sZW5ndGg9Tm9uZSwgbG9vcD1Ob25lLCBmdXR1cmU9Tm9uZSk6CiAgICAgICAgc2VsZi5zZXF1ZW5jZSA9IFtEVE1GX01BUFt4XSBmb3IgeCBpbiBzZXF1ZW5jZV0KICAgICAgICBzZWxmLnRvbmVfbGVuZ3RoID0gdG9uZV9sZW5ndGggb3IgMjAwCgogICAgICAgIHNlbGYuc2VxX2l0ZXIgPSBpdGVyKHNlbGYuc2VxdWVuY2UpCiAgICAgICAgc2VsZi5jdXJyZW50ID0gbmV4dChzZWxmLnNlcV9pdGVyKQogICAgICAgIHNlbGYuY3VyX2xlbmd0aCA9IDAKCiAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKICAgICAgICBzZWxmLl9mdXR1cmUgPSBmdXR1cmUKCiAgICAgICAgc2VsZi5mb3JtYXQgPSAxMDEKICAgICAgICBzZWxmLnRpbWVmcmFtZSA9IDIwCiAgICAgICAgc2VsZi5zdG9wcGVkID0gRmFsc2UKICAgICAgICBzZWxmLnRpbWVzdGFtcCA9IDIwCiAgICAgICAgc2VsZi5zZXEgPSA0OTcxMAogICAgICAgIHNlbGYuc3NyYyA9IDE2NzQxMTk3OAogICAgICAgIHNlbGYubWFya2VkID0gVHJ1ZQoKICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZgoKICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICBpZiBzZWxmLnN0b3BwZWQ6CiAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24oKQoKICAgICAgICBpZiBzZWxmLm1hcmtlZCBhbmQgc2VsZi5jdXJfbGVuZ3RoOgogICAgICAgICAgICBzZWxmLm1hcmtlZCA9IEZhbHNlCgogICAgICAgICMgSWYgd2UncmUgb2ZmIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGR0bWYgcGFja2V0LCBnZXQgYSBuZXcgb25lCiAgICAgICAgaWYgc2VsZi5jdXJfbGVuZ3RoID4gc2VsZi50b25lX2xlbmd0aDoKICAgICAgICAgICAgc2VsZi50aW1lc3RhbXAgKz0gMjAgICMgc2VsZi50b25lX2xlbmd0aCAtIDYwCiAgICAgICAgICAgIHNlbGYuY3VyX2xlbmd0aCA9IDAKICAgICAgICAgICAgc2VsZi5jdXJyZW50ID0gbmV4dChzZWxmLnNlcV9pdGVyKQogICAgICAgICAgICBzZWxmLm1hcmtlZCA9IFRydWUKCiAgICAgICAgIyBMYXN0IHRocmVlIHJ0cGV2ZW50IG1lc3NhZ2VzIHNob3VsZCBiZSBtYXJrZWQgYXMgdGhlIGVuZCBvZiBldmVudAogICAgICAgIGVuZCA9IGJvb2woc2VsZi5jdXJfbGVuZ3RoICsgNjAgPj0gc2VsZi50b25lX2xlbmd0aCkKICAgICAgICBldmVudCA9IFJUUEV2ZW50KAogICAgICAgICAgICBldmVudF9pZD1zZWxmLmN1cnJlbnQsCiAgICAgICAgICAgIGVuZF9vZl9ldmVudD1lbmQsCiAgICAgICAgICAgIHJlc2VydmVkPTAsCiAgICAgICAgICAgIHZvbHVtZT0xMCwKICAgICAgICAgICAgZHVyYXRpb249c2VsZi5jdXJfbGVuZ3RoICogOAogICAgICAgICkKCiAgICAgICAgc2VsZi5jdXJfbGVuZ3RoICs9IDIwCiAgICAgICAgcmV0dXJuIFJUUChtYXJrZXI9c2VsZi5tYXJrZWQsIHBfdHlwZT1zZWxmLmZvcm1hdCwgc2VxPXNlbGYuc2VxLAogICAgICAgICAgICAgICAgICAgdGltZXN0YW1wPXNlbGYudGltZXN0YW1wLCBzc3JjPXNlbGYuc3NyYywgcGF5bG9hZD1ldmVudCkKCiAgICBkZWYgc3RvcChzZWxmKToKICAgICAgICBpZiBzZWxmLl9sb29wIGFuZCBzZWxmLl9mdXR1cmU6CiAgICAgICAgICAgIHNlbGYuX2Z1dHVyZS5jYW5jZWwoKQogICAgICAgIHNlbGYuc3RvcHBlZCA9IFRydWUKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmZvcm1hdCA9IDAKICAgICAgICBzZWxmLnRpbWVmcmFtZSA9IHRpbWVmcmFtZQogICAgICAgIHNlbGYuc3RvcHBlZCA9IEZhbHNlCiAgICAgICAgc2VsZi50aW1lc3RhbXAgPSAwCjx8ZmltX2VuZHw+"]
["c12addc12cf53c7124afb2a638b096bbd978046d-1","c12addc12cf53c7124afb2a638b096bbd978046d","PHxmaW1fcHJlZml4fD4KY2xhc3MgU29sdXRpb246CiAgICBkZWYgbnVtSWRlbnRpY2FsUGFpcnMoc2VsZiwgbnVtczogTGlzdFtpbnRdKSAtPiBpbnQ6CiAgICAgICAgbnVtID0gMAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgb2NjdXJhbmNlcyA9IHt9CiAgICAgICAgZm9yIG4gaW4gbnVtczoKICAgICAgICAgICAgb2NjdXJhbmNlID0gb2NjdXJhbmNlcy5nZXQobiwgMCkKICAgICAgICAgICAgbnVtICs9IG9jY3VyYW5jZQo8fGZpbV9lbmR8Pg=="]
["c12addc12cf53c7124afb2a638b096bbd978046d-2","c12addc12cf53c7124afb2a638b096bbd978046d","PHxmaW1fcHJlZml4fD4KY2xhc3MgU29sdXRpb246CiAgICBkZWYgbnVtSWRlbnRpY2FsUGFpcnMoc2VsZiwgbnVtczogTGlzdFtpbnRdKSAtPiBpbnQ6CiAgICAgICAgbnVtID0gMAogICAgICAgIG9jY3VyYW5jZXMgPSB7fQogICAgICAgIGZvciBuIGluIG51bXM6CiAgICAgICAgICAgIG9jY3VyYW5jZSA9IG9jY3VyYW5jZXMuZ2V0KG4sIDApCiAgICAgICAgICAgIG51bSArPSBvY2N1cmFuY2UKICAgICAgICAgICAgb2NjdXJhbmNlc1tuXSA9IG9jY3VyYW5jZSArIDEKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJldHVybiBudW0KPHxmaW1fZW5kfD4="]
["c12addc12cf53c7124afb2a638b096bbd978046d-3","c12addc12cf53c7124afb2a638b096bbd978046d","PHxmaW1fcHJlZml4fD4KY2xhc3MgU29sdXRpb246CiAgICBkZWYgbnVtSWRlbnRpY2FsUGFpcnMoc2VsZiwgbnVtczogTGlzdFtpbnRdKSAtPiBpbnQ6CiAgICAgICAgbnVtID0gMAogICAgICAgIG9jY3VyYW5jZXMgPSB7fQogICAgICAgIGZvciBuIGluIG51bXM6CiAgICAgICAgICAgIG9jY3VyYW5jZSA9IG9jY3VyYW5jZXMuZ2V0KG4sIDApCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgbnVtICs9IG9jY3VyYW5jZQogICAgICAgICAgICBvY2N1cmFuY2VzW25dID0gb2NjdXJhbmNlICsgMQo8fGZpbV9lbmR8Pg=="]
["c12addc12cf53c7124afb2a638b096bbd978046d-4","c12addc12cf53c7124afb2a638b096bbd978046d","PHxmaW1fcHJlZml4fD4KY2xhc3MgU29sdXRpb246CiAgICBkZWYgbnVtSWRlbnRpY2FsUGFpcnMoc2VsZiwgbnVtczogTGlzdFtpbnRdKSAtPiBpbnQ6Cjx8ZmltX2hvbGV8PgogICAgICAgICAgICBudW0gKz0gb2NjdXJhbmNlCiAgICAgICAgICAgIG9jY3VyYW5jZXNbbl0gPSBvY2N1cmFuY2UgKyAxCiAgICAgICAgcmV0dXJuIG51bQo8fGZpbV9zdWZmaXh8PgogICAgICAgIG51bSA9IDAKICAgICAgICBvY2N1cmFuY2VzID0ge30KICAgICAgICBmb3IgbiBpbiBudW1zOgogICAgICAgICAgICBvY2N1cmFuY2UgPSBvY2N1cmFuY2VzLmdldChuLCAwKQo8fGZpbV9lbmR8Pg=="]
["8ae8473d58a32b7cadce9766db942e34965f5b0e-1","8ae8473d58a32b7cadce9766db942e34965f5b0e","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMS4xMyBvbiAyMDIxLTExLTA1IDE1OjM1Cgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucwppbXBvcnQgd2FndGFpbC5jb3JlLmZpZWxkcwoKCmNsYXNzIE1pZ3JhdGlvbihtaWdyYXRpb25zLk1pZ3JhdGlvbik6CgogICAgZGVwZW5kZW5jaWVzID0gWwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgKCdhcHAnLCAnMDEwNV9hdXRvXzIwMjExMTA1XzE2MDcnKSwKPHxmaW1fZW5kfD4="]
["8ae8473d58a32b7cadce9766db942e34965f5b0e-2","8ae8473d58a32b7cadce9766db942e34965f5b0e","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMS4xMyBvbiAyMDIxLTExLTA1IDE1OjM1Cgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucwppbXBvcnQgd2FndGFpbC5jb3JlLmZpZWxkcwoKCmNsYXNzIE1pZ3JhdGlvbihtaWdyYXRpb25zLk1pZ3JhdGlvbik6CgogICAgZGVwZW5kZW5jaWVzID0gWwogICAgICAgICgnYXBwJywgJzAxMDVfYXV0b18yMDIxMTEwNV8xNjA3JyksCiAgICBdCjx8ZmltX2hvbGV8PgogICAgICAgICAgICBuYW1lPSdzaXN0ZW1fc3RydWN0dXJhbF9vYnNlcnZhdGlpJywKICAgICAgICAgICAgZmllbGQ9d2FndGFpbC5jb3JlLmZpZWxkcy5SaWNoVGV4dEZpZWxkKGJsYW5rPVRydWUsIG51bGw9VHJ1ZSwgdmVyYm9zZV9uYW1lPSdPYnNlcnZhyJtpaScpLAogICAgICAgICksCiAgICBdCjx8ZmltX3N1ZmZpeHw+CgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFkZEZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdkZXNjcmllcmVwYWdlJywKPHxmaW1fZW5kfD4="]
["8ae8473d58a32b7cadce9766db942e34965f5b0e-3","8ae8473d58a32b7cadce9766db942e34965f5b0e","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMS4xMyBvbiAyMDIxLTExLTA1IDE1OjM1Cgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucwppbXBvcnQgd2FndGFpbC5jb3JlLmZpZWxkcwoKCmNsYXNzIE1pZ3JhdGlvbihtaWdyYXRpb25zLk1pZ3JhdGlvbik6Cgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgKCdhcHAnLCAnMDEwNV9hdXRvXzIwMjExMTA1XzE2MDcnKSwKICAgIF0KCjx8ZmltX2VuZHw+"]
["8ae8473d58a32b7cadce9766db942e34965f5b0e-4","8ae8473d58a32b7cadce9766db942e34965f5b0e","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMS4xMyBvbiAyMDIxLTExLTA1IDE1OjM1Cgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucwppbXBvcnQgd2FndGFpbC5jb3JlLmZpZWxkcwoKCmNsYXNzIE1pZ3JhdGlvbihtaWdyYXRpb25zLk1pZ3JhdGlvbik6CgogICAgZGVwZW5kZW5jaWVzID0gWwogICAgICAgICgnYXBwJywgJzAxMDVfYXV0b18yMDIxMTEwNV8xNjA3JyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFkZEZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdkZXNjcmllcmVwYWdlJywKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBuYW1lPSdzaXN0ZW1fc3RydWN0dXJhbF9vYnNlcnZhdGlpJywKICAgICAgICAgICAgZmllbGQ9d2FndGFpbC5jb3JlLmZpZWxkcy5SaWNoVGV4dEZpZWxkKGJsYW5rPVRydWUsIG51bGw9VHJ1ZSwgdmVyYm9zZV9uYW1lPSdPYnNlcnZhyJtpaScpLAo8fGZpbV9lbmR8Pg=="]
["8ae8473d58a32b7cadce9766db942e34965f5b0e-5","8ae8473d58a32b7cadce9766db942e34965f5b0e","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMS4xMyBvbiAyMDIxLTExLTA1IDE1OjM1Cgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucwppbXBvcnQgd2FndGFpbC5jb3JlLmZpZWxkcwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCjx8ZmltX2VuZHw+"]
["c1bf8c53bd426e8801230a6e3e525830b4ed981a-1","c1bf8c53bd426e8801230a6e3e525830b4ed981a","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQsIHVuaWNvZGVfbGl0ZXJhbHMKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzeXMKaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCBtb2NrCjx8ZmltX2VuZHw+"]
["c1bf8c53bd426e8801230a6e3e525830b4ed981a-2","c1bf8c53bd426e8801230a6e3e525830b4ed981a","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQsIHVuaWNvZGVfbGl0ZXJhbHMKCmltcG9ydCBvcwppbXBvcnQgc3lzCmltcG9ydCB1bml0dGVzdAppbXBvcnQgbW9jawoKc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSsnLy4uLy4uL3NvdXJjZXMvc2VydmVyLycpCmZyb20gYXBwbGljYXRpb24gaW1wb3J0IGV2YWx1YXRlX2RhdGEKZnJvbSBhcHBsaWNhdGlvbiBpbXBvcnQgb2JmdXNjYXRlCgpjbGFzcyBUZXN0U3ludGhldGljTW9uaXRvcmluZ0FwcGxpY2F0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICIiIlRlc3RTeW50aGV0aWNNb25pdG9yaW5nQXBwbGljYXRpb24gVW5pdCBUZXN0cyIiIgoKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAiIiJJbml0aWFsaXNhdGlvbiIiIgogICAgICAgIHBhc3MKCiAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIiIiQ2xlYW5pbmctdXAgcmVzb3VyY2VzIHVzZWQiIiIKICAgICAgICBwYXNzCgogICAgZGVmIHRlc3RfZXZhbHVhdGVfZGF0YShzZWxmKToKICAgICAgICAiIiJhcHBsaWNhdGlvbi5ldmFsdWF0ZV9kYXRhKCkiIiIKICAgICAgICAjIFRlc3Qgd2l0aCBhIEJ5dGVzIGlucHV0IGxpa2UgRmxhc2sncyByZXF1ZXN0LmRhdGEKICAgICAgICBkYXRhMSA9IGIneyJwYXNzd29yZCI6IjEyMzQ1NiJ9JwogICAgICAgIGV2YWx1YXRlZF9kYXRhID0gZXZhbHVhdGVfZGF0YShkYXRhMSkKPHxmaW1faG9sZXw+CiAgICAgICAgIyBUZXN0IHdpdGggYSBTdHJpbmcgaW5wdXQKICAgICAgICBkYXRhMiA9ICd7InBhc3N3b3JkIjoiMTIzNDU2In0nCiAgICAgICAgZXZhbHVhdGVkX2RhdGEgPSBldmFsdWF0ZV9kYXRhKGRhdGEyKQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShldmFsdWF0ZWRfZGF0YSwgZGljdCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWx1YXRlZF9kYXRhLCB7J3Bhc3N3b3JkJzogJzEyMzQ1Nid9KQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShldmFsdWF0ZWRfZGF0YVsncGFzc3dvcmQnXSwgc3RyKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbHVhdGVkX2RhdGFbJ3Bhc3N3b3JkJ10sICcxMjM0NTYnKQoKICAgIGRlZiB0ZXN0X29iZnVzY2F0ZShzZWxmKToKICAgICAgICAiIiJhcHBsaWNhdGlvbi5vYmZ1c2NhdGUoZGVjb2RlPUZhbHNlKSIiIgogICAgICAgICMgVGVzdCB3aXRoIGEgQnl0ZXMgaW5wdXQgbGlrZQogICAgICAgIGRlY29kZWRfdGV4dDEgPSBiJ1NlY3JldFRleHQxMjM0ISQmJScKICAgICAgICBldmFsdWF0ZWRfdGV4dCA9IG9iZnVzY2F0ZShkZWNvZGVkX3RleHQxKQogICAgICAgIHByaW50KCJldmFsdWF0ZWRfdGV4dCAlcyAlcyIgJSAoZXZhbHVhdGVkX3RleHQsIHR5cGUoZXZhbHVhdGVkX3RleHQpKSkKICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXZhbHVhdGVkX3RleHQsIHN0cikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWx1YXRlZF90ZXh0LCAnUm5Kd1pYSm5SM0pyWnpFeU16UWhKQ1lsJykKICAgICAgICAjIFRlc3Qgd2l0aCBhIFN0cmluZyBpbnB1dAogICAgICAgIGRlY29kZWRfdGV4dDIgPSAnU2VjcmV0VGV4dDEyMzQhJCYlJwogICAgICAgIGV2YWx1YXRlZF90ZXh0ID0gb2JmdXNjYXRlKGRlY29kZWRfdGV4dDIpCiAgICAgICAgcHJpbnQoImV2YWx1YXRlZF90ZXh0ICVzICVzIiAlIChldmFsdWF0ZWRfdGV4dCwgdHlwZShldmFsdWF0ZWRfdGV4dCkpKQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShldmFsdWF0ZWRfdGV4dCwgc3RyKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbHVhdGVkX3RleHQsICdSbkp3WlhKblIzSnJaekV5TXpRaEpDWWwnKQoKICAgIGRlZiB0ZXN0X2Rlb2JmdXNjYXRlKHNlbGYpOgogICAgICAgICIiImFwcGxpY2F0aW9uLm9iZnVzY2F0ZShkZWNvZGU9VHJ1ZSkiIiIKICAgICAgICAjIFRlc3Qgd2l0aCBhIEJ5dGVzIGlucHV0IGxpa2UKICAgICAgICBlbmNvZGVkX3RleHQxID0gYidSbkp3WlhKblIzSnJaekV5TXpRaEpDWWwnCiAgICAgICAgZXZhbHVhdGVkX3RleHQgPSBvYmZ1c2NhdGUoZW5jb2RlZF90ZXh0MSwgZGVjb2RlPVRydWUpCiAgICAgICAgcHJpbnQoImV2YWx1YXRlZF90ZXh0ICVzICVzIiAlIChldmFsdWF0ZWRfdGV4dCwgdHlwZShldmFsdWF0ZWRfdGV4dCkpKQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShldmFsdWF0ZWRfdGV4dCwgc3RyKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbHVhdGVkX3RleHQsICdTZWNyZXRUZXh0MTIzNCEkJiUnKQogICAgICAgICMgVGVzdCB3aXRoIGEgU3RyaW5nIGlucHV0CiAgICAgICAgZW5jb2RlZF90ZXh0MiA9ICdSbkp3WlhKblIzSnJaekV5TXpRaEpDWWwnCiAgICAgICAgZXZhbHVhdGVkX3RleHQgPSBvYmZ1c2NhdGUoZW5jb2RlZF90ZXh0MiwgZGVjb2RlPVRydWUpCiAgICAgICAgcHJpbnQoImV2YWx1YXRlZF90ZXh0ICVzICVzIiAlIChldmFsdWF0ZWRfdGV4dCwgdHlwZShldmFsdWF0ZWRfdGV4dCkpKQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShldmFsdWF0ZWRfdGV4dCwgc3RyKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbHVhdGVkX3RleHQsICdTZWNyZXRUZXh0MTIzNCEkJiUnKQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHVuaXR0ZXN0Lm1haW4oKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShldmFsdWF0ZWRfZGF0YSwgZGljdCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWx1YXRlZF9kYXRhLCB7J3Bhc3N3b3JkJzogJzEyMzQ1Nid9KQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShldmFsdWF0ZWRfZGF0YVsncGFzc3dvcmQnXSwgc3RyKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbHVhdGVkX2RhdGFbJ3Bhc3N3b3JkJ10sICcxMjM0NTYnKQo8fGZpbV9lbmR8Pg=="]
["c1bf8c53bd426e8801230a6e3e525830b4ed981a-3","c1bf8c53bd426e8801230a6e3e525830b4ed981a","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQsIHVuaWNvZGVfbGl0ZXJhbHMKCmltcG9ydCBvcwppbXBvcnQgc3lzCmltcG9ydCB1bml0dGVzdAppbXBvcnQgbW9jawoKc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSsnLy4uLy4uL3NvdXJjZXMvc2VydmVyLycpCmZyb20gYXBwbGljYXRpb24gaW1wb3J0IGV2YWx1YXRlX2RhdGEKZnJvbSBhcHBsaWNhdGlvbiBpbXBvcnQgb2JmdXNjYXRlCgpjbGFzcyBUZXN0U3ludGhldGljTW9uaXRvcmluZ0FwcGxpY2F0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICIiIlRlc3RTeW50aGV0aWNNb25pdG9yaW5nQXBwbGljYXRpb24gVW5pdCBUZXN0cyIiIgoKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAiIiJJbml0aWFsaXNhdGlvbiIiIgogICAgICAgIHBhc3MKCiAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIiIiQ2xlYW5pbmctdXAgcmVzb3VyY2VzIHVzZWQiIiIKICAgICAgICBwYXNzCgogICAgZGVmIHRlc3RfZXZhbHVhdGVfZGF0YShzZWxmKToKICAgICAgICAiIiJhcHBsaWNhdGlvbi5ldmFsdWF0ZV9kYXRhKCkiIiIKICAgICAgICAjIFRlc3Qgd2l0aCBhIEJ5dGVzIGlucHV0IGxpa2UgRmxhc2sncyByZXF1ZXN0LmRhdGEKICAgICAgICBkYXRhMSA9IGIneyJwYXNzd29yZCI6IjEyMzQ1NiJ9JwogICAgICAgIGV2YWx1YXRlZF9kYXRhID0gZXZhbHVhdGVfZGF0YShkYXRhMSkKICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXZhbHVhdGVkX2RhdGEsIGRpY3QpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsdWF0ZWRfZGF0YSwgeydwYXNzd29yZCc6ICcxMjM0NTYnfSkKICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXZhbHVhdGVkX2RhdGFbJ3Bhc3N3b3JkJ10sIHN0cikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWx1YXRlZF9kYXRhWydwYXNzd29yZCddLCAnMTIzNDU2JykKICAgICAgICAjIFRlc3Qgd2l0aCBhIFN0cmluZyBpbnB1dAogICAgICAgIGRhdGEyID0gJ3sicGFzc3dvcmQiOiIxMjM0NTYifScKICAgICAgICBldmFsdWF0ZWRfZGF0YSA9IGV2YWx1YXRlX2RhdGEoZGF0YTIpCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV2YWx1YXRlZF9kYXRhLCBkaWN0KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbHVhdGVkX2RhdGEsIHsncGFzc3dvcmQnOiAnMTIzNDU2J30pCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV2YWx1YXRlZF9kYXRhWydwYXNzd29yZCddLCBzdHIpCjx8ZmltX2hvbGV8PgogICAgZGVmIHRlc3Rfb2JmdXNjYXRlKHNlbGYpOgogICAgICAgICIiImFwcGxpY2F0aW9uLm9iZnVzY2F0ZShkZWNvZGU9RmFsc2UpIiIiCiAgICAgICAgIyBUZXN0IHdpdGggYSBCeXRlcyBpbnB1dCBsaWtlCiAgICAgICAgZGVjb2RlZF90ZXh0MSA9IGInU2VjcmV0VGV4dDEyMzQhJCYlJwogICAgICAgIGV2YWx1YXRlZF90ZXh0ID0gb2JmdXNjYXRlKGRlY29kZWRfdGV4dDEpCiAgICAgICAgcHJpbnQoImV2YWx1YXRlZF90ZXh0ICVzICVzIiAlIChldmFsdWF0ZWRfdGV4dCwgdHlwZShldmFsdWF0ZWRfdGV4dCkpKQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShldmFsdWF0ZWRfdGV4dCwgc3RyKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbHVhdGVkX3RleHQsICdSbkp3WlhKblIzSnJaekV5TXpRaEpDWWwnKQogICAgICAgICMgVGVzdCB3aXRoIGEgU3RyaW5nIGlucHV0CiAgICAgICAgZGVjb2RlZF90ZXh0MiA9ICdTZWNyZXRUZXh0MTIzNCEkJiUnCiAgICAgICAgZXZhbHVhdGVkX3RleHQgPSBvYmZ1c2NhdGUoZGVjb2RlZF90ZXh0MikKICAgICAgICBwcmludCgiZXZhbHVhdGVkX3RleHQgJXMgJXMiICUgKGV2YWx1YXRlZF90ZXh0LCB0eXBlKGV2YWx1YXRlZF90ZXh0KSkpCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV2YWx1YXRlZF90ZXh0LCBzdHIpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsdWF0ZWRfdGV4dCwgJ1JuSndaWEpuUjNKclp6RXlNelFoSkNZbCcpCgogICAgZGVmIHRlc3RfZGVvYmZ1c2NhdGUoc2VsZik6CiAgICAgICAgIiIiYXBwbGljYXRpb24ub2JmdXNjYXRlKGRlY29kZT1UcnVlKSIiIgogICAgICAgICMgVGVzdCB3aXRoIGEgQnl0ZXMgaW5wdXQgbGlrZQogICAgICAgIGVuY29kZWRfdGV4dDEgPSBiJ1JuSndaWEpuUjNKclp6RXlNelFoSkNZbCcKICAgICAgICBldmFsdWF0ZWRfdGV4dCA9IG9iZnVzY2F0ZShlbmNvZGVkX3RleHQxLCBkZWNvZGU9VHJ1ZSkKICAgICAgICBwcmludCgiZXZhbHVhdGVkX3RleHQgJXMgJXMiICUgKGV2YWx1YXRlZF90ZXh0LCB0eXBlKGV2YWx1YXRlZF90ZXh0KSkpCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV2YWx1YXRlZF90ZXh0LCBzdHIpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsdWF0ZWRfdGV4dCwgJ1NlY3JldFRleHQxMjM0ISQmJScpCiAgICAgICAgIyBUZXN0IHdpdGggYSBTdHJpbmcgaW5wdXQKICAgICAgICBlbmNvZGVkX3RleHQyID0gJ1JuSndaWEpuUjNKclp6RXlNelFoSkNZbCcKICAgICAgICBldmFsdWF0ZWRfdGV4dCA9IG9iZnVzY2F0ZShlbmNvZGVkX3RleHQyLCBkZWNvZGU9VHJ1ZSkKICAgICAgICBwcmludCgiZXZhbHVhdGVkX3RleHQgJXMgJXMiICUgKGV2YWx1YXRlZF90ZXh0LCB0eXBlKGV2YWx1YXRlZF90ZXh0KSkpCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV2YWx1YXRlZF90ZXh0LCBzdHIpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsdWF0ZWRfdGV4dCwgJ1NlY3JldFRleHQxMjM0ISQmJScpCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdW5pdHRlc3QubWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsdWF0ZWRfZGF0YVsncGFzc3dvcmQnXSwgJzEyMzQ1NicpCgo8fGZpbV9lbmR8Pg=="]
["c1bf8c53bd426e8801230a6e3e525830b4ed981a-4","c1bf8c53bd426e8801230a6e3e525830b4ed981a","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQsIHVuaWNvZGVfbGl0ZXJhbHMKCmltcG9ydCBvcwppbXBvcnQgc3lzCmltcG9ydCB1bml0dGVzdAppbXBvcnQgbW9jawoKPHxmaW1faG9sZXw+CmNsYXNzIFRlc3RTeW50aGV0aWNNb25pdG9yaW5nQXBwbGljYXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgogICAgIiIiVGVzdFN5bnRoZXRpY01vbml0b3JpbmdBcHBsaWNhdGlvbiBVbml0IFRlc3RzIiIiCgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICIiIkluaXRpYWxpc2F0aW9uIiIiCiAgICAgICAgcGFzcwoKICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAiIiJDbGVhbmluZy11cCByZXNvdXJjZXMgdXNlZCIiIgogICAgICAgIHBhc3MKCiAgICBkZWYgdGVzdF9ldmFsdWF0ZV9kYXRhKHNlbGYpOgogICAgICAgICIiImFwcGxpY2F0aW9uLmV2YWx1YXRlX2RhdGEoKSIiIgogICAgICAgICMgVGVzdCB3aXRoIGEgQnl0ZXMgaW5wdXQgbGlrZSBGbGFzaydzIHJlcXVlc3QuZGF0YQogICAgICAgIGRhdGExID0gYid7InBhc3N3b3JkIjoiMTIzNDU2In0nCiAgICAgICAgZXZhbHVhdGVkX2RhdGEgPSBldmFsdWF0ZV9kYXRhKGRhdGExKQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShldmFsdWF0ZWRfZGF0YSwgZGljdCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWx1YXRlZF9kYXRhLCB7J3Bhc3N3b3JkJzogJzEyMzQ1Nid9KQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShldmFsdWF0ZWRfZGF0YVsncGFzc3dvcmQnXSwgc3RyKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbHVhdGVkX2RhdGFbJ3Bhc3N3b3JkJ10sICcxMjM0NTYnKQogICAgICAgICMgVGVzdCB3aXRoIGEgU3RyaW5nIGlucHV0CiAgICAgICAgZGF0YTIgPSAneyJwYXNzd29yZCI6IjEyMzQ1NiJ9JwogICAgICAgIGV2YWx1YXRlZF9kYXRhID0gZXZhbHVhdGVfZGF0YShkYXRhMikKICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXZhbHVhdGVkX2RhdGEsIGRpY3QpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsdWF0ZWRfZGF0YSwgeydwYXNzd29yZCc6ICcxMjM0NTYnfSkKICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXZhbHVhdGVkX2RhdGFbJ3Bhc3N3b3JkJ10sIHN0cikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWx1YXRlZF9kYXRhWydwYXNzd29yZCddLCAnMTIzNDU2JykKCiAgICBkZWYgdGVzdF9vYmZ1c2NhdGUoc2VsZik6CiAgICAgICAgIiIiYXBwbGljYXRpb24ub2JmdXNjYXRlKGRlY29kZT1GYWxzZSkiIiIKICAgICAgICAjIFRlc3Qgd2l0aCBhIEJ5dGVzIGlucHV0IGxpa2UKICAgICAgICBkZWNvZGVkX3RleHQxID0gYidTZWNyZXRUZXh0MTIzNCEkJiUnCiAgICAgICAgZXZhbHVhdGVkX3RleHQgPSBvYmZ1c2NhdGUoZGVjb2RlZF90ZXh0MSkKICAgICAgICBwcmludCgiZXZhbHVhdGVkX3RleHQgJXMgJXMiICUgKGV2YWx1YXRlZF90ZXh0LCB0eXBlKGV2YWx1YXRlZF90ZXh0KSkpCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV2YWx1YXRlZF90ZXh0LCBzdHIpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsdWF0ZWRfdGV4dCwgJ1JuSndaWEpuUjNKclp6RXlNelFoSkNZbCcpCiAgICAgICAgIyBUZXN0IHdpdGggYSBTdHJpbmcgaW5wdXQKICAgICAgICBkZWNvZGVkX3RleHQyID0gJ1NlY3JldFRleHQxMjM0ISQmJScKICAgICAgICBldmFsdWF0ZWRfdGV4dCA9IG9iZnVzY2F0ZShkZWNvZGVkX3RleHQyKQogICAgICAgIHByaW50KCJldmFsdWF0ZWRfdGV4dCAlcyAlcyIgJSAoZXZhbHVhdGVkX3RleHQsIHR5cGUoZXZhbHVhdGVkX3RleHQpKSkKICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXZhbHVhdGVkX3RleHQsIHN0cikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWx1YXRlZF90ZXh0LCAnUm5Kd1pYSm5SM0pyWnpFeU16UWhKQ1lsJykKCiAgICBkZWYgdGVzdF9kZW9iZnVzY2F0ZShzZWxmKToKICAgICAgICAiIiJhcHBsaWNhdGlvbi5vYmZ1c2NhdGUoZGVjb2RlPVRydWUpIiIiCiAgICAgICAgIyBUZXN0IHdpdGggYSBCeXRlcyBpbnB1dCBsaWtlCiAgICAgICAgZW5jb2RlZF90ZXh0MSA9IGInUm5Kd1pYSm5SM0pyWnpFeU16UWhKQ1lsJwogICAgICAgIGV2YWx1YXRlZF90ZXh0ID0gb2JmdXNjYXRlKGVuY29kZWRfdGV4dDEsIGRlY29kZT1UcnVlKQogICAgICAgIHByaW50KCJldmFsdWF0ZWRfdGV4dCAlcyAlcyIgJSAoZXZhbHVhdGVkX3RleHQsIHR5cGUoZXZhbHVhdGVkX3RleHQpKSkKICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXZhbHVhdGVkX3RleHQsIHN0cikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWx1YXRlZF90ZXh0LCAnU2VjcmV0VGV4dDEyMzQhJCYlJykKICAgICAgICAjIFRlc3Qgd2l0aCBhIFN0cmluZyBpbnB1dAogICAgICAgIGVuY29kZWRfdGV4dDIgPSAnUm5Kd1pYSm5SM0pyWnpFeU16UWhKQ1lsJwogICAgICAgIGV2YWx1YXRlZF90ZXh0ID0gb2JmdXNjYXRlKGVuY29kZWRfdGV4dDIsIGRlY29kZT1UcnVlKQogICAgICAgIHByaW50KCJldmFsdWF0ZWRfdGV4dCAlcyAlcyIgJSAoZXZhbHVhdGVkX3RleHQsIHR5cGUoZXZhbHVhdGVkX3RleHQpKSkKICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXZhbHVhdGVkX3RleHQsIHN0cikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWx1YXRlZF90ZXh0LCAnU2VjcmV0VGV4dDEyMzQhJCYlJykKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICB1bml0dGVzdC5tYWluKCkKPHxmaW1fc3VmZml4fD4Kc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSsnLy4uLy4uL3NvdXJjZXMvc2VydmVyLycpCmZyb20gYXBwbGljYXRpb24gaW1wb3J0IGV2YWx1YXRlX2RhdGEKZnJvbSBhcHBsaWNhdGlvbiBpbXBvcnQgb2JmdXNjYXRlCgo8fGZpbV9lbmR8Pg=="]
["c1bf8c53bd426e8801230a6e3e525830b4ed981a-5","c1bf8c53bd426e8801230a6e3e525830b4ed981a","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQsIHVuaWNvZGVfbGl0ZXJhbHMKCmltcG9ydCBvcwppbXBvcnQgc3lzCmltcG9ydCB1bml0dGVzdAppbXBvcnQgbW9jawoKc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSsnLy4uLy4uL3NvdXJjZXMvc2VydmVyLycpCmZyb20gYXBwbGljYXRpb24gaW1wb3J0IGV2YWx1YXRlX2RhdGEKZnJvbSBhcHBsaWNhdGlvbiBpbXBvcnQgb2JmdXNjYXRlCgpjbGFzcyBUZXN0U3ludGhldGljTW9uaXRvcmluZ0FwcGxpY2F0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICIiIlRlc3RTeW50aGV0aWNNb25pdG9yaW5nQXBwbGljYXRpb24gVW5pdCBUZXN0cyIiIgoKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAiIiJJbml0aWFsaXNhdGlvbiIiIgogICAgICAgIHBhc3MKCiAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIiIiQ2xlYW5pbmctdXAgcmVzb3VyY2VzIHVzZWQiIiIKICAgICAgICBwYXNzCgogICAgZGVmIHRlc3RfZXZhbHVhdGVfZGF0YShzZWxmKToKICAgICAgICAiIiJhcHBsaWNhdGlvbi5ldmFsdWF0ZV9kYXRhKCkiIiIKICAgICAgICAjIFRlc3Qgd2l0aCBhIEJ5dGVzIGlucHV0IGxpa2UgRmxhc2sncyByZXF1ZXN0LmRhdGEKICAgICAgICBkYXRhMSA9IGIneyJwYXNzd29yZCI6IjEyMzQ1NiJ9JwogICAgICAgIGV2YWx1YXRlZF9kYXRhID0gZXZhbHVhdGVfZGF0YShkYXRhMSkKICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXZhbHVhdGVkX2RhdGEsIGRpY3QpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsdWF0ZWRfZGF0YSwgeydwYXNzd29yZCc6ICcxMjM0NTYnfSkKICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXZhbHVhdGVkX2RhdGFbJ3Bhc3N3b3JkJ10sIHN0cikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWx1YXRlZF9kYXRhWydwYXNzd29yZCddLCAnMTIzNDU2JykKICAgICAgICAjIFRlc3Qgd2l0aCBhIFN0cmluZyBpbnB1dAogICAgICAgIGRhdGEyID0gJ3sicGFzc3dvcmQiOiIxMjM0NTYifScKPHxmaW1faG9sZXw+CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsdWF0ZWRfZGF0YVsncGFzc3dvcmQnXSwgJzEyMzQ1NicpCgogICAgZGVmIHRlc3Rfb2JmdXNjYXRlKHNlbGYpOgogICAgICAgICIiImFwcGxpY2F0aW9uLm9iZnVzY2F0ZShkZWNvZGU9RmFsc2UpIiIiCiAgICAgICAgIyBUZXN0IHdpdGggYSBCeXRlcyBpbnB1dCBsaWtlCiAgICAgICAgZGVjb2RlZF90ZXh0MSA9IGInU2VjcmV0VGV4dDEyMzQhJCYlJwogICAgICAgIGV2YWx1YXRlZF90ZXh0ID0gb2JmdXNjYXRlKGRlY29kZWRfdGV4dDEpCiAgICAgICAgcHJpbnQoImV2YWx1YXRlZF90ZXh0ICVzICVzIiAlIChldmFsdWF0ZWRfdGV4dCwgdHlwZShldmFsdWF0ZWRfdGV4dCkpKQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShldmFsdWF0ZWRfdGV4dCwgc3RyKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbHVhdGVkX3RleHQsICdSbkp3WlhKblIzSnJaekV5TXpRaEpDWWwnKQogICAgICAgICMgVGVzdCB3aXRoIGEgU3RyaW5nIGlucHV0CiAgICAgICAgZGVjb2RlZF90ZXh0MiA9ICdTZWNyZXRUZXh0MTIzNCEkJiUnCiAgICAgICAgZXZhbHVhdGVkX3RleHQgPSBvYmZ1c2NhdGUoZGVjb2RlZF90ZXh0MikKICAgICAgICBwcmludCgiZXZhbHVhdGVkX3RleHQgJXMgJXMiICUgKGV2YWx1YXRlZF90ZXh0LCB0eXBlKGV2YWx1YXRlZF90ZXh0KSkpCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV2YWx1YXRlZF90ZXh0LCBzdHIpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsdWF0ZWRfdGV4dCwgJ1JuSndaWEpuUjNKclp6RXlNelFoSkNZbCcpCgogICAgZGVmIHRlc3RfZGVvYmZ1c2NhdGUoc2VsZik6CiAgICAgICAgIiIiYXBwbGljYXRpb24ub2JmdXNjYXRlKGRlY29kZT1UcnVlKSIiIgogICAgICAgICMgVGVzdCB3aXRoIGEgQnl0ZXMgaW5wdXQgbGlrZQogICAgICAgIGVuY29kZWRfdGV4dDEgPSBiJ1JuSndaWEpuUjNKclp6RXlNelFoSkNZbCcKICAgICAgICBldmFsdWF0ZWRfdGV4dCA9IG9iZnVzY2F0ZShlbmNvZGVkX3RleHQxLCBkZWNvZGU9VHJ1ZSkKICAgICAgICBwcmludCgiZXZhbHVhdGVkX3RleHQgJXMgJXMiICUgKGV2YWx1YXRlZF90ZXh0LCB0eXBlKGV2YWx1YXRlZF90ZXh0KSkpCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV2YWx1YXRlZF90ZXh0LCBzdHIpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsdWF0ZWRfdGV4dCwgJ1NlY3JldFRleHQxMjM0ISQmJScpCiAgICAgICAgIyBUZXN0IHdpdGggYSBTdHJpbmcgaW5wdXQKICAgICAgICBlbmNvZGVkX3RleHQyID0gJ1JuSndaWEpuUjNKclp6RXlNelFoSkNZbCcKICAgICAgICBldmFsdWF0ZWRfdGV4dCA9IG9iZnVzY2F0ZShlbmNvZGVkX3RleHQyLCBkZWNvZGU9VHJ1ZSkKICAgICAgICBwcmludCgiZXZhbHVhdGVkX3RleHQgJXMgJXMiICUgKGV2YWx1YXRlZF90ZXh0LCB0eXBlKGV2YWx1YXRlZF90ZXh0KSkpCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV2YWx1YXRlZF90ZXh0LCBzdHIpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsdWF0ZWRfdGV4dCwgJ1NlY3JldFRleHQxMjM0ISQmJScpCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdW5pdHRlc3QubWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZXZhbHVhdGVkX2RhdGEgPSBldmFsdWF0ZV9kYXRhKGRhdGEyKQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShldmFsdWF0ZWRfZGF0YSwgZGljdCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWx1YXRlZF9kYXRhLCB7J3Bhc3N3b3JkJzogJzEyMzQ1Nid9KQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShldmFsdWF0ZWRfZGF0YVsncGFzc3dvcmQnXSwgc3RyKQo8fGZpbV9lbmR8Pg=="]
["0099baff6b6da78391cc500f85522c7e5f67819a-1","0099baff6b6da78391cc500f85522c7e5f67819a","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdAoKCjx8ZmltX2VuZHw+"]
["01fa3a4b6261ea6892526375a77f51cd850ff6df-1","01fa3a4b6261ea6892526375a77f51cd850ff6df","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscywgbWlncmF0aW9ucwoKCmNsYXNzIE1pZ3JhdGlvbihtaWdyYXRpb25zLk1pZ3JhdGlvbik6CgogICAgZGVwZW5kZW5jaWVzID0gWwogICAgICAgICgnY29tbXVuaWNhdGlvbicsICcwMDAzX2F1dG9fMjAxNTEyMTdfMTI0OScpLAogICAgXQoKICAgIG9wZXJhdGlvbnMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5SdW5TUUwoJycnCiAgICAgICAgICAgIGFsdGVyIHRhYmxlIGNvbW11bmljYXRpb25fdGhyZWFkIGFsdGVyIGNvbHVtbiB0aW1lc3RhbXAgZHJvcCBkZWZhdWx0OwogICAgICAgICAgICBhbHRlciB0YWJsZSBjb21tdW5pY2F0aW9uX21lc3NhZ2UgYWx0ZXIgY29sdW1uIHRpbWVzdGFtcCBkcm9wIGRlZmF1bHQ7CiAgICAgICAgJycnKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBdCjx8ZmltX2VuZHw+"]
["01fa3a4b6261ea6892526375a77f51cd850ff6df-2","01fa3a4b6261ea6892526375a77f51cd850ff6df","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscywgbWlncmF0aW9ucwoKCmNsYXNzIE1pZ3JhdGlvbihtaWdyYXRpb25zLk1pZ3JhdGlvbik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgKCdjb21tdW5pY2F0aW9uJywgJzAwMDNfYXV0b18yMDE1MTIxN18xMjQ5JyksCiAgICBdCjx8ZmltX2VuZHw+"]
["823af4384f933605b6d8a7ebe4f8869734ba8fb2-1","823af4384f933605b6d8a7ebe4f8869734ba8fb2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IHVybGxpYgppbXBvcnQgdXJsbGliMgppbXBvcnQgZ2RhdGEuZ2F1dGgKaW1wb3J0IGdkYXRhLmNsaWVudAppbXBvcnQgZ2RhdGEuZG9jcy5kYXRhCmltcG9ydCBnZGF0YS5kb2NzLmNsaWVudAoKZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKZnJvbSBkamFuZ28uY29yZS51cmxyZXNvbHZlcnMgaW1wb3J0IHJldmVyc2UKZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlc3BvbnNlCmZyb20gZGphbmdvLmh0dHAgaW1wb3J0IEh0dHBSZXNwb25zZVJlZGlyZWN0CmZyb20gZGphbmdvLmNvbnRyaWIuYXV0aC5kZWNvcmF0b3JzIGltcG9ydCBsb2dpbl9yZXF1aXJlZAoKCmZyb20gZ2RhdGEuc3ByZWFkc2hlZXRzIGltcG9ydCBjbGllbnQKCmZyb20gbWFpbi5tb2RlbHMgaW1wb3J0IFRva2VuU3RvcmFnZU1vZGVsCmZyb20gbWFpbi52aWV3cyBpbXBvcnQgaG9tZQpmcm9tIHV0aWxzLmdvb2dsZSBpbXBvcnQgb2F1dGgyX3Rva2VuLCBnZXRfcmVmcmVzaGVkX3Rva2VuLCByZWRpcmVjdF91cmkKCgpkZWYgZ29vZ2xlX29hdXRoMl9yZXF1ZXN0KHJlcXVlc3QpOgogICAgdG9rZW4gPSBOb25lCiAgICBpZiByZXF1ZXN0LnVzZXIuaXNfYXV0aGVudGljYXRlZCgpOgogICAgICAgIHRyeToKICAgICAgICAgICAgdHMgPSBUb2tlblN0b3JhZ2VNb2RlbC5vYmplY3RzLmdldChpZD1yZXF1ZXN0LnVzZXIpCiAgICAgICAgZXhjZXB0IFRva2VuU3RvcmFnZU1vZGVsLkRvZXNOb3RFeGlzdDoKICAgICAgICAgICAgcGFzcwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRva2VuID0gdHMudG9rZW4KICAgIGVsaWYgcmVxdWVzdC5zZXNzaW9uLmdldCgnYWNjZXNzX3Rva2VuJyk6CiAgICAgICAgdG9rZW4gPSByZXF1ZXN0LnNlc3Npb24uZ2V0KCdhY2Nlc3NfdG9rZW4nKQogICAgaWYgdG9rZW4gaXMgbm90IE5vbmU6CiAgICAgICAgc3RvcmVkX3Rva2VuID0gZ2RhdGEuZ2F1dGgudG9rZW5fZnJvbV9ibG9iKHRva2VuKQogICAgICAgIGlmIHN0b3JlZF90b2tlbi5yZWZyZXNoX3Rva2VuIGlzIG5vdCBOb25lIFwKICAgICAgICAgICAgICAgIGFuZCBzdG9yZWRfdG9rZW4uYWNjZXNzX3Rva2VuIGlzIG5vdCBOb25lOgogICAgICAgICAgICBvYXV0aDJfdG9rZW4ucmVmcmVzaF90b2tlbiA9IHN0b3JlZF90b2tlbi5yZWZyZXNoX3Rva2VuCiAgICAgICAgICAgIHdvcmtpbmdfdG9rZW4gPSByZWZyZXNoX2FjY2Vzc190b2tlbihvYXV0aDJfdG9rZW4sIHJlcXVlc3QudXNlcikKICAgICAgICAgICAgZG9jc19jbGllbnQgPSBjbGllbnQuU3ByZWFkc2hlZXRzQ2xpZW50KAogICAgICAgICAgICAgICAgc291cmNlPW9hdXRoMl90b2tlbi51c2VyX2FnZW50KQogICAgICAgICAgICBkb2NzX2NsaWVudCA9IHdvcmtpbmdfdG9rZW4uYXV0aG9yaXplKGRvY3NfY2xpZW50KQogICAgICAgICAgICBkb2NzX2ZlZWQgPSBkb2NzX2NsaWVudC5HZXRTcHJlYWRzaGVldHMoKQogICAgICAgICAgICBfbCA9ICc8dWw+JwogICAgICAgICAgICBmb3IgZW50cnkgaW4gZG9jc19mZWVkLmVudHJ5OgogICAgICAgICAgICAgICAgX2wgKz0gJzxsaT4lczwvbGk+JyAlIGVudHJ5LnRpdGxlLnRleHQKICAgICAgICAgICAgICAgIHByaW50IGVudHJ5LnRpdGxlLnRleHQKICAgICAgICAgICAgX2wgKz0gJzwvdWw+JwogICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKF9sKQogICAgcmV0dXJuIEh0dHBSZXNwb25zZVJlZGlyZWN0KHJlZGlyZWN0X3VyaSkKCgpkZWYgZ29vZ2xlX2F1dGhfcmV0dXJuKHJlcXVlc3QpOgogICAgaWYgJ2NvZGUnIG5vdCBpbiByZXF1ZXN0LlJFUVVFU1Q6CiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZSh1IkludmFsaWQgUmVxdWVzdCIpCiAgICBpZiByZXF1ZXN0LnVzZXIuaXNfYXV0aGVudGljYXRlZCgpOgogICAgICAgIHRyeToKICAgICAgICAgICAgdHMgPSBUb2tlblN0b3JhZ2VNb2RlbC5vYmplY3RzLmdldChpZD1yZXF1ZXN0LnVzZXIpCiAgICAgICAgZXhjZXB0IFRva2VuU3RvcmFnZU1vZGVsLkRvZXNOb3RFeGlzdDoKICAgICAgICAgICAgdHMgPSBUb2tlblN0b3JhZ2VNb2RlbChpZD1yZXF1ZXN0LnVzZXIpCjx8ZmltX2hvbGV8PgogICAgZWxzZToKICAgICAgICBhY2Nlc3NfdG9rZW4gPSBvYXV0aDJfdG9rZW4uZ2V0X2FjY2Vzc190b2tlbihyZXF1ZXN0LlJFUVVFU1QpCiAgICAgICAgcmVxdWVzdC5zZXNzaW9uWyJhY2Nlc3NfdG9rZW4iXSA9XAogICAgICAgICAgICBnZGF0YS5nYXV0aC50b2tlbl90b19ibG9iKHRva2VuPWFjY2Vzc190b2tlbikKICAgIGlmIHJlcXVlc3Quc2Vzc2lvbi5nZXQoJ2dvb2dsZV9yZWRpcmVjdF91cmwnKToKICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlUmVkaXJlY3QocmVxdWVzdC5zZXNzaW9uLmdldCgnZ29vZ2xlX3JlZGlyZWN0X3VybCcpKQogICAgcmV0dXJuIEh0dHBSZXNwb25zZVJlZGlyZWN0KHJldmVyc2UoaG9tZSkpCgoKZGVmIHJlZnJlc2hfYWNjZXNzX3Rva2VuKHRva2VuLCB1c2VyKToKICAgIHRva2VuID0gZ2V0X3JlZnJlc2hlZF90b2tlbih0b2tlbikKICAgIGlmIG5vdCB1c2VyLmlzX2F1dGhlbnRpY2F0ZWQoKToKICAgICAgICByZXR1cm4gdG9rZW4KICAgIHRyeToKICAgICAgICB0cyA9IFRva2VuU3RvcmFnZU1vZGVsLm9iamVjdHMuZ2V0KGlkPXVzZXIpCiAgICBleGNlcHQgVG9rZW5TdG9yYWdlTW9kZWwuRG9lc05vdEV4aXN0OgogICAgICAgIHRzID0gVG9rZW5TdG9yYWdlTW9kZWwoaWQ9dXNlcikKICAgIHRzLnRva2VuID0gZ2RhdGEuZ2F1dGgudG9rZW5fdG9fYmxvYih0b2tlbikKICAgIHRzLnNhdmUoKQogICAgcmV0dXJuIHRva2VuCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgYWNjZXNzX3Rva2VuID0gb2F1dGgyX3Rva2VuLmdldF9hY2Nlc3NfdG9rZW4ocmVxdWVzdC5SRVFVRVNUKQogICAgICAgIHRzLnRva2VuID0gZ2RhdGEuZ2F1dGgudG9rZW5fdG9fYmxvYih0b2tlbj1hY2Nlc3NfdG9rZW4pCiAgICAgICAgdHMuc2F2ZSgpCjx8ZmltX2VuZHw+"]
["823af4384f933605b6d8a7ebe4f8869734ba8fb2-2","823af4384f933605b6d8a7ebe4f8869734ba8fb2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IHVybGxpYgppbXBvcnQgdXJsbGliMgppbXBvcnQgZ2RhdGEuZ2F1dGgKaW1wb3J0IGdkYXRhLmNsaWVudAppbXBvcnQgZ2RhdGEuZG9jcy5kYXRhCmltcG9ydCBnZGF0YS5kb2NzLmNsaWVudAoKZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKZnJvbSBkamFuZ28uY29yZS51cmxyZXNvbHZlcnMgaW1wb3J0IHJldmVyc2UKZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlc3BvbnNlCmZyb20gZGphbmdvLmh0dHAgaW1wb3J0IEh0dHBSZXNwb25zZVJlZGlyZWN0CmZyb20gZGphbmdvLmNvbnRyaWIuYXV0aC5kZWNvcmF0b3JzIGltcG9ydCBsb2dpbl9yZXF1aXJlZAoKCmZyb20gZ2RhdGEuc3ByZWFkc2hlZXRzIGltcG9ydCBjbGllbnQKCmZyb20gbWFpbi5tb2RlbHMgaW1wb3J0IFRva2VuU3RvcmFnZU1vZGVsCmZyb20gbWFpbi52aWV3cyBpbXBvcnQgaG9tZQpmcm9tIHV0aWxzLmdvb2dsZSBpbXBvcnQgb2F1dGgyX3Rva2VuLCBnZXRfcmVmcmVzaGVkX3Rva2VuLCByZWRpcmVjdF91cmkKCgpkZWYgZ29vZ2xlX29hdXRoMl9yZXF1ZXN0KHJlcXVlc3QpOgogICAgdG9rZW4gPSBOb25lCiAgICBpZiByZXF1ZXN0LnVzZXIuaXNfYXV0aGVudGljYXRlZCgpOgogICAgICAgIHRyeToKICAgICAgICAgICAgdHMgPSBUb2tlblN0b3JhZ2VNb2RlbC5vYmplY3RzLmdldChpZD1yZXF1ZXN0LnVzZXIpCiAgICAgICAgZXhjZXB0IFRva2VuU3RvcmFnZU1vZGVsLkRvZXNOb3RFeGlzdDoKICAgICAgICAgICAgcGFzcwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRva2VuID0gdHMudG9rZW4KICAgIGVsaWYgcmVxdWVzdC5zZXNzaW9uLmdldCgnYWNjZXNzX3Rva2VuJyk6CiAgICAgICAgdG9rZW4gPSByZXF1ZXN0LnNlc3Npb24uZ2V0KCdhY2Nlc3NfdG9rZW4nKQogICAgaWYgdG9rZW4gaXMgbm90IE5vbmU6CiAgICAgICAgc3RvcmVkX3Rva2VuID0gZ2RhdGEuZ2F1dGgudG9rZW5fZnJvbV9ibG9iKHRva2VuKQogICAgICAgIGlmIHN0b3JlZF90b2tlbi5yZWZyZXNoX3Rva2VuIGlzIG5vdCBOb25lIFwKICAgICAgICAgICAgICAgIGFuZCBzdG9yZWRfdG9rZW4uYWNjZXNzX3Rva2VuIGlzIG5vdCBOb25lOgogICAgICAgICAgICBvYXV0aDJfdG9rZW4ucmVmcmVzaF90b2tlbiA9IHN0b3JlZF90b2tlbi5yZWZyZXNoX3Rva2VuCiAgICAgICAgICAgIHdvcmtpbmdfdG9rZW4gPSByZWZyZXNoX2FjY2Vzc190b2tlbihvYXV0aDJfdG9rZW4sIHJlcXVlc3QudXNlcikKICAgICAgICAgICAgZG9jc19jbGllbnQgPSBjbGllbnQuU3ByZWFkc2hlZXRzQ2xpZW50KAogICAgICAgICAgICAgICAgc291cmNlPW9hdXRoMl90b2tlbi51c2VyX2FnZW50KQogICAgICAgICAgICBkb2NzX2NsaWVudCA9IHdvcmtpbmdfdG9rZW4uYXV0aG9yaXplKGRvY3NfY2xpZW50KQogICAgICAgICAgICBkb2NzX2ZlZWQgPSBkb2NzX2NsaWVudC5HZXRTcHJlYWRzaGVldHMoKQogICAgICAgICAgICBfbCA9ICc8dWw+JwogICAgICAgICAgICBmb3IgZW50cnkgaW4gZG9jc19mZWVkLmVudHJ5OgogICAgICAgICAgICAgICAgX2wgKz0gJzxsaT4lczwvbGk+JyAlIGVudHJ5LnRpdGxlLnRleHQKICAgICAgICAgICAgICAgIHByaW50IGVudHJ5LnRpdGxlLnRleHQKICAgICAgICAgICAgX2wgKz0gJzwvdWw+JwogICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKF9sKQogICAgcmV0dXJuIEh0dHBSZXNwb25zZVJlZGlyZWN0KHJlZGlyZWN0X3VyaSkKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRlZiBnb29nbGVfYXV0aF9yZXR1cm4ocmVxdWVzdCk6CiAgICBpZiAnY29kZScgbm90IGluIHJlcXVlc3QuUkVRVUVTVDoKICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKHUiSW52YWxpZCBSZXF1ZXN0IikKICAgIGlmIHJlcXVlc3QudXNlci5pc19hdXRoZW50aWNhdGVkKCk6Cjx8ZmltX2VuZHw+"]
["44f004d000faa9337f36da21a890ef3261a5413c-1","44f004d000faa9337f36da21a890ef3261a5413c","PHxmaW1fcHJlZml4fD4KIiIiQ29udmVydCB0ZXh0Y2F0IGFubm90YXRpb24gZnJvbSBKU09OTCB0byBzcGFDeSB2MyAuc3BhY3kgZm9ybWF0LiIiIgppbXBvcnQgc3JzbHkKaW1wb3J0IHR5cGVyCmltcG9ydCB3YXJuaW5ncwpmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKCmltcG9ydCBzcGFjeQpmcm9tIHNwYWN5LnRva2VucyBpbXBvcnQgRG9jQmluCgoKZGVmIGNvbnZlcnQobGFuZzogc3RyLCBpbnB1dF9wYXRoOiBQYXRoLCBvdXRwdXRfcGF0aDogUGF0aCk6CiAgICBubHAgPSBzcGFjeS5ibGFuayhsYW5nKQo8fGZpbV9ob2xlfD4KICAgICAgICBkYi5hZGQoZG9jKQogICAgZGIudG9fZGlzayhvdXRwdXRfcGF0aCkKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgdHlwZXIucnVuKGNvbnZlcnQpCjx8ZmltX3N1ZmZpeHw+CiAgICBkYiA9IERvY0JpbigpCiAgICBmb3IgbGluZSBpbiBzcnNseS5yZWFkX2pzb25sKGlucHV0X3BhdGgpOgogICAgICAgIGRvYyA9IG5scC5tYWtlX2RvYyhsaW5lWyJ0ZXh0Il0pCiAgICAgICAgZG9jLmNhdHMgPSBsaW5lWyJjYXRzIl0KPHxmaW1fZW5kfD4="]
["e71fd79a9723fbd46b6e3aaa1249677fea411ec2-1","e71fd79a9723fbd46b6e3aaa1249677fea411ec2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgoKYnVzZXMgPSBucC5hcnJheSgKICAgIFsKICAgICAgICBbOTAsIDQyNiwgMjcsIDExMl0sCiAgICAgICAgWzkwLCA0MjUsIDI3LCAxMTJdLAogICAgICAgIFs4NywgNDAwLCAyMywgOTZdLAogICAgICAgIFs4NiwgNDQ4LCAyNiwgMTIwXSwKICAgICAgICBbODMsIDQwMiwgMjYsIDEyOF0sCiAgICAgICAgWzgyLCA0MjgsIDMzLCAxMjFdLAogICAgICAgIFs4MCwgNDQ1LCAyNiwgMTIyXSwKICAgICAgICBbNzEsIDQ4MCwgMjMsIDExOV0sCiAgICAgICAgWzc1LCA0NDksIDI2LCAxMjBdLAo8fGZpbV9ob2xlfD4KICAgICAgICBbODYsIDQyNSwgMzUsIDEyNl0KICAgIF0KKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIFs3NCwgNDMwLCAyNSwgMTE1XSwKICAgICAgICBbNzIsIDQ3OSwgMzUsIDE0NV0sCiAgICAgICAgWzY4LCA0NDAsIDI2LCAxMjZdLAogICAgICAgIFs4MiwgNDI4LCAyNSwgMTIwXSwKPHxmaW1fZW5kfD4="]
["e71fd79a9723fbd46b6e3aaa1249677fea411ec2-2","e71fd79a9723fbd46b6e3aaa1249677fea411ec2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgoKYnVzZXMgPSBucC5hcnJheSgKICAgIFsKICAgICAgICBbOTAsIDQyNiwgMjcsIDExMl0sCiAgICAgICAgWzkwLCA0MjUsIDI3LCAxMTJdLAogICAgICAgIFs4NywgNDAwLCAyMywgOTZdLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgWzg2LCA0NDgsIDI2LCAxMjBdLAogICAgICAgIFs4MywgNDAyLCAyNiwgMTI4XSwKICAgICAgICBbODIsIDQyOCwgMzMsIDEyMV0sCiAgICAgICAgWzgwLCA0NDUsIDI2LCAxMjJdLAo8fGZpbV9lbmR8Pg=="]
["e71fd79a9723fbd46b6e3aaa1249677fea411ec2-3","e71fd79a9723fbd46b6e3aaa1249677fea411ec2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgoKYnVzZXMgPSBucC5hcnJheSgKICAgIFsKICAgICAgICBbOTAsIDQyNiwgMjcsIDExMl0sCiAgICAgICAgWzkwLCA0MjUsIDI3LCAxMTJdLAogICAgICAgIFs4NywgNDAwLCAyMywgOTZdLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgWzg2LCA0NDgsIDI2LCAxMjBdLAogICAgICAgIFs4MywgNDAyLCAyNiwgMTI4XSwKICAgICAgICBbODIsIDQyOCwgMzMsIDEyMV0sCiAgICAgICAgWzgwLCA0NDUsIDI2LCAxMjJdLAo8fGZpbV9lbmR8Pg=="]
["e71fd79a9723fbd46b6e3aaa1249677fea411ec2-4","e71fd79a9723fbd46b6e3aaa1249677fea411ec2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgoKYnVzZXMgPSBucC5hcnJheSgKICAgIFsKICAgICAgICBbOTAsIDQyNiwgMjcsIDExMl0sCjx8ZmltX2hvbGV8PgogICAgICAgIFs4MiwgNDI4LCAzMywgMTIxXSwKICAgICAgICBbODAsIDQ0NSwgMjYsIDEyMl0sCiAgICAgICAgWzcxLCA0ODAsIDIzLCAxMTldLAogICAgICAgIFs3NSwgNDQ5LCAyNiwgMTIwXSwKICAgICAgICBbNzQsIDQzMCwgMjUsIDExNV0sCiAgICAgICAgWzcyLCA0NzksIDM1LCAxNDVdLAogICAgICAgIFs2OCwgNDQwLCAyNiwgMTI2XSwKICAgICAgICBbODIsIDQyOCwgMjUsIDEyMF0sCiAgICAgICAgWzg2LCA0MjUsIDM1LCAxMjZdCiAgICBdCikKPHxmaW1fc3VmZml4fD4KICAgICAgICBbOTAsIDQyNSwgMjcsIDExMl0sCiAgICAgICAgWzg3LCA0MDAsIDIzLCA5Nl0sCiAgICAgICAgWzg2LCA0NDgsIDI2LCAxMjBdLAogICAgICAgIFs4MywgNDAyLCAyNiwgMTI4XSwKPHxmaW1fZW5kfD4="]
["e71fd79a9723fbd46b6e3aaa1249677fea411ec2-5","e71fd79a9723fbd46b6e3aaa1249677fea411ec2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgoKYnVzZXMgPSBucC5hcnJheSgKICAgIFsKICAgICAgICBbOTAsIDQyNiwgMjcsIDExMl0sCiAgICAgICAgWzkwLCA0MjUsIDI3LCAxMTJdLAogICAgICAgIFs4NywgNDAwLCAyMywgOTZdLAogICAgICAgIFs4NiwgNDQ4LCAyNiwgMTIwXSwKICAgICAgICBbODMsIDQwMiwgMjYsIDEyOF0sCiAgICAgICAgWzgyLCA0MjgsIDMzLCAxMjFdLAogICAgICAgIFs4MCwgNDQ1LCAyNiwgMTIyXSwKICAgICAgICBbNzEsIDQ4MCwgMjMsIDExOV0sCiAgICAgICAgWzc1LCA0NDksIDI2LCAxMjBdLAogICAgICAgIFs3NCwgNDMwLCAyNSwgMTE1XSwKICAgICAgICBbNzIsIDQ3OSwgMzUsIDE0NV0sCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBbNjgsIDQ0MCwgMjYsIDEyNl0sCiAgICAgICAgWzgyLCA0MjgsIDI1LCAxMjBdLAogICAgICAgIFs4NiwgNDI1LCAzNSwgMTI2XQo8fGZpbV9lbmR8Pg=="]
["97890cdade885088a36992489276471ad71a8355-1","97890cdade885088a36992489276471ad71a8355","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5Z2FtZSwgc3lzLCBvcwpmcm9tIHB5Z2FtZS5sb2NhbHMgaW1wb3J0ICoKI2luaXQKcHlnYW1lLmluaXQoKQpoZWlnaHQgPSAyMDA7CndpZHRoID0gMjAwOwogCnNjcmVlbiA9IHB5Z2FtZS5kaXNwbGF5LnNldF9tb2RlKChoZWlnaHQsIHdpZHRoKSkKcHlnYW1lLmRpc3BsYXkuc2V0X2NhcHRpb24oIkdyYXZpdHkgcG9ydCIpCiAKI3ZhcmlhYmxlcwpwbHggPSA5MDsKcGx5ID0gMDsKc3BlZWQgPSAwOwpncmF2aXR5ID0gMC4xOwogCiAKPHxmaW1faG9sZXw+CndoaWxlIFRydWU6CiAgICAgICAgZm9yIGV2ZW50IGluIHB5Z2FtZS5ldmVudC5nZXQoKToKICAgICAgICAgICAgICAgIGlmIGV2ZW50LnR5cGUgPT0gcHlnYW1lLlFVSVQ6CiAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGl0KCkKICAgICAgICBpZiBwbHggPCAwOgogICAgICAgICAgICAgICAgcGx4ID0gMAogICAgICAgIHNjcmVlbi5maWxsKCg0LCA2LCAzKSkKICAgICAgICBzY3JlZW4uYmxpdChwbGF5ZXIsIChwbHgsIHBseSkpCiAgICAgICAgcGx5ID0gcGx5ICsgc3BlZWQ7CiAgICAgICAgc3BlZWQgPSBzcGVlZCArIGdyYXZpdHk7CiAgICAgICAgaWYgKHBseSA+IGhlaWdodCk6CiAgICAgICAgICAgICAgICBzcGVlZCA9IHNwZWVkICogLTAuOTU7CiAgICAgICAgcHlnYW1lLmRpc3BsYXkuZmxpcCgpCiAgICAgICAgY2xvY2sudGljayg1MCkKcHlnYW1lLnF1aXQoKQo8fGZpbV9zdWZmaXh8PgpwbGF5ZXIgPSBweWdhbWUuaW1hZ2UubG9hZChvcy5wYXRoLmpvaW4oJ2RhdGEnLCAnY2hhcmFjdGVyX3NSLnBuZycpKQpwbGF5ZXIuY29udmVydCgpCmNsb2NrID0gcHlnYW1lLnRpbWUuQ2xvY2soKQogCjx8ZmltX2VuZHw+"]
["68c8e7d7cb79dd7e400b71739088c29c6709e126-1","68c8e7d7cb79dd7e400b71739088c29c6709e126","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gZGV2by5hcGkgaW1wb3J0IENsaWVudCwgQ2xpZW50Q29uZmlnLCBTSU1QTEVDT01QQUNUX1RPX09CSgoKCmtleSA9IG9zLmdldGVudignREVWT19BUElfS0VZJywgTm9uZSkKc2VjcmV0ID0gb3MuZ2V0ZW52KCdERVZPX0FQSV9TRUNSRVQnLCBOb25lKQoKYXBpID0gQ2xpZW50KGF1dGg9eyJrZXkiOiBrZXksICJzZWNyZXQiOiBzZWNyZXR9LAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICBhZGRyZXNzPSJodHRwczovL2FwaXYyLWV1LmRldm8uY29tL3NlYXJjaC9xdWVyeSIsCiAgICAgICAgICAgICBjb25maWc9Q2xpZW50Q29uZmlnKHJlc3BvbnNlPSJqc29uL3NpbXBsZS9jb21wYWN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtPVRydWUsIHByb2Nlc3Nvcj1TSU1QTEVDT01QQUNUX1RPX09CSikpCgo8fGZpbV9lbmR8Pg=="]
["68c8e7d7cb79dd7e400b71739088c29c6709e126-2","68c8e7d7cb79dd7e400b71739088c29c6709e126","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gZGV2by5hcGkgaW1wb3J0IENsaWVudCwgQ2xpZW50Q29uZmlnLCBTSU1QTEVDT01QQUNUX1RPX09CSgoKCmtleSA9IG9zLmdldGVudignREVWT19BUElfS0VZJywgTm9uZSkKc2VjcmV0ID0gb3MuZ2V0ZW52KCdERVZPX0FQSV9TRUNSRVQnLCBOb25lKQoKYXBpID0gQ2xpZW50KGF1dGg9eyJrZXkiOiBrZXksICJzZWNyZXQiOiBzZWNyZXR9LAogICAgICAgICAgICAgYWRkcmVzcz0iaHR0cHM6Ly9hcGl2Mi1ldS5kZXZvLmNvbS9zZWFyY2gvcXVlcnkiLAogICAgICAgICAgICAgY29uZmlnPUNsaWVudENvbmZpZyhyZXNwb25zZT0ianNvbi9zaW1wbGUvY29tcGFjdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbT1UcnVlLCBwcm9jZXNzb3I9U0lNUExFQ09NUEFDVF9UT19PQkopKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKcmVzcG9uc2UgPSBhcGkucXVlcnkocXVlcnk9ImZyb20gZGVtby5lY29tbWVyY2UuZGF0YSBzZWxlY3QgKiAiLAogICAgICAgICAgICAgICAgICAgICBkYXRlcz17J2Zyb20nOiAidG9kYXkoKS0xKmRheSgpIn0pCgo8fGZpbV9lbmR8Pg=="]
["da7c38a9c86135157545343b5ca32cd37543152e-1","da7c38a9c86135157545343b5ca32cd37543152e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzeXMKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YQoKZGVmIGJhY2tlbmRfYXV0aCgpOgogICAgIiIiCiAgICBUaGlzIHJldHVybnMgYW4gYXV0aCBoZWFkZXIgdG8gYWNjZXNzIHRoZSBXRUFMVEhBV0sgYmFja2VuZAogICAgIiIiCgpkZWYgcGFyc2VfbGlua2VkaW5fZGF0ZShkYXRlOiBzdHIpIC0+IGRhdGV0aW1lOgogICAgIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHBhcnNlcyB0aGFuIGFubm95aW5nIGxpbmtlZGluIHN0eWxlIGRhdGUgaW50byBhIHJlYWwgZGF0ZXRpbWUKICAgICIiIgogICAgbW9udGggPSBOb25lCiAgICB0cnk6Cjx8ZmltX2VuZHw+"]
["da7c38a9c86135157545343b5ca32cd37543152e-2","da7c38a9c86135157545343b5ca32cd37543152e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzeXMKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YQo8fGZpbV9ob2xlfD4KICAgICIiIgoKZGVmIHBhcnNlX2xpbmtlZGluX2RhdGUoZGF0ZTogc3RyKSAtPiBkYXRldGltZToKICAgICIiIgogICAgcGFyc2VzIHRoYW4gYW5ub3lpbmcgbGlua2VkaW4gc3R5bGUgZGF0ZSBpbnRvIGEgcmVhbCBkYXRldGltZQogICAgIiIiCiAgICBtb250aCA9IE5vbmUKICAgIHRyeToKICAgICAgICB5ZWFyID0gaW50KGRhdGUpCiAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICByZXR1cm4gTm9uZQoKICAgIGlmIG1vbnRoOgogICAgICAgIHJldHVybiBkYXRldGltZSh5ZWFyLCBtb250aCwgMSkKCiAgICBlbHNlOgogICAgICAgIHJldHVybiBkYXRldGltZSh5ZWFyLCAxLCAxKQo8fGZpbV9zdWZmaXh8PgoKZGVmIGJhY2tlbmRfYXV0aCgpOgogICAgIiIiCiAgICBUaGlzIHJldHVybnMgYW4gYXV0aCBoZWFkZXIgdG8gYWNjZXNzIHRoZSBXRUFMVEhBV0sgYmFja2VuZAo8fGZpbV9lbmR8Pg=="]
["da7c38a9c86135157545343b5ca32cd37543152e-3","da7c38a9c86135157545343b5ca32cd37543152e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzeXMKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YQoKZGVmIGJhY2tlbmRfYXV0aCgpOgogICAgIiIiCiAgICBUaGlzIHJldHVybnMgYW4gYXV0aCBoZWFkZXIgdG8gYWNjZXNzIHRoZSBXRUFMVEhBV0sgYmFja2VuZAogICAgIiIiCgpkZWYgcGFyc2VfbGlua2VkaW5fZGF0ZShkYXRlOiBzdHIpIC0+IGRhdGV0aW1lOgogICAgIiIiCiAgICBwYXJzZXMgdGhhbiBhbm5veWluZyBsaW5rZWRpbiBzdHlsZSBkYXRlIGludG8gYSByZWFsIGRhdGV0aW1lCjx8ZmltX2hvbGV8PgogICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgcmV0dXJuIE5vbmUKCiAgICBpZiBtb250aDoKICAgICAgICByZXR1cm4gZGF0ZXRpbWUoeWVhciwgbW9udGgsIDEpCgogICAgZWxzZToKICAgICAgICByZXR1cm4gZGF0ZXRpbWUoeWVhciwgMSwgMSkKPHxmaW1fc3VmZml4fD4KICAgICIiIgogICAgbW9udGggPSBOb25lCiAgICB0cnk6CiAgICAgICAgeWVhciA9IGludChkYXRlKQo8fGZpbV9lbmR8Pg=="]
["da7c38a9c86135157545343b5ca32cd37543152e-4","da7c38a9c86135157545343b5ca32cd37543152e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzeXMKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YQoKZGVmIGJhY2tlbmRfYXV0aCgpOgogICAgIiIiCiAgICBUaGlzIHJldHVybnMgYW4gYXV0aCBoZWFkZXIgdG8gYWNjZXNzIHRoZSBXRUFMVEhBV0sgYmFja2VuZAogICAgIiIiCgpkZWYgcGFyc2VfbGlua2VkaW5fZGF0ZShkYXRlOiBzdHIpIC0+IGRhdGV0aW1lOgogICAgIiIiCiAgICBwYXJzZXMgdGhhbiBhbm5veWluZyBsaW5rZWRpbiBzdHlsZSBkYXRlIGludG8gYSByZWFsIGRhdGV0aW1lCiAgICAiIiIKICAgIG1vbnRoID0gTm9uZQogICAgdHJ5Ogo8fGZpbV9ob2xlfD4KICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgIHJldHVybiBOb25lCgogICAgaWYgbW9udGg6CiAgICAgICAgcmV0dXJuIGRhdGV0aW1lKHllYXIsIG1vbnRoLCAxKQoKICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIGRhdGV0aW1lKHllYXIsIDEsIDEpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgeWVhciA9IGludChkYXRlKQo8fGZpbV9lbmR8Pg=="]
["a9f151f1d6a92fafdff2e1657461966356d684d3-1","a9f151f1d6a92fafdff2e1657461966356d684d3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRocmVhZHNhZmVfdGtpbnRlciBhcyB0awppbXBvcnQgdGtpbnRlci50dGsgYXMgdHRrCgpmcm9tIGJpbmlsbGEgaW1wb3J0IGVkaXRvcl9jb25zdGFudHMgYXMgZV9jCmZyb20gYmluaWxsYS53aWRnZXRzLmJpbmlsbGFfd2lkZ2V0IGltcG9ydCBCaW5pbGxhV2lkZ2V0CmZyb20gYmluaWxsYS53aWRnZXRzIGltcG9ydCBnZXRfbW91c2VfZGVsdGEsIGdldF9yZWxhdGl2ZV93aWRnZXRfcG9zaXRpb24KCgp3aW5fMTBfcGFkID0gMgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKX19hbGxfXyA9ICgiU2Nyb2xsTWVudSIsICkKCgo8fGZpbV9lbmR8Pg=="]
["a9f151f1d6a92fafdff2e1657461966356d684d3-2","a9f151f1d6a92fafdff2e1657461966356d684d3",{"$cut":{"chars":23736,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRocmVhZHNhZmVfdGtpbnRlciBhcyB0awppbXBvcnQgdGtpbnRlci50dGsgYXMgdHRrCgpmcm9tIGJpbmlsbGEgaW1wb3J0IGVkaXRvcl9jb25zdGFudHMgYXMgZV9jCmZyb20gYmluaWxsYS53aWRnZXRzLmJpbmlsbGFfd2lkZ2V0IGltcG9ydCBCaW5pbGxhV2lkZ2V0CmZyb20gYmluaWxsYS53aWRnZXRzIGltcG9ydCBnZXRfbW91c2VfZGVsdGEsIGdldF9yZWxhdGl2ZV93aWRnZXRfcG9zaXRpb24KCgp3aW5fMTBfcGFkID0gMgoKCl9fYWxsX18gPSAoIlNjcm9sbE1lbnUiLCApCgoKY2xhc3MgU2Nyb2xsTWVudSh0ay5GcmFtZSwgQmluaWxsYVdpZGdldCk6CiAgICAnJycKICAgIFVzZWQgYXMgYSBtZW51IGZvciBjZXJ0YWluIEZpZWxkV2lkZ2V0cywgc3VjaCBhcyB3aGVuCiAgICBzZWxlY3RpbmcgYW4gYXJyYXkgZWxlbWVudCBvciBhbiBlbnVtZXJhdG9yIG9wdGlvbi4KICAgICcnJwogICAgdmFyaWFibGUgPSBOb25lCiAgICBzdHJfdmFyaWFibGUgPSBOb25lCiAgICBjYWxsYmFjayA9IE5vbmUKICAgIG9wdGlvbl9ib3ggPSBOb25lCiAgICBtYXhfaGVpZ2h0ID0gTm9uZQogICAgbWF4X2luZGV4ID0gLTEKCiAgICBvcHRpb25fY2FjaGUgPSBOb25lCiAgICBvcHRpb25fZ2V0dGVyID0gTm9uZQogICAgb3B0aW9uc19tZW51X3NhbmUgPSBGYWxzZQogICAgb3B0aW9uc192b2xhdGlsZSA9IEZhbHNlCiAgICBzZWxlY3RpbmcgPSBGYWxzZSAgIyBwcmV2ZW50cyBtdWx0aXBsZSBzZWxlY3Rpb25zIGF0IG9uY2UKCiAgICBjYW5fc2Nyb2xsID0gVHJ1ZQogICAgb3B0aW9uX2JveF92aXNpYmxlID0gRmFsc2UKICAgIGNsaWNrX291dHNpZGVfZnVuY2lkID0gTm9uZQo8fGZpbV9ob2xlfD4KCiAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBCaW5pbGxhV2lkZ2V0Ll9faW5pdF9fKHNlbGYpCgogICAgICAgIHNlbF9pbmRleCA9IGt3YXJncy5wb3AoJ3NlbF9pbmRleCcsIC0xKQogICAgICAgIGRpc2FibGVkID0ga3dhcmdzLnBvcCgnZGlzYWJsZWQnLCBGYWxzZSkKCiAgICAgICAgb3B0aW9ucyA9IGt3YXJncy5wb3AoJ29wdGlvbnMnLCBOb25lKQogICAgICAgIHNlbGYuY2FuX3Njcm9sbCA9IGt3YXJncy5wb3AoJ2Nhbl9zY3JvbGwnLCBzZWxmLmNhbl9zY3JvbGwpCiAgICAgICAgc2VsZi5vcHRpb25fZ2V0dGVyID0ga3dhcmdzLnBvcCgnb3B0aW9uX2dldHRlcicsIE5vbmUpCiAgICAgICAgc2VsZi5jYWxsYmFjayA9IGt3YXJncy5wb3AoJ2NhbGxiYWNrJywgTm9uZSkKICAgICAgICBzZWxmLnZhcmlhYmxlID0ga3dhcmdzLnBvcCgndmFyaWFibGUnLCBOb25lKQogICAgICAgIHNlbGYuc3RyX3ZhcmlhYmxlID0ga3dhcmdzLnBvcCgnc3RyX3ZhcmlhYmxlJywgTm9uZSkKICAgICAgICBzZWxmLm1heF9pbmRleCA9IGt3YXJncy5wb3AoJ21heF9pbmRleCcsIHNlbGYubWF4X2luZGV4KQogICAgICAgIHNlbGYubWF4X2hlaWdodCA9IGt3YXJncy5wb3AoJ21heF9oZWlnaHQnLCBzZWxmLm1heF9oZWlnaHQpCiAgICAgICAgc2VsZi5mX3dpZGdldF9wYXJlbnQgPSBrd2FyZ3MucG9wKCdmX3dpZGdldF9wYXJlbnQnLCBOb25lKQogICAgICAgIHNlbGYubWVudV93aWR0aCA9IGt3YXJncy5wb3AoJ21lbnVfd2lkdGgnLCAwKQogICAgICAgIHNlbGYub3B0aW9uc192b2xhdGlsZSA9IGt3YXJncy5wb3AoJ29wdGlvbnNfdm9sYXRpbGUnLCBGYWxzZSkKICAgICAgICBzZWxmLmRlZmF1bHRfdGV4dCA9IGt3YXJncy5wb3AoJ2RlZmF1bHRfdGV4dCcsIGVfYy5JTlZBTElEX09QVElPTikKCiAgICAgICAgaWYgc2VsZi5tYXhfaGVpZ2h0IGlzIE5vbmU6CiAgICAgICAgICAgIHNlbGYubWF4X2hlaWdodCA9IHNlbGYuc2Nyb2xsX21lbnVfbWF4X2hlaWdodAoKICAgICAgICBrd2FyZ3MudXBkYXRlKHJlbGllZj0nc3Vua2VuJywgYmQ9c2VsZi5saXN0Ym94X2RlcHRoLAogICAgICAgICAgICAgICAgICAgICAgYmc9c2VsZi5kZWZhdWx0X2JnX2NvbG9yKQogICAgICAgIHRrLkZyYW1lLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKCiAgICAgICAgaWYgc2VsZi52YXJpYWJsZSBpcyBOb25lOgogICAgICAgICAgICBzZWxmLnZhcmlhYmxlID0gdGsuSW50VmFyKHNlbGYsIHNlbF9pbmRleCkKCiAgICAgICAgc2VsZi53cml0ZV90cmFjZShzZWxmLnZhcmlhYmxlLCBsYW1iZGEgKmE6IHNlbGYudXBkYXRlX2xhYmVsKCkpCgogICAgICAgIG1lbnVfd2lkdGggPSBzZWxmLm1lbnVfd2lkdGggaWYgc2VsZi5tZW51X3dpZHRoIGVsc2Ugc2VsZi5zY3JvbGxfbWVudV93aWR0aAogICAgICAgIHNlbGYuc2VsX2xhYmVsID0gdGsuTGFiZWwoCiAgICAgICAgICAgIHNlbGYsIGJnPXNlbGYuZW51bV9ub3JtYWxfY29sb3IsIGZnPXNlbGYudGV4dF9ub3JtYWxfY29sb3IsCiAgICAgICAgICAgIGJkPTIsIHJlbGllZj0nZ3Jvb3ZlJywKICAgICAgICAgICAgd2lkdGg9bWF4KG1pbihtZW51X3dpZHRoLCBzZWxmLnNjcm9sbF9tZW51X21heF93aWR0aCksIDEpKQogICAgICAgICMgdGhlIGJ1dHRvbl9mcmFtZSBpcyB0byBmb3JjZSB0aGUgYnV0dG9uIHRvIGJlIGEgY2VydGFpbiBzaXplCiAgICAgICAgc2VsZi5idXR0b25fZnJhbWUgPSB0ay5GcmFtZShzZWxmLCByZWxpZWY9J2ZsYXQnLCBoZWlnaHQ9MTgsIHdpZHRoPTE4LCBiZD0wKQogICAgICAgIHNlbGYuYnV0dG9uX2ZyYW1lLnBhY2tfcHJvcGFnYXRlKDApCiAgICAgICAgc2VsZi5hcnJvd19idXR0b24gPSB0ay5CdXR0b24oc2VsZi5idXR0b25fZnJhbWUsIHRleHQ9IuKWvCIsIHdpZHRoPTIpCiAgICAgICAgc2VsZi5hcnJvd19idXR0b24uZm9udF90eXBlID0gImZpeGVkX3NtYWxsIgogICAgICAgIHNlbGYuYXJyb3dfYnV0dG9uLnBhY2soKQogICAgICAgICNzZWxmLmFycm93X2J1dHRvbiA9IHR0ay5CdXR0b24oc2VsZi5idXR0b25fZnJhbWUsIHRleHQ9IuKWvCIsIHdpZHRoPTIpCiAgICAgICAgI3NlbGYuYXJyb3dfYnV0dG9uLmdyaWQocm93PTEsIGNvbHVtbj0xLCBzdGlja3k9J25ld3MnLAogICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgIGlwYWR4PTAsIGlwYWR5PTAsIHBhZHg9MCwgcGFk"}}]
["419bcb1297b4da42813ce96206acb1abad3c3310-1","419bcb1297b4da42813ce96206acb1abad3c3310","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCm15U3RyaW5nID0gIiIiciAwIGh0dHBzOi8vZmFybTYuc3RhdGljZmxpY2tyLmNvbS81NjE1LzE1MTYzMzAzNDQ0XzI1Y2Q2YTk0ZTNfei5qcGcKYWJzdHJhY3QgcGFyaXMgZmlsbSBhbmFsb2cgZWlmZmVsdG93ZXIgcmV0cm8gbmVhbW9zY291CmVpZmZlbHRvd2VyIDEgaHR0cHM6Ly9mYXJtNi5zdGF0aWNmbGlja3IuY29tLzU2MTIvMTU2MDQ5NzAwMTdfMTNjMjI3M2I1Ml96LmpwZwpicmlkZ2UgYncgcGFyaXMgZnJhbmNlIG1vbm9jaHJvbWUgc3RhdHVlIHNlaW5lIGJyb256ZSBkZW5tYXJrIGVpZmZlbHRvd2VyIGVxdWVzdHJpYW4gZnJhIHBvbnRkZWJpcmhha2VpbQplaWZmZWx0b3dlciAyIGh0dHBzOi8vZmFybTguc3RhdGljZmxpY2tyLmNvbS83NDY1LzE1NzkwMDUxNjM1XzA4YzA5OTM5MDFfei5qcGcKYnJpZGdlIHdpbnRlciBwYXJpcyBzdGF0dWUgYnJvbnplIGRlbm1hcmsgZWlmZmVsdG93ZXIgZXF1ZXN0cmlhbiBmcmEgcG9udGRlYmlyaGFrZWltCjx8ZmltX2hvbGV8PgogIiIiCnVybExpc3QgPSByZS5maW5kYWxsKHInKGh0dHBzPzovL1teXHNdKyknLCBteVN0cmluZykKcHJpbnQgdXJsTGlzdAo8fGZpbV9zdWZmaXh8PgplaWZmZWx0b3dlciAzIGh0dHBzOi8vZmFybTkuc3RhdGljZmxpY2tyLmNvbS84NTc1LzE1NjA0NTYxNzM4X2JkMGViM2Y0MGFfei5qcGcKcGFyaXMgZWlmZmVsdG93ZXIgcmVmbGV0IHRvdXJlaWZmZWwKZWlmZmVsdG93ZXIgNCBodHRwczovL2Zhcm02LnN0YXRpY2ZsaWNrci5jb20vNTYxNS8xNTc2NjEzNjI5Nl8wOWYwOGZjNTBkX3ouanBnCm5vdmVtYmVyIHBhcmlzIGVpZmZlbHRvd2VyCjx8ZmltX2VuZHw+"]
["e53e1c059d0999952c6f04d9e46b2b128ccc9547-1","e53e1c059d0999952c6f04d9e46b2b128ccc9547","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gaXRlcnRvb2xzIGltcG9ydCBjaGFpbgpmcm9tIG1pbWV0eXBlcyBpbXBvcnQgZ3Vlc3NfdHlwZQpmcm9tIGRqYW5nby5jb25mIGltcG9ydCBzZXR0aW5ncwpmcm9tIGRqYW5nby5jb3JlLnNlcnZlcnMuYmFzZWh0dHAgaW1wb3J0IEZpbGVXcmFwcGVyCmZyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgUQpmcm9tIGRqYW5nby5mb3Jtcy5tb2RlbHMgaW1wb3J0IG1vZGVsZm9ybXNldF9mYWN0b3J5CmZyb20gZGphbmdvLnNob3J0Y3V0cyBpbXBvcnQgcmVuZGVyX3RvX3Jlc3BvbnNlLFJlcXVlc3RDb250ZXh0LEh0dHA0MDQsSHR0cFJlc3BvbnNlUmVkaXJlY3QsSHR0cFJlc3BvbnNlCmZyb20gZGphbmdvLnRlbXBsYXRlLmRlZmF1bHRmaWx0ZXJzIGltcG9ydCBzbHVnaWZ5CgoKPHxmaW1faG9sZXw+CgpkZWYgY2hlY2tfcHJvZHVjdCh1c2VyLHByb2R1Y3QpOgogICAgaWYgcHJvZHVjdCBpbiB1c2VyLnVzZXJwdXJjaGFzZS5wcm9kdWN0cy5hbGwoKToKICAgICAgICByZXR1cm4gVHJ1ZQogICAgZWxzZToKICAgICAgICByZXR1cm4gRmFsc2UKCmRlZiBkb3dubG9hZF9wcm9kdWN0KHJlcXVlc3Qsc2x1ZyxmaWxlbmFtZSk6CiAgICBwcm9kdWN0ID0gUHJvZHVjdC5vYmplY3RzLmdldChzbHVnPXNsdWcpCiAgICBpZiBwcm9kdWN0IGluIHJlcXVlc3QudXNlci51c2VycHVyY2hhc2UucHJvZHVjdHMuYWxsKCk6CiAgICAgICAgcHJvZHVjdF9maWxlID0gc3RyKHByb2R1Y3QuZG93bmxvYWQpCiAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHNldHRpbmdzLlBST1RFQ1RFRF9VUExPQURTLHByb2R1Y3RfZmlsZSkKICAgICAgICB3cmFwcGVyID0gRmlsZVdyYXBwZXIoZmlsZShmaWxlX3BhdGgpKQogICAgICAgIHJlc3BvbnNlID0gSHR0cFJlc3BvbnNlKHdyYXBwZXIsY29udGVudF90eXBlPWd1ZXNzX3R5cGUocHJvZHVjdF9maWxlKSkKICAgICAgICByZXNwb25zZVsnQ29udGVudC1EaXBvc2l0aW9uJ10gPSAnYXR0YWNobWVudDtmaWxlbmFtZT0lcycgJWZpbGVuYW1lCiAgICAgICAgcmVzcG9uc2VbJ0NvbnRlbnQtVHlwZSddID0gJycKICAgICAgICByZXNwb25zZVsnWC1TZW5kRmlsZSddID0gZmlsZV9wYXRoCiAgICAgICAgcmV0dXJuIHJlc3BvbnNlCiAgICBlbHNlOgogICAgICAgIHJhaXNlIEh0dHA0MDQKICAgICNyZXR1cm4gcmVuZGVyX3RvX3Jlc3BvbnNlKCJwcm9kdWN0cy9zaW5nbGUuaHRtbCIsIGxvY2FscygpLGNvbnRleHRfaW5zdGFuY2U9UmVxdWVzdENvbnRleHQocmVxdWVzdCkpCgoKZGVmIGxpc3RfYWxsKHJlcXVlc3QpOgogICAgcHJvZHVjdHMgPSBQcm9kdWN0Lm9iamVjdHMuZmlsdGVyKGFjdGl2ZT1UcnVlKQogICAgcmV0dXJuIHJlbmRlcl90b19yZXNwb25zZSgicHJvZHVjdHMvYWxsLmh0bWwiLCBsb2NhbHMoKSxjb250ZXh0X2luc3RhbmNlPVJlcXVlc3RDb250ZXh0KHJlcXVlc3QpKQoKCmRlZiBhZGRfcHJvZHVjdChyZXF1ZXN0KToKICAgIGZvcm0gPSBQcm9kdWN0Rm9ybShyZXF1ZXN0LlBPU1Qgb3IgTm9uZSkKICAgIGlmIGZvcm0uaXNfdmFsaWQoKToKICAgICAgICBwcm9kdWN0ID0gZm9ybS5zYXZlKGNvbW1pdD1GYWxzZSkKICAgICAgICBwcm9kdWN0LnVzZXIgPSAgcmVxdWVzdC51c2VyCiAgICAgICAgcHJvZHVjdC5zbHVnID0gc2x1Z2lmeShmb3JtLmNsZWFuZWRfZGF0YVsndGl0bGUnXSkKICAgICAgICBwcm9kdWN0LmFjdGl2ZSA9IEZhbHNlCiAgICAgICAgcHJvZHVjdC5zYXZlKCkKICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlUmVkaXJlY3QoJy9wcm9kdWN0cy8lcyclKHByb2R1Y3Quc2x1ZykpCiAgICByZXR1cm4gcmVuZGVyX3RvX3Jlc3BvbnNlKCJwcm9kdWN0cy9lZGl0Lmh0bWwiLCBsb2NhbHMoKSxjb250ZXh0X2luc3RhbmNlPVJlcXVlc3RDb250ZXh0KHJlcXVlc3QpKQoKZGVmIG1hbmFnZV9wcm9kdWN0X2ltYWdlKHJlcXVlc3Qsc2x1Zyk6CiAgICB0cnk6CiAgICAgICAgcHJvZHVjdCA9IFByb2R1Y3Qub2JqZWN0cy5nZXQoc2x1Zz1zbHVnKQogICAgZXhjZXB0OgogICAgICAgIHByb2R1Y3QgPSBGYWxzZQogICAgaWYgcmVxdWVzdC51c2VyID09IHByb2R1Y3QudXNlcjoKICAgICAgICBxdWVyeXNldCA9IFByb2R1Y3RJbWFnZS5vYmplY3RzLmZpbHRlcihwcm9kdWN0X19zbHVnPXNsdWcpCiAgICAgICAgUHJvZHVjdEltYWdlRm9ybXNldCA9IG1vZGVsZm9ybXNldF9mYWN0b3J5KFByb2R1Y3RJbWFnZSxmb3JtPVByb2R1Y3RJbWFnZUZvcm0sZXh0cmE9MCxjYW5fZGVsZXRlPVRydWUpCiAgICAgICAgZm9ybXNldCA9IFByb2R1Y3RJbWFnZUZvcm1zZXQocmVxdWVzdC5QT1NUIG9yIE5vbmUscmVxdWVzdC5GSUxFUyBvciBOb25lLHF1ZXJ5c2V0PXF1ZXJ5c2V0KQogICAgICAgIGZvcm0gPSBQcm9kdWN0SW1hZ2VGb3JtKHJlcXVlc3QuUE9TVCBvciBOb25lKQogICAgICAgIGlmIGZvcm0uaXNfdmFsaWQoKToKICAgICAgICAgICAgZm9yIGZvcm0gaW4gZm9ybXNldDoKICAgICAgICAgICAgICAgIGluc3RhbmNlID0gZm9ybS5zYXZlKGNvbW1pdD1GYWxzZSkKICAgICAgICAgICAgICAgIGluc3RhbmNlLnNhdmUoKQogICAgICAgICAgICBpZiBmb3Jtc2V0LmRlbGV0ZWRfZm9ybXM6CiAgICAgICAgICAgICAgICBmb3Jtc2V0LnNhdmUoKQogICAgICAgIHJldHVybiByZW5kZXJfdG9fcmVzcG9uc2UoInByb2R1Y3RzL21hbmFnZV9pbWFnZXMuaHRtbCIsIGxvY2FscygpLCBjb250ZXh0X2luc3RhbmNlPVJlcXVlc3RDb250ZXh0KHJlcXVlc3QpKQogICAgZWxzZToKICAgICAgIHJhaXNlIEh0dHA0MDQKCmRlZiBlZGl0X3Byb2R1Y3QocmVxdWVzdCxzbHVnKToKICAgIGluc3RhbmNlID0gUHJvZHVjdC5vYmplY3RzLmdldChzbHVnPXNsdWcpCiAgICBpZiByZXF1ZXN0LnVzZXIgPT0gaW5zdGFuY2UudXNlcjoKICAgICAgICBmb3JtID0gUHJvZHVjdEZvcm0ocmVxdWVzdC5QT1NUIG9yIE5vbmUsaW5zdGFuY2U9aW5zdGFuY2UpCiAgICAgICAgaWYgZm9ybS5pc192YWxpZCgpOgogICAgICAgICAgICBwcm9kdWN0X2VkaXQgPSBmb3JtLnNhdmUoY29tbWl0PUZhbHNlKQogICAgICAgICAgICBwcm9kdWN0X2VkaXQuc2F2ZSgpCiAgICAgICAgcmV0dXJuIHJlbmRlcl90b19yZXNwb25zZSgicHJvZHVjdHMvZWRpdC5odG1sIiwgbG9jYWxzKCksIGNvbnRleHRfaW5zdGFuY2U9UmVxdWVzdENvbnRleHQocmVxdWVzdCkpCiAgICBlbHNlOgogICAgICAgcmFpc2UgSHR0cDQwNAoKCgoKZGVmIHNpbmdsZShyZXF1ZXN0LHNsdWcpOgogICAgcHJvZHVjdCA9IFByb2R1Y3Qub2JqZWN0cy5nZXQoc2x1Zz1zbHVnKQogICAgaW1hZ2VzID0gcHJvZHVjdC5wcm9kdWN0aW1hZ2Vfc2V0LmFsbCgpCiAgICBjYXRlZ29yaWVzID0gcHJvZHVjdC5jYXRlZ29yeV9zZXQuYWxsKCkKICAgIGlmIHJlcXVlc3QudXNlci5pc19hdXRoZW50aWNhdGVkKCk6CiAgICAgICAgZG93bmxvYWRhYmxlID0gY2hlY2tfcHJvZHVjdChyZXF1ZXN0LnVzZXIscHJvZHVjdCkKICAgIGVkaXQgPSBUcnVlCiAgICByZWxhdGVkID0gW10KICAgIGlmIGxlbihjYXRlZ29yaWVzKSA+PTE6CiAgICAgICAgZm9yIGNhdGVnb3J5IGluIGNhdGVnb3JpZXM6CiAgICAgICAgICAgIHByb2R1Y3RzX2NhdGVnb3J5ID0gY2F0ZWdvcnkucHJvZHVjdC5hbGwoKQogICAgICAgICAgICBmb3IgaXRlbSBpbiBwcm9kdWN0c19jYXRlZ29yeToKICAgICAgICAgICAgICAgIGlmIG5vdCBpdGVtID09IHByb2R1Y3Q6CiAgICAgICAgICAgICAgICAgICAgcmVsYXRlZC5hcHBlbmQoaXRlbSkKCgoKCgoKICAgIHRyeToKICAgICAgICBjYXJ0X2lkID0gcmVxdWVzdC5zZXNzaW9uWydjYXJ0X2lkJ10KICAgICAgICBjYXJ0ID0gQ2FydC5vYmplY3RzLmdldChpZD1jYXJ0X2lkKQogICAgICAgIGZvciBpdGVtIGluIGNhcnQuY2FydGl0ZW1fc2V0LmFsbCgpOgogICAgICAgICAgICBpZiBpdGVtLnByb2R1Y3QgPT0gcHJvZHVjdDoKICAgICAgICAgICAgICAgIGluX2NhcnQgPSBUcnVlCiAgICBleGNlcHQ6CiAgICAgICAgaW5fY2FydCA9IEZhbHNlCgogICAgIiIiCiAgICBjb250ZXh0ID0gewogICAgICAgICJwcm9kdWN0Ijpwcm9kdWN0LAogICAgICAgICJjYXRlZ29yaWVzIjpjYXRlZ29yaWVzLAogICAgICAgICJlZGl0IjpUcnVlLAogICAgICAgICJpbWFnZXMiOmltYWdlcywKICAgICAgICAiZG93bmxvYWRhYmxlIjpkb3dubG9hZGFibGUsCiAgICB9CiAgICAiIiIKICAgIHJldHVybiByZW5kZXJfdG9fcmVzcG9uc2UoInByb2R1Y3RzL3NpbmdsZS5odG1sIiwgbG9jYWxzKCksIGNvbnRleHRfaW5zdGFuY2U9UmVxdWVzdENvbnRleHQocmVxdWVzdCkpCgoKZGVmIHNlYXJjaChyZXF1ZXN0KToKICAgIHRyeToKICAgICAgICBxID0gcmVxdWVzdC5HRVQuZ2V0KCdxJywgJycpCiAgICBleGNlcHQ6CiAgICAgICAgcSA9IEZhbHNlCiAgICBpZiBxOgogICAgICAgIHF1ZXJ5ID0gcQoKICAgIHByb2R1Y3RfcXVlcnlzZXQgPSBQcm9kdWN0Lm9iamVjdHMuZmlsdGVyKAogICAgICAgIFEodGl0bGVfX2ljb250YWlucz1xKXwKICAgICAgICBRKGRlc2NyaXB0aW9uX19pY29udGFpbnM9cSkKICAgICkKICAgIGNhdGVnb3J5X3F1ZXJ5c2V0ID0gQ2F0ZWdvcnkub2JqZWN0cy5maWx0ZXIoCiAgICAgICAgUSh0aXRsZV9faWNvbnRhaW5zPXEpfAogICAgICAgIFEoZGVzY3JpcHRpb25fX2ljb250YWlucz1xKQogICAgKQogICAgcmVzdWx0cyA9IGxpc3QoY2hhaW4ocHJvZHVjdF9xdWVyeXNldCxjYXRlZ29yeV9xdWVyeXNldCkpCiAgICAiIiIKCiAgICBpZiBxOgogICAgICAgIHF1ZXJ5ID0gIllvdSBzZWFyY2hlZCBmb3I6ICVzIiAlKHEpCiAgICAgICAgayA9IHEuc3BsaXQoKQogICAgICAgIGlmIGxlbihrKT49MjoKICAgICAgICAgICAgcHJvZHVjdHMgPSBbXQogICAgICAgICAgICBmb3IgaXRlbSBpbiBrOgogICAgICAgICAgICAgICAgYWxsX3Byb2R1Y3RzID0gUHJvZHVjdC5vYmplY3RzLmZpbHRlcih0aXRsZV9faWNvbnRhaW5zPWl0ZW0pLmRpc3RpbmN0KCkKICAgICAgICAgICAgICAgIGZvciBwcm9kdWN0IGluIGFsbF9wcm9kdWN0czoKICAgICAgICAgICAgICAgICAgICBwcm9kdWN0cy5hcHBlbmQocHJvZHVjdCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcm9kdWN0cyA9IFByb2R1Y3Qub2JqZWN0cy5maWx0ZXIodGl0bGVfX2ljb250YWlucz1xKQogICAgICAgICAgICAiIiIKCiAgICByZXR1cm4gcmVuZGVyX3RvX3Jlc3BvbnNlKCJwcm9kdWN0cy9zZWFyY2guaHRtbCIsIGxvY2FscygpLCBjb250ZXh0X2luc3RhbmNlPVJlcXVlc3RDb250ZXh0KHJlcXVlc3QpKQoKCmRlZiBjYXRlZ29yeV9zaW5nbGUocmVxdWVzdCxzbHVnKToKICAgIHRyeToKICAgICAgICBjYXRlZ29yeSA9IENhdGVnb3J5Lm9iamVjdHMuZ2V0KHNsdWc9c2x1ZykKICAgIGV4Y2VwdDoKICAgICAgICByYWlzZSBIdHRwNDA0CiAgICBwcm9kdWN0cyA9IGNhdGVnb3J5LnByb2R1Y3QuYWxsKCkKICAgIHJlbGF0ZWQgPSBbXQogICAgZm9yIGl0ZW0gaW4gcHJvZHVjdHM6CiAgICAgICAgcHJvZHVjdF9jYXRlZ29yaWVzID0gaXRlbS5jYXRlZ29yeV9zZXQuYWxsKCkKICAgICAgICBmb3Igc2luZ2xlX2NhdGVnb3J5IGluIHByb2R1Y3RfY2F0ZWdvcmllczoKICAgICAgICAgICAgaWYgbm90IHNpbmdsZV9jYXRlZ29yeSA9PSBjYXRlZ29yeToKICAgICAgICAgICAgICAgIHJlbGF0ZWQuYXBwZW5kKHNpbmdsZV9jYXRlZ29yeSkKICAgIHJldHVybiByZW5kZXJfdG9fcmVzcG9uc2UoInByb2R1Y3RzL2NhdGVnb3J5Lmh0bWwiLCBsb2NhbHMoKSwgY29udGV4dF9pbnN0YW5jZT1SZXF1ZXN0Q29udGV4dChyZXF1ZXN0KSkKPHxmaW1fc3VmZml4fD4KCmZyb20gY2FydC5tb2RlbHMgaW1wb3J0IENhcnQKZnJvbS5tb2RlbHMgaW1wb3J0IFByb2R1Y3QsQ2F0ZWdvcnksUHJvZHVjdEltYWdlCmZyb20uZm9ybXMgaW1wb3J0IFByb2R1Y3RGb3JtLFByb2R1Y3RJbWFnZUZvcm0KPHxmaW1fZW5kfD4="]
["e54f38830390743e19923ccf81f330fdbef45672-1","e54f38830390743e19923ccf81f330fdbef45672","PHxmaW1fcHJlZml4fD4KJycnCkdpdmVuIGEgc3RyaW5nIHMsIHJldHVybiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb2N1cnJlbmNlcyBvZiBhbnkgc3Vic3RyaW5nIHVuZGVyIHRoZSBmb2xsb3dpbmcgcnVsZXM6CgpUaGUgbnVtYmVyIG9mIHVuaXF1ZSBjaGFyYWN0ZXJzIGluIHRoZSBzdWJzdHJpbmcgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbWF4TGV0dGVycy4KVGhlIHN1YnN0cmluZyBzaXplIG11c3QgYmUgYmV0d2VlbiBtaW5TaXplIGFuZCBtYXhTaXplIGluY2x1c2l2ZS4KIAoKRXhhbXBsZSAxOgoKSW5wdXQ6IHMgPSAiYWFiYWJjYWFiIiwgbWF4TGV0dGVycyA9IDIsIG1pblNpemUgPSAzLCBtYXhTaXplID0gNApPdXRwdXQ6IDIKRXhwbGFuYXRpb246IFN1YnN0cmluZyAiYWFiIiBoYXMgMiBvY3VycmVuY2VzIGluIHRoZSBvcmlnaW5hbCBzdHJpbmcuCkl0IHNhdGlzZmllcyB0aGUgY29uZGl0aW9ucywgMiB1bmlxdWUgbGV0dGVycyBhbmQgc2l6ZSAzIChiZXR3ZWVuIG1pblNpemUgYW5kIG1heFNpemUpLgoKSW5wdXQ6IHMgPSAiYWFiY2FiY2FiIiwgbWF4TGV0dGVycyA9IDIsIG1pblNpemUgPSAyLCBtYXhTaXplID0gMwpPdXRwdXQ6IDMKCklucHV0OiBzID0gImFiY2RlIiwgbWF4TGV0dGVycyA9IDIsIG1pblNpemUgPSAzLCBtYXhTaXplID0gMwpPdXRwdXQ6IDAKClByZWNvbmRpdGlvbjoKMCA8PSBtaW5TaXplIDw9IG1heFNpemUKbGVuKHMpID49IDEKbWF4TGV0dGVycyA+PSAxCm9ubHkgQVNDSUkgd29yZHMKbm8gaW50IG92ZXJmbG93CmxlbihzKSA9IG4KClBvc3Rjb25kaXRpb246CnMgc3RheSB1bmNoYW5nZWQKcmV0dXJuIGludAoKQzE6IG4gPSAxCkMyOiBuID4gMgpDMzogbWF4U2l6ZSA9IG1pblNpemUKQzQ6IG1pblNpemUgPiBuIHJldHVybiAwCgpBbGdvOgo8fGZpbV9ob2xlfD4KZm9yIGVhY2ggaW5kZXgsIHRyeSBmcm9tIG1pbnNpemUgdG8gbWF4c2l6ZSwgYWRkIHF1YWxpZmllZCBzdWJzdHJpbmcgdG8gdGhlIG1hcAp1c2Ugc2V0IHRvIGNoZWNrIHdoZXRoZXIgbWF4TGV0dGVyIGNvbmRpdGlvbiBpcyBtZXQgCnJldHVybiBtYXggb2YgYWxsIHZhbHVlcyBpbiB0aGUgbWFwClJ1bnRpbWU6IE8obikKU3BhY2U6IE8obikKJycnCmNsYXNzIFNvbHV0aW9uOgogICAgZGVmIG1heEZyZXEoc2VsZiwgczogc3RyLCBtYXhMZXR0ZXJzOiBpbnQsIG1pblNpemU6IGludCwgbWF4U2l6ZTogaW50KSAtPiBpbnQ6CiAgICAgICAgbiA9IGxlbihzKQogICAgICAgIG1hcHBpbmcgPSBkZWZhdWx0ZGljdChpbnQpCiAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobi1taW5TaXplKzEpOgogICAgICAgICAgICB3b3JkID0gc1tpOmkrbWluU2l6ZV0KICAgICAgICAgICAgaWYgbGVuKHNldCh3IGZvciB3IGluIHdvcmQpKSA8PSBtYXhMZXR0ZXJzOgogICAgICAgICAgICAgICAgbWFwcGluZ1t3b3JkXSArPSAxCiAgICAgICAgcmV0dXJuIG1heChtYXBwaW5nLnZhbHVlcygpKSBpZiBsZW4obWFwcGluZy52YWx1ZXMoKSkgPiAwIGVsc2UgMAoKPHxmaW1fc3VmZml4fD4KT2JzZXJ2YXRpb246IFdlIG9ubHkgY2FyZSBhYm91dCB0aGUgZnJlcSwgbm90IHRoZSBzdWJzdHJpbmcsCnNvIG9ubHkgY2FyZSBhYm91dCBtaW5TaXplLCBkbyBub3QgY2FyZSBtYXhTaXplCgpVc2UgaGFzaG1hcDoKPHxmaW1fZW5kfD4="]
["e58d1d3d95c0c88b0ff4f7a597146eae62958d4c-1","e58d1d3d95c0c88b0ff4f7a597146eae62958d4c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aApmcm9tIG1udHMuZmlsdGVycy5nZW9tIGltcG9ydCAqCmZyb20gbW50cy5maWx0ZXJzLmludGVuc2l0eSBpbXBvcnQgKgpmcm9tIG1udHMuZmlsdGVycy5tbnRzX2ZpbHRlcnMgaW1wb3J0IE1OVFNGaWx0ZXJHcmFwaAppbXBvcnQgU2ltcGxlSVRLIGFzIHNpdGsKCmZyb20gdHFkbS5hdXRvIGltcG9ydCB0cWRtCmZyb20gbW50cy51dGlscyBpbXBvcnQgcmVwZWF0X3ppcApmcm9tIG1udHMuZmlsdGVycyBpbXBvcnQgbXBpX3dyYXBwZXIsIFR5cGVDYXN0Tm9kZQoKIyBEZWZpbmUgcGF0aHMKaW1hZ2VfZm9sZGVyID0gUGF0aChyJy4vMEEuTklGVElfSW1hZ2UnKQpzZWdtZW50X2ZvbGRlciA9IFBhdGgocicuLzBCLlNlZ21lbnRhdGlvbicpCm91dF9mb2xkZXIgPSBQYXRoKHInLi8xMC5QcmUtcHJvY2Vzc2VkLXYyLycpCm91dF90ZW1wX2ZvbGRlciA9IG91dF9mb2xkZXIuam9pbnBhdGgoJy50cmFpbmluZ19vdXRwdXRzJykKc3RhdGVfZGlyID0gb3V0X3RlbXBfZm9sZGVyLmpvaW5wYXRoKCdUcmFpbmVkX3N0YXRlcycpCgoKZGVmIGNyZWF0ZV9ncmFwaCgpIC0+IE1OVFNGaWx0ZXJHcmFwaDoKICAgIHIiIiJDcmVhdGUgdGhlIG5vcm1hbGl6YXRpb24gZ3JhcGgiIiIKICAgIEcgPSBNTlRTRmlsdGVyR3JhcGgoKQoKICAgICMgQWRkIGZpbHRlciBub2RlcyB0byB0aGUgZ3JhcGguCiAgICBHLmFkZF9ub2RlKFNwYXRpYWxOb3JtKG91dF9zcGFjaW5nPVswLjQ0OTIsIDAuNDQ5MiwgNF0pKQogICAgRy5hZGRfbm9kZShIdWFuZ1RocmVzaG9sZGluZyhjbG9zaW5nX2tlcm5lbF9zaXplPTEwKSwgMCwgaXNfZXhpdD1UcnVlKSAgIyBVc2UgbWFzayB0byBiZXR0ZXIgbWF0Y2ggdGhlIGhpc3RvZ3JhbXMKICAgIEcuYWRkX25vZGUoTjRJVEtCaWFzRmllbGRDb3JyZWN0aW9uKCksIFswLCAxXSkKICAgIEcuYWRkX25vZGUoTnl1bE5vcm1hbGl6ZXIoKSwgWzIsIDFdLCBpc19leGl0PVRydWUpCiAgICBHLmFkZF9ub2RlKExpbmVhclJlc2NhbGUobWVhbj01MDAwLiwgc3RkPTI1MDAuKSwgWzMsIDFdKQogICAgRy5hZGRfbm9kZShUeXBlQ2FzdE5vZGUoc2l0ay5zaXRrVUludDE2KSwgNCwgaXNfZXhpdD1UcnVlKQogICAgRy5hZGRfbm9kZShTaWduYWxJbnRlbnNpdHlSZWJpbm5pbmcobnVtX29mX2JpbnM9MjU2LCBxdWFudGlsZXM9WzAuMDEsIDAuOTldKSwgWzQsIDFdLCBpc19leGl0PVRydWUpCiAgICBHLmFkZF9ub2RlKFNpZ25hbEludGVuc2l0eVJlYmlubmluZyhudW1fb2ZfYmlucz0yNTYsIHF1YW50aWxlcz1bMC4wMSwgMC45OV0pLCBbMywgMV0sIGlzX2V4aXQ9VHJ1ZSkKICAgIHJldHVybiBHCgpkZWYgdHJhaW5fbnl1bCgpOgogICAgIyBDcmVhdGUgdHJhaW5pbmcgb3V0cHV0cyBmb2xkZXJzCiAgICBvdXRfdGVtcF9mb2xkZXIubWtkaXIoZXhpc3Rfb2s9VHJ1ZSwgcGFyZW50cz1UcnVlKQoKICAgICMgRGVmaW5lIGlucHV0cyBmb3IgcHJlcGFyaW5nIHRyYWluaW5nIG1hdGVyaWFscwogICAgaW1hZ2VzID0gW2YgZm9yIGYgaW4gaW1hZ2VfZm9sZGVyLml0ZXJkaXIoKSBpZiBmLm5hbWUuZmluZCgnbmlpJykgIT0gLTFdCiAgICBvdXRfbmFtZXMgPSBbaS5uYW1lIGZvciBpIGluIGltYWdlc10KICAgIHogPSAoWzNdLCBvdXRfbmFtZXMsIFtvdXRfdGVtcF9mb2xkZXJdLCBpbWFnZXMpCgogICAgIyBDcmVhdGUgdGhlIGdyYXBoCiAgICBHID0gY3JlYXRlX2dyYXBoKCkKICAgIHJlc3VsdCA9IG1waV93cmFwcGVyKEcucHJlcGFyZV90cmFpbmluZ19maWxlcywgeikKCiAgICBHLnRyYWluX25vZGUoMywgb3V0X3RlbXBfZm9sZGVyLCBvdXRfdGVtcF9mb2xkZXIuam9pbnBhdGgoJ1RyYWluZWRfc3RhdGVzJykpCgpkZWYgbm9ybWFsaXplX2ltYWdlcyhmb2xkZXIpOgogICAgaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAogICAgRyA9IGNyZWF0ZV9ncmFwaCgpCiAgICBHLmxvYWRfbm9kZV9zdGF0ZXMoMywgc3RhdGVfZGlyKQogICAgIyBHLnBsb3RfZ3JhcGgoKQogICAgIyBwbHQuc2hvdygpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICAiIiIKICAgIE11bHRpLXRocmVhZAogICAgIiIiCjx8ZmltX2VuZHw+"]
["e58d1d3d95c0c88b0ff4f7a597146eae62958d4c-2","e58d1d3d95c0c88b0ff4f7a597146eae62958d4c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aApmcm9tIG1udHMuZmlsdGVycy5nZW9tIGltcG9ydCAqCmZyb20gbW50cy5maWx0ZXJzLmludGVuc2l0eSBpbXBvcnQgKgpmcm9tIG1udHMuZmlsdGVycy5tbnRzX2ZpbHRlcnMgaW1wb3J0IE1OVFNGaWx0ZXJHcmFwaAppbXBvcnQgU2ltcGxlSVRLIGFzIHNpdGsKCmZyb20gdHFkbS5hdXRvIGltcG9ydCB0cWRtCmZyb20gbW50cy51dGlscyBpbXBvcnQgcmVwZWF0X3ppcApmcm9tIG1udHMuZmlsdGVycyBpbXBvcnQgbXBpX3dyYXBwZXIsIFR5cGVDYXN0Tm9kZQoKIyBEZWZpbmUgcGF0aHMKaW1hZ2VfZm9sZGVyID0gUGF0aChyJy4vMEEuTklGVElfSW1hZ2UnKQpzZWdtZW50X2ZvbGRlciA9IFBhdGgocicuLzBCLlNlZ21lbnRhdGlvbicpCm91dF9mb2xkZXIgPSBQYXRoKHInLi8xMC5QcmUtcHJvY2Vzc2VkLXYyLycpCm91dF90ZW1wX2ZvbGRlciA9IG91dF9mb2xkZXIuam9pbnBhdGgoJy50cmFpbmluZ19vdXRwdXRzJykKc3RhdGVfZGlyID0gb3V0X3RlbXBfZm9sZGVyLmpvaW5wYXRoKCdUcmFpbmVkX3N0YXRlcycpCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpkZWYgY3JlYXRlX2dyYXBoKCkgLT4gTU5UU0ZpbHRlckdyYXBoOgogICAgciIiIkNyZWF0ZSB0aGUgbm9ybWFsaXphdGlvbiBncmFwaCIiIgogICAgRyA9IE1OVFNGaWx0ZXJHcmFwaCgpCgo8fGZpbV9lbmR8Pg=="]
["e58d1d3d95c0c88b0ff4f7a597146eae62958d4c-3","e58d1d3d95c0c88b0ff4f7a597146eae62958d4c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aApmcm9tIG1udHMuZmlsdGVycy5nZW9tIGltcG9ydCAqCmZyb20gbW50cy5maWx0ZXJzLmludGVuc2l0eSBpbXBvcnQgKgpmcm9tIG1udHMuZmlsdGVycy5tbnRzX2ZpbHRlcnMgaW1wb3J0IE1OVFNGaWx0ZXJHcmFwaAppbXBvcnQgU2ltcGxlSVRLIGFzIHNpdGsKCmZyb20gdHFkbS5hdXRvIGltcG9ydCB0cWRtCmZyb20gbW50cy51dGlscyBpbXBvcnQgcmVwZWF0X3ppcApmcm9tIG1udHMuZmlsdGVycyBpbXBvcnQgbXBpX3dyYXBwZXIsIFR5cGVDYXN0Tm9kZQoKIyBEZWZpbmUgcGF0aHMKaW1hZ2VfZm9sZGVyID0gUGF0aChyJy4vMEEuTklGVElfSW1hZ2UnKQpzZWdtZW50X2ZvbGRlciA9IFBhdGgocicuLzBCLlNlZ21lbnRhdGlvbicpCm91dF9mb2xkZXIgPSBQYXRoKHInLi8xMC5QcmUtcHJvY2Vzc2VkLXYyLycpCm91dF90ZW1wX2ZvbGRlciA9IG91dF9mb2xkZXIuam9pbnBhdGgoJy50cmFpbmluZ19vdXRwdXRzJykKc3RhdGVfZGlyID0gb3V0X3RlbXBfZm9sZGVyLmpvaW5wYXRoKCdUcmFpbmVkX3N0YXRlcycpCgoKZGVmIGNyZWF0ZV9ncmFwaCgpIC0+IE1OVFNGaWx0ZXJHcmFwaDoKICAgIHIiIiJDcmVhdGUgdGhlIG5vcm1hbGl6YXRpb24gZ3JhcGgiIiIKICAgIEcgPSBNTlRTRmlsdGVyR3JhcGgoKQoKICAgICMgQWRkIGZpbHRlciBub2RlcyB0byB0aGUgZ3JhcGguCiAgICBHLmFkZF9ub2RlKFNwYXRpYWxOb3JtKG91dF9zcGFjaW5nPVswLjQ0OTIsIDAuNDQ5MiwgNF0pKQogICAgRy5hZGRfbm9kZShIdWFuZ1RocmVzaG9sZGluZyhjbG9zaW5nX2tlcm5lbF9zaXplPTEwKSwgMCwgaXNfZXhpdD1UcnVlKSAgIyBVc2UgbWFzayB0byBiZXR0ZXIgbWF0Y2ggdGhlIGhpc3RvZ3JhbXMKICAgIEcuYWRkX25vZGUoTjRJVEtCaWFzRmllbGRDb3JyZWN0aW9uKCksIFswLCAxXSkKICAgIEcuYWRkX25vZGUoTnl1bE5vcm1hbGl6ZXIoKSwgWzIsIDFdLCBpc19leGl0PVRydWUpCiAgICBHLmFkZF9ub2RlKExpbmVhclJlc2NhbGUobWVhbj01MDAwLiwgc3RkPTI1MDAuKSwgWzMsIDFdKQogICAgRy5hZGRfbm9kZShUeXBlQ2FzdE5vZGUoc2l0ay5zaXRrVUludDE2KSwgNCwgaXNfZXhpdD1UcnVlKQogICAgRy5hZGRfbm9kZShTaWduYWxJbnRlbnNpdHlSZWJpbm5pbmcobnVtX29mX2JpbnM9MjU2LCBxdWFudGlsZXM9WzAuMDEsIDAuOTldKSwgWzQsIDFdLCBpc19leGl0PVRydWUpCiAgICBHLmFkZF9ub2RlKFNpZ25hbEludGVuc2l0eVJlYmlubmluZyhudW1fb2ZfYmlucz0yNTYsIHF1YW50aWxlcz1bMC4wMSwgMC45OV0pLCBbMywgMV0sIGlzX2V4aXQ9VHJ1ZSkKICAgIHJldHVybiBHCgpkZWYgdHJhaW5fbnl1bCgpOgogICAgIyBDcmVhdGUgdHJhaW5pbmcgb3V0cHV0cyBmb2xkZXJzCiAgICBvdXRfdGVtcF9mb2xkZXIubWtkaXIoZXhpc3Rfb2s9VHJ1ZSwgcGFyZW50cz1UcnVlKQoKICAgICMgRGVmaW5lIGlucHV0cyBmb3IgcHJlcGFyaW5nIHRyYWluaW5nIG1hdGVyaWFscwogICAgaW1hZ2VzID0gW2YgZm9yIGYgaW4gaW1hZ2VfZm9sZGVyLml0ZXJkaXIoKSBpZiBmLm5hbWUuZmluZCgnbmlpJykgIT0gLTFdCiAgICBvdXRfbmFtZXMgPSBbaS5uYW1lIGZvciBpIGluIGltYWdlc10KICAgIHogPSAoWzNdLCBvdXRfbmFtZXMsIFtvdXRfdGVtcF9mb2xkZXJdLCBpbWFnZXMpCgogICAgIyBDcmVhdGUgdGhlIGdyYXBoCiAgICBHID0gY3JlYXRlX2dyYXBoKCkKICAgIHJlc3VsdCA9IG1waV93cmFwcGVyKEcucHJlcGFyZV90cmFpbmluZ19maWxlcywgeikKCiAgICBHLnRyYWluX25vZGUoMywgb3V0X3RlbXBfZm9sZGVyLCBvdXRfdGVtcF9mb2xkZXIuam9pbnBhdGgoJ1RyYWluZWRfc3RhdGVzJykpCgpkZWYgbm9ybWFsaXplX2ltYWdlcyhmb2xkZXIpOgogICAgaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAogICAgRyA9IGNyZWF0ZV9ncmFwaCgpCiAgICBHLmxvYWRfbm9kZV9zdGF0ZXMoMywgc3RhdGVfZGlyKQogICAgIyBHLnBsb3RfZ3JhcGgoKQogICAgIyBwbHQuc2hvdygpCgogICAgIiIiCiAgICBNdWx0aS10aHJlYWQKICAgICIiIgogICAgaW1hZ2VzID0gW2YgZm9yIGYgaW4gZm9sZGVyLml0ZXJkaXIoKSBpZiBmLm5hbWUuZmluZCgnbmlpJykgIT0gLTFdCiAgICBvdXRwdXRfcHJlZml4ID0gW2ltLm5hbWUgZm9yIGltIGluIGltYWdlc10KICAgIG91dHB1dF9kaXJlY3RvcmllcyA9IChvdXRfZm9sZGVyLmpvaW5wYXRoKCcwMC5IdWFuZ01hc2snKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfZm9sZGVyLmpvaW5wYXRoKCcwMS5OeXVsTm9ybWFsaXplZCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgIG91dF9mb2xkZXIuam9pbnBhdGgoJzAyLk55dWxOb3JtUmVzY2FsZWQnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfZm9sZGVyLmpvaW5wYXRoKCcwMy5OeXVsTm9ybVJlc2NhbGVkQmlubmVkJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0X2ZvbGRlci5qb2lucGF0aCgnMDQuTnl1bE5vcm1CaW5uZWQnKQogICAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAjIFByZXBhcmUgbXBpIGlucHV0cwogICAgeiA9IFtvdXRwdXRfcHJlZml4LCBbb3V0cHV0X2RpcmVjdG9yaWVzXSwgaW1hZ2VzXQogICAgIyBtcGlfd3JhcHBlcihHLm1waV9leGVjdXRlLCB6LCBudW1fd29ya2VyPTQpCiAgICBmb3Igcm93IGluIHJlcGVhdF96aXAoKnopOgogICAgICAgIEcubXBpX2V4ZWN1dGUoKnJvdykKCgoKCiMgSWYgdGhpcyBwcm90ZWN0b3IgaXMgYWJzZW50LCB3aW5kb3dzIHB5dGhvbiBtaWdodCBnbyBpbnRvIHJlY3Vyc2l2ZSBpbXBvcnQgbG9vcC4KaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgb3MuY2hkaXIocicvaG9tZS9sd29uZy9TdG9yYWdlL0RhdGEvTlBDX1JhZGlvbWljcycpCiAgICAjIHRyYWluX255dWwoKQogICAgbm9ybWFsaXplX2ltYWdlcyhpbWFnZV9mb2xkZXIpCjx8ZmltX2VuZHw+"]
["e58d1d3d95c0c88b0ff4f7a597146eae62958d4c-4","e58d1d3d95c0c88b0ff4f7a597146eae62958d4c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aApmcm9tIG1udHMuZmlsdGVycy5nZW9tIGltcG9ydCAqCmZyb20gbW50cy5maWx0ZXJzLmludGVuc2l0eSBpbXBvcnQgKgpmcm9tIG1udHMuZmlsdGVycy5tbnRzX2ZpbHRlcnMgaW1wb3J0IE1OVFNGaWx0ZXJHcmFwaAppbXBvcnQgU2ltcGxlSVRLIGFzIHNpdGsKCmZyb20gdHFkbS5hdXRvIGltcG9ydCB0cWRtCmZyb20gbW50cy51dGlscyBpbXBvcnQgcmVwZWF0X3ppcApmcm9tIG1udHMuZmlsdGVycyBpbXBvcnQgbXBpX3dyYXBwZXIsIFR5cGVDYXN0Tm9kZQoKIyBEZWZpbmUgcGF0aHMKaW1hZ2VfZm9sZGVyID0gUGF0aChyJy4vMEEuTklGVElfSW1hZ2UnKQpzZWdtZW50X2ZvbGRlciA9IFBhdGgocicuLzBCLlNlZ21lbnRhdGlvbicpCm91dF9mb2xkZXIgPSBQYXRoKHInLi8xMC5QcmUtcHJvY2Vzc2VkLXYyLycpCm91dF90ZW1wX2ZvbGRlciA9IG91dF9mb2xkZXIuam9pbnBhdGgoJy50cmFpbmluZ19vdXRwdXRzJykKc3RhdGVfZGlyID0gb3V0X3RlbXBfZm9sZGVyLmpvaW5wYXRoKCdUcmFpbmVkX3N0YXRlcycpCgoKZGVmIGNyZWF0ZV9ncmFwaCgpIC0+IE1OVFNGaWx0ZXJHcmFwaDoKICAgIHIiIiJDcmVhdGUgdGhlIG5vcm1hbGl6YXRpb24gZ3JhcGgiIiIKICAgIEcgPSBNTlRTRmlsdGVyR3JhcGgoKQoKICAgICMgQWRkIGZpbHRlciBub2RlcyB0byB0aGUgZ3JhcGguCiAgICBHLmFkZF9ub2RlKFNwYXRpYWxOb3JtKG91dF9zcGFjaW5nPVswLjQ0OTIsIDAuNDQ5MiwgNF0pKQogICAgRy5hZGRfbm9kZShIdWFuZ1RocmVzaG9sZGluZyhjbG9zaW5nX2tlcm5lbF9zaXplPTEwKSwgMCwgaXNfZXhpdD1UcnVlKSAgIyBVc2UgbWFzayB0byBiZXR0ZXIgbWF0Y2ggdGhlIGhpc3RvZ3JhbXMKPHxmaW1faG9sZXw+CiAgICBHLmFkZF9ub2RlKFNpZ25hbEludGVuc2l0eVJlYmlubmluZyhudW1fb2ZfYmlucz0yNTYsIHF1YW50aWxlcz1bMC4wMSwgMC45OV0pLCBbNCwgMV0sIGlzX2V4aXQ9VHJ1ZSkKICAgIEcuYWRkX25vZGUoU2lnbmFsSW50ZW5zaXR5UmViaW5uaW5nKG51bV9vZl9iaW5zPTI1NiwgcXVhbnRpbGVzPVswLjAxLCAwLjk5XSksIFszLCAxXSwgaXNfZXhpdD1UcnVlKQogICAgcmV0dXJuIEcKCmRlZiB0cmFpbl9ueXVsKCk6CiAgICAjIENyZWF0ZSB0cmFpbmluZyBvdXRwdXRzIGZvbGRlcnMKICAgIG91dF90ZW1wX2ZvbGRlci5ta2RpcihleGlzdF9vaz1UcnVlLCBwYXJlbnRzPVRydWUpCgogICAgIyBEZWZpbmUgaW5wdXRzIGZvciBwcmVwYXJpbmcgdHJhaW5pbmcgbWF0ZXJpYWxzCiAgICBpbWFnZXMgPSBbZiBmb3IgZiBpbiBpbWFnZV9mb2xkZXIuaXRlcmRpcigpIGlmIGYubmFtZS5maW5kKCduaWknKSAhPSAtMV0KICAgIG91dF9uYW1lcyA9IFtpLm5hbWUgZm9yIGkgaW4gaW1hZ2VzXQogICAgeiA9IChbM10sIG91dF9uYW1lcywgW291dF90ZW1wX2ZvbGRlcl0sIGltYWdlcykKCiAgICAjIENyZWF0ZSB0aGUgZ3JhcGgKICAgIEcgPSBjcmVhdGVfZ3JhcGgoKQogICAgcmVzdWx0ID0gbXBpX3dyYXBwZXIoRy5wcmVwYXJlX3RyYWluaW5nX2ZpbGVzLCB6KQoKICAgIEcudHJhaW5fbm9kZSgzLCBvdXRfdGVtcF9mb2xkZXIsIG91dF90ZW1wX2ZvbGRlci5qb2lucGF0aCgnVHJhaW5lZF9zdGF0ZXMnKSkKCmRlZiBub3JtYWxpemVfaW1hZ2VzKGZvbGRlcik6CiAgICBpbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CiAgICBHID0gY3JlYXRlX2dyYXBoKCkKICAgIEcubG9hZF9ub2RlX3N0YXRlcygzLCBzdGF0ZV9kaXIpCiAgICAjIEcucGxvdF9ncmFwaCgpCiAgICAjIHBsdC5zaG93KCkKCiAgICAiIiIKICAgIE11bHRpLXRocmVhZAogICAgIiIiCiAgICBpbWFnZXMgPSBbZiBmb3IgZiBpbiBmb2xkZXIuaXRlcmRpcigpIGlmIGYubmFtZS5maW5kKCduaWknKSAhPSAtMV0KICAgIG91dHB1dF9wcmVmaXggPSBbaW0ubmFtZSBmb3IgaW0gaW4gaW1hZ2VzXQogICAgb3V0cHV0X2RpcmVjdG9yaWVzID0gKG91dF9mb2xkZXIuam9pbnBhdGgoJzAwLkh1YW5nTWFzaycpLAogICAgICAgICAgICAgICAgICAgICAgICAgIG91dF9mb2xkZXIuam9pbnBhdGgoJzAxLk55dWxOb3JtYWxpemVkJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0X2ZvbGRlci5qb2lucGF0aCgnMDIuTnl1bE5vcm1SZXNjYWxlZCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgIG91dF9mb2xkZXIuam9pbnBhdGgoJzAzLk55dWxOb3JtUmVzY2FsZWRCaW5uZWQnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfZm9sZGVyLmpvaW5wYXRoKCcwNC5OeXVsTm9ybUJpbm5lZCcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKQoKICAgICMgUHJlcGFyZSBtcGkgaW5wdXRzCiAgICB6ID0gW291dHB1dF9wcmVmaXgsIFtvdXRwdXRfZGlyZWN0b3JpZXNdLCBpbWFnZXNdCiAgICAjIG1waV93cmFwcGVyKEcubXBpX2V4ZWN1dGUsIHosIG51bV93b3JrZXI9NCkKICAgIGZvciByb3cgaW4gcmVwZWF0X3ppcCgqeik6CiAgICAgICAgRy5tcGlfZXhlY3V0ZSgqcm93KQoKCgoKIyBJZiB0aGlzIHByb3RlY3RvciBpcyBhYnNlbnQsIHdpbmRvd3MgcHl0aG9uIG1pZ2h0IGdvIGludG8gcmVjdXJzaXZlIGltcG9ydCBsb29wLgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgb3MuY2hkaXIocicvaG9tZS9sd29uZy9TdG9yYWdlL0RhdGEvTlBDX1JhZGlvbWljcycpCiAgICAjIHRyYWluX255dWwoKQogICAgbm9ybWFsaXplX2ltYWdlcyhpbWFnZV9mb2xkZXIpCjx8ZmltX3N1ZmZpeHw+CiAgICBHLmFkZF9ub2RlKE40SVRLQmlhc0ZpZWxkQ29ycmVjdGlvbigpLCBbMCwgMV0pCiAgICBHLmFkZF9ub2RlKE55dWxOb3JtYWxpemVyKCksIFsyLCAxXSwgaXNfZXhpdD1UcnVlKQogICAgRy5hZGRfbm9kZShMaW5lYXJSZXNjYWxlKG1lYW49NTAwMC4sIHN0ZD0yNTAwLiksIFszLCAxXSkKICAgIEcuYWRkX25vZGUoVHlwZUNhc3ROb2RlKHNpdGsuc2l0a1VJbnQxNiksIDQsIGlzX2V4aXQ9VHJ1ZSkKPHxmaW1fZW5kfD4="]
["e58d1d3d95c0c88b0ff4f7a597146eae62958d4c-5","e58d1d3d95c0c88b0ff4f7a597146eae62958d4c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCjx8ZmltX2hvbGV8PgppbXBvcnQgU2ltcGxlSVRLIGFzIHNpdGsKCmZyb20gdHFkbS5hdXRvIGltcG9ydCB0cWRtCmZyb20gbW50cy51dGlscyBpbXBvcnQgcmVwZWF0X3ppcApmcm9tIG1udHMuZmlsdGVycyBpbXBvcnQgbXBpX3dyYXBwZXIsIFR5cGVDYXN0Tm9kZQoKIyBEZWZpbmUgcGF0aHMKaW1hZ2VfZm9sZGVyID0gUGF0aChyJy4vMEEuTklGVElfSW1hZ2UnKQpzZWdtZW50X2ZvbGRlciA9IFBhdGgocicuLzBCLlNlZ21lbnRhdGlvbicpCm91dF9mb2xkZXIgPSBQYXRoKHInLi8xMC5QcmUtcHJvY2Vzc2VkLXYyLycpCm91dF90ZW1wX2ZvbGRlciA9IG91dF9mb2xkZXIuam9pbnBhdGgoJy50cmFpbmluZ19vdXRwdXRzJykKc3RhdGVfZGlyID0gb3V0X3RlbXBfZm9sZGVyLmpvaW5wYXRoKCdUcmFpbmVkX3N0YXRlcycpCgoKZGVmIGNyZWF0ZV9ncmFwaCgpIC0+IE1OVFNGaWx0ZXJHcmFwaDoKICAgIHIiIiJDcmVhdGUgdGhlIG5vcm1hbGl6YXRpb24gZ3JhcGgiIiIKICAgIEcgPSBNTlRTRmlsdGVyR3JhcGgoKQoKICAgICMgQWRkIGZpbHRlciBub2RlcyB0byB0aGUgZ3JhcGguCiAgICBHLmFkZF9ub2RlKFNwYXRpYWxOb3JtKG91dF9zcGFjaW5nPVswLjQ0OTIsIDAuNDQ5MiwgNF0pKQogICAgRy5hZGRfbm9kZShIdWFuZ1RocmVzaG9sZGluZyhjbG9zaW5nX2tlcm5lbF9zaXplPTEwKSwgMCwgaXNfZXhpdD1UcnVlKSAgIyBVc2UgbWFzayB0byBiZXR0ZXIgbWF0Y2ggdGhlIGhpc3RvZ3JhbXMKICAgIEcuYWRkX25vZGUoTjRJVEtCaWFzRmllbGRDb3JyZWN0aW9uKCksIFswLCAxXSkKICAgIEcuYWRkX25vZGUoTnl1bE5vcm1hbGl6ZXIoKSwgWzIsIDFdLCBpc19leGl0PVRydWUpCiAgICBHLmFkZF9ub2RlKExpbmVhclJlc2NhbGUobWVhbj01MDAwLiwgc3RkPTI1MDAuKSwgWzMsIDFdKQogICAgRy5hZGRfbm9kZShUeXBlQ2FzdE5vZGUoc2l0ay5zaXRrVUludDE2KSwgNCwgaXNfZXhpdD1UcnVlKQogICAgRy5hZGRfbm9kZShTaWduYWxJbnRlbnNpdHlSZWJpbm5pbmcobnVtX29mX2JpbnM9MjU2LCBxdWFudGlsZXM9WzAuMDEsIDAuOTldKSwgWzQsIDFdLCBpc19leGl0PVRydWUpCiAgICBHLmFkZF9ub2RlKFNpZ25hbEludGVuc2l0eVJlYmlubmluZyhudW1fb2ZfYmlucz0yNTYsIHF1YW50aWxlcz1bMC4wMSwgMC45OV0pLCBbMywgMV0sIGlzX2V4aXQ9VHJ1ZSkKICAgIHJldHVybiBHCgpkZWYgdHJhaW5fbnl1bCgpOgogICAgIyBDcmVhdGUgdHJhaW5pbmcgb3V0cHV0cyBmb2xkZXJzCiAgICBvdXRfdGVtcF9mb2xkZXIubWtkaXIoZXhpc3Rfb2s9VHJ1ZSwgcGFyZW50cz1UcnVlKQoKICAgICMgRGVmaW5lIGlucHV0cyBmb3IgcHJlcGFyaW5nIHRyYWluaW5nIG1hdGVyaWFscwogICAgaW1hZ2VzID0gW2YgZm9yIGYgaW4gaW1hZ2VfZm9sZGVyLml0ZXJkaXIoKSBpZiBmLm5hbWUuZmluZCgnbmlpJykgIT0gLTFdCiAgICBvdXRfbmFtZXMgPSBbaS5uYW1lIGZvciBpIGluIGltYWdlc10KICAgIHogPSAoWzNdLCBvdXRfbmFtZXMsIFtvdXRfdGVtcF9mb2xkZXJdLCBpbWFnZXMpCgogICAgIyBDcmVhdGUgdGhlIGdyYXBoCiAgICBHID0gY3JlYXRlX2dyYXBoKCkKICAgIHJlc3VsdCA9IG1waV93cmFwcGVyKEcucHJlcGFyZV90cmFpbmluZ19maWxlcywgeikKCiAgICBHLnRyYWluX25vZGUoMywgb3V0X3RlbXBfZm9sZGVyLCBvdXRfdGVtcF9mb2xkZXIuam9pbnBhdGgoJ1RyYWluZWRfc3RhdGVzJykpCgpkZWYgbm9ybWFsaXplX2ltYWdlcyhmb2xkZXIpOgogICAgaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAogICAgRyA9IGNyZWF0ZV9ncmFwaCgpCiAgICBHLmxvYWRfbm9kZV9zdGF0ZXMoMywgc3RhdGVfZGlyKQogICAgIyBHLnBsb3RfZ3JhcGgoKQogICAgIyBwbHQuc2hvdygpCgogICAgIiIiCiAgICBNdWx0aS10aHJlYWQKICAgICIiIgogICAgaW1hZ2VzID0gW2YgZm9yIGYgaW4gZm9sZGVyLml0ZXJkaXIoKSBpZiBmLm5hbWUuZmluZCgnbmlpJykgIT0gLTFdCiAgICBvdXRwdXRfcHJlZml4ID0gW2ltLm5hbWUgZm9yIGltIGluIGltYWdlc10KICAgIG91dHB1dF9kaXJlY3RvcmllcyA9IChvdXRfZm9sZGVyLmpvaW5wYXRoKCcwMC5IdWFuZ01hc2snKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfZm9sZGVyLmpvaW5wYXRoKCcwMS5OeXVsTm9ybWFsaXplZCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgIG91dF9mb2xkZXIuam9pbnBhdGgoJzAyLk55dWxOb3JtUmVzY2FsZWQnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfZm9sZGVyLmpvaW5wYXRoKCcwMy5OeXVsTm9ybVJlc2NhbGVkQmlubmVkJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0X2ZvbGRlci5qb2lucGF0aCgnMDQuTnl1bE5vcm1CaW5uZWQnKQogICAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAjIFByZXBhcmUgbXBpIGlucHV0cwogICAgeiA9IFtvdXRwdXRfcHJlZml4LCBbb3V0cHV0X2RpcmVjdG9yaWVzXSwgaW1hZ2VzXQogICAgIyBtcGlfd3JhcHBlcihHLm1waV9leGVjdXRlLCB6LCBudW1fd29ya2VyPTQpCiAgICBmb3Igcm93IGluIHJlcGVhdF96aXAoKnopOgogICAgICAgIEcubXBpX2V4ZWN1dGUoKnJvdykKCgoKCiMgSWYgdGhpcyBwcm90ZWN0b3IgaXMgYWJzZW50LCB3aW5kb3dzIHB5dGhvbiBtaWdodCBnbyBpbnRvIHJlY3Vyc2l2ZSBpbXBvcnQgbG9vcC4KaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIG9zLmNoZGlyKHInL2hvbWUvbHdvbmcvU3RvcmFnZS9EYXRhL05QQ19SYWRpb21pY3MnKQogICAgIyB0cmFpbl9ueXVsKCkKICAgIG5vcm1hbGl6ZV9pbWFnZXMoaW1hZ2VfZm9sZGVyKQo8fGZpbV9zdWZmaXh8Pgpmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKZnJvbSBtbnRzLmZpbHRlcnMuZ2VvbSBpbXBvcnQgKgpmcm9tIG1udHMuZmlsdGVycy5pbnRlbnNpdHkgaW1wb3J0ICoKZnJvbSBtbnRzLmZpbHRlcnMubW50c19maWx0ZXJzIGltcG9ydCBNTlRTRmlsdGVyR3JhcGgKPHxmaW1fZW5kfD4="]
["99cf58356437f98b298be860c77f872d0c4b91dd-1","99cf58356437f98b298be860c77f872d0c4b91dd","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKIyBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KIwojIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQojIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KCiIiIk1vZGVsIGFuZCBsb3NzIGNvbnN0cnVjdGlvbiBmdW5jdGlvbnMuIiIiCgppbXBvcnQgdG9yY2gKCmZyb20geG5hcy5jb3JlLmNvbmZpZyBpbXBvcnQgY2ZnCmZyb20geG5hcy5zZWFyY2hfYWxnb3JpdGhtLkFTTkcgaW1wb3J0IEFTTkcsIER5bmFtaWNfQVNORwpmcm9tIHhuYXMuc2VhcmNoX2FsZ29yaXRobS5ERFBOQVMgaW1wb3J0IENhdGVnb3JpY2FsRERQTkFTCmZyb20geG5hcy5zZWFyY2hfYWxnb3JpdGhtLk1ERU5BUyBpbXBvcnQgQ2F0ZWdvcmljYWxNREVOQVMKZnJvbSB4bmFzLnNlYXJjaF9hbGdvcml0aG0uTUlHTyBpbXBvcnQgTUlHTwpmcm9tIHhuYXMuc2VhcmNoX2FsZ29yaXRobS5wZGFydHMgaW1wb3J0IF9QZGFydHNDTk4KZnJvbSB4bmFzLnNlYXJjaF9hbGdvcml0aG0ucGNfZGFydHMgaW1wb3J0IF9QY2RhcnRzQ05OCmZyb20geG5hcy5zZWFyY2hfYWxnb3JpdGhtLlNORyBpbXBvcnQgU05HLCBEeW5hbWljX1NORwpmcm9tIHhuYXMuc2VhcmNoX3NwYWNlLmNlbGxfYmFzZWQgaW1wb3J0IF9EYXJ0c0NOTiwgX05BU2JlbmNoMjAxCmZyb20geG5hcy5zZWFyY2hfc3BhY2UubWJfdjNfY25uIGltcG9ydCBidWlsZF9zdXBlcl9uZXQKCiMgU3VwcG9ydGVkIG1vZGVscwpfc3BhY2VzID0geyJkYXJ0cyI6IF9EYXJ0c0NOTiwgIm5hc2JlbmNoMjAxIjogX05BU2JlbmNoMjAxLCAib2ZhIjogYnVpbGRfc3VwZXJfbmV0LCAicGNkYXJ0cyI6IF9QY2RhcnRzQ05OLAogICAgICAgICAgICJwcm94eWxlc3MiOiBidWlsZF9zdXBlcl9uZXQsICJnb29nbGUiOiBidWlsZF9zdXBlcl9uZXQsICJwZGFydHMiOiBfUGRhcnRzQ05OfQoKIyBTdXBwb3J0ZWQgbG9zcyBmdW5jdGlvbnMKX2xvc3NfZnVucyA9IHsiY3Jvc3NfZW50cm9weSI6IHRvcmNoLm5uLkNyb3NzRW50cm9weUxvc3N9CgoKZGVmIGdldF9zcGFjZSgpOgogICAgIiIiR2V0cyB0aGUgbW9kZWwgY2xhc3Mgc3BlY2lmaWVkIGluIHRoZSBjb25maWcuIiIiCiAgICBlcnJfc3RyID0gIk1vZGVsIHR5cGUgJ3t9JyBub3Qgc3VwcG9ydGVkIgogICAgYXNzZXJ0IGNmZy5TUEFDRS5OQU1FIGluIF9zcGFjZXMua2V5cygpLCBlcnJfc3RyLmZvcm1hdChjZmcuU1BBQ0UuTkFNRSkKICAgIHJldHVybiBfc3BhY2VzW2NmZy5TUEFDRS5OQU1FXQoKCmRlZiBnZXRfbG9zc19mdW4oKToKICAgICIiIkdldHMgdGhlIGxvc3MgZnVuY3Rpb24gY2xhc3Mgc3BlY2lmaWVkIGluIHRoZSBjb25maWcuIiIiCiAgICBlcnJfc3RyID0gIkxvc3MgZnVuY3Rpb24gdHlwZSAne30nIG5vdCBzdXBwb3J0ZWQiCjx8ZmltX2hvbGV8PgpkZWYgYnVpbGRfc3BhY2UoKToKICAgICIiIkJ1aWxkcyB0aGUgbW9kZWwuIiIiCiAgICByZXR1cm4gZ2V0X3NwYWNlKCkoKQoKCmRlZiBidWlsZF9sb3NzX2Z1bigpOgogICAgIiIiQnVpbGQgdGhlIGxvc3MgZnVuY3Rpb24uIiIiCiAgICByZXR1cm4gZ2V0X2xvc3NfZnVuKCkoKQoKCmRlZiByZWdpc3Rlcl9zcGFjZShuYW1lLCBjdG9yKToKICAgICIiIlJlZ2lzdGVycyBhIG1vZGVsIGR5bmFtaWNhbGx5LiIiIgogICAgX3NwYWNlc1tuYW1lXSA9IGN0b3IKCgpkZWYgcmVnaXN0ZXJfbG9zc19mdW4obmFtZSwgY3Rvcik6CiAgICAiIiJSZWdpc3RlcnMgYSBsb3NzIGZ1bmN0aW9uIGR5bmFtaWNhbGx5LiIiIgogICAgX2xvc3NfZnVuc1tuYW1lXSA9IGN0b3IKCgpkZWYgc25nX2J1aWxkZXIoY2F0ZWdvcnkpOgogICAgaWYgY2ZnLlNORy5OQU1FID09ICdNREVOQVMnOgogICAgICAgIHJldHVybiBDYXRlZ29yaWNhbE1ERU5BUyhjYXRlZ29yeSwgY2ZnLlNORy5USEVUQV9MUikKICAgIGVsaWYgY2ZnLlNORy5OQU1FID09ICdERFBOQVMnOgogICAgICAgIHJldHVybiBDYXRlZ29yaWNhbEREUE5BUyhjYXRlZ29yeSwgY2ZnLlNORy5QUlVOSU5HX1NURVApCiAgICBlbGlmIGNmZy5TTkcuTkFNRSA9PSAnU05HJzoKICAgICAgICByZXR1cm4gU05HKGNhdGVnb3J5KQogICAgZWxpZiBjZmcuU05HLk5BTUUgPT0gJ0FTTkcnOgogICAgICAgIHJldHVybiBBU05HKGNhdGVnb3J5KQogICAgZWxpZiBjZmcuU05HLk5BTUUgPT0gJ2R5bmFtaWNfU05HJzoKICAgICAgICByZXR1cm4gRHluYW1pY19TTkcoY2F0ZWdvcnksIHN0ZXA9Y2ZnLlNORy5QUlVOSU5HX1NURVAsIHBydW5pbmc9Y2ZnLlNORy5QUlVOSU5HKQogICAgZWxpZiBjZmcuU05HLk5BTUUgPT0gJ2R5bmFtaWNfQVNORyc6CiAgICAgICAgcmV0dXJuIER5bmFtaWNfQVNORyhjYXRlZ29yeSwgc3RlcD1jZmcuU05HLlBSVU5JTkdfU1RFUCwgcHJ1bmluZz1jZmcuU05HLlBSVU5JTkcpCiAgICBlbGlmIGNmZy5TTkcuTkFNRSA9PSAnTUlHTyc6CiAgICAgICAgcmV0dXJuIE1JR08oY2F0ZWdvcmllcz1jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICBzdGVwPWNmZy5TTkcuUFJVTklOR19TVEVQLAogICAgICAgICAgICAgICAgICAgIHBydW5pbmc9Y2ZnLlNORy5QUlVOSU5HLCBzYW1wbGVfd2l0aF9wcm9iPWNmZy5TTkcuUFJPQl9TQU1QTElORywKICAgICAgICAgICAgICAgICAgICB1dGlsaXR5X2Z1bmN0aW9uPWNmZy5TTkcuVVRJTElUWSwgdXRpbGl0eV9mdW5jdGlvbl9oeXBlcj1jZmcuU05HLlVUSUxJVFlfRkFDVE9SLAogICAgICAgICAgICAgICAgICAgIG1vbWVudHVtPWNmZy5TTkcuTU9NRU5UVU0sIGdhbW1hPWNmZy5TTkcuR0FNTUEsIHNhbXBsaW5nX251bWJlcl9wZXJfZWRnZT1jZmcuU05HLlNBTVBMSU5HX1BFUl9FREdFKQogICAgZWxzZToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgoKZGVmIGxyX3NjaGVkdWxlcl9idWlsZGVyKHdfb3B0aW0pOgogICAgaWYgY2ZnLk9QVElNLkxSX1BPTElDWSA9PSAnY29zJzoKICAgICAgICByZXR1cm4gdG9yY2gub3B0aW0ubHJfc2NoZWR1bGVyLkNvc2luZUFubmVhbGluZ0xSKAogICAgICAgICAgICB3X29wdGltLCBjZmcuT1BUSU0uTUFYX0VQT0NILCBldGFfbWluPWNmZy5PUFRJTS5NSU5fTFIpCiAgICBlbGlmIGNmZy5PUFRJTS5MUl9QT0xJQ1kgPT0gJ3N0ZXAnOgogICAgICAgIHJldHVybiB0b3JjaC5vcHRpbS5scl9zY2hlZHVsZXIuTXVsdGlTdGVwTFIod19vcHRpbSwgY2ZnLk9QVElNLlNURVBTLCBnYW1tYT1jZmcuT1BUSU0uTFJfTVVMVCkKICAgIGVsc2U6CiAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgo8fGZpbV9zdWZmaXh8PgogICAgYXNzZXJ0IGNmZy5NT0RFTC5MT1NTX0ZVTiBpbiBfbG9zc19mdW5zLmtleXMoKSwgZXJyX3N0ci5mb3JtYXQoY2ZnLlRSQUlOLkxPU1MpCiAgICByZXR1cm4gX2xvc3NfZnVuc1tjZmcuTU9ERUwuTE9TU19GVU5dCgoKPHxmaW1fZW5kfD4="]
["99cf58356437f98b298be860c77f872d0c4b91dd-2","99cf58356437f98b298be860c77f872d0c4b91dd","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKIyBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KIwojIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQojIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KCiIiIk1vZGVsIGFuZCBsb3NzIGNvbnN0cnVjdGlvbiBmdW5jdGlvbnMuIiIiCgppbXBvcnQgdG9yY2gKCmZyb20geG5hcy5jb3JlLmNvbmZpZyBpbXBvcnQgY2ZnCmZyb20geG5hcy5zZWFyY2hfYWxnb3JpdGhtLkFTTkcgaW1wb3J0IEFTTkcsIER5bmFtaWNfQVNORwpmcm9tIHhuYXMuc2VhcmNoX2FsZ29yaXRobS5ERFBOQVMgaW1wb3J0IENhdGVnb3JpY2FsRERQTkFTCmZyb20geG5hcy5zZWFyY2hfYWxnb3JpdGhtLk1ERU5BUyBpbXBvcnQgQ2F0ZWdvcmljYWxNREVOQVMKZnJvbSB4bmFzLnNlYXJjaF9hbGdvcml0aG0uTUlHTyBpbXBvcnQgTUlHTwpmcm9tIHhuYXMuc2VhcmNoX2FsZ29yaXRobS5wZGFydHMgaW1wb3J0IF9QZGFydHNDTk4KZnJvbSB4bmFzLnNlYXJjaF9hbGdvcml0aG0ucGNfZGFydHMgaW1wb3J0IF9QY2RhcnRzQ05OCmZyb20geG5hcy5zZWFyY2hfYWxnb3JpdGhtLlNORyBpbXBvcnQgU05HLCBEeW5hbWljX1NORwpmcm9tIHhuYXMuc2VhcmNoX3NwYWNlLmNlbGxfYmFzZWQgaW1wb3J0IF9EYXJ0c0NOTiwgX05BU2JlbmNoMjAxCmZyb20geG5hcy5zZWFyY2hfc3BhY2UubWJfdjNfY25uIGltcG9ydCBidWlsZF9zdXBlcl9uZXQKCiMgU3VwcG9ydGVkIG1vZGVscwpfc3BhY2VzID0geyJkYXJ0cyI6IF9EYXJ0c0NOTiwgIm5hc2JlbmNoMjAxIjogX05BU2JlbmNoMjAxLCAib2ZhIjogYnVpbGRfc3VwZXJfbmV0LCAicGNkYXJ0cyI6IF9QY2RhcnRzQ05OLAogICAgICAgICAgICJwcm94eWxlc3MiOiBidWlsZF9zdXBlcl9uZXQsICJnb29nbGUiOiBidWlsZF9zdXBlcl9uZXQsICJwZGFydHMiOiBfUGRhcnRzQ05OfQoKIyBTdXBwb3J0ZWQgbG9zcyBmdW5jdGlvbnMKX2xvc3NfZnVucyA9IHsiY3Jvc3NfZW50cm9weSI6IHRvcmNoLm5uLkNyb3NzRW50cm9weUxvc3N9CgoKZGVmIGdldF9zcGFjZSgpOgo8fGZpbV9ob2xlfD4KCgpkZWYgZ2V0X2xvc3NfZnVuKCk6CiAgICAiIiJHZXRzIHRoZSBsb3NzIGZ1bmN0aW9uIGNsYXNzIHNwZWNpZmllZCBpbiB0aGUgY29uZmlnLiIiIgogICAgZXJyX3N0ciA9ICJMb3NzIGZ1bmN0aW9uIHR5cGUgJ3t9JyBub3Qgc3VwcG9ydGVkIgogICAgYXNzZXJ0IGNmZy5NT0RFTC5MT1NTX0ZVTiBpbiBfbG9zc19mdW5zLmtleXMoKSwgZXJyX3N0ci5mb3JtYXQoY2ZnLlRSQUlOLkxPU1MpCiAgICByZXR1cm4gX2xvc3NfZnVuc1tjZmcuTU9ERUwuTE9TU19GVU5dCgoKZGVmIGJ1aWxkX3NwYWNlKCk6CiAgICAiIiJCdWlsZHMgdGhlIG1vZGVsLiIiIgogICAgcmV0dXJuIGdldF9zcGFjZSgpKCkKCgpkZWYgYnVpbGRfbG9zc19mdW4oKToKICAgICIiIkJ1aWxkIHRoZSBsb3NzIGZ1bmN0aW9uLiIiIgogICAgcmV0dXJuIGdldF9sb3NzX2Z1bigpKCkKCgpkZWYgcmVnaXN0ZXJfc3BhY2UobmFtZSwgY3Rvcik6CiAgICAiIiJSZWdpc3RlcnMgYSBtb2RlbCBkeW5hbWljYWxseS4iIiIKICAgIF9zcGFjZXNbbmFtZV0gPSBjdG9yCgoKZGVmIHJlZ2lzdGVyX2xvc3NfZnVuKG5hbWUsIGN0b3IpOgogICAgIiIiUmVnaXN0ZXJzIGEgbG9zcyBmdW5jdGlvbiBkeW5hbWljYWxseS4iIiIKICAgIF9sb3NzX2Z1bnNbbmFtZV0gPSBjdG9yCgoKZGVmIHNuZ19idWlsZGVyKGNhdGVnb3J5KToKICAgIGlmIGNmZy5TTkcuTkFNRSA9PSAnTURFTkFTJzoKICAgICAgICByZXR1cm4gQ2F0ZWdvcmljYWxNREVOQVMoY2F0ZWdvcnksIGNmZy5TTkcuVEhFVEFfTFIpCiAgICBlbGlmIGNmZy5TTkcuTkFNRSA9PSAnRERQTkFTJzoKICAgICAgICByZXR1cm4gQ2F0ZWdvcmljYWxERFBOQVMoY2F0ZWdvcnksIGNmZy5TTkcuUFJVTklOR19TVEVQKQogICAgZWxpZiBjZmcuU05HLk5BTUUgPT0gJ1NORyc6CiAgICAgICAgcmV0dXJuIFNORyhjYXRlZ29yeSkKICAgIGVsaWYgY2ZnLlNORy5OQU1FID09ICdBU05HJzoKICAgICAgICByZXR1cm4gQVNORyhjYXRlZ29yeSkKICAgIGVsaWYgY2ZnLlNORy5OQU1FID09ICdkeW5hbWljX1NORyc6CiAgICAgICAgcmV0dXJuIER5bmFtaWNfU05HKGNhdGVnb3J5LCBzdGVwPWNmZy5TTkcuUFJVTklOR19TVEVQLCBwcnVuaW5nPWNmZy5TTkcuUFJVTklORykKICAgIGVsaWYgY2ZnLlNORy5OQU1FID09ICdkeW5hbWljX0FTTkcnOgogICAgICAgIHJldHVybiBEeW5hbWljX0FTTkcoY2F0ZWdvcnksIHN0ZXA9Y2ZnLlNORy5QUlVOSU5HX1NURVAsIHBydW5pbmc9Y2ZnLlNORy5QUlVOSU5HKQogICAgZWxpZiBjZmcuU05HLk5BTUUgPT0gJ01JR08nOgogICAgICAgIHJldHVybiBNSUdPKGNhdGVnb3JpZXM9Y2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgc3RlcD1jZmcuU05HLlBSVU5JTkdfU1RFUCwKICAgICAgICAgICAgICAgICAgICBwcnVuaW5nPWNmZy5TTkcuUFJVTklORywgc2FtcGxlX3dpdGhfcHJvYj1jZmcuU05HLlBST0JfU0FNUExJTkcsCiAgICAgICAgICAgICAgICAgICAgdXRpbGl0eV9mdW5jdGlvbj1jZmcuU05HLlVUSUxJVFksIHV0aWxpdHlfZnVuY3Rpb25faHlwZXI9Y2ZnLlNORy5VVElMSVRZX0ZBQ1RPUiwKICAgICAgICAgICAgICAgICAgICBtb21lbnR1bT1jZmcuU05HLk1PTUVOVFVNLCBnYW1tYT1jZmcuU05HLkdBTU1BLCBzYW1wbGluZ19udW1iZXJfcGVyX2VkZ2U9Y2ZnLlNORy5TQU1QTElOR19QRVJfRURHRSkKICAgIGVsc2U6CiAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKCmRlZiBscl9zY2hlZHVsZXJfYnVpbGRlcih3X29wdGltKToKICAgIGlmIGNmZy5PUFRJTS5MUl9QT0xJQ1kgPT0gJ2Nvcyc6CiAgICAgICAgcmV0dXJuIHRvcmNoLm9wdGltLmxyX3NjaGVkdWxlci5Db3NpbmVBbm5lYWxpbmdMUigKICAgICAgICAgICAgd19vcHRpbSwgY2ZnLk9QVElNLk1BWF9FUE9DSCwgZXRhX21pbj1jZmcuT1BUSU0uTUlOX0xSKQogICAgZWxpZiBjZmcuT1BUSU0uTFJfUE9MSUNZID09ICdzdGVwJzoKICAgICAgICByZXR1cm4gdG9yY2gub3B0aW0ubHJfc2NoZWR1bGVyLk11bHRpU3RlcExSKHdfb3B0aW0sIGNmZy5PUFRJTS5TVEVQUywgZ2FtbWE9Y2ZnLk9QVElNLkxSX01VTFQpCiAgICBlbHNlOgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKPHxmaW1fc3VmZml4fD4KICAgICIiIkdldHMgdGhlIG1vZGVsIGNsYXNzIHNwZWNpZmllZCBpbiB0aGUgY29uZmlnLiIiIgogICAgZXJyX3N0ciA9ICJNb2RlbCB0eXBlICd7fScgbm90IHN1cHBvcnRlZCIKICAgIGFzc2VydCBjZmcuU1BBQ0UuTkFNRSBpbiBfc3BhY2VzLmtleXMoKSwgZXJyX3N0ci5mb3JtYXQoY2ZnLlNQQUNFLk5BTUUpCiAgICByZXR1cm4gX3NwYWNlc1tjZmcuU1BBQ0UuTkFNRV0KPHxmaW1fZW5kfD4="]
["1726f5bcd294d696bd72c31dd9d6de442e8cee8f-1","1726f5bcd294d696bd72c31dd9d6de442e8cee8f","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiBVVEYtOCAtKi0KCmltcG9ydCBzeXMKaW1wb3J0IGpzb24KaW1wb3J0IGNvcHkKCgpjbGFzcyBDb25maWc6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5fX2NvbmZpZyA9IE5vbmUKICAgICAgICBzZWxmLl9fdGVtcF9jb25maWcgPSBOb25lCiAgICAgICAgc2VsZi5fX3NldF9kZWZhdWx0KCkKCiAgICBkZWYgX19zZXRfZGVmYXVsdChzZWxmKToKICAgICAgICB3aXRoIG9wZW4oImNvbmZpZy5qc29uIiwgJ3InKSBhcyBfZjoKICAgICAgICAgICAgc2VsZi5fX2NvbmZpZyA9IGpzb24ubG9hZHMoX2YucmVhZCgpKQogICAgICAgIHNlbGYuX190ZW1wX2NvbmZpZyA9IGNvcHkuZGVlcGNvcHkoc2VsZi5fX2NvbmZpZykKCiAgICAgICAgc2VsZi5fX3RlbXBfY29uZmlnWyJjdXJyZW50X2RpciJdID0gc3lzLnBhdGhbMF0KICAgICAgICBzZWxmLl9fdGVtcF9jb25maWdbInZpZGVvX2RpciJdID0gc2VsZi5fX3RlbXBfY29uZmlnWyJjdXJyZW50X2RpciJdICsgc2VsZi5fX2NvbmZpZ1sidmlkZW9fZGlyIl0KICAgICAgICBzZWxmLl9fdGVtcF9jb25maWdbImJpbmFyeV90bXAiXSA9IHNlbGYuX190ZW1wX2NvbmZpZ1siY3VycmVudF9kaXIiXSArIHNlbGYuX19jb25maWdbImJpbmFyeV90bXAiXQogICAgICAgIHNlbGYuX190ZW1wX2NvbmZpZ1sib3V0cHV0X2RpciJdID0gc2VsZi5fX3RlbXBfY29uZmlnWyJjdXJyZW50X2RpciJdICsgc2VsZi5fX2NvbmZpZ1sib3V0cHV0X2RpciJdCgogICAgZGVmIHNldF92aWRlb19kaXIoc2VsZiwgX2Rpcik6CiAgICAgICAgc2VsZi5fX3RlbXBfY29uZmlnWyJ2aWRlb19kaXIiXSA9IF9kaXIgKyAiLyIgICMg5oyH5a6a6KeG6aKR5rqQ5paH5Lu255uu5b2VCgogICAgZGVmIHNldF92aWRlb19uYW1lKHNlbGYsIF9uYW1lKToKICAgICAgICBzZWxmLl9fdGVtcF9jb25maWdbInZpZGVvX25hbWUiXSA9IF9uYW1lWzpfbmFtZS5yZmluZCgiLiIpXQogICAgICAgIHNlbGYuX190ZW1wX2NvbmZpZ1sidmlkZW9fc3VmZml4Il0gPSBfbmFtZVtfbmFtZS5yZmluZCgiLiIpOl0KICAgICAgICBzZWxmLl9fdGVtcF9jb25maWdbInZpZGVvX3BhdGgiXSA9IHNlbGYuX190ZW1wX2NvbmZpZ1sidmlkZW9fZGlyIl0gKyBfbmFtZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIHNldF92aWRlb19pbmZvKHNlbGYsIF93LCBfaCwgX2ZjLCBfZnBzKToKICAgICAgICBzZWxmLl9fdGVtcF9jb25maWdbInZpZGVvX3dpZHRoIl0gPSBfdwogICAgICAgIHNlbGYuX190ZW1wX2NvbmZpZ1sidmlkZW9faGVpZ2h0Il0gPSBfaAo8fGZpbV9lbmR8Pg=="]
["1726f5bcd294d696bd72c31dd9d6de442e8cee8f-2","1726f5bcd294d696bd72c31dd9d6de442e8cee8f","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiBVVEYtOCAtKi0KCjx8ZmltX2hvbGV8PgoKY2xhc3MgQ29uZmlnOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYuX19jb25maWcgPSBOb25lCiAgICAgICAgc2VsZi5fX3RlbXBfY29uZmlnID0gTm9uZQogICAgICAgIHNlbGYuX19zZXRfZGVmYXVsdCgpCgogICAgZGVmIF9fc2V0X2RlZmF1bHQoc2VsZik6CiAgICAgICAgd2l0aCBvcGVuKCJjb25maWcuanNvbiIsICdyJykgYXMgX2Y6CiAgICAgICAgICAgIHNlbGYuX19jb25maWcgPSBqc29uLmxvYWRzKF9mLnJlYWQoKSkKICAgICAgICBzZWxmLl9fdGVtcF9jb25maWcgPSBjb3B5LmRlZXBjb3B5KHNlbGYuX19jb25maWcpCgogICAgICAgIHNlbGYuX190ZW1wX2NvbmZpZ1siY3VycmVudF9kaXIiXSA9IHN5cy5wYXRoWzBdCiAgICAgICAgc2VsZi5fX3RlbXBfY29uZmlnWyJ2aWRlb19kaXIiXSA9IHNlbGYuX190ZW1wX2NvbmZpZ1siY3VycmVudF9kaXIiXSArIHNlbGYuX19jb25maWdbInZpZGVvX2RpciJdCiAgICAgICAgc2VsZi5fX3RlbXBfY29uZmlnWyJiaW5hcnlfdG1wIl0gPSBzZWxmLl9fdGVtcF9jb25maWdbImN1cnJlbnRfZGlyIl0gKyBzZWxmLl9fY29uZmlnWyJiaW5hcnlfdG1wIl0KICAgICAgICBzZWxmLl9fdGVtcF9jb25maWdbIm91dHB1dF9kaXIiXSA9IHNlbGYuX190ZW1wX2NvbmZpZ1siY3VycmVudF9kaXIiXSArIHNlbGYuX19jb25maWdbIm91dHB1dF9kaXIiXQoKICAgIGRlZiBzZXRfdmlkZW9fZGlyKHNlbGYsIF9kaXIpOgogICAgICAgIHNlbGYuX190ZW1wX2NvbmZpZ1sidmlkZW9fZGlyIl0gPSBfZGlyICsgIi8iICAjIOaMh+Wumuinhumikea6kOaWh+S7tuebruW9lQoKICAgIGRlZiBzZXRfdmlkZW9fbmFtZShzZWxmLCBfbmFtZSk6CiAgICAgICAgc2VsZi5fX3RlbXBfY29uZmlnWyJ2aWRlb19uYW1lIl0gPSBfbmFtZVs6X25hbWUucmZpbmQoIi4iKV0KICAgICAgICBzZWxmLl9fdGVtcF9jb25maWdbInZpZGVvX3N1ZmZpeCJdID0gX25hbWVbX25hbWUucmZpbmQoIi4iKTpdCiAgICAgICAgc2VsZi5fX3RlbXBfY29uZmlnWyJ2aWRlb19wYXRoIl0gPSBzZWxmLl9fdGVtcF9jb25maWdbInZpZGVvX2RpciJdICsgX25hbWUKCiAgICBkZWYgc2V0X3ZpZGVvX2luZm8oc2VsZiwgX3csIF9oLCBfZmMsIF9mcHMpOgogICAgICAgIHNlbGYuX190ZW1wX2NvbmZpZ1sidmlkZW9fd2lkdGgiXSA9IF93CiAgICAgICAgc2VsZi5fX3RlbXBfY29uZmlnWyJ2aWRlb19oZWlnaHQiXSA9IF9oCiAgICAgICAgc2VsZi5fX3RlbXBfY29uZmlnWyJmcmFtZV9jb3VudCJdID0gX2ZjCiAgICAgICAgc2VsZi5fX3RlbXBfY29uZmlnWyJmcHMiXSA9IF9mcHMKCiAgICBkZWYgc2V0X3BhcmFtcyhzZWxmLCBfeWYsIF95dCwgX2J0aCk6CiAgICAgICAgc2VsZi5fX3RlbXBfY29uZmlnWyJ5X2Zyb20iXSA9IF95ZgogICAgICAgIHNlbGYuX190ZW1wX2NvbmZpZ1sieV90byJdID0gX3l0CiAgICAgICAgc2VsZi5fX3RlbXBfY29uZmlnWyJiaW5hcnlfdGhyZXNob2xkIl0gPSBfYnRoCgogICAgZGVmIHNldF9hcGlfaW5mbyhzZWxmLCBfYmFrLCBfYnNrLCBfYm9hLCBfYm9sLCBfdGFpLCBfdGFrLCBfZXhwKToKICAgICAgICBzZWxmLl9fY29uZmlnWyJiZF9hcGlfa2V5Il0gPSBzZWxmLl9fdGVtcF9jb25maWdbImJkX2FwaV9rZXkiXSA9IF9iYWsKICAgICAgICBzZWxmLl9fY29uZmlnWyJiZF9zZWNyZXRfa2V5Il0gPSBzZWxmLl9fdGVtcF9jb25maWdbImJkX3NlY3JldF9rZXkiXSA9IF9ic2sKICAgICAgICBzZWxmLl9fY29uZmlnWyJiZF9vY3JfYXBpIl0gPSBzZWxmLl9fdGVtcF9jb25maWdbImJkX29jcl9hcGkiXSA9IF9ib2EKICAgICAgICBzZWxmLl9fY29uZmlnWyJiZF9vY3JfbGFuZyJdID0gc2VsZi5fX3RlbXBfY29uZmlnWyJiZF9vY3JfbGFuZyJdID0gX2JvbAogICAgICAgIHNlbGYuX19jb25maWdbInR4X2FwcF9pZCJdID0gc2VsZi5fX3RlbXBfY29uZmlnWyJ0eF9hcHBfaWQiXSA9IF90YWkKICAgICAgICBzZWxmLl9fY29uZmlnWyJ0eF9hcHBfa2V5Il0gPSBzZWxmLl9fdGVtcF9jb25maWdbInR4X2FwcF9rZXkiXSA9IF90YWsKICAgICAgICBzZWxmLl9fY29uZmlnWyJleHBlcmllbmNlIl0gPSBzZWxmLl9fdGVtcF9jb25maWdbImV4cGVyaWVuY2UiXSA9IF9leHAKCiAgICBkZWYgc2F2ZV9qc29uKHNlbGYpOgogICAgICAgIHdpdGggb3BlbigiY29uZmlnLmpzb24iLCAndycpIGFzIF9mOgogICAgICAgICAgICBqc29uLmR1bXAoc2VsZi5fX2NvbmZpZywgX2YsIGluZGVudD0iXHQiKQoKICAgIGRlZiBnZXRfdmFsdWUoc2VsZiwga2V5KToKICAgICAgICByZXR1cm4gc2VsZi5fX3RlbXBfY29uZmlnW2tleV0KPHxmaW1fc3VmZml4fD4KaW1wb3J0IHN5cwppbXBvcnQganNvbgppbXBvcnQgY29weQoKPHxmaW1fZW5kfD4="]
["1726f5bcd294d696bd72c31dd9d6de442e8cee8f-3","1726f5bcd294d696bd72c31dd9d6de442e8cee8f","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiBVVEYtOCAtKi0KCmltcG9ydCBzeXMKaW1wb3J0IGpzb24KaW1wb3J0IGNvcHkKCgpjbGFzcyBDb25maWc6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5fX2NvbmZpZyA9IE5vbmUKICAgICAgICBzZWxmLl9fdGVtcF9jb25maWcgPSBOb25lCiAgICAgICAgc2VsZi5fX3NldF9kZWZhdWx0KCkKCiAgICBkZWYgX19zZXRfZGVmYXVsdChzZWxmKToKICAgICAgICB3aXRoIG9wZW4oImNvbmZpZy5qc29uIiwgJ3InKSBhcyBfZjoKICAgICAgICAgICAgc2VsZi5fX2NvbmZpZyA9IGpzb24ubG9hZHMoX2YucmVhZCgpKQogICAgICAgIHNlbGYuX190ZW1wX2NvbmZpZyA9IGNvcHkuZGVlcGNvcHkoc2VsZi5fX2NvbmZpZykKCiAgICAgICAgc2VsZi5fX3RlbXBfY29uZmlnWyJjdXJyZW50X2RpciJdID0gc3lzLnBhdGhbMF0KPHxmaW1faG9sZXw+CiAgICBkZWYgc2V0X3ZpZGVvX2RpcihzZWxmLCBfZGlyKToKICAgICAgICBzZWxmLl9fdGVtcF9jb25maWdbInZpZGVvX2RpciJdID0gX2RpciArICIvIiAgIyDmjIflrprop4bpopHmupDmlofku7bnm67lvZUKCiAgICBkZWYgc2V0X3ZpZGVvX25hbWUoc2VsZiwgX25hbWUpOgogICAgICAgIHNlbGYuX190ZW1wX2NvbmZpZ1sidmlkZW9fbmFtZSJdID0gX25hbWVbOl9uYW1lLnJmaW5kKCIuIildCiAgICAgICAgc2VsZi5fX3RlbXBfY29uZmlnWyJ2aWRlb19zdWZmaXgiXSA9IF9uYW1lW19uYW1lLnJmaW5kKCIuIik6XQogICAgICAgIHNlbGYuX190ZW1wX2NvbmZpZ1sidmlkZW9fcGF0aCJdID0gc2VsZi5fX3RlbXBfY29uZmlnWyJ2aWRlb19kaXIiXSArIF9uYW1lCgogICAgZGVmIHNldF92aWRlb19pbmZvKHNlbGYsIF93LCBfaCwgX2ZjLCBfZnBzKToKICAgICAgICBzZWxmLl9fdGVtcF9jb25maWdbInZpZGVvX3dpZHRoIl0gPSBfdwogICAgICAgIHNlbGYuX190ZW1wX2NvbmZpZ1sidmlkZW9faGVpZ2h0Il0gPSBfaAogICAgICAgIHNlbGYuX190ZW1wX2NvbmZpZ1siZnJhbWVfY291bnQiXSA9IF9mYwogICAgICAgIHNlbGYuX190ZW1wX2NvbmZpZ1siZnBzIl0gPSBfZnBzCgogICAgZGVmIHNldF9wYXJhbXMoc2VsZiwgX3lmLCBfeXQsIF9idGgpOgogICAgICAgIHNlbGYuX190ZW1wX2NvbmZpZ1sieV9mcm9tIl0gPSBfeWYKICAgICAgICBzZWxmLl9fdGVtcF9jb25maWdbInlfdG8iXSA9IF95dAogICAgICAgIHNlbGYuX190ZW1wX2NvbmZpZ1siYmluYXJ5X3RocmVzaG9sZCJdID0gX2J0aAoKICAgIGRlZiBzZXRfYXBpX2luZm8oc2VsZiwgX2JhaywgX2JzaywgX2JvYSwgX2JvbCwgX3RhaSwgX3RhaywgX2V4cCk6CiAgICAgICAgc2VsZi5fX2NvbmZpZ1siYmRfYXBpX2tleSJdID0gc2VsZi5fX3RlbXBfY29uZmlnWyJiZF9hcGlfa2V5Il0gPSBfYmFrCiAgICAgICAgc2VsZi5fX2NvbmZpZ1siYmRfc2VjcmV0X2tleSJdID0gc2VsZi5fX3RlbXBfY29uZmlnWyJiZF9zZWNyZXRfa2V5Il0gPSBfYnNrCiAgICAgICAgc2VsZi5fX2NvbmZpZ1siYmRfb2NyX2FwaSJdID0gc2VsZi5fX3RlbXBfY29uZmlnWyJiZF9vY3JfYXBpIl0gPSBfYm9hCiAgICAgICAgc2VsZi5fX2NvbmZpZ1siYmRfb2NyX2xhbmciXSA9IHNlbGYuX190ZW1wX2NvbmZpZ1siYmRfb2NyX2xhbmciXSA9IF9ib2wKICAgICAgICBzZWxmLl9fY29uZmlnWyJ0eF9hcHBfaWQiXSA9IHNlbGYuX190ZW1wX2NvbmZpZ1sidHhfYXBwX2lkIl0gPSBfdGFpCiAgICAgICAgc2VsZi5fX2NvbmZpZ1sidHhfYXBwX2tleSJdID0gc2VsZi5fX3RlbXBfY29uZmlnWyJ0eF9hcHBfa2V5Il0gPSBfdGFrCiAgICAgICAgc2VsZi5fX2NvbmZpZ1siZXhwZXJpZW5jZSJdID0gc2VsZi5fX3RlbXBfY29uZmlnWyJleHBlcmllbmNlIl0gPSBfZXhwCgogICAgZGVmIHNhdmVfanNvbihzZWxmKToKICAgICAgICB3aXRoIG9wZW4oImNvbmZpZy5qc29uIiwgJ3cnKSBhcyBfZjoKICAgICAgICAgICAganNvbi5kdW1wKHNlbGYuX19jb25maWcsIF9mLCBpbmRlbnQ9Ilx0IikKCiAgICBkZWYgZ2V0X3ZhbHVlKHNlbGYsIGtleSk6CiAgICAgICAgcmV0dXJuIHNlbGYuX190ZW1wX2NvbmZpZ1trZXldCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5fX3RlbXBfY29uZmlnWyJ2aWRlb19kaXIiXSA9IHNlbGYuX190ZW1wX2NvbmZpZ1siY3VycmVudF9kaXIiXSArIHNlbGYuX19jb25maWdbInZpZGVvX2RpciJdCiAgICAgICAgc2VsZi5fX3RlbXBfY29uZmlnWyJiaW5hcnlfdG1wIl0gPSBzZWxmLl9fdGVtcF9jb25maWdbImN1cnJlbnRfZGlyIl0gKyBzZWxmLl9fY29uZmlnWyJiaW5hcnlfdG1wIl0KICAgICAgICBzZWxmLl9fdGVtcF9jb25maWdbIm91dHB1dF9kaXIiXSA9IHNlbGYuX190ZW1wX2NvbmZpZ1siY3VycmVudF9kaXIiXSArIHNlbGYuX19jb25maWdbIm91dHB1dF9kaXIiXQoKPHxmaW1fZW5kfD4="]
["1726f5bcd294d696bd72c31dd9d6de442e8cee8f-4","1726f5bcd294d696bd72c31dd9d6de442e8cee8f","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiBVVEYtOCAtKi0KCmltcG9ydCBzeXMKaW1wb3J0IGpzb24KaW1wb3J0IGNvcHkKCgpjbGFzcyBDb25maWc6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5fX2NvbmZpZyA9IE5vbmUKICAgICAgICBzZWxmLl9fdGVtcF9jb25maWcgPSBOb25lCiAgICAgICAgc2VsZi5fX3NldF9kZWZhdWx0KCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiBfX3NldF9kZWZhdWx0KHNlbGYpOgogICAgICAgIHdpdGggb3BlbigiY29uZmlnLmpzb24iLCAncicpIGFzIF9mOgogICAgICAgICAgICBzZWxmLl9fY29uZmlnID0ganNvbi5sb2FkcyhfZi5yZWFkKCkpCjx8ZmltX2VuZHw+"]
["68c59f955e135faa521d2c1fccfd309b0d87810f-1","68c59f955e135faa521d2c1fccfd309b0d87810f","PHxmaW1fcHJlZml4fD4KIyBweWxpbnQ6IGRpc2FibGU9QzAxMDMsQzAxMTEsRTExMDEKCmltcG9ydCB1bml0dGVzdAppbXBvcnQgb2JqCgoKY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICBkZWYgdGVzdF9vYmooc2VsZik6CiAgICAgICAgIyBwYXNzdGhvdWdoIHByaW1pdGl2ZXMgYW5kIHVuc3VwcG9ydGVkIHR5cGVzCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmoudG9fb2JqKDUpLCA1KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLnRvX29iaihUcnVlKSwgVHJ1ZSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai50b19vYmooImhlbGxvIiksICJoZWxsbyIpCgogICAgICAgICMgd3JhcCBsaXN0cyBhbmQgZGljcwogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG9iai50b19vYmooW10pLCBvYmouQXJyKSkKICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShvYmoudG9fb2JqKHt9KSwgb2JqLk9iaikpCgogICAgICAgICMgd3JhcCBuZXN0ZWQKICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShvYmoudG9fb2JqKHsnYSc6IHt9fSkuYSwgb2JqLk9iaikpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uob2JqLnRvX29iaihbW11dKVswXSwgb2JqLkFycikpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uob2JqLnRvX29iaih7J2EnOiB7fX0pLmEsIG9iai5PYmopKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG9iai50b19vYmooW3t9XSlbMF0sIG9iai5PYmopKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG9iai50b19vYmooeydhJzogW119KS5hLCBvYmouQXJyKSkKCiAgICAgICAgIyB3cmFwIGxpdGVyYWwKICAgICAgICBzZWxmLmFzc2VydFRydWUob2JqLnRvX29iaih7J2EnOiA1fSlbJ2EnXSA9PSA1KQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvYmoudG9fb2JqKFt7J2EnOiA1fV0pWzBdLmEgPT0gNSkKCiAgICAgICAgIyB3cmFwIGl0ZXJhdG9ycwogICAgICAgIGZvciBpdGVtIGluIG9iai50b19vYmooW3t9LCB7fSwge31dKToKICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoaXRlbSwgb2JqLk9iaikpCgogICAgICAgICMgcGFzc3Rocm91Z2ggYXNzaWdubWVudAogICAgICAgIG8gPSBvYmoudG9fb2JqKHsnYSc6IDEsICdiJzogMiwgJ2MnOiAzfSkKICAgICAgICBvLmRfZmllbGQgPSA0CiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpc3Qoby52YWx1ZXMoKSkucG9wKCkgPT0gNCkKCiAgICAgICAgIyBwYXNzdGhyb3VnaCBkZWxldGUKICAgICAgICBkZWwgby5kX2ZpZWxkCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpc3Qoby52YWx1ZXMoKSkgPT0gWzEsIDIsIDNdKQoKICAgICAgICAjIHRocm93IG9uIG1pc3Npbmcga2V5cwogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICBkZWwgby5lCgogICAgICAgICMgd3JhcCAuY29weQogICAgICAgIGFycmF5ID0gb2JqLnRvX29iaihbeyd4JzogMTB9XSkKICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShvLmNvcHkoKSwgb2JqLk9iaikpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYXJyYXkuY29weSgpLCBvYmouQXJyKSkKCiAgICAgICAgIyB3cmFwIC5mcm9ta2V5cwogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG8uZnJvbWtleXMoWydhJywgJ2InXSksIG9iai5PYmopKQo8fGZpbV9ob2xlfD4KICAgICAgICAjIHdyYXAgLnBvcAogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG9iai50b19vYmooeydhJzoge319KS5wb3AoJ2EnKSwgb2JqLk9iaikpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uob2JqLnRvX29iaihbeydhJzoge319XSkucG9wKCksIG9iai5PYmopKQoKICAgICAgICAjIHdyYXAgLnBvcGl0ZW0KICAgICAgICBvID0gb2JqLnRvX29iaih7J2EnOiB7fX0pCiAgICAgICAgKGtleSwgdmFsdWUpID0gby5wb3BpdGVtKCkgICMgcHlsaW50OiBkaXNhYmxlPVcwNjEyCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodmFsdWUsIG9iai5PYmopKQoKCnVuaXR0ZXN0Lm1haW4oKQo8fGZpbV9zdWZmaXh8PgoKICAgICAgICAjIHdyYXAgLmdldAogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG9iai50b19vYmooeydhJzoge319KS5nZXQoJ2EnKSwgb2JqLk9iaikpCgo8fGZpbV9lbmR8Pg=="]
["04d90cd40f2b09ccfcbd0bf0eba265203d6e3192-1","04d90cd40f2b09ccfcbd0bf0eba265203d6e3192","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIG9ubGluZWp1ZGdlX2FwaS5tYWluIGltcG9ydCBtYWluCgoKPHxmaW1faG9sZXw+CiAgICAgICAgZXhwZWN0ZWQgPSB7CiAgICAgICAgICAgICJzdGF0dXMiOiAib2siLAogICAgICAgICAgICAibWVzc2FnZXMiOiBbXSwKICAgICAgICAgICAgInJlc3VsdCI6IHsKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9jb21tdW5pdHkudG9wY29kZXIuY29tL3N0YXQ/Yz1wcm9ibGVtX3N0YXRlbWVudCZwbT0xMDc2MCIsCiAgICAgICAgICAgICAgICAidGVzdHMiOiBbewogICAgICAgICAgICAgICAgICAgICJpbnB1dCI6ICIyIDUgOFxuIiwKICAgICAgICAgICAgICAgICAgICAib3V0cHV0IjogIjQwLjBcbiIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAiaW5wdXQiOiAiMiAxLjUgMS44XG4iLAogICAgICAgICAgICAgICAgICAgICJvdXRwdXQiOiAiMy4zXG4iCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgImlucHV0IjogIjMgOC4yNiA3LjU0IDMuMjU2N1xuIiwKICAgICAgICAgICAgICAgICAgICAib3V0cHV0IjogIjIwMi44Mjg1Nzg2OFxuIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICJpbnB1dCI6ICI0IDEuNSAxLjcgMS42IDEuNVxuIiwKICAgICAgICAgICAgICAgICAgICAib3V0cHV0IjogIjkuOTIwMDAwMDAwMDAwMDAyXG4iCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgImlucHV0IjogIjUwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwIDEwXG4iLAogICAgICAgICAgICAgICAgICAgICJvdXRwdXQiOiAiMS4wRTUwXG4iCiAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICJuYW1lIjogIk5pc29rdSIKICAgICAgICAgICAgfSwKICAgICAgICB9CiAgICAgICAgYWN0dWFsID0gbWFpbihbJ2dldC1wcm9ibGVtJywgdXJsXSwgZGVidWc9VHJ1ZSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpCgogICAgZGVmIHRlc3RfMTEwMjYoc2VsZik6CiAgICAgICAgIyBgU3RyaW5nW11gIGlzIHVzZWQuCiAgICAgICAgIyBUaGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgbGlzdC4KICAgICAgICB1cmwgPSAnaHR0cHM6Ly9jb21tdW5pdHkudG9wY29kZXIuY29tL3N0YXQ/Yz1wcm9ibGVtX3N0YXRlbWVudCZwbT0xMTAyNicKICAgICAgICBleHBlY3RlZCA9IHsKICAgICAgICAgICAgInN0YXR1cyI6ICJvayIsCiAgICAgICAgICAgICJtZXNzYWdlcyI6IFtdLAogICAgICAgICAgICAicmVzdWx0IjogewogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2NvbW11bml0eS50b3Bjb2Rlci5jb20vc3RhdD9jPXByb2JsZW1fc3RhdGVtZW50JnBtPTExMDI2IiwKICAgICAgICAgICAgICAgICJ0ZXN0cyI6IFt7CiAgICAgICAgICAgICAgICAgICAgImlucHV0IjogIjEgMDBcbjEgMDBcbjEgNThcbiIsCiAgICAgICAgICAgICAgICAgICAgIm91dHB1dCI6ICIyIDAuMzg0NjE1Mzg0NjE1Mzg0NjQgMC42MTUzODQ2MTUzODQ2MTU0XG4iCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgImlucHV0IjogIjIgMDAgMDBcbjIgMDAgMDBcbjIgMjEgMTFcbiIsCiAgICAgICAgICAgICAgICAgICAgIm91dHB1dCI6ICIyIDAuNTg4ODg4ODg4ODg4ODg4OSAwLjQxMTExMTExMTExMTExMTFcbiIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAiaW5wdXQiOiAiMyAwMDAwIDAwMDAgMDAwMFxuMyAyMjg0IDA5NjYgOTMzNFxuMyAxMDkwIDM5NDIgNDMzNlxuIiwKICAgICAgICAgICAgICAgICAgICAib3V0cHV0IjogIlxuezAuMTk2ODU5NTg1NzE5ODE5MzcsIDAuMjQzOTcyNDY4MDIyMzM0ODMsIDAuMzE0OTY2NDA4NjU0NTg3NzUsIDAuMjQ0MjAxNTM3NjAzMjU4MDUgfVxuIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICJpbnB1dCI6ICI1IDAxMDEwMTEwIDAwMDExMDAwIDAwMDAxMDAwIDEwMDAxMDEwIDEwMTExMTEwXG41IDIyMjE4MjE0IDMyMjQ0Mjg0IDY4NDAyNDMwIDE4MTQwMzIzIDI5MDQzMTQ1XG41IDg3Njg4Njg5IDM2MTAxMzE3IDY5NDc0MDY4IDI5MzM3Mzc0IDg3MjU1ODgxXG4iLAogICAgICAgICAgICAgICAgICAgICJvdXRwdXQiOiAiXG57MC4xMTkzMDc2NjIyMzc1NDk3NywgMC4xNDAzMzI3MTA2MDY2MTM0NSwgMC4wNjUyMjgyNTg5MDI4NTcxLCAwLjE0NDQ4MTE4MTMzMDQ2MzU2LCAwLjE5ODE4OTQ2MjI3MzM4MzIsIDAuMTA3NDM0NjI4MzY4Nzk3ODksIDAuMTY0MTE4MjM2MDE4NTc2MjIsIDAuMDYwOTA3ODYwMjYxNzU4ODIgfVxuIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICJpbnB1dCI6ICIxIDEwXG4xIDAwXG4xIDAwXG4iLAogICAgICAgICAgICAgICAgICAgICJvdXRwdXQiOiAiMiAxLjAgMC4wXG4iCiAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICJuYW1lIjogIlJhbmRvbUFwcGxlIgogICAgICAgICAgICB9LAogICAgICAgIH0KICAgICAgICBhY3R1YWwgPSBtYWluKFsnZ2V0LXByb2JsZW0nLCB1cmxdLCBkZWJ1Zz1UcnVlKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkKPHxmaW1fc3VmZml4fD4KY2xhc3MgR2V0UHJvYmxlbVRvcGNvZGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICBkZWYgdGVzdF8xMDc2MChzZWxmKToKICAgICAgICAjIGBkb3VibGVgIGlzIHVzZWQgYW5kIG9uZSBvZiB2YWx1ZXMgaXMgYSBzY2llbnRpZmljIGZvcm0gYDEuMEU1MGAuCiAgICAgICAgdXJsID0gJ2h0dHBzOi8vY29tbXVuaXR5LnRvcGNvZGVyLmNvbS9zdGF0P2M9cHJvYmxlbV9zdGF0ZW1lbnQmcG09MTA3NjAnCjx8ZmltX2VuZHw+"]
["bd6e548d5578ab1a96a3e0ce2087d9693cbf8eb1-1","bd6e548d5578ab1a96a3e0ce2087d9693cbf8eb1","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIKQ3JlYXRlZCBvbiBUdWUgSnVuIDExIDIyOjA2OjIxIDIwMTkKCkBhdXRob3I6IG10c2xhemFyaW4KIiIiCgppbXBvcnQgcHl0dGEKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgoKICAgIGRldmljZSA9IHB5dHRhLmdldF9kZXZpY2VfZnJvbV91c2VyKCkKCiAgICBzd2VlcCA9IHB5dHRhLmdlbmVyYXRlLnN3ZWVwKGZmdERlZ3JlZT0xOCkKCjx8ZmltX2hvbGV8PgogICAgICAgICdmcmVxTWF4JzogMjAwMDAsCiAgICAgICAgJ2RldmljZSc6IGRldmljZSwKICAgICAgICAnaW5DaGFubmVscyc6IFsxXSwKICAgICAgICAnb3V0Q2hhbm5lbHMnOiBbMSwgMl0sCiAgICAgICAgJ2NvbW1lbnQnOiAnVGVzdGluZzsgMSwgMi4nCiAgICB9CgogICAgbXMgPSBweXR0YS5nZW5lcmF0ZS5tZWFzdXJlbWVudCgncGxheXJlYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqbWVhc3VyZW1lbnRQYXJhbXMpCgogICAgbWVkMSA9IG1zLnJ1bigpCiAgICBtZWQxLnBsYXkoKQo8fGZpbV9zdWZmaXh8PgogICAgbWVhc3VyZW1lbnRQYXJhbXMgPSB7CiAgICAgICAgJ2V4Y2l0YXRpb24nOiBzd2VlcCwKICAgICAgICAnc2FtcGxpbmdSYXRlJzogNDQxMDAsCiAgICAgICAgJ2ZyZXFNaW4nOiAyMCwKPHxmaW1fZW5kfD4="]
["bd6e548d5578ab1a96a3e0ce2087d9693cbf8eb1-2","bd6e548d5578ab1a96a3e0ce2087d9693cbf8eb1","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIKQ3JlYXRlZCBvbiBUdWUgSnVuIDExIDIyOjA2OjIxIDIwMTkKCkBhdXRob3I6IG10c2xhemFyaW4KIiIiCgppbXBvcnQgcHl0dGEKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgoKICAgIGRldmljZSA9IHB5dHRhLmdldF9kZXZpY2VfZnJvbV91c2VyKCkKCiAgICBzd2VlcCA9IHB5dHRhLmdlbmVyYXRlLnN3ZWVwKGZmdERlZ3JlZT0xOCkKCiAgICBtZWFzdXJlbWVudFBhcmFtcyA9IHsKICAgICAgICAnZXhjaXRhdGlvbic6IHN3ZWVwLAogICAgICAgICdzYW1wbGluZ1JhdGUnOiA0NDEwMCwKICAgICAgICAnZnJlcU1pbic6IDIwLAogICAgICAgICdmcmVxTWF4JzogMjAwMDAsCiAgICAgICAgJ2RldmljZSc6IGRldmljZSwKICAgICAgICAnaW5DaGFubmVscyc6IFsxXSwKICAgICAgICAnb3V0Q2hhbm5lbHMnOiBbMSwgMl0sCiAgICAgICAgJ2NvbW1lbnQnOiAnVGVzdGluZzsgMSwgMi4nCiAgICB9CgogICAgbXMgPSBweXR0YS5nZW5lcmF0ZS5tZWFzdXJlbWVudCgncGxheXJlYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqbWVhc3VyZW1lbnRQYXJhbXMpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBtZWQxID0gbXMucnVuKCkKICAgIG1lZDEucGxheSgpCjx8ZmltX2VuZHw+"]
["bd6e548d5578ab1a96a3e0ce2087d9693cbf8eb1-3","bd6e548d5578ab1a96a3e0ce2087d9693cbf8eb1","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIKQ3JlYXRlZCBvbiBUdWUgSnVuIDExIDIyOjA2OjIxIDIwMTkKCkBhdXRob3I6IG10c2xhemFyaW4KIiIiCgppbXBvcnQgcHl0dGEKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgoKICAgIGRldmljZSA9IHB5dHRhLmdldF9kZXZpY2VfZnJvbV91c2VyKCkKCiAgICBzd2VlcCA9IHB5dHRhLmdlbmVyYXRlLnN3ZWVwKGZmdERlZ3JlZT0xOCkKCiAgICBtZWFzdXJlbWVudFBhcmFtcyA9IHsKICAgICAgICAnZXhjaXRhdGlvbic6IHN3ZWVwLAogICAgICAgICdzYW1wbGluZ1JhdGUnOiA0NDEwMCwKICAgICAgICAnZnJlcU1pbic6IDIwLAogICAgICAgICdmcmVxTWF4JzogMjAwMDAsCiAgICAgICAgJ2RldmljZSc6IGRldmljZSwKICAgICAgICAnaW5DaGFubmVscyc6IFsxXSwKICAgICAgICAnb3V0Q2hhbm5lbHMnOiBbMSwgMl0sCiAgICAgICAgJ2NvbW1lbnQnOiAnVGVzdGluZzsgMSwgMi4nCiAgICB9CgogICAgbXMgPSBweXR0YS5nZW5lcmF0ZS5tZWFzdXJlbWVudCgncGxheXJlYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqbWVhc3VyZW1lbnRQYXJhbXMpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBtZWQxID0gbXMucnVuKCkKICAgIG1lZDEucGxheSgpCjx8ZmltX2VuZHw+"]
["bd6e548d5578ab1a96a3e0ce2087d9693cbf8eb1-4","bd6e548d5578ab1a96a3e0ce2087d9693cbf8eb1","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIKQ3JlYXRlZCBvbiBUdWUgSnVuIDExIDIyOjA2OjIxIDIwMTkKCkBhdXRob3I6IG10c2xhemFyaW4KIiIiCgppbXBvcnQgcHl0dGEKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgoKICAgIGRldmljZSA9IHB5dHRhLmdldF9kZXZpY2VfZnJvbV91c2VyKCkKCiAgICBzd2VlcCA9IHB5dHRhLmdlbmVyYXRlLnN3ZWVwKGZmdERlZ3JlZT0xOCkKCiAgICBtZWFzdXJlbWVudFBhcmFtcyA9IHsKICAgICAgICAnZXhjaXRhdGlvbic6IHN3ZWVwLAogICAgICAgICdzYW1wbGluZ1JhdGUnOiA0NDEwMCwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICdmcmVxTWluJzogMjAsCiAgICAgICAgJ2ZyZXFNYXgnOiAyMDAwMCwKICAgICAgICAnZGV2aWNlJzogZGV2aWNlLAogICAgICAgICdpbkNoYW5uZWxzJzogWzFdLAo8fGZpbV9lbmR8Pg=="]
["bd6e548d5578ab1a96a3e0ce2087d9693cbf8eb1-5","bd6e548d5578ab1a96a3e0ce2087d9693cbf8eb1","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIKQ3JlYXRlZCBvbiBUdWUgSnVuIDExIDIyOjA2OjIxIDIwMTkKCkBhdXRob3I6IG10c2xhemFyaW4KIiIiCgppbXBvcnQgcHl0dGEKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgoKICAgIGRldmljZSA9IHB5dHRhLmdldF9kZXZpY2VfZnJvbV91c2VyKCkKCjx8ZmltX2hvbGV8PgogICAgICAgICdzYW1wbGluZ1JhdGUnOiA0NDEwMCwKICAgICAgICAnZnJlcU1pbic6IDIwLAogICAgICAgICdmcmVxTWF4JzogMjAwMDAsCiAgICAgICAgJ2RldmljZSc6IGRldmljZSwKICAgICAgICAnaW5DaGFubmVscyc6IFsxXSwKICAgICAgICAnb3V0Q2hhbm5lbHMnOiBbMSwgMl0sCiAgICAgICAgJ2NvbW1lbnQnOiAnVGVzdGluZzsgMSwgMi4nCiAgICB9CgogICAgbXMgPSBweXR0YS5nZW5lcmF0ZS5tZWFzdXJlbWVudCgncGxheXJlYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqbWVhc3VyZW1lbnRQYXJhbXMpCgogICAgbWVkMSA9IG1zLnJ1bigpCiAgICBtZWQxLnBsYXkoKQo8fGZpbV9zdWZmaXh8PgogICAgc3dlZXAgPSBweXR0YS5nZW5lcmF0ZS5zd2VlcChmZnREZWdyZWU9MTgpCgogICAgbWVhc3VyZW1lbnRQYXJhbXMgPSB7CiAgICAgICAgJ2V4Y2l0YXRpb24nOiBzd2VlcCwKPHxmaW1fZW5kfD4="]
["68d0d539b561f9c7920d5072d1fb392b4a7c0f50-1","68d0d539b561f9c7920d5072d1fb392b4a7c0f50",{"$cut":{"chars":17100,"head":"PHxmaW1fcHJlZml4fD4KIiIiUHJvdmlkZXMgdGhlIHRvb2xzIHRvIGJ1aWxkIGNsYXNzZXMgY29ycmVzcG9uZGluZyB0byBYTUwgZWxlbWVudHMKaW4gR1BYIGFuZCBUQ1ggZmlsZXMuCiIiIgoKaW1wb3J0IGRhdGV0aW1lCgpmcm9tIGx4bWwgaW1wb3J0IGV0cmVlCgpmcm9tIC4gaW1wb3J0IHV0aWwKCmRlZiBjcmVhdGVfZGF0YV9wcm9wKHBhdGgsIGNvbnZfdHlwZT1pbnQpOgogICIiIkFkZCBwcm9wZXJ0eSBpbnNpZGUgYW4gQWN0aXZpdHlFbGVtZW50IGNsYXNzIGRlZmluaXRpb24gdGhhdCBhY2Nlc3NlcyBkYXRhCiAgdXNpbmcgOm1ldGg6YH5BY3Rpdml0eUVsZW1lbnQuZ2V0X2RhdGFgLgoKICBBcmdzOgogICAgcGF0aCAoc3RyKTogVGhlIHRhZyBuYW1lIG9yIHBhdGggb2YgdGhlIGRlc2lyZWQgc3ViZWxlbWVudCBvZiB0aGUKICAgICAgY29udGFpbmVkIGx4bWwgZWxlbWVudCB3aG9zZSB0ZXh0IHdpbGwgYmUgcmV0cmlldmVkLiBUZXh0IHdpbGwgYmUKICAgICAgcmV0cmlldmVkIGZyb20gdGhlIGZpcnN0IG1hdGNoaW5nIHN1YmVsZW1lbnQuCiAgICBjb252X3R5cGUgKGRhdGEgdHlwZSk6IERhdGEgdHlwZSB0aGF0IHRoZSBlbGVtZW50IHRleHQgd2lsbAogICAgICBiZSBjb252ZXJ0ZWQgdG8uIFB5dGhvbiB0eXBlLCBvciBkYXRldGltZS5kYXRldGltZSB0byByZWFkIGEgdGltZSB1c2luZwogICAgICA6bWV0aDpgZGF0ZXV0aWwucGFyc2VyLmlzb3BhcnNlYC4gRGVmYXVsdHMgdG8gYGBpbnRgYC4KICBSZXR1cm5zOgogICAgcHJvcGVydHk6IGFjY2Vzc29yIGZvciB0aGUgdW5kZXJseWluZyBseG1sIGVsZW1lbnQncyBkYXRhLgoKICBFeGFtcGxlczoKCiAgICA+Pj4gY2xhc3MgTXlFbGVtZW50KEFjdGl2aXR5RWxlbWVudCk6CiAgICAuLi4gICBteV9wcm9wID0gY3JlYXRlX2RhdGFfcHJvcCgnVGltZScsIGRhdGV0aW1lLmRhdGV0aW1lKQogICAgLi4uICAgXCJcIlwiUHJvcGVydHkgZG9jc3RyaW5nIGdvZXMgaGVyZSAoaWYgZGVzaXJlZCkuXCJcIlwiCiAgICAuLi4gICBbLi4uXQoKICAiIiIKICByZXR1cm4gcHJvcGVydHkoCiAgICBsYW1iZGEgc2VsZjogc2VsZi5nZXRfZGF0YShwYXRoLCBjb252X3R5cGU9Y29udl90eXBlKSwgCiAgICAjIGRvYz1mJzpvYmo6YHtjb252X3R5cGUuX19uYW1lX199YCcKICApCgoKZGVmIGNyZWF0ZV9hdHRyX3Byb3Aoa2V5LCBjb252X3R5cGU9aW50KToKICAiIiJBZGQgcHJvcGVydHkgaW5zaWRlIGFuIEFjdGl2aXR5RWxlbWVudCBjbGFzcyBkZWZpbml0aW9uIHRoYXQgYWNjZXNzZXMgZGF0YQogIHVzaW5nIDptZXRoOmB+QWN0aXZpdHlFbGVtZW50LmdldF9hdHRyYC4KCiAgQXJnczoKICAgIGtleSAoc3RyKTogVGhlIGF0dHJpYnV0ZSBuYW1lIHdpdGhpbiB0aGUgY29udGFpbmVkIGx4bWwgZWxlbWVudC4KICAgIGNvbnZfdHlwZSAoZGF0YSB0eXBlKTogRGF0YSB0eXBlIHRoYXQgdGhlIGVsZW1lbnQgdGV4dCB3aWxsCiAgICAgIGJlIGNvbnZlcnRlZCB0by4gUHl0aG9uIHR5cGUsIG9yIGRhdGV0aW1lLmRhdGV0aW1lIHRvIHJlYWQgYSB0aW1lIHVzaW5nCiAgICAgIDptZXRoOmBkYXRldXRpbC5wYXJzZXIuaXNvcGFyc2VgLiBEZWZhdWx0cyB0byBgYGludGBgLgogIFJldHVybnM6CiAgICBwcm9wZXJ0eTogYWNjZXNzb3IgZm9yIHVuZGVybHlpbmcgbHhtbCBlbGVtZW50J3MgYXR0cmlidXRlIGRhdGEuCgogIEV4YW1wbGVzOgoKICAgID4+PiBjbGFzcyBNeUVsZW1lbnQoQWN0aXZpdHlFbGVtZW50KToKICAgIC4uLiAgIG15X3Byb3AgPSBjcmVhdGVfYXR0cl9wcm9wKCdUaW1lJywgZGF0ZXRpbWUuZGF0ZXRpbWUpCiAgICAuLi4gICBcIlwiXCJQcm9wZXJ0eSBkb2NzdHJpbmcgZ29lcyBoZXJlIChpZiBkZXNpcmVkKVwiXCJcIgogICAgLi4uICAgWy4uLl0KCiAgIiIiCiAgcmV0dXJuIHByb3BlcnR5KAogICAgbGFtYmRhIHNlbGY6IHNlbGYuZ2V0X2F0dHIoa2V5LCBjb252X3R5cGU9Y29udl90eXBlKSwKICAgICMgZG9jPWYnOm9iajpge2NvbnZfdHlwZS5fX25hbWVfX31gJwogICkKCgpkZWYgY3JlYXRlX2Rlc2NlbmRlbnRfcHJvcChkZXNjZW5kZW50X2NsYXNzKToKICAiIiJBZGQgZGVzY2VuZGVudCBsaXN0IGFjY2Vzc29yIHByb3BlcnR5IGluc2lkZSBhbiBBY3Rpdml0eUVsZW1lbnQgY2xhc3MKICBkZWZpbml0aW9uLgoKICBUaGUgcHJvcGVydHkgcmV0dXJucyBhbGwgdGhlIGN1cnJlbnQgZWxlbWVudCdzIGRlc2NlbmRlbnRzIG1hdGNoaW5nIHRoZQogIHRhZyBuYW1lIGRlZmluZWQgaW4gdGhlIGRlc2NlbmRlbnQgY2xhc3MuCgogIEFyZ3M6CiAgICBkZXNjZW5kZW50X2NsYXNzIChBY3Rpdml0eUVsZW1lbnQpOiBNdXN0IGJlIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBBY3Rpdml0eUVsZW1lbnRgLgogIFJldHVybnM6CiAgICBwcm9wZXJ0eTogYWNjZXNzb3IgZm9yIHVuZGVybHlpbmcgbHhtbCBlbGVtZW50J3MgZGVzY2VuZGVudCBsaXN0LgoKICBFeGFtcGxlczoKCiAgICA+Pj4gY2xhc3MgTXlFbGVtZW50KEFjdGl2aXR5RWxlbWVudCk6CiAgICAuLi4gICBteV9wcm9wID0gY3JlYXRlX2Rlc2NlbmRlbnRfcHJvcChNeVN1YkVsZW1lbnQpCiAgICAuLi4gICBcIlwiXCJQcm9wZXJ0eSBkb2NzdHJpbmcgZ29lcyBoZXJlIChpZiBkZXNpcmVkKVwiXCJcIgogICAgLi4uICAgWy4uLl0KCiAgIiIiCiAgcmV0dXJuIHByb3BlcnR5KAogICAgbGFtYmRhIHNlbGY6IFsKICAgICAgZGVzY2VuZGVudF9jbGFzcyhlKSAKICAgICAgZm9yIGUgaW4gc2VsZi5lbGVtLnhwYXRoKGYnLi8ve2Rlc2NlbmRlbnRfY2xhc3MuVEFHfScpCiAgICBdLAogICAgZG9jPWYnOm9iajpgbGlzdGAgb2YgOmNsYXNzOmB7ZGVzY2VuZGVudF9jbGFzcy5fX25hbWVfX31gOiAnCiAgICAjIGYnQWxsIGRlc2NlbmRlbnRzIG9mIHRoZSBjb250YWluZWQgbHhtbCBlbGVtZW50IHdpdGggdGFnIG5hbWUgJwogICAgZidBbGwgZWxlbWVudCBkZXNjZW5kZW50cyB3aXRoIHRhZyBuYW1lICJ7ZGVzY2VuZGVudF9jbGFzcy5UQUd9Ii4nLAogICkKCgpjbGFzcyBBY3Rpdml0eUVsZW1lbnQob2JqZWN0KToKICAiIiJCYXNlIGNsYXNzIGZvciBjcmVhdGluZyBjb21wb3NpdGlvbnMgd2l0aCA6Y2xhc3M6"}}]
["68d0d539b561f9c7920d5072d1fb392b4a7c0f50-2","68d0d539b561f9c7920d5072d1fb392b4a7c0f50",{"$cut":{"chars":17100,"head":"PHxmaW1fcHJlZml4fD4KIiIiUHJvdmlkZXMgdGhlIHRvb2xzIHRvIGJ1aWxkIGNsYXNzZXMgY29ycmVzcG9uZGluZyB0byBYTUwgZWxlbWVudHMKaW4gR1BYIGFuZCBUQ1ggZmlsZXMuCiIiIgoKaW1wb3J0IGRhdGV0aW1lCgpmcm9tIGx4bWwgaW1wb3J0IGV0cmVlCgpmcm9tIC4gaW1wb3J0IHV0aWwKCmRlZiBjcmVhdGVfZGF0YV9wcm9wKHBhdGgsIGNvbnZfdHlwZT1pbnQpOgogICIiIkFkZCBwcm9wZXJ0eSBpbnNpZGUgYW4gQWN0aXZpdHlFbGVtZW50IGNsYXNzIGRlZmluaXRpb24gdGhhdCBhY2Nlc3NlcyBkYXRhCiAgdXNpbmcgOm1ldGg6YH5BY3Rpdml0eUVsZW1lbnQuZ2V0X2RhdGFgLgoKICBBcmdzOgogICAgcGF0aCAoc3RyKTogVGhlIHRhZyBuYW1lIG9yIHBhdGggb2YgdGhlIGRlc2lyZWQgc3ViZWxlbWVudCBvZiB0aGUKICAgICAgY29udGFpbmVkIGx4bWwgZWxlbWVudCB3aG9zZSB0ZXh0IHdpbGwgYmUgcmV0cmlldmVkLiBUZXh0IHdpbGwgYmUKICAgICAgcmV0cmlldmVkIGZyb20gdGhlIGZpcnN0IG1hdGNoaW5nIHN1YmVsZW1lbnQuCiAgICBjb252X3R5cGUgKGRhdGEgdHlwZSk6IERhdGEgdHlwZSB0aGF0IHRoZSBlbGVtZW50IHRleHQgd2lsbAogICAgICBiZSBjb252ZXJ0ZWQgdG8uIFB5dGhvbiB0eXBlLCBvciBkYXRldGltZS5kYXRldGltZSB0byByZWFkIGEgdGltZSB1c2luZwogICAgICA6bWV0aDpgZGF0ZXV0aWwucGFyc2VyLmlzb3BhcnNlYC4gRGVmYXVsdHMgdG8gYGBpbnRgYC4KICBSZXR1cm5zOgogICAgcHJvcGVydHk6IGFjY2Vzc29yIGZvciB0aGUgdW5kZXJseWluZyBseG1sIGVsZW1lbnQncyBkYXRhLgoKICBFeGFtcGxlczoKCiAgICA+Pj4gY2xhc3MgTXlFbGVtZW50KEFjdGl2aXR5RWxlbWVudCk6CiAgICAuLi4gICBteV9wcm9wID0gY3JlYXRlX2RhdGFfcHJvcCgnVGltZScsIGRhdGV0aW1lLmRhdGV0aW1lKQogICAgLi4uICAgXCJcIlwiUHJvcGVydHkgZG9jc3RyaW5nIGdvZXMgaGVyZSAoaWYgZGVzaXJlZCkuXCJcIlwiCiAgICAuLi4gICBbLi4uXQoKICAiIiIKICByZXR1cm4gcHJvcGVydHkoCiAgICBsYW1iZGEgc2VsZjogc2VsZi5nZXRfZGF0YShwYXRoLCBjb252X3R5cGU9Y29udl90eXBlKSwgCiAgICAjIGRvYz1mJzpvYmo6YHtjb252X3R5cGUuX19uYW1lX199YCcKICApCgoKZGVmIGNyZWF0ZV9hdHRyX3Byb3Aoa2V5LCBjb252X3R5cGU9aW50KToKICAiIiJBZGQgcHJvcGVydHkgaW5zaWRlIGFuIEFjdGl2aXR5RWxlbWVudCBjbGFzcyBkZWZpbml0aW9uIHRoYXQgYWNjZXNzZXMgZGF0YQogIHVzaW5nIDptZXRoOmB+QWN0aXZpdHlFbGVtZW50LmdldF9hdHRyYC4KCiAgQXJnczoKICAgIGtleSAoc3RyKTogVGhlIGF0dHJpYnV0ZSBuYW1lIHdpdGhpbiB0aGUgY29udGFpbmVkIGx4bWwgZWxlbWVudC4KICAgIGNvbnZfdHlwZSAoZGF0YSB0eXBlKTogRGF0YSB0eXBlIHRoYXQgdGhlIGVsZW1lbnQgdGV4dCB3aWxsCiAgICAgIGJlIGNvbnZlcnRlZCB0by4gUHl0aG9uIHR5cGUsIG9yIGRhdGV0aW1lLmRhdGV0aW1lIHRvIHJlYWQgYSB0aW1lIHVzaW5nCiAgICAgIDptZXRoOmBkYXRldXRpbC5wYXJzZXIuaXNvcGFyc2VgLiBEZWZhdWx0cyB0byBgYGludGBgLgogIFJldHVybnM6CiAgICBwcm9wZXJ0eTogYWNjZXNzb3IgZm9yIHVuZGVybHlpbmcgbHhtbCBlbGVtZW50J3MgYXR0cmlidXRlIGRhdGEuCgogIEV4YW1wbGVzOgoKICAgID4+PiBjbGFzcyBNeUVsZW1lbnQoQWN0aXZpdHlFbGVtZW50KToKICAgIC4uLiAgIG15X3Byb3AgPSBjcmVhdGVfYXR0cl9wcm9wKCdUaW1lJywgZGF0ZXRpbWUuZGF0ZXRpbWUpCiAgICAuLi4gICBcIlwiXCJQcm9wZXJ0eSBkb2NzdHJpbmcgZ29lcyBoZXJlIChpZiBkZXNpcmVkKVwiXCJcIgogICAgLi4uICAgWy4uLl0KCiAgIiIiCiAgcmV0dXJuIHByb3BlcnR5KAogICAgbGFtYmRhIHNlbGY6IHNlbGYuZ2V0X2F0dHIoa2V5LCBjb252X3R5cGU9Y29udl90eXBlKSwKICAgICMgZG9jPWYnOm9iajpge2NvbnZfdHlwZS5fX25hbWVfX31gJwogICkKCgpkZWYgY3JlYXRlX2Rlc2NlbmRlbnRfcHJvcChkZXNjZW5kZW50X2NsYXNzKToKICAiIiJBZGQgZGVzY2VuZGVudCBsaXN0IGFjY2Vzc29yIHByb3BlcnR5IGluc2lkZSBhbiBBY3Rpdml0eUVsZW1lbnQgY2xhc3MKICBkZWZpbml0aW9uLgoKICBUaGUgcHJvcGVydHkgcmV0dXJucyBhbGwgdGhlIGN1cnJlbnQgZWxlbWVudCdzIGRlc2NlbmRlbnRzIG1hdGNoaW5nIHRoZQogIHRhZyBuYW1lIGRlZmluZWQgaW4gdGhlIGRlc2NlbmRlbnQgY2xhc3MuCgogIEFyZ3M6CiAgICBkZXNjZW5kZW50X2NsYXNzIChBY3Rpdml0eUVsZW1lbnQpOiBNdXN0IGJlIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBBY3Rpdml0eUVsZW1lbnRgLgogIFJldHVybnM6CiAgICBwcm9wZXJ0eTogYWNjZXNzb3IgZm9yIHVuZGVybHlpbmcgbHhtbCBlbGVtZW50J3MgZGVzY2VuZGVudCBsaXN0LgoKICBFeGFtcGxlczoKCiAgICA+Pj4gY2xhc3MgTXlFbGVtZW50KEFjdGl2aXR5RWxlbWVudCk6CiAgICAuLi4gICBteV9wcm9wID0gY3JlYXRlX2Rlc2NlbmRlbnRfcHJvcChNeVN1YkVsZW1lbnQpCiAgICAuLi4gICBcIlwiXCJQcm9wZXJ0eSBkb2NzdHJpbmcgZ29lcyBoZXJlIChpZiBkZXNpcmVkKVwiXCJcIgogICAgLi4uICAgWy4uLl0KCiAgIiIiCiAgcmV0dXJuIHByb3BlcnR5KAogICAgbGFtYmRhIHNlbGY6IFsKICAgICAgZGVzY2VuZGVudF9jbGFzcyhlKSAKICAgICAgZm9yIGUgaW4gc2VsZi5lbGVtLnhwYXRoKGYnLi8ve2Rlc2NlbmRlbnRfY2xhc3MuVEFHfScpCiAgICBdLAogICAgZG9jPWYnOm9iajpgbGlzdGAgb2YgOmNsYXNzOmB7ZGVzY2VuZGVudF9jbGFzcy5fX25hbWVfX31gOiAnCiAgICAjIGYnQWxsIGRlc2NlbmRlbnRzIG9mIHRoZSBjb250YWluZWQgbHhtbCBlbGVtZW50IHdpdGggdGFnIG5hbWUgJwogICAgZidBbGwgZWxlbWVudCBkZXNjZW5kZW50cyB3aXRoIHRhZyBuYW1lICJ7ZGVzY2VuZGVudF9jbGFzcy5UQUd9Ii4nLAogICkKCgpjbGFzcyBBY3Rpdml0eUVsZW1lbnQob2JqZWN0KToKICAiIiJCYXNlIGNsYXNzIGZvciBjcmVhdGluZyBjb21wb3NpdGlvbnMgd2l0aCA6Y2xhc3M6"}}]
["68d0d539b561f9c7920d5072d1fb392b4a7c0f50-3","68d0d539b561f9c7920d5072d1fb392b4a7c0f50",{"$cut":{"chars":17100,"head":"PHxmaW1fcHJlZml4fD4KIiIiUHJvdmlkZXMgdGhlIHRvb2xzIHRvIGJ1aWxkIGNsYXNzZXMgY29ycmVzcG9uZGluZyB0byBYTUwgZWxlbWVudHMKaW4gR1BYIGFuZCBUQ1ggZmlsZXMuCiIiIgoKaW1wb3J0IGRhdGV0aW1lCgpmcm9tIGx4bWwgaW1wb3J0IGV0cmVlCgpmcm9tIC4gaW1wb3J0IHV0aWwKCmRlZiBjcmVhdGVfZGF0YV9wcm9wKHBhdGgsIGNvbnZfdHlwZT1pbnQpOgogICIiIkFkZCBwcm9wZXJ0eSBpbnNpZGUgYW4gQWN0aXZpdHlFbGVtZW50IGNsYXNzIGRlZmluaXRpb24gdGhhdCBhY2Nlc3NlcyBkYXRhCiAgdXNpbmcgOm1ldGg6YH5BY3Rpdml0eUVsZW1lbnQuZ2V0X2RhdGFgLgoKICBBcmdzOgogICAgcGF0aCAoc3RyKTogVGhlIHRhZyBuYW1lIG9yIHBhdGggb2YgdGhlIGRlc2lyZWQgc3ViZWxlbWVudCBvZiB0aGUKICAgICAgY29udGFpbmVkIGx4bWwgZWxlbWVudCB3aG9zZSB0ZXh0IHdpbGwgYmUgcmV0cmlldmVkLiBUZXh0IHdpbGwgYmUKICAgICAgcmV0cmlldmVkIGZyb20gdGhlIGZpcnN0IG1hdGNoaW5nIHN1YmVsZW1lbnQuCiAgICBjb252X3R5cGUgKGRhdGEgdHlwZSk6IERhdGEgdHlwZSB0aGF0IHRoZSBlbGVtZW50IHRleHQgd2lsbAogICAgICBiZSBjb252ZXJ0ZWQgdG8uIFB5dGhvbiB0eXBlLCBvciBkYXRldGltZS5kYXRldGltZSB0byByZWFkIGEgdGltZSB1c2luZwogICAgICA6bWV0aDpgZGF0ZXV0aWwucGFyc2VyLmlzb3BhcnNlYC4gRGVmYXVsdHMgdG8gYGBpbnRgYC4KICBSZXR1cm5zOgogICAgcHJvcGVydHk6IGFjY2Vzc29yIGZvciB0aGUgdW5kZXJseWluZyBseG1sIGVsZW1lbnQncyBkYXRhLgoKICBFeGFtcGxlczoKCiAgICA+Pj4gY2xhc3MgTXlFbGVtZW50KEFjdGl2aXR5RWxlbWVudCk6CiAgICAuLi4gICBteV9wcm9wID0gY3JlYXRlX2RhdGFfcHJvcCgnVGltZScsIGRhdGV0aW1lLmRhdGV0aW1lKQogICAgLi4uICAgXCJcIlwiUHJvcGVydHkgZG9jc3RyaW5nIGdvZXMgaGVyZSAoaWYgZGVzaXJlZCkuXCJcIlwiCiAgICAuLi4gICBbLi4uXQoKICAiIiIKICByZXR1cm4gcHJvcGVydHkoCiAgICBsYW1iZGEgc2VsZjogc2VsZi5nZXRfZGF0YShwYXRoLCBjb252X3R5cGU9Y29udl90eXBlKSwgCiAgICAjIGRvYz1mJzpvYmo6YHtjb252X3R5cGUuX19uYW1lX199YCcKICApCgoKZGVmIGNyZWF0ZV9hdHRyX3Byb3Aoa2V5LCBjb252X3R5cGU9aW50KToKICAiIiJBZGQgcHJvcGVydHkgaW5zaWRlIGFuIEFjdGl2aXR5RWxlbWVudCBjbGFzcyBkZWZpbml0aW9uIHRoYXQgYWNjZXNzZXMgZGF0YQogIHVzaW5nIDptZXRoOmB+QWN0aXZpdHlFbGVtZW50LmdldF9hdHRyYC4KCiAgQXJnczoKICAgIGtleSAoc3RyKTogVGhlIGF0dHJpYnV0ZSBuYW1lIHdpdGhpbiB0aGUgY29udGFpbmVkIGx4bWwgZWxlbWVudC4KICAgIGNvbnZfdHlwZSAoZGF0YSB0eXBlKTogRGF0YSB0eXBlIHRoYXQgdGhlIGVsZW1lbnQgdGV4dCB3aWxsCiAgICAgIGJlIGNvbnZlcnRlZCB0by4gUHl0aG9uIHR5cGUsIG9yIGRhdGV0aW1lLmRhdGV0aW1lIHRvIHJlYWQgYSB0aW1lIHVzaW5nCiAgICAgIDptZXRoOmBkYXRldXRpbC5wYXJzZXIuaXNvcGFyc2VgLiBEZWZhdWx0cyB0byBgYGludGBgLgogIFJldHVybnM6CiAgICBwcm9wZXJ0eTogYWNjZXNzb3IgZm9yIHVuZGVybHlpbmcgbHhtbCBlbGVtZW50J3MgYXR0cmlidXRlIGRhdGEuCgogIEV4YW1wbGVzOgoKICAgID4+PiBjbGFzcyBNeUVsZW1lbnQoQWN0aXZpdHlFbGVtZW50KToKICAgIC4uLiAgIG15X3Byb3AgPSBjcmVhdGVfYXR0cl9wcm9wKCdUaW1lJywgZGF0ZXRpbWUuZGF0ZXRpbWUpCiAgICAuLi4gICBcIlwiXCJQcm9wZXJ0eSBkb2NzdHJpbmcgZ29lcyBoZXJlIChpZiBkZXNpcmVkKVwiXCJcIgogICAgLi4uICAgWy4uLl0KCiAgIiIiCiAgcmV0dXJuIHByb3BlcnR5KAogICAgbGFtYmRhIHNlbGY6IHNlbGYuZ2V0X2F0dHIoa2V5LCBjb252X3R5cGU9Y29udl90eXBlKSwKICAgICMgZG9jPWYnOm9iajpge2NvbnZfdHlwZS5fX25hbWVfX31gJwogICkKCgpkZWYgY3JlYXRlX2Rlc2NlbmRlbnRfcHJvcChkZXNjZW5kZW50X2NsYXNzKToKICAiIiJBZGQgZGVzY2VuZGVudCBsaXN0IGFjY2Vzc29yIHByb3BlcnR5IGluc2lkZSBhbiBBY3Rpdml0eUVsZW1lbnQgY2xhc3MKICBkZWZpbml0aW9uLgoKICBUaGUgcHJvcGVydHkgcmV0dXJucyBhbGwgdGhlIGN1cnJlbnQgZWxlbWVudCdzIGRlc2NlbmRlbnRzIG1hdGNoaW5nIHRoZQogIHRhZyBuYW1lIGRlZmluZWQgaW4gdGhlIGRlc2NlbmRlbnQgY2xhc3MuCgogIEFyZ3M6CiAgICBkZXNjZW5kZW50X2NsYXNzIChBY3Rpdml0eUVsZW1lbnQpOiBNdXN0IGJlIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBBY3Rpdml0eUVsZW1lbnRgLgogIFJldHVybnM6CiAgICBwcm9wZXJ0eTogYWNjZXNzb3IgZm9yIHVuZGVybHlpbmcgbHhtbCBlbGVtZW50J3MgZGVzY2VuZGVudCBsaXN0LgoKICBFeGFtcGxlczoKCiAgICA+Pj4gY2xhc3MgTXlFbGVtZW50KEFjdGl2aXR5RWxlbWVudCk6CiAgICAuLi4gICBteV9wcm9wID0gY3JlYXRlX2Rlc2NlbmRlbnRfcHJvcChNeVN1YkVsZW1lbnQpCiAgICAuLi4gICBcIlwiXCJQcm9wZXJ0eSBkb2NzdHJpbmcgZ29lcyBoZXJlIChpZiBkZXNpcmVkKVwiXCJcIgogICAgLi4uICAgWy4uLl0KCiAgIiIiCiAgcmV0dXJuIHByb3BlcnR5KAogICAgbGFtYmRhIHNlbGY6IFsKICAgICAgZGVzY2VuZGVudF9jbGFzcyhlKSAKICAgICAgZm9yIGUgaW4gc2VsZi5lbGVtLnhwYXRoKGYnLi8ve2Rlc2NlbmRlbnRfY2xhc3MuVEFHfScpCiAgICBdLAogICAgZG9jPWYnOm9iajpgbGlzdGAgb2YgOmNsYXNzOmB7ZGVzY2VuZGVudF9jbGFzcy5fX25hbWVfX31gOiAnCiAgICAjIGYnQWxsIGRlc2NlbmRlbnRzIG9mIHRoZSBjb250YWluZWQgbHhtbCBlbGVtZW50IHdpdGggdGFnIG5hbWUgJwogICAgZidBbGwgZWxlbWVudCBkZXNjZW5kZW50cyB3aXRoIHRhZyBuYW1lICJ7ZGVzY2VuZGVudF9jbGFzcy5UQUd9Ii4nLAogICkKCgpjbGFzcyBBY3Rpdml0eUVsZW1lbnQob2JqZWN0KToKICAiIiJCYXNlIGNsYXNzIGZvciBjcmVhdGluZyBjb21wb3NpdGlvbnMgd2l0aCA6Y2xhc3M6"}}]
["68d0d539b561f9c7920d5072d1fb392b4a7c0f50-4","68d0d539b561f9c7920d5072d1fb392b4a7c0f50",{"$cut":{"chars":17100,"head":"PHxmaW1fcHJlZml4fD4KIiIiUHJvdmlkZXMgdGhlIHRvb2xzIHRvIGJ1aWxkIGNsYXNzZXMgY29ycmVzcG9uZGluZyB0byBYTUwgZWxlbWVudHMKaW4gR1BYIGFuZCBUQ1ggZmlsZXMuCiIiIgoKaW1wb3J0IGRhdGV0aW1lCgpmcm9tIGx4bWwgaW1wb3J0IGV0cmVlCgpmcm9tIC4gaW1wb3J0IHV0aWwKCmRlZiBjcmVhdGVfZGF0YV9wcm9wKHBhdGgsIGNvbnZfdHlwZT1pbnQpOgogICIiIkFkZCBwcm9wZXJ0eSBpbnNpZGUgYW4gQWN0aXZpdHlFbGVtZW50IGNsYXNzIGRlZmluaXRpb24gdGhhdCBhY2Nlc3NlcyBkYXRhCiAgdXNpbmcgOm1ldGg6YH5BY3Rpdml0eUVsZW1lbnQuZ2V0X2RhdGFgLgoKICBBcmdzOgogICAgcGF0aCAoc3RyKTogVGhlIHRhZyBuYW1lIG9yIHBhdGggb2YgdGhlIGRlc2lyZWQgc3ViZWxlbWVudCBvZiB0aGUKICAgICAgY29udGFpbmVkIGx4bWwgZWxlbWVudCB3aG9zZSB0ZXh0IHdpbGwgYmUgcmV0cmlldmVkLiBUZXh0IHdpbGwgYmUKICAgICAgcmV0cmlldmVkIGZyb20gdGhlIGZpcnN0IG1hdGNoaW5nIHN1YmVsZW1lbnQuCiAgICBjb252X3R5cGUgKGRhdGEgdHlwZSk6IERhdGEgdHlwZSB0aGF0IHRoZSBlbGVtZW50IHRleHQgd2lsbAogICAgICBiZSBjb252ZXJ0ZWQgdG8uIFB5dGhvbiB0eXBlLCBvciBkYXRldGltZS5kYXRldGltZSB0byByZWFkIGEgdGltZSB1c2luZwogICAgICA6bWV0aDpgZGF0ZXV0aWwucGFyc2VyLmlzb3BhcnNlYC4gRGVmYXVsdHMgdG8gYGBpbnRgYC4KICBSZXR1cm5zOgogICAgcHJvcGVydHk6IGFjY2Vzc29yIGZvciB0aGUgdW5kZXJseWluZyBseG1sIGVsZW1lbnQncyBkYXRhLgoKICBFeGFtcGxlczoKCiAgICA+Pj4gY2xhc3MgTXlFbGVtZW50KEFjdGl2aXR5RWxlbWVudCk6CiAgICAuLi4gICBteV9wcm9wID0gY3JlYXRlX2RhdGFfcHJvcCgnVGltZScsIGRhdGV0aW1lLmRhdGV0aW1lKQogICAgLi4uICAgXCJcIlwiUHJvcGVydHkgZG9jc3RyaW5nIGdvZXMgaGVyZSAoaWYgZGVzaXJlZCkuXCJcIlwiCiAgICAuLi4gICBbLi4uXQoKICAiIiIKICByZXR1cm4gcHJvcGVydHkoCiAgICBsYW1iZGEgc2VsZjogc2VsZi5nZXRfZGF0YShwYXRoLCBjb252X3R5cGU9Y29udl90eXBlKSwgCiAgICAjIGRvYz1mJzpvYmo6YHtjb252X3R5cGUuX19uYW1lX199YCcKICApCgoKZGVmIGNyZWF0ZV9hdHRyX3Byb3Aoa2V5LCBjb252X3R5cGU9aW50KToKICAiIiJBZGQgcHJvcGVydHkgaW5zaWRlIGFuIEFjdGl2aXR5RWxlbWVudCBjbGFzcyBkZWZpbml0aW9uIHRoYXQgYWNjZXNzZXMgZGF0YQogIHVzaW5nIDptZXRoOmB+QWN0aXZpdHlFbGVtZW50LmdldF9hdHRyYC4KCiAgQXJnczoKICAgIGtleSAoc3RyKTogVGhlIGF0dHJpYnV0ZSBuYW1lIHdpdGhpbiB0aGUgY29udGFpbmVkIGx4bWwgZWxlbWVudC4KICAgIGNvbnZfdHlwZSAoZGF0YSB0eXBlKTogRGF0YSB0eXBlIHRoYXQgdGhlIGVsZW1lbnQgdGV4dCB3aWxsCiAgICAgIGJlIGNvbnZlcnRlZCB0by4gUHl0aG9uIHR5cGUsIG9yIGRhdGV0aW1lLmRhdGV0aW1lIHRvIHJlYWQgYSB0aW1lIHVzaW5nCiAgICAgIDptZXRoOmBkYXRldXRpbC5wYXJzZXIuaXNvcGFyc2VgLiBEZWZhdWx0cyB0byBgYGludGBgLgogIFJldHVybnM6CiAgICBwcm9wZXJ0eTogYWNjZXNzb3IgZm9yIHVuZGVybHlpbmcgbHhtbCBlbGVtZW50J3MgYXR0cmlidXRlIGRhdGEuCgogIEV4YW1wbGVzOgoKICAgID4+PiBjbGFzcyBNeUVsZW1lbnQoQWN0aXZpdHlFbGVtZW50KToKICAgIC4uLiAgIG15X3Byb3AgPSBjcmVhdGVfYXR0cl9wcm9wKCdUaW1lJywgZGF0ZXRpbWUuZGF0ZXRpbWUpCiAgICAuLi4gICBcIlwiXCJQcm9wZXJ0eSBkb2NzdHJpbmcgZ29lcyBoZXJlIChpZiBkZXNpcmVkKVwiXCJcIgogICAgLi4uICAgWy4uLl0KCiAgIiIiCiAgcmV0dXJuIHByb3BlcnR5KAogICAgbGFtYmRhIHNlbGY6IHNlbGYuZ2V0X2F0dHIoa2V5LCBjb252X3R5cGU9Y29udl90eXBlKSwKICAgICMgZG9jPWYnOm9iajpge2NvbnZfdHlwZS5fX25hbWVfX31gJwogICkKCgpkZWYgY3JlYXRlX2Rlc2NlbmRlbnRfcHJvcChkZXNjZW5kZW50X2NsYXNzKToKICAiIiJBZGQgZGVzY2VuZGVudCBsaXN0IGFjY2Vzc29yIHByb3BlcnR5IGluc2lkZSBhbiBBY3Rpdml0eUVsZW1lbnQgY2xhc3MKICBkZWZpbml0aW9uLgoKICBUaGUgcHJvcGVydHkgcmV0dXJucyBhbGwgdGhlIGN1cnJlbnQgZWxlbWVudCdzIGRlc2NlbmRlbnRzIG1hdGNoaW5nIHRoZQogIHRhZyBuYW1lIGRlZmluZWQgaW4gdGhlIGRlc2NlbmRlbnQgY2xhc3MuCgogIEFyZ3M6CiAgICBkZXNjZW5kZW50X2NsYXNzIChBY3Rpdml0eUVsZW1lbnQpOiBNdXN0IGJlIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBBY3Rpdml0eUVsZW1lbnRgLgogIFJldHVybnM6CiAgICBwcm9wZXJ0eTogYWNjZXNzb3IgZm9yIHVuZGVybHlpbmcgbHhtbCBlbGVtZW50J3MgZGVzY2VuZGVudCBsaXN0LgoKICBFeGFtcGxlczoKCiAgICA+Pj4gY2xhc3MgTXlFbGVtZW50KEFjdGl2aXR5RWxlbWVudCk6CiAgICAuLi4gICBteV9wcm9wID0gY3JlYXRlX2Rlc2NlbmRlbnRfcHJvcChNeVN1YkVsZW1lbnQpCiAgICAuLi4gICBcIlwiXCJQcm9wZXJ0eSBkb2NzdHJpbmcgZ29lcyBoZXJlIChpZiBkZXNpcmVkKVwiXCJcIgogICAgLi4uICAgWy4uLl0KCiAgIiIiCiAgcmV0dXJuIHByb3BlcnR5KAogICAgbGFtYmRhIHNlbGY6IFsKICAgICAgZGVzY2VuZGVudF9jbGFzcyhlKSAKICAgICAgZm9yIGUgaW4gc2VsZi5lbGVtLnhwYXRoKGYnLi8ve2Rlc2NlbmRlbnRfY2xhc3MuVEFHfScpCiAgICBdLAogICAgZG9jPWYnOm9iajpgbGlzdGAgb2YgOmNsYXNzOmB7ZGVzY2VuZGVudF9jbGFzcy5fX25hbWVfX31gOiAnCiAgICAjIGYnQWxsIGRlc2NlbmRlbnRzIG9mIHRoZSBjb250YWluZWQgbHhtbCBlbGVtZW50IHdpdGggdGFnIG5hbWUgJwogICAgZidBbGwgZWxlbWVudCBkZXNjZW5kZW50cyB3aXRoIHRhZyBuYW1lICJ7ZGVzY2VuZGVudF9jbGFzcy5UQUd9Ii4nLAogICkKCgpjbGFzcyBBY3Rpdml0eUVsZW1lbnQob2JqZWN0KToKICAiIiJCYXNlIGNsYXNzIGZvciBjcmVhdGluZyBjb21wb3NpdGlvbnMgd2l0aCA6Y2xhc3M6"}}]
["c19b979155a9b572899da5b7a41ba715c0a19015-1","c19b979155a9b572899da5b7a41ba715c0a19015","PHxmaW1fcHJlZml4fD4KZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCjx8ZmltX2hvbGV8PgoKCmRlZiBtYWluKCk6CgogICAgZXZhbF9yZXBvcnRzX3BhdGggPSBQYXRoKCdldmFsX3JlcG9ydHMnKQogICAgZ3JhcGhzX3BhdGggPSAncmVwb3J0X2dyYXBocycKCiAgICBQYXRoKGdyYXBoc19wYXRoKS5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpCgogICAgY3N2X3JlYWRlciA9IENzdlJlYWRlcihldmFsX3JlcG9ydHNfcGF0aCkKICAgIGV2YWxfcmVwb3J0cyA9IGNzdl9yZWFkZXIucmVhZF9hbGxfZXZhbF9yZXBvcnRzKCkKCiAgICBhbmFseXplciA9IEV2YWxSZXBvcnRBbmFseXplcihldmFsX3JlcG9ydHMpCgogICAgY2hvaWNlc19wZXJfZmlsZXMgPSBhbmFseXplci5nZXRfY2hvaWNlc19wZXJfZmlsZV9wYWlyKCkKICAgIHJlc3VsdHNfcGVyX2ZpbGVzID0gYW5hbHl6ZXIuZ2V0X3Jlc3VsdHNfcGVyX2ZpbGVfcGFpcigpCgogICAgdmlzdWFsaXplciA9IEV2YWxSZXBvcnRWaXN1YWxpemVyKCkKICAgIHZpc3VhbGl6ZXIuZHJhd19wYW5kYXNfYmFyaF9mb3JfZWFjaF9maWxlKGNob2ljZXNfcGVyX2ZpbGVzLCBncmFwaHNfcGF0aCwgJ2Nob2ljZXMnKQogICAgdmlzdWFsaXplci5kcmF3X3BhbmRhc19iYXJoX2Zvcl9lYWNoX2ZpbGUocmVzdWx0c19wZXJfZmlsZXMsIGdyYXBoc19wYXRoLCAncmVzdWx0cycpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW4oKQo8fGZpbV9zdWZmaXh8PgoKZnJvbSBldmFsdWF0aW9uLnJlcG9ydF9hbmFseXNpcy5ldmFsX3JlcG9ydF9hbmFseXplciBpbXBvcnQgRXZhbFJlcG9ydEFuYWx5emVyCmZyb20gZXZhbHVhdGlvbi5yZXBvcnRfYW5hbHlzaXMuY3N2X3JlYWRlciBpbXBvcnQgQ3N2UmVhZGVyCmZyb20gZXZhbHVhdGlvbi5yZXBvcnRfYW5hbHlzaXMudmlzdWFsaXplciBpbXBvcnQgRXZhbFJlcG9ydFZpc3VhbGl6ZXIKPHxmaW1fZW5kfD4="]
["c19b979155a9b572899da5b7a41ba715c0a19015-2","c19b979155a9b572899da5b7a41ba715c0a19015","PHxmaW1fcHJlZml4fD4KZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCgpmcm9tIGV2YWx1YXRpb24ucmVwb3J0X2FuYWx5c2lzLmV2YWxfcmVwb3J0X2FuYWx5emVyIGltcG9ydCBFdmFsUmVwb3J0QW5hbHl6ZXIKZnJvbSBldmFsdWF0aW9uLnJlcG9ydF9hbmFseXNpcy5jc3ZfcmVhZGVyIGltcG9ydCBDc3ZSZWFkZXIKZnJvbSBldmFsdWF0aW9uLnJlcG9ydF9hbmFseXNpcy52aXN1YWxpemVyIGltcG9ydCBFdmFsUmVwb3J0VmlzdWFsaXplcgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZGVmIG1haW4oKToKCiAgICBldmFsX3JlcG9ydHNfcGF0aCA9IFBhdGgoJ2V2YWxfcmVwb3J0cycpCjx8ZmltX2VuZHw+"]
["c19b979155a9b572899da5b7a41ba715c0a19015-3","c19b979155a9b572899da5b7a41ba715c0a19015","PHxmaW1fcHJlZml4fD4KZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCgpmcm9tIGV2YWx1YXRpb24ucmVwb3J0X2FuYWx5c2lzLmV2YWxfcmVwb3J0X2FuYWx5emVyIGltcG9ydCBFdmFsUmVwb3J0QW5hbHl6ZXIKZnJvbSBldmFsdWF0aW9uLnJlcG9ydF9hbmFseXNpcy5jc3ZfcmVhZGVyIGltcG9ydCBDc3ZSZWFkZXIKZnJvbSBldmFsdWF0aW9uLnJlcG9ydF9hbmFseXNpcy52aXN1YWxpemVyIGltcG9ydCBFdmFsUmVwb3J0VmlzdWFsaXplcgoKCmRlZiBtYWluKCk6CgogICAgZXZhbF9yZXBvcnRzX3BhdGggPSBQYXRoKCdldmFsX3JlcG9ydHMnKQogICAgZ3JhcGhzX3BhdGggPSAncmVwb3J0X2dyYXBocycKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIFBhdGgoZ3JhcGhzX3BhdGgpLm1rZGlyKHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSkKCiAgICBjc3ZfcmVhZGVyID0gQ3N2UmVhZGVyKGV2YWxfcmVwb3J0c19wYXRoKQo8fGZpbV9lbmR8Pg=="]
["c19b979155a9b572899da5b7a41ba715c0a19015-4","c19b979155a9b572899da5b7a41ba715c0a19015","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8Pgpmcm9tIGV2YWx1YXRpb24ucmVwb3J0X2FuYWx5c2lzLnZpc3VhbGl6ZXIgaW1wb3J0IEV2YWxSZXBvcnRWaXN1YWxpemVyCgoKZGVmIG1haW4oKToKCiAgICBldmFsX3JlcG9ydHNfcGF0aCA9IFBhdGgoJ2V2YWxfcmVwb3J0cycpCiAgICBncmFwaHNfcGF0aCA9ICdyZXBvcnRfZ3JhcGhzJwoKICAgIFBhdGgoZ3JhcGhzX3BhdGgpLm1rZGlyKHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSkKCiAgICBjc3ZfcmVhZGVyID0gQ3N2UmVhZGVyKGV2YWxfcmVwb3J0c19wYXRoKQogICAgZXZhbF9yZXBvcnRzID0gY3N2X3JlYWRlci5yZWFkX2FsbF9ldmFsX3JlcG9ydHMoKQoKICAgIGFuYWx5emVyID0gRXZhbFJlcG9ydEFuYWx5emVyKGV2YWxfcmVwb3J0cykKCiAgICBjaG9pY2VzX3Blcl9maWxlcyA9IGFuYWx5emVyLmdldF9jaG9pY2VzX3Blcl9maWxlX3BhaXIoKQogICAgcmVzdWx0c19wZXJfZmlsZXMgPSBhbmFseXplci5nZXRfcmVzdWx0c19wZXJfZmlsZV9wYWlyKCkKCiAgICB2aXN1YWxpemVyID0gRXZhbFJlcG9ydFZpc3VhbGl6ZXIoKQogICAgdmlzdWFsaXplci5kcmF3X3BhbmRhc19iYXJoX2Zvcl9lYWNoX2ZpbGUoY2hvaWNlc19wZXJfZmlsZXMsIGdyYXBoc19wYXRoLCAnY2hvaWNlcycpCiAgICB2aXN1YWxpemVyLmRyYXdfcGFuZGFzX2JhcmhfZm9yX2VhY2hfZmlsZShyZXN1bHRzX3Blcl9maWxlcywgZ3JhcGhzX3BhdGgsICdyZXN1bHRzJykKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAoKZnJvbSBldmFsdWF0aW9uLnJlcG9ydF9hbmFseXNpcy5ldmFsX3JlcG9ydF9hbmFseXplciBpbXBvcnQgRXZhbFJlcG9ydEFuYWx5emVyCmZyb20gZXZhbHVhdGlvbi5yZXBvcnRfYW5hbHlzaXMuY3N2X3JlYWRlciBpbXBvcnQgQ3N2UmVhZGVyCjx8ZmltX2VuZHw+"]
["99cfc8d6c11d65c32fff6d8435f8b65f80c1142d-1","99cfc8d6c11d65c32fff6d8435f8b65f80c1142d","PHxmaW1fcHJlZml4fD4KZnJvbSBtYXRoIGltcG9ydCBzcXJ0Cgpmcm9tIHB5ZGVzLmNvcmUucm5kLnJuZGYgaW1wb3J0IGlkZlN0dWRlbnQKCgpkZWYgZ2V0X2ludGVydmFsX2VzdGltYXRpb24oc2Ftc2l6ZSwgc2RldiwgYWxwaGEpOgogICAgIiIiCiAgICBSZXR1cm5zIHRoZSBpbnRlcnZhbCBlc3RpbWF0aW9uLgogICAgOnBhcmFtIHNhbXNpemU6IChpbnQpIHRoZSBzYW1wbGUgc2l6ZS4KICAgIDpwYXJhbSBzZGV2OiAoZmxvYXQpIHRoZSBzYW1wbGUgc3RhbmRhcmQgZGV2aWF0aW9uLgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICA6cGFyYW0gYWxwaGE6IChmbG9hdCkgdGhlIHNpZ25pZmljYW5jZS4KICAgIDpyZXR1cm46IChmbG9hdCkgdGhlIGludGVydmFsIGdhcC4KICAgICIiIgogICAgaWYgc2Ftc2l6ZSA+IDE6Cjx8ZmltX2VuZHw+"]
["99cfc8d6c11d65c32fff6d8435f8b65f80c1142d-2","99cfc8d6c11d65c32fff6d8435f8b65f80c1142d","PHxmaW1fcHJlZml4fD4KZnJvbSBtYXRoIGltcG9ydCBzcXJ0Cgpmcm9tIHB5ZGVzLmNvcmUucm5kLnJuZGYgaW1wb3J0IGlkZlN0dWRlbnQKCgpkZWYgZ2V0X2ludGVydmFsX2VzdGltYXRpb24oc2Ftc2l6ZSwgc2RldiwgYWxwaGEpOgogICAgIiIiCiAgICBSZXR1cm5zIHRoZSBpbnRlcnZhbCBlc3RpbWF0aW9uLgogICAgOnBhcmFtIHNhbXNpemU6IChpbnQpIHRoZSBzYW1wbGUgc2l6ZS4KICAgIDpwYXJhbSBzZGV2OiAoZmxvYXQpIHRoZSBzYW1wbGUgc3RhbmRhcmQgZGV2aWF0aW9uLgogICAgOnBhcmFtIGFscGhhOiAoZmxvYXQpIHRoZSBzaWduaWZpY2FuY2UuCiAgICA6cmV0dXJuOiAoZmxvYXQpIHRoZSBpbnRlcnZhbCBnYXAuCiAgICAiIiIKICAgIGlmIHNhbXNpemUgPiAxOgogICAgICAgIHJldHVybiBpZGZTdHVkZW50KHNhbXNpemUgLSAxLCAxLjAgLSAoYWxwaGEgLyAyKSkgKiBzZGV2IC8gc3FydChzYW1zaXplIC0gMSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZWxzZToKICAgICAgICByZXR1cm4gMC4wCjx8ZmltX2VuZHw+"]
["99cfc8d6c11d65c32fff6d8435f8b65f80c1142d-3","99cfc8d6c11d65c32fff6d8435f8b65f80c1142d","PHxmaW1fcHJlZml4fD4KZnJvbSBtYXRoIGltcG9ydCBzcXJ0Cgpmcm9tIHB5ZGVzLmNvcmUucm5kLnJuZGYgaW1wb3J0IGlkZlN0dWRlbnQKCgpkZWYgZ2V0X2ludGVydmFsX2VzdGltYXRpb24oc2Ftc2l6ZSwgc2RldiwgYWxwaGEpOgogICAgIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIFJldHVybnMgdGhlIGludGVydmFsIGVzdGltYXRpb24uCiAgICA6cGFyYW0gc2Ftc2l6ZTogKGludCkgdGhlIHNhbXBsZSBzaXplLgogICAgOnBhcmFtIHNkZXY6IChmbG9hdCkgdGhlIHNhbXBsZSBzdGFuZGFyZCBkZXZpYXRpb24uCiAgICA6cGFyYW0gYWxwaGE6IChmbG9hdCkgdGhlIHNpZ25pZmljYW5jZS4KPHxmaW1fZW5kfD4="]
["99cfc8d6c11d65c32fff6d8435f8b65f80c1142d-4","99cfc8d6c11d65c32fff6d8435f8b65f80c1142d","PHxmaW1fcHJlZml4fD4KZnJvbSBtYXRoIGltcG9ydCBzcXJ0Cgpmcm9tIHB5ZGVzLmNvcmUucm5kLnJuZGYgaW1wb3J0IGlkZlN0dWRlbnQKCgpkZWYgZ2V0X2ludGVydmFsX2VzdGltYXRpb24oc2Ftc2l6ZSwgc2RldiwgYWxwaGEpOgogICAgIiIiCiAgICBSZXR1cm5zIHRoZSBpbnRlcnZhbCBlc3RpbWF0aW9uLgo8fGZpbV9ob2xlfD4KICAgICIiIgogICAgaWYgc2Ftc2l6ZSA+IDE6CiAgICAgICAgcmV0dXJuIGlkZlN0dWRlbnQoc2Ftc2l6ZSAtIDEsIDEuMCAtIChhbHBoYSAvIDIpKSAqIHNkZXYgLyBzcXJ0KHNhbXNpemUgLSAxKQogICAgZWxzZToKICAgICAgICByZXR1cm4gMC4wCjx8ZmltX3N1ZmZpeHw+CiAgICA6cGFyYW0gc2Ftc2l6ZTogKGludCkgdGhlIHNhbXBsZSBzaXplLgogICAgOnBhcmFtIHNkZXY6IChmbG9hdCkgdGhlIHNhbXBsZSBzdGFuZGFyZCBkZXZpYXRpb24uCiAgICA6cGFyYW0gYWxwaGE6IChmbG9hdCkgdGhlIHNpZ25pZmljYW5jZS4KICAgIDpyZXR1cm46IChmbG9hdCkgdGhlIGludGVydmFsIGdhcC4KPHxmaW1fZW5kfD4="]
["99cfc8d6c11d65c32fff6d8435f8b65f80c1142d-5","99cfc8d6c11d65c32fff6d8435f8b65f80c1142d","PHxmaW1fcHJlZml4fD4KZnJvbSBtYXRoIGltcG9ydCBzcXJ0Cgpmcm9tIHB5ZGVzLmNvcmUucm5kLnJuZGYgaW1wb3J0IGlkZlN0dWRlbnQKCgpkZWYgZ2V0X2ludGVydmFsX2VzdGltYXRpb24oc2Ftc2l6ZSwgc2RldiwgYWxwaGEpOgogICAgIiIiCiAgICBSZXR1cm5zIHRoZSBpbnRlcnZhbCBlc3RpbWF0aW9uLgogICAgOnBhcmFtIHNhbXNpemU6IChpbnQpIHRoZSBzYW1wbGUgc2l6ZS4KICAgIDpwYXJhbSBzZGV2OiAoZmxvYXQpIHRoZSBzYW1wbGUgc3RhbmRhcmQgZGV2aWF0aW9uLgogICAgOnBhcmFtIGFscGhhOiAoZmxvYXQpIHRoZSBzaWduaWZpY2FuY2UuCjx8ZmltX2hvbGV8PgogICAgZWxzZToKICAgICAgICByZXR1cm4gMC4wCjx8ZmltX3N1ZmZpeHw+CiAgICA6cmV0dXJuOiAoZmxvYXQpIHRoZSBpbnRlcnZhbCBnYXAuCiAgICAiIiIKICAgIGlmIHNhbXNpemUgPiAxOgogICAgICAgIHJldHVybiBpZGZTdHVkZW50KHNhbXNpemUgLSAxLCAxLjAgLSAoYWxwaGEgLyAyKSkgKiBzZGV2IC8gc3FydChzYW1zaXplIC0gMSkKPHxmaW1fZW5kfD4="]
["c1be2a8a8b47f377eb00041467bae530ad7defab-1","c1be2a8a8b47f377eb00041467bae530ad7defab","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiIgoKIiIiCgoKCgoKaW1wb3J0IHJlCmltcG9ydCBsb2dnaW5nCmltcG9ydCBqc29uCgpmcm9tIGZsYXNrIGltcG9ydCByZXF1ZXN0CmZyb20gc3FsYWxjaGVteS5zcWwgaW1wb3J0IHNlbGVjdCwgZnVuYywgYW5kXywgZXhwcmVzc2lvbiwgZXhpc3RzCgpmcm9tIHF1YW50aWZpZWRjb2RlLnNldHRpbmdzIGltcG9ydCBiYWNrZW5kCmZyb20gcXVhbnRpZmllZGNvZGUuYmFja2VuZC5tb2RlbHMgaW1wb3J0IElzc3VlLCBGaWxlUmV2aXNpb24sIFByb2plY3RJc3N1ZUNsYXNzLCBJc3N1ZU9jY3VycmVuY2UKZnJvbSBxdWFudGlmaWVkY29kZS5iYWNrZW5kLnV0aWxzLmFwaSBpbXBvcnQgQXJndW1lbnRFcnJvciwgZ2V0X3BhZ2luYXRpb25fYXJncwpmcm9tIHF1YW50aWZpZWRjb2RlLmJhY2tlbmQuaGVscGVycy5maWxlX3JldmlzaW9uIGltcG9ydCBnZXRfZmlsZV9jb250ZW50X2J5X3NoYQoKCmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKZGVmIGFkZF9jb2RlX3NuaXBwZXRzKHByb2plY3QsIGZpbGVfcmV2aXNpb24sIGlzc3VlX29jY3VycmVuY2VzKToKICAgIHRyeToKICAgICAgICBmaWxlX2NvbnRlbnQgPSBnZXRfZmlsZV9jb250ZW50X2J5X3NoYShwcm9qZWN0LCBmaWxlX3JldmlzaW9uWydzaGEnXSkKICAgICAgICBsaW5lcyA9IGZpbGVfY29udGVudC5zcGxpdCgiXG4iKQogICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgcmFpc2UKICAgICAgICAjIGluIGNhc2Ugb2YgZW5jb2RpbmcgZXJyb3IganVzdCBhcHBlbmQgdGhlIGlzc3VlcyB3aXRob3V0IHNuaXBwZXRzCiAgICAgICAgIyB0aGUgZnJvbnRlbmQgaXMgYWJsZSB0byBoYW5kbGUgdGhpcy4KICAgICAgICByZXR1cm4KICAgIGV4Y2VwdCAoTG9va3VwRXJyb3IsIFVuaWNvZGVEZWNvZGVFcnJvciwgSU9FcnJvcik6CiAgICAgICAgcmV0dXJuCgogICAgZm9yIG9jY3VycmVuY2UgaW4gaXNzdWVfb2NjdXJyZW5jZXM6CiAgICAgICAgaWYgbm90IG9jY3VycmVuY2VbJ2Zyb21fcm93J10gYW5kIG5vdCBvY2N1cnJlbmNlWyd0b19yb3cnXToKICAgICAgICAgICAgb2NjdXJyZW5jZVsnc25pcHBldCddID0gWycnLCAxLCAxXQogICAgICAgICAgICBjb250aW51ZQogICAgICAgIHN0YXJ0ID0gbWF4KDAsIG9jY3VycmVuY2VbJ2Zyb21fcm93J10gLSAzKQo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKY2xhc3MgSXNzdWVMaXN0TWl4aW4ob2JqZWN0KToKICAgICIiIgogICAgUmV0dXJucyBhIGxpc3Qgb2YgaXNzdWVzIHdpdGggdGhlaXIgZmlsZSByZXZpc2lvbnMuCgogICAgV2lsbCBhbHdheXMgcmV0dXJuIG9uZSBlbnRyeSBmb3IgYSBnaXZlbiBpc3N1ZSArIGZpbGUgcmV2aXNpb24uCiAgICAiIiIKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgcHJvY2Vzc19pc3N1ZXMocHJvamVjdCwgcmVzdWx0cyk6CgogICAgICAgIGlzc3VlcyA9IFtdCiAgICAgICAgaXNzdWUgPSBOb25lCiAgICAgICAgZm9yIHJvdyBpbiByZXN1bHRzOgogICAgICAgICAgICBpZiBpc3N1ZSBpcyBOb25lIG9yIGlzc3VlWydwayddICE9IHJvd1snaXNzdWVfcGsnXSBcCiAgICAgICAgICAgICAgICAgICAgb3IgaXNzdWVbJ2ZpbGVfcmV2aXNpb24nXVsncGsnXSAhPSByb3dbJ2ZpbGVfcmV2aXNpb25fcGsnXToKICAgICAgICAgICAgICAgIGlmIGlzc3VlIGlzIG5vdCBOb25lIGFuZCByZXF1ZXN0LmFyZ3MuZ2V0KCd3aXRoX2NvZGUnKToKICAgICAgICAgICAgICAgICAgICBhZGRfY29kZV9zbmlwcGV0cyhwcm9qZWN0LCBpc3N1ZVsnZmlsZV9yZXZpc2lvbiddLCBpc3N1ZVsnb2NjdXJyZW5jZXMnXSkKICAgICAgICAgICAgICAgIGlzc3VlID0geydwayc6IHJvd1snaXNzdWVfcGsnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICdhbmFseXplcic6IHJvd1snYW5hbHl6ZXInXSwKICAgICAgICAgICAgICAgICAgICAgICAgICdjb2RlJzogcm93Wydjb2RlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAnaWdub3JlJyA6IHJvd1snaWdub3JlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAnaWdub3JlX3JlYXNvbicgOiByb3dbJ2lnbm9yZV9yZWFzb24nXSwKICAgICAgICAgICAgICAgICAgICAgICAgICdpZ25vcmVfY29tbWVudCcgOiByb3dbJ2lnbm9yZV9jb21tZW50J10sCiAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZV9yZXZpc2lvbic6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGF0aCc6IHJvd1sncGF0aCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYW5ndWFnZSc6IHJvd1snbGFuZ3VhZ2UnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hhJzogcm93WydzaGEnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGsnOiByb3dbJ2ZpbGVfcmV2aXNpb25fcGsnXSwKICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAnb2NjdXJyZW5jZXMnOiBbXQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaXNzdWUudXBkYXRlKGpzb24ubG9hZHMocm93WydkYXRhJ10pKQogICAgICAgICAgICAgICAgaXNzdWVzLmFwcGVuZChpc3N1ZSkKICAgICAgICAgICAgaXNzdWVfb2NjdXJyZW5jZSA9IHsKICAgICAgICAgICAgICAgICdwayc6IHJvd1snaXNzdWVfb2NjdXJyZW5jZV9wayddLAogICAgICAgICAgICAgICAgJ2Zyb21fY29sdW1uJzogcm93Wydmcm9tX2NvbHVtbiddLAogICAgICAgICAgICAgICAgJ3RvX2NvbHVtbic6IHJvd1sndG9fY29sdW1uJ10sCiAgICAgICAgICAgICAgICAnZnJvbV9yb3cnOiByb3dbJ2Zyb21fcm93J10sCiAgICAgICAgICAgICAgICAndG9fcm93Jzogcm93Wyd0b19yb3cnXSwKICAgICAgICAgICAgICAgICdzZXF1ZW5jZSc6IHJvd1snc2VxdWVuY2UnXQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlzc3VlWydvY2N1cnJlbmNlcyddLmFwcGVuZChpc3N1ZV9vY2N1cnJlbmNlKQoKICAgICAgICAjIHdlIGFkZCB0aGUgY29kZSBzbmlwcGV0cyB0byB0aGUgbGFzdCBpc3N1ZSAoYXMgaXQgd2Fzbid0IGRvbmUgYWJvdmUpCiAgICAgICAgaWYgaXNzdWVzIGFuZCByZXF1ZXN0LmFyZ3MuZ2V0KCd3aXRoX2NvZGUnKToKICAgICAgICAgICAgYWRkX2NvZGVfc25pcHBldHMocHJvamVjdCwgaXNzdWVbJ2ZpbGVfcmV2aXNpb24nXSwgaXNzdWVbJ29jY3VycmVuY2VzJ10pCgogICAgICAgIHJldHVybiBpc3N1ZXMKCgpjbGFzcyBGaWxlUmV2aXNpb25Jc3N1ZUxpc3RNaXhpbihvYmplY3QpOgogICAgIiIiIFJldHVybnMgYSBsaXN0IG9mIGZpbGUgcmV2aXNpb25zIHdpdGggdGhlaXIgaXNzdWVzLgogICAgIiIiCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHByb2Nlc3NfZmlsZV9yZXZpc2lvbnMocHJvamVjdCwgcmVzdWx0cyk6CgogICAgICAgIGZpbGVfcmV2aXNpb25zID0gW10KICAgICAgICBmaWxlX3JldmlzaW9uID0gTm9uZQogICAgICAgIGlzc3VlID0gTm9uZQogICAgICAgIGZvciByb3cgaW4gcmVzdWx0czoKCiAgICAgICAgICAgIGlmIHJlcXVlc3QuYXJncy5nZXQoJ3dpdGhfY29kZScpOgogICAgICAgICAgICAgICAgaWYgKChpc3N1ZSBpcyBub3QgTm9uZSBhbmQgaXNzdWVbJ3BrJ10gIT0gcm93Wydpc3N1ZV9wayddKSBvcgogICAgICAgICAgICAgICAgICAgICAgICAoZmlsZV9yZXZpc2lvbiBpcyBub3QgTm9uZSBhbmQgZmlsZV9yZXZpc2lvblsncGsnXSAhPSByb3dbJ2ZpbGVfcmV2aXNpb25fcGsnXSkpOgogICAgICAgICAgICAgICAgICAgIGFkZF9jb2RlX3NuaXBwZXRzKHByb2plY3QsIGZpbGVfcmV2aXNpb24sIGlzc3VlWydvY2N1cnJlbmNlcyddKQoKICAgICAgICAgICAgaWYgZmlsZV9yZXZpc2lvbiBpcyBOb25lIG9yIGZpbGVfcmV2aXNpb25bJ3BrJ10gIT0gcm93WydmaWxlX3JldmlzaW9uX3BrJ106CiAgICAgICAgICAgICAgICBmaWxlX3JldmlzaW9uID0gewogICAgICAgICAgICAgICAgICAgICdwayc6IHJvd1snZmlsZV9yZXZpc2lvbl9wayddLAogICAgICAgICAgICAgICAgICAgICdwYXRoJzogcm93WydwYXRoJ10sCiAgICAgICAgICAgICAgICAgICAgJ2xhbmd1YWdlJzogcm93WydsYW5ndWFnZSddLAogICAgICAgICAgICAgICAgICAgICdzaGEnOiByb3dbJ3NoYSddLAogICAgICAgICAgICAgICAgICAgICdpc3N1ZXMnOiBbXSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlzc3VlID0gTm9uZQogICAgICAgICAgICAgICAgZmlsZV9yZXZpc2lvbnMuYXBwZW5kKGZpbGVfcmV2aXNpb24pCgogICAgICAgICAgICBpZiBpc3N1ZSBpcyBOb25lIG9yIGlzc3VlWydwayddICE9IHJvd1snaXNzdWVfcGsnXToKICAgICAgICAgICAgICAgIGlzc3VlID0gewogICAgICAgICAgICAgICAgICAgICdwayc6IHJvd1snaXNzdWVfcGsnXSwKICAgICAgICAgICAgICAgICAgICAnYW5hbHl6ZXInOiByb3dbJ2FuYWx5emVyJ10sCiAgICAgICAgICAgICAgICAgICAgJ2NvZGUnOiByb3dbJ2NvZGUnXSwKICAgICAgICAgICAgICAgICAgICAnaWdub3JlJyA6IHJvd1snaWdub3JlJ10sCiAgICAgICAgICAgICAgICAgICAgJ2lnbm9yZV9yZWFzb24nIDogcm93WydpZ25vcmVfcmVhc29uJ10sCiAgICAgICAgICAgICAgICAgICAgJ2lnbm9yZV9jb21tZW50JyA6IHJvd1snaWdub3JlX2NvbW1lbnQnXSwKICAgICAgICAgICAgICAgICAgICAnb2NjdXJyZW5jZXMnOiBbXSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlzc3VlLnVwZGF0ZShqc29uLmxvYWRzKHJvd1snZGF0YSddKSkKICAgICAgICAgICAgICAgIGZpbGVfcmV2aXNpb25bJ2lzc3VlcyddLmFwcGVuZChpc3N1ZSkKCiAgICAgICAgICAgIGlzc3VlX29jY3VycmVuY2UgPSB7CiAgICAgICAgICAgICAgICAncGsnOiByb3dbJ2lzc3VlX29jY3VycmVuY2VfcGsnXSwKICAgICAgICAgICAgICAgICdmcm9tX2NvbHVtbic6IHJvd1snZnJvbV9jb2x1bW4nXSwKICAgICAgICAgICAgICAgICd0b19jb2x1bW4nOiByb3dbJ3RvX2NvbHVtbiddLAogICAgICAgICAgICAgICAgJ2Zyb21fcm93Jzogcm93Wydmcm9tX3JvdyddLAogICAgICAgICAgICAgICAgJ3RvX3Jvdyc6IHJvd1sndG9fcm93J10sCiAgICAgICAgICAgICAgICAnc2VxdWVuY2UnOiByb3dbJ3NlcXVlbmNlJ10sCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaXNzdWVbJ29jY3VycmVuY2VzJ10uYXBwZW5kKGlzc3VlX29jY3VycmVuY2UpCgogICAgICAgICMgd2UgYWRkIHRoZSBjb2RlIHNuaXBwZXRzIHRvIHRoZSBsYXN0IGZpbGUgcmV2aXNpb24gKGFzIGl0IHdhc24ndCBkb25lIGFib3ZlIGluIHRoZSBsb29wKQogICAgICAgIGlmIHJlcXVlc3QuYXJncy5nZXQoJ3dpdGhfY29kZScpIGFuZCBmaWxlX3JldmlzaW9uczoKICAgICAgICAgICAgYWRkX2NvZGVfc25pcHBldHMocHJvamVjdCwgZmlsZV9yZXZpc2lvbiwgaXNzdWVbJ29jY3VycmVuY2VzJ10pCgogICAgICAgIHJldHVybiBmaWxlX3JldmlzaW9ucwo8fGZpbV9zdWZmaXh8PgogICAgICAgIHN0b3AgPSBtaW4obGVuKGxpbmVzKSwgb2NjdXJyZW5jZVsndG9fcm93J10gKyAyKQogICAgICAgIG9jY3VycmVuY2VbJ3NuaXBwZXQnXSA9IHsnY29kZSc6ICJcbiIuam9pbihsaW5lc1tzdGFydDogc3RvcF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJvbSc6IHN0YXJ0ICsgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvJzogc3RvcCArIDEKPHxmaW1fZW5kfD4="]
["8229e92db4a48b0350980d3dee113a5912db0bfd-1","8229e92db4a48b0350980d3dee113a5912db0bfd","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmltcG9ydCB1bml0dGVzdApmcm9tIGJsYWNramFjay5nYW1lIGltcG9ydCBHYW1lLCBCZXQKCmNsYXNzIEdhbWVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX2JldChzZWxmKToKICAgICAgICBnYW1lID0gR2FtZSgpCiAgICAgICAgYmV0ID0gQmV0KDEpCjx8ZmltX2hvbGV8PgpjbGFzcyBCZXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiB0ZXN0X3RvX3N0cmluZyhzZWxmKToKICAgICAgICBiZXQgPSBCZXQoMSkKCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoIjEgZ2lsIGJldCIsIHN0cihiZXQpKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGdhbWUucmVnaXN0ZXJfYmV0KGJldCkKCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWyIxIGdpbCBiZXQiXSwgZ2FtZS5iZXRzKQoKPHxmaW1fZW5kfD4="]
["8229e92db4a48b0350980d3dee113a5912db0bfd-2","8229e92db4a48b0350980d3dee113a5912db0bfd","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmZyb20gYmxhY2tqYWNrLmdhbWUgaW1wb3J0IEdhbWUsIEJldAoKY2xhc3MgR2FtZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgo8fGZpbV9lbmR8Pg=="]
["8235d3a57fd3fecafa5c6fbc8f2897353fc5edc8-1","8235d3a57fd3fecafa5c6fbc8f2897353fc5edc8","PHxmaW1fcHJlZml4fD4KIyBweWxpbnQ6IGRpc2FibGU9Z2xvYmFsLXN0YXRlbWVudCxyZWRlZmluZWQtb3V0ZXItbmFtZQoiIiIgU2NyaXB0IHVzZWQgdG8gbGlzdCBBV1MgQ29nbml0byB1c2VycyAiIiIKaW1wb3J0IGFyZ3BhcnNlCmZyb20gZGF0YWNsYXNzZXMgaW1wb3J0IGFzZGljdCwgZGF0YWNsYXNzCgppbXBvcnQgcGFuZGFzCmltcG9ydCB5YW1sCgppbXBvcnQgY29nbml0byAgIyB0eXBlOiBpZ25vcmUKCgpAZGF0YWNsYXNzKCkKY2xhc3MgVXNlcjoKICAgICIiIiBDbGFzcyBmb3IgQVdTIENvZ25pdG8gdXNlciAiIiIKCiAgICBlbWFpbDogc3RyCiAgICBuYW1lOiBzdHIKICAgIGNvbW1pdHRlZTogc3RyID0gIiIKCiAgICAjIGRlZiBuYW1lKHNlbGYpIC0+IHN0cjoKICAgICMgICAgICIiIiBHZW5lcmF0ZSB0aGUgbmFtZSBmaWVsZCAiIiIKICAgICMgICAgIHJldHVybiBmIntzZWxmLmZpcnN0X25hbWV9IHtzZWxmLmxhc3RfbmFtZX0iCgoKZGVmIGZpbmRfZHVwbGljYXRlKGNsaWVudCwgcHJvZmlsZSwgaXNfZGVidWc9RmFsc2UpOgogICAgcmVzdWx0ID0gW10KICAgIHVzZXJzID0gW10KICAgIGdyb3VwcyA9IGNvZ25pdG8ubGlzdF9ncm91cHMoY2xpZW50LCBwcm9maWxlKQogICAgZm9yIGdyb3VwIGluIGdyb3VwczoKICAgICAgICBpZiBpc19kZWJ1ZzoKICAgICAgICAgICAgcHJpbnQoZiJ7Z3JvdXAubmFtZX06XHR7Z3JvdXAuZGVzY3JpcHRpb259IikKICAgICAgICBncm91cF91c2VycyA9IGNvZ25pdG8ubGlzdF9ncm91cF91c2VycyhjbGllbnQsIHByb2ZpbGUsIGdyb3VwLm5hbWUpCiAgICAgICAgZm9yIGdyb3VwX3VzZXIgaW4gZ3JvdXBfdXNlcnM6CiAgICAgICAgICAgIGlmIGlzX2RlYnVnOgogICAgICAgICAgICAgICAgcHJpbnQoZ3JvdXBfdXNlcikKICAgICAgICAgICAgdXNlciA9IG5leHQoKHUgZm9yIHUgaW4gdXNlcnMgaWYgdS5lbWFpbCA9PSBncm91cF91c2VyLmVtYWlsKSwgTm9uZSkKICAgICAgICAgICAgaWYgdXNlcjoKICAgICAgICAgICAgICAgIHVzZXIuY29tbWl0dGVlID0gZiJ7dXNlci5jb21taXR0ZWV9fHtncm91cC5uYW1lfSIKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHVzZXJzLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICBVc2VyKAogICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWdyb3VwX3VzZXIubmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICBlbWFpbD1ncm91cF91c2VyLmVtYWlsLAogICAgICAgICAgICAgICAgICAgICAgICBjb21taXR0ZWU9Z3JvdXAubmFtZSwKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApCiAgICBmb3IgdXNlciBpbiB1c2VyczoKICAgICAgICBncm91cHMgPSB1c2VyLmNvbW1pdHRlZS5zcGxpdCgifCIpCiAgICAgICAgaWYgbGVuKGdyb3VwcykgPiAxOgogICAgICAgICAgICAjIFVzZXIgaW4gbXVsdGlwbGUgZ3JvdXBzCiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodXNlcikKCiAgICByZXR1cm4gcmVzdWx0CgoKZGVmIGxvYWRfZGF0YShhcmdzKToKICAgICIiIiBMb2FkIHRoZSBwcm9maWxlIGRhdGEgYW5kIGdldCBwb29sIHVzZXJzICIiIgogICAgYXdzX3Byb2ZpbGUgPSBhcmdzLmF3c19wcm9maWxlCiAgICBjaGVja19kdXBsaWNhdGUgPSBhcmdzLmR1cGxpY2F0ZQogICAgZ3JvdXAgPSBhcmdzLmdyb3VwCiAgICBpc19kZWJ1ZyA9IGFyZ3MuZGVidWcKCiAgICBwcm9maWxlID0geWFtbC5sb2FkKG9wZW4oYXdzX3Byb2ZpbGUpLnJlYWQoKSwgTG9hZGVyPXlhbWwuU2FmZUxvYWRlcikKICAgIGNsaWVudCA9IGNvZ25pdG8uaW5pdF9jbGllbnQocHJvZmlsZSkKICAgIHJlc3VsdCA9IFtdCgogICAgaWYgZ3JvdXA6CiAgICAgICAgdXNlcnMgPSBjb2duaXRvLmxpc3RfZ3JvdXBfdXNlcnMoY2xpZW50LCBwcm9maWxlLCBncm91cCkKICAgIGVsaWYgY2hlY2tfZHVwbGljYXRlOgogICAgICAgIHVzZXJzID0gZmluZF9kdXBsaWNhdGUoY2xpZW50LCBwcm9maWxlLCBpc19kZWJ1ZykKICAgIGVsc2U6CiAgICAgICAgdXNlcnMgPSBjb2duaXRvLmxpc3RfdXNlcnMoY2xpZW50LCBwcm9maWxlKQogICAgZm9yIHVzZXIgaW4gdXNlcnM6CiAgICAgICAgaWYgaXNfZGVidWc6CiAgICAgICAgICAgIGlmIGNoZWNrX2R1cGxpY2F0ZSBpcyBGYWxzZToKICAgICAgICAgICAgICAgIHByaW50KAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgICkKICAgICAgICBpZiBncm91cDoKICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChVc2VyKG5hbWU9dXNlci5uYW1lKCksIGVtYWlsPXVzZXIuZW1haWwsIGNvbW1pdHRlZT1ncm91cCkpCiAgICAgICAgZWxpZiBjaGVja19kdXBsaWNhdGU6CiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodXNlcikKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXN1bHQuYXBwZW5kKFVzZXIobmFtZT11c2VyLm5hbWUoKSwgZW1haWw9dXNlci5lbWFpbCkpCgogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBwYXJzZV9hcmd1bWVudHMoKToKICAgICIiIiBQYXJzZSBBcmd1bWVudHMgIiIiCiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKICAgICAgICBkZXNjcmlwdGlvbj0iQVdTIENvZ25pdG8gTGlzdCBDb21tYW5kIExpbmUiLAogICAgICAgICMgdXNhZ2U9ImNvZ25pdG9fdXNlci5weSBbLWhdIGF3c19wcm9maWxlIiwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tZGVidWciLAogICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBoZWxwPSJTaG93IHRoZSB1c2VycyBpcyBlbmFibGVkIG9yIG5vdCIsCiAgICApCiAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKICAgIGdyb3VwLmFkZF9hcmd1bWVudCgKICAgICAgICAiLWQiLAogICAgICAgICItLWR1cGxpY2F0ZSIsCiAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgICAgIGhlbHA9IkZpbmQgdGhlIHVzZXJzIGluIG11bHRpcGxlIGdyb3VwcyIsCiAgICApCiAgICBncm91cC5hZGRfYXJndW1lbnQoCiAgICAgICAgIi1nIiwKICAgICAgICAiLS1ncm91cCIsCiAgICAgICAgYWN0aW9uPSJzdG9yZSIsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBoZWxwPSJHZXQgdGhlIHVzZXJzIGZyb20gdGhlIHNwZWNpZmllZCBncm91cCBvbmx5IiwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoImF3c19wcm9maWxlIiwgaGVscD0iVGhlIGZpbGUgY29udGFpbnMgQVdTIHByb2ZpbGUiKQoKICAgIHJldHVybiBwYXJzZXIucGFyc2VfYXJncygpCgoKZGVmIHNhdmVfZmlsZSh1c2VycywgZmlsZV9wYXRoKToKICAgICIiIiBTYXZlIHVzZXIgaW5mb3JtYXRpb24gdG8gdGhlIGNzdiBmaWxlICIiIgogICAgZGF0YWZyYW1lID0gcGFuZGFzLkRhdGFGcmFtZShbYXNkaWN0KHgpIGZvciB4IGluIHVzZXJzXSkKICAgIGRhdGFmcmFtZS50b19jc3YoZmlsZV9wYXRoLCBpbmRleD1GYWxzZSkKICAgIHByaW50KGYiVXNlciBpbmZvcm1hdGlvbiBpcyB3cml0dGVuIHRvIHtmaWxlX3BhdGh9IikKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgYXJncyA9IHBhcnNlX2FyZ3VtZW50cygpCiAgICB1c2VycyA9IGxvYWRfZGF0YShhcmdzKQoKICAgIGlmIGFyZ3MuZ3JvdXA6CiAgICAgICAgZmlsZV9uYW1lID0gZiJhbGxfe2FyZ3MuZ3JvdXB9LmNzdiIKICAgIGVsaWYgYXJncy5kdXBsaWNhdGU6CiAgICAgICAgZmlsZV9uYW1lID0gImR1cGxpY2F0ZS5jc3YiCiAgICBlbHNlOgogICAgICAgIGZpbGVfbmFtZSA9ICJhbGxfdXNlcnMuY3N2IgogICAgc2F2ZV9maWxlKHVzZXJzLCBmaWxlX25hbWUpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgZiJ1c2VyOiB7dXNlci5uYW1lKCl9IDx7dXNlci5lbWFpbH0+LCAiCiAgICAgICAgICAgICAgICAgICAgKyBmImVuYWJsZWQ6IHt1c2VyLmVuYWJsZWR9LCAiCiAgICAgICAgICAgICAgICAgICAgKyBmImVtYWlsX3ZlcmlmaWVkOiB7dXNlci5lbWFpbF92ZXJpZmllZH0sICIKICAgICAgICAgICAgICAgICAgICArIGYidXNlcl9zdGF0dXM6IHt1c2VyLnVzZXJfc3RhdHVzfSIKPHxmaW1fZW5kfD4="]
["8235d3a57fd3fecafa5c6fbc8f2897353fc5edc8-2","8235d3a57fd3fecafa5c6fbc8f2897353fc5edc8","PHxmaW1fcHJlZml4fD4KIyBweWxpbnQ6IGRpc2FibGU9Z2xvYmFsLXN0YXRlbWVudCxyZWRlZmluZWQtb3V0ZXItbmFtZQoiIiIgU2NyaXB0IHVzZWQgdG8gbGlzdCBBV1MgQ29nbml0byB1c2VycyAiIiIKaW1wb3J0IGFyZ3BhcnNlCmZyb20gZGF0YWNsYXNzZXMgaW1wb3J0IGFzZGljdCwgZGF0YWNsYXNzCgppbXBvcnQgcGFuZGFzCmltcG9ydCB5YW1sCgppbXBvcnQgY29nbml0byAgIyB0eXBlOiBpZ25vcmUKCgpAZGF0YWNsYXNzKCkKY2xhc3MgVXNlcjoKICAgICIiIiBDbGFzcyBmb3IgQVdTIENvZ25pdG8gdXNlciAiIiIKCiAgICBlbWFpbDogc3RyCiAgICBuYW1lOiBzdHIKICAgIGNvbW1pdHRlZTogc3RyID0gIiIKCiAgICAjIGRlZiBuYW1lKHNlbGYpIC0+IHN0cjoKICAgICMgICAgICIiIiBHZW5lcmF0ZSB0aGUgbmFtZSBmaWVsZCAiIiIKICAgICMgICAgIHJldHVybiBmIntzZWxmLmZpcnN0X25hbWV9IHtzZWxmLmxhc3RfbmFtZX0iCgoKZGVmIGZpbmRfZHVwbGljYXRlKGNsaWVudCwgcHJvZmlsZSwgaXNfZGVidWc9RmFsc2UpOgogICAgcmVzdWx0ID0gW10KICAgIHVzZXJzID0gW10KICAgIGdyb3VwcyA9IGNvZ25pdG8ubGlzdF9ncm91cHMoY2xpZW50LCBwcm9maWxlKQogICAgZm9yIGdyb3VwIGluIGdyb3VwczoKICAgICAgICBpZiBpc19kZWJ1ZzoKICAgICAgICAgICAgcHJpbnQoZiJ7Z3JvdXAubmFtZX06XHR7Z3JvdXAuZGVzY3JpcHRpb259IikKICAgICAgICBncm91cF91c2VycyA9IGNvZ25pdG8ubGlzdF9ncm91cF91c2VycyhjbGllbnQsIHByb2ZpbGUsIGdyb3VwLm5hbWUpCiAgICAgICAgZm9yIGdyb3VwX3VzZXIgaW4gZ3JvdXBfdXNlcnM6CiAgICAgICAgICAgIGlmIGlzX2RlYnVnOgogICAgICAgICAgICAgICAgcHJpbnQoZ3JvdXBfdXNlcikKICAgICAgICAgICAgdXNlciA9IG5leHQoKHUgZm9yIHUgaW4gdXNlcnMgaWYgdS5lbWFpbCA9PSBncm91cF91c2VyLmVtYWlsKSwgTm9uZSkKICAgICAgICAgICAgaWYgdXNlcjoKICAgICAgICAgICAgICAgIHVzZXIuY29tbWl0dGVlID0gZiJ7dXNlci5jb21taXR0ZWV9fHtncm91cC5uYW1lfSIKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHVzZXJzLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICBVc2VyKAogICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWdyb3VwX3VzZXIubmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICBlbWFpbD1ncm91cF91c2VyLmVtYWlsLAogICAgICAgICAgICAgICAgICAgICAgICBjb21taXR0ZWU9Z3JvdXAubmFtZSwKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApCiAgICBmb3IgdXNlciBpbiB1c2VyczoKICAgICAgICBncm91cHMgPSB1c2VyLmNvbW1pdHRlZS5zcGxpdCgifCIpCiAgICAgICAgaWYgbGVuKGdyb3VwcykgPiAxOgogICAgICAgICAgICAjIFVzZXIgaW4gbXVsdGlwbGUgZ3JvdXBzCiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodXNlcikKCiAgICByZXR1cm4gcmVzdWx0CgoKZGVmIGxvYWRfZGF0YShhcmdzKToKICAgICIiIiBMb2FkIHRoZSBwcm9maWxlIGRhdGEgYW5kIGdldCBwb29sIHVzZXJzICIiIgogICAgYXdzX3Byb2ZpbGUgPSBhcmdzLmF3c19wcm9maWxlCiAgICBjaGVja19kdXBsaWNhdGUgPSBhcmdzLmR1cGxpY2F0ZQogICAgZ3JvdXAgPSBhcmdzLmdyb3VwCiAgICBpc19kZWJ1ZyA9IGFyZ3MuZGVidWcKCiAgICBwcm9maWxlID0geWFtbC5sb2FkKG9wZW4oYXdzX3Byb2ZpbGUpLnJlYWQoKSwgTG9hZGVyPXlhbWwuU2FmZUxvYWRlcikKICAgIGNsaWVudCA9IGNvZ25pdG8uaW5pdF9jbGllbnQocHJvZmlsZSkKICAgIHJlc3VsdCA9IFtdCgogICAgaWYgZ3JvdXA6CiAgICAgICAgdXNlcnMgPSBjb2duaXRvLmxpc3RfZ3JvdXBfdXNlcnMoY2xpZW50LCBwcm9maWxlLCBncm91cCkKICAgIGVsaWYgY2hlY2tfZHVwbGljYXRlOgogICAgICAgIHVzZXJzID0gZmluZF9kdXBsaWNhdGUoY2xpZW50LCBwcm9maWxlLCBpc19kZWJ1ZykKICAgIGVsc2U6CiAgICAgICAgdXNlcnMgPSBjb2duaXRvLmxpc3RfdXNlcnMoY2xpZW50LCBwcm9maWxlKQogICAgZm9yIHVzZXIgaW4gdXNlcnM6CiAgICAgICAgaWYgaXNfZGVidWc6CiAgICAgICAgICAgIGlmIGNoZWNrX2R1cGxpY2F0ZSBpcyBGYWxzZToKICAgICAgICAgICAgICAgIHByaW50KAogICAgICAgICAgICAgICAgICAgIGYidXNlcjoge3VzZXIubmFtZSgpfSA8e3VzZXIuZW1haWx9PiwgIgogICAgICAgICAgICAgICAgICAgICsgZiJlbmFibGVkOiB7dXNlci5lbmFibGVkfSwgIgogICAgICAgICAgICAgICAgICAgICsgZiJlbWFpbF92ZXJpZmllZDoge3VzZXIuZW1haWxfdmVyaWZpZWR9LCAiCiAgICAgICAgICAgICAgICAgICAgKyBmInVzZXJfc3RhdHVzOiB7dXNlci51c2VyX3N0YXR1c30iCiAgICAgICAgICAgICAgICApCiAgICAgICAgaWYgZ3JvdXA6CiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoVXNlcihuYW1lPXVzZXIubmFtZSgpLCBlbWFpbD11c2VyLmVtYWlsLCBjb21taXR0ZWU9Z3JvdXApKQogICAgICAgIGVsaWYgY2hlY2tfZHVwbGljYXRlOgogICAgICAgICAgICByZXN1bHQuYXBwZW5kKHVzZXIpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChVc2VyKG5hbWU9dXNlci5uYW1lKCksIGVtYWlsPXVzZXIuZW1haWwpKQoKICAgIHJldHVybiByZXN1bHQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCmRlZiBwYXJzZV9hcmd1bWVudHMoKToKICAgICIiIiBQYXJzZSBBcmd1bWVudHMgIiIiCjx8ZmltX2VuZHw+"]
["f91249253d67b25cc765b3d42d15110cebce8c8c-1","f91249253d67b25cc765b3d42d15110cebce8c8c","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiIiIgpieSBBbGV4IEhvbGNvbWJlCkJlZm9yZSBicm91Z2h0IGludG8gdGhlIHJlcG9zaXRvcnksIHRoaXMgZmlsZSB3YXMgbHRyc05vaXNlQWR2YW5jZVF1ZXN0TWFudWFsbHkucHkKSSB1c2VkIHRvIGhhdmUgdGhlIG5vaXNlIHBhcmFtZXRlciBnbyBmcm9tIDAgdG8gMSBidXQgd2l0aCBsb2cgc3RlcHBpbmcsIHN0YWlyY2FzZSBhbHdheXMgY3JhcHBlZCBvdXQsIGRvbid0IGtub3cgd2h5LApzbyBJIHVzZSBwZXJjZW50Tm9pc2UgKDAtPjEwMCkgaW5zdGVhZCBvZiBwcm9wb3J0aW9uCiIiIgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCmZyb20gcHN5Y2hvcHkgaW1wb3J0IGNvcmUsIHZpc3VhbCwgZXZlbnQsIG1pc2MsIGRhdGEsIGd1aQppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG9zLCBweWxhYgpmcm9tIG1hdGggaW1wb3J0IGF0YW4sIGxvZwpmcm9tIG5vaXNlU3RhaXJjYXNlSGVscGVycyBpbXBvcnQgcHJpbnRTdGFpcmNhc2UsIGNyZWF0ZU5vaXNlLCB0b1N0YWlyY2FzZSwgb3V0T2ZTdGFpcmNhc2UsIHBsb3REYXRhQW5kUHN5Y2hvbWV0cmljQ3VydmUKZGVzY2VuZGluZ1BzeWNobyA9IFRydWUKCiMgY3JlYXRlIGEgZGlhbG9nIGZyb20gZGljdGlvbmFyeQppbmZvRmlyc3QgPSB7ICdQbG90IGZha2UgZGF0YSAobm90IHN0YWlyY2FzZSBkYXRhKSc6IEZhbHNlLCAgICd0aHJlc2hDcml0ZXJpb24nOiAwLjU4IH0KZGxnUmVzdWx0ID0gZ3VpLkRsZ0Zyb21EaWN0KGRpY3Rpb25hcnk9aW5mb0ZpcnN0LCAKICAgIHRpdGxlPSdTdGFpcmNhc2UgdG8gZmluZCB0aHJlc2ggbm9pc2UgbGV2ZWwsIGV4YW1wbGUgd2l0aCBzaW5nbGUgbGV0dGVyIHByZXNlbnRhdGlvbicsIAogICAgb3JkZXI9WydQbG90IGZha2UgZGF0YSAobm90IHN0YWlyY2FzZSBkYXRhKScsICd0aHJlc2hDcml0ZXJpb24nXSwgCiAgICAjZml4ZWQ9WydDaGVjayByZWZyZXNoIGV0YyddKSN0aGlzIGF0dHJpYnV0ZSBjYW4ndCBiZSBjaGFuZ2VkIGJ5IHRoZSB1c2VyCiAgICApCmlmIG5vdCBkbGdSZXN1bHQuT0s6CiAgICBwcmludCgnVXNlciBjYW5jZWxsZWQgZnJvbSBkaWFsb2cgYm94Jyk7IGNvcmUucXVpdCgpCnBsb3RGYWtlRGF0YUluc3RlYWQgPSBpbmZvRmlyc3RbJ1Bsb3QgZmFrZSBkYXRhIChub3Qgc3RhaXJjYXNlIGRhdGEpJ10KdGhyZXNoQ3JpdGVyaW9uID0gaW5mb0ZpcnN0Wyd0aHJlc2hDcml0ZXJpb24nXSAjdGhyZXNoQ3JpdGVyaW9uIGlzIHByb3BvcnRpb24gY29ycmVjdCBmb3Igd2hpY2ggd2FudCB0byBlc3RpbWF0ZSB0aGUgcGFyYW1ldGVyIChpbnRlbnNpdHkpIGxldmVsCgpkZWYgbnVtYmVyVG9MZXR0ZXIobnVtYmVyKTogIzAgPSBBLCAyNSA9IFoKICAgICNpZiBpdCdzIG5vdCByZWFsbHkgYSBsZXR0ZXIsIHJldHVybiBACiAgICAjaWYgdHlwZShudW1iZXIpICE9IHR5cGUoNSkgYW5kIHR5cGUobnVtYmVyKSAhPSB0eXBlKG5wLmFycmF5KFszXSlbMF0pOiAjbm90IGFuIGludGVnZXIgb3IgbnVtcHkuaW50MzIKICAgICMgICAgcmV0dXJuICgnQCcpCiAgICBpZiBudW1iZXIgPCAwIG9yIG51bWJlciA+IDI1OgogICAgICAgIHJldHVybiAoJ0AnKQogICAgZWxzZTogI2l0J3MgcHJvYmFibHkgYSBsZXR0ZXIKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJldHVybiBjaHIoIG9yZCgnQScpK251bWJlciApCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICByZXR1cm4oJ0AnKQoKYXV0b0xvZ2dpbmc9RmFsc2UKI2NyZWF0ZSBhIHdpbmRvdyB0byBkcmF3IGluCndpZHRoUGl4PTYwMCAjbW9uaXRvciB3aWR0aCBpbiBwaXhlbHMKbW9uaXRvcndpZHRoID0gMzguNyAjbW9uaXRvciB3aWR0aCBpbiBjbQp2aWV3ZGlzdCA9IDU3LjsgI2NtCmZ1bGxzY3JlZW4gPSAwCgpteVdpbiA9IHZpc3VhbC5XaW5kb3coKHdpZHRoUGl4LHdpZHRoUGl4KSwgYWxsb3dHVUk9RmFsc2UsIGNvbG9yPTAsIAogICAgICAgIG1vbml0b3I9J3Rlc3RNb25pdG9yJyxmdWxsc2NyPWZ1bGxzY3JlZW4sd2luVHlwZT0ncHlnbGV0JywgdW5pdHM9J25vcm0nKQoKYmdDb2xvciA9IFstMS4sLTEuLC0xLl0gIyBbLTEsLTEsLTFdCmN1ZUNvbG9yID0gWzEuLDEuLDEuXQpsZXR0ZXJDb2xvciA9IFsxLiwxLiwxLl0KbHRySGVpZ2h0ID0gMi41CnBpeGVscGVyZGVncmVlID0gd2lkdGhQaXgvIChhdGFuKG1vbml0b3J3aWR0aC92aWV3ZGlzdCkgL25wLnBpKjE4MCkKCiNJTklUSUFMSVNFIFNPTUUgU1RJTVVMSQojcHJlZHJhdyBhbGwgMjYgbGV0dGVycyAKbGV0dGVyc0RyYXdPYmplY3RzID0gbGlzdCgpCmZvciBpIGluIHJhbmdlKDAsMjYpOgogICBsZXR0ZXJEcmF3ID0gdmlzdWFsLlRleHRTdGltKG15V2luLHBvcz0oMCwwKSxjb2xvclNwYWNlPSdyZ2InLGNvbG9yPWxldHRlckNvbG9yLGFsaWduSG9yaXo9J2NlbnRlcicsYWxpZ25WZXJ0PSdjZW50ZXInLHVuaXRzPSdkZWcnLGF1dG9Mb2c9YXV0b0xvZ2dpbmcpCiAgIGxldHRlckRyYXcuc2V0SGVpZ2h0KCBsdHJIZWlnaHQgKSAjTWFydGluaSBsZXR0ZXJzIHdlcmUgMi41ZGVnIGhpZ2gKICAgbGV0dGVyID0gbnVtYmVyVG9MZXR0ZXIoaSkKICAgI3ByaW50ICdhZGRpbmcgbGV0dGVyJywgbGV0dGVyLCAnIHRvIHRoZSBkcmF3aW5nIHF1ZXVlJwogICBsZXR0ZXJEcmF3LnNldFRleHQobGV0dGVyKQogICBsZXR0ZXJEcmF3LnNldENvbG9yKGJnQ29sb3IpCiAgIGxldHRlcnNEcmF3T2JqZWN0cy5hcHBlbmQobGV0dGVyRHJhdykKICAKI0FsbCBub2lzZSBkb3QgY29vcmRpbmF0ZXMgdWx0aW1hdGVseSBpbiBwaXhlbHMsIHNvIGNhbiBzcGVjaWZ5IGVhY2ggZG90IGlzIG9uZSBwaXhlbCAKZmllbGRXaWR0aERlZz1sdHJIZWlnaHQgKjEuOApmaWVsZFdpZHRoUGl4ID0gaW50KCByb3VuZCggZmllbGRXaWR0aERlZypwaXhlbHBlcmRlZ3JlZSApICkKI2NyZWF0ZSBhIGdyaWQgb2YgeHkgdmFscwpwcm9wb3J0bk5vaXNlID0gMC4xCgoobm9pc2UsYWxsRmllbGRDb29yZHMsbnVtTm9pc2VEb3RzKSA9IGNyZWF0ZU5vaXNlKHByb3BvcnRuTm9pc2UsbXlXaW4sZmllbGRXaWR0aFBpeCxiZ0NvbG9yKQoKc3RlcFNpemVzTGluZWFyID0gWy4yLC4yLC4xLC4xLC4wNSwuMDVdCnN0ZXBTaXplc0xvZyA9IFtsb2coMS40LDEwKSxsb2coMS40LDEwKSxsb2coMS4zLDEwKSxsb2coMS4zLDEwKSxsb2coMS4yLDEwKV0KI2NyZWF0ZSB0aGUgc3RhaXJjYXNlIGhhbmRsZXIKdXNlUXVlc3QgPSBUcnVlCmlmICB1c2VRdWVzdDoKICAgIHN0YWlyY2FzZSA9IGRhdGEuUXVlc3RIYW5kbGVyKHN0YXJ0VmFsID0gOTUsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0VmFsU2QgPSAxMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcEludGVydmFsPSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5UcmlhbHM9NTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgI2V4dHJhSW5mbyA9IHRoaXNJbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgIHBUaHJlc2hvbGQgPSB0aHJlc2hDcml0ZXJpb24sICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgIGdhbW1hID0gMS4vMjYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE9MC4wMiwgI2xhcHNlIHJhdGUsIEkgc3VwcG9zZSBmb3IgV2VpYnVsbCBmdW5jdGlvbiBmaXQKICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAncXVhbnRpbGUnLCAjdXNlcyB0aGUgbWVkaWFuIG9mIHRoZSBwb3N0ZXJpb3IgYXMgdGhlIGZpbmFsIGFuc3dlcgogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBUeXBlID0gJ2xvZycsICAjd2lsbCBob21lIGluIG9uIHRoZSA4MCUgdGhyZXNob2xkLiBCdXQgc3RlcFR5cGUgPSAnbG9nJyBkb2Vzbid0IHVzdWFsbHkgd29yawogICAgICAgICAgICAgICAgICAgICAgICAgIG1pblZhbD0xLCBtYXhWYWwgPSAxMDAKICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICBwcmludCgnY3JlYXRlZCBRVUVTVCBzdGFpcmNhc2UnKQplbHNlOiAKICAgIHN0YWlyY2FzZSA9IGRhdGEuU3RhaXJIYW5kbGVyKHN0YXJ0VmFsID0gMC4xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwVHlwZSA9ICdsb2cnLCAjaWYgbG9nLCB3aGF0IGRvIEkgd2FudCB0byBtdWx0aXBseSBpdCBieQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwU2l6ZXMgPSBzdGVwU2l6ZXNMb2csICAgICNzdGVwIHNpemUgdG8gdXNlIGFmdGVyIGVhY2ggcmV2ZXJzYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluVmFsPTAsIG1heFZhbD0xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuVXA9MSwgbkRvd249MywgICN3aWxsIGhvbWUgaW4gb24gdGhlIDgwJSB0aHJlc2hvbGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgblJldmVyc2FscyA9IDIsICNUaGUgc3RhaXJjYXNlIHRlcm1pbmF0ZXMgd2hlbiBuVHJpYWxzIGhhdmUgYmVlbiBleGNlZWRlZCwgb3Igd2hlbiBib3RoIG5SZXZlcnNhbHMgYW5kIG5UcmlhbHMgaGF2ZSBiZWVuIGV4Y2VlZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5UcmlhbHM9MSkKICAgIHByaW50KCdjcmVhdGVkIGNvbnZlbnRpb25hbCBzdGFpcmNhc2UnKQoKbWVzc2FnZSA9dmlzdWFsLlRleHRTdGltKG15V2luLHRleHQ9J05PVCBZRVQgU0VUJywgcG9zPSgwLC0wLjUpKQpjb3JyZWN0SW5jb3JyZWN0TWVzc2FnZSA9IHZpc3VhbC5UZXh0U3RpbShteVdpbix0ZXh0PScnLCBwb3M9KDAsKzAuNSkpCgp0aW1lRm9yTmV4dFRyaWFsID0gRmFsc2UKcmVmcmVzaE5vaXNlPUZhbHNlCnRoaXNDb3JyPTIKdHJpYWxDbG9jayA9IGNvcmUuQ2xvY2soKQp0PWxhc3RGUFN1cGRhdGU9MApleHBTdG9wPSBGYWxzZQpuRWFzeVN0YXJ0ZXJUcmlhbHMgPSAwCnByaW50KCdzdGFydGluZyBzdGFpcmNhc2Ugd2l0aCBmb2xsb3dpbmcgc2V0dGluZ3M6JykKcHJpbnRTdGFpcmNhc2Uoc3RhaXJjYXNlLCBkZXNjZW5kaW5nUHN5Y2hvLCBicmllZlRyaWFsVXBkYXRlPUZhbHNlLCBwcmludEludGVybmFsVmFsPVRydWUsICBhbHNvTG9nPUZhbHNlKQpkb2luZ1N0YWlyY2FzZVBoYXNlID0gRmFsc2UgI0ZpcnN0IHBoYXNlIG9mIGV4cGVyaW1lbnQgaXMgbWV0aG9kIG9mIGNvbnN0YW50IHN0aW11bGkuIElmIHVzZSBuYWtlZCBRVUVTVCwgbWlnaHQgY29udmVyZ2UgdG9vIHNvb24KaW5pdGlhbE5vbnN0YWlyY2FzZVRyaWFscyA9IG5wLmFycmF5KFs1LDIwLDIwLDIwLCA1MCw1MCw1MCw1LDgwLDgwLDgwLDUsOTUsOTUsOTVdKQpjb3JyRWFjaFRyaWFsID0gbGlzdCgpICNvbmx5IG5lZWRlZCBmb3IgaW5pdGlhbE5vbnN0YWlyY2FzZVRyaWFscwpvdmVyYWxsVHJpYWxOID0gLTEKd2hpbGUgKG5vdCBzdGFpcmNhc2UuZmluaXNoZWQpIGFuZCBleHBTdG9wPT1GYWxzZToKICAgIGlmIG92ZXJhbGxUcmlhbE4rMSA8IGxlbihpbml0aWFsTm9uc3RhaXJjYXNlVHJpYWxzKTogI3N0aWxsIGRvaW5nIGluaXRpYWxOb25zdGFpcmNhc2VUcmlhbHMKICAgICAgICBvdmVyYWxsVHJpYWxOICs9IDEKICAgICAgICBwZXJjZW50Tm9pc2UgPSBpbml0aWFsTm9uc3RhaXJjYXNlVHJpYWxzW292ZXJhbGxUcmlhbE5dCiAgICBlbHNlOgogICAgICAgIGlmIG92ZXJhbGxUcmlhbE4rMSA9PSBsZW4oaW5pdGlhbE5vbnN0YWlyY2FzZVRyaWFscyk6ICNhZGQgdGhlc2Ugbm9uLXN0YWlyY2FzZSB0cmlhbHMgc28gUVVFU1Qga25vd3MgYWJvdXQgdGhlbQogICAgICAgICAgICBwcmludCgnSW1wb3J0aW5nICcsY29yckVhY2hUcmlhbCwnIGFuZCBpbnRlbnNpdGllcyAnLHJlcHIoaW5pdGlhbE5vbnN0YWlyY2FzZVRyaWFscykpCiAgICAgICAgICAgIHN0YWlyY2FzZS5pbXBvcnREYXRhKCB0b1N0YWlyY2FzZShpbml0aWFsTm9uc3RhaXJjYXNlVHJpYWxzLGRlc2NlbmRpbmdQc3ljaG8pLCBucC5hcnJheShjb3JyRWFjaFRyaWFsKSkgCiAgICAgICAgICAgIAogICAgICAgIHRyeTogI2FkdmFuY2UgdGhlIHN0YWlyY2FzZQogICAgICAgICAgICBwZXJjZW50Tm9pc2UgPSBzdGFpcmNhc2UubmV4dCgpCiAgICAgICAgICAgIGlmIGRlc2NlbmRpbmdQc3ljaG86ICN0aGlzIGlzIGZyZWFraW5nIGF3a3dhcmQuIFN0YWlyY2FzZS5uZXh0KCkgdW4tbG9ncyBpdCwgYnV0IHRoZXJlJ3Mgbm8gd3JhcHBlciBmb3IgaW50ZW5zaXRpZXMgdGhhdCB1bi1sb2dzIHRoZW0uIFBzeWNob3B5IHNob3VsZCBhZGQgdGhhdAogICAgICAgICAgICAgICBwZXJjZW50Tm9pc2UgPSAxMDAtIHBlcmNlbnROb2lzZSAgI3dpbGwgc3RlcCB0aHJvdWdoIHRoZSBzdGFpcmNhc2UsIGJhc2VkIG9uIHdoZXRoZXIgdG9sZCBpdCAoYWRkRGF0YSkgZ290IGl0IHJpZ2h0IG9yIHdyb25nCiAgICAgICAgICAgIG92ZXJhbGxUcmlhbE4gKz0gMQogICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOiAjTmVlZCB0aGlzIGhlcmUsIGV2ZW4gdGhvdWdoIHRlc3QgZm9yIGZpbmlzaGVkIGFib3ZlLiBJIGNhbid0IHVuZGVyc3RhbmQgd2h5IGZpbmlzaGVkIHRlc3QgZG9lc24ndCBhY2NvbXBsaXNoIHRoaXMuCiAgICAgICAgICAgIHByaW50KCdzdG9wcGluZyBiZWNhdXNlIHN0YWlyY2FzZS5uZXh0KCkgcmV0dXJuZWQgYSBTdG9wSXRlcmF0aW9uLCB3aGljaCBpdCBkb2VzIHdoZW4gaXQgaXMgZmluaXNoZWQnKQogICAgICAgICAgICBicmVhayAjYnJlYWsgb3V0IG9mIHRoZSB0cmlhbHMgbG9vcAogICAgcHJpbnQoJ292ZXJhbGxUcmlhbE49JyxvdmVyYWxsVHJpYWxOLCAnICAgcGVyY2VudE5vaXNlIGZvciB0aGlzIHRyaWFsID0gJywgcm91bmQocGVyY2VudE5vaXNlLDIpKSAjZGVidWdPTgoKICAgIHRoaXNMZXR0ZXJJZHggPSBucC5yYW5kb20ucmFuZGludCgwLDI2KTsgI2Nob29zZSByYW5kb20gbGV0dGVyCiAgICByZWZyZXNoTm9pc2UgPSBUcnVlCiAgICBpZiB0aW1lRm9yTmV4dFRyaWFsOgogICAgICAgIGNvcnJlY3RJbmNvcnJlY3RNZXNzYWdlLnNldFRleHQoIFsnV1JPTkchJywnUklHSFQhJ11bdGhpc0NvcnJdICkKICAgIHRpbWVGb3JOZXh0VHJpYWwgPSBGYWxzZQogICAgd2hpbGUgbm90IHRpbWVGb3JOZXh0VHJpYWw6CiAgICAgICAgbWVzc2FnZS5zZXRUZXh0KCAnTm9pc2UgPSAnICsgc3RyKHJvdW5kKHBlcmNlbnROb2lzZSwyKSkgKyAnJScgKQogICAgICAgIG1lc3NhZ2UuZHJhdygpCiAgICAgICAgY29ycmVjdEluY29ycmVjdE1lc3NhZ2UuZHJhdygpCiAgICAgICAgaWYgcmVmcmVzaE5vaXNlOgogICAgICAgICAgICAobm9pc2UsYWxsRmllbGRDb29yZHMsbnVtTm9pc2VEb3RzKSA9IGNyZWF0ZU5vaXNlKHBlcmNlbnROb2lzZS8xMDAuLG15V2luLGZpZWxkV2lkdGhQaXgsYmdDb2xvcikKICAgICAgICAgICAgcmVmcmVzaE5vaXNlID0gRmFsc2UKICAgICAgICAgICAgCiAgICAgICAgdD10cmlhbENsb2NrLmdldFRpbWUoKQogICAgICAgIGxldHRlcnNEcmF3T2JqZWN0c1t0aGlzTGV0dGVySWR4XS5zZXRDb2xvciggbGV0dGVyQ29sb3IgKQogICAgICAgIGxldHRlcnNEcmF3T2JqZWN0c1t0aGlzTGV0dGVySWR4XS5kcmF3KCkgI0RSQVcgU1RJTVVMVVMhCiAgICAgICAgaWYgbm9pc2UgIT0gTm9uZTogI21vcmUgdGhhbiAwIG5vaXNlIGRvdHMKICAgICAgICAgICAgbm9pc2UuZHJhdygpCiAgICAgICAgbXlXaW4uZmxpcCgpCiAgICAgICAgCiAgICAgICAgI2hhbmRsZSBrZXkgcHJlc3NlcyBlYWNoIGZyYW1lCiAgICAgICAgZm9yIGtleSBpbiBldmVudC5nZXRLZXlzKCk6CiAgICAgICAgICAgIGtleSA9IGtleS51cHBlcigpCiAgICAgICAgICAgIGlmIGtleSBpbiBbJ1NQQUNFJyxdOiAjYSBrZXkgdG8gcHJlc3MgaWYgeW91IHdhbnQgdG8gc2VlIGEgcmFuZG9tIG5ldyBub2lzZSBwYXR0ZXJuCiAgICAgICAgICAgICAgICByZWZyZXNoTm9pc2UgPSBUcnVlCiAgICAgICAgICAgIGlmIGtleSBpbiBbJ0xTSElGVCcsJ0VRVUFMUyddOiAjbHNoaWZ0IHNlZW1zIHRvIGJlIHBsdXMgc2lnbiwgYnV0IGRvZXNuJ3Qgd29yayB2ZXJ5IHdlbGwKICAgICAgICAgICAgICAgIHBlcmNlbnROb2lzZSArPSAyICMgbWluKHByb3BvcnRuTm9pc2UrMC4wMiwxKQogICAgICAgICAgICAgICAgcmVmcmVzaE5vaXNlID0gVHJ1ZQogICAgICAgICAgICBpZiBrZXkgaW4gWydNSU5VUyddOgogICAgICAgICAgICAgICAgcGVyY2VudE5vaXNlICs9IC0yICMgbWluKHByb3BvcnRuTm9pc2UtMC4wMiwxKQogICAgICAgICAgICAgICAgcmVmcmVzaE5vaXNlID0gVHJ1ZQogICAgICAgICAgICBpZiBrZXkgaW4gWydFU0NBUEUnXToKICAgICAgICAgICAgICAgIGV4cFN0b3A9VHJ1ZQogICAgICAgICAgICBpZiBrZXkgaW4gWydBJywnQicsJ0MnLCAnRCcsICdFJywnRicsICdHJywnSCcsJ0knLCAnSicsICAnSycsICdMJywgJ00nLCAnTicsICdPJywgJ1AnLCdRJywnUicsICdTJywnVCcsJ1UnLCdWJywnVycsICdYJywgJ1knLCdaJ106CiAgICAgICAgICAgICAgICB0aW1lRm9yTmV4dFRyaWFsID0gVHJ1ZQogICAgICAgICAgICAgICAgaWYgb3JkKGtleSktb3JkKCdBJykgPT0gdGhpc0xldHRlcklkeDoKICAgICAgICAgICAgICAgICAgICB0aGlzQ29yciA9IDEjY29ycmVjdAogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICB0aGlzQ29yciA9IDAjaW5jb3JyZWN0CiAgICAgICAgICAgICAgICBjb3JyRWFjaFRyaWFsLmFwcGVuZCh0aGlzQ29ycikKICAgICAgICAgICAgICAgIGlmIG92ZXJhbGxUcmlhbE4gPj0gbGVuKGluaXRpYWxOb25zdGFpcmNhc2VUcmlhbHMpOiAjZG9pbmcgc3RhaXJjYXNlIHRyaWFscyBub3cKICAgICAgICAgICAgICAgICAgICBzdGFpcmNhc2UuYWRkUmVzcG9uc2UodGhpc0NvcnIsIGludGVuc2l0eSA9IDEwMC1wZXJjZW50Tm9pc2UpICNBZGQgYSAxIG9yIDAgdG8gc2lnbmlmeSBhIGNvcnJlY3QvZGV0ZWN0ZWQgb3IgaW5jb3JyZWN0L21pc3NlZCB0cmlhbAogICAgICAgICAgICAgICAgICAgIHByaW50KCdIYXZlIGFkZGVkIGFuIGludGVuc2l0eSBvZicsJ3s6LjNmfScuZm9ybWF0KDEwMC1wZXJjZW50Tm9pc2UpKQpteVdpbi5jbG9zZSgpCmlmIG92ZXJhbGxUcmlhbE4rMSA8IGxlbihpbml0aWFsTm9uc3RhaXJjYXNlVHJpYWxzKSBhbmQgKG92ZXJhbGxUcmlhbE4+PTApOiAjZXhwIHN0b3BwZWQgYmVmb3JlIGdvdCB0aHJvdWdoIHN0YWlyY2FzZSBwcmVmYWNlIHRyaWFscwogICAgI2FkZCB0aGVzZSBub24tc3RhaXJjYXNlIHRyaWFscyBzbyBRVUVTVCBrbm93cyBhYm91dCB0aGVtCiAgICBwcmludCgnSW1wb3J0aW5nICcsY29yckVhY2hUcmlhbCwnIGFuZCBpbnRlbnNpdGllcyAnLGluaXRpYWxOb25zdGFpcmNhc2VUcmlhbHMpCiAgICBzdGFpcmNhc2UuaW1wb3J0RGF0YSggdG9TdGFpcmNhc2UoaW5pdGlhbE5vbnN0YWlyY2FzZVRyaWFsc1swOm92ZXJhbGxUcmlhbE4rMV0sZGVzY2VuZGluZ1BzeWNobyksIG5wLmFycmF5KGNvcnJFYWNoVHJpYWwpKSAKcHJpbnQoJ0ZpbmlzaGVkLicpCnByaW50U3RhaXJjYXNlKHN0YWlyY2FzZSwgZGVzY2VuZGluZ1BzeWNobywgYnJpZWZUcmlhbFVwZGF0ZT1UcnVlLCBwcmludEludGVybmFsVmFsPVRydWUsICBhbHNvTG9nPUZhbHNlKQoKaWYgc3RhaXJjYXNlLmZpbmlzaGVkOgogICAgcHJpbnQoJ1N0YWlyY2FzZSB3YXMgZmluaXNoZWQnKQplbHNlOgogICAgcHJpbnQoJ1N0YWlyY2FzZSB3YXMgbm90IGZpbmlzaGVkJykKIyBjYW4gbm93IGFjY2VzcyAxIG9mIDMgc3VnZ2VzdGVkIHRocmVzaG9sZCBsZXZlbHMKI3ByaW50KCdzdGFpcmNhc2UgbWVhbj0nLHN0YWlyY2FzZS5tZWFuKCkpCiNwcmludCgnc3RhaXJjYXNlIG1vZGU9JyxzdGFpcmNhc2UubW9kZSgpKQppZiBkZXNjZW5kaW5nUHN5Y2hvOgogICAgcXVhbnRpbGVQY3ROb2lzZSA9IDEwMC1zdGFpcmNhc2UucXVhbnRpbGUoKSAKPHxmaW1faG9sZXw+CiAgICBpbnRlbnNpdGllcyA9IG5wLmFycmF5KFs1LjAwLCAyMC4wMCwgMjAuMDAsIDIwLjAwLCA1MC4wMCwgNTAuMDAsIDUwLjAwLCA1LjAwLCA4MC4wMCwgODAuMDAsIDgwLjAwLCA1LjAwLCA5NS4wMCwgOTUuMDAsIDk1LjAwLCA3NC41NiwgNzUuODksIDc2Ljk0LCA3Ny43MiwgNzguNDMsIDc5LjA1LCA3OS42OCwgODAuMjgsIDgwLjg3LCA4MS41MywgODIuMjIsIDgzLjA1LCA4NC4wMSwgODUuMDQsIDg2LjA5LCA4Ny4wMiwgODcuODAsIDg4LjQ3LCA4OS4wMywgODkuNDksIDg5Ljg4LCA5MC4yMCwgOTAuNDksIDkwLjc0LCA5MC45NiwgOTEuMTYsIDg5Ljk3LCA5MC4xMiwgOTAuMjQsIDkwLjM3LCA5MC40OCwgOTAuNTksIDkwLjY5LCA5MC43OSwgOTAuMTAsIDkwLjE4LCA5MC4yNiwgOTAuMzMsIDkwLjQwLCA5MC40NywgOTAuNTQsIDkwLjYwLCA5MC42NiwgOTAuNzIsIDkwLjI4LCA5MC4zMywgOTAuMzcsIDkwLjQyLCA5MC4wNiwgODkuNzMKICAgIF0pICNkZWJ1ZywgZXhhbXBsZSBkYXRhCiAgICBjb3JyRWFjaFRyaWFsPSBucC5hcnJheShbMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMCwgMCwgMQogICAgXSkgI2RlYnVnLCBleGFtcGxlIGRhdGEKICAgIHN0YWlyY2FzZS5pbXBvcnREYXRhKCB0b1N0YWlyY2FzZShpbnRlbnNpdGllcyxkZXNjZW5kaW5nUHN5Y2hvKSwgY29yckVhY2hUcmlhbCkgCgppbnRlbnNpdGllcyA9IG91dE9mU3RhaXJjYXNlKCBzdGFpcmNhc2UuaW50ZW5zaXRpZXMsIHN0YWlyY2FzZSwgZGVzY2VuZGluZ1BzeWNobyApICNpbnZlcnNlIGxvZywgMTAwLSAKcmVzcG9uc2VzID0gc3RhaXJjYXNlLmRhdGEKCmV4cGVjdGVkTWluID0gMS4wLzI2CiNmaXQgY3VydmUKZml0ID0gTm9uZQp0cnk6IAogICAgaW50ZW5zaXR5Rm9yQ3VydmVGaXR0aW5nID0gaW50ZW5zaXRpZXMKICAgIGlmIGRlc2NlbmRpbmdQc3ljaG86IAogICAgICAgIGludGVuc2l0eUZvckN1cnZlRml0dGluZyA9IDEwMC1pbnRlbnNpdGllcyAjYmVjYXVzZSBmaXRXZWlidWxsIGFzc3VtZXMgY3VydmUgaXMgYXNjZW5kaW5nCiAgICBmaXQgPSBkYXRhLkZpdFdlaWJ1bGwoaW50ZW5zaXR5Rm9yQ3VydmVGaXR0aW5nLCByZXNwb25zZXMsIGV4cGVjdGVkTWluPWV4cGVjdGVkTWluLCAgc2VtcyA9IDEuMC9sZW4oaW50ZW5zaXR5Rm9yQ3VydmVGaXR0aW5nKSkKZXhjZXB0OgogICAgcHJpbnQoIkZpdCBmYWlsZWQuIikKcGxvdERhdGFBbmRQc3ljaG9tZXRyaWNDdXJ2ZShzdGFpcmNhc2UsZml0LGRlc2NlbmRpbmdQc3ljaG8sdGhyZXNoQ3JpdGVyaW9uKQojc2F2ZSBmaWd1cmUgdG8gZmlsZQpvdXRwdXRGaWxlID0gICd0ZXN0X3N0YWlyY2FzZV9wbG90JyAjIG9zLnBhdGguam9pbihkYXRhRGlyLCAndGVzdF9zdGFpcmNhc2VfcGxvdCcpCnB5bGFiLnNhdmVmaWcob3V0cHV0RmlsZSArICcucGRmJykKcHlsYWIuc2F2ZWZpZyhvdXRwdXRGaWxlICsgJy5qcGcnKQpweWxhYi5zaG93KCkgI211c3QgY2FsbCB0aGlzIHRvIGFjdHVhbGx5IHNob3cgcGxvdAo8fGZpbV9zdWZmaXh8PgojcHJpbnQoJ3N0YWlyY2FzZSBxdWFudGlsZSAobWVkaWFuKT0nLCd7Oi40Zn0nLmZvcm1hdChzdGFpcmNhc2UucXVhbnRpbGUoKSksIGVuZD0nJykgI2dldHMgdGhlIG1lZGlhbi4gUHJpbnRzIGFzIGZsb2F0aW5nIHBvaW50IHdpdGggNCBkaWdpdHMgb2YgcHJlY2lzaW9uCnByaW50KCdNZWRpYW4gb2YgcG9zdGVyaW9yIGRpc3RyaWJ1dGlvbiBhY2NvcmRpbmcgdG8gUVVFU1QsIHBlcmNlbnQgbm9pc2U9JywnezouNGZ9Jy5mb3JtYXQocXVhbnRpbGVQY3ROb2lzZSkpIAoKaWYgcGxvdEZha2VEYXRhSW5zdGVhZDogI3Bsb3Qgc3RhbmRhcmQgZmFrZSBkYXRhIGluc3RlYWQuCjx8ZmltX2VuZHw+"]
["f91249253d67b25cc765b3d42d15110cebce8c8c-2","f91249253d67b25cc765b3d42d15110cebce8c8c","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiIiIgpieSBBbGV4IEhvbGNvbWJlCkJlZm9yZSBicm91Z2h0IGludG8gdGhlIHJlcG9zaXRvcnksIHRoaXMgZmlsZSB3YXMgbHRyc05vaXNlQWR2YW5jZVF1ZXN0TWFudWFsbHkucHkKSSB1c2VkIHRvIGhhdmUgdGhlIG5vaXNlIHBhcmFtZXRlciBnbyBmcm9tIDAgdG8gMSBidXQgd2l0aCBsb2cgc3RlcHBpbmcsIHN0YWlyY2FzZSBhbHdheXMgY3JhcHBlZCBvdXQsIGRvbid0IGtub3cgd2h5LApzbyBJIHVzZSBwZXJjZW50Tm9pc2UgKDAtPjEwMCkgaW5zdGVhZCBvZiBwcm9wb3J0aW9uCiIiIgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCmZyb20gcHN5Y2hvcHkgaW1wb3J0IGNvcmUsIHZpc3VhbCwgZXZlbnQsIG1pc2MsIGRhdGEsIGd1aQppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG9zLCBweWxhYgpmcm9tIG1hdGggaW1wb3J0IGF0YW4sIGxvZwpmcm9tIG5vaXNlU3RhaXJjYXNlSGVscGVycyBpbXBvcnQgcHJpbnRTdGFpcmNhc2UsIGNyZWF0ZU5vaXNlLCB0b1N0YWlyY2FzZSwgb3V0T2ZTdGFpcmNhc2UsIHBsb3REYXRhQW5kUHN5Y2hvbWV0cmljQ3VydmUKZGVzY2VuZGluZ1BzeWNobyA9IFRydWUKCiMgY3JlYXRlIGEgZGlhbG9nIGZyb20gZGljdGlvbmFyeQppbmZvRmlyc3QgPSB7ICdQbG90IGZha2UgZGF0YSAobm90IHN0YWlyY2FzZSBkYXRhKSc6IEZhbHNlLCAgICd0aHJlc2hDcml0ZXJpb24nOiAwLjU4IH0KZGxnUmVzdWx0ID0gZ3VpLkRsZ0Zyb21EaWN0KGRpY3Rpb25hcnk9aW5mb0ZpcnN0LCAKICAgIHRpdGxlPSdTdGFpcmNhc2UgdG8gZmluZCB0aHJlc2ggbm9pc2UgbGV2ZWwsIGV4YW1wbGUgd2l0aCBzaW5nbGUgbGV0dGVyIHByZXNlbnRhdGlvbicsIAogICAgb3JkZXI9WydQbG90IGZha2UgZGF0YSAobm90IHN0YWlyY2FzZSBkYXRhKScsICd0aHJlc2hDcml0ZXJpb24nXSwgCiAgICAjZml4ZWQ9WydDaGVjayByZWZyZXNoIGV0YyddKSN0aGlzIGF0dHJpYnV0ZSBjYW4ndCBiZSBjaGFuZ2VkIGJ5IHRoZSB1c2VyCiAgICApCmlmIG5vdCBkbGdSZXN1bHQuT0s6CiAgICBwcmludCgnVXNlciBjYW5jZWxsZWQgZnJvbSBkaWFsb2cgYm94Jyk7IGNvcmUucXVpdCgpCnBsb3RGYWtlRGF0YUluc3RlYWQgPSBpbmZvRmlyc3RbJ1Bsb3QgZmFrZSBkYXRhIChub3Qgc3RhaXJjYXNlIGRhdGEpJ10KdGhyZXNoQ3JpdGVyaW9uID0gaW5mb0ZpcnN0Wyd0aHJlc2hDcml0ZXJpb24nXSAjdGhyZXNoQ3JpdGVyaW9uIGlzIHByb3BvcnRpb24gY29ycmVjdCBmb3Igd2hpY2ggd2FudCB0byBlc3RpbWF0ZSB0aGUgcGFyYW1ldGVyIChpbnRlbnNpdHkpIGxldmVsCgpkZWYgbnVtYmVyVG9MZXR0ZXIobnVtYmVyKTogIzAgPSBBLCAyNSA9IFoKICAgICNpZiBpdCdzIG5vdCByZWFsbHkgYSBsZXR0ZXIsIHJldHVybiBACiAgICAjaWYgdHlwZShudW1iZXIpICE9IHR5cGUoNSkgYW5kIHR5cGUobnVtYmVyKSAhPSB0eXBlKG5wLmFycmF5KFszXSlbMF0pOiAjbm90IGFuIGludGVnZXIgb3IgbnVtcHkuaW50MzIKICAgICMgICAgcmV0dXJuICgnQCcpCiAgICBpZiBudW1iZXIgPCAwIG9yIG51bWJlciA+IDI1OgogICAgICAgIHJldHVybiAoJ0AnKQogICAgZWxzZTogI2l0J3MgcHJvYmFibHkgYSBsZXR0ZXIKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJldHVybiBjaHIoIG9yZCgnQScpK251bWJlciApCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICByZXR1cm4oJ0AnKQoKYXV0b0xvZ2dpbmc9RmFsc2UKI2NyZWF0ZSBhIHdpbmRvdyB0byBkcmF3IGluCndpZHRoUGl4PTYwMCAjbW9uaXRvciB3aWR0aCBpbiBwaXhlbHMKbW9uaXRvcndpZHRoID0gMzguNyAjbW9uaXRvciB3aWR0aCBpbiBjbQp2aWV3ZGlzdCA9IDU3LjsgI2NtCmZ1bGxzY3JlZW4gPSAwCgpteVdpbiA9IHZpc3VhbC5XaW5kb3coKHdpZHRoUGl4LHdpZHRoUGl4KSwgYWxsb3dHVUk9RmFsc2UsIGNvbG9yPTAsIAogICAgICAgIG1vbml0b3I9J3Rlc3RNb25pdG9yJyxmdWxsc2NyPWZ1bGxzY3JlZW4sd2luVHlwZT0ncHlnbGV0JywgdW5pdHM9J25vcm0nKQoKYmdDb2xvciA9IFstMS4sLTEuLC0xLl0gIyBbLTEsLTEsLTFdCmN1ZUNvbG9yID0gWzEuLDEuLDEuXQpsZXR0ZXJDb2xvciA9IFsxLiwxLiwxLl0KbHRySGVpZ2h0ID0gMi41CnBpeGVscGVyZGVncmVlID0gd2lkdGhQaXgvIChhdGFuKG1vbml0b3J3aWR0aC92aWV3ZGlzdCkgL25wLnBpKjE4MCkKCiNJTklUSUFMSVNFIFNPTUUgU1RJTVVMSQojcHJlZHJhdyBhbGwgMjYgbGV0dGVycyAKbGV0dGVyc0RyYXdPYmplY3RzID0gbGlzdCgpCmZvciBpIGluIHJhbmdlKDAsMjYpOgogICBsZXR0ZXJEcmF3ID0gdmlzdWFsLlRleHRTdGltKG15V2luLHBvcz0oMCwwKSxjb2xvclNwYWNlPSdyZ2InLGNvbG9yPWxldHRlckNvbG9yLGFsaWduSG9yaXo9J2NlbnRlcicsYWxpZ25WZXJ0PSdjZW50ZXInLHVuaXRzPSdkZWcnLGF1dG9Mb2c9YXV0b0xvZ2dpbmcpCiAgIGxldHRlckRyYXcuc2V0SGVpZ2h0KCBsdHJIZWlnaHQgKSAjTWFydGluaSBsZXR0ZXJzIHdlcmUgMi41ZGVnIGhpZ2gKICAgbGV0dGVyID0gbnVtYmVyVG9MZXR0ZXIoaSkKICAgI3ByaW50ICdhZGRpbmcgbGV0dGVyJywgbGV0dGVyLCAnIHRvIHRoZSBkcmF3aW5nIHF1ZXVlJwogICBsZXR0ZXJEcmF3LnNldFRleHQobGV0dGVyKQogICBsZXR0ZXJEcmF3LnNldENvbG9yKGJnQ29sb3IpCiAgIGxldHRlcnNEcmF3T2JqZWN0cy5hcHBlbmQobGV0dGVyRHJhdykKICAKI0FsbCBub2lzZSBkb3QgY29vcmRpbmF0ZXMgdWx0aW1hdGVseSBpbiBwaXhlbHMsIHNvIGNhbiBzcGVjaWZ5IGVhY2ggZG90IGlzIG9uZSBwaXhlbCAKZmllbGRXaWR0aERlZz1sdHJIZWlnaHQgKjEuOApmaWVsZFdpZHRoUGl4ID0gaW50KCByb3VuZCggZmllbGRXaWR0aERlZypwaXhlbHBlcmRlZ3JlZSApICkKI2NyZWF0ZSBhIGdyaWQgb2YgeHkgdmFscwpwcm9wb3J0bk5vaXNlID0gMC4xCgoobm9pc2UsYWxsRmllbGRDb29yZHMsbnVtTm9pc2VEb3RzKSA9IGNyZWF0ZU5vaXNlKHByb3BvcnRuTm9pc2UsbXlXaW4sZmllbGRXaWR0aFBpeCxiZ0NvbG9yKQoKPHxmaW1faG9sZXw+CmlmICB1c2VRdWVzdDoKICAgIHN0YWlyY2FzZSA9IGRhdGEuUXVlc3RIYW5kbGVyKHN0YXJ0VmFsID0gOTUsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0VmFsU2QgPSAxMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcEludGVydmFsPSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5UcmlhbHM9NTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgI2V4dHJhSW5mbyA9IHRoaXNJbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgIHBUaHJlc2hvbGQgPSB0aHJlc2hDcml0ZXJpb24sICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgIGdhbW1hID0gMS4vMjYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE9MC4wMiwgI2xhcHNlIHJhdGUsIEkgc3VwcG9zZSBmb3IgV2VpYnVsbCBmdW5jdGlvbiBmaXQKICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAncXVhbnRpbGUnLCAjdXNlcyB0aGUgbWVkaWFuIG9mIHRoZSBwb3N0ZXJpb3IgYXMgdGhlIGZpbmFsIGFuc3dlcgogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBUeXBlID0gJ2xvZycsICAjd2lsbCBob21lIGluIG9uIHRoZSA4MCUgdGhyZXNob2xkLiBCdXQgc3RlcFR5cGUgPSAnbG9nJyBkb2Vzbid0IHVzdWFsbHkgd29yawogICAgICAgICAgICAgICAgICAgICAgICAgIG1pblZhbD0xLCBtYXhWYWwgPSAxMDAKICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICBwcmludCgnY3JlYXRlZCBRVUVTVCBzdGFpcmNhc2UnKQplbHNlOiAKICAgIHN0YWlyY2FzZSA9IGRhdGEuU3RhaXJIYW5kbGVyKHN0YXJ0VmFsID0gMC4xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwVHlwZSA9ICdsb2cnLCAjaWYgbG9nLCB3aGF0IGRvIEkgd2FudCB0byBtdWx0aXBseSBpdCBieQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwU2l6ZXMgPSBzdGVwU2l6ZXNMb2csICAgICNzdGVwIHNpemUgdG8gdXNlIGFmdGVyIGVhY2ggcmV2ZXJzYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluVmFsPTAsIG1heFZhbD0xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuVXA9MSwgbkRvd249MywgICN3aWxsIGhvbWUgaW4gb24gdGhlIDgwJSB0aHJlc2hvbGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgblJldmVyc2FscyA9IDIsICNUaGUgc3RhaXJjYXNlIHRlcm1pbmF0ZXMgd2hlbiBuVHJpYWxzIGhhdmUgYmVlbiBleGNlZWRlZCwgb3Igd2hlbiBib3RoIG5SZXZlcnNhbHMgYW5kIG5UcmlhbHMgaGF2ZSBiZWVuIGV4Y2VlZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5UcmlhbHM9MSkKICAgIHByaW50KCdjcmVhdGVkIGNvbnZlbnRpb25hbCBzdGFpcmNhc2UnKQoKbWVzc2FnZSA9dmlzdWFsLlRleHRTdGltKG15V2luLHRleHQ9J05PVCBZRVQgU0VUJywgcG9zPSgwLC0wLjUpKQpjb3JyZWN0SW5jb3JyZWN0TWVzc2FnZSA9IHZpc3VhbC5UZXh0U3RpbShteVdpbix0ZXh0PScnLCBwb3M9KDAsKzAuNSkpCgp0aW1lRm9yTmV4dFRyaWFsID0gRmFsc2UKcmVmcmVzaE5vaXNlPUZhbHNlCnRoaXNDb3JyPTIKdHJpYWxDbG9jayA9IGNvcmUuQ2xvY2soKQp0PWxhc3RGUFN1cGRhdGU9MApleHBTdG9wPSBGYWxzZQpuRWFzeVN0YXJ0ZXJUcmlhbHMgPSAwCnByaW50KCdzdGFydGluZyBzdGFpcmNhc2Ugd2l0aCBmb2xsb3dpbmcgc2V0dGluZ3M6JykKcHJpbnRTdGFpcmNhc2Uoc3RhaXJjYXNlLCBkZXNjZW5kaW5nUHN5Y2hvLCBicmllZlRyaWFsVXBkYXRlPUZhbHNlLCBwcmludEludGVybmFsVmFsPVRydWUsICBhbHNvTG9nPUZhbHNlKQpkb2luZ1N0YWlyY2FzZVBoYXNlID0gRmFsc2UgI0ZpcnN0IHBoYXNlIG9mIGV4cGVyaW1lbnQgaXMgbWV0aG9kIG9mIGNvbnN0YW50IHN0aW11bGkuIElmIHVzZSBuYWtlZCBRVUVTVCwgbWlnaHQgY29udmVyZ2UgdG9vIHNvb24KaW5pdGlhbE5vbnN0YWlyY2FzZVRyaWFscyA9IG5wLmFycmF5KFs1LDIwLDIwLDIwLCA1MCw1MCw1MCw1LDgwLDgwLDgwLDUsOTUsOTUsOTVdKQpjb3JyRWFjaFRyaWFsID0gbGlzdCgpICNvbmx5IG5lZWRlZCBmb3IgaW5pdGlhbE5vbnN0YWlyY2FzZVRyaWFscwpvdmVyYWxsVHJpYWxOID0gLTEKd2hpbGUgKG5vdCBzdGFpcmNhc2UuZmluaXNoZWQpIGFuZCBleHBTdG9wPT1GYWxzZToKICAgIGlmIG92ZXJhbGxUcmlhbE4rMSA8IGxlbihpbml0aWFsTm9uc3RhaXJjYXNlVHJpYWxzKTogI3N0aWxsIGRvaW5nIGluaXRpYWxOb25zdGFpcmNhc2VUcmlhbHMKICAgICAgICBvdmVyYWxsVHJpYWxOICs9IDEKICAgICAgICBwZXJjZW50Tm9pc2UgPSBpbml0aWFsTm9uc3RhaXJjYXNlVHJpYWxzW292ZXJhbGxUcmlhbE5dCiAgICBlbHNlOgogICAgICAgIGlmIG92ZXJhbGxUcmlhbE4rMSA9PSBsZW4oaW5pdGlhbE5vbnN0YWlyY2FzZVRyaWFscyk6ICNhZGQgdGhlc2Ugbm9uLXN0YWlyY2FzZSB0cmlhbHMgc28gUVVFU1Qga25vd3MgYWJvdXQgdGhlbQogICAgICAgICAgICBwcmludCgnSW1wb3J0aW5nICcsY29yckVhY2hUcmlhbCwnIGFuZCBpbnRlbnNpdGllcyAnLHJlcHIoaW5pdGlhbE5vbnN0YWlyY2FzZVRyaWFscykpCiAgICAgICAgICAgIHN0YWlyY2FzZS5pbXBvcnREYXRhKCB0b1N0YWlyY2FzZShpbml0aWFsTm9uc3RhaXJjYXNlVHJpYWxzLGRlc2NlbmRpbmdQc3ljaG8pLCBucC5hcnJheShjb3JyRWFjaFRyaWFsKSkgCiAgICAgICAgICAgIAogICAgICAgIHRyeTogI2FkdmFuY2UgdGhlIHN0YWlyY2FzZQogICAgICAgICAgICBwZXJjZW50Tm9pc2UgPSBzdGFpcmNhc2UubmV4dCgpCiAgICAgICAgICAgIGlmIGRlc2NlbmRpbmdQc3ljaG86ICN0aGlzIGlzIGZyZWFraW5nIGF3a3dhcmQuIFN0YWlyY2FzZS5uZXh0KCkgdW4tbG9ncyBpdCwgYnV0IHRoZXJlJ3Mgbm8gd3JhcHBlciBmb3IgaW50ZW5zaXRpZXMgdGhhdCB1bi1sb2dzIHRoZW0uIFBzeWNob3B5IHNob3VsZCBhZGQgdGhhdAogICAgICAgICAgICAgICBwZXJjZW50Tm9pc2UgPSAxMDAtIHBlcmNlbnROb2lzZSAgI3dpbGwgc3RlcCB0aHJvdWdoIHRoZSBzdGFpcmNhc2UsIGJhc2VkIG9uIHdoZXRoZXIgdG9sZCBpdCAoYWRkRGF0YSkgZ290IGl0IHJpZ2h0IG9yIHdyb25nCiAgICAgICAgICAgIG92ZXJhbGxUcmlhbE4gKz0gMQogICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOiAjTmVlZCB0aGlzIGhlcmUsIGV2ZW4gdGhvdWdoIHRlc3QgZm9yIGZpbmlzaGVkIGFib3ZlLiBJIGNhbid0IHVuZGVyc3RhbmQgd2h5IGZpbmlzaGVkIHRlc3QgZG9lc24ndCBhY2NvbXBsaXNoIHRoaXMuCiAgICAgICAgICAgIHByaW50KCdzdG9wcGluZyBiZWNhdXNlIHN0YWlyY2FzZS5uZXh0KCkgcmV0dXJuZWQgYSBTdG9wSXRlcmF0aW9uLCB3aGljaCBpdCBkb2VzIHdoZW4gaXQgaXMgZmluaXNoZWQnKQogICAgICAgICAgICBicmVhayAjYnJlYWsgb3V0IG9mIHRoZSB0cmlhbHMgbG9vcAogICAgcHJpbnQoJ292ZXJhbGxUcmlhbE49JyxvdmVyYWxsVHJpYWxOLCAnICAgcGVyY2VudE5vaXNlIGZvciB0aGlzIHRyaWFsID0gJywgcm91bmQocGVyY2VudE5vaXNlLDIpKSAjZGVidWdPTgoKICAgIHRoaXNMZXR0ZXJJZHggPSBucC5yYW5kb20ucmFuZGludCgwLDI2KTsgI2Nob29zZSByYW5kb20gbGV0dGVyCiAgICByZWZyZXNoTm9pc2UgPSBUcnVlCiAgICBpZiB0aW1lRm9yTmV4dFRyaWFsOgogICAgICAgIGNvcnJlY3RJbmNvcnJlY3RNZXNzYWdlLnNldFRleHQoIFsnV1JPTkchJywnUklHSFQhJ11bdGhpc0NvcnJdICkKICAgIHRpbWVGb3JOZXh0VHJpYWwgPSBGYWxzZQogICAgd2hpbGUgbm90IHRpbWVGb3JOZXh0VHJpYWw6CiAgICAgICAgbWVzc2FnZS5zZXRUZXh0KCAnTm9pc2UgPSAnICsgc3RyKHJvdW5kKHBlcmNlbnROb2lzZSwyKSkgKyAnJScgKQogICAgICAgIG1lc3NhZ2UuZHJhdygpCiAgICAgICAgY29ycmVjdEluY29ycmVjdE1lc3NhZ2UuZHJhdygpCiAgICAgICAgaWYgcmVmcmVzaE5vaXNlOgogICAgICAgICAgICAobm9pc2UsYWxsRmllbGRDb29yZHMsbnVtTm9pc2VEb3RzKSA9IGNyZWF0ZU5vaXNlKHBlcmNlbnROb2lzZS8xMDAuLG15V2luLGZpZWxkV2lkdGhQaXgsYmdDb2xvcikKICAgICAgICAgICAgcmVmcmVzaE5vaXNlID0gRmFsc2UKICAgICAgICAgICAgCiAgICAgICAgdD10cmlhbENsb2NrLmdldFRpbWUoKQogICAgICAgIGxldHRlcnNEcmF3T2JqZWN0c1t0aGlzTGV0dGVySWR4XS5zZXRDb2xvciggbGV0dGVyQ29sb3IgKQogICAgICAgIGxldHRlcnNEcmF3T2JqZWN0c1t0aGlzTGV0dGVySWR4XS5kcmF3KCkgI0RSQVcgU1RJTVVMVVMhCiAgICAgICAgaWYgbm9pc2UgIT0gTm9uZTogI21vcmUgdGhhbiAwIG5vaXNlIGRvdHMKICAgICAgICAgICAgbm9pc2UuZHJhdygpCiAgICAgICAgbXlXaW4uZmxpcCgpCiAgICAgICAgCiAgICAgICAgI2hhbmRsZSBrZXkgcHJlc3NlcyBlYWNoIGZyYW1lCiAgICAgICAgZm9yIGtleSBpbiBldmVudC5nZXRLZXlzKCk6CiAgICAgICAgICAgIGtleSA9IGtleS51cHBlcigpCiAgICAgICAgICAgIGlmIGtleSBpbiBbJ1NQQUNFJyxdOiAjYSBrZXkgdG8gcHJlc3MgaWYgeW91IHdhbnQgdG8gc2VlIGEgcmFuZG9tIG5ldyBub2lzZSBwYXR0ZXJuCiAgICAgICAgICAgICAgICByZWZyZXNoTm9pc2UgPSBUcnVlCiAgICAgICAgICAgIGlmIGtleSBpbiBbJ0xTSElGVCcsJ0VRVUFMUyddOiAjbHNoaWZ0IHNlZW1zIHRvIGJlIHBsdXMgc2lnbiwgYnV0IGRvZXNuJ3Qgd29yayB2ZXJ5IHdlbGwKICAgICAgICAgICAgICAgIHBlcmNlbnROb2lzZSArPSAyICMgbWluKHByb3BvcnRuTm9pc2UrMC4wMiwxKQogICAgICAgICAgICAgICAgcmVmcmVzaE5vaXNlID0gVHJ1ZQogICAgICAgICAgICBpZiBrZXkgaW4gWydNSU5VUyddOgogICAgICAgICAgICAgICAgcGVyY2VudE5vaXNlICs9IC0yICMgbWluKHByb3BvcnRuTm9pc2UtMC4wMiwxKQogICAgICAgICAgICAgICAgcmVmcmVzaE5vaXNlID0gVHJ1ZQogICAgICAgICAgICBpZiBrZXkgaW4gWydFU0NBUEUnXToKICAgICAgICAgICAgICAgIGV4cFN0b3A9VHJ1ZQogICAgICAgICAgICBpZiBrZXkgaW4gWydBJywnQicsJ0MnLCAnRCcsICdFJywnRicsICdHJywnSCcsJ0knLCAnSicsICAnSycsICdMJywgJ00nLCAnTicsICdPJywgJ1AnLCdRJywnUicsICdTJywnVCcsJ1UnLCdWJywnVycsICdYJywgJ1knLCdaJ106CiAgICAgICAgICAgICAgICB0aW1lRm9yTmV4dFRyaWFsID0gVHJ1ZQogICAgICAgICAgICAgICAgaWYgb3JkKGtleSktb3JkKCdBJykgPT0gdGhpc0xldHRlcklkeDoKICAgICAgICAgICAgICAgICAgICB0aGlzQ29yciA9IDEjY29ycmVjdAogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICB0aGlzQ29yciA9IDAjaW5jb3JyZWN0CiAgICAgICAgICAgICAgICBjb3JyRWFjaFRyaWFsLmFwcGVuZCh0aGlzQ29ycikKICAgICAgICAgICAgICAgIGlmIG92ZXJhbGxUcmlhbE4gPj0gbGVuKGluaXRpYWxOb25zdGFpcmNhc2VUcmlhbHMpOiAjZG9pbmcgc3RhaXJjYXNlIHRyaWFscyBub3cKICAgICAgICAgICAgICAgICAgICBzdGFpcmNhc2UuYWRkUmVzcG9uc2UodGhpc0NvcnIsIGludGVuc2l0eSA9IDEwMC1wZXJjZW50Tm9pc2UpICNBZGQgYSAxIG9yIDAgdG8gc2lnbmlmeSBhIGNvcnJlY3QvZGV0ZWN0ZWQgb3IgaW5jb3JyZWN0L21pc3NlZCB0cmlhbAogICAgICAgICAgICAgICAgICAgIHByaW50KCdIYXZlIGFkZGVkIGFuIGludGVuc2l0eSBvZicsJ3s6LjNmfScuZm9ybWF0KDEwMC1wZXJjZW50Tm9pc2UpKQpteVdpbi5jbG9zZSgpCmlmIG92ZXJhbGxUcmlhbE4rMSA8IGxlbihpbml0aWFsTm9uc3RhaXJjYXNlVHJpYWxzKSBhbmQgKG92ZXJhbGxUcmlhbE4+PTApOiAjZXhwIHN0b3BwZWQgYmVmb3JlIGdvdCB0aHJvdWdoIHN0YWlyY2FzZSBwcmVmYWNlIHRyaWFscwogICAgI2FkZCB0aGVzZSBub24tc3RhaXJjYXNlIHRyaWFscyBzbyBRVUVTVCBrbm93cyBhYm91dCB0aGVtCiAgICBwcmludCgnSW1wb3J0aW5nICcsY29yckVhY2hUcmlhbCwnIGFuZCBpbnRlbnNpdGllcyAnLGluaXRpYWxOb25zdGFpcmNhc2VUcmlhbHMpCiAgICBzdGFpcmNhc2UuaW1wb3J0RGF0YSggdG9TdGFpcmNhc2UoaW5pdGlhbE5vbnN0YWlyY2FzZVRyaWFsc1swOm92ZXJhbGxUcmlhbE4rMV0sZGVzY2VuZGluZ1BzeWNobyksIG5wLmFycmF5KGNvcnJFYWNoVHJpYWwpKSAKcHJpbnQoJ0ZpbmlzaGVkLicpCnByaW50U3RhaXJjYXNlKHN0YWlyY2FzZSwgZGVzY2VuZGluZ1BzeWNobywgYnJpZWZUcmlhbFVwZGF0ZT1UcnVlLCBwcmludEludGVybmFsVmFsPVRydWUsICBhbHNvTG9nPUZhbHNlKQoKaWYgc3RhaXJjYXNlLmZpbmlzaGVkOgogICAgcHJpbnQoJ1N0YWlyY2FzZSB3YXMgZmluaXNoZWQnKQplbHNlOgogICAgcHJpbnQoJ1N0YWlyY2FzZSB3YXMgbm90IGZpbmlzaGVkJykKIyBjYW4gbm93IGFjY2VzcyAxIG9mIDMgc3VnZ2VzdGVkIHRocmVzaG9sZCBsZXZlbHMKI3ByaW50KCdzdGFpcmNhc2UgbWVhbj0nLHN0YWlyY2FzZS5tZWFuKCkpCiNwcmludCgnc3RhaXJjYXNlIG1vZGU9JyxzdGFpcmNhc2UubW9kZSgpKQppZiBkZXNjZW5kaW5nUHN5Y2hvOgogICAgcXVhbnRpbGVQY3ROb2lzZSA9IDEwMC1zdGFpcmNhc2UucXVhbnRpbGUoKSAKI3ByaW50KCdzdGFpcmNhc2UgcXVhbnRpbGUgKG1lZGlhbik9JywnezouNGZ9Jy5mb3JtYXQoc3RhaXJjYXNlLnF1YW50aWxlKCkpLCBlbmQ9JycpICNnZXRzIHRoZSBtZWRpYW4uIFByaW50cyBhcyBmbG9hdGluZyBwb2ludCB3aXRoIDQgZGlnaXRzIG9mIHByZWNpc2lvbgpwcmludCgnTWVkaWFuIG9mIHBvc3RlcmlvciBkaXN0cmlidXRpb24gYWNjb3JkaW5nIHRvIFFVRVNULCBwZXJjZW50IG5vaXNlPScsJ3s6LjRmfScuZm9ybWF0KHF1YW50aWxlUGN0Tm9pc2UpKSAKCmlmIHBsb3RGYWtlRGF0YUluc3RlYWQ6ICNwbG90IHN0YW5kYXJkIGZha2UgZGF0YSBpbnN0ZWFkLgogICAgaW50ZW5zaXRpZXMgPSBucC5hcnJheShbNS4wMCwgMjAuMDAsIDIwLjAwLCAyMC4wMCwgNTAuMDAsIDUwLjAwLCA1MC4wMCwgNS4wMCwgODAuMDAsIDgwLjAwLCA4MC4wMCwgNS4wMCwgOTUuMDAsIDk1LjAwLCA5NS4wMCwgNzQuNTYsIDc1Ljg5LCA3Ni45NCwgNzcuNzIsIDc4LjQzLCA3OS4wNSwgNzkuNjgsIDgwLjI4LCA4MC44NywgODEuNTMsIDgyLjIyLCA4My4wNSwgODQuMDEsIDg1LjA0LCA4Ni4wOSwgODcuMDIsIDg3LjgwLCA4OC40NywgODkuMDMsIDg5LjQ5LCA4OS44OCwgOTAuMjAsIDkwLjQ5LCA5MC43NCwgOTAuOTYsIDkxLjE2LCA4OS45NywgOTAuMTIsIDkwLjI0LCA5MC4zNywgOTAuNDgsIDkwLjU5LCA5MC42OSwgOTAuNzksIDkwLjEwLCA5MC4xOCwgOTAuMjYsIDkwLjMzLCA5MC40MCwgOTAuNDcsIDkwLjU0LCA5MC42MCwgOTAuNjYsIDkwLjcyLCA5MC4yOCwgOTAuMzMsIDkwLjM3LCA5MC40MiwgOTAuMDYsIDg5LjczCiAgICBdKSAjZGVidWcsIGV4YW1wbGUgZGF0YQogICAgY29yckVhY2hUcmlhbD0gbnAuYXJyYXkoWzEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDAsIDAsIDEKICAgIF0pICNkZWJ1ZywgZXhhbXBsZSBkYXRhCiAgICBzdGFpcmNhc2UuaW1wb3J0RGF0YSggdG9TdGFpcmNhc2UoaW50ZW5zaXRpZXMsZGVzY2VuZGluZ1BzeWNobyksIGNvcnJFYWNoVHJpYWwpIAoKaW50ZW5zaXRpZXMgPSBvdXRPZlN0YWlyY2FzZSggc3RhaXJjYXNlLmludGVuc2l0aWVzLCBzdGFpcmNhc2UsIGRlc2NlbmRpbmdQc3ljaG8gKSAjaW52ZXJzZSBsb2csIDEwMC0gCnJlc3BvbnNlcyA9IHN0YWlyY2FzZS5kYXRhCgpleHBlY3RlZE1pbiA9IDEuMC8yNgojZml0IGN1cnZlCmZpdCA9IE5vbmUKdHJ5OiAKICAgIGludGVuc2l0eUZvckN1cnZlRml0dGluZyA9IGludGVuc2l0aWVzCiAgICBpZiBkZXNjZW5kaW5nUHN5Y2hvOiAKICAgICAgICBpbnRlbnNpdHlGb3JDdXJ2ZUZpdHRpbmcgPSAxMDAtaW50ZW5zaXRpZXMgI2JlY2F1c2UgZml0V2VpYnVsbCBhc3N1bWVzIGN1cnZlIGlzIGFzY2VuZGluZwogICAgZml0ID0gZGF0YS5GaXRXZWlidWxsKGludGVuc2l0eUZvckN1cnZlRml0dGluZywgcmVzcG9uc2VzLCBleHBlY3RlZE1pbj1leHBlY3RlZE1pbiwgIHNlbXMgPSAxLjAvbGVuKGludGVuc2l0eUZvckN1cnZlRml0dGluZykpCmV4Y2VwdDoKICAgIHByaW50KCJGaXQgZmFpbGVkLiIpCnBsb3REYXRhQW5kUHN5Y2hvbWV0cmljQ3VydmUoc3RhaXJjYXNlLGZpdCxkZXNjZW5kaW5nUHN5Y2hvLHRocmVzaENyaXRlcmlvbikKI3NhdmUgZmlndXJlIHRvIGZpbGUKb3V0cHV0RmlsZSA9ICAndGVzdF9zdGFpcmNhc2VfcGxvdCcgIyBvcy5wYXRoLmpvaW4oZGF0YURpciwgJ3Rlc3Rfc3RhaXJjYXNlX3Bsb3QnKQpweWxhYi5zYXZlZmlnKG91dHB1dEZpbGUgKyAnLnBkZicpCnB5bGFiLnNhdmVmaWcob3V0cHV0RmlsZSArICcuanBnJykKcHlsYWIuc2hvdygpICNtdXN0IGNhbGwgdGhpcyB0byBhY3R1YWxseSBzaG93IHBsb3QKPHxmaW1fc3VmZml4fD4Kc3RlcFNpemVzTGluZWFyID0gWy4yLC4yLC4xLC4xLC4wNSwuMDVdCnN0ZXBTaXplc0xvZyA9IFtsb2coMS40LDEwKSxsb2coMS40LDEwKSxsb2coMS4zLDEwKSxsb2coMS4zLDEwKSxsb2coMS4yLDEwKV0KI2NyZWF0ZSB0aGUgc3RhaXJjYXNlIGhhbmRsZXIKdXNlUXVlc3QgPSBUcnVlCjx8ZmltX2VuZHw+"]
["f91249253d67b25cc765b3d42d15110cebce8c8c-3","f91249253d67b25cc765b3d42d15110cebce8c8c","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgpJIHVzZWQgdG8gaGF2ZSB0aGUgbm9pc2UgcGFyYW1ldGVyIGdvIGZyb20gMCB0byAxIGJ1dCB3aXRoIGxvZyBzdGVwcGluZywgc3RhaXJjYXNlIGFsd2F5cyBjcmFwcGVkIG91dCwgZG9uJ3Qga25vdyB3aHksCnNvIEkgdXNlIHBlcmNlbnROb2lzZSAoMC0+MTAwKSBpbnN0ZWFkIG9mIHByb3BvcnRpb24KIiIiCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KZnJvbSBwc3ljaG9weSBpbXBvcnQgY29yZSwgdmlzdWFsLCBldmVudCwgbWlzYywgZGF0YSwgZ3VpCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgb3MsIHB5bGFiCmZyb20gbWF0aCBpbXBvcnQgYXRhbiwgbG9nCmZyb20gbm9pc2VTdGFpcmNhc2VIZWxwZXJzIGltcG9ydCBwcmludFN0YWlyY2FzZSwgY3JlYXRlTm9pc2UsIHRvU3RhaXJjYXNlLCBvdXRPZlN0YWlyY2FzZSwgcGxvdERhdGFBbmRQc3ljaG9tZXRyaWNDdXJ2ZQpkZXNjZW5kaW5nUHN5Y2hvID0gVHJ1ZQoKIyBjcmVhdGUgYSBkaWFsb2cgZnJvbSBkaWN0aW9uYXJ5CmluZm9GaXJzdCA9IHsgJ1Bsb3QgZmFrZSBkYXRhIChub3Qgc3RhaXJjYXNlIGRhdGEpJzogRmFsc2UsICAgJ3RocmVzaENyaXRlcmlvbic6IDAuNTggfQpkbGdSZXN1bHQgPSBndWkuRGxnRnJvbURpY3QoZGljdGlvbmFyeT1pbmZvRmlyc3QsIAogICAgdGl0bGU9J1N0YWlyY2FzZSB0byBmaW5kIHRocmVzaCBub2lzZSBsZXZlbCwgZXhhbXBsZSB3aXRoIHNpbmdsZSBsZXR0ZXIgcHJlc2VudGF0aW9uJywgCiAgICBvcmRlcj1bJ1Bsb3QgZmFrZSBkYXRhIChub3Qgc3RhaXJjYXNlIGRhdGEpJywgJ3RocmVzaENyaXRlcmlvbiddLCAKICAgICNmaXhlZD1bJ0NoZWNrIHJlZnJlc2ggZXRjJ10pI3RoaXMgYXR0cmlidXRlIGNhbid0IGJlIGNoYW5nZWQgYnkgdGhlIHVzZXIKICAgICkKaWYgbm90IGRsZ1Jlc3VsdC5PSzoKICAgIHByaW50KCdVc2VyIGNhbmNlbGxlZCBmcm9tIGRpYWxvZyBib3gnKTsgY29yZS5xdWl0KCkKcGxvdEZha2VEYXRhSW5zdGVhZCA9IGluZm9GaXJzdFsnUGxvdCBmYWtlIGRhdGEgKG5vdCBzdGFpcmNhc2UgZGF0YSknXQp0aHJlc2hDcml0ZXJpb24gPSBpbmZvRmlyc3RbJ3RocmVzaENyaXRlcmlvbiddICN0aHJlc2hDcml0ZXJpb24gaXMgcHJvcG9ydGlvbiBjb3JyZWN0IGZvciB3aGljaCB3YW50IHRvIGVzdGltYXRlIHRoZSBwYXJhbWV0ZXIgKGludGVuc2l0eSkgbGV2ZWwKCmRlZiBudW1iZXJUb0xldHRlcihudW1iZXIpOiAjMCA9IEEsIDI1ID0gWgogICAgI2lmIGl0J3Mgbm90IHJlYWxseSBhIGxldHRlciwgcmV0dXJuIEAKICAgICNpZiB0eXBlKG51bWJlcikgIT0gdHlwZSg1KSBhbmQgdHlwZShudW1iZXIpICE9IHR5cGUobnAuYXJyYXkoWzNdKVswXSk6ICNub3QgYW4gaW50ZWdlciBvciBudW1weS5pbnQzMgogICAgIyAgICByZXR1cm4gKCdAJykKICAgIGlmIG51bWJlciA8IDAgb3IgbnVtYmVyID4gMjU6CiAgICAgICAgcmV0dXJuICgnQCcpCiAgICBlbHNlOiAjaXQncyBwcm9iYWJseSBhIGxldHRlcgogICAgICAgIHRyeToKICAgICAgICAgICAgcmV0dXJuIGNociggb3JkKCdBJykrbnVtYmVyICkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHJldHVybignQCcpCgphdXRvTG9nZ2luZz1GYWxzZQojY3JlYXRlIGEgd2luZG93IHRvIGRyYXcgaW4Kd2lkdGhQaXg9NjAwICNtb25pdG9yIHdpZHRoIGluIHBpeGVscwptb25pdG9yd2lkdGggPSAzOC43ICNtb25pdG9yIHdpZHRoIGluIGNtCnZpZXdkaXN0ID0gNTcuOyAjY20KZnVsbHNjcmVlbiA9IDAKCm15V2luID0gdmlzdWFsLldpbmRvdygod2lkdGhQaXgsd2lkdGhQaXgpLCBhbGxvd0dVST1GYWxzZSwgY29sb3I9MCwgCiAgICAgICAgbW9uaXRvcj0ndGVzdE1vbml0b3InLGZ1bGxzY3I9ZnVsbHNjcmVlbix3aW5UeXBlPSdweWdsZXQnLCB1bml0cz0nbm9ybScpCgpiZ0NvbG9yID0gWy0xLiwtMS4sLTEuXSAjIFstMSwtMSwtMV0KY3VlQ29sb3IgPSBbMS4sMS4sMS5dCmxldHRlckNvbG9yID0gWzEuLDEuLDEuXQpsdHJIZWlnaHQgPSAyLjUKcGl4ZWxwZXJkZWdyZWUgPSB3aWR0aFBpeC8gKGF0YW4obW9uaXRvcndpZHRoL3ZpZXdkaXN0KSAvbnAucGkqMTgwKQoKI0lOSVRJQUxJU0UgU09NRSBTVElNVUxJCiNwcmVkcmF3IGFsbCAyNiBsZXR0ZXJzIApsZXR0ZXJzRHJhd09iamVjdHMgPSBsaXN0KCkKZm9yIGkgaW4gcmFuZ2UoMCwyNik6CiAgIGxldHRlckRyYXcgPSB2aXN1YWwuVGV4dFN0aW0obXlXaW4scG9zPSgwLDApLGNvbG9yU3BhY2U9J3JnYicsY29sb3I9bGV0dGVyQ29sb3IsYWxpZ25Ib3Jpej0nY2VudGVyJyxhbGlnblZlcnQ9J2NlbnRlcicsdW5pdHM9J2RlZycsYXV0b0xvZz1hdXRvTG9nZ2luZykKICAgbGV0dGVyRHJhdy5zZXRIZWlnaHQoIGx0ckhlaWdodCApICNNYXJ0aW5pIGxldHRlcnMgd2VyZSAyLjVkZWcgaGlnaAogICBsZXR0ZXIgPSBudW1iZXJUb0xldHRlcihpKQogICAjcHJpbnQgJ2FkZGluZyBsZXR0ZXInLCBsZXR0ZXIsICcgdG8gdGhlIGRyYXdpbmcgcXVldWUnCiAgIGxldHRlckRyYXcuc2V0VGV4dChsZXR0ZXIpCiAgIGxldHRlckRyYXcuc2V0Q29sb3IoYmdDb2xvcikKICAgbGV0dGVyc0RyYXdPYmplY3RzLmFwcGVuZChsZXR0ZXJEcmF3KQogIAojQWxsIG5vaXNlIGRvdCBjb29yZGluYXRlcyB1bHRpbWF0ZWx5IGluIHBpeGVscywgc28gY2FuIHNwZWNpZnkgZWFjaCBkb3QgaXMgb25lIHBpeGVsIApmaWVsZFdpZHRoRGVnPWx0ckhlaWdodCAqMS44CmZpZWxkV2lkdGhQaXggPSBpbnQoIHJvdW5kKCBmaWVsZFdpZHRoRGVnKnBpeGVscGVyZGVncmVlICkgKQojY3JlYXRlIGEgZ3JpZCBvZiB4eSB2YWxzCnByb3BvcnRuTm9pc2UgPSAwLjEKCihub2lzZSxhbGxGaWVsZENvb3JkcyxudW1Ob2lzZURvdHMpID0gY3JlYXRlTm9pc2UocHJvcG9ydG5Ob2lzZSxteVdpbixmaWVsZFdpZHRoUGl4LGJnQ29sb3IpCgpzdGVwU2l6ZXNMaW5lYXIgPSBbLjIsLjIsLjEsLjEsLjA1LC4wNV0Kc3RlcFNpemVzTG9nID0gW2xvZygxLjQsMTApLGxvZygxLjQsMTApLGxvZygxLjMsMTApLGxvZygxLjMsMTApLGxvZygxLjIsMTApXQojY3JlYXRlIHRoZSBzdGFpcmNhc2UgaGFuZGxlcgp1c2VRdWVzdCA9IFRydWUKaWYgIHVzZVF1ZXN0OgogICAgc3RhaXJjYXNlID0gZGF0YS5RdWVzdEhhbmRsZXIoc3RhcnRWYWwgPSA5NSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRWYWxTZCA9IDEwMCwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wSW50ZXJ2YWw9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgblRyaWFscz01MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAjZXh0cmFJbmZvID0gdGhpc0luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgcFRocmVzaG9sZCA9IHRocmVzaENyaXRlcmlvbiwgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FtbWEgPSAxLi8yNiwKICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YT0wLjAyLCAjbGFwc2UgcmF0ZSwgSSBzdXBwb3NlIGZvciBXZWlidWxsIGZ1bmN0aW9uIGZpdAogICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9ICdxdWFudGlsZScsICN1c2VzIHRoZSBtZWRpYW4gb2YgdGhlIHBvc3RlcmlvciBhcyB0aGUgZmluYWwgYW5zd2VyCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcFR5cGUgPSAnbG9nJywgICN3aWxsIGhvbWUgaW4gb24gdGhlIDgwJSB0aHJlc2hvbGQuIEJ1dCBzdGVwVHlwZSA9ICdsb2cnIGRvZXNuJ3QgdXN1YWxseSB3b3JrCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWluVmFsPTEsIG1heFZhbCA9IDEwMAogICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgIHByaW50KCdjcmVhdGVkIFFVRVNUIHN0YWlyY2FzZScpCmVsc2U6IAogICAgc3RhaXJjYXNlID0gZGF0YS5TdGFpckhhbmRsZXIoc3RhcnRWYWwgPSAwLjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBUeXBlID0gJ2xvZycsICNpZiBsb2csIHdoYXQgZG8gSSB3YW50IHRvIG11bHRpcGx5IGl0IGJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBTaXplcyA9IHN0ZXBTaXplc0xvZywgICAgI3N0ZXAgc2l6ZSB0byB1c2UgYWZ0ZXIgZWFjaCByZXZlcnNhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5WYWw9MCwgbWF4VmFsPTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5VcD0xLCBuRG93bj0zLCAgI3dpbGwgaG9tZSBpbiBvbiB0aGUgODAlIHRocmVzaG9sZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuUmV2ZXJzYWxzID0gMiwgI1RoZSBzdGFpcmNhc2UgdGVybWluYXRlcyB3aGVuIG5UcmlhbHMgaGF2ZSBiZWVuIGV4Y2VlZGVkLCBvciB3aGVuIGJvdGggblJldmVyc2FscyBhbmQgblRyaWFscyBoYXZlIGJlZW4gZXhjZWVkZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgblRyaWFscz0xKQogICAgcHJpbnQoJ2NyZWF0ZWQgY29udmVudGlvbmFsIHN0YWlyY2FzZScpCgptZXNzYWdlID12aXN1YWwuVGV4dFN0aW0obXlXaW4sdGV4dD0nTk9UIFlFVCBTRVQnLCBwb3M9KDAsLTAuNSkpCmNvcnJlY3RJbmNvcnJlY3RNZXNzYWdlID0gdmlzdWFsLlRleHRTdGltKG15V2luLHRleHQ9JycsIHBvcz0oMCwrMC41KSkKCnRpbWVGb3JOZXh0VHJpYWwgPSBGYWxzZQpyZWZyZXNoTm9pc2U9RmFsc2UKdGhpc0NvcnI9Mgp0cmlhbENsb2NrID0gY29yZS5DbG9jaygpCnQ9bGFzdEZQU3VwZGF0ZT0wCmV4cFN0b3A9IEZhbHNlCm5FYXN5U3RhcnRlclRyaWFscyA9IDAKcHJpbnQoJ3N0YXJ0aW5nIHN0YWlyY2FzZSB3aXRoIGZvbGxvd2luZyBzZXR0aW5nczonKQpwcmludFN0YWlyY2FzZShzdGFpcmNhc2UsIGRlc2NlbmRpbmdQc3ljaG8sIGJyaWVmVHJpYWxVcGRhdGU9RmFsc2UsIHByaW50SW50ZXJuYWxWYWw9VHJ1ZSwgIGFsc29Mb2c9RmFsc2UpCmRvaW5nU3RhaXJjYXNlUGhhc2UgPSBGYWxzZSAjRmlyc3QgcGhhc2Ugb2YgZXhwZXJpbWVudCBpcyBtZXRob2Qgb2YgY29uc3RhbnQgc3RpbXVsaS4gSWYgdXNlIG5ha2VkIFFVRVNULCBtaWdodCBjb252ZXJnZSB0b28gc29vbgppbml0aWFsTm9uc3RhaXJjYXNlVHJpYWxzID0gbnAuYXJyYXkoWzUsMjAsMjAsMjAsIDUwLDUwLDUwLDUsODAsODAsODAsNSw5NSw5NSw5NV0pCmNvcnJFYWNoVHJpYWwgPSBsaXN0KCkgI29ubHkgbmVlZGVkIGZvciBpbml0aWFsTm9uc3RhaXJjYXNlVHJpYWxzCm92ZXJhbGxUcmlhbE4gPSAtMQp3aGlsZSAobm90IHN0YWlyY2FzZS5maW5pc2hlZCkgYW5kIGV4cFN0b3A9PUZhbHNlOgogICAgaWYgb3ZlcmFsbFRyaWFsTisxIDwgbGVuKGluaXRpYWxOb25zdGFpcmNhc2VUcmlhbHMpOiAjc3RpbGwgZG9pbmcgaW5pdGlhbE5vbnN0YWlyY2FzZVRyaWFscwogICAgICAgIG92ZXJhbGxUcmlhbE4gKz0gMQogICAgICAgIHBlcmNlbnROb2lzZSA9IGluaXRpYWxOb25zdGFpcmNhc2VUcmlhbHNbb3ZlcmFsbFRyaWFsTl0KICAgIGVsc2U6CiAgICAgICAgaWYgb3ZlcmFsbFRyaWFsTisxID09IGxlbihpbml0aWFsTm9uc3RhaXJjYXNlVHJpYWxzKTogI2FkZCB0aGVzZSBub24tc3RhaXJjYXNlIHRyaWFscyBzbyBRVUVTVCBrbm93cyBhYm91dCB0aGVtCiAgICAgICAgICAgIHByaW50KCdJbXBvcnRpbmcgJyxjb3JyRWFjaFRyaWFsLCcgYW5kIGludGVuc2l0aWVzICcscmVwcihpbml0aWFsTm9uc3RhaXJjYXNlVHJpYWxzKSkKICAgICAgICAgICAgc3RhaXJjYXNlLmltcG9ydERhdGEoIHRvU3RhaXJjYXNlKGluaXRpYWxOb25zdGFpcmNhc2VUcmlhbHMsZGVzY2VuZGluZ1BzeWNobyksIG5wLmFycmF5KGNvcnJFYWNoVHJpYWwpKSAKICAgICAgICAgICAgCiAgICAgICAgdHJ5OiAjYWR2YW5jZSB0aGUgc3RhaXJjYXNlCiAgICAgICAgICAgIHBlcmNlbnROb2lzZSA9IHN0YWlyY2FzZS5uZXh0KCkKICAgICAgICAgICAgaWYgZGVzY2VuZGluZ1BzeWNobzogI3RoaXMgaXMgZnJlYWtpbmcgYXdrd2FyZC4gU3RhaXJjYXNlLm5leHQoKSB1bi1sb2dzIGl0LCBidXQgdGhlcmUncyBubyB3cmFwcGVyIGZvciBpbnRlbnNpdGllcyB0aGF0IHVuLWxvZ3MgdGhlbS4gUHN5Y2hvcHkgc2hvdWxkIGFkZCB0aGF0CiAgICAgICAgICAgICAgIHBlcmNlbnROb2lzZSA9IDEwMC0gcGVyY2VudE5vaXNlICAjd2lsbCBzdGVwIHRocm91Z2ggdGhlIHN0YWlyY2FzZSwgYmFzZWQgb24gd2hldGhlciB0b2xkIGl0IChhZGREYXRhKSBnb3QgaXQgcmlnaHQgb3Igd3JvbmcKICAgICAgICAgICAgb3ZlcmFsbFRyaWFsTiArPSAxCiAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246ICNOZWVkIHRoaXMgaGVyZSwgZXZlbiB0aG91Z2ggdGVzdCBmb3IgZmluaXNoZWQgYWJvdmUuIEkgY2FuJ3QgdW5kZXJzdGFuZCB3aHkgZmluaXNoZWQgdGVzdCBkb2Vzbid0IGFjY29tcGxpc2ggdGhpcy4KICAgICAgICAgICAgcHJpbnQoJ3N0b3BwaW5nIGJlY2F1c2Ugc3RhaXJjYXNlLm5leHQoKSByZXR1cm5lZCBhIFN0b3BJdGVyYXRpb24sIHdoaWNoIGl0IGRvZXMgd2hlbiBpdCBpcyBmaW5pc2hlZCcpCiAgICAgICAgICAgIGJyZWFrICNicmVhayBvdXQgb2YgdGhlIHRyaWFscyBsb29wCiAgICBwcmludCgnb3ZlcmFsbFRyaWFsTj0nLG92ZXJhbGxUcmlhbE4sICcgICBwZXJjZW50Tm9pc2UgZm9yIHRoaXMgdHJpYWwgPSAnLCByb3VuZChwZXJjZW50Tm9pc2UsMikpICNkZWJ1Z09OCgogICAgdGhpc0xldHRlcklkeCA9IG5wLnJhbmRvbS5yYW5kaW50KDAsMjYpOyAjY2hvb3NlIHJhbmRvbSBsZXR0ZXIKICAgIHJlZnJlc2hOb2lzZSA9IFRydWUKICAgIGlmIHRpbWVGb3JOZXh0VHJpYWw6CiAgICAgICAgY29ycmVjdEluY29ycmVjdE1lc3NhZ2Uuc2V0VGV4dCggWydXUk9ORyEnLCdSSUdIVCEnXVt0aGlzQ29ycl0gKQogICAgdGltZUZvck5leHRUcmlhbCA9IEZhbHNlCiAgICB3aGlsZSBub3QgdGltZUZvck5leHRUcmlhbDoKICAgICAgICBtZXNzYWdlLnNldFRleHQoICdOb2lzZSA9ICcgKyBzdHIocm91bmQocGVyY2VudE5vaXNlLDIpKSArICclJyApCiAgICAgICAgbWVzc2FnZS5kcmF3KCkKICAgICAgICBjb3JyZWN0SW5jb3JyZWN0TWVzc2FnZS5kcmF3KCkKICAgICAgICBpZiByZWZyZXNoTm9pc2U6CiAgICAgICAgICAgIChub2lzZSxhbGxGaWVsZENvb3JkcyxudW1Ob2lzZURvdHMpID0gY3JlYXRlTm9pc2UocGVyY2VudE5vaXNlLzEwMC4sbXlXaW4sZmllbGRXaWR0aFBpeCxiZ0NvbG9yKQogICAgICAgICAgICByZWZyZXNoTm9pc2UgPSBGYWxzZQogICAgICAgICAgICAKICAgICAgICB0PXRyaWFsQ2xvY2suZ2V0VGltZSgpCiAgICAgICAgbGV0dGVyc0RyYXdPYmplY3RzW3RoaXNMZXR0ZXJJZHhdLnNldENvbG9yKCBsZXR0ZXJDb2xvciApCiAgICAgICAgbGV0dGVyc0RyYXdPYmplY3RzW3RoaXNMZXR0ZXJJZHhdLmRyYXcoKSAjRFJBVyBTVElNVUxVUyEKICAgICAgICBpZiBub2lzZSAhPSBOb25lOiAjbW9yZSB0aGFuIDAgbm9pc2UgZG90cwogICAgICAgICAgICBub2lzZS5kcmF3KCkKICAgICAgICBteVdpbi5mbGlwKCkKICAgICAgICAKICAgICAgICAjaGFuZGxlIGtleSBwcmVzc2VzIGVhY2ggZnJhbWUKICAgICAgICBmb3Iga2V5IGluIGV2ZW50LmdldEtleXMoKToKICAgICAgICAgICAga2V5ID0ga2V5LnVwcGVyKCkKICAgICAgICAgICAgaWYga2V5IGluIFsnU1BBQ0UnLF06ICNhIGtleSB0byBwcmVzcyBpZiB5b3Ugd2FudCB0byBzZWUgYSByYW5kb20gbmV3IG5vaXNlIHBhdHRlcm4KICAgICAgICAgICAgICAgIHJlZnJlc2hOb2lzZSA9IFRydWUKICAgICAgICAgICAgaWYga2V5IGluIFsnTFNISUZUJywnRVFVQUxTJ106ICNsc2hpZnQgc2VlbXMgdG8gYmUgcGx1cyBzaWduLCBidXQgZG9lc24ndCB3b3JrIHZlcnkgd2VsbAogICAgICAgICAgICAgICAgcGVyY2VudE5vaXNlICs9IDIgIyBtaW4ocHJvcG9ydG5Ob2lzZSswLjAyLDEpCiAgICAgICAgICAgICAgICByZWZyZXNoTm9pc2UgPSBUcnVlCiAgICAgICAgICAgIGlmIGtleSBpbiBbJ01JTlVTJ106CiAgICAgICAgICAgICAgICBwZXJjZW50Tm9pc2UgKz0gLTIgIyBtaW4ocHJvcG9ydG5Ob2lzZS0wLjAyLDEpCiAgICAgICAgICAgICAgICByZWZyZXNoTm9pc2UgPSBUcnVlCiAgICAgICAgICAgIGlmIGtleSBpbiBbJ0VTQ0FQRSddOgogICAgICAgICAgICAgICAgZXhwU3RvcD1UcnVlCiAgICAgICAgICAgIGlmIGtleSBpbiBbJ0EnLCdCJywnQycsICdEJywgJ0UnLCdGJywgJ0cnLCdIJywnSScsICdKJywgICdLJywgJ0wnLCAnTScsICdOJywgJ08nLCAnUCcsJ1EnLCdSJywgJ1MnLCdUJywnVScsJ1YnLCdXJywgJ1gnLCAnWScsJ1onXToKICAgICAgICAgICAgICAgIHRpbWVGb3JOZXh0VHJpYWwgPSBUcnVlCiAgICAgICAgICAgICAgICBpZiBvcmQoa2V5KS1vcmQoJ0EnKSA9PSB0aGlzTGV0dGVySWR4OgogICAgICAgICAgICAgICAgICAgIHRoaXNDb3JyID0gMSNjb3JyZWN0CiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHRoaXNDb3JyID0gMCNpbmNvcnJlY3QKICAgICAgICAgICAgICAgIGNvcnJFYWNoVHJpYWwuYXBwZW5kKHRoaXNDb3JyKQogICAgICAgICAgICAgICAgaWYgb3ZlcmFsbFRyaWFsTiA+PSBsZW4oaW5pdGlhbE5vbnN0YWlyY2FzZVRyaWFscyk6ICNkb2luZyBzdGFpcmNhc2UgdHJpYWxzIG5vdwogICAgICAgICAgICAgICAgICAgIHN0YWlyY2FzZS5hZGRSZXNwb25zZSh0aGlzQ29yciwgaW50ZW5zaXR5ID0gMTAwLXBlcmNlbnROb2lzZSkgI0FkZCBhIDEgb3IgMCB0byBzaWduaWZ5IGEgY29ycmVjdC9kZXRlY3RlZCBvciBpbmNvcnJlY3QvbWlzc2VkIHRyaWFsCiAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ0hhdmUgYWRkZWQgYW4gaW50ZW5zaXR5IG9mJywnezouM2Z9Jy5mb3JtYXQoMTAwLXBlcmNlbnROb2lzZSkpCm15V2luLmNsb3NlKCkKaWYgb3ZlcmFsbFRyaWFsTisxIDwgbGVuKGluaXRpYWxOb25zdGFpcmNhc2VUcmlhbHMpIGFuZCAob3ZlcmFsbFRyaWFsTj49MCk6ICNleHAgc3RvcHBlZCBiZWZvcmUgZ290IHRocm91Z2ggc3RhaXJjYXNlIHByZWZhY2UgdHJpYWxzCiAgICAjYWRkIHRoZXNlIG5vbi1zdGFpcmNhc2UgdHJpYWxzIHNvIFFVRVNUIGtub3dzIGFib3V0IHRoZW0KICAgIHByaW50KCdJbXBvcnRpbmcgJyxjb3JyRWFjaFRyaWFsLCcgYW5kIGludGVuc2l0aWVzICcsaW5pdGlhbE5vbnN0YWlyY2FzZVRyaWFscykKICAgIHN0YWlyY2FzZS5pbXBvcnREYXRhKCB0b1N0YWlyY2FzZShpbml0aWFsTm9uc3RhaXJjYXNlVHJpYWxzWzA6b3ZlcmFsbFRyaWFsTisxXSxkZXNjZW5kaW5nUHN5Y2hvKSwgbnAuYXJyYXkoY29yckVhY2hUcmlhbCkpIApwcmludCgnRmluaXNoZWQuJykKcHJpbnRTdGFpcmNhc2Uoc3RhaXJjYXNlLCBkZXNjZW5kaW5nUHN5Y2hvLCBicmllZlRyaWFsVXBkYXRlPVRydWUsIHByaW50SW50ZXJuYWxWYWw9VHJ1ZSwgIGFsc29Mb2c9RmFsc2UpCgppZiBzdGFpcmNhc2UuZmluaXNoZWQ6CiAgICBwcmludCgnU3RhaXJjYXNlIHdhcyBmaW5pc2hlZCcpCmVsc2U6CiAgICBwcmludCgnU3RhaXJjYXNlIHdhcyBub3QgZmluaXNoZWQnKQojIGNhbiBub3cgYWNjZXNzIDEgb2YgMyBzdWdnZXN0ZWQgdGhyZXNob2xkIGxldmVscwojcHJpbnQoJ3N0YWlyY2FzZSBtZWFuPScsc3RhaXJjYXNlLm1lYW4oKSkKI3ByaW50KCdzdGFpcmNhc2UgbW9kZT0nLHN0YWlyY2FzZS5tb2RlKCkpCmlmIGRlc2NlbmRpbmdQc3ljaG86CiAgICBxdWFudGlsZVBjdE5vaXNlID0gMTAwLXN0YWlyY2FzZS5xdWFudGlsZSgpIAojcHJpbnQoJ3N0YWlyY2FzZSBxdWFudGlsZSAobWVkaWFuKT0nLCd7Oi40Zn0nLmZvcm1hdChzdGFpcmNhc2UucXVhbnRpbGUoKSksIGVuZD0nJykgI2dldHMgdGhlIG1lZGlhbi4gUHJpbnRzIGFzIGZsb2F0aW5nIHBvaW50IHdpdGggNCBkaWdpdHMgb2YgcHJlY2lzaW9uCnByaW50KCdNZWRpYW4gb2YgcG9zdGVyaW9yIGRpc3RyaWJ1dGlvbiBhY2NvcmRpbmcgdG8gUVVFU1QsIHBlcmNlbnQgbm9pc2U9JywnezouNGZ9Jy5mb3JtYXQocXVhbnRpbGVQY3ROb2lzZSkpIAoKaWYgcGxvdEZha2VEYXRhSW5zdGVhZDogI3Bsb3Qgc3RhbmRhcmQgZmFrZSBkYXRhIGluc3RlYWQuCiAgICBpbnRlbnNpdGllcyA9IG5wLmFycmF5KFs1LjAwLCAyMC4wMCwgMjAuMDAsIDIwLjAwLCA1MC4wMCwgNTAuMDAsIDUwLjAwLCA1LjAwLCA4MC4wMCwgODAuMDAsIDgwLjAwLCA1LjAwLCA5NS4wMCwgOTUuMDAsIDk1LjAwLCA3NC41NiwgNzUuODksIDc2Ljk0LCA3Ny43MiwgNzguNDMsIDc5LjA1LCA3OS42OCwgODAuMjgsIDgwLjg3LCA4MS41MywgODIuMjIsIDgzLjA1LCA4NC4wMSwgODUuMDQsIDg2LjA5LCA4Ny4wMiwgODcuODAsIDg4LjQ3LCA4OS4wMywgODkuNDksIDg5Ljg4LCA5MC4yMCwgOTAuNDksIDkwLjc0LCA5MC45NiwgOTEuMTYsIDg5Ljk3LCA5MC4xMiwgOTAuMjQsIDkwLjM3LCA5MC40OCwgOTAuNTksIDkwLjY5LCA5MC43OSwgOTAuMTAsIDkwLjE4LCA5MC4yNiwgOTAuMzMsIDkwLjQwLCA5MC40NywgOTAuNTQsIDkwLjYwLCA5MC42NiwgOTAuNzIsIDkwLjI4LCA5MC4zMywgOTAuMzcsIDkwLjQyLCA5MC4wNiwgODkuNzMKICAgIF0pICNkZWJ1ZywgZXhhbXBsZSBkYXRhCiAgICBjb3JyRWFjaFRyaWFsPSBucC5hcnJheShbMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMCwgMCwgMQogICAgXSkgI2RlYnVnLCBleGFtcGxlIGRhdGEKICAgIHN0YWlyY2FzZS5pbXBvcnREYXRhKCB0b1N0YWlyY2FzZShpbnRlbnNpdGllcyxkZXNjZW5kaW5nUHN5Y2hvKSwgY29yckVhY2hUcmlhbCkgCgppbnRlbnNpdGllcyA9IG91dE9mU3RhaXJjYXNlKCBzdGFpcmNhc2UuaW50ZW5zaXRpZXMsIHN0YWlyY2FzZSwgZGVzY2VuZGluZ1BzeWNobyApICNpbnZlcnNlIGxvZywgMTAwLSAKcmVzcG9uc2VzID0gc3RhaXJjYXNlLmRhdGEKCmV4cGVjdGVkTWluID0gMS4wLzI2CiNmaXQgY3VydmUKZml0ID0gTm9uZQp0cnk6IAogICAgaW50ZW5zaXR5Rm9yQ3VydmVGaXR0aW5nID0gaW50ZW5zaXRpZXMKICAgIGlmIGRlc2NlbmRpbmdQc3ljaG86IAogICAgICAgIGludGVuc2l0eUZvckN1cnZlRml0dGluZyA9IDEwMC1pbnRlbnNpdGllcyAjYmVjYXVzZSBmaXRXZWlidWxsIGFzc3VtZXMgY3VydmUgaXMgYXNjZW5kaW5nCiAgICBmaXQgPSBkYXRhLkZpdFdlaWJ1bGwoaW50ZW5zaXR5Rm9yQ3VydmVGaXR0aW5nLCByZXNwb25zZXMsIGV4cGVjdGVkTWluPWV4cGVjdGVkTWluLCAgc2VtcyA9IDEuMC9sZW4oaW50ZW5zaXR5Rm9yQ3VydmVGaXR0aW5nKSkKZXhjZXB0OgogICAgcHJpbnQoIkZpdCBmYWlsZWQuIikKcGxvdERhdGFBbmRQc3ljaG9tZXRyaWNDdXJ2ZShzdGFpcmNhc2UsZml0LGRlc2NlbmRpbmdQc3ljaG8sdGhyZXNoQ3JpdGVyaW9uKQojc2F2ZSBmaWd1cmUgdG8gZmlsZQpvdXRwdXRGaWxlID0gICd0ZXN0X3N0YWlyY2FzZV9wbG90JyAjIG9zLnBhdGguam9pbihkYXRhRGlyLCAndGVzdF9zdGFpcmNhc2VfcGxvdCcpCnB5bGFiLnNhdmVmaWcob3V0cHV0RmlsZSArICcucGRmJykKcHlsYWIuc2F2ZWZpZyhvdXRwdXRGaWxlICsgJy5qcGcnKQpweWxhYi5zaG93KCkgI211c3QgY2FsbCB0aGlzIHRvIGFjdHVhbGx5IHNob3cgcGxvdAo8fGZpbV9zdWZmaXh8PgojIS91c3IvYmluL2VudiBweXRob24KIiIiCmJ5IEFsZXggSG9sY29tYmUKQmVmb3JlIGJyb3VnaHQgaW50byB0aGUgcmVwb3NpdG9yeSwgdGhpcyBmaWxlIHdhcyBsdHJzTm9pc2VBZHZhbmNlUXVlc3RNYW51YWxseS5weQo8fGZpbV9lbmR8Pg=="]
["f91249253d67b25cc765b3d42d15110cebce8c8c-4","f91249253d67b25cc765b3d42d15110cebce8c8c","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiIiIgpieSBBbGV4IEhvbGNvbWJlCkJlZm9yZSBicm91Z2h0IGludG8gdGhlIHJlcG9zaXRvcnksIHRoaXMgZmlsZSB3YXMgbHRyc05vaXNlQWR2YW5jZVF1ZXN0TWFudWFsbHkucHkKSSB1c2VkIHRvIGhhdmUgdGhlIG5vaXNlIHBhcmFtZXRlciBnbyBmcm9tIDAgdG8gMSBidXQgd2l0aCBsb2cgc3RlcHBpbmcsIHN0YWlyY2FzZSBhbHdheXMgY3JhcHBlZCBvdXQsIGRvbid0IGtub3cgd2h5LApzbyBJIHVzZSBwZXJjZW50Tm9pc2UgKDAtPjEwMCkgaW5zdGVhZCBvZiBwcm9wb3J0aW9uCiIiIgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCmZyb20gcHN5Y2hvcHkgaW1wb3J0IGNvcmUsIHZpc3VhbCwgZXZlbnQsIG1pc2MsIGRhdGEsIGd1aQppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG9zLCBweWxhYgpmcm9tIG1hdGggaW1wb3J0IGF0YW4sIGxvZwpmcm9tIG5vaXNlU3RhaXJjYXNlSGVscGVycyBpbXBvcnQgcHJpbnRTdGFpcmNhc2UsIGNyZWF0ZU5vaXNlLCB0b1N0YWlyY2FzZSwgb3V0T2ZTdGFpcmNhc2UsIHBsb3REYXRhQW5kUHN5Y2hvbWV0cmljQ3VydmUKZGVzY2VuZGluZ1BzeWNobyA9IFRydWUKCiMgY3JlYXRlIGEgZGlhbG9nIGZyb20gZGljdGlvbmFyeQppbmZvRmlyc3QgPSB7ICdQbG90IGZha2UgZGF0YSAobm90IHN0YWlyY2FzZSBkYXRhKSc6IEZhbHNlLCAgICd0aHJlc2hDcml0ZXJpb24nOiAwLjU4IH0KZGxnUmVzdWx0ID0gZ3VpLkRsZ0Zyb21EaWN0KGRpY3Rpb25hcnk9aW5mb0ZpcnN0LCAKICAgIHRpdGxlPSdTdGFpcmNhc2UgdG8gZmluZCB0aHJlc2ggbm9pc2UgbGV2ZWwsIGV4YW1wbGUgd2l0aCBzaW5nbGUgbGV0dGVyIHByZXNlbnRhdGlvbicsIAogICAgb3JkZXI9WydQbG90IGZha2UgZGF0YSAobm90IHN0YWlyY2FzZSBkYXRhKScsICd0aHJlc2hDcml0ZXJpb24nXSwgCiAgICAjZml4ZWQ9WydDaGVjayByZWZyZXNoIGV0YyddKSN0aGlzIGF0dHJpYnV0ZSBjYW4ndCBiZSBjaGFuZ2VkIGJ5IHRoZSB1c2VyCiAgICApCmlmIG5vdCBkbGdSZXN1bHQuT0s6CiAgICBwcmludCgnVXNlciBjYW5jZWxsZWQgZnJvbSBkaWFsb2cgYm94Jyk7IGNvcmUucXVpdCgpCnBsb3RGYWtlRGF0YUluc3RlYWQgPSBpbmZvRmlyc3RbJ1Bsb3QgZmFrZSBkYXRhIChub3Qgc3RhaXJjYXNlIGRhdGEpJ10KdGhyZXNoQ3JpdGVyaW9uID0gaW5mb0ZpcnN0Wyd0aHJlc2hDcml0ZXJpb24nXSAjdGhyZXNoQ3JpdGVyaW9uIGlzIHByb3BvcnRpb24gY29ycmVjdCBmb3Igd2hpY2ggd2FudCB0byBlc3RpbWF0ZSB0aGUgcGFyYW1ldGVyIChpbnRlbnNpdHkpIGxldmVsCgpkZWYgbnVtYmVyVG9MZXR0ZXIobnVtYmVyKTogIzAgPSBBLCAyNSA9IFoKICAgICNpZiBpdCdzIG5vdCByZWFsbHkgYSBsZXR0ZXIsIHJldHVybiBACiAgICAjaWYgdHlwZShudW1iZXIpICE9IHR5cGUoNSkgYW5kIHR5cGUobnVtYmVyKSAhPSB0eXBlKG5wLmFycmF5KFszXSlbMF0pOiAjbm90IGFuIGludGVnZXIgb3IgbnVtcHkuaW50MzIKICAgICMgICAgcmV0dXJuICgnQCcpCiAgICBpZiBudW1iZXIgPCAwIG9yIG51bWJlciA+IDI1OgogICAgICAgIHJldHVybiAoJ0AnKQogICAgZWxzZTogI2l0J3MgcHJvYmFibHkgYSBsZXR0ZXIKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJldHVybiBjaHIoIG9yZCgnQScpK251bWJlciApCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICByZXR1cm4oJ0AnKQoKYXV0b0xvZ2dpbmc9RmFsc2UKI2NyZWF0ZSBhIHdpbmRvdyB0byBkcmF3IGluCndpZHRoUGl4PTYwMCAjbW9uaXRvciB3aWR0aCBpbiBwaXhlbHMKbW9uaXRvcndpZHRoID0gMzguNyAjbW9uaXRvciB3aWR0aCBpbiBjbQp2aWV3ZGlzdCA9IDU3LjsgI2NtCmZ1bGxzY3JlZW4gPSAwCgpteVdpbiA9IHZpc3VhbC5XaW5kb3coKHdpZHRoUGl4LHdpZHRoUGl4KSwgYWxsb3dHVUk9RmFsc2UsIGNvbG9yPTAsIAogICAgICAgIG1vbml0b3I9J3Rlc3RNb25pdG9yJyxmdWxsc2NyPWZ1bGxzY3JlZW4sd2luVHlwZT0ncHlnbGV0JywgdW5pdHM9J25vcm0nKQoKYmdDb2xvciA9IFstMS4sLTEuLC0xLl0gIyBbLTEsLTEsLTFdCmN1ZUNvbG9yID0gWzEuLDEuLDEuXQpsZXR0ZXJDb2xvciA9IFsxLiwxLiwxLl0KbHRySGVpZ2h0ID0gMi41CnBpeGVscGVyZGVncmVlID0gd2lkdGhQaXgvIChhdGFuKG1vbml0b3J3aWR0aC92aWV3ZGlzdCkgL25wLnBpKjE4MCkKCiNJTklUSUFMSVNFIFNPTUUgU1RJTVVMSQojcHJlZHJhdyBhbGwgMjYgbGV0dGVycyAKbGV0dGVyc0RyYXdPYmplY3RzID0gbGlzdCgpCmZvciBpIGluIHJhbmdlKDAsMjYpOgogICBsZXR0ZXJEcmF3ID0gdmlzdWFsLlRleHRTdGltKG15V2luLHBvcz0oMCwwKSxjb2xvclNwYWNlPSdyZ2InLGNvbG9yPWxldHRlckNvbG9yLGFsaWduSG9yaXo9J2NlbnRlcicsYWxpZ25WZXJ0PSdjZW50ZXInLHVuaXRzPSdkZWcnLGF1dG9Mb2c9YXV0b0xvZ2dpbmcpCiAgIGxldHRlckRyYXcuc2V0SGVpZ2h0KCBsdHJIZWlnaHQgKSAjTWFydGluaSBsZXR0ZXJzIHdlcmUgMi41ZGVnIGhpZ2gKICAgbGV0dGVyID0gbnVtYmVyVG9MZXR0ZXIoaSkKICAgI3ByaW50ICdhZGRpbmcgbGV0dGVyJywgbGV0dGVyLCAnIHRvIHRoZSBkcmF3aW5nIHF1ZXVlJwogICBsZXR0ZXJEcmF3LnNldFRleHQobGV0dGVyKQogICBsZXR0ZXJEcmF3LnNldENvbG9yKGJnQ29sb3IpCiAgIGxldHRlcnNEcmF3T2JqZWN0cy5hcHBlbmQobGV0dGVyRHJhdykKICAKI0FsbCBub2lzZSBkb3QgY29vcmRpbmF0ZXMgdWx0aW1hdGVseSBpbiBwaXhlbHMsIHNvIGNhbiBzcGVjaWZ5IGVhY2ggZG90IGlzIG9uZSBwaXhlbCAKZmllbGRXaWR0aERlZz1sdHJIZWlnaHQgKjEuOApmaWVsZFdpZHRoUGl4ID0gaW50KCByb3VuZCggZmllbGRXaWR0aERlZypwaXhlbHBlcmRlZ3JlZSApICkKI2NyZWF0ZSBhIGdyaWQgb2YgeHkgdmFscwpwcm9wb3J0bk5vaXNlID0gMC4xCgoobm9pc2UsYWxsRmllbGRDb29yZHMsbnVtTm9pc2VEb3RzKSA9IGNyZWF0ZU5vaXNlKHByb3BvcnRuTm9pc2UsbXlXaW4sZmllbGRXaWR0aFBpeCxiZ0NvbG9yKQoKc3RlcFNpemVzTGluZWFyID0gWy4yLC4yLC4xLC4xLC4wNSwuMDVdCnN0ZXBTaXplc0xvZyA9IFtsb2coMS40LDEwKSxsb2coMS40LDEwKSxsb2coMS4zLDEwKSxsb2coMS4zLDEwKSxsb2coMS4yLDEwKV0KI2NyZWF0ZSB0aGUgc3RhaXJjYXNlIGhhbmRsZXIKdXNlUXVlc3QgPSBUcnVlCmlmICB1c2VRdWVzdDoKICAgIHN0YWlyY2FzZSA9IGRhdGEuUXVlc3RIYW5kbGVyKHN0YXJ0VmFsID0gOTUsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0VmFsU2QgPSAxMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcEludGVydmFsPSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5UcmlhbHM9NTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgI2V4dHJhSW5mbyA9IHRoaXNJbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgIHBUaHJlc2hvbGQgPSB0aHJlc2hDcml0ZXJpb24sICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgIGdhbW1hID0gMS4vMjYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE9MC4wMiwgI2xhcHNlIHJhdGUsIEkgc3VwcG9zZSBmb3IgV2VpYnVsbCBmdW5jdGlvbiBmaXQKICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAncXVhbnRpbGUnLCAjdXNlcyB0aGUgbWVkaWFuIG9mIHRoZSBwb3N0ZXJpb3IgYXMgdGhlIGZpbmFsIGFuc3dlcgogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBUeXBlID0gJ2xvZycsICAjd2lsbCBob21lIGluIG9uIHRoZSA4MCUgdGhyZXNob2xkLiBCdXQgc3RlcFR5cGUgPSAnbG9nJyBkb2Vzbid0IHVzdWFsbHkgd29yawogICAgICAgICAgICAgICAgICAgICAgICAgIG1pblZhbD0xLCBtYXhWYWwgPSAxMDAKICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICBwcmludCgnY3JlYXRlZCBRVUVTVCBzdGFpcmNhc2UnKQplbHNlOiAKICAgIHN0YWlyY2FzZSA9IGRhdGEuU3RhaXJIYW5kbGVyKHN0YXJ0VmFsID0gMC4xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwVHlwZSA9ICdsb2cnLCAjaWYgbG9nLCB3aGF0IGRvIEkgd2FudCB0byBtdWx0aXBseSBpdCBieQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwU2l6ZXMgPSBzdGVwU2l6ZXNMb2csICAgICNzdGVwIHNpemUgdG8gdXNlIGFmdGVyIGVhY2ggcmV2ZXJzYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluVmFsPTAsIG1heFZhbD0xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuVXA9MSwgbkRvd249MywgICN3aWxsIGhvbWUgaW4gb24gdGhlIDgwJSB0aHJlc2hvbGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgblJldmVyc2FscyA9IDIsICNUaGUgc3RhaXJjYXNlIHRlcm1pbmF0ZXMgd2hlbiBuVHJpYWxzIGhhdmUgYmVlbiBleGNlZWRlZCwgb3Igd2hlbiBib3RoIG5SZXZlcnNhbHMgYW5kIG5UcmlhbHMgaGF2ZSBiZWVuIGV4Y2VlZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5UcmlhbHM9MSkKICAgIHByaW50KCdjcmVhdGVkIGNvbnZlbnRpb25hbCBzdGFpcmNhc2UnKQoKbWVzc2FnZSA9dmlzdWFsLlRleHRTdGltKG15V2luLHRleHQ9J05PVCBZRVQgU0VUJywgcG9zPSgwLC0wLjUpKQpjb3JyZWN0SW5jb3JyZWN0TWVzc2FnZSA9IHZpc3VhbC5UZXh0U3RpbShteVdpbix0ZXh0PScnLCBwb3M9KDAsKzAuNSkpCgp0aW1lRm9yTmV4dFRyaWFsID0gRmFsc2UKcmVmcmVzaE5vaXNlPUZhbHNlCnRoaXNDb3JyPTIKdHJpYWxDbG9jayA9IGNvcmUuQ2xvY2soKQp0PWxhc3RGUFN1cGRhdGU9MApleHBTdG9wPSBGYWxzZQpuRWFzeVN0YXJ0ZXJUcmlhbHMgPSAwCnByaW50KCdzdGFydGluZyBzdGFpcmNhc2Ugd2l0aCBmb2xsb3dpbmcgc2V0dGluZ3M6JykKcHJpbnRTdGFpcmNhc2Uoc3RhaXJjYXNlLCBkZXNjZW5kaW5nUHN5Y2hvLCBicmllZlRyaWFsVXBkYXRlPUZhbHNlLCBwcmludEludGVybmFsVmFsPVRydWUsICBhbHNvTG9nPUZhbHNlKQpkb2luZ1N0YWlyY2FzZVBoYXNlID0gRmFsc2UgI0ZpcnN0IHBoYXNlIG9mIGV4cGVyaW1lbnQgaXMgbWV0aG9kIG9mIGNvbnN0YW50IHN0aW11bGkuIElmIHVzZSBuYWtlZCBRVUVTVCwgbWlnaHQgY29udmVyZ2UgdG9vIHNvb24KaW5pdGlhbE5vbnN0YWlyY2FzZVRyaWFscyA9IG5wLmFycmF5KFs1LDIwLDIwLDIwLCA1MCw1MCw1MCw1LDgwLDgwLDgwLDUsOTUsOTUsOTVdKQpjb3JyRWFjaFRyaWFsID0gbGlzdCgpICNvbmx5IG5lZWRlZCBmb3IgaW5pdGlhbE5vbnN0YWlyY2FzZVRyaWFscwpvdmVyYWxsVHJpYWxOID0gLTEKd2hpbGUgKG5vdCBzdGFpcmNhc2UuZmluaXNoZWQpIGFuZCBleHBTdG9wPT1GYWxzZToKICAgIGlmIG92ZXJhbGxUcmlhbE4rMSA8IGxlbihpbml0aWFsTm9uc3RhaXJjYXNlVHJpYWxzKTogI3N0aWxsIGRvaW5nIGluaXRpYWxOb25zdGFpcmNhc2VUcmlhbHMKICAgICAgICBvdmVyYWxsVHJpYWxOICs9IDEKICAgICAgICBwZXJjZW50Tm9pc2UgPSBpbml0aWFsTm9uc3RhaXJjYXNlVHJpYWxzW292ZXJhbGxUcmlhbE5dCiAgICBlbHNlOgogICAgICAgIGlmIG92ZXJhbGxUcmlhbE4rMSA9PSBsZW4oaW5pdGlhbE5vbnN0YWlyY2FzZVRyaWFscyk6ICNhZGQgdGhlc2Ugbm9uLXN0YWlyY2FzZSB0cmlhbHMgc28gUVVFU1Qga25vd3MgYWJvdXQgdGhlbQogICAgICAgICAgICBwcmludCgnSW1wb3J0aW5nICcsY29yckVhY2hUcmlhbCwnIGFuZCBpbnRlbnNpdGllcyAnLHJlcHIoaW5pdGlhbE5vbnN0YWlyY2FzZVRyaWFscykpCiAgICAgICAgICAgIHN0YWlyY2FzZS5pbXBvcnREYXRhKCB0b1N0YWlyY2FzZShpbml0aWFsTm9uc3RhaXJjYXNlVHJpYWxzLGRlc2NlbmRpbmdQc3ljaG8pLCBucC5hcnJheShjb3JyRWFjaFRyaWFsKSkgCiAgICAgICAgICAgIAogICAgICAgIHRyeTogI2FkdmFuY2UgdGhlIHN0YWlyY2FzZQogICAgICAgICAgICBwZXJjZW50Tm9pc2UgPSBzdGFpcmNhc2UubmV4dCgpCiAgICAgICAgICAgIGlmIGRlc2NlbmRpbmdQc3ljaG86ICN0aGlzIGlzIGZyZWFraW5nIGF3a3dhcmQuIFN0YWlyY2FzZS5uZXh0KCkgdW4tbG9ncyBpdCwgYnV0IHRoZXJlJ3Mgbm8gd3JhcHBlciBmb3IgaW50ZW5zaXRpZXMgdGhhdCB1bi1sb2dzIHRoZW0uIFBzeWNob3B5IHNob3VsZCBhZGQgdGhhdAogICAgICAgICAgICAgICBwZXJjZW50Tm9pc2UgPSAxMDAtIHBlcmNlbnROb2lzZSAgI3dpbGwgc3RlcCB0aHJvdWdoIHRoZSBzdGFpcmNhc2UsIGJhc2VkIG9uIHdoZXRoZXIgdG9sZCBpdCAoYWRkRGF0YSkgZ290IGl0IHJpZ2h0IG9yIHdyb25nCiAgICAgICAgICAgIG92ZXJhbGxUcmlhbE4gKz0gMQogICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOiAjTmVlZCB0aGlzIGhlcmUsIGV2ZW4gdGhvdWdoIHRlc3QgZm9yIGZpbmlzaGVkIGFib3ZlLiBJIGNhbid0IHVuZGVyc3RhbmQgd2h5IGZpbmlzaGVkIHRlc3QgZG9lc24ndCBhY2NvbXBsaXNoIHRoaXMuCiAgICAgICAgICAgIHByaW50KCdzdG9wcGluZyBiZWNhdXNlIHN0YWlyY2FzZS5uZXh0KCkgcmV0dXJuZWQgYSBTdG9wSXRlcmF0aW9uLCB3aGljaCBpdCBkb2VzIHdoZW4gaXQgaXMgZmluaXNoZWQnKQogICAgICAgICAgICBicmVhayAjYnJlYWsgb3V0IG9mIHRoZSB0cmlhbHMgbG9vcAogICAgcHJpbnQoJ292ZXJhbGxUcmlhbE49JyxvdmVyYWxsVHJpYWxOLCAnICAgcGVyY2VudE5vaXNlIGZvciB0aGlzIHRyaWFsID0gJywgcm91bmQocGVyY2VudE5vaXNlLDIpKSAjZGVidWdPTgoKICAgIHRoaXNMZXR0ZXJJZHggPSBucC5yYW5kb20ucmFuZGludCgwLDI2KTsgI2Nob29zZSByYW5kb20gbGV0dGVyCiAgICByZWZyZXNoTm9pc2UgPSBUcnVlCiAgICBpZiB0aW1lRm9yTmV4dFRyaWFsOgogICAgICAgIGNvcnJlY3RJbmNvcnJlY3RNZXNzYWdlLnNldFRleHQoIFsnV1JPTkchJywnUklHSFQhJ11bdGhpc0NvcnJdICkKICAgIHRpbWVGb3JOZXh0VHJpYWwgPSBGYWxzZQogICAgd2hpbGUgbm90IHRpbWVGb3JOZXh0VHJpYWw6CiAgICAgICAgbWVzc2FnZS5zZXRUZXh0KCAnTm9pc2UgPSAnICsgc3RyKHJvdW5kKHBlcmNlbnROb2lzZSwyKSkgKyAnJScgKQogICAgICAgIG1lc3NhZ2UuZHJhdygpCiAgICAgICAgY29ycmVjdEluY29ycmVjdE1lc3NhZ2UuZHJhdygpCiAgICAgICAgaWYgcmVmcmVzaE5vaXNlOgogICAgICAgICAgICAobm9pc2UsYWxsRmllbGRDb29yZHMsbnVtTm9pc2VEb3RzKSA9IGNyZWF0ZU5vaXNlKHBlcmNlbnROb2lzZS8xMDAuLG15V2luLGZpZWxkV2lkdGhQaXgsYmdDb2xvcikKICAgICAgICAgICAgcmVmcmVzaE5vaXNlID0gRmFsc2UKICAgICAgICAgICAgCiAgICAgICAgdD10cmlhbENsb2NrLmdldFRpbWUoKQogICAgICAgIGxldHRlcnNEcmF3T2JqZWN0c1t0aGlzTGV0dGVySWR4XS5zZXRDb2xvciggbGV0dGVyQ29sb3IgKQogICAgICAgIGxldHRlcnNEcmF3T2JqZWN0c1t0aGlzTGV0dGVySWR4XS5kcmF3KCkgI0RSQVcgU1RJTVVMVVMhCiAgICAgICAgaWYgbm9pc2UgIT0gTm9uZTogI21vcmUgdGhhbiAwIG5vaXNlIGRvdHMKICAgICAgICAgICAgbm9pc2UuZHJhdygpCiAgICAgICAgbXlXaW4uZmxpcCgpCiAgICAgICAgCiAgICAgICAgI2hhbmRsZSBrZXkgcHJlc3NlcyBlYWNoIGZyYW1lCiAgICAgICAgZm9yIGtleSBpbiBldmVudC5nZXRLZXlzKCk6CiAgICAgICAgICAgIGtleSA9IGtleS51cHBlcigpCiAgICAgICAgICAgIGlmIGtleSBpbiBbJ1NQQUNFJyxdOiAjYSBrZXkgdG8gcHJlc3MgaWYgeW91IHdhbnQgdG8gc2VlIGEgcmFuZG9tIG5ldyBub2lzZSBwYXR0ZXJuCiAgICAgICAgICAgICAgICByZWZyZXNoTm9pc2UgPSBUcnVlCiAgICAgICAgICAgIGlmIGtleSBpbiBbJ0xTSElGVCcsJ0VRVUFMUyddOiAjbHNoaWZ0IHNlZW1zIHRvIGJlIHBsdXMgc2lnbiwgYnV0IGRvZXNuJ3Qgd29yayB2ZXJ5IHdlbGwKICAgICAgICAgICAgICAgIHBlcmNlbnROb2lzZSArPSAyICMgbWluKHByb3BvcnRuTm9pc2UrMC4wMiwxKQogICAgICAgICAgICAgICAgcmVmcmVzaE5vaXNlID0gVHJ1ZQogICAgICAgICAgICBpZiBrZXkgaW4gWydNSU5VUyddOgogICAgICAgICAgICAgICAgcGVyY2VudE5vaXNlICs9IC0yICMgbWluKHByb3BvcnRuTm9pc2UtMC4wMiwxKQogICAgICAgICAgICAgICAgcmVmcmVzaE5vaXNlID0gVHJ1ZQogICAgICAgICAgICBpZiBrZXkgaW4gWydFU0NBUEUnXToKICAgICAgICAgICAgICAgIGV4cFN0b3A9VHJ1ZQogICAgICAgICAgICBpZiBrZXkgaW4gWydBJywnQicsJ0MnLCAnRCcsICdFJywnRicsICdHJywnSCcsJ0knLCAnSicsICAnSycsICdMJywgJ00nLCAnTicsICdPJywgJ1AnLCdRJywnUicsICdTJywnVCcsJ1UnLCdWJywnVycsICdYJywgJ1knLCdaJ106CiAgICAgICAgICAgICAgICB0aW1lRm9yTmV4dFRyaWFsID0gVHJ1ZQogICAgICAgICAgICAgICAgaWYgb3JkKGtleSktb3JkKCdBJykgPT0gdGhpc0xldHRlcklkeDoKICAgICAgICAgICAgICAgICAgICB0aGlzQ29yciA9IDEjY29ycmVjdAogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICB0aGlzQ29yciA9IDAjaW5jb3JyZWN0CiAgICAgICAgICAgICAgICBjb3JyRWFjaFRyaWFsLmFwcGVuZCh0aGlzQ29ycikKICAgICAgICAgICAgICAgIGlmIG92ZXJhbGxUcmlhbE4gPj0gbGVuKGluaXRpYWxOb25zdGFpcmNhc2VUcmlhbHMpOiAjZG9pbmcgc3RhaXJjYXNlIHRyaWFscyBub3cKICAgICAgICAgICAgICAgICAgICBzdGFpcmNhc2UuYWRkUmVzcG9uc2UodGhpc0NvcnIsIGludGVuc2l0eSA9IDEwMC1wZXJjZW50Tm9pc2UpICNBZGQgYSAxIG9yIDAgdG8gc2lnbmlmeSBhIGNvcnJlY3QvZGV0ZWN0ZWQgb3IgaW5jb3JyZWN0L21pc3NlZCB0cmlhbAogICAgICAgICAgICAgICAgICAgIHByaW50KCdIYXZlIGFkZGVkIGFuIGludGVuc2l0eSBvZicsJ3s6LjNmfScuZm9ybWF0KDEwMC1wZXJjZW50Tm9pc2UpKQpteVdpbi5jbG9zZSgpCmlmIG92ZXJhbGxUcmlhbE4rMSA8IGxlbihpbml0aWFsTm9uc3RhaXJjYXNlVHJpYWxzKSBhbmQgKG92ZXJhbGxUcmlhbE4+PTApOiAjZXhwIHN0b3BwZWQgYmVmb3JlIGdvdCB0aHJvdWdoIHN0YWlyY2FzZSBwcmVmYWNlIHRyaWFscwogICAgI2FkZCB0aGVzZSBub24tc3RhaXJjYXNlIHRyaWFscyBzbyBRVUVTVCBrbm93cyBhYm91dCB0aGVtCiAgICBwcmludCgnSW1wb3J0aW5nICcsY29yckVhY2hUcmlhbCwnIGFuZCBpbnRlbnNpdGllcyAnLGluaXRpYWxOb25zdGFpcmNhc2VUcmlhbHMpCjx8ZmltX2hvbGV8PgpwcmludCgnRmluaXNoZWQuJykKcHJpbnRTdGFpcmNhc2Uoc3RhaXJjYXNlLCBkZXNjZW5kaW5nUHN5Y2hvLCBicmllZlRyaWFsVXBkYXRlPVRydWUsIHByaW50SW50ZXJuYWxWYWw9VHJ1ZSwgIGFsc29Mb2c9RmFsc2UpCgppZiBzdGFpcmNhc2UuZmluaXNoZWQ6CiAgICBwcmludCgnU3RhaXJjYXNlIHdhcyBmaW5pc2hlZCcpCmVsc2U6CiAgICBwcmludCgnU3RhaXJjYXNlIHdhcyBub3QgZmluaXNoZWQnKQojIGNhbiBub3cgYWNjZXNzIDEgb2YgMyBzdWdnZXN0ZWQgdGhyZXNob2xkIGxldmVscwojcHJpbnQoJ3N0YWlyY2FzZSBtZWFuPScsc3RhaXJjYXNlLm1lYW4oKSkKI3ByaW50KCdzdGFpcmNhc2UgbW9kZT0nLHN0YWlyY2FzZS5tb2RlKCkpCmlmIGRlc2NlbmRpbmdQc3ljaG86CiAgICBxdWFudGlsZVBjdE5vaXNlID0gMTAwLXN0YWlyY2FzZS5xdWFudGlsZSgpIAojcHJpbnQoJ3N0YWlyY2FzZSBxdWFudGlsZSAobWVkaWFuKT0nLCd7Oi40Zn0nLmZvcm1hdChzdGFpcmNhc2UucXVhbnRpbGUoKSksIGVuZD0nJykgI2dldHMgdGhlIG1lZGlhbi4gUHJpbnRzIGFzIGZsb2F0aW5nIHBvaW50IHdpdGggNCBkaWdpdHMgb2YgcHJlY2lzaW9uCnByaW50KCdNZWRpYW4gb2YgcG9zdGVyaW9yIGRpc3RyaWJ1dGlvbiBhY2NvcmRpbmcgdG8gUVVFU1QsIHBlcmNlbnQgbm9pc2U9JywnezouNGZ9Jy5mb3JtYXQocXVhbnRpbGVQY3ROb2lzZSkpIAoKaWYgcGxvdEZha2VEYXRhSW5zdGVhZDogI3Bsb3Qgc3RhbmRhcmQgZmFrZSBkYXRhIGluc3RlYWQuCiAgICBpbnRlbnNpdGllcyA9IG5wLmFycmF5KFs1LjAwLCAyMC4wMCwgMjAuMDAsIDIwLjAwLCA1MC4wMCwgNTAuMDAsIDUwLjAwLCA1LjAwLCA4MC4wMCwgODAuMDAsIDgwLjAwLCA1LjAwLCA5NS4wMCwgOTUuMDAsIDk1LjAwLCA3NC41NiwgNzUuODksIDc2Ljk0LCA3Ny43MiwgNzguNDMsIDc5LjA1LCA3OS42OCwgODAuMjgsIDgwLjg3LCA4MS41MywgODIuMjIsIDgzLjA1LCA4NC4wMSwgODUuMDQsIDg2LjA5LCA4Ny4wMiwgODcuODAsIDg4LjQ3LCA4OS4wMywgODkuNDksIDg5Ljg4LCA5MC4yMCwgOTAuNDksIDkwLjc0LCA5MC45NiwgOTEuMTYsIDg5Ljk3LCA5MC4xMiwgOTAuMjQsIDkwLjM3LCA5MC40OCwgOTAuNTksIDkwLjY5LCA5MC43OSwgOTAuMTAsIDkwLjE4LCA5MC4yNiwgOTAuMzMsIDkwLjQwLCA5MC40NywgOTAuNTQsIDkwLjYwLCA5MC42NiwgOTAuNzIsIDkwLjI4LCA5MC4zMywgOTAuMzcsIDkwLjQyLCA5MC4wNiwgODkuNzMKICAgIF0pICNkZWJ1ZywgZXhhbXBsZSBkYXRhCiAgICBjb3JyRWFjaFRyaWFsPSBucC5hcnJheShbMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMCwgMCwgMQogICAgXSkgI2RlYnVnLCBleGFtcGxlIGRhdGEKICAgIHN0YWlyY2FzZS5pbXBvcnREYXRhKCB0b1N0YWlyY2FzZShpbnRlbnNpdGllcyxkZXNjZW5kaW5nUHN5Y2hvKSwgY29yckVhY2hUcmlhbCkgCgppbnRlbnNpdGllcyA9IG91dE9mU3RhaXJjYXNlKCBzdGFpcmNhc2UuaW50ZW5zaXRpZXMsIHN0YWlyY2FzZSwgZGVzY2VuZGluZ1BzeWNobyApICNpbnZlcnNlIGxvZywgMTAwLSAKcmVzcG9uc2VzID0gc3RhaXJjYXNlLmRhdGEKCmV4cGVjdGVkTWluID0gMS4wLzI2CiNmaXQgY3VydmUKZml0ID0gTm9uZQp0cnk6IAogICAgaW50ZW5zaXR5Rm9yQ3VydmVGaXR0aW5nID0gaW50ZW5zaXRpZXMKICAgIGlmIGRlc2NlbmRpbmdQc3ljaG86IAogICAgICAgIGludGVuc2l0eUZvckN1cnZlRml0dGluZyA9IDEwMC1pbnRlbnNpdGllcyAjYmVjYXVzZSBmaXRXZWlidWxsIGFzc3VtZXMgY3VydmUgaXMgYXNjZW5kaW5nCiAgICBmaXQgPSBkYXRhLkZpdFdlaWJ1bGwoaW50ZW5zaXR5Rm9yQ3VydmVGaXR0aW5nLCByZXNwb25zZXMsIGV4cGVjdGVkTWluPWV4cGVjdGVkTWluLCAgc2VtcyA9IDEuMC9sZW4oaW50ZW5zaXR5Rm9yQ3VydmVGaXR0aW5nKSkKZXhjZXB0OgogICAgcHJpbnQoIkZpdCBmYWlsZWQuIikKcGxvdERhdGFBbmRQc3ljaG9tZXRyaWNDdXJ2ZShzdGFpcmNhc2UsZml0LGRlc2NlbmRpbmdQc3ljaG8sdGhyZXNoQ3JpdGVyaW9uKQojc2F2ZSBmaWd1cmUgdG8gZmlsZQpvdXRwdXRGaWxlID0gICd0ZXN0X3N0YWlyY2FzZV9wbG90JyAjIG9zLnBhdGguam9pbihkYXRhRGlyLCAndGVzdF9zdGFpcmNhc2VfcGxvdCcpCnB5bGFiLnNhdmVmaWcob3V0cHV0RmlsZSArICcucGRmJykKcHlsYWIuc2F2ZWZpZyhvdXRwdXRGaWxlICsgJy5qcGcnKQpweWxhYi5zaG93KCkgI211c3QgY2FsbCB0aGlzIHRvIGFjdHVhbGx5IHNob3cgcGxvdAo8fGZpbV9zdWZmaXh8PgogICAgc3RhaXJjYXNlLmltcG9ydERhdGEoIHRvU3RhaXJjYXNlKGluaXRpYWxOb25zdGFpcmNhc2VUcmlhbHNbMDpvdmVyYWxsVHJpYWxOKzFdLGRlc2NlbmRpbmdQc3ljaG8pLCBucC5hcnJheShjb3JyRWFjaFRyaWFsKSkgCjx8ZmltX2VuZHw+"]
["c16e787ec3c68e1213449a116dbd093de499d47b-1","c16e787ec3c68e1213449a116dbd093de499d47b","PHxmaW1fcHJlZml4fD4KIiIiClRoaXMgZXhhbXBsZSBzaG93cyBob3cgdG8gc2FtcGxlLCBpbnRlcnBvbGF0ZSBhbmQgaHVtYW5pemUgYSBkcnVtcyBzZXF1ZW5jZQp1c2luZyBNdXNpY1ZBRSBhbmQgdmFyaW91cyBjb25maWd1cmF0aW9ucy4KIiIiCgppbXBvcnQgb3MKZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKCmltcG9ydCBtYWdlbnRhLm11c2ljIGFzIG1tCmltcG9ydCB0ZW5zb3JmbG93IGFzIHRmCmZyb20gbWFnZW50YS5tb2RlbHMubXVzaWNfdmFlIGltcG9ydCBUcmFpbmVkTW9kZWwsIGNvbmZpZ3MKZnJvbSBtYWdlbnRhLm11c2ljIGltcG9ydCBERUZBVUxUX1NURVBTX1BFUl9CQVIKZnJvbSBtYWdlbnRhLnByb3RvYnVmLm11c2ljX3BiMiBpbXBvcnQgTm90ZVNlcXVlbmNlCmZyb20gc2l4Lm1vdmVzIGltcG9ydCB1cmxsaWIKCmZyb20gbm90ZV9zZXF1ZW5jZV91dGlscyBpbXBvcnQgc2F2ZV9taWRpLCBzYXZlX3Bsb3QKCgpkZWYgZG93bmxvYWRfY2hlY2twb2ludChtb2RlbF9uYW1lOiBzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrcG9pbnRfbmFtZTogc3RyLAogICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfZGlyOiBzdHIpOgogICIiIgogIERvd25sb2FkcyBhIE1hZ2VudGEgY2hlY2twb2ludCB0byB0YXJnZXQgZGlyZWN0b3J5LgoKICBUYXJnZXQgZGlyZWN0b3J5IHRhcmdldF9kaXIgd2lsbCBiZSBjcmVhdGVkIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCgogICAgICA6cGFyYW0gbW9kZWxfbmFtZTogbWFnZW50YSBtb2RlbCBuYW1lIHRvIGRvd25sb2FkCiAgICAgIDpwYXJhbSBjaGVja3BvaW50X25hbWU6IG1hZ2VudGEgY2hlY2twb2ludCBuYW1lIHRvIGRvd25sb2FkCiAgICAgIDpwYXJhbSB0YXJnZXRfZGlyOiBsb2NhbCBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gd3JpdGUgdGhlIGNoZWNrcG9pbnQKICAiIiIKICB0Zi5nZmlsZS5NYWtlRGlycyh0YXJnZXRfZGlyKQogIGNoZWNrcG9pbnRfdGFyZ2V0ID0gb3MucGF0aC5qb2luKHRhcmdldF9kaXIsIGNoZWNrcG9pbnRfbmFtZSkKICBpZiBub3Qgb3MucGF0aC5leGlzdHMoY2hlY2twb2ludF90YXJnZXQpOgogICAgcmVzcG9uc2UgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKAogICAgICBmImh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9tYWdlbnRhZGF0YS9tb2RlbHMvIgogICAgICBmInttb2RlbF9uYW1lfS9jaGVja3BvaW50cy97Y2hlY2twb2ludF9uYW1lfSIpCiAgICBkYXRhID0gcmVzcG9uc2UucmVhZCgpCiAgICBsb2NhbF9maWxlID0gb3BlbihjaGVja3BvaW50X3RhcmdldCwgJ3diJykKICAgIGxvY2FsX2ZpbGUud3JpdGUoZGF0YSkKICAgIGxvY2FsX2ZpbGUuY2xvc2UoKQoKCmRlZiBnZXRfbW9kZWwobmFtZTogc3RyKToKICAiIiIKICBSZXR1cm5zIHRoZSBtb2RlbCBpbnN0YW5jZSBmcm9tIGl0cyBuYW1lLgoKICAgICAgOnBhcmFtIG5hbWU6IHRoZSBtb2RlbCBuYW1lCiAgIiIiCiAgY2hlY2twb2ludCA9IG5hbWUgKyAiLnRhciIKICBkb3dubG9hZF9jaGVja3BvaW50KCJtdXNpY192YWUiLCBjaGVja3BvaW50LCAiY2hlY2twb2ludHMiKQogIHJldHVybiBUcmFpbmVkTW9kZWwoCiAgICAjIFJlbW92ZXMgdGhlIC5sb2hsIGluIHNvbWUgdHJhaW5pbmcgY2hlY2twb2ludCB3aGljaCBzaGFyZXMgdGhlIHNhbWUgY29uZmlnCiAgICBjb25maWdzLkNPTkZJR19NQVBbbmFtZS5zcGxpdCgiLiIpWzBdIGlmICIuIiBpbiBuYW1lIGVsc2UgbmFtZV0sCiAgICAjIFRoZSBiYXRjaCBzaXplIGNoYW5nZXMgdGhlIG51bWJlciBvZiBzZXF1ZW5jZXMgdG8gYmUgcHJvY2Vzc2VkIHRvZ2V0aGVyLAogICAgIyB3ZSdsbCBiZSB3b3JraW5nIHdpdGggbWF4aW11bSA2IHNlcXVlbmNlcyAoZHVyaW5nIGdyb292ZSkKICAgIGJhdGNoX3NpemU9OCwKICAgIGNoZWNrcG9pbnRfZGlyX29yX3BhdGg9b3MucGF0aC5qb2luKCJjaGVja3BvaW50cyIsIGNoZWNrcG9pbnQpKQoKCmRlZiBzYW1wbGUobW9kZWxfbmFtZTogc3RyLAogICAgICAgICAgIG51bV9zdGVwc19wZXJfc2FtcGxlOiBpbnQpIC0+IExpc3RbTm90ZVNlcXVlbmNlXToKICAiIiIKICBTYW1wbGVzIDIgc2VxdWVuY2VzIHVzaW5nIHRoZSBnaXZlbiBtb2RlbC4KICAiIiIKICBtb2RlbCA9IGdldF9tb2RlbChtb2RlbF9uYW1lKQoKICAjIFVzZXMgdGhlIG1vZGVsIHRvIHNhbXBsZSAyIHNlcXVlbmNlcywKICAjIHdpdGggdGhlIG51bWJlciBvZiBzdGVwcyBhbmQgZGVmYXVsdCB0ZW1wZXJhdHVyZQogIHNhbXBsZV9zZXF1ZW5jZXMgPSBtb2RlbC5zYW1wbGUobj0yLCBsZW5ndGg9bnVtX3N0ZXBzX3Blcl9zYW1wbGUpCgogICMgU2F2ZXMgdGhlIG1pZGkgYW5kIHRoZSBwbG90IGluIHRoZSBzYW1wbGUgZm9sZGVyCiAgc2F2ZV9taWRpKHNhbXBsZV9zZXF1ZW5jZXMsICJzYW1wbGUiLCBtb2RlbF9uYW1lKQogIHNhdmVfcGxvdChzYW1wbGVfc2VxdWVuY2VzLCAic2FtcGxlIiwgbW9kZWxfbmFtZSkKCiAgcmV0dXJuIHNhbXBsZV9zZXF1ZW5jZXMKCgpkZWYgaW50ZXJwb2xhdGUobW9kZWxfbmFtZTogc3RyLAogICAgICAgICAgICAgICAgc2FtcGxlX3NlcXVlbmNlczogTGlzdFtOb3RlU2VxdWVuY2VdLAogICAgICAgICAgICAgICAgbnVtX3N0ZXBzX3Blcl9zYW1wbGU6IGludCwKICAgICAgICAgICAgICAgIG51bV9vdXRwdXQ6IGludCwKICAgICAgICAgICAgICAgIHRvdGFsX2JhcnM6IGludCkgLT4gTm90ZVNlcXVlbmNlOgogICIiIgogIEludGVycG9sYXRlcyBiZXR3ZWVuIDIgc2VxdWVuY2VzIHVzaW5nIHRoZSBnaXZlbiBtb2RlbC4KICAiIiIKICBpZiBsZW4oc2FtcGxlX3NlcXVlbmNlcykgIT0gMjoKICAgIHJhaXNlIEV4Y2VwdGlvbihmIldyb25nIG51bWJlciBvZiBzZXF1ZW5jZXMsICIKICAgICAgICAgICAgICAgICAgICBmImV4cGVjdGVkOiAyLCBhY3R1YWw6IHtsZW4oc2FtcGxlX3NlcXVlbmNlcyl9IikKICBpZiBub3Qgc2FtcGxlX3NlcXVlbmNlc1swXS5ub3RlcyBvciBub3Qgc2FtcGxlX3NlcXVlbmNlc1sxXS5ub3RlczoKICAgIHJhaXNlIEV4Y2VwdGlvbihmIkVtcHR5IG5vdGUgc2VxdWVuY2VzLCAiCiAgICAgICAgICAgICAgICAgICAgZiJzZXF1ZW5jZSAxIGxlbmd0aDoge2xlbihzYW1wbGVfc2VxdWVuY2VzWzBdLm5vdGVzKX0sICIKICAgICAgICAgICAgICAgICAgICBmInNlcXVlbmNlIDIgbGVuZ3RoOiB7bGVuKHNhbXBsZV9zZXF1ZW5jZXNbMV0ubm90ZXMpfSIpCgogIG1vZGVsID0gZ2V0X21vZGVsKG1vZGVsX25hbWUpCgogICMgVXNlIHRoZSBtb2RlbCB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHRoZSAyIGlucHV0IHNlcXVlbmNlcywKICAjIHdpdGggdGhlIG51bWJlciBvZiBvdXRwdXQgKGNvdW50aW5nIHRoZSBzdGFydCBhbmQgZW5kIHNlcXVlbmNlKSwKICAjIG51bWJlciBvZiBzdGVwcyBwZXIgc2FtcGxlIGFuZCBkZWZhdWx0IHRlbXBlcmF0dXJlCiAgIwogICMgVGhpcyBtaWdodCB0aHJvdyBhIE5vRXh0cmFjdGVkRXhhbXBsZXNFcnJvciBleGNlcHRpb24gaWYgdGhlCiAgIyBzZXF1ZW5jZXMgYXJlIG5vdCBwcm9wZXJseSBmb3JtZWQgKGZvciBleGFtcGxlIGlmIHRoZSBzZXF1ZW5jZXMKICAjIGFyZSBub3QgcXVhbnRpemVkLCBhIHNlcXVlbmNlIGlzIGVtcHR5IG9yIG5vdCBvZiB0aGUgcHJvcGVyIGxlbmd0aCkuCiAgaW50ZXJwb2xhdGVfc2VxdWVuY2VzID0gbW9kZWwuaW50ZXJwb2xhdGUoCiAgICBzdGFydF9zZXF1ZW5jZT1zYW1wbGVfc2VxdWVuY2VzWzBdLAogICAgZW5kX3NlcXVlbmNlPXNhbXBsZV9zZXF1ZW5jZXNbMV0sCiAgICBudW1fc3RlcHM9bnVtX291dHB1dCwKICAgIGxlbmd0aD1udW1fc3RlcHNfcGVyX3NhbXBsZSkKCiAgIyBTYXZlcyB0aGUgbWlkaSBhbmQgdGhlIHBsb3QgaW4gdGhlIGludGVycG9sYXRlIGZvbGRlcgogIHNhdmVfbWlkaShpbnRlcnBvbGF0ZV9zZXF1ZW5jZXMsICJpbnRlcnBvbGF0ZSIsIG1vZGVsX25hbWUpCiAgc2F2ZV9wbG90KGludGVycG9sYXRlX3NlcXVlbmNlcywgImludGVycG9sYXRlIiwgbW9kZWxfbmFtZSkKCiAgIyBDb25jYXRlbmF0ZXMgdGhlIHJlc3VsdGluZyBzZXF1ZW5jZXMgKG9mIGxlbmd0aCBudW1fb3V0cHV0KSBpbnRvIG9uZQogICMgc2luZ2xlIHNlcXVlbmNlLgogICMgVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgYSBsaXN0IGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBzZWNvbmRzCiAgIyBmb3IgZWFjaCBpbnB1dCBzZXF1ZW5jZS4gVGhpcyBpcyB1c2VmdWwgaWYgc29tZSBvZiB0aGUgaW5wdXQKICAjIHNlcXVlbmNlcyBkbyBub3QgaGF2ZSBub3RlcyBhdCB0aGUgZW5kIChmb3IgZXhhbXBsZSB0aGUgbGFzdAogICMgbm90ZSBlbmRzIGF0IDMuNSBzZWNvbmRzIGluc3RlYWQgb2YgNCkKICBpbnRlcnBvbGF0ZV9zZXF1ZW5jZSA9IG1tLnNlcXVlbmNlc19saWIuY29uY2F0ZW5hdGVfc2VxdWVuY2VzKAogICAgaW50ZXJwb2xhdGVfc2VxdWVuY2VzLCBbNF0gKiBudW1fb3V0cHV0KQoKICAjIFNhdmVzIHRoZSBtaWRpIGFuZCB0aGUgcGxvdCBpbiB0aGUgbWVyZ2UgZm9sZGVyLAogICMgd2l0aCB0aGUgcGxvdCBoYXZpbmcgdG90YWxfYmFycyBzaXplCiAgc2F2ZV9taWRpKGludGVycG9sYXRlX3NlcXVlbmNlLCAibWVyZ2UiLCBtb2RlbF9uYW1lKQogIHNhdmVfcGxvdChpbnRlcnBvbGF0ZV9zZXF1ZW5jZSwgIm1lcmdlIiwgbW9kZWxfbmFtZSwKICAgICAgICAgICAgcGxvdF9tYXhfbGVuZ3RoX2Jhcj10b3RhbF9iYXJzLAogICAgICAgICAgICBiYXJfZmlsbF9hbHBoYXM9WzAuNTAsIDAuNTAsIDAuMDUsIDAuMDVdKQoKICByZXR1cm4gaW50ZXJwb2xhdGVfc2VxdWVuY2UKCgpkZWYgZ3Jvb3ZlKG1vZGVsX25hbWU6IHN0ciwKICAgICAgICAgICBpbnRlcnBvbGF0ZV9zZXF1ZW5jZTogTm90ZVNlcXVlbmNlLAogICAgICAgICAgIG51bV9zdGVwc19wZXJfc2FtcGxlOiBpbnQsCiAgICAgICAgICAgbnVtX291dHB1dDogaW50LAogICAgICAgICAgIHRvdGFsX2JhcnM6IGludCkgLT4gTm90ZVNlcXVlbmNlOgogICIiIgogIEFkZHMgZ3Jvb3ZlIHRvIHRoZSBnaXZlbiBzZXF1ZW5jZSBieSBzcGxpdHRpbmcgaXQgaW4gbWFuYWdlYWJsZSBzZXF1ZW5jZXMKICBhbmQgdXNpbmcgdGhlIGdpdmVuIG1vZGVsIHRvIGh1bWFuaXplIGl0LgogICIiIgogIG1vZGVsID0gZ2V0X21vZGVsKG1vZGVsX25hbWUpCgogICMgU3BsaXQgdGhlIHNlcXVlbmNlcyBpbiBjaHVua3Mgb2YgNCBzZWNvbmRzICh3aGljaCBpcyAyIGJhcnMgYXQgMTIwIHFwbSksCiAgIyB3aGljaCBpcyBuZWNlc3Nhcnkgc2luY2UgdGhlIG1vZGVsIGlzIHRyYWluZWQgZm9yIDIgYmFycwogIHNwbGl0X2ludGVycG9sYXRlX3NlcXVlbmNlcyA9IG1tLnNlcXVlbmNlc19saWIuc3BsaXRfbm90ZV9zZXF1ZW5jZSgKICAgIGludGVycG9sYXRlX3NlcXVlbmNlLCA0KQoKICBpZiBsZW4oc3BsaXRfaW50ZXJwb2xhdGVfc2VxdWVuY2VzKSAhPSBudW1fb3V0cHV0OgogICAgcmFpc2UgRXhjZXB0aW9uKGYiV3JvbmcgbnVtYmVyIG9mIGludGVycG9sYXRlIHNpemUsICIKICAgICAgICAgICAgICAgICAgICBmImV4cGVjdGVkOiAxMCwgYWN0dWFsOiB7bGVuKHNwbGl0X2ludGVycG9sYXRlX3NlcXVlbmNlcyl9IikKCiAgIyBVc2VzIHRoZSBtb2RlbCB0byBlbmNvZGUgdGhlIGxpc3Qgb2Ygc2VxdWVuY2VzLCByZXR1cm5pbmcgdGhlIGVuY29kaW5nCiAgIyAoYWxzbyBjYWxsZWQgeiBvciBsYXRlbnQgdmVjdG9yKSB3aGljaCB3aWxsIHRoZSB1c2VkIGluIHRoZSBkZWNvZGluZywKICAjIFRoZSBvdGhlciB2YWx1ZXMgbXUgYW5kIHNpZ21hIGFyZSBub3QgdXNlZCwgYnV0IGtlcHQgaW4gdGhlIGNvZGUgZm9yCiAgIyBjbGFyaXR5LgogICMKICAjIFRoZSByZXN1bHRpbmcgYXJyYXkgc2hhcGUgaXMgKGEsIGIpLCB3aGVyZSBhIGlzIHRoZSBudW1iZXIgb2YKICAjIHNwbGl0IHNlcXVlbmNlcyAoc2hvdWxkIGNvcnJlc3BvbmQgdG8gbnVtX291dHB1dCksIGFuZCBiIGlzIHRoZSBlbmNvZGluZwogICMgc2l6ZS4KICAjCiAgIyBUaGlzIG1pZ2h0IHRocm93IGEgTm9FeHRyYWN0ZWRFeGFtcGxlc0Vycm9yIGV4Y2VwdGlvbiBpZiB0aGUKICAjIHNlcXVlbmNlcyBhcmUgbm90IHByb3Blcmx5IGZvcm1lZCAoZm9yIGV4YW1wbGUgaWYgdGhlIHNlcXVlbmNlcwogICMgYXJlIG5vdCBxdWFudGl6ZWQsIGEgc2VxdWVuY2UgaXMgZW1wdHkgb3Igbm90IG9mIHRoZSBwcm9wZXIgbGVuZ3RoKS4KICBlbmNvZGluZywgbXUsIHNpZ21hID0gbW9kZWwuZW5jb2RlKAogICAgbm90ZV9zZXF1ZW5jZXM9c3BsaXRfaW50ZXJwb2xhdGVfc2VxdWVuY2VzKQoKICAjIFVzZXMgdGhlIG1vZGVsIHRvIGRlY29kZSB0aGUgZW5jb2RpbmcgKGFsc28gY2FsbGVkIHogb3IgbGF0ZW50IHZlY3RvciksCiAgIyByZXR1cm5pbmcgYSBsaXN0IG9mIGh1bWFuaXplZCBzZXF1ZW5jZSB3aXRoIG9uZSBlbGVtZW50IHBlciBlbmNvZGVkCiAgIyBzZXF1ZW5jZXMgKGVhY2ggb2YgbGVuZ3RoIG51bV9zdGVwc19wZXJfc2FtcGxlKS4KICBncm9vdmVfc2VxdWVuY2VzID0gbW9kZWwuZGVjb2RlKAogICAgej1lbmNvZGluZywgbGVuZ3RoPW51bV9zdGVwc19wZXJfc2FtcGxlKQoKICAjIENvbmNhdGVuYXRlcyB0aGUgcmVzdWx0aW5nIHNlcXVlbmNlcyAob2YgbGVuZ3RoIG51bV9vdXRwdXQpIGludG8gb25lCiAgIyBzaW5nbGUgc2VxdWVuY2UuCiAgZ3Jvb3ZlX3NlcXVlbmNlID0gbW0uc2VxdWVuY2VzX2xpYi5jb25jYXRlbmF0ZV9zZXF1ZW5jZXMoCiAgICBncm9vdmVfc2VxdWVuY2VzLCBbNF0gKiBudW1fb3V0cHV0KQoKICAjIFNhdmVzIHRoZSBtaWRpIGFuZCB0aGUgcGxvdCBpbiB0aGUgZ3Jvb3ZlIGZvbGRlciwKICAjIHdpdGggdGhlIHBsb3QgaGF2aW5nIHRvdGFsX2JhcnMgc2l6ZQogIHNhdmVfbWlkaShncm9vdmVfc2VxdWVuY2UsICJncm9vdmUiLCBtb2RlbF9uYW1lKQogIHNhdmVfcGxvdChncm9vdmVfc2VxdWVuY2UsICJncm9vdmUiLCBtb2RlbF9uYW1lLAogICAgICAgICAgICBwbG90X21heF9sZW5ndGhfYmFyPXRvdGFsX2JhcnMsIHNob3dfdmVsb2NpdHk9VHJ1ZSwKICAgICAgICAgICAgYmFyX2ZpbGxfYWxwaGFzPVswLjUwLCAwLjUwLCAwLjA1LCAwLjA1XSkKCiAgcmV0dXJuIGdyb292ZV9zZXF1ZW5jZQoKCmRlZiBhcHAodW51c2VkX2FyZ3YpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgIyBOdW1iZXIgb2YgaW50ZXJwb2xhdGVkIHNlcXVlbmNlcyAoY291bnRpbmcgdGhlIHN0YXJ0IGFuZCBlbmQgc2VxdWVuY2VzKQogIG51bV9vdXRwdXQgPSA2CgogICMgTnVtYmVyIG9mIGJhciBwZXIgc2FtcGxlLCBhbHNvIGdpdmluZyB0aGUgc2l6ZSBvZiB0aGUgaW50ZXJwb2xhdGlvbiBzcGxpdHMKPHxmaW1fZW5kfD4="]
["41644211fec50225074eae32609b3c4b52806887-1","41644211fec50225074eae32609b3c4b52806887","PHxmaW1fcHJlZml4fD4KIyBDb2RlIGdlbmVyYXRlZCBieSBsYXJrX3Nka19nZW4uIERPIE5PVCBFRElULgoKZnJvbSBweWxhcmsubGFya19yZXF1ZXN0IGltcG9ydCBSYXdSZXF1ZXN0UmVxLCBfbmV3X21ldGhvZF9vcHRpb24KZnJvbSBweWxhcmsgaW1wb3J0IGxhcmtfdHlwZSwgbGFya190eXBlX3NoZWV0LCBsYXJrX3R5cGVfYXBwcm92YWwKaW1wb3J0IGF0dHIKaW1wb3J0IHR5cGluZwppbXBvcnQgaW8KCgpAYXR0ci5zCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgT3BlbkNhbGVuZGVyVmlld1JlcShvYmplY3QpOgogICAgdHlwZTogc3RyID0gYXR0ci5pYigKICAgICAgICBkZWZhdWx0PSIiLCBtZXRhZGF0YT17InJlcV90eXBlIjogImpzb24iLCAia2V5IjogInR5cGUifQogICAgKSAgIyDop4blm77nsbvlnovvvIzmnprkuL7lgLzljIXmi6zvvJo8YnI+IGBkYXlg77ya5pel6KeG5Zu+IDxicj5gdGhyZWVfZGF5YO+8muS4ieaXpeinhuWbvu+8jOS7heenu+WKqOerr+aUr+aMgTxicj4gYHdlZWtg77ya5ZGo6KeG5Zu+77yM5LuFUEPnq6/mlK/mjIEgPGJyPiAgYG1vbnRoYO+8muaciOinhuWbvjxicj4gYG1lZXRpbmdg77ya5Lya6K6u5a6k6KeG5Zu+77yM5LuFUEPnq6/mlK/mjIEgPGJyPiBgbGlzdGDvvJrliJfooajop4blm77vvIzku4Xnp7vliqjnq6/mlK/mjIEKPHxmaW1fZW5kfD4="]
["c12b445a68942273079315aeba6b417e31977cde-1","c12b445a68942273079315aeba6b417e31977cde","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRpc2NvcmQKCmltcG9ydCBjb3JlLnByZWZpeCBhcyBwcmVmaXgKCmZyb20gZGlzY29yZC5leHQgaW1wb3J0IGNvbW1hbmRzCmZyb20gdHJhY2ViYWNrIGltcG9ydCBmb3JtYXRfdGIKCmZyb20gZXh0LmV4Y2VwdGlvbnMgaW1wb3J0IEFjY2Vzc0RlbmllZCwgTG9va3VwRmFpbGVkLCBNaXNzaW5nU3ViY29tbWFuZCwgTm90Q29uZmlndXJlZCwgTm90RW5hYmxlZApmcm9tIGV4dC51dGlscyBpbXBvcnQgdGltZV9zaW5jZQoKCmNsYXNzIFBsdWdpbihjb21tYW5kcy5Db2cpOgoJZGVmIF9faW5pdF9fKHNlbGYsIGJvdCk6CgkJc2VsZi5ib3QgPSBib3QKCQlzZWxmLl9oYW5kbGVycyA9IFtzZWxmLmJhc2ljX2hhbmRsZXJdCgoJYXN5bmMgZGVmIG1ha2VfZW1iZWQoc2VsZiwgY3R4KToKCQlkZXRhaWxzID0gZiJgYGB7cHJlZml4LmRlZmF1bHR9e2N0eC5jb21tYW5kLnVzYWdlfWBgYFxuIgoKCQlpZiBjdHguY29tbWFuZC5hbGlhc2VzOgoJCQlkZXRhaWxzICs9IGYiKipDYW4gYWxzbyB1c2U6KiogeycsICcuam9pbihmJ2B7YWxpYXN9YCcgaWYgbm90IGN0eC5jb21tYW5kLmZ1bGxfcGFyZW50X25hbWUgZWxzZSBmJ2B7Y3R4LmNvbW1hbmQuZnVsbF9wYXJlbnRfbmFtZX0ge2FsaWFzfWAnIGZvciBhbGlhcyBpbiBjdHguY29tbWFuZC5hbGlhc2VzKX1cbiIKCgkJaWYgbm90IGF3YWl0IGN0eC5jb21tYW5kLmNhbl9ydW4oY3R4KToKCQkJZGV0YWlscyArPSAiKioqWW91IGNhbm5vdCBydW4gdGhpcyBjb21tYW5kLioqKlxuIgoKCQlkZXRhaWxzICs9IGYiKntjdHguY29tbWFuZC5zaG9ydF9kb2Mgb3IgJ05vIGRlc2NyaXB0aW9uIGF2YWlsYWJsZS4nfSpcbiIKCgkJaWYgaXNpbnN0YW5jZShjdHguY29tbWFuZCwgY29tbWFuZHMuR3JvdXApOgoJCQlpZiBsZW4oY3R4LmNvbW1hbmQuY29tbWFuZHMpID4gMDoKCQkJCWRldGFpbHMgKz0gIlxuKipTdWJjb21tYW5kczoqKlxuXG4iICsgIlxuIi5qb2luKGYiKipge2NvbW1hbmQudXNhZ2V9YCoqXG4qe2NvbW1hbmQuc2hvcnRfZG9jIG9yICdObyBkZXNjcmlwdGlvbiBhdmFpbGFibGUuJ30qIiBmb3IgY29tbWFuZCBpbiBjdHguY29tbWFuZC5jb21tYW5kcykKCgkJZW1iZWQgPSBkaXNjb3JkLkVtYmVkKAoJCQlkZXNjcmlwdGlvbj1kZXRhaWxzCgkJKQoJCWVtYmVkLnNldF9hdXRob3IoCgkJCW5hbWU9IkNvbW1hbmQgSGVscCIKCQkpCgoJCXJldHVybiBlbWJlZAoKCWFzeW5jIGRlZiBiYXNpY19oYW5kbGVyKHNlbGYsIGN0eCwgZXJyb3IsIHJlcyk6CgkJSUdOT1JFRCA9ICgKCQkJY29tbWFuZHMuQ29tbWFuZE5vdEZvdW5kLAoJCQljb21tYW5kcy5Ob1ByaXZhdGVNZXNzYWdlLAoJCQljb21tYW5kcy5EaXNhYmxlZENvbW1hbmQKCQkpCgoJCWlmIGlzaW5zdGFuY2UoZXJyb3IsIElHTk9SRUQpOgoJCQlyZXR1cm4gVHJ1ZQoJCQoJCWlmIGlzaW5zdGFuY2UoZXJyb3IsIGNvbW1hbmRzLk1pc3NpbmdSZXF1aXJlZEFyZ3VtZW50KToKCQkJYXdhaXQgcmVzKGYiWW91J3JlIG1pc3NpbmcgYSByZXF1aXJlZCBhcmd1bWVudDogYHtlcnJvci5wYXJhbX1gIiwgVHJ1ZSkKCQkJcmV0dXJuIFRydWUKCgkJaWYgaXNpbnN0YW5jZShlcnJvciwgKGNvbW1hbmRzLkJhZEFyZ3VtZW50LCBjb21tYW5kcy5CYWRVbmlvbkFyZ3VtZW50KSk6CgkJCWF3YWl0IHJlcyhmIllvdSBwcm92aWRlZCBhbiBpbmNvcnJlY3QgYXJndW1lbnQ6IGB7bGlzdChjdHguY29tbWFuZC5jbGVhbl9wYXJhbXMpW2xlbihjdHguYXJnc1syOl0gaWYgY3R4LmNvbW1hbmQuY29nIGVsc2UgY3R4LmFyZ3NbMTpdKV19YCIsIFRydWUpCgkJCXJldHVybiBUcnVlCgoJCWlmIGlzaW5zdGFuY2UoZXJyb3IsIGNvbW1hbmRzLkNvbW1hbmRPbkNvb2xkb3duKToKCQkJYXdhaXQgcmVzKGYiVGhpcyBjb21tYW5kIGlzIG9uIGNvb2xkb3duLCB0cnkgYWdhaW4gYWZ0ZXIgKip7dGltZV9zaW5jZShzZWNvbmRzPWVycm9yLnJldHJ5X2FmdGVyKX0qKi4iKQoJCQlyZXR1cm4gVHJ1ZQoKCQlpZiBpc2luc3RhbmNlKGVycm9yLCBjb21tYW5kcy5Cb3RNaXNzaW5nUGVybWlzc2lvbnMpOgoJCQlhd2FpdCByZXMoZiJJJ20gbWlzc2luZyBzb21lIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIHBlcmZvcm0gdGhpcyBhY3Rpb246IGB7JywgJy5qb2luKGVycm9yLm1pc3NpbmdfcGVybXMpfWAuIikKCQkJcmV0dXJuIFRydWUKCgkJaWYgaXNpbnN0YW5jZShlcnJvciwgKGNvbW1hbmRzLkNoZWNrRmFpbHVyZSwgY29tbWFuZHMuQ2hlY2tBbnlGYWlsdXJlKSk6CgkJCWF3YWl0IHJlcygiWW91J3JlIG5vdCBhbGxvd2VkIHRvIHVzZSB0aGF0IGNvbW1hbmQuIikKCQkJcmV0dXJuIFRydWUKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCQlpZiBpc2luc3RhbmNlKGVycm9yLCBjb21tYW5kcy5Db21tYW5kSW52b2tlRXJyb3IpOgoJCQlpZiBpc2luc3RhbmNlKGVycm9yLm9yaWdpbmFsLCBNaXNzaW5nU3ViY29tbWFuZCk6CgkJCQlhd2FpdCByZXMoIllvdSdyZSBtaXNzaW5nIGEgc3ViY29tbWFuZC4iLCBUcnVlKQoJCQkJcmV0dXJuIFRydWUKPHxmaW1fZW5kfD4="]
["41896b6bb710be73421a75ac94b0410b6698d97c-1","41896b6bb710be73421a75ac94b0410b6698d97c","PHxmaW1fcHJlZml4fD4KZnJvbSByZXN0X2ZyYW1ld29yay5nZW5lcmljcyBpbXBvcnQgR2VuZXJpY0FQSVZpZXcsIExpc3RBUElWaWV3CmZyb20gcmVzdF9mcmFtZXdvcmsucGVybWlzc2lvbnMgaW1wb3J0IElzQWRtaW5Vc2VyCmZyb20gcmVzdF9mcmFtZXdvcmsucmVzcG9uc2UgaW1wb3J0IFJlc3BvbnNlCmZyb20gcmVzdF9mcmFtZXdvcmsudmlld3MgaW1wb3J0IEFQSVZpZXcKZnJvbSByZXN0X2ZyYW1ld29yay52aWV3c2V0cyBpbXBvcnQgTW9kZWxWaWV3U2V0Cgpmcm9tIGdvb2RzLm1vZGVscyBpbXBvcnQgR29vZHNDaGFubmVsLCBHb29kc0NoYW5uZWxHcm91cCwgR29vZHNDYXRlZ29yeQpmcm9tIG1laWR1b19hZG1pbi5zZXJpYWxpemVycy5jaGFubmVscyBpbXBvcnQgQ2hhbm5lbFNlcmlhbGl6ZXIsIENoYW5uZWxUeXBlU2VyaWFsaXplciwgQ2hhbm5lbENhdGVnb3J5U2VyaWFsaXplcgpmcm9tIG1laWR1b19hZG1pbi51dGlscy5wYWdpbmF0aW9uIGltcG9ydCBTdGFuZGFyZFJlc3VsdFBhZ2luYXRpb24KCgojIEdFVCAvbWVpZHVvX2FkbWluL2dvb2RzL2NoYW5uZWxzLz9wYWdlPTzpobXnoIE+JnBhZ2Vfc2l6ZT086aG15a656YePPgoKCmNsYXNzIENoYW5uZWxWaWV3U2V0KE1vZGVsVmlld1NldCk6CiAgICAiIiLpopHpgZPnrqHnkIbop4blm77pm4YiIiIKICAgIHBlcm1pc3Npb25fY2xhc3NlcyA9IFtJc0FkbWluVXNlcl0KICAgICMg5oyH5a6a5b2T5YmN6KeG5Zu+5omA5L2/55So55qE5YiG6aG157G7KOWxgOmDqCkKICAgIHBhZ2luYXRpb25fY2xhc3MgPSBTdGFuZGFyZFJlc3VsdFBhZ2luYXRpb24KICAgICMg5oyH5a6a6KeG5Zu+5omA5L2/55So55qE5p+l6K+i6ZuGCiAgICBxdWVyeXNldCA9IEdvb2RzQ2hhbm5lbC5vYmplY3RzLmFsbCgpCgogICAgIyDmjIflrprluo/liJfljJblmajnsbsKICAgIHNlcmlhbGl6ZXJfY2xhc3MgPSBDaGFubmVsU2VyaWFsaXplcgoKCiMgR0VUIC9tZWlkdW9fYWRtaW4vZ29vZHMvY2hhbm5lbF90eXBlcy8KY2xhc3MgQ2hhbm5lbFR5cGVzVmlldyhMaXN0QVBJVmlldyk6CiAgICAiIiIKICAgIOiOt+WPluaJgOaciemikemBk+e7hOaVsOaNrgogICAgIiIiCiAgICBwZXJtaXNzaW9uX2NsYXNzZXMgPSBbSXNBZG1pblVzZXJdCiAgICAjIOaMh+WumuinhuWbvuaJgOS9v+eUqOeahOafpeivoumbhgogICAgcXVlcnlzZXQgPSBHb29kc0NoYW5uZWxHcm91cC5vYmplY3RzLmFsbCgpCiAgICAjIOaMh+WumuinhuWbvuaJgOS9v+eUqOeahOW6j+WIl+WMluWZqOexuwogICAgc2VyaWFsaXplcl9jbGFzcyA9IENoYW5uZWxUeXBlU2VyaWFsaXplcgoKICAgICMgZGVmIGdldChzZWxmLHJlcXVlc3QpOgogICAgIyAgIHJldHVybiBzZWxmLmxpc3QocmVxdWVzdCkKICAgICMgZGVmIGdldChzZWxmLCByZXF1ZXN0KToKICAgICMgICAgICMgMS7mn6Xor6Lojrflj5bmiYDmnInnmoTpopHpgZPmlbDmja4KICAgICMgICAgIGdyb3VwID0gc2VsZi5nZXRfcXVlcnlzZXQoKQogICAgIwogICAgIyAgICAgIyAyLuWwhumikemBk+e7hOeahOaVsOaNruW6j+WIl+WMluW5tui/lOWbngogICAgIyAgICAgc2VyaWFsaXplciA9IHNlbGYuZ2V0X3NlcmlhbGl6ZXIoZ3JvdXAsIG1hbnk9VHJ1ZSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgIyAgICAgcmV0dXJuIFJlc3BvbnNlKHNlcmlhbGl6ZXIuZGF0YSkKCgo8fGZpbV9lbmR8Pg=="]
["41896b6bb710be73421a75ac94b0410b6698d97c-2","41896b6bb710be73421a75ac94b0410b6698d97c","PHxmaW1fcHJlZml4fD4KZnJvbSByZXN0X2ZyYW1ld29yay5nZW5lcmljcyBpbXBvcnQgR2VuZXJpY0FQSVZpZXcsIExpc3RBUElWaWV3CmZyb20gcmVzdF9mcmFtZXdvcmsucGVybWlzc2lvbnMgaW1wb3J0IElzQWRtaW5Vc2VyCmZyb20gcmVzdF9mcmFtZXdvcmsucmVzcG9uc2UgaW1wb3J0IFJlc3BvbnNlCmZyb20gcmVzdF9mcmFtZXdvcmsudmlld3MgaW1wb3J0IEFQSVZpZXcKZnJvbSByZXN0X2ZyYW1ld29yay52aWV3c2V0cyBpbXBvcnQgTW9kZWxWaWV3U2V0Cgpmcm9tIGdvb2RzLm1vZGVscyBpbXBvcnQgR29vZHNDaGFubmVsLCBHb29kc0NoYW5uZWxHcm91cCwgR29vZHNDYXRlZ29yeQpmcm9tIG1laWR1b19hZG1pbi5zZXJpYWxpemVycy5jaGFubmVscyBpbXBvcnQgQ2hhbm5lbFNlcmlhbGl6ZXIsIENoYW5uZWxUeXBlU2VyaWFsaXplciwgQ2hhbm5lbENhdGVnb3J5U2VyaWFsaXplcgpmcm9tIG1laWR1b19hZG1pbi51dGlscy5wYWdpbmF0aW9uIGltcG9ydCBTdGFuZGFyZFJlc3VsdFBhZ2luYXRpb24KPHxmaW1faG9sZXw+CgpjbGFzcyBDaGFubmVsVmlld1NldChNb2RlbFZpZXdTZXQpOgogICAgIiIi6aKR6YGT566h55CG6KeG5Zu+6ZuGIiIiCiAgICBwZXJtaXNzaW9uX2NsYXNzZXMgPSBbSXNBZG1pblVzZXJdCiAgICAjIOaMh+WumuW9k+WJjeinhuWbvuaJgOS9v+eUqOeahOWIhumhteexuyjlsYDpg6gpCiAgICBwYWdpbmF0aW9uX2NsYXNzID0gU3RhbmRhcmRSZXN1bHRQYWdpbmF0aW9uCiAgICAjIOaMh+WumuinhuWbvuaJgOS9v+eUqOeahOafpeivoumbhgogICAgcXVlcnlzZXQgPSBHb29kc0NoYW5uZWwub2JqZWN0cy5hbGwoKQoKICAgICMg5oyH5a6a5bqP5YiX5YyW5Zmo57G7CiAgICBzZXJpYWxpemVyX2NsYXNzID0gQ2hhbm5lbFNlcmlhbGl6ZXIKCgojIEdFVCAvbWVpZHVvX2FkbWluL2dvb2RzL2NoYW5uZWxfdHlwZXMvCmNsYXNzIENoYW5uZWxUeXBlc1ZpZXcoTGlzdEFQSVZpZXcpOgogICAgIiIiCiAgICDojrflj5bmiYDmnInpopHpgZPnu4TmlbDmja4KICAgICIiIgogICAgcGVybWlzc2lvbl9jbGFzc2VzID0gW0lzQWRtaW5Vc2VyXQogICAgIyDmjIflrprop4blm77miYDkvb/nlKjnmoTmn6Xor6Lpm4YKICAgIHF1ZXJ5c2V0ID0gR29vZHNDaGFubmVsR3JvdXAub2JqZWN0cy5hbGwoKQogICAgIyDmjIflrprop4blm77miYDkvb/nlKjnmoTluo/liJfljJblmajnsbsKICAgIHNlcmlhbGl6ZXJfY2xhc3MgPSBDaGFubmVsVHlwZVNlcmlhbGl6ZXIKCiAgICAjIGRlZiBnZXQoc2VsZixyZXF1ZXN0KToKICAgICMgICByZXR1cm4gc2VsZi5saXN0KHJlcXVlc3QpCiAgICAjIGRlZiBnZXQoc2VsZiwgcmVxdWVzdCk6CiAgICAjICAgICAjIDEu5p+l6K+i6I635Y+W5omA5pyJ55qE6aKR6YGT5pWw5o2uCiAgICAjICAgICBncm91cCA9IHNlbGYuZ2V0X3F1ZXJ5c2V0KCkKICAgICMKICAgICMgICAgICMgMi7lsIbpopHpgZPnu4TnmoTmlbDmja7luo/liJfljJblubbov5Tlm54KICAgICMgICAgIHNlcmlhbGl6ZXIgPSBzZWxmLmdldF9zZXJpYWxpemVyKGdyb3VwLCBtYW55PVRydWUpCiAgICAjICAgICByZXR1cm4gUmVzcG9uc2Uoc2VyaWFsaXplci5kYXRhKQoKCiMgR0VUIC9tZWlkdW9fYWRtaW4vZ29vZHMvY2F0ZWdvcmllcy8KY2xhc3MgQ2hhbm5lbENhdGVnb3JpZXNWaWV3KExpc3RBUElWaWV3KToKICAgICIiIuiOt+WPluS4gOe6p+WIhuexu+aVsOaNriIiIgogICAgcGVybWlzc2lvbl9jbGFzc2VzID0gW0lzQWRtaW5Vc2VyXQoKICAgIHF1ZXJ5c2V0ID0gR29vZHNDYXRlZ29yeS5vYmplY3RzLmZpbHRlcihwYXJlbnQ9Tm9uZSkKICAgIHNlcmlhbGl6ZXJfY2xhc3MgPSBDaGFubmVsQ2F0ZWdvcnlTZXJpYWxpemVyCgoKCjx8ZmltX3N1ZmZpeHw+CgoKIyBHRVQgL21laWR1b19hZG1pbi9nb29kcy9jaGFubmVscy8/cGFnZT086aG156CBPiZwYWdlX3NpemU9POmhteWuuemHjz4KCjx8ZmltX2VuZHw+"]
["c1e052547b5a90f60c7cd6a84d140c1af9a09a6f-1","c1e052547b5a90f60c7cd6a84d140c1af9a09a6f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRraW50ZXIKaW1wb3J0IG9wcm9zCmltcG9ydCBzdXBlcl9wdXBlcl9wcm9nYQppbXBvcnQgdGhyZWFkaW5nCgoKPHxmaW1faG9sZXw+CiAgICBzdGFydGluZ193aW5kb3cuZGVzdHJveSgpCiAgICBzdXBlcl9wdXBlcl9wcm9nYQoKc3RhcnRpbmdfd2luZG93ID0gdGtpbnRlci5UaygpCnN0YXJ0aW5nX3dpbmRvdy50aXRsZSgn0KHRgtCw0YDRgicpCgpjaG9pc2Vfc3RhcnQgPSB0a2ludGVyLkludFZhcigpCgp0ZXh0X2xhYmVsID0gdGtpbnRlci5MYWJlbChzdGFydGluZ193aW5kb3csIHRleHQ9J9CS0YvQsdC10YDQuNGC0LUg0L/QsNGA0LDQvNC10YLRgFxu0LfQsNC/0YPRgdC60LAg0L/RgNC+0LPRgNCw0LzQvNGLJywgZm9udD0nQXJpYWwgMTInLCBhbmNob3I9J2NlbnRlcicpCnJhZGlvYnV0dG9uX29sZF9maW5kID0gdGtpbnRlci5SYWRpb2J1dHRvbihzdGFydGluZ193aW5kb3csIHRleHQ9J9C/0L7QuNGB0Log0LzQvtC00YPQu9C10Lkg0L/Qvlxu0LrQvtC80LDQvdC00LDQvCA1MSwgNDksIDQ3JywgdmFsdWU9MSwgdmFyaWFibGU9Y2hvaXNlX3N0YXJ0KQpyYWRpb2J1dHRvbl9JRF9maW5kID0gdGtpbnRlci5SYWRpb2J1dHRvbihzdGFydGluZ193aW5kb3csIHRleHQ9J9C/0L7QuNGB0Log0LzQvtC00YPQu9C10Lkg0L/QviBJRCcsIHZhbHVlPTIsIHZhcmlhYmxlPWNob2lzZV9zdGFydCkKcmFkaW9idXR0b25fb2xkX2NvbmZpZ3VyZSA9IHRraW50ZXIuUmFkaW9idXR0b24oc3RhcnRpbmdfd2luZG93LCB0ZXh0PSfQt9Cw0LPRgNGD0LfQuNGC0Ywg0L/QvtGB0LvQtdC00L3RjtGOXG7QutC+0L3RhNC40LPRg9GA0LDRhtC40Y4nLCB2YWx1ZT0zLCB2YXJpYWJsZT1jaG9pc2Vfc3RhcnQpCnN0YXJ0X2J1dHRvbiA9IHRraW50ZXIuQnV0dG9uKHN0YXJ0aW5nX3dpbmRvdywgdGV4dD0n0KHRgtCw0YDRgicsIGNvbW1hbmQ9Y29uZmlndXJlX3Byb2dyYW0pCgp0ZXh0X2xhYmVsLnBsYWNlKHg9MjAsIHk9MTApCnJhZGlvYnV0dG9uX29sZF9maW5kLnBsYWNlKHg9MTAsIHk9NjApCnJhZGlvYnV0dG9uX0lEX2ZpbmQucGxhY2UoeD0xMCwgeT0xMDApCnJhZGlvYnV0dG9uX29sZF9jb25maWd1cmUucGxhY2UoeD0xMCwgeT0xMzApCnN0YXJ0X2J1dHRvbi5wbGFjZSh4PTgwLCB5PTE4MCkKCgpzdGFydGluZ193aW5kb3cuZ2VvbWV0cnkoJzIwMHgyMjArMzAwKzMwMCcpCnN0YXJ0aW5nX3dpbmRvdy5tYWlubG9vcCgpCjx8ZmltX3N1ZmZpeHw+CmRlZiBjb25maWd1cmVfcHJvZ3JhbSgpOgogICAgb3Byb3MuY2hvaXNlX3N0YXJ0ID0gY2hvaXNlX3N0YXJ0LmdldCgpCiAgICBvcHJvcy5maW5kX3BvcnQoKQogICAgdGhyZWFkaW5nLlRocmVhZChvcHJvcy5maW5kX21vZHVsZSgpKS5zdGFydCgpCjx8ZmltX2VuZHw+"]
["c1e052547b5a90f60c7cd6a84d140c1af9a09a6f-2","c1e052547b5a90f60c7cd6a84d140c1af9a09a6f","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKCmRlZiBjb25maWd1cmVfcHJvZ3JhbSgpOgogICAgb3Byb3MuY2hvaXNlX3N0YXJ0ID0gY2hvaXNlX3N0YXJ0LmdldCgpCiAgICBvcHJvcy5maW5kX3BvcnQoKQogICAgdGhyZWFkaW5nLlRocmVhZChvcHJvcy5maW5kX21vZHVsZSgpKS5zdGFydCgpCiAgICBzdGFydGluZ193aW5kb3cuZGVzdHJveSgpCiAgICBzdXBlcl9wdXBlcl9wcm9nYQoKc3RhcnRpbmdfd2luZG93ID0gdGtpbnRlci5UaygpCnN0YXJ0aW5nX3dpbmRvdy50aXRsZSgn0KHRgtCw0YDRgicpCgpjaG9pc2Vfc3RhcnQgPSB0a2ludGVyLkludFZhcigpCgp0ZXh0X2xhYmVsID0gdGtpbnRlci5MYWJlbChzdGFydGluZ193aW5kb3csIHRleHQ9J9CS0YvQsdC10YDQuNGC0LUg0L/QsNGA0LDQvNC10YLRgFxu0LfQsNC/0YPRgdC60LAg0L/RgNC+0LPRgNCw0LzQvNGLJywgZm9udD0nQXJpYWwgMTInLCBhbmNob3I9J2NlbnRlcicpCnJhZGlvYnV0dG9uX29sZF9maW5kID0gdGtpbnRlci5SYWRpb2J1dHRvbihzdGFydGluZ193aW5kb3csIHRleHQ9J9C/0L7QuNGB0Log0LzQvtC00YPQu9C10Lkg0L/Qvlxu0LrQvtC80LDQvdC00LDQvCA1MSwgNDksIDQ3JywgdmFsdWU9MSwgdmFyaWFibGU9Y2hvaXNlX3N0YXJ0KQpyYWRpb2J1dHRvbl9JRF9maW5kID0gdGtpbnRlci5SYWRpb2J1dHRvbihzdGFydGluZ193aW5kb3csIHRleHQ9J9C/0L7QuNGB0Log0LzQvtC00YPQu9C10Lkg0L/QviBJRCcsIHZhbHVlPTIsIHZhcmlhYmxlPWNob2lzZV9zdGFydCkKcmFkaW9idXR0b25fb2xkX2NvbmZpZ3VyZSA9IHRraW50ZXIuUmFkaW9idXR0b24oc3RhcnRpbmdfd2luZG93LCB0ZXh0PSfQt9Cw0LPRgNGD0LfQuNGC0Ywg0L/QvtGB0LvQtdC00L3RjtGOXG7QutC+0L3RhNC40LPRg9GA0LDRhtC40Y4nLCB2YWx1ZT0zLCB2YXJpYWJsZT1jaG9pc2Vfc3RhcnQpCnN0YXJ0X2J1dHRvbiA9IHRraW50ZXIuQnV0dG9uKHN0YXJ0aW5nX3dpbmRvdywgdGV4dD0n0KHRgtCw0YDRgicsIGNvbW1hbmQ9Y29uZmlndXJlX3Byb2dyYW0pCgp0ZXh0X2xhYmVsLnBsYWNlKHg9MjAsIHk9MTApCnJhZGlvYnV0dG9uX29sZF9maW5kLnBsYWNlKHg9MTAsIHk9NjApCnJhZGlvYnV0dG9uX0lEX2ZpbmQucGxhY2UoeD0xMCwgeT0xMDApCnJhZGlvYnV0dG9uX29sZF9jb25maWd1cmUucGxhY2UoeD0xMCwgeT0xMzApCnN0YXJ0X2J1dHRvbi5wbGFjZSh4PTgwLCB5PTE4MCkKCgpzdGFydGluZ193aW5kb3cuZ2VvbWV0cnkoJzIwMHgyMjArMzAwKzMwMCcpCnN0YXJ0aW5nX3dpbmRvdy5tYWlubG9vcCgpCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCB0a2ludGVyCmltcG9ydCBvcHJvcwppbXBvcnQgc3VwZXJfcHVwZXJfcHJvZ2EKaW1wb3J0IHRocmVhZGluZwo8fGZpbV9lbmR8Pg=="]
["04a2b34501e309f8062baa8450663e6e9a818514-1","04a2b34501e309f8062baa8450663e6e9a818514","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGN2MgppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBpbXV0aWxzIGltcG9ydCBjb250b3VycwoKZGVmIGV1Y2xpZGVhbl9kaXN0YW5jZShhLCBiKToKCWRpc3QgPSAwCglpZiBsZW4oYSkgPT0gbGVuKGIpOgoJCWZvciBpIGluIHJhbmdlKGxlbihhKSk6CgkJCWRpc3QgKz0gKGFbaV0tYltpXSkqKjIKCQlkaXN0ID0gbnAuc3FydChkaXN0KQoJcmV0dXJuIGludChkaXN0KQoKZGVmIGhpZ2hlc3RfZXVjbGlkZWFuX2Rpc3RhbmNlKHNoYXBlLCBmaXhlZF9wb2ludCwgKm90aGVyX3BvaW50cyk6CgludW0gPSBsZW4ob3RoZXJfcG9pbnRzKQoJbGFyZ2VzdF9kaXN0YW5jZSA9IDAKCWZvciBwb2ludCBpbiBvdGhlcl9wb2ludHM6CgkJZGlzdCA9IGV1Y2xpZGVhbl9kaXN0YW5jZShmaXhlZF9wb2ludCwgc2hhcGVbcG9pbnRdKQoJCWlmIGRpc3QgPiBsYXJnZXN0X2Rpc3RhbmNlOgoJCQlsYXJnZXN0X2Rpc3RhbmNlID0gZGlzdAoJcmV0dXJuIGxhcmdlc3RfZGlzdGFuY2UKCmRlZiBjZW50cm9pZChzaGFwZSwgKnBvaW50cyk6CgludW1fb2ZfcG9pbnRzID0gbGVuKHBvaW50cykKCXgsIHkgPSAwLCAwCglmb3IgcG9pbnQgaW4gcG9pbnRzOgoJCXggKz0gc2hhcGVbcG9pbnRdWzBdCgkJeSArPSBzaGFwZVtwb2ludF1bMV0KCWNlbnRyb2lkID0gKGludCh4L251bV9vZl9wb2ludHMpLCBpbnQoeS9udW1fb2ZfcG9pbnRzKSkKCXJldHVybiBjZW50cm9pZAoKZGVmIGdldF9wb2ludHMoZmFjZV9wYXJ0LCBzaGFwZSk6Cglwb2ludHMgPSBbc2hhcGVbcG9pbnRdIGZvciBwb2ludCBpbiBmYWNlX3BhcnRdCglyZXR1cm4gbnAuYXJyYXkocG9pbnRzKQoKZGVmIGNyZWF0ZV9tYXNrKHNoYXBlLCBpbWcpOgoJaGVpZ2h0LCB3aWR0aCwgY2hhbm5lbHMgPSBpbWcuc2hhcGUKCW1hc2sgPSBucC56ZXJvcygoaGVpZ2h0LCB3aWR0aCksIGR0eXBlPW5wLnVpbnQ4KQoJcmlnaHRfZXllID0gKDM2LCAzNywgMzgsIDM5LCA0MCwgNDEpCglsZWZ0X2V5ZSA9ICg0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3KQoJbW91dGggPSAoNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSkKCW5vc2UgPSAoMjcsIDMxLCAzMywgMzUpCglsZWZ0X2V5ZWJyb3cgPSAoMTcsIDE4LCAxOSwgMjAsIDIxKQoJcmlnaHRfZXllYnJvdyA9ICgyMiwgMjQsIDI1LCAyNiwgMjYpCgkKCW1pZGRsZV9yaWdodF9leWUgPSBjZW50cm9pZChzaGFwZSwgKnJpZ2h0X2V5ZSkKCW1pZGRsZV9sZWZ0X2V5ZSA9IGNlbnRyb2lkKHNoYXBlLCAqbGVmdF9leWUpCglyYWRpdXNfbGVmdF9leWUgPSBoaWdoZXN0X2V1Y2xpZGVhbl9kaXN0YW5jZShzaGFwZSwgbWlkZGxlX2xlZnRfZXllLCAqbGVmdF9leWUpIAoJcmFkaXVzX3JpZ2h0X2V5ZSA9IGhpZ2hlc3RfZXVjbGlkZWFuX2Rpc3RhbmNlKHNoYXBlLCBtaWRkbGVfcmlnaHRfZXllLCAqcmlnaHRfZXllKQoJbWFzayA9IGN2Mi5jaXJjbGUobWFzaywgbWlkZGxlX3JpZ2h0X2V5ZSwgcmFkaXVzX3JpZ2h0X2V5ZSwgMjU1LCAtMSkKCW1hc2sgPSBjdjIuY2lyY2xlKG1hc2ssIG1pZGRsZV9sZWZ0X2V5ZSwgcmFkaXVzX2xlZnRfZXllLCAyNTUsIC0xKQoKCW1pZGRsZV9tb3V0aCA9IGNlbnRyb2lkKHNoYXBlLCAqbW91dGgpCglyYWRpdXNfbW91dGggPSBoaWdoZXN0X2V1Y2xpZGVhbl9kaXN0YW5jZShzaGFwZSwgbWlkZGxlX21vdXRoLCAqbW91dGgpCgltYXNrID0gY3YyLmNpcmNsZShtYXNrLCBtaWRkbGVfbW91dGgsIHJhZGl1c19tb3V0aCwgMjU1LCAtMSkKCgltYXNrID0gY3YyLmZpbGxQb2x5KG1hc2ssIFtnZXRfcG9pbnRzKGxlZnRfZXllYnJvdywgc2hhcGUpXSwgMjU1KQoJbWFzayA9IGN2Mi5maWxsUG9seShtYXNrLCBbZ2V0X3BvaW50cyhyaWdodF9leWVicm93LCBzaGFwZSldLCAyNTUpCgltYXNrID0gY3YyLmZpbGxQb2x5KG1hc2ssIFtnZXRfcG9pbnRzKG5vc2UsIHNoYXBlKV0sIDI1NSkKCXJldHVybiBtYXNrCgpkZWYgZ2V0X2JvdW5kaW5nX3JlY3QoaW1nKToKCWNudHMgPSBjdjIuZmluZENvbnRvdXJzKGltZy5jb3B5KCksIGN2Mi5SRVRSX0VYVEVSTkFMLCBjdjIuQ0hBSU5fQVBQUk9YX1NJTVBMRSlbMV0KCWJvdW5kaW5nQm94ZXMgPSBjb250b3Vycy5zb3J0X2NvbnRvdXJzKGNudHMsIG1ldGhvZD0nbGVmdC10by1yaWdodCcpWzFdCgkKCXgwLCB5MCA9IGJvdW5kaW5nQm94ZXNbMF1bMF0sIGJvdW5kaW5nQm94ZXNbMF1bMV0KCXgxLCB5MSA9IDAsIDAKCWZvciBpLCAoeCx5LHcsaCkgaW4gZW51bWVyYXRlKGJvdW5kaW5nQm94ZXMpOgoJCWlmIGkgPT0gMDoKCQkJY29udGludWUKCQlpZiB4K3cgPiB4MToKPHxmaW1faG9sZXw+CgkJaWYgeStoID4geTE6CgkJCXkxID0geStoCglyZXR1cm4geDAseTAseDEseTEKPHxmaW1fc3VmZml4fD4KCQkJeDEgPSB4K3cKPHxmaW1fZW5kfD4="]
["04a2b34501e309f8062baa8450663e6e9a818514-2","04a2b34501e309f8062baa8450663e6e9a818514","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGN2MgppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBpbXV0aWxzIGltcG9ydCBjb250b3VycwoKZGVmIGV1Y2xpZGVhbl9kaXN0YW5jZShhLCBiKToKCWRpc3QgPSAwCglpZiBsZW4oYSkgPT0gbGVuKGIpOgoJCWZvciBpIGluIHJhbmdlKGxlbihhKSk6CgkJCWRpc3QgKz0gKGFbaV0tYltpXSkqKjIKCQlkaXN0ID0gbnAuc3FydChkaXN0KQoJcmV0dXJuIGludChkaXN0KQoKZGVmIGhpZ2hlc3RfZXVjbGlkZWFuX2Rpc3RhbmNlKHNoYXBlLCBmaXhlZF9wb2ludCwgKm90aGVyX3BvaW50cyk6CgludW0gPSBsZW4ob3RoZXJfcG9pbnRzKQoJbGFyZ2VzdF9kaXN0YW5jZSA9IDAKCWZvciBwb2ludCBpbiBvdGhlcl9wb2ludHM6CgkJZGlzdCA9IGV1Y2xpZGVhbl9kaXN0YW5jZShmaXhlZF9wb2ludCwgc2hhcGVbcG9pbnRdKQoJCWlmIGRpc3QgPiBsYXJnZXN0X2Rpc3RhbmNlOgoJCQlsYXJnZXN0X2Rpc3RhbmNlID0gZGlzdAoJcmV0dXJuIGxhcmdlc3RfZGlzdGFuY2UKCmRlZiBjZW50cm9pZChzaGFwZSwgKnBvaW50cyk6CgludW1fb2ZfcG9pbnRzID0gbGVuKHBvaW50cykKCXgsIHkgPSAwLCAwCglmb3IgcG9pbnQgaW4gcG9pbnRzOgoJCXggKz0gc2hhcGVbcG9pbnRdWzBdCgkJeSArPSBzaGFwZVtwb2ludF1bMV0KCWNlbnRyb2lkID0gKGludCh4L251bV9vZl9wb2ludHMpLCBpbnQoeS9udW1fb2ZfcG9pbnRzKSkKCXJldHVybiBjZW50cm9pZAoKZGVmIGdldF9wb2ludHMoZmFjZV9wYXJ0LCBzaGFwZSk6Cglwb2ludHMgPSBbc2hhcGVbcG9pbnRdIGZvciBwb2ludCBpbiBmYWNlX3BhcnRdCglyZXR1cm4gbnAuYXJyYXkocG9pbnRzKQoKZGVmIGNyZWF0ZV9tYXNrKHNoYXBlLCBpbWcpOgoJaGVpZ2h0LCB3aWR0aCwgY2hhbm5lbHMgPSBpbWcuc2hhcGUKCW1hc2sgPSBucC56ZXJvcygoaGVpZ2h0LCB3aWR0aCksIGR0eXBlPW5wLnVpbnQ4KQoJcmlnaHRfZXllID0gKDM2LCAzNywgMzgsIDM5LCA0MCwgNDEpCglsZWZ0X2V5ZSA9ICg0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3KQoJbW91dGggPSAoNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSkKCW5vc2UgPSAoMjcsIDMxLCAzMywgMzUpCglsZWZ0X2V5ZWJyb3cgPSAoMTcsIDE4LCAxOSwgMjAsIDIxKQoJcmlnaHRfZXllYnJvdyA9ICgyMiwgMjQsIDI1LCAyNiwgMjYpCgkKCW1pZGRsZV9yaWdodF9leWUgPSBjZW50cm9pZChzaGFwZSwgKnJpZ2h0X2V5ZSkKCW1pZGRsZV9sZWZ0X2V5ZSA9IGNlbnRyb2lkKHNoYXBlLCAqbGVmdF9leWUpCglyYWRpdXNfbGVmdF9leWUgPSBoaWdoZXN0X2V1Y2xpZGVhbl9kaXN0YW5jZShzaGFwZSwgbWlkZGxlX2xlZnRfZXllLCAqbGVmdF9leWUpIAoJcmFkaXVzX3JpZ2h0X2V5ZSA9IGhpZ2hlc3RfZXVjbGlkZWFuX2Rpc3RhbmNlKHNoYXBlLCBtaWRkbGVfcmlnaHRfZXllLCAqcmlnaHRfZXllKQoJbWFzayA9IGN2Mi5jaXJjbGUobWFzaywgbWlkZGxlX3JpZ2h0X2V5ZSwgcmFkaXVzX3JpZ2h0X2V5ZSwgMjU1LCAtMSkKCW1hc2sgPSBjdjIuY2lyY2xlKG1hc2ssIG1pZGRsZV9sZWZ0X2V5ZSwgcmFkaXVzX2xlZnRfZXllLCAyNTUsIC0xKQoKCW1pZGRsZV9tb3V0aCA9IGNlbnRyb2lkKHNoYXBlLCAqbW91dGgpCglyYWRpdXNfbW91dGggPSBoaWdoZXN0X2V1Y2xpZGVhbl9kaXN0YW5jZShzaGFwZSwgbWlkZGxlX21vdXRoLCAqbW91dGgpCgltYXNrID0gY3YyLmNpcmNsZShtYXNrLCBtaWRkbGVfbW91dGgsIHJhZGl1c19tb3V0aCwgMjU1LCAtMSkKCgltYXNrID0gY3YyLmZpbGxQb2x5KG1hc2ssIFtnZXRfcG9pbnRzKGxlZnRfZXllYnJvdywgc2hhcGUpXSwgMjU1KQoJbWFzayA9IGN2Mi5maWxsUG9seShtYXNrLCBbZ2V0X3BvaW50cyhyaWdodF9leWVicm93LCBzaGFwZSldLCAyNTUpCgltYXNrID0gY3YyLmZpbGxQb2x5KG1hc2ssIFtnZXRfcG9pbnRzKG5vc2UsIHNoYXBlKV0sIDI1NSkKCXJldHVybiBtYXNrCgpkZWYgZ2V0X2JvdW5kaW5nX3JlY3QoaW1nKToKCWNudHMgPSBjdjIuZmluZENvbnRvdXJzKGltZy5jb3B5KCksIGN2Mi5SRVRSX0VYVEVSTkFMLCBjdjIuQ0hBSU5fQVBQUk9YX1NJTVBMRSlbMV0KCWJvdW5kaW5nQm94ZXMgPSBjb250b3Vycy5zb3J0X2NvbnRvdXJzKGNudHMsIG1ldGhvZD0nbGVmdC10by1yaWdodCcpWzFdCgkKCXgwLCB5MCA9IGJvdW5kaW5nQm94ZXNbMF1bMF0sIGJvdW5kaW5nQm94ZXNbMF1bMV0KCXgxLCB5MSA9IDAsIDAKCWZvciBpLCAoeCx5LHcsaCkgaW4gZW51bWVyYXRlKGJvdW5kaW5nQm94ZXMpOgoJCWlmIGkgPT0gMDoKPHxmaW1faG9sZXw+CgkJaWYgeCt3ID4geDE6CgkJCXgxID0geCt3CgkJaWYgeStoID4geTE6CgkJCXkxID0geStoCglyZXR1cm4geDAseTAseDEseTEKPHxmaW1fc3VmZml4fD4KCQkJY29udGludWUKPHxmaW1fZW5kfD4="]
["04a2b34501e309f8062baa8450663e6e9a818514-3","04a2b34501e309f8062baa8450663e6e9a818514","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGN2MgppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBpbXV0aWxzIGltcG9ydCBjb250b3Vycwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpkZWYgZXVjbGlkZWFuX2Rpc3RhbmNlKGEsIGIpOgoJZGlzdCA9IDAKCWlmIGxlbihhKSA9PSBsZW4oYik6Cjx8ZmltX2VuZHw+"]
["04a2b34501e309f8062baa8450663e6e9a818514-4","04a2b34501e309f8062baa8450663e6e9a818514","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGN2MgppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBpbXV0aWxzIGltcG9ydCBjb250b3VycwoKZGVmIGV1Y2xpZGVhbl9kaXN0YW5jZShhLCBiKToKCWRpc3QgPSAwCglpZiBsZW4oYSkgPT0gbGVuKGIpOgoJCWZvciBpIGluIHJhbmdlKGxlbihhKSk6CgkJCWRpc3QgKz0gKGFbaV0tYltpXSkqKjIKCQlkaXN0ID0gbnAuc3FydChkaXN0KQoJcmV0dXJuIGludChkaXN0KQoKZGVmIGhpZ2hlc3RfZXVjbGlkZWFuX2Rpc3RhbmNlKHNoYXBlLCBmaXhlZF9wb2ludCwgKm90aGVyX3BvaW50cyk6CgludW0gPSBsZW4ob3RoZXJfcG9pbnRzKQoJbGFyZ2VzdF9kaXN0YW5jZSA9IDAKCWZvciBwb2ludCBpbiBvdGhlcl9wb2ludHM6CgkJZGlzdCA9IGV1Y2xpZGVhbl9kaXN0YW5jZShmaXhlZF9wb2ludCwgc2hhcGVbcG9pbnRdKQoJCWlmIGRpc3QgPiBsYXJnZXN0X2Rpc3RhbmNlOgoJCQlsYXJnZXN0X2Rpc3RhbmNlID0gZGlzdAoJcmV0dXJuIGxhcmdlc3RfZGlzdGFuY2UKCmRlZiBjZW50cm9pZChzaGFwZSwgKnBvaW50cyk6CgludW1fb2ZfcG9pbnRzID0gbGVuKHBvaW50cykKCXgsIHkgPSAwLCAwCglmb3IgcG9pbnQgaW4gcG9pbnRzOgoJCXggKz0gc2hhcGVbcG9pbnRdWzBdCgkJeSArPSBzaGFwZVtwb2ludF1bMV0KCWNlbnRyb2lkID0gKGludCh4L251bV9vZl9wb2ludHMpLCBpbnQoeS9udW1fb2ZfcG9pbnRzKSkKCXJldHVybiBjZW50cm9pZAoKZGVmIGdldF9wb2ludHMoZmFjZV9wYXJ0LCBzaGFwZSk6Cglwb2ludHMgPSBbc2hhcGVbcG9pbnRdIGZvciBwb2ludCBpbiBmYWNlX3BhcnRdCglyZXR1cm4gbnAuYXJyYXkocG9pbnRzKQoKZGVmIGNyZWF0ZV9tYXNrKHNoYXBlLCBpbWcpOgoJaGVpZ2h0LCB3aWR0aCwgY2hhbm5lbHMgPSBpbWcuc2hhcGUKCW1hc2sgPSBucC56ZXJvcygoaGVpZ2h0LCB3aWR0aCksIGR0eXBlPW5wLnVpbnQ4KQoJcmlnaHRfZXllID0gKDM2LCAzNywgMzgsIDM5LCA0MCwgNDEpCglsZWZ0X2V5ZSA9ICg0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3KQoJbW91dGggPSAoNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSkKCW5vc2UgPSAoMjcsIDMxLCAzMywgMzUpCglsZWZ0X2V5ZWJyb3cgPSAoMTcsIDE4LCAxOSwgMjAsIDIxKQoJcmlnaHRfZXllYnJvdyA9ICgyMiwgMjQsIDI1LCAyNiwgMjYpCgkKCW1pZGRsZV9yaWdodF9leWUgPSBjZW50cm9pZChzaGFwZSwgKnJpZ2h0X2V5ZSkKCW1pZGRsZV9sZWZ0X2V5ZSA9IGNlbnRyb2lkKHNoYXBlLCAqbGVmdF9leWUpCglyYWRpdXNfbGVmdF9leWUgPSBoaWdoZXN0X2V1Y2xpZGVhbl9kaXN0YW5jZShzaGFwZSwgbWlkZGxlX2xlZnRfZXllLCAqbGVmdF9leWUpIAoJcmFkaXVzX3JpZ2h0X2V5ZSA9IGhpZ2hlc3RfZXVjbGlkZWFuX2Rpc3RhbmNlKHNoYXBlLCBtaWRkbGVfcmlnaHRfZXllLCAqcmlnaHRfZXllKQoJbWFzayA9IGN2Mi5jaXJjbGUobWFzaywgbWlkZGxlX3JpZ2h0X2V5ZSwgcmFkaXVzX3JpZ2h0X2V5ZSwgMjU1LCAtMSkKCW1hc2sgPSBjdjIuY2lyY2xlKG1hc2ssIG1pZGRsZV9sZWZ0X2V5ZSwgcmFkaXVzX2xlZnRfZXllLCAyNTUsIC0xKQoKCW1pZGRsZV9tb3V0aCA9IGNlbnRyb2lkKHNoYXBlLCAqbW91dGgpCglyYWRpdXNfbW91dGggPSBoaWdoZXN0X2V1Y2xpZGVhbl9kaXN0YW5jZShzaGFwZSwgbWlkZGxlX21vdXRoLCAqbW91dGgpCgltYXNrID0gY3YyLmNpcmNsZShtYXNrLCBtaWRkbGVfbW91dGgsIHJhZGl1c19tb3V0aCwgMjU1LCAtMSkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCW1hc2sgPSBjdjIuZmlsbFBvbHkobWFzaywgW2dldF9wb2ludHMobGVmdF9leWVicm93LCBzaGFwZSldLCAyNTUpCgltYXNrID0gY3YyLmZpbGxQb2x5KG1hc2ssIFtnZXRfcG9pbnRzKHJpZ2h0X2V5ZWJyb3csIHNoYXBlKV0sIDI1NSkKCW1hc2sgPSBjdjIuZmlsbFBvbHkobWFzaywgW2dldF9wb2ludHMobm9zZSwgc2hhcGUpXSwgMjU1KQoJcmV0dXJuIG1hc2sKPHxmaW1fZW5kfD4="]
["04a2b34501e309f8062baa8450663e6e9a818514-5","04a2b34501e309f8062baa8450663e6e9a818514","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGN2MgppbXBvcnQgbnVtcHkgYXMgbnAKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIGltdXRpbHMgaW1wb3J0IGNvbnRvdXJzCgpkZWYgZXVjbGlkZWFuX2Rpc3RhbmNlKGEsIGIpOgoJZGlzdCA9IDAKPHxmaW1fZW5kfD4="]
["e77106e807dbf8f7790938cb05b5045cd1cf5fe2-1","e77106e807dbf8f7790938cb05b5045cd1cf5fe2","PHxmaW1fcHJlZml4fD4KIyAoQykgQ29weXJpZ2h0IDIwMTkgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFAuCiMgR2VuZXJpYyBBcnViYSBEeW5hbWljIFNlZ21lbnRhdGlvbiBTZXJ2aWNlcyBjbGFzc2VzCgppbXBvcnQgY2xhc3Nlcy5jbGFzc2VzCmltcG9ydCByZXF1ZXN0cwpzZXNzaW9uaWQgPSByZXF1ZXN0cy5TZXNzaW9uKCkKCmltcG9ydCB1cmxsaWIzCmltcG9ydCBqc29uCnVybGxpYjMuZGlzYWJsZV93YXJuaW5ncyh1cmxsaWIzLmV4Y2VwdGlvbnMuSW5zZWN1cmVSZXF1ZXN0V2FybmluZykKCmRlZiBkc3NlcnZpY2VkYkFjdGlvbihmb3JtcmVzdWx0KToKICAgICMgVGhpcyBkZWZpbml0aW9uIGlzIGZvciBhbGwgdGhlIGRhdGFiYXNlIGFjdGlvbnMgZm9yIER5bmFtaWMgU2VnbWVudGF0aW9uIFNlcnZpY2VzLCBiYXNlZCBvbiB0aGUgdXNlciBjbGljayBvbiB0aGUgcGFnZXMKICAgIGlmKGJvb2woZm9ybXJlc3VsdCk9PVRydWUpOgogICAgICAgIGlmKGZvcm1yZXN1bHRbJ2FjdGlvbiddPT0iU3VibWl0IHNlcnZpY2UiKTogCiAgICAgICAgICAgIHF1ZXJ5U3RyPSJpbnNlcnQgaW50byBkc3NlcnZpY2VzIChuYW1lLHByb2ZpbGUscG9saWNpZXMpIHZhbHVlcyAoJ3t9Jywne30nLCd7fScpIi5mb3JtYXQoZm9ybXJlc3VsdFsnbmFtZSddLGZvcm1yZXN1bHRbJ3Byb2ZpbGUnXSxmb3JtcmVzdWx0Wydwb2xpY2llcyddKQogICAgICAgICAgICBzZXJ2aWNlaWQ9Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KHF1ZXJ5U3RyLCJpbnNlcnQiKQogICAgICAgICAgICAjIEJ1aWxkIHRoZSBsaXN0CiAgICAgICAgICAgIHJlc3VsdD1jbGFzc2VzLmNsYXNzZXMuc3FsUXVlcnkoInNlbGVjdCAqIGZyb20gZHNzZXJ2aWNlcyIsInNlbGVjdCIpCiAgICAgICAgZWxpZiAgKGZvcm1yZXN1bHRbJ2FjdGlvbiddPT0iU3VibWl0IGNoYW5nZXMiKToKICAgICAgICAgICAgcXVlcnlTdHI9InVwZGF0ZSBkc3NlcnZpY2VzIHNldCBuYW1lPSd7fScscHJvZmlsZT0ne30nLCBwb2xpY2llcz0ne30nIHdoZXJlIGlkPSd7fSciIFwKICAgICAgICAgICAgICAgIC5mb3JtYXQoZm9ybXJlc3VsdFsnbmFtZSddLGZvcm1yZXN1bHRbJ3Byb2ZpbGUnXSxmb3JtcmVzdWx0Wydwb2xpY2llcyddLGZvcm1yZXN1bHRbJ2lkJ10pCiAgICAgICAgICAgIGNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeShxdWVyeVN0ciwidXBkYXRlIikKICAgICAgICAgICAgIyBCdWlsZCB0aGUgbGlzdAogICAgICAgICAgICByZXN1bHQ9Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KCJzZWxlY3QgKiBmcm9tIGRzc2VydmljZXMiLCJzZWxlY3QiKQogICAgICAgIGVsaWYgKGZvcm1yZXN1bHRbJ2FjdGlvbiddPT0iRGVsZXRlIik6CiAgICAgICAgICAgIHF1ZXJ5U3RyPSJkZWxldGUgZnJvbSBkc3NlcnZpY2VzIHdoZXJlIGlkPSd7fSciLmZvcm1hdChmb3JtcmVzdWx0WydpZCddKQogICAgICAgICAgICBjbGFzc2VzLmNsYXNzZXMuc3FsUXVlcnkocXVlcnlTdHIsImRlbGV0ZSIpCiAgICAgICAgICAgICMgQnVpbGQgdGhlIGxpc3QKICAgICAgICAgICAgcmVzdWx0PWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeSgic2VsZWN0ICogZnJvbSBkc3NlcnZpY2VzIiwic2VsZWN0IikKICAgICAgICBlbGlmIChmb3JtcmVzdWx0WydhY3Rpb24nXT09Im9yZGVyIGJ5IG5hbWUiKToKICAgICAgICAgICAgcmVzdWx0PWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeSgic2VsZWN0ICogZnJvbSBkc3NlcnZpY2VzIG9yZGVyIGJ5IG5hbWUgQVNDIiwic2VsZWN0IikKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXN1bHQ9Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KCJzZWxlY3QgKiBmcm9tIGRzc2VydmljZXMiLCJzZWxlY3QiKQogICAgZWxzZToKICAgICAgICByZXN1bHQ9Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KCJzZWxlY3QgKiBmcm9tIGRzc2VydmljZXMiLCJzZWxlY3QiKQogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBnZXRWTEFOaW5mbyhtY2lkKToKICAgICMgT2J0YWluIGFsbCBWTEFOIElEIGFuZCBuYW1lIGluZm9ybWF0aW9uCiAgICBxdWVyeVN0cj0ic2VsZWN0ICogZnJvbSBkZXZpY2VzIHdoZXJlIGlkPSd7fSciLmZvcm1hdChtY2lkKQogICAgbWNJbmZvPWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeShxdWVyeVN0ciwic2VsZWN0b25lIikKICAgIHN5c2luZm89anNvbi5sb2FkcyhtY0luZm9bJ3N5c2luZm8nXSkgCiAgICBjb29raWU9Y2xhc3Nlcy5jbGFzc2VzLmxvZ2lubWMobWNJbmZvWydpZCddKQogICAgIyBPYnRhaW4gdGhlIFZMQU4gbmFtZSBhbmQgSUQKICAgIGlmIHN5c2luZm9bJ19nbG9iYWwnXVsnX3N3aXRjaF9yb2xlJ109PSJtYXN0ZXIiOgogICAgICAgIHVybD0iY29uZmlndXJhdGlvbi9vYmplY3Qvdmxhbl9uYW1lX2lkP2NvbmZpZ19wYXRoPSUyRm1kJlVJREFSVUJBPSIKICAgIGVsc2U6CiAgICAgICAgdXJsPSJjb25maWd1cmF0aW9uL29iamVjdC92bGFuX25hbWVfaWQ/VUlEQVJVQkE9IgogICAgdmxhbnJlc3VsdD1jbGFzc2VzLmNsYXNzZXMuZ2V0UkVTVG1jKGNvb2tpZSx1cmwsbWNJbmZvWydpZCddKQogICAgdmxhbnJlc3VsdD12bGFucmVzdWx0WydfZGF0YSddCiAgICBjbGFzc2VzLmNsYXNzZXMubG9nb3V0bWMoY29va2llLG1jSW5mb1snaWQnXSkgCiAgICByZXR1cm4gdmxhbnJlc3VsdAoKZGVmIGdldFZMQU5pbnQobWNpZCwgdmxhbik6CiAgICAjIE9idGFpbiBWTEFOIGludGVyZmFjZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGdpdmVuIFZMQU4gSUQKICAgIHF1ZXJ5U3RyPSJzZWxlY3QgKiBmcm9tIGRldmljZXMgd2hlcmUgaWQ9J3t9JyIuZm9ybWF0KG1jaWQpCiAgICBtY0luZm89Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KHF1ZXJ5U3RyLCJzZWxlY3RvbmUiKQogICAgc3lzaW5mbz1qc29uLmxvYWRzKG1jSW5mb1snc3lzaW5mbyddKQogICAgY29va2llPWNsYXNzZXMuY2xhc3Nlcy5sb2dpbm1jKG1jSW5mb1snaWQnXSkKICAgICMgT2J0YWluIHRoZSByb2xlcwogICAgaWYgc3lzaW5mb1snX2dsb2JhbCddWydfc3dpdGNoX3JvbGUnXT09Im1hc3RlciI6CiAgICAgICAgdXJsPSJjb25maWd1cmF0aW9uL29iamVjdC9pbnRfdmxhbj9jb25maWdfcGF0aD0lMkZtZCZmaWx0ZXI9W3tcImludF92bGFuLmlkXCI6e1wiJGVxXCI6WyIgKyB2bGFuICsgIl19fV0mVUlEQVJVQkE9IgogICAgZWxzZToKICAgICAgICB1cmw9ImNvbmZpZ3VyYXRpb24vb2JqZWN0L2ludF92bGFuP2ZpbHRlcj1be1wiaW50X3ZsYW4uaWRcIjp7XCIkZXFcIjpbIiArIHZsYW4gKyAiXX19XSZVSURBUlVCQT0iCiAgICB2bGFucmVzdWx0PWNsYXNzZXMuY2xhc3Nlcy5nZXRSRVNUbWMoY29va2llLHVybCxtY0luZm9bJ2lkJ10pCiAgICB2bGFucmVzdWx0PXZsYW5yZXN1bHRbJ19kYXRhJ11bJ2ludF92bGFuJ11bMF0KICAgIGNsYXNzZXMuY2xhc3Nlcy5sb2dvdXRtYyhjb29raWUsbWNJbmZvWydpZCddKSAKICAgIHJldHVybiB2bGFucmVzdWx0CgpkZWYgZ2V0VkxBTmlkbmFtZShtY2lkLCB2bGFuKToKICAgICMgT2J0YWluIFZMQU4gaW5mb3JtYXRpb24gZm9yIHRoZSBnaXZlbiBWTEFOIElECiAgICBxdWVyeVN0cj0ic2VsZWN0ICogZnJvbSBkZXZpY2VzIHdoZXJlIGlkPSd7fSciLmZvcm1hdChtY2lkKQogICAgbWNJbmZvPWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeShxdWVyeVN0ciwic2VsZWN0b25lIikKICAgIHN5c2luZm89anNvbi5sb2FkcyhtY0luZm9bJ3N5c2luZm8nXSkgCiAgICBjb29raWU9Y2xhc3Nlcy5jbGFzc2VzLmxvZ2lubWMobWNJbmZvWydpZCddKQogICAgIyBPYnRhaW4gdGhlIFZMQU4gbmFtZSBhbmQgSUQKICAgIGlmIHN5c2luZm9bJ19nbG9iYWwnXVsnX3N3aXRjaF9yb2xlJ109PSJtYXN0ZXIiOgogICAgICAgIHVybD0iY29uZmlndXJhdGlvbi9vYmplY3Qvdmxhbl9uYW1lX2lkP2ZpbHRlcj1be1widmxhbl9uYW1lX2lkLnZsYW4taWRzXCI6e1wiJGVxXCI6W1wiIisgdmxhbiArICJcIl19fV0mY29uZmlnX3BhdGg9JTJGbWQmVUlEQVJVQkE9IgogICAgZWxzZToKICAgICAgICB1cmw9ImNvbmZpZ3VyYXRpb24vb2JqZWN0L3ZsYW5fbmFtZV9pZD9maWx0ZXI9W3tcInZsYW5fbmFtZV9pZC52bGFuLWlkc1wiOntcIiRlcVwiOltcIiIrIHZsYW4gKyAiXCJdfX1dJlVJREFSVUJBPSIKICAgIHZsYW5yZXN1bHQ9Y2xhc3Nlcy5jbGFzc2VzLmdldFJFU1RtYyhjb29raWUsdXJsLG1jSW5mb1snaWQnXSkKICAgIHZsYW5yZXN1bHQ9dmxhbnJlc3VsdFsnX2RhdGEnXVsndmxhbl9uYW1lX2lkJ11bMF0KICAgIGNsYXNzZXMuY2xhc3Nlcy5sb2dvdXRtYyhjb29raWUsbWNJbmZvWydpZCddKSAKICAgIHJldHVybiB2bGFucmVzdWx0CgpkZWYgZ2V0Um9sZXNpbmZvKG1jaWQpOgogICAgIyBPYnRhaW4gYWxsIHRoZSByb2xlcyBmcm9tIGEgZ2l2ZW4gTW9iaWxpdHkgQ29udHJvbGxlcgogICAgcXVlcnlTdHI9InNlbGVjdCBpZCwgZGVzY3JpcHRpb24sIGlwYWRkcmVzcyxzeXNpbmZvIGZyb20gZGV2aWNlcyB3aGVyZSBpZD0ne30nIi5mb3JtYXQobWNpZCkKICAgIG1jSW5mbz1jbGFzc2VzLmNsYXNzZXMuc3FsUXVlcnkocXVlcnlTdHIsInNlbGVjdG9uZSIpCiAgICBzeXNpbmZvPWpzb24ubG9hZHMobWNJbmZvWydzeXNpbmZvJ10pCiAgICBjb29raWU9Y2xhc3Nlcy5jbGFzc2VzLmxvZ2lubWMobWNJbmZvWydpZCddKQogICAgIyBPYnRhaW4gdGhlIHJvbGVzCiAgICBpZiBzeXNpbmZvWydfZ2xvYmFsJ11bJ19zd2l0Y2hfcm9sZSddPT0ibWFzdGVyIjoKICAgICAgICB1cmw9ImNvbmZpZ3VyYXRpb24vb2JqZWN0L3JvbGU/Y29uZmlnX3BhdGg9JTJGbWQmVUlEQVJVQkE9IgogICAgZWxzZToKICAgICAgICB1cmw9ImNvbmZpZ3VyYXRpb24vb2JqZWN0L3JvbGU/VUlEQVJVQkE9IgogICAgcm9sZXJlc3VsdD1jbGFzc2VzLmNsYXNzZXMuZ2V0UkVTVG1jKGNvb2tpZSx1cmwsbWNJbmZvWydpZCddKQogICAgcm9sZXJlc3VsdD1yb2xlcmVzdWx0WydfZGF0YSddCiAgICBjbGFzc2VzLmNsYXNzZXMubG9nb3V0bWMoY29va2llLG1jSW5mb1snaWQnXSkgCiAgICByZXR1cm4gcm9sZXJlc3VsdAoKZGVmIGdldFJvbGVpbmZvKG1jaWQscm9sZSk6CiAgICBxdWVyeVN0cj0ic2VsZWN0IGlkLCBkZXNjcmlwdGlvbiwgaXBhZGRyZXNzLHN5c2luZm8gZnJvbSBkZXZpY2VzIHdoZXJlIGlkPSd7fSciLmZvcm1hdChtY2lkKQogICAgbWNJbmZvPWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeShxdWVyeVN0ciwic2VsZWN0b25lIikKICAgIHN5c2luZm89anNvbi5sb2FkcyhtY0luZm9bJ3N5c2luZm8nXSkKICAgIGNvb2tpZT1jbGFzc2VzLmNsYXNzZXMubG9naW5tYyhtY0luZm9bJ2lkJ10pCiAgICAjIE9idGFpbiB0aGUgcm9sZXMKICAgIGlmIHN5c2luZm9bJ19nbG9iYWwnXVsnX3N3aXRjaF9yb2xlJ109PSJtYXN0ZXIiOgogICAgICAgIHVybD0iY29uZmlndXJhdGlvbi9vYmplY3Qvcm9sZT9jb25maWdfcGF0aD0lMkZtZCZmaWx0ZXI9W3tcInJvbGUucm5hbWVcIjp7XCIkZXFcIjpbXCIiICsgcm9sZSArIlwiXX19XSZVSURBUlVCQT0iCiAgICBlbHNlOgogICAgICAgIHVybD0iY29uZmlndXJhdGlvbi9vYmplY3Qvcm9sZT9maWx0ZXI9W3tcInJvbGUucm5hbWVcIjp7XCIkZXFcIjpbXCIiICsgcm9sZSArIlwiXX19XSZVSURBUlVCQT0iCiAgICByb2xlcmVzdWx0PWNsYXNzZXMuY2xhc3Nlcy5nZXRSRVNUbWMoY29va2llLHVybCxtY0luZm9bJ2lkJ10pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHJvbGVyZXN1bHQ9cm9sZXJlc3VsdFsnX2RhdGEnXVsncm9sZSddWzBdCiAgICBjbGFzc2VzLmNsYXNzZXMubG9nb3V0bWMoY29va2llLG1jSW5mb1snaWQnXSkgCiAgICByZXR1cm4gcm9sZXJlc3VsdAoKPHxmaW1fZW5kfD4="]
["e77106e807dbf8f7790938cb05b5045cd1cf5fe2-2","e77106e807dbf8f7790938cb05b5045cd1cf5fe2","PHxmaW1fcHJlZml4fD4KIyAoQykgQ29weXJpZ2h0IDIwMTkgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFAuCiMgR2VuZXJpYyBBcnViYSBEeW5hbWljIFNlZ21lbnRhdGlvbiBTZXJ2aWNlcyBjbGFzc2VzCgppbXBvcnQgY2xhc3Nlcy5jbGFzc2VzCmltcG9ydCByZXF1ZXN0cwpzZXNzaW9uaWQgPSByZXF1ZXN0cy5TZXNzaW9uKCkKCmltcG9ydCB1cmxsaWIzCmltcG9ydCBqc29uCnVybGxpYjMuZGlzYWJsZV93YXJuaW5ncyh1cmxsaWIzLmV4Y2VwdGlvbnMuSW5zZWN1cmVSZXF1ZXN0V2FybmluZykKCmRlZiBkc3NlcnZpY2VkYkFjdGlvbihmb3JtcmVzdWx0KToKICAgICMgVGhpcyBkZWZpbml0aW9uIGlzIGZvciBhbGwgdGhlIGRhdGFiYXNlIGFjdGlvbnMgZm9yIER5bmFtaWMgU2VnbWVudGF0aW9uIFNlcnZpY2VzLCBiYXNlZCBvbiB0aGUgdXNlciBjbGljayBvbiB0aGUgcGFnZXMKICAgIGlmKGJvb2woZm9ybXJlc3VsdCk9PVRydWUpOgogICAgICAgIGlmKGZvcm1yZXN1bHRbJ2FjdGlvbiddPT0iU3VibWl0IHNlcnZpY2UiKTogCiAgICAgICAgICAgIHF1ZXJ5U3RyPSJpbnNlcnQgaW50byBkc3NlcnZpY2VzIChuYW1lLHByb2ZpbGUscG9saWNpZXMpIHZhbHVlcyAoJ3t9Jywne30nLCd7fScpIi5mb3JtYXQoZm9ybXJlc3VsdFsnbmFtZSddLGZvcm1yZXN1bHRbJ3Byb2ZpbGUnXSxmb3JtcmVzdWx0Wydwb2xpY2llcyddKQogICAgICAgICAgICBzZXJ2aWNlaWQ9Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KHF1ZXJ5U3RyLCJpbnNlcnQiKQogICAgICAgICAgICAjIEJ1aWxkIHRoZSBsaXN0CiAgICAgICAgICAgIHJlc3VsdD1jbGFzc2VzLmNsYXNzZXMuc3FsUXVlcnkoInNlbGVjdCAqIGZyb20gZHNzZXJ2aWNlcyIsInNlbGVjdCIpCiAgICAgICAgZWxpZiAgKGZvcm1yZXN1bHRbJ2FjdGlvbiddPT0iU3VibWl0IGNoYW5nZXMiKToKICAgICAgICAgICAgcXVlcnlTdHI9InVwZGF0ZSBkc3NlcnZpY2VzIHNldCBuYW1lPSd7fScscHJvZmlsZT0ne30nLCBwb2xpY2llcz0ne30nIHdoZXJlIGlkPSd7fSciIFwKICAgICAgICAgICAgICAgIC5mb3JtYXQoZm9ybXJlc3VsdFsnbmFtZSddLGZvcm1yZXN1bHRbJ3Byb2ZpbGUnXSxmb3JtcmVzdWx0Wydwb2xpY2llcyddLGZvcm1yZXN1bHRbJ2lkJ10pCiAgICAgICAgICAgIGNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeShxdWVyeVN0ciwidXBkYXRlIikKICAgICAgICAgICAgIyBCdWlsZCB0aGUgbGlzdAogICAgICAgICAgICByZXN1bHQ9Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KCJzZWxlY3QgKiBmcm9tIGRzc2VydmljZXMiLCJzZWxlY3QiKQogICAgICAgIGVsaWYgKGZvcm1yZXN1bHRbJ2FjdGlvbiddPT0iRGVsZXRlIik6CiAgICAgICAgICAgIHF1ZXJ5U3RyPSJkZWxldGUgZnJvbSBkc3NlcnZpY2VzIHdoZXJlIGlkPSd7fSciLmZvcm1hdChmb3JtcmVzdWx0WydpZCddKQogICAgICAgICAgICBjbGFzc2VzLmNsYXNzZXMuc3FsUXVlcnkocXVlcnlTdHIsImRlbGV0ZSIpCiAgICAgICAgICAgICMgQnVpbGQgdGhlIGxpc3QKICAgICAgICAgICAgcmVzdWx0PWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeSgic2VsZWN0ICogZnJvbSBkc3NlcnZpY2VzIiwic2VsZWN0IikKICAgICAgICBlbGlmIChmb3JtcmVzdWx0WydhY3Rpb24nXT09Im9yZGVyIGJ5IG5hbWUiKToKICAgICAgICAgICAgcmVzdWx0PWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeSgic2VsZWN0ICogZnJvbSBkc3NlcnZpY2VzIG9yZGVyIGJ5IG5hbWUgQVNDIiwic2VsZWN0IikKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXN1bHQ9Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KCJzZWxlY3QgKiBmcm9tIGRzc2VydmljZXMiLCJzZWxlY3QiKQogICAgZWxzZToKICAgICAgICByZXN1bHQ9Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KCJzZWxlY3QgKiBmcm9tIGRzc2VydmljZXMiLCJzZWxlY3QiKQogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBnZXRWTEFOaW5mbyhtY2lkKToKICAgICMgT2J0YWluIGFsbCBWTEFOIElEIGFuZCBuYW1lIGluZm9ybWF0aW9uCiAgICBxdWVyeVN0cj0ic2VsZWN0ICogZnJvbSBkZXZpY2VzIHdoZXJlIGlkPSd7fSciLmZvcm1hdChtY2lkKQogICAgbWNJbmZvPWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeShxdWVyeVN0ciwic2VsZWN0b25lIikKICAgIHN5c2luZm89anNvbi5sb2FkcyhtY0luZm9bJ3N5c2luZm8nXSkgCiAgICBjb29raWU9Y2xhc3Nlcy5jbGFzc2VzLmxvZ2lubWMobWNJbmZvWydpZCddKQogICAgIyBPYnRhaW4gdGhlIFZMQU4gbmFtZSBhbmQgSUQKICAgIGlmIHN5c2luZm9bJ19nbG9iYWwnXVsnX3N3aXRjaF9yb2xlJ109PSJtYXN0ZXIiOgogICAgICAgIHVybD0iY29uZmlndXJhdGlvbi9vYmplY3Qvdmxhbl9uYW1lX2lkP2NvbmZpZ19wYXRoPSUyRm1kJlVJREFSVUJBPSIKICAgIGVsc2U6CiAgICAgICAgdXJsPSJjb25maWd1cmF0aW9uL29iamVjdC92bGFuX25hbWVfaWQ/VUlEQVJVQkE9IgogICAgdmxhbnJlc3VsdD1jbGFzc2VzLmNsYXNzZXMuZ2V0UkVTVG1jKGNvb2tpZSx1cmwsbWNJbmZvWydpZCddKQogICAgdmxhbnJlc3VsdD12bGFucmVzdWx0WydfZGF0YSddCiAgICBjbGFzc2VzLmNsYXNzZXMubG9nb3V0bWMoY29va2llLG1jSW5mb1snaWQnXSkgCiAgICByZXR1cm4gdmxhbnJlc3VsdAoKZGVmIGdldFZMQU5pbnQobWNpZCwgdmxhbik6CiAgICAjIE9idGFpbiBWTEFOIGludGVyZmFjZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGdpdmVuIFZMQU4gSUQKICAgIHF1ZXJ5U3RyPSJzZWxlY3QgKiBmcm9tIGRldmljZXMgd2hlcmUgaWQ9J3t9JyIuZm9ybWF0KG1jaWQpCiAgICBtY0luZm89Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KHF1ZXJ5U3RyLCJzZWxlY3RvbmUiKQogICAgc3lzaW5mbz1qc29uLmxvYWRzKG1jSW5mb1snc3lzaW5mbyddKQogICAgY29va2llPWNsYXNzZXMuY2xhc3Nlcy5sb2dpbm1jKG1jSW5mb1snaWQnXSkKICAgICMgT2J0YWluIHRoZSByb2xlcwogICAgaWYgc3lzaW5mb1snX2dsb2JhbCddWydfc3dpdGNoX3JvbGUnXT09Im1hc3RlciI6CiAgICAgICAgdXJsPSJjb25maWd1cmF0aW9uL29iamVjdC9pbnRfdmxhbj9jb25maWdfcGF0aD0lMkZtZCZmaWx0ZXI9W3tcImludF92bGFuLmlkXCI6e1wiJGVxXCI6WyIgKyB2bGFuICsgIl19fV0mVUlEQVJVQkE9IgogICAgZWxzZToKICAgICAgICB1cmw9ImNvbmZpZ3VyYXRpb24vb2JqZWN0L2ludF92bGFuP2ZpbHRlcj1be1wiaW50X3ZsYW4uaWRcIjp7XCIkZXFcIjpbIiArIHZsYW4gKyAiXX19XSZVSURBUlVCQT0iCiAgICB2bGFucmVzdWx0PWNsYXNzZXMuY2xhc3Nlcy5nZXRSRVNUbWMoY29va2llLHVybCxtY0luZm9bJ2lkJ10pCiAgICB2bGFucmVzdWx0PXZsYW5yZXN1bHRbJ19kYXRhJ11bJ2ludF92bGFuJ11bMF0KICAgIGNsYXNzZXMuY2xhc3Nlcy5sb2dvdXRtYyhjb29raWUsbWNJbmZvWydpZCddKSAKICAgIHJldHVybiB2bGFucmVzdWx0CgpkZWYgZ2V0VkxBTmlkbmFtZShtY2lkLCB2bGFuKToKICAgICMgT2J0YWluIFZMQU4gaW5mb3JtYXRpb24gZm9yIHRoZSBnaXZlbiBWTEFOIElECiAgICBxdWVyeVN0cj0ic2VsZWN0ICogZnJvbSBkZXZpY2VzIHdoZXJlIGlkPSd7fSciLmZvcm1hdChtY2lkKQogICAgbWNJbmZvPWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeShxdWVyeVN0ciwic2VsZWN0b25lIikKICAgIHN5c2luZm89anNvbi5sb2FkcyhtY0luZm9bJ3N5c2luZm8nXSkgCiAgICBjb29raWU9Y2xhc3Nlcy5jbGFzc2VzLmxvZ2lubWMobWNJbmZvWydpZCddKQogICAgIyBPYnRhaW4gdGhlIFZMQU4gbmFtZSBhbmQgSUQKICAgIGlmIHN5c2luZm9bJ19nbG9iYWwnXVsnX3N3aXRjaF9yb2xlJ109PSJtYXN0ZXIiOgogICAgICAgIHVybD0iY29uZmlndXJhdGlvbi9vYmplY3Qvdmxhbl9uYW1lX2lkP2ZpbHRlcj1be1widmxhbl9uYW1lX2lkLnZsYW4taWRzXCI6e1wiJGVxXCI6W1wiIisgdmxhbiArICJcIl19fV0mY29uZmlnX3BhdGg9JTJGbWQmVUlEQVJVQkE9IgogICAgZWxzZToKICAgICAgICB1cmw9ImNvbmZpZ3VyYXRpb24vb2JqZWN0L3ZsYW5fbmFtZV9pZD9maWx0ZXI9W3tcInZsYW5fbmFtZV9pZC52bGFuLWlkc1wiOntcIiRlcVwiOltcIiIrIHZsYW4gKyAiXCJdfX1dJlVJREFSVUJBPSIKICAgIHZsYW5yZXN1bHQ9Y2xhc3Nlcy5jbGFzc2VzLmdldFJFU1RtYyhjb29raWUsdXJsLG1jSW5mb1snaWQnXSkKICAgIHZsYW5yZXN1bHQ9dmxhbnJlc3VsdFsnX2RhdGEnXVsndmxhbl9uYW1lX2lkJ11bMF0KICAgIGNsYXNzZXMuY2xhc3Nlcy5sb2dvdXRtYyhjb29raWUsbWNJbmZvWydpZCddKSAKICAgIHJldHVybiB2bGFucmVzdWx0CgpkZWYgZ2V0Um9sZXNpbmZvKG1jaWQpOgogICAgIyBPYnRhaW4gYWxsIHRoZSByb2xlcyBmcm9tIGEgZ2l2ZW4gTW9iaWxpdHkgQ29udHJvbGxlcgogICAgcXVlcnlTdHI9InNlbGVjdCBpZCwgZGVzY3JpcHRpb24sIGlwYWRkcmVzcyxzeXNpbmZvIGZyb20gZGV2aWNlcyB3aGVyZSBpZD0ne30nIi5mb3JtYXQobWNpZCkKICAgIG1jSW5mbz1jbGFzc2VzLmNsYXNzZXMuc3FsUXVlcnkocXVlcnlTdHIsInNlbGVjdG9uZSIpCiAgICBzeXNpbmZvPWpzb24ubG9hZHMobWNJbmZvWydzeXNpbmZvJ10pCiAgICBjb29raWU9Y2xhc3Nlcy5jbGFzc2VzLmxvZ2lubWMobWNJbmZvWydpZCddKQogICAgIyBPYnRhaW4gdGhlIHJvbGVzCiAgICBpZiBzeXNpbmZvWydfZ2xvYmFsJ11bJ19zd2l0Y2hfcm9sZSddPT0ibWFzdGVyIjoKICAgICAgICB1cmw9ImNvbmZpZ3VyYXRpb24vb2JqZWN0L3JvbGU/Y29uZmlnX3BhdGg9JTJGbWQmVUlEQVJVQkE9IgogICAgZWxzZToKICAgICAgICB1cmw9ImNvbmZpZ3VyYXRpb24vb2JqZWN0L3JvbGU/VUlEQVJVQkE9IgogICAgcm9sZXJlc3VsdD1jbGFzc2VzLmNsYXNzZXMuZ2V0UkVTVG1jKGNvb2tpZSx1cmwsbWNJbmZvWydpZCddKQogICAgcm9sZXJlc3VsdD1yb2xlcmVzdWx0WydfZGF0YSddCiAgICBjbGFzc2VzLmNsYXNzZXMubG9nb3V0bWMoY29va2llLG1jSW5mb1snaWQnXSkgCiAgICByZXR1cm4gcm9sZXJlc3VsdAoKZGVmIGdldFJvbGVpbmZvKG1jaWQscm9sZSk6CiAgICBxdWVyeVN0cj0ic2VsZWN0IGlkLCBkZXNjcmlwdGlvbiwgaXBhZGRyZXNzLHN5c2luZm8gZnJvbSBkZXZpY2VzIHdoZXJlIGlkPSd7fSciLmZvcm1hdChtY2lkKQogICAgbWNJbmZvPWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeShxdWVyeVN0ciwic2VsZWN0b25lIikKICAgIHN5c2luZm89anNvbi5sb2FkcyhtY0luZm9bJ3N5c2luZm8nXSkKICAgIGNvb2tpZT1jbGFzc2VzLmNsYXNzZXMubG9naW5tYyhtY0luZm9bJ2lkJ10pCiAgICAjIE9idGFpbiB0aGUgcm9sZXMKICAgIGlmIHN5c2luZm9bJ19nbG9iYWwnXVsnX3N3aXRjaF9yb2xlJ109PSJtYXN0ZXIiOgogICAgICAgIHVybD0iY29uZmlndXJhdGlvbi9vYmplY3Qvcm9sZT9jb25maWdfcGF0aD0lMkZtZCZmaWx0ZXI9W3tcInJvbGUucm5hbWVcIjp7XCIkZXFcIjpbXCIiICsgcm9sZSArIlwiXX19XSZVSURBUlVCQT0iCiAgICBlbHNlOgogICAgICAgIHVybD0iY29uZmlndXJhdGlvbi9vYmplY3Qvcm9sZT9maWx0ZXI9W3tcInJvbGUucm5hbWVcIjp7XCIkZXFcIjpbXCIiICsgcm9sZSArIlwiXX19XSZVSURBUlVCQT0iCiAgICByb2xlcmVzdWx0PWNsYXNzZXMuY2xhc3Nlcy5nZXRSRVNUbWMoY29va2llLHVybCxtY0luZm9bJ2lkJ10pCiAgICByb2xlcmVzdWx0PXJvbGVyZXN1bHRbJ19kYXRhJ11bJ3JvbGUnXVswXQogICAgY2xhc3Nlcy5jbGFzc2VzLmxvZ291dG1jKGNvb2tpZSxtY0luZm9bJ2lkJ10pIAogICAgcmV0dXJuIHJvbGVyZXN1bHQKCmRlZiBnZXRBQ0xpbmZvKG1jaWQsYWNjbmFtZSk6CiAgICBhY2xyZXN1bHQ9e30KICAgIHF1ZXJ5U3RyPSJzZWxlY3QgaWQsIGRlc2NyaXB0aW9uLCBpcGFkZHJlc3Msc3lzaW5mbyBmcm9tIGRldmljZXMgd2hlcmUgaWQ9J3t9JyIuZm9ybWF0KG1jaWQpCiAgICBtY0luZm89Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KHF1ZXJ5U3RyLCJzZWxlY3RvbmUiKQogICAgc3lzaW5mbz1qc29uLmxvYWRzKG1jSW5mb1snc3lzaW5mbyddKQogICAgY29va2llPWNsYXNzZXMuY2xhc3Nlcy5sb2dpbm1jKG1jSW5mb1snaWQnXSkKICAgICMgT2J0YWluIHRoZSByb2xlcwogICAgaWYgc3lzaW5mb1snX2dsb2JhbCddWydfc3dpdGNoX3JvbGUnXT09Im1hc3RlciI6CiAgICAgICAgdXJsPSJjb25maWd1cmF0aW9uL29iamVjdC9yb2xlP2NvbmZpZ19wYXRoPSUyRm1kJmZpbHRlcj1be1wiYWNsX3Nlc3MuYWNjbmFtZVwiOntcIiRlcVwiOltcIiIgKyBhY2NuYW1lICsgIlwiXX19XSZVSURBUlVCQT0iCiAgICBlbHNlOgogICAgICAgIHVybD0iY29uZmlndXJhdGlvbi9vYmplY3Qvcm9sZT9maWx0ZXI9W3tcImFjbF9zZXNzLmFjY25hbWVcIjp7XCIkZXFcIjpbXCIiICsgYWNjbmFtZSArICJcIl19fV0mVUlEQVJVQkE9IgogICAgYWNscmVzdWx0PWNsYXNzZXMuY2xhc3Nlcy5nZXRSRVNUbWMoY29va2llLHVybCxtY0luZm9bJ2lkJ10pCiAgICBjbGFzc2VzLmNsYXNzZXMubG9nb3V0bWMoY29va2llLG1jSW5mb1snaWQnXSkgCiAgICByZXR1cm4gYWNscmVzdWx0CgpkZWYgZ2V0UHJvZmlsZSgpOgogICAgcXVlcnlTdHI9InNlbGVjdCBpZCwgbmFtZSwgcHJpbWFyeWNvbnRyb2xsZXIgZnJvbSBkc3Byb2ZpbGVzIgogICAgcHJvZmlsZXJlc3VsdD1jbGFzc2VzLmNsYXNzZXMuc3FsUXVlcnkocXVlcnlTdHIsInNlbGVjdCIpCiAgICByZXR1cm4gcHJvZmlsZXJlc3VsdAoKZGVmIGdldFNlcnZpY2UoaWQpOgogICAgcXVlcnlTdHI9InNlbGVjdCAqIGZyb20gZHNzZXJ2aWNlcyB3aGVyZSBpZD0ne30nIi5mb3JtYXQoaWQpCiAgICAjR2V0IFNlcnZpY2UgaW5mb3JtYXRpb24KICAgIHNlcnZpY2VJbmZvPWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeShxdWVyeVN0ciwic2VsZWN0b25lIikKICAgICMgR2V0IFByb2ZpbGUgaW5mb3JtYXRpb24KICAgIHF1ZXJ5U3RyPSJzZWxlY3QgKiBmcm9tIGRzcHJvZmlsZXMgd2hlcmUgaWQ9J3t9JyIuZm9ybWF0KHNlcnZpY2VJbmZvWydwcm9maWxlJ10pCiAgICBwcm9maWxlSW5mbz1jbGFzc2VzLmNsYXNzZXMuc3FsUXVlcnkocXVlcnlTdHIsInNlbGVjdG9uZSIpCiAgICAjIEdldCBDbGVhclBhc3MgaW5mb3JtYXRpb24KICAgIHF1ZXJ5U3RyPSJzZWxlY3QgaXBhZGRyZXNzLHVzZXJuYW1lLHBhc3N3b3JkLHNlY2luZm8gZnJvbSBkZXZpY2VzIHdoZXJlIGlkPSd7fSciLmZvcm1hdChwcm9maWxlSW5mb1snY2xlYXJwYXNzJ10pCiAgICBjbGVhcnBhc3NJbmZvPWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeShxdWVyeVN0ciwic2VsZWN0b25lIikKICAgICMgR2V0IHByaW1hcnkgY29udHJvbGxlciBpbmZvcm1hdGlvbgogICAgcXVlcnlTdHI9InNlbGVjdCBpcGFkZHJlc3MsdXNlcm5hbWUscGFzc3dvcmQgZnJvbSBkZXZpY2VzIHdoZXJlIGlkPSd7fSciLmZvcm1hdChwcm9maWxlSW5mb1sncHJpbWFyeWNvbnRyb2xsZXInXSkKICAgIHByaW1hcnljb250cm9sbGVySW5mbz1jbGFzc2VzLmNsYXNzZXMuc3FsUXVlcnkocXVlcnlTdHIsInNlbGVjdG9uZSIpCiAgICAjIEdldCBiYWNrdXAgY29udHJvbGxlciBpbmZvcm1hdGlvbiwgaWYgdGhlIGJhY2t1cCBjb250cm9sbGVyIGVudHJ5IGV4aXN0cwogICAgaWYgcHJvZmlsZUluZm9bJ2JhY2t1cGNvbnRyb2xsZXInXToKICAgICAgICBxdWVyeVN0cj0ic2VsZWN0IGlwYWRkcmVzcyx1c2VybmFtZSxwYXNzd29yZCBmcm9tIGRldmljZXMgd2hlcmUgaWQ9J3t9JyIuZm9ybWF0KHByb2ZpbGVJbmZvWydiYWNrdXBjb250cm9sbGVyJ10pCiAgICAgICAgYmFja3VwY29udHJvbGxlckluZm89Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KHF1ZXJ5U3RyLCJzZWxlY3RvbmUiKQogICAgZWxzZToKICAgICAgICBiYWNrdXBjb250cm9sbGVySW5mbz17fQogICAgI05vdyBidWlsZCB0aGUgY29tbWFuZCBzdHJ1Y3R1cmUgZm9yIHByb3Zpc2luaW5nIHRoZSBzd2l0Y2hlcwogICAgd29ya2Zsb3c9W10KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgd29ya2Zsb3cuYXBwZW5kKCJyYWRpdXMtc2VydmVyIGhvc3Qge30gZHluLWF1dGhvcml6YXRpb24iLmZvcm1hdChjbGVhcnBhc3NJbmZvWydpcGFkZHJlc3MnXSkpCiAgICB3b3JrZmxvdy5hcHBlbmQoInJhZGl1cy1zZXJ2ZXIgaG9zdCB7fSB0aW1lLXdpbmRvdyAwIi5mb3JtYXQoY2xlYXJwYXNzSW5mb1snaXBhZGRyZXNzJ10pKQogICAgd29ya2Zsb3cuYXBwZW5kKCJyYWRpdXMtc2VydmVyIGhvc3Qge30gY2xlYXJwYXNzIGtleSB7fSIuZm9ybWF0KGNsZWFycGFzc0luZm9bJ2lwYWRkcmVzcyddLHByb2ZpbGVJbmZvWydyYWRpdXNzZWNyZXQnXSkpCiAgICB3b3JrZmxvdy5hcHBlbmQoInJhZGl1cy1zZXJ2ZXIgY3BwbSBpZGVudGl0eSB7fSBrZXkge30iLmZvcm1hdChwcm9maWxlSW5mb1snZHVyYWRtaW4nXSxwcm9maWxlSW5mb1snZHVycGFzc3dvcmQnXSkpCjx8ZmltX2VuZHw+"]
["e77106e807dbf8f7790938cb05b5045cd1cf5fe2-3","e77106e807dbf8f7790938cb05b5045cd1cf5fe2","PHxmaW1fcHJlZml4fD4KIyAoQykgQ29weXJpZ2h0IDIwMTkgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFAuCiMgR2VuZXJpYyBBcnViYSBEeW5hbWljIFNlZ21lbnRhdGlvbiBTZXJ2aWNlcyBjbGFzc2VzCgppbXBvcnQgY2xhc3Nlcy5jbGFzc2VzCmltcG9ydCByZXF1ZXN0cwpzZXNzaW9uaWQgPSByZXF1ZXN0cy5TZXNzaW9uKCkKCmltcG9ydCB1cmxsaWIzCmltcG9ydCBqc29uCnVybGxpYjMuZGlzYWJsZV93YXJuaW5ncyh1cmxsaWIzLmV4Y2VwdGlvbnMuSW5zZWN1cmVSZXF1ZXN0V2FybmluZykKCmRlZiBkc3NlcnZpY2VkYkFjdGlvbihmb3JtcmVzdWx0KToKICAgICMgVGhpcyBkZWZpbml0aW9uIGlzIGZvciBhbGwgdGhlIGRhdGFiYXNlIGFjdGlvbnMgZm9yIER5bmFtaWMgU2VnbWVudGF0aW9uIFNlcnZpY2VzLCBiYXNlZCBvbiB0aGUgdXNlciBjbGljayBvbiB0aGUgcGFnZXMKICAgIGlmKGJvb2woZm9ybXJlc3VsdCk9PVRydWUpOgogICAgICAgIGlmKGZvcm1yZXN1bHRbJ2FjdGlvbiddPT0iU3VibWl0IHNlcnZpY2UiKTogCiAgICAgICAgICAgIHF1ZXJ5U3RyPSJpbnNlcnQgaW50byBkc3NlcnZpY2VzIChuYW1lLHByb2ZpbGUscG9saWNpZXMpIHZhbHVlcyAoJ3t9Jywne30nLCd7fScpIi5mb3JtYXQoZm9ybXJlc3VsdFsnbmFtZSddLGZvcm1yZXN1bHRbJ3Byb2ZpbGUnXSxmb3JtcmVzdWx0Wydwb2xpY2llcyddKQogICAgICAgICAgICBzZXJ2aWNlaWQ9Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KHF1ZXJ5U3RyLCJpbnNlcnQiKQogICAgICAgICAgICAjIEJ1aWxkIHRoZSBsaXN0CiAgICAgICAgICAgIHJlc3VsdD1jbGFzc2VzLmNsYXNzZXMuc3FsUXVlcnkoInNlbGVjdCAqIGZyb20gZHNzZXJ2aWNlcyIsInNlbGVjdCIpCiAgICAgICAgZWxpZiAgKGZvcm1yZXN1bHRbJ2FjdGlvbiddPT0iU3VibWl0IGNoYW5nZXMiKToKICAgICAgICAgICAgcXVlcnlTdHI9InVwZGF0ZSBkc3NlcnZpY2VzIHNldCBuYW1lPSd7fScscHJvZmlsZT0ne30nLCBwb2xpY2llcz0ne30nIHdoZXJlIGlkPSd7fSciIFwKICAgICAgICAgICAgICAgIC5mb3JtYXQoZm9ybXJlc3VsdFsnbmFtZSddLGZvcm1yZXN1bHRbJ3Byb2ZpbGUnXSxmb3JtcmVzdWx0Wydwb2xpY2llcyddLGZvcm1yZXN1bHRbJ2lkJ10pCiAgICAgICAgICAgIGNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeShxdWVyeVN0ciwidXBkYXRlIikKICAgICAgICAgICAgIyBCdWlsZCB0aGUgbGlzdAogICAgICAgICAgICByZXN1bHQ9Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KCJzZWxlY3QgKiBmcm9tIGRzc2VydmljZXMiLCJzZWxlY3QiKQogICAgICAgIGVsaWYgKGZvcm1yZXN1bHRbJ2FjdGlvbiddPT0iRGVsZXRlIik6CiAgICAgICAgICAgIHF1ZXJ5U3RyPSJkZWxldGUgZnJvbSBkc3NlcnZpY2VzIHdoZXJlIGlkPSd7fSciLmZvcm1hdChmb3JtcmVzdWx0WydpZCddKQogICAgICAgICAgICBjbGFzc2VzLmNsYXNzZXMuc3FsUXVlcnkocXVlcnlTdHIsImRlbGV0ZSIpCiAgICAgICAgICAgICMgQnVpbGQgdGhlIGxpc3QKICAgICAgICAgICAgcmVzdWx0PWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeSgic2VsZWN0ICogZnJvbSBkc3NlcnZpY2VzIiwic2VsZWN0IikKICAgICAgICBlbGlmIChmb3JtcmVzdWx0WydhY3Rpb24nXT09Im9yZGVyIGJ5IG5hbWUiKToKICAgICAgICAgICAgcmVzdWx0PWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeSgic2VsZWN0ICogZnJvbSBkc3NlcnZpY2VzIG9yZGVyIGJ5IG5hbWUgQVNDIiwic2VsZWN0IikKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXN1bHQ9Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KCJzZWxlY3QgKiBmcm9tIGRzc2VydmljZXMiLCJzZWxlY3QiKQogICAgZWxzZToKICAgICAgICByZXN1bHQ9Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KCJzZWxlY3QgKiBmcm9tIGRzc2VydmljZXMiLCJzZWxlY3QiKQogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBnZXRWTEFOaW5mbyhtY2lkKToKICAgICMgT2J0YWluIGFsbCBWTEFOIElEIGFuZCBuYW1lIGluZm9ybWF0aW9uCiAgICBxdWVyeVN0cj0ic2VsZWN0ICogZnJvbSBkZXZpY2VzIHdoZXJlIGlkPSd7fSciLmZvcm1hdChtY2lkKQogICAgbWNJbmZvPWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeShxdWVyeVN0ciwic2VsZWN0b25lIikKICAgIHN5c2luZm89anNvbi5sb2FkcyhtY0luZm9bJ3N5c2luZm8nXSkgCiAgICBjb29raWU9Y2xhc3Nlcy5jbGFzc2VzLmxvZ2lubWMobWNJbmZvWydpZCddKQogICAgIyBPYnRhaW4gdGhlIFZMQU4gbmFtZSBhbmQgSUQKICAgIGlmIHN5c2luZm9bJ19nbG9iYWwnXVsnX3N3aXRjaF9yb2xlJ109PSJtYXN0ZXIiOgogICAgICAgIHVybD0iY29uZmlndXJhdGlvbi9vYmplY3Qvdmxhbl9uYW1lX2lkP2NvbmZpZ19wYXRoPSUyRm1kJlVJREFSVUJBPSIKICAgIGVsc2U6CiAgICAgICAgdXJsPSJjb25maWd1cmF0aW9uL29iamVjdC92bGFuX25hbWVfaWQ/VUlEQVJVQkE9IgogICAgdmxhbnJlc3VsdD1jbGFzc2VzLmNsYXNzZXMuZ2V0UkVTVG1jKGNvb2tpZSx1cmwsbWNJbmZvWydpZCddKQogICAgdmxhbnJlc3VsdD12bGFucmVzdWx0WydfZGF0YSddCiAgICBjbGFzc2VzLmNsYXNzZXMubG9nb3V0bWMoY29va2llLG1jSW5mb1snaWQnXSkgCiAgICByZXR1cm4gdmxhbnJlc3VsdAoKZGVmIGdldFZMQU5pbnQobWNpZCwgdmxhbik6CiAgICAjIE9idGFpbiBWTEFOIGludGVyZmFjZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGdpdmVuIFZMQU4gSUQKICAgIHF1ZXJ5U3RyPSJzZWxlY3QgKiBmcm9tIGRldmljZXMgd2hlcmUgaWQ9J3t9JyIuZm9ybWF0KG1jaWQpCiAgICBtY0luZm89Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KHF1ZXJ5U3RyLCJzZWxlY3RvbmUiKQogICAgc3lzaW5mbz1qc29uLmxvYWRzKG1jSW5mb1snc3lzaW5mbyddKQogICAgY29va2llPWNsYXNzZXMuY2xhc3Nlcy5sb2dpbm1jKG1jSW5mb1snaWQnXSkKICAgICMgT2J0YWluIHRoZSByb2xlcwogICAgaWYgc3lzaW5mb1snX2dsb2JhbCddWydfc3dpdGNoX3JvbGUnXT09Im1hc3RlciI6CiAgICAgICAgdXJsPSJjb25maWd1cmF0aW9uL29iamVjdC9pbnRfdmxhbj9jb25maWdfcGF0aD0lMkZtZCZmaWx0ZXI9W3tcImludF92bGFuLmlkXCI6e1wiJGVxXCI6WyIgKyB2bGFuICsgIl19fV0mVUlEQVJVQkE9IgogICAgZWxzZToKICAgICAgICB1cmw9ImNvbmZpZ3VyYXRpb24vb2JqZWN0L2ludF92bGFuP2ZpbHRlcj1be1wiaW50X3ZsYW4uaWRcIjp7XCIkZXFcIjpbIiArIHZsYW4gKyAiXX19XSZVSURBUlVCQT0iCiAgICB2bGFucmVzdWx0PWNsYXNzZXMuY2xhc3Nlcy5nZXRSRVNUbWMoY29va2llLHVybCxtY0luZm9bJ2lkJ10pCiAgICB2bGFucmVzdWx0PXZsYW5yZXN1bHRbJ19kYXRhJ11bJ2ludF92bGFuJ11bMF0KICAgIGNsYXNzZXMuY2xhc3Nlcy5sb2dvdXRtYyhjb29raWUsbWNJbmZvWydpZCddKSAKICAgIHJldHVybiB2bGFucmVzdWx0CgpkZWYgZ2V0VkxBTmlkbmFtZShtY2lkLCB2bGFuKToKICAgICMgT2J0YWluIFZMQU4gaW5mb3JtYXRpb24gZm9yIHRoZSBnaXZlbiBWTEFOIElECiAgICBxdWVyeVN0cj0ic2VsZWN0ICogZnJvbSBkZXZpY2VzIHdoZXJlIGlkPSd7fSciLmZvcm1hdChtY2lkKQogICAgbWNJbmZvPWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeShxdWVyeVN0ciwic2VsZWN0b25lIikKICAgIHN5c2luZm89anNvbi5sb2FkcyhtY0luZm9bJ3N5c2luZm8nXSkgCiAgICBjb29raWU9Y2xhc3Nlcy5jbGFzc2VzLmxvZ2lubWMobWNJbmZvWydpZCddKQogICAgIyBPYnRhaW4gdGhlIFZMQU4gbmFtZSBhbmQgSUQKICAgIGlmIHN5c2luZm9bJ19nbG9iYWwnXVsnX3N3aXRjaF9yb2xlJ109PSJtYXN0ZXIiOgogICAgICAgIHVybD0iY29uZmlndXJhdGlvbi9vYmplY3Qvdmxhbl9uYW1lX2lkP2ZpbHRlcj1be1widmxhbl9uYW1lX2lkLnZsYW4taWRzXCI6e1wiJGVxXCI6W1wiIisgdmxhbiArICJcIl19fV0mY29uZmlnX3BhdGg9JTJGbWQmVUlEQVJVQkE9IgogICAgZWxzZToKICAgICAgICB1cmw9ImNvbmZpZ3VyYXRpb24vb2JqZWN0L3ZsYW5fbmFtZV9pZD9maWx0ZXI9W3tcInZsYW5fbmFtZV9pZC52bGFuLWlkc1wiOntcIiRlcVwiOltcIiIrIHZsYW4gKyAiXCJdfX1dJlVJREFSVUJBPSIKICAgIHZsYW5yZXN1bHQ9Y2xhc3Nlcy5jbGFzc2VzLmdldFJFU1RtYyhjb29raWUsdXJsLG1jSW5mb1snaWQnXSkKICAgIHZsYW5yZXN1bHQ9dmxhbnJlc3VsdFsnX2RhdGEnXVsndmxhbl9uYW1lX2lkJ11bMF0KICAgIGNsYXNzZXMuY2xhc3Nlcy5sb2dvdXRtYyhjb29raWUsbWNJbmZvWydpZCddKSAKICAgIHJldHVybiB2bGFucmVzdWx0CgpkZWYgZ2V0Um9sZXNpbmZvKG1jaWQpOgogICAgIyBPYnRhaW4gYWxsIHRoZSByb2xlcyBmcm9tIGEgZ2l2ZW4gTW9iaWxpdHkgQ29udHJvbGxlcgogICAgcXVlcnlTdHI9InNlbGVjdCBpZCwgZGVzY3JpcHRpb24sIGlwYWRkcmVzcyxzeXNpbmZvIGZyb20gZGV2aWNlcyB3aGVyZSBpZD0ne30nIi5mb3JtYXQobWNpZCkKICAgIG1jSW5mbz1jbGFzc2VzLmNsYXNzZXMuc3FsUXVlcnkocXVlcnlTdHIsInNlbGVjdG9uZSIpCiAgICBzeXNpbmZvPWpzb24ubG9hZHMobWNJbmZvWydzeXNpbmZvJ10pCiAgICBjb29raWU9Y2xhc3Nlcy5jbGFzc2VzLmxvZ2lubWMobWNJbmZvWydpZCddKQogICAgIyBPYnRhaW4gdGhlIHJvbGVzCiAgICBpZiBzeXNpbmZvWydfZ2xvYmFsJ11bJ19zd2l0Y2hfcm9sZSddPT0ibWFzdGVyIjoKICAgICAgICB1cmw9ImNvbmZpZ3VyYXRpb24vb2JqZWN0L3JvbGU/Y29uZmlnX3BhdGg9JTJGbWQmVUlEQVJVQkE9IgogICAgZWxzZToKICAgICAgICB1cmw9ImNvbmZpZ3VyYXRpb24vb2JqZWN0L3JvbGU/VUlEQVJVQkE9IgogICAgcm9sZXJlc3VsdD1jbGFzc2VzLmNsYXNzZXMuZ2V0UkVTVG1jKGNvb2tpZSx1cmwsbWNJbmZvWydpZCddKQogICAgcm9sZXJlc3VsdD1yb2xlcmVzdWx0WydfZGF0YSddCiAgICBjbGFzc2VzLmNsYXNzZXMubG9nb3V0bWMoY29va2llLG1jSW5mb1snaWQnXSkgCiAgICByZXR1cm4gcm9sZXJlc3VsdAoKZGVmIGdldFJvbGVpbmZvKG1jaWQscm9sZSk6CiAgICBxdWVyeVN0cj0ic2VsZWN0IGlkLCBkZXNjcmlwdGlvbiwgaXBhZGRyZXNzLHN5c2luZm8gZnJvbSBkZXZpY2VzIHdoZXJlIGlkPSd7fSciLmZvcm1hdChtY2lkKQogICAgbWNJbmZvPWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeShxdWVyeVN0ciwic2VsZWN0b25lIikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgc3lzaW5mbz1qc29uLmxvYWRzKG1jSW5mb1snc3lzaW5mbyddKQogICAgY29va2llPWNsYXNzZXMuY2xhc3Nlcy5sb2dpbm1jKG1jSW5mb1snaWQnXSkKICAgICMgT2J0YWluIHRoZSByb2xlcwogICAgaWYgc3lzaW5mb1snX2dsb2JhbCddWydfc3dpdGNoX3JvbGUnXT09Im1hc3RlciI6Cjx8ZmltX2VuZHw+"]
["e77106e807dbf8f7790938cb05b5045cd1cf5fe2-4","e77106e807dbf8f7790938cb05b5045cd1cf5fe2","PHxmaW1fcHJlZml4fD4KIyAoQykgQ29weXJpZ2h0IDIwMTkgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFAuCiMgR2VuZXJpYyBBcnViYSBEeW5hbWljIFNlZ21lbnRhdGlvbiBTZXJ2aWNlcyBjbGFzc2VzCgppbXBvcnQgY2xhc3Nlcy5jbGFzc2VzCmltcG9ydCByZXF1ZXN0cwpzZXNzaW9uaWQgPSByZXF1ZXN0cy5TZXNzaW9uKCkKCmltcG9ydCB1cmxsaWIzCmltcG9ydCBqc29uCnVybGxpYjMuZGlzYWJsZV93YXJuaW5ncyh1cmxsaWIzLmV4Y2VwdGlvbnMuSW5zZWN1cmVSZXF1ZXN0V2FybmluZykKCmRlZiBkc3NlcnZpY2VkYkFjdGlvbihmb3JtcmVzdWx0KToKICAgICMgVGhpcyBkZWZpbml0aW9uIGlzIGZvciBhbGwgdGhlIGRhdGFiYXNlIGFjdGlvbnMgZm9yIER5bmFtaWMgU2VnbWVudGF0aW9uIFNlcnZpY2VzLCBiYXNlZCBvbiB0aGUgdXNlciBjbGljayBvbiB0aGUgcGFnZXMKICAgIGlmKGJvb2woZm9ybXJlc3VsdCk9PVRydWUpOgogICAgICAgIGlmKGZvcm1yZXN1bHRbJ2FjdGlvbiddPT0iU3VibWl0IHNlcnZpY2UiKTogCiAgICAgICAgICAgIHF1ZXJ5U3RyPSJpbnNlcnQgaW50byBkc3NlcnZpY2VzIChuYW1lLHByb2ZpbGUscG9saWNpZXMpIHZhbHVlcyAoJ3t9Jywne30nLCd7fScpIi5mb3JtYXQoZm9ybXJlc3VsdFsnbmFtZSddLGZvcm1yZXN1bHRbJ3Byb2ZpbGUnXSxmb3JtcmVzdWx0Wydwb2xpY2llcyddKQogICAgICAgICAgICBzZXJ2aWNlaWQ9Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KHF1ZXJ5U3RyLCJpbnNlcnQiKQogICAgICAgICAgICAjIEJ1aWxkIHRoZSBsaXN0CiAgICAgICAgICAgIHJlc3VsdD1jbGFzc2VzLmNsYXNzZXMuc3FsUXVlcnkoInNlbGVjdCAqIGZyb20gZHNzZXJ2aWNlcyIsInNlbGVjdCIpCiAgICAgICAgZWxpZiAgKGZvcm1yZXN1bHRbJ2FjdGlvbiddPT0iU3VibWl0IGNoYW5nZXMiKToKICAgICAgICAgICAgcXVlcnlTdHI9InVwZGF0ZSBkc3NlcnZpY2VzIHNldCBuYW1lPSd7fScscHJvZmlsZT0ne30nLCBwb2xpY2llcz0ne30nIHdoZXJlIGlkPSd7fSciIFwKICAgICAgICAgICAgICAgIC5mb3JtYXQoZm9ybXJlc3VsdFsnbmFtZSddLGZvcm1yZXN1bHRbJ3Byb2ZpbGUnXSxmb3JtcmVzdWx0Wydwb2xpY2llcyddLGZvcm1yZXN1bHRbJ2lkJ10pCiAgICAgICAgICAgIGNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeShxdWVyeVN0ciwidXBkYXRlIikKICAgICAgICAgICAgIyBCdWlsZCB0aGUgbGlzdAogICAgICAgICAgICByZXN1bHQ9Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KCJzZWxlY3QgKiBmcm9tIGRzc2VydmljZXMiLCJzZWxlY3QiKQogICAgICAgIGVsaWYgKGZvcm1yZXN1bHRbJ2FjdGlvbiddPT0iRGVsZXRlIik6CiAgICAgICAgICAgIHF1ZXJ5U3RyPSJkZWxldGUgZnJvbSBkc3NlcnZpY2VzIHdoZXJlIGlkPSd7fSciLmZvcm1hdChmb3JtcmVzdWx0WydpZCddKQogICAgICAgICAgICBjbGFzc2VzLmNsYXNzZXMuc3FsUXVlcnkocXVlcnlTdHIsImRlbGV0ZSIpCiAgICAgICAgICAgICMgQnVpbGQgdGhlIGxpc3QKICAgICAgICAgICAgcmVzdWx0PWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeSgic2VsZWN0ICogZnJvbSBkc3NlcnZpY2VzIiwic2VsZWN0IikKICAgICAgICBlbGlmIChmb3JtcmVzdWx0WydhY3Rpb24nXT09Im9yZGVyIGJ5IG5hbWUiKToKICAgICAgICAgICAgcmVzdWx0PWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeSgic2VsZWN0ICogZnJvbSBkc3NlcnZpY2VzIG9yZGVyIGJ5IG5hbWUgQVNDIiwic2VsZWN0IikKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXN1bHQ9Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KCJzZWxlY3QgKiBmcm9tIGRzc2VydmljZXMiLCJzZWxlY3QiKQogICAgZWxzZToKICAgICAgICByZXN1bHQ9Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KCJzZWxlY3QgKiBmcm9tIGRzc2VydmljZXMiLCJzZWxlY3QiKQogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBnZXRWTEFOaW5mbyhtY2lkKToKICAgICMgT2J0YWluIGFsbCBWTEFOIElEIGFuZCBuYW1lIGluZm9ybWF0aW9uCiAgICBxdWVyeVN0cj0ic2VsZWN0ICogZnJvbSBkZXZpY2VzIHdoZXJlIGlkPSd7fSciLmZvcm1hdChtY2lkKQogICAgbWNJbmZvPWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeShxdWVyeVN0ciwic2VsZWN0b25lIikKICAgIHN5c2luZm89anNvbi5sb2FkcyhtY0luZm9bJ3N5c2luZm8nXSkgCiAgICBjb29raWU9Y2xhc3Nlcy5jbGFzc2VzLmxvZ2lubWMobWNJbmZvWydpZCddKQogICAgIyBPYnRhaW4gdGhlIFZMQU4gbmFtZSBhbmQgSUQKICAgIGlmIHN5c2luZm9bJ19nbG9iYWwnXVsnX3N3aXRjaF9yb2xlJ109PSJtYXN0ZXIiOgogICAgICAgIHVybD0iY29uZmlndXJhdGlvbi9vYmplY3Qvdmxhbl9uYW1lX2lkP2NvbmZpZ19wYXRoPSUyRm1kJlVJREFSVUJBPSIKICAgIGVsc2U6CiAgICAgICAgdXJsPSJjb25maWd1cmF0aW9uL29iamVjdC92bGFuX25hbWVfaWQ/VUlEQVJVQkE9IgogICAgdmxhbnJlc3VsdD1jbGFzc2VzLmNsYXNzZXMuZ2V0UkVTVG1jKGNvb2tpZSx1cmwsbWNJbmZvWydpZCddKQogICAgdmxhbnJlc3VsdD12bGFucmVzdWx0WydfZGF0YSddCiAgICBjbGFzc2VzLmNsYXNzZXMubG9nb3V0bWMoY29va2llLG1jSW5mb1snaWQnXSkgCiAgICByZXR1cm4gdmxhbnJlc3VsdAoKZGVmIGdldFZMQU5pbnQobWNpZCwgdmxhbik6CiAgICAjIE9idGFpbiBWTEFOIGludGVyZmFjZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGdpdmVuIFZMQU4gSUQKICAgIHF1ZXJ5U3RyPSJzZWxlY3QgKiBmcm9tIGRldmljZXMgd2hlcmUgaWQ9J3t9JyIuZm9ybWF0KG1jaWQpCiAgICBtY0luZm89Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KHF1ZXJ5U3RyLCJzZWxlY3RvbmUiKQogICAgc3lzaW5mbz1qc29uLmxvYWRzKG1jSW5mb1snc3lzaW5mbyddKQogICAgY29va2llPWNsYXNzZXMuY2xhc3Nlcy5sb2dpbm1jKG1jSW5mb1snaWQnXSkKICAgICMgT2J0YWluIHRoZSByb2xlcwogICAgaWYgc3lzaW5mb1snX2dsb2JhbCddWydfc3dpdGNoX3JvbGUnXT09Im1hc3RlciI6CiAgICAgICAgdXJsPSJjb25maWd1cmF0aW9uL29iamVjdC9pbnRfdmxhbj9jb25maWdfcGF0aD0lMkZtZCZmaWx0ZXI9W3tcImludF92bGFuLmlkXCI6e1wiJGVxXCI6WyIgKyB2bGFuICsgIl19fV0mVUlEQVJVQkE9IgogICAgZWxzZToKICAgICAgICB1cmw9ImNvbmZpZ3VyYXRpb24vb2JqZWN0L2ludF92bGFuP2ZpbHRlcj1be1wiaW50X3ZsYW4uaWRcIjp7XCIkZXFcIjpbIiArIHZsYW4gKyAiXX19XSZVSURBUlVCQT0iCiAgICB2bGFucmVzdWx0PWNsYXNzZXMuY2xhc3Nlcy5nZXRSRVNUbWMoY29va2llLHVybCxtY0luZm9bJ2lkJ10pCiAgICB2bGFucmVzdWx0PXZsYW5yZXN1bHRbJ19kYXRhJ11bJ2ludF92bGFuJ11bMF0KICAgIGNsYXNzZXMuY2xhc3Nlcy5sb2dvdXRtYyhjb29raWUsbWNJbmZvWydpZCddKSAKICAgIHJldHVybiB2bGFucmVzdWx0CgpkZWYgZ2V0VkxBTmlkbmFtZShtY2lkLCB2bGFuKToKICAgICMgT2J0YWluIFZMQU4gaW5mb3JtYXRpb24gZm9yIHRoZSBnaXZlbiBWTEFOIElECiAgICBxdWVyeVN0cj0ic2VsZWN0ICogZnJvbSBkZXZpY2VzIHdoZXJlIGlkPSd7fSciLmZvcm1hdChtY2lkKQogICAgbWNJbmZvPWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeShxdWVyeVN0ciwic2VsZWN0b25lIikKICAgIHN5c2luZm89anNvbi5sb2FkcyhtY0luZm9bJ3N5c2luZm8nXSkgCiAgICBjb29raWU9Y2xhc3Nlcy5jbGFzc2VzLmxvZ2lubWMobWNJbmZvWydpZCddKQogICAgIyBPYnRhaW4gdGhlIFZMQU4gbmFtZSBhbmQgSUQKICAgIGlmIHN5c2luZm9bJ19nbG9iYWwnXVsnX3N3aXRjaF9yb2xlJ109PSJtYXN0ZXIiOgogICAgICAgIHVybD0iY29uZmlndXJhdGlvbi9vYmplY3Qvdmxhbl9uYW1lX2lkP2ZpbHRlcj1be1widmxhbl9uYW1lX2lkLnZsYW4taWRzXCI6e1wiJGVxXCI6W1wiIisgdmxhbiArICJcIl19fV0mY29uZmlnX3BhdGg9JTJGbWQmVUlEQVJVQkE9IgogICAgZWxzZToKICAgICAgICB1cmw9ImNvbmZpZ3VyYXRpb24vb2JqZWN0L3ZsYW5fbmFtZV9pZD9maWx0ZXI9W3tcInZsYW5fbmFtZV9pZC52bGFuLWlkc1wiOntcIiRlcVwiOltcIiIrIHZsYW4gKyAiXCJdfX1dJlVJREFSVUJBPSIKICAgIHZsYW5yZXN1bHQ9Y2xhc3Nlcy5jbGFzc2VzLmdldFJFU1RtYyhjb29raWUsdXJsLG1jSW5mb1snaWQnXSkKICAgIHZsYW5yZXN1bHQ9dmxhbnJlc3VsdFsnX2RhdGEnXVsndmxhbl9uYW1lX2lkJ11bMF0KICAgIGNsYXNzZXMuY2xhc3Nlcy5sb2dvdXRtYyhjb29raWUsbWNJbmZvWydpZCddKSAKICAgIHJldHVybiB2bGFucmVzdWx0CgpkZWYgZ2V0Um9sZXNpbmZvKG1jaWQpOgogICAgIyBPYnRhaW4gYWxsIHRoZSByb2xlcyBmcm9tIGEgZ2l2ZW4gTW9iaWxpdHkgQ29udHJvbGxlcgogICAgcXVlcnlTdHI9InNlbGVjdCBpZCwgZGVzY3JpcHRpb24sIGlwYWRkcmVzcyxzeXNpbmZvIGZyb20gZGV2aWNlcyB3aGVyZSBpZD0ne30nIi5mb3JtYXQobWNpZCkKICAgIG1jSW5mbz1jbGFzc2VzLmNsYXNzZXMuc3FsUXVlcnkocXVlcnlTdHIsInNlbGVjdG9uZSIpCiAgICBzeXNpbmZvPWpzb24ubG9hZHMobWNJbmZvWydzeXNpbmZvJ10pCiAgICBjb29raWU9Y2xhc3Nlcy5jbGFzc2VzLmxvZ2lubWMobWNJbmZvWydpZCddKQogICAgIyBPYnRhaW4gdGhlIHJvbGVzCiAgICBpZiBzeXNpbmZvWydfZ2xvYmFsJ11bJ19zd2l0Y2hfcm9sZSddPT0ibWFzdGVyIjoKICAgICAgICB1cmw9ImNvbmZpZ3VyYXRpb24vb2JqZWN0L3JvbGU/Y29uZmlnX3BhdGg9JTJGbWQmVUlEQVJVQkE9IgogICAgZWxzZToKICAgICAgICB1cmw9ImNvbmZpZ3VyYXRpb24vb2JqZWN0L3JvbGU/VUlEQVJVQkE9IgogICAgcm9sZXJlc3VsdD1jbGFzc2VzLmNsYXNzZXMuZ2V0UkVTVG1jKGNvb2tpZSx1cmwsbWNJbmZvWydpZCddKQogICAgcm9sZXJlc3VsdD1yb2xlcmVzdWx0WydfZGF0YSddCiAgICBjbGFzc2VzLmNsYXNzZXMubG9nb3V0bWMoY29va2llLG1jSW5mb1snaWQnXSkgCiAgICByZXR1cm4gcm9sZXJlc3VsdAoKZGVmIGdldFJvbGVpbmZvKG1jaWQscm9sZSk6CiAgICBxdWVyeVN0cj0ic2VsZWN0IGlkLCBkZXNjcmlwdGlvbiwgaXBhZGRyZXNzLHN5c2luZm8gZnJvbSBkZXZpY2VzIHdoZXJlIGlkPSd7fSciLmZvcm1hdChtY2lkKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBtY0luZm89Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KHF1ZXJ5U3RyLCJzZWxlY3RvbmUiKQogICAgc3lzaW5mbz1qc29uLmxvYWRzKG1jSW5mb1snc3lzaW5mbyddKQogICAgY29va2llPWNsYXNzZXMuY2xhc3Nlcy5sb2dpbm1jKG1jSW5mb1snaWQnXSkKICAgICMgT2J0YWluIHRoZSByb2xlcwo8fGZpbV9lbmR8Pg=="]
["e77106e807dbf8f7790938cb05b5045cd1cf5fe2-5","e77106e807dbf8f7790938cb05b5045cd1cf5fe2","PHxmaW1fcHJlZml4fD4KIyAoQykgQ29weXJpZ2h0IDIwMTkgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFAuCiMgR2VuZXJpYyBBcnViYSBEeW5hbWljIFNlZ21lbnRhdGlvbiBTZXJ2aWNlcyBjbGFzc2VzCgppbXBvcnQgY2xhc3Nlcy5jbGFzc2VzCmltcG9ydCByZXF1ZXN0cwpzZXNzaW9uaWQgPSByZXF1ZXN0cy5TZXNzaW9uKCkKCmltcG9ydCB1cmxsaWIzCmltcG9ydCBqc29uCnVybGxpYjMuZGlzYWJsZV93YXJuaW5ncyh1cmxsaWIzLmV4Y2VwdGlvbnMuSW5zZWN1cmVSZXF1ZXN0V2FybmluZykKCmRlZiBkc3NlcnZpY2VkYkFjdGlvbihmb3JtcmVzdWx0KToKICAgICMgVGhpcyBkZWZpbml0aW9uIGlzIGZvciBhbGwgdGhlIGRhdGFiYXNlIGFjdGlvbnMgZm9yIER5bmFtaWMgU2VnbWVudGF0aW9uIFNlcnZpY2VzLCBiYXNlZCBvbiB0aGUgdXNlciBjbGljayBvbiB0aGUgcGFnZXMKICAgIGlmKGJvb2woZm9ybXJlc3VsdCk9PVRydWUpOgogICAgICAgIGlmKGZvcm1yZXN1bHRbJ2FjdGlvbiddPT0iU3VibWl0IHNlcnZpY2UiKTogCiAgICAgICAgICAgIHF1ZXJ5U3RyPSJpbnNlcnQgaW50byBkc3NlcnZpY2VzIChuYW1lLHByb2ZpbGUscG9saWNpZXMpIHZhbHVlcyAoJ3t9Jywne30nLCd7fScpIi5mb3JtYXQoZm9ybXJlc3VsdFsnbmFtZSddLGZvcm1yZXN1bHRbJ3Byb2ZpbGUnXSxmb3JtcmVzdWx0Wydwb2xpY2llcyddKQogICAgICAgICAgICBzZXJ2aWNlaWQ9Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KHF1ZXJ5U3RyLCJpbnNlcnQiKQogICAgICAgICAgICAjIEJ1aWxkIHRoZSBsaXN0CiAgICAgICAgICAgIHJlc3VsdD1jbGFzc2VzLmNsYXNzZXMuc3FsUXVlcnkoInNlbGVjdCAqIGZyb20gZHNzZXJ2aWNlcyIsInNlbGVjdCIpCiAgICAgICAgZWxpZiAgKGZvcm1yZXN1bHRbJ2FjdGlvbiddPT0iU3VibWl0IGNoYW5nZXMiKToKICAgICAgICAgICAgcXVlcnlTdHI9InVwZGF0ZSBkc3NlcnZpY2VzIHNldCBuYW1lPSd7fScscHJvZmlsZT0ne30nLCBwb2xpY2llcz0ne30nIHdoZXJlIGlkPSd7fSciIFwKICAgICAgICAgICAgICAgIC5mb3JtYXQoZm9ybXJlc3VsdFsnbmFtZSddLGZvcm1yZXN1bHRbJ3Byb2ZpbGUnXSxmb3JtcmVzdWx0Wydwb2xpY2llcyddLGZvcm1yZXN1bHRbJ2lkJ10pCiAgICAgICAgICAgIGNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeShxdWVyeVN0ciwidXBkYXRlIikKICAgICAgICAgICAgIyBCdWlsZCB0aGUgbGlzdAogICAgICAgICAgICByZXN1bHQ9Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KCJzZWxlY3QgKiBmcm9tIGRzc2VydmljZXMiLCJzZWxlY3QiKQogICAgICAgIGVsaWYgKGZvcm1yZXN1bHRbJ2FjdGlvbiddPT0iRGVsZXRlIik6CiAgICAgICAgICAgIHF1ZXJ5U3RyPSJkZWxldGUgZnJvbSBkc3NlcnZpY2VzIHdoZXJlIGlkPSd7fSciLmZvcm1hdChmb3JtcmVzdWx0WydpZCddKQogICAgICAgICAgICBjbGFzc2VzLmNsYXNzZXMuc3FsUXVlcnkocXVlcnlTdHIsImRlbGV0ZSIpCiAgICAgICAgICAgICMgQnVpbGQgdGhlIGxpc3QKICAgICAgICAgICAgcmVzdWx0PWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeSgic2VsZWN0ICogZnJvbSBkc3NlcnZpY2VzIiwic2VsZWN0IikKICAgICAgICBlbGlmIChmb3JtcmVzdWx0WydhY3Rpb24nXT09Im9yZGVyIGJ5IG5hbWUiKToKICAgICAgICAgICAgcmVzdWx0PWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeSgic2VsZWN0ICogZnJvbSBkc3NlcnZpY2VzIG9yZGVyIGJ5IG5hbWUgQVNDIiwic2VsZWN0IikKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXN1bHQ9Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KCJzZWxlY3QgKiBmcm9tIGRzc2VydmljZXMiLCJzZWxlY3QiKQogICAgZWxzZToKICAgICAgICByZXN1bHQ9Y2xhc3Nlcy5jbGFzc2VzLnNxbFF1ZXJ5KCJzZWxlY3QgKiBmcm9tIGRzc2VydmljZXMiLCJzZWxlY3QiKQogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBnZXRWTEFOaW5mbyhtY2lkKToKICAgICMgT2J0YWluIGFsbCBWTEFOIElEIGFuZCBuYW1lIGluZm9ybWF0aW9uCiAgICBxdWVyeVN0cj0ic2VsZWN0ICogZnJvbSBkZXZpY2VzIHdoZXJlIGlkPSd7fSciLmZvcm1hdChtY2lkKQogICAgbWNJbmZvPWNsYXNzZXMuY2xhc3Nlcy5zcWxRdWVyeShxdWVyeVN0ciwic2VsZWN0b25lIikKICAgIHN5c2luZm89anNvbi5sb2FkcyhtY0luZm9bJ3N5c2luZm8nXSkgCiAgICBjb29raWU9Y2xhc3Nlcy5jbGFzc2VzLmxvZ2lubWMobWNJbmZvWydpZCddKQogICAgIyBPYnRhaW4gdGhlIFZMQU4gbmFtZSBhbmQgSUQKICAgIGlmIHN5c2luZm9bJ19nbG9iYWwnXVsnX3N3aXRjaF9yb2xlJ109PSJtYXN0ZXIiOgogICAgICAgIHVybD0iY29uZmlndXJhdGlvbi9vYmplY3Qvdmxhbl9uYW1lX2lkP2NvbmZpZ19wYXRoPSUyRm1kJlVJREFSVUJBPSIKICAgIGVsc2U6CiAgICAgICAgdXJsPSJjb25maWd1cmF0aW9uL29iamVjdC92bGFuX25hbWVfaWQ/VUlEQVJVQkE9IgogICAgdmxhbnJlc3VsdD1jbGFzc2VzLmNsYXNzZXMuZ2V0UkVTVG1jKGNvb2tpZSx1cmwsbWNJbmZvWydpZCddKQogICAgdmxhbnJlc3VsdD12bGFucmVzdWx0WydfZGF0YSddCiAgICBjbGFzc2VzLmNsYXNzZXMubG9nb3V0bWMoY29va2llLG1jSW5mb1snaWQnXSkgCiAgICByZXR1cm4gdmxhbnJlc3VsdAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpkZWYgZ2V0VkxBTmludChtY2lkLCB2bGFuKToKICAgICMgT2J0YWluIFZMQU4gaW50ZXJmYWNlIGluZm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gVkxBTiBJRAogICAgcXVlcnlTdHI9InNlbGVjdCAqIGZyb20gZGV2aWNlcyB3aGVyZSBpZD0ne30nIi5mb3JtYXQobWNpZCkKICAgIG1jSW5mbz1jbGFzc2VzLmNsYXNzZXMuc3FsUXVlcnkocXVlcnlTdHIsInNlbGVjdG9uZSIpCjx8ZmltX2VuZHw+"]
["ec0f79b2dd6b51f612c118cfb37c32eafb37d7b7-1","ec0f79b2dd6b51f612c118cfb37c32eafb37d7b7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCgoKY2xhc3MgVmFsaWRhdGU6CiAgICByZWdsaXN0ID0gewogICAgICAgICdDSCc6IHInW15cdTAwMDAtXHUwMEZGXSonLCAgIyDnuq/mloflrZcKICAgICAgICAnbnVtYmVyJzogcicoWy1dP1swLTldKyhcLlswLTldKyl7MCwxfSknLCAgIyDmraPotJ/mlbDvvIzlsI/mlbAKICAgICAgICAncG9zaXRpdmUnOiByJyhbMC05XSsoXC5bMC05XSspezAsMX0pJywgICMg5q2j5pWwCiAgICAgICAgJ3Bvc2l0aXZlX2ludGVnZXInOiByJyhbMC05XSspJywgICMg5q2j5pW05pWwCgogICAgICAgICdtb250aCc6IHInKDA/WzEtOV18MVswLTJdKScsICAjIOaciOS7vQogICAgICAgICdkYXknOiByJygoMD9bMS05XSl8KCgxfDIpWzAtOV0pfCgzWzAxXSkpJywgICMg5aSp5pWwCiAgICAgICAgJ3RpbWUnOiByJygwP1sxLTldfDFbMC05XXwyWzAtNF0pKCg6fC18XC98XFwpKDA/WzAtOV18WzEtNV1bMC05XSkpezJ9JywKCiAgICAgICAgJ3VzZXJuYW1lJzogcidbYS16QS1aMC05X1wtXXsxLH0nLCAgIyDnlKjmiLflkI3vvJrplb/luqboh7PlsJHkuLox77yM5YyF5ZCr5aSn5bCP5YaZ5a2X5q+N44CB5pWw5a2X44CBX+OAgS0KICAgICAgICAncGFzc3dvcmQnOiByJ1thLXpBLVowLTldezYsfScsICAjIOWvhuegge+8muWkp+Wwj+WGmeWtl+avjeaIluaVsOWtl++8jOmVv+W6puiHs+WwkTbkvY0KICAgICAgICAncGFzc3dvcmRfZWFzeSc6IHInLns2LDE2fScsICAjIOWvhuegge+8mjbliLAxNuS9jeeahOS7u+aEj++8iOmZpOW8gOaWnOe6v++8iQogICAgICAgICdwYXNzd29yZF9oYXJkJzogcicoPz0uKlswLTldKSg/PS4qW2EtekEtWl0pKC57NiwxMn0pJywgICMg5a+G56CB77ya5pWw5a2XICsg5a2X5q+N77yI5aSn5YaZ5oiW5bCP5YaZ77yJICsg6ZW/5bqmNuWIsDEy5L2NCiAgICAgICAgJ3Bhc3N3b3JkX2hhcmQxJzogcicoPz0uKlswLTldKSg/PS4qW0EtWl0pKD89LipbYS16XSkoLns4LH0pJywgICMg5a+G56CB77ya5pWw5a2XICsg5a2X5q+N77yI5aSn5YaZ5ZKM5bCP5YaZ77yJICsg6ZW/5bqmNuWIsDEy5L2NCgogICAgICAgICdkYXRlJzogcidbMS05XVswLTldezAsM30oPzrlubR8XHx8XFx8XC98XHN8LHzjgIF8LSkoMD9bMS05XXwxWzAtMl0pKD865pyIfFx8fFxcfFwvfFxzfCx844CBfC0pKCgwP1sxLTldKXwoKDF8MilbMC05XSl8KDNbMDFdKSnml6U/JywKICAgICAgICAnYmlydGhkYXknOiByJygxOXwyMClbMC05XXsyfSg6fC18XC98XFwpKCgoMD9bMS05XXwxWzAtMl0pKDp8LXxcL3xcXCkoMD9bMS05XXwxWzAtOV18MlswLTldKSl8KCgwP1sxMy05XXwxWzAtMl0pKDp8LXxcL3xcXCkoMzApKXwoKDA/WzEzNTc4XXwxWzAyXSkoOnwtfFwvfFxcKSgzMSkpKScsCiAgICAgICAgJ2JpcnRoZGF5X2hhcmQnOiByJygoWzAtOV17M31bMS05XXxbMC05XXsyfVsxLTldWzAtOV17MX18WzAtOV17MX1bMS05XVswLTldezJ9fFsxLTldWzAtOV17M30pLSgoKDBbMTM1NzhdfDFbMDJdKS0oMFsxLTldfFsxMl1bMC05XXwzWzAxXSkpfCgoMFs0NjldfDExKS0oMFsxLTldfFsxMl1bMC05XXwzMCkpfCgwMi0oMFsxLTldfFsxXVswLTldfDJbMC04XSkpKSl8KCgoWzAtOV17Mn0pKDBbNDhdfFsyNDY4XVswNDhdfFsxMzU3OV1bMjZdKXwoKDBbNDhdfFsyNDY4XVswNDhdfFszNTc5XVsyNl0pMDApKS0wMi0yOSknLAoKICAgICAgICAnY3JlZGl0JzogJ1sxLTldWzAtOV17NX1bMS05XVswLTldezN9KCgwWzAtOV0pfCgxWzAtMl0pKSgoWzB8MXwyXVswLTldKXwzWzAtMV0pWzAtOV17M30oWzAtOV18eHxYKScsCiAgICAgICAgJ2NhcmNvZGUnOiAnW1x1NEUwMC1cdTlGQTVdezF9W0EtWl17MX1bQS1aMC05XXs1fScsICAjIOi9pueJjAoKICAgICAgICAncXEnOiByJ1sxLTldWzAtOV17NCx9JywKICAgICAgICAnZmF4JzogcideWytdezAsMX0oWzAtOV0pezEsM31bIF0/KFstXT8oKFswLTldKXxbIF0pezEsMTJ9KSsnLCAgIyDkvKDnnJ8KICAgICAgICAncGhvbmVfY29tbW9uJzogcicoWzAtOV17M30tWzAtOV17OH18WzAtOV17NH0tWzAtOV17N318WzAtOV17OH18MVswLTldezEwfSknLAogICAgICAgICdwaG9uZSc6IHInKFwoKCgwMTApfCgwMjEpfCgwXGR7Myw0fSkpXCkoID8pKFswLTldezcsOH0pKXwoKDAxMHwwMjF8MFxkezMsNH0pKShbLSBdezEsMn0pKFswLTldezcsOH0pJywKICAgICAgICAnbW9iaWxlJzogcicoKDEzWzAtOV0pfDE0N3woMTVbMC0zNS05XSl8MTgwfDE4MnwoMThbNS05XSkpWzAtOV17OH0nLCAgIyDmiYvmnLoKICAgICAgICAnZW1haWwnOiByJyhbYS16QS1aMC05X1wuXC1dKStcQChbYS16QS1aMC05XC1dKSsoXC4oW2EtekEtWjAtOV17Miw2fSkpKycsICAjIOmCruS7tgogICAgICAgICd1cmwnOiByJygoW2EtekEtWl0rKSg6XC9cLykpPyhbYS16QS1aXSspXC4oXHcrKVwuKFtcdy5dKykoXC8oW1x3XSspXC8/KSooXC9bYS16QS1aMC05XStcLihcdyspKSooXC8oW1x3XSspXC8/KSooXD8oXHcrPT9bXHddKikpKigoJj9cdys9P1tcd10qKSkqJywKICAgICAgICAjIFVSTDEKICAgICAgICAnVVJMJzogcicoKGh0dHB8ZnRwfGh0dHBzKTovLyk/KChbYS16QS1aMC05XC5fLV0rXC5bYS16QS1aXXsyLDZ9KXwoWzAtOV17MSwzfShcLlswLTldezEsM30pezN9KSkoOlswLTldezEsNH0pKigvW2EtekEtWjAtOVwmJV9cLi8tfi1dKik/JywKICAgICAgICAjIFVSTDIKICAgICAgICAnaXB2NEFnZW50JzogcicoMTkyXC4xNjhcLnwxNjlcLjI1NFwufDEwXC58MTcyXC4oMVs2LTldfDJbMC05XXwzWzAxXSkpJywgICMgaXB2NOengeacieWcsOWdgAogICAgICAgICdpcHY0JzogcidbMC05XXsxLDN9KFwuWzAtOV17MSwzfSl7M30nLCAgIyBpcHY05Zyw5Z2ACiAgICAgICAgJ2lwdjYnOiByJ1thLWYwLTldezEsNH0oOlthLWYwLTldezEsNH0pezd9KScsICAjIGlwdjblnLDlnYAKICAgICAgICAnanNvbl9oZWFkZXInOiByJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsICAjIGpzb25faGVhZGVyCiAgICAgICAgJ3JlcXVlc3RfaGVhZGVyJzogcidodHRwdXRpbCcsICAjIHJlcXVlc3RfaGVhZGVyCiAgICAgICAgJ2FsbCc6IHInLionLCAgIyDmiYDmnIkKICAgIH0KCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBfZmluZF9yZWcoc2VsZiwgcmVnX3R5cGUpOgogICAgICAgIGlmIHJlZ190eXBlIGluIHNlbGYucmVnbGlzdDoKICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVnbGlzdFtyZWdfdHlwZV0KICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBjaGVjayhjbHMsIHZhbHVlLCByZWdfdHlwZT0iYWxsIik6CiAgICAgICAgdHJ5Ogo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICMgcHJpbnQgcmUubWF0Y2gocideezB9JCcuZm9ybWF0KGNscy5fZmluZF9yZWcocmVnX3R5cGUpKSwgdmFsdWUsIHJlLk0pLmdyb3VwKCkKICAgICAgICAgICAgcmV0dXJuIHJlLm1hdGNoKHInXnswfSQnLmZvcm1hdChjbHMuX2ZpbmRfcmVnKHJlZ190eXBlKSksIHZhbHVlLCByZS5NKSBpcyBub3QgTm9uZQo8fGZpbV9lbmR8Pg=="]
["ec0f79b2dd6b51f612c118cfb37c32eafb37d7b7-2","ec0f79b2dd6b51f612c118cfb37c32eafb37d7b7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCgoKY2xhc3MgVmFsaWRhdGU6CiAgICByZWdsaXN0ID0gewogICAgICAgICdDSCc6IHInW15cdTAwMDAtXHUwMEZGXSonLCAgIyDnuq/mloflrZcKICAgICAgICAnbnVtYmVyJzogcicoWy1dP1swLTldKyhcLlswLTldKyl7MCwxfSknLCAgIyDmraPotJ/mlbDvvIzlsI/mlbAKICAgICAgICAncG9zaXRpdmUnOiByJyhbMC05XSsoXC5bMC05XSspezAsMX0pJywgICMg5q2j5pWwCiAgICAgICAgJ3Bvc2l0aXZlX2ludGVnZXInOiByJyhbMC05XSspJywgICMg5q2j5pW05pWwCgogICAgICAgICdtb250aCc6IHInKDA/WzEtOV18MVswLTJdKScsICAjIOaciOS7vQogICAgICAgICdkYXknOiByJygoMD9bMS05XSl8KCgxfDIpWzAtOV0pfCgzWzAxXSkpJywgICMg5aSp5pWwCiAgICAgICAgJ3RpbWUnOiByJygwP1sxLTldfDFbMC05XXwyWzAtNF0pKCg6fC18XC98XFwpKDA/WzAtOV18WzEtNV1bMC05XSkpezJ9JywKCiAgICAgICAgJ3VzZXJuYW1lJzogcidbYS16QS1aMC05X1wtXXsxLH0nLCAgIyDnlKjmiLflkI3vvJrplb/luqboh7PlsJHkuLox77yM5YyF5ZCr5aSn5bCP5YaZ5a2X5q+N44CB5pWw5a2X44CBX+OAgS0KICAgICAgICAncGFzc3dvcmQnOiByJ1thLXpBLVowLTldezYsfScsICAjIOWvhuegge+8muWkp+Wwj+WGmeWtl+avjeaIluaVsOWtl++8jOmVv+W6puiHs+WwkTbkvY0KICAgICAgICAncGFzc3dvcmRfZWFzeSc6IHInLns2LDE2fScsICAjIOWvhuegge+8mjbliLAxNuS9jeeahOS7u+aEj++8iOmZpOW8gOaWnOe6v++8iQogICAgICAgICdwYXNzd29yZF9oYXJkJzogcicoPz0uKlswLTldKSg/PS4qW2EtekEtWl0pKC57NiwxMn0pJywgICMg5a+G56CB77ya5pWw5a2XICsg5a2X5q+N77yI5aSn5YaZ5oiW5bCP5YaZ77yJICsg6ZW/5bqmNuWIsDEy5L2NCiAgICAgICAgJ3Bhc3N3b3JkX2hhcmQxJzogcicoPz0uKlswLTldKSg/PS4qW0EtWl0pKD89LipbYS16XSkoLns4LH0pJywgICMg5a+G56CB77ya5pWw5a2XICsg5a2X5q+N77yI5aSn5YaZ5ZKM5bCP5YaZ77yJICsg6ZW/5bqmNuWIsDEy5L2NCgogICAgICAgICdkYXRlJzogcidbMS05XVswLTldezAsM30oPzrlubR8XHx8XFx8XC98XHN8LHzjgIF8LSkoMD9bMS05XXwxWzAtMl0pKD865pyIfFx8fFxcfFwvfFxzfCx844CBfC0pKCgwP1sxLTldKXwoKDF8MilbMC05XSl8KDNbMDFdKSnml6U/JywKICAgICAgICAnYmlydGhkYXknOiByJygxOXwyMClbMC05XXsyfSg6fC18XC98XFwpKCgoMD9bMS05XXwxWzAtMl0pKDp8LXxcL3xcXCkoMD9bMS05XXwxWzAtOV18MlswLTldKSl8KCgwP1sxMy05XXwxWzAtMl0pKDp8LXxcL3xcXCkoMzApKXwoKDA/WzEzNTc4XXwxWzAyXSkoOnwtfFwvfFxcKSgzMSkpKScsCiAgICAgICAgJ2JpcnRoZGF5X2hhcmQnOiByJygoWzAtOV17M31bMS05XXxbMC05XXsyfVsxLTldWzAtOV17MX18WzAtOV17MX1bMS05XVswLTldezJ9fFsxLTldWzAtOV17M30pLSgoKDBbMTM1NzhdfDFbMDJdKS0oMFsxLTldfFsxMl1bMC05XXwzWzAxXSkpfCgoMFs0NjldfDExKS0oMFsxLTldfFsxMl1bMC05XXwzMCkpfCgwMi0oMFsxLTldfFsxXVswLTldfDJbMC04XSkpKSl8KCgoWzAtOV17Mn0pKDBbNDhdfFsyNDY4XVswNDhdfFsxMzU3OV1bMjZdKXwoKDBbNDhdfFsyNDY4XVswNDhdfFszNTc5XVsyNl0pMDApKS0wMi0yOSknLAoKICAgICAgICAnY3JlZGl0JzogJ1sxLTldWzAtOV17NX1bMS05XVswLTldezN9KCgwWzAtOV0pfCgxWzAtMl0pKSgoWzB8MXwyXVswLTldKXwzWzAtMV0pWzAtOV17M30oWzAtOV18eHxYKScsCiAgICAgICAgJ2NhcmNvZGUnOiAnW1x1NEUwMC1cdTlGQTVdezF9W0EtWl17MX1bQS1aMC05XXs1fScsICAjIOi9pueJjAoKICAgICAgICAncXEnOiByJ1sxLTldWzAtOV17NCx9JywKICAgICAgICAnZmF4JzogcideWytdezAsMX0oWzAtOV0pezEsM31bIF0/KFstXT8oKFswLTldKXxbIF0pezEsMTJ9KSsnLCAgIyDkvKDnnJ8KICAgICAgICAncGhvbmVfY29tbW9uJzogcicoWzAtOV17M30tWzAtOV17OH18WzAtOV17NH0tWzAtOV17N318WzAtOV17OH18MVswLTldezEwfSknLAogICAgICAgICdwaG9uZSc6IHInKFwoKCgwMTApfCgwMjEpfCgwXGR7Myw0fSkpXCkoID8pKFswLTldezcsOH0pKXwoKDAxMHwwMjF8MFxkezMsNH0pKShbLSBdezEsMn0pKFswLTldezcsOH0pJywKICAgICAgICAnbW9iaWxlJzogcicoKDEzWzAtOV0pfDE0N3woMTVbMC0zNS05XSl8MTgwfDE4MnwoMThbNS05XSkpWzAtOV17OH0nLCAgIyDmiYvmnLoKICAgICAgICAnZW1haWwnOiByJyhbYS16QS1aMC05X1wuXC1dKStcQChbYS16QS1aMC05XC1dKSsoXC4oW2EtekEtWjAtOV17Miw2fSkpKycsICAjIOmCruS7tgogICAgICAgICd1cmwnOiByJygoW2EtekEtWl0rKSg6XC9cLykpPyhbYS16QS1aXSspXC4oXHcrKVwuKFtcdy5dKykoXC8oW1x3XSspXC8/KSooXC9bYS16QS1aMC05XStcLihcdyspKSooXC8oW1x3XSspXC8/KSooXD8oXHcrPT9bXHddKikpKigoJj9cdys9P1tcd10qKSkqJywKICAgICAgICAjIFVSTDEKICAgICAgICAnVVJMJzogcicoKGh0dHB8ZnRwfGh0dHBzKTovLyk/KChbYS16QS1aMC05XC5fLV0rXC5bYS16QS1aXXsyLDZ9KXwoWzAtOV17MSwzfShcLlswLTldezEsM30pezN9KSkoOlswLTldezEsNH0pKigvW2EtekEtWjAtOVwmJV9cLi8tfi1dKik/JywKICAgICAgICAjIFVSTDIKICAgICAgICAnaXB2NEFnZW50JzogcicoMTkyXC4xNjhcLnwxNjlcLjI1NFwufDEwXC58MTcyXC4oMVs2LTldfDJbMC05XXwzWzAxXSkpJywgICMgaXB2NOengeacieWcsOWdgAogICAgICAgICdpcHY0JzogcidbMC05XXsxLDN9KFwuWzAtOV17MSwzfSl7M30nLCAgIyBpcHY05Zyw5Z2ACiAgICAgICAgJ2lwdjYnOiByJ1thLWYwLTldezEsNH0oOlthLWYwLTldezEsNH0pezd9KScsICAjIGlwdjblnLDlnYAKICAgICAgICAnanNvbl9oZWFkZXInOiByJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsICAjIGpzb25faGVhZGVyCiAgICAgICAgJ3JlcXVlc3RfaGVhZGVyJzogcidodHRwdXRpbCcsICAjIHJlcXVlc3RfaGVhZGVyCiAgICAgICAgJ2FsbCc6IHInLionLCAgIyDmiYDmnIkKICAgIH0KCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBfZmluZF9yZWcoc2VsZiwgcmVnX3R5cGUpOgogICAgICAgIGlmIHJlZ190eXBlIGluIHNlbGYucmVnbGlzdDoKICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVnbGlzdFtyZWdfdHlwZV0KICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBjaGVjayhjbHMsIHZhbHVlLCByZWdfdHlwZT0iYWxsIik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICB0cnk6CiAgICAgICAgICAgICMgcHJpbnQgcmUubWF0Y2gocideezB9JCcuZm9ybWF0KGNscy5fZmluZF9yZWcocmVnX3R5cGUpKSwgdmFsdWUsIHJlLk0pLmdyb3VwKCkKICAgICAgICAgICAgcmV0dXJuIHJlLm1hdGNoKHInXnswfSQnLmZvcm1hdChjbHMuX2ZpbmRfcmVnKHJlZ190eXBlKSksIHZhbHVlLCByZS5NKSBpcyBub3QgTm9uZQogICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Cjx8ZmltX2VuZHw+"]
["ec0f79b2dd6b51f612c118cfb37c32eafb37d7b7-3","ec0f79b2dd6b51f612c118cfb37c32eafb37d7b7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCgoKY2xhc3MgVmFsaWRhdGU6CiAgICByZWdsaXN0ID0gewogICAgICAgICdDSCc6IHInW15cdTAwMDAtXHUwMEZGXSonLCAgIyDnuq/mloflrZcKICAgICAgICAnbnVtYmVyJzogcicoWy1dP1swLTldKyhcLlswLTldKyl7MCwxfSknLCAgIyDmraPotJ/mlbDvvIzlsI/mlbAKICAgICAgICAncG9zaXRpdmUnOiByJyhbMC05XSsoXC5bMC05XSspezAsMX0pJywgICMg5q2j5pWwCiAgICAgICAgJ3Bvc2l0aXZlX2ludGVnZXInOiByJyhbMC05XSspJywgICMg5q2j5pW05pWwCgogICAgICAgICdtb250aCc6IHInKDA/WzEtOV18MVswLTJdKScsICAjIOaciOS7vQogICAgICAgICdkYXknOiByJygoMD9bMS05XSl8KCgxfDIpWzAtOV0pfCgzWzAxXSkpJywgICMg5aSp5pWwCiAgICAgICAgJ3RpbWUnOiByJygwP1sxLTldfDFbMC05XXwyWzAtNF0pKCg6fC18XC98XFwpKDA/WzAtOV18WzEtNV1bMC05XSkpezJ9JywKCiAgICAgICAgJ3VzZXJuYW1lJzogcidbYS16QS1aMC05X1wtXXsxLH0nLCAgIyDnlKjmiLflkI3vvJrplb/luqboh7PlsJHkuLox77yM5YyF5ZCr5aSn5bCP5YaZ5a2X5q+N44CB5pWw5a2X44CBX+OAgS0KICAgICAgICAncGFzc3dvcmQnOiByJ1thLXpBLVowLTldezYsfScsICAjIOWvhuegge+8muWkp+Wwj+WGmeWtl+avjeaIluaVsOWtl++8jOmVv+W6puiHs+WwkTbkvY0KICAgICAgICAncGFzc3dvcmRfZWFzeSc6IHInLns2LDE2fScsICAjIOWvhuegge+8mjbliLAxNuS9jeeahOS7u+aEj++8iOmZpOW8gOaWnOe6v++8iQogICAgICAgICdwYXNzd29yZF9oYXJkJzogcicoPz0uKlswLTldKSg/PS4qW2EtekEtWl0pKC57NiwxMn0pJywgICMg5a+G56CB77ya5pWw5a2XICsg5a2X5q+N77yI5aSn5YaZ5oiW5bCP5YaZ77yJICsg6ZW/5bqmNuWIsDEy5L2NCiAgICAgICAgJ3Bhc3N3b3JkX2hhcmQxJzogcicoPz0uKlswLTldKSg/PS4qW0EtWl0pKD89LipbYS16XSkoLns4LH0pJywgICMg5a+G56CB77ya5pWw5a2XICsg5a2X5q+N77yI5aSn5YaZ5ZKM5bCP5YaZ77yJICsg6ZW/5bqmNuWIsDEy5L2NCgogICAgICAgICdkYXRlJzogcidbMS05XVswLTldezAsM30oPzrlubR8XHx8XFx8XC98XHN8LHzjgIF8LSkoMD9bMS05XXwxWzAtMl0pKD865pyIfFx8fFxcfFwvfFxzfCx844CBfC0pKCgwP1sxLTldKXwoKDF8MilbMC05XSl8KDNbMDFdKSnml6U/JywKICAgICAgICAnYmlydGhkYXknOiByJygxOXwyMClbMC05XXsyfSg6fC18XC98XFwpKCgoMD9bMS05XXwxWzAtMl0pKDp8LXxcL3xcXCkoMD9bMS05XXwxWzAtOV18MlswLTldKSl8KCgwP1sxMy05XXwxWzAtMl0pKDp8LXxcL3xcXCkoMzApKXwoKDA/WzEzNTc4XXwxWzAyXSkoOnwtfFwvfFxcKSgzMSkpKScsCiAgICAgICAgJ2JpcnRoZGF5X2hhcmQnOiByJygoWzAtOV17M31bMS05XXxbMC05XXsyfVsxLTldWzAtOV17MX18WzAtOV17MX1bMS05XVswLTldezJ9fFsxLTldWzAtOV17M30pLSgoKDBbMTM1NzhdfDFbMDJdKS0oMFsxLTldfFsxMl1bMC05XXwzWzAxXSkpfCgoMFs0NjldfDExKS0oMFsxLTldfFsxMl1bMC05XXwzMCkpfCgwMi0oMFsxLTldfFsxXVswLTldfDJbMC04XSkpKSl8KCgoWzAtOV17Mn0pKDBbNDhdfFsyNDY4XVswNDhdfFsxMzU3OV1bMjZdKXwoKDBbNDhdfFsyNDY4XVswNDhdfFszNTc5XVsyNl0pMDApKS0wMi0yOSknLAoKICAgICAgICAnY3JlZGl0JzogJ1sxLTldWzAtOV17NX1bMS05XVswLTldezN9KCgwWzAtOV0pfCgxWzAtMl0pKSgoWzB8MXwyXVswLTldKXwzWzAtMV0pWzAtOV17M30oWzAtOV18eHxYKScsCiAgICAgICAgJ2NhcmNvZGUnOiAnW1x1NEUwMC1cdTlGQTVdezF9W0EtWl17MX1bQS1aMC05XXs1fScsICAjIOi9pueJjAoKICAgICAgICAncXEnOiByJ1sxLTldWzAtOV17NCx9JywKICAgICAgICAnZmF4JzogcideWytdezAsMX0oWzAtOV0pezEsM31bIF0/KFstXT8oKFswLTldKXxbIF0pezEsMTJ9KSsnLCAgIyDkvKDnnJ8KICAgICAgICAncGhvbmVfY29tbW9uJzogcicoWzAtOV17M30tWzAtOV17OH18WzAtOV17NH0tWzAtOV17N318WzAtOV17OH18MVswLTldezEwfSknLAogICAgICAgICdwaG9uZSc6IHInKFwoKCgwMTApfCgwMjEpfCgwXGR7Myw0fSkpXCkoID8pKFswLTldezcsOH0pKXwoKDAxMHwwMjF8MFxkezMsNH0pKShbLSBdezEsMn0pKFswLTldezcsOH0pJywKICAgICAgICAnbW9iaWxlJzogcicoKDEzWzAtOV0pfDE0N3woMTVbMC0zNS05XSl8MTgwfDE4MnwoMThbNS05XSkpWzAtOV17OH0nLCAgIyDmiYvmnLoKICAgICAgICAnZW1haWwnOiByJyhbYS16QS1aMC05X1wuXC1dKStcQChbYS16QS1aMC05XC1dKSsoXC4oW2EtekEtWjAtOV17Miw2fSkpKycsICAjIOmCruS7tgogICAgICAgICd1cmwnOiByJygoW2EtekEtWl0rKSg6XC9cLykpPyhbYS16QS1aXSspXC4oXHcrKVwuKFtcdy5dKykoXC8oW1x3XSspXC8/KSooXC9bYS16QS1aMC05XStcLihcdyspKSooXC8oW1x3XSspXC8/KSooXD8oXHcrPT9bXHddKikpKigoJj9cdys9P1tcd10qKSkqJywKICAgICAgICAjIFVSTDEKICAgICAgICAnVVJMJzogcicoKGh0dHB8ZnRwfGh0dHBzKTovLyk/KChbYS16QS1aMC05XC5fLV0rXC5bYS16QS1aXXsyLDZ9KXwoWzAtOV17MSwzfShcLlswLTldezEsM30pezN9KSkoOlswLTldezEsNH0pKigvW2EtekEtWjAtOVwmJV9cLi8tfi1dKik/JywKICAgICAgICAjIFVSTDIKICAgICAgICAnaXB2NEFnZW50JzogcicoMTkyXC4xNjhcLnwxNjlcLjI1NFwufDEwXC58MTcyXC4oMVs2LTldfDJbMC05XXwzWzAxXSkpJywgICMgaXB2NOengeacieWcsOWdgAogICAgICAgICdpcHY0JzogcidbMC05XXsxLDN9KFwuWzAtOV17MSwzfSl7M30nLCAgIyBpcHY05Zyw5Z2ACiAgICAgICAgJ2lwdjYnOiByJ1thLWYwLTldezEsNH0oOlthLWYwLTldezEsNH0pezd9KScsICAjIGlwdjblnLDlnYAKICAgICAgICAnanNvbl9oZWFkZXInOiByJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsICAjIGpzb25faGVhZGVyCiAgICAgICAgJ3JlcXVlc3RfaGVhZGVyJzogcidodHRwdXRpbCcsICAjIHJlcXVlc3RfaGVhZGVyCiAgICAgICAgJ2FsbCc6IHInLionLCAgIyDmiYDmnIkKICAgIH0KCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBfZmluZF9yZWcoc2VsZiwgcmVnX3R5cGUpOgogICAgICAgIGlmIHJlZ190eXBlIGluIHNlbGYucmVnbGlzdDoKICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVnbGlzdFtyZWdfdHlwZV0KICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBjaGVjayhjbHMsIHZhbHVlLCByZWdfdHlwZT0iYWxsIik6CiAgICAgICAgdHJ5OgogICAgICAgICAgICAjIHByaW50IHJlLm1hdGNoKHInXnswfSQnLmZvcm1hdChjbHMuX2ZpbmRfcmVnKHJlZ190eXBlKSksIHZhbHVlLCByZS5NKS5ncm91cCgpCiAgICAgICAgICAgIHJldHVybiByZS5tYXRjaChyJ157MH0kJy5mb3JtYXQoY2xzLl9maW5kX3JlZyhyZWdfdHlwZSkpLCB2YWx1ZSwgcmUuTSkgaXMgbm90IE5vbmUKICAgICAgICBleGNlcHQgVHlwZUVycm9yOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKPHxmaW1fZW5kfD4="]
["ec0f79b2dd6b51f612c118cfb37c32eafb37d7b7-4","ec0f79b2dd6b51f612c118cfb37c32eafb37d7b7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCgoKY2xhc3MgVmFsaWRhdGU6CiAgICByZWdsaXN0ID0gewogICAgICAgICdDSCc6IHInW15cdTAwMDAtXHUwMEZGXSonLCAgIyDnuq/mloflrZcKICAgICAgICAnbnVtYmVyJzogcicoWy1dP1swLTldKyhcLlswLTldKyl7MCwxfSknLCAgIyDmraPotJ/mlbDvvIzlsI/mlbAKICAgICAgICAncG9zaXRpdmUnOiByJyhbMC05XSsoXC5bMC05XSspezAsMX0pJywgICMg5q2j5pWwCiAgICAgICAgJ3Bvc2l0aXZlX2ludGVnZXInOiByJyhbMC05XSspJywgICMg5q2j5pW05pWwCgogICAgICAgICdtb250aCc6IHInKDA/WzEtOV18MVswLTJdKScsICAjIOaciOS7vQogICAgICAgICdkYXknOiByJygoMD9bMS05XSl8KCgxfDIpWzAtOV0pfCgzWzAxXSkpJywgICMg5aSp5pWwCiAgICAgICAgJ3RpbWUnOiByJygwP1sxLTldfDFbMC05XXwyWzAtNF0pKCg6fC18XC98XFwpKDA/WzAtOV18WzEtNV1bMC05XSkpezJ9JywKCiAgICAgICAgJ3VzZXJuYW1lJzogcidbYS16QS1aMC05X1wtXXsxLH0nLCAgIyDnlKjmiLflkI3vvJrplb/luqboh7PlsJHkuLox77yM5YyF5ZCr5aSn5bCP5YaZ5a2X5q+N44CB5pWw5a2X44CBX+OAgS0KICAgICAgICAncGFzc3dvcmQnOiByJ1thLXpBLVowLTldezYsfScsICAjIOWvhuegge+8muWkp+Wwj+WGmeWtl+avjeaIluaVsOWtl++8jOmVv+W6puiHs+WwkTbkvY0KICAgICAgICAncGFzc3dvcmRfZWFzeSc6IHInLns2LDE2fScsICAjIOWvhuegge+8mjbliLAxNuS9jeeahOS7u+aEj++8iOmZpOW8gOaWnOe6v++8iQogICAgICAgICdwYXNzd29yZF9oYXJkJzogcicoPz0uKlswLTldKSg/PS4qW2EtekEtWl0pKC57NiwxMn0pJywgICMg5a+G56CB77ya5pWw5a2XICsg5a2X5q+N77yI5aSn5YaZ5oiW5bCP5YaZ77yJICsg6ZW/5bqmNuWIsDEy5L2NCiAgICAgICAgJ3Bhc3N3b3JkX2hhcmQxJzogcicoPz0uKlswLTldKSg/PS4qW0EtWl0pKD89LipbYS16XSkoLns4LH0pJywgICMg5a+G56CB77ya5pWw5a2XICsg5a2X5q+N77yI5aSn5YaZ5ZKM5bCP5YaZ77yJICsg6ZW/5bqmNuWIsDEy5L2NCgogICAgICAgICdkYXRlJzogcidbMS05XVswLTldezAsM30oPzrlubR8XHx8XFx8XC98XHN8LHzjgIF8LSkoMD9bMS05XXwxWzAtMl0pKD865pyIfFx8fFxcfFwvfFxzfCx844CBfC0pKCgwP1sxLTldKXwoKDF8MilbMC05XSl8KDNbMDFdKSnml6U/JywKICAgICAgICAnYmlydGhkYXknOiByJygxOXwyMClbMC05XXsyfSg6fC18XC98XFwpKCgoMD9bMS05XXwxWzAtMl0pKDp8LXxcL3xcXCkoMD9bMS05XXwxWzAtOV18MlswLTldKSl8KCgwP1sxMy05XXwxWzAtMl0pKDp8LXxcL3xcXCkoMzApKXwoKDA/WzEzNTc4XXwxWzAyXSkoOnwtfFwvfFxcKSgzMSkpKScsCiAgICAgICAgJ2JpcnRoZGF5X2hhcmQnOiByJygoWzAtOV17M31bMS05XXxbMC05XXsyfVsxLTldWzAtOV17MX18WzAtOV17MX1bMS05XVswLTldezJ9fFsxLTldWzAtOV17M30pLSgoKDBbMTM1NzhdfDFbMDJdKS0oMFsxLTldfFsxMl1bMC05XXwzWzAxXSkpfCgoMFs0NjldfDExKS0oMFsxLTldfFsxMl1bMC05XXwzMCkpfCgwMi0oMFsxLTldfFsxXVswLTldfDJbMC04XSkpKSl8KCgoWzAtOV17Mn0pKDBbNDhdfFsyNDY4XVswNDhdfFsxMzU3OV1bMjZdKXwoKDBbNDhdfFsyNDY4XVswNDhdfFszNTc5XVsyNl0pMDApKS0wMi0yOSknLAoKICAgICAgICAnY3JlZGl0JzogJ1sxLTldWzAtOV17NX1bMS05XVswLTldezN9KCgwWzAtOV0pfCgxWzAtMl0pKSgoWzB8MXwyXVswLTldKXwzWzAtMV0pWzAtOV17M30oWzAtOV18eHxYKScsCiAgICAgICAgJ2NhcmNvZGUnOiAnW1x1NEUwMC1cdTlGQTVdezF9W0EtWl17MX1bQS1aMC05XXs1fScsICAjIOi9pueJjAoKICAgICAgICAncXEnOiByJ1sxLTldWzAtOV17NCx9JywKICAgICAgICAnZmF4JzogcideWytdezAsMX0oWzAtOV0pezEsM31bIF0/KFstXT8oKFswLTldKXxbIF0pezEsMTJ9KSsnLCAgIyDkvKDnnJ8KICAgICAgICAncGhvbmVfY29tbW9uJzogcicoWzAtOV17M30tWzAtOV17OH18WzAtOV17NH0tWzAtOV17N318WzAtOV17OH18MVswLTldezEwfSknLAogICAgICAgICdwaG9uZSc6IHInKFwoKCgwMTApfCgwMjEpfCgwXGR7Myw0fSkpXCkoID8pKFswLTldezcsOH0pKXwoKDAxMHwwMjF8MFxkezMsNH0pKShbLSBdezEsMn0pKFswLTldezcsOH0pJywKPHxmaW1faG9sZXw+CiAgICAgICAgJ1VSTCc6IHInKChodHRwfGZ0cHxodHRwcyk6Ly8pPygoW2EtekEtWjAtOVwuXy1dK1wuW2EtekEtWl17Miw2fSl8KFswLTldezEsM30oXC5bMC05XXsxLDN9KXszfSkpKDpbMC05XXsxLDR9KSooL1thLXpBLVowLTlcJiVfXC4vLX4tXSopPycsCiAgICAgICAgIyBVUkwyCiAgICAgICAgJ2lwdjRBZ2VudCc6IHInKDE5MlwuMTY4XC58MTY5XC4yNTRcLnwxMFwufDE3MlwuKDFbNi05XXwyWzAtOV18M1swMV0pKScsICAjIGlwdjTnp4HmnInlnLDlnYAKICAgICAgICAnaXB2NCc6IHInWzAtOV17MSwzfShcLlswLTldezEsM30pezN9JywgICMgaXB2NOWcsOWdgAogICAgICAgICdpcHY2JzogcidbYS1mMC05XXsxLDR9KDpbYS1mMC05XXsxLDR9KXs3fSknLCAgIyBpcHY25Zyw5Z2ACiAgICAgICAgJ2pzb25faGVhZGVyJzogcidhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLCAgIyBqc29uX2hlYWRlcgogICAgICAgICdyZXF1ZXN0X2hlYWRlcic6IHInaHR0cHV0aWwnLCAgIyByZXF1ZXN0X2hlYWRlcgogICAgICAgICdhbGwnOiByJy4qJywgICMg5omA5pyJCiAgICB9CgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgX2ZpbmRfcmVnKHNlbGYsIHJlZ190eXBlKToKICAgICAgICBpZiByZWdfdHlwZSBpbiBzZWxmLnJlZ2xpc3Q6CiAgICAgICAgICAgIHJldHVybiBzZWxmLnJlZ2xpc3RbcmVnX3R5cGVdCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgY2hlY2soY2xzLCB2YWx1ZSwgcmVnX3R5cGU9ImFsbCIpOgogICAgICAgIHRyeToKICAgICAgICAgICAgIyBwcmludCByZS5tYXRjaChyJ157MH0kJy5mb3JtYXQoY2xzLl9maW5kX3JlZyhyZWdfdHlwZSkpLCB2YWx1ZSwgcmUuTSkuZ3JvdXAoKQogICAgICAgICAgICByZXR1cm4gcmUubWF0Y2gocideezB9JCcuZm9ybWF0KGNscy5fZmluZF9yZWcocmVnX3R5cGUpKSwgdmFsdWUsIHJlLk0pIGlzIG5vdCBOb25lCiAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgaGFzKGNscywgdmFsdWUsIHJlZ190eXBlPSJhbGwiKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJldHVybiByZS5zZWFyY2gocid7MH0nLmZvcm1hdChjbHMuX2ZpbmRfcmVnKHJlZ190eXBlKSksIHZhbHVlLCByZS5NKSBpcyBub3QgTm9uZQogICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBwcmludChWYWxpZGF0ZS5jaGVjaygiMTc2MTUxNTMxNzUiLCByZWdfdHlwZT0ibW9iaWxlIikpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgJ21vYmlsZSc6IHInKCgxM1swLTldKXwxNDd8KDE1WzAtMzUtOV0pfDE4MHwxODJ8KDE4WzUtOV0pKVswLTldezh9JywgICMg5omL5py6CiAgICAgICAgJ2VtYWlsJzogcicoW2EtekEtWjAtOV9cLlwtXSkrXEAoW2EtekEtWjAtOVwtXSkrKFwuKFthLXpBLVowLTldezIsNn0pKSsnLCAgIyDpgq7ku7YKICAgICAgICAndXJsJzogcicoKFthLXpBLVpdKykoOlwvXC8pKT8oW2EtekEtWl0rKVwuKFx3KylcLihbXHcuXSspKFwvKFtcd10rKVwvPykqKFwvW2EtekEtWjAtOV0rXC4oXHcrKSkqKFwvKFtcd10rKVwvPykqKFw/KFx3Kz0/W1x3XSopKSooKCY/XHcrPT9bXHddKikpKicsCiAgICAgICAgIyBVUkwxCjx8ZmltX2VuZHw+"]
["ec0f79b2dd6b51f612c118cfb37c32eafb37d7b7-5","ec0f79b2dd6b51f612c118cfb37c32eafb37d7b7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCgoKY2xhc3MgVmFsaWRhdGU6CiAgICByZWdsaXN0ID0gewogICAgICAgICdDSCc6IHInW15cdTAwMDAtXHUwMEZGXSonLCAgIyDnuq/mloflrZcKICAgICAgICAnbnVtYmVyJzogcicoWy1dP1swLTldKyhcLlswLTldKyl7MCwxfSknLCAgIyDmraPotJ/mlbDvvIzlsI/mlbAKICAgICAgICAncG9zaXRpdmUnOiByJyhbMC05XSsoXC5bMC05XSspezAsMX0pJywgICMg5q2j5pWwCiAgICAgICAgJ3Bvc2l0aXZlX2ludGVnZXInOiByJyhbMC05XSspJywgICMg5q2j5pW05pWwCgogICAgICAgICdtb250aCc6IHInKDA/WzEtOV18MVswLTJdKScsICAjIOaciOS7vQogICAgICAgICdkYXknOiByJygoMD9bMS05XSl8KCgxfDIpWzAtOV0pfCgzWzAxXSkpJywgICMg5aSp5pWwCiAgICAgICAgJ3RpbWUnOiByJygwP1sxLTldfDFbMC05XXwyWzAtNF0pKCg6fC18XC98XFwpKDA/WzAtOV18WzEtNV1bMC05XSkpezJ9JywKCiAgICAgICAgJ3VzZXJuYW1lJzogcidbYS16QS1aMC05X1wtXXsxLH0nLCAgIyDnlKjmiLflkI3vvJrplb/luqboh7PlsJHkuLox77yM5YyF5ZCr5aSn5bCP5YaZ5a2X5q+N44CB5pWw5a2X44CBX+OAgS0KICAgICAgICAncGFzc3dvcmQnOiByJ1thLXpBLVowLTldezYsfScsICAjIOWvhuegge+8muWkp+Wwj+WGmeWtl+avjeaIluaVsOWtl++8jOmVv+W6puiHs+WwkTbkvY0KICAgICAgICAncGFzc3dvcmRfZWFzeSc6IHInLns2LDE2fScsICAjIOWvhuegge+8mjbliLAxNuS9jeeahOS7u+aEj++8iOmZpOW8gOaWnOe6v++8iQogICAgICAgICdwYXNzd29yZF9oYXJkJzogcicoPz0uKlswLTldKSg/PS4qW2EtekEtWl0pKC57NiwxMn0pJywgICMg5a+G56CB77ya5pWw5a2XICsg5a2X5q+N77yI5aSn5YaZ5oiW5bCP5YaZ77yJICsg6ZW/5bqmNuWIsDEy5L2NCiAgICAgICAgJ3Bhc3N3b3JkX2hhcmQxJzogcicoPz0uKlswLTldKSg/PS4qW0EtWl0pKD89LipbYS16XSkoLns4LH0pJywgICMg5a+G56CB77ya5pWw5a2XICsg5a2X5q+N77yI5aSn5YaZ5ZKM5bCP5YaZ77yJICsg6ZW/5bqmNuWIsDEy5L2NCgogICAgICAgICdkYXRlJzogcidbMS05XVswLTldezAsM30oPzrlubR8XHx8XFx8XC98XHN8LHzjgIF8LSkoMD9bMS05XXwxWzAtMl0pKD865pyIfFx8fFxcfFwvfFxzfCx844CBfC0pKCgwP1sxLTldKXwoKDF8MilbMC05XSl8KDNbMDFdKSnml6U/JywKICAgICAgICAnYmlydGhkYXknOiByJygxOXwyMClbMC05XXsyfSg6fC18XC98XFwpKCgoMD9bMS05XXwxWzAtMl0pKDp8LXxcL3xcXCkoMD9bMS05XXwxWzAtOV18MlswLTldKSl8KCgwP1sxMy05XXwxWzAtMl0pKDp8LXxcL3xcXCkoMzApKXwoKDA/WzEzNTc4XXwxWzAyXSkoOnwtfFwvfFxcKSgzMSkpKScsCiAgICAgICAgJ2JpcnRoZGF5X2hhcmQnOiByJygoWzAtOV17M31bMS05XXxbMC05XXsyfVsxLTldWzAtOV17MX18WzAtOV17MX1bMS05XVswLTldezJ9fFsxLTldWzAtOV17M30pLSgoKDBbMTM1NzhdfDFbMDJdKS0oMFsxLTldfFsxMl1bMC05XXwzWzAxXSkpfCgoMFs0NjldfDExKS0oMFsxLTldfFsxMl1bMC05XXwzMCkpfCgwMi0oMFsxLTldfFsxXVswLTldfDJbMC04XSkpKSl8KCgoWzAtOV17Mn0pKDBbNDhdfFsyNDY4XVswNDhdfFsxMzU3OV1bMjZdKXwoKDBbNDhdfFsyNDY4XVswNDhdfFszNTc5XVsyNl0pMDApKS0wMi0yOSknLAoKICAgICAgICAnY3JlZGl0JzogJ1sxLTldWzAtOV17NX1bMS05XVswLTldezN9KCgwWzAtOV0pfCgxWzAtMl0pKSgoWzB8MXwyXVswLTldKXwzWzAtMV0pWzAtOV17M30oWzAtOV18eHxYKScsCiAgICAgICAgJ2NhcmNvZGUnOiAnW1x1NEUwMC1cdTlGQTVdezF9W0EtWl17MX1bQS1aMC05XXs1fScsICAjIOi9pueJjAoKICAgICAgICAncXEnOiByJ1sxLTldWzAtOV17NCx9JywKICAgICAgICAnZmF4JzogcideWytdezAsMX0oWzAtOV0pezEsM31bIF0/KFstXT8oKFswLTldKXxbIF0pezEsMTJ9KSsnLCAgIyDkvKDnnJ8KICAgICAgICAncGhvbmVfY29tbW9uJzogcicoWzAtOV17M30tWzAtOV17OH18WzAtOV17NH0tWzAtOV17N318WzAtOV17OH18MVswLTldezEwfSknLAogICAgICAgICdwaG9uZSc6IHInKFwoKCgwMTApfCgwMjEpfCgwXGR7Myw0fSkpXCkoID8pKFswLTldezcsOH0pKXwoKDAxMHwwMjF8MFxkezMsNH0pKShbLSBdezEsMn0pKFswLTldezcsOH0pJywKICAgICAgICAnbW9iaWxlJzogcicoKDEzWzAtOV0pfDE0N3woMTVbMC0zNS05XSl8MTgwfDE4MnwoMThbNS05XSkpWzAtOV17OH0nLCAgIyDmiYvmnLoKICAgICAgICAnZW1haWwnOiByJyhbYS16QS1aMC05X1wuXC1dKStcQChbYS16QS1aMC05XC1dKSsoXC4oW2EtekEtWjAtOV17Miw2fSkpKycsICAjIOmCruS7tgogICAgICAgICd1cmwnOiByJygoW2EtekEtWl0rKSg6XC9cLykpPyhbYS16QS1aXSspXC4oXHcrKVwuKFtcdy5dKykoXC8oW1x3XSspXC8/KSooXC9bYS16QS1aMC05XStcLihcdyspKSooXC8oW1x3XSspXC8/KSooXD8oXHcrPT9bXHddKikpKigoJj9cdys9P1tcd10qKSkqJywKICAgICAgICAjIFVSTDEKPHxmaW1faG9sZXw+CiAgICAgICAgJ2lwdjYnOiByJ1thLWYwLTldezEsNH0oOlthLWYwLTldezEsNH0pezd9KScsICAjIGlwdjblnLDlnYAKICAgICAgICAnanNvbl9oZWFkZXInOiByJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsICAjIGpzb25faGVhZGVyCiAgICAgICAgJ3JlcXVlc3RfaGVhZGVyJzogcidodHRwdXRpbCcsICAjIHJlcXVlc3RfaGVhZGVyCiAgICAgICAgJ2FsbCc6IHInLionLCAgIyDmiYDmnIkKICAgIH0KCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBfZmluZF9yZWcoc2VsZiwgcmVnX3R5cGUpOgogICAgICAgIGlmIHJlZ190eXBlIGluIHNlbGYucmVnbGlzdDoKICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVnbGlzdFtyZWdfdHlwZV0KICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBjaGVjayhjbHMsIHZhbHVlLCByZWdfdHlwZT0iYWxsIik6CiAgICAgICAgdHJ5OgogICAgICAgICAgICAjIHByaW50IHJlLm1hdGNoKHInXnswfSQnLmZvcm1hdChjbHMuX2ZpbmRfcmVnKHJlZ190eXBlKSksIHZhbHVlLCByZS5NKS5ncm91cCgpCiAgICAgICAgICAgIHJldHVybiByZS5tYXRjaChyJ157MH0kJy5mb3JtYXQoY2xzLl9maW5kX3JlZyhyZWdfdHlwZSkpLCB2YWx1ZSwgcmUuTSkgaXMgbm90IE5vbmUKICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBoYXMoY2xzLCB2YWx1ZSwgcmVnX3R5cGU9ImFsbCIpOgogICAgICAgIHRyeToKICAgICAgICAgICAgcmV0dXJuIHJlLnNlYXJjaChyJ3swfScuZm9ybWF0KGNscy5fZmluZF9yZWcocmVnX3R5cGUpKSwgdmFsdWUsIHJlLk0pIGlzIG5vdCBOb25lCiAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHByaW50KFZhbGlkYXRlLmNoZWNrKCIxNzYxNTE1MzE3NSIsIHJlZ190eXBlPSJtb2JpbGUiKSkKPHxmaW1fc3VmZml4fD4KICAgICAgICAnVVJMJzogcicoKGh0dHB8ZnRwfGh0dHBzKTovLyk/KChbYS16QS1aMC05XC5fLV0rXC5bYS16QS1aXXsyLDZ9KXwoWzAtOV17MSwzfShcLlswLTldezEsM30pezN9KSkoOlswLTldezEsNH0pKigvW2EtekEtWjAtOVwmJV9cLi8tfi1dKik/JywKICAgICAgICAjIFVSTDIKICAgICAgICAnaXB2NEFnZW50JzogcicoMTkyXC4xNjhcLnwxNjlcLjI1NFwufDEwXC58MTcyXC4oMVs2LTldfDJbMC05XXwzWzAxXSkpJywgICMgaXB2NOengeacieWcsOWdgAogICAgICAgICdpcHY0JzogcidbMC05XXsxLDN9KFwuWzAtOV17MSwzfSl7M30nLCAgIyBpcHY05Zyw5Z2ACjx8ZmltX2VuZHw+"]
["de0139e542e4e2a54e1e62a6e8dc6f44f5fe500c-1","de0139e542e4e2a54e1e62a6e8dc6f44f5fe500c","PHxmaW1fcHJlZml4fD4KZnJvbSBtcF9hcGkuY29yZS5jbGllbnQgaW1wb3J0IEJhc2VSZXN0ZXIKCgpjbGFzcyBTZWFyY2hSZXN0ZXIoQmFzZVJlc3Rlcik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHN1ZmZpeCA9ICJzZWFyY2giCjx8ZmltX2VuZHw+"]
["5b306837df101b9c2ad072c4a3968328df1ae4cf-1","5b306837df101b9c2ad072c4a3968328df1ae4cf","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc6IHV0ZjgKCmRiLmRlZmluZV90YWJsZSgicGRmX3RlbXBsYXRlIiwKICAgIEZpZWxkKCJwZGZfdGVtcGxhdGVfaWQiLCJpZCIpLAogICAgRmllbGQoInRpdGxlIiksCiAgICBGaWVsZCgiZm9ybWF0IiwgcmVxdWlyZXM9SVNfSU5fU0VUKFsiQTQiLCJsZWdhbCIsImxldHRlciJdKSksCiAgICBtaWdyYXRlPW1pZ3JhdGUsIGZha2VfbWlncmF0ZT1mYWtlX21pZ3JhdGUpCgpkYi5kZWZpbmVfdGFibGUoInBkZl9lbGVtZW50IiwKICAgIEZpZWxkKCJwZGZfdGVtcGxhdGVfaWQiLCBkYi5wZGZfdGVtcGxhdGUsIHJlcXVpcmVzPUlTX0lOX0RCKGRiLCdwZGZfdGVtcGxhdGUucGRmX3RlbXBsYXRlX2lkJywgJ3BkZl90ZW1wbGF0ZS50aXRsZScpKSwKICAgIEZpZWxkKCJuYW1lIiwgcmVxdWlyZXM9SVNfTk9UX0VNUFRZKCkpLAogICAgRmllbGQoInR5cGUiLCBsZW5ndGg9MiwgcmVxdWlyZXM9SVNfSU5fU0VUKFsnVCcsICdMJywgJ0knLCAnQicsICdCQyddKSksCiAgICBGaWVsZCgieDEiLCAiZG91YmxlIiwgcmVxdWlyZXM9SVNfTk9UX0VNUFRZKCkpLAogICAgRmllbGQoInkxIiwgImRvdWJsZSIsIHJlcXVpcmVzPUlTX05PVF9FTVBUWSgpKSwKICAgIEZpZWxkKCJ4MiIsICJkb3VibGUiLCByZXF1aXJlcz1JU19OT1RfRU1QVFkoKSksCiAgICBGaWVsZCgieTIiLCAiZG91YmxlIiwgcmVxdWlyZXM9SVNfTk9UX0VNUFRZKCkpLAogICAgRmllbGQoImZvbnQiLCBkZWZhdWx0PSJBcmlhbCIsIHJlcXVpcmVzPUlTX0lOX1NFVChbJ0NvdXJpZXInLCdBcmlhbCcsJ1RpbWVzJywnU3ltYm9sJywnWmFwZmRpbmdiYXRzJ10pKSwKICAgIEZpZWxkKCJzaXplIiwgImRvdWJsZSIsIGRlZmF1bHQ9IjEwIiwgcmVxdWlyZXM9SVNfTk9UX0VNUFRZKCkpLAogICAgRmllbGQoImJvbGQiLCAiYm9vbGVhbiIpLAogICAgRmllbGQoIml0YWxpYyIsICJib29sZWFuIiksCiAgICBGaWVsZCgidW5kZXJsaW5lIiwgImJvb2xlYW4iKSwKICAgIEZpZWxkKCJmb3JlZ3JvdW5kIiwgImludGVnZXIiLCBkZWZhdWx0PTB4MDAwMDAwLCBjb21tZW50PSJDb2xvciB0ZXh0IiksCiAgICBGaWVsZCgiYmFja2dyb3VuZCIsICJpbnRlZ2VyIiwgZGVmYXVsdD0weEZGRkZGRiwgY29tbWVudD0iRmlsbCBjb2xvciIpLAogICAgRmllbGQoImFsaWduIiwgInN0cmluZyIsIGxlbmd0aD0xLCBkZWZhdWx0PSJMIiwgcmVxdWlyZXM9SVNfSU5fU0VUKFsnTCcsICdSJywgJ0MnLCAnSiddKSksCiAgICBGaWVsZCgidGV4dCIsICJ0ZXh0IiwgY29tbWVudD0iRGVmYXVsdCB0ZXh0IiksCiAgICBGaWVsZCgicHJpb3JpdHkiLCAiaW50ZWdlciIsIGRlZmF1bHQ9MCwgY29tbWVudD0iWi1PcmRlciIpLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBtaWdyYXRlPW1pZ3JhdGUsIGZha2VfbWlncmF0ZT1mYWtlX21pZ3JhdGUpCjx8ZmltX2VuZHw+"]
["5b306837df101b9c2ad072c4a3968328df1ae4cf-2","5b306837df101b9c2ad072c4a3968328df1ae4cf","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc6IHV0ZjgKPHxmaW1faG9sZXw+CiAgICBGaWVsZCgiZm9ybWF0IiwgcmVxdWlyZXM9SVNfSU5fU0VUKFsiQTQiLCJsZWdhbCIsImxldHRlciJdKSksCiAgICBtaWdyYXRlPW1pZ3JhdGUsIGZha2VfbWlncmF0ZT1mYWtlX21pZ3JhdGUpCgpkYi5kZWZpbmVfdGFibGUoInBkZl9lbGVtZW50IiwKICAgIEZpZWxkKCJwZGZfdGVtcGxhdGVfaWQiLCBkYi5wZGZfdGVtcGxhdGUsIHJlcXVpcmVzPUlTX0lOX0RCKGRiLCdwZGZfdGVtcGxhdGUucGRmX3RlbXBsYXRlX2lkJywgJ3BkZl90ZW1wbGF0ZS50aXRsZScpKSwKICAgIEZpZWxkKCJuYW1lIiwgcmVxdWlyZXM9SVNfTk9UX0VNUFRZKCkpLAogICAgRmllbGQoInR5cGUiLCBsZW5ndGg9MiwgcmVxdWlyZXM9SVNfSU5fU0VUKFsnVCcsICdMJywgJ0knLCAnQicsICdCQyddKSksCiAgICBGaWVsZCgieDEiLCAiZG91YmxlIiwgcmVxdWlyZXM9SVNfTk9UX0VNUFRZKCkpLAogICAgRmllbGQoInkxIiwgImRvdWJsZSIsIHJlcXVpcmVzPUlTX05PVF9FTVBUWSgpKSwKICAgIEZpZWxkKCJ4MiIsICJkb3VibGUiLCByZXF1aXJlcz1JU19OT1RfRU1QVFkoKSksCiAgICBGaWVsZCgieTIiLCAiZG91YmxlIiwgcmVxdWlyZXM9SVNfTk9UX0VNUFRZKCkpLAogICAgRmllbGQoImZvbnQiLCBkZWZhdWx0PSJBcmlhbCIsIHJlcXVpcmVzPUlTX0lOX1NFVChbJ0NvdXJpZXInLCdBcmlhbCcsJ1RpbWVzJywnU3ltYm9sJywnWmFwZmRpbmdiYXRzJ10pKSwKICAgIEZpZWxkKCJzaXplIiwgImRvdWJsZSIsIGRlZmF1bHQ9IjEwIiwgcmVxdWlyZXM9SVNfTk9UX0VNUFRZKCkpLAogICAgRmllbGQoImJvbGQiLCAiYm9vbGVhbiIpLAogICAgRmllbGQoIml0YWxpYyIsICJib29sZWFuIiksCiAgICBGaWVsZCgidW5kZXJsaW5lIiwgImJvb2xlYW4iKSwKICAgIEZpZWxkKCJmb3JlZ3JvdW5kIiwgImludGVnZXIiLCBkZWZhdWx0PTB4MDAwMDAwLCBjb21tZW50PSJDb2xvciB0ZXh0IiksCiAgICBGaWVsZCgiYmFja2dyb3VuZCIsICJpbnRlZ2VyIiwgZGVmYXVsdD0weEZGRkZGRiwgY29tbWVudD0iRmlsbCBjb2xvciIpLAogICAgRmllbGQoImFsaWduIiwgInN0cmluZyIsIGxlbmd0aD0xLCBkZWZhdWx0PSJMIiwgcmVxdWlyZXM9SVNfSU5fU0VUKFsnTCcsICdSJywgJ0MnLCAnSiddKSksCiAgICBGaWVsZCgidGV4dCIsICJ0ZXh0IiwgY29tbWVudD0iRGVmYXVsdCB0ZXh0IiksCiAgICBGaWVsZCgicHJpb3JpdHkiLCAiaW50ZWdlciIsIGRlZmF1bHQ9MCwgY29tbWVudD0iWi1PcmRlciIpLAogICAgbWlncmF0ZT1taWdyYXRlLCBmYWtlX21pZ3JhdGU9ZmFrZV9taWdyYXRlKQo8fGZpbV9zdWZmaXh8PgoKZGIuZGVmaW5lX3RhYmxlKCJwZGZfdGVtcGxhdGUiLAogICAgRmllbGQoInBkZl90ZW1wbGF0ZV9pZCIsImlkIiksCiAgICBGaWVsZCgidGl0bGUiKSwKPHxmaW1fZW5kfD4="]
["5b306837df101b9c2ad072c4a3968328df1ae4cf-3","5b306837df101b9c2ad072c4a3968328df1ae4cf","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc6IHV0ZjgKCmRiLmRlZmluZV90YWJsZSgicGRmX3RlbXBsYXRlIiwKICAgIEZpZWxkKCJwZGZfdGVtcGxhdGVfaWQiLCJpZCIpLAogICAgRmllbGQoInRpdGxlIiksCiAgICBGaWVsZCgiZm9ybWF0IiwgcmVxdWlyZXM9SVNfSU5fU0VUKFsiQTQiLCJsZWdhbCIsImxldHRlciJdKSksCiAgICBtaWdyYXRlPW1pZ3JhdGUsIGZha2VfbWlncmF0ZT1mYWtlX21pZ3JhdGUpCgpkYi5kZWZpbmVfdGFibGUoInBkZl9lbGVtZW50IiwKICAgIEZpZWxkKCJwZGZfdGVtcGxhdGVfaWQiLCBkYi5wZGZfdGVtcGxhdGUsIHJlcXVpcmVzPUlTX0lOX0RCKGRiLCdwZGZfdGVtcGxhdGUucGRmX3RlbXBsYXRlX2lkJywgJ3BkZl90ZW1wbGF0ZS50aXRsZScpKSwKPHxmaW1faG9sZXw+CiAgICBGaWVsZCgieDIiLCAiZG91YmxlIiwgcmVxdWlyZXM9SVNfTk9UX0VNUFRZKCkpLAogICAgRmllbGQoInkyIiwgImRvdWJsZSIsIHJlcXVpcmVzPUlTX05PVF9FTVBUWSgpKSwKICAgIEZpZWxkKCJmb250IiwgZGVmYXVsdD0iQXJpYWwiLCByZXF1aXJlcz1JU19JTl9TRVQoWydDb3VyaWVyJywnQXJpYWwnLCdUaW1lcycsJ1N5bWJvbCcsJ1phcGZkaW5nYmF0cyddKSksCiAgICBGaWVsZCgic2l6ZSIsICJkb3VibGUiLCBkZWZhdWx0PSIxMCIsIHJlcXVpcmVzPUlTX05PVF9FTVBUWSgpKSwKICAgIEZpZWxkKCJib2xkIiwgImJvb2xlYW4iKSwKICAgIEZpZWxkKCJpdGFsaWMiLCAiYm9vbGVhbiIpLAogICAgRmllbGQoInVuZGVybGluZSIsICJib29sZWFuIiksCiAgICBGaWVsZCgiZm9yZWdyb3VuZCIsICJpbnRlZ2VyIiwgZGVmYXVsdD0weDAwMDAwMCwgY29tbWVudD0iQ29sb3IgdGV4dCIpLAogICAgRmllbGQoImJhY2tncm91bmQiLCAiaW50ZWdlciIsIGRlZmF1bHQ9MHhGRkZGRkYsIGNvbW1lbnQ9IkZpbGwgY29sb3IiKSwKICAgIEZpZWxkKCJhbGlnbiIsICJzdHJpbmciLCBsZW5ndGg9MSwgZGVmYXVsdD0iTCIsIHJlcXVpcmVzPUlTX0lOX1NFVChbJ0wnLCAnUicsICdDJywgJ0onXSkpLAogICAgRmllbGQoInRleHQiLCAidGV4dCIsIGNvbW1lbnQ9IkRlZmF1bHQgdGV4dCIpLAogICAgRmllbGQoInByaW9yaXR5IiwgImludGVnZXIiLCBkZWZhdWx0PTAsIGNvbW1lbnQ9IlotT3JkZXIiKSwKICAgIG1pZ3JhdGU9bWlncmF0ZSwgZmFrZV9taWdyYXRlPWZha2VfbWlncmF0ZSkKPHxmaW1fc3VmZml4fD4KICAgIEZpZWxkKCJuYW1lIiwgcmVxdWlyZXM9SVNfTk9UX0VNUFRZKCkpLAogICAgRmllbGQoInR5cGUiLCBsZW5ndGg9MiwgcmVxdWlyZXM9SVNfSU5fU0VUKFsnVCcsICdMJywgJ0knLCAnQicsICdCQyddKSksCiAgICBGaWVsZCgieDEiLCAiZG91YmxlIiwgcmVxdWlyZXM9SVNfTk9UX0VNUFRZKCkpLAogICAgRmllbGQoInkxIiwgImRvdWJsZSIsIHJlcXVpcmVzPUlTX05PVF9FTVBUWSgpKSwKPHxmaW1fZW5kfD4="]
["5b306837df101b9c2ad072c4a3968328df1ae4cf-4","5b306837df101b9c2ad072c4a3968328df1ae4cf","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc6IHV0ZjgKCmRiLmRlZmluZV90YWJsZSgicGRmX3RlbXBsYXRlIiwKICAgIEZpZWxkKCJwZGZfdGVtcGxhdGVfaWQiLCJpZCIpLAogICAgRmllbGQoInRpdGxlIiksCiAgICBGaWVsZCgiZm9ybWF0IiwgcmVxdWlyZXM9SVNfSU5fU0VUKFsiQTQiLCJsZWdhbCIsImxldHRlciJdKSksCiAgICBtaWdyYXRlPW1pZ3JhdGUsIGZha2VfbWlncmF0ZT1mYWtlX21pZ3JhdGUpCjx8ZmltX2hvbGV8PgogICAgRmllbGQoInR5cGUiLCBsZW5ndGg9MiwgcmVxdWlyZXM9SVNfSU5fU0VUKFsnVCcsICdMJywgJ0knLCAnQicsICdCQyddKSksCiAgICBGaWVsZCgieDEiLCAiZG91YmxlIiwgcmVxdWlyZXM9SVNfTk9UX0VNUFRZKCkpLAogICAgRmllbGQoInkxIiwgImRvdWJsZSIsIHJlcXVpcmVzPUlTX05PVF9FTVBUWSgpKSwKICAgIEZpZWxkKCJ4MiIsICJkb3VibGUiLCByZXF1aXJlcz1JU19OT1RfRU1QVFkoKSksCiAgICBGaWVsZCgieTIiLCAiZG91YmxlIiwgcmVxdWlyZXM9SVNfTk9UX0VNUFRZKCkpLAogICAgRmllbGQoImZvbnQiLCBkZWZhdWx0PSJBcmlhbCIsIHJlcXVpcmVzPUlTX0lOX1NFVChbJ0NvdXJpZXInLCdBcmlhbCcsJ1RpbWVzJywnU3ltYm9sJywnWmFwZmRpbmdiYXRzJ10pKSwKICAgIEZpZWxkKCJzaXplIiwgImRvdWJsZSIsIGRlZmF1bHQ9IjEwIiwgcmVxdWlyZXM9SVNfTk9UX0VNUFRZKCkpLAogICAgRmllbGQoImJvbGQiLCAiYm9vbGVhbiIpLAogICAgRmllbGQoIml0YWxpYyIsICJib29sZWFuIiksCiAgICBGaWVsZCgidW5kZXJsaW5lIiwgImJvb2xlYW4iKSwKICAgIEZpZWxkKCJmb3JlZ3JvdW5kIiwgImludGVnZXIiLCBkZWZhdWx0PTB4MDAwMDAwLCBjb21tZW50PSJDb2xvciB0ZXh0IiksCiAgICBGaWVsZCgiYmFja2dyb3VuZCIsICJpbnRlZ2VyIiwgZGVmYXVsdD0weEZGRkZGRiwgY29tbWVudD0iRmlsbCBjb2xvciIpLAogICAgRmllbGQoImFsaWduIiwgInN0cmluZyIsIGxlbmd0aD0xLCBkZWZhdWx0PSJMIiwgcmVxdWlyZXM9SVNfSU5fU0VUKFsnTCcsICdSJywgJ0MnLCAnSiddKSksCiAgICBGaWVsZCgidGV4dCIsICJ0ZXh0IiwgY29tbWVudD0iRGVmYXVsdCB0ZXh0IiksCiAgICBGaWVsZCgicHJpb3JpdHkiLCAiaW50ZWdlciIsIGRlZmF1bHQ9MCwgY29tbWVudD0iWi1PcmRlciIpLAogICAgbWlncmF0ZT1taWdyYXRlLCBmYWtlX21pZ3JhdGU9ZmFrZV9taWdyYXRlKQo8fGZpbV9zdWZmaXh8PgoKZGIuZGVmaW5lX3RhYmxlKCJwZGZfZWxlbWVudCIsCiAgICBGaWVsZCgicGRmX3RlbXBsYXRlX2lkIiwgZGIucGRmX3RlbXBsYXRlLCByZXF1aXJlcz1JU19JTl9EQihkYiwncGRmX3RlbXBsYXRlLnBkZl90ZW1wbGF0ZV9pZCcsICdwZGZfdGVtcGxhdGUudGl0bGUnKSksCiAgICBGaWVsZCgibmFtZSIsIHJlcXVpcmVzPUlTX05PVF9FTVBUWSgpKSwKPHxmaW1fZW5kfD4="]
["ec1f70560a3cf196ea361e61991b8366b64d7f61-1","ec1f70560a3cf196ea361e61991b8366b64d7f61","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOnV0Zi04IC0qLQoKIyBpbnRlbnQ6IGNvbnN1bHRfdHJhZmZpYwoKZnJvbSBOTFUuY29uc3VsdCBpbXBvcnQgdHJhZmZpY19ubHUKZnJvbSBOTFUuY29tbW9uIGltcG9ydCBnaXZlX3VwX25sdQoKZnJvbSBOTEcuY29uc3VsdCBpbXBvcnQgdHJhZmZpY19ubGcKZnJvbSBOTEcuY29tbW9uIGltcG9ydCBjb25maXJtX25sZwpmcm9tIE5MRy5jb21tb24gaW1wb3J0IGdpdmVfdXBfbmxnCgpmcm9tIHNsb3RzLmNvbnN1bHRfc2xvdCBpbXBvcnQgY29uc3VsdF90cmFmZmljX3Nsb3QKZnJvbSByZXF1ZXN0X2FwaS5jb25zdWx0X3RyYWZmaWMgaW1wb3J0IGdldF90cmFmZmljX3JvdXRlX2ludGVyZmFjZQoKCmRlZiBjb25zdWx0X3RyYWZmaWNfaGFuZGxlKGN1c3RvbWVyX3V0dGVyYW5jZSwgc3RhdGVfdHJhY2tlcl9vYmosIGVudGl0aWVzLCBsYWMsIGludGVudF9tb2RlbCwgc2VudGFfZ3J1LCBjb25maXJtX2ludGVycHJldGVyLCBkYl9vYmosIGNvbGxlY3Rpb25fbmFtZSk6CgogICAgZGVmIGllX3RyYWZmaWNfc3RhdGVfZmxvdyhjdXN0b21lcl91dHRlcmFuY2UsIHN0YXRlX3RyYWNrZXJfb2JqLCBlbnRpdGllcywgbGFjLCBkYl9vYmosIGNvbGxlY3Rpb25fbmFtZSk6CiAgICAgICAgZ2l2ZV91cF9zdGF0ZSA9IGdpdmVfdXBfbmx1LndoZXRoZXJfZ2l2ZV91cChjdXN0b21lcl91dHRlcmFuY2UsIHNlbnRhX2dydSwgY29uZmlybV9pbnRlcnByZXRlcikKICAgICAgICBpZiBnaXZlX3VwX3N0YXRlOgogICAgICAgICAgICBzdGF0ZV90cmFja2VyX29iai51cGRhdGVfbGFzdF9zbG90X3N0YXRlKCJzdG9wIikKICAgICAgICAgICAgcmV0dXJuIGdpdmVfdXBfbmxnLnJlc3BvbnNlX2dpdmVfdXAoKSwgInN0b3AiCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgc3RhdGVfdHJhY2tlcl9vYmouZ2V0X2xhc3Rfc2xvdF9zdGF0ZSgpICE9ICJjaGFuZ2UiOgogICAgICAgICAgICAgICAgaWYgc3RhdGVfdHJhY2tlcl9vYmouZ2V0X2xhc3Rfc2xvdF9zdGF0ZSgpID09ICJhc2tfZGVwdCI6CiAgICAgICAgICAgICAgICAgICAgaWVfc2xvdF9yZXN1bHQgPSB0cmFmZmljX25sdS5pZV9hbGxfY29uc3VsdF90cmFmZmljKGN1c3RvbWVyX3V0dGVyYW5jZSwgbGFjLCBlbnRpdGllcywgImFza19kZXB0IikKICAgICAgICAgICAgICAgIGVsaWYgc3RhdGVfdHJhY2tlcl9vYmouZ2V0X2xhc3Rfc2xvdF9zdGF0ZSgpID09ICJhc2tfZGVzdCI6CiAgICAgICAgICAgICAgICAgICAgaWVfc2xvdF9yZXN1bHQgPSB0cmFmZmljX25sdS5pZV9hbGxfY29uc3VsdF90cmFmZmljKGN1c3RvbWVyX3V0dGVyYW5jZSwgbGFjLCBlbnRpdGllcywgImFza19kZXN0IikKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgaWVfc2xvdF9yZXN1bHQgPSB0cmFmZmljX25sdS5pZV9hbGxfY29uc3VsdF90cmFmZmljKGN1c3RvbWVyX3V0dGVyYW5jZSwgbGFjLCBlbnRpdGllcykKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGllX3Nsb3RfcmVzdWx0ID0gZW50aXRpZXMKICAgICAgICAgICAgcHJpbnQoInVwZGF0ZSBhbGwiLCBpZV9zbG90X3Jlc3VsdCkKICAgICAgICAgICAgc3RhdGVfdHJhY2tlcl9vYmoudXBkYXRlX2FsbF9zdGF0ZShpZV9zbG90X3Jlc3VsdCkKICAgICAgICAgICAgc2xvdF9zdGF0ZV9kaWN0ID0gc3RhdGVfdHJhY2tlcl9vYmouanVkZ2VfZWFjaF9zbG90X3N0YXRlKGNvbnN1bHRfdHJhZmZpY19zbG90LmtleXMoKSkKICAgICAgICAgICAgIyBpZiBUcnVlIG5vdCBpbiBzbG90X3N0YXRlX2RpY3QudmFsdWVzKCk6CiAgICAgICAgICAgIGlmIHNsb3Rfc3RhdGVfZGljdFsiZGVwYXJ0dXJlIl0gaXMgRmFsc2UgYW5kIHNsb3Rfc3RhdGVfZGljdFsiZGVzdGluYXRpb24iXSBpcyBGYWxzZSBhbmQgc2xvdF9zdGF0ZV9kaWN0WyJ2ZWhpY2xlIl0gaXMgRmFsc2U6CiAgICAgICAgICAgICAgICBzdGF0ZV90cmFja2VyX29iai51cGRhdGVfbGFzdF9zbG90X3N0YXRlKCJhc2siKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICByZXR1cm4gdHJhZmZpY19ubGcuYXNrX2RlcGFydF9kZXN0X3ZlaGljbGUoKSwgImFzayIKPHxmaW1fZW5kfD4="]
["e74c83aa531200ab3f451e35ceb6d40d30e3a58d-1","e74c83aa531200ab3f451e35ceb6d40d30e3a58d","PHxmaW1fcHJlZml4fD4KCiMgY29kaW5nOiB1dGYtOAoKIyAjIE1hdHBsb3RsaWIg5Z+656GA5pWZ56iLCgojICMjIyBNYXRwbG90bGli5a6Y5pa5Z2FsbGVyee+8mgojICMjIyBodHRwOi8vbWF0cGxvdGxpYi5vcmcvMS40LjMvZ2FsbGVyeS5odG1sCiMgIyMjIOS4gOS4quW+iOWlveeahOaVmeeoi++8mgojICMjIyBodHRwczovL2xpYW0wMjA1Lm1lLzIwMTQvMDkvMTEvbWF0cGxvdGxpYi10dXRvcmlhbC16aC1jbi8KIyAjIyMgR2l0SHViOgojICMjIyBodHRwczovL2dpdGh1Yi5jb20vUmlwdGlkZUJvL2Nzc2xhYgojIAojICMjIyDor7TmmI7vvJoKIyAgICAg5pys5pWZ56iL5piv5LuL57uN5oiR5L2/55So6L+H55qEbWF0cGxvdGxpYuS4reaJgOacieaWueazleeahOaxh+aAu++8jOaWueS+v+Wkp+WutuWcqOWItuWbvuaXtuafpeaJvuS9v+eUqOOAggojICAgICDmiJHlsL3lj6/og73or6bnu4bnmoTlpIfms6jkuobmr4/kuKrmlrnms5Xku6Xlj4rmlrnms5XkuK3lj4LmlbDnmoTlkKvkuYnjgIIKIyAgICAg5LmL5YmN5oiR55S76L+H55qE5omA5pyJ5Zu+5Lmf5Lya5Zyo55m+5bqm5LqR56ys5LqM57uE5oiR5Liq5Lq655qE5paH5Lu25aS55Lit5LiK5Lyg5LiA5Lu944CCCiMgICAgIAojICMjIyBAIGF1dGhvcjogUWlhbiBQYW4KIyAjIyMgQCBFLW1haWw6IGxvdmVseXJpdGFAbWFpbC5kbHV0LmVkdS5jbgoKIyBJblsxXToKCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IG1hdHBsb3RsaWIuZ3JpZHNwZWMgYXMgZ3JpZHNwZWMgICMg5Yqf6IO95pu05Yqg5by65aSn55qE5a2Q5Zu+57uY5Yi25pa55rOVCmZyb20gbXBsX3Rvb2xraXRzLmF4ZXNfZ3JpZDEuaW5zZXRfbG9jYXRvciBpbXBvcnQgaW5zZXRfYXhlcywgem9vbWVkX2luc2V0X2F4ZXMgICMg55So5LqO5o+S5YWl5Zu+5Lit55qE5bCP5Zu+5qGGCmZyb20gbWF0cGxvdGxpYi50aWNrZXIgaW1wb3J0IE11bHRpcGxlTG9jYXRvciAgIyDorr7nva7lnZDmoIfovbTliLvluqYKZnJvbSBtcGxfdG9vbGtpdHMuYXhlc19ncmlkMSBpbXBvcnQgaG9zdF9zdWJwbG90ICAjIOiuqeWbvueahOWdkOagh+i9tOeci+i1t+adpeabtOeyvue+jueahOaWueazlQppbXBvcnQgbXBsX3Rvb2xraXRzLmF4aXNhcnRpc3QgYXMgQUEgICMg6K6p5Zu+55qE5Z2Q5qCH6L205Yi75bqm5ZCR5YaFCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CgoKIyBJblsyXToKCiMg6Ieq5bex5a6a5LmJ55qE5LiA5Lqb57q/5p2h57G75Z6LCmRlZiBnZXRfbGluZXN0eWxlcyhrZXkpOgogICAgbGluZXN0eWxlcyA9IE9yZGVyZWREaWN0KAogICAgICAgIFsoJ3NvbGlkJywgICAgICAgICAgICAgICAoMCwoKSkpLAogICAgICAgICAoJ2xvb3NlbHkgZG90dGVkJywgICAgICAoMCwoMSwxMCkpKSwKICAgICAgICAgKCdkb3R0ZWQnLCAgICAgICAgICAgICAgKDAsICgxLCA1KSkpLAogICAgICAgICAoJ2RlbnNlbHkgZG90dGVkJywgICAgICAoMCwgKDEsIDEpKSksCgogICAgICAgICAoJ2xvb3NlbHkgZGFzaGVkJywgICAgICAoMCwgKDUsIDEwKSkpLAogICAgICAgICAoJ2Rhc2hlZCcsICAgICAgICAgICAgICAoMCwgKDUsIDUpKSksCiAgICAgICAgICgnZGVuc2VseSBkYXNoZWQnLCAgICAgICgwLCAoNSwgMSkpKSwKCiAgICAgICAgICgnbG9vc2VseSBkYXNoZG90dGVkJywgICgwLCAoMywgMTAsIDEsIDEwKSkpLAogICAgICAgICAoJ2Rhc2hkb3R0ZWQnLCAgICAgICAgICAoMCwgKDMsIDUsIDEsIDUpKSksCiAgICAgICAgICgnZGVuc2VseSBkYXNoZG90dGVkJywgICgwLCAoMywgMSwgMSwgMSkpKSwKCiAgICAgICAgICgnbG9vc2VseSBkYXNoZG90ZG90dGVkJywgKDAsICgzLCAxMCwgMSwgMTAsIDEsIDEwKSkpLAogICAgICAgICAoJ2Rhc2hkb3Rkb3R0ZWQnLCAgICAgICAgICgwLCAoMywgNSwgMSwgNSwgMSwgNSkpKSwKICAgICAgICAgKCdkZW5zZWx5IGRhc2hkb3Rkb3R0ZWQnLCAoMCwgKDMsIDEsIDEsIDEsIDEsIDEpKSldKQogICAgcmV0dXJuIGxpbmVzdHlsZXNba2V5XQoKCiMgIyMg5Z+65pys55qE54K557q/5Zu+CgojIEluWzNdOgoKIyDov5nkuKrlm77mmK/lvojlpJrln7rnoYDmlrnms5XnmoTmsYfmgLvvvIzmiYDku6XmsqHog73nhafpob7liLDlj6/or7vmgKfvvIzlpKflrrbnnIvnnIvmlrnms5Xlpb3kuoYKIyDliJvlu7rkuIDkuKo4ICogNueCuShwb2ludCnnmoTlm74sZHBp6K6+572u5Zu+54mH5YiG6L6o546H77yM6buY6K6k5Li6ODAsZmFjZWNvbG9y55qE6IOM5pmv6ImyCmZpZyA9IHBsdC5maWd1cmUobnVtPTEsZmlnc2l6ZT0oOCw4KSxkcGk9ODAsZmFjZWNvbG9yPU5vbmUpCgojIOWIm+W7uuS4gOS4quaWsOeahOWtkOWbvu+8jGF4ZXNfY2xhc3PnlKjkuo7liJvlu7rlnZDmoIfovbTnsbvlnosKYXgxID0gaG9zdF9zdWJwbG90KDExMSxheGVzX2NsYXNzID0gQUEuQXhlcykKCnggPSBucC5saW5zcGFjZSgtbnAucGksIG5wLnBpLCAyNTYsZW5kcG9pbnQ9VHJ1ZSkKeTEseTIgPSBucC5jb3MoeCksIG5wLnNpbih4KQoKIyDnp7vliqjohIrmn7HvvJrnp7vliqjlnZDmoIfovbTliLDlm77kuK3pl7TvvIzpnIDopoHlsIblhbbkuK3nmoTkuKTmnaHorr7nva7kuLrml6DoibIKIyDnhLblkI7osIPmlbTliankuIvnmoTkuKTmnaHliLDlkIjpgILnmoTkvY3nva7igJTigJTigJTigJTmlbDmja7nqbrpl7TnmoQw54K5CiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBheDEgPSBwbHQuZ2NhKCkKIyBheDEuc3BpbmVzWydyaWdodCddLnNldF9jb2xvcignbm9uZScpCiMgYXgxLnNwaW5lc1sndG9wJ10uc2V0X2NvbG9yKCdub25lJykKIyBheDEueGF4aXMuc2V0X3RpY2tzX3Bvc2l0aW9uKCdib3R0b20nKQojIGF4MS5zcGluZXNbJ2JvdHRvbSddLnNldF9wb3NpdGlvbigoJ2RhdGEnLDAuMjUpKQojIGF4MS55YXhpcy5zZXRfdGlja3NfcG9zaXRpb24oJ2xlZnQnKQojIGF4MS5zcGluZXNbJ2xlZnQnXS5zZXRfcG9zaXRpb24oKCdkYXRhJywwLjI1KSkKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKYXgxLnBsb3QoeCx5MSwnbycsIGFscGhhPTAuNSxtcz01LG1mYz0neScsbWVjPSdyJyxtZXc9MC41LGxhYmVsPSdsaW5lIDEnKQpheDEucGxvdCh4LHkyLGMgPSAncicsIGFscGhhPTAuOCxsdz0yLjUsbHMgPSBnZXRfbGluZXN0eWxlcygnbG9vc2VseSBkYXNoZWQnKSxsYWJlbD0nbGluZSAyJykKCiMg5Y+v5Lul5Zyo5Z2Q5qCH5Lit5Lit5o+S5YWl5a2Q5Z2Q5qCH57O7CiNheDIgPSBmaWcuYWRkX2F4ZXMoWzAuNiwwLjIsMC4yLDAuMl0pICAjIGFkZF9heGVzKHJlY3RbbGVmdCxib3R0b20sd2lkdGgsaGVpZ2h0XSkgCiNheDIucGxvdChbMC4xLDAuMiwwLjMsMC40XSxbMC4xLDAuMiwwLjMsMC4zNV0sJ2JvJyxtcz0yLjUpCicnJwpjOiBjb2xvcgphbHBoYTog6K6+572u6YCP5piO5bqmCidibyc6IOihqOekuueUu+eCueWbvu+8jOeCueeahOminOiJsuS4uidiJ+iTneiJsgptczogbWFya2Vyc2l6ZTog6KGo56S654K555qE5aSn5bCP77yM5aaC5p6c55S757q/5Zu+5YiZ5pivbGluZXdpZHRoCm1mYzogbWFya2VyZmFjZWNvbG9yOiBtYXJrZXLlnIbnmoTpopzoibIKbWVjOiBtYXJrZXJlZGdlY29sb3I6IG1hcmtlcui+ueeahOminOiJsgptZXc6IG1hcmtlcmVkZ2V3aWR0aDogbWFya2Vy5ZyG55qE57KX57uGCmxzOiBsaW5lc3R5bGU6IOe6v+adoeeahOexu+WeiwpsdzogbGluZXdpZHRoOiDnur/mnaHnmoTnspfnu4YKbGFiZWw6IOe6v+adoeeahOagh+etvu+8jOivpue7hueahOiuvue9rueUqHBsdC5sZWdlbmQKYWRkX2F4ZXM6IOWPr+S7pemAmui/h2FkZF9heGVz5Zyo5Zu+5Lit5re75Yqg5a2Q5Zu+77yM6K6+572u5pa55b2i5Zu+5qGG55qE5Zub54K55Z2Q5qCH5Y2z5Y+vCicnJwojIOeyvue7huWMluiuvue9rgojIOWcqOWbvuS4rea3u+WKoOaWh+acrOahhgpheDEudGV4dCgtMywgMC41MywgciIkUl4yPTAuOTk3JCIsZm9udHNpemU9MTApCmF4MS50ZXh0KC0zLCAwLjQzLCByIiRwXF92YWx1ZT04Ljk0RV57LTExN30kIixmb250c2l6ZT0xMCkKCiMg5re75Yqg55u057q/5ZKM5qCH6K6w54K5CnQgPSAyKm5wLnBpLzMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpheDEucGxvdChbdCx0XSxbMCxucC5jb3ModCldLCBjb2xvciA9J2JsdWUnLCBsaW5ld2lkdGg9MiwgbGluZXN0eWxlPSItLSIpCmF4MS5zY2F0dGVyKFt0LF0sW25wLmNvcyh0KSxdLDMwLCBjb2xvciA9J2JsdWUnKQoKI+a3u+WKoOeureWktAo8fGZpbV9lbmR8Pg=="]
["97357404062a241b8bb72574cc79b108c9812e01-1","97357404062a241b8bb72574cc79b108c9812e01","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAo8fGZpbV9ob2xlfD4KCnByaW50KCc+PiBEb25lIScpCjx8ZmltX3N1ZmZpeHw+CgpkZiA9IHBkLnJlYWRfY3N2KCcuLi8uLi9kYXRhL3Rlc3QuY3N2JykKZGYgPSBkZi5kcm9wKFtkZi5jb2x1bW5zWzBdXSwgYXhpcz0xKQpkZi50b19jc3YoJy4uL3Jhd19zaWduYWwuY3N2JykKPHxmaW1fZW5kfD4="]
["c1e293c90b14d51e3fe19de8aae2c75729b51d16-1","c1e293c90b14d51e3fe19de8aae2c75729b51d16","PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBBIHByb2dyYW0gdG8gbWFwIHNsaWNlcyBmcm9tIG9sZCBhc3NlbWJsaWVzIHRvIHRoZSBsYXRlc3QgYXNzZW1ibHkuICAgICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyBUbyBydW4gQXNzZW1ibHlNYXBwZXJSZXN0LnB5IHNjcmlwdCBlbnRlciB0byB0aGUgY29tbWFuZCBsaW5lICAgICAgICAgICMKIyAnQXNzZW1ibHlNYXBwZXJSZXN0LnB5JyB3aXRoIDIgcGFyYW1ldGVyczogc3BlY2llcyBhbmQgaW5wdXQgZmlsZSBuYW1lLiMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgICBweXRob24gQXNzZW1ibHlNYXBwZXJSZXN0LnB5IDxzcGVjaWVzPiA8aW5wdXRGaWxlTmFtZT4gICAgICAgICAgICAgICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyBJbnB1dCBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBzbGljZXMgdG8gbWFwIHRvIHRoZSBHUkNoMzcgYXNzZW1ibHkuICAgICMgCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgY29vcmRfc3lzdGVtOnZlcnNpb246c2VxX3JlZ2lvbl9uYW1lOnN0YXJ0OmVuZDpzdHJhbmQgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgRm9yIGV4YW1wbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgY2hyb21vc29tZTpHUkNoMzg6WDoxOjEwMDAwOjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgRXhhbXBsZSBvZiB1c2FnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgcHl0aG9uIEFzc2VtYmx5TWFwcGVyUmVzdC5weSBodW1hbiBhc3NlbWJseW1hcHBlci5pbiAgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgppbXBvcnQgcmVxdWVzdHMsIHN5cywgb3MKCiMjIFRoaXMgc2NyaXB0IGlzIG1hcHBpbmcgc2xpY2VzIGZyb20gb25lIGFzc2VtYmxpZXMoR1JDaDM4KSB0byB0aGUgYW5vdGhlcihHUkNoMzcpLgojIyBUbyBydW4gaXQgdXNlIHRoZSBmb2xvd2luZyBmb3JtYXQgcHl0aG9uIDxzcGVjaWVzPiA8aW5wdXRGaWxlTmFtZT4KIyMgRXhhbXBsZSwgJ3B5dGhvbiBodW1hbiBhc3NlbWJseW1hcHBlci5pbicKICAKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICBpZiBsZW4oc3lzLmFyZ3YpID09IDM6CiAgICAgIHNwZWNpZXMsIGluRmlsZSA9IHN5cy5hcmd2WzE6XQogIGVsc2U6CiAgICAgIHByaW50KCdJbmNvcnJlY3QgaW5wdXQuJykKICAgICAgcHJpbnQoJ1VzZSBweXRob24gPHNwZWNpZXM+IDxpbnB1dEZpbGVOYW1lPicpCiAgICAgIGV4aXQoMCkKCiMgU3BlY2lmeSB0aGUgb3JpZ2luYWwgYW5kIG1hcHBpbmcgYXNzZW1ibGllcy4KYXNzZW1ibHlPcmlnaW5hbCA9ICdHUkNoMzgnCmFzc2VtYmx5TWFwcGluZyAgPSAnR1JDaDM3JwoKdHJ5OgogIGYgPSBvcGVuKGluRmlsZSwgJ3InKQpleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CiAgcHJpbnQoJ0ZpbGUgJyArIGluRmlsZSArICcgZG9lcyBub3QgZXhpc3QnKQogIGV4aXQoMCkKCiMgUmVhZCB0aGUgZmlsZSBsaW5lIGJ5IGxpbmUsIGRlbGV0ZSBzcGFjZXMgYW5kIGNvbW1lbnRzCmZvciBsaW5lIGluIGY6CiAgc3RyaXBwZWRMaW5lID0gbGluZS5zdHJpcCgpLnJlcGxhY2UoJyAnLCAnJykKICBpZiBsZW4oc3RyaXBwZWRMaW5lKSA+IDAgYW5kIHN0cmlwcGVkTGluZVswXSBub3QgaW4gWycjJywnXG4nLCcnXToKICAgIHBvc0NvbW1lbnQgPSBzdHJpcHBlZExpbmUuZmluZCgnIycpCiAgICBpZiBwb3NDb21tZW50ICE9IC0xOgogICAgICBzdHJpcHBlZExpbmUgPSBzdHJpcHBlZExpbmVbOnBvc0NvbW1lbnQtMV0gCgogICAgIyBnZXQgdGhlIHZhbHVlcyBmb3IgdGhlIHJlcXVlc3QgbGluZS4KICAgIHZhbHVlcyA9IHN0cmlwcGVkTGluZS5zcGxpdCgnOicpCgogICAgIyBpZiB0aGVyZSBpcyBubyBzdGFydCBvciBzdHJhbmQsIHJlcGxhY2UgdGhlbSB3aXRoICcxJyAgICAgCiAgICBpZiBub3QgdmFsdWVzWzNdOgogICAgICB2YWx1ZXNbM10gPSAnMScKICAgCiAgICBpZiBsZW4odmFsdWVzKSA9PSA1OgogICAgICB2YWx1ZXMuYXBwZW5kKCcxJykgIAogICAKICAgIHNlcnZlciA9ICJodHRwOi8vcmVzdC5lbnNlbWJsLm9yZyIKICAgIAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAjIGJ1aWxkaW5nIHRoZSByZXF1ZXN0IGxpbmUKICAgIGV4dCA9ICcvbWFwLycgKyBzcGVjaWVzICsgJy8nICsgYXNzZW1ibHlPcmlnaW5hbCArICcvJwoKICAgIGV4dCArPSAgdmFsdWVzWzJdICsgJzonICAgIyBzZXFfcmVnaW9uX25hbWUKPHxmaW1fZW5kfD4="]
["c1e293c90b14d51e3fe19de8aae2c75729b51d16-2","c1e293c90b14d51e3fe19de8aae2c75729b51d16","PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBBIHByb2dyYW0gdG8gbWFwIHNsaWNlcyBmcm9tIG9sZCBhc3NlbWJsaWVzIHRvIHRoZSBsYXRlc3QgYXNzZW1ibHkuICAgICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyBUbyBydW4gQXNzZW1ibHlNYXBwZXJSZXN0LnB5IHNjcmlwdCBlbnRlciB0byB0aGUgY29tbWFuZCBsaW5lICAgICAgICAgICMKIyAnQXNzZW1ibHlNYXBwZXJSZXN0LnB5JyB3aXRoIDIgcGFyYW1ldGVyczogc3BlY2llcyBhbmQgaW5wdXQgZmlsZSBuYW1lLiMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgICBweXRob24gQXNzZW1ibHlNYXBwZXJSZXN0LnB5IDxzcGVjaWVzPiA8aW5wdXRGaWxlTmFtZT4gICAgICAgICAgICAgICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyBJbnB1dCBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBzbGljZXMgdG8gbWFwIHRvIHRoZSBHUkNoMzcgYXNzZW1ibHkuICAgICMgCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgY29vcmRfc3lzdGVtOnZlcnNpb246c2VxX3JlZ2lvbl9uYW1lOnN0YXJ0OmVuZDpzdHJhbmQgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgRm9yIGV4YW1wbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgY2hyb21vc29tZTpHUkNoMzg6WDoxOjEwMDAwOjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgRXhhbXBsZSBvZiB1c2FnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgcHl0aG9uIEFzc2VtYmx5TWFwcGVyUmVzdC5weSBodW1hbiBhc3NlbWJseW1hcHBlci5pbiAgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgppbXBvcnQgcmVxdWVzdHMsIHN5cywgb3MKCiMjIFRoaXMgc2NyaXB0IGlzIG1hcHBpbmcgc2xpY2VzIGZyb20gb25lIGFzc2VtYmxpZXMoR1JDaDM4KSB0byB0aGUgYW5vdGhlcihHUkNoMzcpLgojIyBUbyBydW4gaXQgdXNlIHRoZSBmb2xvd2luZyBmb3JtYXQgcHl0aG9uIDxzcGVjaWVzPiA8aW5wdXRGaWxlTmFtZT4KIyMgRXhhbXBsZSwgJ3B5dGhvbiBodW1hbiBhc3NlbWJseW1hcHBlci5pbicKICAKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICBpZiBsZW4oc3lzLmFyZ3YpID09IDM6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgc3BlY2llcywgaW5GaWxlID0gc3lzLmFyZ3ZbMTpdCjx8ZmltX2VuZHw+"]
["c1e293c90b14d51e3fe19de8aae2c75729b51d16-3","c1e293c90b14d51e3fe19de8aae2c75729b51d16","PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBBIHByb2dyYW0gdG8gbWFwIHNsaWNlcyBmcm9tIG9sZCBhc3NlbWJsaWVzIHRvIHRoZSBsYXRlc3QgYXNzZW1ibHkuICAgICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyBUbyBydW4gQXNzZW1ibHlNYXBwZXJSZXN0LnB5IHNjcmlwdCBlbnRlciB0byB0aGUgY29tbWFuZCBsaW5lICAgICAgICAgICMKIyAnQXNzZW1ibHlNYXBwZXJSZXN0LnB5JyB3aXRoIDIgcGFyYW1ldGVyczogc3BlY2llcyBhbmQgaW5wdXQgZmlsZSBuYW1lLiMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgICBweXRob24gQXNzZW1ibHlNYXBwZXJSZXN0LnB5IDxzcGVjaWVzPiA8aW5wdXRGaWxlTmFtZT4gICAgICAgICAgICAgICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyBJbnB1dCBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBzbGljZXMgdG8gbWFwIHRvIHRoZSBHUkNoMzcgYXNzZW1ibHkuICAgICMgCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgY29vcmRfc3lzdGVtOnZlcnNpb246c2VxX3JlZ2lvbl9uYW1lOnN0YXJ0OmVuZDpzdHJhbmQgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgRm9yIGV4YW1wbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgY2hyb21vc29tZTpHUkNoMzg6WDoxOjEwMDAwOjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgRXhhbXBsZSBvZiB1c2FnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgcHl0aG9uIEFzc2VtYmx5TWFwcGVyUmVzdC5weSBodW1hbiBhc3NlbWJseW1hcHBlci5pbiAgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgppbXBvcnQgcmVxdWVzdHMsIHN5cywgb3MKCiMjIFRoaXMgc2NyaXB0IGlzIG1hcHBpbmcgc2xpY2VzIGZyb20gb25lIGFzc2VtYmxpZXMoR1JDaDM4KSB0byB0aGUgYW5vdGhlcihHUkNoMzcpLgojIyBUbyBydW4gaXQgdXNlIHRoZSBmb2xvd2luZyBmb3JtYXQgcHl0aG9uIDxzcGVjaWVzPiA8aW5wdXRGaWxlTmFtZT4KIyMgRXhhbXBsZSwgJ3B5dGhvbiBodW1hbiBhc3NlbWJseW1hcHBlci5pbicKICAKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICBpZiBsZW4oc3lzLmFyZ3YpID09IDM6CiAgICAgIHNwZWNpZXMsIGluRmlsZSA9IHN5cy5hcmd2WzE6XQogIGVsc2U6CiAgICAgIHByaW50KCdJbmNvcnJlY3QgaW5wdXQuJykKICAgICAgcHJpbnQoJ1VzZSBweXRob24gPHNwZWNpZXM+IDxpbnB1dEZpbGVOYW1lPicpCiAgICAgIGV4aXQoMCkKCiMgU3BlY2lmeSB0aGUgb3JpZ2luYWwgYW5kIG1hcHBpbmcgYXNzZW1ibGllcy4KYXNzZW1ibHlPcmlnaW5hbCA9ICdHUkNoMzgnCmFzc2VtYmx5TWFwcGluZyAgPSAnR1JDaDM3JwoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgp0cnk6CiAgZiA9IG9wZW4oaW5GaWxlLCAncicpCmV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKICBwcmludCgnRmlsZSAnICsgaW5GaWxlICsgJyBkb2VzIG5vdCBleGlzdCcpCjx8ZmltX2VuZHw+"]
["c1e293c90b14d51e3fe19de8aae2c75729b51d16-4","c1e293c90b14d51e3fe19de8aae2c75729b51d16","PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBBIHByb2dyYW0gdG8gbWFwIHNsaWNlcyBmcm9tIG9sZCBhc3NlbWJsaWVzIHRvIHRoZSBsYXRlc3QgYXNzZW1ibHkuICAgICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyBUbyBydW4gQXNzZW1ibHlNYXBwZXJSZXN0LnB5IHNjcmlwdCBlbnRlciB0byB0aGUgY29tbWFuZCBsaW5lICAgICAgICAgICMKIyAnQXNzZW1ibHlNYXBwZXJSZXN0LnB5JyB3aXRoIDIgcGFyYW1ldGVyczogc3BlY2llcyBhbmQgaW5wdXQgZmlsZSBuYW1lLiMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgICBweXRob24gQXNzZW1ibHlNYXBwZXJSZXN0LnB5IDxzcGVjaWVzPiA8aW5wdXRGaWxlTmFtZT4gICAgICAgICAgICAgICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyBJbnB1dCBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBzbGljZXMgdG8gbWFwIHRvIHRoZSBHUkNoMzcgYXNzZW1ibHkuICAgICMgCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgY29vcmRfc3lzdGVtOnZlcnNpb246c2VxX3JlZ2lvbl9uYW1lOnN0YXJ0OmVuZDpzdHJhbmQgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgRm9yIGV4YW1wbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgY2hyb21vc29tZTpHUkNoMzg6WDoxOjEwMDAwOjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgRXhhbXBsZSBvZiB1c2FnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgcHl0aG9uIEFzc2VtYmx5TWFwcGVyUmVzdC5weSBodW1hbiBhc3NlbWJseW1hcHBlci5pbiAgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgppbXBvcnQgcmVxdWVzdHMsIHN5cywgb3MKCiMjIFRoaXMgc2NyaXB0IGlzIG1hcHBpbmcgc2xpY2VzIGZyb20gb25lIGFzc2VtYmxpZXMoR1JDaDM4KSB0byB0aGUgYW5vdGhlcihHUkNoMzcpLgojIyBUbyBydW4gaXQgdXNlIHRoZSBmb2xvd2luZyBmb3JtYXQgcHl0aG9uIDxzcGVjaWVzPiA8aW5wdXRGaWxlTmFtZT4KIyMgRXhhbXBsZSwgJ3B5dGhvbiBodW1hbiBhc3NlbWJseW1hcHBlci5pbicKICAKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICBpZiBsZW4oc3lzLmFyZ3YpID09IDM6CiAgICAgIHNwZWNpZXMsIGluRmlsZSA9IHN5cy5hcmd2WzE6XQogIGVsc2U6CiAgICAgIHByaW50KCdJbmNvcnJlY3QgaW5wdXQuJykKICAgICAgcHJpbnQoJ1VzZSBweXRob24gPHNwZWNpZXM+IDxpbnB1dEZpbGVOYW1lPicpCiAgICAgIGV4aXQoMCkKCiMgU3BlY2lmeSB0aGUgb3JpZ2luYWwgYW5kIG1hcHBpbmcgYXNzZW1ibGllcy4KYXNzZW1ibHlPcmlnaW5hbCA9ICdHUkNoMzgnCmFzc2VtYmx5TWFwcGluZyAgPSAnR1JDaDM3JwoKdHJ5OgogIGYgPSBvcGVuKGluRmlsZSwgJ3InKQpleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CiAgcHJpbnQoJ0ZpbGUgJyArIGluRmlsZSArICcgZG9lcyBub3QgZXhpc3QnKQogIGV4aXQoMCkKCiMgUmVhZCB0aGUgZmlsZSBsaW5lIGJ5IGxpbmUsIGRlbGV0ZSBzcGFjZXMgYW5kIGNvbW1lbnRzCmZvciBsaW5lIGluIGY6CiAgc3RyaXBwZWRMaW5lID0gbGluZS5zdHJpcCgpLnJlcGxhY2UoJyAnLCAnJykKICBpZiBsZW4oc3RyaXBwZWRMaW5lKSA+IDAgYW5kIHN0cmlwcGVkTGluZVswXSBub3QgaW4gWycjJywnXG4nLCcnXToKICAgIHBvc0NvbW1lbnQgPSBzdHJpcHBlZExpbmUuZmluZCgnIycpCiAgICBpZiBwb3NDb21tZW50ICE9IC0xOgogICAgICBzdHJpcHBlZExpbmUgPSBzdHJpcHBlZExpbmVbOnBvc0NvbW1lbnQtMV0gCgogICAgIyBnZXQgdGhlIHZhbHVlcyBmb3IgdGhlIHJlcXVlc3QgbGluZS4KICAgIHZhbHVlcyA9IHN0cmlwcGVkTGluZS5zcGxpdCgnOicpCgogICAgIyBpZiB0aGVyZSBpcyBubyBzdGFydCBvciBzdHJhbmQsIHJlcGxhY2UgdGhlbSB3aXRoICcxJyAgICAgCiAgICBpZiBub3QgdmFsdWVzWzNdOgogICAgICB2YWx1ZXNbM10gPSAnMScKICAgCiAgICBpZiBsZW4odmFsdWVzKSA9PSA1OgogICAgICB2YWx1ZXMuYXBwZW5kKCcxJykgIAogICAKICAgIHNlcnZlciA9ICJodHRwOi8vcmVzdC5lbnNlbWJsLm9yZyIKICAgIAogICAgIyBidWlsZGluZyB0aGUgcmVxdWVzdCBsaW5lCiAgICBleHQgPSAnL21hcC8nICsgc3BlY2llcyArICcvJyArIGFzc2VtYmx5T3JpZ2luYWwgKyAnLycKCiAgICBleHQgKz0gIHZhbHVlc1syXSArICc6JyAgICMgc2VxX3JlZ2lvbl9uYW1lCiAgICBleHQgKz0gIHZhbHVlc1szXSArICcuLicgICMgc3RhcnQKICAgIGV4dCArPSAgdmFsdWVzWzRdICsgJzonICAgIyBlbmQKICAgIGV4dCArPSAgdmFsdWVzWzVdICsgJy8nICAgIyBzdHJhbmQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGV4dCArPSBhc3NlbWJseU1hcHBpbmcgKyAnPycKCiAgICByID0gcmVxdWVzdHMuZ2V0KHNlcnZlcitleHQsIGhlYWRlcnM9eyAiQ29udGVudC1UeXBlIiA6ICJhcHBsaWNhdGlvbi9qc29uIn0pCjx8ZmltX2VuZHw+"]
["c1e293c90b14d51e3fe19de8aae2c75729b51d16-5","c1e293c90b14d51e3fe19de8aae2c75729b51d16","PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBBIHByb2dyYW0gdG8gbWFwIHNsaWNlcyBmcm9tIG9sZCBhc3NlbWJsaWVzIHRvIHRoZSBsYXRlc3QgYXNzZW1ibHkuICAgICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyBUbyBydW4gQXNzZW1ibHlNYXBwZXJSZXN0LnB5IHNjcmlwdCBlbnRlciB0byB0aGUgY29tbWFuZCBsaW5lICAgICAgICAgICMKIyAnQXNzZW1ibHlNYXBwZXJSZXN0LnB5JyB3aXRoIDIgcGFyYW1ldGVyczogc3BlY2llcyBhbmQgaW5wdXQgZmlsZSBuYW1lLiMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojICAgIHB5dGhvbiBBc3NlbWJseU1hcHBlclJlc3QucHkgPHNwZWNpZXM+IDxpbnB1dEZpbGVOYW1lPiAgICAgICAgICAgICAgIwojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojIElucHV0IGZpbGUgY29udGFpbnMgYSBsaXN0IG9mIHNsaWNlcyB0byBtYXAgdG8gdGhlIEdSQ2gzNyBhc3NlbWJseS4gICAgIyAKPHxmaW1fZW5kfD4="]
["ec2de2f91bc6a4adeae329c9717e390bc2b8268a-1","ec2de2f91bc6a4adeae329c9717e390bc2b8268a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCmltcG9ydCBvcwppbXBvcnQgc3lzCgpkZWYgZ2VuZXJhdGVfZGF0YWZpbGVfb2xkKG51bWJlcl9pdGVtcz0xMDAwKToKICAgICIiIgogICAgQ3JlYXRlIHRoZSBzYW1wbGVzLnB5IGZpbGUKICAgICIiIgogICAgZnJvbSB1dGlscyBpbXBvcnQgZ2V0X25hbWVzLCBnZW5lcmF0ZV9kYXRhc2V0CiAgICBmcm9tIHBwcmludCBpbXBvcnQgcHByaW50CiAgICBmaWxlbmFtZSA9ICJzYW1wbGVzLnB5IgogICAgZGF0YXNldCA9IGdlbmVyYXRlX2RhdGFzZXQobnVtYmVyX2l0ZW1zKQogICAgZm8gPSBvcGVuKGZpbGVuYW1lLCAid2IiKQogICAgZm8ud3JpdGUoIiMhL3Vzci9iaW4vZW52IHB5dGhvblxuIikKICAgIGZvLndyaXRlKCIjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxuIikKICAgIGZvLndyaXRlKCIjQnJhaW5hZXRpYzogaHR0cDovL3d3dy50aGVuZXRwbGFuZXQuY29tXG5cbiIpCiAgICBmby53cml0ZSgiU0FNUExFUyA9ICIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHBwcmludChkYXRhc2V0LCBmbykKICAgIGZvLmNsb3NlKCkKICAgIHByaW50ICIlcyBnZW5lcmF0ZWQgd2l0aCAlZCBzYW1wbGVzIiAlIChmaWxlbmFtZSwgbnVtYmVyX2l0ZW1zKQoKPHxmaW1fZW5kfD4="]
["ec2de2f91bc6a4adeae329c9717e390bc2b8268a-2","ec2de2f91bc6a4adeae329c9717e390bc2b8268a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCmltcG9ydCBvcwppbXBvcnQgc3lzCgpkZWYgZ2VuZXJhdGVfZGF0YWZpbGVfb2xkKG51bWJlcl9pdGVtcz0xMDAwKToKICAgICIiIgogICAgQ3JlYXRlIHRoZSBzYW1wbGVzLnB5IGZpbGUKICAgICIiIgogICAgZnJvbSB1dGlscyBpbXBvcnQgZ2V0X25hbWVzLCBnZW5lcmF0ZV9kYXRhc2V0CiAgICBmcm9tIHBwcmludCBpbXBvcnQgcHByaW50CiAgICBmaWxlbmFtZSA9ICJzYW1wbGVzLnB5IgogICAgZGF0YXNldCA9IGdlbmVyYXRlX2RhdGFzZXQobnVtYmVyX2l0ZW1zKQogICAgZm8gPSBvcGVuKGZpbGVuYW1lLCAid2IiKQogICAgZm8ud3JpdGUoIiMhL3Vzci9iaW4vZW52IHB5dGhvblxuIikKICAgIGZvLndyaXRlKCIjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxuIikKICAgIGZvLndyaXRlKCIjQnJhaW5hZXRpYzogaHR0cDovL3d3dy50aGVuZXRwbGFuZXQuY29tXG5cbiIpCiAgICBmby53cml0ZSgiU0FNUExFUyA9ICIpCiAgICBwcHJpbnQoZGF0YXNldCwgZm8pCiAgICBmby5jbG9zZSgpCiAgICBwcmludCAiJXMgZ2VuZXJhdGVkIHdpdGggJWQgc2FtcGxlcyIgJSAoZmlsZW5hbWUsIG51bWJlcl9pdGVtcykKCmRlZiBnZW5lcmF0ZV9kYXRhZmlsZShudW1iZXJfaXRlbXM9MjAwMDApOgogICAgIiIiCiAgICBDcmVhdGUgdGhlIHNhbXBsZXMucHkgZmlsZQogICAgIiIiCiAgICBmcm9tIHV0aWxzIGltcG9ydCBnZW5lcmF0ZV9kYXRhc2V0X3NoZWx2ZQogICAgZmlsZW5hbWUgPSAic2FtcGxlcy5zaGVsdmUiCiAgICBkYXRhc2V0ID0gZ2VuZXJhdGVfZGF0YXNldF9zaGVsdmUoZmlsZW5hbWUsIG51bWJlcl9pdGVtcykKICAgIHByaW50ICIlcyBnZW5lcmF0ZWQgd2l0aCAlZCBzYW1wbGVzIiAlIChmaWxlbmFtZSwgbnVtYmVyX2l0ZW1zKQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICIiIgogICAgVXNhZ2U6IAogICAgICAgICAgICBweXRob24gZ2VuZXJhdGVfZGF0YXNldC5weSA2MDAwMAoKICAgIChEYXRhc2V0IHNpemUgZGVmYXVsdHMgdG8gMTAwMCBpZiBub3Qgc3BlY2lmaWVkKQogICAgIiIiCiAgICB0cnk6CiAgICAgICAgZ2VuZXJhdGVfZGF0YWZpbGUoaW50KHN5cy5hcmd2WzFdKSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgZ2VuZXJhdGVfZGF0YWZpbGUoKQo8fGZpbV9lbmR8Pg=="]
["ec2de2f91bc6a4adeae329c9717e390bc2b8268a-3","ec2de2f91bc6a4adeae329c9717e390bc2b8268a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCmltcG9ydCBvcwppbXBvcnQgc3lzCgpkZWYgZ2VuZXJhdGVfZGF0YWZpbGVfb2xkKG51bWJlcl9pdGVtcz0xMDAwKToKICAgICIiIgogICAgQ3JlYXRlIHRoZSBzYW1wbGVzLnB5IGZpbGUKICAgICIiIgogICAgZnJvbSB1dGlscyBpbXBvcnQgZ2V0X25hbWVzLCBnZW5lcmF0ZV9kYXRhc2V0CiAgICBmcm9tIHBwcmludCBpbXBvcnQgcHByaW50CiAgICBmaWxlbmFtZSA9ICJzYW1wbGVzLnB5Igo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkYXRhc2V0ID0gZ2VuZXJhdGVfZGF0YXNldChudW1iZXJfaXRlbXMpCiAgICBmbyA9IG9wZW4oZmlsZW5hbWUsICJ3YiIpCiAgICBmby53cml0ZSgiIyEvdXNyL2Jpbi9lbnYgcHl0aG9uXG4iKQogICAgZm8ud3JpdGUoIiMgLSotIGNvZGluZzogdXRmLTggLSotXG4iKQo8fGZpbV9lbmR8Pg=="]
["44f24401fdbc92da285693e3b36cb684f25ddbeb-1","44f24401fdbc92da285693e3b36cb684f25ddbeb","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRpc2NvcmQsIHJhbmRvbSwganNvbgpmcm9tIGRpc2NvcmQuZXh0IGltcG9ydCBjb21tYW5kcwpmcm9tIGRpc2NvcmRfc2xhc2ggaW1wb3J0IGNvZ19leHQsIFNsYXNoQ29udGV4dAoKY2xhc3MgU2xhc2goY29tbWFuZHMuQ29nKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBib3QpOgogICAgICAgIHNlbGYuYm90ID0gYm90CgogICAgQGNvZ19leHQuY29nX3NsYXNoKG5hbWU9Imxlbm55IiwgZGVzY3JpcHRpb249IkVudm95ZXIgdW4gbGVubnkgISIpCiAgICBhc3luYyBkZWYgX2xlbm55KHNlbGYsIGN0eCk6CiAgICAgICAgYV9maWxlID0gb3Blbigibm8tbW92ZS5qc29uIiwgInIiKQogICAgICAgIGpzb25fb2JqZWN0X25tID0ganNvbi5sb2FkKGFfZmlsZSkKICAgICAgICBhX2ZpbGUuY2xvc2UoKQogICAgICAgIGF3YWl0IGN0eC5zZW5kKHJhbmRvbS5jaG9pY2UoanNvbl9vYmplY3Rfbm1bJ2xlbm55J10pKQoKZGVmIHNldHVwKGJvdCk6Cjx8ZmltX2hvbGV8PgpkZWYgdGVhcmRvd24oYm90KToKICAgIGJvdC5yZW1vdmVfY29nKCJsZW5ueSIpCjx8ZmltX3N1ZmZpeHw+CiAgICBib3QuYWRkX2NvZyhTbGFzaChib3QpKQoKPHxmaW1fZW5kfD4="]
["44f24401fdbc92da285693e3b36cb684f25ddbeb-2","44f24401fdbc92da285693e3b36cb684f25ddbeb","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRpc2NvcmQsIHJhbmRvbSwganNvbgpmcm9tIGRpc2NvcmQuZXh0IGltcG9ydCBjb21tYW5kcwpmcm9tIGRpc2NvcmRfc2xhc2ggaW1wb3J0IGNvZ19leHQsIFNsYXNoQ29udGV4dAoKY2xhc3MgU2xhc2goY29tbWFuZHMuQ29nKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBib3QpOgogICAgICAgIHNlbGYuYm90ID0gYm90CgogICAgQGNvZ19leHQuY29nX3NsYXNoKG5hbWU9Imxlbm55IiwgZGVzY3JpcHRpb249IkVudm95ZXIgdW4gbGVubnkgISIpCiAgICBhc3luYyBkZWYgX2xlbm55KHNlbGYsIGN0eCk6CiAgICAgICAgYV9maWxlID0gb3Blbigibm8tbW92ZS5qc29uIiwgInIiKQogICAgICAgIGpzb25fb2JqZWN0X25tID0ganNvbi5sb2FkKGFfZmlsZSkKICAgICAgICBhX2ZpbGUuY2xvc2UoKQogICAgICAgIGF3YWl0IGN0eC5zZW5kKHJhbmRvbS5jaG9pY2UoanNvbl9vYmplY3Rfbm1bJ2xlbm55J10pKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpkZWYgc2V0dXAoYm90KToKICAgIGJvdC5hZGRfY29nKFNsYXNoKGJvdCkpCgo8fGZpbV9lbmR8Pg=="]
["44f24401fdbc92da285693e3b36cb684f25ddbeb-3","44f24401fdbc92da285693e3b36cb684f25ddbeb","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRpc2NvcmQsIHJhbmRvbSwganNvbgpmcm9tIGRpc2NvcmQuZXh0IGltcG9ydCBjb21tYW5kcwpmcm9tIGRpc2NvcmRfc2xhc2ggaW1wb3J0IGNvZ19leHQsIFNsYXNoQ29udGV4dAoKY2xhc3MgU2xhc2goY29tbWFuZHMuQ29nKToKPHxmaW1faG9sZXw+CiAgICBhc3luYyBkZWYgX2xlbm55KHNlbGYsIGN0eCk6CiAgICAgICAgYV9maWxlID0gb3Blbigibm8tbW92ZS5qc29uIiwgInIiKQogICAgICAgIGpzb25fb2JqZWN0X25tID0ganNvbi5sb2FkKGFfZmlsZSkKICAgICAgICBhX2ZpbGUuY2xvc2UoKQogICAgICAgIGF3YWl0IGN0eC5zZW5kKHJhbmRvbS5jaG9pY2UoanNvbl9vYmplY3Rfbm1bJ2xlbm55J10pKQoKZGVmIHNldHVwKGJvdCk6CiAgICBib3QuYWRkX2NvZyhTbGFzaChib3QpKQoKZGVmIHRlYXJkb3duKGJvdCk6CiAgICBib3QucmVtb3ZlX2NvZygibGVubnkiKQo8fGZpbV9zdWZmaXh8PgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGJvdCk6CiAgICAgICAgc2VsZi5ib3QgPSBib3QKCiAgICBAY29nX2V4dC5jb2dfc2xhc2gobmFtZT0ibGVubnkiLCBkZXNjcmlwdGlvbj0iRW52b3llciB1biBsZW5ueSAhIikKPHxmaW1fZW5kfD4="]
["44f24401fdbc92da285693e3b36cb684f25ddbeb-4","44f24401fdbc92da285693e3b36cb684f25ddbeb","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRpc2NvcmQsIHJhbmRvbSwganNvbgpmcm9tIGRpc2NvcmQuZXh0IGltcG9ydCBjb21tYW5kcwpmcm9tIGRpc2NvcmRfc2xhc2ggaW1wb3J0IGNvZ19leHQsIFNsYXNoQ29udGV4dAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpjbGFzcyBTbGFzaChjb21tYW5kcy5Db2cpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGJvdCk6CiAgICAgICAgc2VsZi5ib3QgPSBib3QKCjx8ZmltX2VuZHw+"]
["44f24401fdbc92da285693e3b36cb684f25ddbeb-5","44f24401fdbc92da285693e3b36cb684f25ddbeb","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRpc2NvcmQsIHJhbmRvbSwganNvbgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gZGlzY29yZC5leHQgaW1wb3J0IGNvbW1hbmRzCmZyb20gZGlzY29yZF9zbGFzaCBpbXBvcnQgY29nX2V4dCwgU2xhc2hDb250ZXh0CgpjbGFzcyBTbGFzaChjb21tYW5kcy5Db2cpOgo8fGZpbV9lbmR8Pg=="]
["e730409ace55b76a541d0ad765dc8c8db08670d4-1","e730409ace55b76a541d0ad765dc8c8db08670d4","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCnByaW50ICIjIiozICsiIENvbnN0cnVjdG9yZXMgIisiIyIqMwoKY2xhc3MgSHVtYW5vKG9iamVjdCk6CiAgICBkZWYgc2FsdWRhcihzZWxmLCBwYXJhKToKICAgICAgICByZXR1cm4gIkhvbGEgIiArIHBhcmEKCmNsYXNzIFBlcnNvbmEoSHVtYW5vKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBub21icmU9JycpOgogICAgICAgIHNlbGYubm9tYnJlID0gbm9tYnJlCiAgICBkZWYgcHJlc2VudGFyc2Uoc2VsZik6CiAgICAgICAgcmV0dXJuICJNZSBsbGFtbyAiK3NlbGYubm9tYnJlCgpqdWFuX3BlcmV6ID0gUGVyc29uYSgiSnVhbiBQZXJleiIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcHJpbnQganVhbl9wZXJlei5zYWx1ZGFyKCJQZXBpdG8iKQpwcmludCBqdWFuX3BlcmV6LnByZXNlbnRhcnNlKCkKPHxmaW1fZW5kfD4="]
["e730409ace55b76a541d0ad765dc8c8db08670d4-2","e730409ace55b76a541d0ad765dc8c8db08670d4","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCnByaW50ICIjIiozICsiIENvbnN0cnVjdG9yZXMgIisiIyIqMwoKY2xhc3MgSHVtYW5vKG9iamVjdCk6CiAgICBkZWYgc2FsdWRhcihzZWxmLCBwYXJhKToKICAgICAgICByZXR1cm4gIkhvbGEgIiArIHBhcmEKCmNsYXNzIFBlcnNvbmEoSHVtYW5vKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBub21icmU9JycpOgogICAgICAgIHNlbGYubm9tYnJlID0gbm9tYnJlCiAgICBkZWYgcHJlc2VudGFyc2Uoc2VsZik6CiAgICAgICAgcmV0dXJuICJNZSBsbGFtbyAiK3NlbGYubm9tYnJlCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cmp1YW5fcGVyZXogPSBQZXJzb25hKCJKdWFuIFBlcmV6IikKcHJpbnQganVhbl9wZXJlei5zYWx1ZGFyKCJQZXBpdG8iKQpwcmludCBqdWFuX3BlcmV6LnByZXNlbnRhcnNlKCkKPHxmaW1fZW5kfD4="]
["e730409ace55b76a541d0ad765dc8c8db08670d4-3","e730409ace55b76a541d0ad765dc8c8db08670d4","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcHJpbnQgIiMiKjMgKyIgQ29uc3RydWN0b3JlcyAiKyIjIiozCgpjbGFzcyBIdW1hbm8ob2JqZWN0KToKICAgIGRlZiBzYWx1ZGFyKHNlbGYsIHBhcmEpOgo8fGZpbV9lbmR8Pg=="]
["e730409ace55b76a541d0ad765dc8c8db08670d4-4","e730409ace55b76a541d0ad765dc8c8db08670d4","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCnByaW50ICIjIiozICsiIENvbnN0cnVjdG9yZXMgIisiIyIqMwoKY2xhc3MgSHVtYW5vKG9iamVjdCk6CiAgICBkZWYgc2FsdWRhcihzZWxmLCBwYXJhKToKICAgICAgICByZXR1cm4gIkhvbGEgIiArIHBhcmEKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgUGVyc29uYShIdW1hbm8pOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG5vbWJyZT0nJyk6CiAgICAgICAgc2VsZi5ub21icmUgPSBub21icmUKICAgIGRlZiBwcmVzZW50YXJzZShzZWxmKToKPHxmaW1fZW5kfD4="]
["e77a00a076693ee13182b67cfb51780bc707f201-1","e77a00a076693ee13182b67cfb51780bc707f201","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCgpmcm9tIG5ucGFja2FnZS5ubi5pbml0aWFsaXplcnMgaW1wb3J0IHplcm9zX2luaXRpYWxpemVyCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpkZWYgdGVzdF96ZXJvc19pbml0aWFsaXplcigpOgogICAgIyB0ZW5zb3Igb2YgYWxsIG9uZXMKICAgIHJlcyA9IHplcm9zX2luaXRpYWxpemVyKHRvcmNoLm9uZXMoMiwgMykpCiAgICBhc3NlcnQgdG9yY2guYWxsY2xvc2UodG9yY2guemVyb3MoMiwgMyksIHJlcywgYXRvbD0wLjAsIHJ0b2w9MS4wZS03KQo8fGZpbV9lbmR8Pg=="]
["e77a00a076693ee13182b67cfb51780bc707f201-2","e77a00a076693ee13182b67cfb51780bc707f201","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCgpmcm9tIG5ucGFja2FnZS5ubi5pbml0aWFsaXplcnMgaW1wb3J0IHplcm9zX2luaXRpYWxpemVyCgoKPHxmaW1faG9sZXw+CiAgICAjIHJhbmRvbSB0ZW5zb3Igd2l0aCBlbGVtZW50cyBpbiBbMCwgMSkKICAgIHRvcmNoLm1hbnVhbF9zZWVkKDk5KQogICAgcmVzID0gemVyb3NfaW5pdGlhbGl6ZXIodG9yY2gucmFuZCgoMTAsIDUsIDE1KSwgZHR5cGU9dG9yY2guZmxvYXQpKQogICAgYXNzZXJ0IHRvcmNoLmFsbGNsb3NlKHRvcmNoLnplcm9zKDEwLCA1LCAxNSksIHJlcywgYXRvbD0wLjAsIHJ0b2w9MS4wZS03KQogICAgIyByYW5kb20gdGVuc29yCiAgICByZXMgPSB6ZXJvc19pbml0aWFsaXplcig1LjIgKiB0b3JjaC5yYW5kKDEwLCBkdHlwZT10b3JjaC5mbG9hdCkpCiAgICBhc3NlcnQgdG9yY2guYWxsY2xvc2UodG9yY2guemVyb3MoMTApLCByZXMsIGF0b2w9MC4wLCBydG9sPTEuMGUtNykKICAgIHJlcyA9IHplcm9zX2luaXRpYWxpemVyKDcuNiAqIHRvcmNoLnJhbmQoKDIsIDEwMCksIGR0eXBlPXRvcmNoLmZsb2F0KSArIDIuNSkKICAgIGFzc2VydCB0b3JjaC5hbGxjbG9zZSh0b3JjaC56ZXJvcygyLCAxMDApLCByZXMsIGF0b2w9MC4wLCBydG9sPTEuMGUtNykKPHxmaW1fc3VmZml4fD4KZGVmIHRlc3RfemVyb3NfaW5pdGlhbGl6ZXIoKToKICAgICMgdGVuc29yIG9mIGFsbCBvbmVzCiAgICByZXMgPSB6ZXJvc19pbml0aWFsaXplcih0b3JjaC5vbmVzKDIsIDMpKQogICAgYXNzZXJ0IHRvcmNoLmFsbGNsb3NlKHRvcmNoLnplcm9zKDIsIDMpLCByZXMsIGF0b2w9MC4wLCBydG9sPTEuMGUtNykKPHxmaW1fZW5kfD4="]
["e77a00a076693ee13182b67cfb51780bc707f201-3","e77a00a076693ee13182b67cfb51780bc707f201","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCgpmcm9tIG5ucGFja2FnZS5ubi5pbml0aWFsaXplcnMgaW1wb3J0IHplcm9zX2luaXRpYWxpemVyCjx8ZmltX2hvbGV8PgogICAgcmVzID0gemVyb3NfaW5pdGlhbGl6ZXIodG9yY2gub25lcygyLCAzKSkKICAgIGFzc2VydCB0b3JjaC5hbGxjbG9zZSh0b3JjaC56ZXJvcygyLCAzKSwgcmVzLCBhdG9sPTAuMCwgcnRvbD0xLjBlLTcpCiAgICAjIHJhbmRvbSB0ZW5zb3Igd2l0aCBlbGVtZW50cyBpbiBbMCwgMSkKICAgIHRvcmNoLm1hbnVhbF9zZWVkKDk5KQogICAgcmVzID0gemVyb3NfaW5pdGlhbGl6ZXIodG9yY2gucmFuZCgoMTAsIDUsIDE1KSwgZHR5cGU9dG9yY2guZmxvYXQpKQogICAgYXNzZXJ0IHRvcmNoLmFsbGNsb3NlKHRvcmNoLnplcm9zKDEwLCA1LCAxNSksIHJlcywgYXRvbD0wLjAsIHJ0b2w9MS4wZS03KQogICAgIyByYW5kb20gdGVuc29yCiAgICByZXMgPSB6ZXJvc19pbml0aWFsaXplcig1LjIgKiB0b3JjaC5yYW5kKDEwLCBkdHlwZT10b3JjaC5mbG9hdCkpCiAgICBhc3NlcnQgdG9yY2guYWxsY2xvc2UodG9yY2guemVyb3MoMTApLCByZXMsIGF0b2w9MC4wLCBydG9sPTEuMGUtNykKICAgIHJlcyA9IHplcm9zX2luaXRpYWxpemVyKDcuNiAqIHRvcmNoLnJhbmQoKDIsIDEwMCksIGR0eXBlPXRvcmNoLmZsb2F0KSArIDIuNSkKICAgIGFzc2VydCB0b3JjaC5hbGxjbG9zZSh0b3JjaC56ZXJvcygyLCAxMDApLCByZXMsIGF0b2w9MC4wLCBydG9sPTEuMGUtNykKPHxmaW1fc3VmZml4fD4KCgpkZWYgdGVzdF96ZXJvc19pbml0aWFsaXplcigpOgogICAgIyB0ZW5zb3Igb2YgYWxsIG9uZXMKPHxmaW1fZW5kfD4="]
["e77a00a076693ee13182b67cfb51780bc707f201-4","e77a00a076693ee13182b67cfb51780bc707f201","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gbm5wYWNrYWdlLm5uLmluaXRpYWxpemVycyBpbXBvcnQgemVyb3NfaW5pdGlhbGl6ZXIKCgpkZWYgdGVzdF96ZXJvc19pbml0aWFsaXplcigpOgo8fGZpbV9lbmR8Pg=="]
["c19ce51bfbee95f4ce2cc31ab44df16e36871c1f-1","c19ce51bfbee95f4ce2cc31ab44df16e36871c1f","PHxmaW1fcHJlZml4fD4KIyBXZWJob29rcyBmb3IgZXh0ZXJuYWwgaW50ZWdyYXRpb25zLgpmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBEaWN0LCBUdXBsZQoKZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZQoKZnJvbSB6ZXJ2ZXIuZGVjb3JhdG9yIGltcG9ydCBhcGlfa2V5X29ubHlfd2ViaG9va192aWV3LCBoYXNfcmVxdWVzdF92YXJpYWJsZXMKZnJvbSB6ZXJ2ZXIubGliLndlYmhvb2tzLmNvbW1vbiBpbXBvcnQgY2hlY2tfc2VuZF93ZWJob29rX21lc3NhZ2UsIFVuZXhwZWN0ZWRXZWJob29rRXZlbnRUeXBlCmZyb20gemVydmVyLmxpYi5yZXF1ZXN0IGltcG9ydCBSRVEKZnJvbSB6ZXJ2ZXIubGliLnJlc3BvbnNlIGltcG9ydCBqc29uX3N1Y2Nlc3MKZnJvbSB6ZXJ2ZXIubW9kZWxzIGltcG9ydCBVc2VyUHJvZmlsZQoKaW1wb3J0IHJlCgpSQVRFX0VYQ0VFREVEX1RFTVBMQVRFID0gInttZXNzYWdlfS4gRm9yIG1vcmUgaW5mbzogW1NlZSB0aGlzXSh7dXJsfSkiCkVSUk9SX1JFU09MVkVEX1RFTVBMQVRFID0gIlRoZSBlcnJvciAqKntpZH0qKiB3YXMgcmVzb2x2ZWQgYnkgKnthY3Rvcn0qLiBGb3IgbW9yZSBpbmZvOiBbU2VlIHRoaXNdKHt1cmx9KSIKRVJST1JfT0NDVVJSRURfVEVNUExBVEUgPSAie2tsYXNzfToge21lc3NhZ2V9IFRoZSBlcnJvcigqKntpZH0qKikgb2NjdXJyZWQgYXQ6ICoqe2xhc3Rfbm90aWNlfSoqLiBGb3IgbW9yZSIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICIgaW5mbzogW1NlZSB0aGlzXSh7dXJsfSkiCkNPTU1FTlRfVEVNUExBVEUgPSAiT24gZXJyb3IgKntpZH0qLCAqKnthdXRob3J9KiogY29tbWVudGVkIFxuYGBgcXVvdGVcbntib2R5fVxuYGBgXG5Gb3IgbW9yZSBpbmZvOiAiIFwKICAgICAgICAgICAgICAgICAgICJbU2VlIHRoaXNdKHt1cmx9KSIKQ0hFQ0tfSU5fVEVNUExBVEUgPSAie21lc3NhZ2V9LiAqe25hbWV9KiB3YXMgZXhwZWN0ZWQgdG8gcmVwb3J0IGF0OiAqKntleHBlY3RlZF9hdH0qKiBhbmQgcmVwb3J0ZWQgYXQ6ICIgXAogICAgICAgICAgICAgICAgICAgICIqKntyZXBvcnRlZF9hdH0qKi4gRm9yIG1vcmUgaW5mbzogW1NlZSB0aGlzXSh7dXJsfSkiCkFTU0lHTkVEX1RFTVBMQVRFID0gInttZXNzYWdlfS4gRXJyb3IgKip7aWR9KiogaGFzIGJlZW4gYXNzaWduZWQgdG8gKip7bmFtZX0qKi4gRm9yIG1vcmUgaW5mbzogIiBcCiAgICAgICAgICAgICAgICAgICAgIltTZWUgdGhpc10oe3VybH0pIgpVUF9BTkRfRE9XTl9URU1QTEFURSA9ICJ7bWVzc2FnZX0gRm9yIG1vcmUgaW5mbzogW1NlZSB0aGlzXSh7dXJsfSkiCgpkZWYgcGFyc2VfdG9waWNfYW5kX21lc3NhZ2UobWVzc2FnZTogc3RyKSAtPiBUdXBsZVtzdHIsIHN0cl06CiAgICBtID0gcmUubWF0Y2gocidcWyhbXHNcdy9dKylcXSAoLispJywgbWVzc2FnZSkKCiAgICBpZiBub3QgbToKICAgICAgICByZXR1cm4gJ2RlZmF1bHQnLCBtZXNzYWdlICAjIG5vY292ZXJhZ2UgZmFsbGJhY2sgY2FzZSBpbiBjYXNlIHRoZXJlJ3MgYSBjaGFuZ2UgaW4gcGF5bG9hZCBzY2hlbWEKICAgIHJldHVybiBtLmdyb3VwKDEpLCBtLmdyb3VwKDIpCgpkZWYgZ2V0X3JhdGVfZXhjZWVkZWRfdG9waWNfYW5kX21lc3NhZ2UocGF5bG9hZDogRGljdFtzdHIsIEFueV0pIC0+IFR1cGxlW3N0ciwgc3RyXToKICAgIHRvcGljLCBtID0gcGFyc2VfdG9waWNfYW5kX21lc3NhZ2UobWVzc2FnZT1wYXlsb2FkWyJtZXNzYWdlIl0pCgogICAgbWVzc2FnZSA9IFJBVEVfRVhDRUVERURfVEVNUExBVEUuZm9ybWF0KG1lc3NhZ2U9bSwgdXJsPXBheWxvYWRbJ25vdGljZSddWyd1cmwnXSkKCiAgICByZXR1cm4gdG9waWMsIG1lc3NhZ2UKCmRlZiBnZXRfcmVzb2x2ZWRfdG9waWNfYW5kX21lc3NhZ2UocGF5bG9hZDogRGljdFtzdHIsIEFueV0pIC0+IFR1cGxlW3N0ciwgc3RyXToKICAgIHRvcGljLCBfID0gcGFyc2VfdG9waWNfYW5kX21lc3NhZ2UobWVzc2FnZT1wYXlsb2FkWyJtZXNzYWdlIl0pCgogICAgbWVzc2FnZSA9IEVSUk9SX1JFU09MVkVEX1RFTVBMQVRFLmZvcm1hdChpZD1zdHIocGF5bG9hZFsnZmF1bHQnXVsnaWQnXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdG9yPXBheWxvYWRbJ2FjdG9yJ11bJ25hbWUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsPXBheWxvYWRbJ2ZhdWx0J11bJ3VybCddKQoKICAgIHJldHVybiB0b3BpYywgbWVzc2FnZQoKZGVmIGdldF9vY2N1cnJlZF90b3BpY19hbmRfbWVzc2FnZShwYXlsb2FkOiBEaWN0W3N0ciwgQW55XSkgLT4gVHVwbGVbc3RyLCBzdHJdOgogICAgdG9waWMsIF8gPSBwYXJzZV90b3BpY19hbmRfbWVzc2FnZShtZXNzYWdlPXBheWxvYWRbIm1lc3NhZ2UiXSkKCiAgICBtZXNzYWdlID0gRVJST1JfT0NDVVJSRURfVEVNUExBVEUuZm9ybWF0KGtsYXNzPXBheWxvYWRbJ2ZhdWx0J11bJ2tsYXNzJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9cGF5bG9hZFsnZmF1bHQnXVsnbWVzc2FnZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1wYXlsb2FkWydmYXVsdCddWydpZCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X25vdGljZT1wYXlsb2FkWydmYXVsdCddWydsYXN0X25vdGljZV9hdCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw9cGF5bG9hZFsnZmF1bHQnXVsndXJsJ10pCgogICAgcmV0dXJuIHRvcGljLCBtZXNzYWdlCgpkZWYgZ2V0X2Rvd25fYW5kX3VwX3RvcGljX2FuZF9tZXNzYWdlKGV2ZW50OiBzdHIsIHBheWxvYWQ6IERpY3Rbc3RyLCBBbnldKSAtPiBUdXBsZVtzdHIsIHN0cl06CiAgICB0b3BpYywgbSA9IHBhcnNlX3RvcGljX2FuZF9tZXNzYWdlKG1lc3NhZ2U9cGF5bG9hZFsibWVzc2FnZSJdKQogICAgdG9waWMgKz0gIi8iICsgcGF5bG9hZFsicHJvamVjdCJdWyJlbnZpcm9ubWVudHMiXVswXVsibmFtZSJdCgogICAgbWVzc2FnZSA9IFVQX0FORF9ET1dOX1RFTVBMQVRFLmZvcm1hdChtZXNzYWdlPW0sIHVybD1wYXlsb2FkWydzaXRlJ11bJ2RldGFpbHNfdXJsJ10pCgogICAgcmV0dXJuIHRvcGljLCBtZXNzYWdlCgpkZWYgZ2V0X2NvbW1lbnRlZF90b3BpY19hbmRfbWVzc2FnZShwYXlsb2FkOiBEaWN0W3N0ciwgQW55XSkgLT4gVHVwbGVbc3RyLCBzdHJdOgogICAgdG9waWMsIF8gPSBwYXJzZV90b3BpY19hbmRfbWVzc2FnZShtZXNzYWdlPXBheWxvYWRbIm1lc3NhZ2UiXSkKCiAgICBtZXNzYWdlID0gQ09NTUVOVF9URU1QTEFURS5mb3JtYXQoaWQ9c3RyKHBheWxvYWRbJ2ZhdWx0J11bJ2lkJ10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcj1wYXlsb2FkWydjb21tZW50J11bJ2F1dGhvciddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk9cGF5bG9hZFsnY29tbWVudCddWydib2R5J10sCjx8ZmltX2hvbGV8PgogICAgcmV0dXJuIHRvcGljLCBtZXNzYWdlCgpkZWYgZ2V0X2NoZWNrX2luX3RvcGljX2FuZF9tZXNzYWdlKHBheWxvYWQ6IERpY3Rbc3RyLCBBbnldKSAtPiBUdXBsZVtzdHIsIHN0cl06CiAgICB0b3BpYywgbSA9IHBhcnNlX3RvcGljX2FuZF9tZXNzYWdlKG1lc3NhZ2U9cGF5bG9hZFsibWVzc2FnZSJdKQogICAgdG9waWMgKz0gIi8iICsgcGF5bG9hZFsicHJvamVjdCJdWyJlbnZpcm9ubWVudHMiXVswXVsibmFtZSJdCgogICAgbWVzc2FnZSA9IENIRUNLX0lOX1RFTVBMQVRFLmZvcm1hdChtZXNzYWdlPW0sIG5hbWU9cGF5bG9hZFsnY2hlY2tfaW4nXVsnbmFtZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9hdD1wYXlsb2FkWydjaGVja19pbiddWydleHBlY3RlZF9hdCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlZF9hdD1wYXlsb2FkWydjaGVja19pbiddWydyZXBvcnRlZF9hdCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw9cGF5bG9hZFsnY2hlY2tfaW4nXVsnZGV0YWlsc191cmwnXSkKCiAgICByZXR1cm4gdG9waWMsIG1lc3NhZ2UKCmRlZiBnZXRfYXNzaWduZWRfdG9waWNfYW5kX21lc3NhZ2UocGF5bG9hZDogRGljdFtzdHIsIEFueV0pIC0+IFR1cGxlW3N0ciwgc3RyXToKICAgIHRvcGljLCBtID0gcGFyc2VfdG9waWNfYW5kX21lc3NhZ2UobWVzc2FnZT1wYXlsb2FkWyJtZXNzYWdlIl0pCgogICAgbWVzc2FnZSA9IEFTU0lHTkVEX1RFTVBMQVRFLmZvcm1hdChtZXNzYWdlPW0sIGlkPXBheWxvYWRbJ2ZhdWx0J11bJ2lkJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9cGF5bG9hZFsnYXNzaWduZWUnXVsnbmFtZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw9cGF5bG9hZFsnZmF1bHQnXVsndXJsJ10pCiAgICByZXR1cm4gdG9waWMsIG1lc3NhZ2UKCmRlZiBnZXRfdG9waWNfYW5kX21lc3NhZ2UoZXZlbnQ6IHN0ciwgcGF5bG9hZDogRGljdFtzdHIsIEFueV0pIC0+IFR1cGxlW3N0ciwgc3RyXToKICAgIGlmIGV2ZW50ID09ICJhc3NpZ25lZCI6CiAgICAgICAgcmV0dXJuIGdldF9hc3NpZ25lZF90b3BpY19hbmRfbWVzc2FnZShwYXlsb2FkKQogICAgZWxpZiBldmVudCA9PSAiY2hlY2tfaW5fbWlzc2luZyIgb3IgZXZlbnQgPT0gImNoZWNrX2luX3JlcG9ydGluZyI6CiAgICAgICAgcmV0dXJuIGdldF9jaGVja19pbl90b3BpY19hbmRfbWVzc2FnZShwYXlsb2FkKQogICAgZWxpZiBldmVudCA9PSAiY29tbWVudGVkIjoKICAgICAgICByZXR1cm4gZ2V0X2NvbW1lbnRlZF90b3BpY19hbmRfbWVzc2FnZShwYXlsb2FkKQogICAgZWxpZiBldmVudCA9PSAiZG93biIgb3IgZXZlbnQgPT0gInVwIjoKICAgICAgICByZXR1cm4gZ2V0X2Rvd25fYW5kX3VwX3RvcGljX2FuZF9tZXNzYWdlKGV2ZW50LCBwYXlsb2FkKQogICAgZWxpZiBldmVudCA9PSAib2NjdXJyZWQiOgogICAgICAgIHJldHVybiBnZXRfb2NjdXJyZWRfdG9waWNfYW5kX21lc3NhZ2UocGF5bG9hZCkKICAgIGVsaWYgZXZlbnQgPT0gInJlc29sdmVkIjoKICAgICAgICByZXR1cm4gZ2V0X3Jlc29sdmVkX3RvcGljX2FuZF9tZXNzYWdlKHBheWxvYWQpCiAgICBlbGlmIGV2ZW50ID09ICJyYXRlX2V4Y2VlZGVkIjoKICAgICAgICByZXR1cm4gZ2V0X3JhdGVfZXhjZWVkZWRfdG9waWNfYW5kX21lc3NhZ2UocGF5bG9hZCkKCiAgICByYWlzZSBVbmV4cGVjdGVkV2ViaG9va0V2ZW50VHlwZSgiaG9uZXliYWRnZXIiLCBldmVudCkKCkBhcGlfa2V5X29ubHlfd2ViaG9va192aWV3KCJob25leWJhZGdlciIpCkBoYXNfcmVxdWVzdF92YXJpYWJsZXMKZGVmIGFwaV9ob25leWJhZGdlcl93ZWJob29rKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0LCB1c2VyX3Byb2ZpbGU6IFVzZXJQcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogRGljdFtzdHIsIEFueV09UkVRKGFyZ3VtZW50X3R5cGU9J2JvZHknKSkgLT4gSHR0cFJlc3BvbnNlOgogICAgZXZlbnQgPSBwYXlsb2FkWydldmVudCddCgogICAgdG9waWMsIG1lc3NhZ2UgPSBnZXRfdG9waWNfYW5kX21lc3NhZ2UoZXZlbnQsIHBheWxvYWQpCgogICAgY2hlY2tfc2VuZF93ZWJob29rX21lc3NhZ2UocmVxdWVzdCwgdXNlcl9wcm9maWxlLCB0b3BpYywgbWVzc2FnZSkKICAgIHJldHVybiBqc29uX3N1Y2Nlc3MoKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybD1wYXlsb2FkWydmYXVsdCddWyd1cmwnXSkKCjx8ZmltX2VuZHw+"]
["c19ce51bfbee95f4ce2cc31ab44df16e36871c1f-2","c19ce51bfbee95f4ce2cc31ab44df16e36871c1f","PHxmaW1fcHJlZml4fD4KIyBXZWJob29rcyBmb3IgZXh0ZXJuYWwgaW50ZWdyYXRpb25zLgpmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBEaWN0LCBUdXBsZQoKZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZQoKZnJvbSB6ZXJ2ZXIuZGVjb3JhdG9yIGltcG9ydCBhcGlfa2V5X29ubHlfd2ViaG9va192aWV3LCBoYXNfcmVxdWVzdF92YXJpYWJsZXMKZnJvbSB6ZXJ2ZXIubGliLndlYmhvb2tzLmNvbW1vbiBpbXBvcnQgY2hlY2tfc2VuZF93ZWJob29rX21lc3NhZ2UsIFVuZXhwZWN0ZWRXZWJob29rRXZlbnRUeXBlCmZyb20gemVydmVyLmxpYi5yZXF1ZXN0IGltcG9ydCBSRVEKZnJvbSB6ZXJ2ZXIubGliLnJlc3BvbnNlIGltcG9ydCBqc29uX3N1Y2Nlc3MKZnJvbSB6ZXJ2ZXIubW9kZWxzIGltcG9ydCBVc2VyUHJvZmlsZQoKaW1wb3J0IHJlCgpSQVRFX0VYQ0VFREVEX1RFTVBMQVRFID0gInttZXNzYWdlfS4gRm9yIG1vcmUgaW5mbzogW1NlZSB0aGlzXSh7dXJsfSkiCkVSUk9SX1JFU09MVkVEX1RFTVBMQVRFID0gIlRoZSBlcnJvciAqKntpZH0qKiB3YXMgcmVzb2x2ZWQgYnkgKnthY3Rvcn0qLiBGb3IgbW9yZSBpbmZvOiBbU2VlIHRoaXNdKHt1cmx9KSIKRVJST1JfT0NDVVJSRURfVEVNUExBVEUgPSAie2tsYXNzfToge21lc3NhZ2V9IFRoZSBlcnJvcigqKntpZH0qKikgb2NjdXJyZWQgYXQ6ICoqe2xhc3Rfbm90aWNlfSoqLiBGb3IgbW9yZSIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICIgaW5mbzogW1NlZSB0aGlzXSh7dXJsfSkiCkNPTU1FTlRfVEVNUExBVEUgPSAiT24gZXJyb3IgKntpZH0qLCAqKnthdXRob3J9KiogY29tbWVudGVkIFxuYGBgcXVvdGVcbntib2R5fVxuYGBgXG5Gb3IgbW9yZSBpbmZvOiAiIFwKICAgICAgICAgICAgICAgICAgICJbU2VlIHRoaXNdKHt1cmx9KSIKQ0hFQ0tfSU5fVEVNUExBVEUgPSAie21lc3NhZ2V9LiAqe25hbWV9KiB3YXMgZXhwZWN0ZWQgdG8gcmVwb3J0IGF0OiAqKntleHBlY3RlZF9hdH0qKiBhbmQgcmVwb3J0ZWQgYXQ6ICIgXAogICAgICAgICAgICAgICAgICAgICIqKntyZXBvcnRlZF9hdH0qKi4gRm9yIG1vcmUgaW5mbzogW1NlZSB0aGlzXSh7dXJsfSkiCkFTU0lHTkVEX1RFTVBMQVRFID0gInttZXNzYWdlfS4gRXJyb3IgKip7aWR9KiogaGFzIGJlZW4gYXNzaWduZWQgdG8gKip7bmFtZX0qKi4gRm9yIG1vcmUgaW5mbzogIiBcCiAgICAgICAgICAgICAgICAgICAgIltTZWUgdGhpc10oe3VybH0pIgpVUF9BTkRfRE9XTl9URU1QTEFURSA9ICJ7bWVzc2FnZX0gRm9yIG1vcmUgaW5mbzogW1NlZSB0aGlzXSh7dXJsfSkiCgpkZWYgcGFyc2VfdG9waWNfYW5kX21lc3NhZ2UobWVzc2FnZTogc3RyKSAtPiBUdXBsZVtzdHIsIHN0cl06CiAgICBtID0gcmUubWF0Y2gocidcWyhbXHNcdy9dKylcXSAoLispJywgbWVzc2FnZSkKCiAgICBpZiBub3QgbToKICAgICAgICByZXR1cm4gJ2RlZmF1bHQnLCBtZXNzYWdlICAjIG5vY292ZXJhZ2UgZmFsbGJhY2sgY2FzZSBpbiBjYXNlIHRoZXJlJ3MgYSBjaGFuZ2UgaW4gcGF5bG9hZCBzY2hlbWEKICAgIHJldHVybiBtLmdyb3VwKDEpLCBtLmdyb3VwKDIpCgpkZWYgZ2V0X3JhdGVfZXhjZWVkZWRfdG9waWNfYW5kX21lc3NhZ2UocGF5bG9hZDogRGljdFtzdHIsIEFueV0pIC0+IFR1cGxlW3N0ciwgc3RyXToKICAgIHRvcGljLCBtID0gcGFyc2VfdG9waWNfYW5kX21lc3NhZ2UobWVzc2FnZT1wYXlsb2FkWyJtZXNzYWdlIl0pCgogICAgbWVzc2FnZSA9IFJBVEVfRVhDRUVERURfVEVNUExBVEUuZm9ybWF0KG1lc3NhZ2U9bSwgdXJsPXBheWxvYWRbJ25vdGljZSddWyd1cmwnXSkKCiAgICByZXR1cm4gdG9waWMsIG1lc3NhZ2UKCmRlZiBnZXRfcmVzb2x2ZWRfdG9waWNfYW5kX21lc3NhZ2UocGF5bG9hZDogRGljdFtzdHIsIEFueV0pIC0+IFR1cGxlW3N0ciwgc3RyXToKICAgIHRvcGljLCBfID0gcGFyc2VfdG9waWNfYW5kX21lc3NhZ2UobWVzc2FnZT1wYXlsb2FkWyJtZXNzYWdlIl0pCgogICAgbWVzc2FnZSA9IEVSUk9SX1JFU09MVkVEX1RFTVBMQVRFLmZvcm1hdChpZD1zdHIocGF5bG9hZFsnZmF1bHQnXVsnaWQnXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdG9yPXBheWxvYWRbJ2FjdG9yJ11bJ25hbWUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsPXBheWxvYWRbJ2ZhdWx0J11bJ3VybCddKQoKICAgIHJldHVybiB0b3BpYywgbWVzc2FnZQoKZGVmIGdldF9vY2N1cnJlZF90b3BpY19hbmRfbWVzc2FnZShwYXlsb2FkOiBEaWN0W3N0ciwgQW55XSkgLT4gVHVwbGVbc3RyLCBzdHJdOgogICAgdG9waWMsIF8gPSBwYXJzZV90b3BpY19hbmRfbWVzc2FnZShtZXNzYWdlPXBheWxvYWRbIm1lc3NhZ2UiXSkKCiAgICBtZXNzYWdlID0gRVJST1JfT0NDVVJSRURfVEVNUExBVEUuZm9ybWF0KGtsYXNzPXBheWxvYWRbJ2ZhdWx0J11bJ2tsYXNzJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9cGF5bG9hZFsnZmF1bHQnXVsnbWVzc2FnZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1wYXlsb2FkWydmYXVsdCddWydpZCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X25vdGljZT1wYXlsb2FkWydmYXVsdCddWydsYXN0X25vdGljZV9hdCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw9cGF5bG9hZFsnZmF1bHQnXVsndXJsJ10pCgogICAgcmV0dXJuIHRvcGljLCBtZXNzYWdlCgpkZWYgZ2V0X2Rvd25fYW5kX3VwX3RvcGljX2FuZF9tZXNzYWdlKGV2ZW50OiBzdHIsIHBheWxvYWQ6IERpY3Rbc3RyLCBBbnldKSAtPiBUdXBsZVtzdHIsIHN0cl06CiAgICB0b3BpYywgbSA9IHBhcnNlX3RvcGljX2FuZF9tZXNzYWdlKG1lc3NhZ2U9cGF5bG9hZFsibWVzc2FnZSJdKQogICAgdG9waWMgKz0gIi8iICsgcGF5bG9hZFsicHJvamVjdCJdWyJlbnZpcm9ubWVudHMiXVswXVsibmFtZSJdCgogICAgbWVzc2FnZSA9IFVQX0FORF9ET1dOX1RFTVBMQVRFLmZvcm1hdChtZXNzYWdlPW0sIHVybD1wYXlsb2FkWydzaXRlJ11bJ2RldGFpbHNfdXJsJ10pCgogICAgcmV0dXJuIHRvcGljLCBtZXNzYWdlCgpkZWYgZ2V0X2NvbW1lbnRlZF90b3BpY19hbmRfbWVzc2FnZShwYXlsb2FkOiBEaWN0W3N0ciwgQW55XSkgLT4gVHVwbGVbc3RyLCBzdHJdOgogICAgdG9waWMsIF8gPSBwYXJzZV90b3BpY19hbmRfbWVzc2FnZShtZXNzYWdlPXBheWxvYWRbIm1lc3NhZ2UiXSkKCiAgICBtZXNzYWdlID0gQ09NTUVOVF9URU1QTEFURS5mb3JtYXQoaWQ9c3RyKHBheWxvYWRbJ2ZhdWx0J11bJ2lkJ10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcj1wYXlsb2FkWydjb21tZW50J11bJ2F1dGhvciddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk9cGF5bG9hZFsnY29tbWVudCddWydib2R5J10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsPXBheWxvYWRbJ2ZhdWx0J11bJ3VybCddKQoKICAgIHJldHVybiB0b3BpYywgbWVzc2FnZQoKZGVmIGdldF9jaGVja19pbl90b3BpY19hbmRfbWVzc2FnZShwYXlsb2FkOiBEaWN0W3N0ciwgQW55XSkgLT4gVHVwbGVbc3RyLCBzdHJdOgogICAgdG9waWMsIG0gPSBwYXJzZV90b3BpY19hbmRfbWVzc2FnZShtZXNzYWdlPXBheWxvYWRbIm1lc3NhZ2UiXSkKICAgIHRvcGljICs9ICIvIiArIHBheWxvYWRbInByb2plY3QiXVsiZW52aXJvbm1lbnRzIl1bMF1bIm5hbWUiXQoKICAgIG1lc3NhZ2UgPSBDSEVDS19JTl9URU1QTEFURS5mb3JtYXQobWVzc2FnZT1tLCBuYW1lPXBheWxvYWRbJ2NoZWNrX2luJ11bJ25hbWUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfYXQ9cGF5bG9hZFsnY2hlY2tfaW4nXVsnZXhwZWN0ZWRfYXQnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZWRfYXQ9cGF5bG9hZFsnY2hlY2tfaW4nXVsncmVwb3J0ZWRfYXQnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsPXBheWxvYWRbJ2NoZWNrX2luJ11bJ2RldGFpbHNfdXJsJ10pCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICByZXR1cm4gdG9waWMsIG1lc3NhZ2UKCjx8ZmltX2VuZHw+"]
["c19ce51bfbee95f4ce2cc31ab44df16e36871c1f-3","c19ce51bfbee95f4ce2cc31ab44df16e36871c1f","PHxmaW1fcHJlZml4fD4KIyBXZWJob29rcyBmb3IgZXh0ZXJuYWwgaW50ZWdyYXRpb25zLgpmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBEaWN0LCBUdXBsZQoKZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZQoKZnJvbSB6ZXJ2ZXIuZGVjb3JhdG9yIGltcG9ydCBhcGlfa2V5X29ubHlfd2ViaG9va192aWV3LCBoYXNfcmVxdWVzdF92YXJpYWJsZXMKZnJvbSB6ZXJ2ZXIubGliLndlYmhvb2tzLmNvbW1vbiBpbXBvcnQgY2hlY2tfc2VuZF93ZWJob29rX21lc3NhZ2UsIFVuZXhwZWN0ZWRXZWJob29rRXZlbnRUeXBlCmZyb20gemVydmVyLmxpYi5yZXF1ZXN0IGltcG9ydCBSRVEKZnJvbSB6ZXJ2ZXIubGliLnJlc3BvbnNlIGltcG9ydCBqc29uX3N1Y2Nlc3MKZnJvbSB6ZXJ2ZXIubW9kZWxzIGltcG9ydCBVc2VyUHJvZmlsZQoKaW1wb3J0IHJlCgpSQVRFX0VYQ0VFREVEX1RFTVBMQVRFID0gInttZXNzYWdlfS4gRm9yIG1vcmUgaW5mbzogW1NlZSB0aGlzXSh7dXJsfSkiCkVSUk9SX1JFU09MVkVEX1RFTVBMQVRFID0gIlRoZSBlcnJvciAqKntpZH0qKiB3YXMgcmVzb2x2ZWQgYnkgKnthY3Rvcn0qLiBGb3IgbW9yZSBpbmZvOiBbU2VlIHRoaXNdKHt1cmx9KSIKRVJST1JfT0NDVVJSRURfVEVNUExBVEUgPSAie2tsYXNzfToge21lc3NhZ2V9IFRoZSBlcnJvcigqKntpZH0qKikgb2NjdXJyZWQgYXQ6ICoqe2xhc3Rfbm90aWNlfSoqLiBGb3IgbW9yZSIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICIgaW5mbzogW1NlZSB0aGlzXSh7dXJsfSkiCkNPTU1FTlRfVEVNUExBVEUgPSAiT24gZXJyb3IgKntpZH0qLCAqKnthdXRob3J9KiogY29tbWVudGVkIFxuYGBgcXVvdGVcbntib2R5fVxuYGBgXG5Gb3IgbW9yZSBpbmZvOiAiIFwKICAgICAgICAgICAgICAgICAgICJbU2VlIHRoaXNdKHt1cmx9KSIKQ0hFQ0tfSU5fVEVNUExBVEUgPSAie21lc3NhZ2V9LiAqe25hbWV9KiB3YXMgZXhwZWN0ZWQgdG8gcmVwb3J0IGF0OiAqKntleHBlY3RlZF9hdH0qKiBhbmQgcmVwb3J0ZWQgYXQ6ICIgXAogICAgICAgICAgICAgICAgICAgICIqKntyZXBvcnRlZF9hdH0qKi4gRm9yIG1vcmUgaW5mbzogW1NlZSB0aGlzXSh7dXJsfSkiCkFTU0lHTkVEX1RFTVBMQVRFID0gInttZXNzYWdlfS4gRXJyb3IgKip7aWR9KiogaGFzIGJlZW4gYXNzaWduZWQgdG8gKip7bmFtZX0qKi4gRm9yIG1vcmUgaW5mbzogIiBcCiAgICAgICAgICAgICAgICAgICAgIltTZWUgdGhpc10oe3VybH0pIgpVUF9BTkRfRE9XTl9URU1QTEFURSA9ICJ7bWVzc2FnZX0gRm9yIG1vcmUgaW5mbzogW1NlZSB0aGlzXSh7dXJsfSkiCgpkZWYgcGFyc2VfdG9waWNfYW5kX21lc3NhZ2UobWVzc2FnZTogc3RyKSAtPiBUdXBsZVtzdHIsIHN0cl06CiAgICBtID0gcmUubWF0Y2gocidcWyhbXHNcdy9dKylcXSAoLispJywgbWVzc2FnZSkKCiAgICBpZiBub3QgbToKICAgICAgICByZXR1cm4gJ2RlZmF1bHQnLCBtZXNzYWdlICAjIG5vY292ZXJhZ2UgZmFsbGJhY2sgY2FzZSBpbiBjYXNlIHRoZXJlJ3MgYSBjaGFuZ2UgaW4gcGF5bG9hZCBzY2hlbWEKICAgIHJldHVybiBtLmdyb3VwKDEpLCBtLmdyb3VwKDIpCgo8fGZpbV9ob2xlfD4KCiAgICByZXR1cm4gdG9waWMsIG1lc3NhZ2UKCmRlZiBnZXRfcmVzb2x2ZWRfdG9waWNfYW5kX21lc3NhZ2UocGF5bG9hZDogRGljdFtzdHIsIEFueV0pIC0+IFR1cGxlW3N0ciwgc3RyXToKICAgIHRvcGljLCBfID0gcGFyc2VfdG9waWNfYW5kX21lc3NhZ2UobWVzc2FnZT1wYXlsb2FkWyJtZXNzYWdlIl0pCgogICAgbWVzc2FnZSA9IEVSUk9SX1JFU09MVkVEX1RFTVBMQVRFLmZvcm1hdChpZD1zdHIocGF5bG9hZFsnZmF1bHQnXVsnaWQnXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdG9yPXBheWxvYWRbJ2FjdG9yJ11bJ25hbWUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsPXBheWxvYWRbJ2ZhdWx0J11bJ3VybCddKQoKICAgIHJldHVybiB0b3BpYywgbWVzc2FnZQoKZGVmIGdldF9vY2N1cnJlZF90b3BpY19hbmRfbWVzc2FnZShwYXlsb2FkOiBEaWN0W3N0ciwgQW55XSkgLT4gVHVwbGVbc3RyLCBzdHJdOgogICAgdG9waWMsIF8gPSBwYXJzZV90b3BpY19hbmRfbWVzc2FnZShtZXNzYWdlPXBheWxvYWRbIm1lc3NhZ2UiXSkKCiAgICBtZXNzYWdlID0gRVJST1JfT0NDVVJSRURfVEVNUExBVEUuZm9ybWF0KGtsYXNzPXBheWxvYWRbJ2ZhdWx0J11bJ2tsYXNzJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9cGF5bG9hZFsnZmF1bHQnXVsnbWVzc2FnZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1wYXlsb2FkWydmYXVsdCddWydpZCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X25vdGljZT1wYXlsb2FkWydmYXVsdCddWydsYXN0X25vdGljZV9hdCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw9cGF5bG9hZFsnZmF1bHQnXVsndXJsJ10pCgogICAgcmV0dXJuIHRvcGljLCBtZXNzYWdlCgpkZWYgZ2V0X2Rvd25fYW5kX3VwX3RvcGljX2FuZF9tZXNzYWdlKGV2ZW50OiBzdHIsIHBheWxvYWQ6IERpY3Rbc3RyLCBBbnldKSAtPiBUdXBsZVtzdHIsIHN0cl06CiAgICB0b3BpYywgbSA9IHBhcnNlX3RvcGljX2FuZF9tZXNzYWdlKG1lc3NhZ2U9cGF5bG9hZFsibWVzc2FnZSJdKQogICAgdG9waWMgKz0gIi8iICsgcGF5bG9hZFsicHJvamVjdCJdWyJlbnZpcm9ubWVudHMiXVswXVsibmFtZSJdCgogICAgbWVzc2FnZSA9IFVQX0FORF9ET1dOX1RFTVBMQVRFLmZvcm1hdChtZXNzYWdlPW0sIHVybD1wYXlsb2FkWydzaXRlJ11bJ2RldGFpbHNfdXJsJ10pCgogICAgcmV0dXJuIHRvcGljLCBtZXNzYWdlCgpkZWYgZ2V0X2NvbW1lbnRlZF90b3BpY19hbmRfbWVzc2FnZShwYXlsb2FkOiBEaWN0W3N0ciwgQW55XSkgLT4gVHVwbGVbc3RyLCBzdHJdOgogICAgdG9waWMsIF8gPSBwYXJzZV90b3BpY19hbmRfbWVzc2FnZShtZXNzYWdlPXBheWxvYWRbIm1lc3NhZ2UiXSkKCiAgICBtZXNzYWdlID0gQ09NTUVOVF9URU1QTEFURS5mb3JtYXQoaWQ9c3RyKHBheWxvYWRbJ2ZhdWx0J11bJ2lkJ10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcj1wYXlsb2FkWydjb21tZW50J11bJ2F1dGhvciddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk9cGF5bG9hZFsnY29tbWVudCddWydib2R5J10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsPXBheWxvYWRbJ2ZhdWx0J11bJ3VybCddKQoKICAgIHJldHVybiB0b3BpYywgbWVzc2FnZQoKZGVmIGdldF9jaGVja19pbl90b3BpY19hbmRfbWVzc2FnZShwYXlsb2FkOiBEaWN0W3N0ciwgQW55XSkgLT4gVHVwbGVbc3RyLCBzdHJdOgogICAgdG9waWMsIG0gPSBwYXJzZV90b3BpY19hbmRfbWVzc2FnZShtZXNzYWdlPXBheWxvYWRbIm1lc3NhZ2UiXSkKICAgIHRvcGljICs9ICIvIiArIHBheWxvYWRbInByb2plY3QiXVsiZW52aXJvbm1lbnRzIl1bMF1bIm5hbWUiXQoKICAgIG1lc3NhZ2UgPSBDSEVDS19JTl9URU1QTEFURS5mb3JtYXQobWVzc2FnZT1tLCBuYW1lPXBheWxvYWRbJ2NoZWNrX2luJ11bJ25hbWUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfYXQ9cGF5bG9hZFsnY2hlY2tfaW4nXVsnZXhwZWN0ZWRfYXQnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZWRfYXQ9cGF5bG9hZFsnY2hlY2tfaW4nXVsncmVwb3J0ZWRfYXQnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsPXBheWxvYWRbJ2NoZWNrX2luJ11bJ2RldGFpbHNfdXJsJ10pCgogICAgcmV0dXJuIHRvcGljLCBtZXNzYWdlCgpkZWYgZ2V0X2Fzc2lnbmVkX3RvcGljX2FuZF9tZXNzYWdlKHBheWxvYWQ6IERpY3Rbc3RyLCBBbnldKSAtPiBUdXBsZVtzdHIsIHN0cl06CiAgICB0b3BpYywgbSA9IHBhcnNlX3RvcGljX2FuZF9tZXNzYWdlKG1lc3NhZ2U9cGF5bG9hZFsibWVzc2FnZSJdKQoKICAgIG1lc3NhZ2UgPSBBU1NJR05FRF9URU1QTEFURS5mb3JtYXQobWVzc2FnZT1tLCBpZD1wYXlsb2FkWydmYXVsdCddWydpZCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXBheWxvYWRbJ2Fzc2lnbmVlJ11bJ25hbWUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsPXBheWxvYWRbJ2ZhdWx0J11bJ3VybCddKQogICAgcmV0dXJuIHRvcGljLCBtZXNzYWdlCgpkZWYgZ2V0X3RvcGljX2FuZF9tZXNzYWdlKGV2ZW50OiBzdHIsIHBheWxvYWQ6IERpY3Rbc3RyLCBBbnldKSAtPiBUdXBsZVtzdHIsIHN0cl06CiAgICBpZiBldmVudCA9PSAiYXNzaWduZWQiOgogICAgICAgIHJldHVybiBnZXRfYXNzaWduZWRfdG9waWNfYW5kX21lc3NhZ2UocGF5bG9hZCkKICAgIGVsaWYgZXZlbnQgPT0gImNoZWNrX2luX21pc3NpbmciIG9yIGV2ZW50ID09ICJjaGVja19pbl9yZXBvcnRpbmciOgogICAgICAgIHJldHVybiBnZXRfY2hlY2tfaW5fdG9waWNfYW5kX21lc3NhZ2UocGF5bG9hZCkKICAgIGVsaWYgZXZlbnQgPT0gImNvbW1lbnRlZCI6CiAgICAgICAgcmV0dXJuIGdldF9jb21tZW50ZWRfdG9waWNfYW5kX21lc3NhZ2UocGF5bG9hZCkKICAgIGVsaWYgZXZlbnQgPT0gImRvd24iIG9yIGV2ZW50ID09ICJ1cCI6CiAgICAgICAgcmV0dXJuIGdldF9kb3duX2FuZF91cF90b3BpY19hbmRfbWVzc2FnZShldmVudCwgcGF5bG9hZCkKICAgIGVsaWYgZXZlbnQgPT0gIm9jY3VycmVkIjoKICAgICAgICByZXR1cm4gZ2V0X29jY3VycmVkX3RvcGljX2FuZF9tZXNzYWdlKHBheWxvYWQpCiAgICBlbGlmIGV2ZW50ID09ICJyZXNvbHZlZCI6CiAgICAgICAgcmV0dXJuIGdldF9yZXNvbHZlZF90b3BpY19hbmRfbWVzc2FnZShwYXlsb2FkKQogICAgZWxpZiBldmVudCA9PSAicmF0ZV9leGNlZWRlZCI6CiAgICAgICAgcmV0dXJuIGdldF9yYXRlX2V4Y2VlZGVkX3RvcGljX2FuZF9tZXNzYWdlKHBheWxvYWQpCgogICAgcmFpc2UgVW5leHBlY3RlZFdlYmhvb2tFdmVudFR5cGUoImhvbmV5YmFkZ2VyIiwgZXZlbnQpCgpAYXBpX2tleV9vbmx5X3dlYmhvb2tfdmlldygiaG9uZXliYWRnZXIiKQpAaGFzX3JlcXVlc3RfdmFyaWFibGVzCmRlZiBhcGlfaG9uZXliYWRnZXJfd2ViaG9vayhyZXF1ZXN0OiBIdHRwUmVxdWVzdCwgdXNlcl9wcm9maWxlOiBVc2VyUHJvZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IERpY3Rbc3RyLCBBbnldPVJFUShhcmd1bWVudF90eXBlPSdib2R5JykpIC0+IEh0dHBSZXNwb25zZToKICAgIGV2ZW50ID0gcGF5bG9hZFsnZXZlbnQnXQoKICAgIHRvcGljLCBtZXNzYWdlID0gZ2V0X3RvcGljX2FuZF9tZXNzYWdlKGV2ZW50LCBwYXlsb2FkKQoKICAgIGNoZWNrX3NlbmRfd2ViaG9va19tZXNzYWdlKHJlcXVlc3QsIHVzZXJfcHJvZmlsZSwgdG9waWMsIG1lc3NhZ2UpCiAgICByZXR1cm4ganNvbl9zdWNjZXNzKCkKPHxmaW1fc3VmZml4fD4KZGVmIGdldF9yYXRlX2V4Y2VlZGVkX3RvcGljX2FuZF9tZXNzYWdlKHBheWxvYWQ6IERpY3Rbc3RyLCBBbnldKSAtPiBUdXBsZVtzdHIsIHN0cl06CiAgICB0b3BpYywgbSA9IHBhcnNlX3RvcGljX2FuZF9tZXNzYWdlKG1lc3NhZ2U9cGF5bG9hZFsibWVzc2FnZSJdKQoKICAgIG1lc3NhZ2UgPSBSQVRFX0VYQ0VFREVEX1RFTVBMQVRFLmZvcm1hdChtZXNzYWdlPW0sIHVybD1wYXlsb2FkWydub3RpY2UnXVsndXJsJ10pCjx8ZmltX2VuZHw+"]
["c19ce51bfbee95f4ce2cc31ab44df16e36871c1f-4","c19ce51bfbee95f4ce2cc31ab44df16e36871c1f","PHxmaW1fcHJlZml4fD4KIyBXZWJob29rcyBmb3IgZXh0ZXJuYWwgaW50ZWdyYXRpb25zLgpmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBEaWN0LCBUdXBsZQoKZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZQoKZnJvbSB6ZXJ2ZXIuZGVjb3JhdG9yIGltcG9ydCBhcGlfa2V5X29ubHlfd2ViaG9va192aWV3LCBoYXNfcmVxdWVzdF92YXJpYWJsZXMKZnJvbSB6ZXJ2ZXIubGliLndlYmhvb2tzLmNvbW1vbiBpbXBvcnQgY2hlY2tfc2VuZF93ZWJob29rX21lc3NhZ2UsIFVuZXhwZWN0ZWRXZWJob29rRXZlbnRUeXBlCmZyb20gemVydmVyLmxpYi5yZXF1ZXN0IGltcG9ydCBSRVEKZnJvbSB6ZXJ2ZXIubGliLnJlc3BvbnNlIGltcG9ydCBqc29uX3N1Y2Nlc3MKZnJvbSB6ZXJ2ZXIubW9kZWxzIGltcG9ydCBVc2VyUHJvZmlsZQoKaW1wb3J0IHJlCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+ClJBVEVfRVhDRUVERURfVEVNUExBVEUgPSAie21lc3NhZ2V9LiBGb3IgbW9yZSBpbmZvOiBbU2VlIHRoaXNdKHt1cmx9KSIKRVJST1JfUkVTT0xWRURfVEVNUExBVEUgPSAiVGhlIGVycm9yICoqe2lkfSoqIHdhcyByZXNvbHZlZCBieSAqe2FjdG9yfSouIEZvciBtb3JlIGluZm86IFtTZWUgdGhpc10oe3VybH0pIgpFUlJPUl9PQ0NVUlJFRF9URU1QTEFURSA9ICJ7a2xhc3N9OiB7bWVzc2FnZX0gVGhlIGVycm9yKCoqe2lkfSoqKSBvY2N1cnJlZCBhdDogKip7bGFzdF9ub3RpY2V9KiouIEZvciBtb3JlIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpbmZvOiBbU2VlIHRoaXNdKHt1cmx9KSIKPHxmaW1fZW5kfD4="]
["c19ce51bfbee95f4ce2cc31ab44df16e36871c1f-5","c19ce51bfbee95f4ce2cc31ab44df16e36871c1f","PHxmaW1fcHJlZml4fD4KIyBXZWJob29rcyBmb3IgZXh0ZXJuYWwgaW50ZWdyYXRpb25zLgpmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBEaWN0LCBUdXBsZQoKZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZQoKZnJvbSB6ZXJ2ZXIuZGVjb3JhdG9yIGltcG9ydCBhcGlfa2V5X29ubHlfd2ViaG9va192aWV3LCBoYXNfcmVxdWVzdF92YXJpYWJsZXMKZnJvbSB6ZXJ2ZXIubGliLndlYmhvb2tzLmNvbW1vbiBpbXBvcnQgY2hlY2tfc2VuZF93ZWJob29rX21lc3NhZ2UsIFVuZXhwZWN0ZWRXZWJob29rRXZlbnRUeXBlCmZyb20gemVydmVyLmxpYi5yZXF1ZXN0IGltcG9ydCBSRVEKZnJvbSB6ZXJ2ZXIubGliLnJlc3BvbnNlIGltcG9ydCBqc29uX3N1Y2Nlc3MKZnJvbSB6ZXJ2ZXIubW9kZWxzIGltcG9ydCBVc2VyUHJvZmlsZQoKaW1wb3J0IHJlCgpSQVRFX0VYQ0VFREVEX1RFTVBMQVRFID0gInttZXNzYWdlfS4gRm9yIG1vcmUgaW5mbzogW1NlZSB0aGlzXSh7dXJsfSkiCkVSUk9SX1JFU09MVkVEX1RFTVBMQVRFID0gIlRoZSBlcnJvciAqKntpZH0qKiB3YXMgcmVzb2x2ZWQgYnkgKnthY3Rvcn0qLiBGb3IgbW9yZSBpbmZvOiBbU2VlIHRoaXNdKHt1cmx9KSIKRVJST1JfT0NDVVJSRURfVEVNUExBVEUgPSAie2tsYXNzfToge21lc3NhZ2V9IFRoZSBlcnJvcigqKntpZH0qKikgb2NjdXJyZWQgYXQ6ICoqe2xhc3Rfbm90aWNlfSoqLiBGb3IgbW9yZSIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICIgaW5mbzogW1NlZSB0aGlzXSh7dXJsfSkiCkNPTU1FTlRfVEVNUExBVEUgPSAiT24gZXJyb3IgKntpZH0qLCAqKnthdXRob3J9KiogY29tbWVudGVkIFxuYGBgcXVvdGVcbntib2R5fVxuYGBgXG5Gb3IgbW9yZSBpbmZvOiAiIFwKICAgICAgICAgICAgICAgICAgICJbU2VlIHRoaXNdKHt1cmx9KSIKQ0hFQ0tfSU5fVEVNUExBVEUgPSAie21lc3NhZ2V9LiAqe25hbWV9KiB3YXMgZXhwZWN0ZWQgdG8gcmVwb3J0IGF0OiAqKntleHBlY3RlZF9hdH0qKiBhbmQgcmVwb3J0ZWQgYXQ6ICIgXAogICAgICAgICAgICAgICAgICAgICIqKntyZXBvcnRlZF9hdH0qKi4gRm9yIG1vcmUgaW5mbzogW1NlZSB0aGlzXSh7dXJsfSkiCkFTU0lHTkVEX1RFTVBMQVRFID0gInttZXNzYWdlfS4gRXJyb3IgKip7aWR9KiogaGFzIGJlZW4gYXNzaWduZWQgdG8gKip7bmFtZX0qKi4gRm9yIG1vcmUgaW5mbzogIiBcCiAgICAgICAgICAgICAgICAgICAgIltTZWUgdGhpc10oe3VybH0pIgpVUF9BTkRfRE9XTl9URU1QTEFURSA9ICJ7bWVzc2FnZX0gRm9yIG1vcmUgaW5mbzogW1NlZSB0aGlzXSh7dXJsfSkiCgpkZWYgcGFyc2VfdG9waWNfYW5kX21lc3NhZ2UobWVzc2FnZTogc3RyKSAtPiBUdXBsZVtzdHIsIHN0cl06CiAgICBtID0gcmUubWF0Y2gocidcWyhbXHNcdy9dKylcXSAoLispJywgbWVzc2FnZSkKCiAgICBpZiBub3QgbToKICAgICAgICByZXR1cm4gJ2RlZmF1bHQnLCBtZXNzYWdlICAjIG5vY292ZXJhZ2UgZmFsbGJhY2sgY2FzZSBpbiBjYXNlIHRoZXJlJ3MgYSBjaGFuZ2UgaW4gcGF5bG9hZCBzY2hlbWEKICAgIHJldHVybiBtLmdyb3VwKDEpLCBtLmdyb3VwKDIpCgpkZWYgZ2V0X3JhdGVfZXhjZWVkZWRfdG9waWNfYW5kX21lc3NhZ2UocGF5bG9hZDogRGljdFtzdHIsIEFueV0pIC0+IFR1cGxlW3N0ciwgc3RyXToKICAgIHRvcGljLCBtID0gcGFyc2VfdG9waWNfYW5kX21lc3NhZ2UobWVzc2FnZT1wYXlsb2FkWyJtZXNzYWdlIl0pCgogICAgbWVzc2FnZSA9IFJBVEVfRVhDRUVERURfVEVNUExBVEUuZm9ybWF0KG1lc3NhZ2U9bSwgdXJsPXBheWxvYWRbJ25vdGljZSddWyd1cmwnXSkKCiAgICByZXR1cm4gdG9waWMsIG1lc3NhZ2UKCmRlZiBnZXRfcmVzb2x2ZWRfdG9waWNfYW5kX21lc3NhZ2UocGF5bG9hZDogRGljdFtzdHIsIEFueV0pIC0+IFR1cGxlW3N0ciwgc3RyXToKICAgIHRvcGljLCBfID0gcGFyc2VfdG9waWNfYW5kX21lc3NhZ2UobWVzc2FnZT1wYXlsb2FkWyJtZXNzYWdlIl0pCgogICAgbWVzc2FnZSA9IEVSUk9SX1JFU09MVkVEX1RFTVBMQVRFLmZvcm1hdChpZD1zdHIocGF5bG9hZFsnZmF1bHQnXVsnaWQnXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdG9yPXBheWxvYWRbJ2FjdG9yJ11bJ25hbWUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsPXBheWxvYWRbJ2ZhdWx0J11bJ3VybCddKQoKICAgIHJldHVybiB0b3BpYywgbWVzc2FnZQoKZGVmIGdldF9vY2N1cnJlZF90b3BpY19hbmRfbWVzc2FnZShwYXlsb2FkOiBEaWN0W3N0ciwgQW55XSkgLT4gVHVwbGVbc3RyLCBzdHJdOgogICAgdG9waWMsIF8gPSBwYXJzZV90b3BpY19hbmRfbWVzc2FnZShtZXNzYWdlPXBheWxvYWRbIm1lc3NhZ2UiXSkKCiAgICBtZXNzYWdlID0gRVJST1JfT0NDVVJSRURfVEVNUExBVEUuZm9ybWF0KGtsYXNzPXBheWxvYWRbJ2ZhdWx0J11bJ2tsYXNzJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9cGF5bG9hZFsnZmF1bHQnXVsnbWVzc2FnZSddLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXBheWxvYWRbJ2ZhdWx0J11bJ2lkJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Rfbm90aWNlPXBheWxvYWRbJ2ZhdWx0J11bJ2xhc3Rfbm90aWNlX2F0J10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybD1wYXlsb2FkWydmYXVsdCddWyd1cmwnXSkKCjx8ZmltX2VuZHw+"]
["97c3761425b57e0d6e2909b263b6806235673f33-1","97c3761425b57e0d6e2909b263b6806235673f33","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKZGVmIG1haW4oKToKCiAgICBmX2luID0gb3BlbihzeXMuYXJndlsxXSwgJ3InKQogICAgZl9uYW1lID0gc3lzLmFyZ3ZbMV0uc3BsaXQoJy4nKVswXQoKICAgIGZfb3V0ID0gb3BlbihmX25hbWUgKyAiX3Nsb3QudHh0IiwgInciKQoKICAgIGxpbmUgPSBmX2luLnJlYWRsaW5lKCkKICAgIHdoaWxlIGxpbmU6CiAgICAgICAgI2Zfb3V0LndyaXRlKGxpbmUgKyAiXG5cbiIpCiAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiLCIsICIgLCIpCiAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiLiAiLCAiIC4gIikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbnRlbmNlX3Rva2VucyA9IGxpbmUuc3BsaXQoIiAiKQogICAgICAgIHNlbnRlbmNlX3N0ciA9ICIgIi5sanVzdCgxNykgKyAiICIuam9pbih0b2tlbi5sanVzdCgxNikgZm9yIHRva2VuIGluIHNlbnRlbmNlX3Rva2VucykKICAgICAgICBmX291dC53cml0ZShzZW50ZW5jZV9zdHIgKyAiXG4iKQoKPHxmaW1fZW5kfD4="]
["171e1f2b73fbebf216e10b6d36a5aa49539b891f-1","171e1f2b73fbebf216e10b6d36a5aa49539b891f","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMi40IG9uIDIwMjEtMDYtMjcgMDQ6MDQKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgo8fGZpbV9lbmR8Pg=="]
["171e1f2b73fbebf216e10b6d36a5aa49539b891f-2","171e1f2b73fbebf216e10b6d36a5aa49539b891f","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMi40IG9uIDIwMjEtMDYtMjcgMDQ6MDQKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICBtaWdyYXRpb25zLnN3YXBwYWJsZV9kZXBlbmRlbmN5KHNldHRpbmdzLkFVVEhfVVNFUl9NT0RFTCksCiAgICAgICAgKCd0ZWFtYmxvZycsICcwMDAxX2luaXRpYWwnKSwKPHxmaW1fZW5kfD4="]
["15633e39cb25e7d2f651a93fe8cd287ec5930f75-1","15633e39cb25e7d2f651a93fe8cd287ec5930f75","PHxmaW1fcHJlZml4fD4KCmZyb20gd2VsZC53ZWxkb2JqZWN0IGltcG9ydCAqCmZyb20gd2VsZC50eXBlcyBpbXBvcnQgKgpmcm9tIHdlbGQuZW5jb2RlcnMgaW1wb3J0IE51bXB5QXJyYXlFbmNvZGVyLCBOdW1weUFycmF5RGVjb2RlciwgU2NhbGFyRGVjb2RlcgoKX2VuY29kZXIgPSBOdW1weUFycmF5RW5jb2RlcigpCl9kZWNvZGVyID0gTnVtcHlBcnJheURlY29kZXIoKQoKCmNsYXNzIEhlbGxvV2VsZFZlY3RvcihvYmplY3QpOgo8fGZpbV9ob2xlfD4KICAgICAgICBuYW1lID0gc2VsZi53ZWxkb2JqLnVwZGF0ZSh2ZWN0b3IsIFdlbGRWZWMoV2VsZEludCgpKSwgb3ZlcnJpZGU9VHJ1ZSkKICAgICAgICBzZWxmLndlbGRvYmoud2VsZF9jb2RlID0gbmFtZQogICAgICAgIHNlbGYuY2FjaGVkID0gTm9uZQoKICAgIGRlZiBhZGQoc2VsZiwgbnVtYmVyKToKICAgICAgICBzZWxmLmNhY2hlZCA9IE5vbmUKICAgICAgICB0ZW1wbGF0ZSA9ICJtYXAoezB9LCB8ZXwgZSArIHsxfSkiCiAgICAgICAgc2VsZi53ZWxkb2JqLndlbGRfY29kZSA9IHRlbXBsYXRlLmZvcm1hdCgKICAgICAgICAgICAgc2VsZi53ZWxkb2JqLndlbGRfY29kZSwgc3RyKG51bWJlcikpCiAgICAgICAgcmV0dXJuIHNlbGYKCiAgICBkZWYgc3VtKHNlbGYpOgogICAgICAgIHNlbGYuY2FjaGVkID0gTm9uZQogICAgICAgIHRlbXBsYXRlID0gInJlc3VsdChmb3IoezB9LCBtZXJnZXJbaTY0LCtdLCB8YixpLGV8IG1lcmdlKGIsIGk2NChlKSkpKSIKICAgICAgICBwcmV2X2NvZGUgPSBzZWxmLndlbGRvYmoud2VsZF9jb2RlCiAgICAgICAgc2VsZi53ZWxkb2JqLndlbGRfY29kZSA9IHRlbXBsYXRlLmZvcm1hdChzZWxmLndlbGRvYmoud2VsZF9jb2RlKQogICAgICAgIHNlbGYud2VsZG9iai5kZWNvZGVyID0gU2NhbGFyRGVjb2RlcigpCiAgICAgICAgcmVzdWx0ID0gc2VsZi53ZWxkb2JqLmV2YWx1YXRlKFdlbGRMb25nKCksIHZlcmJvc2U9RmFsc2UpCiAgICAgICAgc2VsZi53ZWxkb2JqLmRlY29kZXIgPSBfZGVjb2RlcgogICAgICAgIHNlbGYud2VsZG9iai53ZWxkX2NvZGUgPSBwcmV2X2NvZGUKICAgICAgICByZXR1cm4gcmVzdWx0CgogICAgZGVmIF9faWFkZF9fKHNlbGYsIG90aGVyKToKICAgICAgICByZXR1cm4gc2VsZi5hZGQob3RoZXIpCgogICAgZGVmIG11bHRpcGx5KHNlbGYsIG51bWJlcik6CiAgICAgICAgc2VsZi5jYWNoZWQgPSBOb25lCiAgICAgICAgdGVtcGxhdGUgPSAibWFwKHswfSwgfGV8IGUgKiB7MX0pIgogICAgICAgIHNlbGYud2VsZG9iai53ZWxkX2NvZGUgPSB0ZW1wbGF0ZS5mb3JtYXQoCiAgICAgICAgICAgIHNlbGYud2VsZG9iai53ZWxkX2NvZGUsIHN0cihudW1iZXIpKQogICAgICAgIHJldHVybiBzZWxmCgogICAgZGVmIHN1YnRyYWN0KHNlbGYsIG51bWJlcik6CiAgICAgICAgc2VsZi5jYWNoZWQgPSBOb25lCiAgICAgICAgdGVtcGxhdGUgPSAibWFwKHswfSwgfGV8IGUgLSB7MX0pIgogICAgICAgIHNlbGYud2VsZG9iai53ZWxkX2NvZGUgPSB0ZW1wbGF0ZS5mb3JtYXQoCiAgICAgICAgICAgIHNlbGYud2VsZG9iai53ZWxkX2NvZGUsIHN0cihudW1iZXIpKQogICAgICAgIHJldHVybiBzZWxmCgogICAgZGVmIGRpdmlkZShzZWxmLCBudW1iZXIpOgogICAgICAgIHNlbGYuY2FjaGVkID0gTm9uZQogICAgICAgIHRlbXBsYXRlID0gIm1hcCh7MH0sIHxlfCBlIC8gezF9KSIKICAgICAgICBzZWxmLndlbGRvYmoud2VsZF9jb2RlID0gdGVtcGxhdGUuZm9ybWF0KAogICAgICAgICAgICBzZWxmLndlbGRvYmoud2VsZF9jb2RlLCBzdHIobnVtYmVyKSkKICAgICAgICByZXR1cm4gc2VsZgoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIGlmIHNlbGYuY2FjaGVkIGlzIG5vdCBOb25lOgogICAgICAgICAgICByZXR1cm4gc3RyKHYpCiAgICAgICAgdiA9IHNlbGYud2VsZG9iai5ldmFsdWF0ZShXZWxkVmVjKFdlbGRJbnQoKSksIHZlcmJvc2U9RmFsc2UpCiAgICAgICAgc2VsZi5jYWNoZWQgPSB2CiAgICAgICAgcmV0dXJuIHN0cih2KQo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2ZWN0b3IpOgogICAgICAgIHNlbGYudmVjdG9yID0gdmVjdG9yCiAgICAgICAgc2VsZi53ZWxkb2JqID0gV2VsZE9iamVjdChfZW5jb2RlciwgX2RlY29kZXIpCjx8ZmltX2VuZHw+"]
["15633e39cb25e7d2f651a93fe8cd287ec5930f75-2","15633e39cb25e7d2f651a93fe8cd287ec5930f75","PHxmaW1fcHJlZml4fD4KCmZyb20gd2VsZC53ZWxkb2JqZWN0IGltcG9ydCAqCmZyb20gd2VsZC50eXBlcyBpbXBvcnQgKgpmcm9tIHdlbGQuZW5jb2RlcnMgaW1wb3J0IE51bXB5QXJyYXlFbmNvZGVyLCBOdW1weUFycmF5RGVjb2RlciwgU2NhbGFyRGVjb2RlcgoKX2VuY29kZXIgPSBOdW1weUFycmF5RW5jb2RlcigpCl9kZWNvZGVyID0gTnVtcHlBcnJheURlY29kZXIoKQoKCmNsYXNzIEhlbGxvV2VsZFZlY3RvcihvYmplY3QpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2ZWN0b3IpOgogICAgICAgIHNlbGYudmVjdG9yID0gdmVjdG9yCiAgICAgICAgc2VsZi53ZWxkb2JqID0gV2VsZE9iamVjdChfZW5jb2RlciwgX2RlY29kZXIpCiAgICAgICAgbmFtZSA9IHNlbGYud2VsZG9iai51cGRhdGUodmVjdG9yLCBXZWxkVmVjKFdlbGRJbnQoKSksIG92ZXJyaWRlPVRydWUpCiAgICAgICAgc2VsZi53ZWxkb2JqLndlbGRfY29kZSA9IG5hbWUKICAgICAgICBzZWxmLmNhY2hlZCA9IE5vbmUKCiAgICBkZWYgYWRkKHNlbGYsIG51bWJlcik6CiAgICAgICAgc2VsZi5jYWNoZWQgPSBOb25lCiAgICAgICAgdGVtcGxhdGUgPSAibWFwKHswfSwgfGV8IGUgKyB7MX0pIgo8fGZpbV9ob2xlfD4KICAgIGRlZiBzdW0oc2VsZik6CiAgICAgICAgc2VsZi5jYWNoZWQgPSBOb25lCiAgICAgICAgdGVtcGxhdGUgPSAicmVzdWx0KGZvcih7MH0sIG1lcmdlcltpNjQsK10sIHxiLGksZXwgbWVyZ2UoYiwgaTY0KGUpKSkpIgogICAgICAgIHByZXZfY29kZSA9IHNlbGYud2VsZG9iai53ZWxkX2NvZGUKICAgICAgICBzZWxmLndlbGRvYmoud2VsZF9jb2RlID0gdGVtcGxhdGUuZm9ybWF0KHNlbGYud2VsZG9iai53ZWxkX2NvZGUpCiAgICAgICAgc2VsZi53ZWxkb2JqLmRlY29kZXIgPSBTY2FsYXJEZWNvZGVyKCkKICAgICAgICByZXN1bHQgPSBzZWxmLndlbGRvYmouZXZhbHVhdGUoV2VsZExvbmcoKSwgdmVyYm9zZT1GYWxzZSkKICAgICAgICBzZWxmLndlbGRvYmouZGVjb2RlciA9IF9kZWNvZGVyCiAgICAgICAgc2VsZi53ZWxkb2JqLndlbGRfY29kZSA9IHByZXZfY29kZQogICAgICAgIHJldHVybiByZXN1bHQKCiAgICBkZWYgX19pYWRkX18oc2VsZiwgb3RoZXIpOgogICAgICAgIHJldHVybiBzZWxmLmFkZChvdGhlcikKCiAgICBkZWYgbXVsdGlwbHkoc2VsZiwgbnVtYmVyKToKICAgICAgICBzZWxmLmNhY2hlZCA9IE5vbmUKICAgICAgICB0ZW1wbGF0ZSA9ICJtYXAoezB9LCB8ZXwgZSAqIHsxfSkiCiAgICAgICAgc2VsZi53ZWxkb2JqLndlbGRfY29kZSA9IHRlbXBsYXRlLmZvcm1hdCgKICAgICAgICAgICAgc2VsZi53ZWxkb2JqLndlbGRfY29kZSwgc3RyKG51bWJlcikpCiAgICAgICAgcmV0dXJuIHNlbGYKCiAgICBkZWYgc3VidHJhY3Qoc2VsZiwgbnVtYmVyKToKICAgICAgICBzZWxmLmNhY2hlZCA9IE5vbmUKICAgICAgICB0ZW1wbGF0ZSA9ICJtYXAoezB9LCB8ZXwgZSAtIHsxfSkiCiAgICAgICAgc2VsZi53ZWxkb2JqLndlbGRfY29kZSA9IHRlbXBsYXRlLmZvcm1hdCgKICAgICAgICAgICAgc2VsZi53ZWxkb2JqLndlbGRfY29kZSwgc3RyKG51bWJlcikpCiAgICAgICAgcmV0dXJuIHNlbGYKCiAgICBkZWYgZGl2aWRlKHNlbGYsIG51bWJlcik6CiAgICAgICAgc2VsZi5jYWNoZWQgPSBOb25lCiAgICAgICAgdGVtcGxhdGUgPSAibWFwKHswfSwgfGV8IGUgLyB7MX0pIgogICAgICAgIHNlbGYud2VsZG9iai53ZWxkX2NvZGUgPSB0ZW1wbGF0ZS5mb3JtYXQoCiAgICAgICAgICAgIHNlbGYud2VsZG9iai53ZWxkX2NvZGUsIHN0cihudW1iZXIpKQogICAgICAgIHJldHVybiBzZWxmCgogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgaWYgc2VsZi5jYWNoZWQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHJldHVybiBzdHIodikKICAgICAgICB2ID0gc2VsZi53ZWxkb2JqLmV2YWx1YXRlKFdlbGRWZWMoV2VsZEludCgpKSwgdmVyYm9zZT1GYWxzZSkKICAgICAgICBzZWxmLmNhY2hlZCA9IHYKICAgICAgICByZXR1cm4gc3RyKHYpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi53ZWxkb2JqLndlbGRfY29kZSA9IHRlbXBsYXRlLmZvcm1hdCgKICAgICAgICAgICAgc2VsZi53ZWxkb2JqLndlbGRfY29kZSwgc3RyKG51bWJlcikpCiAgICAgICAgcmV0dXJuIHNlbGYKCjx8ZmltX2VuZHw+"]
["bf114624b7159e5a00412dad19e08b298e1dce99-1","bf114624b7159e5a00412dad19e08b298e1dce99","PHxmaW1fcHJlZml4fD4KZnJvbSByZWdleF9lbmdpbmUuY29udmVyc2lvbi5ub2RlX3RvX25kZWEgaW1wb3J0IG5vZGVfdG9fbmRlYV9ub2RlCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSByZWdleF9lbmdpbmUuY29udmVyc2lvbi5yZWdleF90b19ub2RlIGltcG9ydCByZWdleF90b19ub2RlCjx8ZmltX2VuZHw+"]
["c1b1aca2d11c96e57cc9e31e63d6e8437f6bf628-1","c1b1aca2d11c96e57cc9e31e63d6e8437f6bf628","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNodXRpbAppbXBvcnQgcmVxdWVzdHMKZnJvbSByZXF1ZXN0cy5leGNlcHRpb25zIGltcG9ydCBIVFRQRXJyb3IKZnJvbSBiaWlnbGUgaW1wb3J0IEFwaQoKIyBFbnRlciB5b3VyIHVzZXIgZW1haWwgYWRkcmVzcyBoZXJlLgplbWFpbCA9ICcnCiMgRW50ZXIgeW91ciBBUEkgdG9rZW4gaGVyZS4KdG9rZW4gPSAnJwojIFR5cGUgb2YgdGhlIG1vZGVsIHRvIHByb2Nlc3MgKGVpdGhlciBwcm9qZWN0IG9yIHZvbHVtZSkKbW9kZWxfdHlwZSA9ICdwcm9qZWN0JwojIElEIG9mIHRoZSBwcm9qZWN0L3ZvbHVtZSB0byBwcm9jZXNzLgptb2RlbF9pZCA9IDAKIyBJRCBvZiB0aGUgbGFiZWwgdG8gZmV0Y2ggTGFyZ28gcGF0Y2hlcyBmb3IuCmxhYmVsX2lkID0gMAoKYXBpID0gQXBpKGVtYWlsLCB0b2tlbikKCmVuZHBvaW50X3VybCA9ICd7fXMve30vaW1hZ2UtYW5ub3RhdGlvbnMvZmlsdGVyL2xhYmVsL3t9Jwphbm5vdGF0aW9ucyA9IGFwaS5nZXQoZW5kcG9pbnRfdXJsLmZvcm1hdChtb2RlbF90eXBlLCBtb2RlbF9pZCwgbGFiZWxfaWQpKS5qc29uKCkKCnBhdGNoX3VybCA9ICdodHRwczovL2JpaWdsZS5kZS9zdG9yYWdlL2xhcmdvLXBhdGNoZXMve30ve30ve30ve30uanBnJwoKZm9yIGFubm90YXRpb25faWQsIGltYWdlX3V1aWQgaW4gYW5ub3RhdGlvbnMuaXRlbXMoKToKICAgdXJsID0gcGF0Y2hfdXJsLmZvcm1hdChpbWFnZV91dWlkWzoyXSwgaW1hZ2VfdXVpZFsyOjRdLCBpbWFnZV91dWlkLCBhbm5vdGF0aW9uX2lkKQogICBwcmludCgnRmV0Y2hpbmcnLCB1cmwpCiAgIHBhdGNoID0gcmVxdWVzdHMuZ2V0KHVybCwgc3RyZWFtPVRydWUpCiAgIGlmIHBhdGNoLm9rICE9IFRydWU6CiAgICAgIHJhaXNlIEV4Y2VwdGlvbignRmFpbGVkIHRvIGZldGNoIHt9Jy5mb3JtYXQodXJsKSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICB3aXRoIG9wZW4oJ3t9LmpwZycuZm9ybWF0KGFubm90YXRpb25faWQpLCAnd2InKSBhcyBmOgogICAgICBwYXRjaC5yYXcuZGVjb2RlX2NvbnRlbnQgPSBUcnVlCiAgICAgIHNodXRpbC5jb3B5ZmlsZW9iaihwYXRjaC5yYXcsIGYpCgo8fGZpbV9lbmR8Pg=="]
["c1b1aca2d11c96e57cc9e31e63d6e8437f6bf628-2","c1b1aca2d11c96e57cc9e31e63d6e8437f6bf628","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNodXRpbAppbXBvcnQgcmVxdWVzdHMKZnJvbSByZXF1ZXN0cy5leGNlcHRpb25zIGltcG9ydCBIVFRQRXJyb3IKZnJvbSBiaWlnbGUgaW1wb3J0IEFwaQoKIyBFbnRlciB5b3VyIHVzZXIgZW1haWwgYWRkcmVzcyBoZXJlLgplbWFpbCA9ICcnCiMgRW50ZXIgeW91ciBBUEkgdG9rZW4gaGVyZS4KdG9rZW4gPSAnJwojIFR5cGUgb2YgdGhlIG1vZGVsIHRvIHByb2Nlc3MgKGVpdGhlciBwcm9qZWN0IG9yIHZvbHVtZSkKbW9kZWxfdHlwZSA9ICdwcm9qZWN0JwojIElEIG9mIHRoZSBwcm9qZWN0L3ZvbHVtZSB0byBwcm9jZXNzLgptb2RlbF9pZCA9IDAKIyBJRCBvZiB0aGUgbGFiZWwgdG8gZmV0Y2ggTGFyZ28gcGF0Y2hlcyBmb3IuCmxhYmVsX2lkID0gMAoKPHxmaW1faG9sZXw+CgpwYXRjaF91cmwgPSAnaHR0cHM6Ly9iaWlnbGUuZGUvc3RvcmFnZS9sYXJnby1wYXRjaGVzL3t9L3t9L3t9L3t9LmpwZycKCmZvciBhbm5vdGF0aW9uX2lkLCBpbWFnZV91dWlkIGluIGFubm90YXRpb25zLml0ZW1zKCk6CiAgIHVybCA9IHBhdGNoX3VybC5mb3JtYXQoaW1hZ2VfdXVpZFs6Ml0sIGltYWdlX3V1aWRbMjo0XSwgaW1hZ2VfdXVpZCwgYW5ub3RhdGlvbl9pZCkKICAgcHJpbnQoJ0ZldGNoaW5nJywgdXJsKQogICBwYXRjaCA9IHJlcXVlc3RzLmdldCh1cmwsIHN0cmVhbT1UcnVlKQogICBpZiBwYXRjaC5vayAhPSBUcnVlOgogICAgICByYWlzZSBFeGNlcHRpb24oJ0ZhaWxlZCB0byBmZXRjaCB7fScuZm9ybWF0KHVybCkpCiAgIHdpdGggb3Blbigne30uanBnJy5mb3JtYXQoYW5ub3RhdGlvbl9pZCksICd3YicpIGFzIGY6CiAgICAgIHBhdGNoLnJhdy5kZWNvZGVfY29udGVudCA9IFRydWUKICAgICAgc2h1dGlsLmNvcHlmaWxlb2JqKHBhdGNoLnJhdywgZikKCnByaW50KCdGaW5pc2hlZC4nKQo8fGZpbV9zdWZmaXh8PgphcGkgPSBBcGkoZW1haWwsIHRva2VuKQoKZW5kcG9pbnRfdXJsID0gJ3t9cy97fS9pbWFnZS1hbm5vdGF0aW9ucy9maWx0ZXIvbGFiZWwve30nCmFubm90YXRpb25zID0gYXBpLmdldChlbmRwb2ludF91cmwuZm9ybWF0KG1vZGVsX3R5cGUsIG1vZGVsX2lkLCBsYWJlbF9pZCkpLmpzb24oKQo8fGZpbV9lbmR8Pg=="]
["c1b1aca2d11c96e57cc9e31e63d6e8437f6bf628-3","c1b1aca2d11c96e57cc9e31e63d6e8437f6bf628","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNodXRpbAppbXBvcnQgcmVxdWVzdHMKZnJvbSByZXF1ZXN0cy5leGNlcHRpb25zIGltcG9ydCBIVFRQRXJyb3IKZnJvbSBiaWlnbGUgaW1wb3J0IEFwaQoKIyBFbnRlciB5b3VyIHVzZXIgZW1haWwgYWRkcmVzcyBoZXJlLgplbWFpbCA9ICcnCiMgRW50ZXIgeW91ciBBUEkgdG9rZW4gaGVyZS4KdG9rZW4gPSAnJwojIFR5cGUgb2YgdGhlIG1vZGVsIHRvIHByb2Nlc3MgKGVpdGhlciBwcm9qZWN0IG9yIHZvbHVtZSkKbW9kZWxfdHlwZSA9ICdwcm9qZWN0JwojIElEIG9mIHRoZSBwcm9qZWN0L3ZvbHVtZSB0byBwcm9jZXNzLgptb2RlbF9pZCA9IDAKIyBJRCBvZiB0aGUgbGFiZWwgdG8gZmV0Y2ggTGFyZ28gcGF0Y2hlcyBmb3IuCmxhYmVsX2lkID0gMAoKYXBpID0gQXBpKGVtYWlsLCB0b2tlbikKCmVuZHBvaW50X3VybCA9ICd7fXMve30vaW1hZ2UtYW5ub3RhdGlvbnMvZmlsdGVyL2xhYmVsL3t9Jwphbm5vdGF0aW9ucyA9IGFwaS5nZXQoZW5kcG9pbnRfdXJsLmZvcm1hdChtb2RlbF90eXBlLCBtb2RlbF9pZCwgbGFiZWxfaWQpKS5qc29uKCkKCnBhdGNoX3VybCA9ICdodHRwczovL2JpaWdsZS5kZS9zdG9yYWdlL2xhcmdvLXBhdGNoZXMve30ve30ve30ve30uanBnJwoKZm9yIGFubm90YXRpb25faWQsIGltYWdlX3V1aWQgaW4gYW5ub3RhdGlvbnMuaXRlbXMoKToKICAgdXJsID0gcGF0Y2hfdXJsLmZvcm1hdChpbWFnZV91dWlkWzoyXSwgaW1hZ2VfdXVpZFsyOjRdLCBpbWFnZV91dWlkLCBhbm5vdGF0aW9uX2lkKQogICBwcmludCgnRmV0Y2hpbmcnLCB1cmwpCiAgIHBhdGNoID0gcmVxdWVzdHMuZ2V0KHVybCwgc3RyZWFtPVRydWUpCiAgIGlmIHBhdGNoLm9rICE9IFRydWU6CiAgICAgIHJhaXNlIEV4Y2VwdGlvbignRmFpbGVkIHRvIGZldGNoIHt9Jy5mb3JtYXQodXJsKSkKICAgd2l0aCBvcGVuKCd7fS5qcGcnLmZvcm1hdChhbm5vdGF0aW9uX2lkKSwgJ3diJykgYXMgZjoKICAgICAgcGF0Y2gucmF3LmRlY29kZV9jb250ZW50ID0gVHJ1ZQogICAgICBzaHV0aWwuY29weWZpbGVvYmoocGF0Y2gucmF3LCBmKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpwcmludCgnRmluaXNoZWQuJykKPHxmaW1fZW5kfD4="]
["e5932e6af6c0a111c62f3e46c2b3b9596004168e-1","e5932e6af6c0a111c62f3e46c2b3b9596004168e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gc2NpcHkuc3BhdGlhbC5kaXN0YW5jZSBpbXBvcnQgZGljZSBhcyBzZGljZQpmcm9tIHNrbGVhcm4ubWV0cmljcyBpbXBvcnQgZjFfc2NvcmUKCmltcG9ydCB0b3JjaApmcm9tIHRvcmNoLmF1dG9ncmFkIGltcG9ydCBWYXJpYWJsZQoKCmRlZiBmbWljcm9fbnAoeXRydWUsIHlwcmVkKToKICAgIHl0cnVlID0geXRydWUucmVzaGFwZSh5dHJ1ZS5zaGFwZVswXSwgLTEpLmFzdHlwZShucC51aW50OCkKICAgIHlwcmVkID0geXByZWQucmVzaGFwZSh5dHJ1ZS5zaGFwZVswXSwgLTEpLmFzdHlwZShucC51aW50OCkKICAgIHJldHVybiBmMV9zY29yZSh5dHJ1ZSwgeXByZWQsIGF2ZXJhZ2U9J21pY3JvJykKCjx8ZmltX2hvbGV8PgogICAgZHMgPSBbXQogICAgZm9yIHRydWUsIHByZWQgaW4gemlwKHl0cnVlLCB5cHJlZCk6CiAgICAgICAgaWYgbnAuYW55KHRydWUpIG9yIG5wLmFueShwcmVkKToKICAgICAgICAgICAgZCA9IDEgLSBzZGljZSh0cnVlLmFzdHlwZShpbnQpLCBwcmVkLmFzdHlwZShpbnQpKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGQgPSAxCiAgICAgICAgZHMuYXBwZW5kKGQpCiAgICBkYzogZmxvYXQgPSBucC5tZWFuKGRzKQogICAgcmV0dXJuIGRjCgoKZGVmIHNjb3JlX25wKHl0cnVlLCB5cHJlZCk6CiAgICByZXR1cm4gaW50KHJvdW5kKDFlOCAqIChmbWljcm9fbnAoeXRydWUsIHlwcmVkKSArIGRpY2VfbnAoeXRydWUsIHlwcmVkKSkgLyAyKSkgLyAxMDAKCgojIG5vaW5zcGVjdGlvbiBQeVVucmVzb2x2ZWRSZWZlcmVuY2VzCmRlZiBmbWljcm9fdGgocHJlZHMsIHRydWVzLCB0aHI9MC41LCBlcHM9MWUtOCk6CiAgICBwcmVkcyA9IChwcmVkcy52aWV3KC0xKS5mbG9hdCgpID4gdGhyKS5mbG9hdCgpCiAgICB0cnVlcyA9ICh0cnVlcy52aWV3KC0xKS5mbG9hdCgpID4gdGhyKS5mbG9hdCgpCgogICAgdHAgPSB0b3JjaC5zdW0ocHJlZHMgKiB0cnVlcykKICAgIGZwID0gdG9yY2guc3VtKHByZWRzICogKDEgLSB0cnVlcykpCiAgICBmbiA9IHRvcmNoLnN1bSgoMSAtIHByZWRzKSAqIHRydWVzKQoKICAgIHAgPSB0cCAvICh0cCArIGZwICsgZXBzKQogICAgciA9IHRwIC8gKHRwICsgZm4gKyBlcHMpCgogICAgcmV0dXJuICgyICogcCAqIHIgLyAocCArIHIgKyBlcHMpKS5kYXRhLmNwdSgpWzBdCgoKIyBub2luc3BlY3Rpb24gUHlVbnJlc29sdmVkUmVmZXJlbmNlcyxQeUFyZ3VtZW50TGlzdApkZWYgZGljZV90aChwcmVkcywgdHJ1ZXMsIHRocj0wLjUsIGVwcz0xZS04KToKICAgIHByZWRzID0gKHByZWRzLnZpZXcocHJlZHMuc2l6ZSgwKSwgLTEpLmZsb2F0KCkgPiB0aHIpLmZsb2F0KCkKICAgIHRydWVzID0gKHRydWVzLnZpZXcodHJ1ZXMuc2l6ZSgwKSwgLTEpLmZsb2F0KCkgPiB0aHIpLmZsb2F0KCkKCiAgICB0cCA9IHRvcmNoLnN1bShwcmVkcyAqIHRydWVzLCAxKQogICAgZnAgPSB0b3JjaC5zdW0ocHJlZHMgKiAoMSAtIHRydWVzKSwgMSkKICAgIGZuID0gdG9yY2guc3VtKCgxIC0gcHJlZHMpICogdHJ1ZXMsIDEpCgogICAgcmV0dXJuIHRvcmNoLm1lYW4oKDIgKiB0cCArIGVwcykgLyAoMiAqIHRwICsgZnAgKyBmbiArIGVwcykpLmRhdGEuY3B1KClbMF0KCgojIG5vaW5zcGVjdGlvbiBQeVVucmVzb2x2ZWRSZWZlcmVuY2VzCmRlZiBzY29yZV90aChwcmVkcywgdHJ1ZXMpOgogICAgcmV0dXJuIChmbWljcm9fdGgocHJlZHMsIHRydWVzKSArIGRpY2VfdGgocHJlZHMsIHRydWVzKSkgLyAyCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGFuID0gbnAuZ3JlYXRlcihucC5yYW5kb20ucmFuZCg0LCAxMCwgMTAsIDEwKSwgMC43KS5hc3R5cGUoZmxvYXQpCiAgICBibiA9IG5wLmdyZWF0ZXIobnAucmFuZG9tLnJhbmQoNCwgMTAsIDEwLCAxMCksIDAuNykuYXN0eXBlKGZsb2F0KQogICAgYXQgPSBWYXJpYWJsZSh0b3JjaC5mcm9tX251bXB5KGFuKSwgdm9sYXRpbGU9VHJ1ZSkuY3VkYSgpCiAgICBidCA9IFZhcmlhYmxlKHRvcmNoLmZyb21fbnVtcHkoYm4pLCB2b2xhdGlsZT1UcnVlKS5jdWRhKCkKICAgIGFzc2VydCBucC5hbGxjbG9zZShbZm1pY3JvX3RoKGF0LCBidCldLCBbZm1pY3JvX25wKGFuLCBibildKQogICAgYXNzZXJ0IG5wLmFsbGNsb3NlKFtkaWNlX3RoKGF0LCBidCldLCBbZGljZV9ucChhbiwgYm4pXSkKICAgIHByaW50KFtzY29yZV90aChhdCwgYnQpXSwgW3Njb3JlX25wKGFuLCBibildKQo8fGZpbV9zdWZmaXh8PgoKZGVmIGRpY2VfbnAoeXRydWUsIHlwcmVkKToKICAgIHl0cnVlID0geXRydWUucmVzaGFwZSh5dHJ1ZS5zaGFwZVswXSwgLTEpLmFzdHlwZShucC51aW50OCkKICAgIHlwcmVkID0geXByZWQucmVzaGFwZSh5dHJ1ZS5zaGFwZVswXSwgLTEpLmFzdHlwZShucC51aW50OCkKPHxmaW1fZW5kfD4="]
["e5932e6af6c0a111c62f3e46c2b3b9596004168e-2","e5932e6af6c0a111c62f3e46c2b3b9596004168e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gc2NpcHkuc3BhdGlhbC5kaXN0YW5jZSBpbXBvcnQgZGljZSBhcyBzZGljZQpmcm9tIHNrbGVhcm4ubWV0cmljcyBpbXBvcnQgZjFfc2NvcmUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKaW1wb3J0IHRvcmNoCmZyb20gdG9yY2guYXV0b2dyYWQgaW1wb3J0IFZhcmlhYmxlCgo8fGZpbV9lbmR8Pg=="]
["977c7b7fdbfc638af7102ee0c4e3c69c2ff24eb1-1","977c7b7fdbfc638af7102ee0c4e3c69c2ff24eb1","PHxmaW1fcHJlZml4fD4KIiIiCnhvbnRyaWItcHJvbXB0LXJldC1jb2RlCi0tLS0tCkFkZHMgcmV0dXJuIGNvZGUgaW5mbyB0byB4b25zaCBwcm9tcHQuCiIiIgoKdHJ5OgogICAgZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cApleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBzZXR1cAoKCnNldHVwKAogICAgbmFtZT0neG9udHJpYi1wcm9tcHQtcmV0LWNvZGUnLAogICAgdmVyc2lvbj0nMS4wLjEnLAogICAgZGVzY3JpcHRpb249J0FkZHMgcmV0dXJuIGNvZGUgaW5mbyB0byB4b25zaCBwcm9tcHQuJywKICAgIGxvbmdfZGVzY3JpcHRpb249X19kb2NfXywKICAgIGxpY2Vuc2U9J01JVCcsCiAgICB1cmw9J2h0dHA6Ly9naXRodWIuY29tL3NpZWNqZS94b250cmliLXByb21wdC1yZXQtY29kZS8nLAogICAgYXV0aG9yPSdDb2R5IFNjb3R0JywKICAgIHBhY2thZ2VzPVsneG9udHJpYiddLAogICAgcGFja2FnZV9kaXI9eyd4b250cmliJzogJ3hvbnRyaWInfSwKICAgIHBhY2thZ2VfZGF0YT17J3hvbnRyaWInOiBbJyoueHNoJ119LAogICAgemlwX3NhZmU9VHJ1ZSwKICAgIGluY2x1ZGVfcGFja2FnZV9kYXRhPUZhbHNlLAogICAgcGxhdGZvcm1zPSdhbnknLAogICAgY2xhc3NpZmllcnM9WwogICAgICAgICdFbnZpcm9ubWVudCA6OiBDb25zb2xlJywKICAgICAgICAnSW50ZW5kZWQgQXVkaWVuY2UgOjogRW5kIFVzZXJzL0Rlc2t0b3AnLAogICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNSVQgTGljZW5zZScsCiAgICAgICAgJ09wZXJhdGluZyBTeXN0ZW0gOjogT1MgSW5kZXBlbmRlbnQnLAo8fGZpbV9ob2xlfD4KICAgIF0KKQoKPHxmaW1fc3VmZml4fD4KICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uJywKICAgICAgICAnVG9waWMgOjogRGVza3RvcCBFbnZpcm9ubWVudCcsCiAgICAgICAgJ1RvcGljIDo6IFN5c3RlbSA6OiBTaGVsbHMnLAogICAgICAgICdUb3BpYyA6OiBTeXN0ZW0gOjogU3lzdGVtIFNoZWxscycsCjx8ZmltX2VuZHw+"]
["977c7b7fdbfc638af7102ee0c4e3c69c2ff24eb1-2","977c7b7fdbfc638af7102ee0c4e3c69c2ff24eb1","PHxmaW1fcHJlZml4fD4KIiIiCnhvbnRyaWItcHJvbXB0LXJldC1jb2RlCi0tLS0tCkFkZHMgcmV0dXJuIGNvZGUgaW5mbyB0byB4b25zaCBwcm9tcHQuCiIiIgoKdHJ5OgogICAgZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cApleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBzZXR1cAoKCnNldHVwKAogICAgbmFtZT0neG9udHJpYi1wcm9tcHQtcmV0LWNvZGUnLAogICAgdmVyc2lvbj0nMS4wLjEnLAogICAgZGVzY3JpcHRpb249J0FkZHMgcmV0dXJuIGNvZGUgaW5mbyB0byB4b25zaCBwcm9tcHQuJywKICAgIGxvbmdfZGVzY3JpcHRpb249X19kb2NfXywKICAgIGxpY2Vuc2U9J01JVCcsCiAgICB1cmw9J2h0dHA6Ly9naXRodWIuY29tL3NpZWNqZS94b250cmliLXByb21wdC1yZXQtY29kZS8nLAogICAgYXV0aG9yPSdDb2R5IFNjb3R0JywKICAgIHBhY2thZ2VzPVsneG9udHJpYiddLAogICAgcGFja2FnZV9kaXI9eyd4b250cmliJzogJ3hvbnRyaWInfSwKPHxmaW1faG9sZXw+CiAgICBjbGFzc2lmaWVycz1bCiAgICAgICAgJ0Vudmlyb25tZW50IDo6IENvbnNvbGUnLAogICAgICAgICdJbnRlbmRlZCBBdWRpZW5jZSA6OiBFbmQgVXNlcnMvRGVza3RvcCcsCiAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1JVCBMaWNlbnNlJywKICAgICAgICAnT3BlcmF0aW5nIFN5c3RlbSA6OiBPUyBJbmRlcGVuZGVudCcsCiAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbicsCiAgICAgICAgJ1RvcGljIDo6IERlc2t0b3AgRW52aXJvbm1lbnQnLAogICAgICAgICdUb3BpYyA6OiBTeXN0ZW0gOjogU2hlbGxzJywKICAgICAgICAnVG9waWMgOjogU3lzdGVtIDo6IFN5c3RlbSBTaGVsbHMnLAogICAgXQopCgo8fGZpbV9zdWZmaXh8PgogICAgcGFja2FnZV9kYXRhPXsneG9udHJpYic6IFsnKi54c2gnXX0sCiAgICB6aXBfc2FmZT1UcnVlLAogICAgaW5jbHVkZV9wYWNrYWdlX2RhdGE9RmFsc2UsCiAgICBwbGF0Zm9ybXM9J2FueScsCjx8ZmltX2VuZHw+"]
["977c7b7fdbfc638af7102ee0c4e3c69c2ff24eb1-3","977c7b7fdbfc638af7102ee0c4e3c69c2ff24eb1","PHxmaW1fcHJlZml4fD4KIiIiCnhvbnRyaWItcHJvbXB0LXJldC1jb2RlCi0tLS0tCkFkZHMgcmV0dXJuIGNvZGUgaW5mbyB0byB4b25zaCBwcm9tcHQuCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIiIiCgp0cnk6CiAgICBmcm9tIHNldHVwdG9vbHMgaW1wb3J0IHNldHVwCjx8ZmltX2VuZHw+"]
["977c7b7fdbfc638af7102ee0c4e3c69c2ff24eb1-4","977c7b7fdbfc638af7102ee0c4e3c69c2ff24eb1","PHxmaW1fcHJlZml4fD4KIiIiCnhvbnRyaWItcHJvbXB0LXJldC1jb2RlCi0tLS0tCkFkZHMgcmV0dXJuIGNvZGUgaW5mbyB0byB4b25zaCBwcm9tcHQuCiIiIgoKdHJ5OgogICAgZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cApleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBzZXR1cAoKCnNldHVwKAogICAgbmFtZT0neG9udHJpYi1wcm9tcHQtcmV0LWNvZGUnLAogICAgdmVyc2lvbj0nMS4wLjEnLAogICAgZGVzY3JpcHRpb249J0FkZHMgcmV0dXJuIGNvZGUgaW5mbyB0byB4b25zaCBwcm9tcHQuJywKICAgIGxvbmdfZGVzY3JpcHRpb249X19kb2NfXywKICAgIGxpY2Vuc2U9J01JVCcsCiAgICB1cmw9J2h0dHA6Ly9naXRodWIuY29tL3NpZWNqZS94b250cmliLXByb21wdC1yZXQtY29kZS8nLAogICAgYXV0aG9yPSdDb2R5IFNjb3R0JywKICAgIHBhY2thZ2VzPVsneG9udHJpYiddLAogICAgcGFja2FnZV9kaXI9eyd4b250cmliJzogJ3hvbnRyaWInfSwKICAgIHBhY2thZ2VfZGF0YT17J3hvbnRyaWInOiBbJyoueHNoJ119LAogICAgemlwX3NhZmU9VHJ1ZSwKICAgIGluY2x1ZGVfcGFja2FnZV9kYXRhPUZhbHNlLAogICAgcGxhdGZvcm1zPSdhbnknLAogICAgY2xhc3NpZmllcnM9WwogICAgICAgICdFbnZpcm9ubWVudCA6OiBDb25zb2xlJywKICAgICAgICAnSW50ZW5kZWQgQXVkaWVuY2UgOjogRW5kIFVzZXJzL0Rlc2t0b3AnLAogICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNSVQgTGljZW5zZScsCiAgICAgICAgJ09wZXJhdGluZyBTeXN0ZW0gOjogT1MgSW5kZXBlbmRlbnQnLAo8fGZpbV9ob2xlfD4KICAgIF0KKQoKPHxmaW1fc3VmZml4fD4KICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uJywKICAgICAgICAnVG9waWMgOjogRGVza3RvcCBFbnZpcm9ubWVudCcsCiAgICAgICAgJ1RvcGljIDo6IFN5c3RlbSA6OiBTaGVsbHMnLAogICAgICAgICdUb3BpYyA6OiBTeXN0ZW0gOjogU3lzdGVtIFNoZWxscycsCjx8ZmltX2VuZHw+"]
["e71f7317979dbd70d308ba1cb9c808e17afa6af7-1","e71f7317979dbd70d308ba1cb9c808e17afa6af7","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKEMpIDIwMTggR2FydGggTi4gV2VsbHMKIwojIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKIiIiVGhpcyBtb2R1bGUgY29udGFpbnMgYSBjb2xsZWN0aW9uIG9mIGZ1bmN0aW9ucyByZWxhdGVkIHRvCmdlb2dyYXBoaWNhbCBkYXRhLgoKIiIiCgpmcm9tIC51dGlscyBpbXBvcnQgc29ydGVkX2J5X2tleSAgIyBub3FhCmltcG9ydCBwbG90bHkuZXhwcmVzcyBhcyBweAppbXBvcnQgZ2VvcGFuZGFzCmltcG9ydCBwYW5kYXMgYXMgcGQKZnJvbSBoYXZlcnNpbmUgaW1wb3J0IGhhdmVyc2luZSwgVW5pdApmcm9tIC5hbmFseXNpcyBpbXBvcnQgZmxvd19yYW5nZV9jb2xvdXJzCgoKZGVmIHJpdmVyc193aXRoX3N0YXRpb24oc3RhdGlvbnMpOgogICAgIiIiQ3JlYXRlZCBhIHNvcnRlZCBsaXN0IG9mIFJpdmVycyB3aXRoIHN0YXRpb25zIG9uIHRoZW0iIiIKICAgICMgSW5pdGlhbGlzZSByaXZlcnMgbGlzdAogICAgcml2ZXJzID0gW10KCiAgICAjIEFkZCByaXZlciB0byBsaXN0IGZyb20gc3RhdGlvbiwgaWYgcml2ZXIgaXMgbm90IHByZXNlbnQKICAgIGZvciBzdGF0aW9uIGluIHN0YXRpb25zOgogICAgICAgIGlmIHN0YXRpb24ucml2ZXIgaW4gcml2ZXJzOgogICAgICAgICAgICBwYXNzCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcml2ZXJzLmFwcGVuZChzdGF0aW9uLnJpdmVyKQoKICAgICMgU29ydCBsaXN0CiAgICByaXZlcnMuc29ydCgpCiAgICByZXR1cm4gcml2ZXJzCgpkZWYgc3RhdGlvbnNfYnlfcml2ZXIoc3RhdGlvbnMpOgogICAgIiIiQ3JlYXRlIGEgZGljdGlvbmFyeSBvZiBhbGwgUml2ZXJzIHdpdGggYSBjb3JyZXNwb25kaW5nIHN0YXRpb24gbGlzdCIiIgoKICAgICMgSW5pdGlhbGlzZSByaXZlciBkaWN0aW9uYXJ5CiAgICByaXZlcnNfZGljdCA9IHt9CgogICAgIyBDcmVhdGUgbGlzdCBvZiB2YWxpZCByaXZlcnMKICAgIHJpdmVycyA9IHJpdmVyc193aXRoX3N0YXRpb24oc3RhdGlvbnMpCgogICAgIyBDcmVhdGUgYSBzdGF0aW9uIGxpc3QgZm9yIGVhY2ggcml2ZXIKICAgIGZvciByaXZlciBpbiByaXZlcnM6CiAgICAgICAgcml2ZXJfbGlzdCA9IFtdCiAgICAgICAgCiAgICAgICAgIyBJZiB0aGUgcml2ZXIgdmFsdWUgb2YgYSBzdGF0aW9uIG1hdGNoZXMgdGhlIGN1cnJlbnQgcml2ZXIsIGFkZCBpdCB0byB0aGUgbGlzdAogICAgICAgIGNoZWNrZWRfc3RhdGlvbnMgPSBbXQogICAgICAgIGZvciBzdGF0aW9uIGluIHN0YXRpb25zOgogICAgICAgICAgICBpZiBzdGF0aW9uLm5hbWUgbm90IGluIGNoZWNrZWRfc3RhdGlvbnM6CiAgICAgICAgICAgICAgICBpZiBzdGF0aW9uLnJpdmVyID09IHJpdmVyOgogICAgICAgICAgICAgICAgICAgIHJpdmVyX2xpc3QuYXBwZW5kKHN0YXRpb24ubmFtZSkKICAgICAgICAgICAgICAgIGNoZWNrZWRfc3RhdGlvbnMuYXBwZW5kKHN0YXRpb24ubmFtZSkKICAgICAgICByaXZlcl9saXN0LnNvcnQoKQogICAgICAgIHJpdmVyc19kaWN0W3JpdmVyXSA9IHJpdmVyX2xpc3QKICAgIHJldHVybiByaXZlcnNfZGljdAoKZGVmIHJpdmVyc19ieV9zdGF0aW9uX251bWJlcihzdGF0aW9ucywgTik6CiAgICAiIiJDcmVhdGUgYSBsaXN0IG9mIHN0YXRpb25zIGFuZCBjb3JyZXNwb25kaW5nIG51bWJlciBvZiBtb25pdG9yaW5nIHN0YXRpb25zIiIiCgogICAgIyBJbml0aWFsaXNlIHN0YXRpb24gbGlzdCBhbmQgY29udGFpbmVyIGZvciBhbGwgcml2ZXJzCiAgICByaXZlcl9zdGF0aW9ucyA9IHN0YXRpb25zX2J5X3JpdmVyKHN0YXRpb25zKQogICAgcml2ZXJfbnVtYmVyID0gW10KCiAgICAjIEZpbmQgbnVtYmVyIGZvciBhbGwgcml2ZXJzCiAgICBmb3Igcml2ZXIgaW4gcml2ZXJfc3RhdGlvbnM6CgogICAgICAgICMgU3VtIG51bWJlciBvZiBzdGF0aW9ucyBvbiBlYWNoIHJpdmVyCiAgICAgICAgdG90YWwgPSAwCiAgICAgICAgZm9yIHN0YXRpb24gaW4gcml2ZXJfc3RhdGlvbnNbcml2ZXJdOgogICAgICAgICAgICB0b3RhbCArPSAxCgogICAgICAgICMgQ3JlYXRlIGEgY29udGFpbmVyIGZvciB0aGUgcml2ZXIgYW5kIGl0cyB2YWx1ZQogICAgICAgIHJpdmVyX3ZhbHVlID0gKHJpdmVyLCB0b3RhbCkKICAgICAgICByaXZlcl9udW1iZXIuYXBwZW5kKHJpdmVyX3ZhbHVlKQoKICAgICMgU29ydCB0b3RhbCBsaXN0IGJ5IG51bWJlciBpbiByZXZlcnNlIG9yZGVyCiAgICByaXZlcl9udW1fc29ydGVkID0gc29ydGVkKHJpdmVyX251bWJlciwga2V5PWxhbWJkYSB4OiB4WzFdLCByZXZlcnNlPVRydWUpCgoKICAgICMgSXRlcmF0ZSB0aHJvdWdoIGxpc3Qgb2Ygcml2ZXJzCiAgICBjb3VudCA9IDAKICAgIHRvcF9OX3JpdmVycyA9IFtdCgogICAgIyBCcmVhayB3aGVuIGRlc2lyZWQgdmFsdWUgaXMgcmVhY2hlZAogICAgd2hpbGUgY291bnQgPCBOIGFuZCBjb3VudCA8IGxlbihyaXZlcl9udW1fc29ydGVkKToKCiAgICAgICAgIyBBZGQgdG9wIHJpdmVyCiAgICAgICAgaWYgY291bnQgPT0gMDoKICAgICAgICAgICAgdG9wX05fcml2ZXJzLmFwcGVuZChyaXZlcl9udW1fc29ydGVkWzBdKQogICAgICAgICAgICBjb3VudCArPSAxCgogICAgICAgICMgQWRkIHJpdmVyIGFuZCB0byB0aGUgY291bnQgcHJvdmlkZWQgdGhlIGVudHJ5IGlzIHNtYWxsZXIgdGhhbiB0aGUgbGFzdAogICAgICAgIGVsaWYgKHJpdmVyX251bV9zb3J0ZWRbY291bnRdWzFdKSA8IChyaXZlcl9udW1fc29ydGVkW2NvdW50LTFdWzFdKToKICAgICAgICAgICAgdG9wX05fcml2ZXJzLmFwcGVuZChyaXZlcl9udW1fc29ydGVkW2NvdW50XSkKICAgICAgICAgICAgY291bnQgKz0gMQoKICAgICAgICAjIEFkZCByaXZlciB3aGVuIGl0IGhhcyB0aGUgc2FtZSBhcyB0aGUgcHJldmlvdXMgbnVtYmVyLCBidXQgYWRkIHRvIE4gYXMgd2VsbCB0byBwcmVzZXJ2ZSBkaXN0YW5jZQo8fGZpbV9ob2xlfD4KCiAgICAjIFJldHVybiBsaXN0CiAgICByZXR1cm4gdG9wX05fcml2ZXJzCgoKZGVmIG1hcF9zdGF0aW9uKHN0YXRpb25zKToKICAgICIiIkZ1bmN0aW9uIHRvIHBsb3QgdGhlIGxvY2F0aW9ucyBvZiB0aGUgcHVtcGluZyBzdGF0aW9ucyIiIgoKICAgICNDcmVhdGUgY29vcmRpYW50ZSBsaXN0cwogICAgY29vcmR4ID0gW10KICAgIGNvb3JkeSA9IFtdCiAgICBuYW1lID0gW10KCiAgICAjIFN0b3JlcyBjb29yZGluYXRlIGRhdGEgcGVyIHN0YXRpb24KICAgIGZvciBzdGF0aW9uIGluIHN0YXRpb25zOgogICAgICAgIGNvb3JkeC5hcHBlbmQoc3RhdGlvbi5jb29yZFswXSkKICAgICAgICBjb29yZHkuYXBwZW5kKHN0YXRpb24uY29vcmRbMV0pCiAgICAgICAgbmFtZS5hcHBlbmQoc3RhdGlvbi5uYW1lKQogICAgCiAgICAjR2V0IHRoZSByZXNwZWN0aXZlIGNvbG91cnMgZm9yIG91ciBzdGF0aW9uIGxpc3QKICAgIGNvbG91ciA9IGZsb3dfcmFuZ2VfY29sb3VycyhzdGF0aW9ucykKCiAgICAjIENyZWF0ZXMgYSBkYXRhZnJhbWUgb2YgbmFtZXMsIGNvb3JkaW5hdGVzIGFuZCBjb2xvdXJzCiAgICBkZiA9IHBkLkRhdGFGcmFtZSgKICAgIHsnQ2l0eSc6IG5hbWUsCiAgICAgJ0NvbG91cic6IGNvbG91ciwKICAgICAnTGF0aXR1ZGUnOiBjb29yZHgsCiAgICAgJ0xvbmdpdHVkZSc6IGNvb3JkeX0pCgogICAgIyBDb252ZXJ0IHRvIGdlby1kYXRhZnJhbWUgc3RvcmFnZSB0eXBlIGZvciBhY2Nlc3MKICAgIGdkZiA9IGdlb3BhbmRhcy5HZW9EYXRhRnJhbWUoZGYsIGdlb21ldHJ5PWdlb3BhbmRhcy5wb2ludHNfZnJvbV94eShkZi5Mb25naXR1ZGUsIGRmLkxhdGl0dWRlKSkKCiAgICAjIE91dHB1dCBkYXRhZnJhbWUKICAgIHJldHVybiBnZGYKCgpkZWYgcG9zaXRpb25fcGxvdHRlcihnZW9kZik6CiAgICAjIENyZWF0ZXMgYSBtYXAgaW1hZ2Ugd2l0aCBwb2ludHMgcGxvdHRlZCBhdCBjb29yZGlhbnRlcywgbGFiZWxsZWQgd2l0aCB0aGVpciBuYW1lCiAgICBmaWcgPSBweC5zY2F0dGVyX2dlbyhnZW9kZiwKICAgICAgICAgICAgICAgICAgICBsYXQ9Z2VvZGYuZ2VvbWV0cnkueSwKICAgICAgICAgICAgICAgICAgICBsb249Z2VvZGYuZ2VvbWV0cnkueCwKCiAgICAgICAgICAgICAgICAgICAgI1NldCB0aGUgbGFiZWwgYXMgc3RhdGlvbiBuYW1lLCBhbmQgY29sb3VyIGFzIHRoZSBhc3NpZ25lZCBzdGF0aW9uIGNvbG91cgogICAgICAgICAgICAgICAgICAgIGhvdmVyX25hbWU9IkNpdHkiLCBjb2xvcj0nQ29sb3VyJywgY29sb3JfZGlzY3JldGVfc2VxdWVuY2U9WyJnb2xkZW5yb2QiLCAiYmx1ZSIsICJyZWQiLCAiZ3JlZW4iXSApCgogICAgIyBGaXRzIHRoZSB2aWV3IGFyb3VuZCB0aGUgaW5wdXQgZGF0YQogICAgZmlnLnVwZGF0ZV9nZW9zKGZpdGJvdW5kcz0ibG9jYXRpb25zIikKCiAgICAjIE1vZGlmaWVzIHBsb3Qgd2luZG93IGFuZCBtYXJnaW5zCiAgICBmaWcudXBkYXRlX2xheW91dChoZWlnaHQ9MzAwLCBtYXJnaW49eyJyIjowLCJ0IjowLCJsIjowLCJiIjowfSkKCiAgICAjIFBsb3RzIHRoZSByZXN1bHQKICAgIGZpZy5zaG93KCkKCmRlZiBzdGF0aW9uc19ieV9kaXN0YW5jZShzdGF0aW9ucywgcCk6CiAgICAiIiJDcmVhdGUgYSBsaXN0IG9mIHN0YXRpb25zIG9yZGVyZWQgYnkgZGlzdGFuY2UgZnJvbSBhIHNwZWNpZmllZCBsb2NhdGlvbiIiIgoKICAgICMgQ3JlYXRlIGxpc3QKICAgIGRpc3RhbmNlcyA9IFtdCgogICAgIyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGZyb20gdGhlIHBvaW50IHRvIGVhY2ggc3RhdGlvbiB1c2UgdGhlIGhhdmVyc2luZSBsaWJyYXJ5IGZ1bmN0aW9uIGFuZCBhZGQgdG8gbGlzdAogICAgZm9yIHN0YXRpb24gaW4gc3RhdGlvbnM6CiAgICAgICAgZGlzdGFuY2UgPSBoYXZlcnNpbmUoc3RhdGlvbi5jb29yZCxwKQogICAgICAgIGRhdGEgPSAoc3RhdGlvbi5uYW1lLCBkaXN0YW5jZSkKICAgICAgICBpZiBkYXRhIGluIGRpc3RhbmNlczoKICAgICAgICAgICAgcGFzcwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGRpc3RhbmNlcy5hcHBlbmQoKHN0YXRpb24ubmFtZSxkaXN0YW5jZSkpCiAgICAKICAgICMgU29ydCBieSBkaXN0YW5jZSBhbmQgcmV0dXJuIHRoaXMgbGlzdAogICAgZGlzdGFuY2VzX3NvcnRlZCA9IHNvcnRlZF9ieV9rZXkoZGlzdGFuY2VzLDEpCiAgICByZXR1cm4gZGlzdGFuY2VzX3NvcnRlZAoKZGVmIHN0YXRpb25zX3dpdGhpbl9yYWRpdXMoc3RhdGlvbnMsIGNlbnRyZSwgcik6CiAgICAiIiJDcmVhdGUgYSBsaXN0IG9mIHN0YXRpb25zIHdpdGhpbiBhIGNlcnRhaW4gcmFkaXVzIG9mIGEgc3BlY2lmaWVkIGxvY2F0aW9uIiIiCgogICAgIyBDcmVhdGUgbGlzdAogICAgY2xvc2Vfc3RhdGlvbnMgPSBbXQoKICAgICMgQWRkcyB2YWxpZCBzdGF0aW9ucyB0byB0aGUgbGlzdAogICAgZm9yIHN0YXRpb24gaW4gc3RhdGlvbnM6CiAgICAgICAgaWYgc3RhdGlvbi5uYW1lIGluIGNsb3NlX3N0YXRpb25zOgogICAgICAgICAgICBwYXNzCiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyB3b3JrcyBvdXQgZGlzdGFuY2Ugb2Ygc3RhdGlvbiBmcm9tIGNlbnRyZQogICAgICAgICAgICBkaXN0YW5jZSA9IGhhdmVyc2luZShzdGF0aW9uLmNvb3JkLGNlbnRyZSkKICAgICAgICAgICAgaWYgZGlzdGFuY2UgPCByOgogICAgICAgICAgICAgICAgY2xvc2Vfc3RhdGlvbnMuYXBwZW5kKHN0YXRpb24ubmFtZSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHBhc3MKICAgIAogICAgIyBTb3J0IGJ5IGRpc3RhbmNlIGFuZCByZXR1cm4gdGhpcyBsaXN0CiAgICBzdGF0aW9uc19zb3J0ZWQgPSBzb3J0ZWQoY2xvc2Vfc3RhdGlvbnMpCiAgICByZXR1cm4gc3RhdGlvbnNfc29ydGVkCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZWxzZToKICAgICAgICAgICAgdG9wX05fcml2ZXJzLmFwcGVuZChyaXZlcl9udW1fc29ydGVkW2NvdW50XSkKICAgICAgICAgICAgY291bnQgKz0gMQogICAgICAgICAgICBOICs9IDEKPHxmaW1fZW5kfD4="]
["e71f7317979dbd70d308ba1cb9c808e17afa6af7-2","e71f7317979dbd70d308ba1cb9c808e17afa6af7","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKEMpIDIwMTggR2FydGggTi4gV2VsbHMKIwojIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKIiIiVGhpcyBtb2R1bGUgY29udGFpbnMgYSBjb2xsZWN0aW9uIG9mIGZ1bmN0aW9ucyByZWxhdGVkIHRvCmdlb2dyYXBoaWNhbCBkYXRhLgoKIiIiCgpmcm9tIC51dGlscyBpbXBvcnQgc29ydGVkX2J5X2tleSAgIyBub3FhCmltcG9ydCBwbG90bHkuZXhwcmVzcyBhcyBweAppbXBvcnQgZ2VvcGFuZGFzCmltcG9ydCBwYW5kYXMgYXMgcGQKZnJvbSBoYXZlcnNpbmUgaW1wb3J0IGhhdmVyc2luZSwgVW5pdApmcm9tIC5hbmFseXNpcyBpbXBvcnQgZmxvd19yYW5nZV9jb2xvdXJzCgoKZGVmIHJpdmVyc193aXRoX3N0YXRpb24oc3RhdGlvbnMpOgogICAgIiIiQ3JlYXRlZCBhIHNvcnRlZCBsaXN0IG9mIFJpdmVycyB3aXRoIHN0YXRpb25zIG9uIHRoZW0iIiIKICAgICMgSW5pdGlhbGlzZSByaXZlcnMgbGlzdAogICAgcml2ZXJzID0gW10KCiAgICAjIEFkZCByaXZlciB0byBsaXN0IGZyb20gc3RhdGlvbiwgaWYgcml2ZXIgaXMgbm90IHByZXNlbnQKICAgIGZvciBzdGF0aW9uIGluIHN0YXRpb25zOgogICAgICAgIGlmIHN0YXRpb24ucml2ZXIgaW4gcml2ZXJzOgogICAgICAgICAgICBwYXNzCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcml2ZXJzLmFwcGVuZChzdGF0aW9uLnJpdmVyKQoKICAgICMgU29ydCBsaXN0CiAgICByaXZlcnMuc29ydCgpCiAgICByZXR1cm4gcml2ZXJzCgpkZWYgc3RhdGlvbnNfYnlfcml2ZXIoc3RhdGlvbnMpOgogICAgIiIiQ3JlYXRlIGEgZGljdGlvbmFyeSBvZiBhbGwgUml2ZXJzIHdpdGggYSBjb3JyZXNwb25kaW5nIHN0YXRpb24gbGlzdCIiIgoKICAgICMgSW5pdGlhbGlzZSByaXZlciBkaWN0aW9uYXJ5CiAgICByaXZlcnNfZGljdCA9IHt9CgogICAgIyBDcmVhdGUgbGlzdCBvZiB2YWxpZCByaXZlcnMKICAgIHJpdmVycyA9IHJpdmVyc193aXRoX3N0YXRpb24oc3RhdGlvbnMpCgogICAgIyBDcmVhdGUgYSBzdGF0aW9uIGxpc3QgZm9yIGVhY2ggcml2ZXIKICAgIGZvciByaXZlciBpbiByaXZlcnM6CiAgICAgICAgcml2ZXJfbGlzdCA9IFtdCiAgICAgICAgCiAgICAgICAgIyBJZiB0aGUgcml2ZXIgdmFsdWUgb2YgYSBzdGF0aW9uIG1hdGNoZXMgdGhlIGN1cnJlbnQgcml2ZXIsIGFkZCBpdCB0byB0aGUgbGlzdAogICAgICAgIGNoZWNrZWRfc3RhdGlvbnMgPSBbXQogICAgICAgIGZvciBzdGF0aW9uIGluIHN0YXRpb25zOgogICAgICAgICAgICBpZiBzdGF0aW9uLm5hbWUgbm90IGluIGNoZWNrZWRfc3RhdGlvbnM6CiAgICAgICAgICAgICAgICBpZiBzdGF0aW9uLnJpdmVyID09IHJpdmVyOgogICAgICAgICAgICAgICAgICAgIHJpdmVyX2xpc3QuYXBwZW5kKHN0YXRpb24ubmFtZSkKICAgICAgICAgICAgICAgIGNoZWNrZWRfc3RhdGlvbnMuYXBwZW5kKHN0YXRpb24ubmFtZSkKICAgICAgICByaXZlcl9saXN0LnNvcnQoKQogICAgICAgIHJpdmVyc19kaWN0W3JpdmVyXSA9IHJpdmVyX2xpc3QKICAgIHJldHVybiByaXZlcnNfZGljdAoKZGVmIHJpdmVyc19ieV9zdGF0aW9uX251bWJlcihzdGF0aW9ucywgTik6CiAgICAiIiJDcmVhdGUgYSBsaXN0IG9mIHN0YXRpb25zIGFuZCBjb3JyZXNwb25kaW5nIG51bWJlciBvZiBtb25pdG9yaW5nIHN0YXRpb25zIiIiCgogICAgIyBJbml0aWFsaXNlIHN0YXRpb24gbGlzdCBhbmQgY29udGFpbmVyIGZvciBhbGwgcml2ZXJzCiAgICByaXZlcl9zdGF0aW9ucyA9IHN0YXRpb25zX2J5X3JpdmVyKHN0YXRpb25zKQogICAgcml2ZXJfbnVtYmVyID0gW10KCiAgICAjIEZpbmQgbnVtYmVyIGZvciBhbGwgcml2ZXJzCiAgICBmb3Igcml2ZXIgaW4gcml2ZXJfc3RhdGlvbnM6CgogICAgICAgICMgU3VtIG51bWJlciBvZiBzdGF0aW9ucyBvbiBlYWNoIHJpdmVyCiAgICAgICAgdG90YWwgPSAwCjx8ZmltX2hvbGV8PgogICAgICAgIHJpdmVyX3ZhbHVlID0gKHJpdmVyLCB0b3RhbCkKICAgICAgICByaXZlcl9udW1iZXIuYXBwZW5kKHJpdmVyX3ZhbHVlKQoKICAgICMgU29ydCB0b3RhbCBsaXN0IGJ5IG51bWJlciBpbiByZXZlcnNlIG9yZGVyCiAgICByaXZlcl9udW1fc29ydGVkID0gc29ydGVkKHJpdmVyX251bWJlciwga2V5PWxhbWJkYSB4OiB4WzFdLCByZXZlcnNlPVRydWUpCgoKICAgICMgSXRlcmF0ZSB0aHJvdWdoIGxpc3Qgb2Ygcml2ZXJzCiAgICBjb3VudCA9IDAKICAgIHRvcF9OX3JpdmVycyA9IFtdCgogICAgIyBCcmVhayB3aGVuIGRlc2lyZWQgdmFsdWUgaXMgcmVhY2hlZAogICAgd2hpbGUgY291bnQgPCBOIGFuZCBjb3VudCA8IGxlbihyaXZlcl9udW1fc29ydGVkKToKCiAgICAgICAgIyBBZGQgdG9wIHJpdmVyCiAgICAgICAgaWYgY291bnQgPT0gMDoKICAgICAgICAgICAgdG9wX05fcml2ZXJzLmFwcGVuZChyaXZlcl9udW1fc29ydGVkWzBdKQogICAgICAgICAgICBjb3VudCArPSAxCgogICAgICAgICMgQWRkIHJpdmVyIGFuZCB0byB0aGUgY291bnQgcHJvdmlkZWQgdGhlIGVudHJ5IGlzIHNtYWxsZXIgdGhhbiB0aGUgbGFzdAogICAgICAgIGVsaWYgKHJpdmVyX251bV9zb3J0ZWRbY291bnRdWzFdKSA8IChyaXZlcl9udW1fc29ydGVkW2NvdW50LTFdWzFdKToKICAgICAgICAgICAgdG9wX05fcml2ZXJzLmFwcGVuZChyaXZlcl9udW1fc29ydGVkW2NvdW50XSkKICAgICAgICAgICAgY291bnQgKz0gMQoKICAgICAgICAjIEFkZCByaXZlciB3aGVuIGl0IGhhcyB0aGUgc2FtZSBhcyB0aGUgcHJldmlvdXMgbnVtYmVyLCBidXQgYWRkIHRvIE4gYXMgd2VsbCB0byBwcmVzZXJ2ZSBkaXN0YW5jZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRvcF9OX3JpdmVycy5hcHBlbmQocml2ZXJfbnVtX3NvcnRlZFtjb3VudF0pCiAgICAgICAgICAgIGNvdW50ICs9IDEKICAgICAgICAgICAgTiArPSAxCgogICAgIyBSZXR1cm4gbGlzdAogICAgcmV0dXJuIHRvcF9OX3JpdmVycwoKCmRlZiBtYXBfc3RhdGlvbihzdGF0aW9ucyk6CiAgICAiIiJGdW5jdGlvbiB0byBwbG90IHRoZSBsb2NhdGlvbnMgb2YgdGhlIHB1bXBpbmcgc3RhdGlvbnMiIiIKCiAgICAjQ3JlYXRlIGNvb3JkaWFudGUgbGlzdHMKICAgIGNvb3JkeCA9IFtdCiAgICBjb29yZHkgPSBbXQogICAgbmFtZSA9IFtdCgogICAgIyBTdG9yZXMgY29vcmRpbmF0ZSBkYXRhIHBlciBzdGF0aW9uCiAgICBmb3Igc3RhdGlvbiBpbiBzdGF0aW9uczoKICAgICAgICBjb29yZHguYXBwZW5kKHN0YXRpb24uY29vcmRbMF0pCiAgICAgICAgY29vcmR5LmFwcGVuZChzdGF0aW9uLmNvb3JkWzFdKQogICAgICAgIG5hbWUuYXBwZW5kKHN0YXRpb24ubmFtZSkKICAgIAogICAgI0dldCB0aGUgcmVzcGVjdGl2ZSBjb2xvdXJzIGZvciBvdXIgc3RhdGlvbiBsaXN0CiAgICBjb2xvdXIgPSBmbG93X3JhbmdlX2NvbG91cnMoc3RhdGlvbnMpCgogICAgIyBDcmVhdGVzIGEgZGF0YWZyYW1lIG9mIG5hbWVzLCBjb29yZGluYXRlcyBhbmQgY29sb3VycwogICAgZGYgPSBwZC5EYXRhRnJhbWUoCiAgICB7J0NpdHknOiBuYW1lLAogICAgICdDb2xvdXInOiBjb2xvdXIsCiAgICAgJ0xhdGl0dWRlJzogY29vcmR4LAogICAgICdMb25naXR1ZGUnOiBjb29yZHl9KQoKICAgICMgQ29udmVydCB0byBnZW8tZGF0YWZyYW1lIHN0b3JhZ2UgdHlwZSBmb3IgYWNjZXNzCiAgICBnZGYgPSBnZW9wYW5kYXMuR2VvRGF0YUZyYW1lKGRmLCBnZW9tZXRyeT1nZW9wYW5kYXMucG9pbnRzX2Zyb21feHkoZGYuTG9uZ2l0dWRlLCBkZi5MYXRpdHVkZSkpCgogICAgIyBPdXRwdXQgZGF0YWZyYW1lCiAgICByZXR1cm4gZ2RmCgoKZGVmIHBvc2l0aW9uX3Bsb3R0ZXIoZ2VvZGYpOgogICAgIyBDcmVhdGVzIGEgbWFwIGltYWdlIHdpdGggcG9pbnRzIHBsb3R0ZWQgYXQgY29vcmRpYW50ZXMsIGxhYmVsbGVkIHdpdGggdGhlaXIgbmFtZQogICAgZmlnID0gcHguc2NhdHRlcl9nZW8oZ2VvZGYsCiAgICAgICAgICAgICAgICAgICAgbGF0PWdlb2RmLmdlb21ldHJ5LnksCiAgICAgICAgICAgICAgICAgICAgbG9uPWdlb2RmLmdlb21ldHJ5LngsCgogICAgICAgICAgICAgICAgICAgICNTZXQgdGhlIGxhYmVsIGFzIHN0YXRpb24gbmFtZSwgYW5kIGNvbG91ciBhcyB0aGUgYXNzaWduZWQgc3RhdGlvbiBjb2xvdXIKICAgICAgICAgICAgICAgICAgICBob3Zlcl9uYW1lPSJDaXR5IiwgY29sb3I9J0NvbG91cicsIGNvbG9yX2Rpc2NyZXRlX3NlcXVlbmNlPVsiZ29sZGVucm9kIiwgImJsdWUiLCAicmVkIiwgImdyZWVuIl0gKQoKICAgICMgRml0cyB0aGUgdmlldyBhcm91bmQgdGhlIGlucHV0IGRhdGEKICAgIGZpZy51cGRhdGVfZ2VvcyhmaXRib3VuZHM9ImxvY2F0aW9ucyIpCgogICAgIyBNb2RpZmllcyBwbG90IHdpbmRvdyBhbmQgbWFyZ2lucwogICAgZmlnLnVwZGF0ZV9sYXlvdXQoaGVpZ2h0PTMwMCwgbWFyZ2luPXsiciI6MCwidCI6MCwibCI6MCwiYiI6MH0pCgogICAgIyBQbG90cyB0aGUgcmVzdWx0CiAgICBmaWcuc2hvdygpCgpkZWYgc3RhdGlvbnNfYnlfZGlzdGFuY2Uoc3RhdGlvbnMsIHApOgogICAgIiIiQ3JlYXRlIGEgbGlzdCBvZiBzdGF0aW9ucyBvcmRlcmVkIGJ5IGRpc3RhbmNlIGZyb20gYSBzcGVjaWZpZWQgbG9jYXRpb24iIiIKCiAgICAjIENyZWF0ZSBsaXN0CiAgICBkaXN0YW5jZXMgPSBbXQoKICAgICMgQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBwb2ludCB0byBlYWNoIHN0YXRpb24gdXNlIHRoZSBoYXZlcnNpbmUgbGlicmFyeSBmdW5jdGlvbiBhbmQgYWRkIHRvIGxpc3QKICAgIGZvciBzdGF0aW9uIGluIHN0YXRpb25zOgogICAgICAgIGRpc3RhbmNlID0gaGF2ZXJzaW5lKHN0YXRpb24uY29vcmQscCkKICAgICAgICBkYXRhID0gKHN0YXRpb24ubmFtZSwgZGlzdGFuY2UpCiAgICAgICAgaWYgZGF0YSBpbiBkaXN0YW5jZXM6CiAgICAgICAgICAgIHBhc3MKICAgICAgICBlbHNlOgogICAgICAgICAgICBkaXN0YW5jZXMuYXBwZW5kKChzdGF0aW9uLm5hbWUsZGlzdGFuY2UpKQogICAgCiAgICAjIFNvcnQgYnkgZGlzdGFuY2UgYW5kIHJldHVybiB0aGlzIGxpc3QKICAgIGRpc3RhbmNlc19zb3J0ZWQgPSBzb3J0ZWRfYnlfa2V5KGRpc3RhbmNlcywxKQogICAgcmV0dXJuIGRpc3RhbmNlc19zb3J0ZWQKCmRlZiBzdGF0aW9uc193aXRoaW5fcmFkaXVzKHN0YXRpb25zLCBjZW50cmUsIHIpOgogICAgIiIiQ3JlYXRlIGEgbGlzdCBvZiBzdGF0aW9ucyB3aXRoaW4gYSBjZXJ0YWluIHJhZGl1cyBvZiBhIHNwZWNpZmllZCBsb2NhdGlvbiIiIgoKICAgICMgQ3JlYXRlIGxpc3QKICAgIGNsb3NlX3N0YXRpb25zID0gW10KCiAgICAjIEFkZHMgdmFsaWQgc3RhdGlvbnMgdG8gdGhlIGxpc3QKICAgIGZvciBzdGF0aW9uIGluIHN0YXRpb25zOgogICAgICAgIGlmIHN0YXRpb24ubmFtZSBpbiBjbG9zZV9zdGF0aW9uczoKICAgICAgICAgICAgcGFzcwogICAgICAgIGVsc2U6CiAgICAgICAgICAgICMgd29ya3Mgb3V0IGRpc3RhbmNlIG9mIHN0YXRpb24gZnJvbSBjZW50cmUKICAgICAgICAgICAgZGlzdGFuY2UgPSBoYXZlcnNpbmUoc3RhdGlvbi5jb29yZCxjZW50cmUpCiAgICAgICAgICAgIGlmIGRpc3RhbmNlIDwgcjoKICAgICAgICAgICAgICAgIGNsb3NlX3N0YXRpb25zLmFwcGVuZChzdGF0aW9uLm5hbWUpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwYXNzCiAgICAKICAgICMgU29ydCBieSBkaXN0YW5jZSBhbmQgcmV0dXJuIHRoaXMgbGlzdAogICAgc3RhdGlvbnNfc29ydGVkID0gc29ydGVkKGNsb3NlX3N0YXRpb25zKQogICAgcmV0dXJuIHN0YXRpb25zX3NvcnRlZAo8fGZpbV9zdWZmaXh8PgogICAgICAgIGZvciBzdGF0aW9uIGluIHJpdmVyX3N0YXRpb25zW3JpdmVyXToKICAgICAgICAgICAgdG90YWwgKz0gMQoKICAgICAgICAjIENyZWF0ZSBhIGNvbnRhaW5lciBmb3IgdGhlIHJpdmVyIGFuZCBpdHMgdmFsdWUKPHxmaW1fZW5kfD4="]
["e71f7317979dbd70d308ba1cb9c808e17afa6af7-3","e71f7317979dbd70d308ba1cb9c808e17afa6af7","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKEMpIDIwMTggR2FydGggTi4gV2VsbHMKIwojIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKIiIiVGhpcyBtb2R1bGUgY29udGFpbnMgYSBjb2xsZWN0aW9uIG9mIGZ1bmN0aW9ucyByZWxhdGVkIHRvCmdlb2dyYXBoaWNhbCBkYXRhLgoKIiIiCgpmcm9tIC51dGlscyBpbXBvcnQgc29ydGVkX2J5X2tleSAgIyBub3FhCmltcG9ydCBwbG90bHkuZXhwcmVzcyBhcyBweAppbXBvcnQgZ2VvcGFuZGFzCmltcG9ydCBwYW5kYXMgYXMgcGQKZnJvbSBoYXZlcnNpbmUgaW1wb3J0IGhhdmVyc2luZSwgVW5pdApmcm9tIC5hbmFseXNpcyBpbXBvcnQgZmxvd19yYW5nZV9jb2xvdXJzCgoKZGVmIHJpdmVyc193aXRoX3N0YXRpb24oc3RhdGlvbnMpOgogICAgIiIiQ3JlYXRlZCBhIHNvcnRlZCBsaXN0IG9mIFJpdmVycyB3aXRoIHN0YXRpb25zIG9uIHRoZW0iIiIKICAgICMgSW5pdGlhbGlzZSByaXZlcnMgbGlzdAogICAgcml2ZXJzID0gW10KCiAgICAjIEFkZCByaXZlciB0byBsaXN0IGZyb20gc3RhdGlvbiwgaWYgcml2ZXIgaXMgbm90IHByZXNlbnQKICAgIGZvciBzdGF0aW9uIGluIHN0YXRpb25zOgogICAgICAgIGlmIHN0YXRpb24ucml2ZXIgaW4gcml2ZXJzOgogICAgICAgICAgICBwYXNzCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcml2ZXJzLmFwcGVuZChzdGF0aW9uLnJpdmVyKQoKICAgICMgU29ydCBsaXN0CiAgICByaXZlcnMuc29ydCgpCiAgICByZXR1cm4gcml2ZXJzCgpkZWYgc3RhdGlvbnNfYnlfcml2ZXIoc3RhdGlvbnMpOgogICAgIiIiQ3JlYXRlIGEgZGljdGlvbmFyeSBvZiBhbGwgUml2ZXJzIHdpdGggYSBjb3JyZXNwb25kaW5nIHN0YXRpb24gbGlzdCIiIgoKICAgICMgSW5pdGlhbGlzZSByaXZlciBkaWN0aW9uYXJ5CiAgICByaXZlcnNfZGljdCA9IHt9CgogICAgIyBDcmVhdGUgbGlzdCBvZiB2YWxpZCByaXZlcnMKICAgIHJpdmVycyA9IHJpdmVyc193aXRoX3N0YXRpb24oc3RhdGlvbnMpCgogICAgIyBDcmVhdGUgYSBzdGF0aW9uIGxpc3QgZm9yIGVhY2ggcml2ZXIKICAgIGZvciByaXZlciBpbiByaXZlcnM6CiAgICAgICAgcml2ZXJfbGlzdCA9IFtdCiAgICAgICAgCiAgICAgICAgIyBJZiB0aGUgcml2ZXIgdmFsdWUgb2YgYSBzdGF0aW9uIG1hdGNoZXMgdGhlIGN1cnJlbnQgcml2ZXIsIGFkZCBpdCB0byB0aGUgbGlzdAogICAgICAgIGNoZWNrZWRfc3RhdGlvbnMgPSBbXQogICAgICAgIGZvciBzdGF0aW9uIGluIHN0YXRpb25zOgogICAgICAgICAgICBpZiBzdGF0aW9uLm5hbWUgbm90IGluIGNoZWNrZWRfc3RhdGlvbnM6CiAgICAgICAgICAgICAgICBpZiBzdGF0aW9uLnJpdmVyID09IHJpdmVyOgogICAgICAgICAgICAgICAgICAgIHJpdmVyX2xpc3QuYXBwZW5kKHN0YXRpb24ubmFtZSkKICAgICAgICAgICAgICAgIGNoZWNrZWRfc3RhdGlvbnMuYXBwZW5kKHN0YXRpb24ubmFtZSkKICAgICAgICByaXZlcl9saXN0LnNvcnQoKQogICAgICAgIHJpdmVyc19kaWN0W3JpdmVyXSA9IHJpdmVyX2xpc3QKICAgIHJldHVybiByaXZlcnNfZGljdAoKZGVmIHJpdmVyc19ieV9zdGF0aW9uX251bWJlcihzdGF0aW9ucywgTik6CiAgICAiIiJDcmVhdGUgYSBsaXN0IG9mIHN0YXRpb25zIGFuZCBjb3JyZXNwb25kaW5nIG51bWJlciBvZiBtb25pdG9yaW5nIHN0YXRpb25zIiIiCgogICAgIyBJbml0aWFsaXNlIHN0YXRpb24gbGlzdCBhbmQgY29udGFpbmVyIGZvciBhbGwgcml2ZXJzCiAgICByaXZlcl9zdGF0aW9ucyA9IHN0YXRpb25zX2J5X3JpdmVyKHN0YXRpb25zKQogICAgcml2ZXJfbnVtYmVyID0gW10KCiAgICAjIEZpbmQgbnVtYmVyIGZvciBhbGwgcml2ZXJzCiAgICBmb3Igcml2ZXIgaW4gcml2ZXJfc3RhdGlvbnM6CgogICAgICAgICMgU3VtIG51bWJlciBvZiBzdGF0aW9ucyBvbiBlYWNoIHJpdmVyCiAgICAgICAgdG90YWwgPSAwCiAgICAgICAgZm9yIHN0YXRpb24gaW4gcml2ZXJfc3RhdGlvbnNbcml2ZXJdOgogICAgICAgICAgICB0b3RhbCArPSAxCgogICAgICAgICMgQ3JlYXRlIGEgY29udGFpbmVyIGZvciB0aGUgcml2ZXIgYW5kIGl0cyB2YWx1ZQogICAgICAgIHJpdmVyX3ZhbHVlID0gKHJpdmVyLCB0b3RhbCkKICAgICAgICByaXZlcl9udW1iZXIuYXBwZW5kKHJpdmVyX3ZhbHVlKQoKICAgICMgU29ydCB0b3RhbCBsaXN0IGJ5IG51bWJlciBpbiByZXZlcnNlIG9yZGVyCiAgICByaXZlcl9udW1fc29ydGVkID0gc29ydGVkKHJpdmVyX251bWJlciwga2V5PWxhbWJkYSB4OiB4WzFdLCByZXZlcnNlPVRydWUpCgoKICAgICMgSXRlcmF0ZSB0aHJvdWdoIGxpc3Qgb2Ygcml2ZXJzCiAgICBjb3VudCA9IDAKICAgIHRvcF9OX3JpdmVycyA9IFtdCgogICAgIyBCcmVhayB3aGVuIGRlc2lyZWQgdmFsdWUgaXMgcmVhY2hlZAogICAgd2hpbGUgY291bnQgPCBOIGFuZCBjb3VudCA8IGxlbihyaXZlcl9udW1fc29ydGVkKToKCiAgICAgICAgIyBBZGQgdG9wIHJpdmVyCiAgICAgICAgaWYgY291bnQgPT0gMDoKICAgICAgICAgICAgdG9wX05fcml2ZXJzLmFwcGVuZChyaXZlcl9udW1fc29ydGVkWzBdKQogICAgICAgICAgICBjb3VudCArPSAxCgogICAgICAgICMgQWRkIHJpdmVyIGFuZCB0byB0aGUgY291bnQgcHJvdmlkZWQgdGhlIGVudHJ5IGlzIHNtYWxsZXIgdGhhbiB0aGUgbGFzdAogICAgICAgIGVsaWYgKHJpdmVyX251bV9zb3J0ZWRbY291bnRdWzFdKSA8IChyaXZlcl9udW1fc29ydGVkW2NvdW50LTFdWzFdKToKICAgICAgICAgICAgdG9wX05fcml2ZXJzLmFwcGVuZChyaXZlcl9udW1fc29ydGVkW2NvdW50XSkKICAgICAgICAgICAgY291bnQgKz0gMQoKICAgICAgICAjIEFkZCByaXZlciB3aGVuIGl0IGhhcyB0aGUgc2FtZSBhcyB0aGUgcHJldmlvdXMgbnVtYmVyLCBidXQgYWRkIHRvIE4gYXMgd2VsbCB0byBwcmVzZXJ2ZSBkaXN0YW5jZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRvcF9OX3JpdmVycy5hcHBlbmQocml2ZXJfbnVtX3NvcnRlZFtjb3VudF0pCiAgICAgICAgICAgIGNvdW50ICs9IDEKICAgICAgICAgICAgTiArPSAxCgogICAgIyBSZXR1cm4gbGlzdAogICAgcmV0dXJuIHRvcF9OX3JpdmVycwoKCmRlZiBtYXBfc3RhdGlvbihzdGF0aW9ucyk6CiAgICAiIiJGdW5jdGlvbiB0byBwbG90IHRoZSBsb2NhdGlvbnMgb2YgdGhlIHB1bXBpbmcgc3RhdGlvbnMiIiIKCiAgICAjQ3JlYXRlIGNvb3JkaWFudGUgbGlzdHMKICAgIGNvb3JkeCA9IFtdCiAgICBjb29yZHkgPSBbXQogICAgbmFtZSA9IFtdCgogICAgIyBTdG9yZXMgY29vcmRpbmF0ZSBkYXRhIHBlciBzdGF0aW9uCiAgICBmb3Igc3RhdGlvbiBpbiBzdGF0aW9uczoKICAgICAgICBjb29yZHguYXBwZW5kKHN0YXRpb24uY29vcmRbMF0pCiAgICAgICAgY29vcmR5LmFwcGVuZChzdGF0aW9uLmNvb3JkWzFdKQogICAgICAgIG5hbWUuYXBwZW5kKHN0YXRpb24ubmFtZSkKICAgIAogICAgI0dldCB0aGUgcmVzcGVjdGl2ZSBjb2xvdXJzIGZvciBvdXIgc3RhdGlvbiBsaXN0CiAgICBjb2xvdXIgPSBmbG93X3JhbmdlX2NvbG91cnMoc3RhdGlvbnMpCgogICAgIyBDcmVhdGVzIGEgZGF0YWZyYW1lIG9mIG5hbWVzLCBjb29yZGluYXRlcyBhbmQgY29sb3VycwogICAgZGYgPSBwZC5EYXRhRnJhbWUoCiAgICB7J0NpdHknOiBuYW1lLAogICAgICdDb2xvdXInOiBjb2xvdXIsCiAgICAgJ0xhdGl0dWRlJzogY29vcmR4LAogICAgICdMb25naXR1ZGUnOiBjb29yZHl9KQoKICAgICMgQ29udmVydCB0byBnZW8tZGF0YWZyYW1lIHN0b3JhZ2UgdHlwZSBmb3IgYWNjZXNzCiAgICBnZGYgPSBnZW9wYW5kYXMuR2VvRGF0YUZyYW1lKGRmLCBnZW9tZXRyeT1nZW9wYW5kYXMucG9pbnRzX2Zyb21feHkoZGYuTG9uZ2l0dWRlLCBkZi5MYXRpdHVkZSkpCgogICAgIyBPdXRwdXQgZGF0YWZyYW1lCiAgICByZXR1cm4gZ2RmCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpkZWYgcG9zaXRpb25fcGxvdHRlcihnZW9kZik6CiAgICAjIENyZWF0ZXMgYSBtYXAgaW1hZ2Ugd2l0aCBwb2ludHMgcGxvdHRlZCBhdCBjb29yZGlhbnRlcywgbGFiZWxsZWQgd2l0aCB0aGVpciBuYW1lCiAgICBmaWcgPSBweC5zY2F0dGVyX2dlbyhnZW9kZiwKPHxmaW1fZW5kfD4="]
["e71f7317979dbd70d308ba1cb9c808e17afa6af7-4","e71f7317979dbd70d308ba1cb9c808e17afa6af7","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKEMpIDIwMTggR2FydGggTi4gV2VsbHMKIwojIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKIiIiVGhpcyBtb2R1bGUgY29udGFpbnMgYSBjb2xsZWN0aW9uIG9mIGZ1bmN0aW9ucyByZWxhdGVkIHRvCmdlb2dyYXBoaWNhbCBkYXRhLgoKIiIiCgpmcm9tIC51dGlscyBpbXBvcnQgc29ydGVkX2J5X2tleSAgIyBub3FhCmltcG9ydCBwbG90bHkuZXhwcmVzcyBhcyBweAppbXBvcnQgZ2VvcGFuZGFzCmltcG9ydCBwYW5kYXMgYXMgcGQKZnJvbSBoYXZlcnNpbmUgaW1wb3J0IGhhdmVyc2luZSwgVW5pdApmcm9tIC5hbmFseXNpcyBpbXBvcnQgZmxvd19yYW5nZV9jb2xvdXJzCgoKZGVmIHJpdmVyc193aXRoX3N0YXRpb24oc3RhdGlvbnMpOgogICAgIiIiQ3JlYXRlZCBhIHNvcnRlZCBsaXN0IG9mIFJpdmVycyB3aXRoIHN0YXRpb25zIG9uIHRoZW0iIiIKICAgICMgSW5pdGlhbGlzZSByaXZlcnMgbGlzdAogICAgcml2ZXJzID0gW10KCiAgICAjIEFkZCByaXZlciB0byBsaXN0IGZyb20gc3RhdGlvbiwgaWYgcml2ZXIgaXMgbm90IHByZXNlbnQKICAgIGZvciBzdGF0aW9uIGluIHN0YXRpb25zOgogICAgICAgIGlmIHN0YXRpb24ucml2ZXIgaW4gcml2ZXJzOgogICAgICAgICAgICBwYXNzCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcml2ZXJzLmFwcGVuZChzdGF0aW9uLnJpdmVyKQoKICAgICMgU29ydCBsaXN0CiAgICByaXZlcnMuc29ydCgpCiAgICByZXR1cm4gcml2ZXJzCgpkZWYgc3RhdGlvbnNfYnlfcml2ZXIoc3RhdGlvbnMpOgogICAgIiIiQ3JlYXRlIGEgZGljdGlvbmFyeSBvZiBhbGwgUml2ZXJzIHdpdGggYSBjb3JyZXNwb25kaW5nIHN0YXRpb24gbGlzdCIiIgoKICAgICMgSW5pdGlhbGlzZSByaXZlciBkaWN0aW9uYXJ5CiAgICByaXZlcnNfZGljdCA9IHt9CgogICAgIyBDcmVhdGUgbGlzdCBvZiB2YWxpZCByaXZlcnMKICAgIHJpdmVycyA9IHJpdmVyc193aXRoX3N0YXRpb24oc3RhdGlvbnMpCgogICAgIyBDcmVhdGUgYSBzdGF0aW9uIGxpc3QgZm9yIGVhY2ggcml2ZXIKICAgIGZvciByaXZlciBpbiByaXZlcnM6CiAgICAgICAgcml2ZXJfbGlzdCA9IFtdCiAgICAgICAgCiAgICAgICAgIyBJZiB0aGUgcml2ZXIgdmFsdWUgb2YgYSBzdGF0aW9uIG1hdGNoZXMgdGhlIGN1cnJlbnQgcml2ZXIsIGFkZCBpdCB0byB0aGUgbGlzdAogICAgICAgIGNoZWNrZWRfc3RhdGlvbnMgPSBbXQogICAgICAgIGZvciBzdGF0aW9uIGluIHN0YXRpb25zOgogICAgICAgICAgICBpZiBzdGF0aW9uLm5hbWUgbm90IGluIGNoZWNrZWRfc3RhdGlvbnM6CiAgICAgICAgICAgICAgICBpZiBzdGF0aW9uLnJpdmVyID09IHJpdmVyOgogICAgICAgICAgICAgICAgICAgIHJpdmVyX2xpc3QuYXBwZW5kKHN0YXRpb24ubmFtZSkKICAgICAgICAgICAgICAgIGNoZWNrZWRfc3RhdGlvbnMuYXBwZW5kKHN0YXRpb24ubmFtZSkKICAgICAgICByaXZlcl9saXN0LnNvcnQoKQogICAgICAgIHJpdmVyc19kaWN0W3JpdmVyXSA9IHJpdmVyX2xpc3QKICAgIHJldHVybiByaXZlcnNfZGljdAoKZGVmIHJpdmVyc19ieV9zdGF0aW9uX251bWJlcihzdGF0aW9ucywgTik6CiAgICAiIiJDcmVhdGUgYSBsaXN0IG9mIHN0YXRpb25zIGFuZCBjb3JyZXNwb25kaW5nIG51bWJlciBvZiBtb25pdG9yaW5nIHN0YXRpb25zIiIiCgogICAgIyBJbml0aWFsaXNlIHN0YXRpb24gbGlzdCBhbmQgY29udGFpbmVyIGZvciBhbGwgcml2ZXJzCiAgICByaXZlcl9zdGF0aW9ucyA9IHN0YXRpb25zX2J5X3JpdmVyKHN0YXRpb25zKQogICAgcml2ZXJfbnVtYmVyID0gW10KCiAgICAjIEZpbmQgbnVtYmVyIGZvciBhbGwgcml2ZXJzCiAgICBmb3Igcml2ZXIgaW4gcml2ZXJfc3RhdGlvbnM6CgogICAgICAgICMgU3VtIG51bWJlciBvZiBzdGF0aW9ucyBvbiBlYWNoIHJpdmVyCiAgICAgICAgdG90YWwgPSAwCiAgICAgICAgZm9yIHN0YXRpb24gaW4gcml2ZXJfc3RhdGlvbnNbcml2ZXJdOgogICAgICAgICAgICB0b3RhbCArPSAxCgogICAgICAgICMgQ3JlYXRlIGEgY29udGFpbmVyIGZvciB0aGUgcml2ZXIgYW5kIGl0cyB2YWx1ZQogICAgICAgIHJpdmVyX3ZhbHVlID0gKHJpdmVyLCB0b3RhbCkKICAgICAgICByaXZlcl9udW1iZXIuYXBwZW5kKHJpdmVyX3ZhbHVlKQoKICAgICMgU29ydCB0b3RhbCBsaXN0IGJ5IG51bWJlciBpbiByZXZlcnNlIG9yZGVyCiAgICByaXZlcl9udW1fc29ydGVkID0gc29ydGVkKHJpdmVyX251bWJlciwga2V5PWxhbWJkYSB4OiB4WzFdLCByZXZlcnNlPVRydWUpCgoKICAgICMgSXRlcmF0ZSB0aHJvdWdoIGxpc3Qgb2Ygcml2ZXJzCiAgICBjb3VudCA9IDAKICAgIHRvcF9OX3JpdmVycyA9IFtdCgogICAgIyBCcmVhayB3aGVuIGRlc2lyZWQgdmFsdWUgaXMgcmVhY2hlZAogICAgd2hpbGUgY291bnQgPCBOIGFuZCBjb3VudCA8IGxlbihyaXZlcl9udW1fc29ydGVkKToKCiAgICAgICAgIyBBZGQgdG9wIHJpdmVyCiAgICAgICAgaWYgY291bnQgPT0gMDoKICAgICAgICAgICAgdG9wX05fcml2ZXJzLmFwcGVuZChyaXZlcl9udW1fc29ydGVkWzBdKQogICAgICAgICAgICBjb3VudCArPSAxCgogICAgICAgICMgQWRkIHJpdmVyIGFuZCB0byB0aGUgY291bnQgcHJvdmlkZWQgdGhlIGVudHJ5IGlzIHNtYWxsZXIgdGhhbiB0aGUgbGFzdAogICAgICAgIGVsaWYgKHJpdmVyX251bV9zb3J0ZWRbY291bnRdWzFdKSA8IChyaXZlcl9udW1fc29ydGVkW2NvdW50LTFdWzFdKToKICAgICAgICAgICAgdG9wX05fcml2ZXJzLmFwcGVuZChyaXZlcl9udW1fc29ydGVkW2NvdW50XSkKICAgICAgICAgICAgY291bnQgKz0gMQoKICAgICAgICAjIEFkZCByaXZlciB3aGVuIGl0IGhhcyB0aGUgc2FtZSBhcyB0aGUgcHJldmlvdXMgbnVtYmVyLCBidXQgYWRkIHRvIE4gYXMgd2VsbCB0byBwcmVzZXJ2ZSBkaXN0YW5jZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRvcF9OX3JpdmVycy5hcHBlbmQocml2ZXJfbnVtX3NvcnRlZFtjb3VudF0pCiAgICAgICAgICAgIGNvdW50ICs9IDEKICAgICAgICAgICAgTiArPSAxCgogICAgIyBSZXR1cm4gbGlzdAogICAgcmV0dXJuIHRvcF9OX3JpdmVycwoKCmRlZiBtYXBfc3RhdGlvbihzdGF0aW9ucyk6CiAgICAiIiJGdW5jdGlvbiB0byBwbG90IHRoZSBsb2NhdGlvbnMgb2YgdGhlIHB1bXBpbmcgc3RhdGlvbnMiIiIKCiAgICAjQ3JlYXRlIGNvb3JkaWFudGUgbGlzdHMKICAgIGNvb3JkeCA9IFtdCiAgICBjb29yZHkgPSBbXQogICAgbmFtZSA9IFtdCgogICAgIyBTdG9yZXMgY29vcmRpbmF0ZSBkYXRhIHBlciBzdGF0aW9uCiAgICBmb3Igc3RhdGlvbiBpbiBzdGF0aW9uczoKICAgICAgICBjb29yZHguYXBwZW5kKHN0YXRpb24uY29vcmRbMF0pCiAgICAgICAgY29vcmR5LmFwcGVuZChzdGF0aW9uLmNvb3JkWzFdKQogICAgICAgIG5hbWUuYXBwZW5kKHN0YXRpb24ubmFtZSkKICAgIAogICAgI0dldCB0aGUgcmVzcGVjdGl2ZSBjb2xvdXJzIGZvciBvdXIgc3RhdGlvbiBsaXN0CiAgICBjb2xvdXIgPSBmbG93X3JhbmdlX2NvbG91cnMoc3RhdGlvbnMpCgogICAgIyBDcmVhdGVzIGEgZGF0YWZyYW1lIG9mIG5hbWVzLCBjb29yZGluYXRlcyBhbmQgY29sb3VycwogICAgZGYgPSBwZC5EYXRhRnJhbWUoCiAgICB7J0NpdHknOiBuYW1lLAogICAgICdDb2xvdXInOiBjb2xvdXIsCiAgICAgJ0xhdGl0dWRlJzogY29vcmR4LAogICAgICdMb25naXR1ZGUnOiBjb29yZHl9KQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgIyBDb252ZXJ0IHRvIGdlby1kYXRhZnJhbWUgc3RvcmFnZSB0eXBlIGZvciBhY2Nlc3MKICAgIGdkZiA9IGdlb3BhbmRhcy5HZW9EYXRhRnJhbWUoZGYsIGdlb21ldHJ5PWdlb3BhbmRhcy5wb2ludHNfZnJvbV94eShkZi5Mb25naXR1ZGUsIGRmLkxhdGl0dWRlKSkKCjx8ZmltX2VuZHw+"]
["9759190e07f7eb1a48b47830e5012626a2451534-1","9759190e07f7eb1a48b47830e5012626a2451534",{"$cut":{"chars":21728,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIKQ29weXJpZ2h0IDIwMTggRnJhbmNpcyBYdWZhbiBEdSAtIEJFWU9ORFNPRlQgSU5DLgoKTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKQ3JlYXRlZCBvbiBUaHUgSmFuIDE4IDE0OjA2OjE2IDIwMTgKCkBhdXRob3I6IEZyYW5jaXMgWHVmYW4gRHUgLSBCRVlPTkRTT0ZUIElOQy4KQGVtYWlsOiBkdXh1ZmFuQGJleW9uZHNvZnQuY29tIHh1ZmFuLmR1QGdtYWlsLmNvbQpAVmVyc2lvbjogCTA2LzIwMTggMC44LUJldGEgICAgYWRkIG5ldyBhdXRvIGNyYXdsZXIgdG8gdXNlIHplbmRlc2sgYXBpIGluc3RlYWQgb2YgdXNpbmcgYnJvd3NlcihuZWVkIHplbmRlc2sgYWdlbnQpCiAgICAgICAgICAgIDAzLzIwMTggMC43LUJldGEgICAgYWRkIGF1dG9femVuZGVza19yZXBvcnQucHkgbW9kdWxlIHRvIGdlbmVyYXRlIHJlcG9ydHMgYmFzZWQgb24gTWFya0Rvd24KICAgICAgICAgICAgMDMvMjAxOCAwLjYuNS1CZXRhIGFkZCBpc3Zfc3RhdHVzIGluIGRhdGFiYXNlIHRhYmxlIGlzdl9wb3N0cywgdG8gcmVjb3JkIHBvc3Qgc3RhdHVzIG1hcmtlZCBieSBpc3YgdGVhbQogICAgICAgICAgICAwMy8yMDE4IDAuNi1CZXRhOiAgIDEuIHVwZGF0ZSB0aGUgdG9vbCB0byBvbmx5IGNvbGxlY3QgdGhlIG5lY2Vzc2FyeSBkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi4gY2hhbmdlIGRhdGFiYXNlIHVwZGF0aW5nIGxvZ2ljIChvbGQgd2F5OiBkZWxldGUgYWxsIGFuZCByZS1jcmVhdGUgbmV3IHRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyB3YXk6IHVwZGF0ZSBvciBpbnNlcnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy4gZml4IGJ1Z3MKICAgICAgICAgICAgMDIvMjAxOCAwLjUtQmV0YTogc2VwYXJhdGUgY3Jhd2xpbmcgbG9naWMgYW5kIGRhdGFiYXNlIGxvZ2ljCiAgICAgICAgICAgIDAyLzIwMTggMC40LUJldGE6IGFkZCBkYXRhYmFzZSB1cGRhdGUgcmVjb3JkaW5nCiAgICAgICAgICAgIDAyLzIwMTggMC4zLUJldGE6IGFkZCB1c2VycyBhbmQgdG9waWNzIGRhdGEgY29sbGVjdGluZwogICAgICAgICAgICAwMS8yMDE4IDAuMi1CZXRhOiBhZGQgZGF0YWJhc2Ugc3RvcmFnZQogICAgICAgICAgICAwMS8yMDE4IDAuMS1CZXRhOiBidWlsZCB6ZW5kZXNrIGF1dG8gY29sbGVjdCBmdW5jdGlvbgoiIiIKCmltcG9ydCBzcmMuYXV0b196ZW5kZXNrX2RhdGFfcHJvY2Vzc2luZyBhcyBkYXRhX3Byb2Nlc3NpbmcKaW1wb3J0IHNyYy5hdXRvX3plbmRlc2tfZGIgYXMgZGIKaW1wb3J0IGRhdGV0aW1lCmltcG9ydCBvcwppbXBvcnQgY29uZmlndXJlCgpkZWYgcnVuX3Zpc3VhbGl6YXRpb24oKToKICAgIGRhdGFfcHJvY2Vzc2luZy5waWVfY2hhcnRfcHlwbG90KCkKICAgIGRhdGFfcHJvY2Vzc2luZy5iYXJfY2hhcnRfcHlwbG90KCkKICAgIGRhdGFfcHJvY2Vzc2luZy50aW1lX2Jhcl9jaGFydF9weXBsb3QoKQoKCmRlZiByZXBvcnRfZmlsZW5hbWUoZXh0ZW50cyk6CiAgICBpZiBleHRlbnRzID09ICdtZCc6CiAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oY29uZmlndXJlLk9VVFBVVF9QQVRILCAnbWFya2Rvd25fcmVwb3J0XycpCiAgICBlbHNlOgogICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKGNvbmZpZ3VyZS5PVVRQVVRfUEFUSCwgJ2h0bWxfcmVwb3J0XycpCiAgICBkYXRlID0gc3RyKGRhdGV0aW1lLmRhdGUudG9kYXkoKSkKICAgIGV4dGVudHMgPSAnLicgKyBleHRlbnRzCiAgICByZXR1cm4gZmlsZW5hbWUgKyBkYXRlICsgZXh0ZW50cwoKCmRlZiBnZXRfZGF0YV9mcm9tX2RiKCk6CiAgICBkID0gZGIuQXV0b1plbmRlc2tEQigiaXN2X3plbmRlc2siLCAicG9zdGdyZXMiLCAiRHhmMzUyOSEiLCAiMTI3LjAuMC4xIiwgIjU0MzIiKQogICAgcmV0dXJuIGQucmVwb3J0X2RhdGEoKQoKCmRlZiBidWlsZF9jaGFydDMoZGF0YSk6CiAgICByZXMzID0gJzx0cj4nCiAgICByZXMzICs9ICc8dGg+UG9zdCBJRDwvdGg+JwogICAgcmVzMyArPSAnPHRoPlBvc3QgVGl0bGU8L3RoPicKICAgIHJlczMgKz0gJzx0aD5Ub3BpYzwvdGg+JwogICAgcmVzMyArPSAnPHRoPlBvc3QgU3RhdHVzPC90aD4nCiAgICByZXMzICs9ICc8dGg+RGF5cyBGcm9tIExhc3QgUmVzcG9uc2U8L3RoPicKICAgIHJlczMgKz0gJzx0aD5MYXN0IFJlc3BvbmRlcjwvdGg+JwogICAgcmVzMyArPSAnPC90cj4nCiAgICByZXMyID0gcmVzMwogICAgY250MyA9IDAKICAgIGNudDIgPSAwCiAgICBmb3Igcm93IGluIGRhdGE6CiAgICAgICAgaWYgcm93WzRdIDw9IDE6CiAgICAgICAgICAgIHJlczIgKz0gJzx0cj4nCiAgICAgICAgICAgIGNudDIgKz0gMQogICAgICAgICAgICBmb3IgY29sX24gaW4gcmFuZ2UobGVuKHJvdykpOgogICAgICAgICAgICAgICAgcmVzMiArPSAnPHRkPicKICAgICAgICAgICAgICAgIGlmIGNvbF9uID09IDA6CiAgICAgICAgICAgICAgICAgICAgcmVzMiArPSAnIycKICAgICAgICAgICAgICAgIHJlczIgKz0gc3RyKHJvd1tjb2xfbl0pCgogICAgICAgICAgICAg"}}]
["9759190e07f7eb1a48b47830e5012626a2451534-2","9759190e07f7eb1a48b47830e5012626a2451534",{"$cut":{"chars":21728,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIKQ29weXJpZ2h0IDIwMTggRnJhbmNpcyBYdWZhbiBEdSAtIEJFWU9ORFNPRlQgSU5DLgo8fGZpbV9ob2xlfD4KCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpDcmVhdGVkIG9uIFRodSBKYW4gMTggMTQ6MDY6MTYgMjAxOAoKQGF1dGhvcjogRnJhbmNpcyBYdWZhbiBEdSAtIEJFWU9ORFNPRlQgSU5DLgpAZW1haWw6IGR1eHVmYW5AYmV5b25kc29mdC5jb20geHVmYW4uZHVAZ21haWwuY29tCkBWZXJzaW9uOiAJMDYvMjAxOCAwLjgtQmV0YSAgICBhZGQgbmV3IGF1dG8gY3Jhd2xlciB0byB1c2UgemVuZGVzayBhcGkgaW5zdGVhZCBvZiB1c2luZyBicm93c2VyKG5lZWQgemVuZGVzayBhZ2VudCkKICAgICAgICAgICAgMDMvMjAxOCAwLjctQmV0YSAgICBhZGQgYXV0b196ZW5kZXNrX3JlcG9ydC5weSBtb2R1bGUgdG8gZ2VuZXJhdGUgcmVwb3J0cyBiYXNlZCBvbiBNYXJrRG93bgogICAgICAgICAgICAwMy8yMDE4IDAuNi41LUJldGEgYWRkIGlzdl9zdGF0dXMgaW4gZGF0YWJhc2UgdGFibGUgaXN2X3Bvc3RzLCB0byByZWNvcmQgcG9zdCBzdGF0dXMgbWFya2VkIGJ5IGlzdiB0ZWFtCiAgICAgICAgICAgIDAzLzIwMTggMC42LUJldGE6ICAgMS4gdXBkYXRlIHRoZSB0b29sIHRvIG9ubHkgY29sbGVjdCB0aGUgbmVjZXNzYXJ5IGRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLiBjaGFuZ2UgZGF0YWJhc2UgdXBkYXRpbmcgbG9naWMgKG9sZCB3YXk6IGRlbGV0ZSBhbGwgYW5kIHJlLWNyZWF0ZSBuZXcgdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IHdheTogdXBkYXRlIG9yIGluc2VydCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLiBmaXggYnVncwogICAgICAgICAgICAwMi8yMDE4IDAuNS1CZXRhOiBzZXBhcmF0ZSBjcmF3bGluZyBsb2dpYyBhbmQgZGF0YWJhc2UgbG9naWMKICAgICAgICAgICAgMDIvMjAxOCAwLjQtQmV0YTogYWRkIGRhdGFiYXNlIHVwZGF0ZSByZWNvcmRpbmcKICAgICAgICAgICAgMDIvMjAxOCAwLjMtQmV0YTogYWRkIHVzZXJzIGFuZCB0b3BpY3MgZGF0YSBjb2xsZWN0aW5nCiAgICAgICAgICAgIDAxLzIwMTggMC4yLUJldGE6IGFkZCBkYXRhYmFzZSBzdG9yYWdlCiAgICAgICAgICAgIDAxLzIwMTggMC4xLUJldGE6IGJ1aWxkIHplbmRlc2sgYXV0byBjb2xsZWN0IGZ1bmN0aW9uCiIiIgoKaW1wb3J0IHNyYy5hdXRvX3plbmRlc2tfZGF0YV9wcm9jZXNzaW5nIGFzIGRhdGFfcHJvY2Vzc2luZwppbXBvcnQgc3JjLmF1dG9femVuZGVza19kYiBhcyBkYgppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IG9zCmltcG9ydCBjb25maWd1cmUKCmRlZiBydW5fdmlzdWFsaXphdGlvbigpOgogICAgZGF0YV9wcm9jZXNzaW5nLnBpZV9jaGFydF9weXBsb3QoKQogICAgZGF0YV9wcm9jZXNzaW5nLmJhcl9jaGFydF9weXBsb3QoKQogICAgZGF0YV9wcm9jZXNzaW5nLnRpbWVfYmFyX2NoYXJ0X3B5cGxvdCgpCgoKZGVmIHJlcG9ydF9maWxlbmFtZShleHRlbnRzKToKICAgIGlmIGV4dGVudHMgPT0gJ21kJzoKICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihjb25maWd1cmUuT1VUUFVUX1BBVEgsICdtYXJrZG93bl9yZXBvcnRfJykKICAgIGVsc2U6CiAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oY29uZmlndXJlLk9VVFBVVF9QQVRILCAnaHRtbF9yZXBvcnRfJykKICAgIGRhdGUgPSBzdHIoZGF0ZXRpbWUuZGF0ZS50b2RheSgpKQogICAgZXh0ZW50cyA9ICcuJyArIGV4dGVudHMKICAgIHJldHVybiBmaWxlbmFtZSArIGRhdGUgKyBleHRlbnRzCgoKZGVmIGdldF9kYXRhX2Zyb21fZGIoKToKICAgIGQgPSBkYi5BdXRvWmVuZGVza0RCKCJpc3ZfemVuZGVzayIsICJwb3N0Z3JlcyIsICJEeGYzNTI5ISIsICIxMjcuMC4wLjEiLCAiNTQzMiIpCiAgICByZXR1cm4gZC5yZXBvcnRfZGF0YSgpCgoKZGVmIGJ1aWxkX2NoYXJ0MyhkYXRhKToKICAgIHJlczMgPSAnPHRyPicKICAgIHJlczMgKz0gJzx0aD5Qb3N0IElEPC90aD4nCiAgICByZXMzICs9ICc8dGg+UG9zdCBUaXRsZTwvdGg+JwogICAgcmVzMyArPSAnPHRoPlRvcGljPC90aD4nCiAgICByZXMzICs9ICc8dGg+UG9zdCBTdGF0dXM8L3RoPicKICAgIHJlczMgKz0gJzx0aD5EYXlzIEZyb20gTGFzdCBSZXNwb25zZTwvdGg+JwogICAgcmVzMyArPSAnPHRoPkxhc3QgUmVzcG9uZGVyPC90aD4nCiAgICByZXMzICs9ICc8L3RyPicKICAgIHJlczIgPSByZXMzCiAgICBjbnQzID0gMAogICAgY250MiA9IDAKICAgIGZvciByb3cgaW4gZGF0YToKICAgICAgICBpZiByb3dbNF0gPD0gMToKICAgICAgICAgICAgcmVzMiArPSAnPHRyPicKICAgICAgICAgICAgY250MiArPSAxCiAgICAgICAgICAgIGZvciBjb2xfbiBpbiByYW5nZShsZW4ocm93KSk6CiAgICAgICAgICAgICAgICByZXMyICs9ICc8dGQ+JwogICAgICAgICAgICAgICAgaWYgY29sX24gPT0gMDoKICAgICAgICAgICAgICAgICAgICByZXMyICs9ICcjJwogICAgICAgICAgICAgICAgcmVzMiArPSBzdHIocm93W2NvbF9uXSkKCiAgICAgICAgICAgICAgICByZXMyICs9ICc8L3RkPicKICAgICAgICAgICAgcmVzMiArPSAnPC90cj4nCiAgICAgICAgZWxzZToKCiAgICAgICAgICAgIHJlczMgKz0gJzx0cj4nCiAgICAgICAgICAgIGNudDMgKz0gMQogICAgICAgICAgICBmb3IgY29sX24gaW4gcmFuZ2UobGVuKHJvdykpOgogICAg"}}]
["c1fb3b1adf326fdc157667f4722fa9e72f903752-1","c1fb3b1adf326fdc157667f4722fa9e72f903752","PHxmaW1fcHJlZml4fD4KIyBXcml0dGVuIHVzaW5nIFB5dGhvbiAzLjYKIwojIENoZWNrIGEgbGlzdCBvZiBib3JlaG9sZXMgZm9yIGNvbmNvcmRhbmNlIGJldHdlZW4gY29sbGFyIGVsZXZhdGlvbnMKIyBpbiBBLkVOVElUSUVTIGFuZCBCT1JFSE9MRS5CT1JFSE9MRVMgZGF0YWJhc2VzLgojCiMgVGhlIGxpc3Qgb2YgYm9yZWhvbGVzIGlzIGhhcnZlc3RlZCBmcm9tIHRoZSBuYW1lcyBvZiBmb2xkZXJzIGluIHdoaWNoIHJhdwojIGdhbW1hIGFuZCBpbmR1Y3Rpb24gY29uZHVjdGl2aXR5IGZpZWxkIGdlb3BoeXNpY3MgbG9ncyBhcmUgc3RvcmVkLgoKaW1wb3J0IG9zLCBzeXMKaW1wb3J0IHBhbmRhcyBhcyBwZAoKIyBDb25uZWN0IHRvIG9yYWNsZSB1c2luZyBjcmVkZW50aWFscyBzdG9yZWQgaW4gc2FmZSBsb2NhdGlvbgpzeXMucGF0aC5hcHBlbmQocidIOlxcUHl0aG9uXFxPcmFjbGVcXFxcJykKaW1wb3J0IGNvbm5lY3RfdG9fb3JhY2xlCm9yYWNvbiA9IGNvbm5lY3RfdG9fb3JhY2xlLmNvbm5lY3RfdG9fb3JhY2xlKCkKY3VyID0gb3JhY29uLmN1cnNvcigpCgojIERlZmluZSBrZXkgdmFyaWFibGVzCmRhdGFfZm9sZGVyID0gciJcXHByb2QubGFuXGFjdGl2ZVxwcm9qXGZ1dHVyZXhcU3R1YXJ0Q29ycmlkb3JcRGF0YVxGaWVsZHdvcmtBbmRQaG90b3NcRmllbGREYXRhXEluZHVjdGlvbl9hbmRfR2FtbWEiCgojIEZ1bmN0aW9ucwpkZWYgZ2V0X2JvcmVob2xlX2xpc3QoZm9sZGVyKToKICAgIGRpcmxpc3QgPSBbZm9sZGVyIGZvciBmb2xkZXIgaW4gb3MubGlzdGRpcihkYXRhX2ZvbGRlcikgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oZGF0YV9mb2xkZXIsIGZvbGRlcikpXQogICAgcmV0dXJuIGRpcmxpc3QKCmRlZiBnZXRfZW50aXRpZXNfY29vcmRzKGJvcmVob2xlKToKICAgICIiIkdldCBlbnRpdHkgYW5kIGNvb3JkaW5hdGUgaW5mb3JtYXRpb24gb2YgYSBuYW1lZCBib3JlaG9sZQogICAgZnJvbSB0aGUgQS5FTlRJVElFUyBkYXRhYmFzZSBpbiBHQSdzIE9yYWNsZSBlbnZpcm9ubWVudAoKICAgIFBhcmFtZXRlcnM6CiAgICBib3JlaG9sZSAoc3RyaW5nKTogICAgICAgICBUaGUgbmFtZSBvZiB0aGUgYm9yZWhvbGUgdG8gcXVlcnksIGVnIFJOMDE4NjEyCgogICAgUmV0dXJuczoKICAgIEEgUGFuZGFzIGRhdGFmcmFtZSB3aXRoIGNvbHVtbnM6CiAgICBFTk8sIEVOVElUWUlELCBFTlRJVFlfVFlQRSwgQUNDRVNTX0NPREUsIExPTiwgTEFULCBaLCBPUklHX0xPTiwgT1JJR19MQVQsIE9SSUdfWgoKICAgIFRoZSBkYXRhZnJhbWUgd2lsbCBjb250YWluIGVpdGhlciBhIHNpbmdsZSByb3cgb2YgZGF0YSBpZiB0aGUgYm9yZWhvbGUgaXMgZm91bmQsCiAgICBvciB3aWxsIGJlIGVtcHR5LgogICAgIiIiCgogICAgIyBDb25zdHJ1Y3QgU1FMIHF1ZXJ5CiAgICBxdWVyeSA9ICcnJwogICAgc2VsZWN0CiAgICAgICAgZS5lbm8sCiAgICAgICAgZS5lbnRpdHlpZCwKICAgICAgICBlLmVudGl0eV90eXBlLAogICAgICAgIGUuYWNjZXNzX2NvZGUsCiAgICAgICAgZS5nZW9tLnNkb19wb2ludC54IGFzIGxvbiwKICAgICAgICBlLmdlb20uc2RvX3BvaW50LnkgYXMgbGF0LAogICAgICAgIGUuZ2VvbS5zZG9fcG9pbnQueiBhcyB6LAogICAgICAgIGUuZ2VvbS5zZG9fc3JpZCBhcyBzcmlkLAogICAgICAgIGUuZ2VvbV9vcmlnaW5hbC5zZG9fcG9pbnQueCBhcyBvcmlnX2xvbiwKICAgICAgICBlLmdlb21fb3JpZ2luYWwuc2RvX3BvaW50LnkgYXMgb3JpZ19sYXQsCiAgICAgICAgZS5nZW9tX29yaWdpbmFsLnNkb19wb2ludC56IGFzIG9yaWdfeiwKICAgICAgICBlLmdlb21fb3JpZ2luYWwuc2RvX3NyaWQgYXMgb3JpZ19zcmlkCiAgICBmcm9tCiAgICAgICAgYS5lbnRpdGllcyBlCiAgICB3aGVyZQogICAgICAgIGVudGl0eWlkIGluICgne30nKQogICAgJycnLmZvcm1hdChib3JlaG9sZSkKICAgIAogICAgZW50aXRpZXNfY29vcmRzID0gcGQucmVhZF9zcWwocXVlcnksIG9yYWNvbikKICAgIHJldHVybiBlbnRpdGllc19jb29yZHMKCmRlZiBnZXRfYm9yZWhvbGVzX2Nvb3Jkcyhib3JlaG9sZSk6CiAgICAiIiJHZXQgZW50aXR5IGFuZCBjb29yZGluYXRlIGluZm9ybWF0aW9uIG9mIGEgbmFtZWQgYm9yZWhvbGUKICAgIGZyb20gdGhlIEJPUkVIT0xFLkJPUkVIT0xFUyBkYXRhYmFzZSBpbiBHQSdzIE9yYWNsZSBlbnZpcm9ubWVudAoKICAgIFBhcmFtZXRlcnM6CiAgICBib3JlaG9sZSAoc3RyaW5nKTogICAgICAgICBUaGUgbmFtZSBvZiB0aGUgYm9yZWhvbGUgdG8gcXVlcnksIGVnIFJOMDE4NjEyCgogICAgUmV0dXJuczoKICAgIEEgUGFuZGFzIGRhdGFmcmFtZSB3aXRoIGNvbHVtbnM6CiAgICBCT1JFSE9MRV9JRCwgQk9SRUhPTEVfTkFNRSwgTE9OLCBMQVQsIEVMRVZBVElPTl9WQUxVRSwgVU9NLCBEQVRVTQoKICAgIFRoZSBkYXRhZnJhbWUgd2lsbCBjb250YWluIGVpdGhlciBhIHNpbmdsZSByb3cgb2YgZGF0YSBpZiB0aGUgYm9yZWhvbGUgaXMgZm91bmQsCiAgICBvciB3aWxsIGJlIGVtcHR5LgogICAgIiIiCiAgICAKICAgICMgQ29uc3RydWN0IFNRTCBxdWVyeQogICAgcXVlcnkgPSAnJycKICAgIHNlbGVjdAogICAgICAgIGIuYm9yZWhvbGVfaWQsCiAgICAgICAgYi5ib3JlaG9sZV9uYW1lLAogICAgICAgIGIubG9jYXRpb24uc2RvX3BvaW50LnggYXMgbG9uLAogICAgICAgIGIubG9jYXRpb24uc2RvX3BvaW50LnkgYXMgbGF0LAogICAgICAgIGIuZWxldmF0aW9uX3ZhbHVlLAogICAgICAgIGQuY29kZSBhcyB1b20sCiAgICAgICAgZWQuY29kZSBhcyBkYXR1bQogICAgZnJvbQogICAgICAgIGJvcmVob2xlLmJvcmVob2xlcyBiCiAgICAgICAgam9pbiBib3JlaG9sZS5sdV91b20gZAogICAgICAgIG9uIGIuZWxldmF0aW9uX3VvbV9pZCA9IGQudW9tX2lkCiAgICAgICAgam9pbiBib3JlaG9sZS5sdV9lbGV2YXRpb25fZGF0dW1zIGVkCiAgICAgICAgb24gYi5lbGV2YXRpb25fZGF0dW1faWQgPSBlZC5lbGV2YXRpb25fZGF0dW1faWQKICAgIHdoZXJlCiAgICAgICAgYm9yZWhvbGVfbmFtZSBpbiAoJ3t9JykKICAgICcnJy5mb3JtYXQoYm9yZWhvbGUpCgogICAgYm9yZWhvbGVfY29vcmRzID0gcGQucmVhZF9zcWwocXVlcnksIG9yYWNvbikKICAgIHJldHVybiBib3JlaG9sZV9jb29yZHMKCmRlZiBnZXRfZGF0dW1faW5mbyhzcmlkKToKICAgIHF1ZXJ5ID0gJycnCiAgICBzZWxlY3QKICAgICAgICAqCiAgICBmcm9tCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZG9fY29vcmRfcmVmX3N5cwo8fGZpbV9lbmR8Pg=="]
["c1fb3b1adf326fdc157667f4722fa9e72f903752-2","c1fb3b1adf326fdc157667f4722fa9e72f903752","PHxmaW1fcHJlZml4fD4KIyBXcml0dGVuIHVzaW5nIFB5dGhvbiAzLjYKIwojIENoZWNrIGEgbGlzdCBvZiBib3JlaG9sZXMgZm9yIGNvbmNvcmRhbmNlIGJldHdlZW4gY29sbGFyIGVsZXZhdGlvbnMKIyBpbiBBLkVOVElUSUVTIGFuZCBCT1JFSE9MRS5CT1JFSE9MRVMgZGF0YWJhc2VzLgojCiMgVGhlIGxpc3Qgb2YgYm9yZWhvbGVzIGlzIGhhcnZlc3RlZCBmcm9tIHRoZSBuYW1lcyBvZiBmb2xkZXJzIGluIHdoaWNoIHJhdwojIGdhbW1hIGFuZCBpbmR1Y3Rpb24gY29uZHVjdGl2aXR5IGZpZWxkIGdlb3BoeXNpY3MgbG9ncyBhcmUgc3RvcmVkLgoKaW1wb3J0IG9zLCBzeXMKaW1wb3J0IHBhbmRhcyBhcyBwZAoKIyBDb25uZWN0IHRvIG9yYWNsZSB1c2luZyBjcmVkZW50aWFscyBzdG9yZWQgaW4gc2FmZSBsb2NhdGlvbgpzeXMucGF0aC5hcHBlbmQocidIOlxcUHl0aG9uXFxPcmFjbGVcXFxcJykKaW1wb3J0IGNvbm5lY3RfdG9fb3JhY2xlCm9yYWNvbiA9IGNvbm5lY3RfdG9fb3JhY2xlLmNvbm5lY3RfdG9fb3JhY2xlKCkKY3VyID0gb3JhY29uLmN1cnNvcigpCgojIERlZmluZSBrZXkgdmFyaWFibGVzCmRhdGFfZm9sZGVyID0gciJcXHByb2QubGFuXGFjdGl2ZVxwcm9qXGZ1dHVyZXhcU3R1YXJ0Q29ycmlkb3JcRGF0YVxGaWVsZHdvcmtBbmRQaG90b3NcRmllbGREYXRhXEluZHVjdGlvbl9hbmRfR2FtbWEiCgojIEZ1bmN0aW9ucwpkZWYgZ2V0X2JvcmVob2xlX2xpc3QoZm9sZGVyKToKICAgIGRpcmxpc3QgPSBbZm9sZGVyIGZvciBmb2xkZXIgaW4gb3MubGlzdGRpcihkYXRhX2ZvbGRlcikgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oZGF0YV9mb2xkZXIsIGZvbGRlcikpXQogICAgcmV0dXJuIGRpcmxpc3QKCmRlZiBnZXRfZW50aXRpZXNfY29vcmRzKGJvcmVob2xlKToKICAgICIiIkdldCBlbnRpdHkgYW5kIGNvb3JkaW5hdGUgaW5mb3JtYXRpb24gb2YgYSBuYW1lZCBib3JlaG9sZQogICAgZnJvbSB0aGUgQS5FTlRJVElFUyBkYXRhYmFzZSBpbiBHQSdzIE9yYWNsZSBlbnZpcm9ubWVudAoKICAgIFBhcmFtZXRlcnM6CiAgICBib3JlaG9sZSAoc3RyaW5nKTogICAgICAgICBUaGUgbmFtZSBvZiB0aGUgYm9yZWhvbGUgdG8gcXVlcnksIGVnIFJOMDE4NjEyCgogICAgUmV0dXJuczoKICAgIEEgUGFuZGFzIGRhdGFmcmFtZSB3aXRoIGNvbHVtbnM6CiAgICBFTk8sIEVOVElUWUlELCBFTlRJVFlfVFlQRSwgQUNDRVNTX0NPREUsIExPTiwgTEFULCBaLCBPUklHX0xPTiwgT1JJR19MQVQsIE9SSUdfWgoKICAgIFRoZSBkYXRhZnJhbWUgd2lsbCBjb250YWluIGVpdGhlciBhIHNpbmdsZSByb3cgb2YgZGF0YSBpZiB0aGUgYm9yZWhvbGUgaXMgZm91bmQsCiAgICBvciB3aWxsIGJlIGVtcHR5LgogICAgIiIiCgogICAgIyBDb25zdHJ1Y3QgU1FMIHF1ZXJ5CiAgICBxdWVyeSA9ICcnJwogICAgc2VsZWN0CiAgICAgICAgZS5lbm8sCiAgICAgICAgZS5lbnRpdHlpZCwKICAgICAgICBlLmVudGl0eV90eXBlLAogICAgICAgIGUuYWNjZXNzX2NvZGUsCiAgICAgICAgZS5nZW9tLnNkb19wb2ludC54IGFzIGxvbiwKICAgICAgICBlLmdlb20uc2RvX3BvaW50LnkgYXMgbGF0LAogICAgICAgIGUuZ2VvbS5zZG9fcG9pbnQueiBhcyB6LAogICAgICAgIGUuZ2VvbS5zZG9fc3JpZCBhcyBzcmlkLAogICAgICAgIGUuZ2VvbV9vcmlnaW5hbC5zZG9fcG9pbnQueCBhcyBvcmlnX2xvbiwKICAgICAgICBlLmdlb21fb3JpZ2luYWwuc2RvX3BvaW50LnkgYXMgb3JpZ19sYXQsCiAgICAgICAgZS5nZW9tX29yaWdpbmFsLnNkb19wb2ludC56IGFzIG9yaWdfeiwKICAgICAgICBlLmdlb21fb3JpZ2luYWwuc2RvX3NyaWQgYXMgb3JpZ19zcmlkCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGZyb20KICAgICAgICBhLmVudGl0aWVzIGUKICAgIHdoZXJlCiAgICAgICAgZW50aXR5aWQgaW4gKCd7fScpCjx8ZmltX2VuZHw+"]
["178e9509bb96a2291e8bd772ea06719a268215f3-1","178e9509bb96a2291e8bd772ea06719a268215f3","PHxmaW1fcHJlZml4fD4KZnJvbSAuZW52aXJvbm1lbnQgaW1wb3J0IEVudgpmcm9tIC50eXBlcyBpbXBvcnQgU3ltYm9sLCBOdW1iZXIsIExpc3QKCgpkZWYgZXZhbHVhdGUoeCwgZW52OiBFbnYpOgogICAgIkV2YWx1YXRlIGFuIGV4cHJlc3Npb24gaW4gYW4gZW52aXJvbm1lbnQuIgogICAgaWYgaXNpbnN0YW5jZSh4LCBTeW1ib2wpOiAgICAgICMgdmFyaWFibGUgcmVmZXJlbmNlCiAgICAgICAgc3ltYm9sID0gZW52LmZpbmQoeCkKICAgICAgICAjIHByaW50KCdzeW1ib2wnLCBzeW1ib2wpCiAgICAgICAgcmV0dXJuIGVudi5maW5kKHgpW3hdCiAgICBlbGlmIG5vdCBpc2luc3RhbmNlKHgsIExpc3QpOiAgIyBjb25zdGFudCBsaXRlcmFsCiAgICAgICAgcmV0dXJuIHgKICAgIGVsaWYgeFswXSA9PSAncXVvdGUnOiAgICAgICAgICAjIChxdW90ZSBleHApCjx8ZmltX2hvbGV8PgogICAgZWxpZiB4WzBdID09ICdpZic6ICAgICAgICAgICAgICMgKGlmIHRlc3QgY29uc2VxIGFsdCkKICAgICAgICAoXywgdGVzdCwgY29uc2VxLCBhbHQpID0geAogICAgICAgIGV4cCA9IChjb25zZXEgaWYgZXZhbHVhdGUodGVzdCwgZW52KSBlbHNlIGFsdCkKICAgICAgICByZXR1cm4gZXZhbHVhdGUoZXhwLCBlbnYpCiAgICBlbGlmIHhbMF0gPT0gJ2RlZmluZSc6ICAgICAgICAgIyAoZGVmaW5lIHZhciBleHApCiAgICAgICAgKF8sIHZhciwgZXhwKSA9IHgKICAgICAgICBlbnZbdmFyXSA9IGV2YWx1YXRlKGV4cCwgZW52KQogICAgZWxpZiB4WzBdID09ICdzZXQhJzogICAgICAgICAgICMgKHNldCEgdmFyIGV4cCkKICAgICAgICAoXywgdmFyLCBleHApID0geAogICAgICAgIGVudi5maW5kKHZhcilbdmFyXSA9IGV2YWx1YXRlKGV4cCwgZW52KQogICAgZWxpZiB4WzBdID09ICdsYW1iZGEnOiAgICAgICAgICMgKGxhbWJkYSAodmFyLi4uKSBib2R5KQogICAgICAgIChfLCBwYXJtcywgYm9keSkgPSB4CiAgICAgICAgcmV0dXJuIFByb2NlZHVyZShwYXJtcywgYm9keSwgZW52KQogICAgZWxzZTogICAgICAgICAgICAgICAgICAgICAgICAgICMgKHByb2MgYXJnLi4uKQogICAgICAgIHByb2MgPSBldmFsdWF0ZSh4WzBdLCBlbnYpCiAgICAgICAgYXJncyA9IFtldmFsdWF0ZShleHAsIGVudikgZm9yIGV4cCBpbiB4WzE6XV0KICAgICAgICByZXR1cm4gcHJvYygqYXJncykKCgpkZWYgc19leHByKG9iajogb2JqZWN0KSAtPiBzdHI6CiAgICAiQ29udmVydCBQeXRob24gb2JqZWN0IGludG8gTGlzcCBzLWV4cHJlc3Npb24uIgogICAgaWYgb2JqID09IFRydWU6CiAgICAgICAgcmV0dXJuICcjdCcKICAgIGVsaWYgb2JqID09IEZhbHNlOgogICAgICAgIHJldHVybiAnI2YnCiAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBsaXN0KToKICAgICAgICBpdGVtcyA9ICcgJy5qb2luKHNfZXhwcih4KSBmb3IgeCBpbiBvYmopCiAgICAgICAgcmV0dXJuIGYnKHtpdGVtc30pJwogICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgU3ltYm9sKToKICAgICAgICByZXR1cm4gb2JqCiAgICBlbHNlOgogICAgICAgIHJldHVybiByZXByKG9iaikKCiMgYXZhbGlhciBlc3RhIGNsYXNzZSBhcXVpCgoKY2xhc3MgUHJvY2VkdXJlKG9iamVjdCk6CiAgICAiQSB1c2VyLWRlZmluZWQgU2NoZW1lIHByb2NlZHVyZS4iCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcm1zLCBib2R5LCBlbnYpOgogICAgICAgIHNlbGYucGFybXMsIHNlbGYuYm9keSwgc2VsZi5lbnYgPSBwYXJtcywgYm9keSwgZW52CgogICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzKToKICAgICAgICByZXR1cm4gZXZhbHVhdGUoc2VsZi5ib2R5LCBFbnYoc2VsZi5wYXJtcywgYXJncywgc2VsZi5lbnYpKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIChfLCBleHApID0geAogICAgICAgIHJldHVybiBleHAKPHxmaW1fZW5kfD4="]
["178e9509bb96a2291e8bd772ea06719a268215f3-2","178e9509bb96a2291e8bd772ea06719a268215f3","PHxmaW1fcHJlZml4fD4KZnJvbSAuZW52aXJvbm1lbnQgaW1wb3J0IEVudgpmcm9tIC50eXBlcyBpbXBvcnQgU3ltYm9sLCBOdW1iZXIsIExpc3QKCgpkZWYgZXZhbHVhdGUoeCwgZW52OiBFbnYpOgogICAgIkV2YWx1YXRlIGFuIGV4cHJlc3Npb24gaW4gYW4gZW52aXJvbm1lbnQuIgogICAgaWYgaXNpbnN0YW5jZSh4LCBTeW1ib2wpOiAgICAgICMgdmFyaWFibGUgcmVmZXJlbmNlCiAgICAgICAgc3ltYm9sID0gZW52LmZpbmQoeCkKICAgICAgICAjIHByaW50KCdzeW1ib2wnLCBzeW1ib2wpCiAgICAgICAgcmV0dXJuIGVudi5maW5kKHgpW3hdCiAgICBlbGlmIG5vdCBpc2luc3RhbmNlKHgsIExpc3QpOiAgIyBjb25zdGFudCBsaXRlcmFsCiAgICAgICAgcmV0dXJuIHgKICAgIGVsaWYgeFswXSA9PSAncXVvdGUnOiAgICAgICAgICAjIChxdW90ZSBleHApCiAgICAgICAgKF8sIGV4cCkgPSB4CiAgICAgICAgcmV0dXJuIGV4cAogICAgZWxpZiB4WzBdID09ICdpZic6ICAgICAgICAgICAgICMgKGlmIHRlc3QgY29uc2VxIGFsdCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIChfLCB0ZXN0LCBjb25zZXEsIGFsdCkgPSB4CiAgICAgICAgZXhwID0gKGNvbnNlcSBpZiBldmFsdWF0ZSh0ZXN0LCBlbnYpIGVsc2UgYWx0KQogICAgICAgIHJldHVybiBldmFsdWF0ZShleHAsIGVudikKPHxmaW1fZW5kfD4="]
["178e9509bb96a2291e8bd772ea06719a268215f3-3","178e9509bb96a2291e8bd772ea06719a268215f3","PHxmaW1fcHJlZml4fD4KZnJvbSAuZW52aXJvbm1lbnQgaW1wb3J0IEVudgpmcm9tIC50eXBlcyBpbXBvcnQgU3ltYm9sLCBOdW1iZXIsIExpc3QKCgpkZWYgZXZhbHVhdGUoeCwgZW52OiBFbnYpOgogICAgIkV2YWx1YXRlIGFuIGV4cHJlc3Npb24gaW4gYW4gZW52aXJvbm1lbnQuIgogICAgaWYgaXNpbnN0YW5jZSh4LCBTeW1ib2wpOiAgICAgICMgdmFyaWFibGUgcmVmZXJlbmNlCiAgICAgICAgc3ltYm9sID0gZW52LmZpbmQoeCkKICAgICAgICAjIHByaW50KCdzeW1ib2wnLCBzeW1ib2wpCiAgICAgICAgcmV0dXJuIGVudi5maW5kKHgpW3hdCiAgICBlbGlmIG5vdCBpc2luc3RhbmNlKHgsIExpc3QpOiAgIyBjb25zdGFudCBsaXRlcmFsCiAgICAgICAgcmV0dXJuIHgKICAgIGVsaWYgeFswXSA9PSAncXVvdGUnOiAgICAgICAgICAjIChxdW90ZSBleHApCiAgICAgICAgKF8sIGV4cCkgPSB4CiAgICAgICAgcmV0dXJuIGV4cAogICAgZWxpZiB4WzBdID09ICdpZic6ICAgICAgICAgICAgICMgKGlmIHRlc3QgY29uc2VxIGFsdCkKICAgICAgICAoXywgdGVzdCwgY29uc2VxLCBhbHQpID0geAogICAgICAgIGV4cCA9IChjb25zZXEgaWYgZXZhbHVhdGUodGVzdCwgZW52KSBlbHNlIGFsdCkKICAgICAgICByZXR1cm4gZXZhbHVhdGUoZXhwLCBlbnYpCiAgICBlbGlmIHhbMF0gPT0gJ2RlZmluZSc6ICAgICAgICAgIyAoZGVmaW5lIHZhciBleHApCiAgICAgICAgKF8sIHZhciwgZXhwKSA9IHgKICAgICAgICBlbnZbdmFyXSA9IGV2YWx1YXRlKGV4cCwgZW52KQogICAgZWxpZiB4WzBdID09ICdzZXQhJzogICAgICAgICAgICMgKHNldCEgdmFyIGV4cCkKICAgICAgICAoXywgdmFyLCBleHApID0geAogICAgICAgIGVudi5maW5kKHZhcilbdmFyXSA9IGV2YWx1YXRlKGV4cCwgZW52KQogICAgZWxpZiB4WzBdID09ICdsYW1iZGEnOiAgICAgICAgICMgKGxhbWJkYSAodmFyLi4uKSBib2R5KQogICAgICAgIChfLCBwYXJtcywgYm9keSkgPSB4CiAgICAgICAgcmV0dXJuIFByb2NlZHVyZShwYXJtcywgYm9keSwgZW52KQogICAgZWxzZTogICAgICAgICAgICAgICAgICAgICAgICAgICMgKHByb2MgYXJnLi4uKQogICAgICAgIHByb2MgPSBldmFsdWF0ZSh4WzBdLCBlbnYpCiAgICAgICAgYXJncyA9IFtldmFsdWF0ZShleHAsIGVudikgZm9yIGV4cCBpbiB4WzE6XV0KICAgICAgICByZXR1cm4gcHJvYygqYXJncykKCgpkZWYgc19leHByKG9iajogb2JqZWN0KSAtPiBzdHI6CiAgICAiQ29udmVydCBQeXRob24gb2JqZWN0IGludG8gTGlzcCBzLWV4cHJlc3Npb24uIgogICAgaWYgb2JqID09IFRydWU6CiAgICAgICAgcmV0dXJuICcjdCcKICAgIGVsaWYgb2JqID09IEZhbHNlOgogICAgICAgIHJldHVybiAnI2YnCiAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBsaXN0KToKICAgICAgICBpdGVtcyA9ICcgJy5qb2luKHNfZXhwcih4KSBmb3IgeCBpbiBvYmopCjx8ZmltX2hvbGV8PgogICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgU3ltYm9sKToKICAgICAgICByZXR1cm4gb2JqCiAgICBlbHNlOgogICAgICAgIHJldHVybiByZXByKG9iaikKCiMgYXZhbGlhciBlc3RhIGNsYXNzZSBhcXVpCgoKY2xhc3MgUHJvY2VkdXJlKG9iamVjdCk6CiAgICAiQSB1c2VyLWRlZmluZWQgU2NoZW1lIHByb2NlZHVyZS4iCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcm1zLCBib2R5LCBlbnYpOgogICAgICAgIHNlbGYucGFybXMsIHNlbGYuYm9keSwgc2VsZi5lbnYgPSBwYXJtcywgYm9keSwgZW52CgogICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzKToKICAgICAgICByZXR1cm4gZXZhbHVhdGUoc2VsZi5ib2R5LCBFbnYoc2VsZi5wYXJtcywgYXJncywgc2VsZi5lbnYpKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJldHVybiBmJyh7aXRlbXN9KScKPHxmaW1fZW5kfD4="]
["ecda04614d4218221a399640932b6ecf4f9b60f2-1","ecda04614d4218221a399640932b6ecf4f9b60f2","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IGltcG9ydGxpYgoKCmRlZiBpc19zYWdlbWFrZXJfYXZhaWxhYmxlKCk6Cjx8ZmltX2VuZHw+"]
["ecda04614d4218221a399640932b6ecf4f9b60f2-2","ecda04614d4218221a399640932b6ecf4f9b60f2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGltcG9ydGxpYgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZGVmIGlzX3NhZ2VtYWtlcl9hdmFpbGFibGUoKToKICAgIHJldHVybiBpbXBvcnRsaWIudXRpbC5maW5kX3NwZWMoInNhZ2VtYWtlciIpIGlzIG5vdCBOb25lCjx8ZmltX2VuZHw+"]
["ecda04614d4218221a399640932b6ecf4f9b60f2-3","ecda04614d4218221a399640932b6ecf4f9b60f2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGltcG9ydGxpYgoKCmRlZiBpc19zYWdlbWFrZXJfYXZhaWxhYmxlKCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHJldHVybiBpbXBvcnRsaWIudXRpbC5maW5kX3NwZWMoInNhZ2VtYWtlciIpIGlzIG5vdCBOb25lCjx8ZmltX2VuZHw+"]
["ecda04614d4218221a399640932b6ecf4f9b60f2-4","ecda04614d4218221a399640932b6ecf4f9b60f2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGltcG9ydGxpYgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZGVmIGlzX3NhZ2VtYWtlcl9hdmFpbGFibGUoKToKICAgIHJldHVybiBpbXBvcnRsaWIudXRpbC5maW5kX3NwZWMoInNhZ2VtYWtlciIpIGlzIG5vdCBOb25lCjx8ZmltX2VuZHw+"]
["f3cc3df1657cfbe4acc61a9dac5987a3413e5853-1","f3cc3df1657cfbe4acc61a9dac5987a3413e5853","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFza19yZXN0ZnVsIGltcG9ydCBSZXNvdXJjZQppbXBvcnQgdXJsbGliMgppbXBvcnQgcmUKaW1wb3J0IGpzb24KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgRVdTU3RhdHVzKFJlc291cmNlKToKICAgIGRlZiBnZXQoc2VsZik6CiAgICAgICAgcmVzcG9uc2UgPSB1cmxsaWIyLnVybG9wZW4oImh0dHBzOi8vbXkuZW5nci5pbGxpbm9pcy5lZHUvbGFidHJhY2svdXRpbF9kYXRhX2pzb24uYXNwIikKICAgICAgICByZXR1cm4ganNvbi5sb2FkKHJlc3BvbnNlKQo8fGZpbV9lbmR8Pg=="]
["f3cc3df1657cfbe4acc61a9dac5987a3413e5853-2","f3cc3df1657cfbe4acc61a9dac5987a3413e5853","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFza19yZXN0ZnVsIGltcG9ydCBSZXNvdXJjZQppbXBvcnQgdXJsbGliMgppbXBvcnQgcmUKaW1wb3J0IGpzb24KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgRVdTU3RhdHVzKFJlc291cmNlKToKICAgIGRlZiBnZXQoc2VsZik6CiAgICAgICAgcmVzcG9uc2UgPSB1cmxsaWIyLnVybG9wZW4oImh0dHBzOi8vbXkuZW5nci5pbGxpbm9pcy5lZHUvbGFidHJhY2svdXRpbF9kYXRhX2pzb24uYXNwIikKICAgICAgICByZXR1cm4ganNvbi5sb2FkKHJlc3BvbnNlKQo8fGZpbV9lbmR8Pg=="]
["f3cc3df1657cfbe4acc61a9dac5987a3413e5853-3","f3cc3df1657cfbe4acc61a9dac5987a3413e5853","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFza19yZXN0ZnVsIGltcG9ydCBSZXNvdXJjZQppbXBvcnQgdXJsbGliMgppbXBvcnQgcmUKaW1wb3J0IGpzb24KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgRVdTU3RhdHVzKFJlc291cmNlKToKICAgIGRlZiBnZXQoc2VsZik6CiAgICAgICAgcmVzcG9uc2UgPSB1cmxsaWIyLnVybG9wZW4oImh0dHBzOi8vbXkuZW5nci5pbGxpbm9pcy5lZHUvbGFidHJhY2svdXRpbF9kYXRhX2pzb24uYXNwIikKPHxmaW1fZW5kfD4="]
["f3cc3df1657cfbe4acc61a9dac5987a3413e5853-4","f3cc3df1657cfbe4acc61a9dac5987a3413e5853","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFza19yZXN0ZnVsIGltcG9ydCBSZXNvdXJjZQppbXBvcnQgdXJsbGliMgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCByZQppbXBvcnQganNvbgoKY2xhc3MgRVdTU3RhdHVzKFJlc291cmNlKToKPHxmaW1fZW5kfD4="]
["f3cc3df1657cfbe4acc61a9dac5987a3413e5853-5","f3cc3df1657cfbe4acc61a9dac5987a3413e5853","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFza19yZXN0ZnVsIGltcG9ydCBSZXNvdXJjZQppbXBvcnQgdXJsbGliMgo8fGZpbV9ob2xlfD4KICAgIGRlZiBnZXQoc2VsZik6CiAgICAgICAgcmVzcG9uc2UgPSB1cmxsaWIyLnVybG9wZW4oImh0dHBzOi8vbXkuZW5nci5pbGxpbm9pcy5lZHUvbGFidHJhY2svdXRpbF9kYXRhX2pzb24uYXNwIikKICAgICAgICByZXR1cm4ganNvbi5sb2FkKHJlc3BvbnNlKQo8fGZpbV9zdWZmaXh8PgppbXBvcnQgcmUKaW1wb3J0IGpzb24KCmNsYXNzIEVXU1N0YXR1cyhSZXNvdXJjZSk6Cjx8ZmltX2VuZHw+"]
["41613f297dfb2f255ac5cc79c94be564ec04cc8d-1","41613f297dfb2f255ac5cc79c94be564ec04cc8d","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmltcG9ydCByb3NweQppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRpbWUKZnJvbSBjdl9icmlkZ2UgaW1wb3J0IEN2QnJpZGdlLCBDdkJyaWRnZUVycm9yCmZyb20gc2Vuc29yX21zZ3MubXNnIGltcG9ydCBJbWFnZQpmcm9tIFBJTCBpbXBvcnQgSW1hZ2UgYXMgcGkKCmRlZiBzYXZlX2RlcHRoX2RhdGEoYXJyYXksIHRzKToKICAgIGZpbGVfcGF0aCA9IGYiL2hvbWUvcHpsdS9wNDUwL3NyYy9jbWRfdmlkZW8vc2NyaXB0cy9kZXB0aF9hcnJheS97dHN9IgogICAgbnAuc2F2ZShmaWxlX3BhdGgsIGFycmF5KQogICAgIyBucC5zYXZldHh0KGZpbGVfcGF0aCsiMTEiLGFycmF5KQoKCmRlZiBjb252ZXJ0X2RlcHRoX2ltYWdlKHJvc19pbWFnZSk6CiAgICBicmlkZ2UgPSBDdkJyaWRnZSgpCiAgICAjZ2xvYmFsIGkKICAgIHRyeToKICAgICAgICBkZXB0aF9pbWFnZSA9IGJyaWRnZS5pbWdtc2dfdG9fY3YyKHJvc19pbWFnZSwgZGVzaXJlZF9lbmNvZGluZz0icGFzc3Rocm91Z2giKQogICAgICAgIGRlcHRoX2FycmF5ID0gbnAuYXJyYXkoZGVwdGhfaW1hZ2UsIGR0eXBlPW5wLmZsb2F0MzIpCiAgICAgICAgcHJpbnQoZGVwdGhfYXJyYXkuc2hhcGUpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAKICAgICAgICAjIGdldCBvbmUgcGl4ZWwKICAgICAgICBjZW50ZXJfaWR4ID0gbnAuYXJyYXkoZGVwdGhfYXJyYXkuc2hhcGUpIC8gMgogICAgICAgIHByaW50KCJjZW50ZXIgZGVwdGg6IixkZXB0aF9hcnJheVsyNDAsMzIwXSkKPHxmaW1fZW5kfD4="]
["41613f297dfb2f255ac5cc79c94be564ec04cc8d-2","41613f297dfb2f255ac5cc79c94be564ec04cc8d","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmltcG9ydCByb3NweQppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRpbWUKZnJvbSBjdl9icmlkZ2UgaW1wb3J0IEN2QnJpZGdlLCBDdkJyaWRnZUVycm9yCmZyb20gc2Vuc29yX21zZ3MubXNnIGltcG9ydCBJbWFnZQpmcm9tIFBJTCBpbXBvcnQgSW1hZ2UgYXMgcGkKCmRlZiBzYXZlX2RlcHRoX2RhdGEoYXJyYXksIHRzKToKICAgIGZpbGVfcGF0aCA9IGYiL2hvbWUvcHpsdS9wNDUwL3NyYy9jbWRfdmlkZW8vc2NyaXB0cy9kZXB0aF9hcnJheS97dHN9IgogICAgbnAuc2F2ZShmaWxlX3BhdGgsIGFycmF5KQogICAgIyBucC5zYXZldHh0KGZpbGVfcGF0aCsiMTEiLGFycmF5KQoKCmRlZiBjb252ZXJ0X2RlcHRoX2ltYWdlKHJvc19pbWFnZSk6CiAgICBicmlkZ2UgPSBDdkJyaWRnZSgpCiAgICAjZ2xvYmFsIGkKICAgIHRyeToKICAgICAgICBkZXB0aF9pbWFnZSA9IGJyaWRnZS5pbWdtc2dfdG9fY3YyKHJvc19pbWFnZSwgZGVzaXJlZF9lbmNvZGluZz0icGFzc3Rocm91Z2giKQogICAgICAgIGRlcHRoX2FycmF5ID0gbnAuYXJyYXkoZGVwdGhfaW1hZ2UsIGR0eXBlPW5wLmZsb2F0MzIpCiAgICAgICAgcHJpbnQoZGVwdGhfYXJyYXkuc2hhcGUpCiAgICAgICAgCiAgICAgICAgIyBnZXQgb25lIHBpeGVsCjx8ZmltX2hvbGV8PgogICAgICAgIGltID0gaW0uY29udmVydCgiTCIpCiAgICAgICAgCiAgICAgICAgdGltZV9zdGFtcCA9IGYiL2RlcHRoX3t0aW1lLmxvY2FsdGltZSgpLnRtX2hvdXJ9X3t0aW1lLmxvY2FsdGltZSgpLnRtX21pbn1fe3RpbWUubG9jYWx0aW1lKCkudG1fc2VjfSIKICAgICAgICBwcmludCgiQmVnaW4gc2F2ZSBkZXB0aCBpbWFnZSBhbmQgZGF0YS4iKQogICAgICAgICMgc2F2ZSBpbWFnZSBhbmQgZGF0YQogICAgICAgICMjIHNhdmUgZGF0YQogICAgICAgIHNhdmVfZGVwdGhfZGF0YShkZXB0aF9hcnJheSwgdGltZV9zdGFtcCkKICAgICAgICAjIyBzYXZlIGRlcHRoIGltYWdlCiAgICAgICAgaW0uc2F2ZShmIi9ob21lL3B6bHUvcDQ1MC9zcmMvY21kX3ZpZGVvL3NjcmlwdHMvZGVwdGgve3RpbWVfc3RhbXB9LnBuZyIpCiAgICAgICAgcHJpbnQoIlNhdmVkIHN1Y2Nlc3NmdWxseS4iKQogICAgICAgIAogICAgZXhjZXB0IEN2QnJpZGdlRXJyb3IgYXMgZToKICAgICAgICBwcmludChlKQogICAgICAgIApkZWYgcGl4ZWwyZGVwdGgoKToKICAgIHJvc3B5LmluaXRfbm9kZSgibHpoIixhbm9ueW1vdXM9VHJ1ZSkKICAgIHJvc3B5LlN1YnNjcmliZXIoIi9jYW1lcmEvYWxpZ25lZF9kZXB0aF90b19jb2xvci9pbWFnZV9yYXciLCBJbWFnZSwgY2FsbGJhY2s9Y29udmVydF9kZXB0aF9pbWFnZSwgcXVldWVfc2l6ZT0xKQogICAgcm9zcHkuc3BpbigpICMga2VlcAogICAgIyByb3NweS53YWl0X2Zvcl9tZXNzYWdlKCIvY2FtZXJhL2FsaWduZWRfZGVwdGhfdG9fY29sb3IvaW1hZ2VfcmF3IiwgSW1hZ2UpICMgb25seSBvbmNlCiAgICAKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHBpeGVsMmRlcHRoKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICBjZW50ZXJfaWR4ID0gbnAuYXJyYXkoZGVwdGhfYXJyYXkuc2hhcGUpIC8gMgogICAgICAgIHByaW50KCJjZW50ZXIgZGVwdGg6IixkZXB0aF9hcnJheVsyNDAsMzIwXSkKCiAgICAgICAgaW0gPSBwaS5mcm9tYXJyYXkoZGVwdGhfYXJyYXkpCjx8ZmltX2VuZHw+"]
["41ca810eb1ca42196425b834890515abf2e20d0c-1","41ca810eb1ca42196425b834890515abf2e20d0c","PHxmaW1fcHJlZml4fD4KIiIiRmluZCB0aGUgb3JkZXIgb2YgaGl0cyBpbiBhIGdyb3VuZCB0cnV0aCB0cmFjay4KCk1ldGhvZHMgYXJlIGluY2x1ZGVkIHRvIGdlbmVyYXRlIGRhdGFmcmFtZXMgaGF2aW5nIGNvbHVtbnMgWydwYXJ0aWNsZV9pZCcsICdoaXRfaWQnLAonaGl0X29yZGVyJ10gYW5kIHdyaXRlIHRoZSByZXN1bHRzIHRvIGNzdi4KIiIiCgpfX2F1dGhvcnNfXyA9IFsnVHJlbnRvbiBPc2Jvcm4nXQoKaW1wb3J0IHN5cwppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBudW1weSBhcyBucAoKdHJhY2ttbF9wYXRoID0gJy9ob21lL2VjMi11c2VyL1NhZ2VNYWtlci9UcmFja01MJwppZiB0cmFja21sX3BhdGggbm90IGluIHN5cy5wYXRoOgogICAgc3lzLnBhdGguYXBwZW5kKHRyYWNrbWxfcGF0aCkKICAgIApmcm9tIGhlbHBlcl9mdW5jdGlvbnMuZmlsZV91dGlsaXRpZXMgaW1wb3J0IGZpbGVfdXJsCgoKZGVmIHdyaXRlX2hpdF9vcmRlcnNfY3N2KGV2ZW50X2lkKToKICAgICIiIldyaXRlcyBoaXRfb3JkZXIgY3N2IGZvciBhbiBldmVudC4iIiIKICAgIGdlbmVyYXRlX2hpdF9vcmRlcnMoZXZlbnRfaWQpLnRvX2NzdihmaWxlX3VybCgnaGl0X29yZGVycycsIGV2ZW50X2lkKSwgaW5kZXg9RmFsc2UpCgpkZWYgZ2VuZXJhdGVfaGl0X29yZGVycyhldmVudF9pZCk6CiAgICAiIiJHZW5lcmF0ZXMgaGl0X29yZGVyIGRhdGFmcmFtZSBmb3IgYW4gZXZlbnQuCiAgICAKICAgIFdoZW4gZmluaXNoZWQsIHByaW50cyB0aGUgbnVtYmVyIG9mIHZhbGlkIHBhcnRpY2xlcyBhbmQgaGl0cyBhcyB3ZWxsIGFzIHRoZSBudW1iZXIgYW5kCiAgICBwZXJjZW50YWdlIG9mIHBhcnRpY2xlcyB3aGljaCB3ZXJlIHN1Y2Nlc3NmdWxseSBwbGFjZWQgaW4gb3JkZXIuCiAgICAiIiIKICAgICMgbG9hZCB0cnV0aCBmaWxlLgogICAgdHJ1dGggPSBwZC5yZWFkX2NzdihmaWxlX3VybCgndHJ1dGgnLCBldmVudF9pZCkpCiAgICAKICAgIHRydXRoID0gdHJ1dGhbdHJ1dGgud2VpZ2h0ID4gMC5dCiAgICAKICAgIHBhcnRpY2xlX3dlaWdodCA9IHRydXRoLmdyb3VwYnkoJ3BhcnRpY2xlX2lkJylbJ3dlaWdodCddLnRyYW5zZm9ybSgnc3VtJykKICAgIHRydXRoLmxvY1s6LCAnd2VpZ2h0X29yZGVyJ10gPSB0cnV0aC53ZWlnaHQvcGFydGljbGVfd2VpZ2h0CiAgICBkZWwgcGFydGljbGVfd2VpZ2h0CiAgICAKICAgIHRydXRoID0gdHJ1dGhbWydwYXJ0aWNsZV9pZCcsICdoaXRfaWQnLCAndHonLCAndHB6JywgJ3dlaWdodF9vcmRlciddXQogICAgCiAgICAjIGNyZWF0ZSB6X29yZGVyX2RpbS4gVGhpcyBpcyB0eiBpZiB0aGUgei1kaW1lbnNpb24gb2YgdGhlIHBhcnRpY2xlJ3MgYXZlcmFnZSB0cmFqZWN0b3J5CiAgICAjIGlzIHBvc2l0aXZlIGFuZCAtdHogb3RoZXJ3aXNlLgogICAgel9kaXJlY3Rpb24gPSBucC5zaWduKHRydXRoLmdyb3VwYnkoJ3BhcnRpY2xlX2lkJykudHB6LnRyYW5zZm9ybSgnbWVhbicpKQogICAgdHJ1dGgubG9jWzosICd6X29yZGVyX2RpbSddID0gel9kaXJlY3Rpb24qdHJ1dGgudHoKICAgIHRydXRoLmRyb3AoWyd0eicsICd0cHonXSwgYXhpcz0xLCBpbnBsYWNlPVRydWUpCiAgICBkZWwgel9kaXJlY3Rpb24KICAgIAogICAgIyBjcmVhdGUgaGl0X29yZGVyIGNvbHVtbi4KICAgIHRydXRoLmxvY1s6LCAnaGl0X29yZGVyJ10gPSB0cnV0aC5ncm91cGJ5KCdwYXJ0aWNsZV9pZCcpWyd6X29yZGVyX2RpbSddLnJhbmsoCiAgICAgICAgbWV0aG9kPSdmaXJzdCcsCiAgICAgICAgYXNjZW5kaW5nPVRydWUKICAgICkuYXN0eXBlKGludCkKICAgIHRydXRoLmRyb3AoJ3pfb3JkZXJfZGltJywgYXhpcz0xLCBpbnBsYWNlPVRydWUpCgogICAgIyBzb3J0IGJ5IHBhcnRpY2xlX2lkIGFuZCBoaXRfb3JkZXIuCiAgICB0cnV0aC5zb3J0X3ZhbHVlcyhbJ3BhcnRpY2xlX2lkJywgJ2hpdF9vcmRlciddLCBpbnBsYWNlPVRydWUpCiAgICAKICAgIHRydXRoLmxvY1s6LCAndHJhY2tfbGVuZ3RoJ10gPSB0cnV0aC5ncm91cGJ5KCdwYXJ0aWNsZV9pZCcpLmhpdF9pZC50cmFuc2Zvcm0oJ2NvdW50JykKICAgIHRydWVfd2VpZ2h0X29yZGVyID0gdHJ1dGguZ3JvdXBieShbJ3RyYWNrX2xlbmd0aCcsICdoaXRfb3JkZXInXSkud2VpZ2h0X29yZGVyLm1lZGlhbigpCiAgICB0cnV0aC5kcm9wKCd0cmFja19sZW5ndGgnLCBheGlzPTEsIGlucGxhY2U9VHJ1ZSkKICAgIAogICAgIyBpZGVudGlmeSBhbmQgcmVtb3ZlIHBhcnRpY2xlcyB3aG9zZSBoaXQgb3JkZXIgaXMgaW5jb3JyZWN0LgogICAgIyBwcmludCgndHJ1dGguZ3JvdXBieSBwYXJ0aWNsZScsIHRydXRoLmdyb3VwYnkoJ3BhcnRpY2xlX2lkJykudmFsdWVzKQogICAgcGFydGljbGVzX2luX29yZGVyID0gdHJ1dGguZ3JvdXBieSgncGFydGljbGVfaWQnKS5hcHBseShfY29ycmVjdF9vcmRlcih0cnVlX3dlaWdodF9vcmRlcikpCiAgICAKICAgIHRvdGFsX251bV9wYXJ0aWNsZXMgPSBsZW4ocGFydGljbGVzX2luX29yZGVyKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBtYXNrID0gcGFydGljbGVzX2luX29yZGVyLmxvY1t0cnV0aC5wYXJ0aWNsZV9pZF0udmFsdWVzCiAgICB0cnV0aCA9IHRydXRoW21hc2tdCiAgICBudW1fZ29vZF9wYXJ0aWNsZXMgPSBsZW4odHJ1dGgucGFydGljbGVfaWQudW5pcXVlKCkpCiAgICAKPHxmaW1fZW5kfD4="]
["41ca810eb1ca42196425b834890515abf2e20d0c-2","41ca810eb1ca42196425b834890515abf2e20d0c","PHxmaW1fcHJlZml4fD4KIiIiRmluZCB0aGUgb3JkZXIgb2YgaGl0cyBpbiBhIGdyb3VuZCB0cnV0aCB0cmFjay4KCk1ldGhvZHMgYXJlIGluY2x1ZGVkIHRvIGdlbmVyYXRlIGRhdGFmcmFtZXMgaGF2aW5nIGNvbHVtbnMgWydwYXJ0aWNsZV9pZCcsICdoaXRfaWQnLAonaGl0X29yZGVyJ10gYW5kIHdyaXRlIHRoZSByZXN1bHRzIHRvIGNzdi4KIiIiCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cl9fYXV0aG9yc19fID0gWydUcmVudG9uIE9zYm9ybiddCgppbXBvcnQgc3lzCmltcG9ydCBwYW5kYXMgYXMgcGQKPHxmaW1fZW5kfD4="]
["daa0c738248d0cac736005fc7047e7b5e2e8895b-1","daa0c738248d0cac736005fc7047e7b5e2e8895b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5Z2FtZQppbXBvcnQgbWF0aAppbXBvcnQgcmFuZG9tCmltcG9ydCBvcwpmcm9tIHB5Z2FtZS5sb2NhbHMgaW1wb3J0ICoKCiMgRGVmaW5lIHNvbWUgY29sb3JzCkJMQUNLID0gKDAsIDAsIDApCldISVRFID0gKDI1NSwgMjU1LCAyNTUpClJFRCA9ICgyNTUsIDAsIDApCkJMVUUgPSAoMCwgMCwgMjU1KQoKIyBTZXQgdGhlIGhlaWdodCBhbmQgd2lkdGggb2YgdGhlIHNjcmVlbgpTQ1JFRU5fV0lEVEggPSA5MDAKU0NSRUVOX0hFSUdIVCA9IDcwMAoKCmNsYXNzIEJsb2NrKHB5Z2FtZS5zcHJpdGUuU3ByaXRlKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgY29sb3IpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQoKICAgICAgICBzZWxmLmltYWdlID0gcHlnYW1lLlN1cmZhY2UoWzIwLCAxNV0pCiAgICAgICAgc2VsZi5pbWFnZS5maWxsKGNvbG9yKQoKICAgICAgICBzZWxmLmxlZnRfYm91bmRhcnkgPSAwCiAgICAgICAgc2VsZi5yaWdodF9ib3VuZGFyeSA9IDAKICAgICAgICBzZWxmLnRvcF9ib3VuZGFyeSA9IDAKICAgICAgICBzZWxmLmJvdHRvbV9ib3VuZGFyeSA9IDAKCiAgICAgICAgIyBJbnN0YW5jZSB2YXJpYWJsZXMgZm9yIG91ciBjdXJyZW50IHNwZWVkIGFuZCBkaXJlY3Rpb24KICAgICAgICBzZWxmLmNoYW5nZV94ID0gMAogICAgICAgIHNlbGYuY2hhbmdlX3kgPSAwCgogICAgICAgIHNlbGYucmVjdCA9IHNlbGYuaW1hZ2UuZ2V0X3JlY3QoKQoKICAgIGRlZiB1cGRhdGUoc2VsZik6CiAgICAgICAgc2VsZi5yZWN0LnggKz0gc2VsZi5jaGFuZ2VfeAogICAgICAgIHNlbGYucmVjdC55ICs9IHNlbGYuY2hhbmdlX3kKCiAgICAgICAgaWYgc2VsZi5yZWN0LnJpZ2h0ID49IHNlbGYucmlnaHRfYm91bmRhcnkgb3Igc2VsZi5yZWN0LmxlZnQgPD0gc2VsZi5sZWZ0X2JvdW5kYXJ5OgogICAgICAgICAgICBzZWxmLmNoYW5nZV94ICo9IC0xCgogICAgICAgIGlmIHNlbGYucmVjdC5ib3R0b20gPj0gc2VsZi5ib3R0b21fYm91bmRhcnkgb3Igc2VsZi5yZWN0LnRvcCA8PSBzZWxmLnRvcF9ib3VuZGFyeToKICAgICAgICAgICAgc2VsZi5jaGFuZ2VfeSAqPSAtMQoKCmNsYXNzIFBsYXllcihweWdhbWUuc3ByaXRlLlNwcml0ZSk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQoKICAgICAgICBzZWxmLmltYWdlID0gcHlnYW1lLlN1cmZhY2UoWzIwLCAyMF0pCiAgICAgICAgc2VsZi5pbWFnZS5maWxsKEJMVUUpCiAgICAgICAgc2VsZi5yZWN0ID0gc2VsZi5pbWFnZS5nZXRfcmVjdCgpCiAgICAgICAgc2VsZi5yZWN0LnggPSBTQ1JFRU5fV0lEVEggLy8gMgogICAgICAgIHNlbGYucmVjdC55ID0gU0NSRUVOX0hFSUdIVCAtIDUwCgogICAgZGVmIHVwZGF0ZShzZWxmKToKCiAgICAgICAga2V5cyA9IHB5Z2FtZS5rZXkuZ2V0X3ByZXNzZWQoKQogICAgICAgIGlmIGtleXNbcHlnYW1lLktfYV06CiAgICAgICAgICAgIHNlbGYubW92ZV9sZWZ0KCkKICAgICAgICBlbGlmIGtleXNbcHlnYW1lLktfZF06CiAgICAgICAgICAgIHNlbGYubW92ZV9yaWdodCgpCiAgICAgICAgZWxpZiBrZXlzW3B5Z2FtZS5LX3ddOgogICAgICAgICAgICBzZWxmLm1vdmVfdXAoKQogICAgICAgIGVsaWYga2V5c1tweWdhbWUuS19zXToKICAgICAgICAgICAgc2VsZi5tb3ZlX2Rvd24oKQoKICAgIGRlZiBtb3ZlX2xlZnQoc2VsZik6CiAgICAgICAgaWYgc2VsZi5yZWN0LnggPiAwOgogICAgICAgICAgICBzZWxmLnJlY3QueCAtPSAxMAoKICAgIGRlZiBtb3ZlX3JpZ2h0KHNlbGYpOgogICAgICAgIGlmIHNlbGYucmVjdC54IDwgU0NSRUVOX1dJRFRIIC0gMjA6CiAgICAgICAgICAgIHNlbGYucmVjdC54ICs9IDEwCgogICAgZGVmIG1vdmVfdXAoc2VsZik6CiAgICAgICAgaWYgc2VsZi5yZWN0LnkgPiAwOgogICAgICAgICAgICBzZWxmLnJlY3QueSAtPSAxMAoKICAgIGRlZiBtb3ZlX2Rvd24oc2VsZik6CiAgICAgICAgaWYgc2VsZi5yZWN0LnkgPCBTQ1JFRU5fSEVJR0hUIC0gMjA6CiAgICAgICAgICAgIHNlbGYucmVjdC55ICs9IDEwCgoKY2xhc3MgUHJvamVjdGlsZShweWdhbWUuc3ByaXRlLlNwcml0ZSk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0X3gsIHN0YXJ0X3ksIGRlc3RfeCwgZGVzdF95KToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKCiAgICAgICAgc2VsZi5pbWFnZSA9IHB5Z2FtZS5TdXJmYWNlKFs0LCAxMF0pCiAgICAgICAgc2VsZi5pbWFnZS5maWxsKEJMVUUpCiAgICAgICAgc2VsZi5yZWN0ID0gc2VsZi5pbWFnZS5nZXRfcmVjdCgpCgogICAgICAgICMgTW92ZSB0aGUgYnVsbGV0IHRvIG91ciBzdGFydGluZyBsb2NhdGlvbgogICAgICAgIHNlbGYucmVjdC54ID0gc3RhcnRfeAogICAgICAgIHNlbGYucmVjdC55ID0gc3RhcnRfeQoKICAgICAgICAjIEJlY2F1c2UgcmVjdC54IGFuZCByZWN0LnkgYXJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkCiAgICAgICAgIyB0byBpbnRlZ2Vycywgd2UgbmVlZCB0byBjcmVhdGUgZGlmZmVyZW50IHZhcmlhYmxlcyB0aGF0CiAgICAgICAgIyBzdG9yZSB0aGUgbG9jYXRpb24gYXMgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gSW50ZWdlcnMKICAgICAgICAjIGFyZSBub3QgYWNjdXJhdGUgZW5vdWdoIGZvciBhaW1pbmcuCiAgICAgICAgc2VsZi5mbG9hdGluZ19wb2ludF94ID0gc3RhcnRfeAogICAgICAgIHNlbGYuZmxvYXRpbmdfcG9pbnRfeSA9IHN0YXJ0X3kKCiAgICAgICAgIyBDYWxjdWxhdGlvbiB0aGUgYW5nbGUgaW4gcmFkaWFucyBiZXR3ZWVuIHRoZSBzdGFydCBwb2ludHMKICAgICAgICAjIGFuZCBlbmQgcG9pbnRzLiBUaGlzIGlzIHRoZSBhbmdsZSB0aGUgYnVsbGV0IHdpbGwgdHJhdmVsLgogICAgICAgIHhfZGlmZiA9IGRlc3RfeCAtIHN0YXJ0X3gKICAgICAgICB5X2RpZmYgPSBkZXN0X3kgLSBzdGFydF95CiAgICAgICAgYW5nbGUgPSBtYXRoLmF0YW4yKHlfZGlmZiwgeF9kaWZmKQoKICAgICAgICAjIFRha2luZyBpbnRvIGFjY291bnQgdGhlIGFuZ2xlLCBjYWxjdWxhdGUgb3VyIGNoYW5nZV94CiAgICAgICAgIyBhbmQgY2hhbmdlX3kuIFZlbG9jaXR5IGlzIGhvdyBmYXN0IHRoZSBidWxsZXQgdHJhdmVscy4KICAgICAgICB2ZWxvY2l0eSA9IDUKICAgICAgICBzZWxmLmNoYW5nZV94ID0gbWF0aC5jb3MoYW5nbGUpICogdmVsb2NpdHkKICAgICAgICBzZWxmLmNoYW5nZV95ID0gbWF0aC5zaW4oYW5nbGUpICogdmVsb2NpdHkKCiAgICBkZWYgdXBkYXRlKHNlbGYpOgogICAgICAgICMgVGhlIGZsb2F0aW5nIHBvaW50IHggYW5kIHkgaG9sZCBvdXIgbW9yZSBhY2N1cmF0ZSBsb2NhdGlvbi4KICAgICAgICBzZWxmLmZsb2F0aW5nX3BvaW50X3kgKz0gc2VsZi5jaGFuZ2VfeQogICAgICAgIHNlbGYuZmxvYXRpbmdfcG9pbnRfeCArPSBzZWxmLmNoYW5nZV94CgogICAgICAgICMgVGhlIHJlY3QueCBhbmQgcmVjdC55IGFyZSBjb252ZXJ0ZWQgdG8gaW50ZWdlcnMuCiAgICAgICAgc2VsZi5yZWN0LnkgPSBpbnQoc2VsZi5mbG9hdGluZ19wb2ludF95KQogICAgICAgIHNlbGYucmVjdC54ID0gaW50KHNlbGYuZmxvYXRpbmdfcG9pbnRfeCkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAjIElmIHRoZSBidWxsZXQgZmxpZXMgb2YgdGhlIHNjcmVlbiwgZ2V0IHJpZCBvZiBpdC4KICAgICAgICBpZiBzZWxmLnJlY3QueCA8IDAgb3Igc2VsZi5yZWN0LnggPiBTQ1JFRU5fV0lEVEggb3Igc2VsZi5yZWN0LnkgPCAwIG9yIHNlbGYucmVjdC55ID4gU0NSRUVOX0hFSUdIVDoKICAgICAgICAgICAgc2VsZi5raWxsKCkKCjx8ZmltX2VuZHw+"]
["daa0c738248d0cac736005fc7047e7b5e2e8895b-2","daa0c738248d0cac736005fc7047e7b5e2e8895b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5Z2FtZQppbXBvcnQgbWF0aAppbXBvcnQgcmFuZG9tCmltcG9ydCBvcwpmcm9tIHB5Z2FtZS5sb2NhbHMgaW1wb3J0ICoKCiMgRGVmaW5lIHNvbWUgY29sb3JzCkJMQUNLID0gKDAsIDAsIDApCldISVRFID0gKDI1NSwgMjU1LCAyNTUpClJFRCA9ICgyNTUsIDAsIDApCkJMVUUgPSAoMCwgMCwgMjU1KQoKIyBTZXQgdGhlIGhlaWdodCBhbmQgd2lkdGggb2YgdGhlIHNjcmVlbgpTQ1JFRU5fV0lEVEggPSA5MDAKU0NSRUVOX0hFSUdIVCA9IDcwMAoKCmNsYXNzIEJsb2NrKHB5Z2FtZS5zcHJpdGUuU3ByaXRlKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgY29sb3IpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQoKICAgICAgICBzZWxmLmltYWdlID0gcHlnYW1lLlN1cmZhY2UoWzIwLCAxNV0pCiAgICAgICAgc2VsZi5pbWFnZS5maWxsKGNvbG9yKQoKICAgICAgICBzZWxmLmxlZnRfYm91bmRhcnkgPSAwCiAgICAgICAgc2VsZi5yaWdodF9ib3VuZGFyeSA9IDAKICAgICAgICBzZWxmLnRvcF9ib3VuZGFyeSA9IDAKICAgICAgICBzZWxmLmJvdHRvbV9ib3VuZGFyeSA9IDAKCiAgICAgICAgIyBJbnN0YW5jZSB2YXJpYWJsZXMgZm9yIG91ciBjdXJyZW50IHNwZWVkIGFuZCBkaXJlY3Rpb24KICAgICAgICBzZWxmLmNoYW5nZV94ID0gMAogICAgICAgIHNlbGYuY2hhbmdlX3kgPSAwCgogICAgICAgIHNlbGYucmVjdCA9IHNlbGYuaW1hZ2UuZ2V0X3JlY3QoKQoKICAgIGRlZiB1cGRhdGUoc2VsZik6CiAgICAgICAgc2VsZi5yZWN0LnggKz0gc2VsZi5jaGFuZ2VfeAogICAgICAgIHNlbGYucmVjdC55ICs9IHNlbGYuY2hhbmdlX3kKCiAgICAgICAgaWYgc2VsZi5yZWN0LnJpZ2h0ID49IHNlbGYucmlnaHRfYm91bmRhcnkgb3Igc2VsZi5yZWN0LmxlZnQgPD0gc2VsZi5sZWZ0X2JvdW5kYXJ5OgogICAgICAgICAgICBzZWxmLmNoYW5nZV94ICo9IC0xCgogICAgICAgIGlmIHNlbGYucmVjdC5ib3R0b20gPj0gc2VsZi5ib3R0b21fYm91bmRhcnkgb3Igc2VsZi5yZWN0LnRvcCA8PSBzZWxmLnRvcF9ib3VuZGFyeToKICAgICAgICAgICAgc2VsZi5jaGFuZ2VfeSAqPSAtMQoKCmNsYXNzIFBsYXllcihweWdhbWUuc3ByaXRlLlNwcml0ZSk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQoKICAgICAgICBzZWxmLmltYWdlID0gcHlnYW1lLlN1cmZhY2UoWzIwLCAyMF0pCiAgICAgICAgc2VsZi5pbWFnZS5maWxsKEJMVUUpCiAgICAgICAgc2VsZi5yZWN0ID0gc2VsZi5pbWFnZS5nZXRfcmVjdCgpCiAgICAgICAgc2VsZi5yZWN0LnggPSBTQ1JFRU5fV0lEVEggLy8gMgogICAgICAgIHNlbGYucmVjdC55ID0gU0NSRUVOX0hFSUdIVCAtIDUwCgogICAgZGVmIHVwZGF0ZShzZWxmKToKCiAgICAgICAga2V5cyA9IHB5Z2FtZS5rZXkuZ2V0X3ByZXNzZWQoKQogICAgICAgIGlmIGtleXNbcHlnYW1lLktfYV06CiAgICAgICAgICAgIHNlbGYubW92ZV9sZWZ0KCkKICAgICAgICBlbGlmIGtleXNbcHlnYW1lLktfZF06CiAgICAgICAgICAgIHNlbGYubW92ZV9yaWdodCgpCiAgICAgICAgZWxpZiBrZXlzW3B5Z2FtZS5LX3ddOgogICAgICAgICAgICBzZWxmLm1vdmVfdXAoKQogICAgICAgIGVsaWYga2V5c1tweWdhbWUuS19zXToKICAgICAgICAgICAgc2VsZi5tb3ZlX2Rvd24oKQoKICAgIGRlZiBtb3ZlX2xlZnQoc2VsZik6CiAgICAgICAgaWYgc2VsZi5yZWN0LnggPiAwOgogICAgICAgICAgICBzZWxmLnJlY3QueCAtPSAxMAoKICAgIGRlZiBtb3ZlX3JpZ2h0KHNlbGYpOgogICAgICAgIGlmIHNlbGYucmVjdC54IDwgU0NSRUVOX1dJRFRIIC0gMjA6CiAgICAgICAgICAgIHNlbGYucmVjdC54ICs9IDEwCgogICAgZGVmIG1vdmVfdXAoc2VsZik6CiAgICAgICAgaWYgc2VsZi5yZWN0LnkgPiAwOgogICAgICAgICAgICBzZWxmLnJlY3QueSAtPSAxMAoKICAgIGRlZiBtb3ZlX2Rvd24oc2VsZik6CiAgICAgICAgaWYgc2VsZi5yZWN0LnkgPCBTQ1JFRU5fSEVJR0hUIC0gMjA6CiAgICAgICAgICAgIHNlbGYucmVjdC55ICs9IDEwCgoKY2xhc3MgUHJvamVjdGlsZShweWdhbWUuc3ByaXRlLlNwcml0ZSk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0X3gsIHN0YXJ0X3ksIGRlc3RfeCwgZGVzdF95KToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKCiAgICAgICAgc2VsZi5pbWFnZSA9IHB5Z2FtZS5TdXJmYWNlKFs0LCAxMF0pCiAgICAgICAgc2VsZi5pbWFnZS5maWxsKEJMVUUpCiAgICAgICAgc2VsZi5yZWN0ID0gc2VsZi5pbWFnZS5nZXRfcmVjdCgpCgogICAgICAgICMgTW92ZSB0aGUgYnVsbGV0IHRvIG91ciBzdGFydGluZyBsb2NhdGlvbgogICAgICAgIHNlbGYucmVjdC54ID0gc3RhcnRfeAogICAgICAgIHNlbGYucmVjdC55ID0gc3RhcnRfeQoKICAgICAgICAjIEJlY2F1c2UgcmVjdC54IGFuZCByZWN0LnkgYXJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkCiAgICAgICAgIyB0byBpbnRlZ2Vycywgd2UgbmVlZCB0byBjcmVhdGUgZGlmZmVyZW50IHZhcmlhYmxlcyB0aGF0CiAgICAgICAgIyBzdG9yZSB0aGUgbG9jYXRpb24gYXMgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gSW50ZWdlcnMKICAgICAgICAjIGFyZSBub3QgYWNjdXJhdGUgZW5vdWdoIGZvciBhaW1pbmcuCiAgICAgICAgc2VsZi5mbG9hdGluZ19wb2ludF94ID0gc3RhcnRfeAogICAgICAgIHNlbGYuZmxvYXRpbmdfcG9pbnRfeSA9IHN0YXJ0X3kKCiAgICAgICAgIyBDYWxjdWxhdGlvbiB0aGUgYW5nbGUgaW4gcmFkaWFucyBiZXR3ZWVuIHRoZSBzdGFydCBwb2ludHMKICAgICAgICAjIGFuZCBlbmQgcG9pbnRzLiBUaGlzIGlzIHRoZSBhbmdsZSB0aGUgYnVsbGV0IHdpbGwgdHJhdmVsLgogICAgICAgIHhfZGlmZiA9IGRlc3RfeCAtIHN0YXJ0X3gKICAgICAgICB5X2RpZmYgPSBkZXN0X3kgLSBzdGFydF95CiAgICAgICAgYW5nbGUgPSBtYXRoLmF0YW4yKHlfZGlmZiwgeF9kaWZmKQoKICAgICAgICAjIFRha2luZyBpbnRvIGFjY291bnQgdGhlIGFuZ2xlLCBjYWxjdWxhdGUgb3VyIGNoYW5nZV94CiAgICAgICAgIyBhbmQgY2hhbmdlX3kuIFZlbG9jaXR5IGlzIGhvdyBmYXN0IHRoZSBidWxsZXQgdHJhdmVscy4KICAgICAgICB2ZWxvY2l0eSA9IDUKICAgICAgICBzZWxmLmNoYW5nZV94ID0gbWF0aC5jb3MoYW5nbGUpICogdmVsb2NpdHkKICAgICAgICBzZWxmLmNoYW5nZV95ID0gbWF0aC5zaW4oYW5nbGUpICogdmVsb2NpdHkKCiAgICBkZWYgdXBkYXRlKHNlbGYpOgogICAgICAgICMgVGhlIGZsb2F0aW5nIHBvaW50IHggYW5kIHkgaG9sZCBvdXIgbW9yZSBhY2N1cmF0ZSBsb2NhdGlvbi4KICAgICAgICBzZWxmLmZsb2F0aW5nX3BvaW50X3kgKz0gc2VsZi5jaGFuZ2VfeQogICAgICAgIHNlbGYuZmxvYXRpbmdfcG9pbnRfeCArPSBzZWxmLmNoYW5nZV94CgogICAgICAgICMgVGhlIHJlY3QueCBhbmQgcmVjdC55IGFyZSBjb252ZXJ0ZWQgdG8gaW50ZWdlcnMuCiAgICAgICAgc2VsZi5yZWN0LnkgPSBpbnQoc2VsZi5mbG9hdGluZ19wb2ludF95KQogICAgICAgIHNlbGYucmVjdC54ID0gaW50KHNlbGYuZmxvYXRpbmdfcG9pbnRfeCkKCiAgICAgICAgIyBJZiB0aGUgYnVsbGV0IGZsaWVzIG9mIHRoZSBzY3JlZW4sIGdldCByaWQgb2YgaXQuCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBpZiBzZWxmLnJlY3QueCA8IDAgb3Igc2VsZi5yZWN0LnggPiBTQ1JFRU5fV0lEVEggb3Igc2VsZi5yZWN0LnkgPCAwIG9yIHNlbGYucmVjdC55ID4gU0NSRUVOX0hFSUdIVDoKICAgICAgICAgICAgc2VsZi5raWxsKCkKCgo8fGZpbV9lbmR8Pg=="]
["daa0c738248d0cac736005fc7047e7b5e2e8895b-3","daa0c738248d0cac736005fc7047e7b5e2e8895b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5Z2FtZQppbXBvcnQgbWF0aAppbXBvcnQgcmFuZG9tCmltcG9ydCBvcwpmcm9tIHB5Z2FtZS5sb2NhbHMgaW1wb3J0ICoKCiMgRGVmaW5lIHNvbWUgY29sb3JzCkJMQUNLID0gKDAsIDAsIDApCldISVRFID0gKDI1NSwgMjU1LCAyNTUpClJFRCA9ICgyNTUsIDAsIDApCkJMVUUgPSAoMCwgMCwgMjU1KQoKIyBTZXQgdGhlIGhlaWdodCBhbmQgd2lkdGggb2YgdGhlIHNjcmVlbgpTQ1JFRU5fV0lEVEggPSA5MDAKU0NSRUVOX0hFSUdIVCA9IDcwMAoKCmNsYXNzIEJsb2NrKHB5Z2FtZS5zcHJpdGUuU3ByaXRlKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgY29sb3IpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQoKICAgICAgICBzZWxmLmltYWdlID0gcHlnYW1lLlN1cmZhY2UoWzIwLCAxNV0pCiAgICAgICAgc2VsZi5pbWFnZS5maWxsKGNvbG9yKQoKICAgICAgICBzZWxmLmxlZnRfYm91bmRhcnkgPSAwCiAgICAgICAgc2VsZi5yaWdodF9ib3VuZGFyeSA9IDAKICAgICAgICBzZWxmLnRvcF9ib3VuZGFyeSA9IDAKICAgICAgICBzZWxmLmJvdHRvbV9ib3VuZGFyeSA9IDAKCiAgICAgICAgIyBJbnN0YW5jZSB2YXJpYWJsZXMgZm9yIG91ciBjdXJyZW50IHNwZWVkIGFuZCBkaXJlY3Rpb24KICAgICAgICBzZWxmLmNoYW5nZV94ID0gMAogICAgICAgIHNlbGYuY2hhbmdlX3kgPSAwCgogICAgICAgIHNlbGYucmVjdCA9IHNlbGYuaW1hZ2UuZ2V0X3JlY3QoKQoKICAgIGRlZiB1cGRhdGUoc2VsZik6CiAgICAgICAgc2VsZi5yZWN0LnggKz0gc2VsZi5jaGFuZ2VfeAogICAgICAgIHNlbGYucmVjdC55ICs9IHNlbGYuY2hhbmdlX3kKCiAgICAgICAgaWYgc2VsZi5yZWN0LnJpZ2h0ID49IHNlbGYucmlnaHRfYm91bmRhcnkgb3Igc2VsZi5yZWN0LmxlZnQgPD0gc2VsZi5sZWZ0X2JvdW5kYXJ5OgogICAgICAgICAgICBzZWxmLmNoYW5nZV94ICo9IC0xCgogICAgICAgIGlmIHNlbGYucmVjdC5ib3R0b20gPj0gc2VsZi5ib3R0b21fYm91bmRhcnkgb3Igc2VsZi5yZWN0LnRvcCA8PSBzZWxmLnRvcF9ib3VuZGFyeToKICAgICAgICAgICAgc2VsZi5jaGFuZ2VfeSAqPSAtMQoKCmNsYXNzIFBsYXllcihweWdhbWUuc3ByaXRlLlNwcml0ZSk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQoKICAgICAgICBzZWxmLmltYWdlID0gcHlnYW1lLlN1cmZhY2UoWzIwLCAyMF0pCiAgICAgICAgc2VsZi5pbWFnZS5maWxsKEJMVUUpCiAgICAgICAgc2VsZi5yZWN0ID0gc2VsZi5pbWFnZS5nZXRfcmVjdCgpCiAgICAgICAgc2VsZi5yZWN0LnggPSBTQ1JFRU5fV0lEVEggLy8gMgogICAgICAgIHNlbGYucmVjdC55ID0gU0NSRUVOX0hFSUdIVCAtIDUwCgogICAgZGVmIHVwZGF0ZShzZWxmKToKCiAgICAgICAga2V5cyA9IHB5Z2FtZS5rZXkuZ2V0X3ByZXNzZWQoKQogICAgICAgIGlmIGtleXNbcHlnYW1lLktfYV06CiAgICAgICAgICAgIHNlbGYubW92ZV9sZWZ0KCkKICAgICAgICBlbGlmIGtleXNbcHlnYW1lLktfZF06CiAgICAgICAgICAgIHNlbGYubW92ZV9yaWdodCgpCiAgICAgICAgZWxpZiBrZXlzW3B5Z2FtZS5LX3ddOgogICAgICAgICAgICBzZWxmLm1vdmVfdXAoKQogICAgICAgIGVsaWYga2V5c1tweWdhbWUuS19zXToKICAgICAgICAgICAgc2VsZi5tb3ZlX2Rvd24oKQoKICAgIGRlZiBtb3ZlX2xlZnQoc2VsZik6CiAgICAgICAgaWYgc2VsZi5yZWN0LnggPiAwOgogICAgICAgICAgICBzZWxmLnJlY3QueCAtPSAxMAoKICAgIGRlZiBtb3ZlX3JpZ2h0KHNlbGYpOgogICAgICAgIGlmIHNlbGYucmVjdC54IDwgU0NSRUVOX1dJRFRIIC0gMjA6CiAgICAgICAgICAgIHNlbGYucmVjdC54ICs9IDEwCgogICAgZGVmIG1vdmVfdXAoc2VsZik6CiAgICAgICAgaWYgc2VsZi5yZWN0LnkgPiAwOgogICAgICAgICAgICBzZWxmLnJlY3QueSAtPSAxMAoKICAgIGRlZiBtb3ZlX2Rvd24oc2VsZik6CiAgICAgICAgaWYgc2VsZi5yZWN0LnkgPCBTQ1JFRU5fSEVJR0hUIC0gMjA6CiAgICAgICAgICAgIHNlbGYucmVjdC55ICs9IDEwCgoKY2xhc3MgUHJvamVjdGlsZShweWdhbWUuc3ByaXRlLlNwcml0ZSk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0X3gsIHN0YXJ0X3ksIGRlc3RfeCwgZGVzdF95KToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKCiAgICAgICAgc2VsZi5pbWFnZSA9IHB5Z2FtZS5TdXJmYWNlKFs0LCAxMF0pCiAgICAgICAgc2VsZi5pbWFnZS5maWxsKEJMVUUpCiAgICAgICAgc2VsZi5yZWN0ID0gc2VsZi5pbWFnZS5nZXRfcmVjdCgpCgogICAgICAgICMgTW92ZSB0aGUgYnVsbGV0IHRvIG91ciBzdGFydGluZyBsb2NhdGlvbgogICAgICAgIHNlbGYucmVjdC54ID0gc3RhcnRfeAogICAgICAgIHNlbGYucmVjdC55ID0gc3RhcnRfeQoKICAgICAgICAjIEJlY2F1c2UgcmVjdC54IGFuZCByZWN0LnkgYXJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkCiAgICAgICAgIyB0byBpbnRlZ2Vycywgd2UgbmVlZCB0byBjcmVhdGUgZGlmZmVyZW50IHZhcmlhYmxlcyB0aGF0CiAgICAgICAgIyBzdG9yZSB0aGUgbG9jYXRpb24gYXMgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gSW50ZWdlcnMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICMgYXJlIG5vdCBhY2N1cmF0ZSBlbm91Z2ggZm9yIGFpbWluZy4KICAgICAgICBzZWxmLmZsb2F0aW5nX3BvaW50X3ggPSBzdGFydF94CiAgICAgICAgc2VsZi5mbG9hdGluZ19wb2ludF95ID0gc3RhcnRfeQoKPHxmaW1fZW5kfD4="]
["415f29330dc87cc1db9f719dcc18233d6a3ba6d4-1","415f29330dc87cc1db9f719dcc18233d6a3ba6d4","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IEFueSwgR2VuZXJpYywgVHlwZVZhciwgY2FzdApmcm9tIHVuaXR0ZXN0Lm1vY2sgaW1wb3J0IE1hZ2ljTW9jawo8fGZpbV9ob2xlfD4KX1QgPSBUeXBlVmFyKCJfVCIpCgoKQHB5dGVzdC5tYXJrLnVzZWZpeHR1cmVzKCJpbmplY3RfbW9ja2VyX3RvX2NsYXNzIiwgInNlcnZpY2VfZml4dHVyZSIpCmNsYXNzIFNlcnZpY2VUZXN0Rml4dHVyZShHZW5lcmljW19UXSk6CiAgICBfc2VydmljZTogX1QKICAgIG1vY2tlcjogTW9ja2VyRml4dHVyZQoKICAgIGRlZiBjYXN0X21vY2soc2VsZiwgZGVwZW5kZW5jeTogQW55KSAtPiBNYWdpY01vY2s6CiAgICAgICAgcmV0dXJuIGNhc3QoTWFnaWNNb2NrLCBkZXBlbmRlbmN5KQoKCkBweXRlc3QubWFyay51c2VmaXh0dXJlcygiYXBpX2ZpeHR1cmUiKQpjbGFzcyBBcGlTZXJ2aWNlVGVzdEZpeHR1cmUoU2VydmljZVRlc3RGaXh0dXJlW19UXSk6CiAgICByZXF1ZXN0c19nZXRfbW9jazogTWFnaWNNb2NrCjx8ZmltX3N1ZmZpeHw+CgppbXBvcnQgcHl0ZXN0CmZyb20gcHl0ZXN0X21vY2sucGx1Z2luIGltcG9ydCBNb2NrZXJGaXh0dXJlCgo8fGZpbV9lbmR8Pg=="]
["415f29330dc87cc1db9f719dcc18233d6a3ba6d4-2","415f29330dc87cc1db9f719dcc18233d6a3ba6d4","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IEFueSwgR2VuZXJpYywgVHlwZVZhciwgY2FzdApmcm9tIHVuaXR0ZXN0Lm1vY2sgaW1wb3J0IE1hZ2ljTW9jawoKaW1wb3J0IHB5dGVzdApmcm9tIHB5dGVzdF9tb2NrLnBsdWdpbiBpbXBvcnQgTW9ja2VyRml4dHVyZQoKX1QgPSBUeXBlVmFyKCJfVCIpCgoKQHB5dGVzdC5tYXJrLnVzZWZpeHR1cmVzKCJpbmplY3RfbW9ja2VyX3RvX2NsYXNzIiwgInNlcnZpY2VfZml4dHVyZSIpCmNsYXNzIFNlcnZpY2VUZXN0Rml4dHVyZShHZW5lcmljW19UXSk6CiAgICBfc2VydmljZTogX1QKICAgIG1vY2tlcjogTW9ja2VyRml4dHVyZQoKPHxmaW1faG9sZXw+CkBweXRlc3QubWFyay51c2VmaXh0dXJlcygiYXBpX2ZpeHR1cmUiKQpjbGFzcyBBcGlTZXJ2aWNlVGVzdEZpeHR1cmUoU2VydmljZVRlc3RGaXh0dXJlW19UXSk6CiAgICByZXF1ZXN0c19nZXRfbW9jazogTWFnaWNNb2NrCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgY2FzdF9tb2NrKHNlbGYsIGRlcGVuZGVuY3k6IEFueSkgLT4gTWFnaWNNb2NrOgogICAgICAgIHJldHVybiBjYXN0KE1hZ2ljTW9jaywgZGVwZW5kZW5jeSkKCgo8fGZpbV9lbmR8Pg=="]
["415f29330dc87cc1db9f719dcc18233d6a3ba6d4-3","415f29330dc87cc1db9f719dcc18233d6a3ba6d4","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IEFueSwgR2VuZXJpYywgVHlwZVZhciwgY2FzdApmcm9tIHVuaXR0ZXN0Lm1vY2sgaW1wb3J0IE1hZ2ljTW9jawoKaW1wb3J0IHB5dGVzdAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gcHl0ZXN0X21vY2sucGx1Z2luIGltcG9ydCBNb2NrZXJGaXh0dXJlCgpfVCA9IFR5cGVWYXIoIl9UIikKCjx8ZmltX2VuZHw+"]
["82292594a2dbf8dbbcb1650258aacaeada90e437-1","82292594a2dbf8dbbcb1650258aacaeada90e437","PHxmaW1fcHJlZml4fD4KIyDsnbjqs7Xsp4DriqUg7Iuc6rOEIC0gaHR0cHM6Ly93d3cuYWNtaWNwYy5uZXQvcHJvYmxlbS8yNTMwCmhvdXIsIG1pbnV0ZSwgc2Vjb25kID0gbWFwKGludCwgaW5wdXQoKS5zcGxpdCgpKQp0aW1lID0gaW50KGlucHV0KCkpCnNlY29uZCArPSB0aW1lICUgNjAKdGltZSA9IHRpbWUgLy8gNjAKCmlmIHNlY29uZCA+PSA2MDoKICAgIG1pbnV0ZSArPSAxCiAgICBzZWNvbmQgLT0gNjAKCm1pbnV0ZSArPSB0aW1lICUgNjAKdGltZSA9IHRpbWUgLy8gNjAKaWYgbWludXRlID49IDYwOgogICAgaG91ciArPSAxCiAgICBtaW51dGUgLT0gNjAKCmhvdXIgKz0gdGltZSAlIDI0CmlmIGhvdXIgPj0gMjQ6Cjx8ZmltX2hvbGV8PgpwcmludChob3VyLCBtaW51dGUsIHNlY29uZCkKPHxmaW1fc3VmZml4fD4KICAgIGhvdXIgLT0gMjQKPHxmaW1fZW5kfD4="]
["82292594a2dbf8dbbcb1650258aacaeada90e437-2","82292594a2dbf8dbbcb1650258aacaeada90e437","PHxmaW1fcHJlZml4fD4KIyDsnbjqs7Xsp4DriqUg7Iuc6rOEIC0gaHR0cHM6Ly93d3cuYWNtaWNwYy5uZXQvcHJvYmxlbS8yNTMwCmhvdXIsIG1pbnV0ZSwgc2Vjb25kID0gbWFwKGludCwgaW5wdXQoKS5zcGxpdCgpKQp0aW1lID0gaW50KGlucHV0KCkpCnNlY29uZCArPSB0aW1lICUgNjAKdGltZSA9IHRpbWUgLy8gNjAKCmlmIHNlY29uZCA+PSA2MDoKICAgIG1pbnV0ZSArPSAxCiAgICBzZWNvbmQgLT0gNjAKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KbWludXRlICs9IHRpbWUgJSA2MAp0aW1lID0gdGltZSAvLyA2MAppZiBtaW51dGUgPj0gNjA6CiAgICBob3VyICs9IDEKPHxmaW1fZW5kfD4="]
["418901f166f8dc57c7083942bd9d5e7e27402e9b-1","418901f166f8dc57c7083942bd9d5e7e27402e9b","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcHJpbnQoImlnb3Igc291emEiKQo8fGZpbV9lbmR8Pg=="]
["418901f166f8dc57c7083942bd9d5e7e27402e9b-2","418901f166f8dc57c7083942bd9d5e7e27402e9b","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcHJpbnQoImlnb3Igc291emEiKQo8fGZpbV9lbmR8Pg=="]
["418901f166f8dc57c7083942bd9d5e7e27402e9b-3","418901f166f8dc57c7083942bd9d5e7e27402e9b","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcHJpbnQoImlnb3Igc291emEiKQo8fGZpbV9lbmR8Pg=="]
["173cad662d4a3cd0075a6b8cc01603d33828b54b-1","173cad662d4a3cd0075a6b8cc01603d33828b54b","PHxmaW1fcHJlZml4fD4KCiNUaGlzIHNjcmlwdCBidWlsZHMgYSBuZXR3b3JrIG1hbnVhbGx5IHVzaW5nIG5ldHdvcmsuYWRkLCBzbyB0aGF0IGl0CiNoYXMgdHdvIDMtYnVzIGRpc2Nvbm5lY3RlZCBBQyBuZXR3b3JrcywgY29ubmVjdGVkIGJ5IEhWREMKI2xpbmtzLiBTdG9yYWdlIGFuZCBnZW5lcmF0aW9uICh3aW5kIGFuZCBnYXMpIGlzIHRoZW4gb3B0aW1pc2VkLgoKI1RoZSBuZXR3b3JrIGlzIHRoZW4gd3JpdHRlbiBhcyBDU1YgZmlsZXMgdG8gY3N2X2ZvbGRlcl9uYW1lLgoKaW1wb3J0IHB5cHNhCgppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHBhbmRhcyBhcyBwZAoKaW1wb3J0IG51bXB5IGFzIG5wCgoKCiNlbnN1cmUgdGhlIHNhbWUgcmFuZG9tIG51bWJlciBhcmUgcHJvZHVjZWQgd2hlbiByZWZhY3RvcmluZwpucC5yYW5kb20uc2VlZCgxKQoKCgpjc3ZfZm9sZGVyX25hbWUgPSAnb3BmLXN0b3JhZ2UtZGF0YScKCgoKI0J1aWxkIHRoZSBOZXR3b3JrIG9iamVjdCwgd2hpY2ggc3RvcmVzIGFsbCBvdGhlciBvYmplY3RzCgpuZXR3b3JrID0gcHlwc2EuTmV0d29yaygpCgojQnVpbGQgdGhlIHNuYXBzaG90cyB3ZSBjb25zaWRlciBmb3IgdGhlIGZpcnN0IFQgaG91cnMgaW4gMjAxNQoKVCA9IDEyCgpuZXR3b3JrLnNldF9zbmFwc2hvdHMocGQudG9fZGF0ZXRpbWUoW2RhdGV0aW1lLmRhdGV0aW1lKDIwMTUsMSwxKSArIGRhdGV0aW1lLnRpbWVkZWx0YShob3Vycz1pKSBmb3IgaSBpbiByYW5nZShUKV0pKQoKI2xldCBlYWNoIHNuYXBzaG90IHJlcHJlc2VudCAzIGhvdXJzCm5ldHdvcmsuc25hcHNob3Rfd2VpZ2h0aW5ncyA9IHBkLlNlcmllcygzLixpbmRleD1uZXR3b3JrLnNuYXBzaG90cykKCnByaW50KCJuZXR3b3JrOiIsbmV0d29yaykKcHJpbnQoInNuYXBzaG90czoiLG5ldHdvcmsuc25hcHNob3RzKQoKCiNhZGQgZnVlbCB0eXBlcwpuZXR3b3JrLmFkZCgiQ2FycmllciIsImdhcyIsY28yX2VtaXNzaW9ucz0wLjI0KQpuZXR3b3JrLmFkZCgiQ2FycmllciIsIndpbmQiKQpuZXR3b3JrLmFkZCgiQ2FycmllciIsImJhdHRlcnkiKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKIyBpbiBrZyBDTzJlCm5ldHdvcmsuYWRkKCJHbG9iYWxDb25zdHJhaW50IiwiY28yX2xpbWl0IiwKICAgICAgc2Vuc2U9Ijw9IiwKPHxmaW1fZW5kfD4="]
["173cad662d4a3cd0075a6b8cc01603d33828b54b-2","173cad662d4a3cd0075a6b8cc01603d33828b54b","PHxmaW1fcHJlZml4fD4KCiNUaGlzIHNjcmlwdCBidWlsZHMgYSBuZXR3b3JrIG1hbnVhbGx5IHVzaW5nIG5ldHdvcmsuYWRkLCBzbyB0aGF0IGl0CiNoYXMgdHdvIDMtYnVzIGRpc2Nvbm5lY3RlZCBBQyBuZXR3b3JrcywgY29ubmVjdGVkIGJ5IEhWREMKI2xpbmtzLiBTdG9yYWdlIGFuZCBnZW5lcmF0aW9uICh3aW5kIGFuZCBnYXMpIGlzIHRoZW4gb3B0aW1pc2VkLgoKI1RoZSBuZXR3b3JrIGlzIHRoZW4gd3JpdHRlbiBhcyBDU1YgZmlsZXMgdG8gY3N2X2ZvbGRlcl9uYW1lLgoKaW1wb3J0IHB5cHNhCgppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHBhbmRhcyBhcyBwZAoKaW1wb3J0IG51bXB5IGFzIG5wCgoKCiNlbnN1cmUgdGhlIHNhbWUgcmFuZG9tIG51bWJlciBhcmUgcHJvZHVjZWQgd2hlbiByZWZhY3RvcmluZwpucC5yYW5kb20uc2VlZCgxKQoKCgpjc3ZfZm9sZGVyX25hbWUgPSAnb3BmLXN0b3JhZ2UtZGF0YScKCgoKI0J1aWxkIHRoZSBOZXR3b3JrIG9iamVjdCwgd2hpY2ggc3RvcmVzIGFsbCBvdGhlciBvYmplY3RzCgpuZXR3b3JrID0gcHlwc2EuTmV0d29yaygpCgojQnVpbGQgdGhlIHNuYXBzaG90cyB3ZSBjb25zaWRlciBmb3IgdGhlIGZpcnN0IFQgaG91cnMgaW4gMjAxNQoKVCA9IDEyCgpuZXR3b3JrLnNldF9zbmFwc2hvdHMocGQudG9fZGF0ZXRpbWUoW2RhdGV0aW1lLmRhdGV0aW1lKDIwMTUsMSwxKSArIGRhdGV0aW1lLnRpbWVkZWx0YShob3Vycz1pKSBmb3IgaSBpbiByYW5nZShUKV0pKQoKI2xldCBlYWNoIHNuYXBzaG90IHJlcHJlc2VudCAzIGhvdXJzCm5ldHdvcmsuc25hcHNob3Rfd2VpZ2h0aW5ncyA9IHBkLlNlcmllcygzLixpbmRleD1uZXR3b3JrLnNuYXBzaG90cykKCnByaW50KCJuZXR3b3JrOiIsbmV0d29yaykKcHJpbnQoInNuYXBzaG90czoiLG5ldHdvcmsuc25hcHNob3RzKQoKCiNhZGQgZnVlbCB0eXBlcwpuZXR3b3JrLmFkZCgiQ2FycmllciIsImdhcyIsY28yX2VtaXNzaW9ucz0wLjI0KQpuZXR3b3JrLmFkZCgiQ2FycmllciIsIndpbmQiKQpuZXR3b3JrLmFkZCgiQ2FycmllciIsImJhdHRlcnkiKQoKCiMgaW4ga2cgQ08yZQpuZXR3b3JrLmFkZCgiR2xvYmFsQ29uc3RyYWludCIsImNvMl9saW1pdCIsCiAgICAgIHNlbnNlPSI8PSIsCiAgICAgIGNvbnN0YW50PTEwMDAuKQoKCiNUaGUgbmV0d29yayBpcyB0d28gdGhyZWUtbm9kZSBBQyBuZXR3b3JrcyBjb25uZWN0ZWQgYnkgMiBwb2ludC10by1wb2ludCBEQyBsaW5rcwoKI2J1aWxkaW5nIGJsb2NrCm4gPSAzCjx8ZmltX2hvbGV8PgoKI2FkZCBidXNlcwpmb3IgaSBpbiByYW5nZShuKmMpOgogICAgbmV0d29yay5hZGQoIkJ1cyIsaSx2X25vbT0iMzgwIikKCiNhZGQgbGluZXMKZm9yIGkgaW4gcmFuZ2UobipjKToKICAgIG5ldHdvcmsuYWRkKCJMaW5lIixpLAogICAgICAgICAgICAgICAgYnVzMD1zdHIoaSksCiAgICAgICAgICAgICAgICBidXMxPXN0cihuKihpIC8vIG4pKyAoaSsxKSAlIG4pLAogICAgICAgICAgICAgICAgeD1ucC5yYW5kb20ucmFuZG9tKCksCiAgICAgICAgICAgICAgICBjYXBpdGFsX2Nvc3Q9MC4yKm5wLnJhbmRvbS5yYW5kb20oKSwKICAgICAgICAgICAgICAgIHNfbm9tX2V4dGVuZGFibGU9VHJ1ZSkKCiNtYWtlIG9uZSBsaW5lIG5vbi1leHRlbmRhYmxlCm5ldHdvcmsubGluZXMuYXRbIjIiLCJzX25vbSJdID0gMjAwLgpuZXR3b3JrLmxpbmVzLmF0WyIyIiwic19ub21fZXh0ZW5kYWJsZSJdID0gRmFsc2UKCiNhZGQgSFZEQyBsaW5lcwpmb3IgaSBpbiByYW5nZSgyKToKICAgIG5ldHdvcmsuYWRkKCJMaW5rIiwiVEwgJWQiICUgKGkpLAogICAgICAgICAgICAgICAgYnVzMD1zdHIoaSksCiAgICAgICAgICAgICAgICBidXMxPXN0cigzK2kpLAogICAgICAgICAgICAgICAgcF9tYXhfcHU9MC45LAogICAgICAgICAgICAgICAgcF9taW5fcHU9LTAuOSwKICAgICAgICAgICAgICAgIHBfbm9tPTEwMDAsCiAgICAgICAgICAgICAgICBjYXBpdGFsX2Nvc3Q9MC4yKm5wLnJhbmRvbS5yYW5kb20oKSwKICAgICAgICAgICAgICAgIHBfbm9tX2V4dGVuZGFibGU9VHJ1ZSkKCgojbWFrZSBvbmUgSFZEQyBub24tZXh0ZW5kYWJsZQpuZXR3b3JrLmxpbmtzLmF0WyJUTCAxIiwicF9ub20iXSA9IDMwMC4KbmV0d29yay5saW5rcy5hdFsiVEwgMSIsInBfbm9tX2V4dGVuZGFibGUiXSA9IEZhbHNlCgoKI2FkZCBsb2Fkcwpmb3IgaSBpbiByYW5nZShuKmMpOgogICAgbmV0d29yay5hZGQoIkxvYWQiLGksYnVzPXN0cihpKSkKCiNhZGQgc29tZSBnZW5lcmF0b3JzCmZvciBpIGluIHJhbmdlKG4qYyk6CiAgICAjc3RvcmFnZQogICAgbmV0d29yay5hZGQoIlN0b3JhZ2VVbml0IiwiU3RvcmFnZSAlZCIgJSAoaSksCiAgICAgICAgICAgICAgICBidXM9c3RyKGkpLAogICAgICAgICAgICAgICAgcF9ub209MCxjYXJyaWVyPSJiYXR0ZXJ5IiwKICAgICAgICAgICAgICAgIG1hcmdpbmFsX2Nvc3Q9NCpucC5yYW5kb20ucmFuZG9tKCksCiAgICAgICAgICAgICAgICBjYXBpdGFsX2Nvc3Q9MTAwMCpucC5yYW5kb20ucmFuZG9tKCksCiAgICAgICAgICAgICAgICBwX25vbV9leHRlbmRhYmxlPVRydWUsCiAgICAgICAgICAgICAgICBwX21heF9wdT0xLAogICAgICAgICAgICAgICAgcF9taW5fcHU9LTEsCiAgICAgICAgICAgICAgICBlZmZpY2llbmN5X3N0b3JlPTAuOSwKICAgICAgICAgICAgICAgIGVmZmljaWVuY3lfZGlzcGF0Y2g9MC45NSwKICAgICAgICAgICAgICAgIHN0YW5kaW5nX2xvc3M9MC4wMSwKICAgICAgICAgICAgICAgIG1heF9ob3Vycz02KQogICAgI3dpbmQgZ2VuZXJhdG9yCiAgICBuZXR3b3JrLmFkZCgiR2VuZXJhdG9yIiwiV2luZCAlZCIgJSAoaSksYnVzPXN0cihpKSwKICAgICAgICAgICAgICAgIHBfbm9tPTEwMCxjYXJyaWVyPSJ3aW5kIiwKICAgICAgICAgICAgICAgIG1hcmdpbmFsX2Nvc3Q9MCArIDAuMDEqbnAucmFuZG9tLnJhbmRvbSgpLCAjbm9uLXplcm8gbWFyZ2luYWwgY29zdCBlbnN1cmVzIHVuaXF1ZSBvcHRpbWlzYXRpb24gcmVzdWx0CiAgICAgICAgICAgICAgICBjYXBpdGFsX2Nvc3Q9MjAwMCArIDEwMDAqbnAucmFuZG9tLnJhbmRvbSgpLAogICAgICAgICAgICAgICAgcF9ub21fZXh0ZW5kYWJsZT1UcnVlLAogICAgICAgICAgICAgICAgcF9ub21fbWluPTEwMCkKICAgICNnYXMgZ2VuZXJhdG9yCiAgICBuZXR3b3JrLmFkZCgiR2VuZXJhdG9yIiwiR2FzICVkIiAlIChpKSxidXM9c3RyKGkpLAogICAgICAgICAgICAgICAgcF9ub209MCxjYXJyaWVyPSJnYXMiLAogICAgICAgICAgICAgICAgbWFyZ2luYWxfY29zdD0yICsgNCpucC5yYW5kb20ucmFuZG9tKCksCiAgICAgICAgICAgICAgICBjYXBpdGFsX2Nvc3Q9MTAwICsgMTAwKm5wLnJhbmRvbS5yYW5kb20oKSwKICAgICAgICAgICAgICAgIGVmZmljaWVuY3k9MC4zNSArIDAuMDEqbnAucmFuZG9tLnJhbmRvbSgpLAogICAgICAgICAgICAgICAgcF9tYXhfcHUgPSAwLjg1LAogICAgICAgICAgICAgICAgcF9taW5fcHUgPSAwLjAyLAogICAgICAgICAgICAgICAgcF9ub21fZXh0ZW5kYWJsZT1UcnVlLAogICAgICAgICAgICAgICAgcF9ub21fbWluPTApCgojbWFrZSBzb21lIG9iamVjdHMgbm9uLWV4dGVuZGFibGUgLSB1c2VmdWwgZm9yIHVuaXQgdGVzdGluZwpuZXR3b3JrLmdlbmVyYXRvcnMuYXRbIkdhcyAwIiwicF9ub20iXSA9IDM1MApuZXR3b3JrLmdlbmVyYXRvcnMuYXRbIkdhcyAwIiwicF9ub21fZXh0ZW5kYWJsZSJdID0gRmFsc2UKCm5ldHdvcmsuZ2VuZXJhdG9ycy5hdFsiV2luZCAyIiwicF9ub20iXSA9IDE1MApuZXR3b3JrLmdlbmVyYXRvcnMuYXRbIldpbmQgMiIsInBfbm9tX2V4dGVuZGFibGUiXSA9IEZhbHNlCgpuZXR3b3JrLnN0b3JhZ2VfdW5pdHMuYXRbIlN0b3JhZ2UgMSIsInBfbm9tIl0gPSAyNQpuZXR3b3JrLnN0b3JhZ2VfdW5pdHMuYXRbIlN0b3JhZ2UgMSIsInBfbm9tX2V4dGVuZGFibGUiXSA9IEZhbHNlCgoKI25vdyBhdHRhY2ggc29tZSB0aW1lIHNlcmllcwoKbmV0d29yay5sb2Fkc190LnBfc2V0ID0gcGQuRGF0YUZyYW1lKGluZGV4ID0gbmV0d29yay5zbmFwc2hvdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zID0gbmV0d29yay5sb2Fkcy5pbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSAxMDAwKm5wLnJhbmRvbS5yYW5kKGxlbihuZXR3b3JrLnNuYXBzaG90cyksIGxlbihuZXR3b3JrLmxvYWRzKSkpCgoKd2luZF9nZW5lcmF0b3JzID0gbmV0d29yay5nZW5lcmF0b3JzW25ldHdvcmsuZ2VuZXJhdG9ycy5jYXJyaWVyID09ICJ3aW5kIl0KCm5ldHdvcmsuZ2VuZXJhdG9yc190LnBfbWF4X3B1ID0gbmV0d29yay5nZW5lcmF0b3JzX3QucF9tYXhfcHUucmVpbmRleChjb2x1bW5zPXdpbmRfZ2VuZXJhdG9ycy5pbmRleCkKCm5ldHdvcmsuZ2VuZXJhdG9yc190LnBfbWF4X3B1LmxvY1s6LHdpbmRfZ2VuZXJhdG9ycy5pbmRleF0gPSBwZC5EYXRhRnJhbWUoaW5kZXggPSBuZXR3b3JrLnNuYXBzaG90cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zID0gd2luZF9nZW5lcmF0b3JzLmluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBucC5yYW5kb20ucmFuZChsZW4obmV0d29yay5zbmFwc2hvdHMpLCBsZW4od2luZF9nZW5lcmF0b3JzKSkpCgpuZXR3b3JrLnN0b3JhZ2VfdW5pdHMuc3RhdGVfb2ZfY2hhcmdlX2luaXRpYWwgPSAwLjAKCiNtYWtlIHRoZSBzdG9yYWdlIG1vcmUgY29tcGxpY2F0ZWQKbmV0d29yay5zdG9yYWdlX3VuaXRzLmF0WyJTdG9yYWdlIDIiLCJjeWNsaWNfc3RhdGVfb2ZfY2hhcmdlIl0gPSBUcnVlCm5ldHdvcmsuc3RvcmFnZV91bml0cy5hdFsiU3RvcmFnZSA0IiwiY3ljbGljX3N0YXRlX29mX2NoYXJnZSJdID0gVHJ1ZQoKCm5ldHdvcmsuc3RvcmFnZV91bml0c190LnN0YXRlX29mX2NoYXJnZV9zZXQubG9jWzosIlN0b3JhZ2UgMyJdID0gbnAubmFuCm5ldHdvcmsuc3RvcmFnZV91bml0c190LnN0YXRlX29mX2NoYXJnZV9zZXQuYXRbbmV0d29yay5zbmFwc2hvdHNbM10sIlN0b3JhZ2UgMyJdID0gNTAuCgpuZXR3b3JrLnN0b3JhZ2VfdW5pdHNfdC5zdGF0ZV9vZl9jaGFyZ2Vfc2V0LmxvY1s6LCJTdG9yYWdlIDQiXSA9IG5wLm5hbgpuZXR3b3JrLnN0b3JhZ2VfdW5pdHNfdC5zdGF0ZV9vZl9jaGFyZ2Vfc2V0LmF0W25ldHdvcmsuc25hcHNob3RzWzJdLCJTdG9yYWdlIDQiXSA9IDI1LgoKbmV0d29yay5zdG9yYWdlX3VuaXRzX3QuaW5mbG93LmxvY1s6LCJTdG9yYWdlIDAiXSA9IDAuCm5ldHdvcmsuc3RvcmFnZV91bml0c190LmluZmxvd1tbIlN0b3JhZ2UgMCJdXSA9IDIwLgoKbmV0d29yay5uYW1lID0gIlRlc3QgNiBidXMiCgpuZXR3b3JrLmV4cG9ydF90b19jc3ZfZm9sZGVyKGNzdl9mb2xkZXJfbmFtZSkKPHxmaW1fc3VmZml4fD4KCiNjb3BpZXMKYyA9IDIKCjx8ZmltX2VuZHw+"]
["99f371f079d02e3d2b2f68c10e94f15ce4bda3a2-1","99f371f079d02e3d2b2f68c10e94f15ce4bda3a2","PHxmaW1fcHJlZml4fD4KZnJvbSAuZmVhdHVyZV9zZWxlY3RvciBpbXBvcnQgKgpmcm9tIC5yZWdyZXNzb3IgaW1wb3J0ICoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIC5zdGFja2luZ19yZWdyZXNzb3IgaW1wb3J0ICoKPHxmaW1fZW5kfD4="]
["99f371f079d02e3d2b2f68c10e94f15ce4bda3a2-2","99f371f079d02e3d2b2f68c10e94f15ce4bda3a2","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuZmVhdHVyZV9zZWxlY3RvciBpbXBvcnQgKgpmcm9tIC5yZWdyZXNzb3IgaW1wb3J0ICoKZnJvbSAuc3RhY2tpbmdfcmVncmVzc29yIGltcG9ydCAqCjx8ZmltX2VuZHw+"]
["99f371f079d02e3d2b2f68c10e94f15ce4bda3a2-3","99f371f079d02e3d2b2f68c10e94f15ce4bda3a2","PHxmaW1fcHJlZml4fD4KZnJvbSAuZmVhdHVyZV9zZWxlY3RvciBpbXBvcnQgKgpmcm9tIC5yZWdyZXNzb3IgaW1wb3J0ICoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIC5zdGFja2luZ19yZWdyZXNzb3IgaW1wb3J0ICoKPHxmaW1fZW5kfD4="]
["99f371f079d02e3d2b2f68c10e94f15ce4bda3a2-4","99f371f079d02e3d2b2f68c10e94f15ce4bda3a2","PHxmaW1fcHJlZml4fD4KZnJvbSAuZmVhdHVyZV9zZWxlY3RvciBpbXBvcnQgKgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gLnJlZ3Jlc3NvciBpbXBvcnQgKgpmcm9tIC5zdGFja2luZ19yZWdyZXNzb3IgaW1wb3J0ICoKPHxmaW1fZW5kfD4="]
["68f9b58cc31bc3c8775ffc6ea1bc23e4e4c8ba99-1","68f9b58cc31bc3c8775ffc6ea1bc23e4e4c8ba99",{"$cut":{"chars":22152,"head":"PHxmaW1fcHJlZml4fD4KIiIiIEFCTS1DQUxNOiBRaSBaaGFuZyAocXpAdW5jLmVkdTtxekBidS5lZHUpICIiIgoKIyMjIFdvcmxkIEZ1Y250aW9ucyBbYXdvcmxkLnB5XSAjIyMjCiIiIgpWZWN0b3I6CiAgICAxLiBSb29mIGxvY2F0aW9ucyAocG9pbnQpCiAgICAyLiBUaWFudGFuZ3poYWkgYm91bmRhcnkgKHBvbHlnb24pCiIiIgoKIyBpbXBvcnQgYnVpbHQtaW4gbW9kdWxlcwppbXBvcnQgdGltZQppbXBvcnQgZmlvbmEKaW1wb3J0IG1hdGgKaW1wb3J0IHJhbmRvbSBhcyByYW5kCmltcG9ydCBudW1weSAgYXMgbnAKaW1wb3J0IHNjaXB5LnN0YXRzIGFzIHN0YXRzCmZyb20gICBzaGFwZWx5Lmdlb21ldHJ5IGltcG9ydCBzaGFwZQoKCiIiIiBXLUZ1bmN0aW9uIDE6IEluaXRpYWxpemUgaGggcG9pbnQgbG9jYXRpb25zICIiIgpkZWYgYXNzaWduX2hocyhoaExpc3QsIGZuMSwgZm4yKToKICAgICMgaGhMaXN0PWFnbGlzdEhIcywgZm4xPXNocEZuX2hoUG50LCBmbjI9c2hwRm5fdmlsbHMKICAgIAogICAgIyMgSG91c2Vob2xkczogaW5pdGlhbGl6ZSA0IGF0dHJpYnV0ZXMKICAgICAgICAjIGhoUG50LCBoaExvY1gsIGhoTG9jWSwgaGhFbGV2CiAgICAKICAgICMgcmVhZCBoaCBwb2ludHMKICAgIGhoUG50TGlzdCA9IFtdCiAgICB3aXRoIGZpb25hLm9wZW4oZm4xKSBhcyBjOiAgICAgICAgICAjIHNocEZuX2hoUG50ID0gJ2hoUG50cy5zaHAnCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGMpKToKICAgICAgICAgICAgaGhQbnRMaXN0LmFwcGVuZChuZXh0KGMpKQogICAgCiAgICAjIHJlYWQgdmlsbGFnZSBib3VuZGFyeSBwb2x5Z29ucwogICAgdmlsTGlzdCA9IFtdCiAgICB3aXRoIGZpb25hLm9wZW4oZm4yKSBhcyBjOiAgICAgICAgICAjIHNocEZuX3ZpbGxzID0gJ3ZpbGxCb3VuZHMuc2hwJwogICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjKSk6CiAgICAgICAgICAgIHZpbExpc3QuYXBwZW5kKG5leHQoYykpCiAgICAKICAgICMgc2FtcGxlIHBvaW50cyBmb3IgZWFjaCB2aWxsYWdlCiAgICBoaExpc3RfbmV3ID0gW10KICAgICMgbG9vcCA3IHZpbGxhZ2VzCiAgICBmb3IgdmlsIGluIHZpbExpc3Q6CiAgICAgICAgZ2VvbSAgPSBzaGFwZSh2aWxbJ2dlb21ldHJ5J10pCiAgICAgICAgIyBzZWxlY3QgaGhzIGFuZCBoaCBwb2ludHMgd2l0aGluIHRoaXMgdmlsbGFnZQogICAgICAgIGxfaGhzID0gW2EgZm9yIGEgaW4gaGhMaXN0ICAgIGlmIGEudmlsbGlkPT12aWxbJ3Byb3BlcnRpZXMnXVsndmlsbGlkJ11dCiAgICAgICAgbF9wdHMgPSBbYSBmb3IgYSBpbiBoaFBudExpc3QgaWYgZ2VvbS5pbnRlcnNlY3RzKHNoYXBlKGFbJ2dlb21ldHJ5J10pKV0KICAgICAgICAjIHNodWZmbGUgaGggYW5kIGhoIHBvaW50cwogICAgICAgIHJhbmQuc2h1ZmZsZShsX2hocykKICAgICAgICByYW5kLnNodWZmbGUobF9wdHMpCiAgICAgICAgIyBkZXJpdmUgaG91c2Vob2xkJ3MgcG9pbnQsIFggYW5kIFksIGFuZCBlbGV2YXRpb24KICAgICAgICBmb3IgaGggaW4gbF9oaHM6ICAgICAgICAgICAgICAgICAgICAgICAjICEhISBoaCBhdHRycyBpbml0aWFsaXplZCAhISEgIwogICAgICAgICAgICBwdCAgICAgICAgPSBsX3B0cy5wb3AoKQogICAgICAgICAgICBwdEdlb20gICAgPSBzaGFwZShwdFsnZ2VvbWV0cnknXSkgICAgICAgICMgcG9pbnQgZ2VvbWV0cnkKICAgICAgICAgICAgcHRFbGV2ICAgID0gcHRbJ3Byb3BlcnRpZXMnXVsnaGhFbGV2J10gICAjIGVsZXZhdGlvbgogICAgICAgICAgICBoaC5oaFBudCAgPSBwdEdlb20KICAgICAgICAgICAgaGguaGhMb2NYID0gcHRHZW9tLngKICAgICAgICAgICAgaGguaGhMb2NZID0gcHRHZW9tLnkKICAgICAgICAgICAgaGguaGhFbGV2ID0gcHRFbGV2CiAgICAgICAgIyBhcHBlbmQgd2l0aGluLXZpbGxhZ2UgaG91c2Vob2xkIGxpc3QgdG8gdGhlIG5ldyBob3VzZWhvbGQgbGlzdAogICAgICAgIGhoTGlzdF9uZXcgPSBoaExpc3RfbmV3ICsgbF9oaHMKICAgIAogICAgIyBtZXNzYWdlCiAgICAjIHByaW50KCdTdWNjZXNzIFdGMSEgaGggcG9pbnRzIGFyZSBzY2F0dGVyZWQgb3ZlciByb29mcyB3aXRoaW4gdmlsbGFnZXMuJykKICAgICMgcHJpbnQoJ1x0IGhoUG50LCBoaExvY1gsIGhoTG9jWSwgaGhFbGV2LicpCiAgICAKICAgIHJldHVybiBoaExpc3RfbmV3CgoKCiIiIiBXLUZ1bmN0aW9uIDI6IEFzc2lnbiBwbG90cyB0byBoaHMgIiIiCmRlZiBhc3NpZ25fcGxvdHMoaGhMaXN0LCBwbExpc3QpOgogICAgIyBoaExpc3Q9YWdsaXN0SEhzLCBwbExpc3Q9YWdsaXN0UExzCiAgICAKICAgICMjIC0tLSBSdW4gVGltZSAtLS0gIyMKICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgIyMgLS0tIFJ1biBUaW1lIC0tLSAjIwogICAgCiAgICAKICAgICMjIFBhcnQgSTogYXNzaWduIGZhcm0gcGxvdHMgdG8gaGhzCiAgICAKICAgICMgY3VzdG9taXplIHBtZiBmb3IgZGlzdGFuY2UgZnJvbSBmYXJtIHBsb3QgdG8gaGgKICAgIHhrID0gbnAuYXJhbmdlKDI0KQogICAgcGsgPSAoMCwgMC4yODg4MzI5MTQsIDAuMjg1NDc0MzkxLCAwLjE2MjA0ODY5OSwgMC4wOTIzNTkzNjIsIDAuMDU4Nzc0MTM5LCAKICAgICAgICAgIDAuMDM2OTQzNzQ1LCAwLjAyMTgzMDM5NSwgMC4wMTUxMTMzNSwgMC4wMDU4Nzc0MTQsIDAuMDAzMzU4NTIyLCAKICAgICAgICAgIDAuMDA2NzE3MDQ1LCAwLjAwMzM1ODUyMiwgMC4wMDMzNTg1MjIsIDAuMDAxNjc5MjYxLCAwLjAwMTY3OTI2MSwgCiAgICAgICAgICAwLjAwMDgzOTYzMSwgMCwgMC4wMDUwMzc3ODMsIDAsIDAuMDAxNjc5MjYxLCAwLjAwMjUxODg5MiwgCiAgICAgICAgICAwLjAwMTY3OTI2MSwgMC4wMDA4Mzk2MzEpCiAgICBjdXN0bV9kaXN0ID0gc3RhdHMucnZfZGlzY3JldGUobmFtZT0nY3VzdG0nLCB2YWx1ZXM9KHhrLCBwaykpCiAgICAKICAgICMgc2VsZWN0IGZhcm0gcGxvdHMgb25seQogICAgZnBMaXN0ID0gW2EgZm9yIGEgaW4gcGxMaXN0IGlmIGEuY29kZSBpbiBbNjAsNjEsNjldXQogICAgCiAgICAjIDEpIGxpbmsgbW9zdCBmYXJtIHBsb3RzIHRvIGhvdXNlaG9sZHMgCiAgICAjIG1lc3NhZ2UKICAgICMgcHJpbnQoJ0hlcmUsIHN0"}}]
["68f9b58cc31bc3c8775ffc6ea1bc23e4e4c8ba99-2","68f9b58cc31bc3c8775ffc6ea1bc23e4e4c8ba99","PHxmaW1fcHJlZml4fD4KIiIiIEFCTS1DQUxNOiBRaSBaaGFuZyAocXpAdW5jLmVkdTtxekBidS5lZHUpICIiIgoKIyMjIFdvcmxkIEZ1Y250aW9ucyBbYXdvcmxkLnB5XSAjIyMjCiIiIgpWZWN0b3I6CiAgICAxLiBSb29mIGxvY2F0aW9ucyAocG9pbnQpCiAgICAyLiBUaWFudGFuZ3poYWkgYm91bmRhcnkgKHBvbHlnb24pCiIiIgoKIyBpbXBvcnQgYnVpbHQtaW4gbW9kdWxlcwppbXBvcnQgdGltZQppbXBvcnQgZmlvbmEKaW1wb3J0IG1hdGgKaW1wb3J0IHJhbmRvbSBhcyByYW5kCmltcG9ydCBudW1weSAgYXMgbnAKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppbXBvcnQgc2NpcHkuc3RhdHMgYXMgc3RhdHMKZnJvbSAgIHNoYXBlbHkuZ2VvbWV0cnkgaW1wb3J0IHNoYXBlCgoKPHxmaW1fZW5kfD4="]
["68f9b58cc31bc3c8775ffc6ea1bc23e4e4c8ba99-3","68f9b58cc31bc3c8775ffc6ea1bc23e4e4c8ba99",{"$cut":{"chars":22152,"head":"PHxmaW1fcHJlZml4fD4KIiIiIEFCTS1DQUxNOiBRaSBaaGFuZyAocXpAdW5jLmVkdTtxekBidS5lZHUpICIiIgoKIyMjIFdvcmxkIEZ1Y250aW9ucyBbYXdvcmxkLnB5XSAjIyMjCiIiIgpWZWN0b3I6CiAgICAxLiBSb29mIGxvY2F0aW9ucyAocG9pbnQpCiAgICAyLiBUaWFudGFuZ3poYWkgYm91bmRhcnkgKHBvbHlnb24pCiIiIgoKIyBpbXBvcnQgYnVpbHQtaW4gbW9kdWxlcwppbXBvcnQgdGltZQppbXBvcnQgZmlvbmEKaW1wb3J0IG1hdGgKaW1wb3J0IHJhbmRvbSBhcyByYW5kCmltcG9ydCBudW1weSAgYXMgbnAKaW1wb3J0IHNjaXB5LnN0YXRzIGFzIHN0YXRzCmZyb20gICBzaGFwZWx5Lmdlb21ldHJ5IGltcG9ydCBzaGFwZQoKCiIiIiBXLUZ1bmN0aW9uIDE6IEluaXRpYWxpemUgaGggcG9pbnQgbG9jYXRpb25zICIiIgpkZWYgYXNzaWduX2hocyhoaExpc3QsIGZuMSwgZm4yKToKICAgICMgaGhMaXN0PWFnbGlzdEhIcywgZm4xPXNocEZuX2hoUG50LCBmbjI9c2hwRm5fdmlsbHMKICAgIAogICAgIyMgSG91c2Vob2xkczogaW5pdGlhbGl6ZSA0IGF0dHJpYnV0ZXMKICAgICAgICAjIGhoUG50LCBoaExvY1gsIGhoTG9jWSwgaGhFbGV2CiAgICAKICAgICMgcmVhZCBoaCBwb2ludHMKICAgIGhoUG50TGlzdCA9IFtdCiAgICB3aXRoIGZpb25hLm9wZW4oZm4xKSBhcyBjOiAgICAgICAgICAjIHNocEZuX2hoUG50ID0gJ2hoUG50cy5zaHAnCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGMpKToKICAgICAgICAgICAgaGhQbnRMaXN0LmFwcGVuZChuZXh0KGMpKQogICAgCiAgICAjIHJlYWQgdmlsbGFnZSBib3VuZGFyeSBwb2x5Z29ucwogICAgdmlsTGlzdCA9IFtdCiAgICB3aXRoIGZpb25hLm9wZW4oZm4yKSBhcyBjOiAgICAgICAgICAjIHNocEZuX3ZpbGxzID0gJ3ZpbGxCb3VuZHMuc2hwJwogICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjKSk6CiAgICAgICAgICAgIHZpbExpc3QuYXBwZW5kKG5leHQoYykpCiAgICAKICAgICMgc2FtcGxlIHBvaW50cyBmb3IgZWFjaCB2aWxsYWdlCiAgICBoaExpc3RfbmV3ID0gW10KICAgICMgbG9vcCA3IHZpbGxhZ2VzCiAgICBmb3IgdmlsIGluIHZpbExpc3Q6CiAgICAgICAgZ2VvbSAgPSBzaGFwZSh2aWxbJ2dlb21ldHJ5J10pCiAgICAgICAgIyBzZWxlY3QgaGhzIGFuZCBoaCBwb2ludHMgd2l0aGluIHRoaXMgdmlsbGFnZQogICAgICAgIGxfaGhzID0gW2EgZm9yIGEgaW4gaGhMaXN0ICAgIGlmIGEudmlsbGlkPT12aWxbJ3Byb3BlcnRpZXMnXVsndmlsbGlkJ11dCiAgICAgICAgbF9wdHMgPSBbYSBmb3IgYSBpbiBoaFBudExpc3QgaWYgZ2VvbS5pbnRlcnNlY3RzKHNoYXBlKGFbJ2dlb21ldHJ5J10pKV0KICAgICAgICAjIHNodWZmbGUgaGggYW5kIGhoIHBvaW50cwogICAgICAgIHJhbmQuc2h1ZmZsZShsX2hocykKICAgICAgICByYW5kLnNodWZmbGUobF9wdHMpCiAgICAgICAgIyBkZXJpdmUgaG91c2Vob2xkJ3MgcG9pbnQsIFggYW5kIFksIGFuZCBlbGV2YXRpb24KICAgICAgICBmb3IgaGggaW4gbF9oaHM6ICAgICAgICAgICAgICAgICAgICAgICAjICEhISBoaCBhdHRycyBpbml0aWFsaXplZCAhISEgIwogICAgICAgICAgICBwdCAgICAgICAgPSBsX3B0cy5wb3AoKQogICAgICAgICAgICBwdEdlb20gICAgPSBzaGFwZShwdFsnZ2VvbWV0cnknXSkgICAgICAgICMgcG9pbnQgZ2VvbWV0cnkKICAgICAgICAgICAgcHRFbGV2ICAgID0gcHRbJ3Byb3BlcnRpZXMnXVsnaGhFbGV2J10gICAjIGVsZXZhdGlvbgogICAgICAgICAgICBoaC5oaFBudCAgPSBwdEdlb20KICAgICAgICAgICAgaGguaGhMb2NYID0gcHRHZW9tLngKICAgICAgICAgICAgaGguaGhMb2NZID0gcHRHZW9tLnkKICAgICAgICAgICAgaGguaGhFbGV2ID0gcHRFbGV2CiAgICAgICAgIyBhcHBlbmQgd2l0aGluLXZpbGxhZ2UgaG91c2Vob2xkIGxpc3QgdG8gdGhlIG5ldyBob3VzZWhvbGQgbGlzdAogICAgICAgIGhoTGlzdF9uZXcgPSBoaExpc3RfbmV3ICsgbF9oaHMKICAgIAogICAgIyBtZXNzYWdlCiAgICAjIHByaW50KCdTdWNjZXNzIFdGMSEgaGggcG9pbnRzIGFyZSBzY2F0dGVyZWQgb3ZlciByb29mcyB3aXRoaW4gdmlsbGFnZXMuJykKICAgICMgcHJpbnQoJ1x0IGhoUG50LCBoaExvY1gsIGhoTG9jWSwgaGhFbGV2LicpCiAgICAKICAgIHJldHVybiBoaExpc3RfbmV3CgoKCiIiIiBXLUZ1bmN0aW9uIDI6IEFzc2lnbiBwbG90cyB0byBoaHMgIiIiCmRlZiBhc3NpZ25fcGxvdHMoaGhMaXN0LCBwbExpc3QpOgogICAgIyBoaExpc3Q9YWdsaXN0SEhzLCBwbExpc3Q9YWdsaXN0UExzCiAgICAKICAgICMjIC0tLSBSdW4gVGltZSAtLS0gIyMKICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgIyMgLS0tIFJ1biBUaW1lIC0tLSAjIwogICAgCiAgICAKICAgICMjIFBhcnQgSTogYXNzaWduIGZhcm0gcGxvdHMgdG8gaGhzCiAgICAKICAgICMgY3VzdG9taXplIHBtZiBmb3IgZGlzdGFuY2UgZnJvbSBmYXJtIHBsb3QgdG8gaGgKICAgIHhrID0gbnAuYXJhbmdlKDI0KQogICAgcGsgPSAoMCwgMC4yODg4MzI5MTQsIDAuMjg1NDc0MzkxLCAwLjE2MjA0ODY5OSwgMC4wOTIzNTkzNjIsIDAuMDU4Nzc0MTM5LCAKICAgICAgICAgIDAuMDM2OTQzNzQ1LCAwLjAyMTgzMDM5NSwgMC4wMTUxMTMzNSwgMC4wMDU4Nzc0MTQsIDAuMDAzMzU4NTIyLCAKICAgICAgICAgIDAuMDA2NzE3MDQ1LCAwLjAwMzM1ODUyMiwgMC4wMDMzNTg1MjIsIDAuMDAxNjc5MjYxLCAwLjAwMTY3OTI2MSwgCiAgICAgICAgICAwLjAwMDgzOTYzMSwgMCwgMC4wMDUwMzc3ODMsIDAsIDAuMDAxNjc5MjYxLCAwLjAwMjUxODg5MiwgCiAgICAgICAgICAwLjAwMTY3OTI2MSwgMC4wMDA4Mzk2MzEpCiAgICBjdXN0bV9kaXN0ID0gc3RhdHMucnZfZGlzY3JldGUobmFtZT0nY3VzdG0nLCB2YWx1ZXM9KHhrLCBwaykpCiAgICAKICAgICMgc2VsZWN0IGZhcm0gcGxvdHMgb25seQogICAgZnBMaXN0ID0gW2EgZm9yIGEgaW4gcGxMaXN0IGlmIGEuY29kZSBpbiBbNjAsNjEsNjldXQogICAgCiAgICAjIDEpIGxpbmsgbW9zdCBmYXJtIHBsb3RzIHRvIGhvdXNlaG9sZHMgCiAgICAjIG1lc3NhZ2UKICAgICMgcHJpbnQoJ0hlcmUsIHN0"}}]
["68f9b58cc31bc3c8775ffc6ea1bc23e4e4c8ba99-4","68f9b58cc31bc3c8775ffc6ea1bc23e4e4c8ba99",{"$cut":{"chars":22152,"head":"PHxmaW1fcHJlZml4fD4KIiIiIEFCTS1DQUxNOiBRaSBaaGFuZyAocXpAdW5jLmVkdTtxekBidS5lZHUpICIiIgoKIyMjIFdvcmxkIEZ1Y250aW9ucyBbYXdvcmxkLnB5XSAjIyMjCiIiIgpWZWN0b3I6CiAgICAxLiBSb29mIGxvY2F0aW9ucyAocG9pbnQpCiAgICAyLiBUaWFudGFuZ3poYWkgYm91bmRhcnkgKHBvbHlnb24pCiIiIgoKIyBpbXBvcnQgYnVpbHQtaW4gbW9kdWxlcwppbXBvcnQgdGltZQppbXBvcnQgZmlvbmEKaW1wb3J0IG1hdGgKaW1wb3J0IHJhbmRvbSBhcyByYW5kCmltcG9ydCBudW1weSAgYXMgbnAKaW1wb3J0IHNjaXB5LnN0YXRzIGFzIHN0YXRzCmZyb20gICBzaGFwZWx5Lmdlb21ldHJ5IGltcG9ydCBzaGFwZQoKCiIiIiBXLUZ1bmN0aW9uIDE6IEluaXRpYWxpemUgaGggcG9pbnQgbG9jYXRpb25zICIiIgpkZWYgYXNzaWduX2hocyhoaExpc3QsIGZuMSwgZm4yKToKICAgICMgaGhMaXN0PWFnbGlzdEhIcywgZm4xPXNocEZuX2hoUG50LCBmbjI9c2hwRm5fdmlsbHMKICAgIAogICAgIyMgSG91c2Vob2xkczogaW5pdGlhbGl6ZSA0IGF0dHJpYnV0ZXMKICAgICAgICAjIGhoUG50LCBoaExvY1gsIGhoTG9jWSwgaGhFbGV2CiAgICAKICAgICMgcmVhZCBoaCBwb2ludHMKICAgIGhoUG50TGlzdCA9IFtdCiAgICB3aXRoIGZpb25hLm9wZW4oZm4xKSBhcyBjOiAgICAgICAgICAjIHNocEZuX2hoUG50ID0gJ2hoUG50cy5zaHAnCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGMpKToKICAgICAgICAgICAgaGhQbnRMaXN0LmFwcGVuZChuZXh0KGMpKQogICAgCiAgICAjIHJlYWQgdmlsbGFnZSBib3VuZGFyeSBwb2x5Z29ucwogICAgdmlsTGlzdCA9IFtdCiAgICB3aXRoIGZpb25hLm9wZW4oZm4yKSBhcyBjOiAgICAgICAgICAjIHNocEZuX3ZpbGxzID0gJ3ZpbGxCb3VuZHMuc2hwJwogICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjKSk6CiAgICAgICAgICAgIHZpbExpc3QuYXBwZW5kKG5leHQoYykpCiAgICAKICAgICMgc2FtcGxlIHBvaW50cyBmb3IgZWFjaCB2aWxsYWdlCiAgICBoaExpc3RfbmV3ID0gW10KICAgICMgbG9vcCA3IHZpbGxhZ2VzCiAgICBmb3IgdmlsIGluIHZpbExpc3Q6CiAgICAgICAgZ2VvbSAgPSBzaGFwZSh2aWxbJ2dlb21ldHJ5J10pCiAgICAgICAgIyBzZWxlY3QgaGhzIGFuZCBoaCBwb2ludHMgd2l0aGluIHRoaXMgdmlsbGFnZQogICAgICAgIGxfaGhzID0gW2EgZm9yIGEgaW4gaGhMaXN0ICAgIGlmIGEudmlsbGlkPT12aWxbJ3Byb3BlcnRpZXMnXVsndmlsbGlkJ11dCiAgICAgICAgbF9wdHMgPSBbYSBmb3IgYSBpbiBoaFBudExpc3QgaWYgZ2VvbS5pbnRlcnNlY3RzKHNoYXBlKGFbJ2dlb21ldHJ5J10pKV0KICAgICAgICAjIHNodWZmbGUgaGggYW5kIGhoIHBvaW50cwogICAgICAgIHJhbmQuc2h1ZmZsZShsX2hocykKICAgICAgICByYW5kLnNodWZmbGUobF9wdHMpCiAgICAgICAgIyBkZXJpdmUgaG91c2Vob2xkJ3MgcG9pbnQsIFggYW5kIFksIGFuZCBlbGV2YXRpb24KICAgICAgICBmb3IgaGggaW4gbF9oaHM6ICAgICAgICAgICAgICAgICAgICAgICAjICEhISBoaCBhdHRycyBpbml0aWFsaXplZCAhISEgIwogICAgICAgICAgICBwdCAgICAgICAgPSBsX3B0cy5wb3AoKQogICAgICAgICAgICBwdEdlb20gICAgPSBzaGFwZShwdFsnZ2VvbWV0cnknXSkgICAgICAgICMgcG9pbnQgZ2VvbWV0cnkKICAgICAgICAgICAgcHRFbGV2ICAgID0gcHRbJ3Byb3BlcnRpZXMnXVsnaGhFbGV2J10gICAjIGVsZXZhdGlvbgogICAgICAgICAgICBoaC5oaFBudCAgPSBwdEdlb20KICAgICAgICAgICAgaGguaGhMb2NYID0gcHRHZW9tLngKICAgICAgICAgICAgaGguaGhMb2NZID0gcHRHZW9tLnkKICAgICAgICAgICAgaGguaGhFbGV2ID0gcHRFbGV2CiAgICAgICAgIyBhcHBlbmQgd2l0aGluLXZpbGxhZ2UgaG91c2Vob2xkIGxpc3QgdG8gdGhlIG5ldyBob3VzZWhvbGQgbGlzdAogICAgICAgIGhoTGlzdF9uZXcgPSBoaExpc3RfbmV3ICsgbF9oaHMKICAgIAogICAgIyBtZXNzYWdlCiAgICAjIHByaW50KCdTdWNjZXNzIFdGMSEgaGggcG9pbnRzIGFyZSBzY2F0dGVyZWQgb3ZlciByb29mcyB3aXRoaW4gdmlsbGFnZXMuJykKICAgICMgcHJpbnQoJ1x0IGhoUG50LCBoaExvY1gsIGhoTG9jWSwgaGhFbGV2LicpCiAgICAKICAgIHJldHVybiBoaExpc3RfbmV3CgoKCiIiIiBXLUZ1bmN0aW9uIDI6IEFzc2lnbiBwbG90cyB0byBoaHMgIiIiCmRlZiBhc3NpZ25fcGxvdHMoaGhMaXN0LCBwbExpc3QpOgogICAgIyBoaExpc3Q9YWdsaXN0SEhzLCBwbExpc3Q9YWdsaXN0UExzCiAgICAKICAgICMjIC0tLSBSdW4gVGltZSAtLS0gIyMKICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgIyMgLS0tIFJ1biBUaW1lIC0tLSAjIwogICAgCiAgICAKICAgICMjIFBhcnQgSTogYXNzaWduIGZhcm0gcGxvdHMgdG8gaGhzCiAgICAKICAgICMgY3VzdG9taXplIHBtZiBmb3IgZGlzdGFuY2UgZnJvbSBmYXJtIHBsb3QgdG8gaGgKICAgIHhrID0gbnAuYXJhbmdlKDI0KQogICAgcGsgPSAoMCwgMC4yODg4MzI5MTQsIDAuMjg1NDc0MzkxLCAwLjE2MjA0ODY5OSwgMC4wOTIzNTkzNjIsIDAuMDU4Nzc0MTM5LCAKICAgICAgICAgIDAuMDM2OTQzNzQ1LCAwLjAyMTgzMDM5NSwgMC4wMTUxMTMzNSwgMC4wMDU4Nzc0MTQsIDAuMDAzMzU4NTIyLCAKICAgICAgICAgIDAuMDA2NzE3MDQ1LCAwLjAwMzM1ODUyMiwgMC4wMDMzNTg1MjIsIDAuMDAxNjc5MjYxLCAwLjAwMTY3OTI2MSwgCiAgICAgICAgICAwLjAwMDgzOTYzMSwgMCwgMC4wMDUwMzc3ODMsIDAsIDAuMDAxNjc5MjYxLCAwLjAwMjUxODg5MiwgCiAgICAgICAgICAwLjAwMTY3OTI2MSwgMC4wMDA4Mzk2MzEpCiAgICBjdXN0bV9kaXN0ID0gc3RhdHMucnZfZGlzY3JldGUobmFtZT0nY3VzdG0nLCB2YWx1ZXM9KHhrLCBwaykpCiAgICAKICAgICMgc2VsZWN0IGZhcm0gcGxvdHMgb25seQogICAgZnBMaXN0ID0gW2EgZm9yIGEgaW4gcGxMaXN0IGlmIGEuY29kZSBpbiBbNjAsNjEsNjldXQogICAgCiAgICAjIDEpIGxpbmsgbW9zdCBmYXJtIHBsb3RzIHRvIGhvdXNlaG9sZHMgCiAgICAjIG1lc3NhZ2UKICAgICMgcHJpbnQoJ0hlcmUsIHN0"}}]
["68f9b58cc31bc3c8775ffc6ea1bc23e4e4c8ba99-5","68f9b58cc31bc3c8775ffc6ea1bc23e4e4c8ba99",{"$cut":{"chars":22152,"head":"PHxmaW1fcHJlZml4fD4KIiIiIEFCTS1DQUxNOiBRaSBaaGFuZyAocXpAdW5jLmVkdTtxekBidS5lZHUpICIiIgoKIyMjIFdvcmxkIEZ1Y250aW9ucyBbYXdvcmxkLnB5XSAjIyMjCiIiIgpWZWN0b3I6CiAgICAxLiBSb29mIGxvY2F0aW9ucyAocG9pbnQpCiAgICAyLiBUaWFudGFuZ3poYWkgYm91bmRhcnkgKHBvbHlnb24pCiIiIgoKIyBpbXBvcnQgYnVpbHQtaW4gbW9kdWxlcwppbXBvcnQgdGltZQppbXBvcnQgZmlvbmEKaW1wb3J0IG1hdGgKaW1wb3J0IHJhbmRvbSBhcyByYW5kCmltcG9ydCBudW1weSAgYXMgbnAKaW1wb3J0IHNjaXB5LnN0YXRzIGFzIHN0YXRzCmZyb20gICBzaGFwZWx5Lmdlb21ldHJ5IGltcG9ydCBzaGFwZQoKCiIiIiBXLUZ1bmN0aW9uIDE6IEluaXRpYWxpemUgaGggcG9pbnQgbG9jYXRpb25zICIiIgpkZWYgYXNzaWduX2hocyhoaExpc3QsIGZuMSwgZm4yKToKICAgICMgaGhMaXN0PWFnbGlzdEhIcywgZm4xPXNocEZuX2hoUG50LCBmbjI9c2hwRm5fdmlsbHMKICAgIAogICAgIyMgSG91c2Vob2xkczogaW5pdGlhbGl6ZSA0IGF0dHJpYnV0ZXMKICAgICAgICAjIGhoUG50LCBoaExvY1gsIGhoTG9jWSwgaGhFbGV2CiAgICAKICAgICMgcmVhZCBoaCBwb2ludHMKICAgIGhoUG50TGlzdCA9IFtdCiAgICB3aXRoIGZpb25hLm9wZW4oZm4xKSBhcyBjOiAgICAgICAgICAjIHNocEZuX2hoUG50ID0gJ2hoUG50cy5zaHAnCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGMpKToKICAgICAgICAgICAgaGhQbnRMaXN0LmFwcGVuZChuZXh0KGMpKQogICAgCiAgICAjIHJlYWQgdmlsbGFnZSBib3VuZGFyeSBwb2x5Z29ucwogICAgdmlsTGlzdCA9IFtdCiAgICB3aXRoIGZpb25hLm9wZW4oZm4yKSBhcyBjOiAgICAgICAgICAjIHNocEZuX3ZpbGxzID0gJ3ZpbGxCb3VuZHMuc2hwJwogICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjKSk6CiAgICAgICAgICAgIHZpbExpc3QuYXBwZW5kKG5leHQoYykpCiAgICAKICAgICMgc2FtcGxlIHBvaW50cyBmb3IgZWFjaCB2aWxsYWdlCiAgICBoaExpc3RfbmV3ID0gW10KICAgICMgbG9vcCA3IHZpbGxhZ2VzCiAgICBmb3IgdmlsIGluIHZpbExpc3Q6CiAgICAgICAgZ2VvbSAgPSBzaGFwZSh2aWxbJ2dlb21ldHJ5J10pCiAgICAgICAgIyBzZWxlY3QgaGhzIGFuZCBoaCBwb2ludHMgd2l0aGluIHRoaXMgdmlsbGFnZQogICAgICAgIGxfaGhzID0gW2EgZm9yIGEgaW4gaGhMaXN0ICAgIGlmIGEudmlsbGlkPT12aWxbJ3Byb3BlcnRpZXMnXVsndmlsbGlkJ11dCiAgICAgICAgbF9wdHMgPSBbYSBmb3IgYSBpbiBoaFBudExpc3QgaWYgZ2VvbS5pbnRlcnNlY3RzKHNoYXBlKGFbJ2dlb21ldHJ5J10pKV0KICAgICAgICAjIHNodWZmbGUgaGggYW5kIGhoIHBvaW50cwogICAgICAgIHJhbmQuc2h1ZmZsZShsX2hocykKICAgICAgICByYW5kLnNodWZmbGUobF9wdHMpCiAgICAgICAgIyBkZXJpdmUgaG91c2Vob2xkJ3MgcG9pbnQsIFggYW5kIFksIGFuZCBlbGV2YXRpb24KICAgICAgICBmb3IgaGggaW4gbF9oaHM6ICAgICAgICAgICAgICAgICAgICAgICAjICEhISBoaCBhdHRycyBpbml0aWFsaXplZCAhISEgIwogICAgICAgICAgICBwdCAgICAgICAgPSBsX3B0cy5wb3AoKQogICAgICAgICAgICBwdEdlb20gICAgPSBzaGFwZShwdFsnZ2VvbWV0cnknXSkgICAgICAgICMgcG9pbnQgZ2VvbWV0cnkKICAgICAgICAgICAgcHRFbGV2ICAgID0gcHRbJ3Byb3BlcnRpZXMnXVsnaGhFbGV2J10gICAjIGVsZXZhdGlvbgogICAgICAgICAgICBoaC5oaFBudCAgPSBwdEdlb20KICAgICAgICAgICAgaGguaGhMb2NYID0gcHRHZW9tLngKICAgICAgICAgICAgaGguaGhMb2NZID0gcHRHZW9tLnkKICAgICAgICAgICAgaGguaGhFbGV2ID0gcHRFbGV2CiAgICAgICAgIyBhcHBlbmQgd2l0aGluLXZpbGxhZ2UgaG91c2Vob2xkIGxpc3QgdG8gdGhlIG5ldyBob3VzZWhvbGQgbGlzdAogICAgICAgIGhoTGlzdF9uZXcgPSBoaExpc3RfbmV3ICsgbF9oaHMKICAgIAogICAgIyBtZXNzYWdlCiAgICAjIHByaW50KCdTdWNjZXNzIFdGMSEgaGggcG9pbnRzIGFyZSBzY2F0dGVyZWQgb3ZlciByb29mcyB3aXRoaW4gdmlsbGFnZXMuJykKICAgICMgcHJpbnQoJ1x0IGhoUG50LCBoaExvY1gsIGhoTG9jWSwgaGhFbGV2LicpCiAgICAKICAgIHJldHVybiBoaExpc3RfbmV3CgoKCiIiIiBXLUZ1bmN0aW9uIDI6IEFzc2lnbiBwbG90cyB0byBoaHMgIiIiCmRlZiBhc3NpZ25fcGxvdHMoaGhMaXN0LCBwbExpc3QpOgogICAgIyBoaExpc3Q9YWdsaXN0SEhzLCBwbExpc3Q9YWdsaXN0UExzCiAgICAKICAgICMjIC0tLSBSdW4gVGltZSAtLS0gIyMKICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgIyMgLS0tIFJ1biBUaW1lIC0tLSAjIwogICAgCiAgICAKICAgICMjIFBhcnQgSTogYXNzaWduIGZhcm0gcGxvdHMgdG8gaGhzCiAgICAKICAgICMgY3VzdG9taXplIHBtZiBmb3IgZGlzdGFuY2UgZnJvbSBmYXJtIHBsb3QgdG8gaGgKICAgIHhrID0gbnAuYXJhbmdlKDI0KQogICAgcGsgPSAoMCwgMC4yODg4MzI5MTQsIDAuMjg1NDc0MzkxLCAwLjE2MjA0ODY5OSwgMC4wOTIzNTkzNjIsIDAuMDU4Nzc0MTM5LCAKICAgICAgICAgIDAuMDM2OTQzNzQ1LCAwLjAyMTgzMDM5NSwgMC4wMTUxMTMzNSwgMC4wMDU4Nzc0MTQsIDAuMDAzMzU4NTIyLCAKICAgICAgICAgIDAuMDA2NzE3MDQ1LCAwLjAwMzM1ODUyMiwgMC4wMDMzNTg1MjIsIDAuMDAxNjc5MjYxLCAwLjAwMTY3OTI2MSwgCiAgICAgICAgICAwLjAwMDgzOTYzMSwgMCwgMC4wMDUwMzc3ODMsIDAsIDAuMDAxNjc5MjYxLCAwLjAwMjUxODg5MiwgCiAgICAgICAgICAwLjAwMTY3OTI2MSwgMC4wMDA4Mzk2MzEpCiAgICBjdXN0bV9kaXN0ID0gc3RhdHMucnZfZGlzY3JldGUobmFtZT0nY3VzdG0nLCB2YWx1ZXM9KHhrLCBwaykpCiAgICAKICAgICMgc2VsZWN0IGZhcm0gcGxvdHMgb25seQogICAgZnBMaXN0ID0gW2EgZm9yIGEgaW4gcGxMaXN0IGlmIGEuY29kZSBpbiBbNjAsNjEsNjldXQogICAgCiAgICAjIDEpIGxpbmsgbW9zdCBmYXJtIHBsb3RzIHRvIGhvdXNlaG9sZHMgCiAgICAjIG1lc3NhZ2UKICAgICMgcHJpbnQoJ0hlcmUsIHN0"}}]
["99c2b6c5b96a30b7490703359fb74a77e7ae8576-1","99c2b6c5b96a30b7490703359fb74a77e7ae8576","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoKIyAgICBGaWxlIE5hbWXvvJogICAgICAgc3R1ZGVudAojICAgIERlc2NyaXB0aW9uIDoKIyAgICBBdXRob3IgOiAgICAgICAgICBTYW5ZYXBlbmcKIyAgICBkYXRl77yaICAgICAgICAgICAgMjAxOS0wNS0yMQojICAgIENoYW5nZSBBY3Rpdml0eTogIDIwMTktMDUtMjE6CiIiIgrlrabnlJ/pgInor77nmoTml7blgJnvvIzpgInmi6nnj63nuqfvvIznj63nuqfkurrmlbDkuI3og73otoXov4czMOS6uu+8jOi2hei/hzMw5Lq677yM6YCJ5oup5LiN6LaF6L+HMzDkurrnmoTnj63nuqcg5aaC5p6c5LiN5ruh6Laz5p2h5Lu277yM6ZyA6KaB6ICB5biI5re75Yqg54+t57qnCiIiIgoKZnJvbSBiYXNlIGltcG9ydCBJbmZvTW9kZSwgRGF0YWJhc2UsIEJhc2UKCmluZm8gPSBJbmZvTW9kZSgpCmRiID0gRGF0YWJhc2UoKQpiID0gQmFzZSgpCgpkZWYgZXhhbWluZV9hbGxfY291cnNlKCk6CiAgICBjb3Vyc2VfaW5mbyA9IGRiLmRiX3NlbGVjdCgiY291cnNlX2luZm8uanNvbiIpCiAgICBwcmludCgi5YWo6YOo6K++56iLIi5jZW50ZXIoMjAsIiMiKSkKICAgIGZvciBjIGluIGNvdXJzZV9pbmZvOgogICAgICAgIHByaW50KCLor77nqIvlkI3np7A6e31cbiIKICAgICAgICAgICAgICAiXHTor77nqIvku7fmoLw6e31cbiIgXAogICAgICAgICAgICAgICJcdOivvueoi+aXtumXtHt9Ii5mb3JtYXQoYywgY291cnNlX2luZm9bY10uZ2V0KCJwcmljZSIpLCBjb3Vyc2VfaW5mb1tjXS5nZXQoImhvdXIiKSkpCiAgICBwcmludCgi5YWo6YOo6K++56iLIi5jZW50ZXIoMjAsICIjIikpCiAgICByZXR1cm4gVHJ1ZQoKIyBkZWYgZXhhbWluZV9jb3Vyc2VfY2xhc3MoY291cnNlX25hbWUpOgojICAgICAiIiIKIyAgICAg5q2k5aSE5piv6K6p5a2m55Sf6YCJ6K++5LmL5ZCO77yM55u05o6l5Yqg5YWl54+t57qn77yM5ZKM5L2c5Lia6ZyA5rGC5pyJ5Yay56qB77yM5L2G5piv6YC76L6R5Y+v5Lul5YCf6Ym077yMCiMgICAgIOWcqOi/memHjOeahOaDs+azleaYr+WtpueUn+mAieivvuebtOaOpemAieaLqeePree6p++8jOWIhumFjeePree6p+aYr+euoeeQhuWRmOeahOS6i+aDhe+8jOi/memHjOWPqumcgOimgeWwhuivvueoi+WKoOWFpeWtpueUn+eahOivvueoi+WIl+ihqAojICAgICA6cGFyYW0gY291cnNlX25hbWU6CiMgICAgIDpyZXR1cm46CiMgICAgICIiIgojICAgICBjbGFzc19pbmZvID0gZGIuZGJfc2VsZWN0KCJjbGFzc19pbmZvLmpzb24iKQojICAgICBmb3IgYyBpbiBjbGFzc19pbmZvOgojICAgICAgICAgaWYgY2xhc3NfaW5mb1tjXS5nZXQoImNvdXJzZSIpID09IGNvdXJzZV9uYW1lOgojICAgICAgICAgICAgIGlmIGxlbihjbGFzc19pbmZvW2NdLmdldCgic3R1ZGVudCIpKSA8PSAzMDoKIyAgICAgICAgICAgICAgICAgcHJpbnQoIuePree6p+S/oeaBryIuY2VudGVyKDMwLCAiIyIpKQojICAgICAgICAgICAgICAgICBwcmludCgi54+t57qn5ZCN56ewOnt9XG5cdOePree6p+iusuW4iDp7fSIuZm9ybWF0KGMsICJ8fCIuam9pbihjbGFzc19pbmZvW2NdLmdldCgidGVhY2hlciIpKSkpCiMgICAgIHJldHVybiBUcnVlCgoKZGVmIHNlbGVjdF9jb3Vyc2UoKToKICAgICMgdXNlcl9pbmZvID0gZGIuZGJfc2VsZWN0KCJ1c2VyX2luZm8uanNvbiIpCiAgICBjb3Vyc2VfaW5mbyA9IGRiLmRiX3NlbGVjdCgiY291cnNlX2luZm8uanNvbiIpCgogICAgIyDmiZPljbDmiYDmnInor77nqIsKICAgICMgZXhhbWluZV9hbGxfY291cnNlKCkKCiAgICAgICAgIyDovpPlhaXpgInmi6nor77nqIsKICAgIHdoaWxlIFRydWU6CiAgICAgICAgdXNlcl9pbmZvID0gZGIuZGJfc2VsZWN0KCJ1c2VyX2luZm8uanNvbiIpCiAgICAgICAgZXhhbWluZV9hbGxfY291cnNlKCkKICAgICAgICBjb3Vyc2VfbmFtZSA9IGlucHV0KCLor7fovpPlhaXopoHpgInmi6nnmoTor77nqIvvvIzovpPlhaVx6YCA5Ye66YCJ6K++77yaIikKICAgICAgICBpZiBjb3Vyc2VfbmFtZSA9PSAicSI6CiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgY291cnNlX25hbWUgaW4gY291cnNlX2luZm86CiAgICAgICAgICAgICAgICB1c2VyX25hbWUgPSBiLmNoZWNrX2xvZ2luX2FjY291bnQoIm5hbWUiKQogICAgICAgICAgICAgICAgaWYgY291cnNlX25hbWUgaW4gdXNlcl9pbmZvW3VzZXJfbmFtZV0uZ2V0KCJjb3Vyc2UiKToKICAgICAgICAgICAgICAgICAgICBwcmludCgi5oKo5bey57uP6YCJ5oup5q2k6K++56iL77yM6K+36YeN5paw6L6T5YWlIikKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICB1c2VyX2luZm9bdXNlcl9uYW1lXVsiY291cnNlIl0uYXBwZW5kKGNvdXJzZV9uYW1lKQogICAgICAgICAgICAgICAgICAgIGRiLmRiX2luc2VydCgidXNlcl9pbmZvLmpzb24iLCB1c2VyX2luZm8pCgogICAgICAgICAgICAgICAgICAgIHByaW50KCJ7feWtpueUn+mAieaLqeeahOivvueoi+aYryIuZm9ybWF0KHVzZXJfbmFtZSkuY2VudGVyKDMwLCAnIycpKQogICAgICAgICAgICAgICAgICAgIHByaW50KCLor77nqIvliJfooag6e30iLmZvcm1hdCh1c2VyX25hbWUsICJ8fCIuam9pbih1c2VyX2luZm9bdXNlcl9uYW1lXS5nZXQoImNvdXJzZSIpKSkpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwcmludCgi5oKo6L6T5YWl55qE6K++56iL5ZCN56ew5pyJ6K+v77yM6K+36YeN5paw6L6T5YWlIikKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgpkZWYgZXhhbWluZV9zZWxlY3RfY291cnNlKCk6CiAgICB1c2VyX2luZm8gPSBkYi5kYl9zZWxlY3QoInVzZXJfaW5mby5qc29uIikKICAgIGNvdXJzZV9pbmZvID0gZGIuZGJfc2VsZWN0KCJjb3Vyc2VfaW5mby5qc29uIikKICAgIHVzZXJfbmFtZSA9IGIuY2hlY2tfbG9naW5fYWNjb3VudCgibmFtZSIpCgogICAgcHJpbnQoInt95ZCM5a2m6YCJ5oup55qE6K++56iLIi5jZW50ZXIoMjAsICIjIikuZm9ybWF0KHVzZXJfbmFtZS51cHBlcigpKSkKICAgIGZvciBjIGluIHVzZXJfaW5mb1t1c2VyX25hbWVdLmdldCgiY291cnNlIik6CiAgICAgICAgcHJpbnQoIuivvueoi+WQjeensDp7fVxuXHTor77nqIvml7bplb86e31cblx06K++56iL5Lu35qC8e30iLmZvcm1hdChjLCBjb3Vyc2VfaW5mb1tjXS5nZXQoImhvdXIiKSwgY291cnNlX2luZm9bY10uZ2V0KCJwcmljZSIpKSkKPHxmaW1faG9sZXw+CmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBleGFtaW5lX3NlbGVjdF9jb3Vyc2UoKQoKPHxmaW1fc3VmZml4fD4KICAgIHJldHVybiBUcnVlCgoKPHxmaW1fZW5kfD4="]
["99c2b6c5b96a30b7490703359fb74a77e7ae8576-2","99c2b6c5b96a30b7490703359fb74a77e7ae8576","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoKIyAgICBGaWxlIE5hbWXvvJogICAgICAgc3R1ZGVudAojICAgIERlc2NyaXB0aW9uIDoKIyAgICBBdXRob3IgOiAgICAgICAgICBTYW5ZYXBlbmcKIyAgICBkYXRl77yaICAgICAgICAgICAgMjAxOS0wNS0yMQojICAgIENoYW5nZSBBY3Rpdml0eTogIDIwMTktMDUtMjE6CiIiIgrlrabnlJ/pgInor77nmoTml7blgJnvvIzpgInmi6nnj63nuqfvvIznj63nuqfkurrmlbDkuI3og73otoXov4czMOS6uu+8jOi2hei/hzMw5Lq677yM6YCJ5oup5LiN6LaF6L+HMzDkurrnmoTnj63nuqcg5aaC5p6c5LiN5ruh6Laz5p2h5Lu277yM6ZyA6KaB6ICB5biI5re75Yqg54+t57qnCiIiIgoKZnJvbSBiYXNlIGltcG9ydCBJbmZvTW9kZSwgRGF0YWJhc2UsIEJhc2UKCmluZm8gPSBJbmZvTW9kZSgpCmRiID0gRGF0YWJhc2UoKQpiID0gQmFzZSgpCgpkZWYgZXhhbWluZV9hbGxfY291cnNlKCk6CiAgICBjb3Vyc2VfaW5mbyA9IGRiLmRiX3NlbGVjdCgiY291cnNlX2luZm8uanNvbiIpCiAgICBwcmludCgi5YWo6YOo6K++56iLIi5jZW50ZXIoMjAsIiMiKSkKICAgIGZvciBjIGluIGNvdXJzZV9pbmZvOgogICAgICAgIHByaW50KCLor77nqIvlkI3np7A6e31cbiIKICAgICAgICAgICAgICAiXHTor77nqIvku7fmoLw6e31cbiIgXAogICAgICAgICAgICAgICJcdOivvueoi+aXtumXtHt9Ii5mb3JtYXQoYywgY291cnNlX2luZm9bY10uZ2V0KCJwcmljZSIpLCBjb3Vyc2VfaW5mb1tjXS5nZXQoImhvdXIiKSkpCiAgICBwcmludCgi5YWo6YOo6K++56iLIi5jZW50ZXIoMjAsICIjIikpCiAgICByZXR1cm4gVHJ1ZQoKIyBkZWYgZXhhbWluZV9jb3Vyc2VfY2xhc3MoY291cnNlX25hbWUpOgojICAgICAiIiIKIyAgICAg5q2k5aSE5piv6K6p5a2m55Sf6YCJ6K++5LmL5ZCO77yM55u05o6l5Yqg5YWl54+t57qn77yM5ZKM5L2c5Lia6ZyA5rGC5pyJ5Yay56qB77yM5L2G5piv6YC76L6R5Y+v5Lul5YCf6Ym077yMCiMgICAgIOWcqOi/memHjOeahOaDs+azleaYr+WtpueUn+mAieivvuebtOaOpemAieaLqeePree6p++8jOWIhumFjeePree6p+aYr+euoeeQhuWRmOeahOS6i+aDhe+8jOi/memHjOWPqumcgOimgeWwhuivvueoi+WKoOWFpeWtpueUn+eahOivvueoi+WIl+ihqAojICAgICA6cGFyYW0gY291cnNlX25hbWU6CiMgICAgIDpyZXR1cm46CiMgICAgICIiIgojICAgICBjbGFzc19pbmZvID0gZGIuZGJfc2VsZWN0KCJjbGFzc19pbmZvLmpzb24iKQojICAgICBmb3IgYyBpbiBjbGFzc19pbmZvOgojICAgICAgICAgaWYgY2xhc3NfaW5mb1tjXS5nZXQoImNvdXJzZSIpID09IGNvdXJzZV9uYW1lOgojICAgICAgICAgICAgIGlmIGxlbihjbGFzc19pbmZvW2NdLmdldCgic3R1ZGVudCIpKSA8PSAzMDoKIyAgICAgICAgICAgICAgICAgcHJpbnQoIuePree6p+S/oeaBryIuY2VudGVyKDMwLCAiIyIpKQojICAgICAgICAgICAgICAgICBwcmludCgi54+t57qn5ZCN56ewOnt9XG5cdOePree6p+iusuW4iDp7fSIuZm9ybWF0KGMsICJ8fCIuam9pbihjbGFzc19pbmZvW2NdLmdldCgidGVhY2hlciIpKSkpCiMgICAgIHJldHVybiBUcnVlCgoKZGVmIHNlbGVjdF9jb3Vyc2UoKToKICAgICMgdXNlcl9pbmZvID0gZGIuZGJfc2VsZWN0KCJ1c2VyX2luZm8uanNvbiIpCiAgICBjb3Vyc2VfaW5mbyA9IGRiLmRiX3NlbGVjdCgiY291cnNlX2luZm8uanNvbiIpCgogICAgIyDmiZPljbDmiYDmnInor77nqIsKICAgICMgZXhhbWluZV9hbGxfY291cnNlKCkKCiAgICAgICAgIyDovpPlhaXpgInmi6nor77nqIsKICAgIHdoaWxlIFRydWU6CiAgICAgICAgdXNlcl9pbmZvID0gZGIuZGJfc2VsZWN0KCJ1c2VyX2luZm8uanNvbiIpCiAgICAgICAgZXhhbWluZV9hbGxfY291cnNlKCkKICAgICAgICBjb3Vyc2VfbmFtZSA9IGlucHV0KCLor7fovpPlhaXopoHpgInmi6nnmoTor77nqIvvvIzovpPlhaVx6YCA5Ye66YCJ6K++77yaIikKICAgICAgICBpZiBjb3Vyc2VfbmFtZSA9PSAicSI6CiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgY291cnNlX25hbWUgaW4gY291cnNlX2luZm86CiAgICAgICAgICAgICAgICB1c2VyX25hbWUgPSBiLmNoZWNrX2xvZ2luX2FjY291bnQoIm5hbWUiKQogICAgICAgICAgICAgICAgaWYgY291cnNlX25hbWUgaW4gdXNlcl9pbmZvW3VzZXJfbmFtZV0uZ2V0KCJjb3Vyc2UiKToKICAgICAgICAgICAgICAgICAgICBwcmludCgi5oKo5bey57uP6YCJ5oup5q2k6K++56iL77yM6K+36YeN5paw6L6T5YWlIikKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICB1c2VyX2luZm9bdXNlcl9uYW1lXVsiY291cnNlIl0uYXBwZW5kKGNvdXJzZV9uYW1lKQogICAgICAgICAgICAgICAgICAgIGRiLmRiX2luc2VydCgidXNlcl9pbmZvLmpzb24iLCB1c2VyX2luZm8pCgogICAgICAgICAgICAgICAgICAgIHByaW50KCJ7feWtpueUn+mAieaLqeeahOivvueoi+aYryIuZm9ybWF0KHVzZXJfbmFtZSkuY2VudGVyKDMwLCAnIycpKQogICAgICAgICAgICAgICAgICAgIHByaW50KCLor77nqIvliJfooag6e30iLmZvcm1hdCh1c2VyX25hbWUsICJ8fCIuam9pbih1c2VyX2luZm9bdXNlcl9uYW1lXS5nZXQoImNvdXJzZSIpKSkpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwcmludCgi5oKo6L6T5YWl55qE6K++56iL5ZCN56ew5pyJ6K+v77yM6K+36YeN5paw6L6T5YWlIikKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgpkZWYgZXhhbWluZV9zZWxlY3RfY291cnNlKCk6CiAgICB1c2VyX2luZm8gPSBkYi5kYl9zZWxlY3QoInVzZXJfaW5mby5qc29uIikKICAgIGNvdXJzZV9pbmZvID0gZGIuZGJfc2VsZWN0KCJjb3Vyc2VfaW5mby5qc29uIikKPHxmaW1faG9sZXw+CiAgICAgICAgcHJpbnQoIuivvueoi+WQjeensDp7fVxuXHTor77nqIvml7bplb86e31cblx06K++56iL5Lu35qC8e30iLmZvcm1hdChjLCBjb3Vyc2VfaW5mb1tjXS5nZXQoImhvdXIiKSwgY291cnNlX2luZm9bY10uZ2V0KCJwcmljZSIpKSkKICAgIHJldHVybiBUcnVlCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGV4YW1pbmVfc2VsZWN0X2NvdXJzZSgpCgo8fGZpbV9zdWZmaXh8PgogICAgdXNlcl9uYW1lID0gYi5jaGVja19sb2dpbl9hY2NvdW50KCJuYW1lIikKCiAgICBwcmludCgie33lkIzlrabpgInmi6nnmoTor77nqIsiLmNlbnRlcigyMCwgIiMiKS5mb3JtYXQodXNlcl9uYW1lLnVwcGVyKCkpKQogICAgZm9yIGMgaW4gdXNlcl9pbmZvW3VzZXJfbmFtZV0uZ2V0KCJjb3Vyc2UiKToKPHxmaW1fZW5kfD4="]
["99c2b6c5b96a30b7490703359fb74a77e7ae8576-3","99c2b6c5b96a30b7490703359fb74a77e7ae8576","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoKIyAgICBGaWxlIE5hbWXvvJogICAgICAgc3R1ZGVudAojICAgIERlc2NyaXB0aW9uIDoKIyAgICBBdXRob3IgOiAgICAgICAgICBTYW5ZYXBlbmcKIyAgICBkYXRl77yaICAgICAgICAgICAgMjAxOS0wNS0yMQojICAgIENoYW5nZSBBY3Rpdml0eTogIDIwMTktMDUtMjE6CiIiIgrlrabnlJ/pgInor77nmoTml7blgJnvvIzpgInmi6nnj63nuqfvvIznj63nuqfkurrmlbDkuI3og73otoXov4czMOS6uu+8jOi2hei/hzMw5Lq677yM6YCJ5oup5LiN6LaF6L+HMzDkurrnmoTnj63nuqcg5aaC5p6c5LiN5ruh6Laz5p2h5Lu277yM6ZyA6KaB6ICB5biI5re75Yqg54+t57qnCiIiIgoKZnJvbSBiYXNlIGltcG9ydCBJbmZvTW9kZSwgRGF0YWJhc2UsIEJhc2UKCmluZm8gPSBJbmZvTW9kZSgpCmRiID0gRGF0YWJhc2UoKQpiID0gQmFzZSgpCgpkZWYgZXhhbWluZV9hbGxfY291cnNlKCk6CiAgICBjb3Vyc2VfaW5mbyA9IGRiLmRiX3NlbGVjdCgiY291cnNlX2luZm8uanNvbiIpCiAgICBwcmludCgi5YWo6YOo6K++56iLIi5jZW50ZXIoMjAsIiMiKSkKICAgIGZvciBjIGluIGNvdXJzZV9pbmZvOgogICAgICAgIHByaW50KCLor77nqIvlkI3np7A6e31cbiIKICAgICAgICAgICAgICAiXHTor77nqIvku7fmoLw6e31cbiIgXAogICAgICAgICAgICAgICJcdOivvueoi+aXtumXtHt9Ii5mb3JtYXQoYywgY291cnNlX2luZm9bY10uZ2V0KCJwcmljZSIpLCBjb3Vyc2VfaW5mb1tjXS5nZXQoImhvdXIiKSkpCiAgICBwcmludCgi5YWo6YOo6K++56iLIi5jZW50ZXIoMjAsICIjIikpCiAgICByZXR1cm4gVHJ1ZQoKIyBkZWYgZXhhbWluZV9jb3Vyc2VfY2xhc3MoY291cnNlX25hbWUpOgojICAgICAiIiIKIyAgICAg5q2k5aSE5piv6K6p5a2m55Sf6YCJ6K++5LmL5ZCO77yM55u05o6l5Yqg5YWl54+t57qn77yM5ZKM5L2c5Lia6ZyA5rGC5pyJ5Yay56qB77yM5L2G5piv6YC76L6R5Y+v5Lul5YCf6Ym077yMCiMgICAgIOWcqOi/memHjOeahOaDs+azleaYr+WtpueUn+mAieivvuebtOaOpemAieaLqeePree6p++8jOWIhumFjeePree6p+aYr+euoeeQhuWRmOeahOS6i+aDhe+8jOi/memHjOWPqumcgOimgeWwhuivvueoi+WKoOWFpeWtpueUn+eahOivvueoi+WIl+ihqAojICAgICA6cGFyYW0gY291cnNlX25hbWU6CiMgICAgIDpyZXR1cm46CiMgICAgICIiIgojICAgICBjbGFzc19pbmZvID0gZGIuZGJfc2VsZWN0KCJjbGFzc19pbmZvLmpzb24iKQojICAgICBmb3IgYyBpbiBjbGFzc19pbmZvOgojICAgICAgICAgaWYgY2xhc3NfaW5mb1tjXS5nZXQoImNvdXJzZSIpID09IGNvdXJzZV9uYW1lOgojICAgICAgICAgICAgIGlmIGxlbihjbGFzc19pbmZvW2NdLmdldCgic3R1ZGVudCIpKSA8PSAzMDoKIyAgICAgICAgICAgICAgICAgcHJpbnQoIuePree6p+S/oeaBryIuY2VudGVyKDMwLCAiIyIpKQojICAgICAgICAgICAgICAgICBwcmludCgi54+t57qn5ZCN56ewOnt9XG5cdOePree6p+iusuW4iDp7fSIuZm9ybWF0KGMsICJ8fCIuam9pbihjbGFzc19pbmZvW2NdLmdldCgidGVhY2hlciIpKSkpCiMgICAgIHJldHVybiBUcnVlCgoKZGVmIHNlbGVjdF9jb3Vyc2UoKToKICAgICMgdXNlcl9pbmZvID0gZGIuZGJfc2VsZWN0KCJ1c2VyX2luZm8uanNvbiIpCiAgICBjb3Vyc2VfaW5mbyA9IGRiLmRiX3NlbGVjdCgiY291cnNlX2luZm8uanNvbiIpCgogICAgIyDmiZPljbDmiYDmnInor77nqIsKICAgICMgZXhhbWluZV9hbGxfY291cnNlKCkKCiAgICAgICAgIyDovpPlhaXpgInmi6nor77nqIsKICAgIHdoaWxlIFRydWU6CiAgICAgICAgdXNlcl9pbmZvID0gZGIuZGJfc2VsZWN0KCJ1c2VyX2luZm8uanNvbiIpCiAgICAgICAgZXhhbWluZV9hbGxfY291cnNlKCkKICAgICAgICBjb3Vyc2VfbmFtZSA9IGlucHV0KCLor7fovpPlhaXopoHpgInmi6nnmoTor77nqIvvvIzovpPlhaVx6YCA5Ye66YCJ6K++77yaIikKICAgICAgICBpZiBjb3Vyc2VfbmFtZSA9PSAicSI6CiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgY291cnNlX25hbWUgaW4gY291cnNlX2luZm86CiAgICAgICAgICAgICAgICB1c2VyX25hbWUgPSBiLmNoZWNrX2xvZ2luX2FjY291bnQoIm5hbWUiKQogICAgICAgICAgICAgICAgaWYgY291cnNlX25hbWUgaW4gdXNlcl9pbmZvW3VzZXJfbmFtZV0uZ2V0KCJjb3Vyc2UiKToKICAgICAgICAgICAgICAgICAgICBwcmludCgi5oKo5bey57uP6YCJ5oup5q2k6K++56iL77yM6K+36YeN5paw6L6T5YWlIikKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICB1c2VyX2luZm9bdXNlcl9uYW1lXVsiY291cnNlIl0uYXBwZW5kKGNvdXJzZV9uYW1lKQogICAgICAgICAgICAgICAgICAgIGRiLmRiX2luc2VydCgidXNlcl9pbmZvLmpzb24iLCB1c2VyX2luZm8pCgogICAgICAgICAgICAgICAgICAgIHByaW50KCJ7feWtpueUn+mAieaLqeeahOivvueoi+aYryIuZm9ybWF0KHVzZXJfbmFtZSkuY2VudGVyKDMwLCAnIycpKQogICAgICAgICAgICAgICAgICAgIHByaW50KCLor77nqIvliJfooag6e30iLmZvcm1hdCh1c2VyX25hbWUsICJ8fCIuam9pbih1c2VyX2luZm9bdXNlcl9uYW1lXS5nZXQoImNvdXJzZSIpKSkpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwcmludCgi5oKo6L6T5YWl55qE6K++56iL5ZCN56ew5pyJ6K+v77yM6K+36YeN5paw6L6T5YWlIikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgY29udGludWUKCjx8ZmltX2VuZHw+"]
["e7b512e96add6978757af6dc1ea6ef37f6c1429a-1","e7b512e96add6978757af6dc1ea6ef37f6c1429a","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaSA9IDEKCndoaWxlIGkgPD0gMV8wMDA6CiAgICBwcmludChpKQo8fGZpbV9lbmR8Pg=="]
["1717f87dba6ca810c98f75f3d1c711738f0e45d5-1","1717f87dba6ca810c98f75f3d1c711738f0e45d5",{"$cut":{"chars":28360,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgdHJhY2ViYWNrCmltcG9ydCBzb2NrZXQKaW1wb3J0IG9zCmZyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCmltcG9ydCByZXF1ZXN0cwppbXBvcnQgdGltZQppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHJhbmRvbQppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCBtdWx0aXByb2Nlc3NpbmcKaW1wb3J0IGpzb24gCmltcG9ydCB5YW1sCmZyb20gZHhmIGltcG9ydCAqCmZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzLCBRdWV1ZQppbXBvcnQgaW1wb3J0bGliCmltcG9ydCBoYXNoX3JpbmcKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKCmlucHV0X2RpciA9ICcvaG9tZS9uYW5uYW4vZG9ja2VyaW1hZ2VzL2RvY2tlci10cmFjZXMvZGF0YV9jZW50ZXJzLycKCiMjIGdldCByZXF1ZXN0cwpkZWYgc2VuZF9yZXF1ZXN0X2dldChjbGllbnQsIHBheWxvYWQpOgogICAgIyMgUmVhZCBmcm9tIHRoZSBxdWV1ZQogICAgcyA9IHJlcXVlc3RzLnNlc3Npb24oKQogICAgaGVhZGVycyA9IHsnQ29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQWNjZXB0JzogJ3RleHQvcGxhaW4nfQogICAgcy5wb3N0KCJodHRwOi8vIiArIHN0cihjbGllbnQpICsgIi91cCIsIGRhdGE9anNvbi5kdW1wcyhwYXlsb2FkKSwgaGVhZGVycz1oZWFkZXJzLCB0aW1lb3V0PTEwMCkKCmRlZiBzZW5kX3dhcm11cF90aHJlYWQocmVxdWVzdHMsIHEsIHJlZ2lzdHJ5LCBnZW5lcmF0ZV9yYW5kb20pOgogICAgdHJhY2UgPSB7fQogICAgZHhmID0gRFhGKHJlZ2lzdHJ5LCAndGVzdF9yZXBvJywgaW5zZWN1cmU9VHJ1ZSkKIyAgICAgZiA9IG9wZW4oc3RyKG9zLmdldHBpZCgpKSwgJ3diJykKIyAgICAgZi53cml0ZSgnXDAnKQojICAgICBmLmNsb3NlKCkKICAgIGZvciByZXF1ZXN0IGluIHJlcXVlc3RzOgogICAgICAgIGlmIHJlcXVlc3RbJ3NpemUnXSA8IDA6CiAgICAgICAgICAgIHRyYWNlW3JlcXVlc3RbJ3VyaSddXSA9ICdiYWQnCiMgICAgICAgICBlbGlmIG5vdCAocmVxdWVzdFsndXJpJ10gaW4gdHJhY2UpOgojICAgICAgICAgICAgIHdpdGggb3BlbihzdHIob3MuZ2V0cGlkKCkpLCAnd2InKSBhcyBmOgojICAgICAgICAgICAgICAgICBpZiBnZW5lcmF0ZV9yYW5kb20gaXMgVHJ1ZToKIyAgICAgICAgICAgICAgICAgICAgIGYuc2VlayhyZXF1ZXN0WydzaXplJ10gLSA5KQojICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShzdHIocmFuZG9tLmdldHJhbmRiaXRzKDY0KSkpCiMgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCdcMCcpCiMgICAgICAgICAgICAgICAgIGVsc2U6CiMgICAgICAgICAgICAgICAgICAgICBmLnNlZWsocmVxdWVzdFsnc2l6ZSddIC0gMSkKIyAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJ1wwJykKCiAgICAgICAgdHJ5OgogICAgICAgICAgICBkZ3N0ID0gZHhmLnB1c2hfYmxvYihyZXF1ZXN0WydkYXRhJ10pCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICBkZ3N0ID0gJ2JhZCcKICAgICAgICBwcmludCByZXF1ZXN0Wyd1cmknXSwgZGdzdAogICAgICAgIHRyYWNlW3JlcXVlc3RbJ3VyaSddXSA9IGRnc3QKIyAgICAgb3MucmVtb3ZlKHN0cihvcy5nZXRwaWQoKSkpCiAgICBxLnB1dCh0cmFjZSkKCmRlZiB3YXJtdXAoZGF0YSwgb3V0X3RyYWNlLCByZWdpc3RyeSwgdGhyZWFkcywgZ2VuZXJhdGVfcmFuZG9tKToKICAgIHRyYWNlID0ge30KICAgIHByb2Nlc3NlcyA9IFtdCiAgICBxID0gUXVldWUoKQogICAgcHJvY2Vzc19kYXRhID0gW10KICAgIGZvciBpIGluIHJhbmdlKHRocmVhZHMpOgogICAgICAgIHByb2Nlc3NfZGF0YS5hcHBlbmQoW10pCiAgICBpID0gMAogICAgZm9yIHJlcXVlc3QgaW4gZGF0YToKICAgICAgICBpZiByZXF1ZXN0WydtZXRob2QnXSA9PSAnR0VUJzoKICAgICAgICAgICAgcHJvY2Vzc19kYXRhW2kgJSB0aHJlYWRzXS5hcHBlbmQocmVxdWVzdCkKICAgICAgICAgICAgaSArPSAxCiAgICBmb3IgaSBpbiByYW5nZSh0aHJlYWRzKToKICAgICAgICBwID0gUHJvY2Vzcyh0YXJnZXQ9c2VuZF93YXJtdXBfdGhyZWFkLCBhcmdzPShwcm9jZXNzX2RhdGFbaV0sIHEsIHJlZ2lzdHJ5LCBnZW5lcmF0ZV9yYW5kb20pKQogICAgICAgIHByb2Nlc3Nlcy5hcHBlbmQocCkKCiAgICBmb3IgcCBpbiBwcm9jZXNzZXM6CiAgICAgICAgcC5zdGFydCgpCgogICAgZm9yIGkgaW4gcmFuZ2UodGhyZWFkcyk6CiAgICAgICAgZCA9IHEuZ2V0KCkKICAgICAgICBmb3IgdGhpbmcgaW4gZDoKICAgICAgICAgICAgaWYgdGhpbmcgaW4gdHJhY2U6CiAgICAgICAgICAgICAgICBpZiB0cmFjZVt0aGluZ10gPT0gJ2JhZCcgYW5kIGRbdGhpbmddICE9ICdiYWQnOgogICAgICAgICAgICAgICAgICAgIHRyYWNlW3RoaW5nXSA9IGRbdGhpbmddCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0cmFjZVt0aGluZ10gPSBkW3RoaW5nXQoKICAgIGZvciBwIGluIHByb2Nlc3NlczoKICAgICAgICBwLmpvaW4oKQoKICAgIHdpdGggb3BlbihvdXRfdHJhY2UsICd3JykgYXMgZjoKICAgICAgICBqc29uLmR1bXAodHJhY2UsIGYpCiAKZGVmIHN0YXRzKHJlc3BvbnNlcyk6CiAgICByZXNwb25zZXMuc29ydChrZXkgPSBsYW1iZGEgeDogeFsndGltZSddKQoKICAgIGVuZHRpbWUgPSAwCiAgICBkYXRhID0gMAogICAgbGF0ZW5jeSA9IDAKICAgIHRvdGFsID0gbGVuKHJlc3BvbnNlcykKICAgIG9uVGltZXMgPSAwCiAgICBmYWlsZWQgPSAwCiAgICB3cm9uZ2RpZ2VzdCA9IDAKICAgIHN0YXJ0VGltZSA9IHJlc3BvbnNlc1swXVsndGltZSddCiAgICBmb3IgciBpbiByZXNwb25zZXM6CiMgICAgICAgICBpZiByWydvblRpbWUnXSA9PSAnZmFpbGVkJzoKICAgICAgICBpZiAiZmFpbGVkIiBpbiByWydvblRpbWUnXToKICAgICAgICAgICAgdG90YWwgLT0gMQogICAgICAgICAgICBmYWlsZWQgKz0gMQogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGlmIHJbJ3RpbWUnXSArIHJbJ2R1cmF0aW9uJ10gPiBlbmR0aW1lOgogICAgICAgICAgICBlbmR0aW1lID0gclsndGltZSddICsgclsnZHVyYXRpb24nXQogICAg"}}]
["1717f87dba6ca810c98f75f3d1c711738f0e45d5-2","1717f87dba6ca810c98f75f3d1c711738f0e45d5",{"$cut":{"chars":36676,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgdHJhY2ViYWNrCmltcG9ydCBzb2NrZXQKaW1wb3J0IG9zCmZyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCmltcG9ydCByZXF1ZXN0cwppbXBvcnQgdGltZQppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHJhbmRvbQppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCBtdWx0aXByb2Nlc3NpbmcKaW1wb3J0IGpzb24gCmltcG9ydCB5YW1sCmZyb20gZHhmIGltcG9ydCAqCmZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzLCBRdWV1ZQppbXBvcnQgaW1wb3J0bGliCmltcG9ydCBoYXNoX3JpbmcKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKCmlucHV0X2RpciA9ICcvaG9tZS9uYW5uYW4vZG9ja2VyaW1hZ2VzL2RvY2tlci10cmFjZXMvZGF0YV9jZW50ZXJzLycKCiMjIGdldCByZXF1ZXN0cwpkZWYgc2VuZF9yZXF1ZXN0X2dldChjbGllbnQsIHBheWxvYWQpOgogICAgIyMgUmVhZCBmcm9tIHRoZSBxdWV1ZQogICAgcyA9IHJlcXVlc3RzLnNlc3Npb24oKQogICAgaGVhZGVycyA9IHsnQ29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQWNjZXB0JzogJ3RleHQvcGxhaW4nfQogICAgcy5wb3N0KCJodHRwOi8vIiArIHN0cihjbGllbnQpICsgIi91cCIsIGRhdGE9anNvbi5kdW1wcyhwYXlsb2FkKSwgaGVhZGVycz1oZWFkZXJzLCB0aW1lb3V0PTEwMCkKCmRlZiBzZW5kX3dhcm11cF90aHJlYWQocmVxdWVzdHMsIHEsIHJlZ2lzdHJ5LCBnZW5lcmF0ZV9yYW5kb20pOgogICAgdHJhY2UgPSB7fQogICAgZHhmID0gRFhGKHJlZ2lzdHJ5LCAndGVzdF9yZXBvJywgaW5zZWN1cmU9VHJ1ZSkKIyAgICAgZiA9IG9wZW4oc3RyKG9zLmdldHBpZCgpKSwgJ3diJykKIyAgICAgZi53cml0ZSgnXDAnKQojICAgICBmLmNsb3NlKCkKICAgIGZvciByZXF1ZXN0IGluIHJlcXVlc3RzOgogICAgICAgIGlmIHJlcXVlc3RbJ3NpemUnXSA8IDA6CiAgICAgICAgICAgIHRyYWNlW3JlcXVlc3RbJ3VyaSddXSA9ICdiYWQnCiMgICAgICAgICBlbGlmIG5vdCAocmVxdWVzdFsndXJpJ10gaW4gdHJhY2UpOgojICAgICAgICAgICAgIHdpdGggb3BlbihzdHIob3MuZ2V0cGlkKCkpLCAnd2InKSBhcyBmOgojICAgICAgICAgICAgICAgICBpZiBnZW5lcmF0ZV9yYW5kb20gaXMgVHJ1ZToKIyAgICAgICAgICAgICAgICAgICAgIGYuc2VlayhyZXF1ZXN0WydzaXplJ10gLSA5KQojICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShzdHIocmFuZG9tLmdldHJhbmRiaXRzKDY0KSkpCiMgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCdcMCcpCiMgICAgICAgICAgICAgICAgIGVsc2U6CiMgICAgICAgICAgICAgICAgICAgICBmLnNlZWsocmVxdWVzdFsnc2l6ZSddIC0gMSkKIyAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJ1wwJykKCiAgICAgICAgdHJ5OgogICAgICAgICAgICBkZ3N0ID0gZHhmLnB1c2hfYmxvYihyZXF1ZXN0WydkYXRhJ10pCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICBkZ3N0ID0gJ2JhZCcKICAgICAgICBwcmludCByZXF1ZXN0Wyd1cmknXSwgZGdzdAogICAgICAgIHRyYWNlW3JlcXVlc3RbJ3VyaSddXSA9IGRnc3QKIyAgICAgb3MucmVtb3ZlKHN0cihvcy5nZXRwaWQoKSkpCiAgICBxLnB1dCh0cmFjZSkKCmRlZiB3YXJtdXAoZGF0YSwgb3V0X3RyYWNlLCByZWdpc3RyeSwgdGhyZWFkcywgZ2VuZXJhdGVfcmFuZG9tKToKICAgIHRyYWNlID0ge30KICAgIHByb2Nlc3NlcyA9IFtdCiAgICBxID0gUXVldWUoKQogICAgcHJvY2Vzc19kYXRhID0gW10KICAgIGZvciBpIGluIHJhbmdlKHRocmVhZHMpOgogICAgICAgIHByb2Nlc3NfZGF0YS5hcHBlbmQoW10pCiAgICBpID0gMAogICAgZm9yIHJlcXVlc3QgaW4gZGF0YToKICAgICAgICBpZiByZXF1ZXN0WydtZXRob2QnXSA9PSAnR0VUJzoKICAgICAgICAgICAgcHJvY2Vzc19kYXRhW2kgJSB0aHJlYWRzXS5hcHBlbmQocmVxdWVzdCkKICAgICAgICAgICAgaSArPSAxCiAgICBmb3IgaSBpbiByYW5nZSh0aHJlYWRzKToKICAgICAgICBwID0gUHJvY2Vzcyh0YXJnZXQ9c2VuZF93YXJtdXBfdGhyZWFkLCBhcmdzPShwcm9jZXNzX2RhdGFbaV0sIHEsIHJlZ2lzdHJ5LCBnZW5lcmF0ZV9yYW5kb20pKQogICAgICAgIHByb2Nlc3Nlcy5hcHBlbmQocCkKCiAgICBmb3IgcCBpbiBwcm9jZXNzZXM6CiAgICAgICAgcC5zdGFydCgpCgogICAgZm9yIGkgaW4gcmFuZ2UodGhyZWFkcyk6CiAgICAgICAgZCA9IHEuZ2V0KCkKICAgICAgICBmb3IgdGhpbmcgaW4gZDoKICAgICAgICAgICAgaWYgdGhpbmcgaW4gdHJhY2U6CiAgICAgICAgICAgICAgICBpZiB0cmFjZVt0aGluZ10gPT0gJ2JhZCcgYW5kIGRbdGhpbmddICE9ICdiYWQnOgogICAgICAgICAgICAgICAgICAgIHRyYWNlW3RoaW5nXSA9IGRbdGhpbmddCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0cmFjZVt0aGluZ10gPSBkW3RoaW5nXQoKICAgIGZvciBwIGluIHByb2Nlc3NlczoKICAgICAgICBwLmpvaW4oKQoKICAgIHdpdGggb3BlbihvdXRfdHJhY2UsICd3JykgYXMgZjoKICAgICAgICBqc29uLmR1bXAodHJhY2UsIGYpCiAKZGVmIHN0YXRzKHJlc3BvbnNlcyk6CiAgICByZXNwb25zZXMuc29ydChrZXkgPSBsYW1iZGEgeDogeFsndGltZSddKQoKICAgIGVuZHRpbWUgPSAwCiAgICBkYXRhID0gMAogICAgbGF0ZW5jeSA9IDAKICAgIHRvdGFsID0gbGVuKHJlc3BvbnNlcykKICAgIG9uVGltZXMgPSAwCiAgICBmYWlsZWQgPSAwCiAgICB3cm9uZ2RpZ2VzdCA9IDAKICAgIHN0YXJ0VGltZSA9IHJlc3BvbnNlc1swXVsndGltZSddCiAgICBmb3IgciBpbiByZXNwb25zZXM6CiMgICAgICAgICBpZiByWydvblRpbWUnXSA9PSAnZmFpbGVkJzoKICAgICAgICBpZiAiZmFpbGVkIiBpbiByWydvblRpbWUnXToKICAgICAgICAgICAgdG90YWwgLT0gMQogICAgICAgICAgICBmYWlsZWQgKz0gMQogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGlmIHJbJ3RpbWUnXSArIHJbJ2R1cmF0aW9uJ10gPiBlbmR0aW1lOgogICAgICAgICAgICBlbmR0aW1lID0gclsndGltZSddICsgclsnZHVyYXRpb24nXQogICAg"}}]
["1717f87dba6ca810c98f75f3d1c711738f0e45d5-3","1717f87dba6ca810c98f75f3d1c711738f0e45d5",{"$cut":{"chars":40908,"head":"PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8Pgpmcm9tIGFyZ3BhcnNlIGltcG9ydCBBcmd1bWVudFBhcnNlcgppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IHRpbWUKaW1wb3J0IGRhdGV0aW1lCmltcG9ydCByYW5kb20KaW1wb3J0IHRocmVhZGluZwppbXBvcnQgbXVsdGlwcm9jZXNzaW5nCmltcG9ydCBqc29uIAppbXBvcnQgeWFtbApmcm9tIGR4ZiBpbXBvcnQgKgpmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcywgUXVldWUKaW1wb3J0IGltcG9ydGxpYgppbXBvcnQgaGFzaF9yaW5nCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CgppbnB1dF9kaXIgPSAnL2hvbWUvbmFubmFuL2RvY2tlcmltYWdlcy9kb2NrZXItdHJhY2VzL2RhdGFfY2VudGVycy8nCgojIyBnZXQgcmVxdWVzdHMKZGVmIHNlbmRfcmVxdWVzdF9nZXQoY2xpZW50LCBwYXlsb2FkKToKICAgICMjIFJlYWQgZnJvbSB0aGUgcXVldWUKICAgIHMgPSByZXF1ZXN0cy5zZXNzaW9uKCkKICAgIGhlYWRlcnMgPSB7J0NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0FjY2VwdCc6ICd0ZXh0L3BsYWluJ30KICAgIHMucG9zdCgiaHR0cDovLyIgKyBzdHIoY2xpZW50KSArICIvdXAiLCBkYXRhPWpzb24uZHVtcHMocGF5bG9hZCksIGhlYWRlcnM9aGVhZGVycywgdGltZW91dD0xMDApCgpkZWYgc2VuZF93YXJtdXBfdGhyZWFkKHJlcXVlc3RzLCBxLCByZWdpc3RyeSwgZ2VuZXJhdGVfcmFuZG9tKToKICAgIHRyYWNlID0ge30KICAgIGR4ZiA9IERYRihyZWdpc3RyeSwgJ3Rlc3RfcmVwbycsIGluc2VjdXJlPVRydWUpCiMgICAgIGYgPSBvcGVuKHN0cihvcy5nZXRwaWQoKSksICd3YicpCiMgICAgIGYud3JpdGUoJ1wwJykKIyAgICAgZi5jbG9zZSgpCiAgICBmb3IgcmVxdWVzdCBpbiByZXF1ZXN0czoKICAgICAgICBpZiByZXF1ZXN0WydzaXplJ10gPCAwOgogICAgICAgICAgICB0cmFjZVtyZXF1ZXN0Wyd1cmknXV0gPSAnYmFkJwojICAgICAgICAgZWxpZiBub3QgKHJlcXVlc3RbJ3VyaSddIGluIHRyYWNlKToKIyAgICAgICAgICAgICB3aXRoIG9wZW4oc3RyKG9zLmdldHBpZCgpKSwgJ3diJykgYXMgZjoKIyAgICAgICAgICAgICAgICAgaWYgZ2VuZXJhdGVfcmFuZG9tIGlzIFRydWU6CiMgICAgICAgICAgICAgICAgICAgICBmLnNlZWsocmVxdWVzdFsnc2l6ZSddIC0gOSkKIyAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoc3RyKHJhbmRvbS5nZXRyYW5kYml0cyg2NCkpKQojICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnXDAnKQojICAgICAgICAgICAgICAgICBlbHNlOgojICAgICAgICAgICAgICAgICAgICAgZi5zZWVrKHJlcXVlc3RbJ3NpemUnXSAtIDEpCiMgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCdcMCcpCgogICAgICAgIHRyeToKICAgICAgICAgICAgZGdzdCA9IGR4Zi5wdXNoX2Jsb2IocmVxdWVzdFsnZGF0YSddKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgZGdzdCA9ICdiYWQnCiAgICAgICAgcHJpbnQgcmVxdWVzdFsndXJpJ10sIGRnc3QKICAgICAgICB0cmFjZVtyZXF1ZXN0Wyd1cmknXV0gPSBkZ3N0CiMgICAgIG9zLnJlbW92ZShzdHIob3MuZ2V0cGlkKCkpKQogICAgcS5wdXQodHJhY2UpCgpkZWYgd2FybXVwKGRhdGEsIG91dF90cmFjZSwgcmVnaXN0cnksIHRocmVhZHMsIGdlbmVyYXRlX3JhbmRvbSk6CiAgICB0cmFjZSA9IHt9CiAgICBwcm9jZXNzZXMgPSBbXQogICAgcSA9IFF1ZXVlKCkKICAgIHByb2Nlc3NfZGF0YSA9IFtdCiAgICBmb3IgaSBpbiByYW5nZSh0aHJlYWRzKToKICAgICAgICBwcm9jZXNzX2RhdGEuYXBwZW5kKFtdKQogICAgaSA9IDAKICAgIGZvciByZXF1ZXN0IGluIGRhdGE6CiAgICAgICAgaWYgcmVxdWVzdFsnbWV0aG9kJ10gPT0gJ0dFVCc6CiAgICAgICAgICAgIHByb2Nlc3NfZGF0YVtpICUgdGhyZWFkc10uYXBwZW5kKHJlcXVlc3QpCiAgICAgICAgICAgIGkgKz0gMQogICAgZm9yIGkgaW4gcmFuZ2UodGhyZWFkcyk6CiAgICAgICAgcCA9IFByb2Nlc3ModGFyZ2V0PXNlbmRfd2FybXVwX3RocmVhZCwgYXJncz0ocHJvY2Vzc19kYXRhW2ldLCBxLCByZWdpc3RyeSwgZ2VuZXJhdGVfcmFuZG9tKSkKICAgICAgICBwcm9jZXNzZXMuYXBwZW5kKHApCgogICAgZm9yIHAgaW4gcHJvY2Vzc2VzOgogICAgICAgIHAuc3RhcnQoKQoKICAgIGZvciBpIGluIHJhbmdlKHRocmVhZHMpOgogICAgICAgIGQgPSBxLmdldCgpCiAgICAgICAgZm9yIHRoaW5nIGluIGQ6CiAgICAgICAgICAgIGlmIHRoaW5nIGluIHRyYWNlOgogICAgICAgICAgICAgICAgaWYgdHJhY2VbdGhpbmddID09ICdiYWQnIGFuZCBkW3RoaW5nXSAhPSAnYmFkJzoKICAgICAgICAgICAgICAgICAgICB0cmFjZVt0aGluZ10gPSBkW3RoaW5nXQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgdHJhY2VbdGhpbmddID0gZFt0aGluZ10KCiAgICBmb3IgcCBpbiBwcm9jZXNzZXM6CiAgICAgICAgcC5qb2luKCkKCiAgICB3aXRoIG9wZW4ob3V0X3RyYWNlLCAndycpIGFzIGY6CiAgICAgICAganNvbi5kdW1wKHRyYWNlLCBmKQogCmRlZiBzdGF0cyhyZXNwb25zZXMpOgogICAgcmVzcG9uc2VzLnNvcnQoa2V5ID0gbGFtYmRhIHg6IHhbJ3RpbWUnXSkKCiAgICBlbmR0aW1lID0gMAogICAgZGF0YSA9IDAKICAgIGxhdGVuY3kgPSAwCiAgICB0b3RhbCA9IGxlbihyZXNwb25zZXMpCiAgICBvblRpbWVzID0gMAogICAgZmFpbGVkID0gMAogICAgd3JvbmdkaWdlc3QgPSAwCiAgICBzdGFydFRpbWUgPSByZXNwb25zZXNbMF1bJ3RpbWUnXQogICAgZm9yIHIgaW4gcmVzcG9uc2VzOgojICAgICAgICAgaWYgclsnb25UaW1lJ10gPT0gJ2ZhaWxlZCc6CiAgICAgICAgaWYgImZhaWxlZCIgaW4gclsnb25UaW1lJ106CiAgICAgICAgICAgIHRvdGFsIC09IDEKICAgICAgICAgICAgZmFpbGVkICs9IDEKICAgICAgICAgICAgY29udGludWUKICAgICAgICBpZiByWyd0aW1lJ10gKyByWydkdXJhdGlvbiddID4gZW5kdGltZToKICAgICAgICAgICAgZW5kdGltZSA9IHJbJ3RpbWUnXSArIHJbJ2R1cmF0aW9uJ10KICAgICAgICBsYXRlbmN5ICs9IHJbJ2R1cmF0aW9uJ10KICAgICAgICBk"}}]
["1717f87dba6ca810c98f75f3d1c711738f0e45d5-4","1717f87dba6ca810c98f75f3d1c711738f0e45d5",{"$cut":{"chars":33016,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgdHJhY2ViYWNrCmltcG9ydCBzb2NrZXQKaW1wb3J0IG9zCmZyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCmltcG9ydCByZXF1ZXN0cwppbXBvcnQgdGltZQppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHJhbmRvbQppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCBtdWx0aXByb2Nlc3NpbmcKaW1wb3J0IGpzb24gCmltcG9ydCB5YW1sCmZyb20gZHhmIGltcG9ydCAqCmZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzLCBRdWV1ZQppbXBvcnQgaW1wb3J0bGliCmltcG9ydCBoYXNoX3JpbmcKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKCmlucHV0X2RpciA9ICcvaG9tZS9uYW5uYW4vZG9ja2VyaW1hZ2VzL2RvY2tlci10cmFjZXMvZGF0YV9jZW50ZXJzLycKCiMjIGdldCByZXF1ZXN0cwpkZWYgc2VuZF9yZXF1ZXN0X2dldChjbGllbnQsIHBheWxvYWQpOgogICAgIyMgUmVhZCBmcm9tIHRoZSBxdWV1ZQogICAgcyA9IHJlcXVlc3RzLnNlc3Npb24oKQogICAgaGVhZGVycyA9IHsnQ29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQWNjZXB0JzogJ3RleHQvcGxhaW4nfQogICAgcy5wb3N0KCJodHRwOi8vIiArIHN0cihjbGllbnQpICsgIi91cCIsIGRhdGE9anNvbi5kdW1wcyhwYXlsb2FkKSwgaGVhZGVycz1oZWFkZXJzLCB0aW1lb3V0PTEwMCkKCmRlZiBzZW5kX3dhcm11cF90aHJlYWQocmVxdWVzdHMsIHEsIHJlZ2lzdHJ5LCBnZW5lcmF0ZV9yYW5kb20pOgogICAgdHJhY2UgPSB7fQogICAgZHhmID0gRFhGKHJlZ2lzdHJ5LCAndGVzdF9yZXBvJywgaW5zZWN1cmU9VHJ1ZSkKIyAgICAgZiA9IG9wZW4oc3RyKG9zLmdldHBpZCgpKSwgJ3diJykKIyAgICAgZi53cml0ZSgnXDAnKQojICAgICBmLmNsb3NlKCkKICAgIGZvciByZXF1ZXN0IGluIHJlcXVlc3RzOgogICAgICAgIGlmIHJlcXVlc3RbJ3NpemUnXSA8IDA6CiAgICAgICAgICAgIHRyYWNlW3JlcXVlc3RbJ3VyaSddXSA9ICdiYWQnCiMgICAgICAgICBlbGlmIG5vdCAocmVxdWVzdFsndXJpJ10gaW4gdHJhY2UpOgojICAgICAgICAgICAgIHdpdGggb3BlbihzdHIob3MuZ2V0cGlkKCkpLCAnd2InKSBhcyBmOgojICAgICAgICAgICAgICAgICBpZiBnZW5lcmF0ZV9yYW5kb20gaXMgVHJ1ZToKIyAgICAgICAgICAgICAgICAgICAgIGYuc2VlayhyZXF1ZXN0WydzaXplJ10gLSA5KQojICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShzdHIocmFuZG9tLmdldHJhbmRiaXRzKDY0KSkpCiMgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCdcMCcpCiMgICAgICAgICAgICAgICAgIGVsc2U6CiMgICAgICAgICAgICAgICAgICAgICBmLnNlZWsocmVxdWVzdFsnc2l6ZSddIC0gMSkKIyAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJ1wwJykKCiAgICAgICAgdHJ5OgogICAgICAgICAgICBkZ3N0ID0gZHhmLnB1c2hfYmxvYihyZXF1ZXN0WydkYXRhJ10pCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICBkZ3N0ID0gJ2JhZCcKICAgICAgICBwcmludCByZXF1ZXN0Wyd1cmknXSwgZGdzdAogICAgICAgIHRyYWNlW3JlcXVlc3RbJ3VyaSddXSA9IGRnc3QKIyAgICAgb3MucmVtb3ZlKHN0cihvcy5nZXRwaWQoKSkpCiAgICBxLnB1dCh0cmFjZSkKCmRlZiB3YXJtdXAoZGF0YSwgb3V0X3RyYWNlLCByZWdpc3RyeSwgdGhyZWFkcywgZ2VuZXJhdGVfcmFuZG9tKToKICAgIHRyYWNlID0ge30KICAgIHByb2Nlc3NlcyA9IFtdCiAgICBxID0gUXVldWUoKQogICAgcHJvY2Vzc19kYXRhID0gW10KICAgIGZvciBpIGluIHJhbmdlKHRocmVhZHMpOgogICAgICAgIHByb2Nlc3NfZGF0YS5hcHBlbmQoW10pCiAgICBpID0gMAogICAgZm9yIHJlcXVlc3QgaW4gZGF0YToKICAgICAgICBpZiByZXF1ZXN0WydtZXRob2QnXSA9PSAnR0VUJzoKICAgICAgICAgICAgcHJvY2Vzc19kYXRhW2kgJSB0aHJlYWRzXS5hcHBlbmQocmVxdWVzdCkKICAgICAgICAgICAgaSArPSAxCiAgICBmb3IgaSBpbiByYW5nZSh0aHJlYWRzKToKICAgICAgICBwID0gUHJvY2Vzcyh0YXJnZXQ9c2VuZF93YXJtdXBfdGhyZWFkLCBhcmdzPShwcm9jZXNzX2RhdGFbaV0sIHEsIHJlZ2lzdHJ5LCBnZW5lcmF0ZV9yYW5kb20pKQogICAgICAgIHByb2Nlc3Nlcy5hcHBlbmQocCkKCiAgICBmb3IgcCBpbiBwcm9jZXNzZXM6CiAgICAgICAgcC5zdGFydCgpCgogICAgZm9yIGkgaW4gcmFuZ2UodGhyZWFkcyk6CiAgICAgICAgZCA9IHEuZ2V0KCkKICAgICAgICBmb3IgdGhpbmcgaW4gZDoKICAgICAgICAgICAgaWYgdGhpbmcgaW4gdHJhY2U6CiAgICAgICAgICAgICAgICBpZiB0cmFjZVt0aGluZ10gPT0gJ2JhZCcgYW5kIGRbdGhpbmddICE9ICdiYWQnOgogICAgICAgICAgICAgICAgICAgIHRyYWNlW3RoaW5nXSA9IGRbdGhpbmddCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0cmFjZVt0aGluZ10gPSBkW3RoaW5nXQoKICAgIGZvciBwIGluIHByb2Nlc3NlczoKICAgICAgICBwLmpvaW4oKQoKICAgIHdpdGggb3BlbihvdXRfdHJhY2UsICd3JykgYXMgZjoKICAgICAgICBqc29uLmR1bXAodHJhY2UsIGYpCiAKZGVmIHN0YXRzKHJlc3BvbnNlcyk6CiAgICByZXNwb25zZXMuc29ydChrZXkgPSBsYW1iZGEgeDogeFsndGltZSddKQoKICAgIGVuZHRpbWUgPSAwCiAgICBkYXRhID0gMAogICAgbGF0ZW5jeSA9IDAKICAgIHRvdGFsID0gbGVuKHJlc3BvbnNlcykKICAgIG9uVGltZXMgPSAwCiAgICBmYWlsZWQgPSAwCiAgICB3cm9uZ2RpZ2VzdCA9IDAKICAgIHN0YXJ0VGltZSA9IHJlc3BvbnNlc1swXVsndGltZSddCiAgICBmb3IgciBpbiByZXNwb25zZXM6CiMgICAgICAgICBpZiByWydvblRpbWUnXSA9PSAnZmFpbGVkJzoKICAgICAgICBpZiAiZmFpbGVkIiBpbiByWydvblRpbWUnXToKICAgICAgICAgICAgdG90YWwgLT0gMQogICAgICAgICAgICBmYWlsZWQgKz0gMQogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGlmIHJbJ3RpbWUnXSArIHJbJ2R1cmF0aW9uJ10gPiBlbmR0aW1lOgogICAgICAgICAgICBlbmR0aW1lID0gclsndGltZSddICsgclsnZHVyYXRpb24nXQogICAg"}}]
["1717f87dba6ca810c98f75f3d1c711738f0e45d5-5","1717f87dba6ca810c98f75f3d1c711738f0e45d5",{"$cut":{"chars":40904,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgdHJhY2ViYWNrCmltcG9ydCBzb2NrZXQKaW1wb3J0IG9zCmZyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCmltcG9ydCByZXF1ZXN0cwppbXBvcnQgdGltZQppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHJhbmRvbQppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCBtdWx0aXByb2Nlc3NpbmcKaW1wb3J0IGpzb24gCmltcG9ydCB5YW1sCmZyb20gZHhmIGltcG9ydCAqCmZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzLCBRdWV1ZQppbXBvcnQgaW1wb3J0bGliCmltcG9ydCBoYXNoX3JpbmcKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKCmlucHV0X2RpciA9ICcvaG9tZS9uYW5uYW4vZG9ja2VyaW1hZ2VzL2RvY2tlci10cmFjZXMvZGF0YV9jZW50ZXJzLycKCiMjIGdldCByZXF1ZXN0cwpkZWYgc2VuZF9yZXF1ZXN0X2dldChjbGllbnQsIHBheWxvYWQpOgogICAgIyMgUmVhZCBmcm9tIHRoZSBxdWV1ZQogICAgcyA9IHJlcXVlc3RzLnNlc3Npb24oKQogICAgaGVhZGVycyA9IHsnQ29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQWNjZXB0JzogJ3RleHQvcGxhaW4nfQogICAgcy5wb3N0KCJodHRwOi8vIiArIHN0cihjbGllbnQpICsgIi91cCIsIGRhdGE9anNvbi5kdW1wcyhwYXlsb2FkKSwgaGVhZGVycz1oZWFkZXJzLCB0aW1lb3V0PTEwMCkKCmRlZiBzZW5kX3dhcm11cF90aHJlYWQocmVxdWVzdHMsIHEsIHJlZ2lzdHJ5LCBnZW5lcmF0ZV9yYW5kb20pOgogICAgdHJhY2UgPSB7fQogICAgZHhmID0gRFhGKHJlZ2lzdHJ5LCAndGVzdF9yZXBvJywgaW5zZWN1cmU9VHJ1ZSkKIyAgICAgZiA9IG9wZW4oc3RyKG9zLmdldHBpZCgpKSwgJ3diJykKIyAgICAgZi53cml0ZSgnXDAnKQojICAgICBmLmNsb3NlKCkKICAgIGZvciByZXF1ZXN0IGluIHJlcXVlc3RzOgogICAgICAgIGlmIHJlcXVlc3RbJ3NpemUnXSA8IDA6CiAgICAgICAgICAgIHRyYWNlW3JlcXVlc3RbJ3VyaSddXSA9ICdiYWQnCiMgICAgICAgICBlbGlmIG5vdCAocmVxdWVzdFsndXJpJ10gaW4gdHJhY2UpOgojICAgICAgICAgICAgIHdpdGggb3BlbihzdHIob3MuZ2V0cGlkKCkpLCAnd2InKSBhcyBmOgojICAgICAgICAgICAgICAgICBpZiBnZW5lcmF0ZV9yYW5kb20gaXMgVHJ1ZToKIyAgICAgICAgICAgICAgICAgICAgIGYuc2VlayhyZXF1ZXN0WydzaXplJ10gLSA5KQojICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShzdHIocmFuZG9tLmdldHJhbmRiaXRzKDY0KSkpCiMgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCdcMCcpCiMgICAgICAgICAgICAgICAgIGVsc2U6CiMgICAgICAgICAgICAgICAgICAgICBmLnNlZWsocmVxdWVzdFsnc2l6ZSddIC0gMSkKIyAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJ1wwJykKCiAgICAgICAgdHJ5OgogICAgICAgICAgICBkZ3N0ID0gZHhmLnB1c2hfYmxvYihyZXF1ZXN0WydkYXRhJ10pCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICBkZ3N0ID0gJ2JhZCcKICAgICAgICBwcmludCByZXF1ZXN0Wyd1cmknXSwgZGdzdAogICAgICAgIHRyYWNlW3JlcXVlc3RbJ3VyaSddXSA9IGRnc3QKIyAgICAgb3MucmVtb3ZlKHN0cihvcy5nZXRwaWQoKSkpCiAgICBxLnB1dCh0cmFjZSkKCmRlZiB3YXJtdXAoZGF0YSwgb3V0X3RyYWNlLCByZWdpc3RyeSwgdGhyZWFkcywgZ2VuZXJhdGVfcmFuZG9tKToKICAgIHRyYWNlID0ge30KICAgIHByb2Nlc3NlcyA9IFtdCiAgICBxID0gUXVldWUoKQogICAgcHJvY2Vzc19kYXRhID0gW10KICAgIGZvciBpIGluIHJhbmdlKHRocmVhZHMpOgogICAgICAgIHByb2Nlc3NfZGF0YS5hcHBlbmQoW10pCiAgICBpID0gMAogICAgZm9yIHJlcXVlc3QgaW4gZGF0YToKICAgICAgICBpZiByZXF1ZXN0WydtZXRob2QnXSA9PSAnR0VUJzoKICAgICAgICAgICAgcHJvY2Vzc19kYXRhW2kgJSB0aHJlYWRzXS5hcHBlbmQocmVxdWVzdCkKICAgICAgICAgICAgaSArPSAxCiAgICBmb3IgaSBpbiByYW5nZSh0aHJlYWRzKToKICAgICAgICBwID0gUHJvY2Vzcyh0YXJnZXQ9c2VuZF93YXJtdXBfdGhyZWFkLCBhcmdzPShwcm9jZXNzX2RhdGFbaV0sIHEsIHJlZ2lzdHJ5LCBnZW5lcmF0ZV9yYW5kb20pKQogICAgICAgIHByb2Nlc3Nlcy5hcHBlbmQocCkKCiAgICBmb3IgcCBpbiBwcm9jZXNzZXM6CiAgICAgICAgcC5zdGFydCgpCgogICAgZm9yIGkgaW4gcmFuZ2UodGhyZWFkcyk6CiAgICAgICAgZCA9IHEuZ2V0KCkKICAgICAgICBmb3IgdGhpbmcgaW4gZDoKICAgICAgICAgICAgaWYgdGhpbmcgaW4gdHJhY2U6CiAgICAgICAgICAgICAgICBpZiB0cmFjZVt0aGluZ10gPT0gJ2JhZCcgYW5kIGRbdGhpbmddICE9ICdiYWQnOgogICAgICAgICAgICAgICAgICAgIHRyYWNlW3RoaW5nXSA9IGRbdGhpbmddCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0cmFjZVt0aGluZ10gPSBkW3RoaW5nXQoKICAgIGZvciBwIGluIHByb2Nlc3NlczoKICAgICAgICBwLmpvaW4oKQoKICAgIHdpdGggb3BlbihvdXRfdHJhY2UsICd3JykgYXMgZjoKICAgICAgICBqc29uLmR1bXAodHJhY2UsIGYpCiAKZGVmIHN0YXRzKHJlc3BvbnNlcyk6CiAgICByZXNwb25zZXMuc29ydChrZXkgPSBsYW1iZGEgeDogeFsndGltZSddKQoKICAgIGVuZHRpbWUgPSAwCiAgICBkYXRhID0gMAogICAgbGF0ZW5jeSA9IDAKICAgIHRvdGFsID0gbGVuKHJlc3BvbnNlcykKICAgIG9uVGltZXMgPSAwCiAgICBmYWlsZWQgPSAwCiAgICB3cm9uZ2RpZ2VzdCA9IDAKICAgIHN0YXJ0VGltZSA9IHJlc3BvbnNlc1swXVsndGltZSddCiAgICBmb3IgciBpbiByZXNwb25zZXM6CiMgICAgICAgICBpZiByWydvblRpbWUnXSA9PSAnZmFpbGVkJzoKICAgICAgICBpZiAiZmFpbGVkIiBpbiByWydvblRpbWUnXToKICAgICAgICAgICAgdG90YWwgLT0gMQogICAgICAgICAgICBmYWlsZWQgKz0gMQogICAgICAgICAgICBjb250aW51ZQo8fGZpbV9ob2xlfD4KICAgICAgICBpZiByWydvblRpbWUnXSA9PSAneWVzJzoKICAgICAgICAgICAgb25UaW1lcyArPSAxCiAgICAgICAgaWYgclsnb25UaW1lJ10gPT0gJ3ll"}}]
["99b62873c56608483e09949295d49a7357e9ad63-1","99b62873c56608483e09949295d49a7357e9ad63","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IFR1cGxlCmZyb20gbWF5cHkuZGlzdHJpYnV0aW9ucyBpbXBvcnQgRGlzdHJpYnV0aW9uCmZyb20gbWF5cHkuZXhwZXJpbWVudC5pbnRlcnByZXRhdGlvbiBpbXBvcnQgSW50ZXJwcmV0YXRpb24KZnJvbSBtYXlweS5leHBlcmltZW50LnJlcG9ydCBpbXBvcnQgUmVwb3J0CmZyb20gbWF5cHkuZXhwZXJpbWVudC50ZXN0IGltcG9ydCBUZXN0CmltcG9ydCBzY2lweS5zdGF0cyBhcyBzdApmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyCgoKY2xhc3MgTGV2ZW5lVGVzdChUZXN0KToKICAgIG51bGxfaHlwb3RoZXNpcyA9ICJUaGUgTGV2ZW5lIHRlc3QgdGVzdHMgdGhlIG51bGwgaHlwb3RoZXNpcyB0aGF0IGFsbCBpbnB1dCBzYW1wbGVzIGFyZSBmcm9tIHBvcHVsYXRpb25zIHdpdGggZXF1YWwgdmFyaWFuY2VzIgoKICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqZGlzdHJpYnV0aW9uczogVHVwbGVbRGlzdHJpYnV0aW9uXSk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAiIiIKICAgICAgICBTb3VyY2VzOgogICAgICAgIC0gaHR0cHM6Ly9kb2NzLnNjaXB5Lm9yZy9kb2Mvc2NpcHkvcmVmZXJlbmNlL2dlbmVyYXRlZC9zY2lweS5zdGF0cy5sZXZlbmUuaHRtbAogICAgICAgIC0gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvS3VydG9zaXMKPHxmaW1fZW5kfD4="]
["99b62873c56608483e09949295d49a7357e9ad63-2","99b62873c56608483e09949295d49a7357e9ad63","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IFR1cGxlCmZyb20gbWF5cHkuZGlzdHJpYnV0aW9ucyBpbXBvcnQgRGlzdHJpYnV0aW9uCmZyb20gbWF5cHkuZXhwZXJpbWVudC5pbnRlcnByZXRhdGlvbiBpbXBvcnQgSW50ZXJwcmV0YXRpb24KZnJvbSBtYXlweS5leHBlcmltZW50LnJlcG9ydCBpbXBvcnQgUmVwb3J0CmZyb20gbWF5cHkuZXhwZXJpbWVudC50ZXN0IGltcG9ydCBUZXN0CmltcG9ydCBzY2lweS5zdGF0cyBhcyBzdApmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyCgoKY2xhc3MgTGV2ZW5lVGVzdChUZXN0KToKICAgIG51bGxfaHlwb3RoZXNpcyA9ICJUaGUgTGV2ZW5lIHRlc3QgdGVzdHMgdGhlIG51bGwgaHlwb3RoZXNpcyB0aGF0IGFsbCBpbnB1dCBzYW1wbGVzIGFyZSBmcm9tIHBvcHVsYXRpb25zIHdpdGggZXF1YWwgdmFyaWFuY2VzIgoKICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqZGlzdHJpYnV0aW9uczogVHVwbGVbRGlzdHJpYnV0aW9uXSk6CiAgICAgICAgIiIiCiAgICAgICAgU291cmNlczoKICAgICAgICAtIGh0dHBzOi8vZG9jcy5zY2lweS5vcmcvZG9jL3NjaXB5L3JlZmVyZW5jZS9nZW5lcmF0ZWQvc2NpcHkuc3RhdHMubGV2ZW5lLmh0bWwKICAgICAgICAtIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0t1cnRvc2lzCgogICAgICAgIDpwYXJhbSBQOgogICAgICAgIDpyZXR1cm46CiAgICAgICAgIiIiCiAgICAgICAgbW9zdF9jb21tb25fc2tld25lc3MgPSBDb3VudGVyKFtQLnNrZXduZXNzIGZvciBQIGluIGRpc3RyaWJ1dGlvbnNdKS5tb3N0X2NvbW1vbigxKVswXQogICAgICAgIG1vc3RfY29tbW9uX2t1cnRvc2lzID0gQ291bnRlcihbUC5rdXJ0b3NpcyBmb3IgUCBpbiBkaXN0cmlidXRpb25zXSkubW9zdF9jb21tb24oMSlbMF0KCiAgICAgICAgaWYgbW9zdF9jb21tb25fc2tld25lc3MgIT0gIm5vcm1hbCI6CiAgICAgICAgICAgIGNlbnRlciA9ICJtZWRpYW4iCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgbW9zdF9jb21tb25fa3VydG9zaXMgPT0gInBlYWtlZCI6CiAgICAgICAgICAgICAgICBjZW50ZXIgPSAidHJpbW1lZCIKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGNlbnRlciA9ICJtZWFuIgoKICAgICAgICBzdGF0aXN0aWMsIHBfdmFsdWUgPSBzdC5sZXZlbmUoKltQLmRhdGEgZm9yIFAgaW4gZGlzdHJpYnV0aW9uc10sIGNlbnRlcj1jZW50ZXIpCiAgICAgICAgcmVwb3J0ID0gUmVwb3J0KGYiTGV2ZW5lICh7Y2VudGVyfSkiLAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgICAgICAgICAgcF92YWx1ZT1wX3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICBoMF9yZWplY3RlZD1sYW1iZGEgYWxwaGE6IHBfdmFsdWUgPiBhbHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwcmV0YXRpb249bGFtYmRhIGFscGhhOiBJbnRlcnByZXRhdGlvbihwX3ZhbHVlID4gYWxwaGEpKQoKICAgICAgICByZXR1cm4gcmVwb3J0Cjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0aXN0aWMiLAogICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2Rlc2NyaXB0aW9uPWYiRXF1YWxpdHkgb2YgVmFyaWFuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICBjb25jbHVzaW9uPSJFcXVhbCBWYXJpYW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpYz1zdGF0aXN0aWMsCjx8ZmltX2VuZHw+"]
["99b62873c56608483e09949295d49a7357e9ad63-3","99b62873c56608483e09949295d49a7357e9ad63","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IFR1cGxlCmZyb20gbWF5cHkuZGlzdHJpYnV0aW9ucyBpbXBvcnQgRGlzdHJpYnV0aW9uCmZyb20gbWF5cHkuZXhwZXJpbWVudC5pbnRlcnByZXRhdGlvbiBpbXBvcnQgSW50ZXJwcmV0YXRpb24KZnJvbSBtYXlweS5leHBlcmltZW50LnJlcG9ydCBpbXBvcnQgUmVwb3J0CmZyb20gbWF5cHkuZXhwZXJpbWVudC50ZXN0IGltcG9ydCBUZXN0CmltcG9ydCBzY2lweS5zdGF0cyBhcyBzdApmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyCgoKY2xhc3MgTGV2ZW5lVGVzdChUZXN0KToKICAgIG51bGxfaHlwb3RoZXNpcyA9ICJUaGUgTGV2ZW5lIHRlc3QgdGVzdHMgdGhlIG51bGwgaHlwb3RoZXNpcyB0aGF0IGFsbCBpbnB1dCBzYW1wbGVzIGFyZSBmcm9tIHBvcHVsYXRpb25zIHdpdGggZXF1YWwgdmFyaWFuY2VzIgoKICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqZGlzdHJpYnV0aW9uczogVHVwbGVbRGlzdHJpYnV0aW9uXSk6CiAgICAgICAgIiIiCiAgICAgICAgU291cmNlczoKICAgICAgICAtIGh0dHBzOi8vZG9jcy5zY2lweS5vcmcvZG9jL3NjaXB5L3JlZmVyZW5jZS9nZW5lcmF0ZWQvc2NpcHkuc3RhdHMubGV2ZW5lLmh0bWwKICAgICAgICAtIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0t1cnRvc2lzCgogICAgICAgIDpwYXJhbSBQOgogICAgICAgIDpyZXR1cm46CiAgICAgICAgIiIiCiAgICAgICAgbW9zdF9jb21tb25fc2tld25lc3MgPSBDb3VudGVyKFtQLnNrZXduZXNzIGZvciBQIGluIGRpc3RyaWJ1dGlvbnNdKS5tb3N0X2NvbW1vbigxKVswXQogICAgICAgIG1vc3RfY29tbW9uX2t1cnRvc2lzID0gQ291bnRlcihbUC5rdXJ0b3NpcyBmb3IgUCBpbiBkaXN0cmlidXRpb25zXSkubW9zdF9jb21tb24oMSlbMF0KCiAgICAgICAgaWYgbW9zdF9jb21tb25fc2tld25lc3MgIT0gIm5vcm1hbCI6CiAgICAgICAgICAgIGNlbnRlciA9ICJtZWRpYW4iCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgbW9zdF9jb21tb25fa3VydG9zaXMgPT0gInBlYWtlZCI6CiAgICAgICAgICAgICAgICBjZW50ZXIgPSAidHJpbW1lZCIKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGNlbnRlciA9ICJtZWFuIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgIHN0YXRpc3RpYywgcF92YWx1ZSA9IHN0LmxldmVuZSgqW1AuZGF0YSBmb3IgUCBpbiBkaXN0cmlidXRpb25zXSwgY2VudGVyPWNlbnRlcikKICAgICAgICByZXBvcnQgPSBSZXBvcnQoZiJMZXZlbmUgKHtjZW50ZXJ9KSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0aXN0aWMiLAo8fGZpbV9lbmR8Pg=="]
["99b62873c56608483e09949295d49a7357e9ad63-4","99b62873c56608483e09949295d49a7357e9ad63","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IFR1cGxlCmZyb20gbWF5cHkuZGlzdHJpYnV0aW9ucyBpbXBvcnQgRGlzdHJpYnV0aW9uCmZyb20gbWF5cHkuZXhwZXJpbWVudC5pbnRlcnByZXRhdGlvbiBpbXBvcnQgSW50ZXJwcmV0YXRpb24KZnJvbSBtYXlweS5leHBlcmltZW50LnJlcG9ydCBpbXBvcnQgUmVwb3J0CmZyb20gbWF5cHkuZXhwZXJpbWVudC50ZXN0IGltcG9ydCBUZXN0CmltcG9ydCBzY2lweS5zdGF0cyBhcyBzdApmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyCgoKY2xhc3MgTGV2ZW5lVGVzdChUZXN0KToKICAgIG51bGxfaHlwb3RoZXNpcyA9ICJUaGUgTGV2ZW5lIHRlc3QgdGVzdHMgdGhlIG51bGwgaHlwb3RoZXNpcyB0aGF0IGFsbCBpbnB1dCBzYW1wbGVzIGFyZSBmcm9tIHBvcHVsYXRpb25zIHdpdGggZXF1YWwgdmFyaWFuY2VzIgoKPHxmaW1faG9sZXw+CiAgICAgICAgLSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9LdXJ0b3NpcwoKICAgICAgICA6cGFyYW0gUDoKICAgICAgICA6cmV0dXJuOgogICAgICAgICIiIgogICAgICAgIG1vc3RfY29tbW9uX3NrZXduZXNzID0gQ291bnRlcihbUC5za2V3bmVzcyBmb3IgUCBpbiBkaXN0cmlidXRpb25zXSkubW9zdF9jb21tb24oMSlbMF0KICAgICAgICBtb3N0X2NvbW1vbl9rdXJ0b3NpcyA9IENvdW50ZXIoW1Aua3VydG9zaXMgZm9yIFAgaW4gZGlzdHJpYnV0aW9uc10pLm1vc3RfY29tbW9uKDEpWzBdCgogICAgICAgIGlmIG1vc3RfY29tbW9uX3NrZXduZXNzICE9ICJub3JtYWwiOgogICAgICAgICAgICBjZW50ZXIgPSAibWVkaWFuIgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGlmIG1vc3RfY29tbW9uX2t1cnRvc2lzID09ICJwZWFrZWQiOgogICAgICAgICAgICAgICAgY2VudGVyID0gInRyaW1tZWQiCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBjZW50ZXIgPSAibWVhbiIKCiAgICAgICAgc3RhdGlzdGljLCBwX3ZhbHVlID0gc3QubGV2ZW5lKCpbUC5kYXRhIGZvciBQIGluIGRpc3RyaWJ1dGlvbnNdLCBjZW50ZXI9Y2VudGVyKQogICAgICAgIHJlcG9ydCA9IFJlcG9ydChmIkxldmVuZSAoe2NlbnRlcn0pIiwKICAgICAgICAgICAgICAgICAgICAgICAgInN0YXRpc3RpYyIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZGVzY3JpcHRpb249ZiJFcXVhbGl0eSBvZiBWYXJpYW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNsdXNpb249IkVxdWFsIFZhcmlhbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljPXN0YXRpc3RpYywKICAgICAgICAgICAgICAgICAgICAgICAgcF92YWx1ZT1wX3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICBoMF9yZWplY3RlZD1sYW1iZGEgYWxwaGE6IHBfdmFsdWUgPiBhbHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwcmV0YXRpb249bGFtYmRhIGFscGhhOiBJbnRlcnByZXRhdGlvbihwX3ZhbHVlID4gYWxwaGEpKQoKICAgICAgICByZXR1cm4gcmVwb3J0Cjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgX19jYWxsX18oc2VsZiwgKmRpc3RyaWJ1dGlvbnM6IFR1cGxlW0Rpc3RyaWJ1dGlvbl0pOgogICAgICAgICIiIgogICAgICAgIFNvdXJjZXM6CiAgICAgICAgLSBodHRwczovL2RvY3Muc2NpcHkub3JnL2RvYy9zY2lweS9yZWZlcmVuY2UvZ2VuZXJhdGVkL3NjaXB5LnN0YXRzLmxldmVuZS5odG1sCjx8ZmltX2VuZHw+"]
["e5e3a1b372dd52a1c470c0f098c27739feb558f7-1","e5e3a1b372dd52a1c470c0f098c27739feb558f7","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMi4xIG9uIDIwMTktMDgtMjEgMTA6MjMKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgKCdndWknLCAnMDAwOV9uZXdzX2FkZGVkX2J5JyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLlJlbmFtZUZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSduZXdzJywKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBvbGRfbmFtZT0nYWRkZWRfYnknLAogICAgICAgICAgICBuZXdfbmFtZT0nYXV0aG9yJywKPHxmaW1fZW5kfD4="]
["e5e3a1b372dd52a1c470c0f098c27739feb558f7-2","e5e3a1b372dd52a1c470c0f098c27739feb558f7","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgKCdndWknLCAnMDAwOV9uZXdzX2FkZGVkX2J5JyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLlJlbmFtZUZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSduZXdzJywKICAgICAgICAgICAgb2xkX25hbWU9J2FkZGVkX2J5JywKICAgICAgICAgICAgbmV3X25hbWU9J2F1dGhvcicsCiAgICAgICAgKSwKICAgIF0KPHxmaW1fc3VmZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMi4xIG9uIDIwMTktMDgtMjEgMTA6MjMKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zCgo8fGZpbV9lbmR8Pg=="]
["e5e3a1b372dd52a1c470c0f098c27739feb558f7-3","e5e3a1b372dd52a1c470c0f098c27739feb558f7","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMi4xIG9uIDIwMTktMDgtMjEgMTA6MjMKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgKCdndWknLCAnMDAwOV9uZXdzX2FkZGVkX2J5JyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLlJlbmFtZUZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSduZXdzJywKICAgICAgICAgICAgb2xkX25hbWU9J2FkZGVkX2J5JywKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBuZXdfbmFtZT0nYXV0aG9yJywKPHxmaW1fZW5kfD4="]
["e5e3a1b372dd52a1c470c0f098c27739feb558f7-4","e5e3a1b372dd52a1c470c0f098c27739feb558f7","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMi4xIG9uIDIwMTktMDgtMjEgMTA6MjMKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAoJ2d1aScsICcwMDA5X25ld3NfYWRkZWRfYnknKSwKPHxmaW1fZW5kfD4="]
["ec1f7cfa0a722e85615ec71dc1562a184b94b223-1","ec1f7cfa0a722e85615ec71dc1562a184b94b223","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCmltcG9ydCBweW1lbC5jb3JlIGFzIHB5bWVsCmZyb20gdWkgaW1wb3J0IHdpZGdldF9saXN0X21lc2hlcwoKZnJvbSBvbXRrLmxpYnMgaW1wb3J0IGxpYlNraW5uaW5nCmZyb20gb210ay5saWJzIGltcG9ydCBsaWJRdAoKZnJvbSBvbXRrLnZlbmRvci5RdCBpbXBvcnQgUXRDb3JlLCBRdEd1aSwgUXRXaWRnZXRzCgppbXBvcnQgdWlfc2hhcmVkCgoKY2xhc3MgV2lkZ2V0TGlzdE1lc2hlcyhRdFdpZGdldHMuUVdpZGdldCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50PU5vbmUpOgogICAgICAgIHN1cGVyKFdpZGdldExpc3RNZXNoZXMsIHNlbGYpLl9faW5pdF9fKHBhcmVudD1wYXJlbnQpCgogICAgICAgIHNlbGYuX3JpZyA9IE5vbmUKCiAgICAgICAgc2VsZi51aSA9IHdpZGdldF9saXN0X21lc2hlcy5VaV9Gb3JtKCkKICAgICAgICBzZWxmLnVpLnNldHVwVWkoc2VsZikKCiAgICAgICAgIyBDb25uZWN0IGV2ZW50cwogICAgICAgIHNlbGYudWkudHJlZVdpZGdldC5pdGVtU2VsZWN0aW9uQ2hhbmdlZC5jb25uZWN0KHNlbGYub25fbWVzaF9zZWxlY3Rpb25fY2hhbmdlZCkKICAgICAgICBzZWxmLnVpLmxpbmVFZGl0X3NlYXJjaC50ZXh0Q2hhbmdlZC5jb25uZWN0KHNlbGYub25fbWVzaGVzX3F1ZXJ5X2NoYW5nZWQpCiAgICAgICAgc2VsZi51aS5wdXNoQnV0dG9uX3NlbGVjdEdycE1lc2hlcy5wcmVzc2VkLmNvbm5lY3Qoc2VsZi5vbl9TZWxlY3RHcnBNZXNoZXMpCiAgICAgICAgc2VsZi51aS5idG5fdXBkYXRlLnByZXNzZWQuY29ubmVjdChzZWxmLnVwZGF0ZSkKCiAgICBkZWYgc2V0X3JpZyhzZWxmLCByaWcsIHVwZGF0ZT1UcnVlKToKICAgICAgICBzZWxmLl9yaWcgPSByaWcKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGlmIHVwZGF0ZToKICAgICAgICAgICAgc2VsZi51cGRhdGVfbGlzdCgpCgo8fGZpbV9lbmR8Pg=="]
["ec1f7cfa0a722e85615ec71dc1562a184b94b223-2","ec1f7cfa0a722e85615ec71dc1562a184b94b223","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCmltcG9ydCBweW1lbC5jb3JlIGFzIHB5bWVsCmZyb20gdWkgaW1wb3J0IHdpZGdldF9saXN0X21lc2hlcwoKZnJvbSBvbXRrLmxpYnMgaW1wb3J0IGxpYlNraW5uaW5nCmZyb20gb210ay5saWJzIGltcG9ydCBsaWJRdAoKZnJvbSBvbXRrLnZlbmRvci5RdCBpbXBvcnQgUXRDb3JlLCBRdEd1aSwgUXRXaWRnZXRzCgppbXBvcnQgdWlfc2hhcmVkCgoKY2xhc3MgV2lkZ2V0TGlzdE1lc2hlcyhRdFdpZGdldHMuUVdpZGdldCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50PU5vbmUpOgogICAgICAgIHN1cGVyKFdpZGdldExpc3RNZXNoZXMsIHNlbGYpLl9faW5pdF9fKHBhcmVudD1wYXJlbnQpCgogICAgICAgIHNlbGYuX3JpZyA9IE5vbmUKCiAgICAgICAgc2VsZi51aSA9IHdpZGdldF9saXN0X21lc2hlcy5VaV9Gb3JtKCkKICAgICAgICBzZWxmLnVpLnNldHVwVWkoc2VsZikKCiAgICAgICAgIyBDb25uZWN0IGV2ZW50cwogICAgICAgIHNlbGYudWkudHJlZVdpZGdldC5pdGVtU2VsZWN0aW9uQ2hhbmdlZC5jb25uZWN0KHNlbGYub25fbWVzaF9zZWxlY3Rpb25fY2hhbmdlZCkKICAgICAgICBzZWxmLnVpLmxpbmVFZGl0X3NlYXJjaC50ZXh0Q2hhbmdlZC5jb25uZWN0KHNlbGYub25fbWVzaGVzX3F1ZXJ5X2NoYW5nZWQpCiAgICAgICAgc2VsZi51aS5wdXNoQnV0dG9uX3NlbGVjdEdycE1lc2hlcy5wcmVzc2VkLmNvbm5lY3Qoc2VsZi5vbl9TZWxlY3RHcnBNZXNoZXMpCiAgICAgICAgc2VsZi51aS5idG5fdXBkYXRlLnByZXNzZWQuY29ubmVjdChzZWxmLnVwZGF0ZSkKCiAgICBkZWYgc2V0X3JpZyhzZWxmLCByaWcsIHVwZGF0ZT1UcnVlKToKICAgICAgICBzZWxmLl9yaWcgPSByaWcKICAgICAgICBpZiB1cGRhdGU6CiAgICAgICAgICAgIHNlbGYudXBkYXRlX2xpc3QoKQoKICAgIGRlZiB1cGRhdGVfbGlzdChzZWxmKToKICAgICAgICBzZWxmLnVpLnRyZWVXaWRnZXQuY2xlYXIoKQoKICAgICAgICBpZiBzZWxmLl9yaWcgaXMgTm9uZToKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgICMgSGFjazogZm9yY2UgY2FjaGUgdG8gaW52YWxpZGF0ZQogICAgICAgICMgdHJ5OgogICAgICAgICMgICAgIHNlbGYuX3JpZy5nZXRfbWVzaGVzLmZ1bmMuaW1fc2VsZi5jYWNoZS5jbGVhcigpCiAgICAgICAgIyBleGNlcHQgRXhjZXB0aW9uLCBlOgogICAgICAgICMgICAgIHBhc3MKICAgICAgICBhbGxfbWVzaGVzID0gc2VsZi5fcmlnLmdldF9zaGFwZXMoKQoKICAgICAgICBpZiBhbGxfbWVzaGVzOgogICAgICAgICAgICB3aWRnZXRfcm9vdCA9IHNlbGYudWkudHJlZVdpZGdldC5pbnZpc2libGVSb290SXRlbSgpCgogICAgICAgICAgICBmb3IgbWVzaCBpbiBhbGxfbWVzaGVzOgogICAgICAgICAgICAgICAgaW5mbHVlbmNlcyA9IE5vbmUKCiAgICAgICAgICAgICAgICBza2luY2x1c3RlciA9IGxpYlNraW5uaW5nLmdldF9za2luX2NsdXN0ZXIobWVzaCkKICAgICAgICAgICAgICAgIGlmIHNraW5jbHVzdGVyOgogICAgICAgICAgICAgICAgICAgIGluZmx1ZW5jZXMgPSBzb3J0ZWQobGliU2tpbm5pbmcuZ2V0X3NraW5fY2x1c3Rlcl9pbmZsdWVuY2Vfb2JqZWN0cyhza2luY2x1c3RlcikpCgogICAgICAgICAgICAgICAgc2VsZi5fZmlsbF93aWRnZXRfbWVzaGVzKHdpZGdldF9yb290LCBtZXNoLCBpbmZsdWVuY2VzKQoKICAgICAgICBzZWxmLnVwZGF0ZV9saXN0X3Zpc2liaWxpdHkoKQoKICAgIGRlZiBfZmlsbF93aWRnZXRfbWVzaGVzKHNlbGYsIHF0X3BhcmVudCwgbWVzaCwgaW5mbHVlbmNlcyk6CiAgICAgICAgdGV4dEJydXNoID0gUXRHdWkuUUJydXNoKFF0Q29yZS5RdC53aGl0ZSkKCiAgICAgICAgIyBBZGQgbWVzaAogICAgICAgIGl0ZW1fbWVzaCA9IFF0V2lkZ2V0cy5RVHJlZVdpZGdldEl0ZW0oMCkKICAgICAgICBpdGVtX21lc2guc2V0VGV4dCgwLCBzdHIobWVzaCkpCiAgICAgICAgaXRlbV9tZXNoLnNldEZvcmVncm91bmQoMCwgdGV4dEJydXNoKQogICAgICAgIHVpX3NoYXJlZC5fc2V0X2ljb25fZnJvbV90eXBlKG1lc2guZ2V0UGFyZW50KCksIGl0ZW1fbWVzaCkKICAgICAgICBxdF9wYXJlbnQuYWRkQ2hpbGQoaXRlbV9tZXNoKQoKICAgICAgICAjIE1vbmtleS1wYXRjaCBtZXNoIFFXaWRnZXQKICAgICAgICBpdGVtX21lc2gubWV0YWRhdGFfdHlwZSA9IHVpX3NoYXJlZC5NZXRhZGF0YVR5cGUuTWVzaAogICAgICAgIGl0ZW1fbWVzaC5tZXRhZGF0YV9kYXRhID0gbWVzaAoKICAgICAgICAjIEFkZCBpbmZsdWVuY2VzCiAgICAgICAgaWYgaW5mbHVlbmNlczoKICAgICAgICAgICAgZm9yIGluZmx1ZW5jZSBpbiBpbmZsdWVuY2VzOgogICAgICAgICAgICAgICAgaXRlbSA9IFF0V2lkZ2V0cy5RVHJlZVdpZGdldEl0ZW0oMCkKICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGV4dCgwLCBzdHIoaW5mbHVlbmNlKSkKICAgICAgICAgICAgICAgIGl0ZW0uc2V0Rm9yZWdyb3VuZCgwLCB0ZXh0QnJ1c2gpCiAgICAgICAgICAgICAgICB1aV9zaGFyZWQuX3NldF9pY29uX2Zyb21fdHlwZShpbmZsdWVuY2UsIGl0ZW0pCiAgICAgICAgICAgICAgICBpdGVtX21lc2guYWRkQ2hpbGQoaXRlbSkKCiAgICAgICAgICAgICAgICAjIE1vbmtleS1wYXRjaCBpbmZsdWVuY2UgUVdpZGdldAogICAgICAgICAgICAgICAgaXRlbS5tZXRhZGF0YV90eXBlID0gdWlfc2hhcmVkLk1ldGFkYXRhVHlwZS5JbmZsdWVjZQogICAgICAgICAgICAgICAgaXRlbS5tZXRhZGF0YV9kYXRhID0gaW5mbHVlbmNlCgogICAgZGVmIHVwZGF0ZV9saXN0X3Zpc2liaWxpdHkoc2VsZiwgcXVlcnlfcmVnZXg9Tm9uZSk6CiAgICAgICAgaWYgcXVlcnlfcmVnZXggaXMgTm9uZToKICAgICAgICAgICAgcXVlcnlfcmF3ID0gc2VsZi51aS5saW5lRWRpdF9zZWFyY2gudGV4dCgpCiAgICAgICAgICAgIHF1ZXJ5X3JlZ2V4ID0gIi4qezB9LioiLmZvcm1hdChxdWVyeV9yYXcpIGlmIHF1ZXJ5X3JhdyBlbHNlICIuKiIKCiAgICAgICAgZGVmIGZuX2Nhbl9zaG93KHFJdGVtLCBxdWVyeV9yZWdleCk6CiAgICAgICAgICAgIGlmIHFJdGVtLm1ldGFkYXRhX3R5cGUgPT0gdWlfc2hhcmVkLk1ldGFkYXRhVHlwZS5JbmZsdWVjZTogICMgQWx3YXlzIHNob3cgaW5mbHVlbmNlcwogICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKCiAgICAgICAgICAgIHJldHVybiBub3QgcXVlcnlfcmVnZXggb3IgcmUubWF0Y2gocXVlcnlfcmVnZXgsIHFJdGVtLnRleHQoMCksIHJlLklHTk9SRUNBU0UpCgogICAgICAgIGZvciBxdF9pdGVtIGluIGxpYlF0LmdldF9hbGxfUVRyZWVXaWRnZXRJdGVtKHNlbGYudWkudHJlZVdpZGdldCk6CiAgICAgICAgICAgIGNhbl9zaG93ID0gZm5fY2FuX3Nob3cocXRfaXRlbSwgcXVlcnlfcmVnZXgpCiAgICAgICAgICAgIHF0X2l0ZW0uc2V0SGlkZGVuKG5vdCBjYW5fc2hvdykKCiAgICBkZWYgZ2V0X3NlbGVjdGlvbihzZWxmKToKICAgICAgICByZXN1bHQgPSBbXQogICAgICAgIGZvciBpdGVtIGluIHNlbGYudWkudHJlZVdpZGdldC5zZWxlY3RlZEl0ZW1zKCk6CiAgICAgICAgICAgIGlmIGl0ZW0ubWV0YWRhdGFfZGF0YS5leGlzdHMoKToKICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS5tZXRhZGF0YV9kYXRhLmdldFBhcmVudCgpKQogICAgICAgIHJldHVybiByZXN1bHQKCjx8ZmltX2hvbGV8PgogICAgZGVmIG9uX21lc2hfc2VsZWN0aW9uX2NoYW5nZWQoc2VsZik6CiAgICAgICAgcHltZWwuc2VsZWN0KHNlbGYuZ2V0X3NlbGVjdGlvbigpKQoKICAgIGRlZiBvbl9tZXNoZXNfcXVlcnlfY2hhbmdlZChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHNlbGYudXBkYXRlX2xpc3RfdmlzaWJpbGl0eSgpCgogICAgZGVmIG9uX1NlbGVjdEdycE1lc2hlcyhzZWxmKToKICAgICAgICBncnAgPSBzZWxmLl9yaWcuZ3JwX2dlbwogICAgICAgIGlmIG5vdCBncnAgb3Igbm90IGdycC5leGlzdHMoKToKICAgICAgICAgICAgcHltZWwud2FybmluZygiQ2FuJ3QgZmluZCBpbmZsdWVuY2UgZ3JwISIpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHltZWwuc2VsZWN0KGdycCkKPHxmaW1fc3VmZml4fD4KICAgICMKICAgICMgRXZlbnRzCiAgICAjCgo8fGZpbV9lbmR8Pg=="]
["c1d159bd96637557b4fa96544ff18e50354cc23f-1","c1d159bd96637557b4fa96544ff18e50354cc23f","PHxmaW1fcHJlZml4fD4KZGVmIG1haW4oKToKICAgICIiIiBBIHZlcnkgbmFpdmUgd29yZC1jb3VudGVyIiIiCiAgICB3b3JkeV9zdHJpbmcgPSBpbnB1dCgiUGxlYXNlIGVudGVyIGEgc3RyaW5nOlxuIikKICAgIGFscGhhYmV0ID0gWyJxIiwidyIsImUiLCAiciIsICJ0IiwgInkiLCAidSIsICJpIiwgIm8iLCAicCIsICJhIiwgInMiLAogICAgICJkIiwgImYiLCAiZyIsICJoIiwgImoiLCAiayIsICJsIiwgInoiLCAieCIsICJjIiwgInYiLCAiYiIsICJuIiwgIm0iLF0KICAgIHdvcmRfY291bnQgPSAwCiAgICBmb3IgaSBpbiByYW5nZShsZW4oYWxwaGFiZXQpKToKPHxmaW1faG9sZXw+CiAgICBmb3IgaSBpbiB3b3JkeV9zdHJpbmc6CiAgICAgICAgaWYgaSA9PSAiICI6CiAgICAgICAgICAgIHdvcmRfY291bnQgKz0gMQogICAgcHJpbnQod29yZF9jb3VudCkKbWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgaWYgYWxwaGFiZXRbaV0gaW4gd29yZHlfc3RyaW5nOgogICAgICAgICAgICB3b3JkX2NvdW50ID0gMQo8fGZpbV9lbmR8Pg=="]
["41b5cebdd5e6c88a3303f3745d18924cb6099c56-1","41b5cebdd5e6c88a3303f3745d18924cb6099c56","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAppbXBvcnQgb3MKaW1wb3J0IG9zLnBhdGggYXMgb3NwCmltcG9ydCBzeXMKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0b3JjaAoKc3lzLnBhdGguYXBwZW5kKCcuLi8nKQoKCmRlZiB0ZXN0X2RhdGFzZXQoKToKICAgICcnJ1Rlc3QgbG9hZGluZyBzYW1wbGVzIGZyb20gYSBkYXRhc2V0LgogICAgQ2hlY2tzIGRhdGFzZXQgY3JlYXRpb24gYW5kIGluZGV4IHBhcnNpbmcuCiAgICAnJycKICAgIGltcG9ydCBzY2FucHkgYXMgc2MKICAgIGZyb20gc2NueW0uZGF0YXByZXAgaW1wb3J0IFNpbmdsZUNlbGxEUwogICAgdG9yY2gubWFudWFsX3NlZWQoMSkKICAgIG5wLnJhbmRvbS5zZWVkKDEpICAgIAogICAgCiAgICAjIGxvYWQgMTB4IGh1bWFuIFBCTUMgZGF0YSBhcyBhIHNhbXBsZQogICAgYWRhdGEgPSBzYy5kYXRhc2V0cy5wYm1jM2soKQogICAgIyBnZW5lcmF0ZSBmYWtlIGNsYXNzIGxhYmVscwogICAgYWRhdGEub2JzWydjbGFzcyddID0gbnAucmFuZG9tLnJhbmRpbnQoCiAgICAgICAgMCwKICAgICAgICAzLAogICAgICAgIGFkYXRhLnNoYXBlWzBdLAogICAgKQogICAgIyBhZGQgZmFrZSBkb21haW4gbGFiZWxzCiAgICBhZGF0YS5vYnNbJ2RvbWFpbiddID0gbnAucmFuZG9tLnJhbmRpbnQoCiAgICAgICAgMCwKICAgICAgICAzLAogICAgICAgIGFkYXRhLnNoYXBlWzBdLAogICAgKQogICAgCiAgICBkcyA9IFNpbmdsZUNlbGxEUygKICAgICAgICBYID0gYWRhdGEuWC50b2FycmF5KCksCiAgICAgICAgeSA9IG5wLmFycmF5KGFkYXRhLm9ic1snY2xhc3MnXSksCiAgICAgICAgZG9tYWluID0gbnAuYXJyYXkoYWRhdGEub2JzWydkb21haW4nXSksCiAgICApCiAgICAKICAgICMgZHJhdyBhIHNhbXBsZQogICAgaWR4ID0gMTAKICAgIHNhbXBsZSA9IGRzW2lkeF0KICAgIHNhbXBsZVsnaW5wdXQnXSA9IHNhbXBsZVsnaW5wdXQnXS51bnNxdWVlemUoMCkKICAgICMgZW5zdXJlIHRoZSBzYW1wbGUgaXMgdGhlIGNvcnJlY3QgaW5kZXgKICAgIGFzc2VydCBucC5hbGwoCiAgICAgICAgc2FtcGxlWydpbnB1dCddLm51bXB5KCkgPT0gYWRhdGEuWFtpZHgsIDpdLnRvYXJyYXkoKS5mbGF0dGVuKCkKICAgICkKICAgICMgZW5zdXJlIHRoZSBjbGFzcyBsYWJlbCBpcyBjb3JyZWN0CiAgICB5X2d0ID0gbnAuYXJyYXkoYWRhdGEub2JzWydjbGFzcyddKVtpZHhdCiAgICB5X29uZWhvdCA9IHNhbXBsZVsnb3V0cHV0J10udmlldygxLCAtMSkKICAgIF8sIHlfZHMgPSB0b3JjaC5tYXgoeV9vbmVob3QsIGRpbT0xKQogICAgYXNzZXJ0IG5wLmFsbCh5X2RzLml0ZW0oKSA9PSB5X2d0KQogICAgIyBlbnN1cmUgdGhlIGRvbWFpbiBsYWJlbCBpcyBjb3JyZWN0CiAgICBkX2d0ID0gbnAuYXJyYXkoYWRhdGEub2JzWydkb21haW4nXSlbaWR4XQogICAgZF9vbmVob3QgPSBzYW1wbGVbJ2RvbWFpbiddLnZpZXcoMSwgLTEpCiAgICBfLCBkX2RzID0gdG9yY2gubWF4KGRfb25laG90LCBkaW09MSkKICAgIGFzc2VydCBucC5hbGwoZF9kcy5pdGVtKCkgPT0gZF9ndCkgICAgCiAgICAKICAgICMgdGhyb3cgYW4gZXJyb3IgYnkgcGFzc2luZyBhbiBpbnZhbGlkIGlkeAogICAgCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVHlwZUVycm9yKToKICAgICAgICBzYW1wbGUgPSBkc1snYmFkX2luZGV4X3R5cGUnXQogICAgCiAgICByZXR1cm4KCgpkZWYgdGVzdF9kYXRhc2V0X3NwYXJzZSgpOgogICAgJycnVGVzdCBsb2FkaW5nIHNhbXBsZXMgZnJvbSBhIGRhdGFzZXQgdXNpbmcgc3BhcnNlIG1hdHJpY2VzLgogICAgQ2hlY2tzIGRhdGFzZXQgY3JlYXRpb24gYW5kIGluZGV4IHBhcnNpbmcuCiAgICAnJycKICAgIGltcG9ydCBzY2FucHkgYXMgc2MKICAgIGZyb20gc2NueW0uZGF0YXByZXAgaW1wb3J0IFNpbmdsZUNlbGxEUwogICAgZnJvbSBzY2lweSBpbXBvcnQgc3BhcnNlCiAgICB0b3JjaC5tYW51YWxfc2VlZCgxKQogICAgbnAucmFuZG9tLnNlZWQoMSkKICAgIAogICAgIyBsb2FkIDEweCBodW1hbiBQQk1DIGRhdGEgYXMgYSBzYW1wbGUKICAgIGFkYXRhID0gc2MuZGF0YXNldHMucGJtYzNrKCkKICAgICMgZ2VuZXJhdGUgZmFrZSBjbGFzcyBsYWJlbHMKICAgIGFkYXRhLm9ic1snY2xhc3MnXSA9IG5wLnJhbmRvbS5yYW5kaW50KAogICAgICAgIDAsCiAgICAgICAgMywKICAgICAgICBhZGF0YS5zaGFwZVswXSwKICAgICkKICAgIAogICAgWCA9IHNwYXJzZS5jc3JfbWF0cml4KGFkYXRhLlgpCiAgICAKICAgIGRzID0gU2luZ2xlQ2VsbERTKAogICAgICAgIFggPSBYLAogICAgICAgIHkgPSBucC5hcnJheShhZGF0YS5vYnNbJ2NsYXNzJ10pLAogICAgKQogICAgCiAgICAjIGRyYXcgYSBzYW1wbGUKICAgIGlkeCA9IDEwCiAgICBzYW1wbGUgPSBkc1tpZHhdCiAgICBzYW1wbGVbJ2lucHV0J10gPSBzYW1wbGVbJ2lucHV0J10udW5zcXVlZXplKDApCiAgICAjIGVuc3VyZSB0aGUgc2FtcGxlIGlzIHRoZSBjb3JyZWN0IGluZGV4CiAgICBhc3NlcnQgbnAuYWxsKAogICAgICAgIHNhbXBsZVsnaW5wdXQnXS5udW1weSgpID09IGFkYXRhLlhbaWR4LCA6XS50b2FycmF5KCkuZmxhdHRlbigpCiAgICApCiAgICAKICAgICMgdGhyb3cgYW4gZXJyb3IgYnkgcGFzc2luZyBhbiBpbnZhbGlkIGlkeAogICAgCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVHlwZUVycm9yKToKICAgICAgICBzYW1wbGUgPSBkc1snYmFkX2luZGV4X3R5cGUnXQogICAgCiAgICByZXR1cm4KCgpkZWYgdGVzdF9ub3JtYWxpemF0aW9uKCk6CiAgICAnJydUZXN0IGxvZyB0cmFuc2Zvcm1hdGlvbnMgYW5kIGxpYnJhcnkgc2l6ZSBub3JtYWxpemF0aW9uJycnCiAgICBpbXBvcnQgc2NhbnB5IGFzIHNjCiAgICBmcm9tIHNjbnltLmRhdGFwcmVwIGltcG9ydCBTaW5nbGVDZWxsRFMsIExpYnJhcnlTaXplTm9ybWFsaXplLCBFeHBNaW51c09uZQogICAgdG9yY2gubWFudWFsX3NlZWQoMSkKICAgIG5wLnJhbmRvbS5zZWVkKDEpICAgIAogICAgCiAgICAjIGxvYWQgMTB4IGh1bWFuIFBCTUMgZGF0YSBhcyBhIHNhbXBsZQogICAgYWRhdGEgPSBzYy5kYXRhc2V0cy5wYm1jM2soKQogICAgIyBnZW5lcmF0ZSBmYWtlIGNsYXNzIGxhYmVscwogICAgYWRhdGEub2JzWydjbGFzcyddID0gbnAucmFuZG9tLnJhbmRpbnQoCiAgICAgICAgMCwKICAgICAgICAzLAogICAgICAgIGFkYXRhLnNoYXBlWzBdLAogICAgKQogICAgCiAgICBkcyA9IFNpbmdsZUNlbGxEUygKICAgICAgICBYID0gYWRhdGEuWC50b2FycmF5KCksCiAgICAgICAgeSA9IG5wLmFycmF5KGFkYXRhLm9ic1snY2xhc3MnXSksCiAgICApCiAgICAKICAgICMgZHJhdyBhIHNhbXBsZQogICAgaWR4ID0gMTAKICAgIHNhbXBsZSA9IGRzW2lkeF0KICAgIHNhbXBsZVsnaW5wdXQnXSA9IHNhbXBsZVsnaW5wdXQnXS51bnNxdWVlemUoMCkgICAgCiAgICAKICAgICMgbm9ybWFsaXplIHRoZSB2ZWN0b3IgYW5kIGxvZzFwIHRyYW5zZm9ybQogICAgbm9ybSA9IExpYnJhcnlTaXplTm9ybWFsaXplKAogICAgICAgIGxvZzFwPVRydWUsCiAgICApCiAgICBzYW1wbGVfbm9ybSA9IG5vcm0oc2FtcGxlKQogICAgCiAgICAjIGV4cG9uZW50aWF0ZSB0aGUgdmVjdG9yCiAgICBlb20gPSBFeHBNaW51c09uZSgpCiAgICBzYW1wbGVfZXhwbTEgPSBlb20oc2FtcGxlKQogICAgCiAgICAjIHJlbm9ybWFsaXplIHRoZSB2ZWN0b3IgYW5kIGNoZWNrIHZhbGlkaXR5CiAgICBzYW1wbGVfcmVub3JtID0gbm9ybShzYW1wbGVfZXhwbTEpCiAgICAKICAgIGFzc2VydCB0b3JjaC5hbGwoCiAgICAgICAgc2FtcGxlX3Jlbm9ybVsnaW5wdXQnXT09c2FtcGxlX25vcm1bJ2lucHV0J10KICAgICkKICAgIAogICAgcmV0dXJuCiAgICAKCmRlZiB0ZXN0X211bHRpbm9taWFsX3NhbXBsaW5nKCk6CiAgICAnJydUZXN0IHRoYXQgbXVsdGlub21pYWwgc2FtcGxpbmcgd29ya3MgdXNpbmcgYSBsYXJnZQogICAgc2FtcGxlIGRlcHRoIGFuZCBhIHBlcm11dGF0aW9uIHRlc3QKICAgICcnJwogICAgaW1wb3J0IHNjYW5weSBhcyBzYwogICAgZnJvbSBzY255bS5kYXRhcHJlcCBpbXBvcnQgU2luZ2xlQ2VsbERTLCBMaWJyYXJ5U2l6ZU5vcm1hbGl6ZSwgTXVsdGlub21pYWxTYW1wbGUKICAgIHRvcmNoLm1hbnVhbF9zZWVkKDEpCiAgICBucC5yYW5kb20uc2VlZCgxKSAgICAKICAgIAogICAgIyBsb2FkIDEweCBodW1hbiBQQk1DIGRhdGEgYXMgYSBzYW1wbGUKICAgIGFkYXRhID0gc2MuZGF0YXNldHMucGJtYzNrKCkKICAgICMgZ2VuZXJhdGUgZmFrZSBjbGFzcyBsYWJlbHMKICAgIGFkYXRhLm9ic1snY2xhc3MnXSA9IG5wLnJhbmRvbS5yYW5kaW50KAogICAgICAgIDAsCiAgICAgICAgMywKICAgICAgICBhZGF0YS5zaGFwZVswXSwKICAgICkKICAgIAogICAgZHMgPSBTaW5nbGVDZWxsRFMoCiAgICAgICAgWCA9IGFkYXRhLlgudG9hcnJheSgpLAogICAgICAgIHkgPSBucC5hcnJheShhZGF0YS5vYnNbJ2NsYXNzJ10pLAogICAgKQogICAgCiAgICAjIGRyYXcgYSBzYW1wbGUKICAgIGlkeCA9IDEwCiAgICBzYW1wbGUgPSBkc1tpZHhdCiAgICBzYW1wbGVbJ2lucHV0J10gPSBzYW1wbGVbJ2lucHV0J10udW5zcXVlZXplKDApICAgIAogICAgIyBrZWVwIGFuIHVubW9kaWZpZWQgY29weSBvZiB0aGUgc2FtcGxlCiAgICBzYW1wbGVfb3JpZyA9IHNhbXBsZS5jb3B5KCkKICAgIAogICAgIyBub3JtYWxpemUgdGhlIHNhbXBsZSBidXQgZG8gbm90IGxvZyB0cmFuc2Zvcm0KICAgIG5vcm0gPSBMaWJyYXJ5U2l6ZU5vcm1hbGl6ZSgKICAgICAgICBsb2cxcD1GYWxzZSwKICAgICkKICAgIHNhbXBsZV9ub3JtID0gbm9ybShzYW1wbGUpCiAgICAgICAgCiAgICAjIGdldCBhIG11bHRpbm9taWFsIHZlY3RvciB3aXRoIHJhbmRvbSBkZXB0aAogICAgbW4gPSBNdWx0aW5vbWlhbFNhbXBsZSgKICAgICAgICBkZXB0aCA9ICgxMDAwMCwgMjAwMDApLAogICAgKQogICAgc2FtcGxlX21uID0gbW4oc2FtcGxlX25vcm0pCiAgICAjIGNoZWNrIHRoYXQgdGhlIGRlcHRoIGlzIGluIHRoZSBleHBlY3RlZCByYW5nZQogICAgZCA9IHRvcmNoLnN1bShzYW1wbGVfbW5bJ2lucHV0J10sIDEpCiAgICBsdF9iaWR4ID0gZCA8IDEwMDAwCiAgICBndF9iaWR4ID0gZCA+IDIwMDAwCiAgICBhc3NlcnQgdG9yY2guc3VtKGx0X2JpZHgpID09IDAuCiAgICBhc3NlcnQgdG9yY2guc3VtKGd0X2JpZHgpID09IDAuCiAgICAKICAgICMgc2FtcGxlIGRlZXBseSBmcm9tIGEgbXVsdGlub21pYWwKICAgIG1uID0gTXVsdGlub21pYWxTYW1wbGUoCiAgICAgICAgZGVwdGggPSAoMTAwMDAwMCwgMTAwMDAwMSksCiAgICApCiAgICBzYW1wbGVfbW4gPSBtbihzYW1wbGVfbm9ybSkKICAgICMgY2hlY2sgdGhhdCB0aGUgZGVwdGggaXMgaW4gdGhlIGV4cGVjdGVkIHJhbmdlCiAgICBkID0gdG9yY2guc3VtKHNhbXBsZV9tblsnaW5wdXQnXSwgMSkKICAgIGx0X2JpZHggPSBkIDwgMTAwMDAwMAogICAgZ3RfYmlkeCA9IGQgPiAxMDAwMDAxCiAgICBhc3NlcnQgdG9yY2guc3VtKGx0X2JpZHgpID09IDAuCiAgICBhc3NlcnQgdG9yY2guc3VtKGd0X2JpZHgpID09IDAuICAgIAogICAgCiAgICAjIHNhbXBsZSB1c2luZyBhIGRlcHRoIHJhdGlvCiAgICBtbiA9IE11bHRpbm9taWFsU2FtcGxlKAogICAgICAgIGRlcHRoX3JhdGlvID0gKDAuMjUsIDIpLAogICAgKQogICAgc2FtcGxlX21uID0gbW4oc2FtcGxlX25vcm0pCiAgICAjIGNoZWNrIHRoYXQgdGhlIGRlcHRoIGlzIGluIHRoZSBleHBlY3RlZCByYW5nZQogICAgZCA9IHRvcmNoLnN1bShzYW1wbGVfbW5bJ2lucHV0J10sIDEpCiAgICBpbl9zaXplcyA9IHRvcmNoLnN1bShzYW1wbGVfbm9ybVsnaW5wdXQnXSwgMSkKICAgIGxfc3ogPSBpbl9zaXplcyAqIDAuMjUKICAgIGhfc3ogPSBpbl9zaXplcyAqIDIKICAgIGx0X2JpZHggPSBkIDwgbF9zegogICAgZ3RfYmlkeCA9IGQgPiBoX3N6ICAgIAogICAgYXNzZXJ0IHRvcmNoLnN1bShsdF9iaWR4KSA9PSAwLgogICAgYXNzZXJ0IHRvcmNoLnN1bShndF9iaWR4KSA9PSAwLiAgICAgCiAgICAKICAgICMgbm9ybWFsaXplIHRoZSBzYW1wbGUgYWJ1bmRhbmNlIHByb2ZpbGUKICAgIHNhbXBsZV9tbl9ub3JtID0gbm9ybShzYW1wbGVfbW4pCiAgICAKICAgICMgZ2V0IHRoZSBsMiBub3JtIGJldHdlZW4gdGhlIG9yaWdpbmFsIHNhbXBsZSBhbmQgdGhlCiAgICAjIGNvdW50cyBkcmF3biBmcm9tIGEgbXVsdGlub21pYWwKICAgIGQgPSB0b3JjaC5sb2cxcChzYW1wbGVfbW5fbm9ybVsnaW5wdXQnXSkgLSB0b3JjaC5sb2cxcChzYW1wbGVfb3JpZ1snaW5wdXQnXSkKICAgIHRlc3Rfbm9ybSA9IHRvcmNoLm5vcm0oCiAgICAgICAgZCwgMiwKICAgICkKICAgIAogICAgIyBwZXJtdXRlIGdlbmVzIHRvIGdlbmVyYXRlIGEgbnVsbCBkaXN0cmlidXRpb24gb2Ygbm9ybXMKICAgIG5fdGVzdHMgPSAxMDAwCiAgICByYW5kX25vcm1zID0gdG9yY2guemVyb3Mobl90ZXN0cywpCiAgICBmb3IgaSBpbiByYW5nZShuX3Rlc3RzKToKICAgICAgICByaWR4ID0gdG9yY2gucmFuZHBlcm0oc2FtcGxlX29yaWdbJ2lucHV0J10uc2l6ZSgwKSkKICAgICAgICBkID0gdG9yY2gubG9nMXAoc2FtcGxlX21uX25vcm1bJ2lucHV0J10pIC0gdG9yY2gubG9nMXAoc2FtcGxlX29yaWdbJ2lucHV0J11bcmlkeF0pCiAgICAgICAgcmFuZF9ub3Jtc1tpXSA9IHRvcmNoLm5vcm0oCiAgICAgICAgICAgIGQsIAogICAgICAgICAgICAyLAogICAgICAgICkKCiAgICBwID0gdG9yY2guc3VtKHRlc3Rfbm9ybSA+IHJhbmRfbm9ybXMpIC8vIG5fdGVzdHMKICAgIAogICAgbXNnID0gZidwID0ge3B9IHN1Z2dlc3RzIHNvbWV0aGluZyBpcyByb3R0ZW4gd2l0aCBtdWx0aW5vbWlhbCBzYW1wbGluZy4nCiAgICBhc3NlcnQgcCA8IDAuMDUsIG1zZwogICAgCiAgICByZXR1cm4KCgpkZWYgdGVzdF9wb2lzc29uX3NhbXBsaW5nKCk6CiAgICAnJydUZXN0IHRoZSBQb2lzc29uIHNhbXBsaW5nIG1ldGhvZC4nJycKICAgIGltcG9ydCBzY2FucHkgYXMgc2MKICAgIGZyb20gc2NueW0uZGF0YXByZXAgaW1wb3J0IFNpbmdsZUNlbGxEUywgTGlicmFyeVNpemVOb3JtYWxpemUsIFBvaXNzb25TYW1wbGUKICAgIGZyb20gdG9yY2h2aXNpb24udHJhbnNmb3JtcyBpbXBvcnQgQ29tcG9zZQogICAgdG9yY2gubWFudWFsX3NlZWQoMTcpCiAgICBucC5yYW5kb20uc2VlZCgxKSAgICAKICAgIAogICAgIyBsb2FkIDEweCBodW1hbiBQQk1DIGRhdGEgYXMgYSBzYW1wbGUKICAgIGFkYXRhID0gc2MuZGF0YXNldHMucGJtYzNrKCkKICAgICMgZ2VuZXJhdGUgZmFrZSBjbGFzcyBsYWJlbHMKICAgIGFkYXRhLm9ic1snY2xhc3MnXSA9IG5wLnJhbmRvbS5yYW5kaW50KAogICAgICAgIDAsCiAgICAgICAgMywKICAgICAgICBhZGF0YS5zaGFwZVswXSwKICAgICkKICAgIAogICAgZHMgPSBTaW5nbGVDZWxsRFMoCiAgICAgICAgWCA9IGFkYXRhLlgudG9hcnJheSgpLAogICAgICAgIHkgPSBucC5hcnJheShhZGF0YS5vYnNbJ2NsYXNzJ10pLAogICAgKQogICAgCiAgICAjIGRyYXcgYSBzYW1wbGUKICAgIGlkeCA9IDEwCiAgICBzYW1wbGUgPSBkc1tpZHhdCiAgICBzYW1wbGVbJ2lucHV0J10gPSBzYW1wbGVbJ2lucHV0J10udW5zcXVlZXplKDApICAgIAogICAgIyBrZWVwIGFuIHVubW9kaWZpZWQgY29weSBvZiB0aGUgc2FtcGxlCiAgICBzYW1wbGVfb3JpZyA9IHNhbXBsZS5jb3B5KCkKICAgIAogICAgIyBub3JtYWxpemUgdGhlIHNhbXBsZSBidXQgZG8gbm90IGxvZyB0cmFuc2Zvcm0KICAgIG5vcm0gPSBMaWJyYXJ5U2l6ZU5vcm1hbGl6ZSgKICAgICAgICBsb2cxcD1GYWxzZSwKICAgICkKICAgIHNhbXBsZV9ub3JtID0gbm9ybShzYW1wbGUpCiAgICBzYW1wbGVfbm9ybV9vcmlnID0gc2FtcGxlX25vcm0uY29weSgpCiAgICAKICAgICMgc2FtcGxlIHVzaW5nIGEgZGVwdGggcmF0aW8KICAgIHBvaXNzb24gPSBQb2lzc29uU2FtcGxlKGRlcHRoX3JhbmdlPSgwLjUsIDIuKSkKICAgIHNhbXBsZV9wcyA9IHBvaXNzb24oc2FtcGxlX25vcm0uY29weSgpKQogICAgcHJpbnQoJ2luaXRpYWw6JykKICAgIHByaW50KHNhbXBsZV9ub3JtX29yaWdbJ2lucHV0J11bc2FtcGxlX25vcm1fb3JpZ1snaW5wdXQnXT4wXVs6MjBdKQogICAgcHJpbnQoJ3NhbXBsZWQgMDA6JykKICAgIHByaW50KHNhbXBsZV9wc1snaW5wdXQnXVtzYW1wbGVfcHNbJ2lucHV0J10+MF1bOjIwXSkKICAgIAogICAgIyBjaGVjayB0aGF0IHNhbXBsZSBkZXB0aHMgYXJlIGluIGFuIGV4cGVjdGVkIHJhbmdlCiAgICBsaWJyYXJ5X3NpemVzID0gc2FtcGxlX3BzWydpbnB1dCddLnN1bSgxKQogICAgdG9vX3NtYWxsX2JpZHggPSB0b3JjaC5zdW0obGlicmFyeV9zaXplcyA8IDQuNWU1KQogICAgdG9vX2xhcmdlX2JpZHggPSB0b3JjaC5zdW0obGlicmFyeV9zaXplcyA+IDIuMWU2KQogICAgaWYgbm90IHRvb19zbWFsbF9iaWR4ID09IDA6CiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKGYne3Rvb19zbWFsbF9iaWR4fSBjZWxscyBoYWQgc21hbGwgbGlicmFyaWVzLicpCiAgICBpZiBub3QgdG9vX2xhcmdlX2JpZHggPT0gMDoKICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoZid7dG9vX2xhcmdlX2JpZHh9IGNlbGxzIGhhZCBsYXJnZSBsaWJyYXJpZXMuJykgICAgCgogICAgIyBjaGVjayB0aGF0IGEgc2Vjb25kIHNhbXBsZSBpcyBkaWZmZXJlbnQgICAgCiAgICBzYW1wbGVfcHMyID0gcG9pc3NvbihzYW1wbGVfbm9ybS5jb3B5KCkpCiAgICBwcmludCgnc2FtcGxlZCAwMTonKQogICAgcHJpbnQoc2FtcGxlX3BzMlsnaW5wdXQnXVtzYW1wbGVfcHMyWydpbnB1dCddPjBdWzoyMF0pCiAgICAKICAgIGFsbF9lcSA9IHRvcmNoLmFsbCgKICAgICAgICBzYW1wbGVfcHNbJ2lucHV0J10gPT0gc2FtcGxlX3BzMlsnaW5wdXQnXQogICAgKQogICAgaWYgYWxsX2VxOgogICAgICAgIHByaW50KCdzYW1wbGVkIDAwOicpCiAgICAgICAgcHJpbnQoc2FtcGxlX3BzWydpbnB1dCddW3NhbXBsZV9wc1snaW5wdXQnXT4wXVs6MjBdKSAgICAgICAgCiAgICAgICAgcHJpbnQoJ3NhbXBsZWQgMDE6JykKICAgICAgICBwcmludChzYW1wbGVfcHMyWydpbnB1dCddW3NhbXBsZV9wczJbJ2lucHV0J10+MF1bOjIwXSkgICAgICAgIAogICAgICAgIG1zZyA9IGYnVGhlIHR3byBQb2lzc29uIHNhbXBsZXMgd2VyZSBpZGVudGl0Y2FsOiB7YWxsX2VxfScKICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IobXNnKQogICAgICAgIAogICAgIyB0ZXN0IHBhc3NpbmcgYSBtaW5pYmF0Y2ggZm9yIHNhbXBsaW5nCiAgICBkbCA9IHRvcmNoLnV0aWxzLmRhdGEuRGF0YUxvYWRlcihkcywgYmF0Y2hfc2l6ZT0xNikKICAgIGJhdGNoID0gbmV4dChpdGVyKGRsKSkKICAgIAogICAgdHIgPSBDb21wb3NlKAogICAgICAgIFsKICAgICAgICAgICAgTGlicmFyeVNpemVOb3JtYWxpemUobG9nMXA9RmFsc2UpLAogICAgICAgICAgICBQb2lzc29uU2FtcGxlKCksCiAgICAgICAgICAgIExpYnJhcnlTaXplTm9ybWFsaXplKGxvZzFwPVRydWUpLAogICAgICAgIF0KICAgICkKICAgIAogICAgYmF0Y2hfc2FtcGxlZCA9IHRyKGJhdGNoKQogICAgCiAgICByZXR1cm4KCmRlZiB0ZXN0X2dlbmVfbWFza2luZygpOgogICAgJycnVGVzdCB0aGF0IGdlbmUgbWFza2luZyBhdWdtZW50YXRpb25zIHplcm8gb3V0IGEKICAgIHJhbmRvbSBzdWJzZXQgb2YgZ2VuZXMnJycKICAgIGltcG9ydCBzY2FucHkgYXMgc2MKICAgIGZyb20gc2NueW0uZGF0YXByZXAgaW1wb3J0IFNpbmdsZUNlbGxEUywgR2VuZU1hc2tpbmcKICAgIHRvcmNoLm1hbnVhbF9zZWVkKDEpCiAgICBucC5yYW5kb20uc2VlZCgxKSAgICAKICAgIAogICAgIyBsb2FkIDEweCBodW1hbiBQQk1DIGRhdGEgYXMgYSBzYW1wbGUKICAgIGFkYXRhID0gc2MuZGF0YXNldHMucGJtYzNrKCkKICAgICMgZ2VuZXJhdGUgZmFrZSBjbGFzcyBsYWJlbHMKICAgIGFkYXRhLm9ic1snY2xhc3MnXSA9IG5wLnJhbmRvbS5yYW5kaW50KAogICAgICAgIDAsCiAgICAgICAgMywKICAgICAgICBhZGF0YS5zaGFwZVswXSwKICAgICkKICAgIAogICAgZHMgPSBTaW5nbGVDZWxsRFMoCiAgICAgICAgWCA9IGFkYXRhLlgudG9hcnJheSgpLAogICAgICAgIHkgPSBucC5hcnJheShhZGF0YS5vYnNbJ2NsYXNzJ10pLAogICAgKQogICAgCiAgICAjIGRyYXcgYSBzYW1wbGUKICAgIGlkeCA9IDEwCiAgICBzYW1wbGUgPSBkc1tpZHhdCiAgICBzYW1wbGVbJ2lucHV0J10gPSBzYW1wbGVbJ2lucHV0J10udW5zcXVlZXplKDApICAgIAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBzYW1wbGVfb3JpZyA9IHNhbXBsZS5jb3B5KCkKICAgIAogICAgIyBpbml0aWF0ZSBhIGdlbmUgbWFza2VyCiAgICBnbSA9IEdlbmVNYXNraW5nKHBfZHJvcCA9IDAuOCwgcF9hcHBseT0xLjApCjx8ZmltX2VuZHw+"]
["c15e6fa5512bcba0d31c22019070ed91874f1aea-1","c15e6fa5512bcba0d31c22019070ed91874f1aea","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCB1bml0dGVzdAppbXBvcnQgc2h1dGlsCmltcG9ydCB1dGlscy51dGlscwppbXBvcnQgdXRpbHMudHJhaW5fdXRpbHMKaW1wb3J0IGV4ZWN1dG9ycy5OaXN0U2F2ZXJFeGVjdXRvcgppbXBvcnQgZXhlY3V0b3JzLkV4ZWN1dG9yCmZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzLCBRdWV1ZSwgSm9pbmFibGVRdWV1ZQpmcm9tIHF1ZXVlIGltcG9ydCBFbXB0eQoKCmNsYXNzIFNpbXBsZVJhbmRvbVNrbGVhcm5FeGVjdXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgoKICAgIGRlZiB0ZXN0X3NhdmVyX2V4ZWN1dG9yKHNlbGYpOgoKICAgICAgICAjIENyZWF0ZSBleGVjdXRvcgogICAgICAgIGlucHV0c19xdWV1ZSA9IEpvaW5hYmxlUXVldWUoKQogICAgICAgIHJlc3VsdHNfcXVldWUgPSBKb2luYWJsZVF1ZXVlKCkKICAgICAgICBleGVjdXRvciA9IGV4ZWN1dG9ycy5OaXN0U2F2ZXJFeGVjdXRvci5OaXN0U2F2ZXJFeGVjdXRvcigKICAgICAgICAgICAgaW5wdXRzX3F1ZXVlLCByZXN1bHRzX3F1ZXVlCiAgICAgICAgKQoKICAgICAgICAjIExvYWQgc2FtcGxlIGRhdGEKICAgICAgICBkYXRhX3VyaSA9IHV0aWxzLnV0aWxzLmdldF9naXRfcm9vdChvcy5wYXRoLmRpcm5hbWUoCiAgICAgICAgICAgIG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSArICIvdGVzdF9kYXRhLzE4NV9iYXNlYmFsbCIKICAgICAgICBhc3NlcnQob3MucGF0aC5leGlzdHMoZGF0YV91cmkpKQogICAgICAgIHByb2JsZW1fZG9jLCBkYXRhc2V0ID0gdXRpbHMudXRpbHMubG9hZF9kYXRhX2Zyb21fZGlyKGRhdGFfdXJpLCBtb2RlPSJ0cmFpbiIpCgogICAgICAgICMgTG9hZCBhIHJhbmRvbSBzYXZlZCBwaXBlbGluZQogICAgICAgIHBpcGVsaW5lX2pzb25fcGF0aCA9ICgKICAgICAgICAgICAgdXRpbHMudXRpbHMuZ2V0X2dpdF9yb290KG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkgKyAiL3Rlc3RfZGF0YS8xODVfYmFzZWJhbGxfcGlwZWxpbmUvdGVzdF9waXBlbGluZS5qc29uIikKICAgICAgICB3aXRoIG9wZW4ocGlwZWxpbmVfanNvbl9wYXRoKSBhcyBmOiAgICAgICAgICAgIAogICAgICAgICAgICBwaXBlbGluZV9qc29uID0gZi5yZWFkKCkKCiAgICAgICAgIyBQcm9jZXNzIGl0ZW0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGJhc2Vfb3V0cHV0ZGlyLCBwaXBlbGluZV9qc29uLCBwcm9ibGVtX2RvYywgc2NvcmUgPSAoCiAgICAgICAgICAgICIvdG1wL3Rlc3Rfb3V0ZGlyIiwgcGlwZWxpbmVfanNvbiwgcHJvYmxlbV9kb2MsIDY5CiAgICAgICAgKQoKPHxmaW1fZW5kfD4="]
["c15e6fa5512bcba0d31c22019070ed91874f1aea-2","c15e6fa5512bcba0d31c22019070ed91874f1aea","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCB1bml0dGVzdAppbXBvcnQgc2h1dGlsCmltcG9ydCB1dGlscy51dGlscwppbXBvcnQgdXRpbHMudHJhaW5fdXRpbHMKaW1wb3J0IGV4ZWN1dG9ycy5OaXN0U2F2ZXJFeGVjdXRvcgppbXBvcnQgZXhlY3V0b3JzLkV4ZWN1dG9yCmZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzLCBRdWV1ZSwgSm9pbmFibGVRdWV1ZQpmcm9tIHF1ZXVlIGltcG9ydCBFbXB0eQoKCmNsYXNzIFNpbXBsZVJhbmRvbVNrbGVhcm5FeGVjdXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgoKICAgIGRlZiB0ZXN0X3NhdmVyX2V4ZWN1dG9yKHNlbGYpOgoKICAgICAgICAjIENyZWF0ZSBleGVjdXRvcgogICAgICAgIGlucHV0c19xdWV1ZSA9IEpvaW5hYmxlUXVldWUoKQogICAgICAgIHJlc3VsdHNfcXVldWUgPSBKb2luYWJsZVF1ZXVlKCkKICAgICAgICBleGVjdXRvciA9IGV4ZWN1dG9ycy5OaXN0U2F2ZXJFeGVjdXRvci5OaXN0U2F2ZXJFeGVjdXRvcigKICAgICAgICAgICAgaW5wdXRzX3F1ZXVlLCByZXN1bHRzX3F1ZXVlCiAgICAgICAgKQoKICAgICAgICAjIExvYWQgc2FtcGxlIGRhdGEKICAgICAgICBkYXRhX3VyaSA9IHV0aWxzLnV0aWxzLmdldF9naXRfcm9vdChvcy5wYXRoLmRpcm5hbWUoCiAgICAgICAgICAgIG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSArICIvdGVzdF9kYXRhLzE4NV9iYXNlYmFsbCIKICAgICAgICBhc3NlcnQob3MucGF0aC5leGlzdHMoZGF0YV91cmkpKQogICAgICAgIHByb2JsZW1fZG9jLCBkYXRhc2V0ID0gdXRpbHMudXRpbHMubG9hZF9kYXRhX2Zyb21fZGlyKGRhdGFfdXJpLCBtb2RlPSJ0cmFpbiIpCgogICAgICAgICMgTG9hZCBhIHJhbmRvbSBzYXZlZCBwaXBlbGluZQogICAgICAgIHBpcGVsaW5lX2pzb25fcGF0aCA9ICgKICAgICAgICAgICAgdXRpbHMudXRpbHMuZ2V0X2dpdF9yb290KG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkgKyAiL3Rlc3RfZGF0YS8xODVfYmFzZWJhbGxfcGlwZWxpbmUvdGVzdF9waXBlbGluZS5qc29uIikKICAgICAgICB3aXRoIG9wZW4ocGlwZWxpbmVfanNvbl9wYXRoKSBhcyBmOiAgICAgICAgICAgIAogICAgICAgICAgICBwaXBlbGluZV9qc29uID0gZi5yZWFkKCkKCjx8ZmltX2hvbGV8PgoKICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhiYXNlX291dHB1dGRpcik6CiAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoYmFzZV9vdXRwdXRkaXIpCiAgICAgICAgaXRlbSA9IChiYXNlX291dHB1dGRpciwgcGlwZWxpbmVfanNvbiwgcHJvYmxlbV9kb2MsIHNjb3JlKQogICAgICAgIAogICAgICAgIGlucHV0c19xdWV1ZS5wdXQoaXRlbSkKICAgICAgICBleGVjdXRvci5zdGFydCgpICAgICAgICAKICAgICAgICBpbnB1dHNfcXVldWUuam9pbigpCiAgICAgICAgZXhlY3V0b3IudGVybWluYXRlKCkKCiAgICAgICAgIyBNYWtlIHN1cmUgdGhlcmUgYXJlIGZpbGVzIGluIGV4ZWN1dGFibGVzLCBzdXBwb3J0aW5nIGZpbGVzIGFuZCBwaXBlbGluZXMKICAgICAgICAjZXhwZWN0ZWRfc3VwcG9ydGluZ19maWxlcGF0aCA9ICIvdG1wL3Rlc3Rfb3V0ZGlyL3N1cHBvcnRpbmdfZmlsZXMvOTk5OTk5OTk5OTMxLjAvU3RhbmZvcmQtRDNNLUZ1bGwvIgogICAgICAgIGV4cGVjdGVkX3BpcGVsaW5lc19maWxlcGF0aCA9ICIvdG1wL3Rlc3Rfb3V0ZGlyL3BpcGVsaW5lc19yYW5rZWQvOTk5OTk5OTk5OTMxLjAuanNvbiIKICAgICAgICAjZXhwZWN0ZWRfZXhlY3VhYmxlc19maWxlcGF0aCA9ICIvdG1wL3Rlc3Rfb3V0ZGlyL2V4ZWN1dGFibGVzLzk5OTk5OTk5OTkzMS4wLnNoIgogICAgICAgICNhc3NlcnQob3MucGF0aC5leGlzdHMoZXhwZWN0ZWRfc3VwcG9ydGluZ19maWxlcGF0aCkpCiAgICAgICAgYXNzZXJ0KG9zLnBhdGguZXhpc3RzKGV4cGVjdGVkX3BpcGVsaW5lc19maWxlcGF0aCkpCiAgICAgICAgI2Fzc2VydChvcy5wYXRoLmV4aXN0cyhleHBlY3RlZF9leGVjdWFibGVzX2ZpbGVwYXRoKSkKICAgICAgICAKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHVuaXR0ZXN0Lm1haW4oKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICMgUHJvY2VzcyBpdGVtCiAgICAgICAgYmFzZV9vdXRwdXRkaXIsIHBpcGVsaW5lX2pzb24sIHByb2JsZW1fZG9jLCBzY29yZSA9ICgKICAgICAgICAgICAgIi90bXAvdGVzdF9vdXRkaXIiLCBwaXBlbGluZV9qc29uLCBwcm9ibGVtX2RvYywgNjkKICAgICAgICApCjx8ZmltX2VuZHw+"]
["783a39ad9df41052040038e4c0f320eea5b92fa0-1","783a39ad9df41052040038e4c0f320eea5b92fa0","PHxmaW1fcHJlZml4fD4KZnJvbSBydWxlcyBpbXBvcnQgYWRkX3Blcm0sIHByZWRpY2F0ZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKIyBQcmVkaWNhdGVzCgo8fGZpbV9lbmR8Pg=="]
["783a39ad9df41052040038e4c0f320eea5b92fa0-2","783a39ad9df41052040038e4c0f320eea5b92fa0","PHxmaW1fcHJlZml4fD4KZnJvbSBydWxlcyBpbXBvcnQgYWRkX3Blcm0sIHByZWRpY2F0ZQoKCiMgUHJlZGljYXRlcwoKQHByZWRpY2F0ZQpkZWYgaXNfcGFnZV9lZGl0b3IodXNlciwgcGFnZSk6CiAgICBpZiBub3QgcGFnZToKICAgICAgICByZXR1cm4gRmFsc2UKICAgIHJldHVybiB1c2VyIGluIHBhZ2UuZWRpdG9ycy5hbGwoKQoKQHByZWRpY2F0ZQpkZWYgaXNfcGFnZV9wdWJsaXNoZXIodXNlciwgcGFnZSk6CiAgICBpZiBub3QgcGFnZToKICAgICAgICByZXR1cm4gRmFsc2UKICAgIHJldHVybiB1c2VyIGluIHBhZ2UucHVibGlzaGVycy5hbGwoKQoKQHByZWRpY2F0ZQojIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKZGVmIGNhbl9lZGl0X2FsbF9wYWdlcyh1c2VyLCBwYWdlKToKPHxmaW1faG9sZXw+CkBwcmVkaWNhdGUKIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50CmRlZiBjYW5fcHVibGlzaF9hbGxfcGFnZXModXNlciwgcGFnZSk6CiAgICByZXR1cm4gdXNlci5oYXNfcGVybSgnY21zLnB1Ymxpc2hfcGFnZXMnKQoKCiMgUGVybWlzc2lvbnMKCmFkZF9wZXJtKCdjbXMuZWRpdF9wYWdlJywgY2FuX2VkaXRfYWxsX3BhZ2VzIHwgaXNfcGFnZV9lZGl0b3IgfCBjYW5fcHVibGlzaF9hbGxfcGFnZXMgfCBpc19wYWdlX3B1Ymxpc2hlcikKYWRkX3Blcm0oJ2Ntcy5wdWJsaXNoX3BhZ2UnLCBjYW5fcHVibGlzaF9hbGxfcGFnZXMgfCBpc19wYWdlX3B1Ymxpc2hlcikKPHxmaW1fc3VmZml4fD4KICAgIHJldHVybiB1c2VyLmhhc19wZXJtKCdjbXMuZWRpdF9wYWdlcycpCgo8fGZpbV9lbmR8Pg=="]
["783a39ad9df41052040038e4c0f320eea5b92fa0-3","783a39ad9df41052040038e4c0f320eea5b92fa0","PHxmaW1fcHJlZml4fD4KZnJvbSBydWxlcyBpbXBvcnQgYWRkX3Blcm0sIHByZWRpY2F0ZQoKCiMgUHJlZGljYXRlcwoKQHByZWRpY2F0ZQpkZWYgaXNfcGFnZV9lZGl0b3IodXNlciwgcGFnZSk6CiAgICBpZiBub3QgcGFnZToKICAgICAgICByZXR1cm4gRmFsc2UKICAgIHJldHVybiB1c2VyIGluIHBhZ2UuZWRpdG9ycy5hbGwoKQoKQHByZWRpY2F0ZQpkZWYgaXNfcGFnZV9wdWJsaXNoZXIodXNlciwgcGFnZSk6CiAgICBpZiBub3QgcGFnZToKICAgICAgICByZXR1cm4gRmFsc2UKICAgIHJldHVybiB1c2VyIGluIHBhZ2UucHVibGlzaGVycy5hbGwoKQoKQHByZWRpY2F0ZQojIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKZGVmIGNhbl9lZGl0X2FsbF9wYWdlcyh1c2VyLCBwYWdlKToKICAgIHJldHVybiB1c2VyLmhhc19wZXJtKCdjbXMuZWRpdF9wYWdlcycpCgpAcHJlZGljYXRlCiMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudApkZWYgY2FuX3B1Ymxpc2hfYWxsX3BhZ2VzKHVzZXIsIHBhZ2UpOgogICAgcmV0dXJuIHVzZXIuaGFzX3Blcm0oJ2Ntcy5wdWJsaXNoX3BhZ2VzJykKCgojIFBlcm1pc3Npb25zCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmFkZF9wZXJtKCdjbXMuZWRpdF9wYWdlJywgY2FuX2VkaXRfYWxsX3BhZ2VzIHwgaXNfcGFnZV9lZGl0b3IgfCBjYW5fcHVibGlzaF9hbGxfcGFnZXMgfCBpc19wYWdlX3B1Ymxpc2hlcikKYWRkX3Blcm0oJ2Ntcy5wdWJsaXNoX3BhZ2UnLCBjYW5fcHVibGlzaF9hbGxfcGFnZXMgfCBpc19wYWdlX3B1Ymxpc2hlcikKPHxmaW1fZW5kfD4="]
["de02634fbe68b05e7f34352332d66f1a9fe0746b-1","de02634fbe68b05e7f34352332d66f1a9fe0746b","PHxmaW1fcHJlZml4fD4KZnJvbSBzcmMubG9ncyBpbXBvcnQgTG9ncwpmcm9tIHNyYy51c2VycyBpbXBvcnQgVXNlcnMKZnJvbSBzcmMudXNlciBpbXBvcnQgVVNFUl9BQ0NFU1NfU1VQRVIKZnJvbSBzcmMuc3RvcmVzIGltcG9ydCBNZW1vcnlTdG9yZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gc3JjLnNlc3Npb24gaW1wb3J0IFNlc3Npb24KCgpkZWYgdGVzdF9nZXRfbG9ncygpOgo8fGZpbV9lbmR8Pg=="]
["de02634fbe68b05e7f34352332d66f1a9fe0746b-2","de02634fbe68b05e7f34352332d66f1a9fe0746b","PHxmaW1fcHJlZml4fD4KZnJvbSBzcmMubG9ncyBpbXBvcnQgTG9ncwpmcm9tIHNyYy51c2VycyBpbXBvcnQgVXNlcnMKZnJvbSBzcmMudXNlciBpbXBvcnQgVVNFUl9BQ0NFU1NfU1VQRVIKZnJvbSBzcmMuc3RvcmVzIGltcG9ydCBNZW1vcnlTdG9yZQpmcm9tIHNyYy5zZXNzaW9uIGltcG9ydCBTZXNzaW9uCgoKPHxmaW1faG9sZXw+CiAgICB1c2VyID0gdXNlcnMuYWRkKCdlbWFpbCcsICduYW1lJywgJ2FsaWFzJywgJ3Bhc3N3b3JkJywgJ3Bob25lJywgVHJ1ZSwgVHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgYWNjZXNzPVVTRVJfQUNDRVNTX1NVUEVSLCB1c2VyX2lkPSd0ZXN0JykKICAgIHVzZXIudmFsaWRhdGVkID0gVHJ1ZQogICAgc2Vzc2lvbiA9IFNlc3Npb24oe30sIHN0b3JlLCAndGVzdCcpCgogICAgbG9nID0gbG9ncy5hZGQoImlwIiwgIm9zIiwgIm9zX3ZlcnNpb24iLCAiYnJvd3NlciIsICJicm93c2VyX3ZlcnNpb24iLCAnY29udGluZW50JywgRmFsc2UsICdjb3VudHJ5JywgJ2NvdW50cnlfZW1vamknLCAncmVnaW9uJywgJ2NpdHknKQogICAgbG9nc19kaWN0ID0gc2Vzc2lvbi5nZXRfbG9ncygpCiAgICBhc3NlcnQgbG9nc19kaWN0CiAgICBhc3NlcnQgJ2xvZ3MnIGluIGxvZ3NfZGljdAogICAgYXNzZXJ0ICdsb2dzJyBpbiBsb2dzX2RpY3RbJ2xvZ3MnXQogICAgYXNzZXJ0ICdjb3VudCcgaW4gbG9nc19kaWN0Wydsb2dzJ10KICAgIGFzc2VydCBsb2dzX2RpY3RbJ2xvZ3MnXVsnY291bnQnXSA9PSAxCiAgICBhc3NlcnQgbGVuKGxvZ3NfZGljdFsnbG9ncyddWydsb2dzJ10pID09IDEKPHxmaW1fc3VmZml4fD4KZGVmIHRlc3RfZ2V0X2xvZ3MoKToKICAgIHN0b3JlID0gTWVtb3J5U3RvcmUoKQogICAgbG9ncyA9IExvZ3Moc3RvcmUpCiAgICB1c2VycyA9IFVzZXJzKHN0b3JlKQo8fGZpbV9lbmR8Pg=="]
["de02634fbe68b05e7f34352332d66f1a9fe0746b-3","de02634fbe68b05e7f34352332d66f1a9fe0746b","PHxmaW1fcHJlZml4fD4KZnJvbSBzcmMubG9ncyBpbXBvcnQgTG9ncwpmcm9tIHNyYy51c2VycyBpbXBvcnQgVXNlcnMKZnJvbSBzcmMudXNlciBpbXBvcnQgVVNFUl9BQ0NFU1NfU1VQRVIKZnJvbSBzcmMuc3RvcmVzIGltcG9ydCBNZW1vcnlTdG9yZQpmcm9tIHNyYy5zZXNzaW9uIGltcG9ydCBTZXNzaW9uCgoKZGVmIHRlc3RfZ2V0X2xvZ3MoKToKICAgIHN0b3JlID0gTWVtb3J5U3RvcmUoKQogICAgbG9ncyA9IExvZ3Moc3RvcmUpCiAgICB1c2VycyA9IFVzZXJzKHN0b3JlKQogICAgdXNlciA9IHVzZXJzLmFkZCgnZW1haWwnLCAnbmFtZScsICdhbGlhcycsICdwYXNzd29yZCcsICdwaG9uZScsIFRydWUsIFRydWUsCiAgICAgICAgICAgICAgICAgICAgIGFjY2Vzcz1VU0VSX0FDQ0VTU19TVVBFUiwgdXNlcl9pZD0ndGVzdCcpCiAgICB1c2VyLnZhbGlkYXRlZCA9IFRydWUKICAgIHNlc3Npb24gPSBTZXNzaW9uKHt9LCBzdG9yZSwgJ3Rlc3QnKQoKICAgIGxvZyA9IGxvZ3MuYWRkKCJpcCIsICJvcyIsICJvc192ZXJzaW9uIiwgImJyb3dzZXIiLCAiYnJvd3Nlcl92ZXJzaW9uIiwgJ2NvbnRpbmVudCcsIEZhbHNlLCAnY291bnRyeScsICdjb3VudHJ5X2Vtb2ppJywgJ3JlZ2lvbicsICdjaXR5JykKICAgIGxvZ3NfZGljdCA9IHNlc3Npb24uZ2V0X2xvZ3MoKQogICAgYXNzZXJ0IGxvZ3NfZGljdAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBhc3NlcnQgJ2xvZ3MnIGluIGxvZ3NfZGljdAogICAgYXNzZXJ0ICdsb2dzJyBpbiBsb2dzX2RpY3RbJ2xvZ3MnXQogICAgYXNzZXJ0ICdjb3VudCcgaW4gbG9nc19kaWN0Wydsb2dzJ10KICAgIGFzc2VydCBsb2dzX2RpY3RbJ2xvZ3MnXVsnY291bnQnXSA9PSAxCjx8ZmltX2VuZHw+"]
["de02634fbe68b05e7f34352332d66f1a9fe0746b-4","de02634fbe68b05e7f34352332d66f1a9fe0746b","PHxmaW1fcHJlZml4fD4KZnJvbSBzcmMubG9ncyBpbXBvcnQgTG9ncwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gc3JjLnVzZXJzIGltcG9ydCBVc2Vycwpmcm9tIHNyYy51c2VyIGltcG9ydCBVU0VSX0FDQ0VTU19TVVBFUgpmcm9tIHNyYy5zdG9yZXMgaW1wb3J0IE1lbW9yeVN0b3JlCmZyb20gc3JjLnNlc3Npb24gaW1wb3J0IFNlc3Npb24KPHxmaW1fZW5kfD4="]
["00bd7ccb003af9056a3b8d8c1341601c74cb8420-1","00bd7ccb003af9056a3b8d8c1341601c74cb8420","PHxmaW1fcHJlZml4fD4KIiIiClNlcnZlIGJ1aWxkIGluZm9ybWF0aW9uLgoKIiIiCmZyb20gbWljcm9jb3NtLmFwaSBpbXBvcnQgZGVmYXVsdHMKZnJvbSBtaWNyb2Nvc21fZmxhc2suYXVkaXQgaW1wb3J0IHNraXBfbG9nZ2luZwpmcm9tIG1pY3JvY29zbV9mbGFzay5jb252ZW50aW9ucy5iYXNlIGltcG9ydCBDb252ZW50aW9uCmZyb20gbWljcm9jb3NtX2ZsYXNrLmNvbnZlbnRpb25zLmVuY29kaW5nIGltcG9ydCBtYWtlX3Jlc3BvbnNlCmZyb20gbWljcm9jb3NtX2ZsYXNrLm5hbWVzcGFjZXMgaW1wb3J0IE5hbWVzcGFjZQpmcm9tIG1pY3JvY29zbV9mbGFzay5vcGVyYXRpb25zIGltcG9ydCBPcGVyYXRpb24KCgpjbGFzcyBCdWlsZEluZm86CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1aWxkX251bSwgc2hhMSk6CiAgICAgICAgc2VsZi5idWlsZF9udW0gPSBidWlsZF9udW0KICAgICAgICBzZWxmLnNoYTEgPSBzaGExCgogICAgZGVmIHRvX2RpY3Qoc2VsZik6CiAgICAgICAgcmV0dXJuIGRpY3QoCiAgICAgICAgICAgIGJ1aWxkX251bT1zZWxmLmJ1aWxkX251bSwKICAgICAgICAgICAgc2hhMT1zZWxmLnNoYTEsCiAgICAgICAgKQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGZyb21fY29uZmlnKGNscywgY29uZmlnKToKICAgICAgICByZXR1cm4gY2xzKAogICAgICAgICAgICBidWlsZF9udW09Y29uZmlnLmJ1aWxkX2luZm9fY29udmVudGlvbi5idWlsZF9udW0sCiAgICAgICAgICAgIHNoYTE9Y29uZmlnLmJ1aWxkX2luZm9fY29udmVudGlvbi5zaGExLAogICAgICAgICkKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgY2hlY2tfYnVpbGRfbnVtKGdyYXBoKToKICAgICAgICBidWlsZF9pbmZvID0gQnVpbGRJbmZvLmZyb21fY29uZmlnKGdyYXBoLmNvbmZpZykKICAgICAgICByZXR1cm4gYnVpbGRfaW5mby5idWlsZF9udW0gb3IgInVuZGVmaW5lZCIKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgY2hlY2tfc2hhMShncmFwaCk6CiAgICAgICAgYnVpbGRfaW5mbyA9IEJ1aWxkSW5mby5mcm9tX2NvbmZpZyhncmFwaC5jb25maWcpCiAgICAgICAgcmV0dXJuIGJ1aWxkX2luZm8uc2hhMSBvciAidW5kZWZpbmVkIgoKCmNsYXNzIEJ1aWxkSW5mb0NvbnZlbnRpb24oQ29udmVudGlvbik6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGdyYXBoKToKICAgICAgICBzdXBlcihCdWlsZEluZm9Db252ZW50aW9uLCBzZWxmKS5fX2luaXRfXyhncmFwaCkKICAgICAgICBzZWxmLmJ1aWxkX2luZm8gPSBCdWlsZEluZm8uZnJvbV9jb25maWcoZ3JhcGguY29uZmlnKQoKICAgIGRlZiBjb25maWd1cmVfcmV0cmlldmUoc2VsZiwgbnMsIGRlZmluaXRpb24pOgoKICAgICAgICBAc2VsZi5hZGRfcm91dGUobnMuc2luZ2xldG9uX3BhdGgsIE9wZXJhdGlvbi5SZXRyaWV2ZSwgbnMpCiAgICAgICAgQHNraXBfbG9nZ2luZwogICAgICAgIGRlZiBidWlsZF9pbmZvKCk6CiAgICAgICAgICAgIHJlc3BvbnNlX2RhdGEgPSBzZWxmLmJ1aWxkX2luZm8udG9fZGljdCgpCiAgICAgICAgICAgIHJldHVybiBtYWtlX3Jlc3BvbnNlKHJlc3BvbnNlX2RhdGEpCgoKQGRlZmF1bHRzKAogICAgYnVpbGRfbnVtPU5vbmUsCiAgICBzaGExPU5vbmUsCikKZGVmIGNvbmZpZ3VyZV9idWlsZF9pbmZvKGdyYXBoKToKICAgICIiIgogICAgQ29uZmlndXJlIHRoZSBidWlsZCBpbmZvIGVuZHBvaW50LgoKICAgICIiIgogICAgbnMgPSBOYW1lc3BhY2UoCiAgICAgICAgc3ViamVjdD1CdWlsZEluZm8sCiAgICApCgogICAgY29udmVudGlvbiA9IEJ1aWxkSW5mb0NvbnZlbnRpb24oZ3JhcGgpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGNvbnZlbnRpb24uY29uZmlndXJlKG5zLCByZXRyaWV2ZT10dXBsZSgpKQogICAgcmV0dXJuIGNvbnZlbnRpb24uYnVpbGRfaW5mbwo8fGZpbV9lbmR8Pg=="]
["00bd7ccb003af9056a3b8d8c1341601c74cb8420-2","00bd7ccb003af9056a3b8d8c1341601c74cb8420","PHxmaW1fcHJlZml4fD4KIiIiClNlcnZlIGJ1aWxkIGluZm9ybWF0aW9uLgoKIiIiCmZyb20gbWljcm9jb3NtLmFwaSBpbXBvcnQgZGVmYXVsdHMKZnJvbSBtaWNyb2Nvc21fZmxhc2suYXVkaXQgaW1wb3J0IHNraXBfbG9nZ2luZwpmcm9tIG1pY3JvY29zbV9mbGFzay5jb252ZW50aW9ucy5iYXNlIGltcG9ydCBDb252ZW50aW9uCmZyb20gbWljcm9jb3NtX2ZsYXNrLmNvbnZlbnRpb25zLmVuY29kaW5nIGltcG9ydCBtYWtlX3Jlc3BvbnNlCmZyb20gbWljcm9jb3NtX2ZsYXNrLm5hbWVzcGFjZXMgaW1wb3J0IE5hbWVzcGFjZQpmcm9tIG1pY3JvY29zbV9mbGFzay5vcGVyYXRpb25zIGltcG9ydCBPcGVyYXRpb24KCgpjbGFzcyBCdWlsZEluZm86CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1aWxkX251bSwgc2hhMSk6CiAgICAgICAgc2VsZi5idWlsZF9udW0gPSBidWlsZF9udW0KICAgICAgICBzZWxmLnNoYTEgPSBzaGExCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgdG9fZGljdChzZWxmKToKICAgICAgICByZXR1cm4gZGljdCgKICAgICAgICAgICAgYnVpbGRfbnVtPXNlbGYuYnVpbGRfbnVtLAogICAgICAgICAgICBzaGExPXNlbGYuc2hhMSwKPHxmaW1fZW5kfD4="]
["00bd7ccb003af9056a3b8d8c1341601c74cb8420-3","00bd7ccb003af9056a3b8d8c1341601c74cb8420","PHxmaW1fcHJlZml4fD4KIiIiClNlcnZlIGJ1aWxkIGluZm9ybWF0aW9uLgoKIiIiCmZyb20gbWljcm9jb3NtLmFwaSBpbXBvcnQgZGVmYXVsdHMKZnJvbSBtaWNyb2Nvc21fZmxhc2suYXVkaXQgaW1wb3J0IHNraXBfbG9nZ2luZwpmcm9tIG1pY3JvY29zbV9mbGFzay5jb252ZW50aW9ucy5iYXNlIGltcG9ydCBDb252ZW50aW9uCmZyb20gbWljcm9jb3NtX2ZsYXNrLmNvbnZlbnRpb25zLmVuY29kaW5nIGltcG9ydCBtYWtlX3Jlc3BvbnNlCmZyb20gbWljcm9jb3NtX2ZsYXNrLm5hbWVzcGFjZXMgaW1wb3J0IE5hbWVzcGFjZQpmcm9tIG1pY3JvY29zbV9mbGFzay5vcGVyYXRpb25zIGltcG9ydCBPcGVyYXRpb24KCgpjbGFzcyBCdWlsZEluZm86CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1aWxkX251bSwgc2hhMSk6CiAgICAgICAgc2VsZi5idWlsZF9udW0gPSBidWlsZF9udW0KICAgICAgICBzZWxmLnNoYTEgPSBzaGExCgogICAgZGVmIHRvX2RpY3Qoc2VsZik6CiAgICAgICAgcmV0dXJuIGRpY3QoCiAgICAgICAgICAgIGJ1aWxkX251bT1zZWxmLmJ1aWxkX251bSwKICAgICAgICAgICAgc2hhMT1zZWxmLnNoYTEsCiAgICAgICAgKQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGZyb21fY29uZmlnKGNscywgY29uZmlnKToKICAgICAgICByZXR1cm4gY2xzKAogICAgICAgICAgICBidWlsZF9udW09Y29uZmlnLmJ1aWxkX2luZm9fY29udmVudGlvbi5idWlsZF9udW0sCiAgICAgICAgICAgIHNoYTE9Y29uZmlnLmJ1aWxkX2luZm9fY29udmVudGlvbi5zaGExLAogICAgICAgICkKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgY2hlY2tfYnVpbGRfbnVtKGdyYXBoKToKICAgICAgICBidWlsZF9pbmZvID0gQnVpbGRJbmZvLmZyb21fY29uZmlnKGdyYXBoLmNvbmZpZykKICAgICAgICByZXR1cm4gYnVpbGRfaW5mby5idWlsZF9udW0gb3IgInVuZGVmaW5lZCIKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBjaGVja19zaGExKGdyYXBoKToKICAgICAgICBidWlsZF9pbmZvID0gQnVpbGRJbmZvLmZyb21fY29uZmlnKGdyYXBoLmNvbmZpZykKICAgICAgICByZXR1cm4gYnVpbGRfaW5mby5zaGExIG9yICJ1bmRlZmluZWQiCjx8ZmltX2VuZHw+"]
["00bd7ccb003af9056a3b8d8c1341601c74cb8420-4","00bd7ccb003af9056a3b8d8c1341601c74cb8420","PHxmaW1fcHJlZml4fD4KIiIiClNlcnZlIGJ1aWxkIGluZm9ybWF0aW9uLgoKIiIiCmZyb20gbWljcm9jb3NtLmFwaSBpbXBvcnQgZGVmYXVsdHMKZnJvbSBtaWNyb2Nvc21fZmxhc2suYXVkaXQgaW1wb3J0IHNraXBfbG9nZ2luZwpmcm9tIG1pY3JvY29zbV9mbGFzay5jb252ZW50aW9ucy5iYXNlIGltcG9ydCBDb252ZW50aW9uCmZyb20gbWljcm9jb3NtX2ZsYXNrLmNvbnZlbnRpb25zLmVuY29kaW5nIGltcG9ydCBtYWtlX3Jlc3BvbnNlCmZyb20gbWljcm9jb3NtX2ZsYXNrLm5hbWVzcGFjZXMgaW1wb3J0IE5hbWVzcGFjZQpmcm9tIG1pY3JvY29zbV9mbGFzay5vcGVyYXRpb25zIGltcG9ydCBPcGVyYXRpb24KCgpjbGFzcyBCdWlsZEluZm86CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1aWxkX251bSwgc2hhMSk6CiAgICAgICAgc2VsZi5idWlsZF9udW0gPSBidWlsZF9udW0KICAgICAgICBzZWxmLnNoYTEgPSBzaGExCgogICAgZGVmIHRvX2RpY3Qoc2VsZik6CiAgICAgICAgcmV0dXJuIGRpY3QoCiAgICAgICAgICAgIGJ1aWxkX251bT1zZWxmLmJ1aWxkX251bSwKICAgICAgICAgICAgc2hhMT1zZWxmLnNoYTEsCiAgICAgICAgKQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGZyb21fY29uZmlnKGNscywgY29uZmlnKToKICAgICAgICByZXR1cm4gY2xzKAogICAgICAgICAgICBidWlsZF9udW09Y29uZmlnLmJ1aWxkX2luZm9fY29udmVudGlvbi5idWlsZF9udW0sCiAgICAgICAgICAgIHNoYTE9Y29uZmlnLmJ1aWxkX2luZm9fY29udmVudGlvbi5zaGExLAogICAgICAgICkKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgY2hlY2tfYnVpbGRfbnVtKGdyYXBoKToKICAgICAgICBidWlsZF9pbmZvID0gQnVpbGRJbmZvLmZyb21fY29uZmlnKGdyYXBoLmNvbmZpZykKICAgICAgICByZXR1cm4gYnVpbGRfaW5mby5idWlsZF9udW0gb3IgInVuZGVmaW5lZCIKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgY2hlY2tfc2hhMShncmFwaCk6CiAgICAgICAgYnVpbGRfaW5mbyA9IEJ1aWxkSW5mby5mcm9tX2NvbmZpZyhncmFwaC5jb25maWcpCiAgICAgICAgcmV0dXJuIGJ1aWxkX2luZm8uc2hhMSBvciAidW5kZWZpbmVkIgoKCmNsYXNzIEJ1aWxkSW5mb0NvbnZlbnRpb24oQ29udmVudGlvbik6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGdyYXBoKToKICAgICAgICBzdXBlcihCdWlsZEluZm9Db252ZW50aW9uLCBzZWxmKS5fX2luaXRfXyhncmFwaCkKICAgICAgICBzZWxmLmJ1aWxkX2luZm8gPSBCdWlsZEluZm8uZnJvbV9jb25maWcoZ3JhcGguY29uZmlnKQoKICAgIGRlZiBjb25maWd1cmVfcmV0cmlldmUoc2VsZiwgbnMsIGRlZmluaXRpb24pOgoKICAgICAgICBAc2VsZi5hZGRfcm91dGUobnMuc2luZ2xldG9uX3BhdGgsIE9wZXJhdGlvbi5SZXRyaWV2ZSwgbnMpCiAgICAgICAgQHNraXBfbG9nZ2luZwogICAgICAgIGRlZiBidWlsZF9pbmZvKCk6CiAgICAgICAgICAgIHJlc3BvbnNlX2RhdGEgPSBzZWxmLmJ1aWxkX2luZm8udG9fZGljdCgpCiAgICAgICAgICAgIHJldHVybiBtYWtlX3Jlc3BvbnNlKHJlc3BvbnNlX2RhdGEpCgoKQGRlZmF1bHRzKAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBidWlsZF9udW09Tm9uZSwKICAgIHNoYTE9Tm9uZSwKPHxmaW1fZW5kfD4="]
["41a8eb17e88da57c1f277f831fd7c0a45a5fc6f6-1","41a8eb17e88da57c1f277f831fd7c0a45a5fc6f6","PHxmaW1fcHJlZml4fD4KIiIiCkNvcHlyaWdodCAyMDIwIFJQQU5Cb3QKCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoiIiIKZnJvbSB0eXBpbmcgaW1wb3J0IFVuaW9uCgpmcm9tIGRpc2NvcmQuaGVscGVycy5leGNlcHRpb25zIGltcG9ydCBEZXZlbG9wZXJDaGVja0ZhaWx1cmUsIEV4Y2x1ZGVkVXNlckJsb2NrZWQKCgphc3luYyBkZWYgaXNfY29yZV9kZXZlbG9wZXIoY3R4KSAtPiBVbmlvbltib29sLCBEZXZlbG9wZXJDaGVja0ZhaWx1cmVdOgogICAgIiIiCiAgICBDaGVja3MgaWYgYSB1c2VyIGlzIGEgY29yZSBib3QgZGV2ZWxvcGVyLgogICAgOnJldHVybjogVHJ1ZSBvciBEZXZlbG9wZXJDaGVja0ZhaWx1cmUgaXMgcmFpc2VkLgogICAgIiIiCiAgICBpZiBjdHguYXV0aG9yLmlkIGluIGN0eC5ib3QuY29yZS5zZXR0aW5ncy5pZHMuYm90X2RldmVsb3BlcnM6CiAgICAgICAgcmV0dXJuIFRydWUKICAgIHJhaXNlIERldmVsb3BlckNoZWNrRmFpbHVyZQoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KYXN5bmMgZGVmIGlzX3JwYW5fZ3VpbGQoY3R4KSAtPiBib29sOgogICAgIiIiCiAgICBDaGVja3MgaWYgdGhlIGd1aWxkIGlzIGFuIFJQQU4gZGlzY29yZCBndWlsZC4KICAgIDpyZXR1cm46IFdoZXRoZXIgb3Igbm90IGl0IGlzIChhcyBsaXN0ZWQgaW4gdGhlIHNldHRpbmdzKS4KPHxmaW1fZW5kfD4="]
["41a8eb17e88da57c1f277f831fd7c0a45a5fc6f6-2","41a8eb17e88da57c1f277f831fd7c0a45a5fc6f6","PHxmaW1fcHJlZml4fD4KIiIiCkNvcHlyaWdodCAyMDIwIFJQQU5Cb3QKCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoiIiIKZnJvbSB0eXBpbmcgaW1wb3J0IFVuaW9uCgpmcm9tIGRpc2NvcmQuaGVscGVycy5leGNlcHRpb25zIGltcG9ydCBEZXZlbG9wZXJDaGVja0ZhaWx1cmUsIEV4Y2x1ZGVkVXNlckJsb2NrZWQKCgphc3luYyBkZWYgaXNfY29yZV9kZXZlbG9wZXIoY3R4KSAtPiBVbmlvbltib29sLCBEZXZlbG9wZXJDaGVja0ZhaWx1cmVdOgogICAgIiIiCiAgICBDaGVja3MgaWYgYSB1c2VyIGlzIGEgY29yZSBib3QgZGV2ZWxvcGVyLgogICAgOnJldHVybjogVHJ1ZSBvciBEZXZlbG9wZXJDaGVja0ZhaWx1cmUgaXMgcmFpc2VkLgogICAgIiIiCiAgICBpZiBjdHguYXV0aG9yLmlkIGluIGN0eC5ib3QuY29yZS5zZXR0aW5ncy5pZHMuYm90X2RldmVsb3BlcnM6CiAgICAgICAgcmV0dXJuIFRydWUKICAgIHJhaXNlIERldmVsb3BlckNoZWNrRmFpbHVyZQoKCmFzeW5jIGRlZiBpc19ycGFuX2d1aWxkKGN0eCkgLT4gYm9vbDoKICAgICIiIgogICAgQ2hlY2tzIGlmIHRoZSBndWlsZCBpcyBhbiBSUEFOIGRpc2NvcmQgZ3VpbGQuCiAgICA6cmV0dXJuOiBXaGV0aGVyIG9yIG5vdCBpdCBpcyAoYXMgbGlzdGVkIGluIHRoZSBzZXR0aW5ncykuCiAgICAiIiIKICAgIGlmIG5vdCBjdHguZ3VpbGQ6CiAgICAgICAgcmV0dXJuIEZhbHNlCiAgICByZXR1cm4gY3R4Lmd1aWxkLmlkIGluIGN0eC5ib3QuY29yZS5zZXR0aW5ncy5pZHMucnBhbl9ndWlsZHMKCgphc3luYyBkZWYgaXNfbm90X2V4Y2x1ZGVkKGN0eCkgLT4gVW5pb25bYm9vbCwgRXhjbHVkZWRVc2VyQmxvY2tlZF06CiAgICAiIiIKICAgIENoZWNrcyBpZiB0aGUgYXV0aG9yIGlzIGJhbm5lZCBmcm9tIHVzaW5nIHRoZSBib3QuCiAgICA6cmV0dXJuOiBUcnVlIGlmIHRoZXkgYXJlIG5vdCwgYW5kIEV4Y2x1ZGVkVXNlckJsb2NrZWQgaXMgcmFpc2VkIGlmIHRoZXkgYXJlLgogICAgIiIiCiAgICBpZiBub3QgY3R4LmJvdC5pc19leGNsdWRlZF91c2VyKGN0eC5hdXRob3IuaWQpOgogICAgICAgIHJldHVybiBUcnVlCiAgICBlbHNlOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcmFpc2UgRXhjbHVkZWRVc2VyQmxvY2tlZAo8fGZpbV9lbmR8Pg=="]
["41a8eb17e88da57c1f277f831fd7c0a45a5fc6f6-3","41a8eb17e88da57c1f277f831fd7c0a45a5fc6f6","PHxmaW1fcHJlZml4fD4KIiIiCkNvcHlyaWdodCAyMDIwIFJQQU5Cb3QKCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgo8fGZpbV9ob2xlfD4KCgphc3luYyBkZWYgaXNfY29yZV9kZXZlbG9wZXIoY3R4KSAtPiBVbmlvbltib29sLCBEZXZlbG9wZXJDaGVja0ZhaWx1cmVdOgogICAgIiIiCiAgICBDaGVja3MgaWYgYSB1c2VyIGlzIGEgY29yZSBib3QgZGV2ZWxvcGVyLgogICAgOnJldHVybjogVHJ1ZSBvciBEZXZlbG9wZXJDaGVja0ZhaWx1cmUgaXMgcmFpc2VkLgogICAgIiIiCiAgICBpZiBjdHguYXV0aG9yLmlkIGluIGN0eC5ib3QuY29yZS5zZXR0aW5ncy5pZHMuYm90X2RldmVsb3BlcnM6CiAgICAgICAgcmV0dXJuIFRydWUKICAgIHJhaXNlIERldmVsb3BlckNoZWNrRmFpbHVyZQoKCmFzeW5jIGRlZiBpc19ycGFuX2d1aWxkKGN0eCkgLT4gYm9vbDoKICAgICIiIgogICAgQ2hlY2tzIGlmIHRoZSBndWlsZCBpcyBhbiBSUEFOIGRpc2NvcmQgZ3VpbGQuCiAgICA6cmV0dXJuOiBXaGV0aGVyIG9yIG5vdCBpdCBpcyAoYXMgbGlzdGVkIGluIHRoZSBzZXR0aW5ncykuCiAgICAiIiIKICAgIGlmIG5vdCBjdHguZ3VpbGQ6CiAgICAgICAgcmV0dXJuIEZhbHNlCiAgICByZXR1cm4gY3R4Lmd1aWxkLmlkIGluIGN0eC5ib3QuY29yZS5zZXR0aW5ncy5pZHMucnBhbl9ndWlsZHMKCgphc3luYyBkZWYgaXNfbm90X2V4Y2x1ZGVkKGN0eCkgLT4gVW5pb25bYm9vbCwgRXhjbHVkZWRVc2VyQmxvY2tlZF06CiAgICAiIiIKICAgIENoZWNrcyBpZiB0aGUgYXV0aG9yIGlzIGJhbm5lZCBmcm9tIHVzaW5nIHRoZSBib3QuCiAgICA6cmV0dXJuOiBUcnVlIGlmIHRoZXkgYXJlIG5vdCwgYW5kIEV4Y2x1ZGVkVXNlckJsb2NrZWQgaXMgcmFpc2VkIGlmIHRoZXkgYXJlLgogICAgIiIiCiAgICBpZiBub3QgY3R4LmJvdC5pc19leGNsdWRlZF91c2VyKGN0eC5hdXRob3IuaWQpOgogICAgICAgIHJldHVybiBUcnVlCiAgICBlbHNlOgogICAgICAgIHJhaXNlIEV4Y2x1ZGVkVXNlckJsb2NrZWQKPHxmaW1fc3VmZml4fD4KIiIiCmZyb20gdHlwaW5nIGltcG9ydCBVbmlvbgoKZnJvbSBkaXNjb3JkLmhlbHBlcnMuZXhjZXB0aW9ucyBpbXBvcnQgRGV2ZWxvcGVyQ2hlY2tGYWlsdXJlLCBFeGNsdWRlZFVzZXJCbG9ja2VkCjx8ZmltX2VuZHw+"]
["ec5264863216f646f4c7730cc29eb017c72841b6-1","ec5264863216f646f4c7730cc29eb017c72841b6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGd5bQppbXBvcnQgcmFuZG9tCmltcG9ydCBudW1weSBhcyBucCAKaW1wb3J0IHRmbGVhcm4KZnJvbSB0ZmxlYXJuLmxheWVycy5jb3JlIGltcG9ydCBpbnB1dF9kYXRhLCBkcm9wb3V0LCBmdWxseV9jb25uZWN0ZWQKZnJvbSB0ZmxlYXJuLmxheWVycy5lc3RpbWF0b3IgaW1wb3J0IHJlZ3Jlc3Npb24KZnJvbSBzdGF0aXN0aWNzIGltcG9ydCBtZWFuLCBtZWRpYW4KZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgoKTFIgPSAxZS0zCmVudiA9IGd5bS5tYWtlKCdDYXJ0UG9sZS12MCcpCmVudi5yZXNldCgpCjx8ZmltX2hvbGV8PgoKCiMgIyBSYW5kb20gaW5wdXQgZ2FtZSBnZW5lcmF0b3IKIyBkZWYgaW5pdGlhbGl6ZV9yYW5kb21fZ2FtZSgpOgojIAlmb3IgZXBpc29kZSBpbiByYW5nZSg1KToKIyAJCWVudi5yZXNldCgpCiMgCQlmb3IgdCBpbiByYW5nZShnb2FsX3N0ZXBzKToKIyAJCQllbnYucmVuZGVyKCkKIyAJCQlhY3Rpb24gPSBlbnYuYWN0aW9uX3NwYWNlLnNhbXBsZSgpCiMgCQkJb2JzZXJ2YXRpb24sIHJld2FyZCwgZG9uZSwgaW5mbyA9IGVudi5zdGVwKGFjdGlvbikKIyAJCQlpZiBkb25lOgojIAkJCQlicmVhawoKIyBpbml0aWFsaXplX3JhbmRvbV9nYW1lKCkKCgoKZGVmIGluaXRpYWxfcG9wdWxhdGlvbigpOgoJdHJhaW5pbmdfZGF0YSA9IFtdCglzY29yZXMgPSBbXQoJYWNjZXB0ZWRfc2NvcmVzID0gW10KCgkjIEl0ZXJhdGlvbnMgdGhyb3VnaCBnYW1lcwoJZm9yIF8gaW4gcmFuZ2UoaW5pdGlhbF9nYW1lcyk6CgkJc2NvcmUgPSAwCgkJZ2FtZV9tZW1vcnkgPSBbXQoJCXByZXZfb2JzZXJ2YXRpb24gPSBbXQoKCQkjIEdhbWUKCQlmb3IgXyBpbiByYW5nZShnb2FsX3N0ZXBzKToKCQkJYWN0aW9uID0gcmFuZG9tLnJhbmRyYW5nZSgwLDIpCgkJCW9ic2VydmF0aW9uLCByZXdhcmQsIGRvbmUsIGluZm8gPSBlbnYuc3RlcChhY3Rpb24pCgkJCWlmIGxlbihwcmV2X29ic2VydmF0aW9uKSA+IDA6CgkJCQlnYW1lX21lbW9yeS5hcHBlbmQoW3ByZXZfb2JzZXJ2YXRpb24sIGFjdGlvbl0pCgkJCXByZXZfb2JzZXJ2YXRpb24gPSBvYnNlcnZhdGlvbgoJCQlzY29yZSArPSByZXdhcmQKCQkJaWYgZG9uZToKCQkJCWJyZWFrCgoJCWlmIHNjb3JlID49IHNjb3JlX3JlcXVpcmVtZW50OgoJCQlhY2NlcHRlZF9zY29yZXMuYXBwZW5kKHNjb3JlKQoJCQlmb3IgZGF0YSBpbiBnYW1lX21lbW9yeToKCQkJCWlmIGRhdGFbMV0gPT0gMToKCQkJCQlvdXRwdXQgPSBbMCwxXQoJCQkJZWxpZiBkYXRhWzFdID09IDA6CgkJCQkJb3V0cHV0ID0gWzEsMF0KCgkJCQl0cmFpbmluZ19kYXRhLmFwcGVuZChbZGF0YVswXSwgb3V0cHV0XSkKCgkJZW52LnJlc2V0KCkKCQlzY29yZXMuYXBwZW5kKHNjb3JlKQoKCXRyYWluaW5nX2RhdGFfc2F2ZSA9IG5wLmFycmF5KHRyYWluaW5nX2RhdGEpCglucC5zYXZlKCJzYXZlZC5ucHkiLCB0cmFpbmluZ19kYXRhX3NhdmUpCglwcmludCgiQXZnLiBhY2NlcHRlZCBzY29yZSIsIG1lYW4oYWNjZXB0ZWRfc2NvcmVzKSkKCXByaW50KCJNZWRpYW4uXCBhY2NlcHRlZCBzY29yZSIsIG1lZGlhbihhY2NlcHRlZF9zY29yZXMpKQoJcHJpbnQoQ291bnRlcihhY2NlcHRlZF9zY29yZXMpKQoKCXJldHVybiB0cmFpbmluZ19kYXRhCgoKIyBpbml0aWFsX3BvcHVsYXRpb24oKQoKCmRlZiBubl9tb2RlbChpbnB1dF9zaXplKToKCW5ldHdvcmsgPSBpbnB1dF9kYXRhKHNoYXBlID0gW05vbmUsIGlucHV0X3NpemUsIDFdLCBuYW1lID0gImlucHV0IikKCW5ldHdvcmsgPSBmdWxseV9jb25uZWN0ZWQobmV0d29yaywgMTI4LCBhY3RpdmF0aW9uID0gInJlbHUiKQoJbmV0d29yayA9IGRyb3BvdXQobmV0d29yaywgMC44KSAgIyBrZWVwX3JhdGUKCW5ldHdvcmsgPSBmdWxseV9jb25uZWN0ZWQobmV0d29yaywgMjU2LCBhY3RpdmF0aW9uID0gInJlbHUiKQoJbmV0d29yayA9IGRyb3BvdXQobmV0d29yaywgMC44KQoJbmV0d29yayA9IGZ1bGx5X2Nvbm5lY3RlZChuZXR3b3JrLCA1MTIsIGFjdGl2YXRpb24gPSAicmVsdSIpCgluZXR3b3JrID0gZHJvcG91dChuZXR3b3JrLCAwLjgpCgluZXR3b3JrID0gZnVsbHlfY29ubmVjdGVkKG5ldHdvcmssIDI1NiwgYWN0aXZhdGlvbiA9ICJyZWx1IikKCW5ldHdvcmsgPSBkcm9wb3V0KG5ldHdvcmssIDAuOCkKCW5ldHdvcmsgPSBmdWxseV9jb25uZWN0ZWQobmV0d29yaywgMTI4LCBhY3RpdmF0aW9uID0gInJlbHUiKQoJbmV0d29yayA9IGRyb3BvdXQobmV0d29yaywgMC44KQoJbmV0d29yayA9IGZ1bGx5X2Nvbm5lY3RlZChuZXR3b3JrLCAyLCBhY3RpdmF0aW9uID0gInNvZnRtYXgiKQoJbmV0d29yayA9IHJlZ3Jlc3Npb24obmV0d29yaywgb3B0aW1pemVyID0gImFkYW0iLCAKCQkJCQkJCQkJbGVhcm5pbmdfcmF0ZSA9IExSLCAKCQkJCQkJCQkJbG9zcz0iY2F0ZWdvcmljYWxfY3Jvc3NlbnRyb3B5IiwKCQkJCQkJCQkJbmFtZT0idGFyZ2V0cyIpCgltb2RlbCA9IHRmbGVhcm4uRE5OKG5ldHdvcmssIHRlbnNvcmJvYXJkX2RpciA9ICJsb2ciKQoJcmV0dXJuIG1vZGVsCgpkZWYgdHJhaW5fbm5fbW9kZWwodHJhaW5pbmdfZGF0YSwgbW9kZWwgPSBGYWxzZSk6CglYID0gbnAuYXJyYXkoW2lbMF0gZm9yIGkgaW4gdHJhaW5pbmdfZGF0YV0pLnJlc2hhcGUoLTEsIGxlbih0cmFpbmluZ19kYXRhWzBdWzBdKSwgMSkKCSMgcHJpbnQoIlggc2l6ZSIsIGxlbihYKSkKCSMgcHJpbnQoIklucHV0IHNpemUiLCBsZW4oWFswXSkpCgkjIHByaW50KCJyZXNoYXBlZCBieSIsbGVuKHRyYWluaW5nX2RhdGFbMF1bMF0pKQoJeSA9IFtpWzFdIGZvciBpIGluIHRyYWluaW5nX2RhdGFdCglpZiBub3QgbW9kZWw6CgkJbW9kZWwgPSBubl9tb2RlbChpbnB1dF9zaXplID0gbGVuKFhbMF0pKQoJbW9kZWwuZml0KHsiaW5wdXQiOiBYfSwgeyJ0YXJnZXRzIjogeX0sIG5fZXBvY2ggPSA1LCAKCQkJCQkJCQkJc25hcHNob3Rfc3RlcCA9IDIwMCwgCgkJCQkJCQkJCXNob3dfbWV0cmljID0gVHJ1ZSwKCQkJCQkJCQkJcnVuX2lkID0gIm9wZW5haV9jYXJ0cG9sZSIpCglyZXR1cm4gbW9kZWwKCnRyYWluaW5nX2RhdGEgPSBpbml0aWFsX3BvcHVsYXRpb24oKQpwcmludCgiSW5wdXQgc2l6ZSIsIGxlbih0cmFpbmluZ19kYXRhWzBdWzBdKSkKbW9kZWwgPSB0cmFpbl9ubl9tb2RlbCh0cmFpbmluZ19kYXRhKQojIG1vZGVsLnNhdmUoIi4vbW9kZWxfY2FydHBvbGUvbW9kZWxfY2FydHBvbGVfbm4ubW9kZWwiKQoKc2NvcmVzID0gW10KY2hvaWNlcyA9IFtdCgpmb3IgZWFjaF9nYW1lIGluIHJhbmdlKDEwKToKCXNjb3JlID0gMAoJZ2FtZV9tZW1vcnkgPSBbXQoJcHJldl9vYnNlcnZhdGlvbiA9IFtdCgllbnYucmVzZXQoKQoJZm9yIF8gaW4gcmFuZ2UoZ29hbF9zdGVwcyk6CgkJZW52LnJlbmRlcigpCgkJaWYgbGVuKHByZXZfb2JzZXJ2YXRpb24pID09IDA6CgkJCWFjdGlvbiA9IHJhbmRvbS5yYW5kcmFuZ2UoMCwyKSAKCQllbHNlOgoJCQlhY3Rpb24gPSBucC5hcmdtYXgobW9kZWwucHJlZGljdChwcmV2X29ic2VydmF0aW9uLnJlc2hhcGUoLTEsIGxlbihwcmV2X29ic2VydmF0aW9uKSwxKSlbMF0pCgkJY2hvaWNlcy5hcHBlbmQoYWN0aW9uKQoJCW9ic2VydmF0aW9uLCByZXdhcmQsIGRvbmUsIGluZm8gPSBlbnYuc3RlcChhY3Rpb24pCgkJZ2FtZV9tZW1vcnkuYXBwZW5kKFtwcmV2X29ic2VydmF0aW9uLCBhY3Rpb25dKQoJCXByZXZfb2JzZXJ2YXRpb24gPSBvYnNlcnZhdGlvbgoJCXNjb3JlICs9IHJld2FyZAoJCWlmIGRvbmU6CgkJCWJyZWFrCgoJc2NvcmVzLmFwcGVuZChzY29yZSkKCWVudi5yZXNldCgpCgoKcHJpbnQoIkF2Zy4gU2NvcmUiLCBtZWFuKHNjb3JlcykpCnByaW50KCJDaG9pY2UgMSA6IHt9LCBDaG9pY2UgMiA6IHt9Ii5mb3JtYXQoY2hvaWNlcy5jb3VudCgxKS9sZW4oY2hvaWNlcyksIGNob2ljZXMuY291bnQoMCkvbGVuKGNob2ljZXMpKSkKCgoKCjx8ZmltX3N1ZmZpeHw+Cgpnb2FsX3N0ZXBzID0gNTAwCnNjb3JlX3JlcXVpcmVtZW50ID0gNTAKaW5pdGlhbF9nYW1lcyA9IDEwMDAwCjx8ZmltX2VuZHw+"]
["ec5264863216f646f4c7730cc29eb017c72841b6-2","ec5264863216f646f4c7730cc29eb017c72841b6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGd5bQppbXBvcnQgcmFuZG9tCmltcG9ydCBudW1weSBhcyBucCAKaW1wb3J0IHRmbGVhcm4KZnJvbSB0ZmxlYXJuLmxheWVycy5jb3JlIGltcG9ydCBpbnB1dF9kYXRhLCBkcm9wb3V0LCBmdWxseV9jb25uZWN0ZWQKZnJvbSB0ZmxlYXJuLmxheWVycy5lc3RpbWF0b3IgaW1wb3J0IHJlZ3Jlc3Npb24KZnJvbSBzdGF0aXN0aWNzIGltcG9ydCBtZWFuLCBtZWRpYW4KZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgoKTFIgPSAxZS0zCmVudiA9IGd5bS5tYWtlKCdDYXJ0UG9sZS12MCcpCmVudi5yZXNldCgpCgpnb2FsX3N0ZXBzID0gNTAwCnNjb3JlX3JlcXVpcmVtZW50ID0gNTAKaW5pdGlhbF9nYW1lcyA9IDEwMDAwCgoKIyAjIFJhbmRvbSBpbnB1dCBnYW1lIGdlbmVyYXRvcgojIGRlZiBpbml0aWFsaXplX3JhbmRvbV9nYW1lKCk6CiMgCWZvciBlcGlzb2RlIGluIHJhbmdlKDUpOgojIAkJZW52LnJlc2V0KCkKIyAJCWZvciB0IGluIHJhbmdlKGdvYWxfc3RlcHMpOgojIAkJCWVudi5yZW5kZXIoKQojIAkJCWFjdGlvbiA9IGVudi5hY3Rpb25fc3BhY2Uuc2FtcGxlKCkKIyAJCQlvYnNlcnZhdGlvbiwgcmV3YXJkLCBkb25lLCBpbmZvID0gZW52LnN0ZXAoYWN0aW9uKQojIAkJCWlmIGRvbmU6CiMgCQkJCWJyZWFrCgojIGluaXRpYWxpemVfcmFuZG9tX2dhbWUoKQoKCgpkZWYgaW5pdGlhbF9wb3B1bGF0aW9uKCk6Cgl0cmFpbmluZ19kYXRhID0gW10KCXNjb3JlcyA9IFtdCglhY2NlcHRlZF9zY29yZXMgPSBbXQoKCSMgSXRlcmF0aW9ucyB0aHJvdWdoIGdhbWVzCglmb3IgXyBpbiByYW5nZShpbml0aWFsX2dhbWVzKToKCQlzY29yZSA9IDAKCQlnYW1lX21lbW9yeSA9IFtdCgkJcHJldl9vYnNlcnZhdGlvbiA9IFtdCgoJCSMgR2FtZQoJCWZvciBfIGluIHJhbmdlKGdvYWxfc3RlcHMpOgoJCQlhY3Rpb24gPSByYW5kb20ucmFuZHJhbmdlKDAsMikKCQkJb2JzZXJ2YXRpb24sIHJld2FyZCwgZG9uZSwgaW5mbyA9IGVudi5zdGVwKGFjdGlvbikKCQkJaWYgbGVuKHByZXZfb2JzZXJ2YXRpb24pID4gMDoKCQkJCWdhbWVfbWVtb3J5LmFwcGVuZChbcHJldl9vYnNlcnZhdGlvbiwgYWN0aW9uXSkKCQkJcHJldl9vYnNlcnZhdGlvbiA9IG9ic2VydmF0aW9uCgkJCXNjb3JlICs9IHJld2FyZAoJCQlpZiBkb25lOgoJCQkJYnJlYWsKCgkJaWYgc2NvcmUgPj0gc2NvcmVfcmVxdWlyZW1lbnQ6CgkJCWFjY2VwdGVkX3Njb3Jlcy5hcHBlbmQoc2NvcmUpCgkJCWZvciBkYXRhIGluIGdhbWVfbWVtb3J5OgoJCQkJaWYgZGF0YVsxXSA9PSAxOgoJCQkJCW91dHB1dCA9IFswLDFdCgkJCQllbGlmIGRhdGFbMV0gPT0gMDoKCQkJCQlvdXRwdXQgPSBbMSwwXQoKCQkJCXRyYWluaW5nX2RhdGEuYXBwZW5kKFtkYXRhWzBdLCBvdXRwdXRdKQoKCQllbnYucmVzZXQoKQoJCXNjb3Jlcy5hcHBlbmQoc2NvcmUpCgoJdHJhaW5pbmdfZGF0YV9zYXZlID0gbnAuYXJyYXkodHJhaW5pbmdfZGF0YSkKCW5wLnNhdmUoInNhdmVkLm5weSIsIHRyYWluaW5nX2RhdGFfc2F2ZSkKCXByaW50KCJBdmcuIGFjY2VwdGVkIHNjb3JlIiwgbWVhbihhY2NlcHRlZF9zY29yZXMpKQoJcHJpbnQoIk1lZGlhbi5cIGFjY2VwdGVkIHNjb3JlIiwgbWVkaWFuKGFjY2VwdGVkX3Njb3JlcykpCglwcmludChDb3VudGVyKGFjY2VwdGVkX3Njb3JlcykpCgoJcmV0dXJuIHRyYWluaW5nX2RhdGEKCgojIGluaXRpYWxfcG9wdWxhdGlvbigpCgoKZGVmIG5uX21vZGVsKGlucHV0X3NpemUpOgoJbmV0d29yayA9IGlucHV0X2RhdGEoc2hhcGUgPSBbTm9uZSwgaW5wdXRfc2l6ZSwgMV0sIG5hbWUgPSAiaW5wdXQiKQoJbmV0d29yayA9IGZ1bGx5X2Nvbm5lY3RlZChuZXR3b3JrLCAxMjgsIGFjdGl2YXRpb24gPSAicmVsdSIpCgluZXR3b3JrID0gZHJvcG91dChuZXR3b3JrLCAwLjgpICAjIGtlZXBfcmF0ZQoJbmV0d29yayA9IGZ1bGx5X2Nvbm5lY3RlZChuZXR3b3JrLCAyNTYsIGFjdGl2YXRpb24gPSAicmVsdSIpCgluZXR3b3JrID0gZHJvcG91dChuZXR3b3JrLCAwLjgpCgluZXR3b3JrID0gZnVsbHlfY29ubmVjdGVkKG5ldHdvcmssIDUxMiwgYWN0aXZhdGlvbiA9ICJyZWx1IikKCW5ldHdvcmsgPSBkcm9wb3V0KG5ldHdvcmssIDAuOCkKCW5ldHdvcmsgPSBmdWxseV9jb25uZWN0ZWQobmV0d29yaywgMjU2LCBhY3RpdmF0aW9uID0gInJlbHUiKQoJbmV0d29yayA9IGRyb3BvdXQobmV0d29yaywgMC44KQoJbmV0d29yayA9IGZ1bGx5X2Nvbm5lY3RlZChuZXR3b3JrLCAxMjgsIGFjdGl2YXRpb24gPSAicmVsdSIpCgluZXR3b3JrID0gZHJvcG91dChuZXR3b3JrLCAwLjgpCgluZXR3b3JrID0gZnVsbHlfY29ubmVjdGVkKG5ldHdvcmssIDIsIGFjdGl2YXRpb24gPSAic29mdG1heCIpCgluZXR3b3JrID0gcmVncmVzc2lvbihuZXR3b3JrLCBvcHRpbWl6ZXIgPSAiYWRhbSIsIAoJCQkJCQkJCQlsZWFybmluZ19yYXRlID0gTFIsIAoJCQkJCQkJCQlsb3NzPSJjYXRlZ29yaWNhbF9jcm9zc2VudHJvcHkiLAoJCQkJCQkJCQluYW1lPSJ0YXJnZXRzIikKCW1vZGVsID0gdGZsZWFybi5ETk4obmV0d29yaywgdGVuc29yYm9hcmRfZGlyID0gImxvZyIpCjx8ZmltX2hvbGV8PgpkZWYgdHJhaW5fbm5fbW9kZWwodHJhaW5pbmdfZGF0YSwgbW9kZWwgPSBGYWxzZSk6CglYID0gbnAuYXJyYXkoW2lbMF0gZm9yIGkgaW4gdHJhaW5pbmdfZGF0YV0pLnJlc2hhcGUoLTEsIGxlbih0cmFpbmluZ19kYXRhWzBdWzBdKSwgMSkKCSMgcHJpbnQoIlggc2l6ZSIsIGxlbihYKSkKCSMgcHJpbnQoIklucHV0IHNpemUiLCBsZW4oWFswXSkpCgkjIHByaW50KCJyZXNoYXBlZCBieSIsbGVuKHRyYWluaW5nX2RhdGFbMF1bMF0pKQoJeSA9IFtpWzFdIGZvciBpIGluIHRyYWluaW5nX2RhdGFdCglpZiBub3QgbW9kZWw6CgkJbW9kZWwgPSBubl9tb2RlbChpbnB1dF9zaXplID0gbGVuKFhbMF0pKQoJbW9kZWwuZml0KHsiaW5wdXQiOiBYfSwgeyJ0YXJnZXRzIjogeX0sIG5fZXBvY2ggPSA1LCAKCQkJCQkJCQkJc25hcHNob3Rfc3RlcCA9IDIwMCwgCgkJCQkJCQkJCXNob3dfbWV0cmljID0gVHJ1ZSwKCQkJCQkJCQkJcnVuX2lkID0gIm9wZW5haV9jYXJ0cG9sZSIpCglyZXR1cm4gbW9kZWwKCnRyYWluaW5nX2RhdGEgPSBpbml0aWFsX3BvcHVsYXRpb24oKQpwcmludCgiSW5wdXQgc2l6ZSIsIGxlbih0cmFpbmluZ19kYXRhWzBdWzBdKSkKbW9kZWwgPSB0cmFpbl9ubl9tb2RlbCh0cmFpbmluZ19kYXRhKQojIG1vZGVsLnNhdmUoIi4vbW9kZWxfY2FydHBvbGUvbW9kZWxfY2FydHBvbGVfbm4ubW9kZWwiKQoKc2NvcmVzID0gW10KY2hvaWNlcyA9IFtdCgpmb3IgZWFjaF9nYW1lIGluIHJhbmdlKDEwKToKCXNjb3JlID0gMAoJZ2FtZV9tZW1vcnkgPSBbXQoJcHJldl9vYnNlcnZhdGlvbiA9IFtdCgllbnYucmVzZXQoKQoJZm9yIF8gaW4gcmFuZ2UoZ29hbF9zdGVwcyk6CgkJZW52LnJlbmRlcigpCgkJaWYgbGVuKHByZXZfb2JzZXJ2YXRpb24pID09IDA6CgkJCWFjdGlvbiA9IHJhbmRvbS5yYW5kcmFuZ2UoMCwyKSAKCQllbHNlOgoJCQlhY3Rpb24gPSBucC5hcmdtYXgobW9kZWwucHJlZGljdChwcmV2X29ic2VydmF0aW9uLnJlc2hhcGUoLTEsIGxlbihwcmV2X29ic2VydmF0aW9uKSwxKSlbMF0pCgkJY2hvaWNlcy5hcHBlbmQoYWN0aW9uKQoJCW9ic2VydmF0aW9uLCByZXdhcmQsIGRvbmUsIGluZm8gPSBlbnYuc3RlcChhY3Rpb24pCgkJZ2FtZV9tZW1vcnkuYXBwZW5kKFtwcmV2X29ic2VydmF0aW9uLCBhY3Rpb25dKQoJCXByZXZfb2JzZXJ2YXRpb24gPSBvYnNlcnZhdGlvbgoJCXNjb3JlICs9IHJld2FyZAoJCWlmIGRvbmU6CgkJCWJyZWFrCgoJc2NvcmVzLmFwcGVuZChzY29yZSkKCWVudi5yZXNldCgpCgoKcHJpbnQoIkF2Zy4gU2NvcmUiLCBtZWFuKHNjb3JlcykpCnByaW50KCJDaG9pY2UgMSA6IHt9LCBDaG9pY2UgMiA6IHt9Ii5mb3JtYXQoY2hvaWNlcy5jb3VudCgxKS9sZW4oY2hvaWNlcyksIGNob2ljZXMuY291bnQoMCkvbGVuKGNob2ljZXMpKSkKCgoKCjx8ZmltX3N1ZmZpeHw+CglyZXR1cm4gbW9kZWwKCjx8ZmltX2VuZHw+"]
["ec5264863216f646f4c7730cc29eb017c72841b6-3","ec5264863216f646f4c7730cc29eb017c72841b6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGd5bQppbXBvcnQgcmFuZG9tCmltcG9ydCBudW1weSBhcyBucCAKaW1wb3J0IHRmbGVhcm4KZnJvbSB0ZmxlYXJuLmxheWVycy5jb3JlIGltcG9ydCBpbnB1dF9kYXRhLCBkcm9wb3V0LCBmdWxseV9jb25uZWN0ZWQKZnJvbSB0ZmxlYXJuLmxheWVycy5lc3RpbWF0b3IgaW1wb3J0IHJlZ3Jlc3Npb24KZnJvbSBzdGF0aXN0aWNzIGltcG9ydCBtZWFuLCBtZWRpYW4KZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgoKTFIgPSAxZS0zCmVudiA9IGd5bS5tYWtlKCdDYXJ0UG9sZS12MCcpCmVudi5yZXNldCgpCgpnb2FsX3N0ZXBzID0gNTAwCnNjb3JlX3JlcXVpcmVtZW50ID0gNTAKaW5pdGlhbF9nYW1lcyA9IDEwMDAwCgoKIyAjIFJhbmRvbSBpbnB1dCBnYW1lIGdlbmVyYXRvcgojIGRlZiBpbml0aWFsaXplX3JhbmRvbV9nYW1lKCk6CiMgCWZvciBlcGlzb2RlIGluIHJhbmdlKDUpOgojIAkJZW52LnJlc2V0KCkKIyAJCWZvciB0IGluIHJhbmdlKGdvYWxfc3RlcHMpOgojIAkJCWVudi5yZW5kZXIoKQojIAkJCWFjdGlvbiA9IGVudi5hY3Rpb25fc3BhY2Uuc2FtcGxlKCkKIyAJCQlvYnNlcnZhdGlvbiwgcmV3YXJkLCBkb25lLCBpbmZvID0gZW52LnN0ZXAoYWN0aW9uKQojIAkJCWlmIGRvbmU6CiMgCQkJCWJyZWFrCgojIGluaXRpYWxpemVfcmFuZG9tX2dhbWUoKQoKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRlZiBpbml0aWFsX3BvcHVsYXRpb24oKToKCXRyYWluaW5nX2RhdGEgPSBbXQoJc2NvcmVzID0gW10KCWFjY2VwdGVkX3Njb3JlcyA9IFtdCjx8ZmltX2VuZHw+"]
["ec5264863216f646f4c7730cc29eb017c72841b6-4","ec5264863216f646f4c7730cc29eb017c72841b6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGd5bQppbXBvcnQgcmFuZG9tCmltcG9ydCBudW1weSBhcyBucCAKaW1wb3J0IHRmbGVhcm4KZnJvbSB0ZmxlYXJuLmxheWVycy5jb3JlIGltcG9ydCBpbnB1dF9kYXRhLCBkcm9wb3V0LCBmdWxseV9jb25uZWN0ZWQKZnJvbSB0ZmxlYXJuLmxheWVycy5lc3RpbWF0b3IgaW1wb3J0IHJlZ3Jlc3Npb24KZnJvbSBzdGF0aXN0aWNzIGltcG9ydCBtZWFuLCBtZWRpYW4KZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgoKTFIgPSAxZS0zCmVudiA9IGd5bS5tYWtlKCdDYXJ0UG9sZS12MCcpCmVudi5yZXNldCgpCgpnb2FsX3N0ZXBzID0gNTAwCnNjb3JlX3JlcXVpcmVtZW50ID0gNTAKaW5pdGlhbF9nYW1lcyA9IDEwMDAwCgoKIyAjIFJhbmRvbSBpbnB1dCBnYW1lIGdlbmVyYXRvcgojIGRlZiBpbml0aWFsaXplX3JhbmRvbV9nYW1lKCk6CiMgCWZvciBlcGlzb2RlIGluIHJhbmdlKDUpOgojIAkJZW52LnJlc2V0KCkKIyAJCWZvciB0IGluIHJhbmdlKGdvYWxfc3RlcHMpOgojIAkJCWVudi5yZW5kZXIoKQojIAkJCWFjdGlvbiA9IGVudi5hY3Rpb25fc3BhY2Uuc2FtcGxlKCkKIyAJCQlvYnNlcnZhdGlvbiwgcmV3YXJkLCBkb25lLCBpbmZvID0gZW52LnN0ZXAoYWN0aW9uKQojIAkJCWlmIGRvbmU6CiMgCQkJCWJyZWFrCgojIGluaXRpYWxpemVfcmFuZG9tX2dhbWUoKQoKCgpkZWYgaW5pdGlhbF9wb3B1bGF0aW9uKCk6Cgl0cmFpbmluZ19kYXRhID0gW10KCXNjb3JlcyA9IFtdCglhY2NlcHRlZF9zY29yZXMgPSBbXQoKCSMgSXRlcmF0aW9ucyB0aHJvdWdoIGdhbWVzCglmb3IgXyBpbiByYW5nZShpbml0aWFsX2dhbWVzKToKCQlzY29yZSA9IDAKCQlnYW1lX21lbW9yeSA9IFtdCgkJcHJldl9vYnNlcnZhdGlvbiA9IFtdCgoJCSMgR2FtZQoJCWZvciBfIGluIHJhbmdlKGdvYWxfc3RlcHMpOgoJCQlhY3Rpb24gPSByYW5kb20ucmFuZHJhbmdlKDAsMikKCQkJb2JzZXJ2YXRpb24sIHJld2FyZCwgZG9uZSwgaW5mbyA9IGVudi5zdGVwKGFjdGlvbikKCQkJaWYgbGVuKHByZXZfb2JzZXJ2YXRpb24pID4gMDoKCQkJCWdhbWVfbWVtb3J5LmFwcGVuZChbcHJldl9vYnNlcnZhdGlvbiwgYWN0aW9uXSkKCQkJcHJldl9vYnNlcnZhdGlvbiA9IG9ic2VydmF0aW9uCgkJCXNjb3JlICs9IHJld2FyZAoJCQlpZiBkb25lOgoJCQkJYnJlYWsKCgkJaWYgc2NvcmUgPj0gc2NvcmVfcmVxdWlyZW1lbnQ6CgkJCWFjY2VwdGVkX3Njb3Jlcy5hcHBlbmQoc2NvcmUpCgkJCWZvciBkYXRhIGluIGdhbWVfbWVtb3J5OgoJCQkJaWYgZGF0YVsxXSA9PSAxOgoJCQkJCW91dHB1dCA9IFswLDFdCgkJCQllbGlmIGRhdGFbMV0gPT0gMDoKCQkJCQlvdXRwdXQgPSBbMSwwXQoKCQkJCXRyYWluaW5nX2RhdGEuYXBwZW5kKFtkYXRhWzBdLCBvdXRwdXRdKQoKCQllbnYucmVzZXQoKQoJCXNjb3Jlcy5hcHBlbmQoc2NvcmUpCgoJdHJhaW5pbmdfZGF0YV9zYXZlID0gbnAuYXJyYXkodHJhaW5pbmdfZGF0YSkKCW5wLnNhdmUoInNhdmVkLm5weSIsIHRyYWluaW5nX2RhdGFfc2F2ZSkKCXByaW50KCJBdmcuIGFjY2VwdGVkIHNjb3JlIiwgbWVhbihhY2NlcHRlZF9zY29yZXMpKQoJcHJpbnQoIk1lZGlhbi5cIGFjY2VwdGVkIHNjb3JlIiwgbWVkaWFuKGFjY2VwdGVkX3Njb3JlcykpCglwcmludChDb3VudGVyKGFjY2VwdGVkX3Njb3JlcykpCgoJcmV0dXJuIHRyYWluaW5nX2RhdGEKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCiMgaW5pdGlhbF9wb3B1bGF0aW9uKCkKCjx8ZmltX2VuZHw+"]
["68e1c298a10c6c4b0d903e37b168787bce63e97a-1","68e1c298a10c6c4b0d903e37b168787bce63e97a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiIiIgpDb252b2x2ZSBjaGktc3F1YXJlZCBpbiBhIGRhdGEgZmlsZSB3aXRoIGEgZnJhY3Rpb25hbCB0aGVvcnkgZXJyb3IKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpweXRob24gY29udm9sdmVfd2l0aF90aGVvcnkucHkgPGZpbGU+IDxmcmFjLWVycm9yPiA8bWluPiA8bWF4PgoKcHJpbnRzIChwYXJhbWV0ZXIsIGNvbnZvbHZlZCBjaGktc3F1YXJlZCkgZnJvbSBhIGZpbGUgY29udGFpbmluZwoocGFyYW1ldGVyLCBjaGktc3F1YXJlZCkuCiIiIgoKaW1wb3J0IHN5cwppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBzY2lweS5pbnRlcnBvbGF0ZSBpbXBvcnQgaW50ZXJwMWQKZnJvbSBzY2lweS5zdGF0cyBpbXBvcnQgbm9ybSwgbG9nbm9ybQpmcm9tIHNjaXB5LmludGVncmF0ZSBpbXBvcnQgcXVhZAoKCmRlZiBjb252b2x2ZShmaWxlX25hbWUsIGZyYWNfZXJyb3I9MC4xLCBtaW5fPTAuLCBtYXhfPTEuLCBsb2dfbm9ybWFsPVRydWUpOgogICAgIiIiCiAgICBDb252b2x2ZSBjaGktc3F1YXJlZCBpbiBhIGRhdGEgZmlsZSB3aXRoIGEgZnJhY3Rpb25hbCB0aGVvcnkgZXJyb3IKCiAgICBBcmdzOgogICAgICAgIGZpbGVfbmFtZSAoc3RyKTogRGF0YSBmaWxlIHdpdGggY29sdW1ucyAocGFyYW1ldGVyLCBjaGktc3F1YXJlZCkuCiAgICAgICAgZnJhY19lcnJvciAoZmxvYXQsIG9wdGlvbmFsKTogRnJhY3Rpb25hbCB0aGVvcnkgZXJyb3Igb24gdGhlIHBhcmFtZXRlci4KICAgICAgICBtaW5fIChmbG9hdCwgb3B0aW9uYWwpOiBNaW5pbXVtIHZhbHVlIG9mIHBhcmFtZXRlci4KICAgICAgICBtYXhfIChmbG9hdCwgb3B0aW9uYWwpOiBNYXhpbXVtIHZhbHVlIG9mIHBhcmFtZXRlci4KICAgICAgICBsb2dfbm9ybWFsIChib29sLCBvcHRpb25hbCk6IFdoZXRoZXIgdG8gdXNlIGxvZy1ub3JtYWwgb3Igbm9ybWFsIGVycm9yLgoKICAgIFJldHVybnM6CiAgICAgICAgbGlzdCh0dXBsZXMpOiBMaXN0IG9mIChwYXJhbWV0ZXIsIGNvbnZvbHZlZCBjaGktc3F1YXJlZCkKICAgICIiIgogICAgIyBVbnBhY2sgZGF0YQogICAgcGFyYW0sIGNoaV9zcXVhcmVkID0gbnAubG9hZHR4dChmaWxlX25hbWUsIHVucGFjaz1UcnVlKQoKICAgICMgSW50ZXJwb2xhdGUgbGlrZWxpaG9vZCBmdW5jdGlvbgogICAgbGlrZSA9IGludGVycDFkKHBhcmFtLCBucC5leHAoLTAuNSAqIGNoaV9zcXVhcmVkKSwKICAgICAgICBraW5kPSdsaW5lYXInLCBib3VuZHNfZXJyb3I9RmFsc2UsIGZpbGxfdmFsdWU9ImV4dHJhcG9sYXRlIikKCiAgICAjIE1ha2UgcHJpb3IgZm9yIHRydWUgcHJlZGljdGlvbgo8fGZpbV9ob2xlfD4KICAgICAgICBlbHNlOgogICAgICAgICAgICBzaWdtYSA9IGZyYWNfZXJyb3IgKiBtdQogICAgICAgICAgICBkaXN0ID0gbm9ybShtdSwgc2lnbWEpCiAgICAgICAgcmV0dXJuIGRpc3QucGRmKHgpCgogICAgIyBNYWtlIGZ1bmN0aW9ucyBmb3IgY29udm9sdXRpb24KICAgIGludGVncmFuZCA9IGxhbWJkYSB4LCBtdTogbGlrZSh4KSAqIHByaW9yKHgsIG11KQogICAgY29udm9sdmVkID0gbGFtYmRhIG11OiAtMi4gKiBucC5sb2coCiAgICAgICAgcXVhZChpbnRlZ3JhbmQsIG1pbl8sIG1heF8sIGFyZ3M9KG11KSlbMF0KICAgICAgICAvIHF1YWQocHJpb3IsIG1pbl8sIG1heF8sIGFyZ3M9KG11KSlbMF0pCgogICAgIyBQZXJmb3JtIGNvbnZvbHV0aW9uCiAgICByZXR1cm4gWyhwLCBjb252b2x2ZWQocCkpIGZvciBwIGluIHBhcmFtXQoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKCiAgICB0cnk6CiAgICAgICAgRklMRV9OQU1FID0gc3lzLmFyZ3ZbMV0KICAgIGV4Y2VwdCBJbmRleEVycm9yOgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihfX2RvY19fKQoKICAgIEFSR1MgPSBtYXAoZmxvYXQsIHN5cy5hcmd2WzI6XSkKCiAgICBmb3IgcCwgYyBpbiBjb252b2x2ZShGSUxFX05BTUUsICpBUkdTKToKICAgICAgICBwcmludCBwLCBjCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgcHJpb3IoeCwgbXUpOgogICAgICAgIGlmIGxvZ19ub3JtYWw6CiAgICAgICAgICAgIHNpZ21hID0gbnAubG9nKDEuICsgZnJhY19lcnJvcikKICAgICAgICAgICAgZGlzdCA9IGxvZ25vcm0oc2lnbWEsIHNjYWxlPW11KQo8fGZpbV9lbmR8Pg=="]
["68e1c298a10c6c4b0d903e37b168787bce63e97a-2","68e1c298a10c6c4b0d903e37b168787bce63e97a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiIiIgpDb252b2x2ZSBjaGktc3F1YXJlZCBpbiBhIGRhdGEgZmlsZSB3aXRoIGEgZnJhY3Rpb25hbCB0aGVvcnkgZXJyb3IKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpweXRob24gY29udm9sdmVfd2l0aF90aGVvcnkucHkgPGZpbGU+IDxmcmFjLWVycm9yPiA8bWluPiA8bWF4PgoKcHJpbnRzIChwYXJhbWV0ZXIsIGNvbnZvbHZlZCBjaGktc3F1YXJlZCkgZnJvbSBhIGZpbGUgY29udGFpbmluZwoocGFyYW1ldGVyLCBjaGktc3F1YXJlZCkuCiIiIgoKaW1wb3J0IHN5cwppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBzY2lweS5pbnRlcnBvbGF0ZSBpbXBvcnQgaW50ZXJwMWQKZnJvbSBzY2lweS5zdGF0cyBpbXBvcnQgbm9ybSwgbG9nbm9ybQpmcm9tIHNjaXB5LmludGVncmF0ZSBpbXBvcnQgcXVhZAoKCmRlZiBjb252b2x2ZShmaWxlX25hbWUsIGZyYWNfZXJyb3I9MC4xLCBtaW5fPTAuLCBtYXhfPTEuLCBsb2dfbm9ybWFsPVRydWUpOgogICAgIiIiCiAgICBDb252b2x2ZSBjaGktc3F1YXJlZCBpbiBhIGRhdGEgZmlsZSB3aXRoIGEgZnJhY3Rpb25hbCB0aGVvcnkgZXJyb3IKCiAgICBBcmdzOgogICAgICAgIGZpbGVfbmFtZSAoc3RyKTogRGF0YSBmaWxlIHdpdGggY29sdW1ucyAocGFyYW1ldGVyLCBjaGktc3F1YXJlZCkuCiAgICAgICAgZnJhY19lcnJvciAoZmxvYXQsIG9wdGlvbmFsKTogRnJhY3Rpb25hbCB0aGVvcnkgZXJyb3Igb24gdGhlIHBhcmFtZXRlci4KICAgICAgICBtaW5fIChmbG9hdCwgb3B0aW9uYWwpOiBNaW5pbXVtIHZhbHVlIG9mIHBhcmFtZXRlci4KICAgICAgICBtYXhfIChmbG9hdCwgb3B0aW9uYWwpOiBNYXhpbXVtIHZhbHVlIG9mIHBhcmFtZXRlci4KICAgICAgICBsb2dfbm9ybWFsIChib29sLCBvcHRpb25hbCk6IFdoZXRoZXIgdG8gdXNlIGxvZy1ub3JtYWwgb3Igbm9ybWFsIGVycm9yLgoKICAgIFJldHVybnM6CiAgICAgICAgbGlzdCh0dXBsZXMpOiBMaXN0IG9mIChwYXJhbWV0ZXIsIGNvbnZvbHZlZCBjaGktc3F1YXJlZCkKICAgICIiIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAjIFVucGFjayBkYXRhCiAgICBwYXJhbSwgY2hpX3NxdWFyZWQgPSBucC5sb2FkdHh0KGZpbGVfbmFtZSwgdW5wYWNrPVRydWUpCgogICAgIyBJbnRlcnBvbGF0ZSBsaWtlbGlob29kIGZ1bmN0aW9uCjx8ZmltX2VuZHw+"]
["68e1c298a10c6c4b0d903e37b168787bce63e97a-3","68e1c298a10c6c4b0d903e37b168787bce63e97a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiIiIgpDb252b2x2ZSBjaGktc3F1YXJlZCBpbiBhIGRhdGEgZmlsZSB3aXRoIGEgZnJhY3Rpb25hbCB0aGVvcnkgZXJyb3IKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpweXRob24gY29udm9sdmVfd2l0aF90aGVvcnkucHkgPGZpbGU+IDxmcmFjLWVycm9yPiA8bWluPiA8bWF4PgoKcHJpbnRzIChwYXJhbWV0ZXIsIGNvbnZvbHZlZCBjaGktc3F1YXJlZCkgZnJvbSBhIGZpbGUgY29udGFpbmluZwoocGFyYW1ldGVyLCBjaGktc3F1YXJlZCkuCiIiIgoKaW1wb3J0IHN5cwppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBzY2lweS5pbnRlcnBvbGF0ZSBpbXBvcnQgaW50ZXJwMWQKZnJvbSBzY2lweS5zdGF0cyBpbXBvcnQgbm9ybSwgbG9nbm9ybQpmcm9tIHNjaXB5LmludGVncmF0ZSBpbXBvcnQgcXVhZAoKCmRlZiBjb252b2x2ZShmaWxlX25hbWUsIGZyYWNfZXJyb3I9MC4xLCBtaW5fPTAuLCBtYXhfPTEuLCBsb2dfbm9ybWFsPVRydWUpOgogICAgIiIiCjx8ZmltX2hvbGV8PgogICAgICAgIGZyYWNfZXJyb3IgKGZsb2F0LCBvcHRpb25hbCk6IEZyYWN0aW9uYWwgdGhlb3J5IGVycm9yIG9uIHRoZSBwYXJhbWV0ZXIuCiAgICAgICAgbWluXyAoZmxvYXQsIG9wdGlvbmFsKTogTWluaW11bSB2YWx1ZSBvZiBwYXJhbWV0ZXIuCiAgICAgICAgbWF4XyAoZmxvYXQsIG9wdGlvbmFsKTogTWF4aW11bSB2YWx1ZSBvZiBwYXJhbWV0ZXIuCiAgICAgICAgbG9nX25vcm1hbCAoYm9vbCwgb3B0aW9uYWwpOiBXaGV0aGVyIHRvIHVzZSBsb2ctbm9ybWFsIG9yIG5vcm1hbCBlcnJvci4KCiAgICBSZXR1cm5zOgogICAgICAgIGxpc3QodHVwbGVzKTogTGlzdCBvZiAocGFyYW1ldGVyLCBjb252b2x2ZWQgY2hpLXNxdWFyZWQpCiAgICAiIiIKICAgICMgVW5wYWNrIGRhdGEKICAgIHBhcmFtLCBjaGlfc3F1YXJlZCA9IG5wLmxvYWR0eHQoZmlsZV9uYW1lLCB1bnBhY2s9VHJ1ZSkKCiAgICAjIEludGVycG9sYXRlIGxpa2VsaWhvb2QgZnVuY3Rpb24KICAgIGxpa2UgPSBpbnRlcnAxZChwYXJhbSwgbnAuZXhwKC0wLjUgKiBjaGlfc3F1YXJlZCksCiAgICAgICAga2luZD0nbGluZWFyJywgYm91bmRzX2Vycm9yPUZhbHNlLCBmaWxsX3ZhbHVlPSJleHRyYXBvbGF0ZSIpCgogICAgIyBNYWtlIHByaW9yIGZvciB0cnVlIHByZWRpY3Rpb24KICAgIGRlZiBwcmlvcih4LCBtdSk6CiAgICAgICAgaWYgbG9nX25vcm1hbDoKICAgICAgICAgICAgc2lnbWEgPSBucC5sb2coMS4gKyBmcmFjX2Vycm9yKQogICAgICAgICAgICBkaXN0ID0gbG9nbm9ybShzaWdtYSwgc2NhbGU9bXUpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2lnbWEgPSBmcmFjX2Vycm9yICogbXUKICAgICAgICAgICAgZGlzdCA9IG5vcm0obXUsIHNpZ21hKQogICAgICAgIHJldHVybiBkaXN0LnBkZih4KQoKICAgICMgTWFrZSBmdW5jdGlvbnMgZm9yIGNvbnZvbHV0aW9uCiAgICBpbnRlZ3JhbmQgPSBsYW1iZGEgeCwgbXU6IGxpa2UoeCkgKiBwcmlvcih4LCBtdSkKICAgIGNvbnZvbHZlZCA9IGxhbWJkYSBtdTogLTIuICogbnAubG9nKAogICAgICAgIHF1YWQoaW50ZWdyYW5kLCBtaW5fLCBtYXhfLCBhcmdzPShtdSkpWzBdCiAgICAgICAgLyBxdWFkKHByaW9yLCBtaW5fLCBtYXhfLCBhcmdzPShtdSkpWzBdKQoKICAgICMgUGVyZm9ybSBjb252b2x1dGlvbgogICAgcmV0dXJuIFsocCwgY29udm9sdmVkKHApKSBmb3IgcCBpbiBwYXJhbV0KCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CgogICAgdHJ5OgogICAgICAgIEZJTEVfTkFNRSA9IHN5cy5hcmd2WzFdCiAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoX19kb2NfXykKCiAgICBBUkdTID0gbWFwKGZsb2F0LCBzeXMuYXJndlsyOl0pCgogICAgZm9yIHAsIGMgaW4gY29udm9sdmUoRklMRV9OQU1FLCAqQVJHUyk6CiAgICAgICAgcHJpbnQgcCwgYwo8fGZpbV9zdWZmaXh8PgogICAgQ29udm9sdmUgY2hpLXNxdWFyZWQgaW4gYSBkYXRhIGZpbGUgd2l0aCBhIGZyYWN0aW9uYWwgdGhlb3J5IGVycm9yCgogICAgQXJnczoKICAgICAgICBmaWxlX25hbWUgKHN0cik6IERhdGEgZmlsZSB3aXRoIGNvbHVtbnMgKHBhcmFtZXRlciwgY2hpLXNxdWFyZWQpLgo8fGZpbV9lbmR8Pg=="]
["68e1c298a10c6c4b0d903e37b168787bce63e97a-4","68e1c298a10c6c4b0d903e37b168787bce63e97a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiIiIgpDb252b2x2ZSBjaGktc3F1YXJlZCBpbiBhIGRhdGEgZmlsZSB3aXRoIGEgZnJhY3Rpb25hbCB0aGVvcnkgZXJyb3IKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpweXRob24gY29udm9sdmVfd2l0aF90aGVvcnkucHkgPGZpbGU+IDxmcmFjLWVycm9yPiA8bWluPiA8bWF4PgoKcHJpbnRzIChwYXJhbWV0ZXIsIGNvbnZvbHZlZCBjaGktc3F1YXJlZCkgZnJvbSBhIGZpbGUgY29udGFpbmluZwoocGFyYW1ldGVyLCBjaGktc3F1YXJlZCkuCiIiIgoKaW1wb3J0IHN5cwppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBzY2lweS5pbnRlcnBvbGF0ZSBpbXBvcnQgaW50ZXJwMWQKZnJvbSBzY2lweS5zdGF0cyBpbXBvcnQgbm9ybSwgbG9nbm9ybQpmcm9tIHNjaXB5LmludGVncmF0ZSBpbXBvcnQgcXVhZAoKCmRlZiBjb252b2x2ZShmaWxlX25hbWUsIGZyYWNfZXJyb3I9MC4xLCBtaW5fPTAuLCBtYXhfPTEuLCBsb2dfbm9ybWFsPVRydWUpOgogICAgIiIiCiAgICBDb252b2x2ZSBjaGktc3F1YXJlZCBpbiBhIGRhdGEgZmlsZSB3aXRoIGEgZnJhY3Rpb25hbCB0aGVvcnkgZXJyb3IKCiAgICBBcmdzOgogICAgICAgIGZpbGVfbmFtZSAoc3RyKTogRGF0YSBmaWxlIHdpdGggY29sdW1ucyAocGFyYW1ldGVyLCBjaGktc3F1YXJlZCkuCiAgICAgICAgZnJhY19lcnJvciAoZmxvYXQsIG9wdGlvbmFsKTogRnJhY3Rpb25hbCB0aGVvcnkgZXJyb3Igb24gdGhlIHBhcmFtZXRlci4KICAgICAgICBtaW5fIChmbG9hdCwgb3B0aW9uYWwpOiBNaW5pbXVtIHZhbHVlIG9mIHBhcmFtZXRlci4KICAgICAgICBtYXhfIChmbG9hdCwgb3B0aW9uYWwpOiBNYXhpbXVtIHZhbHVlIG9mIHBhcmFtZXRlci4KICAgICAgICBsb2dfbm9ybWFsIChib29sLCBvcHRpb25hbCk6IFdoZXRoZXIgdG8gdXNlIGxvZy1ub3JtYWwgb3Igbm9ybWFsIGVycm9yLgoKICAgIFJldHVybnM6CiAgICAgICAgbGlzdCh0dXBsZXMpOiBMaXN0IG9mIChwYXJhbWV0ZXIsIGNvbnZvbHZlZCBjaGktc3F1YXJlZCkKICAgICIiIgogICAgIyBVbnBhY2sgZGF0YQogICAgcGFyYW0sIGNoaV9zcXVhcmVkID0gbnAubG9hZHR4dChmaWxlX25hbWUsIHVucGFjaz1UcnVlKQoKICAgICMgSW50ZXJwb2xhdGUgbGlrZWxpaG9vZCBmdW5jdGlvbgogICAgbGlrZSA9IGludGVycDFkKHBhcmFtLCBucC5leHAoLTAuNSAqIGNoaV9zcXVhcmVkKSwKICAgICAgICBraW5kPSdsaW5lYXInLCBib3VuZHNfZXJyb3I9RmFsc2UsIGZpbGxfdmFsdWU9ImV4dHJhcG9sYXRlIikKCiAgICAjIE1ha2UgcHJpb3IgZm9yIHRydWUgcHJlZGljdGlvbgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgcHJpb3IoeCwgbXUpOgogICAgICAgIGlmIGxvZ19ub3JtYWw6CiAgICAgICAgICAgIHNpZ21hID0gbnAubG9nKDEuICsgZnJhY19lcnJvcikKICAgICAgICAgICAgZGlzdCA9IGxvZ25vcm0oc2lnbWEsIHNjYWxlPW11KQo8fGZpbV9lbmR8Pg=="]
["bdbcfddd6d1a21034f1b6180759d2f46ccae5e4a-1","bdbcfddd6d1a21034f1b6180759d2f46ccae5e4a","PHxmaW1fcHJlZml4fD4KIyBFdmVyeSByZWZlcmVuY2UgdG8gcGxhdGVjIGhhcyB0byBiZSBrZXB0IHNlcGFyYXRlZCBiZWNhdXNlIGl0IGlzIGEgQwojIGV4dGVuc2lvbiB3aGljaCBpcyBub3QgYXZhaWxhYmxlIHdoZW4gdXNpbmcgdGhpcyBwcm9qZWN0IGZyb20ganl0aG9uCgppbXBvcnQgcGxhdGVjCmltcG9ydCB0aW1lCmltcG9ydCBudW1weQoKZnJvbSB3b3JsZGVuZ2luZS5nZW5lcmF0aW9uIGltcG9ydCBhZGRfbm9pc2VfdG9fZWxldmF0aW9uLCBjZW50ZXJfbGFuZCwgXAogICAgZ2VuZXJhdGVfd29ybGQsIGluaXRpYWxpemVfb2NlYW5fYW5kX3RocmVzaG9sZHMsIHBsYWNlX29jZWFuc19hdF9tYXBfYm9yZGVycwpmcm9tIHdvcmxkZW5naW5lLm1vZGVsLndvcmxkIGltcG9ydCBXb3JsZAoKIyBpbXBvcnQgZ2xvYmFsIGxvZ2dlcgppbXBvcnQgd29ybGRlbmdpbmUubG9nZ2VyIGFzIGxvZ2dlcgoKZGVmIGdlbmVyYXRlX3BsYXRlc19zaW11bGF0aW9uKHNlZWQsIHdpZHRoLCBoZWlnaHQsIGF4aWFsX3RpbHQsIHNlYV9sZXZlbD0wLjY1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJvc2lvbl9wZXJpb2Q9NjAsIGZvbGRpbmdfcmF0aW89MC4wMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3Jfb3ZlcmxhcF9hYnM9MTAwMDAwMCwgYWdncl9vdmVybGFwX3JlbD0wLjMzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGVfY291bnQ9Miwgbl9wbGF0ZXM9MTApOgoKICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgcCA9IHBsYXRlYy5jcmVhdGUoc2VlZCwgd2lkdGgsIGhlaWdodCwgc2VhX2xldmVsLCBlcm9zaW9uX3BlcmlvZCwKICAgICAgICAgICAgICAgICAgICAgIGZvbGRpbmdfcmF0aW8sIGFnZ3Jfb3ZlcmxhcF9hYnMsIGFnZ3Jfb3ZlcmxhcF9yZWwsCiAgICAgICAgICAgICAgICAgICAgICBjeWNsZV9jb3VudCwgbl9wbGF0ZXMpCiAgICAjIE5vdGU6IFRvIHJlc2NhbGUgdGhlIHdvcmxkcyBoZWlnaHRtYXAgdG8gcm91Z2hseSBFYXJ0aHMgc2NhbGUsIG11bHRpcGx5IGJ5IDIwMDAuCgogICAgd2hpbGUgcGxhdGVjLmlzX2ZpbmlzaGVkKHApID09IDA6CiAgICAgICAgIyBUT0RPOiBhZGQgYSBpZiB2ZXJib3NlOiBtZXNzYWdlIGhlcmU/Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBwbGF0ZWMuc3RlcChwKQo8fGZpbV9lbmR8Pg=="]
["e7da8564182c69b52c16ecaa1fd9808db64e84b6-1","e7da8564182c69b52c16ecaa1fd9808db64e84b6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGlvCmltcG9ydCBsb2dnaW5nCmZyb20gc29ja2V0IGltcG9ydCBnZXRob3N0bmFtZQoKaW1wb3J0IGNvbmZpZ2FyZ3BhcnNlCmZyb20gY29uY3VycmVudF9sb2dfaGFuZGxlci5xdWV1ZSBpbXBvcnQgc2V0dXBfbG9nZ2luZ19xdWV1ZXMKZnJvbSBwcm9tZXRoZXVzX2NsaWVudCBpbXBvcnQgSW5mbywgc3RhcnRfaHR0cF9zZXJ2ZXIKZnJvbSBweW90cCBpbXBvcnQgcmFuZG9tX2Jhc2UzMgpmcm9tIHB5b3RwIGltcG9ydCBUT1RQCmZyb20gcXJjb2RlIGltcG9ydCBRUkNvZGUKZnJvbSAuX3ZlcnNpb24gaW1wb3J0IF9fdmVyc2lvbl9fCmZyb20gLnRvdHBfYXV0aGVudGljYXRvciBpbXBvcnQgVG90cEF1dGhlbnRpY2F0b3IKCgpkZWYgcXJfY29kZShzdCk6CiAgICBxciA9IFFSQ29kZSgpCiAgICBxci5hZGRfZGF0YShzdCkKICAgIGYgPSBpby5TdHJpbmdJTygpCiAgICBxci5wcmludF9hc2NpaShvdXQ9ZikKICAgIGYuc2VlaygwKQogICAgcHJpbnQoZi5yZWFkKCkpCgoKZGVmIG1haW4oKToKICAgIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogICAgcGFyc2VyID0gY29uZmlnYXJncGFyc2UuQXJnUGFyc2VyKAogICAgICAgIGRlZmF1bHRfY29uZmlnX2ZpbGVzPVsKICAgICAgICAgICAgJy9ldGMvb3BlbnZwbi1hdXRoLWR1by9jb25maWcuY29uZicsCiAgICAgICAgICAgICd+Ly5vcGVudnBuLWF1dGgtZHVvJywKICAgICAgICBdCiAgICApCgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLWMnLAogICAgICAgICctLWNvbmZpZycsCiAgICAgICAgaXNfY29uZmlnX2ZpbGU9VHJ1ZSwKICAgICAgICBoZWxwPSdwYXRoIG9mIGNvbmZpZyBmaWxlJywKICAgICAgICBlbnZfdmFyPSdBQURfQ09ORklHX1BBVEgnLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLVYnLAogICAgICAgICctLXZlcnNpb24nLAogICAgICAgIGFjdGlvbj0ndmVyc2lvbicsCiAgICAgICAgdmVyc2lvbj0nJShwcm9nKXMge3ZlcnNpb259Jy5mb3JtYXQodmVyc2lvbj1fX3ZlcnNpb25fXyksCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctdCcsCiAgICAgICAgJy0tdGhyZWFkcycsCiAgICAgICAgZGVmYXVsdD0xMCwKICAgICAgICBlbnZfdmFyPSdBQURfVEhSRUFEX0NPVU5UJywKICAgICAgICBoZWxwPSdBbW91bnQgb2YgdGhyZWFkcyB0byBoYW5kbGUgYXV0aGVudGljYXRpb24nLAogICAgICAgIHR5cGU9aW50LAogICAgKQoKICAgIHBhcnNlcl9kdW8gPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdjb21tYW5kcycpCiAgICBwYXJzZXJfZHVvLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1lbnJvbGwnLAogICAgICAgIGhlbHA9J3N3aXRjaCB3aGljaCwgaWYgc3BlY2lmaWVkLCBlbnJvbGxzIGEgdXNlciBmb3IgdG90cCcsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgKQogICAgcGFyc2VyX2R1by5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tcmVlbnJvbGwnLAogICAgICAgIGhlbHA9J3N3aXRjaCB3aGljaCwgaWYgc3BlY2lmaWVkLCByZWVucm9sbHMgYSB1c2VyIGZvciB0b3RwIGFuZCAnCiAgICAgICAgICAgICAnZ2VuZXJhdGVzIGEgbmV3IHRvdHAgc2VjcmV0IGtleScsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgKQogICAgcGFyc2VyX2R1by5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tZW1haWwnLAogICAgICAgIGhlbHA9J3RoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSBwZXJzb24gdG8gZW5yb2xsJywKICAgICkKICAgIHBhcnNlcl9kdW8uYWRkX2FyZ3VtZW50KAogICAgICAgICctLW1pZ3JhdGUnLAogICAgICAgIGhlbHA9J21pZ3JhdGVzIHRoZSBzY2hlbWEgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uJywKICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICApCgogICAgcGFyc2VyX2R1byA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ215c3FsJykKICAgIHBhcnNlcl9kdW8uYWRkX2FyZ3VtZW50KAogICAgICAgICctLW15c3FsLWhvc3QnLAogICAgICAgIGhlbHA9J215c3FsIGhvc3QnLAogICAgICAgIGVudl92YXI9J09WQURfTVlTUUxfSE9TVCcsCiAgICAgICAgZGVmYXVsdD0nMTI3LjAuMC4xJywKICAgICkKICAgIHBhcnNlcl9kdW8uYWRkX2FyZ3VtZW50KAogICAgICAgICctLW15c3FsLXVzZXJuYW1lJywKICAgICAgICBoZWxwPSd1c2VybmFtZSB1c2VkIHRvIGxvZ2luIHRvIHRoZSBteXNxbCBob3N0JywKICAgICAgICBlbnZfdmFyPSdPVkFEX01ZU1FMX1VTRVJOQU1FJywKICAgICkKICAgIHBhcnNlcl9kdW8uYWRkX2FyZ3VtZW50KAogICAgICAgICctLW15c3FsLXBhc3N3b3JkJywKICAgICAgICBoZWxwPSdwYXNzd29yZCB0byBsb2dpbiB0byBteXNxbCAnLAogICAgICAgIGVudl92YXI9J09WQURfTVlTUUxfUEFTU1dPUkQnLAogICAgICAgIGRlZmF1bHQ9JycsCiAgICApCiAgICBwYXJzZXJfZHVvLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1teXNxbC1kYXRhYmFzZScsCiAgICAgICAgZGVmYXVsdD0ndG90cCcsCiAgICAgICAgaGVscD0nZGF0YWJhc2UgaG91c2luZyB0aGUgdG90cCBzY2hlbWEnLAogICAgICAgIGVudl92YXI9J09WQURfTVlTUUxfREFUQUJBU0UnLAogICAgKQoKICAgIHBhcnNlcl9hdXRoZW50aWNhdGlvbiA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ09wZW5WUE4gVXNlciBBdXRoZW50aWNhdGlvbicpCiAgICBwYXJzZXJfYXV0aGVudGljYXRpb24uYWRkX2FyZ3VtZW50KAogICAgICAgICctLWF1dGgtdG9rZW4nLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgaGVscD0nVXNlIGF1dGggdG9rZW4gdG8gcmUtYXV0aGVudGljYXRlIGNsaWVudHMnLAogICAgICAgIGVudl92YXI9J0FBRF9BVVRIX1RPS0VOJywKICAgICkKICAgIHBhcnNlcl9hdXRoZW50aWNhdGlvbi5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tdG9rZW4tZXhwaXJhdGlvbicsCiAgICAgICAgdHlwZT1pbnQsCiAgICAgICAgZGVmYXVsdD0xNSwKICAgICAgICBoZWxwPSd0aGUgbnVtYmVyIG9mIGRheXMgYSB1c2VyIGNhbiBzaWduIGluIHdpdGhvdXQgdGhlIFRPVFAgYWZ0ZXIgJwogICAgICAgICAgICAgJ2Egc3VjY2Vzc2Z1bCBsb2dpbiB3aXRoIHRvdHAnLAogICAgICAgIGVudl92YXI9J1RPVFBfVE9LRU5fRVhQSVJBVElPTicsCiAgICApCiAgICBwYXJzZXJfYXV0aGVudGljYXRpb24uYWRkX2FyZ3VtZW50KAogICAgICAgICctLXJlbWVtYmVyLXVzZXInLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgaGVscD0nSWYgdXNlciBhdXRoZW50aWNhdGVkIG9uY2UsIHRoZSB1c2VycyByZWZyZXNoIHRva2VuIGlzICcKICAgICAgICAgICAgICd1c2VkIHRvIHJlYXV0aGVudGljYXRlIHNpbGVudGx5IGlmIHBvc3NpYmxlLicsCiAgICAgICAgZW52X3Zhcj0nQUFEX1JFTUVNQkVSX1VTRVInLAogICAgKQogICAgcGFyc2VyX2F1dGhlbnRpY2F0aW9uLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS12ZXJpZnktY29tbW9uLW5hbWUnLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgaGVscD0nQ2hlY2sgaWYgY29tbW9uX25hbWUgbWF0Y2hlcyBBenVyZSBBRCBVUE4nLAogICAgICAgIGVudl92YXI9J0FBRF9WRVJJRllfQ09NTU9OX05BTUUnLAogICAgKQoKICAgIGxkYXBfb3B0aW9ucyA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ2xkYXAgc2V0dGluZ3MnKQogICAgbGRhcF9vcHRpb25zLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1sZGFwLWVuYWJsZWQnLAogICAgICAgIGhlbHA9J2luZGljYXRlcyB3aGV0aGVyIHRvIGF1dGhlbnRpY2F0ZSB0aGUgdXNlcm5hbWUgLyBwYXNzd29yZCB3aXRoIGxkYXAuJywKPHxmaW1faG9sZXw+CiAgICApCiAgICBsZGFwX29wdGlvbnMuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWxkYXAtc2VydmVycycsCiAgICAgICAgaGVscD0ndGhlIGxkYXAgc2VydmVycyB0byB0cnkgZm9yIGF1dGhlbnRpY2F0aW9uJywKICAgICAgICBlbnZfdmFyPSdPVkFEX0xEQVBfU0VSVkVSUycsCiAgICApCiAgICBsZGFwX29wdGlvbnMuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWxkYXAtc2VhcmNoLWJhc2UnLAogICAgICAgIGhlbHA9J3RoZSBsZGFwIHNlYXJjaCBiYXNlIGUuZy4gIkRDPWNvbnRvc28sREM9Y29tIicsCiAgICAgICAgZW52X3Zhcj0nT1ZBRF9MREFQX1NFQVJDSF9CQVNFJywKICAgICkKICAgIGxkYXBfb3B0aW9ucy5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tcmVnaXN0ZXItbGRhcC1kb21haW4nLAogICAgICAgIGhlbHA9J2FsbG93cyByZWdpc3RyYXRpb24gb2YgYSBkb21haW4uIHNhdmVzIHNldHRpbmdzIGluIHRoZSBkYXRhYmFzZScsCiAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICkKICAgIGxkYXBfb3B0aW9ucy5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tbGRhcC1kb21haW4nLAogICAgICAgIGhlbHA9J3RoZSBsZGFwIGRvbWFpbiB5b3Ugd2FudCB0byByZWdpc3RlcicKICAgICkKCiAgICBwYXJzZXJfb3BlbnZwbiA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ09wZW5WUE4gTWFuYWdlbWVudCBJbnRlcmZhY2Ugc2V0dGluZ3MnKQogICAgcGFyc2VyX29wZW52cG4uYWRkX2FyZ3VtZW50KAogICAgICAgICctSCcsCiAgICAgICAgJy0tb3Zwbi1ob3N0JywKICAgICAgICBoZWxwPSdIb3N0IG9mIE9wZW5WUE4gbWFuYWdlbWVudCBpbnRlcmZhY2UuJywKICAgICAgICBlbnZfdmFyPSdBQURfT1ZQTl9IT1NUJywKICAgICkKICAgIHBhcnNlcl9vcGVudnBuLmFkZF9hcmd1bWVudCgKICAgICAgICAnLVAnLAogICAgICAgICctLW92cG4tcG9ydCcsCiAgICAgICAgaGVscD0nUG9ydCBvZiBPcGVuVlBOIG1hbmFnZW1lbnQgaW50ZXJmYWNlLicsCiAgICAgICAgZW52X3Zhcj0nQUFEX09WUE5fUE9SVCcsCiAgICAgICAgdHlwZT1pbnQsCiAgICApCiAgICBwYXJzZXJfb3BlbnZwbi5hZGRfYXJndW1lbnQoCiAgICAgICAgJy1zJywKICAgICAgICAnLS1vdnBuLXNvY2tldCcsCiAgICAgICAgaGVscD0nUGF0aCBvZiBzb2NrZXQgb3IgT3BlblZQTiBtYW5hZ2VtZW50IGludGVyZmFjZS4nLAogICAgICAgIGVudl92YXI9J0FBRF9PVlBOX1NPQ0tFVF9QQVRIJywKICAgICkKICAgIHBhcnNlcl9vcGVudnBuLmFkZF9hcmd1bWVudCgKICAgICAgICAnLXAnLAogICAgICAgICctLW92cG4tcGFzc3dvcmQnLAogICAgICAgIGhlbHA9J1Bhc3N3b3JkIGZvciBPcGVuVlBOIG1hbmFnZW1lbnQgaW50ZXJmYWNlLicsCiAgICAgICAgZW52X3Zhcj0nQUFEX09WUE5fUEFTU1dPUkQnLAogICAgKQoKICAgIHBhcnNlcl9wcm9tZXRoZXVzID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnUHJvbWV0aGV1cyBzZXR0aW5ncycpCiAgICBwYXJzZXJfcHJvbWV0aGV1cy5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tcHJvbWV0aGV1cycsCiAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICBlbnZfdmFyPSdBQURfUFJPTUVUSEVVU19FTkFCTEVEJywKICAgICAgICBoZWxwPSdFbmFibGUgcHJvbWV0aGV1cyBzdGF0aXN0aWNzJywKICAgICkKICAgIHBhcnNlcl9wcm9tZXRoZXVzLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1wcm9tZXRoZXVzLWxpc3Rlbi1hZGRyJywKICAgICAgICBlbnZfdmFyPSdBQURfUFJPTUVUSEVVU19MSVNURU5fSE9TVCcsCiAgICAgICAgZGVmYXVsdD0nJywKICAgICAgICBoZWxwPSdwcm9tZXRoZXVzIGxpc3RlbiBhZGRyJywKICAgICkKICAgIHBhcnNlcl9wcm9tZXRoZXVzLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1wcm9tZXRoZXVzLWxpc3Rlbi1wb3J0JywKICAgICAgICB0eXBlPWludCwKICAgICAgICBlbnZfdmFyPSdBQURfUFJPTUVUSEVVU19QT1JUJywKICAgICAgICBoZWxwPScgcHJvbWV0aGV1cyBzdGF0aXN0aWNzJywKICAgICAgICBkZWZhdWx0PTk3MjMsCiAgICApCiAgICBwYXJzZXJfcHJvbWV0aGV1cy5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tbG9nLWxldmVsJywKICAgICAgICBkZWZhdWx0PWxvZ2dpbmcuSU5GTywKICAgICAgICB0eXBlPWxhbWJkYSB4OiBnZXRhdHRyKGxvZ2dpbmcsIHgpLAogICAgICAgIGVudl92YXI9J0FBRF9MT0dfTEVWRUwnLAogICAgICAgIGhlbHA9J0NvbmZpZ3VyZSB0aGUgbG9nZ2luZyBsZXZlbC4nLAogICAgKQoKICAgIG9wdGlvbnMgPSBwYXJzZXIucGFyc2VfYXJncygpCgogICAgIyBjb252ZXJ0IGFsbCBjb25maWd1cmVkIGxvZ2dlcnMgdG8gdXNlIGEgYmFja2dyb3VuZCB0aHJlYWQKICAgIHNldHVwX2xvZ2dpbmdfcXVldWVzKCkKCiAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKAogICAgICAgIGxldmVsPW9wdGlvbnMubG9nX2xldmVsLCBmb3JtYXQ9JyUoYXNjdGltZSlzICUobGV2ZWxuYW1lKXMgJShtZXNzYWdlKXMnCiAgICApCgogICAgaWYgb3B0aW9ucy5wcm9tZXRoZXVzOgogICAgICAgIHN0YXJ0X2h0dHBfc2VydmVyKAogICAgICAgICAgICBvcHRpb25zLnByb21ldGhldXNfbGlzdGVuX3BvcnQsIG9wdGlvbnMucHJvbWV0aGV1c19saXN0ZW5fYWRkcgogICAgICAgICkKICAgICAgICBpID0gSW5mbygnb3BlbnZwbl9hdXRoX2F6dXJlX2FkX3ZlcnNpb24nLCAnaW5mbyBvZiBvcGVudnBuLWF1dGgtYXp1cmUtYWQnKQogICAgICAgIGkuaW5mbyh7J3ZlcnNpb24nOiBfX3ZlcnNpb25fX30pCgogICAgYXV0aGVudGljYXRvciA9IFRvdHBBdXRoZW50aWNhdG9yKAogICAgICAgIG15c3FsX2hvc3Q9b3B0aW9ucy5teXNxbF9ob3N0LAogICAgICAgIG15c3FsX3VzZXJuYW1lPW9wdGlvbnMubXlzcWxfdXNlcm5hbWUsCiAgICAgICAgbXlzcWxfcGFzc3dvcmQ9b3B0aW9ucy5teXNxbF9wYXNzd29yZCwKICAgICAgICBteXNxbF9kYXRhYmFzZT1vcHRpb25zLm15c3FsX2RhdGFiYXNlLAogICAgICAgIHRocmVhZHM9b3B0aW9ucy50aHJlYWRzLAogICAgICAgIGxkYXBfZW5hYmxlZD1vcHRpb25zLmxkYXBfZW5hYmxlZCwKICAgICAgICBsZGFwX3NlcnZlcnM9b3B0aW9ucy5sZGFwX3NlcnZlcnMsCiAgICAgICAgbGRhcF9zZWFyY2hfYmFzZT1vcHRpb25zLmxkYXBfc2VhcmNoX2Jhc2UsCiAgICAgICAgaG9zdD1vcHRpb25zLm92cG5faG9zdCwKICAgICAgICBwb3J0PW9wdGlvbnMub3Zwbl9wb3J0LAogICAgICAgIHVuaXhfc29ja2V0PW9wdGlvbnMub3Zwbl9zb2NrZXQsCiAgICAgICAgcGFzc3dvcmQ9b3B0aW9ucy5vdnBuX3Bhc3N3b3JkLAogICAgKQogICAgaWYgb3B0aW9ucy5taWdyYXRlOgogICAgICAgIGZyb20gcGtnX3Jlc291cmNlcyBpbXBvcnQgcmVzb3VyY2Vfc3RyaW5nCiAgICAgICAgc3FsID0gcmVzb3VyY2Vfc3RyaW5nKCdvcGVudnBuX2F1dGhfZHVvJywgJ3NjaGVtYS5zcWwnKQogICAgICAgIHNxbCA9IHNxbC5kZWNvZGUoJ3V0Zi04JykKICAgICAgICBhdXRoZW50aWNhdG9yLnF1ZXJ5KHNxbCkKICAgIGVsaWYgb3B0aW9ucy5lbnJvbGw6CiAgICAgICAgZW1haWwgPSBvcHRpb25zLmVtYWlsCiAgICAgICAgZXhpc3RpbmcgPSBhdXRoZW50aWNhdG9yLnF1ZXJ5KAogICAgICAgICAgICAnc2VsZWN0ICogZnJvbSB0b3RwIHdoZXJlIGVtYWlsPSVzJywKICAgICAgICAgICAgW2VtYWlsXSkKICAgICAgICBpZiBleGlzdGluZzoKICAgICAgICAgICAgc2VjcmV0X2tleSA9IGV4aXN0aW5nWzBdWydzZWNyZXRfa2V5J10KICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWNyZXRfa2V5ID0gcmFuZG9tX2Jhc2UzMigpCiAgICAgICAgICAgIGF1dGhlbnRpY2F0b3IucXVlcnkoCiAgICAgICAgICAgICAgICAnaW5zZXJ0IGludG8gdG90cCAoZW1haWwsIHNlY3JldF9rZXkpJwogICAgICAgICAgICAgICAgJyB2YWx1ZXMgKCVzLCAlcyknLCBbZW1haWwsIHNlY3JldF9rZXldKQogICAgICAgIHByaW50KHNlY3JldF9rZXkpCiAgICAgICAgdG90cCA9IFRPVFAoc2VjcmV0X2tleSkKICAgICAgICBob3N0bmFtZSA9IGdldGhvc3RuYW1lKCkKICAgICAgICB1cmkgPSB0b3RwLnByb3Zpc2lvbmluZ191cmkoCiAgICAgICAgICAgIG5hbWU9ZW1haWwsCiAgICAgICAgICAgIGlzc3Vlcl9uYW1lPWYnb3BlbnZwbiB7aG9zdG5hbWV9JywKICAgICAgICApCiAgICAgICAgcHJpbnQodXJpKQogICAgICAgIHFyX2NvZGUodXJpKQogICAgZWxpZiBvcHRpb25zLnJlZW5yb2xsOgogICAgICAgIGVtYWlsID0gb3B0aW9ucy5lbWFpbAogICAgICAgIGV4aXN0aW5nID0gYXV0aGVudGljYXRvci5xdWVyeSgKICAgICAgICAgICAgJ3NlbGVjdCAqIGZyb20gdG90cCB3aGVyZSBlbWFpbD0lcycsCiAgICAgICAgICAgIFtlbWFpbF0pCiAgICAgICAgaWYgZXhpc3Rpbmc6CiAgICAgICAgICAgIGxvZy5pbmZvKCdbZW5yb2xsXSAlcyBleGlzdHMnLCBlbWFpbCkKICAgICAgICAgICAgc2VjcmV0X2tleSA9IHJhbmRvbV9iYXNlMzIoKQogICAgICAgICAgICBhdXRoZW50aWNhdG9yLnF1ZXJ5KAogICAgICAgICAgICAgICAgJ3VwZGF0ZSB0b3RwIHNldCBzZWNyZXRfa2V5ID0gJXMnCiAgICAgICAgICAgICAgICAnIHdoZXJlIGVtYWlsPSVzJywgW3NlY3JldF9rZXksIGVtYWlsXSkKICAgICAgICAgICAgcHJpbnQoc2VjcmV0X2tleSkKICAgICAgICAgICAgdG90cCA9IFRPVFAoc2VjcmV0X2tleSkKICAgICAgICAgICAgaG9zdG5hbWUgPSBnZXRob3N0bmFtZSgpCiAgICAgICAgICAgIHVyaSA9IHRvdHAucHJvdmlzaW9uaW5nX3VyaSgKICAgICAgICAgICAgICAgIG5hbWU9ZW1haWwsCiAgICAgICAgICAgICAgICBpc3N1ZXJfbmFtZT1mJ29wZW52cG4ge2hvc3RuYW1lfScsCiAgICAgICAgICAgICkKICAgICAgICAgICAgcHJpbnQodXJpKQogICAgICAgICAgICBxcl9jb2RlKHVyaSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBsb2cuaW5mbygnW2Vucm9sbF0gJXMgZG9lcyBub3QgZXhpc3QnLCBlbWFpbCkKICAgIGVsaWYgb3B0aW9ucy5yZWdpc3Rlcl9sZGFwX2RvbWFpbjoKICAgICAgICBhdXRoZW50aWNhdG9yLnJlZ2lzdGVyX2xkYXBfZG9tYWluKG9wdGlvbnMubGRhcF9kb21haW4pCiAgICBlbHNlOgogICAgICAgIGF1dGhlbnRpY2F0b3IucnVuKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICBlbnZfdmFyPSdPVkFEX0xEQVBfRU5BQkxFRCcsCiAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKPHxmaW1fZW5kfD4="]
["e7da8564182c69b52c16ecaa1fd9808db64e84b6-2","e7da8564182c69b52c16ecaa1fd9808db64e84b6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGlvCmltcG9ydCBsb2dnaW5nCmZyb20gc29ja2V0IGltcG9ydCBnZXRob3N0bmFtZQoKaW1wb3J0IGNvbmZpZ2FyZ3BhcnNlCmZyb20gY29uY3VycmVudF9sb2dfaGFuZGxlci5xdWV1ZSBpbXBvcnQgc2V0dXBfbG9nZ2luZ19xdWV1ZXMKZnJvbSBwcm9tZXRoZXVzX2NsaWVudCBpbXBvcnQgSW5mbywgc3RhcnRfaHR0cF9zZXJ2ZXIKZnJvbSBweW90cCBpbXBvcnQgcmFuZG9tX2Jhc2UzMgpmcm9tIHB5b3RwIGltcG9ydCBUT1RQCmZyb20gcXJjb2RlIGltcG9ydCBRUkNvZGUKZnJvbSAuX3ZlcnNpb24gaW1wb3J0IF9fdmVyc2lvbl9fCmZyb20gLnRvdHBfYXV0aGVudGljYXRvciBpbXBvcnQgVG90cEF1dGhlbnRpY2F0b3IKCgpkZWYgcXJfY29kZShzdCk6CiAgICBxciA9IFFSQ29kZSgpCiAgICBxci5hZGRfZGF0YShzdCkKICAgIGYgPSBpby5TdHJpbmdJTygpCiAgICBxci5wcmludF9hc2NpaShvdXQ9ZikKICAgIGYuc2VlaygwKQogICAgcHJpbnQoZi5yZWFkKCkpCgoKZGVmIG1haW4oKToKICAgIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogICAgcGFyc2VyID0gY29uZmlnYXJncGFyc2UuQXJnUGFyc2VyKAogICAgICAgIGRlZmF1bHRfY29uZmlnX2ZpbGVzPVsKICAgICAgICAgICAgJy9ldGMvb3BlbnZwbi1hdXRoLWR1by9jb25maWcuY29uZicsCiAgICAgICAgICAgICd+Ly5vcGVudnBuLWF1dGgtZHVvJywKICAgICAgICBdCiAgICApCgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLWMnLAogICAgICAgICctLWNvbmZpZycsCiAgICAgICAgaXNfY29uZmlnX2ZpbGU9VHJ1ZSwKICAgICAgICBoZWxwPSdwYXRoIG9mIGNvbmZpZyBmaWxlJywKICAgICAgICBlbnZfdmFyPSdBQURfQ09ORklHX1BBVEgnLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLVYnLAogICAgICAgICctLXZlcnNpb24nLAogICAgICAgIGFjdGlvbj0ndmVyc2lvbicsCiAgICAgICAgdmVyc2lvbj0nJShwcm9nKXMge3ZlcnNpb259Jy5mb3JtYXQodmVyc2lvbj1fX3ZlcnNpb25fXyksCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctdCcsCiAgICAgICAgJy0tdGhyZWFkcycsCiAgICAgICAgZGVmYXVsdD0xMCwKICAgICAgICBlbnZfdmFyPSdBQURfVEhSRUFEX0NPVU5UJywKICAgICAgICBoZWxwPSdBbW91bnQgb2YgdGhyZWFkcyB0byBoYW5kbGUgYXV0aGVudGljYXRpb24nLAogICAgICAgIHR5cGU9aW50LAogICAgKQoKICAgIHBhcnNlcl9kdW8gPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdjb21tYW5kcycpCiAgICBwYXJzZXJfZHVvLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1lbnJvbGwnLAogICAgICAgIGhlbHA9J3N3aXRjaCB3aGljaCwgaWYgc3BlY2lmaWVkLCBlbnJvbGxzIGEgdXNlciBmb3IgdG90cCcsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgKQogICAgcGFyc2VyX2R1by5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tcmVlbnJvbGwnLAogICAgICAgIGhlbHA9J3N3aXRjaCB3aGljaCwgaWYgc3BlY2lmaWVkLCByZWVucm9sbHMgYSB1c2VyIGZvciB0b3RwIGFuZCAnCiAgICAgICAgICAgICAnZ2VuZXJhdGVzIGEgbmV3IHRvdHAgc2VjcmV0IGtleScsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgKQogICAgcGFyc2VyX2R1by5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tZW1haWwnLAogICAgICAgIGhlbHA9J3RoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSBwZXJzb24gdG8gZW5yb2xsJywKICAgICkKICAgIHBhcnNlcl9kdW8uYWRkX2FyZ3VtZW50KAogICAgICAgICctLW1pZ3JhdGUnLAogICAgICAgIGhlbHA9J21pZ3JhdGVzIHRoZSBzY2hlbWEgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uJywKICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICApCgogICAgcGFyc2VyX2R1byA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ215c3FsJykKICAgIHBhcnNlcl9kdW8uYWRkX2FyZ3VtZW50KAogICAgICAgICctLW15c3FsLWhvc3QnLAogICAgICAgIGhlbHA9J215c3FsIGhvc3QnLAogICAgICAgIGVudl92YXI9J09WQURfTVlTUUxfSE9TVCcsCiAgICAgICAgZGVmYXVsdD0nMTI3LjAuMC4xJywKICAgICkKICAgIHBhcnNlcl9kdW8uYWRkX2FyZ3VtZW50KAogICAgICAgICctLW15c3FsLXVzZXJuYW1lJywKICAgICAgICBoZWxwPSd1c2VybmFtZSB1c2VkIHRvIGxvZ2luIHRvIHRoZSBteXNxbCBob3N0JywKICAgICAgICBlbnZfdmFyPSdPVkFEX01ZU1FMX1VTRVJOQU1FJywKICAgICkKICAgIHBhcnNlcl9kdW8uYWRkX2FyZ3VtZW50KAogICAgICAgICctLW15c3FsLXBhc3N3b3JkJywKICAgICAgICBoZWxwPSdwYXNzd29yZCB0byBsb2dpbiB0byBteXNxbCAnLAogICAgICAgIGVudl92YXI9J09WQURfTVlTUUxfUEFTU1dPUkQnLAogICAgICAgIGRlZmF1bHQ9JycsCiAgICApCiAgICBwYXJzZXJfZHVvLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1teXNxbC1kYXRhYmFzZScsCiAgICAgICAgZGVmYXVsdD0ndG90cCcsCiAgICAgICAgaGVscD0nZGF0YWJhc2UgaG91c2luZyB0aGUgdG90cCBzY2hlbWEnLAogICAgICAgIGVudl92YXI9J09WQURfTVlTUUxfREFUQUJBU0UnLAogICAgKQoKICAgIHBhcnNlcl9hdXRoZW50aWNhdGlvbiA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ09wZW5WUE4gVXNlciBBdXRoZW50aWNhdGlvbicpCiAgICBwYXJzZXJfYXV0aGVudGljYXRpb24uYWRkX2FyZ3VtZW50KAogICAgICAgICctLWF1dGgtdG9rZW4nLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgaGVscD0nVXNlIGF1dGggdG9rZW4gdG8gcmUtYXV0aGVudGljYXRlIGNsaWVudHMnLAogICAgICAgIGVudl92YXI9J0FBRF9BVVRIX1RPS0VOJywKICAgICkKICAgIHBhcnNlcl9hdXRoZW50aWNhdGlvbi5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tdG9rZW4tZXhwaXJhdGlvbicsCiAgICAgICAgdHlwZT1pbnQsCiAgICAgICAgZGVmYXVsdD0xNSwKICAgICAgICBoZWxwPSd0aGUgbnVtYmVyIG9mIGRheXMgYSB1c2VyIGNhbiBzaWduIGluIHdpdGhvdXQgdGhlIFRPVFAgYWZ0ZXIgJwogICAgICAgICAgICAgJ2Egc3VjY2Vzc2Z1bCBsb2dpbiB3aXRoIHRvdHAnLAogICAgICAgIGVudl92YXI9J1RPVFBfVE9LRU5fRVhQSVJBVElPTicsCiAgICApCiAgICBwYXJzZXJfYXV0aGVudGljYXRpb24uYWRkX2FyZ3VtZW50KAogICAgICAgICctLXJlbWVtYmVyLXVzZXInLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgaGVscD0nSWYgdXNlciBhdXRoZW50aWNhdGVkIG9uY2UsIHRoZSB1c2VycyByZWZyZXNoIHRva2VuIGlzICcKICAgICAgICAgICAgICd1c2VkIHRvIHJlYXV0aGVudGljYXRlIHNpbGVudGx5IGlmIHBvc3NpYmxlLicsCiAgICAgICAgZW52X3Zhcj0nQUFEX1JFTUVNQkVSX1VTRVInLAogICAgKQogICAgcGFyc2VyX2F1dGhlbnRpY2F0aW9uLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS12ZXJpZnktY29tbW9uLW5hbWUnLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgaGVscD0nQ2hlY2sgaWYgY29tbW9uX25hbWUgbWF0Y2hlcyBBenVyZSBBRCBVUE4nLAogICAgICAgIGVudl92YXI9J0FBRF9WRVJJRllfQ09NTU9OX05BTUUnLAogICAgKQoKICAgIGxkYXBfb3B0aW9ucyA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ2xkYXAgc2V0dGluZ3MnKQogICAgbGRhcF9vcHRpb25zLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1sZGFwLWVuYWJsZWQnLAogICAgICAgIGhlbHA9J2luZGljYXRlcyB3aGV0aGVyIHRvIGF1dGhlbnRpY2F0ZSB0aGUgdXNlcm5hbWUgLyBwYXNzd29yZCB3aXRoIGxkYXAuJywKICAgICAgICBlbnZfdmFyPSdPVkFEX0xEQVBfRU5BQkxFRCcsCiAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICkKICAgIGxkYXBfb3B0aW9ucy5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tbGRhcC1zZXJ2ZXJzJywKICAgICAgICBoZWxwPSd0aGUgbGRhcCBzZXJ2ZXJzIHRvIHRyeSBmb3IgYXV0aGVudGljYXRpb24nLAogICAgICAgIGVudl92YXI9J09WQURfTERBUF9TRVJWRVJTJywKICAgICkKICAgIGxkYXBfb3B0aW9ucy5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tbGRhcC1zZWFyY2gtYmFzZScsCiAgICAgICAgaGVscD0ndGhlIGxkYXAgc2VhcmNoIGJhc2UgZS5nLiAiREM9Y29udG9zbyxEQz1jb20iJywKICAgICAgICBlbnZfdmFyPSdPVkFEX0xEQVBfU0VBUkNIX0JBU0UnLAogICAgKQogICAgbGRhcF9vcHRpb25zLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1yZWdpc3Rlci1sZGFwLWRvbWFpbicsCiAgICAgICAgaGVscD0nYWxsb3dzIHJlZ2lzdHJhdGlvbiBvZiBhIGRvbWFpbi4gc2F2ZXMgc2V0dGluZ3MgaW4gdGhlIGRhdGFiYXNlJywKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgKQogICAgbGRhcF9vcHRpb25zLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1sZGFwLWRvbWFpbicsCiAgICAgICAgaGVscD0ndGhlIGxkYXAgZG9tYWluIHlvdSB3YW50IHRvIHJlZ2lzdGVyJwogICAgKQoKICAgIHBhcnNlcl9vcGVudnBuID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnT3BlblZQTiBNYW5hZ2VtZW50IEludGVyZmFjZSBzZXR0aW5ncycpCiAgICBwYXJzZXJfb3BlbnZwbi5hZGRfYXJndW1lbnQoCiAgICAgICAgJy1IJywKICAgICAgICAnLS1vdnBuLWhvc3QnLAogICAgICAgIGhlbHA9J0hvc3Qgb2YgT3BlblZQTiBtYW5hZ2VtZW50IGludGVyZmFjZS4nLAogICAgICAgIGVudl92YXI9J0FBRF9PVlBOX0hPU1QnLAogICAgKQogICAgcGFyc2VyX29wZW52cG4uYWRkX2FyZ3VtZW50KAogICAgICAgICctUCcsCiAgICAgICAgJy0tb3Zwbi1wb3J0JywKICAgICAgICBoZWxwPSdQb3J0IG9mIE9wZW5WUE4gbWFuYWdlbWVudCBpbnRlcmZhY2UuJywKICAgICAgICBlbnZfdmFyPSdBQURfT1ZQTl9QT1JUJywKICAgICAgICB0eXBlPWludCwKICAgICkKICAgIHBhcnNlcl9vcGVudnBuLmFkZF9hcmd1bWVudCgKICAgICAgICAnLXMnLAogICAgICAgICctLW92cG4tc29ja2V0JywKICAgICAgICBoZWxwPSdQYXRoIG9mIHNvY2tldCBvciBPcGVuVlBOIG1hbmFnZW1lbnQgaW50ZXJmYWNlLicsCiAgICAgICAgZW52X3Zhcj0nQUFEX09WUE5fU09DS0VUX1BBVEgnLAogICAgKQogICAgcGFyc2VyX29wZW52cG4uYWRkX2FyZ3VtZW50KAogICAgICAgICctcCcsCiAgICAgICAgJy0tb3Zwbi1wYXNzd29yZCcsCiAgICAgICAgaGVscD0nUGFzc3dvcmQgZm9yIE9wZW5WUE4gbWFuYWdlbWVudCBpbnRlcmZhY2UuJywKICAgICAgICBlbnZfdmFyPSdBQURfT1ZQTl9QQVNTV09SRCcsCiAgICApCgogICAgcGFyc2VyX3Byb21ldGhldXMgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdQcm9tZXRoZXVzIHNldHRpbmdzJykKICAgIHBhcnNlcl9wcm9tZXRoZXVzLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1wcm9tZXRoZXVzJywKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgIGVudl92YXI9J0FBRF9QUk9NRVRIRVVTX0VOQUJMRUQnLAogICAgICAgIGhlbHA9J0VuYWJsZSBwcm9tZXRoZXVzIHN0YXRpc3RpY3MnLAogICAgKQogICAgcGFyc2VyX3Byb21ldGhldXMuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXByb21ldGhldXMtbGlzdGVuLWFkZHInLAogICAgICAgIGVudl92YXI9J0FBRF9QUk9NRVRIRVVTX0xJU1RFTl9IT1NUJywKICAgICAgICBkZWZhdWx0PScnLAogICAgICAgIGhlbHA9J3Byb21ldGhldXMgbGlzdGVuIGFkZHInLAogICAgKQogICAgcGFyc2VyX3Byb21ldGhldXMuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXByb21ldGhldXMtbGlzdGVuLXBvcnQnLAogICAgICAgIHR5cGU9aW50LAogICAgICAgIGVudl92YXI9J0FBRF9QUk9NRVRIRVVTX1BPUlQnLAogICAgICAgIGhlbHA9JyBwcm9tZXRoZXVzIHN0YXRpc3RpY3MnLAogICAgICAgIGRlZmF1bHQ9OTcyMywKICAgICkKICAgIHBhcnNlcl9wcm9tZXRoZXVzLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1sb2ctbGV2ZWwnLAogICAgICAgIGRlZmF1bHQ9bG9nZ2luZy5JTkZPLAogICAgICAgIHR5cGU9bGFtYmRhIHg6IGdldGF0dHIobG9nZ2luZywgeCksCiAgICAgICAgZW52X3Zhcj0nQUFEX0xPR19MRVZFTCcsCiAgICAgICAgaGVscD0nQ29uZmlndXJlIHRoZSBsb2dnaW5nIGxldmVsLicsCiAgICApCgogICAgb3B0aW9ucyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCiAgICAjIGNvbnZlcnQgYWxsIGNvbmZpZ3VyZWQgbG9nZ2VycyB0byB1c2UgYSBiYWNrZ3JvdW5kIHRocmVhZAogICAgc2V0dXBfbG9nZ2luZ19xdWV1ZXMoKQoKICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoCiAgICAgICAgbGV2ZWw9b3B0aW9ucy5sb2dfbGV2ZWwsIGZvcm1hdD0nJShhc2N0aW1lKXMgJShsZXZlbG5hbWUpcyAlKG1lc3NhZ2UpcycKICAgICkKCiAgICBpZiBvcHRpb25zLnByb21ldGhldXM6CiAgICAgICAgc3RhcnRfaHR0cF9zZXJ2ZXIoCiAgICAgICAgICAgIG9wdGlvbnMucHJvbWV0aGV1c19saXN0ZW5fcG9ydCwgb3B0aW9ucy5wcm9tZXRoZXVzX2xpc3Rlbl9hZGRyCiAgICAgICAgKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgaSA9IEluZm8oJ29wZW52cG5fYXV0aF9henVyZV9hZF92ZXJzaW9uJywgJ2luZm8gb2Ygb3BlbnZwbi1hdXRoLWF6dXJlLWFkJykKICAgICAgICBpLmluZm8oeyd2ZXJzaW9uJzogX192ZXJzaW9uX199KQoKPHxmaW1fZW5kfD4="]
["e7da8564182c69b52c16ecaa1fd9808db64e84b6-3","e7da8564182c69b52c16ecaa1fd9808db64e84b6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGlvCmltcG9ydCBsb2dnaW5nCmZyb20gc29ja2V0IGltcG9ydCBnZXRob3N0bmFtZQoKaW1wb3J0IGNvbmZpZ2FyZ3BhcnNlCmZyb20gY29uY3VycmVudF9sb2dfaGFuZGxlci5xdWV1ZSBpbXBvcnQgc2V0dXBfbG9nZ2luZ19xdWV1ZXMKZnJvbSBwcm9tZXRoZXVzX2NsaWVudCBpbXBvcnQgSW5mbywgc3RhcnRfaHR0cF9zZXJ2ZXIKZnJvbSBweW90cCBpbXBvcnQgcmFuZG9tX2Jhc2UzMgpmcm9tIHB5b3RwIGltcG9ydCBUT1RQCmZyb20gcXJjb2RlIGltcG9ydCBRUkNvZGUKZnJvbSAuX3ZlcnNpb24gaW1wb3J0IF9fdmVyc2lvbl9fCmZyb20gLnRvdHBfYXV0aGVudGljYXRvciBpbXBvcnQgVG90cEF1dGhlbnRpY2F0b3IKCgpkZWYgcXJfY29kZShzdCk6CiAgICBxciA9IFFSQ29kZSgpCiAgICBxci5hZGRfZGF0YShzdCkKICAgIGYgPSBpby5TdHJpbmdJTygpCiAgICBxci5wcmludF9hc2NpaShvdXQ9ZikKICAgIGYuc2VlaygwKQogICAgcHJpbnQoZi5yZWFkKCkpCgoKZGVmIG1haW4oKToKICAgIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogICAgcGFyc2VyID0gY29uZmlnYXJncGFyc2UuQXJnUGFyc2VyKAogICAgICAgIGRlZmF1bHRfY29uZmlnX2ZpbGVzPVsKICAgICAgICAgICAgJy9ldGMvb3BlbnZwbi1hdXRoLWR1by9jb25maWcuY29uZicsCiAgICAgICAgICAgICd+Ly5vcGVudnBuLWF1dGgtZHVvJywKICAgICAgICBdCiAgICApCgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLWMnLAogICAgICAgICctLWNvbmZpZycsCiAgICAgICAgaXNfY29uZmlnX2ZpbGU9VHJ1ZSwKICAgICAgICBoZWxwPSdwYXRoIG9mIGNvbmZpZyBmaWxlJywKICAgICAgICBlbnZfdmFyPSdBQURfQ09ORklHX1BBVEgnLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLVYnLAogICAgICAgICctLXZlcnNpb24nLAogICAgICAgIGFjdGlvbj0ndmVyc2lvbicsCiAgICAgICAgdmVyc2lvbj0nJShwcm9nKXMge3ZlcnNpb259Jy5mb3JtYXQodmVyc2lvbj1fX3ZlcnNpb25fXyksCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctdCcsCiAgICAgICAgJy0tdGhyZWFkcycsCiAgICAgICAgZGVmYXVsdD0xMCwKICAgICAgICBlbnZfdmFyPSdBQURfVEhSRUFEX0NPVU5UJywKICAgICAgICBoZWxwPSdBbW91bnQgb2YgdGhyZWFkcyB0byBoYW5kbGUgYXV0aGVudGljYXRpb24nLAogICAgICAgIHR5cGU9aW50LAogICAgKQoKICAgIHBhcnNlcl9kdW8gPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdjb21tYW5kcycpCiAgICBwYXJzZXJfZHVvLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1lbnJvbGwnLAogICAgICAgIGhlbHA9J3N3aXRjaCB3aGljaCwgaWYgc3BlY2lmaWVkLCBlbnJvbGxzIGEgdXNlciBmb3IgdG90cCcsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgKQogICAgcGFyc2VyX2R1by5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tcmVlbnJvbGwnLAogICAgICAgIGhlbHA9J3N3aXRjaCB3aGljaCwgaWYgc3BlY2lmaWVkLCByZWVucm9sbHMgYSB1c2VyIGZvciB0b3RwIGFuZCAnCiAgICAgICAgICAgICAnZ2VuZXJhdGVzIGEgbmV3IHRvdHAgc2VjcmV0IGtleScsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgKQogICAgcGFyc2VyX2R1by5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tZW1haWwnLAogICAgICAgIGhlbHA9J3RoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSBwZXJzb24gdG8gZW5yb2xsJywKICAgICkKICAgIHBhcnNlcl9kdW8uYWRkX2FyZ3VtZW50KAogICAgICAgICctLW1pZ3JhdGUnLAogICAgICAgIGhlbHA9J21pZ3JhdGVzIHRoZSBzY2hlbWEgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uJywKICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICApCgogICAgcGFyc2VyX2R1byA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ215c3FsJykKICAgIHBhcnNlcl9kdW8uYWRkX2FyZ3VtZW50KAogICAgICAgICctLW15c3FsLWhvc3QnLAogICAgICAgIGhlbHA9J215c3FsIGhvc3QnLAogICAgICAgIGVudl92YXI9J09WQURfTVlTUUxfSE9TVCcsCiAgICAgICAgZGVmYXVsdD0nMTI3LjAuMC4xJywKICAgICkKICAgIHBhcnNlcl9kdW8uYWRkX2FyZ3VtZW50KAogICAgICAgICctLW15c3FsLXVzZXJuYW1lJywKICAgICAgICBoZWxwPSd1c2VybmFtZSB1c2VkIHRvIGxvZ2luIHRvIHRoZSBteXNxbCBob3N0JywKICAgICAgICBlbnZfdmFyPSdPVkFEX01ZU1FMX1VTRVJOQU1FJywKICAgICkKICAgIHBhcnNlcl9kdW8uYWRkX2FyZ3VtZW50KAogICAgICAgICctLW15c3FsLXBhc3N3b3JkJywKICAgICAgICBoZWxwPSdwYXNzd29yZCB0byBsb2dpbiB0byBteXNxbCAnLAogICAgICAgIGVudl92YXI9J09WQURfTVlTUUxfUEFTU1dPUkQnLAogICAgICAgIGRlZmF1bHQ9JycsCiAgICApCiAgICBwYXJzZXJfZHVvLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1teXNxbC1kYXRhYmFzZScsCiAgICAgICAgZGVmYXVsdD0ndG90cCcsCiAgICAgICAgaGVscD0nZGF0YWJhc2UgaG91c2luZyB0aGUgdG90cCBzY2hlbWEnLAogICAgICAgIGVudl92YXI9J09WQURfTVlTUUxfREFUQUJBU0UnLAogICAgKQoKICAgIHBhcnNlcl9hdXRoZW50aWNhdGlvbiA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ09wZW5WUE4gVXNlciBBdXRoZW50aWNhdGlvbicpCiAgICBwYXJzZXJfYXV0aGVudGljYXRpb24uYWRkX2FyZ3VtZW50KAogICAgICAgICctLWF1dGgtdG9rZW4nLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICBoZWxwPSdVc2UgYXV0aCB0b2tlbiB0byByZS1hdXRoZW50aWNhdGUgY2xpZW50cycsCiAgICAgICAgZW52X3Zhcj0nQUFEX0FVVEhfVE9LRU4nLAo8fGZpbV9lbmR8Pg=="]
["e7da8564182c69b52c16ecaa1fd9808db64e84b6-4","e7da8564182c69b52c16ecaa1fd9808db64e84b6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGlvCmltcG9ydCBsb2dnaW5nCmZyb20gc29ja2V0IGltcG9ydCBnZXRob3N0bmFtZQoKaW1wb3J0IGNvbmZpZ2FyZ3BhcnNlCmZyb20gY29uY3VycmVudF9sb2dfaGFuZGxlci5xdWV1ZSBpbXBvcnQgc2V0dXBfbG9nZ2luZ19xdWV1ZXMKZnJvbSBwcm9tZXRoZXVzX2NsaWVudCBpbXBvcnQgSW5mbywgc3RhcnRfaHR0cF9zZXJ2ZXIKZnJvbSBweW90cCBpbXBvcnQgcmFuZG9tX2Jhc2UzMgpmcm9tIHB5b3RwIGltcG9ydCBUT1RQCmZyb20gcXJjb2RlIGltcG9ydCBRUkNvZGUKZnJvbSAuX3ZlcnNpb24gaW1wb3J0IF9fdmVyc2lvbl9fCmZyb20gLnRvdHBfYXV0aGVudGljYXRvciBpbXBvcnQgVG90cEF1dGhlbnRpY2F0b3IKCgpkZWYgcXJfY29kZShzdCk6CiAgICBxciA9IFFSQ29kZSgpCiAgICBxci5hZGRfZGF0YShzdCkKICAgIGYgPSBpby5TdHJpbmdJTygpCiAgICBxci5wcmludF9hc2NpaShvdXQ9ZikKICAgIGYuc2VlaygwKQogICAgcHJpbnQoZi5yZWFkKCkpCgoKZGVmIG1haW4oKToKICAgIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogICAgcGFyc2VyID0gY29uZmlnYXJncGFyc2UuQXJnUGFyc2VyKAogICAgICAgIGRlZmF1bHRfY29uZmlnX2ZpbGVzPVsKICAgICAgICAgICAgJy9ldGMvb3BlbnZwbi1hdXRoLWR1by9jb25maWcuY29uZicsCiAgICAgICAgICAgICd+Ly5vcGVudnBuLWF1dGgtZHVvJywKICAgICAgICBdCiAgICApCgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLWMnLAogICAgICAgICctLWNvbmZpZycsCiAgICAgICAgaXNfY29uZmlnX2ZpbGU9VHJ1ZSwKICAgICAgICBoZWxwPSdwYXRoIG9mIGNvbmZpZyBmaWxlJywKICAgICAgICBlbnZfdmFyPSdBQURfQ09ORklHX1BBVEgnLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLVYnLAogICAgICAgICctLXZlcnNpb24nLAogICAgICAgIGFjdGlvbj0ndmVyc2lvbicsCiAgICAgICAgdmVyc2lvbj0nJShwcm9nKXMge3ZlcnNpb259Jy5mb3JtYXQodmVyc2lvbj1fX3ZlcnNpb25fXyksCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctdCcsCiAgICAgICAgJy0tdGhyZWFkcycsCiAgICAgICAgZGVmYXVsdD0xMCwKICAgICAgICBlbnZfdmFyPSdBQURfVEhSRUFEX0NPVU5UJywKICAgICAgICBoZWxwPSdBbW91bnQgb2YgdGhyZWFkcyB0byBoYW5kbGUgYXV0aGVudGljYXRpb24nLAogICAgICAgIHR5cGU9aW50LAogICAgKQoKICAgIHBhcnNlcl9kdW8gPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdjb21tYW5kcycpCiAgICBwYXJzZXJfZHVvLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1lbnJvbGwnLAogICAgICAgIGhlbHA9J3N3aXRjaCB3aGljaCwgaWYgc3BlY2lmaWVkLCBlbnJvbGxzIGEgdXNlciBmb3IgdG90cCcsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgKQogICAgcGFyc2VyX2R1by5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tcmVlbnJvbGwnLAogICAgICAgIGhlbHA9J3N3aXRjaCB3aGljaCwgaWYgc3BlY2lmaWVkLCByZWVucm9sbHMgYSB1c2VyIGZvciB0b3RwIGFuZCAnCiAgICAgICAgICAgICAnZ2VuZXJhdGVzIGEgbmV3IHRvdHAgc2VjcmV0IGtleScsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgKQogICAgcGFyc2VyX2R1by5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tZW1haWwnLAogICAgICAgIGhlbHA9J3RoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSBwZXJzb24gdG8gZW5yb2xsJywKICAgICkKICAgIHBhcnNlcl9kdW8uYWRkX2FyZ3VtZW50KAogICAgICAgICctLW1pZ3JhdGUnLAogICAgICAgIGhlbHA9J21pZ3JhdGVzIHRoZSBzY2hlbWEgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uJywKICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICApCgogICAgcGFyc2VyX2R1byA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ215c3FsJykKICAgIHBhcnNlcl9kdW8uYWRkX2FyZ3VtZW50KAogICAgICAgICctLW15c3FsLWhvc3QnLAogICAgICAgIGhlbHA9J215c3FsIGhvc3QnLAogICAgICAgIGVudl92YXI9J09WQURfTVlTUUxfSE9TVCcsCiAgICAgICAgZGVmYXVsdD0nMTI3LjAuMC4xJywKICAgICkKICAgIHBhcnNlcl9kdW8uYWRkX2FyZ3VtZW50KAogICAgICAgICctLW15c3FsLXVzZXJuYW1lJywKICAgICAgICBoZWxwPSd1c2VybmFtZSB1c2VkIHRvIGxvZ2luIHRvIHRoZSBteXNxbCBob3N0JywKICAgICAgICBlbnZfdmFyPSdPVkFEX01ZU1FMX1VTRVJOQU1FJywKICAgICkKICAgIHBhcnNlcl9kdW8uYWRkX2FyZ3VtZW50KAogICAgICAgICctLW15c3FsLXBhc3N3b3JkJywKICAgICAgICBoZWxwPSdwYXNzd29yZCB0byBsb2dpbiB0byBteXNxbCAnLAogICAgICAgIGVudl92YXI9J09WQURfTVlTUUxfUEFTU1dPUkQnLAogICAgICAgIGRlZmF1bHQ9JycsCiAgICApCiAgICBwYXJzZXJfZHVvLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1teXNxbC1kYXRhYmFzZScsCiAgICAgICAgZGVmYXVsdD0ndG90cCcsCiAgICAgICAgaGVscD0nZGF0YWJhc2UgaG91c2luZyB0aGUgdG90cCBzY2hlbWEnLAogICAgICAgIGVudl92YXI9J09WQURfTVlTUUxfREFUQUJBU0UnLAogICAgKQoKICAgIHBhcnNlcl9hdXRoZW50aWNhdGlvbiA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ09wZW5WUE4gVXNlciBBdXRoZW50aWNhdGlvbicpCiAgICBwYXJzZXJfYXV0aGVudGljYXRpb24uYWRkX2FyZ3VtZW50KAogICAgICAgICctLWF1dGgtdG9rZW4nLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgaGVscD0nVXNlIGF1dGggdG9rZW4gdG8gcmUtYXV0aGVudGljYXRlIGNsaWVudHMnLAogICAgICAgIGVudl92YXI9J0FBRF9BVVRIX1RPS0VOJywKICAgICkKICAgIHBhcnNlcl9hdXRoZW50aWNhdGlvbi5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tdG9rZW4tZXhwaXJhdGlvbicsCiAgICAgICAgdHlwZT1pbnQsCiAgICAgICAgZGVmYXVsdD0xNSwKICAgICAgICBoZWxwPSd0aGUgbnVtYmVyIG9mIGRheXMgYSB1c2VyIGNhbiBzaWduIGluIHdpdGhvdXQgdGhlIFRPVFAgYWZ0ZXIgJwogICAgICAgICAgICAgJ2Egc3VjY2Vzc2Z1bCBsb2dpbiB3aXRoIHRvdHAnLAogICAgICAgIGVudl92YXI9J1RPVFBfVE9LRU5fRVhQSVJBVElPTicsCiAgICApCiAgICBwYXJzZXJfYXV0aGVudGljYXRpb24uYWRkX2FyZ3VtZW50KAogICAgICAgICctLXJlbWVtYmVyLXVzZXInLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgaGVscD0nSWYgdXNlciBhdXRoZW50aWNhdGVkIG9uY2UsIHRoZSB1c2VycyByZWZyZXNoIHRva2VuIGlzICcKICAgICAgICAgICAgICd1c2VkIHRvIHJlYXV0aGVudGljYXRlIHNpbGVudGx5IGlmIHBvc3NpYmxlLicsCiAgICAgICAgZW52X3Zhcj0nQUFEX1JFTUVNQkVSX1VTRVInLAogICAgKQogICAgcGFyc2VyX2F1dGhlbnRpY2F0aW9uLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS12ZXJpZnktY29tbW9uLW5hbWUnLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgaGVscD0nQ2hlY2sgaWYgY29tbW9uX25hbWUgbWF0Y2hlcyBBenVyZSBBRCBVUE4nLAogICAgICAgIGVudl92YXI9J0FBRF9WRVJJRllfQ09NTU9OX05BTUUnLAogICAgKQoKICAgIGxkYXBfb3B0aW9ucyA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ2xkYXAgc2V0dGluZ3MnKQogICAgbGRhcF9vcHRpb25zLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1sZGFwLWVuYWJsZWQnLAogICAgICAgIGhlbHA9J2luZGljYXRlcyB3aGV0aGVyIHRvIGF1dGhlbnRpY2F0ZSB0aGUgdXNlcm5hbWUgLyBwYXNzd29yZCB3aXRoIGxkYXAuJywKICAgICAgICBlbnZfdmFyPSdPVkFEX0xEQVBfRU5BQkxFRCcsCiAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICkKICAgIGxkYXBfb3B0aW9ucy5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tbGRhcC1zZXJ2ZXJzJywKICAgICAgICBoZWxwPSd0aGUgbGRhcCBzZXJ2ZXJzIHRvIHRyeSBmb3IgYXV0aGVudGljYXRpb24nLAogICAgICAgIGVudl92YXI9J09WQURfTERBUF9TRVJWRVJTJywKICAgICkKICAgIGxkYXBfb3B0aW9ucy5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tbGRhcC1zZWFyY2gtYmFzZScsCiAgICAgICAgaGVscD0ndGhlIGxkYXAgc2VhcmNoIGJhc2UgZS5nLiAiREM9Y29udG9zbyxEQz1jb20iJywKICAgICAgICBlbnZfdmFyPSdPVkFEX0xEQVBfU0VBUkNIX0JBU0UnLAogICAgKQogICAgbGRhcF9vcHRpb25zLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1yZWdpc3Rlci1sZGFwLWRvbWFpbicsCiAgICAgICAgaGVscD0nYWxsb3dzIHJlZ2lzdHJhdGlvbiBvZiBhIGRvbWFpbi4gc2F2ZXMgc2V0dGluZ3MgaW4gdGhlIGRhdGFiYXNlJywKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgKQogICAgbGRhcF9vcHRpb25zLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1sZGFwLWRvbWFpbicsCiAgICAgICAgaGVscD0ndGhlIGxkYXAgZG9tYWluIHlvdSB3YW50IHRvIHJlZ2lzdGVyJwogICAgKQoKICAgIHBhcnNlcl9vcGVudnBuID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnT3BlblZQTiBNYW5hZ2VtZW50IEludGVyZmFjZSBzZXR0aW5ncycpCiAgICBwYXJzZXJfb3BlbnZwbi5hZGRfYXJndW1lbnQoCiAgICAgICAgJy1IJywKICAgICAgICAnLS1vdnBuLWhvc3QnLAogICAgICAgIGhlbHA9J0hvc3Qgb2YgT3BlblZQTiBtYW5hZ2VtZW50IGludGVyZmFjZS4nLAogICAgICAgIGVudl92YXI9J0FBRF9PVlBOX0hPU1QnLAogICAgKQogICAgcGFyc2VyX29wZW52cG4uYWRkX2FyZ3VtZW50KAogICAgICAgICctUCcsCiAgICAgICAgJy0tb3Zwbi1wb3J0JywKICAgICAgICBoZWxwPSdQb3J0IG9mIE9wZW5WUE4gbWFuYWdlbWVudCBpbnRlcmZhY2UuJywKICAgICAgICBlbnZfdmFyPSdBQURfT1ZQTl9QT1JUJywKICAgICAgICB0eXBlPWludCwKICAgICkKICAgIHBhcnNlcl9vcGVudnBuLmFkZF9hcmd1bWVudCgKICAgICAgICAnLXMnLAogICAgICAgICctLW92cG4tc29ja2V0JywKICAgICAgICBoZWxwPSdQYXRoIG9mIHNvY2tldCBvciBPcGVuVlBOIG1hbmFnZW1lbnQgaW50ZXJmYWNlLicsCiAgICAgICAgZW52X3Zhcj0nQUFEX09WUE5fU09DS0VUX1BBVEgnLAogICAgKQogICAgcGFyc2VyX29wZW52cG4uYWRkX2FyZ3VtZW50KAogICAgICAgICctcCcsCiAgICAgICAgJy0tb3Zwbi1wYXNzd29yZCcsCiAgICAgICAgaGVscD0nUGFzc3dvcmQgZm9yIE9wZW5WUE4gbWFuYWdlbWVudCBpbnRlcmZhY2UuJywKICAgICAgICBlbnZfdmFyPSdBQURfT1ZQTl9QQVNTV09SRCcsCiAgICApCgogICAgcGFyc2VyX3Byb21ldGhldXMgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdQcm9tZXRoZXVzIHNldHRpbmdzJykKICAgIHBhcnNlcl9wcm9tZXRoZXVzLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1wcm9tZXRoZXVzJywKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgIGVudl92YXI9J0FBRF9QUk9NRVRIRVVTX0VOQUJMRUQnLAogICAgICAgIGhlbHA9J0VuYWJsZSBwcm9tZXRoZXVzIHN0YXRpc3RpY3MnLAogICAgKQogICAgcGFyc2VyX3Byb21ldGhldXMuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXByb21ldGhldXMtbGlzdGVuLWFkZHInLAogICAgICAgIGVudl92YXI9J0FBRF9QUk9NRVRIRVVTX0xJU1RFTl9IT1NUJywKICAgICAgICBkZWZhdWx0PScnLAogICAgICAgIGhlbHA9J3Byb21ldGhldXMgbGlzdGVuIGFkZHInLAogICAgKQogICAgcGFyc2VyX3Byb21ldGhldXMuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXByb21ldGhldXMtbGlzdGVuLXBvcnQnLAogICAgICAgIHR5cGU9aW50LAogICAgICAgIGVudl92YXI9J0FBRF9QUk9NRVRIRVVTX1BPUlQnLAogICAgICAgIGhlbHA9JyBwcm9tZXRoZXVzIHN0YXRpc3RpY3MnLAogICAgICAgIGRlZmF1bHQ9OTcyMywKICAgICkKICAgIHBhcnNlcl9wcm9tZXRoZXVzLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1sb2ctbGV2ZWwnLAogICAgICAgIGRlZmF1bHQ9bG9nZ2luZy5JTkZPLAogICAgICAgIHR5cGU9bGFtYmRhIHg6IGdldGF0dHIobG9nZ2luZywgeCksCiAgICAgICAgZW52X3Zhcj0nQUFEX0xPR19MRVZFTCcsCiAgICAgICAgaGVscD0nQ29uZmlndXJlIHRoZSBsb2dnaW5nIGxldmVsLicsCiAgICApCgogICAgb3B0aW9ucyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCiAgICAjIGNvbnZlcnQgYWxsIGNvbmZpZ3VyZWQgbG9nZ2VycyB0byB1c2UgYSBiYWNrZ3JvdW5kIHRocmVhZAogICAgc2V0dXBfbG9nZ2luZ19xdWV1ZXMoKQoKICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoCiAgICAgICAgbGV2ZWw9b3B0aW9ucy5sb2dfbGV2ZWwsIGZvcm1hdD0nJShhc2N0aW1lKXMgJShsZXZlbG5hbWUpcyAlKG1lc3NhZ2UpcycKICAgICkKCiAgICBpZiBvcHRpb25zLnByb21ldGhldXM6CiAgICAgICAgc3RhcnRfaHR0cF9zZXJ2ZXIoCiAgICAgICAgICAgIG9wdGlvbnMucHJvbWV0aGV1c19saXN0ZW5fcG9ydCwgb3B0aW9ucy5wcm9tZXRoZXVzX2xpc3Rlbl9hZGRyCiAgICAgICAgKQogICAgICAgIGkgPSBJbmZvKCdvcGVudnBuX2F1dGhfYXp1cmVfYWRfdmVyc2lvbicsICdpbmZvIG9mIG9wZW52cG4tYXV0aC1henVyZS1hZCcpCiAgICAgICAgaS5pbmZvKHsndmVyc2lvbic6IF9fdmVyc2lvbl9ffSkKCiAgICBhdXRoZW50aWNhdG9yID0gVG90cEF1dGhlbnRpY2F0b3IoCiAgICAgICAgbXlzcWxfaG9zdD1vcHRpb25zLm15c3FsX2hvc3QsCiAgICAgICAgbXlzcWxfdXNlcm5hbWU9b3B0aW9ucy5teXNxbF91c2VybmFtZSwKICAgICAgICBteXNxbF9wYXNzd29yZD1vcHRpb25zLm15c3FsX3Bhc3N3b3JkLAogICAgICAgIG15c3FsX2RhdGFiYXNlPW9wdGlvbnMubXlzcWxfZGF0YWJhc2UsCiAgICAgICAgdGhyZWFkcz1vcHRpb25zLnRocmVhZHMsCiAgICAgICAgbGRhcF9lbmFibGVkPW9wdGlvbnMubGRhcF9lbmFibGVkLAogICAgICAgIGxkYXBfc2VydmVycz1vcHRpb25zLmxkYXBfc2VydmVycywKICAgICAgICBsZGFwX3NlYXJjaF9iYXNlPW9wdGlvbnMubGRhcF9zZWFyY2hfYmFzZSwKICAgICAgICBob3N0PW9wdGlvbnMub3Zwbl9ob3N0LAogICAgICAgIHBvcnQ9b3B0aW9ucy5vdnBuX3BvcnQsCiAgICAgICAgdW5peF9zb2NrZXQ9b3B0aW9ucy5vdnBuX3NvY2tldCwKICAgICAgICBwYXNzd29yZD1vcHRpb25zLm92cG5fcGFzc3dvcmQsCiAgICApCiAgICBpZiBvcHRpb25zLm1pZ3JhdGU6CiAgICAgICAgZnJvbSBwa2dfcmVzb3VyY2VzIGltcG9ydCByZXNvdXJjZV9zdHJpbmcKICAgICAgICBzcWwgPSByZXNvdXJjZV9zdHJpbmcoJ29wZW52cG5fYXV0aF9kdW8nLCAnc2NoZW1hLnNxbCcpCiAgICAgICAgc3FsID0gc3FsLmRlY29kZSgndXRmLTgnKQogICAgICAgIGF1dGhlbnRpY2F0b3IucXVlcnkoc3FsKQogICAgZWxpZiBvcHRpb25zLmVucm9sbDoKICAgICAgICBlbWFpbCA9IG9wdGlvbnMuZW1haWwKICAgICAgICBleGlzdGluZyA9IGF1dGhlbnRpY2F0b3IucXVlcnkoCiAgICAgICAgICAgICdzZWxlY3QgKiBmcm9tIHRvdHAgd2hlcmUgZW1haWw9JXMnLAogICAgICAgICAgICBbZW1haWxdKQogICAgICAgIGlmIGV4aXN0aW5nOgogICAgICAgICAgICBzZWNyZXRfa2V5ID0gZXhpc3RpbmdbMF1bJ3NlY3JldF9rZXknXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlY3JldF9rZXkgPSByYW5kb21fYmFzZTMyKCkKICAgICAgICAgICAgYXV0aGVudGljYXRvci5xdWVyeSgKICAgICAgICAgICAgICAgICdpbnNlcnQgaW50byB0b3RwIChlbWFpbCwgc2VjcmV0X2tleSknCiAgICAgICAgICAgICAgICAnIHZhbHVlcyAoJXMsICVzKScsIFtlbWFpbCwgc2VjcmV0X2tleV0pCiAgICAgICAgcHJpbnQoc2VjcmV0X2tleSkKICAgICAgICB0b3RwID0gVE9UUChzZWNyZXRfa2V5KQogICAgICAgIGhvc3RuYW1lID0gZ2V0aG9zdG5hbWUoKQogICAgICAgIHVyaSA9IHRvdHAucHJvdmlzaW9uaW5nX3VyaSgKICAgICAgICAgICAgbmFtZT1lbWFpbCwKICAgICAgICAgICAgaXNzdWVyX25hbWU9ZidvcGVudnBuIHtob3N0bmFtZX0nLAogICAgICAgICkKICAgICAgICBwcmludCh1cmkpCiAgICAgICAgcXJfY29kZSh1cmkpCiAgICBlbGlmIG9wdGlvbnMucmVlbnJvbGw6CiAgICAgICAgZW1haWwgPSBvcHRpb25zLmVtYWlsCiAgICAgICAgZXhpc3RpbmcgPSBhdXRoZW50aWNhdG9yLnF1ZXJ5KAogICAgICAgICAgICAnc2VsZWN0ICogZnJvbSB0b3RwIHdoZXJlIGVtYWlsPSVzJywKICAgICAgICAgICAgW2VtYWlsXSkKICAgICAgICBpZiBleGlzdGluZzoKICAgICAgICAgICAgbG9nLmluZm8oJ1tlbnJvbGxdICVzIGV4aXN0cycsIGVtYWlsKQogICAgICAgICAgICBzZWNyZXRfa2V5ID0gcmFuZG9tX2Jhc2UzMigpCjx8ZmltX2hvbGV8PgogICAgICAgICAgICB0b3RwID0gVE9UUChzZWNyZXRfa2V5KQogICAgICAgICAgICBob3N0bmFtZSA9IGdldGhvc3RuYW1lKCkKICAgICAgICAgICAgdXJpID0gdG90cC5wcm92aXNpb25pbmdfdXJpKAogICAgICAgICAgICAgICAgbmFtZT1lbWFpbCwKICAgICAgICAgICAgICAgIGlzc3Vlcl9uYW1lPWYnb3BlbnZwbiB7aG9zdG5hbWV9JywKICAgICAgICAgICAgKQogICAgICAgICAgICBwcmludCh1cmkpCiAgICAgICAgICAgIHFyX2NvZGUodXJpKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGxvZy5pbmZvKCdbZW5yb2xsXSAlcyBkb2VzIG5vdCBleGlzdCcsIGVtYWlsKQogICAgZWxpZiBvcHRpb25zLnJlZ2lzdGVyX2xkYXBfZG9tYWluOgogICAgICAgIGF1dGhlbnRpY2F0b3IucmVnaXN0ZXJfbGRhcF9kb21haW4ob3B0aW9ucy5sZGFwX2RvbWFpbikKICAgIGVsc2U6CiAgICAgICAgYXV0aGVudGljYXRvci5ydW4oKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBhdXRoZW50aWNhdG9yLnF1ZXJ5KAogICAgICAgICAgICAgICAgJ3VwZGF0ZSB0b3RwIHNldCBzZWNyZXRfa2V5ID0gJXMnCiAgICAgICAgICAgICAgICAnIHdoZXJlIGVtYWlsPSVzJywgW3NlY3JldF9rZXksIGVtYWlsXSkKICAgICAgICAgICAgcHJpbnQoc2VjcmV0X2tleSkKPHxmaW1fZW5kfD4="]
["e7da8564182c69b52c16ecaa1fd9808db64e84b6-5","e7da8564182c69b52c16ecaa1fd9808db64e84b6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGlvCmltcG9ydCBsb2dnaW5nCmZyb20gc29ja2V0IGltcG9ydCBnZXRob3N0bmFtZQoKaW1wb3J0IGNvbmZpZ2FyZ3BhcnNlCmZyb20gY29uY3VycmVudF9sb2dfaGFuZGxlci5xdWV1ZSBpbXBvcnQgc2V0dXBfbG9nZ2luZ19xdWV1ZXMKZnJvbSBwcm9tZXRoZXVzX2NsaWVudCBpbXBvcnQgSW5mbywgc3RhcnRfaHR0cF9zZXJ2ZXIKZnJvbSBweW90cCBpbXBvcnQgcmFuZG9tX2Jhc2UzMgpmcm9tIHB5b3RwIGltcG9ydCBUT1RQCmZyb20gcXJjb2RlIGltcG9ydCBRUkNvZGUKZnJvbSAuX3ZlcnNpb24gaW1wb3J0IF9fdmVyc2lvbl9fCmZyb20gLnRvdHBfYXV0aGVudGljYXRvciBpbXBvcnQgVG90cEF1dGhlbnRpY2F0b3IKCgpkZWYgcXJfY29kZShzdCk6CiAgICBxciA9IFFSQ29kZSgpCiAgICBxci5hZGRfZGF0YShzdCkKICAgIGYgPSBpby5TdHJpbmdJTygpCiAgICBxci5wcmludF9hc2NpaShvdXQ9ZikKICAgIGYuc2VlaygwKQogICAgcHJpbnQoZi5yZWFkKCkpCgoKZGVmIG1haW4oKToKICAgIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogICAgcGFyc2VyID0gY29uZmlnYXJncGFyc2UuQXJnUGFyc2VyKAogICAgICAgIGRlZmF1bHRfY29uZmlnX2ZpbGVzPVsKICAgICAgICAgICAgJy9ldGMvb3BlbnZwbi1hdXRoLWR1by9jb25maWcuY29uZicsCiAgICAgICAgICAgICd+Ly5vcGVudnBuLWF1dGgtZHVvJywKICAgICAgICBdCiAgICApCgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLWMnLAogICAgICAgICctLWNvbmZpZycsCiAgICAgICAgaXNfY29uZmlnX2ZpbGU9VHJ1ZSwKICAgICAgICBoZWxwPSdwYXRoIG9mIGNvbmZpZyBmaWxlJywKICAgICAgICBlbnZfdmFyPSdBQURfQ09ORklHX1BBVEgnLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLVYnLAogICAgICAgICctLXZlcnNpb24nLAogICAgICAgIGFjdGlvbj0ndmVyc2lvbicsCiAgICAgICAgdmVyc2lvbj0nJShwcm9nKXMge3ZlcnNpb259Jy5mb3JtYXQodmVyc2lvbj1fX3ZlcnNpb25fXyksCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctdCcsCiAgICAgICAgJy0tdGhyZWFkcycsCiAgICAgICAgZGVmYXVsdD0xMCwKICAgICAgICBlbnZfdmFyPSdBQURfVEhSRUFEX0NPVU5UJywKICAgICAgICBoZWxwPSdBbW91bnQgb2YgdGhyZWFkcyB0byBoYW5kbGUgYXV0aGVudGljYXRpb24nLAogICAgICAgIHR5cGU9aW50LAogICAgKQoKICAgIHBhcnNlcl9kdW8gPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdjb21tYW5kcycpCiAgICBwYXJzZXJfZHVvLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1lbnJvbGwnLAogICAgICAgIGhlbHA9J3N3aXRjaCB3aGljaCwgaWYgc3BlY2lmaWVkLCBlbnJvbGxzIGEgdXNlciBmb3IgdG90cCcsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgKQogICAgcGFyc2VyX2R1by5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tcmVlbnJvbGwnLAogICAgICAgIGhlbHA9J3N3aXRjaCB3aGljaCwgaWYgc3BlY2lmaWVkLCByZWVucm9sbHMgYSB1c2VyIGZvciB0b3RwIGFuZCAnCiAgICAgICAgICAgICAnZ2VuZXJhdGVzIGEgbmV3IHRvdHAgc2VjcmV0IGtleScsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgKQogICAgcGFyc2VyX2R1by5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tZW1haWwnLAogICAgICAgIGhlbHA9J3RoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSBwZXJzb24gdG8gZW5yb2xsJywKICAgICkKICAgIHBhcnNlcl9kdW8uYWRkX2FyZ3VtZW50KAogICAgICAgICctLW1pZ3JhdGUnLAogICAgICAgIGhlbHA9J21pZ3JhdGVzIHRoZSBzY2hlbWEgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uJywKICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICApCgogICAgcGFyc2VyX2R1byA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ215c3FsJykKICAgIHBhcnNlcl9kdW8uYWRkX2FyZ3VtZW50KAogICAgICAgICctLW15c3FsLWhvc3QnLAogICAgICAgIGhlbHA9J215c3FsIGhvc3QnLAogICAgICAgIGVudl92YXI9J09WQURfTVlTUUxfSE9TVCcsCiAgICAgICAgZGVmYXVsdD0nMTI3LjAuMC4xJywKICAgICkKICAgIHBhcnNlcl9kdW8uYWRkX2FyZ3VtZW50KAogICAgICAgICctLW15c3FsLXVzZXJuYW1lJywKICAgICAgICBoZWxwPSd1c2VybmFtZSB1c2VkIHRvIGxvZ2luIHRvIHRoZSBteXNxbCBob3N0JywKICAgICAgICBlbnZfdmFyPSdPVkFEX01ZU1FMX1VTRVJOQU1FJywKICAgICkKICAgIHBhcnNlcl9kdW8uYWRkX2FyZ3VtZW50KAogICAgICAgICctLW15c3FsLXBhc3N3b3JkJywKICAgICAgICBoZWxwPSdwYXNzd29yZCB0byBsb2dpbiB0byBteXNxbCAnLAogICAgICAgIGVudl92YXI9J09WQURfTVlTUUxfUEFTU1dPUkQnLAogICAgICAgIGRlZmF1bHQ9JycsCiAgICApCiAgICBwYXJzZXJfZHVvLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1teXNxbC1kYXRhYmFzZScsCiAgICAgICAgZGVmYXVsdD0ndG90cCcsCiAgICAgICAgaGVscD0nZGF0YWJhc2UgaG91c2luZyB0aGUgdG90cCBzY2hlbWEnLAogICAgICAgIGVudl92YXI9J09WQURfTVlTUUxfREFUQUJBU0UnLAogICAgKQoKICAgIHBhcnNlcl9hdXRoZW50aWNhdGlvbiA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ09wZW5WUE4gVXNlciBBdXRoZW50aWNhdGlvbicpCiAgICBwYXJzZXJfYXV0aGVudGljYXRpb24uYWRkX2FyZ3VtZW50KAogICAgICAgICctLWF1dGgtdG9rZW4nLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgaGVscD0nVXNlIGF1dGggdG9rZW4gdG8gcmUtYXV0aGVudGljYXRlIGNsaWVudHMnLAogICAgICAgIGVudl92YXI9J0FBRF9BVVRIX1RPS0VOJywKICAgICkKICAgIHBhcnNlcl9hdXRoZW50aWNhdGlvbi5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tdG9rZW4tZXhwaXJhdGlvbicsCiAgICAgICAgdHlwZT1pbnQsCiAgICAgICAgZGVmYXVsdD0xNSwKICAgICAgICBoZWxwPSd0aGUgbnVtYmVyIG9mIGRheXMgYSB1c2VyIGNhbiBzaWduIGluIHdpdGhvdXQgdGhlIFRPVFAgYWZ0ZXIgJwogICAgICAgICAgICAgJ2Egc3VjY2Vzc2Z1bCBsb2dpbiB3aXRoIHRvdHAnLAogICAgICAgIGVudl92YXI9J1RPVFBfVE9LRU5fRVhQSVJBVElPTicsCiAgICApCiAgICBwYXJzZXJfYXV0aGVudGljYXRpb24uYWRkX2FyZ3VtZW50KAogICAgICAgICctLXJlbWVtYmVyLXVzZXInLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgaGVscD0nSWYgdXNlciBhdXRoZW50aWNhdGVkIG9uY2UsIHRoZSB1c2VycyByZWZyZXNoIHRva2VuIGlzICcKICAgICAgICAgICAgICd1c2VkIHRvIHJlYXV0aGVudGljYXRlIHNpbGVudGx5IGlmIHBvc3NpYmxlLicsCiAgICAgICAgZW52X3Zhcj0nQUFEX1JFTUVNQkVSX1VTRVInLAogICAgKQogICAgcGFyc2VyX2F1dGhlbnRpY2F0aW9uLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS12ZXJpZnktY29tbW9uLW5hbWUnLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgaGVscD0nQ2hlY2sgaWYgY29tbW9uX25hbWUgbWF0Y2hlcyBBenVyZSBBRCBVUE4nLAogICAgICAgIGVudl92YXI9J0FBRF9WRVJJRllfQ09NTU9OX05BTUUnLAogICAgKQoKICAgIGxkYXBfb3B0aW9ucyA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ2xkYXAgc2V0dGluZ3MnKQogICAgbGRhcF9vcHRpb25zLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1sZGFwLWVuYWJsZWQnLAogICAgICAgIGhlbHA9J2luZGljYXRlcyB3aGV0aGVyIHRvIGF1dGhlbnRpY2F0ZSB0aGUgdXNlcm5hbWUgLyBwYXNzd29yZCB3aXRoIGxkYXAuJywKICAgICAgICBlbnZfdmFyPSdPVkFEX0xEQVBfRU5BQkxFRCcsCiAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICkKICAgIGxkYXBfb3B0aW9ucy5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tbGRhcC1zZXJ2ZXJzJywKICAgICAgICBoZWxwPSd0aGUgbGRhcCBzZXJ2ZXJzIHRvIHRyeSBmb3IgYXV0aGVudGljYXRpb24nLAogICAgICAgIGVudl92YXI9J09WQURfTERBUF9TRVJWRVJTJywKICAgICkKICAgIGxkYXBfb3B0aW9ucy5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tbGRhcC1zZWFyY2gtYmFzZScsCiAgICAgICAgaGVscD0ndGhlIGxkYXAgc2VhcmNoIGJhc2UgZS5nLiAiREM9Y29udG9zbyxEQz1jb20iJywKICAgICAgICBlbnZfdmFyPSdPVkFEX0xEQVBfU0VBUkNIX0JBU0UnLAogICAgKQogICAgbGRhcF9vcHRpb25zLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1yZWdpc3Rlci1sZGFwLWRvbWFpbicsCiAgICAgICAgaGVscD0nYWxsb3dzIHJlZ2lzdHJhdGlvbiBvZiBhIGRvbWFpbi4gc2F2ZXMgc2V0dGluZ3MgaW4gdGhlIGRhdGFiYXNlJywKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgKQogICAgbGRhcF9vcHRpb25zLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1sZGFwLWRvbWFpbicsCiAgICAgICAgaGVscD0ndGhlIGxkYXAgZG9tYWluIHlvdSB3YW50IHRvIHJlZ2lzdGVyJwogICAgKQoKICAgIHBhcnNlcl9vcGVudnBuID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnT3BlblZQTiBNYW5hZ2VtZW50IEludGVyZmFjZSBzZXR0aW5ncycpCiAgICBwYXJzZXJfb3BlbnZwbi5hZGRfYXJndW1lbnQoCiAgICAgICAgJy1IJywKICAgICAgICAnLS1vdnBuLWhvc3QnLAogICAgICAgIGhlbHA9J0hvc3Qgb2YgT3BlblZQTiBtYW5hZ2VtZW50IGludGVyZmFjZS4nLAogICAgICAgIGVudl92YXI9J0FBRF9PVlBOX0hPU1QnLAogICAgKQogICAgcGFyc2VyX29wZW52cG4uYWRkX2FyZ3VtZW50KAogICAgICAgICctUCcsCiAgICAgICAgJy0tb3Zwbi1wb3J0JywKICAgICAgICBoZWxwPSdQb3J0IG9mIE9wZW5WUE4gbWFuYWdlbWVudCBpbnRlcmZhY2UuJywKICAgICAgICBlbnZfdmFyPSdBQURfT1ZQTl9QT1JUJywKICAgICAgICB0eXBlPWludCwKICAgICkKICAgIHBhcnNlcl9vcGVudnBuLmFkZF9hcmd1bWVudCgKICAgICAgICAnLXMnLAogICAgICAgICctLW92cG4tc29ja2V0JywKICAgICAgICBoZWxwPSdQYXRoIG9mIHNvY2tldCBvciBPcGVuVlBOIG1hbmFnZW1lbnQgaW50ZXJmYWNlLicsCiAgICAgICAgZW52X3Zhcj0nQUFEX09WUE5fU09DS0VUX1BBVEgnLAogICAgKQogICAgcGFyc2VyX29wZW52cG4uYWRkX2FyZ3VtZW50KAogICAgICAgICctcCcsCiAgICAgICAgJy0tb3Zwbi1wYXNzd29yZCcsCiAgICAgICAgaGVscD0nUGFzc3dvcmQgZm9yIE9wZW5WUE4gbWFuYWdlbWVudCBpbnRlcmZhY2UuJywKICAgICAgICBlbnZfdmFyPSdBQURfT1ZQTl9QQVNTV09SRCcsCiAgICApCgogICAgcGFyc2VyX3Byb21ldGhldXMgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdQcm9tZXRoZXVzIHNldHRpbmdzJykKICAgIHBhcnNlcl9wcm9tZXRoZXVzLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1wcm9tZXRoZXVzJywKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgIGVudl92YXI9J0FBRF9QUk9NRVRIRVVTX0VOQUJMRUQnLAogICAgICAgIGhlbHA9J0VuYWJsZSBwcm9tZXRoZXVzIHN0YXRpc3RpY3MnLAogICAgKQogICAgcGFyc2VyX3Byb21ldGhldXMuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXByb21ldGhldXMtbGlzdGVuLWFkZHInLAogICAgICAgIGVudl92YXI9J0FBRF9QUk9NRVRIRVVTX0xJU1RFTl9IT1NUJywKICAgICAgICBkZWZhdWx0PScnLAogICAgICAgIGhlbHA9J3Byb21ldGhldXMgbGlzdGVuIGFkZHInLAogICAgKQogICAgcGFyc2VyX3Byb21ldGhldXMuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXByb21ldGhldXMtbGlzdGVuLXBvcnQnLAogICAgICAgIHR5cGU9aW50LAogICAgICAgIGVudl92YXI9J0FBRF9QUk9NRVRIRVVTX1BPUlQnLAogICAgICAgIGhlbHA9JyBwcm9tZXRoZXVzIHN0YXRpc3RpY3MnLAogICAgICAgIGRlZmF1bHQ9OTcyMywKICAgICkKICAgIHBhcnNlcl9wcm9tZXRoZXVzLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1sb2ctbGV2ZWwnLAogICAgICAgIGRlZmF1bHQ9bG9nZ2luZy5JTkZPLAogICAgICAgIHR5cGU9bGFtYmRhIHg6IGdldGF0dHIobG9nZ2luZywgeCksCiAgICAgICAgZW52X3Zhcj0nQUFEX0xPR19MRVZFTCcsCiAgICAgICAgaGVscD0nQ29uZmlndXJlIHRoZSBsb2dnaW5nIGxldmVsLicsCiAgICApCgogICAgb3B0aW9ucyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCiAgICAjIGNvbnZlcnQgYWxsIGNvbmZpZ3VyZWQgbG9nZ2VycyB0byB1c2UgYSBiYWNrZ3JvdW5kIHRocmVhZAogICAgc2V0dXBfbG9nZ2luZ19xdWV1ZXMoKQoKICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoCiAgICAgICAgbGV2ZWw9b3B0aW9ucy5sb2dfbGV2ZWwsIGZvcm1hdD0nJShhc2N0aW1lKXMgJShsZXZlbG5hbWUpcyAlKG1lc3NhZ2UpcycKICAgICkKCiAgICBpZiBvcHRpb25zLnByb21ldGhldXM6CiAgICAgICAgc3RhcnRfaHR0cF9zZXJ2ZXIoCiAgICAgICAgICAgIG9wdGlvbnMucHJvbWV0aGV1c19saXN0ZW5fcG9ydCwgb3B0aW9ucy5wcm9tZXRoZXVzX2xpc3Rlbl9hZGRyCiAgICAgICAgKQogICAgICAgIGkgPSBJbmZvKCdvcGVudnBuX2F1dGhfYXp1cmVfYWRfdmVyc2lvbicsICdpbmZvIG9mIG9wZW52cG4tYXV0aC1henVyZS1hZCcpCiAgICAgICAgaS5pbmZvKHsndmVyc2lvbic6IF9fdmVyc2lvbl9ffSkKCiAgICBhdXRoZW50aWNhdG9yID0gVG90cEF1dGhlbnRpY2F0b3IoCiAgICAgICAgbXlzcWxfaG9zdD1vcHRpb25zLm15c3FsX2hvc3QsCiAgICAgICAgbXlzcWxfdXNlcm5hbWU9b3B0aW9ucy5teXNxbF91c2VybmFtZSwKICAgICAgICBteXNxbF9wYXNzd29yZD1vcHRpb25zLm15c3FsX3Bhc3N3b3JkLAogICAgICAgIG15c3FsX2RhdGFiYXNlPW9wdGlvbnMubXlzcWxfZGF0YWJhc2UsCiAgICAgICAgdGhyZWFkcz1vcHRpb25zLnRocmVhZHMsCiAgICAgICAgbGRhcF9lbmFibGVkPW9wdGlvbnMubGRhcF9lbmFibGVkLAogICAgICAgIGxkYXBfc2VydmVycz1vcHRpb25zLmxkYXBfc2VydmVycywKICAgICAgICBsZGFwX3NlYXJjaF9iYXNlPW9wdGlvbnMubGRhcF9zZWFyY2hfYmFzZSwKICAgICAgICBob3N0PW9wdGlvbnMub3Zwbl9ob3N0LAogICAgICAgIHBvcnQ9b3B0aW9ucy5vdnBuX3BvcnQsCiAgICAgICAgdW5peF9zb2NrZXQ9b3B0aW9ucy5vdnBuX3NvY2tldCwKICAgICAgICBwYXNzd29yZD1vcHRpb25zLm92cG5fcGFzc3dvcmQsCiAgICApCiAgICBpZiBvcHRpb25zLm1pZ3JhdGU6CiAgICAgICAgZnJvbSBwa2dfcmVzb3VyY2VzIGltcG9ydCByZXNvdXJjZV9zdHJpbmcKICAgICAgICBzcWwgPSByZXNvdXJjZV9zdHJpbmcoJ29wZW52cG5fYXV0aF9kdW8nLCAnc2NoZW1hLnNxbCcpCiAgICAgICAgc3FsID0gc3FsLmRlY29kZSgndXRmLTgnKQogICAgICAgIGF1dGhlbnRpY2F0b3IucXVlcnkoc3FsKQogICAgZWxpZiBvcHRpb25zLmVucm9sbDoKICAgICAgICBlbWFpbCA9IG9wdGlvbnMuZW1haWwKICAgICAgICBleGlzdGluZyA9IGF1dGhlbnRpY2F0b3IucXVlcnkoCiAgICAgICAgICAgICdzZWxlY3QgKiBmcm9tIHRvdHAgd2hlcmUgZW1haWw9JXMnLAogICAgICAgICAgICBbZW1haWxdKQogICAgICAgIGlmIGV4aXN0aW5nOgogICAgICAgICAgICBzZWNyZXRfa2V5ID0gZXhpc3RpbmdbMF1bJ3NlY3JldF9rZXknXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlY3JldF9rZXkgPSByYW5kb21fYmFzZTMyKCkKICAgICAgICAgICAgYXV0aGVudGljYXRvci5xdWVyeSgKICAgICAgICAgICAgICAgICdpbnNlcnQgaW50byB0b3RwIChlbWFpbCwgc2VjcmV0X2tleSknCiAgICAgICAgICAgICAgICAnIHZhbHVlcyAoJXMsICVzKScsIFtlbWFpbCwgc2VjcmV0X2tleV0pCiAgICAgICAgcHJpbnQoc2VjcmV0X2tleSkKICAgICAgICB0b3RwID0gVE9UUChzZWNyZXRfa2V5KQogICAgICAgIGhvc3RuYW1lID0gZ2V0aG9zdG5hbWUoKQogICAgICAgIHVyaSA9IHRvdHAucHJvdmlzaW9uaW5nX3VyaSgKICAgICAgICAgICAgbmFtZT1lbWFpbCwKICAgICAgICAgICAgaXNzdWVyX25hbWU9ZidvcGVudnBuIHtob3N0bmFtZX0nLAogICAgICAgICkKICAgICAgICBwcmludCh1cmkpCiAgICAgICAgcXJfY29kZSh1cmkpCiAgICBlbGlmIG9wdGlvbnMucmVlbnJvbGw6CiAgICAgICAgZW1haWwgPSBvcHRpb25zLmVtYWlsCiAgICAgICAgZXhpc3RpbmcgPSBhdXRoZW50aWNhdG9yLnF1ZXJ5KAogICAgICAgICAgICAnc2VsZWN0ICogZnJvbSB0b3RwIHdoZXJlIGVtYWlsPSVzJywKICAgICAgICAgICAgW2VtYWlsXSkKICAgICAgICBpZiBleGlzdGluZzoKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICAnIHdoZXJlIGVtYWlsPSVzJywgW3NlY3JldF9rZXksIGVtYWlsXSkKICAgICAgICAgICAgcHJpbnQoc2VjcmV0X2tleSkKICAgICAgICAgICAgdG90cCA9IFRPVFAoc2VjcmV0X2tleSkKICAgICAgICAgICAgaG9zdG5hbWUgPSBnZXRob3N0bmFtZSgpCiAgICAgICAgICAgIHVyaSA9IHRvdHAucHJvdmlzaW9uaW5nX3VyaSgKICAgICAgICAgICAgICAgIG5hbWU9ZW1haWwsCiAgICAgICAgICAgICAgICBpc3N1ZXJfbmFtZT1mJ29wZW52cG4ge2hvc3RuYW1lfScsCiAgICAgICAgICAgICkKICAgICAgICAgICAgcHJpbnQodXJpKQogICAgICAgICAgICBxcl9jb2RlKHVyaSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBsb2cuaW5mbygnW2Vucm9sbF0gJXMgZG9lcyBub3QgZXhpc3QnLCBlbWFpbCkKICAgIGVsaWYgb3B0aW9ucy5yZWdpc3Rlcl9sZGFwX2RvbWFpbjoKICAgICAgICBhdXRoZW50aWNhdG9yLnJlZ2lzdGVyX2xkYXBfZG9tYWluKG9wdGlvbnMubGRhcF9kb21haW4pCiAgICBlbHNlOgogICAgICAgIGF1dGhlbnRpY2F0b3IucnVuKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgbG9nLmluZm8oJ1tlbnJvbGxdICVzIGV4aXN0cycsIGVtYWlsKQogICAgICAgICAgICBzZWNyZXRfa2V5ID0gcmFuZG9tX2Jhc2UzMigpCiAgICAgICAgICAgIGF1dGhlbnRpY2F0b3IucXVlcnkoCiAgICAgICAgICAgICAgICAndXBkYXRlIHRvdHAgc2V0IHNlY3JldF9rZXkgPSAlcycKPHxmaW1fZW5kfD4="]
["822fc95e7a6dfd604d88a50a83b96be6d99b2c8c-1","822fc95e7a6dfd604d88a50a83b96be6d99b2c8c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGd5bQojaW1wb3J0IHJvdWxldHRlIGVudgpmcm9tIGd5bS5lbnZzLnRveV90ZXh0IGltcG9ydCByb3VsZXR0ZQojaW1wb3J0IGRlbCB0YWJ1bGFyIHEgYWdlbnRfcm91bGV0dGUKaW1wb3J0IHRhYnVsYXJfcV9hZ2VudF9yb3VsZXR0ZV9zYXJzYQoKPHxmaW1faG9sZXw+CnByaW50KCJCRUdJTiBUSEUgUS1MRUFSTklORyIpCmZvciBpIGluIHJhbmdlKDEwMCk6CglhZ2VudC5sZWFybih3aGVlbCkgI2xlYXJuIGJlc3QgY2hvaWNlcyBhbmQgYWN0IG9uIHRoZSBlbnYKCXByaW50KCJ0cmlhbCBudW1iZXI6ICVkIiAlaSkKCmFnZW50LkxvZ1VwZGF0ZSgpCgo8fGZpbV9zdWZmaXh8Pgp3aGVlbD1yb3VsZXR0ZS5Sb3VsZXR0ZUVudigpI21ha2UgdGhlIGVudgoKYWdlbnQ9dGFidWxhcl9xX2FnZW50X3JvdWxldHRlX3NhcnNhLlRhYnVsYXJRQWdlbnRSb3VsZXR0ZSh3aGVlbC5vYnNlcnZhdGlvbl9zcGFjZSx3aGVlbC5hY3Rpb25fc3BhY2UpCgo8fGZpbV9lbmR8Pg=="]
["822fc95e7a6dfd604d88a50a83b96be6d99b2c8c-2","822fc95e7a6dfd604d88a50a83b96be6d99b2c8c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGd5bQojaW1wb3J0IHJvdWxldHRlIGVudgpmcm9tIGd5bS5lbnZzLnRveV90ZXh0IGltcG9ydCByb3VsZXR0ZQojaW1wb3J0IGRlbCB0YWJ1bGFyIHEgYWdlbnRfcm91bGV0dGUKaW1wb3J0IHRhYnVsYXJfcV9hZ2VudF9yb3VsZXR0ZV9zYXJzYQoKd2hlZWw9cm91bGV0dGUuUm91bGV0dGVFbnYoKSNtYWtlIHRoZSBlbnYKCmFnZW50PXRhYnVsYXJfcV9hZ2VudF9yb3VsZXR0ZV9zYXJzYS5UYWJ1bGFyUUFnZW50Um91bGV0dGUod2hlZWwub2JzZXJ2YXRpb25fc3BhY2Usd2hlZWwuYWN0aW9uX3NwYWNlKQoKPHxmaW1faG9sZXw+CgphZ2VudC5Mb2dVcGRhdGUoKQoKPHxmaW1fc3VmZml4fD4KcHJpbnQoIkJFR0lOIFRIRSBRLUxFQVJOSU5HIikKZm9yIGkgaW4gcmFuZ2UoMTAwKToKCWFnZW50LmxlYXJuKHdoZWVsKSAjbGVhcm4gYmVzdCBjaG9pY2VzIGFuZCBhY3Qgb24gdGhlIGVudgoJcHJpbnQoInRyaWFsIG51bWJlcjogJWQiICVpKQo8fGZpbV9lbmR8Pg=="]
["822fc95e7a6dfd604d88a50a83b96be6d99b2c8c-3","822fc95e7a6dfd604d88a50a83b96be6d99b2c8c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGd5bQojaW1wb3J0IHJvdWxldHRlIGVudgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gZ3ltLmVudnMudG95X3RleHQgaW1wb3J0IHJvdWxldHRlCiNpbXBvcnQgZGVsIHRhYnVsYXIgcSBhZ2VudF9yb3VsZXR0ZQppbXBvcnQgdGFidWxhcl9xX2FnZW50X3JvdWxldHRlX3NhcnNhCgo8fGZpbV9lbmR8Pg=="]
["822fc95e7a6dfd604d88a50a83b96be6d99b2c8c-4","822fc95e7a6dfd604d88a50a83b96be6d99b2c8c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGd5bQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiNpbXBvcnQgcm91bGV0dGUgZW52CmZyb20gZ3ltLmVudnMudG95X3RleHQgaW1wb3J0IHJvdWxldHRlCiNpbXBvcnQgZGVsIHRhYnVsYXIgcSBhZ2VudF9yb3VsZXR0ZQppbXBvcnQgdGFidWxhcl9xX2FnZW50X3JvdWxldHRlX3NhcnNhCjx8ZmltX2VuZHw+"]
["822fc95e7a6dfd604d88a50a83b96be6d99b2c8c-5","822fc95e7a6dfd604d88a50a83b96be6d99b2c8c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGd5bQojaW1wb3J0IHJvdWxldHRlIGVudgpmcm9tIGd5bS5lbnZzLnRveV90ZXh0IGltcG9ydCByb3VsZXR0ZQojaW1wb3J0IGRlbCB0YWJ1bGFyIHEgYWdlbnRfcm91bGV0dGUKaW1wb3J0IHRhYnVsYXJfcV9hZ2VudF9yb3VsZXR0ZV9zYXJzYQoKd2hlZWw9cm91bGV0dGUuUm91bGV0dGVFbnYoKSNtYWtlIHRoZSBlbnYKCmFnZW50PXRhYnVsYXJfcV9hZ2VudF9yb3VsZXR0ZV9zYXJzYS5UYWJ1bGFyUUFnZW50Um91bGV0dGUod2hlZWwub2JzZXJ2YXRpb25fc3BhY2Usd2hlZWwuYWN0aW9uX3NwYWNlKQoKcHJpbnQoIkJFR0lOIFRIRSBRLUxFQVJOSU5HIikKZm9yIGkgaW4gcmFuZ2UoMTAwKToKCWFnZW50LmxlYXJuKHdoZWVsKSAjbGVhcm4gYmVzdCBjaG9pY2VzIGFuZCBhY3Qgb24gdGhlIGVudgo8fGZpbV9ob2xlfD4KYWdlbnQuTG9nVXBkYXRlKCkKCjx8ZmltX3N1ZmZpeHw+CglwcmludCgidHJpYWwgbnVtYmVyOiAlZCIgJWkpCgo8fGZpbV9lbmR8Pg=="]
["de0cdb0e1202ed10e29dd36db710fcea9fbb597c-1","de0cdb0e1202ed10e29dd36db710fcea9fbb597c","PHxmaW1fcHJlZml4fD4KZnJvbSBzdDJhY3Rpb25zLnJ1bm5lcnMucHl0aG9ucnVubmVyIGltcG9ydCBBY3Rpb24KZnJvbSBsaWIgaW1wb3J0IGFjdGlvbnMKaW1wb3J0IHB5bXlzcWwuY3Vyc29ycwppbXBvcnQganNvbgoKY2xhc3MgUnB2bGFuVXBkYXRlTWFjQXV0aEZhaWx1cmVEYXRhYmFzZUFjdGlvbihhY3Rpb25zLlNlc3Npb25BY3Rpb24pOgogIGRlZiBfX2luaXRfXyhzZWxmLGNvbmZpZyk6CiAgICAgc3VwZXIoUnB2bGFuVXBkYXRlTWFjQXV0aEZhaWx1cmVEYXRhYmFzZUFjdGlvbiwgc2VsZikuX19pbml0X18oY29uZmlnKQoKICBkZWYgcnVuKHNlbGYsIHRpbWVzdGFtcCwgc3dpdGNoX25hbWUsIGlwLCBhcF9uYW1lLCBtYWMsIHBvcnQpOgoKICAgICBzZWxmLnByb2Nlc3NfbWFjX2ZhaWx1cmUodGltZXN0YW1wLCBzd2l0Y2hfbmFtZSwgaXAsIGFwX25hbWUsIHBvcnQsIG1hYykKCiAgICAgIyBUT0RPOiBSZXBvcnQgZXJyb3JzIGxpa2UgZGF0YWJhc2UgZmFpbHVyZSEKICAgICByZXR1cm4gKFRydWUpCgogIGRlZiBwcm9jZXNzX21hY19mYWlsdXJlKHNlbGYsIHRpbWVzdGFtcCwgc3dpdGNoX25hbWUsIGlwLCBhcF9uYW1lLCBwb3J0LCBtYWMpOgoKICAgICAgICBjb25uZWN0aW9uID0gcHlteXNxbC5jb25uZWN0KAogICAgICAgICAgICAgaG9zdD1zZWxmLl9kYl9hZGRyLCAKICAgICAgICAgICAgIHVzZXI9c2VsZi5fZGJfdXNlciwgICAgICAKICAgICAgICAgICAgIHBhc3N3ZD1zZWxmLl9kYl9wYXNzLCAgCiAgICAgICAgICAgICBkYj1zZWxmLl9kYl9uYW1lKSAgICAgICAKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCSNVcGRhdGUgcm93LgoJY3Vyc29yID0gY29ubmVjdGlvbi5jdXJzb3IoKQogICAgICAgIHNxbCA9ICJ1cGRhdGUgYXV0aG9yaXplZCBzZXQgdGltZXN0YW1wPSclcycsIHN3aXRjaF9uYW1lPSclcycsIGlwPSclcycsIGRldmljZT0nJXMnLCBwb3J0PSclcycgd2hlcmUgbWFjPSclcyciICUgKHRpbWVzdGFtcCwgc3dpdGNoX25hbWUsIGlwLCBhcF9uYW1lLCBwb3J0LCBtYWMpCiAgICAgICAgY3Vyc29yLmV4ZWN1dGUoc3FsKQo8fGZpbV9lbmR8Pg=="]
["de0cdb0e1202ed10e29dd36db710fcea9fbb597c-2","de0cdb0e1202ed10e29dd36db710fcea9fbb597c","PHxmaW1fcHJlZml4fD4KZnJvbSBzdDJhY3Rpb25zLnJ1bm5lcnMucHl0aG9ucnVubmVyIGltcG9ydCBBY3Rpb24KZnJvbSBsaWIgaW1wb3J0IGFjdGlvbnMKaW1wb3J0IHB5bXlzcWwuY3Vyc29ycwppbXBvcnQganNvbgoKY2xhc3MgUnB2bGFuVXBkYXRlTWFjQXV0aEZhaWx1cmVEYXRhYmFzZUFjdGlvbihhY3Rpb25zLlNlc3Npb25BY3Rpb24pOgogIGRlZiBfX2luaXRfXyhzZWxmLGNvbmZpZyk6CiAgICAgc3VwZXIoUnB2bGFuVXBkYXRlTWFjQXV0aEZhaWx1cmVEYXRhYmFzZUFjdGlvbiwgc2VsZikuX19pbml0X18oY29uZmlnKQoKICBkZWYgcnVuKHNlbGYsIHRpbWVzdGFtcCwgc3dpdGNoX25hbWUsIGlwLCBhcF9uYW1lLCBtYWMsIHBvcnQpOgoKICAgICBzZWxmLnByb2Nlc3NfbWFjX2ZhaWx1cmUodGltZXN0YW1wLCBzd2l0Y2hfbmFtZSwgaXAsIGFwX25hbWUsIHBvcnQsIG1hYykKCiAgICAgIyBUT0RPOiBSZXBvcnQgZXJyb3JzIGxpa2UgZGF0YWJhc2UgZmFpbHVyZSEKICAgICByZXR1cm4gKFRydWUpCgogIGRlZiBwcm9jZXNzX21hY19mYWlsdXJlKHNlbGYsIHRpbWVzdGFtcCwgc3dpdGNoX25hbWUsIGlwLCBhcF9uYW1lLCBwb3J0LCBtYWMpOgoKICAgICAgICBjb25uZWN0aW9uID0gcHlteXNxbC5jb25uZWN0KAogICAgICAgICAgICAgaG9zdD1zZWxmLl9kYl9hZGRyLCAKICAgICAgICAgICAgIHVzZXI9c2VsZi5fZGJfdXNlciwgICAgICAKICAgICAgICAgICAgIHBhc3N3ZD1zZWxmLl9kYl9wYXNzLCAgCiAgICAgICAgICAgICBkYj1zZWxmLl9kYl9uYW1lKSAgICAgICAKCgkjVXBkYXRlIHJvdy4KCWN1cnNvciA9IGNvbm5lY3Rpb24uY3Vyc29yKCkKICAgICAgICBzcWwgPSAidXBkYXRlIGF1dGhvcml6ZWQgc2V0IHRpbWVzdGFtcD0nJXMnLCBzd2l0Y2hfbmFtZT0nJXMnLCBpcD0nJXMnLCBkZXZpY2U9JyVzJywgcG9ydD0nJXMnIHdoZXJlIG1hYz0nJXMnIiAlICh0aW1lc3RhbXAsIHN3aXRjaF9uYW1lLCBpcCwgYXBfbmFtZSwgcG9ydCwgbWFjKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgY3Vyc29yLmV4ZWN1dGUoc3FsKQogICAgICAgIGNvbm5lY3Rpb24uY29tbWl0KCkKICAgICAgICBjdXJzb3IuY2xvc2UoKQogICAgICAgIGNvbm5lY3Rpb24uY2xvc2UoKQo8fGZpbV9lbmR8Pg=="]
["de0cdb0e1202ed10e29dd36db710fcea9fbb597c-3","de0cdb0e1202ed10e29dd36db710fcea9fbb597c","PHxmaW1fcHJlZml4fD4KZnJvbSBzdDJhY3Rpb25zLnJ1bm5lcnMucHl0aG9ucnVubmVyIGltcG9ydCBBY3Rpb24KZnJvbSBsaWIgaW1wb3J0IGFjdGlvbnMKaW1wb3J0IHB5bXlzcWwuY3Vyc29ycwppbXBvcnQganNvbgoKY2xhc3MgUnB2bGFuVXBkYXRlTWFjQXV0aEZhaWx1cmVEYXRhYmFzZUFjdGlvbihhY3Rpb25zLlNlc3Npb25BY3Rpb24pOgogIGRlZiBfX2luaXRfXyhzZWxmLGNvbmZpZyk6CiAgICAgc3VwZXIoUnB2bGFuVXBkYXRlTWFjQXV0aEZhaWx1cmVEYXRhYmFzZUFjdGlvbiwgc2VsZikuX19pbml0X18oY29uZmlnKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogIGRlZiBydW4oc2VsZiwgdGltZXN0YW1wLCBzd2l0Y2hfbmFtZSwgaXAsIGFwX25hbWUsIG1hYywgcG9ydCk6CgogICAgIHNlbGYucHJvY2Vzc19tYWNfZmFpbHVyZSh0aW1lc3RhbXAsIHN3aXRjaF9uYW1lLCBpcCwgYXBfbmFtZSwgcG9ydCwgbWFjKQo8fGZpbV9lbmR8Pg=="]
["de0cdb0e1202ed10e29dd36db710fcea9fbb597c-4","de0cdb0e1202ed10e29dd36db710fcea9fbb597c","PHxmaW1fcHJlZml4fD4KZnJvbSBzdDJhY3Rpb25zLnJ1bm5lcnMucHl0aG9ucnVubmVyIGltcG9ydCBBY3Rpb24KZnJvbSBsaWIgaW1wb3J0IGFjdGlvbnMKaW1wb3J0IHB5bXlzcWwuY3Vyc29ycwppbXBvcnQganNvbgo8fGZpbV9ob2xlfD4KCiAgZGVmIHJ1bihzZWxmLCB0aW1lc3RhbXAsIHN3aXRjaF9uYW1lLCBpcCwgYXBfbmFtZSwgbWFjLCBwb3J0KToKCiAgICAgc2VsZi5wcm9jZXNzX21hY19mYWlsdXJlKHRpbWVzdGFtcCwgc3dpdGNoX25hbWUsIGlwLCBhcF9uYW1lLCBwb3J0LCBtYWMpCgogICAgICMgVE9ETzogUmVwb3J0IGVycm9ycyBsaWtlIGRhdGFiYXNlIGZhaWx1cmUhCiAgICAgcmV0dXJuIChUcnVlKQoKICBkZWYgcHJvY2Vzc19tYWNfZmFpbHVyZShzZWxmLCB0aW1lc3RhbXAsIHN3aXRjaF9uYW1lLCBpcCwgYXBfbmFtZSwgcG9ydCwgbWFjKToKCiAgICAgICAgY29ubmVjdGlvbiA9IHB5bXlzcWwuY29ubmVjdCgKICAgICAgICAgICAgIGhvc3Q9c2VsZi5fZGJfYWRkciwgCiAgICAgICAgICAgICB1c2VyPXNlbGYuX2RiX3VzZXIsICAgICAgCiAgICAgICAgICAgICBwYXNzd2Q9c2VsZi5fZGJfcGFzcywgIAogICAgICAgICAgICAgZGI9c2VsZi5fZGJfbmFtZSkgICAgICAgCgoJI1VwZGF0ZSByb3cuCgljdXJzb3IgPSBjb25uZWN0aW9uLmN1cnNvcigpCiAgICAgICAgc3FsID0gInVwZGF0ZSBhdXRob3JpemVkIHNldCB0aW1lc3RhbXA9JyVzJywgc3dpdGNoX25hbWU9JyVzJywgaXA9JyVzJywgZGV2aWNlPSclcycsIHBvcnQ9JyVzJyB3aGVyZSBtYWM9JyVzJyIgJSAodGltZXN0YW1wLCBzd2l0Y2hfbmFtZSwgaXAsIGFwX25hbWUsIHBvcnQsIG1hYykKICAgICAgICBjdXJzb3IuZXhlY3V0ZShzcWwpCiAgICAgICAgY29ubmVjdGlvbi5jb21taXQoKQogICAgICAgIGN1cnNvci5jbG9zZSgpCiAgICAgICAgY29ubmVjdGlvbi5jbG9zZSgpCgo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgUnB2bGFuVXBkYXRlTWFjQXV0aEZhaWx1cmVEYXRhYmFzZUFjdGlvbihhY3Rpb25zLlNlc3Npb25BY3Rpb24pOgogIGRlZiBfX2luaXRfXyhzZWxmLGNvbmZpZyk6CiAgICAgc3VwZXIoUnB2bGFuVXBkYXRlTWFjQXV0aEZhaWx1cmVEYXRhYmFzZUFjdGlvbiwgc2VsZikuX19pbml0X18oY29uZmlnKQo8fGZpbV9lbmR8Pg=="]
["de0cdb0e1202ed10e29dd36db710fcea9fbb597c-5","de0cdb0e1202ed10e29dd36db710fcea9fbb597c","PHxmaW1fcHJlZml4fD4KZnJvbSBzdDJhY3Rpb25zLnJ1bm5lcnMucHl0aG9ucnVubmVyIGltcG9ydCBBY3Rpb24KZnJvbSBsaWIgaW1wb3J0IGFjdGlvbnMKaW1wb3J0IHB5bXlzcWwuY3Vyc29ycwppbXBvcnQganNvbgoKY2xhc3MgUnB2bGFuVXBkYXRlTWFjQXV0aEZhaWx1cmVEYXRhYmFzZUFjdGlvbihhY3Rpb25zLlNlc3Npb25BY3Rpb24pOgogIGRlZiBfX2luaXRfXyhzZWxmLGNvbmZpZyk6CiAgICAgc3VwZXIoUnB2bGFuVXBkYXRlTWFjQXV0aEZhaWx1cmVEYXRhYmFzZUFjdGlvbiwgc2VsZikuX19pbml0X18oY29uZmlnKQo8fGZpbV9ob2xlfD4KCiAgICAgIyBUT0RPOiBSZXBvcnQgZXJyb3JzIGxpa2UgZGF0YWJhc2UgZmFpbHVyZSEKICAgICByZXR1cm4gKFRydWUpCgogIGRlZiBwcm9jZXNzX21hY19mYWlsdXJlKHNlbGYsIHRpbWVzdGFtcCwgc3dpdGNoX25hbWUsIGlwLCBhcF9uYW1lLCBwb3J0LCBtYWMpOgoKICAgICAgICBjb25uZWN0aW9uID0gcHlteXNxbC5jb25uZWN0KAogICAgICAgICAgICAgaG9zdD1zZWxmLl9kYl9hZGRyLCAKICAgICAgICAgICAgIHVzZXI9c2VsZi5fZGJfdXNlciwgICAgICAKICAgICAgICAgICAgIHBhc3N3ZD1zZWxmLl9kYl9wYXNzLCAgCiAgICAgICAgICAgICBkYj1zZWxmLl9kYl9uYW1lKSAgICAgICAKCgkjVXBkYXRlIHJvdy4KCWN1cnNvciA9IGNvbm5lY3Rpb24uY3Vyc29yKCkKICAgICAgICBzcWwgPSAidXBkYXRlIGF1dGhvcml6ZWQgc2V0IHRpbWVzdGFtcD0nJXMnLCBzd2l0Y2hfbmFtZT0nJXMnLCBpcD0nJXMnLCBkZXZpY2U9JyVzJywgcG9ydD0nJXMnIHdoZXJlIG1hYz0nJXMnIiAlICh0aW1lc3RhbXAsIHN3aXRjaF9uYW1lLCBpcCwgYXBfbmFtZSwgcG9ydCwgbWFjKQogICAgICAgIGN1cnNvci5leGVjdXRlKHNxbCkKICAgICAgICBjb25uZWN0aW9uLmNvbW1pdCgpCiAgICAgICAgY3Vyc29yLmNsb3NlKCkKICAgICAgICBjb25uZWN0aW9uLmNsb3NlKCkKCjx8ZmltX3N1ZmZpeHw+CgogIGRlZiBydW4oc2VsZiwgdGltZXN0YW1wLCBzd2l0Y2hfbmFtZSwgaXAsIGFwX25hbWUsIG1hYywgcG9ydCk6CgogICAgIHNlbGYucHJvY2Vzc19tYWNfZmFpbHVyZSh0aW1lc3RhbXAsIHN3aXRjaF9uYW1lLCBpcCwgYXBfbmFtZSwgcG9ydCwgbWFjKQo8fGZpbV9lbmR8Pg=="]
["45f485e9194bae3be5d5c81f6c9ac46a250829bc-1","45f485e9194bae3be5d5c81f6c9ac46a250829bc","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKaW1wb3J0IGluamVjdAoKZnJvbSBidWlsZHNjcmlwdHMudGFza19nZW5lcmF0aW9uLnJlc21va2VfcHJveHkgaW1wb3J0IFJlc21va2VQcm94eVNlcnZpY2UKZnJvbSBidWlsZHNjcmlwdHMudGFza19nZW5lcmF0aW9uLnRhc2tfdHlwZXMgaW1wb3J0IG11bHRpdmVyc2lvbl9kZWNvcmF0b3IgYXMgdW5kZXJfdGVzdApmcm9tIGJ1aWxkc2NyaXB0cy50YXNrX2dlbmVyYXRpb24udGFza190eXBlcy5tdWx0aXZlcnNpb25fZGVjb3JhdG9yIGltcG9ydCBNdWx0aXZlcnNpb25EZWNvcmF0b3JQYXJhbXMKCgojIHB5bGludDogZGlzYWJsZT1taXNzaW5nLWRvY3N0cmluZyxpbnZhbGlkLW5hbWUsdW51c2VkLWFyZ3VtZW50LG5vLXNlbGYtdXNlLHByb3RlY3RlZC1hY2Nlc3Msbm8tdmFsdWUtZm9yLXBhcmFtZXRlcgpkZWYgYnVpbGRfbW9ja19wYXJhbXMoKToKICAgIHJldHVybiBNdWx0aXZlcnNpb25EZWNvcmF0b3JQYXJhbXModGFzaz0iZHVtbXlfdGFzayIsIGJhc2Vfc3VpdGU9ImR1bW15X3N1aXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD0iZHVtbXlfdmFyaWFudCIsIG51bV90YXNrcz01KQoKCmRlZiBidWlsZF9tb2NrX3N1Yl90YXNrcygpOgogICAgbW9ja190YXNrcyA9IHNldCgpCiAgICBjb21tYW5kcyA9IFsKICAgICAgICB1bmRlcl90ZXN0LkZ1bmN0aW9uQ2FsbCh1bmRlcl90ZXN0LkNPTkZJR1VSRV9FVkdfQ1JFREVOVElBTFMpLAogICAgXQogICAgZm9yIGkgaW4gcmFuZ2UoNSk6CiAgICAgICAgbW9ja190YXNrID0gdW5kZXJfdGVzdC5UYXNrKGYidGFza19uYW1lX3tpfSIsIGNvbW1hbmRzKQogICAgICAgIG1vY2tfdGFza3MuYWRkKG1vY2tfdGFzaykKICAgIHJldHVybiBtb2NrX3Rhc2tzCgoKY2xhc3MgVGVzdERlY29yYXRlRnV6emVyR2VuVGFzayh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICBkZWYgc2V0VXAoc2VsZikgLT4gTm9uZToKICAgICAgICBkZWYgZGVwZW5kZW5jaWVzKGJpbmRlcjogaW5qZWN0LkJpbmRlcikgLT4gTm9uZToKICAgICAgICAgICAgYmluZGVyLmJpbmQoUmVzbW9rZVByb3h5U2VydmljZSwgUmVzbW9rZVByb3h5U2VydmljZSgpKQoKICAgICAgICBpbmplY3QuY2xlYXJfYW5kX2NvbmZpZ3VyZShkZXBlbmRlbmNpZXMpCgogICAgZGVmIHRlYXJEb3duKHNlbGYpIC0+IE5vbmU6CiAgICAgICAgaW5qZWN0LmNsZWFyKCkKCiAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgZml4dHVyZV90eXBlKToKICAgICAgICBtb2NrX3BhcmFtcyA9IGJ1aWxkX21vY2tfcGFyYW1zKCkKICAgICAgICBtb2NrX3N1Yl90YXNrcyA9IGJ1aWxkX21vY2tfc3ViX3Rhc2tzKCkKICAgICAgICBtdWx0aXZlcnNpb25fZGVjb3JhdG9yID0gdW5kZXJfdGVzdC5NdWx0aXZlcnNpb25HZW5UYXNrRGVjb3JhdG9yKCkKICAgICAgICBleHBlY3RlZF9udW1fdGFza3MgPSBtb2NrX3BhcmFtcy5udW1fdGFza3MgKiBsZW4obXVsdGl2ZXJzaW9uX2RlY29yYXRvci5vbGRfdmVyc2lvbnMpICogbGVuKAogICAgICAgICAgICBtdWx0aXZlcnNpb25fZGVjb3JhdG9yLl9nZXRfdmVyc2lvbnNfY29tYmluYXRpb25zKGZpeHR1cmVfdHlwZSkpCgogICAgICAgIHdpdGggcGF0Y2gub2JqZWN0KG11bHRpdmVyc2lvbl9kZWNvcmF0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIl9nZXRfc3VpdGVfZml4dHVyZV90eXBlIikgYXMgbW9ja19nZXRfc3VpdGVfZml4dHVyZV90eXBlOgogICAgICAgICAgICBtb2NrX2dldF9zdWl0ZV9maXh0dXJlX3R5cGUucmV0dXJuX3ZhbHVlID0gZml4dHVyZV90eXBlCgogICAgICAgICAgICBzdWJfdGFza3MgPSBtdWx0aXZlcnNpb25fZGVjb3JhdG9yLmRlY29yYXRlX3Rhc2tzX3dpdGhfZHluYW1pY2FsbHlfZ2VuZXJhdGVkX2ZpbGVzKAogICAgICAgICAgICAgICAgbW9ja19zdWJfdGFza3MsIG1vY2tfcGFyYW1zKQoKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3ViX3Rhc2tzKSwgZXhwZWN0ZWRfbnVtX3Rhc2tzKQogICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCiAgICAgICAgICAgICAgICBhbGwoc3ViX3Rhc2suY29tbWFuZHNbM10ubmFtZSA9PSB1bmRlcl90ZXN0LkRPX01VTFRJVkVSU0lPTl9TRVRVUAogICAgICAgICAgICAgICAgICAgIGZvciBzdWJfdGFzayBpbiBzdWJfdGFza3MpKQoKICAgIGRlZiB0ZXN0X2RlY29yYXRlX2Z1enplcl9zaGVsbF9maXh0dXJlKHNlbGYpOgogICAgICAgIHNlbGYucnVuX3Rlc3QodW5kZXJfdGVzdC5fU3VpdGVGaXh0dXJlVHlwZS5TSEVMTCkKCiAgICBkZWYgdGVzdF9kZWNvcmF0ZV9mdXp6ZXJfcmVwbHNldF9maXh0dXJlKHNlbGYpOgogICAgICAgIHNlbGYucnVuX3Rlc3QodW5kZXJfdGVzdC5fU3VpdGVGaXh0dXJlVHlwZS5SRVBMKQoKICAgIGRlZiB0ZXN0X2RlY29yYXRlX2Z1enplcl9zaGFyZGVkX2NsdXN0ZXJfZml4dHVyZShzZWxmKToKICAgICAgICBzZWxmLnJ1bl90ZXN0KHVuZGVyX3Rlc3QuX1N1aXRlRml4dHVyZVR5cGUuU0hBUkQpCgogICAgZGVmIHRlc3RfZGVjb3JhdGVfZnV6emVyX3VucmVjb2duaXplZF9maXh0dXJlKHNlbGYpOgogICAgICAgIHNlbGYucnVuX3Rlc3QodW5kZXJfdGVzdC5fU3VpdGVGaXh0dXJlVHlwZS5PVEhFUikKPHxmaW1fc3VmZml4fD4KIiIiVW5pdCB0ZXN0cyBmb3IgbXVsdGl2ZXJzaW9uX2RlY29yYXRvci5weSIiIgoKaW1wb3J0IHVuaXR0ZXN0CmZyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgcGF0Y2gKPHxmaW1fZW5kfD4="]
["c1a0ff65bb7b77d9869798913abe35d1c9b68c2d-1","c1a0ff65bb7b77d9869798913abe35d1c9b68c2d","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgo8fGZpbV9ob2xlfD4KIyAgICAgTGFzdCBNb2RpZmllZCAgICAgICA6ICAgICBbMjAxNy0wMy0xOCAwMDoxM10KIyAgICAgRGVzY3JpcHRpb24gICAgICAgICA6ICAgICB1dGlsIGZ1bmN0aW9ucyAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmltcG9ydCBkYXRldGltZQoKZGVmIHJlbW92ZV9zcGFjZShzKToKICAgIHJldHVybiAiXyIuam9pbihzLnN0cmlwKCkuc3BsaXQoKSkKCmRlZiBnZXRfZGF0ZSgpOgogICAgY3VycmVudF90aW1lID0gZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkKICAgIHJldHVybiByZW1vdmVfc3BhY2Uoc3RyKGN1cnJlbnRfdGltZSkpCjx8ZmltX3N1ZmZpeHw+CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojICAgICBGaWxlIE5hbWUgICAgICAgICAgIDogICAgIC4vdXRpbC5weQojICAgICBDcmVhdGVkIEJ5ICAgICAgICAgIDogICAgIHlhbmcKIyAgICAgQ3JlYXRpb24gRGF0ZSAgICAgICA6ICAgICBbMjAxNy0wMi0xNiAyMjozMl0KPHxmaW1fZW5kfD4="]
["c1a0ff65bb7b77d9869798913abe35d1c9b68c2d-2","c1a0ff65bb7b77d9869798913abe35d1c9b68c2d","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAgICAgRmlsZSBOYW1lICAgICAgICAgICA6ICAgICAuL3V0aWwucHkKIyAgICAgQ3JlYXRlZCBCeSAgICAgICAgICA6ICAgICB5YW5nCiMgICAgIENyZWF0aW9uIERhdGUgICAgICAgOiAgICAgWzIwMTctMDItMTYgMjI6MzJdCiMgICAgIExhc3QgTW9kaWZpZWQgICAgICAgOiAgICAgWzIwMTctMDMtMTggMDA6MTNdCiMgICAgIERlc2NyaXB0aW9uICAgICAgICAgOiAgICAgdXRpbCBmdW5jdGlvbnMgCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwppbXBvcnQgZGF0ZXRpbWUKCmRlZiByZW1vdmVfc3BhY2Uocyk6CiAgICByZXR1cm4gIl8iLmpvaW4ocy5zdHJpcCgpLnNwbGl0KCkpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmRlZiBnZXRfZGF0ZSgpOgogICAgY3VycmVudF90aW1lID0gZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkKICAgIHJldHVybiByZW1vdmVfc3BhY2Uoc3RyKGN1cnJlbnRfdGltZSkpCjx8ZmltX2VuZHw+"]
["c1a0ff65bb7b77d9869798913abe35d1c9b68c2d-3","c1a0ff65bb7b77d9869798913abe35d1c9b68c2d","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAgICAgRmlsZSBOYW1lICAgICAgICAgICA6ICAgICAuL3V0aWwucHkKIyAgICAgQ3JlYXRlZCBCeSAgICAgICAgICA6ICAgICB5YW5nCiMgICAgIENyZWF0aW9uIERhdGUgICAgICAgOiAgICAgWzIwMTctMDItMTYgMjI6MzJdCiMgICAgIExhc3QgTW9kaWZpZWQgICAgICAgOiAgICAgWzIwMTctMDMtMTggMDA6MTNdCiMgICAgIERlc2NyaXB0aW9uICAgICAgICAgOiAgICAgdXRpbCBmdW5jdGlvbnMgCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwppbXBvcnQgZGF0ZXRpbWUKCmRlZiByZW1vdmVfc3BhY2Uocyk6CiAgICByZXR1cm4gIl8iLmpvaW4ocy5zdHJpcCgpLnNwbGl0KCkpCgpkZWYgZ2V0X2RhdGUoKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgY3VycmVudF90aW1lID0gZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkKICAgIHJldHVybiByZW1vdmVfc3BhY2Uoc3RyKGN1cnJlbnRfdGltZSkpCjx8ZmltX2VuZHw+"]
["e70f70ac0b70e9160b7d1c18de37ae007514f432-1","e70f70ac0b70e9160b7d1c18de37ae007514f432","PHxmaW1fcHJlZml4fD4KIiIiVGVzdHMgZm9yIHB5dHlwZV9zb3VyY2VfdXRpbHMucHkuIiIiCgppbXBvcnQgb3MKCmZyb20gcHl0eXBlIGltcG9ydCBweXR5cGVfc291cmNlX3V0aWxzCgppbXBvcnQgdW5pdHRlc3QKCgpjbGFzcyBQeXR5cGVTb3VyY2VVdGlsc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICIiIlRlc3QgcHl0eXBlIHNvdXJjZSB1dGlsaXRpZXMuIiIiCgogIGRlZiBzZXRVcChzZWxmKToKICAgIHNlbGYucm9vdCA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKCiAgZGVmIHRlc3RQeXR5cGVTb3VyY2VEaXIoc2VsZik6CiAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdCwgcHl0eXBlX3NvdXJjZV91dGlscy5weXR5cGVfc291cmNlX2RpcigpKQoKICBkZWYgdGVzdEdldEZ1bGxQYXRoKHNlbGYpOgogICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5yb290LCAiZm9vL2JhciIpLAogICAgICAgIHB5dHlwZV9zb3VyY2VfdXRpbHMuZ2V0X2Z1bGxfcGF0aCgiZm9vL2JhciIpKQogICAgc2VsZi5hc3NlcnRFcXVhbCgKPHxmaW1faG9sZXw+CiAgZGVmIHRlc3RMaXN0UHl0eXBlRmlsZXMoc2VsZik6CiAgICBsID0gbGlzdChweXR5cGVfc291cmNlX3V0aWxzLmxpc3RfcHl0eXBlX2ZpbGVzKCJweXRkL3N0ZGxpYi8yIikpCiAgICBzZWxmLmFzc2VydEluKCJjdHlwZXMucHl0ZCIsIGwpCiAgICBzZWxmLmFzc2VydEluKCJjb2xsZWN0aW9ucy5weXRkIiwgbCkKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogIHVuaXR0ZXN0Lm1haW4oKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICIvZm9vL2JhciIsCiAgICAgICAgcHl0eXBlX3NvdXJjZV91dGlscy5nZXRfZnVsbF9wYXRoKCIvZm9vL2JhciIpKQoKPHxmaW1fZW5kfD4="]
["e70f70ac0b70e9160b7d1c18de37ae007514f432-2","e70f70ac0b70e9160b7d1c18de37ae007514f432","PHxmaW1fcHJlZml4fD4KIiIiVGVzdHMgZm9yIHB5dHlwZV9zb3VyY2VfdXRpbHMucHkuIiIiCgppbXBvcnQgb3MKCmZyb20gcHl0eXBlIGltcG9ydCBweXR5cGVfc291cmNlX3V0aWxzCgo8fGZpbV9ob2xlfD4KICAiIiJUZXN0IHB5dHlwZSBzb3VyY2UgdXRpbGl0aWVzLiIiIgoKICBkZWYgc2V0VXAoc2VsZik6CiAgICBzZWxmLnJvb3QgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCgogIGRlZiB0ZXN0UHl0eXBlU291cmNlRGlyKHNlbGYpOgogICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QsIHB5dHlwZV9zb3VyY2VfdXRpbHMucHl0eXBlX3NvdXJjZV9kaXIoKSkKCiAgZGVmIHRlc3RHZXRGdWxsUGF0aChzZWxmKToKICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgb3MucGF0aC5qb2luKHNlbGYucm9vdCwgImZvby9iYXIiKSwKICAgICAgICBweXR5cGVfc291cmNlX3V0aWxzLmdldF9mdWxsX3BhdGgoImZvby9iYXIiKSkKICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgIi9mb28vYmFyIiwKICAgICAgICBweXR5cGVfc291cmNlX3V0aWxzLmdldF9mdWxsX3BhdGgoIi9mb28vYmFyIikpCgogIGRlZiB0ZXN0TGlzdFB5dHlwZUZpbGVzKHNlbGYpOgogICAgbCA9IGxpc3QocHl0eXBlX3NvdXJjZV91dGlscy5saXN0X3B5dHlwZV9maWxlcygicHl0ZC9zdGRsaWIvMiIpKQogICAgc2VsZi5hc3NlcnRJbigiY3R5cGVzLnB5dGQiLCBsKQogICAgc2VsZi5hc3NlcnRJbigiY29sbGVjdGlvbnMucHl0ZCIsIGwpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICB1bml0dGVzdC5tYWluKCkKPHxmaW1fc3VmZml4fD4KaW1wb3J0IHVuaXR0ZXN0CgoKY2xhc3MgUHl0eXBlU291cmNlVXRpbHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKPHxmaW1fZW5kfD4="]
["e70f70ac0b70e9160b7d1c18de37ae007514f432-3","e70f70ac0b70e9160b7d1c18de37ae007514f432","PHxmaW1fcHJlZml4fD4KIiIiVGVzdHMgZm9yIHB5dHlwZV9zb3VyY2VfdXRpbHMucHkuIiIiCgppbXBvcnQgb3MKCmZyb20gcHl0eXBlIGltcG9ydCBweXR5cGVfc291cmNlX3V0aWxzCgppbXBvcnQgdW5pdHRlc3QKCgpjbGFzcyBQeXR5cGVTb3VyY2VVdGlsc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICIiIlRlc3QgcHl0eXBlIHNvdXJjZSB1dGlsaXRpZXMuIiIiCgogIGRlZiBzZXRVcChzZWxmKToKICAgIHNlbGYucm9vdCA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKCiAgZGVmIHRlc3RQeXR5cGVTb3VyY2VEaXIoc2VsZik6CiAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdCwgcHl0eXBlX3NvdXJjZV91dGlscy5weXR5cGVfc291cmNlX2RpcigpKQoKICBkZWYgdGVzdEdldEZ1bGxQYXRoKHNlbGYpOgogICAgc2VsZi5hc3NlcnRFcXVhbCgKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIG9zLnBhdGguam9pbihzZWxmLnJvb3QsICJmb28vYmFyIiksCiAgICAgICAgcHl0eXBlX3NvdXJjZV91dGlscy5nZXRfZnVsbF9wYXRoKCJmb28vYmFyIikpCjx8ZmltX2VuZHw+"]
["da5f06457319c4953b119c20b9483cf30f9e9440-1","da5f06457319c4953b119c20b9483cf30f9e9440","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBwYXJtZWQgYXMgcG1kCmZyb20gcGRiNGFtYmVyLmJ1aWxkZXIucHl0cmFqX2J1aWxkIGltcG9ydCAoYnVpbGRfYmRuYSwgYnVpbGRfYWRuYSwgYnVpbGRfYXJuYSkKZnJvbSBwZGI0YW1iZXIuYnVpbGRlciBpbXBvcnQgbmFiCmZyb20gdXRpbHMgaW1wb3J0IHRlbXBmb2xkZXIKCgpkZWYgdGVzdF9uYWIoKToKICAgIGZuID0gJ251Yy5wZGInCiAgICB3aXRoIHRlbXBmb2xkZXIoKToKICAgICAgICBuYWIucnVuKCIiIgogICAgICAgIG1vbGVjdWxlIG07IAogICAgICAgIG0gPSBmZF9oZWxpeCggImFiZG5hIiwgImFhYWFhYWFhYWEiLCAiZG5hIiApOwogICAgICAgIHB1dHBkYigibnVjLnBkYiIsIG0sICItd3dwZGIiKTsKICAgICAgICAiIiIpCgogICAgICAgIHJvb3QgPSAndG1wX2phbWJlcicKICAgICAgICBhc3NlcnQgbm90IG9zLnBhdGguZXhpc3RzKHJvb3QgKyAnLm5hYicpCiAgICAgICAgYXNzZXJ0IG5vdCBvcy5wYXRoLmV4aXN0cyhyb290ICsgJy5jJykKICAgICAgICBhc3NlcnQgbm90IG9zLnBhdGguZXhpc3RzKHJvb3QgKyAnLm91dCcpCgo8fGZpbV9ob2xlfD4KZGVmIHRlc3RfbmFiX2JkbmEoKToKICAgIHdpdGggdGVtcGZvbGRlcigpOgogICAgICAgIHBhcm0gPSBidWlsZF9iZG5hKCdBQUFBQUFBQUFBJykKICAgICAgICBhc3NlcnQgbGVuKHBhcm0uYXRvbXMpID09IDYzOAoKCmRlZiB0ZXN0X25hYl9hZG5hKCk6CiAgICB3aXRoIHRlbXBmb2xkZXIoKToKICAgICAgICBwYXJtID0gYnVpbGRfYWRuYSgnQUFBQUFBQUFBQScpCiAgICAgICAgYXNzZXJ0IGxlbihwYXJtLmF0b21zKSA9PSA2MzgKCgpkZWYgdGVzdF9uYWJfYXJuYSgpOgogICAgd2l0aCB0ZW1wZm9sZGVyKCk6CiAgICAgICAgcGFybSA9IGJ1aWxkX2FybmEoJ0FBQUFBQUFBQUEnKQogICAgICAgIHByaW50KHBhcm0uYXRvbXMpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcGFybSA9IHBtZC5sb2FkX2ZpbGUoZm4pCiAgICAgICAgYXNzZXJ0IGxlbihwYXJtLmF0b21zKSA9PSA2MzgKCgo8fGZpbV9lbmR8Pg=="]
["da5f06457319c4953b119c20b9483cf30f9e9440-2","da5f06457319c4953b119c20b9483cf30f9e9440","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBwYXJtZWQgYXMgcG1kCmZyb20gcGRiNGFtYmVyLmJ1aWxkZXIucHl0cmFqX2J1aWxkIGltcG9ydCAoYnVpbGRfYmRuYSwgYnVpbGRfYWRuYSwgYnVpbGRfYXJuYSkKZnJvbSBwZGI0YW1iZXIuYnVpbGRlciBpbXBvcnQgbmFiCmZyb20gdXRpbHMgaW1wb3J0IHRlbXBmb2xkZXIKCgpkZWYgdGVzdF9uYWIoKToKICAgIGZuID0gJ251Yy5wZGInCiAgICB3aXRoIHRlbXBmb2xkZXIoKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIG5hYi5ydW4oIiIiCiAgICAgICAgbW9sZWN1bGUgbTsgCiAgICAgICAgbSA9IGZkX2hlbGl4KCAiYWJkbmEiLCAiYWFhYWFhYWFhYSIsICJkbmEiICk7CiAgICAgICAgcHV0cGRiKCJudWMucGRiIiwgbSwgIi13d3BkYiIpOwo8fGZpbV9lbmR8Pg=="]
["97775dbfab02b95151f3d41e1eb3bf8db5ded69a-1","97775dbfab02b95151f3d41e1eb3bf8db5ded69a","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBDb3B5cmlnaHQgMjAyMCBHcmVlbiBWYWxsZXkgQmVsZ2l1bSBOVgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCiMgQEBsaWNlbnNlX3ZlcnNpb246MS43QEAKCmZyb20gcm9nZXJ0aGF0LnV0aWxzLnRyYW5zYWN0aW9ucyBpbXBvcnQgb25fdHJhbnNfY29tbWl0dGVkLCBydW5faW5fdHJhbnNhY3Rpb24KZnJvbSBnb29nbGUuYXBwZW5naW5lLmFwaS5kYXRhc3RvcmVfZXJyb3JzIGltcG9ydCBUcmFuc2FjdGlvbkZhaWxlZEVycm9yCjx8ZmltX2hvbGV8PgpjbGFzcyBUcmFuc2FjdGlvbkFjdGlvbnNDb3VudChkYi5Nb2RlbCk6CiAgICBjb3VudCA9IGRiLkludGVnZXJQcm9wZXJ0eSgpCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgY3JlYXRlX2tleShjbHMpOgogICAgICAgIHJldHVybiBkYi5LZXkuZnJvbV9wYXRoKGNscy5raW5kKCksICJUcmFuc2FjdGlvbkFjdGlvbnNDb3VudCIpCgpjbGFzcyBUZXN0KG1jX3VuaXR0ZXN0LlRlc3RDYXNlKToKCgogICAgZGVmIHRlc3RUcmFuc2FjdGlvbkFjdGlvbnMoc2VsZik6CgogICAgICAgIGRlZiB0cmFucygpOgogICAgICAgICAgICB0cmFuc0FjdGlvbnNDb3VudCA9IFRyYW5zYWN0aW9uQWN0aW9uc0NvdW50KGtleT1UcmFuc2FjdGlvbkFjdGlvbnNDb3VudC5jcmVhdGVfa2V5KCkpCiAgICAgICAgICAgIHRyYW5zQWN0aW9uc0NvdW50LmNvdW50ID0gMAogICAgICAgICAgICB0cmFuc0FjdGlvbnNDb3VudC5wdXQoKQogICAgICAgICAgICBvbl90cmFuc19jb21taXR0ZWQodXBkYXRlX2NvdW50LCBGYWxzZSkKICAgICAgICAgICAgb25fdHJhbnNfY29tbWl0dGVkKHVwZGF0ZV9jb3VudCwgRmFsc2UpCiAgICAgICAgICAgIG9uX3RyYW5zX2NvbW1pdHRlZCh1cGRhdGVfY291bnQsIFRydWUpCiAgICAgICAgICAgIG9uX3RyYW5zX2NvbW1pdHRlZCh1cGRhdGVfY291bnQsIEZhbHNlKQogICAgICAgICAgICBvbl90cmFuc19jb21taXR0ZWQodXBkYXRlX2NvdW50LCBGYWxzZSkKCiAgICAgICAgZGVmIHVwZGF0ZV9jb3VudChzaG91bGRfcmFpc2UpOgogICAgICAgICAgICB0cmFuc0FjdGlvbnNDb3VudCA9IFRyYW5zYWN0aW9uQWN0aW9uc0NvdW50LmdldChUcmFuc2FjdGlvbkFjdGlvbnNDb3VudC5jcmVhdGVfa2V5KCkpCiAgICAgICAgICAgIHRyYW5zQWN0aW9uc0NvdW50LmNvdW50ICs9IDEKICAgICAgICAgICAgaWYgc2hvdWxkX3JhaXNlOgogICAgICAgICAgICAgICAgcmFpc2UgVHJhbnNhY3Rpb25GYWlsZWRFcnJvcigpCiAgICAgICAgICAgIHRyYW5zQWN0aW9uc0NvdW50LnB1dCgpCgogICAgICAgIHJ1bl9pbl90cmFuc2FjdGlvbih0cmFucykKCgogICAgICAgIGRlZiBjaGVja19jb3VudCgpOgogICAgICAgICAgICB0cmFuc0FjdGlvbnNDb3VudCA9IFRyYW5zYWN0aW9uQWN0aW9uc0NvdW50LmdldChUcmFuc2FjdGlvbkFjdGlvbnNDb3VudC5jcmVhdGVfa2V5KCkpCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNCwgdHJhbnNBY3Rpb25zQ291bnQuY291bnQpCiAgICAgICAgcnVuX2luX3RyYW5zYWN0aW9uKGNoZWNrX2NvdW50KQoKCiAgICBkZWYgdGVzdFRyYW5zYWN0aW9uQWN0aW9uc1dpdGhOZXN0ZWRUcmFucyhzZWxmKToKCiAgICAgICAgcmFpc2VkID0gW0ZhbHNlXSAgIyB3ZSBvbmx5IHdhbnQgdG8gcmFpc2UgMSB0aW1lCgogICAgICAgIGRlZiB0cmFucygpOgogICAgICAgICAgICB0cmFuc0FjdGlvbnNDb3VudCA9IFRyYW5zYWN0aW9uQWN0aW9uc0NvdW50KGtleT1UcmFuc2FjdGlvbkFjdGlvbnNDb3VudC5jcmVhdGVfa2V5KCkpCiAgICAgICAgICAgIHRyYW5zQWN0aW9uc0NvdW50LmNvdW50ID0gMAogICAgICAgICAgICB0cmFuc0FjdGlvbnNDb3VudC5wdXQoKQogICAgICAgICAgICBvbl90cmFuc19jb21taXR0ZWQodXBkYXRlX2NvdW50LCBGYWxzZSkKICAgICAgICAgICAgb25fdHJhbnNfY29tbWl0dGVkKHVwZGF0ZV9jb3VudCwgRmFsc2UpCiAgICAgICAgICAgIG9uX3RyYW5zX2NvbW1pdHRlZCh1cGRhdGVfY291bnQsIFRydWUpCiAgICAgICAgICAgIG9uX3RyYW5zX2NvbW1pdHRlZCh1cGRhdGVfY291bnQsIEZhbHNlKQogICAgICAgICAgICBvbl90cmFuc19jb21taXR0ZWQodXBkYXRlX2NvdW50LCBGYWxzZSkKCiAgICAgICAgZGVmIHVwZGF0ZV9jb3VudChzaG91bGRfcmFpc2UpOgogICAgICAgICAgICBkZWYgaW5uZXJfdHJhbnMoc2hvdWxkX3JhaXNlKToKICAgICAgICAgICAgICAgIHRyYW5zQWN0aW9uc0NvdW50ID0gVHJhbnNhY3Rpb25BY3Rpb25zQ291bnQuZ2V0KFRyYW5zYWN0aW9uQWN0aW9uc0NvdW50LmNyZWF0ZV9rZXkoKSkKICAgICAgICAgICAgICAgIHRyYW5zQWN0aW9uc0NvdW50LmNvdW50ICs9IDEKICAgICAgICAgICAgICAgIGlmIG5vdCByYWlzZWRbMF0gYW5kIHNob3VsZF9yYWlzZToKICAgICAgICAgICAgICAgICAgICByYWlzZWRbMF0gPSBUcnVlCiAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHJhbnNhY3Rpb25GYWlsZWRFcnJvcigpCiAgICAgICAgICAgICAgICB0cmFuc0FjdGlvbnNDb3VudC5wdXQoKQogICAgICAgICAgICByZXR1cm4gcnVuX2luX3RyYW5zYWN0aW9uKGlubmVyX3RyYW5zLCBGYWxzZSwgc2hvdWxkX3JhaXNlKQoKICAgICAgICBydW5faW5fdHJhbnNhY3Rpb24odHJhbnMpCgogICAgICAgIGRlZiBjaGVja19jb3VudCgpOgogICAgICAgICAgICB0cmFuc0FjdGlvbnNDb3VudCA9IFRyYW5zYWN0aW9uQWN0aW9uc0NvdW50LmdldChUcmFuc2FjdGlvbkFjdGlvbnNDb3VudC5jcmVhdGVfa2V5KCkpCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNSwgdHJhbnNBY3Rpb25zQ291bnQuY291bnQpCiAgICAgICAgcnVuX2luX3RyYW5zYWN0aW9uKGNoZWNrX2NvdW50KQo8fGZpbV9zdWZmaXh8Pgpmcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0IGltcG9ydCBkYgppbXBvcnQgbWNfdW5pdHRlc3QKCgo8fGZpbV9lbmR8Pg=="]
["97775dbfab02b95151f3d41e1eb3bf8db5ded69a-2","97775dbfab02b95151f3d41e1eb3bf8db5ded69a","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBDb3B5cmlnaHQgMjAyMCBHcmVlbiBWYWxsZXkgQmVsZ2l1bSBOVgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCiMgQEBsaWNlbnNlX3ZlcnNpb246MS43QEAKCmZyb20gcm9nZXJ0aGF0LnV0aWxzLnRyYW5zYWN0aW9ucyBpbXBvcnQgb25fdHJhbnNfY29tbWl0dGVkLCBydW5faW5fdHJhbnNhY3Rpb24KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIGdvb2dsZS5hcHBlbmdpbmUuYXBpLmRhdGFzdG9yZV9lcnJvcnMgaW1wb3J0IFRyYW5zYWN0aW9uRmFpbGVkRXJyb3IKZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgZGIKaW1wb3J0IG1jX3VuaXR0ZXN0Cgo8fGZpbV9lbmR8Pg=="]
["97775dbfab02b95151f3d41e1eb3bf8db5ded69a-3","97775dbfab02b95151f3d41e1eb3bf8db5ded69a","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBDb3B5cmlnaHQgMjAyMCBHcmVlbiBWYWxsZXkgQmVsZ2l1bSBOVgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCiMgQEBsaWNlbnNlX3ZlcnNpb246MS43QEAKCmZyb20gcm9nZXJ0aGF0LnV0aWxzLnRyYW5zYWN0aW9ucyBpbXBvcnQgb25fdHJhbnNfY29tbWl0dGVkLCBydW5faW5fdHJhbnNhY3Rpb24KZnJvbSBnb29nbGUuYXBwZW5naW5lLmFwaS5kYXRhc3RvcmVfZXJyb3JzIGltcG9ydCBUcmFuc2FjdGlvbkZhaWxlZEVycm9yCmZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0IGRiCmltcG9ydCBtY191bml0dGVzdAoKCmNsYXNzIFRyYW5zYWN0aW9uQWN0aW9uc0NvdW50KGRiLk1vZGVsKToKICAgIGNvdW50ID0gZGIuSW50ZWdlclByb3BlcnR5KCkKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBjcmVhdGVfa2V5KGNscyk6CiAgICAgICAgcmV0dXJuIGRiLktleS5mcm9tX3BhdGgoY2xzLmtpbmQoKSwgIlRyYW5zYWN0aW9uQWN0aW9uc0NvdW50IikKCmNsYXNzIFRlc3QobWNfdW5pdHRlc3QuVGVzdENhc2UpOgoKCiAgICBkZWYgdGVzdFRyYW5zYWN0aW9uQWN0aW9ucyhzZWxmKToKCiAgICAgICAgZGVmIHRyYW5zKCk6CiAgICAgICAgICAgIHRyYW5zQWN0aW9uc0NvdW50ID0gVHJhbnNhY3Rpb25BY3Rpb25zQ291bnQoa2V5PVRyYW5zYWN0aW9uQWN0aW9uc0NvdW50LmNyZWF0ZV9rZXkoKSkKICAgICAgICAgICAgdHJhbnNBY3Rpb25zQ291bnQuY291bnQgPSAwCiAgICAgICAgICAgIHRyYW5zQWN0aW9uc0NvdW50LnB1dCgpCiAgICAgICAgICAgIG9uX3RyYW5zX2NvbW1pdHRlZCh1cGRhdGVfY291bnQsIEZhbHNlKQogICAgICAgICAgICBvbl90cmFuc19jb21taXR0ZWQodXBkYXRlX2NvdW50LCBGYWxzZSkKICAgICAgICAgICAgb25fdHJhbnNfY29tbWl0dGVkKHVwZGF0ZV9jb3VudCwgVHJ1ZSkKICAgICAgICAgICAgb25fdHJhbnNfY29tbWl0dGVkKHVwZGF0ZV9jb3VudCwgRmFsc2UpCiAgICAgICAgICAgIG9uX3RyYW5zX2NvbW1pdHRlZCh1cGRhdGVfY291bnQsIEZhbHNlKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGRlZiB1cGRhdGVfY291bnQoc2hvdWxkX3JhaXNlKToKICAgICAgICAgICAgdHJhbnNBY3Rpb25zQ291bnQgPSBUcmFuc2FjdGlvbkFjdGlvbnNDb3VudC5nZXQoVHJhbnNhY3Rpb25BY3Rpb25zQ291bnQuY3JlYXRlX2tleSgpKQogICAgICAgICAgICB0cmFuc0FjdGlvbnNDb3VudC5jb3VudCArPSAxCiAgICAgICAgICAgIGlmIHNob3VsZF9yYWlzZToKPHxmaW1fZW5kfD4="]
["97775dbfab02b95151f3d41e1eb3bf8db5ded69a-4","97775dbfab02b95151f3d41e1eb3bf8db5ded69a","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBDb3B5cmlnaHQgMjAyMCBHcmVlbiBWYWxsZXkgQmVsZ2l1bSBOVgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCiMgQEBsaWNlbnNlX3ZlcnNpb246MS43QEAKCmZyb20gcm9nZXJ0aGF0LnV0aWxzLnRyYW5zYWN0aW9ucyBpbXBvcnQgb25fdHJhbnNfY29tbWl0dGVkLCBydW5faW5fdHJhbnNhY3Rpb24KZnJvbSBnb29nbGUuYXBwZW5naW5lLmFwaS5kYXRhc3RvcmVfZXJyb3JzIGltcG9ydCBUcmFuc2FjdGlvbkZhaWxlZEVycm9yCmZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0IGRiCmltcG9ydCBtY191bml0dGVzdAoKCmNsYXNzIFRyYW5zYWN0aW9uQWN0aW9uc0NvdW50KGRiLk1vZGVsKToKICAgIGNvdW50ID0gZGIuSW50ZWdlclByb3BlcnR5KCkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGNyZWF0ZV9rZXkoY2xzKToKICAgICAgICByZXR1cm4gZGIuS2V5LmZyb21fcGF0aChjbHMua2luZCgpLCAiVHJhbnNhY3Rpb25BY3Rpb25zQ291bnQiKQoKPHxmaW1fZW5kfD4="]
["97775dbfab02b95151f3d41e1eb3bf8db5ded69a-5","97775dbfab02b95151f3d41e1eb3bf8db5ded69a","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBDb3B5cmlnaHQgMjAyMCBHcmVlbiBWYWxsZXkgQmVsZ2l1bSBOVgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCiMgQEBsaWNlbnNlX3ZlcnNpb246MS43QEAKCmZyb20gcm9nZXJ0aGF0LnV0aWxzLnRyYW5zYWN0aW9ucyBpbXBvcnQgb25fdHJhbnNfY29tbWl0dGVkLCBydW5faW5fdHJhbnNhY3Rpb24KZnJvbSBnb29nbGUuYXBwZW5naW5lLmFwaS5kYXRhc3RvcmVfZXJyb3JzIGltcG9ydCBUcmFuc2FjdGlvbkZhaWxlZEVycm9yCmZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0IGRiCmltcG9ydCBtY191bml0dGVzdAoKCmNsYXNzIFRyYW5zYWN0aW9uQWN0aW9uc0NvdW50KGRiLk1vZGVsKToKICAgIGNvdW50ID0gZGIuSW50ZWdlclByb3BlcnR5KCkKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBjcmVhdGVfa2V5KGNscyk6CiAgICAgICAgcmV0dXJuIGRiLktleS5mcm9tX3BhdGgoY2xzLmtpbmQoKSwgIlRyYW5zYWN0aW9uQWN0aW9uc0NvdW50IikKCmNsYXNzIFRlc3QobWNfdW5pdHRlc3QuVGVzdENhc2UpOgoKCiAgICBkZWYgdGVzdFRyYW5zYWN0aW9uQWN0aW9ucyhzZWxmKToKCiAgICAgICAgZGVmIHRyYW5zKCk6CiAgICAgICAgICAgIHRyYW5zQWN0aW9uc0NvdW50ID0gVHJhbnNhY3Rpb25BY3Rpb25zQ291bnQoa2V5PVRyYW5zYWN0aW9uQWN0aW9uc0NvdW50LmNyZWF0ZV9rZXkoKSkKICAgICAgICAgICAgdHJhbnNBY3Rpb25zQ291bnQuY291bnQgPSAwCiAgICAgICAgICAgIHRyYW5zQWN0aW9uc0NvdW50LnB1dCgpCiAgICAgICAgICAgIG9uX3RyYW5zX2NvbW1pdHRlZCh1cGRhdGVfY291bnQsIEZhbHNlKQogICAgICAgICAgICBvbl90cmFuc19jb21taXR0ZWQodXBkYXRlX2NvdW50LCBGYWxzZSkKICAgICAgICAgICAgb25fdHJhbnNfY29tbWl0dGVkKHVwZGF0ZV9jb3VudCwgVHJ1ZSkKICAgICAgICAgICAgb25fdHJhbnNfY29tbWl0dGVkKHVwZGF0ZV9jb3VudCwgRmFsc2UpCiAgICAgICAgICAgIG9uX3RyYW5zX2NvbW1pdHRlZCh1cGRhdGVfY291bnQsIEZhbHNlKQoKICAgICAgICBkZWYgdXBkYXRlX2NvdW50KHNob3VsZF9yYWlzZSk6CiAgICAgICAgICAgIHRyYW5zQWN0aW9uc0NvdW50ID0gVHJhbnNhY3Rpb25BY3Rpb25zQ291bnQuZ2V0KFRyYW5zYWN0aW9uQWN0aW9uc0NvdW50LmNyZWF0ZV9rZXkoKSkKICAgICAgICAgICAgdHJhbnNBY3Rpb25zQ291bnQuY291bnQgKz0gMQogICAgICAgICAgICBpZiBzaG91bGRfcmFpc2U6CiAgICAgICAgICAgICAgICByYWlzZSBUcmFuc2FjdGlvbkZhaWxlZEVycm9yKCkKICAgICAgICAgICAgdHJhbnNBY3Rpb25zQ291bnQucHV0KCkKCiAgICAgICAgcnVuX2luX3RyYW5zYWN0aW9uKHRyYW5zKQoKCiAgICAgICAgZGVmIGNoZWNrX2NvdW50KCk6CiAgICAgICAgICAgIHRyYW5zQWN0aW9uc0NvdW50ID0gVHJhbnNhY3Rpb25BY3Rpb25zQ291bnQuZ2V0KFRyYW5zYWN0aW9uQWN0aW9uc0NvdW50LmNyZWF0ZV9rZXkoKSkKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0LCB0cmFuc0FjdGlvbnNDb3VudC5jb3VudCkKICAgICAgICBydW5faW5fdHJhbnNhY3Rpb24oY2hlY2tfY291bnQpCgoKICAgIGRlZiB0ZXN0VHJhbnNhY3Rpb25BY3Rpb25zV2l0aE5lc3RlZFRyYW5zKHNlbGYpOgoKICAgICAgICByYWlzZWQgPSBbRmFsc2VdICAjIHdlIG9ubHkgd2FudCB0byByYWlzZSAxIHRpbWUKCiAgICAgICAgZGVmIHRyYW5zKCk6CiAgICAgICAgICAgIHRyYW5zQWN0aW9uc0NvdW50ID0gVHJhbnNhY3Rpb25BY3Rpb25zQ291bnQoa2V5PVRyYW5zYWN0aW9uQWN0aW9uc0NvdW50LmNyZWF0ZV9rZXkoKSkKICAgICAgICAgICAgdHJhbnNBY3Rpb25zQ291bnQuY291bnQgPSAwCiAgICAgICAgICAgIHRyYW5zQWN0aW9uc0NvdW50LnB1dCgpCiAgICAgICAgICAgIG9uX3RyYW5zX2NvbW1pdHRlZCh1cGRhdGVfY291bnQsIEZhbHNlKQogICAgICAgICAgICBvbl90cmFuc19jb21taXR0ZWQodXBkYXRlX2NvdW50LCBGYWxzZSkKICAgICAgICAgICAgb25fdHJhbnNfY29tbWl0dGVkKHVwZGF0ZV9jb3VudCwgVHJ1ZSkKICAgICAgICAgICAgb25fdHJhbnNfY29tbWl0dGVkKHVwZGF0ZV9jb3VudCwgRmFsc2UpCiAgICAgICAgICAgIG9uX3RyYW5zX2NvbW1pdHRlZCh1cGRhdGVfY291bnQsIEZhbHNlKQoKICAgICAgICBkZWYgdXBkYXRlX2NvdW50KHNob3VsZF9yYWlzZSk6CiAgICAgICAgICAgIGRlZiBpbm5lcl90cmFucyhzaG91bGRfcmFpc2UpOgogICAgICAgICAgICAgICAgdHJhbnNBY3Rpb25zQ291bnQgPSBUcmFuc2FjdGlvbkFjdGlvbnNDb3VudC5nZXQoVHJhbnNhY3Rpb25BY3Rpb25zQ291bnQuY3JlYXRlX2tleSgpKQogICAgICAgICAgICAgICAgdHJhbnNBY3Rpb25zQ291bnQuY291bnQgKz0gMQogICAgICAgICAgICAgICAgaWYgbm90IHJhaXNlZFswXSBhbmQgc2hvdWxkX3JhaXNlOgogICAgICAgICAgICAgICAgICAgIHJhaXNlZFswXSA9IFRydWUKICAgICAgICAgICAgICAgICAgICByYWlzZSBUcmFuc2FjdGlvbkZhaWxlZEVycm9yKCkKICAgICAgICAgICAgICAgIHRyYW5zQWN0aW9uc0NvdW50LnB1dCgpCiAgICAgICAgICAgIHJldHVybiBydW5faW5fdHJhbnNhY3Rpb24oaW5uZXJfdHJhbnMsIEZhbHNlLCBzaG91bGRfcmFpc2UpCgogICAgICAgIHJ1bl9pbl90cmFuc2FjdGlvbih0cmFucykKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBkZWYgY2hlY2tfY291bnQoKToKICAgICAgICAgICAgdHJhbnNBY3Rpb25zQ291bnQgPSBUcmFuc2FjdGlvbkFjdGlvbnNDb3VudC5nZXQoVHJhbnNhY3Rpb25BY3Rpb25zQ291bnQuY3JlYXRlX2tleSgpKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDUsIHRyYW5zQWN0aW9uc0NvdW50LmNvdW50KQogICAgICAgIHJ1bl9pbl90cmFuc2FjdGlvbihjaGVja19jb3VudCkKPHxmaW1fZW5kfD4="]
["da0104a28804a798d48db872bc44ef7633ee8f03-1","da0104a28804a798d48db872bc44ef7633ee8f03","PHxmaW1fcHJlZml4fD4KZGVmIGxvZyhmdW5jKToKICAgIGRlZiBpbm5lcigqYXJncyk6CiAgICAgICAgcHJpbnQoZnVuYy5fX25hbWVfXywgZidhcmdzOiB7YXJnc30nKQogICAgICAgIHJldHVybiBmdW5jKCphcmdzKQoKICAgIHJldHVybiBpbm5lcgoKCkBsb2cKZGVmIHNvbWEoeCwgeSk6CiAgICByZXR1cm4geCArIHkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKcHJpbnQoc29tYSgyLCAyKSkKPHxmaW1fZW5kfD4="]
["da0104a28804a798d48db872bc44ef7633ee8f03-2","da0104a28804a798d48db872bc44ef7633ee8f03","PHxmaW1fcHJlZml4fD4KZGVmIGxvZyhmdW5jKToKICAgIGRlZiBpbm5lcigqYXJncyk6CiAgICAgICAgcHJpbnQoZnVuYy5fX25hbWVfXywgZidhcmdzOiB7YXJnc30nKQogICAgICAgIHJldHVybiBmdW5jKCphcmdzKQoKICAgIHJldHVybiBpbm5lcgoKCkBsb2cKZGVmIHNvbWEoeCwgeSk6Cjx8ZmltX2hvbGV8PgpwcmludChzb21hKDIsIDIpKQo8fGZpbV9zdWZmaXh8PgogICAgcmV0dXJuIHggKyB5Cgo8fGZpbV9lbmR8Pg=="]
["97b62d59f18e9464445235bc43406909016c758c-1","97b62d59f18e9464445235bc43406909016c758c","PHxmaW1fcHJlZml4fD4KJycnCkNyZWF0ZWQgb24gMjAxNuW5tDLmnIgyOeaXpQo8fGZpbV9ob2xlfD4KICAgIGlmIG51bXM6CiAgICAgICAgcG9zID0gcGFydGl0aW9uKG51bXMsIDAsIGxlbihudW1zKS0xKQogICAgICAgIGlmIGsgPiBwb3MrMToKICAgICAgICAgICAgcmV0dXJuIGZpbmRLdGhMYXJnZXN0KG51bXNbcG9zKzE6XSwgay1wb3MtMSkKICAgICAgICBlbGlmIGsgPCBwb3MrMToKICAgICAgICAgICAgcmV0dXJuIGZpbmRLdGhMYXJnZXN0KG51bXNbOnBvc10sIGspCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIG51bXNbcG9zXQoKIyBjaG9vc2UgdGhlIHJpZ2h0LW1vc3QgZWxlbWVudCBhcyBwaXZvdCAgIApkZWYgcGFydGl0aW9uKCBudW1zLCBsLCByKToKICAgIGxvdyA9IGwKICAgIHdoaWxlIGwgPCByOgogICAgICAgIGlmIG51bXNbbF0gPiBudW1zW3JdOgogICAgICAgICAgICBudW1zW2xdLCBudW1zW2xvd10gPSBudW1zW2xvd10sIG51bXNbbF0KICAgICAgICAgICAgbG93ICs9IDEKICAgICAgICBsICs9IDEKICAgIG51bXNbbG93XSwgbnVtc1tyXSA9IG51bXNbcl0sIG51bXNbbG93XQogICAgcmV0dXJuIGxvdwpudW1zPVszLDEsNCw1LDYsMiw4LDcsNV0KcHJpbnQoZmluZEt0aExhcmdlc3QobnVtcywgMykpCjx8ZmltX3N1ZmZpeHw+CgpAYXV0aG9yOiBEYXJyZW4KJycnCmRlZiBmaW5kS3RoTGFyZ2VzdCggbnVtcywgayk6Cjx8ZmltX2VuZHw+"]
["97b62d59f18e9464445235bc43406909016c758c-2","97b62d59f18e9464445235bc43406909016c758c","PHxmaW1fcHJlZml4fD4KJycnCkNyZWF0ZWQgb24gMjAxNuW5tDLmnIgyOeaXpQoKQGF1dGhvcjogRGFycmVuCicnJwpkZWYgZmluZEt0aExhcmdlc3QoIG51bXMsIGspOgogICAgaWYgbnVtczoKICAgICAgICBwb3MgPSBwYXJ0aXRpb24obnVtcywgMCwgbGVuKG51bXMpLTEpCiAgICAgICAgaWYgayA+IHBvcysxOgogICAgICAgICAgICByZXR1cm4gZmluZEt0aExhcmdlc3QobnVtc1twb3MrMTpdLCBrLXBvcy0xKQogICAgICAgIGVsaWYgayA8IHBvcysxOgogICAgICAgICAgICByZXR1cm4gZmluZEt0aExhcmdlc3QobnVtc1s6cG9zXSwgaykKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gbnVtc1twb3NdCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgY2hvb3NlIHRoZSByaWdodC1tb3N0IGVsZW1lbnQgYXMgcGl2b3QgICAKZGVmIHBhcnRpdGlvbiggbnVtcywgbCwgcik6CiAgICBsb3cgPSBsCiAgICB3aGlsZSBsIDwgcjoKPHxmaW1fZW5kfD4="]
["97b62d59f18e9464445235bc43406909016c758c-3","97b62d59f18e9464445235bc43406909016c758c","PHxmaW1fcHJlZml4fD4KJycnCkNyZWF0ZWQgb24gMjAxNuW5tDLmnIgyOeaXpQoKQGF1dGhvcjogRGFycmVuCicnJwpkZWYgZmluZEt0aExhcmdlc3QoIG51bXMsIGspOgogICAgaWYgbnVtczoKICAgICAgICBwb3MgPSBwYXJ0aXRpb24obnVtcywgMCwgbGVuKG51bXMpLTEpCiAgICAgICAgaWYgayA+IHBvcysxOgogICAgICAgICAgICByZXR1cm4gZmluZEt0aExhcmdlc3QobnVtc1twb3MrMTpdLCBrLXBvcy0xKQogICAgICAgIGVsaWYgayA8IHBvcysxOgogICAgICAgICAgICByZXR1cm4gZmluZEt0aExhcmdlc3QobnVtc1s6cG9zXSwgaykKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gbnVtc1twb3NdCjx8ZmltX2hvbGV8PgogICAgd2hpbGUgbCA8IHI6CiAgICAgICAgaWYgbnVtc1tsXSA+IG51bXNbcl06CiAgICAgICAgICAgIG51bXNbbF0sIG51bXNbbG93XSA9IG51bXNbbG93XSwgbnVtc1tsXQogICAgICAgICAgICBsb3cgKz0gMQogICAgICAgIGwgKz0gMQogICAgbnVtc1tsb3ddLCBudW1zW3JdID0gbnVtc1tyXSwgbnVtc1tsb3ddCiAgICByZXR1cm4gbG93Cm51bXM9WzMsMSw0LDUsNiwyLDgsNyw1XQpwcmludChmaW5kS3RoTGFyZ2VzdChudW1zLCAzKSkKPHxmaW1fc3VmZml4fD4KCiMgY2hvb3NlIHRoZSByaWdodC1tb3N0IGVsZW1lbnQgYXMgcGl2b3QgICAKZGVmIHBhcnRpdGlvbiggbnVtcywgbCwgcik6CiAgICBsb3cgPSBsCjx8ZmltX2VuZHw+"]
["97b62d59f18e9464445235bc43406909016c758c-4","97b62d59f18e9464445235bc43406909016c758c","PHxmaW1fcHJlZml4fD4KJycnCkNyZWF0ZWQgb24gMjAxNuW5tDLmnIgyOeaXpQo8fGZpbV9ob2xlfD4KICAgIGlmIG51bXM6CiAgICAgICAgcG9zID0gcGFydGl0aW9uKG51bXMsIDAsIGxlbihudW1zKS0xKQogICAgICAgIGlmIGsgPiBwb3MrMToKICAgICAgICAgICAgcmV0dXJuIGZpbmRLdGhMYXJnZXN0KG51bXNbcG9zKzE6XSwgay1wb3MtMSkKICAgICAgICBlbGlmIGsgPCBwb3MrMToKICAgICAgICAgICAgcmV0dXJuIGZpbmRLdGhMYXJnZXN0KG51bXNbOnBvc10sIGspCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIG51bXNbcG9zXQoKIyBjaG9vc2UgdGhlIHJpZ2h0LW1vc3QgZWxlbWVudCBhcyBwaXZvdCAgIApkZWYgcGFydGl0aW9uKCBudW1zLCBsLCByKToKICAgIGxvdyA9IGwKICAgIHdoaWxlIGwgPCByOgogICAgICAgIGlmIG51bXNbbF0gPiBudW1zW3JdOgogICAgICAgICAgICBudW1zW2xdLCBudW1zW2xvd10gPSBudW1zW2xvd10sIG51bXNbbF0KICAgICAgICAgICAgbG93ICs9IDEKICAgICAgICBsICs9IDEKICAgIG51bXNbbG93XSwgbnVtc1tyXSA9IG51bXNbcl0sIG51bXNbbG93XQogICAgcmV0dXJuIGxvdwpudW1zPVszLDEsNCw1LDYsMiw4LDcsNV0KcHJpbnQoZmluZEt0aExhcmdlc3QobnVtcywgMykpCjx8ZmltX3N1ZmZpeHw+CgpAYXV0aG9yOiBEYXJyZW4KJycnCmRlZiBmaW5kS3RoTGFyZ2VzdCggbnVtcywgayk6Cjx8ZmltX2VuZHw+"]
["dad96776c3915d043781cba8981187c41858988c-1","dad96776c3915d043781cba8981187c41858988c",{"$cut":{"chars":17636,"head":"PHxmaW1fcHJlZml4fD4KIiIiQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgoKWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiIiIgoiIiJVdGlscyBmb3IgZ3JhcGggb3BlcmF0aW9ucy4iIiIKCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CmZyb20gY29weSBpbXBvcnQgZGVlcGNvcHkKZnJvbSBpdGVydG9vbHMgaW1wb3J0IHByb2R1Y3QKCmZyb20gYWJzbCBpbXBvcnQgbG9nZ2luZwppbXBvcnQgbnVtcHkgYXMgbnAKCgpjbGFzcyBOb2RlKG9iamVjdCk6CgogIGRlZiBfX2luaXRfXyhzZWxmLCB3b3JkKToKICAgIHNlbGYud29yZCA9IHdvcmQKICAgIHNlbGYucGFyZW50ID0gW10KICAgIHNlbGYuY2hpbGQgPSBbXQogICAgIyBzaWduYXV0cmUgaXMgYSB0dXBsZSBvZiAod29yZCwgbGVmdF9ib3VuZGFyeSwgcmlnaHRfYm91bmRhcnkpLgogICAgc2VsZi5zaWduYXR1cmUgPSBOb25lCiAgICAjIHVzZWQgaW50ZXJuYWxseQogICAgc2VsZi52YWxpZF9jaGlsZF9jb21iaW5hdGlvbnMgPSBOb25lCiAgICBzZWxmLmRlcml2cyA9IE5vbmUKCiAgZGVmIGlzX2xlYWYoc2VsZik6CiAgICByZXR1cm4gbGVuKHNlbGYuY2hpbGQpID09IDAKCiAgZGVmIGlzX3Jvb3Qoc2VsZik6CiAgICByZXR1cm4gbGVuKHNlbGYucGFyZW50KSA9PSAwCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiBzZWxmLndvcmQKCgpjbGFzcyBTaWduYXR1cmVHcmFwaChvYmplY3QpOgoKICBkZWYgX19pbml0X18oc2VsZiwgcm9vdF9zaWduYXR1cmUpOgogICAgc2VsZi5yb290X3NpZ25hdHVyZSA9IHJvb3Rfc2lnbmF0dXJlCiAgICAjIG5vZGVzIGlzIGEgbWFwIG9mIG5vZGVfc2lnbmF0dXJlIC0+IChzZXQgb2YgcGFyZW50IG5vZGUgc2lnbmF0dXJlcywKICAgICMgc2V0IG9mIGNoaWxkIG5vZGUgc2lnbmF0dXJlcykuCiAgICBzZWxmLm5vZGVzID0ge30KCiAgZGVmIHRyeV9hZGRpbmdfdHJlZShzZWxmLCB0cmVlLCBjaGVja190cmVlPVRydWUsIGNoZWNrX2Nvbm5lY3RuZXNzPVRydWUpOgogICAgbmV3X25vZGVzID0gZGVlcGNvcHkoc2VsZi5ub2RlcykKICAgIGZvciBub2RlIGluIHRyZWU6CiAgICAgIGlmIG5vZGUuc2lnbmF0dXJlIG5vdCBpbiBuZXdfbm9kZXM6CiAgICAgICAgbmV3X25vZGVzW25vZGUuc2lnbmF0dXJlXSA9IChzZXQoKSwgc2V0KCkpCiAgICAgIHBhcmVudHMsIGNoaWxkcmVuID0gbmV3X25vZGVzW25vZGUuc2lnbmF0dXJlXQogICAgICBpZiBub2RlLnBhcmVudDoKICAgICAgICBpZiBjaGVja190cmVlOgogICAgICAgICAgYXNzZXJ0IGxlbihub2RlLnBhcmVudCkgPT0gMQogICAgICAgIGZvciBwIGluIG5vZGUucGFyZW50OgogICAgICAgICAgaWYgcC5zaWduYXR1cmUgIT0gbm9kZS5zaWduYXR1cmU6CiAgICAgICAgICAgICMgU2tpcCBkdXBsaWNhdGVkIG5vZGVzIGZyb20gcHJlZGljdGlvbi4KICAgICAgICAgICAgcGFyZW50cy5hZGQocC5zaWduYXR1cmUpCiAgICAgIGZvciBjIGluIG5vZGUuY2hpbGQ6CiAgICAgICAgaWYgYy5zaWduYXR1cmUgIT0gbm9kZS5zaWduYXR1cmU6CiAgICAgICAgICBjaGlsZHJlbi5hZGQoYy5zaWduYXR1cmUpCgogICAgaWYgbm90IHNlbGYuaXNfdmFsaWRfZGFnKG5ld19ub2RlcywgY2hlY2tfY29ubmVjdG5lc3MpOgogICAgICByZXR1cm4gRmFsc2UKICAgIHNlbGYubm9kZXMgPSBuZXdfbm9kZXMKICAgIHJldHVybiBUcnVlCgogIGRlZiBjb250YWluc190cmVlKHNlbGYsIHRyZWUsIHZlcmJvc2U9RmFsc2UpOgogICAgY2FsY19zaWduYXR1cmUodHJlZVswXSkKICAgIGZvciBub2RlIGluIHRyZWU6CiAgICAgIGlmIG5vZGUuc2lnbmF0dXJlIG5vdCBpbiBzZWxmLm5vZGVzOgogICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICBwcmludChub2RlLnNpZ25hdHVyZSwgIm5vdCBmb3VuZCIpCiAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgIGZvciBwIGluIG5vZGUucGFyZW50OgogICAgICAgIGlmIHAuc2lnbmF0dXJlIG5vdCBpbiBzZWxmLm5vZGVzW25vZGUuc2lnbmF0dXJlXVswXToKICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgIHByaW50KG5vZGUuc2lnbmF0dXJlLCAicGFyZW50IiwgcC5zaWduYXR1cmUsICJub3QgZm91bmQiKQogICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgIGZvciBjIGluIG5vZGUuY2hpbGQ6CiAgICAgICAgaWYgYy5zaWduYXR1cmUgbm90IGluIHNlbGYubm9kZXNbbm9kZS5zaWduYXR1cmVdWzFdOgogICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgcHJpbnQobm9kZS5zaWduYXR1cmUsICJjaGlsZCIsIGMuc2lnbmF0dXJlLCAibm90IGZvdW5kIikKICAgICAgICAgIHJldHVybiBGYWxzZQogICAgcmV0dXJuIFRydWUKCiAgZGVmIGlzX3ZhbGlkX2RhZyhzZWxmLCBub2RlcywgY2hlY2tfY29ubmVjdG5lc3M9VHJ1ZSk6CiAgICAjIGNoZWNrIGlmIGFsbCBwYXJlbnQgYW5kIGNoaWxkIHNpZ25hdHVyZXMgYXJlIGluIHRoZSBncmFwaAogICAgZm9yIHBhcmVudHMsIGNoaWxkcmVuIGluIG5vZGVzLnZhbHVlcygpOgogICAgICBpZiAoYW55KHAgbm90IGluIG5vZGVzIGZvciBwIGluIHBhcmVudHMpIG9yCiAgICAgICAgICBhbnko"}}]
["e73e9bb49b80cb2851093da8cba60582d9aeee14-1","e73e9bb49b80cb2851093da8cba60582d9aeee14","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCB1bml0dGVzdAoKZnJvbSB3cml0ZXIgaW1wb3J0IHN0YXRlX3dyaXRlcgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cgpmcm9tIHRlc3RzLmJhc2UgaW1wb3J0IEJhc2VUZXN0Q2FzZQoKCjx8ZmltX2VuZHw+"]
["e73e9bb49b80cb2851093da8cba60582d9aeee14-2","e73e9bb49b80cb2851093da8cba60582d9aeee14","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCB1bml0dGVzdAoKZnJvbSB3cml0ZXIgaW1wb3J0IHN0YXRlX3dyaXRlcgoKZnJvbSB0ZXN0cy5iYXNlIGltcG9ydCBCYXNlVGVzdENhc2UKCgpjbGFzcyBTdGF0ZVRlc3QoQmFzZVRlc3RDYXNlKToKCiAgICBCQVNFTElORV9YTUxfRklMRU5BTUUgPSAiYmFzZWxpbmVfc3RhdGUueG1sIgogICAgU09VUkNFX0RJUiA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQogICAgWUFNTF9SRVNPVVJDRSA9ICJzdGF0ZS55bWwiCjx8ZmltX2hvbGV8PgogICAgICAgIHNlbGYuX2NvbXBhcmVfeG1sX2NvbnRlbnQoeG1sX3N0cmluZykKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgdW5pdHRlc3QubWFpbigpCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIHRlc3Rfc3RhdGUoc2VsZik6CiAgICAgICAgc3RhdGVfd3JpdGVyLlN0YXRlV3JpdGVyKCkud3JpdGUoc2VsZi53cml0ZXIueG1sX3Jvb3QpCiAgICAgICAgeG1sX3N0cmluZyA9IHNlbGYud3JpdGVyLmdldF94bWxfZG9jKHByZXR0eT1UcnVlKQo8fGZpbV9lbmR8Pg=="]
["e73e9bb49b80cb2851093da8cba60582d9aeee14-3","e73e9bb49b80cb2851093da8cba60582d9aeee14","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCB1bml0dGVzdAoKZnJvbSB3cml0ZXIgaW1wb3J0IHN0YXRlX3dyaXRlcgoKZnJvbSB0ZXN0cy5iYXNlIGltcG9ydCBCYXNlVGVzdENhc2UKCgpjbGFzcyBTdGF0ZVRlc3QoQmFzZVRlc3RDYXNlKToKCiAgICBCQVNFTElORV9YTUxfRklMRU5BTUUgPSAiYmFzZWxpbmVfc3RhdGUueG1sIgogICAgU09VUkNFX0RJUiA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQogICAgWUFNTF9SRVNPVVJDRSA9ICJzdGF0ZS55bWwiCgogICAgZGVmIHRlc3Rfc3RhdGUoc2VsZik6CiAgICAgICAgc3RhdGVfd3JpdGVyLlN0YXRlV3JpdGVyKCkud3JpdGUoc2VsZi53cml0ZXIueG1sX3Jvb3QpCjx8ZmltX2hvbGV8PgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgdW5pdHRlc3QubWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgeG1sX3N0cmluZyA9IHNlbGYud3JpdGVyLmdldF94bWxfZG9jKHByZXR0eT1UcnVlKQogICAgICAgIHNlbGYuX2NvbXBhcmVfeG1sX2NvbnRlbnQoeG1sX3N0cmluZykKCgo8fGZpbV9lbmR8Pg=="]
["e73e9bb49b80cb2851093da8cba60582d9aeee14-4","e73e9bb49b80cb2851093da8cba60582d9aeee14","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCB1bml0dGVzdAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIHdyaXRlciBpbXBvcnQgc3RhdGVfd3JpdGVyCgpmcm9tIHRlc3RzLmJhc2UgaW1wb3J0IEJhc2VUZXN0Q2FzZQoKPHxmaW1fZW5kfD4="]
["dabd5926a31b7cae97f69acd5adbc58d394191cd-1","dabd5926a31b7cae97f69acd5adbc58d394191cd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwpzeXMucGF0aC5pbnNlcnQoMCwgIi4uLy4uL2J1aWxkL2V4YW1wbGVzL2giKQo8fGZpbV9ob2xlfD4KaW5uZXIgPSBILklubmVyKCkKaW5uZXIuRG8oKQptb3N0X2lubmVyID0gSC5Jbm5lci5Nb3N0SW5uZXIoKQptb3N0X2lubmVyLkRvKCkKCjx8ZmltX3N1ZmZpeHw+CmZyb20gaCBpbXBvcnQgKgoKaCA9IEgoKQpoLkRvKCkKPHxmaW1fZW5kfD4="]
["dabd5926a31b7cae97f69acd5adbc58d394191cd-2","dabd5926a31b7cae97f69acd5adbc58d394191cd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwpzeXMucGF0aC5pbnNlcnQoMCwgIi4uLy4uL2J1aWxkL2V4YW1wbGVzL2giKQo8fGZpbV9ob2xlfD4KaW5uZXIgPSBILklubmVyKCkKaW5uZXIuRG8oKQptb3N0X2lubmVyID0gSC5Jbm5lci5Nb3N0SW5uZXIoKQptb3N0X2lubmVyLkRvKCkKCjx8ZmltX3N1ZmZpeHw+CmZyb20gaCBpbXBvcnQgKgoKaCA9IEgoKQpoLkRvKCkKPHxmaW1fZW5kfD4="]
["dabd5926a31b7cae97f69acd5adbc58d394191cd-3","dabd5926a31b7cae97f69acd5adbc58d394191cd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwpzeXMucGF0aC5pbnNlcnQoMCwgIi4uLy4uL2J1aWxkL2V4YW1wbGVzL2giKQpmcm9tIGggaW1wb3J0ICoKCmggPSBIKCkKaC5EbygpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW5uZXIgPSBILklubmVyKCkKaW5uZXIuRG8oKQptb3N0X2lubmVyID0gSC5Jbm5lci5Nb3N0SW5uZXIoKQptb3N0X2lubmVyLkRvKCkKPHxmaW1fZW5kfD4="]
["00bdba471b023a66d71ecf6b9a9c8f704efe8ad2-1","00bdba471b023a66d71ecf6b9a9c8f704efe8ad2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFzeW5jaW8KaW1wb3J0IGpzb24KZnJvbSBkYXRhY2xhc3NlcyBpbXBvcnQgZGF0YWNsYXNzLCBmaWVsZApmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBBd2FpdGFibGUsIERpY3QsIExpc3QsIE9wdGlvbmFsCgppbXBvcnQgYWlvaHR0cApmcm9tIHR5cGluZ19leHRlbnNpb25zIGltcG9ydCBQcm90b2NvbCwgcnVudGltZV9jaGVja2FibGUKCmZyb20gZmlyZWJhc2lsLmV4Y2VwdGlvbnMgaW1wb3J0IFJ0ZGJFdmVudFN0cmVhbUV4Y2VwdGlvbgpmcm9tIGZpcmViYXNpbC50eXBlcyBpbXBvcnQgSlNPTgoKCkBkYXRhY2xhc3MKY2xhc3MgU3NlTWVzc2FnZToKICAgIGV2ZW50OiBzdHIKCiAgICBkYXRhOiBPcHRpb25hbFtKU09OXSA9IE5vbmUKCiAgICBvcmlnaW46IE9wdGlvbmFsW3N0cl0gPSBOb25lCgogICAgbGFzdF9ldmVudF9pZDogT3B0aW9uYWxbc3RyXSA9IE5vbmUKCgpAcnVudGltZV9jaGVja2FibGUKY2xhc3MgT25NZXNzYWdlKFByb3RvY29sKToKICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBtZXNzYWdlOiBTc2VNZXNzYWdlKSAtPiBBd2FpdGFibGVbTm9uZV06CiAgICAgICAgLi4uCgoKQHJ1bnRpbWVfY2hlY2thYmxlCmNsYXNzIE9uT3BlbihQcm90b2NvbCk6CiAgICBkZWYgX19jYWxsX18oc2VsZikgLT4gQXdhaXRhYmxlW05vbmVdOgogICAgICAgIC4uLgoKCkBydW50aW1lX2NoZWNrYWJsZQpjbGFzcyBPbkVycm9yKFByb3RvY29sKToKICAgIGRlZiBfX2NhbGxfXyhzZWxmKSAtPiBBd2FpdGFibGVbTm9uZV06CiAgICAgICAgLi4uCgoKQGRhdGFjbGFzcwpjbGFzcyBTc2VDbGllbnQ6CgogICAgdXJsOiBzdHIKCiAgICBvbl9tZXNzYWdlOiBPbk1lc3NhZ2UKCiAgICBvbl9vcGVuOiBPcHRpb25hbFtPbk9wZW5dID0gTm9uZQoKICAgIG9uX2Vycm9yOiBPcHRpb25hbFtPbkVycm9yXSA9IE5vbmUKCiAgICBoZWFkZXJzOiBEaWN0W3N0ciwgc3RyXSA9IGZpZWxkKGRlZmF1bHRfZmFjdG9yeT1kaWN0KQoKICAgIHBhcmFtczogRGljdFtzdHIsIEFueV0gPSBmaWVsZChkZWZhdWx0X2ZhY3Rvcnk9ZGljdCkKCjx8ZmltX2hvbGV8PgogICAgICAgIGNvbXBhcmU9RmFsc2UsCiAgICApCgogICAgdGFzazogYXN5bmNpby5UYXNrID0gZmllbGQoCiAgICAgICAgaW5pdD1GYWxzZSwKICAgICAgICByZXByPUZhbHNlLAogICAgICAgIGhhc2g9RmFsc2UsCiAgICAgICAgY29tcGFyZT1GYWxzZSwKICAgICkKCiAgICBhc3luYyBkZWYgX19hZW50ZXJfXyhzZWxmKToKICAgICAgICBhd2FpdCBzZWxmLm9wZW4oKQogICAgICAgIHJldHVybiBzZWxmCgogICAgYXN5bmMgZGVmIF9fYWV4aXRfXyhzZWxmLCAqZXJyKToKICAgICAgICBhd2FpdCBzZWxmLmNsb3NlKCkKCiAgICBhc3luYyBkZWYgb3BlbihzZWxmKToKICAgICAgICBzZXNzaW9uID0gYWlvaHR0cC5DbGllbnRTZXNzaW9uKAogICAgICAgICAgICBoZWFkZXJzPXsKICAgICAgICAgICAgICAgICoqc2VsZi5oZWFkZXJzLAogICAgICAgICAgICAgICAgIkFjY2VwdCI6ICJ0ZXh0L2V2ZW50LXN0cmVhbSIsCiAgICAgICAgICAgIH0sCiAgICAgICAgKQoKICAgICAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCgogICAgICAgIHRyeToKICAgICAgICAgICAgc2VsZi5yZXNwb25zZSA9IGF3YWl0IHNlc3Npb24uZ2V0KAogICAgICAgICAgICAgICAgc2VsZi51cmwsCiAgICAgICAgICAgICAgICBwYXJhbXM9c2VsZi5wYXJhbXMsCiAgICAgICAgICAgICkKICAgICAgICBleGNlcHQgYWlvaHR0cC5DbGllbnRDb25uZWN0aW9uRXJyb3IgYXMgZToKICAgICAgICAgICAgaWYgc2VsZi5vbl9lcnJvcjoKICAgICAgICAgICAgICAgIGxvb3AuY3JlYXRlX3Rhc2soc2VsZi5vbl9lcnJvcigpKQogICAgICAgICAgICByYWlzZSBSdGRiRXZlbnRTdHJlYW1FeGNlcHRpb24oZiJVbmFibGUgdG8gY29ubmVjdCB0byB7c2VsZi51cmx9IikgZnJvbSBlCgogICAgICAgIHRyeToKICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5yYWlzZV9mb3Jfc3RhdHVzKCkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgIGlmIHNlbGYub25fZXJyb3I6CiAgICAgICAgICAgICAgICBsb29wLmNyZWF0ZV90YXNrKHNlbGYub25fZXJyb3IoKSkKICAgICAgICAgICAgcmFpc2UgUnRkYkV2ZW50U3RyZWFtRXhjZXB0aW9uKGYiQmFkIHJlc3BvbnNlIGZyb20ge3NlbGYudXJsfSIpIGZyb20gZQoKICAgICAgICBhc3luYyBkZWYgbGlzdGVuX3RvX3Jlc3BvbnNlKCk6CiAgICAgICAgICAgIGlmIHNlbGYub25fb3BlbjoKICAgICAgICAgICAgICAgIGxvb3AuY3JlYXRlX3Rhc2soc2VsZi5vbl9vcGVuKCkpCgogICAgICAgICAgICBtZXNzYWdlX2xpbmVzID0gW10KICAgICAgICAgICAgbGluZV9ieXRlcyA9IGIiIgoKICAgICAgICAgICAgZGVmIGVtaXRfbWVzc2FnZShsaW5lczogTGlzdFtzdHJdKToKICAgICAgICAgICAgICAgIG1lc3NhZ2VfZGljdCA9IHt9CiAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICBrZXlfcmF3LCB2YWx1ZV9yYXcgPSBsaW5lLnNwbGl0KCI6IiwgMSkKICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlfcmF3LnN0cmlwKCkKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlX3Jhdy5zdHJpcCgpCiAgICAgICAgICAgICAgICAgICAgaWYga2V5ID09ICJkYXRhIjoKICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9kaWN0WyJkYXRhIl0gPSBqc29uLmxvYWRzKHZhbHVlKQogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfZGljdFtrZXldID0gdmFsdWUKCiAgICAgICAgICAgICAgICBtZXNzYWdlID0gU3NlTWVzc2FnZSgqKm1lc3NhZ2VfZGljdCkKICAgICAgICAgICAgICAgIGxvb3AuY3JlYXRlX3Rhc2soc2VsZi5vbl9tZXNzYWdlKG1lc3NhZ2UpKQoKICAgICAgICAgICAgYXN5bmMgZm9yIG5ld19ieXRlcyBpbiBzZWxmLnJlc3BvbnNlLmNvbnRlbnQ6CiAgICAgICAgICAgICAgICBpZiBsZW4obmV3X2J5dGVzKToKICAgICAgICAgICAgICAgICAgICBsaW5lX2J5dGVzICs9IG5ld19ieXRlcwoKICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRfbGluZSA9IGxpbmVfYnl0ZXMuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgICAgICAgICAgaWYgZGVjb2RlZF9saW5lLmVuZHN3aXRoKCJcbiIpOgogICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGhhdmUgYSBjb21wbGV0ZSBsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfYnl0ZXMgPSBiIiIKICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBwZWRfbGluZSA9IGRlY29kZWRfbGluZS5yc3RyaXAoIlxuIikKICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9saW5lcy5leHRlbmQoc3RyaXBwZWRfbGluZS5zcGxpdCgiXG4iKSkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVjb2RlZF9saW5lLmVuZHN3aXRoKCJcblxuIikgb3IgZGVjb2RlZF9saW5lID09ICJcbiI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEJsYW5rIGxpbmUgcHJlc2VudCAtIG1lc3NhZ2UgaXMgY29tcGxldGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRfbWVzc2FnZShtZXNzYWdlX2xpbmVzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9saW5lcyA9IFtdCgogICAgICAgIHNlbGYudGFzayA9IGxvb3AuY3JlYXRlX3Rhc2sobGlzdGVuX3RvX3Jlc3BvbnNlKCkpCgogICAgYXN5bmMgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgIHNlbGYucmVzcG9uc2UuY2xvc2UoKQogICAgICAgIHNlbGYudGFzay5jYW5jZWwoKQo8fGZpbV9zdWZmaXh8PgogICAgcmVzcG9uc2U6IGFpb2h0dHAuQ2xpZW50UmVzcG9uc2UgPSBmaWVsZCgKICAgICAgICBpbml0PUZhbHNlLAogICAgICAgIHJlcHI9RmFsc2UsCiAgICAgICAgaGFzaD1GYWxzZSwKPHxmaW1fZW5kfD4="]
["00bdba471b023a66d71ecf6b9a9c8f704efe8ad2-2","00bdba471b023a66d71ecf6b9a9c8f704efe8ad2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFzeW5jaW8KaW1wb3J0IGpzb24KZnJvbSBkYXRhY2xhc3NlcyBpbXBvcnQgZGF0YWNsYXNzLCBmaWVsZApmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBBd2FpdGFibGUsIERpY3QsIExpc3QsIE9wdGlvbmFsCgppbXBvcnQgYWlvaHR0cApmcm9tIHR5cGluZ19leHRlbnNpb25zIGltcG9ydCBQcm90b2NvbCwgcnVudGltZV9jaGVja2FibGUKCmZyb20gZmlyZWJhc2lsLmV4Y2VwdGlvbnMgaW1wb3J0IFJ0ZGJFdmVudFN0cmVhbUV4Y2VwdGlvbgpmcm9tIGZpcmViYXNpbC50eXBlcyBpbXBvcnQgSlNPTgoKCkBkYXRhY2xhc3MKY2xhc3MgU3NlTWVzc2FnZToKICAgIGV2ZW50OiBzdHIKCiAgICBkYXRhOiBPcHRpb25hbFtKU09OXSA9IE5vbmUKCiAgICBvcmlnaW46IE9wdGlvbmFsW3N0cl0gPSBOb25lCgogICAgbGFzdF9ldmVudF9pZDogT3B0aW9uYWxbc3RyXSA9IE5vbmUKCgpAcnVudGltZV9jaGVja2FibGUKY2xhc3MgT25NZXNzYWdlKFByb3RvY29sKToKICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBtZXNzYWdlOiBTc2VNZXNzYWdlKSAtPiBBd2FpdGFibGVbTm9uZV06CiAgICAgICAgLi4uCgoKQHJ1bnRpbWVfY2hlY2thYmxlCmNsYXNzIE9uT3BlbihQcm90b2NvbCk6CiAgICBkZWYgX19jYWxsX18oc2VsZikgLT4gQXdhaXRhYmxlW05vbmVdOgogICAgICAgIC4uLgoKCkBydW50aW1lX2NoZWNrYWJsZQpjbGFzcyBPbkVycm9yKFByb3RvY29sKToKICAgIGRlZiBfX2NhbGxfXyhzZWxmKSAtPiBBd2FpdGFibGVbTm9uZV06CiAgICAgICAgLi4uCgoKQGRhdGFjbGFzcwpjbGFzcyBTc2VDbGllbnQ6CgogICAgdXJsOiBzdHIKCiAgICBvbl9tZXNzYWdlOiBPbk1lc3NhZ2UKCiAgICBvbl9vcGVuOiBPcHRpb25hbFtPbk9wZW5dID0gTm9uZQoKICAgIG9uX2Vycm9yOiBPcHRpb25hbFtPbkVycm9yXSA9IE5vbmUKCiAgICBoZWFkZXJzOiBEaWN0W3N0ciwgc3RyXSA9IGZpZWxkKGRlZmF1bHRfZmFjdG9yeT1kaWN0KQoKICAgIHBhcmFtczogRGljdFtzdHIsIEFueV0gPSBmaWVsZChkZWZhdWx0X2ZhY3Rvcnk9ZGljdCkKCiAgICByZXNwb25zZTogYWlvaHR0cC5DbGllbnRSZXNwb25zZSA9IGZpZWxkKAogICAgICAgIGluaXQ9RmFsc2UsCiAgICAgICAgcmVwcj1GYWxzZSwKICAgICAgICBoYXNoPUZhbHNlLAogICAgICAgIGNvbXBhcmU9RmFsc2UsCiAgICApCgogICAgdGFzazogYXN5bmNpby5UYXNrID0gZmllbGQoCiAgICAgICAgaW5pdD1GYWxzZSwKICAgICAgICByZXByPUZhbHNlLAogICAgICAgIGhhc2g9RmFsc2UsCiAgICAgICAgY29tcGFyZT1GYWxzZSwKICAgICkKCiAgICBhc3luYyBkZWYgX19hZW50ZXJfXyhzZWxmKToKICAgICAgICBhd2FpdCBzZWxmLm9wZW4oKQogICAgICAgIHJldHVybiBzZWxmCgogICAgYXN5bmMgZGVmIF9fYWV4aXRfXyhzZWxmLCAqZXJyKToKICAgICAgICBhd2FpdCBzZWxmLmNsb3NlKCkKCiAgICBhc3luYyBkZWYgb3BlbihzZWxmKToKICAgICAgICBzZXNzaW9uID0gYWlvaHR0cC5DbGllbnRTZXNzaW9uKAogICAgICAgICAgICBoZWFkZXJzPXsKICAgICAgICAgICAgICAgICoqc2VsZi5oZWFkZXJzLAogICAgICAgICAgICAgICAgIkFjY2VwdCI6ICJ0ZXh0L2V2ZW50LXN0cmVhbSIsCiAgICAgICAgICAgIH0sCiAgICAgICAgKQoKICAgICAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCgogICAgICAgIHRyeToKICAgICAgICAgICAgc2VsZi5yZXNwb25zZSA9IGF3YWl0IHNlc3Npb24uZ2V0KAogICAgICAgICAgICAgICAgc2VsZi51cmwsCiAgICAgICAgICAgICAgICBwYXJhbXM9c2VsZi5wYXJhbXMsCiAgICAgICAgICAgICkKICAgICAgICBleGNlcHQgYWlvaHR0cC5DbGllbnRDb25uZWN0aW9uRXJyb3IgYXMgZToKICAgICAgICAgICAgaWYgc2VsZi5vbl9lcnJvcjoKICAgICAgICAgICAgICAgIGxvb3AuY3JlYXRlX3Rhc2soc2VsZi5vbl9lcnJvcigpKQogICAgICAgICAgICByYWlzZSBSdGRiRXZlbnRTdHJlYW1FeGNlcHRpb24oZiJVbmFibGUgdG8gY29ubmVjdCB0byB7c2VsZi51cmx9IikgZnJvbSBlCgogICAgICAgIHRyeToKICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5yYWlzZV9mb3Jfc3RhdHVzKCkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgIGlmIHNlbGYub25fZXJyb3I6CiAgICAgICAgICAgICAgICBsb29wLmNyZWF0ZV90YXNrKHNlbGYub25fZXJyb3IoKSkKICAgICAgICAgICAgcmFpc2UgUnRkYkV2ZW50U3RyZWFtRXhjZXB0aW9uKGYiQmFkIHJlc3BvbnNlIGZyb20ge3NlbGYudXJsfSIpIGZyb20gZQoKICAgICAgICBhc3luYyBkZWYgbGlzdGVuX3RvX3Jlc3BvbnNlKCk6CiAgICAgICAgICAgIGlmIHNlbGYub25fb3BlbjoKICAgICAgICAgICAgICAgIGxvb3AuY3JlYXRlX3Rhc2soc2VsZi5vbl9vcGVuKCkpCgogICAgICAgICAgICBtZXNzYWdlX2xpbmVzID0gW10KICAgICAgICAgICAgbGluZV9ieXRlcyA9IGIiIgoKICAgICAgICAgICAgZGVmIGVtaXRfbWVzc2FnZShsaW5lczogTGlzdFtzdHJdKToKICAgICAgICAgICAgICAgIG1lc3NhZ2VfZGljdCA9IHt9CiAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICBrZXlfcmF3LCB2YWx1ZV9yYXcgPSBsaW5lLnNwbGl0KCI6IiwgMSkKICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlfcmF3LnN0cmlwKCkKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlX3Jhdy5zdHJpcCgpCiAgICAgICAgICAgICAgICAgICAgaWYga2V5ID09ICJkYXRhIjoKICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9kaWN0WyJkYXRhIl0gPSBqc29uLmxvYWRzKHZhbHVlKQogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfZGljdFtrZXldID0gdmFsdWUKCiAgICAgICAgICAgICAgICBtZXNzYWdlID0gU3NlTWVzc2FnZSgqKm1lc3NhZ2VfZGljdCkKICAgICAgICAgICAgICAgIGxvb3AuY3JlYXRlX3Rhc2soc2VsZi5vbl9tZXNzYWdlKG1lc3NhZ2UpKQoKICAgICAgICAgICAgYXN5bmMgZm9yIG5ld19ieXRlcyBpbiBzZWxmLnJlc3BvbnNlLmNvbnRlbnQ6CiAgICAgICAgICAgICAgICBpZiBsZW4obmV3X2J5dGVzKToKICAgICAgICAgICAgICAgICAgICBsaW5lX2J5dGVzICs9IG5ld19ieXRlcwoKICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRfbGluZSA9IGxpbmVfYnl0ZXMuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgICAgICAgICAgaWYgZGVjb2RlZF9saW5lLmVuZHN3aXRoKCJcbiIpOgogICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGhhdmUgYSBjb21wbGV0ZSBsaW5lCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9ieXRlcyA9IGIiIgogICAgICAgICAgICAgICAgICAgICAgICBzdHJpcHBlZF9saW5lID0gZGVjb2RlZF9saW5lLnJzdHJpcCgiXG4iKQogICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2xpbmVzLmV4dGVuZChzdHJpcHBlZF9saW5lLnNwbGl0KCJcbiIpKQogICAgICAgICAgICAgICAgICAgICAgICBpZiBkZWNvZGVkX2xpbmUuZW5kc3dpdGgoIlxuXG4iKSBvciBkZWNvZGVkX2xpbmUgPT0gIlxuIjoKPHxmaW1fZW5kfD4="]
["00bdba471b023a66d71ecf6b9a9c8f704efe8ad2-3","00bdba471b023a66d71ecf6b9a9c8f704efe8ad2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFzeW5jaW8KaW1wb3J0IGpzb24KZnJvbSBkYXRhY2xhc3NlcyBpbXBvcnQgZGF0YWNsYXNzLCBmaWVsZAo8fGZpbV9ob2xlfD4KCmZyb20gZmlyZWJhc2lsLmV4Y2VwdGlvbnMgaW1wb3J0IFJ0ZGJFdmVudFN0cmVhbUV4Y2VwdGlvbgpmcm9tIGZpcmViYXNpbC50eXBlcyBpbXBvcnQgSlNPTgoKCkBkYXRhY2xhc3MKY2xhc3MgU3NlTWVzc2FnZToKICAgIGV2ZW50OiBzdHIKCiAgICBkYXRhOiBPcHRpb25hbFtKU09OXSA9IE5vbmUKCiAgICBvcmlnaW46IE9wdGlvbmFsW3N0cl0gPSBOb25lCgogICAgbGFzdF9ldmVudF9pZDogT3B0aW9uYWxbc3RyXSA9IE5vbmUKCgpAcnVudGltZV9jaGVja2FibGUKY2xhc3MgT25NZXNzYWdlKFByb3RvY29sKToKICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBtZXNzYWdlOiBTc2VNZXNzYWdlKSAtPiBBd2FpdGFibGVbTm9uZV06CiAgICAgICAgLi4uCgoKQHJ1bnRpbWVfY2hlY2thYmxlCmNsYXNzIE9uT3BlbihQcm90b2NvbCk6CiAgICBkZWYgX19jYWxsX18oc2VsZikgLT4gQXdhaXRhYmxlW05vbmVdOgogICAgICAgIC4uLgoKCkBydW50aW1lX2NoZWNrYWJsZQpjbGFzcyBPbkVycm9yKFByb3RvY29sKToKICAgIGRlZiBfX2NhbGxfXyhzZWxmKSAtPiBBd2FpdGFibGVbTm9uZV06CiAgICAgICAgLi4uCgoKQGRhdGFjbGFzcwpjbGFzcyBTc2VDbGllbnQ6CgogICAgdXJsOiBzdHIKCiAgICBvbl9tZXNzYWdlOiBPbk1lc3NhZ2UKCiAgICBvbl9vcGVuOiBPcHRpb25hbFtPbk9wZW5dID0gTm9uZQoKICAgIG9uX2Vycm9yOiBPcHRpb25hbFtPbkVycm9yXSA9IE5vbmUKCiAgICBoZWFkZXJzOiBEaWN0W3N0ciwgc3RyXSA9IGZpZWxkKGRlZmF1bHRfZmFjdG9yeT1kaWN0KQoKICAgIHBhcmFtczogRGljdFtzdHIsIEFueV0gPSBmaWVsZChkZWZhdWx0X2ZhY3Rvcnk9ZGljdCkKCiAgICByZXNwb25zZTogYWlvaHR0cC5DbGllbnRSZXNwb25zZSA9IGZpZWxkKAogICAgICAgIGluaXQ9RmFsc2UsCiAgICAgICAgcmVwcj1GYWxzZSwKICAgICAgICBoYXNoPUZhbHNlLAogICAgICAgIGNvbXBhcmU9RmFsc2UsCiAgICApCgogICAgdGFzazogYXN5bmNpby5UYXNrID0gZmllbGQoCiAgICAgICAgaW5pdD1GYWxzZSwKICAgICAgICByZXByPUZhbHNlLAogICAgICAgIGhhc2g9RmFsc2UsCiAgICAgICAgY29tcGFyZT1GYWxzZSwKICAgICkKCiAgICBhc3luYyBkZWYgX19hZW50ZXJfXyhzZWxmKToKICAgICAgICBhd2FpdCBzZWxmLm9wZW4oKQogICAgICAgIHJldHVybiBzZWxmCgogICAgYXN5bmMgZGVmIF9fYWV4aXRfXyhzZWxmLCAqZXJyKToKICAgICAgICBhd2FpdCBzZWxmLmNsb3NlKCkKCiAgICBhc3luYyBkZWYgb3BlbihzZWxmKToKICAgICAgICBzZXNzaW9uID0gYWlvaHR0cC5DbGllbnRTZXNzaW9uKAogICAgICAgICAgICBoZWFkZXJzPXsKICAgICAgICAgICAgICAgICoqc2VsZi5oZWFkZXJzLAogICAgICAgICAgICAgICAgIkFjY2VwdCI6ICJ0ZXh0L2V2ZW50LXN0cmVhbSIsCiAgICAgICAgICAgIH0sCiAgICAgICAgKQoKICAgICAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCgogICAgICAgIHRyeToKICAgICAgICAgICAgc2VsZi5yZXNwb25zZSA9IGF3YWl0IHNlc3Npb24uZ2V0KAogICAgICAgICAgICAgICAgc2VsZi51cmwsCiAgICAgICAgICAgICAgICBwYXJhbXM9c2VsZi5wYXJhbXMsCiAgICAgICAgICAgICkKICAgICAgICBleGNlcHQgYWlvaHR0cC5DbGllbnRDb25uZWN0aW9uRXJyb3IgYXMgZToKICAgICAgICAgICAgaWYgc2VsZi5vbl9lcnJvcjoKICAgICAgICAgICAgICAgIGxvb3AuY3JlYXRlX3Rhc2soc2VsZi5vbl9lcnJvcigpKQogICAgICAgICAgICByYWlzZSBSdGRiRXZlbnRTdHJlYW1FeGNlcHRpb24oZiJVbmFibGUgdG8gY29ubmVjdCB0byB7c2VsZi51cmx9IikgZnJvbSBlCgogICAgICAgIHRyeToKICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5yYWlzZV9mb3Jfc3RhdHVzKCkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgIGlmIHNlbGYub25fZXJyb3I6CiAgICAgICAgICAgICAgICBsb29wLmNyZWF0ZV90YXNrKHNlbGYub25fZXJyb3IoKSkKICAgICAgICAgICAgcmFpc2UgUnRkYkV2ZW50U3RyZWFtRXhjZXB0aW9uKGYiQmFkIHJlc3BvbnNlIGZyb20ge3NlbGYudXJsfSIpIGZyb20gZQoKICAgICAgICBhc3luYyBkZWYgbGlzdGVuX3RvX3Jlc3BvbnNlKCk6CiAgICAgICAgICAgIGlmIHNlbGYub25fb3BlbjoKICAgICAgICAgICAgICAgIGxvb3AuY3JlYXRlX3Rhc2soc2VsZi5vbl9vcGVuKCkpCgogICAgICAgICAgICBtZXNzYWdlX2xpbmVzID0gW10KICAgICAgICAgICAgbGluZV9ieXRlcyA9IGIiIgoKICAgICAgICAgICAgZGVmIGVtaXRfbWVzc2FnZShsaW5lczogTGlzdFtzdHJdKToKICAgICAgICAgICAgICAgIG1lc3NhZ2VfZGljdCA9IHt9CiAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICBrZXlfcmF3LCB2YWx1ZV9yYXcgPSBsaW5lLnNwbGl0KCI6IiwgMSkKICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlfcmF3LnN0cmlwKCkKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlX3Jhdy5zdHJpcCgpCiAgICAgICAgICAgICAgICAgICAgaWYga2V5ID09ICJkYXRhIjoKICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9kaWN0WyJkYXRhIl0gPSBqc29uLmxvYWRzKHZhbHVlKQogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfZGljdFtrZXldID0gdmFsdWUKCiAgICAgICAgICAgICAgICBtZXNzYWdlID0gU3NlTWVzc2FnZSgqKm1lc3NhZ2VfZGljdCkKICAgICAgICAgICAgICAgIGxvb3AuY3JlYXRlX3Rhc2soc2VsZi5vbl9tZXNzYWdlKG1lc3NhZ2UpKQoKICAgICAgICAgICAgYXN5bmMgZm9yIG5ld19ieXRlcyBpbiBzZWxmLnJlc3BvbnNlLmNvbnRlbnQ6CiAgICAgICAgICAgICAgICBpZiBsZW4obmV3X2J5dGVzKToKICAgICAgICAgICAgICAgICAgICBsaW5lX2J5dGVzICs9IG5ld19ieXRlcwoKICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRfbGluZSA9IGxpbmVfYnl0ZXMuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgICAgICAgICAgaWYgZGVjb2RlZF9saW5lLmVuZHN3aXRoKCJcbiIpOgogICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGhhdmUgYSBjb21wbGV0ZSBsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfYnl0ZXMgPSBiIiIKICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBwZWRfbGluZSA9IGRlY29kZWRfbGluZS5yc3RyaXAoIlxuIikKICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9saW5lcy5leHRlbmQoc3RyaXBwZWRfbGluZS5zcGxpdCgiXG4iKSkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVjb2RlZF9saW5lLmVuZHN3aXRoKCJcblxuIikgb3IgZGVjb2RlZF9saW5lID09ICJcbiI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEJsYW5rIGxpbmUgcHJlc2VudCAtIG1lc3NhZ2UgaXMgY29tcGxldGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRfbWVzc2FnZShtZXNzYWdlX2xpbmVzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9saW5lcyA9IFtdCgogICAgICAgIHNlbGYudGFzayA9IGxvb3AuY3JlYXRlX3Rhc2sobGlzdGVuX3RvX3Jlc3BvbnNlKCkpCgogICAgYXN5bmMgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgIHNlbGYucmVzcG9uc2UuY2xvc2UoKQogICAgICAgIHNlbGYudGFzay5jYW5jZWwoKQo8fGZpbV9zdWZmaXh8Pgpmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBBd2FpdGFibGUsIERpY3QsIExpc3QsIE9wdGlvbmFsCgppbXBvcnQgYWlvaHR0cApmcm9tIHR5cGluZ19leHRlbnNpb25zIGltcG9ydCBQcm90b2NvbCwgcnVudGltZV9jaGVja2FibGUKPHxmaW1fZW5kfD4="]
["41a3176c9d1d3075294acf0c3d93360e090233ad-1","41a3176c9d1d3075294acf0c3d93360e090233ad","PHxmaW1fcHJlZml4fD4KIyBDb21pY2tlciBGcm9udGVuZCAtIENvbXBpbGUKIyBSZXF1aXJlczogamluamEyLCBmbGFzay1taXNha2EKIyBEZXRhaWxzOiBKaW5qYTLjgpLkvb/jgaPjgaZqMuODleOCoeOCpOODq+OCkuOCs+ODs+ODkeOCpOODq+OBl+OBvuOBmeOAggoKZnJvbSBqaW5qYTIgaW1wb3J0IEVudmlyb25tZW50LCBGaWxlU3lzdGVtTG9hZGVyLCBzZWxlY3RfYXV0b2VzY2FwZQpmcm9tIGZsYXNrX21pc2FrYSBpbXBvcnQgTWlzYWthCmZyb20gb3MgaW1wb3J0IGxpc3RkaXIKZnJvbSBzeXMgaW1wb3J0IGFyZ3YKCgplbnYgPSBFbnZpcm9ubWVudCgKICAgIGxvYWRlcj1GaWxlU3lzdGVtTG9hZGVyKCIuLyIpLAogICAgYXV0b2VzY2FwZT1zZWxlY3RfYXV0b2VzY2FwZSgoImh0bWwiLCAiajIiKSkKKQplbnYuZmlsdGVycy5zZXRkZWZhdWx0KCJtYXJrZG93biIsIE1pc2FrYShhdXRvbGluaz1UcnVlKS5yZW5kZXIpCmZvciBmaWxlX25hbWUgaW4gbGlzdGRpcigiLi8iKToKICAgIGlmIGZpbGVfbmFtZS5lbmRzd2l0aCgiLmoyIik6CiAgICAgICAgd2l0aCBvcGVuKGYie2ZpbGVfbmFtZVs6LTNdfS5odG1sIiwgInciKSBhcyBmOgo8fGZpbV9ob2xlfD4KICAgICAgICBwcmludChmIkNvbXBpbGVkIHtmaWxlX25hbWV9IikKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgZi53cml0ZShlbnYuZ2V0X3RlbXBsYXRlKGZpbGVfbmFtZSkucmVuZGVyKCkpCjx8ZmltX2VuZHw+"]
["41a3176c9d1d3075294acf0c3d93360e090233ad-2","41a3176c9d1d3075294acf0c3d93360e090233ad","PHxmaW1fcHJlZml4fD4KIyBDb21pY2tlciBGcm9udGVuZCAtIENvbXBpbGUKIyBSZXF1aXJlczogamluamEyLCBmbGFzay1taXNha2EKIyBEZXRhaWxzOiBKaW5qYTLjgpLkvb/jgaPjgaZqMuODleOCoeOCpOODq+OCkuOCs+ODs+ODkeOCpOODq+OBl+OBvuOBmeOAggoKZnJvbSBqaW5qYTIgaW1wb3J0IEVudmlyb25tZW50LCBGaWxlU3lzdGVtTG9hZGVyLCBzZWxlY3RfYXV0b2VzY2FwZQpmcm9tIGZsYXNrX21pc2FrYSBpbXBvcnQgTWlzYWthCmZyb20gb3MgaW1wb3J0IGxpc3RkaXIKZnJvbSBzeXMgaW1wb3J0IGFyZ3YKCgplbnYgPSBFbnZpcm9ubWVudCgKICAgIGxvYWRlcj1GaWxlU3lzdGVtTG9hZGVyKCIuLyIpLAogICAgYXV0b2VzY2FwZT1zZWxlY3RfYXV0b2VzY2FwZSgoImh0bWwiLCAiajIiKSkKKQplbnYuZmlsdGVycy5zZXRkZWZhdWx0KCJtYXJrZG93biIsIE1pc2FrYShhdXRvbGluaz1UcnVlKS5yZW5kZXIpCjx8ZmltX2hvbGV8PgogICAgICAgIHByaW50KGYiQ29tcGlsZWQge2ZpbGVfbmFtZX0iKQo8fGZpbV9zdWZmaXh8Pgpmb3IgZmlsZV9uYW1lIGluIGxpc3RkaXIoIi4vIik6CiAgICBpZiBmaWxlX25hbWUuZW5kc3dpdGgoIi5qMiIpOgogICAgICAgIHdpdGggb3BlbihmIntmaWxlX25hbWVbOi0zXX0uaHRtbCIsICJ3IikgYXMgZjoKICAgICAgICAgICAgZi53cml0ZShlbnYuZ2V0X3RlbXBsYXRlKGZpbGVfbmFtZSkucmVuZGVyKCkpCjx8ZmltX2VuZHw+"]
["41a3176c9d1d3075294acf0c3d93360e090233ad-3","41a3176c9d1d3075294acf0c3d93360e090233ad","PHxmaW1fcHJlZml4fD4KIyBDb21pY2tlciBGcm9udGVuZCAtIENvbXBpbGUKIyBSZXF1aXJlczogamluamEyLCBmbGFzay1taXNha2EKIyBEZXRhaWxzOiBKaW5qYTLjgpLkvb/jgaPjgaZqMuODleOCoeOCpOODq+OCkuOCs+ODs+ODkeOCpOODq+OBl+OBvuOBmeOAggoKZnJvbSBqaW5qYTIgaW1wb3J0IEVudmlyb25tZW50LCBGaWxlU3lzdGVtTG9hZGVyLCBzZWxlY3RfYXV0b2VzY2FwZQpmcm9tIGZsYXNrX21pc2FrYSBpbXBvcnQgTWlzYWthCmZyb20gb3MgaW1wb3J0IGxpc3RkaXIKZnJvbSBzeXMgaW1wb3J0IGFyZ3YKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmVudiA9IEVudmlyb25tZW50KAogICAgbG9hZGVyPUZpbGVTeXN0ZW1Mb2FkZXIoIi4vIiksCiAgICBhdXRvZXNjYXBlPXNlbGVjdF9hdXRvZXNjYXBlKCgiaHRtbCIsICJqMiIpKQo8fGZpbV9lbmR8Pg=="]
["41a3176c9d1d3075294acf0c3d93360e090233ad-4","41a3176c9d1d3075294acf0c3d93360e090233ad","PHxmaW1fcHJlZml4fD4KIyBDb21pY2tlciBGcm9udGVuZCAtIENvbXBpbGUKIyBSZXF1aXJlczogamluamEyLCBmbGFzay1taXNha2EKIyBEZXRhaWxzOiBKaW5qYTLjgpLkvb/jgaPjgaZqMuODleOCoeOCpOODq+OCkuOCs+ODs+ODkeOCpOODq+OBl+OBvuOBmeOAggoKZnJvbSBqaW5qYTIgaW1wb3J0IEVudmlyb25tZW50LCBGaWxlU3lzdGVtTG9hZGVyLCBzZWxlY3RfYXV0b2VzY2FwZQpmcm9tIGZsYXNrX21pc2FrYSBpbXBvcnQgTWlzYWthCmZyb20gb3MgaW1wb3J0IGxpc3RkaXIKZnJvbSBzeXMgaW1wb3J0IGFyZ3YKCjx8ZmltX2hvbGV8PgopCmVudi5maWx0ZXJzLnNldGRlZmF1bHQoIm1hcmtkb3duIiwgTWlzYWthKGF1dG9saW5rPVRydWUpLnJlbmRlcikKZm9yIGZpbGVfbmFtZSBpbiBsaXN0ZGlyKCIuLyIpOgogICAgaWYgZmlsZV9uYW1lLmVuZHN3aXRoKCIuajIiKToKICAgICAgICB3aXRoIG9wZW4oZiJ7ZmlsZV9uYW1lWzotM119Lmh0bWwiLCAidyIpIGFzIGY6CiAgICAgICAgICAgIGYud3JpdGUoZW52LmdldF90ZW1wbGF0ZShmaWxlX25hbWUpLnJlbmRlcigpKQogICAgICAgIHByaW50KGYiQ29tcGlsZWQge2ZpbGVfbmFtZX0iKQo8fGZpbV9zdWZmaXh8PgoKZW52ID0gRW52aXJvbm1lbnQoCiAgICBsb2FkZXI9RmlsZVN5c3RlbUxvYWRlcigiLi8iKSwKICAgIGF1dG9lc2NhcGU9c2VsZWN0X2F1dG9lc2NhcGUoKCJodG1sIiwgImoyIikpCjx8ZmltX2VuZHw+"]
["41a3176c9d1d3075294acf0c3d93360e090233ad-5","41a3176c9d1d3075294acf0c3d93360e090233ad","PHxmaW1fcHJlZml4fD4KIyBDb21pY2tlciBGcm9udGVuZCAtIENvbXBpbGUKIyBSZXF1aXJlczogamluamEyLCBmbGFzay1taXNha2EKIyBEZXRhaWxzOiBKaW5qYTLjgpLkvb/jgaPjgaZqMuODleOCoeOCpOODq+OCkuOCs+ODs+ODkeOCpOODq+OBl+OBvuOBmeOAggoKPHxmaW1faG9sZXw+CgoKZW52ID0gRW52aXJvbm1lbnQoCiAgICBsb2FkZXI9RmlsZVN5c3RlbUxvYWRlcigiLi8iKSwKICAgIGF1dG9lc2NhcGU9c2VsZWN0X2F1dG9lc2NhcGUoKCJodG1sIiwgImoyIikpCikKZW52LmZpbHRlcnMuc2V0ZGVmYXVsdCgibWFya2Rvd24iLCBNaXNha2EoYXV0b2xpbms9VHJ1ZSkucmVuZGVyKQpmb3IgZmlsZV9uYW1lIGluIGxpc3RkaXIoIi4vIik6CiAgICBpZiBmaWxlX25hbWUuZW5kc3dpdGgoIi5qMiIpOgogICAgICAgIHdpdGggb3BlbihmIntmaWxlX25hbWVbOi0zXX0uaHRtbCIsICJ3IikgYXMgZjoKICAgICAgICAgICAgZi53cml0ZShlbnYuZ2V0X3RlbXBsYXRlKGZpbGVfbmFtZSkucmVuZGVyKCkpCiAgICAgICAgcHJpbnQoZiJDb21waWxlZCB7ZmlsZV9uYW1lfSIpCjx8ZmltX3N1ZmZpeHw+CmZyb20gamluamEyIGltcG9ydCBFbnZpcm9ubWVudCwgRmlsZVN5c3RlbUxvYWRlciwgc2VsZWN0X2F1dG9lc2NhcGUKZnJvbSBmbGFza19taXNha2EgaW1wb3J0IE1pc2FrYQpmcm9tIG9zIGltcG9ydCBsaXN0ZGlyCmZyb20gc3lzIGltcG9ydCBhcmd2Cjx8ZmltX2VuZHw+"]
["1770082fed3460fb5dc670f10d3dfb4f4490d77c-1","1770082fed3460fb5dc670f10d3dfb4f4490d77c","PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKZnJvbSBEYXRhYmFzZSBpbXBvcnQgRGF0YWJhc2UKZnJvbSBUYWJsZXMuVHJhbnNhY3Rpb25zIGltcG9ydCBUcmFuc2FjdGlvbgpmcm9tIFRhYmxlcy5WZW5kb3JUeXBlIGltcG9ydCBWZW5kb3JUeXBlCmZyb20gVGFibGVzLlZlbmRvciBpbXBvcnQgVmVuZG9yCmZyb20gVGFibGVzLkNhdGVnb3JpZXMgaW1wb3J0IENhdGVnb3J5CmZyb20gLk1haW5NZW51IGltcG9ydCBmb3JtYXRfbWVudQpmcm9tIE1lbnVGdW5jdGlvbnMgaW1wb3J0IGZvcmNlX3VzZXJfbnVtYmVyX3NlbGVjdGlvbiwgc2VsZWN0X29ial9mcm9tX2xpc3QsIGdldF9kYXRldGltZSwgdHJ5X3VzZXJfbnVtYmVyX3NlbGVjdGlvbgpmcm9tIC5DYXRlZ29yeU1lbnUgaW1wb3J0IHZpZXdfc2VsZWN0ZWRfY2F0ZWdvcnkKZnJvbSAuVmVuZG9yTWVudSBpbXBvcnQgc2hvd192ZW5kb3JfbWVudQoKZGVmIHNob3dfdHJhbnNhY3Rpb25zX21lbnUoZGI6IERhdGFiYXNlKToKCiAgICBzZWwgPSAwCgogICAgd2hpbGUgc2VsICE9IDY6CiAgICAgICAgcHJpbnQoZm9ybWF0X21lbnUoIlRSQU5TQUNUSU9OUyIpKQogICAgICAgIHByaW50KCcxLiBWaWV3IEFsbCBUcmFuc2FjdGlvbnMnKQogICAgICAgIHByaW50KCcyLiBWaWV3IFNlbGVjdGVkIFRyYW5zYWN0aW9uJykKICAgICAgICBwcmludCgnMy4gQWRkIE5ldyBUcmFuc2FjdGlvbicpCjx8ZmltX2hvbGV8PgogICAgICAgIHNlbCA9IGZvcmNlX3VzZXJfbnVtYmVyX3NlbGVjdGlvbigpCiAgICAgICAgCiAgICAgICAgaWYgc2VsID09IDE6CiAgICAgICAgICAgIHZpZXdfYWxsX3RyYW5zYWN0aW9ucyhkYikKICAgICAgICBlbGlmIHNlbCA9PSAyOgogICAgICAgICAgICB2aWV3X3NlbGVjdGVkX3RyYW5zYWN0aW9uKGRiKQogICAgICAgIGVsaWYgc2VsID09IDM6CiAgICAgICAgICAgIGFkZF9uZXdfdHJhbnNhY3Rpb24oZGIpCiAgICAgICAgZWxpZiBzZWwgPT0gNDoKICAgICAgICAgICAgZGVsZXRlX3RyYW5zYWN0aW9uKGRiKQogICAgICAgIGVsaWYgc2VsID09IDU6CiAgICAgICAgICAgIHNob3dfdmVuZG9yX21lbnUoZGIpCiAgICAgICAgZWxpZiBzZWwgPT0gNjoKICAgICAgICAgICAgYnJlYWsKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCgiSW52YWxpZCBPcHRpb24iKQogICAgICAgIAogICAgICAgIHNlbCA9IDAKCmRlZiB2aWV3X2FsbF90cmFuc2FjdGlvbnMoZGI6IERhdGFiYXNlKToKICAgIHRyYW5zYWN0aW9ucyA9IGRiLkdldFRyYW5zYWN0aW9ucygpCiAgICBmb3IgdHJhbnMgaW4gdHJhbnNhY3Rpb25zOgogICAgICAgIHByaW50KHRyYW5zKQoKZGVmIHZpZXdfc2VsZWN0ZWRfdHJhbnNhY3Rpb24oZGI6IERhdGFiYXNlKToKICAgIHZpZXdfYWxsX3RyYW5zYWN0aW9ucyhkYikKICAgIHNlbGVjdGVkX3RyYW5zYWN0aW9uX2lkID0gZm9yY2VfdXNlcl9udW1iZXJfc2VsZWN0aW9uKCJTZWxlY3QgSUQgb2YgdHJhbnNhY3Rpb246ICIpCgogICAgdHJhbnNhY3Rpb24gPSBkYi5HZXRUcmFuc2FjdGlvbkZyb21JZChzZWxlY3RlZF90cmFuc2FjdGlvbl9pZCkKICAgIGlmIHRyYW5zYWN0aW9uIGlzIE5vbmU6CiAgICAgICAgcHJpbnQoIklEIG5vdCBmb3VuZC4gQ2FuY2VsbGluZy4uLiIpCiAgICAgICAgcmV0dXJuCgogICAgcHJpbnQodHJhbnNhY3Rpb24pCgogICAgcmV0dXJuIHRyYW5zYWN0aW9uCgpkZWYgYWRkX25ld192ZW5kb3JfdHlwZShkYjogRGF0YWJhc2UpIC0+IFZlbmRvclR5cGU6CiAgICB0eXBlX25hbWUgPSBpbnB1dCgiZW50ZXIgdmVuZG9yIGNhdGVnb3J5OiAiKQogICAgdHJ5OgogICAgICAgIGRiLkFkZFZlbmRvclR5cGUodHlwZV9uYW1lKQogICAgICAgIHByaW50KCJ2ZW5kb3IgY2F0ZWdvcnkgYWRkZWQgc3VjY2Vzc2Z1bGx5ISIpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgcHJpbnQoImFkZCB2ZW5kb3IgY2F0ZWdvcnkgZmFpbGVkIikKICAgICAgICBwcmludChlKQogICAgCgpkZWYgYWRkX25ld190cmFuc2FjdGlvbihkYjogRGF0YWJhc2UpOgogICAgI3ZlbmRvcl90eXBlIC0+IHZlbmRvciAtPiB0cmFuc2FjdGlvbgogICAgc2VsZWN0ZWRfdHlwZTogaW50ID0gTm9uZQogICAgc2VsZWN0ZWRfdmVuZG9yOiBpbnQgPSBOb25lCgogICAgI3ZlbmRvcl90eXBlCiAgICB0eXBlcyA9IGRiLkdldFZlbmRvclR5cGVzKCkKICAgIGlmIGxlbih0eXBlcykgPD0gMDoKICAgICAgICBwcmludCgibmVlZCB0byBhZGQgYSB2ZW5kb3IgY2F0ZWdvcnkgZmlyc3QiKQogICAgICAgIGFkZF9uZXdfdmVuZG9yX3R5cGUoZGIpCiAgICAgICAgc2VsZWN0ZWRfdHlwZSA9IGRiLkdldFZlbmRvclR5cGVzKClbMF0KICAgIGVsc2U6CiAgICAgICAgc2VsZWN0ZWRfdHlwZTogVmVuZG9yVHlwZSA9IE5vbmUKICAgICAgICB3aGlsZSBzZWxlY3RlZF90eXBlIGlzIE5vbmUgb3Igc2VsZWN0ZWRfdHlwZSA9PSAtMToKICAgICAgICAgICAgc2VsZWN0ZWRfdHlwZSA9IHNlbGVjdF9vYmpfZnJvbV9saXN0KHR5cGVzLCAndmVuZG9yIGNhdGVnb3J5JykKICAgICAgICAgICAgcHJpbnQoImludmFsaWQgZW50cnkiKQoKICAgICN2ZW5kb3IKICAgIHZlbmRvcnMgPSBkYi5HZXRWZW5kb3JzKCkKICAgIGlmIGxlbih2ZW5kb3JzKSA8PSAwOgogICAgICAgIHByaW50KCJuZWVkIHRvIGFkZCBhIHZlbmRvciBmaXJzdCIpCiAgICAgICAgYWRkX25ld192ZW5kb3IoZGIpCiAgICAgICAgc2VsZWN0ZWRfdmVuZG9yID0gZGIuR2V0VmVuZG9ycygpWzBdCiAgICBlbHNlOgogICAgICAgIHNlbGVjdGVkX3ZlbmRvcjogVmVuZG9yID0gTm9uZQogICAgICAgIHdoaWxlIHNlbGVjdGVkX3ZlbmRvciBpcyBOb25lIG9yIHNlbGVjdGVkX3ZlbmRvciA9PSAtMToKICAgICAgICAgICAgc2VsZWN0ZWRfdmVuZG9yID0gc2VsZWN0X29ial9mcm9tX2xpc3QodmVuZG9ycywgInZlbmRvcnMiKSAKICAgIAogICAgI3RyYW5zYWN0aW9uCiAgICBhbXQ6IHN0ciA9IGlucHV0KCJFbnRlciB0cmFuc2FjdGlvbiBhbW91bnQ6ICIpCgogICAgcHVyY2hhc2VfZGF0ZTogZGF0ZXRpbWUgPSBOb25lIAogICAgd2hpbGUgcHVyY2hhc2VfZGF0ZSBpcyBOb25lOgogICAgICAgIHB1cmNoYXNlX2RhdGUgPSBnZXRfZGF0ZXRpbWUoKSAKCiAgICBzZWxlY3RlZF9jYXRlZ29yeTogQ2F0ZWdvcnkgPSB2aWV3X3NlbGVjdGVkX2NhdGVnb3J5KGRiKQoKICAgIG1lbW8gPSBpbnB1dCgiRW50ZXIgbWVtbyAoUHJlc3MgRW50ZXIgZm9yIGVtcHR5KTogIikKICAgIHRyYW5zX2luZm8gPSBbMCwgc2VsZWN0ZWRfdHlwZS52ZW5kb3JfdHlwZV9pZCwgc2VsZWN0ZWRfY2F0ZWdvcnkuY2F0ZWdvcnlfaWQsIHNlbGVjdGVkX3ZlbmRvci52ZW5kb3JfaWQsIGFtdCwgcHVyY2hhc2VfZGF0ZSwgbWVtb10KCiAgICB0cnk6CiAgICAgICAgZGIuQWRkVHJhbnNhY3Rpb24oVHJhbnNhY3Rpb24odHJhbnNfaW5mbykpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgcHJpbnQoIkVycm9yIGFkZGluZyB0cmFuc2FjdGlvbiIpCiAgICAgICAgcHJpbnQoZSkKCmRlZiBkZWxldGVfdHJhbnNhY3Rpb24oZGI6IERhdGFiYXNlKToKICAgIHByaW50KGYiZGVsZXRpbmcgdHJhbnNhY3Rpb24gd2l0aCBpZDoiKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHByaW50KCc0LiBEZWxldGUgVHJhbnNhY3Rpb24nKQogICAgICAgIHByaW50KCc1LiBWZW5kb3IgTWVudScpCiAgICAgICAgcHJpbnQoJzYuIE1haW4gTWVudScpCgo8fGZpbV9lbmR8Pg=="]
["1770082fed3460fb5dc670f10d3dfb4f4490d77c-2","1770082fed3460fb5dc670f10d3dfb4f4490d77c","PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKZnJvbSBEYXRhYmFzZSBpbXBvcnQgRGF0YWJhc2UKZnJvbSBUYWJsZXMuVHJhbnNhY3Rpb25zIGltcG9ydCBUcmFuc2FjdGlvbgpmcm9tIFRhYmxlcy5WZW5kb3JUeXBlIGltcG9ydCBWZW5kb3JUeXBlCmZyb20gVGFibGVzLlZlbmRvciBpbXBvcnQgVmVuZG9yCmZyb20gVGFibGVzLkNhdGVnb3JpZXMgaW1wb3J0IENhdGVnb3J5CmZyb20gLk1haW5NZW51IGltcG9ydCBmb3JtYXRfbWVudQpmcm9tIE1lbnVGdW5jdGlvbnMgaW1wb3J0IGZvcmNlX3VzZXJfbnVtYmVyX3NlbGVjdGlvbiwgc2VsZWN0X29ial9mcm9tX2xpc3QsIGdldF9kYXRldGltZSwgdHJ5X3VzZXJfbnVtYmVyX3NlbGVjdGlvbgpmcm9tIC5DYXRlZ29yeU1lbnUgaW1wb3J0IHZpZXdfc2VsZWN0ZWRfY2F0ZWdvcnkKZnJvbSAuVmVuZG9yTWVudSBpbXBvcnQgc2hvd192ZW5kb3JfbWVudQoKZGVmIHNob3dfdHJhbnNhY3Rpb25zX21lbnUoZGI6IERhdGFiYXNlKToKCiAgICBzZWwgPSAwCgogICAgd2hpbGUgc2VsICE9IDY6CiAgICAgICAgcHJpbnQoZm9ybWF0X21lbnUoIlRSQU5TQUNUSU9OUyIpKQogICAgICAgIHByaW50KCcxLiBWaWV3IEFsbCBUcmFuc2FjdGlvbnMnKQogICAgICAgIHByaW50KCcyLiBWaWV3IFNlbGVjdGVkIFRyYW5zYWN0aW9uJykKICAgICAgICBwcmludCgnMy4gQWRkIE5ldyBUcmFuc2FjdGlvbicpCiAgICAgICAgcHJpbnQoJzQuIERlbGV0ZSBUcmFuc2FjdGlvbicpCiAgICAgICAgcHJpbnQoJzUuIFZlbmRvciBNZW51JykKICAgICAgICBwcmludCgnNi4gTWFpbiBNZW51JykKCiAgICAgICAgc2VsID0gZm9yY2VfdXNlcl9udW1iZXJfc2VsZWN0aW9uKCkKICAgICAgICAKICAgICAgICBpZiBzZWwgPT0gMToKICAgICAgICAgICAgdmlld19hbGxfdHJhbnNhY3Rpb25zKGRiKQogICAgICAgIGVsaWYgc2VsID09IDI6CiAgICAgICAgICAgIHZpZXdfc2VsZWN0ZWRfdHJhbnNhY3Rpb24oZGIpCiAgICAgICAgZWxpZiBzZWwgPT0gMzoKICAgICAgICAgICAgYWRkX25ld190cmFuc2FjdGlvbihkYikKICAgICAgICBlbGlmIHNlbCA9PSA0OgogICAgICAgICAgICBkZWxldGVfdHJhbnNhY3Rpb24oZGIpCiAgICAgICAgZWxpZiBzZWwgPT0gNToKICAgICAgICAgICAgc2hvd192ZW5kb3JfbWVudShkYikKICAgICAgICBlbGlmIHNlbCA9PSA2OgogICAgICAgICAgICBicmVhawogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50KCJJbnZhbGlkIE9wdGlvbiIpCiAgICAgICAgCiAgICAgICAgc2VsID0gMAoKZGVmIHZpZXdfYWxsX3RyYW5zYWN0aW9ucyhkYjogRGF0YWJhc2UpOgogICAgdHJhbnNhY3Rpb25zID0gZGIuR2V0VHJhbnNhY3Rpb25zKCkKICAgIGZvciB0cmFucyBpbiB0cmFuc2FjdGlvbnM6CiAgICAgICAgcHJpbnQodHJhbnMpCgpkZWYgdmlld19zZWxlY3RlZF90cmFuc2FjdGlvbihkYjogRGF0YWJhc2UpOgogICAgdmlld19hbGxfdHJhbnNhY3Rpb25zKGRiKQogICAgc2VsZWN0ZWRfdHJhbnNhY3Rpb25faWQgPSBmb3JjZV91c2VyX251bWJlcl9zZWxlY3Rpb24oIlNlbGVjdCBJRCBvZiB0cmFuc2FjdGlvbjogIikKCiAgICB0cmFuc2FjdGlvbiA9IGRiLkdldFRyYW5zYWN0aW9uRnJvbUlkKHNlbGVjdGVkX3RyYW5zYWN0aW9uX2lkKQogICAgaWYgdHJhbnNhY3Rpb24gaXMgTm9uZToKICAgICAgICBwcmludCgiSUQgbm90IGZvdW5kLiBDYW5jZWxsaW5nLi4uIikKICAgICAgICByZXR1cm4KCiAgICBwcmludCh0cmFuc2FjdGlvbikKCiAgICByZXR1cm4gdHJhbnNhY3Rpb24KCmRlZiBhZGRfbmV3X3ZlbmRvcl90eXBlKGRiOiBEYXRhYmFzZSkgLT4gVmVuZG9yVHlwZToKICAgIHR5cGVfbmFtZSA9IGlucHV0KCJlbnRlciB2ZW5kb3IgY2F0ZWdvcnk6ICIpCiAgICB0cnk6CiAgICAgICAgZGIuQWRkVmVuZG9yVHlwZSh0eXBlX25hbWUpCiAgICAgICAgcHJpbnQoInZlbmRvciBjYXRlZ29yeSBhZGRlZCBzdWNjZXNzZnVsbHkhIikKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBwcmludCgiYWRkIHZlbmRvciBjYXRlZ29yeSBmYWlsZWQiKQogICAgICAgIHByaW50KGUpCiAgICAKCmRlZiBhZGRfbmV3X3RyYW5zYWN0aW9uKGRiOiBEYXRhYmFzZSk6CiAgICAjdmVuZG9yX3R5cGUgLT4gdmVuZG9yIC0+IHRyYW5zYWN0aW9uCiAgICBzZWxlY3RlZF90eXBlOiBpbnQgPSBOb25lCiAgICBzZWxlY3RlZF92ZW5kb3I6IGludCA9IE5vbmUKCiAgICAjdmVuZG9yX3R5cGUKICAgIHR5cGVzID0gZGIuR2V0VmVuZG9yVHlwZXMoKQogICAgaWYgbGVuKHR5cGVzKSA8PSAwOgogICAgICAgIHByaW50KCJuZWVkIHRvIGFkZCBhIHZlbmRvciBjYXRlZ29yeSBmaXJzdCIpCiAgICAgICAgYWRkX25ld192ZW5kb3JfdHlwZShkYikKICAgICAgICBzZWxlY3RlZF90eXBlID0gZGIuR2V0VmVuZG9yVHlwZXMoKVswXQogICAgZWxzZToKICAgICAgICBzZWxlY3RlZF90eXBlOiBWZW5kb3JUeXBlID0gTm9uZQogICAgICAgIHdoaWxlIHNlbGVjdGVkX3R5cGUgaXMgTm9uZSBvciBzZWxlY3RlZF90eXBlID09IC0xOgogICAgICAgICAgICBzZWxlY3RlZF90eXBlID0gc2VsZWN0X29ial9mcm9tX2xpc3QodHlwZXMsICd2ZW5kb3IgY2F0ZWdvcnknKQogICAgICAgICAgICBwcmludCgiaW52YWxpZCBlbnRyeSIpCgogICAgI3ZlbmRvcgogICAgdmVuZG9ycyA9IGRiLkdldFZlbmRvcnMoKQogICAgaWYgbGVuKHZlbmRvcnMpIDw9IDA6CiAgICAgICAgcHJpbnQoIm5lZWQgdG8gYWRkIGEgdmVuZG9yIGZpcnN0IikKICAgICAgICBhZGRfbmV3X3ZlbmRvcihkYikKICAgICAgICBzZWxlY3RlZF92ZW5kb3IgPSBkYi5HZXRWZW5kb3JzKClbMF0KICAgIGVsc2U6CiAgICAgICAgc2VsZWN0ZWRfdmVuZG9yOiBWZW5kb3IgPSBOb25lCiAgICAgICAgd2hpbGUgc2VsZWN0ZWRfdmVuZG9yIGlzIE5vbmUgb3Igc2VsZWN0ZWRfdmVuZG9yID09IC0xOgogICAgICAgICAgICBzZWxlY3RlZF92ZW5kb3IgPSBzZWxlY3Rfb2JqX2Zyb21fbGlzdCh2ZW5kb3JzLCAidmVuZG9ycyIpIAo8fGZpbV9ob2xlfD4KICAgIHB1cmNoYXNlX2RhdGU6IGRhdGV0aW1lID0gTm9uZSAKICAgIHdoaWxlIHB1cmNoYXNlX2RhdGUgaXMgTm9uZToKICAgICAgICBwdXJjaGFzZV9kYXRlID0gZ2V0X2RhdGV0aW1lKCkgCgogICAgc2VsZWN0ZWRfY2F0ZWdvcnk6IENhdGVnb3J5ID0gdmlld19zZWxlY3RlZF9jYXRlZ29yeShkYikKCiAgICBtZW1vID0gaW5wdXQoIkVudGVyIG1lbW8gKFByZXNzIEVudGVyIGZvciBlbXB0eSk6ICIpCiAgICB0cmFuc19pbmZvID0gWzAsIHNlbGVjdGVkX3R5cGUudmVuZG9yX3R5cGVfaWQsIHNlbGVjdGVkX2NhdGVnb3J5LmNhdGVnb3J5X2lkLCBzZWxlY3RlZF92ZW5kb3IudmVuZG9yX2lkLCBhbXQsIHB1cmNoYXNlX2RhdGUsIG1lbW9dCgogICAgdHJ5OgogICAgICAgIGRiLkFkZFRyYW5zYWN0aW9uKFRyYW5zYWN0aW9uKHRyYW5zX2luZm8pKQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIHByaW50KCJFcnJvciBhZGRpbmcgdHJhbnNhY3Rpb24iKQogICAgICAgIHByaW50KGUpCgpkZWYgZGVsZXRlX3RyYW5zYWN0aW9uKGRiOiBEYXRhYmFzZSk6CiAgICBwcmludChmImRlbGV0aW5nIHRyYW5zYWN0aW9uIHdpdGggaWQ6IikKPHxmaW1fc3VmZml4fD4KICAgIAogICAgI3RyYW5zYWN0aW9uCiAgICBhbXQ6IHN0ciA9IGlucHV0KCJFbnRlciB0cmFuc2FjdGlvbiBhbW91bnQ6ICIpCgo8fGZpbV9lbmR8Pg=="]
["1770082fed3460fb5dc670f10d3dfb4f4490d77c-3","1770082fed3460fb5dc670f10d3dfb4f4490d77c","PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKZnJvbSBEYXRhYmFzZSBpbXBvcnQgRGF0YWJhc2UKZnJvbSBUYWJsZXMuVHJhbnNhY3Rpb25zIGltcG9ydCBUcmFuc2FjdGlvbgpmcm9tIFRhYmxlcy5WZW5kb3JUeXBlIGltcG9ydCBWZW5kb3JUeXBlCmZyb20gVGFibGVzLlZlbmRvciBpbXBvcnQgVmVuZG9yCmZyb20gVGFibGVzLkNhdGVnb3JpZXMgaW1wb3J0IENhdGVnb3J5CmZyb20gLk1haW5NZW51IGltcG9ydCBmb3JtYXRfbWVudQpmcm9tIE1lbnVGdW5jdGlvbnMgaW1wb3J0IGZvcmNlX3VzZXJfbnVtYmVyX3NlbGVjdGlvbiwgc2VsZWN0X29ial9mcm9tX2xpc3QsIGdldF9kYXRldGltZSwgdHJ5X3VzZXJfbnVtYmVyX3NlbGVjdGlvbgpmcm9tIC5DYXRlZ29yeU1lbnUgaW1wb3J0IHZpZXdfc2VsZWN0ZWRfY2F0ZWdvcnkKZnJvbSAuVmVuZG9yTWVudSBpbXBvcnQgc2hvd192ZW5kb3JfbWVudQoKZGVmIHNob3dfdHJhbnNhY3Rpb25zX21lbnUoZGI6IERhdGFiYXNlKToKCiAgICBzZWwgPSAwCgogICAgd2hpbGUgc2VsICE9IDY6CiAgICAgICAgcHJpbnQoZm9ybWF0X21lbnUoIlRSQU5TQUNUSU9OUyIpKQogICAgICAgIHByaW50KCcxLiBWaWV3IEFsbCBUcmFuc2FjdGlvbnMnKQogICAgICAgIHByaW50KCcyLiBWaWV3IFNlbGVjdGVkIFRyYW5zYWN0aW9uJykKICAgICAgICBwcmludCgnMy4gQWRkIE5ldyBUcmFuc2FjdGlvbicpCiAgICAgICAgcHJpbnQoJzQuIERlbGV0ZSBUcmFuc2FjdGlvbicpCiAgICAgICAgcHJpbnQoJzUuIFZlbmRvciBNZW51JykKICAgICAgICBwcmludCgnNi4gTWFpbiBNZW51JykKCiAgICAgICAgc2VsID0gZm9yY2VfdXNlcl9udW1iZXJfc2VsZWN0aW9uKCkKICAgICAgICAKICAgICAgICBpZiBzZWwgPT0gMToKICAgICAgICAgICAgdmlld19hbGxfdHJhbnNhY3Rpb25zKGRiKQogICAgICAgIGVsaWYgc2VsID09IDI6CiAgICAgICAgICAgIHZpZXdfc2VsZWN0ZWRfdHJhbnNhY3Rpb24oZGIpCiAgICAgICAgZWxpZiBzZWwgPT0gMzoKICAgICAgICAgICAgYWRkX25ld190cmFuc2FjdGlvbihkYikKICAgICAgICBlbGlmIHNlbCA9PSA0OgogICAgICAgICAgICBkZWxldGVfdHJhbnNhY3Rpb24oZGIpCiAgICAgICAgZWxpZiBzZWwgPT0gNToKICAgICAgICAgICAgc2hvd192ZW5kb3JfbWVudShkYikKICAgICAgICBlbGlmIHNlbCA9PSA2OgogICAgICAgICAgICBicmVhawogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50KCJJbnZhbGlkIE9wdGlvbiIpCiAgICAgICAgCiAgICAgICAgc2VsID0gMAoKZGVmIHZpZXdfYWxsX3RyYW5zYWN0aW9ucyhkYjogRGF0YWJhc2UpOgogICAgdHJhbnNhY3Rpb25zID0gZGIuR2V0VHJhbnNhY3Rpb25zKCkKICAgIGZvciB0cmFucyBpbiB0cmFuc2FjdGlvbnM6CiAgICAgICAgcHJpbnQodHJhbnMpCgpkZWYgdmlld19zZWxlY3RlZF90cmFuc2FjdGlvbihkYjogRGF0YWJhc2UpOgogICAgdmlld19hbGxfdHJhbnNhY3Rpb25zKGRiKQogICAgc2VsZWN0ZWRfdHJhbnNhY3Rpb25faWQgPSBmb3JjZV91c2VyX251bWJlcl9zZWxlY3Rpb24oIlNlbGVjdCBJRCBvZiB0cmFuc2FjdGlvbjogIikKCiAgICB0cmFuc2FjdGlvbiA9IGRiLkdldFRyYW5zYWN0aW9uRnJvbUlkKHNlbGVjdGVkX3RyYW5zYWN0aW9uX2lkKQogICAgaWYgdHJhbnNhY3Rpb24gaXMgTm9uZToKICAgICAgICBwcmludCgiSUQgbm90IGZvdW5kLiBDYW5jZWxsaW5nLi4uIikKICAgICAgICByZXR1cm4KCiAgICBwcmludCh0cmFuc2FjdGlvbikKCiAgICByZXR1cm4gdHJhbnNhY3Rpb24KCmRlZiBhZGRfbmV3X3ZlbmRvcl90eXBlKGRiOiBEYXRhYmFzZSkgLT4gVmVuZG9yVHlwZToKICAgIHR5cGVfbmFtZSA9IGlucHV0KCJlbnRlciB2ZW5kb3IgY2F0ZWdvcnk6ICIpCiAgICB0cnk6CiAgICAgICAgZGIuQWRkVmVuZG9yVHlwZSh0eXBlX25hbWUpCiAgICAgICAgcHJpbnQoInZlbmRvciBjYXRlZ29yeSBhZGRlZCBzdWNjZXNzZnVsbHkhIikKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBwcmludCgiYWRkIHZlbmRvciBjYXRlZ29yeSBmYWlsZWQiKQogICAgICAgIHByaW50KGUpCiAgICAKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIGFkZF9uZXdfdHJhbnNhY3Rpb24oZGI6IERhdGFiYXNlKToKICAgICN2ZW5kb3JfdHlwZSAtPiB2ZW5kb3IgLT4gdHJhbnNhY3Rpb24KICAgIHNlbGVjdGVkX3R5cGU6IGludCA9IE5vbmUKICAgIHNlbGVjdGVkX3ZlbmRvcjogaW50ID0gTm9uZQo8fGZpbV9lbmR8Pg=="]
["1758989e0052fb60a01bd57fdcfd40f3318010fc-1","1758989e0052fb60a01bd57fdcfd40f3318010fc","PHxmaW1fcHJlZml4fD4KIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCiMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCiMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQojICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAojIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCiMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCiMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwojIHVuZGVyIHRoZSBMaWNlbnNlLgoKZnJvbSBhZ2UubW9kZWxzIGltcG9ydCBWZXJ0ZXgKaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCBkZWNpbWFsCmltcG9ydCBhZ2UgCgpEU04gPSAiaG9zdD0xNzIuMTcuMC4yIHBvcnQ9NTQzMiBkYm5hbWU9cG9zdGdyZXMgdXNlcj1wb3N0Z3JlcyBwYXNzd29yZD1hZ2VucyIKVEVTVF9IT1NUID0gIjE3Mi4xNy4wLjIiClRFU1RfUE9SVCA9IDU0MzIKVEVTVF9EQiA9ICJwb3N0Z3JlcyIKVEVTVF9VU0VSID0gInBvc3RncmVzIgpURVNUX1BBU1NXT1JEID0gImFnZW5zIgpURVNUX0dSQVBIX05BTUUgPSAidGVzdF9ncmFwaCIKCmNsYXNzIFRlc3RBZ2VCYXNpYyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICBhZyA9IE5vbmUKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBwcmludCgiQ29ubmVjdGluZyB0byBUZXN0IEdyYXBoLi4uLi4iKQogICAgICAgIHNlbGYuYWcgPSBhZ2UuY29ubmVjdChncmFwaD1URVNUX0dSQVBIX05BTUUsIGhvc3Q9VEVTVF9IT1NULCBwb3J0PVRFU1RfUE9SVCwgZGJuYW1lPVRFU1RfREIsIHVzZXI9VEVTVF9VU0VSLCBwYXNzd29yZD1URVNUX1BBU1NXT1JEKQoKCiAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIyBDbGVhciB0ZXN0IGRhdGEKICAgICAgICBwcmludCgiRGVsZXRpbmcgVGVzdCBHcmFwaC4uLi4uIikKICAgICAgICBhZ2UuZGVsZXRlR3JhcGgoc2VsZi5hZy5jb25uZWN0aW9uLCBzZWxmLmFnLmdyYXBoTmFtZSkKICAgICAgICBzZWxmLmFnLmNsb3NlKCkKCiAgICBkZWYgdGVzdEV4ZWMoc2VsZik6CiAgICAgICAgYWcgPSBzZWxmLmFnCiAgICAgICAgIyBDcmVhdGUgYW5kIFJldHVybiBzaW5nbGUgY29sdW1uCiAgICAgICAgY3Vyc29yID0gYWcuZXhlY0N5cGhlcigiQ1JFQVRFIChuOlBlcnNvbiB7bmFtZTogJXMsIHRpdGxlOiAnRGV2ZWxvcGVyJ30pIFJFVFVSTiBuIiwgcGFyYW1zPSgnQW5keScsKSkKICAgICAgICBmb3Igcm93IGluIGN1cnNvcjoKICAgICAgICAgICAgcHJpbnQoVmVydGV4LCB0eXBlKHJvd1swXSkpCgogICAgICAgIAogICAgICAgICMgQ3JlYXRlIGFuZCBSZXR1cm4gbXVsdGkgY29sdW1ucwogICAgICAgIGN1cnNvciA9IGFnLmV4ZWNDeXBoZXIoIkNSRUFURSAobjpQZXJzb24ge25hbWU6ICVzLCB0aXRsZTogJXN9KSBSRVRVUk4gaWQobiksIG4ubmFtZSIsIGNvbHM9WydpZCcsJ25hbWUnXSwgcGFyYW1zPSgnSmFjaycsJ01hbmFnZXInKSkKICAgICAgICByb3cgPSBjdXJzb3IuZmV0Y2hvbmUoKQogICAgICAgIHByaW50KHJvd1swXSwgcm93WzFdKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50LCB0eXBlKHJvd1swXSkpCiAgICAgICAgYWcuY29tbWl0KCkKCiAgICAgICAgICAgIAogICAgICAgIAogICAgZGVmIHRlc3RRdWVyeShzZWxmKToKICAgICAgICBhZyA9IHNlbGYuYWcKICAgICAgICBhZy5leGVjQ3lwaGVyKCJDUkVBVEUgKG46UGVyc29uIHtuYW1lOiAlc30pICIsIHBhcmFtcz0oJ0phY2snLCkpCiAgICAgICAgYWcuZXhlY0N5cGhlcigiQ1JFQVRFIChuOlBlcnNvbiB7bmFtZTogJXN9KSAiLCBwYXJhbXM9KCdBbmR5JywpKQogICAgICAgIGFnLmV4ZWNDeXBoZXIoIkNSRUFURSAobjpQZXJzb24ge25hbWU6ICVzfSkgIiwgcGFyYW1zPSgnU21pdGgnLCkpCiAgICAgICAgYWcuZXhlY0N5cGhlcigiTUFUQ0ggKGE6UGVyc29uKSwgKGI6UGVyc29uKSBXSEVSRSBhLm5hbWUgPSAnQW5keScgQU5EIGIubmFtZSA9ICdKYWNrJyBDUkVBVEUgKGEpLVtyOndvcmtXaXRoIHt3ZWlnaHQ6IDN9XS0+KGIpIikKICAgICAgICBhZy5leGVjQ3lwaGVyKCIiIk1BVENIIChhOlBlcnNvbiksIChiOlBlcnNvbikgCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgIGEubmFtZSA9ICVzIEFORCBiLm5hbWUgPSAlcyAKICAgICAgICAgICAgICAgICAgICBDUkVBVEUgcD0oKGEpLVtyOndvcmtXaXRoXS0+KGIpKSAiIiIsIHBhcmFtcz0oJ0phY2snLCAnU21pdGgnLCkpCiAgICAgICAgCiAgICAgICAgYWcuY29tbWl0KCkKCiAgICAgICAgY3Vyc29yID0gYWcuZXhlY0N5cGhlcigiTUFUQ0ggcD0oKS1bOndvcmtXaXRoXS0oKSBSRVRVUk4gcCIpCiAgICAgICAgZm9yIHJvdyBpbiBjdXJzb3I6CiAgICAgICAgICAgIHBhdGggPSByb3dbMF0KICAgICAgICAgICAgcHJpbnQoIlNUQVJUOiIsIHBhdGhbMF0pCiAgICAgICAgICAgIHByaW50KCJFREdFOiIsIHBhdGhbMV0pCiAgICAgICAgICAgIHByaW50KCJFTkQ6IiwgcGF0aFsyXSkgIAoKICAgICAgICBjdXJzb3IgPSBhZy5leGVjQ3lwaGVyKCJNQVRDSCBwPShhKS1bYl0tKGMpIFdIRVJFIGIud2VpZ2h0PjIgUkVUVVJOIGEsbGFiZWwoYiksIGIud2VpZ2h0LCBjIiwgY29scz1bImEiLCJibCIsImJ3IiwgImMiXSwgcGFyYW1zPSgyLCkpCiAgICAgICAgZm9yIHJvdyBpbiBjdXJzb3I6CiAgICAgICAgICAgIHN0YXJ0ID0gcm93WzBdCiAgICAgICAgICAgIGVkZ2VsID0gcm93WzFdCiAgICAgICAgICAgIGVkZ2V3ID0gcm93WzJdCiAgICAgICAgICAgIGVuZCA9IHJvd1szXQogICAgICAgICAgICBwcmludChzdGFydFsibmFtZSJdICwgZWRnZWwsIGVkZ2V3LCBlbmRbIm5hbWUiXSkgCiAgICAgICAgICAgIAogICAgICAgIAogICAgZGVmIHRlc3RDaGFuZ2VEYXRhKHNlbGYpOgogICAgICAgIGFnID0gc2VsZi5hZwogICAgICAgICMgQ3JlYXRlIFZlcnRpY2VzCiAgICAgICAgIyBDb21taXQgYXV0b21hdGljYWxseQogICAgICAgIGFnLmV4ZWNDeXBoZXIoIkNSRUFURSAobjpQZXJzb24ge25hbWU6ICdKb2UnfSkiKQoKICAgICAgICBjdXJzb3IgPSBhZy5leGVjQ3lwaGVyKCJDUkVBVEUgKG46UGVyc29uIHtuYW1lOiAlcywgdGl0bGU6ICdEZXZlbG9wZXInfSkgUkVUVVJOIG4iLCBwYXJhbXM9KCdTbWl0aCcsKSkKICAgICAgICByb3cgPSBjdXJzb3IuZmV0Y2hvbmUoKQogICAgICAgIHByaW50KCJDUkVBVEVEOiAiLCByb3dbMF0pCiAgICAgICAgCiAgICAgICAgIyBZb3UgbXVzdCBjb21taXQgZXhwbGljaXRseQogICAgICAgIGFnLmNvbW1pdCgpCgogICAgICAgIGN1cnNvciA9IGFnLmV4ZWNDeXBoZXIoIk1BVENIIChuOlBlcnNvbiB7bmFtZTogJXN9KSBTRVQgbi50aXRsZT0lcyBSRVRVUk4gbiIsIHBhcmFtcz0oJ1NtaXRoJywnTWFuYWdlcicsKSkKICAgICAgICByb3cgPSBjdXJzb3IuZmV0Y2hvbmUoKQogICAgICAgIHZlcnRleCA9IHJvd1swXSAKICAgICAgICB0aXRsZTEgPSB2ZXJ0ZXhbInRpdGxlIl0KICAgICAgICBwcmludCgiU0VUIHRpdGxlOiAiLCB0aXRsZTEpCgogICAgICAgIGFnLmNvbW1pdCgpCiAgICAKICAgICAgICBjdXJzb3IgPSBhZy5leGVjQ3lwaGVyKCJNQVRDSCAocDpQZXJzb24ge25hbWU6ICdTbWl0aCd9KSBSRVRVUk4gcC50aXRsZSIpCiAgICAgICAgcm93ID0gY3Vyc29yLmZldGNob25lKCkKICAgICAgICB0aXRsZTIgPSByb3dbMF0KCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aXRsZTEsIHRpdGxlMikKCiAgICAgICAgY3Vyc29yID0gYWcuZXhlY0N5cGhlcigiTUFUQ0ggKG46UGVyc29uIHtuYW1lOiAlc30pIFNFVCBuLmJpZ051bT0tNi40NTE2MWUrNDY6Om51bWVyaWMgUkVUVVJOIG4iLCBwYXJhbXM9KCdTbWl0aCcsKSkKICAgICAgICByb3cgPSBjdXJzb3IuZmV0Y2hvbmUoKQogICAgICAgIHZlcnRleCA9IHJvd1swXQogICAgICAgIGZvciByb3cgaW4gY3Vyc29yOgogICAgICAgICAgICBwcmludCgiU0VUIGJpZ051bTogIiwgdmVydGV4KQogICAgICAgIAogICAgICAgIGJpZ051bTEgPSB2ZXJ0ZXhbImJpZ051bSJdCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjaW1hbC5EZWNpbWFsKCItNi40NTE2MWUrNDYiKSwgYmlnTnVtMSkKICAgICAgICBhZy5jb21taXQoKQoKCiAgICAgICAgY3Vyc29yID0gYWcuZXhlY0N5cGhlcigiTUFUQ0ggKHA6UGVyc29uIHtuYW1lOiAnU21pdGgnfSkgUkVUVVJOIHAuYmlnTnVtIikKICAgICAgICByb3cgPSBjdXJzb3IuZmV0Y2hvbmUoKQogICAgICAgIGJpZ051bTIgPSByb3dbMF0KCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaWdOdW0xLCBiaWdOdW0yKQoKCiAgICAgICAgY3Vyc29yID0gYWcuZXhlY0N5cGhlcigiTUFUQ0ggKG46UGVyc29uIHtuYW1lOiAlc30pIFJFTU9WRSBuLnRpdGxlIFJFVFVSTiBuIiwgcGFyYW1zPSgnU21pdGgnLCkpCiAgICAgICAgZm9yIHJvdyBpbiBjdXJzb3I6CiAgICAgICAgICAgIHByaW50KCJSRU1PVkUgUHJvcCB0aXRsZTogIiwgcm93WzBdKQoKICAgICAgICAjIFlvdSBtdXN0IGNvbW1pdCBleHBsaWNpdGx5CiAgICAgICAgYWcuY29tbWl0KCkKCiAgICAKICAgIGRlZiB0ZXN0Q3lwaGVyKHNlbGYpOgogICAgICAgIGFnID0gc2VsZi5hZwoKICAgICAgICB3aXRoIGFnLmNvbm5lY3Rpb24uY3Vyc29yKCkgYXMgY3Vyc29yOgogICAgICAgICAgICB0cnkgOgogICAgICAgICAgICAgICAgYWcuY3lwaGVyKGN1cnNvciwgIkNSRUFURSAobjpQZXJzb24ge25hbWU6ICVzfSkgIiwgcGFyYW1zPSgnSm9uZScsKSkKICAgICAgICAgICAgICAgIGFnLmN5cGhlcihjdXJzb3IsICJDUkVBVEUgKG46UGVyc29uIHtuYW1lOiAlc30pICIsIHBhcmFtcz0oJ0phY2snLCkpCiAgICAgICAgICAgICAgICBhZy5jeXBoZXIoY3Vyc29yLCAiQ1JFQVRFIChuOlBlcnNvbiB7bmFtZTogJXN9KSAiLCBwYXJhbXM9KCdBbmR5JywpKQogICAgICAgICAgICAgICAgYWcuY3lwaGVyKGN1cnNvciwgIkNSRUFURSAobjpQZXJzb24ge25hbWU6ICVzfSkgIiwgcGFyYW1zPSgnU21pdGgnLCkpCiAgICAgICAgICAgICAgICBhZy5jeXBoZXIoY3Vyc29yLCAiQ1JFQVRFIChuOlBlcnNvbiB7bmFtZTogJXN9KSAiLCBwYXJhbXM9KCdUb20nLCkpCgogICAgICAgICAgICAgICAgIyBZb3UgbXVzdCBjb21taXQgZXhwbGljaXRseQogICAgICAgICAgICAgICAgYWcuY29tbWl0KCkKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleDoKICAgICAgICAgICAgICAgIHByaW50KGV4KQogICAgICAgICAgICAgICAgYWcucm9sbGJhY2soKQoKICAgICAgICB3aXRoIGFnLmNvbm5lY3Rpb24uY3Vyc29yKCkgYXMgY3Vyc29yOgogICAgICAgICAgICB0cnkgOiMgQ3JlYXRlIEVkZ2VzCiAgICAgICAgICAgICAgICBhZy5jeXBoZXIoY3Vyc29yLCJNQVRDSCAoYTpQZXJzb24pLCAoYjpQZXJzb24pIFdIRVJFIGEubmFtZSA9ICdKb2UnIEFORCBiLm5hbWUgPSAnU21pdGgnIENSRUFURSAoYSktW3I6d29ya1dpdGgge3dlaWdodDogM31dLT4oYikiKQogICAgICAgICAgICAgICAgYWcuY3lwaGVyKGN1cnNvciwiTUFUQ0ggKGE6UGVyc29uKSwgKGI6UGVyc29uKSBXSEVSRSAgYS5uYW1lID0gJ0FuZHknIEFORCBiLm5hbWUgPSAnVG9tJyBDUkVBVEUgKGEpLVtyOndvcmtXaXRoIHt3ZWlnaHQ6IDF9XS0+KGIpIikKICAgICAgICAgICAgICAgIGFnLmN5cGhlcihjdXJzb3IsIk1BVENIIChhOlBlcnNvbiB7bmFtZTogJ0phY2snfSksIChiOlBlcnNvbiB7bmFtZTogJ0FuZHknfSkgQ1JFQVRFIChhKS1bcjp3b3JrV2l0aCB7d2VpZ2h0OiA1fV0tPihiKSIpCgogICAgICAgICAgICAgICAgIyBZb3UgbXVzdCBjb21taXQgZXhwbGljaXRseQogICAgICAgICAgICAgICAgYWcuY29tbWl0KCkKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleDoKICAgICAgICAgICAgICAgIHByaW50KGV4KQogICAgICAgICAgICAgICAgYWcucm9sbGJhY2soKQogICAgICAgIAoKICAgICAgICAjIFdpdGggUGFyYW1zCiAgICAgICAgY3Vyc29yID0gYWcuZXhlY0N5cGhlcigiIiJNQVRDSCAoYTpQZXJzb24pLCAoYjpQZXJzb24pIAogICAgICAgICAgICAgICAgV0hFUkUgIGEubmFtZSA9ICVzIEFORCBiLm5hbWUgPSAlcyAKICAgICAgICAgICAgICAgIENSRUFURSBwPSgoYSktW3I6d29ya1dpdGhdLT4oYikpIFJFVFVSTiBwIiIiLCAKICAgICAgICAgICAgICAgIHBhcmFtcz0oJ0FuZHknLCAnU21pdGgnLCkpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZm9yIHJvdyBpbiBjdXJzb3I6CiAgICAgICAgICAgIHByaW50KHJvd1swXSkKICAgICAgICAgICAgCiAgICAgICAgY3Vyc29yID0gYWcuZXhlY0N5cGhlcigiIiJNQVRDSCAoYTpQZXJzb24ge25hbWU6ICdKb2UnfSksIChiOlBlcnNvbiB7bmFtZTogJ0phY2snfSkgCjx8ZmltX2VuZHw+"]
["1758989e0052fb60a01bd57fdcfd40f3318010fc-2","1758989e0052fb60a01bd57fdcfd40f3318010fc","PHxmaW1fcHJlZml4fD4KIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCiMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCiMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQojICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAojIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCiMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCiMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwojIHVuZGVyIHRoZSBMaWNlbnNlLgoKZnJvbSBhZ2UubW9kZWxzIGltcG9ydCBWZXJ0ZXgKaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCBkZWNpbWFsCmltcG9ydCBhZ2UgCgpEU04gPSAiaG9zdD0xNzIuMTcuMC4yIHBvcnQ9NTQzMiBkYm5hbWU9cG9zdGdyZXMgdXNlcj1wb3N0Z3JlcyBwYXNzd29yZD1hZ2VucyIKVEVTVF9IT1NUID0gIjE3Mi4xNy4wLjIiClRFU1RfUE9SVCA9IDU0MzIKVEVTVF9EQiA9ICJwb3N0Z3JlcyIKVEVTVF9VU0VSID0gInBvc3RncmVzIgpURVNUX1BBU1NXT1JEID0gImFnZW5zIgpURVNUX0dSQVBIX05BTUUgPSAidGVzdF9ncmFwaCIKCmNsYXNzIFRlc3RBZ2VCYXNpYyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICBhZyA9IE5vbmUKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBwcmludCgiQ29ubmVjdGluZyB0byBUZXN0IEdyYXBoLi4uLi4iKQogICAgICAgIHNlbGYuYWcgPSBhZ2UuY29ubmVjdChncmFwaD1URVNUX0dSQVBIX05BTUUsIGhvc3Q9VEVTVF9IT1NULCBwb3J0PVRFU1RfUE9SVCwgZGJuYW1lPVRFU1RfREIsIHVzZXI9VEVTVF9VU0VSLCBwYXNzd29yZD1URVNUX1BBU1NXT1JEKQoKCiAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIyBDbGVhciB0ZXN0IGRhdGEKICAgICAgICBwcmludCgiRGVsZXRpbmcgVGVzdCBHcmFwaC4uLi4uIikKICAgICAgICBhZ2UuZGVsZXRlR3JhcGgoc2VsZi5hZy5jb25uZWN0aW9uLCBzZWxmLmFnLmdyYXBoTmFtZSkKICAgICAgICBzZWxmLmFnLmNsb3NlKCkKCiAgICBkZWYgdGVzdEV4ZWMoc2VsZik6CiAgICAgICAgYWcgPSBzZWxmLmFnCiAgICAgICAgIyBDcmVhdGUgYW5kIFJldHVybiBzaW5nbGUgY29sdW1uCiAgICAgICAgY3Vyc29yID0gYWcuZXhlY0N5cGhlcigiQ1JFQVRFIChuOlBlcnNvbiB7bmFtZTogJXMsIHRpdGxlOiAnRGV2ZWxvcGVyJ30pIFJFVFVSTiBuIiwgcGFyYW1zPSgnQW5keScsKSkKICAgICAgICBmb3Igcm93IGluIGN1cnNvcjoKICAgICAgICAgICAgcHJpbnQoVmVydGV4LCB0eXBlKHJvd1swXSkpCgogICAgICAgIAogICAgICAgICMgQ3JlYXRlIGFuZCBSZXR1cm4gbXVsdGkgY29sdW1ucwogICAgICAgIGN1cnNvciA9IGFnLmV4ZWNDeXBoZXIoIkNSRUFURSAobjpQZXJzb24ge25hbWU6ICVzLCB0aXRsZTogJXN9KSBSRVRVUk4gaWQobiksIG4ubmFtZSIsIGNvbHM9WydpZCcsJ25hbWUnXSwgcGFyYW1zPSgnSmFjaycsJ01hbmFnZXInKSkKICAgICAgICByb3cgPSBjdXJzb3IuZmV0Y2hvbmUoKQogICAgICAgIHByaW50KHJvd1swXSwgcm93WzFdKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50LCB0eXBlKHJvd1swXSkpCiAgICAgICAgYWcuY29tbWl0KCkKCiAgICAgICAgICAgIAogICAgICAgIAogICAgZGVmIHRlc3RRdWVyeShzZWxmKToKICAgICAgICBhZyA9IHNlbGYuYWcKICAgICAgICBhZy5leGVjQ3lwaGVyKCJDUkVBVEUgKG46UGVyc29uIHtuYW1lOiAlc30pICIsIHBhcmFtcz0oJ0phY2snLCkpCiAgICAgICAgYWcuZXhlY0N5cGhlcigiQ1JFQVRFIChuOlBlcnNvbiB7bmFtZTogJXN9KSAiLCBwYXJhbXM9KCdBbmR5JywpKQogICAgICAgIGFnLmV4ZWNDeXBoZXIoIkNSRUFURSAobjpQZXJzb24ge25hbWU6ICVzfSkgIiwgcGFyYW1zPSgnU21pdGgnLCkpCiAgICAgICAgYWcuZXhlY0N5cGhlcigiTUFUQ0ggKGE6UGVyc29uKSwgKGI6UGVyc29uKSBXSEVSRSBhLm5hbWUgPSAnQW5keScgQU5EIGIubmFtZSA9ICdKYWNrJyBDUkVBVEUgKGEpLVtyOndvcmtXaXRoIHt3ZWlnaHQ6IDN9XS0+KGIpIikKICAgICAgICBhZy5leGVjQ3lwaGVyKCIiIk1BVENIIChhOlBlcnNvbiksIChiOlBlcnNvbikgCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgIGEubmFtZSA9ICVzIEFORCBiLm5hbWUgPSAlcyAKICAgICAgICAgICAgICAgICAgICBDUkVBVEUgcD0oKGEpLVtyOndvcmtXaXRoXS0+KGIpKSAiIiIsIHBhcmFtcz0oJ0phY2snLCAnU21pdGgnLCkpCiAgICAgICAgCiAgICAgICAgYWcuY29tbWl0KCkKCiAgICAgICAgY3Vyc29yID0gYWcuZXhlY0N5cGhlcigiTUFUQ0ggcD0oKS1bOndvcmtXaXRoXS0oKSBSRVRVUk4gcCIpCiAgICAgICAgZm9yIHJvdyBpbiBjdXJzb3I6CiAgICAgICAgICAgIHBhdGggPSByb3dbMF0KICAgICAgICAgICAgcHJpbnQoIlNUQVJUOiIsIHBhdGhbMF0pCiAgICAgICAgICAgIHByaW50KCJFREdFOiIsIHBhdGhbMV0pCiAgICAgICAgICAgIHByaW50KCJFTkQ6IiwgcGF0aFsyXSkgIAoKICAgICAgICBjdXJzb3IgPSBhZy5leGVjQ3lwaGVyKCJNQVRDSCBwPShhKS1bYl0tKGMpIFdIRVJFIGIud2VpZ2h0PjIgUkVUVVJOIGEsbGFiZWwoYiksIGIud2VpZ2h0LCBjIiwgY29scz1bImEiLCJibCIsImJ3IiwgImMiXSwgcGFyYW1zPSgyLCkpCiAgICAgICAgZm9yIHJvdyBpbiBjdXJzb3I6CiAgICAgICAgICAgIHN0YXJ0ID0gcm93WzBdCiAgICAgICAgICAgIGVkZ2VsID0gcm93WzFdCiAgICAgICAgICAgIGVkZ2V3ID0gcm93WzJdCiAgICAgICAgICAgIGVuZCA9IHJvd1szXQogICAgICAgICAgICBwcmludChzdGFydFsibmFtZSJdICwgZWRnZWwsIGVkZ2V3LCBlbmRbIm5hbWUiXSkgCiAgICAgICAgICAgIAogICAgICAgIAogICAgZGVmIHRlc3RDaGFuZ2VEYXRhKHNlbGYpOgogICAgICAgIGFnID0gc2VsZi5hZwogICAgICAgICMgQ3JlYXRlIFZlcnRpY2VzCiAgICAgICAgIyBDb21taXQgYXV0b21hdGljYWxseQogICAgICAgIGFnLmV4ZWNDeXBoZXIoIkNSRUFURSAobjpQZXJzb24ge25hbWU6ICdKb2UnfSkiKQoKICAgICAgICBjdXJzb3IgPSBhZy5leGVjQ3lwaGVyKCJDUkVBVEUgKG46UGVyc29uIHtuYW1lOiAlcywgdGl0bGU6ICdEZXZlbG9wZXInfSkgUkVUVVJOIG4iLCBwYXJhbXM9KCdTbWl0aCcsKSkKICAgICAgICByb3cgPSBjdXJzb3IuZmV0Y2hvbmUoKQogICAgICAgIHByaW50KCJDUkVBVEVEOiAiLCByb3dbMF0pCiAgICAgICAgCiAgICAgICAgIyBZb3UgbXVzdCBjb21taXQgZXhwbGljaXRseQogICAgICAgIGFnLmNvbW1pdCgpCgogICAgICAgIGN1cnNvciA9IGFnLmV4ZWNDeXBoZXIoIk1BVENIIChuOlBlcnNvbiB7bmFtZTogJXN9KSBTRVQgbi50aXRsZT0lcyBSRVRVUk4gbiIsIHBhcmFtcz0oJ1NtaXRoJywnTWFuYWdlcicsKSkKICAgICAgICByb3cgPSBjdXJzb3IuZmV0Y2hvbmUoKQogICAgICAgIHZlcnRleCA9IHJvd1swXSAKICAgICAgICB0aXRsZTEgPSB2ZXJ0ZXhbInRpdGxlIl0KICAgICAgICBwcmludCgiU0VUIHRpdGxlOiAiLCB0aXRsZTEpCgogICAgICAgIGFnLmNvbW1pdCgpCiAgICAKICAgICAgICBjdXJzb3IgPSBhZy5leGVjQ3lwaGVyKCJNQVRDSCAocDpQZXJzb24ge25hbWU6ICdTbWl0aCd9KSBSRVRVUk4gcC50aXRsZSIpCiAgICAgICAgcm93ID0gY3Vyc29yLmZldGNob25lKCkKICAgICAgICB0aXRsZTIgPSByb3dbMF0KCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aXRsZTEsIHRpdGxlMikKCiAgICAgICAgY3Vyc29yID0gYWcuZXhlY0N5cGhlcigiTUFUQ0ggKG46UGVyc29uIHtuYW1lOiAlc30pIFNFVCBuLmJpZ051bT0tNi40NTE2MWUrNDY6Om51bWVyaWMgUkVUVVJOIG4iLCBwYXJhbXM9KCdTbWl0aCcsKSkKICAgICAgICByb3cgPSBjdXJzb3IuZmV0Y2hvbmUoKQogICAgICAgIHZlcnRleCA9IHJvd1swXQogICAgICAgIGZvciByb3cgaW4gY3Vyc29yOgogICAgICAgICAgICBwcmludCgiU0VUIGJpZ051bTogIiwgdmVydGV4KQogICAgICAgIAogICAgICAgIGJpZ051bTEgPSB2ZXJ0ZXhbImJpZ051bSJdCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjaW1hbC5EZWNpbWFsKCItNi40NTE2MWUrNDYiKSwgYmlnTnVtMSkKICAgICAgICBhZy5jb21taXQoKQoKCiAgICAgICAgY3Vyc29yID0gYWcuZXhlY0N5cGhlcigiTUFUQ0ggKHA6UGVyc29uIHtuYW1lOiAnU21pdGgnfSkgUkVUVVJOIHAuYmlnTnVtIikKICAgICAgICByb3cgPSBjdXJzb3IuZmV0Y2hvbmUoKQogICAgICAgIGJpZ051bTIgPSByb3dbMF0KCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaWdOdW0xLCBiaWdOdW0yKQoKCiAgICAgICAgY3Vyc29yID0gYWcuZXhlY0N5cGhlcigiTUFUQ0ggKG46UGVyc29uIHtuYW1lOiAlc30pIFJFTU9WRSBuLnRpdGxlIFJFVFVSTiBuIiwgcGFyYW1zPSgnU21pdGgnLCkpCiAgICAgICAgZm9yIHJvdyBpbiBjdXJzb3I6CiAgICAgICAgICAgIHByaW50KCJSRU1PVkUgUHJvcCB0aXRsZTogIiwgcm93WzBdKQoKICAgICAgICAjIFlvdSBtdXN0IGNvbW1pdCBleHBsaWNpdGx5CiAgICAgICAgYWcuY29tbWl0KCkKCiAgICAKICAgIGRlZiB0ZXN0Q3lwaGVyKHNlbGYpOgogICAgICAgIGFnID0gc2VsZi5hZwoKICAgICAgICB3aXRoIGFnLmNvbm5lY3Rpb24uY3Vyc29yKCkgYXMgY3Vyc29yOgogICAgICAgICAgICB0cnkgOgogICAgICAgICAgICAgICAgYWcuY3lwaGVyKGN1cnNvciwgIkNSRUFURSAobjpQZXJzb24ge25hbWU6ICVzfSkgIiwgcGFyYW1zPSgnSm9uZScsKSkKICAgICAgICAgICAgICAgIGFnLmN5cGhlcihjdXJzb3IsICJDUkVBVEUgKG46UGVyc29uIHtuYW1lOiAlc30pICIsIHBhcmFtcz0oJ0phY2snLCkpCiAgICAgICAgICAgICAgICBhZy5jeXBoZXIoY3Vyc29yLCAiQ1JFQVRFIChuOlBlcnNvbiB7bmFtZTogJXN9KSAiLCBwYXJhbXM9KCdBbmR5JywpKQogICAgICAgICAgICAgICAgYWcuY3lwaGVyKGN1cnNvciwgIkNSRUFURSAobjpQZXJzb24ge25hbWU6ICVzfSkgIiwgcGFyYW1zPSgnU21pdGgnLCkpCiAgICAgICAgICAgICAgICBhZy5jeXBoZXIoY3Vyc29yLCAiQ1JFQVRFIChuOlBlcnNvbiB7bmFtZTogJXN9KSAiLCBwYXJhbXM9KCdUb20nLCkpCgogICAgICAgICAgICAgICAgIyBZb3UgbXVzdCBjb21taXQgZXhwbGljaXRseQogICAgICAgICAgICAgICAgYWcuY29tbWl0KCkKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleDoKICAgICAgICAgICAgICAgIHByaW50KGV4KQogICAgICAgICAgICAgICAgYWcucm9sbGJhY2soKQoKICAgICAgICB3aXRoIGFnLmNvbm5lY3Rpb24uY3Vyc29yKCkgYXMgY3Vyc29yOgogICAgICAgICAgICB0cnkgOiMgQ3JlYXRlIEVkZ2VzCiAgICAgICAgICAgICAgICBhZy5jeXBoZXIoY3Vyc29yLCJNQVRDSCAoYTpQZXJzb24pLCAoYjpQZXJzb24pIFdIRVJFIGEubmFtZSA9ICdKb2UnIEFORCBiLm5hbWUgPSAnU21pdGgnIENSRUFURSAoYSktW3I6d29ya1dpdGgge3dlaWdodDogM31dLT4oYikiKQogICAgICAgICAgICAgICAgYWcuY3lwaGVyKGN1cnNvciwiTUFUQ0ggKGE6UGVyc29uKSwgKGI6UGVyc29uKSBXSEVSRSAgYS5uYW1lID0gJ0FuZHknIEFORCBiLm5hbWUgPSAnVG9tJyBDUkVBVEUgKGEpLVtyOndvcmtXaXRoIHt3ZWlnaHQ6IDF9XS0+KGIpIikKICAgICAgICAgICAgICAgIGFnLmN5cGhlcihjdXJzb3IsIk1BVENIIChhOlBlcnNvbiB7bmFtZTogJ0phY2snfSksIChiOlBlcnNvbiB7bmFtZTogJ0FuZHknfSkgQ1JFQVRFIChhKS1bcjp3b3JrV2l0aCB7d2VpZ2h0OiA1fV0tPihiKSIpCgogICAgICAgICAgICAgICAgIyBZb3UgbXVzdCBjb21taXQgZXhwbGljaXRseQogICAgICAgICAgICAgICAgYWcuY29tbWl0KCkKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleDoKICAgICAgICAgICAgICAgIHByaW50KGV4KQogICAgICAgICAgICAgICAgYWcucm9sbGJhY2soKQogICAgICAgIAoKICAgICAgICAjIFdpdGggUGFyYW1zCiAgICAgICAgY3Vyc29yID0gYWcuZXhlY0N5cGhlcigiIiJNQVRDSCAoYTpQZXJzb24pLCAoYjpQZXJzb24pIAogICAgICAgICAgICAgICAgV0hFUkUgIGEubmFtZSA9ICVzIEFORCBiLm5hbWUgPSAlcyAKICAgICAgICAgICAgICAgIENSRUFURSBwPSgoYSktW3I6d29ya1dpdGhdLT4oYikpIFJFVFVSTiBwIiIiLCAKICAgICAgICAgICAgICAgIHBhcmFtcz0oJ0FuZHknLCAnU21pdGgnLCkpCgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgIENSRUFURSBwPSgoYSktW3I6d29ya1dpdGgge3dlaWdodDogNX1dLT4oYikpCiAgICAgICAgICAgICAgICBSRVRVUk4gcCAiIiIpCgogICAgICAgIGZvciByb3cgaW4gY3Vyc29yOgogICAgICAgICAgICBwcmludChyb3dbMF0pCiAgICAgICAgICAgIAoKCiAgICBkZWYgdGVzdE11bHRpcGxlRWRnZXMoc2VsZik6CiAgICAgICAgYWcgPSBzZWxmLmFnCiAgICAgICAgd2l0aCBhZy5jb25uZWN0aW9uLmN1cnNvcigpIGFzIGN1cnNvcjoKICAgICAgICAgICAgdHJ5IDoKICAgICAgICAgICAgICAgIGFnLmN5cGhlcihjdXJzb3IsICJDUkVBVEUgKG46Q291bnRyeSB7bmFtZTogJXN9KSAiLCBwYXJhbXM9KCdVU0EnLCkpCiAgICAgICAgICAgICAgICBhZy5jeXBoZXIoY3Vyc29yLCAiQ1JFQVRFIChuOkNvdW50cnkge25hbWU6ICVzfSkgIiwgcGFyYW1zPSgnRnJhbmNlJywpKQogICAgICAgICAgICAgICAgYWcuY3lwaGVyKGN1cnNvciwgIkNSRUFURSAobjpDb3VudHJ5IHtuYW1lOiAlc30pICIsIHBhcmFtcz0oJ0tvcmVhJywpKQogICAgICAgICAgICAgICAgYWcuY3lwaGVyKGN1cnNvciwgIkNSRUFURSAobjpDb3VudHJ5IHtuYW1lOiAlc30pICIsIHBhcmFtcz0oJ1J1c3NpYScsKSkKCiAgICAgICAgICAgICAgICAjIFlvdSBtdXN0IGNvbW1pdCBleHBsaWNpdGx5IGFmdGVyIGFsbCBleGVjdXRpb25zLgogICAgICAgICAgICAgICAgYWcuY29ubmVjdGlvbi5jb21taXQoKQogICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgogICAgICAgICAgICAgICAgYWcucm9sbGJhY2soKQogICAgICAgICAgICAgICAgcmFpc2UgZXgKCiAgICAgICAgd2l0aCBhZy5jb25uZWN0aW9uLmN1cnNvcigpIGFzIGN1cnNvcjoKICAgICAgICAgICAgdHJ5IDojIENyZWF0ZSBFZGdlcwogICAgICAgICAgICAgICAgYWcuY3lwaGVyKGN1cnNvciwiTUFUQ0ggKGE6Q291bnRyeSksIChiOkNvdW50cnkpIFdIRVJFIGEubmFtZSA9ICdVU0EnIEFORCBiLm5hbWUgPSAnRnJhbmNlJyBDUkVBVEUgKGEpLVtyOmRpc3RhbmNlIHt1bml0OidtaWxlcycsIHZhbHVlOiA0NzYwfV0tPihiKSIpCiAgICAgICAgICAgICAgICBhZy5jeXBoZXIoY3Vyc29yLCJNQVRDSCAoYTpDb3VudHJ5KSwgKGI6Q291bnRyeSkgV0hFUkUgIGEubmFtZSA9ICdGcmFuY2UnIEFORCBiLm5hbWUgPSAnS29yZWEnIENSRUFURSAoYSktW3I6ZGlzdGFuY2Uge3VuaXQ6ICdrbScsIHZhbHVlOiA5MjI4fV0tPihiKSIpCiAgICAgICAgICAgICAgICBhZy5jeXBoZXIoY3Vyc29yLCJNQVRDSCAoYTpDb3VudHJ5IHtuYW1lOiAnS29yZWEnfSksIChiOkNvdW50cnkge25hbWU6ICdSdXNzaWEnfSkgQ1JFQVRFIChhKS1bcjpkaXN0YW5jZSB7dW5pdDona20nLCB2YWx1ZTogMzA3OH1dLT4oYikiKQoKICAgICAgICAgICAgICAgICMgWW91IG11c3QgY29tbWl0IGV4cGxpY2l0bHkKICAgICAgICAgICAgICAgIGFnLmNvbm5lY3Rpb24uY29tbWl0KCkKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleDoKICAgICAgICAgICAgICAgIGFnLnJvbGxiYWNrKCkKICAgICAgICAgICAgICAgIHJhaXNlIGV4CgoKICAgICAgICBjdXJzb3IgPSBhZy5leGVjQ3lwaGVyKCIiIk1BVENIIHA9KDpDb3VudHJ5IHtuYW1lOiJVU0EifSktWzpkaXN0YW5jZV0tKDpDb3VudHJ5KS1bOmRpc3RhbmNlXS0oOkNvdW50cnkpIAogICAgICAgICAgICAgICAgUkVUVVJOIHAiIiIpCgogICAgICAgIGNvdW50ID0gMAogICAgICAgIGZvciByb3cgaW4gY3Vyc29yOgogICAgICAgICAgICBwYXRoID0gcm93WzBdCiAgICAgICAgICAgIGluZGVudCA9ICIiCiAgICAgICAgICAgIGZvciBlIGluIHBhdGg6CiAgICAgICAgICAgICAgICBpZiBlLmd0eXBlID09IGFnZS5UUF9WRVJURVg6CiAgICAgICAgICAgICAgICAgICAgcHJpbnQoaW5kZW50LCBlLmxhYmVsLCBlWyJuYW1lIl0pCiAgICAgICAgICAgICAgICBlbGlmIGUuZ3R5cGUgPT0gYWdlLlRQX0VER0U6CiAgICAgICAgICAgICAgICAgICAgcHJpbnQoaW5kZW50LCBlLmxhYmVsLCBlWyJ2YWx1ZSJdLCBlWyJ1bml0Il0pCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHByaW50KGluZGVudCwgIlVua25vd24gZWxlbWVudC4iLCBlKQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBjb3VudCArPSAxCiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiA+IgoKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDUsY291bnQpCgogICAgZGVmIHRlc3RDb2xsZWN0KHNlbGYpOgogICAgICAgIGFnID0gc2VsZi5hZwogICAgICAgIAogICAgICAgIHdpdGggYWcuY29ubmVjdGlvbi5jdXJzb3IoKSBhcyBjdXJzb3I6CiAgICAgICAgICAgIHRyeSA6CiAgICAgICAgICAgICAgICBhZy5jeXBoZXIoY3Vyc29yLCAiQ1JFQVRFIChuOlBlcnNvbiB7bmFtZTogJXN9KSAiLCBwYXJhbXM9KCdKb2UnLCkpCiAgICAgICAgICAgICAgICBhZy5jeXBoZXIoY3Vyc29yLCAiQ1JFQVRFIChuOlBlcnNvbiB7bmFtZTogJXN9KSAiLCBwYXJhbXM9KCdKYWNrJywpKQogICAgICAgICAgICAgICAgYWcuY3lwaGVyKGN1cnNvciwgIkNSRUFURSAobjpQZXJzb24ge25hbWU6ICVzfSkgIiwgcGFyYW1zPSgnQW5keScsKSkKICAgICAgICAgICAgICAgIGFnLmN5cGhlcihjdXJzb3IsICJDUkVBVEUgKG46UGVyc29uIHtuYW1lOiAlc30pICIsIHBhcmFtcz0oJ1NtaXRoJywpKQogICAgICAgICAgICAgICAgYWcuY3lwaGVyKGN1cnNvciwgIkNSRUFURSAobjpQZXJzb24ge25hbWU6ICVzfSkgIiwgcGFyYW1zPSgnVG9tJywpKQoKICAgICAgICAgICAgICAgICMgWW91IG11c3QgY29tbWl0IGV4cGxpY2l0bHkKICAgICAgICAgICAgICAgIGFnLmNvbW1pdCgpCiAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6CiAgICAgICAgICAgICAgICBwcmludChleCkKICAgICAgICAgICAgICAgIGFnLnJvbGxiYWNrKCkKCiAgICAgICAgd2l0aCBhZy5jb25uZWN0aW9uLmN1cnNvcigpIGFzIGN1cnNvcjoKICAgICAgICAgICAgdHJ5IDojIENyZWF0ZSBFZGdlcwogICAgICAgICAgICAgICAgYWcuY3lwaGVyKGN1cnNvciwiTUFUQ0ggKGE6UGVyc29uKSwgKGI6UGVyc29uKSBXSEVSRSBhLm5hbWUgPSAnSm9lJyBBTkQgYi5uYW1lID0gJ1NtaXRoJyBDUkVBVEUgKGEpLVtyOndvcmtXaXRoIHt3ZWlnaHQ6IDN9XS0+KGIpIikKICAgICAgICAgICAgICAgIGFnLmN5cGhlcihjdXJzb3IsIk1BVENIIChhOlBlcnNvbiksIChiOlBlcnNvbikgV0hFUkUgIGEubmFtZSA9ICdKb2UnIEFORCBiLm5hbWUgPSAnVG9tJyBDUkVBVEUgKGEpLVtyOndvcmtXaXRoIHt3ZWlnaHQ6IDF9XS0+KGIpIikKICAgICAgICAgICAgICAgIGFnLmN5cGhlcihjdXJzb3IsIk1BVENIIChhOlBlcnNvbiB7bmFtZTogJ0pvZSd9KSwgKGI6UGVyc29uIHtuYW1lOiAnQW5keSd9KSBDUkVBVEUgKGEpLVtyOndvcmtXaXRoIHt3ZWlnaHQ6IDV9XS0+KGIpIikKCiAgICAgICAgICAgICAgICAjIFlvdSBtdXN0IGNvbW1pdCBleHBsaWNpdGx5CiAgICAgICAgICAgICAgICBhZy5jb21taXQoKQogICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgogICAgICAgICAgICAgICAgcHJpbnQoZXgpCiAgICAgICAgICAgICAgICBhZy5yb2xsYmFjaygpCgogICAgICAgIHByaW50KCIgLSBDT0xMRUNUIDEgLS0tLS0tLS0iKQogICAgICAgIHdpdGggYWcuY29ubmVjdGlvbi5jdXJzb3IoKSBhcyBjdXJzb3I6CiAgICAgICAgICAgIGFnLmN5cGhlcihjdXJzb3IsICJNQVRDSCAoYSktWzp3b3JrV2l0aF0tPihjKSBXSVRIIGEgYXMgViwgQ09MTEVDVChjKSBhcyBDViBSRVRVUk4gVi5uYW1lLCBDViIsIGNvbHM9WyJWIiwiQ1YiXSkKICAgICAgICAgICAgZm9yIHJvdyBpbiBjdXJzb3I6CiAgICAgICAgICAgICAgICBubSA9IHJvd1swXQogICAgICAgICAgICAgICAgY29sbGVjdGVkID0gcm93WzFdCiAgICAgICAgICAgICAgICBwcmludChubSwgIndvcmtXaXRoIiwgW2lbIm5hbWUiXSBmb3IgaSBpbiBjb2xsZWN0ZWRdKQogICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLGxlbihjb2xsZWN0ZWQpKQoKICAgCiAgICAgICAgcHJpbnQoIiAtIENPTExFQ1QgMiAtLS0tLS0tLSIpCiAgICAgICAgZm9yIHJvdyBpbiBhZy5leGVjQ3lwaGVyKCJNQVRDSCAoYSktWzp3b3JrV2l0aF0tPihjKSBXSVRIIGEgYXMgViwgQ09MTEVDVChjKSBhcyBDViBSRVRVUk4gVi5uYW1lLCBDViIsIGNvbHM9WyJWMSIsIkNWIl0pOgogICAgICAgICAgICBubSA9IHJvd1swXQogICAgICAgICAgICBjb2xsZWN0ZWQgPSByb3dbMV0KICAgICAgICAgICAgcHJpbnQobm0sICJ3b3JrV2l0aCIsIFtpWyJuYW1lIl0gZm9yIGkgaW4gY29sbGVjdGVkXSkKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLGxlbihjb2xsZWN0ZWQpKQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHVuaXR0ZXN0Lm1haW4oKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGZvciByb3cgaW4gY3Vyc29yOgogICAgICAgICAgICBwcmludChyb3dbMF0pCiAgICAgICAgICAgIAogICAgICAgIGN1cnNvciA9IGFnLmV4ZWNDeXBoZXIoIiIiTUFUQ0ggKGE6UGVyc29uIHtuYW1lOiAnSm9lJ30pLCAoYjpQZXJzb24ge25hbWU6ICdKYWNrJ30pIAo8fGZpbV9lbmR8Pg=="]
["1758989e0052fb60a01bd57fdcfd40f3318010fc-3","1758989e0052fb60a01bd57fdcfd40f3318010fc","PHxmaW1fcHJlZml4fD4KIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCiMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCiMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQojICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAojIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCiMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCiMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwojIHVuZGVyIHRoZSBMaWNlbnNlLgoKZnJvbSBhZ2UubW9kZWxzIGltcG9ydCBWZXJ0ZXgKaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCBkZWNpbWFsCmltcG9ydCBhZ2UgCgpEU04gPSAiaG9zdD0xNzIuMTcuMC4yIHBvcnQ9NTQzMiBkYm5hbWU9cG9zdGdyZXMgdXNlcj1wb3N0Z3JlcyBwYXNzd29yZD1hZ2VucyIKVEVTVF9IT1NUID0gIjE3Mi4xNy4wLjIiClRFU1RfUE9SVCA9IDU0MzIKVEVTVF9EQiA9ICJwb3N0Z3JlcyIKVEVTVF9VU0VSID0gInBvc3RncmVzIgpURVNUX1BBU1NXT1JEID0gImFnZW5zIgpURVNUX0dSQVBIX05BTUUgPSAidGVzdF9ncmFwaCIKCmNsYXNzIFRlc3RBZ2VCYXNpYyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICBhZyA9IE5vbmUKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBwcmludCgiQ29ubmVjdGluZyB0byBUZXN0IEdyYXBoLi4uLi4iKQogICAgICAgIHNlbGYuYWcgPSBhZ2UuY29ubmVjdChncmFwaD1URVNUX0dSQVBIX05BTUUsIGhvc3Q9VEVTVF9IT1NULCBwb3J0PVRFU1RfUE9SVCwgZGJuYW1lPVRFU1RfREIsIHVzZXI9VEVTVF9VU0VSLCBwYXNzd29yZD1URVNUX1BBU1NXT1JEKQoKCiAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIyBDbGVhciB0ZXN0IGRhdGEKICAgICAgICBwcmludCgiRGVsZXRpbmcgVGVzdCBHcmFwaC4uLi4uIikKPHxmaW1faG9sZXw+CiAgICBkZWYgdGVzdEV4ZWMoc2VsZik6CiAgICAgICAgYWcgPSBzZWxmLmFnCiAgICAgICAgIyBDcmVhdGUgYW5kIFJldHVybiBzaW5nbGUgY29sdW1uCiAgICAgICAgY3Vyc29yID0gYWcuZXhlY0N5cGhlcigiQ1JFQVRFIChuOlBlcnNvbiB7bmFtZTogJXMsIHRpdGxlOiAnRGV2ZWxvcGVyJ30pIFJFVFVSTiBuIiwgcGFyYW1zPSgnQW5keScsKSkKICAgICAgICBmb3Igcm93IGluIGN1cnNvcjoKICAgICAgICAgICAgcHJpbnQoVmVydGV4LCB0eXBlKHJvd1swXSkpCgogICAgICAgIAogICAgICAgICMgQ3JlYXRlIGFuZCBSZXR1cm4gbXVsdGkgY29sdW1ucwogICAgICAgIGN1cnNvciA9IGFnLmV4ZWNDeXBoZXIoIkNSRUFURSAobjpQZXJzb24ge25hbWU6ICVzLCB0aXRsZTogJXN9KSBSRVRVUk4gaWQobiksIG4ubmFtZSIsIGNvbHM9WydpZCcsJ25hbWUnXSwgcGFyYW1zPSgnSmFjaycsJ01hbmFnZXInKSkKICAgICAgICByb3cgPSBjdXJzb3IuZmV0Y2hvbmUoKQogICAgICAgIHByaW50KHJvd1swXSwgcm93WzFdKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50LCB0eXBlKHJvd1swXSkpCiAgICAgICAgYWcuY29tbWl0KCkKCiAgICAgICAgICAgIAogICAgICAgIAogICAgZGVmIHRlc3RRdWVyeShzZWxmKToKICAgICAgICBhZyA9IHNlbGYuYWcKICAgICAgICBhZy5leGVjQ3lwaGVyKCJDUkVBVEUgKG46UGVyc29uIHtuYW1lOiAlc30pICIsIHBhcmFtcz0oJ0phY2snLCkpCiAgICAgICAgYWcuZXhlY0N5cGhlcigiQ1JFQVRFIChuOlBlcnNvbiB7bmFtZTogJXN9KSAiLCBwYXJhbXM9KCdBbmR5JywpKQogICAgICAgIGFnLmV4ZWNDeXBoZXIoIkNSRUFURSAobjpQZXJzb24ge25hbWU6ICVzfSkgIiwgcGFyYW1zPSgnU21pdGgnLCkpCiAgICAgICAgYWcuZXhlY0N5cGhlcigiTUFUQ0ggKGE6UGVyc29uKSwgKGI6UGVyc29uKSBXSEVSRSBhLm5hbWUgPSAnQW5keScgQU5EIGIubmFtZSA9ICdKYWNrJyBDUkVBVEUgKGEpLVtyOndvcmtXaXRoIHt3ZWlnaHQ6IDN9XS0+KGIpIikKICAgICAgICBhZy5leGVjQ3lwaGVyKCIiIk1BVENIIChhOlBlcnNvbiksIChiOlBlcnNvbikgCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgIGEubmFtZSA9ICVzIEFORCBiLm5hbWUgPSAlcyAKICAgICAgICAgICAgICAgICAgICBDUkVBVEUgcD0oKGEpLVtyOndvcmtXaXRoXS0+KGIpKSAiIiIsIHBhcmFtcz0oJ0phY2snLCAnU21pdGgnLCkpCiAgICAgICAgCiAgICAgICAgYWcuY29tbWl0KCkKCiAgICAgICAgY3Vyc29yID0gYWcuZXhlY0N5cGhlcigiTUFUQ0ggcD0oKS1bOndvcmtXaXRoXS0oKSBSRVRVUk4gcCIpCiAgICAgICAgZm9yIHJvdyBpbiBjdXJzb3I6CiAgICAgICAgICAgIHBhdGggPSByb3dbMF0KICAgICAgICAgICAgcHJpbnQoIlNUQVJUOiIsIHBhdGhbMF0pCiAgICAgICAgICAgIHByaW50KCJFREdFOiIsIHBhdGhbMV0pCiAgICAgICAgICAgIHByaW50KCJFTkQ6IiwgcGF0aFsyXSkgIAoKICAgICAgICBjdXJzb3IgPSBhZy5leGVjQ3lwaGVyKCJNQVRDSCBwPShhKS1bYl0tKGMpIFdIRVJFIGIud2VpZ2h0PjIgUkVUVVJOIGEsbGFiZWwoYiksIGIud2VpZ2h0LCBjIiwgY29scz1bImEiLCJibCIsImJ3IiwgImMiXSwgcGFyYW1zPSgyLCkpCiAgICAgICAgZm9yIHJvdyBpbiBjdXJzb3I6CiAgICAgICAgICAgIHN0YXJ0ID0gcm93WzBdCiAgICAgICAgICAgIGVkZ2VsID0gcm93WzFdCiAgICAgICAgICAgIGVkZ2V3ID0gcm93WzJdCiAgICAgICAgICAgIGVuZCA9IHJvd1szXQogICAgICAgICAgICBwcmludChzdGFydFsibmFtZSJdICwgZWRnZWwsIGVkZ2V3LCBlbmRbIm5hbWUiXSkgCiAgICAgICAgICAgIAogICAgICAgIAogICAgZGVmIHRlc3RDaGFuZ2VEYXRhKHNlbGYpOgogICAgICAgIGFnID0gc2VsZi5hZwogICAgICAgICMgQ3JlYXRlIFZlcnRpY2VzCiAgICAgICAgIyBDb21taXQgYXV0b21hdGljYWxseQogICAgICAgIGFnLmV4ZWNDeXBoZXIoIkNSRUFURSAobjpQZXJzb24ge25hbWU6ICdKb2UnfSkiKQoKICAgICAgICBjdXJzb3IgPSBhZy5leGVjQ3lwaGVyKCJDUkVBVEUgKG46UGVyc29uIHtuYW1lOiAlcywgdGl0bGU6ICdEZXZlbG9wZXInfSkgUkVUVVJOIG4iLCBwYXJhbXM9KCdTbWl0aCcsKSkKICAgICAgICByb3cgPSBjdXJzb3IuZmV0Y2hvbmUoKQogICAgICAgIHByaW50KCJDUkVBVEVEOiAiLCByb3dbMF0pCiAgICAgICAgCiAgICAgICAgIyBZb3UgbXVzdCBjb21taXQgZXhwbGljaXRseQogICAgICAgIGFnLmNvbW1pdCgpCgogICAgICAgIGN1cnNvciA9IGFnLmV4ZWNDeXBoZXIoIk1BVENIIChuOlBlcnNvbiB7bmFtZTogJXN9KSBTRVQgbi50aXRsZT0lcyBSRVRVUk4gbiIsIHBhcmFtcz0oJ1NtaXRoJywnTWFuYWdlcicsKSkKICAgICAgICByb3cgPSBjdXJzb3IuZmV0Y2hvbmUoKQogICAgICAgIHZlcnRleCA9IHJvd1swXSAKICAgICAgICB0aXRsZTEgPSB2ZXJ0ZXhbInRpdGxlIl0KICAgICAgICBwcmludCgiU0VUIHRpdGxlOiAiLCB0aXRsZTEpCgogICAgICAgIGFnLmNvbW1pdCgpCiAgICAKICAgICAgICBjdXJzb3IgPSBhZy5leGVjQ3lwaGVyKCJNQVRDSCAocDpQZXJzb24ge25hbWU6ICdTbWl0aCd9KSBSRVRVUk4gcC50aXRsZSIpCiAgICAgICAgcm93ID0gY3Vyc29yLmZldGNob25lKCkKICAgICAgICB0aXRsZTIgPSByb3dbMF0KCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aXRsZTEsIHRpdGxlMikKCiAgICAgICAgY3Vyc29yID0gYWcuZXhlY0N5cGhlcigiTUFUQ0ggKG46UGVyc29uIHtuYW1lOiAlc30pIFNFVCBuLmJpZ051bT0tNi40NTE2MWUrNDY6Om51bWVyaWMgUkVUVVJOIG4iLCBwYXJhbXM9KCdTbWl0aCcsKSkKICAgICAgICByb3cgPSBjdXJzb3IuZmV0Y2hvbmUoKQogICAgICAgIHZlcnRleCA9IHJvd1swXQogICAgICAgIGZvciByb3cgaW4gY3Vyc29yOgogICAgICAgICAgICBwcmludCgiU0VUIGJpZ051bTogIiwgdmVydGV4KQogICAgICAgIAogICAgICAgIGJpZ051bTEgPSB2ZXJ0ZXhbImJpZ051bSJdCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjaW1hbC5EZWNpbWFsKCItNi40NTE2MWUrNDYiKSwgYmlnTnVtMSkKICAgICAgICBhZy5jb21taXQoKQoKCiAgICAgICAgY3Vyc29yID0gYWcuZXhlY0N5cGhlcigiTUFUQ0ggKHA6UGVyc29uIHtuYW1lOiAnU21pdGgnfSkgUkVUVVJOIHAuYmlnTnVtIikKICAgICAgICByb3cgPSBjdXJzb3IuZmV0Y2hvbmUoKQogICAgICAgIGJpZ051bTIgPSByb3dbMF0KCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaWdOdW0xLCBiaWdOdW0yKQoKCiAgICAgICAgY3Vyc29yID0gYWcuZXhlY0N5cGhlcigiTUFUQ0ggKG46UGVyc29uIHtuYW1lOiAlc30pIFJFTU9WRSBuLnRpdGxlIFJFVFVSTiBuIiwgcGFyYW1zPSgnU21pdGgnLCkpCiAgICAgICAgZm9yIHJvdyBpbiBjdXJzb3I6CiAgICAgICAgICAgIHByaW50KCJSRU1PVkUgUHJvcCB0aXRsZTogIiwgcm93WzBdKQoKICAgICAgICAjIFlvdSBtdXN0IGNvbW1pdCBleHBsaWNpdGx5CiAgICAgICAgYWcuY29tbWl0KCkKCiAgICAKICAgIGRlZiB0ZXN0Q3lwaGVyKHNlbGYpOgogICAgICAgIGFnID0gc2VsZi5hZwoKICAgICAgICB3aXRoIGFnLmNvbm5lY3Rpb24uY3Vyc29yKCkgYXMgY3Vyc29yOgogICAgICAgICAgICB0cnkgOgogICAgICAgICAgICAgICAgYWcuY3lwaGVyKGN1cnNvciwgIkNSRUFURSAobjpQZXJzb24ge25hbWU6ICVzfSkgIiwgcGFyYW1zPSgnSm9uZScsKSkKICAgICAgICAgICAgICAgIGFnLmN5cGhlcihjdXJzb3IsICJDUkVBVEUgKG46UGVyc29uIHtuYW1lOiAlc30pICIsIHBhcmFtcz0oJ0phY2snLCkpCiAgICAgICAgICAgICAgICBhZy5jeXBoZXIoY3Vyc29yLCAiQ1JFQVRFIChuOlBlcnNvbiB7bmFtZTogJXN9KSAiLCBwYXJhbXM9KCdBbmR5JywpKQogICAgICAgICAgICAgICAgYWcuY3lwaGVyKGN1cnNvciwgIkNSRUFURSAobjpQZXJzb24ge25hbWU6ICVzfSkgIiwgcGFyYW1zPSgnU21pdGgnLCkpCiAgICAgICAgICAgICAgICBhZy5jeXBoZXIoY3Vyc29yLCAiQ1JFQVRFIChuOlBlcnNvbiB7bmFtZTogJXN9KSAiLCBwYXJhbXM9KCdUb20nLCkpCgogICAgICAgICAgICAgICAgIyBZb3UgbXVzdCBjb21taXQgZXhwbGljaXRseQogICAgICAgICAgICAgICAgYWcuY29tbWl0KCkKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleDoKICAgICAgICAgICAgICAgIHByaW50KGV4KQogICAgICAgICAgICAgICAgYWcucm9sbGJhY2soKQoKICAgICAgICB3aXRoIGFnLmNvbm5lY3Rpb24uY3Vyc29yKCkgYXMgY3Vyc29yOgogICAgICAgICAgICB0cnkgOiMgQ3JlYXRlIEVkZ2VzCiAgICAgICAgICAgICAgICBhZy5jeXBoZXIoY3Vyc29yLCJNQVRDSCAoYTpQZXJzb24pLCAoYjpQZXJzb24pIFdIRVJFIGEubmFtZSA9ICdKb2UnIEFORCBiLm5hbWUgPSAnU21pdGgnIENSRUFURSAoYSktW3I6d29ya1dpdGgge3dlaWdodDogM31dLT4oYikiKQogICAgICAgICAgICAgICAgYWcuY3lwaGVyKGN1cnNvciwiTUFUQ0ggKGE6UGVyc29uKSwgKGI6UGVyc29uKSBXSEVSRSAgYS5uYW1lID0gJ0FuZHknIEFORCBiLm5hbWUgPSAnVG9tJyBDUkVBVEUgKGEpLVtyOndvcmtXaXRoIHt3ZWlnaHQ6IDF9XS0+KGIpIikKICAgICAgICAgICAgICAgIGFnLmN5cGhlcihjdXJzb3IsIk1BVENIIChhOlBlcnNvbiB7bmFtZTogJ0phY2snfSksIChiOlBlcnNvbiB7bmFtZTogJ0FuZHknfSkgQ1JFQVRFIChhKS1bcjp3b3JrV2l0aCB7d2VpZ2h0OiA1fV0tPihiKSIpCgogICAgICAgICAgICAgICAgIyBZb3UgbXVzdCBjb21taXQgZXhwbGljaXRseQogICAgICAgICAgICAgICAgYWcuY29tbWl0KCkKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleDoKICAgICAgICAgICAgICAgIHByaW50KGV4KQogICAgICAgICAgICAgICAgYWcucm9sbGJhY2soKQogICAgICAgIAoKICAgICAgICAjIFdpdGggUGFyYW1zCiAgICAgICAgY3Vyc29yID0gYWcuZXhlY0N5cGhlcigiIiJNQVRDSCAoYTpQZXJzb24pLCAoYjpQZXJzb24pIAogICAgICAgICAgICAgICAgV0hFUkUgIGEubmFtZSA9ICVzIEFORCBiLm5hbWUgPSAlcyAKICAgICAgICAgICAgICAgIENSRUFURSBwPSgoYSktW3I6d29ya1dpdGhdLT4oYikpIFJFVFVSTiBwIiIiLCAKICAgICAgICAgICAgICAgIHBhcmFtcz0oJ0FuZHknLCAnU21pdGgnLCkpCgogICAgICAgIGZvciByb3cgaW4gY3Vyc29yOgogICAgICAgICAgICBwcmludChyb3dbMF0pCiAgICAgICAgICAgIAogICAgICAgIGN1cnNvciA9IGFnLmV4ZWNDeXBoZXIoIiIiTUFUQ0ggKGE6UGVyc29uIHtuYW1lOiAnSm9lJ30pLCAoYjpQZXJzb24ge25hbWU6ICdKYWNrJ30pIAogICAgICAgICAgICAgICAgQ1JFQVRFIHA9KChhKS1bcjp3b3JrV2l0aCB7d2VpZ2h0OiA1fV0tPihiKSkKICAgICAgICAgICAgICAgIFJFVFVSTiBwICIiIikKCiAgICAgICAgZm9yIHJvdyBpbiBjdXJzb3I6CiAgICAgICAgICAgIHByaW50KHJvd1swXSkKICAgICAgICAgICAgCgoKICAgIGRlZiB0ZXN0TXVsdGlwbGVFZGdlcyhzZWxmKToKICAgICAgICBhZyA9IHNlbGYuYWcKICAgICAgICB3aXRoIGFnLmNvbm5lY3Rpb24uY3Vyc29yKCkgYXMgY3Vyc29yOgogICAgICAgICAgICB0cnkgOgogICAgICAgICAgICAgICAgYWcuY3lwaGVyKGN1cnNvciwgIkNSRUFURSAobjpDb3VudHJ5IHtuYW1lOiAlc30pICIsIHBhcmFtcz0oJ1VTQScsKSkKICAgICAgICAgICAgICAgIGFnLmN5cGhlcihjdXJzb3IsICJDUkVBVEUgKG46Q291bnRyeSB7bmFtZTogJXN9KSAiLCBwYXJhbXM9KCdGcmFuY2UnLCkpCiAgICAgICAgICAgICAgICBhZy5jeXBoZXIoY3Vyc29yLCAiQ1JFQVRFIChuOkNvdW50cnkge25hbWU6ICVzfSkgIiwgcGFyYW1zPSgnS29yZWEnLCkpCiAgICAgICAgICAgICAgICBhZy5jeXBoZXIoY3Vyc29yLCAiQ1JFQVRFIChuOkNvdW50cnkge25hbWU6ICVzfSkgIiwgcGFyYW1zPSgnUnVzc2lhJywpKQoKICAgICAgICAgICAgICAgICMgWW91IG11c3QgY29tbWl0IGV4cGxpY2l0bHkgYWZ0ZXIgYWxsIGV4ZWN1dGlvbnMuCiAgICAgICAgICAgICAgICBhZy5jb25uZWN0aW9uLmNvbW1pdCgpCiAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6CiAgICAgICAgICAgICAgICBhZy5yb2xsYmFjaygpCiAgICAgICAgICAgICAgICByYWlzZSBleAoKICAgICAgICB3aXRoIGFnLmNvbm5lY3Rpb24uY3Vyc29yKCkgYXMgY3Vyc29yOgogICAgICAgICAgICB0cnkgOiMgQ3JlYXRlIEVkZ2VzCiAgICAgICAgICAgICAgICBhZy5jeXBoZXIoY3Vyc29yLCJNQVRDSCAoYTpDb3VudHJ5KSwgKGI6Q291bnRyeSkgV0hFUkUgYS5uYW1lID0gJ1VTQScgQU5EIGIubmFtZSA9ICdGcmFuY2UnIENSRUFURSAoYSktW3I6ZGlzdGFuY2Uge3VuaXQ6J21pbGVzJywgdmFsdWU6IDQ3NjB9XS0+KGIpIikKICAgICAgICAgICAgICAgIGFnLmN5cGhlcihjdXJzb3IsIk1BVENIIChhOkNvdW50cnkpLCAoYjpDb3VudHJ5KSBXSEVSRSAgYS5uYW1lID0gJ0ZyYW5jZScgQU5EIGIubmFtZSA9ICdLb3JlYScgQ1JFQVRFIChhKS1bcjpkaXN0YW5jZSB7dW5pdDogJ2ttJywgdmFsdWU6IDkyMjh9XS0+KGIpIikKICAgICAgICAgICAgICAgIGFnLmN5cGhlcihjdXJzb3IsIk1BVENIIChhOkNvdW50cnkge25hbWU6ICdLb3JlYSd9KSwgKGI6Q291bnRyeSB7bmFtZTogJ1J1c3NpYSd9KSBDUkVBVEUgKGEpLVtyOmRpc3RhbmNlIHt1bml0OidrbScsIHZhbHVlOiAzMDc4fV0tPihiKSIpCgogICAgICAgICAgICAgICAgIyBZb3UgbXVzdCBjb21taXQgZXhwbGljaXRseQogICAgICAgICAgICAgICAgYWcuY29ubmVjdGlvbi5jb21taXQoKQogICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgogICAgICAgICAgICAgICAgYWcucm9sbGJhY2soKQogICAgICAgICAgICAgICAgcmFpc2UgZXgKCgogICAgICAgIGN1cnNvciA9IGFnLmV4ZWNDeXBoZXIoIiIiTUFUQ0ggcD0oOkNvdW50cnkge25hbWU6IlVTQSJ9KS1bOmRpc3RhbmNlXS0oOkNvdW50cnkpLVs6ZGlzdGFuY2VdLSg6Q291bnRyeSkgCiAgICAgICAgICAgICAgICBSRVRVUk4gcCIiIikKCiAgICAgICAgY291bnQgPSAwCiAgICAgICAgZm9yIHJvdyBpbiBjdXJzb3I6CiAgICAgICAgICAgIHBhdGggPSByb3dbMF0KICAgICAgICAgICAgaW5kZW50ID0gIiIKICAgICAgICAgICAgZm9yIGUgaW4gcGF0aDoKICAgICAgICAgICAgICAgIGlmIGUuZ3R5cGUgPT0gYWdlLlRQX1ZFUlRFWDoKICAgICAgICAgICAgICAgICAgICBwcmludChpbmRlbnQsIGUubGFiZWwsIGVbIm5hbWUiXSkKICAgICAgICAgICAgICAgIGVsaWYgZS5ndHlwZSA9PSBhZ2UuVFBfRURHRToKICAgICAgICAgICAgICAgICAgICBwcmludChpbmRlbnQsIGUubGFiZWwsIGVbInZhbHVlIl0sIGVbInVuaXQiXSkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgcHJpbnQoaW5kZW50LCAiVW5rbm93biBlbGVtZW50LiIsIGUpCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKICAgICAgICAgICAgICAgIGluZGVudCArPSAiID4iCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNSxjb3VudCkKCiAgICBkZWYgdGVzdENvbGxlY3Qoc2VsZik6CiAgICAgICAgYWcgPSBzZWxmLmFnCiAgICAgICAgCiAgICAgICAgd2l0aCBhZy5jb25uZWN0aW9uLmN1cnNvcigpIGFzIGN1cnNvcjoKICAgICAgICAgICAgdHJ5IDoKICAgICAgICAgICAgICAgIGFnLmN5cGhlcihjdXJzb3IsICJDUkVBVEUgKG46UGVyc29uIHtuYW1lOiAlc30pICIsIHBhcmFtcz0oJ0pvZScsKSkKICAgICAgICAgICAgICAgIGFnLmN5cGhlcihjdXJzb3IsICJDUkVBVEUgKG46UGVyc29uIHtuYW1lOiAlc30pICIsIHBhcmFtcz0oJ0phY2snLCkpCiAgICAgICAgICAgICAgICBhZy5jeXBoZXIoY3Vyc29yLCAiQ1JFQVRFIChuOlBlcnNvbiB7bmFtZTogJXN9KSAiLCBwYXJhbXM9KCdBbmR5JywpKQogICAgICAgICAgICAgICAgYWcuY3lwaGVyKGN1cnNvciwgIkNSRUFURSAobjpQZXJzb24ge25hbWU6ICVzfSkgIiwgcGFyYW1zPSgnU21pdGgnLCkpCiAgICAgICAgICAgICAgICBhZy5jeXBoZXIoY3Vyc29yLCAiQ1JFQVRFIChuOlBlcnNvbiB7bmFtZTogJXN9KSAiLCBwYXJhbXM9KCdUb20nLCkpCgogICAgICAgICAgICAgICAgIyBZb3UgbXVzdCBjb21taXQgZXhwbGljaXRseQogICAgICAgICAgICAgICAgYWcuY29tbWl0KCkKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleDoKICAgICAgICAgICAgICAgIHByaW50KGV4KQogICAgICAgICAgICAgICAgYWcucm9sbGJhY2soKQoKICAgICAgICB3aXRoIGFnLmNvbm5lY3Rpb24uY3Vyc29yKCkgYXMgY3Vyc29yOgogICAgICAgICAgICB0cnkgOiMgQ3JlYXRlIEVkZ2VzCiAgICAgICAgICAgICAgICBhZy5jeXBoZXIoY3Vyc29yLCJNQVRDSCAoYTpQZXJzb24pLCAoYjpQZXJzb24pIFdIRVJFIGEubmFtZSA9ICdKb2UnIEFORCBiLm5hbWUgPSAnU21pdGgnIENSRUFURSAoYSktW3I6d29ya1dpdGgge3dlaWdodDogM31dLT4oYikiKQogICAgICAgICAgICAgICAgYWcuY3lwaGVyKGN1cnNvciwiTUFUQ0ggKGE6UGVyc29uKSwgKGI6UGVyc29uKSBXSEVSRSAgYS5uYW1lID0gJ0pvZScgQU5EIGIubmFtZSA9ICdUb20nIENSRUFURSAoYSktW3I6d29ya1dpdGgge3dlaWdodDogMX1dLT4oYikiKQogICAgICAgICAgICAgICAgYWcuY3lwaGVyKGN1cnNvciwiTUFUQ0ggKGE6UGVyc29uIHtuYW1lOiAnSm9lJ30pLCAoYjpQZXJzb24ge25hbWU6ICdBbmR5J30pIENSRUFURSAoYSktW3I6d29ya1dpdGgge3dlaWdodDogNX1dLT4oYikiKQoKICAgICAgICAgICAgICAgICMgWW91IG11c3QgY29tbWl0IGV4cGxpY2l0bHkKICAgICAgICAgICAgICAgIGFnLmNvbW1pdCgpCiAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6CiAgICAgICAgICAgICAgICBwcmludChleCkKICAgICAgICAgICAgICAgIGFnLnJvbGxiYWNrKCkKCiAgICAgICAgcHJpbnQoIiAtIENPTExFQ1QgMSAtLS0tLS0tLSIpCiAgICAgICAgd2l0aCBhZy5jb25uZWN0aW9uLmN1cnNvcigpIGFzIGN1cnNvcjoKICAgICAgICAgICAgYWcuY3lwaGVyKGN1cnNvciwgIk1BVENIIChhKS1bOndvcmtXaXRoXS0+KGMpIFdJVEggYSBhcyBWLCBDT0xMRUNUKGMpIGFzIENWIFJFVFVSTiBWLm5hbWUsIENWIiwgY29scz1bIlYiLCJDViJdKQogICAgICAgICAgICBmb3Igcm93IGluIGN1cnNvcjoKICAgICAgICAgICAgICAgIG5tID0gcm93WzBdCiAgICAgICAgICAgICAgICBjb2xsZWN0ZWQgPSByb3dbMV0KICAgICAgICAgICAgICAgIHByaW50KG5tLCAid29ya1dpdGgiLCBbaVsibmFtZSJdIGZvciBpIGluIGNvbGxlY3RlZF0pCiAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsbGVuKGNvbGxlY3RlZCkpCgogICAKICAgICAgICBwcmludCgiIC0gQ09MTEVDVCAyIC0tLS0tLS0tIikKICAgICAgICBmb3Igcm93IGluIGFnLmV4ZWNDeXBoZXIoIk1BVENIIChhKS1bOndvcmtXaXRoXS0+KGMpIFdJVEggYSBhcyBWLCBDT0xMRUNUKGMpIGFzIENWIFJFVFVSTiBWLm5hbWUsIENWIiwgY29scz1bIlYxIiwiQ1YiXSk6CiAgICAgICAgICAgIG5tID0gcm93WzBdCiAgICAgICAgICAgIGNvbGxlY3RlZCA9IHJvd1sxXQogICAgICAgICAgICBwcmludChubSwgIndvcmtXaXRoIiwgW2lbIm5hbWUiXSBmb3IgaSBpbiBjb2xsZWN0ZWRdKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsbGVuKGNvbGxlY3RlZCkpCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdW5pdHRlc3QubWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgYWdlLmRlbGV0ZUdyYXBoKHNlbGYuYWcuY29ubmVjdGlvbiwgc2VsZi5hZy5ncmFwaE5hbWUpCiAgICAgICAgc2VsZi5hZy5jbG9zZSgpCgo8fGZpbV9lbmR8Pg=="]
["bda748f8479f771ce7ccc2fdc7a0e4c7ebf878d5-1","bda748f8479f771ce7ccc2fdc7a0e4c7ebf878d5","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiIiIlJPUyBOb2RlIHRvIGV4cG9zZSB0b3BpY3MgZm9yIHRoZSBzaG9ydCByYW5nZSBJUiBzZW5zb3JzIG9uIHRoZSBQaS1wdWNrLiIiIgoKaW1wb3J0IG1hdGgKCiMgUk9TIGltcG9ydHMKaW1wb3J0IHJvc3B5CmZyb20gc2Vuc29yX21zZ3MubXNnIGltcG9ydCBSYW5nZQoKIyBTdGFuZGFyZCBpbXBvcnRzCmZyb20gc21idXMgaW1wb3J0IFNNQnVzCgojIENvbnN0YW50cwpJMkNfQ0hBTk5FTCA9IDEyCkVQVUNLX0kyQ19BRERSID0gMHgxZgoKSVJfQ09OVFJPTCA9IDYKSVIwX1JFRkxFQ1RFRCA9IDcKSVIxX1JFRkxFQ1RFRCA9IDgKSVIyX1JFRkxFQ1RFRCA9IDkKSVIzX1JFRkxFQ1RFRCA9IDEwCklSNF9SRUZMRUNURUQgPSAxMQpJUjVfUkVGTEVDVEVEID0gMTIKSVI2X1JFRkxFQ1RFRCA9IDEzCklSN19SRUZMRUNURUQgPSAxNAoKSVJYX1JFRkxFQ1RFRCA9IChJUjBfUkVGTEVDVEVELCBJUjFfUkVGTEVDVEVELCBJUjJfUkVGTEVDVEVELCBJUjNfUkVGTEVDVEVELCBJUjRfUkVGTEVDVEVELAogICAgICAgICAgICAgICAgIElSNV9SRUZMRUNURUQsIElSNl9SRUZMRUNURUQsIElSN19SRUZMRUNURUQpCgpJUjBfQU1CSUVOVCA9IDE1CklSMV9BTUJJRU5UID0gMTYKSVIyX0FNQklFTlQgPSAxNwpJUjNfQU1CSUVOVCA9IDE4CklSNF9BTUJJRU5UID0gMTkKSVI1X0FNQklFTlQgPSAyMApJUjZfQU1CSUVOVCA9IDIxCklSN19BTUJJRU5UID0gMjIKCklSWF9BTUJJRU5UID0gKElSMF9BTUJJRU5ULCBJUjFfQU1CSUVOVCwgSVIyX0FNQklFTlQsIElSM19BTUJJRU5ULCBJUjRfQU1CSUVOVCwgSVI1X0FNQklFTlQsCiAgICAgICAgICAgICAgIElSNl9BTUJJRU5ULCBJUjdfQU1CSUVOVCkKCklSX1NFTlNPUl9BTkdMRVMgPSAoMCwgNDUsIDkwLCAxMzUsIDE4MCwgMjI1LCAyNzAsIDMxNSkKCklSX1NFTlNPUl9DT1VOVCA9IDgKCkZPViA9IDAuNzg1Mzk4ICMgRXN0aW1hdGVkIGF0IDQ1IGRlZ3JlZXMKClJFRkVSRU5DRV9GUkFNRV9JRCA9ICJyZWZsZWN0YW5jZV9zZW5zb3Jfe30iCgpCVVMgPSBTTUJ1cyhJMkNfQ0hBTk5FTCkKCgpkZWYgY2FsY3VsYXRlX2Rpc3RhbmNlKHgpOgogICAgIiIiQ2FsY3VsYXRlIGFuIGVzdGltYXRlIG9mIHRoZSByYW5nZSBpbiBtZXRyZXMuIiIiCiAgICB0cnk6CiAgICAgICAgcmVzdWx0X2luX21tID0gLSgxMjUwMDAwLjAgKiBtYXRoLmxvZygoMjAuMCAqIHgpIC8gMTE2NzI3LjApKSAvIDEwODIyMS4wCiAgICAgICAgcmVzdWx0ID0gcm91bmQocmVzdWx0X2luX21tLCAyKSAvIDEwMDAuMAogICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgcmVzdWx0ID0gLWZsb2F0KCJpbmYiKQoKICAgIGlmIHJlc3VsdCA8IDAuMDA1OgogICAgICAgIHJlc3VsdCA9IC1mbG9hdCgiaW5mIikKICAgIGVsaWYgcmVzdWx0ID4gMC4wNDU6CiAgICAgICAgcmVzdWx0ID0gZmxvYXQoImluZiIpCgogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBjbG9zZV9idXMoKToKICAgICIiIkNsb3NlIHRoZSBJMkMgYnVzIGFmdGVyIHRoZSBST1MgTm9kZSBpcyBzaHV0ZG93bi4iIiIKICAgIEJVUy53cml0ZV93b3JkX2RhdGEoRVBVQ0tfSTJDX0FERFIsIElSX0NPTlRST0wsIDApICAjIFN0b3AgSVIKICAgIEJVUy5jbG9zZSgpCgoKZGVmIHBpX3B1Y2tfc2hvcnRfcmFuZ2VfaXJfc2VydmVyKCk6CiAgICAiIiJST1MgTm9kZSBzZXJ2ZXIuIiIiCiAgICByb3NweS5vbl9zaHV0ZG93bihjbG9zZV9idXMpCiAgICBCVVMud3JpdGVfd29yZF9kYXRhKEVQVUNLX0kyQ19BRERSLCBJUl9DT05UUk9MLCAxKSAgIyBUdXJuIElSIHNlbnNvcnMgb24KCiAgICByb3NweS5pbml0X25vZGUoInNob3J0X3JhbmdlX2lyIikKCiAgICBpcl9wcm94aW1pdHlfcHVibGlzaGVycyA9IHt9Cjx8ZmltX2hvbGV8PgogICAgICAgIHRmX3ByZWZpeCA9IHJvc3B5LmdldF9wYXJhbSh0Zl9wcmVmaXhfa2V5LCBOb25lKQogICAgZWxzZToKICAgICAgICB0Zl9wcmVmaXggPSBOb25lCiAgICBpZiB0Zl9wcmVmaXggaXMgbm90IE5vbmUgYW5kIG5vdCB0Zl9wcmVmaXguZW5kc3dpdGgoIi8iKToKICAgICAgICB0Zl9wcmVmaXggKz0gIi8iCgogICAgcmVmZXJlbmNlX2ZyYW1lX2lkX3RlbXBsYXRlID0gUkVGRVJFTkNFX0ZSQU1FX0lECiAgICBpZiB0Zl9wcmVmaXg6CiAgICAgICAgcmVmZXJlbmNlX2ZyYW1lX2lkX3RlbXBsYXRlID0gdGZfcHJlZml4ICsgcmVmZXJlbmNlX2ZyYW1lX2lkX3RlbXBsYXRlCgogICAgZm9yIGlyX3NlbnNvciBpbiByYW5nZShJUl9TRU5TT1JfQ09VTlQpOgogICAgICAgIGlyX3Byb3hpbWl0eV9wdWJsaXNoZXJzW2lyX3NlbnNvcl0gPSByb3NweS5QdWJsaXNoZXIoJ3Nob3J0X3JhbmdlX2lyL3t9Jy5mb3JtYXQoaXJfc2Vuc29yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhbmdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVfc2l6ZT0xMCkKICAgICAgICBpcl9wcm94aW1pdHlfZnJhbWVfaWRzW2lyX3NlbnNvcl0gPSByZWZlcmVuY2VfZnJhbWVfaWRfdGVtcGxhdGUuZm9ybWF0KGlyX3NlbnNvcikKCiAgICByYXRlID0gcm9zcHkuUmF0ZShyb3NweS5nZXRfcGFyYW0oJ35yYXRlJywgNSkpCgogICAgd2hpbGUgbm90IHJvc3B5LmlzX3NodXRkb3duKCk6CiAgICAgICAgZm9yIGlyX3NlbnNvciBpbiByYW5nZShJUl9TRU5TT1JfQ09VTlQpOgogICAgICAgICAgICByZWZsZWN0ZWRfcmF3ID0gaW50KEJVUy5yZWFkX3dvcmRfZGF0YShFUFVDS19JMkNfQUREUiwgSVJYX1JFRkxFQ1RFRFtpcl9zZW5zb3JdKSkKICAgICAgICAgICAgYW1iaWVudF9yYXcgPSBpbnQoQlVTLnJlYWRfd29yZF9kYXRhKEVQVUNLX0kyQ19BRERSLCBJUlhfQU1CSUVOVFtpcl9zZW5zb3JdKSkKICAgICAgICAgICAgY29udmVydGVkX2Rpc3RhbmNlX3JlYWRpbmcgPSBjYWxjdWxhdGVfZGlzdGFuY2UocmVmbGVjdGVkX3JhdyAtIGFtYmllbnRfcmF3KQogICAgICAgICAgICByYW5nZV9yZXN1bHQgPSBSYW5nZShyYWRpYXRpb25fdHlwZT1SYW5nZS5JTkZSQVJFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluX3JhbmdlPTAuMDA1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcmFuZ2U9MC4wNDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlPWNvbnZlcnRlZF9kaXN0YW5jZV9yZWFkaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9vZl92aWV3PUZPVikKICAgICAgICAgICAgcmFuZ2VfcmVzdWx0LmhlYWRlci5mcmFtZV9pZCA9IGlyX3Byb3hpbWl0eV9mcmFtZV9pZHNbaXJfc2Vuc29yXQogICAgICAgICAgICByYW5nZV9yZXN1bHQuaGVhZGVyLnN0YW1wID0gcm9zcHkuVGltZS5ub3coKQogICAgICAgICAgICBpcl9wcm94aW1pdHlfcHVibGlzaGVyc1tpcl9zZW5zb3JdLnB1Ymxpc2gocmFuZ2VfcmVzdWx0KQogICAgICAgIHJhdGUuc2xlZXAoKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBwaV9wdWNrX3Nob3J0X3JhbmdlX2lyX3NlcnZlcigpCjx8ZmltX3N1ZmZpeHw+CiAgICBpcl9wcm94aW1pdHlfZnJhbWVfaWRzID0ge30KCiAgICB0Zl9wcmVmaXhfa2V5ID0gcm9zcHkuc2VhcmNoX3BhcmFtKCJ0Zl9wcmVmaXgiKQogICAgaWYgdGZfcHJlZml4X2tleToKPHxmaW1fZW5kfD4="]
["bda748f8479f771ce7ccc2fdc7a0e4c7ebf878d5-2","bda748f8479f771ce7ccc2fdc7a0e4c7ebf878d5","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiIiIlJPUyBOb2RlIHRvIGV4cG9zZSB0b3BpY3MgZm9yIHRoZSBzaG9ydCByYW5nZSBJUiBzZW5zb3JzIG9uIHRoZSBQaS1wdWNrLiIiIgoKaW1wb3J0IG1hdGgKCiMgUk9TIGltcG9ydHMKaW1wb3J0IHJvc3B5CmZyb20gc2Vuc29yX21zZ3MubXNnIGltcG9ydCBSYW5nZQoKIyBTdGFuZGFyZCBpbXBvcnRzCmZyb20gc21idXMgaW1wb3J0IFNNQnVzCgojIENvbnN0YW50cwpJMkNfQ0hBTk5FTCA9IDEyCkVQVUNLX0kyQ19BRERSID0gMHgxZgoKSVJfQ09OVFJPTCA9IDYKSVIwX1JFRkxFQ1RFRCA9IDcKSVIxX1JFRkxFQ1RFRCA9IDgKSVIyX1JFRkxFQ1RFRCA9IDkKSVIzX1JFRkxFQ1RFRCA9IDEwCklSNF9SRUZMRUNURUQgPSAxMQpJUjVfUkVGTEVDVEVEID0gMTIKSVI2X1JFRkxFQ1RFRCA9IDEzCklSN19SRUZMRUNURUQgPSAxNAoKSVJYX1JFRkxFQ1RFRCA9IChJUjBfUkVGTEVDVEVELCBJUjFfUkVGTEVDVEVELCBJUjJfUkVGTEVDVEVELCBJUjNfUkVGTEVDVEVELCBJUjRfUkVGTEVDVEVELAogICAgICAgICAgICAgICAgIElSNV9SRUZMRUNURUQsIElSNl9SRUZMRUNURUQsIElSN19SRUZMRUNURUQpCgpJUjBfQU1CSUVOVCA9IDE1CklSMV9BTUJJRU5UID0gMTYKSVIyX0FNQklFTlQgPSAxNwpJUjNfQU1CSUVOVCA9IDE4CklSNF9BTUJJRU5UID0gMTkKSVI1X0FNQklFTlQgPSAyMApJUjZfQU1CSUVOVCA9IDIxCklSN19BTUJJRU5UID0gMjIKCklSWF9BTUJJRU5UID0gKElSMF9BTUJJRU5ULCBJUjFfQU1CSUVOVCwgSVIyX0FNQklFTlQsIElSM19BTUJJRU5ULCBJUjRfQU1CSUVOVCwgSVI1X0FNQklFTlQsCiAgICAgICAgICAgICAgIElSNl9BTUJJRU5ULCBJUjdfQU1CSUVOVCkKCklSX1NFTlNPUl9BTkdMRVMgPSAoMCwgNDUsIDkwLCAxMzUsIDE4MCwgMjI1LCAyNzAsIDMxNSkKCklSX1NFTlNPUl9DT1VOVCA9IDgKCkZPViA9IDAuNzg1Mzk4ICMgRXN0aW1hdGVkIGF0IDQ1IGRlZ3JlZXMKClJFRkVSRU5DRV9GUkFNRV9JRCA9ICJyZWZsZWN0YW5jZV9zZW5zb3Jfe30iCgpCVVMgPSBTTUJ1cyhJMkNfQ0hBTk5FTCkKCgpkZWYgY2FsY3VsYXRlX2Rpc3RhbmNlKHgpOgogICAgIiIiQ2FsY3VsYXRlIGFuIGVzdGltYXRlIG9mIHRoZSByYW5nZSBpbiBtZXRyZXMuIiIiCiAgICB0cnk6CiAgICAgICAgcmVzdWx0X2luX21tID0gLSgxMjUwMDAwLjAgKiBtYXRoLmxvZygoMjAuMCAqIHgpIC8gMTE2NzI3LjApKSAvIDEwODIyMS4wCiAgICAgICAgcmVzdWx0ID0gcm91bmQocmVzdWx0X2luX21tLCAyKSAvIDEwMDAuMAogICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgcmVzdWx0ID0gLWZsb2F0KCJpbmYiKQoKICAgIGlmIHJlc3VsdCA8IDAuMDA1OgogICAgICAgIHJlc3VsdCA9IC1mbG9hdCgiaW5mIikKICAgIGVsaWYgcmVzdWx0ID4gMC4wNDU6CiAgICAgICAgcmVzdWx0ID0gZmxvYXQoImluZiIpCgogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBjbG9zZV9idXMoKToKICAgICIiIkNsb3NlIHRoZSBJMkMgYnVzIGFmdGVyIHRoZSBST1MgTm9kZSBpcyBzaHV0ZG93bi4iIiIKICAgIEJVUy53cml0ZV93b3JkX2RhdGEoRVBVQ0tfSTJDX0FERFIsIElSX0NPTlRST0wsIDApICAjIFN0b3AgSVIKICAgIEJVUy5jbG9zZSgpCgoKZGVmIHBpX3B1Y2tfc2hvcnRfcmFuZ2VfaXJfc2VydmVyKCk6CiAgICAiIiJST1MgTm9kZSBzZXJ2ZXIuIiIiCiAgICByb3NweS5vbl9zaHV0ZG93bihjbG9zZV9idXMpCiAgICBCVVMud3JpdGVfd29yZF9kYXRhKEVQVUNLX0kyQ19BRERSLCBJUl9DT05UUk9MLCAxKSAgIyBUdXJuIElSIHNlbnNvcnMgb24KCiAgICByb3NweS5pbml0X25vZGUoInNob3J0X3JhbmdlX2lyIikKCiAgICBpcl9wcm94aW1pdHlfcHVibGlzaGVycyA9IHt9CiAgICBpcl9wcm94aW1pdHlfZnJhbWVfaWRzID0ge30KCiAgICB0Zl9wcmVmaXhfa2V5ID0gcm9zcHkuc2VhcmNoX3BhcmFtKCJ0Zl9wcmVmaXgiKQogICAgaWYgdGZfcHJlZml4X2tleToKICAgICAgICB0Zl9wcmVmaXggPSByb3NweS5nZXRfcGFyYW0odGZfcHJlZml4X2tleSwgTm9uZSkKICAgIGVsc2U6CiAgICAgICAgdGZfcHJlZml4ID0gTm9uZQogICAgaWYgdGZfcHJlZml4IGlzIG5vdCBOb25lIGFuZCBub3QgdGZfcHJlZml4LmVuZHN3aXRoKCIvIik6CiAgICAgICAgdGZfcHJlZml4ICs9ICIvIgoKICAgIHJlZmVyZW5jZV9mcmFtZV9pZF90ZW1wbGF0ZSA9IFJFRkVSRU5DRV9GUkFNRV9JRAogICAgaWYgdGZfcHJlZml4OgogICAgICAgIHJlZmVyZW5jZV9mcmFtZV9pZF90ZW1wbGF0ZSA9IHRmX3ByZWZpeCArIHJlZmVyZW5jZV9mcmFtZV9pZF90ZW1wbGF0ZQoKICAgIGZvciBpcl9zZW5zb3IgaW4gcmFuZ2UoSVJfU0VOU09SX0NPVU5UKToKICAgICAgICBpcl9wcm94aW1pdHlfcHVibGlzaGVyc1tpcl9zZW5zb3JdID0gcm9zcHkuUHVibGlzaGVyKCdzaG9ydF9yYW5nZV9pci97fScuZm9ybWF0KGlyX3NlbnNvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYW5nZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlX3NpemU9MTApCiAgICAgICAgaXJfcHJveGltaXR5X2ZyYW1lX2lkc1tpcl9zZW5zb3JdID0gcmVmZXJlbmNlX2ZyYW1lX2lkX3RlbXBsYXRlLmZvcm1hdChpcl9zZW5zb3IpCgogICAgcmF0ZSA9IHJvc3B5LlJhdGUocm9zcHkuZ2V0X3BhcmFtKCd+cmF0ZScsIDUpKQoKICAgIHdoaWxlIG5vdCByb3NweS5pc19zaHV0ZG93bigpOgogICAgICAgIGZvciBpcl9zZW5zb3IgaW4gcmFuZ2UoSVJfU0VOU09SX0NPVU5UKToKICAgICAgICAgICAgcmVmbGVjdGVkX3JhdyA9IGludChCVVMucmVhZF93b3JkX2RhdGEoRVBVQ0tfSTJDX0FERFIsIElSWF9SRUZMRUNURURbaXJfc2Vuc29yXSkpCiAgICAgICAgICAgIGFtYmllbnRfcmF3ID0gaW50KEJVUy5yZWFkX3dvcmRfZGF0YShFUFVDS19JMkNfQUREUiwgSVJYX0FNQklFTlRbaXJfc2Vuc29yXSkpCiAgICAgICAgICAgIGNvbnZlcnRlZF9kaXN0YW5jZV9yZWFkaW5nID0gY2FsY3VsYXRlX2Rpc3RhbmNlKHJlZmxlY3RlZF9yYXcgLSBhbWJpZW50X3JhdykKICAgICAgICAgICAgcmFuZ2VfcmVzdWx0ID0gUmFuZ2UocmFkaWF0aW9uX3R5cGU9UmFuZ2UuSU5GUkFSRUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbl9yYW5nZT0wLjAwNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3JhbmdlPTAuMDQ1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZT1jb252ZXJ0ZWRfZGlzdGFuY2VfcmVhZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfb2Zfdmlldz1GT1YpCiAgICAgICAgICAgIHJhbmdlX3Jlc3VsdC5oZWFkZXIuZnJhbWVfaWQgPSBpcl9wcm94aW1pdHlfZnJhbWVfaWRzW2lyX3NlbnNvcl0KICAgICAgICAgICAgcmFuZ2VfcmVzdWx0LmhlYWRlci5zdGFtcCA9IHJvc3B5LlRpbWUubm93KCkKICAgICAgICAgICAgaXJfcHJveGltaXR5X3B1Ymxpc2hlcnNbaXJfc2Vuc29yXS5wdWJsaXNoKHJhbmdlX3Jlc3VsdCkKICAgICAgICByYXRlLnNsZWVwKCkKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBwaV9wdWNrX3Nob3J0X3JhbmdlX2lyX3NlcnZlcigpCjx8ZmltX2VuZHw+"]
["bda748f8479f771ce7ccc2fdc7a0e4c7ebf878d5-3","bda748f8479f771ce7ccc2fdc7a0e4c7ebf878d5","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiIiIlJPUyBOb2RlIHRvIGV4cG9zZSB0b3BpY3MgZm9yIHRoZSBzaG9ydCByYW5nZSBJUiBzZW5zb3JzIG9uIHRoZSBQaS1wdWNrLiIiIgoKaW1wb3J0IG1hdGgKCiMgUk9TIGltcG9ydHMKaW1wb3J0IHJvc3B5CmZyb20gc2Vuc29yX21zZ3MubXNnIGltcG9ydCBSYW5nZQoKIyBTdGFuZGFyZCBpbXBvcnRzCmZyb20gc21idXMgaW1wb3J0IFNNQnVzCgojIENvbnN0YW50cwpJMkNfQ0hBTk5FTCA9IDEyCkVQVUNLX0kyQ19BRERSID0gMHgxZgoKSVJfQ09OVFJPTCA9IDYKSVIwX1JFRkxFQ1RFRCA9IDcKSVIxX1JFRkxFQ1RFRCA9IDgKSVIyX1JFRkxFQ1RFRCA9IDkKSVIzX1JFRkxFQ1RFRCA9IDEwCklSNF9SRUZMRUNURUQgPSAxMQpJUjVfUkVGTEVDVEVEID0gMTIKSVI2X1JFRkxFQ1RFRCA9IDEzCklSN19SRUZMRUNURUQgPSAxNAoKSVJYX1JFRkxFQ1RFRCA9IChJUjBfUkVGTEVDVEVELCBJUjFfUkVGTEVDVEVELCBJUjJfUkVGTEVDVEVELCBJUjNfUkVGTEVDVEVELCBJUjRfUkVGTEVDVEVELAogICAgICAgICAgICAgICAgIElSNV9SRUZMRUNURUQsIElSNl9SRUZMRUNURUQsIElSN19SRUZMRUNURUQpCgpJUjBfQU1CSUVOVCA9IDE1CklSMV9BTUJJRU5UID0gMTYKSVIyX0FNQklFTlQgPSAxNwpJUjNfQU1CSUVOVCA9IDE4CklSNF9BTUJJRU5UID0gMTkKSVI1X0FNQklFTlQgPSAyMApJUjZfQU1CSUVOVCA9IDIxCklSN19BTUJJRU5UID0gMjIKCklSWF9BTUJJRU5UID0gKElSMF9BTUJJRU5ULCBJUjFfQU1CSUVOVCwgSVIyX0FNQklFTlQsIElSM19BTUJJRU5ULCBJUjRfQU1CSUVOVCwgSVI1X0FNQklFTlQsCiAgICAgICAgICAgICAgIElSNl9BTUJJRU5ULCBJUjdfQU1CSUVOVCkKCklSX1NFTlNPUl9BTkdMRVMgPSAoMCwgNDUsIDkwLCAxMzUsIDE4MCwgMjI1LCAyNzAsIDMxNSkKCklSX1NFTlNPUl9DT1VOVCA9IDgKCkZPViA9IDAuNzg1Mzk4ICMgRXN0aW1hdGVkIGF0IDQ1IGRlZ3JlZXMKClJFRkVSRU5DRV9GUkFNRV9JRCA9ICJyZWZsZWN0YW5jZV9zZW5zb3Jfe30iCgpCVVMgPSBTTUJ1cyhJMkNfQ0hBTk5FTCkKCgpkZWYgY2FsY3VsYXRlX2Rpc3RhbmNlKHgpOgogICAgIiIiQ2FsY3VsYXRlIGFuIGVzdGltYXRlIG9mIHRoZSByYW5nZSBpbiBtZXRyZXMuIiIiCiAgICB0cnk6CiAgICAgICAgcmVzdWx0X2luX21tID0gLSgxMjUwMDAwLjAgKiBtYXRoLmxvZygoMjAuMCAqIHgpIC8gMTE2NzI3LjApKSAvIDEwODIyMS4wCiAgICAgICAgcmVzdWx0ID0gcm91bmQocmVzdWx0X2luX21tLCAyKSAvIDEwMDAuMAogICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgcmVzdWx0ID0gLWZsb2F0KCJpbmYiKQoKICAgIGlmIHJlc3VsdCA8IDAuMDA1OgogICAgICAgIHJlc3VsdCA9IC1mbG9hdCgiaW5mIikKICAgIGVsaWYgcmVzdWx0ID4gMC4wNDU6CiAgICAgICAgcmVzdWx0ID0gZmxvYXQoImluZiIpCgogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBjbG9zZV9idXMoKToKICAgICIiIkNsb3NlIHRoZSBJMkMgYnVzIGFmdGVyIHRoZSBST1MgTm9kZSBpcyBzaHV0ZG93bi4iIiIKICAgIEJVUy53cml0ZV93b3JkX2RhdGEoRVBVQ0tfSTJDX0FERFIsIElSX0NPTlRST0wsIDApICAjIFN0b3AgSVIKICAgIEJVUy5jbG9zZSgpCgoKZGVmIHBpX3B1Y2tfc2hvcnRfcmFuZ2VfaXJfc2VydmVyKCk6CiAgICAiIiJST1MgTm9kZSBzZXJ2ZXIuIiIiCiAgICByb3NweS5vbl9zaHV0ZG93bihjbG9zZV9idXMpCiAgICBCVVMud3JpdGVfd29yZF9kYXRhKEVQVUNLX0kyQ19BRERSLCBJUl9DT05UUk9MLCAxKSAgIyBUdXJuIElSIHNlbnNvcnMgb24KCiAgICByb3NweS5pbml0X25vZGUoInNob3J0X3JhbmdlX2lyIikKCiAgICBpcl9wcm94aW1pdHlfcHVibGlzaGVycyA9IHt9CiAgICBpcl9wcm94aW1pdHlfZnJhbWVfaWRzID0ge30KCiAgICB0Zl9wcmVmaXhfa2V5ID0gcm9zcHkuc2VhcmNoX3BhcmFtKCJ0Zl9wcmVmaXgiKQogICAgaWYgdGZfcHJlZml4X2tleToKICAgICAgICB0Zl9wcmVmaXggPSByb3NweS5nZXRfcGFyYW0odGZfcHJlZml4X2tleSwgTm9uZSkKICAgIGVsc2U6CiAgICAgICAgdGZfcHJlZml4ID0gTm9uZQogICAgaWYgdGZfcHJlZml4IGlzIG5vdCBOb25lIGFuZCBub3QgdGZfcHJlZml4LmVuZHN3aXRoKCIvIik6CiAgICAgICAgdGZfcHJlZml4ICs9ICIvIgoKICAgIHJlZmVyZW5jZV9mcmFtZV9pZF90ZW1wbGF0ZSA9IFJFRkVSRU5DRV9GUkFNRV9JRAogICAgaWYgdGZfcHJlZml4OgogICAgICAgIHJlZmVyZW5jZV9mcmFtZV9pZF90ZW1wbGF0ZSA9IHRmX3ByZWZpeCArIHJlZmVyZW5jZV9mcmFtZV9pZF90ZW1wbGF0ZQoKICAgIGZvciBpcl9zZW5zb3IgaW4gcmFuZ2UoSVJfU0VOU09SX0NPVU5UKToKICAgICAgICBpcl9wcm94aW1pdHlfcHVibGlzaGVyc1tpcl9zZW5zb3JdID0gcm9zcHkuUHVibGlzaGVyKCdzaG9ydF9yYW5nZV9pci97fScuZm9ybWF0KGlyX3NlbnNvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYW5nZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlX3NpemU9MTApCiAgICAgICAgaXJfcHJveGltaXR5X2ZyYW1lX2lkc1tpcl9zZW5zb3JdID0gcmVmZXJlbmNlX2ZyYW1lX2lkX3RlbXBsYXRlLmZvcm1hdChpcl9zZW5zb3IpCgogICAgcmF0ZSA9IHJvc3B5LlJhdGUocm9zcHkuZ2V0X3BhcmFtKCd+cmF0ZScsIDUpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgd2hpbGUgbm90IHJvc3B5LmlzX3NodXRkb3duKCk6CiAgICAgICAgZm9yIGlyX3NlbnNvciBpbiByYW5nZShJUl9TRU5TT1JfQ09VTlQpOgogICAgICAgICAgICByZWZsZWN0ZWRfcmF3ID0gaW50KEJVUy5yZWFkX3dvcmRfZGF0YShFUFVDS19JMkNfQUREUiwgSVJYX1JFRkxFQ1RFRFtpcl9zZW5zb3JdKSkKPHxmaW1fZW5kfD4="]
["00dc6d5a0553c3fdcfeb66878c633c37a00c2373-1","00dc6d5a0553c3fdcfeb66878c633c37a00c2373","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAoKZnJvbSBwbG90bmluZSBpbXBvcnQgZ2dwbG90LCBhZXMsIGFmdGVyX3N0YXQsIHN0YXRfZWNkZgoKCjx8ZmltX2hvbGV8PgpkZWYgdGVzdF9lY2RmKCk6CiAgICBwID0gZ2dwbG90KGRmLCBhZXMoJ3gnKSkgKyBzdGF0X2VjZGYoc2l6ZT0yKQoKICAgIGFzc2VydCBwID09ICdlY2RmJwoKCmRlZiB0ZXN0X2NvbXB1dGVkX3lfY29sdW1uKCk6CiAgICBwID0gKGdncGxvdChkZiwgYWVzKCd4JykpCiAgICAgICAgICsgc3RhdF9lY2RmKHNpemU9MikKICAgICAgICAgIyBTaG91bGQgYmUgYWJsZSB0byB1c2VkIGNvbXB1dGVkIHkgY29sdW1uICYgY3JlYXRlIGEKICAgICAgICAgIyBuZXcgbWFwcGVkIGNvbHVtbiBhbHNvIGNhbGxlZCB5CiAgICAgICAgICsgc3RhdF9lY2RmKGFlcyh5PWFmdGVyX3N0YXQoJ3ktMC4yJykpLCBzaXplPTIsIGNvbG9yPSdibHVlJykKICAgICAgICAgKQogICAgYXNzZXJ0IHAgPT0gJ2NvbXB1dGVkX3lfY29sdW1uJwo8fGZpbV9zdWZmaXh8PgpkZiA9IHBkLkRhdGFGcmFtZSh7J3gnOiByYW5nZSgxMCl9KQpwID0gZ2dwbG90KGRmLCBhZXMoJ3gnKSkgKyBzdGF0X2VjZGYoc2l6ZT0yKQoKCjx8ZmltX2VuZHw+"]
["00dc6d5a0553c3fdcfeb66878c633c37a00c2373-2","00dc6d5a0553c3fdcfeb66878c633c37a00c2373","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAoKZnJvbSBwbG90bmluZSBpbXBvcnQgZ2dwbG90LCBhZXMsIGFmdGVyX3N0YXQsIHN0YXRfZWNkZgoKPHxmaW1faG9sZXw+CgpkZWYgdGVzdF9lY2RmKCk6CiAgICBwID0gZ2dwbG90KGRmLCBhZXMoJ3gnKSkgKyBzdGF0X2VjZGYoc2l6ZT0yKQoKICAgIGFzc2VydCBwID09ICdlY2RmJwoKCmRlZiB0ZXN0X2NvbXB1dGVkX3lfY29sdW1uKCk6CiAgICBwID0gKGdncGxvdChkZiwgYWVzKCd4JykpCiAgICAgICAgICsgc3RhdF9lY2RmKHNpemU9MikKICAgICAgICAgIyBTaG91bGQgYmUgYWJsZSB0byB1c2VkIGNvbXB1dGVkIHkgY29sdW1uICYgY3JlYXRlIGEKICAgICAgICAgIyBuZXcgbWFwcGVkIGNvbHVtbiBhbHNvIGNhbGxlZCB5CiAgICAgICAgICsgc3RhdF9lY2RmKGFlcyh5PWFmdGVyX3N0YXQoJ3ktMC4yJykpLCBzaXplPTIsIGNvbG9yPSdibHVlJykKICAgICAgICAgKQogICAgYXNzZXJ0IHAgPT0gJ2NvbXB1dGVkX3lfY29sdW1uJwo8fGZpbV9zdWZmaXh8PgoKZGYgPSBwZC5EYXRhRnJhbWUoeyd4JzogcmFuZ2UoMTApfSkKcCA9IGdncGxvdChkZiwgYWVzKCd4JykpICsgc3RhdF9lY2RmKHNpemU9MikKCjx8ZmltX2VuZHw+"]
["00dc6d5a0553c3fdcfeb66878c633c37a00c2373-3","00dc6d5a0553c3fdcfeb66878c633c37a00c2373","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAoKZnJvbSBwbG90bmluZSBpbXBvcnQgZ2dwbG90LCBhZXMsIGFmdGVyX3N0YXQsIHN0YXRfZWNkZgoKCmRmID0gcGQuRGF0YUZyYW1lKHsneCc6IHJhbmdlKDEwKX0pCnAgPSBnZ3Bsb3QoZGYsIGFlcygneCcpKSArIHN0YXRfZWNkZihzaXplPTIpCgoKZGVmIHRlc3RfZWNkZigpOgo8fGZpbV9ob2xlfD4KCmRlZiB0ZXN0X2NvbXB1dGVkX3lfY29sdW1uKCk6CiAgICBwID0gKGdncGxvdChkZiwgYWVzKCd4JykpCiAgICAgICAgICsgc3RhdF9lY2RmKHNpemU9MikKICAgICAgICAgIyBTaG91bGQgYmUgYWJsZSB0byB1c2VkIGNvbXB1dGVkIHkgY29sdW1uICYgY3JlYXRlIGEKICAgICAgICAgIyBuZXcgbWFwcGVkIGNvbHVtbiBhbHNvIGNhbGxlZCB5CiAgICAgICAgICsgc3RhdF9lY2RmKGFlcyh5PWFmdGVyX3N0YXQoJ3ktMC4yJykpLCBzaXplPTIsIGNvbG9yPSdibHVlJykKICAgICAgICAgKQogICAgYXNzZXJ0IHAgPT0gJ2NvbXB1dGVkX3lfY29sdW1uJwo8fGZpbV9zdWZmaXh8PgogICAgcCA9IGdncGxvdChkZiwgYWVzKCd4JykpICsgc3RhdF9lY2RmKHNpemU9MikKCiAgICBhc3NlcnQgcCA9PSAnZWNkZicKCjx8ZmltX2VuZHw+"]
["00dc6d5a0553c3fdcfeb66878c633c37a00c2373-4","00dc6d5a0553c3fdcfeb66878c633c37a00c2373","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAoKZnJvbSBwbG90bmluZSBpbXBvcnQgZ2dwbG90LCBhZXMsIGFmdGVyX3N0YXQsIHN0YXRfZWNkZgoKCmRmID0gcGQuRGF0YUZyYW1lKHsneCc6IHJhbmdlKDEwKX0pCnAgPSBnZ3Bsb3QoZGYsIGFlcygneCcpKSArIHN0YXRfZWNkZihzaXplPTIpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpkZWYgdGVzdF9lY2RmKCk6CiAgICBwID0gZ2dwbG90KGRmLCBhZXMoJ3gnKSkgKyBzdGF0X2VjZGYoc2l6ZT0yKQoKPHxmaW1fZW5kfD4="]
["bd56bbe31e594e34c8440b8f22985ca8eb8f5a8d-1","bd56bbe31e594e34c8440b8f22985ca8eb8f5a8d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCB0aHJlYWRpbmcKaW1wb3J0IHRpbWUKCmZyb20gaW1hZ2luZWlmZi5sb2dtYW5hZ2VyIGltcG9ydCBMb2dNYW5hZ2VyCmZyb20gaW1hZ2luZWlmZi5kYXNoYm9hcmQgaW1wb3J0IERhc2hib2FyZApmcm9tIGltYWdpbmVpZmYuc3RvcmlmeSBpbXBvcnQgU3RvcmlmeQpmcm9tIGltYWdpbmVpZmYuY29uZmlnIGltcG9ydCBDb25maWcKZnJvbSBpbWFnaW5laWZmLmVuZ2luZSBpbXBvcnQgRW5naW5lCgpURU1QTEFURSA9IHsKICAgICJkYXNoYm9hcmQiOiB7CiAgICAgICAgImJpbmQiOiAiMTI3LjAuMC4xIiwKICAgICAgICAicG9ydCI6IDQzMjEKICAgIH0KfQoKY2xhc3MgSW1hZ2luZWlmZjoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmxvZ19tYW5hZ2VyID0gTG9nTWFuYWdlcigpCjx8ZmltX2hvbGV8PgogICAgICAgICAgICBvcy5ta2RpcigiZGF0YSIpCgogICAgICAgICMgQ29uZmlndXJlIGNvbmZpZ3VyYXRpb24KICAgICAgICBzZWxmLmNvbmZpZyA9IENvbmZpZyhwYXRoPSJkYXRhL2NvbmZpZy5qc29uIiwgdGVtcGxhdGU9VEVNUExBVEUsIGxvZz1zZWxmLmxvZ19tYW5hZ2VyLmdldF9sb2dnZXIoImNvbmZpZyIpKQogICAgICAgIHNlbGYuY29uZmlnLnNhdmUoKQoKICAgICAgICAjIENvbmZpZ3VyZSBkYXRhIHN0b3JhZ2UgKGNvbW1lbnQgaWYgbm90IG5lZWRlZCkKICAgICAgICBzZWxmLnN0b3JpZnkgPSBTdG9yaWZ5KGxvZz1zZWxmLmxvZ19tYW5hZ2VyLmdldF9sb2dnZXIoInN0b3JpZnkiKSkKICAgICAgICBzZWxmLmRiID0gc2VsZi5zdG9yaWZ5LmdldF9kYigibWFpbiIpCgogICAgICAgICMgSW5pdGlhbGl6ZSBkYXNoYm9hcmQgKGNvbW1lbnQgaWYgbm90IG5lZWRlZCkKICAgICAgICBzZWxmLmRhc2hib2FyZCA9IERhc2hib2FyZChzZWxmLCBob3N0PXNlbGYuY29uZmlnWyJkYXNoYm9hcmQiXVsiYmluZCJdLCBwb3J0PXNlbGYuY29uZmlnWyJkYXNoYm9hcmQiXVsicG9ydCJdKQoKICAgICAgICAjIEluaXRpbGF0ZSBnYW1lIGVuZ2luZQogICAgICAgIHNlbGYuZW5naW5lID0gRW5naW5lKHNlbGYpCgogICAgICAgIHNlbGYudGhyZWFkcyA9IHt9CiAgICAgICAgc2VsZi5hYm9ydCA9IEZhbHNlCgogICAgZGVmIHN0YXJ0KHNlbGYpOgogICAgICAgICMgU3RhcnQgZGFzaGJvYXJkIChjb21tZW50IGlmIG5vdCBuZWVkZWQpCiAgICAgICAgc2VsZi50aHJlYWRzWyJkYXNoYm9hcmQiXSA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuZGFzaGJvYXJkLnJ1biwgYXJncz0oKSkKICAgICAgICBzZWxmLnRocmVhZHNbImRhc2hib2FyZCJdLmRhZW1vbiA9IFRydWUKICAgICAgICBzZWxmLnRocmVhZHNbImRhc2hib2FyZCJdLnN0YXJ0KCkKCiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLnJ1bigpCiAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICAgICBzZWxmLmxvZy53YXJuaW5nKCJDdHJsK0MgaW50ZXJjZXB0ZWQiKQogICAgICAgICAgICBzZWxmLnN0b3JpZnkuZmx1c2goKQoKICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgd2hpbGUgbm90IHNlbGYuYWJvcnQ6CiAgICAgICAgICAgICMgVGljawogICAgICAgICAgICBzZWxmLmVuZ2luZS50aWNrKCkKCiAgICAgICAgICAgICMgU3RvcmlmeSB0aWNrCiAgICAgICAgICAgIHNlbGYuc3RvcmlmeS50aWNrKCkKCiAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmxvZyA9IHNlbGYubG9nX21hbmFnZXIuZ2V0X2xvZ2dlcigibWFpbiIpCgogICAgICAgICMgTWFrZSBkYXRhIGZvbGRlcgogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygiZGF0YSIpOgo8fGZpbV9lbmR8Pg=="]
["6b6874747b47e95c1cfe25b9b767b7f5cca1577d-1","6b6874747b47e95c1cfe25b9b767b7f5cca1577d","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCgpjbGFzcyBiY29sb3JzOgogICAgSEVBREVSID0gJ1wwMzNbOTVtJwogICAgT0tCTFVFID0gJ1wwMzNbOTRtJwogICAgT0tHUkVFTiA9ICdcMDMzWzkybScKICAgIFdBUk5JTkcgPSAnXDAzM1s5M20nCiAgICBGQUlMID0gJ1wwMzNbOTFtJwogICAgRU5EQyA9ICdcMDMzWzBtJwogICAgQk9MRCA9ICdcMDMzWzFtJwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBVTkRFUkxJTkUgPSAnXDAzM1s0bScKCgo8fGZpbV9lbmR8Pg=="]
["c1cd7be3452864d9e1274d8345b4e30a8460534d-1","c1cd7be3452864d9e1274d8345b4e30a8460534d","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgonJycKR2FtbWEgcG9pbnQgSGFydHJlZS1Gb2NrL0RGVCBmb3IgYWxsLWVsZWN0cm9uIGNhbGN1bGF0aW9uCgpUaGUgZGVmYXVsdCBGRlQtYmFzZWQgMi1lbGVjdHJvbiBpbnRlZ3JhbHMgbWF5IG5vdCBiZSBhY2N1cmF0ZSBlbm91Z2ggZm9yCmFsbC1lbGVjdHJvbiBjYWxjdWxhdGlvbi4gIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIE1ERiAobWl4ZWQgZGVuc2l0eSBmaXR0aW5nKQp0ZWNobmlxdWUgdG8gaW1wcm92ZSB0aGUgYWNjdXJhY3kuCgpTZWUgYWxzbwpleGFtcGxlcy9kZi8wMC13aXRoX2RmLnB5CmV4YW1wbGVzL2RmLzAxLWF1eGJhc2lzLnB5CmV4YW1wbGVzL2RmLzQwLXByZWNvbXVwdGVfZGZfaW50cy5weQonJycKCmltcG9ydCBudW1weQpmcm9tIHB5c2NmLnBiYyBpbXBvcnQgZ3RvLCBzY2YsIGRmdAoKY2VsbCA9IGd0by5NKAogICAgYSA9IG51bXB5LmV5ZSgzKSozLjU2NjgsCiAgICBhdG9tID0gJycnQyAgICAgMC4gICAgICAwLiAgICAgIDAuICAgIAogICAgICAgICAgICAgIEMgICAgIDAuODkxNyAgMC44OTE3ICAwLjg5MTcKICAgICAgICAgICAgICBDICAgICAxLjc4MzQgIDEuNzgzNCAgMC4gICAgCiAgICAgICAgICAgICAgQyAgICAgMi42NzUxICAyLjY3NTEgIDAuODkxNwogICAgICAgICAgICAgIEMgICAgIDEuNzgzNCAgMC4gICAgICAxLjc4MzQKICAgICAgICAgICAgICBDICAgICAyLjY3NTEgIDAuODkxNyAgMi42NzUxCiAgICAgICAgICAgICAgQyAgICAgMC4gICAgICAxLjc4MzQgIDEuNzgzNAogICAgICAgICAgICAgIEMgICAgIDAuODkxNyAgMi42NzUxICAyLjY3NTEnJycsCiAgICBiYXNpcyA9ICc2LTMxZycsCiAgICB2ZXJib3NlID0gNCwKKQoKbWYgPSBzY2YuUkhGKGNlbGwpLmRlbnNpdHlfZml0KCkKbWYua2VybmVsKCkKCiMgTWl4ZWQgZGVuc2l0eSBmaXR0aW5nIGlzIGFub3RoZXIgb3B0aW9uIGZvciBhbGwtZWxlY3Ryb24gY2FsY3VsYXRpb25zCm1mID0gc2NmLlJIRihjZWxsKS5taXhfZGVuc2l0eV9maXQoKQptZi53aXRoX2RmLmdzID0gWzVdKjMgICMgVHVuZSAjUFdzIGluIE1ERiBmb3IgcGVyZm9ybWFuY2UvYWNjdXJhY3kgYmFsYW5jZQptZi5rZXJuZWwoKQoKIyBPciB1c2UgZXZlbi10ZW1wZXJlZCBHYXVzc2lhbiBiYXNpcyBhcyBhdXhpbGlhcnkgZml0dGluZyBmdW5jdGlvbnMuCiMgVGhlIGZvbGxvd2luZyBhdXhiYXNpcyBpcyBnZW5lcmF0ZWQgYmFzZWQgb24gdGhlIGV4cHJlc3Npb24KIyAgICBhbHBoYSA9IGEgKiAxLjdeaSAgIGkgPSAwLi5OCiMgd2hlcmUgYSBhbmQgTiBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgc21hbGxlc3QgYW5kIGxhcmdlc3QgZXhwb25lbnRzIG9mIEFPIGJhc2lzLgppbXBvcnQgcHlzY2YuZGYKYXV4YmFzaXMgPSBweXNjZi5kZi5hdWdfZXRiKGNlbGwsIGJldGE9MS43KQptZiA9IHNjZi5SSEYoY2VsbCkuZGVuc2l0eV9maXQoYXV4YmFzaXM9YXV4YmFzaXMpCm1mLmtlcm5lbCgpCgojCjx8ZmltX2hvbGV8PgptZi54YyA9ICdicDg2JwojIFlvdSBzaG91bGQgZmlyc3Qgc2V0IG1mLnhjIHRoZW4gYXBwbHkgbmV3dG9uIG1ldGhvZCAoc2VlIGFsc28KIyBleGFtcGxlcy9zY2YvMjItbmV3dG9uLnB5KQptZiA9IG1mLm5ld3RvbigpCm1mLmtlcm5lbCgpCgojCiMgVGhlIGNvbXB1dGF0aW9uYWwgY29zdHMgdG8gaW5pdGlhbGl6ZSBQQkMgREYgb2JqZWN0IGlzIGhpZ2guICBUaGUgZGVuc2l0eQojIGZpdHRpbmcgaW50ZWdyYWwgdGVuc29yIGNyZWF0ZWQgaW4gdGhlIGluaXRpYWxpemF0aW9uIGNhbiBiZSBjYWNoZWQgZm9yCiMgZnV0dXJlIHVzZS4gIFNlZSBhbHNvIGV4YW1wbGVzL2RmLzQwLXByZWNvbXVwdGVfZGZfaW50cy5weQojCm1mID0gZGZ0LlJLUyhjZWxsKS5kZW5zaXR5X2ZpdChhdXhiYXNpcz0nd2VpZ2VuZCcpCm1mLndpdGhfZGYuX2NkZXJpX3RvX3NhdmUgPSAnZGZfaW50cy5oNScKbWYua2VybmVsKCkKIwojIFRoZSBERiBpbnRlZ3JhbCB0ZW5zb3IgY2FuIGJlIHByZWxvYWRlZCBpbiBhbiBpbmRlcGVuZGVudCBjYWxjdWxhdGlvbi4KIwptZiA9IGRmdC5SS1MoY2VsbCkuZGVuc2l0eV9maXQoKQptZi53aXRoX2RmLl9jZGVyaSA9ICdkZl9pbnRzLmg1JwptZi5rZXJuZWwoKQo8fGZpbV9zdWZmaXh8PgojIFNlY29uZCBvcmRlciBTQ0Ygc29sdmVyIGNhbiBiZSB1c2VkIGluIHRoZSBQQkMgU0NGIGNvZGUgdGhlIHNhbWUgd2F5IGluIHRoZQojIG1vbGVjdWxhciBjYWxjdWxhdGlvbgojCm1mID0gZGZ0LlJLUyhjZWxsKS5kZW5zaXR5X2ZpdChhdXhiYXNpcz0nd2VpZ2VuZCcpCjx8ZmltX2VuZHw+"]
["c1cd7be3452864d9e1274d8345b4e30a8460534d-2","c1cd7be3452864d9e1274d8345b4e30a8460534d","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgonJycKR2FtbWEgcG9pbnQgSGFydHJlZS1Gb2NrL0RGVCBmb3IgYWxsLWVsZWN0cm9uIGNhbGN1bGF0aW9uCgpUaGUgZGVmYXVsdCBGRlQtYmFzZWQgMi1lbGVjdHJvbiBpbnRlZ3JhbHMgbWF5IG5vdCBiZSBhY2N1cmF0ZSBlbm91Z2ggZm9yCmFsbC1lbGVjdHJvbiBjYWxjdWxhdGlvbi4gIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIE1ERiAobWl4ZWQgZGVuc2l0eSBmaXR0aW5nKQp0ZWNobmlxdWUgdG8gaW1wcm92ZSB0aGUgYWNjdXJhY3kuCgpTZWUgYWxzbwpleGFtcGxlcy9kZi8wMC13aXRoX2RmLnB5CmV4YW1wbGVzL2RmLzAxLWF1eGJhc2lzLnB5CmV4YW1wbGVzL2RmLzQwLXByZWNvbXVwdGVfZGZfaW50cy5weQonJycKCmltcG9ydCBudW1weQpmcm9tIHB5c2NmLnBiYyBpbXBvcnQgZ3RvLCBzY2YsIGRmdAoKY2VsbCA9IGd0by5NKAogICAgYSA9IG51bXB5LmV5ZSgzKSozLjU2NjgsCiAgICBhdG9tID0gJycnQyAgICAgMC4gICAgICAwLiAgICAgIDAuICAgIAogICAgICAgICAgICAgIEMgICAgIDAuODkxNyAgMC44OTE3ICAwLjg5MTcKICAgICAgICAgICAgICBDICAgICAxLjc4MzQgIDEuNzgzNCAgMC4gICAgCiAgICAgICAgICAgICAgQyAgICAgMi42NzUxICAyLjY3NTEgIDAuODkxNwogICAgICAgICAgICAgIEMgICAgIDEuNzgzNCAgMC4gICAgICAxLjc4MzQKICAgICAgICAgICAgICBDICAgICAyLjY3NTEgIDAuODkxNyAgMi42NzUxCiAgICAgICAgICAgICAgQyAgICAgMC4gICAgICAxLjc4MzQgIDEuNzgzNAogICAgICAgICAgICAgIEMgICAgIDAuODkxNyAgMi42NzUxICAyLjY3NTEnJycsCiAgICBiYXNpcyA9ICc2LTMxZycsCiAgICB2ZXJib3NlID0gNCwKKQoKbWYgPSBzY2YuUkhGKGNlbGwpLmRlbnNpdHlfZml0KCkKbWYua2VybmVsKCkKCiMgTWl4ZWQgZGVuc2l0eSBmaXR0aW5nIGlzIGFub3RoZXIgb3B0aW9uIGZvciBhbGwtZWxlY3Ryb24gY2FsY3VsYXRpb25zCm1mID0gc2NmLlJIRihjZWxsKS5taXhfZGVuc2l0eV9maXQoKQptZi53aXRoX2RmLmdzID0gWzVdKjMgICMgVHVuZSAjUFdzIGluIE1ERiBmb3IgcGVyZm9ybWFuY2UvYWNjdXJhY3kgYmFsYW5jZQptZi5rZXJuZWwoKQoKIyBPciB1c2UgZXZlbi10ZW1wZXJlZCBHYXVzc2lhbiBiYXNpcyBhcyBhdXhpbGlhcnkgZml0dGluZyBmdW5jdGlvbnMuCiMgVGhlIGZvbGxvd2luZyBhdXhiYXNpcyBpcyBnZW5lcmF0ZWQgYmFzZWQgb24gdGhlIGV4cHJlc3Npb24KIyAgICBhbHBoYSA9IGEgKiAxLjdeaSAgIGkgPSAwLi5OCiMgd2hlcmUgYSBhbmQgTiBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgc21hbGxlc3QgYW5kIGxhcmdlc3QgZXhwb25lbnRzIG9mIEFPIGJhc2lzLgppbXBvcnQgcHlzY2YuZGYKYXV4YmFzaXMgPSBweXNjZi5kZi5hdWdfZXRiKGNlbGwsIGJldGE9MS43KQptZiA9IHNjZi5SSEYoY2VsbCkuZGVuc2l0eV9maXQoYXV4YmFzaXM9YXV4YmFzaXMpCm1mLmtlcm5lbCgpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMKIyBTZWNvbmQgb3JkZXIgU0NGIHNvbHZlciBjYW4gYmUgdXNlZCBpbiB0aGUgUEJDIFNDRiBjb2RlIHRoZSBzYW1lIHdheSBpbiB0aGUKIyBtb2xlY3VsYXIgY2FsY3VsYXRpb24KIwo8fGZpbV9lbmR8Pg=="]
["99ced15961abae547be834b1ef7f90d3695536a9-1","99ced15961abae547be834b1ef7f90d3695536a9","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSnNvblJlc3BvbnNlLCBIdHRwUmVzcG9uc2UKZnJvbSByZXN0X2ZyYW1ld29yay5kZWNvcmF0b3JzIGltcG9ydCBhcGlfdmlldywgcGVybWlzc2lvbl9jbGFzc2VzCmZyb20gcmVzdF9mcmFtZXdvcmsucGVybWlzc2lvbnMgaW1wb3J0IElzQXV0aGVudGljYXRlZApmcm9tIHJlc3RfZnJhbWV3b3JrLnJlc3BvbnNlIGltcG9ydCBSZXNwb25zZQpmcm9tIHR3aWxpby50d2ltbC52b2ljZV9yZXNwb25zZSBpbXBvcnQgVm9pY2VSZXNwb25zZSwgR2F0aGVyLCBTYXkKZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybGVuY29kZQpmcm9tIG5vdGlmaWNhdGlvbnMubW9kZWxzIGltcG9ydCBSb3RhdGlvbiwgTm90aWZpY2F0aW9uCiMgQ3JlYXRlIHlvdXIgdmlld3MgaGVyZS4KCgpAYXBpX3ZpZXcoWydHRVQnLCAnUE9TVCddKQpkZWYgaG9tZShyZXF1ZXN0KToKICAgICIiIlJlc3BvbmQgdG8gaW5jb21pbmcgcGhvbmUgY2FsbHMgd2l0aCBhIG1lbnUgb2Ygb3B0aW9ucyIiIgogICAgdHJ5OgogICAgICAgICMgI2xldHMgYnVpbGQgc29tZSB0d2lNTAogICAgICAgIHJlc3AgPSBWb2ljZVJlc3BvbnNlKCkKICAgICAgICBtZXNzYWdlID0gcmVxdWVzdC5xdWVyeV9wYXJhbXNbIm1lc3NhZ2UiXQogICAgICAgIGlkID0gcmVxdWVzdC5xdWVyeV9wYXJhbXNbImlkIl0KICAgICAgICBtZXNzYWdlX3BhciA9IHVybGVuY29kZSh7Im1lc3NhZ2UiOiBtZXNzYWdlLCAiaWQiOiBpZH0pCiAgICAgICAgcHJpbnQobWVzc2FnZV9wYXIpCiAgICAgICAgIyBzdGFydCB0aGUgZ2F0aGVyIHZlcmIKICAgICAgICBnYXRoZXIgPSBHYXRoZXIoCiAgICAgICAgICAgIG51bV9kaWdpdHM9MSwgYWN0aW9uPWYibWFrZXR3aW1sL3VzZXJfcmVzcG9uc2U/e21lc3NhZ2VfcGFyfSIpCiAgICAgICAgZ2F0aGVyLnNheShtZXNzYWdlKQogICAgICAgIHJlc3AuYXBwZW5kKGdhdGhlcikKCiAgICAgICAgcHJpbnQoImJhc2Ugcm91dGUgbWVzc2FnZTogIiwgcmVxdWVzdC5xdWVyeV9wYXJhbXNbIm1lc3NhZ2UiXSkKICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKHN0cihyZXNwKSwgY29udGVudF90eXBlPSJ0ZXh0L3htbCIpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKICAgICAgICBwcmludChlcnIpCgoKQGFwaV92aWV3KFsiR0VUIiwgIlBPU1QiXSkKZGVmIHVzZXJfcmVzcG9uc2UocmVxdWVzdCk6CiAgICB0cnk6Cjx8ZmltX2hvbGV8PgoKICAgICAgICBwcmludCgidXNlcl9yZXNwb25zZSByb3V0ZSBtZXNzYWdlOiAiLCBtZXNzYWdlKQogICAgICAgIHJlc3AgPSBWb2ljZVJlc3BvbnNlKCkKICAgICAgICAjIElmIFR3aWxpbydzIHJlcXVlc3QgdG8gb3VyIGFwcCBpbmNsdWRlZCBhbHJlYWR5IGdhdGhlcmVkIGRpZ2l0cywKICAgICAgICAjIHByb2Nlc3MgdGhlbQogICAgICAgIGNhbGxlZF9udW0gPSByZXF1ZXN0LlBPU1RbIlRvIl0KICAgICAgICBjaG9pY2UgPSByZXF1ZXN0LlBPU1RbIkRpZ2l0cyJdCiAgICAgICAgdHdpbGlvX2NhbGxfc2lkID0gcmVxdWVzdC5QT1NUWyJDYWxsU2lkIl0KICAgICAgICBpZiBsZW4oY2hvaWNlKToKICAgICAgICAgICAgIyA8U2F5PiBhIGRpZmZlcmVudCBtZXNzYWdlIGRlcGVuZGluZyBvbiB0aGUgY2FsbGVyJ3MgY2hvaWNlCiAgICAgICAgICAgIGlmIGNob2ljZSA9PSAnMSc6CiAgICAgICAgICAgICAgICByZXNwLnNheSgKICAgICAgICAgICAgICAgICAgICAnWW91IGhhdmUgYWNjZXB0ZWQsIHdlIGhhdmUgYmVlbiBub3RpZmllZCBhbmQgd2lsbCBiZSBjb250YWN0aW5nIHlvdSBzb29uLiBUaGFuayB5b3UnKQogICAgICAgICAgICAgICAgcHJpbnQoImNvZGUgZm9yIGFjY2VwdGFuY2UgZ29lcyBoZXJlIikKICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5jb21wbGV0ZWQgPSBUcnVlCiAgICAgICAgICAgICAgICBub3RpZmljYXRpb24udXNlcl9yZXNwb25zZSA9ICJBQ0NFUFQiCiAgICAgICAgICAgICAgICBub3RpZmljYXRpb24uc2F2ZSgpCiAgICAgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKHN0cihyZXNwKSwgY29udGVudF90eXBlPSJ0ZXh0L3htbCIpCiAgICAgICAgICAgIGVsaWYgY2hvaWNlID09ICcyJzoKICAgICAgICAgICAgICAgIHJlc3Auc2F5KCdZb3UgaGF2ZSByZWplY3RlZCwgd2UgaGF2ZSBiZWVuIG5vdGlmaWVkLiBUaGFuayB5b3UnKQogICAgICAgICAgICAgICAgcHJpbnQoImNvZGUgZm9yIHJlamVjdGlvbiBnb2VzIGhlcmUiKQogICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLmNvbXBsZXRlZCA9IFRydWUKICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi51c2VyX3Jlc3BvbnNlID0gIkRFQ0xJTkUiCiAgICAgICAgICAgICAgICBub3RpZmljYXRpb24uc2F2ZSgpCgogICAgICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShzdHIocmVzcCksIGNvbnRlbnRfdHlwZT0idGV4dC94bWwiKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIyBJZiB0aGUgY2FsbGVyIGRpZG4ndCBjaG9vc2UgMSBvciAyLCBhcG9sb2dpemUgYW5kIGFzayB0aGVtIGFnYWluCiAgICAgICAgICAgICAgICByZXNwLnNheSgiU29ycnksIEkgZG9uJ3QgdW5kZXJzdGFuZCB0aGF0IGNob2ljZSIpCgoKCiAgICAgICAgIyBJZiB0aGUgdXNlciBkaWRuJ3QgY2hvb3NlIDEgb3IgMiAob3IgYW55dGhpbmcpLCBzZW5kIHRoZW0gYmFjayB0byB0aGUgcHJvbXB0CiAgICAgICAgcmVzcC5yZWRpcmVjdChmJy90d2lsaW8vbWFrZXR3aW1sP3ttZXNzYWdlfScpCiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShzdHIocmVzcCksIGNvbnRlbnRfdHlwZT0idGV4dC94bWwiKQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6CiAgICAgICAgcHJpbnQoZXJyKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIG1lc3NhZ2UgPSByZXF1ZXN0LnF1ZXJ5X3BhcmFtc1sibWVzc2FnZSJdCiAgICAgICAgaWQgPSByZXF1ZXN0LnF1ZXJ5X3BhcmFtc1siaWQiXQogICAgICAgIG1lc3NhZ2UgPSB1cmxlbmNvZGUoeyJtZXNzYWdlIjogbWVzc2FnZSwgImlkIjogaWR9KQogICAgICAgIG5vdGlmaWNhdGlvbiA9IE5vdGlmaWNhdGlvbi5vYmplY3RzLmdldChwaz1pZCkKPHxmaW1fZW5kfD4="]
["99ced15961abae547be834b1ef7f90d3695536a9-2","99ced15961abae547be834b1ef7f90d3695536a9","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSnNvblJlc3BvbnNlLCBIdHRwUmVzcG9uc2UKZnJvbSByZXN0X2ZyYW1ld29yay5kZWNvcmF0b3JzIGltcG9ydCBhcGlfdmlldywgcGVybWlzc2lvbl9jbGFzc2VzCmZyb20gcmVzdF9mcmFtZXdvcmsucGVybWlzc2lvbnMgaW1wb3J0IElzQXV0aGVudGljYXRlZApmcm9tIHJlc3RfZnJhbWV3b3JrLnJlc3BvbnNlIGltcG9ydCBSZXNwb25zZQpmcm9tIHR3aWxpby50d2ltbC52b2ljZV9yZXNwb25zZSBpbXBvcnQgVm9pY2VSZXNwb25zZSwgR2F0aGVyLCBTYXkKZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybGVuY29kZQpmcm9tIG5vdGlmaWNhdGlvbnMubW9kZWxzIGltcG9ydCBSb3RhdGlvbiwgTm90aWZpY2F0aW9uCiMgQ3JlYXRlIHlvdXIgdmlld3MgaGVyZS4KCgpAYXBpX3ZpZXcoWydHRVQnLCAnUE9TVCddKQpkZWYgaG9tZShyZXF1ZXN0KToKICAgICIiIlJlc3BvbmQgdG8gaW5jb21pbmcgcGhvbmUgY2FsbHMgd2l0aCBhIG1lbnUgb2Ygb3B0aW9ucyIiIgogICAgdHJ5OgogICAgICAgICMgI2xldHMgYnVpbGQgc29tZSB0d2lNTAogICAgICAgIHJlc3AgPSBWb2ljZVJlc3BvbnNlKCkKICAgICAgICBtZXNzYWdlID0gcmVxdWVzdC5xdWVyeV9wYXJhbXNbIm1lc3NhZ2UiXQogICAgICAgIGlkID0gcmVxdWVzdC5xdWVyeV9wYXJhbXNbImlkIl0KICAgICAgICBtZXNzYWdlX3BhciA9IHVybGVuY29kZSh7Im1lc3NhZ2UiOiBtZXNzYWdlLCAiaWQiOiBpZH0pCiAgICAgICAgcHJpbnQobWVzc2FnZV9wYXIpCiAgICAgICAgIyBzdGFydCB0aGUgZ2F0aGVyIHZlcmIKICAgICAgICBnYXRoZXIgPSBHYXRoZXIoCiAgICAgICAgICAgIG51bV9kaWdpdHM9MSwgYWN0aW9uPWYibWFrZXR3aW1sL3VzZXJfcmVzcG9uc2U/e21lc3NhZ2VfcGFyfSIpCiAgICAgICAgZ2F0aGVyLnNheShtZXNzYWdlKQogICAgICAgIHJlc3AuYXBwZW5kKGdhdGhlcikKCiAgICAgICAgcHJpbnQoImJhc2Ugcm91dGUgbWVzc2FnZTogIiwgcmVxdWVzdC5xdWVyeV9wYXJhbXNbIm1lc3NhZ2UiXSkKICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKHN0cihyZXNwKSwgY29udGVudF90eXBlPSJ0ZXh0L3htbCIpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKICAgICAgICBwcmludChlcnIpCgoKQGFwaV92aWV3KFsiR0VUIiwgIlBPU1QiXSkKZGVmIHVzZXJfcmVzcG9uc2UocmVxdWVzdCk6CiAgICB0cnk6CiAgICAgICAgbWVzc2FnZSA9IHJlcXVlc3QucXVlcnlfcGFyYW1zWyJtZXNzYWdlIl0KICAgICAgICBpZCA9IHJlcXVlc3QucXVlcnlfcGFyYW1zWyJpZCJdCiAgICAgICAgbWVzc2FnZSA9IHVybGVuY29kZSh7Im1lc3NhZ2UiOiBtZXNzYWdlLCAiaWQiOiBpZH0pCjx8ZmltX2hvbGV8PgogICAgICAgICMgSWYgVHdpbGlvJ3MgcmVxdWVzdCB0byBvdXIgYXBwIGluY2x1ZGVkIGFscmVhZHkgZ2F0aGVyZWQgZGlnaXRzLAogICAgICAgICMgcHJvY2VzcyB0aGVtCiAgICAgICAgY2FsbGVkX251bSA9IHJlcXVlc3QuUE9TVFsiVG8iXQogICAgICAgIGNob2ljZSA9IHJlcXVlc3QuUE9TVFsiRGlnaXRzIl0KICAgICAgICB0d2lsaW9fY2FsbF9zaWQgPSByZXF1ZXN0LlBPU1RbIkNhbGxTaWQiXQogICAgICAgIGlmIGxlbihjaG9pY2UpOgogICAgICAgICAgICAjIDxTYXk+IGEgZGlmZmVyZW50IG1lc3NhZ2UgZGVwZW5kaW5nIG9uIHRoZSBjYWxsZXIncyBjaG9pY2UKICAgICAgICAgICAgaWYgY2hvaWNlID09ICcxJzoKICAgICAgICAgICAgICAgIHJlc3Auc2F5KAogICAgICAgICAgICAgICAgICAgICdZb3UgaGF2ZSBhY2NlcHRlZCwgd2UgaGF2ZSBiZWVuIG5vdGlmaWVkIGFuZCB3aWxsIGJlIGNvbnRhY3RpbmcgeW91IHNvb24uIFRoYW5rIHlvdScpCiAgICAgICAgICAgICAgICBwcmludCgiY29kZSBmb3IgYWNjZXB0YW5jZSBnb2VzIGhlcmUiKQogICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLmNvbXBsZXRlZCA9IFRydWUKICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi51c2VyX3Jlc3BvbnNlID0gIkFDQ0VQVCIKICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5zYXZlKCkKICAgICAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2Uoc3RyKHJlc3ApLCBjb250ZW50X3R5cGU9InRleHQveG1sIikKICAgICAgICAgICAgZWxpZiBjaG9pY2UgPT0gJzInOgogICAgICAgICAgICAgICAgcmVzcC5zYXkoJ1lvdSBoYXZlIHJlamVjdGVkLCB3ZSBoYXZlIGJlZW4gbm90aWZpZWQuIFRoYW5rIHlvdScpCiAgICAgICAgICAgICAgICBwcmludCgiY29kZSBmb3IgcmVqZWN0aW9uIGdvZXMgaGVyZSIpCiAgICAgICAgICAgICAgICBub3RpZmljYXRpb24uY29tcGxldGVkID0gVHJ1ZQogICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLnVzZXJfcmVzcG9uc2UgPSAiREVDTElORSIKICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5zYXZlKCkKCiAgICAgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKHN0cihyZXNwKSwgY29udGVudF90eXBlPSJ0ZXh0L3htbCIpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAjIElmIHRoZSBjYWxsZXIgZGlkbid0IGNob29zZSAxIG9yIDIsIGFwb2xvZ2l6ZSBhbmQgYXNrIHRoZW0gYWdhaW4KICAgICAgICAgICAgICAgIHJlc3Auc2F5KCJTb3JyeSwgSSBkb24ndCB1bmRlcnN0YW5kIHRoYXQgY2hvaWNlIikKCgoKICAgICAgICAjIElmIHRoZSB1c2VyIGRpZG4ndCBjaG9vc2UgMSBvciAyIChvciBhbnl0aGluZyksIHNlbmQgdGhlbSBiYWNrIHRvIHRoZSBwcm9tcHQKICAgICAgICByZXNwLnJlZGlyZWN0KGYnL3R3aWxpby9tYWtldHdpbWw/e21lc3NhZ2V9JykKICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKHN0cihyZXNwKSwgY29udGVudF90eXBlPSJ0ZXh0L3htbCIpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKICAgICAgICBwcmludChlcnIpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgbm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uLm9iamVjdHMuZ2V0KHBrPWlkKQoKICAgICAgICBwcmludCgidXNlcl9yZXNwb25zZSByb3V0ZSBtZXNzYWdlOiAiLCBtZXNzYWdlKQogICAgICAgIHJlc3AgPSBWb2ljZVJlc3BvbnNlKCkKPHxmaW1fZW5kfD4="]
["99ced15961abae547be834b1ef7f90d3695536a9-3","99ced15961abae547be834b1ef7f90d3695536a9","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSnNvblJlc3BvbnNlLCBIdHRwUmVzcG9uc2UKZnJvbSByZXN0X2ZyYW1ld29yay5kZWNvcmF0b3JzIGltcG9ydCBhcGlfdmlldywgcGVybWlzc2lvbl9jbGFzc2VzCmZyb20gcmVzdF9mcmFtZXdvcmsucGVybWlzc2lvbnMgaW1wb3J0IElzQXV0aGVudGljYXRlZApmcm9tIHJlc3RfZnJhbWV3b3JrLnJlc3BvbnNlIGltcG9ydCBSZXNwb25zZQpmcm9tIHR3aWxpby50d2ltbC52b2ljZV9yZXNwb25zZSBpbXBvcnQgVm9pY2VSZXNwb25zZSwgR2F0aGVyLCBTYXkKZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybGVuY29kZQpmcm9tIG5vdGlmaWNhdGlvbnMubW9kZWxzIGltcG9ydCBSb3RhdGlvbiwgTm90aWZpY2F0aW9uCiMgQ3JlYXRlIHlvdXIgdmlld3MgaGVyZS4KCgpAYXBpX3ZpZXcoWydHRVQnLCAnUE9TVCddKQpkZWYgaG9tZShyZXF1ZXN0KToKICAgICIiIlJlc3BvbmQgdG8gaW5jb21pbmcgcGhvbmUgY2FsbHMgd2l0aCBhIG1lbnUgb2Ygb3B0aW9ucyIiIgogICAgdHJ5OgogICAgICAgICMgI2xldHMgYnVpbGQgc29tZSB0d2lNTAo8fGZpbV9ob2xlfD4KICAgICAgICBwcmludChtZXNzYWdlX3BhcikKICAgICAgICAjIHN0YXJ0IHRoZSBnYXRoZXIgdmVyYgogICAgICAgIGdhdGhlciA9IEdhdGhlcigKICAgICAgICAgICAgbnVtX2RpZ2l0cz0xLCBhY3Rpb249ZiJtYWtldHdpbWwvdXNlcl9yZXNwb25zZT97bWVzc2FnZV9wYXJ9IikKICAgICAgICBnYXRoZXIuc2F5KG1lc3NhZ2UpCiAgICAgICAgcmVzcC5hcHBlbmQoZ2F0aGVyKQoKICAgICAgICBwcmludCgiYmFzZSByb3V0ZSBtZXNzYWdlOiAiLCByZXF1ZXN0LnF1ZXJ5X3BhcmFtc1sibWVzc2FnZSJdKQogICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2Uoc3RyKHJlc3ApLCBjb250ZW50X3R5cGU9InRleHQveG1sIikKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgogICAgICAgIHByaW50KGVycikKCgpAYXBpX3ZpZXcoWyJHRVQiLCAiUE9TVCJdKQpkZWYgdXNlcl9yZXNwb25zZShyZXF1ZXN0KToKICAgIHRyeToKICAgICAgICBtZXNzYWdlID0gcmVxdWVzdC5xdWVyeV9wYXJhbXNbIm1lc3NhZ2UiXQogICAgICAgIGlkID0gcmVxdWVzdC5xdWVyeV9wYXJhbXNbImlkIl0KICAgICAgICBtZXNzYWdlID0gdXJsZW5jb2RlKHsibWVzc2FnZSI6IG1lc3NhZ2UsICJpZCI6IGlkfSkKICAgICAgICBub3RpZmljYXRpb24gPSBOb3RpZmljYXRpb24ub2JqZWN0cy5nZXQocGs9aWQpCgogICAgICAgIHByaW50KCJ1c2VyX3Jlc3BvbnNlIHJvdXRlIG1lc3NhZ2U6ICIsIG1lc3NhZ2UpCiAgICAgICAgcmVzcCA9IFZvaWNlUmVzcG9uc2UoKQogICAgICAgICMgSWYgVHdpbGlvJ3MgcmVxdWVzdCB0byBvdXIgYXBwIGluY2x1ZGVkIGFscmVhZHkgZ2F0aGVyZWQgZGlnaXRzLAogICAgICAgICMgcHJvY2VzcyB0aGVtCiAgICAgICAgY2FsbGVkX251bSA9IHJlcXVlc3QuUE9TVFsiVG8iXQogICAgICAgIGNob2ljZSA9IHJlcXVlc3QuUE9TVFsiRGlnaXRzIl0KICAgICAgICB0d2lsaW9fY2FsbF9zaWQgPSByZXF1ZXN0LlBPU1RbIkNhbGxTaWQiXQogICAgICAgIGlmIGxlbihjaG9pY2UpOgogICAgICAgICAgICAjIDxTYXk+IGEgZGlmZmVyZW50IG1lc3NhZ2UgZGVwZW5kaW5nIG9uIHRoZSBjYWxsZXIncyBjaG9pY2UKICAgICAgICAgICAgaWYgY2hvaWNlID09ICcxJzoKICAgICAgICAgICAgICAgIHJlc3Auc2F5KAogICAgICAgICAgICAgICAgICAgICdZb3UgaGF2ZSBhY2NlcHRlZCwgd2UgaGF2ZSBiZWVuIG5vdGlmaWVkIGFuZCB3aWxsIGJlIGNvbnRhY3RpbmcgeW91IHNvb24uIFRoYW5rIHlvdScpCiAgICAgICAgICAgICAgICBwcmludCgiY29kZSBmb3IgYWNjZXB0YW5jZSBnb2VzIGhlcmUiKQogICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLmNvbXBsZXRlZCA9IFRydWUKICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi51c2VyX3Jlc3BvbnNlID0gIkFDQ0VQVCIKICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5zYXZlKCkKICAgICAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2Uoc3RyKHJlc3ApLCBjb250ZW50X3R5cGU9InRleHQveG1sIikKICAgICAgICAgICAgZWxpZiBjaG9pY2UgPT0gJzInOgogICAgICAgICAgICAgICAgcmVzcC5zYXkoJ1lvdSBoYXZlIHJlamVjdGVkLCB3ZSBoYXZlIGJlZW4gbm90aWZpZWQuIFRoYW5rIHlvdScpCiAgICAgICAgICAgICAgICBwcmludCgiY29kZSBmb3IgcmVqZWN0aW9uIGdvZXMgaGVyZSIpCiAgICAgICAgICAgICAgICBub3RpZmljYXRpb24uY29tcGxldGVkID0gVHJ1ZQogICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLnVzZXJfcmVzcG9uc2UgPSAiREVDTElORSIKICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5zYXZlKCkKCiAgICAgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKHN0cihyZXNwKSwgY29udGVudF90eXBlPSJ0ZXh0L3htbCIpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAjIElmIHRoZSBjYWxsZXIgZGlkbid0IGNob29zZSAxIG9yIDIsIGFwb2xvZ2l6ZSBhbmQgYXNrIHRoZW0gYWdhaW4KICAgICAgICAgICAgICAgIHJlc3Auc2F5KCJTb3JyeSwgSSBkb24ndCB1bmRlcnN0YW5kIHRoYXQgY2hvaWNlIikKCgoKICAgICAgICAjIElmIHRoZSB1c2VyIGRpZG4ndCBjaG9vc2UgMSBvciAyIChvciBhbnl0aGluZyksIHNlbmQgdGhlbSBiYWNrIHRvIHRoZSBwcm9tcHQKICAgICAgICByZXNwLnJlZGlyZWN0KGYnL3R3aWxpby9tYWtldHdpbWw/e21lc3NhZ2V9JykKICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKHN0cihyZXNwKSwgY29udGVudF90eXBlPSJ0ZXh0L3htbCIpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKICAgICAgICBwcmludChlcnIpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcmVzcCA9IFZvaWNlUmVzcG9uc2UoKQogICAgICAgIG1lc3NhZ2UgPSByZXF1ZXN0LnF1ZXJ5X3BhcmFtc1sibWVzc2FnZSJdCiAgICAgICAgaWQgPSByZXF1ZXN0LnF1ZXJ5X3BhcmFtc1siaWQiXQogICAgICAgIG1lc3NhZ2VfcGFyID0gdXJsZW5jb2RlKHsibWVzc2FnZSI6IG1lc3NhZ2UsICJpZCI6IGlkfSkKPHxmaW1fZW5kfD4="]
["e7d7fac24c853a9b62515384c858b4ae1b486115-1","e7d7fac24c853a9b62515384c858b4ae1b486115","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IHdhcm5pbmdzCgpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAoKZnJvbSBlbGUuZXhjZXB0aW9ucyBpbXBvcnQgRWxlbWVudEVycm9yCmZyb20gZWxlLmV4Y2VwdGlvbnMgaW1wb3J0IE11bHRpTWF0Y2hFcnJvcgoKSlNPTl9QQVRIID0gUGF0aC5qb2lucGF0aChQYXRoKF9fZmlsZV9fKS5wYXJlbnQsICJsaWIvZWxlbWVudHMuanNvbiIpCgpfX2FsbF9fID0gKAogICAgImVsZW1lbnRfZnJvbV9uYW1lIiwKICAgICJlbGVtZW50X2Zyb21fbWFzcyIsCiAgICAiZWxlbWVudF9mcm9tX2F0b21pY19udW1iZXIiLAogICAgImVsZW1lbnRfZnJvbV9zeW1ib2wiLAogICAgIkVsZW1lbnRzIiwKKQoKCmNsYXNzIEVsZW1lbnQobmFtZWR0dXBsZSgiRWxlbWVudCIsICJhdG9taWNfbnVtYmVyLCBuYW1lLCBzeW1ib2wsIG1hc3MiKSk6CiAgICAiIiJDaGVtaWNhbCBlbGVtZW50IG9iamVjdAoKICAgIFRlbXBsYXRlIHRvIGNyZWF0ZSBhIGNoZW1pY2FsIGVsZW1lbnQuCiAgICBQcm9wZXJ0aWVzIG9mIHRoZSBlbGVtZW50IGluc3RhbmNlIGFyZSBpbW11dGFibGUuCiAgICBBbGwga25vd24gZWxlbWVudHMgYXJlIHByZS1idWlsdCBhbmQgc3RvcmVkIGludGVybmFsbHkuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tCiAgICBuYW1lIDogc3RyCiAgICAgICAgTmFtZSBvZiB0aGUgZWxlbWVudC4KICAgIHN5bWJvbCA6IHN0cgogICAgICAgIENoZW1pY2FsIHN5bWJvbCBvZiB0aGUgZWxlbWVudC4KICAgIGF0b21fbnVtYmVyIDogaW50CiAgICAgICAgQXRvbWljIG51bWJlciBvZiB0aGUgZWxlbWVudC4KICAgIG1hc3MgOiBmbG9hdAogICAgICAgIE1hc3Mgb2YgdGhlIGVsZW1lbnQgaW4gYW11CgogICAgUmV0dXJuCiAgICAtLS0tLS0KICAgIEVsZW1lbnQgaW5zdGFuY2UKICAgICAgICBBbiBpbW11dGFibGUgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KICAgICIiIgoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gIkVsZW1lbnQ6IHt9LCBzeW1ib2w6IHt9LCBhdG9taWMgbnVtYmVyOiB7fSwgbWFzczoge30iLmZvcm1hdCgKICAgICAgICAgICAgc2VsZi5uYW1lLCBzZWxmLnN5bWJvbCwgc2VsZi5hdG9taWNfbnVtYmVyLCBzZWxmLm1hc3MKICAgICAgICApCgogICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICAgIHJldHVybiBoYXNoKChzZWxmLm5hbWUsIHNlbGYuc3ltYm9sLCBzZWxmLmF0b21pY19udW1iZXIsIHNlbGYubWFzcykpCgogICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgcmV0dXJuIGhhc2goc2VsZikgPT0gaGFzaChvdGhlcikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCmRlZiBlbGVtZW50X2Zyb21fc3ltYm9sKHN5bWJvbCk6CiAgICAiIiJTZWFyY2ggZm9yIGFuIGVsZW1lbnQgYnkgaXRzIHN5bWJvbAo8fGZpbV9lbmR8Pg=="]
["e7d7fac24c853a9b62515384c858b4ae1b486115-2","e7d7fac24c853a9b62515384c858b4ae1b486115","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IHdhcm5pbmdzCgpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAoKZnJvbSBlbGUuZXhjZXB0aW9ucyBpbXBvcnQgRWxlbWVudEVycm9yCmZyb20gZWxlLmV4Y2VwdGlvbnMgaW1wb3J0IE11bHRpTWF0Y2hFcnJvcgoKSlNPTl9QQVRIID0gUGF0aC5qb2lucGF0aChQYXRoKF9fZmlsZV9fKS5wYXJlbnQsICJsaWIvZWxlbWVudHMuanNvbiIpCgpfX2FsbF9fID0gKAogICAgImVsZW1lbnRfZnJvbV9uYW1lIiwKICAgICJlbGVtZW50X2Zyb21fbWFzcyIsCiAgICAiZWxlbWVudF9mcm9tX2F0b21pY19udW1iZXIiLAogICAgImVsZW1lbnRfZnJvbV9zeW1ib2wiLAogICAgIkVsZW1lbnRzIiwKKQoKCmNsYXNzIEVsZW1lbnQobmFtZWR0dXBsZSgiRWxlbWVudCIsICJhdG9taWNfbnVtYmVyLCBuYW1lLCBzeW1ib2wsIG1hc3MiKSk6CiAgICAiIiJDaGVtaWNhbCBlbGVtZW50IG9iamVjdAoKICAgIFRlbXBsYXRlIHRvIGNyZWF0ZSBhIGNoZW1pY2FsIGVsZW1lbnQuCiAgICBQcm9wZXJ0aWVzIG9mIHRoZSBlbGVtZW50IGluc3RhbmNlIGFyZSBpbW11dGFibGUuCiAgICBBbGwga25vd24gZWxlbWVudHMgYXJlIHByZS1idWlsdCBhbmQgc3RvcmVkIGludGVybmFsbHkuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tCiAgICBuYW1lIDogc3RyCiAgICAgICAgTmFtZSBvZiB0aGUgZWxlbWVudC4KICAgIHN5bWJvbCA6IHN0cgogICAgICAgIENoZW1pY2FsIHN5bWJvbCBvZiB0aGUgZWxlbWVudC4KICAgIGF0b21fbnVtYmVyIDogaW50CiAgICAgICAgQXRvbWljIG51bWJlciBvZiB0aGUgZWxlbWVudC4KICAgIG1hc3MgOiBmbG9hdAogICAgICAgIE1hc3Mgb2YgdGhlIGVsZW1lbnQgaW4gYW11CgogICAgUmV0dXJuCiAgICAtLS0tLS0KICAgIEVsZW1lbnQgaW5zdGFuY2UKICAgICAgICBBbiBpbW11dGFibGUgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KICAgICIiIgoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gIkVsZW1lbnQ6IHt9LCBzeW1ib2w6IHt9LCBhdG9taWMgbnVtYmVyOiB7fSwgbWFzczoge30iLmZvcm1hdCgKICAgICAgICAgICAgc2VsZi5uYW1lLCBzZWxmLnN5bWJvbCwgc2VsZi5hdG9taWNfbnVtYmVyLCBzZWxmLm1hc3MKICAgICAgICApCgogICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICAgIHJldHVybiBoYXNoKChzZWxmLm5hbWUsIHNlbGYuc3ltYm9sLCBzZWxmLmF0b21pY19udW1iZXIsIHNlbGYubWFzcykpCgogICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgcmV0dXJuIGhhc2goc2VsZikgPT0gaGFzaChvdGhlcikKCgpkZWYgZWxlbWVudF9mcm9tX3N5bWJvbChzeW1ib2wpOgogICAgIiIiU2VhcmNoIGZvciBhbiBlbGVtZW50IGJ5IGl0cyBzeW1ib2wKCiAgICBMb29rIHVwIGFuIGVsZW1lbnQgZnJvbSBhIGxpc3Qgb2Yga25vd24gZWxlbWVudHMgYnkgc3ltYm9sLgogICAgUmV0dXJuIE5vbmUgaWYgbm8gbWF0Y2ggZm91bmQuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgc3ltYm9sIDogc3RyCiAgICAgICAgRWxlbWVudCBzeW1ib2wKCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBtYXRjaGVkX2VsZW1lbnQgOiBlbGVtZW50LkVsZW1lbnQKICAgICAgICBSZXR1cm4gYW4gZWxlbWVudCBmcm9tIHRoZSBwZXJpb2RpYyB0YWJsZSBpZiB0aGUgc3ltYm9sIGlzIGZvdW5kLAogICAgICAgIG90aGVyd2lzZSByZXR1cm4gTm9uZQogICAgIiIiCiAgICBpZiBub3QgaXNpbnN0YW5jZShzeW1ib2wsIHN0cik6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJgc3ltYm9sYCAoe3N5bWJvbH0pIG11c3QgYmUgYSBzdHJpbmciKQoKICAgIHN5bWJvbCA9IHN5bWJvbC5jYXBpdGFsaXplKCkKICAgIG1hdGNoZWRfZWxlbWVudCA9IHN5bWJvbF9kaWN0LmdldChzeW1ib2wpCiAgICBpZiBtYXRjaGVkX2VsZW1lbnQgaXMgTm9uZToKICAgICAgICByYWlzZSBFbGVtZW50RXJyb3IoZiJObyBlbGVtZW50IHdpdGggc3ltYm9sIHtzeW1ib2x9IikKCiAgICByZXR1cm4gbWF0Y2hlZF9lbGVtZW50CgoKZGVmIGVsZW1lbnRfZnJvbV9uYW1lKG5hbWUpOgogICAgIiIiU2VhcmNoIGZvciBhbiBlbGVtZW50IGJ5IGl0cyBuYW1lCgogICAgTG9vayB1cCBhbiBlbGVtZW50IGZyb20gYSBsaXN0IG9mIGtub3duIGVsZW1lbnRzIGJ5IG5hbWUuCiAgICBSZXR1cm4gTm9uZSBpZiBubyBtYXRjaCBmb3VuZC4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBuYW1lIDogc3RyCiAgICAgICAgRWxlbWVudCBuYW1lIHRvIGxvb2sgZm9yLCBkaWdpdHMgYW5kIHNwYWNlcyBhcmUgcmVtb3ZlZCBiZWZvcmUgc2VhcmNoCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgbWF0Y2hlZF9lbGVtZW50IDogZWxlbWVudC5FbGVtZW50CiAgICAgICAgUmV0dXJuIGFuIGVsZW1lbnQgZnJvbSB0aGUgcGVyaW9kaWMgdGFibGUgaWYgdGhlIG5hbWUgaXMgZm91bmQsCiAgICAgICAgb3RoZXJ3aXNlIHJldHVybiBOb25lCiAgICAiIiIKICAgIGlmIG5vdCBpc2luc3RhbmNlKG5hbWUsIHN0cik6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJgbmFtZWAgKHtuYW1lfSkgbXVzdCBiZSBhIHN0cmluZyIpCgogICAgbmFtZSA9IG5hbWUubG93ZXIoKQogICAgbWF0Y2hlZF9lbGVtZW50ID0gbmFtZV9kaWN0LmdldChuYW1lKQogICAgaWYgbWF0Y2hlZF9lbGVtZW50IGlzIE5vbmU6CiAgICAgICAgcmFpc2UgRWxlbWVudEVycm9yKGYiTm8gZWxlbWVudCB3aXRoIG5hbWUge25hbWV9IikKCiAgICByZXR1cm4gbWF0Y2hlZF9lbGVtZW50CgoKZGVmIGVsZW1lbnRfZnJvbV9hdG9taWNfbnVtYmVyKGF0b21pY19udW1iZXIpOgogICAgIiIiU2VhcmNoIGZvciBhbiBlbGVtZW50IGJ5IGl0cyBhdG9taWMgbnVtYmVyCgogICAgTG9vayB1cCBhbiBlbGVtZW50IGZyb20gYSBsaXN0IG9mIGtub3duIGVsZW1lbnRzIGJ5IGF0b21pYyBudW1iZXIuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgYXRvbWljX251bWJlciA6IGludAogICAgICAgIEVsZW1lbnQgYXRvbWljIG51bWJlcgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIG1hdGNoZWRfZWxlbWVudCA6IGVsZW1lbnQuRWxlbWVudAogICAgICAgIFJldHVybiBhbiBlbGVtZW50IGZyb20gdGhlIHBlcmlvZGljIHRhYmxlIGlmIHdlIGZpbmQgYSBtYXRjaCwKICAgICIiIgogICAgaWYgbm90IGlzaW5zdGFuY2UoYXRvbWljX251bWJlciwgaW50KToKICAgICAgICByYWlzZSBUeXBlRXJyb3IoImBhdG9taWNfbnVtYmVyYCAoe2F0b21pY19udW1iZXJ9KSBtdXN0IGJlIGFuIGludCIpCgogICAgbWF0Y2hlZF9lbGVtZW50ID0gYXRvbWljX2RpY3QuZ2V0KGF0b21pY19udW1iZXIpCiAgICBpZiBtYXRjaGVkX2VsZW1lbnQgaXMgTm9uZToKICAgICAgICByYWlzZSBFbGVtZW50RXJyb3IoZiJObyBlbGVtZW50IHdpdGggYXRvbWljIG51bWJlciB7YXRvbWljX251bWJlcn0iKQoKICAgIHJldHVybiBtYXRjaGVkX2VsZW1lbnQKCgpkZWYgZWxlbWVudF9mcm9tX21hc3MobWFzcywgZXhhY3Q9VHJ1ZSwgZHVwbGljYXRlcz0iZXJyb3IiKToKICAgICIiIlNlYXJjaCBmb3IgYW4gZWxlbWVudCBieSBpdHMgbWFzcwoKICAgIExvb2sgdXAgYW4gZWxlbWVudCBmcm9tIGEgbGlzdCBvZiBrbm93biBlbGVtZW50cyBieSBtYXNzIChhbXUpLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIG1hc3MgOiBpbnQsIGZsb2F0CiAgICAgICAgRWxlbWVudCBtYXNzIGluIGFtdQogICAgZXhhY3QgOiBib29sLCBvcHRpb25hbCwgIGRlZmF1bHQ9VHJ1ZQogICAgICAgIFJlcXVpcmUgdGhhdCB0aGUgbWFzcyBtYXRjaCB0byB0aGUgZmlyc3QgZGVjaW1hbC4gSWYgRmFsc2UsIHRoZQogICAgICAgIGVsZW1lbnQgd2l0aCB0aGUgY2xvc2VzdCBtYXNzIHdpbGwgYmUgcmV0dXJuZWQKICAgIGR1cGxpY2F0ZXMgOiBlbnVtLCBvcHRpb25hbCwgZGVmYXVsdD0iZXJyb3IiCiAgICAgICAgSG93IHRvIGhhbmRsZSBkdXBsaWNhdGUgZWxlbWVudHMgd2l0aCB0aGUgc2FtZSBtYXNzLgogICAgICAgIEVycm9yICgiZXJyb3IiKSwgcmV0dXJuIGEgdHVwbGUgKCJhbGwiKSwgb3IgcmV0dXJuCiAgICAgICAgTm9uZSAoIm5vbmUiKQoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIG1hdGNoZWRfZWxlbWVudCA6IGVsZW1lbnQuRWxlbWVudCBvciB0dXBsZSBvZiBlbGVtZW50LkVsZW1lbnQKICAgICAgICBSZXR1cm4gYW4gZWxlbWVudCBmcm9tIHRoZSBwZXJpb2RpY3QgdGFibGUgaWYgd2UgZmluZCBhIG1hdGNoLAogICAgICAgIG90aGVyd2lzZSByZXR1cm4gTm9uZQogICAgIiIiCiAgICBpZiBub3QgaXNpbnN0YW5jZShtYXNzLCAoZmxvYXQsIGludCkpOgogICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYG1hc3NgICh7bWFzc30pIG11c3QgYmUgYSBmbG9hdCIpCgogICAgaWYgZHVwbGljYXRlcy5sb3dlcigpIG5vdCBpbiBbImVycm9yIiwgImFsbCIsICJub25lIl06CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgICAiYGR1cGxpY2F0ZXNgIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IGBlcnJvcmAsIGBhbGxgLCBgbm9uZWAiCiAgICAgICAgKQogICAgbWFzcyA9IHJvdW5kKGZsb2F0KG1hc3MpLCAxKQoKICAgIGlmIGV4YWN0OgogICAgICAgICMgRXhhY3Qgc2VhcmNoIG1vZGUKICAgICAgICBtYXRjaGVkX2VsZW1lbnQgPSBtYXNzX2RpY3QuZ2V0KG1hc3MpCiAgICBlbHNlOgogICAgICAgICMgQ2xvc2VzdCBtYXRjaCBtb2RlCiAgICAgICAgbWFzc19jbG9zZXN0ID0gbWluKG1hc3NfZGljdC5rZXlzKCksIGtleT1sYW1iZGEgazogYWJzKGsgLSBtYXNzKSkKICAgICAgICBtc2cgPSAiQ2xvc2VzdCBtYXNzIHRvIHt9OiB7fSIuZm9ybWF0KG1hc3MsIG1hc3NfY2xvc2VzdCkKICAgICAgICB3YXJuaW5ncy53YXJuKG1zZykKICAgICAgICBtYXRjaGVkX2VsZW1lbnQgPSBtYXNzX2RpY3QuZ2V0KG1hc3NfY2xvc2VzdCkKCiAgICBpZiBtYXRjaGVkX2VsZW1lbnQgaXMgTm9uZToKICAgICAgICByYWlzZSBFbGVtZW50RXJyb3IoZiJObyBlbGVtZW50IHdpdGggbWFzcyB7bWFzc30iKQoKICAgIGlmIGxlbihtYXRjaGVkX2VsZW1lbnQpID09IDE6CiAgICAgICAgbWF0Y2hlZF9lbGVtZW50ID0gbWF0Y2hlZF9lbGVtZW50WzBdCiAgICBlbHNlOgogICAgICAgIGlmIGR1cGxpY2F0ZXMubG93ZXIoKSA9PSAiZXJyb3IiOgogICAgICAgICAgICByYWlzZSBNdWx0aU1hdGNoRXJyb3IoCiAgICAgICAgICAgICAgICBmIk11bHRpcGxlIGVsZW1lbnRzIGhhdmUgbWFzcyB7bWFzc306IHttYXRjaGVkX2VsZW1lbnR9IgogICAgICAgICAgICApCiAgICAgICAgZWxpZiBkdXBsaWNhdGVzLmxvd2VyKCkgPT0gImFsbCI6CiAgICAgICAgICAgIG1hdGNoZWRfZWxlbWVudCA9IHR1cGxlKG1hdGNoZWRfZWxlbWVudCkKICAgICAgICBlbGlmIGR1cGxpY2F0ZXMubG93ZXIoKSA9PSAibm9uZSI6CiAgICAgICAgICAgIG1hdGNoZWRfZWxlbWVudCA9IE5vbmUKCiAgICByZXR1cm4gbWF0Y2hlZF9lbGVtZW50CgoKZWxlbWVudHMgPSBbXQp3aXRoIG9wZW4oSlNPTl9QQVRIKSBhcyBqc29uX2ZpbGU6CiAgICBlbGVtZW50c19kaWN0ID0ganNvbi5sb2FkKGpzb25fZmlsZSkKCmZvciBlbGVtZW50X25hbWUsIGVsZW1lbnRfcHJvcGVydGllcyBpbiBlbGVtZW50c19kaWN0Lml0ZW1zKCk6CiAgICBlbGVtZW50cy5hcHBlbmQoCiAgICAgICAgRWxlbWVudCgKICAgICAgICAgICAgYXRvbWljX251bWJlcj1lbGVtZW50X3Byb3BlcnRpZXNbImF0b21pYyBudW1iZXIiXSwKICAgICAgICAgICAgbmFtZT1lbGVtZW50X3Byb3BlcnRpZXNbIm5hbWUiXSwKICAgICAgICAgICAgc3ltYm9sPWVsZW1lbnRfcHJvcGVydGllc1sic3ltYm9sIl0sCiAgICAgICAgICAgIG1hc3M9ZWxlbWVudF9wcm9wZXJ0aWVzWyJtYXNzIl0sCiAgICAgICAgKQogICAgKQoKc3ltYm9sX2RpY3QgPSB7ZWxlbWVudC5zeW1ib2w6IGVsZW1lbnQgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHN9Cm5hbWVfZGljdCA9IHtlbGVtZW50Lm5hbWU6IGVsZW1lbnQgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHN9CmF0b21pY19kaWN0ID0ge2VsZW1lbnQuYXRvbWljX251bWJlcjogZWxlbWVudCBmb3IgZWxlbWVudCBpbiBlbGVtZW50c30KbWFzc19kaWN0ID0ge30KZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6CiAgICByb3VuZGVkX21hc3MgPSByb3VuZChlbGVtZW50Lm1hc3MsIDEpCiAgICBpZiByb3VuZGVkX21hc3MgaW4gbWFzc19kaWN0LmtleXMoKToKICAgICAgICBtYXNzX2RpY3Rbcm91bmRlZF9tYXNzXS5hcHBlbmQoZWxlbWVudCkKICAgIGVsc2U6CiAgICAgICAgbWFzc19kaWN0W3JvdW5kZWRfbWFzc10gPSBbZWxlbWVudF0KCgpjbGFzcyBFbGVtZW50cyhuYW1lZHR1cGxlKCJFbGVtZW50cyIsICJzeW1ib2xzX2RpY3QiKSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgc3ltYm9sc19kaWN0KToKICAgICAgICBzdXBlcihFbGVtZW50cywgc2VsZikuX19pbml0X18oKQogICAgICAgIGZvciBrZXksIHZhbHVlIGluIHN5bWJvbHNfZGljdC5pdGVtcygpOgogICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGtleSwgdmFsdWUpCgogICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGl0ZW0pOgogICAgICAgIGlmIGl0ZW0gbm90IGluIHNlbGYuc3ltYm9sc19kaWN0Ogo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKAogICAgICAgICAgICAgICAgZidFbGVtZW50IHdpdGggc3ltYm9sICJ7aXRlbX0iIGRvZXMgbm90IGV4aXN0JwogICAgICAgICAgICApCgo8fGZpbV9lbmR8Pg=="]
["99b1a51efe400cbc9ecdfa02e9d39ccb90e62963-1","99b1a51efe400cbc9ecdfa02e9d39ccb90e62963","PHxmaW1fcHJlZml4fD4KIyB0eXBlOiBpZ25vcmUKIyBmbGFrZTg6IG5vcWEKIyB0by1kbzogcmVmYWN0b3IgaW50byB0cmFpbl9tb2RlbC5weQojIS91c3IvYmluL2VudiBweXRob24zCiMgLSotIGNvZGluZzogdXRmLTggLSotCiIiIgpDcmVhdGVkIG9uIE1vbiBTZXAgMjcgMjI6MDA6NTYgMjAyMQoKQGF1dGhvcjogcmlkdmFuegoiIiIKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgc2VhYm9ybiBhcyBzbnMKZnJvbSBza2xlYXJuLmVuc2VtYmxlIGltcG9ydCBSYW5kb21Gb3Jlc3RDbGFzc2lmaWVyCmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0ICgKICAgIHRyYWluX3Rlc3Rfc3BsaXQsCiAgICBjcm9zc192YWxfc2NvcmUsCiAgICBLRm9sZCwKICAgIFN0cmF0aWZpZWRLRm9sZCwKKQpmcm9tIHNrbGVhcm4uaW5zcGVjdGlvbiBpbXBvcnQgcGVybXV0YXRpb25faW1wb3J0YW5jZQoKaW1wb3J0IHRpbWUKaW1wb3J0IHBpY2tsZQoKaW1wb3J0IGxpZ2h0Z2JtIGFzIGxnYgoKIyBpbXBvcnQgb3B0dW5hCiMgaW1wb3J0IG9wdHVuYS5pbnRlZ3JhdGlvbi5saWdodGdibSBhcyBvcHR1bmFfbGdiCgppbXBvcnQgc2hhcAoKaW1wb3J0IG5ldHdvcmt4IGFzIG54CmZyb20gc2tsZWFybi5waXBlbGluZSBpbXBvcnQgUGlwZWxpbmUKZnJvbSBza2xlYXJuLm1vZGVsX3NlbGVjdGlvbiBpbXBvcnQgY3Jvc3NfdmFsX3Njb3JlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCBtZWFuX3NxdWFyZWRfZXJyb3IsIG1lYW5fYWJzb2x1dGVfZXJyb3IKaW1wb3J0IHBpY2tsZQpmcm9tIGl0ZXJ0b29scyBpbXBvcnQgcGVybXV0YXRpb25zCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCgojIGRmID0gcGQucmVhZF9jc3YoIi8uLi8uLi9zcG90aWZBSS9kYXRhL3Jhdy9EYXRhYmFzZV90b19jYWxjdWxhdGVfcG9wdWxhcml0eS5jc3YiKQoKZGZfZnVsbCA9IHBkLnJlYWRfY3N2KAogICAgIi9ob21lL3JpZHZhbnovcmVwb3NpdG9yaWVzL3Nwb3RpZkFJL3Nwb3RpZkFJL2RhdGEvcmF3L0RhdGFiYXNlX3RvX2NhbGN1bGF0ZV9wb3B1bGFyaXR5LmNzdiIKKQpkZl9maW5hbCA9IHBkLnJlYWRfY3N2KAogICAgIi9ob21lL3JpZHZhbnovcmVwb3NpdG9yaWVzL3Nwb3RpZkFJL3Nwb3RpZkFJL2RhdGEvcmF3L0ZpbmFsIGRhdGFiYXNlLmNzdiIKKQoKdmFyaWFibGVzID0gWwogICAgImRhbmNlYWJpbGl0eSIsCiAgICAiZW5lcmd5IiwKICAgICJrZXkiLAogICAgImxvdWRuZXNzIiwKICAgICJtb2RlIiwKICAgICJzcGVlY2hpbmVzcyIsCiAgICAiYWNvdXN0aWNuZXNzIiwKICAgICJpbnN0cnVtZW50YWxuZXNzIiwKICAgICJsaXZlbmVzcyIsCiAgICAidmFsZW5jZSIsCiAgICAidGVtcG8iLAogICAgImR1cmF0aW9uX21zIiwKICAgICJleHBsaWNpdCIsCiAgICAiZm9sbG93ZXJzIiwKXQoKIwojCiMKCmRmX2ZpbmFsID0gZGZfZmluYWwubG9jW2RmX2ZpbmFsWyJDb3VudHJ5Il0gPT0gIkdsb2JhbCJdCmRmX2Z1bGwgPSBkZl9mdWxsLmxvY1tkZl9mdWxsWyJjb3VudHJ5Il0gPT0gIkdsb2JhbCJdCgpkZl9maW5hbCA9ICgKICAgIGRmX2ZpbmFsLnJlbmFtZShjb2x1bW5zPXN0ci5sb3dlcikKICAgIC5yZW5hbWUoCiAgICAgICAgY29sdW1ucz17CiAgICAgICAgICAgICJhcnRpc3RfZm9sbG93ZXJzIjogImZvbGxvd2VycyIsCiAgICAgICAgICAgICJwb3B1X21heCI6ICJtYXhfcG9zaXRpb24iLAogICAgICAgICAgICAiYWNvdXN0aWNzIjogImFjb3VzdGljbmVzcyIsCiAgICAgICAgICAgICJsaXZlbGluZXNzIjogImxpdmVuZXNzIiwKICAgICAgICB9CiAgICApW1sidXJpIiwgKnZhcmlhYmxlcywgInRpdGxlIiwgImFydGlzdCIsICJwb3B1bGFyaXR5Il1dCiAgICAuZHJvcG5hKCkKICAgIC5kcm9wX2R1cGxpY2F0ZXMoInVyaSIpCiAgICAuc2V0X2luZGV4KCJ1cmkiKQopCgpkZl9maW5hbFt2YXJpYWJsZXNdID0gKAogICAgZGZfZmluYWxbdmFyaWFibGVzXS5hcHBseShwZC50b19udW1lcmljLCBlcnJvcnM9ImNvZXJjZSIsIGRvd25jYXN0PSJmbG9hdCIpLmRyb3BuYSgpCikKCm5fc29uZ3MgPSBsZW4oZGZfZmluYWwpCgpkZl9mdWxsID0gZGZfZnVsbFtbImRhdGUiLCAiY291bnRyeSIsICJwb3NpdGlvbiIsICJ1cmkiXV0KCmRmX2Z1bGxbImRhdGUiXSA9IHBkLnRvX2RhdGV0aW1lKGRmX2Z1bGxbImRhdGUiXSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpkZl9mdWxsLmRyb3BuYShpbnBsYWNlPVRydWUpCiMgZGZfZnVsbFsnZGF5X29mX3llYXInXSA9IGRmX2Z1bGxbJ2RhdGUnXS5hcHBseShsYW1iZGEgeDogeC50aW1ldHVwbGUoKS50bV95ZGF5KQojIHZhcmlhYmxlcyA9IHZhcmlhYmxlcyArIFsiZGF5X29mX3llYXIiXQoKPHxmaW1fZW5kfD4="]
["99b1a51efe400cbc9ecdfa02e9d39ccb90e62963-2","99b1a51efe400cbc9ecdfa02e9d39ccb90e62963",{"$cut":{"chars":19540,"head":"PHxmaW1fcHJlZml4fD4KIyB0eXBlOiBpZ25vcmUKIyBmbGFrZTg6IG5vcWEKIyB0by1kbzogcmVmYWN0b3IgaW50byB0cmFpbl9tb2RlbC5weQojIS91c3IvYmluL2VudiBweXRob24zCiMgLSotIGNvZGluZzogdXRmLTggLSotCiIiIgpDcmVhdGVkIG9uIE1vbiBTZXAgMjcgMjI6MDA6NTYgMjAyMQoKQGF1dGhvcjogcmlkdmFuegoiIiIKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgc2VhYm9ybiBhcyBzbnMKZnJvbSBza2xlYXJuLmVuc2VtYmxlIGltcG9ydCBSYW5kb21Gb3Jlc3RDbGFzc2lmaWVyCmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0ICgKICAgIHRyYWluX3Rlc3Rfc3BsaXQsCiAgICBjcm9zc192YWxfc2NvcmUsCiAgICBLRm9sZCwKICAgIFN0cmF0aWZpZWRLRm9sZCwKKQpmcm9tIHNrbGVhcm4uaW5zcGVjdGlvbiBpbXBvcnQgcGVybXV0YXRpb25faW1wb3J0YW5jZQoKaW1wb3J0IHRpbWUKaW1wb3J0IHBpY2tsZQoKaW1wb3J0IGxpZ2h0Z2JtIGFzIGxnYgoKIyBpbXBvcnQgb3B0dW5hCiMgaW1wb3J0IG9wdHVuYS5pbnRlZ3JhdGlvbi5saWdodGdibSBhcyBvcHR1bmFfbGdiCgppbXBvcnQgc2hhcAoKaW1wb3J0IG5ldHdvcmt4IGFzIG54CmZyb20gc2tsZWFybi5waXBlbGluZSBpbXBvcnQgUGlwZWxpbmUKZnJvbSBza2xlYXJuLm1vZGVsX3NlbGVjdGlvbiBpbXBvcnQgY3Jvc3NfdmFsX3Njb3JlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCBtZWFuX3NxdWFyZWRfZXJyb3IsIG1lYW5fYWJzb2x1dGVfZXJyb3IKaW1wb3J0IHBpY2tsZQpmcm9tIGl0ZXJ0b29scyBpbXBvcnQgcGVybXV0YXRpb25zCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCgojIGRmID0gcGQucmVhZF9jc3YoIi8uLi8uLi9zcG90aWZBSS9kYXRhL3Jhdy9EYXRhYmFzZV90b19jYWxjdWxhdGVfcG9wdWxhcml0eS5jc3YiKQoKZGZfZnVsbCA9IHBkLnJlYWRfY3N2KAogICAgIi9ob21lL3JpZHZhbnovcmVwb3NpdG9yaWVzL3Nwb3RpZkFJL3Nwb3RpZkFJL2RhdGEvcmF3L0RhdGFiYXNlX3RvX2NhbGN1bGF0ZV9wb3B1bGFyaXR5LmNzdiIKKQpkZl9maW5hbCA9IHBkLnJlYWRfY3N2KAogICAgIi9ob21lL3JpZHZhbnovcmVwb3NpdG9yaWVzL3Nwb3RpZkFJL3Nwb3RpZkFJL2RhdGEvcmF3L0ZpbmFsIGRhdGFiYXNlLmNzdiIKKQoKdmFyaWFibGVzID0gWwogICAgImRhbmNlYWJpbGl0eSIsCiAgICAiZW5lcmd5IiwKICAgICJrZXkiLAogICAgImxvdWRuZXNzIiwKICAgICJtb2RlIiwKICAgICJzcGVlY2hpbmVzcyIsCiAgICAiYWNvdXN0aWNuZXNzIiwKICAgICJpbnN0cnVtZW50YWxuZXNzIiwKICAgICJsaXZlbmVzcyIsCiAgICAidmFsZW5jZSIsCiAgICAidGVtcG8iLAogICAgImR1cmF0aW9uX21zIiwKICAgICJleHBsaWNpdCIsCiAgICAiZm9sbG93ZXJzIiwKXQoKIwojCiMKCmRmX2ZpbmFsID0gZGZfZmluYWwubG9jW2RmX2ZpbmFsWyJDb3VudHJ5Il0gPT0gIkdsb2JhbCJdCmRmX2Z1bGwgPSBkZl9mdWxsLmxvY1tkZl9mdWxsWyJjb3VudHJ5Il0gPT0gIkdsb2JhbCJdCgpkZl9maW5hbCA9ICgKICAgIGRmX2ZpbmFsLnJlbmFtZShjb2x1bW5zPXN0ci5sb3dlcikKICAgIC5yZW5hbWUoCiAgICAgICAgY29sdW1ucz17CiAgICAgICAgICAgICJhcnRpc3RfZm9sbG93ZXJzIjogImZvbGxvd2VycyIsCiAgICAgICAgICAgICJwb3B1X21heCI6ICJtYXhfcG9zaXRpb24iLAogICAgICAgICAgICAiYWNvdXN0aWNzIjogImFjb3VzdGljbmVzcyIsCiAgICAgICAgICAgICJsaXZlbGluZXNzIjogImxpdmVuZXNzIiwKICAgICAgICB9CiAgICApW1sidXJpIiwgKnZhcmlhYmxlcywgInRpdGxlIiwgImFydGlzdCIsICJwb3B1bGFyaXR5Il1dCiAgICAuZHJvcG5hKCkKICAgIC5kcm9wX2R1cGxpY2F0ZXMoInVyaSIpCiAgICAuc2V0X2luZGV4KCJ1cmkiKQopCgpkZl9maW5hbFt2YXJpYWJsZXNdID0gKAogICAgZGZfZmluYWxbdmFyaWFibGVzXS5hcHBseShwZC50b19udW1lcmljLCBlcnJvcnM9ImNvZXJjZSIsIGRvd25jYXN0PSJmbG9hdCIpLmRyb3BuYSgpCikKCm5fc29uZ3MgPSBsZW4oZGZfZmluYWwpCgpkZl9mdWxsID0gZGZfZnVsbFtbImRhdGUiLCAiY291bnRyeSIsICJwb3NpdGlvbiIsICJ1cmkiXV0KCmRmX2Z1bGxbImRhdGUiXSA9IHBkLnRvX2RhdGV0aW1lKGRmX2Z1bGxbImRhdGUiXSkKZGZfZnVsbC5kcm9wbmEoaW5wbGFjZT1UcnVlKQojIGRmX2Z1bGxbJ2RheV9vZl95ZWFyJ10gPSBkZl9mdWxsWydkYXRlJ10uYXBwbHkobGFtYmRhIHg6IHgudGltZXR1cGxlKCkudG1feWRheSkKIyB2YXJpYWJsZXMgPSB2YXJpYWJsZXMgKyBbImRheV9vZl95ZWFyIl0KCiMgZGZfZnVsbFsic2NvcmUiXSA9ICBucC5jZWlsKCgyMDEgLSBkZl9mdWxsWyJwb3NpdGlvbiJdKSoqMC41KQpkZl9mdWxsWyJzY29yZSJdID0gbnAuZmxvb3IoMTUgKiAoMSAtIChkZl9mdWxsWyJwb3NpdGlvbiJdIC8gMjAwKSAqKiAwLjUpKQoKZGZfZnVsbCA9IGRmX2Z1bGwuc2V0X2luZGV4KCJ1cmkiKS5zb3J0X3ZhbHVlcygiZGF0ZSIsIGFzY2VuZGluZz1UcnVlKQoKIyBkZl9mdWxsWyJzY29yZSJdID0gICgyMDEgLSBkZl9mdWxsWyJwb3NpdGlvbiJdKQoKIyBkZl9maW5hbCA9IGRmX2ZpbmFsLmpvaW4obnAubG9nKGRmX2Z1bGxbInNjb3JlIl0uZ3JvdXBieSgidXJpIikuc3VtKCkpKQoKZGYgPSBkZl9maW5hbC5qb2luKGRmX2Z1bGwsIGhvdz0iaW5uZXIiKSAgIyAsIGxzdWZmaXg9J19jdXN0b20nLCByc3VmZml4PScnKQoKZGYgPSBkZi5zb3J0X3ZhbHVlcyhbImRhdGUiLCAiY291bnRyeSJdLCBhc2NlbmRpbmc9VHJ1ZSkKIyBkZiA9IGRmLnJlc2V0X2luZGV4KCkuc2V0X2luZGV4KFsiaWR4Il0pCgojIGRmX2ZpbmFsLnNvcnRfdmFsdWVzKCJzY29yZSIpLnBsb3QoIHkgPSJzY29yZSIpCiMgZGZfZnVsbFsic2NvcmUiXS5taW4oKQojIGRmX2Z1bGxbInNjb3JlIl0uaGlzdCgpCiMgJSUKCgojJSUKCiMgZGZfZmluYWwgPSBkZl9maW5hbC5zb3J0X3ZhbHVlcygic2NvcmUiLCBhc2NlbmRpbmc9VHJ1ZSkKIyBYID0gZGZfZmluYWxb"}}]
["99b1a51efe400cbc9ecdfa02e9d39ccb90e62963-3","99b1a51efe400cbc9ecdfa02e9d39ccb90e62963",{"$cut":{"chars":19540,"head":"PHxmaW1fcHJlZml4fD4KIyB0eXBlOiBpZ25vcmUKIyBmbGFrZTg6IG5vcWEKIyB0by1kbzogcmVmYWN0b3IgaW50byB0cmFpbl9tb2RlbC5weQojIS91c3IvYmluL2VudiBweXRob24zCiMgLSotIGNvZGluZzogdXRmLTggLSotCiIiIgpDcmVhdGVkIG9uIE1vbiBTZXAgMjcgMjI6MDA6NTYgMjAyMQoKQGF1dGhvcjogcmlkdmFuegoiIiIKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgc2VhYm9ybiBhcyBzbnMKZnJvbSBza2xlYXJuLmVuc2VtYmxlIGltcG9ydCBSYW5kb21Gb3Jlc3RDbGFzc2lmaWVyCmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0ICgKICAgIHRyYWluX3Rlc3Rfc3BsaXQsCiAgICBjcm9zc192YWxfc2NvcmUsCiAgICBLRm9sZCwKICAgIFN0cmF0aWZpZWRLRm9sZCwKKQpmcm9tIHNrbGVhcm4uaW5zcGVjdGlvbiBpbXBvcnQgcGVybXV0YXRpb25faW1wb3J0YW5jZQoKaW1wb3J0IHRpbWUKaW1wb3J0IHBpY2tsZQoKaW1wb3J0IGxpZ2h0Z2JtIGFzIGxnYgoKIyBpbXBvcnQgb3B0dW5hCiMgaW1wb3J0IG9wdHVuYS5pbnRlZ3JhdGlvbi5saWdodGdibSBhcyBvcHR1bmFfbGdiCgppbXBvcnQgc2hhcAoKaW1wb3J0IG5ldHdvcmt4IGFzIG54CmZyb20gc2tsZWFybi5waXBlbGluZSBpbXBvcnQgUGlwZWxpbmUKZnJvbSBza2xlYXJuLm1vZGVsX3NlbGVjdGlvbiBpbXBvcnQgY3Jvc3NfdmFsX3Njb3JlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCBtZWFuX3NxdWFyZWRfZXJyb3IsIG1lYW5fYWJzb2x1dGVfZXJyb3IKaW1wb3J0IHBpY2tsZQpmcm9tIGl0ZXJ0b29scyBpbXBvcnQgcGVybXV0YXRpb25zCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCgojIGRmID0gcGQucmVhZF9jc3YoIi8uLi8uLi9zcG90aWZBSS9kYXRhL3Jhdy9EYXRhYmFzZV90b19jYWxjdWxhdGVfcG9wdWxhcml0eS5jc3YiKQoKZGZfZnVsbCA9IHBkLnJlYWRfY3N2KAogICAgIi9ob21lL3JpZHZhbnovcmVwb3NpdG9yaWVzL3Nwb3RpZkFJL3Nwb3RpZkFJL2RhdGEvcmF3L0RhdGFiYXNlX3RvX2NhbGN1bGF0ZV9wb3B1bGFyaXR5LmNzdiIKKQpkZl9maW5hbCA9IHBkLnJlYWRfY3N2KAogICAgIi9ob21lL3JpZHZhbnovcmVwb3NpdG9yaWVzL3Nwb3RpZkFJL3Nwb3RpZkFJL2RhdGEvcmF3L0ZpbmFsIGRhdGFiYXNlLmNzdiIKKQoKdmFyaWFibGVzID0gWwogICAgImRhbmNlYWJpbGl0eSIsCiAgICAiZW5lcmd5IiwKICAgICJrZXkiLAogICAgImxvdWRuZXNzIiwKICAgICJtb2RlIiwKICAgICJzcGVlY2hpbmVzcyIsCiAgICAiYWNvdXN0aWNuZXNzIiwKICAgICJpbnN0cnVtZW50YWxuZXNzIiwKICAgICJsaXZlbmVzcyIsCiAgICAidmFsZW5jZSIsCiAgICAidGVtcG8iLAogICAgImR1cmF0aW9uX21zIiwKICAgICJleHBsaWNpdCIsCiAgICAiZm9sbG93ZXJzIiwKXQoKIwojCiMKCmRmX2ZpbmFsID0gZGZfZmluYWwubG9jW2RmX2ZpbmFsWyJDb3VudHJ5Il0gPT0gIkdsb2JhbCJdCmRmX2Z1bGwgPSBkZl9mdWxsLmxvY1tkZl9mdWxsWyJjb3VudHJ5Il0gPT0gIkdsb2JhbCJdCgpkZl9maW5hbCA9ICgKICAgIGRmX2ZpbmFsLnJlbmFtZShjb2x1bW5zPXN0ci5sb3dlcikKICAgIC5yZW5hbWUoCiAgICAgICAgY29sdW1ucz17CiAgICAgICAgICAgICJhcnRpc3RfZm9sbG93ZXJzIjogImZvbGxvd2VycyIsCiAgICAgICAgICAgICJwb3B1X21heCI6ICJtYXhfcG9zaXRpb24iLAogICAgICAgICAgICAiYWNvdXN0aWNzIjogImFjb3VzdGljbmVzcyIsCiAgICAgICAgICAgICJsaXZlbGluZXNzIjogImxpdmVuZXNzIiwKICAgICAgICB9CiAgICApW1sidXJpIiwgKnZhcmlhYmxlcywgInRpdGxlIiwgImFydGlzdCIsICJwb3B1bGFyaXR5Il1dCiAgICAuZHJvcG5hKCkKICAgIC5kcm9wX2R1cGxpY2F0ZXMoInVyaSIpCiAgICAuc2V0X2luZGV4KCJ1cmkiKQopCgpkZl9maW5hbFt2YXJpYWJsZXNdID0gKAogICAgZGZfZmluYWxbdmFyaWFibGVzXS5hcHBseShwZC50b19udW1lcmljLCBlcnJvcnM9ImNvZXJjZSIsIGRvd25jYXN0PSJmbG9hdCIpLmRyb3BuYSgpCikKCm5fc29uZ3MgPSBsZW4oZGZfZmluYWwpCgpkZl9mdWxsID0gZGZfZnVsbFtbImRhdGUiLCAiY291bnRyeSIsICJwb3NpdGlvbiIsICJ1cmkiXV0KCmRmX2Z1bGxbImRhdGUiXSA9IHBkLnRvX2RhdGV0aW1lKGRmX2Z1bGxbImRhdGUiXSkKZGZfZnVsbC5kcm9wbmEoaW5wbGFjZT1UcnVlKQojIGRmX2Z1bGxbJ2RheV9vZl95ZWFyJ10gPSBkZl9mdWxsWydkYXRlJ10uYXBwbHkobGFtYmRhIHg6IHgudGltZXR1cGxlKCkudG1feWRheSkKIyB2YXJpYWJsZXMgPSB2YXJpYWJsZXMgKyBbImRheV9vZl95ZWFyIl0KCiMgZGZfZnVsbFsic2NvcmUiXSA9ICBucC5jZWlsKCgyMDEgLSBkZl9mdWxsWyJwb3NpdGlvbiJdKSoqMC41KQpkZl9mdWxsWyJzY29yZSJdID0gbnAuZmxvb3IoMTUgKiAoMSAtIChkZl9mdWxsWyJwb3NpdGlvbiJdIC8gMjAwKSAqKiAwLjUpKQoKZGZfZnVsbCA9IGRmX2Z1bGwuc2V0X2luZGV4KCJ1cmkiKS5zb3J0X3ZhbHVlcygiZGF0ZSIsIGFzY2VuZGluZz1UcnVlKQoKIyBkZl9mdWxsWyJzY29yZSJdID0gICgyMDEgLSBkZl9mdWxsWyJwb3NpdGlvbiJdKQoKIyBkZl9maW5hbCA9IGRmX2ZpbmFsLmpvaW4obnAubG9nKGRmX2Z1bGxbInNjb3JlIl0uZ3JvdXBieSgidXJpIikuc3VtKCkpKQoKZGYgPSBkZl9maW5hbC5qb2luKGRmX2Z1bGwsIGhvdz0iaW5uZXIiKSAgIyAsIGxzdWZmaXg9J19jdXN0b20nLCByc3VmZml4PScnKQoKZGYgPSBkZi5zb3J0X3ZhbHVlcyhbImRhdGUiLCAiY291bnRyeSJdLCBhc2NlbmRpbmc9VHJ1ZSkKIyBkZiA9IGRmLnJlc2V0X2luZGV4KCkuc2V0X2luZGV4KFsiaWR4Il0pCgojIGRmX2ZpbmFsLnNvcnRfdmFsdWVzKCJzY29yZSIpLnBsb3QoIHkgPSJzY29yZSIpCiMgZGZfZnVsbFsic2NvcmUiXS5taW4oKQojIGRmX2Z1bGxbInNjb3JlIl0uaGlzdCgpCiMgJSUKCgojJSUKCiMgZGZfZmluYWwgPSBkZl9maW5hbC5zb3J0X3ZhbHVlcygic2NvcmUiLCBhc2NlbmRpbmc9VHJ1ZSkKIyBYID0gZGZfZmluYWxb"}}]
["99b1a51efe400cbc9ecdfa02e9d39ccb90e62963-4","99b1a51efe400cbc9ecdfa02e9d39ccb90e62963",{"$cut":{"chars":16536,"head":"PHxmaW1fcHJlZml4fD4KIyB0eXBlOiBpZ25vcmUKIyBmbGFrZTg6IG5vcWEKIyB0by1kbzogcmVmYWN0b3IgaW50byB0cmFpbl9tb2RlbC5weQojIS91c3IvYmluL2VudiBweXRob24zCiMgLSotIGNvZGluZzogdXRmLTggLSotCiIiIgpDcmVhdGVkIG9uIE1vbiBTZXAgMjcgMjI6MDA6NTYgMjAyMQoKQGF1dGhvcjogcmlkdmFuegoiIiIKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgc2VhYm9ybiBhcyBzbnMKZnJvbSBza2xlYXJuLmVuc2VtYmxlIGltcG9ydCBSYW5kb21Gb3Jlc3RDbGFzc2lmaWVyCmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0ICgKICAgIHRyYWluX3Rlc3Rfc3BsaXQsCiAgICBjcm9zc192YWxfc2NvcmUsCiAgICBLRm9sZCwKICAgIFN0cmF0aWZpZWRLRm9sZCwKKQpmcm9tIHNrbGVhcm4uaW5zcGVjdGlvbiBpbXBvcnQgcGVybXV0YXRpb25faW1wb3J0YW5jZQoKaW1wb3J0IHRpbWUKaW1wb3J0IHBpY2tsZQoKaW1wb3J0IGxpZ2h0Z2JtIGFzIGxnYgoKIyBpbXBvcnQgb3B0dW5hCiMgaW1wb3J0IG9wdHVuYS5pbnRlZ3JhdGlvbi5saWdodGdibSBhcyBvcHR1bmFfbGdiCgppbXBvcnQgc2hhcAoKaW1wb3J0IG5ldHdvcmt4IGFzIG54CmZyb20gc2tsZWFybi5waXBlbGluZSBpbXBvcnQgUGlwZWxpbmUKZnJvbSBza2xlYXJuLm1vZGVsX3NlbGVjdGlvbiBpbXBvcnQgY3Jvc3NfdmFsX3Njb3JlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCBtZWFuX3NxdWFyZWRfZXJyb3IsIG1lYW5fYWJzb2x1dGVfZXJyb3IKaW1wb3J0IHBpY2tsZQpmcm9tIGl0ZXJ0b29scyBpbXBvcnQgcGVybXV0YXRpb25zCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCgojIGRmID0gcGQucmVhZF9jc3YoIi8uLi8uLi9zcG90aWZBSS9kYXRhL3Jhdy9EYXRhYmFzZV90b19jYWxjdWxhdGVfcG9wdWxhcml0eS5jc3YiKQoKZGZfZnVsbCA9IHBkLnJlYWRfY3N2KAogICAgIi9ob21lL3JpZHZhbnovcmVwb3NpdG9yaWVzL3Nwb3RpZkFJL3Nwb3RpZkFJL2RhdGEvcmF3L0RhdGFiYXNlX3RvX2NhbGN1bGF0ZV9wb3B1bGFyaXR5LmNzdiIKKQpkZl9maW5hbCA9IHBkLnJlYWRfY3N2KAogICAgIi9ob21lL3JpZHZhbnovcmVwb3NpdG9yaWVzL3Nwb3RpZkFJL3Nwb3RpZkFJL2RhdGEvcmF3L0ZpbmFsIGRhdGFiYXNlLmNzdiIKKQoKdmFyaWFibGVzID0gWwogICAgImRhbmNlYWJpbGl0eSIsCiAgICAiZW5lcmd5IiwKICAgICJrZXkiLAogICAgImxvdWRuZXNzIiwKICAgICJtb2RlIiwKICAgICJzcGVlY2hpbmVzcyIsCiAgICAiYWNvdXN0aWNuZXNzIiwKICAgICJpbnN0cnVtZW50YWxuZXNzIiwKICAgICJsaXZlbmVzcyIsCiAgICAidmFsZW5jZSIsCiAgICAidGVtcG8iLAogICAgImR1cmF0aW9uX21zIiwKICAgICJleHBsaWNpdCIsCiAgICAiZm9sbG93ZXJzIiwKXQoKIwojCiMKCmRmX2ZpbmFsID0gZGZfZmluYWwubG9jW2RmX2ZpbmFsWyJDb3VudHJ5Il0gPT0gIkdsb2JhbCJdCmRmX2Z1bGwgPSBkZl9mdWxsLmxvY1tkZl9mdWxsWyJjb3VudHJ5Il0gPT0gIkdsb2JhbCJdCgpkZl9maW5hbCA9ICgKICAgIGRmX2ZpbmFsLnJlbmFtZShjb2x1bW5zPXN0ci5sb3dlcikKICAgIC5yZW5hbWUoCiAgICAgICAgY29sdW1ucz17CiAgICAgICAgICAgICJhcnRpc3RfZm9sbG93ZXJzIjogImZvbGxvd2VycyIsCiAgICAgICAgICAgICJwb3B1X21heCI6ICJtYXhfcG9zaXRpb24iLAogICAgICAgICAgICAiYWNvdXN0aWNzIjogImFjb3VzdGljbmVzcyIsCiAgICAgICAgICAgICJsaXZlbGluZXNzIjogImxpdmVuZXNzIiwKICAgICAgICB9CiAgICApW1sidXJpIiwgKnZhcmlhYmxlcywgInRpdGxlIiwgImFydGlzdCIsICJwb3B1bGFyaXR5Il1dCiAgICAuZHJvcG5hKCkKICAgIC5kcm9wX2R1cGxpY2F0ZXMoInVyaSIpCiAgICAuc2V0X2luZGV4KCJ1cmkiKQopCgpkZl9maW5hbFt2YXJpYWJsZXNdID0gKAogICAgZGZfZmluYWxbdmFyaWFibGVzXS5hcHBseShwZC50b19udW1lcmljLCBlcnJvcnM9ImNvZXJjZSIsIGRvd25jYXN0PSJmbG9hdCIpLmRyb3BuYSgpCikKCm5fc29uZ3MgPSBsZW4oZGZfZmluYWwpCgpkZl9mdWxsID0gZGZfZnVsbFtbImRhdGUiLCAiY291bnRyeSIsICJwb3NpdGlvbiIsICJ1cmkiXV0KCmRmX2Z1bGxbImRhdGUiXSA9IHBkLnRvX2RhdGV0aW1lKGRmX2Z1bGxbImRhdGUiXSkKZGZfZnVsbC5kcm9wbmEoaW5wbGFjZT1UcnVlKQojIGRmX2Z1bGxbJ2RheV9vZl95ZWFyJ10gPSBkZl9mdWxsWydkYXRlJ10uYXBwbHkobGFtYmRhIHg6IHgudGltZXR1cGxlKCkudG1feWRheSkKIyB2YXJpYWJsZXMgPSB2YXJpYWJsZXMgKyBbImRheV9vZl95ZWFyIl0KCiMgZGZfZnVsbFsic2NvcmUiXSA9ICBucC5jZWlsKCgyMDEgLSBkZl9mdWxsWyJwb3NpdGlvbiJdKSoqMC41KQpkZl9mdWxsWyJzY29yZSJdID0gbnAuZmxvb3IoMTUgKiAoMSAtIChkZl9mdWxsWyJwb3NpdGlvbiJdIC8gMjAwKSAqKiAwLjUpKQoKZGZfZnVsbCA9IGRmX2Z1bGwuc2V0X2luZGV4KCJ1cmkiKS5zb3J0X3ZhbHVlcygiZGF0ZSIsIGFzY2VuZGluZz1UcnVlKQoKIyBkZl9mdWxsWyJzY29yZSJdID0gICgyMDEgLSBkZl9mdWxsWyJwb3NpdGlvbiJdKQoKIyBkZl9maW5hbCA9IGRmX2ZpbmFsLmpvaW4obnAubG9nKGRmX2Z1bGxbInNjb3JlIl0uZ3JvdXBieSgidXJpIikuc3VtKCkpKQoKZGYgPSBkZl9maW5hbC5qb2luKGRmX2Z1bGwsIGhvdz0iaW5uZXIiKSAgIyAsIGxzdWZmaXg9J19jdXN0b20nLCByc3VmZml4PScnKQoKZGYgPSBkZi5zb3J0X3ZhbHVlcyhbImRhdGUiLCAiY291bnRyeSJdLCBhc2NlbmRpbmc9VHJ1ZSkKIyBkZiA9IGRmLnJlc2V0X2luZGV4KCkuc2V0X2luZGV4KFsiaWR4Il0pCgojIGRmX2ZpbmFsLnNvcnRfdmFsdWVzKCJzY29yZSIpLnBsb3QoIHkgPSJzY29yZSIpCiMgZGZfZnVsbFsic2NvcmUiXS5taW4oKQojIGRmX2Z1bGxbInNjb3JlIl0uaGlzdCgpCiMgJSUKCgojJSUKCiMgZGZfZmluYWwgPSBkZl9maW5hbC5zb3J0X3ZhbHVlcygic2NvcmUiLCBhc2NlbmRpbmc9VHJ1ZSkKIyBYID0gZGZfZmluYWxb"}}]
["99b1a51efe400cbc9ecdfa02e9d39ccb90e62963-5","99b1a51efe400cbc9ecdfa02e9d39ccb90e62963",{"$cut":{"chars":19540,"head":"PHxmaW1fcHJlZml4fD4KIyB0eXBlOiBpZ25vcmUKIyBmbGFrZTg6IG5vcWEKIyB0by1kbzogcmVmYWN0b3IgaW50byB0cmFpbl9tb2RlbC5weQojIS91c3IvYmluL2VudiBweXRob24zCiMgLSotIGNvZGluZzogdXRmLTggLSotCiIiIgpDcmVhdGVkIG9uIE1vbiBTZXAgMjcgMjI6MDA6NTYgMjAyMQoKQGF1dGhvcjogcmlkdmFuegoiIiIKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgc2VhYm9ybiBhcyBzbnMKZnJvbSBza2xlYXJuLmVuc2VtYmxlIGltcG9ydCBSYW5kb21Gb3Jlc3RDbGFzc2lmaWVyCmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0ICgKICAgIHRyYWluX3Rlc3Rfc3BsaXQsCiAgICBjcm9zc192YWxfc2NvcmUsCiAgICBLRm9sZCwKICAgIFN0cmF0aWZpZWRLRm9sZCwKKQpmcm9tIHNrbGVhcm4uaW5zcGVjdGlvbiBpbXBvcnQgcGVybXV0YXRpb25faW1wb3J0YW5jZQoKaW1wb3J0IHRpbWUKaW1wb3J0IHBpY2tsZQoKaW1wb3J0IGxpZ2h0Z2JtIGFzIGxnYgoKIyBpbXBvcnQgb3B0dW5hCiMgaW1wb3J0IG9wdHVuYS5pbnRlZ3JhdGlvbi5saWdodGdibSBhcyBvcHR1bmFfbGdiCgppbXBvcnQgc2hhcAoKaW1wb3J0IG5ldHdvcmt4IGFzIG54CmZyb20gc2tsZWFybi5waXBlbGluZSBpbXBvcnQgUGlwZWxpbmUKZnJvbSBza2xlYXJuLm1vZGVsX3NlbGVjdGlvbiBpbXBvcnQgY3Jvc3NfdmFsX3Njb3JlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCBtZWFuX3NxdWFyZWRfZXJyb3IsIG1lYW5fYWJzb2x1dGVfZXJyb3IKaW1wb3J0IHBpY2tsZQpmcm9tIGl0ZXJ0b29scyBpbXBvcnQgcGVybXV0YXRpb25zCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCgojIGRmID0gcGQucmVhZF9jc3YoIi8uLi8uLi9zcG90aWZBSS9kYXRhL3Jhdy9EYXRhYmFzZV90b19jYWxjdWxhdGVfcG9wdWxhcml0eS5jc3YiKQoKZGZfZnVsbCA9IHBkLnJlYWRfY3N2KAogICAgIi9ob21lL3JpZHZhbnovcmVwb3NpdG9yaWVzL3Nwb3RpZkFJL3Nwb3RpZkFJL2RhdGEvcmF3L0RhdGFiYXNlX3RvX2NhbGN1bGF0ZV9wb3B1bGFyaXR5LmNzdiIKKQpkZl9maW5hbCA9IHBkLnJlYWRfY3N2KAogICAgIi9ob21lL3JpZHZhbnovcmVwb3NpdG9yaWVzL3Nwb3RpZkFJL3Nwb3RpZkFJL2RhdGEvcmF3L0ZpbmFsIGRhdGFiYXNlLmNzdiIKKQoKdmFyaWFibGVzID0gWwogICAgImRhbmNlYWJpbGl0eSIsCiAgICAiZW5lcmd5IiwKICAgICJrZXkiLAogICAgImxvdWRuZXNzIiwKICAgICJtb2RlIiwKICAgICJzcGVlY2hpbmVzcyIsCiAgICAiYWNvdXN0aWNuZXNzIiwKICAgICJpbnN0cnVtZW50YWxuZXNzIiwKICAgICJsaXZlbmVzcyIsCiAgICAidmFsZW5jZSIsCiAgICAidGVtcG8iLAogICAgImR1cmF0aW9uX21zIiwKICAgICJleHBsaWNpdCIsCiAgICAiZm9sbG93ZXJzIiwKXQoKIwojCiMKCmRmX2ZpbmFsID0gZGZfZmluYWwubG9jW2RmX2ZpbmFsWyJDb3VudHJ5Il0gPT0gIkdsb2JhbCJdCmRmX2Z1bGwgPSBkZl9mdWxsLmxvY1tkZl9mdWxsWyJjb3VudHJ5Il0gPT0gIkdsb2JhbCJdCgpkZl9maW5hbCA9ICgKICAgIGRmX2ZpbmFsLnJlbmFtZShjb2x1bW5zPXN0ci5sb3dlcikKICAgIC5yZW5hbWUoCiAgICAgICAgY29sdW1ucz17CiAgICAgICAgICAgICJhcnRpc3RfZm9sbG93ZXJzIjogImZvbGxvd2VycyIsCiAgICAgICAgICAgICJwb3B1X21heCI6ICJtYXhfcG9zaXRpb24iLAogICAgICAgICAgICAiYWNvdXN0aWNzIjogImFjb3VzdGljbmVzcyIsCiAgICAgICAgICAgICJsaXZlbGluZXNzIjogImxpdmVuZXNzIiwKICAgICAgICB9CiAgICApW1sidXJpIiwgKnZhcmlhYmxlcywgInRpdGxlIiwgImFydGlzdCIsICJwb3B1bGFyaXR5Il1dCiAgICAuZHJvcG5hKCkKICAgIC5kcm9wX2R1cGxpY2F0ZXMoInVyaSIpCiAgICAuc2V0X2luZGV4KCJ1cmkiKQopCgpkZl9maW5hbFt2YXJpYWJsZXNdID0gKAogICAgZGZfZmluYWxbdmFyaWFibGVzXS5hcHBseShwZC50b19udW1lcmljLCBlcnJvcnM9ImNvZXJjZSIsIGRvd25jYXN0PSJmbG9hdCIpLmRyb3BuYSgpCikKCm5fc29uZ3MgPSBsZW4oZGZfZmluYWwpCgpkZl9mdWxsID0gZGZfZnVsbFtbImRhdGUiLCAiY291bnRyeSIsICJwb3NpdGlvbiIsICJ1cmkiXV0KCmRmX2Z1bGxbImRhdGUiXSA9IHBkLnRvX2RhdGV0aW1lKGRmX2Z1bGxbImRhdGUiXSkKZGZfZnVsbC5kcm9wbmEoaW5wbGFjZT1UcnVlKQojIGRmX2Z1bGxbJ2RheV9vZl95ZWFyJ10gPSBkZl9mdWxsWydkYXRlJ10uYXBwbHkobGFtYmRhIHg6IHgudGltZXR1cGxlKCkudG1feWRheSkKIyB2YXJpYWJsZXMgPSB2YXJpYWJsZXMgKyBbImRheV9vZl95ZWFyIl0KCiMgZGZfZnVsbFsic2NvcmUiXSA9ICBucC5jZWlsKCgyMDEgLSBkZl9mdWxsWyJwb3NpdGlvbiJdKSoqMC41KQpkZl9mdWxsWyJzY29yZSJdID0gbnAuZmxvb3IoMTUgKiAoMSAtIChkZl9mdWxsWyJwb3NpdGlvbiJdIC8gMjAwKSAqKiAwLjUpKQoKZGZfZnVsbCA9IGRmX2Z1bGwuc2V0X2luZGV4KCJ1cmkiKS5zb3J0X3ZhbHVlcygiZGF0ZSIsIGFzY2VuZGluZz1UcnVlKQoKIyBkZl9mdWxsWyJzY29yZSJdID0gICgyMDEgLSBkZl9mdWxsWyJwb3NpdGlvbiJdKQoKIyBkZl9maW5hbCA9IGRmX2ZpbmFsLmpvaW4obnAubG9nKGRmX2Z1bGxbInNjb3JlIl0uZ3JvdXBieSgidXJpIikuc3VtKCkpKQoKZGYgPSBkZl9maW5hbC5qb2luKGRmX2Z1bGwsIGhvdz0iaW5uZXIiKSAgIyAsIGxzdWZmaXg9J19jdXN0b20nLCByc3VmZml4PScnKQoKPHxmaW1faG9sZXw+CiMgZGZfZnVsbFsic2NvcmUiXS5taW4oKQojIGRmX2Z1bGxbInNjb3JlIl0uaGlzdCgpCiMgJSUKCgojJSUKCiMgZGZfZmluYWwgPSBkZl9maW5hbC5zb3J0X3ZhbHVlcygic2NvcmUiLCBhc2NlbmRpbmc9VHJ1ZSkKIyBYID0gZGZfZmluYWxbdmFyaWFibGVzXS5hc3R5cGUobnAuZmxvYXQzMikudmFsdWVzCiMgeSA9IGRmX2ZpbmFsWyJzY29yZSJdLnZhbHVlcy5yb3VuZCgwKQoKIyBkZiA9IGRmW2RmWyJzY29yZSJdPDMwXQpkZl90ZXN0ID0gZGZfZmluYWwuc2FtcGxlKG49MCkKZGZf"}}]
["ec42c44a4bddd1d59f0bdca66a084770612ed4ca-1","ec42c44a4bddd1d59f0bdca66a084770612ed4ca","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKaW1wb3J0IHJlcXVlc3RzCmltcG9ydCBvcwoKCmluZmx1eF91cmwgPSAnaHR0cDovLzE5Mi4xNjguMS4xMTA6ODA4NicKdW5pdF9pZCA9IG9zLnVuYW1lKClbMV0KCmN1cnJlbnRfaW5wdXRfbGlzdD1bCiJpbl9jdXJyZW50MF9pbnB1dCIsCiJpbl9jdXJyZW50Ml9pbnB1dCIsCiJpbl9jdXJyZW50MV9pbnB1dCJdCgp2b2x0YWdlX2lucHV0X2xpc3Q9WwoiaW5fdm9sdGFnZTBfaW5wdXQiLAoiaW5fdm9sdGFnZTFfaW5wdXQiLAoiaW5fdm9sdGFnZTJfaW5wdXQiXQoKcG93ZXJfaW5wdXRfbGlzdD1bCiJpbl9wb3dlcjBfaW5wdXQiLAoiaW5fcG93ZXIxX2lucHV0IiwKImluX3Bvd2VyMl9pbnB1dCJdCgoKCmRlZiByZWFkX2lucHV0KGN1cnJlbnRfbmFtZSwgZGVjaW1hdG9yLCB1bml0KToKICBjdXJyZW50X2ZkID0gb3BlbignL3N5cy9kZXZpY2VzLzMxNjAwMDAuaTJjL2kyYy0wLzAtMDA0MS9paW9fZGV2aWNlLycrY3VycmVudF9uYW1lKQogIGN1cnJlbnQgPSBmbG9hdChjdXJyZW50X2ZkLnJlYWQoKSkgLyBkZWNpbWF0b3IKICBsaW5lPSdwb3dlcl9kYXRhLGhvc3Q9Jyt1bml0X2lkKycgJyArIGN1cnJlbnRfbmFtZS5yZXBsYWNlKCdpbnB1dCcsIHVuaXQpICsgJz0nICsgc3RyKGN1cnJlbnQpCiAgY3VycmVudF9mZC5jbG9zZSgpCiAgcmV0dXJuIGxpbmUKCgoKCgp3aGlsZSBUcnVlOgogIGZvciBpbnB1dCBpbiBjdXJyZW50X2lucHV0X2xpc3Q6CiAgICBsaW5lID0gcmVhZF9pbnB1dChpbnB1dCwgMSwgJ21BbXBzJykKICAgICNwcmludChsaW5lKQogICAgdHJ5OgogICAgICByZXNwID0gcmVxdWVzdHMucG9zdChpbmZsdXhfdXJsKycvd3JpdGU/ZGI9VFgyaV9kYicsIGRhdGE9bGluZSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAjcHJpbnQocmVzcCkKPHxmaW1fZW5kfD4="]
["ec42c44a4bddd1d59f0bdca66a084770612ed4ca-2","ec42c44a4bddd1d59f0bdca66a084770612ed4ca","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKaW1wb3J0IHJlcXVlc3RzCmltcG9ydCBvcwoKCmluZmx1eF91cmwgPSAnaHR0cDovLzE5Mi4xNjguMS4xMTA6ODA4NicKdW5pdF9pZCA9IG9zLnVuYW1lKClbMV0KCmN1cnJlbnRfaW5wdXRfbGlzdD1bCiJpbl9jdXJyZW50MF9pbnB1dCIsCiJpbl9jdXJyZW50Ml9pbnB1dCIsCjx8ZmltX2hvbGV8PgoiaW5fdm9sdGFnZTFfaW5wdXQiLAoiaW5fdm9sdGFnZTJfaW5wdXQiXQoKcG93ZXJfaW5wdXRfbGlzdD1bCiJpbl9wb3dlcjBfaW5wdXQiLAoiaW5fcG93ZXIxX2lucHV0IiwKImluX3Bvd2VyMl9pbnB1dCJdCgoKCmRlZiByZWFkX2lucHV0KGN1cnJlbnRfbmFtZSwgZGVjaW1hdG9yLCB1bml0KToKICBjdXJyZW50X2ZkID0gb3BlbignL3N5cy9kZXZpY2VzLzMxNjAwMDAuaTJjL2kyYy0wLzAtMDA0MS9paW9fZGV2aWNlLycrY3VycmVudF9uYW1lKQogIGN1cnJlbnQgPSBmbG9hdChjdXJyZW50X2ZkLnJlYWQoKSkgLyBkZWNpbWF0b3IKICBsaW5lPSdwb3dlcl9kYXRhLGhvc3Q9Jyt1bml0X2lkKycgJyArIGN1cnJlbnRfbmFtZS5yZXBsYWNlKCdpbnB1dCcsIHVuaXQpICsgJz0nICsgc3RyKGN1cnJlbnQpCiAgY3VycmVudF9mZC5jbG9zZSgpCiAgcmV0dXJuIGxpbmUKCgoKCgp3aGlsZSBUcnVlOgogIGZvciBpbnB1dCBpbiBjdXJyZW50X2lucHV0X2xpc3Q6CiAgICBsaW5lID0gcmVhZF9pbnB1dChpbnB1dCwgMSwgJ21BbXBzJykKICAgICNwcmludChsaW5lKQogICAgdHJ5OgogICAgICByZXNwID0gcmVxdWVzdHMucG9zdChpbmZsdXhfdXJsKycvd3JpdGU/ZGI9VFgyaV9kYicsIGRhdGE9bGluZSkKICAgICAgI3ByaW50KHJlc3ApCiAgICBleGNlcHQ6CiAgICAgcHJpbnQoIlVuYWJsZSB0byBjb25uZWN0IikKICBmb3IgaW5wdXQgaW4gdm9sdGFnZV9pbnB1dF9saXN0OgogICAgbGluZSA9IHJlYWRfaW5wdXQoaW5wdXQsIDEwMDAsICdWb2x0cycpCiAgICAjcHJpbnQobGluZSkKICAgIHRyeToKICAgICAgcmVzcCA9IHJlcXVlc3RzLnBvc3QoaW5mbHV4X3VybCsnL3dyaXRlP2RiPVRYMmlfZGInLCBkYXRhPWxpbmUpCiAgICAgICNwcmludChyZXNwKQogICAgZXhjZXB0OgogICAgIHByaW50KCJVbmFibGUgdG8gY29ubmVjdCIpCiAgZm9yIGlucHV0IGluIHBvd2VyX2lucHV0X2xpc3Q6CiAgICBsaW5lID0gcmVhZF9pbnB1dChpbnB1dCwgMTAwMCwgJ1dhdHRzJykKICAgICNwcmludChsaW5lKQogICAgdHJ5OgogICAgICByZXNwID0gcmVxdWVzdHMucG9zdChpbmZsdXhfdXJsKycvd3JpdGU/ZGI9VFgyaV9kYicsIGRhdGE9bGluZSkKICAgICAgI3ByaW50KHJlc3ApCiAgICBleGNlcHQ6CiAgICAgcHJpbnQoIlVuYWJsZSB0byBjb25uZWN0IikKCgogIHRpbWUuc2xlZXAoLjEpCmxpbmUuY2xvc2UoKQoKPHxmaW1fc3VmZml4fD4KImluX2N1cnJlbnQxX2lucHV0Il0KCnZvbHRhZ2VfaW5wdXRfbGlzdD1bCiJpbl92b2x0YWdlMF9pbnB1dCIsCjx8ZmltX2VuZHw+"]
["8ae5f342403c9982239a6e564353ee3030c26db4-1","8ae5f342403c9982239a6e564353ee3030c26db4","PHxmaW1fcHJlZml4fD4KZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKCmZyb20gLmNhcl91dGlsIGltcG9ydCAqCmZyb20gdWRncy5ic3BsaW5lLmJzcGxpbmUgaW1wb3J0ICoKZnJvbSB1ZGdzLm1vZGVscy5mb3JjZXNfZGVmIGltcG9ydCBwYXJhbXMKZnJvbSBjYXNhZGkgaW1wb3J0ICoKCmltcG9ydCBudW1weSBhcyBucAoKCmRlZiBfZHluYW1pY3NfY2FyKHgsIHUsIHAsIG4pOgogICAgIiIidG9kbwoKICAgIDpwYXJhbSB4OiBzdGF0ZSB2YXJpYWJsZXMgWCwgWSwgdGhldGEsIFZ4LCBBY2NfeCwgRGVsdGEsIFMsIEN1bVNsYWNrQ29zdCwgQ3VtTGF0U3BlZWRDb3N0CiAgICA6cGFyYW0gdTogY29udHJvbCBpbnB1dHMgdmFyaWFibGVzIGRBY2MsIGREZWx0YSwgZFMsIHNsYWNrLCBzbGFja19jb2xsLCBzbGFja19vYnMKICAgIDpwYXJhbSBwOiBwYXJhbWV0ZXIgdmFyaWFibGVzCiAgICA6cGFyYW0gbjogbnVtYmVyIG9mIHZlaGljbGVzCiAgICA6cmV0dXJuOgogICAgIiIiCiAgICBzcGVlZF9saW1pdCA9IHBbcGFyYW1zLnBfaWR4LlNwZWVkTGltaXRdCiAgICBrQWJvdmVTcGVlZExpbWl0ID0gcFtwYXJhbXMucF9pZHgua0Fib3ZlU3BlZWRMaW1pdF0KICAgIHBMZWZ0TGFuZSA9IHBbcGFyYW1zLnBfaWR4LnBMZWZ0TGFuZV0KICAgIGxjID0gcFtwYXJhbXMucF9pZHguY2FyTGVuZ3RoXQogICAga1NsYWNrID0gcFtwYXJhbXMucF9pZHgua1NsYWNrXQogICAga0xhZyA9IHBbcGFyYW1zLnBfaWR4LmtMYWddCiAgICBwb2ludHNPID0gcGFyYW1zLm5fb3B0X3BhcmFtCiAgICBwb2ludHNOID0gcGFyYW1zLm5fYnNwbGluZV9wb2ludHMKCiAgICAjIHBvaW50cyA9IG5wLnplcm9zKChuLCBwb2ludHNOLCAyKSkKCiAgICBpZiBpc2luc3RhbmNlKHhbMF0sIGZsb2F0KToKICAgICAgICBkeCA9IG5wLnplcm9zKG4gKiBwYXJhbXMubl9zdGF0ZXMpCiAgICBlbHNlOgogICAgICAgIGR4ID0gU1guemVyb3MobiAqIHBhcmFtcy5uX3N0YXRlcywgMSkKCiAgICBmb3IgayBpbiByYW5nZShuKToKICAgICAgICB1cGRfc19pZHggPSBrICogcGFyYW1zLm5fc3RhdGVzIC0gcGFyYW1zLm5faW5wdXRzCiAgICAgICAgdXBkX2lfaWR4ID0gayAqIHBhcmFtcy5uX2lucHV0cwoKICAgICAgICBwb2ludHMgPSBnZXRQb2ludHNGcm9tUGFyYW1ldGVycyhwLCBwb2ludHNPICsgayAqIHBvaW50c04gKiAzLCBwb2ludHNOKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc3BseCwgc3BseSA9IGNhc2FkaUR5bmFtaWNCU1BMSU5FKHhbcGFyYW1zLnhfaWR4LlMgKyB1cGRfc19pZHhdLCBwb2ludHMpCiAgICAgICAgc3Bsc3gsIHNwbHN5ID0gY2FzYWRpRHluYW1pY0JTUExJTkVzaWRld2FyZHMoeFtwYXJhbXMueF9pZHguUyArIHVwZF9zX2lkeF0sIHBvaW50cykKICAgICAgICBzcGxkeCwgc3BsZHkgPSBjYXNhZGlEeW5hbWljQlNQTElORWZvcndhcmQoeFtwYXJhbXMueF9pZHguUyArIHVwZF9zX2lkeF0sIHBvaW50cykKCjx8ZmltX2VuZHw+"]
["97c26ea3c7101d351f19331abfa5d1f57e686fdc-1","97c26ea3c7101d351f19331abfa5d1f57e686fdc","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKCmZyb20gdXRpbHMgaW1wb3J0IGN0Y19kZWNvZGUKZnJvbSBzdHJpbmcgaW1wb3J0IHB1bmN0dWF0aW9uCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0LCBDb3VudGVyCgoKY2xhc3MgRGF0YUltcG9ydGVyOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGFzZXRfZGlyLCBsYWJlbHNfcGF0aCwgbWluX2xlbmd0aD00KToKICAgICAgICBzZWxmLmltZ19wYXRocywgc2VsZi5sYWJlbHMgPSBbXSwgW10KICAgICAgICB3aXRoIG9wZW4obGFiZWxzX3BhdGgsICdyJywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZmlsZToKICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmlsZToKICAgICAgICAgICAgICAgIGltZ19uYW1lLCB0ZXh0ID0gbGluZS5yc3RyaXAoJ1xuJykuc3BsaXQoJ1x0JykKICAgICAgICAgICAgICAgIGltZ19wYXRoID0gb3MucGF0aC5qb2luKGRhdGFzZXRfZGlyLCBpbWdfbmFtZSkKICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN0cmlwKCkubG93ZXIoKQoKICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZ2V0c2l6ZShpbWdfcGF0aCkgYW5kIGxlbih0ZXh0KSA+PSBtaW5fbGVuZ3RoIGFuZCBzZWxmLmlzX2NsZWFuX3RleHQodGV4dCk6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbWdfcGF0aHMuYXBwZW5kKGltZ19wYXRoKQogICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxzLmFwcGVuZCh0ZXh0KQogICAgICAgIAogICAgICAgIGFzc2VydCBsZW4oc2VsZi5pbWdfcGF0aHMpID09IGxlbihzZWxmLmxhYmVscyksICdpbWdfcGF0aHMgYW5kIGxhYmVscyBtdXN0IGhhdmUgc2FtZSBzaXplJwogICAgICAgIHNlbGYuaW1nX3BhdGhzID0gbnAuYXJyYXkoc2VsZi5pbWdfcGF0aHMpCiAgICAgICAgc2VsZi5sYWJlbHMgPSBucC5hcnJheShzZWxmLmxhYmVscykKICAgICAgICBzZWxmLnZvY2FicyA9IGRpY3QoQ291bnRlcignJy5qb2luKHNlbGYubGFiZWxzKSkubW9zdF9jb21tb24oKSkKICAgICAgICBzZWxmLnNpemUgPSBsZW4oc2VsZi5sYWJlbHMpCgoKICAgIGRlZiByZW1vdmVfcmFyZV9jaGFycyhzZWxmLCB0aHJlc2hvbGQ9MSk6CiAgICAgICAgaWYgdGhyZXNob2xkIDwgMjogcmV0dXJuIHNlbGYKICAgICAgICByYXJlX2NoYXJzLCBpZHhzX3RvX3JlbW92ZSA9IFtdLCBbXQogICAgICAgIGlzX3NhdGlzZnlfdGhyZXNob2xkID0gVHJ1ZQoKICAgICAgICAjIFZvY2FicyBuZWVkIHRvIGJlIHNvcnRlZCAoZm9yIGZhc3RlciBjaGVja2luZykKICAgICAgICBmb3IgY2hhciwgZnJlcSBpbiByZXZlcnNlZChzZWxmLnZvY2Ficy5pdGVtcygpKToKICAgICAgICAgICAgaWYgZnJlcSA8IHRocmVzaG9sZDogcmFyZV9jaGFycy5hcHBlbmQoY2hhcikKICAgICAgICAgICAgZWxzZTogYnJlYWsKCiAgICAgICAgZm9yIGlkeCwgbGFiZWwgaW4gZW51bWVyYXRlKHNlbGYubGFiZWxzKToKICAgICAgICAgICAgaWYgYW55KChjaGFyIGluIGxhYmVsKSBmb3IgY2hhciBpbiByYXJlX2NoYXJzKToKICAgICAgICAgICAgICAgIGlkeHNfdG9fcmVtb3ZlLmFwcGVuZChpZHgpCgogICAgICAgICMgUmVtb3ZlIHNlbnRlbmNlcyBjb250YWluaW5nIHJhcmUgY2hhcmFjdGVycyBhbmQgcmVjYWxjdWxhdGUgdGhlIHZvY2FiIGZyZXF1ZW5jaWVzCiAgICAgICAgaWR4c190b19yZW1vdmUgPSBucC5hcnJheShpZHhzX3RvX3JlbW92ZSkKICAgICAgICBzZWxmLmltZ19wYXRocyA9IG5wLmRlbGV0ZShzZWxmLmltZ19wYXRocywgaWR4c190b19yZW1vdmUpCiAgICAgICAgc2VsZi5sYWJlbHMgPSBucC5kZWxldGUoc2VsZi5sYWJlbHMsIGlkeHNfdG9fcmVtb3ZlKQoKICAgICAgICBhc3NlcnQgbGVuKHNlbGYuaW1nX3BhdGhzKSA9PSBsZW4oc2VsZi5sYWJlbHMpLCAnaW1nX3BhdGhzIGFuZCBsYWJlbHMgbXVzdCBoYXZlIHNhbWUgc2l6ZScKICAgICAgICBzZWxmLnZvY2FicyA9IGRpY3QoQ291bnRlcignJy5qb2luKHNlbGYubGFiZWxzKSkubW9zdF9jb21tb24oKSkKICAgICAgICBzZWxmLnNpemUgPSBsZW4oc2VsZi5sYWJlbHMpCgogICAgICAgICMgQ2hlY2sgaWYgdGhlcmUgYXJlIHN0aWxsIHJhcmUgY2hhcmFjdGVycyBhZnRlciByZW1vdmluZyBzZW50ZW5jZXMKICAgICAgICBzbWFsbGVzdF9mcmVxID0gdGhyZXNob2xkICsgMSAjIElmIHZvY2FicyBpcyBlbXB0eSwgdGhlIHNtYWxsZXN0IGZyZXF1ZW5jeSBhbHdheXMgPiB0aHJlc2hvbGQKICAgICAgICBpZiBsZW4oc2VsZi52b2NhYnMpID49IDE6IHNtYWxsZXN0X2ZyZXEgPSBsaXN0KHNlbGYudm9jYWJzLnZhbHVlcygpKVstMV0gCiAgICAgICAgcmV0dXJuIHNlbGYucmVtb3ZlX3JhcmVfY2hhcnModGhyZXNob2xkKSBpZiBzbWFsbGVzdF9mcmVxIDwgdGhyZXNob2xkIGVsc2Ugc2VsZgoKCiAgICBkZWYgaXNfY2xlYW5fdGV4dChzZWxmLCB0ZXh0KToKICAgICAgICBub3Rfbm9tX2NoYXJzID0gcidcc0EtWmEtejAtOcOhw6DhuqPDo+G6ocSD4bqv4bqx4bqz4bq14bq3w6LhuqXhuqfhuqnhuqvhuq3DqcOo4bq74bq94bq5w6rhur/hu4Hhu4Phu4Xhu4fDs8Oy4buPw7Xhu43DtOG7keG7k+G7leG7l+G7mcah4bub4bud4buf4buh4bujw63DrOG7icSp4buLw7rDueG7p8Wp4bulxrDhu6nhu6vhu63hu6/hu7HDveG7s+G7t+G7ueG7tcSRJwogICAgICAgIHBhdHRlcm4gPSByZS5jb21waWxlKGYnW3tub3Rfbm9tX2NoYXJzfXtyZS5lc2NhcGUocHVuY3R1YXRpb24pfV0nKQogICAgICAgIHJldHVybiBub3QgYm9vbChyZS5zZWFyY2gocGF0dGVybiwgdGV4dCkpCgoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiAoCiAgICAgICAgICAgIGYnU2FtcGxlcyBjb3VudCAobm90IGluY2x1ZGUgTGF0aW4gbGV0dGVycywgbnVtYmVycywgcHVuY3R1YXRpb25zKTonCiAgICAgICAgICAgIGYnXG4tIE51bWJlciBvZiBpbWFnZXMgZm91bmQ6IHtsZW4oc2VsZi5pbWdfcGF0aHMpfScKICAgICAgICAgICAgZidcbi0gTnVtYmVyIG9mIGxhYmVscyBmb3VuZDoge2xlbihzZWxmLmxhYmVscyl9JwogICAgICAgICAgICBmJ1xuLSBOdW1iZXIgb2YgdW5pcXVlIGNoYXJhY3RlcnM6IHtsZW4oc2VsZi52b2NhYnMpfScKICAgICAgICAgICAgZidcbi0gQ2hhcmFjdGVycyBwcmVzZW50OiB7c2VsZi52b2NhYnN9JwogICAgICAgICkKCgpjbGFzcyBEYXRhSGFuZGxlcjoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhc2V0OiBEYXRhSW1wb3J0ZXIsIGltZ19zaXplOiB0dXBsZSwgcGFkZGluZ19jaGFyLCBzdGFydF9jaGFyPScnLCBlbmRfY2hhcj0nJyk6CiAgICAgICAgc2VsZi5pbWdfcGF0aHMgPSBkYXRhc2V0LmltZ19wYXRocwogICAgICAgIHNlbGYubGFiZWxzID0gZGF0YXNldC5sYWJlbHMKICAgICAgICBzZWxmLnZvY2FicyA9IGRhdGFzZXQudm9jYWJzCgogICAgICAgIHNlbGYuaW1nX3NpemUgPSBpbWdfc2l6ZQogICAgICAgIHNlbGYucGFkZGluZ19jaGFyID0gcGFkZGluZ19jaGFyCiAgICAgICAgc2VsZi5zdGFydF9jaGFyID0gc3RhcnRfY2hhcgogICAgICAgIHNlbGYuZW5kX2NoYXIgPSBlbmRfY2hhcgoKICAgICAgICAjIE1hcHBpbmcgY2hhcmFjdGVycyB0byBpbnRlZ2VycwogICAgICAgIHZvY2FidWxhcnkgPSBsaXN0KHNlbGYudm9jYWJzKQogICAgICAgIGlmIHN0YXJ0X2NoYXIgIT0gJycgYW5kIGVuZF9jaGFyICE9ICcnOiB2b2NhYnVsYXJ5ICs9IFtzdGFydF9jaGFyLCBlbmRfY2hhcl0KICAgICAgICBzZWxmLmNoYXIybnVtID0gdGYua2VyYXMubGF5ZXJzLlN0cmluZ0xvb2t1cCh2b2NhYnVsYXJ5PXZvY2FidWxhcnksIG1hc2tfdG9rZW49cGFkZGluZ19jaGFyKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgICMgTWFwcGluZyBpbnRlZ2VycyBiYWNrIHRvIG9yaWdpbmFsIGNoYXJhY3RlcnMKICAgICAgICBzZWxmLm51bTJjaGFyID0gdGYua2VyYXMubGF5ZXJzLlN0cmluZ0xvb2t1cCgKICAgICAgICAgICAgdm9jYWJ1bGFyeSA9IHNlbGYuY2hhcjJudW0uZ2V0X3ZvY2FidWxhcnkoKSwgCjx8ZmltX2VuZHw+"]
["da98710623da00e8356da65d3ab96a83af63b2f5-1","da98710623da00e8356da65d3ab96a83af63b2f5","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgogICAgICAgIkluc2lkZSBZb3VyIE91dHNpZGU6IEFsbCBBYm91dCB0aGUgSHVtYW4gQm9keSAoQ2F0IGluIHRoZSBIYXQncyBMZWFybmluZyBMaWJyYXJ5KSIsCiAgICAgICAiT2gsIFRoZSBUaGluZ3MgWW91IENhbiBEbyBUaGF0IEFyZSBHb29kIGZvciBZb3U6IEFsbCBBYm91dCBTdGF5aW5nIEhlYWx0aHkgKENhdCBpbiB0aGUgSGF0J3MgTGVhcm5pbmcgTGlicmFyeSkiLAogICAgICAgIk9uIEJleW9uZCBCdWdzOiBBbGwgQWJvdXQgSW5zZWN0cyAoQ2F0IGluIHRoZSBIYXQncyBMZWFybmluZyBMaWJyYXJ5KSIsCiAgICAgICAiVGhlcmUncyBObyBQbGFjZSBMaWtlIFNwYWNlOiBBbGwgQWJvdXQgT3VyIFNvbGFyIFN5c3RlbSAoQ2F0IGluIHRoZSBIYXQncyBMZWFybmluZyBMaWJyYXJ5KSIgCiAgICAgIF0KCmN2ID0gQ291bnRWZWN0b3JpemVyKGNhdF9pbl90aGVfaGF0X2RvY3MpCgpjb3VudF92ZWN0b3IgPSBjdi5maXRfdHJhbnNmb3JtKGNhdF9pbl90aGVfaGF0X2RvY3MpCgpwcmludChjb3VudF92ZWN0b3JbMF0pIApwcmludChjdi5zdG9wX3dvcmRzKQoKZnJvbSBza2xlYXJuLmZlYXR1cmVfZXh0cmFjdGlvbi50ZXh0IGltcG9ydCBUZmlkZlRyYW5zZm9ybWVyCmZyb20gc2tsZWFybi5waXBlbGluZSBpbXBvcnQgUGlwZWxpbmUKaW1wb3J0IG51bXB5IGFzIG5wCmNvcnB1cyA9IFsndGhpcyBpcyB0aGUgZmlyc3QgZG9jdW1lbnQnLCAKICAgICd0aGlzIGRvY3VtZW50IGlzIHRoZSBzZWNvbmQgZG9jdW1lbnQnLAogICAgJ2FuZCB0aGlzIGlzIHRoZSB0aGlyZCBvbmUnLAogICAgJ2lzIHRoaXMgdGhlIGZpcnN0IGRvY3VtZW50J10KcGlwZSA9IFBpcGVsaW5lKFsoJ2NvdW50JywgQ291bnRWZWN0b3JpemVyKCkpLAogICAgICAgICAgICAgICAgICgndGZpZCcsIFRmaWRmVHJhbnNmb3JtZXIoKSldKS5maXQoY29ycHVzKSAgICAKCnByaW50KHBpcGVbJ2NvdW50J10udHJhbnNmb3JtKGNvcnB1cykudG9hcnJheSgpKQo8fGZpbV9zdWZmaXh8Pgpmcm9tIHNrbGVhcm4uZmVhdHVyZV9leHRyYWN0aW9uLnRleHQgaW1wb3J0IENvdW50VmVjdG9yaXplcgoKY2F0X2luX3RoZV9oYXRfZG9jcz1bCiAgICAgICAiT25lIENlbnQsIFR3byBDZW50cywgT2xkIENlbnQsIE5ldyBDZW50OiBBbGwgQWJvdXQgTW9uZXkgKENhdCBpbiB0aGUgSGF0J3MgTGVhcm5pbmcgTGlicmFyeSIsCjx8ZmltX2VuZHw+"]
["e745bf53688d71299951c97a8245e01a03139834-1","e745bf53688d71299951c97a8245e01a03139834","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0b3JjaApmcm9tIHRxZG0gaW1wb3J0IHRxZG0KaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdApmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHN0eWxlCmZyb20gbmlwczIwMTgubW92aWUucGFyYW1ldGVycyBpbXBvcnQgRGF0YUNvbmZpZwoKc3R5bGUudXNlKCdnZ3Bsb3QnKQoKCmRlZiBjb3JyKHkxLCB5MiwgYXhpcz0tMSwgZXBzPTFlLTgpOgogICAgeTEgPSAoeTEgLSB5MS5tZWFuKGF4aXM9YXhpcykpLyh5MS5zdGQoYXhpcz1heGlzKSArIGVwcykKICAgIHkyID0gKHkyIC0geTIubWVhbihheGlzPWF4aXMpKS8oeTIuc3RkKGF4aXM9YXhpcykgKyBlcHMpCiAgICByZXR1cm4gKHkxICogeTIpLm1lYW4oYXhpcz1heGlzKQoKPHxmaW1faG9sZXw+CiAgICAgICAgeV9oYXQgPSBbXQogICAgICAgIGZvciBpbnB1dHMsIGJlaGF2aW9yLCBleWUsIHJlc3BvbnNlcyBpbiBsb2FkZXI6CiAgICAgICAgICAgIG5ldXJvbnMgPSByZXNwb25zZXMuc2l6ZSgtMSkgCiAgICAgICAgICAgIG91dHB1dHMgPSBtb2RlbCgKICAgICAgICAgICAgICAgIGlucHV0cy5jdWRhKCksIAogICAgICAgICAgICAgICAgcmVhZG91dF9rZXk9cmVhZG91dF9rZXksIAogICAgICAgICAgICAgICAgZXllX3Bvcz1jb25zdGFudF9leWUuY3VkYSgpIGlmIGNvbnN0YW50X2V5ZSBpcyBub3QgTm9uZSBlbHNlIGV5ZS5jdWRhKCksCiAgICAgICAgICAgICAgICBiZWhhdmlvcj1jb25zdGFudF9iZWguY3VkYSgpIGlmIGNvbnN0YW50X2JlaCBpcyBub3QgTm9uZSBlbHNlIGJlaGF2aW9yLmN1ZGEoKSkuZGF0YS5jcHUoKS5udW1weSgpCiAgICAgICAgICAgIGxhZyA9IHJlc3BvbnNlcy5zaGFwZVsxXSAtIG91dHB1dHMuc2hhcGVbMV0KICAgICAgICAgICAgcmVzcG9uc2VzID0gcmVzcG9uc2VzWzosIGxhZzosIDpdLmRhdGEuY3B1KCkubnVtcHkoKS5yZXNoYXBlKCgtMSwgbmV1cm9ucykpCiAgICAgICAgICAgIG91dHB1dHMgPSBvdXRwdXRzLnJlc2hhcGUoKC0xLCBuZXVyb25zKSkKICAgICAgICAgICAgeS5hcHBlbmQocmVzcG9uc2VzKQogICAgICAgICAgICB5X2hhdC5hcHBlbmQob3V0cHV0cykKICAgICAgICB0ZXN0X3BlYXJzb25zID0gY29ycihucC52c3RhY2soeSksIG5wLnZzdGFjayh5X2hhdCksIGF4aXM9MCkKICAgICAgICB1bml0X2lkcyA9IHRlc3RzZXRzW3JlYWRvdXRfa2V5XS5uZXVyb25zLnVuaXRfaWRzCiAgICAgICAgRGljdCA9IFtkaWN0KHBlYXJzb249YywgdW5pdF9pZD11KSBmb3IgdSwgYyBpbiB6aXAodW5pdF9pZHMsIHRlc3RfcGVhcnNvbnMpXQogICAgcmV0dXJuIHRlc3RfcGVhcnNvbnMKCgpkZWYgb3JhY2xlX2NvcnJlbGF0aW9ucyhrZXkpOgogICAgdGVzdHNldHMsIHRlc3Rsb2FkZXJzID0gRGF0YUNvbmZpZygpLmxvYWRfZGF0YShrZXksIHRpZXI9J3Rlc3QnLCBvcmFjbGU9VHJ1ZSkKICAgIGZvciByZWFkb3V0X2tleSwgbG9hZGVyIGluIHRlc3Rsb2FkZXJzLml0ZW1zKCk6CiAgICAgICAgb3JhY2xlcywgb3V0cyA9IFtdLCBbXQogICAgICAgIGZvciAqXywgcmVzcG9uc2VzIGluIGxvYWRlcjoKICAgICAgICAgICAgIyBvcmFjbGUgcmVzcG9uc2VzLiBUaGVzZSBhcmUgaW4gY2h1bmtzIGJhc2VkIG9uIHRoZSByZXBldGl0aW9ucwogICAgICAgICAgICByZXNwb25zZXMgPSByZXNwb25zZXMubnVtcHkoKQogICAgICAgICAgICAKICAgICAgICAgICAgIyBtZWFuIHBlciBuZXVyb24gb3ZlciB0aGUgY2xpcCByZXBldGl0aW9ucwogICAgICAgICAgICBtdSA9IHJlc3BvbnNlcy5tZWFuKGF4aXM9MCwga2VlcGRpbXM9VHJ1ZSkKICAgICAgICAgICAgCiAgICAgICAgICAgICMgbGVhdmUgb25lIG91dAogICAgICAgICAgICByZXBlYXRzID0gcmVzcG9uc2VzLnNoYXBlWzBdCiAgICAgICAgICAgIG9yYWNsZSA9IChtdSpyZXBlYXRzIC0gcmVzcG9uc2VzKSAvIChyZXBlYXRzIC0gMSkKICAgICAgICAgICAgCiAgICAgICAgICAgIG9yYWNsZXMuYXBwZW5kKG9yYWNsZS5yZXNoYXBlKC0xLCByZXNwb25zZXMuc2hhcGVbLTFdKSkKICAgICAgICAgICAgb3V0cy5hcHBlbmQocmVzcG9uc2VzLnJlc2hhcGUoLTEsIHJlc3BvbnNlcy5zaGFwZVstMV0pKQoKICAgICAgICBvcmFjbGVfcGVhcnNvbnMgPSBjb3JyKG5wLnZzdGFjayhvdXRzKSwgbnAudnN0YWNrKG9yYWNsZXMpLCBheGlzPTApCiAgICAgICAgdW5pdF9pZHMgPSB0ZXN0c2V0c1tyZWFkb3V0X2tleV0ubmV1cm9ucy51bml0X2lkcwogICAgICAgIERpY3QgPSBbZGljdChwZWFyc29uPWMsIHVuaXRfaWQ9dSkgZm9yIHUsIGMgaW4gemlwKHVuaXRfaWRzLCBvcmFjbGVfcGVhcnNvbnMpXQogICAgcmV0dXJuIG9yYWNsZV9wZWFyc29ucwoKCmRlZiBtZWFuX2V5ZV9iZWgodGVzdGxvYWRlcnMpOgogICAgZm9yIHJlYWRvdXRfa2V5LCB0ZXN0bG9hZGVyIGluIHRlc3Rsb2FkZXJzLml0ZW1zKCk6CiAgICAgICAgbG9hZGVyID0gdGVzdGxvYWRlcnNbcmVhZG91dF9rZXldCiAgICAgICAgZXllcyA9IFtdCiAgICAgICAgYmVocyA9IFtdCiAgICAgICAgZm9yIF8sIGJlaGF2aW9yLCBleWUsIF8gaW4gbG9hZGVyOgogICAgICAgICAgICBuZnJhbWVzID0gZXllLnNoYXBlWzFdCiAgICAgICAgICAgIAogICAgICAgICAgICBleWUgPSBleWUudmlldygtMSwgZXllLnNoYXBlWy0xXSkKICAgICAgICAgICAgZXllcy5hcHBlbmQoZXllKQogICAgICAgICAgICAKICAgICAgICAgICAgYmVoYXZpb3IgPSBiZWhhdmlvci52aWV3KC0xLCBiZWhhdmlvci5zaGFwZVstMV0pCiAgICAgICAgICAgIGJlaHMuYXBwZW5kKGJlaGF2aW9yKQoKICAgICAgICBleWVzID0gdG9yY2guY2F0KGV5ZXMsIDApCiAgICAgICAgZXllcyA9IGV5ZXMubWVhbigwKQoKICAgICAgICBiZWhzID0gdG9yY2guY2F0KGJlaHMsIDApCiAgICAgICAgYmVocyA9IGJlaHMubWVhbigwKQogICAgICAgIAogICAgZXllcyA9IGV5ZXMuZXhwYW5kKG5mcmFtZXMsIDIpLnJlc2l6ZSgxLCBuZnJhbWVzLCAyKQogICAgYmVocyA9IGJlaHMuZXhwYW5kKG5mcmFtZXMsIDMpLnJlc2l6ZSgxLCBuZnJhbWVzLCAzKQogICAgcmV0dXJuIGV5ZXMsIGJlaHMKICAgIAoKZGVmIGZyYWN0aW9uX29yYWNsZShvcmFjbGUsIHRlc3QsIHNhdmVwYXRoPU5vbmUsIHRpdGxlPU5vbmUpOgogICAgb3JhY2xlID0gb3JhY2xlWzosIG5wLm5ld2F4aXNdCiAgICBmcmFjdGlvbiwgXywgXywgXyA9IG5wLmxpbmFsZy5sc3RzcShvcmFjbGUsIHRlc3QpCiAgICBwbHQuZmlndXJlKGZpZ3NpemU9KDgsIDgpKQogICAgcGx0LnNjYXR0ZXIob3JhY2xlLCB0ZXN0LCBjb2xvcj0nZG9kZ2VyYmx1ZScsIGFscGhhPTAuNSkKICAgIHBsdC5wbG90KFswLCAuN10sIFswLCAuN10sICctLScsIGNvbG9yPSdkYXJrc2xhdGVncmF5JykKICAgIHBsdC5wbG90KAogICAgICAgIG9yYWNsZSwgCiAgICAgICAgZnJhY3Rpb24qb3JhY2xlLCAKICAgICAgICBsaW5ld2lkdGg9NSwgCiAgICAgICAgY29sb3I9J2RvZGdlcmJsdWUnLCAKICAgICAgICBhbHBoYT0wLjUsCiAgICAgICAgbGFiZWw9J3s6LjFmfSUgb3JhY2xlICcuZm9ybWF0KGZyYWN0aW9uLml0ZW0oKSAqIDEwMCkpCiAgICAKICAgIHBsdC54bGFiZWwoJ09yYWNsZSBDb3JyZWxhdGlvbicsIGZvbnRzaXplPTE2KQogICAgcGx0LnlsYWJlbCgnVGVzdCBDb3JyZWxhdGlvbicsIGZvbnRzaXplPTE2KQogICAgaWYgdGl0bGUgaXMgbm90IE5vbmU6CiAgICAgICAgcGx0LnRpdGxlKHRpdGxlKQogICAgcGx0LnhsaW0oWy0uMSwgLjldKQogICAgcGx0LnlsaW0oWy0uMSwgLjldKQogICAgcGx0LmxlZ2VuZChmb250c2l6ZT0xNCkKICAgIGlmIHNhdmVwYXRoOgogICAgICAgIHBsdC5zYXZlZmlnKHNhdmVwYXRoKQogICAgcGx0LnNob3coKQo8fGZpbV9zdWZmaXh8PgoKZGVmIHRlc3RfY29ycmVsYXRpb25zKHRlc3RzZXRzLCB0ZXN0bG9hZGVycywgbW9kZWwsIGNvbnN0YW50X2V5ZT1Ob25lLCBjb25zdGFudF9iZWg9Tm9uZSk6CiAgICBmb3IgcmVhZG91dF9rZXksIGxvYWRlciBpbiB0ZXN0bG9hZGVycy5pdGVtcygpOgogICAgICAgIHkgPSBbXQo8fGZpbV9lbmR8Pg=="]
["e745bf53688d71299951c97a8245e01a03139834-2","e745bf53688d71299951c97a8245e01a03139834","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0b3JjaApmcm9tIHRxZG0gaW1wb3J0IHRxZG0KaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdApmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHN0eWxlCmZyb20gbmlwczIwMTgubW92aWUucGFyYW1ldGVycyBpbXBvcnQgRGF0YUNvbmZpZwoKc3R5bGUudXNlKCdnZ3Bsb3QnKQoKCmRlZiBjb3JyKHkxLCB5MiwgYXhpcz0tMSwgZXBzPTFlLTgpOgogICAgeTEgPSAoeTEgLSB5MS5tZWFuKGF4aXM9YXhpcykpLyh5MS5zdGQoYXhpcz1heGlzKSArIGVwcykKICAgIHkyID0gKHkyIC0geTIubWVhbihheGlzPWF4aXMpKS8oeTIuc3RkKGF4aXM9YXhpcykgKyBlcHMpCiAgICByZXR1cm4gKHkxICogeTIpLm1lYW4oYXhpcz1heGlzKQoKCmRlZiB0ZXN0X2NvcnJlbGF0aW9ucyh0ZXN0c2V0cywgdGVzdGxvYWRlcnMsIG1vZGVsLCBjb25zdGFudF9leWU9Tm9uZSwgY29uc3RhbnRfYmVoPU5vbmUpOgogICAgZm9yIHJlYWRvdXRfa2V5LCBsb2FkZXIgaW4gdGVzdGxvYWRlcnMuaXRlbXMoKToKICAgICAgICB5ID0gW10KICAgICAgICB5X2hhdCA9IFtdCiAgICAgICAgZm9yIGlucHV0cywgYmVoYXZpb3IsIGV5ZSwgcmVzcG9uc2VzIGluIGxvYWRlcjoKICAgICAgICAgICAgbmV1cm9ucyA9IHJlc3BvbnNlcy5zaXplKC0xKSAKICAgICAgICAgICAgb3V0cHV0cyA9IG1vZGVsKAogICAgICAgICAgICAgICAgaW5wdXRzLmN1ZGEoKSwgCiAgICAgICAgICAgICAgICByZWFkb3V0X2tleT1yZWFkb3V0X2tleSwgCiAgICAgICAgICAgICAgICBleWVfcG9zPWNvbnN0YW50X2V5ZS5jdWRhKCkgaWYgY29uc3RhbnRfZXllIGlzIG5vdCBOb25lIGVsc2UgZXllLmN1ZGEoKSwKICAgICAgICAgICAgICAgIGJlaGF2aW9yPWNvbnN0YW50X2JlaC5jdWRhKCkgaWYgY29uc3RhbnRfYmVoIGlzIG5vdCBOb25lIGVsc2UgYmVoYXZpb3IuY3VkYSgpKS5kYXRhLmNwdSgpLm51bXB5KCkKICAgICAgICAgICAgbGFnID0gcmVzcG9uc2VzLnNoYXBlWzFdIC0gb3V0cHV0cy5zaGFwZVsxXQogICAgICAgICAgICByZXNwb25zZXMgPSByZXNwb25zZXNbOiwgbGFnOiwgOl0uZGF0YS5jcHUoKS5udW1weSgpLnJlc2hhcGUoKC0xLCBuZXVyb25zKSkKICAgICAgICAgICAgb3V0cHV0cyA9IG91dHB1dHMucmVzaGFwZSgoLTEsIG5ldXJvbnMpKQogICAgICAgICAgICB5LmFwcGVuZChyZXNwb25zZXMpCiAgICAgICAgICAgIHlfaGF0LmFwcGVuZChvdXRwdXRzKQogICAgICAgIHRlc3RfcGVhcnNvbnMgPSBjb3JyKG5wLnZzdGFjayh5KSwgbnAudnN0YWNrKHlfaGF0KSwgYXhpcz0wKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgdW5pdF9pZHMgPSB0ZXN0c2V0c1tyZWFkb3V0X2tleV0ubmV1cm9ucy51bml0X2lkcwogICAgICAgIERpY3QgPSBbZGljdChwZWFyc29uPWMsIHVuaXRfaWQ9dSkgZm9yIHUsIGMgaW4gemlwKHVuaXRfaWRzLCB0ZXN0X3BlYXJzb25zKV0KPHxmaW1fZW5kfD4="]
["e745bf53688d71299951c97a8245e01a03139834-3","e745bf53688d71299951c97a8245e01a03139834","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0b3JjaApmcm9tIHRxZG0gaW1wb3J0IHRxZG0KaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdApmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHN0eWxlCmZyb20gbmlwczIwMTgubW92aWUucGFyYW1ldGVycyBpbXBvcnQgRGF0YUNvbmZpZwoKc3R5bGUudXNlKCdnZ3Bsb3QnKQoKCmRlZiBjb3JyKHkxLCB5MiwgYXhpcz0tMSwgZXBzPTFlLTgpOgogICAgeTEgPSAoeTEgLSB5MS5tZWFuKGF4aXM9YXhpcykpLyh5MS5zdGQoYXhpcz1heGlzKSArIGVwcykKICAgIHkyID0gKHkyIC0geTIubWVhbihheGlzPWF4aXMpKS8oeTIuc3RkKGF4aXM9YXhpcykgKyBlcHMpCiAgICByZXR1cm4gKHkxICogeTIpLm1lYW4oYXhpcz1heGlzKQoKCmRlZiB0ZXN0X2NvcnJlbGF0aW9ucyh0ZXN0c2V0cywgdGVzdGxvYWRlcnMsIG1vZGVsLCBjb25zdGFudF9leWU9Tm9uZSwgY29uc3RhbnRfYmVoPU5vbmUpOgogICAgZm9yIHJlYWRvdXRfa2V5LCBsb2FkZXIgaW4gdGVzdGxvYWRlcnMuaXRlbXMoKToKICAgICAgICB5ID0gW10KICAgICAgICB5X2hhdCA9IFtdCiAgICAgICAgZm9yIGlucHV0cywgYmVoYXZpb3IsIGV5ZSwgcmVzcG9uc2VzIGluIGxvYWRlcjoKICAgICAgICAgICAgbmV1cm9ucyA9IHJlc3BvbnNlcy5zaXplKC0xKSAKICAgICAgICAgICAgb3V0cHV0cyA9IG1vZGVsKAogICAgICAgICAgICAgICAgaW5wdXRzLmN1ZGEoKSwgCiAgICAgICAgICAgICAgICByZWFkb3V0X2tleT1yZWFkb3V0X2tleSwgCiAgICAgICAgICAgICAgICBleWVfcG9zPWNvbnN0YW50X2V5ZS5jdWRhKCkgaWYgY29uc3RhbnRfZXllIGlzIG5vdCBOb25lIGVsc2UgZXllLmN1ZGEoKSwKICAgICAgICAgICAgICAgIGJlaGF2aW9yPWNvbnN0YW50X2JlaC5jdWRhKCkgaWYgY29uc3RhbnRfYmVoIGlzIG5vdCBOb25lIGVsc2UgYmVoYXZpb3IuY3VkYSgpKS5kYXRhLmNwdSgpLm51bXB5KCkKICAgICAgICAgICAgbGFnID0gcmVzcG9uc2VzLnNoYXBlWzFdIC0gb3V0cHV0cy5zaGFwZVsxXQogICAgICAgICAgICByZXNwb25zZXMgPSByZXNwb25zZXNbOiwgbGFnOiwgOl0uZGF0YS5jcHUoKS5udW1weSgpLnJlc2hhcGUoKC0xLCBuZXVyb25zKSkKICAgICAgICAgICAgb3V0cHV0cyA9IG91dHB1dHMucmVzaGFwZSgoLTEsIG5ldXJvbnMpKQogICAgICAgICAgICB5LmFwcGVuZChyZXNwb25zZXMpCiAgICAgICAgICAgIHlfaGF0LmFwcGVuZChvdXRwdXRzKQogICAgICAgIHRlc3RfcGVhcnNvbnMgPSBjb3JyKG5wLnZzdGFjayh5KSwgbnAudnN0YWNrKHlfaGF0KSwgYXhpcz0wKQogICAgICAgIHVuaXRfaWRzID0gdGVzdHNldHNbcmVhZG91dF9rZXldLm5ldXJvbnMudW5pdF9pZHMKICAgICAgICBEaWN0ID0gW2RpY3QocGVhcnNvbj1jLCB1bml0X2lkPXUpIGZvciB1LCBjIGluIHppcCh1bml0X2lkcywgdGVzdF9wZWFyc29ucyldCiAgICByZXR1cm4gdGVzdF9wZWFyc29ucwoKCmRlZiBvcmFjbGVfY29ycmVsYXRpb25zKGtleSk6CiAgICB0ZXN0c2V0cywgdGVzdGxvYWRlcnMgPSBEYXRhQ29uZmlnKCkubG9hZF9kYXRhKGtleSwgdGllcj0ndGVzdCcsIG9yYWNsZT1UcnVlKQogICAgZm9yIHJlYWRvdXRfa2V5LCBsb2FkZXIgaW4gdGVzdGxvYWRlcnMuaXRlbXMoKToKICAgICAgICBvcmFjbGVzLCBvdXRzID0gW10sIFtdCiAgICAgICAgZm9yICpfLCByZXNwb25zZXMgaW4gbG9hZGVyOgogICAgICAgICAgICAjIG9yYWNsZSByZXNwb25zZXMuIFRoZXNlIGFyZSBpbiBjaHVua3MgYmFzZWQgb24gdGhlIHJlcGV0aXRpb25zCiAgICAgICAgICAgIHJlc3BvbnNlcyA9IHJlc3BvbnNlcy5udW1weSgpCiAgICAgICAgICAgIAogICAgICAgICAgICAjIG1lYW4gcGVyIG5ldXJvbiBvdmVyIHRoZSBjbGlwIHJlcGV0aXRpb25zCiAgICAgICAgICAgIG11ID0gcmVzcG9uc2VzLm1lYW4oYXhpcz0wLCBrZWVwZGltcz1UcnVlKQogICAgICAgICAgICAKICAgICAgICAgICAgIyBsZWF2ZSBvbmUgb3V0CiAgICAgICAgICAgIHJlcGVhdHMgPSByZXNwb25zZXMuc2hhcGVbMF0KICAgICAgICAgICAgb3JhY2xlID0gKG11KnJlcGVhdHMgLSByZXNwb25zZXMpIC8gKHJlcGVhdHMgLSAxKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIAogICAgICAgICAgICBvcmFjbGVzLmFwcGVuZChvcmFjbGUucmVzaGFwZSgtMSwgcmVzcG9uc2VzLnNoYXBlWy0xXSkpCiAgICAgICAgICAgIG91dHMuYXBwZW5kKHJlc3BvbnNlcy5yZXNoYXBlKC0xLCByZXNwb25zZXMuc2hhcGVbLTFdKSkKCjx8ZmltX2VuZHw+"]
["c19da7b33e2e6192edfeb1610d6eb1d591d211f7-1","c19da7b33e2e6192edfeb1610d6eb1d591d211f7","PHxmaW1fcHJlZml4fD4KIiIiClRpbnkgZnJhbWV3b3JrIHVzZWQgdG8gcG93ZXIgUHVsc2FyIGFwcGxpY2F0aW9uLCBub3RoaW5nIGluIGhlcmUgaXMgc3BlY2lmaWMgdG8gcnVubmluZwpvciBzdGFnaW5nIGpvYnMuIE1vc3RseSBkZWFscyB3aXRoIHJvdXRpbmcgd2ViIHRyYWZmaWMgYW5kIHBhcnNpbmcgcGFyYW1ldGVycy4KIiIiCmltcG9ydCBpbnNwZWN0CmltcG9ydCByZQpmcm9tIG9zLnBhdGggaW1wb3J0IGV4aXN0cwoKZnJvbSB3ZWJvYiBpbXBvcnQgUmVxdWVzdApmcm9tIHdlYm9iIGltcG9ydCBSZXNwb25zZQpmcm9tIHdlYm9iIGltcG9ydCBleGMKCmZyb20gcHVsc2FyLmNsaWVudC51dGlsIGltcG9ydCBqc29uX2R1bXBzCgoKY2xhc3MgUm91dGluZ0FwcDoKICAgICIiIgogICAgQWJzdHJhY3QgZGVmaW5pdGlvbiBmb3IgYSBweXRob24gd2ViIGFwcGxpY2F0aW9uLgogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5yb3V0ZXMgPSBbXQoKICAgIGRlZiBhZGRfcm91dGUoc2VsZiwgcm91dGUsIG1ldGhvZCwgY29udHJvbGxlciwgKiphcmdzKToKICAgICAgICByb3V0ZV9yZWdleCA9IHNlbGYuX190ZW1wbGF0ZV90b19yZWdleChyb3V0ZSkKICAgICAgICBzZWxmLnJvdXRlcy5hcHBlbmQoKHJvdXRlX3JlZ2V4LCBtZXRob2QsIGNvbnRyb2xsZXIsIGFyZ3MpKQoKICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBlbnZpcm9uLCBzdGFydF9yZXNwb25zZSk6CiAgICAgICAgcmVxID0gUmVxdWVzdChlbnZpcm9uKQogICAgICAgIHJlcS5hcHAgPSBzZWxmCiAgICAgICAgZm9yIHJvdXRlLCBtZXRob2QsIGNvbnRyb2xsZXIsIGFyZ3MgaW4gc2VsZi5yb3V0ZXM6CiAgICAgICAgICAgIGlmIG1ldGhvZCBhbmQgbm90IHJlcS5tZXRob2QgPT0gbWV0aG9kOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgbWF0Y2ggPSByb3V0ZS5tYXRjaChyZXEucGF0aF9pbmZvKQogICAgICAgICAgICBpZiBtYXRjaDoKICAgICAgICAgICAgICAgIHJlcXVlc3RfYXJncyA9IGRpY3QoYXJncykKICAgICAgICAgICAgICAgIHJvdXRlX2FyZ3MgPSBtYXRjaC5ncm91cGRpY3QoKQogICAgICAgICAgICAgICAgcmVxdWVzdF9hcmdzLnVwZGF0ZShyb3V0ZV9hcmdzKQogICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIoZW52aXJvbiwgc3RhcnRfcmVzcG9uc2UsICoqcmVxdWVzdF9hcmdzKQogICAgICAgIHJldHVybiBleGMuSFRUUE5vdEZvdW5kKCkoZW52aXJvbiwgc3RhcnRfcmVzcG9uc2UpCgogICAgZGVmIF9fdGVtcGxhdGVfdG9fcmVnZXgoc2VsZiwgdGVtcGxhdGUpOgogICAgICAgIHZhcl9yZWdleCA9IHJlLmNvbXBpbGUocicnJwogICAgICAgICAgICBceyAgICAgICAgICAjIFRoZSBleGFjdCBjaGFyYWN0ZXIgInsiCiAgICAgICAgICAgIChcdyspICAgICAgICMgVGhlIHZhcmlhYmxlIG5hbWUgKHJlc3RyaWN0ZWQgdG8gYS16LCAwLTksIF8pCiAgICAgICAgICAgICg/OjooW159XSspKT8gIyBUaGUgb3B0aW9uYWwgOnJlZ2V4IHBhcnQKICAgICAgICAgICAgXH0gICAgICAgICAgIyBUaGUgZXhhY3QgY2hhcmFjdGVyICJ9IgogICAgICAgICAgICcnJywgcmUuVkVSQk9TRSkKICAgICAgICByZWdleCA9ICcnCiAgICAgICAgbGFzdF9wb3MgPSAwCiAgICAgICAgZm9yIG1hdGNoIGluIHZhcl9yZWdleC5maW5kaXRlcih0ZW1wbGF0ZSk6CiAgICAgICAgICAgIHJlZ2V4ICs9IHJlLmVzY2FwZSh0ZW1wbGF0ZVtsYXN0X3BvczptYXRjaC5zdGFydCgpXSkKICAgICAgICAgICAgdmFyX25hbWUgPSBtYXRjaC5ncm91cCgxKQogICAgICAgICAgICBleHByID0gbWF0Y2guZ3JvdXAoMikgb3IgJ1teL10rJwogICAgICAgICAgICBleHByID0gJyg/UDx7fT57fSknLmZvcm1hdCh2YXJfbmFtZSwgZXhwcikKICAgICAgICAgICAgcmVnZXggKz0gZXhwcgogICAgICAgICAgICBsYXN0X3BvcyA9IG1hdGNoLmVuZCgpCiAgICAgICAgcmVnZXggKz0gcmUuZXNjYXBlKHRlbXBsYXRlW2xhc3RfcG9zOl0pCiAgICAgICAgcmVnZXggPSAnXiVzJCcgJSByZWdleAogICAgICAgIHJldHVybiByZS5jb21waWxlKHJlZ2V4KQoKCmRlZiBidWlsZF9mdW5jX2FyZ3MoZnVuYywgKmFyZ19kaWN0cyk6CiAgICBhcmdzID0ge30KCiAgICBkZWYgYWRkX2FyZ3MoZnVuY19hcmdzLCBhcmdfdmFsdWVzKToKICAgICAgICBmb3IgZnVuY19hcmcgaW4gZnVuY19hcmdzOgogICAgICAgICAgICBpZiBmdW5jX2FyZyBub3QgaW4gYXJncyBhbmQgZnVuY19hcmcgaW4gYXJnX3ZhbHVlczoKICAgICAgICAgICAgICAgIGFyZ3NbZnVuY19hcmddID0gYXJnX3ZhbHVlc1tmdW5jX2FyZ10KCiAgICBmdW5jX2FyZ3MgPSBpbnNwZWN0LmdldGFyZ3NwZWMoZnVuYykuYXJncwogICAgZm9yIGFyZ19kaWN0IGluIGFyZ19kaWN0czoKICAgICAgICBhZGRfYXJncyhmdW5jX2FyZ3MsIGFyZ19kaWN0KQoKICAgIHJldHVybiBhcmdzCgoKY2xhc3MgQ29udHJvbGxlcjoKICAgICIiIgogICAgV3JhcHMgcHl0aG9uIGZ1bmN0aW9ucyBpbnRvIGNvbnRyb2xsZXIgbWV0aG9kcy4KICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2Q9Tm9uZSwgcGF0aD1Ob25lLCByZXNwb25zZV90eXBlPSdPSycpOgogICAgICAgIHNlbGYubWV0aG9kID0gbWV0aG9kCiAgICAgICAgc2VsZi5wYXRoID0gcGF0aAogICAgICAgIHNlbGYucmVzcG9uc2VfdHlwZSA9IHJlc3BvbnNlX3R5cGUKCiAgICBkZWYgX19nZXRfY2xpZW50X2FkZHJlc3Moc2VsZiwgZW52aXJvbik6CiAgICAgICAgIiIiCiAgICAgICAgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODM1MDMwL29idGFpbmluZy1jbGllbnQtaXAtYWRkcmVzcy1mcm9tLWEtd3NnaS1hcHAtdXNpbmctZXZlbnRsZXQKICAgICAgICAiIiIKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJldHVybiBlbnZpcm9uWydIVFRQX1hfRk9SV0FSREVEX0ZPUiddLnNwbGl0KCcsJylbLTFdLnN0cmlwKCkKICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgIHJldHVybiBlbnZpcm9uWydSRU1PVEVfQUREUiddCgogICAgZGVmIF9fYWRkX2FyZ3Moc2VsZiwgYXJncywgZnVuY19hcmdzLCBhcmdfdmFsdWVzKToKICAgICAgICBmb3IgZnVuY19hcmcgaW4gZnVuY19hcmdzOgogICAgICAgICAgICBpZiBmdW5jX2FyZyBub3QgaW4gYXJncyBhbmQgZnVuY19hcmcgaW4gYXJnX3ZhbHVlczoKICAgICAgICAgICAgICAgIGFyZ3NbZnVuY19hcmddID0gYXJnX3ZhbHVlc1tmdW5jX2FyZ10KCiAgICBkZWYgX19oYW5kbGVfYWNjZXNzKHNlbGYsIHJlcSwgZW52aXJvbiwgc3RhcnRfcmVzcG9uc2UpOgogICAgICAgIGFjY2Vzc19yZXNwb25zZSA9IE5vbmUKICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdfY2hlY2tfYWNjZXNzJyk6CiAgICAgICAgICAgIGFjY2Vzc19yZXNwb25zZSA9IHNlbGYuX2NoZWNrX2FjY2VzcyhyZXEsIGVudmlyb24sIHN0YXJ0X3Jlc3BvbnNlKQogICAgICAgIHJldHVybiBhY2Nlc3NfcmVzcG9uc2UKCiAgICBkZWYgX19idWlsZF9hcmdzKHNlbGYsIGZ1bmMsIGFyZ3MsIHJlcSwgZW52aXJvbik6CiAgICAgICAgYXJncyA9IGJ1aWxkX2Z1bmNfYXJncyhmdW5jLCBhcmdzLCByZXEuR0VULCBzZWxmLl9hcHBfYXJncyhhcmdzLCByZXEpKQogICAgICAgIGZ1bmNfYXJncyA9IGluc3BlY3QuZ2V0YXJnc3BlYyhmdW5jKS5hcmdzCgogICAgICAgIGZvciBmdW5jX2FyZyBpbiBmdW5jX2FyZ3M6CiAgICAgICAgICAgIGlmIGZ1bmNfYXJnID09ICJpcCI6CiAgICAgICAgICAgICAgICBhcmdzWyJpcCJdID0gc2VsZi5fX2dldF9jbGllbnRfYWRkcmVzcyhlbnZpcm9uKQoKICAgICAgICBpZiAnYm9keScgaW4gZnVuY19hcmdzOgogICAgICAgICAgICBhcmdzWydib2R5J10gPSByZXEuYm9keV9maWxlCgogICAgICAgIHJldHVybiBhcmdzCgogICAgZGVmIF9fZXhlY3V0ZV9yZXF1ZXN0KHNlbGYsIGZ1bmMsIGFyZ3MsIHJlcSwgZW52aXJvbik6CiAgICAgICAgYXJncyA9IHNlbGYuX19idWlsZF9hcmdzKGZ1bmMsIGFyZ3MsIHJlcSwgZW52aXJvbikKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMoKiphcmdzKQogICAgICAgIGV4Y2VwdCBleGMuSFRUUEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICByZXN1bHQgPSBlCiAgICAgICAgcmV0dXJuIHJlc3VsdAoKICAgIGRlZiBfX2J1aWxkX3Jlc3BvbnNlKHNlbGYsIHJlc3VsdCk6CiAgICAgICAgaWYgc2VsZi5yZXNwb25zZV90eXBlID09ICdmaWxlJzoKICAgICAgICAgICAgcmVzcCA9IGZpbGVfcmVzcG9uc2UocmVzdWx0KQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJlc3AgPSBSZXNwb25zZShib2R5PXNlbGYuYm9keShyZXN1bHQpKQogICAgICAgIHJldHVybiByZXNwCgogICAgZGVmIF9fY2FsbF9fKHNlbGYsIGZ1bmMpOgogICAgICAgIGRlZiBjb250cm9sbGVyX3JlcGxhY2VtZW50KGVudmlyb24sIHN0YXJ0X3Jlc3BvbnNlLCAqKmFyZ3MpOgogICAgICAgICAgICByZXEgPSBSZXF1ZXN0KGVudmlyb24pCgogICAgICAgICAgICBhY2Nlc3NfcmVzcG9uc2UgPSBzZWxmLl9faGFuZGxlX2FjY2VzcyhyZXEsIGVudmlyb24sIHN0YXJ0X3Jlc3BvbnNlKQogICAgICAgICAgICBpZiBhY2Nlc3NfcmVzcG9uc2U6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIHJldHVybiBhY2Nlc3NfcmVzcG9uc2UKCjx8ZmltX2VuZHw+"]
["c19da7b33e2e6192edfeb1610d6eb1d591d211f7-2","c19da7b33e2e6192edfeb1610d6eb1d591d211f7","PHxmaW1fcHJlZml4fD4KIiIiClRpbnkgZnJhbWV3b3JrIHVzZWQgdG8gcG93ZXIgUHVsc2FyIGFwcGxpY2F0aW9uLCBub3RoaW5nIGluIGhlcmUgaXMgc3BlY2lmaWMgdG8gcnVubmluZwpvciBzdGFnaW5nIGpvYnMuIE1vc3RseSBkZWFscyB3aXRoIHJvdXRpbmcgd2ViIHRyYWZmaWMgYW5kIHBhcnNpbmcgcGFyYW1ldGVycy4KIiIiCmltcG9ydCBpbnNwZWN0CmltcG9ydCByZQpmcm9tIG9zLnBhdGggaW1wb3J0IGV4aXN0cwoKZnJvbSB3ZWJvYiBpbXBvcnQgUmVxdWVzdApmcm9tIHdlYm9iIGltcG9ydCBSZXNwb25zZQpmcm9tIHdlYm9iIGltcG9ydCBleGMKCmZyb20gcHVsc2FyLmNsaWVudC51dGlsIGltcG9ydCBqc29uX2R1bXBzCgoKY2xhc3MgUm91dGluZ0FwcDoKICAgICIiIgogICAgQWJzdHJhY3QgZGVmaW5pdGlvbiBmb3IgYSBweXRob24gd2ViIGFwcGxpY2F0aW9uLgogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5yb3V0ZXMgPSBbXQoKICAgIGRlZiBhZGRfcm91dGUoc2VsZiwgcm91dGUsIG1ldGhvZCwgY29udHJvbGxlciwgKiphcmdzKToKICAgICAgICByb3V0ZV9yZWdleCA9IHNlbGYuX190ZW1wbGF0ZV90b19yZWdleChyb3V0ZSkKICAgICAgICBzZWxmLnJvdXRlcy5hcHBlbmQoKHJvdXRlX3JlZ2V4LCBtZXRob2QsIGNvbnRyb2xsZXIsIGFyZ3MpKQoKICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBlbnZpcm9uLCBzdGFydF9yZXNwb25zZSk6CiAgICAgICAgcmVxID0gUmVxdWVzdChlbnZpcm9uKQogICAgICAgIHJlcS5hcHAgPSBzZWxmCiAgICAgICAgZm9yIHJvdXRlLCBtZXRob2QsIGNvbnRyb2xsZXIsIGFyZ3MgaW4gc2VsZi5yb3V0ZXM6CiAgICAgICAgICAgIGlmIG1ldGhvZCBhbmQgbm90IHJlcS5tZXRob2QgPT0gbWV0aG9kOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgbWF0Y2ggPSByb3V0ZS5tYXRjaChyZXEucGF0aF9pbmZvKQogICAgICAgICAgICBpZiBtYXRjaDoKICAgICAgICAgICAgICAgIHJlcXVlc3RfYXJncyA9IGRpY3QoYXJncykKICAgICAgICAgICAgICAgIHJvdXRlX2FyZ3MgPSBtYXRjaC5ncm91cGRpY3QoKQogICAgICAgICAgICAgICAgcmVxdWVzdF9hcmdzLnVwZGF0ZShyb3V0ZV9hcmdzKQogICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIoZW52aXJvbiwgc3RhcnRfcmVzcG9uc2UsICoqcmVxdWVzdF9hcmdzKQogICAgICAgIHJldHVybiBleGMuSFRUUE5vdEZvdW5kKCkoZW52aXJvbiwgc3RhcnRfcmVzcG9uc2UpCgogICAgZGVmIF9fdGVtcGxhdGVfdG9fcmVnZXgoc2VsZiwgdGVtcGxhdGUpOgogICAgICAgIHZhcl9yZWdleCA9IHJlLmNvbXBpbGUocicnJwogICAgICAgICAgICBceyAgICAgICAgICAjIFRoZSBleGFjdCBjaGFyYWN0ZXIgInsiCiAgICAgICAgICAgIChcdyspICAgICAgICMgVGhlIHZhcmlhYmxlIG5hbWUgKHJlc3RyaWN0ZWQgdG8gYS16LCAwLTksIF8pCiAgICAgICAgICAgICg/OjooW159XSspKT8gIyBUaGUgb3B0aW9uYWwgOnJlZ2V4IHBhcnQKICAgICAgICAgICAgXH0gICAgICAgICAgIyBUaGUgZXhhY3QgY2hhcmFjdGVyICJ9IgogICAgICAgICAgICcnJywgcmUuVkVSQk9TRSkKICAgICAgICByZWdleCA9ICcnCiAgICAgICAgbGFzdF9wb3MgPSAwCiAgICAgICAgZm9yIG1hdGNoIGluIHZhcl9yZWdleC5maW5kaXRlcih0ZW1wbGF0ZSk6CiAgICAgICAgICAgIHJlZ2V4ICs9IHJlLmVzY2FwZSh0ZW1wbGF0ZVtsYXN0X3BvczptYXRjaC5zdGFydCgpXSkKICAgICAgICAgICAgdmFyX25hbWUgPSBtYXRjaC5ncm91cCgxKQogICAgICAgICAgICBleHByID0gbWF0Y2guZ3JvdXAoMikgb3IgJ1teL10rJwogICAgICAgICAgICBleHByID0gJyg/UDx7fT57fSknLmZvcm1hdCh2YXJfbmFtZSwgZXhwcikKICAgICAgICAgICAgcmVnZXggKz0gZXhwcgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGxhc3RfcG9zID0gbWF0Y2guZW5kKCkKPHxmaW1fZW5kfD4="]
["8223f27d57f2e10abbebf2710fc88347f24d72d1-1","8223f27d57f2e10abbebf2710fc88347f24d72d1","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiMgICBfX19fICAgICAgICAgICAgICAgICAgICAgXyAgICAgICAgICAgICAgIF8KIyAgLyBfX198X19fICBfIF9fIF9fXyAgIF9fX3wgfF8gICBfIF9fIF9fXyB8IHwKIyB8IHwgICAvIF8gXHwgJ18gYCBfIFwgLyBfIFwgX198IHwgJ18gYCBfIFx8IHwKIyB8IHxfX3wgKF8pIHwgfCB8IHwgfCB8ICBfXy8gfF8gX3wgfCB8IHwgfCB8IHwKIyAgXF9fX19cX19fL3xffCB8X3wgfF98XF9fX3xcX18oXylffCB8X3wgfF98X3wKIwojICBTaWduIHVwIGZvciBmcmVlIGF0IGh0dHA6Ly93d3cuY29tZXQubWwKIyAgQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQ29tZXQgTUwgSU5DCiMgIFRoaXMgZmlsZSBjYW4gbm90IGJlIGNvcGllZCBhbmQvb3IgZGlzdHJpYnV0ZWQgd2l0aG91dCB0aGUgZXhwcmVzcwojICBwZXJtaXNzaW9uIG9mIENvbWV0IE1MIEluYy4KIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgppbXBvcnQgbG9nZ2luZwoKZnJvbSAuLl9sb2dnaW5nIGltcG9ydCBjaGVja19tb2R1bGUKCkxPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCmRlZiBsZWFybmVyX2NvbnN0cnVjdG9yKGV4cGVyaW1lbnQsIG9yaWdpbmFsLCAqYXJncywgKiprd2FyZ3MpOgogICAgIyMgQ29uc3RydWN0b3IsIHNvIG5vIHJldHVybiB2YWx1ZQogICAgIyMgQXNzdW1lIHRoZSBsYXN0IExlYXJuZXIgaGFzIHRoZSBtb2RlbDoKICAgIHRyeToKICAgICAgICAjIyBhcmdzWzFdOiBMZWFybmVyCiAgICAgICAgIyMgYXJnc1syXTogRGF0YUJ1bmNoCiAgICAgICAgIyMgYXJnc1szXTogTW9kZWwKICAgICAgICAjIyBUaGUgbW9kZWwgaXMgYWN0dWFsbHkgYSB0b3JjaCBtb2RlbCwgc28gd2Ugc2V0IGl0CiAgICAgICAgIyMgaGVyZSB0byB3b3JrIHdpdGggdGhlIHRvcmNoIGxvZ2dlcjoKICAgICAgICBleHBlcmltZW50Ll9zdG9yYWdlWyJ0b3JjaCJdWyJtb2RlbCJdID0gYXJnc1szXQogICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICBMT0dHRVIuZXJyb3IoIkZhaWxlZCB0byBydW4gTGVhcm5lci5fX2luaXRfXyBsb2dnZXIiLCBleGNfaW5mbz1UcnVlKQoKCmRlZiBjYWxsYmFja19vbl9lcG9jaF9iZWdpbihleHBlcmltZW50LCBvcmlnaW5hbCwgcmV0dmFsLCAqYXJncywgKiprd2FyZ3MpOgogICAgaWYgZXhwZXJpbWVudC5hdXRvX21ldHJpY19sb2dnaW5nOgogICAgICAgIHRyeToKICAgICAgICAgICAgY2JoYW5kbGVyID0gYXJnc1swXQogICAgICAgICAgICBleHBlcmltZW50LmxvZ19jdXJyZW50X2Vwb2NoKGNiaGFuZGxlci5zdGF0ZV9kaWN0WyJlcG9jaCJdKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgIExPR0dFUi5lcnJvcigKICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcnVuIENhbGxiYWNrSGFuZGVyLm9uX2Vwb2NoX2JlZ2luIGxvZ2dlciIsIGV4Y19pbmZvPVRydWUKICAgICAgICAgICAgKQogICAgcmV0dXJuIHJldHZhbAoKCmRlZiBjYWxsYmFja19vbl9lcG9jaF9lbmQoZXhwZXJpbWVudCwgb3JpZ2luYWwsIHJldHZhbCwgKmFyZ3MsICoqa3dhcmdzKToKICAgIGlmIGV4cGVyaW1lbnQuYXV0b19tZXRyaWNfbG9nZ2luZzoKICAgICAgICB0cnk6CiAgICAgICAgICAgICMjIGFyZ3NbMF06IGNhbGxiYWNrIGhhbmRsZXIKICAgICAgICAgICAgIyMgYXJnc1sxXTogbWV0cmljczogW2xvc3MsIGFjY3VyYWN5LCAuLi5dCiAgICAgICAgICAgICMjIGFyZ3NbMF0uc3RhdGVfZGljdFsibWV0cmljcyJdOiBuYW1lcyAobm90IGxvc3MgdGhvdWdoKQogICAgICAgICAgICBjYmhhbmRsZXIgPSBhcmdzWzBdCiAgICAgICAgICAgIG1ldHJpY19uYW1lcyA9IFsidmFsX2xvc3MiXQogICAgICAgICAgICBmb3IgZiBpbiBjYmhhbmRsZXIuc3RhdGVfZGljdFsibWV0cmljcyJdOgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgbWV0cmljX3ZhbHVlcyA9IGNiaGFuZGxlci5zdGF0ZV9kaWN0WyJsYXN0X21ldHJpY3MiXQogICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gemlwKG1ldHJpY19uYW1lcywgbWV0cmljX3ZhbHVlcyk6CiAgICAgICAgICAgICAgICBleHBlcmltZW50Ll9sb2dfbWV0cmljKAogICAgICAgICAgICAgICAgICAgIG5hbWUsIHZhbHVlLCBzdGVwPWV4cGVyaW1lbnQuY3Vycl9zdGVwLCBmcmFtZXdvcms9ImZhc3RhaSIKICAgICAgICAgICAgICAgICkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICBMT0dHRVIuZXJyb3IoCiAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHJ1biBDYWxsYmFja0hhbmRlci5vbl9lcG9jaF9lbmQgbG9nZ2VyIiwgZXhjX2luZm89VHJ1ZQogICAgICAgICAgICApCiAgICByZXR1cm4gcmV0dmFsCgoKZGVmIHBhdGNoKG1vZHVsZV9maW5kZXIpOgogICAgIyMgRm9yIHRlc3Rpbmc6CiAgICBjaGVja19tb2R1bGUoImZhc3RhaSIpCgogICAgIyMgRm9yIExlYXJuZXIgY29uc3RydWN0b3I6CiAgICBtb2R1bGVfZmluZGVyLnJlZ2lzdGVyX2FmdGVyKAogICAgICAgICJmYXN0YWkuYmFzaWNfdHJhaW4iLCAiTGVhcm5lci5fX2luaXRfXyIsIGxlYXJuZXJfY29uc3RydWN0b3IKICAgICkKICAgIG1vZHVsZV9maW5kZXIucmVnaXN0ZXJfYWZ0ZXIoCiAgICAgICAgImZhc3RhaS5jYWxsYmFjayIsICJDYWxsYmFja0hhbmRsZXIub25fZXBvY2hfZW5kIiwgY2FsbGJhY2tfb25fZXBvY2hfZW5kCiAgICApCiAgICBtb2R1bGVfZmluZGVyLnJlZ2lzdGVyX2FmdGVyKAogICAgICAgICJmYXN0YWkuY2FsbGJhY2siLCAiQ2FsbGJhY2tIYW5kbGVyLm9uX2Vwb2NoX2JlZ2luIiwgY2FsbGJhY2tfb25fZXBvY2hfYmVnaW4KICAgICkKCgpjaGVja19tb2R1bGUoImZhc3RhaSIpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICBtZXRyaWNfbmFtZSA9IGdldGF0dHIoZiwgIl9fbmFtZV9fIiwgImN1c3RvbV9tZXRyaWMiKQogICAgICAgICAgICAgICAgbWV0cmljX25hbWVzLmFwcGVuZChtZXRyaWNfbmFtZSkKPHxmaW1fZW5kfD4="]
["8223f27d57f2e10abbebf2710fc88347f24d72d1-2","8223f27d57f2e10abbebf2710fc88347f24d72d1","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiMgICBfX19fICAgICAgICAgICAgICAgICAgICAgXyAgICAgICAgICAgICAgIF8KIyAgLyBfX198X19fICBfIF9fIF9fXyAgIF9fX3wgfF8gICBfIF9fIF9fXyB8IHwKIyB8IHwgICAvIF8gXHwgJ18gYCBfIFwgLyBfIFwgX198IHwgJ18gYCBfIFx8IHwKIyB8IHxfX3wgKF8pIHwgfCB8IHwgfCB8ICBfXy8gfF8gX3wgfCB8IHwgfCB8IHwKIyAgXF9fX19cX19fL3xffCB8X3wgfF98XF9fX3xcX18oXylffCB8X3wgfF98X3wKIwojICBTaWduIHVwIGZvciBmcmVlIGF0IGh0dHA6Ly93d3cuY29tZXQubWwKIyAgQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQ29tZXQgTUwgSU5DCiMgIFRoaXMgZmlsZSBjYW4gbm90IGJlIGNvcGllZCBhbmQvb3IgZGlzdHJpYnV0ZWQgd2l0aG91dCB0aGUgZXhwcmVzcwojICBwZXJtaXNzaW9uIG9mIENvbWV0IE1MIEluYy4KIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgppbXBvcnQgbG9nZ2luZwoKZnJvbSAuLl9sb2dnaW5nIGltcG9ydCBjaGVja19tb2R1bGUKCkxPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCmRlZiBsZWFybmVyX2NvbnN0cnVjdG9yKGV4cGVyaW1lbnQsIG9yaWdpbmFsLCAqYXJncywgKiprd2FyZ3MpOgogICAgIyMgQ29uc3RydWN0b3IsIHNvIG5vIHJldHVybiB2YWx1ZQogICAgIyMgQXNzdW1lIHRoZSBsYXN0IExlYXJuZXIgaGFzIHRoZSBtb2RlbDoKICAgIHRyeToKICAgICAgICAjIyBhcmdzWzFdOiBMZWFybmVyCiAgICAgICAgIyMgYXJnc1syXTogRGF0YUJ1bmNoCiAgICAgICAgIyMgYXJnc1szXTogTW9kZWwKICAgICAgICAjIyBUaGUgbW9kZWwgaXMgYWN0dWFsbHkgYSB0b3JjaCBtb2RlbCwgc28gd2Ugc2V0IGl0CiAgICAgICAgIyMgaGVyZSB0byB3b3JrIHdpdGggdGhlIHRvcmNoIGxvZ2dlcjoKICAgICAgICBleHBlcmltZW50Ll9zdG9yYWdlWyJ0b3JjaCJdWyJtb2RlbCJdID0gYXJnc1szXQogICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICBMT0dHRVIuZXJyb3IoIkZhaWxlZCB0byBydW4gTGVhcm5lci5fX2luaXRfXyBsb2dnZXIiLCBleGNfaW5mbz1UcnVlKQoKCmRlZiBjYWxsYmFja19vbl9lcG9jaF9iZWdpbihleHBlcmltZW50LCBvcmlnaW5hbCwgcmV0dmFsLCAqYXJncywgKiprd2FyZ3MpOgogICAgaWYgZXhwZXJpbWVudC5hdXRvX21ldHJpY19sb2dnaW5nOgogICAgICAgIHRyeToKICAgICAgICAgICAgY2JoYW5kbGVyID0gYXJnc1swXQogICAgICAgICAgICBleHBlcmltZW50LmxvZ19jdXJyZW50X2Vwb2NoKGNiaGFuZGxlci5zdGF0ZV9kaWN0WyJlcG9jaCJdKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgIExPR0dFUi5lcnJvcigKICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcnVuIENhbGxiYWNrSGFuZGVyLm9uX2Vwb2NoX2JlZ2luIGxvZ2dlciIsIGV4Y19pbmZvPVRydWUKICAgICAgICAgICAgKQogICAgcmV0dXJuIHJldHZhbAoKCmRlZiBjYWxsYmFja19vbl9lcG9jaF9lbmQoZXhwZXJpbWVudCwgb3JpZ2luYWwsIHJldHZhbCwgKmFyZ3MsICoqa3dhcmdzKToKICAgIGlmIGV4cGVyaW1lbnQuYXV0b19tZXRyaWNfbG9nZ2luZzoKICAgICAgICB0cnk6CiAgICAgICAgICAgICMjIGFyZ3NbMF06IGNhbGxiYWNrIGhhbmRsZXIKICAgICAgICAgICAgIyMgYXJnc1sxXTogbWV0cmljczogW2xvc3MsIGFjY3VyYWN5LCAuLi5dCiAgICAgICAgICAgICMjIGFyZ3NbMF0uc3RhdGVfZGljdFsibWV0cmljcyJdOiBuYW1lcyAobm90IGxvc3MgdGhvdWdoKQogICAgICAgICAgICBjYmhhbmRsZXIgPSBhcmdzWzBdCiAgICAgICAgICAgIG1ldHJpY19uYW1lcyA9IFsidmFsX2xvc3MiXQogICAgICAgICAgICBmb3IgZiBpbiBjYmhhbmRsZXIuc3RhdGVfZGljdFsibWV0cmljcyJdOgogICAgICAgICAgICAgICAgbWV0cmljX25hbWUgPSBnZXRhdHRyKGYsICJfX25hbWVfXyIsICJjdXN0b21fbWV0cmljIikKICAgICAgICAgICAgICAgIG1ldHJpY19uYW1lcy5hcHBlbmQobWV0cmljX25hbWUpCiAgICAgICAgICAgIG1ldHJpY192YWx1ZXMgPSBjYmhhbmRsZXIuc3RhdGVfZGljdFsibGFzdF9tZXRyaWNzIl0KICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHppcChtZXRyaWNfbmFtZXMsIG1ldHJpY192YWx1ZXMpOgogICAgICAgICAgICAgICAgZXhwZXJpbWVudC5fbG9nX21ldHJpYygKICAgICAgICAgICAgICAgICAgICBuYW1lLCB2YWx1ZSwgc3RlcD1leHBlcmltZW50LmN1cnJfc3RlcCwgZnJhbWV3b3JrPSJmYXN0YWkiCiAgICAgICAgICAgICAgICApCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgTE9HR0VSLmVycm9yKAogICAgICAgICAgICAgICAgIkZhaWxlZCB0byBydW4gQ2FsbGJhY2tIYW5kZXIub25fZXBvY2hfZW5kIGxvZ2dlciIsIGV4Y19pbmZvPVRydWUKICAgICAgICAgICAgKQogICAgcmV0dXJuIHJldHZhbAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZGVmIHBhdGNoKG1vZHVsZV9maW5kZXIpOgogICAgIyMgRm9yIHRlc3Rpbmc6CiAgICBjaGVja19tb2R1bGUoImZhc3RhaSIpCjx8ZmltX2VuZHw+"]
["8223f27d57f2e10abbebf2710fc88347f24d72d1-3","8223f27d57f2e10abbebf2710fc88347f24d72d1","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiMgICBfX19fICAgICAgICAgICAgICAgICAgICAgXyAgICAgICAgICAgICAgIF8KIyAgLyBfX198X19fICBfIF9fIF9fXyAgIF9fX3wgfF8gICBfIF9fIF9fXyB8IHwKIyB8IHwgICAvIF8gXHwgJ18gYCBfIFwgLyBfIFwgX198IHwgJ18gYCBfIFx8IHwKIyB8IHxfX3wgKF8pIHwgfCB8IHwgfCB8ICBfXy8gfF8gX3wgfCB8IHwgfCB8IHwKIyAgXF9fX19cX19fL3xffCB8X3wgfF98XF9fX3xcX18oXylffCB8X3wgfF98X3wKIwojICBTaWduIHVwIGZvciBmcmVlIGF0IGh0dHA6Ly93d3cuY29tZXQubWwKIyAgQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQ29tZXQgTUwgSU5DCiMgIFRoaXMgZmlsZSBjYW4gbm90IGJlIGNvcGllZCBhbmQvb3IgZGlzdHJpYnV0ZWQgd2l0aG91dCB0aGUgZXhwcmVzcwojICBwZXJtaXNzaW9uIG9mIENvbWV0IE1MIEluYy4KIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgppbXBvcnQgbG9nZ2luZwoKZnJvbSAuLl9sb2dnaW5nIGltcG9ydCBjaGVja19tb2R1bGUKCkxPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCmRlZiBsZWFybmVyX2NvbnN0cnVjdG9yKGV4cGVyaW1lbnQsIG9yaWdpbmFsLCAqYXJncywgKiprd2FyZ3MpOgogICAgIyMgQ29uc3RydWN0b3IsIHNvIG5vIHJldHVybiB2YWx1ZQogICAgIyMgQXNzdW1lIHRoZSBsYXN0IExlYXJuZXIgaGFzIHRoZSBtb2RlbDoKICAgIHRyeToKICAgICAgICAjIyBhcmdzWzFdOiBMZWFybmVyCiAgICAgICAgIyMgYXJnc1syXTogRGF0YUJ1bmNoCiAgICAgICAgIyMgYXJnc1szXTogTW9kZWwKICAgICAgICAjIyBUaGUgbW9kZWwgaXMgYWN0dWFsbHkgYSB0b3JjaCBtb2RlbCwgc28gd2Ugc2V0IGl0CiAgICAgICAgIyMgaGVyZSB0byB3b3JrIHdpdGggdGhlIHRvcmNoIGxvZ2dlcjoKICAgICAgICBleHBlcmltZW50Ll9zdG9yYWdlWyJ0b3JjaCJdWyJtb2RlbCJdID0gYXJnc1szXQogICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICBMT0dHRVIuZXJyb3IoIkZhaWxlZCB0byBydW4gTGVhcm5lci5fX2luaXRfXyBsb2dnZXIiLCBleGNfaW5mbz1UcnVlKQoKCmRlZiBjYWxsYmFja19vbl9lcG9jaF9iZWdpbihleHBlcmltZW50LCBvcmlnaW5hbCwgcmV0dmFsLCAqYXJncywgKiprd2FyZ3MpOgogICAgaWYgZXhwZXJpbWVudC5hdXRvX21ldHJpY19sb2dnaW5nOgogICAgICAgIHRyeToKICAgICAgICAgICAgY2JoYW5kbGVyID0gYXJnc1swXQogICAgICAgICAgICBleHBlcmltZW50LmxvZ19jdXJyZW50X2Vwb2NoKGNiaGFuZGxlci5zdGF0ZV9kaWN0WyJlcG9jaCJdKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgIExPR0dFUi5lcnJvcigKICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcnVuIENhbGxiYWNrSGFuZGVyLm9uX2Vwb2NoX2JlZ2luIGxvZ2dlciIsIGV4Y19pbmZvPVRydWUKICAgICAgICAgICAgKQogICAgcmV0dXJuIHJldHZhbAoKCmRlZiBjYWxsYmFja19vbl9lcG9jaF9lbmQoZXhwZXJpbWVudCwgb3JpZ2luYWwsIHJldHZhbCwgKmFyZ3MsICoqa3dhcmdzKToKICAgIGlmIGV4cGVyaW1lbnQuYXV0b19tZXRyaWNfbG9nZ2luZzoKICAgICAgICB0cnk6CiAgICAgICAgICAgICMjIGFyZ3NbMF06IGNhbGxiYWNrIGhhbmRsZXIKICAgICAgICAgICAgIyMgYXJnc1sxXTogbWV0cmljczogW2xvc3MsIGFjY3VyYWN5LCAuLi5dCiAgICAgICAgICAgICMjIGFyZ3NbMF0uc3RhdGVfZGljdFsibWV0cmljcyJdOiBuYW1lcyAobm90IGxvc3MgdGhvdWdoKQogICAgICAgICAgICBjYmhhbmRsZXIgPSBhcmdzWzBdCiAgICAgICAgICAgIG1ldHJpY19uYW1lcyA9IFsidmFsX2xvc3MiXQogICAgICAgICAgICBmb3IgZiBpbiBjYmhhbmRsZXIuc3RhdGVfZGljdFsibWV0cmljcyJdOgogICAgICAgICAgICAgICAgbWV0cmljX25hbWUgPSBnZXRhdHRyKGYsICJfX25hbWVfXyIsICJjdXN0b21fbWV0cmljIikKICAgICAgICAgICAgICAgIG1ldHJpY19uYW1lcy5hcHBlbmQobWV0cmljX25hbWUpCiAgICAgICAgICAgIG1ldHJpY192YWx1ZXMgPSBjYmhhbmRsZXIuc3RhdGVfZGljdFsibGFzdF9tZXRyaWNzIl0KICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHppcChtZXRyaWNfbmFtZXMsIG1ldHJpY192YWx1ZXMpOgogICAgICAgICAgICAgICAgZXhwZXJpbWVudC5fbG9nX21ldHJpYygKICAgICAgICAgICAgICAgICAgICBuYW1lLCB2YWx1ZSwgc3RlcD1leHBlcmltZW50LmN1cnJfc3RlcCwgZnJhbWV3b3JrPSJmYXN0YWkiCiAgICAgICAgICAgICAgICApCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgTE9HR0VSLmVycm9yKAogICAgICAgICAgICAgICAgIkZhaWxlZCB0byBydW4gQ2FsbGJhY2tIYW5kZXIub25fZXBvY2hfZW5kIGxvZ2dlciIsIGV4Y19pbmZvPVRydWUKICAgICAgICAgICAgKQogICAgcmV0dXJuIHJldHZhbAoKCmRlZiBwYXRjaChtb2R1bGVfZmluZGVyKToKICAgICMjIEZvciB0ZXN0aW5nOgogICAgY2hlY2tfbW9kdWxlKCJmYXN0YWkiKQoKICAgICMjIEZvciBMZWFybmVyIGNvbnN0cnVjdG9yOgo8fGZpbV9ob2xlfD4KICAgICAgICAiZmFzdGFpLmNhbGxiYWNrIiwgIkNhbGxiYWNrSGFuZGxlci5vbl9lcG9jaF9lbmQiLCBjYWxsYmFja19vbl9lcG9jaF9lbmQKICAgICkKICAgIG1vZHVsZV9maW5kZXIucmVnaXN0ZXJfYWZ0ZXIoCiAgICAgICAgImZhc3RhaS5jYWxsYmFjayIsICJDYWxsYmFja0hhbmRsZXIub25fZXBvY2hfYmVnaW4iLCBjYWxsYmFja19vbl9lcG9jaF9iZWdpbgogICAgKQoKCmNoZWNrX21vZHVsZSgiZmFzdGFpIikKPHxmaW1fc3VmZml4fD4KICAgIG1vZHVsZV9maW5kZXIucmVnaXN0ZXJfYWZ0ZXIoCiAgICAgICAgImZhc3RhaS5iYXNpY190cmFpbiIsICJMZWFybmVyLl9faW5pdF9fIiwgbGVhcm5lcl9jb25zdHJ1Y3RvcgogICAgKQogICAgbW9kdWxlX2ZpbmRlci5yZWdpc3Rlcl9hZnRlcigKPHxmaW1fZW5kfD4="]
["8223f27d57f2e10abbebf2710fc88347f24d72d1-4","8223f27d57f2e10abbebf2710fc88347f24d72d1","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiMgICBfX19fICAgICAgICAgICAgICAgICAgICAgXyAgICAgICAgICAgICAgIF8KIyAgLyBfX198X19fICBfIF9fIF9fXyAgIF9fX3wgfF8gICBfIF9fIF9fXyB8IHwKIyB8IHwgICAvIF8gXHwgJ18gYCBfIFwgLyBfIFwgX198IHwgJ18gYCBfIFx8IHwKIyB8IHxfX3wgKF8pIHwgfCB8IHwgfCB8ICBfXy8gfF8gX3wgfCB8IHwgfCB8IHwKIyAgXF9fX19cX19fL3xffCB8X3wgfF98XF9fX3xcX18oXylffCB8X3wgfF98X3wKIwojICBTaWduIHVwIGZvciBmcmVlIGF0IGh0dHA6Ly93d3cuY29tZXQubWwKIyAgQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQ29tZXQgTUwgSU5DCiMgIFRoaXMgZmlsZSBjYW4gbm90IGJlIGNvcGllZCBhbmQvb3IgZGlzdHJpYnV0ZWQgd2l0aG91dCB0aGUgZXhwcmVzcwojICBwZXJtaXNzaW9uIG9mIENvbWV0IE1MIEluYy4KIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgppbXBvcnQgbG9nZ2luZwoKZnJvbSAuLl9sb2dnaW5nIGltcG9ydCBjaGVja19tb2R1bGUKCkxPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCmRlZiBsZWFybmVyX2NvbnN0cnVjdG9yKGV4cGVyaW1lbnQsIG9yaWdpbmFsLCAqYXJncywgKiprd2FyZ3MpOgogICAgIyMgQ29uc3RydWN0b3IsIHNvIG5vIHJldHVybiB2YWx1ZQogICAgIyMgQXNzdW1lIHRoZSBsYXN0IExlYXJuZXIgaGFzIHRoZSBtb2RlbDoKICAgIHRyeToKICAgICAgICAjIyBhcmdzWzFdOiBMZWFybmVyCiAgICAgICAgIyMgYXJnc1syXTogRGF0YUJ1bmNoCiAgICAgICAgIyMgYXJnc1szXTogTW9kZWwKICAgICAgICAjIyBUaGUgbW9kZWwgaXMgYWN0dWFsbHkgYSB0b3JjaCBtb2RlbCwgc28gd2Ugc2V0IGl0CiAgICAgICAgIyMgaGVyZSB0byB3b3JrIHdpdGggdGhlIHRvcmNoIGxvZ2dlcjoKICAgICAgICBleHBlcmltZW50Ll9zdG9yYWdlWyJ0b3JjaCJdWyJtb2RlbCJdID0gYXJnc1szXQogICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICBMT0dHRVIuZXJyb3IoIkZhaWxlZCB0byBydW4gTGVhcm5lci5fX2luaXRfXyBsb2dnZXIiLCBleGNfaW5mbz1UcnVlKQoKCmRlZiBjYWxsYmFja19vbl9lcG9jaF9iZWdpbihleHBlcmltZW50LCBvcmlnaW5hbCwgcmV0dmFsLCAqYXJncywgKiprd2FyZ3MpOgogICAgaWYgZXhwZXJpbWVudC5hdXRvX21ldHJpY19sb2dnaW5nOgogICAgICAgIHRyeToKICAgICAgICAgICAgY2JoYW5kbGVyID0gYXJnc1swXQogICAgICAgICAgICBleHBlcmltZW50LmxvZ19jdXJyZW50X2Vwb2NoKGNiaGFuZGxlci5zdGF0ZV9kaWN0WyJlcG9jaCJdKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgIExPR0dFUi5lcnJvcigKICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcnVuIENhbGxiYWNrSGFuZGVyLm9uX2Vwb2NoX2JlZ2luIGxvZ2dlciIsIGV4Y19pbmZvPVRydWUKICAgICAgICAgICAgKQogICAgcmV0dXJuIHJldHZhbAoKCmRlZiBjYWxsYmFja19vbl9lcG9jaF9lbmQoZXhwZXJpbWVudCwgb3JpZ2luYWwsIHJldHZhbCwgKmFyZ3MsICoqa3dhcmdzKToKICAgIGlmIGV4cGVyaW1lbnQuYXV0b19tZXRyaWNfbG9nZ2luZzoKICAgICAgICB0cnk6CiAgICAgICAgICAgICMjIGFyZ3NbMF06IGNhbGxiYWNrIGhhbmRsZXIKICAgICAgICAgICAgIyMgYXJnc1sxXTogbWV0cmljczogW2xvc3MsIGFjY3VyYWN5LCAuLi5dCiAgICAgICAgICAgICMjIGFyZ3NbMF0uc3RhdGVfZGljdFsibWV0cmljcyJdOiBuYW1lcyAobm90IGxvc3MgdGhvdWdoKQogICAgICAgICAgICBjYmhhbmRsZXIgPSBhcmdzWzBdCiAgICAgICAgICAgIG1ldHJpY19uYW1lcyA9IFsidmFsX2xvc3MiXQogICAgICAgICAgICBmb3IgZiBpbiBjYmhhbmRsZXIuc3RhdGVfZGljdFsibWV0cmljcyJdOgogICAgICAgICAgICAgICAgbWV0cmljX25hbWUgPSBnZXRhdHRyKGYsICJfX25hbWVfXyIsICJjdXN0b21fbWV0cmljIikKICAgICAgICAgICAgICAgIG1ldHJpY19uYW1lcy5hcHBlbmQobWV0cmljX25hbWUpCiAgICAgICAgICAgIG1ldHJpY192YWx1ZXMgPSBjYmhhbmRsZXIuc3RhdGVfZGljdFsibGFzdF9tZXRyaWNzIl0KICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHppcChtZXRyaWNfbmFtZXMsIG1ldHJpY192YWx1ZXMpOgogICAgICAgICAgICAgICAgZXhwZXJpbWVudC5fbG9nX21ldHJpYygKICAgICAgICAgICAgICAgICAgICBuYW1lLCB2YWx1ZSwgc3RlcD1leHBlcmltZW50LmN1cnJfc3RlcCwgZnJhbWV3b3JrPSJmYXN0YWkiCiAgICAgICAgICAgICAgICApCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgTE9HR0VSLmVycm9yKAogICAgICAgICAgICAgICAgIkZhaWxlZCB0byBydW4gQ2FsbGJhY2tIYW5kZXIub25fZXBvY2hfZW5kIGxvZ2dlciIsIGV4Y19pbmZvPVRydWUKICAgICAgICAgICAgKQogICAgcmV0dXJuIHJldHZhbAoKCmRlZiBwYXRjaChtb2R1bGVfZmluZGVyKToKICAgICMjIEZvciB0ZXN0aW5nOgogICAgY2hlY2tfbW9kdWxlKCJmYXN0YWkiKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgIyMgRm9yIExlYXJuZXIgY29uc3RydWN0b3I6CiAgICBtb2R1bGVfZmluZGVyLnJlZ2lzdGVyX2FmdGVyKAogICAgICAgICJmYXN0YWkuYmFzaWNfdHJhaW4iLCAiTGVhcm5lci5fX2luaXRfXyIsIGxlYXJuZXJfY29uc3RydWN0b3IKICAgICkKPHxmaW1fZW5kfD4="]
["01d334080e5bbdcff4c8d2521946137b9e6af6cc-1","01d334080e5bbdcff4c8d2521946137b9e6af6cc","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFuZ3IKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgcHV0Y2hhcgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo8fGZpbV9ob2xlfD4KICAgIGRlZiBydW4oc2VsZiwgc3RyaW5nKToKICAgICAgICBzdGRvdXQgPSBzZWxmLnN0YXRlLnBvc2l4LmdldF9mZCgxKQogICAgICAgIGlmIHN0ZG91dCBpcyBOb25lOgogICAgICAgICAgICByZXR1cm4gLTEKICAgICAgICBzdGRvdXQud3JpdGVfZGF0YShzdHJpbmdbNzowXSkKICAgICAgICByZXR1cm4gc3RyaW5nICYgMHhmZgo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgcHV0Y2hhcihhbmdyLlNpbVByb2NlZHVyZSk6CiAgICAjcHlsaW50OmRpc2FibGU9YXJndW1lbnRzLWRpZmZlcgoKPHxmaW1fZW5kfD4="]
["01d334080e5bbdcff4c8d2521946137b9e6af6cc-2","01d334080e5bbdcff4c8d2521946137b9e6af6cc","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFuZ3IKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgcHV0Y2hhcgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKY2xhc3MgcHV0Y2hhcihhbmdyLlNpbVByb2NlZHVyZSk6CiAgICAjcHlsaW50OmRpc2FibGU9YXJndW1lbnRzLWRpZmZlcgoKICAgIGRlZiBydW4oc2VsZiwgc3RyaW5nKToKPHxmaW1faG9sZXw+CiAgICAgICAgcmV0dXJuIHN0cmluZyAmIDB4ZmYKPHxmaW1fc3VmZml4fD4KICAgICAgICBzdGRvdXQgPSBzZWxmLnN0YXRlLnBvc2l4LmdldF9mZCgxKQogICAgICAgIGlmIHN0ZG91dCBpcyBOb25lOgogICAgICAgICAgICByZXR1cm4gLTEKICAgICAgICBzdGRvdXQud3JpdGVfZGF0YShzdHJpbmdbNzowXSkKPHxmaW1fZW5kfD4="]
["01d334080e5bbdcff4c8d2521946137b9e6af6cc-3","01d334080e5bbdcff4c8d2521946137b9e6af6cc","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFuZ3IKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgcHV0Y2hhcgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKY2xhc3MgcHV0Y2hhcihhbmdyLlNpbVByb2NlZHVyZSk6Cjx8ZmltX2hvbGV8PgogICAgICAgIGlmIHN0ZG91dCBpcyBOb25lOgogICAgICAgICAgICByZXR1cm4gLTEKICAgICAgICBzdGRvdXQud3JpdGVfZGF0YShzdHJpbmdbNzowXSkKICAgICAgICByZXR1cm4gc3RyaW5nICYgMHhmZgo8fGZpbV9zdWZmaXh8PgogICAgI3B5bGludDpkaXNhYmxlPWFyZ3VtZW50cy1kaWZmZXIKCiAgICBkZWYgcnVuKHNlbGYsIHN0cmluZyk6CiAgICAgICAgc3Rkb3V0ID0gc2VsZi5zdGF0ZS5wb3NpeC5nZXRfZmQoMSkKPHxmaW1fZW5kfD4="]
["01d334080e5bbdcff4c8d2521946137b9e6af6cc-4","01d334080e5bbdcff4c8d2521946137b9e6af6cc","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFuZ3IKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgcHV0Y2hhcgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKY2xhc3MgcHV0Y2hhcihhbmdyLlNpbVByb2NlZHVyZSk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICNweWxpbnQ6ZGlzYWJsZT1hcmd1bWVudHMtZGlmZmVyCgogICAgZGVmIHJ1bihzZWxmLCBzdHJpbmcpOgogICAgICAgIHN0ZG91dCA9IHNlbGYuc3RhdGUucG9zaXguZ2V0X2ZkKDEpCjx8ZmltX2VuZHw+"]
["f90cb62d32971595649d85f2dff60745d054c8c3-1","f90cb62d32971595649d85f2dff60745d054c8c3","PHxmaW1fcHJlZml4fD4KZGVmIGludGNvbnZlcnQoZCx4LHkpOgogICAgbnVtYXI9W10KICAgIGRlbmFyPVtdCiAgICBmb3IgaSBpbiByYW5nZSgxLHgpOgogICAgICAgIGZvciBqIGluIHJhbmdlKDEseSk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgcT1pL2oKICAgICAgICAgICAgaWYgKHN0cihkKSBpbiBzdHIocSkpIGFuZCBmbG9hdChxKS1mbG9hdChkKTwxLjA6CiAgICAgICAgICAgICAgICBudW1hci5hcHBlbmQoaW50KGkpKQogICAgICAgICAgICAgICAgZGVuYXIuYXBwZW5kKGludChqKSkKPHxmaW1fZW5kfD4="]
["a9dea46e46f17ea894d53412626e300169100b60-1","a9dea46e46f17ea894d53412626e300169100b60",{"$cut":{"chars":29132,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNvcHkKaW1wb3J0IGpzb24KCmZyb20gYmFzZXRlc3RjYXNlIGltcG9ydCBCYXNlVGVzdENhc2UKZnJvbSBjb3VjaGJhc2VfaGVscGVyLmRvY3VtZW50IGltcG9ydCBWaWV3CmZyb20gY291Y2hiYXNlX2hlbHBlci5kb2N1bWVudGdlbmVyYXRvciBpbXBvcnQgZG9jX2dlbmVyYXRvcgpmcm9tIGNvdWNoYmFzZV9oZWxwZXIuZHVyYWJpbGl0eV9oZWxwZXIgaW1wb3J0IER1cmFiaWxpdHlIZWxwZXIKZnJvbSBtZW1iYXNlLmFwaS5yZXN0X2NsaWVudCBpbXBvcnQgUmVzdENvbm5lY3Rpb24KZnJvbSByZW1vdGUucmVtb3RlX3V0aWwgaW1wb3J0IFJlbW90ZU1hY2hpbmVTaGVsbENvbm5lY3Rpb24KZnJvbSBjb3VjaGJhc2VfaGVscGVyLmR1cmFiaWxpdHlfaGVscGVyIGltcG9ydCBEdXJhYmxlRXhjZXB0aW9ucwoKCmNsYXNzIFJlYmFsYW5jZUJhc2VUZXN0KEJhc2VUZXN0Q2FzZSk6CiAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgc3VwZXIoUmViYWxhbmNlQmFzZVRlc3QsIHNlbGYpLnNldFVwKCkKICAgICAgICBzZWxmLnJlc3QgPSBSZXN0Q29ubmVjdGlvbihzZWxmLmNsdXN0ZXIubWFzdGVyKQogICAgICAgIHNlbGYuZG9jX29wcyA9IHNlbGYuaW5wdXQucGFyYW0oImRvY19vcHMiLCAiY3JlYXRlIikKICAgICAgICBzZWxmLmtleV9zaXplID0gc2VsZi5pbnB1dC5wYXJhbSgia2V5X3NpemUiLCAwKQogICAgICAgIHNlbGYuem9uZSA9IHNlbGYuaW5wdXQucGFyYW0oInpvbmUiLCAxKQogICAgICAgIHNlbGYucmVwbGljYV90b191cGRhdGUgPSBzZWxmLmlucHV0LnBhcmFtKCJuZXdfcmVwbGljYSIsIE5vbmUpCiAgICAgICAgc2VsZi5kZWZhdWx0X3ZpZXdfbmFtZSA9ICJkZWZhdWx0X3ZpZXciCiAgICAgICAgc2VsZi5kZWZhdWxfbWFwX2Z1bmMgPSAiZnVuY3Rpb24gKGRvYykge1xuICBlbWl0KGRvYy5faWQsIGRvYyk7XG59IgogICAgICAgIHNlbGYuZGVmYXVsdF92aWV3ID0gVmlldyhzZWxmLmRlZmF1bHRfdmlld19uYW1lLCBzZWxmLmRlZmF1bF9tYXBfZnVuYywgTm9uZSkKICAgICAgICBzZWxmLm1heF92ZXJpZnkgPSBzZWxmLmlucHV0LnBhcmFtKCJtYXhfdmVyaWZ5IiwgTm9uZSkKICAgICAgICBzZWxmLnN0ZF92YnVja2V0X2Rpc3QgPSBzZWxmLmlucHV0LnBhcmFtKCJzdGRfdmJ1Y2tldF9kaXN0IiwgTm9uZSkKICAgICAgICBzZWxmLmtleSA9ICd0ZXN0X2RvY3MnLnJqdXN0KHNlbGYua2V5X3NpemUsICcwJykKICAgICAgICBzZWxmLmZsdXNoZXJfYmF0Y2hfc3BsaXRfdHJpZ2dlciA9IHNlbGYuaW5wdXQucGFyYW0oImZsdXNoZXJfYmF0Y2hfc3BsaXRfdHJpZ2dlciIsIE5vbmUpCiAgICAgICAgc2VsZi5pdGVtcyA9IHNlbGYubnVtX2l0ZW1zCiAgICAgICAgbm9kZV9yYW1fcmF0aW8gPSBzZWxmLmJ1Y2tldF91dGlsLmJhc2VfYnVja2V0X3JhdGlvKHNlbGYuY2x1c3Rlci5zZXJ2ZXJzKQogICAgICAgIGluZm8gPSBzZWxmLnJlc3QuZ2V0X25vZGVzX3NlbGYoKQogICAgICAgIHNlbGYucmVzdC5pbml0X2NsdXN0ZXIodXNlcm5hbWU9c2VsZi5jbHVzdGVyLm1hc3Rlci5yZXN0X3VzZXJuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ9c2VsZi5jbHVzdGVyLm1hc3Rlci5yZXN0X3Bhc3N3b3JkKQogICAgICAgIHNlbGYucmVzdC5pbml0X2NsdXN0ZXJfbWVtb3J5UXVvdGEobWVtb3J5UXVvdGE9aW50KGluZm8ubWNkTWVtb3J5UmVzZXJ2ZWQqbm9kZV9yYW1fcmF0aW8pKQogICAgICAgIHNlbGYuY2hlY2tfdGVtcG9yYXJ5X2ZhaWx1cmVfZXhjZXB0aW9uID0gRmFsc2UKICAgICAgICBub2Rlc19pbml0ID0gc2VsZi5jbHVzdGVyLnNlcnZlcnNbMTpzZWxmLm5vZGVzX2luaXRdIGlmIHNlbGYubm9kZXNfaW5pdCAhPSAxIGVsc2UgW10KICAgICAgICBpZiBub2Rlc19pbml0OgogICAgICAgICAgICByZXN1bHQgPSBzZWxmLnRhc2sucmViYWxhbmNlKFtzZWxmLmNsdXN0ZXIubWFzdGVyXSwgbm9kZXNfaW5pdCwgW10pCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQsICJJbml0aWFsIHJlYmFsYW5jZSBmYWlsZWQiKQogICAgICAgIHNlbGYuY2x1c3Rlci5ub2Rlc19pbl9jbHVzdGVyLmV4dGVuZChbc2VsZi5jbHVzdGVyLm1hc3Rlcl0gKyBub2Rlc19pbml0KQoKICAgICAgICBzZWxmLmJ1Y2tldF91dGlsLmFkZF9yYmFjX3VzZXIoKQogICAgICAgIGlmIHNlbGYuc3RhbmRhcmRfYnVja2V0cyA+IDEwOgogICAgICAgICAgICBzZWxmLmJ1Y2tldF91dGlsLmNoYW5nZV9tYXhfYnVja2V0cyhzZWxmLnN0YW5kYXJkX2J1Y2tldHMpCiAgICAgICAgc2VsZi5jcmVhdGVfYnVja2V0cygpCiAgICAgICAgc2VsZi5zbGVlcCgyMCkKCiAgICAgICAgaWYgc2VsZi5mbHVzaGVyX2JhdGNoX3NwbGl0X3RyaWdnZXI6CiAgICAgICAgICAgIHNlbGYuYnVja2V0X3V0aWwuc2V0X2ZsdXNoZXJfYmF0Y2hfc3BsaXRfdHJpZ2dlcihzZWxmLmNsdXN0ZXIubWFzdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mbHVzaGVyX2JhdGNoX3NwbGl0X3RyaWdnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1Y2tldF91dGlsLmJ1Y2tldHMpCgogICAgICAgIHNlbGYuZ2VuX2NyZWF0ZSA9IHNlbGYuZ2V0X2RvY19nZW5lcmF0b3IoMCwgc2VsZi5udW1faXRlbXMpCiAgICAgICAgaWYgc2VsZi5hY3RpdmVfcmVzaWRlbnRfdGhyZXNob2xkIDwgMTAwOgogICAgICAgICAgICBzZWxmLmNoZWNrX3RlbXBvcmFyeV9mYWlsdXJlX2V4Y2VwdGlvbiA9IFRydWUKICAgICAgICBpZiBub3Qgc2VsZi5hdG9taWNpdHk6CiAgICAgICAgICAgIHRhc2tzX2luZm8gPSBzZWxmLl9sb2FkX2FsbF9idWNrZXRzKHNlbGYuY2x1c3Rlciwgc2VsZi5nZW5fY3JlYXRlLCAiY3JlYXRlIiwgMCkKICAgICAgICAgICAgc2VsZi5sb2cuaW5mbygiVmVyaWZ5aW5nIG51bV9pdGVtcyBjb3VudHMgYWZ0ZXIgZG9jX29wcyIpCiAgICAgICAgICAgIHNlbGYuYnVja2V0X3V0aWwuX3dhaXRfZm9yX3N0YXRzX2FsbF9idWNrZXRzKCkK"}}]
["8e4cf3d14f7e8419e78467af533962f232475b38-1","8e4cf3d14f7e8419e78467af533962f232475b38","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCgppbXBvcnQgcHl0ZXN0CmltcG9ydCByZXNwb25zZXMKCmZyb20gdGVzdHJhaWxfYXBpIGltcG9ydCBTdGF0dXNDb2RlRXJyb3IKCgpkZWYgYWRkX2F0dGFjaG1lbnQocik6CiAgICBhc3NlcnQgJ211bHRpcGFydC9mb3JtLWRhdGEnIGluIHIuaGVhZGVyc1snQ29udGVudC1UeXBlJ10KICAgIGFzc2VydCByLmhlYWRlcnNbJ1VzZXItQWdlbnQnXS5zdGFydHN3aXRoKCdQeXRob24gVGVzdFJhaWwgQVBJIHY6JykKICAgIGFzc2VydCByLmJvZHkKICAgIHJldHVybiAyMDAsIHt9LCBqc29uLmR1bXBzKHsnYXR0YWNobWVudF9pZCc6IDQzM30pCgoKZGVmIGdldF9hdHRhY2htZW50KHIsIHBhdGgpOgogICAgZmlsZSA9IFBhdGgocGF0aCwgJ2F0dGFjaC5qcGcnKQogICAgd2l0aCBmaWxlLm9wZW4oJ3JiJykgYXMgZjoKICAgICAgICByZXR1cm4gMjAwLCB7fSwgZgoKCmRlZiB0ZXN0X2FkZF9hdHRhY2htZW50X3RvX3BsYW4oYXBpLCBtb2NrLCBob3N0LCBiYXNlX3BhdGgpOgogICAgbW9jay5hZGRfY2FsbGJhY2soCiAgICAgICAgcmVzcG9uc2VzLlBPU1QsCiAgICAgICAgJ3t9aW5kZXgucGhwPy9hcGkvdjIvYWRkX2F0dGFjaG1lbnRfdG9fcGxhbi8zJy5mb3JtYXQoaG9zdCksCiAgICAgICAgYWRkX2F0dGFjaG1lbnQKICAgICkKICAgIGZpbGUgPSBQYXRoKGJhc2VfcGF0aCwgJ2F0dGFjaC5qcGcnKQogICAgcmVzcCA9IGFwaS5hdHRhY2htZW50cy5hZGRfYXR0YWNobWVudF90b19wbGFuKDMsIGZpbGUpCiAgICBhc3NlcnQgcmVzcFsnYXR0YWNobWVudF9pZCddID09IDQzMwoKCmRlZiB0ZXN0X2FkZF9hdHRhY2htZW50X3RvX3BsYW5fZW50cnkoYXBpLCBtb2NrLCBob3N0LCBiYXNlX3BhdGgpOgogICAgbW9jay5hZGRfY2FsbGJhY2soCiAgICAgICAgcmVzcG9uc2VzLlBPU1QsCiAgICAgICAgJ3t9aW5kZXgucGhwPy9hcGkvdjIvYWRkX2F0dGFjaG1lbnRfdG9fcGxhbl9lbnRyeS8zLzQnLmZvcm1hdChob3N0KSwKICAgICAgICBhZGRfYXR0YWNobWVudAogICAgKQogICAgZmlsZSA9IFBhdGgoYmFzZV9wYXRoLCAnYXR0YWNoLmpwZycpCiAgICByZXNwID0gYXBpLmF0dGFjaG1lbnRzLmFkZF9hdHRhY2htZW50X3RvX3BsYW5fZW50cnkoMywgNCwgZmlsZSkKICAgIGFzc2VydCByZXNwWydhdHRhY2htZW50X2lkJ10gPT0gNDMzCgoKZGVmIHRlc3RfYWRkX2F0dGFjaG1lbnRfdG9fcmVzdWx0X3BhdGhsaWIoYXBpLCBtb2NrLCBob3N0LCBiYXNlX3BhdGgpOgogICAgbW9jay5hZGRfY2FsbGJhY2soCiAgICAgICAgcmVzcG9uc2VzLlBPU1QsCiAgICAgICAgJ3t9aW5kZXgucGhwPy9hcGkvdjIvYWRkX2F0dGFjaG1lbnRfdG9fcmVzdWx0LzInLmZvcm1hdChob3N0KSwKICAgICAgICBhZGRfYXR0YWNobWVudAogICAgKQogICAgZmlsZSA9IFBhdGgoYmFzZV9wYXRoLCAnYXR0YWNoLmpwZycpCiAgICByZXNwID0gYXBpLmF0dGFjaG1lbnRzLmFkZF9hdHRhY2htZW50X3RvX3Jlc3VsdCgyLCBmaWxlKQogICAgYXNzZXJ0IHJlc3BbJ2F0dGFjaG1lbnRfaWQnXSA9PSA0MzMKCgpkZWYgdGVzdF9hZGRfYXR0YWNobWVudF90b19yZXN1bHRfc3RyKGFwaSwgbW9jaywgaG9zdCwgYmFzZV9wYXRoKToKICAgIG1vY2suYWRkX2NhbGxiYWNrKAogICAgICAgIHJlc3BvbnNlcy5QT1NULAogICAgICAgICd7fWluZGV4LnBocD8vYXBpL3YyL2FkZF9hdHRhY2htZW50X3RvX3Jlc3VsdC8yJy5mb3JtYXQoaG9zdCksCiAgICAgICAgYWRkX2F0dGFjaG1lbnQKICAgICkKICAgIGZpbGUgPSBQYXRoKGJhc2VfcGF0aCwgJ2F0dGFjaC5qcGcnKQogICAgcmVzcCA9IGFwaS5hdHRhY2htZW50cy5hZGRfYXR0YWNobWVudF90b19yZXN1bHQoMiwgc3RyKGZpbGUpKQogICAgYXNzZXJ0IHJlc3BbJ2F0dGFjaG1lbnRfaWQnXSA9PSA0MzMKCgpkZWYgdGVzdF9hZGRfYXR0YWNobWVudF90b19ydW4oYXBpLCBtb2NrLCBob3N0LCBiYXNlX3BhdGgpOgogICAgbW9jay5hZGRfY2FsbGJhY2soCiAgICAgICAgbWV0aG9kPXJlc3BvbnNlcy5QT1NULAogICAgICAgIHVybD0ne31pbmRleC5waHA/L2FwaS92Mi9hZGRfYXR0YWNobWVudF90b19ydW4vMicuZm9ybWF0KGhvc3QpLAogICAgICAgIGNhbGxiYWNrPWFkZF9hdHRhY2htZW50CiAgICApCiAgICBmaWxlID0gUGF0aChiYXNlX3BhdGgsICdhdHRhY2guanBnJykKICAgIHJlc3AgPSBhcGkuYXR0YWNobWVudHMuYWRkX2F0dGFjaG1lbnRfdG9fcnVuKDIsIGZpbGUpCiAgICBhc3NlcnQgcmVzcFsnYXR0YWNobWVudF9pZCddID09IDQzMwoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIHRlc3RfYWRkX2F0dGFjaG1lbnRfdG9fY2FzZV9zdHIoYXBpLCBtb2NrLCBob3N0LCBiYXNlX3BhdGgpOgogICAgbW9jay5hZGRfY2FsbGJhY2soCiAgICAgICAgcmVzcG9uc2VzLlBPU1QsCiAgICAgICAgJ3t9aW5kZXgucGhwPy9hcGkvdjIvYWRkX2F0dGFjaG1lbnRfdG9fY2FzZS8yJy5mb3JtYXQoaG9zdCksCjx8ZmltX2VuZHw+"]
["8e4cf3d14f7e8419e78467af533962f232475b38-2","8e4cf3d14f7e8419e78467af533962f232475b38","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCgppbXBvcnQgcHl0ZXN0CmltcG9ydCByZXNwb25zZXMKCmZyb20gdGVzdHJhaWxfYXBpIGltcG9ydCBTdGF0dXNDb2RlRXJyb3IKCgpkZWYgYWRkX2F0dGFjaG1lbnQocik6CiAgICBhc3NlcnQgJ211bHRpcGFydC9mb3JtLWRhdGEnIGluIHIuaGVhZGVyc1snQ29udGVudC1UeXBlJ10KICAgIGFzc2VydCByLmhlYWRlcnNbJ1VzZXItQWdlbnQnXS5zdGFydHN3aXRoKCdQeXRob24gVGVzdFJhaWwgQVBJIHY6JykKICAgIGFzc2VydCByLmJvZHkKICAgIHJldHVybiAyMDAsIHt9LCBqc29uLmR1bXBzKHsnYXR0YWNobWVudF9pZCc6IDQzM30pCgoKZGVmIGdldF9hdHRhY2htZW50KHIsIHBhdGgpOgogICAgZmlsZSA9IFBhdGgocGF0aCwgJ2F0dGFjaC5qcGcnKQogICAgd2l0aCBmaWxlLm9wZW4oJ3JiJykgYXMgZjoKICAgICAgICByZXR1cm4gMjAwLCB7fSwgZgoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIHRlc3RfYWRkX2F0dGFjaG1lbnRfdG9fcGxhbihhcGksIG1vY2ssIGhvc3QsIGJhc2VfcGF0aCk6CiAgICBtb2NrLmFkZF9jYWxsYmFjaygKICAgICAgICByZXNwb25zZXMuUE9TVCwKICAgICAgICAne31pbmRleC5waHA/L2FwaS92Mi9hZGRfYXR0YWNobWVudF90b19wbGFuLzMnLmZvcm1hdChob3N0KSwKPHxmaW1fZW5kfD4="]
["8e4cf3d14f7e8419e78467af533962f232475b38-3","8e4cf3d14f7e8419e78467af533962f232475b38","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCgppbXBvcnQgcHl0ZXN0CmltcG9ydCByZXNwb25zZXMKCmZyb20gdGVzdHJhaWxfYXBpIGltcG9ydCBTdGF0dXNDb2RlRXJyb3IKCgpkZWYgYWRkX2F0dGFjaG1lbnQocik6CiAgICBhc3NlcnQgJ211bHRpcGFydC9mb3JtLWRhdGEnIGluIHIuaGVhZGVyc1snQ29udGVudC1UeXBlJ10KICAgIGFzc2VydCByLmhlYWRlcnNbJ1VzZXItQWdlbnQnXS5zdGFydHN3aXRoKCdQeXRob24gVGVzdFJhaWwgQVBJIHY6JykKICAgIGFzc2VydCByLmJvZHkKICAgIHJldHVybiAyMDAsIHt9LCBqc29uLmR1bXBzKHsnYXR0YWNobWVudF9pZCc6IDQzM30pCgoKZGVmIGdldF9hdHRhY2htZW50KHIsIHBhdGgpOgogICAgZmlsZSA9IFBhdGgocGF0aCwgJ2F0dGFjaC5qcGcnKQogICAgd2l0aCBmaWxlLm9wZW4oJ3JiJykgYXMgZjoKICAgICAgICByZXR1cm4gMjAwLCB7fSwgZgoKCmRlZiB0ZXN0X2FkZF9hdHRhY2htZW50X3RvX3BsYW4oYXBpLCBtb2NrLCBob3N0LCBiYXNlX3BhdGgpOgogICAgbW9jay5hZGRfY2FsbGJhY2soCiAgICAgICAgcmVzcG9uc2VzLlBPU1QsCiAgICAgICAgJ3t9aW5kZXgucGhwPy9hcGkvdjIvYWRkX2F0dGFjaG1lbnRfdG9fcGxhbi8zJy5mb3JtYXQoaG9zdCksCiAgICAgICAgYWRkX2F0dGFjaG1lbnQKICAgICkKICAgIGZpbGUgPSBQYXRoKGJhc2VfcGF0aCwgJ2F0dGFjaC5qcGcnKQogICAgcmVzcCA9IGFwaS5hdHRhY2htZW50cy5hZGRfYXR0YWNobWVudF90b19wbGFuKDMsIGZpbGUpCiAgICBhc3NlcnQgcmVzcFsnYXR0YWNobWVudF9pZCddID09IDQzMwoKCmRlZiB0ZXN0X2FkZF9hdHRhY2htZW50X3RvX3BsYW5fZW50cnkoYXBpLCBtb2NrLCBob3N0LCBiYXNlX3BhdGgpOgogICAgbW9jay5hZGRfY2FsbGJhY2soCiAgICAgICAgcmVzcG9uc2VzLlBPU1QsCiAgICAgICAgJ3t9aW5kZXgucGhwPy9hcGkvdjIvYWRkX2F0dGFjaG1lbnRfdG9fcGxhbl9lbnRyeS8zLzQnLmZvcm1hdChob3N0KSwKICAgICAgICBhZGRfYXR0YWNobWVudAogICAgKQogICAgZmlsZSA9IFBhdGgoYmFzZV9wYXRoLCAnYXR0YWNoLmpwZycpCiAgICByZXNwID0gYXBpLmF0dGFjaG1lbnRzLmFkZF9hdHRhY2htZW50X3RvX3BsYW5fZW50cnkoMywgNCwgZmlsZSkKICAgIGFzc2VydCByZXNwWydhdHRhY2htZW50X2lkJ10gPT0gNDMzCgoKZGVmIHRlc3RfYWRkX2F0dGFjaG1lbnRfdG9fcmVzdWx0X3BhdGhsaWIoYXBpLCBtb2NrLCBob3N0LCBiYXNlX3BhdGgpOgogICAgbW9jay5hZGRfY2FsbGJhY2soCiAgICAgICAgcmVzcG9uc2VzLlBPU1QsCiAgICAgICAgJ3t9aW5kZXgucGhwPy9hcGkvdjIvYWRkX2F0dGFjaG1lbnRfdG9fcmVzdWx0LzInLmZvcm1hdChob3N0KSwKICAgICAgICBhZGRfYXR0YWNobWVudAogICAgKQogICAgZmlsZSA9IFBhdGgoYmFzZV9wYXRoLCAnYXR0YWNoLmpwZycpCiAgICByZXNwID0gYXBpLmF0dGFjaG1lbnRzLmFkZF9hdHRhY2htZW50X3RvX3Jlc3VsdCgyLCBmaWxlKQogICAgYXNzZXJ0IHJlc3BbJ2F0dGFjaG1lbnRfaWQnXSA9PSA0MzMKCgpkZWYgdGVzdF9hZGRfYXR0YWNobWVudF90b19yZXN1bHRfc3RyKGFwaSwgbW9jaywgaG9zdCwgYmFzZV9wYXRoKToKICAgIG1vY2suYWRkX2NhbGxiYWNrKAogICAgICAgIHJlc3BvbnNlcy5QT1NULAogICAgICAgICd7fWluZGV4LnBocD8vYXBpL3YyL2FkZF9hdHRhY2htZW50X3RvX3Jlc3VsdC8yJy5mb3JtYXQoaG9zdCksCiAgICAgICAgYWRkX2F0dGFjaG1lbnQKICAgICkKICAgIGZpbGUgPSBQYXRoKGJhc2VfcGF0aCwgJ2F0dGFjaC5qcGcnKQogICAgcmVzcCA9IGFwaS5hdHRhY2htZW50cy5hZGRfYXR0YWNobWVudF90b19yZXN1bHQoMiwgc3RyKGZpbGUpKQogICAgYXNzZXJ0IHJlc3BbJ2F0dGFjaG1lbnRfaWQnXSA9PSA0MzMKCgpkZWYgdGVzdF9hZGRfYXR0YWNobWVudF90b19ydW4oYXBpLCBtb2NrLCBob3N0LCBiYXNlX3BhdGgpOgogICAgbW9jay5hZGRfY2FsbGJhY2soCiAgICAgICAgbWV0aG9kPXJlc3BvbnNlcy5QT1NULAogICAgICAgIHVybD0ne31pbmRleC5waHA/L2FwaS92Mi9hZGRfYXR0YWNobWVudF90b19ydW4vMicuZm9ybWF0KGhvc3QpLAogICAgICAgIGNhbGxiYWNrPWFkZF9hdHRhY2htZW50CiAgICApCiAgICBmaWxlID0gUGF0aChiYXNlX3BhdGgsICdhdHRhY2guanBnJykKICAgIHJlc3AgPSBhcGkuYXR0YWNobWVudHMuYWRkX2F0dGFjaG1lbnRfdG9fcnVuKDIsIGZpbGUpCiAgICBhc3NlcnQgcmVzcFsnYXR0YWNobWVudF9pZCddID09IDQzMwoKCmRlZiB0ZXN0X2FkZF9hdHRhY2htZW50X3RvX2Nhc2Vfc3RyKGFwaSwgbW9jaywgaG9zdCwgYmFzZV9wYXRoKToKICAgIG1vY2suYWRkX2NhbGxiYWNrKAogICAgICAgIHJlc3BvbnNlcy5QT1NULAogICAgICAgICd7fWluZGV4LnBocD8vYXBpL3YyL2FkZF9hdHRhY2htZW50X3RvX2Nhc2UvMicuZm9ybWF0KGhvc3QpLAogICAgICAgIGFkZF9hdHRhY2htZW50CiAgICApCiAgICBmaWxlID0gUGF0aChiYXNlX3BhdGgsICdhdHRhY2guanBnJykKICAgIHJlc3AgPSBhcGkuYXR0YWNobWVudHMuYWRkX2F0dGFjaG1lbnRfdG9fY2FzZSgyLCBzdHIoZmlsZSkpCiAgICBhc3NlcnQgcmVzcFsnYXR0YWNobWVudF9pZCddID09IDQzMwoKCmRlZiB0ZXN0X2FkZF9hdHRhY2htZW50X3RvX2Nhc2UoYXBpLCBtb2NrLCBob3N0LCBiYXNlX3BhdGgpOgogICAgbW9jay5hZGRfY2FsbGJhY2soCiAgICAgICAgbWV0aG9kPXJlc3BvbnNlcy5QT1NULAogICAgICAgIHVybD0ne31pbmRleC5waHA/L2FwaS92Mi9hZGRfYXR0YWNobWVudF90b19jYXNlLzInLmZvcm1hdChob3N0KSwKICAgICAgICBjYWxsYmFjaz1hZGRfYXR0YWNobWVudAogICAgKQogICAgZmlsZSA9IFBhdGgoYmFzZV9wYXRoLCAnYXR0YWNoLmpwZycpCiAgICByZXNwID0gYXBpLmF0dGFjaG1lbnRzLmFkZF9hdHRhY2htZW50X3RvX2Nhc2UoMiwgZmlsZSkKICAgIGFzc2VydCByZXNwWydhdHRhY2htZW50X2lkJ10gPT0gNDMzCgoKZGVmIHRlc3RfZ2V0X2F0dGFjaG1lbnRzX2Zvcl9jYXNlKGFwaSwgbW9jaywgaG9zdCk6CiAgICBtb2NrLmFkZF9jYWxsYmFjaygKICAgICAgICByZXNwb25zZXMuR0VULAogICAgICAgICd7fWluZGV4LnBocD8vYXBpL3YyL2dldF9hdHRhY2htZW50c19mb3JfY2FzZS8yJy5mb3JtYXQoaG9zdCksCiAgICAgICAgbGFtYmRhIHg6ICgyMDAsIHt9LCBqc29uLmR1bXBzKFt7J2lkJzogMSwgJ2ZpbGVuYW1lJzogJzQ0NC5qcGcnfV0pKQogICAgKQogICAgcmVzcCA9IGFwaS5hdHRhY2htZW50cy5nZXRfYXR0YWNobWVudHNfZm9yX2Nhc2UoMikKICAgIGFzc2VydCByZXNwWzBdWydmaWxlbmFtZSddID09ICc0NDQuanBnJwoKCmRlZiB0ZXN0X2dldF9hdHRhY2htZW50c19mb3JfcGxhbihhcGksIG1vY2ssIGhvc3QpOgogICAgbW9jay5hZGRfY2FsbGJhY2soCiAgICAgICAgcmVzcG9uc2VzLkdFVCwKICAgICAgICAne31pbmRleC5waHA/L2FwaS92Mi9nZXRfYXR0YWNobWVudHNfZm9yX3BsYW4vMicuZm9ybWF0KGhvc3QpLAogICAgICAgIGxhbWJkYSB4OiAoMjAwLCB7fSwganNvbi5kdW1wcyhbeydpZCc6IDEsICdmaWxlbmFtZSc6ICc0NDQuanBnJ31dKSkKICAgICkKICAgIHJlc3AgPSBhcGkuYXR0YWNobWVudHMuZ2V0X2F0dGFjaG1lbnRzX2Zvcl9wbGFuKDIpCiAgICBhc3NlcnQgcmVzcFswXVsnZmlsZW5hbWUnXSA9PSAnNDQ0LmpwZycKCgpkZWYgdGVzdF9nZXRfYXR0YWNobWVudHNfZm9yX3BsYW5fZW50cnkoYXBpLCBtb2NrLCBob3N0KToKICAgIG1vY2suYWRkX2NhbGxiYWNrKAogICAgICAgIHJlc3BvbnNlcy5HRVQsCiAgICAgICAgJ3t9aW5kZXgucGhwPy9hcGkvdjIvZ2V0X2F0dGFjaG1lbnRzX2Zvcl9wbGFuX2VudHJ5LzIvMScuZm9ybWF0KGhvc3QpLAogICAgICAgIGxhbWJkYSB4OiAoMjAwLCB7fSwganNvbi5kdW1wcyhbeydpZCc6IDEsICdmaWxlbmFtZSc6ICc0NDQuanBnJ31dKSkKICAgICkKICAgIHJlc3AgPSBhcGkuYXR0YWNobWVudHMuZ2V0X2F0dGFjaG1lbnRzX2Zvcl9wbGFuX2VudHJ5KDIsIDEpCiAgICBhc3NlcnQgcmVzcFswXVsnZmlsZW5hbWUnXSA9PSAnNDQ0LmpwZycKCgpkZWYgdGVzdF9nZXRfYXR0YWNobWVudHNfZm9yX3J1bihhcGksIG1vY2ssIGhvc3QpOgogICAgbW9jay5hZGRfY2FsbGJhY2soCiAgICAgICAgcmVzcG9uc2VzLkdFVCwKICAgICAgICAne31pbmRleC5waHA/L2FwaS92Mi9nZXRfYXR0YWNobWVudHNfZm9yX3J1bi8yJy5mb3JtYXQoaG9zdCksCiAgICAgICAgbGFtYmRhIHg6ICgyMDAsIHt9LCBqc29uLmR1bXBzKFt7J2lkJzogMSwgJ2ZpbGVuYW1lJzogJzQ0NC5qcGcnfV0pKQo8fGZpbV9ob2xlfD4KCmRlZiB0ZXN0X2dldF9hdHRhY2htZW50c19mb3JfdGVzdChhcGksIG1vY2ssIGhvc3QpOgogICAgbW9jay5hZGRfY2FsbGJhY2soCiAgICAgICAgcmVzcG9uc2VzLkdFVCwKICAgICAgICAne31pbmRleC5waHA/L2FwaS92Mi9nZXRfYXR0YWNobWVudHNfZm9yX3Rlc3QvMTInLmZvcm1hdChob3N0KSwKICAgICAgICBsYW1iZGEgeDogKDIwMCwge30sIGpzb24uZHVtcHMoW3snaWQnOiAxLCAnZmlsZW5hbWUnOiAnNDQ0LmpwZyd9XSkpCiAgICApCiAgICByZXNwID0gYXBpLmF0dGFjaG1lbnRzLmdldF9hdHRhY2htZW50c19mb3JfdGVzdCgxMikKICAgIGFzc2VydCByZXNwWzBdWydmaWxlbmFtZSddID09ICc0NDQuanBnJwoKCmRlZiB0ZXN0X2dldF9hdHRhY2htZW50KGFwaSwgbW9jaywgaG9zdCwgYmFzZV9wYXRoKToKICAgIG1vY2suYWRkX2NhbGxiYWNrKAogICAgICAgIHJlc3BvbnNlcy5HRVQsCiAgICAgICAgJ3t9aW5kZXgucGhwPy9hcGkvdjIvZ2V0X2F0dGFjaG1lbnQvNDMzJy5mb3JtYXQoaG9zdCksCiAgICAgICAgcGFydGlhbChnZXRfYXR0YWNobWVudCwgcGF0aD1iYXNlX3BhdGgpCiAgICApCiAgICBmaWxlID0gUGF0aChiYXNlX3BhdGgsICduZXdfYXR0YWNoLmpwZycpCiAgICBuZXdfZmlsZSA9IGFwaS5hdHRhY2htZW50cy5nZXRfYXR0YWNobWVudCg0MzMsIGZpbGUpCiAgICBhc3NlcnQgbmV3X2ZpbGUuZXhpc3RzKCkKICAgIG5ld19maWxlLnVubGluaygpCgoKZGVmIHRlc3RfZ2V0X2F0dGFjaG1lbnRfc3RyKGFwaSwgbW9jaywgaG9zdCwgYmFzZV9wYXRoKToKICAgIG1vY2suYWRkX2NhbGxiYWNrKAogICAgICAgIHJlc3BvbnNlcy5HRVQsCiAgICAgICAgJ3t9aW5kZXgucGhwPy9hcGkvdjIvZ2V0X2F0dGFjaG1lbnQvNDMzJy5mb3JtYXQoaG9zdCksCiAgICAgICAgcGFydGlhbChnZXRfYXR0YWNobWVudCwgcGF0aD1iYXNlX3BhdGgpCiAgICApCiAgICBmaWxlID0gUGF0aChiYXNlX3BhdGgsICduZXdfYXR0YWNoX3N0ci5qcGcnKQogICAgbmV3X2ZpbGUgPSBhcGkuYXR0YWNobWVudHMuZ2V0X2F0dGFjaG1lbnQoNDMzLCBzdHIoZmlsZSkpCiAgICBhc3NlcnQgbmV3X2ZpbGUuZXhpc3RzKCkKICAgIG5ld19maWxlLnVubGluaygpCgoKZGVmIHRlc3RfZ2V0X2F0dGFjaG1lbnRfZXJyb3IoYXBpLCBtb2NrLCBob3N0LCBiYXNlX3BhdGgpOgogICAgbW9jay5hZGRfY2FsbGJhY2soCiAgICAgICAgcmVzcG9uc2VzLkdFVCwKICAgICAgICAne31pbmRleC5waHA/L2FwaS92Mi9nZXRfYXR0YWNobWVudC80MzMnLmZvcm1hdChob3N0KSwKICAgICAgICBsYW1iZGEgeDogKDQwMCwge30sICcnKQogICAgKQogICAgZmlsZSA9IFBhdGgoYmFzZV9wYXRoLCAnbmV3X2F0dGFjaF9zdHIuanBnJykKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhTdGF0dXNDb2RlRXJyb3IpOgogICAgICAgIG5ld19maWxlID0gYXBpLmF0dGFjaG1lbnRzLmdldF9hdHRhY2htZW50KDQzMywgc3RyKGZpbGUpKQogICAgICAgIGFzc2VydCBuZXdfZmlsZSBpcyBOb25lCgoKZGVmIHRlc3RfZGVsZXRlX2F0dGFjaG1lbnQoYXBpLCBtb2NrLCBob3N0KToKICAgIG1vY2suYWRkX2NhbGxiYWNrKAogICAgICAgIHJlc3BvbnNlcy5QT1NULAogICAgICAgICd7fWluZGV4LnBocD8vYXBpL3YyL2RlbGV0ZV9hdHRhY2htZW50LzQzMycuZm9ybWF0KGhvc3QpLAogICAgICAgIGxhbWJkYSB4OiAoMjAwLCB7fSwgJycpCiAgICApCiAgICByZXNwID0gYXBpLmF0dGFjaG1lbnRzLmRlbGV0ZV9hdHRhY2htZW50KDQzMykKICAgIGFzc2VydCByZXNwIGlzIE5vbmUKPHxmaW1fc3VmZml4fD4KICAgICkKICAgIHJlc3AgPSBhcGkuYXR0YWNobWVudHMuZ2V0X2F0dGFjaG1lbnRzX2Zvcl9ydW4oMikKICAgIGFzc2VydCByZXNwWzBdWydmaWxlbmFtZSddID09ICc0NDQuanBnJwoKPHxmaW1fZW5kfD4="]
["6b646a9f14a10d1783cf67f091ede3c6133fd639-1","6b646a9f14a10d1783cf67f091ede3c6133fd639","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNscgppbXBvcnQgbWF0aAoKIyBJbXBvcnQgVG9EU1R5cGUoYm9vbCkgZXh0ZW5zaW9uIG1ldGhvZApjbHIuQWRkUmVmZXJlbmNlKCJSZXZpdE5vZGVzIikKaW1wb3J0IFJldml0CmNsci5JbXBvcnRFeHRlbnNpb25zKFJldml0LkVsZW1lbnRzKQoKIyBJbXBvcnQgZ2VvbWV0cnkgY29udmVyc2lvbiBleHRlbnNpb24gbWV0aG9kcwpjbHIuSW1wb3J0RXh0ZW5zaW9ucyhSZXZpdC5HZW9tZXRyeUNvbnZlcnNpb24pCgojIEltcG9ydCBEb2N1bWVudE1hbmFnZXIgYW5kIFRyYW5zYWN0aW9uTWFuYWdlcgpjbHIuQWRkUmVmZXJlbmNlKCJSZXZpdFNlcnZpY2VzIikKaW1wb3J0IFJldml0U2VydmljZXMKZnJvbSBSZXZpdFNlcnZpY2VzLlBlcnNpc3RlbmNlIGltcG9ydCBEb2N1bWVudE1hbmFnZXIKZnJvbSBSZXZpdFNlcnZpY2VzLlRyYW5zYWN0aW9ucyBpbXBvcnQgVHJhbnNhY3Rpb25NYW5hZ2VyCgojIEltcG9ydCBSZXZpdEFQSQpjbHIuQWRkUmVmZXJlbmNlKCJSZXZpdEFQSSIpCmltcG9ydCBBdXRvZGVzawpmcm9tIEF1dG9kZXNrLlJldml0LkRCIGltcG9ydCAqCgojIEltcG9ydHMgSWxpc3RzIG1vZHVsZSBpbnRvIHB5dGhvbgpjbHIuQWRkUmVmZXJlbmNlKCJTeXN0ZW0iKQpmcm9tIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljIGltcG9ydCBMaXN0IGFzIGNMaXN0CgojIElsaXN0IEFwcGxpY2F0aW9uCiMgTmV3X0xpc3QgPSBjTGlzdFtFbGVtZW50SWRdKCJlbGVtZW50cyIpCgojIFN0YW5kYXJkIGFyZWFzIGZvciBDdXJyZW50IERvY3VtZW50LCBBY3RpdmUgVUkgYW5kIGFwcGxpY2F0aW9uCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZG9jID0gRG9jdW1lbnRNYW5hZ2VyLkluc3RhbmNlLkN1cnJlbnREQkRvY3VtZW50CnVpYXBwID0gRG9jdW1lbnRNYW5hZ2VyLkluc3RhbmNlLkN1cnJlbnRVSUFwcGxpY2F0aW9uCmFwcCA9IHVpYXBwLkFwcGxpY2F0aW9uCnVpZG9jID0gRG9jdW1lbnRNYW5hZ2VyLkluc3RhbmNlLkN1cnJlbnRVSUFwcGxpY2F0aW9uLkFjdGl2ZVVJRG9jdW1lbnQKPHxmaW1fZW5kfD4="]
["6b646a9f14a10d1783cf67f091ede3c6133fd639-2","6b646a9f14a10d1783cf67f091ede3c6133fd639","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNscgppbXBvcnQgbWF0aAoKIyBJbXBvcnQgVG9EU1R5cGUoYm9vbCkgZXh0ZW5zaW9uIG1ldGhvZApjbHIuQWRkUmVmZXJlbmNlKCJSZXZpdE5vZGVzIikKaW1wb3J0IFJldml0CmNsci5JbXBvcnRFeHRlbnNpb25zKFJldml0LkVsZW1lbnRzKQoKIyBJbXBvcnQgZ2VvbWV0cnkgY29udmVyc2lvbiBleHRlbnNpb24gbWV0aG9kcwpjbHIuSW1wb3J0RXh0ZW5zaW9ucyhSZXZpdC5HZW9tZXRyeUNvbnZlcnNpb24pCgojIEltcG9ydCBEb2N1bWVudE1hbmFnZXIgYW5kIFRyYW5zYWN0aW9uTWFuYWdlcgpjbHIuQWRkUmVmZXJlbmNlKCJSZXZpdFNlcnZpY2VzIikKaW1wb3J0IFJldml0U2VydmljZXMKZnJvbSBSZXZpdFNlcnZpY2VzLlBlcnNpc3RlbmNlIGltcG9ydCBEb2N1bWVudE1hbmFnZXIKZnJvbSBSZXZpdFNlcnZpY2VzLlRyYW5zYWN0aW9ucyBpbXBvcnQgVHJhbnNhY3Rpb25NYW5hZ2VyCgojIEltcG9ydCBSZXZpdEFQSQpjbHIuQWRkUmVmZXJlbmNlKCJSZXZpdEFQSSIpCmltcG9ydCBBdXRvZGVzawpmcm9tIEF1dG9kZXNrLlJldml0LkRCIGltcG9ydCAqCgojIEltcG9ydHMgSWxpc3RzIG1vZHVsZSBpbnRvIHB5dGhvbgpjbHIuQWRkUmVmZXJlbmNlKCJTeXN0ZW0iKQpmcm9tIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljIGltcG9ydCBMaXN0IGFzIGNMaXN0CgojIElsaXN0IEFwcGxpY2F0aW9uCiMgTmV3X0xpc3QgPSBjTGlzdFtFbGVtZW50SWRdKCJlbGVtZW50cyIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiMgU3RhbmRhcmQgYXJlYXMgZm9yIEN1cnJlbnQgRG9jdW1lbnQsIEFjdGl2ZSBVSSBhbmQgYXBwbGljYXRpb24KZG9jID0gRG9jdW1lbnRNYW5hZ2VyLkluc3RhbmNlLkN1cnJlbnREQkRvY3VtZW50CnVpYXBwID0gRG9jdW1lbnRNYW5hZ2VyLkluc3RhbmNlLkN1cnJlbnRVSUFwcGxpY2F0aW9uCjx8ZmltX2VuZHw+"]
["e7058a13cd4f766e45a656d5bd53cfd056932da3-1","e7058a13cd4f766e45a656d5bd53cfd056932da3",{"$cut":{"chars":17448,"head":"PHxmaW1fcHJlZml4fD4KIwojIG1vZGVsX2Vuc2VtYmxlLnB5CiMKIwoKIyUlIEltcG9ydHMKCmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0IHRyYWluX3Rlc3Rfc3BsaXQKaW1wb3J0IGNzdgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CgojIEtlcmFzIGltcG9ydHMKZnJvbSBrZXJhcy5tb2RlbHMgaW1wb3J0IG1vZGVsX2Zyb21fanNvbgpmcm9tIHNjaXB5IGltcG9ydCBvcHRpbWl6ZQpmcm9tIHNrbGVhcm4ubWV0cmljcyBpbXBvcnQgcm9jX2N1cnZlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCByb2NfYXVjX3Njb3JlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCBwcmVjaXNpb25fcmVjYWxsX2N1cnZlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCBhdWMKCgojJSUgUGF0aCBjb25maWd1cmF0aW9uCgpjdXJyZW50X2RpciA9ICIuL1dGUUMvIgptb2RlbF9kaXIgPSBjdXJyZW50X2RpciArICJNb2RlbC8iCmRhdGFfZGlyID0gY3VycmVudF9kaXIgKyAiRGF0YS8iCm91dHB1dF9kaXIgPSBjdXJyZW50X2RpciArICdPdXRwdXQvJwpzcGVjdHJvZ3JhbV9kaXIgPSBkYXRhX2RpciArICJFeHRyYWN0ZWRfU3BlY3Ryb2dyYW0vIgpvdXRwdXRfc3BlY3Ryb2dyYW1fdmVjdG9yX2RpciA9ICJPdXRwdXRfU3BlY3Ryb2dyYW1fVmVjdG9yLyIKCgojJSUgU3RlcCAxOiB0cmFpbi92YWxpZGF0aW9uL3Rlc3Qgc3BsaXQKCm5jb2wsIG5yb3cgPSAzMDAsIDMwMAoKc3BlY3Ryb2dyYW1zX0Jfc2FtcGxlID0gbnAubG9hZChkYXRhX2RpciArIG91dHB1dF9zcGVjdHJvZ3JhbV92ZWN0b3JfZGlyICsgInNwZWN0cm9ncmFtc19CX3NhbXBsZV8zMDBfMzAwLm5weSIpCnNwZWN0cm9ncmFtc19GX3NhbXBsZSA9IG5wLmxvYWQoZGF0YV9kaXIgKyBvdXRwdXRfc3BlY3Ryb2dyYW1fdmVjdG9yX2RpciArICJzcGVjdHJvZ3JhbXNfRl9zYW1wbGVfMzAwXzMwMC5ucHkiKQpzcGVjdHJvZ3JhbXNfTl9zYW1wbGUgPSBucC5sb2FkKGRhdGFfZGlyICsgb3V0cHV0X3NwZWN0cm9ncmFtX3ZlY3Rvcl9kaXIgKyAic3BlY3Ryb2dyYW1zX05fc2FtcGxlXzMwMF8zMDAubnB5IikKCmZpbGVuYW1lc19CX3NhbXBsZSA9IFtdCndpdGggb3BlbihkYXRhX2RpciArIG91dHB1dF9zcGVjdHJvZ3JhbV92ZWN0b3JfZGlyICsgImZpbGVuYW1lc19CX3NhbXBsZS5jc3YiLCBuZXdsaW5lPScnKSBhcyBmOgogICAgZm9yIHJvdyBpbiBjc3YucmVhZGVyKGYpOgogICAgICAgIGZpbGVuYW1lc19CX3NhbXBsZS5hcHBlbmQocm93WzBdKQoKZmlsZW5hbWVzX0Zfc2FtcGxlID0gW10Kd2l0aCBvcGVuKGRhdGFfZGlyICsgb3V0cHV0X3NwZWN0cm9ncmFtX3ZlY3Rvcl9kaXIgKyAiZmlsZW5hbWVzX0Zfc2FtcGxlLmNzdiIsIG5ld2xpbmU9JycpIGFzIGY6CiAgICBmb3Igcm93IGluIGNzdi5yZWFkZXIoZik6CiAgICAgICAgZmlsZW5hbWVzX0Zfc2FtcGxlLmFwcGVuZChyb3dbMF0pCgpmaWxlbmFtZXNfTl9zYW1wbGUgPSBbXQp3aXRoIG9wZW4oZGF0YV9kaXIgKyBvdXRwdXRfc3BlY3Ryb2dyYW1fdmVjdG9yX2RpciArICJmaWxlbmFtZXNfTl9zYW1wbGUuY3N2IiwgbmV3bGluZT0nJykgYXMgZjoKICAgIGZvciByb3cgaW4gY3N2LnJlYWRlcihmKToKICAgICAgICBmaWxlbmFtZXNfTl9zYW1wbGUuYXBwZW5kKHJvd1swXSkKCnNwZWN0cm9ncmFtc19CX3RyYWluX3ZhbGlkYXRpb24sIHNwZWN0cm9ncmFtc19CX3Rlc3QsIGZpbGVuYW1lc19CX3RyYWluX3ZhbGlkYXRpb24sIGZpbGVuYW1lc19CX3Rlc3QgPSB0cmFpbl90ZXN0X3NwbGl0KHNwZWN0cm9ncmFtc19CX3NhbXBsZSwgZmlsZW5hbWVzX0Jfc2FtcGxlLCB0ZXN0X3NpemUgPSAwLjMsIHJhbmRvbV9zdGF0ZSA9IDEpCnNwZWN0cm9ncmFtc19GX3RyYWluX3ZhbGlkYXRpb24sIHNwZWN0cm9ncmFtc19GX3Rlc3QsIGZpbGVuYW1lc19GX3RyYWluX3ZhbGlkYXRpb24sIGZpbGVuYW1lc19GX3Rlc3QgPSB0cmFpbl90ZXN0X3NwbGl0KHNwZWN0cm9ncmFtc19GX3NhbXBsZSwgZmlsZW5hbWVzX0Zfc2FtcGxlLCB0ZXN0X3NpemUgPSAwLjMsIHJhbmRvbV9zdGF0ZSA9IDEpCnNwZWN0cm9ncmFtc19OX3RyYWluX3ZhbGlkYXRpb24sIHNwZWN0cm9ncmFtc19OX3Rlc3QsIGZpbGVuYW1lc19OX3RyYWluX3ZhbGlkYXRpb24sIGZpbGVuYW1lc19OX3Rlc3QgPSB0cmFpbl90ZXN0X3NwbGl0KHNwZWN0cm9ncmFtc19OX3NhbXBsZSwgZmlsZW5hbWVzX05fc2FtcGxlLCB0ZXN0X3NpemUgPSAwLjMsIHJhbmRvbV9zdGF0ZSA9IDEpCgpzcGVjdHJvZ3JhbXNfdHJhaW5fdmFsaWRhdGlvbiA9IG5wLmNvbmNhdGVuYXRlKChzcGVjdHJvZ3JhbXNfQl90cmFpbl92YWxpZGF0aW9uLCBzcGVjdHJvZ3JhbXNfRl90cmFpbl92YWxpZGF0aW9uLCBzcGVjdHJvZ3JhbXNfTl90cmFpbl92YWxpZGF0aW9uKSwgYXhpcz0wKQpsYWJlbHNfdHJhaW5fdmFsaWRhdGlvbiA9IG5wLmFycmF5KFsxXSAqIGxlbihzcGVjdHJvZ3JhbXNfQl90cmFpbl92YWxpZGF0aW9uKSArIFswXSAqIGxlbihzcGVjdHJvZ3JhbXNfRl90cmFpbl92YWxpZGF0aW9uKSArIFswXSAqIGxlbihzcGVjdHJvZ3JhbXNfTl90cmFpbl92YWxpZGF0aW9uKSkKClhfdHJhaW4sIFhfdmFsaWRhdGlvbiwgeV90cmFpbiwgeV92YWxpZGF0aW9uID0gdHJhaW5fdGVzdF9zcGxpdChzcGVjdHJvZ3JhbXNfdHJhaW5fdmFsaWRhdGlvbiwgbGFiZWxzX3RyYWluX3ZhbGlkYXRpb24sIHRlc3Rfc2l6ZSA9IDAuMywgcmFuZG9tX3N0YXRlID0gMSkKCgpYX3RyYWluID0gWF90cmFpbiAvIDI1NS4wClhfdmFsaWRhdGlvbiA9IFhfdmFsaWRhdGlvbiAvIDI1NS4wCgpwcmludChYX3RyYWluLnNoYXBlKSAgIApwcmludChYX3ZhbGlkYXRpb24uc2hhcGUpICAgCnByaW50KHNwZWN0cm9ncmFtc19CX3Rlc3Quc2hhcGUpICAgCnByaW50KHNwZWN0cm9ncmFtc19GX3Rlc3Quc2hhcGUpCnByaW50KHNwZWN0cm9ncmFtc19OX3Rlc3Quc2hhcGUpCgoKIyUlIFN0ZXAgMjogbG9hZCBtb2RlbHMKCndpdGggb3Blbihtb2RlbF9kaXIgKyAnY25uX2FyY2hpdGVjdHVyZV9hbGxfZGF0YS5qc29uJywg"}}]
["e7058a13cd4f766e45a656d5bd53cfd056932da3-2","e7058a13cd4f766e45a656d5bd53cfd056932da3",{"$cut":{"chars":17448,"head":"PHxmaW1fcHJlZml4fD4KIwojIG1vZGVsX2Vuc2VtYmxlLnB5CiMKIwoKIyUlIEltcG9ydHMKCmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0IHRyYWluX3Rlc3Rfc3BsaXQKaW1wb3J0IGNzdgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CgojIEtlcmFzIGltcG9ydHMKZnJvbSBrZXJhcy5tb2RlbHMgaW1wb3J0IG1vZGVsX2Zyb21fanNvbgpmcm9tIHNjaXB5IGltcG9ydCBvcHRpbWl6ZQpmcm9tIHNrbGVhcm4ubWV0cmljcyBpbXBvcnQgcm9jX2N1cnZlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCByb2NfYXVjX3Njb3JlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCBwcmVjaXNpb25fcmVjYWxsX2N1cnZlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCBhdWMKCgojJSUgUGF0aCBjb25maWd1cmF0aW9uCgpjdXJyZW50X2RpciA9ICIuL1dGUUMvIgptb2RlbF9kaXIgPSBjdXJyZW50X2RpciArICJNb2RlbC8iCjx8ZmltX2hvbGV8PgoKCiMlJSBTdGVwIDE6IHRyYWluL3ZhbGlkYXRpb24vdGVzdCBzcGxpdAoKbmNvbCwgbnJvdyA9IDMwMCwgMzAwCgpzcGVjdHJvZ3JhbXNfQl9zYW1wbGUgPSBucC5sb2FkKGRhdGFfZGlyICsgb3V0cHV0X3NwZWN0cm9ncmFtX3ZlY3Rvcl9kaXIgKyAic3BlY3Ryb2dyYW1zX0Jfc2FtcGxlXzMwMF8zMDAubnB5IikKc3BlY3Ryb2dyYW1zX0Zfc2FtcGxlID0gbnAubG9hZChkYXRhX2RpciArIG91dHB1dF9zcGVjdHJvZ3JhbV92ZWN0b3JfZGlyICsgInNwZWN0cm9ncmFtc19GX3NhbXBsZV8zMDBfMzAwLm5weSIpCnNwZWN0cm9ncmFtc19OX3NhbXBsZSA9IG5wLmxvYWQoZGF0YV9kaXIgKyBvdXRwdXRfc3BlY3Ryb2dyYW1fdmVjdG9yX2RpciArICJzcGVjdHJvZ3JhbXNfTl9zYW1wbGVfMzAwXzMwMC5ucHkiKQoKZmlsZW5hbWVzX0Jfc2FtcGxlID0gW10Kd2l0aCBvcGVuKGRhdGFfZGlyICsgb3V0cHV0X3NwZWN0cm9ncmFtX3ZlY3Rvcl9kaXIgKyAiZmlsZW5hbWVzX0Jfc2FtcGxlLmNzdiIsIG5ld2xpbmU9JycpIGFzIGY6CiAgICBmb3Igcm93IGluIGNzdi5yZWFkZXIoZik6CiAgICAgICAgZmlsZW5hbWVzX0Jfc2FtcGxlLmFwcGVuZChyb3dbMF0pCgpmaWxlbmFtZXNfRl9zYW1wbGUgPSBbXQp3aXRoIG9wZW4oZGF0YV9kaXIgKyBvdXRwdXRfc3BlY3Ryb2dyYW1fdmVjdG9yX2RpciArICJmaWxlbmFtZXNfRl9zYW1wbGUuY3N2IiwgbmV3bGluZT0nJykgYXMgZjoKICAgIGZvciByb3cgaW4gY3N2LnJlYWRlcihmKToKICAgICAgICBmaWxlbmFtZXNfRl9zYW1wbGUuYXBwZW5kKHJvd1swXSkKCmZpbGVuYW1lc19OX3NhbXBsZSA9IFtdCndpdGggb3BlbihkYXRhX2RpciArIG91dHB1dF9zcGVjdHJvZ3JhbV92ZWN0b3JfZGlyICsgImZpbGVuYW1lc19OX3NhbXBsZS5jc3YiLCBuZXdsaW5lPScnKSBhcyBmOgogICAgZm9yIHJvdyBpbiBjc3YucmVhZGVyKGYpOgogICAgICAgIGZpbGVuYW1lc19OX3NhbXBsZS5hcHBlbmQocm93WzBdKQoKc3BlY3Ryb2dyYW1zX0JfdHJhaW5fdmFsaWRhdGlvbiwgc3BlY3Ryb2dyYW1zX0JfdGVzdCwgZmlsZW5hbWVzX0JfdHJhaW5fdmFsaWRhdGlvbiwgZmlsZW5hbWVzX0JfdGVzdCA9IHRyYWluX3Rlc3Rfc3BsaXQoc3BlY3Ryb2dyYW1zX0Jfc2FtcGxlLCBmaWxlbmFtZXNfQl9zYW1wbGUsIHRlc3Rfc2l6ZSA9IDAuMywgcmFuZG9tX3N0YXRlID0gMSkKc3BlY3Ryb2dyYW1zX0ZfdHJhaW5fdmFsaWRhdGlvbiwgc3BlY3Ryb2dyYW1zX0ZfdGVzdCwgZmlsZW5hbWVzX0ZfdHJhaW5fdmFsaWRhdGlvbiwgZmlsZW5hbWVzX0ZfdGVzdCA9IHRyYWluX3Rlc3Rfc3BsaXQoc3BlY3Ryb2dyYW1zX0Zfc2FtcGxlLCBmaWxlbmFtZXNfRl9zYW1wbGUsIHRlc3Rfc2l6ZSA9IDAuMywgcmFuZG9tX3N0YXRlID0gMSkKc3BlY3Ryb2dyYW1zX05fdHJhaW5fdmFsaWRhdGlvbiwgc3BlY3Ryb2dyYW1zX05fdGVzdCwgZmlsZW5hbWVzX05fdHJhaW5fdmFsaWRhdGlvbiwgZmlsZW5hbWVzX05fdGVzdCA9IHRyYWluX3Rlc3Rfc3BsaXQoc3BlY3Ryb2dyYW1zX05fc2FtcGxlLCBmaWxlbmFtZXNfTl9zYW1wbGUsIHRlc3Rfc2l6ZSA9IDAuMywgcmFuZG9tX3N0YXRlID0gMSkKCnNwZWN0cm9ncmFtc190cmFpbl92YWxpZGF0aW9uID0gbnAuY29uY2F0ZW5hdGUoKHNwZWN0cm9ncmFtc19CX3RyYWluX3ZhbGlkYXRpb24sIHNwZWN0cm9ncmFtc19GX3RyYWluX3ZhbGlkYXRpb24sIHNwZWN0cm9ncmFtc19OX3RyYWluX3ZhbGlkYXRpb24pLCBheGlzPTApCmxhYmVsc190cmFpbl92YWxpZGF0aW9uID0gbnAuYXJyYXkoWzFdICogbGVuKHNwZWN0cm9ncmFtc19CX3RyYWluX3ZhbGlkYXRpb24pICsgWzBdICogbGVuKHNwZWN0cm9ncmFtc19GX3RyYWluX3ZhbGlkYXRpb24pICsgWzBdICogbGVuKHNwZWN0cm9ncmFtc19OX3RyYWluX3ZhbGlkYXRpb24pKQoKWF90cmFpbiwgWF92YWxpZGF0aW9uLCB5X3RyYWluLCB5X3ZhbGlkYXRpb24gPSB0cmFpbl90ZXN0X3NwbGl0KHNwZWN0cm9ncmFtc190cmFpbl92YWxpZGF0aW9uLCBsYWJlbHNfdHJhaW5fdmFsaWRhdGlvbiwgdGVzdF9zaXplID0gMC4zLCByYW5kb21fc3RhdGUgPSAxKQoKClhfdHJhaW4gPSBYX3RyYWluIC8gMjU1LjAKWF92YWxpZGF0aW9uID0gWF92YWxpZGF0aW9uIC8gMjU1LjAKCnByaW50KFhfdHJhaW4uc2hhcGUpICAgCnByaW50KFhfdmFsaWRhdGlvbi5zaGFwZSkgICAKcHJpbnQoc3BlY3Ryb2dyYW1zX0JfdGVzdC5zaGFwZSkgICAKcHJpbnQoc3BlY3Ryb2dyYW1zX0ZfdGVzdC5zaGFwZSkKcHJpbnQoc3BlY3Ryb2dyYW1zX05fdGVzdC5zaGFwZSkKCgojJSUgU3RlcCAyOiBsb2FkIG1vZGVscwoKd2l0aCBvcGVuKG1vZGVsX2RpciArICdjbm5fYXJjaGl0ZWN0dXJlX2FsbF9kYXRhLmpzb24nLCAncicpIGFzIGY6CiAgICBtb2RlbF9jbm4gPSBtb2RlbF9mcm9tX2pzb24oZi5yZWFkKCkpCm1vZGVsX2Nubi5sb2FkX3dlaWdodHMobW9kZWxfZGlyICsgJ2Nubl93ZWlnaHRzX2FsbF9kYXRhLmg1JykKCndpdGggb3Blbihtb2RlbF9kaXIgKyAndmdnMTZfYXJjaGl0ZWN0dXJlX2FsbF9kYXRhLmpzb24n"}}]
["e7058a13cd4f766e45a656d5bd53cfd056932da3-3","e7058a13cd4f766e45a656d5bd53cfd056932da3","PHxmaW1fcHJlZml4fD4KIwojIG1vZGVsX2Vuc2VtYmxlLnB5CiMKIwoKIyUlIEltcG9ydHMKCmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0IHRyYWluX3Rlc3Rfc3BsaXQKaW1wb3J0IGNzdgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CgojIEtlcmFzIGltcG9ydHMKZnJvbSBrZXJhcy5tb2RlbHMgaW1wb3J0IG1vZGVsX2Zyb21fanNvbgpmcm9tIHNjaXB5IGltcG9ydCBvcHRpbWl6ZQpmcm9tIHNrbGVhcm4ubWV0cmljcyBpbXBvcnQgcm9jX2N1cnZlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCByb2NfYXVjX3Njb3JlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCBwcmVjaXNpb25fcmVjYWxsX2N1cnZlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCBhdWMKCgojJSUgUGF0aCBjb25maWd1cmF0aW9uCgpjdXJyZW50X2RpciA9ICIuL1dGUUMvIgptb2RlbF9kaXIgPSBjdXJyZW50X2RpciArICJNb2RlbC8iCmRhdGFfZGlyID0gY3VycmVudF9kaXIgKyAiRGF0YS8iCm91dHB1dF9kaXIgPSBjdXJyZW50X2RpciArICdPdXRwdXQvJwpzcGVjdHJvZ3JhbV9kaXIgPSBkYXRhX2RpciArICJFeHRyYWN0ZWRfU3BlY3Ryb2dyYW0vIgpvdXRwdXRfc3BlY3Ryb2dyYW1fdmVjdG9yX2RpciA9ICJPdXRwdXRfU3BlY3Ryb2dyYW1fVmVjdG9yLyIKCgojJSUgU3RlcCAxOiB0cmFpbi92YWxpZGF0aW9uL3Rlc3Qgc3BsaXQKCm5jb2wsIG5yb3cgPSAzMDAsIDMwMAoKc3BlY3Ryb2dyYW1zX0Jfc2FtcGxlID0gbnAubG9hZChkYXRhX2RpciArIG91dHB1dF9zcGVjdHJvZ3JhbV92ZWN0b3JfZGlyICsgInNwZWN0cm9ncmFtc19CX3NhbXBsZV8zMDBfMzAwLm5weSIpCnNwZWN0cm9ncmFtc19GX3NhbXBsZSA9IG5wLmxvYWQoZGF0YV9kaXIgKyBvdXRwdXRfc3BlY3Ryb2dyYW1fdmVjdG9yX2RpciArICJzcGVjdHJvZ3JhbXNfRl9zYW1wbGVfMzAwXzMwMC5ucHkiKQpzcGVjdHJvZ3JhbXNfTl9zYW1wbGUgPSBucC5sb2FkKGRhdGFfZGlyICsgb3V0cHV0X3NwZWN0cm9ncmFtX3ZlY3Rvcl9kaXIgKyAic3BlY3Ryb2dyYW1zX05fc2FtcGxlXzMwMF8zMDAubnB5IikKCmZpbGVuYW1lc19CX3NhbXBsZSA9IFtdCndpdGggb3BlbihkYXRhX2RpciArIG91dHB1dF9zcGVjdHJvZ3JhbV92ZWN0b3JfZGlyICsgImZpbGVuYW1lc19CX3NhbXBsZS5jc3YiLCBuZXdsaW5lPScnKSBhcyBmOgogICAgZm9yIHJvdyBpbiBjc3YucmVhZGVyKGYpOgogICAgICAgIGZpbGVuYW1lc19CX3NhbXBsZS5hcHBlbmQocm93WzBdKQoKZmlsZW5hbWVzX0Zfc2FtcGxlID0gW10Kd2l0aCBvcGVuKGRhdGFfZGlyICsgb3V0cHV0X3NwZWN0cm9ncmFtX3ZlY3Rvcl9kaXIgKyAiZmlsZW5hbWVzX0Zfc2FtcGxlLmNzdiIsIG5ld2xpbmU9JycpIGFzIGY6CiAgICBmb3Igcm93IGluIGNzdi5yZWFkZXIoZik6CiAgICAgICAgZmlsZW5hbWVzX0Zfc2FtcGxlLmFwcGVuZChyb3dbMF0pCgpmaWxlbmFtZXNfTl9zYW1wbGUgPSBbXQp3aXRoIG9wZW4oZGF0YV9kaXIgKyBvdXRwdXRfc3BlY3Ryb2dyYW1fdmVjdG9yX2RpciArICJmaWxlbmFtZXNfTl9zYW1wbGUuY3N2IiwgbmV3bGluZT0nJykgYXMgZjoKICAgIGZvciByb3cgaW4gY3N2LnJlYWRlcihmKToKICAgICAgICBmaWxlbmFtZXNfTl9zYW1wbGUuYXBwZW5kKHJvd1swXSkKCnNwZWN0cm9ncmFtc19CX3RyYWluX3ZhbGlkYXRpb24sIHNwZWN0cm9ncmFtc19CX3Rlc3QsIGZpbGVuYW1lc19CX3RyYWluX3ZhbGlkYXRpb24sIGZpbGVuYW1lc19CX3Rlc3QgPSB0cmFpbl90ZXN0X3NwbGl0KHNwZWN0cm9ncmFtc19CX3NhbXBsZSwgZmlsZW5hbWVzX0Jfc2FtcGxlLCB0ZXN0X3NpemUgPSAwLjMsIHJhbmRvbV9zdGF0ZSA9IDEpCnNwZWN0cm9ncmFtc19GX3RyYWluX3ZhbGlkYXRpb24sIHNwZWN0cm9ncmFtc19GX3Rlc3QsIGZpbGVuYW1lc19GX3RyYWluX3ZhbGlkYXRpb24sIGZpbGVuYW1lc19GX3Rlc3QgPSB0cmFpbl90ZXN0X3NwbGl0KHNwZWN0cm9ncmFtc19GX3NhbXBsZSwgZmlsZW5hbWVzX0Zfc2FtcGxlLCB0ZXN0X3NpemUgPSAwLjMsIHJhbmRvbV9zdGF0ZSA9IDEpCnNwZWN0cm9ncmFtc19OX3RyYWluX3ZhbGlkYXRpb24sIHNwZWN0cm9ncmFtc19OX3Rlc3QsIGZpbGVuYW1lc19OX3RyYWluX3ZhbGlkYXRpb24sIGZpbGVuYW1lc19OX3Rlc3QgPSB0cmFpbl90ZXN0X3NwbGl0KHNwZWN0cm9ncmFtc19OX3NhbXBsZSwgZmlsZW5hbWVzX05fc2FtcGxlLCB0ZXN0X3NpemUgPSAwLjMsIHJhbmRvbV9zdGF0ZSA9IDEpCgpzcGVjdHJvZ3JhbXNfdHJhaW5fdmFsaWRhdGlvbiA9IG5wLmNvbmNhdGVuYXRlKChzcGVjdHJvZ3JhbXNfQl90cmFpbl92YWxpZGF0aW9uLCBzcGVjdHJvZ3JhbXNfRl90cmFpbl92YWxpZGF0aW9uLCBzcGVjdHJvZ3JhbXNfTl90cmFpbl92YWxpZGF0aW9uKSwgYXhpcz0wKQpsYWJlbHNfdHJhaW5fdmFsaWRhdGlvbiA9IG5wLmFycmF5KFsxXSAqIGxlbihzcGVjdHJvZ3JhbXNfQl90cmFpbl92YWxpZGF0aW9uKSArIFswXSAqIGxlbihzcGVjdHJvZ3JhbXNfRl90cmFpbl92YWxpZGF0aW9uKSArIFswXSAqIGxlbihzcGVjdHJvZ3JhbXNfTl90cmFpbl92YWxpZGF0aW9uKSkKClhfdHJhaW4sIFhfdmFsaWRhdGlvbiwgeV90cmFpbiwgeV92YWxpZGF0aW9uID0gdHJhaW5fdGVzdF9zcGxpdChzcGVjdHJvZ3JhbXNfdHJhaW5fdmFsaWRhdGlvbiwgbGFiZWxzX3RyYWluX3ZhbGlkYXRpb24sIHRlc3Rfc2l6ZSA9IDAuMywgcmFuZG9tX3N0YXRlID0gMSkKCgpYX3RyYWluID0gWF90cmFpbiAvIDI1NS4wClhfdmFsaWRhdGlvbiA9IFhfdmFsaWRhdGlvbiAvIDI1NS4wCgpwcmludChYX3RyYWluLnNoYXBlKSAgIApwcmludChYX3ZhbGlkYXRpb24uc2hhcGUpICAgCnByaW50KHNwZWN0cm9ncmFtc19CX3Rlc3Quc2hhcGUpICAgCnByaW50KHNwZWN0cm9ncmFtc19GX3Rlc3Quc2hhcGUpCnByaW50KHNwZWN0cm9ncmFtc19OX3Rlc3Quc2hhcGUpCgoKIyUlIFN0ZXAgMjogbG9hZCBtb2RlbHMKCndpdGggb3Blbihtb2RlbF9kaXIgKyAnY25uX2FyY2hpdGVjdHVyZV9hbGxfZGF0YS5qc29uJywgJ3InKSBhcyBmOgogICAgbW9kZWxfY25uID0gbW9kZWxfZnJvbV9qc29uKGYucmVhZCgpKQptb2RlbF9jbm4ubG9hZF93ZWlnaHRzKG1vZGVsX2RpciArICdjbm5fd2VpZ2h0c19hbGxfZGF0YS5oNScpCgp3aXRoIG9wZW4obW9kZWxfZGlyICsgJ3ZnZzE2X2FyY2hpdGVjdHVyZV9hbGxfZGF0YS5qc29uJywgJ3InKSBhcyBmOgogICAgbW9kZWxfdmdnMTYgPSBtb2RlbF9mcm9tX2pzb24oZi5yZWFkKCkpCm1vZGVsX3ZnZzE2LmxvYWRfd2VpZ2h0cyhtb2RlbF9kaXIgKyAndmdnMTZfd2VpZ2h0c19hbGxfZGF0YS5oNScpCgp3aXRoIG9wZW4obW9kZWxfZGlyICsgJ1Jlc05ldDUwX2FyY2hpdGVjdHVyZV9hbGxfZGF0YS5qc29uJywgJ3InKSBhcyBmOgogICAgbW9kZWxfUmVzTmV0NTAgPSBtb2RlbF9mcm9tX2pzb24oZi5yZWFkKCkpCm1vZGVsX1Jlc05ldDUwLmxvYWRfd2VpZ2h0cyhtb2RlbF9kaXIgKyAnUmVzTmV0NTBfd2VpZ2h0c19hbGxfZGF0YS5oNScpCgoKd2l0aCBvcGVuKG1vZGVsX2RpciArICdEZW5zZU5ldDEyMV9hcmNoaXRlY3R1cmVfYWxsX2RhdGEuanNvbicsICdyJykgYXMgZjoKICAgIG1vZGVsX0RlbnNlTmV0MTIxID0gbW9kZWxfZnJvbV9qc29uKGYucmVhZCgpKQptb2RlbF9EZW5zZU5ldDEyMS5sb2FkX3dlaWdodHMobW9kZWxfZGlyICsgJ0RlbnNlTmV0MTIxX3dlaWdodHNfYWxsX2RhdGEuaDUnKQoKCiMlJSBTdGVwIDM6IHByZWRpY3Qgb24gdGhlIHZhbGlkYXRpb24gYW5kIHRlc3Qgc2V0cwoKdmFsaWRhdGlvbl9wcmVkaWN0X2NubiA9IG1vZGVsX2Nubi5wcmVkaWN0KFhfdmFsaWRhdGlvbikgCnZhbGlkYXRpb25fcHJlZGljdF9jbm4gPSBbeCBmb3Igc3VibGlzdCBpbiB2YWxpZGF0aW9uX3ByZWRpY3RfY25uLnRvbGlzdCgpIGZvciB4IGluIHN1Ymxpc3RdCgp2YWxpZGF0aW9uX3ByZWRpY3RfdmdnMTYgPSBtb2RlbF92Z2cxNi5wcmVkaWN0KFhfdmFsaWRhdGlvbikKdmFsaWRhdGlvbl9wcmVkaWN0X3ZnZzE2ID0gW3ggZm9yIHN1Ymxpc3QgaW4gdmFsaWRhdGlvbl9wcmVkaWN0X3ZnZzE2LnRvbGlzdCgpIGZvciB4IGluIHN1Ymxpc3RdCgp2YWxpZGF0aW9uX3ByZWRpY3RfUmVzTmV0NTAgPSBtb2RlbF9SZXNOZXQ1MC5wcmVkaWN0KFhfdmFsaWRhdGlvbikKdmFsaWRhdGlvbl9wcmVkaWN0X1Jlc05ldDUwID0gW3ggZm9yIHN1Ymxpc3QgaW4gdmFsaWRhdGlvbl9wcmVkaWN0X1Jlc05ldDUwLnRvbGlzdCgpIGZvciB4IGluIHN1Ymxpc3RdCgp2YWxpZGF0aW9uX3ByZWRpY3RfRGVuc2VOZXQxMjEgPSBtb2RlbF9EZW5zZU5ldDEyMS5wcmVkaWN0KFhfdmFsaWRhdGlvbikKdmFsaWRhdGlvbl9wcmVkaWN0X0RlbnNlTmV0MTIxID0gW3ggZm9yIHN1Ymxpc3QgaW4gdmFsaWRhdGlvbl9wcmVkaWN0X0RlbnNlTmV0MTIxLnRvbGlzdCgpIGZvciB4IGluIHN1Ymxpc3RdCgp2YWxpZGF0aW9uX3ByZWRpY3QgPSBbdmFsaWRhdGlvbl9wcmVkaWN0X2NubiwgdmFsaWRhdGlvbl9wcmVkaWN0X3ZnZzE2LCB2YWxpZGF0aW9uX3ByZWRpY3RfUmVzTmV0NTAsIHZhbGlkYXRpb25fcHJlZGljdF9EZW5zZU5ldDEyMV0KCiMgT3B0aW1pemUgd2VpZ2h0cyBmb3IgZWFjaCBtb2RlbApkZWYgZih3ZWlnaHRzKToKICAgIHZhbGlkYXRpb25fcHJlZGljdF9lbnNlbWJsZSA9IG5wLmF2ZXJhZ2UodmFsaWRhdGlvbl9wcmVkaWN0LCBheGlzPTAsIHdlaWdodHM9d2VpZ2h0cykKICAgIHZhbGlkYXRpb25fcHJlZGljdF9lbnNlbWJsZV9jbGFzcyA9IFtpbnQodmFsaWRhdGlvbl9wcmVkaWN0X2Vuc2VtYmxlW2ldID4gMC41KSBmb3IgaSBpbiByYW5nZShsZW4odmFsaWRhdGlvbl9wcmVkaWN0X2Vuc2VtYmxlKSldCiAgICByZXR1cm4gdmFsaWRhdGlvbl9wcmVkaWN0X2Vuc2VtYmxlX2NsYXNzCgpkZWYgbG9zc19mdW5jdGlvbih3ZWlnaHRzKToKICAgIHZhbGlkYXRpb25fcHJlZGljdF9lbnNlbWJsZV9jbGFzcyA9IGYod2VpZ2h0cykKICAgIG5fbG9zdCA9IFtwcmVkaWN0aW9uICE9IGxhYmVsIGZvciBwcmVkaWN0aW9uLCBsYWJlbCBpbiB6aXAodmFsaWRhdGlvbl9wcmVkaWN0X2Vuc2VtYmxlX2NsYXNzLCB5X3ZhbGlkYXRpb24pXQogICAgcmV0dXJuIG5wLnN1bShuX2xvc3QpIC8gbGVuKHlfdmFsaWRhdGlvbikKCm1vZGVsX2NudCA9IDQgIyB0aGUgbnVtYmVyIG9mIG1vZGVscyBmb3IgZW5zZW1ibGluZwoKb3B0X3dlaWdodHMgPSBvcHRpbWl6ZS5taW5pbWl6ZShsb3NzX2Z1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLyBtb2RlbF9jbnRdICogbW9kZWxfY250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzPSh7J3R5cGUnOiAnZXEnLCdmdW4nOiBsYW1iZGEgdzogMS1zdW0odyl9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q9ICdOZWxkZXItTWVhZCcsICMnU0xTUVAnLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzPVsoMC4wLCAxLjApXSAqIG1vZGVsX2NudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0geydmdG9sJzoxZS0zfSwKPHxmaW1fZW5kfD4="]
["e7058a13cd4f766e45a656d5bd53cfd056932da3-4","e7058a13cd4f766e45a656d5bd53cfd056932da3",{"$cut":{"chars":17448,"head":"PHxmaW1fcHJlZml4fD4KIwojIG1vZGVsX2Vuc2VtYmxlLnB5CiMKIwoKIyUlIEltcG9ydHMKCmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0IHRyYWluX3Rlc3Rfc3BsaXQKaW1wb3J0IGNzdgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CgojIEtlcmFzIGltcG9ydHMKZnJvbSBrZXJhcy5tb2RlbHMgaW1wb3J0IG1vZGVsX2Zyb21fanNvbgpmcm9tIHNjaXB5IGltcG9ydCBvcHRpbWl6ZQpmcm9tIHNrbGVhcm4ubWV0cmljcyBpbXBvcnQgcm9jX2N1cnZlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCByb2NfYXVjX3Njb3JlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCBwcmVjaXNpb25fcmVjYWxsX2N1cnZlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCBhdWMKCgojJSUgUGF0aCBjb25maWd1cmF0aW9uCgpjdXJyZW50X2RpciA9ICIuL1dGUUMvIgptb2RlbF9kaXIgPSBjdXJyZW50X2RpciArICJNb2RlbC8iCmRhdGFfZGlyID0gY3VycmVudF9kaXIgKyAiRGF0YS8iCm91dHB1dF9kaXIgPSBjdXJyZW50X2RpciArICdPdXRwdXQvJwpzcGVjdHJvZ3JhbV9kaXIgPSBkYXRhX2RpciArICJFeHRyYWN0ZWRfU3BlY3Ryb2dyYW0vIgpvdXRwdXRfc3BlY3Ryb2dyYW1fdmVjdG9yX2RpciA9ICJPdXRwdXRfU3BlY3Ryb2dyYW1fVmVjdG9yLyIKCgojJSUgU3RlcCAxOiB0cmFpbi92YWxpZGF0aW9uL3Rlc3Qgc3BsaXQKCm5jb2wsIG5yb3cgPSAzMDAsIDMwMAo8fGZpbV9ob2xlfD4KCmZpbGVuYW1lc19CX3NhbXBsZSA9IFtdCndpdGggb3BlbihkYXRhX2RpciArIG91dHB1dF9zcGVjdHJvZ3JhbV92ZWN0b3JfZGlyICsgImZpbGVuYW1lc19CX3NhbXBsZS5jc3YiLCBuZXdsaW5lPScnKSBhcyBmOgogICAgZm9yIHJvdyBpbiBjc3YucmVhZGVyKGYpOgogICAgICAgIGZpbGVuYW1lc19CX3NhbXBsZS5hcHBlbmQocm93WzBdKQoKZmlsZW5hbWVzX0Zfc2FtcGxlID0gW10Kd2l0aCBvcGVuKGRhdGFfZGlyICsgb3V0cHV0X3NwZWN0cm9ncmFtX3ZlY3Rvcl9kaXIgKyAiZmlsZW5hbWVzX0Zfc2FtcGxlLmNzdiIsIG5ld2xpbmU9JycpIGFzIGY6CiAgICBmb3Igcm93IGluIGNzdi5yZWFkZXIoZik6CiAgICAgICAgZmlsZW5hbWVzX0Zfc2FtcGxlLmFwcGVuZChyb3dbMF0pCgpmaWxlbmFtZXNfTl9zYW1wbGUgPSBbXQp3aXRoIG9wZW4oZGF0YV9kaXIgKyBvdXRwdXRfc3BlY3Ryb2dyYW1fdmVjdG9yX2RpciArICJmaWxlbmFtZXNfTl9zYW1wbGUuY3N2IiwgbmV3bGluZT0nJykgYXMgZjoKICAgIGZvciByb3cgaW4gY3N2LnJlYWRlcihmKToKICAgICAgICBmaWxlbmFtZXNfTl9zYW1wbGUuYXBwZW5kKHJvd1swXSkKCnNwZWN0cm9ncmFtc19CX3RyYWluX3ZhbGlkYXRpb24sIHNwZWN0cm9ncmFtc19CX3Rlc3QsIGZpbGVuYW1lc19CX3RyYWluX3ZhbGlkYXRpb24sIGZpbGVuYW1lc19CX3Rlc3QgPSB0cmFpbl90ZXN0X3NwbGl0KHNwZWN0cm9ncmFtc19CX3NhbXBsZSwgZmlsZW5hbWVzX0Jfc2FtcGxlLCB0ZXN0X3NpemUgPSAwLjMsIHJhbmRvbV9zdGF0ZSA9IDEpCnNwZWN0cm9ncmFtc19GX3RyYWluX3ZhbGlkYXRpb24sIHNwZWN0cm9ncmFtc19GX3Rlc3QsIGZpbGVuYW1lc19GX3RyYWluX3ZhbGlkYXRpb24sIGZpbGVuYW1lc19GX3Rlc3QgPSB0cmFpbl90ZXN0X3NwbGl0KHNwZWN0cm9ncmFtc19GX3NhbXBsZSwgZmlsZW5hbWVzX0Zfc2FtcGxlLCB0ZXN0X3NpemUgPSAwLjMsIHJhbmRvbV9zdGF0ZSA9IDEpCnNwZWN0cm9ncmFtc19OX3RyYWluX3ZhbGlkYXRpb24sIHNwZWN0cm9ncmFtc19OX3Rlc3QsIGZpbGVuYW1lc19OX3RyYWluX3ZhbGlkYXRpb24sIGZpbGVuYW1lc19OX3Rlc3QgPSB0cmFpbl90ZXN0X3NwbGl0KHNwZWN0cm9ncmFtc19OX3NhbXBsZSwgZmlsZW5hbWVzX05fc2FtcGxlLCB0ZXN0X3NpemUgPSAwLjMsIHJhbmRvbV9zdGF0ZSA9IDEpCgpzcGVjdHJvZ3JhbXNfdHJhaW5fdmFsaWRhdGlvbiA9IG5wLmNvbmNhdGVuYXRlKChzcGVjdHJvZ3JhbXNfQl90cmFpbl92YWxpZGF0aW9uLCBzcGVjdHJvZ3JhbXNfRl90cmFpbl92YWxpZGF0aW9uLCBzcGVjdHJvZ3JhbXNfTl90cmFpbl92YWxpZGF0aW9uKSwgYXhpcz0wKQpsYWJlbHNfdHJhaW5fdmFsaWRhdGlvbiA9IG5wLmFycmF5KFsxXSAqIGxlbihzcGVjdHJvZ3JhbXNfQl90cmFpbl92YWxpZGF0aW9uKSArIFswXSAqIGxlbihzcGVjdHJvZ3JhbXNfRl90cmFpbl92YWxpZGF0aW9uKSArIFswXSAqIGxlbihzcGVjdHJvZ3JhbXNfTl90cmFpbl92YWxpZGF0aW9uKSkKClhfdHJhaW4sIFhfdmFsaWRhdGlvbiwgeV90cmFpbiwgeV92YWxpZGF0aW9uID0gdHJhaW5fdGVzdF9zcGxpdChzcGVjdHJvZ3JhbXNfdHJhaW5fdmFsaWRhdGlvbiwgbGFiZWxzX3RyYWluX3ZhbGlkYXRpb24sIHRlc3Rfc2l6ZSA9IDAuMywgcmFuZG9tX3N0YXRlID0gMSkKCgpYX3RyYWluID0gWF90cmFpbiAvIDI1NS4wClhfdmFsaWRhdGlvbiA9IFhfdmFsaWRhdGlvbiAvIDI1NS4wCgpwcmludChYX3RyYWluLnNoYXBlKSAgIApwcmludChYX3ZhbGlkYXRpb24uc2hhcGUpICAgCnByaW50KHNwZWN0cm9ncmFtc19CX3Rlc3Quc2hhcGUpICAgCnByaW50KHNwZWN0cm9ncmFtc19GX3Rlc3Quc2hhcGUpCnByaW50KHNwZWN0cm9ncmFtc19OX3Rlc3Quc2hhcGUpCgoKIyUlIFN0ZXAgMjogbG9hZCBtb2RlbHMKCndpdGggb3Blbihtb2RlbF9kaXIgKyAnY25uX2FyY2hpdGVjdHVyZV9hbGxfZGF0YS5qc29uJywgJ3InKSBhcyBmOgogICAgbW9kZWxfY25uID0gbW9kZWxfZnJvbV9qc29uKGYucmVhZCgpKQptb2RlbF9jbm4ubG9hZF93ZWlnaHRzKG1vZGVsX2RpciArICdjbm5fd2VpZ2h0c19hbGxfZGF0YS5oNScpCgp3aXRoIG9wZW4obW9kZWxfZGlyICsgJ3ZnZzE2X2FyY2hpdGVjdHVyZV9hbGxfZGF0YS5qc29uJywgJ3InKSBhcyBmOgogICAgbW9kZWxfdmdnMTYgPSBtb2RlbF9mcm9tX2pzb24oZi5yZWFkKCkpCm1vZGVsX3ZnZzE2LmxvYWRfd2VpZ2h0cyhtb2RlbF9kaXIgKyAndmdnMTZfd2VpZ2h0c19hbGxfZGF0YS5oNScpCgp3aXRoIG9wZW4obW9kZWxfZGlyICsgJ1Jlc05l"}}]
["e7058a13cd4f766e45a656d5bd53cfd056932da3-5","e7058a13cd4f766e45a656d5bd53cfd056932da3","PHxmaW1fcHJlZml4fD4KIwojIG1vZGVsX2Vuc2VtYmxlLnB5CiMKIwoKIyUlIEltcG9ydHMKCmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0IHRyYWluX3Rlc3Rfc3BsaXQKaW1wb3J0IGNzdgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CgojIEtlcmFzIGltcG9ydHMKZnJvbSBrZXJhcy5tb2RlbHMgaW1wb3J0IG1vZGVsX2Zyb21fanNvbgpmcm9tIHNjaXB5IGltcG9ydCBvcHRpbWl6ZQpmcm9tIHNrbGVhcm4ubWV0cmljcyBpbXBvcnQgcm9jX2N1cnZlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCByb2NfYXVjX3Njb3JlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCBwcmVjaXNpb25fcmVjYWxsX2N1cnZlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCBhdWMKCgojJSUgUGF0aCBjb25maWd1cmF0aW9uCgpjdXJyZW50X2RpciA9ICIuL1dGUUMvIgptb2RlbF9kaXIgPSBjdXJyZW50X2RpciArICJNb2RlbC8iCmRhdGFfZGlyID0gY3VycmVudF9kaXIgKyAiRGF0YS8iCm91dHB1dF9kaXIgPSBjdXJyZW50X2RpciArICdPdXRwdXQvJwpzcGVjdHJvZ3JhbV9kaXIgPSBkYXRhX2RpciArICJFeHRyYWN0ZWRfU3BlY3Ryb2dyYW0vIgpvdXRwdXRfc3BlY3Ryb2dyYW1fdmVjdG9yX2RpciA9ICJPdXRwdXRfU3BlY3Ryb2dyYW1fVmVjdG9yLyIKCgojJSUgU3RlcCAxOiB0cmFpbi92YWxpZGF0aW9uL3Rlc3Qgc3BsaXQKCm5jb2wsIG5yb3cgPSAzMDAsIDMwMAoKc3BlY3Ryb2dyYW1zX0Jfc2FtcGxlID0gbnAubG9hZChkYXRhX2RpciArIG91dHB1dF9zcGVjdHJvZ3JhbV92ZWN0b3JfZGlyICsgInNwZWN0cm9ncmFtc19CX3NhbXBsZV8zMDBfMzAwLm5weSIpCnNwZWN0cm9ncmFtc19GX3NhbXBsZSA9IG5wLmxvYWQoZGF0YV9kaXIgKyBvdXRwdXRfc3BlY3Ryb2dyYW1fdmVjdG9yX2RpciArICJzcGVjdHJvZ3JhbXNfRl9zYW1wbGVfMzAwXzMwMC5ucHkiKQpzcGVjdHJvZ3JhbXNfTl9zYW1wbGUgPSBucC5sb2FkKGRhdGFfZGlyICsgb3V0cHV0X3NwZWN0cm9ncmFtX3ZlY3Rvcl9kaXIgKyAic3BlY3Ryb2dyYW1zX05fc2FtcGxlXzMwMF8zMDAubnB5IikKCmZpbGVuYW1lc19CX3NhbXBsZSA9IFtdCndpdGggb3BlbihkYXRhX2RpciArIG91dHB1dF9zcGVjdHJvZ3JhbV92ZWN0b3JfZGlyICsgImZpbGVuYW1lc19CX3NhbXBsZS5jc3YiLCBuZXdsaW5lPScnKSBhcyBmOgogICAgZm9yIHJvdyBpbiBjc3YucmVhZGVyKGYpOgogICAgICAgIGZpbGVuYW1lc19CX3NhbXBsZS5hcHBlbmQocm93WzBdKQoKZmlsZW5hbWVzX0Zfc2FtcGxlID0gW10Kd2l0aCBvcGVuKGRhdGFfZGlyICsgb3V0cHV0X3NwZWN0cm9ncmFtX3ZlY3Rvcl9kaXIgKyAiZmlsZW5hbWVzX0Zfc2FtcGxlLmNzdiIsIG5ld2xpbmU9JycpIGFzIGY6CiAgICBmb3Igcm93IGluIGNzdi5yZWFkZXIoZik6CiAgICAgICAgZmlsZW5hbWVzX0Zfc2FtcGxlLmFwcGVuZChyb3dbMF0pCgpmaWxlbmFtZXNfTl9zYW1wbGUgPSBbXQp3aXRoIG9wZW4oZGF0YV9kaXIgKyBvdXRwdXRfc3BlY3Ryb2dyYW1fdmVjdG9yX2RpciArICJmaWxlbmFtZXNfTl9zYW1wbGUuY3N2IiwgbmV3bGluZT0nJykgYXMgZjoKICAgIGZvciByb3cgaW4gY3N2LnJlYWRlcihmKToKICAgICAgICBmaWxlbmFtZXNfTl9zYW1wbGUuYXBwZW5kKHJvd1swXSkKCnNwZWN0cm9ncmFtc19CX3RyYWluX3ZhbGlkYXRpb24sIHNwZWN0cm9ncmFtc19CX3Rlc3QsIGZpbGVuYW1lc19CX3RyYWluX3ZhbGlkYXRpb24sIGZpbGVuYW1lc19CX3Rlc3QgPSB0cmFpbl90ZXN0X3NwbGl0KHNwZWN0cm9ncmFtc19CX3NhbXBsZSwgZmlsZW5hbWVzX0Jfc2FtcGxlLCB0ZXN0X3NpemUgPSAwLjMsIHJhbmRvbV9zdGF0ZSA9IDEpCnNwZWN0cm9ncmFtc19GX3RyYWluX3ZhbGlkYXRpb24sIHNwZWN0cm9ncmFtc19GX3Rlc3QsIGZpbGVuYW1lc19GX3RyYWluX3ZhbGlkYXRpb24sIGZpbGVuYW1lc19GX3Rlc3QgPSB0cmFpbl90ZXN0X3NwbGl0KHNwZWN0cm9ncmFtc19GX3NhbXBsZSwgZmlsZW5hbWVzX0Zfc2FtcGxlLCB0ZXN0X3NpemUgPSAwLjMsIHJhbmRvbV9zdGF0ZSA9IDEpCnNwZWN0cm9ncmFtc19OX3RyYWluX3ZhbGlkYXRpb24sIHNwZWN0cm9ncmFtc19OX3Rlc3QsIGZpbGVuYW1lc19OX3RyYWluX3ZhbGlkYXRpb24sIGZpbGVuYW1lc19OX3Rlc3QgPSB0cmFpbl90ZXN0X3NwbGl0KHNwZWN0cm9ncmFtc19OX3NhbXBsZSwgZmlsZW5hbWVzX05fc2FtcGxlLCB0ZXN0X3NpemUgPSAwLjMsIHJhbmRvbV9zdGF0ZSA9IDEpCgpzcGVjdHJvZ3JhbXNfdHJhaW5fdmFsaWRhdGlvbiA9IG5wLmNvbmNhdGVuYXRlKChzcGVjdHJvZ3JhbXNfQl90cmFpbl92YWxpZGF0aW9uLCBzcGVjdHJvZ3JhbXNfRl90cmFpbl92YWxpZGF0aW9uLCBzcGVjdHJvZ3JhbXNfTl90cmFpbl92YWxpZGF0aW9uKSwgYXhpcz0wKQpsYWJlbHNfdHJhaW5fdmFsaWRhdGlvbiA9IG5wLmFycmF5KFsxXSAqIGxlbihzcGVjdHJvZ3JhbXNfQl90cmFpbl92YWxpZGF0aW9uKSArIFswXSAqIGxlbihzcGVjdHJvZ3JhbXNfRl90cmFpbl92YWxpZGF0aW9uKSArIFswXSAqIGxlbihzcGVjdHJvZ3JhbXNfTl90cmFpbl92YWxpZGF0aW9uKSkKClhfdHJhaW4sIFhfdmFsaWRhdGlvbiwgeV90cmFpbiwgeV92YWxpZGF0aW9uID0gdHJhaW5fdGVzdF9zcGxpdChzcGVjdHJvZ3JhbXNfdHJhaW5fdmFsaWRhdGlvbiwgbGFiZWxzX3RyYWluX3ZhbGlkYXRpb24sIHRlc3Rfc2l6ZSA9IDAuMywgcmFuZG9tX3N0YXRlID0gMSkKCgpYX3RyYWluID0gWF90cmFpbiAvIDI1NS4wClhfdmFsaWRhdGlvbiA9IFhfdmFsaWRhdGlvbiAvIDI1NS4wCgpwcmludChYX3RyYWluLnNoYXBlKSAgIApwcmludChYX3ZhbGlkYXRpb24uc2hhcGUpICAgCnByaW50KHNwZWN0cm9ncmFtc19CX3Rlc3Quc2hhcGUpICAgCnByaW50KHNwZWN0cm9ncmFtc19GX3Rlc3Quc2hhcGUpCnByaW50KHNwZWN0cm9ncmFtc19OX3Rlc3Quc2hhcGUpCgoKIyUlIFN0ZXAgMjogbG9hZCBtb2RlbHMKCndpdGggb3Blbihtb2RlbF9kaXIgKyAnY25uX2FyY2hpdGVjdHVyZV9hbGxfZGF0YS5qc29uJywgJ3InKSBhcyBmOgogICAgbW9kZWxfY25uID0gbW9kZWxfZnJvbV9qc29uKGYucmVhZCgpKQptb2RlbF9jbm4ubG9hZF93ZWlnaHRzKG1vZGVsX2RpciArICdjbm5fd2VpZ2h0c19hbGxfZGF0YS5oNScpCgp3aXRoIG9wZW4obW9kZWxfZGlyICsgJ3ZnZzE2X2FyY2hpdGVjdHVyZV9hbGxfZGF0YS5qc29uJywgJ3InKSBhcyBmOgogICAgbW9kZWxfdmdnMTYgPSBtb2RlbF9mcm9tX2pzb24oZi5yZWFkKCkpCm1vZGVsX3ZnZzE2LmxvYWRfd2VpZ2h0cyhtb2RlbF9kaXIgKyAndmdnMTZfd2VpZ2h0c19hbGxfZGF0YS5oNScpCgp3aXRoIG9wZW4obW9kZWxfZGlyICsgJ1Jlc05ldDUwX2FyY2hpdGVjdHVyZV9hbGxfZGF0YS5qc29uJywgJ3InKSBhcyBmOgogICAgbW9kZWxfUmVzTmV0NTAgPSBtb2RlbF9mcm9tX2pzb24oZi5yZWFkKCkpCm1vZGVsX1Jlc05ldDUwLmxvYWRfd2VpZ2h0cyhtb2RlbF9kaXIgKyAnUmVzTmV0NTBfd2VpZ2h0c19hbGxfZGF0YS5oNScpCgoKd2l0aCBvcGVuKG1vZGVsX2RpciArICdEZW5zZU5ldDEyMV9hcmNoaXRlY3R1cmVfYWxsX2RhdGEuanNvbicsICdyJykgYXMgZjoKICAgIG1vZGVsX0RlbnNlTmV0MTIxID0gbW9kZWxfZnJvbV9qc29uKGYucmVhZCgpKQptb2RlbF9EZW5zZU5ldDEyMS5sb2FkX3dlaWdodHMobW9kZWxfZGlyICsgJ0RlbnNlTmV0MTIxX3dlaWdodHNfYWxsX2RhdGEuaDUnKQoKCiMlJSBTdGVwIDM6IHByZWRpY3Qgb24gdGhlIHZhbGlkYXRpb24gYW5kIHRlc3Qgc2V0cwoKdmFsaWRhdGlvbl9wcmVkaWN0X2NubiA9IG1vZGVsX2Nubi5wcmVkaWN0KFhfdmFsaWRhdGlvbikgCnZhbGlkYXRpb25fcHJlZGljdF9jbm4gPSBbeCBmb3Igc3VibGlzdCBpbiB2YWxpZGF0aW9uX3ByZWRpY3RfY25uLnRvbGlzdCgpIGZvciB4IGluIHN1Ymxpc3RdCgp2YWxpZGF0aW9uX3ByZWRpY3RfdmdnMTYgPSBtb2RlbF92Z2cxNi5wcmVkaWN0KFhfdmFsaWRhdGlvbikKdmFsaWRhdGlvbl9wcmVkaWN0X3ZnZzE2ID0gW3ggZm9yIHN1Ymxpc3QgaW4gdmFsaWRhdGlvbl9wcmVkaWN0X3ZnZzE2LnRvbGlzdCgpIGZvciB4IGluIHN1Ymxpc3RdCgp2YWxpZGF0aW9uX3ByZWRpY3RfUmVzTmV0NTAgPSBtb2RlbF9SZXNOZXQ1MC5wcmVkaWN0KFhfdmFsaWRhdGlvbikKdmFsaWRhdGlvbl9wcmVkaWN0X1Jlc05ldDUwID0gW3ggZm9yIHN1Ymxpc3QgaW4gdmFsaWRhdGlvbl9wcmVkaWN0X1Jlc05ldDUwLnRvbGlzdCgpIGZvciB4IGluIHN1Ymxpc3RdCgp2YWxpZGF0aW9uX3ByZWRpY3RfRGVuc2VOZXQxMjEgPSBtb2RlbF9EZW5zZU5ldDEyMS5wcmVkaWN0KFhfdmFsaWRhdGlvbikKdmFsaWRhdGlvbl9wcmVkaWN0X0RlbnNlTmV0MTIxID0gW3ggZm9yIHN1Ymxpc3QgaW4gdmFsaWRhdGlvbl9wcmVkaWN0X0RlbnNlTmV0MTIxLnRvbGlzdCgpIGZvciB4IGluIHN1Ymxpc3RdCgp2YWxpZGF0aW9uX3ByZWRpY3QgPSBbdmFsaWRhdGlvbl9wcmVkaWN0X2NubiwgdmFsaWRhdGlvbl9wcmVkaWN0X3ZnZzE2LCB2YWxpZGF0aW9uX3ByZWRpY3RfUmVzTmV0NTAsIHZhbGlkYXRpb25fcHJlZGljdF9EZW5zZU5ldDEyMV0KCiMgT3B0aW1pemUgd2VpZ2h0cyBmb3IgZWFjaCBtb2RlbApkZWYgZih3ZWlnaHRzKToKICAgIHZhbGlkYXRpb25fcHJlZGljdF9lbnNlbWJsZSA9IG5wLmF2ZXJhZ2UodmFsaWRhdGlvbl9wcmVkaWN0LCBheGlzPTAsIHdlaWdodHM9d2VpZ2h0cykKICAgIHZhbGlkYXRpb25fcHJlZGljdF9lbnNlbWJsZV9jbGFzcyA9IFtpbnQodmFsaWRhdGlvbl9wcmVkaWN0X2Vuc2VtYmxlW2ldID4gMC41KSBmb3IgaSBpbiByYW5nZShsZW4odmFsaWRhdGlvbl9wcmVkaWN0X2Vuc2VtYmxlKSldCiAgICByZXR1cm4gdmFsaWRhdGlvbl9wcmVkaWN0X2Vuc2VtYmxlX2NsYXNzCgpkZWYgbG9zc19mdW5jdGlvbih3ZWlnaHRzKToKICAgIHZhbGlkYXRpb25fcHJlZGljdF9lbnNlbWJsZV9jbGFzcyA9IGYod2VpZ2h0cykKICAgIG5fbG9zdCA9IFtwcmVkaWN0aW9uICE9IGxhYmVsIGZvciBwcmVkaWN0aW9uLCBsYWJlbCBpbiB6aXAodmFsaWRhdGlvbl9wcmVkaWN0X2Vuc2VtYmxlX2NsYXNzLCB5X3ZhbGlkYXRpb24pXQogICAgcmV0dXJuIG5wLnN1bShuX2xvc3QpIC8gbGVuKHlfdmFsaWRhdGlvbikKCm1vZGVsX2NudCA9IDQgIyB0aGUgbnVtYmVyIG9mIG1vZGVscyBmb3IgZW5zZW1ibGluZwoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpvcHRfd2VpZ2h0cyA9IG9wdGltaXplLm1pbmltaXplKGxvc3NfZnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEvIG1vZGVsX2NudF0gKiBtb2RlbF9jbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludHM9KHsndHlwZSc6ICdlcScsJ2Z1bic6IGxhbWJkYSB3OiAxLXN1bSh3KX0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZD0gJ05lbGRlci1NZWFkJywgIydTTFNRUCcsCjx8ZmltX2VuZHw+"]
["99bbc45cecb1e0dc2527d66873ef5c9fc76d256c-1","99bbc45cecb1e0dc2527d66873ef5c9fc76d256c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0ZW5zb3JmbG93IGFzIHRmCgpmcm9tIGF0dGFsb3MuaW1ndHh0X2FsZ29yaXRobXMuYXBwcm9hY2hlcy5iYXNlIGltcG9ydCBBdHRhbG9zTW9kZWwKZnJvbSBhdHRhbG9zLnV0aWwudHJhbnNmb3JtZXJzLm9uZWhvdCBpbXBvcnQgT25lSG90CgoKY2xhc3MgTXVsdGlob3RNb2RlbChBdHRhbG9zTW9kZWwpOgogICAgIiIiCiAgICBUaGlzIG1vZGVsIHBlcmZvcm1zIGxvZ2lzdGljIHJlZ3Jlc3Npb24gdmlhIE5OIHVzaW5nIG11bHRpaG90IHZlY3RvcnMgYXMgdGFyZ2V0cy4KICAgICIiIgoKICAgIGRlZiBfY29uc3RydWN0X21vZGVsX2luZm8oc2VsZiwgaW5wdXRfc2l6ZSwgb3V0cHV0X3NpemUsIGxlYXJuaW5nX3JhdGUpOgogICAgICAgIG1vZGVsX2luZm8gPSB7fQogICAgICAgIG1vZGVsX2luZm9bImlucHV0Il0gPSB0Zi5wbGFjZWhvbGRlcihzaGFwZT0oTm9uZSwgaW5wdXRfc2l6ZSksIGR0eXBlPXRmLmZsb2F0MzIpCiAgICAgICAgbW9kZWxfaW5mb1sieV90cnV0aCJdID0gdGYucGxhY2Vob2xkZXIoc2hhcGU9KE5vbmUsIG91dHB1dF9zaXplKSwgZHR5cGU9dGYuZmxvYXQzMikKICAgICAgICBtb2RlbF9pbmZvWyJwcmVkaWN0aW9ucyJdID0gdGYuY29udHJpYi5sYXllcnMuZnVsbHlfY29ubmVjdGVkKG1vZGVsX2luZm9bImlucHV0Il0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRpb25fZm49dGYuc2lnbW9pZCkKICAgICAgICBtb2RlbF9pbmZvWyJsb3NzIl0gPSB0Zi5yZWR1Y2Vfc3VtKHRmLnNxdWFyZShtb2RlbF9pbmZvWyJwcmVkaWN0aW9ucyJdIC0gbW9kZWxfaW5mb1sieV90cnV0aCJdKSkKICAgICAgICBtb2RlbF9pbmZvWyJvcHRpbWl6ZXIiXSA9IHRmLnRyYWluLkFkYW1PcHRpbWl6ZXIobGVhcm5pbmdfcmF0ZT1sZWFybmluZ19yYXRlKS5taW5pbWl6ZShtb2RlbF9pbmZvWyJsb3NzIl0pCiAgICAgICAgcmV0dXJuIG1vZGVsX2luZm8KICAgIAogICAgZGVmIF9faW5pdF9fKHNlbGYsIHd2X21vZGVsLCBkYXRhc2V0cywgKiprd2FyZ3MpOiAjdHJhaW5fZGF0YXNldCwgdGVzdF9kYXRhc2V0LCAqKmt3YXJncyk6CiAgICAgICAgI3NlbGYuY3Jvc3NfZXZhbCA9IGt3YXJncy5nZXQoImNyb3NzX2V2YWwiLCBGYWxzZSkKICAgICAgICBzZWxmLnd2X21vZGVsID0gd3ZfbW9kZWwKICAgICAgICAjc2VsZi5vbmVfaG90ID0gT25lSG90KFt0cmFpbl9kYXRhc2V0XSBpZiBzZWxmLmNyb3NzX2V2YWwgZWxzZSBbdHJhaW5fZGF0YXNldCwgdGVzdF9kYXRhc2V0XSwKICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgIHZhbGlkX3ZvY2FiPXd2X21vZGVsLnZvY2FiKQogICAgICAgIHNlbGYub25lX2hvdCA9IE9uZUhvdChkYXRhc2V0cywgdmFsaWRfdm9jYWI9d3ZfbW9kZWwudm9jYWIpCiAgICAgICAgdHJhaW5fZGF0YXNldCA9IGRhdGFzZXRzWzBdICAjIHRyYWluX2RhdGFzZXQgc2hvdWxkIGFsd2F5cyBiZSBmaXJzdCBpbiBkYXRhc2V0cyBpdGVyYWJsZQo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgIGxlYXJuaW5nX3JhdGUgPSBzZWxmLmxlYXJuaW5nX3JhdGUKICAgICAgICApCiAgICAgICAgc2VsZi50ZXN0X29uZV9ob3QgPSBOb25lCiAgICAgICAgc3VwZXIoTXVsdGlob3RNb2RlbCwgc2VsZikuX19pbml0X18oKQoKICAgIGRlZiBwcmVwX2ZpdChzZWxmLCBkYXRhKToKICAgICAgICBpbWdfZmVhdHNfbGlzdCwgdGV4dF9mZWF0c19saXN0ID0gZGF0YQoKICAgICAgICBpbWdfZmVhdHMgPSBucC5hcnJheShpbWdfZmVhdHNfbGlzdCkKICAgICAgICB0ZXh0X2ZlYXRzID0gW3NlbGYub25lX2hvdC5nZXRfbXVsdGlwbGUodGV4dF9mZWF0cykgZm9yIHRleHRfZmVhdHMgaW4gdGV4dF9mZWF0c19saXN0XQogICAgICAgIHRleHRfZmVhdHMgPSBucC5hcnJheSh0ZXh0X2ZlYXRzKQoKICAgICAgICBmZXRjaGVzID0gW3NlbGYubW9kZWxfaW5mb1sib3B0aW1pemVyIl0sIHNlbGYubW9kZWxfaW5mb1sibG9zcyJdXQogICAgICAgIGZlZWRfZGljdCA9IHsKICAgICAgICAgICAgc2VsZi5tb2RlbF9pbmZvWyJpbnB1dCJdOiBpbWdfZmVhdHMsCiAgICAgICAgICAgIHNlbGYubW9kZWxfaW5mb1sieV90cnV0aCJdOiB0ZXh0X2ZlYXRzCiAgICAgICAgfQogICAgICAgIHJldHVybiBmZXRjaGVzLCBmZWVkX2RpY3QKCiAgICBkZWYgcHJlcF9wcmVkaWN0KHNlbGYsIGRhdGFzZXQsIGNyb3NzX2V2YWw9RmFsc2UpOgogICAgICAgIGlmIGNyb3NzX2V2YWw6CiAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiY3Jvc3NfZXZhbCBpcyBUcnVlLiBNdWx0aWhvdCBtb2RlbCBkb2VzIG5vdCBzdXBwb3J0IGNyb3NzIGV2YWx1YXRpb24uIikKICAgICAgICB4ID0gW10KICAgICAgICB5ID0gW10KICAgICAgICBmb3IgaWR4IGluIGRhdGFzZXQ6CiAgICAgICAgICAgIGltYWdlX2ZlYXRzLCB0ZXh0X2ZlYXRzID0gZGF0YXNldC5nZXRfaW5kZXgoaWR4KQogICAgICAgICAgICB0ZXh0X2ZlYXRzID0gc2VsZi50ZXN0X29uZV9ob3QuZ2V0X211bHRpcGxlKHRleHRfZmVhdHMpCiAgICAgICAgICAgIHguYXBwZW5kKGltYWdlX2ZlYXRzKQogICAgICAgICAgICB5LmFwcGVuZCh0ZXh0X2ZlYXRzKQogICAgICAgIHggPSBucC5hc2FycmF5KHgpCiAgICAgICAgeSA9IG5wLmFzYXJyYXkoeSkKCiAgICAgICAgZmV0Y2hlcyA9IFtzZWxmLm1vZGVsX2luZm9bInByZWRpY3Rpb25zIl0sXQogICAgICAgIGZlZWRfZGljdCA9IHsKICAgICAgICAgICAgc2VsZi5tb2RlbF9pbmZvWyJpbnB1dCJdOiB4CiAgICAgICAgfQogICAgICAgIHRydXRoID0geQogICAgICAgIHJldHVybiBmZXRjaGVzLCBmZWVkX2RpY3QsIHRydXRoCgogICAgZGVmIHBvc3RfcHJlZGljdChzZWxmLCBwcmVkaWN0X2ZldGNoZXMsIGNyb3NzX2V2YWw9RmFsc2UpOgogICAgICAgIGlmIGNyb3NzX2V2YWw6CiAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiY3Jvc3NfZXZhbCBpcyBUcnVlLiBNdWx0aWhvdCBtb2RlbCBkb2VzIG5vdCBzdXBwb3J0IGNyb3NzIGV2YWx1YXRpb24uIikKICAgICAgICBwcmVkaWN0aW9ucyA9IHByZWRpY3RfZmV0Y2hlc1swXQogICAgICAgIHJldHVybiBwcmVkaWN0aW9ucwoKICAgIGRlZiBnZXRfdHJhaW5pbmdfbG9zcyhzZWxmLCBmaXRfZmV0Y2hlcyk6CiAgICAgICAgXywgbG9zcyA9IGZpdF9mZXRjaGVzCiAgICAgICAgcmV0dXJuIGxvc3MKCgogICAgIiIiCgogICAgIyBpcyBhIGdlbmVyYXRvcgogICAgZGVmIGl0ZXJfYmF0Y2hlcyhzZWxmLCBkYXRhc2V0LCBiYXRjaF9zaXplKToKICAgICAgICAjIFRPRE8gYmF0Y2hfc2l6ZSA9IC0xIHNob3VsZCB5aWVsZCB0aGUgZW50aXJlIGRhdGFzZXQKICAgICAgICBudW1fYmF0Y2hlcyA9IGludChkYXRhc2V0Lm51bV9pbWFnZXMgLyBiYXRjaF9zaXplKQogICAgICAgIGZvciBiYXRjaCBpbiB4cmFuZ2UobnVtX2JhdGNoZXMpOgogICAgICAgICAgICBpbWdfZmVhdHNfbGlzdCwgdGV4dF9mZWF0c19saXN0ID0gZGF0YXNldC5nZXRfbmV4dF9iYXRjaChiYXRjaF9zaXplKQoKICAgICAgICAgICAgbmV3X2ltZ19mZWF0cyA9IG5wLmFycmF5KGltZ19mZWF0c19saXN0KQogICAgICAgICAgICAjIG5vcm1hbGl6ZSBpbWdfZmVhdHMKICAgICAgICAgICAgI25ld19pbWdfZmVhdHMgPSAobmV3X2ltZ19mZWF0cy5UIC8gbnAubGluYWxnLm5vcm0obmV3X2ltZ19mZWF0cywgYXhpcz0xKSkuVAoKICAgICAgICAgICAgbmV3X3RleHRfZmVhdHMgPSBbc2VsZi5vbmVfaG90LmdldF9tdWx0aXBsZSh0ZXh0X2ZlYXRzKSBmb3IgdGV4dF9mZWF0cyBpbiB0ZXh0X2ZlYXRzX2xpc3RdCiAgICAgICAgICAgIG5ld190ZXh0X2ZlYXRzID0gbnAuYXJyYXkobmV3X3RleHRfZmVhdHMpCiAgICAgICAgICAgICMgbm9ybWFsaXplIHRleHQgZmVhdHMKICAgICAgICAgICAgIyBuZXdfdGV4dF9mZWF0cyA9IChuZXdfdGV4dF9mZWF0cy5UIC8gbnAubGluYWxnLm5vcm0obmV3X3RleHRfZmVhdHMsIGF4aXM9MSkpLlQKCiAgICAgICAgICAgIHlpZWxkIG5ld19pbWdfZmVhdHMsIG5ld190ZXh0X2ZlYXRzCiAgICAKICAgIGRlZiBnZXRfZXZhbF9kYXRhKHNlbGYsIGRhdGFzZXQpOgogICAgICAgIHggPSBbXQogICAgICAgIHkgPSBbXQogICAgICAgIGZvciBpZHggaW4gZGF0YXNldDoKICAgICAgICAgICAgaW1hZ2VfZmVhdHMsIHRleHRfZmVhdHMgPSBkYXRhc2V0LmdldF9pbmRleChpZHgpCiAgICAgICAgICAgIHRleHRfZmVhdHMgPSBzZWxmLm9uZV9ob3QuZ2V0X211bHRpcGxlKHRleHRfZmVhdHMpCiAgICAgICAgICAgIHguYXBwZW5kKGltYWdlX2ZlYXRzKQogICAgICAgICAgICB5LmFwcGVuZCh0ZXh0X2ZlYXRzKQogICAgICAgIHJldHVybiBucC5hc2FycmF5KHgpLCBucC5hc2FycmF5KHkpCiAgICAgICAgCiAgICBkZWYgZml0KHNlbGYsIHNlc3MsIHgsIHksICoqa3dhcmdzKToKICAgICAgICBfLCBsb3NzID0gc2Vzcy5ydW4oW3NlbGYubW9kZWxfaW5mb1sib3B0aW1pemVyIl0sIHNlbGYubW9kZWxfaW5mb1sibG9zcyJdXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZF9kaWN0PXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWxfaW5mb1siaW5wdXQiXTogeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWxfaW5mb1sieV90cnV0aCJdOiB5CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgcmV0dXJuIGxvc3MKICAgICAgICAKICAgIGRlZiBwcmVkaWN0KHNlbGYsIHNlc3MsIHgsIHk9Tm9uZSk6CiAgICAgICAgZmV0Y2hlcyA9IHNlbGYubW9kZWxfaW5mb1sicHJlZGljdGlvbnMiXQogICAgICAgIGZlZWRfZGljdCA9IHtzZWxmLm1vZGVsX2luZm9bImlucHV0Il06IHh9CiAgICAgICAgaWYgeSBpcyBub3QgTm9uZToKICAgICAgICAgICAgZmV0Y2hlcy5hcHBlbmQoc2VsZi5tb2RlbF9pbmZvWyJsb3NzIl0pCiAgICAgICAgICAgIGZlZWRfZGljdFtzZWxmLm1vZGVsX2luZm9bInlfdHJ1dGgiXV0gPSB5CiAgICAgICAgZmV0Y2hlcyA9IHNlc3MucnVuKGZldGNoZXMsIGZlZWRfZGljdD1mZWVkX2RpY3QpCiAgICAgICAgaWYgeSBpcyBub3QgTm9uZToKICAgICAgICAgICAgcHJlZGljdGlvbnMgPSBmZXRjaGVzWzBdCiAgICAgICAgICAgIGxvc3MgPSBmZXRjaGVzWzFdCiAgICAgICAgZWxzZTogCiAgICAgICAgICAgIHByZWRpY3Rpb25zID0gZmV0Y2hlcwogICAgICAgIHJldHVybiAocHJlZGljdGlvbnMsIGxvc3MpIGlmIHkgZWxzZSBwcmVkaWN0aW9ucwoKICAgICIiIgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmxlYXJuaW5nX3JhdGUgPSBrd2FyZ3MuZ2V0KCJsZWFybmluZ19yYXRlIiwgMC4wMDAxKQogICAgICAgIHNlbGYubW9kZWxfaW5mbyA9IHNlbGYuX2NvbnN0cnVjdF9tb2RlbF9pbmZvKAogICAgICAgICAgICAgICAgaW5wdXRfc2l6ZSA9IHRyYWluX2RhdGFzZXQuaW1nX2ZlYXRfc2l6ZSwKICAgICAgICAgICAgICAgIG91dHB1dF9zaXplID0gc2VsZi5vbmVfaG90LnZvY2FiX3NpemUsIAo8fGZpbV9lbmR8Pg=="]
["99bbc45cecb1e0dc2527d66873ef5c9fc76d256c-2","99bbc45cecb1e0dc2527d66873ef5c9fc76d256c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0ZW5zb3JmbG93IGFzIHRmCgpmcm9tIGF0dGFsb3MuaW1ndHh0X2FsZ29yaXRobXMuYXBwcm9hY2hlcy5iYXNlIGltcG9ydCBBdHRhbG9zTW9kZWwKZnJvbSBhdHRhbG9zLnV0aWwudHJhbnNmb3JtZXJzLm9uZWhvdCBpbXBvcnQgT25lSG90CgoKY2xhc3MgTXVsdGlob3RNb2RlbChBdHRhbG9zTW9kZWwpOgogICAgIiIiCiAgICBUaGlzIG1vZGVsIHBlcmZvcm1zIGxvZ2lzdGljIHJlZ3Jlc3Npb24gdmlhIE5OIHVzaW5nIG11bHRpaG90IHZlY3RvcnMgYXMgdGFyZ2V0cy4KICAgICIiIgoKICAgIGRlZiBfY29uc3RydWN0X21vZGVsX2luZm8oc2VsZiwgaW5wdXRfc2l6ZSwgb3V0cHV0X3NpemUsIGxlYXJuaW5nX3JhdGUpOgogICAgICAgIG1vZGVsX2luZm8gPSB7fQogICAgICAgIG1vZGVsX2luZm9bImlucHV0Il0gPSB0Zi5wbGFjZWhvbGRlcihzaGFwZT0oTm9uZSwgaW5wdXRfc2l6ZSksIGR0eXBlPXRmLmZsb2F0MzIpCiAgICAgICAgbW9kZWxfaW5mb1sieV90cnV0aCJdID0gdGYucGxhY2Vob2xkZXIoc2hhcGU9KE5vbmUsIG91dHB1dF9zaXplKSwgZHR5cGU9dGYuZmxvYXQzMikKICAgICAgICBtb2RlbF9pbmZvWyJwcmVkaWN0aW9ucyJdID0gdGYuY29udHJpYi5sYXllcnMuZnVsbHlfY29ubmVjdGVkKG1vZGVsX2luZm9bImlucHV0Il0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRpb25fZm49dGYuc2lnbW9pZCkKICAgICAgICBtb2RlbF9pbmZvWyJsb3NzIl0gPSB0Zi5yZWR1Y2Vfc3VtKHRmLnNxdWFyZShtb2RlbF9pbmZvWyJwcmVkaWN0aW9ucyJdIC0gbW9kZWxfaW5mb1sieV90cnV0aCJdKSkKICAgICAgICBtb2RlbF9pbmZvWyJvcHRpbWl6ZXIiXSA9IHRmLnRyYWluLkFkYW1PcHRpbWl6ZXIobGVhcm5pbmdfcmF0ZT1sZWFybmluZ19yYXRlKS5taW5pbWl6ZShtb2RlbF9pbmZvWyJsb3NzIl0pCiAgICAgICAgcmV0dXJuIG1vZGVsX2luZm8KICAgIAogICAgZGVmIF9faW5pdF9fKHNlbGYsIHd2X21vZGVsLCBkYXRhc2V0cywgKiprd2FyZ3MpOiAjdHJhaW5fZGF0YXNldCwgdGVzdF9kYXRhc2V0LCAqKmt3YXJncyk6CiAgICAgICAgI3NlbGYuY3Jvc3NfZXZhbCA9IGt3YXJncy5nZXQoImNyb3NzX2V2YWwiLCBGYWxzZSkKICAgICAgICBzZWxmLnd2X21vZGVsID0gd3ZfbW9kZWwKICAgICAgICAjc2VsZi5vbmVfaG90ID0gT25lSG90KFt0cmFpbl9kYXRhc2V0XSBpZiBzZWxmLmNyb3NzX2V2YWwgZWxzZSBbdHJhaW5fZGF0YXNldCwgdGVzdF9kYXRhc2V0XSwKICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgIHZhbGlkX3ZvY2FiPXd2X21vZGVsLnZvY2FiKQogICAgICAgIHNlbGYub25lX2hvdCA9IE9uZUhvdChkYXRhc2V0cywgdmFsaWRfdm9jYWI9d3ZfbW9kZWwudm9jYWIpCiAgICAgICAgdHJhaW5fZGF0YXNldCA9IGRhdGFzZXRzWzBdICAjIHRyYWluX2RhdGFzZXQgc2hvdWxkIGFsd2F5cyBiZSBmaXJzdCBpbiBkYXRhc2V0cyBpdGVyYWJsZQogICAgICAgIHNlbGYubGVhcm5pbmdfcmF0ZSA9IGt3YXJncy5nZXQoImxlYXJuaW5nX3JhdGUiLCAwLjAwMDEpCiAgICAgICAgc2VsZi5tb2RlbF9pbmZvID0gc2VsZi5fY29uc3RydWN0X21vZGVsX2luZm8oCiAgICAgICAgICAgICAgICBpbnB1dF9zaXplID0gdHJhaW5fZGF0YXNldC5pbWdfZmVhdF9zaXplLAogICAgICAgICAgICAgICAgb3V0cHV0X3NpemUgPSBzZWxmLm9uZV9ob3Qudm9jYWJfc2l6ZSwgCiAgICAgICAgICAgICAgICBsZWFybmluZ19yYXRlID0gc2VsZi5sZWFybmluZ19yYXRlCiAgICAgICAgKQogICAgICAgIHNlbGYudGVzdF9vbmVfaG90ID0gTm9uZQogICAgICAgIHN1cGVyKE11bHRpaG90TW9kZWwsIHNlbGYpLl9faW5pdF9fKCkKCiAgICBkZWYgcHJlcF9maXQoc2VsZiwgZGF0YSk6CiAgICAgICAgaW1nX2ZlYXRzX2xpc3QsIHRleHRfZmVhdHNfbGlzdCA9IGRhdGEKCiAgICAgICAgaW1nX2ZlYXRzID0gbnAuYXJyYXkoaW1nX2ZlYXRzX2xpc3QpCiAgICAgICAgdGV4dF9mZWF0cyA9IFtzZWxmLm9uZV9ob3QuZ2V0X211bHRpcGxlKHRleHRfZmVhdHMpIGZvciB0ZXh0X2ZlYXRzIGluIHRleHRfZmVhdHNfbGlzdF0KICAgICAgICB0ZXh0X2ZlYXRzID0gbnAuYXJyYXkodGV4dF9mZWF0cykKCiAgICAgICAgZmV0Y2hlcyA9IFtzZWxmLm1vZGVsX2luZm9bIm9wdGltaXplciJdLCBzZWxmLm1vZGVsX2luZm9bImxvc3MiXV0KICAgICAgICBmZWVkX2RpY3QgPSB7CiAgICAgICAgICAgIHNlbGYubW9kZWxfaW5mb1siaW5wdXQiXTogaW1nX2ZlYXRzLAogICAgICAgICAgICBzZWxmLm1vZGVsX2luZm9bInlfdHJ1dGgiXTogdGV4dF9mZWF0cwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmV0Y2hlcywgZmVlZF9kaWN0CgogICAgZGVmIHByZXBfcHJlZGljdChzZWxmLCBkYXRhc2V0LCBjcm9zc19ldmFsPUZhbHNlKToKICAgICAgICBpZiBjcm9zc19ldmFsOgogICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oImNyb3NzX2V2YWwgaXMgVHJ1ZS4gTXVsdGlob3QgbW9kZWwgZG9lcyBub3Qgc3VwcG9ydCBjcm9zcyBldmFsdWF0aW9uLiIpCiAgICAgICAgeCA9IFtdCiAgICAgICAgeSA9IFtdCiAgICAgICAgZm9yIGlkeCBpbiBkYXRhc2V0OgogICAgICAgICAgICBpbWFnZV9mZWF0cywgdGV4dF9mZWF0cyA9IGRhdGFzZXQuZ2V0X2luZGV4KGlkeCkKICAgICAgICAgICAgdGV4dF9mZWF0cyA9IHNlbGYudGVzdF9vbmVfaG90LmdldF9tdWx0aXBsZSh0ZXh0X2ZlYXRzKQogICAgICAgICAgICB4LmFwcGVuZChpbWFnZV9mZWF0cykKICAgICAgICAgICAgeS5hcHBlbmQodGV4dF9mZWF0cykKICAgICAgICB4ID0gbnAuYXNhcnJheSh4KQogICAgICAgIHkgPSBucC5hc2FycmF5KHkpCgogICAgICAgIGZldGNoZXMgPSBbc2VsZi5tb2RlbF9pbmZvWyJwcmVkaWN0aW9ucyJdLF0KICAgICAgICBmZWVkX2RpY3QgPSB7CiAgICAgICAgICAgIHNlbGYubW9kZWxfaW5mb1siaW5wdXQiXTogeAogICAgICAgIH0KICAgICAgICB0cnV0aCA9IHkKICAgICAgICByZXR1cm4gZmV0Y2hlcywgZmVlZF9kaWN0LCB0cnV0aAoKICAgIGRlZiBwb3N0X3ByZWRpY3Qoc2VsZiwgcHJlZGljdF9mZXRjaGVzLCBjcm9zc19ldmFsPUZhbHNlKToKICAgICAgICBpZiBjcm9zc19ldmFsOgogICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oImNyb3NzX2V2YWwgaXMgVHJ1ZS4gTXVsdGlob3QgbW9kZWwgZG9lcyBub3Qgc3VwcG9ydCBjcm9zcyBldmFsdWF0aW9uLiIpCiAgICAgICAgcHJlZGljdGlvbnMgPSBwcmVkaWN0X2ZldGNoZXNbMF0KICAgICAgICByZXR1cm4gcHJlZGljdGlvbnMKCiAgICBkZWYgZ2V0X3RyYWluaW5nX2xvc3Moc2VsZiwgZml0X2ZldGNoZXMpOgogICAgICAgIF8sIGxvc3MgPSBmaXRfZmV0Y2hlcwogICAgICAgIHJldHVybiBsb3NzCgoKICAgICIiIgoKICAgICMgaXMgYSBnZW5lcmF0b3IKICAgIGRlZiBpdGVyX2JhdGNoZXMoc2VsZiwgZGF0YXNldCwgYmF0Y2hfc2l6ZSk6CiAgICAgICAgIyBUT0RPIGJhdGNoX3NpemUgPSAtMSBzaG91bGQgeWllbGQgdGhlIGVudGlyZSBkYXRhc2V0CiAgICAgICAgbnVtX2JhdGNoZXMgPSBpbnQoZGF0YXNldC5udW1faW1hZ2VzIC8gYmF0Y2hfc2l6ZSkKICAgICAgICBmb3IgYmF0Y2ggaW4geHJhbmdlKG51bV9iYXRjaGVzKToKICAgICAgICAgICAgaW1nX2ZlYXRzX2xpc3QsIHRleHRfZmVhdHNfbGlzdCA9IGRhdGFzZXQuZ2V0X25leHRfYmF0Y2goYmF0Y2hfc2l6ZSkKCiAgICAgICAgICAgIG5ld19pbWdfZmVhdHMgPSBucC5hcnJheShpbWdfZmVhdHNfbGlzdCkKICAgICAgICAgICAgIyBub3JtYWxpemUgaW1nX2ZlYXRzCiAgICAgICAgICAgICNuZXdfaW1nX2ZlYXRzID0gKG5ld19pbWdfZmVhdHMuVCAvIG5wLmxpbmFsZy5ub3JtKG5ld19pbWdfZmVhdHMsIGF4aXM9MSkpLlQKCjx8ZmltX2hvbGV8PgoKICAgICAgICAgICAgeWllbGQgbmV3X2ltZ19mZWF0cywgbmV3X3RleHRfZmVhdHMKICAgIAogICAgZGVmIGdldF9ldmFsX2RhdGEoc2VsZiwgZGF0YXNldCk6CiAgICAgICAgeCA9IFtdCiAgICAgICAgeSA9IFtdCiAgICAgICAgZm9yIGlkeCBpbiBkYXRhc2V0OgogICAgICAgICAgICBpbWFnZV9mZWF0cywgdGV4dF9mZWF0cyA9IGRhdGFzZXQuZ2V0X2luZGV4KGlkeCkKICAgICAgICAgICAgdGV4dF9mZWF0cyA9IHNlbGYub25lX2hvdC5nZXRfbXVsdGlwbGUodGV4dF9mZWF0cykKICAgICAgICAgICAgeC5hcHBlbmQoaW1hZ2VfZmVhdHMpCiAgICAgICAgICAgIHkuYXBwZW5kKHRleHRfZmVhdHMpCiAgICAgICAgcmV0dXJuIG5wLmFzYXJyYXkoeCksIG5wLmFzYXJyYXkoeSkKICAgICAgICAKICAgIGRlZiBmaXQoc2VsZiwgc2VzcywgeCwgeSwgKiprd2FyZ3MpOgogICAgICAgIF8sIGxvc3MgPSBzZXNzLnJ1bihbc2VsZi5tb2RlbF9pbmZvWyJvcHRpbWl6ZXIiXSwgc2VsZi5tb2RlbF9pbmZvWyJsb3NzIl1dLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkX2RpY3Q9ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbF9pbmZvWyJpbnB1dCJdOiB4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbF9pbmZvWyJ5X3RydXRoIl06IHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICByZXR1cm4gbG9zcwogICAgICAgIAogICAgZGVmIHByZWRpY3Qoc2VsZiwgc2VzcywgeCwgeT1Ob25lKToKICAgICAgICBmZXRjaGVzID0gc2VsZi5tb2RlbF9pbmZvWyJwcmVkaWN0aW9ucyJdCiAgICAgICAgZmVlZF9kaWN0ID0ge3NlbGYubW9kZWxfaW5mb1siaW5wdXQiXTogeH0KICAgICAgICBpZiB5IGlzIG5vdCBOb25lOgogICAgICAgICAgICBmZXRjaGVzLmFwcGVuZChzZWxmLm1vZGVsX2luZm9bImxvc3MiXSkKICAgICAgICAgICAgZmVlZF9kaWN0W3NlbGYubW9kZWxfaW5mb1sieV90cnV0aCJdXSA9IHkKICAgICAgICBmZXRjaGVzID0gc2Vzcy5ydW4oZmV0Y2hlcywgZmVlZF9kaWN0PWZlZWRfZGljdCkKICAgICAgICBpZiB5IGlzIG5vdCBOb25lOgogICAgICAgICAgICBwcmVkaWN0aW9ucyA9IGZldGNoZXNbMF0KICAgICAgICAgICAgbG9zcyA9IGZldGNoZXNbMV0KICAgICAgICBlbHNlOiAKICAgICAgICAgICAgcHJlZGljdGlvbnMgPSBmZXRjaGVzCiAgICAgICAgcmV0dXJuIChwcmVkaWN0aW9ucywgbG9zcykgaWYgeSBlbHNlIHByZWRpY3Rpb25zCgogICAgIiIiCgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBuZXdfdGV4dF9mZWF0cyA9IFtzZWxmLm9uZV9ob3QuZ2V0X211bHRpcGxlKHRleHRfZmVhdHMpIGZvciB0ZXh0X2ZlYXRzIGluIHRleHRfZmVhdHNfbGlzdF0KICAgICAgICAgICAgbmV3X3RleHRfZmVhdHMgPSBucC5hcnJheShuZXdfdGV4dF9mZWF0cykKICAgICAgICAgICAgIyBub3JtYWxpemUgdGV4dCBmZWF0cwogICAgICAgICAgICAjIG5ld190ZXh0X2ZlYXRzID0gKG5ld190ZXh0X2ZlYXRzLlQgLyBucC5saW5hbGcubm9ybShuZXdfdGV4dF9mZWF0cywgYXhpcz0xKSkuVAo8fGZpbV9lbmR8Pg=="]
["99bbc45cecb1e0dc2527d66873ef5c9fc76d256c-3","99bbc45cecb1e0dc2527d66873ef5c9fc76d256c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0ZW5zb3JmbG93IGFzIHRmCgpmcm9tIGF0dGFsb3MuaW1ndHh0X2FsZ29yaXRobXMuYXBwcm9hY2hlcy5iYXNlIGltcG9ydCBBdHRhbG9zTW9kZWwKZnJvbSBhdHRhbG9zLnV0aWwudHJhbnNmb3JtZXJzLm9uZWhvdCBpbXBvcnQgT25lSG90CgoKY2xhc3MgTXVsdGlob3RNb2RlbChBdHRhbG9zTW9kZWwpOgogICAgIiIiCiAgICBUaGlzIG1vZGVsIHBlcmZvcm1zIGxvZ2lzdGljIHJlZ3Jlc3Npb24gdmlhIE5OIHVzaW5nIG11bHRpaG90IHZlY3RvcnMgYXMgdGFyZ2V0cy4KICAgICIiIgoKICAgIGRlZiBfY29uc3RydWN0X21vZGVsX2luZm8oc2VsZiwgaW5wdXRfc2l6ZSwgb3V0cHV0X3NpemUsIGxlYXJuaW5nX3JhdGUpOgogICAgICAgIG1vZGVsX2luZm8gPSB7fQogICAgICAgIG1vZGVsX2luZm9bImlucHV0Il0gPSB0Zi5wbGFjZWhvbGRlcihzaGFwZT0oTm9uZSwgaW5wdXRfc2l6ZSksIGR0eXBlPXRmLmZsb2F0MzIpCiAgICAgICAgbW9kZWxfaW5mb1sieV90cnV0aCJdID0gdGYucGxhY2Vob2xkZXIoc2hhcGU9KE5vbmUsIG91dHB1dF9zaXplKSwgZHR5cGU9dGYuZmxvYXQzMikKICAgICAgICBtb2RlbF9pbmZvWyJwcmVkaWN0aW9ucyJdID0gdGYuY29udHJpYi5sYXllcnMuZnVsbHlfY29ubmVjdGVkKG1vZGVsX2luZm9bImlucHV0Il0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRpb25fZm49dGYuc2lnbW9pZCkKICAgICAgICBtb2RlbF9pbmZvWyJsb3NzIl0gPSB0Zi5yZWR1Y2Vfc3VtKHRmLnNxdWFyZShtb2RlbF9pbmZvWyJwcmVkaWN0aW9ucyJdIC0gbW9kZWxfaW5mb1sieV90cnV0aCJdKSkKICAgICAgICBtb2RlbF9pbmZvWyJvcHRpbWl6ZXIiXSA9IHRmLnRyYWluLkFkYW1PcHRpbWl6ZXIobGVhcm5pbmdfcmF0ZT1sZWFybmluZ19yYXRlKS5taW5pbWl6ZShtb2RlbF9pbmZvWyJsb3NzIl0pCiAgICAgICAgcmV0dXJuIG1vZGVsX2luZm8KICAgIAogICAgZGVmIF9faW5pdF9fKHNlbGYsIHd2X21vZGVsLCBkYXRhc2V0cywgKiprd2FyZ3MpOiAjdHJhaW5fZGF0YXNldCwgdGVzdF9kYXRhc2V0LCAqKmt3YXJncyk6CiAgICAgICAgI3NlbGYuY3Jvc3NfZXZhbCA9IGt3YXJncy5nZXQoImNyb3NzX2V2YWwiLCBGYWxzZSkKICAgICAgICBzZWxmLnd2X21vZGVsID0gd3ZfbW9kZWwKICAgICAgICAjc2VsZi5vbmVfaG90ID0gT25lSG90KFt0cmFpbl9kYXRhc2V0XSBpZiBzZWxmLmNyb3NzX2V2YWwgZWxzZSBbdHJhaW5fZGF0YXNldCwgdGVzdF9kYXRhc2V0XSwKICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgIHZhbGlkX3ZvY2FiPXd2X21vZGVsLnZvY2FiKQogICAgICAgIHNlbGYub25lX2hvdCA9IE9uZUhvdChkYXRhc2V0cywgdmFsaWRfdm9jYWI9d3ZfbW9kZWwudm9jYWIpCiAgICAgICAgdHJhaW5fZGF0YXNldCA9IGRhdGFzZXRzWzBdICAjIHRyYWluX2RhdGFzZXQgc2hvdWxkIGFsd2F5cyBiZSBmaXJzdCBpbiBkYXRhc2V0cyBpdGVyYWJsZQogICAgICAgIHNlbGYubGVhcm5pbmdfcmF0ZSA9IGt3YXJncy5nZXQoImxlYXJuaW5nX3JhdGUiLCAwLjAwMDEpCiAgICAgICAgc2VsZi5tb2RlbF9pbmZvID0gc2VsZi5fY29uc3RydWN0X21vZGVsX2luZm8oCiAgICAgICAgICAgICAgICBpbnB1dF9zaXplID0gdHJhaW5fZGF0YXNldC5pbWdfZmVhdF9zaXplLAogICAgICAgICAgICAgICAgb3V0cHV0X3NpemUgPSBzZWxmLm9uZV9ob3Qudm9jYWJfc2l6ZSwgCiAgICAgICAgICAgICAgICBsZWFybmluZ19yYXRlID0gc2VsZi5sZWFybmluZ19yYXRlCiAgICAgICAgKQogICAgICAgIHNlbGYudGVzdF9vbmVfaG90ID0gTm9uZQogICAgICAgIHN1cGVyKE11bHRpaG90TW9kZWwsIHNlbGYpLl9faW5pdF9fKCkKCiAgICBkZWYgcHJlcF9maXQoc2VsZiwgZGF0YSk6CiAgICAgICAgaW1nX2ZlYXRzX2xpc3QsIHRleHRfZmVhdHNfbGlzdCA9IGRhdGEKCiAgICAgICAgaW1nX2ZlYXRzID0gbnAuYXJyYXkoaW1nX2ZlYXRzX2xpc3QpCiAgICAgICAgdGV4dF9mZWF0cyA9IFtzZWxmLm9uZV9ob3QuZ2V0X211bHRpcGxlKHRleHRfZmVhdHMpIGZvciB0ZXh0X2ZlYXRzIGluIHRleHRfZmVhdHNfbGlzdF0KICAgICAgICB0ZXh0X2ZlYXRzID0gbnAuYXJyYXkodGV4dF9mZWF0cykKCiAgICAgICAgZmV0Y2hlcyA9IFtzZWxmLm1vZGVsX2luZm9bIm9wdGltaXplciJdLCBzZWxmLm1vZGVsX2luZm9bImxvc3MiXV0KICAgICAgICBmZWVkX2RpY3QgPSB7CiAgICAgICAgICAgIHNlbGYubW9kZWxfaW5mb1siaW5wdXQiXTogaW1nX2ZlYXRzLAogICAgICAgICAgICBzZWxmLm1vZGVsX2luZm9bInlfdHJ1dGgiXTogdGV4dF9mZWF0cwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmV0Y2hlcywgZmVlZF9kaWN0CgogICAgZGVmIHByZXBfcHJlZGljdChzZWxmLCBkYXRhc2V0LCBjcm9zc19ldmFsPUZhbHNlKToKICAgICAgICBpZiBjcm9zc19ldmFsOgogICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oImNyb3NzX2V2YWwgaXMgVHJ1ZS4gTXVsdGlob3QgbW9kZWwgZG9lcyBub3Qgc3VwcG9ydCBjcm9zcyBldmFsdWF0aW9uLiIpCiAgICAgICAgeCA9IFtdCiAgICAgICAgeSA9IFtdCiAgICAgICAgZm9yIGlkeCBpbiBkYXRhc2V0OgogICAgICAgICAgICBpbWFnZV9mZWF0cywgdGV4dF9mZWF0cyA9IGRhdGFzZXQuZ2V0X2luZGV4KGlkeCkKICAgICAgICAgICAgdGV4dF9mZWF0cyA9IHNlbGYudGVzdF9vbmVfaG90LmdldF9tdWx0aXBsZSh0ZXh0X2ZlYXRzKQogICAgICAgICAgICB4LmFwcGVuZChpbWFnZV9mZWF0cykKICAgICAgICAgICAgeS5hcHBlbmQodGV4dF9mZWF0cykKICAgICAgICB4ID0gbnAuYXNhcnJheSh4KQogICAgICAgIHkgPSBucC5hc2FycmF5KHkpCgogICAgICAgIGZldGNoZXMgPSBbc2VsZi5tb2RlbF9pbmZvWyJwcmVkaWN0aW9ucyJdLF0KICAgICAgICBmZWVkX2RpY3QgPSB7CiAgICAgICAgICAgIHNlbGYubW9kZWxfaW5mb1siaW5wdXQiXTogeAogICAgICAgIH0KICAgICAgICB0cnV0aCA9IHkKICAgICAgICByZXR1cm4gZmV0Y2hlcywgZmVlZF9kaWN0LCB0cnV0aAoKICAgIGRlZiBwb3N0X3ByZWRpY3Qoc2VsZiwgcHJlZGljdF9mZXRjaGVzLCBjcm9zc19ldmFsPUZhbHNlKToKICAgICAgICBpZiBjcm9zc19ldmFsOgogICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oImNyb3NzX2V2YWwgaXMgVHJ1ZS4gTXVsdGlob3QgbW9kZWwgZG9lcyBub3Qgc3VwcG9ydCBjcm9zcyBldmFsdWF0aW9uLiIpCiAgICAgICAgcHJlZGljdGlvbnMgPSBwcmVkaWN0X2ZldGNoZXNbMF0KICAgICAgICByZXR1cm4gcHJlZGljdGlvbnMKCiAgICBkZWYgZ2V0X3RyYWluaW5nX2xvc3Moc2VsZiwgZml0X2ZldGNoZXMpOgogICAgICAgIF8sIGxvc3MgPSBmaXRfZmV0Y2hlcwogICAgICAgIHJldHVybiBsb3NzCgoKICAgICIiIgoKICAgICMgaXMgYSBnZW5lcmF0b3IKICAgIGRlZiBpdGVyX2JhdGNoZXMoc2VsZiwgZGF0YXNldCwgYmF0Y2hfc2l6ZSk6CiAgICAgICAgIyBUT0RPIGJhdGNoX3NpemUgPSAtMSBzaG91bGQgeWllbGQgdGhlIGVudGlyZSBkYXRhc2V0CiAgICAgICAgbnVtX2JhdGNoZXMgPSBpbnQoZGF0YXNldC5udW1faW1hZ2VzIC8gYmF0Y2hfc2l6ZSkKICAgICAgICBmb3IgYmF0Y2ggaW4geHJhbmdlKG51bV9iYXRjaGVzKToKICAgICAgICAgICAgaW1nX2ZlYXRzX2xpc3QsIHRleHRfZmVhdHNfbGlzdCA9IGRhdGFzZXQuZ2V0X25leHRfYmF0Y2goYmF0Y2hfc2l6ZSkKCiAgICAgICAgICAgIG5ld19pbWdfZmVhdHMgPSBucC5hcnJheShpbWdfZmVhdHNfbGlzdCkKICAgICAgICAgICAgIyBub3JtYWxpemUgaW1nX2ZlYXRzCiAgICAgICAgICAgICNuZXdfaW1nX2ZlYXRzID0gKG5ld19pbWdfZmVhdHMuVCAvIG5wLmxpbmFsZy5ub3JtKG5ld19pbWdfZmVhdHMsIGF4aXM9MSkpLlQKCiAgICAgICAgICAgIG5ld190ZXh0X2ZlYXRzID0gW3NlbGYub25lX2hvdC5nZXRfbXVsdGlwbGUodGV4dF9mZWF0cykgZm9yIHRleHRfZmVhdHMgaW4gdGV4dF9mZWF0c19saXN0XQogICAgICAgICAgICBuZXdfdGV4dF9mZWF0cyA9IG5wLmFycmF5KG5ld190ZXh0X2ZlYXRzKQogICAgICAgICAgICAjIG5vcm1hbGl6ZSB0ZXh0IGZlYXRzCiAgICAgICAgICAgICMgbmV3X3RleHRfZmVhdHMgPSAobmV3X3RleHRfZmVhdHMuVCAvIG5wLmxpbmFsZy5ub3JtKG5ld190ZXh0X2ZlYXRzLCBheGlzPTEpKS5UCgogICAgICAgICAgICB5aWVsZCBuZXdfaW1nX2ZlYXRzLCBuZXdfdGV4dF9mZWF0cwogICAgCiAgICBkZWYgZ2V0X2V2YWxfZGF0YShzZWxmLCBkYXRhc2V0KToKICAgICAgICB4ID0gW10KICAgICAgICB5ID0gW10KICAgICAgICBmb3IgaWR4IGluIGRhdGFzZXQ6CiAgICAgICAgICAgIGltYWdlX2ZlYXRzLCB0ZXh0X2ZlYXRzID0gZGF0YXNldC5nZXRfaW5kZXgoaWR4KQogICAgICAgICAgICB0ZXh0X2ZlYXRzID0gc2VsZi5vbmVfaG90LmdldF9tdWx0aXBsZSh0ZXh0X2ZlYXRzKQogICAgICAgICAgICB4LmFwcGVuZChpbWFnZV9mZWF0cykKICAgICAgICAgICAgeS5hcHBlbmQodGV4dF9mZWF0cykKICAgICAgICByZXR1cm4gbnAuYXNhcnJheSh4KSwgbnAuYXNhcnJheSh5KQogICAgICAgIAogICAgZGVmIGZpdChzZWxmLCBzZXNzLCB4LCB5LCAqKmt3YXJncyk6CiAgICAgICAgXywgbG9zcyA9IHNlc3MucnVuKFtzZWxmLm1vZGVsX2luZm9bIm9wdGltaXplciJdLCBzZWxmLm1vZGVsX2luZm9bImxvc3MiXV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWRfZGljdD17CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZGVsX2luZm9bImlucHV0Il06IHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZGVsX2luZm9bInlfdHJ1dGgiXTogeQogICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgIHJldHVybiBsb3NzCiAgICAgICAgCiAgICBkZWYgcHJlZGljdChzZWxmLCBzZXNzLCB4LCB5PU5vbmUpOgogICAgICAgIGZldGNoZXMgPSBzZWxmLm1vZGVsX2luZm9bInByZWRpY3Rpb25zIl0KPHxmaW1faG9sZXw+CiAgICAgICAgZmV0Y2hlcyA9IHNlc3MucnVuKGZldGNoZXMsIGZlZWRfZGljdD1mZWVkX2RpY3QpCiAgICAgICAgaWYgeSBpcyBub3QgTm9uZToKICAgICAgICAgICAgcHJlZGljdGlvbnMgPSBmZXRjaGVzWzBdCiAgICAgICAgICAgIGxvc3MgPSBmZXRjaGVzWzFdCiAgICAgICAgZWxzZTogCiAgICAgICAgICAgIHByZWRpY3Rpb25zID0gZmV0Y2hlcwogICAgICAgIHJldHVybiAocHJlZGljdGlvbnMsIGxvc3MpIGlmIHkgZWxzZSBwcmVkaWN0aW9ucwoKICAgICIiIgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBmZWVkX2RpY3QgPSB7c2VsZi5tb2RlbF9pbmZvWyJpbnB1dCJdOiB4fQogICAgICAgIGlmIHkgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIGZldGNoZXMuYXBwZW5kKHNlbGYubW9kZWxfaW5mb1sibG9zcyJdKQogICAgICAgICAgICBmZWVkX2RpY3Rbc2VsZi5tb2RlbF9pbmZvWyJ5X3RydXRoIl1dID0geQo8fGZpbV9lbmR8Pg=="]
["68b7cf34495484282b5c0ffddfdf8b6309f3df78-1","68b7cf34495484282b5c0ffddfdf8b6309f3df78","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0gIwojIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIiIiQVBJIGNsaWVudCBsaWJyYXJ5IGZvciBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIG9wZXJhdGlvbnMuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscwoKZnJvbSBhcGl0b29scy5iYXNlLnB5IGltcG9ydCBsaXN0X3BhZ2VyCgpmcm9tIGdvb2dsZWNsb3Vkc2RrLmFwaV9saWIuY2VydGlmaWNhdGVfbWFuYWdlciBpbXBvcnQgYXBpX2NsaWVudAo8fGZpbV9ob2xlfD4KICAiIiJBUEkgY2xpZW50IGZvciBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIG9wZXJhdGlvbnMuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjbGllbnQ9Tm9uZSwgbWVzc2FnZXM9Tm9uZSk6CiAgICBzZWxmLl9jbGllbnQgPSBjbGllbnQgb3IgYXBpX2NsaWVudC5HZXRDbGllbnRJbnN0YW5jZSgpCiAgICBzZWxmLl9zZXJ2aWNlID0gc2VsZi5fY2xpZW50LnByb2plY3RzX2xvY2F0aW9uc19vcGVyYXRpb25zCiAgICBzZWxmLm1lc3NhZ2VzID0gbWVzc2FnZXMgb3Igc2VsZi5fY2xpZW50Lk1FU1NBR0VTX01PRFVMRQoKICBkZWYgR2V0KHNlbGYsIG9wZXJhdGlvbl9yZWYpOgogICAgIiIiR2V0cyBvcGVyYXRpb24uCgogICAgQXJnczoKICAgICAgb3BlcmF0aW9uX3JlZjogYSBSZXNvdXJjZSByZWZlcmVuY2UgdG8gYQogICAgICAgIGNlcnRpZmljYXRlbWFuYWdlci5wcm9qZWN0cy5sb2NhdGlvbnMub3BlcmF0aW9ucyByZXNvdXJjZSB0byBnZXQuCgogICAgUmV0dXJuczoKICAgICAgT3BlcmF0aW9uIEFQSSByZXByZXNlbnRhdGlvbi4KICAgICIiIgogICAgcmVxdWVzdCA9IHNlbGYubWVzc2FnZXMuQ2VydGlmaWNhdGVtYW5hZ2VyUHJvamVjdHNMb2NhdGlvbnNPcGVyYXRpb25zR2V0UmVxdWVzdCgKICAgICAgICBuYW1lPW9wZXJhdGlvbl9yZWYuUmVsYXRpdmVOYW1lKCkpCiAgICByZXR1cm4gc2VsZi5fc2VydmljZS5HZXQocmVxdWVzdCkKCiAgZGVmIExpc3Qoc2VsZiwgcGFyZW50X3JlZiwgbGltaXQ9Tm9uZSwgcGFnZV9zaXplPU5vbmUsIGxpc3RfZmlsdGVyPU5vbmUpOgogICAgIiIiTGlzdCBvcGVyYXRpb25zIGluIGEgZ2l2ZW4gcHJvamVjdCBhbmQgbG9jYXRpb24uCgogICAgQXJnczoKICAgICAgcGFyZW50X3JlZjogYSBSZXNvdXJjZSByZWZlcmVuY2UgdG8gYQogICAgICAgIGNlcnRpZmljYXRlbWFuYWdlci5wcm9qZWN0cy5sb2NhdGlvbnMgcmVzb3VyY2UgdG8gbGlzdCBvcGVyYXRpb25zIGZvci4KICAgICAgbGltaXQ6IGludCwgdGhlIHRvdGFsIG51bWJlciBvZiByZXN1bHRzIHRvIHJldHVybiBmcm9tIHRoZSBBUEkuCiAgICAgIHBhZ2Vfc2l6ZTogaW50LCB0aGUgbnVtYmVyIG9mIHJlc3VsdHMgaW4gZWFjaCBiYXRjaCBmcm9tIHRoZSBBUEkuCiAgICAgIGxpc3RfZmlsdGVyOiBzdHIsIGZpbHRlciB0byBhcHBseSBpbiB0aGUgbGlzdCByZXF1ZXN0LgoKICAgIFJldHVybnM6CiAgICAgIEEgbGlzdCBvZiB0aGUgb3BlcmF0aW9ucyBpbiB0aGUgcHJvamVjdC4KICAgICIiIgogICAgcmVxdWVzdCA9IHNlbGYubWVzc2FnZXMuQ2VydGlmaWNhdGVtYW5hZ2VyUHJvamVjdHNMb2NhdGlvbnNPcGVyYXRpb25zTGlzdFJlcXVlc3QoCiAgICAgICAgbmFtZT1wYXJlbnRfcmVmLlJlbGF0aXZlTmFtZSgpLCBmaWx0ZXI9bGlzdF9maWx0ZXIpCiAgICByZXR1cm4gbGlzdF9wYWdlci5ZaWVsZEZyb21MaXN0KAogICAgICAgIHNlbGYuX3NlcnZpY2UsCiAgICAgICAgcmVxdWVzdCwKICAgICAgICBiYXRjaF9zaXplPXBhZ2Vfc2l6ZSwKICAgICAgICBsaW1pdD1saW1pdCwKICAgICAgICBmaWVsZD0nb3BlcmF0aW9ucycsCiAgICAgICAgYmF0Y2hfc2l6ZV9hdHRyaWJ1dGU9J3BhZ2VTaXplJykKCiAgZGVmIFdhaXRGb3JPcGVyYXRpb24oc2VsZiwgb3BlcmF0aW9uX3JlZiwgbWVzc2FnZSk6CiAgICAiIiJXYWl0cyB1bnRpbCBvcGVyYXRpb24gaXMgY29tcGxldGUuCgogICAgQXJnczoKICAgICAgb3BlcmF0aW9uX3JlZjogYSBSZXNvdXJjZSByZWZlcmVuY2UgdG8gYQogICAgICAgIGNlcnRpZmljYXRlbWFuYWdlci5wcm9qZWN0cy5sb2NhdGlvbnMub3BlcmF0aW9ucyByZXNvdXJjZSB0byB3YWl0IGZvci4KICAgICAgbWVzc2FnZTogc3RyLCBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZCB3aGlsZSB3YWl0aW5nLgoKICAgIFJldHVybnM6CiAgICAgIE9wZXJhdGlvbiByZXN1bHQuCiAgICAiIiIKICAgIHJldHVybiB3YWl0ZXIuV2FpdEZvcigKICAgICAgICB3YWl0ZXIuQ2xvdWRPcGVyYXRpb25Qb2xsZXJOb1Jlc291cmNlcyhzZWxmLl9zZXJ2aWNlKSwKICAgICAgICBvcGVyYXRpb25fcmVmLAogICAgICAgIG1lc3NhZ2UsCiAgICAgICAgd2FpdF9jZWlsaW5nX21zPTE1ICogMTAwMCkKPHxmaW1fc3VmZml4fD4KZnJvbSBnb29nbGVjbG91ZHNkay5hcGlfbGliLnV0aWwgaW1wb3J0IHdhaXRlcgoKCmNsYXNzIE9wZXJhdGlvbkNsaWVudChvYmplY3QpOgo8fGZpbV9lbmR8Pg=="]
["68b7cf34495484282b5c0ffddfdf8b6309f3df78-2","68b7cf34495484282b5c0ffddfdf8b6309f3df78","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0gIwojIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIiIiQVBJIGNsaWVudCBsaWJyYXJ5IGZvciBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIG9wZXJhdGlvbnMuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscwoKZnJvbSBhcGl0b29scy5iYXNlLnB5IGltcG9ydCBsaXN0X3BhZ2VyCgpmcm9tIGdvb2dsZWNsb3Vkc2RrLmFwaV9saWIuY2VydGlmaWNhdGVfbWFuYWdlciBpbXBvcnQgYXBpX2NsaWVudApmcm9tIGdvb2dsZWNsb3Vkc2RrLmFwaV9saWIudXRpbCBpbXBvcnQgd2FpdGVyCgoKY2xhc3MgT3BlcmF0aW9uQ2xpZW50KG9iamVjdCk6CiAgIiIiQVBJIGNsaWVudCBmb3IgQ2VydGlmaWNhdGUgTWFuYWdlciBvcGVyYXRpb25zLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgY2xpZW50PU5vbmUsIG1lc3NhZ2VzPU5vbmUpOgogICAgc2VsZi5fY2xpZW50ID0gY2xpZW50IG9yIGFwaV9jbGllbnQuR2V0Q2xpZW50SW5zdGFuY2UoKQogICAgc2VsZi5fc2VydmljZSA9IHNlbGYuX2NsaWVudC5wcm9qZWN0c19sb2NhdGlvbnNfb3BlcmF0aW9ucwogICAgc2VsZi5tZXNzYWdlcyA9IG1lc3NhZ2VzIG9yIHNlbGYuX2NsaWVudC5NRVNTQUdFU19NT0RVTEUKCiAgZGVmIEdldChzZWxmLCBvcGVyYXRpb25fcmVmKToKICAgICIiIkdldHMgb3BlcmF0aW9uLgoKICAgIEFyZ3M6CiAgICAgIG9wZXJhdGlvbl9yZWY6IGEgUmVzb3VyY2UgcmVmZXJlbmNlIHRvIGEKICAgICAgICBjZXJ0aWZpY2F0ZW1hbmFnZXIucHJvamVjdHMubG9jYXRpb25zLm9wZXJhdGlvbnMgcmVzb3VyY2UgdG8gZ2V0LgoKICAgIFJldHVybnM6CiAgICAgIE9wZXJhdGlvbiBBUEkgcmVwcmVzZW50YXRpb24uCiAgICAiIiIKICAgIHJlcXVlc3QgPSBzZWxmLm1lc3NhZ2VzLkNlcnRpZmljYXRlbWFuYWdlclByb2plY3RzTG9jYXRpb25zT3BlcmF0aW9uc0dldFJlcXVlc3QoCiAgICAgICAgbmFtZT1vcGVyYXRpb25fcmVmLlJlbGF0aXZlTmFtZSgpKQogICAgcmV0dXJuIHNlbGYuX3NlcnZpY2UuR2V0KHJlcXVlc3QpCgogIGRlZiBMaXN0KHNlbGYsIHBhcmVudF9yZWYsIGxpbWl0PU5vbmUsIHBhZ2Vfc2l6ZT1Ob25lLCBsaXN0X2ZpbHRlcj1Ob25lKToKICAgICIiIkxpc3Qgb3BlcmF0aW9ucyBpbiBhIGdpdmVuIHByb2plY3QgYW5kIGxvY2F0aW9uLgoKICAgIEFyZ3M6CiAgICAgIHBhcmVudF9yZWY6IGEgUmVzb3VyY2UgcmVmZXJlbmNlIHRvIGEKICAgICAgICBjZXJ0aWZpY2F0ZW1hbmFnZXIucHJvamVjdHMubG9jYXRpb25zIHJlc291cmNlIHRvIGxpc3Qgb3BlcmF0aW9ucyBmb3IuCiAgICAgIGxpbWl0OiBpbnQsIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVzdWx0cyB0byByZXR1cm4gZnJvbSB0aGUgQVBJLgogICAgICBwYWdlX3NpemU6IGludCwgdGhlIG51bWJlciBvZiByZXN1bHRzIGluIGVhY2ggYmF0Y2ggZnJvbSB0aGUgQVBJLgogICAgICBsaXN0X2ZpbHRlcjogc3RyLCBmaWx0ZXIgdG8gYXBwbHkgaW4gdGhlIGxpc3QgcmVxdWVzdC4KCiAgICBSZXR1cm5zOgogICAgICBBIGxpc3Qgb2YgdGhlIG9wZXJhdGlvbnMgaW4gdGhlIHByb2plY3QuCiAgICAiIiIKICAgIHJlcXVlc3QgPSBzZWxmLm1lc3NhZ2VzLkNlcnRpZmljYXRlbWFuYWdlclByb2plY3RzTG9jYXRpb25zT3BlcmF0aW9uc0xpc3RSZXF1ZXN0KAogICAgICAgIG5hbWU9cGFyZW50X3JlZi5SZWxhdGl2ZU5hbWUoKSwgZmlsdGVyPWxpc3RfZmlsdGVyKQogICAgcmV0dXJuIGxpc3RfcGFnZXIuWWllbGRGcm9tTGlzdCgKICAgICAgICBzZWxmLl9zZXJ2aWNlLAogICAgICAgIHJlcXVlc3QsCiAgICAgICAgYmF0Y2hfc2l6ZT1wYWdlX3NpemUsCiAgICAgICAgbGltaXQ9bGltaXQsCiAgICAgICAgZmllbGQ9J29wZXJhdGlvbnMnLAogICAgICAgIGJhdGNoX3NpemVfYXR0cmlidXRlPSdwYWdlU2l6ZScpCgogIGRlZiBXYWl0Rm9yT3BlcmF0aW9uKHNlbGYsIG9wZXJhdGlvbl9yZWYsIG1lc3NhZ2UpOgogICAgIiIiV2FpdHMgdW50aWwgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLgoKICAgIEFyZ3M6CiAgICAgIG9wZXJhdGlvbl9yZWY6IGEgUmVzb3VyY2UgcmVmZXJlbmNlIHRvIGEKICAgICAgICBjZXJ0aWZpY2F0ZW1hbmFnZXIucHJvamVjdHMubG9jYXRpb25zLm9wZXJhdGlvbnMgcmVzb3VyY2UgdG8gd2FpdCBmb3IuCiAgICAgIG1lc3NhZ2U6IHN0ciwgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQgd2hpbGUgd2FpdGluZy4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIFJldHVybnM6CiAgICAgIE9wZXJhdGlvbiByZXN1bHQuCiAgICAiIiIKPHxmaW1fZW5kfD4="]
["68b7cf34495484282b5c0ffddfdf8b6309f3df78-3","68b7cf34495484282b5c0ffddfdf8b6309f3df78","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0gIwojIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIiIiQVBJIGNsaWVudCBsaWJyYXJ5IGZvciBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIG9wZXJhdGlvbnMuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscwoKZnJvbSBhcGl0b29scy5iYXNlLnB5IGltcG9ydCBsaXN0X3BhZ2VyCgpmcm9tIGdvb2dsZWNsb3Vkc2RrLmFwaV9saWIuY2VydGlmaWNhdGVfbWFuYWdlciBpbXBvcnQgYXBpX2NsaWVudApmcm9tIGdvb2dsZWNsb3Vkc2RrLmFwaV9saWIudXRpbCBpbXBvcnQgd2FpdGVyCgoKY2xhc3MgT3BlcmF0aW9uQ2xpZW50KG9iamVjdCk6CiAgIiIiQVBJIGNsaWVudCBmb3IgQ2VydGlmaWNhdGUgTWFuYWdlciBvcGVyYXRpb25zLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgY2xpZW50PU5vbmUsIG1lc3NhZ2VzPU5vbmUpOgogICAgc2VsZi5fY2xpZW50ID0gY2xpZW50IG9yIGFwaV9jbGllbnQuR2V0Q2xpZW50SW5zdGFuY2UoKQogICAgc2VsZi5fc2VydmljZSA9IHNlbGYuX2NsaWVudC5wcm9qZWN0c19sb2NhdGlvbnNfb3BlcmF0aW9ucwogICAgc2VsZi5tZXNzYWdlcyA9IG1lc3NhZ2VzIG9yIHNlbGYuX2NsaWVudC5NRVNTQUdFU19NT0RVTEUKCiAgZGVmIEdldChzZWxmLCBvcGVyYXRpb25fcmVmKToKICAgICIiIkdldHMgb3BlcmF0aW9uLgoKICAgIEFyZ3M6CiAgICAgIG9wZXJhdGlvbl9yZWY6IGEgUmVzb3VyY2UgcmVmZXJlbmNlIHRvIGEKICAgICAgICBjZXJ0aWZpY2F0ZW1hbmFnZXIucHJvamVjdHMubG9jYXRpb25zLm9wZXJhdGlvbnMgcmVzb3VyY2UgdG8gZ2V0LgoKICAgIFJldHVybnM6CiAgICAgIE9wZXJhdGlvbiBBUEkgcmVwcmVzZW50YXRpb24uCiAgICAiIiIKICAgIHJlcXVlc3QgPSBzZWxmLm1lc3NhZ2VzLkNlcnRpZmljYXRlbWFuYWdlclByb2plY3RzTG9jYXRpb25zT3BlcmF0aW9uc0dldFJlcXVlc3QoCiAgICAgICAgbmFtZT1vcGVyYXRpb25fcmVmLlJlbGF0aXZlTmFtZSgpKQogICAgcmV0dXJuIHNlbGYuX3NlcnZpY2UuR2V0KHJlcXVlc3QpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgZGVmIExpc3Qoc2VsZiwgcGFyZW50X3JlZiwgbGltaXQ9Tm9uZSwgcGFnZV9zaXplPU5vbmUsIGxpc3RfZmlsdGVyPU5vbmUpOgogICAgIiIiTGlzdCBvcGVyYXRpb25zIGluIGEgZ2l2ZW4gcHJvamVjdCBhbmQgbG9jYXRpb24uCgo8fGZpbV9lbmR8Pg=="]
["178fb4de610d670ee34f935b07db79223e4e78b3-1","178fb4de610d670ee34f935b07db79223e4e78b3","PHxmaW1fcHJlZml4fD4KIiIiCkNvbnN0cnVjdHMgc2l0ZXMgZm9yIGBgc2VtYW50aWMgdHlwZXNgYCwgc2l0ZSwgd2hpY2ggaGllcmFyY2hpY2FsbHkgZGlzcGxheXMgYWxsIHR5cGVzLCBhbmQgc2l0ZSwgd2hpY2gKbGlzdHMgYWxsIGF2YWlsYWJsZSB2ZXJzaW9ucyBvZiBzY2hlbWFzLgoKU2l0ZXMgYXJlIHBsYWNlZCB1bmRlciBgYHR5cGVzYGAgZm9sZGVyIGluc2lkZSBgYHB1YmxpY2BgIGZvbGRlciwgd2hpY2ggc2hvdWxkIGV4aXN0IGF0IHRoZSByb290IG9mIHRoZSByZXBvc2l0b3J5LgoiIiIKCmltcG9ydCBqc29uCmltcG9ydCBvcwppbXBvcnQgdHlwaW5nCmZyb20gc2h1dGlsIGltcG9ydCBjb3B5ZmlsZQoKZnJvbSBweXF1ZXJ5IGltcG9ydCBQeVF1ZXJ5CmZyb20geWF0dGFnIGltcG9ydCBEb2MKClBSRUZJWCA9ICdodHRwczovL21ldGFkYXRhLmRhdGFkcml2ZW5kaXNjb3Zlcnkub3JnL3R5cGVzLycKCnR5cGVzID0ge30KCgpkZWYgY3ljbGVfZGV0ZWN0aW9uKHVybDogc3RyLCBwYXN0X3VybHM6IHR5cGluZy5MaXN0W3N0cl0pIC0+IE5vbmU6CiAgICAiIiIKICAgIERldGVjdHMgY3ljbGUgaW4gc2VtYW50aWMgdHlwZXMnIGhpZXJhcmNoeS4KCiAgICBBbHNvIGNoZWNrcyBpZiByZWZlcmVuY2VkIHVybHMgaW4gYGBwYXJlbnRzYGAgZXhpc3QuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgdXJsIDogc3RyCiAgICAgICAgVVJMIG9mIHRoZSBzZW1hbnRpYyB0eXBlIHRoYXQgaXMgdG8gYmUgYW5hbHl6ZWQuCiAgICBwYXN0X3VybHMgOiB0eXBpbmcuTGlzdFtzdHJdCiAgICAgICAgTGlzdCBvZiBwcmV2aW91c2x5IGNhbGxlZCB1cmxzLgogICAgIiIiCgogICAgZ2xvYmFsIHR5cGVzCgogICAgaWYgdXJsIG5vdCBpbiB0eXBlczoKICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNhbm5vdCBmaW5kIHJlZmVyZW5jZWQgc2VtYW50aWMgdHlwZSAne3VybH0nIi5mb3JtYXQodXJsPXVybCkpCiAgICBpZiB1cmwgaW4gcGFzdF91cmxzOgogICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ3ljbGUgaW4gc2VtYW50aWMgdHlwZXMgaGllcmFyY2h5LiBDeWNsZTogJ3tjeWNsZX0nIi5mb3JtYXQoCiAgICAgICAgICAgIGN5Y2xlPSgnIC0+ICcuam9pbihwYXN0X3VybHMgKyBbdXJsXSkpCiAgICAgICAgKSkKCiAgICBmb3IgcGFyZW50IGluIHR5cGVzW3VybF1bJ3BhcmVudHMnXToKICAgICAgICBjeWNsZV9kZXRlY3Rpb24ocGFyZW50LCBwYXN0X3VybHMgKyBbdXJsXSkKCgpkZWYgdGVtcGxhdGUodGFnLCBsaW5lKToKICAgICIiIgogICAgR2VuZXJhdGVzIEhUTUwgYmFzZSBmb3IgdGhlIHNpdGUuCgogICAgWWllbGRzIHRoZSByZXN1bHQsIHNvIEhUTUwgZW5kIGJyYWNrZXRzIChlLmcuIGBgPC9kaXY+YGApIGFyZSBub3QgY2xvc2VkLgoKICAgIFVzYWdlOjoKCiAgICAgICAgZm9yIHRlbXAgaW4gdGVtcGxhdGUodGFnLCBsaW5lKToKICAgICAgICAgICAgLi4uCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgdGFnIDogeWF0dGFnLnRhZwogICAgICAgIGBgdGFnYGAgZnJvbSB0aGUgYGB5YXR0YWdgYCBtb2R1bGUuCiAgICBsaW5lIDogeWF0dGFnLmxpbmUKICAgICAgICBgYGxpbmVgYCBmcm9tIHRoZSBgYHlhdHRhZ2BgIG1vZHVsZS4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICAgICAgRWxlbWVudCBvZiB0aGUgYGB5YXR0YWdgYCBtb2R1bGUgcmVwcmVzZW50aW5nIGNvbnRhaW5lciBvZiB0aGUgcGFnZS4KICAgICIiIgoKICAgIGdsb2JhbCB0eXBlcwoKICAgIHdpdGggdGFnKCdodG1sJyk6CiAgICAgICAgd2l0aCB0YWcoJ2hlYWQnKToKICAgICAgICAgICAgbGluZSgndGl0bGUnLCAiRDNNIE1ldGFkYXRhIikKICAgICAgICAgICAgbGluZSgnbWV0YScsICcnLCBjaGFyc2V0PSd1dGYtOCcpCiAgICAgICAgICAgIGxpbmUoJ21ldGEnLCAnJywgbmFtZT0ndmlld3BvcnQnLCBjb250ZW50PSd3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MScpCiAgICAgICAgICAgIGxpbmUoJ2xpbmsnLCAnJywgcmVsPSdzdHlsZXNoZWV0JywgaHJlZj0nL3NjaGVtYS1vcmcuY3NzJykKICAgICAgICB3aXRoIHRhZygnYm9keScpOgogICAgICAgICAgICB3aXRoIHRhZygnZGl2JywgaWQ9J2NvbnRhaW5lcicpOgogICAgICAgICAgICAgICAgd2l0aCB0YWcoJ2RpdicsIGlkPSdpbnRybycpOgogICAgICAgICAgICAgICAgICAgIHdpdGggdGFnKCdkaXYnLCBpZD0ncGFnZUhlYWRlcicpOgogICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRhZygnZGl2Jywga2xhc3M9J3dyYXBwZXInKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGFnKCdkaXYnLCBpZD0nc2l0ZW5hbWUnKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRhZygnaDEnKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSgnYScsICJtZXRhZGF0YS5kYXRhZHJpdmVuZGlzY292ZXJ5Lm9yZyIsIGhyZWY9Jy8nKQogICAgICAgICAgICB3aXRoIHRhZygnZGl2JywgaWQ9J3NlbGVjdGlvbmJhcicpOgogICAgICAgICAgICAgICAgd2l0aCB0YWcoJ2RpdicsIGtsYXNzPSd3cmFwcGVyJyk6CiAgICAgICAgICAgICAgICAgICAgd2l0aCB0YWcoJ3VsJyk6CiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGFnKCdsaScpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSgnYScsICJUeXBlcyIsIGhyZWY9Jy90eXBlcycpCiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGFnKCdsaScpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSgnYScsICJTY2hlbWFzIiwgaHJlZj0nL2RldmVsJykKICAgICAgICAgICAgd2l0aCB0YWcoJ2RpdicsIGlkPSdtYWluQ29udGVudCcpOgogICAgICAgICAgICAgICAgeWllbGQKCgpkZWYgY29uc3RydWN0X3R5cGVzKHNpdGUsIHBhcmVudDogc3RyKSAtPiBOb25lOgogICAgIiIiCiAgICBDb25zdHJ1Y3RzIGhpZXJhcmNoeSBkaXNwbGF5ZWQgc2VtYW50aWMgdHlwZXMgYXQgYGAvdHlwZXMvYGAgcGF0aC4KCiAgICBNb3JlIHNwZWNpZmljYWxseSwgY29uc3RydWN0cyBsaXN0IChIVE1MIGBgPHVsPmBgKSBvZiBzZW1hbnRpYyB0eXBlcyB0aGF0IGhhdmUgYGBwYXJlbnRgYCBmb3IgYW5jZXN0b3IuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgc2l0ZQogICAgICAgIGBgc2l0ZWBgIGZyb20gdGhlIGBgeWF0dGFnYGAgbW9kdWxlLgogICAgcGFyZW50IDogc3RyCiAgICAgICAgVVJMIG9mIHRoZSBwYXJlbnQuCiAgICAiIiIKCiAgICBnbG9iYWwgdHlwZXMKCiAgICB3aXRoIHNpdGUudGFnKCd1bCcpOgogICAgICAgIGZvciB1cmwgaW4gc29ydGVkKHR5cGVzLCBrZXk9bGFtYmRhIGtleTogdHlwZXNba2V5XVsnbGFiZWwnXSk6CiAgICAgICAgICAgIGlmIHBhcmVudCBpbiB0eXBlc1t1cmxdWydwYXJlbnRzJ10gb3IgbGVuKHBhcmVudCkgPT0gMCBhbmQgbGVuKHR5cGVzW3VybF1bJ3BhcmVudHMnXSkgPT0gMDoKICAgICAgICAgICAgICAgIHdpdGggc2l0ZS50YWcoJ2xpJyk6CiAgICAgICAgICAgICAgICAgICAgc2l0ZS5saW5lKCdhJywgdHlwZXNbdXJsXVsnbGFiZWwnXSwgaHJlZj11cmwpCiAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0X3R5cGVzKHNpdGUsIHVybCkKCgpkZWYgY29uc3RydWN0X2JyZWFkY3J1bWJzKHNpdGUsIGFuY2VzdG9yczogdHlwaW5nLkxpc3QpIC0+IE5vbmU6CiAgICAiIiIKICAgIENvbnN0cnVjdHMgYnJlYWRjcnVtYnMgaW4gdGhlIHBhZ2UuCgogICAgRS5nLiBpZiBgYGFuY2VzdG9yc2BgIGVxdWFscyBbYywgYiwgYV0sIHRoZW4gYnJlYWRjcnVtYnMgc2hvdWxkIGJlICIuLi4gPiBjID4gYiA+IGEiLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHNpdGUKICAgICAgICBgYHNpdGVgYCBmcm9tIHRoZSBgYHlhdHRhZ2BgIG1vZHVsZS4KICAgIGFuY2VzdG9ycyA6IHR5cGluZy5MaXN0CiAgICAgICAgVVJMcyBvZiBlbGVtZW50cyB0aGF0IGFyZSB0byBiZSBkaXNwbGF5ZWQgaW4gYnJlYWRjcnVtYnMuCiAgICAiIiIKCiAgICBnbG9iYWwgdHlwZXMKCiAgICBwYXJlbnRzID0gdHlwZXNbYW5jZXN0b3JzWzBdXVsncGFyZW50cyddCiAgICBmb3IgcGFyZW50IGluIHBhcmVudHM6CiAgICAgICAgY29uc3RydWN0X2JyZWFkY3J1bWJzKHNpdGUsIFtwYXJlbnRdICsgYW5jZXN0b3JzKQoKICAgIGlmIGxlbihwYXJlbnRzKSA9PSAwOgogICAgICAgIHdpdGggc2l0ZS50YWcoJ3NwYW4nKToKICAgICAgICAgICAgZm9yIHVybCBpbiBhbmNlc3RvcnM6CiAgICAgICAgICAgICAgICBzaXRlLmxpbmUoJ2EnLCB0eXBlc1t1cmxdWydsYWJlbCddLCBocmVmPXVybCkKICAgICAgICAgICAgICAgIHNpdGUubGluZSgnc3BhbicsICIgPiAiLCBrbGFzcz0naGlkZS1sYXN0JykKICAgICAgICBzaXRlLnN0YWcoJ2JyJykKCgpkZWYgZGVmaW5lX2V4dGVybmFsX3R5cGUodXJsOiBzdHIpIC0+IE5vbmU6CiAgICAiIiIKICAgIFVzZWQgZm9yIGFkZGluZyB0eXBlcyBmcm9tIGBgc2NoZW1hLm9yZ2BgIGRvbWFpbiB0byBgYHR5cGVzYGAuIEZldGNoZXMgYGB1cmxgYCBhbmQgbG9va3MgZm9yIHBhcmVudHMsCiAgICB3aGljaCBhcmUgYWxzbyByZWN1cnNpdmVseSBhZGRlZCB0byBgYHR5cGVzYGAuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgdXJsIDogc3RyCiAgICAgICAgVVJMIG9mIHRoZSB0eXBlLiBTaG91bGQgYmUgZnJvbSBgYHNjaGVtYS5vcmdgYCBkb21haW4uCiAgICAiIiIKCiAgICBnbG9iYWwgdHlwZXMKCiAgICBpZiB1cmwgaW4gdHlwZXM6CiAgICAgICAgcmV0dXJuCgogICAgdHlwZXNbdXJsXSA9IHsKICAgICAgICAnbGFiZWwnOiB1cmxbdXJsLnJmaW5kKCcvJykgKyAxOl0sCiAgICAgICAgJ2Rlc2NyaXB0aW9uJzogJycsCiAgICAgICAgJ3BhcmVudHMnOiBbXQogICAgfQogICAgY2FuZGlkYXRlcyA9IFB5UXVlcnkodXJsKSgnbGluaycpCgogICAgZm9yIGkgaW4gcmFuZ2UobGVuKGNhbmRpZGF0ZXMpKToKICAgICAgICBsaW5rID0gY2FuZGlkYXRlcy5lcShpKQogICAgICAgIGlmIGxpbmsuYXR0cigncHJvcGVydHknKSA9PSAncmRmczpzdWJDbGFzc09mJzoKICAgICAgICAgICAgcGFyZW50ID0gbGluay5hdHRyKCdocmVmJykKCiAgICAgICAgICAgIGlmIGxlbihwYXJlbnQpID4gMDoKICAgICAgICAgICAgICAgIGlmIHBhcmVudCBub3QgaW4gdHlwZXNbdXJsXVsncGFyZW50cyddOgogICAgICAgICAgICAgICAgICAgIHR5cGVzW3VybF1bJ3BhcmVudHMnXS5hcHBlbmQocGFyZW50KQogICAgICAgICAgICAgICAgZGVmaW5lX2V4dGVybmFsX3R5cGUocGFyZW50KQoKCmRlZiBtYWluKCkgLT4gTm9uZToKICAgIGdsb2JhbCB0eXBlcwoKICAgIG9zLm1ha2VkaXJzKCdwdWJsaWMvdHlwZXMnLCAwbzc1NSwgZXhpc3Rfb2s9VHJ1ZSkKICAgIGNvcHlmaWxlKCdzaXRlL3NjaGVtYS1vcmcuY3NzJywgJ3B1YmxpYy9zY2hlbWEtb3JnLmNzcycpCgogICAgc2NoZW1hID0ganNvbi5sb2FkKG9wZW4oJ2QzbS9tZXRhZGF0YS9zY2hlbWFzL3YwL2RlZmluaXRpb25zLmpzb24nKSkKCiAgICAjIEZpbGxpbmcgInR5cGVzIi4KICAgIGZvciBzZW1hbnRpY190eXBlIGluIHNjaGVtYVsnZGVmaW5pdGlvbnMnXVsnc2VtYW50aWNfdHlwZXMnXVsnaXRlbXMnXVsnYW55T2YnXToKICAgICAgICBpZiAnZW51bScgbm90IGluIHNlbWFudGljX3R5cGU6CiAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgIHVybCA9IHNlbWFudGljX3R5cGVbJ2VudW0nXVswXQoKICAgICAgICBkZXNjcmlwdGlvbiA9IHNlbWFudGljX3R5cGUuZ2V0KCdkZXNjcmlwdGlvbicsICcnKQogICAgICAgIHBhcmVudHMgPSBzZW1hbnRpY190eXBlLmdldCgncGFyZW50cycsIFtdKQogICAgICAgIGxhYmVsID0gdXJsW3VybC5yZmluZCgnLycpICsgMTpdCgogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhcmVudHMsIGxpc3QpOgogICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRoaXMgc2VtYW50aWMgdHlwZSBkb2VzIG5vdCBoYXZlIHR5cGUgJ2xpc3QnIGZvciAncGFyZW50cyc6IHt1cmx9Ii5mb3JtYXQodXJsPXVybCkpCgogICAgICAgICMgRGVmaW5pbmcgcGFyZW50cyBmcm9tICdzY2hlbWEub3JnJy4KICAgICAgICBmb3IgcGFyZW50IGluIHBhcmVudHM6CiAgICAgICAgICAgIGlmICcvL3NjaGVtYS5vcmcnIGluIHBhcmVudDoKICAgICAgICAgICAgICAgIGRlZmluZV9leHRlcm5hbF90eXBlKHBhcmVudCkKCiAgICAgICAgaWYgJy8vc2NoZW1hLm9yZycgaW4gdXJsOgogICAgICAgICAgICBpZiBsZW4ocGFyZW50cykgPiAwOgogICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUaGlzIFVSTCBzaG91bGQgbm90IGhhdmUgcGFyZW50cyBkZWZpbmVkIGluICdEM00nIHNjaGVtYToge3VybH0iLmZvcm1hdCh1cmw9dXJsKSkKCiAgICAgICAgICAgIGRlZmluZV9leHRlcm5hbF90eXBlKHVybCkKICAgICAgICAgICAgdHlwZXNbdXJsXVsnZGVzY3JpcHRpb24nXSA9IGRlc2NyaXB0aW9uCiAgICAgICAgZWxzZToKICAgICAgICAgICAgdHlwZXNbdXJsXSA9IHsKICAgICAgICAgICAgICAgICdsYWJlbCc6IGxhYmVsLAogICAgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogZGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAncGFyZW50cyc6IHBhcmVudHMKICAgICAgICAgICAgfQoKICAgICMgQ3ljbGUgZGV0ZWN0aW9uLgogICAgZm9yIHVybCBpbiB0eXBlczoKICAgICAgICBjeWNsZV9kZXRlY3Rpb24odXJsLCBbXSkKCiAgICAjIENvbnN0cnVjdGluZyBzaXRlIGF0IHRoZSByb290IG9mIHRoZSBkb21haW4uCiAgICBzaXRlLCB0YWcsIHRleHQsIGxpbmUgPSBEb2MoKS50dGwoKQoKICAgIGZvciB0ZW1wIGluIHRlbXBsYXRlKHRhZywgbGluZSk6CiAgICAgICAgbGluZSgnaDEnLCAiVmVyc2lvbnMiLCBrbGFzcz0ncGFnZS10aXRsZScsIHN0eWxlPSdtYXJnaW4tYm90dG9tOiAyMHB4JykKCiAgICAgICAgd2l0aCB0YWcoJ2RpdicsIGtsYXNzPSdicmVhZGNydW1icycpOgogICAgICAgICAgICBsaW5lKCdhJywgImRldmVsIiwgaHJlZj0nZGV2ZWwnKQoKICAgICAgICAjIFNvcnRpbmcgdmVyc2lvbnMgYnkgcmVsZWFzZSBudW1iZXIuCiAgICAgICAgdmVyc2lvbnMgPSB7fQogICAgICAgIGZvciBmb2xkZXIgaW4gb3MubGlzdGRpcigncHVibGljJyk6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHZlcnNpb25zW2ZvbGRlcl0gPSBbLWludChudW1iZXIpIGZvciBudW1iZXIgaW4gZm9sZGVyWzE6XS5zcGxpdCgnLicpXQogICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICBwYXNzCgogICAgICAgIGZvciB2ZXJzaW9uIGluIHNvcnRlZCh2ZXJzaW9ucywga2V5PWxhbWJkYSBrZXk6IHZlcnNpb25zW2tleV0pOgogICAgICAgICAgICBpZiB2ZXJzaW9uLnN0YXJ0c3dpdGgoJ3YnKToKICAgICAgICAgICAgICAgIHdpdGggdGFnKCdkaXYnLCBrbGFzcz0nYnJlYWRjcnVtYnMnKToKICAgICAgICAgICAgICAgICAgICBsaW5lKCdhJywgdmVyc2lvbiwgaHJlZj12ZXJzaW9uKQoKPHxmaW1faG9sZXw+CiAgICBzaXRlLCB0YWcsIHRleHQsIGxpbmUgPSBEb2MoKS50dGwoKQoKICAgIGZvciB0ZW1wIGluIHRlbXBsYXRlKHRhZywgbGluZSk6CiAgICAgICAgbGluZSgnaDEnLCAiU2VtYW50aWMgVHlwZXMiLCBrbGFzcz0ncGFnZS10aXRsZScsIHN0eWxlPSdtYXJnaW4tYm90dG9tOiAyMHB4JykKICAgICAgICBsaW5lKCdkaXYnLCBzY2hlbWFbJ2RlZmluaXRpb25zJ11bJ3NlbWFudGljX3R5cGVzJ10uZ2V0KCdkZXNjcmlwdGlvbicsICcnKSwgc3R5bGU9J21hcmdpbi1ib3R0b206IDIwcHgnKQogICAgICAgIGNvbnN0cnVjdF90eXBlcyhzaXRlLCAnJykKCiAgICB3aXRoIG9wZW4oJ3B1YmxpYy90eXBlcy9pbmRleC5odG1sJywgJ3cnKSBhcyBmaWxlOgogICAgICAgIGZpbGUud3JpdGUoc2l0ZS5nZXR2YWx1ZSgpKQoKICAgICMgQ29uc3RydWN0aW5nIHNpdGUgZm9yIGVhY2ggdHlwZS4KICAgIGZvciB1cmwgaW4gdHlwZXM6CiAgICAgICAgaWYgdXJsLnN0YXJ0c3dpdGgoUFJFRklYKToKICAgICAgICAgICAgc2l0ZSwgdGFnLCB0ZXh0LCBsaW5lID0gRG9jKCkudHRsKCkKCiAgICAgICAgICAgIGZvciB0ZW1wIGluIHRlbXBsYXRlKHRhZywgbGluZSk6CiAgICAgICAgICAgICAgICBsaW5lKCdoMScsIHR5cGVzW3VybF1bJ2xhYmVsJ10sIGtsYXNzPSdwYWdlLXRpdGxlJykKICAgICAgICAgICAgICAgIHdpdGggdGFnKCdzcGFuJywga2xhc3M9J2Nhbm9uaWNhbFVybCcpOgogICAgICAgICAgICAgICAgICAgIHRleHQoIkNhbm9uaWNhbCBVUkw6ICIpCiAgICAgICAgICAgICAgICAgICAgbGluZSgnYScsIHVybCwgaHJlZj11cmwpCiAgICAgICAgICAgICAgICB3aXRoIHRhZygnaDQnKToKICAgICAgICAgICAgICAgICAgICBpZiBsZW4odHlwZXNbdXJsXVsncGFyZW50cyddKSA+IDA6CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdF9icmVhZGNydW1icyhzaXRlLCBbdXJsXSkKICAgICAgICAgICAgICAgIGxpbmUoJ2RpdicsIHR5cGVzW3VybF1bJ2Rlc2NyaXB0aW9uJ10pCgogICAgICAgICAgICB3aXRoIG9wZW4oJ3B1YmxpYy90eXBlcy8nICsgdHlwZXNbdXJsXVsnbGFiZWwnXSwgJ3cnKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgZmlsZS53cml0ZShzaXRlLmdldHZhbHVlKCkpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIG1haW4oKQo8fGZpbV9zdWZmaXh8PgogICAgd2l0aCBvcGVuKCdwdWJsaWMvaW5kZXguaHRtbCcsICd3JykgYXMgZmlsZToKICAgICAgICBmaWxlLndyaXRlKHNpdGUuZ2V0dmFsdWUoKSkKCiAgICAjIENvbnN0cnVjdGluZyBzaXRlIGZvciBhbGwgdHlwZXMuCjx8ZmltX2VuZHw+"]
["8207cfe62f0d38e83d254285552edb34ab42d4e6-1","8207cfe62f0d38e83d254285552edb34ab42d4e6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIGFtaWdvcyBpbXBvcnQgYW1pZ29zX3Byb3hpbW9zLCBkaXN0YW5jaWFfZW50cmVfZG9pc19wb250b3MsIEFtaWdvCgpjbGFzcyBQcm94aW1pZGFkZUVudHJlQW1pZ29zVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIHNlbGYuYW1pZ28gPSBBbWlnbyhpZD0xLCBsYXRpdHVkZT0wLCBsb25naXR1ZGU9MCkKICAgICAgICBzZWxmLmFtaWdvMiA9IEFtaWdvKGlkPTIsIGxhdGl0dWRlPTEsIGxvbmdpdHVkZT0xKQogICAgICAgIHNlbGYuYW1pZ28zID0gQW1pZ28oaWQ9MywgbGF0aXR1ZGU9MjAsIGxvbmdpdHVkZT0yMCkKCiAgICBkZWYgdGVzdF9kZXZlX3JldG9ybmFyX29zX2FtaWdvc19tYWlzX3Byb3hpbW9zX29yZGVuYWRvcyhzZWxmKToKICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhbWlnb3NfcHJveGltb3MoW3NlbGYuYW1pZ28sIHNlbGYuYW1pZ28yXSksIHsxOiBbMl0sIDI6IFsxXX0pCgogICAgZGVmIHRlc3RfZGV2ZV9yZXRvcm5hcl9vc19hbWlnb3NfbWFpc19wcm94aW1vc19lbnRyZV90cmVzX2FtaWdvcyhzZWxmKToKICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhbWlnb3NfcHJveGltb3MoW3NlbGYuYW1pZ28sIHNlbGYuYW1pZ28yLCBzZWxmLmFtaWdvM10pLAogICAgICAgICAgICAgICAgICAgICAgICAgIHsxOiBbMiwgM10sIDI6IFsxLCAzXSwgMzogWzIsIDFdfSkKCmNsYXNzIERpc3RhbmNpYUVudHJlRG9pc1BvbnRvc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKCiAgICBkZWYgdGVzdF9kaXN0YW5jaWFfZW50cmVfZG9pc19wb250b3Moc2VsZik6CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGlzdGFuY2lhX2VudHJlX2RvaXNfcG9udG9zKCgwLCAwKSwgKDMsIDQpKSwgNSkKCmNsYXNzIEFtaWdvVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgoKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBzZWxmLmFtaWdvID0gQW1pZ28oaWQ9MSwgbGF0aXR1ZGU9MC40LCBsb25naXR1ZGU9MC4xMikKPHxmaW1faG9sZXw+CiAgICBkZWYgdGVzdF9hbWlnb19kZXZlX3Rlcl9pZChzZWxmKToKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYW1pZ28uaWQsIDEpCgogICAgZGVmIHRlc3RfYW1pZ29fZGV2ZV90ZXJfbGF0aXR1ZGUoc2VsZik6CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFtaWdvLmxhdGl0dWRlLCAwLjQpCgogICAgZGVmIHRlc3RfYW1pZ29fZGV2ZV90ZXJfbG9uZ2l0dXRlKHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hbWlnby5sb25naXR1ZGUsIDAuMTIpCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdW5pdHRlc3QubWFpbigpCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIHRlc3RfY3JpYV9pbnN0YW5jaWFfZGVfYW1pZ28oc2VsZik6CiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi5hbWlnbywgQW1pZ28pKQoKPHxmaW1fZW5kfD4="]
["8207cfe62f0d38e83d254285552edb34ab42d4e6-2","8207cfe62f0d38e83d254285552edb34ab42d4e6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIGFtaWdvcyBpbXBvcnQgYW1pZ29zX3Byb3hpbW9zLCBkaXN0YW5jaWFfZW50cmVfZG9pc19wb250b3MsIEFtaWdvCgpjbGFzcyBQcm94aW1pZGFkZUVudHJlQW1pZ29zVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIHNlbGYuYW1pZ28gPSBBbWlnbyhpZD0xLCBsYXRpdHVkZT0wLCBsb25naXR1ZGU9MCkKICAgICAgICBzZWxmLmFtaWdvMiA9IEFtaWdvKGlkPTIsIGxhdGl0dWRlPTEsIGxvbmdpdHVkZT0xKQogICAgICAgIHNlbGYuYW1pZ28zID0gQW1pZ28oaWQ9MywgbGF0aXR1ZGU9MjAsIGxvbmdpdHVkZT0yMCkKCiAgICBkZWYgdGVzdF9kZXZlX3JldG9ybmFyX29zX2FtaWdvc19tYWlzX3Byb3hpbW9zX29yZGVuYWRvcyhzZWxmKToKICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhbWlnb3NfcHJveGltb3MoW3NlbGYuYW1pZ28sIHNlbGYuYW1pZ28yXSksIHsxOiBbMl0sIDI6IFsxXX0pCgogICAgZGVmIHRlc3RfZGV2ZV9yZXRvcm5hcl9vc19hbWlnb3NfbWFpc19wcm94aW1vc19lbnRyZV90cmVzX2FtaWdvcyhzZWxmKToKICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhbWlnb3NfcHJveGltb3MoW3NlbGYuYW1pZ28sIHNlbGYuYW1pZ28yLCBzZWxmLmFtaWdvM10pLAogICAgICAgICAgICAgICAgICAgICAgICAgIHsxOiBbMiwgM10sIDI6IFsxLCAzXSwgMzogWzIsIDFdfSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgRGlzdGFuY2lhRW50cmVEb2lzUG9udG9zVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgoKICAgIGRlZiB0ZXN0X2Rpc3RhbmNpYV9lbnRyZV9kb2lzX3BvbnRvcyhzZWxmKToKPHxmaW1fZW5kfD4="]
["8207cfe62f0d38e83d254285552edb34ab42d4e6-3","8207cfe62f0d38e83d254285552edb34ab42d4e6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIGFtaWdvcyBpbXBvcnQgYW1pZ29zX3Byb3hpbW9zLCBkaXN0YW5jaWFfZW50cmVfZG9pc19wb250b3MsIEFtaWdvCgpjbGFzcyBQcm94aW1pZGFkZUVudHJlQW1pZ29zVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIHNlbGYuYW1pZ28gPSBBbWlnbyhpZD0xLCBsYXRpdHVkZT0wLCBsb25naXR1ZGU9MCkKICAgICAgICBzZWxmLmFtaWdvMiA9IEFtaWdvKGlkPTIsIGxhdGl0dWRlPTEsIGxvbmdpdHVkZT0xKQogICAgICAgIHNlbGYuYW1pZ28zID0gQW1pZ28oaWQ9MywgbGF0aXR1ZGU9MjAsIGxvbmdpdHVkZT0yMCkKCiAgICBkZWYgdGVzdF9kZXZlX3JldG9ybmFyX29zX2FtaWdvc19tYWlzX3Byb3hpbW9zX29yZGVuYWRvcyhzZWxmKToKPHxmaW1faG9sZXw+CiAgICBkZWYgdGVzdF9kZXZlX3JldG9ybmFyX29zX2FtaWdvc19tYWlzX3Byb3hpbW9zX2VudHJlX3RyZXNfYW1pZ29zKHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGFtaWdvc19wcm94aW1vcyhbc2VsZi5hbWlnbywgc2VsZi5hbWlnbzIsIHNlbGYuYW1pZ28zXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgezE6IFsyLCAzXSwgMjogWzEsIDNdLCAzOiBbMiwgMV19KQoKY2xhc3MgRGlzdGFuY2lhRW50cmVEb2lzUG9udG9zVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgoKICAgIGRlZiB0ZXN0X2Rpc3RhbmNpYV9lbnRyZV9kb2lzX3BvbnRvcyhzZWxmKToKICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkaXN0YW5jaWFfZW50cmVfZG9pc19wb250b3MoKDAsIDApLCAoMywgNCkpLCA1KQoKY2xhc3MgQW1pZ29UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIHNlbGYuYW1pZ28gPSBBbWlnbyhpZD0xLCBsYXRpdHVkZT0wLjQsIGxvbmdpdHVkZT0wLjEyKQoKICAgIGRlZiB0ZXN0X2NyaWFfaW5zdGFuY2lhX2RlX2FtaWdvKHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNlbGYuYW1pZ28sIEFtaWdvKSkKCiAgICBkZWYgdGVzdF9hbWlnb19kZXZlX3Rlcl9pZChzZWxmKToKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYW1pZ28uaWQsIDEpCgogICAgZGVmIHRlc3RfYW1pZ29fZGV2ZV90ZXJfbGF0aXR1ZGUoc2VsZik6CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFtaWdvLmxhdGl0dWRlLCAwLjQpCgogICAgZGVmIHRlc3RfYW1pZ29fZGV2ZV90ZXJfbG9uZ2l0dXRlKHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hbWlnby5sb25naXR1ZGUsIDAuMTIpCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdW5pdHRlc3QubWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYW1pZ29zX3Byb3hpbW9zKFtzZWxmLmFtaWdvLCBzZWxmLmFtaWdvMl0pLCB7MTogWzJdLCAyOiBbMV19KQoKPHxmaW1fZW5kfD4="]
["8207cfe62f0d38e83d254285552edb34ab42d4e6-4","8207cfe62f0d38e83d254285552edb34ab42d4e6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIGFtaWdvcyBpbXBvcnQgYW1pZ29zX3Byb3hpbW9zLCBkaXN0YW5jaWFfZW50cmVfZG9pc19wb250b3MsIEFtaWdvCgpjbGFzcyBQcm94aW1pZGFkZUVudHJlQW1pZ29zVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIHNlbGYuYW1pZ28gPSBBbWlnbyhpZD0xLCBsYXRpdHVkZT0wLCBsb25naXR1ZGU9MCkKICAgICAgICBzZWxmLmFtaWdvMiA9IEFtaWdvKGlkPTIsIGxhdGl0dWRlPTEsIGxvbmdpdHVkZT0xKQogICAgICAgIHNlbGYuYW1pZ28zID0gQW1pZ28oaWQ9MywgbGF0aXR1ZGU9MjAsIGxvbmdpdHVkZT0yMCkKCiAgICBkZWYgdGVzdF9kZXZlX3JldG9ybmFyX29zX2FtaWdvc19tYWlzX3Byb3hpbW9zX29yZGVuYWRvcyhzZWxmKToKICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhbWlnb3NfcHJveGltb3MoW3NlbGYuYW1pZ28sIHNlbGYuYW1pZ28yXSksIHsxOiBbMl0sIDI6IFsxXX0pCgogICAgZGVmIHRlc3RfZGV2ZV9yZXRvcm5hcl9vc19hbWlnb3NfbWFpc19wcm94aW1vc19lbnRyZV90cmVzX2FtaWdvcyhzZWxmKToKICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhbWlnb3NfcHJveGltb3MoW3NlbGYuYW1pZ28sIHNlbGYuYW1pZ28yLCBzZWxmLmFtaWdvM10pLAogICAgICAgICAgICAgICAgICAgICAgICAgIHsxOiBbMiwgM10sIDI6IFsxLCAzXSwgMzogWzIsIDFdfSkKCmNsYXNzIERpc3RhbmNpYUVudHJlRG9pc1BvbnRvc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKCiAgICBkZWYgdGVzdF9kaXN0YW5jaWFfZW50cmVfZG9pc19wb250b3Moc2VsZik6CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGlzdGFuY2lhX2VudHJlX2RvaXNfcG9udG9zKCgwLCAwKSwgKDMsIDQpKSwgNSkKCmNsYXNzIEFtaWdvVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgoKPHxmaW1faG9sZXw+CiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi5hbWlnbywgQW1pZ28pKQoKICAgIGRlZiB0ZXN0X2FtaWdvX2RldmVfdGVyX2lkKHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hbWlnby5pZCwgMSkKCiAgICBkZWYgdGVzdF9hbWlnb19kZXZlX3Rlcl9sYXRpdHVkZShzZWxmKToKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYW1pZ28ubGF0aXR1ZGUsIDAuNCkKCiAgICBkZWYgdGVzdF9hbWlnb19kZXZlX3Rlcl9sb25naXR1dGUoc2VsZik6CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFtaWdvLmxvbmdpdHVkZSwgMC4xMikKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICB1bml0dGVzdC5tYWluKCkKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBzZWxmLmFtaWdvID0gQW1pZ28oaWQ9MSwgbGF0aXR1ZGU9MC40LCBsb25naXR1ZGU9MC4xMikKCiAgICBkZWYgdGVzdF9jcmlhX2luc3RhbmNpYV9kZV9hbWlnbyhzZWxmKToKPHxmaW1fZW5kfD4="]
["82347a5bc437de7af2f323ea2965a9551df06592-1","82347a5bc437de7af2f323ea2965a9551df06592","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNvcHkKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IGl0ZXJ0b29scwoKZGVmIHBhcnNlKGRhdGEpOgogICAgcmV0dXJuIGxpc3QobWFwKGludCwgZGF0YS5zcGxpdGxpbmVzKCkpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpkZWYgcGFydDEob2Zmc2V0cyk6CiAgICBwYyA9IDAKICAgIGNvdW50ID0gMAo8fGZpbV9lbmR8Pg=="]
["82347a5bc437de7af2f323ea2965a9551df06592-2","82347a5bc437de7af2f323ea2965a9551df06592","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNvcHkKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IGl0ZXJ0b29scwoKZGVmIHBhcnNlKGRhdGEpOgogICAgcmV0dXJuIGxpc3QobWFwKGludCwgZGF0YS5zcGxpdGxpbmVzKCkpKQoKZGVmIHBhcnQxKG9mZnNldHMpOgogICAgcGMgPSAwCiAgICBjb3VudCA9IDAKICAgIHdoaWxlIHBjID49IDAgYW5kIHBjIDw9IGxlbihvZmZzZXRzKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ3BjICVkLCBvZmZzZXQgJWQnLCBwYywgb2Zmc2V0c1twY10pCiAgICAgICAgICAgIG5leHRwYyA9IHBjICsgb2Zmc2V0c1twY10KICAgICAgICAgICAgb2Zmc2V0c1twY10gKz0gMQo8fGZpbV9ob2xlfD4KICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICAgICAgYnJlYWsKCiAgICByZXR1cm4gY291bnQKCmRlZiBwYXJ0MihvZmZzZXRzKToKICAgIHBjID0gMAogICAgY291bnQgPSAwCiAgICB3aGlsZSBwYyA+PSAwIGFuZCBwYyA8PSBsZW4ob2Zmc2V0cyk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCdwYyAlZCwgb2Zmc2V0ICVkJywgcGMsIG9mZnNldHNbcGNdKQogICAgICAgICAgICBuZXh0cGMgPSBwYyArIG9mZnNldHNbcGNdCiAgICAgICAgICAgIGN1cnIgPSBvZmZzZXRzW3BjXQogICAgICAgICAgICBpZiBjdXJyID49IDM6CiAgICAgICAgICAgICAgICBvZmZzZXRzW3BjXSAtPSAxCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBvZmZzZXRzW3BjXSArPSAxCiAgICAgICAgICAgIHBjID0gbmV4dHBjCiAgICAgICAgICAgIGNvdW50ICs9IDEKICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICAgICAgYnJlYWsKCiAgICByZXR1cm4gY291bnQKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgcGMgPSBuZXh0cGMKICAgICAgICAgICAgY291bnQgKz0gMQo8fGZpbV9lbmR8Pg=="]
["82347a5bc437de7af2f323ea2965a9551df06592-3","82347a5bc437de7af2f323ea2965a9551df06592","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNvcHkKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IGl0ZXJ0b29scwoKZGVmIHBhcnNlKGRhdGEpOgogICAgcmV0dXJuIGxpc3QobWFwKGludCwgZGF0YS5zcGxpdGxpbmVzKCkpKQoKZGVmIHBhcnQxKG9mZnNldHMpOgogICAgcGMgPSAwCiAgICBjb3VudCA9IDAKICAgIHdoaWxlIHBjID49IDAgYW5kIHBjIDw9IGxlbihvZmZzZXRzKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ3BjICVkLCBvZmZzZXQgJWQnLCBwYywgb2Zmc2V0c1twY10pCiAgICAgICAgICAgIG5leHRwYyA9IHBjICsgb2Zmc2V0c1twY10KICAgICAgICAgICAgb2Zmc2V0c1twY10gKz0gMQogICAgICAgICAgICBwYyA9IG5leHRwYwogICAgICAgICAgICBjb3VudCArPSAxCjx8ZmltX2hvbGV8PgogICAgcmV0dXJuIGNvdW50CgpkZWYgcGFydDIob2Zmc2V0cyk6CiAgICBwYyA9IDAKICAgIGNvdW50ID0gMAogICAgd2hpbGUgcGMgPj0gMCBhbmQgcGMgPD0gbGVuKG9mZnNldHMpOgogICAgICAgIHRyeToKICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygncGMgJWQsIG9mZnNldCAlZCcsIHBjLCBvZmZzZXRzW3BjXSkKICAgICAgICAgICAgbmV4dHBjID0gcGMgKyBvZmZzZXRzW3BjXQogICAgICAgICAgICBjdXJyID0gb2Zmc2V0c1twY10KICAgICAgICAgICAgaWYgY3VyciA+PSAzOgogICAgICAgICAgICAgICAgb2Zmc2V0c1twY10gLT0gMQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgb2Zmc2V0c1twY10gKz0gMQogICAgICAgICAgICBwYyA9IG5leHRwYwogICAgICAgICAgICBjb3VudCArPSAxCiAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgICAgIGJyZWFrCgogICAgcmV0dXJuIGNvdW50Cjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgICAgIGJyZWFrCgo8fGZpbV9lbmR8Pg=="]
["68bc0b053fb36d3f50561acb290e44058a37c058-1","68bc0b053fb36d3f50561acb290e44058a37c058","PHxmaW1fcHJlZml4fD4KZnJvbSBwZWV3ZWUgaW1wb3J0ICoKZnJvbSAuYmFzZV9tb2RlbCBpbXBvcnQgQmFzZU1vZGVsCmZyb20gLmVwaXNvZGUgaW1wb3J0IEVwaXNvZGUKZnJvbSAubG9jYXRpb24gaW1wb3J0IExvY2F0aW9uCgoKY2xhc3MgQmFja2dyb3VuZChCYXNlTW9kZWwpOgogICAgaWQgPSBBdXRvRmllbGQoKQogICAgZXBpc29kZSA9IEZvcmVpZ25LZXlGaWVsZChFcGlzb2RlLCBkYl9jb2x1bW49J2VwaXNvZGVfaWQnLCBmaWVsZD0naWQnLCBiYWNrcmVmPSdiYWNrZ3JvdW5kcycsIG9uX2RlbGV0ZT0nQ0FTQ0FERScpCiAgICBzY2VuZSA9IEludGVnZXJGaWVsZChudWxsPUZhbHNlKQogICAgc2NlbmVfbW9kaWZpZXIgPSBDaGFyRmllbGQobnVsbD1UcnVlKQogICAgd2lkdGggPSBJbnRlZ2VyRmllbGQoKQogICAgaGVpZ2h0ID0gSW50ZWdlckZpZWxkKCkKICAgIG92ZXJsYXlfY291bnQgPSBJbnRlZ2VyRmllbGQoKQogICAgaG91cnMgPSBGbG9hdEZpZWxkKG51bGw9VHJ1ZSkKICAgIGxvY2F0aW9uID0gRm9yZWlnbktleUZpZWxkKExvY2F0aW9uLCBkYl9jb2x1bW49J2xvY2F0aW9uX2lkJywgZmllbGQ9J2lkJykKICAgIGVzdGFibGlzaGluZ19zaG90ID0gQm9vbGVhbkZpZWxkKGNob2ljZXM9KChGYWxzZSwgJ2YnKSwgKFRydWUsICd0JykpLCBudWxsPVRydWUpCiAgICBwYXJ0aWFsID0gQm9vbGVhbkZpZWxkKGNob2ljZXM9KChGYWxzZSwgJ2YnKSwgKFRydWUsICd0JykpLCBudWxsPVRydWUpCiAgICBwdWxsID0gQm9vbGVhbkZpZWxkKGNob2ljZXM9KChGYWxzZSwgJ2YnKSwgKFRydWUsICd0JykpLCBudWxsPVRydWUpCiAgICBjYXJkID0gQm9vbGVhbkZpZWxkKGNob2ljZXM9KChGYWxzZSwgJ2YnKSwgKFRydWUsICd0JykpLCBudWxsPVRydWUpCiAgICBkYXRlX3N0YXJ0ZWQgPSBEYXRlRmllbGQobnVsbD1UcnVlKQogICAgZGF0ZV9maW5pc2hlZCA9IERhdGVGaWVsZChudWxsPVRydWUpCiAgICBhcHByb3ZlZCA9IEJvb2xlYW5GaWVsZChjaG9pY2VzPSgoRmFsc2UsICdmJyksIChUcnVlLCAndCcpKSwgbnVsbD1UcnVlKQoKICAgIGRlZiBmb3JtYXRfcGFkZGVkX3NjZW5lKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFJldHVybnMgdGhlIG9iamVjdCdzIHNjZW5lIHZhbHVlIHBhZGRlZCB3aXRoIHVwIHRvIDIgemVyb3MuCiAgICAgICAgOnJldHVybjogUGFkZGVkIHNjZW5lIG51bWJlciBhcyBhIHN0cmluZy4KICAgICAgICAiIiIKICAgICAgICByZXR1cm4gJ3swOjA+M317MX0nLmZvcm1hdChzZWxmLnNjZW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2NlbmVfbW9kaWZpZXIgaWYgc2VsZi5zY2VuZV9tb2RpZmllciBlbHNlICcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQoKPHxmaW1faG9sZXw+CiAgICAgICAgIiIiCiAgICAgICAgdHJ5OgogICAgICAgICAgICBpZiBzZWxmLmVwaXNvZGU6CiAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgZXhjZXB0IEVwaXNvZGUuRG9lc05vdEV4aXN0OgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBkZWYgaGFzX2xvY2F0aW9uKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRlc3RzIGlmIHRoZSBvYmplY3QgaGFzIGEgdmFsaWQgbG9jYXRpb24gYXR0YWNoZWQuCiAgICAgICAgOnJldHVybjogVHJ1ZSBvciBGYWxzZQogICAgICAgICIiIgogICAgICAgIHRyeToKICAgICAgICAgICAgaWYgc2VsZi5sb2NhdGlvbjoKICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICBleGNlcHQgTG9jYXRpb24uRG9lc05vdEV4aXN0OgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gJ1NjIHt9Jy5mb3JtYXQoc2VsZi5mb3JtYXRfcGFkZGVkX3NjZW5lKCkpCgogICAgY2xhc3MgTWV0YToKICAgICAgICBkYl90YWJsZSA9ICdiYWNrZ3JvdW5kJwo8fGZpbV9zdWZmaXh8PgogICAgZGVmIGhhc19lcGlzb2RlKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRlc3RzIGlmIHRoZSBvYmplY3QgaGFzIGEgdmFsaWQgZXBpc29kZSBhdHRhY2hlZC4KICAgICAgICA6cmV0dXJuOiBUcnVlIG9yIEZhbHNlCjx8ZmltX2VuZHw+"]
["68bc0b053fb36d3f50561acb290e44058a37c058-2","68bc0b053fb36d3f50561acb290e44058a37c058","PHxmaW1fcHJlZml4fD4KZnJvbSBwZWV3ZWUgaW1wb3J0ICoKZnJvbSAuYmFzZV9tb2RlbCBpbXBvcnQgQmFzZU1vZGVsCmZyb20gLmVwaXNvZGUgaW1wb3J0IEVwaXNvZGUKZnJvbSAubG9jYXRpb24gaW1wb3J0IExvY2F0aW9uCgoKY2xhc3MgQmFja2dyb3VuZChCYXNlTW9kZWwpOgogICAgaWQgPSBBdXRvRmllbGQoKQogICAgZXBpc29kZSA9IEZvcmVpZ25LZXlGaWVsZChFcGlzb2RlLCBkYl9jb2x1bW49J2VwaXNvZGVfaWQnLCBmaWVsZD0naWQnLCBiYWNrcmVmPSdiYWNrZ3JvdW5kcycsIG9uX2RlbGV0ZT0nQ0FTQ0FERScpCiAgICBzY2VuZSA9IEludGVnZXJGaWVsZChudWxsPUZhbHNlKQogICAgc2NlbmVfbW9kaWZpZXIgPSBDaGFyRmllbGQobnVsbD1UcnVlKQogICAgd2lkdGggPSBJbnRlZ2VyRmllbGQoKQogICAgaGVpZ2h0ID0gSW50ZWdlckZpZWxkKCkKICAgIG92ZXJsYXlfY291bnQgPSBJbnRlZ2VyRmllbGQoKQogICAgaG91cnMgPSBGbG9hdEZpZWxkKG51bGw9VHJ1ZSkKICAgIGxvY2F0aW9uID0gRm9yZWlnbktleUZpZWxkKExvY2F0aW9uLCBkYl9jb2x1bW49J2xvY2F0aW9uX2lkJywgZmllbGQ9J2lkJykKICAgIGVzdGFibGlzaGluZ19zaG90ID0gQm9vbGVhbkZpZWxkKGNob2ljZXM9KChGYWxzZSwgJ2YnKSwgKFRydWUsICd0JykpLCBudWxsPVRydWUpCiAgICBwYXJ0aWFsID0gQm9vbGVhbkZpZWxkKGNob2ljZXM9KChGYWxzZSwgJ2YnKSwgKFRydWUsICd0JykpLCBudWxsPVRydWUpCiAgICBwdWxsID0gQm9vbGVhbkZpZWxkKGNob2ljZXM9KChGYWxzZSwgJ2YnKSwgKFRydWUsICd0JykpLCBudWxsPVRydWUpCiAgICBjYXJkID0gQm9vbGVhbkZpZWxkKGNob2ljZXM9KChGYWxzZSwgJ2YnKSwgKFRydWUsICd0JykpLCBudWxsPVRydWUpCiAgICBkYXRlX3N0YXJ0ZWQgPSBEYXRlRmllbGQobnVsbD1UcnVlKQogICAgZGF0ZV9maW5pc2hlZCA9IERhdGVGaWVsZChudWxsPVRydWUpCiAgICBhcHByb3ZlZCA9IEJvb2xlYW5GaWVsZChjaG9pY2VzPSgoRmFsc2UsICdmJyksIChUcnVlLCAndCcpKSwgbnVsbD1UcnVlKQoKICAgIGRlZiBmb3JtYXRfcGFkZGVkX3NjZW5lKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFJldHVybnMgdGhlIG9iamVjdCdzIHNjZW5lIHZhbHVlIHBhZGRlZCB3aXRoIHVwIHRvIDIgemVyb3MuCiAgICAgICAgOnJldHVybjogUGFkZGVkIHNjZW5lIG51bWJlciBhcyBhIHN0cmluZy4KICAgICAgICAiIiIKICAgICAgICByZXR1cm4gJ3swOjA+M317MX0nLmZvcm1hdChzZWxmLnNjZW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2NlbmVfbW9kaWZpZXIgaWYgc2VsZi5zY2VuZV9tb2RpZmllciBlbHNlICcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQoKICAgIGRlZiBoYXNfZXBpc29kZShzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUZXN0cyBpZiB0aGUgb2JqZWN0IGhhcyBhIHZhbGlkIGVwaXNvZGUgYXR0YWNoZWQuCiAgICAgICAgOnJldHVybjogVHJ1ZSBvciBGYWxzZQogICAgICAgICIiIgogICAgICAgIHRyeToKICAgICAgICAgICAgaWYgc2VsZi5lcGlzb2RlOgogICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgIGV4Y2VwdCBFcGlzb2RlLkRvZXNOb3RFeGlzdDoKPHxmaW1faG9sZXw+CiAgICBkZWYgaGFzX2xvY2F0aW9uKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRlc3RzIGlmIHRoZSBvYmplY3QgaGFzIGEgdmFsaWQgbG9jYXRpb24gYXR0YWNoZWQuCiAgICAgICAgOnJldHVybjogVHJ1ZSBvciBGYWxzZQogICAgICAgICIiIgogICAgICAgIHRyeToKICAgICAgICAgICAgaWYgc2VsZi5sb2NhdGlvbjoKICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICBleGNlcHQgTG9jYXRpb24uRG9lc05vdEV4aXN0OgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gJ1NjIHt9Jy5mb3JtYXQoc2VsZi5mb3JtYXRfcGFkZGVkX3NjZW5lKCkpCgogICAgY2xhc3MgTWV0YToKICAgICAgICBkYl90YWJsZSA9ICdiYWNrZ3JvdW5kJwo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCjx8ZmltX2VuZHw+"]
["68bc0b053fb36d3f50561acb290e44058a37c058-3","68bc0b053fb36d3f50561acb290e44058a37c058","PHxmaW1fcHJlZml4fD4KZnJvbSBwZWV3ZWUgaW1wb3J0ICoKZnJvbSAuYmFzZV9tb2RlbCBpbXBvcnQgQmFzZU1vZGVsCmZyb20gLmVwaXNvZGUgaW1wb3J0IEVwaXNvZGUKZnJvbSAubG9jYXRpb24gaW1wb3J0IExvY2F0aW9uCgoKY2xhc3MgQmFja2dyb3VuZChCYXNlTW9kZWwpOgogICAgaWQgPSBBdXRvRmllbGQoKQogICAgZXBpc29kZSA9IEZvcmVpZ25LZXlGaWVsZChFcGlzb2RlLCBkYl9jb2x1bW49J2VwaXNvZGVfaWQnLCBmaWVsZD0naWQnLCBiYWNrcmVmPSdiYWNrZ3JvdW5kcycsIG9uX2RlbGV0ZT0nQ0FTQ0FERScpCiAgICBzY2VuZSA9IEludGVnZXJGaWVsZChudWxsPUZhbHNlKQogICAgc2NlbmVfbW9kaWZpZXIgPSBDaGFyRmllbGQobnVsbD1UcnVlKQogICAgd2lkdGggPSBJbnRlZ2VyRmllbGQoKQogICAgaGVpZ2h0ID0gSW50ZWdlckZpZWxkKCkKICAgIG92ZXJsYXlfY291bnQgPSBJbnRlZ2VyRmllbGQoKQogICAgaG91cnMgPSBGbG9hdEZpZWxkKG51bGw9VHJ1ZSkKICAgIGxvY2F0aW9uID0gRm9yZWlnbktleUZpZWxkKExvY2F0aW9uLCBkYl9jb2x1bW49J2xvY2F0aW9uX2lkJywgZmllbGQ9J2lkJykKICAgIGVzdGFibGlzaGluZ19zaG90ID0gQm9vbGVhbkZpZWxkKGNob2ljZXM9KChGYWxzZSwgJ2YnKSwgKFRydWUsICd0JykpLCBudWxsPVRydWUpCiAgICBwYXJ0aWFsID0gQm9vbGVhbkZpZWxkKGNob2ljZXM9KChGYWxzZSwgJ2YnKSwgKFRydWUsICd0JykpLCBudWxsPVRydWUpCiAgICBwdWxsID0gQm9vbGVhbkZpZWxkKGNob2ljZXM9KChGYWxzZSwgJ2YnKSwgKFRydWUsICd0JykpLCBudWxsPVRydWUpCiAgICBjYXJkID0gQm9vbGVhbkZpZWxkKGNob2ljZXM9KChGYWxzZSwgJ2YnKSwgKFRydWUsICd0JykpLCBudWxsPVRydWUpCiAgICBkYXRlX3N0YXJ0ZWQgPSBEYXRlRmllbGQobnVsbD1UcnVlKQogICAgZGF0ZV9maW5pc2hlZCA9IERhdGVGaWVsZChudWxsPVRydWUpCiAgICBhcHByb3ZlZCA9IEJvb2xlYW5GaWVsZChjaG9pY2VzPSgoRmFsc2UsICdmJyksIChUcnVlLCAndCcpKSwgbnVsbD1UcnVlKQoKICAgIGRlZiBmb3JtYXRfcGFkZGVkX3NjZW5lKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFJldHVybnMgdGhlIG9iamVjdCdzIHNjZW5lIHZhbHVlIHBhZGRlZCB3aXRoIHVwIHRvIDIgemVyb3MuCiAgICAgICAgOnJldHVybjogUGFkZGVkIHNjZW5lIG51bWJlciBhcyBhIHN0cmluZy4KICAgICAgICAiIiIKICAgICAgICByZXR1cm4gJ3swOjA+M317MX0nLmZvcm1hdChzZWxmLnNjZW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2NlbmVfbW9kaWZpZXIgaWYgc2VsZi5zY2VuZV9tb2RpZmllciBlbHNlICcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQoKICAgIGRlZiBoYXNfZXBpc29kZShzZWxmKToKICAgICAgICAiIiIKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIGlmIHNlbGYuZXBpc29kZToKICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICBleGNlcHQgRXBpc29kZS5Eb2VzTm90RXhpc3Q6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIGRlZiBoYXNfbG9jYXRpb24oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdHMgaWYgdGhlIG9iamVjdCBoYXMgYSB2YWxpZCBsb2NhdGlvbiBhdHRhY2hlZC4KICAgICAgICA6cmV0dXJuOiBUcnVlIG9yIEZhbHNlCiAgICAgICAgIiIiCiAgICAgICAgdHJ5OgogICAgICAgICAgICBpZiBzZWxmLmxvY2F0aW9uOgogICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgIGV4Y2VwdCBMb2NhdGlvbi5Eb2VzTm90RXhpc3Q6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiAnU2Mge30nLmZvcm1hdChzZWxmLmZvcm1hdF9wYWRkZWRfc2NlbmUoKSkKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIGRiX3RhYmxlID0gJ2JhY2tncm91bmQnCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgVGVzdHMgaWYgdGhlIG9iamVjdCBoYXMgYSB2YWxpZCBlcGlzb2RlIGF0dGFjaGVkLgogICAgICAgIDpyZXR1cm46IFRydWUgb3IgRmFsc2UKICAgICAgICAiIiIKICAgICAgICB0cnk6Cjx8ZmltX2VuZHw+"]
["6b57d9f028297db015badf8ff71f5a888a588584-1","6b57d9f028297db015badf8ff71f5a888a588584","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCkNyZWF0ZWQgb24gU2F0IEFwciAyNSAxMTowMjoxNSAyMDIwCgpAYXV0aG9yOiBQcmFuYXYgRGV2YXJpbnRpCiIiIgpmcm9tIGFiYyBpbXBvcnQgQUJDLCBhYnN0cmFjdG1ldGhvZApmcm9tIE9wZXJhdGlvbnNNYW5hZ2Vycy5DUFUgaW1wb3J0IENQVQpmcm9tIHN5bXB5IGltcG9ydCBTeW1ib2wsIERlcml2YXRpdmUKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRoCgpjbGFzcyBMYXllcihBQkMpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsb3BlcmF0aW9ucz1DUFUpOgogICAgICAgIHNlbGYub3V0cHV0X3NoYXBlID0gc2VsZi5nZXRfb3V0cHV0X3NoYXBlKCkKICAgICAgICBzZWxmLm9wZXJhdGlvbnMgPSBvcGVyYXRpb25zCiAgICAKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIGJ1aWxkKHNlbGYsaW5wdXRfc2hhcGU6IHR1cGxlKToKICAgICAgICBzZWxmLmlucHV0X3NoYXBlID0gaW5wdXRfc2hhcGUKICAgICAgICBwYXNzCiAgICAKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIGNvbXB1dGUoc2VsZixpbnB1dHMpOgogICAgICAgIHBhc3MKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIGdldF9vdXRwdXRfc2hhcGUoc2VsZik6CiAgICAgICAgcGFzcwogICAgQGFic3RyYWN0bWV0aG9kCiAgICBkZWYgdHJhaW5hYmxlX3dlaWdodF9kZXJpdmF0aXZlcyhzZWxmKToKICAgICAgICBwYXNzCiAgICBAYWJzdHJhY3RtZXRob2QKICAgIGRlZiBhcHBseV9jaGFuZ2VzKHNlbGYpOgogICAgICAgIHBhc3MKCmNsYXNzIERlbnNlKExheWVyKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLHVuaXRzKToKICAgICAgICBzZWxmLnVuaXRzID0gdW5pdHMKICAgIGRlZiBidWlsZChzZWxmLCBpbnB1dF9zaGFwZSA6bGlzdCxvcGVyYXRpb25zPUNQVSk6CiAgICAgICAgc2VsZi5vcGVyYXRpb25zID0gb3BlcmF0aW9ucwogICAgICAgIHNlbGYuaW5wdXRfc2hhcGUgPSBpbnB1dF9zaGFwZQogICAgICAgIGJvdW5kID0gbnAuc3FydCg2KS9ucC5zcXJ0KChucC5wcm9kdWN0KHNlbGYuaW5wdXRfc2hhcGUpK3NlbGYudW5pdHMpKQogICAgICAgIHNlbGYud2VpZ2h0cyA9IHNlbGYub3BlcmF0aW9ucy5kZWZhdWx0X2FycmF5KG5wLnJhbmRvbS51bmlmb3JtKHNpemU9KHNlbGYudW5pdHMsaW50KGlucHV0X3NoYXBlWzBdKSksbG93PS1ib3VuZCxoaWdoPWJvdW5kKSkKICAgICAgICBzZWxmLmJhaXNlcyA9IHNlbGYub3BlcmF0aW9ucy5kZWZhdWx0X2FycmF5KG5wLnJhbmRvbS51bmlmb3JtKC1ib3VuZCxib3VuZCkpCiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhzZWxmLm9wZXJhdGlvbnMpCiAgICBkZWYgY29tcHV0ZShzZWxmLGlucHV0cyk6CiAgICAgICAgcmV0dXJuIHNlbGYub3BlcmF0aW9ucy5hZGQoc2VsZi5vcGVyYXRpb25zLmRvdChzZWxmLndlaWdodHMsIGlucHV0cyksc2VsZi5iYWlzZXMpCiAgICBkZWYgZ2V0X291dHB1dF9zaGFwZShzZWxmKToKICAgICAgICByZXR1cm4gbGlzdChzZWxmLmNvbXB1dGUoc2VsZi5vcGVyYXRpb25zLmdldF9yYW5kb21fbWV0aG9kKCkoc2l6ZT1zZWxmLmlucHV0X3NoYXBlKSkuc2hhcGUpCiAgICBkZWYgdHJhaW5hYmxlX3dlaWdodF9kZXJpdmF0aXZlcyhzZWxmLGlucHV0cyxkZWx0YXMpOgogICAgICAgIHRyYWluYWJsZV93ZWlnaHRzID0gZGljdCgpCiAgICAgICAgdHJhaW5hYmxlX3dlaWdodHNbIlByZXZpb3VzX0xheWVyIl0gPSBzZWxmLm9wZXJhdGlvbnMuZG90KHNlbGYud2VpZ2h0cy50cmFuc3Bvc2UoKSxkZWx0YXMpCiAgICAgICAgdHJhaW5hYmxlX3dlaWdodHNbIldlaWdodHMiXSA9IHNlbGYub3BlcmF0aW9ucy5yZXNoYXBlKGlucHV0cywoMSwtMSkpKnNlbGYub3BlcmF0aW9ucy5yZXNoYXBlKGRlbHRhcywoLTEsMSkpCiAgICAgICAgdHJhaW5hYmxlX3dlaWdodHNbIkJhaXNlcyJdID0gZGVsdGFzCiAgICAgICAgcmV0dXJuIHRyYWluYWJsZV93ZWlnaHRzCiAgICBkZWYgYXBwbHlfY2hhbmdlcyhzZWxmLHRyYWluYWJsZV93ZWlnaHRzX2RpY3QpOgogICAgICAgIHNlbGYud2VpZ2h0cyA9IHRyYWluYWJsZV93ZWlnaHRzX2RpY3RbIldlaWdodHMiXStzZWxmLndlaWdodHMKICAgICAgICBzZWxmLmJhaXNlcyA9IHRyYWluYWJsZV93ZWlnaHRzX2RpY3RbIkJhaXNlcyJdK3NlbGYuYmFpc2VzCiAgICAgICAgCiAgICAgICAgCmNsYXNzIFNpbXBsZV9BY3RpdmF0aW9uKExheWVyKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLGlucHV0X3NoYXBlLG9wZXJhdGlvbnMpOgogICAgICAgIHNlbGYuaW5wdXRfc2hhcGUgPSBpbnB1dF9zaGFwZQogICAgICAgIHNlbGYub3BlcmF0aW9ucyA9IG9wZXJhdGlvbnMKICAgIGRlZiBnZXRfb3V0cHV0X3NoYXBlKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmlucHV0X3NoYXBlCiAgICBkZWYgdHJhaW5hYmxlX3dlaWdodF9kZXJpdmF0aXZlcyhzZWxmLGlucHV0cyxkZWx0YXMpOgogICAgICAgIHRyYWluYWJsZV93ZWlnaHRzID0gZGljdCgpCiAgICAgICAgdHJhaW5hYmxlX3dlaWdodHNbIlByZXZpb3VzX0xheWVyIl0gPSBzZWxmLmRlcml2YXRpdmUoaW5wdXRzKSpkZWx0YXMKICAgICAgICByZXR1cm4gdHJhaW5hYmxlX3dlaWdodHMKICAgIGRlZiBhcHBseV9jaGFuZ2VzKHNlbGYsY2hhbmdlcyk6CiAgICAgICAgcGFzcwogICAgQGFic3RyYWN0bWV0aG9kCiAgICBkZWYgZGVyaXZhdGl2ZShpbnB1dHMpOgogICAgICAgIHBhc3MKCiAgICAjIFJlbWVtYmVyIHRoYXQgd2Ugc3RpbGwgYWxzbyBuZWVkIHRvIGRlZmluZSBjb21wdXRlCiAgICAKY2xhc3MgUmVMVShTaW1wbGVfQWN0aXZhdGlvbik6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgcGFzcwogICAgZGVmIGJ1aWxkKHNlbGYsaW5wdXRfc2hhcGU6IHR1cGxlLG9wZXJhdGlvbnM9Q1BVKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKGlucHV0X3NoYXBlLG9wZXJhdGlvbnMpCiAgICBkZWYgZGVyaXZhdGl2ZShzZWxmLHgpOgogICAgICAgIHJldHVybiBzZWxmLm9wZXJhdGlvbnMud2hlcmUoeCA8PTAsMCwxKQogICAgZGVmIGNvbXB1dGUoc2VsZiwgeCk6CiAgICAgICAgcmV0dXJuIHNlbGYub3BlcmF0aW9ucy53aGVyZSh4IDw9MCwwLHgpCgpjbGFzcyBTZUxVKFNpbXBsZV9BY3RpdmF0aW9uKToKICAgIAogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHBhc3MKICAgIGRlZiBidWlsZChzZWxmLGlucHV0X3NoYXBlOiB0dXBsZSxvcGVyYXRpb25zPUNQVSk6CiAgICAgICAgc2VsZi5hbHBoYV92YWx1ZSA9IDEuNjczMjYzMjQyMzU0Mzc3Mjg0ODE3MDQyOTkxNjcxNwo8fGZpbV9ob2xlfD4KICAgIGRlZiBkZXJpdmF0aXZlKHNlbGYseCk6CiAgICAgICAgcmV0dXJuIHNlbGYub3BlcmF0aW9ucy53aGVyZSh4IDw9MCxzZWxmLmFscGhhX3ZhbHVlKihtYXRoLmUqKngpLDEpCiAgICBkZWYgY29tcHV0ZShzZWxmLCB4KToKICAgICAgICByZXR1cm4gc2VsZi5vcGVyYXRpb25zLndoZXJlKHggPD0wLHNlbGYubGFtYmRhX3ZhbHVlKihzZWxmLmFscGhhX3ZhbHVlKihtYXRoLmUqKngpKS1zZWxmLmFscGhhX3ZhbHVlLHNlbGYubGFtYmRhX3ZhbHVlKngpCgpjbGFzcyBTaWdtb2lkKFNpbXBsZV9BY3RpdmF0aW9uKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBwYXNzCiAgICBkZWYgYnVpbGQoc2VsZixpbnB1dF9zaGFwZTogdHVwbGUsb3BlcmF0aW9ucz1DUFUpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oaW5wdXRfc2hhcGUsb3BlcmF0aW9ucykKICAgIGRlZiBkZXJpdmF0aXZlKHNlbGYseCk6CiAgICAgICAgcmV0dXJuIHNlbGYuY29tcHV0ZSh4KSooMS1zZWxmLmNvbXB1dGUoeCkpCiAgICBkZWYgY29tcHV0ZShzZWxmLCB4KToKICAgICAgICByZXR1cm4gMS8oMSArIG1hdGguZSoqKC14KSkKCgojIEluW10KIiIiCmltcG9ydCBjdXB5CmZyb20gT3BlcmF0aW9uc01hbmFnZXJzLkNVREEgaW1wb3J0IENVREFBY2NlbGVyYXRlZE9wZXJhdGlvbnMgYXMgQ1VEQQojRCA9IERlbnNlKFszXSw1LG9wZXJhdGlvbnM9Q1VEQSkKI3ByaW50KEQudHJhaW5hYmxlX3dlaWdodF9kZXJpdmF0aXZlcyhjdXB5LmFycmF5KFsxLDIsM10pLGN1cHkuYXJyYXkoWzEsMiwzLDIsMV0pKSkKClIgPSBTZUxVKCkKUi5idWlsZChbM10sb3BlcmF0aW9ucz1DVURBKQpWID0gUi50cmFpbmFibGVfd2VpZ2h0X2Rlcml2YXRpdmVzKGN1cHkuYXJyYXkoWzEsMiwzXSksY3VweS5hcnJheShbMSwyLDFdKSkKcHJpbnQoVikKIiIiCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5sYW1iZGFfdmFsdWUgPSAxLjA1MDcwMDk4NzM1NTQ4MDQ5MzQxOTMzNDk4NTI5NDYKICAgICAgICBzdXBlcigpLl9faW5pdF9fKGlucHV0X3NoYXBlLG9wZXJhdGlvbnMpCjx8ZmltX2VuZHw+"]
["6b57d9f028297db015badf8ff71f5a888a588584-2","6b57d9f028297db015badf8ff71f5a888a588584","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCkNyZWF0ZWQgb24gU2F0IEFwciAyNSAxMTowMjoxNSAyMDIwCgpAYXV0aG9yOiBQcmFuYXYgRGV2YXJpbnRpCiIiIgpmcm9tIGFiYyBpbXBvcnQgQUJDLCBhYnN0cmFjdG1ldGhvZApmcm9tIE9wZXJhdGlvbnNNYW5hZ2Vycy5DUFUgaW1wb3J0IENQVQpmcm9tIHN5bXB5IGltcG9ydCBTeW1ib2wsIERlcml2YXRpdmUKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRoCgpjbGFzcyBMYXllcihBQkMpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsb3BlcmF0aW9ucz1DUFUpOgogICAgICAgIHNlbGYub3V0cHV0X3NoYXBlID0gc2VsZi5nZXRfb3V0cHV0X3NoYXBlKCkKICAgICAgICBzZWxmLm9wZXJhdGlvbnMgPSBvcGVyYXRpb25zCiAgICAKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIGJ1aWxkKHNlbGYsaW5wdXRfc2hhcGU6IHR1cGxlKToKICAgICAgICBzZWxmLmlucHV0X3NoYXBlID0gaW5wdXRfc2hhcGUKICAgICAgICBwYXNzCiAgICAKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIGNvbXB1dGUoc2VsZixpbnB1dHMpOgogICAgICAgIHBhc3MKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIGdldF9vdXRwdXRfc2hhcGUoc2VsZik6CiAgICAgICAgcGFzcwogICAgQGFic3RyYWN0bWV0aG9kCiAgICBkZWYgdHJhaW5hYmxlX3dlaWdodF9kZXJpdmF0aXZlcyhzZWxmKToKICAgICAgICBwYXNzCiAgICBAYWJzdHJhY3RtZXRob2QKICAgIGRlZiBhcHBseV9jaGFuZ2VzKHNlbGYpOgogICAgICAgIHBhc3MKCmNsYXNzIERlbnNlKExheWVyKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLHVuaXRzKToKICAgICAgICBzZWxmLnVuaXRzID0gdW5pdHMKICAgIGRlZiBidWlsZChzZWxmLCBpbnB1dF9zaGFwZSA6bGlzdCxvcGVyYXRpb25zPUNQVSk6CiAgICAgICAgc2VsZi5vcGVyYXRpb25zID0gb3BlcmF0aW9ucwogICAgICAgIHNlbGYuaW5wdXRfc2hhcGUgPSBpbnB1dF9zaGFwZQogICAgICAgIGJvdW5kID0gbnAuc3FydCg2KS9ucC5zcXJ0KChucC5wcm9kdWN0KHNlbGYuaW5wdXRfc2hhcGUpK3NlbGYudW5pdHMpKQogICAgICAgIHNlbGYud2VpZ2h0cyA9IHNlbGYub3BlcmF0aW9ucy5kZWZhdWx0X2FycmF5KG5wLnJhbmRvbS51bmlmb3JtKHNpemU9KHNlbGYudW5pdHMsaW50KGlucHV0X3NoYXBlWzBdKSksbG93PS1ib3VuZCxoaWdoPWJvdW5kKSkKICAgICAgICBzZWxmLmJhaXNlcyA9IHNlbGYub3BlcmF0aW9ucy5kZWZhdWx0X2FycmF5KG5wLnJhbmRvbS51bmlmb3JtKC1ib3VuZCxib3VuZCkpCiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhzZWxmLm9wZXJhdGlvbnMpCiAgICBkZWYgY29tcHV0ZShzZWxmLGlucHV0cyk6CiAgICAgICAgcmV0dXJuIHNlbGYub3BlcmF0aW9ucy5hZGQoc2VsZi5vcGVyYXRpb25zLmRvdChzZWxmLndlaWdodHMsIGlucHV0cyksc2VsZi5iYWlzZXMpCjx8ZmltX2hvbGV8PgogICAgICAgIHRyYWluYWJsZV93ZWlnaHRzWyJQcmV2aW91c19MYXllciJdID0gc2VsZi5vcGVyYXRpb25zLmRvdChzZWxmLndlaWdodHMudHJhbnNwb3NlKCksZGVsdGFzKQogICAgICAgIHRyYWluYWJsZV93ZWlnaHRzWyJXZWlnaHRzIl0gPSBzZWxmLm9wZXJhdGlvbnMucmVzaGFwZShpbnB1dHMsKDEsLTEpKSpzZWxmLm9wZXJhdGlvbnMucmVzaGFwZShkZWx0YXMsKC0xLDEpKQogICAgICAgIHRyYWluYWJsZV93ZWlnaHRzWyJCYWlzZXMiXSA9IGRlbHRhcwogICAgICAgIHJldHVybiB0cmFpbmFibGVfd2VpZ2h0cwogICAgZGVmIGFwcGx5X2NoYW5nZXMoc2VsZix0cmFpbmFibGVfd2VpZ2h0c19kaWN0KToKICAgICAgICBzZWxmLndlaWdodHMgPSB0cmFpbmFibGVfd2VpZ2h0c19kaWN0WyJXZWlnaHRzIl0rc2VsZi53ZWlnaHRzCiAgICAgICAgc2VsZi5iYWlzZXMgPSB0cmFpbmFibGVfd2VpZ2h0c19kaWN0WyJCYWlzZXMiXStzZWxmLmJhaXNlcwogICAgICAgIAogICAgICAgIApjbGFzcyBTaW1wbGVfQWN0aXZhdGlvbihMYXllcik6CiAgICBkZWYgX19pbml0X18oc2VsZixpbnB1dF9zaGFwZSxvcGVyYXRpb25zKToKICAgICAgICBzZWxmLmlucHV0X3NoYXBlID0gaW5wdXRfc2hhcGUKICAgICAgICBzZWxmLm9wZXJhdGlvbnMgPSBvcGVyYXRpb25zCiAgICBkZWYgZ2V0X291dHB1dF9zaGFwZShzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5pbnB1dF9zaGFwZQogICAgZGVmIHRyYWluYWJsZV93ZWlnaHRfZGVyaXZhdGl2ZXMoc2VsZixpbnB1dHMsZGVsdGFzKToKICAgICAgICB0cmFpbmFibGVfd2VpZ2h0cyA9IGRpY3QoKQogICAgICAgIHRyYWluYWJsZV93ZWlnaHRzWyJQcmV2aW91c19MYXllciJdID0gc2VsZi5kZXJpdmF0aXZlKGlucHV0cykqZGVsdGFzCiAgICAgICAgcmV0dXJuIHRyYWluYWJsZV93ZWlnaHRzCiAgICBkZWYgYXBwbHlfY2hhbmdlcyhzZWxmLGNoYW5nZXMpOgogICAgICAgIHBhc3MKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIGRlcml2YXRpdmUoaW5wdXRzKToKICAgICAgICBwYXNzCgogICAgIyBSZW1lbWJlciB0aGF0IHdlIHN0aWxsIGFsc28gbmVlZCB0byBkZWZpbmUgY29tcHV0ZQogICAgCmNsYXNzIFJlTFUoU2ltcGxlX0FjdGl2YXRpb24pOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHBhc3MKICAgIGRlZiBidWlsZChzZWxmLGlucHV0X3NoYXBlOiB0dXBsZSxvcGVyYXRpb25zPUNQVSk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhpbnB1dF9zaGFwZSxvcGVyYXRpb25zKQogICAgZGVmIGRlcml2YXRpdmUoc2VsZix4KToKICAgICAgICByZXR1cm4gc2VsZi5vcGVyYXRpb25zLndoZXJlKHggPD0wLDAsMSkKICAgIGRlZiBjb21wdXRlKHNlbGYsIHgpOgogICAgICAgIHJldHVybiBzZWxmLm9wZXJhdGlvbnMud2hlcmUoeCA8PTAsMCx4KQoKY2xhc3MgU2VMVShTaW1wbGVfQWN0aXZhdGlvbik6CiAgICAKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBwYXNzCiAgICBkZWYgYnVpbGQoc2VsZixpbnB1dF9zaGFwZTogdHVwbGUsb3BlcmF0aW9ucz1DUFUpOgogICAgICAgIHNlbGYuYWxwaGFfdmFsdWUgPSAxLjY3MzI2MzI0MjM1NDM3NzI4NDgxNzA0Mjk5MTY3MTcKICAgICAgICBzZWxmLmxhbWJkYV92YWx1ZSA9IDEuMDUwNzAwOTg3MzU1NDgwNDkzNDE5MzM0OTg1Mjk0NgogICAgICAgIHN1cGVyKCkuX19pbml0X18oaW5wdXRfc2hhcGUsb3BlcmF0aW9ucykKICAgIGRlZiBkZXJpdmF0aXZlKHNlbGYseCk6CiAgICAgICAgcmV0dXJuIHNlbGYub3BlcmF0aW9ucy53aGVyZSh4IDw9MCxzZWxmLmFscGhhX3ZhbHVlKihtYXRoLmUqKngpLDEpCiAgICBkZWYgY29tcHV0ZShzZWxmLCB4KToKICAgICAgICByZXR1cm4gc2VsZi5vcGVyYXRpb25zLndoZXJlKHggPD0wLHNlbGYubGFtYmRhX3ZhbHVlKihzZWxmLmFscGhhX3ZhbHVlKihtYXRoLmUqKngpKS1zZWxmLmFscGhhX3ZhbHVlLHNlbGYubGFtYmRhX3ZhbHVlKngpCgpjbGFzcyBTaWdtb2lkKFNpbXBsZV9BY3RpdmF0aW9uKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBwYXNzCiAgICBkZWYgYnVpbGQoc2VsZixpbnB1dF9zaGFwZTogdHVwbGUsb3BlcmF0aW9ucz1DUFUpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oaW5wdXRfc2hhcGUsb3BlcmF0aW9ucykKICAgIGRlZiBkZXJpdmF0aXZlKHNlbGYseCk6CiAgICAgICAgcmV0dXJuIHNlbGYuY29tcHV0ZSh4KSooMS1zZWxmLmNvbXB1dGUoeCkpCiAgICBkZWYgY29tcHV0ZShzZWxmLCB4KToKICAgICAgICByZXR1cm4gMS8oMSArIG1hdGguZSoqKC14KSkKCgojIEluW10KIiIiCmltcG9ydCBjdXB5CmZyb20gT3BlcmF0aW9uc01hbmFnZXJzLkNVREEgaW1wb3J0IENVREFBY2NlbGVyYXRlZE9wZXJhdGlvbnMgYXMgQ1VEQQojRCA9IERlbnNlKFszXSw1LG9wZXJhdGlvbnM9Q1VEQSkKI3ByaW50KEQudHJhaW5hYmxlX3dlaWdodF9kZXJpdmF0aXZlcyhjdXB5LmFycmF5KFsxLDIsM10pLGN1cHkuYXJyYXkoWzEsMiwzLDIsMV0pKSkKClIgPSBTZUxVKCkKUi5idWlsZChbM10sb3BlcmF0aW9ucz1DVURBKQpWID0gUi50cmFpbmFibGVfd2VpZ2h0X2Rlcml2YXRpdmVzKGN1cHkuYXJyYXkoWzEsMiwzXSksY3VweS5hcnJheShbMSwyLDFdKSkKcHJpbnQoVikKIiIiCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgZ2V0X291dHB1dF9zaGFwZShzZWxmKToKICAgICAgICByZXR1cm4gbGlzdChzZWxmLmNvbXB1dGUoc2VsZi5vcGVyYXRpb25zLmdldF9yYW5kb21fbWV0aG9kKCkoc2l6ZT1zZWxmLmlucHV0X3NoYXBlKSkuc2hhcGUpCiAgICBkZWYgdHJhaW5hYmxlX3dlaWdodF9kZXJpdmF0aXZlcyhzZWxmLGlucHV0cyxkZWx0YXMpOgogICAgICAgIHRyYWluYWJsZV93ZWlnaHRzID0gZGljdCgpCjx8ZmltX2VuZHw+"]
["6b57d9f028297db015badf8ff71f5a888a588584-3","6b57d9f028297db015badf8ff71f5a888a588584","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCkNyZWF0ZWQgb24gU2F0IEFwciAyNSAxMTowMjoxNSAyMDIwCgpAYXV0aG9yOiBQcmFuYXYgRGV2YXJpbnRpCiIiIgpmcm9tIGFiYyBpbXBvcnQgQUJDLCBhYnN0cmFjdG1ldGhvZApmcm9tIE9wZXJhdGlvbnNNYW5hZ2Vycy5DUFUgaW1wb3J0IENQVQpmcm9tIHN5bXB5IGltcG9ydCBTeW1ib2wsIERlcml2YXRpdmUKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRoCgpjbGFzcyBMYXllcihBQkMpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsb3BlcmF0aW9ucz1DUFUpOgogICAgICAgIHNlbGYub3V0cHV0X3NoYXBlID0gc2VsZi5nZXRfb3V0cHV0X3NoYXBlKCkKICAgICAgICBzZWxmLm9wZXJhdGlvbnMgPSBvcGVyYXRpb25zCiAgICAKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIGJ1aWxkKHNlbGYsaW5wdXRfc2hhcGU6IHR1cGxlKToKICAgICAgICBzZWxmLmlucHV0X3NoYXBlID0gaW5wdXRfc2hhcGUKICAgICAgICBwYXNzCiAgICAKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIGNvbXB1dGUoc2VsZixpbnB1dHMpOgogICAgICAgIHBhc3MKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIGdldF9vdXRwdXRfc2hhcGUoc2VsZik6CiAgICAgICAgcGFzcwogICAgQGFic3RyYWN0bWV0aG9kCiAgICBkZWYgdHJhaW5hYmxlX3dlaWdodF9kZXJpdmF0aXZlcyhzZWxmKToKICAgICAgICBwYXNzCiAgICBAYWJzdHJhY3RtZXRob2QKICAgIGRlZiBhcHBseV9jaGFuZ2VzKHNlbGYpOgogICAgICAgIHBhc3MKCmNsYXNzIERlbnNlKExheWVyKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLHVuaXRzKToKICAgICAgICBzZWxmLnVuaXRzID0gdW5pdHMKICAgIGRlZiBidWlsZChzZWxmLCBpbnB1dF9zaGFwZSA6bGlzdCxvcGVyYXRpb25zPUNQVSk6CiAgICAgICAgc2VsZi5vcGVyYXRpb25zID0gb3BlcmF0aW9ucwogICAgICAgIHNlbGYuaW5wdXRfc2hhcGUgPSBpbnB1dF9zaGFwZQogICAgICAgIGJvdW5kID0gbnAuc3FydCg2KS9ucC5zcXJ0KChucC5wcm9kdWN0KHNlbGYuaW5wdXRfc2hhcGUpK3NlbGYudW5pdHMpKQogICAgICAgIHNlbGYud2VpZ2h0cyA9IHNlbGYub3BlcmF0aW9ucy5kZWZhdWx0X2FycmF5KG5wLnJhbmRvbS51bmlmb3JtKHNpemU9KHNlbGYudW5pdHMsaW50KGlucHV0X3NoYXBlWzBdKSksbG93PS1ib3VuZCxoaWdoPWJvdW5kKSkKICAgICAgICBzZWxmLmJhaXNlcyA9IHNlbGYub3BlcmF0aW9ucy5kZWZhdWx0X2FycmF5KG5wLnJhbmRvbS51bmlmb3JtKC1ib3VuZCxib3VuZCkpCiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhzZWxmLm9wZXJhdGlvbnMpCiAgICBkZWYgY29tcHV0ZShzZWxmLGlucHV0cyk6CiAgICAgICAgcmV0dXJuIHNlbGYub3BlcmF0aW9ucy5hZGQoc2VsZi5vcGVyYXRpb25zLmRvdChzZWxmLndlaWdodHMsIGlucHV0cyksc2VsZi5iYWlzZXMpCiAgICBkZWYgZ2V0X291dHB1dF9zaGFwZShzZWxmKToKICAgICAgICByZXR1cm4gbGlzdChzZWxmLmNvbXB1dGUoc2VsZi5vcGVyYXRpb25zLmdldF9yYW5kb21fbWV0aG9kKCkoc2l6ZT1zZWxmLmlucHV0X3NoYXBlKSkuc2hhcGUpCiAgICBkZWYgdHJhaW5hYmxlX3dlaWdodF9kZXJpdmF0aXZlcyhzZWxmLGlucHV0cyxkZWx0YXMpOgogICAgICAgIHRyYWluYWJsZV93ZWlnaHRzID0gZGljdCgpCiAgICAgICAgdHJhaW5hYmxlX3dlaWdodHNbIlByZXZpb3VzX0xheWVyIl0gPSBzZWxmLm9wZXJhdGlvbnMuZG90KHNlbGYud2VpZ2h0cy50cmFuc3Bvc2UoKSxkZWx0YXMpCiAgICAgICAgdHJhaW5hYmxlX3dlaWdodHNbIldlaWdodHMiXSA9IHNlbGYub3BlcmF0aW9ucy5yZXNoYXBlKGlucHV0cywoMSwtMSkpKnNlbGYub3BlcmF0aW9ucy5yZXNoYXBlKGRlbHRhcywoLTEsMSkpCiAgICAgICAgdHJhaW5hYmxlX3dlaWdodHNbIkJhaXNlcyJdID0gZGVsdGFzCiAgICAgICAgcmV0dXJuIHRyYWluYWJsZV93ZWlnaHRzCiAgICBkZWYgYXBwbHlfY2hhbmdlcyhzZWxmLHRyYWluYWJsZV93ZWlnaHRzX2RpY3QpOgogICAgICAgIHNlbGYud2VpZ2h0cyA9IHRyYWluYWJsZV93ZWlnaHRzX2RpY3RbIldlaWdodHMiXStzZWxmLndlaWdodHMKICAgICAgICBzZWxmLmJhaXNlcyA9IHRyYWluYWJsZV93ZWlnaHRzX2RpY3RbIkJhaXNlcyJdK3NlbGYuYmFpc2VzCiAgICAgICAgCiAgICAgICAgCmNsYXNzIFNpbXBsZV9BY3RpdmF0aW9uKExheWVyKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLGlucHV0X3NoYXBlLG9wZXJhdGlvbnMpOgogICAgICAgIHNlbGYuaW5wdXRfc2hhcGUgPSBpbnB1dF9zaGFwZQogICAgICAgIHNlbGYub3BlcmF0aW9ucyA9IG9wZXJhdGlvbnMKICAgIGRlZiBnZXRfb3V0cHV0X3NoYXBlKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmlucHV0X3NoYXBlCiAgICBkZWYgdHJhaW5hYmxlX3dlaWdodF9kZXJpdmF0aXZlcyhzZWxmLGlucHV0cyxkZWx0YXMpOgogICAgICAgIHRyYWluYWJsZV93ZWlnaHRzID0gZGljdCgpCiAgICAgICAgdHJhaW5hYmxlX3dlaWdodHNbIlByZXZpb3VzX0xheWVyIl0gPSBzZWxmLmRlcml2YXRpdmUoaW5wdXRzKSpkZWx0YXMKICAgICAgICByZXR1cm4gdHJhaW5hYmxlX3dlaWdodHMKICAgIGRlZiBhcHBseV9jaGFuZ2VzKHNlbGYsY2hhbmdlcyk6CiAgICAgICAgcGFzcwogICAgQGFic3RyYWN0bWV0aG9kCiAgICBkZWYgZGVyaXZhdGl2ZShpbnB1dHMpOgogICAgICAgIHBhc3MKCiAgICAjIFJlbWVtYmVyIHRoYXQgd2Ugc3RpbGwgYWxzbyBuZWVkIHRvIGRlZmluZSBjb21wdXRlCiAgICAKY2xhc3MgUmVMVShTaW1wbGVfQWN0aXZhdGlvbik6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgcGFzcwogICAgZGVmIGJ1aWxkKHNlbGYsaW5wdXRfc2hhcGU6IHR1cGxlLG9wZXJhdGlvbnM9Q1BVKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKGlucHV0X3NoYXBlLG9wZXJhdGlvbnMpCiAgICBkZWYgZGVyaXZhdGl2ZShzZWxmLHgpOgogICAgICAgIHJldHVybiBzZWxmLm9wZXJhdGlvbnMud2hlcmUoeCA8PTAsMCwxKQogICAgZGVmIGNvbXB1dGUoc2VsZiwgeCk6CiAgICAgICAgcmV0dXJuIHNlbGYub3BlcmF0aW9ucy53aGVyZSh4IDw9MCwwLHgpCgpjbGFzcyBTZUxVKFNpbXBsZV9BY3RpdmF0aW9uKToKICAgIAogICAgZGVmIF9faW5pdF9fKHNlbGYpOgo8fGZpbV9ob2xlfD4KICAgIGRlZiBidWlsZChzZWxmLGlucHV0X3NoYXBlOiB0dXBsZSxvcGVyYXRpb25zPUNQVSk6CiAgICAgICAgc2VsZi5hbHBoYV92YWx1ZSA9IDEuNjczMjYzMjQyMzU0Mzc3Mjg0ODE3MDQyOTkxNjcxNwogICAgICAgIHNlbGYubGFtYmRhX3ZhbHVlID0gMS4wNTA3MDA5ODczNTU0ODA0OTM0MTkzMzQ5ODUyOTQ2CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhpbnB1dF9zaGFwZSxvcGVyYXRpb25zKQogICAgZGVmIGRlcml2YXRpdmUoc2VsZix4KToKICAgICAgICByZXR1cm4gc2VsZi5vcGVyYXRpb25zLndoZXJlKHggPD0wLHNlbGYuYWxwaGFfdmFsdWUqKG1hdGguZSoqeCksMSkKICAgIGRlZiBjb21wdXRlKHNlbGYsIHgpOgogICAgICAgIHJldHVybiBzZWxmLm9wZXJhdGlvbnMud2hlcmUoeCA8PTAsc2VsZi5sYW1iZGFfdmFsdWUqKHNlbGYuYWxwaGFfdmFsdWUqKG1hdGguZSoqeCkpLXNlbGYuYWxwaGFfdmFsdWUsc2VsZi5sYW1iZGFfdmFsdWUqeCkKCmNsYXNzIFNpZ21vaWQoU2ltcGxlX0FjdGl2YXRpb24pOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHBhc3MKICAgIGRlZiBidWlsZChzZWxmLGlucHV0X3NoYXBlOiB0dXBsZSxvcGVyYXRpb25zPUNQVSk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhpbnB1dF9zaGFwZSxvcGVyYXRpb25zKQogICAgZGVmIGRlcml2YXRpdmUoc2VsZix4KToKICAgICAgICByZXR1cm4gc2VsZi5jb21wdXRlKHgpKigxLXNlbGYuY29tcHV0ZSh4KSkKICAgIGRlZiBjb21wdXRlKHNlbGYsIHgpOgogICAgICAgIHJldHVybiAxLygxICsgbWF0aC5lKiooLXgpKQoKCiMgSW5bXQoiIiIKaW1wb3J0IGN1cHkKZnJvbSBPcGVyYXRpb25zTWFuYWdlcnMuQ1VEQSBpbXBvcnQgQ1VEQUFjY2VsZXJhdGVkT3BlcmF0aW9ucyBhcyBDVURBCiNEID0gRGVuc2UoWzNdLDUsb3BlcmF0aW9ucz1DVURBKQojcHJpbnQoRC50cmFpbmFibGVfd2VpZ2h0X2Rlcml2YXRpdmVzKGN1cHkuYXJyYXkoWzEsMiwzXSksY3VweS5hcnJheShbMSwyLDMsMiwxXSkpKQoKUiA9IFNlTFUoKQpSLmJ1aWxkKFszXSxvcGVyYXRpb25zPUNVREEpClYgPSBSLnRyYWluYWJsZV93ZWlnaHRfZGVyaXZhdGl2ZXMoY3VweS5hcnJheShbMSwyLDNdKSxjdXB5LmFycmF5KFsxLDIsMV0pKQpwcmludChWKQoiIiIKPHxmaW1fc3VmZml4fD4KICAgICAgICBwYXNzCjx8ZmltX2VuZHw+"]
["6b57d9f028297db015badf8ff71f5a888a588584-4","6b57d9f028297db015badf8ff71f5a888a588584","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCkNyZWF0ZWQgb24gU2F0IEFwciAyNSAxMTowMjoxNSAyMDIwCgpAYXV0aG9yOiBQcmFuYXYgRGV2YXJpbnRpCiIiIgpmcm9tIGFiYyBpbXBvcnQgQUJDLCBhYnN0cmFjdG1ldGhvZApmcm9tIE9wZXJhdGlvbnNNYW5hZ2Vycy5DUFUgaW1wb3J0IENQVQpmcm9tIHN5bXB5IGltcG9ydCBTeW1ib2wsIERlcml2YXRpdmUKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRoCgpjbGFzcyBMYXllcihBQkMpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsb3BlcmF0aW9ucz1DUFUpOgogICAgICAgIHNlbGYub3V0cHV0X3NoYXBlID0gc2VsZi5nZXRfb3V0cHV0X3NoYXBlKCkKICAgICAgICBzZWxmLm9wZXJhdGlvbnMgPSBvcGVyYXRpb25zCiAgICAKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIGJ1aWxkKHNlbGYsaW5wdXRfc2hhcGU6IHR1cGxlKToKICAgICAgICBzZWxmLmlucHV0X3NoYXBlID0gaW5wdXRfc2hhcGUKICAgICAgICBwYXNzCiAgICAKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIGNvbXB1dGUoc2VsZixpbnB1dHMpOgogICAgICAgIHBhc3MKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIGdldF9vdXRwdXRfc2hhcGUoc2VsZik6CiAgICAgICAgcGFzcwogICAgQGFic3RyYWN0bWV0aG9kCiAgICBkZWYgdHJhaW5hYmxlX3dlaWdodF9kZXJpdmF0aXZlcyhzZWxmKToKICAgICAgICBwYXNzCiAgICBAYWJzdHJhY3RtZXRob2QKICAgIGRlZiBhcHBseV9jaGFuZ2VzKHNlbGYpOgogICAgICAgIHBhc3MKCmNsYXNzIERlbnNlKExheWVyKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLHVuaXRzKToKICAgICAgICBzZWxmLnVuaXRzID0gdW5pdHMKICAgIGRlZiBidWlsZChzZWxmLCBpbnB1dF9zaGFwZSA6bGlzdCxvcGVyYXRpb25zPUNQVSk6CiAgICAgICAgc2VsZi5vcGVyYXRpb25zID0gb3BlcmF0aW9ucwogICAgICAgIHNlbGYuaW5wdXRfc2hhcGUgPSBpbnB1dF9zaGFwZQogICAgICAgIGJvdW5kID0gbnAuc3FydCg2KS9ucC5zcXJ0KChucC5wcm9kdWN0KHNlbGYuaW5wdXRfc2hhcGUpK3NlbGYudW5pdHMpKQogICAgICAgIHNlbGYud2VpZ2h0cyA9IHNlbGYub3BlcmF0aW9ucy5kZWZhdWx0X2FycmF5KG5wLnJhbmRvbS51bmlmb3JtKHNpemU9KHNlbGYudW5pdHMsaW50KGlucHV0X3NoYXBlWzBdKSksbG93PS1ib3VuZCxoaWdoPWJvdW5kKSkKICAgICAgICBzZWxmLmJhaXNlcyA9IHNlbGYub3BlcmF0aW9ucy5kZWZhdWx0X2FycmF5KG5wLnJhbmRvbS51bmlmb3JtKC1ib3VuZCxib3VuZCkpCiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhzZWxmLm9wZXJhdGlvbnMpCiAgICBkZWYgY29tcHV0ZShzZWxmLGlucHV0cyk6CiAgICAgICAgcmV0dXJuIHNlbGYub3BlcmF0aW9ucy5hZGQoc2VsZi5vcGVyYXRpb25zLmRvdChzZWxmLndlaWdodHMsIGlucHV0cyksc2VsZi5iYWlzZXMpCiAgICBkZWYgZ2V0X291dHB1dF9zaGFwZShzZWxmKToKICAgICAgICByZXR1cm4gbGlzdChzZWxmLmNvbXB1dGUoc2VsZi5vcGVyYXRpb25zLmdldF9yYW5kb21fbWV0aG9kKCkoc2l6ZT1zZWxmLmlucHV0X3NoYXBlKSkuc2hhcGUpCiAgICBkZWYgdHJhaW5hYmxlX3dlaWdodF9kZXJpdmF0aXZlcyhzZWxmLGlucHV0cyxkZWx0YXMpOgogICAgICAgIHRyYWluYWJsZV93ZWlnaHRzID0gZGljdCgpCiAgICAgICAgdHJhaW5hYmxlX3dlaWdodHNbIlByZXZpb3VzX0xheWVyIl0gPSBzZWxmLm9wZXJhdGlvbnMuZG90KHNlbGYud2VpZ2h0cy50cmFuc3Bvc2UoKSxkZWx0YXMpCiAgICAgICAgdHJhaW5hYmxlX3dlaWdodHNbIldlaWdodHMiXSA9IHNlbGYub3BlcmF0aW9ucy5yZXNoYXBlKGlucHV0cywoMSwtMSkpKnNlbGYub3BlcmF0aW9ucy5yZXNoYXBlKGRlbHRhcywoLTEsMSkpCiAgICAgICAgdHJhaW5hYmxlX3dlaWdodHNbIkJhaXNlcyJdID0gZGVsdGFzCiAgICAgICAgcmV0dXJuIHRyYWluYWJsZV93ZWlnaHRzCiAgICBkZWYgYXBwbHlfY2hhbmdlcyhzZWxmLHRyYWluYWJsZV93ZWlnaHRzX2RpY3QpOgogICAgICAgIHNlbGYud2VpZ2h0cyA9IHRyYWluYWJsZV93ZWlnaHRzX2RpY3RbIldlaWdodHMiXStzZWxmLndlaWdodHMKICAgICAgICBzZWxmLmJhaXNlcyA9IHRyYWluYWJsZV93ZWlnaHRzX2RpY3RbIkJhaXNlcyJdK3NlbGYuYmFpc2VzCiAgICAgICAgCiAgICAgICAgCmNsYXNzIFNpbXBsZV9BY3RpdmF0aW9uKExheWVyKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLGlucHV0X3NoYXBlLG9wZXJhdGlvbnMpOgogICAgICAgIHNlbGYuaW5wdXRfc2hhcGUgPSBpbnB1dF9zaGFwZQogICAgICAgIHNlbGYub3BlcmF0aW9ucyA9IG9wZXJhdGlvbnMKICAgIGRlZiBnZXRfb3V0cHV0X3NoYXBlKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmlucHV0X3NoYXBlCiAgICBkZWYgdHJhaW5hYmxlX3dlaWdodF9kZXJpdmF0aXZlcyhzZWxmLGlucHV0cyxkZWx0YXMpOgogICAgICAgIHRyYWluYWJsZV93ZWlnaHRzID0gZGljdCgpCiAgICAgICAgdHJhaW5hYmxlX3dlaWdodHNbIlByZXZpb3VzX0xheWVyIl0gPSBzZWxmLmRlcml2YXRpdmUoaW5wdXRzKSpkZWx0YXMKICAgICAgICByZXR1cm4gdHJhaW5hYmxlX3dlaWdodHMKICAgIGRlZiBhcHBseV9jaGFuZ2VzKHNlbGYsY2hhbmdlcyk6CiAgICAgICAgcGFzcwogICAgQGFic3RyYWN0bWV0aG9kCiAgICBkZWYgZGVyaXZhdGl2ZShpbnB1dHMpOgogICAgICAgIHBhc3MKPHxmaW1faG9sZXw+CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgcGFzcwogICAgZGVmIGJ1aWxkKHNlbGYsaW5wdXRfc2hhcGU6IHR1cGxlLG9wZXJhdGlvbnM9Q1BVKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKGlucHV0X3NoYXBlLG9wZXJhdGlvbnMpCiAgICBkZWYgZGVyaXZhdGl2ZShzZWxmLHgpOgogICAgICAgIHJldHVybiBzZWxmLm9wZXJhdGlvbnMud2hlcmUoeCA8PTAsMCwxKQogICAgZGVmIGNvbXB1dGUoc2VsZiwgeCk6CiAgICAgICAgcmV0dXJuIHNlbGYub3BlcmF0aW9ucy53aGVyZSh4IDw9MCwwLHgpCgpjbGFzcyBTZUxVKFNpbXBsZV9BY3RpdmF0aW9uKToKICAgIAogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHBhc3MKICAgIGRlZiBidWlsZChzZWxmLGlucHV0X3NoYXBlOiB0dXBsZSxvcGVyYXRpb25zPUNQVSk6CiAgICAgICAgc2VsZi5hbHBoYV92YWx1ZSA9IDEuNjczMjYzMjQyMzU0Mzc3Mjg0ODE3MDQyOTkxNjcxNwogICAgICAgIHNlbGYubGFtYmRhX3ZhbHVlID0gMS4wNTA3MDA5ODczNTU0ODA0OTM0MTkzMzQ5ODUyOTQ2CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhpbnB1dF9zaGFwZSxvcGVyYXRpb25zKQogICAgZGVmIGRlcml2YXRpdmUoc2VsZix4KToKICAgICAgICByZXR1cm4gc2VsZi5vcGVyYXRpb25zLndoZXJlKHggPD0wLHNlbGYuYWxwaGFfdmFsdWUqKG1hdGguZSoqeCksMSkKICAgIGRlZiBjb21wdXRlKHNlbGYsIHgpOgogICAgICAgIHJldHVybiBzZWxmLm9wZXJhdGlvbnMud2hlcmUoeCA8PTAsc2VsZi5sYW1iZGFfdmFsdWUqKHNlbGYuYWxwaGFfdmFsdWUqKG1hdGguZSoqeCkpLXNlbGYuYWxwaGFfdmFsdWUsc2VsZi5sYW1iZGFfdmFsdWUqeCkKCmNsYXNzIFNpZ21vaWQoU2ltcGxlX0FjdGl2YXRpb24pOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHBhc3MKICAgIGRlZiBidWlsZChzZWxmLGlucHV0X3NoYXBlOiB0dXBsZSxvcGVyYXRpb25zPUNQVSk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhpbnB1dF9zaGFwZSxvcGVyYXRpb25zKQogICAgZGVmIGRlcml2YXRpdmUoc2VsZix4KToKICAgICAgICByZXR1cm4gc2VsZi5jb21wdXRlKHgpKigxLXNlbGYuY29tcHV0ZSh4KSkKICAgIGRlZiBjb21wdXRlKHNlbGYsIHgpOgogICAgICAgIHJldHVybiAxLygxICsgbWF0aC5lKiooLXgpKQoKCiMgSW5bXQoiIiIKaW1wb3J0IGN1cHkKZnJvbSBPcGVyYXRpb25zTWFuYWdlcnMuQ1VEQSBpbXBvcnQgQ1VEQUFjY2VsZXJhdGVkT3BlcmF0aW9ucyBhcyBDVURBCiNEID0gRGVuc2UoWzNdLDUsb3BlcmF0aW9ucz1DVURBKQojcHJpbnQoRC50cmFpbmFibGVfd2VpZ2h0X2Rlcml2YXRpdmVzKGN1cHkuYXJyYXkoWzEsMiwzXSksY3VweS5hcnJheShbMSwyLDMsMiwxXSkpKQoKUiA9IFNlTFUoKQpSLmJ1aWxkKFszXSxvcGVyYXRpb25zPUNVREEpClYgPSBSLnRyYWluYWJsZV93ZWlnaHRfZGVyaXZhdGl2ZXMoY3VweS5hcnJheShbMSwyLDNdKSxjdXB5LmFycmF5KFsxLDIsMV0pKQpwcmludChWKQoiIiIKPHxmaW1fc3VmZml4fD4KCiAgICAjIFJlbWVtYmVyIHRoYXQgd2Ugc3RpbGwgYWxzbyBuZWVkIHRvIGRlZmluZSBjb21wdXRlCiAgICAKY2xhc3MgUmVMVShTaW1wbGVfQWN0aXZhdGlvbik6Cjx8ZmltX2VuZHw+"]
["6b57d9f028297db015badf8ff71f5a888a588584-5","6b57d9f028297db015badf8ff71f5a888a588584","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCkNyZWF0ZWQgb24gU2F0IEFwciAyNSAxMTowMjoxNSAyMDIwCgpAYXV0aG9yOiBQcmFuYXYgRGV2YXJpbnRpCiIiIgpmcm9tIGFiYyBpbXBvcnQgQUJDLCBhYnN0cmFjdG1ldGhvZApmcm9tIE9wZXJhdGlvbnNNYW5hZ2Vycy5DUFUgaW1wb3J0IENQVQpmcm9tIHN5bXB5IGltcG9ydCBTeW1ib2wsIERlcml2YXRpdmUKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRoCgpjbGFzcyBMYXllcihBQkMpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsb3BlcmF0aW9ucz1DUFUpOgogICAgICAgIHNlbGYub3V0cHV0X3NoYXBlID0gc2VsZi5nZXRfb3V0cHV0X3NoYXBlKCkKICAgICAgICBzZWxmLm9wZXJhdGlvbnMgPSBvcGVyYXRpb25zCiAgICAKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIGJ1aWxkKHNlbGYsaW5wdXRfc2hhcGU6IHR1cGxlKToKICAgICAgICBzZWxmLmlucHV0X3NoYXBlID0gaW5wdXRfc2hhcGUKICAgICAgICBwYXNzCiAgICAKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIGNvbXB1dGUoc2VsZixpbnB1dHMpOgogICAgICAgIHBhc3MKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIGdldF9vdXRwdXRfc2hhcGUoc2VsZik6CiAgICAgICAgcGFzcwogICAgQGFic3RyYWN0bWV0aG9kCiAgICBkZWYgdHJhaW5hYmxlX3dlaWdodF9kZXJpdmF0aXZlcyhzZWxmKToKICAgICAgICBwYXNzCiAgICBAYWJzdHJhY3RtZXRob2QKICAgIGRlZiBhcHBseV9jaGFuZ2VzKHNlbGYpOgogICAgICAgIHBhc3MKCmNsYXNzIERlbnNlKExheWVyKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLHVuaXRzKToKICAgICAgICBzZWxmLnVuaXRzID0gdW5pdHMKICAgIGRlZiBidWlsZChzZWxmLCBpbnB1dF9zaGFwZSA6bGlzdCxvcGVyYXRpb25zPUNQVSk6CiAgICAgICAgc2VsZi5vcGVyYXRpb25zID0gb3BlcmF0aW9ucwogICAgICAgIHNlbGYuaW5wdXRfc2hhcGUgPSBpbnB1dF9zaGFwZQogICAgICAgIGJvdW5kID0gbnAuc3FydCg2KS9ucC5zcXJ0KChucC5wcm9kdWN0KHNlbGYuaW5wdXRfc2hhcGUpK3NlbGYudW5pdHMpKQogICAgICAgIHNlbGYud2VpZ2h0cyA9IHNlbGYub3BlcmF0aW9ucy5kZWZhdWx0X2FycmF5KG5wLnJhbmRvbS51bmlmb3JtKHNpemU9KHNlbGYudW5pdHMsaW50KGlucHV0X3NoYXBlWzBdKSksbG93PS1ib3VuZCxoaWdoPWJvdW5kKSkKICAgICAgICBzZWxmLmJhaXNlcyA9IHNlbGYub3BlcmF0aW9ucy5kZWZhdWx0X2FycmF5KG5wLnJhbmRvbS51bmlmb3JtKC1ib3VuZCxib3VuZCkpCiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhzZWxmLm9wZXJhdGlvbnMpCiAgICBkZWYgY29tcHV0ZShzZWxmLGlucHV0cyk6CiAgICAgICAgcmV0dXJuIHNlbGYub3BlcmF0aW9ucy5hZGQoc2VsZi5vcGVyYXRpb25zLmRvdChzZWxmLndlaWdodHMsIGlucHV0cyksc2VsZi5iYWlzZXMpCiAgICBkZWYgZ2V0X291dHB1dF9zaGFwZShzZWxmKToKICAgICAgICByZXR1cm4gbGlzdChzZWxmLmNvbXB1dGUoc2VsZi5vcGVyYXRpb25zLmdldF9yYW5kb21fbWV0aG9kKCkoc2l6ZT1zZWxmLmlucHV0X3NoYXBlKSkuc2hhcGUpCiAgICBkZWYgdHJhaW5hYmxlX3dlaWdodF9kZXJpdmF0aXZlcyhzZWxmLGlucHV0cyxkZWx0YXMpOgogICAgICAgIHRyYWluYWJsZV93ZWlnaHRzID0gZGljdCgpCiAgICAgICAgdHJhaW5hYmxlX3dlaWdodHNbIlByZXZpb3VzX0xheWVyIl0gPSBzZWxmLm9wZXJhdGlvbnMuZG90KHNlbGYud2VpZ2h0cy50cmFuc3Bvc2UoKSxkZWx0YXMpCiAgICAgICAgdHJhaW5hYmxlX3dlaWdodHNbIldlaWdodHMiXSA9IHNlbGYub3BlcmF0aW9ucy5yZXNoYXBlKGlucHV0cywoMSwtMSkpKnNlbGYub3BlcmF0aW9ucy5yZXNoYXBlKGRlbHRhcywoLTEsMSkpCiAgICAgICAgdHJhaW5hYmxlX3dlaWdodHNbIkJhaXNlcyJdID0gZGVsdGFzCiAgICAgICAgcmV0dXJuIHRyYWluYWJsZV93ZWlnaHRzCiAgICBkZWYgYXBwbHlfY2hhbmdlcyhzZWxmLHRyYWluYWJsZV93ZWlnaHRzX2RpY3QpOgogICAgICAgIHNlbGYud2VpZ2h0cyA9IHRyYWluYWJsZV93ZWlnaHRzX2RpY3RbIldlaWdodHMiXStzZWxmLndlaWdodHMKICAgICAgICBzZWxmLmJhaXNlcyA9IHRyYWluYWJsZV93ZWlnaHRzX2RpY3RbIkJhaXNlcyJdK3NlbGYuYmFpc2VzCiAgICAgICAgCiAgICAgICAgCmNsYXNzIFNpbXBsZV9BY3RpdmF0aW9uKExheWVyKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLGlucHV0X3NoYXBlLG9wZXJhdGlvbnMpOgogICAgICAgIHNlbGYuaW5wdXRfc2hhcGUgPSBpbnB1dF9zaGFwZQogICAgICAgIHNlbGYub3BlcmF0aW9ucyA9IG9wZXJhdGlvbnMKICAgIGRlZiBnZXRfb3V0cHV0X3NoYXBlKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmlucHV0X3NoYXBlCiAgICBkZWYgdHJhaW5hYmxlX3dlaWdodF9kZXJpdmF0aXZlcyhzZWxmLGlucHV0cyxkZWx0YXMpOgogICAgICAgIHRyYWluYWJsZV93ZWlnaHRzID0gZGljdCgpCiAgICAgICAgdHJhaW5hYmxlX3dlaWdodHNbIlByZXZpb3VzX0xheWVyIl0gPSBzZWxmLmRlcml2YXRpdmUoaW5wdXRzKSpkZWx0YXMKICAgICAgICByZXR1cm4gdHJhaW5hYmxlX3dlaWdodHMKICAgIGRlZiBhcHBseV9jaGFuZ2VzKHNlbGYsY2hhbmdlcyk6CiAgICAgICAgcGFzcwogICAgQGFic3RyYWN0bWV0aG9kCiAgICBkZWYgZGVyaXZhdGl2ZShpbnB1dHMpOgogICAgICAgIHBhc3MKCiAgICAjIFJlbWVtYmVyIHRoYXQgd2Ugc3RpbGwgYWxzbyBuZWVkIHRvIGRlZmluZSBjb21wdXRlCiAgICAKY2xhc3MgUmVMVShTaW1wbGVfQWN0aXZhdGlvbik6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgcGFzcwogICAgZGVmIGJ1aWxkKHNlbGYsaW5wdXRfc2hhcGU6IHR1cGxlLG9wZXJhdGlvbnM9Q1BVKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKGlucHV0X3NoYXBlLG9wZXJhdGlvbnMpCiAgICBkZWYgZGVyaXZhdGl2ZShzZWxmLHgpOgogICAgICAgIHJldHVybiBzZWxmLm9wZXJhdGlvbnMud2hlcmUoeCA8PTAsMCwxKQogICAgZGVmIGNvbXB1dGUoc2VsZiwgeCk6CiAgICAgICAgcmV0dXJuIHNlbGYub3BlcmF0aW9ucy53aGVyZSh4IDw9MCwwLHgpCgpjbGFzcyBTZUxVKFNpbXBsZV9BY3RpdmF0aW9uKToKICAgIAogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHBhc3MKICAgIGRlZiBidWlsZChzZWxmLGlucHV0X3NoYXBlOiB0dXBsZSxvcGVyYXRpb25zPUNQVSk6CiAgICAgICAgc2VsZi5hbHBoYV92YWx1ZSA9IDEuNjczMjYzMjQyMzU0Mzc3Mjg0ODE3MDQyOTkxNjcxNwogICAgICAgIHNlbGYubGFtYmRhX3ZhbHVlID0gMS4wNTA3MDA5ODczNTU0ODA0OTM0MTkzMzQ5ODUyOTQ2CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhpbnB1dF9zaGFwZSxvcGVyYXRpb25zKQogICAgZGVmIGRlcml2YXRpdmUoc2VsZix4KToKICAgICAgICByZXR1cm4gc2VsZi5vcGVyYXRpb25zLndoZXJlKHggPD0wLHNlbGYuYWxwaGFfdmFsdWUqKG1hdGguZSoqeCksMSkKICAgIGRlZiBjb21wdXRlKHNlbGYsIHgpOgogICAgICAgIHJldHVybiBzZWxmLm9wZXJhdGlvbnMud2hlcmUoeCA8PTAsc2VsZi5sYW1iZGFfdmFsdWUqKHNlbGYuYWxwaGFfdmFsdWUqKG1hdGguZSoqeCkpLXNlbGYuYWxwaGFfdmFsdWUsc2VsZi5sYW1iZGFfdmFsdWUqeCkKCmNsYXNzIFNpZ21vaWQoU2ltcGxlX0FjdGl2YXRpb24pOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHBhc3MKICAgIGRlZiBidWlsZChzZWxmLGlucHV0X3NoYXBlOiB0dXBsZSxvcGVyYXRpb25zPUNQVSk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhpbnB1dF9zaGFwZSxvcGVyYXRpb25zKQogICAgZGVmIGRlcml2YXRpdmUoc2VsZix4KToKICAgICAgICByZXR1cm4gc2VsZi5jb21wdXRlKHgpKigxLXNlbGYuY29tcHV0ZSh4KSkKICAgIGRlZiBjb21wdXRlKHNlbGYsIHgpOgogICAgICAgIHJldHVybiAxLygxICsgbWF0aC5lKiooLXgpKQoKCiMgSW5bXQoiIiIKaW1wb3J0IGN1cHkKPHxmaW1faG9sZXw+ClIgPSBTZUxVKCkKUi5idWlsZChbM10sb3BlcmF0aW9ucz1DVURBKQpWID0gUi50cmFpbmFibGVfd2VpZ2h0X2Rlcml2YXRpdmVzKGN1cHkuYXJyYXkoWzEsMiwzXSksY3VweS5hcnJheShbMSwyLDFdKSkKcHJpbnQoVikKIiIiCjx8ZmltX3N1ZmZpeHw+CmZyb20gT3BlcmF0aW9uc01hbmFnZXJzLkNVREEgaW1wb3J0IENVREFBY2NlbGVyYXRlZE9wZXJhdGlvbnMgYXMgQ1VEQQojRCA9IERlbnNlKFszXSw1LG9wZXJhdGlvbnM9Q1VEQSkKI3ByaW50KEQudHJhaW5hYmxlX3dlaWdodF9kZXJpdmF0aXZlcyhjdXB5LmFycmF5KFsxLDIsM10pLGN1cHkuYXJyYXkoWzEsMiwzLDIsMV0pKSkKCjx8ZmltX2VuZHw+"]
["6b70c82aad5113c0742da28a58947740d0d60ccd-1","6b70c82aad5113c0742da28a58947740d0d60ccd","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCAoYWJzb2x1dGVfaW1wb3J0LCBkaXZpc2lvbiwgcHJpbnRfZnVuY3Rpb24pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmltcG9ydCB3YXJuaW5ncwoKZnJvbSBvZG0yYXBpLnNlcnZpY2VzIGltcG9ydCBVcGRhdGVPRE0yIGFzIG5ld0NsYXNzCjx8ZmltX2VuZHw+"]
["6b70c82aad5113c0742da28a58947740d0d60ccd-2","6b70c82aad5113c0742da28a58947740d0d60ccd","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCAoYWJzb2x1dGVfaW1wb3J0LCBkaXZpc2lvbiwgcHJpbnRfZnVuY3Rpb24pCgppbXBvcnQgd2FybmluZ3MKCmZyb20gb2RtMmFwaS5zZXJ2aWNlcyBpbXBvcnQgVXBkYXRlT0RNMiBhcyBuZXdDbGFzcwoKd2FybmluZ3Mud2FybignVGhlIG1vZHVsZSBvZG0yYXBpLk9ETTIuc2VydmljZXMudXBkYXRlU2VydmljZSB3aWxsIGJlIGRlcHJlY2F0ZWQuICcKICAgICAgICAgICAgICAnUGxlYXNlIHVzZSBvZG0yYXBpLnNlcnZpY2VzLnVwZGF0ZVNlcnZpY2UgaW5zdGVhZC4nLAogICAgICAgICAgICAgIEZ1dHVyZVdhcm5pbmcsIHN0YWNrbGV2ZWw9MikKCl9fYXV0aG9yX18gPSAnam1lbGluZScKCgo8fGZpbV9ob2xlfD4KICAgIHJldHVybiBuZXdDbGFzcygqYXJncywgKiprd2FyZ3MpCjx8ZmltX3N1ZmZpeHw+CmRlZiBVcGRhdGVPRE0yKCphcmdzLCAqKmt3YXJncyk6CiAgICB3YXJuaW5ncy53YXJuKCdUaGUgY2xhc3Mgb2RtMmFwaS5PRE0yLnNlcnZpY2VzLnJlYWRTZXJ2aWNlLkNyZWF0ZU9ETTIgd2lsbCBiZSBkZXByZWNhdGVkLiAnCiAgICAgICAgICAgICAgICAgICdQbGVhc2UgdXNlIG9kbTJhcGkuc2VydmljZXMucmVhZFNlcnZpY2UuQ3JlYXRlT0RNMiBpbnN0ZWFkLicsCiAgICAgICAgICAgICAgICAgIEZ1dHVyZVdhcm5pbmcsIHN0YWNrbGV2ZWw9MikKPHxmaW1fZW5kfD4="]
["6b70c82aad5113c0742da28a58947740d0d60ccd-3","6b70c82aad5113c0742da28a58947740d0d60ccd","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCAoYWJzb2x1dGVfaW1wb3J0LCBkaXZpc2lvbiwgcHJpbnRfZnVuY3Rpb24pCgppbXBvcnQgd2FybmluZ3MKCmZyb20gb2RtMmFwaS5zZXJ2aWNlcyBpbXBvcnQgVXBkYXRlT0RNMiBhcyBuZXdDbGFzcwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cgp3YXJuaW5ncy53YXJuKCdUaGUgbW9kdWxlIG9kbTJhcGkuT0RNMi5zZXJ2aWNlcy51cGRhdGVTZXJ2aWNlIHdpbGwgYmUgZGVwcmVjYXRlZC4gJwogICAgICAgICAgICAgICdQbGVhc2UgdXNlIG9kbTJhcGkuc2VydmljZXMudXBkYXRlU2VydmljZSBpbnN0ZWFkLicsCiAgICAgICAgICAgICAgRnV0dXJlV2FybmluZywgc3RhY2tsZXZlbD0yKQo8fGZpbV9lbmR8Pg=="]
["6b70c82aad5113c0742da28a58947740d0d60ccd-4","6b70c82aad5113c0742da28a58947740d0d60ccd","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCAoYWJzb2x1dGVfaW1wb3J0LCBkaXZpc2lvbiwgcHJpbnRfZnVuY3Rpb24pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmltcG9ydCB3YXJuaW5ncwoKZnJvbSBvZG0yYXBpLnNlcnZpY2VzIGltcG9ydCBVcGRhdGVPRE0yIGFzIG5ld0NsYXNzCjx8ZmltX2VuZHw+"]
["4155ab539ea505159fbf1f2d7771f93a1aab9f63-1","4155ab539ea505159fbf1f2d7771f93a1aab9f63","PHxmaW1fcHJlZml4fD4KZnJvbSBiYXNlNjQgaW1wb3J0IGI2NGVuY29kZQppbXBvcnQgcmVxdWVzdHMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppbXBvcnQganNvbgoKbWVzc2FnZSA9ICJ1c2VybmFtZSIgKyAnOicgKyAicGFzc3dvcmQhIgptZXNzYWdlX2J5dGVzID0gbWVzc2FnZS5lbmNvZGUoJ1VURi04JykKPHxmaW1fZW5kfD4="]
["4155ab539ea505159fbf1f2d7771f93a1aab9f63-2","4155ab539ea505159fbf1f2d7771f93a1aab9f63","PHxmaW1fcHJlZml4fD4KZnJvbSBiYXNlNjQgaW1wb3J0IGI2NGVuY29kZQppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IGpzb24KCm1lc3NhZ2UgPSAidXNlcm5hbWUiICsgJzonICsgInBhc3N3b3JkISIKbWVzc2FnZV9ieXRlcyA9IG1lc3NhZ2UuZW5jb2RlKCdVVEYtOCcpCmJhc2ljX3Rva2VuID0gYjY0ZW5jb2RlKG1lc3NhZ2VfYnl0ZXMpCnBheWxvYWQgPSBqc29uLmR1bXBzKHsKICAgICJncmFudF90eXBlIjogImNsaWVudF9jcmVkZW50aWFscyIKfSkKIyBCYXNlIHRva2VuIGlzIG9idGFpbmVkIGJ5IGNvbXB1dGluZyBiYXNlNjQgZW5jb2Rpbmcgb2YgdXNlcm5hbWUgYW5kIHBhc3N3b3JkCmhlYWRlcnMgPSB7CiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgJ0F1dGhvcml6YXRpb24nOiAnQmFzaWMge30nLmZvcm1hdChzdHIoYmFzaWNfdG9rZW4sICdVVEYtOCcpKQp9Cgp1cmwgPSAiaHR0cHM6Ly8xMC41Mi45MC4xMC9yZXN0LWdhdGV3YXkvcmVzdC9hcGkvdjEvYXV0aC90b2tlbiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpyZXNwID0gcmVxdWVzdHMucmVxdWVzdCgiUE9TVCIsIHVybCwgaGVhZGVycz1oZWFkZXJzLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhPXBheWxvYWQsIHZlcmlmeT1GYWxzZSkKdG9rZW4gPSByZXNwLmpzb24oKVsiYWNjZXNzX3Rva2VuIl0KcHJpbnQodG9rZW4pCjx8ZmltX2VuZHw+"]
["4155ab539ea505159fbf1f2d7771f93a1aab9f63-3","4155ab539ea505159fbf1f2d7771f93a1aab9f63","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBiYXNlNjQgaW1wb3J0IGI2NGVuY29kZQppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IGpzb24KCjx8ZmltX2VuZHw+"]
["6b5874e43949cfc2e25c6992a742ad1acaa28ed2-1","6b5874e43949cfc2e25c6992a742ad1acaa28ed2","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcGF0aAo8fGZpbV9ob2xlfD4KICAgIHBhdGgoJ2ltYWdlJywgdmlld3MuSW1hZ2UuYXNfdmlldygpKSwKXQo8fGZpbV9zdWZmaXh8PgoKZnJvbSAuIGltcG9ydCB2aWV3cwoKdXJscGF0dGVybnMgPSBbCjx8ZmltX2VuZHw+"]
["6b5874e43949cfc2e25c6992a742ad1acaa28ed2-2","6b5874e43949cfc2e25c6992a742ad1acaa28ed2","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcGF0aAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cgpmcm9tIC4gaW1wb3J0IHZpZXdzCgp1cmxwYXR0ZXJucyA9IFsKPHxmaW1fZW5kfD4="]
["6b5874e43949cfc2e25c6992a742ad1acaa28ed2-3","6b5874e43949cfc2e25c6992a742ad1acaa28ed2","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcGF0aAoKZnJvbSAuIGltcG9ydCB2aWV3cwoKdXJscGF0dGVybnMgPSBbCjx8ZmltX2hvbGV8PgpdCjx8ZmltX3N1ZmZpeHw+CiAgICBwYXRoKCdpbWFnZScsIHZpZXdzLkltYWdlLmFzX3ZpZXcoKSksCjx8ZmltX2VuZHw+"]
["4186cf61efeafdb180d671be3b421f87cf16960f-1","4186cf61efeafdb180d671be3b421f87cf16960f","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMTggUmlraSBOZXR3b3JrIFN5c3RlbXMsIEluYy4KIiIiCk1BQyDjgqLjg4njg6zjgrnjga7ooajoqJjjgpLlpInmj5vjgZnjgovjg6bjg7zjg4bjgqPjg6rjg4bjgqPjg7zjgarjgakKIiIiCgppbXBvcnQgcmUKClRXT19IRVggPSByJyhbMC05QS1GYS1mXXsxLDJ9KScKRk9VUl9IRVggPSByJyhbMC05QS1GYS1mXXsxLDR9KScKRVhfVFdPX0hFWCA9IHInKFswLTlBLUZhLWZdezJ9KScKU0VQX0NIQVJTID0gcidbXDpcLVwuXScKUEFUX01BQzIgPSAnXicgKyBTRVBfQ0hBUlMuam9pbigoVFdPX0hFWCwgVFdPX0hFWCwgVFdPX0hFWCwgVFdPX0hFWCwgVFdPX0hFWCwgVFdPX0hFWCkpICsgJyQnClBBVF9NQUM0ID0gJ14nICsgU0VQX0NIQVJTLmpvaW4oKEZPVVJfSEVYLCBGT1VSX0hFWCwgRk9VUl9IRVgpKSArICckJwpQQVRfTUFDMTIgPSAnXicgKyAnJy5qb2luKChFWF9UV09fSEVYLCBFWF9UV09fSEVYLCBFWF9UV09fSEVYLCBFWF9UV09fSEVYLCBFWF9UV09fSEVYLCBFWF9UV09fSEVYKSkgKyAnJCcKUkVHX01BQzIgPSByZS5jb21waWxlKFBBVF9NQUMyKQpSRUdfTUFDNCA9IHJlLmNvbXBpbGUoUEFUX01BQzQpClJFR19NQUMxMiA9IHJlLmNvbXBpbGUoUEFUX01BQzEyKQoKCmRlZiB0b19jb2xvbl9zZXBhcmF0ZWQoc291cmNlKToKICAgICIiIgogICAgTUFDIOOCouODieODrOOCueOBqOOBl+OBpuiqjeitmOOBp+OBjeOCi+aWh+Wtl+WIl+OCkuOCs+ODreODs+OBp+mAo+e1kOOBleOCjOOBn+WFreOBpOe1hOOBq+aVtOW9ouOBmeOCi+OAggoKICAgIDpwYXJhbSBzb3VyY2U6IE1BQyDjgqLjg4njg6zjgrnjgajjgZfjgaboqo3orZjjgafjgY3jgovmloflrZfliJfjgIHjgb7jgZ/jga/jg5DjgqTjg4jliJcKICAgIDpyZXR1cm46IOOCs+ODreODs+OBp+WMuuWIh+OCieOCjOOBnyBNQUMg44Ki44OJ44Os44K5CiAgICA6cnR5cGU6IHN0cgogICAgIiIiCiAgICBpZiBpc2luc3RhbmNlKHNvdXJjZSwgYnl0ZXMpOgogICAgICAgIGlmIGxlbihzb3VyY2UpIDwgNjoKICAgICAgICAgICAgcmV0dXJuICcwMDowMDowMDowMDowMDowMCcKICAgICAgICByZXR1cm4gJzonLmpvaW4oWyclMDJ4JyAlIHggZm9yIHggaW4gc291cmNlXSkKICAgIG0gPSBSRUdfTUFDMTIubWF0Y2goc291cmNlKQogICAgaWYgbSBpcyBub3QgTm9uZToKICAgICAgICByZXR1cm4gJzonLmpvaW4obS5ncm91cCgxLCAyLCAzLCA0LCA1LCA2KSkubG93ZXIoKQogICAgbSA9IFJFR19NQUMyLm1hdGNoKHNvdXJjZSkKICAgIGlmIG0gaXMgbm90IE5vbmU6CiAgICAgICAgcmV0dXJuICc6Jy5qb2luKFtleHBhbmQoeCwgMikgZm9yIHggaW4gbS5ncm91cCgxLCAyLCAzLCA0LCA1LCA2KV0pLmxvd2VyKCkKICAgIG0gPSBSRUdfTUFDNC5tYXRjaChzb3VyY2UpCiAgICBpZiBtIGlzIG5vdCBOb25lOgogICAgICAgICh0MSwgdDIsIHQzKSA9IFtleHBhbmQoeCwgNCkgZm9yIHggaW4gbS5ncm91cCgxLCAyLCAzKV0KICAgICAgICByZXR1cm4gJzonLmpvaW4oKHQxWzA6Ml0sIHQxWzI6NF0sIHQyWzA6Ml0sIHQyWzI6NF0sIHQzWzA6Ml0sIHQzWzI6NF0pKS5sb3dlcigpCiAgICByZXR1cm4gc291cmNlCgoKZGVmIHRvX2RvdF9zZXBhcmF0ZWQoc291cmNlKToKICAgICIiIgogICAgTUFDIOOCouODieODrOOCueOBqOOBl+OBpuiqjeitmOOBp+OBjeOCi+aWh+Wtl+WIl+OCkuODieODg+ODiOOBp+mAo+e1kOOBleOCjOOBn+S4ieOBpOe1hOOBv+OBq+aVtOW9ouOBmeOCi+OAggogICAgOnBhcmFtIHNvdXJjZTog5YWl5YqbIE1BQyDjgqLjg4njg6zjgrkKICAgIDpyZXR1cm46IOODieODg+ODiOOBp+mAo+e1kOOBleOCjOOBnzTmoYHjga4xNumAsuaVsOS4ieOBpOe1hOOBvwogICAgOnJ0eXBlOiBzdHIKICAgICIiIgo8fGZpbV9ob2xlfD4KICAgICAgICB4MiA9ICclMDR4JyAlIChzb3VyY2VbMl0gPDwgOCB8IHNvdXJjZVszXSkKICAgICAgICB4MyA9ICclMDR4JyAlIChzb3VyY2VbNF0gPDwgOCB8IHNvdXJjZVs1XSkKICAgICAgICByZXR1cm4gJy4nLmpvaW4oKHgxLCB4MiwgeDMpKQogICAgbSA9IFJFR19NQUMyLm1hdGNoKHNvdXJjZSkKICAgIGlmIG0gaXMgbm90IE5vbmU6CiAgICAgICAgc2V4dGV0ID0gW2V4cGFuZCh4LCAyKSBmb3IgeCBpbiBtLmdyb3VwKDEsIDIsIDMsIDQsIDUsIDYpXQogICAgICAgIHJldHVybiAnLicuam9pbigoc2V4dGV0WzBdICsgc2V4dGV0WzFdLCBzZXh0ZXRbMl0gKyBzZXh0ZXRbM10sIHNleHRldFs0XSArIHNleHRldFs1XSkpLmxvd2VyKCkKICAgIG0gPSBSRUdfTUFDMTIubWF0Y2goc291cmNlKQogICAgaWYgbSBpcyBub3QgTm9uZToKICAgICAgICByZXR1cm4gJy4nLmpvaW4oKG0uZ3JvdXAoMSkgKyBtLmdyb3VwKDIpLCBtLmdyb3VwKDMpICsgbS5ncm91cCg0KSwgbS5ncm91cCg1KSArIG0uZ3JvdXAoNikpKS5sb3dlcigpCiAgICBtID0gUkVHX01BQzQubWF0Y2goc291cmNlKQogICAgaWYgbSBpcyBub3QgTm9uZToKICAgICAgICB0cmlwbGUgPSBbZXhwYW5kKHgsIDQpIGZvciB4IGluIG0uZ3JvdXAoMSwgMiwgMyldCiAgICAgICAgcmV0dXJuICcuJy5qb2luKHRyaXBsZSkubG93ZXIoKQogICAgcmV0dXJuIHNvdXJjZQoKCmRlZiBleHBhbmQobnVtLCBkaWcpOgogICAgIiIiCiAgICDopo/lrprjga7moYHmlbDjgavjgarjgovjgb7jgaflt6bjgavjgrzjg63jgpLoo5zjgYbjgIIKICAgIDpwYXJhbSBudW06IE1BQyDjgqLjg4njg6zjgrnjga7pg6jliIYKICAgIDpwYXJhbSBkaWc6IOS8uOW8teOBmeOBueOBjeimj+WumuOBruahgeaVsAogICAgOnJldHVybjog5qGB5pWw44Gu5pWw5YCkCiAgICAiIiIKICAgIGlmIG51bSBpcyBOb25lOgogICAgICAgIG51bSA9ICcwJwogICAgd2hpbGUgbGVuKG51bSkgPCBkaWc6CiAgICAgICAgbnVtID0gJzAnICsgbnVtCiAgICByZXR1cm4gbnVtCjx8ZmltX3N1ZmZpeHw+CiAgICBpZiBpc2luc3RhbmNlKHNvdXJjZSwgYnl0ZXMpOgogICAgICAgIGlmIGxlbihzb3VyY2UpIDwgNjoKICAgICAgICAgICAgcmV0dXJuICcwMDAwLjAwMDAuMDAwMCcKICAgICAgICB4MSA9ICclMDR4JyAlIChzb3VyY2VbMF0gPDwgOCB8IHNvdXJjZVsxXSkKPHxmaW1fZW5kfD4="]
["c1973e01f3485671d818738a75bfd35e1892fe07-1","c1973e01f3485671d818738a75bfd35e1892fe07","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNsaWNrCgpmcm9tIGdyYXZpdHkgaW1wb3J0IHByb2Nlc3NfbWFuYWdlcgoKCkBjbGljay5jb21tYW5kKCJzdGF0dXMiKQpAY2xpY2sucGFzc19jb250ZXh0CmRlZiBjbGkoY3R4KToKICAgICIiIkRpc3BsYXkgc2VydmVyIHN0YXR1cy4iIiIKICAgIHdpdGggcHJvY2Vzc19tYW5hZ2VyLnByb2Nlc3NfbWFuYWdlcihzdGF0ZV9kaXI9Y3R4LnBhcmVudC5zdGF0ZV9kaXIsIHN0YXJ0X2RhZW1vbj1GYWxzZSkgYXMgcG06Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBwbS5zdGF0dXMoKQo8fGZpbV9lbmR8Pg=="]
["c1973e01f3485671d818738a75bfd35e1892fe07-2","c1973e01f3485671d818738a75bfd35e1892fe07","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNsaWNrCgpmcm9tIGdyYXZpdHkgaW1wb3J0IHByb2Nlc3NfbWFuYWdlcgoKCkBjbGljay5jb21tYW5kKCJzdGF0dXMiKQpAY2xpY2sucGFzc19jb250ZXh0Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIGNsaShjdHgpOgogICAgIiIiRGlzcGxheSBzZXJ2ZXIgc3RhdHVzLiIiIgogICAgd2l0aCBwcm9jZXNzX21hbmFnZXIucHJvY2Vzc19tYW5hZ2VyKHN0YXRlX2Rpcj1jdHgucGFyZW50LnN0YXRlX2Rpciwgc3RhcnRfZGFlbW9uPUZhbHNlKSBhcyBwbToKICAgICAgICBwbS5zdGF0dXMoKQo8fGZpbV9lbmR8Pg=="]
["e51e2c893bc103559c71f5ee793da2d69c0ab826-1","e51e2c893bc103559c71f5ee793da2d69c0ab826","PHxmaW1fcHJlZml4fD4KY2xhc3MgRXhwZXJpbWVudEluZm86CiAgZGVmIF9faW5pdF9fKHNlbGYsIGlkLCBzYW1wbGVfd2VpZ2h0LAogICAgICAgICAgICAgICAgICAgcHJvamVjdF9pZCwgdXNlcl9pZCwKICAgICAgICAgICAgICAgICAgIHRpbWVfc3RhbXAsIGVwb2NocywKICAgICAgICAgICAgICAgICAgIGJhdGNoX3NpemUsIEZyYW1ld29yaywKICAgICAgICAgICAgICAgICAgICBpbnB1dF9zaGFwZSwgbGF5ZXJzX2NvdW50LAogICAgICAgICAgICAgICAgICAgIG91dHB1dF9zaGFwZSwgT3B0aW1pemVyLAogICAgICAgICAgICAgICAgICAgTG9zc0Z1bmN0aW9uLCBjYWxsYmFja3NfbG9nLAogICAgICAgICAgICAgICAgICAgIG1vZGVsX2ZpbGUsIGFjY3VyYWN5X3ZhbHVlLAogICAgICAgICAgICAgICAgICAgbG9zc192YWx1ZSwgcHJlZGljdF9mdW5jdGlvbiwKICAgICAgICAgICAgICAgbGlzdF9vZl9hY2N1cmFjeV9vdmVyX2Vwb2NocywgbGlzdF9vZl9sb3NzX292ZXJfZXBvY2hzLAogICAgICAgICAgICAgICAgYXV0b19wcmVkaWN0X2Z1bmN0aW9uKToKICAgIHNlbGYuaWQgPSBpZAogICAgc2VsZi5zYW1wbGVfd2VpZ2h0ID0gc2FtcGxlX3dlaWdodAogICAgc2VsZi5wcm9qZWN0X2lkID0gcHJvamVjdF9pZAogICAgc2VsZi51c2VyX2lkID0gdXNlcl9pZAogICAgc2VsZi50aW1lX3N0YW1wID0gdGltZV9zdGFtcAogICAgc2VsZi5lcG9jaHMgPSBlcG9jaHMKICAgIHNlbGYuYmF0Y2hfc2l6ZSA9IGJhdGNoX3NpemUKICAgIHNlbGYuRnJhbWV3b3JrID0gRnJhbWV3b3JrCiAgICBzZWxmLmlucHV0X3NoYXBlID0gaW5wdXRfc2hhcGUKICAgIHNlbGYubGF5ZXJzX2NvdW50ID0gbGF5ZXJzX2NvdW50CiAgICBzZWxmLm91dHB1dF9zaGFwZSA9IG91dHB1dF9zaGFwZQogICAgc2VsZi5vcHRpbWl6ZXIgPSBPcHRpbWl6ZXIKICAgIHNlbGYubG9zc2Z1bmN0aW9uID0gTG9zc0Z1bmN0aW9uCiAgICBzZWxmLmFjY3VyYWN5X3ZhbHVlID0gYWNjdXJhY3lfdmFsdWUKICAgIHNlbGYubG9zc192YWx1ZSA9IGxvc3NfdmFsdWUKICAgIHNlbGYuY2FsbGJhY2tzX2xvZyA9IGNhbGxiYWNrc19sb2cKICAgIHNlbGYubW9kZWxfZmlsZSA9IG1vZGVsX2ZpbGUKICAgIHNlbGYucHJlZGljdF9mdW5jdGlvbiA9IHByZWRpY3RfZnVuY3Rpb24KICAgIHNlbGYubGlzdF9vZl9hY2N1cmFjeV9vdmVyX2Vwb2NocyA9IGxpc3Rfb2ZfYWNjdXJhY3lfb3Zlcl9lcG9jaHMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgc2VsZi5saXN0X29mX2xvc3Nfb3Zlcl9lcG9jaHMgPSBsaXN0X29mX2xvc3Nfb3Zlcl9lcG9jaHMKICAgIGxpc3Rfb2ZfZXBvY2hzID0gW10KICAgIGN1cnJlbnRfY291bnRlciA9IDEKICAgIGZvciB2IGluIHNlbGYubGlzdF9vZl9hY2N1cmFjeV9vdmVyX2Vwb2NoczoKPHxmaW1fZW5kfD4="]
["e51e2c893bc103559c71f5ee793da2d69c0ab826-2","e51e2c893bc103559c71f5ee793da2d69c0ab826","PHxmaW1fcHJlZml4fD4KY2xhc3MgRXhwZXJpbWVudEluZm86CiAgZGVmIF9faW5pdF9fKHNlbGYsIGlkLCBzYW1wbGVfd2VpZ2h0LAogICAgICAgICAgICAgICAgICAgcHJvamVjdF9pZCwgdXNlcl9pZCwKICAgICAgICAgICAgICAgICAgIHRpbWVfc3RhbXAsIGVwb2NocywKICAgICAgICAgICAgICAgICAgIGJhdGNoX3NpemUsIEZyYW1ld29yaywKICAgICAgICAgICAgICAgICAgICBpbnB1dF9zaGFwZSwgbGF5ZXJzX2NvdW50LAogICAgICAgICAgICAgICAgICAgIG91dHB1dF9zaGFwZSwgT3B0aW1pemVyLAogICAgICAgICAgICAgICAgICAgTG9zc0Z1bmN0aW9uLCBjYWxsYmFja3NfbG9nLAogICAgICAgICAgICAgICAgICAgIG1vZGVsX2ZpbGUsIGFjY3VyYWN5X3ZhbHVlLAogICAgICAgICAgICAgICAgICAgbG9zc192YWx1ZSwgcHJlZGljdF9mdW5jdGlvbiwKICAgICAgICAgICAgICAgbGlzdF9vZl9hY2N1cmFjeV9vdmVyX2Vwb2NocywgbGlzdF9vZl9sb3NzX292ZXJfZXBvY2hzLAogICAgICAgICAgICAgICAgYXV0b19wcmVkaWN0X2Z1bmN0aW9uKToKICAgIHNlbGYuaWQgPSBpZAogICAgc2VsZi5zYW1wbGVfd2VpZ2h0ID0gc2FtcGxlX3dlaWdodAogICAgc2VsZi5wcm9qZWN0X2lkID0gcHJvamVjdF9pZAogICAgc2VsZi51c2VyX2lkID0gdXNlcl9pZAo8fGZpbV9ob2xlfD4KICAgIHNlbGYuaW5wdXRfc2hhcGUgPSBpbnB1dF9zaGFwZQogICAgc2VsZi5sYXllcnNfY291bnQgPSBsYXllcnNfY291bnQKICAgIHNlbGYub3V0cHV0X3NoYXBlID0gb3V0cHV0X3NoYXBlCiAgICBzZWxmLm9wdGltaXplciA9IE9wdGltaXplcgogICAgc2VsZi5sb3NzZnVuY3Rpb24gPSBMb3NzRnVuY3Rpb24KICAgIHNlbGYuYWNjdXJhY3lfdmFsdWUgPSBhY2N1cmFjeV92YWx1ZQogICAgc2VsZi5sb3NzX3ZhbHVlID0gbG9zc192YWx1ZQogICAgc2VsZi5jYWxsYmFja3NfbG9nID0gY2FsbGJhY2tzX2xvZwogICAgc2VsZi5tb2RlbF9maWxlID0gbW9kZWxfZmlsZQogICAgc2VsZi5wcmVkaWN0X2Z1bmN0aW9uID0gcHJlZGljdF9mdW5jdGlvbgogICAgc2VsZi5saXN0X29mX2FjY3VyYWN5X292ZXJfZXBvY2hzID0gbGlzdF9vZl9hY2N1cmFjeV9vdmVyX2Vwb2NocwogICAgc2VsZi5saXN0X29mX2xvc3Nfb3Zlcl9lcG9jaHMgPSBsaXN0X29mX2xvc3Nfb3Zlcl9lcG9jaHMKICAgIGxpc3Rfb2ZfZXBvY2hzID0gW10KICAgIGN1cnJlbnRfY291bnRlciA9IDEKICAgIGZvciB2IGluIHNlbGYubGlzdF9vZl9hY2N1cmFjeV9vdmVyX2Vwb2NoczoKICAgICAgbGlzdF9vZl9lcG9jaHMuYXBwZW5kKGN1cnJlbnRfY291bnRlcikKICAgICAgY3VycmVudF9jb3VudGVyID0gY3VycmVudF9jb3VudGVyICsgMQogICAgc2VsZi5saXN0X29mX2Vwb2NocyA9IGxpc3Rfb2ZfZXBvY2hzCiAgICBzZWxmLmF1dG9fcHJlZGljdF9mdW5jdGlvbiA9IGF1dG9fcHJlZGljdF9mdW5jdGlvbgo8fGZpbV9zdWZmaXh8PgogICAgc2VsZi50aW1lX3N0YW1wID0gdGltZV9zdGFtcAogICAgc2VsZi5lcG9jaHMgPSBlcG9jaHMKICAgIHNlbGYuYmF0Y2hfc2l6ZSA9IGJhdGNoX3NpemUKICAgIHNlbGYuRnJhbWV3b3JrID0gRnJhbWV3b3JrCjx8ZmltX2VuZHw+"]
["e51e2c893bc103559c71f5ee793da2d69c0ab826-3","e51e2c893bc103559c71f5ee793da2d69c0ab826","PHxmaW1fcHJlZml4fD4KY2xhc3MgRXhwZXJpbWVudEluZm86CiAgZGVmIF9faW5pdF9fKHNlbGYsIGlkLCBzYW1wbGVfd2VpZ2h0LAogICAgICAgICAgICAgICAgICAgcHJvamVjdF9pZCwgdXNlcl9pZCwKICAgICAgICAgICAgICAgICAgIHRpbWVfc3RhbXAsIGVwb2NocywKICAgICAgICAgICAgICAgICAgIGJhdGNoX3NpemUsIEZyYW1ld29yaywKICAgICAgICAgICAgICAgICAgICBpbnB1dF9zaGFwZSwgbGF5ZXJzX2NvdW50LAogICAgICAgICAgICAgICAgICAgIG91dHB1dF9zaGFwZSwgT3B0aW1pemVyLAogICAgICAgICAgICAgICAgICAgTG9zc0Z1bmN0aW9uLCBjYWxsYmFja3NfbG9nLAogICAgICAgICAgICAgICAgICAgIG1vZGVsX2ZpbGUsIGFjY3VyYWN5X3ZhbHVlLAogICAgICAgICAgICAgICAgICAgbG9zc192YWx1ZSwgcHJlZGljdF9mdW5jdGlvbiwKICAgICAgICAgICAgICAgbGlzdF9vZl9hY2N1cmFjeV9vdmVyX2Vwb2NocywgbGlzdF9vZl9sb3NzX292ZXJfZXBvY2hzLAogICAgICAgICAgICAgICAgYXV0b19wcmVkaWN0X2Z1bmN0aW9uKToKICAgIHNlbGYuaWQgPSBpZAogICAgc2VsZi5zYW1wbGVfd2VpZ2h0ID0gc2FtcGxlX3dlaWdodAogICAgc2VsZi5wcm9qZWN0X2lkID0gcHJvamVjdF9pZAogICAgc2VsZi51c2VyX2lkID0gdXNlcl9pZAogICAgc2VsZi50aW1lX3N0YW1wID0gdGltZV9zdGFtcAogICAgc2VsZi5lcG9jaHMgPSBlcG9jaHMKICAgIHNlbGYuYmF0Y2hfc2l6ZSA9IGJhdGNoX3NpemUKICAgIHNlbGYuRnJhbWV3b3JrID0gRnJhbWV3b3JrCiAgICBzZWxmLmlucHV0X3NoYXBlID0gaW5wdXRfc2hhcGUKICAgIHNlbGYubGF5ZXJzX2NvdW50ID0gbGF5ZXJzX2NvdW50CiAgICBzZWxmLm91dHB1dF9zaGFwZSA9IG91dHB1dF9zaGFwZQogICAgc2VsZi5vcHRpbWl6ZXIgPSBPcHRpbWl6ZXIKICAgIHNlbGYubG9zc2Z1bmN0aW9uID0gTG9zc0Z1bmN0aW9uCjx8ZmltX2hvbGV8PgogICAgc2VsZi5wcmVkaWN0X2Z1bmN0aW9uID0gcHJlZGljdF9mdW5jdGlvbgogICAgc2VsZi5saXN0X29mX2FjY3VyYWN5X292ZXJfZXBvY2hzID0gbGlzdF9vZl9hY2N1cmFjeV9vdmVyX2Vwb2NocwogICAgc2VsZi5saXN0X29mX2xvc3Nfb3Zlcl9lcG9jaHMgPSBsaXN0X29mX2xvc3Nfb3Zlcl9lcG9jaHMKICAgIGxpc3Rfb2ZfZXBvY2hzID0gW10KICAgIGN1cnJlbnRfY291bnRlciA9IDEKICAgIGZvciB2IGluIHNlbGYubGlzdF9vZl9hY2N1cmFjeV9vdmVyX2Vwb2NoczoKICAgICAgbGlzdF9vZl9lcG9jaHMuYXBwZW5kKGN1cnJlbnRfY291bnRlcikKICAgICAgY3VycmVudF9jb3VudGVyID0gY3VycmVudF9jb3VudGVyICsgMQogICAgc2VsZi5saXN0X29mX2Vwb2NocyA9IGxpc3Rfb2ZfZXBvY2hzCiAgICBzZWxmLmF1dG9fcHJlZGljdF9mdW5jdGlvbiA9IGF1dG9fcHJlZGljdF9mdW5jdGlvbgo8fGZpbV9zdWZmaXh8PgogICAgc2VsZi5hY2N1cmFjeV92YWx1ZSA9IGFjY3VyYWN5X3ZhbHVlCiAgICBzZWxmLmxvc3NfdmFsdWUgPSBsb3NzX3ZhbHVlCiAgICBzZWxmLmNhbGxiYWNrc19sb2cgPSBjYWxsYmFja3NfbG9nCiAgICBzZWxmLm1vZGVsX2ZpbGUgPSBtb2RlbF9maWxlCjx8ZmltX2VuZHw+"]
["e51e2c893bc103559c71f5ee793da2d69c0ab826-4","e51e2c893bc103559c71f5ee793da2d69c0ab826","PHxmaW1fcHJlZml4fD4KY2xhc3MgRXhwZXJpbWVudEluZm86CiAgZGVmIF9faW5pdF9fKHNlbGYsIGlkLCBzYW1wbGVfd2VpZ2h0LAogICAgICAgICAgICAgICAgICAgcHJvamVjdF9pZCwgdXNlcl9pZCwKICAgICAgICAgICAgICAgICAgIHRpbWVfc3RhbXAsIGVwb2NocywKICAgICAgICAgICAgICAgICAgIGJhdGNoX3NpemUsIEZyYW1ld29yaywKICAgICAgICAgICAgICAgICAgICBpbnB1dF9zaGFwZSwgbGF5ZXJzX2NvdW50LAogICAgICAgICAgICAgICAgICAgIG91dHB1dF9zaGFwZSwgT3B0aW1pemVyLAogICAgICAgICAgICAgICAgICAgTG9zc0Z1bmN0aW9uLCBjYWxsYmFja3NfbG9nLAogICAgICAgICAgICAgICAgICAgIG1vZGVsX2ZpbGUsIGFjY3VyYWN5X3ZhbHVlLAogICAgICAgICAgICAgICAgICAgbG9zc192YWx1ZSwgcHJlZGljdF9mdW5jdGlvbiwKICAgICAgICAgICAgICAgbGlzdF9vZl9hY2N1cmFjeV9vdmVyX2Vwb2NocywgbGlzdF9vZl9sb3NzX292ZXJfZXBvY2hzLAogICAgICAgICAgICAgICAgYXV0b19wcmVkaWN0X2Z1bmN0aW9uKToKICAgIHNlbGYuaWQgPSBpZAogICAgc2VsZi5zYW1wbGVfd2VpZ2h0ID0gc2FtcGxlX3dlaWdodAogICAgc2VsZi5wcm9qZWN0X2lkID0gcHJvamVjdF9pZAogICAgc2VsZi51c2VyX2lkID0gdXNlcl9pZAogICAgc2VsZi50aW1lX3N0YW1wID0gdGltZV9zdGFtcAogICAgc2VsZi5lcG9jaHMgPSBlcG9jaHMKICAgIHNlbGYuYmF0Y2hfc2l6ZSA9IGJhdGNoX3NpemUKICAgIHNlbGYuRnJhbWV3b3JrID0gRnJhbWV3b3JrCiAgICBzZWxmLmlucHV0X3NoYXBlID0gaW5wdXRfc2hhcGUKICAgIHNlbGYubGF5ZXJzX2NvdW50ID0gbGF5ZXJzX2NvdW50Cjx8ZmltX2hvbGV8PgogICAgc2VsZi5sb3NzX3ZhbHVlID0gbG9zc192YWx1ZQogICAgc2VsZi5jYWxsYmFja3NfbG9nID0gY2FsbGJhY2tzX2xvZwogICAgc2VsZi5tb2RlbF9maWxlID0gbW9kZWxfZmlsZQogICAgc2VsZi5wcmVkaWN0X2Z1bmN0aW9uID0gcHJlZGljdF9mdW5jdGlvbgogICAgc2VsZi5saXN0X29mX2FjY3VyYWN5X292ZXJfZXBvY2hzID0gbGlzdF9vZl9hY2N1cmFjeV9vdmVyX2Vwb2NocwogICAgc2VsZi5saXN0X29mX2xvc3Nfb3Zlcl9lcG9jaHMgPSBsaXN0X29mX2xvc3Nfb3Zlcl9lcG9jaHMKICAgIGxpc3Rfb2ZfZXBvY2hzID0gW10KICAgIGN1cnJlbnRfY291bnRlciA9IDEKICAgIGZvciB2IGluIHNlbGYubGlzdF9vZl9hY2N1cmFjeV9vdmVyX2Vwb2NoczoKICAgICAgbGlzdF9vZl9lcG9jaHMuYXBwZW5kKGN1cnJlbnRfY291bnRlcikKICAgICAgY3VycmVudF9jb3VudGVyID0gY3VycmVudF9jb3VudGVyICsgMQogICAgc2VsZi5saXN0X29mX2Vwb2NocyA9IGxpc3Rfb2ZfZXBvY2hzCiAgICBzZWxmLmF1dG9fcHJlZGljdF9mdW5jdGlvbiA9IGF1dG9fcHJlZGljdF9mdW5jdGlvbgo8fGZpbV9zdWZmaXh8PgogICAgc2VsZi5vdXRwdXRfc2hhcGUgPSBvdXRwdXRfc2hhcGUKICAgIHNlbGYub3B0aW1pemVyID0gT3B0aW1pemVyCiAgICBzZWxmLmxvc3NmdW5jdGlvbiA9IExvc3NGdW5jdGlvbgogICAgc2VsZi5hY2N1cmFjeV92YWx1ZSA9IGFjY3VyYWN5X3ZhbHVlCjx8ZmltX2VuZHw+"]
["01c8dc0f64d57b21f682a91beb4a5f080d840a70-1","01c8dc0f64d57b21f682a91beb4a5f080d840a70","PHxmaW1fcHJlZml4fD4KQ09MTEVDVElPTl9OQU1FID0gJ2RhaWxpZXMnCklEX0tFWSA9ICdfaWQnCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KTkFNRSA9ICduYW1lJwpOT1RFID0gJ25vdGUnClVSR0VOQ1kgPSAndXJnZW5jeScKRElGRklDVUxUWSA9ICdkaWZmaWN1bHR5Jwo8fGZpbV9lbmR8Pg=="]
["01c8dc0f64d57b21f682a91beb4a5f080d840a70-2","01c8dc0f64d57b21f682a91beb4a5f080d840a70","PHxmaW1fcHJlZml4fD4KQ09MTEVDVElPTl9OQU1FID0gJ2RhaWxpZXMnCklEX0tFWSA9ICdfaWQnCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KTkFNRSA9ICduYW1lJwpOT1RFID0gJ25vdGUnClVSR0VOQ1kgPSAndXJnZW5jeScKRElGRklDVUxUWSA9ICdkaWZmaWN1bHR5Jwo8fGZpbV9lbmR8Pg=="]
["e7ded26b4b21943a6ad66ea93550eb3c8bd96912-1","e7ded26b4b21943a6ad66ea93550eb3c8bd96912","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMCBUaGUgQ2h1YmFvRlMgQXV0aG9ycy4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgojIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZwojIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiMgLSotIGNvZGluZzogdXRmLTggLSotaQppbXBvcnQgcmVxdWVzdHMKCmltcG9ydCBlbnYKZnJvbSBiYXNlIGltcG9ydCBTM1Rlc3RDYXNlLCBnZXRfZW52X3MzX2NsaWVudCwgZ2V0X2Vudl9zM19jbGllbnRfdm9sdW1lX2NyZWRlbnRpYWwKZnJvbSBiYXNlIGltcG9ydCByYW5kb21fc3RyaW5nLCByYW5kb21fc3RyaW5nX2NuLCByYW5kb21fYnl0ZXMsIGNvbXB1dGVfbWQ1CgpLRVlfUFJFRklYID0gJ3Rlc3Qtc2lnbmF0dXJlLSVzLycgJSByYW5kb21fc3RyaW5nKDgpCgoKY2xhc3MgU2lnbmF0dXJlVGVzdChTM1Rlc3RDYXNlKToKCiAgICBkZWYgX190ZXN0X3ByZXNpZ24oc2VsZiwgczMsIGtleT1Ob25lKToKICAgICAgICAiIiIKICAgICAgICA6dHlwZSBzMzogYm90b2NvcmUuY2xpZW50LlMzCiAgICAgICAgOnBhcmFtIHMzOiBTMyBjbGllbnQgaW5zdGFuY2UKICAgICAgICA6cmV0dXJuOiBOb25lCiAgICAgICAgIiIiCiAgICAgICAgIyBUZXN0IGhlYWQgYSBidWNrZXQgYnkgcHJlc2lnbmVkIHVybC4KICAgICAgICB1cmwgPSBzMy5nZW5lcmF0ZV9wcmVzaWduZWRfdXJsKCdoZWFkX2J1Y2tldCcsIFBhcmFtcz17J0J1Y2tldCc6IGVudi5CVUNLRVR9KQogICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMuaGVhZCh1cmwpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQogICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKCiAgICAgICAgIyBUZXN0IGhlYWQgYSBidWNrZXQgYnkgZXhwaXJlZCBwcmVzaWduZWQgdXJsLgogICAgICAgIHVybCA9IHMzLmdlbmVyYXRlX3ByZXNpZ25lZF91cmwoJ2hlYWRfYnVja2V0JywgUGFyYW1zPXsnQnVja2V0JzogZW52LkJVQ0tFVH0sIEV4cGlyZXNJbj0tMSkKICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmhlYWQodXJsKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDQwMykKICAgICAgICByZXNwb25zZS5jbG9zZSgpCgogICAgICAgICMgVmFycyBmb3IgZm9sbG93ZWQgdGVzdHMKICAgICAgICBpZiBrZXkgaXMgTm9uZToKICAgICAgICAgICAga2V5ID0gS0VZX1BSRUZJWCArIHJhbmRvbV9zdHJpbmcoMTYpCiAgICAgICAgYm9keSA9IHJhbmRvbV9ieXRlcygxMDI0KQogICAgICAgIGV4cGVjdF9tZDUgPSBjb21wdXRlX21kNShib2R5KQoKICAgICAgICAjIFRlc3QgcHV0IGFuIG9iamVjdCBieSBwcmVzaWduZWQgdXJsLgogICAgICAgIHVybCA9IHMzLmdlbmVyYXRlX3ByZXNpZ25lZF91cmwoJ3B1dF9vYmplY3QnLCBQYXJhbXM9eydCdWNrZXQnOiBlbnYuQlVDS0VULCAnS2V5Jzoga2V5fSkKICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLnB1dCh1cmw9dXJsLCBkYXRhPWJvZHkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRXRhZycgaW4gcmVzcG9uc2UuaGVhZGVycykKICAgICAgICBleHBlY3RfZXRhZyA9IHJlc3BvbnNlLmhlYWRlcnNbJ0VUYWcnXQogICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKCiAgICAgICAgIyBUZXN0IGhlYWQgYW4gb2JqZWN0IGJ5IHByZXNpZ25lZCB1cmwuCiAgICAgICAgdXJsID0gczMuZ2VuZXJhdGVfcHJlc2lnbmVkX3VybCgnaGVhZF9vYmplY3QnLCBQYXJhbXM9eydCdWNrZXQnOiBlbnYuQlVDS0VULCAnS2V5Jzoga2V5fSkKICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmhlYWQodXJsKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwMCkKICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0V0YWcnIGluIHJlc3BvbnNlLmhlYWRlcnMpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5oZWFkZXJzWydFVGFnJ10sIGV4cGVjdF9ldGFnKQogICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKCiAgICAgICAgIyBUZXN0IGdldCBhbiBvYmplY3QgYnkgcHJlc2lnbmVkIHVybC4KICAgICAgICB1cmwgPSBzMy5nZW5lcmF0ZV9wcmVzaWduZWRfdXJsKCdnZXRfb2JqZWN0JywgUGFyYW1zPXsnQnVja2V0JzogZW52LkJVQ0tFVCwgJ0tleSc6IGtleX0pCiAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5nZXQodXJsKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwMCkKICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0V0YWcnIGluIHJlc3BvbnNlLmhlYWRlcnMpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5oZWFkZXJzWydFVGFnJ10sIGV4cGVjdF9ldGFnKQogICAgICAgIGFjdHVhbF9tZDUgPSBjb21wdXRlX21kNShyZXNwb25zZS5jb250ZW50KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX21kNSwgZXhwZWN0X21kNSkKICAgICAgICByZXNwb25zZS5jbG9zZSgpCgogICAgICAgICMgVGVzdCBkZWxldGUgYW4gb2JqZWN0IGJ5IHByZXNpZ25lZCB1cmwuCiAgICAgICAgdXJsID0gczMuZ2VuZXJhdGVfcHJlc2lnbmVkX3VybCgnZGVsZXRlX29iamVjdCcsIFBhcmFtcz17J0J1Y2tldCc6IGVudi5CVUNLRVQsICdLZXknOiBrZXl9KQogICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMuZGVsZXRlKHVybCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDQpCiAgICAgICAgcmVzcG9uc2UuY2xvc2UoKQoKICAgICAgICAjIENoZWNrIGRlbGV0aW9uIHJlc3VsdAogICAgICAgIHVybCA9IHMzLmdlbmVyYXRlX3ByZXNpZ25lZF91cmwoJ2hlYWRfb2JqZWN0JywgUGFyYW1zPXsnQnVja2V0JzogZW52LkJVQ0tFVCwgJ0tleSc6IGtleX0pCiAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5oZWFkKHVybCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCA0MDQpCiAgICAgICAgcmVzcG9uc2UuY2xvc2UoKQoKICAgICAgICAjIFJlbW92ZSBrZXkgcHJlZml4CiAgICAgICAgdXJsID0gczMuZ2VuZXJhdGVfcHJlc2lnbmVkX3VybCgnZGVsZXRlX29iamVjdCcsIFBhcmFtcz17J0J1Y2tldCc6IGVudi5CVUNLRVQsICdLZXknOiBLRVlfUFJFRklYfSkKICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmRlbGV0ZSh1cmwpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjA0KQogICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKCiAgICBkZWYgX190ZXN0X3NpZ24oc2VsZiwgczMsIGtleT1Ob25lKToKICAgICAgICAiIiIKICAgICAgICA6dHlwZSBzMzogYm90b2NvcmUuY2xpZW50LlMzCiAgICAgICAgOnBhcmFtIHMzOiBTMyBjbGllbnQgaW5zdGFuY2UKICAgICAgICA6cmV0dXJuOiBOb25lCiAgICAgICAgIiIiCiAgICAgICAgIyBUZXN0IGhlYWQgYSBidWNrZXQKICAgICAgICBzZWxmLmFzc2VydF9oZWFkX2J1Y2tldF9yZXN1bHQoCiAgICAgICAgICAgIHJlc3VsdD1zMy5oZWFkX2J1Y2tldChCdWNrZXQ9ZW52LkJVQ0tFVCkpCgogICAgICAgICMgVmFycyBmb3IgZm9sbG93ZWQgdGVzdHMKICAgICAgICBpZiBrZXkgaXMgTm9uZToKICAgICAgICAgICAga2V5ID0gS0VZX1BSRUZJWCArIHJhbmRvbV9zdHJpbmcoMTYpCiAgICAgICAgYm9keSA9IHJhbmRvbV9ieXRlcygxMDI0KQogICAgICAgIGV4cGVjdF9tZDUgPSBjb21wdXRlX21kNShib2R5KQoKICAgICAgICAjIFRlc3QgcHV0IGFuIG9iamVjdC4KICAgICAgICBzZWxmLmFzc2VydF9wdXRfb2JqZWN0X3Jlc3VsdCgKICAgICAgICAgICAgcmVzdWx0PXMzLnB1dF9vYmplY3QoQnVja2V0PWVudi5CVUNLRVQsIEtleT1rZXksIEJvZHk9Ym9keSksCiAgICAgICAgICAgIGV0YWc9ZXhwZWN0X21kNSkKCiAgICAgICAgIyBUZXN0IGhlYWQgYW4gb2JqZWN0LgogICAgICAgIHNlbGYuYXNzZXJ0X2hlYWRfb2JqZWN0X3Jlc3VsdCgKICAgICAgICAgICAgcmVzdWx0PXMzLmhlYWRfb2JqZWN0KEJ1Y2tldD1lbnYuQlVDS0VULCBLZXk9a2V5KSwKICAgICAgICAgICAgZXRhZz1leHBlY3RfbWQ1KQoKICAgICAgICAjIFRlc3QgZ2V0IGFuIG9iamVjdC4KICAgICAgICBzZWxmLmFzc2VydF9nZXRfb2JqZWN0X3Jlc3VsdCgKICAgICAgICAgICAgcmVzdWx0PXMzLmdldF9vYmplY3QoQnVja2V0PWVudi5CVUNLRVQsIEtleT1rZXkpLAogICAgICAgICAgICBldGFnPWV4cGVjdF9tZDUsCiAgICAgICAgICAgIGNvbnRlbnRfbGVuZ3RoPTEwMjQsCiAgICAgICAgICAgIGJvZHlfbWQ1PWV4cGVjdF9tZDUpCgogICAgICAgICMgVGVzdCBkZWxldGUgYW4gb2JqZWN0LgogICAgICAgIHNlbGYuYXNzZXJ0X2RlbGV0ZV9vYmplY3RfcmVzdWx0KAogICAgICAgICAgICByZXN1bHQ9czMuZGVsZXRlX29iamVjdChCdWNrZXQ9ZW52LkJVQ0tFVCwgS2V5PWtleSkpCgogICAgICAgICMgUmVtb3ZlIGtleSBwcmVmaXguCiAgICAgICAgc2VsZi5hc3NlcnRfZGVsZXRlX29iamVjdF9yZXN1bHQoCiAgICAgICAgICAgIHJlc3VsdD1zMy5kZWxldGVfb2JqZWN0KEJ1Y2tldD1lbnYuQlVDS0VULCBLZXk9S0VZX1BSRUZJWCkpCgogICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3YyX2VuKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRoaXMgdGVzdCB0ZXN0cyBwcm9jZXNzIHVuZGVyIHNpbmdlZCBoZWFkZXIgd2l0aCBzaWduYXR1cmUgYWxnb3JpdGhtIHYyLgogICAgICAgIDpyZXR1cm46IE5vbmUKICAgICAgICAiIiIKICAgICAgICBzZWxmLl9fdGVzdF9zaWduKAogICAgICAgICAgICBzMz1nZXRfZW52X3MzX2NsaWVudChzaWduYXR1cmVfdmVyc2lvbj0nczMnKSkKCiAgICBkZWYgdGVzdF9zaWduYXR1cmVfdjJfY24oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgIFRoaXMgdGVzdCB0ZXN0cyBwcm9jZXNzIHVuZGVyIHNpbmdlZCBoZWFkZXIgd2l0aCBzaWduYXR1cmUgYWxnb3JpdGhtIHYyLgogICAgICAgICBLZXkgY29uc2lzdCBieSBDaGluZXNlIGNoYXJhY3RlcnMuCiAgICAgICAgIDpyZXR1cm46IE5vbmUKICAgICAgICAgIiIiCiAgICAgICAgc2VsZi5fX3Rlc3Rfc2lnbigKICAgICAgICAgICAgczM9Z2V0X2Vudl9zM19jbGllbnQoc2lnbmF0dXJlX3ZlcnNpb249J3MzJyksCiAgICAgICAgICAgIGtleT1LRVlfUFJFRklYICsgcmFuZG9tX3N0cmluZ19jbigxNikpCgogICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3YyX3ByZXNpZ25fZW4oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGhpcyB0ZXN0IHRlc3RzIHByb2Nlc3MgdW5kZXIgcHJlc2lnbmVkIHVybCB3aXRoIHNpZ25hdHVyZSBhbGdvcml0aG0gdjIuCiAgICAgICAgOnJldHVybjoKICAgICAgICAiIiIKICAgICAgICBzZWxmLl9fdGVzdF9wcmVzaWduKAogICAgICAgICAgICBzMz1nZXRfZW52X3MzX2NsaWVudChzaWduYXR1cmVfdmVyc2lvbj0nczMnKSkKCiAgICBkZWYgdGVzdF9zaWduYXR1cmVfdjJfcHJlc2lnbl9jbihzZWxmKToKICAgICAgICAiIiIKICAgICAgICAgVGhpcyB0ZXN0IHRlc3RzIHByb2Nlc3MgdW5kZXIgcHJlc2lnbmVkIHVybCB3aXRoIHNpZ25hdHVyZSBhbGdvcml0aG0gdjIuCiAgICAgICAgIEtleSBjb25zaXN0IGJ5IENoaW5lc2UgY2hhcmFjdGVycy4KPHxmaW1faG9sZXw+CiAgICAgICAgc2VsZi5fX3Rlc3RfcHJlc2lnbigKICAgICAgICAgICAgczM9Z2V0X2Vudl9zM19jbGllbnQoc2lnbmF0dXJlX3ZlcnNpb249J3MzJyksCiAgICAgICAgICAgIGtleT1LRVlfUFJFRklYICsgcmFuZG9tX3N0cmluZ19jbigxNikpCgogICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3Y0X2VuKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRoaXMgdGVzdCB0ZXN0cyBwcm9jZXNzIHVuZGVyIHNpbmdlZCBoZWFkZXIgd2l0aCBzaWduYXR1cmUgYWxnb3JpdGhtIHY0LgogICAgICAgIDpyZXR1cm46IE5vbmUKICAgICAgICAiIiIKICAgICAgICBzZWxmLl9fdGVzdF9zaWduKAogICAgICAgICAgICBzMz1nZXRfZW52X3MzX2NsaWVudCgpKQoKICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV92NF9jbihzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUaGlzIHRlc3QgdGVzdHMgcHJvY2VzcyB1bmRlciBzaW5nZWQgaGVhZGVyIHdpdGggc2lnbmF0dXJlIGFsZ29yaXRobSB2NC4KICAgICAgICBLZXkgY29uc2lzdCBieSBDaGluZXNlIGNoYXJhY3RlcnMuCiAgICAgICAgOnJldHVybjogTm9uZQogICAgICAgICIiIgogICAgICAgIHNlbGYuX190ZXN0X3NpZ24oCiAgICAgICAgICAgIHMzPWdldF9lbnZfczNfY2xpZW50KCksCiAgICAgICAgICAgIGtleT1yYW5kb21fc3RyaW5nX2NuKDE2KSkKCiAgICBkZWYgdGVzdF9zaWduYXR1cmVfdjRfcHJlc2lnbl9lbihzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUaGlzIHRlc3QgdGVzdHMgcHJvY2VzcyB1bmRlciBwcmVzaWduZWQgdXJsIHdpdGggc2lnbmF0dXJlIGFsZ29yaXRobSB2NC4KICAgICAgICA6cmV0dXJuOiBOb25lCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5fX3Rlc3RfcHJlc2lnbigKICAgICAgICAgICAgczM9Z2V0X2Vudl9zM19jbGllbnQoKSkKCiAgICBkZWYgdGVzdF9zaWduYXR1cmVfdjRfcHJlc2lnbl9jbihzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUaGlzIHRlc3QgdGVzdHMgcHJvY2VzcyB1bmRlciBwcmVzaWduZWQgdXJsIHdpdGggc2lnbmF0dXJlIGFsZ29yaXRobSB2NC4KICAgICAgICBLZXkgY29uc2lzdCBieSBDaGluZXNlIGNoYXJhY3RlcnMuCiAgICAgICAgOnJldHVybjogTm9uZQogICAgICAgICIiIgogICAgICAgIHNlbGYuX190ZXN0X3ByZXNpZ24oCiAgICAgICAgICAgIHMzPWdldF9lbnZfczNfY2xpZW50KCksCiAgICAgICAgICAgIGtleT1yYW5kb21fc3RyaW5nX2NuKDE2KSkKCiAgICBkZWYgdGVzdF9zaWduYXR1cmVfdm9sdW1lX2NyZWRlbnRpYWwoc2VsZik6CiAgICAgICAgc2VsZi5fX3Rlc3Rfc2lnbihnZXRfZW52X3MzX2NsaWVudF92b2x1bWVfY3JlZGVudGlhbCgpKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICA6cmV0dXJuOgogICAgICAgICAiIiIKPHxmaW1fZW5kfD4="]
["e7ded26b4b21943a6ad66ea93550eb3c8bd96912-2","e7ded26b4b21943a6ad66ea93550eb3c8bd96912","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMCBUaGUgQ2h1YmFvRlMgQXV0aG9ycy4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiMgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKIyAtKi0gY29kaW5nOiB1dGYtOCAtKi1pCjx8ZmltX2VuZHw+"]
["e7ded26b4b21943a6ad66ea93550eb3c8bd96912-3","e7ded26b4b21943a6ad66ea93550eb3c8bd96912","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCiMgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiMgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKIyAtKi0gY29kaW5nOiB1dGYtOCAtKi1pCmltcG9ydCByZXF1ZXN0cwoKaW1wb3J0IGVudgpmcm9tIGJhc2UgaW1wb3J0IFMzVGVzdENhc2UsIGdldF9lbnZfczNfY2xpZW50LCBnZXRfZW52X3MzX2NsaWVudF92b2x1bWVfY3JlZGVudGlhbApmcm9tIGJhc2UgaW1wb3J0IHJhbmRvbV9zdHJpbmcsIHJhbmRvbV9zdHJpbmdfY24sIHJhbmRvbV9ieXRlcywgY29tcHV0ZV9tZDUKCktFWV9QUkVGSVggPSAndGVzdC1zaWduYXR1cmUtJXMvJyAlIHJhbmRvbV9zdHJpbmcoOCkKCgpjbGFzcyBTaWduYXR1cmVUZXN0KFMzVGVzdENhc2UpOgoKICAgIGRlZiBfX3Rlc3RfcHJlc2lnbihzZWxmLCBzMywga2V5PU5vbmUpOgogICAgICAgICIiIgogICAgICAgIDp0eXBlIHMzOiBib3RvY29yZS5jbGllbnQuUzMKICAgICAgICA6cGFyYW0gczM6IFMzIGNsaWVudCBpbnN0YW5jZQogICAgICAgIDpyZXR1cm46IE5vbmUKICAgICAgICAiIiIKICAgICAgICAjIFRlc3QgaGVhZCBhIGJ1Y2tldCBieSBwcmVzaWduZWQgdXJsLgogICAgICAgIHVybCA9IHMzLmdlbmVyYXRlX3ByZXNpZ25lZF91cmwoJ2hlYWRfYnVja2V0JywgUGFyYW1zPXsnQnVja2V0JzogZW52LkJVQ0tFVH0pCiAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5oZWFkKHVybCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDApCiAgICAgICAgcmVzcG9uc2UuY2xvc2UoKQoKICAgICAgICAjIFRlc3QgaGVhZCBhIGJ1Y2tldCBieSBleHBpcmVkIHByZXNpZ25lZCB1cmwuCiAgICAgICAgdXJsID0gczMuZ2VuZXJhdGVfcHJlc2lnbmVkX3VybCgnaGVhZF9idWNrZXQnLCBQYXJhbXM9eydCdWNrZXQnOiBlbnYuQlVDS0VUfSwgRXhwaXJlc0luPS0xKQogICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMuaGVhZCh1cmwpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgNDAzKQogICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKCiAgICAgICAgIyBWYXJzIGZvciBmb2xsb3dlZCB0ZXN0cwogICAgICAgIGlmIGtleSBpcyBOb25lOgogICAgICAgICAgICBrZXkgPSBLRVlfUFJFRklYICsgcmFuZG9tX3N0cmluZygxNikKICAgICAgICBib2R5ID0gcmFuZG9tX2J5dGVzKDEwMjQpCiAgICAgICAgZXhwZWN0X21kNSA9IGNvbXB1dGVfbWQ1KGJvZHkpCgogICAgICAgICMgVGVzdCBwdXQgYW4gb2JqZWN0IGJ5IHByZXNpZ25lZCB1cmwuCiAgICAgICAgdXJsID0gczMuZ2VuZXJhdGVfcHJlc2lnbmVkX3VybCgncHV0X29iamVjdCcsIFBhcmFtcz17J0J1Y2tldCc6IGVudi5CVUNLRVQsICdLZXknOiBrZXl9KQogICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMucHV0KHVybD11cmwsIGRhdGE9Ym9keSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDApCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdFdGFnJyBpbiByZXNwb25zZS5oZWFkZXJzKQogICAgICAgIGV4cGVjdF9ldGFnID0gcmVzcG9uc2UuaGVhZGVyc1snRVRhZyddCiAgICAgICAgcmVzcG9uc2UuY2xvc2UoKQoKICAgICAgICAjIFRlc3QgaGVhZCBhbiBvYmplY3QgYnkgcHJlc2lnbmVkIHVybC4KICAgICAgICB1cmwgPSBzMy5nZW5lcmF0ZV9wcmVzaWduZWRfdXJsKCdoZWFkX29iamVjdCcsIFBhcmFtcz17J0J1Y2tldCc6IGVudi5CVUNLRVQsICdLZXknOiBrZXl9KQogICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMuaGVhZCh1cmwpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRXRhZycgaW4gcmVzcG9uc2UuaGVhZGVycykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLmhlYWRlcnNbJ0VUYWcnXSwgZXhwZWN0X2V0YWcpCiAgICAgICAgcmVzcG9uc2UuY2xvc2UoKQoKICAgICAgICAjIFRlc3QgZ2V0IGFuIG9iamVjdCBieSBwcmVzaWduZWQgdXJsLgogICAgICAgIHVybCA9IHMzLmdlbmVyYXRlX3ByZXNpZ25lZF91cmwoJ2dldF9vYmplY3QnLCBQYXJhbXM9eydCdWNrZXQnOiBlbnYuQlVDS0VULCAnS2V5Jzoga2V5fSkKICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmdldCh1cmwpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRXRhZycgaW4gcmVzcG9uc2UuaGVhZGVycykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLmhlYWRlcnNbJ0VUYWcnXSwgZXhwZWN0X2V0YWcpCiAgICAgICAgYWN0dWFsX21kNSA9IGNvbXB1dGVfbWQ1KHJlc3BvbnNlLmNvbnRlbnQpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWxfbWQ1LCBleHBlY3RfbWQ1KQogICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKCiAgICAgICAgIyBUZXN0IGRlbGV0ZSBhbiBvYmplY3QgYnkgcHJlc2lnbmVkIHVybC4KICAgICAgICB1cmwgPSBzMy5nZW5lcmF0ZV9wcmVzaWduZWRfdXJsKCdkZWxldGVfb2JqZWN0JywgUGFyYW1zPXsnQnVja2V0JzogZW52LkJVQ0tFVCwgJ0tleSc6IGtleX0pCiAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5kZWxldGUodXJsKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwNCkKICAgICAgICByZXNwb25zZS5jbG9zZSgpCgogICAgICAgICMgQ2hlY2sgZGVsZXRpb24gcmVzdWx0CiAgICAgICAgdXJsID0gczMuZ2VuZXJhdGVfcHJlc2lnbmVkX3VybCgnaGVhZF9vYmplY3QnLCBQYXJhbXM9eydCdWNrZXQnOiBlbnYuQlVDS0VULCAnS2V5Jzoga2V5fSkKICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmhlYWQodXJsKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDQwNCkKICAgICAgICByZXNwb25zZS5jbG9zZSgpCgogICAgICAgICMgUmVtb3ZlIGtleSBwcmVmaXgKICAgICAgICB1cmwgPSBzMy5nZW5lcmF0ZV9wcmVzaWduZWRfdXJsKCdkZWxldGVfb2JqZWN0JywgUGFyYW1zPXsnQnVja2V0JzogZW52LkJVQ0tFVCwgJ0tleSc6IEtFWV9QUkVGSVh9KQogICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMuZGVsZXRlKHVybCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDQpCiAgICAgICAgcmVzcG9uc2UuY2xvc2UoKQoKICAgIGRlZiBfX3Rlc3Rfc2lnbihzZWxmLCBzMywga2V5PU5vbmUpOgogICAgICAgICIiIgogICAgICAgIDp0eXBlIHMzOiBib3RvY29yZS5jbGllbnQuUzMKICAgICAgICA6cGFyYW0gczM6IFMzIGNsaWVudCBpbnN0YW5jZQogICAgICAgIDpyZXR1cm46IE5vbmUKICAgICAgICAiIiIKICAgICAgICAjIFRlc3QgaGVhZCBhIGJ1Y2tldAogICAgICAgIHNlbGYuYXNzZXJ0X2hlYWRfYnVja2V0X3Jlc3VsdCgKICAgICAgICAgICAgcmVzdWx0PXMzLmhlYWRfYnVja2V0KEJ1Y2tldD1lbnYuQlVDS0VUKSkKCiAgICAgICAgIyBWYXJzIGZvciBmb2xsb3dlZCB0ZXN0cwogICAgICAgIGlmIGtleSBpcyBOb25lOgogICAgICAgICAgICBrZXkgPSBLRVlfUFJFRklYICsgcmFuZG9tX3N0cmluZygxNikKICAgICAgICBib2R5ID0gcmFuZG9tX2J5dGVzKDEwMjQpCiAgICAgICAgZXhwZWN0X21kNSA9IGNvbXB1dGVfbWQ1KGJvZHkpCgogICAgICAgICMgVGVzdCBwdXQgYW4gb2JqZWN0LgogICAgICAgIHNlbGYuYXNzZXJ0X3B1dF9vYmplY3RfcmVzdWx0KAogICAgICAgICAgICByZXN1bHQ9czMucHV0X29iamVjdChCdWNrZXQ9ZW52LkJVQ0tFVCwgS2V5PWtleSwgQm9keT1ib2R5KSwKICAgICAgICAgICAgZXRhZz1leHBlY3RfbWQ1KQoKICAgICAgICAjIFRlc3QgaGVhZCBhbiBvYmplY3QuCiAgICAgICAgc2VsZi5hc3NlcnRfaGVhZF9vYmplY3RfcmVzdWx0KAogICAgICAgICAgICByZXN1bHQ9czMuaGVhZF9vYmplY3QoQnVja2V0PWVudi5CVUNLRVQsIEtleT1rZXkpLAogICAgICAgICAgICBldGFnPWV4cGVjdF9tZDUpCgogICAgICAgICMgVGVzdCBnZXQgYW4gb2JqZWN0LgogICAgICAgIHNlbGYuYXNzZXJ0X2dldF9vYmplY3RfcmVzdWx0KAogICAgICAgICAgICByZXN1bHQ9czMuZ2V0X29iamVjdChCdWNrZXQ9ZW52LkJVQ0tFVCwgS2V5PWtleSksCiAgICAgICAgICAgIGV0YWc9ZXhwZWN0X21kNSwKICAgICAgICAgICAgY29udGVudF9sZW5ndGg9MTAyNCwKICAgICAgICAgICAgYm9keV9tZDU9ZXhwZWN0X21kNSkKCiAgICAgICAgIyBUZXN0IGRlbGV0ZSBhbiBvYmplY3QuCiAgICAgICAgc2VsZi5hc3NlcnRfZGVsZXRlX29iamVjdF9yZXN1bHQoCiAgICAgICAgICAgIHJlc3VsdD1zMy5kZWxldGVfb2JqZWN0KEJ1Y2tldD1lbnYuQlVDS0VULCBLZXk9a2V5KSkKCiAgICAgICAgIyBSZW1vdmUga2V5IHByZWZpeC4KICAgICAgICBzZWxmLmFzc2VydF9kZWxldGVfb2JqZWN0X3Jlc3VsdCgKICAgICAgICAgICAgcmVzdWx0PXMzLmRlbGV0ZV9vYmplY3QoQnVja2V0PWVudi5CVUNLRVQsIEtleT1LRVlfUFJFRklYKSkKCiAgICBkZWYgdGVzdF9zaWduYXR1cmVfdjJfZW4oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGhpcyB0ZXN0IHRlc3RzIHByb2Nlc3MgdW5kZXIgc2luZ2VkIGhlYWRlciB3aXRoIHNpZ25hdHVyZSBhbGdvcml0aG0gdjIuCiAgICAgICAgOnJldHVybjogTm9uZQogICAgICAgICIiIgogICAgICAgIHNlbGYuX190ZXN0X3NpZ24oCiAgICAgICAgICAgIHMzPWdldF9lbnZfczNfY2xpZW50KHNpZ25hdHVyZV92ZXJzaW9uPSdzMycpKQoKICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV92Ml9jbihzZWxmKToKICAgICAgICAiIiIKICAgICAgICAgVGhpcyB0ZXN0IHRlc3RzIHByb2Nlc3MgdW5kZXIgc2luZ2VkIGhlYWRlciB3aXRoIHNpZ25hdHVyZSBhbGdvcml0aG0gdjIuCiAgICAgICAgIEtleSBjb25zaXN0IGJ5IENoaW5lc2UgY2hhcmFjdGVycy4KICAgICAgICAgOnJldHVybjogTm9uZQogICAgICAgICAiIiIKICAgICAgICBzZWxmLl9fdGVzdF9zaWduKAogICAgICAgICAgICBzMz1nZXRfZW52X3MzX2NsaWVudChzaWduYXR1cmVfdmVyc2lvbj0nczMnKSwKICAgICAgICAgICAga2V5PUtFWV9QUkVGSVggKyByYW5kb21fc3RyaW5nX2NuKDE2KSkKCiAgICBkZWYgdGVzdF9zaWduYXR1cmVfdjJfcHJlc2lnbl9lbihzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUaGlzIHRlc3QgdGVzdHMgcHJvY2VzcyB1bmRlciBwcmVzaWduZWQgdXJsIHdpdGggc2lnbmF0dXJlIGFsZ29yaXRobSB2Mi4KICAgICAgICA6cmV0dXJuOgogICAgICAgICIiIgogICAgICAgIHNlbGYuX190ZXN0X3ByZXNpZ24oCiAgICAgICAgICAgIHMzPWdldF9lbnZfczNfY2xpZW50KHNpZ25hdHVyZV92ZXJzaW9uPSdzMycpKQoKICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV92Ml9wcmVzaWduX2NuKHNlbGYpOgogICAgICAgICIiIgogICAgICAgICBUaGlzIHRlc3QgdGVzdHMgcHJvY2VzcyB1bmRlciBwcmVzaWduZWQgdXJsIHdpdGggc2lnbmF0dXJlIGFsZ29yaXRobSB2Mi4KICAgICAgICAgS2V5IGNvbnNpc3QgYnkgQ2hpbmVzZSBjaGFyYWN0ZXJzLgogICAgICAgICA6cmV0dXJuOgogICAgICAgICAiIiIKICAgICAgICBzZWxmLl9fdGVzdF9wcmVzaWduKAogICAgICAgICAgICBzMz1nZXRfZW52X3MzX2NsaWVudChzaWduYXR1cmVfdmVyc2lvbj0nczMnKSwKICAgICAgICAgICAga2V5PUtFWV9QUkVGSVggKyByYW5kb21fc3RyaW5nX2NuKDE2KSkKCiAgICBkZWYgdGVzdF9zaWduYXR1cmVfdjRfZW4oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGhpcyB0ZXN0IHRlc3RzIHByb2Nlc3MgdW5kZXIgc2luZ2VkIGhlYWRlciB3aXRoIHNpZ25hdHVyZSBhbGdvcml0aG0gdjQuCiAgICAgICAgOnJldHVybjogTm9uZQogICAgICAgICIiIgogICAgICAgIHNlbGYuX190ZXN0X3NpZ24oCiAgICAgICAgICAgIHMzPWdldF9lbnZfczNfY2xpZW50KCkpCgogICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3Y0X2NuKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRoaXMgdGVzdCB0ZXN0cyBwcm9jZXNzIHVuZGVyIHNpbmdlZCBoZWFkZXIgd2l0aCBzaWduYXR1cmUgYWxnb3JpdGhtIHY0LgogICAgICAgIEtleSBjb25zaXN0IGJ5IENoaW5lc2UgY2hhcmFjdGVycy4KICAgICAgICA6cmV0dXJuOiBOb25lCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5fX3Rlc3Rfc2lnbigKICAgICAgICAgICAgczM9Z2V0X2Vudl9zM19jbGllbnQoKSwKICAgICAgICAgICAga2V5PXJhbmRvbV9zdHJpbmdfY24oMTYpKQoKICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV92NF9wcmVzaWduX2VuKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRoaXMgdGVzdCB0ZXN0cyBwcm9jZXNzIHVuZGVyIHByZXNpZ25lZCB1cmwgd2l0aCBzaWduYXR1cmUgYWxnb3JpdGhtIHY0LgogICAgICAgIDpyZXR1cm46IE5vbmUKICAgICAgICAiIiIKICAgICAgICBzZWxmLl9fdGVzdF9wcmVzaWduKAogICAgICAgICAgICBzMz1nZXRfZW52X3MzX2NsaWVudCgpKQoKICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV92NF9wcmVzaWduX2NuKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRoaXMgdGVzdCB0ZXN0cyBwcm9jZXNzIHVuZGVyIHByZXNpZ25lZCB1cmwgd2l0aCBzaWduYXR1cmUgYWxnb3JpdGhtIHY0LgogICAgICAgIEtleSBjb25zaXN0IGJ5IENoaW5lc2UgY2hhcmFjdGVycy4KICAgICAgICA6cmV0dXJuOiBOb25lCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5fX3Rlc3RfcHJlc2lnbigKICAgICAgICAgICAgczM9Z2V0X2Vudl9zM19jbGllbnQoKSwKICAgICAgICAgICAga2V5PXJhbmRvbV9zdHJpbmdfY24oMTYpKQoKICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV92b2x1bWVfY3JlZGVudGlhbChzZWxmKToKICAgICAgICBzZWxmLl9fdGVzdF9zaWduKGdldF9lbnZfczNfY2xpZW50X3ZvbHVtZV9jcmVkZW50aWFsKCkpCjx8ZmltX3N1ZmZpeHw+CiMgQ29weXJpZ2h0IDIwMjAgVGhlIENodWJhb0ZTIEF1dGhvcnMuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCjx8ZmltX2VuZHw+"]
["e7ded26b4b21943a6ad66ea93550eb3c8bd96912-4","e7ded26b4b21943a6ad66ea93550eb3c8bd96912","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMCBUaGUgQ2h1YmFvRlMgQXV0aG9ycy4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgojIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZwojIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiMgLSotIGNvZGluZzogdXRmLTggLSotaQppbXBvcnQgcmVxdWVzdHMKCmltcG9ydCBlbnYKZnJvbSBiYXNlIGltcG9ydCBTM1Rlc3RDYXNlLCBnZXRfZW52X3MzX2NsaWVudCwgZ2V0X2Vudl9zM19jbGllbnRfdm9sdW1lX2NyZWRlbnRpYWwKZnJvbSBiYXNlIGltcG9ydCByYW5kb21fc3RyaW5nLCByYW5kb21fc3RyaW5nX2NuLCByYW5kb21fYnl0ZXMsIGNvbXB1dGVfbWQ1CgpLRVlfUFJFRklYID0gJ3Rlc3Qtc2lnbmF0dXJlLSVzLycgJSByYW5kb21fc3RyaW5nKDgpCgoKY2xhc3MgU2lnbmF0dXJlVGVzdChTM1Rlc3RDYXNlKToKCiAgICBkZWYgX190ZXN0X3ByZXNpZ24oc2VsZiwgczMsIGtleT1Ob25lKToKICAgICAgICAiIiIKICAgICAgICA6dHlwZSBzMzogYm90b2NvcmUuY2xpZW50LlMzCiAgICAgICAgOnBhcmFtIHMzOiBTMyBjbGllbnQgaW5zdGFuY2UKICAgICAgICA6cmV0dXJuOiBOb25lCiAgICAgICAgIiIiCiAgICAgICAgIyBUZXN0IGhlYWQgYSBidWNrZXQgYnkgcHJlc2lnbmVkIHVybC4KICAgICAgICB1cmwgPSBzMy5nZW5lcmF0ZV9wcmVzaWduZWRfdXJsKCdoZWFkX2J1Y2tldCcsIFBhcmFtcz17J0J1Y2tldCc6IGVudi5CVUNLRVR9KQogICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMuaGVhZCh1cmwpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQogICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKCiAgICAgICAgIyBUZXN0IGhlYWQgYSBidWNrZXQgYnkgZXhwaXJlZCBwcmVzaWduZWQgdXJsLgogICAgICAgIHVybCA9IHMzLmdlbmVyYXRlX3ByZXNpZ25lZF91cmwoJ2hlYWRfYnVja2V0JywgUGFyYW1zPXsnQnVja2V0JzogZW52LkJVQ0tFVH0sIEV4cGlyZXNJbj0tMSkKICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmhlYWQodXJsKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDQwMykKICAgICAgICByZXNwb25zZS5jbG9zZSgpCgogICAgICAgICMgVmFycyBmb3IgZm9sbG93ZWQgdGVzdHMKICAgICAgICBpZiBrZXkgaXMgTm9uZToKICAgICAgICAgICAga2V5ID0gS0VZX1BSRUZJWCArIHJhbmRvbV9zdHJpbmcoMTYpCiAgICAgICAgYm9keSA9IHJhbmRvbV9ieXRlcygxMDI0KQogICAgICAgIGV4cGVjdF9tZDUgPSBjb21wdXRlX21kNShib2R5KQoKICAgICAgICAjIFRlc3QgcHV0IGFuIG9iamVjdCBieSBwcmVzaWduZWQgdXJsLgogICAgICAgIHVybCA9IHMzLmdlbmVyYXRlX3ByZXNpZ25lZF91cmwoJ3B1dF9vYmplY3QnLCBQYXJhbXM9eydCdWNrZXQnOiBlbnYuQlVDS0VULCAnS2V5Jzoga2V5fSkKICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLnB1dCh1cmw9dXJsLCBkYXRhPWJvZHkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRXRhZycgaW4gcmVzcG9uc2UuaGVhZGVycykKICAgICAgICBleHBlY3RfZXRhZyA9IHJlc3BvbnNlLmhlYWRlcnNbJ0VUYWcnXQogICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKCiAgICAgICAgIyBUZXN0IGhlYWQgYW4gb2JqZWN0IGJ5IHByZXNpZ25lZCB1cmwuCiAgICAgICAgdXJsID0gczMuZ2VuZXJhdGVfcHJlc2lnbmVkX3VybCgnaGVhZF9vYmplY3QnLCBQYXJhbXM9eydCdWNrZXQnOiBlbnYuQlVDS0VULCAnS2V5Jzoga2V5fSkKICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmhlYWQodXJsKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwMCkKICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0V0YWcnIGluIHJlc3BvbnNlLmhlYWRlcnMpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5oZWFkZXJzWydFVGFnJ10sIGV4cGVjdF9ldGFnKQogICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKCiAgICAgICAgIyBUZXN0IGdldCBhbiBvYmplY3QgYnkgcHJlc2lnbmVkIHVybC4KICAgICAgICB1cmwgPSBzMy5nZW5lcmF0ZV9wcmVzaWduZWRfdXJsKCdnZXRfb2JqZWN0JywgUGFyYW1zPXsnQnVja2V0JzogZW52LkJVQ0tFVCwgJ0tleSc6IGtleX0pCiAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5nZXQodXJsKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwMCkKICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0V0YWcnIGluIHJlc3BvbnNlLmhlYWRlcnMpCjx8ZmltX2hvbGV8PgoKICAgICAgICAjIFRlc3QgZGVsZXRlIGFuIG9iamVjdCBieSBwcmVzaWduZWQgdXJsLgogICAgICAgIHVybCA9IHMzLmdlbmVyYXRlX3ByZXNpZ25lZF91cmwoJ2RlbGV0ZV9vYmplY3QnLCBQYXJhbXM9eydCdWNrZXQnOiBlbnYuQlVDS0VULCAnS2V5Jzoga2V5fSkKICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmRlbGV0ZSh1cmwpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjA0KQogICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKCiAgICAgICAgIyBDaGVjayBkZWxldGlvbiByZXN1bHQKICAgICAgICB1cmwgPSBzMy5nZW5lcmF0ZV9wcmVzaWduZWRfdXJsKCdoZWFkX29iamVjdCcsIFBhcmFtcz17J0J1Y2tldCc6IGVudi5CVUNLRVQsICdLZXknOiBrZXl9KQogICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMuaGVhZCh1cmwpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgNDA0KQogICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKCiAgICAgICAgIyBSZW1vdmUga2V5IHByZWZpeAogICAgICAgIHVybCA9IHMzLmdlbmVyYXRlX3ByZXNpZ25lZF91cmwoJ2RlbGV0ZV9vYmplY3QnLCBQYXJhbXM9eydCdWNrZXQnOiBlbnYuQlVDS0VULCAnS2V5JzogS0VZX1BSRUZJWH0pCiAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5kZWxldGUodXJsKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwNCkKICAgICAgICByZXNwb25zZS5jbG9zZSgpCgogICAgZGVmIF9fdGVzdF9zaWduKHNlbGYsIHMzLCBrZXk9Tm9uZSk6CiAgICAgICAgIiIiCiAgICAgICAgOnR5cGUgczM6IGJvdG9jb3JlLmNsaWVudC5TMwogICAgICAgIDpwYXJhbSBzMzogUzMgY2xpZW50IGluc3RhbmNlCiAgICAgICAgOnJldHVybjogTm9uZQogICAgICAgICIiIgogICAgICAgICMgVGVzdCBoZWFkIGEgYnVja2V0CiAgICAgICAgc2VsZi5hc3NlcnRfaGVhZF9idWNrZXRfcmVzdWx0KAogICAgICAgICAgICByZXN1bHQ9czMuaGVhZF9idWNrZXQoQnVja2V0PWVudi5CVUNLRVQpKQoKICAgICAgICAjIFZhcnMgZm9yIGZvbGxvd2VkIHRlc3RzCiAgICAgICAgaWYga2V5IGlzIE5vbmU6CiAgICAgICAgICAgIGtleSA9IEtFWV9QUkVGSVggKyByYW5kb21fc3RyaW5nKDE2KQogICAgICAgIGJvZHkgPSByYW5kb21fYnl0ZXMoMTAyNCkKICAgICAgICBleHBlY3RfbWQ1ID0gY29tcHV0ZV9tZDUoYm9keSkKCiAgICAgICAgIyBUZXN0IHB1dCBhbiBvYmplY3QuCiAgICAgICAgc2VsZi5hc3NlcnRfcHV0X29iamVjdF9yZXN1bHQoCiAgICAgICAgICAgIHJlc3VsdD1zMy5wdXRfb2JqZWN0KEJ1Y2tldD1lbnYuQlVDS0VULCBLZXk9a2V5LCBCb2R5PWJvZHkpLAogICAgICAgICAgICBldGFnPWV4cGVjdF9tZDUpCgogICAgICAgICMgVGVzdCBoZWFkIGFuIG9iamVjdC4KICAgICAgICBzZWxmLmFzc2VydF9oZWFkX29iamVjdF9yZXN1bHQoCiAgICAgICAgICAgIHJlc3VsdD1zMy5oZWFkX29iamVjdChCdWNrZXQ9ZW52LkJVQ0tFVCwgS2V5PWtleSksCiAgICAgICAgICAgIGV0YWc9ZXhwZWN0X21kNSkKCiAgICAgICAgIyBUZXN0IGdldCBhbiBvYmplY3QuCiAgICAgICAgc2VsZi5hc3NlcnRfZ2V0X29iamVjdF9yZXN1bHQoCiAgICAgICAgICAgIHJlc3VsdD1zMy5nZXRfb2JqZWN0KEJ1Y2tldD1lbnYuQlVDS0VULCBLZXk9a2V5KSwKICAgICAgICAgICAgZXRhZz1leHBlY3RfbWQ1LAogICAgICAgICAgICBjb250ZW50X2xlbmd0aD0xMDI0LAogICAgICAgICAgICBib2R5X21kNT1leHBlY3RfbWQ1KQoKICAgICAgICAjIFRlc3QgZGVsZXRlIGFuIG9iamVjdC4KICAgICAgICBzZWxmLmFzc2VydF9kZWxldGVfb2JqZWN0X3Jlc3VsdCgKICAgICAgICAgICAgcmVzdWx0PXMzLmRlbGV0ZV9vYmplY3QoQnVja2V0PWVudi5CVUNLRVQsIEtleT1rZXkpKQoKICAgICAgICAjIFJlbW92ZSBrZXkgcHJlZml4LgogICAgICAgIHNlbGYuYXNzZXJ0X2RlbGV0ZV9vYmplY3RfcmVzdWx0KAogICAgICAgICAgICByZXN1bHQ9czMuZGVsZXRlX29iamVjdChCdWNrZXQ9ZW52LkJVQ0tFVCwgS2V5PUtFWV9QUkVGSVgpKQoKICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV92Ml9lbihzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUaGlzIHRlc3QgdGVzdHMgcHJvY2VzcyB1bmRlciBzaW5nZWQgaGVhZGVyIHdpdGggc2lnbmF0dXJlIGFsZ29yaXRobSB2Mi4KICAgICAgICA6cmV0dXJuOiBOb25lCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5fX3Rlc3Rfc2lnbigKICAgICAgICAgICAgczM9Z2V0X2Vudl9zM19jbGllbnQoc2lnbmF0dXJlX3ZlcnNpb249J3MzJykpCgogICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3YyX2NuKHNlbGYpOgogICAgICAgICIiIgogICAgICAgICBUaGlzIHRlc3QgdGVzdHMgcHJvY2VzcyB1bmRlciBzaW5nZWQgaGVhZGVyIHdpdGggc2lnbmF0dXJlIGFsZ29yaXRobSB2Mi4KICAgICAgICAgS2V5IGNvbnNpc3QgYnkgQ2hpbmVzZSBjaGFyYWN0ZXJzLgogICAgICAgICA6cmV0dXJuOiBOb25lCiAgICAgICAgICIiIgogICAgICAgIHNlbGYuX190ZXN0X3NpZ24oCiAgICAgICAgICAgIHMzPWdldF9lbnZfczNfY2xpZW50KHNpZ25hdHVyZV92ZXJzaW9uPSdzMycpLAogICAgICAgICAgICBrZXk9S0VZX1BSRUZJWCArIHJhbmRvbV9zdHJpbmdfY24oMTYpKQoKICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV92Ml9wcmVzaWduX2VuKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRoaXMgdGVzdCB0ZXN0cyBwcm9jZXNzIHVuZGVyIHByZXNpZ25lZCB1cmwgd2l0aCBzaWduYXR1cmUgYWxnb3JpdGhtIHYyLgogICAgICAgIDpyZXR1cm46CiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5fX3Rlc3RfcHJlc2lnbigKICAgICAgICAgICAgczM9Z2V0X2Vudl9zM19jbGllbnQoc2lnbmF0dXJlX3ZlcnNpb249J3MzJykpCgogICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3YyX3ByZXNpZ25fY24oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgIFRoaXMgdGVzdCB0ZXN0cyBwcm9jZXNzIHVuZGVyIHByZXNpZ25lZCB1cmwgd2l0aCBzaWduYXR1cmUgYWxnb3JpdGhtIHYyLgogICAgICAgICBLZXkgY29uc2lzdCBieSBDaGluZXNlIGNoYXJhY3RlcnMuCiAgICAgICAgIDpyZXR1cm46CiAgICAgICAgICIiIgogICAgICAgIHNlbGYuX190ZXN0X3ByZXNpZ24oCiAgICAgICAgICAgIHMzPWdldF9lbnZfczNfY2xpZW50KHNpZ25hdHVyZV92ZXJzaW9uPSdzMycpLAogICAgICAgICAgICBrZXk9S0VZX1BSRUZJWCArIHJhbmRvbV9zdHJpbmdfY24oMTYpKQoKICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV92NF9lbihzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUaGlzIHRlc3QgdGVzdHMgcHJvY2VzcyB1bmRlciBzaW5nZWQgaGVhZGVyIHdpdGggc2lnbmF0dXJlIGFsZ29yaXRobSB2NC4KICAgICAgICA6cmV0dXJuOiBOb25lCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5fX3Rlc3Rfc2lnbigKICAgICAgICAgICAgczM9Z2V0X2Vudl9zM19jbGllbnQoKSkKCiAgICBkZWYgdGVzdF9zaWduYXR1cmVfdjRfY24oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGhpcyB0ZXN0IHRlc3RzIHByb2Nlc3MgdW5kZXIgc2luZ2VkIGhlYWRlciB3aXRoIHNpZ25hdHVyZSBhbGdvcml0aG0gdjQuCiAgICAgICAgS2V5IGNvbnNpc3QgYnkgQ2hpbmVzZSBjaGFyYWN0ZXJzLgogICAgICAgIDpyZXR1cm46IE5vbmUKICAgICAgICAiIiIKICAgICAgICBzZWxmLl9fdGVzdF9zaWduKAogICAgICAgICAgICBzMz1nZXRfZW52X3MzX2NsaWVudCgpLAogICAgICAgICAgICBrZXk9cmFuZG9tX3N0cmluZ19jbigxNikpCgogICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3Y0X3ByZXNpZ25fZW4oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGhpcyB0ZXN0IHRlc3RzIHByb2Nlc3MgdW5kZXIgcHJlc2lnbmVkIHVybCB3aXRoIHNpZ25hdHVyZSBhbGdvcml0aG0gdjQuCiAgICAgICAgOnJldHVybjogTm9uZQogICAgICAgICIiIgogICAgICAgIHNlbGYuX190ZXN0X3ByZXNpZ24oCiAgICAgICAgICAgIHMzPWdldF9lbnZfczNfY2xpZW50KCkpCgogICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3Y0X3ByZXNpZ25fY24oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGhpcyB0ZXN0IHRlc3RzIHByb2Nlc3MgdW5kZXIgcHJlc2lnbmVkIHVybCB3aXRoIHNpZ25hdHVyZSBhbGdvcml0aG0gdjQuCiAgICAgICAgS2V5IGNvbnNpc3QgYnkgQ2hpbmVzZSBjaGFyYWN0ZXJzLgogICAgICAgIDpyZXR1cm46IE5vbmUKICAgICAgICAiIiIKICAgICAgICBzZWxmLl9fdGVzdF9wcmVzaWduKAogICAgICAgICAgICBzMz1nZXRfZW52X3MzX2NsaWVudCgpLAogICAgICAgICAgICBrZXk9cmFuZG9tX3N0cmluZ19jbigxNikpCgogICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3ZvbHVtZV9jcmVkZW50aWFsKHNlbGYpOgogICAgICAgIHNlbGYuX190ZXN0X3NpZ24oZ2V0X2Vudl9zM19jbGllbnRfdm9sdW1lX2NyZWRlbnRpYWwoKSkKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLmhlYWRlcnNbJ0VUYWcnXSwgZXhwZWN0X2V0YWcpCiAgICAgICAgYWN0dWFsX21kNSA9IGNvbXB1dGVfbWQ1KHJlc3BvbnNlLmNvbnRlbnQpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWxfbWQ1LCBleHBlY3RfbWQ1KQogICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKPHxmaW1fZW5kfD4="]
["e7ded26b4b21943a6ad66ea93550eb3c8bd96912-5","e7ded26b4b21943a6ad66ea93550eb3c8bd96912","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMCBUaGUgQ2h1YmFvRlMgQXV0aG9ycy4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgojIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZwojIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiMgLSotIGNvZGluZzogdXRmLTggLSotaQppbXBvcnQgcmVxdWVzdHMKCmltcG9ydCBlbnYKZnJvbSBiYXNlIGltcG9ydCBTM1Rlc3RDYXNlLCBnZXRfZW52X3MzX2NsaWVudCwgZ2V0X2Vudl9zM19jbGllbnRfdm9sdW1lX2NyZWRlbnRpYWwKZnJvbSBiYXNlIGltcG9ydCByYW5kb21fc3RyaW5nLCByYW5kb21fc3RyaW5nX2NuLCByYW5kb21fYnl0ZXMsIGNvbXB1dGVfbWQ1CgpLRVlfUFJFRklYID0gJ3Rlc3Qtc2lnbmF0dXJlLSVzLycgJSByYW5kb21fc3RyaW5nKDgpCgoKY2xhc3MgU2lnbmF0dXJlVGVzdChTM1Rlc3RDYXNlKToKCiAgICBkZWYgX190ZXN0X3ByZXNpZ24oc2VsZiwgczMsIGtleT1Ob25lKToKICAgICAgICAiIiIKICAgICAgICA6dHlwZSBzMzogYm90b2NvcmUuY2xpZW50LlMzCiAgICAgICAgOnBhcmFtIHMzOiBTMyBjbGllbnQgaW5zdGFuY2UKICAgICAgICA6cmV0dXJuOiBOb25lCiAgICAgICAgIiIiCiAgICAgICAgIyBUZXN0IGhlYWQgYSBidWNrZXQgYnkgcHJlc2lnbmVkIHVybC4KICAgICAgICB1cmwgPSBzMy5nZW5lcmF0ZV9wcmVzaWduZWRfdXJsKCdoZWFkX2J1Y2tldCcsIFBhcmFtcz17J0J1Y2tldCc6IGVudi5CVUNLRVR9KQogICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMuaGVhZCh1cmwpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQogICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKCiAgICAgICAgIyBUZXN0IGhlYWQgYSBidWNrZXQgYnkgZXhwaXJlZCBwcmVzaWduZWQgdXJsLgogICAgICAgIHVybCA9IHMzLmdlbmVyYXRlX3ByZXNpZ25lZF91cmwoJ2hlYWRfYnVja2V0JywgUGFyYW1zPXsnQnVja2V0JzogZW52LkJVQ0tFVH0sIEV4cGlyZXNJbj0tMSkKICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmhlYWQodXJsKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDQwMykKICAgICAgICByZXNwb25zZS5jbG9zZSgpCgogICAgICAgICMgVmFycyBmb3IgZm9sbG93ZWQgdGVzdHMKICAgICAgICBpZiBrZXkgaXMgTm9uZToKICAgICAgICAgICAga2V5ID0gS0VZX1BSRUZJWCArIHJhbmRvbV9zdHJpbmcoMTYpCiAgICAgICAgYm9keSA9IHJhbmRvbV9ieXRlcygxMDI0KQogICAgICAgIGV4cGVjdF9tZDUgPSBjb21wdXRlX21kNShib2R5KQoKICAgICAgICAjIFRlc3QgcHV0IGFuIG9iamVjdCBieSBwcmVzaWduZWQgdXJsLgogICAgICAgIHVybCA9IHMzLmdlbmVyYXRlX3ByZXNpZ25lZF91cmwoJ3B1dF9vYmplY3QnLCBQYXJhbXM9eydCdWNrZXQnOiBlbnYuQlVDS0VULCAnS2V5Jzoga2V5fSkKICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLnB1dCh1cmw9dXJsLCBkYXRhPWJvZHkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRXRhZycgaW4gcmVzcG9uc2UuaGVhZGVycykKICAgICAgICBleHBlY3RfZXRhZyA9IHJlc3BvbnNlLmhlYWRlcnNbJ0VUYWcnXQogICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKCiAgICAgICAgIyBUZXN0IGhlYWQgYW4gb2JqZWN0IGJ5IHByZXNpZ25lZCB1cmwuCiAgICAgICAgdXJsID0gczMuZ2VuZXJhdGVfcHJlc2lnbmVkX3VybCgnaGVhZF9vYmplY3QnLCBQYXJhbXM9eydCdWNrZXQnOiBlbnYuQlVDS0VULCAnS2V5Jzoga2V5fSkKICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmhlYWQodXJsKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwMCkKICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0V0YWcnIGluIHJlc3BvbnNlLmhlYWRlcnMpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5oZWFkZXJzWydFVGFnJ10sIGV4cGVjdF9ldGFnKQogICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKCiAgICAgICAgIyBUZXN0IGdldCBhbiBvYmplY3QgYnkgcHJlc2lnbmVkIHVybC4KICAgICAgICB1cmwgPSBzMy5nZW5lcmF0ZV9wcmVzaWduZWRfdXJsKCdnZXRfb2JqZWN0JywgUGFyYW1zPXsnQnVja2V0JzogZW52LkJVQ0tFVCwgJ0tleSc6IGtleX0pCiAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5nZXQodXJsKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwMCkKICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0V0YWcnIGluIHJlc3BvbnNlLmhlYWRlcnMpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5oZWFkZXJzWydFVGFnJ10sIGV4cGVjdF9ldGFnKQogICAgICAgIGFjdHVhbF9tZDUgPSBjb21wdXRlX21kNShyZXNwb25zZS5jb250ZW50KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX21kNSwgZXhwZWN0X21kNSkKICAgICAgICByZXNwb25zZS5jbG9zZSgpCgogICAgICAgICMgVGVzdCBkZWxldGUgYW4gb2JqZWN0IGJ5IHByZXNpZ25lZCB1cmwuCiAgICAgICAgdXJsID0gczMuZ2VuZXJhdGVfcHJlc2lnbmVkX3VybCgnZGVsZXRlX29iamVjdCcsIFBhcmFtcz17J0J1Y2tldCc6IGVudi5CVUNLRVQsICdLZXknOiBrZXl9KQogICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMuZGVsZXRlKHVybCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDQpCiAgICAgICAgcmVzcG9uc2UuY2xvc2UoKQoKICAgICAgICAjIENoZWNrIGRlbGV0aW9uIHJlc3VsdAogICAgICAgIHVybCA9IHMzLmdlbmVyYXRlX3ByZXNpZ25lZF91cmwoJ2hlYWRfb2JqZWN0JywgUGFyYW1zPXsnQnVja2V0JzogZW52LkJVQ0tFVCwgJ0tleSc6IGtleX0pCiAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5oZWFkKHVybCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCA0MDQpCiAgICAgICAgcmVzcG9uc2UuY2xvc2UoKQoKICAgICAgICAjIFJlbW92ZSBrZXkgcHJlZml4CiAgICAgICAgdXJsID0gczMuZ2VuZXJhdGVfcHJlc2lnbmVkX3VybCgnZGVsZXRlX29iamVjdCcsIFBhcmFtcz17J0J1Y2tldCc6IGVudi5CVUNLRVQsICdLZXknOiBLRVlfUFJFRklYfSkKICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmRlbGV0ZSh1cmwpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjA0KQogICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKCiAgICBkZWYgX190ZXN0X3NpZ24oc2VsZiwgczMsIGtleT1Ob25lKToKICAgICAgICAiIiIKICAgICAgICA6dHlwZSBzMzogYm90b2NvcmUuY2xpZW50LlMzCiAgICAgICAgOnBhcmFtIHMzOiBTMyBjbGllbnQgaW5zdGFuY2UKICAgICAgICA6cmV0dXJuOiBOb25lCiAgICAgICAgIiIiCiAgICAgICAgIyBUZXN0IGhlYWQgYSBidWNrZXQKICAgICAgICBzZWxmLmFzc2VydF9oZWFkX2J1Y2tldF9yZXN1bHQoCiAgICAgICAgICAgIHJlc3VsdD1zMy5oZWFkX2J1Y2tldChCdWNrZXQ9ZW52LkJVQ0tFVCkpCgogICAgICAgICMgVmFycyBmb3IgZm9sbG93ZWQgdGVzdHMKICAgICAgICBpZiBrZXkgaXMgTm9uZToKICAgICAgICAgICAga2V5ID0gS0VZX1BSRUZJWCArIHJhbmRvbV9zdHJpbmcoMTYpCiAgICAgICAgYm9keSA9IHJhbmRvbV9ieXRlcygxMDI0KQogICAgICAgIGV4cGVjdF9tZDUgPSBjb21wdXRlX21kNShib2R5KQoKICAgICAgICAjIFRlc3QgcHV0IGFuIG9iamVjdC4KICAgICAgICBzZWxmLmFzc2VydF9wdXRfb2JqZWN0X3Jlc3VsdCgKICAgICAgICAgICAgcmVzdWx0PXMzLnB1dF9vYmplY3QoQnVja2V0PWVudi5CVUNLRVQsIEtleT1rZXksIEJvZHk9Ym9keSksCiAgICAgICAgICAgIGV0YWc9ZXhwZWN0X21kNSkKCiAgICAgICAgIyBUZXN0IGhlYWQgYW4gb2JqZWN0LgogICAgICAgIHNlbGYuYXNzZXJ0X2hlYWRfb2JqZWN0X3Jlc3VsdCgKICAgICAgICAgICAgcmVzdWx0PXMzLmhlYWRfb2JqZWN0KEJ1Y2tldD1lbnYuQlVDS0VULCBLZXk9a2V5KSwKICAgICAgICAgICAgZXRhZz1leHBlY3RfbWQ1KQoKICAgICAgICAjIFRlc3QgZ2V0IGFuIG9iamVjdC4KICAgICAgICBzZWxmLmFzc2VydF9nZXRfb2JqZWN0X3Jlc3VsdCgKICAgICAgICAgICAgcmVzdWx0PXMzLmdldF9vYmplY3QoQnVja2V0PWVudi5CVUNLRVQsIEtleT1rZXkpLAogICAgICAgICAgICBldGFnPWV4cGVjdF9tZDUsCiAgICAgICAgICAgIGNvbnRlbnRfbGVuZ3RoPTEwMjQsCiAgICAgICAgICAgIGJvZHlfbWQ1PWV4cGVjdF9tZDUpCgogICAgICAgICMgVGVzdCBkZWxldGUgYW4gb2JqZWN0LgogICAgICAgIHNlbGYuYXNzZXJ0X2RlbGV0ZV9vYmplY3RfcmVzdWx0KAogICAgICAgICAgICByZXN1bHQ9czMuZGVsZXRlX29iamVjdChCdWNrZXQ9ZW52LkJVQ0tFVCwgS2V5PWtleSkpCgogICAgICAgICMgUmVtb3ZlIGtleSBwcmVmaXguCiAgICAgICAgc2VsZi5hc3NlcnRfZGVsZXRlX29iamVjdF9yZXN1bHQoCiAgICAgICAgICAgIHJlc3VsdD1zMy5kZWxldGVfb2JqZWN0KEJ1Y2tldD1lbnYuQlVDS0VULCBLZXk9S0VZX1BSRUZJWCkpCgogICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3YyX2VuKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRoaXMgdGVzdCB0ZXN0cyBwcm9jZXNzIHVuZGVyIHNpbmdlZCBoZWFkZXIgd2l0aCBzaWduYXR1cmUgYWxnb3JpdGhtIHYyLgogICAgICAgIDpyZXR1cm46IE5vbmUKICAgICAgICAiIiIKICAgICAgICBzZWxmLl9fdGVzdF9zaWduKAogICAgICAgICAgICBzMz1nZXRfZW52X3MzX2NsaWVudChzaWduYXR1cmVfdmVyc2lvbj0nczMnKSkKCiAgICBkZWYgdGVzdF9zaWduYXR1cmVfdjJfY24oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgIFRoaXMgdGVzdCB0ZXN0cyBwcm9jZXNzIHVuZGVyIHNpbmdlZCBoZWFkZXIgd2l0aCBzaWduYXR1cmUgYWxnb3JpdGhtIHYyLgogICAgICAgICBLZXkgY29uc2lzdCBieSBDaGluZXNlIGNoYXJhY3RlcnMuCiAgICAgICAgIDpyZXR1cm46IE5vbmUKICAgICAgICAgIiIiCiAgICAgICAgc2VsZi5fX3Rlc3Rfc2lnbigKICAgICAgICAgICAgczM9Z2V0X2Vudl9zM19jbGllbnQoc2lnbmF0dXJlX3ZlcnNpb249J3MzJyksCiAgICAgICAgICAgIGtleT1LRVlfUFJFRklYICsgcmFuZG9tX3N0cmluZ19jbigxNikpCgogICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3YyX3ByZXNpZ25fZW4oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGhpcyB0ZXN0IHRlc3RzIHByb2Nlc3MgdW5kZXIgcHJlc2lnbmVkIHVybCB3aXRoIHNpZ25hdHVyZSBhbGdvcml0aG0gdjIuCiAgICAgICAgOnJldHVybjoKICAgICAgICAiIiIKICAgICAgICBzZWxmLl9fdGVzdF9wcmVzaWduKAogICAgICAgICAgICBzMz1nZXRfZW52X3MzX2NsaWVudChzaWduYXR1cmVfdmVyc2lvbj0nczMnKSkKCiAgICBkZWYgdGVzdF9zaWduYXR1cmVfdjJfcHJlc2lnbl9jbihzZWxmKToKICAgICAgICAiIiIKICAgICAgICAgVGhpcyB0ZXN0IHRlc3RzIHByb2Nlc3MgdW5kZXIgcHJlc2lnbmVkIHVybCB3aXRoIHNpZ25hdHVyZSBhbGdvcml0aG0gdjIuCiAgICAgICAgIEtleSBjb25zaXN0IGJ5IENoaW5lc2UgY2hhcmFjdGVycy4KICAgICAgICAgOnJldHVybjoKICAgICAgICAgIiIiCiAgICAgICAgc2VsZi5fX3Rlc3RfcHJlc2lnbigKICAgICAgICAgICAgczM9Z2V0X2Vudl9zM19jbGllbnQoc2lnbmF0dXJlX3ZlcnNpb249J3MzJyksCiAgICAgICAgICAgIGtleT1LRVlfUFJFRklYICsgcmFuZG9tX3N0cmluZ19jbigxNikpCgogICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3Y0X2VuKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRoaXMgdGVzdCB0ZXN0cyBwcm9jZXNzIHVuZGVyIHNpbmdlZCBoZWFkZXIgd2l0aCBzaWduYXR1cmUgYWxnb3JpdGhtIHY0LgogICAgICAgIDpyZXR1cm46IE5vbmUKICAgICAgICAiIiIKICAgICAgICBzZWxmLl9fdGVzdF9zaWduKAogICAgICAgICAgICBzMz1nZXRfZW52X3MzX2NsaWVudCgpKQoKICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV92NF9jbihzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUaGlzIHRlc3QgdGVzdHMgcHJvY2VzcyB1bmRlciBzaW5nZWQgaGVhZGVyIHdpdGggc2lnbmF0dXJlIGFsZ29yaXRobSB2NC4KICAgICAgICBLZXkgY29uc2lzdCBieSBDaGluZXNlIGNoYXJhY3RlcnMuCiAgICAgICAgOnJldHVybjogTm9uZQogICAgICAgICIiIgogICAgICAgIHNlbGYuX190ZXN0X3NpZ24oCiAgICAgICAgICAgIHMzPWdldF9lbnZfczNfY2xpZW50KCksCiAgICAgICAgICAgIGtleT1yYW5kb21fc3RyaW5nX2NuKDE2KSkKCiAgICBkZWYgdGVzdF9zaWduYXR1cmVfdjRfcHJlc2lnbl9lbihzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUaGlzIHRlc3QgdGVzdHMgcHJvY2VzcyB1bmRlciBwcmVzaWduZWQgdXJsIHdpdGggc2lnbmF0dXJlIGFsZ29yaXRobSB2NC4KICAgICAgICA6cmV0dXJuOiBOb25lCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5fX3Rlc3RfcHJlc2lnbigKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBzMz1nZXRfZW52X3MzX2NsaWVudCgpKQoKPHxmaW1fZW5kfD4="]
["a9b5e5bb0f2b1340ef0fa1bc2798393062661838-1","a9b5e5bb0f2b1340ef0fa1bc2798393062661838","PHxmaW1fcHJlZml4fD4KZnJvbSAuIGltcG9ydCBmb3JtUm91dGUKZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3RlbXBsYXRlLHJlcXVlc3QscmVkaXJlY3QKCkBmb3JtUm91dGUucm91dGUoJy8xJykKZGVmIGdldF9maXJzdF9mb3JtKCk6CiAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKCdmb3JtLmh0bWwnLHN0YXRlPTEpCgpAZm9ybVJvdXRlLnJvdXRlKCcvMicpCjx8ZmltX2hvbGV8PgpkZWYgZ2V0X3RoaXJkX2Zvcm0oKToKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoJ2Zvcm0uaHRtbCcsc3RhdGU9MykKCkBmb3JtUm91dGUucm91dGUoJy80JykKZGVmIGdldF9mb3VydGhfZm9ybSgpOgogICAgcmV0dXJuIHJlbmRlcl90ZW1wbGF0ZSgnZm9ybS5odG1sJyxzdGF0ZT00KQoKQGZvcm1Sb3V0ZS5yb3V0ZSgnLzUnKQpkZWYgZ2V0X2ZpZnRoX2Zvcm0oKToKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoJ2Zvcm0uaHRtbCcsc3RhdGU9NSkKCkBmb3JtUm91dGUucm91dGUoJy82JykKZGVmIGdldF9zaXh0aF9mb3JtKCk6CiAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKCdmb3JtLmh0bWwnLHN0YXRlPTYpCgpAZm9ybVJvdXRlLnJvdXRlKCcvNycpCmRlZiBnZXRfc2V2ZW50aF9mb3JtKCk6CiAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKCdmb3JtLmh0bWwnLHN0YXRlPTcpCjx8ZmltX3N1ZmZpeHw+CmRlZiBnZXRfc2Vjb25kX2Zvcm0oKToKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoJ2Zvcm0uaHRtbCcsc3RhdGU9MikKCkBmb3JtUm91dGUucm91dGUoJy8zJykKPHxmaW1fZW5kfD4="]
["6b7309b276dcfe0caae682ec72528c37718c6b6a-1","6b7309b276dcfe0caae682ec72528c37718c6b6a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAoKZnJvbSBleHRyYXMuYmVhdXRpZnlfanMgaW1wb3J0IEJlYXV0aWZ5CgoKY2xhc3MgVGVzdEJlYXV0aWZ5OgogICAgQHB5dGVzdC5maXh0dXJlKCkKICAgIGRlZiBpbml0X2luc3RhbmNlKHNlbGY6ICdUZXN0QmVhdXRpZnknKSAtPiBOb25lOgogICAgICAgICIiIua1i+ivlemihOWkhOeQhiznlJ/miJBCZWF1dGlmeeWunuS+iwoKICAgICAgICA6cmV0dXJuOiBOb25lCiAgICAgICAgIiIiCiAgICAgICAgbm9kZV9wYXRoOiBzdHIgPSAnL3Vzci9sb2NhbC9vcHQvbm9kZUAxMC9iaW4vbm9kZScKICAgICAgICBzZWxmLmJlYXV0aWZ5OiBCZWF1dGlmeSA9IEJlYXV0aWZ5KHBhdGg9bm9kZV9wYXRoKQoKICAgIEBweXRlc3QubWFyay51c2VmaXh0dXJlcygnaW5pdF9pbnN0YW5jZScpCiAgICBkZWYgdGVzdF9mdW5jdGlvbl9fMHg1NWYzKHNlbGY6ICdUZXN0QmVhdXRpZnknKSAtPiBOb25lOgogICAgICAgICIiIua1i+ivlVB5RXhlY0pT6LCD55So55qEIF8weDU1ZjMg5piv5ZCm56ym5ZCI6KaB5rGCCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgOnJldHVybjogTm9uZQogICAgICAgICIiIgogICAgICAgIGFzc2VydCBzZWxmLmJlYXV0aWZ5LmZ1bmN0aW9uX18weDU1ZjMoJzB4MzYnLCAneUFweicpID09ICdhdHRhY2hFdmVudCcKPHxmaW1fZW5kfD4="]
["6b7309b276dcfe0caae682ec72528c37718c6b6a-2","6b7309b276dcfe0caae682ec72528c37718c6b6a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAoKZnJvbSBleHRyYXMuYmVhdXRpZnlfanMgaW1wb3J0IEJlYXV0aWZ5CgoKY2xhc3MgVGVzdEJlYXV0aWZ5OgogICAgQHB5dGVzdC5maXh0dXJlKCkKICAgIGRlZiBpbml0X2luc3RhbmNlKHNlbGY6ICdUZXN0QmVhdXRpZnknKSAtPiBOb25lOgogICAgICAgICIiIua1i+ivlemihOWkhOeQhiznlJ/miJBCZWF1dGlmeeWunuS+iwo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLmJlYXV0aWZ5OiBCZWF1dGlmeSA9IEJlYXV0aWZ5KHBhdGg9bm9kZV9wYXRoKQoKICAgIEBweXRlc3QubWFyay51c2VmaXh0dXJlcygnaW5pdF9pbnN0YW5jZScpCiAgICBkZWYgdGVzdF9mdW5jdGlvbl9fMHg1NWYzKHNlbGY6ICdUZXN0QmVhdXRpZnknKSAtPiBOb25lOgogICAgICAgICIiIua1i+ivlVB5RXhlY0pT6LCD55So55qEIF8weDU1ZjMg5piv5ZCm56ym5ZCI6KaB5rGCCgogICAgICAgIDpyZXR1cm46IE5vbmUKICAgICAgICAiIiIKICAgICAgICBhc3NlcnQgc2VsZi5iZWF1dGlmeS5mdW5jdGlvbl9fMHg1NWYzKCcweDM2JywgJ3lBcHonKSA9PSAnYXR0YWNoRXZlbnQnCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgIDpyZXR1cm46IE5vbmUKICAgICAgICAiIiIKICAgICAgICBub2RlX3BhdGg6IHN0ciA9ICcvdXNyL2xvY2FsL29wdC9ub2RlQDEwL2Jpbi9ub2RlJwo8fGZpbV9lbmR8Pg=="]
["6b7309b276dcfe0caae682ec72528c37718c6b6a-3","6b7309b276dcfe0caae682ec72528c37718c6b6a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAoKZnJvbSBleHRyYXMuYmVhdXRpZnlfanMgaW1wb3J0IEJlYXV0aWZ5CgoKY2xhc3MgVGVzdEJlYXV0aWZ5OgogICAgQHB5dGVzdC5maXh0dXJlKCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIGluaXRfaW5zdGFuY2Uoc2VsZjogJ1Rlc3RCZWF1dGlmeScpIC0+IE5vbmU6CiAgICAgICAgIiIi5rWL6K+V6aKE5aSE55CGLOeUn+aIkEJlYXV0aWZ55a6e5L6LCgogICAgICAgIDpyZXR1cm46IE5vbmUKPHxmaW1fZW5kfD4="]
["6b7309b276dcfe0caae682ec72528c37718c6b6a-4","6b7309b276dcfe0caae682ec72528c37718c6b6a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAoKZnJvbSBleHRyYXMuYmVhdXRpZnlfanMgaW1wb3J0IEJlYXV0aWZ5CgoKY2xhc3MgVGVzdEJlYXV0aWZ5Ogo8fGZpbV9ob2xlfD4KICAgICAgICA6cmV0dXJuOiBOb25lCiAgICAgICAgIiIiCiAgICAgICAgbm9kZV9wYXRoOiBzdHIgPSAnL3Vzci9sb2NhbC9vcHQvbm9kZUAxMC9iaW4vbm9kZScKICAgICAgICBzZWxmLmJlYXV0aWZ5OiBCZWF1dGlmeSA9IEJlYXV0aWZ5KHBhdGg9bm9kZV9wYXRoKQoKICAgIEBweXRlc3QubWFyay51c2VmaXh0dXJlcygnaW5pdF9pbnN0YW5jZScpCiAgICBkZWYgdGVzdF9mdW5jdGlvbl9fMHg1NWYzKHNlbGY6ICdUZXN0QmVhdXRpZnknKSAtPiBOb25lOgogICAgICAgICIiIua1i+ivlVB5RXhlY0pT6LCD55So55qEIF8weDU1ZjMg5piv5ZCm56ym5ZCI6KaB5rGCCgogICAgICAgIDpyZXR1cm46IE5vbmUKICAgICAgICAiIiIKICAgICAgICBhc3NlcnQgc2VsZi5iZWF1dGlmeS5mdW5jdGlvbl9fMHg1NWYzKCcweDM2JywgJ3lBcHonKSA9PSAnYXR0YWNoRXZlbnQnCjx8ZmltX3N1ZmZpeHw+CiAgICBAcHl0ZXN0LmZpeHR1cmUoKQogICAgZGVmIGluaXRfaW5zdGFuY2Uoc2VsZjogJ1Rlc3RCZWF1dGlmeScpIC0+IE5vbmU6CiAgICAgICAgIiIi5rWL6K+V6aKE5aSE55CGLOeUn+aIkEJlYXV0aWZ55a6e5L6LCgo8fGZpbV9lbmR8Pg=="]
["6b7309b276dcfe0caae682ec72528c37718c6b6a-5","6b7309b276dcfe0caae682ec72528c37718c6b6a","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKY2xhc3MgVGVzdEJlYXV0aWZ5OgogICAgQHB5dGVzdC5maXh0dXJlKCkKICAgIGRlZiBpbml0X2luc3RhbmNlKHNlbGY6ICdUZXN0QmVhdXRpZnknKSAtPiBOb25lOgogICAgICAgICIiIua1i+ivlemihOWkhOeQhiznlJ/miJBCZWF1dGlmeeWunuS+iwoKICAgICAgICA6cmV0dXJuOiBOb25lCiAgICAgICAgIiIiCiAgICAgICAgbm9kZV9wYXRoOiBzdHIgPSAnL3Vzci9sb2NhbC9vcHQvbm9kZUAxMC9iaW4vbm9kZScKICAgICAgICBzZWxmLmJlYXV0aWZ5OiBCZWF1dGlmeSA9IEJlYXV0aWZ5KHBhdGg9bm9kZV9wYXRoKQoKICAgIEBweXRlc3QubWFyay51c2VmaXh0dXJlcygnaW5pdF9pbnN0YW5jZScpCiAgICBkZWYgdGVzdF9mdW5jdGlvbl9fMHg1NWYzKHNlbGY6ICdUZXN0QmVhdXRpZnknKSAtPiBOb25lOgogICAgICAgICIiIua1i+ivlVB5RXhlY0pT6LCD55So55qEIF8weDU1ZjMg5piv5ZCm56ym5ZCI6KaB5rGCCgogICAgICAgIDpyZXR1cm46IE5vbmUKICAgICAgICAiIiIKICAgICAgICBhc3NlcnQgc2VsZi5iZWF1dGlmeS5mdW5jdGlvbl9fMHg1NWYzKCcweDM2JywgJ3lBcHonKSA9PSAnYXR0YWNoRXZlbnQnCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBweXRlc3QKCmZyb20gZXh0cmFzLmJlYXV0aWZ5X2pzIGltcG9ydCBCZWF1dGlmeQoKPHxmaW1fZW5kfD4="]
["68f15478690385cf1d09b7664386768af7a6dfcf-1","68f15478690385cf1d09b7664386768af7a6dfcf","PHxmaW1fcHJlZml4fD4KZnJvbSAuZWxlbWVudCBpbXBvcnQgRWxlbWVudAoKCjx8ZmltX2hvbGV8PgoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiAibWFyayIKPHxmaW1fc3VmZml4fD4KY2xhc3MgTWFyayhFbGVtZW50KToKICAgICIiIgogICAgUmVwcmVzZW50cyBtYXJrZWQgcGhyYXNlLgogICAgIiIiCjx8ZmltX2VuZHw+"]
["68f15478690385cf1d09b7664386768af7a6dfcf-2","68f15478690385cf1d09b7664386768af7a6dfcf","PHxmaW1fcHJlZml4fD4KZnJvbSAuZWxlbWVudCBpbXBvcnQgRWxlbWVudAoKCmNsYXNzIE1hcmsoRWxlbWVudCk6CiAgICAiIiIKICAgIFJlcHJlc2VudHMgbWFya2VkIHBocmFzZS4KICAgICIiIgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgcmV0dXJuICJtYXJrIgo8fGZpbV9lbmR8Pg=="]
["68f15478690385cf1d09b7664386768af7a6dfcf-3","68f15478690385cf1d09b7664386768af7a6dfcf","PHxmaW1fcHJlZml4fD4KZnJvbSAuZWxlbWVudCBpbXBvcnQgRWxlbWVudAoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgTWFyayhFbGVtZW50KToKICAgICIiIgogICAgUmVwcmVzZW50cyBtYXJrZWQgcGhyYXNlLgogICAgIiIiCjx8ZmltX2VuZHw+"]
["68f15478690385cf1d09b7664386768af7a6dfcf-4","68f15478690385cf1d09b7664386768af7a6dfcf","PHxmaW1fcHJlZml4fD4KZnJvbSAuZWxlbWVudCBpbXBvcnQgRWxlbWVudAoKCmNsYXNzIE1hcmsoRWxlbWVudCk6CiAgICAiIiIKICAgIFJlcHJlc2VudHMgbWFya2VkIHBocmFzZS4KICAgICIiIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgcmV0dXJuICJtYXJrIgo8fGZpbV9lbmR8Pg=="]
["68f15478690385cf1d09b7664386768af7a6dfcf-5","68f15478690385cf1d09b7664386768af7a6dfcf","PHxmaW1fcHJlZml4fD4KZnJvbSAuZWxlbWVudCBpbXBvcnQgRWxlbWVudAoKCjx8ZmltX2hvbGV8PgoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiAibWFyayIKPHxmaW1fc3VmZml4fD4KY2xhc3MgTWFyayhFbGVtZW50KToKICAgICIiIgogICAgUmVwcmVzZW50cyBtYXJrZWQgcGhyYXNlLgogICAgIiIiCjx8ZmltX2VuZHw+"]
["99d0fc4bf196ee566ba2f0344d7aab17a4506d13-1","99d0fc4bf196ee566ba2f0344d7aab17a4506d13","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KCndpdGggb3BlbignLi93aXRobWV0YV8yLmpzb24nLCAncicsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CiAgICBtZW1iZXJzID0ganNvbi5sb2FkKGYpCgp3aXRoIG9wZW4oJy4vY29uc3RpdHVlbmN5Lmpzb24nLCAncicsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CiAgICBjb25zdGl0dWVuY3kgPSBqc29uLmxvYWQoZikKCndpdGggb3BlbignLi9ub3RvZGRnZW8uanNvbicsICdyJywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoKICAgIG9kZGdlbyA9IGpzb24ubG9hZChmKQoKCm5ld01lbWJlcnMgPSBsaXN0KCkKCmZvciBtZW1iZXIgaW4gbWVtYmVyczoKICAgIG5ld1Rlcm1zID0gbGlzdCgpCiAgICBmb3IgdGVybSBpbiBtZW1iZXJbJ3Rlcm1zJ106CiAgICAgICAgaWYgdGVybVsnY29uc3RpdHVlbmN5J10gIT0gIiIgYW5kIGxlbih0ZXJtWydjb25zdGl0dWVuY3knXS5yZXBsYWNlKCIoU0MpIiwgIiIpLnJlcGxhY2UoIihTVCkiLCAiIikuc3BsaXQoIigiKSkgPT0gMjoKICAgICAgICAgICAgdGVtcEdlbyA9IGRpY3QoKQogICAgICAgICAgICBnZW8gPSB0ZXJtWydjb25zdGl0dWVuY3knXS5zdHJpcCgpCiAgICAgICAgICAgIHRlbXBHZW9bJ2Z1bGwnXSA9IGdlbwogICAgICAgICAgICBTQ2ZpbmQgPSBnZW8uZmluZCgiKFNDKSIpCiAgICAgICAgICAgIFNUZmluZCA9IGdlby5maW5kKCIoU1QpIikKCiAgICAgICAgICAgIGlmKFNDZmluZCA+PSAwKToKICAgICAgICAgICAgICAgIHRlbXBHZW9bJ3R5cGUnXSA9IDEKICAgICAgICAgICAgZWxpZihTVGZpbmQgPj0gMCk6CiAgICAgICAgICAgICAgICB0ZW1wR2VvWyd0eXBlJ10gPSAyCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0ZW1wR2VvWyd0eXBlJ10gPSAzCgogICAgICAgICAgICBzdGF0ZUNsZWFuaW5nID0gZ2VvLnJlcGxhY2UoIihTQykiLCAiIikucmVwbGFjZSgiKFNUKSIsICIiKS5zcGxpdCgiKCIpCgogICAgICAgICAgICB0ZW1wR2VvWyduYW1lJ10gPSBzdGF0ZUNsZWFuaW5nWzBdLnN0cmlwKCkKICAgICAgICAgICAgdGVtcEdlb1snc3RhdGUnXSA9IHN0YXRlQ2xlYW5pbmdbMV0ucmVwbGFjZSgiKSIsICIiKS5zdHJpcCgpCgoKICAgICAgICAgICAgCiAgICAgICAgICAgIHNlY29uZFNDZmluZCA9IGdlby5maW5kKCItU0MiKQogICAgICAgICAgICBzZWNvbmRTVGZpbmQgPSBnZW8uZmluZCgiLVNUIikKCiAgICAgICAgICAgIGlmKHNlY29uZFNDZmluZCA+PSAwKToKICAgICAgICAgICAgICAgIHRlbXBHZW9bJ25hbWUnXSA9IHRlbXBHZW9bJ25hbWUnXS5zcGxpdCgiLVNDIilbMF0uc3RyaXAoKQogICAgICAgICAgICAgICAgdGVtcEdlb1sndHlwZSddID0gMQogICAgICAgICAgICBlbGlmKHNlY29uZFNUZmluZCA+PSAwKToKICAgICAgICAgICAgICAgIHRlbXBHZW9bJ25hbWUnXSA9IHRlbXBHZW9bJ25hbWUnXS5zcGxpdCgiLVNUIilbMF0uc3RyaXAoKQogICAgICAgICAgICAgICAgdGVtcEdlb1sndHlwZSddID0gMgoKICAgICAgICAgICAgR0lEbGlzdCA9IGxpc3QoZmlsdGVyKGxhbWJkYSBnZW86IGdlb1snbmFtZSddID09IHRlbXBHZW9bJ25hbWUnXSBhbmQgZ2VvWyd0eXBlJ10gPT0gdGVtcEdlb1sndHlwZSddIGFuZCBnZW9bJ3N0YXRlJ10gPT0gdGVtcEdlb1snc3RhdGUnXSwgY29uc3RpdHVlbmN5KSkKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmKGxlbihHSURsaXN0KSA9PSAxKToKICAgICAgICAgICAgICAgIHRlcm1bJ2NvbnN0aXR1ZW5jeSddID0gaW50KEdJRGxpc3RbMF1bJ0dJRCddKQo8fGZpbV9ob2xlfD4KICAgICAgICBlbGlmIHRlcm1bJ2NvbnN0aXR1ZW5jeSddLnN0cmlwKCkgPT0gIiI6CiAgICAgICAgICAgIHRlcm1bJ2NvbnN0aXR1ZW5jeSddID0gTm9uZQogICAgICAgIGVsaWYgdGVybVsnY29uc3RpdHVlbmN5J10uc3RyaXAoKSBpbiBvZGRnZW86CiAgICAgICAgICAgIHRlcm1bJ2NvbnN0aXR1ZW5jeSddID0gb2RkZ2VvW3Rlcm1bJ2NvbnN0aXR1ZW5jeSddLnN0cmlwKCldCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQodGVybVsnY29uc3RpdHVlbmN5J10pCiAgICAgICAgCiAgICAgICAgbmV3VGVybXMuYXBwZW5kKHRlcm0pCgogICAgbWVtYmVyWyd0ZXJtcyddID0gbmV3VGVybXMKCiAgICBuZXdNZW1iZXJzLmFwcGVuZChtZW1iZXIpICAKCndpdGggb3BlbignLi93aXRoZmluYWxjb25zdGl0dWVuY3lfMi5qc29uJywgJ3cnLCBlbmNvZGluZz0ndXRmLTgnKSBhcyBmOgogICAganNvbi5kdW1wKG5ld01lbWJlcnMsIGYsIGVuc3VyZV9hc2NpaT1GYWxzZSwgaW5kZW50PTQpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwcmludCh0ZXJtWydjb25zdGl0dWVuY3knXSkKPHxmaW1fZW5kfD4="]
["99d0fc4bf196ee566ba2f0344d7aab17a4506d13-2","99d0fc4bf196ee566ba2f0344d7aab17a4506d13","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KCndpdGggb3BlbignLi93aXRobWV0YV8yLmpzb24nLCAncicsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CiAgICBtZW1iZXJzID0ganNvbi5sb2FkKGYpCgp3aXRoIG9wZW4oJy4vY29uc3RpdHVlbmN5Lmpzb24nLCAncicsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CiAgICBjb25zdGl0dWVuY3kgPSBqc29uLmxvYWQoZikKCndpdGggb3BlbignLi9ub3RvZGRnZW8uanNvbicsICdyJywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoKICAgIG9kZGdlbyA9IGpzb24ubG9hZChmKQoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KbmV3TWVtYmVycyA9IGxpc3QoKQoKZm9yIG1lbWJlciBpbiBtZW1iZXJzOgogICAgbmV3VGVybXMgPSBsaXN0KCkKPHxmaW1fZW5kfD4="]
["99d0fc4bf196ee566ba2f0344d7aab17a4506d13-3","99d0fc4bf196ee566ba2f0344d7aab17a4506d13","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KCndpdGggb3BlbignLi93aXRobWV0YV8yLmpzb24nLCAncicsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CiAgICBtZW1iZXJzID0ganNvbi5sb2FkKGYpCgp3aXRoIG9wZW4oJy4vY29uc3RpdHVlbmN5Lmpzb24nLCAncicsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CiAgICBjb25zdGl0dWVuY3kgPSBqc29uLmxvYWQoZikKCndpdGggb3BlbignLi9ub3RvZGRnZW8uanNvbicsICdyJywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoKICAgIG9kZGdlbyA9IGpzb24ubG9hZChmKQoKCm5ld01lbWJlcnMgPSBsaXN0KCkKCmZvciBtZW1iZXIgaW4gbWVtYmVyczoKICAgIG5ld1Rlcm1zID0gbGlzdCgpCiAgICBmb3IgdGVybSBpbiBtZW1iZXJbJ3Rlcm1zJ106CiAgICAgICAgaWYgdGVybVsnY29uc3RpdHVlbmN5J10gIT0gIiIgYW5kIGxlbih0ZXJtWydjb25zdGl0dWVuY3knXS5yZXBsYWNlKCIoU0MpIiwgIiIpLnJlcGxhY2UoIihTVCkiLCAiIikuc3BsaXQoIigiKSkgPT0gMjoKICAgICAgICAgICAgdGVtcEdlbyA9IGRpY3QoKQogICAgICAgICAgICBnZW8gPSB0ZXJtWydjb25zdGl0dWVuY3knXS5zdHJpcCgpCiAgICAgICAgICAgIHRlbXBHZW9bJ2Z1bGwnXSA9IGdlbwogICAgICAgICAgICBTQ2ZpbmQgPSBnZW8uZmluZCgiKFNDKSIpCiAgICAgICAgICAgIFNUZmluZCA9IGdlby5maW5kKCIoU1QpIikKCiAgICAgICAgICAgIGlmKFNDZmluZCA+PSAwKToKICAgICAgICAgICAgICAgIHRlbXBHZW9bJ3R5cGUnXSA9IDEKICAgICAgICAgICAgZWxpZihTVGZpbmQgPj0gMCk6CiAgICAgICAgICAgICAgICB0ZW1wR2VvWyd0eXBlJ10gPSAyCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0ZW1wR2VvWyd0eXBlJ10gPSAzCgogICAgICAgICAgICBzdGF0ZUNsZWFuaW5nID0gZ2VvLnJlcGxhY2UoIihTQykiLCAiIikucmVwbGFjZSgiKFNUKSIsICIiKS5zcGxpdCgiKCIpCgogICAgICAgICAgICB0ZW1wR2VvWyduYW1lJ10gPSBzdGF0ZUNsZWFuaW5nWzBdLnN0cmlwKCkKICAgICAgICAgICAgdGVtcEdlb1snc3RhdGUnXSA9IHN0YXRlQ2xlYW5pbmdbMV0ucmVwbGFjZSgiKSIsICIiKS5zdHJpcCgpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgogICAgICAgICAgICAKICAgICAgICAgICAgc2Vjb25kU0NmaW5kID0gZ2VvLmZpbmQoIi1TQyIpCjx8ZmltX2VuZHw+"]
["99d0fc4bf196ee566ba2f0344d7aab17a4506d13-4","99d0fc4bf196ee566ba2f0344d7aab17a4506d13","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KCndpdGggb3BlbignLi93aXRobWV0YV8yLmpzb24nLCAncicsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CiAgICBtZW1iZXJzID0ganNvbi5sb2FkKGYpCgp3aXRoIG9wZW4oJy4vY29uc3RpdHVlbmN5Lmpzb24nLCAncicsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CiAgICBjb25zdGl0dWVuY3kgPSBqc29uLmxvYWQoZikKCndpdGggb3BlbignLi9ub3RvZGRnZW8uanNvbicsICdyJywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoKICAgIG9kZGdlbyA9IGpzb24ubG9hZChmKQoKCm5ld01lbWJlcnMgPSBsaXN0KCkKCmZvciBtZW1iZXIgaW4gbWVtYmVyczoKICAgIG5ld1Rlcm1zID0gbGlzdCgpCiAgICBmb3IgdGVybSBpbiBtZW1iZXJbJ3Rlcm1zJ106CiAgICAgICAgaWYgdGVybVsnY29uc3RpdHVlbmN5J10gIT0gIiIgYW5kIGxlbih0ZXJtWydjb25zdGl0dWVuY3knXS5yZXBsYWNlKCIoU0MpIiwgIiIpLnJlcGxhY2UoIihTVCkiLCAiIikuc3BsaXQoIigiKSkgPT0gMjoKICAgICAgICAgICAgdGVtcEdlbyA9IGRpY3QoKQogICAgICAgICAgICBnZW8gPSB0ZXJtWydjb25zdGl0dWVuY3knXS5zdHJpcCgpCiAgICAgICAgICAgIHRlbXBHZW9bJ2Z1bGwnXSA9IGdlbwogICAgICAgICAgICBTQ2ZpbmQgPSBnZW8uZmluZCgiKFNDKSIpCiAgICAgICAgICAgIFNUZmluZCA9IGdlby5maW5kKCIoU1QpIikKCiAgICAgICAgICAgIGlmKFNDZmluZCA+PSAwKToKICAgICAgICAgICAgICAgIHRlbXBHZW9bJ3R5cGUnXSA9IDEKICAgICAgICAgICAgZWxpZihTVGZpbmQgPj0gMCk6CiAgICAgICAgICAgICAgICB0ZW1wR2VvWyd0eXBlJ10gPSAyCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0ZW1wR2VvWyd0eXBlJ10gPSAzCgogICAgICAgICAgICBzdGF0ZUNsZWFuaW5nID0gZ2VvLnJlcGxhY2UoIihTQykiLCAiIikucmVwbGFjZSgiKFNUKSIsICIiKS5zcGxpdCgiKCIpCgogICAgICAgICAgICB0ZW1wR2VvWyduYW1lJ10gPSBzdGF0ZUNsZWFuaW5nWzBdLnN0cmlwKCkKICAgICAgICAgICAgdGVtcEdlb1snc3RhdGUnXSA9IHN0YXRlQ2xlYW5pbmdbMV0ucmVwbGFjZSgiKSIsICIiKS5zdHJpcCgpCgoKICAgICAgICAgICAgCiAgICAgICAgICAgIHNlY29uZFNDZmluZCA9IGdlby5maW5kKCItU0MiKQogICAgICAgICAgICBzZWNvbmRTVGZpbmQgPSBnZW8uZmluZCgiLVNUIikKCiAgICAgICAgICAgIGlmKHNlY29uZFNDZmluZCA+PSAwKToKICAgICAgICAgICAgICAgIHRlbXBHZW9bJ25hbWUnXSA9IHRlbXBHZW9bJ25hbWUnXS5zcGxpdCgiLVNDIilbMF0uc3RyaXAoKQogICAgICAgICAgICAgICAgdGVtcEdlb1sndHlwZSddID0gMQogICAgICAgICAgICBlbGlmKHNlY29uZFNUZmluZCA+PSAwKToKICAgICAgICAgICAgICAgIHRlbXBHZW9bJ25hbWUnXSA9IHRlbXBHZW9bJ25hbWUnXS5zcGxpdCgiLVNUIilbMF0uc3RyaXAoKQogICAgICAgICAgICAgICAgdGVtcEdlb1sndHlwZSddID0gMgoKICAgICAgICAgICAgR0lEbGlzdCA9IGxpc3QoZmlsdGVyKGxhbWJkYSBnZW86IGdlb1snbmFtZSddID09IHRlbXBHZW9bJ25hbWUnXSBhbmQgZ2VvWyd0eXBlJ10gPT0gdGVtcEdlb1sndHlwZSddIGFuZCBnZW9bJ3N0YXRlJ10gPT0gdGVtcEdlb1snc3RhdGUnXSwgY29uc3RpdHVlbmN5KSkKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmKGxlbihHSURsaXN0KSA9PSAxKToKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwcmludCh0ZXJtWydjb25zdGl0dWVuY3knXSkKICAgICAgICBlbGlmIHRlcm1bJ2NvbnN0aXR1ZW5jeSddLnN0cmlwKCkgPT0gIiI6CiAgICAgICAgICAgIHRlcm1bJ2NvbnN0aXR1ZW5jeSddID0gTm9uZQogICAgICAgIGVsaWYgdGVybVsnY29uc3RpdHVlbmN5J10uc3RyaXAoKSBpbiBvZGRnZW86CiAgICAgICAgICAgIHRlcm1bJ2NvbnN0aXR1ZW5jeSddID0gb2RkZ2VvW3Rlcm1bJ2NvbnN0aXR1ZW5jeSddLnN0cmlwKCldCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQodGVybVsnY29uc3RpdHVlbmN5J10pCiAgICAgICAgCiAgICAgICAgbmV3VGVybXMuYXBwZW5kKHRlcm0pCgogICAgbWVtYmVyWyd0ZXJtcyddID0gbmV3VGVybXMKCiAgICBuZXdNZW1iZXJzLmFwcGVuZChtZW1iZXIpICAKCndpdGggb3BlbignLi93aXRoZmluYWxjb25zdGl0dWVuY3lfMi5qc29uJywgJ3cnLCBlbmNvZGluZz0ndXRmLTgnKSBhcyBmOgogICAganNvbi5kdW1wKG5ld01lbWJlcnMsIGYsIGVuc3VyZV9hc2NpaT1GYWxzZSwgaW5kZW50PTQpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICB0ZXJtWydjb25zdGl0dWVuY3knXSA9IGludChHSURsaXN0WzBdWydHSUQnXSkKPHxmaW1fZW5kfD4="]
["99d0fc4bf196ee566ba2f0344d7aab17a4506d13-5","99d0fc4bf196ee566ba2f0344d7aab17a4506d13","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KCndpdGggb3BlbignLi93aXRobWV0YV8yLmpzb24nLCAncicsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CiAgICBtZW1iZXJzID0ganNvbi5sb2FkKGYpCgp3aXRoIG9wZW4oJy4vY29uc3RpdHVlbmN5Lmpzb24nLCAncicsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CiAgICBjb25zdGl0dWVuY3kgPSBqc29uLmxvYWQoZikKCndpdGggb3BlbignLi9ub3RvZGRnZW8uanNvbicsICdyJywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoKICAgIG9kZGdlbyA9IGpzb24ubG9hZChmKQoKCm5ld01lbWJlcnMgPSBsaXN0KCkKCmZvciBtZW1iZXIgaW4gbWVtYmVyczoKICAgIG5ld1Rlcm1zID0gbGlzdCgpCiAgICBmb3IgdGVybSBpbiBtZW1iZXJbJ3Rlcm1zJ106CiAgICAgICAgaWYgdGVybVsnY29uc3RpdHVlbmN5J10gIT0gIiIgYW5kIGxlbih0ZXJtWydjb25zdGl0dWVuY3knXS5yZXBsYWNlKCIoU0MpIiwgIiIpLnJlcGxhY2UoIihTVCkiLCAiIikuc3BsaXQoIigiKSkgPT0gMjoKICAgICAgICAgICAgdGVtcEdlbyA9IGRpY3QoKQogICAgICAgICAgICBnZW8gPSB0ZXJtWydjb25zdGl0dWVuY3knXS5zdHJpcCgpCiAgICAgICAgICAgIHRlbXBHZW9bJ2Z1bGwnXSA9IGdlbwogICAgICAgICAgICBTQ2ZpbmQgPSBnZW8uZmluZCgiKFNDKSIpCiAgICAgICAgICAgIFNUZmluZCA9IGdlby5maW5kKCIoU1QpIikKCiAgICAgICAgICAgIGlmKFNDZmluZCA+PSAwKToKICAgICAgICAgICAgICAgIHRlbXBHZW9bJ3R5cGUnXSA9IDEKICAgICAgICAgICAgZWxpZihTVGZpbmQgPj0gMCk6CiAgICAgICAgICAgICAgICB0ZW1wR2VvWyd0eXBlJ10gPSAyCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0ZW1wR2VvWyd0eXBlJ10gPSAzCgogICAgICAgICAgICBzdGF0ZUNsZWFuaW5nID0gZ2VvLnJlcGxhY2UoIihTQykiLCAiIikucmVwbGFjZSgiKFNUKSIsICIiKS5zcGxpdCgiKCIpCgogICAgICAgICAgICB0ZW1wR2VvWyduYW1lJ10gPSBzdGF0ZUNsZWFuaW5nWzBdLnN0cmlwKCkKICAgICAgICAgICAgdGVtcEdlb1snc3RhdGUnXSA9IHN0YXRlQ2xlYW5pbmdbMV0ucmVwbGFjZSgiKSIsICIiKS5zdHJpcCgpCgoKICAgICAgICAgICAgCiAgICAgICAgICAgIHNlY29uZFNDZmluZCA9IGdlby5maW5kKCItU0MiKQogICAgICAgICAgICBzZWNvbmRTVGZpbmQgPSBnZW8uZmluZCgiLVNUIikKCiAgICAgICAgICAgIGlmKHNlY29uZFNDZmluZCA+PSAwKToKICAgICAgICAgICAgICAgIHRlbXBHZW9bJ25hbWUnXSA9IHRlbXBHZW9bJ25hbWUnXS5zcGxpdCgiLVNDIilbMF0uc3RyaXAoKQogICAgICAgICAgICAgICAgdGVtcEdlb1sndHlwZSddID0gMQogICAgICAgICAgICBlbGlmKHNlY29uZFNUZmluZCA+PSAwKToKICAgICAgICAgICAgICAgIHRlbXBHZW9bJ25hbWUnXSA9IHRlbXBHZW9bJ25hbWUnXS5zcGxpdCgiLVNUIilbMF0uc3RyaXAoKQogICAgICAgICAgICAgICAgdGVtcEdlb1sndHlwZSddID0gMgoKICAgICAgICAgICAgR0lEbGlzdCA9IGxpc3QoZmlsdGVyKGxhbWJkYSBnZW86IGdlb1snbmFtZSddID09IHRlbXBHZW9bJ25hbWUnXSBhbmQgZ2VvWyd0eXBlJ10gPT0gdGVtcEdlb1sndHlwZSddIGFuZCBnZW9bJ3N0YXRlJ10gPT0gdGVtcEdlb1snc3RhdGUnXSwgY29uc3RpdHVlbmN5KSkKICAgICAgICAgICAgCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgaWYobGVuKEdJRGxpc3QpID09IDEpOgogICAgICAgICAgICAgICAgdGVybVsnY29uc3RpdHVlbmN5J10gPSBpbnQoR0lEbGlzdFswXVsnR0lEJ10pCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwcmludCh0ZXJtWydjb25zdGl0dWVuY3knXSkKPHxmaW1fZW5kfD4="]
["0079cd9a1c9858deccf8054f86b028bf23ff6bd4-1","0079cd9a1c9858deccf8054f86b028bf23ff6bd4","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nOiB1dGYtOAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgojIEluWzY5XToKCgo8fGZpbV9lbmR8Pg=="]
["0079cd9a1c9858deccf8054f86b028bf23ff6bd4-2","0079cd9a1c9858deccf8054f86b028bf23ff6bd4","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nOiB1dGYtOAoKIyBJbls2OV06CgoKZGVmIGlzUHJpbWUobik6CiAgICBmb3IgaSBpbiByYW5nZSgyLG4pOgogICAgICAgIGlmIG4gJSBpID09MDoKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICBlbHNlOgogICAgICAgIHJldHVybiBUcnVlCgoKIyBJbls3MF06Cgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cgppc1ByaW1lKDcpCgoKPHxmaW1fZW5kfD4="]
["c1212d7f563c7cc7d74993e5ad73825760fb23bb-1","c1212d7f563c7cc7d74993e5ad73825760fb23bb","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRraW50ZXIgYXMgdGsKaW1wb3J0IHRraW50ZXIudHRrIGFzIHR0awpmcm9tIHB5c3FsY2lwaGVyMyBpbXBvcnQgZGJhcGkyIGFzIGRiCgpmcm9tIGZvcm0gaW1wb3J0IEZvcm0sIERhdGUsIFRleHRib3gKZnJvbSB1dGlscyBpbXBvcnQgKgoKY2xhc3MgQmFzZVZpZXdUYWIodHRrLkZyYW1lKToKICAgIHRhYmxlX25hbWUgPSBOb25lCiAgICBzb3J0X2tleSA9IE5vbmUKICAgIHByaW1hcnlfa2V5cyA9IChOb25lLCkKICAgIFZpZXdGb3JtID0gTm9uZQogICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgCiAgICAgICAgIyBmb3JtIMSRaeG7gW4gdGjDtG5nIHRpbgogICAgICAgIHNlbGYuZm9ybSA9IHNlbGYuVmlld0Zvcm0oc2VsZikKICAgICAgICBzZWxmLmZvcm0ucGxhY2UocmVseD0wLjAxLCByZWx5PTAuMDEsIHJlbHdpZHRoPTAuNDgsIHJlbGhlaWdodD0wLjg4KQogICAgICAgIAogICAgICAgICMgw7QgeGVtIGThu68gbGnhu4d1IOG7nyBiw6puIHBo4bqjaQogICAgICAgIHNlbGYuaXRlbV92aWV3ID0gSXRlbVZpZXcoc2VsZikKICAgICAgICBzZWxmLml0ZW1fdmlldy5wbGFjZShyZWx4PTAuNTEsIHJlbHk9MC4wMSwgcmVsd2lkdGg9MC40OCwgcmVsaGVpZ2h0PTAuOTgpCiAgICAgICAgc2VsZi5pdGVtX3ZpZXcuaW5pdF9jb2x1bW5zKFtkZXNjIGZvciBfLCBkZXNjLCAqXyBpbiBzZWxmLlZpZXdGb3JtLmZpZWxkc10pCiAgICAgICAgc2VsZi5yZWxvYWRfZGF0YSgpCiAgICAgICAgCiAgICAgICAgIyBuw7p0IGPhuq1wIG5o4bqtdCAoY2jhu4luaCBz4butYSkgaMOgbmcKICAgICAgICBzZWxmLnVwZGF0ZV9idXR0b24gPSB0ay5CdXR0b24oc2VsZiwgY29tbWFuZD1zZWxmLnVwZGF0ZV9pdGVtLCB0ZXh0PSJD4bqtcCBuaOG6rXQgKGNo4buJbmggc+G7rWEpIiwgZm9udD1ERUZBVUxUX0ZPTlQpCiAgICAgICAgc2VsZi51cGRhdGVfYnV0dG9uLnBsYWNlKHJlbHg9MC4wMSwgcmVseT0wLjg5LCByZWxoZWlnaHQ9MC4wOSwgcmVsd2lkdGg9MC4yNCkKICAgICAgICAKICAgICAgICAjIG7DunQgY+G6rXAgbmjhuq10IGThu68gbGnhu4d1CiAgICAgICAgc2VsZi51cGRhdGVfYnV0dG9uID0gdGsuQnV0dG9uKHNlbGYsIGNvbW1hbmQ9c2VsZi5yZWxvYWRfZGF0YSwgdGV4dD0iTMOgbSBt4bubaSIsIGZvbnQ9REVGQVVMVF9GT05UKQogICAgICAgIHNlbGYudXBkYXRlX2J1dHRvbi5wbGFjZShyZWx4PTAuMjUsIHJlbHk9MC44OSwgcmVsaGVpZ2h0PTAuMDksIHJlbHdpZHRoPTAuMjQpCiAgICAKICAgIGRlZiB1cGRhdGVfaXRlbShzZWxmKToKICAgICAgICAjIGzhuqV5IGThu68gbGnhu4d1IHThu6sgZm9ybQogICAgICAgIGRhdGEgPSB7a2V5Oih2YWx1ZSBpZiB0eXAgIT0gRGF0ZSBlbHNlIGRhdGUydHModmFsdWUpKQogICAgICAgICAgICAgICAgZm9yIHZhbHVlLCAoa2V5LCBfLCB0eXAsICpfKSBpbiB6aXAoc2VsZi5mb3JtLmdldF9kYXRhKCksIHNlbGYuVmlld0Zvcm0uZmllbGRzKX0KICAgICAgICBmaWVsZHMgPSAnLCcuam9pbihkYXRhKQogICAgICAgIHBsYWNlX2hvbGRlcnMgPSAnLCcuam9pbihbJz8nXSpsZW4oc2VsZi5WaWV3Rm9ybS5maWVsZHMpKQogICAgICAgIHByaW1hcnlfa2V5cyA9ICcsJy5qb2luKHNlbGYucHJpbWFyeV9rZXlzKQogICAgICAgIAogICAgICAgICMgY+G6rXAgbmjhuq10IG3huqt1IGThu68gbGnhu4d1CiAgICAgICAgY29ubiA9IGRiLmNvbm5lY3QoREFUQUJBU0VfUEFUSCkKICAgICAgICBjID0gY29ubi5jdXJzb3IoKQogICAgICAgIGMuZXhlY3V0ZShEQVRBQkFTRV9QUkFHTUFfS0VZKQogICAgICAgIHF1ZXJ5X3ZhbHVlcyA9ICgqZGF0YS52YWx1ZXMoKSwgKihkYXRhW2tleV0gZm9yIGtleSBpbiBzZWxmLnByaW1hcnlfa2V5cykpCiAgICAgICAgYy5leGVjdXRlKGYiIiJVUERBVEUge3NlbGYudGFibGVfbmFtZX0KICAgICAgICAgICAgICAgICAgICAgIFNFVCAoe2ZpZWxkc30pID0gKHtwbGFjZV9ob2xkZXJzfSkKICAgICAgICAgICAgICAgICAgICAgIFdIRVJFICh7cHJpbWFyeV9rZXlzfSkgPSAoPykiIiIsCiAgICAgICAgICAgICAgICAgIHF1ZXJ5X3ZhbHVlcykKICAgICAgICBjb25uLmNvbW1pdCgpCiAgICAgICAgY29ubi5jbG9zZSgpCiAgICAgICAgCiAgICAgICAgIyBsw6BtIG3hu5tpIMO0IHhlbQogICAgICAgIHNlbGYucmVsb2FkX2RhdGEoKQogICAgCiAgICBkZWYgZWRpdF9pdGVtKHNlbGYpOgogICAgICAgIHZhbHVlcyA9IG5leHQoc2VsZi5pdGVtX3ZpZXcuZ2V0X3NlbGVjdGVkKCkpICAgICMgbOG6pXkgZMOybmcgxJHhuqd1IHRpw6puIMSRxrDhu6NjIGNo4buNbgogICAgICAgIHNlbGYuZm9ybS5zZXRfZGF0YSh2YWx1ZXMpCiAgICAKICAgIGRlZiByZWxvYWRfZGF0YShzZWxmKToKICAgICAgICAjIGvhur90IG7hu5FpIHbhu5tpIENTREwKICAgICAgICBjb25uID0gZGIuY29ubmVjdChEQVRBQkFTRV9QQVRIKQogICAgICAgIGMgPSBjb25uLmN1cnNvcigpCiAgICAgICAgYy5leGVjdXRlKERBVEFCQVNFX1BSQUdNQV9LRVkpCiAgICAgICAgYy5leGVjdXRlKGYiU0VMRUNUICogRlJPTSB7c2VsZi50YWJsZV9uYW1lfSBPUkRFUiBCWSB7c2VsZi5zb3J0X2tleX0iKQogICAgICAgIGRhdGEgPSBjLmZldGNoYWxsKCkKCiAgICAgICAgIyBuZ+G6r3Qga+G6v3QgbuG7kWkgduG7m2kgQ1NETAogICAgICAgIGNvbm4uY2xvc2UoKQogICAgICAgIAogICAgICAgIGRhdGEgPSBbW3ZhbHVlIGlmIHR5cCAhPSBEYXRlIGVsc2UgdHMyZGF0ZSh2YWx1ZSkKICAgICAgICAgICAgICAgICBmb3IgdmFsdWUsIChfLCBfLCB0eXAsICpfKSBpbiB6aXAoZGF0dW0sIHNlbGYuVmlld0Zvcm0uZmllbGRzKV0KICAgICAgICAgICAgICAgIGZvciBkYXR1bSBpbiBkYXRhXQogICAgICAgIAogICAgICAgIHNlbGYuaXRlbV92aWV3LmNsZWFyX2l0ZW1zKCkKICAgICAgICBzZWxmLml0ZW1fdmlldy5hZGRfaXRlbXMoZGF0YSkKICAgIAogICAgZGVmIF9pbml0X2Zvcm0oc2VsZik6CiAgICAgICAgcGFzcwogICAgCiAgICBkZWYgX2luaXRfdmlldyhzZWxmKToKICAgICAgICBwYXNzCgpjbGFzcyBJdGVtVmlldyh0dGsuTGFiZWxGcmFtZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCphcmdzLCB0ZXh0PSJE4buvIGxp4buHdSIsKiprd2FyZ3MpCiAgICAgICAgY29udGFpbmVyID0gYXJnc1swXQogICAgICAgIAogICAgICAgIHNlbGYuY29sdW1uY29uZmlndXJlKDAsIHdlaWdodD0yMCkKICAgICAgICBzZWxmLmNvbHVtbmNvbmZpZ3VyZSgxLCB3ZWlnaHQ9MSkKICAgICAgICBzZWxmLnJvd2NvbmZpZ3VyZSgwLCB3ZWlnaHQ9NTApCiAgICAgICAgc2VsZi5yb3djb25maWd1cmUoMSwgd2VpZ2h0PTEpCiAgICAgICAgCiAgICAgICAgIyBi4bqjbmcgeGVtIGThu68gbGnhu4d1CiAgICAgICAgc2VsZi50YWJsZSA9IHR0ay5UcmVldmlldyhzZWxmLCBzaG93PSdoZWFkaW5ncycpCiAgICAgICAgc2VsZi50YWJsZS5ncmlkKHJvdz0wLCBjb2x1bW49MCwKICAgICAgICAgICAgICAgICAgICAgICAgcGFkeD1yZWxhdGl2ZVcoMyksCiAgICAgICAgICAgICAgICAgICAgICAgIHBhZHk9cmVsYXRpdmVIKDMpLAogICAgICAgICAgICAgICAgICAgICAgICBzdGlja3k9Im53ZXMiKQogICAgICAgIAogICAgICAgICMgY29uIGzEg24gZOG7jWMKICAgICAgICBzZWxmLnNjcm9sbGJhclYgPSB0dGsuU2Nyb2xsYmFyKHNlbGYsIG9yaWVudD0idmVydGljYWwiLCBjb21tYW5kPXNlbGYudGFibGUueXZpZXcpCiAgICAgICAgc2VsZi5zY3JvbGxiYXJWLmdyaWQocm93PTAsIGNvbHVtbj0xLCBzdGlja3k9Im53cyIpCiAgICAgICAgc2VsZi50YWJsZS5jb25maWd1cmUoeHNjcm9sbGNvbW1hbmQ9c2VsZi5zY3JvbGxiYXJWLnNldCkKICAgICAgICAKICAgICAgICAjIGNvbiBsxINuIG5nYW5nCiAgICAgICAgc2VsZi5zY3JvbGxiYXJIID0gdHRrLlNjcm9sbGJhcihzZWxmLCBvcmllbnQ9Imhvcml6b250YWwiLCBjb21tYW5kPXNlbGYudGFibGUueHZpZXcpCiAgICAgICAgc2VsZi5zY3JvbGxiYXJILmdyaWQocm93PTEsIGNvbHVtbj0wLCBzdGlja3k9Im53ZSIpCiAgICAgICAgc2VsZi50YWJsZS5jb25maWd1cmUoeHNjcm9sbGNvbW1hbmQ9c2VsZi5zY3JvbGxiYXJILnNldCkKICAgICAgICAKICAgICAgICAjIGNhbGxiYWNrIGtoaSBkb3VibGUtY2xpY2sKICAgICAgICBzZWxmLnRhYmxlLmJpbmQoIjxEb3VibGUtMT4iLCBsYW1iZGEgZXZlbnQ6IGNvbnRhaW5lci5lZGl0X2l0ZW0oKSkKCiAgICBkZWYgaW5pdF9jb2x1bW5zKHNlbGYsIGNvbHVtbnMpOgogICAgICAgIHNlbGYudGFibGVbImNvbHVtbnMiXSA9IHR1cGxlKHJhbmdlKGxlbihjb2x1bW5zKSkpCiAgICAgICAgdyA9IHJlbGF0aXZlVyg3MCkvL2xlbihjb2x1bW5zKQogICAgICAgIGZvciBpLCBjb2x1bW4gaW4gZW51bWVyYXRlKGNvbHVtbnMpOgogICAgICAgICAgICBzZWxmLnRhYmxlLmNvbHVtbihpLCB3aWR0aD13LCBhbmNob3IgPSdzZScpCiAgICAgICAgICAgIHNlbGYudGFibGUuaGVhZGluZyhpLCB0ZXh0PWNvbHVtbikKICAgIAogICAgZGVmIGFkZF9pdGVtcyhzZWxmLCBpdGVtcyk6CiAgICAgICAgZm9yIGl0ZW0gaW4gaXRlbXM6CiAgICAgICAgICAgIHNlbGYudGFibGUuaW5zZXJ0KCIiLCAnZW5kJywgdmFsdWVzPWl0ZW0pCiAgICAKICAgIGRlZiByZXBsYWNlX2l0ZW0oc2VsZiwgaXRlbSk6CiAgICAgICAgaW5kZXggPSBzZWxmLnRhYmxlLnNlbGVjdGlvbigpWzBdCiAgICAgICAgc2VsZi50YWJsZS5kZWxldGUoaW5kZXgpCiAgICAgICAgc2VsZi50YWJsZS5pbnNlcnQoIiIsIGludChpbmRleFsxOl0pIC0gMSwgdmFsdWVzPWl0ZW0pCiAgICAKICAgIGRlZiBkZWxldGVfaXRlbShzZWxmKToKICAgICAgICBpbmRpY2VzID0gc2VsZi50YWJsZS5zZWxlY3Rpb24oKQogICAgICAgIGZvciBpbmRleCBpbiBpbmRpY2VzOgogICAgICAgICAgICBzZWxmLnRhYmxlLmRlbGV0ZShpdGVtKQogICAgCiAgICBkZWYgY2xlYXJfaXRlbXMoc2VsZik6CiAgICAgICAgZm9yIGluZGV4IGluIHNlbGYudGFibGUuZ2V0X2NoaWxkcmVuKCk6CiAgICAgICAgICAgIHNlbGYudGFibGUuZGVsZXRlKGluZGV4KQogICAgCiAgICBkZWYgZ2V0X3NlbGVjdGVkKHNlbGYpOgogICAgICAgIGZvciBpbmRleCBpbiBzZWxmLnRhYmxlLnNlbGVjdGlvbigpOgogICAgICAgICAgICB5aWVsZCBzZWxmLnRhYmxlLml0ZW0oaW5kZXgpWyJ2YWx1ZXMiXQogICAgCiAgICBkZWYgZ2V0X2RhdGEoc2VsZik6CiAgICAgICAgZm9yIGluZGV4IGluIHNlbGYudGFibGUuZ2V0X2NoaWxkcmVuKCk6CiAgICAgICAgICAgIHlpZWxkIHNlbGYudGFibGUuaXRlbShpbmRleClbInZhbHVlcyJdCgoKY2xhc3MgUHJvZHVjdFZpZXdUYWIoQmFzZVZpZXdUYWIpOgogICAgdGFibGVfbmFtZSA9ICJwcm9kdWN0cyIKICAgIHNvcnRfa2V5ID0gIm5hbWUiCiAgICBwcmltYXJ5X2tleXMgPSAoImlkIiwpCiAgICBjbGFzcyBWaWV3Rm9ybShGb3JtKToKICAgICAgICBmcmFtZV9uYW1lID0gIlRow7RuZyB0aW4iCiAgICAgICAgZmllbGRzID0gWwogICAgICAgICAgICAjIG5hbWUsIGRlc2NyaXB0aW9uLCB0eXBlLCB1bml0CiAgICAgICAgICAgICgiaWQiLCAiTcOjIHPhu5EiLCB0ay5JbnRWYXIsIE5vbmUpLAogICAgICAgICAgICAoIm5hbWUiLCAiVMOqbiIsIHRrLlN0cmluZ1ZhciwgTm9uZSksCiAgICAgICAgICAgICgidW5pdCIsICLEkMahbiB24buLIHTDrW5oIiwgKHRrLlN0cmluZ1ZhciwgaXRlbV91bml0cyksIE5vbmUpLAogICAgICAgICAgICAoInByaWNlIiwgIsSQxqFuIGdpw6EgYsOhbiIsIHRrLkRvdWJsZVZhciwgTm9uZSksCiAgICAgICAgICAgICgibm90ZSIsICJHaGkgY2jDuiIsIFRleHRib3gsIE5vbmUpLAogICAgICAgIF0KCgpjbGFzcyBQcm9kdWN0c1ZpZXdUYWIoQmFzZVZpZXdUYWIpOgogICAgdGFibGVfbmFtZSA9ICJwcm9kdWN0cyIKICAgIHNvcnRfa2V5ID0gIm5hbWUiCiAgICBwcmltYXJ5X2tleXMgPSAoImlkIiwpCiAgICBjbGFzcyBWaWV3Rm9ybShGb3JtKToKICAgICAgICBmcmFtZV9uYW1lID0gIlRow7RuZyB0aW4gbeG6t3QgaMOgbmciCiAgICAgICAgZmllbGRzID0gWwogICAgICAgICAgICAjIG5hbWUsIGRlc2NyaXB0aW9uLCB0eXBlLCB1bml0CiAgICAgICAgICAgICgiaWQiLCAiTcOjIHPhu5EiLCB0ay5JbnRWYXIsIE5vbmUpLAogICAgICAgICAgICAoIm5hbWUiLCAiVMOqbiIsIHRrLlN0cmluZ1ZhciwgTm9uZSksCiAgICAgICAgICAgICgidW5pdCIsICLEkMahbiB24buLIHTDrW5oIiwgKHRrLlN0cmluZ1ZhciwgaXRlbV91bml0cyksIE5vbmUpLAogICAgICAgICAgICAoInByaWNlIiwgIsSQxqFuIGdpw6EgYsOhbiIsIHRrLkRvdWJsZVZhciwgIsSR4buTbmciKSwKICAgICAgICAgICAgKCJub3RlIiwgIkdoaSBjaMO6IiwgVGV4dGJveCwgTm9uZSksCiAgICAgICAgXQoKCmNsYXNzIFN1cHBsaWVyc1ZpZXdUYWIoQmFzZVZpZXdUYWIpOgogICAgdGFibGVfbmFtZSA9ICJzdXBwbGllcnMiCiAgICBzb3J0X2tleSA9ICJuYW1lIgogICAgcHJpbWFyeV9rZXlzID0gKCJpZCIsKQogICAgY2xhc3MgVmlld0Zvcm0oRm9ybSk6CiAgICAgICAgZnJhbWVfbmFtZSA9ICJUaMO0bmcgdGluIG5ow6AgY3VuZyBj4bqlcCIKICAgICAgICBmaWVsZHMgPSBbCiAgICAgICAgICAgICMgbmFtZSwgZGVzY3JpcHRpb24sIHR5cGUsIHVuaXQKICAgICAgICAgICAgKCJpZCIsICJNw6Mgc+G7kSIsIHRrLkludFZhciwgTm9uZSksCiAgICAgICAgICAgICgibmFtZSIsICJUw6puIG5ow6AgY3VuZyBj4bqlcCIsIHRrLlN0cmluZ1ZhciwgTm9uZSksCiAgICAgICAgICAgICgicGhvbmUiLCAiU+G7kSDEkWnhu4duIHRob+G6oWkiLCB0ay5TdHJpbmdWYXIsIE5vbmUpLAogICAgICAgICAgICAoIm5vdGUiLCAiR2hpIGNow7oiLCBUZXh0Ym94LCBOb25lKSwKICAgICAgICBdCgo8fGZpbV9ob2xlfD4KICAgIHByaW1hcnlfa2V5cyA9ICgiaWQiLCkKICAgIGNsYXNzIFZpZXdGb3JtKEZvcm0pOgogICAgICAgIGZyYW1lX25hbWUgPSAiVGjDtG5nIHRpbiBuaMOgIGN1bmcgY+G6pXAiCiAgICAgICAgZmllbGRzID0gWwogICAgICAgICAgICAjIG5hbWUsIGRlc2NyaXB0aW9uLCB0eXBlLCB1bml0CiAgICAgICAgICAgICgiaWQiLCAiTcOjIHPhu5EiLCB0ay5JbnRWYXIsIE5vbmUpLAogICAgICAgICAgICAoIm5hbWUiLCAiVMOqbiBraMOhY2ggaMOgbmciLCB0ay5TdHJpbmdWYXIsIE5vbmUpLAogICAgICAgICAgICAoImJpcnRoX3llYXIiLCAiTsSDbSBzaW5oIiwgdGsuSW50VmFyLCBOb25lKSwKICAgICAgICAgICAgKCJwaG9uZSIsICJT4buRIMSRaeG7h24gdGhv4bqhaSIsIHRrLlN0cmluZ1ZhciwgTm9uZSksCiAgICAgICAgICAgICgiZW1haWwiLCAiRS1tYWlsIiwgdGsuU3RyaW5nVmFyLCBOb25lKSwKICAgICAgICAgICAgKCJub3RlIiwgIkdoaSBjaMO6IiwgVGV4dGJveCwgTm9uZSksCiAgICAgICAgXQoKCmNsYXNzIEJpbGxzVmlld1RhYihCYXNlVmlld1RhYik6CiAgICB0YWJsZV9uYW1lID0gImJpbGxzIgogICAgc29ydF9rZXkgPSAiaWQiCiAgICBwcmltYXJ5X2tleXMgPSAoImlkIiwpCiAgICBjbGFzcyBWaWV3Rm9ybShGb3JtKToKICAgICAgICBmcmFtZV9uYW1lID0gIlRow7RuZyB0aW4gaMOzYSDEkcahbiIKICAgICAgICBmaWVsZHMgPSBbCiAgICAgICAgICAgICMgbmFtZSwgZGVzY3JpcHRpb24sIHR5cGUsIHVuaXQKICAgICAgICAgICAgKCJpZCIsICJNw6Mgc+G7kSIsIHRrLkludFZhciwgTm9uZSksCiAgICAgICAgICAgICgiZGF0ZSIsICJOZ8OgeSBow7NhIMSRxqFuIiwgRGF0ZSwgTm9uZSksCiAgICAgICAgICAgICgicGFydG5lcl9pZCIsICJNw6MgxJHhu5FpIHTDoWMiLCB0ay5JbnRWYXIsIE5vbmUpLAogICAgICAgICAgICAoImlzX3NlbGxpbmciLCAiSMOzYSDEkcahbiB4deG6pXQgKGNo4bupIGtow7RuZyBwaOG6o2kgbmjhuq1wKSIsIHRrLkJvb2xlYW5WYXIsIE5vbmUpLAogICAgICAgICAgICAoImJhdGNoX2NvdW50IiwgIlPhu5EgbMO0IGjDoG5nIiwgdGsuSW50VmFyLCBOb25lKSwKICAgICAgICAgICAgKCJub3RlIiwgIkdoaSBjaMO6IiwgVGV4dGJveCwgTm9uZSksCiAgICAgICAgXQogICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgc2VsZi5mb3JtLmlzX3NlbGxpbmdFLmNvbmZpZyhzdGF0ZT0nZGlzYWJsZWQnKQogICAgICAgIHNlbGYuZm9ybS5iYXRjaF9jb3VudEUuY29uZmlnKHN0YXRlPSdyZWFkb25seScpCgoKY2xhc3MgQmF0Y2hlc1ZpZXdUYWIoQmFzZVZpZXdUYWIpOgogICAgdGFibGVfbmFtZSA9ICJiYXRjaGVzIgogICAgc29ydF9rZXkgPSAiaWQiCiAgICBwcmltYXJ5X2tleXMgPSAoImlkIiwpCiAgICBjbGFzcyBWaWV3Rm9ybShGb3JtKToKICAgICAgICBmcmFtZV9uYW1lID0gIlRow7RuZyB0aW4gbMO0IChow7NhIMSRxqFuKSIKICAgICAgICBmaWVsZHMgPSBbCiAgICAgICAgICAgICMgbmFtZSwgZGVzY3JpcHRpb24sIHR5cGUsIHVuaXQKICAgICAgICAgICAgKCJpZCIsICJNw6Mgc+G7kSIsIHRrLkludFZhciwgTm9uZSksCiAgICAgICAgICAgICgiYmlsbF9pZCIsICJNw6MgaMOzYSDEkcahbiIsIHRrLkludFZhciwgTm9uZSksCiAgICAgICAgICAgICgicHJvZHVjdF9pZCIsICJNw6MgaMOgbmcgaMOzYSIsIHRrLkludFZhciwgTm9uZSksCiAgICAgICAgICAgICgiZXhwaXJhdGlvbl9kYXRlIiwgIkjhuqFuIHPhu60gZOG7pW5nIiwgdGsuSW50VmFyLCBOb25lKSwKICAgICAgICAgICAgKCJxdWFudGl0eSIsICJT4buRIGzGsOG7o25nIiwgdGsuSW50VmFyLCBOb25lKSwKICAgICAgICAgICAgKCJwcmljZSIsICLEkMahbiBnacOhIiwgdGsuRG91YmxlVmFyLCAixJHhu5NuZyIpLAogICAgICAgIF0KCgpjbGFzcyBTdG9ja1ZpZXdUYWIoQmFzZVZpZXdUYWIpOgogICAgdGFibGVfbmFtZSA9ICJzdG9jayIKICAgIHNvcnRfa2V5ID0gInByb2R1Y3RfaWQiCiAgICBwcmltYXJ5X2tleXMgPSAoInByb2R1Y3RfaWQiLCAiZXhwaXJhdGlvbl9kYXRlIikKICAgIGNsYXNzIFZpZXdGb3JtKEZvcm0pOgogICAgICAgIGZyYW1lX25hbWUgPSAiVGjDtG5nIHRpbiBow6BuZyBow7NhIHRyb25nIGtobyIKICAgICAgICBmaWVsZHMgPSBbCiAgICAgICAgICAgICMgbmFtZSwgZGVzY3JpcHRpb24sIHR5cGUsIHVuaXQKICAgICAgICAgICAgKCJwcm9kdWN0X2lkIiwgIk3DoyBow6BuZyBow7NhIiwgdGsuSW50VmFyLCBOb25lKSwKICAgICAgICAgICAgKCJleHBpcmF0aW9uX2RhdGUiLCAiSOG6oW4gc+G7rSBk4bulbmciLCB0ay5JbnRWYXIsIE5vbmUpLAogICAgICAgICAgICAoInF1YW50aXR5IiwgIlPhu5EgbMaw4bujbmciLCB0ay5JbnRWYXIsIE5vbmUpLAogICAgICAgIF0KPHxmaW1fc3VmZml4fD4KCmNsYXNzIEN1c3RvbWVyc1ZpZXdUYWIoQmFzZVZpZXdUYWIpOgogICAgdGFibGVfbmFtZSA9ICJjdXN0b21lcnMiCiAgICBzb3J0X2tleSA9ICJuYW1lIgo8fGZpbV9lbmR8Pg=="]
["ec0d3c6cb7ec846321931872ca0db128579b70ba-1","ec0d3c6cb7ec846321931872ca0db128579b70ba","PHxmaW1fcHJlZml4fD4KZGVmIGthcmF0c3ViYU11bHRpcGxpY2F0aW9uKHggLHkpOgogICAgIiIiTXVsdGlwbHkgdHdvIGludGVnZXJzIHVzaW5nIEthcmF0c3ViYSdzIGFsZ29yaXRobS4iIiIKICAgICNjb252ZXJ0IHRvIHN0cmluZ3MgZm9yIGVhc3kgYWNjZXNzIHRvIGRpZ2l0cwogICAgeCA9IHN0cih4KQogICAgeSA9IHN0cih5KQogICAgI2Jhc2UgY2FzZSBmb3IgcmVjdXJzaW9uCiAgICBpZiBsZW4oeCkgPT0gMSBhbmQgbGVuKHkpID09IDE6CiAgICAgICAgcmV0dXJuIGludCh4KSAqIGludCh5KQogICAgaWYgbGVuKHgpIDwgbGVuKHkpOgogICAgICAgIHggPSB6ZXJvUGFkKHgsIGxlbih5KSAtIGxlbih4KSkKICAgIGVsaWYgbGVuKHkpIDwgbGVuKHgpOgogICAgICAgIHkgPSB6ZXJvUGFkKHksIGxlbih4KSAtIGxlbih5KSkKICAgIG4gPSBsZW4oeCkKICAgIGogPSBuLy8yCiAgICAjZm9yIG9kZCBkaWdpdCBpbnRlZ2VycwogICAgaWYgKG4gJSAyKSAhPSAwOgogICAgICAgIGogKz0gMQogICAgQlplcm9QYWRkaW5nID0gbiAtIGoKICAgIEFaZXJvUGFkZGluZyA9IEJaZXJvUGFkZGluZyAqIDIKICAgIGEgPSBpbnQoeFs6al0pCiAgICBiID0gaW50KHhbajpdKQogICAgYyA9IGludCh5WzpqXSkKICAgIGQgPSBpbnQoeVtqOl0pCiAgICAjcmVjdXJzaXZlbHkgY2FsY3VsYXRlCiAgICBhYyA9IGthcmF0c3ViYU11bHRpcGxpY2F0aW9uKGEsIGMpCiAgICBiZCA9IGthcmF0c3ViYU11bHRpcGxpY2F0aW9uKGIsIGQpCiAgICBrID0ga2FyYXRzdWJhTXVsdGlwbGljYXRpb24oYSArIGIsIGMgKyBkKQogICAgQSA9IGludCh6ZXJvUGFkKHN0cihhYyksIEFaZXJvUGFkZGluZywgRmFsc2UpKQogICAgQiA9IGludCh6ZXJvUGFkKHN0cihrIC0gYWMgLSBiZCksIEJaZXJvUGFkZGluZywgRmFsc2UpKQogICAgcmV0dXJuIEEgKyBCICsgYmQKICAgIApkZWYgemVyb1BhZChudW1iZXJTdHJpbmcsIHplcm9zLCBsZWZ0ID0gVHJ1ZSk6CiAgICAiIiJSZXR1cm4gdGhlIHN0cmluZyB3aXRoIHplcm9zIGFkZGVkIHRvIHRoZSBsZWZ0IG9yIHJpZ2h0LiIiIgogICAgZm9yIGkgaW4gcmFuZ2UoemVyb3MpOgogICAgICAgIGlmIGxlZnQ6CiAgICAgICAgICAgIG51bWJlclN0cmluZyA9ICcwJyArIG51bWJlclN0cmluZwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG51bWJlclN0cmluZyA9IG51bWJlclN0cmluZyArICcwJwogICAgcmV0dXJuIG51bWJlclN0cmluZwpkZWYgQml0QWRkKG0sIG4sIGxlbmd0aCk6CiAgICAiIiJSZXR1cm4gbStuIGluIHN0cmluZy4KCiAgICBBcmd1bWVudHM6CiAgICBtIC0tIEJpbmFyeSBudW1iZXIgaW4gc3RyaW5nCiAgICBuIC0tIFNhbWUgYXMgYWJvdmUKICAgIGxlbmd0aCAtLSBUaGUgbGVuZ3RoIG9mIHJldHVybmVkIG51bWJlciAob3ZlcmZsb3dlZCBiaXQgd2lsbCBiZSBpZ25vcmVkKQpzZWxmLmFzc2VydF8oYm9vbGVhbiBleHByZXNzaW9uLCAnbWVzc2FnZScpCiAgICBSZXR1cm5zOiBzdHJpbmcKICAgIEEKICAgICIiIgoKICAgIGxtYXggPSBtYXgobGVuKG0pLCBsZW4obikpCiAgICBjID0gMAogICAgbWwgPSBbMF0gKiAobG1heCAtIGxlbihtKSkgKyBbaW50KHgpIGZvciB4IGluIGxpc3QobSldCiAgICBubCA9IFswXSAqIChsbWF4IC0gbGVuKG4pKSArIFtpbnQoeCkgZm9yIHggaW4gbGlzdChuKV0KICAgIHJsID0gW10KICAgIGZvciBpIGluIHJhbmdlKDEsIGxtYXgrMSk6CiAgICAgICAgaWYgbWxbLWldICsgbmxbLWldICsgYyA9PSAwOgogICAgICAgICAgICBybC5pbnNlcnQoMCwgMCkKICAgICAgICAgICAgYyA9IDAKICAgICAgICBlbGlmIG1sWy1pXSArIG5sWy1pXSArIGMgPT0gMToKICAgICAgICAgICAgcmwuaW5zZXJ0KDAsIDEpCiAgICAgICAgICAgIGMgPSAwCiAgICAgICAgZWxpZiBtbFstaV0gKyBubFstaV0gKyBjID09IDI6CiAgICAgICAgICAgIHJsLmluc2VydCgwLCAwKQogICAgICAgICAgICBjID0gMQogICAgICAgIGVsaWYgbWxbLWldICsgbmxbLWldICsgYyA9PSAzOgogICAgICAgICAgICBybC5pbnNlcnQoMCwgMSkKICAgICAgICAgICAgYyA9IDEKICAgIGlmIGMgPT0gMToKICAgICAgICBybC5pbnNlcnQoMCwgMSkKICAgIGlmIGxlbmd0aCA+IGxlbihybCk6CiAgICAgICAgcmwgPSBbMF0gKiAobGVuZ3RoIC0gbGVuKHJsKSkgKyBybAogICAgZWxzZToKICAgICAgICBybCA9IHJsWy1sZW5ndGg6XQogICAgcmwgPSAiIi5qb2luKFtzdHIoeCkgZm9yIHggaW4gcmxdKQogICAgcmV0dXJuIHJsCgoKZGVmIFR3b0NvbXAobik6CiAgICAiIiJSZXR1cm4gdGhlIHR3bydzIGNvbXBsZW1lbnQgb2YgZ2l2ZW4gbnVtYmVyLgoKICAgIEFyZ3VtZW50czoKICAgIG4gLS0gQmluYXJ5IG51bWJlciBpbiBzdHJpbmcKCiAgICBSZXR1cm5zOiBzdHJpbmcKICAgICIiIgoKICAgIGwgPSBsaXN0KG4pCiAgICBmb3IgaSBpbiByYW5nZShsZW4obCkpOgogICAgICAgIGxbaV0gPSAiMCIgaWYgbFtpXSA9PSAiMSIgZWxzZSAiMSIKICAgIHJldHVybiBCaXRBZGQoIiIuam9pbihsKSwgIjEiLCBsZW4obCkpCgoKZGVmIEJpdFNoaWZ0KG4sIHNoaWZ0KToKICAgICIiIlNoaWZ0IHRoZSBiaXRzIHJpZ2h0d2FyZCBpbiBhcml0aG1ldGljYWwgbWV0aG9kLgogICAgSWYgc2hpZnQgaXMgbmVnYXRpdmUsIGl0IHNoaWZ0cyB0aGUgYml0cyBsZWZ0d2FyZC4KCiAgICBBcmd1bWVudHM6CiAgICBuIC0tIEJpbmFyeSBudW1iZXIgaW4gc3RyaW5nCjx8ZmltX2hvbGV8PgoKICAgIGlmIHNoaWZ0ID4gMDogICAgICAgI1JpZ2h0IHNoaWZ0CiAgICAgICAgaWYgblswXSA9PSAiMCI6CiAgICAgICAgICAgIG5fID0gIiIuam9pbihbIjAiXSAqIHNoaWZ0KSArIG4KICAgICAgICBlbHNlOgogICAgICAgICAgICBuXyA9ICIiLmpvaW4oWyIxIl0gKiBzaGlmdCkgKyBuCiAgICAgICAgcmV0dXJuIG5fWzpsZW4obildCiAgICBlbHNlOgogICAgICAgIG5fID0gbiArICIiLmpvaW4oWyIwIl0gKiAoLXNoaWZ0KSkKICAgICAgICByZXR1cm4gbl9bLWxlbihuKTpdCgoKZGVmIENhbGNCb290aFJlY29kaW5nKG4pOgogICAgIiIiQ2FsY3VsYXRlIHRoZSBCb290aCByZWNvZGluZyBudW1iZXIgb2YgZ2l2ZW4gbi4KCiAgICBBcmd1bWVudHM6CiAgICBuIC0tIEJpbmFyeSBudW1iZXIgdG8gY2FsY3VsYXRlIGluIHN0cmluZwoKICAgIFJldHVybnM6IHN0cmluZwoKICAgIEF0dGVudGlvbjoKICAgICIyIiBpbiByZXR1cm5lZCBzdHJpbmcgcmVwcmVzZW50cyAiMS1oYXQiLgogICAgIiIiCgogICAgbl8gPSBbaW50KHgpIGZvciB4IGluIGxpc3QobiArICIwIildCiAgICByID0gW10KICAgIGZvciBpIGluIHJhbmdlKGxlbihuKSk6CiAgICAgICAgeCA9IG5fW2krMV0gLSBuX1tpXQogICAgICAgIGlmIHggPT0gLTE6IHIuYXBwZW5kKDIpCiAgICAgICAgZWxzZTogICAgICAgci5hcHBlbmQoeCkKICAgIHJldHVybiAiIi5qb2luKFtzdHIoeCkgZm9yIHggaW4gcl0pCgoKZGVmIEdlblplcm9TdHIobik6CiAgICAiIiJHZW5lcmF0ZSBhIGJ1bmNoIG9mIHplcm9lcy4KCiAgICBBcmd1bWVudHM6CiAgICBuIC0tIE51bWJlciBvZiB6ZXJvZXMKCiAgICBSZXR1cm5zOiBzdHJpbmcKICAgICIiIgoKICAgIHJldHVybiAiIi5qb2luKFsiMCJdICogbikKCmRlZiBCb290aFJlY1RvU3RyaW5nKHMsIGluZGVudD0wKToKICAgICIiIkNvbnZlcnQgYSBCb290aCByZWNvZGluZyBudW1iZXIgdG8gaHVtYW4tcmVhZGFibGUgc3RyaW5nLgoKICAgIEFyZ3VtZW50czoKICAgIHMgLS0gU3RyaW5nIG9mIEJvb3RoIHJlY29kaW5nCiAgICBpbmRlbnQgLS0gTnVtYmVyIG9mIHNwYWNlcyBpbiB0aGUgaGVhZCBvZiBsaW5lcyAob3B0aW9uYWwpCgogICAgUmV0dXJuczogc3RyaW5nCiAgICAiIiIKCiAgICBzcCA9ICIgIiAqIGluZGVudAogICAgaCA9IFtdCiAgICBuID0gW10KICAgIGZvciBpIGluIGxpc3Qocyk6CiAgICAgICAgaWYgICBpID09ICIwIjoKICAgICAgICAgICAgaC5hcHBlbmQoIiAiKQogICAgICAgICAgICBuLmFwcGVuZCgiMCIpCiAgICAgICAgZWxpZiBpID09ICIxIjoKICAgICAgICAgICAgaC5hcHBlbmQoIiAiKQogICAgICAgICAgICBuLmFwcGVuZCgiMSIpCiAgICAgICAgZWxpZiBpID09ICIyIjoKICAgICAgICAgICAgaC5hcHBlbmQoIl4iKQogICAgICAgICAgICBuLmFwcGVuZCgiMSIpCiAgICByZXR1cm4gc3AgKyAiIi5qb2luKGgpICsgIlxuIiArIHNwICsgIiIuam9pbihuKQo8fGZpbV9zdWZmaXh8PgogICAgc2hpZnQgLS0gTnVtYmVyIG9mIHRpbWVzIHRvIHNoaWZ0CgogICAgUmV0dXJuczogc3RyaW5nCiAgICAiIiIKPHxmaW1fZW5kfD4="]
["ec0d3c6cb7ec846321931872ca0db128579b70ba-2","ec0d3c6cb7ec846321931872ca0db128579b70ba","PHxmaW1fcHJlZml4fD4KZGVmIGthcmF0c3ViYU11bHRpcGxpY2F0aW9uKHggLHkpOgogICAgIiIiTXVsdGlwbHkgdHdvIGludGVnZXJzIHVzaW5nIEthcmF0c3ViYSdzIGFsZ29yaXRobS4iIiIKICAgICNjb252ZXJ0IHRvIHN0cmluZ3MgZm9yIGVhc3kgYWNjZXNzIHRvIGRpZ2l0cwogICAgeCA9IHN0cih4KQogICAgeSA9IHN0cih5KQogICAgI2Jhc2UgY2FzZSBmb3IgcmVjdXJzaW9uCiAgICBpZiBsZW4oeCkgPT0gMSBhbmQgbGVuKHkpID09IDE6CiAgICAgICAgcmV0dXJuIGludCh4KSAqIGludCh5KQogICAgaWYgbGVuKHgpIDwgbGVuKHkpOgogICAgICAgIHggPSB6ZXJvUGFkKHgsIGxlbih5KSAtIGxlbih4KSkKICAgIGVsaWYgbGVuKHkpIDwgbGVuKHgpOgogICAgICAgIHkgPSB6ZXJvUGFkKHksIGxlbih4KSAtIGxlbih5KSkKICAgIG4gPSBsZW4oeCkKICAgIGogPSBuLy8yCiAgICAjZm9yIG9kZCBkaWdpdCBpbnRlZ2VycwogICAgaWYgKG4gJSAyKSAhPSAwOgogICAgICAgIGogKz0gMQogICAgQlplcm9QYWRkaW5nID0gbiAtIGoKICAgIEFaZXJvUGFkZGluZyA9IEJaZXJvUGFkZGluZyAqIDIKICAgIGEgPSBpbnQoeFs6al0pCiAgICBiID0gaW50KHhbajpdKQogICAgYyA9IGludCh5WzpqXSkKICAgIGQgPSBpbnQoeVtqOl0pCiAgICAjcmVjdXJzaXZlbHkgY2FsY3VsYXRlCiAgICBhYyA9IGthcmF0c3ViYU11bHRpcGxpY2F0aW9uKGEsIGMpCiAgICBiZCA9IGthcmF0c3ViYU11bHRpcGxpY2F0aW9uKGIsIGQpCiAgICBrID0ga2FyYXRzdWJhTXVsdGlwbGljYXRpb24oYSArIGIsIGMgKyBkKQogICAgQSA9IGludCh6ZXJvUGFkKHN0cihhYyksIEFaZXJvUGFkZGluZywgRmFsc2UpKQogICAgQiA9IGludCh6ZXJvUGFkKHN0cihrIC0gYWMgLSBiZCksIEJaZXJvUGFkZGluZywgRmFsc2UpKQogICAgcmV0dXJuIEEgKyBCICsgYmQKICAgIApkZWYgemVyb1BhZChudW1iZXJTdHJpbmcsIHplcm9zLCBsZWZ0ID0gVHJ1ZSk6CiAgICAiIiJSZXR1cm4gdGhlIHN0cmluZyB3aXRoIHplcm9zIGFkZGVkIHRvIHRoZSBsZWZ0IG9yIHJpZ2h0LiIiIgogICAgZm9yIGkgaW4gcmFuZ2UoemVyb3MpOgogICAgICAgIGlmIGxlZnQ6CiAgICAgICAgICAgIG51bWJlclN0cmluZyA9ICcwJyArIG51bWJlclN0cmluZwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG51bWJlclN0cmluZyA9IG51bWJlclN0cmluZyArICcwJwogICAgcmV0dXJuIG51bWJlclN0cmluZwpkZWYgQml0QWRkKG0sIG4sIGxlbmd0aCk6CiAgICAiIiJSZXR1cm4gbStuIGluIHN0cmluZy4KCiAgICBBcmd1bWVudHM6CiAgICBtIC0tIEJpbmFyeSBudW1iZXIgaW4gc3RyaW5nCiAgICBuIC0tIFNhbWUgYXMgYWJvdmUKICAgIGxlbmd0aCAtLSBUaGUgbGVuZ3RoIG9mIHJldHVybmVkIG51bWJlciAob3ZlcmZsb3dlZCBiaXQgd2lsbCBiZSBpZ25vcmVkKQpzZWxmLmFzc2VydF8oYm9vbGVhbiBleHByZXNzaW9uLCAnbWVzc2FnZScpCiAgICBSZXR1cm5zOiBzdHJpbmcKICAgIEEKICAgICIiIgoKICAgIGxtYXggPSBtYXgobGVuKG0pLCBsZW4obikpCiAgICBjID0gMAogICAgbWwgPSBbMF0gKiAobG1heCAtIGxlbihtKSkgKyBbaW50KHgpIGZvciB4IGluIGxpc3QobSldCiAgICBubCA9IFswXSAqIChsbWF4IC0gbGVuKG4pKSArIFtpbnQoeCkgZm9yIHggaW4gbGlzdChuKV0KICAgIHJsID0gW10KICAgIGZvciBpIGluIHJhbmdlKDEsIGxtYXgrMSk6CiAgICAgICAgaWYgbWxbLWldICsgbmxbLWldICsgYyA9PSAwOgogICAgICAgICAgICBybC5pbnNlcnQoMCwgMCkKICAgICAgICAgICAgYyA9IDAKICAgICAgICBlbGlmIG1sWy1pXSArIG5sWy1pXSArIGMgPT0gMToKICAgICAgICAgICAgcmwuaW5zZXJ0KDAsIDEpCiAgICAgICAgICAgIGMgPSAwCiAgICAgICAgZWxpZiBtbFstaV0gKyBubFstaV0gKyBjID09IDI6CiAgICAgICAgICAgIHJsLmluc2VydCgwLCAwKQogICAgICAgICAgICBjID0gMQogICAgICAgIGVsaWYgbWxbLWldICsgbmxbLWldICsgYyA9PSAzOgogICAgICAgICAgICBybC5pbnNlcnQoMCwgMSkKICAgICAgICAgICAgYyA9IDEKICAgIGlmIGMgPT0gMToKICAgICAgICBybC5pbnNlcnQoMCwgMSkKICAgIGlmIGxlbmd0aCA+IGxlbihybCk6CiAgICAgICAgcmwgPSBbMF0gKiAobGVuZ3RoIC0gbGVuKHJsKSkgKyBybAogICAgZWxzZToKICAgICAgICBybCA9IHJsWy1sZW5ndGg6XQogICAgcmwgPSAiIi5qb2luKFtzdHIoeCkgZm9yIHggaW4gcmxdKQogICAgcmV0dXJuIHJsCgoKZGVmIFR3b0NvbXAobik6CiAgICAiIiJSZXR1cm4gdGhlIHR3bydzIGNvbXBsZW1lbnQgb2YgZ2l2ZW4gbnVtYmVyLgoKICAgIEFyZ3VtZW50czoKICAgIG4gLS0gQmluYXJ5IG51bWJlciBpbiBzdHJpbmcKCiAgICBSZXR1cm5zOiBzdHJpbmcKICAgICIiIgoKICAgIGwgPSBsaXN0KG4pCiAgICBmb3IgaSBpbiByYW5nZShsZW4obCkpOgogICAgICAgIGxbaV0gPSAiMCIgaWYgbFtpXSA9PSAiMSIgZWxzZSAiMSIKICAgIHJldHVybiBCaXRBZGQoIiIuam9pbihsKSwgIjEiLCBsZW4obCkpCgoKZGVmIEJpdFNoaWZ0KG4sIHNoaWZ0KToKPHxmaW1faG9sZXw+CiAgICBuIC0tIEJpbmFyeSBudW1iZXIgaW4gc3RyaW5nCiAgICBzaGlmdCAtLSBOdW1iZXIgb2YgdGltZXMgdG8gc2hpZnQKCiAgICBSZXR1cm5zOiBzdHJpbmcKICAgICIiIgoKICAgIGlmIHNoaWZ0ID4gMDogICAgICAgI1JpZ2h0IHNoaWZ0CiAgICAgICAgaWYgblswXSA9PSAiMCI6CiAgICAgICAgICAgIG5fID0gIiIuam9pbihbIjAiXSAqIHNoaWZ0KSArIG4KICAgICAgICBlbHNlOgogICAgICAgICAgICBuXyA9ICIiLmpvaW4oWyIxIl0gKiBzaGlmdCkgKyBuCiAgICAgICAgcmV0dXJuIG5fWzpsZW4obildCiAgICBlbHNlOgogICAgICAgIG5fID0gbiArICIiLmpvaW4oWyIwIl0gKiAoLXNoaWZ0KSkKICAgICAgICByZXR1cm4gbl9bLWxlbihuKTpdCgoKZGVmIENhbGNCb290aFJlY29kaW5nKG4pOgogICAgIiIiQ2FsY3VsYXRlIHRoZSBCb290aCByZWNvZGluZyBudW1iZXIgb2YgZ2l2ZW4gbi4KCiAgICBBcmd1bWVudHM6CiAgICBuIC0tIEJpbmFyeSBudW1iZXIgdG8gY2FsY3VsYXRlIGluIHN0cmluZwoKICAgIFJldHVybnM6IHN0cmluZwoKICAgIEF0dGVudGlvbjoKICAgICIyIiBpbiByZXR1cm5lZCBzdHJpbmcgcmVwcmVzZW50cyAiMS1oYXQiLgogICAgIiIiCgogICAgbl8gPSBbaW50KHgpIGZvciB4IGluIGxpc3QobiArICIwIildCiAgICByID0gW10KICAgIGZvciBpIGluIHJhbmdlKGxlbihuKSk6CiAgICAgICAgeCA9IG5fW2krMV0gLSBuX1tpXQogICAgICAgIGlmIHggPT0gLTE6IHIuYXBwZW5kKDIpCiAgICAgICAgZWxzZTogICAgICAgci5hcHBlbmQoeCkKICAgIHJldHVybiAiIi5qb2luKFtzdHIoeCkgZm9yIHggaW4gcl0pCgoKZGVmIEdlblplcm9TdHIobik6CiAgICAiIiJHZW5lcmF0ZSBhIGJ1bmNoIG9mIHplcm9lcy4KCiAgICBBcmd1bWVudHM6CiAgICBuIC0tIE51bWJlciBvZiB6ZXJvZXMKCiAgICBSZXR1cm5zOiBzdHJpbmcKICAgICIiIgoKICAgIHJldHVybiAiIi5qb2luKFsiMCJdICogbikKCmRlZiBCb290aFJlY1RvU3RyaW5nKHMsIGluZGVudD0wKToKICAgICIiIkNvbnZlcnQgYSBCb290aCByZWNvZGluZyBudW1iZXIgdG8gaHVtYW4tcmVhZGFibGUgc3RyaW5nLgoKICAgIEFyZ3VtZW50czoKICAgIHMgLS0gU3RyaW5nIG9mIEJvb3RoIHJlY29kaW5nCiAgICBpbmRlbnQgLS0gTnVtYmVyIG9mIHNwYWNlcyBpbiB0aGUgaGVhZCBvZiBsaW5lcyAob3B0aW9uYWwpCgogICAgUmV0dXJuczogc3RyaW5nCiAgICAiIiIKCiAgICBzcCA9ICIgIiAqIGluZGVudAogICAgaCA9IFtdCiAgICBuID0gW10KICAgIGZvciBpIGluIGxpc3Qocyk6CiAgICAgICAgaWYgICBpID09ICIwIjoKICAgICAgICAgICAgaC5hcHBlbmQoIiAiKQogICAgICAgICAgICBuLmFwcGVuZCgiMCIpCiAgICAgICAgZWxpZiBpID09ICIxIjoKICAgICAgICAgICAgaC5hcHBlbmQoIiAiKQogICAgICAgICAgICBuLmFwcGVuZCgiMSIpCiAgICAgICAgZWxpZiBpID09ICIyIjoKICAgICAgICAgICAgaC5hcHBlbmQoIl4iKQogICAgICAgICAgICBuLmFwcGVuZCgiMSIpCiAgICByZXR1cm4gc3AgKyAiIi5qb2luKGgpICsgIlxuIiArIHNwICsgIiIuam9pbihuKQo8fGZpbV9zdWZmaXh8PgogICAgIiIiU2hpZnQgdGhlIGJpdHMgcmlnaHR3YXJkIGluIGFyaXRobWV0aWNhbCBtZXRob2QuCiAgICBJZiBzaGlmdCBpcyBuZWdhdGl2ZSwgaXQgc2hpZnRzIHRoZSBiaXRzIGxlZnR3YXJkLgoKICAgIEFyZ3VtZW50czoKPHxmaW1fZW5kfD4="]
["da28b855046014ba26642f35521f4b04f33bc915-1","da28b855046014ba26642f35521f4b04f33bc915","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gc2NpcHkuc3RhdHMgaW1wb3J0IHJhbmtkYXRhCgoKZGVmIHJlcGxhY2VfaW5mX25wKHgpOgogICAgaWYgbnAuYW55KG5wLmlzaW5mKHgpKToKICAgICAgICB4W25wLmlzaW5mKHgpXSA9IDJlMzAwCiAgICAgICAgeFtucC5pc25hbih4KV0gPSAyZTMwMAogICAgcmV0dXJuIHgKCgpkZWYgcmVwbGFjZV9uYW5fbnAocCk6CiAgICBpZiBucC5hbnkobnAuaXNuYW4ocCkpOgogICAgICAgIHBbbnAuaXNuYW4ocCldID0gMS4wCiAgICAgICAgcFtucC5pc2luZihwKV0gPSAxLjAKICAgICAgICBwID0gbm9ybWFsaXplKHApCiAgICByZXR1cm4gcAoKCmRlZiBsb2dzdW1leHAoeCwgYXhpcz0xKToKICAgIG1heF94ID0geC5tYXgoYXhpcz1heGlzLCBrZWVwZGltcz1UcnVlKQogICAgcmV0dXJuIG1heF94ICsgbnAubG9nKG5wLnN1bShucC5leHAoeCAtIG1heF94KSwgYXhpcz1heGlzLCBrZWVwZGltcz1UcnVlKSkKCgpkZWYgc29mdG1heCh4LCBheGlzPTEpOgogICAgIiIiCiAgICBUYWtlIHNvZnRtYXggZm9yIHRoZSBnaXZlbiBudW1weSBhcnJheS4KICAgIDpwYXJhbSBheGlzOiBUaGUgYXhpcyBhcm91bmQgd2hpY2ggdGhlIHNvZnRtYXggaXMgYXBwbGllZAogICAgOnBhcmFtIHg6IGFycmF5LWxpa2UsIHNoYXBlIChuX3NhbXBsZXMsIC4uLikKICAgIDpyZXR1cm46IHNvZnRtYXggdGFrZW4gYXJvdW5kIHRoZSBnaXZlbiBheGlzCiAgICAiIiIKICAgIGxzZSA9IGxvZ3N1bWV4cCh4LCBheGlzPWF4aXMpCiAgICByZXR1cm4gbnAuZXhwKHggLSBsc2UpCgoKZGVmIHNpZ21vaWQoeCk6CiAgICB4ID0gMS4wIC8gKDEuMCArIG5wLmV4cCgteCkpCiAgICByZXR1cm4geAoKCmRlZiBub3JtYWxpemUoeCwgYXhpcz0xKToKICAgICIiIgogICAgTm9ybWFsaXplIHRoZSBnaXZlbiB0d28gZGltZW5zaW9uYWwgbnVtcHkgYXJyYXkgYXJvdW5kIHRoZSByb3cuCiAgICA6cGFyYW0gYXhpczogVGhlIGF4aXMgYXJvdW5kIHdoaWNoIHRoZSBub3JtIGlzIGFwcGxpZWQKICAgIDpwYXJhbSB4OiB0aGVhbm8gb3IgbnVtcHkgYXJyYXktbGlrZSwgc2hhcGUgKG5fc2FtcGxlcywgbl9vYmplY3RzKQogICAgOnJldHVybjogbm9ybWFsaXplIHRoZSBhcnJheSBhcm91bmQgdGhlIGF4aXM9MQogICAgIiIiCiAgICByZXR1cm4geCAvIG5wLnN1bSh4LCBheGlzPWF4aXMsIGtlZXBkaW1zPVRydWUpCgoKZGVmIHNjb3Jlc190b19yYW5raW5ncyhzY29yZV9tYXRyaXgpOgogICAgbWFzazMgPSBucC5lcXVhbChzY29yZV9tYXRyaXhbOiwgTm9uZV0gLSBzY29yZV9tYXRyaXhbOiwgOiwgTm9uZV0sIDApCiAgICBuX29iamVjdHMgPSBzY29yZV9tYXRyaXguc2hhcGVbMV0KICAgIHRpZXMgPSBucC5zdW0obnAuc3VtKG1hc2szLCBheGlzPSgxLCAyKSkgLSBuX29iamVjdHMpCiAgICByYW5raW5ncyA9IG5wLmVtcHR5X2xpa2Uoc2NvcmVfbWF0cml4KQo8fGZpbV9ob2xlfD4KICAgICAgICBvcmRlcmluZ3MgPSBucC5hcmdzb3J0KHNjb3JlX21hdHJpeCwgYXhpcz0xKVs6LCA6Oi0xXQogICAgICAgIHJhbmtpbmdzID0gbnAuYXJnc29ydChvcmRlcmluZ3MsIGF4aXM9MSkKICAgIHJldHVybiByYW5raW5ncwoKCmRlZiByYW5raW5nX29yZGVyaW5nX2NvbnZlcnNpb24oaW5wdXQpOgogICAgIiIiQ29udmVydHMgYSByYW5raW5nIHRvIGFuIG9yZGVyaW5nLgoKICAgIEEgcmFua2luZyBpcyBhIGxpc3Qgb2Ygb2JqZWN0IHJhbmtzLCB3aXRoIHRoZSBvYmplY3QgaWRlbnRpdGllcwogICAgYmVpbmcgZGV0ZXJtaW5lZCBieSB0aGUgbGlzdCBpbmRpY2VzLiBJbiBjb250cmFzdCwgYW4gb3JkZXJpbmcgaXMgYQogICAgbGlzdCBvZiBvYmplY3QgaWRlbnRpdGllcyB3aXRoIHRoZSBhcnJheSBpbmRpY2VzIGRldGVybWluaW5nIHRoZQogICAgb3JkZXIuCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICBDb25zaWRlciB0aGUgcmFua2luZyAwID4gMyA+IDEgPiAyLiBUaGUgMXN0IG9iamVjdCBpcyBhdCB0aGUgMm5kCiAgICBwb3NpdGlvbiwgdGhlIDJuZCBvYmplY3Qgb24gdGhlIDNyZCBwb3NpdGlvbiBldGMuIFRoZSByZXN1bHRpbmcKICAgIHJhbmtpbmcgaXM6CgogICAgPj4+IHJhbmtpbmcgPSBbWzAsIDIsIDMsIDFdXQoKICAgIFdoaWNoIGNhbiBiZSBjb252ZXJ0ZWQgYmFjayB0byBhbiBvcmRlcmluZzoKCiAgICA+Pj4gcmFua2luZ19vcmRlcmluZ19jb252ZXJzaW9uKHJhbmtpbmcpLnRvbGlzdCgpCiAgICBbWzAsIDMsIDEsIDJdXQoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHJhbmtpbmc6IDJkIGFycmF5IG9mIGludGVnZXJzLCB1bmlxdWUgd2l0aGluIGVhY2ggcm93CiAgICAgICAgVGhlIG9iamVjdCByYW5raW5ncy4KICAgICIiIgogICAgb3V0cHV0ID0gbnAuYXJnc29ydChpbnB1dCwgYXhpcz0xKQogICAgcmV0dXJuIG91dHB1dAo8fGZpbV9zdWZmaXh8PgogICAgaWYgdGllcyA+IDA6CiAgICAgICAgZm9yIGksIHMgaW4gZW51bWVyYXRlKHNjb3JlX21hdHJpeCk6CiAgICAgICAgICAgIHJhbmtpbmdzW2ldID0gbGVuKHMpIC0gcmFua2RhdGEocykKICAgIGVsc2U6Cjx8ZmltX2VuZHw+"]
["da28b855046014ba26642f35521f4b04f33bc915-2","da28b855046014ba26642f35521f4b04f33bc915","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gc2NpcHkuc3RhdHMgaW1wb3J0IHJhbmtkYXRhCgoKZGVmIHJlcGxhY2VfaW5mX25wKHgpOgogICAgaWYgbnAuYW55KG5wLmlzaW5mKHgpKToKICAgICAgICB4W25wLmlzaW5mKHgpXSA9IDJlMzAwCiAgICAgICAgeFtucC5pc25hbih4KV0gPSAyZTMwMAogICAgcmV0dXJuIHgKCgpkZWYgcmVwbGFjZV9uYW5fbnAocCk6CiAgICBpZiBucC5hbnkobnAuaXNuYW4ocCkpOgogICAgICAgIHBbbnAuaXNuYW4ocCldID0gMS4wCiAgICAgICAgcFtucC5pc2luZihwKV0gPSAxLjAKICAgICAgICBwID0gbm9ybWFsaXplKHApCiAgICByZXR1cm4gcAoKCmRlZiBsb2dzdW1leHAoeCwgYXhpcz0xKToKICAgIG1heF94ID0geC5tYXgoYXhpcz1heGlzLCBrZWVwZGltcz1UcnVlKQogICAgcmV0dXJuIG1heF94ICsgbnAubG9nKG5wLnN1bShucC5leHAoeCAtIG1heF94KSwgYXhpcz1heGlzLCBrZWVwZGltcz1UcnVlKSkKCgpkZWYgc29mdG1heCh4LCBheGlzPTEpOgogICAgIiIiCiAgICBUYWtlIHNvZnRtYXggZm9yIHRoZSBnaXZlbiBudW1weSBhcnJheS4KICAgIDpwYXJhbSBheGlzOiBUaGUgYXhpcyBhcm91bmQgd2hpY2ggdGhlIHNvZnRtYXggaXMgYXBwbGllZAogICAgOnBhcmFtIHg6IGFycmF5LWxpa2UsIHNoYXBlIChuX3NhbXBsZXMsIC4uLikKICAgIDpyZXR1cm46IHNvZnRtYXggdGFrZW4gYXJvdW5kIHRoZSBnaXZlbiBheGlzCiAgICAiIiIKICAgIGxzZSA9IGxvZ3N1bWV4cCh4LCBheGlzPWF4aXMpCiAgICByZXR1cm4gbnAuZXhwKHggLSBsc2UpCgoKZGVmIHNpZ21vaWQoeCk6CiAgICB4ID0gMS4wIC8gKDEuMCArIG5wLmV4cCgteCkpCiAgICByZXR1cm4geAoKCmRlZiBub3JtYWxpemUoeCwgYXhpcz0xKToKICAgICIiIgogICAgTm9ybWFsaXplIHRoZSBnaXZlbiB0d28gZGltZW5zaW9uYWwgbnVtcHkgYXJyYXkgYXJvdW5kIHRoZSByb3cuCiAgICA6cGFyYW0gYXhpczogVGhlIGF4aXMgYXJvdW5kIHdoaWNoIHRoZSBub3JtIGlzIGFwcGxpZWQKICAgIDpwYXJhbSB4OiB0aGVhbm8gb3IgbnVtcHkgYXJyYXktbGlrZSwgc2hhcGUgKG5fc2FtcGxlcywgbl9vYmplY3RzKQogICAgOnJldHVybjogbm9ybWFsaXplIHRoZSBhcnJheSBhcm91bmQgdGhlIGF4aXM9MQogICAgIiIiCiAgICByZXR1cm4geCAvIG5wLnN1bSh4LCBheGlzPWF4aXMsIGtlZXBkaW1zPVRydWUpCgoKZGVmIHNjb3Jlc190b19yYW5raW5ncyhzY29yZV9tYXRyaXgpOgogICAgbWFzazMgPSBucC5lcXVhbChzY29yZV9tYXRyaXhbOiwgTm9uZV0gLSBzY29yZV9tYXRyaXhbOiwgOiwgTm9uZV0sIDApCiAgICBuX29iamVjdHMgPSBzY29yZV9tYXRyaXguc2hhcGVbMV0KICAgIHRpZXMgPSBucC5zdW0obnAuc3VtKG1hc2szLCBheGlzPSgxLCAyKSkgLSBuX29iamVjdHMpCiAgICByYW5raW5ncyA9IG5wLmVtcHR5X2xpa2Uoc2NvcmVfbWF0cml4KQogICAgaWYgdGllcyA+IDA6CiAgICAgICAgZm9yIGksIHMgaW4gZW51bWVyYXRlKHNjb3JlX21hdHJpeCk6CiAgICAgICAgICAgIHJhbmtpbmdzW2ldID0gbGVuKHMpIC0gcmFua2RhdGEocykKICAgIGVsc2U6CiAgICAgICAgb3JkZXJpbmdzID0gbnAuYXJnc29ydChzY29yZV9tYXRyaXgsIGF4aXM9MSlbOiwgOjotMV0KICAgICAgICByYW5raW5ncyA9IG5wLmFyZ3NvcnQob3JkZXJpbmdzLCBheGlzPTEpCiAgICByZXR1cm4gcmFua2luZ3MKCgpkZWYgcmFua2luZ19vcmRlcmluZ19jb252ZXJzaW9uKGlucHV0KToKICAgICIiIkNvbnZlcnRzIGEgcmFua2luZyB0byBhbiBvcmRlcmluZy4KCiAgICBBIHJhbmtpbmcgaXMgYSBsaXN0IG9mIG9iamVjdCByYW5rcywgd2l0aCB0aGUgb2JqZWN0IGlkZW50aXRpZXMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgYmVpbmcgZGV0ZXJtaW5lZCBieSB0aGUgbGlzdCBpbmRpY2VzLiBJbiBjb250cmFzdCwgYW4gb3JkZXJpbmcgaXMgYQogICAgbGlzdCBvZiBvYmplY3QgaWRlbnRpdGllcyB3aXRoIHRoZSBhcnJheSBpbmRpY2VzIGRldGVybWluaW5nIHRoZQogICAgb3JkZXIuCgo8fGZpbV9lbmR8Pg=="]
["b6dbd7416081fd972f9e048de12c34688be2a89e-1","b6dbd7416081fd972f9e048de12c34688be2a89e","PHxmaW1fcHJlZml4fD4KIyBzeXN0ZW0gaW1wb3J0cwppbXBvcnQgZGF0ZXRpbWUKIyBmcmFtZXdvcmsgaW1wb3J0cwpmcm9tIGZsYXNrIGltcG9ydCBCbHVlcHJpbnQsIHJlcXVlc3QsIHJlbmRlcl90ZW1wbGF0ZSwgZmxhc2gsIHJlZGlyZWN0LCB1cmxfZm9yLCBzZXNzaW9uLCBjdXJyZW50X2FwcCwganNvbmlmeQpmcm9tIGZsYXNrLmV4dC5sb2dpbiBpbXBvcnQgbG9naW5fcmVxdWlyZWQsIGN1cnJlbnRfdXNlcgpmcm9tIGZsYXNrLmV4dC53dGYgaW1wb3J0IEZvcm0KZnJvbSB3dGZvcm1zIGltcG9ydCBTdHJpbmdGaWVsZCwgU3VibWl0RmllbGQKIyBhcHAgaW1wb3J0cwpmcm9tIC4udXNlcnMgaW1wb3J0IG1hbmFnZXJfcmVxdWlyZWQKZnJvbSBtb2RlbHMgaW1wb3J0IFNlcnZpY2VzCmZyb20gZm9ybXMgaW1wb3J0IFNlcnZpY2VGb3JtCmZyb20gcGx1Z2lucyBpbXBvcnQgUkVHSVNURVJFRF9TRVJWSUNFUwoKCm1vZCA9IEJsdWVwcmludCgnc2VydmljZXMnLF9fbmFtZV9fKQoKCkBtb2QuYmVmb3JlX3JlcXVlc3QKZGVmIGJlZm9yZV9yZXF1ZXN0KCk6CiAgICBzZXNzaW9uWydtZW51J10gPSBjdXJyZW50X2FwcC5jb25maWdbJ01FTlUnXQogICAgc2Vzc2lvblsnYWN0aXZlbWVudSddID0gJ3NlcnZpY2VzJwoKCkBtb2Qucm91dGUoJy9zZXRhcmkvbGlzdGEnKQpAbWFuYWdlcl9yZXF1aXJlZApAbG9naW5fcmVxdWlyZWQKZGVmIGxpc3Rfc2VydmljZXMoKToKICAgICIiIgogICAgR2VuZXJhdGVzIGEgbGlzdCBvZiBhbGwgdGhlIHJlZ2lzdGVyZWQgc2VydmljZXMgdGhhdCBjYW4gYmUgY2hlY2tlZAogICAgIiIiCiAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKCdzZXJ2aWNlcy9zZXR0aW5ncy9saXN0X3NlcnZpY2VzLmh0bWwnLCBwYWdldGl0bGU9J0xpc3RhIHNlcnZpY2lpJywgcmVzdWx0cz11cmxfZm9yKCdzZXJ2aWNlcy5nZXRfcmVzdWx0cycpLCB0YWJsZV9oZWFkPVNlcnZpY2VzLnRhYmxlX2hlYWQoKSwgY29sdW1ucz1TZXJ2aWNlcy5kYXRhdGFibGVzX2NvbHVtbnMoKSkKCgpAbW9kLnJvdXRlKCcvc2V0YXJpL2FkYXVnYScsIG1ldGhvZHM9WydHRVQnLCdQT1NUJ10pCkBtYW5hZ2VyX3JlcXVpcmVkCkBsb2dpbl9yZXF1aXJlZApkZWYgYWRkX3NlcnZpY2UoKToKICAgICIiIgogICAgVXNlZCB0byByZWdpc3RlciBhIG5ldyBzZXJ2aWNlCiAgICAiIiIKCiAgICBmb3JtID0gU2VydmljZUZvcm0oKQoKICAgIGlmIGZvcm0udmFsaWRhdGVfb25fc3VibWl0KCk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzcnYgPSBTZXJ2aWNlcygpCiAgICAgICAgICAgIHNydi5wb3B1bGF0ZV9mcm9tX2Zvcm0oZm9ybSkKICAgICAgICAgICAgc3J2LmF1dGhlbnRpY2F0aW9uLnZhbHVlID0geyJkYiI6cmVxdWVzdC5mb3JtLmdldCgnYXV0aGRiJyksInVzZXIiOnJlcXVlc3QuZm9ybS5nZXQoJ2F1dGh1c2VyJyksInBzd2QiOnJlcXVlc3QuZm9ybS5nZXQoImF1dGhwYXNzIil9CiAgICAgICAgICAgIHNydi5zYXZlKCkKICAgICAgICAgICAgZmxhc2goJ0RhdGVsZSBhdSBmb3N0IGFkYXVnYXRlIScsIGNhdGVnb3J5PSdhbGVydC1zdWNjZXNzJykKICAgICAgICAgICAgcmV0dXJuIHJlZGlyZWN0KHVybF9mb3IoJ3NlcnZpY2VzLmxpc3Rfc2VydmljZXMnKSkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKICAgICAgICAgICAgZmxhc2goJ0RhdGVsZSBudSBwb3QgZmkgYWRhdWdhdGUhJywgY2F0ZWdvcnk9J2FsZXJ0LWRhbmdlcicpCgogICAgcmV0dXJuIHJlbmRlcl90ZW1wbGF0ZSgnc2VydmljZXMvc2V0dGluZ3MvYWRkLmh0bWwnLCBwYWdldGl0bGU9J0FkYXVnYSBzZXJ2aWNpdScsIGZvcm09Zm9ybSkKCgpAbW9kLnJvdXRlKCcvc2V0YXJpL21vZGlmaWNhLzxzcnZpZD4nLCBtZXRob2RzPVsnR0VUJywnUE9TVCddKQpAbWFuYWdlcl9yZXF1aXJlZApAbG9naW5fcmVxdWlyZWQKZGVmIGVkaXRfc2VydmljZShzcnZpZCk6CiAgICAiIiIKICAgIFVzZWQgdG8gZWRpdCBhIHJlZ2lzdGVyZWQgc2VydmljZQogICAgIiIiCiAgICBjbGFzcyBGKFNlcnZpY2VGb3JtKToKICAgICAgICBwYXNzCiAgICAKICAgIHNydiA9IFNlcnZpY2VzLmdldCh7Il9pZCI6c3J2aWR9KQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBmb3JtID0gU2VydmljZUZvcm0oKQoKICAgIGlmIGZvcm0udmFsaWRhdGVfb25fc3VibWl0KCk6CiAgICAgICAgdHJ5Ogo8fGZpbV9lbmR8Pg=="]
["b6dbd7416081fd972f9e048de12c34688be2a89e-2","b6dbd7416081fd972f9e048de12c34688be2a89e","PHxmaW1fcHJlZml4fD4KIyBzeXN0ZW0gaW1wb3J0cwppbXBvcnQgZGF0ZXRpbWUKIyBmcmFtZXdvcmsgaW1wb3J0cwpmcm9tIGZsYXNrIGltcG9ydCBCbHVlcHJpbnQsIHJlcXVlc3QsIHJlbmRlcl90ZW1wbGF0ZSwgZmxhc2gsIHJlZGlyZWN0LCB1cmxfZm9yLCBzZXNzaW9uLCBjdXJyZW50X2FwcCwganNvbmlmeQpmcm9tIGZsYXNrLmV4dC5sb2dpbiBpbXBvcnQgbG9naW5fcmVxdWlyZWQsIGN1cnJlbnRfdXNlcgpmcm9tIGZsYXNrLmV4dC53dGYgaW1wb3J0IEZvcm0KZnJvbSB3dGZvcm1zIGltcG9ydCBTdHJpbmdGaWVsZCwgU3VibWl0RmllbGQKIyBhcHAgaW1wb3J0cwpmcm9tIC4udXNlcnMgaW1wb3J0IG1hbmFnZXJfcmVxdWlyZWQKZnJvbSBtb2RlbHMgaW1wb3J0IFNlcnZpY2VzCmZyb20gZm9ybXMgaW1wb3J0IFNlcnZpY2VGb3JtCmZyb20gcGx1Z2lucyBpbXBvcnQgUkVHSVNURVJFRF9TRVJWSUNFUwoKCm1vZCA9IEJsdWVwcmludCgnc2VydmljZXMnLF9fbmFtZV9fKQoKCkBtb2QuYmVmb3JlX3JlcXVlc3QKZGVmIGJlZm9yZV9yZXF1ZXN0KCk6CiAgICBzZXNzaW9uWydtZW51J10gPSBjdXJyZW50X2FwcC5jb25maWdbJ01FTlUnXQogICAgc2Vzc2lvblsnYWN0aXZlbWVudSddID0gJ3NlcnZpY2VzJwoKCkBtb2Qucm91dGUoJy9zZXRhcmkvbGlzdGEnKQpAbWFuYWdlcl9yZXF1aXJlZApAbG9naW5fcmVxdWlyZWQKZGVmIGxpc3Rfc2VydmljZXMoKToKICAgICIiIgogICAgR2VuZXJhdGVzIGEgbGlzdCBvZiBhbGwgdGhlIHJlZ2lzdGVyZWQgc2VydmljZXMgdGhhdCBjYW4gYmUgY2hlY2tlZAogICAgIiIiCiAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKCdzZXJ2aWNlcy9zZXR0aW5ncy9saXN0X3NlcnZpY2VzLmh0bWwnLCBwYWdldGl0bGU9J0xpc3RhIHNlcnZpY2lpJywgcmVzdWx0cz11cmxfZm9yKCdzZXJ2aWNlcy5nZXRfcmVzdWx0cycpLCB0YWJsZV9oZWFkPVNlcnZpY2VzLnRhYmxlX2hlYWQoKSwgY29sdW1ucz1TZXJ2aWNlcy5kYXRhdGFibGVzX2NvbHVtbnMoKSkKCgpAbW9kLnJvdXRlKCcvc2V0YXJpL2FkYXVnYScsIG1ldGhvZHM9WydHRVQnLCdQT1NUJ10pCkBtYW5hZ2VyX3JlcXVpcmVkCkBsb2dpbl9yZXF1aXJlZApkZWYgYWRkX3NlcnZpY2UoKToKICAgICIiIgogICAgVXNlZCB0byByZWdpc3RlciBhIG5ldyBzZXJ2aWNlCiAgICAiIiIKCiAgICBmb3JtID0gU2VydmljZUZvcm0oKQoKICAgIGlmIGZvcm0udmFsaWRhdGVfb25fc3VibWl0KCk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzcnYgPSBTZXJ2aWNlcygpCiAgICAgICAgICAgIHNydi5wb3B1bGF0ZV9mcm9tX2Zvcm0oZm9ybSkKICAgICAgICAgICAgc3J2LmF1dGhlbnRpY2F0aW9uLnZhbHVlID0geyJkYiI6cmVxdWVzdC5mb3JtLmdldCgnYXV0aGRiJyksInVzZXIiOnJlcXVlc3QuZm9ybS5nZXQoJ2F1dGh1c2VyJyksInBzd2QiOnJlcXVlc3QuZm9ybS5nZXQoImF1dGhwYXNzIil9CiAgICAgICAgICAgIHNydi5zYXZlKCkKICAgICAgICAgICAgZmxhc2goJ0RhdGVsZSBhdSBmb3N0IGFkYXVnYXRlIScsIGNhdGVnb3J5PSdhbGVydC1zdWNjZXNzJykKICAgICAgICAgICAgcmV0dXJuIHJlZGlyZWN0KHVybF9mb3IoJ3NlcnZpY2VzLmxpc3Rfc2VydmljZXMnKSkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKICAgICAgICAgICAgZmxhc2goJ0RhdGVsZSBudSBwb3QgZmkgYWRhdWdhdGUhJywgY2F0ZWdvcnk9J2FsZXJ0LWRhbmdlcicpCgogICAgcmV0dXJuIHJlbmRlcl90ZW1wbGF0ZSgnc2VydmljZXMvc2V0dGluZ3MvYWRkLmh0bWwnLCBwYWdldGl0bGU9J0FkYXVnYSBzZXJ2aWNpdScsIGZvcm09Zm9ybSkKCgpAbW9kLnJvdXRlKCcvc2V0YXJpL21vZGlmaWNhLzxzcnZpZD4nLCBtZXRob2RzPVsnR0VUJywnUE9TVCddKQpAbWFuYWdlcl9yZXF1aXJlZApAbG9naW5fcmVxdWlyZWQKZGVmIGVkaXRfc2VydmljZShzcnZpZCk6CiAgICAiIiIKICAgIFVzZWQgdG8gZWRpdCBhIHJlZ2lzdGVyZWQgc2VydmljZQogICAgIiIiCiAgICBjbGFzcyBGKFNlcnZpY2VGb3JtKToKICAgICAgICBwYXNzCiAgICAKICAgIHNydiA9IFNlcnZpY2VzLmdldCh7Il9pZCI6c3J2aWR9KQogICAgZm9ybSA9IFNlcnZpY2VGb3JtKCkKCiAgICBpZiBmb3JtLnZhbGlkYXRlX29uX3N1Ym1pdCgpOgogICAgICAgIHRyeToKICAgICAgICAgICAgc3J2LnBvcHVsYXRlX2Zyb21fZm9ybShmb3JtKQogICAgICAgICAgICBwcmludCByZXF1ZXN0LmZvcm0KICAgICAgICAgICAgc3J2LmF1dGhlbnRpY2F0aW9uLnZhbHVlID0geyJkYiI6cmVxdWVzdC5mb3JtLmdldCgnYXV0aGRiJyksInVzZXIiOnJlcXVlc3QuZm9ybS5nZXQoJ2F1dGh1c2VyJyksInBzd2QiOnJlcXVlc3QuZm9ybS5nZXQoImF1dGhwYXNzIil9CiAgICAgICAgICAgIHNydi5zYXZlKCkKICAgICAgICAgICAgZmxhc2goJ0RhdGVsZSBhdSBmb3N0IG1vZGlmaWNhdGUhJywgY2F0ZWdvcnk9J2FsZXJ0LXN1Y2Nlc3MnKQogICAgICAgICAgICByZXR1cm4gcmVkaXJlY3QodXJsX2Zvcignc2VydmljZXMubGlzdF9zZXJ2aWNlcycpKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgogICAgICAgICAgICBmbGFzaCgnTW9kaWZpY2FyaWxlIG51IHBvdCBmaSBzYWx2YXRlIScsIGNhdGVnb3J5PSdhbGVydC1kYW5nZXInKQoKCiAgICBpZiBzcnYuYXV0aGVudGljYXRpb24udmFsdWU6CiAgICAgICAgaWYgc3J2LmF1dGhlbnRpY2F0aW9uLnZhbHVlWydkYiddOgogICAgICAgICAgICBGLmF1dGhkYiA9IFN0cmluZ0ZpZWxkKGxhYmVsPSJEYiBhdXRlbnRpZmljYXJlIikKICAgICAgICBpZiBzcnYuYXV0aGVudGljYXRpb24udmFsdWVbJ3VzZXInXToKICAgICAgICAgICAgRi5hdXRodXNlciA9IFN0cmluZ0ZpZWxkKGxhYmVsPSJVc2VyIikKICAgICAgICBGLmF1dGhwYXNzID0gU3RyaW5nRmllbGQobGFiZWw9IlBhcm9sYSIpCiAgICAgICAgRi5zdWJtaXQgPSBTdWJtaXRGaWVsZCgnU2FsdmVhemEnKQogICAgICAgIAogICAgZm9ybSA9IHNydi5maWxsX2Zvcm0oX2Zvcm09RigpKQogICAgZGVsIGZvcm0uYXV0aGVudGljYXRpb24KICAgIGlmIHNydi5hdXRoZW50aWNhdGlvbi52YWx1ZToKICAgICAgICBpZiBzcnYuYXV0aGVudGljYXRpb24udmFsdWVbJ2RiJ106CiAgICAgICAgICAgIGZvcm0uYXV0aGRiLmRhdGEgPSBzcnYuYXV0aGVudGljYXRpb24udmFsdWVbJ2RiJ10KICAgICAgICBpZiBzcnYuYXV0aGVudGljYXRpb24udmFsdWVbJ3VzZXInXToKICAgICAgICAgICAgZm9ybS5hdXRodXNlci5kYXRhID0gc3J2LmF1dGhlbnRpY2F0aW9uLnZhbHVlWyd1c2VyJ10KICAgICAgICBmb3JtLmF1dGhwYXNzLmRhdGEgPSBzcnYuYXV0aGVudGljYXRpb24udmFsdWVbJ3Bzd2QnXQogICAgICAgIAoKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoJ3NlcnZpY2VzL3NldHRpbmdzL2VkaXQuaHRtbCcsIHBhZ2V0aXRsZT0nRGV0YWxpaSBzZXJ2aWNpdScsIGZvcm09Zm9ybSkKCgpAbW9kLnJvdXRlKCcvc2V0YXJpL3N0ZXJnZS88c3J2aWQ+JykKQG1hbmFnZXJfcmVxdWlyZWQKQGxvZ2luX3JlcXVpcmVkCmRlZiBkZWxldGVfc2VydmljZShzcnZpZCk6CiAgICAiIiIKICAgIFVzZWQgdG8gZGVsZXRlIGFuIGV4aXN0aW5nIHNlcnZpY2UKICAgICIiIgogICAgCiAgICBzcnYgPSBTZXJ2aWNlcy5nZXQoeyJfaWQiOnNydmlkfSkKICAgIHNydi5kZWxldGUoKQoKICAgIHJldHVybiByZWRpcmVjdChyZXF1ZXN0LnJlZmVycmVyKQoKCkBtb2Qucm91dGUoJy9zZXRhcmkvZGV6YWN0aXZlYXphLzxzcnZpZD4nKQpAbWFuYWdlcl9yZXF1aXJlZApAbG9naW5fcmVxdWlyZWQKZGVmIGRlYWN0aXZhdGVfc2VydmljZShzcnZpZCk6CiAgICAiIiIKICAgIFVzZWQgdGhyb3VnaCBBSkFYIHRvIGRlYWN0aXZhdGUgYSBzZXJ2aWNlCiAgICAiIiIKICAgIAogICAgc3J2ID0gU2VydmljZXMuZ2V0KHsiX2lkIjpzcnZpZH0pCiAgICBzcnYudXBkYXRlKHsiJHNldCI6e3Nydi5hY3RpdmUuZGJmaWVsZDpGYWxzZX19KQogICAgCiAgICByZXR1cm4gcmVkaXJlY3QocmVxdWVzdC5yZWZlcnJlcikKCgpAbW9kLnJvdXRlKCcvc2V0YXJpL2FjdGl2ZWF6YS88c3J2aWQ+JykKQG1hbmFnZXJfcmVxdWlyZWQKQGxvZ2luX3JlcXVpcmVkCmRlZiBhY3RpdmF0ZV9zZXJ2aWNlKHNydmlkKToKICAgICIiIgogICAgVXNlZCB0aHJvdWdoIEFKQVggdG8gYWN0aXZhdGUgYW4gZXhpc3Rpbmcgc2VydmljZQogICAgIiIiCiAgICAKICAgIHNydiA9IFNlcnZpY2VzLmdldCh7Il9pZCI6c3J2aWR9KQogICAgc3J2LnVwZGF0ZSh7IiRzZXQiOntzcnYuYWN0aXZlLmRiZmllbGQ6VHJ1ZX19KQogICAgCiAgICByZXR1cm4gcmVkaXJlY3QocmVxdWVzdC5yZWZlcnJlcikKCgpAbW9kLnJvdXRlKCIvc2V0YXJpL2FqYXgvbGlzdGEiLCBtZXRob2RzPVsnUE9TVCddKQpAbWFuYWdlcl9yZXF1aXJlZApAbG9naW5fcmVxdWlyZWQKZGVmIGdldF9yZXN1bHRzKCk6CiAgICAiIiIKICAgIFVzZWQgdGhyb3VnaCBBSkFYIHRvIGdldCBkYXRhdGFibGVzIHJlc3VsdHMKICAgICIiIgogICAgCiAgICByZXN1bHRzID0gU2VydmljZXMudG9fZGF0YXRhYmxlcyhyZXF1ZXN0LmZvcm0pCjx8ZmltX2hvbGV8PgogICAgICAgIGl0ZW1bInNlcnZlciJdID0gIiIiPGEgaHJlZj0iezB9Ij57MX08L2E+IiIiLmZvcm1hdCh1cmxfZm9yKCdzZXJ2aWNlcy5lZGl0X3NlcnZpY2UnLHNydmlkPWl0ZW1bIkRUX1Jvd0lkIl0pLHRlbXApCgogICAgICAgIGFjdGlvbl9jb2x1bW4gPSAiIgogICAgICAgIAogICAgICAgIGlmIGl0ZW1bImFjdGl2ZSJdOgogICAgICAgICAgICBhY3Rpb25fY29sdW1uKz0iIiI8c3Bhbj4KICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iezB9IiBjbGFzcz0iYnRuIGJ0bi14cyBidG4td2FybmluZyI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tZXllLWNsb3NlIiBhcmlhLWhpZGRlbj0idHJ1ZSIgZGF0YS10b2dnbGU9InRvb2x0aXAiIGRhdGEtcGxhY2VtZW50PSJ0b3AiIHRpdGxlPSJEZXphY3RpdmVhemEgc2VydmljaXUiPjwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgIiIiLmZvcm1hdCh1cmxfZm9yKCdzZXJ2aWNlcy5kZWFjdGl2YXRlX3NlcnZpY2UnLHNydmlkPWl0ZW1bIkRUX1Jvd0lkIl0pKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGFjdGlvbl9jb2x1bW4rPSIiIjxzcGFuPgogICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7MH0iIGNsYXNzPSJidG4gYnRuLXhzIGJ0bi1zdWNjZXNzIj48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1leWUtb3BlbiIgYXJpYS1oaWRkZW49InRydWUiIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiBkYXRhLXBsYWNlbWVudD0idG9wIiB0aXRsZT0iQWN0aXZlYXphIHNlcnZpY2l1Ij48L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICA8L3NwYW4+IiIiLmZvcm1hdCh1cmxfZm9yKCdzZXJ2aWNlcy5hY3RpdmF0ZV9zZXJ2aWNlJyxzcnZpZD1pdGVtWyJEVF9Sb3dJZCJdKSkKICAgICAgICBhY3Rpb25fY29sdW1uKz0iIiI8c3Bhbj4KICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJEZWxldGVQYWdlKCd7MH0nKSIgY2xhc3M9ImJ0biBidG4teHMgYnRuLWRhbmdlciI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcmVtb3ZlIiBhcmlhLWhpZGRlbj0idHJ1ZSIgZGF0YS10b2dnbGU9InRvb2x0aXAiIGRhdGEtcGxhY2VtZW50PSJ0b3AiIHRpdGxlPSJTdGVyZ2Ugc2VydmljaXUiPjwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgIDwvc3Bhbj4iIiIuZm9ybWF0KHVybF9mb3IoInNlcnZpY2VzLmRlbGV0ZV9zZXJ2aWNlIixzcnZpZD1pdGVtWyJEVF9Sb3dJZCJdKSkKICAgICAgICAgICAgICAgICAgCiAgICAgICAgaXRlbVsiYWN0aXVuaSJdID0gYWN0aW9uX2NvbHVtbgoKICAgIHJldHVybiBqc29uaWZ5KHJlc3VsdHMpCgoKQG1vZC5yb3V0ZSgnL2RiL2hvbWUnKQpAbG9naW5fcmVxdWlyZWQKZGVmIGhvbWUoKToKICAgICIiIgogICAgR2VuZXJhdGVzIHRoZSBob21lcGFnZSBmb3IgdGhlIHNvZnR3YXJlIHNlcnZpY2VzIHNlY3Rpb24KICAgICIiIgogICAgdGFibGVfaGVhZCA9IFsiU2VydmVyIiwiU2VydmljaXUiLCJVcHRpbWUiLCJPYnNlcnZhdGlpIl0KCiAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKCdzZXJ2aWNlcy9saXN0Lmh0bWwnLCBwYWdldGl0bGU9J1N1bWFyaXphcmUgc3RhdHVzdXJpIGRiJywgcmVzdWx0cz11cmxfZm9yKCdzZXJ2aWNlcy5nZXRfZGF0YXRhYmxlc19yZXN1bHRzJyxfZmlsdGVyPScwJyksdGFibGVfaGVhZD10YWJsZV9oZWFkKQoKCkBtb2Qucm91dGUoJy9kYi88ZGJfdHlwZT4nKQpAbG9naW5fcmVxdWlyZWQKZGVmIGRic3RhdHVzKGRiX3R5cGU9Tm9uZSk6CiAgICAiIiIKICAgIEdlbmVyYXRlcyBhIHN0YXRzIHBhZ2UgZm9yIGVhY2ggc2VydmljZSB0eXBlCiAgICAiIiIKICAgIGxpdmVfc2VydmljZXMgPSBTZXJ2aWNlcy5nZXRfYWN0aXZlKCkKICAgIHJlc3VsdHMgPSBSRUdJU1RFUkVEX1NFUlZJQ0VTW2RiX3R5cGVdWyJwYW5lbCJdKGxpdmVfc2VydmljZXMuZ2V0KGRiX3R5cGUpKQoKICAgIHRlbXBsYXRlID0gJ3NlcnZpY2VzL2RldGFpbGVkXyVzLmh0bWwnICUgZGJfdHlwZQoKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUodGVtcGxhdGUsIHBhZ2V0aXRsZT0nU3RhdHVzdXJpIGRiIHBlbnRydSAnK3N0cihkYl90eXBlKS51cHBlcigpLCByZXN1bHRzPXJlc3VsdHMpCgoKQG1vZC5yb3V0ZSgnL2RiL2FqYXgvbGlzdGEvPF9maWx0ZXI+JywgbWV0aG9kcz1bIlBPU1QiXSkKQGxvZ2luX3JlcXVpcmVkCmRlZiBnZXRfZGF0YXRhYmxlc19yZXN1bHRzKF9maWx0ZXI9Tm9uZSk6CgogICAgbGl2ZV9zZXJ2aWNlcyA9IFNlcnZpY2VzLmdldF9hY3RpdmUoKQoKICAgIHN0YXRzID0gW10KICAgIHN0YXRzX3JlZGlzID0gUkVHSVNURVJFRF9TRVJWSUNFU1sncmVkaXMnXVsiZGF0YXRhYmxlIl0obGl2ZV9zZXJ2aWNlcy5nZXQoJ3JlZGlzJykpCiAgICBzdGF0c19tb25nbyA9IFJFR0lTVEVSRURfU0VSVklDRVNbJ21vbmdvJ11bImRhdGF0YWJsZSJdKGxpdmVfc2VydmljZXMuZ2V0KCdtb25nbycpKQoKICAgIGlmIF9maWx0ZXIgPT0gJ21vbmdvJyBhbmQgc3RhdHNfbW9uZ286CiAgICAgICAgc3RhdHMgPSBzdGF0c19tb25nb1snZGF0YSddCiAgICBlbGlmIF9maWx0ZXIgPT0gJ3JlZGlzJyBhbmQgc3RhdHNfcmVkaXM6CiAgICAgICAgc3RhdHMgPSBzdGF0c19yZWRpc1snZGF0YSddCiAgICBlbHNlOgogICAgICAgIHN0YXRzLmV4dGVuZChzdGF0c19tb25nb1snZGF0YSddKQogICAgICAgIHN0YXRzLmV4dGVuZChzdGF0c19yZWRpc1snZGF0YSddKQoKICAgIG91dHB1dCA9IHt9CiAgICBvdXRwdXRbJ2RyYXcnXSA9IHJlcXVlc3QuZm9ybVsnZHJhdyddCiAgICBvdXRwdXRbJ2RhdGEnXSA9IHN0YXRzCiAgICBvdXRwdXRbJ3JlY29yZHNUb3RhbCddID0gbGVuKHN0YXRzKQogICAgb3V0cHV0WydyZWNvcmRzRmlsdGVyZWQnXSA9IGxlbihzdGF0cykKCiAgICByZXR1cm4ganNvbmlmeShvdXRwdXQpCgoKCjx8ZmltX3N1ZmZpeHw+CgogICAgZm9yIGl0ZW0gaW4gcmVzdWx0c1siZGF0YSJdOgogICAgICAgIAogICAgICAgIHRlbXAgPSBpdGVtWyJzZXJ2ZXIiXQo8fGZpbV9lbmR8Pg=="]
["41b4d7bfe1eee9b00867961fafb93e5849ff308e-1","41b4d7bfe1eee9b00867961fafb93e5849ff308e","PHxmaW1fcHJlZml4fD4KCmltcG9ydCBqb2JsaWIKCmNsYXNzIHNjYWxlcl9jbGFzc19CTkRWSUg6CiAgICAiIiIKICAgIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBzY2FsZSBibHVlLCBuZHZpIGFuZCBoZWlnaHQgY29sdW1ucyBvZiBhIHBhbmRhcyBkYXRhZnJhbWUgZnJvbSBhIC50aWYgZmlsZS4KICAgIFdoaWNoIHNob3VsZCBiZSBiYW5kIDMsIGJhbmQgNSBhbmQgYmFuZCA2IHJlc3BlY3RpdmVseS4KCiAgICBTY2FsZXJzIHNob3VsZCBoYXZlIGJlZW4gbWFkZSBpbmRlcGVudGx5IQogICAgCiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzY2FsZXJfZmlsZV9iYW5kMyA9ICIiLHNjYWxlcl9maWxlX2JhbmQ1ID0gIiIsIHNjYWxlcl9maWxlX2JhbmQ2ID0gIiIpIDoKICAgICAgICAiIiIKICAgICAgICBJbml0IG9mIHRoaXMgY2xhc3MuCgogICAgICAgIEBwYXJhbSBzY2FsZXJfZmlsZV9iYW5kMzogUGF0aCB0byBhIGZpbGUgd2hpY2ggY29udGFpbnMgdGhlIHNjYWxlciBmb3IgYmFuZCAzLgogICAgICAgIEBwYXJhbSBzY2FsZXJfZmlsZV9iYW5kNTogUGF0aCB0byBhIGZpbGUgd2hpY2ggY29udGFpbnMgdGhlIHNjYWxlciBmb3IgYmFuZCA1LgogICAgICAgIEBwYXJhbSBzY2FsZXJfZmlsZV9iYW5kNjogUGF0aCB0byBhIGZpbGUgd2hpY2ggY29udGFpbnMgdGhlIHNjYWxlciBmb3IgYmFuZCA2LgogICAgICAgIAo8fGZpbV9ob2xlfD4KCiAgICBkZWYgdHJhbnNmb3JtKHNlbGYscGl4ZWxfZGYpOgogICAgICAgICIiIgogICAgICAgIFRyYW5zZm9ybXMgdGhlIGJsdWUsIG5kdmkgYW5kIGhlaWdodCBjb2x1bW5zIG9mIGEgcGFuZGFzIGRhdGFmcmFtZS4KCiAgICAgICAgQHBhcmFtIHBpeGVsX2RmOiBkYXRhZnJhbWUgaW4gd2hpY2ggdGhlIGJsdWUsIG5kdmkgYW5kIGhlaWdodCBjb2x1bW4gaGF2ZSB0byBiZSBzY2FsZWQuCiAgICAgICAgQHJldHVybjogZGF0YWZyYW1lIHdoaWNoIHNjYWxlZCBibHVlLCBuZHZpIGFuZCBoZWlnaHQgYmFuZHMuCiAgICAgICAgCiAgICAgICAgIiIiCgogICAgICAgIHBpeGVsX2RmWydiYW5kMyddID0gc2VsZi5zY2FsZXJfYmFuZDMudHJhbnNmb3JtKHBpeGVsX2RmWydiYW5kMyddLnZhbHVlcy5yZXNoYXBlKC0xLDEpKQogICAgICAgIHBpeGVsX2RmWydiYW5kNSddID0gc2VsZi5zY2FsZXJfYmFuZDUudHJhbnNmb3JtKHBpeGVsX2RmWydiYW5kNSddLnZhbHVlcy5yZXNoYXBlKC0xLCAxKSkKICAgICAgICBwaXhlbF9kZlsnYmFuZDYnXSA9IHNlbGYuc2NhbGVyX2JhbmQ2LnRyYW5zZm9ybShwaXhlbF9kZlsnYmFuZDYnXS52YWx1ZXMucmVzaGFwZSgtMSwgMSkpCiAgICAgICAgcmV0dXJuIHBpeGVsX2RmCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5zY2FsZXJfYmFuZDMgPSBqb2JsaWIubG9hZChzY2FsZXJfZmlsZV9iYW5kMykKICAgICAgICBzZWxmLnNjYWxlcl9iYW5kNSA9IGpvYmxpYi5sb2FkKHNjYWxlcl9maWxlX2JhbmQ1KQogICAgICAgIHNlbGYuc2NhbGVyX2JhbmQ2ID0gam9ibGliLmxvYWQoc2NhbGVyX2ZpbGVfYmFuZDYpCjx8ZmltX2VuZHw+"]
["e7106b26285db1210396b47aa26f32e311d3dddd-1","e7106b26285db1210396b47aa26f32e311d3dddd","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCgppbXBvcnQganNvbgppbXBvcnQgZmFsY29uCmltcG9ydCBiY3J5cHQKZnJvbSBkYXRhYmFzZSBpbXBvcnQgRGF0YWJhc2UKCmNsYXNzIExvZ2luOgoKICAgIGRlZiBvbl9wb3N0KHNlbGYsIHJlcSwgcmVzcCk6CgogICAgICAgIHBvc3QgPSBqc29uLmxvYWRzKHJlcS5zdHJlYW0ucmVhZCgpLmRlY29kZSgndXRmLTgnKSkKCiAgICAgICAgaWYgJ3VzZXJuYW1lJyBpbiBwb3N0IGFuZCAncGFzc3dvcmQnIGluIHBvc3Q6CgogICAgICAgICAgICBkYiA9IERhdGFiYXNlKCkKCiAgICAgICAgICAgIHVzZXIgPSBkYi5mZXRjaF91c2VyX2FjY291bnQocG9zdFsndXNlcm5hbWUnXSkKCiAgICAgICAgICAgIGlmIHVzZXIgaXMgbm90IE5vbmU6CgogICAgICAgICAgICAgICAgdXNlcl9wYXNzd29yZCA9IHVzZXJbJ3Bhc3N3b3JkJ10KPHxmaW1faG9sZXw+CgogICAgICAgICAgICAgICAgZWxzZToKCiAgICAgICAgICAgICAgICAgICAgcmVzcC5zdGF0dXMgPSBmYWxjb24uSFRUUF80MDEKCiAgICAgICAgICAgIGVsc2U6CgogICAgICAgICAgICAgICAgcmVzcC5zdGF0dXMgPSBmYWxjb24uSFRUUF80MjIKCiAgICAgICAgZWxzZToKCiAgICAgICAgICAgIHJlc3Auc3RhdHVzID0gZmFsY29uLkhUVFBfNDIyCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgICAgICAgICAgaWYgYmNyeXB0LmNoZWNrcHcocG9zdFsncGFzc3dvcmQnXS5lbmNvZGUoJ3V0Zi04JyksIHVzZXJfcGFzc3dvcmQpOgoKICAgICAgICAgICAgICAgICAgICByZXNwLnN0YXR1cyA9IGZhbGNvbi5IVFRQXzIwMAo8fGZpbV9lbmR8Pg=="]
["c142a57695c3cce2ee91dd7b93a1ff0c56f6b0da-1","c142a57695c3cce2ee91dd7b93a1ff0c56f6b0da","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgpjbGFzcyBQb3dlckNvbnN1bWVyQ29tcG9uZW50KE1vZGVsKToKICAgIHZlcnNpb24gPSBJbnQzMkZpZWxkKCkKICAgIGlkID0gSW50MzJGaWVsZCgpCiAgICBlbnRpdHlJZCA9IEludDMyRmllbGQoKQogICAgbmV0d29ya0lkID0gSW50MzJGaWVsZCgpCiAgICBwbHVnUG9zX3ggPSBGbG9hdEZpZWxkKCkKICAgIHBsdWdQb3NfeSA9IEZsb2F0RmllbGQoKQogICAgcGx1Z1Bvc196ID0gRmxvYXRGaWVsZCgpCiAgICByZXF1aXJlZEVuZXJneSA9IEludDY0RmllbGQoKQogICAgc2VydmVkRW5lcmd5ID0gSW50NjRGaWVsZCgpCiAgICB3b3JrRW5lcmd5UGVyVGljayA9IEludDY0RmllbGQoKQogICAgaWRsZUVuZXJneVBlclRpY2sgPSBJbnQ2NEZpZWxkKCkKPHxmaW1fc3VmZml4fD4KZnJvbSAuLi5GaWVsZHMgaW1wb3J0IEludDY0RmllbGQsIEZsb2F0RmllbGQKZnJvbSAuIGltcG9ydCBNb2RlbCwgSW50MzJGaWVsZAoKCjx8ZmltX2VuZHw+"]
["f920c09a65dcb71337a51a04f0898d39f0efcc18-1","f920c09a65dcb71337a51a04f0898d39f0efcc18","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIHdvcmRzX3RvX29iamVjdChzKToKCQo8fGZpbV9lbmR8Pg=="]
["f920c09a65dcb71337a51a04f0898d39f0efcc18-2","f920c09a65dcb71337a51a04f0898d39f0efcc18","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIHdvcmRzX3RvX29iamVjdChzKToKCQo8fGZpbV9lbmR8Pg=="]
["f920c09a65dcb71337a51a04f0898d39f0efcc18-3","f920c09a65dcb71337a51a04f0898d39f0efcc18","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIHdvcmRzX3RvX29iamVjdChzKToKCQo8fGZpbV9lbmR8Pg=="]
["f920c09a65dcb71337a51a04f0898d39f0efcc18-4","f920c09a65dcb71337a51a04f0898d39f0efcc18","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIHdvcmRzX3RvX29iamVjdChzKToKCQo8fGZpbV9lbmR8Pg=="]
["41358fab589eaccc3b20e52de3338891edab335b-1","41358fab589eaccc3b20e52de3338891edab335b","PHxmaW1fcHJlZml4fD4KIwojIENvcHlyaWdodCAoYykgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKaW1wb3J0IGNsaWNrCjx8ZmltX2hvbGV8PgogICAgICAgIHNlbGYuX2FsaWFzID0ga3dhcmdzLnBvcCgnYWxpYXMnLCAnJykKICAgICAgICBzdXBlcihBbGlhc0NtZCwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQoKICAgIGRlZiBhbGlhcyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5fYWxpYXMKCgpjbGFzcyBBbGlhc0dyb3VwKGNsaWNrLkdyb3VwKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHNlbGYuX2FsaWFzID0ga3dhcmdzLnBvcCgnYWxpYXMnLCAnJykKICAgICAgICBzdXBlcihBbGlhc0dyb3VwLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCgogICAgZGVmIGFsaWFzKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl9hbGlhcwoKICAgIGRlZiBnZXRfY29tbWFuZChzZWxmLCBjdHgsIGNtZF9uYW1lKToKICAgICAgICBydiA9IGNsaWNrLkdyb3VwLmdldF9jb21tYW5kKHNlbGYsIGN0eCwgY21kX25hbWUpCiAgICAgICAgaWYgcnYgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHJldHVybiBydgogICAgICAgIG1hdGNoZXMgPSBbeCBmb3IgeCBpbiBzZWxmLmxpc3RfY29tbWFuZHMoY3R4KQogICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihjbGljay5Hcm91cC5nZXRfY29tbWFuZChzZWxmLCBjdHgsIHgpLCAnYWxpYXMnKQogICAgICAgICAgICAgICAgICAgYW5kIGNsaWNrLkdyb3VwLmdldF9jb21tYW5kKHNlbGYsIGN0eCwgeCkuYWxpYXMoKSA9PSBjbWRfbmFtZV0KICAgICAgICBpZiBub3QgbWF0Y2hlczoKICAgICAgICAgICAgcmV0dXJuIE5vbmUKCiAgICAgICAgcmV0dXJuIGNsaWNrLkdyb3VwLmdldF9jb21tYW5kKHNlbGYsIGN0eCwgbWF0Y2hlc1swXSkKCiAgICBkZWYgZm9ybWF0X2NvbW1hbmRzKHNlbGYsIGN0eCwgZm9ybWF0dGVyKToKICAgICAgICBoZWxwZXIgPSBbXQogICAgICAgIGZvciBjbWQgaW4gc2VsZi5saXN0X2NvbW1hbmRzKGN0eCk6CiAgICAgICAgICAgIGlmIGNtZCBpcyBOb25lOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgYyA9IHNlbGYuZ2V0X2NvbW1hbmQoY3R4LCBjbWQpCiAgICAgICAgICAgIGFsaWFzID0gYy5hbGlhcygpIGlmIGhhc2F0dHIoYywgJ2FsaWFzJykgZWxzZSAnJwogICAgICAgICAgICBjbWRfbmFtZSA9ICd7MH0sIHsxfScuZm9ybWF0KGNtZCwgYWxpYXMpCiAgICAgICAgICAgIGNtZF9oZWxwID0gYy5zaG9ydF9oZWxwIG9yICcnCiAgICAgICAgICAgIGhlbHBlci5hcHBlbmQoKGNtZF9uYW1lLCBjbWRfaGVscCkpCiAgICAgICAgaWYgaGVscGVyOgogICAgICAgICAgICB3aXRoIGZvcm1hdHRlci5zZWN0aW9uKCdDb21tYW5kcycpOgogICAgICAgICAgICAgICAgZm9ybWF0dGVyLndyaXRlX2RsKGhlbHBlcikKCiAgICBkZWYgY29sbGVjdF91c2FnZV9waWVjZXMoc2VsZiwgY3R4KToKICAgICAgICAjIFNraXAgZmlyc3QgZWxlbWVudCBvZiB1c2FnZSBwaWVjZXMgb2YgdGhpcyBjb21tYW5kLiBUaGlzIHdpbGwgYmUgIltPUFRJT05TXSIuCiAgICAgICAgcnYgPSBzdXBlcihBbGlhc0dyb3VwLCBzZWxmKS5jb2xsZWN0X3VzYWdlX3BpZWNlcyhjdHgpWzE6XQogICAgICAgIHJldHVybiBydgoKICAgIGRlZiBnZXRfaGVscF9vcHRpb24oc2VsZiwgY3R4KToKICAgICAgICBoZWxwX29wdGlvbnMgPSBzZWxmLmdldF9oZWxwX29wdGlvbl9uYW1lcyhjdHgpCiAgICAgICAgaWYgbm90IGhlbHBfb3B0aW9ucyBvciBub3Qgc2VsZi5hZGRfaGVscF9vcHRpb246CiAgICAgICAgICAgIHJldHVybgoKICAgICAgICBkZWYgc2hvd19oZWxwKGN0eCwgcGFyYW0sIHZhbHVlKToKICAgICAgICAgICAgaWYgdmFsdWUgYW5kIG5vdCBjdHgucmVzaWxpZW50X3BhcnNpbmc6CiAgICAgICAgICAgICAgICBjbGljay5lY2hvKGN0eC5nZXRfaGVscCgpLCBjb2xvcj1jdHguY29sb3IpCiAgICAgICAgICAgICAgICBjdHguZXhpdCgpCgogICAgICAgIHJldHVybiBjbGljay5PcHRpb24oaGVscF9vcHRpb25zLCBpc19mbGFnPVRydWUsIGlzX2VhZ2VyPVRydWUsIGV4cG9zZV92YWx1ZT1GYWxzZSwgY2FsbGJhY2s9c2hvd19oZWxwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRGlzcGxheXMgaGVscCBtZXNzYWdpbmcgaW5mb3JtYXRpb24uJykKPHxmaW1fc3VmZml4fD4KCgpjbGFzcyBBbGlhc0NtZChjbGljay5Db21tYW5kKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgo8fGZpbV9lbmR8Pg=="]
["41358fab589eaccc3b20e52de3338891edab335b-2","41358fab589eaccc3b20e52de3338891edab335b","PHxmaW1fcHJlZml4fD4KIwojIENvcHlyaWdodCAoYykgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKPHxmaW1faG9sZXw+CiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgppbXBvcnQgY2xpY2sKCgpjbGFzcyBBbGlhc0NtZChjbGljay5Db21tYW5kKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHNlbGYuX2FsaWFzID0ga3dhcmdzLnBvcCgnYWxpYXMnLCAnJykKICAgICAgICBzdXBlcihBbGlhc0NtZCwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQoKICAgIGRlZiBhbGlhcyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5fYWxpYXMKCgpjbGFzcyBBbGlhc0dyb3VwKGNsaWNrLkdyb3VwKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHNlbGYuX2FsaWFzID0ga3dhcmdzLnBvcCgnYWxpYXMnLCAnJykKICAgICAgICBzdXBlcihBbGlhc0dyb3VwLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCgogICAgZGVmIGFsaWFzKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl9hbGlhcwoKICAgIGRlZiBnZXRfY29tbWFuZChzZWxmLCBjdHgsIGNtZF9uYW1lKToKICAgICAgICBydiA9IGNsaWNrLkdyb3VwLmdldF9jb21tYW5kKHNlbGYsIGN0eCwgY21kX25hbWUpCiAgICAgICAgaWYgcnYgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHJldHVybiBydgogICAgICAgIG1hdGNoZXMgPSBbeCBmb3IgeCBpbiBzZWxmLmxpc3RfY29tbWFuZHMoY3R4KQogICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihjbGljay5Hcm91cC5nZXRfY29tbWFuZChzZWxmLCBjdHgsIHgpLCAnYWxpYXMnKQogICAgICAgICAgICAgICAgICAgYW5kIGNsaWNrLkdyb3VwLmdldF9jb21tYW5kKHNlbGYsIGN0eCwgeCkuYWxpYXMoKSA9PSBjbWRfbmFtZV0KICAgICAgICBpZiBub3QgbWF0Y2hlczoKICAgICAgICAgICAgcmV0dXJuIE5vbmUKCiAgICAgICAgcmV0dXJuIGNsaWNrLkdyb3VwLmdldF9jb21tYW5kKHNlbGYsIGN0eCwgbWF0Y2hlc1swXSkKCiAgICBkZWYgZm9ybWF0X2NvbW1hbmRzKHNlbGYsIGN0eCwgZm9ybWF0dGVyKToKICAgICAgICBoZWxwZXIgPSBbXQogICAgICAgIGZvciBjbWQgaW4gc2VsZi5saXN0X2NvbW1hbmRzKGN0eCk6CiAgICAgICAgICAgIGlmIGNtZCBpcyBOb25lOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgYyA9IHNlbGYuZ2V0X2NvbW1hbmQoY3R4LCBjbWQpCiAgICAgICAgICAgIGFsaWFzID0gYy5hbGlhcygpIGlmIGhhc2F0dHIoYywgJ2FsaWFzJykgZWxzZSAnJwogICAgICAgICAgICBjbWRfbmFtZSA9ICd7MH0sIHsxfScuZm9ybWF0KGNtZCwgYWxpYXMpCiAgICAgICAgICAgIGNtZF9oZWxwID0gYy5zaG9ydF9oZWxwIG9yICcnCiAgICAgICAgICAgIGhlbHBlci5hcHBlbmQoKGNtZF9uYW1lLCBjbWRfaGVscCkpCiAgICAgICAgaWYgaGVscGVyOgogICAgICAgICAgICB3aXRoIGZvcm1hdHRlci5zZWN0aW9uKCdDb21tYW5kcycpOgogICAgICAgICAgICAgICAgZm9ybWF0dGVyLndyaXRlX2RsKGhlbHBlcikKCiAgICBkZWYgY29sbGVjdF91c2FnZV9waWVjZXMoc2VsZiwgY3R4KToKICAgICAgICAjIFNraXAgZmlyc3QgZWxlbWVudCBvZiB1c2FnZSBwaWVjZXMgb2YgdGhpcyBjb21tYW5kLiBUaGlzIHdpbGwgYmUgIltPUFRJT05TXSIuCiAgICAgICAgcnYgPSBzdXBlcihBbGlhc0dyb3VwLCBzZWxmKS5jb2xsZWN0X3VzYWdlX3BpZWNlcyhjdHgpWzE6XQogICAgICAgIHJldHVybiBydgoKICAgIGRlZiBnZXRfaGVscF9vcHRpb24oc2VsZiwgY3R4KToKICAgICAgICBoZWxwX29wdGlvbnMgPSBzZWxmLmdldF9oZWxwX29wdGlvbl9uYW1lcyhjdHgpCiAgICAgICAgaWYgbm90IGhlbHBfb3B0aW9ucyBvciBub3Qgc2VsZi5hZGRfaGVscF9vcHRpb246CiAgICAgICAgICAgIHJldHVybgoKICAgICAgICBkZWYgc2hvd19oZWxwKGN0eCwgcGFyYW0sIHZhbHVlKToKICAgICAgICAgICAgaWYgdmFsdWUgYW5kIG5vdCBjdHgucmVzaWxpZW50X3BhcnNpbmc6CiAgICAgICAgICAgICAgICBjbGljay5lY2hvKGN0eC5nZXRfaGVscCgpLCBjb2xvcj1jdHguY29sb3IpCiAgICAgICAgICAgICAgICBjdHguZXhpdCgpCgogICAgICAgIHJldHVybiBjbGljay5PcHRpb24oaGVscF9vcHRpb25zLCBpc19mbGFnPVRydWUsIGlzX2VhZ2VyPVRydWUsIGV4cG9zZV92YWx1ZT1GYWxzZSwgY2FsbGJhY2s9c2hvd19oZWxwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRGlzcGxheXMgaGVscCBtZXNzYWdpbmcgaW5mb3JtYXRpb24uJykKPHxmaW1fc3VmZml4fD4KIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgo8fGZpbV9lbmR8Pg=="]
["41358fab589eaccc3b20e52de3338891edab335b-3","41358fab589eaccc3b20e52de3338891edab335b","PHxmaW1fcHJlZml4fD4KIwojIENvcHlyaWdodCAoYykgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKaW1wb3J0IGNsaWNrCgoKY2xhc3MgQWxpYXNDbWQoY2xpY2suQ29tbWFuZCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzZWxmLl9hbGlhcyA9IGt3YXJncy5wb3AoJ2FsaWFzJywgJycpCjx8ZmltX2hvbGV8PgogICAgZGVmIGFsaWFzKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl9hbGlhcwoKCmNsYXNzIEFsaWFzR3JvdXAoY2xpY2suR3JvdXApOgogICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgc2VsZi5fYWxpYXMgPSBrd2FyZ3MucG9wKCdhbGlhcycsICcnKQogICAgICAgIHN1cGVyKEFsaWFzR3JvdXAsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKCiAgICBkZWYgYWxpYXMoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX2FsaWFzCgogICAgZGVmIGdldF9jb21tYW5kKHNlbGYsIGN0eCwgY21kX25hbWUpOgogICAgICAgIHJ2ID0gY2xpY2suR3JvdXAuZ2V0X2NvbW1hbmQoc2VsZiwgY3R4LCBjbWRfbmFtZSkKICAgICAgICBpZiBydiBpcyBub3QgTm9uZToKICAgICAgICAgICAgcmV0dXJuIHJ2CiAgICAgICAgbWF0Y2hlcyA9IFt4IGZvciB4IGluIHNlbGYubGlzdF9jb21tYW5kcyhjdHgpCiAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGNsaWNrLkdyb3VwLmdldF9jb21tYW5kKHNlbGYsIGN0eCwgeCksICdhbGlhcycpCiAgICAgICAgICAgICAgICAgICBhbmQgY2xpY2suR3JvdXAuZ2V0X2NvbW1hbmQoc2VsZiwgY3R4LCB4KS5hbGlhcygpID09IGNtZF9uYW1lXQogICAgICAgIGlmIG5vdCBtYXRjaGVzOgogICAgICAgICAgICByZXR1cm4gTm9uZQoKICAgICAgICByZXR1cm4gY2xpY2suR3JvdXAuZ2V0X2NvbW1hbmQoc2VsZiwgY3R4LCBtYXRjaGVzWzBdKQoKICAgIGRlZiBmb3JtYXRfY29tbWFuZHMoc2VsZiwgY3R4LCBmb3JtYXR0ZXIpOgogICAgICAgIGhlbHBlciA9IFtdCiAgICAgICAgZm9yIGNtZCBpbiBzZWxmLmxpc3RfY29tbWFuZHMoY3R4KToKICAgICAgICAgICAgaWYgY21kIGlzIE5vbmU6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBjID0gc2VsZi5nZXRfY29tbWFuZChjdHgsIGNtZCkKICAgICAgICAgICAgYWxpYXMgPSBjLmFsaWFzKCkgaWYgaGFzYXR0cihjLCAnYWxpYXMnKSBlbHNlICcnCiAgICAgICAgICAgIGNtZF9uYW1lID0gJ3swfSwgezF9Jy5mb3JtYXQoY21kLCBhbGlhcykKICAgICAgICAgICAgY21kX2hlbHAgPSBjLnNob3J0X2hlbHAgb3IgJycKICAgICAgICAgICAgaGVscGVyLmFwcGVuZCgoY21kX25hbWUsIGNtZF9oZWxwKSkKICAgICAgICBpZiBoZWxwZXI6CiAgICAgICAgICAgIHdpdGggZm9ybWF0dGVyLnNlY3Rpb24oJ0NvbW1hbmRzJyk6CiAgICAgICAgICAgICAgICBmb3JtYXR0ZXIud3JpdGVfZGwoaGVscGVyKQoKICAgIGRlZiBjb2xsZWN0X3VzYWdlX3BpZWNlcyhzZWxmLCBjdHgpOgogICAgICAgICMgU2tpcCBmaXJzdCBlbGVtZW50IG9mIHVzYWdlIHBpZWNlcyBvZiB0aGlzIGNvbW1hbmQuIFRoaXMgd2lsbCBiZSAiW09QVElPTlNdIi4KICAgICAgICBydiA9IHN1cGVyKEFsaWFzR3JvdXAsIHNlbGYpLmNvbGxlY3RfdXNhZ2VfcGllY2VzKGN0eClbMTpdCiAgICAgICAgcmV0dXJuIHJ2CgogICAgZGVmIGdldF9oZWxwX29wdGlvbihzZWxmLCBjdHgpOgogICAgICAgIGhlbHBfb3B0aW9ucyA9IHNlbGYuZ2V0X2hlbHBfb3B0aW9uX25hbWVzKGN0eCkKICAgICAgICBpZiBub3QgaGVscF9vcHRpb25zIG9yIG5vdCBzZWxmLmFkZF9oZWxwX29wdGlvbjoKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIGRlZiBzaG93X2hlbHAoY3R4LCBwYXJhbSwgdmFsdWUpOgogICAgICAgICAgICBpZiB2YWx1ZSBhbmQgbm90IGN0eC5yZXNpbGllbnRfcGFyc2luZzoKICAgICAgICAgICAgICAgIGNsaWNrLmVjaG8oY3R4LmdldF9oZWxwKCksIGNvbG9yPWN0eC5jb2xvcikKICAgICAgICAgICAgICAgIGN0eC5leGl0KCkKCiAgICAgICAgcmV0dXJuIGNsaWNrLk9wdGlvbihoZWxwX29wdGlvbnMsIGlzX2ZsYWc9VHJ1ZSwgaXNfZWFnZXI9VHJ1ZSwgZXhwb3NlX3ZhbHVlPUZhbHNlLCBjYWxsYmFjaz1zaG93X2hlbHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdEaXNwbGF5cyBoZWxwIG1lc3NhZ2luZyBpbmZvcm1hdGlvbi4nKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHN1cGVyKEFsaWFzQ21kLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCgo8fGZpbV9lbmR8Pg=="]
["41358fab589eaccc3b20e52de3338891edab335b-4","41358fab589eaccc3b20e52de3338891edab335b","PHxmaW1fcHJlZml4fD4KIwojIENvcHlyaWdodCAoYykgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgo8fGZpbV9ob2xlfD4KIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCmltcG9ydCBjbGljawoKCmNsYXNzIEFsaWFzQ21kKGNsaWNrLkNvbW1hbmQpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgc2VsZi5fYWxpYXMgPSBrd2FyZ3MucG9wKCdhbGlhcycsICcnKQogICAgICAgIHN1cGVyKEFsaWFzQ21kLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCgogICAgZGVmIGFsaWFzKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl9hbGlhcwoKCmNsYXNzIEFsaWFzR3JvdXAoY2xpY2suR3JvdXApOgogICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgc2VsZi5fYWxpYXMgPSBrd2FyZ3MucG9wKCdhbGlhcycsICcnKQogICAgICAgIHN1cGVyKEFsaWFzR3JvdXAsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKCiAgICBkZWYgYWxpYXMoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX2FsaWFzCgogICAgZGVmIGdldF9jb21tYW5kKHNlbGYsIGN0eCwgY21kX25hbWUpOgogICAgICAgIHJ2ID0gY2xpY2suR3JvdXAuZ2V0X2NvbW1hbmQoc2VsZiwgY3R4LCBjbWRfbmFtZSkKICAgICAgICBpZiBydiBpcyBub3QgTm9uZToKICAgICAgICAgICAgcmV0dXJuIHJ2CiAgICAgICAgbWF0Y2hlcyA9IFt4IGZvciB4IGluIHNlbGYubGlzdF9jb21tYW5kcyhjdHgpCiAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGNsaWNrLkdyb3VwLmdldF9jb21tYW5kKHNlbGYsIGN0eCwgeCksICdhbGlhcycpCiAgICAgICAgICAgICAgICAgICBhbmQgY2xpY2suR3JvdXAuZ2V0X2NvbW1hbmQoc2VsZiwgY3R4LCB4KS5hbGlhcygpID09IGNtZF9uYW1lXQogICAgICAgIGlmIG5vdCBtYXRjaGVzOgogICAgICAgICAgICByZXR1cm4gTm9uZQoKICAgICAgICByZXR1cm4gY2xpY2suR3JvdXAuZ2V0X2NvbW1hbmQoc2VsZiwgY3R4LCBtYXRjaGVzWzBdKQoKICAgIGRlZiBmb3JtYXRfY29tbWFuZHMoc2VsZiwgY3R4LCBmb3JtYXR0ZXIpOgogICAgICAgIGhlbHBlciA9IFtdCiAgICAgICAgZm9yIGNtZCBpbiBzZWxmLmxpc3RfY29tbWFuZHMoY3R4KToKICAgICAgICAgICAgaWYgY21kIGlzIE5vbmU6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBjID0gc2VsZi5nZXRfY29tbWFuZChjdHgsIGNtZCkKICAgICAgICAgICAgYWxpYXMgPSBjLmFsaWFzKCkgaWYgaGFzYXR0cihjLCAnYWxpYXMnKSBlbHNlICcnCiAgICAgICAgICAgIGNtZF9uYW1lID0gJ3swfSwgezF9Jy5mb3JtYXQoY21kLCBhbGlhcykKICAgICAgICAgICAgY21kX2hlbHAgPSBjLnNob3J0X2hlbHAgb3IgJycKICAgICAgICAgICAgaGVscGVyLmFwcGVuZCgoY21kX25hbWUsIGNtZF9oZWxwKSkKICAgICAgICBpZiBoZWxwZXI6CiAgICAgICAgICAgIHdpdGggZm9ybWF0dGVyLnNlY3Rpb24oJ0NvbW1hbmRzJyk6CiAgICAgICAgICAgICAgICBmb3JtYXR0ZXIud3JpdGVfZGwoaGVscGVyKQoKICAgIGRlZiBjb2xsZWN0X3VzYWdlX3BpZWNlcyhzZWxmLCBjdHgpOgogICAgICAgICMgU2tpcCBmaXJzdCBlbGVtZW50IG9mIHVzYWdlIHBpZWNlcyBvZiB0aGlzIGNvbW1hbmQuIFRoaXMgd2lsbCBiZSAiW09QVElPTlNdIi4KICAgICAgICBydiA9IHN1cGVyKEFsaWFzR3JvdXAsIHNlbGYpLmNvbGxlY3RfdXNhZ2VfcGllY2VzKGN0eClbMTpdCiAgICAgICAgcmV0dXJuIHJ2CgogICAgZGVmIGdldF9oZWxwX29wdGlvbihzZWxmLCBjdHgpOgogICAgICAgIGhlbHBfb3B0aW9ucyA9IHNlbGYuZ2V0X2hlbHBfb3B0aW9uX25hbWVzKGN0eCkKICAgICAgICBpZiBub3QgaGVscF9vcHRpb25zIG9yIG5vdCBzZWxmLmFkZF9oZWxwX29wdGlvbjoKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIGRlZiBzaG93X2hlbHAoY3R4LCBwYXJhbSwgdmFsdWUpOgogICAgICAgICAgICBpZiB2YWx1ZSBhbmQgbm90IGN0eC5yZXNpbGllbnRfcGFyc2luZzoKICAgICAgICAgICAgICAgIGNsaWNrLmVjaG8oY3R4LmdldF9oZWxwKCksIGNvbG9yPWN0eC5jb2xvcikKICAgICAgICAgICAgICAgIGN0eC5leGl0KCkKCiAgICAgICAgcmV0dXJuIGNsaWNrLk9wdGlvbihoZWxwX29wdGlvbnMsIGlzX2ZsYWc9VHJ1ZSwgaXNfZWFnZXI9VHJ1ZSwgZXhwb3NlX3ZhbHVlPUZhbHNlLCBjYWxsYmFjaz1zaG93X2hlbHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdEaXNwbGF5cyBoZWxwIG1lc3NhZ2luZyBpbmZvcm1hdGlvbi4nKQo8fGZpbV9zdWZmaXh8PgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwo8fGZpbV9lbmR8Pg=="]
["41358fab589eaccc3b20e52de3338891edab335b-5","41358fab589eaccc3b20e52de3338891edab335b","PHxmaW1fcHJlZml4fD4KIwojIENvcHlyaWdodCAoYykgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKaW1wb3J0IGNsaWNrCgoKY2xhc3MgQWxpYXNDbWQoY2xpY2suQ29tbWFuZCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzZWxmLl9hbGlhcyA9IGt3YXJncy5wb3AoJ2FsaWFzJywgJycpCiAgICAgICAgc3VwZXIoQWxpYXNDbWQsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKCiAgICBkZWYgYWxpYXMoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX2FsaWFzCgoKY2xhc3MgQWxpYXNHcm91cChjbGljay5Hcm91cCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzZWxmLl9hbGlhcyA9IGt3YXJncy5wb3AoJ2FsaWFzJywgJycpCiAgICAgICAgc3VwZXIoQWxpYXNHcm91cCwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQoKICAgIGRlZiBhbGlhcyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5fYWxpYXMKCiAgICBkZWYgZ2V0X2NvbW1hbmQoc2VsZiwgY3R4LCBjbWRfbmFtZSk6CiAgICAgICAgcnYgPSBjbGljay5Hcm91cC5nZXRfY29tbWFuZChzZWxmLCBjdHgsIGNtZF9uYW1lKQogICAgICAgIGlmIHJ2IGlzIG5vdCBOb25lOgogICAgICAgICAgICByZXR1cm4gcnYKICAgICAgICBtYXRjaGVzID0gW3ggZm9yIHggaW4gc2VsZi5saXN0X2NvbW1hbmRzKGN0eCkKICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoY2xpY2suR3JvdXAuZ2V0X2NvbW1hbmQoc2VsZiwgY3R4LCB4KSwgJ2FsaWFzJykKICAgICAgICAgICAgICAgICAgIGFuZCBjbGljay5Hcm91cC5nZXRfY29tbWFuZChzZWxmLCBjdHgsIHgpLmFsaWFzKCkgPT0gY21kX25hbWVdCiAgICAgICAgaWYgbm90IG1hdGNoZXM6CiAgICAgICAgICAgIHJldHVybiBOb25lCgogICAgICAgIHJldHVybiBjbGljay5Hcm91cC5nZXRfY29tbWFuZChzZWxmLCBjdHgsIG1hdGNoZXNbMF0pCgogICAgZGVmIGZvcm1hdF9jb21tYW5kcyhzZWxmLCBjdHgsIGZvcm1hdHRlcik6CiAgICAgICAgaGVscGVyID0gW10KICAgICAgICBmb3IgY21kIGluIHNlbGYubGlzdF9jb21tYW5kcyhjdHgpOgogICAgICAgICAgICBpZiBjbWQgaXMgTm9uZToKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGMgPSBzZWxmLmdldF9jb21tYW5kKGN0eCwgY21kKQogICAgICAgICAgICBhbGlhcyA9IGMuYWxpYXMoKSBpZiBoYXNhdHRyKGMsICdhbGlhcycpIGVsc2UgJycKICAgICAgICAgICAgY21kX25hbWUgPSAnezB9LCB7MX0nLmZvcm1hdChjbWQsIGFsaWFzKQogICAgICAgICAgICBjbWRfaGVscCA9IGMuc2hvcnRfaGVscCBvciAnJwogICAgICAgICAgICBoZWxwZXIuYXBwZW5kKChjbWRfbmFtZSwgY21kX2hlbHApKQogICAgICAgIGlmIGhlbHBlcjoKICAgICAgICAgICAgd2l0aCBmb3JtYXR0ZXIuc2VjdGlvbignQ29tbWFuZHMnKToKICAgICAgICAgICAgICAgIGZvcm1hdHRlci53cml0ZV9kbChoZWxwZXIpCgogICAgZGVmIGNvbGxlY3RfdXNhZ2VfcGllY2VzKHNlbGYsIGN0eCk6CiAgICAgICAgIyBTa2lwIGZpcnN0IGVsZW1lbnQgb2YgdXNhZ2UgcGllY2VzIG9mIHRoaXMgY29tbWFuZC4gVGhpcyB3aWxsIGJlICJbT1BUSU9OU10iLgogICAgICAgIHJ2ID0gc3VwZXIoQWxpYXNHcm91cCwgc2VsZikuY29sbGVjdF91c2FnZV9waWVjZXMoY3R4KVsxOl0KICAgICAgICByZXR1cm4gcnYKCiAgICBkZWYgZ2V0X2hlbHBfb3B0aW9uKHNlbGYsIGN0eCk6CiAgICAgICAgaGVscF9vcHRpb25zID0gc2VsZi5nZXRfaGVscF9vcHRpb25fbmFtZXMoY3R4KQogICAgICAgIGlmIG5vdCBoZWxwX29wdGlvbnMgb3Igbm90IHNlbGYuYWRkX2hlbHBfb3B0aW9uOgogICAgICAgICAgICByZXR1cm4KPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICBjdHguZXhpdCgpCgogICAgICAgIHJldHVybiBjbGljay5PcHRpb24oaGVscF9vcHRpb25zLCBpc19mbGFnPVRydWUsIGlzX2VhZ2VyPVRydWUsIGV4cG9zZV92YWx1ZT1GYWxzZSwgY2FsbGJhY2s9c2hvd19oZWxwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRGlzcGxheXMgaGVscCBtZXNzYWdpbmcgaW5mb3JtYXRpb24uJykKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgZGVmIHNob3dfaGVscChjdHgsIHBhcmFtLCB2YWx1ZSk6CiAgICAgICAgICAgIGlmIHZhbHVlIGFuZCBub3QgY3R4LnJlc2lsaWVudF9wYXJzaW5nOgogICAgICAgICAgICAgICAgY2xpY2suZWNobyhjdHguZ2V0X2hlbHAoKSwgY29sb3I9Y3R4LmNvbG9yKQo8fGZpbV9lbmR8Pg=="]
["e7d10fae41bab008092d1317de12a3c3556c2e1c-1","e7d10fae41bab008092d1317de12a3c3556c2e1c","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cAoKZGVmIHJlYWRtZSgpOgogICAgd2l0aCBvcGVuKCdSRUFETUUucnN0JykgYXMgZjoKICAgICAgICByZXR1cm4gZi5yZWFkKCkKCnNldHVwKG5hbWU9J3doYXRpc3RoaXMnLAogICAgICB2ZXJzaW9uPScwLjAuMicsCiAgICAgIGRlc2NyaXB0aW9uPSdVSSBmb3IgbWFudWFsIGltYWdlIGNsYXNzaWZpY2F0aW9uJywKICAgICAgbG9uZ19kZXNjcmlwdGlvbj1yZWFkbWUoKSwKICAgICAgdXJsPSdodHRwOi8vZ2l0aHViLmNvbS9Ub20tQWxleGFuZGVyL3doYXRpc3RoaXMnLAogICAgICBkb3dubG9hZF91cmwgPSAnaHR0cHM6Ly9naXRodWIuY29tL1RvbS1BbGV4YW5kZXIvd2hhdGlzdGhpcy90YXJiYWxsLzAuMC4xJywKICAgICAgYXV0aG9yPSdUb20gQWxleGFuZGVyJywKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICBhdXRob3JfZW1haWw9J21lQHRvbWFsZXhhbmRlci5jby5ueicsCiAgICAgIGxpY2Vuc2U9J01JVCcsCiAgICAgIHBhY2thZ2VzPVsnd2hhdGlzdGhpcyddLAogICAgICBpbmNsdWRlX3BhY2thZ2VfZGF0YT1UcnVlLAo8fGZpbV9lbmR8Pg=="]
["e7d10fae41bab008092d1317de12a3c3556c2e1c-2","e7d10fae41bab008092d1317de12a3c3556c2e1c","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cAoKZGVmIHJlYWRtZSgpOgogICAgd2l0aCBvcGVuKCdSRUFETUUucnN0JykgYXMgZjoKICAgICAgICByZXR1cm4gZi5yZWFkKCkKCnNldHVwKG5hbWU9J3doYXRpc3RoaXMnLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgIHZlcnNpb249JzAuMC4yJywKICAgICAgZGVzY3JpcHRpb249J1VJIGZvciBtYW51YWwgaW1hZ2UgY2xhc3NpZmljYXRpb24nLAogICAgICBsb25nX2Rlc2NyaXB0aW9uPXJlYWRtZSgpLAogICAgICB1cmw9J2h0dHA6Ly9naXRodWIuY29tL1RvbS1BbGV4YW5kZXIvd2hhdGlzdGhpcycsCjx8ZmltX2VuZHw+"]
["e7d10fae41bab008092d1317de12a3c3556c2e1c-3","e7d10fae41bab008092d1317de12a3c3556c2e1c","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cAo8fGZpbV9ob2xlfD4KCnNldHVwKG5hbWU9J3doYXRpc3RoaXMnLAogICAgICB2ZXJzaW9uPScwLjAuMicsCiAgICAgIGRlc2NyaXB0aW9uPSdVSSBmb3IgbWFudWFsIGltYWdlIGNsYXNzaWZpY2F0aW9uJywKICAgICAgbG9uZ19kZXNjcmlwdGlvbj1yZWFkbWUoKSwKICAgICAgdXJsPSdodHRwOi8vZ2l0aHViLmNvbS9Ub20tQWxleGFuZGVyL3doYXRpc3RoaXMnLAogICAgICBkb3dubG9hZF91cmwgPSAnaHR0cHM6Ly9naXRodWIuY29tL1RvbS1BbGV4YW5kZXIvd2hhdGlzdGhpcy90YXJiYWxsLzAuMC4xJywKICAgICAgYXV0aG9yPSdUb20gQWxleGFuZGVyJywKICAgICAgYXV0aG9yX2VtYWlsPSdtZUB0b21hbGV4YW5kZXIuY28ubnonLAogICAgICBsaWNlbnNlPSdNSVQnLAogICAgICBwYWNrYWdlcz1bJ3doYXRpc3RoaXMnXSwKICAgICAgaW5jbHVkZV9wYWNrYWdlX2RhdGE9VHJ1ZSwKICAgICAgemlwX3NhZmU9RmFsc2UsCiAgICAgIGluc3RhbGxfcmVxdWlyZXM9WwogICAgICAgICdqaW5qYTInCiAgICAgIF0pCjx8ZmltX3N1ZmZpeHw+CgpkZWYgcmVhZG1lKCk6CiAgICB3aXRoIG9wZW4oJ1JFQURNRS5yc3QnKSBhcyBmOgogICAgICAgIHJldHVybiBmLnJlYWQoKQo8fGZpbV9lbmR8Pg=="]
["e7c15a9c9e9c54ba42cd6890326519370d98ec2a-1","e7c15a9c9e9c54ba42cd6890326519370d98ec2a","PHxmaW1fcHJlZml4fD4KZnJvbSBhdXRoX3Rva2VuLmNvbnRyaWIuY29tbW9uLmRlZmF1bHQudmlld3MgaW1wb3J0IFRva2VuTG9nb3V0VmlldwoKdHJ5OgogICAgaW1wb3J0IHNlY3VyaXR5CiAgICBmcm9tIGF1dGhfdG9rZW4uY29udHJpYi5jb21tb24uYXV0aF9zZWN1cml0eS52aWV3cyBpbXBvcnQgSW5wdXRMb2dNaXhpbiwgVG9rZW5Mb2dpblZpZXcKICAgIGZyb20gYXV0aF90b2tlbi5jb250cmliLmNvbW1vbi5hdXRoX3NlY3VyaXR5LnZpZXdzIGltcG9ydCBMb2dpbkNvZGVWZXJpZmljYXRpb25WaWV3IGFzIF9Mb2dpbkNvZGVWZXJpZmljYXRpb25WaWV3CmV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgIGZyb20gYXV0aF90b2tlbi5jb250cmliLmNvbW1vbi5kZWZhdWx0LnZpZXdzIGltcG9ydCBJbnB1dExvZ01peGluLCBUb2tlbkxvZ2luVmlldwogICAgZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLnZpZXdzIGltcG9ydCBMb2dpblZpZXcgYXMgX0xvZ2luQ29kZVZlcmlmaWNhdGlvblZpZXcKCgpjbGFzcyBMb2dpblZpZXcoVG9rZW5Mb2dpblZpZXcpOgogICAgcGFzcwoKCmNsYXNzIExvZ291dFZpZXcoVG9rZW5Mb2dvdXRWaWV3KToKICAgIHBhc3MKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmNsYXNzIExvZ2luQ29kZVZlcmlmaWNhdGlvblZpZXcoSW5wdXRMb2dNaXhpbiwgX0xvZ2luQ29kZVZlcmlmaWNhdGlvblZpZXcpOgogICAgcGFzcwo8fGZpbV9lbmR8Pg=="]
["e7c15a9c9e9c54ba42cd6890326519370d98ec2a-2","e7c15a9c9e9c54ba42cd6890326519370d98ec2a","PHxmaW1fcHJlZml4fD4KZnJvbSBhdXRoX3Rva2VuLmNvbnRyaWIuY29tbW9uLmRlZmF1bHQudmlld3MgaW1wb3J0IFRva2VuTG9nb3V0VmlldwoKdHJ5OgogICAgaW1wb3J0IHNlY3VyaXR5CiAgICBmcm9tIGF1dGhfdG9rZW4uY29udHJpYi5jb21tb24uYXV0aF9zZWN1cml0eS52aWV3cyBpbXBvcnQgSW5wdXRMb2dNaXhpbiwgVG9rZW5Mb2dpblZpZXcKICAgIGZyb20gYXV0aF90b2tlbi5jb250cmliLmNvbW1vbi5hdXRoX3NlY3VyaXR5LnZpZXdzIGltcG9ydCBMb2dpbkNvZGVWZXJpZmljYXRpb25WaWV3IGFzIF9Mb2dpbkNvZGVWZXJpZmljYXRpb25WaWV3Cjx8ZmltX2hvbGV8PgoKY2xhc3MgTG9naW5WaWV3KFRva2VuTG9naW5WaWV3KToKICAgIHBhc3MKCgpjbGFzcyBMb2dvdXRWaWV3KFRva2VuTG9nb3V0Vmlldyk6CiAgICBwYXNzCgoKY2xhc3MgTG9naW5Db2RlVmVyaWZpY2F0aW9uVmlldyhJbnB1dExvZ01peGluLCBfTG9naW5Db2RlVmVyaWZpY2F0aW9uVmlldyk6CiAgICBwYXNzCjx8ZmltX3N1ZmZpeHw+CmV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgIGZyb20gYXV0aF90b2tlbi5jb250cmliLmNvbW1vbi5kZWZhdWx0LnZpZXdzIGltcG9ydCBJbnB1dExvZ01peGluLCBUb2tlbkxvZ2luVmlldwogICAgZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLnZpZXdzIGltcG9ydCBMb2dpblZpZXcgYXMgX0xvZ2luQ29kZVZlcmlmaWNhdGlvblZpZXcKCjx8ZmltX2VuZHw+"]
["68cb782ad4627493e14702aa746139a664a3c899-1","68cb782ad4627493e14702aa746139a664a3c899","PHxmaW1fcHJlZml4fD4KZnJvbSBkb2xmaW4gaW1wb3J0ICoKZnJvbSBQYWNrYWdlTmFtZS5HZW5lcmFsRnVuYyBpbXBvcnQgY29tbW9uCmZyb20gUGFja2FnZU5hbWUuUEVUU2NGdW5jIGltcG9ydCBQRVRTY01hdE9wcwpmcm9tIG51bXB5IGltcG9ydCBjb25jYXRlbmF0ZSwgemVyb3MsIG9uZXMsIHplcm9zLCBhcHBlbmQsIGFycmF5CmZyb20gc2NpcHkuc3BhcnNlIGltcG9ydCBzcGRpYWdzLCBibWF0CgoKCmRlZiBCb3VuZGFyeShTcGFjZSxCb3VuZGFyeU1hcmtlcnMpOgogICAga2V5ID0gQm91bmRhcnlNYXJrZXJzLmtleXMoKQogICAgQkMgPSB6ZXJvcygwKQogICAgZm9yIGkgaW4gcmFuZ2UobGVuKGtleSkpOgogICAgICAgIEJDID0gYXBwZW5kKEJDLGludChzdHIoa2V5W2ldKSkpCiAgICBCb3VuZGFyeSA9IG9uZXMoU3BhY2UuZGltKCkpCiAgICBCb3VuZGFyeVthcnJheShCQykuYXN0eXBlKCdpbnQnKV0gPSAwCiAgICBCQ21hcmtlcnMgPSBzcGRpYWdzKEJvdW5kYXJ5LDAsU3BhY2UuZGltKCksU3BhY2UuZGltKCkpCgogICAgQm91bmRhcnkgPSB6ZXJvcyhTcGFjZS5kaW0oKSkKICAgIEJvdW5kYXJ5W2FycmF5KEJDKS5hc3R5cGUoJ2ludCcpXSA9IDEKICAgIEJDID0gc3BkaWFncyhCb3VuZGFyeSwwLFNwYWNlLmRpbSgpLFNwYWNlLmRpbSgpKQoKICAgIHJldHVybiBCQ21hcmtlcnMsIEJDCgpkZWYgUkhTQXNzZW1ibGUoRlMsIEwsIHUsIGVxKToKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBib3VuZGFyeSh4LCBvbl9ib3VuZGFyeSk6CiAgICAgICAgcmV0dXJuIG9uX2JvdW5kYXJ5CgogICAgaWYgc3RyKEZTLl9fY2xhc3NfXykuZmluZCgnZGljdCcpICE9IC0xOgo8fGZpbV9lbmR8Pg=="]
["68cb782ad4627493e14702aa746139a664a3c899-2","68cb782ad4627493e14702aa746139a664a3c899","PHxmaW1fcHJlZml4fD4KZnJvbSBkb2xmaW4gaW1wb3J0ICoKZnJvbSBQYWNrYWdlTmFtZS5HZW5lcmFsRnVuYyBpbXBvcnQgY29tbW9uCmZyb20gUGFja2FnZU5hbWUuUEVUU2NGdW5jIGltcG9ydCBQRVRTY01hdE9wcwpmcm9tIG51bXB5IGltcG9ydCBjb25jYXRlbmF0ZSwgemVyb3MsIG9uZXMsIHplcm9zLCBhcHBlbmQsIGFycmF5CmZyb20gc2NpcHkuc3BhcnNlIGltcG9ydCBzcGRpYWdzLCBibWF0CgoKCmRlZiBCb3VuZGFyeShTcGFjZSxCb3VuZGFyeU1hcmtlcnMpOgogICAga2V5ID0gQm91bmRhcnlNYXJrZXJzLmtleXMoKQogICAgQkMgPSB6ZXJvcygwKQogICAgZm9yIGkgaW4gcmFuZ2UobGVuKGtleSkpOgogICAgICAgIEJDID0gYXBwZW5kKEJDLGludChzdHIoa2V5W2ldKSkpCiAgICBCb3VuZGFyeSA9IG9uZXMoU3BhY2UuZGltKCkpCiAgICBCb3VuZGFyeVthcnJheShCQykuYXN0eXBlKCdpbnQnKV0gPSAwCiAgICBCQ21hcmtlcnMgPSBzcGRpYWdzKEJvdW5kYXJ5LDAsU3BhY2UuZGltKCksU3BhY2UuZGltKCkpCgogICAgQm91bmRhcnkgPSB6ZXJvcyhTcGFjZS5kaW0oKSkKICAgIEJvdW5kYXJ5W2FycmF5KEJDKS5hc3R5cGUoJ2ludCcpXSA9IDEKICAgIEJDID0gc3BkaWFncyhCb3VuZGFyeSwwLFNwYWNlLmRpbSgpLFNwYWNlLmRpbSgpKQoKICAgIHJldHVybiBCQ21hcmtlcnMsIEJDCgpkZWYgUkhTQXNzZW1ibGUoRlMsIEwsIHUsIGVxKToKCiAgICBkZWYgYm91bmRhcnkoeCwgb25fYm91bmRhcnkpOgogICAgICAgIHJldHVybiBvbl9ib3VuZGFyeQoKICAgIGlmIHN0cihGUy5fX2NsYXNzX18pLmZpbmQoJ2RpY3QnKSAhPSAtMToKICAgICAgICBpZiBlcSA9PSAnRmx1aWQnOgogICAgICAgICAgICBiY3UgPSBEaXJpY2hsZXRCQyhGU1snVmVsb2NpdHknXSwgdVsndTAnXSwgYm91bmRhcnkpCiAgICAgICAgICAgIGJ1ID0gYXNzZW1ibGUoTFsnVmVsb2NpdHknXSkKICAgICAgICAgICAgYmN1LmFwcGx5KGJ1KQogICAgICAgICAgICBpZiBMLmhhc19rZXkoJ1ByZXNzdXJlJyk6CiAgICAgICAgICAgICAgICBicCA9IGFzc2VtYmxlKExbJ1ByZXNzdXJlJ10pCiAgICAgICAgICAgICAgICBiID0gY29uY2F0ZW5hdGUoW2J1LmFycmF5KCksYnAuYXJyYXkoKV0pCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBiID0gY29uY2F0ZW5hdGUoW2J1LmFycmF5KCksemVyb3MoRlNbJ1ByZXNzdXJlJ10uZGltKCkpXSkKICAgICAgICAgICAgVmVsb2NpdHlNYXJrZXJzID0gQm91bmRhcnkoRlNbJ1ZlbG9jaXR5J10sYmN1LmdldF9ib3VuZGFyeV92YWx1ZXMoKSkKICAgICAgICAgICAgbWFya2VycyA9IHsnVmVsb2NpdHknOiBWZWxvY2l0eU1hcmtlcnN9CgogICAgICAgIGVsaWYgZXEgPT0gJ01heHdlbGwnOgogICAgICAgICAgICBiY2IgPSBEaXJpY2hsZXRCQyhGU1snTWFnbmV0aWMnXSwgdVsnYjAnXSwgYm91bmRhcnkpCiAgICAgICAgICAgIGJjciA9IERpcmljaGxldEJDKEZTWydNdWx0aXBsaWVyJ10sIHVbJ3IwJ10sIGJvdW5kYXJ5KQogICAgICAgICAgICBiYiA9IGFzc2VtYmxlKExbJ01hZ25ldGljJ10pCiAgICAgICAgICAgIGJyID0gYXNzZW1ibGUoTFsnTXVsdGlwbGllciddKQo8fGZpbV9ob2xlfD4KCiAgICAgICAgZWxpZiBlcSA9PSAnTUhEJzoKICAgICAgICAgICAgYmN1ID0gRGlyaWNobGV0QkMoRlNbJ1ZlbG9jaXR5J10sIHVbJ3UwJ10sIGJvdW5kYXJ5KQogICAgICAgICAgICBiY2IgPSBEaXJpY2hsZXRCQyhGU1snTWFnbmV0aWMnXSwgdVsnYjAnXSwgYm91bmRhcnkpCiAgICAgICAgICAgIGJjciA9IERpcmljaGxldEJDKEZTWydNdWx0aXBsaWVyJ10sIHVbJ3IwJ10sIGJvdW5kYXJ5KQogICAgICAgICAgICBidSA9IGFzc2VtYmxlKEwpCiAgICAgICAgICAgIGJiID0gYXNzZW1ibGUoTCkKICAgICAgICAgICAgYnIgPSBhc3NlbWJsZShMKQogICAgICAgICAgICBpZiBMLmhhc19rZXkoJ1ByZXNzdXJlJyk6CiAgICAgICAgICAgICAgICBidSA9IGFzc2VtYmxlKExbJ1ByZXNzdXJlJ10pCiAgICAgICAgICAgIGJjdS5hcHBseShidSkKICAgICAgICAgICAgYmNiLmFwcGx5KGJiKQogICAgICAgICAgICBiY3IuYXBwbHkoYnIpCiAgICAgICAgICAgIG1hcmtlcnMgPSB7J1ZlbG9jaXR5JzogYmN1Lm1hcmtlcnMoKSwgJ01hZ25ldGljJzogYmNiLm1hcmtlcnMoKSwgJ011bHRpcGxpZXInOiBiY3IubWFya2VycygpfQoKICAgIGVsc2U6CiAgICAgICAgaWYgZXEgPT0gJ0ZsdWlkJzoKICAgICAgICAgICAgYmN1ID0gRGlyaWNobGV0QkMoRlMuc3ViKDApLCB1Wyd1MCddLCBib3VuZGFyeSkKICAgICAgICAgICAgYiA9IGFzc2VtYmxlKEwpCiAgICAgICAgICAgIGJjdS5hcHBseShiKQoKICAgICAgICBlbGlmIGVxID09ICdNYXh3ZWxsJzoKICAgICAgICAgICAgYmNiID0gRGlyaWNobGV0QkMoRlMuc3ViKDApLCB1WydiMCddLCBib3VuZGFyeSkKICAgICAgICAgICAgYmNyID0gRGlyaWNobGV0QkMoRlMuc3ViKDEpLCB1WydyMCddLCBib3VuZGFyeSkKICAgICAgICAgICAgYiA9IGFzc2VtYmxlKEwpCiAgICAgICAgICAgIGJjYi5hcHBseShiKQogICAgICAgICAgICBiY3IuYXBwbHkoYikKCiAgICAgICAgZWxpZiBlcSA9PSAnTUhEJzoKICAgICAgICAgICAgYmN1ID0gRGlyaWNobGV0QkMoRlMuc3ViKDApLCB1Wyd1MCddLCBib3VuZGFyeSkKICAgICAgICAgICAgYmNiID0gRGlyaWNobGV0QkMoRlMuc3ViKDApLCB1WydiMCddLCBib3VuZGFyeSkKICAgICAgICAgICAgYmNyID0gRGlyaWNobGV0QkMoRlMuc3ViKDApLCB1WydyMCddLCBib3VuZGFyeSkKICAgICAgICAgICAgYnUgPSBhc3NlbWJsZShMKQogICAgICAgICAgICBiYiA9IGFzc2VtYmxlKEwpCiAgICAgICAgICAgIGJyID0gYXNzZW1ibGUoTCkKICAgICAgICAgICAgYmN1LmFwcGx5KGJ1KQogICAgICAgICAgICBiY2IuYXBwbHkoYmIpCiAgICAgICAgICAgIGJjci5hcHBseShicikKCiAgICAgICAgbWFya2VycyA9IDAuMAogICAgcmV0dXJuIGIsIG1hcmtlcnMKCmRlZiBGbHVpZEFzc2VtYmxlKEZTLCBBLCBMLCB1LCBCQywgZXEsIEFvdXQgPSB7fSwgaXRlciA9IDEpOgogICAgZGVmIGJvdW5kYXJ5KHgsIG9uX2JvdW5kYXJ5KToKICAgICAgICByZXR1cm4gb25fYm91bmRhcnkKICAgIGlmIHN0cihGUy5fX2NsYXNzX18pLmZpbmQoJ2RpY3QnKSAhPSAtMToKICAgICAgICBpZiBlcSA9PSAnU3Rva2VzJzoKICAgICAgICAgICAgTGFwbGFjaWFuID0gYXNzZW1ibGUoQVsnTGFwbGFjaWFuJ10pCiAgICAgICAgICAgIGJjdSA9IERpcmljaGxldEJDKEZTWydWZWxvY2l0eSddLCB1Wyd1MCddLCBib3VuZGFyeSkKICAgICAgICAgICAgIyBiY3UuYXBwbHkoTGFwbGFjaWFuKQogICAgICAgICAgICBMYXBsYWNpYW4gPSBCQ1snVmVsb2NpdHknXVswXSpMYXBsYWNpYW4uc3BhcnJheSgpKkJDWydWZWxvY2l0eSddWzBdK0JDWydWZWxvY2l0eSddWzFdCgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIENvbnZlY0RpZmYgPSBhc3NlbWJsZShBWydDb252ZWNEaWZmJ10pCiAgICAgICAgICAgIGJjLmFwcGx5KENvbnZlY0RpZmYpCiAgICAgICAgICAgIENvbnZlY0RpZmYgPSBDb252ZWNEaWZmLnNwYXJyYXkoKQoKICAgICAgICBpZiBpdGVyIDwgMjoKICAgICAgICAgICAgQiA9IGFzc2VtYmxlKEFbJ0dyYWQnXSkKICAgICAgICAgICAgQiA9IEIuc3BhcnJheSgpKkJDWydWZWxvY2l0eSddWzBdCgogICAgICAgIGlmIGVxID09ICdTdG9rZXMnOgogICAgICAgICAgICBpZiBBLmhhc19rZXkoJ1N0YWInKToKICAgICAgICAgICAgICAgIFN0YWIgPSBhc3NlbWJsZShBWydTdGFiJ10pCiAgICAgICAgICAgICAgICBBb3V0WydBJ10gPSAgTGFwbGFjaWFuLnNwYXJyYXkoKQogICAgICAgICAgICAgICAgQW91dFsnQiddID0gQgogICAgICAgICAgICAgICAgQW91dFsnQyddID0gU3RhYgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgQW91dFsnQSddID0gIExhcGxhY2lhbgogICAgICAgICAgICAgICAgQW91dFsnQiddID0gQgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGlmIGl0ZXIgPiAxOgogICAgICAgICAgICAgICAgQW91dFsnQSddID0gQ29udmVjRGlmZgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgQW91dFsnQSddID0gQ29udmVjRGlmZgogICAgICAgICAgICAgICAgQW91dFsnQiddID0gQgogICAgICAgICAgICAgICAgaWYgQS5oYXNfa2V5WydDJ106CiAgICAgICAgICAgICAgICAgICAgQW91dFsnQyddID0gU3RhYgogICAgZWxzZToKICAgICAgICBkZWYgYm91bmRhcnkoeCwgb25fYm91bmRhcnkpOgogICAgICAgICAgICByZXR1cm4gb25fYm91bmRhcnkKICAgICAgICBiYyA9IERpcmljaGxldEJDKEZTLnN1YigwKSwgdVsndTAnXSwgYm91bmRhcnkpCiAgICAgICAgQW91dCwgYiA9IGFzc2VtYmxlX3N5c3RlbShBLCBMLCBiYykKCgogICAgICAgIGFhYXMKCiAgICByZXR1cm4gQW91dAoKCmRlZiBNYWdBc3NlbWJsZShGUywgQSwgTCwgdSwgQkMsIEFvdXQgPSB7fSk6CgogICAgZGVmIGJvdW5kYXJ5KHgsIG9uX2JvdW5kYXJ5KToKICAgICAgICByZXR1cm4gb25fYm91bmRhcnkKCiAgICBpZiBzdHIoRlMuX19jbGFzc19fKS5maW5kKCdkaWN0JykgIT0gLTE6CiAgICAgICAgQ3VybEN1cmwgPSBhc3NlbWJsZShBWydDdXJsQ3VybCddKQogICAgICAgIEN1cmxDdXJsID0gQkNbJ01hZ25ldGljJ11bMF0qQ3VybEN1cmwuc3BhcnJheSgpKkJDWydNYWduZXRpYyddWzBdK0JDWydNYWduZXRpYyddWzFdCiAgICAgICAgYmNyID0gRGlyaWNobGV0QkMoRlNbJ011bHRpcGxpZXInXSwgdVsncjAnXSwgYm91bmRhcnkpCgogICAgICAgIEIgPSBhc3NlbWJsZShBWydEaXYnXSkKICAgICAgICBCID0gQkNbJ011bHRpcGxpZXInXVswXSpCLnNwYXJyYXkoKSpCQ1snTWFnbmV0aWMnXVswXQogICAgICAgIFN0YWIgPSBCQ1snTXVsdGlwbGllciddWzFdCiAgICAgICAgQW91dFsnQSddID0gQ3VybEN1cmwKICAgICAgICBBb3V0WydCJ10gPSBCCiAgICAgICAgQW91dFsnQyddID0gU3RhYgoKICAgIGVsc2U6CiAgICAgICAgZGVmIGJvdW5kYXJ5KHgsIG9uX2JvdW5kYXJ5KToKICAgICAgICAgICAgcmV0dXJuIG9uX2JvdW5kYXJ5CiAgICAgICAgYmNiID0gRGlyaWNobGV0QkMoRlMuc3ViKDApLCB1WydiMCddLCBib3VuZGFyeSkKICAgICAgICBiY3IgPSBEaXJpY2hsZXRCQyhGUy5zdWIoMSksIHVbJ3IwJ10sIGJvdW5kYXJ5KQogICAgICAgIGJjID0gW2JjYiwgYmNyXQogICAgICAgIEFvdXQsIGIgPSBhc3NlbWJsZV9zeXN0ZW0oQSwgTCwgYmMpCiAgICAgICAgcHJpbnQgQW91dC5zcGFycmF5KCkudG9kZW5zZSgpCiAgICAgICAgY29tbW9uLlN0b3JlTWF0cml4KEFvdXQuc3BhcnJheSgpLCdBJykKICAgICAgICBwcmludCBiLmFycmF5KCkKICAgICAgICBzc3MKCiAgICByZXR1cm4gQW91dAoKZGVmIFBFVFNjQXNzZW1ibGUoRlMsIEEsIGIsIG9wdCA9ICdNYXRyaXgnKToKCiAgICBpZiBzdHIoRlMuX19jbGFzc19fKS5maW5kKCdkaWN0JykgIT0gLTE6CiAgICAgICAgaWYgb3B0ID09ICdNYXRyaXgnOgogICAgICAgICAgICBpZiBBLmhhc19rZXkoJ0MnKSA9PSBUcnVlOgogICAgICAgICAgICAgICAgQW91dCA9IFBFVFNjTWF0T3BzLlNjaXB5MlBFVFNjKGJtYXQoW1tBWydBJ10sQVsnQiddLlRdLAogICAgICAgICAgICAgICAgICAgIFtBWydCJ10sQVsnQyddXV0pKQogICAgICAgICAgICAgICAgY29tbW9uLlN0b3JlTWF0cml4KGJtYXQoW1tBWydBJ10sQVsnQiddLlRdLAogICAgICAgICAgICAgICAgICAgIFtBWydCJ10sQVsnQyddXV0pLCdBJykKCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBBb3V0ID0gUEVUU2NNYXRPcHMuU2NpcHkyUEVUU2MoYm1hdChbW0FbJ0EnXSxBWydCJ10uVF0sCiAgICAgICAgICAgICAgICAgICAgW0FbJ0InXSxOb25lXV0pKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIEEuaXRlcml0ZW1zKCk6CiAgICAgICAgICAgICAgICBBW2tleV0gPSBQRVRTY01hdE9wcy5TY2lweTJQRVRTYyh2YWx1ZSkKICAgICAgICAgICAgQW91dCA9IFBFVFNjLk1hdCgpLmNyZWF0ZVB5dGhvbihbRlMua2V5cygpWzBdICsgRlMua2V5cygpWzFdLCBGUy5rZXlzKClbMF0gKyBGUy5rZXlzKClbMV1dKQogICAgICAgICAgICBBb3V0LnNldFR5cGUoJ3B5dGhvbicpCiAgICAgICAgICAgIHAgPSBNSERtdWx0aS5NSERtYXQoVyxBKQogICAgICAgICAgICBBb3V0LnNldFB5dGhvbkNvbnRleHQocCkKICAgICAgICBiID0gUEVUU2NNYXRPcHMuYXJyYXlUb1ZlYyhiKQoKICAgIGVsc2U6CiAgICAgICAgQW91dCwgYiA9IFBFVFNjTWF0T3BzLkFzc2VtYmxlKEEsYikKCiAgICBwcmludCBiLmFycmF5CiAgICBzc3NzCiAgICByZXR1cm4gQW91dCwgYgoKCgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgYmNiLmFwcGx5KGJiKQogICAgICAgICAgICBiY3IuYXBwbHkoYnIpCiAgICAgICAgICAgIG1hcmtlcnMgPSB7J01hZ25ldGljJzogQm91bmRhcnkoRlNbJ01hZ25ldGljJ10sYmNiLmdldF9ib3VuZGFyeV92YWx1ZXMoKSksICdNdWx0aXBsaWVyJzogQm91bmRhcnkoRlNbJ011bHRpcGxpZXInXSxiY3IuZ2V0X2JvdW5kYXJ5X3ZhbHVlcygpKX0KICAgICAgICAgICAgYiA9IGNvbmNhdGVuYXRlKFtiYi5hcnJheSgpLGJyLmFycmF5KCldKQo8fGZpbV9lbmR8Pg=="]
["68cb782ad4627493e14702aa746139a664a3c899-3","68cb782ad4627493e14702aa746139a664a3c899","PHxmaW1fcHJlZml4fD4KZnJvbSBkb2xmaW4gaW1wb3J0ICoKZnJvbSBQYWNrYWdlTmFtZS5HZW5lcmFsRnVuYyBpbXBvcnQgY29tbW9uCmZyb20gUGFja2FnZU5hbWUuUEVUU2NGdW5jIGltcG9ydCBQRVRTY01hdE9wcwpmcm9tIG51bXB5IGltcG9ydCBjb25jYXRlbmF0ZSwgemVyb3MsIG9uZXMsIHplcm9zLCBhcHBlbmQsIGFycmF5CmZyb20gc2NpcHkuc3BhcnNlIGltcG9ydCBzcGRpYWdzLCBibWF0CgoKCmRlZiBCb3VuZGFyeShTcGFjZSxCb3VuZGFyeU1hcmtlcnMpOgogICAga2V5ID0gQm91bmRhcnlNYXJrZXJzLmtleXMoKQogICAgQkMgPSB6ZXJvcygwKQogICAgZm9yIGkgaW4gcmFuZ2UobGVuKGtleSkpOgogICAgICAgIEJDID0gYXBwZW5kKEJDLGludChzdHIoa2V5W2ldKSkpCiAgICBCb3VuZGFyeSA9IG9uZXMoU3BhY2UuZGltKCkpCiAgICBCb3VuZGFyeVthcnJheShCQykuYXN0eXBlKCdpbnQnKV0gPSAwCiAgICBCQ21hcmtlcnMgPSBzcGRpYWdzKEJvdW5kYXJ5LDAsU3BhY2UuZGltKCksU3BhY2UuZGltKCkpCgogICAgQm91bmRhcnkgPSB6ZXJvcyhTcGFjZS5kaW0oKSkKICAgIEJvdW5kYXJ5W2FycmF5KEJDKS5hc3R5cGUoJ2ludCcpXSA9IDEKICAgIEJDID0gc3BkaWFncyhCb3VuZGFyeSwwLFNwYWNlLmRpbSgpLFNwYWNlLmRpbSgpKQoKICAgIHJldHVybiBCQ21hcmtlcnMsIEJDCgpkZWYgUkhTQXNzZW1ibGUoRlMsIEwsIHUsIGVxKToKCiAgICBkZWYgYm91bmRhcnkoeCwgb25fYm91bmRhcnkpOgogICAgICAgIHJldHVybiBvbl9ib3VuZGFyeQoKICAgIGlmIHN0cihGUy5fX2NsYXNzX18pLmZpbmQoJ2RpY3QnKSAhPSAtMToKICAgICAgICBpZiBlcSA9PSAnRmx1aWQnOgogICAgICAgICAgICBiY3UgPSBEaXJpY2hsZXRCQyhGU1snVmVsb2NpdHknXSwgdVsndTAnXSwgYm91bmRhcnkpCiAgICAgICAgICAgIGJ1ID0gYXNzZW1ibGUoTFsnVmVsb2NpdHknXSkKICAgICAgICAgICAgYmN1LmFwcGx5KGJ1KQogICAgICAgICAgICBpZiBMLmhhc19rZXkoJ1ByZXNzdXJlJyk6CiAgICAgICAgICAgICAgICBicCA9IGFzc2VtYmxlKExbJ1ByZXNzdXJlJ10pCiAgICAgICAgICAgICAgICBiID0gY29uY2F0ZW5hdGUoW2J1LmFycmF5KCksYnAuYXJyYXkoKV0pCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBiID0gY29uY2F0ZW5hdGUoW2J1LmFycmF5KCksemVyb3MoRlNbJ1ByZXNzdXJlJ10uZGltKCkpXSkKICAgICAgICAgICAgVmVsb2NpdHlNYXJrZXJzID0gQm91bmRhcnkoRlNbJ1ZlbG9jaXR5J10sYmN1LmdldF9ib3VuZGFyeV92YWx1ZXMoKSkKICAgICAgICAgICAgbWFya2VycyA9IHsnVmVsb2NpdHknOiBWZWxvY2l0eU1hcmtlcnN9CgogICAgICAgIGVsaWYgZXEgPT0gJ01heHdlbGwnOgogICAgICAgICAgICBiY2IgPSBEaXJpY2hsZXRCQyhGU1snTWFnbmV0aWMnXSwgdVsnYjAnXSwgYm91bmRhcnkpCiAgICAgICAgICAgIGJjciA9IERpcmljaGxldEJDKEZTWydNdWx0aXBsaWVyJ10sIHVbJ3IwJ10sIGJvdW5kYXJ5KQogICAgICAgICAgICBiYiA9IGFzc2VtYmxlKExbJ01hZ25ldGljJ10pCiAgICAgICAgICAgIGJyID0gYXNzZW1ibGUoTFsnTXVsdGlwbGllciddKQogICAgICAgICAgICBiY2IuYXBwbHkoYmIpCiAgICAgICAgICAgIGJjci5hcHBseShicikKICAgICAgICAgICAgbWFya2VycyA9IHsnTWFnbmV0aWMnOiBCb3VuZGFyeShGU1snTWFnbmV0aWMnXSxiY2IuZ2V0X2JvdW5kYXJ5X3ZhbHVlcygpKSwgJ011bHRpcGxpZXInOiBCb3VuZGFyeShGU1snTXVsdGlwbGllciddLGJjci5nZXRfYm91bmRhcnlfdmFsdWVzKCkpfQogICAgICAgICAgICBiID0gY29uY2F0ZW5hdGUoW2JiLmFycmF5KCksYnIuYXJyYXkoKV0pCgogICAgICAgIGVsaWYgZXEgPT0gJ01IRCc6CiAgICAgICAgICAgIGJjdSA9IERpcmljaGxldEJDKEZTWydWZWxvY2l0eSddLCB1Wyd1MCddLCBib3VuZGFyeSkKICAgICAgICAgICAgYmNiID0gRGlyaWNobGV0QkMoRlNbJ01hZ25ldGljJ10sIHVbJ2IwJ10sIGJvdW5kYXJ5KQogICAgICAgICAgICBiY3IgPSBEaXJpY2hsZXRCQyhGU1snTXVsdGlwbGllciddLCB1WydyMCddLCBib3VuZGFyeSkKICAgICAgICAgICAgYnUgPSBhc3NlbWJsZShMKQogICAgICAgICAgICBiYiA9IGFzc2VtYmxlKEwpCiAgICAgICAgICAgIGJyID0gYXNzZW1ibGUoTCkKICAgICAgICAgICAgaWYgTC5oYXNfa2V5KCdQcmVzc3VyZScpOgogICAgICAgICAgICAgICAgYnUgPSBhc3NlbWJsZShMWydQcmVzc3VyZSddKQogICAgICAgICAgICBiY3UuYXBwbHkoYnUpCiAgICAgICAgICAgIGJjYi5hcHBseShiYikKICAgICAgICAgICAgYmNyLmFwcGx5KGJyKQo8fGZpbV9ob2xlfD4KICAgIGVsc2U6CiAgICAgICAgaWYgZXEgPT0gJ0ZsdWlkJzoKICAgICAgICAgICAgYmN1ID0gRGlyaWNobGV0QkMoRlMuc3ViKDApLCB1Wyd1MCddLCBib3VuZGFyeSkKICAgICAgICAgICAgYiA9IGFzc2VtYmxlKEwpCiAgICAgICAgICAgIGJjdS5hcHBseShiKQoKICAgICAgICBlbGlmIGVxID09ICdNYXh3ZWxsJzoKICAgICAgICAgICAgYmNiID0gRGlyaWNobGV0QkMoRlMuc3ViKDApLCB1WydiMCddLCBib3VuZGFyeSkKICAgICAgICAgICAgYmNyID0gRGlyaWNobGV0QkMoRlMuc3ViKDEpLCB1WydyMCddLCBib3VuZGFyeSkKICAgICAgICAgICAgYiA9IGFzc2VtYmxlKEwpCiAgICAgICAgICAgIGJjYi5hcHBseShiKQogICAgICAgICAgICBiY3IuYXBwbHkoYikKCiAgICAgICAgZWxpZiBlcSA9PSAnTUhEJzoKICAgICAgICAgICAgYmN1ID0gRGlyaWNobGV0QkMoRlMuc3ViKDApLCB1Wyd1MCddLCBib3VuZGFyeSkKICAgICAgICAgICAgYmNiID0gRGlyaWNobGV0QkMoRlMuc3ViKDApLCB1WydiMCddLCBib3VuZGFyeSkKICAgICAgICAgICAgYmNyID0gRGlyaWNobGV0QkMoRlMuc3ViKDApLCB1WydyMCddLCBib3VuZGFyeSkKICAgICAgICAgICAgYnUgPSBhc3NlbWJsZShMKQogICAgICAgICAgICBiYiA9IGFzc2VtYmxlKEwpCiAgICAgICAgICAgIGJyID0gYXNzZW1ibGUoTCkKICAgICAgICAgICAgYmN1LmFwcGx5KGJ1KQogICAgICAgICAgICBiY2IuYXBwbHkoYmIpCiAgICAgICAgICAgIGJjci5hcHBseShicikKCiAgICAgICAgbWFya2VycyA9IDAuMAogICAgcmV0dXJuIGIsIG1hcmtlcnMKCmRlZiBGbHVpZEFzc2VtYmxlKEZTLCBBLCBMLCB1LCBCQywgZXEsIEFvdXQgPSB7fSwgaXRlciA9IDEpOgogICAgZGVmIGJvdW5kYXJ5KHgsIG9uX2JvdW5kYXJ5KToKICAgICAgICByZXR1cm4gb25fYm91bmRhcnkKICAgIGlmIHN0cihGUy5fX2NsYXNzX18pLmZpbmQoJ2RpY3QnKSAhPSAtMToKICAgICAgICBpZiBlcSA9PSAnU3Rva2VzJzoKICAgICAgICAgICAgTGFwbGFjaWFuID0gYXNzZW1ibGUoQVsnTGFwbGFjaWFuJ10pCiAgICAgICAgICAgIGJjdSA9IERpcmljaGxldEJDKEZTWydWZWxvY2l0eSddLCB1Wyd1MCddLCBib3VuZGFyeSkKICAgICAgICAgICAgIyBiY3UuYXBwbHkoTGFwbGFjaWFuKQogICAgICAgICAgICBMYXBsYWNpYW4gPSBCQ1snVmVsb2NpdHknXVswXSpMYXBsYWNpYW4uc3BhcnJheSgpKkJDWydWZWxvY2l0eSddWzBdK0JDWydWZWxvY2l0eSddWzFdCgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIENvbnZlY0RpZmYgPSBhc3NlbWJsZShBWydDb252ZWNEaWZmJ10pCiAgICAgICAgICAgIGJjLmFwcGx5KENvbnZlY0RpZmYpCiAgICAgICAgICAgIENvbnZlY0RpZmYgPSBDb252ZWNEaWZmLnNwYXJyYXkoKQoKICAgICAgICBpZiBpdGVyIDwgMjoKICAgICAgICAgICAgQiA9IGFzc2VtYmxlKEFbJ0dyYWQnXSkKICAgICAgICAgICAgQiA9IEIuc3BhcnJheSgpKkJDWydWZWxvY2l0eSddWzBdCgogICAgICAgIGlmIGVxID09ICdTdG9rZXMnOgogICAgICAgICAgICBpZiBBLmhhc19rZXkoJ1N0YWInKToKICAgICAgICAgICAgICAgIFN0YWIgPSBhc3NlbWJsZShBWydTdGFiJ10pCiAgICAgICAgICAgICAgICBBb3V0WydBJ10gPSAgTGFwbGFjaWFuLnNwYXJyYXkoKQogICAgICAgICAgICAgICAgQW91dFsnQiddID0gQgogICAgICAgICAgICAgICAgQW91dFsnQyddID0gU3RhYgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgQW91dFsnQSddID0gIExhcGxhY2lhbgogICAgICAgICAgICAgICAgQW91dFsnQiddID0gQgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGlmIGl0ZXIgPiAxOgogICAgICAgICAgICAgICAgQW91dFsnQSddID0gQ29udmVjRGlmZgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgQW91dFsnQSddID0gQ29udmVjRGlmZgogICAgICAgICAgICAgICAgQW91dFsnQiddID0gQgogICAgICAgICAgICAgICAgaWYgQS5oYXNfa2V5WydDJ106CiAgICAgICAgICAgICAgICAgICAgQW91dFsnQyddID0gU3RhYgogICAgZWxzZToKICAgICAgICBkZWYgYm91bmRhcnkoeCwgb25fYm91bmRhcnkpOgogICAgICAgICAgICByZXR1cm4gb25fYm91bmRhcnkKICAgICAgICBiYyA9IERpcmljaGxldEJDKEZTLnN1YigwKSwgdVsndTAnXSwgYm91bmRhcnkpCiAgICAgICAgQW91dCwgYiA9IGFzc2VtYmxlX3N5c3RlbShBLCBMLCBiYykKCgogICAgICAgIGFhYXMKCiAgICByZXR1cm4gQW91dAoKCmRlZiBNYWdBc3NlbWJsZShGUywgQSwgTCwgdSwgQkMsIEFvdXQgPSB7fSk6CgogICAgZGVmIGJvdW5kYXJ5KHgsIG9uX2JvdW5kYXJ5KToKICAgICAgICByZXR1cm4gb25fYm91bmRhcnkKCiAgICBpZiBzdHIoRlMuX19jbGFzc19fKS5maW5kKCdkaWN0JykgIT0gLTE6CiAgICAgICAgQ3VybEN1cmwgPSBhc3NlbWJsZShBWydDdXJsQ3VybCddKQogICAgICAgIEN1cmxDdXJsID0gQkNbJ01hZ25ldGljJ11bMF0qQ3VybEN1cmwuc3BhcnJheSgpKkJDWydNYWduZXRpYyddWzBdK0JDWydNYWduZXRpYyddWzFdCiAgICAgICAgYmNyID0gRGlyaWNobGV0QkMoRlNbJ011bHRpcGxpZXInXSwgdVsncjAnXSwgYm91bmRhcnkpCgogICAgICAgIEIgPSBhc3NlbWJsZShBWydEaXYnXSkKICAgICAgICBCID0gQkNbJ011bHRpcGxpZXInXVswXSpCLnNwYXJyYXkoKSpCQ1snTWFnbmV0aWMnXVswXQogICAgICAgIFN0YWIgPSBCQ1snTXVsdGlwbGllciddWzFdCiAgICAgICAgQW91dFsnQSddID0gQ3VybEN1cmwKICAgICAgICBBb3V0WydCJ10gPSBCCiAgICAgICAgQW91dFsnQyddID0gU3RhYgoKICAgIGVsc2U6CiAgICAgICAgZGVmIGJvdW5kYXJ5KHgsIG9uX2JvdW5kYXJ5KToKICAgICAgICAgICAgcmV0dXJuIG9uX2JvdW5kYXJ5CiAgICAgICAgYmNiID0gRGlyaWNobGV0QkMoRlMuc3ViKDApLCB1WydiMCddLCBib3VuZGFyeSkKICAgICAgICBiY3IgPSBEaXJpY2hsZXRCQyhGUy5zdWIoMSksIHVbJ3IwJ10sIGJvdW5kYXJ5KQogICAgICAgIGJjID0gW2JjYiwgYmNyXQogICAgICAgIEFvdXQsIGIgPSBhc3NlbWJsZV9zeXN0ZW0oQSwgTCwgYmMpCiAgICAgICAgcHJpbnQgQW91dC5zcGFycmF5KCkudG9kZW5zZSgpCiAgICAgICAgY29tbW9uLlN0b3JlTWF0cml4KEFvdXQuc3BhcnJheSgpLCdBJykKICAgICAgICBwcmludCBiLmFycmF5KCkKICAgICAgICBzc3MKCiAgICByZXR1cm4gQW91dAoKZGVmIFBFVFNjQXNzZW1ibGUoRlMsIEEsIGIsIG9wdCA9ICdNYXRyaXgnKToKCiAgICBpZiBzdHIoRlMuX19jbGFzc19fKS5maW5kKCdkaWN0JykgIT0gLTE6CiAgICAgICAgaWYgb3B0ID09ICdNYXRyaXgnOgogICAgICAgICAgICBpZiBBLmhhc19rZXkoJ0MnKSA9PSBUcnVlOgogICAgICAgICAgICAgICAgQW91dCA9IFBFVFNjTWF0T3BzLlNjaXB5MlBFVFNjKGJtYXQoW1tBWydBJ10sQVsnQiddLlRdLAogICAgICAgICAgICAgICAgICAgIFtBWydCJ10sQVsnQyddXV0pKQogICAgICAgICAgICAgICAgY29tbW9uLlN0b3JlTWF0cml4KGJtYXQoW1tBWydBJ10sQVsnQiddLlRdLAogICAgICAgICAgICAgICAgICAgIFtBWydCJ10sQVsnQyddXV0pLCdBJykKCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBBb3V0ID0gUEVUU2NNYXRPcHMuU2NpcHkyUEVUU2MoYm1hdChbW0FbJ0EnXSxBWydCJ10uVF0sCiAgICAgICAgICAgICAgICAgICAgW0FbJ0InXSxOb25lXV0pKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIEEuaXRlcml0ZW1zKCk6CiAgICAgICAgICAgICAgICBBW2tleV0gPSBQRVRTY01hdE9wcy5TY2lweTJQRVRTYyh2YWx1ZSkKICAgICAgICAgICAgQW91dCA9IFBFVFNjLk1hdCgpLmNyZWF0ZVB5dGhvbihbRlMua2V5cygpWzBdICsgRlMua2V5cygpWzFdLCBGUy5rZXlzKClbMF0gKyBGUy5rZXlzKClbMV1dKQogICAgICAgICAgICBBb3V0LnNldFR5cGUoJ3B5dGhvbicpCiAgICAgICAgICAgIHAgPSBNSERtdWx0aS5NSERtYXQoVyxBKQogICAgICAgICAgICBBb3V0LnNldFB5dGhvbkNvbnRleHQocCkKICAgICAgICBiID0gUEVUU2NNYXRPcHMuYXJyYXlUb1ZlYyhiKQoKICAgIGVsc2U6CiAgICAgICAgQW91dCwgYiA9IFBFVFNjTWF0T3BzLkFzc2VtYmxlKEEsYikKCiAgICBwcmludCBiLmFycmF5CiAgICBzc3NzCiAgICByZXR1cm4gQW91dCwgYgoKCgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgbWFya2VycyA9IHsnVmVsb2NpdHknOiBiY3UubWFya2VycygpLCAnTWFnbmV0aWMnOiBiY2IubWFya2VycygpLCAnTXVsdGlwbGllcic6IGJjci5tYXJrZXJzKCl9Cgo8fGZpbV9lbmR8Pg=="]
["ec5b8c3f329986f26ae2298317d189b6b69dfcd2-1","ec5b8c3f329986f26ae2298317d189b6b69dfcd2","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiIiIkVuc2VtYmxlIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UuIFNlZSA8aW5zZXJ0IHdlYnNpdGUgaGVyZT4gZm9yIG1vcmUgaW5mby4KCkNvbW1hbmRzOgoKICAqIHJ1bjogUnVuIHRoZSBlbnNlbWJsZSBtb2RlbC4KICAqIGNsZWFudXA6IERlbGV0ZSBhbGwgbW9kZWwgcnVucyBtb3JlIHRoYW4gb25lIHdlZWsgb2xkLgogICogeHNkOiBWYWxpZGF0ZSB0aGUgZWNvc3BvbGQyIGZpbGVzIGluIDxkaXJwYXRoPiBhZ2FpbnN0IHRoZSBkZWZhdWx0IFhTRCBvciBhbm90aGVyIFhTRCBzcGVjaWZpZWQgaW4gPHNjaGVtYT4uCjx8ZmltX2hvbGV8PgogIGVuc2VtYmxlLWNsaSBjbGVhbnVwCiAgZW5zZW1ibGUtY2xpIC1oIHwgLS1oZWxwCiAgZW5zZW1ibGUtY2xpIC0tdmVyc2lvbgoKT3B0aW9uczoKICAtaCAtLWhlbHAgICAgICAgICAgU2hvdyB0aGlzIHNjcmVlbi4KICAtLXZlcnNpb24gICAgICAgICAgU2hvdyB2ZXJzaW9uLgoKIiIiCmZyb20gZG9jb3B0IGltcG9ydCBkb2NvcHQKaW1wb3J0IG9zCmltcG9ydCBzeXMKCgpkZWYgbWFpbigpOgogICAgdHJ5OgogICAgICAgIHBhc3MKICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICBwcmludCgiVGVybWluYXRpbmcgZW5zZW1ibGUgQ0xJIikKICAgICAgICBzeXMuZXhpdCgxKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KClVzYWdlOgogICMgVE9ETzogQWRhcHQgZm9yIGVuc2VtYmxlCiAgZW5zZW1ibGUtY2xpIHJ1biA8ZGlycGF0aD4gWy0tbm9zaG93XSBbLS1zYXZlPTxzdHJhdGVneT5dCjx8ZmltX2VuZHw+"]
["41317251d6fff05976ed6f48b4d7edb87cc81ca8-1","41317251d6fff05976ed6f48b4d7edb87cc81ca8","PHxmaW1fcHJlZml4fD4KIyBlbmNvZGluZzogdXRmLTgKCmltcG9ydCBtb2NrCmltcG9ydCB1bml0dGVzdApmcm9tIG5vc2UudG9vbHMgaW1wb3J0ICogICMgbm9xYQoKZnJvbSB0ZXN0cy5iYXNlIGltcG9ydCBPc2ZUZXN0Q2FzZQpmcm9tIHRlc3RzLmZhY3RvcmllcyBpbXBvcnQgUHJvamVjdEZhY3RvcnkKCmZyb20gd2Vic2l0ZS5hZGRvbnMub3Nmc3RvcmFnZS50ZXN0cyBpbXBvcnQgZmFjdG9yaWVzCmZyb20gd2Vic2l0ZS5hZGRvbnMub3Nmc3RvcmFnZS50ZXN0cy51dGlscyBpbXBvcnQgU3RvcmFnZVRlc3RDYXNlCgppbXBvcnQgZGF0ZXRpbWUKCmZyb20gbW9kdWxhcm9kbSBpbXBvcnQgZXhjZXB0aW9ucyBhcyBtb2RtX2Vycm9ycwoKCmZyb20gd2Vic2l0ZS5hZGRvbnMub3Nmc3RvcmFnZSBpbXBvcnQgdXRpbHMKZnJvbSB3ZWJzaXRlLmFkZG9ucy5vc2ZzdG9yYWdlIGltcG9ydCBtb2RlbApmcm9tIHdlYnNpdGUuYWRkb25zLm9zZnN0b3JhZ2UgaW1wb3J0IHNldHRpbmdzCgoKY2xhc3MgVGVzdEZpbGVHdWlkKE9zZlRlc3RDYXNlKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIHN1cGVyKE9zZlRlc3RDYXNlLCBzZWxmKS5zZXRVcCgpCiAgICAgICAgc2VsZi51c2VyID0gZmFjdG9yaWVzLkF1dGhVc2VyRmFjdG9yeSgpCiAgICAgICAgc2VsZi5wcm9qZWN0ID0gUHJvamVjdEZhY3RvcnkoY3JlYXRvcj1zZWxmLnVzZXIpCjx8ZmltX2VuZHw+"]
["41317251d6fff05976ed6f48b4d7edb87cc81ca8-2","41317251d6fff05976ed6f48b4d7edb87cc81ca8","PHxmaW1fcHJlZml4fD4KIyBlbmNvZGluZzogdXRmLTgKCmltcG9ydCBtb2NrCmltcG9ydCB1bml0dGVzdApmcm9tIG5vc2UudG9vbHMgaW1wb3J0ICogICMgbm9xYQoKZnJvbSB0ZXN0cy5iYXNlIGltcG9ydCBPc2ZUZXN0Q2FzZQpmcm9tIHRlc3RzLmZhY3RvcmllcyBpbXBvcnQgUHJvamVjdEZhY3RvcnkKCmZyb20gd2Vic2l0ZS5hZGRvbnMub3Nmc3RvcmFnZS50ZXN0cyBpbXBvcnQgZmFjdG9yaWVzCmZyb20gd2Vic2l0ZS5hZGRvbnMub3Nmc3RvcmFnZS50ZXN0cy51dGlscyBpbXBvcnQgU3RvcmFnZVRlc3RDYXNlCgppbXBvcnQgZGF0ZXRpbWUKCmZyb20gbW9kdWxhcm9kbSBpbXBvcnQgZXhjZXB0aW9ucyBhcyBtb2RtX2Vycm9ycwoKCmZyb20gd2Vic2l0ZS5hZGRvbnMub3Nmc3RvcmFnZSBpbXBvcnQgdXRpbHMKZnJvbSB3ZWJzaXRlLmFkZG9ucy5vc2ZzdG9yYWdlIGltcG9ydCBtb2RlbApmcm9tIHdlYnNpdGUuYWRkb25zLm9zZnN0b3JhZ2UgaW1wb3J0IHNldHRpbmdzCgoKY2xhc3MgVGVzdEZpbGVHdWlkKE9zZlRlc3RDYXNlKToKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBzdXBlcihPc2ZUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQogICAgICAgIHNlbGYudXNlciA9IGZhY3Rvcmllcy5BdXRoVXNlckZhY3RvcnkoKQogICAgICAgIHNlbGYucHJvamVjdCA9IFByb2plY3RGYWN0b3J5KGNyZWF0b3I9c2VsZi51c2VyKQogICAgICAgIHNlbGYubm9kZV9hZGRvbiA9IHNlbGYucHJvamVjdC5nZXRfYWRkb24oJ29zZnN0b3JhZ2UnKQoKICAgIGRlZiB0ZXN0X3Byb3ZpZGVyKHNlbGYpOgogICAgICAgIGFzc2VydF9lcXVhbCgnb3Nmc3RvcmFnZScsIG1vZGVsLk9zZlN0b3JhZ2VHdWlkRmlsZSgpLnByb3ZpZGVyKQoKICAgIGRlZiB0ZXN0X2NvcnJlY3RfcGF0aChzZWxmKToKICAgICAgICBndWlkID0gbW9kZWwuT3NmU3RvcmFnZUd1aWRGaWxlKG5vZGU9c2VsZi5wcm9qZWN0LCBwYXRoPScvYmF6L2Zvby9iYXInKQoKICAgICAgICBhc3NlcnRfZXF1YWxzKGd1aWQucGF0aCwgJy9iYXovZm9vL2JhcicpCiAgICAgICAgYXNzZXJ0X2VxdWFsKGd1aWQucGF0aCwgZ3VpZC53YXRlcmJ1dGxlcl9wYXRoKQogICAgICAgIGFzc2VydF9lcXVhbHMoZ3VpZC53YXRlcmJ1dGxlcl9wYXRoLCAnL2Jhei9mb28vYmFyJykKCiAgICBAbW9jay5wYXRjaCgnd2Vic2l0ZS5hZGRvbnMuYmFzZS5yZXF1ZXN0cy5nZXQnKQogICAgZGVmIHRlc3RfdW5pcXVlX2lkZW50aWZpZXIoc2VsZiwgbW9ja19nZXQpOgogICAgICAgIG1vY2tfcmVzcG9uc2UgPSBtb2NrLk1vY2sob2s9VHJ1ZSwgc3RhdHVzX2NvZGU9MjAwKQogICAgICAgIG1vY2tfZ2V0LnJldHVybl92YWx1ZSA9IG1vY2tfcmVzcG9uc2UKICAgICAgICBtb2NrX3Jlc3BvbnNlLmpzb24ucmV0dXJuX3ZhbHVlID0gewogICAgICAgICAgICAnZGF0YSc6IHsKICAgICAgICAgICAgICAgICduYW1lJzogJ01vcnR5JywKICAgICAgICAgICAgICAgICdleHRyYSc6IHsKICAgICAgICAgICAgICAgICAgICAndmVyc2lvbic6ICdUZXJyYW4gaXQgdXAnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGd1aWQgPSBtb2RlbC5Pc2ZTdG9yYWdlR3VpZEZpbGUobm9kZT1zZWxmLnByb2plY3QsIHBhdGg9Jy9mb28vYmFyJykKCiAgICAgICAgZ3VpZC5lbnJpY2goKQogICAgICAgIGFzc2VydF9lcXVhbHMoJ1RlcnJhbiBpdCB1cCcsIGd1aWQudW5pcXVlX2lkZW50aWZpZXIpCgogICAgZGVmIHRlc3Rfbm9kZV9hZGRvbl9nZXRfb3JfY3JlYXRlKHNlbGYpOgogICAgICAgIGd1aWQsIGNyZWF0ZWQgPSBzZWxmLm5vZGVfYWRkb24uZmluZF9vcl9jcmVhdGVfZmlsZV9ndWlkKCcvYmF6L2Zvby9iYXInKQoKICAgICAgICBhc3NlcnRfdHJ1ZShjcmVhdGVkKQogICAgICAgIGFzc2VydF9lcXVhbChndWlkLnBhdGgsICcvYmF6L2Zvby9iYXInKQogICAgICAgIGFzc2VydF9lcXVhbChndWlkLnBhdGgsIGd1aWQud2F0ZXJidXRsZXJfcGF0aCkKICAgICAgICBhc3NlcnRfZXF1YWwoZ3VpZC53YXRlcmJ1dGxlcl9wYXRoLCAnL2Jhei9mb28vYmFyJykKCiAgICBkZWYgdGVzdF9ub2RlX2FkZG9uX2dldF9vcl9jcmVhdGVfZmluZHMoc2VsZik6CiAgICAgICAgZ3VpZDEsIGNyZWF0ZWQxID0gc2VsZi5ub2RlX2FkZG9uLmZpbmRfb3JfY3JlYXRlX2ZpbGVfZ3VpZCgnL2Zvby9iYXInKQogICAgICAgIGd1aWQyLCBjcmVhdGVkMiA9IHNlbGYubm9kZV9hZGRvbi5maW5kX29yX2NyZWF0ZV9maWxlX2d1aWQoJy9mb28vYmFyJykKCiAgICAgICAgYXNzZXJ0X3RydWUoY3JlYXRlZDEpCiAgICAgICAgYXNzZXJ0X2ZhbHNlKGNyZWF0ZWQyKQogICAgICAgIGFzc2VydF9lcXVhbHMoZ3VpZDEsIGd1aWQyKQoKCmNsYXNzIFRlc3RPc2ZzdG9yYWdlRmlsZU5vZGUoU3RvcmFnZVRlc3RDYXNlKToKCiAgICBkZWYgdGVzdF9yb290X25vZGVfZXhpc3RzKHNlbGYpOgogICAgICAgIGFzc2VydF90cnVlKHNlbGYubm9kZV9zZXR0aW5ncy5yb290X25vZGUgaXMgbm90IE5vbmUpCgogICAgZGVmIHRlc3Rfcm9vdF9ub2RlX2hhc19ub19wYXJlbnQoc2VsZik6CiAgICAgICAgYXNzZXJ0X3RydWUoc2VsZi5ub2RlX3NldHRpbmdzLnJvb3Rfbm9kZS5wYXJlbnQgaXMgTm9uZSkKCiAgICBkZWYgdGVzdF9ub2RlX3JlZmVyZW5jZShzZWxmKToKICAgICAgICBhc3NlcnRfZXF1YWwoc2VsZi5wcm9qZWN0LCBzZWxmLm5vZGVfc2V0dGluZ3Mucm9vdF9ub2RlLm5vZGUpCgogICAgZGVmIHRlc3RfZ2V0X2ZvbGRlcihzZWxmKToKICAgICAgICBmaWxlID0gbW9kZWwuT3NmU3RvcmFnZUZpbGVOb2RlKG5hbWU9J01PQVIgUFlMT05TJywga2luZD0nZmlsZScsIG5vZGVfc2V0dGluZ3M9c2VsZi5ub2RlX3NldHRpbmdzKQogICAgICAgIGZvbGRlciA9IG1vZGVsLk9zZlN0b3JhZ2VGaWxlTm9kZShuYW1lPSdNT0FSIFBZTE9OUycsIGtpbmQ9J2ZvbGRlcicsIG5vZGVfc2V0dGluZ3M9c2VsZi5ub2RlX3NldHRpbmdzKQoKICAgICAgICBfaWQgPSBmb2xkZXIuX2lkCgogICAgICAgIGZpbGUuc2F2ZSgpCiAgICAgICAgZm9sZGVyLnNhdmUoKQoKICAgICAgICBhc3NlcnRfZXF1YWwoZm9sZGVyLCBtb2RlbC5Pc2ZTdG9yYWdlRmlsZU5vZGUuZ2V0X2ZvbGRlcihfaWQsIHNlbGYubm9kZV9zZXR0aW5ncykpCgogICAgZGVmIHRlc3RfZ2V0X2ZpbGUoc2VsZik6CiAgICAgICAgZmlsZSA9IG1vZGVsLk9zZlN0b3JhZ2VGaWxlTm9kZShuYW1lPSdNT0FSIFBZTE9OUycsIGtpbmQ9J2ZpbGUnLCBub2RlX3NldHRpbmdzPXNlbGYubm9kZV9zZXR0aW5ncykKICAgICAgICBmb2xkZXIgPSBtb2RlbC5Pc2ZTdG9yYWdlRmlsZU5vZGUobmFtZT0nTU9BUiBQWUxPTlMnLCBraW5kPSdmb2xkZXInLCBub2RlX3NldHRpbmdzPXNlbGYubm9kZV9zZXR0aW5ncykKCiAgICAgICAgZmlsZS5zYXZlKCkKICAgICAgICBmb2xkZXIuc2F2ZSgpCgogICAgICAgIF9pZCA9IGZpbGUuX2lkCgogICAgICAgIGFzc2VydF9lcXVhbChmaWxlLCBtb2RlbC5Pc2ZTdG9yYWdlRmlsZU5vZGUuZ2V0X2ZpbGUoX2lkLCBzZWxmLm5vZGVfc2V0dGluZ3MpKQoKICAgIGRlZiB0ZXN0X2dldF9jaGlsZF9ieV9uYW1lKHNlbGYpOgogICAgICAgIGNoaWxkID0gc2VsZi5ub2RlX3NldHRpbmdzLnJvb3Rfbm9kZS5hcHBlbmRfZmlsZSgnVGVzdCcpCiAgICAgICAgYXNzZXJ0X2VxdWFsKGNoaWxkLCBzZWxmLm5vZGVfc2V0dGluZ3Mucm9vdF9ub2RlLmZpbmRfY2hpbGRfYnlfbmFtZSgnVGVzdCcpKQoKICAgIGRlZiB0ZXN0X3Jvb3Rfbm9kZV9wYXRoKHNlbGYpOgogICAgICAgIGFzc2VydF9lcXVhbChzZWxmLm5vZGVfc2V0dGluZ3Mucm9vdF9ub2RlLm5hbWUsICcnKQoKICAgIGRlZiB0ZXN0X2ZvbGRlcl9wYXRoKHNlbGYpOgogICAgICAgIHBhdGggPSAnL3t9LycuZm9ybWF0KHNlbGYubm9kZV9zZXR0aW5ncy5yb290X25vZGUuX2lkKQoKICAgICAgICBhc3NlcnRfZXF1YWwoc2VsZi5ub2RlX3NldHRpbmdzLnJvb3Rfbm9kZS5wYXRoLCBwYXRoKQoKICAgIGRlZiB0ZXN0X2ZpbGVfcGF0aChzZWxmKToKICAgICAgICBmaWxlID0gbW9kZWwuT3NmU3RvcmFnZUZpbGVOb2RlKG5hbWU9J01PQVIgUFlMT05TJywga2luZD0nZmlsZScsIG5vZGVfc2V0dGluZ3M9c2VsZi5ub2RlX3NldHRpbmdzKQoKICAgICAgICBhc3NlcnRfZXF1YWwoZmlsZS5uYW1lLCAnTU9BUiBQWUxPTlMnKQogICAgICAgIGFzc2VydF9lcXVhbChmaWxlLnBhdGgsICcve30nLmZvcm1hdChmaWxlLl9pZCkpCgogICAgZGVmIHRlc3RfYXBwZW5kX2ZvbGRlcihzZWxmKToKICAgICAgICBjaGlsZCA9IHNlbGYubm9kZV9zZXR0aW5ncy5yb290X25vZGUuYXBwZW5kX2ZvbGRlcignVGVzdCcpCiAgICAgICAgY2hpbGRyZW4gPSBzZWxmLm5vZGVfc2V0dGluZ3Mucm9vdF9ub2RlLmNoaWxkcmVuCgogICAgICAgIGFzc2VydF9lcXVhbChjaGlsZC5raW5kLCAnZm9sZGVyJykKICAgICAgICBhc3NlcnRfZXF1YWwoW2NoaWxkXSwgbGlzdChjaGlsZHJlbikpCgogICAgZGVmIHRlc3RfYXBwZW5kX2ZpbGUoc2VsZik6CiAgICAgICAgY2hpbGQgPSBzZWxmLm5vZGVfc2V0dGluZ3Mucm9vdF9ub2RlLmFwcGVuZF9maWxlKCdUZXN0JykKICAgICAgICBjaGlsZHJlbiA9IHNlbGYubm9kZV9zZXR0aW5ncy5yb290X25vZGUuY2hpbGRyZW4KCiAgICAgICAgYXNzZXJ0X2VxdWFsKGNoaWxkLmtpbmQsICdmaWxlJykKICAgICAgICBhc3NlcnRfZXF1YWwoW2NoaWxkXSwgbGlzdChjaGlsZHJlbikpCgogICAgZGVmIHRlc3RfYXBwZW5kX3RvX2ZpbGUoc2VsZik6CiAgICAgICAgY2hpbGQgPSBzZWxmLm5vZGVfc2V0dGluZ3Mucm9vdF9ub2RlLmFwcGVuZF9maWxlKCdUZXN0JykKICAgICAgICB3aXRoIGFzc2VydF9yYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgIGNoaWxkLmFwcGVuZF9maWxlKCdDYW50JykKCiAgICBkZWYgdGVzdF9jaGlsZHJlbihzZWxmKToKICAgICAgICBhc3NlcnRfZXF1YWxzKFsKICAgICAgICAgICAgc2VsZi5ub2RlX3NldHRpbmdzLnJvb3Rfbm9kZS5hcHBlbmRfZmlsZSgnRm9ve31CYXInLmZvcm1hdCh4KSkKICAgICAgICAgICAgZm9yIHggaW4geHJhbmdlKDEwMCkKICAgICAgICBdLCBsaXN0KHNlbGYubm9kZV9zZXR0aW5ncy5yb290X25vZGUuY2hpbGRyZW4pKQoKICAgIGRlZiB0ZXN0X2Rvd25sb2FkX2NvdW50X2ZpbGVfZGVmYXVsdHMoc2VsZik6CiAgICAgICAgY2hpbGQgPSBzZWxmLm5vZGVfc2V0dGluZ3Mucm9vdF9ub2RlLmFwcGVuZF9maWxlKCdUZXN0JykKICAgICAgICBhc3NlcnRfZXF1YWxzKGNoaWxkLmdldF9kb3dubG9hZF9jb3VudCgpLCAwKQoKICAgIEBtb2NrLnBhdGNoKCdmcmFtZXdvcmsuYW5hbHl0aWNzLnNlc3Npb24nKQogICAgZGVmIHRlc3RfZG93bmxvYWRfY291bnRfZmlsZShzZWxmLCBtb2NrX3Nlc3Npb24pOgogICAgICAgIG1vY2tfc2Vzc2lvbi5kYXRhID0ge30KICAgICAgICBjaGlsZCA9IHNlbGYubm9kZV9zZXR0aW5ncy5yb290X25vZGUuYXBwZW5kX2ZpbGUoJ1Rlc3QnKQoKICAgICAgICB1dGlscy51cGRhdGVfYW5hbHl0aWNzKHNlbGYucHJvamVjdCwgY2hpbGQuX2lkLCAwKQogICAgICAgIHV0aWxzLnVwZGF0ZV9hbmFseXRpY3Moc2VsZi5wcm9qZWN0LCBjaGlsZC5faWQsIDEpCiAgICAgICAgdXRpbHMudXBkYXRlX2FuYWx5dGljcyhzZWxmLnByb2plY3QsIGNoaWxkLl9pZCwgMikKCiAgICAgICAgYXNzZXJ0X2VxdWFscyhjaGlsZC5nZXRfZG93bmxvYWRfY291bnQoKSwgMykKICAgICAgICBhc3NlcnRfZXF1YWxzKGNoaWxkLmdldF9kb3dubG9hZF9jb3VudCgwKSwgMSkKICAgICAgICBhc3NlcnRfZXF1YWxzKGNoaWxkLmdldF9kb3dubG9hZF9jb3VudCgxKSwgMSkKICAgICAgICBhc3NlcnRfZXF1YWxzKGNoaWxkLmdldF9kb3dubG9hZF9jb3VudCgyKSwgMSkKCiAgICBkZWYgdGVzdF9kb3dubG9hZF9jb3VudF9mb2xkZXIoc2VsZik6CiAgICAgICAgYXNzZXJ0X2lzKAogICAgICAgICAgICBOb25lLAogICAgICAgICAgICBzZWxmLm5vZGVfc2V0dGluZ3Mucm9vdF9ub2RlLmdldF9kb3dubG9hZF9jb3VudCgpCiAgICAgICAgKQoKICAgIEB1bml0dGVzdC5za2lwCiAgICBkZWYgdGVzdF9jcmVhdGVfdmVyc2lvbihzZWxmKToKICAgICAgICBwYXNzCgogICAgQHVuaXR0ZXN0LnNraXAKICAgIGRlZiB0ZXN0X3VwZGF0ZV92ZXJzaW9uX21ldGFkYXRhKHNlbGYpOgogICAgICAgIHBhc3MKCiAgICBkZWYgdGVzdF9kZWxldGVfZm9sZGVyKHNlbGYpOgogICAgICAgIHBhcmVudCA9IHNlbGYubm9kZV9zZXR0aW5ncy5yb290X25vZGUuYXBwZW5kX2ZvbGRlcignVGVzdCcpCiAgICAgICAga2lkcyA9IFtdCiAgICAgICAgZm9yIHggaW4gcmFuZ2UoMTApOgogICAgICAgICAgICBraWQgPSBwYXJlbnQuYXBwZW5kX2ZpbGUoc3RyKHgpKQogICAgICAgICAgICBraWQuc2F2ZSgpCiAgICAgICAgICAgIGtpZHMuYXBwZW5kKGtpZCkKICAgICAgICBjb3VudCA9IG1vZGVsLk9zZlN0b3JhZ2VGaWxlTm9kZS5maW5kKCkuY291bnQoKQogICAgICAgIHRjb3VudCA9IG1vZGVsLk9zZlN0b3JhZ2VUcmFzaGVkRmlsZU5vZGUuZmluZCgpLmNvdW50KCkKCiAgICAgICAgcGFyZW50LmRlbGV0ZSgpCgogICAgICAgIGFzc2VydF9pcyhtb2RlbC5Pc2ZTdG9yYWdlRmlsZU5vZGUubG9hZChwYXJlbnQuX2lkKSwgTm9uZSkKICAgICAgICBhc3NlcnRfZXF1YWxzKGNvdW50IC0gMTEsIG1vZGVsLk9zZlN0b3JhZ2VGaWxlTm9kZS5maW5kKCkuY291bnQoKSkKICAgICAgICBhc3NlcnRfZXF1YWxzKHRjb3VudCArIDExLCBtb2RlbC5Pc2ZTdG9yYWdlVHJhc2hlZEZpbGVOb2RlLmZpbmQoKS5jb3VudCgpKQoKICAgICAgICBmb3Iga2lkIGluIGtpZHM6CiAgICAgICAgICAgIGFzc2VydF9pcygKICAgICAgICAgICAgICAgIG1vZGVsLk9zZlN0b3JhZ2VGaWxlTm9kZS5sb2FkKGtpZC5faWQpLAogICAgICAgICAgICAgICAgTm9uZQogICAgICAgICAgICApCgogICAgZGVmIHRlc3RfZGVsZXRlX2ZpbGUoc2VsZik6CiAgICAgICAgY2hpbGQgPSBzZWxmLm5vZGVfc2V0dGluZ3Mucm9vdF9ub2RlLmFwcGVuZF9maWxlKCdUZXN0JykKICAgICAgICBjaGlsZC5kZWxldGUoKQoKICAgICAgICAjIGFzc2VydF90cnVlKGNoaWxkLmlzX2RlbGV0ZWQpCiAgICAgICAgYXNzZXJ0X2lzKG1vZGVsLk9zZlN0b3JhZ2VGaWxlTm9kZS5sb2FkKGNoaWxkLl9pZCksIE5vbmUpCiAgICAgICAgdHJhc2hlZCA9IG1vZGVsLk9zZlN0b3JhZ2VUcmFzaGVkRmlsZU5vZGUubG9hZChjaGlsZC5faWQpCiAgICAgICAgY2hpbGRfc3RvcmFnZSA9IGNoaWxkLnRvX3N0b3JhZ2UoKQogICAgICAgIGRlbCBjaGlsZF9zdG9yYWdlWydpc19kZWxldGVkJ10KICAgICAgICBhc3NlcnRfZXF1YWwodHJhc2hlZC50b19zdG9yYWdlKCksIGNoaWxkX3N0b3JhZ2UpCgogICAgZGVmIHRlc3RfbWF0ZXJpYWxpemVkX3BhdGgoc2VsZik6CiAgICAgICAgY2hpbGQgPSBzZWxmLm5vZGVfc2V0dGluZ3Mucm9vdF9ub2RlLmFwcGVuZF9maWxlKCdUZXN0JykKICAgICAgICBhc3NlcnRfZXF1YWxzKCcvVGVzdCcsIGNoaWxkLm1hdGVyaWFsaXplZF9wYXRoKCkpCgogICAgZGVmIHRlc3RfbWF0ZXJpYWxpemVkX3BhdGhfZm9sZGVyKHNlbGYpOgogICAgICAgIGNoaWxkID0gc2VsZi5ub2RlX3NldHRpbmdzLnJvb3Rfbm9kZS5hcHBlbmRfZm9sZGVyKCdUZXN0JykKICAgICAgICBhc3NlcnRfZXF1YWxzKCcvVGVzdC8nLCBjaGlsZC5tYXRlcmlhbGl6ZWRfcGF0aCgpKQoKICAgIGRlZiB0ZXN0X21hdGVyaWFsaXplZF9wYXRoX25lc3RlZChzZWxmKToKICAgICAgICBjaGlsZCA9IHNlbGYubm9kZV9zZXR0aW5ncy5yb290X25vZGUuYXBwZW5kX2ZvbGRlcignQ2xvdWQnKS5hcHBlbmRfZmlsZSgnQ2FycCcpCiAgICAgICAgYXNzZXJ0X2VxdWFscygnL0Nsb3VkL0NhcnAnLCBjaGlsZC5tYXRlcmlhbGl6ZWRfcGF0aCgpKQoKICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CiAgICAgICAgdG9fY29weSA9IHNlbGYubm9kZV9zZXR0aW5ncy5yb290X25vZGUuYXBwZW5kX2ZpbGUoJ0NhcnAnKQogICAgICAgIGNvcHlfdG8gPSBzZWxmLm5vZGVfc2V0dGluZ3Mucm9vdF9ub2RlLmFwcGVuZF9mb2xkZXIoJ0Nsb3VkJykKCiAgICAgICAgY29waWVkID0gdG9fY29weS5jb3B5X3VuZGVyKGNvcHlfdG8pCgogICAgICAgIGFzc2VydF9ub3RfZXF1YWwoY29waWVkLCB0b19jb3B5KQogICAgICAgIGFzc2VydF9lcXVhbChjb3BpZWQucGFyZW50LCBjb3B5X3RvKQogICAgICAgIGFzc2VydF9lcXVhbCh0b19jb3B5LnBhcmVudCwgc2VsZi5ub2RlX3NldHRpbmdzLnJvb3Rfbm9kZSkKCiAgICBkZWYgdGVzdF9tb3ZlX25lc3RlZChzZWxmKToKICAgICAgICBuZXdfcHJvamVjdCA9IFByb2plY3RGYWN0b3J5KCkKICAgICAgICBvdGhlcl9ub2RlX3NldHRpbmdzID0gbmV3X3Byb2plY3QuZ2V0X2FkZG9uKCdvc2ZzdG9yYWdlJykKICAgICAgICBtb3ZlX3RvID0gb3RoZXJfbm9kZV9zZXR0aW5ncy5yb290X25vZGUuYXBwZW5kX2ZvbGRlcignQ2xvdWQnKQoKICAgICAgICB0b19tb3ZlID0gc2VsZi5ub2RlX3NldHRpbmdzLnJvb3Rfbm9kZS5hcHBlbmRfZm9sZGVyKCdDYXJwJykKICAgICAgICBjaGlsZCA9IHRvX21vdmUuYXBwZW5kX2ZpbGUoJ0EgZGVlIHVtJykKCiAgICAgICAgbW92ZWQgPSB0b19tb3ZlLm1vdmVfdW5kZXIobW92ZV90bykKICAgICAgICBjaGlsZC5yZWxvYWQoKQoKICAgICAgICBhc3NlcnRfZXF1YWwobW92ZWQsIHRvX21vdmUpCiAgICAgICAgYXNzZXJ0X2VxdWFsKG90aGVyX25vZGVfc2V0dGluZ3MsIHRvX21vdmUubm9kZV9zZXR0aW5ncykKICAgICAgICBhc3NlcnRfZXF1YWwob3RoZXJfbm9kZV9zZXR0aW5ncywgbW92ZV90by5ub2RlX3NldHRpbmdzKQogICAgICAgIGFzc2VydF9lcXVhbChvdGhlcl9ub2RlX3NldHRpbmdzLCBjaGlsZC5ub2RlX3NldHRpbmdzKQoKICAgIGRlZiB0ZXN0X2NvcHlfcmVuYW1lKHNlbGYpOgogICAgICAgIHRvX2NvcHkgPSBzZWxmLm5vZGVfc2V0dGluZ3Mucm9vdF9ub2RlLmFwcGVuZF9maWxlKCdDYXJwJykKICAgICAgICBjb3B5X3RvID0gc2VsZi5ub2RlX3NldHRpbmdzLnJvb3Rfbm9kZS5hcHBlbmRfZm9sZGVyKCdDbG91ZCcpCgogICAgICAgIGNvcGllZCA9IHRvX2NvcHkuY29weV91bmRlcihjb3B5X3RvLCBuYW1lPSdCdXQnKQoKICAgICAgICBhc3NlcnRfZXF1YWwoY29waWVkLm5hbWUsICdCdXQnKQogICAgICAgIGFzc2VydF9ub3RfZXF1YWwoY29waWVkLCB0b19jb3B5KQogICAgICAgIGFzc2VydF9lcXVhbCh0b19jb3B5Lm5hbWUsICdDYXJwJykKICAgICAgICBhc3NlcnRfZXF1YWwoY29waWVkLnBhcmVudCwgY29weV90bykKICAgICAgICBhc3NlcnRfZXF1YWwodG9fY29weS5wYXJlbnQsIHNlbGYubm9kZV9zZXR0aW5ncy5yb290X25vZGUpCgogICAgZGVmIHRlc3RfbW92ZShzZWxmKToKICAgICAgICB0b19tb3ZlID0gc2VsZi5ub2RlX3NldHRpbmdzLnJvb3Rfbm9kZS5hcHBlbmRfZmlsZSgnQ2FycCcpCiAgICAgICAgbW92ZV90byA9IHNlbGYubm9kZV9zZXR0aW5ncy5yb290X25vZGUuYXBwZW5kX2ZvbGRlcignQ2xvdWQnKQoKICAgICAgICBtb3ZlZCA9IHRvX21vdmUubW92ZV91bmRlcihtb3ZlX3RvKQoKICAgICAgICBhc3NlcnRfZXF1YWwodG9fbW92ZSwgbW92ZWQpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBhc3NlcnRfZXF1YWwobW92ZWQucGFyZW50LCBtb3ZlX3RvKQoKPHxmaW1fZW5kfD4="]
["41317251d6fff05976ed6f48b4d7edb87cc81ca8-3","41317251d6fff05976ed6f48b4d7edb87cc81ca8",{"$cut":{"chars":21220,"head":"PHxmaW1fcHJlZml4fD4KIyBlbmNvZGluZzogdXRmLTgKCmltcG9ydCBtb2NrCmltcG9ydCB1bml0dGVzdApmcm9tIG5vc2UudG9vbHMgaW1wb3J0ICogICMgbm9xYQoKZnJvbSB0ZXN0cy5iYXNlIGltcG9ydCBPc2ZUZXN0Q2FzZQpmcm9tIHRlc3RzLmZhY3RvcmllcyBpbXBvcnQgUHJvamVjdEZhY3RvcnkKCmZyb20gd2Vic2l0ZS5hZGRvbnMub3Nmc3RvcmFnZS50ZXN0cyBpbXBvcnQgZmFjdG9yaWVzCmZyb20gd2Vic2l0ZS5hZGRvbnMub3Nmc3RvcmFnZS50ZXN0cy51dGlscyBpbXBvcnQgU3RvcmFnZVRlc3RDYXNlCgppbXBvcnQgZGF0ZXRpbWUKCmZyb20gbW9kdWxhcm9kbSBpbXBvcnQgZXhjZXB0aW9ucyBhcyBtb2RtX2Vycm9ycwoKCmZyb20gd2Vic2l0ZS5hZGRvbnMub3Nmc3RvcmFnZSBpbXBvcnQgdXRpbHMKZnJvbSB3ZWJzaXRlLmFkZG9ucy5vc2ZzdG9yYWdlIGltcG9ydCBtb2RlbApmcm9tIHdlYnNpdGUuYWRkb25zLm9zZnN0b3JhZ2UgaW1wb3J0IHNldHRpbmdzCgoKY2xhc3MgVGVzdEZpbGVHdWlkKE9zZlRlc3RDYXNlKToKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBzdXBlcihPc2ZUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQogICAgICAgIHNlbGYudXNlciA9IGZhY3Rvcmllcy5BdXRoVXNlckZhY3RvcnkoKQogICAgICAgIHNlbGYucHJvamVjdCA9IFByb2plY3RGYWN0b3J5KGNyZWF0b3I9c2VsZi51c2VyKQogICAgICAgIHNlbGYubm9kZV9hZGRvbiA9IHNlbGYucHJvamVjdC5nZXRfYWRkb24oJ29zZnN0b3JhZ2UnKQoKICAgIGRlZiB0ZXN0X3Byb3ZpZGVyKHNlbGYpOgogICAgICAgIGFzc2VydF9lcXVhbCgnb3Nmc3RvcmFnZScsIG1vZGVsLk9zZlN0b3JhZ2VHdWlkRmlsZSgpLnByb3ZpZGVyKQoKICAgIGRlZiB0ZXN0X2NvcnJlY3RfcGF0aChzZWxmKToKICAgICAgICBndWlkID0gbW9kZWwuT3NmU3RvcmFnZUd1aWRGaWxlKG5vZGU9c2VsZi5wcm9qZWN0LCBwYXRoPScvYmF6L2Zvby9iYXInKQoKICAgICAgICBhc3NlcnRfZXF1YWxzKGd1aWQucGF0aCwgJy9iYXovZm9vL2JhcicpCiAgICAgICAgYXNzZXJ0X2VxdWFsKGd1aWQucGF0aCwgZ3VpZC53YXRlcmJ1dGxlcl9wYXRoKQogICAgICAgIGFzc2VydF9lcXVhbHMoZ3VpZC53YXRlcmJ1dGxlcl9wYXRoLCAnL2Jhei9mb28vYmFyJykKCiAgICBAbW9jay5wYXRjaCgnd2Vic2l0ZS5hZGRvbnMuYmFzZS5yZXF1ZXN0cy5nZXQnKQogICAgZGVmIHRlc3RfdW5pcXVlX2lkZW50aWZpZXIoc2VsZiwgbW9ja19nZXQpOgogICAgICAgIG1vY2tfcmVzcG9uc2UgPSBtb2NrLk1vY2sob2s9VHJ1ZSwgc3RhdHVzX2NvZGU9MjAwKQogICAgICAgIG1vY2tfZ2V0LnJldHVybl92YWx1ZSA9IG1vY2tfcmVzcG9uc2UKICAgICAgICBtb2NrX3Jlc3BvbnNlLmpzb24ucmV0dXJuX3ZhbHVlID0gewogICAgICAgICAgICAnZGF0YSc6IHsKICAgICAgICAgICAgICAgICduYW1lJzogJ01vcnR5JywKICAgICAgICAgICAgICAgICdleHRyYSc6IHsKICAgICAgICAgICAgICAgICAgICAndmVyc2lvbic6ICdUZXJyYW4gaXQgdXAnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGd1aWQgPSBtb2RlbC5Pc2ZTdG9yYWdlR3VpZEZpbGUobm9kZT1zZWxmLnByb2plY3QsIHBhdGg9Jy9mb28vYmFyJykKCiAgICAgICAgZ3VpZC5lbnJpY2goKQogICAgICAgIGFzc2VydF9lcXVhbHMoJ1RlcnJhbiBpdCB1cCcsIGd1aWQudW5pcXVlX2lkZW50aWZpZXIpCgogICAgZGVmIHRlc3Rfbm9kZV9hZGRvbl9nZXRfb3JfY3JlYXRlKHNlbGYpOgogICAgICAgIGd1aWQsIGNyZWF0ZWQgPSBzZWxmLm5vZGVfYWRkb24uZmluZF9vcl9jcmVhdGVfZmlsZV9ndWlkKCcvYmF6L2Zvby9iYXInKQoKICAgICAgICBhc3NlcnRfdHJ1ZShjcmVhdGVkKQogICAgICAgIGFzc2VydF9lcXVhbChndWlkLnBhdGgsICcvYmF6L2Zvby9iYXInKQogICAgICAgIGFzc2VydF9lcXVhbChndWlkLnBhdGgsIGd1aWQud2F0ZXJidXRsZXJfcGF0aCkKICAgICAgICBhc3NlcnRfZXF1YWwoZ3VpZC53YXRlcmJ1dGxlcl9wYXRoLCAnL2Jhei9mb28vYmFyJykKCiAgICBkZWYgdGVzdF9ub2RlX2FkZG9uX2dldF9vcl9jcmVhdGVfZmluZHMoc2VsZik6CiAgICAgICAgZ3VpZDEsIGNyZWF0ZWQxID0gc2VsZi5ub2RlX2FkZG9uLmZpbmRfb3JfY3JlYXRlX2ZpbGVfZ3VpZCgnL2Zvby9iYXInKQogICAgICAgIGd1aWQyLCBjcmVhdGVkMiA9IHNlbGYubm9kZV9hZGRvbi5maW5kX29yX2NyZWF0ZV9maWxlX2d1aWQoJy9mb28vYmFyJykKCiAgICAgICAgYXNzZXJ0X3RydWUoY3JlYXRlZDEpCiAgICAgICAgYXNzZXJ0X2ZhbHNlKGNyZWF0ZWQyKQogICAgICAgIGFzc2VydF9lcXVhbHMoZ3VpZDEsIGd1aWQyKQoKCmNsYXNzIFRlc3RPc2ZzdG9yYWdlRmlsZU5vZGUoU3RvcmFnZVRlc3RDYXNlKToKCiAgICBkZWYgdGVzdF9yb290X25vZGVfZXhpc3RzKHNlbGYpOgogICAgICAgIGFzc2VydF90cnVlKHNlbGYubm9kZV9zZXR0aW5ncy5yb290X25vZGUgaXMgbm90IE5vbmUpCgogICAgZGVmIHRlc3Rfcm9vdF9ub2RlX2hhc19ub19wYXJlbnQoc2VsZik6CiAgICAgICAgYXNzZXJ0X3RydWUoc2VsZi5ub2RlX3NldHRpbmdzLnJvb3Rfbm9kZS5wYXJlbnQgaXMgTm9uZSkKCiAgICBkZWYgdGVzdF9ub2RlX3JlZmVyZW5jZShzZWxmKToKICAgICAgICBhc3NlcnRfZXF1YWwoc2VsZi5wcm9qZWN0LCBzZWxmLm5vZGVfc2V0dGluZ3Mucm9vdF9ub2RlLm5vZGUpCgogICAgZGVmIHRlc3RfZ2V0X2ZvbGRlcihzZWxmKToKICAgICAgICBmaWxlID0gbW9kZWwuT3NmU3RvcmFnZUZpbGVOb2RlKG5hbWU9J01PQVIgUFlMT05TJywga2luZD0nZmlsZScsIG5vZGVfc2V0dGluZ3M9c2VsZi5ub2RlX3NldHRpbmdzKQogICAgICAgIGZvbGRlciA9IG1vZGVsLk9zZlN0b3JhZ2VGaWxlTm9kZShuYW1lPSdNT0FSIFBZTE9OUycsIGtpbmQ9J2ZvbGRlcicsIG5vZGVfc2V0dGluZ3M9c2VsZi5ub2RlX3NldHRpbmdzKQoKICAgICAgICBfaWQgPSBmb2xkZXIuX2lkCgogICAgICAgIGZpbGUuc2F2ZSgpCiAgICAgICAgZm9sZGVyLnNhdmUoKQoKICAgICAgICBhc3NlcnRfZXF1YWwoZm9sZGVyLCBt"}}]
["41317251d6fff05976ed6f48b4d7edb87cc81ca8-4","41317251d6fff05976ed6f48b4d7edb87cc81ca8",{"$cut":{"chars":21220,"head":"PHxmaW1fcHJlZml4fD4KIyBlbmNvZGluZzogdXRmLTgKCmltcG9ydCBtb2NrCmltcG9ydCB1bml0dGVzdApmcm9tIG5vc2UudG9vbHMgaW1wb3J0ICogICMgbm9xYQoKZnJvbSB0ZXN0cy5iYXNlIGltcG9ydCBPc2ZUZXN0Q2FzZQpmcm9tIHRlc3RzLmZhY3RvcmllcyBpbXBvcnQgUHJvamVjdEZhY3RvcnkKCmZyb20gd2Vic2l0ZS5hZGRvbnMub3Nmc3RvcmFnZS50ZXN0cyBpbXBvcnQgZmFjdG9yaWVzCmZyb20gd2Vic2l0ZS5hZGRvbnMub3Nmc3RvcmFnZS50ZXN0cy51dGlscyBpbXBvcnQgU3RvcmFnZVRlc3RDYXNlCgppbXBvcnQgZGF0ZXRpbWUKCmZyb20gbW9kdWxhcm9kbSBpbXBvcnQgZXhjZXB0aW9ucyBhcyBtb2RtX2Vycm9ycwoKCmZyb20gd2Vic2l0ZS5hZGRvbnMub3Nmc3RvcmFnZSBpbXBvcnQgdXRpbHMKZnJvbSB3ZWJzaXRlLmFkZG9ucy5vc2ZzdG9yYWdlIGltcG9ydCBtb2RlbApmcm9tIHdlYnNpdGUuYWRkb25zLm9zZnN0b3JhZ2UgaW1wb3J0IHNldHRpbmdzCgoKY2xhc3MgVGVzdEZpbGVHdWlkKE9zZlRlc3RDYXNlKToKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBzdXBlcihPc2ZUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQogICAgICAgIHNlbGYudXNlciA9IGZhY3Rvcmllcy5BdXRoVXNlckZhY3RvcnkoKQogICAgICAgIHNlbGYucHJvamVjdCA9IFByb2plY3RGYWN0b3J5KGNyZWF0b3I9c2VsZi51c2VyKQogICAgICAgIHNlbGYubm9kZV9hZGRvbiA9IHNlbGYucHJvamVjdC5nZXRfYWRkb24oJ29zZnN0b3JhZ2UnKQoKICAgIGRlZiB0ZXN0X3Byb3ZpZGVyKHNlbGYpOgogICAgICAgIGFzc2VydF9lcXVhbCgnb3Nmc3RvcmFnZScsIG1vZGVsLk9zZlN0b3JhZ2VHdWlkRmlsZSgpLnByb3ZpZGVyKQoKICAgIGRlZiB0ZXN0X2NvcnJlY3RfcGF0aChzZWxmKToKICAgICAgICBndWlkID0gbW9kZWwuT3NmU3RvcmFnZUd1aWRGaWxlKG5vZGU9c2VsZi5wcm9qZWN0LCBwYXRoPScvYmF6L2Zvby9iYXInKQoKICAgICAgICBhc3NlcnRfZXF1YWxzKGd1aWQucGF0aCwgJy9iYXovZm9vL2JhcicpCiAgICAgICAgYXNzZXJ0X2VxdWFsKGd1aWQucGF0aCwgZ3VpZC53YXRlcmJ1dGxlcl9wYXRoKQogICAgICAgIGFzc2VydF9lcXVhbHMoZ3VpZC53YXRlcmJ1dGxlcl9wYXRoLCAnL2Jhei9mb28vYmFyJykKCiAgICBAbW9jay5wYXRjaCgnd2Vic2l0ZS5hZGRvbnMuYmFzZS5yZXF1ZXN0cy5nZXQnKQogICAgZGVmIHRlc3RfdW5pcXVlX2lkZW50aWZpZXIoc2VsZiwgbW9ja19nZXQpOgogICAgICAgIG1vY2tfcmVzcG9uc2UgPSBtb2NrLk1vY2sob2s9VHJ1ZSwgc3RhdHVzX2NvZGU9MjAwKQogICAgICAgIG1vY2tfZ2V0LnJldHVybl92YWx1ZSA9IG1vY2tfcmVzcG9uc2UKICAgICAgICBtb2NrX3Jlc3BvbnNlLmpzb24ucmV0dXJuX3ZhbHVlID0gewogICAgICAgICAgICAnZGF0YSc6IHsKICAgICAgICAgICAgICAgICduYW1lJzogJ01vcnR5JywKICAgICAgICAgICAgICAgICdleHRyYSc6IHsKICAgICAgICAgICAgICAgICAgICAndmVyc2lvbic6ICdUZXJyYW4gaXQgdXAnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGd1aWQgPSBtb2RlbC5Pc2ZTdG9yYWdlR3VpZEZpbGUobm9kZT1zZWxmLnByb2plY3QsIHBhdGg9Jy9mb28vYmFyJykKCiAgICAgICAgZ3VpZC5lbnJpY2goKQogICAgICAgIGFzc2VydF9lcXVhbHMoJ1RlcnJhbiBpdCB1cCcsIGd1aWQudW5pcXVlX2lkZW50aWZpZXIpCgogICAgZGVmIHRlc3Rfbm9kZV9hZGRvbl9nZXRfb3JfY3JlYXRlKHNlbGYpOgogICAgICAgIGd1aWQsIGNyZWF0ZWQgPSBzZWxmLm5vZGVfYWRkb24uZmluZF9vcl9jcmVhdGVfZmlsZV9ndWlkKCcvYmF6L2Zvby9iYXInKQoKICAgICAgICBhc3NlcnRfdHJ1ZShjcmVhdGVkKQogICAgICAgIGFzc2VydF9lcXVhbChndWlkLnBhdGgsICcvYmF6L2Zvby9iYXInKQogICAgICAgIGFzc2VydF9lcXVhbChndWlkLnBhdGgsIGd1aWQud2F0ZXJidXRsZXJfcGF0aCkKICAgICAgICBhc3NlcnRfZXF1YWwoZ3VpZC53YXRlcmJ1dGxlcl9wYXRoLCAnL2Jhei9mb28vYmFyJykKCiAgICBkZWYgdGVzdF9ub2RlX2FkZG9uX2dldF9vcl9jcmVhdGVfZmluZHMoc2VsZik6CiAgICAgICAgZ3VpZDEsIGNyZWF0ZWQxID0gc2VsZi5ub2RlX2FkZG9uLmZpbmRfb3JfY3JlYXRlX2ZpbGVfZ3VpZCgnL2Zvby9iYXInKQogICAgICAgIGd1aWQyLCBjcmVhdGVkMiA9IHNlbGYubm9kZV9hZGRvbi5maW5kX29yX2NyZWF0ZV9maWxlX2d1aWQoJy9mb28vYmFyJykKCiAgICAgICAgYXNzZXJ0X3RydWUoY3JlYXRlZDEpCiAgICAgICAgYXNzZXJ0X2ZhbHNlKGNyZWF0ZWQyKQogICAgICAgIGFzc2VydF9lcXVhbHMoZ3VpZDEsIGd1aWQyKQoKCmNsYXNzIFRlc3RPc2ZzdG9yYWdlRmlsZU5vZGUoU3RvcmFnZVRlc3RDYXNlKToKCiAgICBkZWYgdGVzdF9yb290X25vZGVfZXhpc3RzKHNlbGYpOgogICAgICAgIGFzc2VydF90cnVlKHNlbGYubm9kZV9zZXR0aW5ncy5yb290X25vZGUgaXMgbm90IE5vbmUpCgogICAgZGVmIHRlc3Rfcm9vdF9ub2RlX2hhc19ub19wYXJlbnQoc2VsZik6CiAgICAgICAgYXNzZXJ0X3RydWUoc2VsZi5ub2RlX3NldHRpbmdzLnJvb3Rfbm9kZS5wYXJlbnQgaXMgTm9uZSkKCiAgICBkZWYgdGVzdF9ub2RlX3JlZmVyZW5jZShzZWxmKToKICAgICAgICBhc3NlcnRfZXF1YWwoc2VsZi5wcm9qZWN0LCBzZWxmLm5vZGVfc2V0dGluZ3Mucm9vdF9ub2RlLm5vZGUpCgogICAgZGVmIHRlc3RfZ2V0X2ZvbGRlcihzZWxmKToKICAgICAgICBmaWxlID0gbW9kZWwuT3NmU3RvcmFnZUZpbGVOb2RlKG5hbWU9J01PQVIgUFlMT05TJywga2luZD0nZmlsZScsIG5vZGVfc2V0dGluZ3M9c2VsZi5ub2RlX3NldHRpbmdzKQogICAgICAgIGZvbGRlciA9IG1vZGVsLk9zZlN0b3JhZ2VGaWxlTm9kZShuYW1lPSdNT0FSIFBZTE9OUycsIGtpbmQ9J2ZvbGRlcicsIG5vZGVfc2V0dGluZ3M9c2VsZi5ub2RlX3NldHRpbmdzKQoKICAgICAgICBfaWQgPSBmb2xkZXIuX2lkCgogICAgICAgIGZpbGUuc2F2ZSgpCiAgICAgICAgZm9sZGVyLnNhdmUoKQoKICAgICAgICBhc3NlcnRfZXF1YWwoZm9sZGVyLCBt"}}]
["822cbeeff06e9170e25cd7f212773d51ce8d5a06-1","822cbeeff06e9170e25cd7f212773d51ce8d5a06","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKZnJvbSB0eXBpbmcgaW1wb3J0IEFueSwgT3B0aW9uYWwsIExpc3QKCmZyb20gcHlkYW50aWMuZGF0YWNsYXNzZXMgaW1wb3J0IGRhdGFjbGFzcwoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQoKCkBkYXRhY2xhc3MKY2xhc3MgQXR0cmlidXRlczoKICAgIGNsaWVudDogQW55CgogICAgZGVmIGFsbCgKICAgICAgICAgICAgc2VsZiwKICAgICAgICAgICAgY29sdW1uczogbGlzdCA9IE5vbmUsCiAgICAgICAgICAgIGZpbHRlcnM6IE9wdGlvbmFsW2RpY3RdID0gTm9uZSwKICAgICAgICAgICAgc29ydDogT3B0aW9uYWxbZGljdF0gPSBOb25lLAogICAgKToKICAgICAgICAiIiIKICAgICAgICBHZXRzIGFsbCBkYXRhIGZyb20gY29ycmVzcG9uZGluZyBlbmRwb2ludAogICAgICAgIDpwYXJhbSBjb2x1bW5zOiBsaXN0OiBPcHRpb25hbCBjb2x1bW5zIHRvIHJldHVybiwgZGVmYXVsdCBpcyBhbGwKICAgICAgICA6cGFyYW0gZmlsdGVyczogZGljdDogT3B0aW9uYWwgZmlsdGVycwogICAgICAgIDpwYXJhbSBzbmFwc2hvdF9pZDogc3RyOiBPcHRpb25hbCBzbmFwc2hvdCBJRCB0byBvdmVycmlkZSBjbGFzcwogICAgICAgIDpwYXJhbSByZXBvcnRzOiBzdHI6IFN0cmluZyBvZiBmcm9udGVuZCBVUkwgd2hlcmUgdGhlIHJlcG9ydHMgYXJlIGRpc3BsYXllZAogICAgICAgIDpwYXJhbSBzb3J0OiBkaWN0OiBEaWN0aW9uYXJ5IHRvIGFwcGx5IHNvcnRpbmc6IHsib3JkZXIiOiAiZGVzYyIsICJjb2x1bW4iOiAibGFzdENoYW5nZSJ9CiAgICAgICAgOnJldHVybjogbGlzdDogTGlzdCBvZiBEaWN0aW9uYXJpZXMKICAgICAgICAiIiIKICAgICAgICByZXR1cm4gc2VsZi5jbGllbnQuZmV0Y2hfYWxsKAogICAgICAgICAgICAndGFibGVzL2dsb2JhbC1hdHRyaWJ1dGVzJywKICAgICAgICAgICAgY29sdW1ucz1jb2x1bW5zLAogICAgICAgICAgICBmaWx0ZXJzPWZpbHRlcnMsCiAgICAgICAgICAgIHNvcnQ9c29ydCwKICAgICAgICAgICAgc25hcHNob3Q9RmFsc2UKICAgICAgICApCgogICAgZGVmIHNldF9zaXRlX2J5X3NuKHNlbGYsIHNlcmlhbF9udW1iZXIsIHNpdGVfbmFtZSk6CiAgICAgICAgIiIiCiAgICAgICAgU2V0IGEgc2luZ2xlIHNpdGUgYnkgc2VyaWFsIG51bWJlcgogICAgICAgIDpwYXJhbSBzZXJpYWxfbnVtYmVyOiBzdHI6IElQIEZhYnJpYyBVbmlxdWUgU2VyaWFsIE51bWJlcgogICAgICAgIDpwYXJhbSBzaXRlX25hbWU6IHN0cjogU2l0ZSBuYW1lIGZvciBkZXZpY2UuCiAgICAgICAgOnJldHVybjoKICAgICAgICAiIiIKICAgICAgICByZXNwID0gc2VsZi5jbGllbnQucG9zdCgnYXR0cmlidXRlcy9nbG9iYWwnLCBqc29uPWRpY3QobmFtZT0ic2l0ZU5hbWUiLCBzbj1zZXJpYWxfbnVtYmVyLCB2YWx1ZT1zaXRlX25hbWUpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcmVzcC5yYWlzZV9mb3Jfc3RhdHVzKCkKICAgICAgICByZXR1cm4gcmVzcC5qc29uKCkKCjx8ZmltX2VuZHw+"]
["822cbeeff06e9170e25cd7f212773d51ce8d5a06-2","822cbeeff06e9170e25cd7f212773d51ce8d5a06","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKZnJvbSB0eXBpbmcgaW1wb3J0IEFueSwgT3B0aW9uYWwsIExpc3QKCmZyb20gcHlkYW50aWMuZGF0YWNsYXNzZXMgaW1wb3J0IGRhdGFjbGFzcwoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQoKCkBkYXRhY2xhc3MKY2xhc3MgQXR0cmlidXRlczoKICAgIGNsaWVudDogQW55CgogICAgZGVmIGFsbCgKICAgICAgICAgICAgc2VsZiwKICAgICAgICAgICAgY29sdW1uczogbGlzdCA9IE5vbmUsCiAgICAgICAgICAgIGZpbHRlcnM6IE9wdGlvbmFsW2RpY3RdID0gTm9uZSwKICAgICAgICAgICAgc29ydDogT3B0aW9uYWxbZGljdF0gPSBOb25lLAogICAgKToKICAgICAgICAiIiIKICAgICAgICBHZXRzIGFsbCBkYXRhIGZyb20gY29ycmVzcG9uZGluZyBlbmRwb2ludAogICAgICAgIDpwYXJhbSBjb2x1bW5zOiBsaXN0OiBPcHRpb25hbCBjb2x1bW5zIHRvIHJldHVybiwgZGVmYXVsdCBpcyBhbGwKICAgICAgICA6cGFyYW0gZmlsdGVyczogZGljdDogT3B0aW9uYWwgZmlsdGVycwogICAgICAgIDpwYXJhbSBzbmFwc2hvdF9pZDogc3RyOiBPcHRpb25hbCBzbmFwc2hvdCBJRCB0byBvdmVycmlkZSBjbGFzcwogICAgICAgIDpwYXJhbSByZXBvcnRzOiBzdHI6IFN0cmluZyBvZiBmcm9udGVuZCBVUkwgd2hlcmUgdGhlIHJlcG9ydHMgYXJlIGRpc3BsYXllZAogICAgICAgIDpwYXJhbSBzb3J0OiBkaWN0OiBEaWN0aW9uYXJ5IHRvIGFwcGx5IHNvcnRpbmc6IHsib3JkZXIiOiAiZGVzYyIsICJjb2x1bW4iOiAibGFzdENoYW5nZSJ9Cjx8ZmltX2hvbGV8PgogICAgICAgICAgICBjb2x1bW5zPWNvbHVtbnMsCiAgICAgICAgICAgIGZpbHRlcnM9ZmlsdGVycywKICAgICAgICAgICAgc29ydD1zb3J0LAogICAgICAgICAgICBzbmFwc2hvdD1GYWxzZQogICAgICAgICkKCiAgICBkZWYgc2V0X3NpdGVfYnlfc24oc2VsZiwgc2VyaWFsX251bWJlciwgc2l0ZV9uYW1lKToKICAgICAgICAiIiIKICAgICAgICBTZXQgYSBzaW5nbGUgc2l0ZSBieSBzZXJpYWwgbnVtYmVyCiAgICAgICAgOnBhcmFtIHNlcmlhbF9udW1iZXI6IHN0cjogSVAgRmFicmljIFVuaXF1ZSBTZXJpYWwgTnVtYmVyCiAgICAgICAgOnBhcmFtIHNpdGVfbmFtZTogc3RyOiBTaXRlIG5hbWUgZm9yIGRldmljZS4KICAgICAgICA6cmV0dXJuOgogICAgICAgICIiIgogICAgICAgIHJlc3AgPSBzZWxmLmNsaWVudC5wb3N0KCdhdHRyaWJ1dGVzL2dsb2JhbCcsIGpzb249ZGljdChuYW1lPSJzaXRlTmFtZSIsIHNuPXNlcmlhbF9udW1iZXIsIHZhbHVlPXNpdGVfbmFtZSkpCiAgICAgICAgcmVzcC5yYWlzZV9mb3Jfc3RhdHVzKCkKICAgICAgICByZXR1cm4gcmVzcC5qc29uKCkKCiAgICBkZWYgc2V0X3NpdGVzX2J5X3NuKHNlbGYsIHNpdGVzOiBMaXN0W2RpY3RdKToKICAgICAgICAiIiIKICAgICAgICBTZXRzIGEgbGlzdCBvZiBzaXRlcyBmb3IgZGV2aWNlcyBiYXNlZCBvbiBzZXJpYWwgbnVtYmVycy4KICAgICAgICA6cGFyYW0gc2l0ZXM6IGxpc3Q6IFt7J3NuJzogJ0lQRiBTRVJJQUwgTlVNQkVSJywgJ3ZhbHVlJzogJ1NJVEUgTkFNRSd9XQogICAgICAgIDpyZXR1cm46CiAgICAgICAgIiIiCiAgICAgICAgW2EudXBkYXRlKGRpY3QobmFtZT0ic2l0ZU5hbWUiKSkgZm9yIGEgaW4gc2l0ZXNdCiAgICAgICAgcmVzcCA9IHNlbGYuY2xpZW50LnB1dCgnYXR0cmlidXRlcy9nbG9iYWwnLCBqc29uPWRpY3QoYXR0cmlidXRlcz1zaXRlcykpCiAgICAgICAgcmVzcC5yYWlzZV9mb3Jfc3RhdHVzKCkKICAgICAgICByZXR1cm4gcmVzcC5qc29uKCkKCiAgICBkZWYgZGVsZXRlX2F0dHJpYnV0ZV9ieV9zbihzZWxmLCAqc2VyaWFsX251bWJlcnMpOgogICAgICAgICIiIgogICAgICAgIERlbGV0ZXMgYXR0cmlidXRlcyBieSBVbmlxdWUgSVAgRmFicmljIFNlcmlhbCBOdW1iZXIocykKICAgICAgICA6cGFyYW0gc2VyaWFsX251bWJlcnM6IHN0cjogU2VyaWFsIE51bWJlcnMKICAgICAgICA6cmV0dXJuOgogICAgICAgICIiIgogICAgICAgIHNlcmlhbF9udW1iZXJzID0gW3N0cihpKSBmb3IgaSBpbiBzZXJpYWxfbnVtYmVyc10KICAgICAgICByZXNwID0gc2VsZi5jbGllbnQucmVxdWVzdCgnREVMRVRFJywgJ2F0dHJpYnV0ZXMvZ2xvYmFsLycsIGpzb249ZGljdChhdHRyaWJ1dGVzPWRpY3Qoc249c2VyaWFsX251bWJlcnMpKSkKICAgICAgICByZXNwLnJhaXNlX2Zvcl9zdGF0dXMoKQogICAgICAgIHJldHVybiBUcnVlCgogICAgZGVmIGRlbGV0ZV9hdHRyaWJ1dGVfYnlfaWQoc2VsZiwgKmF0dHJpYnV0ZV9pZHMpOgogICAgICAgICIiIgogICAgICAgIERlbGV0ZXMgYXR0cmlidXRlcyBieSBBdHRyaWJ1dGUgSUQocykKICAgICAgICA6cGFyYW0gYXR0cmlidXRlX2lkczogc3RyOiBBdHRyaWJ1dGUgSURzCiAgICAgICAgOnJldHVybjoKICAgICAgICAiIiIKICAgICAgICBhdHRyaWJ1dGVfaWRzID0gW3N0cihpKSBmb3IgaSBpbiBhdHRyaWJ1dGVfaWRzXQogICAgICAgIHJlc3AgPSBzZWxmLmNsaWVudC5yZXF1ZXN0KCdERUxFVEUnLCAnYXR0cmlidXRlcy9nbG9iYWwvJywganNvbj1kaWN0KGF0dHJpYnV0ZXM9ZGljdChpZD1hdHRyaWJ1dGVfaWRzKSkpCiAgICAgICAgcmVzcC5yYWlzZV9mb3Jfc3RhdHVzKCkKICAgICAgICByZXR1cm4gVHJ1ZQo8fGZpbV9zdWZmaXh8PgogICAgICAgIDpyZXR1cm46IGxpc3Q6IExpc3Qgb2YgRGljdGlvbmFyaWVzCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuY2xpZW50LmZldGNoX2FsbCgKICAgICAgICAgICAgJ3RhYmxlcy9nbG9iYWwtYXR0cmlidXRlcycsCjx8ZmltX2VuZHw+"]
["822cbeeff06e9170e25cd7f212773d51ce8d5a06-3","822cbeeff06e9170e25cd7f212773d51ce8d5a06","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKZnJvbSB0eXBpbmcgaW1wb3J0IEFueSwgT3B0aW9uYWwsIExpc3QKCmZyb20gcHlkYW50aWMuZGF0YWNsYXNzZXMgaW1wb3J0IGRhdGFjbGFzcwoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQoKCkBkYXRhY2xhc3MKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpjbGFzcyBBdHRyaWJ1dGVzOgogICAgY2xpZW50OiBBbnkKCiAgICBkZWYgYWxsKAo8fGZpbV9lbmR8Pg=="]
["822cbeeff06e9170e25cd7f212773d51ce8d5a06-4","822cbeeff06e9170e25cd7f212773d51ce8d5a06","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKZnJvbSB0eXBpbmcgaW1wb3J0IEFueSwgT3B0aW9uYWwsIExpc3QKCmZyb20gcHlkYW50aWMuZGF0YWNsYXNzZXMgaW1wb3J0IGRhdGFjbGFzcwoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQoKCkBkYXRhY2xhc3MKY2xhc3MgQXR0cmlidXRlczoKICAgIGNsaWVudDogQW55CgogICAgZGVmIGFsbCgKICAgICAgICAgICAgc2VsZiwKICAgICAgICAgICAgY29sdW1uczogbGlzdCA9IE5vbmUsCiAgICAgICAgICAgIGZpbHRlcnM6IE9wdGlvbmFsW2RpY3RdID0gTm9uZSwKICAgICAgICAgICAgc29ydDogT3B0aW9uYWxbZGljdF0gPSBOb25lLAogICAgKToKICAgICAgICAiIiIKICAgICAgICBHZXRzIGFsbCBkYXRhIGZyb20gY29ycmVzcG9uZGluZyBlbmRwb2ludAogICAgICAgIDpwYXJhbSBjb2x1bW5zOiBsaXN0OiBPcHRpb25hbCBjb2x1bW5zIHRvIHJldHVybiwgZGVmYXVsdCBpcyBhbGwKICAgICAgICA6cGFyYW0gZmlsdGVyczogZGljdDogT3B0aW9uYWwgZmlsdGVycwogICAgICAgIDpwYXJhbSBzbmFwc2hvdF9pZDogc3RyOiBPcHRpb25hbCBzbmFwc2hvdCBJRCB0byBvdmVycmlkZSBjbGFzcwogICAgICAgIDpwYXJhbSByZXBvcnRzOiBzdHI6IFN0cmluZyBvZiBmcm9udGVuZCBVUkwgd2hlcmUgdGhlIHJlcG9ydHMgYXJlIGRpc3BsYXllZAogICAgICAgIDpwYXJhbSBzb3J0OiBkaWN0OiBEaWN0aW9uYXJ5IHRvIGFwcGx5IHNvcnRpbmc6IHsib3JkZXIiOiAiZGVzYyIsICJjb2x1bW4iOiAibGFzdENoYW5nZSJ9CiAgICAgICAgOnJldHVybjogbGlzdDogTGlzdCBvZiBEaWN0aW9uYXJpZXMKICAgICAgICAiIiIKICAgICAgICByZXR1cm4gc2VsZi5jbGllbnQuZmV0Y2hfYWxsKAogICAgICAgICAgICAndGFibGVzL2dsb2JhbC1hdHRyaWJ1dGVzJywKICAgICAgICAgICAgY29sdW1ucz1jb2x1bW5zLAogICAgICAgICAgICBmaWx0ZXJzPWZpbHRlcnMsCiAgICAgICAgICAgIHNvcnQ9c29ydCwKICAgICAgICAgICAgc25hcHNob3Q9RmFsc2UKICAgICAgICApCgogICAgZGVmIHNldF9zaXRlX2J5X3NuKHNlbGYsIHNlcmlhbF9udW1iZXIsIHNpdGVfbmFtZSk6CiAgICAgICAgIiIiCiAgICAgICAgU2V0IGEgc2luZ2xlIHNpdGUgYnkgc2VyaWFsIG51bWJlcgogICAgICAgIDpwYXJhbSBzZXJpYWxfbnVtYmVyOiBzdHI6IElQIEZhYnJpYyBVbmlxdWUgU2VyaWFsIE51bWJlcgogICAgICAgIDpwYXJhbSBzaXRlX25hbWU6IHN0cjogU2l0ZSBuYW1lIGZvciBkZXZpY2UuCiAgICAgICAgOnJldHVybjoKICAgICAgICAiIiIKICAgICAgICByZXNwID0gc2VsZi5jbGllbnQucG9zdCgnYXR0cmlidXRlcy9nbG9iYWwnLCBqc29uPWRpY3QobmFtZT0ic2l0ZU5hbWUiLCBzbj1zZXJpYWxfbnVtYmVyLCB2YWx1ZT1zaXRlX25hbWUpKQogICAgICAgIHJlc3AucmFpc2VfZm9yX3N0YXR1cygpCiAgICAgICAgcmV0dXJuIHJlc3AuanNvbigpCgogICAgZGVmIHNldF9zaXRlc19ieV9zbihzZWxmLCBzaXRlczogTGlzdFtkaWN0XSk6CiAgICAgICAgIiIiCjx8ZmltX2hvbGV8PgogICAgICAgIFthLnVwZGF0ZShkaWN0KG5hbWU9InNpdGVOYW1lIikpIGZvciBhIGluIHNpdGVzXQogICAgICAgIHJlc3AgPSBzZWxmLmNsaWVudC5wdXQoJ2F0dHJpYnV0ZXMvZ2xvYmFsJywganNvbj1kaWN0KGF0dHJpYnV0ZXM9c2l0ZXMpKQogICAgICAgIHJlc3AucmFpc2VfZm9yX3N0YXR1cygpCiAgICAgICAgcmV0dXJuIHJlc3AuanNvbigpCgogICAgZGVmIGRlbGV0ZV9hdHRyaWJ1dGVfYnlfc24oc2VsZiwgKnNlcmlhbF9udW1iZXJzKToKICAgICAgICAiIiIKICAgICAgICBEZWxldGVzIGF0dHJpYnV0ZXMgYnkgVW5pcXVlIElQIEZhYnJpYyBTZXJpYWwgTnVtYmVyKHMpCiAgICAgICAgOnBhcmFtIHNlcmlhbF9udW1iZXJzOiBzdHI6IFNlcmlhbCBOdW1iZXJzCiAgICAgICAgOnJldHVybjoKICAgICAgICAiIiIKICAgICAgICBzZXJpYWxfbnVtYmVycyA9IFtzdHIoaSkgZm9yIGkgaW4gc2VyaWFsX251bWJlcnNdCiAgICAgICAgcmVzcCA9IHNlbGYuY2xpZW50LnJlcXVlc3QoJ0RFTEVURScsICdhdHRyaWJ1dGVzL2dsb2JhbC8nLCBqc29uPWRpY3QoYXR0cmlidXRlcz1kaWN0KHNuPXNlcmlhbF9udW1iZXJzKSkpCiAgICAgICAgcmVzcC5yYWlzZV9mb3Jfc3RhdHVzKCkKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIGRlZiBkZWxldGVfYXR0cmlidXRlX2J5X2lkKHNlbGYsICphdHRyaWJ1dGVfaWRzKToKICAgICAgICAiIiIKICAgICAgICBEZWxldGVzIGF0dHJpYnV0ZXMgYnkgQXR0cmlidXRlIElEKHMpCiAgICAgICAgOnBhcmFtIGF0dHJpYnV0ZV9pZHM6IHN0cjogQXR0cmlidXRlIElEcwogICAgICAgIDpyZXR1cm46CiAgICAgICAgIiIiCiAgICAgICAgYXR0cmlidXRlX2lkcyA9IFtzdHIoaSkgZm9yIGkgaW4gYXR0cmlidXRlX2lkc10KICAgICAgICByZXNwID0gc2VsZi5jbGllbnQucmVxdWVzdCgnREVMRVRFJywgJ2F0dHJpYnV0ZXMvZ2xvYmFsLycsIGpzb249ZGljdChhdHRyaWJ1dGVzPWRpY3QoaWQ9YXR0cmlidXRlX2lkcykpKQogICAgICAgIHJlc3AucmFpc2VfZm9yX3N0YXR1cygpCiAgICAgICAgcmV0dXJuIFRydWUKPHxmaW1fc3VmZml4fD4KICAgICAgICBTZXRzIGEgbGlzdCBvZiBzaXRlcyBmb3IgZGV2aWNlcyBiYXNlZCBvbiBzZXJpYWwgbnVtYmVycy4KICAgICAgICA6cGFyYW0gc2l0ZXM6IGxpc3Q6IFt7J3NuJzogJ0lQRiBTRVJJQUwgTlVNQkVSJywgJ3ZhbHVlJzogJ1NJVEUgTkFNRSd9XQogICAgICAgIDpyZXR1cm46CiAgICAgICAgIiIiCjx8ZmltX2VuZHw+"]
["822cbeeff06e9170e25cd7f212773d51ce8d5a06-5","822cbeeff06e9170e25cd7f212773d51ce8d5a06","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKZnJvbSB0eXBpbmcgaW1wb3J0IEFueSwgT3B0aW9uYWwsIExpc3QKCmZyb20gcHlkYW50aWMuZGF0YWNsYXNzZXMgaW1wb3J0IGRhdGFjbGFzcwoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQoKCkBkYXRhY2xhc3MKY2xhc3MgQXR0cmlidXRlczoKICAgIGNsaWVudDogQW55CgogICAgZGVmIGFsbCgKICAgICAgICAgICAgc2VsZiwKICAgICAgICAgICAgY29sdW1uczogbGlzdCA9IE5vbmUsCiAgICAgICAgICAgIGZpbHRlcnM6IE9wdGlvbmFsW2RpY3RdID0gTm9uZSwKICAgICAgICAgICAgc29ydDogT3B0aW9uYWxbZGljdF0gPSBOb25lLAogICAgKToKICAgICAgICAiIiIKICAgICAgICBHZXRzIGFsbCBkYXRhIGZyb20gY29ycmVzcG9uZGluZyBlbmRwb2ludAogICAgICAgIDpwYXJhbSBjb2x1bW5zOiBsaXN0OiBPcHRpb25hbCBjb2x1bW5zIHRvIHJldHVybiwgZGVmYXVsdCBpcyBhbGwKICAgICAgICA6cGFyYW0gZmlsdGVyczogZGljdDogT3B0aW9uYWwgZmlsdGVycwogICAgICAgIDpwYXJhbSBzbmFwc2hvdF9pZDogc3RyOiBPcHRpb25hbCBzbmFwc2hvdCBJRCB0byBvdmVycmlkZSBjbGFzcwogICAgICAgIDpwYXJhbSByZXBvcnRzOiBzdHI6IFN0cmluZyBvZiBmcm9udGVuZCBVUkwgd2hlcmUgdGhlIHJlcG9ydHMgYXJlIGRpc3BsYXllZAogICAgICAgIDpwYXJhbSBzb3J0OiBkaWN0OiBEaWN0aW9uYXJ5IHRvIGFwcGx5IHNvcnRpbmc6IHsib3JkZXIiOiAiZGVzYyIsICJjb2x1bW4iOiAibGFzdENoYW5nZSJ9CiAgICAgICAgOnJldHVybjogbGlzdDogTGlzdCBvZiBEaWN0aW9uYXJpZXMKICAgICAgICAiIiIKICAgICAgICByZXR1cm4gc2VsZi5jbGllbnQuZmV0Y2hfYWxsKAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgc25hcHNob3Q9RmFsc2UKICAgICAgICApCgogICAgZGVmIHNldF9zaXRlX2J5X3NuKHNlbGYsIHNlcmlhbF9udW1iZXIsIHNpdGVfbmFtZSk6CiAgICAgICAgIiIiCiAgICAgICAgU2V0IGEgc2luZ2xlIHNpdGUgYnkgc2VyaWFsIG51bWJlcgogICAgICAgIDpwYXJhbSBzZXJpYWxfbnVtYmVyOiBzdHI6IElQIEZhYnJpYyBVbmlxdWUgU2VyaWFsIE51bWJlcgogICAgICAgIDpwYXJhbSBzaXRlX25hbWU6IHN0cjogU2l0ZSBuYW1lIGZvciBkZXZpY2UuCiAgICAgICAgOnJldHVybjoKICAgICAgICAiIiIKICAgICAgICByZXNwID0gc2VsZi5jbGllbnQucG9zdCgnYXR0cmlidXRlcy9nbG9iYWwnLCBqc29uPWRpY3QobmFtZT0ic2l0ZU5hbWUiLCBzbj1zZXJpYWxfbnVtYmVyLCB2YWx1ZT1zaXRlX25hbWUpKQogICAgICAgIHJlc3AucmFpc2VfZm9yX3N0YXR1cygpCiAgICAgICAgcmV0dXJuIHJlc3AuanNvbigpCgogICAgZGVmIHNldF9zaXRlc19ieV9zbihzZWxmLCBzaXRlczogTGlzdFtkaWN0XSk6CiAgICAgICAgIiIiCiAgICAgICAgU2V0cyBhIGxpc3Qgb2Ygc2l0ZXMgZm9yIGRldmljZXMgYmFzZWQgb24gc2VyaWFsIG51bWJlcnMuCiAgICAgICAgOnBhcmFtIHNpdGVzOiBsaXN0OiBbeydzbic6ICdJUEYgU0VSSUFMIE5VTUJFUicsICd2YWx1ZSc6ICdTSVRFIE5BTUUnfV0KICAgICAgICA6cmV0dXJuOgogICAgICAgICIiIgogICAgICAgIFthLnVwZGF0ZShkaWN0KG5hbWU9InNpdGVOYW1lIikpIGZvciBhIGluIHNpdGVzXQogICAgICAgIHJlc3AgPSBzZWxmLmNsaWVudC5wdXQoJ2F0dHJpYnV0ZXMvZ2xvYmFsJywganNvbj1kaWN0KGF0dHJpYnV0ZXM9c2l0ZXMpKQogICAgICAgIHJlc3AucmFpc2VfZm9yX3N0YXR1cygpCiAgICAgICAgcmV0dXJuIHJlc3AuanNvbigpCgogICAgZGVmIGRlbGV0ZV9hdHRyaWJ1dGVfYnlfc24oc2VsZiwgKnNlcmlhbF9udW1iZXJzKToKICAgICAgICAiIiIKICAgICAgICBEZWxldGVzIGF0dHJpYnV0ZXMgYnkgVW5pcXVlIElQIEZhYnJpYyBTZXJpYWwgTnVtYmVyKHMpCiAgICAgICAgOnBhcmFtIHNlcmlhbF9udW1iZXJzOiBzdHI6IFNlcmlhbCBOdW1iZXJzCiAgICAgICAgOnJldHVybjoKICAgICAgICAiIiIKICAgICAgICBzZXJpYWxfbnVtYmVycyA9IFtzdHIoaSkgZm9yIGkgaW4gc2VyaWFsX251bWJlcnNdCiAgICAgICAgcmVzcCA9IHNlbGYuY2xpZW50LnJlcXVlc3QoJ0RFTEVURScsICdhdHRyaWJ1dGVzL2dsb2JhbC8nLCBqc29uPWRpY3QoYXR0cmlidXRlcz1kaWN0KHNuPXNlcmlhbF9udW1iZXJzKSkpCiAgICAgICAgcmVzcC5yYWlzZV9mb3Jfc3RhdHVzKCkKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIGRlZiBkZWxldGVfYXR0cmlidXRlX2J5X2lkKHNlbGYsICphdHRyaWJ1dGVfaWRzKToKICAgICAgICAiIiIKICAgICAgICBEZWxldGVzIGF0dHJpYnV0ZXMgYnkgQXR0cmlidXRlIElEKHMpCiAgICAgICAgOnBhcmFtIGF0dHJpYnV0ZV9pZHM6IHN0cjogQXR0cmlidXRlIElEcwogICAgICAgIDpyZXR1cm46CiAgICAgICAgIiIiCiAgICAgICAgYXR0cmlidXRlX2lkcyA9IFtzdHIoaSkgZm9yIGkgaW4gYXR0cmlidXRlX2lkc10KICAgICAgICByZXNwID0gc2VsZi5jbGllbnQucmVxdWVzdCgnREVMRVRFJywgJ2F0dHJpYnV0ZXMvZ2xvYmFsLycsIGpzb249ZGljdChhdHRyaWJ1dGVzPWRpY3QoaWQ9YXR0cmlidXRlX2lkcykpKQogICAgICAgIHJlc3AucmFpc2VfZm9yX3N0YXR1cygpCiAgICAgICAgcmV0dXJuIFRydWUKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgJ3RhYmxlcy9nbG9iYWwtYXR0cmlidXRlcycsCiAgICAgICAgICAgIGNvbHVtbnM9Y29sdW1ucywKICAgICAgICAgICAgZmlsdGVycz1maWx0ZXJzLAogICAgICAgICAgICBzb3J0PXNvcnQsCjx8ZmltX2VuZHw+"]
["da43ad4bfbff138b33b1da2258c96d0110d8cd28-1","da43ad4bfbff138b33b1da2258c96d0110d8cd28","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCiAgICBwaXBfc2VydmljZXMzX2NvbnRhaW5lci5jb25maWcuQ29udGFpbmVyQ29uZmlnUmVhZGVyCiAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KCiAgICBDb250YWluZXIgY29uZmlndXJhdGlvbiByZWFkZXIgaW1wbGVtZW50YXRpb24uCgogICAgOmNvcHlyaWdodDogQ29uY2VwdHVhbCBWaXNpb24gQ29uc3VsdGluZyBMTEMgMjAxOC0yMDE5LCBzZWUgQVVUSE9SUyBmb3IgbW9yZSBkZXRhaWxzLgogICAgOmxpY2Vuc2U6IE1JVCwgc2VlIExJQ0VOU0UgZm9yIG1vcmUgZGV0YWlscy4KIiIiCmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbAoKZnJvbSBwaXBfc2VydmljZXMzX2NvbW1vbnMuY29uZmlnIGltcG9ydCBDb25maWdQYXJhbXMKZnJvbSBwaXBfc2VydmljZXMzX2NvbW1vbnMuZXJyb3JzIGltcG9ydCBDb25maWdFeGNlcHRpb24KZnJvbSBwaXBfc2VydmljZXMzX2NvbXBvbmVudHMuY29uZmlnIGltcG9ydCBKc29uQ29uZmlnUmVhZGVyCmZyb20gcGlwX3NlcnZpY2VzM19jb21wb25lbnRzLmNvbmZpZyBpbXBvcnQgWWFtbENvbmZpZ1JlYWRlcgoKZnJvbSAuQ29udGFpbmVyQ29uZmlnIGltcG9ydCBDb250YWluZXJDb25maWcKCgpjbGFzcyBDb250YWluZXJDb25maWdSZWFkZXI6CiAgICAiIiIKICAgIEhlbHBlciBjbGFzcyB0aGF0IHJlYWRzIGNvbnRhaW5lciBjb25maWd1cmF0aW9uIGZyb20gSlNPTiBvciBZQU1MIGZpbGUuCiAgICAiIiIKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgcmVhZF9mcm9tX2ZpbGUoY29ycmVsYXRpb25faWQ6IE9wdGlvbmFsW3N0cl0sIHBhdGg6IHN0ciwgcGFyYW1ldGVyczogQ29uZmlnUGFyYW1zKSAtPiBDb250YWluZXJDb25maWc6CiAgICAgICAgIiIiCiAgICAgICAgUmVhZHMgY29udGFpbmVyIGNvbmZpZ3VyYXRpb24gZnJvbSBKU09OIG9yIFlBTUwgZmlsZS4KICAgICAgICBUaGUgdHlwZSBvZiB0aGUgZmlsZSBpcyBkZXRlcm1pbmVkIGJ5IGZpbGUgZXh0ZW5zaW9uLgoKICAgICAgICA6cGFyYW0gY29ycmVsYXRpb25faWQ6IChvcHRpb25hbCkgdHJhbnNhY3Rpb24gaWQgdG8gdHJhY2UgZXhlY3V0aW9uIHRocm91Z2ggY2FsbCBjaGFpbi4KCiAgICAgICAgOnBhcmFtIHBhdGg6IGEgcGF0aCB0byBjb21wb25lbnQgY29uZmlndXJhdGlvbiBmaWxlLgoKICAgICAgICA6cGFyYW0gcGFyYW1ldGVyczogdmFsdWVzIHRvIHBhcmFtZXRlcnMgdGhlIGNvbmZpZ3VyYXRpb24gb3IgbnVsbCB0byBza2lwIHBhcmFtZXRlcml6YXRpb24uCgogICAgICAgIDpyZXR1cm46IHRoZSByZWFkIGNvbnRhaW5lciBjb25maWd1cmF0aW9uCiAgICAgICAgIiIiCiAgICAgICAgaWYgcGF0aCBpcyBOb25lOgogICAgICAgICAgICByYWlzZSBDb25maWdFeGNlcHRpb24oY29ycmVsYXRpb25faWQsICJOT19QQVRIIiwgIk1pc3NpbmcgY29uZmlnIGZpbGUgcGF0aCIpCgogICAgICAgIGluZGV4ID0gcGF0aC5yZmluZCgnLicpCiAgICAgICAgZXh0ID0gcGF0aFtpbmRleCArIDE6XS5sb3dlcigpIGlmIGluZGV4ID4gMCBlbHNlICcnCgogICAgICAgIGlmIGV4dCA9PSAianNvbiI6CiAgICAgICAgICAgIHJldHVybiBDb250YWluZXJDb25maWdSZWFkZXIucmVhZF9mcm9tX2pzb25fZmlsZShjb3JyZWxhdGlvbl9pZCwgcGF0aCwgcGFyYW1ldGVycykKICAgICAgICBlbGlmIGV4dCA9PSAieWFtbCIgb3IgZXh0ID09ICJ5bWwiOgogICAgICAgICAgICByZXR1cm4gQ29udGFpbmVyQ29uZmlnUmVhZGVyLnJlYWRfZnJvbV95YW1sX2ZpbGUoY29ycmVsYXRpb25faWQsIHBhdGgsIHBhcmFtZXRlcnMpCgogICAgICAgICMgQnkgZGVmYXVsdCByZWFkIGFzIEpTT04KICAgICAgICByZXR1cm4gQ29udGFpbmVyQ29uZmlnUmVhZGVyLnJlYWRfZnJvbV9qc29uX2ZpbGUoY29ycmVsYXRpb25faWQsIHBhdGgsIHBhcmFtZXRlcnMpCgogICAgQHN0YXRpY21ldGhvZAo8fGZpbV9ob2xlfD4KICAgICAgICA6cGFyYW0gY29ycmVsYXRpb25faWQ6IChvcHRpb25hbCkgdHJhbnNhY3Rpb24gaWQgdG8gdHJhY2UgZXhlY3V0aW9uIHRocm91Z2ggY2FsbCBjaGFpbi4KCiAgICAgICAgOnBhcmFtIHBhdGg6IGEgcGF0aCB0byBjb21wb25lbnQgY29uZmlndXJhdGlvbiBmaWxlLgoKICAgICAgICA6cGFyYW0gcGFyYW1ldGVyczogdmFsdWVzIHRvIHBhcmFtZXRlcnMgdGhlIGNvbmZpZ3VyYXRpb24gb3IgbnVsbCB0byBza2lwIHBhcmFtZXRlcml6YXRpb24uCgogICAgICAgIDpyZXR1cm46IHRoZSByZWFkIGNvbnRhaW5lciBjb25maWd1cmF0aW9uCiAgICAgICAgIiIiCiAgICAgICAgY29uZmlnID0gSnNvbkNvbmZpZ1JlYWRlci5yZWFkX2NvbmZpZyhjb3JyZWxhdGlvbl9pZCwgcGF0aCwgcGFyYW1ldGVycykKICAgICAgICByZXR1cm4gQ29udGFpbmVyQ29uZmlnLmZyb21fY29uZmlnKGNvbmZpZykKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgcmVhZF9mcm9tX3lhbWxfZmlsZShjb3JyZWxhdGlvbl9pZDogT3B0aW9uYWxbc3RyXSwgcGF0aDogc3RyLCBwYXJhbWV0ZXJzOiBDb25maWdQYXJhbXMpIC0+IENvbnRhaW5lckNvbmZpZzoKICAgICAgICAiIiIKICAgICAgICBSZWFkcyBjb250YWluZXIgY29uZmlndXJhdGlvbiBmcm9tIFlBTUwgZmlsZS4KCiAgICAgICAgOnBhcmFtIGNvcnJlbGF0aW9uX2lkOiAob3B0aW9uYWwpIHRyYW5zYWN0aW9uIGlkIHRvIHRyYWNlIGV4ZWN1dGlvbiB0aHJvdWdoIGNhbGwgY2hhaW4uCgogICAgICAgIDpwYXJhbSBwYXRoOiBhIHBhdGggdG8gY29tcG9uZW50IGNvbmZpZ3VyYXRpb24gZmlsZS4KCiAgICAgICAgOnBhcmFtIHBhcmFtZXRlcnM6IHZhbHVlcyB0byBwYXJhbWV0ZXJzIHRoZSBjb25maWd1cmF0aW9uIG9yIG51bGwgdG8gc2tpcCBwYXJhbWV0ZXJpemF0aW9uLgoKICAgICAgICA6cmV0dXJuOiB0aGUgcmVhZCBjb250YWluZXIgY29uZmlndXJhdGlvbgogICAgICAgICIiIgogICAgICAgIGNvbmZpZyA9IFlhbWxDb25maWdSZWFkZXIucmVhZF9jb25maWcoY29ycmVsYXRpb25faWQsIHBhdGgsIHBhcmFtZXRlcnMpCiAgICAgICAgcmV0dXJuIENvbnRhaW5lckNvbmZpZy5mcm9tX2NvbmZpZyhjb25maWcpCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgcmVhZF9mcm9tX2pzb25fZmlsZShjb3JyZWxhdGlvbl9pZDogT3B0aW9uYWxbc3RyXSwgcGF0aDogc3RyLCBwYXJhbWV0ZXJzOiBDb25maWdQYXJhbXMpIC0+IENvbnRhaW5lckNvbmZpZzoKICAgICAgICAiIiIKICAgICAgICBSZWFkcyBjb250YWluZXIgY29uZmlndXJhdGlvbiBmcm9tIEpTT04gZmlsZS4KCjx8ZmltX2VuZHw+"]
["da43ad4bfbff138b33b1da2258c96d0110d8cd28-2","da43ad4bfbff138b33b1da2258c96d0110d8cd28","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCiAgICBwaXBfc2VydmljZXMzX2NvbnRhaW5lci5jb25maWcuQ29udGFpbmVyQ29uZmlnUmVhZGVyCiAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KCiAgICBDb250YWluZXIgY29uZmlndXJhdGlvbiByZWFkZXIgaW1wbGVtZW50YXRpb24uCgogICAgOmNvcHlyaWdodDogQ29uY2VwdHVhbCBWaXNpb24gQ29uc3VsdGluZyBMTEMgMjAxOC0yMDE5LCBzZWUgQVVUSE9SUyBmb3IgbW9yZSBkZXRhaWxzLgogICAgOmxpY2Vuc2U6IE1JVCwgc2VlIExJQ0VOU0UgZm9yIG1vcmUgZGV0YWlscy4KIiIiCmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbAoKZnJvbSBwaXBfc2VydmljZXMzX2NvbW1vbnMuY29uZmlnIGltcG9ydCBDb25maWdQYXJhbXMKZnJvbSBwaXBfc2VydmljZXMzX2NvbW1vbnMuZXJyb3JzIGltcG9ydCBDb25maWdFeGNlcHRpb24KZnJvbSBwaXBfc2VydmljZXMzX2NvbXBvbmVudHMuY29uZmlnIGltcG9ydCBKc29uQ29uZmlnUmVhZGVyCmZyb20gcGlwX3NlcnZpY2VzM19jb21wb25lbnRzLmNvbmZpZyBpbXBvcnQgWWFtbENvbmZpZ1JlYWRlcgoKZnJvbSAuQ29udGFpbmVyQ29uZmlnIGltcG9ydCBDb250YWluZXJDb25maWcKCgpjbGFzcyBDb250YWluZXJDb25maWdSZWFkZXI6CiAgICAiIiIKICAgIEhlbHBlciBjbGFzcyB0aGF0IHJlYWRzIGNvbnRhaW5lciBjb25maWd1cmF0aW9uIGZyb20gSlNPTiBvciBZQU1MIGZpbGUuCiAgICAiIiIKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgcmVhZF9mcm9tX2ZpbGUoY29ycmVsYXRpb25faWQ6IE9wdGlvbmFsW3N0cl0sIHBhdGg6IHN0ciwgcGFyYW1ldGVyczogQ29uZmlnUGFyYW1zKSAtPiBDb250YWluZXJDb25maWc6CiAgICAgICAgIiIiCiAgICAgICAgUmVhZHMgY29udGFpbmVyIGNvbmZpZ3VyYXRpb24gZnJvbSBKU09OIG9yIFlBTUwgZmlsZS4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIFRoZSB0eXBlIG9mIHRoZSBmaWxlIGlzIGRldGVybWluZWQgYnkgZmlsZSBleHRlbnNpb24uCgogICAgICAgIDpwYXJhbSBjb3JyZWxhdGlvbl9pZDogKG9wdGlvbmFsKSB0cmFuc2FjdGlvbiBpZCB0byB0cmFjZSBleGVjdXRpb24gdGhyb3VnaCBjYWxsIGNoYWluLgoKPHxmaW1fZW5kfD4="]
["da43ad4bfbff138b33b1da2258c96d0110d8cd28-3","da43ad4bfbff138b33b1da2258c96d0110d8cd28","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCiAgICBwaXBfc2VydmljZXMzX2NvbnRhaW5lci5jb25maWcuQ29udGFpbmVyQ29uZmlnUmVhZGVyCiAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KCiAgICBDb250YWluZXIgY29uZmlndXJhdGlvbiByZWFkZXIgaW1wbGVtZW50YXRpb24uCgogICAgOmNvcHlyaWdodDogQ29uY2VwdHVhbCBWaXNpb24gQ29uc3VsdGluZyBMTEMgMjAxOC0yMDE5LCBzZWUgQVVUSE9SUyBmb3IgbW9yZSBkZXRhaWxzLgogICAgOmxpY2Vuc2U6IE1JVCwgc2VlIExJQ0VOU0UgZm9yIG1vcmUgZGV0YWlscy4KIiIiCmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbAoKZnJvbSBwaXBfc2VydmljZXMzX2NvbW1vbnMuY29uZmlnIGltcG9ydCBDb25maWdQYXJhbXMKZnJvbSBwaXBfc2VydmljZXMzX2NvbW1vbnMuZXJyb3JzIGltcG9ydCBDb25maWdFeGNlcHRpb24KZnJvbSBwaXBfc2VydmljZXMzX2NvbXBvbmVudHMuY29uZmlnIGltcG9ydCBKc29uQ29uZmlnUmVhZGVyCmZyb20gcGlwX3NlcnZpY2VzM19jb21wb25lbnRzLmNvbmZpZyBpbXBvcnQgWWFtbENvbmZpZ1JlYWRlcgoKZnJvbSAuQ29udGFpbmVyQ29uZmlnIGltcG9ydCBDb250YWluZXJDb25maWcKCgpjbGFzcyBDb250YWluZXJDb25maWdSZWFkZXI6CiAgICAiIiIKICAgIEhlbHBlciBjbGFzcyB0aGF0IHJlYWRzIGNvbnRhaW5lciBjb25maWd1cmF0aW9uIGZyb20gSlNPTiBvciBZQU1MIGZpbGUuCiAgICAiIiIKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgcmVhZF9mcm9tX2ZpbGUoY29ycmVsYXRpb25faWQ6IE9wdGlvbmFsW3N0cl0sIHBhdGg6IHN0ciwgcGFyYW1ldGVyczogQ29uZmlnUGFyYW1zKSAtPiBDb250YWluZXJDb25maWc6CiAgICAgICAgIiIiCiAgICAgICAgUmVhZHMgY29udGFpbmVyIGNvbmZpZ3VyYXRpb24gZnJvbSBKU09OIG9yIFlBTUwgZmlsZS4KICAgICAgICBUaGUgdHlwZSBvZiB0aGUgZmlsZSBpcyBkZXRlcm1pbmVkIGJ5IGZpbGUgZXh0ZW5zaW9uLgoKICAgICAgICA6cGFyYW0gY29ycmVsYXRpb25faWQ6IChvcHRpb25hbCkgdHJhbnNhY3Rpb24gaWQgdG8gdHJhY2UgZXhlY3V0aW9uIHRocm91Z2ggY2FsbCBjaGFpbi4KCiAgICAgICAgOnBhcmFtIHBhdGg6IGEgcGF0aCB0byBjb21wb25lbnQgY29uZmlndXJhdGlvbiBmaWxlLgoKICAgICAgICA6cGFyYW0gcGFyYW1ldGVyczogdmFsdWVzIHRvIHBhcmFtZXRlcnMgdGhlIGNvbmZpZ3VyYXRpb24gb3IgbnVsbCB0byBza2lwIHBhcmFtZXRlcml6YXRpb24uCgogICAgICAgIDpyZXR1cm46IHRoZSByZWFkIGNvbnRhaW5lciBjb25maWd1cmF0aW9uCiAgICAgICAgIiIiCiAgICAgICAgaWYgcGF0aCBpcyBOb25lOgogICAgICAgICAgICByYWlzZSBDb25maWdFeGNlcHRpb24oY29ycmVsYXRpb25faWQsICJOT19QQVRIIiwgIk1pc3NpbmcgY29uZmlnIGZpbGUgcGF0aCIpCgogICAgICAgIGluZGV4ID0gcGF0aC5yZmluZCgnLicpCiAgICAgICAgZXh0ID0gcGF0aFtpbmRleCArIDE6XS5sb3dlcigpIGlmIGluZGV4ID4gMCBlbHNlICcnCgogICAgICAgIGlmIGV4dCA9PSAianNvbiI6CiAgICAgICAgICAgIHJldHVybiBDb250YWluZXJDb25maWdSZWFkZXIucmVhZF9mcm9tX2pzb25fZmlsZShjb3JyZWxhdGlvbl9pZCwgcGF0aCwgcGFyYW1ldGVycykKICAgICAgICBlbGlmIGV4dCA9PSAieWFtbCIgb3IgZXh0ID09ICJ5bWwiOgogICAgICAgICAgICByZXR1cm4gQ29udGFpbmVyQ29uZmlnUmVhZGVyLnJlYWRfZnJvbV95YW1sX2ZpbGUoY29ycmVsYXRpb25faWQsIHBhdGgsIHBhcmFtZXRlcnMpCgogICAgICAgICMgQnkgZGVmYXVsdCByZWFkIGFzIEpTT04KICAgICAgICByZXR1cm4gQ29udGFpbmVyQ29uZmlnUmVhZGVyLnJlYWRfZnJvbV9qc29uX2ZpbGUoY29ycmVsYXRpb25faWQsIHBhdGgsIHBhcmFtZXRlcnMpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHJlYWRfZnJvbV9qc29uX2ZpbGUoY29ycmVsYXRpb25faWQ6IE9wdGlvbmFsW3N0cl0sIHBhdGg6IHN0ciwgcGFyYW1ldGVyczogQ29uZmlnUGFyYW1zKSAtPiBDb250YWluZXJDb25maWc6CiAgICAgICAgIiIiCiAgICAgICAgUmVhZHMgY29udGFpbmVyIGNvbmZpZ3VyYXRpb24gZnJvbSBKU09OIGZpbGUuCgogICAgICAgIDpwYXJhbSBjb3JyZWxhdGlvbl9pZDogKG9wdGlvbmFsKSB0cmFuc2FjdGlvbiBpZCB0byB0cmFjZSBleGVjdXRpb24gdGhyb3VnaCBjYWxsIGNoYWluLgoKICAgICAgICA6cGFyYW0gcGF0aDogYSBwYXRoIHRvIGNvbXBvbmVudCBjb25maWd1cmF0aW9uIGZpbGUuCgogICAgICAgIDpwYXJhbSBwYXJhbWV0ZXJzOiB2YWx1ZXMgdG8gcGFyYW1ldGVycyB0aGUgY29uZmlndXJhdGlvbiBvciBudWxsIHRvIHNraXAgcGFyYW1ldGVyaXphdGlvbi4KCiAgICAgICAgOnJldHVybjogdGhlIHJlYWQgY29udGFpbmVyIGNvbmZpZ3VyYXRpb24KICAgICAgICAiIiIKICAgICAgICBjb25maWcgPSBKc29uQ29uZmlnUmVhZGVyLnJlYWRfY29uZmlnKGNvcnJlbGF0aW9uX2lkLCBwYXRoLCBwYXJhbWV0ZXJzKQogICAgICAgIHJldHVybiBDb250YWluZXJDb25maWcuZnJvbV9jb25maWcoY29uZmlnKQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiByZWFkX2Zyb21feWFtbF9maWxlKGNvcnJlbGF0aW9uX2lkOiBPcHRpb25hbFtzdHJdLCBwYXRoOiBzdHIsIHBhcmFtZXRlcnM6IENvbmZpZ1BhcmFtcykgLT4gQ29udGFpbmVyQ29uZmlnOgogICAgICAgICIiIgogICAgICAgIFJlYWRzIGNvbnRhaW5lciBjb25maWd1cmF0aW9uIGZyb20gWUFNTCBmaWxlLgoKICAgICAgICA6cGFyYW0gY29ycmVsYXRpb25faWQ6IChvcHRpb25hbCkgdHJhbnNhY3Rpb24gaWQgdG8gdHJhY2UgZXhlY3V0aW9uIHRocm91Z2ggY2FsbCBjaGFpbi4KCiAgICAgICAgOnBhcmFtIHBhdGg6IGEgcGF0aCB0byBjb21wb25lbnQgY29uZmlndXJhdGlvbiBmaWxlLgoKICAgICAgICA6cGFyYW0gcGFyYW1ldGVyczogdmFsdWVzIHRvIHBhcmFtZXRlcnMgdGhlIGNvbmZpZ3VyYXRpb24gb3IgbnVsbCB0byBza2lwIHBhcmFtZXRlcml6YXRpb24uCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgOnJldHVybjogdGhlIHJlYWQgY29udGFpbmVyIGNvbmZpZ3VyYXRpb24KICAgICAgICAiIiIKICAgICAgICBjb25maWcgPSBZYW1sQ29uZmlnUmVhZGVyLnJlYWRfY29uZmlnKGNvcnJlbGF0aW9uX2lkLCBwYXRoLCBwYXJhbWV0ZXJzKQo8fGZpbV9lbmR8Pg=="]
["da43ad4bfbff138b33b1da2258c96d0110d8cd28-4","da43ad4bfbff138b33b1da2258c96d0110d8cd28","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCiAgICBwaXBfc2VydmljZXMzX2NvbnRhaW5lci5jb25maWcuQ29udGFpbmVyQ29uZmlnUmVhZGVyCiAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KCiAgICBDb250YWluZXIgY29uZmlndXJhdGlvbiByZWFkZXIgaW1wbGVtZW50YXRpb24uCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICA6Y29weXJpZ2h0OiBDb25jZXB0dWFsIFZpc2lvbiBDb25zdWx0aW5nIExMQyAyMDE4LTIwMTksIHNlZSBBVVRIT1JTIGZvciBtb3JlIGRldGFpbHMuCiAgICA6bGljZW5zZTogTUlULCBzZWUgTElDRU5TRSBmb3IgbW9yZSBkZXRhaWxzLgoiIiIKPHxmaW1fZW5kfD4="]
["da43ad4bfbff138b33b1da2258c96d0110d8cd28-5","da43ad4bfbff138b33b1da2258c96d0110d8cd28","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCiAgICBwaXBfc2VydmljZXMzX2NvbnRhaW5lci5jb25maWcuQ29udGFpbmVyQ29uZmlnUmVhZGVyCiAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KCiAgICBDb250YWluZXIgY29uZmlndXJhdGlvbiByZWFkZXIgaW1wbGVtZW50YXRpb24uCgogICAgOmNvcHlyaWdodDogQ29uY2VwdHVhbCBWaXNpb24gQ29uc3VsdGluZyBMTEMgMjAxOC0yMDE5LCBzZWUgQVVUSE9SUyBmb3IgbW9yZSBkZXRhaWxzLgogICAgOmxpY2Vuc2U6IE1JVCwgc2VlIExJQ0VOU0UgZm9yIG1vcmUgZGV0YWlscy4KIiIiCmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbAoKZnJvbSBwaXBfc2VydmljZXMzX2NvbW1vbnMuY29uZmlnIGltcG9ydCBDb25maWdQYXJhbXMKZnJvbSBwaXBfc2VydmljZXMzX2NvbW1vbnMuZXJyb3JzIGltcG9ydCBDb25maWdFeGNlcHRpb24KZnJvbSBwaXBfc2VydmljZXMzX2NvbXBvbmVudHMuY29uZmlnIGltcG9ydCBKc29uQ29uZmlnUmVhZGVyCmZyb20gcGlwX3NlcnZpY2VzM19jb21wb25lbnRzLmNvbmZpZyBpbXBvcnQgWWFtbENvbmZpZ1JlYWRlcgoKZnJvbSAuQ29udGFpbmVyQ29uZmlnIGltcG9ydCBDb250YWluZXJDb25maWcKCgpjbGFzcyBDb250YWluZXJDb25maWdSZWFkZXI6CiAgICAiIiIKICAgIEhlbHBlciBjbGFzcyB0aGF0IHJlYWRzIGNvbnRhaW5lciBjb25maWd1cmF0aW9uIGZyb20gSlNPTiBvciBZQU1MIGZpbGUuCiAgICAiIiIKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgcmVhZF9mcm9tX2ZpbGUoY29ycmVsYXRpb25faWQ6IE9wdGlvbmFsW3N0cl0sIHBhdGg6IHN0ciwgcGFyYW1ldGVyczogQ29uZmlnUGFyYW1zKSAtPiBDb250YWluZXJDb25maWc6CiAgICAgICAgIiIiCiAgICAgICAgUmVhZHMgY29udGFpbmVyIGNvbmZpZ3VyYXRpb24gZnJvbSBKU09OIG9yIFlBTUwgZmlsZS4KICAgICAgICBUaGUgdHlwZSBvZiB0aGUgZmlsZSBpcyBkZXRlcm1pbmVkIGJ5IGZpbGUgZXh0ZW5zaW9uLgoKICAgICAgICA6cGFyYW0gY29ycmVsYXRpb25faWQ6IChvcHRpb25hbCkgdHJhbnNhY3Rpb24gaWQgdG8gdHJhY2UgZXhlY3V0aW9uIHRocm91Z2ggY2FsbCBjaGFpbi4KCiAgICAgICAgOnBhcmFtIHBhdGg6IGEgcGF0aCB0byBjb21wb25lbnQgY29uZmlndXJhdGlvbiBmaWxlLgoKICAgICAgICA6cGFyYW0gcGFyYW1ldGVyczogdmFsdWVzIHRvIHBhcmFtZXRlcnMgdGhlIGNvbmZpZ3VyYXRpb24gb3IgbnVsbCB0byBza2lwIHBhcmFtZXRlcml6YXRpb24uCgogICAgICAgIDpyZXR1cm46IHRoZSByZWFkIGNvbnRhaW5lciBjb25maWd1cmF0aW9uCiAgICAgICAgIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBpZiBwYXRoIGlzIE5vbmU6CiAgICAgICAgICAgIHJhaXNlIENvbmZpZ0V4Y2VwdGlvbihjb3JyZWxhdGlvbl9pZCwgIk5PX1BBVEgiLCAiTWlzc2luZyBjb25maWcgZmlsZSBwYXRoIikKCiAgICAgICAgaW5kZXggPSBwYXRoLnJmaW5kKCcuJykKPHxmaW1fZW5kfD4="]
["e7d584268e9a848e900a5366cf439f64379036b4-1","e7d584268e9a848e900a5366cf439f64379036b4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCgpmcm9tIGZ1dHVyZS51dGlscyBpbXBvcnQgcmFpc2VfZnJvbQoKZnJvbSB0YXZlcm4udXRpbCBpbXBvcnQgZXhjZXB0aW9ucwoKZnJvbSAuZmlsZSBpbXBvcnQgWWFtbEZpbGUKZnJvbSAudXRpbCBpbXBvcnQgYWRkX3BhcnNlcl9vcHRpb25zLCBnZXRfb3B0aW9uX2dlbmVyaWMKCgpkZWYgcHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIpOgogICAgIiIiQWRkIGFuIG9wdGlvbiB0byBwYXNzIGluIGEgZ2xvYmFsIGNvbmZpZyBmaWxlIGZvciB0YXZlcm4KCiAgICBTZWUgYWxzbyB0ZXN0dXRpbHMucHl0ZXN0aG9vay51dGlsLmFkZF9wYXJzZXJfb3B0aW9ucwogICAgIiIiCiAgICBhZGRfcGFyc2VyX29wdGlvbnMocGFyc2VyLmFkZG9wdGlvbiwgd2l0aF9kZWZhdWx0cz1GYWxzZSkKCiAgICBwYXJzZXIuYWRkaW5pKAogICAgICAgICJ0YXZlcm4tZ2xvYmFsLWNmZyIsCiAgICAgICAgaGVscD0iT25lIG9yIG1vcmUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gaW5jbHVkZSBpbiBldmVyeSB0ZXN0IiwKICAgICAgICB0eXBlPSJsaW5lbGlzdCIsCiAgICAgICAgZGVmYXVsdD1bXSwKICAgICkKICAgIHBhcnNlci5hZGRpbmkoCiAgICAgICAgInRhdmVybi1odHRwLWJhY2tlbmQiLCBoZWxwPSJXaGljaCBodHRwIGJhY2tlbmQgdG8gdXNlIiwgZGVmYXVsdD0icmVxdWVzdHMiCiAgICApCiAgICBwYXJzZXIuYWRkaW5pKAogICAgICAgICJ0YXZlcm4tbXF0dC1iYWNrZW5kIiwgaGVscD0iV2hpY2ggbXF0dCBiYWNrZW5kIHRvIHVzZSIsIGRlZmF1bHQ9InBhaG8tbXF0dCIKICAgICkKICAgIHBhcnNlci5hZGRpbmkoCiAgICAgICAgInRhdmVybi1zdHJpY3QiLAogICAgICAgIGhlbHA9IkRlZmF1bHQgcmVzcG9uc2UgbWF0Y2hpbmcgc3RyaWN0bmVzcyIsCiAgICAgICAgdHlwZT0iYXJncyIsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgKQogICAgcGFyc2VyLmFkZGluaSgKPHxmaW1faG9sZXw+CiAgICApCiAgICBwYXJzZXIuYWRkaW5pKAogICAgICAgICJ0YXZlcm4tYWx3YXlzLWZvbGxvdy1yZWRpcmVjdHMiLAogICAgICAgIGhlbHA9IkFsd2F5cyBmb2xsb3cgSFRUUCByZWRpcmVjdHMiLAogICAgICAgIHR5cGU9ImJvb2wiLAogICAgICAgIGRlZmF1bHQ9RmFsc2UsCiAgICApCiAgICBwYXJzZXIuYWRkaW5pKAogICAgICAgICJ0YXZlcm4tZmlsZS1wYXRoLXJlZ2V4IiwKICAgICAgICBoZWxwPSJSZWdleCB0byBzZWFyY2ggZm9yIFRhdmVybiBZQU1MIHRlc3QgZmlsZXMiLAogICAgICAgIGRlZmF1bHQ9ciIuK1wudGF2ZXJuXC55YT9tbCQiLAogICAgICAgIHR5cGU9ImFyZ3MiLAogICAgKQoKCmRlZiBweXRlc3RfY29sbGVjdF9maWxlKHBhcmVudCwgcGF0aCk6CiAgICAiIiJPbiBjb2xsZWN0aW5nIGZpbGVzLCBnZXQgYW55IGZpbGVzIHRoYXQgZW5kIGluIC50YXZlcm4ueWFtbCBvciAudGF2ZXJuLnltbCBhcyB0YXZlcm4KICAgIHRlc3QgZmlsZXMKICAgICIiIgoKICAgIHBhdHRlcm4gPSBnZXRfb3B0aW9uX2dlbmVyaWMoCiAgICAgICAgcGFyZW50LmNvbmZpZywgInRhdmVybi1maWxlLXBhdGgtcmVnZXgiLCByIi4rXC50YXZlcm5cLnlhP21sJCIKICAgICkKCiAgICBpZiBpc2luc3RhbmNlKHBhdHRlcm4sIGxpc3QpOgogICAgICAgIGlmIGxlbihwYXR0ZXJuKSAhPSAxOgogICAgICAgICAgICByYWlzZSBleGNlcHRpb25zLkludmFsaWRDb25maWd1cmF0aW9uRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgInRhdmVybi1maWxlLXBhdGgtcmVnZXggbXVzdCBoYXZlIGV4YWN0bHkgb25lIG9wdGlvbiIKICAgICAgICAgICAgKQogICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuWzBdCgogICAgdHJ5OgogICAgICAgIGNvbXBpbGVkID0gcmUuY29tcGlsZShwYXR0ZXJuKQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgICAgcmFpc2VfZnJvbShleGNlcHRpb25zLkludmFsaWRDb25maWd1cmF0aW9uRXhjZXB0aW9uKGUpLCBlKQoKICAgIG1hdGNoX3RhdmVybl9maWxlID0gY29tcGlsZWQuc2VhcmNoCgogICAgaWYgbWF0Y2hfdGF2ZXJuX2ZpbGUocGF0aC5zdHJwYXRoKToKICAgICAgICByZXR1cm4gWWFtbEZpbGUocGF0aCwgcGFyZW50KQoKICAgIHJldHVybiBOb25lCgoKZGVmIHB5dGVzdF9hZGRob29rcyhwbHVnaW5tYW5hZ2VyKToKICAgICIiIkFkZCBvdXIgY3VzdG9tIHRhdmVybiBob29rcyIiIgogICAgZnJvbSAuIGltcG9ydCBuZXdob29rcwoKICAgIHBsdWdpbm1hbmFnZXIuYWRkX2hvb2tzcGVjcyhuZXdob29rcykKPHxmaW1fc3VmZml4fD4KICAgICAgICAidGF2ZXJuLWJldGEtbmV3LXRyYWNlYmFjayIsCiAgICAgICAgaGVscD0iVXNlIG5ldyB0cmFjZWJhY2sgc3R5bGUgKGJldGEpIiwKICAgICAgICB0eXBlPSJib29sIiwKICAgICAgICBkZWZhdWx0PUZhbHNlLAo8fGZpbV9lbmR8Pg=="]
["e7d584268e9a848e900a5366cf439f64379036b4-2","e7d584268e9a848e900a5366cf439f64379036b4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCgpmcm9tIGZ1dHVyZS51dGlscyBpbXBvcnQgcmFpc2VfZnJvbQoKZnJvbSB0YXZlcm4udXRpbCBpbXBvcnQgZXhjZXB0aW9ucwoKZnJvbSAuZmlsZSBpbXBvcnQgWWFtbEZpbGUKZnJvbSAudXRpbCBpbXBvcnQgYWRkX3BhcnNlcl9vcHRpb25zLCBnZXRfb3B0aW9uX2dlbmVyaWMKCgpkZWYgcHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIpOgogICAgIiIiQWRkIGFuIG9wdGlvbiB0byBwYXNzIGluIGEgZ2xvYmFsIGNvbmZpZyBmaWxlIGZvciB0YXZlcm4KCiAgICBTZWUgYWxzbyB0ZXN0dXRpbHMucHl0ZXN0aG9vay51dGlsLmFkZF9wYXJzZXJfb3B0aW9ucwogICAgIiIiCiAgICBhZGRfcGFyc2VyX29wdGlvbnMocGFyc2VyLmFkZG9wdGlvbiwgd2l0aF9kZWZhdWx0cz1GYWxzZSkKCiAgICBwYXJzZXIuYWRkaW5pKAogICAgICAgICJ0YXZlcm4tZ2xvYmFsLWNmZyIsCiAgICAgICAgaGVscD0iT25lIG9yIG1vcmUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gaW5jbHVkZSBpbiBldmVyeSB0ZXN0IiwKICAgICAgICB0eXBlPSJsaW5lbGlzdCIsCiAgICAgICAgZGVmYXVsdD1bXSwKICAgICkKICAgIHBhcnNlci5hZGRpbmkoCiAgICAgICAgInRhdmVybi1odHRwLWJhY2tlbmQiLCBoZWxwPSJXaGljaCBodHRwIGJhY2tlbmQgdG8gdXNlIiwgZGVmYXVsdD0icmVxdWVzdHMiCiAgICApCiAgICBwYXJzZXIuYWRkaW5pKAogICAgICAgICJ0YXZlcm4tbXF0dC1iYWNrZW5kIiwgaGVscD0iV2hpY2ggbXF0dCBiYWNrZW5kIHRvIHVzZSIsIGRlZmF1bHQ9InBhaG8tbXF0dCIKICAgICkKICAgIHBhcnNlci5hZGRpbmkoCiAgICAgICAgInRhdmVybi1zdHJpY3QiLAogICAgICAgIGhlbHA9IkRlZmF1bHQgcmVzcG9uc2UgbWF0Y2hpbmcgc3RyaWN0bmVzcyIsCiAgICAgICAgdHlwZT0iYXJncyIsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgKQogICAgcGFyc2VyLmFkZGluaSgKICAgICAgICAidGF2ZXJuLWJldGEtbmV3LXRyYWNlYmFjayIsCiAgICAgICAgaGVscD0iVXNlIG5ldyB0cmFjZWJhY2sgc3R5bGUgKGJldGEpIiwKICAgICAgICB0eXBlPSJib29sIiwKICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgKQogICAgcGFyc2VyLmFkZGluaSgKICAgICAgICAidGF2ZXJuLWFsd2F5cy1mb2xsb3ctcmVkaXJlY3RzIiwKICAgICAgICBoZWxwPSJBbHdheXMgZm9sbG93IEhUVFAgcmVkaXJlY3RzIiwKICAgICAgICB0eXBlPSJib29sIiwKICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgKQogICAgcGFyc2VyLmFkZGluaSgKICAgICAgICAidGF2ZXJuLWZpbGUtcGF0aC1yZWdleCIsCiAgICAgICAgaGVscD0iUmVnZXggdG8gc2VhcmNoIGZvciBUYXZlcm4gWUFNTCB0ZXN0IGZpbGVzIiwKICAgICAgICBkZWZhdWx0PXIiLitcLnRhdmVyblwueWE/bWwkIiwKICAgICAgICB0eXBlPSJhcmdzIiwKICAgICkKCgpkZWYgcHl0ZXN0X2NvbGxlY3RfZmlsZShwYXJlbnQsIHBhdGgpOgogICAgIiIiT24gY29sbGVjdGluZyBmaWxlcywgZ2V0IGFueSBmaWxlcyB0aGF0IGVuZCBpbiAudGF2ZXJuLnlhbWwgb3IgLnRhdmVybi55bWwgYXMgdGF2ZXJuCiAgICB0ZXN0IGZpbGVzCiAgICAiIiIKCiAgICBwYXR0ZXJuID0gZ2V0X29wdGlvbl9nZW5lcmljKAogICAgICAgIHBhcmVudC5jb25maWcsICJ0YXZlcm4tZmlsZS1wYXRoLXJlZ2V4IiwgciIuK1wudGF2ZXJuXC55YT9tbCQiCiAgICApCgogICAgaWYgaXNpbnN0YW5jZShwYXR0ZXJuLCBsaXN0KToKICAgICAgICBpZiBsZW4ocGF0dGVybikgIT0gMToKICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9ucy5JbnZhbGlkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICJ0YXZlcm4tZmlsZS1wYXRoLXJlZ2V4IG11c3QgaGF2ZSBleGFjdGx5IG9uZSBvcHRpb24iCiAgICAgICAgICAgICkKICAgICAgICBwYXR0ZXJuID0gcGF0dGVyblswXQoKICAgIHRyeToKICAgICAgICBjb21waWxlZCA9IHJlLmNvbXBpbGUocGF0dGVybikKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICAgIHJhaXNlX2Zyb20oZXhjZXB0aW9ucy5JbnZhbGlkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbihlKSwgZSkKPHxmaW1faG9sZXw+CiAgICAgICAgcmV0dXJuIFlhbWxGaWxlKHBhdGgsIHBhcmVudCkKCiAgICByZXR1cm4gTm9uZQoKCmRlZiBweXRlc3RfYWRkaG9va3MocGx1Z2lubWFuYWdlcik6CiAgICAiIiJBZGQgb3VyIGN1c3RvbSB0YXZlcm4gaG9va3MiIiIKICAgIGZyb20gLiBpbXBvcnQgbmV3aG9va3MKCiAgICBwbHVnaW5tYW5hZ2VyLmFkZF9ob29rc3BlY3MobmV3aG9va3MpCjx8ZmltX3N1ZmZpeHw+CgogICAgbWF0Y2hfdGF2ZXJuX2ZpbGUgPSBjb21waWxlZC5zZWFyY2gKCiAgICBpZiBtYXRjaF90YXZlcm5fZmlsZShwYXRoLnN0cnBhdGgpOgo8fGZpbV9lbmR8Pg=="]
["e7d584268e9a848e900a5366cf439f64379036b4-3","e7d584268e9a848e900a5366cf439f64379036b4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCgpmcm9tIGZ1dHVyZS51dGlscyBpbXBvcnQgcmFpc2VfZnJvbQoKZnJvbSB0YXZlcm4udXRpbCBpbXBvcnQgZXhjZXB0aW9ucwoKZnJvbSAuZmlsZSBpbXBvcnQgWWFtbEZpbGUKZnJvbSAudXRpbCBpbXBvcnQgYWRkX3BhcnNlcl9vcHRpb25zLCBnZXRfb3B0aW9uX2dlbmVyaWMKCgpkZWYgcHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIpOgogICAgIiIiQWRkIGFuIG9wdGlvbiB0byBwYXNzIGluIGEgZ2xvYmFsIGNvbmZpZyBmaWxlIGZvciB0YXZlcm4KCiAgICBTZWUgYWxzbyB0ZXN0dXRpbHMucHl0ZXN0aG9vay51dGlsLmFkZF9wYXJzZXJfb3B0aW9ucwogICAgIiIiCiAgICBhZGRfcGFyc2VyX29wdGlvbnMocGFyc2VyLmFkZG9wdGlvbiwgd2l0aF9kZWZhdWx0cz1GYWxzZSkKCiAgICBwYXJzZXIuYWRkaW5pKAogICAgICAgICJ0YXZlcm4tZ2xvYmFsLWNmZyIsCiAgICAgICAgaGVscD0iT25lIG9yIG1vcmUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gaW5jbHVkZSBpbiBldmVyeSB0ZXN0IiwKICAgICAgICB0eXBlPSJsaW5lbGlzdCIsCiAgICAgICAgZGVmYXVsdD1bXSwKICAgICkKICAgIHBhcnNlci5hZGRpbmkoCiAgICAgICAgInRhdmVybi1odHRwLWJhY2tlbmQiLCBoZWxwPSJXaGljaCBodHRwIGJhY2tlbmQgdG8gdXNlIiwgZGVmYXVsdD0icmVxdWVzdHMiCiAgICApCiAgICBwYXJzZXIuYWRkaW5pKAogICAgICAgICJ0YXZlcm4tbXF0dC1iYWNrZW5kIiwgaGVscD0iV2hpY2ggbXF0dCBiYWNrZW5kIHRvIHVzZSIsIGRlZmF1bHQ9InBhaG8tbXF0dCIKICAgICkKICAgIHBhcnNlci5hZGRpbmkoCiAgICAgICAgInRhdmVybi1zdHJpY3QiLAogICAgICAgIGhlbHA9IkRlZmF1bHQgcmVzcG9uc2UgbWF0Y2hpbmcgc3RyaWN0bmVzcyIsCiAgICAgICAgdHlwZT0iYXJncyIsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgKQogICAgcGFyc2VyLmFkZGluaSgKICAgICAgICAidGF2ZXJuLWJldGEtbmV3LXRyYWNlYmFjayIsCiAgICAgICAgaGVscD0iVXNlIG5ldyB0cmFjZWJhY2sgc3R5bGUgKGJldGEpIiwKICAgICAgICB0eXBlPSJib29sIiwKICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgKQogICAgcGFyc2VyLmFkZGluaSgKICAgICAgICAidGF2ZXJuLWFsd2F5cy1mb2xsb3ctcmVkaXJlY3RzIiwKICAgICAgICBoZWxwPSJBbHdheXMgZm9sbG93IEhUVFAgcmVkaXJlY3RzIiwKICAgICAgICB0eXBlPSJib29sIiwKICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgKQogICAgcGFyc2VyLmFkZGluaSgKICAgICAgICAidGF2ZXJuLWZpbGUtcGF0aC1yZWdleCIsCiAgICAgICAgaGVscD0iUmVnZXggdG8gc2VhcmNoIGZvciBUYXZlcm4gWUFNTCB0ZXN0IGZpbGVzIiwKICAgICAgICBkZWZhdWx0PXIiLitcLnRhdmVyblwueWE/bWwkIiwKICAgICAgICB0eXBlPSJhcmdzIiwKICAgICkKPHxmaW1faG9sZXw+CiAgICB0ZXN0IGZpbGVzCiAgICAiIiIKCiAgICBwYXR0ZXJuID0gZ2V0X29wdGlvbl9nZW5lcmljKAogICAgICAgIHBhcmVudC5jb25maWcsICJ0YXZlcm4tZmlsZS1wYXRoLXJlZ2V4IiwgciIuK1wudGF2ZXJuXC55YT9tbCQiCiAgICApCgogICAgaWYgaXNpbnN0YW5jZShwYXR0ZXJuLCBsaXN0KToKICAgICAgICBpZiBsZW4ocGF0dGVybikgIT0gMToKICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9ucy5JbnZhbGlkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICJ0YXZlcm4tZmlsZS1wYXRoLXJlZ2V4IG11c3QgaGF2ZSBleGFjdGx5IG9uZSBvcHRpb24iCiAgICAgICAgICAgICkKICAgICAgICBwYXR0ZXJuID0gcGF0dGVyblswXQoKICAgIHRyeToKICAgICAgICBjb21waWxlZCA9IHJlLmNvbXBpbGUocGF0dGVybikKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICAgIHJhaXNlX2Zyb20oZXhjZXB0aW9ucy5JbnZhbGlkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbihlKSwgZSkKCiAgICBtYXRjaF90YXZlcm5fZmlsZSA9IGNvbXBpbGVkLnNlYXJjaAoKICAgIGlmIG1hdGNoX3RhdmVybl9maWxlKHBhdGguc3RycGF0aCk6CiAgICAgICAgcmV0dXJuIFlhbWxGaWxlKHBhdGgsIHBhcmVudCkKCiAgICByZXR1cm4gTm9uZQoKCmRlZiBweXRlc3RfYWRkaG9va3MocGx1Z2lubWFuYWdlcik6CiAgICAiIiJBZGQgb3VyIGN1c3RvbSB0YXZlcm4gaG9va3MiIiIKICAgIGZyb20gLiBpbXBvcnQgbmV3aG9va3MKCiAgICBwbHVnaW5tYW5hZ2VyLmFkZF9ob29rc3BlY3MobmV3aG9va3MpCjx8ZmltX3N1ZmZpeHw+CgoKZGVmIHB5dGVzdF9jb2xsZWN0X2ZpbGUocGFyZW50LCBwYXRoKToKICAgICIiIk9uIGNvbGxlY3RpbmcgZmlsZXMsIGdldCBhbnkgZmlsZXMgdGhhdCBlbmQgaW4gLnRhdmVybi55YW1sIG9yIC50YXZlcm4ueW1sIGFzIHRhdmVybgo8fGZpbV9lbmR8Pg=="]
["6b6637238ce26e55faa4b2921cb87d921e2bfdd1-1","6b6637238ce26e55faa4b2921cb87d921e2bfdd1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNzdgppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgb3MKaW1wb3J0IHNrdGltZS5mb3JlY2FzdGluZy5hbGwgYXMgc2sKCgpkZWYgZ2V0X29zX2ZpbGVuYW1lKGZpbGVfbmFtZSwgKmFyZ3MpOgogICAgIiIiCiAgICAgICAgVU4tVVNFRCBBUEkgLSBTdGlsbCBmaWd1cmluZyBvdXQgd2hhdCBpdCB3aWxsIGJlIHVzZWQgZm9yLgogICAgOnBhcmFtIGZpbGVfbmFtZTogRmlsZSBuYW1lLCBpbmNsdWRpbmcgZXh0ZW5zaW9uLCB0byB0aGUgZmlsZSB5b3Ugd2lzaCB0byB1c2UuCiAgICA6cGFyYW0gYXJnczogc2VxdWVudGlhbCwgY29udGludWFsIGluLWRlcHRoIGZvbGRlcnMgdW50aWwgd2UgZ2V0IHRvIHlvdXIgZmlsZS4KICAgIDpyZXR1cm46CiAgICAiIiIKICAgIHByaW50KCJXQVJOSU5HOiBUaGlzIEFQSSBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBtYXkgZ28gb3V0IG9mIHVzZSEiKQogICAgaWYgb3MubmFtZSA9PSAibnQiOgogICAgICAgIGludGVybWVkaWF0ZV9kaXJzID0gIiIKICAgICAgICBmb3IgYXJnIGluIGFyZ3M6CiAgICAgICAgICAgIGludGVybWVkaWF0ZV9kaXJzID0gaW50ZXJtZWRpYXRlX2RpcnMgKyBhcmcgKyAiXFwiCiAgICAgICAgZmlsZV9wYXRoX29zID0gb3MuZ2V0Y3dkKCkgKyAiXFwiICsgaW50ZXJtZWRpYXRlX2RpcnMgKyBmaWxlX25hbWUKCiAgICBlbGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKICAgICAgICBpbnRlcm1lZGlhdGVfZGlycyA9ICIiCiAgICAgICAgZm9yIGFyZyBpbiBhcmdzOgogICAgICAgICAgICBpbnRlcm1lZGlhdGVfZGlycyA9IGludGVybWVkaWF0ZV9kaXJzICsgYXJnICsgIi8iCiAgICAgICAgZmlsZV9wYXRoX29zID0gb3MuZ2V0Y3dkKCkgKyAiLyIgKyBpbnRlcm1lZGlhdGVfZGlycyArIGZpbGVfbmFtZQogICAgZWxzZToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJVbnN1cHBvcnRlZCBPcGVyYXRpbmcgU3lzdGVtLiIpCgogICAgcmV0dXJuIGZpbGVfcGF0aF9vcwoKCmRlZiBwYXJzZXJfY3N2X3VzZXIoZmlsZV9wYXRoKToKICAgICIiIgogICAgVU4tVVNFRCBBUEkgLSBXaWxsIGxpa2VseSBiZSByZW1vdmVkLCBwYW5kYXMgZG9lcyBhIGJldHRlciBqb2IuCiAgICBQYXJzZSB0aGUgY3N2IGluIHRoZSAidXNlciIgZm9ybWF0IGFuZCByZXR1cm4gaXRzIGRpY3Rpb25hcnkgcmVwcmVzZW50YXRpb24uCgogICAgOnBhcmFtIGZpbGVfcGF0aDogRnVsbHkgc3BlY2lmaWVkIGZpbGVfcGF0aC4KICAgIDpyZXR1cm46IGRpY3Rpb25hcnkgcmVwcmVzZW50YXRpb24gb2YgZmlsZSB0aGF0IGZpbGVfcGF0aCBwb2ludHMgdG8uCiAgICAiIiIKCiAgICBwcmludCgiV0FSTklORzogVGhpcyBBUEkgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgbWF5IGdvIG91dCBvZiB1c2UhXG4iCiAgICAgICAgICAiUGxlYXNlIHVzZSBzbGVlcF9kYXRhLmZvcmVjYXN0LnJlYWRfZGF0YSgpIikKICAgIHdpdGggb3BlbihmaWxlX3BhdGgsIG5ld2xpbmU9JycpIGFzIGNzdmZpbGU6CiAgICAgICAgcmVhZGVyID0gY3N2LnJlYWRlcihjc3ZmaWxlLCBkZWxpbWl0ZXI9JywnKQogICAgICAgIHBhcnNlZF9kYXRhID0ge30KICAgICAgICBmb3Igcm93IGluIHJlYWRlcjoKICAgICAgICAgICAgaWYgcm93WzBdID09ICJkYXkiOgogICAgICAgICAgICAgICAgZm9yIGVudHJ5IGluIHJvd1sxOjpdOgogICAgICAgICAgICAgICAgICAgIHBhcnNlZF9kYXRhW3N0cihlbnRyeSldID0ge30KICAgICAgICAgICAgZWxpZiByb3dbMF0gPT0gInN0YXJ0IHRpbWUiOgogICAgICAgICAgICAgICAgZm9yIGVudHJ5IGluIHJhbmdlKDEsIGxlbihyb3cpKToKICAgICAgICAgICAgICAgICAgICBwYXJzZWRfZGF0YVtzdHIoZW50cnkpXVsic3RhcnRfdGltZSJdID0gc3RyKHJvd1tlbnRyeV0pCiAgICAgICAgICAgIGVsaWYgcm93WzBdID09ICJlbmQgdGltZSI6CiAgICAgICAgICAgICAgICBmb3IgZW50cnkgaW4gcmFuZ2UoMSwgbGVuKHJvdykpOgogICAgICAgICAgICAgICAgICAgIHBhcnNlZF9kYXRhW3N0cihlbnRyeSldWyJlbmRfdGltZSJdID0gc3RyKHJvd1tlbnRyeV0pCiAgICAgICAgICAgIGVsaWYgcm93WzBdID09ICJxdWFsaXR5IG9mIHNsZWVwICgwIC0gMTApIjoKICAgICAgICAgICAgICAgIGZvciBlbnRyeSBpbiByYW5nZSgxLCBsZW4ocm93KSk6CiAgICAgICAgICAgICAgICAgICAgcGFyc2VkX2RhdGFbc3RyKGVudHJ5KV1bInF1YWxpdHlfb2Zfc2xlZXAiXSA9IGludChyb3dbZW50cnldKQoKICAgIHJldHVybiBwYXJzZWRfZGF0YSwgbGVuKHBhcnNlZF9kYXRhKQoKCmRlZiB3cml0ZV9jc3ZfdXNlcihmaWxlX3BhdGgsIGRhdGEpOgogICAgIiIiCiAgICBVTi1VU0VEIEFQSSAtIFdpbGwgbGlrZWx5IGJlIHJlbW92ZWQsIHBhbmRhcyBkb2VzIGEgYmV0dGVyIGpvYi4KICAgIFdyaXRlcyB0aGUgZGljdGlvbmFyeSBzcGVjaWZpZWQgYnkgZGF0YSB0byB0aGUgZmlsZSBjb250YWluZWQgaW4gZmlsZV9wYXRoCgogICAgOnBhcmFtIGZpbGVfcGF0aDogZnVsbHkgc3BlY2lmaWVkIGZpbGUgcGF0aC4KICAgIDpwYXJhbSBkYXRhOiBkaWN0aW9uYXJ5IHRvIGJlIHdyaXR0ZW4gdG8gZmlsZSBwYXRoLgogICAgOnJldHVybjogTm9uZS4KICAgICIiIgogICAgcHJpbnQoIldBUk5JTkc6IFRoaXMgQVBJIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIG1heSBnbyBvdXQgb2YgdXNlIVxuIgogICAgICAgICAgIlBsZWFzZSB1c2Ugc2xlZXBfc3RhdHMuZm9yZWNhc3Quc2F2ZV9kYXRhKCkiKQoKICAgIGRheXMgPSBsaXN0KGRhdGEua2V5cygpKQogICAgZGF5cy5zb3J0KCkKICAgIGF0dHJpYnV0ZXMgPSBkYXRhWyIxIl0ua2V5cygpICAjIGdldCB0aGUgZmlyc3QgZW50cnkKICAgIGF0dHJpYnV0ZV9yb3dzID0ge30KICAgIGF0dHJpYnV0ZV9yb3dzWyJkYXkiXSA9IGRheXMKICAgIGZvciBhdHRyaWJ1dGUgaW4gYXR0cmlidXRlczoKICAgICAgICBhdHRyaWJ1dGVfcm93c1thdHRyaWJ1dGVdID0gW10KICAgIGZvciBkYXkgaW4gZGF5czoKICAgICAgICBmb3IgYXR0cmlidXRlIGluIGRhdGFbZGF5XToKICAgICAgICAgICAgYXR0cmlidXRlX3Jvd3NbYXR0cmlidXRlXS5hcHBlbmQoZGF0YVtkYXldW2F0dHJpYnV0ZV0pCgogICAgIyBUT0RPOiB3aHkgaXMgdGhlIG9yZGVyIGludmVydGVkPwogICAgZGF5cy5yZXZlcnNlKCkKICAgIGF0dHJpYnV0ZV9yb3dzWyJkYXkiXSA9IGRheXMKCiAgICAjIHdyaXRpbmcgc3RlcAogICAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3cnLCBuZXdsaW5lPScnKSBhcyBjc3ZmaWxlOgogICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoY3N2ZmlsZSwgZGVsaW1pdGVyPScsJykKICAgICAgICBmb3Iga2V5IGluIGF0dHJpYnV0ZV9yb3dzOgogICAgICAgICAgICB3cml0ZXIud3JpdGVyb3coW2tleV0gKyBhdHRyaWJ1dGVfcm93c1trZXldKQoKICAgIHBhc3MKCgpkZWYgcHJlZGljdF9zbGVlcCh1c2VyX2hpc3RvcnksIG5ld19kYXRhLCB0aW1lX2ZvcmVjYXN0PU5vbmUpOgogICAgIiIiCiAgICBVTi1VU0VEIEFQSSAtIFdpbGwgbGlrZWx5IGJlIHJlbW92ZWQsIGZvcmVjYXN0LgogICAgR2l2ZW4gdGhlIHVzZXIncyBoaXN0b3JpYyBzbGVlcCBkYXRhIGFuZCB0aGUgbmV3LCB2b2x1bnRhcmlseSBwcm92aWRlZAogICAgZGF0YSwgZ2VuZXJhdGUgYSBuZXcgZm9yZWNhc3QgZm9yIHRoZSB1c2VyJ3Mgc2xlZXAuCgogICAgOnBhcmFtIHVzZXJfaGlzdG9yeTogaGlzdG9yaWMgdXNlciBzbGVlcCBkYXRhCiAgICA6cGFyYW0gbmV3X2RhdGE6IG5ldyBkYXRhIHByb3ZpZGVkIGluIHRoaXMgcnVuIG9mICJwcmVkaWN0X3NsZWVwIgogICAgOnBhcmFtICoqa3dhcmdzOgogICAgICAgIHRpbWVfZm9yZWNhc3Q6IHRoZSBsZW5ndGggb2YgdGhlIGZvcmVjYXN0IGlzIGEgbWF4IG9mIHNldmVuIGRheXMuCiAgICAgICAgSWYgdGltZV9mb3JlY2FzdCBpcyBwcm92aWRlZCwgdGhpcyB2YWx1ZSBvdmVycmlkZXMgdGhlIGZvcmVjYXN0IGxlbmd0aAogICAgICAgICh1cCB0byBhIG1heCBvZiBzZXZlbiBkYXlzKQogICAgOnJldHVybjogdGhlIHNsZWVwX2ZvcmVjYXN0CiAgICAiIiIKICAgIHByaW50KCJXQVJOSU5HOiBUaGlzIEFQSSBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBtYXkgZ28gb3V0IG9mIHVzZSFcbiIKICAgICAgICAgICJQbGVhc2UgdXNlIHNsZWVwX3N0YXRzLmZvcmVjYXN0LnJ1bl9mb3JlY2FzdCgpIikKICAgIGZvcmVjYXN0X2xlbmd0aCA9IGxlbihuZXdfZGF0YSkKICAgIGlmIHRpbWVfZm9yZWNhc3Q6CiAgICAgICAgZm9yZWNhc3RfbGVuZ3RoID0gdGltZV9mb3JlY2FzdAogICAgZm9yZWNhc3RfbGVuZ3RoID0gbWluKGZvcmVjYXN0X2xlbmd0aCwgNykKCiAgICAjIGdlbmVyYXRlIGEgcmVsYXRpdmUgZm9yZWNhc3RpbmcgaG9yaXpvbgogICAgcmZoID0gbnAuYXJhbmdlKGZvcmVjYXN0X2xlbmd0aCkgKyAxCgogICAgIyBTcGVjaWZ5IHRoZSBtb2RlbAogICAgZm9yZWNhc3RlciA9IHNrLkV4cG9uZW50aWFsU21vb3RoaW5nKHRyZW5kPSJhZGQiLCBzZWFzb25hbD0ibXVsdGlwbGljYXRpdmUiLCBzcD03KQoKICAgICMgZml0IGl0IHRvIHRoZSB1c2VyX2hpc3RvcnkKICAgIGZvcmVjYXN0ZXIuZml0KHVzZXJfaGlzdG9yeSkKCiAgICAjIGdlbmVyYXRlIGEgcHJlZGljdGlvbgogICAgc2xlZXBfZm9yZWNhc3QgPSBmb3JlY2FzdGVyLnByZWRpY3QocmZoKQoKICAgIHJldHVybiBzbGVlcF9mb3JlY2FzdAoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIG1haW4oKToKICAgICIiIgogICAgRGVwcmVjYXRlZCAtIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIHRlc3RzIHBhc3Mgb24gX19tYWluX18ucHkncyBmdW5jdGlvbnMKICAgIDpyZXR1cm46Cjx8ZmltX2VuZHw+"]
["6b6637238ce26e55faa4b2921cb87d921e2bfdd1-2","6b6637238ce26e55faa4b2921cb87d921e2bfdd1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNzdgppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgb3MKaW1wb3J0IHNrdGltZS5mb3JlY2FzdGluZy5hbGwgYXMgc2sKCgpkZWYgZ2V0X29zX2ZpbGVuYW1lKGZpbGVfbmFtZSwgKmFyZ3MpOgogICAgIiIiCiAgICAgICAgVU4tVVNFRCBBUEkgLSBTdGlsbCBmaWd1cmluZyBvdXQgd2hhdCBpdCB3aWxsIGJlIHVzZWQgZm9yLgogICAgOnBhcmFtIGZpbGVfbmFtZTogRmlsZSBuYW1lLCBpbmNsdWRpbmcgZXh0ZW5zaW9uLCB0byB0aGUgZmlsZSB5b3Ugd2lzaCB0byB1c2UuCiAgICA6cGFyYW0gYXJnczogc2VxdWVudGlhbCwgY29udGludWFsIGluLWRlcHRoIGZvbGRlcnMgdW50aWwgd2UgZ2V0IHRvIHlvdXIgZmlsZS4KICAgIDpyZXR1cm46CiAgICAiIiIKICAgIHByaW50KCJXQVJOSU5HOiBUaGlzIEFQSSBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBtYXkgZ28gb3V0IG9mIHVzZSEiKQogICAgaWYgb3MubmFtZSA9PSAibnQiOgogICAgICAgIGludGVybWVkaWF0ZV9kaXJzID0gIiIKICAgICAgICBmb3IgYXJnIGluIGFyZ3M6CiAgICAgICAgICAgIGludGVybWVkaWF0ZV9kaXJzID0gaW50ZXJtZWRpYXRlX2RpcnMgKyBhcmcgKyAiXFwiCiAgICAgICAgZmlsZV9wYXRoX29zID0gb3MuZ2V0Y3dkKCkgKyAiXFwiICsgaW50ZXJtZWRpYXRlX2RpcnMgKyBmaWxlX25hbWUKCiAgICBlbGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKICAgICAgICBpbnRlcm1lZGlhdGVfZGlycyA9ICIiCiAgICAgICAgZm9yIGFyZyBpbiBhcmdzOgogICAgICAgICAgICBpbnRlcm1lZGlhdGVfZGlycyA9IGludGVybWVkaWF0ZV9kaXJzICsgYXJnICsgIi8iCiAgICAgICAgZmlsZV9wYXRoX29zID0gb3MuZ2V0Y3dkKCkgKyAiLyIgKyBpbnRlcm1lZGlhdGVfZGlycyArIGZpbGVfbmFtZQogICAgZWxzZToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJVbnN1cHBvcnRlZCBPcGVyYXRpbmcgU3lzdGVtLiIpCgogICAgcmV0dXJuIGZpbGVfcGF0aF9vcwoKCmRlZiBwYXJzZXJfY3N2X3VzZXIoZmlsZV9wYXRoKToKICAgICIiIgogICAgVU4tVVNFRCBBUEkgLSBXaWxsIGxpa2VseSBiZSByZW1vdmVkLCBwYW5kYXMgZG9lcyBhIGJldHRlciBqb2IuCiAgICBQYXJzZSB0aGUgY3N2IGluIHRoZSAidXNlciIgZm9ybWF0IGFuZCByZXR1cm4gaXRzIGRpY3Rpb25hcnkgcmVwcmVzZW50YXRpb24uCgogICAgOnBhcmFtIGZpbGVfcGF0aDogRnVsbHkgc3BlY2lmaWVkIGZpbGVfcGF0aC4KICAgIDpyZXR1cm46IGRpY3Rpb25hcnkgcmVwcmVzZW50YXRpb24gb2YgZmlsZSB0aGF0IGZpbGVfcGF0aCBwb2ludHMgdG8uCiAgICAiIiIKCiAgICBwcmludCgiV0FSTklORzogVGhpcyBBUEkgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgbWF5IGdvIG91dCBvZiB1c2UhXG4iCiAgICAgICAgICAiUGxlYXNlIHVzZSBzbGVlcF9kYXRhLmZvcmVjYXN0LnJlYWRfZGF0YSgpIikKICAgIHdpdGggb3BlbihmaWxlX3BhdGgsIG5ld2xpbmU9JycpIGFzIGNzdmZpbGU6CiAgICAgICAgcmVhZGVyID0gY3N2LnJlYWRlcihjc3ZmaWxlLCBkZWxpbWl0ZXI9JywnKQogICAgICAgIHBhcnNlZF9kYXRhID0ge30KICAgICAgICBmb3Igcm93IGluIHJlYWRlcjoKICAgICAgICAgICAgaWYgcm93WzBdID09ICJkYXkiOgogICAgICAgICAgICAgICAgZm9yIGVudHJ5IGluIHJvd1sxOjpdOgogICAgICAgICAgICAgICAgICAgIHBhcnNlZF9kYXRhW3N0cihlbnRyeSldID0ge30KICAgICAgICAgICAgZWxpZiByb3dbMF0gPT0gInN0YXJ0IHRpbWUiOgogICAgICAgICAgICAgICAgZm9yIGVudHJ5IGluIHJhbmdlKDEsIGxlbihyb3cpKToKICAgICAgICAgICAgICAgICAgICBwYXJzZWRfZGF0YVtzdHIoZW50cnkpXVsic3RhcnRfdGltZSJdID0gc3RyKHJvd1tlbnRyeV0pCiAgICAgICAgICAgIGVsaWYgcm93WzBdID09ICJlbmQgdGltZSI6CiAgICAgICAgICAgICAgICBmb3IgZW50cnkgaW4gcmFuZ2UoMSwgbGVuKHJvdykpOgogICAgICAgICAgICAgICAgICAgIHBhcnNlZF9kYXRhW3N0cihlbnRyeSldWyJlbmRfdGltZSJdID0gc3RyKHJvd1tlbnRyeV0pCiAgICAgICAgICAgIGVsaWYgcm93WzBdID09ICJxdWFsaXR5IG9mIHNsZWVwICgwIC0gMTApIjoKICAgICAgICAgICAgICAgIGZvciBlbnRyeSBpbiByYW5nZSgxLCBsZW4ocm93KSk6CiAgICAgICAgICAgICAgICAgICAgcGFyc2VkX2RhdGFbc3RyKGVudHJ5KV1bInF1YWxpdHlfb2Zfc2xlZXAiXSA9IGludChyb3dbZW50cnldKQoKICAgIHJldHVybiBwYXJzZWRfZGF0YSwgbGVuKHBhcnNlZF9kYXRhKQoKCmRlZiB3cml0ZV9jc3ZfdXNlcihmaWxlX3BhdGgsIGRhdGEpOgogICAgIiIiCiAgICBVTi1VU0VEIEFQSSAtIFdpbGwgbGlrZWx5IGJlIHJlbW92ZWQsIHBhbmRhcyBkb2VzIGEgYmV0dGVyIGpvYi4KICAgIFdyaXRlcyB0aGUgZGljdGlvbmFyeSBzcGVjaWZpZWQgYnkgZGF0YSB0byB0aGUgZmlsZSBjb250YWluZWQgaW4gZmlsZV9wYXRoCgogICAgOnBhcmFtIGZpbGVfcGF0aDogZnVsbHkgc3BlY2lmaWVkIGZpbGUgcGF0aC4KICAgIDpwYXJhbSBkYXRhOiBkaWN0aW9uYXJ5IHRvIGJlIHdyaXR0ZW4gdG8gZmlsZSBwYXRoLgogICAgOnJldHVybjogTm9uZS4KICAgICIiIgogICAgcHJpbnQoIldBUk5JTkc6IFRoaXMgQVBJIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIG1heSBnbyBvdXQgb2YgdXNlIVxuIgogICAgICAgICAgIlBsZWFzZSB1c2Ugc2xlZXBfc3RhdHMuZm9yZWNhc3Quc2F2ZV9kYXRhKCkiKQoKICAgIGRheXMgPSBsaXN0KGRhdGEua2V5cygpKQogICAgZGF5cy5zb3J0KCkKICAgIGF0dHJpYnV0ZXMgPSBkYXRhWyIxIl0ua2V5cygpICAjIGdldCB0aGUgZmlyc3QgZW50cnkKICAgIGF0dHJpYnV0ZV9yb3dzID0ge30KICAgIGF0dHJpYnV0ZV9yb3dzWyJkYXkiXSA9IGRheXMKICAgIGZvciBhdHRyaWJ1dGUgaW4gYXR0cmlidXRlczoKICAgICAgICBhdHRyaWJ1dGVfcm93c1thdHRyaWJ1dGVdID0gW10KICAgIGZvciBkYXkgaW4gZGF5czoKICAgICAgICBmb3IgYXR0cmlidXRlIGluIGRhdGFbZGF5XToKICAgICAgICAgICAgYXR0cmlidXRlX3Jvd3NbYXR0cmlidXRlXS5hcHBlbmQoZGF0YVtkYXldW2F0dHJpYnV0ZV0pCgogICAgIyBUT0RPOiB3aHkgaXMgdGhlIG9yZGVyIGludmVydGVkPwogICAgZGF5cy5yZXZlcnNlKCkKICAgIGF0dHJpYnV0ZV9yb3dzWyJkYXkiXSA9IGRheXMKCiAgICAjIHdyaXRpbmcgc3RlcAogICAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3cnLCBuZXdsaW5lPScnKSBhcyBjc3ZmaWxlOgogICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoY3N2ZmlsZSwgZGVsaW1pdGVyPScsJykKICAgICAgICBmb3Iga2V5IGluIGF0dHJpYnV0ZV9yb3dzOgogICAgICAgICAgICB3cml0ZXIud3JpdGVyb3coW2tleV0gKyBhdHRyaWJ1dGVfcm93c1trZXldKQoKICAgIHBhc3MKCgpkZWYgcHJlZGljdF9zbGVlcCh1c2VyX2hpc3RvcnksIG5ld19kYXRhLCB0aW1lX2ZvcmVjYXN0PU5vbmUpOgogICAgIiIiCiAgICBVTi1VU0VEIEFQSSAtIFdpbGwgbGlrZWx5IGJlIHJlbW92ZWQsIGZvcmVjYXN0LgogICAgR2l2ZW4gdGhlIHVzZXIncyBoaXN0b3JpYyBzbGVlcCBkYXRhIGFuZCB0aGUgbmV3LCB2b2x1bnRhcmlseSBwcm92aWRlZAogICAgZGF0YSwgZ2VuZXJhdGUgYSBuZXcgZm9yZWNhc3QgZm9yIHRoZSB1c2VyJ3Mgc2xlZXAuCgogICAgOnBhcmFtIHVzZXJfaGlzdG9yeTogaGlzdG9yaWMgdXNlciBzbGVlcCBkYXRhCiAgICA6cGFyYW0gbmV3X2RhdGE6IG5ldyBkYXRhIHByb3ZpZGVkIGluIHRoaXMgcnVuIG9mICJwcmVkaWN0X3NsZWVwIgogICAgOnBhcmFtICoqa3dhcmdzOgogICAgICAgIHRpbWVfZm9yZWNhc3Q6IHRoZSBsZW5ndGggb2YgdGhlIGZvcmVjYXN0IGlzIGEgbWF4IG9mIHNldmVuIGRheXMuCiAgICAgICAgSWYgdGltZV9mb3JlY2FzdCBpcyBwcm92aWRlZCwgdGhpcyB2YWx1ZSBvdmVycmlkZXMgdGhlIGZvcmVjYXN0IGxlbmd0aAogICAgICAgICh1cCB0byBhIG1heCBvZiBzZXZlbiBkYXlzKQogICAgOnJldHVybjogdGhlIHNsZWVwX2ZvcmVjYXN0Cjx8ZmltX2hvbGV8PgogICAgaWYgdGltZV9mb3JlY2FzdDoKICAgICAgICBmb3JlY2FzdF9sZW5ndGggPSB0aW1lX2ZvcmVjYXN0CiAgICBmb3JlY2FzdF9sZW5ndGggPSBtaW4oZm9yZWNhc3RfbGVuZ3RoLCA3KQoKICAgICMgZ2VuZXJhdGUgYSByZWxhdGl2ZSBmb3JlY2FzdGluZyBob3Jpem9uCiAgICByZmggPSBucC5hcmFuZ2UoZm9yZWNhc3RfbGVuZ3RoKSArIDEKCiAgICAjIFNwZWNpZnkgdGhlIG1vZGVsCiAgICBmb3JlY2FzdGVyID0gc2suRXhwb25lbnRpYWxTbW9vdGhpbmcodHJlbmQ9ImFkZCIsIHNlYXNvbmFsPSJtdWx0aXBsaWNhdGl2ZSIsIHNwPTcpCgogICAgIyBmaXQgaXQgdG8gdGhlIHVzZXJfaGlzdG9yeQogICAgZm9yZWNhc3Rlci5maXQodXNlcl9oaXN0b3J5KQoKICAgICMgZ2VuZXJhdGUgYSBwcmVkaWN0aW9uCiAgICBzbGVlcF9mb3JlY2FzdCA9IGZvcmVjYXN0ZXIucHJlZGljdChyZmgpCgogICAgcmV0dXJuIHNsZWVwX2ZvcmVjYXN0CgoKZGVmIG1haW4oKToKICAgICIiIgogICAgRGVwcmVjYXRlZCAtIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIHRlc3RzIHBhc3Mgb24gX19tYWluX18ucHkncyBmdW5jdGlvbnMKICAgIDpyZXR1cm46CiAgICAiIiIKICAgICMgUnVuIHRocm91Z2ggdGhlIHVzYWdlIG9mIHNsZWVwX3N0YXRzCiAgICBmaWxlX25hbWUgPSBpbnB1dCgiRW50ZXIgdGhlIG5hbWUgb2YgeW91ciBzbGVlcCBjc3YgZmlsZTogIikKICAgIHVzZXJfZW50cmllcywgbnVtX2VudHJpZXMgPSBwYXJzZXJfY3N2X3VzZXIoZmlsZV9uYW1lKQogICAgIyBMb2FkIHRoZSB1c2VycyBwcmlvciBkYXRhCiAgICBzbGVlcEFycmF5LCB0aW1lSW5CZWRBcnJheSA9IGRhdGFMb2FkZXIoKQoKICAgIGZvcmVjYXN0ID0gcHJlZGljdF9zbGVlcChzbGVlcEFycmF5LCB1c2VyX2VudHJpZXMsIG51bV9lbnRyaWVzKQogICAgcHJpbnQoZm9yZWNhc3QpCiAgICByZXR1cm4gZm9yZWNhc3QKCgpkZWYgZGF0YUxvYWRlcigpOgogICAgcHJpbnQoIldBUk5JTkc6IFRoaXMgQVBJIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIG1heSBnbyBvdXQgb2YgdXNlIVxuIgogICAgICAgICAgIlRoZSBzY2hlbWEgcmVmZXJyZWQgdG8gYnkgdGhpcyBBUEkgaXMgbm8gbG9uZ2VyIGluIHVzZS4iKQogICAgZGYgPSBwZC5yZWFkX2NzdigiZGF0YS9zbGVlcGRhdGEuY3N2IikgICMgbWF5IG5lZWQgdG8gYWRkIG9zLmdldGN3ZCgpIGlmIG9uIHdpbmRvd3MgbWFjaGluZQogICAgIyBEcm9wIGV4dHJhbmVvdXMgY29sdW1ucyBub3QgdXNlZCBpbiBhbmFseXNpcwogICAgZGYgPSBkZi5kcm9wKCdIZWFydCByYXRlJywgMSkKICAgIGRmID0gZGYuZHJvcCgnQWN0aXZpdHkgKHN0ZXBzKScsIDEpCiAgICBkZiA9IGRmLmRyb3AoJ1NsZWVwIE5vdGVzJywgMSkKICAgIGRmID0gZGYuZHJvcCgnV2FrZSB1cCcsIDEpCiAgICBkZiA9IGRmLmRyb3AoJ0VuZCcsIDEpCiAgICAjIEVkaXQgYmVsb3cgZGF0YSB0byBmaXQgYXBwcm9wcmlhdGUgY29uc3RyYWludHMKICAgIGRmWydTbGVlcCBxdWFsaXR5J10gPSBkZlsnU2xlZXAgcXVhbGl0eSddLmFwcGx5KHRydW5jYXRlX3BlcmNlbnRhZ2VfdG9fcmFuZ2UpCiAgICBkZlsnVGltZSBpbiBiZWQnXSA9IGRmWydUaW1lIGluIGJlZCddLmFwcGx5KHRpbWVfdG9fbWludXRlcykKICAgIGRmWydTdGFydCddID0gZGZbJ1N0YXJ0J10uYXBwbHkoZXh0cmFjdF9kYXRlKQogICAgZGYgPSBkZi5yZW5hbWUoY29sdW1ucz17J1N0YXJ0JzogJ0RhdGUnfSkKCiAgICAjIE9idGFpbiB1c2VyIGRhdGEKICAgIHVzZXJfZGYgPSBwZC5yZWFkX2NzdigidGVzdC90ZXN0X2lucHV0cy9zYW1wbGVfN19kYXlzLmNzdiIpICAjIG1heSBuZWVkIHRvIGFkZCBvcy5nZXRjd2QoKSBpZiBvbiB3aW5kb3dzIG1hY2hpbmUKICAgIHVzZXJfZGZbIlRpbWUgaW4gYmVkIl0gPSA2MCAqIHVzZXJfZGZbIlRpbWUgaW4gYmVkIl0KCiAgICAjIEFwcGVuZCB1c2VyIGRhdGEgdG8gdGVzdAogICAgcmVzdWx0ID0gZGYuYXBwZW5kKHVzZXJfZGYpCiAgICBzbGVlcEFycmF5ID0gcmVzdWx0Lmlsb2NbOiwgMDoyXQogICAgdGltZUluQmVkQXJyYXkgPSByZXN1bHRbWydEYXRlJywgJ1RpbWUgaW4gYmVkJ11dCiAgICBwcmludChzbGVlcEFycmF5KQogICAgcHJpbnQodGltZUluQmVkQXJyYXkpCiAgICByZXR1cm4gc2xlZXBBcnJheSwgdGltZUluQmVkQXJyYXkKCgojIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1vZGlmeWluZyB0aGUgZGF0YSB0byBmaXQgdGhlIGNvcnJlY3QgZm9ybWF0CmRlZiB0cnVuY2F0ZV9wZXJjZW50YWdlX3RvX3JhbmdlKHgpOgogICAgeCA9IHguc3RyaXAoJyUnKQogICAgeCA9IGludCh4KSAvIDEwLjAKICAgIHJldHVybiB4CgoKZGVmIHRpbWVfdG9fbWludXRlcyh4KToKICAgIHMgPSB4LnNwbGl0KCI6IikKICAgIHMgPSBpbnQoc1swXSkgKiA2MCArIGludChzWzFdKQogICAgcmV0dXJuIHMKCgpkZWYgZXh0cmFjdF9kYXRlKHgpOgogICAgcyA9IHguc3BsaXQoIiAiKQogICAgcmV0dXJuIHNbMF0KCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIiIiIFJ1biB0aHJvdWdoIHRoZSB1c2FnZSBvZiBzbGVlcF9zdGF0cyIiIgogICAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAiIiIKICAgIHByaW50KCJXQVJOSU5HOiBUaGlzIEFQSSBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBtYXkgZ28gb3V0IG9mIHVzZSFcbiIKICAgICAgICAgICJQbGVhc2UgdXNlIHNsZWVwX3N0YXRzLmZvcmVjYXN0LnJ1bl9mb3JlY2FzdCgpIikKICAgIGZvcmVjYXN0X2xlbmd0aCA9IGxlbihuZXdfZGF0YSkKPHxmaW1fZW5kfD4="]
["6b6637238ce26e55faa4b2921cb87d921e2bfdd1-3","6b6637238ce26e55faa4b2921cb87d921e2bfdd1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNzdgppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgb3MKaW1wb3J0IHNrdGltZS5mb3JlY2FzdGluZy5hbGwgYXMgc2sKCgpkZWYgZ2V0X29zX2ZpbGVuYW1lKGZpbGVfbmFtZSwgKmFyZ3MpOgogICAgIiIiCiAgICAgICAgVU4tVVNFRCBBUEkgLSBTdGlsbCBmaWd1cmluZyBvdXQgd2hhdCBpdCB3aWxsIGJlIHVzZWQgZm9yLgogICAgOnBhcmFtIGZpbGVfbmFtZTogRmlsZSBuYW1lLCBpbmNsdWRpbmcgZXh0ZW5zaW9uLCB0byB0aGUgZmlsZSB5b3Ugd2lzaCB0byB1c2UuCiAgICA6cGFyYW0gYXJnczogc2VxdWVudGlhbCwgY29udGludWFsIGluLWRlcHRoIGZvbGRlcnMgdW50aWwgd2UgZ2V0IHRvIHlvdXIgZmlsZS4KICAgIDpyZXR1cm46CiAgICAiIiIKICAgIHByaW50KCJXQVJOSU5HOiBUaGlzIEFQSSBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBtYXkgZ28gb3V0IG9mIHVzZSEiKQogICAgaWYgb3MubmFtZSA9PSAibnQiOgogICAgICAgIGludGVybWVkaWF0ZV9kaXJzID0gIiIKICAgICAgICBmb3IgYXJnIGluIGFyZ3M6CiAgICAgICAgICAgIGludGVybWVkaWF0ZV9kaXJzID0gaW50ZXJtZWRpYXRlX2RpcnMgKyBhcmcgKyAiXFwiCiAgICAgICAgZmlsZV9wYXRoX29zID0gb3MuZ2V0Y3dkKCkgKyAiXFwiICsgaW50ZXJtZWRpYXRlX2RpcnMgKyBmaWxlX25hbWUKCiAgICBlbGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKICAgICAgICBpbnRlcm1lZGlhdGVfZGlycyA9ICIiCiAgICAgICAgZm9yIGFyZyBpbiBhcmdzOgogICAgICAgICAgICBpbnRlcm1lZGlhdGVfZGlycyA9IGludGVybWVkaWF0ZV9kaXJzICsgYXJnICsgIi8iCiAgICAgICAgZmlsZV9wYXRoX29zID0gb3MuZ2V0Y3dkKCkgKyAiLyIgKyBpbnRlcm1lZGlhdGVfZGlycyArIGZpbGVfbmFtZQogICAgZWxzZToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJVbnN1cHBvcnRlZCBPcGVyYXRpbmcgU3lzdGVtLiIpCgogICAgcmV0dXJuIGZpbGVfcGF0aF9vcwoKCmRlZiBwYXJzZXJfY3N2X3VzZXIoZmlsZV9wYXRoKToKICAgICIiIgogICAgVU4tVVNFRCBBUEkgLSBXaWxsIGxpa2VseSBiZSByZW1vdmVkLCBwYW5kYXMgZG9lcyBhIGJldHRlciBqb2IuCiAgICBQYXJzZSB0aGUgY3N2IGluIHRoZSAidXNlciIgZm9ybWF0IGFuZCByZXR1cm4gaXRzIGRpY3Rpb25hcnkgcmVwcmVzZW50YXRpb24uCgogICAgOnBhcmFtIGZpbGVfcGF0aDogRnVsbHkgc3BlY2lmaWVkIGZpbGVfcGF0aC4KICAgIDpyZXR1cm46IGRpY3Rpb25hcnkgcmVwcmVzZW50YXRpb24gb2YgZmlsZSB0aGF0IGZpbGVfcGF0aCBwb2ludHMgdG8uCiAgICAiIiIKCiAgICBwcmludCgiV0FSTklORzogVGhpcyBBUEkgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgbWF5IGdvIG91dCBvZiB1c2UhXG4iCiAgICAgICAgICAiUGxlYXNlIHVzZSBzbGVlcF9kYXRhLmZvcmVjYXN0LnJlYWRfZGF0YSgpIikKICAgIHdpdGggb3BlbihmaWxlX3BhdGgsIG5ld2xpbmU9JycpIGFzIGNzdmZpbGU6CiAgICAgICAgcmVhZGVyID0gY3N2LnJlYWRlcihjc3ZmaWxlLCBkZWxpbWl0ZXI9JywnKQogICAgICAgIHBhcnNlZF9kYXRhID0ge30KICAgICAgICBmb3Igcm93IGluIHJlYWRlcjoKICAgICAgICAgICAgaWYgcm93WzBdID09ICJkYXkiOgogICAgICAgICAgICAgICAgZm9yIGVudHJ5IGluIHJvd1sxOjpdOgogICAgICAgICAgICAgICAgICAgIHBhcnNlZF9kYXRhW3N0cihlbnRyeSldID0ge30KICAgICAgICAgICAgZWxpZiByb3dbMF0gPT0gInN0YXJ0IHRpbWUiOgogICAgICAgICAgICAgICAgZm9yIGVudHJ5IGluIHJhbmdlKDEsIGxlbihyb3cpKToKICAgICAgICAgICAgICAgICAgICBwYXJzZWRfZGF0YVtzdHIoZW50cnkpXVsic3RhcnRfdGltZSJdID0gc3RyKHJvd1tlbnRyeV0pCiAgICAgICAgICAgIGVsaWYgcm93WzBdID09ICJlbmQgdGltZSI6CiAgICAgICAgICAgICAgICBmb3IgZW50cnkgaW4gcmFuZ2UoMSwgbGVuKHJvdykpOgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgZWxpZiByb3dbMF0gPT0gInF1YWxpdHkgb2Ygc2xlZXAgKDAgLSAxMCkiOgogICAgICAgICAgICAgICAgZm9yIGVudHJ5IGluIHJhbmdlKDEsIGxlbihyb3cpKToKICAgICAgICAgICAgICAgICAgICBwYXJzZWRfZGF0YVtzdHIoZW50cnkpXVsicXVhbGl0eV9vZl9zbGVlcCJdID0gaW50KHJvd1tlbnRyeV0pCgogICAgcmV0dXJuIHBhcnNlZF9kYXRhLCBsZW4ocGFyc2VkX2RhdGEpCgoKZGVmIHdyaXRlX2Nzdl91c2VyKGZpbGVfcGF0aCwgZGF0YSk6CiAgICAiIiIKICAgIFVOLVVTRUQgQVBJIC0gV2lsbCBsaWtlbHkgYmUgcmVtb3ZlZCwgcGFuZGFzIGRvZXMgYSBiZXR0ZXIgam9iLgogICAgV3JpdGVzIHRoZSBkaWN0aW9uYXJ5IHNwZWNpZmllZCBieSBkYXRhIHRvIHRoZSBmaWxlIGNvbnRhaW5lZCBpbiBmaWxlX3BhdGgKCiAgICA6cGFyYW0gZmlsZV9wYXRoOiBmdWxseSBzcGVjaWZpZWQgZmlsZSBwYXRoLgogICAgOnBhcmFtIGRhdGE6IGRpY3Rpb25hcnkgdG8gYmUgd3JpdHRlbiB0byBmaWxlIHBhdGguCiAgICA6cmV0dXJuOiBOb25lLgogICAgIiIiCiAgICBwcmludCgiV0FSTklORzogVGhpcyBBUEkgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgbWF5IGdvIG91dCBvZiB1c2UhXG4iCiAgICAgICAgICAiUGxlYXNlIHVzZSBzbGVlcF9zdGF0cy5mb3JlY2FzdC5zYXZlX2RhdGEoKSIpCgogICAgZGF5cyA9IGxpc3QoZGF0YS5rZXlzKCkpCiAgICBkYXlzLnNvcnQoKQogICAgYXR0cmlidXRlcyA9IGRhdGFbIjEiXS5rZXlzKCkgICMgZ2V0IHRoZSBmaXJzdCBlbnRyeQogICAgYXR0cmlidXRlX3Jvd3MgPSB7fQogICAgYXR0cmlidXRlX3Jvd3NbImRheSJdID0gZGF5cwogICAgZm9yIGF0dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzOgogICAgICAgIGF0dHJpYnV0ZV9yb3dzW2F0dHJpYnV0ZV0gPSBbXQogICAgZm9yIGRheSBpbiBkYXlzOgogICAgICAgIGZvciBhdHRyaWJ1dGUgaW4gZGF0YVtkYXldOgogICAgICAgICAgICBhdHRyaWJ1dGVfcm93c1thdHRyaWJ1dGVdLmFwcGVuZChkYXRhW2RheV1bYXR0cmlidXRlXSkKCiAgICAjIFRPRE86IHdoeSBpcyB0aGUgb3JkZXIgaW52ZXJ0ZWQ/CiAgICBkYXlzLnJldmVyc2UoKQogICAgYXR0cmlidXRlX3Jvd3NbImRheSJdID0gZGF5cwoKICAgICMgd3JpdGluZyBzdGVwCiAgICB3aXRoIG9wZW4oZmlsZV9wYXRoLCAndycsIG5ld2xpbmU9JycpIGFzIGNzdmZpbGU6CiAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihjc3ZmaWxlLCBkZWxpbWl0ZXI9JywnKQogICAgICAgIGZvciBrZXkgaW4gYXR0cmlidXRlX3Jvd3M6CiAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhba2V5XSArIGF0dHJpYnV0ZV9yb3dzW2tleV0pCgogICAgcGFzcwoKCmRlZiBwcmVkaWN0X3NsZWVwKHVzZXJfaGlzdG9yeSwgbmV3X2RhdGEsIHRpbWVfZm9yZWNhc3Q9Tm9uZSk6CiAgICAiIiIKICAgIFVOLVVTRUQgQVBJIC0gV2lsbCBsaWtlbHkgYmUgcmVtb3ZlZCwgZm9yZWNhc3QuCiAgICBHaXZlbiB0aGUgdXNlcidzIGhpc3RvcmljIHNsZWVwIGRhdGEgYW5kIHRoZSBuZXcsIHZvbHVudGFyaWx5IHByb3ZpZGVkCiAgICBkYXRhLCBnZW5lcmF0ZSBhIG5ldyBmb3JlY2FzdCBmb3IgdGhlIHVzZXIncyBzbGVlcC4KCiAgICA6cGFyYW0gdXNlcl9oaXN0b3J5OiBoaXN0b3JpYyB1c2VyIHNsZWVwIGRhdGEKICAgIDpwYXJhbSBuZXdfZGF0YTogbmV3IGRhdGEgcHJvdmlkZWQgaW4gdGhpcyBydW4gb2YgInByZWRpY3Rfc2xlZXAiCiAgICA6cGFyYW0gKiprd2FyZ3M6CiAgICAgICAgdGltZV9mb3JlY2FzdDogdGhlIGxlbmd0aCBvZiB0aGUgZm9yZWNhc3QgaXMgYSBtYXggb2Ygc2V2ZW4gZGF5cy4KICAgICAgICBJZiB0aW1lX2ZvcmVjYXN0IGlzIHByb3ZpZGVkLCB0aGlzIHZhbHVlIG92ZXJyaWRlcyB0aGUgZm9yZWNhc3QgbGVuZ3RoCiAgICAgICAgKHVwIHRvIGEgbWF4IG9mIHNldmVuIGRheXMpCiAgICA6cmV0dXJuOiB0aGUgc2xlZXBfZm9yZWNhc3QKICAgICIiIgogICAgcHJpbnQoIldBUk5JTkc6IFRoaXMgQVBJIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIG1heSBnbyBvdXQgb2YgdXNlIVxuIgogICAgICAgICAgIlBsZWFzZSB1c2Ugc2xlZXBfc3RhdHMuZm9yZWNhc3QucnVuX2ZvcmVjYXN0KCkiKQogICAgZm9yZWNhc3RfbGVuZ3RoID0gbGVuKG5ld19kYXRhKQogICAgaWYgdGltZV9mb3JlY2FzdDoKICAgICAgICBmb3JlY2FzdF9sZW5ndGggPSB0aW1lX2ZvcmVjYXN0CiAgICBmb3JlY2FzdF9sZW5ndGggPSBtaW4oZm9yZWNhc3RfbGVuZ3RoLCA3KQoKICAgICMgZ2VuZXJhdGUgYSByZWxhdGl2ZSBmb3JlY2FzdGluZyBob3Jpem9uCiAgICByZmggPSBucC5hcmFuZ2UoZm9yZWNhc3RfbGVuZ3RoKSArIDEKCiAgICAjIFNwZWNpZnkgdGhlIG1vZGVsCiAgICBmb3JlY2FzdGVyID0gc2suRXhwb25lbnRpYWxTbW9vdGhpbmcodHJlbmQ9ImFkZCIsIHNlYXNvbmFsPSJtdWx0aXBsaWNhdGl2ZSIsIHNwPTcpCgogICAgIyBmaXQgaXQgdG8gdGhlIHVzZXJfaGlzdG9yeQogICAgZm9yZWNhc3Rlci5maXQodXNlcl9oaXN0b3J5KQoKICAgICMgZ2VuZXJhdGUgYSBwcmVkaWN0aW9uCiAgICBzbGVlcF9mb3JlY2FzdCA9IGZvcmVjYXN0ZXIucHJlZGljdChyZmgpCgogICAgcmV0dXJuIHNsZWVwX2ZvcmVjYXN0CgoKZGVmIG1haW4oKToKICAgICIiIgogICAgRGVwcmVjYXRlZCAtIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIHRlc3RzIHBhc3Mgb24gX19tYWluX18ucHkncyBmdW5jdGlvbnMKICAgIDpyZXR1cm46CiAgICAiIiIKICAgICMgUnVuIHRocm91Z2ggdGhlIHVzYWdlIG9mIHNsZWVwX3N0YXRzCiAgICBmaWxlX25hbWUgPSBpbnB1dCgiRW50ZXIgdGhlIG5hbWUgb2YgeW91ciBzbGVlcCBjc3YgZmlsZTogIikKICAgIHVzZXJfZW50cmllcywgbnVtX2VudHJpZXMgPSBwYXJzZXJfY3N2X3VzZXIoZmlsZV9uYW1lKQogICAgIyBMb2FkIHRoZSB1c2VycyBwcmlvciBkYXRhCiAgICBzbGVlcEFycmF5LCB0aW1lSW5CZWRBcnJheSA9IGRhdGFMb2FkZXIoKQoKICAgIGZvcmVjYXN0ID0gcHJlZGljdF9zbGVlcChzbGVlcEFycmF5LCB1c2VyX2VudHJpZXMsIG51bV9lbnRyaWVzKQogICAgcHJpbnQoZm9yZWNhc3QpCiAgICByZXR1cm4gZm9yZWNhc3QKCgpkZWYgZGF0YUxvYWRlcigpOgogICAgcHJpbnQoIldBUk5JTkc6IFRoaXMgQVBJIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIG1heSBnbyBvdXQgb2YgdXNlIVxuIgogICAgICAgICAgIlRoZSBzY2hlbWEgcmVmZXJyZWQgdG8gYnkgdGhpcyBBUEkgaXMgbm8gbG9uZ2VyIGluIHVzZS4iKQogICAgZGYgPSBwZC5yZWFkX2NzdigiZGF0YS9zbGVlcGRhdGEuY3N2IikgICMgbWF5IG5lZWQgdG8gYWRkIG9zLmdldGN3ZCgpIGlmIG9uIHdpbmRvd3MgbWFjaGluZQogICAgIyBEcm9wIGV4dHJhbmVvdXMgY29sdW1ucyBub3QgdXNlZCBpbiBhbmFseXNpcwogICAgZGYgPSBkZi5kcm9wKCdIZWFydCByYXRlJywgMSkKICAgIGRmID0gZGYuZHJvcCgnQWN0aXZpdHkgKHN0ZXBzKScsIDEpCiAgICBkZiA9IGRmLmRyb3AoJ1NsZWVwIE5vdGVzJywgMSkKICAgIGRmID0gZGYuZHJvcCgnV2FrZSB1cCcsIDEpCiAgICBkZiA9IGRmLmRyb3AoJ0VuZCcsIDEpCiAgICAjIEVkaXQgYmVsb3cgZGF0YSB0byBmaXQgYXBwcm9wcmlhdGUgY29uc3RyYWludHMKICAgIGRmWydTbGVlcCBxdWFsaXR5J10gPSBkZlsnU2xlZXAgcXVhbGl0eSddLmFwcGx5KHRydW5jYXRlX3BlcmNlbnRhZ2VfdG9fcmFuZ2UpCiAgICBkZlsnVGltZSBpbiBiZWQnXSA9IGRmWydUaW1lIGluIGJlZCddLmFwcGx5KHRpbWVfdG9fbWludXRlcykKICAgIGRmWydTdGFydCddID0gZGZbJ1N0YXJ0J10uYXBwbHkoZXh0cmFjdF9kYXRlKQogICAgZGYgPSBkZi5yZW5hbWUoY29sdW1ucz17J1N0YXJ0JzogJ0RhdGUnfSkKCiAgICAjIE9idGFpbiB1c2VyIGRhdGEKICAgIHVzZXJfZGYgPSBwZC5yZWFkX2NzdigidGVzdC90ZXN0X2lucHV0cy9zYW1wbGVfN19kYXlzLmNzdiIpICAjIG1heSBuZWVkIHRvIGFkZCBvcy5nZXRjd2QoKSBpZiBvbiB3aW5kb3dzIG1hY2hpbmUKICAgIHVzZXJfZGZbIlRpbWUgaW4gYmVkIl0gPSA2MCAqIHVzZXJfZGZbIlRpbWUgaW4gYmVkIl0KCiAgICAjIEFwcGVuZCB1c2VyIGRhdGEgdG8gdGVzdAogICAgcmVzdWx0ID0gZGYuYXBwZW5kKHVzZXJfZGYpCiAgICBzbGVlcEFycmF5ID0gcmVzdWx0Lmlsb2NbOiwgMDoyXQogICAgdGltZUluQmVkQXJyYXkgPSByZXN1bHRbWydEYXRlJywgJ1RpbWUgaW4gYmVkJ11dCiAgICBwcmludChzbGVlcEFycmF5KQogICAgcHJpbnQodGltZUluQmVkQXJyYXkpCiAgICByZXR1cm4gc2xlZXBBcnJheSwgdGltZUluQmVkQXJyYXkKCgojIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1vZGlmeWluZyB0aGUgZGF0YSB0byBmaXQgdGhlIGNvcnJlY3QgZm9ybWF0CmRlZiB0cnVuY2F0ZV9wZXJjZW50YWdlX3RvX3JhbmdlKHgpOgogICAgeCA9IHguc3RyaXAoJyUnKQogICAgeCA9IGludCh4KSAvIDEwLjAKICAgIHJldHVybiB4CgoKZGVmIHRpbWVfdG9fbWludXRlcyh4KToKICAgIHMgPSB4LnNwbGl0KCI6IikKICAgIHMgPSBpbnQoc1swXSkgKiA2MCArIGludChzWzFdKQogICAgcmV0dXJuIHMKCgpkZWYgZXh0cmFjdF9kYXRlKHgpOgogICAgcyA9IHguc3BsaXQoIiAiKQogICAgcmV0dXJuIHNbMF0KCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIiIiIFJ1biB0aHJvdWdoIHRoZSB1c2FnZSBvZiBzbGVlcF9zdGF0cyIiIgogICAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgcGFyc2VkX2RhdGFbc3RyKGVudHJ5KV1bImVuZF90aW1lIl0gPSBzdHIocm93W2VudHJ5XSkKPHxmaW1fZW5kfD4="]
["6b6637238ce26e55faa4b2921cb87d921e2bfdd1-4","6b6637238ce26e55faa4b2921cb87d921e2bfdd1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNzdgppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgb3MKaW1wb3J0IHNrdGltZS5mb3JlY2FzdGluZy5hbGwgYXMgc2sKCgpkZWYgZ2V0X29zX2ZpbGVuYW1lKGZpbGVfbmFtZSwgKmFyZ3MpOgogICAgIiIiCiAgICAgICAgVU4tVVNFRCBBUEkgLSBTdGlsbCBmaWd1cmluZyBvdXQgd2hhdCBpdCB3aWxsIGJlIHVzZWQgZm9yLgogICAgOnBhcmFtIGZpbGVfbmFtZTogRmlsZSBuYW1lLCBpbmNsdWRpbmcgZXh0ZW5zaW9uLCB0byB0aGUgZmlsZSB5b3Ugd2lzaCB0byB1c2UuCiAgICA6cGFyYW0gYXJnczogc2VxdWVudGlhbCwgY29udGludWFsIGluLWRlcHRoIGZvbGRlcnMgdW50aWwgd2UgZ2V0IHRvIHlvdXIgZmlsZS4KICAgIDpyZXR1cm46CiAgICAiIiIKICAgIHByaW50KCJXQVJOSU5HOiBUaGlzIEFQSSBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBtYXkgZ28gb3V0IG9mIHVzZSEiKQogICAgaWYgb3MubmFtZSA9PSAibnQiOgogICAgICAgIGludGVybWVkaWF0ZV9kaXJzID0gIiIKICAgICAgICBmb3IgYXJnIGluIGFyZ3M6CiAgICAgICAgICAgIGludGVybWVkaWF0ZV9kaXJzID0gaW50ZXJtZWRpYXRlX2RpcnMgKyBhcmcgKyAiXFwiCiAgICAgICAgZmlsZV9wYXRoX29zID0gb3MuZ2V0Y3dkKCkgKyAiXFwiICsgaW50ZXJtZWRpYXRlX2RpcnMgKyBmaWxlX25hbWUKCiAgICBlbGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKICAgICAgICBpbnRlcm1lZGlhdGVfZGlycyA9ICIiCiAgICAgICAgZm9yIGFyZyBpbiBhcmdzOgogICAgICAgICAgICBpbnRlcm1lZGlhdGVfZGlycyA9IGludGVybWVkaWF0ZV9kaXJzICsgYXJnICsgIi8iCiAgICAgICAgZmlsZV9wYXRoX29zID0gb3MuZ2V0Y3dkKCkgKyAiLyIgKyBpbnRlcm1lZGlhdGVfZGlycyArIGZpbGVfbmFtZQogICAgZWxzZToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJVbnN1cHBvcnRlZCBPcGVyYXRpbmcgU3lzdGVtLiIpCgogICAgcmV0dXJuIGZpbGVfcGF0aF9vcwoKCmRlZiBwYXJzZXJfY3N2X3VzZXIoZmlsZV9wYXRoKToKICAgICIiIgogICAgVU4tVVNFRCBBUEkgLSBXaWxsIGxpa2VseSBiZSByZW1vdmVkLCBwYW5kYXMgZG9lcyBhIGJldHRlciBqb2IuCiAgICBQYXJzZSB0aGUgY3N2IGluIHRoZSAidXNlciIgZm9ybWF0IGFuZCByZXR1cm4gaXRzIGRpY3Rpb25hcnkgcmVwcmVzZW50YXRpb24uCgogICAgOnBhcmFtIGZpbGVfcGF0aDogRnVsbHkgc3BlY2lmaWVkIGZpbGVfcGF0aC4KICAgIDpyZXR1cm46IGRpY3Rpb25hcnkgcmVwcmVzZW50YXRpb24gb2YgZmlsZSB0aGF0IGZpbGVfcGF0aCBwb2ludHMgdG8uCiAgICAiIiIKCiAgICBwcmludCgiV0FSTklORzogVGhpcyBBUEkgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgbWF5IGdvIG91dCBvZiB1c2UhXG4iCiAgICAgICAgICAiUGxlYXNlIHVzZSBzbGVlcF9kYXRhLmZvcmVjYXN0LnJlYWRfZGF0YSgpIikKICAgIHdpdGggb3BlbihmaWxlX3BhdGgsIG5ld2xpbmU9JycpIGFzIGNzdmZpbGU6CiAgICAgICAgcmVhZGVyID0gY3N2LnJlYWRlcihjc3ZmaWxlLCBkZWxpbWl0ZXI9JywnKQogICAgICAgIHBhcnNlZF9kYXRhID0ge30KICAgICAgICBmb3Igcm93IGluIHJlYWRlcjoKICAgICAgICAgICAgaWYgcm93WzBdID09ICJkYXkiOgogICAgICAgICAgICAgICAgZm9yIGVudHJ5IGluIHJvd1sxOjpdOgogICAgICAgICAgICAgICAgICAgIHBhcnNlZF9kYXRhW3N0cihlbnRyeSldID0ge30KICAgICAgICAgICAgZWxpZiByb3dbMF0gPT0gInN0YXJ0IHRpbWUiOgogICAgICAgICAgICAgICAgZm9yIGVudHJ5IGluIHJhbmdlKDEsIGxlbihyb3cpKToKICAgICAgICAgICAgICAgICAgICBwYXJzZWRfZGF0YVtzdHIoZW50cnkpXVsic3RhcnRfdGltZSJdID0gc3RyKHJvd1tlbnRyeV0pCiAgICAgICAgICAgIGVsaWYgcm93WzBdID09ICJlbmQgdGltZSI6CiAgICAgICAgICAgICAgICBmb3IgZW50cnkgaW4gcmFuZ2UoMSwgbGVuKHJvdykpOgogICAgICAgICAgICAgICAgICAgIHBhcnNlZF9kYXRhW3N0cihlbnRyeSldWyJlbmRfdGltZSJdID0gc3RyKHJvd1tlbnRyeV0pCiAgICAgICAgICAgIGVsaWYgcm93WzBdID09ICJxdWFsaXR5IG9mIHNsZWVwICgwIC0gMTApIjoKICAgICAgICAgICAgICAgIGZvciBlbnRyeSBpbiByYW5nZSgxLCBsZW4ocm93KSk6CiAgICAgICAgICAgICAgICAgICAgcGFyc2VkX2RhdGFbc3RyKGVudHJ5KV1bInF1YWxpdHlfb2Zfc2xlZXAiXSA9IGludChyb3dbZW50cnldKQoKICAgIHJldHVybiBwYXJzZWRfZGF0YSwgbGVuKHBhcnNlZF9kYXRhKQoKCmRlZiB3cml0ZV9jc3ZfdXNlcihmaWxlX3BhdGgsIGRhdGEpOgogICAgIiIiCiAgICBVTi1VU0VEIEFQSSAtIFdpbGwgbGlrZWx5IGJlIHJlbW92ZWQsIHBhbmRhcyBkb2VzIGEgYmV0dGVyIGpvYi4KICAgIFdyaXRlcyB0aGUgZGljdGlvbmFyeSBzcGVjaWZpZWQgYnkgZGF0YSB0byB0aGUgZmlsZSBjb250YWluZWQgaW4gZmlsZV9wYXRoCgogICAgOnBhcmFtIGZpbGVfcGF0aDogZnVsbHkgc3BlY2lmaWVkIGZpbGUgcGF0aC4KICAgIDpwYXJhbSBkYXRhOiBkaWN0aW9uYXJ5IHRvIGJlIHdyaXR0ZW4gdG8gZmlsZSBwYXRoLgogICAgOnJldHVybjogTm9uZS4KICAgICIiIgogICAgcHJpbnQoIldBUk5JTkc6IFRoaXMgQVBJIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIG1heSBnbyBvdXQgb2YgdXNlIVxuIgogICAgICAgICAgIlBsZWFzZSB1c2Ugc2xlZXBfc3RhdHMuZm9yZWNhc3Quc2F2ZV9kYXRhKCkiKQoKICAgIGRheXMgPSBsaXN0KGRhdGEua2V5cygpKQogICAgZGF5cy5zb3J0KCkKICAgIGF0dHJpYnV0ZXMgPSBkYXRhWyIxIl0ua2V5cygpICAjIGdldCB0aGUgZmlyc3QgZW50cnkKICAgIGF0dHJpYnV0ZV9yb3dzID0ge30KICAgIGF0dHJpYnV0ZV9yb3dzWyJkYXkiXSA9IGRheXMKICAgIGZvciBhdHRyaWJ1dGUgaW4gYXR0cmlidXRlczoKICAgICAgICBhdHRyaWJ1dGVfcm93c1thdHRyaWJ1dGVdID0gW10KICAgIGZvciBkYXkgaW4gZGF5czoKICAgICAgICBmb3IgYXR0cmlidXRlIGluIGRhdGFbZGF5XToKICAgICAgICAgICAgYXR0cmlidXRlX3Jvd3NbYXR0cmlidXRlXS5hcHBlbmQoZGF0YVtkYXldW2F0dHJpYnV0ZV0pCgogICAgIyBUT0RPOiB3aHkgaXMgdGhlIG9yZGVyIGludmVydGVkPwogICAgZGF5cy5yZXZlcnNlKCkKICAgIGF0dHJpYnV0ZV9yb3dzWyJkYXkiXSA9IGRheXMKCiAgICAjIHdyaXRpbmcgc3RlcAogICAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3cnLCBuZXdsaW5lPScnKSBhcyBjc3ZmaWxlOgogICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoY3N2ZmlsZSwgZGVsaW1pdGVyPScsJykKICAgICAgICBmb3Iga2V5IGluIGF0dHJpYnV0ZV9yb3dzOgogICAgICAgICAgICB3cml0ZXIud3JpdGVyb3coW2tleV0gKyBhdHRyaWJ1dGVfcm93c1trZXldKQoKICAgIHBhc3MKCgpkZWYgcHJlZGljdF9zbGVlcCh1c2VyX2hpc3RvcnksIG5ld19kYXRhLCB0aW1lX2ZvcmVjYXN0PU5vbmUpOgogICAgIiIiCiAgICBVTi1VU0VEIEFQSSAtIFdpbGwgbGlrZWx5IGJlIHJlbW92ZWQsIGZvcmVjYXN0LgogICAgR2l2ZW4gdGhlIHVzZXIncyBoaXN0b3JpYyBzbGVlcCBkYXRhIGFuZCB0aGUgbmV3LCB2b2x1bnRhcmlseSBwcm92aWRlZAogICAgZGF0YSwgZ2VuZXJhdGUgYSBuZXcgZm9yZWNhc3QgZm9yIHRoZSB1c2VyJ3Mgc2xlZXAuCgogICAgOnBhcmFtIHVzZXJfaGlzdG9yeTogaGlzdG9yaWMgdXNlciBzbGVlcCBkYXRhCiAgICA6cGFyYW0gbmV3X2RhdGE6IG5ldyBkYXRhIHByb3ZpZGVkIGluIHRoaXMgcnVuIG9mICJwcmVkaWN0X3NsZWVwIgogICAgOnBhcmFtICoqa3dhcmdzOgogICAgICAgIHRpbWVfZm9yZWNhc3Q6IHRoZSBsZW5ndGggb2YgdGhlIGZvcmVjYXN0IGlzIGEgbWF4IG9mIHNldmVuIGRheXMuCiAgICAgICAgSWYgdGltZV9mb3JlY2FzdCBpcyBwcm92aWRlZCwgdGhpcyB2YWx1ZSBvdmVycmlkZXMgdGhlIGZvcmVjYXN0IGxlbmd0aAogICAgICAgICh1cCB0byBhIG1heCBvZiBzZXZlbiBkYXlzKQogICAgOnJldHVybjogdGhlIHNsZWVwX2ZvcmVjYXN0CiAgICAiIiIKICAgIHByaW50KCJXQVJOSU5HOiBUaGlzIEFQSSBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBtYXkgZ28gb3V0IG9mIHVzZSFcbiIKICAgICAgICAgICJQbGVhc2UgdXNlIHNsZWVwX3N0YXRzLmZvcmVjYXN0LnJ1bl9mb3JlY2FzdCgpIikKICAgIGZvcmVjYXN0X2xlbmd0aCA9IGxlbihuZXdfZGF0YSkKICAgIGlmIHRpbWVfZm9yZWNhc3Q6CiAgICAgICAgZm9yZWNhc3RfbGVuZ3RoID0gdGltZV9mb3JlY2FzdAogICAgZm9yZWNhc3RfbGVuZ3RoID0gbWluKGZvcmVjYXN0X2xlbmd0aCwgNykKCiAgICAjIGdlbmVyYXRlIGEgcmVsYXRpdmUgZm9yZWNhc3RpbmcgaG9yaXpvbgogICAgcmZoID0gbnAuYXJhbmdlKGZvcmVjYXN0X2xlbmd0aCkgKyAxCgogICAgIyBTcGVjaWZ5IHRoZSBtb2RlbAogICAgZm9yZWNhc3RlciA9IHNrLkV4cG9uZW50aWFsU21vb3RoaW5nKHRyZW5kPSJhZGQiLCBzZWFzb25hbD0ibXVsdGlwbGljYXRpdmUiLCBzcD03KQoKICAgICMgZml0IGl0IHRvIHRoZSB1c2VyX2hpc3RvcnkKICAgIGZvcmVjYXN0ZXIuZml0KHVzZXJfaGlzdG9yeSkKCiAgICAjIGdlbmVyYXRlIGEgcHJlZGljdGlvbgogICAgc2xlZXBfZm9yZWNhc3QgPSBmb3JlY2FzdGVyLnByZWRpY3QocmZoKQoKICAgIHJldHVybiBzbGVlcF9mb3JlY2FzdAoKCmRlZiBtYWluKCk6CiAgICAiIiIKICAgIERlcHJlY2F0ZWQgLSB3aWxsIGJlIHJlbW92ZWQgb25jZSB0ZXN0cyBwYXNzIG9uIF9fbWFpbl9fLnB5J3MgZnVuY3Rpb25zCiAgICA6cmV0dXJuOgogICAgIiIiCiAgICAjIFJ1biB0aHJvdWdoIHRoZSB1c2FnZSBvZiBzbGVlcF9zdGF0cwogICAgZmlsZV9uYW1lID0gaW5wdXQoIkVudGVyIHRoZSBuYW1lIG9mIHlvdXIgc2xlZXAgY3N2IGZpbGU6ICIpCiAgICB1c2VyX2VudHJpZXMsIG51bV9lbnRyaWVzID0gcGFyc2VyX2Nzdl91c2VyKGZpbGVfbmFtZSkKICAgICMgTG9hZCB0aGUgdXNlcnMgcHJpb3IgZGF0YQogICAgc2xlZXBBcnJheSwgdGltZUluQmVkQXJyYXkgPSBkYXRhTG9hZGVyKCkKCiAgICBmb3JlY2FzdCA9IHByZWRpY3Rfc2xlZXAoc2xlZXBBcnJheSwgdXNlcl9lbnRyaWVzLCBudW1fZW50cmllcykKICAgIHByaW50KGZvcmVjYXN0KQogICAgcmV0dXJuIGZvcmVjYXN0CgoKZGVmIGRhdGFMb2FkZXIoKToKICAgIHByaW50KCJXQVJOSU5HOiBUaGlzIEFQSSBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBtYXkgZ28gb3V0IG9mIHVzZSFcbiIKICAgICAgICAgICJUaGUgc2NoZW1hIHJlZmVycmVkIHRvIGJ5IHRoaXMgQVBJIGlzIG5vIGxvbmdlciBpbiB1c2UuIikKICAgIGRmID0gcGQucmVhZF9jc3YoImRhdGEvc2xlZXBkYXRhLmNzdiIpICAjIG1heSBuZWVkIHRvIGFkZCBvcy5nZXRjd2QoKSBpZiBvbiB3aW5kb3dzIG1hY2hpbmUKICAgICMgRHJvcCBleHRyYW5lb3VzIGNvbHVtbnMgbm90IHVzZWQgaW4gYW5hbHlzaXMKICAgIGRmID0gZGYuZHJvcCgnSGVhcnQgcmF0ZScsIDEpCiAgICBkZiA9IGRmLmRyb3AoJ0FjdGl2aXR5IChzdGVwcyknLCAxKQogICAgZGYgPSBkZi5kcm9wKCdTbGVlcCBOb3RlcycsIDEpCiAgICBkZiA9IGRmLmRyb3AoJ1dha2UgdXAnLCAxKQogICAgZGYgPSBkZi5kcm9wKCdFbmQnLCAxKQogICAgIyBFZGl0IGJlbG93IGRhdGEgdG8gZml0IGFwcHJvcHJpYXRlIGNvbnN0cmFpbnRzCiAgICBkZlsnU2xlZXAgcXVhbGl0eSddID0gZGZbJ1NsZWVwIHF1YWxpdHknXS5hcHBseSh0cnVuY2F0ZV9wZXJjZW50YWdlX3RvX3JhbmdlKQogICAgZGZbJ1RpbWUgaW4gYmVkJ10gPSBkZlsnVGltZSBpbiBiZWQnXS5hcHBseSh0aW1lX3RvX21pbnV0ZXMpCiAgICBkZlsnU3RhcnQnXSA9IGRmWydTdGFydCddLmFwcGx5KGV4dHJhY3RfZGF0ZSkKICAgIGRmID0gZGYucmVuYW1lKGNvbHVtbnM9eydTdGFydCc6ICdEYXRlJ30pCgogICAgIyBPYnRhaW4gdXNlciBkYXRhCiAgICB1c2VyX2RmID0gcGQucmVhZF9jc3YoInRlc3QvdGVzdF9pbnB1dHMvc2FtcGxlXzdfZGF5cy5jc3YiKSAgIyBtYXkgbmVlZCB0byBhZGQgb3MuZ2V0Y3dkKCkgaWYgb24gd2luZG93cyBtYWNoaW5lCiAgICB1c2VyX2RmWyJUaW1lIGluIGJlZCJdID0gNjAgKiB1c2VyX2RmWyJUaW1lIGluIGJlZCJdCgogICAgIyBBcHBlbmQgdXNlciBkYXRhIHRvIHRlc3QKICAgIHJlc3VsdCA9IGRmLmFwcGVuZCh1c2VyX2RmKQogICAgc2xlZXBBcnJheSA9IHJlc3VsdC5pbG9jWzosIDA6Ml0KICAgIHRpbWVJbkJlZEFycmF5ID0gcmVzdWx0W1snRGF0ZScsICdUaW1lIGluIGJlZCddXQogICAgcHJpbnQoc2xlZXBBcnJheSkKICAgIHByaW50KHRpbWVJbkJlZEFycmF5KQogICAgcmV0dXJuIHNsZWVwQXJyYXksIHRpbWVJbkJlZEFycmF5CgoKIyBIZWxwZXIgZnVuY3Rpb25zIGZvciBtb2RpZnlpbmcgdGhlIGRhdGEgdG8gZml0IHRoZSBjb3JyZWN0IGZvcm1hdApkZWYgdHJ1bmNhdGVfcGVyY2VudGFnZV90b19yYW5nZSh4KToKICAgIHggPSB4LnN0cmlwKCclJykKICAgIHggPSBpbnQoeCkgLyAxMC4wCiAgICByZXR1cm4geAoKCmRlZiB0aW1lX3RvX21pbnV0ZXMoeCk6CiAgICBzID0geC5zcGxpdCgiOiIpCiAgICBzID0gaW50KHNbMF0pICogNjAgKyBpbnQoc1sxXSkKICAgIHJldHVybiBzCgoKZGVmIGV4dHJhY3RfZGF0ZSh4KToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcyA9IHguc3BsaXQoIiAiKQogICAgcmV0dXJuIHNbMF0KCgo8fGZpbV9lbmR8Pg=="]
["6b6637238ce26e55faa4b2921cb87d921e2bfdd1-5","6b6637238ce26e55faa4b2921cb87d921e2bfdd1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNzdgppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgb3MKaW1wb3J0IHNrdGltZS5mb3JlY2FzdGluZy5hbGwgYXMgc2sKCgpkZWYgZ2V0X29zX2ZpbGVuYW1lKGZpbGVfbmFtZSwgKmFyZ3MpOgogICAgIiIiCiAgICAgICAgVU4tVVNFRCBBUEkgLSBTdGlsbCBmaWd1cmluZyBvdXQgd2hhdCBpdCB3aWxsIGJlIHVzZWQgZm9yLgogICAgOnBhcmFtIGZpbGVfbmFtZTogRmlsZSBuYW1lLCBpbmNsdWRpbmcgZXh0ZW5zaW9uLCB0byB0aGUgZmlsZSB5b3Ugd2lzaCB0byB1c2UuCiAgICA6cGFyYW0gYXJnczogc2VxdWVudGlhbCwgY29udGludWFsIGluLWRlcHRoIGZvbGRlcnMgdW50aWwgd2UgZ2V0IHRvIHlvdXIgZmlsZS4KICAgIDpyZXR1cm46CiAgICAiIiIKICAgIHByaW50KCJXQVJOSU5HOiBUaGlzIEFQSSBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBtYXkgZ28gb3V0IG9mIHVzZSEiKQogICAgaWYgb3MubmFtZSA9PSAibnQiOgogICAgICAgIGludGVybWVkaWF0ZV9kaXJzID0gIiIKICAgICAgICBmb3IgYXJnIGluIGFyZ3M6CiAgICAgICAgICAgIGludGVybWVkaWF0ZV9kaXJzID0gaW50ZXJtZWRpYXRlX2RpcnMgKyBhcmcgKyAiXFwiCiAgICAgICAgZmlsZV9wYXRoX29zID0gb3MuZ2V0Y3dkKCkgKyAiXFwiICsgaW50ZXJtZWRpYXRlX2RpcnMgKyBmaWxlX25hbWUKCiAgICBlbGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKICAgICAgICBpbnRlcm1lZGlhdGVfZGlycyA9ICIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBmb3IgYXJnIGluIGFyZ3M6CiAgICAgICAgICAgIGludGVybWVkaWF0ZV9kaXJzID0gaW50ZXJtZWRpYXRlX2RpcnMgKyBhcmcgKyAiLyIKICAgICAgICBmaWxlX3BhdGhfb3MgPSBvcy5nZXRjd2QoKSArICIvIiArIGludGVybWVkaWF0ZV9kaXJzICsgZmlsZV9uYW1lCjx8ZmltX2VuZHw+"]
["a9bb67dac7f0231b8b52ed957a09e19e4ae1afdf-1","a9bb67dac7f0231b8b52ed957a09e19e4ae1afdf","PHxmaW1fcHJlZml4fD4KIiIiCu2MjOydvCDsnbTrpoQgOiA2Mzc4LnB5CuygnOyekeyekCA6IOygleyngOyatAo8fGZpbV9ob2xlfD4Kd2hpbGUgVHJ1ZToKCXMgPSBpbnB1dCgpCgoJIyDsnoXroKXrsJvsnYAg66y47J6Q7Je07J20IDDsnbTrqbQg7ZSE66Gc6re4656oIOyiheujjAoJaWYgcyA9PSAnMCc6CgkJYnJlYWsKCgkjIOuUlOyngO2EuCDro6jtirgg6rOE7IKwCgl3aGlsZSBUcnVlOgoJCW51bSA9IDAKCQlmb3IgY2ggaW4gczoKCQkJbnVtICs9IGludChjaCkKCgkJIyBudW3snbQg7ZWcIOyekOumrCDsiJjqsIAg64KY7JisIOuVjOq5jOyngCDrsJjrs7UKCQlpZiBudW0gPCAxMDoKCQkJcHJpbnQobnVtKQoJCQlicmVhawoJCQoJCXMgPSBzdHIobnVtKQo8fGZpbV9zdWZmaXh8PgrsoJzsnpEg64Kg7KecIDogMjAxN+uFhCA27JuUIDE47J28CuygnOyekSDrqqntkZwgOiDrlJTsp4DthLgg66Oo7Yq466W8IOq1rO2VnOuLpC4KIiIiCgo8fGZpbV9lbmR8Pg=="]
["c178b1f816f3dda865cb5b29533b51b7f084dda7-1","c178b1f816f3dda865cb5b29533b51b7f084dda7","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMiBvbiAyMDE5LTA1LTAzIDE0OjA0Cgpmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKaW1wb3J0IGRqYW5nby5jb3JlLnZhbGlkYXRvcnMKZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMsIG1vZGVscwppbXBvcnQgZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbgppbXBvcnQgZGphbmdvLnV0aWxzLnRpbWV6b25lCmltcG9ydCBsaWJ5YV9lbGVjdGlvbnMubGlieWFfYnJlYWQKaW1wb3J0IGxpYnlhX2VsZWN0aW9ucy5waG9uZV9udW1iZXJzCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBpbml0aWFsID0gVHJ1ZQoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ3JhcGlkc21zJywgJ19fZmlyc3RfXycpLAogICAgICAgICgnY2l2aWxfcmVnaXN0cnknLCAnX19maXJzdF9fJyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkNyZWF0ZU1vZGVsKAogICAgICAgICAgICBuYW1lPSdCbGFja2xpc3QnLAogICAgICAgICAgICBmaWVsZHM9WwogICAgICAgICAgICAgICAgKCdpZCcsIG1vZGVscy5BdXRvRmllbGQoYXV0b19jcmVhdGVkPVRydWUsIHByaW1hcnlfa2V5PVRydWUsIHNlcmlhbGl6ZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdJRCcpKSwKICAgICAgICAgICAgICAgICgnZGVsZXRlZCcsIG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdD1GYWxzZSwgdmVyYm9zZV9uYW1lPSdkZWxldGVkJykpLAogICAgICAgICAgICAgICAgKCdjcmVhdGlvbl9kYXRlJywgbW9kZWxzLkRhdGVUaW1lRmllbGQoZGVmYXVsdD1kamFuZ28udXRpbHMudGltZXpvbmUubm93LCBlZGl0YWJsZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdjcmVhdGlvbiBkYXRlJykpLAogICAgICAgICAgICAgICAgKCdtb2RpZmljYXRpb25fZGF0ZScsIG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGphbmdvLnV0aWxzLnRpbWV6b25lLm5vdywgZWRpdGFibGU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nbW9kaWZpY2F0aW9uIGRhdGUnKSksCiAgICAgICAgICAgICAgICAoJ3Bob25lX251bWJlcicsIGxpYnlhX2VsZWN0aW9ucy5waG9uZV9udW1iZXJzLlBob25lTnVtYmVyRmllbGQoZGJfaW5kZXg9VHJ1ZSwgbWF4X2xlbmd0aD0xMywgdmVyYm9zZV9uYW1lPSdwaG9uZSBudW1iZXInKSksCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG9wdGlvbnM9ewogICAgICAgICAgICAgICAgJ3ZlcmJvc2VfbmFtZSc6ICdibGFja2xpc3RlZCBudW1iZXInLAogICAgICAgICAgICAgICAgJ3ZlcmJvc2VfbmFtZV9wbHVyYWwnOiAnYmxhY2tsaXN0ZWQgbnVtYmVycycsCiAgICAgICAgICAgICAgICAnb3JkZXJpbmcnOiBbJ3Bob25lX251bWJlciddLAogICAgICAgICAgICAgICAgJ3Blcm1pc3Npb25zJzogKCgncmVhZF9ibGFja2xpc3QnLCAnQ2FuIHJlYWQgYmxhY2sgbGlzdCcpLCAoJ2Jyb3dzZV9ibGFja2xpc3QnLCAnQ2FuIGJyb3dzZSBibGFjayBsaXN0JykpLAogICAgICAgICAgICB9LAogICAgICAgICAgICBiYXNlcz0obGlieWFfZWxlY3Rpb25zLnBob25lX251bWJlcnMuRm9ybWF0dGVkUGhvbmVOdW1iZXJNaXhpbiwgbW9kZWxzLk1vZGVsKSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQ3JlYXRlTW9kZWwoCiAgICAgICAgICAgIG5hbWU9J0NvbnN0aXR1ZW5jeScsCiAgICAgICAgICAgIGZpZWxkcz1bCiAgICAgICAgICAgICAgICAoJ2RlbGV0ZWQnLCBtb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UsIHZlcmJvc2VfbmFtZT0nZGVsZXRlZCcpKSwKICAgICAgICAgICAgICAgICgnY3JlYXRpb25fZGF0ZScsIG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGphbmdvLnV0aWxzLnRpbWV6b25lLm5vdywgZWRpdGFibGU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nY3JlYXRpb24gZGF0ZScpKSwKICAgICAgICAgICAgICAgICgnbW9kaWZpY2F0aW9uX2RhdGUnLCBtb2RlbHMuRGF0ZVRpbWVGaWVsZChkZWZhdWx0PWRqYW5nby51dGlscy50aW1lem9uZS5ub3csIGVkaXRhYmxlPUZhbHNlLCB2ZXJib3NlX25hbWU9J21vZGlmaWNhdGlvbiBkYXRlJykpLAogICAgICAgICAgICAgICAgKCdpZCcsIG1vZGVscy5JbnRlZ2VyRmllbGQocHJpbWFyeV9rZXk9VHJ1ZSwgc2VyaWFsaXplPUZhbHNlLCB2ZXJib3NlX25hbWU9J2lkJykpLAogICAgICAgICAgICAgICAgKCduYW1lX2VuZ2xpc2gnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTI4LCB2ZXJib3NlX25hbWU9J25hbWUgKEVuZ2xpc2gpJykpLAogICAgICAgICAgICAgICAgKCduYW1lX2FyYWJpYycsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMjgsIHZlcmJvc2VfbmFtZT0nbmFtZSAoQXJhYmljKScpKSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgb3B0aW9ucz17CiAgICAgICAgICAgICAgICAndmVyYm9zZV9uYW1lJzogJ2NvbnN0aXR1ZW5jeScsCiAgICAgICAgICAgICAgICAndmVyYm9zZV9uYW1lX3BsdXJhbCc6ICdjb25zdGl0dWVuY2llcycsCiAgICAgICAgICAgICAgICAnb3JkZXJpbmcnOiBbJ2lkJ10sCiAgICAgICAgICAgICAgICAncGVybWlzc2lvbnMnOiAoKCdyZWFkX2NvbnN0aXR1ZW5jeScsICdDYW4gcmVhZCBjb25zdGl0dWVuY3knKSwgKCdicm93c2VfY29uc3RpdHVlbmN5JywgJ0NhbiBicm93c2UgY29uc3RpdHVlbmNpZXMnKSksCiAgICAgICAgICAgICAgICAnYWJzdHJhY3QnOiBGYWxzZSwKICAgICAgICAgICAgfSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQ3JlYXRlTW9kZWwoCiAgICAgICAgICAgIG5hbWU9J09mZmljZScsCiAgICAgICAgICAgIGZpZWxkcz1bCiAgICAgICAgICAgICAgICAoJ2RlbGV0ZWQnLCBtb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UsIHZlcmJvc2VfbmFtZT0nZGVsZXRlZCcpKSwKICAgICAgICAgICAgICAgICgnY3JlYXRpb25fZGF0ZScsIG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGphbmdvLnV0aWxzLnRpbWV6b25lLm5vdywgZWRpdGFibGU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nY3JlYXRpb24gZGF0ZScpKSwKICAgICAgICAgICAgICAgICgnbW9kaWZpY2F0aW9uX2RhdGUnLCBtb2RlbHMuRGF0ZVRpbWVGaWVsZChkZWZhdWx0PWRqYW5nby51dGlscy50aW1lem9uZS5ub3csIGVkaXRhYmxlPUZhbHNlLCB2ZXJib3NlX25hbWU9J21vZGlmaWNhdGlvbiBkYXRlJykpLAogICAgICAgICAgICAgICAgKCdpZCcsIG1vZGVscy5JbnRlZ2VyRmllbGQocHJpbWFyeV9rZXk9VHJ1ZSwgc2VyaWFsaXplPUZhbHNlLCB2ZXJib3NlX25hbWU9J2lkJykpLAogICAgICAgICAgICAgICAgKCduYW1lX2VuZ2xpc2gnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTI4LCB2ZXJib3NlX25hbWU9J25hbWUgKEVuZ2xpc2gpJykpLAogICAgICAgICAgICAgICAgKCduYW1lX2FyYWJpYycsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMjgsIHZlcmJvc2VfbmFtZT0nbmFtZSAoQXJhYmljKScpKSwKICAgICAgICAgICAgICAgICgncmVnaW9uJywgbW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzPVsoMCwgJ05vIFJlZ2lvbicpLCAoMSwgJ1dlc3QnKSwgKDIsICdTb3V0aCcpLCAoMywgJ0Vhc3QnKV0sIGRlZmF1bHQ9MCwgdmVyYm9zZV9uYW1lPSdyZWdpb24nKSksCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG9wdGlvbnM9ewogICAgICAgICAgICAgICAgJ3ZlcmJvc2VfbmFtZSc6ICdvZmZpY2UnLAogICAgICAgICAgICAgICAgJ3ZlcmJvc2VfbmFtZV9wbHVyYWwnOiAnb2ZmaWNlcycsCiAgICAgICAgICAgICAgICAnb3JkZXJpbmcnOiBbJ2lkJ10sCiAgICAgICAgICAgICAgICAncGVybWlzc2lvbnMnOiAoKCdyZWFkX29mZmljZScsICdDYW4gcmVhZCBvZmZpY2UnKSwgKCdicm93c2Vfb2ZmaWNlJywgJ0NhbiBicm93c2Ugb2ZmaWNlcycpKSwKICAgICAgICAgICAgICAgICdhYnN0cmFjdCc6IEZhbHNlLAogICAgICAgICAgICB9LAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5DcmVhdGVNb2RlbCgKICAgICAgICAgICAgbmFtZT0nU3ViQ29uc3RpdHVlbmN5JywKICAgICAgICAgICAgZmllbGRzPVsKICAgICAgICAgICAgICAgICgnZGVsZXRlZCcsIG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdD1GYWxzZSwgdmVyYm9zZV9uYW1lPSdkZWxldGVkJykpLAogICAgICAgICAgICAgICAgKCdjcmVhdGlvbl9kYXRlJywgbW9kZWxzLkRhdGVUaW1lRmllbGQoZGVmYXVsdD1kamFuZ28udXRpbHMudGltZXpvbmUubm93LCBlZGl0YWJsZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdjcmVhdGlvbiBkYXRlJykpLAogICAgICAgICAgICAgICAgKCdtb2RpZmljYXRpb25fZGF0ZScsIG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGphbmdvLnV0aWxzLnRpbWV6b25lLm5vdywgZWRpdGFibGU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nbW9kaWZpY2F0aW9uIGRhdGUnKSksCiAgICAgICAgICAgICAgICAoJ2lkJywgbW9kZWxzLkludGVnZXJGaWVsZChwcmltYXJ5X2tleT1UcnVlLCBzZXJpYWxpemU9RmFsc2UsIHZlcmJvc2VfbmFtZT0naWQnKSksCiAgICAgICAgICAgICAgICAoJ25hbWVfZW5nbGlzaCcsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMjgsIHZlcmJvc2VfbmFtZT0nbmFtZSAoRW5nbGlzaCknKSksCiAgICAgICAgICAgICAgICAoJ25hbWVfYXJhYmljJywgbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEyOCwgdmVyYm9zZV9uYW1lPSduYW1lIChBcmFiaWMpJykpLAogICAgICAgICAgICBdLAogICAgICAgICAgICBvcHRpb25zPXsKICAgICAgICAgICAgICAgICd2ZXJib3NlX25hbWUnOiAnc3ViY29uc3RpdHVlbmN5JywKICAgICAgICAgICAgICAgICd2ZXJib3NlX25hbWVfcGx1cmFsJzogJ3N1YmNvbnN0aXR1ZW5jaWVzJywKICAgICAgICAgICAgICAgICdvcmRlcmluZyc6IFsnaWQnXSwKICAgICAgICAgICAgICAgICdwZXJtaXNzaW9ucyc6ICgoJ3JlYWRfc3ViY29uc3RpdHVlbmN5JywgJ0NhbiByZWFkIHN1YmNvbnN0aXR1ZW5jeScpLCAoJ2Jyb3dzZV9zdWJjb25zdGl0dWVuY3knLCAnQ2FuIGJyb3dzZSBzdWJjb25zdGl0dWVuY2llcycpKSwKICAgICAgICAgICAgICAgICdhYnN0cmFjdCc6IEZhbHNlLAogICAgICAgICAgICB9LAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5DcmVhdGVNb2RlbCgKICAgICAgICAgICAgbmFtZT0nV2hpdGVsaXN0JywKICAgICAgICAgICAgZmllbGRzPVsKICAgICAgICAgICAgICAgICgnaWQnLCBtb2RlbHMuQXV0b0ZpZWxkKGF1dG9fY3JlYXRlZD1UcnVlLCBwcmltYXJ5X2tleT1UcnVlLCBzZXJpYWxpemU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nSUQnKSksCiAgICAgICAgICAgICAgICAoJ2RlbGV0ZWQnLCBtb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UsIHZlcmJvc2VfbmFtZT0nZGVsZXRlZCcpKSwKICAgICAgICAgICAgICAgICgnY3JlYXRpb25fZGF0ZScsIG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGphbmdvLnV0aWxzLnRpbWV6b25lLm5vdywgZWRpdGFibGU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nY3JlYXRpb24gZGF0ZScpKSwKICAgICAgICAgICAgICAgICgnbW9kaWZpY2F0aW9uX2RhdGUnLCBtb2RlbHMuRGF0ZVRpbWVGaWVsZChkZWZhdWx0PWRqYW5nby51dGlscy50aW1lem9uZS5ub3csIGVkaXRhYmxlPUZhbHNlLCB2ZXJib3NlX25hbWU9J21vZGlmaWNhdGlvbiBkYXRlJykpLAogICAgICAgICAgICAgICAgKCdwaG9uZV9udW1iZXInLCBsaWJ5YV9lbGVjdGlvbnMucGhvbmVfbnVtYmVycy5QaG9uZU51bWJlckZpZWxkKGRiX2luZGV4PVRydWUsIG1heF9sZW5ndGg9MTMsIHZlcmJvc2VfbmFtZT0ncGhvbmUgbnVtYmVyJykpLAogICAgICAgICAgICBdLAogICAgICAgICAgICBvcHRpb25zPXsKICAgICAgICAgICAgICAgICd2ZXJib3NlX25hbWUnOiAnd2hpdGVsaXN0ZWQgbnVtYmVyJywKICAgICAgICAgICAgICAgICd2ZXJib3NlX25hbWVfcGx1cmFsJzogJ3doaXRlbGlzdGVkIG51bWJlcnMnLAogICAgICAgICAgICAgICAgJ29yZGVyaW5nJzogWydwaG9uZV9udW1iZXInXSwKICAgICAgICAgICAgICAgICdwZXJtaXNzaW9ucyc6ICgoJ3JlYWRfd2hpdGVsaXN0JywgJ0NhbiByZWFkIHdoaXRlbGlzdCcpLCAoJ2Jyb3dzZV93aGl0ZWxpc3QnLCAnQ2FuIGJyb3dzZSB3aGl0ZWxpc3QnKSksCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGJhc2VzPShsaWJ5YV9lbGVjdGlvbnMucGhvbmVfbnVtYmVycy5Gb3JtYXR0ZWRQaG9uZU51bWJlck1peGluLCBtb2RlbHMuTW9kZWwpLAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5DcmVhdGVNb2RlbCgKICAgICAgICAgICAgbmFtZT0nU01TJywKICAgICAgICAgICAgZmllbGRzPVsKICAgICAgICAgICAgICAgICgnaWQnLCBtb2RlbHMuQXV0b0ZpZWxkKGF1dG9fY3JlYXRlZD1UcnVlLCBwcmltYXJ5X2tleT1UcnVlLCBzZXJpYWxpemU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nSUQnKSksCiAgICAgICAgICAgICAgICAoJ2RlbGV0ZWQnLCBtb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UsIHZlcmJvc2VfbmFtZT0nZGVsZXRlZCcpKSwKICAgICAgICAgICAgICAgICgnY3JlYXRpb25fZGF0ZScsIG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGphbmdvLnV0aWxzLnRpbWV6b25lLm5vdywgZWRpdGFibGU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nY3JlYXRpb24gZGF0ZScpKSwKICAgICAgICAgICAgICAgICgnbW9kaWZpY2F0aW9uX2RhdGUnLCBtb2RlbHMuRGF0ZVRpbWVGaWVsZChkZWZhdWx0PWRqYW5nby51dGlscy50aW1lem9uZS5ub3csIGVkaXRhYmxlPUZhbHNlLCB2ZXJib3NlX25hbWU9J21vZGlmaWNhdGlvbiBkYXRlJykpLAogICAgICAgICAgICAgICAgKCdmcm9tX251bWJlcicsIG1vZGVscy5DaGFyRmllbGQoZGJfaW5kZXg9VHJ1ZSwgbWF4X2xlbmd0aD0xNSwgdmVyYm9zZV9uYW1lPSdmcm9tIG51bWJlcicpKSwKICAgICAgICAgICAgICAgICgndG9fbnVtYmVyJywgbW9kZWxzLkNoYXJGaWVsZChkYl9pbmRleD1UcnVlLCBtYXhfbGVuZ3RoPTE1LCB2ZXJib3NlX25hbWU9J3RvIG51bWJlcicpKSwKICAgICAgICAgICAgICAgICgnZGlyZWN0aW9uJywgbW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzPVsoMSwgJ0luY29taW5nJyksICgyLCAnT3V0Z29pbmcnKV0sIGRiX2luZGV4PVRydWUsIHZlcmJvc2VfbmFtZT0nZGlyZWN0aW9uJykpLAogICAgICAgICAgICAgICAgKCdtc2dfdHlwZScsIG1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcz1bKDMsICdSZWdpc3RyYXRpb24nKSwgKDUsICdJbnZhbGlkIGZvcm1hdCcpLCAoNiwgJ011bHRpcGxlIHByb2JsZW1zJyksICg3LCAnSW52YWxpZCByZWdpc3RyYXRpb24gY2VudHJlIGNvZGUgbGVuZ3RoJyksICg4LCAnTm8gc3VjaCByZWdpc3RyYXRpb24gY2VudHJlIGZvdW5kJyksICg5LCAnTm90IGVub3VnaCBlbm91Z2ggTmF0aW9uYWwgSUQgZGlnaXRzJyksICgxMSwgJ0ludmFsaWQgdmFsaWQgTmF0aW9uYWwgSUQnKSwgKDEzLCAnVW5rbm93bicpLCAoMTQsICdSZWdpc3RyYXRpb24gdXBkYXRlJyksICgxNSwgJ1JlZ2lzdHJhdGlvbiBDZW50ZXIgcXVlcnknKSwgKDE2LCAnSW52YWxpZCBGb3JtIElEJyksICgxNywgJ1Bob25lIGFjdGl2YXRpb24nKSwgKDE4LCAnRGFpbHkgUmVwb3J0JyksICgxOSwgJ0RhaWx5IFJlcG9ydCBpbnZhbGlkJyksICgyMCwgJ0J1bGsgT3V0Z29pbmcgTWVzc2FnZScpLCAoMjEsICdQb2xsaW5nIFJlcG9ydCcpLCAoMjIsICdQb2xsaW5nIFJlcG9ydCBpbnZhbGlkJyksICgyMywgJ1Bob25lIG51bWJlciBub3QgYWN0aXZhdGVkJyldLCB2ZXJib3NlX25hbWU9J21lc3NhZ2UgdHlwZScpKSwKICAgICAgICAgICAgICAgICgnb3JkZXInLCBtb2RlbHMuSW50ZWdlckZpZWxkKGJsYW5rPVRydWUsIG51bGw9VHJ1ZSwgdmVyYm9zZV9uYW1lPSdvcmRlcicpKSwKICAgICAgICAgICAgICAgICgnbWVzc2FnZScsIG1vZGVscy5UZXh0RmllbGQoZGJfaW5kZXg9VHJ1ZSwgdmVyYm9zZV9uYW1lPSdtZXNzYWdlJykpLAogICAgICAgICAgICAgICAgKCdtZXNzYWdlX2NvZGUnLCBtb2RlbHMuSW50ZWdlckZpZWxkKGRiX2luZGV4PVRydWUsIGRlZmF1bHQ9MCwgaGVscF90ZXh0PSJJZiB3ZSdyZSBzZW5kaW5nIG9uZSBvZiBvdXIgY2FubmVkIG1lc3NhZ2VzLCB0aGlzIGlzIHRoZSBtZXNzYWdlIGNvZGUuIiwgdmVyYm9zZV9uYW1lPSdtZXNzYWdlIGNvZGUnKSksCiAgICAgICAgICAgICAgICAoJ3V1aWQnLCBtb2RlbHMuQ2hhckZpZWxkKGJsYW5rPVRydWUsIGRiX2luZGV4PVRydWUsIG1heF9sZW5ndGg9NTAsIHZlcmJvc2VfbmFtZT0ndXVpZCcpKSwKICAgICAgICAgICAgICAgICgnaXNfYXVkaXRlZCcsIG1vZGVscy5Cb29sZWFuRmllbGQoZGJfaW5kZXg9VHJ1ZSwgZGVmYXVsdD1GYWxzZSwgdmVyYm9zZV9uYW1lPSdpcyBhdWRpdGVkJykpLAogICAgICAgICAgICAgICAgKCduZWVkX3RvX2Fub255bWl6ZScsIG1vZGVscy5Cb29sZWFuRmllbGQoZGJfaW5kZXg9VHJ1ZSwgZGVmYXVsdD1GYWxzZSwgdmVyYm9zZV9uYW1lPSduZWVkIHRvIGFub255bWl6ZScpKSwKICAgICAgICAgICAgICAgICgnY2FycmllcicsIG1vZGVscy5Gb3JlaWduS2V5KG9uX2RlbGV0ZT1kamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uLkNBU0NBREUsIHRvPSdyYXBpZHNtcy5CYWNrZW5kJywgdmVyYm9zZV9uYW1lPSdjYXJyaWVyJykpLAogICAgICAgICAgICAgICAgKCdjaXRpemVuJywgbW9kZWxzLkZvcmVpZ25LZXkoYmxhbms9VHJ1ZSwgbnVsbD1UcnVlLCBvbl9kZWxldGU9ZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbi5DQVNDQURFLCByZWxhdGVkX25hbWU9J21lc3NhZ2VzJywgdG89J2NpdmlsX3JlZ2lzdHJ5LkNpdGl6ZW4nLCB2ZXJib3NlX25hbWU9J2NpdGl6ZW4nKSksCiAgICAgICAgICAgICAgICAoJ2luX3Jlc3BvbnNlX3RvJywgbW9kZWxzLkZvcmVpZ25LZXkoYmxhbms9VHJ1ZSwgbnVsbD1UcnVlLCBvbl9kZWxldGU9ZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbi5DQVNDQURFLCByZWxhdGVkX25hbWU9J3Jlc3BvbnNlcycsIHRvPSdyZWdpc3Rlci5TTVMnLCB2ZXJib3NlX25hbWU9J2luIHJlc3BvbnNlIHRvJykpLAogICAgICAgICAgICBdLAogICAgICAgICAgICBvcHRpb25zPXsKICAgICAgICAgICAgICAgICd2ZXJib3NlX25hbWUnOiAnc21zJywKICAgICAgICAgICAgICAgICd2ZXJib3NlX25hbWVfcGx1cmFsJzogJ3Ntc2VzJywKICAgICAgICAgICAgICAgICdvcmRlcmluZyc6IFsnLWNyZWF0aW9uX2RhdGUnXSwKICAgICAgICAgICAgICAgICdwZXJtaXNzaW9ucyc6ICgoJ3JlYWRfc21zJywgJ0NhbiByZWFkIHNtcycpLCAoJ2Jyb3dzZV9zbXMnLCAnQ2FuIGJyb3dzZSBzbXMnKSksCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGJhc2VzPShsaWJ5YV9lbGVjdGlvbnMubGlieWFfYnJlYWQuQ2l0aXplbkZvcm1hdHRlck1peGluLCBsaWJ5YV9lbGVjdGlvbnMubGlieWFfYnJlYWQuSW5SZXNwb25zZVRvRm9ybWF0dGVyTWl4aW4sIG1vZGVscy5Nb2RlbCksCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkNyZWF0ZU1vZGVsKAogICAgICAgICAgICBuYW1lPSdSZWdpc3RyYXRpb25DZW50ZXInLAogICAgICAgICAgICBmaWVsZHM9WwogICAgICAgICAgICAgICAgKCdpZCcsIG1vZGVscy5BdXRvRmllbGQoYXV0b19jcmVhdGVkPVRydWUsIHByaW1hcnlfa2V5PVRydWUsIHNlcmlhbGl6ZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdJRCcpKSwKICAgICAgICAgICAgICAgICgnZGVsZXRlZCcsIG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdD1GYWxzZSwgdmVyYm9zZV9uYW1lPSdkZWxldGVkJykpLAogICAgICAgICAgICAgICAgKCdjcmVhdGlvbl9kYXRlJywgbW9kZWxzLkRhdGVUaW1lRmllbGQoZGVmYXVsdD1kamFuZ28udXRpbHMudGltZXpvbmUubm93LCBlZGl0YWJsZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdjcmVhdGlvbiBkYXRlJykpLAogICAgICAgICAgICAgICAgKCdtb2RpZmljYXRpb25fZGF0ZScsIG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGphbmdvLnV0aWxzLnRpbWV6b25lLm5vdywgZWRpdGFibGU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nbW9kaWZpY2F0aW9uIGRhdGUnKSksCiAgICAgICAgICAgICAgICAoJ2NlbnRlcl9pZCcsIG1vZGVscy5JbnRlZ2VyRmllbGQoZGJfaW5kZXg9VHJ1ZSwgdmFsaWRhdG9ycz1bZGphbmdvLmNvcmUudmFsaWRhdG9ycy5NaW5WYWx1ZVZhbGlkYXRvcigxMDAwMCksIGRqYW5nby5jb3JlLnZhbGlkYXRvcnMuTWF4VmFsdWVWYWxpZGF0b3IoOTk5OTkpXSwgdmVyYm9zZV9uYW1lPSdjZW50ZXIgaWQnKSksCiAgICAgICAgICAgICAgICAoJ25hbWUnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjU1LCB2ZXJib3NlX25hbWU9J25hbWUnKSksCiAgICAgICAgICAgICAgICAoJ21haGFsbGFfbmFtZScsIG1vZGVscy5DaGFyRmllbGQoYmxhbms9VHJ1ZSwgbWF4X2xlbmd0aD0yNTUsIHZlcmJvc2VfbmFtZT0nbWFoYWxsYSBuYW1lJykpLAogICAgICAgICAgICAgICAgKCd2aWxsYWdlX25hbWUnLCBtb2RlbHMuQ2hhckZpZWxkKGJsYW5rPVRydWUsIG1heF9sZW5ndGg9MjU1LCB2ZXJib3NlX25hbWU9J3ZpbGxhZ2UgbmFtZScpKSwKICAgICAgICAgICAgICAgICgnY2VudGVyX3R5cGUnLCBtb2RlbHMuUG9zaXRpdmVTbWFsbEludGVnZXJGaWVsZChjaG9pY2VzPVsoMSwgJ0dlbmVyYWwnKSwgKDIsICdEaXNwbGFjZWQnKSwgKDMsICdPaWwnKSwgKDQsICdEaXNhYmlsaXR5JyksICg1LCAnUmV2b2x1dGlvbicpLCAoNiwgJ0NvcHknKSwgKDcsICdTcGxpdCcpXSwgZGVmYXVsdD0xLCB2ZXJib3NlX25hbWU9J3R5cGUnKSksCiAgICAgICAgICAgICAgICAoJ2NlbnRlcl9sYXQnLCBtb2RlbHMuRGVjaW1hbEZpZWxkKGJsYW5rPVRydWUsIGRlY2ltYWxfcGxhY2VzPTgsIG1heF9kaWdpdHM9MTEsIG51bGw9VHJ1ZSwgdmFsaWRhdG9ycz1bZGphbmdvLmNvcmUudmFsaWRhdG9ycy5NYXhWYWx1ZVZhbGlkYXRvcihEZWNpbWFsKCc5MC4wJykpLCBkamFuZ28uY29yZS52YWxpZGF0b3JzLk1pblZhbHVlVmFsaWRhdG9yKERlY2ltYWwoJy05MC4wJykpXSwgdmVyYm9zZV9uYW1lPSdsYXRpdHVkZScpKSwKICAgICAgICAgICAgICAgICgnY2VudGVyX2xvbicsIG1vZGVscy5EZWNpbWFsRmllbGQoYmxhbms9VHJ1ZSwgZGVjaW1hbF9wbGFjZXM9OCwgbWF4X2RpZ2l0cz0xMSwgbnVsbD1UcnVlLCB2YWxpZGF0b3JzPVtkamFuZ28uY29yZS52YWxpZGF0b3JzLk1heFZhbHVlVmFsaWRhdG9yKERlY2ltYWwoJzE4MC4wJykpLCBkamFuZ28uY29yZS52YWxpZGF0b3JzLk1pblZhbHVlVmFsaWRhdG9yKERlY2ltYWwoJy0xODAuMCcpKV0sIHZlcmJvc2VfbmFtZT0nbG9uZ2l0dWRlJykpLAogICAgICAgICAgICAgICAgKCdyZWdfb3BlbicsIG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdD1UcnVlLCB2ZXJib3NlX25hbWU9J3N1cHBvcnQgZm9yIHJlZ2lzdHJhdGlvbnMnKSksCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICgnY29uc3RpdHVlbmN5JywgbW9kZWxzLkZvcmVpZ25LZXkoZGVmYXVsdD05OTksIG9uX2RlbGV0ZT1kamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uLkNBU0NBREUsIHRvPSdyZWdpc3Rlci5Db25zdGl0dWVuY3knLCB2ZXJib3NlX25hbWU9J2NvbnN0aXR1ZW5jeScpKSwKICAgICAgICAgICAgICAgICgnY29weV9vZicsIG1vZGVscy5Gb3JlaWduS2V5KGJsYW5rPVRydWUsIGRlZmF1bHQ9Tm9uZSwgbnVsbD1UcnVlLCBvbl9kZWxldGU9ZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbi5DQVNDQURFLCByZWxhdGVkX25hbWU9J2NvcGllZF9ieScsIHRvPSdyZWdpc3Rlci5SZWdpc3RyYXRpb25DZW50ZXInLCB2ZXJib3NlX25hbWU9J2NvcHkgb2YnKSksCiAgICAgICAgICAgICAgICAoJ29mZmljZScsIG1vZGVscy5Gb3JlaWduS2V5KGRlZmF1bHQ9OTk5LCBvbl9kZWxldGU9ZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbi5DQVNDQURFLCB0bz0ncmVnaXN0ZXIuT2ZmaWNlJywgdmVyYm9zZV9uYW1lPSdvZmZpY2UnKSksCiAgICAgICAgICAgICAgICAoJ3N1YmNvbnN0aXR1ZW5jeScsIG1vZGVscy5Gb3JlaWduS2V5KGRlZmF1bHQ9OTk5LCBvbl9kZWxldGU9ZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbi5DQVNDQURFLCByZWxhdGVkX25hbWU9J3JlZ2lzdHJhdGlvbl9jZW50ZXJzJywgdG89J3JlZ2lzdGVyLlN1YkNvbnN0aXR1ZW5jeScsIHZlcmJvc2VfbmFtZT0nc3ViY29uc3RpdHVlbmN5JykpLAo8fGZpbV9lbmR8Pg=="]
["c178b1f816f3dda865cb5b29533b51b7f084dda7-2","c178b1f816f3dda865cb5b29533b51b7f084dda7","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMiBvbiAyMDE5LTA1LTAzIDE0OjA0Cgpmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKaW1wb3J0IGRqYW5nby5jb3JlLnZhbGlkYXRvcnMKZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMsIG1vZGVscwppbXBvcnQgZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbgppbXBvcnQgZGphbmdvLnV0aWxzLnRpbWV6b25lCmltcG9ydCBsaWJ5YV9lbGVjdGlvbnMubGlieWFfYnJlYWQKaW1wb3J0IGxpYnlhX2VsZWN0aW9ucy5waG9uZV9udW1iZXJzCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBpbml0aWFsID0gVHJ1ZQoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ3JhcGlkc21zJywgJ19fZmlyc3RfXycpLAogICAgICAgICgnY2l2aWxfcmVnaXN0cnknLCAnX19maXJzdF9fJyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkNyZWF0ZU1vZGVsKAogICAgICAgICAgICBuYW1lPSdCbGFja2xpc3QnLAogICAgICAgICAgICBmaWVsZHM9WwogICAgICAgICAgICAgICAgKCdpZCcsIG1vZGVscy5BdXRvRmllbGQoYXV0b19jcmVhdGVkPVRydWUsIHByaW1hcnlfa2V5PVRydWUsIHNlcmlhbGl6ZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdJRCcpKSwKICAgICAgICAgICAgICAgICgnZGVsZXRlZCcsIG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdD1GYWxzZSwgdmVyYm9zZV9uYW1lPSdkZWxldGVkJykpLAogICAgICAgICAgICAgICAgKCdjcmVhdGlvbl9kYXRlJywgbW9kZWxzLkRhdGVUaW1lRmllbGQoZGVmYXVsdD1kamFuZ28udXRpbHMudGltZXpvbmUubm93LCBlZGl0YWJsZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdjcmVhdGlvbiBkYXRlJykpLAogICAgICAgICAgICAgICAgKCdtb2RpZmljYXRpb25fZGF0ZScsIG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGphbmdvLnV0aWxzLnRpbWV6b25lLm5vdywgZWRpdGFibGU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nbW9kaWZpY2F0aW9uIGRhdGUnKSksCiAgICAgICAgICAgICAgICAoJ3Bob25lX251bWJlcicsIGxpYnlhX2VsZWN0aW9ucy5waG9uZV9udW1iZXJzLlBob25lTnVtYmVyRmllbGQoZGJfaW5kZXg9VHJ1ZSwgbWF4X2xlbmd0aD0xMywgdmVyYm9zZV9uYW1lPSdwaG9uZSBudW1iZXInKSksCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG9wdGlvbnM9ewogICAgICAgICAgICAgICAgJ3ZlcmJvc2VfbmFtZSc6ICdibGFja2xpc3RlZCBudW1iZXInLAogICAgICAgICAgICAgICAgJ3ZlcmJvc2VfbmFtZV9wbHVyYWwnOiAnYmxhY2tsaXN0ZWQgbnVtYmVycycsCiAgICAgICAgICAgICAgICAnb3JkZXJpbmcnOiBbJ3Bob25lX251bWJlciddLAogICAgICAgICAgICAgICAgJ3Blcm1pc3Npb25zJzogKCgncmVhZF9ibGFja2xpc3QnLCAnQ2FuIHJlYWQgYmxhY2sgbGlzdCcpLCAoJ2Jyb3dzZV9ibGFja2xpc3QnLCAnQ2FuIGJyb3dzZSBibGFjayBsaXN0JykpLAogICAgICAgICAgICB9LAogICAgICAgICAgICBiYXNlcz0obGlieWFfZWxlY3Rpb25zLnBob25lX251bWJlcnMuRm9ybWF0dGVkUGhvbmVOdW1iZXJNaXhpbiwgbW9kZWxzLk1vZGVsKSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQ3JlYXRlTW9kZWwoCiAgICAgICAgICAgIG5hbWU9J0NvbnN0aXR1ZW5jeScsCiAgICAgICAgICAgIGZpZWxkcz1bCiAgICAgICAgICAgICAgICAoJ2RlbGV0ZWQnLCBtb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UsIHZlcmJvc2VfbmFtZT0nZGVsZXRlZCcpKSwKICAgICAgICAgICAgICAgICgnY3JlYXRpb25fZGF0ZScsIG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGphbmdvLnV0aWxzLnRpbWV6b25lLm5vdywgZWRpdGFibGU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nY3JlYXRpb24gZGF0ZScpKSwKICAgICAgICAgICAgICAgICgnbW9kaWZpY2F0aW9uX2RhdGUnLCBtb2RlbHMuRGF0ZVRpbWVGaWVsZChkZWZhdWx0PWRqYW5nby51dGlscy50aW1lem9uZS5ub3csIGVkaXRhYmxlPUZhbHNlLCB2ZXJib3NlX25hbWU9J21vZGlmaWNhdGlvbiBkYXRlJykpLAogICAgICAgICAgICAgICAgKCdpZCcsIG1vZGVscy5JbnRlZ2VyRmllbGQocHJpbWFyeV9rZXk9VHJ1ZSwgc2VyaWFsaXplPUZhbHNlLCB2ZXJib3NlX25hbWU9J2lkJykpLAogICAgICAgICAgICAgICAgKCduYW1lX2VuZ2xpc2gnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTI4LCB2ZXJib3NlX25hbWU9J25hbWUgKEVuZ2xpc2gpJykpLAogICAgICAgICAgICAgICAgKCduYW1lX2FyYWJpYycsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMjgsIHZlcmJvc2VfbmFtZT0nbmFtZSAoQXJhYmljKScpKSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgb3B0aW9ucz17CiAgICAgICAgICAgICAgICAndmVyYm9zZV9uYW1lJzogJ2NvbnN0aXR1ZW5jeScsCiAgICAgICAgICAgICAgICAndmVyYm9zZV9uYW1lX3BsdXJhbCc6ICdjb25zdGl0dWVuY2llcycsCiAgICAgICAgICAgICAgICAnb3JkZXJpbmcnOiBbJ2lkJ10sCiAgICAgICAgICAgICAgICAncGVybWlzc2lvbnMnOiAoKCdyZWFkX2NvbnN0aXR1ZW5jeScsICdDYW4gcmVhZCBjb25zdGl0dWVuY3knKSwgKCdicm93c2VfY29uc3RpdHVlbmN5JywgJ0NhbiBicm93c2UgY29uc3RpdHVlbmNpZXMnKSksCiAgICAgICAgICAgICAgICAnYWJzdHJhY3QnOiBGYWxzZSwKICAgICAgICAgICAgfSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQ3JlYXRlTW9kZWwoCiAgICAgICAgICAgIG5hbWU9J09mZmljZScsCiAgICAgICAgICAgIGZpZWxkcz1bCiAgICAgICAgICAgICAgICAoJ2RlbGV0ZWQnLCBtb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UsIHZlcmJvc2VfbmFtZT0nZGVsZXRlZCcpKSwKICAgICAgICAgICAgICAgICgnY3JlYXRpb25fZGF0ZScsIG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGphbmdvLnV0aWxzLnRpbWV6b25lLm5vdywgZWRpdGFibGU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nY3JlYXRpb24gZGF0ZScpKSwKICAgICAgICAgICAgICAgICgnbW9kaWZpY2F0aW9uX2RhdGUnLCBtb2RlbHMuRGF0ZVRpbWVGaWVsZChkZWZhdWx0PWRqYW5nby51dGlscy50aW1lem9uZS5ub3csIGVkaXRhYmxlPUZhbHNlLCB2ZXJib3NlX25hbWU9J21vZGlmaWNhdGlvbiBkYXRlJykpLAogICAgICAgICAgICAgICAgKCdpZCcsIG1vZGVscy5JbnRlZ2VyRmllbGQocHJpbWFyeV9rZXk9VHJ1ZSwgc2VyaWFsaXplPUZhbHNlLCB2ZXJib3NlX25hbWU9J2lkJykpLAogICAgICAgICAgICAgICAgKCduYW1lX2VuZ2xpc2gnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTI4LCB2ZXJib3NlX25hbWU9J25hbWUgKEVuZ2xpc2gpJykpLAogICAgICAgICAgICAgICAgKCduYW1lX2FyYWJpYycsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMjgsIHZlcmJvc2VfbmFtZT0nbmFtZSAoQXJhYmljKScpKSwKICAgICAgICAgICAgICAgICgncmVnaW9uJywgbW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzPVsoMCwgJ05vIFJlZ2lvbicpLCAoMSwgJ1dlc3QnKSwgKDIsICdTb3V0aCcpLCAoMywgJ0Vhc3QnKV0sIGRlZmF1bHQ9MCwgdmVyYm9zZV9uYW1lPSdyZWdpb24nKSksCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG9wdGlvbnM9ewogICAgICAgICAgICAgICAgJ3ZlcmJvc2VfbmFtZSc6ICdvZmZpY2UnLAogICAgICAgICAgICAgICAgJ3ZlcmJvc2VfbmFtZV9wbHVyYWwnOiAnb2ZmaWNlcycsCiAgICAgICAgICAgICAgICAnb3JkZXJpbmcnOiBbJ2lkJ10sCiAgICAgICAgICAgICAgICAncGVybWlzc2lvbnMnOiAoKCdyZWFkX29mZmljZScsICdDYW4gcmVhZCBvZmZpY2UnKSwgKCdicm93c2Vfb2ZmaWNlJywgJ0NhbiBicm93c2Ugb2ZmaWNlcycpKSwKICAgICAgICAgICAgICAgICdhYnN0cmFjdCc6IEZhbHNlLAogICAgICAgICAgICB9LAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5DcmVhdGVNb2RlbCgKICAgICAgICAgICAgbmFtZT0nU3ViQ29uc3RpdHVlbmN5JywKICAgICAgICAgICAgZmllbGRzPVsKICAgICAgICAgICAgICAgICgnZGVsZXRlZCcsIG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdD1GYWxzZSwgdmVyYm9zZV9uYW1lPSdkZWxldGVkJykpLAogICAgICAgICAgICAgICAgKCdjcmVhdGlvbl9kYXRlJywgbW9kZWxzLkRhdGVUaW1lRmllbGQoZGVmYXVsdD1kamFuZ28udXRpbHMudGltZXpvbmUubm93LCBlZGl0YWJsZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdjcmVhdGlvbiBkYXRlJykpLAogICAgICAgICAgICAgICAgKCdtb2RpZmljYXRpb25fZGF0ZScsIG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGphbmdvLnV0aWxzLnRpbWV6b25lLm5vdywgZWRpdGFibGU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nbW9kaWZpY2F0aW9uIGRhdGUnKSksCiAgICAgICAgICAgICAgICAoJ2lkJywgbW9kZWxzLkludGVnZXJGaWVsZChwcmltYXJ5X2tleT1UcnVlLCBzZXJpYWxpemU9RmFsc2UsIHZlcmJvc2VfbmFtZT0naWQnKSksCiAgICAgICAgICAgICAgICAoJ25hbWVfZW5nbGlzaCcsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMjgsIHZlcmJvc2VfbmFtZT0nbmFtZSAoRW5nbGlzaCknKSksCiAgICAgICAgICAgICAgICAoJ25hbWVfYXJhYmljJywgbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEyOCwgdmVyYm9zZV9uYW1lPSduYW1lIChBcmFiaWMpJykpLAogICAgICAgICAgICBdLAogICAgICAgICAgICBvcHRpb25zPXsKICAgICAgICAgICAgICAgICd2ZXJib3NlX25hbWUnOiAnc3ViY29uc3RpdHVlbmN5JywKICAgICAgICAgICAgICAgICd2ZXJib3NlX25hbWVfcGx1cmFsJzogJ3N1YmNvbnN0aXR1ZW5jaWVzJywKICAgICAgICAgICAgICAgICdvcmRlcmluZyc6IFsnaWQnXSwKICAgICAgICAgICAgICAgICdwZXJtaXNzaW9ucyc6ICgoJ3JlYWRfc3ViY29uc3RpdHVlbmN5JywgJ0NhbiByZWFkIHN1YmNvbnN0aXR1ZW5jeScpLCAoJ2Jyb3dzZV9zdWJjb25zdGl0dWVuY3knLCAnQ2FuIGJyb3dzZSBzdWJjb25zdGl0dWVuY2llcycpKSwKICAgICAgICAgICAgICAgICdhYnN0cmFjdCc6IEZhbHNlLAogICAgICAgICAgICB9LAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5DcmVhdGVNb2RlbCgKICAgICAgICAgICAgbmFtZT0nV2hpdGVsaXN0JywKICAgICAgICAgICAgZmllbGRzPVsKICAgICAgICAgICAgICAgICgnaWQnLCBtb2RlbHMuQXV0b0ZpZWxkKGF1dG9fY3JlYXRlZD1UcnVlLCBwcmltYXJ5X2tleT1UcnVlLCBzZXJpYWxpemU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nSUQnKSksCiAgICAgICAgICAgICAgICAoJ2RlbGV0ZWQnLCBtb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UsIHZlcmJvc2VfbmFtZT0nZGVsZXRlZCcpKSwKICAgICAgICAgICAgICAgICgnY3JlYXRpb25fZGF0ZScsIG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGphbmdvLnV0aWxzLnRpbWV6b25lLm5vdywgZWRpdGFibGU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nY3JlYXRpb24gZGF0ZScpKSwKICAgICAgICAgICAgICAgICgnbW9kaWZpY2F0aW9uX2RhdGUnLCBtb2RlbHMuRGF0ZVRpbWVGaWVsZChkZWZhdWx0PWRqYW5nby51dGlscy50aW1lem9uZS5ub3csIGVkaXRhYmxlPUZhbHNlLCB2ZXJib3NlX25hbWU9J21vZGlmaWNhdGlvbiBkYXRlJykpLAogICAgICAgICAgICAgICAgKCdwaG9uZV9udW1iZXInLCBsaWJ5YV9lbGVjdGlvbnMucGhvbmVfbnVtYmVycy5QaG9uZU51bWJlckZpZWxkKGRiX2luZGV4PVRydWUsIG1heF9sZW5ndGg9MTMsIHZlcmJvc2VfbmFtZT0ncGhvbmUgbnVtYmVyJykpLAogICAgICAgICAgICBdLAogICAgICAgICAgICBvcHRpb25zPXsKICAgICAgICAgICAgICAgICd2ZXJib3NlX25hbWUnOiAnd2hpdGVsaXN0ZWQgbnVtYmVyJywKICAgICAgICAgICAgICAgICd2ZXJib3NlX25hbWVfcGx1cmFsJzogJ3doaXRlbGlzdGVkIG51bWJlcnMnLAogICAgICAgICAgICAgICAgJ29yZGVyaW5nJzogWydwaG9uZV9udW1iZXInXSwKICAgICAgICAgICAgICAgICdwZXJtaXNzaW9ucyc6ICgoJ3JlYWRfd2hpdGVsaXN0JywgJ0NhbiByZWFkIHdoaXRlbGlzdCcpLCAoJ2Jyb3dzZV93aGl0ZWxpc3QnLCAnQ2FuIGJyb3dzZSB3aGl0ZWxpc3QnKSksCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGJhc2VzPShsaWJ5YV9lbGVjdGlvbnMucGhvbmVfbnVtYmVycy5Gb3JtYXR0ZWRQaG9uZU51bWJlck1peGluLCBtb2RlbHMuTW9kZWwpLAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5DcmVhdGVNb2RlbCgKICAgICAgICAgICAgbmFtZT0nU01TJywKICAgICAgICAgICAgZmllbGRzPVsKICAgICAgICAgICAgICAgICgnaWQnLCBtb2RlbHMuQXV0b0ZpZWxkKGF1dG9fY3JlYXRlZD1UcnVlLCBwcmltYXJ5X2tleT1UcnVlLCBzZXJpYWxpemU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nSUQnKSksCiAgICAgICAgICAgICAgICAoJ2RlbGV0ZWQnLCBtb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UsIHZlcmJvc2VfbmFtZT0nZGVsZXRlZCcpKSwKICAgICAgICAgICAgICAgICgnY3JlYXRpb25fZGF0ZScsIG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGphbmdvLnV0aWxzLnRpbWV6b25lLm5vdywgZWRpdGFibGU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nY3JlYXRpb24gZGF0ZScpKSwKICAgICAgICAgICAgICAgICgnbW9kaWZpY2F0aW9uX2RhdGUnLCBtb2RlbHMuRGF0ZVRpbWVGaWVsZChkZWZhdWx0PWRqYW5nby51dGlscy50aW1lem9uZS5ub3csIGVkaXRhYmxlPUZhbHNlLCB2ZXJib3NlX25hbWU9J21vZGlmaWNhdGlvbiBkYXRlJykpLAogICAgICAgICAgICAgICAgKCdmcm9tX251bWJlcicsIG1vZGVscy5DaGFyRmllbGQoZGJfaW5kZXg9VHJ1ZSwgbWF4X2xlbmd0aD0xNSwgdmVyYm9zZV9uYW1lPSdmcm9tIG51bWJlcicpKSwKICAgICAgICAgICAgICAgICgndG9fbnVtYmVyJywgbW9kZWxzLkNoYXJGaWVsZChkYl9pbmRleD1UcnVlLCBtYXhfbGVuZ3RoPTE1LCB2ZXJib3NlX25hbWU9J3RvIG51bWJlcicpKSwKICAgICAgICAgICAgICAgICgnZGlyZWN0aW9uJywgbW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzPVsoMSwgJ0luY29taW5nJyksICgyLCAnT3V0Z29pbmcnKV0sIGRiX2luZGV4PVRydWUsIHZlcmJvc2VfbmFtZT0nZGlyZWN0aW9uJykpLAogICAgICAgICAgICAgICAgKCdtc2dfdHlwZScsIG1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcz1bKDMsICdSZWdpc3RyYXRpb24nKSwgKDUsICdJbnZhbGlkIGZvcm1hdCcpLCAoNiwgJ011bHRpcGxlIHByb2JsZW1zJyksICg3LCAnSW52YWxpZCByZWdpc3RyYXRpb24gY2VudHJlIGNvZGUgbGVuZ3RoJyksICg4LCAnTm8gc3VjaCByZWdpc3RyYXRpb24gY2VudHJlIGZvdW5kJyksICg5LCAnTm90IGVub3VnaCBlbm91Z2ggTmF0aW9uYWwgSUQgZGlnaXRzJyksICgxMSwgJ0ludmFsaWQgdmFsaWQgTmF0aW9uYWwgSUQnKSwgKDEzLCAnVW5rbm93bicpLCAoMTQsICdSZWdpc3RyYXRpb24gdXBkYXRlJyksICgxNSwgJ1JlZ2lzdHJhdGlvbiBDZW50ZXIgcXVlcnknKSwgKDE2LCAnSW52YWxpZCBGb3JtIElEJyksICgxNywgJ1Bob25lIGFjdGl2YXRpb24nKSwgKDE4LCAnRGFpbHkgUmVwb3J0JyksICgxOSwgJ0RhaWx5IFJlcG9ydCBpbnZhbGlkJyksICgyMCwgJ0J1bGsgT3V0Z29pbmcgTWVzc2FnZScpLCAoMjEsICdQb2xsaW5nIFJlcG9ydCcpLCAoMjIsICdQb2xsaW5nIFJlcG9ydCBpbnZhbGlkJyksICgyMywgJ1Bob25lIG51bWJlciBub3QgYWN0aXZhdGVkJyldLCB2ZXJib3NlX25hbWU9J21lc3NhZ2UgdHlwZScpKSwKICAgICAgICAgICAgICAgICgnb3JkZXInLCBtb2RlbHMuSW50ZWdlckZpZWxkKGJsYW5rPVRydWUsIG51bGw9VHJ1ZSwgdmVyYm9zZV9uYW1lPSdvcmRlcicpKSwKICAgICAgICAgICAgICAgICgnbWVzc2FnZScsIG1vZGVscy5UZXh0RmllbGQoZGJfaW5kZXg9VHJ1ZSwgdmVyYm9zZV9uYW1lPSdtZXNzYWdlJykpLAogICAgICAgICAgICAgICAgKCdtZXNzYWdlX2NvZGUnLCBtb2RlbHMuSW50ZWdlckZpZWxkKGRiX2luZGV4PVRydWUsIGRlZmF1bHQ9MCwgaGVscF90ZXh0PSJJZiB3ZSdyZSBzZW5kaW5nIG9uZSBvZiBvdXIgY2FubmVkIG1lc3NhZ2VzLCB0aGlzIGlzIHRoZSBtZXNzYWdlIGNvZGUuIiwgdmVyYm9zZV9uYW1lPSdtZXNzYWdlIGNvZGUnKSksCiAgICAgICAgICAgICAgICAoJ3V1aWQnLCBtb2RlbHMuQ2hhckZpZWxkKGJsYW5rPVRydWUsIGRiX2luZGV4PVRydWUsIG1heF9sZW5ndGg9NTAsIHZlcmJvc2VfbmFtZT0ndXVpZCcpKSwKICAgICAgICAgICAgICAgICgnaXNfYXVkaXRlZCcsIG1vZGVscy5Cb29sZWFuRmllbGQoZGJfaW5kZXg9VHJ1ZSwgZGVmYXVsdD1GYWxzZSwgdmVyYm9zZV9uYW1lPSdpcyBhdWRpdGVkJykpLAogICAgICAgICAgICAgICAgKCduZWVkX3RvX2Fub255bWl6ZScsIG1vZGVscy5Cb29sZWFuRmllbGQoZGJfaW5kZXg9VHJ1ZSwgZGVmYXVsdD1GYWxzZSwgdmVyYm9zZV9uYW1lPSduZWVkIHRvIGFub255bWl6ZScpKSwKICAgICAgICAgICAgICAgICgnY2FycmllcicsIG1vZGVscy5Gb3JlaWduS2V5KG9uX2RlbGV0ZT1kamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uLkNBU0NBREUsIHRvPSdyYXBpZHNtcy5CYWNrZW5kJywgdmVyYm9zZV9uYW1lPSdjYXJyaWVyJykpLAogICAgICAgICAgICAgICAgKCdjaXRpemVuJywgbW9kZWxzLkZvcmVpZ25LZXkoYmxhbms9VHJ1ZSwgbnVsbD1UcnVlLCBvbl9kZWxldGU9ZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbi5DQVNDQURFLCByZWxhdGVkX25hbWU9J21lc3NhZ2VzJywgdG89J2NpdmlsX3JlZ2lzdHJ5LkNpdGl6ZW4nLCB2ZXJib3NlX25hbWU9J2NpdGl6ZW4nKSksCiAgICAgICAgICAgICAgICAoJ2luX3Jlc3BvbnNlX3RvJywgbW9kZWxzLkZvcmVpZ25LZXkoYmxhbms9VHJ1ZSwgbnVsbD1UcnVlLCBvbl9kZWxldGU9ZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbi5DQVNDQURFLCByZWxhdGVkX25hbWU9J3Jlc3BvbnNlcycsIHRvPSdyZWdpc3Rlci5TTVMnLCB2ZXJib3NlX25hbWU9J2luIHJlc3BvbnNlIHRvJykpLAogICAgICAgICAgICBdLAogICAgICAgICAgICBvcHRpb25zPXsKICAgICAgICAgICAgICAgICd2ZXJib3NlX25hbWUnOiAnc21zJywKICAgICAgICAgICAgICAgICd2ZXJib3NlX25hbWVfcGx1cmFsJzogJ3Ntc2VzJywKICAgICAgICAgICAgICAgICdvcmRlcmluZyc6IFsnLWNyZWF0aW9uX2RhdGUnXSwKICAgICAgICAgICAgICAgICdwZXJtaXNzaW9ucyc6ICgoJ3JlYWRfc21zJywgJ0NhbiByZWFkIHNtcycpLCAoJ2Jyb3dzZV9zbXMnLCAnQ2FuIGJyb3dzZSBzbXMnKSksCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGJhc2VzPShsaWJ5YV9lbGVjdGlvbnMubGlieWFfYnJlYWQuQ2l0aXplbkZvcm1hdHRlck1peGluLCBsaWJ5YV9lbGVjdGlvbnMubGlieWFfYnJlYWQuSW5SZXNwb25zZVRvRm9ybWF0dGVyTWl4aW4sIG1vZGVscy5Nb2RlbCksCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkNyZWF0ZU1vZGVsKAogICAgICAgICAgICBuYW1lPSdSZWdpc3RyYXRpb25DZW50ZXInLAogICAgICAgICAgICBmaWVsZHM9WwogICAgICAgICAgICAgICAgKCdpZCcsIG1vZGVscy5BdXRvRmllbGQoYXV0b19jcmVhdGVkPVRydWUsIHByaW1hcnlfa2V5PVRydWUsIHNlcmlhbGl6ZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdJRCcpKSwKICAgICAgICAgICAgICAgICgnZGVsZXRlZCcsIG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdD1GYWxzZSwgdmVyYm9zZV9uYW1lPSdkZWxldGVkJykpLAogICAgICAgICAgICAgICAgKCdjcmVhdGlvbl9kYXRlJywgbW9kZWxzLkRhdGVUaW1lRmllbGQoZGVmYXVsdD1kamFuZ28udXRpbHMudGltZXpvbmUubm93LCBlZGl0YWJsZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdjcmVhdGlvbiBkYXRlJykpLAogICAgICAgICAgICAgICAgKCdtb2RpZmljYXRpb25fZGF0ZScsIG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGphbmdvLnV0aWxzLnRpbWV6b25lLm5vdywgZWRpdGFibGU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nbW9kaWZpY2F0aW9uIGRhdGUnKSksCiAgICAgICAgICAgICAgICAoJ2NlbnRlcl9pZCcsIG1vZGVscy5JbnRlZ2VyRmllbGQoZGJfaW5kZXg9VHJ1ZSwgdmFsaWRhdG9ycz1bZGphbmdvLmNvcmUudmFsaWRhdG9ycy5NaW5WYWx1ZVZhbGlkYXRvcigxMDAwMCksIGRqYW5nby5jb3JlLnZhbGlkYXRvcnMuTWF4VmFsdWVWYWxpZGF0b3IoOTk5OTkpXSwgdmVyYm9zZV9uYW1lPSdjZW50ZXIgaWQnKSksCiAgICAgICAgICAgICAgICAoJ25hbWUnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjU1LCB2ZXJib3NlX25hbWU9J25hbWUnKSksCiAgICAgICAgICAgICAgICAoJ21haGFsbGFfbmFtZScsIG1vZGVscy5DaGFyRmllbGQoYmxhbms9VHJ1ZSwgbWF4X2xlbmd0aD0yNTUsIHZlcmJvc2VfbmFtZT0nbWFoYWxsYSBuYW1lJykpLAogICAgICAgICAgICAgICAgKCd2aWxsYWdlX25hbWUnLCBtb2RlbHMuQ2hhckZpZWxkKGJsYW5rPVRydWUsIG1heF9sZW5ndGg9MjU1LCB2ZXJib3NlX25hbWU9J3ZpbGxhZ2UgbmFtZScpKSwKICAgICAgICAgICAgICAgICgnY2VudGVyX3R5cGUnLCBtb2RlbHMuUG9zaXRpdmVTbWFsbEludGVnZXJGaWVsZChjaG9pY2VzPVsoMSwgJ0dlbmVyYWwnKSwgKDIsICdEaXNwbGFjZWQnKSwgKDMsICdPaWwnKSwgKDQsICdEaXNhYmlsaXR5JyksICg1LCAnUmV2b2x1dGlvbicpLCAoNiwgJ0NvcHknKSwgKDcsICdTcGxpdCcpXSwgZGVmYXVsdD0xLCB2ZXJib3NlX25hbWU9J3R5cGUnKSksCiAgICAgICAgICAgICAgICAoJ2NlbnRlcl9sYXQnLCBtb2RlbHMuRGVjaW1hbEZpZWxkKGJsYW5rPVRydWUsIGRlY2ltYWxfcGxhY2VzPTgsIG1heF9kaWdpdHM9MTEsIG51bGw9VHJ1ZSwgdmFsaWRhdG9ycz1bZGphbmdvLmNvcmUudmFsaWRhdG9ycy5NYXhWYWx1ZVZhbGlkYXRvcihEZWNpbWFsKCc5MC4wJykpLCBkamFuZ28uY29yZS52YWxpZGF0b3JzLk1pblZhbHVlVmFsaWRhdG9yKERlY2ltYWwoJy05MC4wJykpXSwgdmVyYm9zZV9uYW1lPSdsYXRpdHVkZScpKSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgKCdjZW50ZXJfbG9uJywgbW9kZWxzLkRlY2ltYWxGaWVsZChibGFuaz1UcnVlLCBkZWNpbWFsX3BsYWNlcz04LCBtYXhfZGlnaXRzPTExLCBudWxsPVRydWUsIHZhbGlkYXRvcnM9W2RqYW5nby5jb3JlLnZhbGlkYXRvcnMuTWF4VmFsdWVWYWxpZGF0b3IoRGVjaW1hbCgnMTgwLjAnKSksIGRqYW5nby5jb3JlLnZhbGlkYXRvcnMuTWluVmFsdWVWYWxpZGF0b3IoRGVjaW1hbCgnLTE4MC4wJykpXSwgdmVyYm9zZV9uYW1lPSdsb25naXR1ZGUnKSksCiAgICAgICAgICAgICAgICAoJ3JlZ19vcGVuJywgbW9kZWxzLkJvb2xlYW5GaWVsZChkZWZhdWx0PVRydWUsIHZlcmJvc2VfbmFtZT0nc3VwcG9ydCBmb3IgcmVnaXN0cmF0aW9ucycpKSwKICAgICAgICAgICAgICAgICgnY29uc3RpdHVlbmN5JywgbW9kZWxzLkZvcmVpZ25LZXkoZGVmYXVsdD05OTksIG9uX2RlbGV0ZT1kamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uLkNBU0NBREUsIHRvPSdyZWdpc3Rlci5Db25zdGl0dWVuY3knLCB2ZXJib3NlX25hbWU9J2NvbnN0aXR1ZW5jeScpKSwKICAgICAgICAgICAgICAgICgnY29weV9vZicsIG1vZGVscy5Gb3JlaWduS2V5KGJsYW5rPVRydWUsIGRlZmF1bHQ9Tm9uZSwgbnVsbD1UcnVlLCBvbl9kZWxldGU9ZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbi5DQVNDQURFLCByZWxhdGVkX25hbWU9J2NvcGllZF9ieScsIHRvPSdyZWdpc3Rlci5SZWdpc3RyYXRpb25DZW50ZXInLCB2ZXJib3NlX25hbWU9J2NvcHkgb2YnKSksCjx8ZmltX2VuZHw+"]
["c178b1f816f3dda865cb5b29533b51b7f084dda7-3","c178b1f816f3dda865cb5b29533b51b7f084dda7",{"$cut":{"chars":22664,"head":"PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMiBvbiAyMDE5LTA1LTAzIDE0OjA0Cgpmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKaW1wb3J0IGRqYW5nby5jb3JlLnZhbGlkYXRvcnMKZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMsIG1vZGVscwppbXBvcnQgZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbgppbXBvcnQgZGphbmdvLnV0aWxzLnRpbWV6b25lCmltcG9ydCBsaWJ5YV9lbGVjdGlvbnMubGlieWFfYnJlYWQKaW1wb3J0IGxpYnlhX2VsZWN0aW9ucy5waG9uZV9udW1iZXJzCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBpbml0aWFsID0gVHJ1ZQoKICAgIGRlcGVuZGVuY2llcyA9IFsKPHxmaW1faG9sZXw+CiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkNyZWF0ZU1vZGVsKAogICAgICAgICAgICBuYW1lPSdCbGFja2xpc3QnLAogICAgICAgICAgICBmaWVsZHM9WwogICAgICAgICAgICAgICAgKCdpZCcsIG1vZGVscy5BdXRvRmllbGQoYXV0b19jcmVhdGVkPVRydWUsIHByaW1hcnlfa2V5PVRydWUsIHNlcmlhbGl6ZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdJRCcpKSwKICAgICAgICAgICAgICAgICgnZGVsZXRlZCcsIG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdD1GYWxzZSwgdmVyYm9zZV9uYW1lPSdkZWxldGVkJykpLAogICAgICAgICAgICAgICAgKCdjcmVhdGlvbl9kYXRlJywgbW9kZWxzLkRhdGVUaW1lRmllbGQoZGVmYXVsdD1kamFuZ28udXRpbHMudGltZXpvbmUubm93LCBlZGl0YWJsZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdjcmVhdGlvbiBkYXRlJykpLAogICAgICAgICAgICAgICAgKCdtb2RpZmljYXRpb25fZGF0ZScsIG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGphbmdvLnV0aWxzLnRpbWV6b25lLm5vdywgZWRpdGFibGU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nbW9kaWZpY2F0aW9uIGRhdGUnKSksCiAgICAgICAgICAgICAgICAoJ3Bob25lX251bWJlcicsIGxpYnlhX2VsZWN0aW9ucy5waG9uZV9udW1iZXJzLlBob25lTnVtYmVyRmllbGQoZGJfaW5kZXg9VHJ1ZSwgbWF4X2xlbmd0aD0xMywgdmVyYm9zZV9uYW1lPSdwaG9uZSBudW1iZXInKSksCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG9wdGlvbnM9ewogICAgICAgICAgICAgICAgJ3ZlcmJvc2VfbmFtZSc6ICdibGFja2xpc3RlZCBudW1iZXInLAogICAgICAgICAgICAgICAgJ3ZlcmJvc2VfbmFtZV9wbHVyYWwnOiAnYmxhY2tsaXN0ZWQgbnVtYmVycycsCiAgICAgICAgICAgICAgICAnb3JkZXJpbmcnOiBbJ3Bob25lX251bWJlciddLAogICAgICAgICAgICAgICAgJ3Blcm1pc3Npb25zJzogKCgncmVhZF9ibGFja2xpc3QnLCAnQ2FuIHJlYWQgYmxhY2sgbGlzdCcpLCAoJ2Jyb3dzZV9ibGFja2xpc3QnLCAnQ2FuIGJyb3dzZSBibGFjayBsaXN0JykpLAogICAgICAgICAgICB9LAogICAgICAgICAgICBiYXNlcz0obGlieWFfZWxlY3Rpb25zLnBob25lX251bWJlcnMuRm9ybWF0dGVkUGhvbmVOdW1iZXJNaXhpbiwgbW9kZWxzLk1vZGVsKSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQ3JlYXRlTW9kZWwoCiAgICAgICAgICAgIG5hbWU9J0NvbnN0aXR1ZW5jeScsCiAgICAgICAgICAgIGZpZWxkcz1bCiAgICAgICAgICAgICAgICAoJ2RlbGV0ZWQnLCBtb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UsIHZlcmJvc2VfbmFtZT0nZGVsZXRlZCcpKSwKICAgICAgICAgICAgICAgICgnY3JlYXRpb25fZGF0ZScsIG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGphbmdvLnV0aWxzLnRpbWV6b25lLm5vdywgZWRpdGFibGU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nY3JlYXRpb24gZGF0ZScpKSwKICAgICAgICAgICAgICAgICgnbW9kaWZpY2F0aW9uX2RhdGUnLCBtb2RlbHMuRGF0ZVRpbWVGaWVsZChkZWZhdWx0PWRqYW5nby51dGlscy50aW1lem9uZS5ub3csIGVkaXRhYmxlPUZhbHNlLCB2ZXJib3NlX25hbWU9J21vZGlmaWNhdGlvbiBkYXRlJykpLAogICAgICAgICAgICAgICAgKCdpZCcsIG1vZGVscy5JbnRlZ2VyRmllbGQocHJpbWFyeV9rZXk9VHJ1ZSwgc2VyaWFsaXplPUZhbHNlLCB2ZXJib3NlX25hbWU9J2lkJykpLAogICAgICAgICAgICAgICAgKCduYW1lX2VuZ2xpc2gnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTI4LCB2ZXJib3NlX25hbWU9J25hbWUgKEVuZ2xpc2gpJykpLAogICAgICAgICAgICAgICAgKCduYW1lX2FyYWJpYycsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMjgsIHZlcmJvc2VfbmFtZT0nbmFtZSAoQXJhYmljKScpKSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgb3B0aW9ucz17CiAgICAgICAgICAgICAgICAndmVyYm9zZV9uYW1lJzogJ2NvbnN0aXR1ZW5jeScsCiAgICAgICAgICAgICAgICAndmVyYm9zZV9uYW1lX3BsdXJhbCc6ICdjb25zdGl0dWVuY2llcycsCiAgICAgICAgICAgICAgICAnb3JkZXJpbmcnOiBbJ2lkJ10sCiAgICAgICAgICAgICAgICAncGVybWlzc2lvbnMnOiAoKCdyZWFkX2NvbnN0aXR1ZW5jeScsICdDYW4gcmVhZCBjb25zdGl0dWVuY3knKSwgKCdicm93c2VfY29uc3RpdHVlbmN5JywgJ0NhbiBicm93c2UgY29uc3RpdHVlbmNpZXMnKSksCiAgICAgICAgICAgICAgICAnYWJzdHJhY3QnOiBGYWxzZSwKICAgICAgICAgICAgfSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQ3JlYXRlTW9kZWwoCiAgICAgICAgICAgIG5hbWU9J09mZmljZScsCiAgICAgICAgICAgIGZpZWxkcz1bCiAgICAgICAgICAgICAgICAoJ2RlbGV0ZWQnLCBtb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UsIHZlcmJvc2VfbmFtZT0nZGVsZXRlZCcpKSwKICAgICAgICAgICAgICAgICgnY3JlYXRpb25fZGF0ZScsIG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGphbmdvLnV0aWxzLnRpbWV6b25lLm5vdywgZWRpdGFibGU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nY3JlYXRpb24gZGF0ZScpKSwKICAgICAgICAgICAgICAgICgnbW9kaWZpY2F0aW9uX2RhdGUnLCBtb2RlbHMuRGF0ZVRpbWVGaWVsZChkZWZhdWx0PWRq"}}]
["6b8b3e57ee3e15532c96608ccbca414bd8836aaf-1","6b8b3e57ee3e15532c96608ccbca414bd8836aaf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQpmcm9tIGtlcmFzIGltcG9ydCBiYWNrZW5kIGFzIEsKZnJvbSBrZXJhcy5jYWxsYmFja3MgaW1wb3J0IENhbGxiYWNrCgpmcm9tIC5pbmZlcmVuY2UgaW1wb3J0IEJhc2ljSW5mZXJlbmNlCmZyb20gLmlvX3V0aWxzIGltcG9ydCBsb2dnaW5nCgoKY2xhc3MgTG9nTGVhcm5pbmdSYXRlKENhbGxiYWNrKToKICAgIGRlZiBvbl9lcG9jaF9lbmQoc2VsZiwgZXBvY2gsIGxvZ3MpOgogICAgICAgIGxvZ3NbJ2xlYXJuaW5nX3JhdGUnXSA9IEsuZ2V0X3ZhbHVlKHNlbGYubW9kZWwub3B0aW1pemVyLmxyKQoKCmNsYXNzIExvZ1RpbWVzdGFtcChDYWxsYmFjayk6CiAgICBkZWYgb25fZXBvY2hfYmVnaW4oc2VsZiwgZXBvY2gsIGxvZ3MpOgogICAgICAgIHNlbGYuX3RzX3N0YXJ0ID0gc2VsZi5fZ2V0X2N1cnJlbnRfdHMoKQoKICAgIGRlZiBvbl9lcG9jaF9lbmQoc2VsZiwgZXBvY2gsIGxvZ3MpOgogICAgICAgIGxvZ3NbJ3RzX3N0YXJ0J10gPSBzZWxmLl90c19zdGFydAogICAgICAgIGxvZ3NbJ3RzX2VuZCddID0gc2VsZi5fZ2V0X2N1cnJlbnRfdHMoKQoKICAgIGRlZiBfZ2V0X2N1cnJlbnRfdHMoc2VsZik6CiAgICAgICAgIyBXb3JrYXJvdW5kIGZvciBhIENTVkxvZ2dlcidzIGJ1ZwogICAgICAgIGNsYXNzIE5vdEl0ZXJhYmxlU3RyKG9iamVjdCk6CiAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CiAgICAgICAgICAgICAgICBzZWxmLl92YWx1ZSA9IHZhbHVlCgogICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZQoKICAgICAgICByZXR1cm4gTm90SXRlcmFibGVTdHIoZGF0ZXRpbWUudXRjbm93KCkuaXNvZm9ybWF0KCcgJykpCgoKY2xhc3MgTG9nTWV0cmljcyhDYWxsYmFjayk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YXNldF9wcm92aWRlciwgcGVyaW9kPTEpOgogICAgICAgIHN1cGVyKExvZ01ldHJpY3MsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLl9kYXRhc2V0X3Byb3ZpZGVyID0gZGF0YXNldF9wcm92aWRlcgogICAgICAgIHNlbGYuX3BlcmlvZCA9IHBlcmlvZAoKICAgIGRlZiBvbl90cmFpbl9iZWdpbihzZWxmLCBsb2dzKToKICAgICAgICAjIEluaXRpYWxpemF0aW9uIGlzIGhlcmUsIG5vdCBpbiBfX2luaXRfXyBiZWNhdXNlIGluIHRoZXJlIHNlbGYubW9kZWwKICAgICAgICAjIGlzIG5vdCBpbml0aWFsaXplZCB5ZXQKICAgICAgICBzZWxmLl9pbmZlcmVuY2UgPSBCYXNpY0luZmVyZW5jZShzZWxmLm1vZGVsLCBzZWxmLl9kYXRhc2V0X3Byb3ZpZGVyKQogICAgICAgIHNlbGYuX29sZF9sb2dzID0ge30KCiAgICBkZWYgb25fZXBvY2hfZW5kKHNlbGYsIGVwb2NoLCBsb2dzKToKICAgICAgICBpZiBlcG9jaCAlIHNlbGYuX3BlcmlvZCAhPSAwOgogICAgICAgICAgICBsb2dzLnVwZGF0ZShzZWxmLl9vbGRfbG9ncykKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIG5ld19sb2dzID0ge30KICAgICAgICBuZXdfbG9ncy51cGRhdGUoe2s6IG5wLmZsb2F0MzIodikgZm9yIGssIHYKICAgICAgICAgICAgICAgICAgICAgICAgIGluIHNlbGYuX2luZmVyZW5jZS5ldmFsdWF0ZV90cmFpbmluZ19zZXQoKS5pdGVtcygpfSkKICAgICAgICBuZXdfbG9ncy51cGRhdGUoeyd2YWxfJyArIGs6IG5wLmZsb2F0MzIodikgZm9yIGssIHYKICAgICAgICAgICAgICAgICAgICAgICAgIGluIHNlbGYuX2luZmVyZW5jZS5ldmFsdWF0ZV92YWxpZGF0aW9uX3NldCgpLml0ZW1zKCl9KQogICAgICAgIGxvZ3MudXBkYXRlKG5ld19sb2dzKQogICAgICAgIHNlbGYuX29sZF9sb2dzID0gbmV3X2xvZ3MKCgpjbGFzcyBTdG9wQWZ0ZXJUaW1lZGVsdGEoQ2FsbGJhY2spOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpbWVkZWx0YSwgdmVyYm9zZT0wKToKICAgICAgICBzdXBlcihTdG9wQWZ0ZXJUaW1lZGVsdGEsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLl90aW1lZGVsdGEgPSB0aW1lZGVsdGEKICAgICAgICBzZWxmLl92ZXJib3NlID0gdmVyYm9zZQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIG9uX3RyYWluX2JlZ2luKHNlbGYsIGxvZ3MpOgogICAgICAgIHNlbGYuX2R0X3N0YXJ0ID0gZGF0ZXRpbWUudXRjbm93KCkKICAgICAgICBzZWxmLl9zdG9wcGVkX2Vwb2NoID0gTm9uZQoKPHxmaW1fZW5kfD4="]
["6b8b3e57ee3e15532c96608ccbca414bd8836aaf-2","6b8b3e57ee3e15532c96608ccbca414bd8836aaf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQpmcm9tIGtlcmFzIGltcG9ydCBiYWNrZW5kIGFzIEsKZnJvbSBrZXJhcy5jYWxsYmFja3MgaW1wb3J0IENhbGxiYWNrCgpmcm9tIC5pbmZlcmVuY2UgaW1wb3J0IEJhc2ljSW5mZXJlbmNlCmZyb20gLmlvX3V0aWxzIGltcG9ydCBsb2dnaW5nCgoKY2xhc3MgTG9nTGVhcm5pbmdSYXRlKENhbGxiYWNrKToKICAgIGRlZiBvbl9lcG9jaF9lbmQoc2VsZiwgZXBvY2gsIGxvZ3MpOgogICAgICAgIGxvZ3NbJ2xlYXJuaW5nX3JhdGUnXSA9IEsuZ2V0X3ZhbHVlKHNlbGYubW9kZWwub3B0aW1pemVyLmxyKQoKCmNsYXNzIExvZ1RpbWVzdGFtcChDYWxsYmFjayk6CiAgICBkZWYgb25fZXBvY2hfYmVnaW4oc2VsZiwgZXBvY2gsIGxvZ3MpOgogICAgICAgIHNlbGYuX3RzX3N0YXJ0ID0gc2VsZi5fZ2V0X2N1cnJlbnRfdHMoKQoKICAgIGRlZiBvbl9lcG9jaF9lbmQoc2VsZiwgZXBvY2gsIGxvZ3MpOgogICAgICAgIGxvZ3NbJ3RzX3N0YXJ0J10gPSBzZWxmLl90c19zdGFydAogICAgICAgIGxvZ3NbJ3RzX2VuZCddID0gc2VsZi5fZ2V0X2N1cnJlbnRfdHMoKQoKICAgIGRlZiBfZ2V0X2N1cnJlbnRfdHMoc2VsZik6CiAgICAgICAgIyBXb3JrYXJvdW5kIGZvciBhIENTVkxvZ2dlcidzIGJ1ZwogICAgICAgIGNsYXNzIE5vdEl0ZXJhYmxlU3RyKG9iamVjdCk6CiAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CiAgICAgICAgICAgICAgICBzZWxmLl92YWx1ZSA9IHZhbHVlCgogICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZQoKICAgICAgICByZXR1cm4gTm90SXRlcmFibGVTdHIoZGF0ZXRpbWUudXRjbm93KCkuaXNvZm9ybWF0KCcgJykpCgoKY2xhc3MgTG9nTWV0cmljcyhDYWxsYmFjayk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YXNldF9wcm92aWRlciwgcGVyaW9kPTEpOgogICAgICAgIHN1cGVyKExvZ01ldHJpY3MsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLl9kYXRhc2V0X3Byb3ZpZGVyID0gZGF0YXNldF9wcm92aWRlcgogICAgICAgIHNlbGYuX3BlcmlvZCA9IHBlcmlvZAoKICAgIGRlZiBvbl90cmFpbl9iZWdpbihzZWxmLCBsb2dzKToKICAgICAgICAjIEluaXRpYWxpemF0aW9uIGlzIGhlcmUsIG5vdCBpbiBfX2luaXRfXyBiZWNhdXNlIGluIHRoZXJlIHNlbGYubW9kZWwKICAgICAgICAjIGlzIG5vdCBpbml0aWFsaXplZCB5ZXQKICAgICAgICBzZWxmLl9pbmZlcmVuY2UgPSBCYXNpY0luZmVyZW5jZShzZWxmLm1vZGVsLCBzZWxmLl9kYXRhc2V0X3Byb3ZpZGVyKQogICAgICAgIHNlbGYuX29sZF9sb2dzID0ge30KCiAgICBkZWYgb25fZXBvY2hfZW5kKHNlbGYsIGVwb2NoLCBsb2dzKToKICAgICAgICBpZiBlcG9jaCAlIHNlbGYuX3BlcmlvZCAhPSAwOgogICAgICAgICAgICBsb2dzLnVwZGF0ZShzZWxmLl9vbGRfbG9ncykKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIG5ld19sb2dzID0ge30KICAgICAgICBuZXdfbG9ncy51cGRhdGUoe2s6IG5wLmZsb2F0MzIodikgZm9yIGssIHYKICAgICAgICAgICAgICAgICAgICAgICAgIGluIHNlbGYuX2luZmVyZW5jZS5ldmFsdWF0ZV90cmFpbmluZ19zZXQoKS5pdGVtcygpfSkKICAgICAgICBuZXdfbG9ncy51cGRhdGUoeyd2YWxfJyArIGs6IG5wLmZsb2F0MzIodikgZm9yIGssIHYKICAgICAgICAgICAgICAgICAgICAgICAgIGluIHNlbGYuX2luZmVyZW5jZS5ldmFsdWF0ZV92YWxpZGF0aW9uX3NldCgpLml0ZW1zKCl9KQogICAgICAgIGxvZ3MudXBkYXRlKG5ld19sb2dzKQogICAgICAgIHNlbGYuX29sZF9sb2dzID0gbmV3X2xvZ3MKCjx8ZmltX2hvbGV8PgogICAgICAgIHNlbGYuX3RpbWVkZWx0YSA9IHRpbWVkZWx0YQogICAgICAgIHNlbGYuX3ZlcmJvc2UgPSB2ZXJib3NlCgogICAgZGVmIG9uX3RyYWluX2JlZ2luKHNlbGYsIGxvZ3MpOgogICAgICAgIHNlbGYuX2R0X3N0YXJ0ID0gZGF0ZXRpbWUudXRjbm93KCkKICAgICAgICBzZWxmLl9zdG9wcGVkX2Vwb2NoID0gTm9uZQoKICAgIGRlZiBvbl9lcG9jaF9lbmQoc2VsZiwgZXBvY2gsIGxvZ3MpOgogICAgICAgIGlmIHNlbGYuX3RpbWVkZWx0YSBpcyBOb25lOgogICAgICAgICAgICByZXR1cm4KICAgICAgICBpZiBkYXRldGltZS51dGNub3coKSAtIHNlbGYuX2R0X3N0YXJ0ID4gc2VsZi5fdGltZWRlbHRhOgogICAgICAgICAgICBzZWxmLm1vZGVsLnN0b3BfdHJhaW5pbmcgPSBUcnVlCiAgICAgICAgICAgIHNlbGYuX3N0b3BwZWRfZXBvY2ggPSBlcG9jaAoKICAgIGRlZiBvbl90cmFpbl9lbmQoc2VsZiwgbG9ncyk6CiAgICAgICAgaWYgc2VsZi5fc3RvcHBlZF9lcG9jaCBpcyBub3QgTm9uZSBhbmQgc2VsZi5fdmVyYm9zZSA+IDA6CiAgICAgICAgICAgIGxvZ2dpbmcoJ0Vwb2NoIHt9OiBzdG9wIGFmdGVyIHt9Jy5mb3JtYXQoc2VsZi5fc3RvcHBlZF9lcG9jaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90aW1lZGVsdGEpKQoKCmNsYXNzIFN0b3BXaGVuVmFsTG9zc0V4cGxvZGluZyhDYWxsYmFjayk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgcmF0aW8sIHBhdGllbmNlPTAsIHZlcmJvc2U9MCk6CiAgICAgICAgc3VwZXIoU3RvcFdoZW5WYWxMb3NzRXhwbG9kaW5nLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5fcmF0aW8gPSByYXRpbwogICAgICAgIHNlbGYuX3BhdGllbmNlID0gcGF0aWVuY2UKICAgICAgICBzZWxmLl92ZXJib3NlID0gdmVyYm9zZQoKICAgIGRlZiBvbl90cmFpbl9iZWdpbihzZWxmLCBsb2dzKToKICAgICAgICBzZWxmLl93YWl0ID0gMAogICAgICAgIHNlbGYuX2ZpcnN0X2xvc3MgPSBOb25lCiAgICAgICAgc2VsZi5fYmVzdF9sb3NzID0gTm9uZQogICAgICAgIHNlbGYuX3N0b3BwZWRfZXBvY2ggPSBOb25lCgogICAgZGVmIG9uX2Vwb2NoX2VuZChzZWxmLCBlcG9jaCwgbG9ncyk6CiAgICAgICAgbG9zcyA9IGxvZ3NbJ3ZhbF9sb3NzJ10KCiAgICAgICAgaWYgc2VsZi5fZmlyc3RfbG9zcyBpcyBOb25lOgogICAgICAgICAgICBzZWxmLl9maXJzdF9sb3NzID0gbG9zcwoKICAgICAgICBlbGlmIHNlbGYuX2Jlc3RfbG9zcyBpcyBOb25lOgogICAgICAgICAgICBpZiBsb3NzID4gc2VsZi5fZmlyc3RfbG9zczoKICAgICAgICAgICAgICAgIGlmIHNlbGYuX3dhaXQgPj0gc2VsZi5fcGF0aWVuY2U6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5zdG9wX3RyYWluaW5nID0gVHJ1ZQogICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0b3BwZWRfZXBvY2ggPSBlcG9jaAogICAgICAgICAgICAgICAgc2VsZi5fd2FpdCArPSAxCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBzZWxmLl9iZXN0X2xvc3MgPSBsb3NzCiAgICAgICAgICAgICAgICBzZWxmLl93YWl0ID0gMAoKICAgICAgICBlbHNlOgogICAgICAgICAgICBsaW1pdCA9IChzZWxmLl9iZXN0X2xvc3MgKwogICAgICAgICAgICAgICAgICAgICBzZWxmLl9yYXRpbyAqIChzZWxmLl9maXJzdF9sb3NzIC0gc2VsZi5fYmVzdF9sb3NzKSkKICAgICAgICAgICAgaWYgbG9zcyA+IGxpbWl0OgogICAgICAgICAgICAgICAgaWYgc2VsZi5fd2FpdCA+PSBzZWxmLl9wYXRpZW5jZToKICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLnN0b3BfdHJhaW5pbmcgPSBUcnVlCiAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RvcHBlZF9lcG9jaCA9IGVwb2NoCiAgICAgICAgICAgICAgICBzZWxmLl93YWl0ICs9IDEKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHNlbGYuX3dhaXQgPSAwCiAgICAgICAgICAgIGlmIGxvc3MgPCBzZWxmLl9iZXN0X2xvc3M6CiAgICAgICAgICAgICAgICBzZWxmLl9iZXN0X2xvc3MgPSBsb3NzCgogICAgZGVmIG9uX3RyYWluX2VuZChzZWxmLCBsb2dzKToKICAgICAgICBpZiBzZWxmLl9zdG9wcGVkX2Vwb2NoIGlzIG5vdCBOb25lIGFuZCBzZWxmLl92ZXJib3NlID4gMDoKICAgICAgICAgICAgbG9nZ2luZygnU3RvcCBiZWNhdXNlIHZhbCBsb3NzIGV4cGxvZGVzIGF0IGVwb2NoIHt9Jy5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RvcHBlZF9lcG9jaCkpCjx8ZmltX3N1ZmZpeHw+CgpjbGFzcyBTdG9wQWZ0ZXJUaW1lZGVsdGEoQ2FsbGJhY2spOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpbWVkZWx0YSwgdmVyYm9zZT0wKToKICAgICAgICBzdXBlcihTdG9wQWZ0ZXJUaW1lZGVsdGEsIHNlbGYpLl9faW5pdF9fKCkKPHxmaW1fZW5kfD4="]
["6b8b3e57ee3e15532c96608ccbca414bd8836aaf-3","6b8b3e57ee3e15532c96608ccbca414bd8836aaf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQpmcm9tIGtlcmFzIGltcG9ydCBiYWNrZW5kIGFzIEsKZnJvbSBrZXJhcy5jYWxsYmFja3MgaW1wb3J0IENhbGxiYWNrCgpmcm9tIC5pbmZlcmVuY2UgaW1wb3J0IEJhc2ljSW5mZXJlbmNlCmZyb20gLmlvX3V0aWxzIGltcG9ydCBsb2dnaW5nCgoKY2xhc3MgTG9nTGVhcm5pbmdSYXRlKENhbGxiYWNrKToKICAgIGRlZiBvbl9lcG9jaF9lbmQoc2VsZiwgZXBvY2gsIGxvZ3MpOgogICAgICAgIGxvZ3NbJ2xlYXJuaW5nX3JhdGUnXSA9IEsuZ2V0X3ZhbHVlKHNlbGYubW9kZWwub3B0aW1pemVyLmxyKQoKCmNsYXNzIExvZ1RpbWVzdGFtcChDYWxsYmFjayk6CiAgICBkZWYgb25fZXBvY2hfYmVnaW4oc2VsZiwgZXBvY2gsIGxvZ3MpOgogICAgICAgIHNlbGYuX3RzX3N0YXJ0ID0gc2VsZi5fZ2V0X2N1cnJlbnRfdHMoKQoKICAgIGRlZiBvbl9lcG9jaF9lbmQoc2VsZiwgZXBvY2gsIGxvZ3MpOgogICAgICAgIGxvZ3NbJ3RzX3N0YXJ0J10gPSBzZWxmLl90c19zdGFydAogICAgICAgIGxvZ3NbJ3RzX2VuZCddID0gc2VsZi5fZ2V0X2N1cnJlbnRfdHMoKQoKICAgIGRlZiBfZ2V0X2N1cnJlbnRfdHMoc2VsZik6CiAgICAgICAgIyBXb3JrYXJvdW5kIGZvciBhIENTVkxvZ2dlcidzIGJ1ZwogICAgICAgIGNsYXNzIE5vdEl0ZXJhYmxlU3RyKG9iamVjdCk6CiAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CiAgICAgICAgICAgICAgICBzZWxmLl92YWx1ZSA9IHZhbHVlCgogICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZQoKICAgICAgICByZXR1cm4gTm90SXRlcmFibGVTdHIoZGF0ZXRpbWUudXRjbm93KCkuaXNvZm9ybWF0KCcgJykpCgoKY2xhc3MgTG9nTWV0cmljcyhDYWxsYmFjayk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YXNldF9wcm92aWRlciwgcGVyaW9kPTEpOgogICAgICAgIHN1cGVyKExvZ01ldHJpY3MsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLl9kYXRhc2V0X3Byb3ZpZGVyID0gZGF0YXNldF9wcm92aWRlcgogICAgICAgIHNlbGYuX3BlcmlvZCA9IHBlcmlvZAoKICAgIGRlZiBvbl90cmFpbl9iZWdpbihzZWxmLCBsb2dzKToKICAgICAgICAjIEluaXRpYWxpemF0aW9uIGlzIGhlcmUsIG5vdCBpbiBfX2luaXRfXyBiZWNhdXNlIGluIHRoZXJlIHNlbGYubW9kZWwKICAgICAgICAjIGlzIG5vdCBpbml0aWFsaXplZCB5ZXQKICAgICAgICBzZWxmLl9pbmZlcmVuY2UgPSBCYXNpY0luZmVyZW5jZShzZWxmLm1vZGVsLCBzZWxmLl9kYXRhc2V0X3Byb3ZpZGVyKQogICAgICAgIHNlbGYuX29sZF9sb2dzID0ge30KCiAgICBkZWYgb25fZXBvY2hfZW5kKHNlbGYsIGVwb2NoLCBsb2dzKToKICAgICAgICBpZiBlcG9jaCAlIHNlbGYuX3BlcmlvZCAhPSAwOgogICAgICAgICAgICBsb2dzLnVwZGF0ZShzZWxmLl9vbGRfbG9ncykKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIG5ld19sb2dzID0ge30KICAgICAgICBuZXdfbG9ncy51cGRhdGUoe2s6IG5wLmZsb2F0MzIodikgZm9yIGssIHYKICAgICAgICAgICAgICAgICAgICAgICAgIGluIHNlbGYuX2luZmVyZW5jZS5ldmFsdWF0ZV90cmFpbmluZ19zZXQoKS5pdGVtcygpfSkKICAgICAgICBuZXdfbG9ncy51cGRhdGUoeyd2YWxfJyArIGs6IG5wLmZsb2F0MzIodikgZm9yIGssIHYKICAgICAgICAgICAgICAgICAgICAgICAgIGluIHNlbGYuX2luZmVyZW5jZS5ldmFsdWF0ZV92YWxpZGF0aW9uX3NldCgpLml0ZW1zKCl9KQogICAgICAgIGxvZ3MudXBkYXRlKG5ld19sb2dzKQogICAgICAgIHNlbGYuX29sZF9sb2dzID0gbmV3X2xvZ3MKCgpjbGFzcyBTdG9wQWZ0ZXJUaW1lZGVsdGEoQ2FsbGJhY2spOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpbWVkZWx0YSwgdmVyYm9zZT0wKToKICAgICAgICBzdXBlcihTdG9wQWZ0ZXJUaW1lZGVsdGEsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLl90aW1lZGVsdGEgPSB0aW1lZGVsdGEKICAgICAgICBzZWxmLl92ZXJib3NlID0gdmVyYm9zZQoKICAgIGRlZiBvbl90cmFpbl9iZWdpbihzZWxmLCBsb2dzKToKICAgICAgICBzZWxmLl9kdF9zdGFydCA9IGRhdGV0aW1lLnV0Y25vdygpCiAgICAgICAgc2VsZi5fc3RvcHBlZF9lcG9jaCA9IE5vbmUKCiAgICBkZWYgb25fZXBvY2hfZW5kKHNlbGYsIGVwb2NoLCBsb2dzKToKICAgICAgICBpZiBzZWxmLl90aW1lZGVsdGEgaXMgTm9uZToKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgaWYgZGF0ZXRpbWUudXRjbm93KCkgLSBzZWxmLl9kdF9zdGFydCA+IHNlbGYuX3RpbWVkZWx0YToKICAgICAgICAgICAgc2VsZi5tb2RlbC5zdG9wX3RyYWluaW5nID0gVHJ1ZQogICAgICAgICAgICBzZWxmLl9zdG9wcGVkX2Vwb2NoID0gZXBvY2gKCiAgICBkZWYgb25fdHJhaW5fZW5kKHNlbGYsIGxvZ3MpOgogICAgICAgIGlmIHNlbGYuX3N0b3BwZWRfZXBvY2ggaXMgbm90IE5vbmUgYW5kIHNlbGYuX3ZlcmJvc2UgPiAwOgogICAgICAgICAgICBsb2dnaW5nKCdFcG9jaCB7fTogc3RvcCBhZnRlciB7fScuZm9ybWF0KHNlbGYuX3N0b3BwZWRfZXBvY2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGltZWRlbHRhKSkKPHxmaW1faG9sZXw+CiAgICAgICAgc3VwZXIoU3RvcFdoZW5WYWxMb3NzRXhwbG9kaW5nLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5fcmF0aW8gPSByYXRpbwogICAgICAgIHNlbGYuX3BhdGllbmNlID0gcGF0aWVuY2UKICAgICAgICBzZWxmLl92ZXJib3NlID0gdmVyYm9zZQoKICAgIGRlZiBvbl90cmFpbl9iZWdpbihzZWxmLCBsb2dzKToKICAgICAgICBzZWxmLl93YWl0ID0gMAogICAgICAgIHNlbGYuX2ZpcnN0X2xvc3MgPSBOb25lCiAgICAgICAgc2VsZi5fYmVzdF9sb3NzID0gTm9uZQogICAgICAgIHNlbGYuX3N0b3BwZWRfZXBvY2ggPSBOb25lCgogICAgZGVmIG9uX2Vwb2NoX2VuZChzZWxmLCBlcG9jaCwgbG9ncyk6CiAgICAgICAgbG9zcyA9IGxvZ3NbJ3ZhbF9sb3NzJ10KCiAgICAgICAgaWYgc2VsZi5fZmlyc3RfbG9zcyBpcyBOb25lOgogICAgICAgICAgICBzZWxmLl9maXJzdF9sb3NzID0gbG9zcwoKICAgICAgICBlbGlmIHNlbGYuX2Jlc3RfbG9zcyBpcyBOb25lOgogICAgICAgICAgICBpZiBsb3NzID4gc2VsZi5fZmlyc3RfbG9zczoKICAgICAgICAgICAgICAgIGlmIHNlbGYuX3dhaXQgPj0gc2VsZi5fcGF0aWVuY2U6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5zdG9wX3RyYWluaW5nID0gVHJ1ZQogICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0b3BwZWRfZXBvY2ggPSBlcG9jaAogICAgICAgICAgICAgICAgc2VsZi5fd2FpdCArPSAxCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBzZWxmLl9iZXN0X2xvc3MgPSBsb3NzCiAgICAgICAgICAgICAgICBzZWxmLl93YWl0ID0gMAoKICAgICAgICBlbHNlOgogICAgICAgICAgICBsaW1pdCA9IChzZWxmLl9iZXN0X2xvc3MgKwogICAgICAgICAgICAgICAgICAgICBzZWxmLl9yYXRpbyAqIChzZWxmLl9maXJzdF9sb3NzIC0gc2VsZi5fYmVzdF9sb3NzKSkKICAgICAgICAgICAgaWYgbG9zcyA+IGxpbWl0OgogICAgICAgICAgICAgICAgaWYgc2VsZi5fd2FpdCA+PSBzZWxmLl9wYXRpZW5jZToKICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLnN0b3BfdHJhaW5pbmcgPSBUcnVlCiAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RvcHBlZF9lcG9jaCA9IGVwb2NoCiAgICAgICAgICAgICAgICBzZWxmLl93YWl0ICs9IDEKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHNlbGYuX3dhaXQgPSAwCiAgICAgICAgICAgIGlmIGxvc3MgPCBzZWxmLl9iZXN0X2xvc3M6CiAgICAgICAgICAgICAgICBzZWxmLl9iZXN0X2xvc3MgPSBsb3NzCgogICAgZGVmIG9uX3RyYWluX2VuZChzZWxmLCBsb2dzKToKICAgICAgICBpZiBzZWxmLl9zdG9wcGVkX2Vwb2NoIGlzIG5vdCBOb25lIGFuZCBzZWxmLl92ZXJib3NlID4gMDoKICAgICAgICAgICAgbG9nZ2luZygnU3RvcCBiZWNhdXNlIHZhbCBsb3NzIGV4cGxvZGVzIGF0IGVwb2NoIHt9Jy5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RvcHBlZF9lcG9jaCkpCjx8ZmltX3N1ZmZpeHw+CgoKY2xhc3MgU3RvcFdoZW5WYWxMb3NzRXhwbG9kaW5nKENhbGxiYWNrKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYXRpbywgcGF0aWVuY2U9MCwgdmVyYm9zZT0wKToKPHxmaW1fZW5kfD4="]
["6b8b3e57ee3e15532c96608ccbca414bd8836aaf-4","6b8b3e57ee3e15532c96608ccbca414bd8836aaf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQpmcm9tIGtlcmFzIGltcG9ydCBiYWNrZW5kIGFzIEsKZnJvbSBrZXJhcy5jYWxsYmFja3MgaW1wb3J0IENhbGxiYWNrCgpmcm9tIC5pbmZlcmVuY2UgaW1wb3J0IEJhc2ljSW5mZXJlbmNlCmZyb20gLmlvX3V0aWxzIGltcG9ydCBsb2dnaW5nCgoKY2xhc3MgTG9nTGVhcm5pbmdSYXRlKENhbGxiYWNrKToKICAgIGRlZiBvbl9lcG9jaF9lbmQoc2VsZiwgZXBvY2gsIGxvZ3MpOgogICAgICAgIGxvZ3NbJ2xlYXJuaW5nX3JhdGUnXSA9IEsuZ2V0X3ZhbHVlKHNlbGYubW9kZWwub3B0aW1pemVyLmxyKQoKCmNsYXNzIExvZ1RpbWVzdGFtcChDYWxsYmFjayk6CiAgICBkZWYgb25fZXBvY2hfYmVnaW4oc2VsZiwgZXBvY2gsIGxvZ3MpOgogICAgICAgIHNlbGYuX3RzX3N0YXJ0ID0gc2VsZi5fZ2V0X2N1cnJlbnRfdHMoKQoKICAgIGRlZiBvbl9lcG9jaF9lbmQoc2VsZiwgZXBvY2gsIGxvZ3MpOgogICAgICAgIGxvZ3NbJ3RzX3N0YXJ0J10gPSBzZWxmLl90c19zdGFydAogICAgICAgIGxvZ3NbJ3RzX2VuZCddID0gc2VsZi5fZ2V0X2N1cnJlbnRfdHMoKQoKICAgIGRlZiBfZ2V0X2N1cnJlbnRfdHMoc2VsZik6CiAgICAgICAgIyBXb3JrYXJvdW5kIGZvciBhIENTVkxvZ2dlcidzIGJ1ZwogICAgICAgIGNsYXNzIE5vdEl0ZXJhYmxlU3RyKG9iamVjdCk6CiAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CiAgICAgICAgICAgICAgICBzZWxmLl92YWx1ZSA9IHZhbHVlCgogICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZQoKICAgICAgICByZXR1cm4gTm90SXRlcmFibGVTdHIoZGF0ZXRpbWUudXRjbm93KCkuaXNvZm9ybWF0KCcgJykpCgoKY2xhc3MgTG9nTWV0cmljcyhDYWxsYmFjayk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YXNldF9wcm92aWRlciwgcGVyaW9kPTEpOgogICAgICAgIHN1cGVyKExvZ01ldHJpY3MsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLl9kYXRhc2V0X3Byb3ZpZGVyID0gZGF0YXNldF9wcm92aWRlcgogICAgICAgIHNlbGYuX3BlcmlvZCA9IHBlcmlvZAoKICAgIGRlZiBvbl90cmFpbl9iZWdpbihzZWxmLCBsb2dzKToKICAgICAgICAjIEluaXRpYWxpemF0aW9uIGlzIGhlcmUsIG5vdCBpbiBfX2luaXRfXyBiZWNhdXNlIGluIHRoZXJlIHNlbGYubW9kZWwKICAgICAgICAjIGlzIG5vdCBpbml0aWFsaXplZCB5ZXQKICAgICAgICBzZWxmLl9pbmZlcmVuY2UgPSBCYXNpY0luZmVyZW5jZShzZWxmLm1vZGVsLCBzZWxmLl9kYXRhc2V0X3Byb3ZpZGVyKQogICAgICAgIHNlbGYuX29sZF9sb2dzID0ge30KCiAgICBkZWYgb25fZXBvY2hfZW5kKHNlbGYsIGVwb2NoLCBsb2dzKToKICAgICAgICBpZiBlcG9jaCAlIHNlbGYuX3BlcmlvZCAhPSAwOgogICAgICAgICAgICBsb2dzLnVwZGF0ZShzZWxmLl9vbGRfbG9ncykKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIG5ld19sb2dzID0ge30KICAgICAgICBuZXdfbG9ncy51cGRhdGUoe2s6IG5wLmZsb2F0MzIodikgZm9yIGssIHYKICAgICAgICAgICAgICAgICAgICAgICAgIGluIHNlbGYuX2luZmVyZW5jZS5ldmFsdWF0ZV90cmFpbmluZ19zZXQoKS5pdGVtcygpfSkKICAgICAgICBuZXdfbG9ncy51cGRhdGUoeyd2YWxfJyArIGs6IG5wLmZsb2F0MzIodikgZm9yIGssIHYKICAgICAgICAgICAgICAgICAgICAgICAgIGluIHNlbGYuX2luZmVyZW5jZS5ldmFsdWF0ZV92YWxpZGF0aW9uX3NldCgpLml0ZW1zKCl9KQogICAgICAgIGxvZ3MudXBkYXRlKG5ld19sb2dzKQogICAgICAgIHNlbGYuX29sZF9sb2dzID0gbmV3X2xvZ3MKCgpjbGFzcyBTdG9wQWZ0ZXJUaW1lZGVsdGEoQ2FsbGJhY2spOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpbWVkZWx0YSwgdmVyYm9zZT0wKToKICAgICAgICBzdXBlcihTdG9wQWZ0ZXJUaW1lZGVsdGEsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLl90aW1lZGVsdGEgPSB0aW1lZGVsdGEKICAgICAgICBzZWxmLl92ZXJib3NlID0gdmVyYm9zZQoKICAgIGRlZiBvbl90cmFpbl9iZWdpbihzZWxmLCBsb2dzKToKICAgICAgICBzZWxmLl9kdF9zdGFydCA9IGRhdGV0aW1lLnV0Y25vdygpCiAgICAgICAgc2VsZi5fc3RvcHBlZF9lcG9jaCA9IE5vbmUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiBvbl9lcG9jaF9lbmQoc2VsZiwgZXBvY2gsIGxvZ3MpOgogICAgICAgIGlmIHNlbGYuX3RpbWVkZWx0YSBpcyBOb25lOgogICAgICAgICAgICByZXR1cm4KPHxmaW1fZW5kfD4="]
["6b50a5f7388e086dfac1be974d4fe3fe30690f4d-1","6b50a5f7388e086dfac1be974d4fe3fe30690f4d","PHxmaW1fcHJlZml4fD4KZnJvbSBzY3JhcHkuaXRlbSBpbXBvcnQgSXRlbSxGaWVsZAoKCiNJdGVtIENsYXNzIHRvIHN0b3JlIERhdGEKY2xhc3MgVHJpcEFkdmlzb3JJdGVtcyhJdGVtKToKICAgIG5hbWU9RmllbGQoKQogICAgcmF0aW5nPUZpZWxkKCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgbGF0aXR1ZGU9RmllbGQoKQogICAgbG9uZ2l0dWRlPUZpZWxkKCkKICAgIHVybD1GaWVsZCgpCjx8ZmltX2VuZHw+"]
["6b50a5f7388e086dfac1be974d4fe3fe30690f4d-2","6b50a5f7388e086dfac1be974d4fe3fe30690f4d","PHxmaW1fcHJlZml4fD4KZnJvbSBzY3JhcHkuaXRlbSBpbXBvcnQgSXRlbSxGaWVsZAoKCiNJdGVtIENsYXNzIHRvIHN0b3JlIERhdGEKY2xhc3MgVHJpcEFkdmlzb3JJdGVtcyhJdGVtKToKPHxmaW1faG9sZXw+CiAgICB1cmw9RmllbGQoKQo8fGZpbV9zdWZmaXh8PgogICAgbmFtZT1GaWVsZCgpCiAgICByYXRpbmc9RmllbGQoKQogICAgbGF0aXR1ZGU9RmllbGQoKQogICAgbG9uZ2l0dWRlPUZpZWxkKCkKPHxmaW1fZW5kfD4="]
["6b50a5f7388e086dfac1be974d4fe3fe30690f4d-3","6b50a5f7388e086dfac1be974d4fe3fe30690f4d","PHxmaW1fcHJlZml4fD4KZnJvbSBzY3JhcHkuaXRlbSBpbXBvcnQgSXRlbSxGaWVsZAoKPHxmaW1faG9sZXw+CiAgICByYXRpbmc9RmllbGQoKQogICAgbGF0aXR1ZGU9RmllbGQoKQogICAgbG9uZ2l0dWRlPUZpZWxkKCkKICAgIHVybD1GaWVsZCgpCjx8ZmltX3N1ZmZpeHw+CgojSXRlbSBDbGFzcyB0byBzdG9yZSBEYXRhCmNsYXNzIFRyaXBBZHZpc29ySXRlbXMoSXRlbSk6CiAgICBuYW1lPUZpZWxkKCkKPHxmaW1fZW5kfD4="]
["6b50a5f7388e086dfac1be974d4fe3fe30690f4d-4","6b50a5f7388e086dfac1be974d4fe3fe30690f4d","PHxmaW1fcHJlZml4fD4KZnJvbSBzY3JhcHkuaXRlbSBpbXBvcnQgSXRlbSxGaWVsZAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKI0l0ZW0gQ2xhc3MgdG8gc3RvcmUgRGF0YQpjbGFzcyBUcmlwQWR2aXNvckl0ZW1zKEl0ZW0pOgogICAgbmFtZT1GaWVsZCgpCjx8ZmltX2VuZHw+"]
["6b907589126dc1691cb7e91ab8cfcb0e42004276-1","6b907589126dc1691cb7e91ab8cfcb0e42004276","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMKIyBCYWtlQml0IGV4YW1wbGUgZm9yIHRoZSBiYXNpYyBmdW5jdGlvbnMgb2YgQmFrZUJpdCAxMjh4NjQgT0xFRCAoaHR0cDovL3dpa2kuZnJpZW5kbHlhcm0uY29tL3dpa2kvaW5kZXgucGhwL0Jha2VCaXRfLV9PTEVEXzEyOHg2NCkKIwojIFRoZSBCYWtlQml0IGNvbm5lY3RzIHRoZSBOYW5vUGkgTkVPIGFuZCBCYWtlQml0IHNlbnNvcnMuCiMgWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IEJha2VCaXQgaGVyZTogIGh0dHA6Ly93aWtpLmZyaWVuZGx5YXJtLmNvbS9CYWtlQml0CiMKIyBIYXZlIGEgcXVlc3Rpb24gYWJvdXQgdGhpcyBleGFtcGxlPyAgQXNrIG9uIHRoZSBmb3J1bXMgaGVyZTogIGh0dHA6Ly93d3cuZnJpZW5kbHlhcm0uY29tL0ZvcnVtLwojCicnJwojIyBMaWNlbnNlCgpUaGUgTUlUIExpY2Vuc2UgKE1JVCkKCkJha2VCaXQ6IGFuIG9wZW4gc291cmNlIHBsYXRmb3JtIGZvciBjb25uZWN0aW5nIEJha2VCaXQgU2Vuc29ycyB0byB0aGUgTmFub1BpIE5FTy4KQ29weXJpZ2h0IChDKSAyMDE2IEZyaWVuZGx5QVJNCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cjx8ZmltX2hvbGV8PgpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgpUSEUgU09GVFdBUkUuCicnJwoKaW1wb3J0IGJha2ViaXRfMTI4XzY0X29sZWQgYXMgb2xlZApmcm9tIFBJTCBpbXBvcnQgSW1hZ2UKZnJvbSBQSUwgaW1wb3J0IEltYWdlRm9udApmcm9tIFBJTCBpbXBvcnQgSW1hZ2VEcmF3CmltcG9ydCBtYXRoCmltcG9ydCB0aW1lCgpvbGVkLmluaXQoKSAgI2luaXRpYWx6ZSBTRUVFRCBPTEVEIGRpc3BsYXkKCm9sZWQuY2xlYXJEaXNwbGF5KCkgICAgICAgICAgI2NsZWFyIHRoZSBzY3JlZW4gYW5kIHNldCBzdGFydCBwb3NpdGlvbiB0byB0b3AgbGVmdCBjb3JuZXIKb2xlZC5zZXROb3JtYWxEaXNwbGF5KCkgICAgICAjU2V0IGRpc3BsYXkgdG8gbm9ybWFsIG1vZGUgKGkuZSBub24taW52ZXJzZSBtb2RlKQpvbGVkLnNldEhvcml6b250YWxNb2RlKCkKCndpZHRoPTEyOApoZWlnaHQ9NjQKCiMgQ3JlYXRlIGltYWdlIGJ1ZmZlci4KIyBNYWtlIHN1cmUgdG8gY3JlYXRlIGltYWdlIHdpdGggbW9kZSAnMScgZm9yIDEtYml0IGNvbG9yLgppbWFnZSA9IEltYWdlLm5ldygnMScsICh3aWR0aCwgaGVpZ2h0KSkKCiMgTG9hZCBkZWZhdWx0IGZvbnQuCmZvbnQgPSBJbWFnZUZvbnQubG9hZF9kZWZhdWx0KCkKCiMgQWx0ZXJuYXRpdmVseSBsb2FkIGEgVFRGIGZvbnQuICBNYWtlIHN1cmUgdGhlIC50dGYgZm9udCBmaWxlIGlzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGlzIHB5dGhvbiBzY3JpcHQhCiMgU29tZSBuaWNlIGZvbnRzIHRvIHRyeTogaHR0cDovL3d3dy5kYWZvbnQuY29tL2JpdG1hcC5waHAKIyBmb250ID0gSW1hZ2VGb250LnRydWV0eXBlKCdEZWphVnVTYW5zTW9uby50dGYnLCA4KQojIENyZWF0ZSBkcmF3aW5nIG9iamVjdC4KZHJhdyA9IEltYWdlRHJhdy5EcmF3KGltYWdlKQoKIyBEZWZpbmUgdGV4dCBhbmQgZ2V0IHRvdGFsIHdpZHRoLgp0ZXh0ID0gJ0xpdmUgYSBub2JsZSBhbmQgaG9uZXN0IGxpZmUuIFJldml2aW5nIHBhc3QgdGltZXMgaW4geW91ciBvbGQgYWdlIHdpbGwgaGVscCB5b3UgdG8gZW5qb3kgeW91ciBsaWZlIGFnYWluLicKbWF4d2lkdGgsIHVudXNlZCA9IGRyYXcudGV4dHNpemUodGV4dCwgZm9udD1mb250KQoKIyBTZXQgYW5pbWF0aW9uIGFuZCBzaW5lIHdhdmUgcGFyYW1ldGVycy4KYW1wbGl0dWRlID0gaGVpZ2h0LzQKb2Zmc2V0ID0gaGVpZ2h0LzIgLSA0CnZlbG9jaXR5ID0gLTIKc3RhcnRwb3MgPSB3aWR0aAoKIyBBbmltYXRlIHRleHQgbW92aW5nIGluIHNpbmUgd2F2ZS4KcHJpbnQoJ1ByZXNzIEN0cmwtQyB0byBxdWl0LicpCnBvcyA9IHN0YXJ0cG9zCndoaWxlIFRydWU6CiAgICB0cnk6CiAgICAgICAgIyBDbGVhciBpbWFnZSBidWZmZXIgYnkgZHJhd2luZyBhIGJsYWNrIGZpbGxlZCBib3guCiAgICAgICAgZHJhdy5yZWN0YW5nbGUoKDAsMCx3aWR0aCxoZWlnaHQpLCBvdXRsaW5lPTAsIGZpbGw9MCkKICAgICAgICAjIEVudW1lcmF0ZSBjaGFyYWN0ZXJzIGFuZCBkcmF3IHRoZW0gb2Zmc2V0IHZlcnRpY2FsbHkgYmFzZWQgb24gYSBzaW5lIHdhdmUuCiAgICAgICAgeCA9IHBvcwogICAgICAgIGZvciBpLCBjIGluIGVudW1lcmF0ZSh0ZXh0KToKICAgICAgICAgICAgIyBTdG9wIGRyYXdpbmcgaWYgb2ZmIHRoZSByaWdodCBzaWRlIG9mIHNjcmVlbi4KICAgICAgICAgICAgaWYgeCA+IHdpZHRoOgogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIyBDYWxjdWxhdGUgd2lkdGggYnV0IHNraXAgZHJhd2luZyBpZiBvZmYgdGhlIGxlZnQgc2lkZSBvZiBzY3JlZW4uCiAgICAgICAgICAgIGlmIHggPCAtMTA6CiAgICAgICAgICAgICAgICBjaGFyX3dpZHRoLCBjaGFyX2hlaWdodCA9IGRyYXcudGV4dHNpemUoYywgZm9udD1mb250KQogICAgICAgICAgICAgICAgeCArPSBjaGFyX3dpZHRoCiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAjIENhbGN1bGF0ZSBvZmZzZXQgZnJvbSBzaW5lIHdhdmUuCiAgICAgICAgICAgIHkgPSBvZmZzZXQrbWF0aC5mbG9vcihhbXBsaXR1ZGUqbWF0aC5zaW4oeC9mbG9hdCh3aWR0aCkqMi4wKm1hdGgucGkpKQogICAgICAgICAgICAjIERyYXcgdGV4dC4KICAgICAgICAgICAgZHJhdy50ZXh0KCh4LCB5KSwgYywgZm9udD1mb250LCBmaWxsPTI1NSkKICAgICAgICAgICAgIyBJbmNyZW1lbnQgeCBwb3NpdGlvbiBiYXNlZCBvbiBjaGFjYWN0ZXIgd2lkdGguCiAgICAgICAgICAgIGNoYXJfd2lkdGgsIGNoYXJfaGVpZ2h0ID0gZHJhdy50ZXh0c2l6ZShjLCBmb250PWZvbnQpCiAgICAgICAgICAgIHggKz0gY2hhcl93aWR0aAogICAgICAgICMgRHJhdyB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgIG9sZWQuZHJhd0ltYWdlKGltYWdlKQogICAgICAgICMgTW92ZSBwb3NpdGlvbiBmb3IgbmV4dCBmcmFtZS4KICAgICAgICBwb3MgKz0gdmVsb2NpdHkKICAgICAgICAjIFN0YXJ0IG92ZXIgaWYgdGV4dCBoYXMgc2Nyb2xsZWQgY29tcGxldGVseSBvZmYgbGVmdCBzaWRlIG9mIHNjcmVlbi4KICAgICAgICBpZiBwb3MgPCAtbWF4d2lkdGg6CiAgICAgICAgICAgIHBvcyA9IHN0YXJ0cG9zCiAgICAgICAgIyBQYXVzZSBicmllZmx5IGJlZm9yZSBkcmF3aW5nIG5leHQgZnJhbWUuCiAgICAgICAgdGltZS5zbGVlcCgwLjEpCiAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgYnJlYWsKICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgIHByaW50ICgiRXJyb3IiKQogICAgICAgIGJyZWFrCgoKPHxmaW1fc3VmZml4fD4Kb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwo8fGZpbV9lbmR8Pg=="]
["6b907589126dc1691cb7e91ab8cfcb0e42004276-2","6b907589126dc1691cb7e91ab8cfcb0e42004276","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMKIyBCYWtlQml0IGV4YW1wbGUgZm9yIHRoZSBiYXNpYyBmdW5jdGlvbnMgb2YgQmFrZUJpdCAxMjh4NjQgT0xFRCAoaHR0cDovL3dpa2kuZnJpZW5kbHlhcm0uY29tL3dpa2kvaW5kZXgucGhwL0Jha2VCaXRfLV9PTEVEXzEyOHg2NCkKIwojIFRoZSBCYWtlQml0IGNvbm5lY3RzIHRoZSBOYW5vUGkgTkVPIGFuZCBCYWtlQml0IHNlbnNvcnMuCiMgWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IEJha2VCaXQgaGVyZTogIGh0dHA6Ly93aWtpLmZyaWVuZGx5YXJtLmNvbS9CYWtlQml0CiMKIyBIYXZlIGEgcXVlc3Rpb24gYWJvdXQgdGhpcyBleGFtcGxlPyAgQXNrIG9uIHRoZSBmb3J1bXMgaGVyZTogIGh0dHA6Ly93d3cuZnJpZW5kbHlhcm0uY29tL0ZvcnVtLwojCicnJwojIyBMaWNlbnNlCgpUaGUgTUlUIExpY2Vuc2UgKE1JVCkKCkJha2VCaXQ6IGFuIG9wZW4gc291cmNlIHBsYXRmb3JtIGZvciBjb25uZWN0aW5nIEJha2VCaXQgU2Vuc29ycyB0byB0aGUgTmFub1BpIE5FTy4KQ29weXJpZ2h0IChDKSAyMDE2IEZyaWVuZGx5QVJNCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgonJycKCmltcG9ydCBiYWtlYml0XzEyOF82NF9vbGVkIGFzIG9sZWQKZnJvbSBQSUwgaW1wb3J0IEltYWdlCmZyb20gUElMIGltcG9ydCBJbWFnZUZvbnQKZnJvbSBQSUwgaW1wb3J0IEltYWdlRHJhdwppbXBvcnQgbWF0aAppbXBvcnQgdGltZQoKb2xlZC5pbml0KCkgICNpbml0aWFsemUgU0VFRUQgT0xFRCBkaXNwbGF5CgpvbGVkLmNsZWFyRGlzcGxheSgpICAgICAgICAgICNjbGVhciB0aGUgc2NyZWVuIGFuZCBzZXQgc3RhcnQgcG9zaXRpb24gdG8gdG9wIGxlZnQgY29ybmVyCm9sZWQuc2V0Tm9ybWFsRGlzcGxheSgpICAgICAgI1NldCBkaXNwbGF5IHRvIG5vcm1hbCBtb2RlIChpLmUgbm9uLWludmVyc2UgbW9kZSkKb2xlZC5zZXRIb3Jpem9udGFsTW9kZSgpCgp3aWR0aD0xMjgKaGVpZ2h0PTY0CgojIENyZWF0ZSBpbWFnZSBidWZmZXIuCiMgTWFrZSBzdXJlIHRvIGNyZWF0ZSBpbWFnZSB3aXRoIG1vZGUgJzEnIGZvciAxLWJpdCBjb2xvci4KaW1hZ2UgPSBJbWFnZS5uZXcoJzEnLCAod2lkdGgsIGhlaWdodCkpCgojIExvYWQgZGVmYXVsdCBmb250Lgpmb250ID0gSW1hZ2VGb250LmxvYWRfZGVmYXVsdCgpCgojIEFsdGVybmF0aXZlbHkgbG9hZCBhIFRURiBmb250LiAgTWFrZSBzdXJlIHRoZSAudHRmIGZvbnQgZmlsZSBpcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhpcyBweXRob24gc2NyaXB0IQojIFNvbWUgbmljZSBmb250cyB0byB0cnk6IGh0dHA6Ly93d3cuZGFmb250LmNvbS9iaXRtYXAucGhwCiMgZm9udCA9IEltYWdlRm9udC50cnVldHlwZSgnRGVqYVZ1U2Fuc01vbm8udHRmJywgOCkKIyBDcmVhdGUgZHJhd2luZyBvYmplY3QuCmRyYXcgPSBJbWFnZURyYXcuRHJhdyhpbWFnZSkKCiMgRGVmaW5lIHRleHQgYW5kIGdldCB0b3RhbCB3aWR0aC4KdGV4dCA9ICdMaXZlIGEgbm9ibGUgYW5kIGhvbmVzdCBsaWZlLiBSZXZpdmluZyBwYXN0IHRpbWVzIGluIHlvdXIgb2xkIGFnZSB3aWxsIGhlbHAgeW91IHRvIGVuam95IHlvdXIgbGlmZSBhZ2Fpbi4nCm1heHdpZHRoLCB1bnVzZWQgPSBkcmF3LnRleHRzaXplKHRleHQsIGZvbnQ9Zm9udCkKCiMgU2V0IGFuaW1hdGlvbiBhbmQgc2luZSB3YXZlIHBhcmFtZXRlcnMuCmFtcGxpdHVkZSA9IGhlaWdodC80Cm9mZnNldCA9IGhlaWdodC8yIC0gNAp2ZWxvY2l0eSA9IC0yCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4Kc3RhcnRwb3MgPSB3aWR0aAoKIyBBbmltYXRlIHRleHQgbW92aW5nIGluIHNpbmUgd2F2ZS4KcHJpbnQoJ1ByZXNzIEN0cmwtQyB0byBxdWl0LicpCjx8ZmltX2VuZHw+"]
["6b907589126dc1691cb7e91ab8cfcb0e42004276-3","6b907589126dc1691cb7e91ab8cfcb0e42004276","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMKIyBCYWtlQml0IGV4YW1wbGUgZm9yIHRoZSBiYXNpYyBmdW5jdGlvbnMgb2YgQmFrZUJpdCAxMjh4NjQgT0xFRCAoaHR0cDovL3dpa2kuZnJpZW5kbHlhcm0uY29tL3dpa2kvaW5kZXgucGhwL0Jha2VCaXRfLV9PTEVEXzEyOHg2NCkKIwojIFRoZSBCYWtlQml0IGNvbm5lY3RzIHRoZSBOYW5vUGkgTkVPIGFuZCBCYWtlQml0IHNlbnNvcnMuCiMgWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IEJha2VCaXQgaGVyZTogIGh0dHA6Ly93aWtpLmZyaWVuZGx5YXJtLmNvbS9CYWtlQml0CiMKIyBIYXZlIGEgcXVlc3Rpb24gYWJvdXQgdGhpcyBleGFtcGxlPyAgQXNrIG9uIHRoZSBmb3J1bXMgaGVyZTogIGh0dHA6Ly93d3cuZnJpZW5kbHlhcm0uY29tL0ZvcnVtLwojCicnJwojIyBMaWNlbnNlCgpUaGUgTUlUIExpY2Vuc2UgKE1JVCkKCkJha2VCaXQ6IGFuIG9wZW4gc291cmNlIHBsYXRmb3JtIGZvciBjb25uZWN0aW5nIEJha2VCaXQgU2Vuc29ycyB0byB0aGUgTmFub1BpIE5FTy4KQ29weXJpZ2h0IChDKSAyMDE2IEZyaWVuZGx5QVJNCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCjx8ZmltX2hvbGV8PgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgpUSEUgU09GVFdBUkUuCicnJwoKaW1wb3J0IGJha2ViaXRfMTI4XzY0X29sZWQgYXMgb2xlZApmcm9tIFBJTCBpbXBvcnQgSW1hZ2UKZnJvbSBQSUwgaW1wb3J0IEltYWdlRm9udApmcm9tIFBJTCBpbXBvcnQgSW1hZ2VEcmF3CmltcG9ydCBtYXRoCmltcG9ydCB0aW1lCgpvbGVkLmluaXQoKSAgI2luaXRpYWx6ZSBTRUVFRCBPTEVEIGRpc3BsYXkKCm9sZWQuY2xlYXJEaXNwbGF5KCkgICAgICAgICAgI2NsZWFyIHRoZSBzY3JlZW4gYW5kIHNldCBzdGFydCBwb3NpdGlvbiB0byB0b3AgbGVmdCBjb3JuZXIKb2xlZC5zZXROb3JtYWxEaXNwbGF5KCkgICAgICAjU2V0IGRpc3BsYXkgdG8gbm9ybWFsIG1vZGUgKGkuZSBub24taW52ZXJzZSBtb2RlKQpvbGVkLnNldEhvcml6b250YWxNb2RlKCkKCndpZHRoPTEyOApoZWlnaHQ9NjQKCiMgQ3JlYXRlIGltYWdlIGJ1ZmZlci4KIyBNYWtlIHN1cmUgdG8gY3JlYXRlIGltYWdlIHdpdGggbW9kZSAnMScgZm9yIDEtYml0IGNvbG9yLgppbWFnZSA9IEltYWdlLm5ldygnMScsICh3aWR0aCwgaGVpZ2h0KSkKCiMgTG9hZCBkZWZhdWx0IGZvbnQuCmZvbnQgPSBJbWFnZUZvbnQubG9hZF9kZWZhdWx0KCkKCiMgQWx0ZXJuYXRpdmVseSBsb2FkIGEgVFRGIGZvbnQuICBNYWtlIHN1cmUgdGhlIC50dGYgZm9udCBmaWxlIGlzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGlzIHB5dGhvbiBzY3JpcHQhCiMgU29tZSBuaWNlIGZvbnRzIHRvIHRyeTogaHR0cDovL3d3dy5kYWZvbnQuY29tL2JpdG1hcC5waHAKIyBmb250ID0gSW1hZ2VGb250LnRydWV0eXBlKCdEZWphVnVTYW5zTW9uby50dGYnLCA4KQojIENyZWF0ZSBkcmF3aW5nIG9iamVjdC4KZHJhdyA9IEltYWdlRHJhdy5EcmF3KGltYWdlKQoKIyBEZWZpbmUgdGV4dCBhbmQgZ2V0IHRvdGFsIHdpZHRoLgp0ZXh0ID0gJ0xpdmUgYSBub2JsZSBhbmQgaG9uZXN0IGxpZmUuIFJldml2aW5nIHBhc3QgdGltZXMgaW4geW91ciBvbGQgYWdlIHdpbGwgaGVscCB5b3UgdG8gZW5qb3kgeW91ciBsaWZlIGFnYWluLicKbWF4d2lkdGgsIHVudXNlZCA9IGRyYXcudGV4dHNpemUodGV4dCwgZm9udD1mb250KQoKIyBTZXQgYW5pbWF0aW9uIGFuZCBzaW5lIHdhdmUgcGFyYW1ldGVycy4KYW1wbGl0dWRlID0gaGVpZ2h0LzQKb2Zmc2V0ID0gaGVpZ2h0LzIgLSA0CnZlbG9jaXR5ID0gLTIKc3RhcnRwb3MgPSB3aWR0aAoKIyBBbmltYXRlIHRleHQgbW92aW5nIGluIHNpbmUgd2F2ZS4KcHJpbnQoJ1ByZXNzIEN0cmwtQyB0byBxdWl0LicpCnBvcyA9IHN0YXJ0cG9zCndoaWxlIFRydWU6CiAgICB0cnk6CiAgICAgICAgIyBDbGVhciBpbWFnZSBidWZmZXIgYnkgZHJhd2luZyBhIGJsYWNrIGZpbGxlZCBib3guCiAgICAgICAgZHJhdy5yZWN0YW5nbGUoKDAsMCx3aWR0aCxoZWlnaHQpLCBvdXRsaW5lPTAsIGZpbGw9MCkKICAgICAgICAjIEVudW1lcmF0ZSBjaGFyYWN0ZXJzIGFuZCBkcmF3IHRoZW0gb2Zmc2V0IHZlcnRpY2FsbHkgYmFzZWQgb24gYSBzaW5lIHdhdmUuCiAgICAgICAgeCA9IHBvcwogICAgICAgIGZvciBpLCBjIGluIGVudW1lcmF0ZSh0ZXh0KToKICAgICAgICAgICAgIyBTdG9wIGRyYXdpbmcgaWYgb2ZmIHRoZSByaWdodCBzaWRlIG9mIHNjcmVlbi4KICAgICAgICAgICAgaWYgeCA+IHdpZHRoOgogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIyBDYWxjdWxhdGUgd2lkdGggYnV0IHNraXAgZHJhd2luZyBpZiBvZmYgdGhlIGxlZnQgc2lkZSBvZiBzY3JlZW4uCiAgICAgICAgICAgIGlmIHggPCAtMTA6CiAgICAgICAgICAgICAgICBjaGFyX3dpZHRoLCBjaGFyX2hlaWdodCA9IGRyYXcudGV4dHNpemUoYywgZm9udD1mb250KQogICAgICAgICAgICAgICAgeCArPSBjaGFyX3dpZHRoCiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAjIENhbGN1bGF0ZSBvZmZzZXQgZnJvbSBzaW5lIHdhdmUuCiAgICAgICAgICAgIHkgPSBvZmZzZXQrbWF0aC5mbG9vcihhbXBsaXR1ZGUqbWF0aC5zaW4oeC9mbG9hdCh3aWR0aCkqMi4wKm1hdGgucGkpKQogICAgICAgICAgICAjIERyYXcgdGV4dC4KICAgICAgICAgICAgZHJhdy50ZXh0KCh4LCB5KSwgYywgZm9udD1mb250LCBmaWxsPTI1NSkKICAgICAgICAgICAgIyBJbmNyZW1lbnQgeCBwb3NpdGlvbiBiYXNlZCBvbiBjaGFjYWN0ZXIgd2lkdGguCiAgICAgICAgICAgIGNoYXJfd2lkdGgsIGNoYXJfaGVpZ2h0ID0gZHJhdy50ZXh0c2l6ZShjLCBmb250PWZvbnQpCiAgICAgICAgICAgIHggKz0gY2hhcl93aWR0aAogICAgICAgICMgRHJhdyB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgIG9sZWQuZHJhd0ltYWdlKGltYWdlKQogICAgICAgICMgTW92ZSBwb3NpdGlvbiBmb3IgbmV4dCBmcmFtZS4KICAgICAgICBwb3MgKz0gdmVsb2NpdHkKICAgICAgICAjIFN0YXJ0IG92ZXIgaWYgdGV4dCBoYXMgc2Nyb2xsZWQgY29tcGxldGVseSBvZmYgbGVmdCBzaWRlIG9mIHNjcmVlbi4KICAgICAgICBpZiBwb3MgPCAtbWF4d2lkdGg6CiAgICAgICAgICAgIHBvcyA9IHN0YXJ0cG9zCiAgICAgICAgIyBQYXVzZSBicmllZmx5IGJlZm9yZSBkcmF3aW5nIG5leHQgZnJhbWUuCiAgICAgICAgdGltZS5zbGVlcCgwLjEpCiAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgYnJlYWsKICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgIHByaW50ICgiRXJyb3IiKQogICAgICAgIGJyZWFrCgoKPHxmaW1fc3VmZml4fD4KVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo8fGZpbV9lbmR8Pg=="]
["6b907589126dc1691cb7e91ab8cfcb0e42004276-4","6b907589126dc1691cb7e91ab8cfcb0e42004276","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMKIyBCYWtlQml0IGV4YW1wbGUgZm9yIHRoZSBiYXNpYyBmdW5jdGlvbnMgb2YgQmFrZUJpdCAxMjh4NjQgT0xFRCAoaHR0cDovL3dpa2kuZnJpZW5kbHlhcm0uY29tL3dpa2kvaW5kZXgucGhwL0Jha2VCaXRfLV9PTEVEXzEyOHg2NCkKIwojIFRoZSBCYWtlQml0IGNvbm5lY3RzIHRoZSBOYW5vUGkgTkVPIGFuZCBCYWtlQml0IHNlbnNvcnMuCiMgWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IEJha2VCaXQgaGVyZTogIGh0dHA6Ly93aWtpLmZyaWVuZGx5YXJtLmNvbS9CYWtlQml0CiMKIyBIYXZlIGEgcXVlc3Rpb24gYWJvdXQgdGhpcyBleGFtcGxlPyAgQXNrIG9uIHRoZSBmb3J1bXMgaGVyZTogIGh0dHA6Ly93d3cuZnJpZW5kbHlhcm0uY29tL0ZvcnVtLwojCicnJwojIyBMaWNlbnNlCgpUaGUgTUlUIExpY2Vuc2UgKE1JVCkKCkJha2VCaXQ6IGFuIG9wZW4gc291cmNlIHBsYXRmb3JtIGZvciBjb25uZWN0aW5nIEJha2VCaXQgU2Vuc29ycyB0byB0aGUgTmFub1BpIE5FTy4KQ29weXJpZ2h0IChDKSAyMDE2IEZyaWVuZGx5QVJNCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgonJycKCmltcG9ydCBiYWtlYml0XzEyOF82NF9vbGVkIGFzIG9sZWQKZnJvbSBQSUwgaW1wb3J0IEltYWdlCjx8ZmltX2hvbGV8PgoKb2xlZC5pbml0KCkgICNpbml0aWFsemUgU0VFRUQgT0xFRCBkaXNwbGF5CgpvbGVkLmNsZWFyRGlzcGxheSgpICAgICAgICAgICNjbGVhciB0aGUgc2NyZWVuIGFuZCBzZXQgc3RhcnQgcG9zaXRpb24gdG8gdG9wIGxlZnQgY29ybmVyCm9sZWQuc2V0Tm9ybWFsRGlzcGxheSgpICAgICAgI1NldCBkaXNwbGF5IHRvIG5vcm1hbCBtb2RlIChpLmUgbm9uLWludmVyc2UgbW9kZSkKb2xlZC5zZXRIb3Jpem9udGFsTW9kZSgpCgp3aWR0aD0xMjgKaGVpZ2h0PTY0CgojIENyZWF0ZSBpbWFnZSBidWZmZXIuCiMgTWFrZSBzdXJlIHRvIGNyZWF0ZSBpbWFnZSB3aXRoIG1vZGUgJzEnIGZvciAxLWJpdCBjb2xvci4KaW1hZ2UgPSBJbWFnZS5uZXcoJzEnLCAod2lkdGgsIGhlaWdodCkpCgojIExvYWQgZGVmYXVsdCBmb250Lgpmb250ID0gSW1hZ2VGb250LmxvYWRfZGVmYXVsdCgpCgojIEFsdGVybmF0aXZlbHkgbG9hZCBhIFRURiBmb250LiAgTWFrZSBzdXJlIHRoZSAudHRmIGZvbnQgZmlsZSBpcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhpcyBweXRob24gc2NyaXB0IQojIFNvbWUgbmljZSBmb250cyB0byB0cnk6IGh0dHA6Ly93d3cuZGFmb250LmNvbS9iaXRtYXAucGhwCiMgZm9udCA9IEltYWdlRm9udC50cnVldHlwZSgnRGVqYVZ1U2Fuc01vbm8udHRmJywgOCkKIyBDcmVhdGUgZHJhd2luZyBvYmplY3QuCmRyYXcgPSBJbWFnZURyYXcuRHJhdyhpbWFnZSkKCiMgRGVmaW5lIHRleHQgYW5kIGdldCB0b3RhbCB3aWR0aC4KdGV4dCA9ICdMaXZlIGEgbm9ibGUgYW5kIGhvbmVzdCBsaWZlLiBSZXZpdmluZyBwYXN0IHRpbWVzIGluIHlvdXIgb2xkIGFnZSB3aWxsIGhlbHAgeW91IHRvIGVuam95IHlvdXIgbGlmZSBhZ2Fpbi4nCm1heHdpZHRoLCB1bnVzZWQgPSBkcmF3LnRleHRzaXplKHRleHQsIGZvbnQ9Zm9udCkKCiMgU2V0IGFuaW1hdGlvbiBhbmQgc2luZSB3YXZlIHBhcmFtZXRlcnMuCmFtcGxpdHVkZSA9IGhlaWdodC80Cm9mZnNldCA9IGhlaWdodC8yIC0gNAp2ZWxvY2l0eSA9IC0yCnN0YXJ0cG9zID0gd2lkdGgKCiMgQW5pbWF0ZSB0ZXh0IG1vdmluZyBpbiBzaW5lIHdhdmUuCnByaW50KCdQcmVzcyBDdHJsLUMgdG8gcXVpdC4nKQpwb3MgPSBzdGFydHBvcwp3aGlsZSBUcnVlOgogICAgdHJ5OgogICAgICAgICMgQ2xlYXIgaW1hZ2UgYnVmZmVyIGJ5IGRyYXdpbmcgYSBibGFjayBmaWxsZWQgYm94LgogICAgICAgIGRyYXcucmVjdGFuZ2xlKCgwLDAsd2lkdGgsaGVpZ2h0KSwgb3V0bGluZT0wLCBmaWxsPTApCiAgICAgICAgIyBFbnVtZXJhdGUgY2hhcmFjdGVycyBhbmQgZHJhdyB0aGVtIG9mZnNldCB2ZXJ0aWNhbGx5IGJhc2VkIG9uIGEgc2luZSB3YXZlLgogICAgICAgIHggPSBwb3MKICAgICAgICBmb3IgaSwgYyBpbiBlbnVtZXJhdGUodGV4dCk6CiAgICAgICAgICAgICMgU3RvcCBkcmF3aW5nIGlmIG9mZiB0aGUgcmlnaHQgc2lkZSBvZiBzY3JlZW4uCiAgICAgICAgICAgIGlmIHggPiB3aWR0aDoKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICMgQ2FsY3VsYXRlIHdpZHRoIGJ1dCBza2lwIGRyYXdpbmcgaWYgb2ZmIHRoZSBsZWZ0IHNpZGUgb2Ygc2NyZWVuLgogICAgICAgICAgICBpZiB4IDwgLTEwOgogICAgICAgICAgICAgICAgY2hhcl93aWR0aCwgY2hhcl9oZWlnaHQgPSBkcmF3LnRleHRzaXplKGMsIGZvbnQ9Zm9udCkKICAgICAgICAgICAgICAgIHggKz0gY2hhcl93aWR0aAogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIyBDYWxjdWxhdGUgb2Zmc2V0IGZyb20gc2luZSB3YXZlLgogICAgICAgICAgICB5ID0gb2Zmc2V0K21hdGguZmxvb3IoYW1wbGl0dWRlKm1hdGguc2luKHgvZmxvYXQod2lkdGgpKjIuMCptYXRoLnBpKSkKICAgICAgICAgICAgIyBEcmF3IHRleHQuCiAgICAgICAgICAgIGRyYXcudGV4dCgoeCwgeSksIGMsIGZvbnQ9Zm9udCwgZmlsbD0yNTUpCiAgICAgICAgICAgICMgSW5jcmVtZW50IHggcG9zaXRpb24gYmFzZWQgb24gY2hhY2FjdGVyIHdpZHRoLgogICAgICAgICAgICBjaGFyX3dpZHRoLCBjaGFyX2hlaWdodCA9IGRyYXcudGV4dHNpemUoYywgZm9udD1mb250KQogICAgICAgICAgICB4ICs9IGNoYXJfd2lkdGgKICAgICAgICAjIERyYXcgdGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICBvbGVkLmRyYXdJbWFnZShpbWFnZSkKICAgICAgICAjIE1vdmUgcG9zaXRpb24gZm9yIG5leHQgZnJhbWUuCiAgICAgICAgcG9zICs9IHZlbG9jaXR5CiAgICAgICAgIyBTdGFydCBvdmVyIGlmIHRleHQgaGFzIHNjcm9sbGVkIGNvbXBsZXRlbHkgb2ZmIGxlZnQgc2lkZSBvZiBzY3JlZW4uCiAgICAgICAgaWYgcG9zIDwgLW1heHdpZHRoOgogICAgICAgICAgICBwb3MgPSBzdGFydHBvcwogICAgICAgICMgUGF1c2UgYnJpZWZseSBiZWZvcmUgZHJhd2luZyBuZXh0IGZyYW1lLgogICAgICAgIHRpbWUuc2xlZXAoMC4xKQogICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgIGJyZWFrCiAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICBwcmludCAoIkVycm9yIikKICAgICAgICBicmVhawoKCjx8ZmltX3N1ZmZpeHw+CmZyb20gUElMIGltcG9ydCBJbWFnZUZvbnQKZnJvbSBQSUwgaW1wb3J0IEltYWdlRHJhdwppbXBvcnQgbWF0aAppbXBvcnQgdGltZQo8fGZpbV9lbmR8Pg=="]
["6b907589126dc1691cb7e91ab8cfcb0e42004276-5","6b907589126dc1691cb7e91ab8cfcb0e42004276","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMKIyBCYWtlQml0IGV4YW1wbGUgZm9yIHRoZSBiYXNpYyBmdW5jdGlvbnMgb2YgQmFrZUJpdCAxMjh4NjQgT0xFRCAoaHR0cDovL3dpa2kuZnJpZW5kbHlhcm0uY29tL3dpa2kvaW5kZXgucGhwL0Jha2VCaXRfLV9PTEVEXzEyOHg2NCkKIwojIFRoZSBCYWtlQml0IGNvbm5lY3RzIHRoZSBOYW5vUGkgTkVPIGFuZCBCYWtlQml0IHNlbnNvcnMuCiMgWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IEJha2VCaXQgaGVyZTogIGh0dHA6Ly93aWtpLmZyaWVuZGx5YXJtLmNvbS9CYWtlQml0CiMKIyBIYXZlIGEgcXVlc3Rpb24gYWJvdXQgdGhpcyBleGFtcGxlPyAgQXNrIG9uIHRoZSBmb3J1bXMgaGVyZTogIGh0dHA6Ly93d3cuZnJpZW5kbHlhcm0uY29tL0ZvcnVtLwojCicnJwojIyBMaWNlbnNlCgpUaGUgTUlUIExpY2Vuc2UgKE1JVCkKCkJha2VCaXQ6IGFuIG9wZW4gc291cmNlIHBsYXRmb3JtIGZvciBjb25uZWN0aW5nIEJha2VCaXQgU2Vuc29ycyB0byB0aGUgTmFub1BpIE5FTy4KQ29weXJpZ2h0IChDKSAyMDE2IEZyaWVuZGx5QVJNCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgonJycKCmltcG9ydCBiYWtlYml0XzEyOF82NF9vbGVkIGFzIG9sZWQKZnJvbSBQSUwgaW1wb3J0IEltYWdlCmZyb20gUElMIGltcG9ydCBJbWFnZUZvbnQKZnJvbSBQSUwgaW1wb3J0IEltYWdlRHJhdwppbXBvcnQgbWF0aAppbXBvcnQgdGltZQoKb2xlZC5pbml0KCkgICNpbml0aWFsemUgU0VFRUQgT0xFRCBkaXNwbGF5CgpvbGVkLmNsZWFyRGlzcGxheSgpICAgICAgICAgICNjbGVhciB0aGUgc2NyZWVuIGFuZCBzZXQgc3RhcnQgcG9zaXRpb24gdG8gdG9wIGxlZnQgY29ybmVyCm9sZWQuc2V0Tm9ybWFsRGlzcGxheSgpICAgICAgI1NldCBkaXNwbGF5IHRvIG5vcm1hbCBtb2RlIChpLmUgbm9uLWludmVyc2UgbW9kZSkKb2xlZC5zZXRIb3Jpem9udGFsTW9kZSgpCgp3aWR0aD0xMjgKaGVpZ2h0PTY0CgojIENyZWF0ZSBpbWFnZSBidWZmZXIuCiMgTWFrZSBzdXJlIHRvIGNyZWF0ZSBpbWFnZSB3aXRoIG1vZGUgJzEnIGZvciAxLWJpdCBjb2xvci4KaW1hZ2UgPSBJbWFnZS5uZXcoJzEnLCAod2lkdGgsIGhlaWdodCkpCgojIExvYWQgZGVmYXVsdCBmb250Lgpmb250ID0gSW1hZ2VGb250LmxvYWRfZGVmYXVsdCgpCgojIEFsdGVybmF0aXZlbHkgbG9hZCBhIFRURiBmb250LiAgTWFrZSBzdXJlIHRoZSAudHRmIGZvbnQgZmlsZSBpcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhpcyBweXRob24gc2NyaXB0IQojIFNvbWUgbmljZSBmb250cyB0byB0cnk6IGh0dHA6Ly93d3cuZGFmb250LmNvbS9iaXRtYXAucGhwCiMgZm9udCA9IEltYWdlRm9udC50cnVldHlwZSgnRGVqYVZ1U2Fuc01vbm8udHRmJywgOCkKIyBDcmVhdGUgZHJhd2luZyBvYmplY3QuCmRyYXcgPSBJbWFnZURyYXcuRHJhdyhpbWFnZSkKCiMgRGVmaW5lIHRleHQgYW5kIGdldCB0b3RhbCB3aWR0aC4KdGV4dCA9ICdMaXZlIGEgbm9ibGUgYW5kIGhvbmVzdCBsaWZlLiBSZXZpdmluZyBwYXN0IHRpbWVzIGluIHlvdXIgb2xkIGFnZSB3aWxsIGhlbHAgeW91IHRvIGVuam95IHlvdXIgbGlmZSBhZ2Fpbi4nCm1heHdpZHRoLCB1bnVzZWQgPSBkcmF3LnRleHRzaXplKHRleHQsIGZvbnQ9Zm9udCkKCiMgU2V0IGFuaW1hdGlvbiBhbmQgc2luZSB3YXZlIHBhcmFtZXRlcnMuCmFtcGxpdHVkZSA9IGhlaWdodC80Cm9mZnNldCA9IGhlaWdodC8yIC0gNAp2ZWxvY2l0eSA9IC0yCnN0YXJ0cG9zID0gd2lkdGgKCiMgQW5pbWF0ZSB0ZXh0IG1vdmluZyBpbiBzaW5lIHdhdmUuCnByaW50KCdQcmVzcyBDdHJsLUMgdG8gcXVpdC4nKQpwb3MgPSBzdGFydHBvcwp3aGlsZSBUcnVlOgogICAgdHJ5OgogICAgICAgICMgQ2xlYXIgaW1hZ2UgYnVmZmVyIGJ5IGRyYXdpbmcgYSBibGFjayBmaWxsZWQgYm94LgogICAgICAgIGRyYXcucmVjdGFuZ2xlKCgwLDAsd2lkdGgsaGVpZ2h0KSwgb3V0bGluZT0wLCBmaWxsPTApCiAgICAgICAgIyBFbnVtZXJhdGUgY2hhcmFjdGVycyBhbmQgZHJhdyB0aGVtIG9mZnNldCB2ZXJ0aWNhbGx5IGJhc2VkIG9uIGEgc2luZSB3YXZlLgogICAgICAgIHggPSBwb3MKICAgICAgICBmb3IgaSwgYyBpbiBlbnVtZXJhdGUodGV4dCk6CiAgICAgICAgICAgICMgU3RvcCBkcmF3aW5nIGlmIG9mZiB0aGUgcmlnaHQgc2lkZSBvZiBzY3JlZW4uCiAgICAgICAgICAgIGlmIHggPiB3aWR0aDoKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICMgQ2FsY3VsYXRlIHdpZHRoIGJ1dCBza2lwIGRyYXdpbmcgaWYgb2ZmIHRoZSBsZWZ0IHNpZGUgb2Ygc2NyZWVuLgogICAgICAgICAgICBpZiB4IDwgLTEwOgogICAgICAgICAgICAgICAgY2hhcl93aWR0aCwgY2hhcl9oZWlnaHQgPSBkcmF3LnRleHRzaXplKGMsIGZvbnQ9Zm9udCkKICAgICAgICAgICAgICAgIHggKz0gY2hhcl93aWR0aAogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIyBDYWxjdWxhdGUgb2Zmc2V0IGZyb20gc2luZSB3YXZlLgogICAgICAgICAgICB5ID0gb2Zmc2V0K21hdGguZmxvb3IoYW1wbGl0dWRlKm1hdGguc2luKHgvZmxvYXQod2lkdGgpKjIuMCptYXRoLnBpKSkKICAgICAgICAgICAgIyBEcmF3IHRleHQuCiAgICAgICAgICAgIGRyYXcudGV4dCgoeCwgeSksIGMsIGZvbnQ9Zm9udCwgZmlsbD0yNTUpCiAgICAgICAgICAgICMgSW5jcmVtZW50IHggcG9zaXRpb24gYmFzZWQgb24gY2hhY2FjdGVyIHdpZHRoLgogICAgICAgICAgICBjaGFyX3dpZHRoLCBjaGFyX2hlaWdodCA9IGRyYXcudGV4dHNpemUoYywgZm9udD1mb250KQogICAgICAgICAgICB4ICs9IGNoYXJfd2lkdGgKICAgICAgICAjIERyYXcgdGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICBvbGVkLmRyYXdJbWFnZShpbWFnZSkKICAgICAgICAjIE1vdmUgcG9zaXRpb24gZm9yIG5leHQgZnJhbWUuCiAgICAgICAgcG9zICs9IHZlbG9jaXR5CiAgICAgICAgIyBTdGFydCBvdmVyIGlmIHRleHQgaGFzIHNjcm9sbGVkIGNvbXBsZXRlbHkgb2ZmIGxlZnQgc2lkZSBvZiBzY3JlZW4uCiAgICAgICAgaWYgcG9zIDwgLW1heHdpZHRoOgogICAgICAgICAgICBwb3MgPSBzdGFydHBvcwogICAgICAgICMgUGF1c2UgYnJpZWZseSBiZWZvcmUgZHJhd2luZyBuZXh0IGZyYW1lLgogICAgICAgIHRpbWUuc2xlZXAoMC4xKQo8fGZpbV9ob2xlfD4KICAgICAgICBicmVhawoKCjx8ZmltX3N1ZmZpeHw+CiAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgYnJlYWsKICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgIHByaW50ICgiRXJyb3IiKQo8fGZpbV9lbmR8Pg=="]
["41611eaf2a15982105c97ec636bb2f9b9af58bd3-1","41611eaf2a15982105c97ec636bb2f9b9af58bd3","PHxmaW1fcHJlZml4fD4KIiIiCmh0dHBzOi8vY29kaWxpdHkuY29tL3Byb2dyYW1tZXJzL3Rhc2svcGVybV9taXNzaW5nX2VsZW0vCgpHaXZlbiBhcnJheSBBIG9mIGludGVnZXJzLiAgTiA9IGxlbihBKS4gIEludGVnZXJzIGFyZSBkaXN0aW5jdCBhbmQgdGFrZW4gZnJvbQpyYW5nZSAxLi4oTisxKSwgd2hpY2ggbWVhbnMgZXhhY3RseSBvbmUgaW50ZWdlciBmcm9tIDEuLihOKzEpIGlzIG1pc3NpbmcgZnJvbQpBLiAgRmluZCB0aGUgbWlzc2luZyBpbnRlZ2VyLgoKUnVudGltZTogTyhOKQpFeHRyYSBTcGFjZTogTygxKQoiIiIKPHxmaW1faG9sZXw+CiAgICB0b3RhbDIgPSBzdW0oQSkKICAgIHJldHVybiB0b3RhbDEgLSB0b3RhbDIKPHxmaW1fc3VmZml4fD4KCgpkZWYgc29sdXRpb24oQSk6CiAgICB0b3RhbDEgPSBzdW0oeHJhbmdlKDEsIGxlbihBKSArIDIpKSAgIyBzdW0gb2YgMS4uKE4rMSkKPHxmaW1fZW5kfD4="]
["41611eaf2a15982105c97ec636bb2f9b9af58bd3-2","41611eaf2a15982105c97ec636bb2f9b9af58bd3","PHxmaW1fcHJlZml4fD4KIiIiCmh0dHBzOi8vY29kaWxpdHkuY29tL3Byb2dyYW1tZXJzL3Rhc2svcGVybV9taXNzaW5nX2VsZW0vCgpHaXZlbiBhcnJheSBBIG9mIGludGVnZXJzLiAgTiA9IGxlbihBKS4gIEludGVnZXJzIGFyZSBkaXN0aW5jdCBhbmQgdGFrZW4gZnJvbQpyYW5nZSAxLi4oTisxKSwgd2hpY2ggbWVhbnMgZXhhY3RseSBvbmUgaW50ZWdlciBmcm9tIDEuLihOKzEpIGlzIG1pc3NpbmcgZnJvbQpBLiAgRmluZCB0aGUgbWlzc2luZyBpbnRlZ2VyLgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpSdW50aW1lOiBPKE4pCkV4dHJhIFNwYWNlOiBPKDEpCiIiIgo8fGZpbV9lbmR8Pg=="]
["41611eaf2a15982105c97ec636bb2f9b9af58bd3-3","41611eaf2a15982105c97ec636bb2f9b9af58bd3","PHxmaW1fcHJlZml4fD4KIiIiCmh0dHBzOi8vY29kaWxpdHkuY29tL3Byb2dyYW1tZXJzL3Rhc2svcGVybV9taXNzaW5nX2VsZW0vCgpHaXZlbiBhcnJheSBBIG9mIGludGVnZXJzLiAgTiA9IGxlbihBKS4gIEludGVnZXJzIGFyZSBkaXN0aW5jdCBhbmQgdGFrZW4gZnJvbQpyYW5nZSAxLi4oTisxKSwgd2hpY2ggbWVhbnMgZXhhY3RseSBvbmUgaW50ZWdlciBmcm9tIDEuLihOKzEpIGlzIG1pc3NpbmcgZnJvbQpBLiAgRmluZCB0aGUgbWlzc2luZyBpbnRlZ2VyLgo8fGZpbV9ob2xlfD4KCgpkZWYgc29sdXRpb24oQSk6CiAgICB0b3RhbDEgPSBzdW0oeHJhbmdlKDEsIGxlbihBKSArIDIpKSAgIyBzdW0gb2YgMS4uKE4rMSkKICAgIHRvdGFsMiA9IHN1bShBKQogICAgcmV0dXJuIHRvdGFsMSAtIHRvdGFsMgo8fGZpbV9zdWZmaXh8PgoKUnVudGltZTogTyhOKQpFeHRyYSBTcGFjZTogTygxKQoiIiIKPHxmaW1fZW5kfD4="]
["41611eaf2a15982105c97ec636bb2f9b9af58bd3-4","41611eaf2a15982105c97ec636bb2f9b9af58bd3","PHxmaW1fcHJlZml4fD4KIiIiCmh0dHBzOi8vY29kaWxpdHkuY29tL3Byb2dyYW1tZXJzL3Rhc2svcGVybV9taXNzaW5nX2VsZW0vCgpHaXZlbiBhcnJheSBBIG9mIGludGVnZXJzLiAgTiA9IGxlbihBKS4gIEludGVnZXJzIGFyZSBkaXN0aW5jdCBhbmQgdGFrZW4gZnJvbQpyYW5nZSAxLi4oTisxKSwgd2hpY2ggbWVhbnMgZXhhY3RseSBvbmUgaW50ZWdlciBmcm9tIDEuLihOKzEpIGlzIG1pc3NpbmcgZnJvbQpBLiAgRmluZCB0aGUgbWlzc2luZyBpbnRlZ2VyLgo8fGZpbV9ob2xlfD4KCgpkZWYgc29sdXRpb24oQSk6CiAgICB0b3RhbDEgPSBzdW0oeHJhbmdlKDEsIGxlbihBKSArIDIpKSAgIyBzdW0gb2YgMS4uKE4rMSkKICAgIHRvdGFsMiA9IHN1bShBKQogICAgcmV0dXJuIHRvdGFsMSAtIHRvdGFsMgo8fGZpbV9zdWZmaXh8PgoKUnVudGltZTogTyhOKQpFeHRyYSBTcGFjZTogTygxKQoiIiIKPHxmaW1fZW5kfD4="]
["41611eaf2a15982105c97ec636bb2f9b9af58bd3-5","41611eaf2a15982105c97ec636bb2f9b9af58bd3","PHxmaW1fcHJlZml4fD4KIiIiCmh0dHBzOi8vY29kaWxpdHkuY29tL3Byb2dyYW1tZXJzL3Rhc2svcGVybV9taXNzaW5nX2VsZW0vCgpHaXZlbiBhcnJheSBBIG9mIGludGVnZXJzLiAgTiA9IGxlbihBKS4gIEludGVnZXJzIGFyZSBkaXN0aW5jdCBhbmQgdGFrZW4gZnJvbQpyYW5nZSAxLi4oTisxKSwgd2hpY2ggbWVhbnMgZXhhY3RseSBvbmUgaW50ZWdlciBmcm9tIDEuLihOKzEpIGlzIG1pc3NpbmcgZnJvbQpBLiAgRmluZCB0aGUgbWlzc2luZyBpbnRlZ2VyLgoKUnVudGltZTogTyhOKQpFeHRyYSBTcGFjZTogTygxKQoiIiIKCgpkZWYgc29sdXRpb24oQSk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHRvdGFsMSA9IHN1bSh4cmFuZ2UoMSwgbGVuKEEpICsgMikpICAjIHN1bSBvZiAxLi4oTisxKQogICAgdG90YWwyID0gc3VtKEEpCiAgICByZXR1cm4gdG90YWwxIC0gdG90YWwyCjx8ZmltX2VuZHw+"]
["6d227a4cf81c122decc3fbefb8e04d0127167e81-1","6d227a4cf81c122decc3fbefb8e04d0127167e81","PHxmaW1fcHJlZml4fD4KZnJvbSBtYXRoIGltcG9ydCBhY29zLCBzaW4sIGNvcwpQSSA9IDMuMTQxNTkyNjUzNTg5NzkzClIgPSA2Mzc4LjAKCgpkZWYgZGlzdChjMSwgYzIpOgogICAgeDEsIHkxID0gYzFbMF0gLyAxODAuMCAqIFBJLCBjMVsxXSAvIDE4MC4wICogUEkKICAgIHgyLCB5MiA9IGMyWzBdIC8gMTgwLjAgKiBQSSwgYzJbMV0gLyAxODAuMCAqIFBJCiAgICByZXR1cm4gUiAqIGFjb3Moc2luKHgxKSAqIHNpbih4MikgKyBjb3MoeDEpICogY29zKHgyKSAqIGNvcyh5MSAtIHkyKSkKCmluRmlsZSA9IG9wZW4oJ2lucHV0LnR4dCcpCmNpdGllcyA9IHt9CndoaWxlIFRydWU6CiAgICBsaW5lID0gaW5GaWxlLnJlYWRsaW5lKCkuc3RyaXAoKQogICAgaWYgbGluZSA9PSAnIyc6CiAgICAgICAgYnJlYWsKICAgIHJvdyA9IGxpbmUuc3BsaXQoKQogICAgY2l0aWVzW3Jvd1swXV0gPSAoZmxvYXQocm93WzFdKSwgZmxvYXQocm93WzJdKSkKd2hpbGUgVHJ1ZToKICAgIGxpbmUgPSBpbkZpbGUucmVhZGxpbmUoKS5zdHJpcCgpCiAgICBpZiBsaW5lID09ICcjICMnOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgYnJlYWsKPHxmaW1fZW5kfD4="]
["16f6e324887e201f237e6a9122547ee94124ad0d-1","16f6e324887e201f237e6a9122547ee94124ad0d","PHxmaW1fcHJlZml4fD4KIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiMgQ29weXJpZ2h0IENvbnRyaWJ1dG9ycyB0byB0aGUgT3BlbkNvbG9ySU8gUHJvamVjdC4KCmltcG9ydCBjb3B5CmltcG9ydCB1bml0dGVzdAppbXBvcnQgb3MKaW1wb3J0IHN5cwoKaW1wb3J0IFB5T3BlbkNvbG9ySU8gYXMgT0NJTwpmcm9tIFVuaXRUZXN0VXRpbHMgaW1wb3J0IFRFU1RfTkFNRVMsIFRFU1RfREVTQ1MKCgpjbGFzcyBMb29rVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICBURVNUX1BST0NFU1NfU1BBQ0VTID0gWydyYXcnLCAnbG5oJywgJ3ZkOCcsICdhLmIuYy4nLCAnMS0yLTMtJ10KICAgIFRFU1RfRVhQX1ZBTFVFUyA9IFswLjEsIDAuMiwgMC4zLCAwLjRdCgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIHNlbGYubG9vayA9IE9DSU8uTG9vaygpCgogICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgIHNlbGYubG9vayA9IE5vbmUKCiAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRlc3QgdGhlIGRlZXBjb3B5KCkgbWV0aG9kLgogICAgICAgICIiIgogICAgICAgIHNlbGYubG9vay5zZXROYW1lKCd0ZXN0IG5hbWUnKQogICAgICAgIHNlbGYubG9vay5zZXRQcm9jZXNzU3BhY2UoJ3Rlc3Qgc3BhY2UnKQogICAgICAgIHNlbGYubG9vay5zZXREZXNjcmlwdGlvbigndGVzdCBkZXNjcmlwdGlvbicpCiAgICAgICAgbWF0ID0gT0NJTy5NYXRyaXhUcmFuc2Zvcm0oKQogICAgICAgIHNlbGYubG9vay5zZXRUcmFuc2Zvcm0obWF0KQogICAgICAgIHNlbGYubG9vay5zZXRJbnZlcnNlVHJhbnNmb3JtKG1hdCkKCiAgICAgICAgb3RoZXIgPSBjb3B5LmRlZXBjb3B5KHNlbGYubG9vaykKICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG90aGVyIGlzIHNlbGYubG9vaykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG90aGVyLmdldE5hbWUoKSwgc2VsZi5sb29rLmdldE5hbWUoKSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG90aGVyLmdldFByb2Nlc3NTcGFjZSgpLCBzZWxmLmxvb2suZ2V0UHJvY2Vzc1NwYWNlKCkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdGhlci5nZXREZXNjcmlwdGlvbigpLCBzZWxmLmxvb2suZ2V0RGVzY3JpcHRpb24oKSkKPHxmaW1fZW5kfD4="]
["16f6e324887e201f237e6a9122547ee94124ad0d-2","16f6e324887e201f237e6a9122547ee94124ad0d","PHxmaW1fcHJlZml4fD4KIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiMgQ29weXJpZ2h0IENvbnRyaWJ1dG9ycyB0byB0aGUgT3BlbkNvbG9ySU8gUHJvamVjdC4KCmltcG9ydCBjb3B5CmltcG9ydCB1bml0dGVzdAppbXBvcnQgb3MKaW1wb3J0IHN5cwoKaW1wb3J0IFB5T3BlbkNvbG9ySU8gYXMgT0NJTwpmcm9tIFVuaXRUZXN0VXRpbHMgaW1wb3J0IFRFU1RfTkFNRVMsIFRFU1RfREVTQ1MKCgpjbGFzcyBMb29rVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICBURVNUX1BST0NFU1NfU1BBQ0VTID0gWydyYXcnLCAnbG5oJywgJ3ZkOCcsICdhLmIuYy4nLCAnMS0yLTMtJ10KICAgIFRFU1RfRVhQX1ZBTFVFUyA9IFswLjEsIDAuMiwgMC4zLCAwLjRdCgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIHNlbGYubG9vayA9IE9DSU8uTG9vaygpCgogICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgIHNlbGYubG9vayA9IE5vbmUKCiAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLmxvb2suc2V0UHJvY2Vzc1NwYWNlKCd0ZXN0IHNwYWNlJykKICAgICAgICBzZWxmLmxvb2suc2V0RGVzY3JpcHRpb24oJ3Rlc3QgZGVzY3JpcHRpb24nKQogICAgICAgIG1hdCA9IE9DSU8uTWF0cml4VHJhbnNmb3JtKCkKICAgICAgICBzZWxmLmxvb2suc2V0VHJhbnNmb3JtKG1hdCkKICAgICAgICBzZWxmLmxvb2suc2V0SW52ZXJzZVRyYW5zZm9ybShtYXQpCgogICAgICAgIG90aGVyID0gY29weS5kZWVwY29weShzZWxmLmxvb2spCiAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdGhlciBpcyBzZWxmLmxvb2spCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3RoZXIuZ2V0TmFtZSgpLCBzZWxmLmxvb2suZ2V0TmFtZSgpKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3RoZXIuZ2V0UHJvY2Vzc1NwYWNlKCksIHNlbGYubG9vay5nZXRQcm9jZXNzU3BhY2UoKSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG90aGVyLmdldERlc2NyaXB0aW9uKCksIHNlbGYubG9vay5nZXREZXNjcmlwdGlvbigpKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdGhlci5nZXRUcmFuc2Zvcm0oKS5lcXVhbHMoc2VsZi5sb29rLmdldFRyYW5zZm9ybSgpKSkKICAgICAgICBzZWxmLmFzc2VydFRydWUob3RoZXIuZ2V0SW52ZXJzZVRyYW5zZm9ybSgpLmVxdWFscyhzZWxmLmxvb2suZ2V0SW52ZXJzZVRyYW5zZm9ybSgpKSkKCiAgICBkZWYgdGVzdF9uYW1lKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRlc3QgdGhlIHNldE5hbWUoKSBhbmQgZ2V0TmFtZSgpIG1ldGhvZHMuCiAgICAgICAgIiIiCgogICAgICAgICMgRGVmYXVsdCBpbml0aWFsaXplZCBuYW1lIHZhbHVlIGlzICIiCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvb2suZ2V0TmFtZSgpLCAnJykKCiAgICAgICAgZm9yIG5hbWUgaW4gVEVTVF9OQU1FUzoKICAgICAgICAgICAgc2VsZi5sb29rLnNldE5hbWUobmFtZSkKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBzZWxmLmxvb2suZ2V0TmFtZSgpKQoKICAgICAgICAjIFdyb25nIHR5cGUgdGVzdHMuCiAgICAgICAgZm9yIGludmFsaWQgaW4gKE5vbmUsIDEpOgogICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CiAgICAgICAgICAgICAgICBzZWxmLmxvb2suc2V0TmFtZShpbnZhbGlkKQoKICAgIGRlZiB0ZXN0X3Byb2Nlc3Nfc3BhY2Uoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCB0aGUgc2V0UHJvY2Vzc1NwYWNlKCkgYW5kIGdldFByb2Nlc3NOYW1lKCkgbWV0aG9kcy4KICAgICAgICAiIiIKCiAgICAgICAgIyBEZWZhdWx0IGluaXRpYWxpemVkIHByb2Nlc3Mgc3BhY2UgdmFsdWUgaXMgIiIKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vay5nZXRQcm9jZXNzU3BhY2UoKSwgJycpCgogICAgICAgIGZvciBwcm9jZXNzX3NwYWNlIGluIHNlbGYuVEVTVF9QUk9DRVNTX1NQQUNFUzoKICAgICAgICAgICAgc2VsZi5sb29rLnNldFByb2Nlc3NTcGFjZShwcm9jZXNzX3NwYWNlKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2Nlc3Nfc3BhY2UsIHNlbGYubG9vay5nZXRQcm9jZXNzU3BhY2UoKSkKCiAgICAgICAgIyBXcm9uZyB0eXBlIHRlc3RzLgogICAgICAgIGZvciBpbnZhbGlkIGluIChOb25lLCAxKToKICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgICAgc2VsZi5sb29rLnNldFByb2Nlc3NTcGFjZShpbnZhbGlkKQoKICAgIGRlZiB0ZXN0X2Rlc2NyaXB0aW9uKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRlc3QgdGhlIHNldERlc2NyaXB0aW9uKCkgYW5kIGdldERlc2NyaXB0aW9uKCkgbWV0aG9kcy4KICAgICAgICAiIiIKCiAgICAgICAgIyBEZWZhdWx0IGluaXRpYWxpemVkIGRlc2NyaXB0aW9uIHZhbHVlIGlzICIiCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvb2suZ2V0RGVzY3JpcHRpb24oKSwgJycpCgogICAgICAgIGZvciBkZXNjIGluIFRFU1RfREVTQ1M6CiAgICAgICAgICAgIHNlbGYubG9vay5zZXREZXNjcmlwdGlvbihkZXNjKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlc2MsIHNlbGYubG9vay5nZXREZXNjcmlwdGlvbigpKQoKICAgICAgICAjIFdyb25nIHR5cGUgdGVzdHMuCiAgICAgICAgZm9yIGludmFsaWQgaW4gKE5vbmUsIDEpOgogICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CiAgICAgICAgICAgICAgICBzZWxmLmxvb2suc2V0RGVzY3JpcHRpb24oaW52YWxpZCkKCiAgICBkZWYgdGVzdF90cmFuc2Zvcm0oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCB0aGUgc2V0VHJhbnNmb3JtKCkgYW5kIGdldFRyYW5zZm9ybSgpIG1ldGhvZHMuCiAgICAgICAgIiIiCgogICAgICAgICMgRGVmYXVsdCBpbml0aWFsaXplZCB0cmFuc2Zvcm0gdmFsdWUgaXMgTm9uZQogICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vay5nZXRUcmFuc2Zvcm0oKSkKCiAgICAgICAgZXhwX3RyID0gT0NJTy5FeHBvbmVudFRyYW5zZm9ybSgpCiAgICAgICAgZXhwX3RyLnNldFZhbHVlKHNlbGYuVEVTVF9FWFBfVkFMVUVTKQogICAgICAgIHNlbGYubG9vay5zZXRUcmFuc2Zvcm0oZXhwX3RyKQogICAgICAgIG91dF9leHBfdHIgPSBzZWxmLmxvb2suZ2V0VHJhbnNmb3JtKCkKICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChvdXRfZXhwX3RyLmdldFZhbHVlKCksIHNlbGYuVEVTVF9FWFBfVkFMVUVTKQoKICAgICAgICAjIFdyb25nIHR5cGUgdGVzdHMuCiAgICAgICAgZm9yIGludmFsaWQgaW4gKE9DSU8uQUxMT0NBVElPTl9VTklGT1JNLCAxKToKICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgICAgc2VsZi5sb29rLnNldFRyYW5zZm9ybShpbnZhbGlkKQoKICAgIGRlZiB0ZXN0X2ludmVyc2VfdHJhbnNmb3JtKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRlc3QgdGhlIHNldEludmVyc2VUcmFuc2Zvcm0oKSBhbmQgZ2V0SW52ZXJzZVRyYW5zZm9ybSgpIG1ldGhvZHMuCiAgICAgICAgIiIiCgogICAgICAgICMgRGVmYXVsdCBpbml0aWFsaXplZCBpbnZlcnNlIHRyYW5zZm9ybSB2YWx1ZSBpcyBOb25lCiAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29rLmdldEludmVyc2VUcmFuc2Zvcm0oKSkKCiAgICAgICAgZXhwX3RyID0gT0NJTy5FeHBvbmVudFRyYW5zZm9ybSgpCiAgICAgICAgaW52X2V4cF92YWx1ZXMgPSBbMS4wIC8gdiBmb3IgdiBpbiBzZWxmLlRFU1RfRVhQX1ZBTFVFU10KICAgICAgICBleHBfdHIuc2V0VmFsdWUoaW52X2V4cF92YWx1ZXMpCiAgICAgICAgc2VsZi5sb29rLnNldEludmVyc2VUcmFuc2Zvcm0oZXhwX3RyKQogICAgICAgIGludl9vZXQgPSBzZWxmLmxvb2suZ2V0SW52ZXJzZVRyYW5zZm9ybSgpCiAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoaW52X29ldC5nZXRWYWx1ZSgpLCBpbnZfZXhwX3ZhbHVlcykKCiAgICAgICAgIyBXcm9uZyB0eXBlIHRlc3RzLgogICAgICAgIGZvciBpbnZhbGlkIGluIChPQ0lPLkFMTE9DQVRJT05fVU5JRk9STSwgMSk6CiAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgICAgIHNlbGYubG9vay5zZXRJbnZlcnNlVHJhbnNmb3JtKGludmFsaWQpCgogICAgZGVmIHRlc3RfY29uc3RydWN0b3Jfd2l0aF9rZXl3b3JkKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRlc3QgTG9vayBjb25zdHJ1Y3RvciB3aXRoIGtleXdvcmRzIGFuZCB2YWxpZGF0ZSBpdHMgdmFsdWVzLgogICAgICAgICIiIgoKICAgICAgICAjIFdpdGgga2V5d29yZHMgaW4gdGhlaXIgcHJvcGVyIG9yZGVyLgogICAgICAgIGV4cF90ciA9IE9DSU8uRXhwb25lbnRUcmFuc2Zvcm0oKQogICAgICAgIGludl9leHBfdHIgPSBPQ0lPLkV4cG9uZW50VHJhbnNmb3JtKCkKICAgICAgICBsb29rID0gT0NJTy5Mb29rKG5hbWU9J2Nvb2xsb29rJywKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NTcGFjZT0nc29tZXNwYWNlJywKICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1leHBfdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnZlcnNlVHJhbnNmb3JtPWludl9leHBfdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0ndGhpcyBpcyBhIHRlc3QnKQoKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvb2suZ2V0TmFtZSgpLCAnY29vbGxvb2snKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9vay5nZXRQcm9jZXNzU3BhY2UoKSwgJ3NvbWVzcGFjZScpCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGxvb2suZ2V0VHJhbnNmb3JtKCksIHR5cGUoZXhwX3RyKSkKICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobG9vay5nZXRJbnZlcnNlVHJhbnNmb3JtKCksIHR5cGUoaW52X2V4cF90cikpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb29rLmdldERlc2NyaXB0aW9uKCksICd0aGlzIGlzIGEgdGVzdCcpCgogICAgICAgICMgV2l0aCBrZXl3b3JkIG5vdCBpbiB0aGVpciBwcm9wZXIgb3JkZXIuCiAgICAgICAgZXhwX3RyMiA9IE9DSU8uRXhwb25lbnRUcmFuc2Zvcm0oKQogICAgICAgIGludl9leHBfdHIyID0gT0NJTy5FeHBvbmVudFRyYW5zZm9ybSgpCiAgICAgICAgbG9vazIgPSBPQ0lPLkxvb2soaW52ZXJzZVRyYW5zZm9ybT1pbnZfZXhwX3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSd0aGlzIGlzIGEgdGVzdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0nY29vbGxvb2snLAogICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NTcGFjZT0nc29tZXNwYWNlJywKICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09ZXhwX3RyKQoKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvb2syLmdldE5hbWUoKSwgJ2Nvb2xsb29rJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvb2syLmdldFByb2Nlc3NTcGFjZSgpLCAnc29tZXNwYWNlJykKICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobG9vazIuZ2V0VHJhbnNmb3JtKCksIHR5cGUoZXhwX3RyMikpCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGxvb2syLmdldEludmVyc2VUcmFuc2Zvcm0oKSwgdHlwZShpbnZfZXhwX3RyMikpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb29rMi5nZXREZXNjcmlwdGlvbigpLCAndGhpcyBpcyBhIHRlc3QnKQoKICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX3dpdGhfcG9zaXRpb25hbChzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUZXN0IExvb2sgY29uc3RydWN0b3Igd2l0aG91dCBrZXl3b3JkcyBhbmQgdmFsaWRhdGUgaXRzIHZhbHVlcy4KICAgICAgICAiIiIKCiAgICAgICAgZXhwX3RyID0gT0NJTy5FeHBvbmVudFRyYW5zZm9ybSgpCiAgICAgICAgaW52X2V4cF90ciA9IE9DSU8uRXhwb25lbnRUcmFuc2Zvcm0oKQogICAgICAgIGxvb2sgPSBPQ0lPLkxvb2soJ2Nvb2xsb29rJywKICAgICAgICAgICAgICAgICAgICAgICAgICdzb21lc3BhY2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgZXhwX3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgaW52X2V4cF90ciwKICAgICAgICAgICAgICAgICAgICAgICAgICd0aGlzIGlzIGEgdGVzdCcpCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9vay5nZXROYW1lKCksICdjb29sbG9vaycpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb29rLmdldFByb2Nlc3NTcGFjZSgpLCAnc29tZXNwYWNlJykKICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobG9vay5nZXRUcmFuc2Zvcm0oKSwgdHlwZShleHBfdHIpKQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShsb29rLmdldEludmVyc2VUcmFuc2Zvcm0oKSwgdHlwZShpbnZfZXhwX3RyKSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvb2suZ2V0RGVzY3JpcHRpb24oKSwgJ3RoaXMgaXMgYSB0ZXN0JykKCiAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl93cm9uZ19wYXJhbWV0ZXJfdHlwZShzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUZXN0IExvb2sgY29uc3RydWN0b3Igd2l0aCBhIHdyb25nIHBhcmFtZXRlciB0eXBlLgogICAgICAgICIiIgoKICAgICAgICBmb3IgaW52YWxpZCBpbiAoTm9uZSwgMSk6CiAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgICAgIGxvb2sgPSBPQ0lPLkxvb2soaW52YWxpZCkKPHxmaW1fc3VmZml4fD4KICAgICAgICAiIiIKICAgICAgICBUZXN0IHRoZSBkZWVwY29weSgpIG1ldGhvZC4KICAgICAgICAiIiIKICAgICAgICBzZWxmLmxvb2suc2V0TmFtZSgndGVzdCBuYW1lJykKPHxmaW1fZW5kfD4="]
["16f6e324887e201f237e6a9122547ee94124ad0d-3","16f6e324887e201f237e6a9122547ee94124ad0d","PHxmaW1fcHJlZml4fD4KIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiMgQ29weXJpZ2h0IENvbnRyaWJ1dG9ycyB0byB0aGUgT3BlbkNvbG9ySU8gUHJvamVjdC4KCmltcG9ydCBjb3B5CmltcG9ydCB1bml0dGVzdAppbXBvcnQgb3MKaW1wb3J0IHN5cwoKaW1wb3J0IFB5T3BlbkNvbG9ySU8gYXMgT0NJTwpmcm9tIFVuaXRUZXN0VXRpbHMgaW1wb3J0IFRFU1RfTkFNRVMsIFRFU1RfREVTQ1MKCgpjbGFzcyBMb29rVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICBURVNUX1BST0NFU1NfU1BBQ0VTID0gWydyYXcnLCAnbG5oJywgJ3ZkOCcsICdhLmIuYy4nLCAnMS0yLTMtJ10KICAgIFRFU1RfRVhQX1ZBTFVFUyA9IFswLjEsIDAuMiwgMC4zLCAwLjRdCgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIHNlbGYubG9vayA9IE9DSU8uTG9vaygpCgogICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgIHNlbGYubG9vayA9IE5vbmUKCiAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRlc3QgdGhlIGRlZXBjb3B5KCkgbWV0aG9kLgogICAgICAgICIiIgogICAgICAgIHNlbGYubG9vay5zZXROYW1lKCd0ZXN0IG5hbWUnKQogICAgICAgIHNlbGYubG9vay5zZXRQcm9jZXNzU3BhY2UoJ3Rlc3Qgc3BhY2UnKQogICAgICAgIHNlbGYubG9vay5zZXREZXNjcmlwdGlvbigndGVzdCBkZXNjcmlwdGlvbicpCiAgICAgICAgbWF0ID0gT0NJTy5NYXRyaXhUcmFuc2Zvcm0oKQogICAgICAgIHNlbGYubG9vay5zZXRUcmFuc2Zvcm0obWF0KQogICAgICAgIHNlbGYubG9vay5zZXRJbnZlcnNlVHJhbnNmb3JtKG1hdCkKCiAgICAgICAgb3RoZXIgPSBjb3B5LmRlZXBjb3B5KHNlbGYubG9vaykKICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG90aGVyIGlzIHNlbGYubG9vaykKCjx8ZmltX2hvbGV8PgogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdGhlci5nZXRJbnZlcnNlVHJhbnNmb3JtKCkuZXF1YWxzKHNlbGYubG9vay5nZXRJbnZlcnNlVHJhbnNmb3JtKCkpKQoKICAgIGRlZiB0ZXN0X25hbWUoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCB0aGUgc2V0TmFtZSgpIGFuZCBnZXROYW1lKCkgbWV0aG9kcy4KICAgICAgICAiIiIKCiAgICAgICAgIyBEZWZhdWx0IGluaXRpYWxpemVkIG5hbWUgdmFsdWUgaXMgIiIKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vay5nZXROYW1lKCksICcnKQoKICAgICAgICBmb3IgbmFtZSBpbiBURVNUX05BTUVTOgogICAgICAgICAgICBzZWxmLmxvb2suc2V0TmFtZShuYW1lKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIHNlbGYubG9vay5nZXROYW1lKCkpCgogICAgICAgICMgV3JvbmcgdHlwZSB0ZXN0cy4KICAgICAgICBmb3IgaW52YWxpZCBpbiAoTm9uZSwgMSk6CiAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgICAgIHNlbGYubG9vay5zZXROYW1lKGludmFsaWQpCgogICAgZGVmIHRlc3RfcHJvY2Vzc19zcGFjZShzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUZXN0IHRoZSBzZXRQcm9jZXNzU3BhY2UoKSBhbmQgZ2V0UHJvY2Vzc05hbWUoKSBtZXRob2RzLgogICAgICAgICIiIgoKICAgICAgICAjIERlZmF1bHQgaW5pdGlhbGl6ZWQgcHJvY2VzcyBzcGFjZSB2YWx1ZSBpcyAiIgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb29rLmdldFByb2Nlc3NTcGFjZSgpLCAnJykKCiAgICAgICAgZm9yIHByb2Nlc3Nfc3BhY2UgaW4gc2VsZi5URVNUX1BST0NFU1NfU1BBQ0VTOgogICAgICAgICAgICBzZWxmLmxvb2suc2V0UHJvY2Vzc1NwYWNlKHByb2Nlc3Nfc3BhY2UpCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvY2Vzc19zcGFjZSwgc2VsZi5sb29rLmdldFByb2Nlc3NTcGFjZSgpKQoKICAgICAgICAjIFdyb25nIHR5cGUgdGVzdHMuCiAgICAgICAgZm9yIGludmFsaWQgaW4gKE5vbmUsIDEpOgogICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CiAgICAgICAgICAgICAgICBzZWxmLmxvb2suc2V0UHJvY2Vzc1NwYWNlKGludmFsaWQpCgogICAgZGVmIHRlc3RfZGVzY3JpcHRpb24oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCB0aGUgc2V0RGVzY3JpcHRpb24oKSBhbmQgZ2V0RGVzY3JpcHRpb24oKSBtZXRob2RzLgogICAgICAgICIiIgoKICAgICAgICAjIERlZmF1bHQgaW5pdGlhbGl6ZWQgZGVzY3JpcHRpb24gdmFsdWUgaXMgIiIKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vay5nZXREZXNjcmlwdGlvbigpLCAnJykKCiAgICAgICAgZm9yIGRlc2MgaW4gVEVTVF9ERVNDUzoKICAgICAgICAgICAgc2VsZi5sb29rLnNldERlc2NyaXB0aW9uKGRlc2MpCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVzYywgc2VsZi5sb29rLmdldERlc2NyaXB0aW9uKCkpCgogICAgICAgICMgV3JvbmcgdHlwZSB0ZXN0cy4KICAgICAgICBmb3IgaW52YWxpZCBpbiAoTm9uZSwgMSk6CiAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgICAgIHNlbGYubG9vay5zZXREZXNjcmlwdGlvbihpbnZhbGlkKQoKICAgIGRlZiB0ZXN0X3RyYW5zZm9ybShzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUZXN0IHRoZSBzZXRUcmFuc2Zvcm0oKSBhbmQgZ2V0VHJhbnNmb3JtKCkgbWV0aG9kcy4KICAgICAgICAiIiIKCiAgICAgICAgIyBEZWZhdWx0IGluaXRpYWxpemVkIHRyYW5zZm9ybSB2YWx1ZSBpcyBOb25lCiAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29rLmdldFRyYW5zZm9ybSgpKQoKICAgICAgICBleHBfdHIgPSBPQ0lPLkV4cG9uZW50VHJhbnNmb3JtKCkKICAgICAgICBleHBfdHIuc2V0VmFsdWUoc2VsZi5URVNUX0VYUF9WQUxVRVMpCiAgICAgICAgc2VsZi5sb29rLnNldFRyYW5zZm9ybShleHBfdHIpCiAgICAgICAgb3V0X2V4cF90ciA9IHNlbGYubG9vay5nZXRUcmFuc2Zvcm0oKQogICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKG91dF9leHBfdHIuZ2V0VmFsdWUoKSwgc2VsZi5URVNUX0VYUF9WQUxVRVMpCgogICAgICAgICMgV3JvbmcgdHlwZSB0ZXN0cy4KICAgICAgICBmb3IgaW52YWxpZCBpbiAoT0NJTy5BTExPQ0FUSU9OX1VOSUZPUk0sIDEpOgogICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CiAgICAgICAgICAgICAgICBzZWxmLmxvb2suc2V0VHJhbnNmb3JtKGludmFsaWQpCgogICAgZGVmIHRlc3RfaW52ZXJzZV90cmFuc2Zvcm0oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCB0aGUgc2V0SW52ZXJzZVRyYW5zZm9ybSgpIGFuZCBnZXRJbnZlcnNlVHJhbnNmb3JtKCkgbWV0aG9kcy4KICAgICAgICAiIiIKCiAgICAgICAgIyBEZWZhdWx0IGluaXRpYWxpemVkIGludmVyc2UgdHJhbnNmb3JtIHZhbHVlIGlzIE5vbmUKICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb2suZ2V0SW52ZXJzZVRyYW5zZm9ybSgpKQoKICAgICAgICBleHBfdHIgPSBPQ0lPLkV4cG9uZW50VHJhbnNmb3JtKCkKICAgICAgICBpbnZfZXhwX3ZhbHVlcyA9IFsxLjAgLyB2IGZvciB2IGluIHNlbGYuVEVTVF9FWFBfVkFMVUVTXQogICAgICAgIGV4cF90ci5zZXRWYWx1ZShpbnZfZXhwX3ZhbHVlcykKICAgICAgICBzZWxmLmxvb2suc2V0SW52ZXJzZVRyYW5zZm9ybShleHBfdHIpCiAgICAgICAgaW52X29ldCA9IHNlbGYubG9vay5nZXRJbnZlcnNlVHJhbnNmb3JtKCkKICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChpbnZfb2V0LmdldFZhbHVlKCksIGludl9leHBfdmFsdWVzKQoKICAgICAgICAjIFdyb25nIHR5cGUgdGVzdHMuCiAgICAgICAgZm9yIGludmFsaWQgaW4gKE9DSU8uQUxMT0NBVElPTl9VTklGT1JNLCAxKToKICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgICAgc2VsZi5sb29rLnNldEludmVyc2VUcmFuc2Zvcm0oaW52YWxpZCkKCiAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl93aXRoX2tleXdvcmQoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCBMb29rIGNvbnN0cnVjdG9yIHdpdGgga2V5d29yZHMgYW5kIHZhbGlkYXRlIGl0cyB2YWx1ZXMuCiAgICAgICAgIiIiCgogICAgICAgICMgV2l0aCBrZXl3b3JkcyBpbiB0aGVpciBwcm9wZXIgb3JkZXIuCiAgICAgICAgZXhwX3RyID0gT0NJTy5FeHBvbmVudFRyYW5zZm9ybSgpCiAgICAgICAgaW52X2V4cF90ciA9IE9DSU8uRXhwb25lbnRUcmFuc2Zvcm0oKQogICAgICAgIGxvb2sgPSBPQ0lPLkxvb2sobmFtZT0nY29vbGxvb2snLAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1NwYWNlPSdzb21lc3BhY2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPWV4cF90ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGludmVyc2VUcmFuc2Zvcm09aW52X2V4cF90ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSd0aGlzIGlzIGEgdGVzdCcpCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9vay5nZXROYW1lKCksICdjb29sbG9vaycpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb29rLmdldFByb2Nlc3NTcGFjZSgpLCAnc29tZXNwYWNlJykKICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobG9vay5nZXRUcmFuc2Zvcm0oKSwgdHlwZShleHBfdHIpKQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShsb29rLmdldEludmVyc2VUcmFuc2Zvcm0oKSwgdHlwZShpbnZfZXhwX3RyKSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvb2suZ2V0RGVzY3JpcHRpb24oKSwgJ3RoaXMgaXMgYSB0ZXN0JykKCiAgICAgICAgIyBXaXRoIGtleXdvcmQgbm90IGluIHRoZWlyIHByb3BlciBvcmRlci4KICAgICAgICBleHBfdHIyID0gT0NJTy5FeHBvbmVudFRyYW5zZm9ybSgpCiAgICAgICAgaW52X2V4cF90cjIgPSBPQ0lPLkV4cG9uZW50VHJhbnNmb3JtKCkKICAgICAgICBsb29rMiA9IE9DSU8uTG9vayhpbnZlcnNlVHJhbnNmb3JtPWludl9leHBfdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J3RoaXMgaXMgYSB0ZXN0JywKICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSdjb29sbG9vaycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1NwYWNlPSdzb21lc3BhY2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1leHBfdHIpCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9vazIuZ2V0TmFtZSgpLCAnY29vbGxvb2snKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9vazIuZ2V0UHJvY2Vzc1NwYWNlKCksICdzb21lc3BhY2UnKQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShsb29rMi5nZXRUcmFuc2Zvcm0oKSwgdHlwZShleHBfdHIyKSkKICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobG9vazIuZ2V0SW52ZXJzZVRyYW5zZm9ybSgpLCB0eXBlKGludl9leHBfdHIyKSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvb2syLmdldERlc2NyaXB0aW9uKCksICd0aGlzIGlzIGEgdGVzdCcpCgogICAgZGVmIHRlc3RfY29uc3RydWN0b3Jfd2l0aF9wb3NpdGlvbmFsKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRlc3QgTG9vayBjb25zdHJ1Y3RvciB3aXRob3V0IGtleXdvcmRzIGFuZCB2YWxpZGF0ZSBpdHMgdmFsdWVzLgogICAgICAgICIiIgoKICAgICAgICBleHBfdHIgPSBPQ0lPLkV4cG9uZW50VHJhbnNmb3JtKCkKICAgICAgICBpbnZfZXhwX3RyID0gT0NJTy5FeHBvbmVudFRyYW5zZm9ybSgpCiAgICAgICAgbG9vayA9IE9DSU8uTG9vaygnY29vbGxvb2snLAogICAgICAgICAgICAgICAgICAgICAgICAgJ3NvbWVzcGFjZScsCiAgICAgICAgICAgICAgICAgICAgICAgICBleHBfdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnZfZXhwX3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgJ3RoaXMgaXMgYSB0ZXN0JykKCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb29rLmdldE5hbWUoKSwgJ2Nvb2xsb29rJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvb2suZ2V0UHJvY2Vzc1NwYWNlKCksICdzb21lc3BhY2UnKQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShsb29rLmdldFRyYW5zZm9ybSgpLCB0eXBlKGV4cF90cikpCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGxvb2suZ2V0SW52ZXJzZVRyYW5zZm9ybSgpLCB0eXBlKGludl9leHBfdHIpKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9vay5nZXREZXNjcmlwdGlvbigpLCAndGhpcyBpcyBhIHRlc3QnKQoKICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX3dyb25nX3BhcmFtZXRlcl90eXBlKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRlc3QgTG9vayBjb25zdHJ1Y3RvciB3aXRoIGEgd3JvbmcgcGFyYW1ldGVyIHR5cGUuCiAgICAgICAgIiIiCgogICAgICAgIGZvciBpbnZhbGlkIGluIChOb25lLCAxKToKICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgICAgbG9vayA9IE9DSU8uTG9vayhpbnZhbGlkKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3RoZXIuZ2V0TmFtZSgpLCBzZWxmLmxvb2suZ2V0TmFtZSgpKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3RoZXIuZ2V0UHJvY2Vzc1NwYWNlKCksIHNlbGYubG9vay5nZXRQcm9jZXNzU3BhY2UoKSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG90aGVyLmdldERlc2NyaXB0aW9uKCksIHNlbGYubG9vay5nZXREZXNjcmlwdGlvbigpKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdGhlci5nZXRUcmFuc2Zvcm0oKS5lcXVhbHMoc2VsZi5sb29rLmdldFRyYW5zZm9ybSgpKSkKPHxmaW1fZW5kfD4="]
["16f6e324887e201f237e6a9122547ee94124ad0d-4","16f6e324887e201f237e6a9122547ee94124ad0d","PHxmaW1fcHJlZml4fD4KIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiMgQ29weXJpZ2h0IENvbnRyaWJ1dG9ycyB0byB0aGUgT3BlbkNvbG9ySU8gUHJvamVjdC4KCmltcG9ydCBjb3B5CmltcG9ydCB1bml0dGVzdAppbXBvcnQgb3MKaW1wb3J0IHN5cwoKaW1wb3J0IFB5T3BlbkNvbG9ySU8gYXMgT0NJTwpmcm9tIFVuaXRUZXN0VXRpbHMgaW1wb3J0IFRFU1RfTkFNRVMsIFRFU1RfREVTQ1MKCgpjbGFzcyBMb29rVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICBURVNUX1BST0NFU1NfU1BBQ0VTID0gWydyYXcnLCAnbG5oJywgJ3ZkOCcsICdhLmIuYy4nLCAnMS0yLTMtJ10KICAgIFRFU1RfRVhQX1ZBTFVFUyA9IFswLjEsIDAuMiwgMC4zLCAwLjRdCgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIHNlbGYubG9vayA9IE9DSU8uTG9vaygpCgogICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgIHNlbGYubG9vayA9IE5vbmUKCiAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRlc3QgdGhlIGRlZXBjb3B5KCkgbWV0aG9kLgogICAgICAgICIiIgogICAgICAgIHNlbGYubG9vay5zZXROYW1lKCd0ZXN0IG5hbWUnKQogICAgICAgIHNlbGYubG9vay5zZXRQcm9jZXNzU3BhY2UoJ3Rlc3Qgc3BhY2UnKQogICAgICAgIHNlbGYubG9vay5zZXREZXNjcmlwdGlvbigndGVzdCBkZXNjcmlwdGlvbicpCiAgICAgICAgbWF0ID0gT0NJTy5NYXRyaXhUcmFuc2Zvcm0oKQogICAgICAgIHNlbGYubG9vay5zZXRUcmFuc2Zvcm0obWF0KQogICAgICAgIHNlbGYubG9vay5zZXRJbnZlcnNlVHJhbnNmb3JtKG1hdCkKCiAgICAgICAgb3RoZXIgPSBjb3B5LmRlZXBjb3B5KHNlbGYubG9vaykKICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG90aGVyIGlzIHNlbGYubG9vaykKCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdGhlci5nZXROYW1lKCksIHNlbGYubG9vay5nZXROYW1lKCkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdGhlci5nZXRQcm9jZXNzU3BhY2UoKSwgc2VsZi5sb29rLmdldFByb2Nlc3NTcGFjZSgpKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3RoZXIuZ2V0RGVzY3JpcHRpb24oKSwgc2VsZi5sb29rLmdldERlc2NyaXB0aW9uKCkpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG90aGVyLmdldFRyYW5zZm9ybSgpLmVxdWFscyhzZWxmLmxvb2suZ2V0VHJhbnNmb3JtKCkpKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdGhlci5nZXRJbnZlcnNlVHJhbnNmb3JtKCkuZXF1YWxzKHNlbGYubG9vay5nZXRJbnZlcnNlVHJhbnNmb3JtKCkpKQoKICAgIGRlZiB0ZXN0X25hbWUoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCB0aGUgc2V0TmFtZSgpIGFuZCBnZXROYW1lKCkgbWV0aG9kcy4KICAgICAgICAiIiIKCiAgICAgICAgIyBEZWZhdWx0IGluaXRpYWxpemVkIG5hbWUgdmFsdWUgaXMgIiIKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vay5nZXROYW1lKCksICcnKQoKICAgICAgICBmb3IgbmFtZSBpbiBURVNUX05BTUVTOgogICAgICAgICAgICBzZWxmLmxvb2suc2V0TmFtZShuYW1lKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIHNlbGYubG9vay5nZXROYW1lKCkpCgogICAgICAgICMgV3JvbmcgdHlwZSB0ZXN0cy4KICAgICAgICBmb3IgaW52YWxpZCBpbiAoTm9uZSwgMSk6CiAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgICAgIHNlbGYubG9vay5zZXROYW1lKGludmFsaWQpCgogICAgZGVmIHRlc3RfcHJvY2Vzc19zcGFjZShzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUZXN0IHRoZSBzZXRQcm9jZXNzU3BhY2UoKSBhbmQgZ2V0UHJvY2Vzc05hbWUoKSBtZXRob2RzLgogICAgICAgICIiIgoKICAgICAgICAjIERlZmF1bHQgaW5pdGlhbGl6ZWQgcHJvY2VzcyBzcGFjZSB2YWx1ZSBpcyAiIgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb29rLmdldFByb2Nlc3NTcGFjZSgpLCAnJykKCiAgICAgICAgZm9yIHByb2Nlc3Nfc3BhY2UgaW4gc2VsZi5URVNUX1BST0NFU1NfU1BBQ0VTOgogICAgICAgICAgICBzZWxmLmxvb2suc2V0UHJvY2Vzc1NwYWNlKHByb2Nlc3Nfc3BhY2UpCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvY2Vzc19zcGFjZSwgc2VsZi5sb29rLmdldFByb2Nlc3NTcGFjZSgpKQoKICAgICAgICAjIFdyb25nIHR5cGUgdGVzdHMuCiAgICAgICAgZm9yIGludmFsaWQgaW4gKE5vbmUsIDEpOgogICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CiAgICAgICAgICAgICAgICBzZWxmLmxvb2suc2V0UHJvY2Vzc1NwYWNlKGludmFsaWQpCgogICAgZGVmIHRlc3RfZGVzY3JpcHRpb24oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCB0aGUgc2V0RGVzY3JpcHRpb24oKSBhbmQgZ2V0RGVzY3JpcHRpb24oKSBtZXRob2RzLgogICAgICAgICIiIgoKICAgICAgICAjIERlZmF1bHQgaW5pdGlhbGl6ZWQgZGVzY3JpcHRpb24gdmFsdWUgaXMgIiIKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vay5nZXREZXNjcmlwdGlvbigpLCAnJykKCiAgICAgICAgZm9yIGRlc2MgaW4gVEVTVF9ERVNDUzoKICAgICAgICAgICAgc2VsZi5sb29rLnNldERlc2NyaXB0aW9uKGRlc2MpCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVzYywgc2VsZi5sb29rLmdldERlc2NyaXB0aW9uKCkpCgogICAgICAgICMgV3JvbmcgdHlwZSB0ZXN0cy4KICAgICAgICBmb3IgaW52YWxpZCBpbiAoTm9uZSwgMSk6CiAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgICAgIHNlbGYubG9vay5zZXREZXNjcmlwdGlvbihpbnZhbGlkKQoKICAgIGRlZiB0ZXN0X3RyYW5zZm9ybShzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUZXN0IHRoZSBzZXRUcmFuc2Zvcm0oKSBhbmQgZ2V0VHJhbnNmb3JtKCkgbWV0aG9kcy4KICAgICAgICAiIiIKCiAgICAgICAgIyBEZWZhdWx0IGluaXRpYWxpemVkIHRyYW5zZm9ybSB2YWx1ZSBpcyBOb25lCiAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29rLmdldFRyYW5zZm9ybSgpKQoKICAgICAgICBleHBfdHIgPSBPQ0lPLkV4cG9uZW50VHJhbnNmb3JtKCkKICAgICAgICBleHBfdHIuc2V0VmFsdWUoc2VsZi5URVNUX0VYUF9WQUxVRVMpCiAgICAgICAgc2VsZi5sb29rLnNldFRyYW5zZm9ybShleHBfdHIpCiAgICAgICAgb3V0X2V4cF90ciA9IHNlbGYubG9vay5nZXRUcmFuc2Zvcm0oKQogICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKG91dF9leHBfdHIuZ2V0VmFsdWUoKSwgc2VsZi5URVNUX0VYUF9WQUxVRVMpCgogICAgICAgICMgV3JvbmcgdHlwZSB0ZXN0cy4KICAgICAgICBmb3IgaW52YWxpZCBpbiAoT0NJTy5BTExPQ0FUSU9OX1VOSUZPUk0sIDEpOgogICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CiAgICAgICAgICAgICAgICBzZWxmLmxvb2suc2V0VHJhbnNmb3JtKGludmFsaWQpCgogICAgZGVmIHRlc3RfaW52ZXJzZV90cmFuc2Zvcm0oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCB0aGUgc2V0SW52ZXJzZVRyYW5zZm9ybSgpIGFuZCBnZXRJbnZlcnNlVHJhbnNmb3JtKCkgbWV0aG9kcy4KICAgICAgICAiIiIKCiAgICAgICAgIyBEZWZhdWx0IGluaXRpYWxpemVkIGludmVyc2UgdHJhbnNmb3JtIHZhbHVlIGlzIE5vbmUKICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb2suZ2V0SW52ZXJzZVRyYW5zZm9ybSgpKQoKICAgICAgICBleHBfdHIgPSBPQ0lPLkV4cG9uZW50VHJhbnNmb3JtKCkKICAgICAgICBpbnZfZXhwX3ZhbHVlcyA9IFsxLjAgLyB2IGZvciB2IGluIHNlbGYuVEVTVF9FWFBfVkFMVUVTXQogICAgICAgIGV4cF90ci5zZXRWYWx1ZShpbnZfZXhwX3ZhbHVlcykKICAgICAgICBzZWxmLmxvb2suc2V0SW52ZXJzZVRyYW5zZm9ybShleHBfdHIpCiAgICAgICAgaW52X29ldCA9IHNlbGYubG9vay5nZXRJbnZlcnNlVHJhbnNmb3JtKCkKICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChpbnZfb2V0LmdldFZhbHVlKCksIGludl9leHBfdmFsdWVzKQoKICAgICAgICAjIFdyb25nIHR5cGUgdGVzdHMuCiAgICAgICAgZm9yIGludmFsaWQgaW4gKE9DSU8uQUxMT0NBVElPTl9VTklGT1JNLCAxKToKICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgICAgc2VsZi5sb29rLnNldEludmVyc2VUcmFuc2Zvcm0oaW52YWxpZCkKCiAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl93aXRoX2tleXdvcmQoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCBMb29rIGNvbnN0cnVjdG9yIHdpdGgga2V5d29yZHMgYW5kIHZhbGlkYXRlIGl0cyB2YWx1ZXMuCiAgICAgICAgIiIiCgogICAgICAgICMgV2l0aCBrZXl3b3JkcyBpbiB0aGVpciBwcm9wZXIgb3JkZXIuCiAgICAgICAgZXhwX3RyID0gT0NJTy5FeHBvbmVudFRyYW5zZm9ybSgpCiAgICAgICAgaW52X2V4cF90ciA9IE9DSU8uRXhwb25lbnRUcmFuc2Zvcm0oKQogICAgICAgIGxvb2sgPSBPQ0lPLkxvb2sobmFtZT0nY29vbGxvb2snLAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1NwYWNlPSdzb21lc3BhY2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPWV4cF90ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGludmVyc2VUcmFuc2Zvcm09aW52X2V4cF90ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSd0aGlzIGlzIGEgdGVzdCcpCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9vay5nZXROYW1lKCksICdjb29sbG9vaycpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb29rLmdldFByb2Nlc3NTcGFjZSgpLCAnc29tZXNwYWNlJykKICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobG9vay5nZXRUcmFuc2Zvcm0oKSwgdHlwZShleHBfdHIpKQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShsb29rLmdldEludmVyc2VUcmFuc2Zvcm0oKSwgdHlwZShpbnZfZXhwX3RyKSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvb2suZ2V0RGVzY3JpcHRpb24oKSwgJ3RoaXMgaXMgYSB0ZXN0JykKCiAgICAgICAgIyBXaXRoIGtleXdvcmQgbm90IGluIHRoZWlyIHByb3BlciBvcmRlci4KICAgICAgICBleHBfdHIyID0gT0NJTy5FeHBvbmVudFRyYW5zZm9ybSgpCiAgICAgICAgaW52X2V4cF90cjIgPSBPQ0lPLkV4cG9uZW50VHJhbnNmb3JtKCkKICAgICAgICBsb29rMiA9IE9DSU8uTG9vayhpbnZlcnNlVHJhbnNmb3JtPWludl9leHBfdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J3RoaXMgaXMgYSB0ZXN0JywKICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSdjb29sbG9vaycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1NwYWNlPSdzb21lc3BhY2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1leHBfdHIpCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9vazIuZ2V0TmFtZSgpLCAnY29vbGxvb2snKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9vazIuZ2V0UHJvY2Vzc1NwYWNlKCksICdzb21lc3BhY2UnKQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShsb29rMi5nZXRUcmFuc2Zvcm0oKSwgdHlwZShleHBfdHIyKSkKICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobG9vazIuZ2V0SW52ZXJzZVRyYW5zZm9ybSgpLCB0eXBlKGludl9leHBfdHIyKSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvb2syLmdldERlc2NyaXB0aW9uKCksICd0aGlzIGlzIGEgdGVzdCcpCgogICAgZGVmIHRlc3RfY29uc3RydWN0b3Jfd2l0aF9wb3NpdGlvbmFsKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRlc3QgTG9vayBjb25zdHJ1Y3RvciB3aXRob3V0IGtleXdvcmRzIGFuZCB2YWxpZGF0ZSBpdHMgdmFsdWVzLgogICAgICAgICIiIgoKICAgICAgICBleHBfdHIgPSBPQ0lPLkV4cG9uZW50VHJhbnNmb3JtKCkKICAgICAgICBpbnZfZXhwX3RyID0gT0NJTy5FeHBvbmVudFRyYW5zZm9ybSgpCiAgICAgICAgbG9vayA9IE9DSU8uTG9vaygnY29vbGxvb2snLAogICAgICAgICAgICAgICAgICAgICAgICAgJ3NvbWVzcGFjZScsCiAgICAgICAgICAgICAgICAgICAgICAgICBleHBfdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnZfZXhwX3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgJ3RoaXMgaXMgYSB0ZXN0JykKCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb29rLmdldE5hbWUoKSwgJ2Nvb2xsb29rJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvb2suZ2V0UHJvY2Vzc1NwYWNlKCksICdzb21lc3BhY2UnKQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShsb29rLmdldFRyYW5zZm9ybSgpLCB0eXBlKGV4cF90cikpCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGxvb2suZ2V0SW52ZXJzZVRyYW5zZm9ybSgpLCB0eXBlKGludl9leHBfdHIpKQo8fGZpbV9ob2xlfD4KICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX3dyb25nX3BhcmFtZXRlcl90eXBlKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRlc3QgTG9vayBjb25zdHJ1Y3RvciB3aXRoIGEgd3JvbmcgcGFyYW1ldGVyIHR5cGUuCiAgICAgICAgIiIiCgogICAgICAgIGZvciBpbnZhbGlkIGluIChOb25lLCAxKToKICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgICAgbG9vayA9IE9DSU8uTG9vayhpbnZhbGlkKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9vay5nZXREZXNjcmlwdGlvbigpLCAndGhpcyBpcyBhIHRlc3QnKQoKPHxmaW1fZW5kfD4="]
["848e61c49371d39e8b4c5ec5fd2b46ea14f41647-1","848e61c49371d39e8b4c5ec5fd2b46ea14f41647","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzeXMKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBjb25jdXJyZW50LmZ1dHVyZXMKaW1wb3J0IGpzb24KaW1wb3J0IHJlcXVlc3RzCmltcG9ydCBweW9kYmMKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgdGltZQpmcm9tIHVybGxpYiBpbXBvcnQgcGFyc2UgYXMgdXJscGFyc2UKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKCnBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1zeW5hcHNlX3dvcmtzcGFjZSIsIHJlcXVpcmVkPVRydWUsIGhlbHA9Ik5hbWUgb2YgU3luYXBzZSB3b3Jrc3BhY2UuIikKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1maGlyX3NlcnZlcl91cmwiLCByZXF1aXJlZD1UcnVlLCBoZWxwPSJGaGlyIHNlcnZlciB1cmwuIikKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1zY2hlbWFfZGlyZWN0b3J5IiwgcmVxdWlyZWQ9VHJ1ZSwgaGVscD0iU2NoZW1hIGRpcmVjdG9yeSBwYXRoLiIpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tZGF0YWJhc2UiLCBkZWZhdWx0PSdmaGlyZGInLCBoZWxwPSJOYW1lIG9mIFNRTCBkYXRhYmFzZS4iKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLXNxbF91c2VybmFtZSIsIGhlbHA9IlNRTCB1c2VybmFtZS4iKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLXNxbF9wYXNzd29yZCIsIGhlbHA9IlNRTCBwYXNzd29yZC4iKQphcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQoKc3FsX3NlcnZlcl9lbmRwb2ludCA9IGFyZ3Muc3luYXBzZV93b3Jrc3BhY2UgKyAiLW9uZGVtYW5kLnNxbC5henVyZXN5bmFwc2UubmV0IgpkYXRhYmFzZSA9IGFyZ3MuZGF0YWJhc2UKc2NoZW1hX2RpcmVjdG9yeSA9IGFyZ3Muc2NoZW1hX2RpcmVjdG9yeQpmaGlyX3NlcnZlcl9iYXNlX3VybCA9IGFyZ3MuZmhpcl9zZXJ2ZXJfdXJsCnNxbF91c2VybmFtZSA9IGFyZ3Muc3FsX3VzZXJuYW1lCnNxbF9wYXNzd29yZCA9IGFyZ3Muc3FsX3Bhc3N3b3JkCgojIEdldCBTUUwgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzIGlmIG5vdCBnaXZlbiB0aGVtIGluIHNjcmlwdCBwYXJhbWF0ZXJzCmlmIChzcWxfdXNlcm5hbWUgaXMgTm9uZSkgb3IgKHNxbF9wYXNzd29yZCBpcyBOb25lKToKICAgIHNxbF91c2VybmFtZSA9IG9zLmdldGVudignU1FMX1VTRVJOQU1FJykKICAgIHNxbF9wYXNzd29yZCA9IG9zLmdldGVudignU1FMX1BBU1NXT1JEJykKCnB5b2RiYy5wb29saW5nID0gRmFsc2UKCgpjbGFzcyBGaGlyQXBpRGF0YUNsaWVudDoKICAgIGhlYWRlcnMgPSB7J0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9maGlyK2pzb24nLCAiUHJlZmVyIjogInJlc3BvbmQtYXN5bmMifQogICAgc3RhcnRfZGF0ZXRpbWUgPSAiMTk3MC0wMS0wMVQwMDowMDowMC0wMDowMCIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgZmhpcl9zZXJ2ZXJfYmFzZV91cmwpOgogICAgICAgIHNlbGYuZmhpcl9zZXJ2ZXJfYmFzZV91cmwgPSBmaGlyX3NlcnZlcl9iYXNlX3VybAoKICAgIGRlZiBnZXRfYWxsX2VudHJpZXMoc2VsZiwgcmVzb3VyY2VfdHlwZSk6CiAgICAgICAgcXVlcnlfYmFzZV91cmwgPSBzZWxmLmZoaXJfc2VydmVyX2Jhc2VfdXJsICsgZiIve3Jlc291cmNlX3R5cGV9P19sYXN0VXBkYXRlZD1nZXtGaGlyQXBpRGF0YUNsaWVudC5zdGFydF9kYXRldGltZX0mX2xhc3RVcGRhdGVkPWx0e2RhdGV0aW1lLnRvZGF5KCkuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVNOiVTLTAwOjAwJyl9Jl9zb3J0PV9sYXN0VXBkYXRlZCZfY291bnQ9MTAwMCIKICAgICAgICAKICAgICAgICByZXN1bHQgPSBbXQogICAgICAgIHF1ZXJ5X3VybCA9IHF1ZXJ5X2Jhc2VfdXJsCiAgICAgICAgd2hpbGUgcXVlcnlfdXJsOgogICAgICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmdldChxdWVyeV91cmwsIGhlYWRlcnM9RmhpckFwaURhdGFDbGllbnQuaGVhZGVycykKICAgICAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgIT0gcmVxdWVzdHMuY29kZXMub2s6CiAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oZiJHZXQgZGF0YSBmcm9tIHtxdWVyeV91cmx9IGZhaWxlZDogIiArIHJlc3BvbnNlLnRleHQpCgogICAgICAgICAgICByZXNwb25zZV9jb250ZW50ID0gcmVzcG9uc2UuY29udGVudAogICAgICAgICAgICByZXNwb25zZV9vYmplY3QgPSBqc29uLmxvYWRzKHJlc3BvbnNlX2NvbnRlbnQuZGVjb2RlKCd1dGYtOCcpKQogICAgICAgICAgICBpZiAiZW50cnkiIGluIHJlc3BvbnNlX29iamVjdDoKICAgICAgICAgICAgICAgIHJlc3VsdC5leHRlbmQocmVzcG9uc2Vfb2JqZWN0WyJlbnRyeSJdKQogICAgICAgICAgICAgICAgY29udGludWF0aW9uX3Rva2VuID0gc2VsZi5wYXJzZV9jb250aW51YXRpb25fdG9rZW4ocmVzcG9uc2Vfb2JqZWN0KQogICAgICAgICAgICAgICAgaWYgY29udGludWF0aW9uX3Rva2VuOgogICAgICAgICAgICAgICAgICAgIHF1ZXJ5X3VybCA9IHF1ZXJ5X2Jhc2VfdXJsICsgZiImY3Q9e2NvbnRpbnVhdGlvbl90b2tlbn0iCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHF1ZXJ5X3VybCA9IE5vbmUKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHF1ZXJ5X3VybCA9IE5vbmUKICAgICAgICByZXR1cm4gcmVzdWx0CgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHBhcnNlX2NvbnRpbnVhdGlvbl90b2tlbihyZXNwb25zZV9jb250ZW50KToKICAgICAgICBmb3IgbGlua19pdGVtIGluIHJlc3BvbnNlX2NvbnRlbnRbImxpbmsiXToKICAgICAgICAgICAgaWYgbGlua19pdGVtWyJyZWxhdGlvbiJdID09ICJuZXh0IjoKICAgICAgICAgICAgICAgIHBhcnNlZF91cmwgPSB1cmxwYXJzZS51cmxwYXJzZShsaW5rX2l0ZW1bInVybCJdKQogICAgICAgICAgICAgICAgcmV0dXJuIHVybHBhcnNlLnBhcnNlX3FzKHBhcnNlZF91cmwucXVlcnkpWyJjdCJdWzBdCiAgICAgICAgcmV0dXJuIE5vbmUKCgpjbGFzcyBTY2hlbWFNYW5hZ2VyOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHNjaGVtYV9kaXJlY3RvcnkpOgogICAgICAgIHNlbGYuc2NoZW1hcyA9IFNjaGVtYU1hbmFnZXIubG9hZF9zY2hlbWFzKHNjaGVtYV9kaXJlY3RvcnkpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGxvYWRfc2NoZW1hcyhzY2hlbWFfZGlyZWN0b3J5KSAtPiBkaWN0OgogICAgICAgIHNjaGVtYXMgPSB7fQogICAgICAgIGZvciBzY2hlbWFfZmlsZSBpbiBvcy5saXN0ZGlyKHNjaGVtYV9kaXJlY3RvcnkpOgogICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNjaGVtYV9kaXJlY3RvcnksIHNjaGVtYV9maWxlKSkgYXMgZjoKICAgICAgICAgICAgICAgIHNjaGVtYSA9IGpzb24ubG9hZChmKQogICAgICAgICAgICAgICAgc2NoZW1hc1tzY2hlbWFbIlR5cGUiXV0gPSBzY2hlbWEKICAgICAgICByZXR1cm4gc2NoZW1hcwoKICAgIGRlZiBnZW5lcmF0ZV9leHRlcm5hbF90YWJsZV9jb2x1bW5fZGljdHMoc2VsZik6CiAgICAgICAgY29sdW1uX2RpY3RzID0ge30KICAgICAgICBmb3IgcmVzb3VyY2VfdHlwZSwgc2NoZW1hIGluIHNlbGYuc2NoZW1hcy5pdGVtcygpOgogICAgICAgICAgICBjb2x1bW5fZGljdCA9IHt9CiAgICAgICAgICAgIFNjaGVtYU1hbmFnZXIucGFyc2Vfc2NoZW1hKHNjaGVtYSwgW10sIFtdLCBjb2x1bW5fZGljdCkKICAgICAgICAgICAgY29sdW1uX2RpY3RzW3Jlc291cmNlX3R5cGVdID0gY29sdW1uX2RpY3QKICAgICAgICByZXR1cm4gY29sdW1uX2RpY3RzCgogICAgZGVmIGdldF9zY2hlbWEoc2VsZiwgcmVzb3VyY2VfdHlwZSk6CiAgICAgICAgcmV0dXJuIHNlbGYuc2NoZW1hc1tyZXNvdXJjZV90eXBlXQoKICAgIGRlZiBnZXRfYWxsX3Jlc291cmNlX3R5cGVzKHNlbGYpOgogICAgICAgIHJldHVybiBsaXN0KHNlbGYuc2NoZW1hcy5rZXlzKCkpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHBhcnNlX3NjaGVtYShub2RlX3NjaGVtYSwganNvbl9kYXRhX3BhdGgsIHRhYmxlX2NvbHVtbl9wYXRoLCBmaWVsZF9kaWN0X3Jlc3VsdCk6CiAgICAgICAgaWYgbm9kZV9zY2hlbWFbIklzUmVwZWF0ZWQiXToKICAgICAgICAgICAgZmllbGRfZGljdF9yZXN1bHRbIi4iLmpvaW4oanNvbl9kYXRhX3BhdGgpXSA9ICIuIi5qb2luKHRhYmxlX2NvbHVtbl9wYXRoKQogICAgICAgIGVsaWYgbm9kZV9zY2hlbWFbIklzTGVhZiJdOgogICAgICAgICAgICBmaWVsZF9kaWN0X3Jlc3VsdFsiLiIuam9pbihqc29uX2RhdGFfcGF0aCldID0gIi4iLmpvaW4odGFibGVfY29sdW1uX3BhdGgpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZm9yIHN1Yl9ub2RlX25hbWUsIHN1Yl9ub2RlX3NjaGVtYSBpbiBub2RlX3NjaGVtYVsiU3ViTm9kZXMiXS5pdGVtcygpOgogICAgICAgICAgICAgICAgdGFibGVfY29sdW1uX3BhdGguYXBwZW5kKHN1Yl9ub2RlX3NjaGVtYVsiTmFtZSJdKQogICAgICAgICAgICAgICAganNvbl9kYXRhX3BhdGguYXBwZW5kKHN1Yl9ub2RlX3NjaGVtYVsiTmFtZSJdKQoKICAgICAgICAgICAgICAgIFNjaGVtYU1hbmFnZXIucGFyc2Vfc2NoZW1hKHN1Yl9ub2RlX3NjaGVtYSwganNvbl9kYXRhX3BhdGgsIHRhYmxlX2NvbHVtbl9wYXRoLCBmaWVsZF9kaWN0X3Jlc3VsdCkKCiAgICAgICAgICAgICAgICB0YWJsZV9jb2x1bW5fcGF0aC5wb3AoKQogICAgICAgICAgICAgICAganNvbl9kYXRhX3BhdGgucG9wKCkKICAgICAgICAgICAgcmV0dXJuCgoKY2xhc3MgU3FsU2VydmVyQ2xpZW50OgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHNxbF9zZXJ2ZXJfZW5kcG9pbnQsIGRhdGFiYXNlLCBzcWxfdXNlcm5hbWUsIHNxbF9wYXNzd29yZCk6CiAgICAgICAgc2VsZi5jb25uZWN0aW9uX3N0cmluZyA9ICdEUklWRVI9e09EQkMgRHJpdmVyIDE3IGZvciBTUUwgU2VydmVyfTtTRVJWRVI9JyBcCiAgICAgICAgICAgICAgICAgICAgKyBzcWxfc2VydmVyX2VuZHBvaW50ICsgJztEQVRBQkFTRT0nICsgZGF0YWJhc2UgKyAnO1VJRD0nICsgc3FsX3VzZXJuYW1lICsgJztQV0Q9JyArIHNxbF9wYXNzd29yZAoKICAgIGRlZiBnZXRfZGF0YShzZWxmLCByZXNvdXJjZV90eXBlKToKICAgICAgICBjb25uZWN0aW9uID0gcHlvZGJjLmNvbm5lY3Qoc2VsZi5jb25uZWN0aW9uX3N0cmluZykKICAgICAgICBzcWwgPSBmIlNFTEVDVCAqIEZST00gW2ZoaXJdLlt7cmVzb3VyY2VfdHlwZX1dIgogICAgICAgIHJlc3VsdF9kYXRhZnJhbWUgPSBwZC5yZWFkX3NxbChzcWw9c3FsLCBjb249Y29ubmVjdGlvbikKICAgICAgICBjb25uZWN0aW9uLmNsb3NlKCkKICAgICAgICByZXR1cm4gcmVzdWx0X2RhdGFmcmFtZQoKCmNsYXNzIERhdGFDbGllbnQ6CiAgICByZXNvdXJjZV90eXBlX2tleSA9ICJyZXNvdXJjZV90eXBlIgogICAgZXhwZWN0ZWRfZGF0YV9rZXkgPSAiZXhwZWN0ZWQiCiAgICBxdWVyaWVkX2RhdGFfa2V5ID0gInF1ZXJpZWQiCiAgICBjb2x1bW5fZGljdF9rZXkgPSAiY29sdW1uX2RpY3QiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHNxbF9jbGllbnQsIGZoaXJfYXBpX2NsaWVudCwgY29sdW1uX2RpY3RzKToKICAgICAgICBzZWxmLnNxbF9jbGllbnQgPSBzcWxfY2xpZW50CiAgICAgICAgc2VsZi5maGlyX2FwaV9jbGllbnQgPSBmaGlyX2FwaV9jbGllbnQKICAgICAgICBzZWxmLmNvbHVtbl9kaWN0cyA9IGNvbHVtbl9kaWN0cwoKICAgIGRlZiBmZXRjaChzZWxmLCByZXNvdXJjZV90eXBlKToKICAgICAgICByZXN1bHQgPSB7CiAgICAgICAgICAgIERhdGFDbGllbnQucmVzb3VyY2VfdHlwZV9rZXk6IHJlc291cmNlX3R5cGUsCiAgICAgICAgICAgIERhdGFDbGllbnQucXVlcmllZF9kYXRhX2tleTogc2VsZi5zcWxfY2xpZW50LmdldF9kYXRhKHJlc291cmNlX3R5cGUpLAogICAgICAgICAgICBEYXRhQ2xpZW50LmV4cGVjdGVkX2RhdGFfa2V5OiBzZWxmLmZoaXJfYXBpX2NsaWVudC5nZXRfYWxsX2VudHJpZXMocmVzb3VyY2VfdHlwZSksCiAgICAgICAgICAgIERhdGFDbGllbnQuY29sdW1uX2RpY3Rfa2V5OiBzZWxmLmNvbHVtbl9kaWN0c1tyZXNvdXJjZV90eXBlXQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0CgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHN5cy5zdGRvdXQuZmx1c2goKQoKICAgIHByaW50KCctPiBFeGVjdXRpbmcgc2NyaXB0IGZpbGU6ICcsIHN0cihzeXMuYXJndlswXSkpCiAgICBwcmludCgnLT4gU3luYXBzZSBTUUwgc2VydmVyIGVuZHBvaW50OiAnLCBzcWxfc2VydmVyX2VuZHBvaW50KQogICAgcHJpbnQoJy0+IERhdGFiYXNlOiAnLCBkYXRhYmFzZSkKICAgIHByaW50KCctPiBGaGlyIHNlcnZlciB1cmw6ICcsIGZoaXJfc2VydmVyX2Jhc2VfdXJsKQoKICAgIHNjaGVtYV9tYW5hZ2VyID0gU2NoZW1hTWFuYWdlcihzY2hlbWFfZGlyZWN0b3J5KQogICAgcmVzb3VyY2VfdHlwZXMgPSBzY2hlbWFfbWFuYWdlci5nZXRfYWxsX3Jlc291cmNlX3R5cGVzKCkKCiAgICBmaGlyX2FwaV9jbGllbnQgPSBGaGlyQXBpRGF0YUNsaWVudChmaGlyX3NlcnZlcl9iYXNlX3VybCkKICAgIHNxbF9jbGllbnQgPSBTcWxTZXJ2ZXJDbGllbnQoc3FsX3NlcnZlcl9lbmRwb2ludCwgZGF0YWJhc2UsIHNxbF91c2VybmFtZSwgc3FsX3Bhc3N3b3JkKQoKICAgIGRhdGFDbGllbnQgPSBEYXRhQ2xpZW50KHNxbF9jbGllbnQsIGZoaXJfYXBpX2NsaWVudCwgc2NoZW1hX21hbmFnZXIuZ2VuZXJhdGVfZXh0ZXJuYWxfdGFibGVfY29sdW1uX2RpY3RzKCkpCgogICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCiAgICB3aXRoIGNvbmN1cnJlbnQuZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3IobWF4X3dvcmtlcnM9MTApIGFzIGV4ZWN1dG9yOgogICAgICAgIGZ1dHVyZXMgPSBbZXhlY3V0b3Iuc3VibWl0KGRhdGFDbGllbnQuZmV0Y2gsIHJlc291cmNlX3R5cGUpIGZvciByZXNvdXJjZV90eXBlIGluIHJlc291cmNlX3R5cGVzXQogICAgICAgIGZvciBmdXR1cmUgaW4gY29uY3VycmVudC5mdXR1cmVzLmFzX2NvbXBsZXRlZChmdXR1cmVzKToKICAgICAgICAgICAgcmVzdWx0ID0gZnV0dXJlLnJlc3VsdCgpCiAgICAgICAgICAgIHJlc291cmNlX3R5cGVfbmFtZSA9IHJlc3VsdFtEYXRhQ2xpZW50LnJlc291cmNlX3R5cGVfa2V5XQogICAgICAgICAgICBleHBlY3RlZF9lbnRyaWVzID0gcmVzdWx0W0RhdGFDbGllbnQuZXhwZWN0ZWRfZGF0YV9rZXldCiAgICAgICAgICAgIHF1ZXJpZWRfZGYgPSByZXN1bHRbRGF0YUNsaWVudC5xdWVyaWVkX2RhdGFfa2V5XQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGNvbHVtbl9kaWN0ID0gcmVzdWx0W0RhdGFDbGllbnQuY29sdW1uX2RpY3Rfa2V5XQogICAgICAgICAgICBwcmludChmIkdldCB7cXVlcmllZF9kZi5zaGFwZVswXX0gcmVzb3VyY2VzIGZyb20gXCJ7cmVzb3VyY2VfdHlwZV9uYW1lfVwiIG9uIFN5bmFwc2UsIGNvbHVtbnMgbnVtYmVyIGlzIHtxdWVyaWVkX2RmLnNoYXBlWzFdfSIpCgogICAgICAgICAgICBpZiBsZW4oZXhwZWN0ZWRfZW50cmllcykgIT0gcXVlcmllZF9kZi5zaGFwZVswXToKPHxmaW1fZW5kfD4="]
["ec353b9c756813087cb8ab143a56fade4765a759-1","ec353b9c756813087cb8ab143a56fade4765a759",{"$cut":{"chars":25640,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQojCiMgIGRyaXZlci5weQojICBIYW1tZXJEcml2ZXIgYW5kIHJlbGF0ZWQgY29kZS4KIwojICBDb3B5cmlnaHQgMjAxOCBFZHdhcmQgV2FuZyA8ZWR3YXJkLmMud2FuZ0Bjb21wZGlnaXRlYy5jb20+Cgpmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCmZyb20gdHlwaW5nIGltcG9ydCBOYW1lZFR1cGxlLCBMaXN0LCBPcHRpb25hbCwgVHVwbGUsIERpY3QsIFNldAoKaW1wb3J0IGRhdGV0aW1lCmltcG9ydCBvcwoKZnJvbSBoYW1tZXJfdXRpbHMgaW1wb3J0ICoKCmltcG9ydCBoYW1tZXJfY29uZmlnCmltcG9ydCBoYW1tZXJfdGVjaApmcm9tIC5ob29rcyBpbXBvcnQgSGFtbWVyVG9vbEhvb2tBY3Rpb24KZnJvbSAuaGFtbWVyX3Zsc2lfaW1wbCBpbXBvcnQgSGFtbWVyVkxTSVNldHRpbmdzLCBIYW1tZXJQbGFjZUFuZFJvdXRlVG9vbCwgSGFtbWVyU3ludGhlc2lzVG9vbCwgXAogICAgSGllcmFyY2hpY2FsTW9kZSwgbG9hZF90b29sLCBQbGFjZW1lbnRDb25zdHJhaW50CmZyb20gaGFtbWVyX2xvZ2dpbmcgaW1wb3J0IEhhbW1lclZMU0lGaWxlTG9nZ2VyLCBIYW1tZXJWTFNJTG9nZ2luZywgSGFtbWVyVkxTSUxvZ2dpbmdDb250ZXh0CgpfX2FsbF9fID0gWydIYW1tZXJEcml2ZXJPcHRpb25zJywgJ0hhbW1lckRyaXZlciddCgojIE9wdGlvbnMgZm9yIGludm9raW5nIHRoZSBkcml2ZXIuCkhhbW1lckRyaXZlck9wdGlvbnMgPSBOYW1lZFR1cGxlKCdIYW1tZXJEcml2ZXJPcHRpb25zJywgWwogICAgIyBMaXN0IG9mIGVudmlyb25tZW50IGNvbmZpZyBmaWxlcyBpbiAuanNvbgogICAgKCdlbnZpcm9ubWVudF9jb25maWdzJywgTGlzdFtzdHJdKSwKICAgICMgTGlzdCBvZiBwcm9qZWN0IGNvbmZpZyBmaWxlcyBpbiAuanNvbgogICAgKCdwcm9qZWN0X2NvbmZpZ3MnLCBMaXN0W3N0cl0pLAogICAgIyBMb2cgZmlsZSBsb2NhdGlvbi4KICAgICgnbG9nX2ZpbGUnLCBzdHIpLAogICAgIyBGb2xkZXIgZm9yIHN0b3JpbmcgcnVudGltZSBmaWxlcyAvIENBRCBqdW5rLgogICAgKCdvYmpfZGlyJywgc3RyKQpdKQoKCmNsYXNzIEhhbW1lckRyaXZlcjoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBnZXRfZGVmYXVsdF9kcml2ZXJfb3B0aW9ucygpIC0+IEhhbW1lckRyaXZlck9wdGlvbnM6CiAgICAgICAgIiIiR2V0IGRlZmF1bHQgZHJpdmVyIG9wdGlvbnMuIiIiCiAgICAgICAgcmV0dXJuIEhhbW1lckRyaXZlck9wdGlvbnMoCiAgICAgICAgICAgIGVudmlyb25tZW50X2NvbmZpZ3M9W10sCiAgICAgICAgICAgIHByb2plY3RfY29uZmlncz1bXSwKICAgICAgICAgICAgbG9nX2ZpbGU9ZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoImhhbW1lci12bHNpLSVZJW0lZC0lSCVNJVMubG9nIiksCiAgICAgICAgICAgIG9ial9kaXI9SGFtbWVyVkxTSVNldHRpbmdzLmhhbW1lcl92bHNpX3BhdGgKICAgICAgICApCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnM6IEhhbW1lckRyaXZlck9wdGlvbnMsIGV4dHJhX3Byb2plY3RfY29uZmlnOiBkaWN0ID0ge30pIC0+IE5vbmU6CiAgICAgICAgIiIiCiAgICAgICAgQ3JlYXRlIGEgaGFtbWVyLXZsc2kgZHJpdmVyLCB3aGljaCBpcyBhIGhpZ2hlciBsZXZlbCBjb252ZW5pZW5jZSBmdW5jdGlvbgogICAgICAgIGZvciBxdWlja2x5IHVzaW5nIGhhbW1lci12bHNpLiBJdCBpbXBvcnRzIGFuZCB1c2VzIHRoZSBoYW1tZXItdmxzaSBibG9ja3MuCgogICAgICAgIFNldCB1cCBsb2dnaW5nLCBkYXRhYmFzZXMsIGNvbnRleHQsIGV0Yy4KCiAgICAgICAgOnBhcmFtIG9wdGlvbnM6IERyaXZlciBvcHRpb25zLgogICAgICAgIDpwYXJhbSBleHRyYV9wcm9qZWN0X2NvbmZpZzogQW4gZXh0cmEgZmxhdHRlbmVkIGNvbmZpZyBmb3IgdGhlIHByb2plY3QuIE9wdGlvbmFsLgogICAgICAgICIiIgoKICAgICAgICAjIENyZWF0ZSBnbG9iYWwgbG9nZ2luZyBjb250ZXh0LgogICAgICAgIGZpbGVfbG9nZ2VyID0gSGFtbWVyVkxTSUZpbGVMb2dnZXIob3B0aW9ucy5sb2dfZmlsZSkKICAgICAgICBIYW1tZXJWTFNJTG9nZ2luZy5hZGRfY2FsbGJhY2soZmlsZV9sb2dnZXIuY2FsbGJhY2spCiAgICAgICAgc2VsZi5sb2cgPSBIYW1tZXJWTFNJTG9nZ2luZy5jb250ZXh0KCkgICMgdHlwZTogSGFtbWVyVkxTSUxvZ2dpbmdDb250ZXh0CgogICAgICAgICMgQ3JlYXRlIGEgbmV3IGhhbW1lciBkYXRhYmFzZS4KICAgICAgICBzZWxmLmRhdGFiYXNlID0gaGFtbWVyX2NvbmZpZy5IYW1tZXJEYXRhYmFzZSgpICAjIHR5cGU6IGhhbW1lcl9jb25maWcuSGFtbWVyRGF0YWJhc2UKCiAgICAgICAgc2VsZi5sb2cuaW5mbygiTG9hZGluZyBoYW1tZXItdmxzaSBsaWJyYXJpZXMgYW5kIHJlYWRpbmcgc2V0dGluZ3MiKQoKICAgICAgICAjIFN0b3JlIHRoZSBydW4gZGlyLgogICAgICAgIHNlbGYub2JqX2RpciA9IG9wdGlvbnMub2JqX2RpciAgIyB0eXBlOiBzdHIKCiAgICAgICAgIyBMb2FkIGluIGJ1aWx0aW5zLgogICAgICAgIHNlbGYuZGF0YWJhc2UudXBkYXRlX2J1aWx0aW5zKFsKICAgICAgICAgICAgaGFtbWVyX2NvbmZpZy5sb2FkX2NvbmZpZ19mcm9tX2ZpbGUob3MucGF0aC5qb2luKEhhbW1lclZMU0lTZXR0aW5ncy5oYW1tZXJfdmxzaV9wYXRoLCAiYnVpbHRpbnMueW1sIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmljdD1UcnVlKSwKICAgICAgICAgICAgSGFtbWVyVkxTSVNldHRpbmdzLmdldF9jb25maWcoKQogICAgICAgIF0pCgogICAgICAgICMgUmVhZCBpbiBjb3JlIGRlZmF1bHRzLgogICAgICAgIHNlbGYuZGF0YWJhc2UudXBkYXRlX2NvcmUoaGFtbWVyX2NvbmZpZy5sb2FkX2NvbmZpZ19mcm9tX2RlZmF1bHRzKEhhbW1lclZMU0lTZXR0aW5ncy5oYW1tZXJfdmxzaV9wYXRoKSkKCiAgICAgICAgIyBSZWFkIGluIHRoZSBlbnZpcm9ubWVudCBjb25maWcgZm9yIHBhdGhzIHRvIENBRCB0b29scywgZXRjLgogICAgICAgIGZvciBjb25maWcgaW4gb3B0aW9ucy5lbnZpcm9ubWVudF9jb25maWdzOgogICAgICAgICAgICBp"}}]
["ec353b9c756813087cb8ab143a56fade4765a759-2","ec353b9c756813087cb8ab143a56fade4765a759","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQojCiMgIGRyaXZlci5weQojICBIYW1tZXJEcml2ZXIgYW5kIHJlbGF0ZWQgY29kZS4KIwojICBDb3B5cmlnaHQgMjAxOCBFZHdhcmQgV2FuZyA8ZWR3YXJkLmMud2FuZ0Bjb21wZGlnaXRlYy5jb20+Cgpmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCmZyb20gdHlwaW5nIGltcG9ydCBOYW1lZFR1cGxlLCBMaXN0LCBPcHRpb25hbCwgVHVwbGUsIERpY3QsIFNldAoKaW1wb3J0IGRhdGV0aW1lCmltcG9ydCBvcwoKZnJvbSBoYW1tZXJfdXRpbHMgaW1wb3J0ICoKCmltcG9ydCBoYW1tZXJfY29uZmlnCmltcG9ydCBoYW1tZXJfdGVjaApmcm9tIC5ob29rcyBpbXBvcnQgSGFtbWVyVG9vbEhvb2tBY3Rpb24KZnJvbSAuaGFtbWVyX3Zsc2lfaW1wbCBpbXBvcnQgSGFtbWVyVkxTSVNldHRpbmdzLCBIYW1tZXJQbGFjZUFuZFJvdXRlVG9vbCwgSGFtbWVyU3ludGhlc2lzVG9vbCwgXAogICAgSGllcmFyY2hpY2FsTW9kZSwgbG9hZF90b29sLCBQbGFjZW1lbnRDb25zdHJhaW50CmZyb20gaGFtbWVyX2xvZ2dpbmcgaW1wb3J0IEhhbW1lclZMU0lGaWxlTG9nZ2VyLCBIYW1tZXJWTFNJTG9nZ2luZywgSGFtbWVyVkxTSUxvZ2dpbmdDb250ZXh0CgpfX2FsbF9fID0gWydIYW1tZXJEcml2ZXJPcHRpb25zJywgJ0hhbW1lckRyaXZlciddCgojIE9wdGlvbnMgZm9yIGludm9raW5nIHRoZSBkcml2ZXIuCkhhbW1lckRyaXZlck9wdGlvbnMgPSBOYW1lZFR1cGxlKCdIYW1tZXJEcml2ZXJPcHRpb25zJywgWwogICAgIyBMaXN0IG9mIGVudmlyb25tZW50IGNvbmZpZyBmaWxlcyBpbiAuanNvbgogICAgKCdlbnZpcm9ubWVudF9jb25maWdzJywgTGlzdFtzdHJdKSwKICAgICMgTGlzdCBvZiBwcm9qZWN0IGNvbmZpZyBmaWxlcyBpbiAuanNvbgogICAgKCdwcm9qZWN0X2NvbmZpZ3MnLCBMaXN0W3N0cl0pLAogICAgIyBMb2cgZmlsZSBsb2NhdGlvbi4KICAgICgnbG9nX2ZpbGUnLCBzdHIpLAogICAgIyBGb2xkZXIgZm9yIHN0b3JpbmcgcnVudGltZSBmaWxlcyAvIENBRCBqdW5rLgogICAgKCdvYmpfZGlyJywgc3RyKQpdKQoKCmNsYXNzIEhhbW1lckRyaXZlcjoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBnZXRfZGVmYXVsdF9kcml2ZXJfb3B0aW9ucygpIC0+IEhhbW1lckRyaXZlck9wdGlvbnM6CiAgICAgICAgIiIiR2V0IGRlZmF1bHQgZHJpdmVyIG9wdGlvbnMuIiIiCiAgICAgICAgcmV0dXJuIEhhbW1lckRyaXZlck9wdGlvbnMoCiAgICAgICAgICAgIGVudmlyb25tZW50X2NvbmZpZ3M9W10sCiAgICAgICAgICAgIHByb2plY3RfY29uZmlncz1bXSwKICAgICAgICAgICAgbG9nX2ZpbGU9ZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoImhhbW1lci12bHNpLSVZJW0lZC0lSCVNJVMubG9nIiksCiAgICAgICAgICAgIG9ial9kaXI9SGFtbWVyVkxTSVNldHRpbmdzLmhhbW1lcl92bHNpX3BhdGgKICAgICAgICApCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnM6IEhhbW1lckRyaXZlck9wdGlvbnMsIGV4dHJhX3Byb2plY3RfY29uZmlnOiBkaWN0ID0ge30pIC0+IE5vbmU6CiAgICAgICAgIiIiCiAgICAgICAgQ3JlYXRlIGEgaGFtbWVyLXZsc2kgZHJpdmVyLCB3aGljaCBpcyBhIGhpZ2hlciBsZXZlbCBjb252ZW5pZW5jZSBmdW5jdGlvbgogICAgICAgIGZvciBxdWlja2x5IHVzaW5nIGhhbW1lci12bHNpLiBJdCBpbXBvcnRzIGFuZCB1c2VzIHRoZSBoYW1tZXItdmxzaSBibG9ja3MuCgogICAgICAgIFNldCB1cCBsb2dnaW5nLCBkYXRhYmFzZXMsIGNvbnRleHQsIGV0Yy4KCiAgICAgICAgOnBhcmFtIG9wdGlvbnM6IERyaXZlciBvcHRpb25zLgogICAgICAgIDpwYXJhbSBleHRyYV9wcm9qZWN0X2NvbmZpZzogQW4gZXh0cmEgZmxhdHRlbmVkIGNvbmZpZyBmb3IgdGhlIHByb2plY3QuIE9wdGlvbmFsLgogICAgICAgICIiIgoKICAgICAgICAjIENyZWF0ZSBnbG9iYWwgbG9nZ2luZyBjb250ZXh0LgogICAgICAgIGZpbGVfbG9nZ2VyID0gSGFtbWVyVkxTSUZpbGVMb2dnZXIob3B0aW9ucy5sb2dfZmlsZSkKICAgICAgICBIYW1tZXJWTFNJTG9nZ2luZy5hZGRfY2FsbGJhY2soZmlsZV9sb2dnZXIuY2FsbGJhY2spCiAgICAgICAgc2VsZi5sb2cgPSBIYW1tZXJWTFNJTG9nZ2luZy5jb250ZXh0KCkgICMgdHlwZTogSGFtbWVyVkxTSUxvZ2dpbmdDb250ZXh0CgogICAgICAgICMgQ3JlYXRlIGEgbmV3IGhhbW1lciBkYXRhYmFzZS4KICAgICAgICBzZWxmLmRhdGFiYXNlID0gaGFtbWVyX2NvbmZpZy5IYW1tZXJEYXRhYmFzZSgpICAjIHR5cGU6IGhhbW1lcl9jb25maWcuSGFtbWVyRGF0YWJhc2UKCiAgICAgICAgc2VsZi5sb2cuaW5mbygiTG9hZGluZyBoYW1tZXItdmxzaSBsaWJyYXJpZXMgYW5kIHJlYWRpbmcgc2V0dGluZ3MiKQoKICAgICAgICAjIFN0b3JlIHRoZSBydW4gZGlyLgogICAgICAgIHNlbGYub2JqX2RpciA9IG9wdGlvbnMub2JqX2RpciAgIyB0eXBlOiBzdHIKCiAgICAgICAgIyBMb2FkIGluIGJ1aWx0aW5zLgogICAgICAgIHNlbGYuZGF0YWJhc2UudXBkYXRlX2J1aWx0aW5zKFsKICAgICAgICAgICAgaGFtbWVyX2NvbmZpZy5sb2FkX2NvbmZpZ19mcm9tX2ZpbGUob3MucGF0aC5qb2luKEhhbW1lclZMU0lTZXR0aW5ncy5oYW1tZXJfdmxzaV9wYXRoLCAiYnVpbHRpbnMueW1sIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmljdD1UcnVlKSwKICAgICAgICAgICAgSGFtbWVyVkxTSVNldHRpbmdzLmdldF9jb25maWcoKQogICAgICAgIF0pCgogICAgICAgICMgUmVhZCBpbiBjb3JlIGRlZmF1bHRzLgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5kYXRhYmFzZS51cGRhdGVfY29yZShoYW1tZXJfY29uZmlnLmxvYWRfY29uZmlnX2Zyb21fZGVmYXVsdHMoSGFtbWVyVkxTSVNldHRpbmdzLmhhbW1lcl92bHNpX3BhdGgpKQoKICAgICAgICAjIFJlYWQgaW4gdGhlIGVudmlyb25tZW50IGNvbmZpZyBmb3IgcGF0aHMgdG8gQ0FEIHRvb2xzLCBldGMuCiAgICAgICAgZm9yIGNvbmZpZyBpbiBvcHRpb25zLmVudmlyb25tZW50X2NvbmZpZ3M6Cjx8ZmltX2VuZHw+"]
["ec353b9c756813087cb8ab143a56fade4765a759-3","ec353b9c756813087cb8ab143a56fade4765a759",{"$cut":{"chars":25640,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQojCiMgIGRyaXZlci5weQojICBIYW1tZXJEcml2ZXIgYW5kIHJlbGF0ZWQgY29kZS4KIwojICBDb3B5cmlnaHQgMjAxOCBFZHdhcmQgV2FuZyA8ZWR3YXJkLmMud2FuZ0Bjb21wZGlnaXRlYy5jb20+Cgpmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCmZyb20gdHlwaW5nIGltcG9ydCBOYW1lZFR1cGxlLCBMaXN0LCBPcHRpb25hbCwgVHVwbGUsIERpY3QsIFNldAoKaW1wb3J0IGRhdGV0aW1lCmltcG9ydCBvcwoKZnJvbSBoYW1tZXJfdXRpbHMgaW1wb3J0ICoKCmltcG9ydCBoYW1tZXJfY29uZmlnCmltcG9ydCBoYW1tZXJfdGVjaApmcm9tIC5ob29rcyBpbXBvcnQgSGFtbWVyVG9vbEhvb2tBY3Rpb24KZnJvbSAuaGFtbWVyX3Zsc2lfaW1wbCBpbXBvcnQgSGFtbWVyVkxTSVNldHRpbmdzLCBIYW1tZXJQbGFjZUFuZFJvdXRlVG9vbCwgSGFtbWVyU3ludGhlc2lzVG9vbCwgXAogICAgSGllcmFyY2hpY2FsTW9kZSwgbG9hZF90b29sLCBQbGFjZW1lbnRDb25zdHJhaW50CmZyb20gaGFtbWVyX2xvZ2dpbmcgaW1wb3J0IEhhbW1lclZMU0lGaWxlTG9nZ2VyLCBIYW1tZXJWTFNJTG9nZ2luZywgSGFtbWVyVkxTSUxvZ2dpbmdDb250ZXh0CgpfX2FsbF9fID0gWydIYW1tZXJEcml2ZXJPcHRpb25zJywgJ0hhbW1lckRyaXZlciddCgojIE9wdGlvbnMgZm9yIGludm9raW5nIHRoZSBkcml2ZXIuCkhhbW1lckRyaXZlck9wdGlvbnMgPSBOYW1lZFR1cGxlKCdIYW1tZXJEcml2ZXJPcHRpb25zJywgWwogICAgIyBMaXN0IG9mIGVudmlyb25tZW50IGNvbmZpZyBmaWxlcyBpbiAuanNvbgogICAgKCdlbnZpcm9ubWVudF9jb25maWdzJywgTGlzdFtzdHJdKSwKICAgICMgTGlzdCBvZiBwcm9qZWN0IGNvbmZpZyBmaWxlcyBpbiAuanNvbgogICAgKCdwcm9qZWN0X2NvbmZpZ3MnLCBMaXN0W3N0cl0pLAogICAgIyBMb2cgZmlsZSBsb2NhdGlvbi4KICAgICgnbG9nX2ZpbGUnLCBzdHIpLAogICAgIyBGb2xkZXIgZm9yIHN0b3JpbmcgcnVudGltZSBmaWxlcyAvIENBRCBqdW5rLgogICAgKCdvYmpfZGlyJywgc3RyKQpdKQoKCmNsYXNzIEhhbW1lckRyaXZlcjoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBnZXRfZGVmYXVsdF9kcml2ZXJfb3B0aW9ucygpIC0+IEhhbW1lckRyaXZlck9wdGlvbnM6CiAgICAgICAgIiIiR2V0IGRlZmF1bHQgZHJpdmVyIG9wdGlvbnMuIiIiCiAgICAgICAgcmV0dXJuIEhhbW1lckRyaXZlck9wdGlvbnMoCiAgICAgICAgICAgIGVudmlyb25tZW50X2NvbmZpZ3M9W10sCiAgICAgICAgICAgIHByb2plY3RfY29uZmlncz1bXSwKICAgICAgICAgICAgbG9nX2ZpbGU9ZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoImhhbW1lci12bHNpLSVZJW0lZC0lSCVNJVMubG9nIiksCiAgICAgICAgICAgIG9ial9kaXI9SGFtbWVyVkxTSVNldHRpbmdzLmhhbW1lcl92bHNpX3BhdGgKICAgICAgICApCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnM6IEhhbW1lckRyaXZlck9wdGlvbnMsIGV4dHJhX3Byb2plY3RfY29uZmlnOiBkaWN0ID0ge30pIC0+IE5vbmU6CiAgICAgICAgIiIiCiAgICAgICAgQ3JlYXRlIGEgaGFtbWVyLXZsc2kgZHJpdmVyLCB3aGljaCBpcyBhIGhpZ2hlciBsZXZlbCBjb252ZW5pZW5jZSBmdW5jdGlvbgogICAgICAgIGZvciBxdWlja2x5IHVzaW5nIGhhbW1lci12bHNpLiBJdCBpbXBvcnRzIGFuZCB1c2VzIHRoZSBoYW1tZXItdmxzaSBibG9ja3MuCgogICAgICAgIFNldCB1cCBsb2dnaW5nLCBkYXRhYmFzZXMsIGNvbnRleHQsIGV0Yy4KCiAgICAgICAgOnBhcmFtIG9wdGlvbnM6IERyaXZlciBvcHRpb25zLgogICAgICAgIDpwYXJhbSBleHRyYV9wcm9qZWN0X2NvbmZpZzogQW4gZXh0cmEgZmxhdHRlbmVkIGNvbmZpZyBmb3IgdGhlIHByb2plY3QuIE9wdGlvbmFsLgogICAgICAgICIiIgoKICAgICAgICAjIENyZWF0ZSBnbG9iYWwgbG9nZ2luZyBjb250ZXh0LgogICAgICAgIGZpbGVfbG9nZ2VyID0gSGFtbWVyVkxTSUZpbGVMb2dnZXIob3B0aW9ucy5sb2dfZmlsZSkKICAgICAgICBIYW1tZXJWTFNJTG9nZ2luZy5hZGRfY2FsbGJhY2soZmlsZV9sb2dnZXIuY2FsbGJhY2spCiAgICAgICAgc2VsZi5sb2cgPSBIYW1tZXJWTFNJTG9nZ2luZy5jb250ZXh0KCkgICMgdHlwZTogSGFtbWVyVkxTSUxvZ2dpbmdDb250ZXh0CgogICAgICAgICMgQ3JlYXRlIGEgbmV3IGhhbW1lciBkYXRhYmFzZS4KICAgICAgICBzZWxmLmRhdGFiYXNlID0gaGFtbWVyX2NvbmZpZy5IYW1tZXJEYXRhYmFzZSgpICAjIHR5cGU6IGhhbW1lcl9jb25maWcuSGFtbWVyRGF0YWJhc2UKCiAgICAgICAgc2VsZi5sb2cuaW5mbygiTG9hZGluZyBoYW1tZXItdmxzaSBsaWJyYXJpZXMgYW5kIHJlYWRpbmcgc2V0dGluZ3MiKQoKICAgICAgICAjIFN0b3JlIHRoZSBydW4gZGlyLgogICAgICAgIHNlbGYub2JqX2RpciA9IG9wdGlvbnMub2JqX2RpciAgIyB0eXBlOiBzdHIKCiAgICAgICAgIyBMb2FkIGluIGJ1aWx0aW5zLgogICAgICAgIHNlbGYuZGF0YWJhc2UudXBkYXRlX2J1aWx0aW5zKFsKICAgICAgICAgICAgaGFtbWVyX2NvbmZpZy5sb2FkX2NvbmZpZ19mcm9tX2ZpbGUob3MucGF0aC5qb2luKEhhbW1lclZMU0lTZXR0aW5ncy5oYW1tZXJfdmxzaV9wYXRoLCAiYnVpbHRpbnMueW1sIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmljdD1UcnVlKSwKICAgICAgICAgICAgSGFtbWVyVkxTSVNldHRpbmdzLmdldF9jb25maWcoKQogICAgICAgIF0pCgogICAgICAgICMgUmVhZCBpbiBjb3JlIGRlZmF1bHRzLgogICAgICAgIHNlbGYuZGF0YWJhc2UudXBkYXRlX2NvcmUoaGFtbWVyX2NvbmZpZy5sb2FkX2NvbmZpZ19mcm9tX2RlZmF1bHRzKEhhbW1lclZMU0lTZXR0aW5ncy5oYW1tZXJfdmxzaV9wYXRoKSkKCiAgICAgICAgIyBSZWFkIGluIHRoZSBlbnZpcm9ubWVudCBjb25maWcgZm9yIHBhdGhzIHRvIENBRCB0b29scywgZXRjLgogICAgICAgIGZvciBjb25maWcgaW4gb3B0aW9ucy5lbnZpcm9ubWVudF9jb25maWdzOgogICAgICAgICAgICBp"}}]
["ec353b9c756813087cb8ab143a56fade4765a759-4","ec353b9c756813087cb8ab143a56fade4765a759",{"$cut":{"chars":25640,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQojCiMgIGRyaXZlci5weQojICBIYW1tZXJEcml2ZXIgYW5kIHJlbGF0ZWQgY29kZS4KIwojICBDb3B5cmlnaHQgMjAxOCBFZHdhcmQgV2FuZyA8ZWR3YXJkLmMud2FuZ0Bjb21wZGlnaXRlYy5jb20+Cgpmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCmZyb20gdHlwaW5nIGltcG9ydCBOYW1lZFR1cGxlLCBMaXN0LCBPcHRpb25hbCwgVHVwbGUsIERpY3QsIFNldAoKaW1wb3J0IGRhdGV0aW1lCmltcG9ydCBvcwoKZnJvbSBoYW1tZXJfdXRpbHMgaW1wb3J0ICoKCmltcG9ydCBoYW1tZXJfY29uZmlnCmltcG9ydCBoYW1tZXJfdGVjaApmcm9tIC5ob29rcyBpbXBvcnQgSGFtbWVyVG9vbEhvb2tBY3Rpb24KZnJvbSAuaGFtbWVyX3Zsc2lfaW1wbCBpbXBvcnQgSGFtbWVyVkxTSVNldHRpbmdzLCBIYW1tZXJQbGFjZUFuZFJvdXRlVG9vbCwgSGFtbWVyU3ludGhlc2lzVG9vbCwgXAogICAgSGllcmFyY2hpY2FsTW9kZSwgbG9hZF90b29sLCBQbGFjZW1lbnRDb25zdHJhaW50CmZyb20gaGFtbWVyX2xvZ2dpbmcgaW1wb3J0IEhhbW1lclZMU0lGaWxlTG9nZ2VyLCBIYW1tZXJWTFNJTG9nZ2luZywgSGFtbWVyVkxTSUxvZ2dpbmdDb250ZXh0CgpfX2FsbF9fID0gWydIYW1tZXJEcml2ZXJPcHRpb25zJywgJ0hhbW1lckRyaXZlciddCgojIE9wdGlvbnMgZm9yIGludm9raW5nIHRoZSBkcml2ZXIuCkhhbW1lckRyaXZlck9wdGlvbnMgPSBOYW1lZFR1cGxlKCdIYW1tZXJEcml2ZXJPcHRpb25zJywgWwogICAgIyBMaXN0IG9mIGVudmlyb25tZW50IGNvbmZpZyBmaWxlcyBpbiAuanNvbgogICAgKCdlbnZpcm9ubWVudF9jb25maWdzJywgTGlzdFtzdHJdKSwKICAgICMgTGlzdCBvZiBwcm9qZWN0IGNvbmZpZyBmaWxlcyBpbiAuanNvbgogICAgKCdwcm9qZWN0X2NvbmZpZ3MnLCBMaXN0W3N0cl0pLAogICAgIyBMb2cgZmlsZSBsb2NhdGlvbi4KICAgICgnbG9nX2ZpbGUnLCBzdHIpLAogICAgIyBGb2xkZXIgZm9yIHN0b3JpbmcgcnVudGltZSBmaWxlcyAvIENBRCBqdW5rLgogICAgKCdvYmpfZGlyJywgc3RyKQpdKQoKCmNsYXNzIEhhbW1lckRyaXZlcjoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBnZXRfZGVmYXVsdF9kcml2ZXJfb3B0aW9ucygpIC0+IEhhbW1lckRyaXZlck9wdGlvbnM6CiAgICAgICAgIiIiR2V0IGRlZmF1bHQgZHJpdmVyIG9wdGlvbnMuIiIiCiAgICAgICAgcmV0dXJuIEhhbW1lckRyaXZlck9wdGlvbnMoCiAgICAgICAgICAgIGVudmlyb25tZW50X2NvbmZpZ3M9W10sCiAgICAgICAgICAgIHByb2plY3RfY29uZmlncz1bXSwKICAgICAgICAgICAgbG9nX2ZpbGU9ZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoImhhbW1lci12bHNpLSVZJW0lZC0lSCVNJVMubG9nIiksCiAgICAgICAgICAgIG9ial9kaXI9SGFtbWVyVkxTSVNldHRpbmdzLmhhbW1lcl92bHNpX3BhdGgKICAgICAgICApCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnM6IEhhbW1lckRyaXZlck9wdGlvbnMsIGV4dHJhX3Byb2plY3RfY29uZmlnOiBkaWN0ID0ge30pIC0+IE5vbmU6CiAgICAgICAgIiIiCiAgICAgICAgQ3JlYXRlIGEgaGFtbWVyLXZsc2kgZHJpdmVyLCB3aGljaCBpcyBhIGhpZ2hlciBsZXZlbCBjb252ZW5pZW5jZSBmdW5jdGlvbgogICAgICAgIGZvciBxdWlja2x5IHVzaW5nIGhhbW1lci12bHNpLiBJdCBpbXBvcnRzIGFuZCB1c2VzIHRoZSBoYW1tZXItdmxzaSBibG9ja3MuCgogICAgICAgIFNldCB1cCBsb2dnaW5nLCBkYXRhYmFzZXMsIGNvbnRleHQsIGV0Yy4KCiAgICAgICAgOnBhcmFtIG9wdGlvbnM6IERyaXZlciBvcHRpb25zLgogICAgICAgIDpwYXJhbSBleHRyYV9wcm9qZWN0X2NvbmZpZzogQW4gZXh0cmEgZmxhdHRlbmVkIGNvbmZpZyBmb3IgdGhlIHByb2plY3QuIE9wdGlvbmFsLgogICAgICAgICIiIgoKICAgICAgICAjIENyZWF0ZSBnbG9iYWwgbG9nZ2luZyBjb250ZXh0LgogICAgICAgIGZpbGVfbG9nZ2VyID0gSGFtbWVyVkxTSUZpbGVMb2dnZXIob3B0aW9ucy5sb2dfZmlsZSkKICAgICAgICBIYW1tZXJWTFNJTG9nZ2luZy5hZGRfY2FsbGJhY2soZmlsZV9sb2dnZXIuY2FsbGJhY2spCiAgICAgICAgc2VsZi5sb2cgPSBIYW1tZXJWTFNJTG9nZ2luZy5jb250ZXh0KCkgICMgdHlwZTogSGFtbWVyVkxTSUxvZ2dpbmdDb250ZXh0CgogICAgICAgICMgQ3JlYXRlIGEgbmV3IGhhbW1lciBkYXRhYmFzZS4KICAgICAgICBzZWxmLmRhdGFiYXNlID0gaGFtbWVyX2NvbmZpZy5IYW1tZXJEYXRhYmFzZSgpICAjIHR5cGU6IGhhbW1lcl9jb25maWcuSGFtbWVyRGF0YWJhc2UKCiAgICAgICAgc2VsZi5sb2cuaW5mbygiTG9hZGluZyBoYW1tZXItdmxzaSBsaWJyYXJpZXMgYW5kIHJlYWRpbmcgc2V0dGluZ3MiKQoKICAgICAgICAjIFN0b3JlIHRoZSBydW4gZGlyLgogICAgICAgIHNlbGYub2JqX2RpciA9IG9wdGlvbnMub2JqX2RpciAgIyB0eXBlOiBzdHIKCiAgICAgICAgIyBMb2FkIGluIGJ1aWx0aW5zLgogICAgICAgIHNlbGYuZGF0YWJhc2UudXBkYXRlX2J1aWx0aW5zKFsKICAgICAgICAgICAgaGFtbWVyX2NvbmZpZy5sb2FkX2NvbmZpZ19mcm9tX2ZpbGUob3MucGF0aC5qb2luKEhhbW1lclZMU0lTZXR0aW5ncy5oYW1tZXJfdmxzaV9wYXRoLCAiYnVpbHRpbnMueW1sIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmljdD1UcnVlKSwKICAgICAgICAgICAgSGFtbWVyVkxTSVNldHRpbmdzLmdldF9jb25maWcoKQogICAgICAgIF0pCgogICAgICAgICMgUmVhZCBpbiBjb3JlIGRlZmF1bHRzLgogICAgICAgIHNlbGYuZGF0YWJhc2UudXBkYXRlX2NvcmUoaGFtbWVyX2NvbmZpZy5sb2FkX2NvbmZpZ19mcm9tX2RlZmF1bHRzKEhhbW1lclZMU0lTZXR0aW5ncy5oYW1tZXJfdmxzaV9wYXRoKSkKCiAgICAgICAgIyBSZWFkIGluIHRoZSBlbnZpcm9ubWVudCBjb25maWcgZm9yIHBhdGhzIHRvIENBRCB0b29scywgZXRjLgogICAgICAgIGZvciBjb25maWcgaW4gb3B0aW9ucy5lbnZpcm9ubWVudF9jb25maWdzOgogICAgICAgICAgICBp"}}]
["ec353b9c756813087cb8ab143a56fade4765a759-5","ec353b9c756813087cb8ab143a56fade4765a759",{"$cut":{"chars":25640,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQojCiMgIGRyaXZlci5weQojICBIYW1tZXJEcml2ZXIgYW5kIHJlbGF0ZWQgY29kZS4KIwojICBDb3B5cmlnaHQgMjAxOCBFZHdhcmQgV2FuZyA8ZWR3YXJkLmMud2FuZ0Bjb21wZGlnaXRlYy5jb20+Cgpmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCmZyb20gdHlwaW5nIGltcG9ydCBOYW1lZFR1cGxlLCBMaXN0LCBPcHRpb25hbCwgVHVwbGUsIERpY3QsIFNldAoKaW1wb3J0IGRhdGV0aW1lCmltcG9ydCBvcwoKZnJvbSBoYW1tZXJfdXRpbHMgaW1wb3J0ICoKCmltcG9ydCBoYW1tZXJfY29uZmlnCmltcG9ydCBoYW1tZXJfdGVjaApmcm9tIC5ob29rcyBpbXBvcnQgSGFtbWVyVG9vbEhvb2tBY3Rpb24KZnJvbSAuaGFtbWVyX3Zsc2lfaW1wbCBpbXBvcnQgSGFtbWVyVkxTSVNldHRpbmdzLCBIYW1tZXJQbGFjZUFuZFJvdXRlVG9vbCwgSGFtbWVyU3ludGhlc2lzVG9vbCwgXAogICAgSGllcmFyY2hpY2FsTW9kZSwgbG9hZF90b29sLCBQbGFjZW1lbnRDb25zdHJhaW50CmZyb20gaGFtbWVyX2xvZ2dpbmcgaW1wb3J0IEhhbW1lclZMU0lGaWxlTG9nZ2VyLCBIYW1tZXJWTFNJTG9nZ2luZywgSGFtbWVyVkxTSUxvZ2dpbmdDb250ZXh0CgpfX2FsbF9fID0gWydIYW1tZXJEcml2ZXJPcHRpb25zJywgJ0hhbW1lckRyaXZlciddCgojIE9wdGlvbnMgZm9yIGludm9raW5nIHRoZSBkcml2ZXIuCkhhbW1lckRyaXZlck9wdGlvbnMgPSBOYW1lZFR1cGxlKCdIYW1tZXJEcml2ZXJPcHRpb25zJywgWwogICAgIyBMaXN0IG9mIGVudmlyb25tZW50IGNvbmZpZyBmaWxlcyBpbiAuanNvbgogICAgKCdlbnZpcm9ubWVudF9jb25maWdzJywgTGlzdFtzdHJdKSwKICAgICMgTGlzdCBvZiBwcm9qZWN0IGNvbmZpZyBmaWxlcyBpbiAuanNvbgogICAgKCdwcm9qZWN0X2NvbmZpZ3MnLCBMaXN0W3N0cl0pLAogICAgIyBMb2cgZmlsZSBsb2NhdGlvbi4KICAgICgnbG9nX2ZpbGUnLCBzdHIpLAogICAgIyBGb2xkZXIgZm9yIHN0b3JpbmcgcnVudGltZSBmaWxlcyAvIENBRCBqdW5rLgogICAgKCdvYmpfZGlyJywgc3RyKQpdKQoKCmNsYXNzIEhhbW1lckRyaXZlcjoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBnZXRfZGVmYXVsdF9kcml2ZXJfb3B0aW9ucygpIC0+IEhhbW1lckRyaXZlck9wdGlvbnM6CiAgICAgICAgIiIiR2V0IGRlZmF1bHQgZHJpdmVyIG9wdGlvbnMuIiIiCiAgICAgICAgcmV0dXJuIEhhbW1lckRyaXZlck9wdGlvbnMoCiAgICAgICAgICAgIGVudmlyb25tZW50X2NvbmZpZ3M9W10sCiAgICAgICAgICAgIHByb2plY3RfY29uZmlncz1bXSwKICAgICAgICAgICAgbG9nX2ZpbGU9ZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoImhhbW1lci12bHNpLSVZJW0lZC0lSCVNJVMubG9nIiksCiAgICAgICAgICAgIG9ial9kaXI9SGFtbWVyVkxTSVNldHRpbmdzLmhhbW1lcl92bHNpX3BhdGgKICAgICAgICApCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnM6IEhhbW1lckRyaXZlck9wdGlvbnMsIGV4dHJhX3Byb2plY3RfY29uZmlnOiBkaWN0ID0ge30pIC0+IE5vbmU6CiAgICAgICAgIiIiCiAgICAgICAgQ3JlYXRlIGEgaGFtbWVyLXZsc2kgZHJpdmVyLCB3aGljaCBpcyBhIGhpZ2hlciBsZXZlbCBjb252ZW5pZW5jZSBmdW5jdGlvbgogICAgICAgIGZvciBxdWlja2x5IHVzaW5nIGhhbW1lci12bHNpLiBJdCBpbXBvcnRzIGFuZCB1c2VzIHRoZSBoYW1tZXItdmxzaSBibG9ja3MuCgogICAgICAgIFNldCB1cCBsb2dnaW5nLCBkYXRhYmFzZXMsIGNvbnRleHQsIGV0Yy4KCiAgICAgICAgOnBhcmFtIG9wdGlvbnM6IERyaXZlciBvcHRpb25zLgogICAgICAgIDpwYXJhbSBleHRyYV9wcm9qZWN0X2NvbmZpZzogQW4gZXh0cmEgZmxhdHRlbmVkIGNvbmZpZyBmb3IgdGhlIHByb2plY3QuIE9wdGlvbmFsLgogICAgICAgICIiIgoKICAgICAgICAjIENyZWF0ZSBnbG9iYWwgbG9nZ2luZyBjb250ZXh0LgogICAgICAgIGZpbGVfbG9nZ2VyID0gSGFtbWVyVkxTSUZpbGVMb2dnZXIob3B0aW9ucy5sb2dfZmlsZSkKICAgICAgICBIYW1tZXJWTFNJTG9nZ2luZy5hZGRfY2FsbGJhY2soZmlsZV9sb2dnZXIuY2FsbGJhY2spCiAgICAgICAgc2VsZi5sb2cgPSBIYW1tZXJWTFNJTG9nZ2luZy5jb250ZXh0KCkgICMgdHlwZTogSGFtbWVyVkxTSUxvZ2dpbmdDb250ZXh0CgogICAgICAgICMgQ3JlYXRlIGEgbmV3IGhhbW1lciBkYXRhYmFzZS4KICAgICAgICBzZWxmLmRhdGFiYXNlID0gaGFtbWVyX2NvbmZpZy5IYW1tZXJEYXRhYmFzZSgpICAjIHR5cGU6IGhhbW1lcl9jb25maWcuSGFtbWVyRGF0YWJhc2UKCiAgICAgICAgc2VsZi5sb2cuaW5mbygiTG9hZGluZyBoYW1tZXItdmxzaSBsaWJyYXJpZXMgYW5kIHJlYWRpbmcgc2V0dGluZ3MiKQoKICAgICAgICAjIFN0b3JlIHRoZSBydW4gZGlyLgogICAgICAgIHNlbGYub2JqX2RpciA9IG9wdGlvbnMub2JqX2RpciAgIyB0eXBlOiBzdHIKCiAgICAgICAgIyBMb2FkIGluIGJ1aWx0aW5zLgogICAgICAgIHNlbGYuZGF0YWJhc2UudXBkYXRlX2J1aWx0aW5zKFsKICAgICAgICAgICAgaGFtbWVyX2NvbmZpZy5sb2FkX2NvbmZpZ19mcm9tX2ZpbGUob3MucGF0aC5qb2luKEhhbW1lclZMU0lTZXR0aW5ncy5oYW1tZXJfdmxzaV9wYXRoLCAiYnVpbHRpbnMueW1sIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmljdD1UcnVlKSwKICAgICAgICAgICAgSGFtbWVyVkxTSVNldHRpbmdzLmdldF9jb25maWcoKQogICAgICAgIF0pCgogICAgICAgICMgUmVhZCBpbiBjb3JlIGRlZmF1bHRzLgogICAgICAgIHNlbGYuZGF0YWJhc2UudXBkYXRlX2NvcmUoaGFtbWVyX2NvbmZpZy5sb2FkX2NvbmZpZ19mcm9tX2RlZmF1bHRzKEhhbW1lclZMU0lTZXR0aW5ncy5oYW1tZXJfdmxzaV9wYXRoKSkKCiAgICAgICAgIyBSZWFkIGluIHRoZSBlbnZpcm9ubWVudCBjb25maWcgZm9yIHBhdGhzIHRvIENBRCB0b29scywgZXRjLgogICAgICAgIGZvciBjb25maWcgaW4gb3B0aW9ucy5lbnZpcm9ubWVudF9jb25maWdzOgogICAgICAgICAgICBp"}}]
["41a0d1f75dc9b92778d7033369fdc8e1efeb813b-1","41a0d1f75dc9b92778d7033369fdc8e1efeb813b","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuY2F0YWxvZyBpbXBvcnQgZGF0YV9jYXRhbG9nCjx8ZmltX2VuZHw+"]
["6b9666ce0b87b29ff1f1521ff742ece7dbf0f561-1","6b9666ce0b87b29ff1f1521ff742ece7dbf0f561","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmltcG9ydCB0aW1lCmltcG9ydCBnZXR0ZXh0CmltcG9ydCB0cmFjZWJhY2sKaW1wb3J0IHN5cwpmcm9tIGlrYWJvdC5jb25maWcgaW1wb3J0ICoKZnJvbSBpa2Fib3QuaGVscGVycy5ib3RDb21tIGltcG9ydCAqCmZyb20gaWthYm90LmhlbHBlcnMuc2lnbmFscyBpbXBvcnQgc2V0SW5mb1NpZ25hbApmcm9tIGlrYWJvdC5oZWxwZXJzLnByb2Nlc3MgaW1wb3J0IHNldF9jaGlsZF9tb2RlCmZyb20gaWthYm90LmhlbHBlcnMuZ3VpIGltcG9ydCBlbnRlcgpmcm9tIGlrYWJvdC5oZWxwZXJzLnBlZGlySW5mbyBpbXBvcnQgZ2V0SWRzT2ZDaXRpZXMKZnJvbSBpa2Fib3QuaGVscGVycy52YXJpb3MgaW1wb3J0IHdhaXQKCnQgPSBnZXR0ZXh0LnRyYW5zbGF0aW9uKCdsb2dpbkRhaWx5JywgbG9jYWxlZGlyLCBsYW5ndWFnZXM9bGFuZ3VhZ2VzLCBmYWxsYmFjaz1UcnVlKQpfID0gdC5nZXR0ZXh0CgoKZGVmIGxvZ2luRGFpbHkoc2Vzc2lvbiwgZXZlbnQsIHN0ZGluX2ZkLCBwcmVkZXRlcm1pbmVkX2lucHV0KToKICAgICIiIgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgc2Vzc2lvbiA6IGlrYWJvdC53ZWIuc2Vzc2lvbi5TZXNzaW9uCiAgICBldmVudCA6IG11bHRpcHJvY2Vzc2luZy5FdmVudAogICAgc3RkaW5fZmQ6IGludAogICAgcHJlZGV0ZXJtaW5lZF9pbnB1dCA6IG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5saXN0CiAgICAiIiIKICAgIHN5cy5zdGRpbiA9IG9zLmZkb3BlbihzdGRpbl9mZCkKICAgIGNvbmZpZy5wcmVkZXRlcm1pbmVkX2lucHV0ID0gcHJlZGV0ZXJtaW5lZF9pbnB1dAogICAgdHJ5Ogo8fGZpbV9ob2xlfD4KICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICBldmVudC5zZXQoKQogICAgICAgIHJldHVybgoKICAgIHNldF9jaGlsZF9tb2RlKHNlc3Npb24pCiAgICBldmVudC5zZXQoKQoKICAgIGluZm8gPSBfKCdcbkkgZW50ZXIgZXZlcnkgZGF5XG4nKQogICAgc2V0SW5mb1NpZ25hbChzZXNzaW9uLCBpbmZvKQogICAgdHJ5OgogICAgICAgIGRvX2l0KHNlc3Npb24pCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgbXNnID0gXygnRXJyb3IgaW46XG57fVxuQ2F1c2U6XG57fScpLmZvcm1hdChpbmZvLCB0cmFjZWJhY2suZm9ybWF0X2V4YygpKQogICAgICAgIHNlbmRUb0JvdChzZXNzaW9uLCBtc2cpCiAgICBmaW5hbGx5OgogICAgICAgIHNlc3Npb24ubG9nb3V0KCkKCgpkZWYgZG9faXQoc2Vzc2lvbik6CiAgICAiIiIKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHNlc3Npb24gOiBpa2Fib3Qud2ViLnNlc3Npb24uU2Vzc2lvbgogICAgIiIiCiAgICB3aGlsZSBUcnVlOgogICAgICAgIChpZHMsIGNpdGllcykgPSBnZXRJZHNPZkNpdGllcyhzZXNzaW9uKQogICAgICAgIGZvciBpZCBpbiBpZHM6CiAgICAgICAgICAgIGh0bWwgPSBzZXNzaW9uLnBvc3QoY2l0eV91cmwgKyBzdHIoaWQpKQogICAgICAgICAgICBpZiAnY2xhc3M9ImZvdW50YWluJyBpbiBodG1sOgogICAgICAgICAgICAgICAgdXJsID0gJ2FjdGlvbj1BdmF0YXJBY3Rpb24mZnVuY3Rpb249Z2l2ZURhaWx5QWN0aXZpdHlCb251cyZkYWlseUFjdGl2aXR5Qm9udXNDaXR5U2VsZWN0PXswfSZzdGFydFBhZ2VTaG93bj0xJmRldGVjdGVkRGV2aWNlPTEmYXV0b0xvZ2luPW9uJmNpdHlJZD17MH0mYWN0aXZlVGFiPW11bHRpVGFiMiZiYWNrZ3JvdW5kVmlldz1jaXR5JmN1cnJlbnRDaXR5SWQ9ezB9JmFjdGlvblJlcXVlc3Q9ezF9JmFqYXg9MScuZm9ybWF0KGlkLCBhY3Rpb25SZXF1ZXN0KQogICAgICAgICAgICAgICAgc2Vzc2lvbi5wb3N0KHVybCkKICAgICAgICAgICAgICAgIGlmICdjbGFzcz0iZm91bnRhaW5fYWN0aXZlJyBpbiBodG1sOgogICAgICAgICAgICAgICAgICAgIHVybCA9ICdhY3Rpb249QW1icm9zaWFGb3VudGFpbkFjdGlvbnMmZnVuY3Rpb249Y29sbGVjdCZiYWNrZ3JvdW5kVmlldz1jaXR5JmN1cnJlbnRDaXR5SWQ9ezB9JnRlbXBsYXRlVmlldz1hbWJyb3NpYUZvdW50YWluJmFjdGlvblJlcXVlc3Q9ezF9JmFqYXg9MScuZm9ybWF0KGlkLCBhY3Rpb25SZXF1ZXN0KQogICAgICAgICAgICAgICAgICAgIHNlc3Npb24ucG9zdCh1cmwpCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgIHdhaXQoMjQqNjAqNjAsIDYwKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGJhbm5lcigpCiAgICAgICAgcHJpbnQoXygnSSB3aWxsIGVudGVyIGV2ZXJ5IGRheS4nKSkKICAgICAgICBlbnRlcigpCjx8ZmltX2VuZHw+"]
["6b9666ce0b87b29ff1f1521ff742ece7dbf0f561-2","6b9666ce0b87b29ff1f1521ff742ece7dbf0f561","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmltcG9ydCB0aW1lCmltcG9ydCBnZXR0ZXh0CmltcG9ydCB0cmFjZWJhY2sKaW1wb3J0IHN5cwpmcm9tIGlrYWJvdC5jb25maWcgaW1wb3J0ICoKZnJvbSBpa2Fib3QuaGVscGVycy5ib3RDb21tIGltcG9ydCAqCmZyb20gaWthYm90LmhlbHBlcnMuc2lnbmFscyBpbXBvcnQgc2V0SW5mb1NpZ25hbApmcm9tIGlrYWJvdC5oZWxwZXJzLnByb2Nlc3MgaW1wb3J0IHNldF9jaGlsZF9tb2RlCmZyb20gaWthYm90LmhlbHBlcnMuZ3VpIGltcG9ydCBlbnRlcgpmcm9tIGlrYWJvdC5oZWxwZXJzLnBlZGlySW5mbyBpbXBvcnQgZ2V0SWRzT2ZDaXRpZXMKZnJvbSBpa2Fib3QuaGVscGVycy52YXJpb3MgaW1wb3J0IHdhaXQKCnQgPSBnZXR0ZXh0LnRyYW5zbGF0aW9uKCdsb2dpbkRhaWx5JywgbG9jYWxlZGlyLCBsYW5ndWFnZXM9bGFuZ3VhZ2VzLCBmYWxsYmFjaz1UcnVlKQpfID0gdC5nZXR0ZXh0CgoKZGVmIGxvZ2luRGFpbHkoc2Vzc2lvbiwgZXZlbnQsIHN0ZGluX2ZkLCBwcmVkZXRlcm1pbmVkX2lucHV0KToKICAgICIiIgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgc2Vzc2lvbiA6IGlrYWJvdC53ZWIuc2Vzc2lvbi5TZXNzaW9uCiAgICBldmVudCA6IG11bHRpcHJvY2Vzc2luZy5FdmVudAogICAgc3RkaW5fZmQ6IGludAogICAgcHJlZGV0ZXJtaW5lZF9pbnB1dCA6IG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5saXN0CiAgICAiIiIKICAgIHN5cy5zdGRpbiA9IG9zLmZkb3BlbihzdGRpbl9mZCkKICAgIGNvbmZpZy5wcmVkZXRlcm1pbmVkX2lucHV0ID0gcHJlZGV0ZXJtaW5lZF9pbnB1dAogICAgdHJ5OgogICAgICAgIGJhbm5lcigpCiAgICAgICAgcHJpbnQoXygnSSB3aWxsIGVudGVyIGV2ZXJ5IGRheS4nKSkKICAgICAgICBlbnRlcigpCiAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgZXZlbnQuc2V0KCkKICAgICAgICByZXR1cm4KCiAgICBzZXRfY2hpbGRfbW9kZShzZXNzaW9uKQogICAgZXZlbnQuc2V0KCkKCiAgICBpbmZvID0gXygnXG5JIGVudGVyIGV2ZXJ5IGRheVxuJykKICAgIHNldEluZm9TaWduYWwoc2Vzc2lvbiwgaW5mbykKICAgIHRyeToKICAgICAgICBkb19pdChzZXNzaW9uKQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIG1zZyA9IF8oJ0Vycm9yIGluOlxue31cbkNhdXNlOlxue30nKS5mb3JtYXQoaW5mbywgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKICAgICAgICBzZW5kVG9Cb3Qoc2Vzc2lvbiwgbXNnKQogICAgZmluYWxseToKICAgICAgICBzZXNzaW9uLmxvZ291dCgpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgpkZWYgZG9faXQoc2Vzc2lvbik6CiAgICAiIiIKPHxmaW1fZW5kfD4="]
["6b9666ce0b87b29ff1f1521ff742ece7dbf0f561-3","6b9666ce0b87b29ff1f1521ff742ece7dbf0f561","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmltcG9ydCB0aW1lCmltcG9ydCBnZXR0ZXh0CmltcG9ydCB0cmFjZWJhY2sKaW1wb3J0IHN5cwpmcm9tIGlrYWJvdC5jb25maWcgaW1wb3J0ICoKZnJvbSBpa2Fib3QuaGVscGVycy5ib3RDb21tIGltcG9ydCAqCmZyb20gaWthYm90LmhlbHBlcnMuc2lnbmFscyBpbXBvcnQgc2V0SW5mb1NpZ25hbApmcm9tIGlrYWJvdC5oZWxwZXJzLnByb2Nlc3MgaW1wb3J0IHNldF9jaGlsZF9tb2RlCmZyb20gaWthYm90LmhlbHBlcnMuZ3VpIGltcG9ydCBlbnRlcgpmcm9tIGlrYWJvdC5oZWxwZXJzLnBlZGlySW5mbyBpbXBvcnQgZ2V0SWRzT2ZDaXRpZXMKZnJvbSBpa2Fib3QuaGVscGVycy52YXJpb3MgaW1wb3J0IHdhaXQKCnQgPSBnZXR0ZXh0LnRyYW5zbGF0aW9uKCdsb2dpbkRhaWx5JywgbG9jYWxlZGlyLCBsYW5ndWFnZXM9bGFuZ3VhZ2VzLCBmYWxsYmFjaz1UcnVlKQpfID0gdC5nZXR0ZXh0CgoKZGVmIGxvZ2luRGFpbHkoc2Vzc2lvbiwgZXZlbnQsIHN0ZGluX2ZkLCBwcmVkZXRlcm1pbmVkX2lucHV0KToKICAgICIiIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBzZXNzaW9uIDogaWthYm90LndlYi5zZXNzaW9uLlNlc3Npb24KICAgIGV2ZW50IDogbXVsdGlwcm9jZXNzaW5nLkV2ZW50Cjx8ZmltX2VuZHw+"]
["6b9666ce0b87b29ff1f1521ff742ece7dbf0f561-4","6b9666ce0b87b29ff1f1521ff742ece7dbf0f561","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmltcG9ydCB0aW1lCmltcG9ydCBnZXR0ZXh0CmltcG9ydCB0cmFjZWJhY2sKaW1wb3J0IHN5cwpmcm9tIGlrYWJvdC5jb25maWcgaW1wb3J0ICoKZnJvbSBpa2Fib3QuaGVscGVycy5ib3RDb21tIGltcG9ydCAqCmZyb20gaWthYm90LmhlbHBlcnMuc2lnbmFscyBpbXBvcnQgc2V0SW5mb1NpZ25hbApmcm9tIGlrYWJvdC5oZWxwZXJzLnByb2Nlc3MgaW1wb3J0IHNldF9jaGlsZF9tb2RlCmZyb20gaWthYm90LmhlbHBlcnMuZ3VpIGltcG9ydCBlbnRlcgpmcm9tIGlrYWJvdC5oZWxwZXJzLnBlZGlySW5mbyBpbXBvcnQgZ2V0SWRzT2ZDaXRpZXMKZnJvbSBpa2Fib3QuaGVscGVycy52YXJpb3MgaW1wb3J0IHdhaXQKCnQgPSBnZXR0ZXh0LnRyYW5zbGF0aW9uKCdsb2dpbkRhaWx5JywgbG9jYWxlZGlyLCBsYW5ndWFnZXM9bGFuZ3VhZ2VzLCBmYWxsYmFjaz1UcnVlKQpfID0gdC5nZXR0ZXh0CgoKZGVmIGxvZ2luRGFpbHkoc2Vzc2lvbiwgZXZlbnQsIHN0ZGluX2ZkLCBwcmVkZXRlcm1pbmVkX2lucHV0KToKICAgICIiIgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgc2Vzc2lvbiA6IGlrYWJvdC53ZWIuc2Vzc2lvbi5TZXNzaW9uCiAgICBldmVudCA6IG11bHRpcHJvY2Vzc2luZy5FdmVudAogICAgc3RkaW5fZmQ6IGludAogICAgcHJlZGV0ZXJtaW5lZF9pbnB1dCA6IG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5saXN0CiAgICAiIiIKICAgIHN5cy5zdGRpbiA9IG9zLmZkb3BlbihzdGRpbl9mZCkKICAgIGNvbmZpZy5wcmVkZXRlcm1pbmVkX2lucHV0ID0gcHJlZGV0ZXJtaW5lZF9pbnB1dAogICAgdHJ5OgogICAgICAgIGJhbm5lcigpCiAgICAgICAgcHJpbnQoXygnSSB3aWxsIGVudGVyIGV2ZXJ5IGRheS4nKSkKICAgICAgICBlbnRlcigpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICBldmVudC5zZXQoKQogICAgICAgIHJldHVybgoKPHxmaW1fZW5kfD4="]
["6b9666ce0b87b29ff1f1521ff742ece7dbf0f561-5","6b9666ce0b87b29ff1f1521ff742ece7dbf0f561","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmltcG9ydCB0aW1lCmltcG9ydCBnZXR0ZXh0CmltcG9ydCB0cmFjZWJhY2sKaW1wb3J0IHN5cwpmcm9tIGlrYWJvdC5jb25maWcgaW1wb3J0ICoKZnJvbSBpa2Fib3QuaGVscGVycy5ib3RDb21tIGltcG9ydCAqCmZyb20gaWthYm90LmhlbHBlcnMuc2lnbmFscyBpbXBvcnQgc2V0SW5mb1NpZ25hbApmcm9tIGlrYWJvdC5oZWxwZXJzLnByb2Nlc3MgaW1wb3J0IHNldF9jaGlsZF9tb2RlCmZyb20gaWthYm90LmhlbHBlcnMuZ3VpIGltcG9ydCBlbnRlcgpmcm9tIGlrYWJvdC5oZWxwZXJzLnBlZGlySW5mbyBpbXBvcnQgZ2V0SWRzT2ZDaXRpZXMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIGlrYWJvdC5oZWxwZXJzLnZhcmlvcyBpbXBvcnQgd2FpdAoKdCA9IGdldHRleHQudHJhbnNsYXRpb24oJ2xvZ2luRGFpbHknLCBsb2NhbGVkaXIsIGxhbmd1YWdlcz1sYW5ndWFnZXMsIGZhbGxiYWNrPVRydWUpCl8gPSB0LmdldHRleHQKPHxmaW1fZW5kfD4="]
["f91aba8d21130b5250569333a859b1a0e95977b7-1","f91aba8d21130b5250569333a859b1a0e95977b7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNsb2RpdXMuZnBhcmsgYXMgY2ZwCmltcG9ydCBjbG9kaXVzLnRpbGVzIGFzIGNtdAoKZGVmIHRlc3RfbWFrZV9tYXRyaXhfdGlsZXMoKToKICAgICcnJwogICAgVGVzdCB0aGUgY3JlYXRpb24gb2YgbWF0cml4IHRpbGVzLiBFeGFtcGxlIGlucHV0IG1hdHJpeDoKCiAgICBwb3MxIHBvczIgY291bnQKICAgIDIJMyAgIDEKICAgIDMJNSAgIDEKICAgIDUgICA2ICAgMQogICAgNiAgIDIgICAxCiAgICA3ICAgOSAgIDEKICAgIDggICA3ICAgMQogICAgOSAgIDQgICAxCiAgICAxMCAgNSAgIDEKCiAgICBJbiB0aGlzIGNhc2UKCiAgICAnJycKCiAgICBjbGFzcyBPcHRpb25zOgogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSwgaW1wb3J0YW5jZSwgcG9zaXRpb24sCiAgICAgICAgICAgICAgICBjb2x1bW5fbmFtZXMgPSBOb25lKToKICAgICAgICAgICAgc2VsZi5pbXBvcnRhbmNlID0gaW1wb3J0YW5jZQogICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKICAgICAgICAgICAgc2VsZi5wb3NpdGlvbiA9IHBvc2l0aW9uCiAgICAgICAgICAgIHNlbGYubWF4X2VudHJpZXNfcGVyX3RpbGUgPSAxCiAgICAgICAgICAgIHNlbGYubWF4X3pvb20gPSAzCiAgICAgICAgICAgIHNlbGYuY29sdW1uX25hbWVzID0gY29sdW1uX25hbWVzCiAgICAgICAgICAgIHNlbGYubWluX3ZhbHVlID0gTm9uZQogICAgICAgICAgICBzZWxmLm1heF92YWx1ZSA9IE5vbmUKICAgICAgICAgICAgc2VsZi5yZXNvbHV0aW9ucyA9ICIxLDEiCgogICAgb3B0aW9ucyA9IE9wdGlvbnMoJ2NvdW50JywgTm9uZSwgJ3BvczEscG9zMicpCgogICAgI210Lm1ha2VfdGlsZXNfZnJvbV9maWxlKCd0ZXN0L3NhbXBsZV9kYXRhL3NpbXBsZU1hdHJpeC50c3YnLCBvcHRpb25zKQoKICAgIHBhc3MKCmRlZiB0ZXN0X21ha2VfdGlsZXNfYnlfYmlubmluZygpOgogICAgc2MgPSBjZnAuRmFrZVNwYXJrQ29udGV4dCgpCiAgICBlbnRyaWVzID0gY210LmxvYWRfZW50cmllc19mcm9tX2ZpbGUoc2MsICd0ZXN0L3NhbXBsZV9kYXRhL3NpbXBsZU1hdHJpeC50c3YnLAogICAgICAgICAgICAgICAgY29sdW1uX25hbWVzID0gWydwb3MxJywgJ3BvczInLCAnY291bnQnXSkKICAgIGRpbV9uYW1lcyA9IFsncG9zMScsICdwb3MyJ10KCiAgICBtYXhfem9vbSA9IDIKCiAgICB0aWxlcyA9IGNtdC5tYWtlX3RpbGVzX2J5X2Jpbm5pbmcoc2MsIGVudHJpZXMsIGRpbV9uYW1lcywgbWF4X3pvb20sCiAgICAgICAgICAgIHZhbHVlX2ZpZWxkPSdjb3VudCcsCiAgICAgICAgICAgIGJpbnNfcGVyX2RpbWVuc2lvbj0yKQoKZGVmIHRlc3RfbWFrZV90aWxlc193aXRoX3Jlc29sdXRpb24oKToKICAgIHNjID0gY2ZwLkZha2VTcGFya0NvbnRleHQoKQogICAgZW50cmllcyA9IGNtdC5sb2FkX2VudHJpZXNfZnJvbV9maWxlKHNjLCAndGVzdC9zYW1wbGVfZGF0YS9zbWFsbEZ1bGxNYXRyaXgudHN2JywKICAgICAgICAgICAgICAgIGNvbHVtbl9uYW1lcyA9IFsncG9zMScsICdwb3MyJywgJ2NvdW50J10pCgogICAgZGltX25hbWVzID0gWydwb3MxJywgJ3BvczInXQogICAgbWF4X3pvb20gPSAxCiAgICAjIGNyZWF0ZSBzcGFyc2UgZm9ybWF0IHRpbGVzIChkZWZhdWx0KQogICAgdGlsZXMgPSBjbXQubWFrZV90aWxlc19ieV9iaW5uaW5nKHNjLCBlbnRyaWVzLCBkaW1fbmFtZXMsIG1heF96b29tLAogICAgICAgICAgICB2YWx1ZV9maWVsZD0nY291bnQnLAogICAgICAgICAgICBiaW5zX3Blcl9kaW1lbnNpb249MiwKICAgICAgICAgICAgcmVzb2x1dGlvbj0xKQoKICAgIHRpbGVzID0gdGlsZXNbJ3RpbGVzJ10uY29sbGVjdCgpCgogICAgIyBtYWtlIHN1cmUgdGhlIHRvcC1sZXZlbCB0aWxlIGlzIHRoZXJlCiAgICBhc3NlcnQoKDAsMCwwKSBpbiBbdFswXSBmb3IgdCBpbiB0aWxlc10pCiAgICBhc3NlcnQoJ2RlbnNlJyBpbiB0aWxlc1swXVsxXSkKCiAgICAjIGNyZWF0ZSBkZW5zZSBmb3JtYXQgdGlsZXMKICAgIHRpbGVzID0gY210Lm1ha2VfdGlsZXNfYnlfYmlubmluZyhzYywgZW50cmllcywgZGltX25hbWVzLCBtYXhfem9vbSwKICAgICAgICAgICAgdmFsdWVfZmllbGQ9J2NvdW50JywKICAgICAgICAgICAgYmluc19wZXJfZGltZW5zaW9uPTIsCiAgICAgICAgICAgIHJlc29sdXRpb249MSkKICAgIHRpbGVzID0gdGlsZXNbJ3RpbGVzJ10uY29sbGVjdCgpCgpkZWYgdGVzdF9tYWtlX3RpbGVzX3dpdGhfaW1wb3J0YW5jZSgpOgogICAgc2MgPSBjZnAuRmFrZVNwYXJrQ29udGV4dCgpCiAgICBlbnRyaWVzID0gY210LmxvYWRfZW50cmllc19mcm9tX2ZpbGUoc2MsICd0ZXN0L3NhbXBsZV9kYXRhL3NtYWxsUmVmR2VuZUNvdW50cy50c3YnLAogICAgICAgICAgICBjb2x1bW5fbmFtZXM9WydyZWZzZXFpZCcsICdjaHInLCAnc3RyYW5kJywgJ3R4U3RhcnQnLCAndHhFbmQnLCAnZ2Vub21lVHhTdGFydCcsICdnZW5vbWVUeEVuZCcsICdjZHNTdGFydCcsICdjZHNFbmQnLCAnZXhvbkNvdW50JywgJ2V4b25TdGFydHMnLCAnZXhvbkVuZHMnLCAnY291bnQnXSkKCiAgICAjdGlsZXMgPSBjbXQubWFrZV90aWxlc19ieV9pbXBvcnRhbmNlKGVudHJpZXMsIGRpbV9uYW1lcywgbWF4X3pvb20sIHZhbHVlX2ZpZWxkCiAgICBkaW1fbmFtZXMgPSBbJ3R4U3RhcnQnXQogICAgbWF4X3pvb20gPSBOb25lCgogICAgdGlsZXMgPSBjbXQubWFrZV90aWxlc19ieV9pbXBvcnRhbmNlKHNjLCBlbnRyaWVzLCBkaW1fbmFtZXMgPSBbJ3R4U3RhcnQnXSwKICAgICAgICAgICAgbWF4X3pvb20gPSBOb25lLAogICAgICAgICAgICBtaW5zPVsxXSwKICAgICAgICAgICAgbWF4cz1bMzAwMDAwMDAwMF0sCiAgICAgICAgICAgIGltcG9ydGFuY2VfZmllbGQ9J2NvdW50JywKICAgICAgICAgICAgbWF4X2VudHJpZXNfcGVyX3RpbGU9MSkKCiAgICBmb3IgKHRpbGVfcG9zLCB0aWxlX3ZhbHVlcykgaW4gdGlsZXNbJ3RpbGVzJ10uY29sbGVjdCgpOgogICAgICAgIGFzc2VydChsZW4odGlsZV92YWx1ZXMpIDw9IDEpCgpkZWYgdGVzdF9kYXRhX2JvdW5kcygpOgogICAgc2MgPSBjZnAuRmFrZVNwYXJrQ29udGV4dCgpCiAgICBlbnRyaWVzID0gY210LmxvYWRfZW50cmllc19mcm9tX2ZpbGUoc2MsICd0ZXN0L3NhbXBsZV9kYXRhL3NtYWxsQmVkR3JhcGgudHN2JywKICAgICAgICAgICAgY29sdW1uX25hbWVzPVsnY2hyMScsICdwb3MxJywgJ3BvczInLCAndmFsJ10sCiAgICAgICAgICAgIGRlbGltaXRlcj0nICcpCgogICAgZGltX25hbWVzID0gWydwb3MxJ10KICAgIGVudHJpZXMubWFwKGNtdC5hZGRfcG9zKGRpbV9uYW1lcykpCgogICAgKG1pbnMsIG1heHMpID0gY210LmRhdGFfYm91bmRzKGVudHJpZXMsIDEpCgogICAgYXNzZXJ0KG1pbnNbMF0gPT0gMS4wKQogICAgYXNzZXJ0KG1heHNbMF0gPT0gOC4wKQoKZGVmIHRlc3RfcG9zaXRpb25fcmFuZ2VzKCk6CiAgICBzYyA9IGNmcC5GYWtlU3BhcmtDb250ZXh0KCkKICAgIGVudHJpZXMgPSBjbXQubG9hZF9lbnRyaWVzX2Zyb21fZmlsZShzYywgJ3Rlc3Qvc2FtcGxlX2RhdGEvc21hbGxCZWRHcmFwaC50c3YnLAogICAgICAgICAgICBjb2x1bW5fbmFtZXM9WydjaHIxJywgJ3BvczEnLCAncG9zMicsICd2YWwnXSwKICAgICAgICAgICAgZGVsaW1pdGVyPScgJykKICAgIGVudHJpZXMgPSBlbnRyaWVzLm1hcChsYW1iZGEgeDogZGljdCh4LCBwb3MxPWludCh4Wydwb3MxJ10pLCBwb3MyPWludCh4Wydwb3MyJ10pKSkKCiAgICBlbnRyaWVzID0gZW50cmllcy5mbGF0TWFwKGxhbWJkYSB4OiBjbXQuZXhwYW5kX3JhbmdlKHgsICdwb3MxJywgJ3BvczInKSkKICAgIGZyb21zID0gZW50cmllcy5tYXAobGFtYmRhIHg6IHhbJ3BvczEnXSkuY29sbGVjdCgpCgogICAgYXNzZXJ0KDEgaW4gZnJvbXMpCiAgICBhc3NlcnQoMiBpbiBmcm9tcykKICAgIGFzc2VydCgzIGluIGZyb21zKQogICAgYXNzZXJ0KDQgaW4gZnJvbXMpCiAgICBhc3NlcnQoOCBpbiBmcm9tcykKICAgIGFzc2VydCg5IGluIGZyb21zKQoKICAgIGZvciBlbnRyeSBpbiBlbnRyaWVzLmNvbGxlY3QoKToKICAgICAgICBhc3NlcnQoZW50cnlbJ3BvczEnXSAhPSA1KQogICAgICAgIGFzc2VydChlbnRyeVsncG9zMSddICE9IDEwKQoKZGVmIHRlc3RfZG5hc2Vfc2FtcGxlX2RhdGEoKToKICAgIHNjID0gY2ZwLkZha2VTcGFya0NvbnRleHQoKQogICAgZW50cmllcyA9IGNtdC5sb2FkX2VudHJpZXNfZnJvbV9maWxlKHNjLCd0ZXN0L3NhbXBsZV9kYXRhL0UxMTYtRE5hc2UuZmMuc2lnbmFsLmJpZ3dpZy5iZWRHcmFwaC5nZW5vbWUuMjI1JywKICAgICAgICAgICAgY29sdW1uX25hbWVzPVsncG9zMScsICdwb3MyJywgJ3ZhbCddLCBkZWxpbWl0ZXI9Tm9uZSkKICAgIGVudHJpZXMgPSBlbnRyaWVzLmZsYXRNYXAobGFtYmRhIHg6IGNtdC5leHBhbmRfcmFuZ2UoeCwgJ3BvczEnLCAncG9zMicsIHJhbmdlX2V4Y2VwdF8wID0gJ3ZhbCcpKQoKICAgIHRpbGVfc2FtcGxlX2RhdGEgPSBjbXQubWFrZV90aWxlc19ieV9iaW5uaW5nKHNjLCBlbnRyaWVzLAogICAgICAgICAgICBbJ3BvczEnXSwgbWF4X3pvb20gPSAxMDAwLAogICAgICAgICAgICB2YWx1ZV9maWVsZCA9ICd2YWwnLCBpbXBvcnRhbmNlX2ZpZWxkID0gJ3ZhbCcsCiAgICAgICAgICAgIHJlc29sdXRpb24gPSAxLCBiaW5zX3Blcl9kaW1lbnNpb24gPSA2NCkKCiAgICB0aWxlID0gdGlsZV9zYW1wbGVfZGF0YVsndGlsZXMnXS5jb2xsZWN0KClbMF0KCmRlZiB0ZXN0X2VuZF9wb3NpdGlvbigpOgogICAgc2MgPSBjZnAuRmFrZVNwYXJrQ29udGV4dAoKICAgICMgbWFrZSBvbmUgcmVhbGx5IHdpZGUgZW50cnkKICAgIGVudHJpZXMgPSBbeyd4MSc6IDEsICd4Mic6IDEwLCAndmFsdWUnOiA1fV0KICAgIGVudHJpZXMgPSBjZnAuRmFrZVNwYXJrQ29udGV4dC5wYXJhbGxlbGl6ZShlbnRyaWVzKQoKICAgIHRpbGVzZXQgPSBjbXQubWFrZV90aWxlc19ieV9pbXBvcnRhbmNlKHNjLCBlbnRyaWVzLCBbJ3gxJ10sIGVuZF9kaW1fbmFtZXM9Wyd4MiddLCBtYXhfem9vbT0yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnM9WzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heHM9WzEwXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGFuY2VfZmllbGQ9J3ZhbHVlJywgYWRhcHRfem9vbT1GYWxzZSkKCiAgICB0aWxlcyA9IHRpbGVzZXRbJ3RpbGVzJ10uY29sbGVjdCgpCiAgICB0aWxlX2lkcyA9IGxpc3QobWFwKGxhbWJkYSB4OiB4WzBdLCB0aWxlcykpCgogICAgIyB0aGlzIGRhdGEgcG9pbnQgc2hvdWxkIGJlIGluIGV2ZXJ5IHRpbGUKICAgIGFzc2VydCgoMCwwKSBpbiB0aWxlX2lkcykKICAgIGFzc2VydCgoMSwxKSBpbiB0aWxlX2lkcykKICAgIGFzc2VydCgoMSwwKSBpbiB0aWxlX2lkcykKICAgIGFzc2VydCgoMiwwKSBpbiB0aWxlX2lkcykKPHxmaW1faG9sZXw+CiAgICBlbnRyaWVzID0gY2ZwLkZha2VTcGFya0NvbnRleHQucGFyYWxsZWxpemUoZW50cmllcykKCiAgICB0aWxlc2V0ID0gY210Lm1ha2VfdGlsZXNfYnlfaW1wb3J0YW5jZShzYywgZW50cmllcywgWyd4MSddLCBtYXhfem9vbT0yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnM9WzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heHM9WzEwXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGFuY2VfZmllbGQ9J3ZhbHVlJywgYWRhcHRfem9vbT1GYWxzZSkKCiAgICB0aWxlcyA9IHRpbGVzZXRbJ3RpbGVzJ10uY29sbGVjdCgpCiAgICB0aWxlX2lkcyA9IG1hcChsYW1iZGEgeDogeFswXSwgdGlsZXMpCgogICAgIyB0aGlzIGRhdGEgcG9pbnQgc2hvdWxkIGJlIGluIGV2ZXJ5IHRpbGUKICAgIGFzc2VydCgoMCwwKSBpbiB0aWxlX2lkcykKICAgIGFzc2VydCgoMSwwKSBpbiB0aWxlX2lkcykKCiAgICAjICgxLDIpIHNob3VsZCBub3QgYmUgYSBwb3RlbnRpYWwgdGlsZQogICAgIyBhc3NlcnQoKDEsMikgaW4gdGlsZV9pZHMpCgpkZWYgdGVzdF9zaW5nbGVfdGhyZWFkZWRfYmlubmluZygpOgogICAgZW50cmllcyA9IFsKICAgICAgICAgICAgICAgIFsyLDEwLDFdLAogICAgICAgICAgICAgICAgWzMsMSwxXSwKICAgICAgICAgICAgICAgIFszLDIsMV0sCiAgICAgICAgICAgICAgICBbMyw4LDFdLAogICAgICAgICAgICAgICAgWzQsMywxXSwKICAgICAgICAgICAgICAgIFs0LDgsMV0sCiAgICAgICAgICAgICAgICBbNiw0LDFdLAogICAgICAgICAgICAgICAgWzcsMywxXSwKICAgICAgICAgICAgICAgIFs4LDEsMV0sCiAgICAgICAgICAgICAgICBbMTAsMSwxXQogICAgICAgICAgICAgICAgXQoKICAgIG1pbnMgPSBbMSwxXQogICAgbWF4cyA9IFsxMCwxMF0KCiAgICBpbXBvcnQgY29sbGVjdGlvbnMgYXMgY29sCgogICAgbWF4X3dpZHRoID0gbWF4KFtiIC0gYSBmb3IgKGEsYikgaW4gemlwKG1pbnMsIG1heHMpXSkKICAgIGFjdGl2ZV9iaW5zID0gY29sLmRlZmF1bHRkaWN0KGxpc3QpCgogICAgbWF4X3pvb20gPSAyCiAgICB0aWxlX3dpZHRocyA9IFttYXhfd2lkdGggLyAyICoqIHpsIGZvciB6bCBpbiByYW5nZSgwLCBtYXhfem9vbSsxKV0KCiAgICBmb3IgZW50cnkgaW4gZW50cmllczoKICAgICAgICBlbnRyeV9wb3MgPSBbZSAtIG0gZm9yIChlLG0pIGluIHppcChlbnRyeVs6LTFdLCBtaW5zKV0KCiAgICAgICAgIyBnbyB0aHJvdWdoIGVhY2ggem9vbSBsZXZlbAogICAgICAgIGZvciB6b29tX2xldmVsLCB0aWxlX3dpZHRoIGluIGVudW1lcmF0ZSh0aWxlX3dpZHRocyk6CiAgICAgICAgICAgIGN1cnJlbnRfYmluID0gW2ludChlcCAvIHRpbGVfd2lkdGgpIGZvciBlcCBpbiBlbnRyeV9wb3NdCgogICAgICAgICAgICBhY3RpdmVfYmluc1t6b29tX2xldmVsXSArPSBbY3VycmVudF9iaW5dCgogICAgICAgICAgICAjIHdoaWNoIGJpbnMgd2lsbCBuZXZlciBiZSB0b3VjaGVkIGFnYWluPwogICAgICAgICAgICAjIGFsbCBiaW5zIGF0IHRoZSBjdXJyZW50IHpvb20gbGV2ZWwgd2hlcmUgKGVudHJ5X3Bvc1swXSAvIHRpbGVfd2lkdGgpIDwgY3VycmVudF9iaW5bMF0KICAgICAgICAgICAgd2hpbGUgbGVuKGFjdGl2ZV9iaW5zW3pvb21fbGV2ZWxdKSA+IDA6CiAgICAgICAgICAgICAgICBpZiBhY3RpdmVfYmluc1t6b29tX2xldmVsXVswXVswXSA8IGN1cnJlbnRfYmluWzBdOgogICAgICAgICAgICAgICAgICAgIGFjdGl2ZV9iaW5zW3pvb21fbGV2ZWxdLnBvcCgwKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBicmVhawoKPHxmaW1fc3VmZml4fD4KICAgIGFzc2VydCgoMiwzKSBpbiB0aWxlX2lkcykKCiAgICAjIG1ha2UgdHdvIG5vdC1zby13aWRlIGVudHJpZXMKICAgIGVudHJpZXMgPSBbeyd4MSc6IDEsICd2YWx1ZSc6IDV9LCB7J3gxJzogMTAsICd2YWx1ZSc6IDZ9XQo8fGZpbV9lbmR8Pg=="]
["f91aba8d21130b5250569333a859b1a0e95977b7-2","f91aba8d21130b5250569333a859b1a0e95977b7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNsb2RpdXMuZnBhcmsgYXMgY2ZwCmltcG9ydCBjbG9kaXVzLnRpbGVzIGFzIGNtdAoKZGVmIHRlc3RfbWFrZV9tYXRyaXhfdGlsZXMoKToKICAgICcnJwogICAgVGVzdCB0aGUgY3JlYXRpb24gb2YgbWF0cml4IHRpbGVzLiBFeGFtcGxlIGlucHV0IG1hdHJpeDoKCiAgICBwb3MxIHBvczIgY291bnQKICAgIDIJMyAgIDEKICAgIDMJNSAgIDEKICAgIDUgICA2ICAgMQogICAgNiAgIDIgICAxCiAgICA3ICAgOSAgIDEKICAgIDggICA3ICAgMQogICAgOSAgIDQgICAxCiAgICAxMCAgNSAgIDEKCiAgICBJbiB0aGlzIGNhc2UKCiAgICAnJycKCiAgICBjbGFzcyBPcHRpb25zOgogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSwgaW1wb3J0YW5jZSwgcG9zaXRpb24sCiAgICAgICAgICAgICAgICBjb2x1bW5fbmFtZXMgPSBOb25lKToKICAgICAgICAgICAgc2VsZi5pbXBvcnRhbmNlID0gaW1wb3J0YW5jZQogICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKICAgICAgICAgICAgc2VsZi5wb3NpdGlvbiA9IHBvc2l0aW9uCiAgICAgICAgICAgIHNlbGYubWF4X2VudHJpZXNfcGVyX3RpbGUgPSAxCiAgICAgICAgICAgIHNlbGYubWF4X3pvb20gPSAzCiAgICAgICAgICAgIHNlbGYuY29sdW1uX25hbWVzID0gY29sdW1uX25hbWVzCiAgICAgICAgICAgIHNlbGYubWluX3ZhbHVlID0gTm9uZQogICAgICAgICAgICBzZWxmLm1heF92YWx1ZSA9IE5vbmUKICAgICAgICAgICAgc2VsZi5yZXNvbHV0aW9ucyA9ICIxLDEiCgogICAgb3B0aW9ucyA9IE9wdGlvbnMoJ2NvdW50JywgTm9uZSwgJ3BvczEscG9zMicpCgogICAgI210Lm1ha2VfdGlsZXNfZnJvbV9maWxlKCd0ZXN0L3NhbXBsZV9kYXRhL3NpbXBsZU1hdHJpeC50c3YnLCBvcHRpb25zKQoKICAgIHBhc3MKCmRlZiB0ZXN0X21ha2VfdGlsZXNfYnlfYmlubmluZygpOgogICAgc2MgPSBjZnAuRmFrZVNwYXJrQ29udGV4dCgpCiAgICBlbnRyaWVzID0gY210LmxvYWRfZW50cmllc19mcm9tX2ZpbGUoc2MsICd0ZXN0L3NhbXBsZV9kYXRhL3NpbXBsZU1hdHJpeC50c3YnLAogICAgICAgICAgICAgICAgY29sdW1uX25hbWVzID0gWydwb3MxJywgJ3BvczInLCAnY291bnQnXSkKICAgIGRpbV9uYW1lcyA9IFsncG9zMScsICdwb3MyJ10KCiAgICBtYXhfem9vbSA9IDIKCiAgICB0aWxlcyA9IGNtdC5tYWtlX3RpbGVzX2J5X2Jpbm5pbmcoc2MsIGVudHJpZXMsIGRpbV9uYW1lcywgbWF4X3pvb20sCiAgICAgICAgICAgIHZhbHVlX2ZpZWxkPSdjb3VudCcsCiAgICAgICAgICAgIGJpbnNfcGVyX2RpbWVuc2lvbj0yKQoKZGVmIHRlc3RfbWFrZV90aWxlc193aXRoX3Jlc29sdXRpb24oKToKICAgIHNjID0gY2ZwLkZha2VTcGFya0NvbnRleHQoKQogICAgZW50cmllcyA9IGNtdC5sb2FkX2VudHJpZXNfZnJvbV9maWxlKHNjLCAndGVzdC9zYW1wbGVfZGF0YS9zbWFsbEZ1bGxNYXRyaXgudHN2JywKICAgICAgICAgICAgICAgIGNvbHVtbl9uYW1lcyA9IFsncG9zMScsICdwb3MyJywgJ2NvdW50J10pCgogICAgZGltX25hbWVzID0gWydwb3MxJywgJ3BvczInXQogICAgbWF4X3pvb20gPSAxCiAgICAjIGNyZWF0ZSBzcGFyc2UgZm9ybWF0IHRpbGVzIChkZWZhdWx0KQogICAgdGlsZXMgPSBjbXQubWFrZV90aWxlc19ieV9iaW5uaW5nKHNjLCBlbnRyaWVzLCBkaW1fbmFtZXMsIG1heF96b29tLAogICAgICAgICAgICB2YWx1ZV9maWVsZD0nY291bnQnLAogICAgICAgICAgICBiaW5zX3Blcl9kaW1lbnNpb249MiwKICAgICAgICAgICAgcmVzb2x1dGlvbj0xKQoKICAgIHRpbGVzID0gdGlsZXNbJ3RpbGVzJ10uY29sbGVjdCgpCgogICAgIyBtYWtlIHN1cmUgdGhlIHRvcC1sZXZlbCB0aWxlIGlzIHRoZXJlCiAgICBhc3NlcnQoKDAsMCwwKSBpbiBbdFswXSBmb3IgdCBpbiB0aWxlc10pCiAgICBhc3NlcnQoJ2RlbnNlJyBpbiB0aWxlc1swXVsxXSkKCiAgICAjIGNyZWF0ZSBkZW5zZSBmb3JtYXQgdGlsZXMKICAgIHRpbGVzID0gY210Lm1ha2VfdGlsZXNfYnlfYmlubmluZyhzYywgZW50cmllcywgZGltX25hbWVzLCBtYXhfem9vbSwKICAgICAgICAgICAgdmFsdWVfZmllbGQ9J2NvdW50JywKICAgICAgICAgICAgYmluc19wZXJfZGltZW5zaW9uPTIsCiAgICAgICAgICAgIHJlc29sdXRpb249MSkKICAgIHRpbGVzID0gdGlsZXNbJ3RpbGVzJ10uY29sbGVjdCgpCgpkZWYgdGVzdF9tYWtlX3RpbGVzX3dpdGhfaW1wb3J0YW5jZSgpOgogICAgc2MgPSBjZnAuRmFrZVNwYXJrQ29udGV4dCgpCiAgICBlbnRyaWVzID0gY210LmxvYWRfZW50cmllc19mcm9tX2ZpbGUoc2MsICd0ZXN0L3NhbXBsZV9kYXRhL3NtYWxsUmVmR2VuZUNvdW50cy50c3YnLAogICAgICAgICAgICBjb2x1bW5fbmFtZXM9WydyZWZzZXFpZCcsICdjaHInLCAnc3RyYW5kJywgJ3R4U3RhcnQnLCAndHhFbmQnLCAnZ2Vub21lVHhTdGFydCcsICdnZW5vbWVUeEVuZCcsICdjZHNTdGFydCcsICdjZHNFbmQnLCAnZXhvbkNvdW50JywgJ2V4b25TdGFydHMnLCAnZXhvbkVuZHMnLCAnY291bnQnXSkKCiAgICAjdGlsZXMgPSBjbXQubWFrZV90aWxlc19ieV9pbXBvcnRhbmNlKGVudHJpZXMsIGRpbV9uYW1lcywgbWF4X3pvb20sIHZhbHVlX2ZpZWxkCiAgICBkaW1fbmFtZXMgPSBbJ3R4U3RhcnQnXQogICAgbWF4X3pvb20gPSBOb25lCgogICAgdGlsZXMgPSBjbXQubWFrZV90aWxlc19ieV9pbXBvcnRhbmNlKHNjLCBlbnRyaWVzLCBkaW1fbmFtZXMgPSBbJ3R4U3RhcnQnXSwKICAgICAgICAgICAgbWF4X3pvb20gPSBOb25lLAogICAgICAgICAgICBtaW5zPVsxXSwKICAgICAgICAgICAgbWF4cz1bMzAwMDAwMDAwMF0sCiAgICAgICAgICAgIGltcG9ydGFuY2VfZmllbGQ9J2NvdW50JywKICAgICAgICAgICAgbWF4X2VudHJpZXNfcGVyX3RpbGU9MSkKCiAgICBmb3IgKHRpbGVfcG9zLCB0aWxlX3ZhbHVlcykgaW4gdGlsZXNbJ3RpbGVzJ10uY29sbGVjdCgpOgogICAgICAgIGFzc2VydChsZW4odGlsZV92YWx1ZXMpIDw9IDEpCgpkZWYgdGVzdF9kYXRhX2JvdW5kcygpOgogICAgc2MgPSBjZnAuRmFrZVNwYXJrQ29udGV4dCgpCiAgICBlbnRyaWVzID0gY210LmxvYWRfZW50cmllc19mcm9tX2ZpbGUoc2MsICd0ZXN0L3NhbXBsZV9kYXRhL3NtYWxsQmVkR3JhcGgudHN2JywKICAgICAgICAgICAgY29sdW1uX25hbWVzPVsnY2hyMScsICdwb3MxJywgJ3BvczInLCAndmFsJ10sCiAgICAgICAgICAgIGRlbGltaXRlcj0nICcpCgogICAgZGltX25hbWVzID0gWydwb3MxJ10KICAgIGVudHJpZXMubWFwKGNtdC5hZGRfcG9zKGRpbV9uYW1lcykpCgogICAgKG1pbnMsIG1heHMpID0gY210LmRhdGFfYm91bmRzKGVudHJpZXMsIDEpCgogICAgYXNzZXJ0KG1pbnNbMF0gPT0gMS4wKQogICAgYXNzZXJ0KG1heHNbMF0gPT0gOC4wKQoKZGVmIHRlc3RfcG9zaXRpb25fcmFuZ2VzKCk6CiAgICBzYyA9IGNmcC5GYWtlU3BhcmtDb250ZXh0KCkKICAgIGVudHJpZXMgPSBjbXQubG9hZF9lbnRyaWVzX2Zyb21fZmlsZShzYywgJ3Rlc3Qvc2FtcGxlX2RhdGEvc21hbGxCZWRHcmFwaC50c3YnLAogICAgICAgICAgICBjb2x1bW5fbmFtZXM9WydjaHIxJywgJ3BvczEnLCAncG9zMicsICd2YWwnXSwKICAgICAgICAgICAgZGVsaW1pdGVyPScgJykKICAgIGVudHJpZXMgPSBlbnRyaWVzLm1hcChsYW1iZGEgeDogZGljdCh4LCBwb3MxPWludCh4Wydwb3MxJ10pLCBwb3MyPWludCh4Wydwb3MyJ10pKSkKCiAgICBlbnRyaWVzID0gZW50cmllcy5mbGF0TWFwKGxhbWJkYSB4OiBjbXQuZXhwYW5kX3JhbmdlKHgsICdwb3MxJywgJ3BvczInKSkKICAgIGZyb21zID0gZW50cmllcy5tYXAobGFtYmRhIHg6IHhbJ3BvczEnXSkuY29sbGVjdCgpCgogICAgYXNzZXJ0KDEgaW4gZnJvbXMpCiAgICBhc3NlcnQoMiBpbiBmcm9tcykKICAgIGFzc2VydCgzIGluIGZyb21zKQogICAgYXNzZXJ0KDQgaW4gZnJvbXMpCiAgICBhc3NlcnQoOCBpbiBmcm9tcykKICAgIGFzc2VydCg5IGluIGZyb21zKQoKICAgIGZvciBlbnRyeSBpbiBlbnRyaWVzLmNvbGxlY3QoKToKICAgICAgICBhc3NlcnQoZW50cnlbJ3BvczEnXSAhPSA1KQogICAgICAgIGFzc2VydChlbnRyeVsncG9zMSddICE9IDEwKQoKZGVmIHRlc3RfZG5hc2Vfc2FtcGxlX2RhdGEoKToKICAgIHNjID0gY2ZwLkZha2VTcGFya0NvbnRleHQoKQogICAgZW50cmllcyA9IGNtdC5sb2FkX2VudHJpZXNfZnJvbV9maWxlKHNjLCd0ZXN0L3NhbXBsZV9kYXRhL0UxMTYtRE5hc2UuZmMuc2lnbmFsLmJpZ3dpZy5iZWRHcmFwaC5nZW5vbWUuMjI1JywKICAgICAgICAgICAgY29sdW1uX25hbWVzPVsncG9zMScsICdwb3MyJywgJ3ZhbCddLCBkZWxpbWl0ZXI9Tm9uZSkKICAgIGVudHJpZXMgPSBlbnRyaWVzLmZsYXRNYXAobGFtYmRhIHg6IGNtdC5leHBhbmRfcmFuZ2UoeCwgJ3BvczEnLCAncG9zMicsIHJhbmdlX2V4Y2VwdF8wID0gJ3ZhbCcpKQoKICAgIHRpbGVfc2FtcGxlX2RhdGEgPSBjbXQubWFrZV90aWxlc19ieV9iaW5uaW5nKHNjLCBlbnRyaWVzLAogICAgICAgICAgICBbJ3BvczEnXSwgbWF4X3pvb20gPSAxMDAwLAogICAgICAgICAgICB2YWx1ZV9maWVsZCA9ICd2YWwnLCBpbXBvcnRhbmNlX2ZpZWxkID0gJ3ZhbCcsCiAgICAgICAgICAgIHJlc29sdXRpb24gPSAxLCBiaW5zX3Blcl9kaW1lbnNpb24gPSA2NCkKCiAgICB0aWxlID0gdGlsZV9zYW1wbGVfZGF0YVsndGlsZXMnXS5jb2xsZWN0KClbMF0KCmRlZiB0ZXN0X2VuZF9wb3NpdGlvbigpOgogICAgc2MgPSBjZnAuRmFrZVNwYXJrQ29udGV4dAoKICAgICMgbWFrZSBvbmUgcmVhbGx5IHdpZGUgZW50cnkKICAgIGVudHJpZXMgPSBbeyd4MSc6IDEsICd4Mic6IDEwLCAndmFsdWUnOiA1fV0KICAgIGVudHJpZXMgPSBjZnAuRmFrZVNwYXJrQ29udGV4dC5wYXJhbGxlbGl6ZShlbnRyaWVzKQoKICAgIHRpbGVzZXQgPSBjbXQubWFrZV90aWxlc19ieV9pbXBvcnRhbmNlKHNjLCBlbnRyaWVzLCBbJ3gxJ10sIGVuZF9kaW1fbmFtZXM9Wyd4MiddLCBtYXhfem9vbT0yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnM9WzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heHM9WzEwXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGFuY2VfZmllbGQ9J3ZhbHVlJywgYWRhcHRfem9vbT1GYWxzZSkKCiAgICB0aWxlcyA9IHRpbGVzZXRbJ3RpbGVzJ10uY29sbGVjdCgpCiAgICB0aWxlX2lkcyA9IGxpc3QobWFwKGxhbWJkYSB4OiB4WzBdLCB0aWxlcykpCgogICAgIyB0aGlzIGRhdGEgcG9pbnQgc2hvdWxkIGJlIGluIGV2ZXJ5IHRpbGUKICAgIGFzc2VydCgoMCwwKSBpbiB0aWxlX2lkcykKICAgIGFzc2VydCgoMSwxKSBpbiB0aWxlX2lkcykKICAgIGFzc2VydCgoMSwwKSBpbiB0aWxlX2lkcykKICAgIGFzc2VydCgoMiwwKSBpbiB0aWxlX2lkcykKICAgIGFzc2VydCgoMiwzKSBpbiB0aWxlX2lkcykKCiAgICAjIG1ha2UgdHdvIG5vdC1zby13aWRlIGVudHJpZXMKICAgIGVudHJpZXMgPSBbeyd4MSc6IDEsICd2YWx1ZSc6IDV9LCB7J3gxJzogMTAsICd2YWx1ZSc6IDZ9XQogICAgZW50cmllcyA9IGNmcC5GYWtlU3BhcmtDb250ZXh0LnBhcmFsbGVsaXplKGVudHJpZXMpCgogICAgdGlsZXNldCA9IGNtdC5tYWtlX3RpbGVzX2J5X2ltcG9ydGFuY2Uoc2MsIGVudHJpZXMsIFsneDEnXSwgbWF4X3pvb209MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5zPVsxXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhzPVsxMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRhbmNlX2ZpZWxkPSd2YWx1ZScsIGFkYXB0X3pvb209RmFsc2UpCgogICAgdGlsZXMgPSB0aWxlc2V0Wyd0aWxlcyddLmNvbGxlY3QoKQogICAgdGlsZV9pZHMgPSBtYXAobGFtYmRhIHg6IHhbMF0sIHRpbGVzKQoKICAgICMgdGhpcyBkYXRhIHBvaW50IHNob3VsZCBiZSBpbiBldmVyeSB0aWxlCiAgICBhc3NlcnQoKDAsMCkgaW4gdGlsZV9pZHMpCiAgICBhc3NlcnQoKDEsMCkgaW4gdGlsZV9pZHMpCgogICAgIyAoMSwyKSBzaG91bGQgbm90IGJlIGEgcG90ZW50aWFsIHRpbGUKICAgICMgYXNzZXJ0KCgxLDIpIGluIHRpbGVfaWRzKQoKZGVmIHRlc3Rfc2luZ2xlX3RocmVhZGVkX2Jpbm5pbmcoKToKICAgIGVudHJpZXMgPSBbCiAgICAgICAgICAgICAgICBbMiwxMCwxXSwKICAgICAgICAgICAgICAgIFszLDEsMV0sCiAgICAgICAgICAgICAgICBbMywyLDFdLAogICAgICAgICAgICAgICAgWzMsOCwxXSwKICAgICAgICAgICAgICAgIFs0LDMsMV0sCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIFs0LDgsMV0sCiAgICAgICAgICAgICAgICBbNiw0LDFdLAogICAgICAgICAgICAgICAgWzcsMywxXSwKICAgICAgICAgICAgICAgIFs4LDEsMV0sCjx8ZmltX2VuZHw+"]
["99f4d9fa2234bc064dfad05c01a1cc61f792764e-1","99f4d9fa2234bc064dfad05c01a1cc61f792764e","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCmZyb20gbHhtbCBpbXBvcnQgZXRyZWUKZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQb3BlbiwgUElQRSwgU1RET1VUCgppbXBvcnQgdW5pdHRlc3QKCmNsYXNzIE91dHB1dFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKCWRlZiBzZXRVcChzZWxmKToKCQlwcmludCgiIikKCQoJZGVmIHZhbGlkYXRlWE1MVHJlZShzZWxmLCBpbnB1dCwgZXhwZWN0ZWQpOgoJCXAgPSBQb3BlbihbJy4uL0J1aWxkL2JsYWh0ZXgnLCAnLS1tYXRobWwnLCAnLS1zcGFjaW5nJywgJ21vZGVyYXRlJ10sIHN0ZG91dD1QSVBFLCBzdGRpbj1QSVBFLCBzdGRlcnI9U1RET1VUKQoJCQoJCXAuc3RkaW4ud3JpdGUoaW5wdXQpCgkJcC5zdGRpbi5jbG9zZSgpCgkJcC53YWl0KCkKCQkKCQlwYXJzZXIgPSBldHJlZS5YTUxQYXJzZXIocmVtb3ZlX2JsYW5rX3RleHQ9VHJ1ZSkKCQkKCQlhY3R1YWwgPSBwLnN0ZG91dC5yZWFkKCkKCQkKCQlyb290Tm9kZSA9IGV0cmVlLlhNTChhY3R1YWwsIHBhcnNlcj1wYXJzZXIpCgkJZXhwZWN0ZWRSb290Tm9kZSA9IGV0cmVlLlhNTChleHBlY3RlZCwgcGFyc2VyPXBhcnNlcikKCQkKCQlvMSA9IGV0cmVlLnRvc3RyaW5nKHJvb3ROb2RlKQoJCW8yID0gZXRyZWUudG9zdHJpbmcoZXhwZWN0ZWRSb290Tm9kZSkKCQkKCQlzZWxmLmFzc2VydEVxdWFscyhvMSwgbzIpCgoKY2xhc3MgVGV4dFRlc3RzKE91dHB1dFRlc3RzKToKCWRlZiB0ZXN0UmF3VGV4dChzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93PjxtaT50PC9taT48bWk+ZTwvbWk+PG1pPnM8L21pPjxtaT50PC9taT48L21yb3c+CgkJCTwvbWFya3VwPgoJCQk8L21hdGhtbD4KCQkJPC9ibGFodGV4PgoJCSIiIgoJCQoJCXNlbGYudmFsaWRhdGVYTUxUcmVlKCJ0ZXN0Iiwgb3V0cHV0KQoJCglkZWYgdGVzdFJhd1RleHQyKHNlbGYpOgoJCW91dHB1dCA9ICIiIgoJCQk8YmxhaHRleD4KCQkJPG1hdGhtbD4KCQkJPG1hcmt1cD4KCQkJPG1yb3c+PG1pPmM8L21pPjxtaT5vPC9taT48bWk+bTwvbWk+PG1pPnA8L21pPjxtaT51PC9taT48bWk+dDwvbWk+PG1pPmU8L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPig8L21vPjxtaT5UPC9taT48bW8gc3RyZXRjaHk9ImZhbHNlIj4pPC9tbz48L21yb3c+CgkJCTwvbWFya3VwPgoJCQk8L21hdGhtbD4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoJCQk8L2JsYWh0ZXg+Cjx8ZmltX2VuZHw+"]
["99f4d9fa2234bc064dfad05c01a1cc61f792764e-2","99f4d9fa2234bc064dfad05c01a1cc61f792764e","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCmZyb20gbHhtbCBpbXBvcnQgZXRyZWUKZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQb3BlbiwgUElQRSwgU1RET1VUCgppbXBvcnQgdW5pdHRlc3QKCmNsYXNzIE91dHB1dFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKCWRlZiBzZXRVcChzZWxmKToKCQlwcmludCgiIikKCQoJZGVmIHZhbGlkYXRlWE1MVHJlZShzZWxmLCBpbnB1dCwgZXhwZWN0ZWQpOgoJCXAgPSBQb3BlbihbJy4uL0J1aWxkL2JsYWh0ZXgnLCAnLS1tYXRobWwnLCAnLS1zcGFjaW5nJywgJ21vZGVyYXRlJ10sIHN0ZG91dD1QSVBFLCBzdGRpbj1QSVBFLCBzdGRlcnI9U1RET1VUKQoJCQoJCXAuc3RkaW4ud3JpdGUoaW5wdXQpCgkJcC5zdGRpbi5jbG9zZSgpCgkJcC53YWl0KCkKCQkKCQlwYXJzZXIgPSBldHJlZS5YTUxQYXJzZXIocmVtb3ZlX2JsYW5rX3RleHQ9VHJ1ZSkKCQkKCQlhY3R1YWwgPSBwLnN0ZG91dC5yZWFkKCkKCQkKCQlyb290Tm9kZSA9IGV0cmVlLlhNTChhY3R1YWwsIHBhcnNlcj1wYXJzZXIpCgkJZXhwZWN0ZWRSb290Tm9kZSA9IGV0cmVlLlhNTChleHBlY3RlZCwgcGFyc2VyPXBhcnNlcikKCQkKCQlvMSA9IGV0cmVlLnRvc3RyaW5nKHJvb3ROb2RlKQoJCW8yID0gZXRyZWUudG9zdHJpbmcoZXhwZWN0ZWRSb290Tm9kZSkKCQkKCQlzZWxmLmFzc2VydEVxdWFscyhvMSwgbzIpCgoKY2xhc3MgVGV4dFRlc3RzKE91dHB1dFRlc3RzKToKCWRlZiB0ZXN0UmF3VGV4dChzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93PjxtaT50PC9taT48bWk+ZTwvbWk+PG1pPnM8L21pPjxtaT50PC9taT48L21yb3c+CgkJCTwvbWFya3VwPgoJCQk8L21hdGhtbD4KCQkJPC9ibGFodGV4PgoJCSIiIgoJCQoJCXNlbGYudmFsaWRhdGVYTUxUcmVlKCJ0ZXN0Iiwgb3V0cHV0KQoJCglkZWYgdGVzdFJhd1RleHQyKHNlbGYpOgoJCW91dHB1dCA9ICIiIgoJCQk8YmxhaHRleD4KCQkJPG1hdGhtbD4KCQkJPG1hcmt1cD4KCQkJPG1yb3c+PG1pPmM8L21pPjxtaT5vPC9taT48bWk+bTwvbWk+PG1pPnA8L21pPjxtaT51PC9taT48bWk+dDwvbWk+PG1pPmU8L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPig8L21vPjxtaT5UPC9taT48bW8gc3RyZXRjaHk9ImZhbHNlIj4pPC9tbz48L21yb3c+CgkJCTwvbWFya3VwPgoJCQk8L21hdGhtbD4KCQkJPC9ibGFodGV4PgoJCSIiIgoJCQoJCXNlbGYudmFsaWRhdGVYTUxUcmVlKCJjb21wdXRlKFQpIiwgb3V0cHV0KQoKCmNsYXNzIEV4cHJlc3Npb25UZXN0cyhPdXRwdXRUZXN0cyk6CglkZWYgdGVzdEV4cHIoc2VsZik6CgkJb3V0cHV0ID0gIiIiCgkJCTxibGFodGV4PgoJCQk8bWF0aG1sPgoJCQk8bWFya3VwPgoJCQk8bXJvdz48bWk+bjwvbWk+PG1vPj08L21vPjxtbj4xPC9tbj48L21yb3c+CgkJCTwvbWFya3VwPgoJCQk8L21hdGhtbD4KCQkJPC9ibGFodGV4PgoJCSIiIgoJCQoJCXNlbGYudmFsaWRhdGVYTUxUcmVlKCJuID0gMSIsIG91dHB1dCkKCQoJZGVmIHRlc3RFeHByMihzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93PjxtaT5uPC9taT48bW8+PTwvbW8+PG1uPjE8L21uPjxtbz4sPC9tbz48bW8+LjwvbW8+PG1vPi48L21vPjxtbz4uPC9tbz48bW8+LDwvbW8+PG1pPms8L21pPjxtbz4tPC9tbz48bW4+MTwvbW4+PC9tcm93PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KCQkiIiIKCQkKCQlzZWxmLnZhbGlkYXRlWE1MVHJlZSgibiA9IDEsIC4uLiAsIGsgLSAxIiwgb3V0cHV0KQoJCglkZWYgdGVzdEV4cHIzKHNlbGYpOgoJCW91dHB1dCA9ICIiIgoJCQk8YmxhaHRleD4KCQkJPG1hdGhtbD4KCQkJPG1hcmt1cD4KCQkJPG1yb3c+PG1pPm48L21pPjxtbz4mIzg4MDA7PC9tbz48bW4+MzwvbW4+PC9tcm93PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KCQkiIiIKCQkKCQlzZWxmLnZhbGlkYXRlWE1MVHJlZSgibiBcXG5lcSAzIiwgb3V0cHV0KQoJCglkZWYgdGVzdEV4cHI0KHNlbGYpOgoJCW91dHB1dCA9ICIiIgoJCQk8YmxhaHRleD4KCQkJPG1hdGhtbD4KCQkJPG1hcmt1cD4KCQkJPG1yb3c+PG1vPiYjeDIyNjQ7PC9tbz48bWk+bTwvbWk+PC9tcm93PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KCQkiIiIKCQkKCQlzZWxmLnZhbGlkYXRlWE1MVHJlZSgiXFxsZXEgbSIsIG91dHB1dCkKCQoJZGVmIHRlc3RFeHByNShzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93PjxtaT54PC9taT48bWk+eTwvbWk+PG1vPj08L21vPjxtaT5zPC9taT48bWk+dDwvbWk+PC9tcm93PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KCQkiIiIKCQkKCQlzZWxmLnZhbGlkYXRlWE1MVHJlZSgieHkgPSBzdCIsIG91dHB1dCkKCgpjbGFzcyBFcXVhdGlvblRlc3RzKE91dHB1dFRlc3RzKToKCWRlZiB0ZXN0RXEoc2VsZik6CgkJb3V0cHV0ID0gIiIiCgkJCTxibGFodGV4PgoJCQk8bWF0aG1sPgoJCQk8bWFya3VwPgoJCQk8bXJvdz48bWk+bjwvbWk+PG1vPj08L21vPjxtc3VwPjxtbj4yPC9tbj48bXJvdz48bWk+aDwvbWk+PG1vPis8L21vPjxtbj4xPC9tbj48L21yb3c+PC9tc3VwPjxtbz4tPC9tbz48bW4+MTwvbW4+PC9tcm93PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KCQkiIiIKCQkKCQlzZWxmLnZhbGlkYXRlWE1MVHJlZSgibiA9IDJee2grMX0gLSAxIiwgb3V0cHV0KQoJCglkZWYgdGVzdEVxMihzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93PjxtaT4mI3gzYjg7PC9taT48bW8gc3RyZXRjaHk9ImZhbHNlIj4oPC9tbz48bWk+bjwvbWk+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+KTwvbW8+PG1vPj08L21vPjxtaT4mI3gzYjg7PC9taT48bW8gc3RyZXRjaHk9ImZhbHNlIj4oPC9tbz48bXN1cD48bW4+MjwvbW4+PG1yb3c+PG1pPmg8L21pPjxtbz4rPC9tbz48bW4+MTwvbW4+PC9tcm93PjwvbXN1cD48bW8+LTwvbW8+PG1uPjE8L21uPjxtbyBzdHJldGNoeT0iZmFsc2UiPik8L21vPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIlxcdGhldGEobikgPSBcXHRoZXRhKDJee2grMX0gLSAxKSIsIG91dHB1dCkKCQoJZGVmIHRlc3RFcTMoc2VsZik6CgkJb3V0cHV0ID0gIiIiCgkJCTxibGFodGV4PgoJCQk8bWF0aG1sPgoJCQk8bWFya3VwPgoJCQk8bXJvdz48bWk+UzwvbWk+PG1vPj08L21vPjxtaT5HPC9taT48bW8+LTwvbW8+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+ezwvbW8+PG1pPmU8L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPn08L21vPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIlMgPSBHIC0gXFx7IGUgXFx9Iiwgb3V0cHV0KQoJCglkZWYgdGVzdEVxNChzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93Pjxtc3ViPjxtaT4mI3gwM0JCOzwvbWk+PG1pPlM8L21pPjwvbXN1Yj48bW8+PTwvbW8+PG1uPjM8L21uPjxtaT5rPC9taT48bW8+LDwvbW8+PG1pPms8L21pPjxtbz4mI3gyMjA4OzwvbW8+PG1zdXA+PG1pIG1hdGh2YXJpYW50PSJkb3VibGUtc3RydWNrIj5aPC9taT48bW8+KzwvbW8+PC9tc3VwPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIlxcbGFtYmRhX1MgPSAzaywgayBcXGluIFxcbWF0aGJie1p9XisiLCBvdXRwdXQpCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIlxcbGFtYmRhX1MgPSAzaywgayBcXGluIFxcbWF0aGJie1p9XnsrfSIsIG91dHB1dCkKCQoJZGVmIHRlc3RFcTUoc2VsZik6CgkJb3V0cHV0ID0gIiIiCgkJCTxibGFodGV4PgoJCQk8bWF0aG1sPgoJCQk8bWFya3VwPgoJCQk8bXJvdz48bXN1Yj48bWk+JiN4MDNCQjs8L21pPjxtcm93PjxtaT5TPC9taT48bW4+MjwvbW4+PC9tcm93PjwvbXN1Yj48bW8+PTwvbW8+PG1uPjM8L21uPjxtaT5iPC9taT48L21yb3c+CgkJCTwvbWFya3VwPgoJCQk8L21hdGhtbD4KCQkJPC9ibGFodGV4PgoJCSIiIgoJCQoJCXNlbGYudmFsaWRhdGVYTUxUcmVlKCJcXGxhbWJkYV97UzJ9ID0gM2IiLCBvdXRwdXQpCgkKCWRlZiB0ZXN0RXFMb25nKHNlbGYpOgoJCW91dHB1dCA9ICIiIgoJCQk8YmxhaHRleD4KCQkJPG1hdGhtbD4KCQkJPG1hcmt1cD4KCQkJPG1yb3c+PG1uPjI8L21uPjxtbyBzdHJldGNoeT0iZmFsc2UiPig8L21vPjxtaT5rPC9taT48bW8+LTwvbW8+PG1uPjE8L21uPjxtbyBzdHJldGNoeT0iZmFsc2UiPik8L21vPjxtbz4tPC9tbz48bW4+MTwvbW4+PG1vPis8L21vPjxtbj4yPC9tbj48bW8+PTwvbW8+PG1uPjI8L21uPjxtaT5rPC9taT48bW8+LTwvbW8+PG1uPjI8L21uPjxtbz4tPC9tbz48bW4+MTwvbW4+PG1vPis8L21vPjxtbj4yPC9tbj48bW8+PTwvbW8+PG1uPjI8L21uPjxtaT5rPC9taT48bW8+LTwvbW8+PG1uPjE8L21uPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIjIoayAtIDEpIC0gMSArIDIgPSAyayAtIDIgLSAxICsgMiA9IDJrIC0gMSIsIG91dHB1dCkKCmNsYXNzIFN5bWJvbFRlc3RzKE91dHB1dFRlc3RzKToKCWRlZiB0ZXN0VGhldGEoc2VsZik6CgkJb3V0cHV0ID0gIiIiCgkJCTxibGFodGV4PgoJCQk8bWF0aG1sPgoJCQk8bWFya3VwPgoJCQk8bXJvdz48bWk+JiN4M2I4OzwvbWk+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+KDwvbW8+PG1pPm48L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPik8L21vPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIlxcdGhldGEobikiLCBvdXRwdXQpCgkKCWRlZiB0ZXN0VGhldGEyKHNlbGYpOgoJCW91dHB1dCA9ICIiIgoJCQk8YmxhaHRleD4KCQkJPG1hdGhtbD4KCQkJPG1hcmt1cD4KCQkJPG1yb3c+PG1pPiYjeDNiODs8L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPig8L21vPjxtc3VwPjxtbj4yPC9tbj48bWk+aDwvbWk+PC9tc3VwPjxtbyBzdHJldGNoeT0iZmFsc2UiPik8L21vPjwvbXJvdz4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KPHxmaW1fZW5kfD4="]
["99f4d9fa2234bc064dfad05c01a1cc61f792764e-3","99f4d9fa2234bc064dfad05c01a1cc61f792764e","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCmZyb20gbHhtbCBpbXBvcnQgZXRyZWUKZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQb3BlbiwgUElQRSwgU1RET1VUCgppbXBvcnQgdW5pdHRlc3QKCmNsYXNzIE91dHB1dFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKCWRlZiBzZXRVcChzZWxmKToKCQlwcmludCgiIikKCQoJZGVmIHZhbGlkYXRlWE1MVHJlZShzZWxmLCBpbnB1dCwgZXhwZWN0ZWQpOgoJCXAgPSBQb3BlbihbJy4uL0J1aWxkL2JsYWh0ZXgnLCAnLS1tYXRobWwnLCAnLS1zcGFjaW5nJywgJ21vZGVyYXRlJ10sIHN0ZG91dD1QSVBFLCBzdGRpbj1QSVBFLCBzdGRlcnI9U1RET1VUKQoJCQoJCXAuc3RkaW4ud3JpdGUoaW5wdXQpCgkJcC5zdGRpbi5jbG9zZSgpCgkJcC53YWl0KCkKCQkKCQlwYXJzZXIgPSBldHJlZS5YTUxQYXJzZXIocmVtb3ZlX2JsYW5rX3RleHQ9VHJ1ZSkKCQkKCQlhY3R1YWwgPSBwLnN0ZG91dC5yZWFkKCkKCQkKCQlyb290Tm9kZSA9IGV0cmVlLlhNTChhY3R1YWwsIHBhcnNlcj1wYXJzZXIpCgkJZXhwZWN0ZWRSb290Tm9kZSA9IGV0cmVlLlhNTChleHBlY3RlZCwgcGFyc2VyPXBhcnNlcikKCQkKCQlvMSA9IGV0cmVlLnRvc3RyaW5nKHJvb3ROb2RlKQoJCW8yID0gZXRyZWUudG9zdHJpbmcoZXhwZWN0ZWRSb290Tm9kZSkKCQkKCQlzZWxmLmFzc2VydEVxdWFscyhvMSwgbzIpCgoKY2xhc3MgVGV4dFRlc3RzKE91dHB1dFRlc3RzKToKCWRlZiB0ZXN0UmF3VGV4dChzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93PjxtaT50PC9taT48bWk+ZTwvbWk+PG1pPnM8L21pPjxtaT50PC9taT48L21yb3c+CgkJCTwvbWFya3VwPgoJCQk8L21hdGhtbD4KCQkJPC9ibGFodGV4PgoJCSIiIgoJCQoJCXNlbGYudmFsaWRhdGVYTUxUcmVlKCJ0ZXN0Iiwgb3V0cHV0KQoJCglkZWYgdGVzdFJhd1RleHQyKHNlbGYpOgoJCW91dHB1dCA9ICIiIgoJCQk8YmxhaHRleD4KCQkJPG1hdGhtbD4KCQkJPG1hcmt1cD4KCQkJPG1yb3c+PG1pPmM8L21pPjxtaT5vPC9taT48bWk+bTwvbWk+PG1pPnA8L21pPjxtaT51PC9taT48bWk+dDwvbWk+PG1pPmU8L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPig8L21vPjxtaT5UPC9taT48bW8gc3RyZXRjaHk9ImZhbHNlIj4pPC9tbz48L21yb3c+CgkJCTwvbWFya3VwPgoJCQk8L21hdGhtbD4KCQkJPC9ibGFodGV4PgoJCSIiIgoJCQoJCXNlbGYudmFsaWRhdGVYTUxUcmVlKCJjb21wdXRlKFQpIiwgb3V0cHV0KQoKCmNsYXNzIEV4cHJlc3Npb25UZXN0cyhPdXRwdXRUZXN0cyk6CglkZWYgdGVzdEV4cHIoc2VsZik6CgkJb3V0cHV0ID0gIiIiCgkJCTxibGFodGV4PgoJCQk8bWF0aG1sPgoJCQk8bWFya3VwPgoJCQk8bXJvdz48bWk+bjwvbWk+PG1vPj08L21vPjxtbj4xPC9tbj48L21yb3c+CgkJCTwvbWFya3VwPgoJCQk8L21hdGhtbD4KCQkJPC9ibGFodGV4PgoJCSIiIgoJCQoJCXNlbGYudmFsaWRhdGVYTUxUcmVlKCJuID0gMSIsIG91dHB1dCkKCQoJZGVmIHRlc3RFeHByMihzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93PjxtaT5uPC9taT48bW8+PTwvbW8+PG1uPjE8L21uPjxtbz4sPC9tbz48bW8+LjwvbW8+PG1vPi48L21vPjxtbz4uPC9tbz48bW8+LDwvbW8+PG1pPms8L21pPjxtbz4tPC9tbz48bW4+MTwvbW4+PC9tcm93PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KCQkiIiIKCQkKCQlzZWxmLnZhbGlkYXRlWE1MVHJlZSgibiA9IDEsIC4uLiAsIGsgLSAxIiwgb3V0cHV0KQoJCglkZWYgdGVzdEV4cHIzKHNlbGYpOgoJCW91dHB1dCA9ICIiIgoJCQk8YmxhaHRleD4KCQkJPG1hdGhtbD4KCQkJPG1hcmt1cD4KCQkJPG1yb3c+PG1pPm48L21pPjxtbz4mIzg4MDA7PC9tbz48bW4+MzwvbW4+PC9tcm93PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KCQkiIiIKCQkKCQlzZWxmLnZhbGlkYXRlWE1MVHJlZSgibiBcXG5lcSAzIiwgb3V0cHV0KQoJCglkZWYgdGVzdEV4cHI0KHNlbGYpOgoJCW91dHB1dCA9ICIiIgoJCQk8YmxhaHRleD4KCQkJPG1hdGhtbD4KCQkJPG1hcmt1cD4KCQkJPG1yb3c+PG1vPiYjeDIyNjQ7PC9tbz48bWk+bTwvbWk+PC9tcm93PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KCQkiIiIKCQkKCQlzZWxmLnZhbGlkYXRlWE1MVHJlZSgiXFxsZXEgbSIsIG91dHB1dCkKCQoJZGVmIHRlc3RFeHByNShzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93PjxtaT54PC9taT48bWk+eTwvbWk+PG1vPj08L21vPjxtaT5zPC9taT48bWk+dDwvbWk+PC9tcm93PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KCQkiIiIKCQkKCQlzZWxmLnZhbGlkYXRlWE1MVHJlZSgieHkgPSBzdCIsIG91dHB1dCkKCgpjbGFzcyBFcXVhdGlvblRlc3RzKE91dHB1dFRlc3RzKToKCWRlZiB0ZXN0RXEoc2VsZik6CgkJb3V0cHV0ID0gIiIiCgkJCTxibGFodGV4PgoJCQk8bWF0aG1sPgoJCQk8bWFya3VwPgoJCQk8bXJvdz48bWk+bjwvbWk+PG1vPj08L21vPjxtc3VwPjxtbj4yPC9tbj48bXJvdz48bWk+aDwvbWk+PG1vPis8L21vPjxtbj4xPC9tbj48L21yb3c+PC9tc3VwPjxtbz4tPC9tbz48bW4+MTwvbW4+PC9tcm93PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KCQkiIiIKCQkKCQlzZWxmLnZhbGlkYXRlWE1MVHJlZSgibiA9IDJee2grMX0gLSAxIiwgb3V0cHV0KQoJCglkZWYgdGVzdEVxMihzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93PjxtaT4mI3gzYjg7PC9taT48bW8gc3RyZXRjaHk9ImZhbHNlIj4oPC9tbz48bWk+bjwvbWk+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+KTwvbW8+PG1vPj08L21vPjxtaT4mI3gzYjg7PC9taT48bW8gc3RyZXRjaHk9ImZhbHNlIj4oPC9tbz48bXN1cD48bW4+MjwvbW4+PG1yb3c+PG1pPmg8L21pPjxtbz4rPC9tbz48bW4+MTwvbW4+PC9tcm93PjwvbXN1cD48bW8+LTwvbW8+PG1uPjE8L21uPjxtbyBzdHJldGNoeT0iZmFsc2UiPik8L21vPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIlxcdGhldGEobikgPSBcXHRoZXRhKDJee2grMX0gLSAxKSIsIG91dHB1dCkKCQoJZGVmIHRlc3RFcTMoc2VsZik6CgkJb3V0cHV0ID0gIiIiCgkJCTxibGFodGV4PgoJCQk8bWF0aG1sPgoJCQk8bWFya3VwPgoJCQk8bXJvdz48bWk+UzwvbWk+PG1vPj08L21vPjxtaT5HPC9taT48bW8+LTwvbW8+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+ezwvbW8+PG1pPmU8L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPn08L21vPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIlMgPSBHIC0gXFx7IGUgXFx9Iiwgb3V0cHV0KQoJCglkZWYgdGVzdEVxNChzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93Pjxtc3ViPjxtaT4mI3gwM0JCOzwvbWk+PG1pPlM8L21pPjwvbXN1Yj48bW8+PTwvbW8+PG1uPjM8L21uPjxtaT5rPC9taT48bW8+LDwvbW8+PG1pPms8L21pPjxtbz4mI3gyMjA4OzwvbW8+PG1zdXA+PG1pIG1hdGh2YXJpYW50PSJkb3VibGUtc3RydWNrIj5aPC9taT48bW8+KzwvbW8+PC9tc3VwPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIlxcbGFtYmRhX1MgPSAzaywgayBcXGluIFxcbWF0aGJie1p9XisiLCBvdXRwdXQpCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIlxcbGFtYmRhX1MgPSAzaywgayBcXGluIFxcbWF0aGJie1p9XnsrfSIsIG91dHB1dCkKCQoJZGVmIHRlc3RFcTUoc2VsZik6CgkJb3V0cHV0ID0gIiIiCgkJCTxibGFodGV4PgoJCQk8bWF0aG1sPgoJCQk8bWFya3VwPgoJCQk8bXJvdz48bXN1Yj48bWk+JiN4MDNCQjs8L21pPjxtcm93PjxtaT5TPC9taT48bW4+MjwvbW4+PC9tcm93PjwvbXN1Yj48bW8+PTwvbW8+PG1uPjM8L21uPjxtaT5iPC9taT48L21yb3c+CgkJCTwvbWFya3VwPgoJCQk8L21hdGhtbD4KCQkJPC9ibGFodGV4PgoJCSIiIgoJCQoJCXNlbGYudmFsaWRhdGVYTUxUcmVlKCJcXGxhbWJkYV97UzJ9ID0gM2IiLCBvdXRwdXQpCgkKCWRlZiB0ZXN0RXFMb25nKHNlbGYpOgoJCW91dHB1dCA9ICIiIgoJCQk8YmxhaHRleD4KCQkJPG1hdGhtbD4KCQkJPG1hcmt1cD4KCQkJPG1yb3c+PG1uPjI8L21uPjxtbyBzdHJldGNoeT0iZmFsc2UiPig8L21vPjxtaT5rPC9taT48bW8+LTwvbW8+PG1uPjE8L21uPjxtbyBzdHJldGNoeT0iZmFsc2UiPik8L21vPjxtbz4tPC9tbz48bW4+MTwvbW4+PG1vPis8L21vPjxtbj4yPC9tbj48bW8+PTwvbW8+PG1uPjI8L21uPjxtaT5rPC9taT48bW8+LTwvbW8+PG1uPjI8L21uPjxtbz4tPC9tbz48bW4+MTwvbW4+PG1vPis8L21vPjxtbj4yPC9tbj48bW8+PTwvbW8+PG1uPjI8L21uPjxtaT5rPC9taT48bW8+LTwvbW8+PG1uPjE8L21uPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIjIoayAtIDEpIC0gMSArIDIgPSAyayAtIDIgLSAxICsgMiA9IDJrIC0gMSIsIG91dHB1dCkKCmNsYXNzIFN5bWJvbFRlc3RzKE91dHB1dFRlc3RzKToKCWRlZiB0ZXN0VGhldGEoc2VsZik6CgkJb3V0cHV0ID0gIiIiCgkJCTxibGFodGV4PgoJCQk8bWF0aG1sPgoJCQk8bWFya3VwPgoJCQk8bXJvdz48bWk+JiN4M2I4OzwvbWk+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+KDwvbW8+PG1pPm48L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPik8L21vPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIlxcdGhldGEobikiLCBvdXRwdXQpCgkKCWRlZiB0ZXN0VGhldGEyKHNlbGYpOgoJCW91dHB1dCA9ICIiIgoJCQk8YmxhaHRleD4KCQkJPG1hdGhtbD4KCQkJPG1hcmt1cD4KCQkJPG1yb3c+PG1pPiYjeDNiODs8L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPig8L21vPjxtc3VwPjxtbj4yPC9tbj48bWk+aDwvbWk+PC9tc3VwPjxtbyBzdHJldGNoeT0iZmFsc2UiPik8L21vPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIlxcdGhldGEoMl5oKSIsIG91dHB1dCkKCQoJZGVmIHRlc3RGYWN0KHNlbGYpOgoJCW91dHB1dCA9ICIiIgoJCQk8YmxhaHRleD4KCQkJPG1hdGhtbD4KCQkJPG1hcmt1cD4KCQkJPG1yb3c+PG1uPjEwPC9tbj48bW8+ITwvbW8+PG1vPi08L21vPjxtaT5uPC9taT48bW8+PTwvbW8+PG1uPjExPC9tbj48bW8+KjwvbW8+PG1pPmI8L21pPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIjEwISAtIG4gPSAxMSpiIiwgb3V0cHV0KQoJCglkZWYgdGVzdEN1cChzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93PjxtbyBzdHJldGNoeT0iZmFsc2UiPnw8L21vPjxtaT5BPC9taT48bW8+JiN4MjIyQTs8L21vPjxtaT5CPC9taT48bW8+JiN4MjIyQTs8L21vPjxtaT5DPC9taT48bW8gc3RyZXRjaHk9ImZhbHNlIj58PC9tbz48bW8+PTwvbW8+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+fDwvbW8+PG1pPkE8L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPnw8L21vPjxtbz4rPC9tbz48bW8gc3RyZXRjaHk9ImZhbHNlIj58PC9tbz48bWk+QjwvbWk+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+fDwvbW8+PG1vPis8L21vPjxtbyBzdHJldGNoeT0iZmFsc2UiPnw8L21vPjxtaT5DPC9taT48bW8gc3RyZXRjaHk9ImZhbHNlIj58PC9tbz48bW8+LTwvbW8+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+fDwvbW8+PG1pPkE8L21pPjxtbz4mI3gyMjI5OzwvbW8+PG1pPkI8L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPnw8L21vPjxtbz4tPC9tbz48bW8gc3RyZXRjaHk9ImZhbHNlIj58PC9tbz48bWk+QjwvbWk+PG1vPiYjeDIyMjk7PC9tbz48bWk+QzwvbWk+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+fDwvbW8+PG1vPi08L21vPjxtbyBzdHJldGNoeT0iZmFsc2UiPnw8L21vPjxtaT5BPC9taT48bW8+JiN4MjIyOTs8L21vPjxtaT5DPC9taT48bW8gc3RyZXRjaHk9ImZhbHNlIj58PC9tbz48bW8+KzwvbW8+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+fDwvbW8+PG1pPkE8L21pPjxtbz4mI3gyMjI5OzwvbW8+PG1pPkI8L21pPjxtbz4mI3gyMjI5OzwvbW8+PG1pPkM8L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPnw8L21vPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoInwgQSBcY3VwIEIgXGN1cCBDIHwgPSB8IEEgfCArIHwgQiB8ICsgfCBDIHwgLSB8IEEgXGNhcCBCIHwgLSB8IEIgXGNhcCBDIHwgLSB8IEEgXGNhcCBDIHwgKyB8IEEgXGNhcCBCIFxjYXAgQyB8Iiwgb3V0cHV0KQoKCmNsYXNzIFZhcmlhYmxlVGVzdHMoT3V0cHV0VGVzdHMpOgoJZGVmIHRlc3RWYXJpYWJsZXMoc2VsZik6CgkJb3V0cHV0ID0gIiIiCgkJCTxibGFodGV4PgoJCQk8bWF0aG1sPgoJCQk8bWFya3VwPgoJCQk8bXJvdz48bWk+eDwvbWk+PG1vPiw8L21vPjxtaT55PC9taT48bW8+LDwvbW8+PG1pPnM8L21pPjxtbz4sPC9tbz48bWk+dDwvbWk+PG1vPiw8L21vPjxtaT5tPC9taT48bW8+LDwvbW8+PG1pPm48L21pPjxtbz4mI3gyMjA4OzwvbW8+PG1pIG1hdGh2YXJpYW50PSJkb3VibGUtc3RydWNrIj5SPC9taT48L21yb3c+CgkJCTwvbWFya3VwPgoJCQk8L21hdGhtbD4KCQkJPC9ibGFodGV4PgoJCSIiIgoJCQoJCXNlbGYudmFsaWRhdGVYTUxUcmVlKCJ4LCB5LCBzLCB0LCBtLCBuIFxcaW4gXFxtYXRoYmJ7Un0iLCBvdXRwdXQpCgkKCWRlZiB0ZXN0VmFyaWFibGVzMihzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93PjxtaT5mPC9taT48bW8+OjwvbW8+PG1pIG1hdGh2YXJpYW50PSJkb3VibGUtc3RydWNrIj5OPC9taT48bW8+JiN4MjE5Mjs8L21vPjxtaSBtYXRodmFyaWFudD0iZG91YmxlLXN0cnVjayI+TjwvbWk+PC9tcm93PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KCQkiIiIKCQkKCQlzZWxmLnZhbGlkYXRlWE1MVHJlZSgiZiA6IFxcbWF0aGJie059IFxccmlnaHRhcnJvdyBcXG1hdGhiYntOfSIsIG91dHB1dCkKCQkKCWRlZiB0ZXN0VmFyaWFibGVzMyhzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93PjxtaT5nPC9taT48bW8+OjwvbW8+PG1zdXA+PG1pIG1hdGh2YXJpYW50PSJkb3VibGUtc3RydWNrIj5OPC9taT48bW4+MjwvbW4+PC9tc3VwPjxtbz4mI3gyMTkyOzwvbW8+PG1pIG1hdGh2YXJpYW50PSJkb3VibGUtc3RydWNrIj5aPC9taT48L21yb3c+CgkJCTwvbWFya3VwPgoJCQk8L21hdGhtbD4KCQkJPC9ibGFodGV4PgoJCSIiIgoJCQoJCXNlbGYudmFsaWRhdGVYTUxUcmVlKCJnIDogXFxtYXRoYmJ7Tn1eMiBcXHJpZ2h0YXJyb3cgXFxtYXRoYmJ7Wn0iLCBvdXRwdXQpCgpjbGFzcyBGdW5jdGlvblRlc3RzKE91dHB1dFRlc3RzKToKCWRlZiB0ZXN0RnVuY3Rpb24oc2VsZik6CgkJb3V0cHV0ID0gIiIiCgkJCTxibGFodGV4PgoJCQk8bWF0aG1sPgoJCQk8bWFya3VwPgoJCQk8bXJvdz48bWk+ZzwvbWk+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+KDwvbW8+PG1pPm08L21pPjxtbz4sPC9tbz48bWk+bjwvbWk+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+KTwvbW8+PG1vPj08L21vPjxtbyBzdHJldGNoeT0iZmFsc2UiPig8L21vPjxtbj4yPC9tbj48bW8+LTwvbW8+PG1pPm48L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPik8L21vPjxtaT5mPC9taT48bW8gc3RyZXRjaHk9ImZhbHNlIj4oPC9tbz48bWk+bTwvbWk+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+KTwvbW8+PC9tcm93PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KCQkiIiIKCQkKCQlzZWxmLnZhbGlkYXRlWE1MVHJlZSgiZyhtLG4pID0gKDIgLSBuKSBmKG0pIiwgb3V0cHV0KQoKY2xhc3MgU2NyaXB0VGVzdHMoT3V0cHV0VGVzdHMpOgoJZGVmIHRlc3RTdWJzY3JpcHQoc2VsZik6CgkJb3V0cHV0ID0gIiIiCjx8ZmltX2hvbGV8PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KCQkiIiIKCQkKCQlzZWxmLnZhbGlkYXRlWE1MVHJlZSgiV18zIiwgb3V0cHV0KQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKCXVuaXR0ZXN0Lm1haW4oKQoKPHxmaW1fc3VmZml4fD4KCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtc3ViPjxtaT5XPC9taT48bW4+MzwvbW4+PC9tc3ViPgo8fGZpbV9lbmR8Pg=="]
["99f4d9fa2234bc064dfad05c01a1cc61f792764e-4","99f4d9fa2234bc064dfad05c01a1cc61f792764e","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCmZyb20gbHhtbCBpbXBvcnQgZXRyZWUKZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQb3BlbiwgUElQRSwgU1RET1VUCgppbXBvcnQgdW5pdHRlc3QKCmNsYXNzIE91dHB1dFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKCWRlZiBzZXRVcChzZWxmKToKCQlwcmludCgiIikKCQoJZGVmIHZhbGlkYXRlWE1MVHJlZShzZWxmLCBpbnB1dCwgZXhwZWN0ZWQpOgoJCXAgPSBQb3BlbihbJy4uL0J1aWxkL2JsYWh0ZXgnLCAnLS1tYXRobWwnLCAnLS1zcGFjaW5nJywgJ21vZGVyYXRlJ10sIHN0ZG91dD1QSVBFLCBzdGRpbj1QSVBFLCBzdGRlcnI9U1RET1VUKQoJCQoJCXAuc3RkaW4ud3JpdGUoaW5wdXQpCgkJcC5zdGRpbi5jbG9zZSgpCgkJcC53YWl0KCkKCQkKCQlwYXJzZXIgPSBldHJlZS5YTUxQYXJzZXIocmVtb3ZlX2JsYW5rX3RleHQ9VHJ1ZSkKCQkKCQlhY3R1YWwgPSBwLnN0ZG91dC5yZWFkKCkKCQkKCQlyb290Tm9kZSA9IGV0cmVlLlhNTChhY3R1YWwsIHBhcnNlcj1wYXJzZXIpCgkJZXhwZWN0ZWRSb290Tm9kZSA9IGV0cmVlLlhNTChleHBlY3RlZCwgcGFyc2VyPXBhcnNlcikKCQkKCQlvMSA9IGV0cmVlLnRvc3RyaW5nKHJvb3ROb2RlKQoJCW8yID0gZXRyZWUudG9zdHJpbmcoZXhwZWN0ZWRSb290Tm9kZSkKCQkKCQlzZWxmLmFzc2VydEVxdWFscyhvMSwgbzIpCgoKY2xhc3MgVGV4dFRlc3RzKE91dHB1dFRlc3RzKToKCWRlZiB0ZXN0UmF3VGV4dChzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93PjxtaT50PC9taT48bWk+ZTwvbWk+PG1pPnM8L21pPjxtaT50PC9taT48L21yb3c+CgkJCTwvbWFya3VwPgoJCQk8L21hdGhtbD4KCQkJPC9ibGFodGV4PgoJCSIiIgoJCQoJCXNlbGYudmFsaWRhdGVYTUxUcmVlKCJ0ZXN0Iiwgb3V0cHV0KQoJCglkZWYgdGVzdFJhd1RleHQyKHNlbGYpOgoJCW91dHB1dCA9ICIiIgoJCQk8YmxhaHRleD4KCQkJPG1hdGhtbD4KCQkJPG1hcmt1cD4KCQkJPG1yb3c+PG1pPmM8L21pPjxtaT5vPC9taT48bWk+bTwvbWk+PG1pPnA8L21pPjxtaT51PC9taT48bWk+dDwvbWk+PG1pPmU8L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPig8L21vPjxtaT5UPC9taT48bW8gc3RyZXRjaHk9ImZhbHNlIj4pPC9tbz48L21yb3c+CgkJCTwvbWFya3VwPgoJCQk8L21hdGhtbD4KCQkJPC9ibGFodGV4PgoJCSIiIgoJCQoJCXNlbGYudmFsaWRhdGVYTUxUcmVlKCJjb21wdXRlKFQpIiwgb3V0cHV0KQoKCmNsYXNzIEV4cHJlc3Npb25UZXN0cyhPdXRwdXRUZXN0cyk6CglkZWYgdGVzdEV4cHIoc2VsZik6CgkJb3V0cHV0ID0gIiIiCgkJCTxibGFodGV4PgoJCQk8bWF0aG1sPgoJCQk8bWFya3VwPgoJCQk8bXJvdz48bWk+bjwvbWk+PG1vPj08L21vPjxtbj4xPC9tbj48L21yb3c+CgkJCTwvbWFya3VwPgoJCQk8L21hdGhtbD4KCQkJPC9ibGFodGV4PgoJCSIiIgoJCQoJCXNlbGYudmFsaWRhdGVYTUxUcmVlKCJuID0gMSIsIG91dHB1dCkKCQoJZGVmIHRlc3RFeHByMihzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93PjxtaT5uPC9taT48bW8+PTwvbW8+PG1uPjE8L21uPjxtbz4sPC9tbz48bW8+LjwvbW8+PG1vPi48L21vPjxtbz4uPC9tbz48bW8+LDwvbW8+PG1pPms8L21pPjxtbz4tPC9tbz48bW4+MTwvbW4+PC9tcm93PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KCQkiIiIKCQkKCQlzZWxmLnZhbGlkYXRlWE1MVHJlZSgibiA9IDEsIC4uLiAsIGsgLSAxIiwgb3V0cHV0KQoJCglkZWYgdGVzdEV4cHIzKHNlbGYpOgoJCW91dHB1dCA9ICIiIgoJCQk8YmxhaHRleD4KCQkJPG1hdGhtbD4KCQkJPG1hcmt1cD4KCQkJPG1yb3c+PG1pPm48L21pPjxtbz4mIzg4MDA7PC9tbz48bW4+MzwvbW4+PC9tcm93PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KCQkiIiIKCQkKCQlzZWxmLnZhbGlkYXRlWE1MVHJlZSgibiBcXG5lcSAzIiwgb3V0cHV0KQoJCglkZWYgdGVzdEV4cHI0KHNlbGYpOgoJCW91dHB1dCA9ICIiIgoJCQk8YmxhaHRleD4KCQkJPG1hdGhtbD4KCQkJPG1hcmt1cD4KCQkJPG1yb3c+PG1vPiYjeDIyNjQ7PC9tbz48bWk+bTwvbWk+PC9tcm93PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KCQkiIiIKCQkKCQlzZWxmLnZhbGlkYXRlWE1MVHJlZSgiXFxsZXEgbSIsIG91dHB1dCkKCQoJZGVmIHRlc3RFeHByNShzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93PjxtaT54PC9taT48bWk+eTwvbWk+PG1vPj08L21vPjxtaT5zPC9taT48bWk+dDwvbWk+PC9tcm93PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KCQkiIiIKCQkKCQlzZWxmLnZhbGlkYXRlWE1MVHJlZSgieHkgPSBzdCIsIG91dHB1dCkKCgpjbGFzcyBFcXVhdGlvblRlc3RzKE91dHB1dFRlc3RzKToKCWRlZiB0ZXN0RXEoc2VsZik6CgkJb3V0cHV0ID0gIiIiCgkJCTxibGFodGV4PgoJCQk8bWF0aG1sPgoJCQk8bWFya3VwPgoJCQk8bXJvdz48bWk+bjwvbWk+PG1vPj08L21vPjxtc3VwPjxtbj4yPC9tbj48bXJvdz48bWk+aDwvbWk+PG1vPis8L21vPjxtbj4xPC9tbj48L21yb3c+PC9tc3VwPjxtbz4tPC9tbz48bW4+MTwvbW4+PC9tcm93PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KCQkiIiIKCQkKCQlzZWxmLnZhbGlkYXRlWE1MVHJlZSgibiA9IDJee2grMX0gLSAxIiwgb3V0cHV0KQoJCglkZWYgdGVzdEVxMihzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93PjxtaT4mI3gzYjg7PC9taT48bW8gc3RyZXRjaHk9ImZhbHNlIj4oPC9tbz48bWk+bjwvbWk+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+KTwvbW8+PG1vPj08L21vPjxtaT4mI3gzYjg7PC9taT48bW8gc3RyZXRjaHk9ImZhbHNlIj4oPC9tbz48bXN1cD48bW4+MjwvbW4+PG1yb3c+PG1pPmg8L21pPjxtbz4rPC9tbz48bW4+MTwvbW4+PC9tcm93PjwvbXN1cD48bW8+LTwvbW8+PG1uPjE8L21uPjxtbyBzdHJldGNoeT0iZmFsc2UiPik8L21vPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIlxcdGhldGEobikgPSBcXHRoZXRhKDJee2grMX0gLSAxKSIsIG91dHB1dCkKCQoJZGVmIHRlc3RFcTMoc2VsZik6CgkJb3V0cHV0ID0gIiIiCgkJCTxibGFodGV4PgoJCQk8bWF0aG1sPgoJCQk8bWFya3VwPgoJCQk8bXJvdz48bWk+UzwvbWk+PG1vPj08L21vPjxtaT5HPC9taT48bW8+LTwvbW8+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+ezwvbW8+PG1pPmU8L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPn08L21vPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIlMgPSBHIC0gXFx7IGUgXFx9Iiwgb3V0cHV0KQoJCglkZWYgdGVzdEVxNChzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93Pjxtc3ViPjxtaT4mI3gwM0JCOzwvbWk+PG1pPlM8L21pPjwvbXN1Yj48bW8+PTwvbW8+PG1uPjM8L21uPjxtaT5rPC9taT48bW8+LDwvbW8+PG1pPms8L21pPjxtbz4mI3gyMjA4OzwvbW8+PG1zdXA+PG1pIG1hdGh2YXJpYW50PSJkb3VibGUtc3RydWNrIj5aPC9taT48bW8+KzwvbW8+PC9tc3VwPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIlxcbGFtYmRhX1MgPSAzaywgayBcXGluIFxcbWF0aGJie1p9XisiLCBvdXRwdXQpCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIlxcbGFtYmRhX1MgPSAzaywgayBcXGluIFxcbWF0aGJie1p9XnsrfSIsIG91dHB1dCkKCQoJZGVmIHRlc3RFcTUoc2VsZik6CgkJb3V0cHV0ID0gIiIiCgkJCTxibGFodGV4PgoJCQk8bWF0aG1sPgoJCQk8bWFya3VwPgoJCQk8bXJvdz48bXN1Yj48bWk+JiN4MDNCQjs8L21pPjxtcm93PjxtaT5TPC9taT48bW4+MjwvbW4+PC9tcm93PjwvbXN1Yj48bW8+PTwvbW8+PG1uPjM8L21uPjxtaT5iPC9taT48L21yb3c+CgkJCTwvbWFya3VwPgoJCQk8L21hdGhtbD4KCQkJPC9ibGFodGV4PgoJCSIiIgoJCQoJCXNlbGYudmFsaWRhdGVYTUxUcmVlKCJcXGxhbWJkYV97UzJ9ID0gM2IiLCBvdXRwdXQpCgkKCWRlZiB0ZXN0RXFMb25nKHNlbGYpOgoJCW91dHB1dCA9ICIiIgoJCQk8YmxhaHRleD4KCQkJPG1hdGhtbD4KCQkJPG1hcmt1cD4KCQkJPG1yb3c+PG1uPjI8L21uPjxtbyBzdHJldGNoeT0iZmFsc2UiPig8L21vPjxtaT5rPC9taT48bW8+LTwvbW8+PG1uPjE8L21uPjxtbyBzdHJldGNoeT0iZmFsc2UiPik8L21vPjxtbz4tPC9tbz48bW4+MTwvbW4+PG1vPis8L21vPjxtbj4yPC9tbj48bW8+PTwvbW8+PG1uPjI8L21uPjxtaT5rPC9taT48bW8+LTwvbW8+PG1uPjI8L21uPjxtbz4tPC9tbz48bW4+MTwvbW4+PG1vPis8L21vPjxtbj4yPC9tbj48bW8+PTwvbW8+PG1uPjI8L21uPjxtaT5rPC9taT48bW8+LTwvbW8+PG1uPjE8L21uPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIjIoayAtIDEpIC0gMSArIDIgPSAyayAtIDIgLSAxICsgMiA9IDJrIC0gMSIsIG91dHB1dCkKCmNsYXNzIFN5bWJvbFRlc3RzKE91dHB1dFRlc3RzKToKCWRlZiB0ZXN0VGhldGEoc2VsZik6CgkJb3V0cHV0ID0gIiIiCgkJCTxibGFodGV4PgoJCQk8bWF0aG1sPgoJCQk8bWFya3VwPgoJCQk8bXJvdz48bWk+JiN4M2I4OzwvbWk+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+KDwvbW8+PG1pPm48L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPik8L21vPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIlxcdGhldGEobikiLCBvdXRwdXQpCgkKCWRlZiB0ZXN0VGhldGEyKHNlbGYpOgoJCW91dHB1dCA9ICIiIgoJCQk8YmxhaHRleD4KCQkJPG1hdGhtbD4KCQkJPG1hcmt1cD4KCQkJPG1yb3c+PG1pPiYjeDNiODs8L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPig8L21vPjxtc3VwPjxtbj4yPC9tbj48bWk+aDwvbWk+PC9tc3VwPjxtbyBzdHJldGNoeT0iZmFsc2UiPik8L21vPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIlxcdGhldGEoMl5oKSIsIG91dHB1dCkKCQoJZGVmIHRlc3RGYWN0KHNlbGYpOgoJCW91dHB1dCA9ICIiIgoJCQk8YmxhaHRleD4KCQkJPG1hdGhtbD4KCQkJPG1hcmt1cD4KCQkJPG1yb3c+PG1uPjEwPC9tbj48bW8+ITwvbW8+PG1vPi08L21vPjxtaT5uPC9taT48bW8+PTwvbW8+PG1uPjExPC9tbj48bW8+KjwvbW8+PG1pPmI8L21pPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoIjEwISAtIG4gPSAxMSpiIiwgb3V0cHV0KQoJCglkZWYgdGVzdEN1cChzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93PjxtbyBzdHJldGNoeT0iZmFsc2UiPnw8L21vPjxtaT5BPC9taT48bW8+JiN4MjIyQTs8L21vPjxtaT5CPC9taT48bW8+JiN4MjIyQTs8L21vPjxtaT5DPC9taT48bW8gc3RyZXRjaHk9ImZhbHNlIj58PC9tbz48bW8+PTwvbW8+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+fDwvbW8+PG1pPkE8L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPnw8L21vPjxtbz4rPC9tbz48bW8gc3RyZXRjaHk9ImZhbHNlIj58PC9tbz48bWk+QjwvbWk+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+fDwvbW8+PG1vPis8L21vPjxtbyBzdHJldGNoeT0iZmFsc2UiPnw8L21vPjxtaT5DPC9taT48bW8gc3RyZXRjaHk9ImZhbHNlIj58PC9tbz48bW8+LTwvbW8+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+fDwvbW8+PG1pPkE8L21pPjxtbz4mI3gyMjI5OzwvbW8+PG1pPkI8L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPnw8L21vPjxtbz4tPC9tbz48bW8gc3RyZXRjaHk9ImZhbHNlIj58PC9tbz48bWk+QjwvbWk+PG1vPiYjeDIyMjk7PC9tbz48bWk+QzwvbWk+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+fDwvbW8+PG1vPi08L21vPjxtbyBzdHJldGNoeT0iZmFsc2UiPnw8L21vPjxtaT5BPC9taT48bW8+JiN4MjIyOTs8L21vPjxtaT5DPC9taT48bW8gc3RyZXRjaHk9ImZhbHNlIj58PC9tbz48bW8+KzwvbW8+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+fDwvbW8+PG1pPkE8L21pPjxtbz4mI3gyMjI5OzwvbW8+PG1pPkI8L21pPjxtbz4mI3gyMjI5OzwvbW8+PG1pPkM8L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPnw8L21vPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoInwgQSBcY3VwIEIgXGN1cCBDIHwgPSB8IEEgfCArIHwgQiB8ICsgfCBDIHwgLSB8IEEgXGNhcCBCIHwgLSB8IEIgXGNhcCBDIHwgLSB8IEEgXGNhcCBDIHwgKyB8IEEgXGNhcCBCIFxjYXAgQyB8Iiwgb3V0cHV0KQoKCmNsYXNzIFZhcmlhYmxlVGVzdHMoT3V0cHV0VGVzdHMpOgoJZGVmIHRlc3RWYXJpYWJsZXMoc2VsZik6CgkJb3V0cHV0ID0gIiIiCgkJCTxibGFodGV4PgoJCQk8bWF0aG1sPgoJCQk8bWFya3VwPgoJCQk8bXJvdz48bWk+eDwvbWk+PG1vPiw8L21vPjxtaT55PC9taT48bW8+LDwvbW8+PG1pPnM8L21pPjxtbz4sPC9tbz48bWk+dDwvbWk+PG1vPiw8L21vPjxtaT5tPC9taT48bW8+LDwvbW8+PG1pPm48L21pPjxtbz4mI3gyMjA4OzwvbW8+PG1pIG1hdGh2YXJpYW50PSJkb3VibGUtc3RydWNrIj5SPC9taT48L21yb3c+CgkJCTwvbWFya3VwPgoJCQk8L21hdGhtbD4KCQkJPC9ibGFodGV4PgoJCSIiIgoJCQoJCXNlbGYudmFsaWRhdGVYTUxUcmVlKCJ4LCB5LCBzLCB0LCBtLCBuIFxcaW4gXFxtYXRoYmJ7Un0iLCBvdXRwdXQpCgkKCWRlZiB0ZXN0VmFyaWFibGVzMihzZWxmKToKCQlvdXRwdXQgPSAiIiIKCQkJPGJsYWh0ZXg+CgkJCTxtYXRobWw+CgkJCTxtYXJrdXA+CgkJCTxtcm93PjxtaT5mPC9taT48bW8+OjwvbW8+PG1pIG1hdGh2YXJpYW50PSJkb3VibGUtc3RydWNrIj5OPC9taT48bW8+JiN4MjE5Mjs8L21vPjxtaSBtYXRodmFyaWFudD0iZG91YmxlLXN0cnVjayI+TjwvbWk+PC9tcm93PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KCQkiIiIKPHxmaW1faG9sZXw+CglkZWYgdGVzdFZhcmlhYmxlczMoc2VsZik6CgkJb3V0cHV0ID0gIiIiCgkJCTxibGFodGV4PgoJCQk8bWF0aG1sPgoJCQk8bWFya3VwPgoJCQk8bXJvdz48bWk+ZzwvbWk+PG1vPjo8L21vPjxtc3VwPjxtaSBtYXRodmFyaWFudD0iZG91YmxlLXN0cnVjayI+TjwvbWk+PG1uPjI8L21uPjwvbXN1cD48bW8+JiN4MjE5Mjs8L21vPjxtaSBtYXRodmFyaWFudD0iZG91YmxlLXN0cnVjayI+WjwvbWk+PC9tcm93PgoJCQk8L21hcmt1cD4KCQkJPC9tYXRobWw+CgkJCTwvYmxhaHRleD4KCQkiIiIKCQkKCQlzZWxmLnZhbGlkYXRlWE1MVHJlZSgiZyA6IFxcbWF0aGJie059XjIgXFxyaWdodGFycm93IFxcbWF0aGJie1p9Iiwgb3V0cHV0KQoKY2xhc3MgRnVuY3Rpb25UZXN0cyhPdXRwdXRUZXN0cyk6CglkZWYgdGVzdEZ1bmN0aW9uKHNlbGYpOgoJCW91dHB1dCA9ICIiIgoJCQk8YmxhaHRleD4KCQkJPG1hdGhtbD4KCQkJPG1hcmt1cD4KCQkJPG1yb3c+PG1pPmc8L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPig8L21vPjxtaT5tPC9taT48bW8+LDwvbW8+PG1pPm48L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPik8L21vPjxtbz49PC9tbz48bW8gc3RyZXRjaHk9ImZhbHNlIj4oPC9tbz48bW4+MjwvbW4+PG1vPi08L21vPjxtaT5uPC9taT48bW8gc3RyZXRjaHk9ImZhbHNlIj4pPC9tbz48bWk+ZjwvbWk+PG1vIHN0cmV0Y2h5PSJmYWxzZSI+KDwvbW8+PG1pPm08L21pPjxtbyBzdHJldGNoeT0iZmFsc2UiPik8L21vPjwvbXJvdz4KCQkJPC9tYXJrdXA+CgkJCTwvbWF0aG1sPgoJCQk8L2JsYWh0ZXg+CgkJIiIiCgkJCgkJc2VsZi52YWxpZGF0ZVhNTFRyZWUoImcobSxuKSA9ICgyIC0gbikgZihtKSIsIG91dHB1dCkKCmNsYXNzIFNjcmlwdFRlc3RzKE91dHB1dFRlc3RzKToKCWRlZiB0ZXN0U3Vic2NyaXB0KHNlbGYpOgoJCW91dHB1dCA9ICIiIgoJCQk8YmxhaHRleD4KCQkJPG1hdGhtbD4KCQkJPG1hcmt1cD4KCQkJPG1zdWI+PG1pPlc8L21pPjxtbj4zPC9tbj48L21zdWI+CgkJCTwvbWFya3VwPgoJCQk8L21hdGhtbD4KCQkJPC9ibGFodGV4PgoJCSIiIgoJCQoJCXNlbGYudmFsaWRhdGVYTUxUcmVlKCJXXzMiLCBvdXRwdXQpCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgoJdW5pdHRlc3QubWFpbigpCgo8fGZpbV9zdWZmaXh8PgoJCQoJCXNlbGYudmFsaWRhdGVYTUxUcmVlKCJmIDogXFxtYXRoYmJ7Tn0gXFxyaWdodGFycm93IFxcbWF0aGJie059Iiwgb3V0cHV0KQoJCQo8fGZpbV9lbmR8Pg=="]
["ec547510ca1b32b3eac434532fbcac7e52b2dc08-1","ec547510ca1b32b3eac434532fbcac7e52b2dc08","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojCiMgbW9kdWxlIGZvciBkb2luZyBkZW5zaXR5IHJlbGF0aW5nIHRoaW5ncwojIGFkYXB0ZWQgZnJvbSBDREZUT09MUy9lb3M6CiMgICEhPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojICAhISAgICAgICAgICAgICAgICAgICAgICoqKiAgTU9EVUxFICBlb3MgICoqKgojICAhISBBbGwgcm91dGluZXMgZGVhbGluZyB3aXRoIHRoZSBFcXVhdGlvbiBPZiBTdGF0ZSBvZiBzZWEgd2F0ZXIKIyAgISE9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyAgISEgSGlzdG9yeSA6IDIuMSAgISAgMjAwNCAgIDogSi5NLiBNb2xpbmVzIDogT3JpZ2luYWwgY29kZSBwb3J0ZWQKIyAgISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBORU1PCiMgICEhICAgICAgICAgICAzLjAgICAgMTIvMjAxMCA6IEouTS4gTW9saW5lcyA6IERvY3RvciBub3JtICsgTGljLgojICAhISAgICAgICAgICAgNC4wICA6IDAzLzIwMTcgOiBKLk0uIE1vbGluZXMKIyAgISEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgICEhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojICAhISAgIHJvdXRpbmVzICAgICAgOiBkZXNjcmlwdGlvbgojICAhISAgIHNpZ21hMCAgICAgOiBjb21wdXRlIHNpZ21hLTAgCiMgICEhICAgZW9zYm4yICAgICA6IGNvbXB1dGUgQnJ1bnQgVmFpc3NhbGEgRnJlcXVlbmN5CiMgICEhICAgc2lnbWFpICAgICA6IGNvbXB1dGUgc2lnbWEtaSAoIHJlZmVyZWQgdG8gYSBkZXB0aCBnaXZlbiBpbiBhcmd1bWVudAojICAhISAgIGFsYmV0ICAgICAgOiBDb21wdXRlIHRoZSByYXRpbyBhbHBoYS9iZXRhICggVGhlcm1hbC9oYWxpbmUgZXhhcG5zaW9uKQojICAhISAgIGJldGEgICAgICAgOiBjb21wdXRlIGJldGEgKGhhbGluZSBleHBlbnNpb24pCiMgICEhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKZnJvbSBudW1iYSBpbXBvcnQgaml0CmZyb20gbnVtcHkgaW1wb3J0IHplcm9zLCBzcXJ0LCBhYnMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgICAgISEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyAgICAhISAgICAgICAgICAgICAgICAgICoqKiAgRlVOQ1RJT04gc2lnbWEwICAqKioKIyAgICAhIQojICAgICEhICoqIFB1cnBvc2UgOiBDb21wdXRlIHRoZSBpbiBzaXR1IGRlbnNpdHkgKHJhdGlvIHJoby9yYXUwKSBhbmQgdGhlCiMgICAgISEgICAgICAgICAgICAgIHBvdGVudGlhbCB2b2x1bWljIG1hc3MgKEtnL20zKSBmcm9tIHBvdGVudGlhbCB0ZW1wZXJhdHVyZSAKIyAgICAhISAgICAgICAgICAgICAgYW5kIHNhbGluaXR5IGZpZWxkcyB1c2luZyBhbiBlcXVhdGlvbiBvZiBzdGF0ZSBkZWZpbmVkIAojICAgICEhICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBuYW1lbGlzdCBwYXJhbWV0ZXIgbmVvcy4KIyAgICAhIQojICAgICEhICoqIE1ldGhvZCAgOiBKYWNrZXR0IGFuZCBNY0RvdWdhbGwgKDE5OTQpIGVxdWF0aW9uIG9mIHN0YXRlLgojICAgICEhICAgICAgICAgICAgICBUaGUgaW4gc2l0dSBkZW5zaXR5IGlzIGNvbXB1dGVkIGRpcmVjdGx5IGFzIGEgZnVuY3Rpb24gb2YKIyAgICAhISAgICAgICAgICAgICAgcG90ZW50aWFsIHRlbXBlcmF0dXJlIHJlbGF0aXZlIHRvIHRoZSBzdXJmYWNlICh0aGUgb3BhIHQKIyAgICAhISAgICAgICAgICAgICAgdmFyaWFibGUpLCBzYWx0IGFuZCBwcmVzc3VyZSAoYXNzdW1pbmcgbm8gcHJlc3N1cmUgdmFyaWF0aW9uCiMgICAgISEgICAgICAgICAgICAgIGFsb25nIGdlb3BvdGVudGlhbCBzdXJmYWNlcywgaS5lLiB0aGUgcHJlc3N1cmUgcCBpbiBkZWNpYmFycwojICAgICEhICAgICAgICAgICAgICBpcyBhcHByb3hpbWF0ZWQgYnkgdGhlIGRlcHRoIGluIG1ldGVycy4KIyAgICAhISAgICAgICAgICAgICAgcHJkKHQscyxwKSA9ICggcmhvKHQscyxwKSAtIHJhdTAgKSAvIHJhdTAKIyAgICAhISAgICAgICAgICAgICAgcmhvcCh0LHMpICA9IHJobyh0LHMsMCkKIyAgICAhISAgICAgICAgICAgICAgd2l0aCBwcmVzc3VyZSAgICAgICAgICAgICAgICAgICAgICBwICAgICAgICBkZWNpYmFycwojICAgICEhICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbCB0ZW1wZXJhdHVyZSAgICAgICAgIHQgICAgICAgIGRlZyBjZWxzaXVzCiMgICAgISEgICAgICAgICAgICAgICAgICAgc2FsaW5pdHkgICAgICAgICAgICAgICAgICAgICAgcyAgICAgICAgcHN1CiMgICAgISEgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlIHZvbHVtaWMgbWFzcyAgICAgICAgcmF1MCAgICAga2cvbSoqMwojICAgICEhICAgICAgICAgICAgICAgICAgIGluIHNpdHUgdm9sdW1pYyBtYXNzICAgICAgICAgIHJobyAgICAgIGtnL20qKjMKIyAgICAhISAgICAgICAgICAgICAgICAgICBpbiBzaXR1IGRlbnNpdHkgYW5vbWFsaWUgICAgICBwcmQgICAgICBubyB1bml0cwojICAgICEhCiMgICAgISEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRlZiBzaWdtYTAocHRlbSwgcHNhbCk6CiAgIiIiCiAgQ29tcHV0ZSB0aGUgaW4gc2l0dSBkZW5zaXR5IChyYXRpbyByaG8vcmF1MCkgYW5kIHRoZSBwb3RlbnRpYWwgdm9sdW1pYyBtYXNzCiAgKEtnL20zKSBmcm9tIHBvdGVudGlhbCB0ZW1wZXJhdHVyZSBhbmQgc2FsaW5pdHkgZmllbGRzIHVzaW5nIGFuIGVxdWF0aW9uIG9mCiAgc3RhdGUgZGVmaW5lZCB0aHJvdWdoIHRoZSBuYW1lbGlzdCBwYXJhbWV0ZXIgbmVvcy4KICAKICBKTTogY2hhbmdlZCBpbnB1dCBzbyB0aGF0IGFycmF5IHNpemVzIGJ5IGRlZmF1bHQgbWF0Y2ggdGhlIGlucHV0IGFycmF5IHNpemVzCiAgCiAgSW5wdXRzOgogICAgcHRlbSAgICAgICA9IHBvdGVudGlhbCB0ZW1wZXJhdHVyZSAgICAgICAgIHQgICAgICAgIGRlZyBjZWxzaXVzCiAgICBwc2FsICAgICAgID0gc2FsaW5pdHkgICAgICAgICAgICAgICAgICAgICAgcyAgICAgICAgcHN1CiAgICAKICBSZXR1cm5zOgogICAgc2lnbWEwX291dCA9IGluIHNpdHUgZGVuc2l0eSB1c2luZyBKYWNrZXR0IGFuZCBNY0RvdWdhbGwgKDE5OTQpIGVxdWF0aW9uIG9mIHN0YXRlCiAgICAKICAiIiIKICB6cmF1MCA9IDEwMDAuMAoKICAjIGNvbXB1dGUgdm9sdW1pYyBtYXNzIHB1cmUgd2F0ZXIgYXQgYXRtIHByZXNzdXJlCiAgenIxID0gKCAoICggKCAoIDYuNTM2MzMyZS05ICogcHRlbSAtIDEuMTIwMDgzZS02ICkgKiBwdGVtICsgMS4wMDE2ODVlLTQpICogcHRlbSAgIAogICAgICAgLTkuMDk1MjkwZS0zICkgKiBwdGVtICsgNi43OTM5NTJlLTIgKSAqIHB0ZW0gKyA5OTkuODQyNTk0CiAgICAgICAgKQogICMgc2Vhd2F0ZXIgdm9sdW1pYyBtYXNzIGF0bSBwcmVzc3VyZQogIHpyMiA9ICggKCAoICggNS4zODc1ZS05ICogcHRlbSAtIDguMjQ2N2UtNyApICogcHRlbSArIDcuNjQzOGUtNSApICogcHRlbQogICAgICAgLTQuMDg5OWUtMyApICogcHRlbSArIDAuODI0NDkzCiAgICAgICAgKQogIHpyMyA9ICggLTEuNjU0NmUtNiAqIHB0ZW0gKyAxLjAyMjdlLTQgKSAqIHB0ZW0gLSA1LjcyNDY2ZS0zCiAgenI0ID0gNC44MzE0ZS00CiAgCiAgIyBwb3RlbnRpYWwgdm9sdW1pYyBtYXNzIChyZWZlcmVuY2UgdG8gdGhlIHN1cmZhY2UpCiAgc2lnbWEwX291dCA9ICggenI0ICogcHNhbCArIHpyMyAqIHp3cyArIHpyMiApICogcHNhbCArIHpyMSAtIHpyYXUwCgogIHJldHVybiBzaWdtYTBfb3V0CiAgCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgICAgISEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyAgICAhISAqKiBQdXJwb3NlIDogICBDb21wdXRlIHRoZSAgbmV1dHJhbCB2b2x1bWljIG1hc3MgKGtnL20zKSBmcm9tIGtub3duCiMgICAgISEgICAgICBwb3RlbnRpYWwgdGVtcGVyYXR1cmUgYW5kIHNhbGluaXR5IGZpZWxkcyB1c2luZyBhbiBlcXVhdGlvbiBvZgojICAgICEhICAgICAgc3RhdGUuIAojICAgICEhCiMgICAgISEgKiogTWV0aG9kICA6CiMgICAgISEgICAgICAgTWNEb3VnYWxsIGFuZCBKYWNrZXR0ICgyMDA1KSBlcXVhdGlvbiBvZiBzdGF0ZS4KIyAgICAhISAgICAgICAgICAgICAgcG90ZW50aWFsIHRlbXBlcmF0dXJlICAgICAgICAgdCAgICAgICAgZGVnIGNlbHNpdXMKIyAgICAhISAgICAgICAgICAgICAgc2FsaW5pdHkgICAgICAgICAgICAgICAgICAgICAgcyAgICAgICAgcHN1CiMgICAgISEgICAgICAgICAgICAgIG5ldXRyYWwgZGVuc2l0eSAgICAgICAgICAgICAgIHJobyAgICAgIGtnL20qKjMKIyAgICAhISAgICAgICByZXN1bHQgaXMgbm90IG1hc2tlZCBhdCB0aGlzIHN0YWdlLgojICAgICEhICAgICAgIENoZWNrIHZhbHVlOiByaG8oMjAsMzUpID0gMTAyNC41OTQxNjc1MTE5NyBrZy9tKiozICAtMTAwMC4KIyAgICAhISAgICAgICB0ID0gMjAgZGVnIGNlbGNpdXMsIHM9MzUgcHN1CiMgICAgISEKIyAgICAhISAqKiBSZWZlcmVuY2VzIDogTWNEb3VnYWxsIGFuZCBKYWNrZXR0LCBUaGUgbWF0ZXJpYWwgZGVyaXZhdGl2ZSBvZiBuZXV0cmFsIGRlbnNpdHkKIyAgICAhISAgICAgICAgSm91cm5hbCBvZiBNYXJpbmUgUmVzZWFyY2gsIDYzLCAxNTktMTg1LCAyMDA1CiMgICAgISEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGVmIHNpZ21hbnRyKHB0ZW0sIHBzYWwpOgogICIiIgogIENvbXB1dGUgdGhlIG5ldXRyYWwgdm9sdW1pYyBtYXNzIChrZy9tMykgZnJvbSBrbm93biBwb3RlbnRpYWwgdGVtcGVyYXR1cmUgYW5kCiAgc2FsaW5pdHkgZmllbGRzIHVzaW5nIGFuIGVxdWF0aW9uIG9mIHN0YXRlLiAKICAKICBKTTogVWNoYW5nZWQgaW5wdXQgc28gdGhhdCBhcnJheSBzaXplcyBieSBkZWZhdWx0IG1hdGNoIHRoZSBpbnB1dCBhcnJheSBzaXplcwogIAogIElucHV0czoKICAgIHB0ZW0gICAgICAgICA9IHBvdGVudGlhbCB0ZW1wZXJhdHVyZSAgICAgICAgIHQgICAgICAgIGRlZyBjZWxzaXVzCiAgICBwc2FsICAgICAgICAgPSBzYWxpbml0eSAgICAgICAgICAgICAgICAgICAgICBzICAgICAgICBwc3UKICAgIAogIFJldHVybnM6CiAgICBzaWdtYW50cl9vdXQgPSBuZXV0cmFsIGRlbnNpdHkgdXNpbmcgSmFja2V0dCBhbmQgTWNEb3VnYWxsICgyMDA1KSBlcXVhdGlvbiBvZiBzdGF0ZQogICAgCiAgIiIiCiAgenJhdTAgPSAxMDAwLjAKICAKICB6d3MgPSBzcXJ0KCBhYnMocHNhbCkgKQogIAogICMgTnVtZXJhdG9yCiAgIyBULVBvbHlub21lCiAgenIxID0gKCAoICgtNC4zMTU5MjU1MDg2NzA2NzAzZS00ICogcHRlbSArIDguMTE1NzExODc4MjE3MDA1MWUtMikgKiBwdGVtIAogICAgICAgICAgICsgMi4yMjgwODMyMDY4NDQxMzMxZS0xICkgKiBwdGVtICsgMTAwMi4zMDYzNjg4ODkyNDgwZTAKICAgICAgICAgKQogICMgUy1UIFBvbHlub21lCiAgenIyID0gKCAoLTEuNzA1MjI5ODMzMTQxNDY3NWUtNyAqIHBzYWwgLSAzLjE3MTA2NzU0ODg4NjM5NTJlLTMgKiBwdGVtIAogICAgICAgIC0gMS4wMzA0NTM3NTM5NjkyOTI0ZS00KSAqIHBzYWwKICAgICAgICApCiAgIyBEZW5vbWluYXRvcgogICMgVC1Qb2x5bm9tZQogIHpyMyA9ICggKCAoICgtMi4zODUwMTc4NTU4MjEyMDQ4ZS05ICogcHRlbSAtMS42MjEyNTUyNDcwMzEwOTYxZS03KSAqIHB0ZW0KICAgICAgICArIDcuODcxNzc5OTU2MDU3NzcyNWUtNSApICogcHRlbSArIDQuMzkwNzY5MjY0NzgyNTkwMGUtNSAgKSAqIHB0ZW0gKyAxLjBlMAogICAgICAgICkKICAjIFMtVCBQb2x5bm9tZQogIHpyNCA9ICggKCAoIC0yLjI3NDQ0NTU3MzMzMTc3MDdlLTkgKiBwdGVtICogcHRlbSArIDYuMDM5OTg2NDcxODU5NzM4OGUtNikgKiBwdGVtIAogICAgICAgIC0gNS4xMjY4MTI0Mzk4MTYwNzM0ZS00ICkgKiBwc2FsCiAgICAgICAgKQogICMgUy1UIFBvbHlub21lCiAgenI1ID0gKCAtMS4zNDA5Mzc5NDIwMjE2NjgzZS05ICogcHRlbSAqIHB0ZW0gLSAzLjYxMzg1MzIzMzk3MDMyNjJlLTUpICogcHNhbCAqIHp3cwoKICAjIE5ldXRyYWwgZGVuc2l0eQogIHNpZ21hbnRyX291dCA9ICggenIxICsgenIyICkgLyAoIHpyMyArIHpyNCArIHpyNSApIC0genJhdTAKICAKICByZXR1cm4gc2lnbWFudHJfb3V0CiAgCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgICAgISEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyAgICAhISAqKiBQdXJwb3NlIDogICBDb21wdXRlIHRoZSAgZGVuc2l0eSByZWZlcmVuY2VkIHRvIHByZWYgKHJhdGlvIHJoby9yYXUwKSAKIyAgICAhISAgICAgICBmcm9tIHBvdGVudGlhbCB0ZW1wZXJhdHVyZSBhbmQKIyAgICAhISAgICAgIHNhbGluaXR5IGZpZWxkcyB1c2luZyBhbiBlcXVhdGlvbiBvZiBzdGF0ZSBkZWZpbmVkIHRocm91Z2ggdGhlCiMgICAgISEgICAgIG5hbWVsaXN0IHBhcmFtZXRlciBuZW9zLgojICAgICEhCiMgICAgISEgKiogTWV0aG9kICA6CiMgICAgISEgICAgICAgSmFja2V0dCBhbmQgTWNEb3VnYWxsICgxOTk0KSBlcXVhdGlvbiBvZiBzdGF0ZS4KIyAgICAhISAgICAgICAgIHRoZSBpbiBzaXR1IGRlbnNpdHkgaXMgY29tcHV0ZWQgZGlyZWN0bHkgYXMgYSBmdW5jdGlvbiBvZgojICAgICEhICAgICAgICAgcG90ZW50aWFsIHRlbXBlcmF0dXJlIHJlbGF0aXZlIHRvIHRoZSBzdXJmYWNlICh0aGUgb3BhIHQKIyAgICAhISAgICAgICAgIHZhcmlhYmxlKSwgc2FsdCBhbmQgcHJlc3N1cmUgKGFzc3VtaW5nIG5vIHByZXNzdXJlIHZhcmlhdGlvbgojICAgICEhICAgICAgICAgYWxvbmcgZ2VvcG90ZW50aWFsIHN1cmZhY2VzLCBpLmUuIHRoZSBwcmVzc3VyZSBwIGluIGRlY2liYXJzCiMgICAgISEgICAgICAgICBpcyBhcHByb3hpbWF0ZWQgYnkgdGhlIGRlcHRoIGluIG1ldGVycy4KIyAgICAhISAgICAgICAgICAgICAgcHJkKHQscyxwKSA9ICggcmhvKHQscyxwKSAtIHJhdTAgKSAvIHJhdTAKIyAgICAhISAgICAgICAgICAgICAgcmhvcCh0LHMpICA9IHJobyh0LHMsMCkKIyAgICAhISAgICAgICAgIHdpdGggcHJlc3N1cmUgICAgICAgICAgICAgICAgICAgICAgcCAgICAgICAgZGVjaWJhcnMKIyAgICAhISAgICAgICAgICAgICAgcG90ZW50aWFsIHRlbXBlcmF0dXJlICAgICAgICAgdCAgICAgICAgZGVnIGNlbHNpdXMKIyAgICAhISAgICAgICAgICAgICAgc2FsaW5pdHkgICAgICAgICAgICAgICAgICAgICAgcyAgICAgICAgcHN1CiMgICAgISEgICAgICAgICAgICAgIHJlZmVyZW5jZSB2b2x1bWljIG1hc3MgICAgICAgIHJhdTAgICAgIGtnL20qKjMKIyAgICAhISAgICAgICAgICAgICAgaW4gc2l0dSB2b2x1bWljIG1hc3MgICAgICAgICAgcmhvICAgICAga2cvbSoqMwojICAgICEhICAgICAgICAgICAgICBpbiBzaXR1IGRlbnNpdHkgYW5vbWFsaWUgICAgICBwcmQgICAgICBubyB1bml0cwojICAgICEhIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBqaXQobm9weXRob24gPSBUcnVlKQpkZWYgc2lnbWFpX2RlcChwdGVtLCBwc2FsLCBwcmVmKToKICAiIiIKICBDb21wdXRlIHRoZSBkZW5zaXR5IHJlZmVyZW5jZWQgdG8gcHJlZiAocmF0aW8gcmhvL3JhdTApIGZyb20gcG90ZW50aWFsCiAgdGVtcGVyYXR1cmUgYW5kIHNhbGluaXR5IGZpZWxkcyB1c2luZyBhbiBlcXVhdGlvbiBvZiBzdGF0ZSBkZWZpbmVkIHRocm91Z2ggdGhlCiAgbmFtZWxpc3QgcGFyYW1ldGVyIG5lb3MuCiAgCiAgSk06IGNoYW5nZWQgaW5wdXQgc28gdGhhdCBhcnJheSBzaXplcyBieSBkZWZhdWx0IG1hdGNoIHRoZSBpbnB1dCBhcnJheSBzaXplcwogICAgICBjb21iaW5lZCBzaWdtYWlfZGVwMmQgYW5kIHNpZ21haV9kZXAgKGhlcmUgaXQgZG9lc24ndCBjYXJlLCBhbmQgcmVmZXJlbmNlCiAgICAgIGNhbiBiZSAyZCBhcnJheSBtYXRjaGluZyBpbnB1dCBzaXplIG9yIGp1c3QgYSBudW1iZXIpCiAgCiAgSW5wdXRzOgogICAgcHRlbSAgICAgICAgICAgPSBwb3RlbnRpYWwgdGVtcGVyYXR1cmUgICAgICAgICB0ICAgICAgICBkZWcgY2Vsc2l1cwogICAgcHNhbCAgICAgICAgICAgPSBzYWxpbml0eSAgICAgICAgICAgICAgICAgICAgICBzICAgICAgICBwc3UKICAgIAogIFJldHVybnM6CiAgICBzaWdtYWlfZGVwX291dCA9IGRlbnNpdHkgcmVmZXJlbmNlZCB0byBwcmVmIHVzaW5nIEphY2tldHQgYW5kIE1jRG91Z2FsbAogICAgICAgICAgICAgICAgICAgICAoMjAwNSkgZXF1YXRpb24gb2Ygc3RhdGUKICAgIAogICIiIgogIHpyNCAgID0gNC44MzEzZS00CiAgemQgICAgPS0yLjA0Mjk2N2UtMgogIHpyYXUwID0gMTAwMC5lMAogIAogIHNpZ21haV9kZXBfb3V0ID0gemVyb3MocHNhbC5zaGFwZSkKICAKICAjID8/IGZvciB3aGF0ZXZlciByZWFzb24gc3FydChhYnMocHNhbCkpIHNlZW1zIHRvIGtpY2sgdXAgYSBmdXNzIHdoZW4gYXJyYXlzCiAgIyAgICBleGNlZWQgYSBjZXJ0YWluIHNpemUuLi4/Pz8gb3RoZXJ3aXNlIHRoaXMgY291bGQgYmUgdmVjdG9yaXNlZAogICMgVE9ETzogaWYgcHJlZiBpcyBhIG51bWJlciwgYnJvYWRjYXN0IGl0IGludG8gYSAyZCBmaWVsZAo8fGZpbV9ob2xlfD4KICAgICAgenRlbSA9IHB0ZW1bamosIGppXQogICAgICB6c2FsID0gcHNhbFtqaiwgamldCiAgICAgIHp3cyA9IHNxcnQoIGFicyhwc2FsW2pqLCBqaV0pICkKICAgIAogICAgICAjIENvbXB1dGUgdGhlIHZvbHVtaWMgbWFzcyBvZiBwdXJlIHdhdGVyIGF0IGF0bW9zcGhlcmljIHByZXNzdXJlLgogICAgICB6cjEgPSAoICggKCAoICg2LjUzNjMzMmUtOSAqIHp0ZW0gLSAxLjEyMDA4M2UtNikgKiB6dGVtICsgMS4wMDE2ODVlLTQgKQogICAgICAgICAgICAgICAgKiB6dGVtIC0gOS4wOTUyOTBlLTMgKSAqIHp0ZW0gKyA2Ljc5Mzk1MmUtMiApICogenRlbSArIDk5OS44NDI1OTRlMAogICAgICAgICAgICApCgogICAgICAjIENvbXB1dGUgdGhlIHNlYXdhdGVyIHZvbHVtaWMgbWFzcyBhdCBhdG1vc3BoZXJpYyBwcmVzc3VyZS4KICAgICAgenIyID0gKCAoICggKCA1LjM4NzVlLTkgKiB6dGVtIC0gOC4yNDY3ZS03KSAqIHp0ZW0gKyA3LjY0MzhlLTUpCiAgICAgICAgICAgKiB6dGVtIC0gNC4wODk5ZS0zKSAqIHp0ZW0gKyAwLjgyNDQ5M2UwCiAgICAgICAgICAgICkKCiAgICAgIHpyMyA9ICgtMS42NTQ2ZS02ICogenRlbSArIDEuMDIyN2UtNCkgKiB6dGVtIC0gNS43MjQ2NmUtMwoKICAgICAgIyBDb21wdXRlIHRoZSBwb3RlbnRpYWwgdm9sdW1pYyBtYXNzIChyZWZlcmVuY2VkIHRvIHRoZSBzdXJmYWNlKS4KICAgICAgenJob3AgPSAoenI0ICogenNhbCArIHpyMyAqIHp3cyArIHpyMikgKiB6c2FsICsgenIxCgogICAgICAjIENvbXB1dGUgdGhlIGNvbXByZXNzaW9uIHRlcm1zLgogICAgICB6ZSAgPSAoLTMuNTA4OTE0ZS04ICogenRlbSAtIDEuMjQ4MjY2ZS04KSAqIHp0ZW0gLSAyLjU5NTk5NGUtNgoKICAgICAgemJ3ID0gKDEuMjk2ODIxZS02ICogenRlbSAtIDUuNzgyMTY1ZS05KSAqIHp0ZW0gKyAxLjA0NTk0MWUtNAoKICAgICAgemIgID0gemJ3ICsgemUgKiB6c2FsCgogICAgICB6YyAgPSAoLTcuMjY3OTI2ZS01ICogenRlbSArIDIuNTk4MjQxZS0zKSAqIHp0ZW0gKyAwLjE1NzE4OTZlMAoKICAgICAgemF3ID0gKCAoICg1LjkzOTkxMGUtNiAqIHp0ZW0gKyAyLjUxMjU0OWUtMykgKiB6dGVtIC0gMC4xMDI4ODU5ZTAgKSAKICAgICAgICAgICAgICogenRlbSAtIDQuNzIxNzg4ZTAKICAgICAgICAgICAgICkKCiAgICAgIHphICA9ICh6ZCAqIHp3cyArIHpjKSAqIHpzYWwgKyB6YXcKCiAgICAgIHpiMSA9ICgtMC4xOTA5MDc4ZTAgKiB6dGVtICsgNy4zOTA3MjllMCkgKiB6dGVtIC0gNTUuODc1NDVlMAoKICAgICAgemExID0gKCAoICgyLjMyNjQ2OWUtMyAqIHp0ZW0gKyAxLjU1MzE5MGUwKSAqIHp0ZW0gLSA2NS4wMDUxN2UwKQogICAgICAgICAgICAgKiB6dGVtICsgMTA0NC4wNzdlMAogICAgICAgICAgICAgKQoKICAgICAgemt3ID0gKCAoICggKC0xLjM2MTYyOWUtNCAqIHp0ZW0gLSAxLjg1MjczMmUtMikgKiB6dGVtIC0gMzAuNDE2MzhlMCkKICAgICAgICAgICAgICogenRlbSArIDIwOTguOTI1ZTApICogenRlbSArIDE5MDkyNS42MAogICAgICAgICAgICAgKQoKICAgICAgemswID0gKHpiMSAqIHp3cyArIHphMSkgKiB6c2FsICsgemt3CgogICAgICAjIENvbXB1dGUgdGhlIHBvdGVudGlhbCBkZW5zaXR5IGFub21hbHkuCiAgICAgIHNpZ21haV9kZXBfb3V0W2pqLCBqaV0gPSAoIHpyaG9wIC8gKDEuMGUwIC0gcHJlZiAvIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggemswIC0gcHJlZiAqICh6YSAtIHByZWYgKiB6YikgKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHpyYXUwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgCiAgcmV0dXJuIHNpZ21haV9kZXBfb3V0Cjx8ZmltX3N1ZmZpeHw+CiAgCiAgZm9yIGpqIGluIHJhbmdlKHBzYWwuc2hhcGVbMF0pOiAjIHB5dGhvbiBpbmRleGluZwogICAgZm9yIGppIGluIHJhbmdlKHBzYWwuc2hhcGVbMV0pOgogICAgCjx8ZmltX2VuZHw+"]
["ec547510ca1b32b3eac434532fbcac7e52b2dc08-2","ec547510ca1b32b3eac434532fbcac7e52b2dc08","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojCiMgbW9kdWxlIGZvciBkb2luZyBkZW5zaXR5IHJlbGF0aW5nIHRoaW5ncwojIGFkYXB0ZWQgZnJvbSBDREZUT09MUy9lb3M6CiMgICEhPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojICAhISAgICAgICAgICAgICAgICAgICAgICoqKiAgTU9EVUxFICBlb3MgICoqKgojICAhISBBbGwgcm91dGluZXMgZGVhbGluZyB3aXRoIHRoZSBFcXVhdGlvbiBPZiBTdGF0ZSBvZiBzZWEgd2F0ZXIKIyAgISE9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyAgISEgSGlzdG9yeSA6IDIuMSAgISAgMjAwNCAgIDogSi5NLiBNb2xpbmVzIDogT3JpZ2luYWwgY29kZSBwb3J0ZWQKIyAgISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBORU1PCiMgICEhICAgICAgICAgICAzLjAgICAgMTIvMjAxMCA6IEouTS4gTW9saW5lcyA6IERvY3RvciBub3JtICsgTGljLgojICAhISAgICAgICAgICAgNC4wICA6IDAzLzIwMTcgOiBKLk0uIE1vbGluZXMKIyAgISEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgICEhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojICAhISAgIHJvdXRpbmVzICAgICAgOiBkZXNjcmlwdGlvbgojICAhISAgIHNpZ21hMCAgICAgOiBjb21wdXRlIHNpZ21hLTAgCiMgICEhICAgZW9zYm4yICAgICA6IGNvbXB1dGUgQnJ1bnQgVmFpc3NhbGEgRnJlcXVlbmN5CiMgICEhICAgc2lnbWFpICAgICA6IGNvbXB1dGUgc2lnbWEtaSAoIHJlZmVyZWQgdG8gYSBkZXB0aCBnaXZlbiBpbiBhcmd1bWVudAojICAhISAgIGFsYmV0ICAgICAgOiBDb21wdXRlIHRoZSByYXRpbyBhbHBoYS9iZXRhICggVGhlcm1hbC9oYWxpbmUgZXhhcG5zaW9uKQojICAhISAgIGJldGEgICAgICAgOiBjb21wdXRlIGJldGEgKGhhbGluZSBleHBlbnNpb24pCiMgICEhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKZnJvbSBudW1iYSBpbXBvcnQgaml0CmZyb20gbnVtcHkgaW1wb3J0IHplcm9zLCBzcXJ0LCBhYnMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgICAgISEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyAgICAhISAgICAgICAgICAgICAgICAgICoqKiAgRlVOQ1RJT04gc2lnbWEwICAqKioKIyAgICAhIQojICAgICEhICoqIFB1cnBvc2UgOiBDb21wdXRlIHRoZSBpbiBzaXR1IGRlbnNpdHkgKHJhdGlvIHJoby9yYXUwKSBhbmQgdGhlCiMgICAgISEgICAgICAgICAgICAgIHBvdGVudGlhbCB2b2x1bWljIG1hc3MgKEtnL20zKSBmcm9tIHBvdGVudGlhbCB0ZW1wZXJhdHVyZSAKIyAgICAhISAgICAgICAgICAgICAgYW5kIHNhbGluaXR5IGZpZWxkcyB1c2luZyBhbiBlcXVhdGlvbiBvZiBzdGF0ZSBkZWZpbmVkIAojICAgICEhICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBuYW1lbGlzdCBwYXJhbWV0ZXIgbmVvcy4KIyAgICAhIQojICAgICEhICoqIE1ldGhvZCAgOiBKYWNrZXR0IGFuZCBNY0RvdWdhbGwgKDE5OTQpIGVxdWF0aW9uIG9mIHN0YXRlLgojICAgICEhICAgICAgICAgICAgICBUaGUgaW4gc2l0dSBkZW5zaXR5IGlzIGNvbXB1dGVkIGRpcmVjdGx5IGFzIGEgZnVuY3Rpb24gb2YKIyAgICAhISAgICAgICAgICAgICAgcG90ZW50aWFsIHRlbXBlcmF0dXJlIHJlbGF0aXZlIHRvIHRoZSBzdXJmYWNlICh0aGUgb3BhIHQKIyAgICAhISAgICAgICAgICAgICAgdmFyaWFibGUpLCBzYWx0IGFuZCBwcmVzc3VyZSAoYXNzdW1pbmcgbm8gcHJlc3N1cmUgdmFyaWF0aW9uCiMgICAgISEgICAgICAgICAgICAgIGFsb25nIGdlb3BvdGVudGlhbCBzdXJmYWNlcywgaS5lLiB0aGUgcHJlc3N1cmUgcCBpbiBkZWNpYmFycwojICAgICEhICAgICAgICAgICAgICBpcyBhcHByb3hpbWF0ZWQgYnkgdGhlIGRlcHRoIGluIG1ldGVycy4KIyAgICAhISAgICAgICAgICAgICAgcHJkKHQscyxwKSA9ICggcmhvKHQscyxwKSAtIHJhdTAgKSAvIHJhdTAKIyAgICAhISAgICAgICAgICAgICAgcmhvcCh0LHMpICA9IHJobyh0LHMsMCkKIyAgICAhISAgICAgICAgICAgICAgd2l0aCBwcmVzc3VyZSAgICAgICAgICAgICAgICAgICAgICBwICAgICAgICBkZWNpYmFycwojICAgICEhICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbCB0ZW1wZXJhdHVyZSAgICAgICAgIHQgICAgICAgIGRlZyBjZWxzaXVzCiMgICAgISEgICAgICAgICAgICAgICAgICAgc2FsaW5pdHkgICAgICAgICAgICAgICAgICAgICAgcyAgICAgICAgcHN1CiMgICAgISEgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlIHZvbHVtaWMgbWFzcyAgICAgICAgcmF1MCAgICAga2cvbSoqMwojICAgICEhICAgICAgICAgICAgICAgICAgIGluIHNpdHUgdm9sdW1pYyBtYXNzICAgICAgICAgIHJobyAgICAgIGtnL20qKjMKIyAgICAhISAgICAgICAgICAgICAgICAgICBpbiBzaXR1IGRlbnNpdHkgYW5vbWFsaWUgICAgICBwcmQgICAgICBubyB1bml0cwojICAgICEhCiMgICAgISEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRlZiBzaWdtYTAocHRlbSwgcHNhbCk6CiAgIiIiCiAgQ29tcHV0ZSB0aGUgaW4gc2l0dSBkZW5zaXR5IChyYXRpbyByaG8vcmF1MCkgYW5kIHRoZSBwb3RlbnRpYWwgdm9sdW1pYyBtYXNzCiAgKEtnL20zKSBmcm9tIHBvdGVudGlhbCB0ZW1wZXJhdHVyZSBhbmQgc2FsaW5pdHkgZmllbGRzIHVzaW5nIGFuIGVxdWF0aW9uIG9mCiAgc3RhdGUgZGVmaW5lZCB0aHJvdWdoIHRoZSBuYW1lbGlzdCBwYXJhbWV0ZXIgbmVvcy4KICAKICBKTTogY2hhbmdlZCBpbnB1dCBzbyB0aGF0IGFycmF5IHNpemVzIGJ5IGRlZmF1bHQgbWF0Y2ggdGhlIGlucHV0IGFycmF5IHNpemVzCiAgCiAgSW5wdXRzOgogICAgcHRlbSAgICAgICA9IHBvdGVudGlhbCB0ZW1wZXJhdHVyZSAgICAgICAgIHQgICAgICAgIGRlZyBjZWxzaXVzCiAgICBwc2FsICAgICAgID0gc2FsaW5pdHkgICAgICAgICAgICAgICAgICAgICAgcyAgICAgICAgcHN1CiAgICAKICBSZXR1cm5zOgogICAgc2lnbWEwX291dCA9IGluIHNpdHUgZGVuc2l0eSB1c2luZyBKYWNrZXR0IGFuZCBNY0RvdWdhbGwgKDE5OTQpIGVxdWF0aW9uIG9mIHN0YXRlCiAgICAKICAiIiIKICB6cmF1MCA9IDEwMDAuMAoKICAjIGNvbXB1dGUgdm9sdW1pYyBtYXNzIHB1cmUgd2F0ZXIgYXQgYXRtIHByZXNzdXJlCiAgenIxID0gKCAoICggKCAoIDYuNTM2MzMyZS05ICogcHRlbSAtIDEuMTIwMDgzZS02ICkgKiBwdGVtICsgMS4wMDE2ODVlLTQpICogcHRlbSAgIAogICAgICAgLTkuMDk1MjkwZS0zICkgKiBwdGVtICsgNi43OTM5NTJlLTIgKSAqIHB0ZW0gKyA5OTkuODQyNTk0CiAgICAgICAgKQogICMgc2Vhd2F0ZXIgdm9sdW1pYyBtYXNzIGF0bSBwcmVzc3VyZQogIHpyMiA9ICggKCAoICggNS4zODc1ZS05ICogcHRlbSAtIDguMjQ2N2UtNyApICogcHRlbSArIDcuNjQzOGUtNSApICogcHRlbQogICAgICAgLTQuMDg5OWUtMyApICogcHRlbSArIDAuODI0NDkzCiAgICAgICAgKQogIHpyMyA9ICggLTEuNjU0NmUtNiAqIHB0ZW0gKyAxLjAyMjdlLTQgKSAqIHB0ZW0gLSA1LjcyNDY2ZS0zCiAgenI0ID0gNC44MzE0ZS00CiAgCiAgIyBwb3RlbnRpYWwgdm9sdW1pYyBtYXNzIChyZWZlcmVuY2UgdG8gdGhlIHN1cmZhY2UpCiAgc2lnbWEwX291dCA9ICggenI0ICogcHNhbCArIHpyMyAqIHp3cyArIHpyMiApICogcHNhbCArIHpyMSAtIHpyYXUwCgogIHJldHVybiBzaWdtYTBfb3V0CiAgCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgICAgISEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyAgICAhISAqKiBQdXJwb3NlIDogICBDb21wdXRlIHRoZSAgbmV1dHJhbCB2b2x1bWljIG1hc3MgKGtnL20zKSBmcm9tIGtub3duCiMgICAgISEgICAgICBwb3RlbnRpYWwgdGVtcGVyYXR1cmUgYW5kIHNhbGluaXR5IGZpZWxkcyB1c2luZyBhbiBlcXVhdGlvbiBvZgojICAgICEhICAgICAgc3RhdGUuIAojICAgICEhCiMgICAgISEgKiogTWV0aG9kICA6CiMgICAgISEgICAgICAgTWNEb3VnYWxsIGFuZCBKYWNrZXR0ICgyMDA1KSBlcXVhdGlvbiBvZiBzdGF0ZS4KIyAgICAhISAgICAgICAgICAgICAgcG90ZW50aWFsIHRlbXBlcmF0dXJlICAgICAgICAgdCAgICAgICAgZGVnIGNlbHNpdXMKIyAgICAhISAgICAgICAgICAgICAgc2FsaW5pdHkgICAgICAgICAgICAgICAgICAgICAgcyAgICAgICAgcHN1CiMgICAgISEgICAgICAgICAgICAgIG5ldXRyYWwgZGVuc2l0eSAgICAgICAgICAgICAgIHJobyAgICAgIGtnL20qKjMKIyAgICAhISAgICAgICByZXN1bHQgaXMgbm90IG1hc2tlZCBhdCB0aGlzIHN0YWdlLgojICAgICEhICAgICAgIENoZWNrIHZhbHVlOiByaG8oMjAsMzUpID0gMTAyNC41OTQxNjc1MTE5NyBrZy9tKiozICAtMTAwMC4KIyAgICAhISAgICAgICB0ID0gMjAgZGVnIGNlbGNpdXMsIHM9MzUgcHN1CiMgICAgISEKIyAgICAhISAqKiBSZWZlcmVuY2VzIDogTWNEb3VnYWxsIGFuZCBKYWNrZXR0LCBUaGUgbWF0ZXJpYWwgZGVyaXZhdGl2ZSBvZiBuZXV0cmFsIGRlbnNpdHkKIyAgICAhISAgICAgICAgSm91cm5hbCBvZiBNYXJpbmUgUmVzZWFyY2gsIDYzLCAxNTktMTg1LCAyMDA1CiMgICAgISEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGVmIHNpZ21hbnRyKHB0ZW0sIHBzYWwpOgogICIiIgogIENvbXB1dGUgdGhlIG5ldXRyYWwgdm9sdW1pYyBtYXNzIChrZy9tMykgZnJvbSBrbm93biBwb3RlbnRpYWwgdGVtcGVyYXR1cmUgYW5kCiAgc2FsaW5pdHkgZmllbGRzIHVzaW5nIGFuIGVxdWF0aW9uIG9mIHN0YXRlLiAKICAKICBKTTogVWNoYW5nZWQgaW5wdXQgc28gdGhhdCBhcnJheSBzaXplcyBieSBkZWZhdWx0IG1hdGNoIHRoZSBpbnB1dCBhcnJheSBzaXplcwogIAogIElucHV0czoKICAgIHB0ZW0gICAgICAgICA9IHBvdGVudGlhbCB0ZW1wZXJhdHVyZSAgICAgICAgIHQgICAgICAgIGRlZyBjZWxzaXVzCiAgICBwc2FsICAgICAgICAgPSBzYWxpbml0eSAgICAgICAgICAgICAgICAgICAgICBzICAgICAgICBwc3UKICAgIAogIFJldHVybnM6CiAgICBzaWdtYW50cl9vdXQgPSBuZXV0cmFsIGRlbnNpdHkgdXNpbmcgSmFja2V0dCBhbmQgTWNEb3VnYWxsICgyMDA1KSBlcXVhdGlvbiBvZiBzdGF0ZQogICAgCiAgIiIiCiAgenJhdTAgPSAxMDAwLjAKICAKICB6d3MgPSBzcXJ0KCBhYnMocHNhbCkgKQogIAogICMgTnVtZXJhdG9yCiAgIyBULVBvbHlub21lCiAgenIxID0gKCAoICgtNC4zMTU5MjU1MDg2NzA2NzAzZS00ICogcHRlbSArIDguMTE1NzExODc4MjE3MDA1MWUtMikgKiBwdGVtIAogICAgICAgICAgICsgMi4yMjgwODMyMDY4NDQxMzMxZS0xICkgKiBwdGVtICsgMTAwMi4zMDYzNjg4ODkyNDgwZTAKICAgICAgICAgKQogICMgUy1UIFBvbHlub21lCiAgenIyID0gKCAoLTEuNzA1MjI5ODMzMTQxNDY3NWUtNyAqIHBzYWwgLSAzLjE3MTA2NzU0ODg4NjM5NTJlLTMgKiBwdGVtIAogICAgICAgIC0gMS4wMzA0NTM3NTM5NjkyOTI0ZS00KSAqIHBzYWwKICAgICAgICApCiAgIyBEZW5vbWluYXRvcgogICMgVC1Qb2x5bm9tZQogIHpyMyA9ICggKCAoICgtMi4zODUwMTc4NTU4MjEyMDQ4ZS05ICogcHRlbSAtMS42MjEyNTUyNDcwMzEwOTYxZS03KSAqIHB0ZW0KICAgICAgICArIDcuODcxNzc5OTU2MDU3NzcyNWUtNSApICogcHRlbSArIDQuMzkwNzY5MjY0NzgyNTkwMGUtNSAgKSAqIHB0ZW0gKyAxLjBlMAogICAgICAgICkKICAjIFMtVCBQb2x5bm9tZQogIHpyNCA9ICggKCAoIC0yLjI3NDQ0NTU3MzMzMTc3MDdlLTkgKiBwdGVtICogcHRlbSArIDYuMDM5OTg2NDcxODU5NzM4OGUtNikgKiBwdGVtIAogICAgICAgIC0gNS4xMjY4MTI0Mzk4MTYwNzM0ZS00ICkgKiBwc2FsCiAgICAgICAgKQogICMgUy1UIFBvbHlub21lCiAgenI1ID0gKCAtMS4zNDA5Mzc5NDIwMjE2NjgzZS05ICogcHRlbSAqIHB0ZW0gLSAzLjYxMzg1MzIzMzk3MDMyNjJlLTUpICogcHNhbCAqIHp3cwoKICAjIE5ldXRyYWwgZGVuc2l0eQogIHNpZ21hbnRyX291dCA9ICggenIxICsgenIyICkgLyAoIHpyMyArIHpyNCArIHpyNSApIC0genJhdTAKICAKICByZXR1cm4gc2lnbWFudHJfb3V0CiAgCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgICAgISEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyAgICAhISAqKiBQdXJwb3NlIDogICBDb21wdXRlIHRoZSAgZGVuc2l0eSByZWZlcmVuY2VkIHRvIHByZWYgKHJhdGlvIHJoby9yYXUwKSAKIyAgICAhISAgICAgICBmcm9tIHBvdGVudGlhbCB0ZW1wZXJhdHVyZSBhbmQKIyAgICAhISAgICAgIHNhbGluaXR5IGZpZWxkcyB1c2luZyBhbiBlcXVhdGlvbiBvZiBzdGF0ZSBkZWZpbmVkIHRocm91Z2ggdGhlCiMgICAgISEgICAgIG5hbWVsaXN0IHBhcmFtZXRlciBuZW9zLgojICAgICEhCiMgICAgISEgKiogTWV0aG9kICA6CiMgICAgISEgICAgICAgSmFja2V0dCBhbmQgTWNEb3VnYWxsICgxOTk0KSBlcXVhdGlvbiBvZiBzdGF0ZS4KIyAgICAhISAgICAgICAgIHRoZSBpbiBzaXR1IGRlbnNpdHkgaXMgY29tcHV0ZWQgZGlyZWN0bHkgYXMgYSBmdW5jdGlvbiBvZgojICAgICEhICAgICAgICAgcG90ZW50aWFsIHRlbXBlcmF0dXJlIHJlbGF0aXZlIHRvIHRoZSBzdXJmYWNlICh0aGUgb3BhIHQKIyAgICAhISAgICAgICAgIHZhcmlhYmxlKSwgc2FsdCBhbmQgcHJlc3N1cmUgKGFzc3VtaW5nIG5vIHByZXNzdXJlIHZhcmlhdGlvbgojICAgICEhICAgICAgICAgYWxvbmcgZ2VvcG90ZW50aWFsIHN1cmZhY2VzLCBpLmUuIHRoZSBwcmVzc3VyZSBwIGluIGRlY2liYXJzCiMgICAgISEgICAgICAgICBpcyBhcHByb3hpbWF0ZWQgYnkgdGhlIGRlcHRoIGluIG1ldGVycy4KIyAgICAhISAgICAgICAgICAgICAgcHJkKHQscyxwKSA9ICggcmhvKHQscyxwKSAtIHJhdTAgKSAvIHJhdTAKIyAgICAhISAgICAgICAgICAgICAgcmhvcCh0LHMpICA9IHJobyh0LHMsMCkKIyAgICAhISAgICAgICAgIHdpdGggcHJlc3N1cmUgICAgICAgICAgICAgICAgICAgICAgcCAgICAgICAgZGVjaWJhcnMKIyAgICAhISAgICAgICAgICAgICAgcG90ZW50aWFsIHRlbXBlcmF0dXJlICAgICAgICAgdCAgICAgICAgZGVnIGNlbHNpdXMKIyAgICAhISAgICAgICAgICAgICAgc2FsaW5pdHkgICAgICAgICAgICAgICAgICAgICAgcyAgICAgICAgcHN1CiMgICAgISEgICAgICAgICAgICAgIHJlZmVyZW5jZSB2b2x1bWljIG1hc3MgICAgICAgIHJhdTAgICAgIGtnL20qKjMKIyAgICAhISAgICAgICAgICAgICAgaW4gc2l0dSB2b2x1bWljIG1hc3MgICAgICAgICAgcmhvICAgICAga2cvbSoqMwojICAgICEhICAgICAgICAgICAgICBpbiBzaXR1IGRlbnNpdHkgYW5vbWFsaWUgICAgICBwcmQgICAgICBubyB1bml0cwojICAgICEhIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBqaXQobm9weXRob24gPSBUcnVlKQpkZWYgc2lnbWFpX2RlcChwdGVtLCBwc2FsLCBwcmVmKToKICAiIiIKICBDb21wdXRlIHRoZSBkZW5zaXR5IHJlZmVyZW5jZWQgdG8gcHJlZiAocmF0aW8gcmhvL3JhdTApIGZyb20gcG90ZW50aWFsCiAgdGVtcGVyYXR1cmUgYW5kIHNhbGluaXR5IGZpZWxkcyB1c2luZyBhbiBlcXVhdGlvbiBvZiBzdGF0ZSBkZWZpbmVkIHRocm91Z2ggdGhlCiAgbmFtZWxpc3QgcGFyYW1ldGVyIG5lb3MuCiAgCiAgSk06IGNoYW5nZWQgaW5wdXQgc28gdGhhdCBhcnJheSBzaXplcyBieSBkZWZhdWx0IG1hdGNoIHRoZSBpbnB1dCBhcnJheSBzaXplcwogICAgICBjb21iaW5lZCBzaWdtYWlfZGVwMmQgYW5kIHNpZ21haV9kZXAgKGhlcmUgaXQgZG9lc24ndCBjYXJlLCBhbmQgcmVmZXJlbmNlCiAgICAgIGNhbiBiZSAyZCBhcnJheSBtYXRjaGluZyBpbnB1dCBzaXplIG9yIGp1c3QgYSBudW1iZXIpCiAgCiAgSW5wdXRzOgogICAgcHRlbSAgICAgICAgICAgPSBwb3RlbnRpYWwgdGVtcGVyYXR1cmUgICAgICAgICB0ICAgICAgICBkZWcgY2Vsc2l1cwogICAgcHNhbCAgICAgICAgICAgPSBzYWxpbml0eSAgICAgICAgICAgICAgICAgICAgICBzICAgICAgICBwc3UKICAgIAogIFJldHVybnM6CiAgICBzaWdtYWlfZGVwX291dCA9IGRlbnNpdHkgcmVmZXJlbmNlZCB0byBwcmVmIHVzaW5nIEphY2tldHQgYW5kIE1jRG91Z2FsbAogICAgICAgICAgICAgICAgICAgICAoMjAwNSkgZXF1YXRpb24gb2Ygc3RhdGUKICAgIAogICIiIgogIHpyNCAgID0gNC44MzEzZS00CiAgemQgICAgPS0yLjA0Mjk2N2UtMgogIHpyYXUwID0gMTAwMC5lMAogIAogIHNpZ21haV9kZXBfb3V0ID0gemVyb3MocHNhbC5zaGFwZSkKICAKICAjID8/IGZvciB3aGF0ZXZlciByZWFzb24gc3FydChhYnMocHNhbCkpIHNlZW1zIHRvIGtpY2sgdXAgYSBmdXNzIHdoZW4gYXJyYXlzCiAgIyAgICBleGNlZWQgYSBjZXJ0YWluIHNpemUuLi4/Pz8gb3RoZXJ3aXNlIHRoaXMgY291bGQgYmUgdmVjdG9yaXNlZAogICMgVE9ETzogaWYgcHJlZiBpcyBhIG51bWJlciwgYnJvYWRjYXN0IGl0IGludG8gYSAyZCBmaWVsZAogIAogIGZvciBqaiBpbiByYW5nZShwc2FsLnNoYXBlWzBdKTogIyBweXRob24gaW5kZXhpbmcKICAgIGZvciBqaSBpbiByYW5nZShwc2FsLnNoYXBlWzFdKToKICAgIAogICAgICB6dGVtID0gcHRlbVtqaiwgamldCiAgICAgIHpzYWwgPSBwc2FsW2pqLCBqaV0KICAgICAgendzID0gc3FydCggYWJzKHBzYWxbamosIGppXSkgKQogICAgCiAgICAgICMgQ29tcHV0ZSB0aGUgdm9sdW1pYyBtYXNzIG9mIHB1cmUgd2F0ZXIgYXQgYXRtb3NwaGVyaWMgcHJlc3N1cmUuCiAgICAgIHpyMSA9ICggKCAoICggKDYuNTM2MzMyZS05ICogenRlbSAtIDEuMTIwMDgzZS02KSAqIHp0ZW0gKyAxLjAwMTY4NWUtNCApCiAgICAgICAgICAgICAgICAqIHp0ZW0gLSA5LjA5NTI5MGUtMyApICogenRlbSArIDYuNzkzOTUyZS0yICkgKiB6dGVtICsgOTk5Ljg0MjU5NGUwCiAgICAgICAgICAgICkKCiAgICAgICMgQ29tcHV0ZSB0aGUgc2Vhd2F0ZXIgdm9sdW1pYyBtYXNzIGF0IGF0bW9zcGhlcmljIHByZXNzdXJlLgogICAgICB6cjIgPSAoICggKCAoIDUuMzg3NWUtOSAqIHp0ZW0gLSA4LjI0NjdlLTcpICogenRlbSArIDcuNjQzOGUtNSkKICAgICAgICAgICAqIHp0ZW0gLSA0LjA4OTllLTMpICogenRlbSArIDAuODI0NDkzZTAKICAgICAgICAgICAgKQoKICAgICAgenIzID0gKC0xLjY1NDZlLTYgKiB6dGVtICsgMS4wMjI3ZS00KSAqIHp0ZW0gLSA1LjcyNDY2ZS0zCgogICAgICAjIENvbXB1dGUgdGhlIHBvdGVudGlhbCB2b2x1bWljIG1hc3MgKHJlZmVyZW5jZWQgdG8gdGhlIHN1cmZhY2UpLgogICAgICB6cmhvcCA9ICh6cjQgKiB6c2FsICsgenIzICogendzICsgenIyKSAqIHpzYWwgKyB6cjEKCiAgICAgICMgQ29tcHV0ZSB0aGUgY29tcHJlc3Npb24gdGVybXMuCiAgICAgIHplICA9ICgtMy41MDg5MTRlLTggKiB6dGVtIC0gMS4yNDgyNjZlLTgpICogenRlbSAtIDIuNTk1OTk0ZS02CgogICAgICB6YncgPSAoMS4yOTY4MjFlLTYgKiB6dGVtIC0gNS43ODIxNjVlLTkpICogenRlbSArIDEuMDQ1OTQxZS00CgogICAgICB6YiAgPSB6YncgKyB6ZSAqIHpzYWwKCiAgICAgIHpjICA9ICgtNy4yNjc5MjZlLTUgKiB6dGVtICsgMi41OTgyNDFlLTMpICogenRlbSArIDAuMTU3MTg5NmUwCgogICAgICB6YXcgPSAoICggKDUuOTM5OTEwZS02ICogenRlbSArIDIuNTEyNTQ5ZS0zKSAqIHp0ZW0gLSAwLjEwMjg4NTllMCApIAogICAgICAgICAgICAgKiB6dGVtIC0gNC43MjE3ODhlMAogICAgICAgICAgICAgKQoKICAgICAgemEgID0gKHpkICogendzICsgemMpICogenNhbCArIHphdwoKICAgICAgemIxID0gKC0wLjE5MDkwNzhlMCAqIHp0ZW0gKyA3LjM5MDcyOWUwKSAqIHp0ZW0gLSA1NS44NzU0NWUwCgogICAgICB6YTEgPSAoICggKDIuMzI2NDY5ZS0zICogenRlbSArIDEuNTUzMTkwZTApICogenRlbSAtIDY1LjAwNTE3ZTApCiAgICAgICAgICAgICAqIHp0ZW0gKyAxMDQ0LjA3N2UwCiAgICAgICAgICAgICApCgogICAgICB6a3cgPSAoICggKCAoLTEuMzYxNjI5ZS00ICogenRlbSAtIDEuODUyNzMyZS0yKSAqIHp0ZW0gLSAzMC40MTYzOGUwKQogICAgICAgICAgICAgKiB6dGVtICsgMjA5OC45MjVlMCkgKiB6dGVtICsgMTkwOTI1LjYwCiAgICAgICAgICAgICApCgogICAgICB6azAgPSAoemIxICogendzICsgemExKSAqIHpzYWwgKyB6a3cKCiAgICAgICMgQ29tcHV0ZSB0aGUgcG90ZW50aWFsIGRlbnNpdHkgYW5vbWFseS4KICAgICAgc2lnbWFpX2RlcF9vdXRbamosIGppXSA9ICggenJob3AgLyAoMS4wZTAgLSBwcmVmIC8gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB6azAgLSBwcmVmICogKHphIC0gcHJlZiAqIHpiKSApICkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSB6cmF1MAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogIAo8fGZpbV9lbmR8Pg=="]
["ec547510ca1b32b3eac434532fbcac7e52b2dc08-3","ec547510ca1b32b3eac434532fbcac7e52b2dc08","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojCiMgbW9kdWxlIGZvciBkb2luZyBkZW5zaXR5IHJlbGF0aW5nIHRoaW5ncwojIGFkYXB0ZWQgZnJvbSBDREZUT09MUy9lb3M6CiMgICEhPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojICAhISAgICAgICAgICAgICAgICAgICAgICoqKiAgTU9EVUxFICBlb3MgICoqKgojICAhISBBbGwgcm91dGluZXMgZGVhbGluZyB3aXRoIHRoZSBFcXVhdGlvbiBPZiBTdGF0ZSBvZiBzZWEgd2F0ZXIKIyAgISE9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyAgISEgSGlzdG9yeSA6IDIuMSAgISAgMjAwNCAgIDogSi5NLiBNb2xpbmVzIDogT3JpZ2luYWwgY29kZSBwb3J0ZWQKIyAgISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBORU1PCiMgICEhICAgICAgICAgICAzLjAgICAgMTIvMjAxMCA6IEouTS4gTW9saW5lcyA6IERvY3RvciBub3JtICsgTGljLgojICAhISAgICAgICAgICAgNC4wICA6IDAzLzIwMTcgOiBKLk0uIE1vbGluZXMKIyAgISEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgICEhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojICAhISAgIHJvdXRpbmVzICAgICAgOiBkZXNjcmlwdGlvbgojICAhISAgIHNpZ21hMCAgICAgOiBjb21wdXRlIHNpZ21hLTAgCiMgICEhICAgZW9zYm4yICAgICA6IGNvbXB1dGUgQnJ1bnQgVmFpc3NhbGEgRnJlcXVlbmN5CiMgICEhICAgc2lnbWFpICAgICA6IGNvbXB1dGUgc2lnbWEtaSAoIHJlZmVyZWQgdG8gYSBkZXB0aCBnaXZlbiBpbiBhcmd1bWVudAojICAhISAgIGFsYmV0ICAgICAgOiBDb21wdXRlIHRoZSByYXRpbyBhbHBoYS9iZXRhICggVGhlcm1hbC9oYWxpbmUgZXhhcG5zaW9uKQojICAhISAgIGJldGEgICAgICAgOiBjb21wdXRlIGJldGEgKGhhbGluZSBleHBlbnNpb24pCiMgICEhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKZnJvbSBudW1iYSBpbXBvcnQgaml0CmZyb20gbnVtcHkgaW1wb3J0IHplcm9zLCBzcXJ0LCBhYnMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgICAgISEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyAgICAhISAgICAgICAgICAgICAgICAgICoqKiAgRlVOQ1RJT04gc2lnbWEwICAqKioKIyAgICAhIQojICAgICEhICoqIFB1cnBvc2UgOiBDb21wdXRlIHRoZSBpbiBzaXR1IGRlbnNpdHkgKHJhdGlvIHJoby9yYXUwKSBhbmQgdGhlCiMgICAgISEgICAgICAgICAgICAgIHBvdGVudGlhbCB2b2x1bWljIG1hc3MgKEtnL20zKSBmcm9tIHBvdGVudGlhbCB0ZW1wZXJhdHVyZSAKIyAgICAhISAgICAgICAgICAgICAgYW5kIHNhbGluaXR5IGZpZWxkcyB1c2luZyBhbiBlcXVhdGlvbiBvZiBzdGF0ZSBkZWZpbmVkIAojICAgICEhICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBuYW1lbGlzdCBwYXJhbWV0ZXIgbmVvcy4KIyAgICAhIQojICAgICEhICoqIE1ldGhvZCAgOiBKYWNrZXR0IGFuZCBNY0RvdWdhbGwgKDE5OTQpIGVxdWF0aW9uIG9mIHN0YXRlLgojICAgICEhICAgICAgICAgICAgICBUaGUgaW4gc2l0dSBkZW5zaXR5IGlzIGNvbXB1dGVkIGRpcmVjdGx5IGFzIGEgZnVuY3Rpb24gb2YKIyAgICAhISAgICAgICAgICAgICAgcG90ZW50aWFsIHRlbXBlcmF0dXJlIHJlbGF0aXZlIHRvIHRoZSBzdXJmYWNlICh0aGUgb3BhIHQKIyAgICAhISAgICAgICAgICAgICAgdmFyaWFibGUpLCBzYWx0IGFuZCBwcmVzc3VyZSAoYXNzdW1pbmcgbm8gcHJlc3N1cmUgdmFyaWF0aW9uCiMgICAgISEgICAgICAgICAgICAgIGFsb25nIGdlb3BvdGVudGlhbCBzdXJmYWNlcywgaS5lLiB0aGUgcHJlc3N1cmUgcCBpbiBkZWNpYmFycwojICAgICEhICAgICAgICAgICAgICBpcyBhcHByb3hpbWF0ZWQgYnkgdGhlIGRlcHRoIGluIG1ldGVycy4KIyAgICAhISAgICAgICAgICAgICAgcHJkKHQscyxwKSA9ICggcmhvKHQscyxwKSAtIHJhdTAgKSAvIHJhdTAKIyAgICAhISAgICAgICAgICAgICAgcmhvcCh0LHMpICA9IHJobyh0LHMsMCkKIyAgICAhISAgICAgICAgICAgICAgd2l0aCBwcmVzc3VyZSAgICAgICAgICAgICAgICAgICAgICBwICAgICAgICBkZWNpYmFycwojICAgICEhICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbCB0ZW1wZXJhdHVyZSAgICAgICAgIHQgICAgICAgIGRlZyBjZWxzaXVzCiMgICAgISEgICAgICAgICAgICAgICAgICAgc2FsaW5pdHkgICAgICAgICAgICAgICAgICAgICAgcyAgICAgICAgcHN1CiMgICAgISEgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlIHZvbHVtaWMgbWFzcyAgICAgICAgcmF1MCAgICAga2cvbSoqMwojICAgICEhICAgICAgICAgICAgICAgICAgIGluIHNpdHUgdm9sdW1pYyBtYXNzICAgICAgICAgIHJobyAgICAgIGtnL20qKjMKIyAgICAhISAgICAgICAgICAgICAgICAgICBpbiBzaXR1IGRlbnNpdHkgYW5vbWFsaWUgICAgICBwcmQgICAgICBubyB1bml0cwojICAgICEhCiMgICAgISEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRlZiBzaWdtYTAocHRlbSwgcHNhbCk6CiAgIiIiCiAgQ29tcHV0ZSB0aGUgaW4gc2l0dSBkZW5zaXR5IChyYXRpbyByaG8vcmF1MCkgYW5kIHRoZSBwb3RlbnRpYWwgdm9sdW1pYyBtYXNzCiAgKEtnL20zKSBmcm9tIHBvdGVudGlhbCB0ZW1wZXJhdHVyZSBhbmQgc2FsaW5pdHkgZmllbGRzIHVzaW5nIGFuIGVxdWF0aW9uIG9mCiAgc3RhdGUgZGVmaW5lZCB0aHJvdWdoIHRoZSBuYW1lbGlzdCBwYXJhbWV0ZXIgbmVvcy4KICAKICBKTTogY2hhbmdlZCBpbnB1dCBzbyB0aGF0IGFycmF5IHNpemVzIGJ5IGRlZmF1bHQgbWF0Y2ggdGhlIGlucHV0IGFycmF5IHNpemVzCiAgCiAgSW5wdXRzOgogICAgcHRlbSAgICAgICA9IHBvdGVudGlhbCB0ZW1wZXJhdHVyZSAgICAgICAgIHQgICAgICAgIGRlZyBjZWxzaXVzCiAgICBwc2FsICAgICAgID0gc2FsaW5pdHkgICAgICAgICAgICAgICAgICAgICAgcyAgICAgICAgcHN1CiAgICAKICBSZXR1cm5zOgogICAgc2lnbWEwX291dCA9IGluIHNpdHUgZGVuc2l0eSB1c2luZyBKYWNrZXR0IGFuZCBNY0RvdWdhbGwgKDE5OTQpIGVxdWF0aW9uIG9mIHN0YXRlCiAgICAKICAiIiIKICB6cmF1MCA9IDEwMDAuMAoKICAjIGNvbXB1dGUgdm9sdW1pYyBtYXNzIHB1cmUgd2F0ZXIgYXQgYXRtIHByZXNzdXJlCiAgenIxID0gKCAoICggKCAoIDYuNTM2MzMyZS05ICogcHRlbSAtIDEuMTIwMDgzZS02ICkgKiBwdGVtICsgMS4wMDE2ODVlLTQpICogcHRlbSAgIAogICAgICAgLTkuMDk1MjkwZS0zICkgKiBwdGVtICsgNi43OTM5NTJlLTIgKSAqIHB0ZW0gKyA5OTkuODQyNTk0CiAgICAgICAgKQogICMgc2Vhd2F0ZXIgdm9sdW1pYyBtYXNzIGF0bSBwcmVzc3VyZQogIHpyMiA9ICggKCAoICggNS4zODc1ZS05ICogcHRlbSAtIDguMjQ2N2UtNyApICogcHRlbSArIDcuNjQzOGUtNSApICogcHRlbQogICAgICAgLTQuMDg5OWUtMyApICogcHRlbSArIDAuODI0NDkzCiAgICAgICAgKQogIHpyMyA9ICggLTEuNjU0NmUtNiAqIHB0ZW0gKyAxLjAyMjdlLTQgKSAqIHB0ZW0gLSA1LjcyNDY2ZS0zCiAgenI0ID0gNC44MzE0ZS00CiAgCiAgIyBwb3RlbnRpYWwgdm9sdW1pYyBtYXNzIChyZWZlcmVuY2UgdG8gdGhlIHN1cmZhY2UpCiAgc2lnbWEwX291dCA9ICggenI0ICogcHNhbCArIHpyMyAqIHp3cyArIHpyMiApICogcHNhbCArIHpyMSAtIHpyYXUwCgogIHJldHVybiBzaWdtYTBfb3V0CiAgCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgICAgISEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyAgICAhISAqKiBQdXJwb3NlIDogICBDb21wdXRlIHRoZSAgbmV1dHJhbCB2b2x1bWljIG1hc3MgKGtnL20zKSBmcm9tIGtub3duCiMgICAgISEgICAgICBwb3RlbnRpYWwgdGVtcGVyYXR1cmUgYW5kIHNhbGluaXR5IGZpZWxkcyB1c2luZyBhbiBlcXVhdGlvbiBvZgojICAgICEhICAgICAgc3RhdGUuIAojICAgICEhCiMgICAgISEgKiogTWV0aG9kICA6CiMgICAgISEgICAgICAgTWNEb3VnYWxsIGFuZCBKYWNrZXR0ICgyMDA1KSBlcXVhdGlvbiBvZiBzdGF0ZS4KIyAgICAhISAgICAgICAgICAgICAgcG90ZW50aWFsIHRlbXBlcmF0dXJlICAgICAgICAgdCAgICAgICAgZGVnIGNlbHNpdXMKIyAgICAhISAgICAgICAgICAgICAgc2FsaW5pdHkgICAgICAgICAgICAgICAgICAgICAgcyAgICAgICAgcHN1CiMgICAgISEgICAgICAgICAgICAgIG5ldXRyYWwgZGVuc2l0eSAgICAgICAgICAgICAgIHJobyAgICAgIGtnL20qKjMKIyAgICAhISAgICAgICByZXN1bHQgaXMgbm90IG1hc2tlZCBhdCB0aGlzIHN0YWdlLgojICAgICEhICAgICAgIENoZWNrIHZhbHVlOiByaG8oMjAsMzUpID0gMTAyNC41OTQxNjc1MTE5NyBrZy9tKiozICAtMTAwMC4KIyAgICAhISAgICAgICB0ID0gMjAgZGVnIGNlbGNpdXMsIHM9MzUgcHN1CiMgICAgISEKIyAgICAhISAqKiBSZWZlcmVuY2VzIDogTWNEb3VnYWxsIGFuZCBKYWNrZXR0LCBUaGUgbWF0ZXJpYWwgZGVyaXZhdGl2ZSBvZiBuZXV0cmFsIGRlbnNpdHkKIyAgICAhISAgICAgICAgSm91cm5hbCBvZiBNYXJpbmUgUmVzZWFyY2gsIDYzLCAxNTktMTg1LCAyMDA1CiMgICAgISEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGVmIHNpZ21hbnRyKHB0ZW0sIHBzYWwpOgogICIiIgogIENvbXB1dGUgdGhlIG5ldXRyYWwgdm9sdW1pYyBtYXNzIChrZy9tMykgZnJvbSBrbm93biBwb3RlbnRpYWwgdGVtcGVyYXR1cmUgYW5kCiAgc2FsaW5pdHkgZmllbGRzIHVzaW5nIGFuIGVxdWF0aW9uIG9mIHN0YXRlLiAKICAKICBKTTogVWNoYW5nZWQgaW5wdXQgc28gdGhhdCBhcnJheSBzaXplcyBieSBkZWZhdWx0IG1hdGNoIHRoZSBpbnB1dCBhcnJheSBzaXplcwogIAogIElucHV0czoKICAgIHB0ZW0gICAgICAgICA9IHBvdGVudGlhbCB0ZW1wZXJhdHVyZSAgICAgICAgIHQgICAgICAgIGRlZyBjZWxzaXVzCiAgICBwc2FsICAgICAgICAgPSBzYWxpbml0eSAgICAgICAgICAgICAgICAgICAgICBzICAgICAgICBwc3UKICAgIAogIFJldHVybnM6CiAgICBzaWdtYW50cl9vdXQgPSBuZXV0cmFsIGRlbnNpdHkgdXNpbmcgSmFja2V0dCBhbmQgTWNEb3VnYWxsICgyMDA1KSBlcXVhdGlvbiBvZiBzdGF0ZQogICAgCiAgIiIiCiAgenJhdTAgPSAxMDAwLjAKICAKICB6d3MgPSBzcXJ0KCBhYnMocHNhbCkgKQogIAogICMgTnVtZXJhdG9yCiAgIyBULVBvbHlub21lCiAgenIxID0gKCAoICgtNC4zMTU5MjU1MDg2NzA2NzAzZS00ICogcHRlbSArIDguMTE1NzExODc4MjE3MDA1MWUtMikgKiBwdGVtIAogICAgICAgICAgICsgMi4yMjgwODMyMDY4NDQxMzMxZS0xICkgKiBwdGVtICsgMTAwMi4zMDYzNjg4ODkyNDgwZTAKICAgICAgICAgKQogICMgUy1UIFBvbHlub21lCiAgenIyID0gKCAoLTEuNzA1MjI5ODMzMTQxNDY3NWUtNyAqIHBzYWwgLSAzLjE3MTA2NzU0ODg4NjM5NTJlLTMgKiBwdGVtIAogICAgICAgIC0gMS4wMzA0NTM3NTM5NjkyOTI0ZS00KSAqIHBzYWwKICAgICAgICApCiAgIyBEZW5vbWluYXRvcgogICMgVC1Qb2x5bm9tZQogIHpyMyA9ICggKCAoICgtMi4zODUwMTc4NTU4MjEyMDQ4ZS05ICogcHRlbSAtMS42MjEyNTUyNDcwMzEwOTYxZS03KSAqIHB0ZW0KICAgICAgICArIDcuODcxNzc5OTU2MDU3NzcyNWUtNSApICogcHRlbSArIDQuMzkwNzY5MjY0NzgyNTkwMGUtNSAgKSAqIHB0ZW0gKyAxLjBlMAogICAgICAgICkKICAjIFMtVCBQb2x5bm9tZQogIHpyNCA9ICggKCAoIC0yLjI3NDQ0NTU3MzMzMTc3MDdlLTkgKiBwdGVtICogcHRlbSArIDYuMDM5OTg2NDcxODU5NzM4OGUtNikgKiBwdGVtIAogICAgICAgIC0gNS4xMjY4MTI0Mzk4MTYwNzM0ZS00ICkgKiBwc2FsCiAgICAgICAgKQogICMgUy1UIFBvbHlub21lCiAgenI1ID0gKCAtMS4zNDA5Mzc5NDIwMjE2NjgzZS05ICogcHRlbSAqIHB0ZW0gLSAzLjYxMzg1MzIzMzk3MDMyNjJlLTUpICogcHNhbCAqIHp3cwoKICAjIE5ldXRyYWwgZGVuc2l0eQogIHNpZ21hbnRyX291dCA9ICggenIxICsgenIyICkgLyAoIHpyMyArIHpyNCArIHpyNSApIC0genJhdTAKICAKICByZXR1cm4gc2lnbWFudHJfb3V0CiAgCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgICAgISEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyAgICAhISAqKiBQdXJwb3NlIDogICBDb21wdXRlIHRoZSAgZGVuc2l0eSByZWZlcmVuY2VkIHRvIHByZWYgKHJhdGlvIHJoby9yYXUwKSAKIyAgICAhISAgICAgICBmcm9tIHBvdGVudGlhbCB0ZW1wZXJhdHVyZSBhbmQKIyAgICAhISAgICAgIHNhbGluaXR5IGZpZWxkcyB1c2luZyBhbiBlcXVhdGlvbiBvZiBzdGF0ZSBkZWZpbmVkIHRocm91Z2ggdGhlCiMgICAgISEgICAgIG5hbWVsaXN0IHBhcmFtZXRlciBuZW9zLgojICAgICEhCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyAgICAhISAqKiBNZXRob2QgIDoKIyAgICAhISAgICAgICBKYWNrZXR0IGFuZCBNY0RvdWdhbGwgKDE5OTQpIGVxdWF0aW9uIG9mIHN0YXRlLgojICAgICEhICAgICAgICAgdGhlIGluIHNpdHUgZGVuc2l0eSBpcyBjb21wdXRlZCBkaXJlY3RseSBhcyBhIGZ1bmN0aW9uIG9mCiMgICAgISEgICAgICAgICBwb3RlbnRpYWwgdGVtcGVyYXR1cmUgcmVsYXRpdmUgdG8gdGhlIHN1cmZhY2UgKHRoZSBvcGEgdAo8fGZpbV9lbmR8Pg=="]
["bd6d0f820231ec6593e1873b3701060adc56f859-1","bd6d0f820231ec6593e1873b3701060adc56f859","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCgppbXBvcnQgZnJhcHBlCmZyb20gc2l4IGltcG9ydCBpdGVyaXRlbXMKZnJvbSBmcmFwcGUgaW1wb3J0IF8KZnJvbSBmcmFwcGUudXRpbHMgaW1wb3J0IGNzdHIKZnJvbSBmcmFwcGUudXRpbHMubmVzdGVkc2V0IGltcG9ydCByZWJ1aWxkX3RyZWUKCmRlZiBnZXRfY2hhcnQoY29tcGFueSwgYWJicik6CiAgICBjaGFydCA9IHsKICAgICAgICBfKCJBcHBsaWNhdGlvbiBvZiBGdW5kcyAoQXNzZXN0cykiKTogewogICAgICAgICAgICBfKCJDdXJyZW50IEFzc2V0cyIpOiB7CiAgICAgICAgICAgICAgICBfKCJBY2NvdW50cyBSZWNlaXZhYmxlIik6IHsKICAgICAgICAgICAgICAgICAgICBfKCJEZWJ0b3JzIik6IHsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIF8oIkJhbmsgQWNjb3VudHMiKTogewogICAgICAgICAgICAgICAgICAgICJpc19ncm91cCI6IDEKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBfKCJDYXNoIEluIEhhbmQiKTogewogICAgICAgICAgICAgICAgICAgIF8oIkNhc2giKTogewogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgXygiU3RvY2sgQXNzZXRzIik6IHsKICAgICAgICAgICAgICAgICAgICBfKCJTdG9jayBJbiBIYW5kIik6IHsKICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhY2NvdW50X3R5cGUiOiAiQXNzZXQiCiAgICAgICAgfSwKICAgICAgICBfKCJFeHBlbnNlcyIpOiB7CiAgICAgICAgICAgIF8oIkRpcmVjdCBFeHBlbnNlcyIpOiB7Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIF8oIlN0b2NrIEV4cGVuc2VzIik6IHsKICAgICAgICAgICAgICAgICAgICBfKCJDb3N0IG9mIEdvb2RzIFNvbGQiKTogewogICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIH0KPHxmaW1fZW5kfD4="]
["44d65638a2963e28be3a6906adf562e115408c1d-1","44d65638a2963e28be3a6906adf562e115408c1d","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKEMpIDIwMTMgTHVrYXMgTGFsaW5za3kKIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UsIHNlZSB0aGUgTElDRU5TRSBmaWxlIGZvciBkZXRhaWxzLgoKZnJvbSBzcWxhbGNoZW15Lm9ybSBpbXBvcnQgam9pbmVkbG9hZCwgc3VicXVlcnlsb2FkLCBkZWZlcgpmcm9tIG1iZGF0YS5tb2RlbHMgaW1wb3J0ICgKICAgIFJlY29yZGluZywKKQpmcm9tIG1iZGF0YS5hcGkuZGF0YSBpbXBvcnQgKAogICAgcXVlcnlfcmVjb3JkaW5nLAogICAgbG9hZF9saW5rcywKKQpmcm9tIG1iZGF0YS5hcGkuc2VyaWFsaXplIGltcG9ydCAoCiAgICBzZXJpYWxpemVfcmVjb3JkaW5nLAopCgo8fGZpbV9ob2xlfD4KCiAgICByZWNvcmRpbmdzID0gcXVlcnlfcmVjb3JkaW5nKGRiLCBpbmNsdWRlKS5maWx0ZXIoUmVjb3JkaW5nLmlkLmluXyhpZHMpKS5hbGwoKQoKICAgIGlmIGluY2x1ZGUucmVsYXRpb25zaGlwczoKICAgICAgICBsb2FkX2xpbmtzKGRiLCByZWNvcmRpbmdzLCBpbmNsdWRlLnJlbGF0aW9uc2hpcHMpCgogICAgcmVzdWx0cyA9IHt9CiAgICBmb3IgcmVjb3JkaW5nIGluIHJlY29yZGluZ3M6CiAgICAgICAgcmVzdWx0c1tyZWNvcmRpbmcuaWRdID0gc2VyaWFsaXplX3JlY29yZGluZyhyZWNvcmRpbmcsIGluY2x1ZGUpCiAgICByZXR1cm4gcmVzdWx0cwoKPHxmaW1fc3VmZml4fD4KCmRlZiBnZXRfcmVjb3JkaW5nc19ieV9pZHMoZGIsIGlkcywgaW5jbHVkZSk6CiAgICBpZiBub3QgaWRzOgogICAgICAgIHJldHVybiB7fQo8fGZpbV9lbmR8Pg=="]
["a9c9e113f757fcdd06458bfb24a35df4a8123859-1","a9c9e113f757fcdd06458bfb24a35df4a8123859","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmZyb20gcmFuZG9tIGltcG9ydCB1bmlmb3JtCgppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gY29tbW9uLnZpc3VhbGl6ZXIgaW1wb3J0IFZpc3VhbGl6ZXIKCjx8ZmltX2hvbGV8PgogICAgICAgIHggPSBbW3hdIGZvciB4IGluIG5wLmxpbnNwYWNlKDAsIDEwMCwgMTApXQogICAgICAgIHkgPSBbeFswXSBmb3IgeCBpbiB4XQogICAgICAgIHByZWRpY3RlZCA9IFt4WzBdICsgdW5pZm9ybSgtMSwgMSkgZm9yIHggaW4geF0KICAgICAgICB2aXN1YWxpemVyID0gVmlzdWFsaXplcigpCiAgICAgICAgdmlzdWFsaXplci5wbG90KHgsIHksIHByZWRpY3RlZCkKPHxmaW1fc3VmZml4fD4KCiMgbm9pbnNwZWN0aW9uIFB5TWV0aG9kTWF5QmVTdGF0aWMKY2xhc3MgVmlzdWFsaXplclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgZGVmIHRlc3RfcGxvdF92YWxpZF9pbnB1dChzZWxmKToKPHxmaW1fZW5kfD4="]
["a9c9e113f757fcdd06458bfb24a35df4a8123859-2","a9c9e113f757fcdd06458bfb24a35df4a8123859","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmZyb20gcmFuZG9tIGltcG9ydCB1bmlmb3JtCgppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gY29tbW9uLnZpc3VhbGl6ZXIgaW1wb3J0IFZpc3VhbGl6ZXIKCgojIG5vaW5zcGVjdGlvbiBQeU1ldGhvZE1heUJlU3RhdGljCmNsYXNzIFZpc3VhbGl6ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiB0ZXN0X3Bsb3RfdmFsaWRfaW5wdXQoc2VsZik6CiAgICAgICAgeCA9IFtbeF0gZm9yIHggaW4gbnAubGluc3BhY2UoMCwgMTAwLCAxMCldCiAgICAgICAgeSA9IFt4WzBdIGZvciB4IGluIHhdCiAgICAgICAgcHJlZGljdGVkID0gW3hbMF0gKyB1bmlmb3JtKC0xLCAxKSBmb3IgeCBpbiB4XQogICAgICAgIHZpc3VhbGl6ZXIgPSBWaXN1YWxpemVyKCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHZpc3VhbGl6ZXIucGxvdCh4LCB5LCBwcmVkaWN0ZWQpCjx8ZmltX2VuZHw+"]
["04659a2c73f254d151f2f52850e176ca0cc49332-1","04659a2c73f254d151f2f52850e176ca0cc49332","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyAtKi0gY29kaW5nOiBVVEYtOCAtKi0KIyBDcmVhdGVkIGJ5IFJvYmVydG8gUHJlc3RlCmltcG9ydCBweXRlc3QKZnJvbSBjbGljay50ZXN0aW5nIGltcG9ydCBDbGlSdW5uZXIKPHxmaW1fZW5kfD4="]
["04659a2c73f254d151f2f52850e176ca0cc49332-2","04659a2c73f254d151f2f52850e176ca0cc49332","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogVVRGLTggLSotCiMgQ3JlYXRlZCBieSBSb2JlcnRvIFByZXN0ZQppbXBvcnQgcHl0ZXN0Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBjbGljay50ZXN0aW5nIGltcG9ydCBDbGlSdW5uZXIKZnJvbSBwcmVzdG9vbHMgaW1wb3J0IGNsaQoKPHxmaW1fZW5kfD4="]
["04659a2c73f254d151f2f52850e176ca0cc49332-3","04659a2c73f254d151f2f52850e176ca0cc49332","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogVVRGLTggLSotCiMgQ3JlYXRlZCBieSBSb2JlcnRvIFByZXN0ZQppbXBvcnQgcHl0ZXN0Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBjbGljay50ZXN0aW5nIGltcG9ydCBDbGlSdW5uZXIKZnJvbSBwcmVzdG9vbHMgaW1wb3J0IGNsaQoKPHxmaW1fZW5kfD4="]
["e790e0f4ac6dc0eaed7fa68607f971beabaa2d65-1","e790e0f4ac6dc0eaed7fa68607f971beabaa2d65","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVybGxpYi5wYXJzZQoKZnJvbSBkamFuZ28gaW1wb3J0IHRlbXBsYXRlCgoKcmVnaXN0ZXIgPSB0ZW1wbGF0ZS5MaWJyYXJ5KCkKCgpAcmVnaXN0ZXIuc2ltcGxlX3RhZwpkZWYgbW9kaWZ5X3BhZ2luYXRpb25fcGF0aChmdWxsX3BhdGgsIGtleSwgdmFsdWUpOgogICAgZ2V0X3BhcmFtcyA9IGZ1bGxfcGF0aAogICAgaWYgZ2V0X3BhcmFtcy5maW5kKCc/JykgPiAtMToKICAgICAgICBnZXRfcGFyYW1zID0gZ2V0X3BhcmFtc1tnZXRfcGFyYW1zLmZpbmQoJz8nKSsxOl0KICAgIGlmIGdldF9wYXJhbXMuZmluZCgnIycpID4gLTE6CiAgICAgICAgZ2V0X3BhcmFtcyA9IGdldF9wYXJhbXNbOmdldF9wYXJhbXMuZmluZCgnIycpXQoKICAgIHBhcmFtcyA9IHVybGxpYi5wYXJzZS5wYXJzZV9xcyhnZXRfcGFyYW1zKQogICAgcGFyYW1zW2tleV0gPSBbc3RyKHZhbHVlKV0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcmV0dXJuIHVybGxpYi5wYXJzZS51cmxlbmNvZGUocGFyYW1zLCBkb3NlcT1UcnVlKQo8fGZpbV9lbmR8Pg=="]
["e706a7cd754c4da37362b43ced1925377a8cb1d7-1","e706a7cd754c4da37362b43ced1925377a8cb1d7","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CgppbXBvcnQgb3MucGF0aAoKZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwgZmluZF9wYWNrYWdlcyAgIyB0eXBlOiBpZ25vcmUKCgpkZWYgcmVhZChmaWxlbmFtZTogc3RyKSAtPiBzdHI6CiAgICAiIiJSZWFkIGZpbGVzIHJlbGF0aXZlIHRvIHRoaXMgZmlsZS4iIiIKICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBmaWxlbmFtZSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgd2l0aCBvcGVuKGZ1bGxfcGF0aCwgJ3InKSBhcyBmaDoKICAgICAgICByZXR1cm4gZmgucmVhZCgpCgoKPHxmaW1fZW5kfD4="]
["e706a7cd754c4da37362b43ced1925377a8cb1d7-2","e706a7cd754c4da37362b43ced1925377a8cb1d7","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CgppbXBvcnQgb3MucGF0aAoKZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwgZmluZF9wYWNrYWdlcyAgIyB0eXBlOiBpZ25vcmUKCgpkZWYgcmVhZChmaWxlbmFtZTogc3RyKSAtPiBzdHI6CiAgICAiIiJSZWFkIGZpbGVzIHJlbGF0aXZlIHRvIHRoaXMgZmlsZS4iIiIKICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBmaWxlbmFtZSkKICAgIHdpdGggb3BlbihmdWxsX3BhdGgsICdyJykgYXMgZmg6CiAgICAgICAgcmV0dXJuIGZoLnJlYWQoKQoKCnNldHVwKAogICAgbmFtZT0ndXdob2lzZCcsCiAgICB2ZXJzaW9uPScwLjAuNycsCiAgICBkZXNjcmlwdGlvbj0iVW5pdmVyc2FsIGRvbWFpbiBXSE9JUyBwcm94eSBzZXJ2ZXIuIiwKPHxmaW1faG9sZXw+CiAgICB6aXBfc2FmZT1UcnVlLAoKICAgIHNldHVwX3JlcXVpcmVzPVsKICAgICAgICAnc2V0dXB0b29scycsCiAgICAgICAgJ3doZWVsJywKICAgIF0sCiAgICBpbnN0YWxsX3JlcXVpcmVzPVsKICAgICAgICAndG9ybmFkbycsCiAgICAgICAgJ3JlZGlzPj0zJwogICAgXSwKCiAgICBlbnRyeV9wb2ludHM9ewogICAgICAgICdjb25zb2xlX3NjcmlwdHMnOiAoCiAgICAgICAgICAgICd1d2hvaXNkID0gdXdob2lzZDptYWluJywKICAgICAgICApLAogICAgfSwKCiAgICBzY3JpcHRzPVsnYmluL3J1bl9iYWNrZW5kLnB5JywgJ2Jpbi9zdGFydC5weSddLAoKICAgIGNsYXNzaWZpZXJzPSgKICAgICAgICAnRGV2ZWxvcG1lbnQgU3RhdHVzIDo6IDIgLSBQcmUtQWxwaGEnLAogICAgICAgICdFbnZpcm9ubWVudCA6OiBObyBJbnB1dC9PdXRwdXQgKERhZW1vbiknLAogICAgICAgICdJbnRlbmRlZCBBdWRpZW5jZSA6OiBTeXN0ZW0gQWRtaW5pc3RyYXRvcnMnLAogICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNSVQgTGljZW5zZScsCiAgICAgICAgJ09wZXJhdGluZyBTeXN0ZW0gOjogT1MgSW5kZXBlbmRlbnQnLAogICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24nLAogICAgICAgICdUb3BpYyA6OiBJbnRlcm5ldCcsCiAgICAgICAgJ1RvcGljIDo6IFN5c3RlbSA6OiBOZXR3b3JraW5nJywKICAgICksCgogICAgYXV0aG9yPSdLZWl0aCBHYXVnaGFuJywKICAgIGF1dGhvcl9lbWFpbD0na0BzdGVyZW9jaHJvLm1lJywKKQo8fGZpbV9zdWZmaXh8PgogICAgbG9uZ19kZXNjcmlwdGlvbj1yZWFkKCdSRUFETUUubWQnKSArICJcblxuIiArIHJlYWQoIkNoYW5nZUxvZyIpLAogICAgdXJsPSdodHRwczovL2dpdGh1Yi5jb20va2dhdWdoYW4vdXdob2lzZC8nLAogICAgbGljZW5zZT0nTUlUJywKICAgIHBhY2thZ2VzPWZpbmRfcGFja2FnZXMoZXhjbHVkZT1bJ3Rlc3RzJ10pLAo8fGZpbV9lbmR8Pg=="]
["e706a7cd754c4da37362b43ced1925377a8cb1d7-3","e706a7cd754c4da37362b43ced1925377a8cb1d7","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CgppbXBvcnQgb3MucGF0aAoKZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwgZmluZF9wYWNrYWdlcyAgIyB0eXBlOiBpZ25vcmUKCgpkZWYgcmVhZChmaWxlbmFtZTogc3RyKSAtPiBzdHI6CiAgICAiIiJSZWFkIGZpbGVzIHJlbGF0aXZlIHRvIHRoaXMgZmlsZS4iIiIKICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBmaWxlbmFtZSkKICAgIHdpdGggb3BlbihmdWxsX3BhdGgsICdyJykgYXMgZmg6CiAgICAgICAgcmV0dXJuIGZoLnJlYWQoKQoKCnNldHVwKAogICAgbmFtZT0ndXdob2lzZCcsCiAgICB2ZXJzaW9uPScwLjAuNycsCiAgICBkZXNjcmlwdGlvbj0iVW5pdmVyc2FsIGRvbWFpbiBXSE9JUyBwcm94eSBzZXJ2ZXIuIiwKICAgIGxvbmdfZGVzY3JpcHRpb249cmVhZCgnUkVBRE1FLm1kJykgKyAiXG5cbiIgKyByZWFkKCJDaGFuZ2VMb2ciKSwKICAgIHVybD0naHR0cHM6Ly9naXRodWIuY29tL2tnYXVnaGFuL3V3aG9pc2QvJywKICAgIGxpY2Vuc2U9J01JVCcsCiAgICBwYWNrYWdlcz1maW5kX3BhY2thZ2VzKGV4Y2x1ZGU9Wyd0ZXN0cyddKSwKICAgIHppcF9zYWZlPVRydWUsCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBzZXR1cF9yZXF1aXJlcz1bCiAgICAgICAgJ3NldHVwdG9vbHMnLAogICAgICAgICd3aGVlbCcsCiAgICBdLAo8fGZpbV9lbmR8Pg=="]
["e706a7cd754c4da37362b43ced1925377a8cb1d7-4","e706a7cd754c4da37362b43ced1925377a8cb1d7","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CgppbXBvcnQgb3MucGF0aAoKZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwgZmluZF9wYWNrYWdlcyAgIyB0eXBlOiBpZ25vcmUKCgpkZWYgcmVhZChmaWxlbmFtZTogc3RyKSAtPiBzdHI6CiAgICAiIiJSZWFkIGZpbGVzIHJlbGF0aXZlIHRvIHRoaXMgZmlsZS4iIiIKICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBmaWxlbmFtZSkKICAgIHdpdGggb3BlbihmdWxsX3BhdGgsICdyJykgYXMgZmg6CiAgICAgICAgcmV0dXJuIGZoLnJlYWQoKQoKCnNldHVwKAogICAgbmFtZT0ndXdob2lzZCcsCiAgICB2ZXJzaW9uPScwLjAuNycsCiAgICBkZXNjcmlwdGlvbj0iVW5pdmVyc2FsIGRvbWFpbiBXSE9JUyBwcm94eSBzZXJ2ZXIuIiwKICAgIGxvbmdfZGVzY3JpcHRpb249cmVhZCgnUkVBRE1FLm1kJykgKyAiXG5cbiIgKyByZWFkKCJDaGFuZ2VMb2ciKSwKICAgIHVybD0naHR0cHM6Ly9naXRodWIuY29tL2tnYXVnaGFuL3V3aG9pc2QvJywKICAgIGxpY2Vuc2U9J01JVCcsCiAgICBwYWNrYWdlcz1maW5kX3BhY2thZ2VzKGV4Y2x1ZGU9Wyd0ZXN0cyddKSwKICAgIHppcF9zYWZlPVRydWUsCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBzZXR1cF9yZXF1aXJlcz1bCiAgICAgICAgJ3NldHVwdG9vbHMnLAogICAgICAgICd3aGVlbCcsCiAgICBdLAo8fGZpbV9lbmR8Pg=="]
["e706a7cd754c4da37362b43ced1925377a8cb1d7-5","e706a7cd754c4da37362b43ced1925377a8cb1d7","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CgppbXBvcnQgb3MucGF0aAoKZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwgZmluZF9wYWNrYWdlcyAgIyB0eXBlOiBpZ25vcmUKCgpkZWYgcmVhZChmaWxlbmFtZTogc3RyKSAtPiBzdHI6CiAgICAiIiJSZWFkIGZpbGVzIHJlbGF0aXZlIHRvIHRoaXMgZmlsZS4iIiIKICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBmaWxlbmFtZSkKICAgIHdpdGggb3BlbihmdWxsX3BhdGgsICdyJykgYXMgZmg6CiAgICAgICAgcmV0dXJuIGZoLnJlYWQoKQoKCnNldHVwKAogICAgbmFtZT0ndXdob2lzZCcsCiAgICB2ZXJzaW9uPScwLjAuNycsCiAgICBkZXNjcmlwdGlvbj0iVW5pdmVyc2FsIGRvbWFpbiBXSE9JUyBwcm94eSBzZXJ2ZXIuIiwKICAgIGxvbmdfZGVzY3JpcHRpb249cmVhZCgnUkVBRE1FLm1kJykgKyAiXG5cbiIgKyByZWFkKCJDaGFuZ2VMb2ciKSwKICAgIHVybD0naHR0cHM6Ly9naXRodWIuY29tL2tnYXVnaGFuL3V3aG9pc2QvJywKPHxmaW1faG9sZXw+CiAgICBzZXR1cF9yZXF1aXJlcz1bCiAgICAgICAgJ3NldHVwdG9vbHMnLAogICAgICAgICd3aGVlbCcsCiAgICBdLAogICAgaW5zdGFsbF9yZXF1aXJlcz1bCiAgICAgICAgJ3Rvcm5hZG8nLAogICAgICAgICdyZWRpcz49MycKICAgIF0sCgogICAgZW50cnlfcG9pbnRzPXsKICAgICAgICAnY29uc29sZV9zY3JpcHRzJzogKAogICAgICAgICAgICAndXdob2lzZCA9IHV3aG9pc2Q6bWFpbicsCiAgICAgICAgKSwKICAgIH0sCgogICAgc2NyaXB0cz1bJ2Jpbi9ydW5fYmFja2VuZC5weScsICdiaW4vc3RhcnQucHknXSwKCiAgICBjbGFzc2lmaWVycz0oCiAgICAgICAgJ0RldmVsb3BtZW50IFN0YXR1cyA6OiAyIC0gUHJlLUFscGhhJywKICAgICAgICAnRW52aXJvbm1lbnQgOjogTm8gSW5wdXQvT3V0cHV0IChEYWVtb24pJywKICAgICAgICAnSW50ZW5kZWQgQXVkaWVuY2UgOjogU3lzdGVtIEFkbWluaXN0cmF0b3JzJywKICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTUlUIExpY2Vuc2UnLAogICAgICAgICdPcGVyYXRpbmcgU3lzdGVtIDo6IE9TIEluZGVwZW5kZW50JywKICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uJywKICAgICAgICAnVG9waWMgOjogSW50ZXJuZXQnLAogICAgICAgICdUb3BpYyA6OiBTeXN0ZW0gOjogTmV0d29ya2luZycsCiAgICApLAoKICAgIGF1dGhvcj0nS2VpdGggR2F1Z2hhbicsCiAgICBhdXRob3JfZW1haWw9J2tAc3RlcmVvY2hyby5tZScsCikKPHxmaW1fc3VmZml4fD4KICAgIGxpY2Vuc2U9J01JVCcsCiAgICBwYWNrYWdlcz1maW5kX3BhY2thZ2VzKGV4Y2x1ZGU9Wyd0ZXN0cyddKSwKICAgIHppcF9zYWZlPVRydWUsCgo8fGZpbV9lbmR8Pg=="]
["e5fcf6e5a52bbabf49e899604f87957b8bc20eec-1","e5fcf6e5a52bbabf49e899604f87957b8bc20eec","PHxmaW1fcHJlZml4fD4KJycnClNjcmlwdCB0byBoZWxwIGNoZWNrIG9uIGFsbCB0aGUgaW1wb3J0YW50L2NvbXBsZXggZnVuY3Rpb25zIGluIGNodXJuX2xpYnJhcnkKQXV0aG9yOiBIYXJzaGl0IFNhdGkKRGF0ZTogMTAtMDktMjAyMQonJycKZnJvbSBvcyBpbXBvcnQgcGF0aAppbXBvcnQgbG9nZ2luZwppbXBvcnQgY2h1cm5fbGlicmFyeSBhcyBjbAoKbG9nZ2luZy5iYXNpY0NvbmZpZygKICAgIGZpbGVuYW1lPScuL2xvZ3MvY2h1cm5fbGlicmFyeS5sb2cnLAogICAgbGV2ZWw9bG9nZ2luZy5JTkZPLAogICAgZmlsZW1vZGU9J3cnLAogICAgZm9ybWF0PSclKG5hbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcycpCgoKPHxmaW1faG9sZXw+CiAgICBsb2dnaW5nLmluZm8oIlRlc3RpbmcgaW1wb3J0X2RhdGEoKSIpCiAgICB0cnk6CiAgICAgICAgZGYgPSBpbXBvcnRfZGF0YSgiLi9kYXRhL0JhbmtDaHVybmVycy5jc3YiKQogICAgICAgIGxvZ2dpbmcuaW5mbygiU1VDQ0VTUyA6IFRlc3RpbmcgaW1wb3J0X2RhdGEgIikKICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvciBhcyBlcnI6CiAgICAgICAgbG9nZ2luZy5lcnJvcigiVGVzdGluZyBpbXBvcnRfZGF0YTogVGhlIGZpbGUgd2Fzbid0IGZvdW5kIikKICAgICAgICByYWlzZSBlcnIKCiAgICB0cnk6CiAgICAgICAgYXNzZXJ0IGRmLnNoYXBlWzBdID4gMAogICAgICAgIGFzc2VydCBkZi5zaGFwZVsxXSA+IDAKICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvciBhcyBlcnI6CiAgICAgICAgbG9nZ2luZy5lcnJvcigKICAgICAgICAgICAgIlRlc3RpbmcgaW1wb3J0X2RhdGE6IFRoZSBmaWxlIGRvZXNuJ3QgYXBwZWFyIHRvIGhhdmUgcm93cyBhbmQgY29sdW1ucyIpCiAgICAgICAgcmFpc2UgZXJyCgoKZGVmIHRlc3RfZWRhKCk6CiAgICAnJycKICAgIHRlc3QgcGVyZm9ybSBlZGEgZnVuY3Rpb24KICAgICcnJwogICAgbG9nZ2luZy5pbmZvKCJUZXN0aW5nIHBlcmZvcm1fZWRhKCkiKQogICAgZWRhX2NvbCA9IFsnSW5jb21lX0NhdGVnb3J5JywgJ0VkdWNhdGlvbl9MZXZlbCcsCiAgICAgICAgICAgICAgICdNYXJpdGFsX1N0YXR1cycsICdDYXJkX0NhdGVnb3J5JywKICAgICAgICAgICAgICAgJ0dlbmRlcicsICdDdXN0b21lcl9BZ2UnLAogICAgICAgICAgICAgICAnVG90YWxfVHJhbnNfQ3QnLCAnQXR0cml0aW9uX0ZsYWcnXQogICAgZm9yIGNvbCBpbiBlZGFfY29sOgogICAgICAgIHRyeToKICAgICAgICAgICAgYXNzZXJ0IHBhdGguZXhpc3RzKCIuL2ltYWdlcy9lZGEve31fZGlzdHJpYnV0aW9uLmpwZyIuZm9ybWF0KGNvbCkpCiAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygiU1VDQ0VTUyA6IHt9X2Rpc3RyaWJ1dGlvbi5qcGcgcHJlc2VudCEgIi5mb3JtYXQoY29sKSkKICAgICAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3IgYXMgZXJyOgogICAgICAgICAgICBsb2dnaW5nLmVycm9yKAogICAgICAgICAgICAgICAgIkZBSUxJVVJFIDogQ2FuJ3QgZmluZCBpbWFnZSBpbiBwYXRoIG5hbWVkIHt9X2Rpc3RyaWJ1dGlvbi5qcGcgIi5mb3JtYXQoY29sKSkKICAgICAgICAgICAgcmFpc2UgZXJyCgogICAgZ3JhcGhfdHlwZXMgPSBbJ2hlYXRtYXAnLCAnaGlzdHBsb3RzJ10KICAgIGZvciBncmFwaCBpbiBncmFwaF90eXBlczoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGFzc2VydCBwYXRoLmV4aXN0cygiLi9pbWFnZXMvZWRhL251bWVyaWNhbF97fS5qcGciLmZvcm1hdChncmFwaCkpCiAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygiU1VDQ0VTUyA6IG51bWVyaWNhbF97fS5qcGcgcHJlc2VudCEiLmZvcm1hdChncmFwaCkpCiAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yIGFzIGVycjoKICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigKICAgICAgICAgICAgICAgICJGQUlMSVVSRSA6IENhbid0IGZpbmQgaW1hZ2UgaW4gcGF0aCBuYW1lZCBudW1lcmljYWxfe30uanBnIi5mb3JtYXQoZ3JhcGgpKQogICAgICAgICAgICByYWlzZSBlcnIKCgpkZWYgdGVzdF9wZXJmb3JtX2ZlYXR1cmVfZW5naW5lZXJpbmcoKToKICAgICcnJwogICAgdGVzdCBwZXJmb3JtX2ZlYXR1cmVfZW5naW5lZXJpbmcKICAgICcnJwogICAgZmVhdF9pbXBfbW9kZWwgPSBbIlJhbmRvbV9Gb3Jlc3QiLCAiTG9naXN0aWNfUmVncmVzc2lvbiIsICJYR0Jvb3N0Il0KICAgIGxvZ2dpbmcuaW5mbygiVGVzdGluZyBwZXJmb3JtX2ZlYXR1cmVfZW5naW5lZXJpbmcoKSIpCiAgICBmb3Iga2V5IGluIGZlYXRfaW1wX21vZGVsOgogICAgICAgIHRyeToKICAgICAgICAgICAgYXNzZXJ0IHBhdGguZXhpc3RzKCIuL2ltYWdlcy9yZXN1bHRzL3t9LmpwZyIuZm9ybWF0KGtleSkpCiAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygiU1VDQ0VTUyA6IHt9LmpwZyBwcmVzZW50ISIuZm9ybWF0KGtleSkpCiAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yIGFzIGVycjoKICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiSW1hZ2Ugbm90IGZvdW5kIGluIHBhdGggbmFtZWQge30uanBnIi5mb3JtYXQoa2V5KSkKICAgICAgICAgICAgcmFpc2UgZXJyCgoKZGVmIHRlc3RfdHJhaW5fbW9kZWxzKCk6CiAgICAnJycKICAgIHRlc3QgdHJhaW5fbW9kZWxzCiAgICAnJycKICAgIGxvZ2dpbmcuaW5mbygiVGVzdGluZyBwZXJmb3JtX2ZlYXR1cmVfZW5naW5lZXJpbmcoKSIpCiAgICBtb2RlbHMgPSBbImxvZ2lzdGljIiwgInJmYyIsICJ4Z2Jvb3N0Il0KICAgIGZvciBtb2RlbCBpbiBtb2RlbHM6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBhc3NlcnQgcGF0aC5leGlzdHMoIi4vbW9kZWxzL3t9X21vZGVsLnBrbCIuZm9ybWF0KG1vZGVsKSkKICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJTVUNDRVNTIDoge31fbW9kZWwucGtsIHByZXNlbnQhIi5mb3JtYXQobW9kZWwpKQogICAgICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvciBhcyBlcnI6CiAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIk1vZGVsIG5vdCBmb3VuZCBpbiBwYXRoIG5hbWVkIHt9LmpwZyIuZm9ybWF0KG1vZGVsKSkKICAgICAgICAgICAgcmFpc2UgZXJyCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHRlc3RfaW1wb3J0KGNsLmltcG9ydF9kYXRhKQogICAgdGVzdF9lZGEoKQogICAgdGVzdF9wZXJmb3JtX2ZlYXR1cmVfZW5naW5lZXJpbmcoKQogICAgdGVzdF90cmFpbl9tb2RlbHMoKQo8fGZpbV9zdWZmaXh8PgpkZWYgdGVzdF9pbXBvcnQoaW1wb3J0X2RhdGEpOgogICAgJycnCiAgICB0ZXN0IGRhdGEgaW1wb3J0IC0gdGhpcyBleGFtcGxlIGlzIGNvbXBsZXRlZCBmb3IgeW91IHRvIGFzc2lzdCB3aXRoIHRoZSBvdGhlciB0ZXN0IGZ1bmN0aW9ucwogICAgJycnCjx8ZmltX2VuZHw+"]
["e5fcf6e5a52bbabf49e899604f87957b8bc20eec-2","e5fcf6e5a52bbabf49e899604f87957b8bc20eec","PHxmaW1fcHJlZml4fD4KJycnClNjcmlwdCB0byBoZWxwIGNoZWNrIG9uIGFsbCB0aGUgaW1wb3J0YW50L2NvbXBsZXggZnVuY3Rpb25zIGluIGNodXJuX2xpYnJhcnkKQXV0aG9yOiBIYXJzaGl0IFNhdGkKRGF0ZTogMTAtMDktMjAyMQonJycKZnJvbSBvcyBpbXBvcnQgcGF0aAppbXBvcnQgbG9nZ2luZwppbXBvcnQgY2h1cm5fbGlicmFyeSBhcyBjbAoKbG9nZ2luZy5iYXNpY0NvbmZpZygKICAgIGZpbGVuYW1lPScuL2xvZ3MvY2h1cm5fbGlicmFyeS5sb2cnLAogICAgbGV2ZWw9bG9nZ2luZy5JTkZPLAogICAgZmlsZW1vZGU9J3cnLAogICAgZm9ybWF0PSclKG5hbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcycpCgoKZGVmIHRlc3RfaW1wb3J0KGltcG9ydF9kYXRhKToKICAgICcnJwogICAgdGVzdCBkYXRhIGltcG9ydCAtIHRoaXMgZXhhbXBsZSBpcyBjb21wbGV0ZWQgZm9yIHlvdSB0byBhc3Npc3Qgd2l0aCB0aGUgb3RoZXIgdGVzdCBmdW5jdGlvbnMKICAgICcnJwogICAgbG9nZ2luZy5pbmZvKCJUZXN0aW5nIGltcG9ydF9kYXRhKCkiKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICB0cnk6CiAgICAgICAgZGYgPSBpbXBvcnRfZGF0YSgiLi9kYXRhL0JhbmtDaHVybmVycy5jc3YiKQogICAgICAgIGxvZ2dpbmcuaW5mbygiU1VDQ0VTUyA6IFRlc3RpbmcgaW1wb3J0X2RhdGEgIikKICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvciBhcyBlcnI6Cjx8ZmltX2VuZHw+"]
["e5fcf6e5a52bbabf49e899604f87957b8bc20eec-3","e5fcf6e5a52bbabf49e899604f87957b8bc20eec","PHxmaW1fcHJlZml4fD4KJycnClNjcmlwdCB0byBoZWxwIGNoZWNrIG9uIGFsbCB0aGUgaW1wb3J0YW50L2NvbXBsZXggZnVuY3Rpb25zIGluIGNodXJuX2xpYnJhcnkKQXV0aG9yOiBIYXJzaGl0IFNhdGkKRGF0ZTogMTAtMDktMjAyMQonJycKZnJvbSBvcyBpbXBvcnQgcGF0aAppbXBvcnQgbG9nZ2luZwppbXBvcnQgY2h1cm5fbGlicmFyeSBhcyBjbAoKbG9nZ2luZy5iYXNpY0NvbmZpZygKICAgIGZpbGVuYW1lPScuL2xvZ3MvY2h1cm5fbGlicmFyeS5sb2cnLAogICAgbGV2ZWw9bG9nZ2luZy5JTkZPLAogICAgZmlsZW1vZGU9J3cnLAogICAgZm9ybWF0PSclKG5hbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcycpCgoKZGVmIHRlc3RfaW1wb3J0KGltcG9ydF9kYXRhKToKICAgICcnJwogICAgdGVzdCBkYXRhIGltcG9ydCAtIHRoaXMgZXhhbXBsZSBpcyBjb21wbGV0ZWQgZm9yIHlvdSB0byBhc3Npc3Qgd2l0aCB0aGUgb3RoZXIgdGVzdCBmdW5jdGlvbnMKICAgICcnJwogICAgbG9nZ2luZy5pbmZvKCJUZXN0aW5nIGltcG9ydF9kYXRhKCkiKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICB0cnk6CiAgICAgICAgZGYgPSBpbXBvcnRfZGF0YSgiLi9kYXRhL0JhbmtDaHVybmVycy5jc3YiKQogICAgICAgIGxvZ2dpbmcuaW5mbygiU1VDQ0VTUyA6IFRlc3RpbmcgaW1wb3J0X2RhdGEgIikKICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvciBhcyBlcnI6Cjx8ZmltX2VuZHw+"]
["e5fcf6e5a52bbabf49e899604f87957b8bc20eec-4","e5fcf6e5a52bbabf49e899604f87957b8bc20eec","PHxmaW1fcHJlZml4fD4KJycnClNjcmlwdCB0byBoZWxwIGNoZWNrIG9uIGFsbCB0aGUgaW1wb3J0YW50L2NvbXBsZXggZnVuY3Rpb25zIGluIGNodXJuX2xpYnJhcnkKQXV0aG9yOiBIYXJzaGl0IFNhdGkKRGF0ZTogMTAtMDktMjAyMQonJycKZnJvbSBvcyBpbXBvcnQgcGF0aAppbXBvcnQgbG9nZ2luZwppbXBvcnQgY2h1cm5fbGlicmFyeSBhcyBjbAoKbG9nZ2luZy5iYXNpY0NvbmZpZygKICAgIGZpbGVuYW1lPScuL2xvZ3MvY2h1cm5fbGlicmFyeS5sb2cnLAogICAgbGV2ZWw9bG9nZ2luZy5JTkZPLAogICAgZmlsZW1vZGU9J3cnLAogICAgZm9ybWF0PSclKG5hbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcycpCgoKZGVmIHRlc3RfaW1wb3J0KGltcG9ydF9kYXRhKToKICAgICcnJwogICAgdGVzdCBkYXRhIGltcG9ydCAtIHRoaXMgZXhhbXBsZSBpcyBjb21wbGV0ZWQgZm9yIHlvdSB0byBhc3Npc3Qgd2l0aCB0aGUgb3RoZXIgdGVzdCBmdW5jdGlvbnMKICAgICcnJwogICAgbG9nZ2luZy5pbmZvKCJUZXN0aW5nIGltcG9ydF9kYXRhKCkiKQogICAgdHJ5OgogICAgICAgIGRmID0gaW1wb3J0X2RhdGEoIi4vZGF0YS9CYW5rQ2h1cm5lcnMuY3N2IikKICAgICAgICBsb2dnaW5nLmluZm8oIlNVQ0NFU1MgOiBUZXN0aW5nIGltcG9ydF9kYXRhICIpCiAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3IgYXMgZXJyOgogICAgICAgIGxvZ2dpbmcuZXJyb3IoIlRlc3RpbmcgaW1wb3J0X2RhdGE6IFRoZSBmaWxlIHdhc24ndCBmb3VuZCIpCiAgICAgICAgcmFpc2UgZXJyCgogICAgdHJ5OgogICAgICAgIGFzc2VydCBkZi5zaGFwZVswXSA+IDAKICAgICAgICBhc3NlcnQgZGYuc2hhcGVbMV0gPiAwCiAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3IgYXMgZXJyOgogICAgICAgIGxvZ2dpbmcuZXJyb3IoCiAgICAgICAgICAgICJUZXN0aW5nIGltcG9ydF9kYXRhOiBUaGUgZmlsZSBkb2Vzbid0IGFwcGVhciB0byBoYXZlIHJvd3MgYW5kIGNvbHVtbnMiKQogICAgICAgIHJhaXNlIGVycgoKCmRlZiB0ZXN0X2VkYSgpOgogICAgJycnCiAgICB0ZXN0IHBlcmZvcm0gZWRhIGZ1bmN0aW9uCiAgICAnJycKICAgIGxvZ2dpbmcuaW5mbygiVGVzdGluZyBwZXJmb3JtX2VkYSgpIikKICAgIGVkYV9jb2wgPSBbJ0luY29tZV9DYXRlZ29yeScsICdFZHVjYXRpb25fTGV2ZWwnLAogICAgICAgICAgICAgICAnTWFyaXRhbF9TdGF0dXMnLCAnQ2FyZF9DYXRlZ29yeScsCiAgICAgICAgICAgICAgICdHZW5kZXInLCAnQ3VzdG9tZXJfQWdlJywKICAgICAgICAgICAgICAgJ1RvdGFsX1RyYW5zX0N0JywgJ0F0dHJpdGlvbl9GbGFnJ10KICAgIGZvciBjb2wgaW4gZWRhX2NvbDoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGFzc2VydCBwYXRoLmV4aXN0cygiLi9pbWFnZXMvZWRhL3t9X2Rpc3RyaWJ1dGlvbi5qcGciLmZvcm1hdChjb2wpKQogICAgICAgICAgICBsb2dnaW5nLmluZm8oIlNVQ0NFU1MgOiB7fV9kaXN0cmlidXRpb24uanBnIHByZXNlbnQhICIuZm9ybWF0KGNvbCkpCiAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yIGFzIGVycjoKICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigKICAgICAgICAgICAgICAgICJGQUlMSVVSRSA6IENhbid0IGZpbmQgaW1hZ2UgaW4gcGF0aCBuYW1lZCB7fV9kaXN0cmlidXRpb24uanBnICIuZm9ybWF0KGNvbCkpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgcmFpc2UgZXJyCgo8fGZpbV9lbmR8Pg=="]
["e5fcf6e5a52bbabf49e899604f87957b8bc20eec-5","e5fcf6e5a52bbabf49e899604f87957b8bc20eec","PHxmaW1fcHJlZml4fD4KJycnClNjcmlwdCB0byBoZWxwIGNoZWNrIG9uIGFsbCB0aGUgaW1wb3J0YW50L2NvbXBsZXggZnVuY3Rpb25zIGluIGNodXJuX2xpYnJhcnkKQXV0aG9yOiBIYXJzaGl0IFNhdGkKRGF0ZTogMTAtMDktMjAyMQonJycKZnJvbSBvcyBpbXBvcnQgcGF0aAppbXBvcnQgbG9nZ2luZwppbXBvcnQgY2h1cm5fbGlicmFyeSBhcyBjbAoKbG9nZ2luZy5iYXNpY0NvbmZpZygKICAgIGZpbGVuYW1lPScuL2xvZ3MvY2h1cm5fbGlicmFyeS5sb2cnLAogICAgbGV2ZWw9bG9nZ2luZy5JTkZPLAogICAgZmlsZW1vZGU9J3cnLAogICAgZm9ybWF0PSclKG5hbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcycpCgoKZGVmIHRlc3RfaW1wb3J0KGltcG9ydF9kYXRhKToKICAgICcnJwogICAgdGVzdCBkYXRhIGltcG9ydCAtIHRoaXMgZXhhbXBsZSBpcyBjb21wbGV0ZWQgZm9yIHlvdSB0byBhc3Npc3Qgd2l0aCB0aGUgb3RoZXIgdGVzdCBmdW5jdGlvbnMKICAgICcnJwogICAgbG9nZ2luZy5pbmZvKCJUZXN0aW5nIGltcG9ydF9kYXRhKCkiKQogICAgdHJ5OgogICAgICAgIGRmID0gaW1wb3J0X2RhdGEoIi4vZGF0YS9CYW5rQ2h1cm5lcnMuY3N2IikKICAgICAgICBsb2dnaW5nLmluZm8oIlNVQ0NFU1MgOiBUZXN0aW5nIGltcG9ydF9kYXRhICIpCiAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3IgYXMgZXJyOgogICAgICAgIGxvZ2dpbmcuZXJyb3IoIlRlc3RpbmcgaW1wb3J0X2RhdGE6IFRoZSBmaWxlIHdhc24ndCBmb3VuZCIpCiAgICAgICAgcmFpc2UgZXJyCgogICAgdHJ5OgogICAgICAgIGFzc2VydCBkZi5zaGFwZVswXSA+IDAKICAgICAgICBhc3NlcnQgZGYuc2hhcGVbMV0gPiAwCiAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3IgYXMgZXJyOgogICAgICAgIGxvZ2dpbmcuZXJyb3IoCiAgICAgICAgICAgICJUZXN0aW5nIGltcG9ydF9kYXRhOiBUaGUgZmlsZSBkb2Vzbid0IGFwcGVhciB0byBoYXZlIHJvd3MgYW5kIGNvbHVtbnMiKQogICAgICAgIHJhaXNlIGVycgoKCmRlZiB0ZXN0X2VkYSgpOgogICAgJycnCiAgICB0ZXN0IHBlcmZvcm0gZWRhIGZ1bmN0aW9uCiAgICAnJycKICAgIGxvZ2dpbmcuaW5mbygiVGVzdGluZyBwZXJmb3JtX2VkYSgpIikKICAgIGVkYV9jb2wgPSBbJ0luY29tZV9DYXRlZ29yeScsICdFZHVjYXRpb25fTGV2ZWwnLAogICAgICAgICAgICAgICAnTWFyaXRhbF9TdGF0dXMnLCAnQ2FyZF9DYXRlZ29yeScsCiAgICAgICAgICAgICAgICdHZW5kZXInLCAnQ3VzdG9tZXJfQWdlJywKICAgICAgICAgICAgICAgJ1RvdGFsX1RyYW5zX0N0JywgJ0F0dHJpdGlvbl9GbGFnJ10KICAgIGZvciBjb2wgaW4gZWRhX2NvbDoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGFzc2VydCBwYXRoLmV4aXN0cygiLi9pbWFnZXMvZWRhL3t9X2Rpc3RyaWJ1dGlvbi5qcGciLmZvcm1hdChjb2wpKQogICAgICAgICAgICBsb2dnaW5nLmluZm8oIlNVQ0NFU1MgOiB7fV9kaXN0cmlidXRpb24uanBnIHByZXNlbnQhICIuZm9ybWF0KGNvbCkpCiAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yIGFzIGVycjoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBsb2dnaW5nLmVycm9yKAogICAgICAgICAgICAgICAgIkZBSUxJVVJFIDogQ2FuJ3QgZmluZCBpbWFnZSBpbiBwYXRoIG5hbWVkIHt9X2Rpc3RyaWJ1dGlvbi5qcGcgIi5mb3JtYXQoY29sKSkKICAgICAgICAgICAgcmFpc2UgZXJyCgo8fGZpbV9lbmR8Pg=="]
["e7995eea7be7bfecc5448136377888c3d2d91edf-1","e7995eea7be7bfecc5448136377888c3d2d91edf","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMKIyAgQ29weXJpZ2h0IDIwMTQgLSAyMDE2IFRoZSBCQ0UgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQojICBmb3VuZCBpbiB0aGUgbGljZW5zZS50eHQgZmlsZS4KIwoKaW1wb3J0IGJjZS5kZWNvbXBpbGVyLmNlLmNvbGxlY3Rfc3ltYm9sIGFzIF9kZWNvbXBpbGVyX2NlX2NzbQppbXBvcnQgYmNlLmRlY29tcGlsZXIuY2UudG9fYmNlIGFzIF9kZWNvbXBpbGVyX2NlX3RvX2JjZQppbXBvcnQgYmNlLmRlY29tcGlsZXIuY2UudG9fbWF0aG1sIGFzIF9kZWNvbXBpbGVyX2NlX3RvX21hdGhtbAppbXBvcnQgYmNlLmxvZ2ljLmJhbGFuY2VyLmNoZWNrZXIgYXMgX2JjZV9jaGVjawppbXBvcnQgYmNlLmxvZ2ljLmJhbGFuY2VyLm1haW4gYXMgX2JjZV9tYWluCmltcG9ydCBiY2UubG9naWMuY29tbW9uLmVycm9yIGFzIF9sZQppbXBvcnQgYmNlLnBhcnNlci5jZS5wYXJzZXIgYXMgX2NlX3BhcnNlcgppbXBvcnQgYmNlLnBhcnNlci5jZS5zdWJzdGl0dXRpb24gYXMgX2NlX3N1YnN0CmltcG9ydCBiY2UucGFyc2VyLmNlLnRva2VuIGFzIF9jZV90b2tlbgppbXBvcnQgYmNlLnBhcnNlci5jb21tb24uZXJyb3IgYXMgX3BlCmltcG9ydCBiY2UudXRpbHMuaW5wdXRfY2hlY2tlciBhcyBfaW5wdXRfY2hrCmltcG9ydCBiY2Uub3B0aW9uIGFzIF9vcHQKCkRFQ09NUElMRVJfVEVYVCA9IDEKREVDT01QSUxFUl9NQVRITUwgPSAyCkRFQ09NUElMRVJfQ09MTEVDVF9TWU1CT0xTID0gMwoKCmNsYXNzIFBhcnNlckVycm9yV3JhcHBlcihFeGNlcHRpb24pOgogICAgIiIiUGFyc2VyIGVycm9yLiIiIgogICAgcGFzcwoKCmNsYXNzIExvZ2ljRXJyb3JXcmFwcGVyKEV4Y2VwdGlvbik6CiAgICAiIiJMb2dpYyBlcnJvci4iIiIKICAgIHBhc3MKCgpjbGFzcyBJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uKEV4Y2VwdGlvbik6CiAgICAiIiJJbnZhbGlkIGNoYXJhY3RlciBleGNlcHRpb24uIiIiCiAgICBwYXNzCgoKY2xhc3MgU3Vic3RpdHV0aW9uRXJyb3JXcmFwcGVyKEV4Y2VwdGlvbik6CiAgICAiIiJTdWJzdGl0dXRpb24gZXJyb3IuIiIiCiAgICBwYXNzCgoKZGVmIGJhbGFuY2VfY2hlbWljYWxfZXF1YXRpb24oZXhwcmVzc2lvbiwgZGVjb21waWxlcnMsIG9wdGlvbnMpOgogICAgIiIiQmFsYW5jZSBhIGNoZW1pY2FsIGVxdWF0aW9uLgoKICAgIDp0eXBlIGV4cHJlc3Npb246IHN0cgogICAgOnR5cGUgZGVjb21waWxlcnM6IGxpc3RbaW50XQogICAgOnR5cGUgb3B0aW9uczogX29wdC5PcHRpb24KICAgIDpwYXJhbSBleHByZXNzaW9uOiBUaGUgY2hlbWljYWwgZXF1YXRpb24gZXhwcmVzc2lvbi4KICAgIDpwYXJhbSBkZWNvbXBpbGVyczogVGhlIGxpc3QgdGhhdCBjb250YWlucyB0aGUgZGVjb21waWxlciBJRHMuCiAgICA6cGFyYW0gb3B0aW9uczogVGhlIEJDRSBvcHRpb25zLgogICAgOnJ0eXBlOiBsaXN0CiAgICA6cmV0dXJuOiBBIGxpc3QgY29udGFpbnMgdGhlIGRlY29tcGlsZWQgYmFsYW5jaW5nIHJlc3VsdC4KICAgICIiIgoKICAgICMgIENoZWNrIGNoYXJhY3RlcnMuCiAgICBpZiBub3QgX2lucHV0X2Noay5jaGVja19pbnB1dF9leHByZXNzaW9uX2NoYXJhY3RlcnMoZXhwcmVzc2lvbik6CiAgICAgICAgcmFpc2UgSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbigiSW52YWxpZCBjaGFyYWN0ZXIuIikKCiAgICAjICBJbml0aWFsaXplIHRoZSByZXN1bHQgY29udGFpbmVyLgogICAgcmV0ID0gW10KCiAgICB0cnk6CiAgICAgICAgIyAgUGFyc2UgdGhlIGNoZW1pY2FsIGVxdWF0aW9uLgogICAgICAgIGNlID0gX2NlX3BhcnNlci5wYXJzZShleHByZXNzaW9uLCBfY2VfdG9rZW4udG9rZW5pemUoZXhwcmVzc2lvbiwgb3B0aW9ucyksIG9wdGlvbnMpCgogICAgICAgICMgIEJhbGFuY2UgdGhlIGNoZW1pY2FsIGVxdWF0aW9uLgogICAgICAgIF9iY2VfbWFpbi5iYWxhbmNlX2NoZW1pY2FsX2VxdWF0aW9uKGNlLCBvcHRpb25zKQoKICAgICAgICAjICBEZWNvbXBpbGUuCiAgICAgICAgZm9yIGRlY19pZCBpbiBkZWNvbXBpbGVyczoKICAgICAgICAgICAgaWYgZGVjX2lkID09IERFQ09NUElMRVJfVEVYVDoKICAgICAgICAgICAgICAgIHJldC5hcHBlbmQoX2RlY29tcGlsZXJfY2VfdG9fYmNlLmRlY29tcGlsZV9jZShjZSkpCiAgICAgICAgICAgIGVsaWYgZGVjX2lkID09IERFQ09NUElMRVJfTUFUSE1MOgogICAgICAgICAgICAgICAgcmV0LmFwcGVuZChfZGVjb21waWxlcl9jZV90b19tYXRobWwuZGVjb21waWxlX2NlKGNlLCBvcHRpb25zKS50b19zdHJpbmcoKSkKICAgICAgICAgICAgZWxpZiBkZWNfaWQgPT0gREVDT01QSUxFUl9DT0xMRUNUX1NZTUJPTFM6Cjx8ZmltX2hvbGV8PgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5zdXBwb3J0ZWQgZGVjb21waWxlciBJRC4iKQogICAgZXhjZXB0IF9wZS5FcnJvciBhcyBlcnIxOgogICAgICAgIHJhaXNlIFBhcnNlckVycm9yV3JhcHBlcihlcnIxLnRvX3N0cmluZygpKQogICAgZXhjZXB0IF9sZS5Mb2dpY0Vycm9yIGFzIGVycjI6CiAgICAgICAgcmFpc2UgTG9naWNFcnJvcldyYXBwZXIoZXJyMi50b19zdHJpbmcoKSkKCiAgICByZXR1cm4gcmV0CgoKZGVmIGlzX2NoZW1pY2FsX2VxdWF0aW9uX2JhbGFuY2VkKGV4cHJlc3Npb24sIG9wdGlvbnMpOgogICAgIiIiQ2hlY2sgd2hldGhlciBhIGNoZW1pY2FsIGVxdWF0aW9uIGlzIGJhbGFuY2VkLgoKICAgIDp0eXBlIGV4cHJlc3Npb246IHN0cgogICAgOnR5cGUgb3B0aW9uczogX29wdC5PcHRpb24KICAgIDpwYXJhbSBleHByZXNzaW9uOiBUaGUgY2hlbWljYWwgZXF1YXRpb24gZXhwcmVzc2lvbi4KICAgIDpwYXJhbSBvcHRpb25zOiBUaGUgQkNFIG9wdGlvbnMuCiAgICA6cnR5cGUgOiBib29sCiAgICA6cmV0dXJuOiBSZXR1cm4gVHJ1ZSBpZiBpdCBpcyBiYWxhbmNlZC4KICAgICIiIgoKICAgICMgIEJhY2t1cCB0aGUgcHJvdGVjdGVkIG1hdGggc3ltYm9sIGhlYWRlci4KICAgIHByb3RfaGVhZGVyID0gb3B0aW9ucy5nZXRfcHJvdGVjdGVkX21hdGhfc3ltYm9sX2hlYWRlcigpCgogICAgIyAgRmFrZSBhIHByb3RlY3RlZCBtYXRoIHN5bWJvbCBoZWFkZXIuCiAgICBvcHRpb25zLnNldF9wcm90ZWN0ZWRfbWF0aF9zeW1ib2xfaGVhZGVyKCItIikKCiAgICB0cnk6CiAgICAgICAgIyAgUGFyc2UgdGhlIGNoZW1pY2FsIGVxdWF0aW9uLgogICAgICAgIGNlID0gX2NlX3BhcnNlci5wYXJzZShleHByZXNzaW9uLCBfY2VfdG9rZW4udG9rZW5pemUoZXhwcmVzc2lvbiwgb3B0aW9ucyksIG9wdGlvbnMpCgogICAgICAgICMgIFJlc3RvcmUgdGhlIHByb3RlY3RlZCBtYXRoIHN5bWJvbCBoZWFkZXIuCiAgICAgICAgb3B0aW9ucy5zZXRfcHJvdGVjdGVkX21hdGhfc3ltYm9sX2hlYWRlcihwcm90X2hlYWRlcikKCiAgICAgICAgIyAgQ2hlY2sgd2hldGhlciB0aGUgY2hlbWljYWwgZXF1YXRpb24gaXMgYmFsYW5jZWQuCiAgICAgICAgcmV0dXJuIF9iY2VfY2hlY2suY2hlY2tfd2hldGhlcl9iYWxhbmNlZChjZSkKICAgIGV4Y2VwdCBfcGUuRXJyb3IgYXMgZXJyOgogICAgICAgICMgIFJlc3RvcmUgdGhlIHByb3RlY3RlZCBtYXRoIHN5bWJvbCBoZWFkZXIuCiAgICAgICAgb3B0aW9ucy5zZXRfcHJvdGVjdGVkX21hdGhfc3ltYm9sX2hlYWRlcihwcm90X2hlYWRlcikKCiAgICAgICAgcmV0dXJuIFBhcnNlckVycm9yV3JhcHBlcihlcnIudG9fc3RyaW5nKCkpCgoKZGVmIHN1YnN0aXR1dGVfY2hlbWljYWxfZXF1YXRpb24oZXhwcmVzc2lvbiwgc3Vic3RfbWFwLCBkZWNvbXBpbGVycywgb3B0aW9ucyk6CiAgICAiIiJTdWJzdGl0dXRlIGEgY2hlbWljYWwgZXF1YXRpb24uCgogICAgOnR5cGUgZXhwcmVzc2lvbjogc3RyCiAgICA6dHlwZSBzdWJzdF9tYXA6IGRpY3QKICAgIDp0eXBlIGRlY29tcGlsZXJzOiBsaXN0W2ludF0KICAgIDp0eXBlIG9wdGlvbnM6IF9vcHQuT3B0aW9uCiAgICA6cGFyYW0gZXhwcmVzc2lvbjogVGhlIGNoZW1pY2FsIGVxdWF0aW9uLgogICAgOnBhcmFtIHN1YnN0X21hcDogVGhlIHN1YnN0aXR1dGlvbiBtYXAuCiAgICA6cGFyYW0gZGVjb21waWxlcnM6IFRoZSBsaXN0IHRoYXQgY29udGFpbnMgdGhlIGRlY29tcGlsZXIgSURzLgogICAgOnBhcmFtIG9wdGlvbnM6IFRoZSBCQ0Ugb3B0aW9ucy4KICAgIDpydHlwZSA6IGxpc3QKICAgIDpyZXR1cm46IEEgbGlzdCB0aGF0IGNvbnRhaW5zIHRoZSBzdWJzdGl0dXRpb24gcmVzdWx0LgogICAgIiIiCgogICAgIyAgU2F2ZSB0aGUgcHJvdGVjdGVkIG1hdGggc3ltYm9sIGhlYWRlci4KICAgIHByb3Rfc3ltYm9sID0gb3B0aW9ucy5nZXRfcHJvdGVjdGVkX21hdGhfc3ltYm9sX2hlYWRlcigpCgogICAgIyAgRmFrZSB0aGUgaGVhZGVyLgogICAgb3B0aW9ucy5zZXRfcHJvdGVjdGVkX21hdGhfc3ltYm9sX2hlYWRlcigiLSIpCgogICAgIyAgUGFyc2UgdGhlIGNoZW1pY2FsIGVxdWF0aW9uLgogICAgY2UgPSBfY2VfcGFyc2VyLnBhcnNlKGV4cHJlc3Npb24sIF9jZV90b2tlbi50b2tlbml6ZShleHByZXNzaW9uLCBvcHRpb25zKSwgb3B0aW9ucykKCiAgICAjICBSZXN0b3JlIHRoZSBwcm90ZWN0ZWQgbWF0aCBzeW1ib2wgaGVhZGVyLgogICAgb3B0aW9ucy5zZXRfcHJvdGVjdGVkX21hdGhfc3ltYm9sX2hlYWRlcihwcm90X3N5bWJvbCkKCiAgICB0cnk6CiAgICAgICAgIyAgRG8gc3Vic3RpdHV0aW9uLgogICAgICAgIGNlID0gX2NlX3N1YnN0LnN1YnN0aXR1dGVfY2UoY2UsIHN1YnN0X21hcCwgb3B0aW9ucykKICAgIGV4Y2VwdCBfY2Vfc3Vic3QuU3Vic3RpdHV0ZUVycm9yOgogICAgICAgIHJhaXNlIFN1YnN0aXR1dGlvbkVycm9yV3JhcHBlcigiU3Vic3RpdHV0ZSBlcnJvci4iKQoKICAgICMgIEluaXRpYWxpemUgdGhlIHJlc3VsdCBjb250YWluZXIuCiAgICByZXQgPSBbXQoKICAgICMgIERlY29tcGlsZS4KICAgIGZvciBkZWNfaWQgaW4gZGVjb21waWxlcnM6CiAgICAgICAgaWYgZGVjX2lkID09IERFQ09NUElMRVJfVEVYVDoKICAgICAgICAgICAgcmV0LmFwcGVuZChfZGVjb21waWxlcl9jZV90b19iY2UuZGVjb21waWxlX2NlKGNlKSkKICAgICAgICBlbGlmIGRlY19pZCA9PSBERUNPTVBJTEVSX01BVEhNTDoKICAgICAgICAgICAgcmV0LmFwcGVuZChfZGVjb21waWxlcl9jZV90b19tYXRobWwuZGVjb21waWxlX2NlKGNlLCBvcHRpb25zKS50b19zdHJpbmcoKSkKICAgICAgICBlbGlmIGRlY19pZCA9PSBERUNPTVBJTEVSX0NPTExFQ1RfU1lNQk9MUzoKICAgICAgICAgICAgcmV0LmFwcGVuZChfZGVjb21waWxlcl9jZV9jc20uY29sbGVjdF9zeW1ib2xzKGNlKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbnN1cHBvcnRlZCBkZWNvbXBpbGVyIElELiIpCgogICAgcmV0dXJuIHJldAo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgcmV0LmFwcGVuZChfZGVjb21waWxlcl9jZV9jc20uY29sbGVjdF9zeW1ib2xzKGNlKSkKPHxmaW1fZW5kfD4="]
["a9f8d7eb6417e099fbb351dad71000494d11e298-1","a9f8d7eb6417e099fbb351dad71000494d11e298","PHxmaW1fcHJlZml4fD4KZnJvbSBvdm9zX3V0aWxzLmxvZyBpbXBvcnQgTE9HCmZyb20gb3MucGF0aCBpbXBvcnQgZXhpc3RzLCBqb2luLCBkaXJuYW1lCmltcG9ydCBvcwppbXBvcnQgc3lzCmZyb20gc3VicHJvY2VzcyBpbXBvcnQgUElQRSwgUG9wZW4KZnJvbSBwYWtvIGltcG9ydCBQYWtvTWFuYWdlcgpmcm9tIG92b3Nfc2tpbGxzX21hbmFnZXIuZXhjZXB0aW9ucyBpbXBvcnQgUGlwRXhjZXB0aW9uLCBcCiAgICBTa2lsbFJlcXVpcmVtZW50c0V4Y2VwdGlvbiwgSW52YWxpZE1hbmlmZXN0CmZyb20ganNvbl9kYXRhYmFzZS51dGlscy5jb21ib19sb2NrIGltcG9ydCBDb21ib0xvY2sKZnJvbSB0ZW1wZmlsZSBpbXBvcnQgZ2V0dGVtcGRpcgppbXBvcnQgeWFtbAoKIyBkZWZhdWx0IGNvbnN0cmFpbnRzIHRvIHVzZSBpZiBub25lIGFyZSBnaXZlbgpERUZBVUxUX0NPTlNUUkFJTlRTID0gJy9ldGMvbXljcm9mdC9jb25zdHJhaW50cy50eHQnClBJUF9MT0NLID0gQ29tYm9Mb2NrKGpvaW4oZ2V0dGVtcGRpcigpLCAib3Zvc19waXAubG9jayIpKQoKCmRlZiBwaXBfaW5zdGFsbChwYWNrYWdlcywgY29uc3RyYWludHM9Tm9uZSwgcHJpbnRfbG9ncz1GYWxzZSk6CiAgICBpZiBub3QgbGVuKHBhY2thZ2VzKToKICAgICAgICByZXR1cm4gRmFsc2UKICAgICMgVXNlIGNvbnN0cmFpbnRzIHRvIGxpbWl0IHRoZSBpbnN0YWxsZWQgdmVyc2lvbnMKICAgIGlmIGNvbnN0cmFpbnRzIGFuZCBub3QgZXhpc3RzKGNvbnN0cmFpbnRzKToKICAgICAgICBMT0cuZXJyb3IoJ0NvdWxkblwndCBmaW5kIHRoZSBjb25zdHJhaW50cyBmaWxlJykKICAgICAgICByZXR1cm4gRmFsc2UKICAgIGVsaWYgZXhpc3RzKERFRkFVTFRfQ09OU1RSQUlOVFMpOgogICAgICAgIGNvbnN0cmFpbnRzID0gREVGQVVMVF9DT05TVFJBSU5UUwoKICAgIGNhbl9waXAgPSBvcy5hY2Nlc3MoZGlybmFtZShzeXMuZXhlY3V0YWJsZSksIG9zLldfT0sgfCBvcy5YX09LKQogICAgcGlwX2FyZ3MgPSBbc3lzLmV4ZWN1dGFibGUsICctbScsICdwaXAnLCAnaW5zdGFsbCddCiAgICBpZiBjb25zdHJhaW50czoKICAgICAgICBwaXBfYXJncyArPSBbJy1jJywgY29uc3RyYWludHNdCgogICAgaWYgbm90IGNhbl9waXA6CiAgICAgICAgcGlwX2FyZ3MgPSBbJ3N1ZG8nLCAnLW4nXSArIHBpcF9hcmdzCgogICAgd2l0aCBQSVBfTE9DSzoKICAgICAgICAiIiIKICAgICAgICBJdGVyYXRlIG92ZXIgdGhlIGluZGl2aWR1YWwgUHl0aG9uIHBhY2thZ2VzIGFuZAogICAgICAgIGluc3RhbGwgdGhlbSBvbmUgYnkgb25lIHRvIGVuZm9yY2UgdGhlIG9yZGVyIHNwZWNpZmllZAogICAgICAgIGluIHRoZSBtYW5pZmVzdC4KICAgICAgICAiIiIKICAgICAgICBmb3IgZGVwZW5kZW50X3B5dGhvbl9wYWNrYWdlIGluIHBhY2thZ2VzOgogICAgICAgICAgICBMT0cuaW5mbygiKHBpcCkgSW5zdGFsbGluZyAiICsgZGVwZW5kZW50X3B5dGhvbl9wYWNrYWdlKQogICAgICAgICAgICBwaXBfY29tbWFuZCA9IHBpcF9hcmdzICsgW2RlcGVuZGVudF9weXRob25fcGFja2FnZV0KICAgICAgICAgICAgaWYgcHJpbnRfbG9nczoKICAgICAgICAgICAgICAgIHByb2MgPSBQb3BlbihwaXBfY29tbWFuZCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHByb2MgPSBQb3BlbihwaXBfY29tbWFuZCwgc3Rkb3V0PVBJUEUsIHN0ZGVycj1QSVBFKQogICAgICAgICAgICBwaXBfY29kZSA9IHByb2Mud2FpdCgpCiAgICAgICAgICAgIGlmIHBpcF9jb2RlICE9IDA6CiAgICAgICAgICAgICAgICBzdGRlcnIgPSBwcm9jLnN0ZGVyci5yZWFkKCkuZGVjb2RlKCkKICAgICAgICAgICAgICAgIHJhaXNlIFBpcEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICBwaXBfY29kZSwgcHJvYy5zdGRvdXQucmVhZCgpLmRlY29kZSgpLCBzdGRlcnIKICAgICAgICAgICAgICAgICkKCiAgICByZXR1cm4gVHJ1ZQoKCmRlZiBpbnN0YWxsX3N5c3RlbV9kZXBzKG1hbmlmZXN0LCBvdmVycmlkZXM9Tm9uZSk6CiAgICBvdmVycmlkZXMgPSBvdmVycmlkZXMgb3IgewogICAgICAgIGV4ZTogKHBhY2thZ2VzIG9yICcnKS5zcGxpdCgpCiAgICAgICAgZm9yIGV4ZSwgcGFja2FnZXMgaW4gbWFuaWZlc3QuaXRlbXMoKQogICAgfQogICAgcGFja2FnZXMgPSBvdmVycmlkZXMucG9wKCdhbGwnLCBbXSkKICAgIGlmIG5vdCBsZW4ocGFja2FnZXMpOgogICAgICAgIHJldHVybiBGYWxzZQogICAgdHJ5OgogICAgICAgIG1hbmFnZXIgPSBQYWtvTWFuYWdlcigpCiAgICAgICAgcmV0dXJuIG1hbmFnZXIuaW5zdGFsbChwYWNrYWdlcywgb3ZlcnJpZGVzPW92ZXJyaWRlcykKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICByYWlzZSBTa2lsbFJlcXVpcmVtZW50c0V4Y2VwdGlvbihzdHIoZSkpCgoKZGVmIHZhbGlkYXRlX21hbmlmZXN0KGNvbnRlbnQpOgogICAgaWYgaXNpbnN0YW5jZShjb250ZW50LCBzdHIpOgogICAgICAgIGRhdGEgPSB5YW1sLnNhZmVfbG9hZChjb250ZW50KQogICAgZWxzZToKICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShjb250ZW50LCBkaWN0KQogICAgICAgIGRhdGEgPSBjb250ZW50CiAgICBpZiBub3QgZGF0YToKICAgICAgICAjIG1vc3QgbGlrZWx5IGp1c3QgdGhlIHRlbXBsYXRlIGZ1bGwgb2YgY29tbWVudHMKICAgICAgICByYWlzZSBJbnZhbGlkTWFuaWZlc3QKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgaWYgJ2RlcGVuZGVuY2llcycgaW4gZGF0YToKICAgICAgICByZXR1cm4gZGF0YQoKICAgICMgc29tZSBza2lsbHMgaW4gdGhlIHdpbGQgaGF2ZSB0aGUgbWFuaWZlc3Qgd2l0aG91dCB0aGUgdG9wLWxldmVsIGtleQo8fGZpbV9lbmR8Pg=="]
["a9f8d7eb6417e099fbb351dad71000494d11e298-2","a9f8d7eb6417e099fbb351dad71000494d11e298","PHxmaW1fcHJlZml4fD4KZnJvbSBvdm9zX3V0aWxzLmxvZyBpbXBvcnQgTE9HCmZyb20gb3MucGF0aCBpbXBvcnQgZXhpc3RzLCBqb2luLCBkaXJuYW1lCmltcG9ydCBvcwppbXBvcnQgc3lzCmZyb20gc3VicHJvY2VzcyBpbXBvcnQgUElQRSwgUG9wZW4KZnJvbSBwYWtvIGltcG9ydCBQYWtvTWFuYWdlcgpmcm9tIG92b3Nfc2tpbGxzX21hbmFnZXIuZXhjZXB0aW9ucyBpbXBvcnQgUGlwRXhjZXB0aW9uLCBcCiAgICBTa2lsbFJlcXVpcmVtZW50c0V4Y2VwdGlvbiwgSW52YWxpZE1hbmlmZXN0CmZyb20ganNvbl9kYXRhYmFzZS51dGlscy5jb21ib19sb2NrIGltcG9ydCBDb21ib0xvY2sKZnJvbSB0ZW1wZmlsZSBpbXBvcnQgZ2V0dGVtcGRpcgppbXBvcnQgeWFtbAoKIyBkZWZhdWx0IGNvbnN0cmFpbnRzIHRvIHVzZSBpZiBub25lIGFyZSBnaXZlbgpERUZBVUxUX0NPTlNUUkFJTlRTID0gJy9ldGMvbXljcm9mdC9jb25zdHJhaW50cy50eHQnClBJUF9MT0NLID0gQ29tYm9Mb2NrKGpvaW4oZ2V0dGVtcGRpcigpLCAib3Zvc19waXAubG9jayIpKQoKCmRlZiBwaXBfaW5zdGFsbChwYWNrYWdlcywgY29uc3RyYWludHM9Tm9uZSwgcHJpbnRfbG9ncz1GYWxzZSk6CiAgICBpZiBub3QgbGVuKHBhY2thZ2VzKToKICAgICAgICByZXR1cm4gRmFsc2UKICAgICMgVXNlIGNvbnN0cmFpbnRzIHRvIGxpbWl0IHRoZSBpbnN0YWxsZWQgdmVyc2lvbnMKICAgIGlmIGNvbnN0cmFpbnRzIGFuZCBub3QgZXhpc3RzKGNvbnN0cmFpbnRzKToKICAgICAgICBMT0cuZXJyb3IoJ0NvdWxkblwndCBmaW5kIHRoZSBjb25zdHJhaW50cyBmaWxlJykKICAgICAgICByZXR1cm4gRmFsc2UKICAgIGVsaWYgZXhpc3RzKERFRkFVTFRfQ09OU1RSQUlOVFMpOgogICAgICAgIGNvbnN0cmFpbnRzID0gREVGQVVMVF9DT05TVFJBSU5UUwoKICAgIGNhbl9waXAgPSBvcy5hY2Nlc3MoZGlybmFtZShzeXMuZXhlY3V0YWJsZSksIG9zLldfT0sgfCBvcy5YX09LKQogICAgcGlwX2FyZ3MgPSBbc3lzLmV4ZWN1dGFibGUsICctbScsICdwaXAnLCAnaW5zdGFsbCddCiAgICBpZiBjb25zdHJhaW50czoKICAgICAgICBwaXBfYXJncyArPSBbJy1jJywgY29uc3RyYWludHNdCgogICAgaWYgbm90IGNhbl9waXA6CiAgICAgICAgcGlwX2FyZ3MgPSBbJ3N1ZG8nLCAnLW4nXSArIHBpcF9hcmdzCgogICAgd2l0aCBQSVBfTE9DSzoKICAgICAgICAiIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIEl0ZXJhdGUgb3ZlciB0aGUgaW5kaXZpZHVhbCBQeXRob24gcGFja2FnZXMgYW5kCiAgICAgICAgaW5zdGFsbCB0aGVtIG9uZSBieSBvbmUgdG8gZW5mb3JjZSB0aGUgb3JkZXIgc3BlY2lmaWVkCiAgICAgICAgaW4gdGhlIG1hbmlmZXN0LgogICAgICAgICIiIgo8fGZpbV9lbmR8Pg=="]
["a9f8d7eb6417e099fbb351dad71000494d11e298-3","a9f8d7eb6417e099fbb351dad71000494d11e298","PHxmaW1fcHJlZml4fD4KZnJvbSBvdm9zX3V0aWxzLmxvZyBpbXBvcnQgTE9HCmZyb20gb3MucGF0aCBpbXBvcnQgZXhpc3RzLCBqb2luLCBkaXJuYW1lCmltcG9ydCBvcwppbXBvcnQgc3lzCmZyb20gc3VicHJvY2VzcyBpbXBvcnQgUElQRSwgUG9wZW4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIHBha28gaW1wb3J0IFBha29NYW5hZ2VyCmZyb20gb3Zvc19za2lsbHNfbWFuYWdlci5leGNlcHRpb25zIGltcG9ydCBQaXBFeGNlcHRpb24sIFwKICAgIFNraWxsUmVxdWlyZW1lbnRzRXhjZXB0aW9uLCBJbnZhbGlkTWFuaWZlc3QKZnJvbSBqc29uX2RhdGFiYXNlLnV0aWxzLmNvbWJvX2xvY2sgaW1wb3J0IENvbWJvTG9jawo8fGZpbV9lbmR8Pg=="]
["a9f8d7eb6417e099fbb351dad71000494d11e298-4","a9f8d7eb6417e099fbb351dad71000494d11e298","PHxmaW1fcHJlZml4fD4KZnJvbSBvdm9zX3V0aWxzLmxvZyBpbXBvcnQgTE9HCmZyb20gb3MucGF0aCBpbXBvcnQgZXhpc3RzLCBqb2luLCBkaXJuYW1lCmltcG9ydCBvcwppbXBvcnQgc3lzCmZyb20gc3VicHJvY2VzcyBpbXBvcnQgUElQRSwgUG9wZW4KZnJvbSBwYWtvIGltcG9ydCBQYWtvTWFuYWdlcgpmcm9tIG92b3Nfc2tpbGxzX21hbmFnZXIuZXhjZXB0aW9ucyBpbXBvcnQgUGlwRXhjZXB0aW9uLCBcCiAgICBTa2lsbFJlcXVpcmVtZW50c0V4Y2VwdGlvbiwgSW52YWxpZE1hbmlmZXN0CmZyb20ganNvbl9kYXRhYmFzZS51dGlscy5jb21ib19sb2NrIGltcG9ydCBDb21ib0xvY2sKZnJvbSB0ZW1wZmlsZSBpbXBvcnQgZ2V0dGVtcGRpcgppbXBvcnQgeWFtbAoKIyBkZWZhdWx0IGNvbnN0cmFpbnRzIHRvIHVzZSBpZiBub25lIGFyZSBnaXZlbgpERUZBVUxUX0NPTlNUUkFJTlRTID0gJy9ldGMvbXljcm9mdC9jb25zdHJhaW50cy50eHQnClBJUF9MT0NLID0gQ29tYm9Mb2NrKGpvaW4oZ2V0dGVtcGRpcigpLCAib3Zvc19waXAubG9jayIpKQoKCmRlZiBwaXBfaW5zdGFsbChwYWNrYWdlcywgY29uc3RyYWludHM9Tm9uZSwgcHJpbnRfbG9ncz1GYWxzZSk6CiAgICBpZiBub3QgbGVuKHBhY2thZ2VzKToKICAgICAgICByZXR1cm4gRmFsc2UKICAgICMgVXNlIGNvbnN0cmFpbnRzIHRvIGxpbWl0IHRoZSBpbnN0YWxsZWQgdmVyc2lvbnMKICAgIGlmIGNvbnN0cmFpbnRzIGFuZCBub3QgZXhpc3RzKGNvbnN0cmFpbnRzKToKICAgICAgICBMT0cuZXJyb3IoJ0NvdWxkblwndCBmaW5kIHRoZSBjb25zdHJhaW50cyBmaWxlJykKICAgICAgICByZXR1cm4gRmFsc2UKICAgIGVsaWYgZXhpc3RzKERFRkFVTFRfQ09OU1RSQUlOVFMpOgogICAgICAgIGNvbnN0cmFpbnRzID0gREVGQVVMVF9DT05TVFJBSU5UUwoKICAgIGNhbl9waXAgPSBvcy5hY2Nlc3MoZGlybmFtZShzeXMuZXhlY3V0YWJsZSksIG9zLldfT0sgfCBvcy5YX09LKQogICAgcGlwX2FyZ3MgPSBbc3lzLmV4ZWN1dGFibGUsICctbScsICdwaXAnLCAnaW5zdGFsbCddCiAgICBpZiBjb25zdHJhaW50czoKICAgICAgICBwaXBfYXJncyArPSBbJy1jJywgY29uc3RyYWludHNdCgogICAgaWYgbm90IGNhbl9waXA6CiAgICAgICAgcGlwX2FyZ3MgPSBbJ3N1ZG8nLCAnLW4nXSArIHBpcF9hcmdzCgogICAgd2l0aCBQSVBfTE9DSzoKICAgICAgICAiIiIKICAgICAgICBJdGVyYXRlIG92ZXIgdGhlIGluZGl2aWR1YWwgUHl0aG9uIHBhY2thZ2VzIGFuZAogICAgICAgIGluc3RhbGwgdGhlbSBvbmUgYnkgb25lIHRvIGVuZm9yY2UgdGhlIG9yZGVyIHNwZWNpZmllZAogICAgICAgIGluIHRoZSBtYW5pZmVzdC4KICAgICAgICAiIiIKICAgICAgICBmb3IgZGVwZW5kZW50X3B5dGhvbl9wYWNrYWdlIGluIHBhY2thZ2VzOgogICAgICAgICAgICBMT0cuaW5mbygiKHBpcCkgSW5zdGFsbGluZyAiICsgZGVwZW5kZW50X3B5dGhvbl9wYWNrYWdlKQogICAgICAgICAgICBwaXBfY29tbWFuZCA9IHBpcF9hcmdzICsgW2RlcGVuZGVudF9weXRob25fcGFja2FnZV0KICAgICAgICAgICAgaWYgcHJpbnRfbG9nczoKICAgICAgICAgICAgICAgIHByb2MgPSBQb3BlbihwaXBfY29tbWFuZCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHByb2MgPSBQb3BlbihwaXBfY29tbWFuZCwgc3Rkb3V0PVBJUEUsIHN0ZGVycj1QSVBFKQogICAgICAgICAgICBwaXBfY29kZSA9IHByb2Mud2FpdCgpCiAgICAgICAgICAgIGlmIHBpcF9jb2RlICE9IDA6CiAgICAgICAgICAgICAgICBzdGRlcnIgPSBwcm9jLnN0ZGVyci5yZWFkKCkuZGVjb2RlKCkKICAgICAgICAgICAgICAgIHJhaXNlIFBpcEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICBwaXBfY29kZSwgcHJvYy5zdGRvdXQucmVhZCgpLmRlY29kZSgpLCBzdGRlcnIKICAgICAgICAgICAgICAgICkKCiAgICByZXR1cm4gVHJ1ZQoKCmRlZiBpbnN0YWxsX3N5c3RlbV9kZXBzKG1hbmlmZXN0LCBvdmVycmlkZXM9Tm9uZSk6CiAgICBvdmVycmlkZXMgPSBvdmVycmlkZXMgb3IgewogICAgICAgIGV4ZTogKHBhY2thZ2VzIG9yICcnKS5zcGxpdCgpCiAgICAgICAgZm9yIGV4ZSwgcGFja2FnZXMgaW4gbWFuaWZlc3QuaXRlbXMoKQogICAgfQogICAgcGFja2FnZXMgPSBvdmVycmlkZXMucG9wKCdhbGwnLCBbXSkKICAgIGlmIG5vdCBsZW4ocGFja2FnZXMpOgogICAgICAgIHJldHVybiBGYWxzZQogICAgdHJ5OgogICAgICAgIG1hbmFnZXIgPSBQYWtvTWFuYWdlcigpCiAgICAgICAgcmV0dXJuIG1hbmFnZXIuaW5zdGFsbChwYWNrYWdlcywgb3ZlcnJpZGVzPW92ZXJyaWRlcykKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICByYWlzZSBTa2lsbFJlcXVpcmVtZW50c0V4Y2VwdGlvbihzdHIoZSkpCgoKZGVmIHZhbGlkYXRlX21hbmlmZXN0KGNvbnRlbnQpOgogICAgaWYgaXNpbnN0YW5jZShjb250ZW50LCBzdHIpOgogICAgICAgIGRhdGEgPSB5YW1sLnNhZmVfbG9hZChjb250ZW50KQogICAgZWxzZToKICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShjb250ZW50LCBkaWN0KQogICAgICAgIGRhdGEgPSBjb250ZW50CiAgICBpZiBub3QgZGF0YToKICAgICAgICAjIG1vc3QgbGlrZWx5IGp1c3QgdGhlIHRlbXBsYXRlIGZ1bGwgb2YgY29tbWVudHMKICAgICAgICByYWlzZSBJbnZhbGlkTWFuaWZlc3QKICAgIGlmICdkZXBlbmRlbmNpZXMnIGluIGRhdGE6CiAgICAgICAgcmV0dXJuIGRhdGEKCiAgICAjIHNvbWUgc2tpbGxzIGluIHRoZSB3aWxkIGhhdmUgdGhlIG1hbmlmZXN0IHdpdGhvdXQgdGhlIHRvcC1sZXZlbCBrZXkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgTE9HLndhcm5pbmcoImludmFsaWQgbWFuaWZlc3QsIGF0dGVtcHRpbmcgcmVjb3ZlcnkiKQogICAgcmVjb3ZlcmVkID0geyJkZXBlbmRlbmNpZXMiOiB7fX0KICAgIGlmICJweXRob24iIGluIGRhdGE6CiAgICAgICAgcmVjb3ZlcmVkWyJkZXBlbmRlbmNpZXMiXVsicHl0aG9uIl0gPSBkYXRhWyJweXRob24iXQo8fGZpbV9lbmR8Pg=="]
["bdd7c4bca67bdf946a74cf087216a801e2b7d7a6-1","bdd7c4bca67bdf946a74cf087216a801e2b7d7a6",{"$cut":{"chars":42308,"head":"PHxmaW1fcHJlZml4fD4KIiIiCihFeHBlcmltZW50YWwpIHJlcGxhY2VtZW50IGZvciBpbXBvcnQvZXhwb3J0IGZ1bmN0aW9uYWxpdHkgU0FYCiIiIgoKIyBFeHRlcm5hbCBkZXBlbmRlbmNpZXMKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbiwgYWJzb2x1dGVfaW1wb3J0LCBwcmludF9mdW5jdGlvbgppbXBvcnQgb3MKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20geG1sLmV0cmVlLkVsZW1lbnRUcmVlIGltcG9ydCBpdGVycGFyc2UsIEVsZW1lbnQsIEVsZW1lbnRUcmVlLCBTdWJFbGVtZW50CmZyb20gY29weSBpbXBvcnQgY29weSwgZGVlcGNvcHkKZnJvbSBudW1iZXJzIGltcG9ydCBOdW1iZXIKZnJvbSByYW5kb20gaW1wb3J0IGNob2ljZSBhcyByYW5kb21jaG9pY2UKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgTXV0YWJsZVNlcXVlbmNlCgojIEludGVybmFsIGRlcGVuZGVuY2llcwpmcm9tIC5wYXJzZXIgaW1wb3J0IHBhcnNlX3BhdGgKZnJvbSAuc3ZnX3RvX3BhdGhzIGltcG9ydCAocGF0aDJwYXRoZCwgZWxsaXBzZTJwYXRoZCwgbGluZTJwYXRoZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9seWxpbmUycGF0aGQsIHBvbHlnb24ycGF0aGQsIHJlY3QycGF0aGQpCmZyb20gLm1pc2N0b29scyBpbXBvcnQgb3Blbl9pbl9icm93c2VyCmZyb20gLnBhdGggaW1wb3J0IFBhdGgKCgojIFRvIG1haW50YWluIGZvcndhcmQvYmFja3dhcmQgY29tcGF0aWJpbGl0eQp0cnk6CiAgICBzdHIgPSBiYXNlc3RyaW5nCmV4Y2VwdCBOYW1lRXJyb3I6CiAgICBwYXNzCgoKTkFNRV9TVkcgPSAic3ZnIgpOQU1FX1BBVEggPSAicGF0aCIKTkFNRV9SRUNUID0gInJlY3QiCgpBVFRSX1ZFUlNJT04gPSAidmVyc2lvbiIKVkFMVUVfU1ZHX1ZFUlNJT04gPSAiMS4xIgpBVFRSX1hNTE5TID0gInhtbG5zIgpWQUxVRV9YTUxOUyA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKQVRUUl9YTUxOU19MSU5LID0gInhtbG5zOnhsaW5rIgpWQUxVRV9YTElOSyA9ICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgpBVFRSX1hNTE5TX0VWID0gInhtbG5zOmV2IgpWQUxVRV9YTUxOU19FViA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC1ldmVudHMiCkFUVFJfV0lEVEggPSAid2lkdGgiCkFUVFJfSEVJR0hUID0gImhlaWdodCIKQVRUUl9WSUVXQk9YID0gInZpZXdCb3giCkFUVFJfREFUQSA9ICJkIgpBVFRSX0ZJTEwgPSAiZmlsbCIKQVRUUl9TVFJPS0UgPSAic3Ryb2tlIgpBVFRSX1NUUk9LRV9XSURUSCA9ICJzdHJva2Utd2lkdGgiCkFUVFJfVFJBTlNGT1JNID0gInRyYW5zZm9ybSIKQVRUUl9DTEFTUyA9ICJjbGFzcyIKVkFMVUVfTk9ORSA9ICJub25lIgoKQVRUUl9CQUNLR1JPVU5EX0NPTE9SID0gImJnLWNvbG9yIgoKCnVuaXF1ZV9vYmplY3QgPSBQYXRoKCkgICMgdW5pcXVlIGlkIG9iamVjdCwgZG9uJ3QgdXNlIHBscwoKCmRlZiBuZXdfc3R5bGUoZmlsbD0nbm9uZScsICoqa3cpOgogICAgc3RyaW5nID0gJycKICAgIGZvciBrZXksIHZhbHVlIGluIGt3Lml0ZW1zKCk6CiAgICAgICAgaWYga2V5ID09ICd3aWR0aCc6CiAgICAgICAgICAgIGtleSA9ICdzdHJva2Utd2lkdGgnCiAgICAgICAgc3RyaW5nICs9IGtleSArICc6JyArIHN0cih2YWx1ZSkgKyAnOycKICAgIHJldHVybiBzdHJpbmcKCgp1bmlxdWVfaWRfY291bnRlciA9IDEKCgpfZG90X2FuZF9hdHRyaWJ1dGVzX2tleW1hcCA9IHsKICAgICdjbGFzc25hbWUnOiAnY2xhc3MnLAogICAgJ3dpZHRoJzogJ3N0cm9rZS13aWR0aCcsCiAgICAncmFkaXVzJzogJ3InLAogICAgJ3gnOiAnY3gnLAogICAgJ3knOiAnY3knCn0KCl90ZXh0X2FuZF9hdHRyaWJ1dGVzX2tleW1hcCA9IHsKICAgICdjbGFzc25hbWUnOiAnY2xhc3MnLAogICAgJ3dpZHRoJzogJ3N0cm9rZS13aWR0aCcsCiAgICAnYW55dGhpbmctdGhhdC1lbmRzLXdpdGgtaHJlZic6ICdocmVmJyAgIyBoYWhhLi4uIHRoaXMgaXMganVzdCBhIG1uZW1vbmljIQp9CgpfcGF0aF9hbmRfYXR0cmlidXRlc19rZXltYXAgPSB7CiAgICAnY2xhc3NuYW1lJzogJ2NsYXNzJywKICAgICd3aWR0aCc6ICdzdHJva2Utd2lkdGgnCn0KCl91c2VfYW5kX2F0dHJpYnV0ZXNfa2V5bWFwID0gewogICAgJ2NsYXNzbmFtZSc6ICdjbGFzcycsCiAgICAnd2lkdGgnOiAnc3Ryb2tlLXdpZHRoJwp9CgoKY2xhc3MgR2xvcmlmaWVkRGljdGlvbmFyeSgpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3cpOgogICAgICAgIGZvciBrZXksIHZhbHVlIGluIGt3Lml0ZW1zKCk6CiAgICAgICAgICAgIHNlbGYuX19zZXRpdGVtX18oa2V5LCB2YWx1ZSkKCiAgICBkZWYgdXBkYXRlKHNlbGYsIG90aGVyKToKICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvdGhlci5pdGVtcygpOgogICAgICAgICAgICBzZWxmLl9fc2V0aXRlbV9fKGtleSwgdmFsdWUpCgogICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgogICAgICAgIGlmIGtleSA9PSAnX2tleW1hcCc6CiAgICAgICAgICAgIHJldHVybiAnX2tleW1hcCcgaW4gc2VsZi5fX2RpY3RfXwogICAgICAgIGlmIGtleSBpbiBzZWxmLl9fZGljdF9fWydfa2V5bWFwJ106CiAgICAgICAgICAgIGtleSA9IHNlbGYuX19kaWN0X19bJ19rZXltYXAnXVtrZXldCiAgICAgICAgcmV0dXJuIGtleSBpbiBzZWxmLl9fZGljdF9fCgogICAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgICAgIGZvciBrZXkgaW4gc2VsZi5fX2RpY3RfXzoKICAgICAgICAgICAgaWYga2V5ID09ICdfa2V5bWFwJzoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIHlpZWxkIGtleQoKICAgIGRlZiBpdGVtcyhzZWxmKToKICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZWxmLl9fZGljdF9fLml0ZW1zKCk6CiAgICAgICAgICAgIGlmIGtleSA9PSAnX2tleW1hcCc6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICB5aWVsZCAoa2V5LCB2YWx1ZSkKCiAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwga2V5LCB2YWx1ZSk6CiAgICAgICAgc2VsZi5fX3NldGl0ZW1fXyhrZXksIHZhbHVlKQoKICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBrZXksIGRlZmF1bHRfdmFsdWU9dW5pcXVl"}}]
["94f97c18e0b54b908955deabb4a950e99c723e4d-1","94f97c18e0b54b908955deabb4a950e99c723e4d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFlaQppbXBvcnQgY29weQojaW1wb3J0IHBsb3RseQppbXBvcnQgcGlja2xlCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBzZWFib3JuIGFzIHNucwpmcm9tIHNrbGVhcm4gaW1wb3J0IHN2bQpmcm9tIHNrbGVhcm4gaW1wb3J0IG1ldHJpY3MKZnJvbSBza2xlYXJuIGltcG9ydCBlbnNlbWJsZQpmcm9tIHNrbGVhcm4gaW1wb3J0IG11bHRpY2xhc3MKZnJvbSBza2xlYXJuIGltcG9ydCBjYWxpYnJhdGlvbgpmcm9tIHNrbGVhcm4gaW1wb3J0IHByZXByb2Nlc3NpbmcKZnJvbSBza2xlYXJuIGltcG9ydCBtb2RlbF9zZWxlY3Rpb24KZnJvbSBza2xlYXJuLmRlY29tcG9zaXRpb24gaW1wb3J0IFBDQQpmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHB5cGxvdCBhcyBwbHQKZnJvbSBtYXRwbG90bGliIGltcG9ydCBsaW5lcwolbWF0cGxvdGxpYiB0awoKIyBzZXQgdGhlIHBhdGhzIHRvIGlucHV0IGZpbGVzCnBhdGhfc2VwID0gJy8nCnBhdGhfYmFzZSA9ICcvaG9tZS9jYmEvRG93bmxvYWRzL0VDT0RTRWRhdGFzZXQnCnBhdGhfY2xhc3NfdGVzdCA9IHBhdGhfc2VwLmpvaW4oW3BhdGhfYmFzZSwgJ2NsYXNzLW1ldHJpY3MtdGVzdGluZy5jc3YnXSkKcGF0aF9jbGFzc190cmFpbiA9IHBhdGhfc2VwLmpvaW4oW3BhdGhfYmFzZSwgJ2NsYXNzLW1ldHJpY3MtdHJhaW5pbmcuY3N2J10pCnBhdGhfY2xhc3NfcHJvYiA9IHBhdGhfc2VwLmpvaW4oW3BhdGhfYmFzZSwgJ2NsYXNzLW1ldHJpY3MtdGVzdGluZy1wcm9wLmNzdiddKQoKIyBzZXQgcGF0aHMgdG8gbmV3IG91dHB1dCBmaWxlcwpwYXRoX3Bsb3RzID0gcGF0aF9zZXAuam9pbihbcGF0aF9iYXNlLCAncGxvdHMnXSkKCiMjIyMjCiMgc2V0IHNvbWUgaGVscGVyIGZ1bmN0aW9ucwojIGZ1bmN0aW9uIHRvIGNyZWF0ZSBsZWdlbmQgcHJveGllcwpkZWYgY3JlYXRlX3Byb3h5KGNvbG9yLCBtYXJrZXIsIGxpbmVzdHlsZT0nbm9uZScpOgogICAgbGluZSA9IGxpbmVzLkxpbmUyRChbMF0sIFswXSwgbGluZXN0eWxlPWxpbmVzdHlsZSwgbWZjPWNvbG9yLAogICAgICAgIG1lYz0nYmxhY2snLCBtYXJrZXI9bWFya2VyKQogICAgcmV0dXJuIGxpbmUKCiMgZnVuY3Rpb24gdG8gbGFiZWwgbmV3IGNvbG9ycwpkZWYgbGFiZWxfY29sb3Iocm93LCBjb2xvcmJ5LCB1bmlxdWVfdmFscywgY29sb3JzKToKICAgICMgZ2V0IHRoZSBpbmRleCBmb3IgdGhlIHZhbHVlIHBhc3NlZCBhbmQgcmV0dXJuIHRoZQogICAgIyAgYXNzb2NpYXRlZCBjb2xvcgogICAgaW5kID0gdW5pcXVlX3ZhbHMuaW5kZXgocm93W2NvbG9yYnldKQogICAgcmV0dXJuIGNvbG9yc1tpbmRdCiAgICAKIyMjIyMKIyByZWFkIHRoZSBpbnB1dCBkYXRhCmNsYXNzX3Rlc3QgPSBwZC5yZWFkX2NzdihwYXRoX2NsYXNzX3Rlc3QpCmNsYXNzX3RyYWluID0gcGQucmVhZF9jc3YocGF0aF9jbGFzc190cmFpbikKY2xhc3NfcHJvYiA9IHBkLnJlYWRfY3N2KHBhdGhfY2xhc3NfcHJvYikKCiMgc2V0IHRoZSBjb2xvciBzY2hlbWUKbl9zcGVjaWVzID0gbGVuKGNsYXNzX3Rlc3QpCnNwX2NvbG9ycyA9IGFlaS5jb2xvci5jb2xvcl9ibGluZChuX3NwZWNpZXMpCm1ldF9jb2xvcnMgPSBhZWkuY29sb3IuY29sb3JfYmxpbmQoKQptZXRfY29scyA9IFttZXRfY29sb3JzWzJdLCBtZXRfY29sb3JzWzVdLCBtZXRfY29sb3JzWzNdLCBtZXRfY29sb3JzWzFdXQptZXRyaWNzID0gWydBY2N1cmFjeScsICdTcGVjaWZpY2l0eScsICdQcmVjaXNpb24nLCAnUmVjYWxsJ10KCiMgcGxvdCBhIHN0YWNrZWQgYmFyIGNoYXJ0IG9mIGFjY3VyYWN5IGFuZCBzcGVjaWZpY2l0eQpwbHQuZmlndXJlKGZpZ3NpemU9KDgsNSksIGRwaT0yMDApCndpZHRoID0gMC4yCmluZCA9IG5wLmFyYW5nZShuX3NwZWNpZXMpCgpwbHQuYmFyKGluZCAtIHdpZHRoLzIgLSB3aWR0aCwgY2xhc3NfdGVzdFttZXRyaWNzWzBdXSwgd2lkdGgsIGNvbG9yPW1ldF9jb2xzWzBdLCBhbHBoYT0wLjksIGVkZ2Vjb2xvcj0nYmxhY2snLCBsYWJlbD1tZXRyaWNzWzBdKQpwbHQuYmFyKGluZCAtIHdpZHRoLzIsIGNsYXNzX3Rlc3RbbWV0cmljc1sxXV0sIHdpZHRoLCBjb2xvcj1tZXRfY29sc1sxXSwgYWxwaGE9MC45LCBlZGdlY29sb3I9J2JsYWNrJywgbGFiZWw9bWV0cmljc1sxXSkKcGx0LmJhcihpbmQgKyB3aWR0aC8yLCBjbGFzc190ZXN0W21ldHJpY3NbMl1dLCB3aWR0aCwgY29sb3I9bWV0X2NvbHNbMl0sIGFscGhhPTAuOSwgZWRnZWNvbG9yPSdibGFjaycsIGxhYmVsPW1ldHJpY3NbMl0pCnBsdC5iYXIoaW5kICsgd2lkdGgvMiArIHdpZHRoLCBjbGFzc190ZXN0W21ldHJpY3NbM11dLCB3aWR0aCwgY29sb3I9bWV0X2NvbHNbM10sIGFscGhhPTAuOSwgZWRnZWNvbG9yPSdibGFjaycsIGxhYmVsPW1ldHJpY3NbM10pCiNwbHQuYmFyKGluZCArIHdpZHRoLzIsIGNsYXNzX3Rlc3RbJ1NwZWNpZmljaXR5J10sIHdpZHRoLCBjb2xvcj1zcF9jb2xvcnMsIGFscGhhPTAuNSwgZWRnZWNvbG9yPSdibGFjaycpCgojIHNldCB0aGUgbGFiZWxzCnBsdC54dGlja3MoaW5kLCBjbGFzc190ZXN0WydTcGVjaWVzJ10sIHJvdGF0aW9uPSd2ZXJ0aWNhbCcsIGZvbnRzdHlsZT0naXRhbGljJykKcGx0LnlsYWJlbCgnU2NvcmUnKQpwbHQudGl0bGUoJ01vZGVsIHBlcmZvcm1hbmNlIG9uIHRlc3RpbmcgZGF0YScpCnBsdC50aWdodF9sYXlvdXQoKQoKIyBjdXN0b20gYnVpbGQgdGhlIGxlZ2VuZAojbGVnZW5kID0gWydBY2N1cmFjeScsICdTcGVjaWZpY2l0eSddCiNsZWdlbmRfY29sb3JzID0gWygwLjMsIDAuMywgMC4zLCAwLjkpLCAoMC41LCAwLjUsIDAuNSwgMC41KV0KI2xlZ2VuZF9tYXJrZXIgPSBbJ3MnLCAncyddCgojcHJveGllcyA9IFtdCiNmb3IgaSBpbiByYW5nZShsZW4obGVnZW5kKSk6CiMgICAgcHJveGllcy5hcHBlbmQoY3JlYXRlX3Byb3h5KGxlZ2VuZF9jb2xvcnNbaV0sIGxlZ2VuZF9tYXJrZXJbaV0pKSMsIGxlZ2VuZF9saW5lc3R5bGVbaV0pKQogICAgCnBsdC5sZWdlbmQobmNvbCA9IDIsIGxvYz0ndXBwZXIgY2VudGVyJywgYmJveF90b19hbmNob3I9KDAuNDUsIC0wLjQ1KSwgCiAgICBtYXJrZXJzY2FsZSA9IDEuNSkKICAgICMtMC42NQojIHNhdmUgdGhlIGZpZ3VyZQpwbHQuc2F2ZWZpZyhwYXRoX3Bsb3RzICsgJy9hbGwtbWV0cmljcy10ZXN0LWJpbi1uby1pdGFsLnN2ZycpCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL2FsbC1tZXRyaWNzLXRlc3QtYmluLnBuZycpCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL2FsbC1tZXRyaWNzLXRlc3QtYmluLnBkZicpCnBsdC5jbG9zZSgpCgojIGRvIHRoZSBzYW1lIGZvciB0aGUgdHJhaW5pbmcgZGF0YQpwbHQuZmlndXJlKGZpZ3NpemU9KDgsNSksIGRwaT0yMDApCndpZHRoID0gMC4yMgppbmQgPSBucC5hcmFuZ2Uobl9zcGVjaWVzKQoKcGx0LmJhcihpbmQgLSB3aWR0aC8yIC0gd2lkdGgsIGNsYXNzX3RyYWluW21ldHJpY3NbMF1dLCB3aWR0aCwgY29sb3I9bWV0X2NvbHNbMF0sIGFscGhhPTAuOSwgZWRnZWNvbG9yPSdibGFjaycsIAogICAgbGFiZWw9J3t9Jy5mb3JtYXQobWV0cmljc1swXSwgc3R5bGU9J2l0YWxpY3MnKSkKcGx0LmJhcihpbmQgLSB3aWR0aC8yLCBjbGFzc190cmFpblttZXRyaWNzWzFdXSwgd2lkdGgsIGNvbG9yPW1ldF9jb2xzWzFdLCBhbHBoYT0wLjksIGVkZ2Vjb2xvcj0nYmxhY2snLCAKICAgIGxhYmVsPSd7fScuZm9ybWF0KG1ldHJpY3NbMV0sIHN0eWxlPSdpdGFsaWNzJykpCnBsdC5iYXIoaW5kICsgd2lkdGgvMiwgY2xhc3NfdHJhaW5bbWV0cmljc1syXV0sIHdpZHRoLCBjb2xvcj1tZXRfY29sc1syXSwgYWxwaGE9MC45LCBlZGdlY29sb3I9J2JsYWNrJywgCiAgICBsYWJlbD0ne30nLmZvcm1hdChtZXRyaWNzWzJdLCBzdHlsZT0naXRhbGljcycpKQpwbHQuYmFyKGluZCArIHdpZHRoLzIgKyB3aWR0aCwgY2xhc3NfdHJhaW5bbWV0cmljc1szXV0sIHdpZHRoLCBjb2xvcj1tZXRfY29sc1szXSwgYWxwaGE9MC45LCBlZGdlY29sb3I9J2JsYWNrJywgCiAgICBsYWJlbD0ne30nLmZvcm1hdChtZXRyaWNzWzNdLCBzdHlsZT0naXRhbGljcycpKQojcGx0LmJhcihpbmQgKyB3aWR0aC8yLCBjbGFzc190ZXN0WydTcGVjaWZpY2l0eSddLCB3aWR0aCwgY29sb3I9c3BfY29sb3JzLCBhbHBoYT0wLjUsIGVkZ2Vjb2xvcj0nYmxhY2snKQoKIyBzZXQgdGhlIGxhYmVscwpwbHQueHRpY2tzKGluZCwgY2xhc3NfdGVzdFsnU3BlY2llcyddLCByb3RhdGlvbj0ndmVydGljYWwnLCBmb250c3R5bGU9J2l0YWxpYycpCnBsdC55bGFiZWwoJ1Njb3JlJykKcGx0LnRpdGxlKCdNb2RlbCBwZXJmb3JtYW5jZSBvbiB0cmFpbmluZyBkYXRhJykKcGx0LnRpZ2h0X2xheW91dCgpCnBsdC5sZWdlbmQobmNvbCA9IDIsIGxvYz0ndXBwZXIgY2VudGVyJywgYmJveF90b19hbmNob3I9KDAuNDUsIC0wLjQ1KSwKICAgIG1hcmtlcnNjYWxlID0gMS41KQogICAgCiMgc2F2ZSB0aGUgZmlndXJlCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL2FsbC1tZXRyaWNzLXRyYWluLnN2ZycpCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL2FsbC1tZXRyaWNzLXRyYWluLnBuZycpCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL2FsbC1tZXRyaWNzLXRyYWluLnBkZicpCnBsdC5jbG9zZSgpCgoKIyBmaW5hbGx5LCBmb3IgcHJvYmFiaWxpdHkgc2FtcGxlcwpwbHQuZmlndXJlKGZpZ3NpemU9KDgsNSksIGRwaT0yMDApCndpZHRoID0gMC4yCmluZCA9IG5wLmFyYW5nZShuX3NwZWNpZXMpCgpwbHQuYmFyKGluZCAtIHdpZHRoLzIgLSB3aWR0aCwgY2xhc3NfcHJvYlttZXRyaWNzWzBdXSwgd2lkdGgsIGNvbG9yPW1ldF9jb2xzWzBdLCBhbHBoYT0wLjksIGVkZ2Vjb2xvcj0nYmxhY2snLCBsYWJlbD1tZXRyaWNzWzBdKQpwbHQuYmFyKGluZCAtIHdpZHRoLzIsIGNsYXNzX3Byb2JbbWV0cmljc1sxXV0sIHdpZHRoLCBjb2xvcj1tZXRfY29sc1sxXSwgYWxwaGE9MC45LCBlZGdlY29sb3I9J2JsYWNrJywgbGFiZWw9bWV0cmljc1sxXSkKcGx0LmJhcihpbmQgKyB3aWR0aC8yLCBjbGFzc19wcm9iW21ldHJpY3NbMl1dLCB3aWR0aCwgY29sb3I9bWV0X2NvbHNbMl0sIGFscGhhPTAuOSwgZWRnZWNvbG9yPSdibGFjaycsIGxhYmVsPW1ldHJpY3NbMl0pCnBsdC5iYXIoaW5kICsgd2lkdGgvMiArIHdpZHRoLCBjbGFzc19wcm9iW21ldHJpY3NbM11dLCB3aWR0aCwgY29sb3I9bWV0X2NvbHNbM10sIGFscGhhPTAuOSwgZWRnZWNvbG9yPSdibGFjaycsIGxhYmVsPW1ldHJpY3NbM10pCiNwbHQuYmFyKGluZCArIHdpZHRoLzIsIGNsYXNzX3Rlc3RbJ1NwZWNpZmljaXR5J10sIHdpZHRoLCBjb2xvcj1zcF9jb2xvcnMsIGFscGhhPTAuNSwgZWRnZWNvbG9yPSdibGFjaycpCgojIHNldCB0aGUgbGFiZWxzCnBsdC54dGlja3MoaW5kLCBjbGFzc19wcm9iWydTcGVjaWVzJ10sIHJvdGF0aW9uPSd2ZXJ0aWNhbCcsIGZvbnRzdHlsZT0naXRhbGljJykKcGx0LnlsYWJlbCgnU2NvcmUnKQpwbHQudGl0bGUoJ01vZGVsIHBlcmZvcm1hbmNlIG9uIHRlc3QgZGF0YSB1c2luZyBzYW1wbGUgcHJvYmFiaWxpdGllcycpCnBsdC50aWdodF9sYXlvdXQoKQoKcGx0LmxlZ2VuZChuY29sID0gMiwgbG9jPSd1cHBlciBjZW50ZXInLCBiYm94X3RvX2FuY2hvcj0oMC40NSwgLTAuNDUpLCAKICAgIG1hcmtlcnNjYWxlID0gMS41KQogICAgIy0wLjY1CiMgc2F2ZSB0aGUgZmlndXJlCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL2FsbC1tZXRyaWNzLXRlc3QtcHJvYi5zdmcnKQpwbHQuc2F2ZWZpZyhwYXRoX3Bsb3RzICsgJy9hbGwtbWV0cmljcy10ZXN0LXByb2IucG5nJykKcGx0LnNhdmVmaWcocGF0aF9wbG90cyArICcvYWxsLW1ldHJpY3MtdGVzdC1wcm9iLnBkZicpCnBsdC5jbG9zZSgpCgojIGRvIGl0IGFnYWluLCBpbmRpdmlkdWFsIHBsb3RzIHBlciBtZXRyaWMKcGx0LmZpZ3VyZShmaWdzaXplPSg0LDQpLCBkcGk9MjAwKQp3aWR0aCA9IDAuODUKaW5kID0gbnAuYXJhbmdlKG5fc3BlY2llcykKcGx0LmJhcihpbmQsIGNsYXNzX3Rlc3RbbWV0cmljc1swXV0sIHdpZHRoLCBjb2xvcj1zcF9jb2xvcnMsIGFscGhhPTAuOSwgZWRnZWNvbG9yPSdibGFjaycsIGxhYmVsPW1ldHJpY3NbMF0pCnBsdC54dGlja3MoaW5kLCBjbGFzc190ZXN0WydTcGVjaWVzJ10sIHJvdGF0aW9uPSd2ZXJ0aWNhbCcpCnBsdC55bGFiZWwoJ1Njb3JlJykKcGx0LnRpdGxlKG1ldHJpY3NbMF0pCnBsdC50aWdodF9sYXlvdXQoKQpwbHQuc2F2ZWZpZyhwYXRoX3Bsb3RzICsgJy97fS10ZXN0LnN2ZycuZm9ybWF0KG1ldHJpY3NbMF0pKQpwbHQuc2F2ZWZpZyhwYXRoX3Bsb3RzICsgJy97fS10ZXN0LnBuZycuZm9ybWF0KG1ldHJpY3NbMF0pKQpwbHQuY2xvc2UoKQoKcGx0LmZpZ3VyZShmaWdzaXplPSg0LDQpLCBkcGk9MjAwKQp3aWR0aCA9IDAuODUKaW5kID0gbnAuYXJhbmdlKG5fc3BlY2llcykKcGx0LmJhcihpbmQsIGNsYXNzX3Rlc3RbbWV0cmljc1sxXV0sIHdpZHRoLCBjb2xvcj1zcF9jb2xvcnMsIGFscGhhPTAuOSwgZWRnZWNvbG9yPSdibGFjaycsIGxhYmVsPW1ldHJpY3NbMV0pCnBsdC54dGlja3MoaW5kLCBjbGFzc190ZXN0WydTcGVjaWVzJ10sIHJvdGF0aW9uPSd2ZXJ0aWNhbCcpCnBsdC55bGFiZWwoJ1Njb3JlJykKcGx0LnRpdGxlKG1ldHJpY3NbMV0pCnBsdC50aWdodF9sYXlvdXQoKQpwbHQuc2F2ZWZpZyhwYXRoX3Bsb3RzICsgJy97fS10ZXN0LnN2ZycuZm9ybWF0KG1ldHJpY3NbMV0pKQpwbHQuc2F2ZWZpZyhwYXRoX3Bsb3RzICsgJy97fS10ZXN0LnBuZycuZm9ybWF0KG1ldHJpY3NbMV0pKQpwbHQuY2xvc2UoKQoKcGx0LmZpZ3VyZShmaWdzaXplPSg0LDQpLCBkcGk9MjAwKQp3aWR0aCA9IDAuODUKaW5kID0gbnAuYXJhbmdlKG5fc3BlY2llcykKcGx0LmJhcihpbmQsIGNsYXNzX3Rlc3RbbWV0cmljc1syXV0sIHdpZHRoLCBjb2xvcj1zcF9jb2xvcnMsIGFscGhhPTAuOSwgZWRnZWNvbG9yPSdibGFjaycsIGxhYmVsPW1ldHJpY3NbMl0pCnBsdC54dGlja3MoaW5kLCBjbGFzc190ZXN0WydTcGVjaWVzJ10sIHJvdGF0aW9uPSd2ZXJ0aWNhbCcpCnBsdC55bGFiZWwoJ1Njb3JlJykKcGx0LnRpdGxlKG1ldHJpY3NbMl0pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcGx0LnRpZ2h0X2xheW91dCgpCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL3t9LXRlc3Quc3ZnJy5mb3JtYXQobWV0cmljc1syXSkpCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL3t9LXRlc3QucG5nJy5mb3JtYXQobWV0cmljc1syXSkpCnBsdC5jbG9zZSgpCjx8ZmltX2VuZHw+"]
["94f97c18e0b54b908955deabb4a950e99c723e4d-2","94f97c18e0b54b908955deabb4a950e99c723e4d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFlaQppbXBvcnQgY29weQojaW1wb3J0IHBsb3RseQppbXBvcnQgcGlja2xlCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBzZWFib3JuIGFzIHNucwpmcm9tIHNrbGVhcm4gaW1wb3J0IHN2bQpmcm9tIHNrbGVhcm4gaW1wb3J0IG1ldHJpY3MKZnJvbSBza2xlYXJuIGltcG9ydCBlbnNlbWJsZQpmcm9tIHNrbGVhcm4gaW1wb3J0IG11bHRpY2xhc3MKZnJvbSBza2xlYXJuIGltcG9ydCBjYWxpYnJhdGlvbgpmcm9tIHNrbGVhcm4gaW1wb3J0IHByZXByb2Nlc3NpbmcKZnJvbSBza2xlYXJuIGltcG9ydCBtb2RlbF9zZWxlY3Rpb24KZnJvbSBza2xlYXJuLmRlY29tcG9zaXRpb24gaW1wb3J0IFBDQQpmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHB5cGxvdCBhcyBwbHQKZnJvbSBtYXRwbG90bGliIGltcG9ydCBsaW5lcwolbWF0cGxvdGxpYiB0awoKIyBzZXQgdGhlIHBhdGhzIHRvIGlucHV0IGZpbGVzCnBhdGhfc2VwID0gJy8nCnBhdGhfYmFzZSA9ICcvaG9tZS9jYmEvRG93bmxvYWRzL0VDT0RTRWRhdGFzZXQnCnBhdGhfY2xhc3NfdGVzdCA9IHBhdGhfc2VwLmpvaW4oW3BhdGhfYmFzZSwgJ2NsYXNzLW1ldHJpY3MtdGVzdGluZy5jc3YnXSkKcGF0aF9jbGFzc190cmFpbiA9IHBhdGhfc2VwLmpvaW4oW3BhdGhfYmFzZSwgJ2NsYXNzLW1ldHJpY3MtdHJhaW5pbmcuY3N2J10pCnBhdGhfY2xhc3NfcHJvYiA9IHBhdGhfc2VwLmpvaW4oW3BhdGhfYmFzZSwgJ2NsYXNzLW1ldHJpY3MtdGVzdGluZy1wcm9wLmNzdiddKQoKIyBzZXQgcGF0aHMgdG8gbmV3IG91dHB1dCBmaWxlcwpwYXRoX3Bsb3RzID0gcGF0aF9zZXAuam9pbihbcGF0aF9iYXNlLCAncGxvdHMnXSkKCiMjIyMjCiMgc2V0IHNvbWUgaGVscGVyIGZ1bmN0aW9ucwojIGZ1bmN0aW9uIHRvIGNyZWF0ZSBsZWdlbmQgcHJveGllcwpkZWYgY3JlYXRlX3Byb3h5KGNvbG9yLCBtYXJrZXIsIGxpbmVzdHlsZT0nbm9uZScpOgogICAgbGluZSA9IGxpbmVzLkxpbmUyRChbMF0sIFswXSwgbGluZXN0eWxlPWxpbmVzdHlsZSwgbWZjPWNvbG9yLAogICAgICAgIG1lYz0nYmxhY2snLCBtYXJrZXI9bWFya2VyKQogICAgcmV0dXJuIGxpbmUKCiMgZnVuY3Rpb24gdG8gbGFiZWwgbmV3IGNvbG9ycwpkZWYgbGFiZWxfY29sb3Iocm93LCBjb2xvcmJ5LCB1bmlxdWVfdmFscywgY29sb3JzKToKICAgICMgZ2V0IHRoZSBpbmRleCBmb3IgdGhlIHZhbHVlIHBhc3NlZCBhbmQgcmV0dXJuIHRoZQogICAgIyAgYXNzb2NpYXRlZCBjb2xvcgogICAgaW5kID0gdW5pcXVlX3ZhbHMuaW5kZXgocm93W2NvbG9yYnldKQogICAgcmV0dXJuIGNvbG9yc1tpbmRdCiAgICAKIyMjIyMKIyByZWFkIHRoZSBpbnB1dCBkYXRhCmNsYXNzX3Rlc3QgPSBwZC5yZWFkX2NzdihwYXRoX2NsYXNzX3Rlc3QpCmNsYXNzX3RyYWluID0gcGQucmVhZF9jc3YocGF0aF9jbGFzc190cmFpbikKY2xhc3NfcHJvYiA9IHBkLnJlYWRfY3N2KHBhdGhfY2xhc3NfcHJvYikKCiMgc2V0IHRoZSBjb2xvciBzY2hlbWUKbl9zcGVjaWVzID0gbGVuKGNsYXNzX3Rlc3QpCnNwX2NvbG9ycyA9IGFlaS5jb2xvci5jb2xvcl9ibGluZChuX3NwZWNpZXMpCm1ldF9jb2xvcnMgPSBhZWkuY29sb3IuY29sb3JfYmxpbmQoKQptZXRfY29scyA9IFttZXRfY29sb3JzWzJdLCBtZXRfY29sb3JzWzVdLCBtZXRfY29sb3JzWzNdLCBtZXRfY29sb3JzWzFdXQptZXRyaWNzID0gWydBY2N1cmFjeScsICdTcGVjaWZpY2l0eScsICdQcmVjaXNpb24nLCAnUmVjYWxsJ10KCiMgcGxvdCBhIHN0YWNrZWQgYmFyIGNoYXJ0IG9mIGFjY3VyYWN5IGFuZCBzcGVjaWZpY2l0eQpwbHQuZmlndXJlKGZpZ3NpemU9KDgsNSksIGRwaT0yMDApCndpZHRoID0gMC4yCmluZCA9IG5wLmFyYW5nZShuX3NwZWNpZXMpCgpwbHQuYmFyKGluZCAtIHdpZHRoLzIgLSB3aWR0aCwgY2xhc3NfdGVzdFttZXRyaWNzWzBdXSwgd2lkdGgsIGNvbG9yPW1ldF9jb2xzWzBdLCBhbHBoYT0wLjksIGVkZ2Vjb2xvcj0nYmxhY2snLCBsYWJlbD1tZXRyaWNzWzBdKQpwbHQuYmFyKGluZCAtIHdpZHRoLzIsIGNsYXNzX3Rlc3RbbWV0cmljc1sxXV0sIHdpZHRoLCBjb2xvcj1tZXRfY29sc1sxXSwgYWxwaGE9MC45LCBlZGdlY29sb3I9J2JsYWNrJywgbGFiZWw9bWV0cmljc1sxXSkKcGx0LmJhcihpbmQgKyB3aWR0aC8yLCBjbGFzc190ZXN0W21ldHJpY3NbMl1dLCB3aWR0aCwgY29sb3I9bWV0X2NvbHNbMl0sIGFscGhhPTAuOSwgZWRnZWNvbG9yPSdibGFjaycsIGxhYmVsPW1ldHJpY3NbMl0pCnBsdC5iYXIoaW5kICsgd2lkdGgvMiArIHdpZHRoLCBjbGFzc190ZXN0W21ldHJpY3NbM11dLCB3aWR0aCwgY29sb3I9bWV0X2NvbHNbM10sIGFscGhhPTAuOSwgZWRnZWNvbG9yPSdibGFjaycsIGxhYmVsPW1ldHJpY3NbM10pCiNwbHQuYmFyKGluZCArIHdpZHRoLzIsIGNsYXNzX3Rlc3RbJ1NwZWNpZmljaXR5J10sIHdpZHRoLCBjb2xvcj1zcF9jb2xvcnMsIGFscGhhPTAuNSwgZWRnZWNvbG9yPSdibGFjaycpCgojIHNldCB0aGUgbGFiZWxzCnBsdC54dGlja3MoaW5kLCBjbGFzc190ZXN0WydTcGVjaWVzJ10sIHJvdGF0aW9uPSd2ZXJ0aWNhbCcsIGZvbnRzdHlsZT0naXRhbGljJykKcGx0LnlsYWJlbCgnU2NvcmUnKQpwbHQudGl0bGUoJ01vZGVsIHBlcmZvcm1hbmNlIG9uIHRlc3RpbmcgZGF0YScpCnBsdC50aWdodF9sYXlvdXQoKQoKIyBjdXN0b20gYnVpbGQgdGhlIGxlZ2VuZAojbGVnZW5kID0gWydBY2N1cmFjeScsICdTcGVjaWZpY2l0eSddCiNsZWdlbmRfY29sb3JzID0gWygwLjMsIDAuMywgMC4zLCAwLjkpLCAoMC41LCAwLjUsIDAuNSwgMC41KV0KI2xlZ2VuZF9tYXJrZXIgPSBbJ3MnLCAncyddCgojcHJveGllcyA9IFtdCiNmb3IgaSBpbiByYW5nZShsZW4obGVnZW5kKSk6CiMgICAgcHJveGllcy5hcHBlbmQoY3JlYXRlX3Byb3h5KGxlZ2VuZF9jb2xvcnNbaV0sIGxlZ2VuZF9tYXJrZXJbaV0pKSMsIGxlZ2VuZF9saW5lc3R5bGVbaV0pKQogICAgCnBsdC5sZWdlbmQobmNvbCA9IDIsIGxvYz0ndXBwZXIgY2VudGVyJywgYmJveF90b19hbmNob3I9KDAuNDUsIC0wLjQ1KSwgCiAgICBtYXJrZXJzY2FsZSA9IDEuNSkKICAgICMtMC42NQojIHNhdmUgdGhlIGZpZ3VyZQpwbHQuc2F2ZWZpZyhwYXRoX3Bsb3RzICsgJy9hbGwtbWV0cmljcy10ZXN0LWJpbi1uby1pdGFsLnN2ZycpCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL2FsbC1tZXRyaWNzLXRlc3QtYmluLnBuZycpCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL2FsbC1tZXRyaWNzLXRlc3QtYmluLnBkZicpCnBsdC5jbG9zZSgpCgojIGRvIHRoZSBzYW1lIGZvciB0aGUgdHJhaW5pbmcgZGF0YQpwbHQuZmlndXJlKGZpZ3NpemU9KDgsNSksIGRwaT0yMDApCndpZHRoID0gMC4yMgppbmQgPSBucC5hcmFuZ2Uobl9zcGVjaWVzKQoKcGx0LmJhcihpbmQgLSB3aWR0aC8yIC0gd2lkdGgsIGNsYXNzX3RyYWluW21ldHJpY3NbMF1dLCB3aWR0aCwgY29sb3I9bWV0X2NvbHNbMF0sIGFscGhhPTAuOSwgZWRnZWNvbG9yPSdibGFjaycsIAogICAgbGFiZWw9J3t9Jy5mb3JtYXQobWV0cmljc1swXSwgc3R5bGU9J2l0YWxpY3MnKSkKcGx0LmJhcihpbmQgLSB3aWR0aC8yLCBjbGFzc190cmFpblttZXRyaWNzWzFdXSwgd2lkdGgsIGNvbG9yPW1ldF9jb2xzWzFdLCBhbHBoYT0wLjksIGVkZ2Vjb2xvcj0nYmxhY2snLCAKICAgIGxhYmVsPSd7fScuZm9ybWF0KG1ldHJpY3NbMV0sIHN0eWxlPSdpdGFsaWNzJykpCnBsdC5iYXIoaW5kICsgd2lkdGgvMiwgY2xhc3NfdHJhaW5bbWV0cmljc1syXV0sIHdpZHRoLCBjb2xvcj1tZXRfY29sc1syXSwgYWxwaGE9MC45LCBlZGdlY29sb3I9J2JsYWNrJywgCiAgICBsYWJlbD0ne30nLmZvcm1hdChtZXRyaWNzWzJdLCBzdHlsZT0naXRhbGljcycpKQpwbHQuYmFyKGluZCArIHdpZHRoLzIgKyB3aWR0aCwgY2xhc3NfdHJhaW5bbWV0cmljc1szXV0sIHdpZHRoLCBjb2xvcj1tZXRfY29sc1szXSwgYWxwaGE9MC45LCBlZGdlY29sb3I9J2JsYWNrJywgCiAgICBsYWJlbD0ne30nLmZvcm1hdChtZXRyaWNzWzNdLCBzdHlsZT0naXRhbGljcycpKQojcGx0LmJhcihpbmQgKyB3aWR0aC8yLCBjbGFzc190ZXN0WydTcGVjaWZpY2l0eSddLCB3aWR0aCwgY29sb3I9c3BfY29sb3JzLCBhbHBoYT0wLjUsIGVkZ2Vjb2xvcj0nYmxhY2snKQoKIyBzZXQgdGhlIGxhYmVscwpwbHQueHRpY2tzKGluZCwgY2xhc3NfdGVzdFsnU3BlY2llcyddLCByb3RhdGlvbj0ndmVydGljYWwnLCBmb250c3R5bGU9J2l0YWxpYycpCnBsdC55bGFiZWwoJ1Njb3JlJykKPHxmaW1faG9sZXw+CiAgICAKIyBzYXZlIHRoZSBmaWd1cmUKcGx0LnNhdmVmaWcocGF0aF9wbG90cyArICcvYWxsLW1ldHJpY3MtdHJhaW4uc3ZnJykKcGx0LnNhdmVmaWcocGF0aF9wbG90cyArICcvYWxsLW1ldHJpY3MtdHJhaW4ucG5nJykKcGx0LnNhdmVmaWcocGF0aF9wbG90cyArICcvYWxsLW1ldHJpY3MtdHJhaW4ucGRmJykKcGx0LmNsb3NlKCkKCgojIGZpbmFsbHksIGZvciBwcm9iYWJpbGl0eSBzYW1wbGVzCnBsdC5maWd1cmUoZmlnc2l6ZT0oOCw1KSwgZHBpPTIwMCkKd2lkdGggPSAwLjIKaW5kID0gbnAuYXJhbmdlKG5fc3BlY2llcykKCnBsdC5iYXIoaW5kIC0gd2lkdGgvMiAtIHdpZHRoLCBjbGFzc19wcm9iW21ldHJpY3NbMF1dLCB3aWR0aCwgY29sb3I9bWV0X2NvbHNbMF0sIGFscGhhPTAuOSwgZWRnZWNvbG9yPSdibGFjaycsIGxhYmVsPW1ldHJpY3NbMF0pCnBsdC5iYXIoaW5kIC0gd2lkdGgvMiwgY2xhc3NfcHJvYlttZXRyaWNzWzFdXSwgd2lkdGgsIGNvbG9yPW1ldF9jb2xzWzFdLCBhbHBoYT0wLjksIGVkZ2Vjb2xvcj0nYmxhY2snLCBsYWJlbD1tZXRyaWNzWzFdKQpwbHQuYmFyKGluZCArIHdpZHRoLzIsIGNsYXNzX3Byb2JbbWV0cmljc1syXV0sIHdpZHRoLCBjb2xvcj1tZXRfY29sc1syXSwgYWxwaGE9MC45LCBlZGdlY29sb3I9J2JsYWNrJywgbGFiZWw9bWV0cmljc1syXSkKcGx0LmJhcihpbmQgKyB3aWR0aC8yICsgd2lkdGgsIGNsYXNzX3Byb2JbbWV0cmljc1szXV0sIHdpZHRoLCBjb2xvcj1tZXRfY29sc1szXSwgYWxwaGE9MC45LCBlZGdlY29sb3I9J2JsYWNrJywgbGFiZWw9bWV0cmljc1szXSkKI3BsdC5iYXIoaW5kICsgd2lkdGgvMiwgY2xhc3NfdGVzdFsnU3BlY2lmaWNpdHknXSwgd2lkdGgsIGNvbG9yPXNwX2NvbG9ycywgYWxwaGE9MC41LCBlZGdlY29sb3I9J2JsYWNrJykKCiMgc2V0IHRoZSBsYWJlbHMKcGx0Lnh0aWNrcyhpbmQsIGNsYXNzX3Byb2JbJ1NwZWNpZXMnXSwgcm90YXRpb249J3ZlcnRpY2FsJywgZm9udHN0eWxlPSdpdGFsaWMnKQpwbHQueWxhYmVsKCdTY29yZScpCnBsdC50aXRsZSgnTW9kZWwgcGVyZm9ybWFuY2Ugb24gdGVzdCBkYXRhIHVzaW5nIHNhbXBsZSBwcm9iYWJpbGl0aWVzJykKcGx0LnRpZ2h0X2xheW91dCgpCgpwbHQubGVnZW5kKG5jb2wgPSAyLCBsb2M9J3VwcGVyIGNlbnRlcicsIGJib3hfdG9fYW5jaG9yPSgwLjQ1LCAtMC40NSksIAogICAgbWFya2Vyc2NhbGUgPSAxLjUpCiAgICAjLTAuNjUKIyBzYXZlIHRoZSBmaWd1cmUKcGx0LnNhdmVmaWcocGF0aF9wbG90cyArICcvYWxsLW1ldHJpY3MtdGVzdC1wcm9iLnN2ZycpCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL2FsbC1tZXRyaWNzLXRlc3QtcHJvYi5wbmcnKQpwbHQuc2F2ZWZpZyhwYXRoX3Bsb3RzICsgJy9hbGwtbWV0cmljcy10ZXN0LXByb2IucGRmJykKcGx0LmNsb3NlKCkKCiMgZG8gaXQgYWdhaW4sIGluZGl2aWR1YWwgcGxvdHMgcGVyIG1ldHJpYwpwbHQuZmlndXJlKGZpZ3NpemU9KDQsNCksIGRwaT0yMDApCndpZHRoID0gMC44NQppbmQgPSBucC5hcmFuZ2Uobl9zcGVjaWVzKQpwbHQuYmFyKGluZCwgY2xhc3NfdGVzdFttZXRyaWNzWzBdXSwgd2lkdGgsIGNvbG9yPXNwX2NvbG9ycywgYWxwaGE9MC45LCBlZGdlY29sb3I9J2JsYWNrJywgbGFiZWw9bWV0cmljc1swXSkKcGx0Lnh0aWNrcyhpbmQsIGNsYXNzX3Rlc3RbJ1NwZWNpZXMnXSwgcm90YXRpb249J3ZlcnRpY2FsJykKcGx0LnlsYWJlbCgnU2NvcmUnKQpwbHQudGl0bGUobWV0cmljc1swXSkKcGx0LnRpZ2h0X2xheW91dCgpCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL3t9LXRlc3Quc3ZnJy5mb3JtYXQobWV0cmljc1swXSkpCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL3t9LXRlc3QucG5nJy5mb3JtYXQobWV0cmljc1swXSkpCnBsdC5jbG9zZSgpCgpwbHQuZmlndXJlKGZpZ3NpemU9KDQsNCksIGRwaT0yMDApCndpZHRoID0gMC44NQppbmQgPSBucC5hcmFuZ2Uobl9zcGVjaWVzKQpwbHQuYmFyKGluZCwgY2xhc3NfdGVzdFttZXRyaWNzWzFdXSwgd2lkdGgsIGNvbG9yPXNwX2NvbG9ycywgYWxwaGE9MC45LCBlZGdlY29sb3I9J2JsYWNrJywgbGFiZWw9bWV0cmljc1sxXSkKcGx0Lnh0aWNrcyhpbmQsIGNsYXNzX3Rlc3RbJ1NwZWNpZXMnXSwgcm90YXRpb249J3ZlcnRpY2FsJykKcGx0LnlsYWJlbCgnU2NvcmUnKQpwbHQudGl0bGUobWV0cmljc1sxXSkKcGx0LnRpZ2h0X2xheW91dCgpCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL3t9LXRlc3Quc3ZnJy5mb3JtYXQobWV0cmljc1sxXSkpCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL3t9LXRlc3QucG5nJy5mb3JtYXQobWV0cmljc1sxXSkpCnBsdC5jbG9zZSgpCgpwbHQuZmlndXJlKGZpZ3NpemU9KDQsNCksIGRwaT0yMDApCndpZHRoID0gMC44NQppbmQgPSBucC5hcmFuZ2Uobl9zcGVjaWVzKQpwbHQuYmFyKGluZCwgY2xhc3NfdGVzdFttZXRyaWNzWzJdXSwgd2lkdGgsIGNvbG9yPXNwX2NvbG9ycywgYWxwaGE9MC45LCBlZGdlY29sb3I9J2JsYWNrJywgbGFiZWw9bWV0cmljc1syXSkKcGx0Lnh0aWNrcyhpbmQsIGNsYXNzX3Rlc3RbJ1NwZWNpZXMnXSwgcm90YXRpb249J3ZlcnRpY2FsJykKcGx0LnlsYWJlbCgnU2NvcmUnKQpwbHQudGl0bGUobWV0cmljc1syXSkKcGx0LnRpZ2h0X2xheW91dCgpCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL3t9LXRlc3Quc3ZnJy5mb3JtYXQobWV0cmljc1syXSkpCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL3t9LXRlc3QucG5nJy5mb3JtYXQobWV0cmljc1syXSkpCnBsdC5jbG9zZSgpCgpwbHQuZmlndXJlKGZpZ3NpemU9KDQsNCksIGRwaT0yMDApCndpZHRoID0gMC44NQppbmQgPSBucC5hcmFuZ2Uobl9zcGVjaWVzKQpwbHQuYmFyKGluZCwgY2xhc3NfdGVzdFttZXRyaWNzWzNdXSwgd2lkdGgsIGNvbG9yPXNwX2NvbG9ycywgYWxwaGE9MC45LCBlZGdlY29sb3I9J2JsYWNrJywgbGFiZWw9bWV0cmljc1szXSkKcGx0Lnh0aWNrcyhpbmQsIGNsYXNzX3Rlc3RbJ1NwZWNpZXMnXSwgcm90YXRpb249J3ZlcnRpY2FsJykKcGx0LnlsYWJlbCgnU2NvcmUnKQpwbHQudGl0bGUobWV0cmljc1szXSkKcGx0LnRpZ2h0X2xheW91dCgpCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL3t9LXRlc3Quc3ZnJy5mb3JtYXQobWV0cmljc1szXSkpCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL3t9LXRlc3QucG5nJy5mb3JtYXQobWV0cmljc1szXSkpCnBsdC5jbG9zZSgpCgojIGFuZCBkdXBsaWNhdGUgZm9yIHRoZSB0cmFpbmluZyBkYXRhCnBsdC5maWd1cmUoZmlnc2l6ZT0oNCw0KSwgZHBpPTIwMCkKd2lkdGggPSAwLjg1CmluZCA9IG5wLmFyYW5nZShuX3NwZWNpZXMpCnBsdC5iYXIoaW5kLCBjbGFzc190cmFpblttZXRyaWNzWzBdXSwgd2lkdGgsIGNvbG9yPXNwX2NvbG9ycywgYWxwaGE9MC45LCBlZGdlY29sb3I9J2JsYWNrJywgbGFiZWw9bWV0cmljc1swXSkKcGx0Lnh0aWNrcyhpbmQsIGNsYXNzX3RyYWluWydTcGVjaWVzJ10sIHJvdGF0aW9uPSd2ZXJ0aWNhbCcpCnBsdC55bGFiZWwoJ1Njb3JlJykKcGx0LnRpdGxlKG1ldHJpY3NbMF0pCnBsdC50aWdodF9sYXlvdXQoKQpwbHQuc2F2ZWZpZyhwYXRoX3Bsb3RzICsgJy97fS10cmFpbi5zdmcnLmZvcm1hdChtZXRyaWNzWzBdKSkKcGx0LnNhdmVmaWcocGF0aF9wbG90cyArICcve30tdHJhaW4ucG5nJy5mb3JtYXQobWV0cmljc1swXSkpCnBsdC5jbG9zZSgpCgpwbHQuZmlndXJlKGZpZ3NpemU9KDQsNCksIGRwaT0yMDApCndpZHRoID0gMC44NQppbmQgPSBucC5hcmFuZ2Uobl9zcGVjaWVzKQpwbHQuYmFyKGluZCwgY2xhc3NfdHJhaW5bbWV0cmljc1sxXV0sIHdpZHRoLCBjb2xvcj1zcF9jb2xvcnMsIGFscGhhPTAuOSwgZWRnZWNvbG9yPSdibGFjaycsIGxhYmVsPW1ldHJpY3NbMV0pCnBsdC54dGlja3MoaW5kLCBjbGFzc190cmFpblsnU3BlY2llcyddLCByb3RhdGlvbj0ndmVydGljYWwnKQpwbHQueWxhYmVsKCdTY29yZScpCnBsdC50aXRsZShtZXRyaWNzWzFdKQpwbHQudGlnaHRfbGF5b3V0KCkKcGx0LnNhdmVmaWcocGF0aF9wbG90cyArICcve30tdHJhaW4uc3ZnJy5mb3JtYXQobWV0cmljc1sxXSkpCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL3t9LXRyYWluLnBuZycuZm9ybWF0KG1ldHJpY3NbMV0pKQpwbHQuY2xvc2UoKQoKcGx0LmZpZ3VyZShmaWdzaXplPSg0LDQpLCBkcGk9MjAwKQp3aWR0aCA9IDAuODUKaW5kID0gbnAuYXJhbmdlKG5fc3BlY2llcykKcGx0LmJhcihpbmQsIGNsYXNzX3RyYWluW21ldHJpY3NbMl1dLCB3aWR0aCwgY29sb3I9c3BfY29sb3JzLCBhbHBoYT0wLjksIGVkZ2Vjb2xvcj0nYmxhY2snLCBsYWJlbD1tZXRyaWNzWzJdKQpwbHQueHRpY2tzKGluZCwgY2xhc3NfdHJhaW5bJ1NwZWNpZXMnXSwgcm90YXRpb249J3ZlcnRpY2FsJykKcGx0LnlsYWJlbCgnU2NvcmUnKQpwbHQudGl0bGUobWV0cmljc1syXSkKcGx0LnRpZ2h0X2xheW91dCgpCnBsdC5zYXZlZmlnKHBhdGhfcGxvdHMgKyAnL3t9LXRyYWluLnN2ZycuZm9ybWF0KG1ldHJpY3NbMl0pKQpwbHQuc2F2ZWZpZyhwYXRoX3Bsb3RzICsgJy97fS10cmFpbi5wbmcnLmZvcm1hdChtZXRyaWNzWzJdKSkKcGx0LmNsb3NlKCkKCnBsdC5maWd1cmUoZmlnc2l6ZT0oNCw0KSwgZHBpPTIwMCkKd2lkdGggPSAwLjg1CmluZCA9IG5wLmFyYW5nZShuX3NwZWNpZXMpCnBsdC5iYXIoaW5kLCBjbGFzc190cmFpblttZXRyaWNzWzNdXSwgd2lkdGgsIGNvbG9yPXNwX2NvbG9ycywgYWxwaGE9MC45LCBlZGdlY29sb3I9J2JsYWNrJywgbGFiZWw9bWV0cmljc1szXSkKcGx0Lnh0aWNrcyhpbmQsIGNsYXNzX3RyYWluWydTcGVjaWVzJ10sIHJvdGF0aW9uPSd2ZXJ0aWNhbCcpCnBsdC55bGFiZWwoJ1Njb3JlJykKcGx0LnRpdGxlKG1ldHJpY3NbM10pCnBsdC50aWdodF9sYXlvdXQoKQpwbHQuc2F2ZWZpZyhwYXRoX3Bsb3RzICsgJy97fS10cmFpbi5zdmcnLmZvcm1hdChtZXRyaWNzWzNdKSkKcGx0LnNhdmVmaWcocGF0aF9wbG90cyArICcve30tdHJhaW4ucG5nJy5mb3JtYXQobWV0cmljc1szXSkpCnBsdC5jbG9zZSgpCjx8ZmltX3N1ZmZpeHw+CnBsdC50aXRsZSgnTW9kZWwgcGVyZm9ybWFuY2Ugb24gdHJhaW5pbmcgZGF0YScpCnBsdC50aWdodF9sYXlvdXQoKQpwbHQubGVnZW5kKG5jb2wgPSAyLCBsb2M9J3VwcGVyIGNlbnRlcicsIGJib3hfdG9fYW5jaG9yPSgwLjQ1LCAtMC40NSksCiAgICBtYXJrZXJzY2FsZSA9IDEuNSkKPHxmaW1fZW5kfD4="]
["94f97c18e0b54b908955deabb4a950e99c723e4d-3","94f97c18e0b54b908955deabb4a950e99c723e4d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFlaQppbXBvcnQgY29weQojaW1wb3J0IHBsb3RseQppbXBvcnQgcGlja2xlCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBzZWFib3JuIGFzIHNucwpmcm9tIHNrbGVhcm4gaW1wb3J0IHN2bQpmcm9tIHNrbGVhcm4gaW1wb3J0IG1ldHJpY3MKZnJvbSBza2xlYXJuIGltcG9ydCBlbnNlbWJsZQpmcm9tIHNrbGVhcm4gaW1wb3J0IG11bHRpY2xhc3MKZnJvbSBza2xlYXJuIGltcG9ydCBjYWxpYnJhdGlvbgpmcm9tIHNrbGVhcm4gaW1wb3J0IHByZXByb2Nlc3NpbmcKZnJvbSBza2xlYXJuIGltcG9ydCBtb2RlbF9zZWxlY3Rpb24KZnJvbSBza2xlYXJuLmRlY29tcG9zaXRpb24gaW1wb3J0IFBDQQpmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHB5cGxvdCBhcyBwbHQKZnJvbSBtYXRwbG90bGliIGltcG9ydCBsaW5lcwolbWF0cGxvdGxpYiB0awoKIyBzZXQgdGhlIHBhdGhzIHRvIGlucHV0IGZpbGVzCnBhdGhfc2VwID0gJy8nCnBhdGhfYmFzZSA9ICcvaG9tZS9jYmEvRG93bmxvYWRzL0VDT0RTRWRhdGFzZXQnCnBhdGhfY2xhc3NfdGVzdCA9IHBhdGhfc2VwLmpvaW4oW3BhdGhfYmFzZSwgJ2NsYXNzLW1ldHJpY3MtdGVzdGluZy5jc3YnXSkKcGF0aF9jbGFzc190cmFpbiA9IHBhdGhfc2VwLmpvaW4oW3BhdGhfYmFzZSwgJ2NsYXNzLW1ldHJpY3MtdHJhaW5pbmcuY3N2J10pCnBhdGhfY2xhc3NfcHJvYiA9IHBhdGhfc2VwLmpvaW4oW3BhdGhfYmFzZSwgJ2NsYXNzLW1ldHJpY3MtdGVzdGluZy1wcm9wLmNzdiddKQoKIyBzZXQgcGF0aHMgdG8gbmV3IG91dHB1dCBmaWxlcwpwYXRoX3Bsb3RzID0gcGF0aF9zZXAuam9pbihbcGF0aF9iYXNlLCAncGxvdHMnXSkKCiMjIyMjCiMgc2V0IHNvbWUgaGVscGVyIGZ1bmN0aW9ucwojIGZ1bmN0aW9uIHRvIGNyZWF0ZSBsZWdlbmQgcHJveGllcwpkZWYgY3JlYXRlX3Byb3h5KGNvbG9yLCBtYXJrZXIsIGxpbmVzdHlsZT0nbm9uZScpOgogICAgbGluZSA9IGxpbmVzLkxpbmUyRChbMF0sIFswXSwgbGluZXN0eWxlPWxpbmVzdHlsZSwgbWZjPWNvbG9yLAogICAgICAgIG1lYz0nYmxhY2snLCBtYXJrZXI9bWFya2VyKQogICAgcmV0dXJuIGxpbmUKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBmdW5jdGlvbiB0byBsYWJlbCBuZXcgY29sb3JzCmRlZiBsYWJlbF9jb2xvcihyb3csIGNvbG9yYnksIHVuaXF1ZV92YWxzLCBjb2xvcnMpOgogICAgIyBnZXQgdGhlIGluZGV4IGZvciB0aGUgdmFsdWUgcGFzc2VkIGFuZCByZXR1cm4gdGhlCiAgICAjICBhc3NvY2lhdGVkIGNvbG9yCjx8ZmltX2VuZHw+"]
["99fc10534be1c28e055fcf6d78c61002dfc9121f-1","99fc10534be1c28e055fcf6d78c61002dfc9121f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb251dGlsCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGltcG9ydCBqc29uCiAgICBqc29uZGljdF9hPXsnVGFybyc6ewogICAgCSduYW1lJyA6ICdZYW1hZGEnLAogICAgCSdhZ2UnIDogMjUKICAgIH0sCiAgICAnSGFuYWtvJzp7CiAgICAJJ25hbWUnIDogJ1Rha2VkYScsCiAgICAJJ2FnZScgOiAyMgoKPHxmaW1faG9sZXw+CiAgICB9LAogICAgJ0hhbmFrbyc6ewogICAgCSduYW1lJyA6ICdUYWtlZGEnLAogICAgCSdhZ2UnIDogMjIKCiAgICB9LAogICAgJ0tlbmppJzp7CiAgICAJJ25hbWUnIDogJ0tpbm9zaGl0YScsCiAgICAJJ2FnZScgOiAyMAoKICAgIH19CiAgICBwcmludCAiSlNPTiBBLiIKICAgIHByaW50IGpzb24uZHVtcHMoanNvbmRpY3RfYSkKICAgIHByaW50ICJKU09OIEIuIgogICAgcHJpbnQganNvbi5kdW1wcyhqc29uZGljdF9iKQogICAgZGlmZjEgPSBqc29udXRpbC5kaWZmKGpzb25kaWN0X2EsIGpzb25kaWN0X2IpCiAgICBwcmludCAiPT09PT09PT09PT09PSIKICAgIHByaW50ICJKU09OIERpZmYuIgogICAgcHJpbnQganNvbi5kdW1wcyhkaWZmMSkKPHxmaW1fc3VmZml4fD4KICAgIH19CiAgICBqc29uZGljdF9iPXsnVGFybyc6ewogICAgCSduYW1lJyA6ICdZYW1hZGEnLAogICAgCSdhZ2UnIDogMjUKPHxmaW1fZW5kfD4="]
["99fc10534be1c28e055fcf6d78c61002dfc9121f-2","99fc10534be1c28e055fcf6d78c61002dfc9121f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb251dGlsCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGltcG9ydCBqc29uCiAgICBqc29uZGljdF9hPXsnVGFybyc6ewogICAgCSduYW1lJyA6ICdZYW1hZGEnLAogICAgCSdhZ2UnIDogMjUKICAgIH0sCiAgICAnSGFuYWtvJzp7CiAgICAJJ25hbWUnIDogJ1Rha2VkYScsCiAgICAJJ2FnZScgOiAyMgoKICAgIH19CiAgICBqc29uZGljdF9iPXsnVGFybyc6ewogICAgCSduYW1lJyA6ICdZYW1hZGEnLAogICAgCSdhZ2UnIDogMjUKICAgIH0sCiAgICAnSGFuYWtvJzp7CiAgICAJJ25hbWUnIDogJ1Rha2VkYScsCiAgICAJJ2FnZScgOiAyMgoKICAgIH0sCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICdLZW5qaSc6ewogICAgCSduYW1lJyA6ICdLaW5vc2hpdGEnLAogICAgCSdhZ2UnIDogMjAKCjx8ZmltX2VuZHw+"]
["99fc10534be1c28e055fcf6d78c61002dfc9121f-3","99fc10534be1c28e055fcf6d78c61002dfc9121f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb251dGlsCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGltcG9ydCBqc29uCiAgICBqc29uZGljdF9hPXsnVGFybyc6ewogICAgCSduYW1lJyA6ICdZYW1hZGEnLAogICAgCSdhZ2UnIDogMjUKICAgIH0sCiAgICAnSGFuYWtvJzp7CiAgICAJJ25hbWUnIDogJ1Rha2VkYScsCiAgICAJJ2FnZScgOiAyMgoKICAgIH19CiAgICBqc29uZGljdF9iPXsnVGFybyc6ewogICAgCSduYW1lJyA6ICdZYW1hZGEnLAogICAgCSdhZ2UnIDogMjUKICAgIH0sCiAgICAnSGFuYWtvJzp7CiAgICAJJ25hbWUnIDogJ1Rha2VkYScsCiAgICAJJ2FnZScgOiAyMgoKICAgIH0sCiAgICAnS2VuamknOnsKICAgIAknbmFtZScgOiAnS2lub3NoaXRhJywKICAgIAknYWdlJyA6IDIwCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICB9fQogICAgcHJpbnQgIkpTT04gQS4iCiAgICBwcmludCBqc29uLmR1bXBzKGpzb25kaWN0X2EpCiAgICBwcmludCAiSlNPTiBCLiIKPHxmaW1fZW5kfD4="]
["99fc10534be1c28e055fcf6d78c61002dfc9121f-4","99fc10534be1c28e055fcf6d78c61002dfc9121f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb251dGlsCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGltcG9ydCBqc29uCiAgICBqc29uZGljdF9hPXsnVGFybyc6ewogICAgCSduYW1lJyA6ICdZYW1hZGEnLAogICAgCSdhZ2UnIDogMjUKICAgIH0sCiAgICAnSGFuYWtvJzp7CiAgICAJJ25hbWUnIDogJ1Rha2VkYScsCiAgICAJJ2FnZScgOiAyMgoKICAgIH19CiAgICBqc29uZGljdF9iPXsnVGFybyc6ewogICAgCSduYW1lJyA6ICdZYW1hZGEnLAogICAgCSdhZ2UnIDogMjUKICAgIH0sCiAgICAnSGFuYWtvJzp7CiAgICAJJ25hbWUnIDogJ1Rha2VkYScsCiAgICAJJ2FnZScgOiAyMgoKICAgIH0sCiAgICAnS2VuamknOnsKICAgIAknbmFtZScgOiAnS2lub3NoaXRhJywKICAgIAknYWdlJyA6IDIwCgogICAgfX0KPHxmaW1faG9sZXw+CiAgICBkaWZmMSA9IGpzb251dGlsLmRpZmYoanNvbmRpY3RfYSwganNvbmRpY3RfYikKICAgIHByaW50ICI9PT09PT09PT09PT09IgogICAgcHJpbnQgIkpTT04gRGlmZi4iCiAgICBwcmludCBqc29uLmR1bXBzKGRpZmYxKQo8fGZpbV9zdWZmaXh8PgogICAgcHJpbnQgIkpTT04gQS4iCiAgICBwcmludCBqc29uLmR1bXBzKGpzb25kaWN0X2EpCiAgICBwcmludCAiSlNPTiBCLiIKICAgIHByaW50IGpzb24uZHVtcHMoanNvbmRpY3RfYikKPHxmaW1fZW5kfD4="]
["ca88de9dc6cb4138e7e7fcf676be94c2f956a4d5-1","ca88de9dc6cb4138e7e7fcf676be94c2f956a4d5","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IHN5cwoKI2Zyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwCmZyb20gc2V0dXB0b29scyBpbXBvcnQgc2V0dXAKCmxvbmdfZGVzY3JpcHRpb249JycnXApPdmVydmlldwo9PT09PT09PQoKVGhpcyBwYWNrYWdlIGNhbiBiZSB1c2VkIHRvIHJlY29yZCBkYXRhIGZyb20gYSBUZWt0cm9uaXggTVNPNC81LzYgY29ubmVjdGVkIGFzIFRDUElQIGluc3RydW1lbnQuIAoKCkluc3RhbGxhdGlvbgo9PT09PT09PT09PT0KCllvdSBuZWVkIGZpcnN0IHRvIGluc3RhbGwgdGhlIGBQeVZJU0FgXyBwYWNrYWdlLiAKVG8gaW5zdGFsbCBweVRla01TTywgZG93bmxvYWQgdGhlIHBhY2thZ2UgYW5kIHJ1biB0aGUgY29tbWFuZDoKCiAgcHl0aG9uIHNldHVwLnB5IGluc3RhbGwKCllvdSBjYW4gYWxzbyBkaXJlY3RseSBtb3ZlIHRoZSBweVRla01TTyBkaXJlY3RvcnkgdG8gYSBsb2NhdGlvbgp0aGF0IFB5dGhvbiBjYW4gaW1wb3J0IGZyb20gKGRpcmVjdG9yeSBpbiB3aGljaCBzY3JpcHRzIAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CnVzaW5nIFB5REFRbXggYXJlIHJ1biwgZXRjLikKClNvdXJjZXMgY2FuIGFsc28gYmUgZG93bmxvYWQgb24gdGhlIGBweVRla01TTyBnaXRodWIgcmVwb3NpdG9yeWBfLiAKCjx8ZmltX2VuZHw+"]
["00f03000814f6f171716be84c1aa0633cab03fe1-1","00f03000814f6f171716be84c1aa0633cab03fe1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGJhc2U2NAppbXBvcnQganNvbgpmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwKCmltcG9ydCByZXF1ZXN0cwpmcm9tIGpvc2UgaW1wb3J0IGp3aywgand0CmZyb20gam9zZS5iYWNrZW5kcy5iYXNlIGltcG9ydCBLZXkKZnJvbSBrYWxsaXN0aWNvcmUudXRpbHMgaW1wb3J0IHNpbmdsZXRvbgoKCmNsYXNzIEp3dEV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2U6IHN0ciwgKmFyZ3M6IG9iamVjdCkgLT4gTm9uZToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKG1lc3NhZ2UsICphcmdzKQogICAgICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UKCgpjbGFzcyBQdWJsaWNLZXlzKG1ldGFjbGFzcz1zaW5nbGV0b24uU2luZ2xldG9uKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmtleXMgPSB7fQoKICAgIGRlZiBhZGQoc2VsZiwga2lkOiBzdHIsIGtleTogS2V5KToKICAgICAgICBzZWxmLmtleXNba2lkXSA9IGtleQoKICAgIGRlZiBnZXQoc2VsZiwga2lkOiBzdHIpIC0+IE9wdGlvbmFsW0tleV06CiAgICAgICAgcmV0dXJuIHNlbGYua2V5cy5nZXQoa2lkLCBOb25lKQoKICAgIGRlZiBraWRzKHNlbGYpIC0+IGxpc3Q6CiAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5rZXlzKQoKICAgIGRlZiBpc19lbXB0eShzZWxmKSAtPiBib29sOgo8fGZpbV9ob2xlfD4KY2xhc3MgSnd0SGFuZGxlcjoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqd2tfdXJsOiBzdHIsIGF1ZGllbmNlOiBzdHIpOgogICAgICAgIHNlbGYucHVibGljX2tleXMgPSBQdWJsaWNLZXlzKCkKICAgICAgICBzZWxmLmp3a191cmwgPSBqd2tfdXJsCiAgICAgICAgc2VsZi5hdWRpZW5jZSA9IGF1ZGllbmNlCgogICAgZGVmIGRlY29kZShzZWxmLCB0b2tlbjogc3RyKSAtPiBPcHRpb25hbFtkaWN0XToKICAgICAgICB0b2tlbl9wYXJ0cyA9IHRva2VuLnNwbGl0KCcuJykKICAgICAgICB0b2tlbl9oZWFkZXIgPSBqc29uLmxvYWRzKAogICAgICAgICAgICBiYXNlNjQuYjY0ZGVjb2RlKHRva2VuX3BhcnRzWzBdKS5kZWNvZGUoJ3V0Zi04JykpCiAgICAgICAga2lkID0gdG9rZW5faGVhZGVyLmdldCgna2lkJykgb3IgdG9rZW5faGVhZGVyLmdldCgneDV0JykKICAgICAgICBpZiBub3Qga2lkOgogICAgICAgICAgICByYWlzZSBKd3RFeGNlcHRpb24oJ2tpZCBub3QgZm91bmQgaW4gdG9rZW4gaGVhZGVyJykKICAgICAgICBpZiBzZWxmLnB1YmxpY19rZXlzLmlzX2VtcHR5KCkgb3Iga2lkIG5vdCBpbiBzZWxmLnB1YmxpY19rZXlzLmtpZHMoKToKICAgICAgICAgICAgc2VsZi5fcmV0cmlldmVfcHVibGljX2tleXMoKQogICAgICAgIGlmIGtpZCBub3QgaW4gc2VsZi5wdWJsaWNfa2V5cy5raWRzKCk6CiAgICAgICAgICAgIHJhaXNlIEp3dEV4Y2VwdGlvbignandrIGZvciB0aGlzIHRva2VuIHdhcyBub3QgZm91bmQnKQogICAgICAgIHB1YmxpY19rZXkgPSBzZWxmLnB1YmxpY19rZXlzLmdldChraWQpCiAgICAgICAgcmV0dXJuIGp3dC5kZWNvZGUodG9rZW4sIHB1YmxpY19rZXksIGF1ZGllbmNlPXNlbGYuYXVkaWVuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnb3JpdGhtcz10b2tlbl9oZWFkZXIuZ2V0KCdhbGcnKSkKCiAgICBkZWYgX3JldHJpZXZlX3B1YmxpY19rZXlzKHNlbGYpOgogICAgICAgIGhlYWRlciA9IHsnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nfQogICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMuZ2V0KHVybD1zZWxmLmp3a191cmwsIGhlYWRlcnM9aGVhZGVyKQogICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlID09IDIwMDoKICAgICAgICAgICAga2V5X2RhdGEgPSByZXNwb25zZS5qc29uKClbJ2tleXMnXQogICAgICAgICAgICBzZWxmLl9jcmVhdGVfcHVibGljX2tleXMoa2V5X2RhdGEpCgogICAgZGVmIF9jcmVhdGVfcHVibGljX2tleXMoc2VsZiwga2V5X2RhdGE6IGxpc3QpOgogICAgICAgIGZvciBrZXkgaW4ga2V5X2RhdGE6CiAgICAgICAgICAgIGlmIGtleVsna3R5J10gPT0gJ1JTQSc6ICAjIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIFJTQQogICAgICAgICAgICAgICAga2lkID0ga2V5LmdldCgna2lkJykgb3Iga2V5LmdldCgneDV0JykKICAgICAgICAgICAgICAgIHB1YmxpY19rZXkgPSBqd2suY29uc3RydWN0KGtleSkKICAgICAgICAgICAgICAgIHNlbGYucHVibGljX2tleXMuYWRkKGtpZCwgcHVibGljX2tleSkKPHxmaW1fc3VmZml4fD4KICAgICAgICByZXR1cm4gbm90IGJvb2woc2VsZi5rZXlzKQoKCjx8ZmltX2VuZHw+"]
["00f03000814f6f171716be84c1aa0633cab03fe1-2","00f03000814f6f171716be84c1aa0633cab03fe1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGJhc2U2NAppbXBvcnQganNvbgpmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwKCmltcG9ydCByZXF1ZXN0cwpmcm9tIGpvc2UgaW1wb3J0IGp3aywgand0CmZyb20gam9zZS5iYWNrZW5kcy5iYXNlIGltcG9ydCBLZXkKZnJvbSBrYWxsaXN0aWNvcmUudXRpbHMgaW1wb3J0IHNpbmdsZXRvbgoKCmNsYXNzIEp3dEV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2U6IHN0ciwgKmFyZ3M6IG9iamVjdCkgLT4gTm9uZToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKG1lc3NhZ2UsICphcmdzKQogICAgICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UKCgpjbGFzcyBQdWJsaWNLZXlzKG1ldGFjbGFzcz1zaW5nbGV0b24uU2luZ2xldG9uKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmtleXMgPSB7fQoKICAgIGRlZiBhZGQoc2VsZiwga2lkOiBzdHIsIGtleTogS2V5KToKICAgICAgICBzZWxmLmtleXNba2lkXSA9IGtleQoKICAgIGRlZiBnZXQoc2VsZiwga2lkOiBzdHIpIC0+IE9wdGlvbmFsW0tleV06CiAgICAgICAgcmV0dXJuIHNlbGYua2V5cy5nZXQoa2lkLCBOb25lKQoKICAgIGRlZiBraWRzKHNlbGYpIC0+IGxpc3Q6CiAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5rZXlzKQoKICAgIGRlZiBpc19lbXB0eShzZWxmKSAtPiBib29sOgogICAgICAgIHJldHVybiBub3QgYm9vbChzZWxmLmtleXMpCgoKY2xhc3MgSnd0SGFuZGxlcjoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqd2tfdXJsOiBzdHIsIGF1ZGllbmNlOiBzdHIpOgogICAgICAgIHNlbGYucHVibGljX2tleXMgPSBQdWJsaWNLZXlzKCkKICAgICAgICBzZWxmLmp3a191cmwgPSBqd2tfdXJsCiAgICAgICAgc2VsZi5hdWRpZW5jZSA9IGF1ZGllbmNlCgogICAgZGVmIGRlY29kZShzZWxmLCB0b2tlbjogc3RyKSAtPiBPcHRpb25hbFtkaWN0XToKICAgICAgICB0b2tlbl9wYXJ0cyA9IHRva2VuLnNwbGl0KCcuJykKICAgICAgICB0b2tlbl9oZWFkZXIgPSBqc29uLmxvYWRzKAogICAgICAgICAgICBiYXNlNjQuYjY0ZGVjb2RlKHRva2VuX3BhcnRzWzBdKS5kZWNvZGUoJ3V0Zi04JykpCiAgICAgICAga2lkID0gdG9rZW5faGVhZGVyLmdldCgna2lkJykgb3IgdG9rZW5faGVhZGVyLmdldCgneDV0JykKICAgICAgICBpZiBub3Qga2lkOgogICAgICAgICAgICByYWlzZSBKd3RFeGNlcHRpb24oJ2tpZCBub3QgZm91bmQgaW4gdG9rZW4gaGVhZGVyJykKICAgICAgICBpZiBzZWxmLnB1YmxpY19rZXlzLmlzX2VtcHR5KCkgb3Iga2lkIG5vdCBpbiBzZWxmLnB1YmxpY19rZXlzLmtpZHMoKToKICAgICAgICAgICAgc2VsZi5fcmV0cmlldmVfcHVibGljX2tleXMoKQogICAgICAgIGlmIGtpZCBub3QgaW4gc2VsZi5wdWJsaWNfa2V5cy5raWRzKCk6CiAgICAgICAgICAgIHJhaXNlIEp3dEV4Y2VwdGlvbignandrIGZvciB0aGlzIHRva2VuIHdhcyBub3QgZm91bmQnKQogICAgICAgIHB1YmxpY19rZXkgPSBzZWxmLnB1YmxpY19rZXlzLmdldChraWQpCiAgICAgICAgcmV0dXJuIGp3dC5kZWNvZGUodG9rZW4sIHB1YmxpY19rZXksIGF1ZGllbmNlPXNlbGYuYXVkaWVuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnb3JpdGhtcz10b2tlbl9oZWFkZXIuZ2V0KCdhbGcnKSkKCiAgICBkZWYgX3JldHJpZXZlX3B1YmxpY19rZXlzKHNlbGYpOgogICAgICAgIGhlYWRlciA9IHsnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nfQo8fGZpbV9ob2xlfD4KCiAgICBkZWYgX2NyZWF0ZV9wdWJsaWNfa2V5cyhzZWxmLCBrZXlfZGF0YTogbGlzdCk6CiAgICAgICAgZm9yIGtleSBpbiBrZXlfZGF0YToKICAgICAgICAgICAgaWYga2V5WydrdHknXSA9PSAnUlNBJzogICMgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgUlNBCiAgICAgICAgICAgICAgICBraWQgPSBrZXkuZ2V0KCdraWQnKSBvciBrZXkuZ2V0KCd4NXQnKQogICAgICAgICAgICAgICAgcHVibGljX2tleSA9IGp3ay5jb25zdHJ1Y3Qoa2V5KQogICAgICAgICAgICAgICAgc2VsZi5wdWJsaWNfa2V5cy5hZGQoa2lkLCBwdWJsaWNfa2V5KQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMuZ2V0KHVybD1zZWxmLmp3a191cmwsIGhlYWRlcnM9aGVhZGVyKQogICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlID09IDIwMDoKICAgICAgICAgICAga2V5X2RhdGEgPSByZXNwb25zZS5qc29uKClbJ2tleXMnXQogICAgICAgICAgICBzZWxmLl9jcmVhdGVfcHVibGljX2tleXMoa2V5X2RhdGEpCjx8ZmltX2VuZHw+"]
["00f03000814f6f171716be84c1aa0633cab03fe1-3","00f03000814f6f171716be84c1aa0633cab03fe1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGJhc2U2NAppbXBvcnQganNvbgpmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwKCmltcG9ydCByZXF1ZXN0cwpmcm9tIGpvc2UgaW1wb3J0IGp3aywgand0CmZyb20gam9zZS5iYWNrZW5kcy5iYXNlIGltcG9ydCBLZXkKZnJvbSBrYWxsaXN0aWNvcmUudXRpbHMgaW1wb3J0IHNpbmdsZXRvbgoKCmNsYXNzIEp3dEV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2U6IHN0ciwgKmFyZ3M6IG9iamVjdCkgLT4gTm9uZToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKG1lc3NhZ2UsICphcmdzKQogICAgICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UKCgpjbGFzcyBQdWJsaWNLZXlzKG1ldGFjbGFzcz1zaW5nbGV0b24uU2luZ2xldG9uKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmtleXMgPSB7fQoKICAgIGRlZiBhZGQoc2VsZiwga2lkOiBzdHIsIGtleTogS2V5KToKICAgICAgICBzZWxmLmtleXNba2lkXSA9IGtleQoKICAgIGRlZiBnZXQoc2VsZiwga2lkOiBzdHIpIC0+IE9wdGlvbmFsW0tleV06CiAgICAgICAgcmV0dXJuIHNlbGYua2V5cy5nZXQoa2lkLCBOb25lKQoKICAgIGRlZiBraWRzKHNlbGYpIC0+IGxpc3Q6CiAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5rZXlzKQoKICAgIGRlZiBpc19lbXB0eShzZWxmKSAtPiBib29sOgogICAgICAgIHJldHVybiBub3QgYm9vbChzZWxmLmtleXMpCgoKY2xhc3MgSnd0SGFuZGxlcjoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqd2tfdXJsOiBzdHIsIGF1ZGllbmNlOiBzdHIpOgogICAgICAgIHNlbGYucHVibGljX2tleXMgPSBQdWJsaWNLZXlzKCkKICAgICAgICBzZWxmLmp3a191cmwgPSBqd2tfdXJsCiAgICAgICAgc2VsZi5hdWRpZW5jZSA9IGF1ZGllbmNlCgogICAgZGVmIGRlY29kZShzZWxmLCB0b2tlbjogc3RyKSAtPiBPcHRpb25hbFtkaWN0XToKICAgICAgICB0b2tlbl9wYXJ0cyA9IHRva2VuLnNwbGl0KCcuJykKICAgICAgICB0b2tlbl9oZWFkZXIgPSBqc29uLmxvYWRzKAogICAgICAgICAgICBiYXNlNjQuYjY0ZGVjb2RlKHRva2VuX3BhcnRzWzBdKS5kZWNvZGUoJ3V0Zi04JykpCiAgICAgICAga2lkID0gdG9rZW5faGVhZGVyLmdldCgna2lkJykgb3IgdG9rZW5faGVhZGVyLmdldCgneDV0JykKICAgICAgICBpZiBub3Qga2lkOgogICAgICAgICAgICByYWlzZSBKd3RFeGNlcHRpb24oJ2tpZCBub3QgZm91bmQgaW4gdG9rZW4gaGVhZGVyJykKICAgICAgICBpZiBzZWxmLnB1YmxpY19rZXlzLmlzX2VtcHR5KCkgb3Iga2lkIG5vdCBpbiBzZWxmLnB1YmxpY19rZXlzLmtpZHMoKToKICAgICAgICAgICAgc2VsZi5fcmV0cmlldmVfcHVibGljX2tleXMoKQogICAgICAgIGlmIGtpZCBub3QgaW4gc2VsZi5wdWJsaWNfa2V5cy5raWRzKCk6CiAgICAgICAgICAgIHJhaXNlIEp3dEV4Y2VwdGlvbignandrIGZvciB0aGlzIHRva2VuIHdhcyBub3QgZm91bmQnKQogICAgICAgIHB1YmxpY19rZXkgPSBzZWxmLnB1YmxpY19rZXlzLmdldChraWQpCiAgICAgICAgcmV0dXJuIGp3dC5kZWNvZGUodG9rZW4sIHB1YmxpY19rZXksIGF1ZGllbmNlPXNlbGYuYXVkaWVuY2UsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAgICAgICBhbGdvcml0aG1zPXRva2VuX2hlYWRlci5nZXQoJ2FsZycpKQoKPHxmaW1fZW5kfD4="]
["41acd115edf283089936ac952591c745a2bb15c7-1","41acd115edf283089936ac952591c745a2bb15c7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCB0aW1lCgpkZWYgZ2V0X2RhdGUodGltZV9zdHJpbmcpOgogICAgIiIiQ29udmVydCAxMyBkaWdpdCB0aW1lc3RhbXBlIHRvIGRhdGUiIiIKICAgICMgVXNlIEFtZXJpY2FuIGRhdGUgZm9ybWF0IGZvciBwcm9wZXIgY29udmVyc2lvbiB0byBEYXRlVGltZSBsYXRlcgogICAgcmV0dXJuIHRpbWUuc3RyZnRpbWUoIiVtLSVkLSVZICVIOiVNOiVTIiwgdGltZS5nbXRpbWUoZmxvYXQodGltZV9zdHJpbmcpIC8gMTAwMCkpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgpkZWYgY29udmVydF90b19jc3YoKToKICAgICIiIkNvbnZlcnQgZndzLmpzb24gZmlsZSB0byBjc3YiIiIKPHxmaW1fZW5kfD4="]
["41acd115edf283089936ac952591c745a2bb15c7-2","41acd115edf283089936ac952591c745a2bb15c7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IG9zCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IHRpbWUKCjx8ZmltX2VuZHw+"]
["41acd115edf283089936ac952591c745a2bb15c7-3","41acd115edf283089936ac952591c745a2bb15c7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCB0aW1lCgpkZWYgZ2V0X2RhdGUodGltZV9zdHJpbmcpOgogICAgIiIiQ29udmVydCAxMyBkaWdpdCB0aW1lc3RhbXBlIHRvIGRhdGUiIiIKICAgICMgVXNlIEFtZXJpY2FuIGRhdGUgZm9ybWF0IGZvciBwcm9wZXIgY29udmVyc2lvbiB0byBEYXRlVGltZSBsYXRlcgogICAgcmV0dXJuIHRpbWUuc3RyZnRpbWUoIiVtLSVkLSVZICVIOiVNOiVTIiwgdGltZS5nbXRpbWUoZmxvYXQodGltZV9zdHJpbmcpIC8gMTAwMCkpCgoKZGVmIGNvbnZlcnRfdG9fY3N2KCk6CiAgICAiIiJDb252ZXJ0IGZ3cy5qc29uIGZpbGUgdG8gY3N2IiIiCiAgICB3aXRoIG9wZW4oImZ3cy5qc29uIikgYXMgZjoKICAgICAgICByYXcgPSBmLnJlYWQoKQogICAgcGFyc2VkID0ganNvbi5sb2FkcyhyYXcpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZiA9IHBkLkRhdGFGcmFtZSgpCiAgICBmb3Igc2Vzc2lvbiBpbiBwYXJzZWQ6CiAgICAgICAgIyBDcmVhdGUgcm93IGZvciBzZXNzaW9uIGluIERhdGFGcmFtZQogICAgICAgIHNlc3Npb25fZGF0ZSA9IGdldF9kYXRlKHNlc3Npb25bInN0YXJ0VGltZSJdKQo8fGZpbV9lbmR8Pg=="]
["41acd115edf283089936ac952591c745a2bb15c7-4","41acd115edf283089936ac952591c745a2bb15c7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCB0aW1lCgpkZWYgZ2V0X2RhdGUodGltZV9zdHJpbmcpOgogICAgIiIiQ29udmVydCAxMyBkaWdpdCB0aW1lc3RhbXBlIHRvIGRhdGUiIiIKICAgICMgVXNlIEFtZXJpY2FuIGRhdGUgZm9ybWF0IGZvciBwcm9wZXIgY29udmVyc2lvbiB0byBEYXRlVGltZSBsYXRlcgogICAgcmV0dXJuIHRpbWUuc3RyZnRpbWUoIiVtLSVkLSVZICVIOiVNOiVTIiwgdGltZS5nbXRpbWUoZmxvYXQodGltZV9zdHJpbmcpIC8gMTAwMCkpCgoKZGVmIGNvbnZlcnRfdG9fY3N2KCk6CiAgICAiIiJDb252ZXJ0IGZ3cy5qc29uIGZpbGUgdG8gY3N2IiIiCiAgICB3aXRoIG9wZW4oImZ3cy5qc29uIikgYXMgZjoKICAgICAgICByYXcgPSBmLnJlYWQoKQogICAgcGFyc2VkID0ganNvbi5sb2FkcyhyYXcpCgogICAgZGYgPSBwZC5EYXRhRnJhbWUoKQogICAgZm9yIHNlc3Npb24gaW4gcGFyc2VkOgogICAgICAgICMgQ3JlYXRlIHJvdyBmb3Igc2Vzc2lvbiBpbiBEYXRhRnJhbWUKICAgICAgICBzZXNzaW9uX2RhdGUgPSBnZXRfZGF0ZShzZXNzaW9uWyJzdGFydFRpbWUiXSkKICAgICAgICBkZiA9IHBkLmNvbmNhdChbZGYsIHBkLkRhdGFGcmFtZShpbmRleD1bc2Vzc2lvbl9kYXRlXSldLCBzb3J0PUZhbHNlKQogICAgICAgIAogICAgICAgIGZvciBleGVyY2lzZSBpbiBzZXNzaW9uWyJhY3Rpdml0aWVzIl06CiAgICAgICAgICAgICMgQ29sbGVjdCBleGVyY2lzZSBpbmZvcm1hdGlvbgogICAgICAgICAgICBuYW1lID0gZXhlcmNpc2VbIm5hbWUiXQogICAgICAgICAgICBzZXRzID0gZXhlcmNpc2VbInBlcmZvcm1hbmNlIl1bImNvbXBsZXRlZFNldHMiXQo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgIHNldHNfbGlzdC5hcHBlbmQoKHdlaWdodCwgcmVwcykpCiAgICAgICAgICAgICMgUG9wdWxhdGUgRGF0YUZyYW1lIHdpdGggZXhlcmNpc2UgaW5mb3JtYXRpb24KICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gZGYuY29sdW1uczoKICAgICAgICAgICAgICAgIGRmW25hbWVdID0gbnAubmFuCiAgICAgICAgICAgICAgICBkZltuYW1lXSA9IGRmW25hbWVdLmFzdHlwZSgib2JqZWN0IikKICAgICAgICAgICAgZGYubG9jW3Nlc3Npb25fZGF0ZSwgbmFtZV0gPSBzZXRzX2xpc3QKCiAgICByZXR1cm4gZGYudG9fY3N2KCJvdXRwdXQuY3N2IiwgaW5kZXg9VHJ1ZSkKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBjb252ZXJ0X3RvX2NzdigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHNldHNfbGlzdCA9IFtdCiAgICAgICAgICAgIGZvciBzIGluIHNldHM6CiAgICAgICAgICAgICAgICByZXBzID0gc1sicmVwcyJdCiAgICAgICAgICAgICAgICB3ZWlnaHQgPSBzWyJ3ZWlnaHQiXQo8fGZpbV9lbmR8Pg=="]
["a9e50cedf7fc8a254060429d701edc94c0def6ae-1","a9e50cedf7fc8a254060429d701edc94c0def6ae","PHxmaW1fcHJlZml4fD4KZnJvbSAuSW5mZXJyZXIgaW1wb3J0IEluZmVycmVyCmZyb20gbHhtbCBpbXBvcnQgZXRyZWUKZnJvbSB4bWwuc2F4LnNheHV0aWxzIGltcG9ydCBxdW90ZWF0dHIKCiIiIgogICAgCiIiIgpjbGFzcyB1ZkhhbGxIb2FnRUFEX0luZmVycmVyKEluZmVycmVyKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmNhY2hlZGF0YSA9IE5vbmUKICAgICAgICBzZWxmLmVhZCA9IGV0cmVlLnBhcnNlKCdoYWxsaG9hZy5lYWQueG1sJykKICAgICAgICBzZWxmLnN1YmplY3RzID0gc2VsZi5fbWFrZVN1YmplY3REaWN0KHNlbGYuZWFkKQogICAgICAgIAoKICAgIGRlZiBfbWFrZVN1YmplY3REaWN0KHNlbGYsIGVhZCk6CiAgICAgICAgZGVmIGYoeCk6IHJldHVybiAoeC50ZXh0LmZpbmQoJyBDYWxsIE5vLiAnKSA+IC0xKQogICAgICAgIGRlZiBzdWJqKHgpOiByZXR1cm4geC50ZXh0LnNwbGl0KCcgICBDYWxsIE5vLiAnKVswXS5zdHJpcCgpCiAgICAgICAgZGVmIGNhbGxubyh4KTogcmV0dXJuIHgudGV4dC5zcGxpdCgnICAgQ2FsbCBOby4gJylbMV0uc3RyaXAoKQogICAgICAgIAogICAgICAgIHN1YmplY3RzID0gZWFkLmZpbmRhbGwoIi8veyp9YXJyYW5nZW1lbnQveyp9bGlzdC97Kn1pdGVtIikKICAgICAgICBzdWJqZWN0cyA9IGxpc3QoZmlsdGVyKGYsIHN1YmplY3RzKSkKICAgICAgICByZXR1cm4gZGljdChsaXN0KHppcChsaXN0KG1hcChjYWxsbm8sIHN1YmplY3RzKSksIGxpc3QobWFwKHN1YmosIHN1YmplY3RzKSkpKSkKCiAgICBkZWYgaW5mZXIoc2VsZiwgZG9jLCBzbGVlcCk6CiAgICAgICAgeG1sID0gZG9jLnhtbAogICAgICAgIG1lZGlhX3R5cGVfZGljdCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQSCc6ICdQaG90b3MnLAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQQyc6ICdDb3JyZXNwb25kZW5jZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSU4nOiAnSW5kZXggQ2FyZHMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1VNJzogJ1VuaWRlbnRpZmllZCBNYXRlcmlhbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQm9va3MnOiAnQm9va3MnLAogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgIAogICAgICAgIGlkID0geG1sLmZpbmR0ZXh0KCcuLy97dXJuOmlzYm46MS05MzE2NjYtMzMtNH1yZWNvcmRJZCcpCiAgICAgICAgbG9jYWxpZCA9IGlkLnJlcGxhY2UoJ1VTLVJQQi0nLCAnJykKICAgICAgICBvdXRwID0ge30KICAgICAgICBjID0gc2VsZi5lYWQuZmluZCgiLi8ve3sqfX1jW0BpZD0ne30nXSIuZm9ybWF0KGxvY2FsaWQpKQogICAgICAgIAogICAgICAgIGlmIGM9PU5vbmU6CiAgICAgICAgICAgIHJldHVybiB7fQogICAgICAgIAogICAgICAgIG91dHBbJ3Jhd19lYWRfYyddID0gZXRyZWUudG9zdHJpbmcoYykuZGVjb2RlKCkKICAgICAgICAKICAgICAgICBleHQgPSBjLmZpbmR0ZXh0KCJ7Kn1kaWQvL3sqfWV4dGVudCIpCiAgICAgICAgaWYgZXh0OiAKICAgICAgICAgICAgb3V0cFsnZXh0ZW50J10gPSBleHQuc3BsaXQoJyAnKVswXQogICAgICAgIAogICAgICAgIG1lZGlhX3R5cGVzID0gW10KICAgICAgICBwMSA9IGMuZmluZCgieyp9ZGlkL3sqfWNvbnRhaW5lcltAbGFiZWw9J1BhcnQgSSddIikKICAgICAgICBjb250cyA9IFtdCiAgICAgICAgaWYgcDEgIT0gTm9uZTogCiAgICAgICAgICAgIGlmIHAxLnRleHQ6CiAgICAgICAgICAgICAgICBmb3IgY29udCBpbiBwMS50ZXh0LnNwbGl0KCcsICcpOgogICAgICAgICAgICAgICAgICAgIGNvbnQgPSBjb250LnNwbGl0KCcgJylbMV0KICAgICAgICAgICAgICAgICAgICBjb250cy5hcHBlbmQoY29udCkKICAgICAgICAgICAgICAgICAgICBmY29kZSA9IGNvbnQuc3BsaXQoJy0nKVswXQogICAgICAgICAgICAgICAgICAgIGlmIGZjb2RlIGluIG1lZGlhX3R5cGVfZGljdDoKICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFfdHlwZXMuYXBwZW5kKG1lZGlhX3R5cGVfZGljdFtmY29kZV0pCiAgICAgICAgCiAgICAgICAgb3V0cFsnY29udGFpbmVyJ10gPSBbXQogICAgICAgIG91dHBbJ2NvbGxlY3Rpb25fcGFydHMnXSA9IFtdCiAgICAgICAgCiAgICAgICAgaWYgY29udHM6CiAgICAgICAgICAgIG91dHBbJ2NvbnRhaW5lcl9wYXJ0MSddID0gbGlzdChzZXQoY29udHMpKQogICAgICAgICAgICBvdXRwWydjb250YWluZXInXSArPSBsaXN0KHNldChjb250cykpCiAgICAgICAgICAgIG91dHBbJ2NvbGxlY3Rpb25fcGFydHMnXS5hcHBlbmQoJ1BhcnQgSScpCiAgICAgICAgICAgIAogICAgICAgIHAyID0gYy5maW5kKCJ7Kn1kaWQveyp9Y29udGFpbmVyW0BsYWJlbD0nUGFydCBJSSddIikKICAgICAgICBjb250cyA9IFtdCiAgICAgICAgaWYgcDIgIT0gTm9uZToKICAgICAgICAgICAgaWYgcDIudGV4dDoKICAgICAgICAgICAgICAgIGZvciBjb250IGluIHAyLnRleHQuc3BsaXQoJywgJyk6CiAgICAgICAgICAgICAgICAgICAgY29udHMuYXBwZW5kKGNvbnQpCiAgICAgICAgICAgICAgICAgICAgZmNvZGUgPSBjb250LnNwbGl0KCctJylbMF0KICAgICAgICAgICAgICAgICAgICBpZiBmY29kZSBpbiBtZWRpYV90eXBlX2RpY3Q6CiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhX3R5cGVzLmFwcGVuZChtZWRpYV90eXBlX2RpY3RbZmNvZGVdKQogICAgCiAgICAgICAgaWYgY29udHM6ICAgIAogICAgICAgICAgICBvdXRwWydjb250YWluZXJfcGFydDInXSA9IGNvbnRzCiAgICAgICAgICAgIG91dHBbJ2NvbnRhaW5lciddICs9IGxpc3Qoc2V0KGNvbnRzKSkKICAgICAgICAgICAgb3V0cFsnY29sbGVjdGlvbl9wYXJ0cyddLmFwcGVuZCgnUGFydCBJSScpCiAgICAgICAgCiAgICAgICAgaWYgbWVkaWFfdHlwZXM6CiAgICAgICAgICAgIG91dHBbJ21lZGlhX3R5cGUnXSA9IGxpc3Qoc2V0KG1lZGlhX3R5cGVzKSkKICAgICAgICAKICAgICAgICBzdWJqID0gYy5maW5kKCd7Kn1jb250cm9sYWNjZXNzL3sqfXN1YmplY3QnKQogICAgICAgIAogICAgICAgIGlmIHN1YmogIT0gTm9uZToKICAgICAgICAgICAgb3V0cFsnc3ViamVjdCddID0gc3Viai50ZXh0LnN0cmlwKCkKICAgICAgICAKICAgICAgICBjbiA9IGMuZmluZCgieyp9Y29udHJvbGFjY2Vzcy97Kn1ub3RlL3sqfXAiKQogICAgICAgIAogICAgICAgIGlmIGNuICE9IE5vbmU6CiAgICAgICAgICAgIG91dHBbJ3BhcnQxX2NhbGxfbnVtYmVyJ10gPSBjbi50ZXh0CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiBjbi50ZXh0IGluIHNlbGYuc3ViamVjdHM6CiAgICAgICAgICAgICAgICBvdXRwWydwYXJ0MV9jYXRlZ29yeSddID0gc2VsZi5zdWJqZWN0c1tjbi50ZXh0XQogICAgICAgIAogICAgICAgIHJldHVybiBvdXRwCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ0wnOiAnQ2xpcHBpbmdzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYWCc6ICdPdmVyc2l6ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1hYWCc6ICdPdmVyc2l6ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FWJzogJ0F1ZGlvL1Zpc3VhbCBNYXRlcmlhbCcsCjx8ZmltX2VuZHw+"]
["a9e50cedf7fc8a254060429d701edc94c0def6ae-2","a9e50cedf7fc8a254060429d701edc94c0def6ae","PHxmaW1fcHJlZml4fD4KZnJvbSAuSW5mZXJyZXIgaW1wb3J0IEluZmVycmVyCmZyb20gbHhtbCBpbXBvcnQgZXRyZWUKZnJvbSB4bWwuc2F4LnNheHV0aWxzIGltcG9ydCBxdW90ZWF0dHIKCiIiIgogICAgCiIiIgpjbGFzcyB1ZkhhbGxIb2FnRUFEX0luZmVycmVyKEluZmVycmVyKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmNhY2hlZGF0YSA9IE5vbmUKICAgICAgICBzZWxmLmVhZCA9IGV0cmVlLnBhcnNlKCdoYWxsaG9hZy5lYWQueG1sJykKICAgICAgICBzZWxmLnN1YmplY3RzID0gc2VsZi5fbWFrZVN1YmplY3REaWN0KHNlbGYuZWFkKQogICAgICAgIAoKICAgIGRlZiBfbWFrZVN1YmplY3REaWN0KHNlbGYsIGVhZCk6CiAgICAgICAgZGVmIGYoeCk6IHJldHVybiAoeC50ZXh0LmZpbmQoJyBDYWxsIE5vLiAnKSA+IC0xKQogICAgICAgIGRlZiBzdWJqKHgpOiByZXR1cm4geC50ZXh0LnNwbGl0KCcgICBDYWxsIE5vLiAnKVswXS5zdHJpcCgpCiAgICAgICAgZGVmIGNhbGxubyh4KTogcmV0dXJuIHgudGV4dC5zcGxpdCgnICAgQ2FsbCBOby4gJylbMV0uc3RyaXAoKQogICAgICAgIAogICAgICAgIHN1YmplY3RzID0gZWFkLmZpbmRhbGwoIi8veyp9YXJyYW5nZW1lbnQveyp9bGlzdC97Kn1pdGVtIikKICAgICAgICBzdWJqZWN0cyA9IGxpc3QoZmlsdGVyKGYsIHN1YmplY3RzKSkKICAgICAgICByZXR1cm4gZGljdChsaXN0KHppcChsaXN0KG1hcChjYWxsbm8sIHN1YmplY3RzKSksIGxpc3QobWFwKHN1YmosIHN1YmplY3RzKSkpKSkKCiAgICBkZWYgaW5mZXIoc2VsZiwgZG9jLCBzbGVlcCk6CiAgICAgICAgeG1sID0gZG9jLnhtbAogICAgICAgIG1lZGlhX3R5cGVfZGljdCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQSCc6ICdQaG90b3MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NMJzogJ0NsaXBwaW5ncycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWFgnOiAnT3ZlcnNpemVkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYWFgnOiAnT3ZlcnNpemVkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBVic6ICdBdWRpby9WaXN1YWwgTWF0ZXJpYWwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BDJzogJ0NvcnJlc3BvbmRlbmNlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJTic6ICdJbmRleCBDYXJkcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVU0nOiAnVW5pZGVudGlmaWVkIE1hdGVyaWFsJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCb29rcyc6ICdCb29rcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgCiAgICAgICAgaWQgPSB4bWwuZmluZHRleHQoJy4vL3t1cm46aXNibjoxLTkzMTY2Ni0zMy00fXJlY29yZElkJykKICAgICAgICBsb2NhbGlkID0gaWQucmVwbGFjZSgnVVMtUlBCLScsICcnKQogICAgICAgIG91dHAgPSB7fQogICAgICAgIGMgPSBzZWxmLmVhZC5maW5kKCIuLy97eyp9fWNbQGlkPSd7fSddIi5mb3JtYXQobG9jYWxpZCkpCiAgICAgICAgCiAgICAgICAgaWYgYz09Tm9uZToKICAgICAgICAgICAgcmV0dXJuIHt9CiAgICAgICAgCiAgICAgICAgb3V0cFsncmF3X2VhZF9jJ10gPSBldHJlZS50b3N0cmluZyhjKS5kZWNvZGUoKQogICAgICAgIAogICAgICAgIGV4dCA9IGMuZmluZHRleHQoInsqfWRpZC8veyp9ZXh0ZW50IikKICAgICAgICBpZiBleHQ6IAogICAgICAgICAgICBvdXRwWydleHRlbnQnXSA9IGV4dC5zcGxpdCgnICcpWzBdCiAgICAgICAgCiAgICAgICAgbWVkaWFfdHlwZXMgPSBbXQogICAgICAgIHAxID0gYy5maW5kKCJ7Kn1kaWQveyp9Y29udGFpbmVyW0BsYWJlbD0nUGFydCBJJ10iKQogICAgICAgIGNvbnRzID0gW10KICAgICAgICBpZiBwMSAhPSBOb25lOiAKICAgICAgICAgICAgaWYgcDEudGV4dDoKICAgICAgICAgICAgICAgIGZvciBjb250IGluIHAxLnRleHQuc3BsaXQoJywgJyk6CiAgICAgICAgICAgICAgICAgICAgY29udCA9IGNvbnQuc3BsaXQoJyAnKVsxXQogICAgICAgICAgICAgICAgICAgIGNvbnRzLmFwcGVuZChjb250KQogICAgICAgICAgICAgICAgICAgIGZjb2RlID0gY29udC5zcGxpdCgnLScpWzBdCiAgICAgICAgICAgICAgICAgICAgaWYgZmNvZGUgaW4gbWVkaWFfdHlwZV9kaWN0OgogICAgICAgICAgICAgICAgICAgICAgICBtZWRpYV90eXBlcy5hcHBlbmQobWVkaWFfdHlwZV9kaWN0W2Zjb2RlXSkKICAgICAgICAKICAgICAgICBvdXRwWydjb250YWluZXInXSA9IFtdCiAgICAgICAgb3V0cFsnY29sbGVjdGlvbl9wYXJ0cyddID0gW10KICAgICAgICAKICAgICAgICBpZiBjb250czoKICAgICAgICAgICAgb3V0cFsnY29udGFpbmVyX3BhcnQxJ10gPSBsaXN0KHNldChjb250cykpCiAgICAgICAgICAgIG91dHBbJ2NvbnRhaW5lciddICs9IGxpc3Qoc2V0KGNvbnRzKSkKICAgICAgICAgICAgb3V0cFsnY29sbGVjdGlvbl9wYXJ0cyddLmFwcGVuZCgnUGFydCBJJykKICAgICAgICAgICAgCiAgICAgICAgcDIgPSBjLmZpbmQoInsqfWRpZC97Kn1jb250YWluZXJbQGxhYmVsPSdQYXJ0IElJJ10iKQogICAgICAgIGNvbnRzID0gW10KICAgICAgICBpZiBwMiAhPSBOb25lOgogICAgICAgICAgICBpZiBwMi50ZXh0OgogICAgICAgICAgICAgICAgZm9yIGNvbnQgaW4gcDIudGV4dC5zcGxpdCgnLCAnKToKICAgICAgICAgICAgICAgICAgICBjb250cy5hcHBlbmQoY29udCkKICAgICAgICAgICAgICAgICAgICBmY29kZSA9IGNvbnQuc3BsaXQoJy0nKVswXQogICAgICAgICAgICAgICAgICAgIGlmIGZjb2RlIGluIG1lZGlhX3R5cGVfZGljdDoKICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFfdHlwZXMuYXBwZW5kKG1lZGlhX3R5cGVfZGljdFtmY29kZV0pCiAgICAKICAgICAgICBpZiBjb250czogICAgCiAgICAgICAgICAgIG91dHBbJ2NvbnRhaW5lcl9wYXJ0MiddID0gY29udHMKICAgICAgICAgICAgb3V0cFsnY29udGFpbmVyJ10gKz0gbGlzdChzZXQoY29udHMpKQogICAgICAgICAgICBvdXRwWydjb2xsZWN0aW9uX3BhcnRzJ10uYXBwZW5kKCdQYXJ0IElJJykKICAgICAgICAKICAgICAgICBpZiBtZWRpYV90eXBlczoKICAgICAgICAgICAgb3V0cFsnbWVkaWFfdHlwZSddID0gbGlzdChzZXQobWVkaWFfdHlwZXMpKQogICAgICAgIAogICAgICAgIHN1YmogPSBjLmZpbmQoJ3sqfWNvbnRyb2xhY2Nlc3Mveyp9c3ViamVjdCcpCiAgICAgICAgCiAgICAgICAgaWYgc3ViaiAhPSBOb25lOgogICAgICAgICAgICBvdXRwWydzdWJqZWN0J10gPSBzdWJqLnRleHQuc3RyaXAoKQogICAgICAgIAogICAgICAgIGNuID0gYy5maW5kKCJ7Kn1jb250cm9sYWNjZXNzL3sqfW5vdGUveyp9cCIpCiAgICAgICAgCiAgICAgICAgaWYgY24gIT0gTm9uZToKICAgICAgICAgICAgb3V0cFsncGFydDFfY2FsbF9udW1iZXInXSA9IGNuLnRleHQKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIGNuLnRleHQgaW4gc2VsZi5zdWJqZWN0czoKICAgICAgICAgICAgICAgIG91dHBbJ3BhcnQxX2NhdGVnb3J5J10gPSBzZWxmLnN1YmplY3RzW2NuLnRleHRdCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAKICAgICAgICByZXR1cm4gb3V0cAo8fGZpbV9lbmR8Pg=="]
["a9e50cedf7fc8a254060429d701edc94c0def6ae-3","a9e50cedf7fc8a254060429d701edc94c0def6ae","PHxmaW1fcHJlZml4fD4KZnJvbSAuSW5mZXJyZXIgaW1wb3J0IEluZmVycmVyCmZyb20gbHhtbCBpbXBvcnQgZXRyZWUKZnJvbSB4bWwuc2F4LnNheHV0aWxzIGltcG9ydCBxdW90ZWF0dHIKCiIiIgogICAgCiIiIgpjbGFzcyB1ZkhhbGxIb2FnRUFEX0luZmVycmVyKEluZmVycmVyKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmNhY2hlZGF0YSA9IE5vbmUKICAgICAgICBzZWxmLmVhZCA9IGV0cmVlLnBhcnNlKCdoYWxsaG9hZy5lYWQueG1sJykKICAgICAgICBzZWxmLnN1YmplY3RzID0gc2VsZi5fbWFrZVN1YmplY3REaWN0KHNlbGYuZWFkKQogICAgICAgIAoKICAgIGRlZiBfbWFrZVN1YmplY3REaWN0KHNlbGYsIGVhZCk6CiAgICAgICAgZGVmIGYoeCk6IHJldHVybiAoeC50ZXh0LmZpbmQoJyBDYWxsIE5vLiAnKSA+IC0xKQogICAgICAgIGRlZiBzdWJqKHgpOiByZXR1cm4geC50ZXh0LnNwbGl0KCcgICBDYWxsIE5vLiAnKVswXS5zdHJpcCgpCiAgICAgICAgZGVmIGNhbGxubyh4KTogcmV0dXJuIHgudGV4dC5zcGxpdCgnICAgQ2FsbCBOby4gJylbMV0uc3RyaXAoKQogICAgICAgIAogICAgICAgIHN1YmplY3RzID0gZWFkLmZpbmRhbGwoIi8veyp9YXJyYW5nZW1lbnQveyp9bGlzdC97Kn1pdGVtIikKICAgICAgICBzdWJqZWN0cyA9IGxpc3QoZmlsdGVyKGYsIHN1YmplY3RzKSkKICAgICAgICByZXR1cm4gZGljdChsaXN0KHppcChsaXN0KG1hcChjYWxsbm8sIHN1YmplY3RzKSksIGxpc3QobWFwKHN1YmosIHN1YmplY3RzKSkpKSkKCiAgICBkZWYgaW5mZXIoc2VsZiwgZG9jLCBzbGVlcCk6CiAgICAgICAgeG1sID0gZG9jLnhtbAogICAgICAgIG1lZGlhX3R5cGVfZGljdCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQSCc6ICdQaG90b3MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NMJzogJ0NsaXBwaW5ncycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWFgnOiAnT3ZlcnNpemVkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYWFgnOiAnT3ZlcnNpemVkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBVic6ICdBdWRpby9WaXN1YWwgTWF0ZXJpYWwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BDJzogJ0NvcnJlc3BvbmRlbmNlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJTic6ICdJbmRleCBDYXJkcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVU0nOiAnVW5pZGVudGlmaWVkIE1hdGVyaWFsJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCb29rcyc6ICdCb29rcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgCiAgICAgICAgaWQgPSB4bWwuZmluZHRleHQoJy4vL3t1cm46aXNibjoxLTkzMTY2Ni0zMy00fXJlY29yZElkJykKICAgICAgICBsb2NhbGlkID0gaWQucmVwbGFjZSgnVVMtUlBCLScsICcnKQogICAgICAgIG91dHAgPSB7fQogICAgICAgIGMgPSBzZWxmLmVhZC5maW5kKCIuLy97eyp9fWNbQGlkPSd7fSddIi5mb3JtYXQobG9jYWxpZCkpCiAgICAgICAgCiAgICAgICAgaWYgYz09Tm9uZToKICAgICAgICAgICAgcmV0dXJuIHt9CiAgICAgICAgCiAgICAgICAgb3V0cFsncmF3X2VhZF9jJ10gPSBldHJlZS50b3N0cmluZyhjKS5kZWNvZGUoKQogICAgICAgIAogICAgICAgIGV4dCA9IGMuZmluZHRleHQoInsqfWRpZC8veyp9ZXh0ZW50IikKICAgICAgICBpZiBleHQ6IAogICAgICAgICAgICBvdXRwWydleHRlbnQnXSA9IGV4dC5zcGxpdCgnICcpWzBdCiAgICAgICAgCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBtZWRpYV90eXBlcyA9IFtdCiAgICAgICAgcDEgPSBjLmZpbmQoInsqfWRpZC97Kn1jb250YWluZXJbQGxhYmVsPSdQYXJ0IEknXSIpCiAgICAgICAgY29udHMgPSBbXQogICAgICAgIGlmIHAxICE9IE5vbmU6IAo8fGZpbV9lbmR8Pg=="]
["a9e50cedf7fc8a254060429d701edc94c0def6ae-4","a9e50cedf7fc8a254060429d701edc94c0def6ae","PHxmaW1fcHJlZml4fD4KZnJvbSAuSW5mZXJyZXIgaW1wb3J0IEluZmVycmVyCmZyb20gbHhtbCBpbXBvcnQgZXRyZWUKZnJvbSB4bWwuc2F4LnNheHV0aWxzIGltcG9ydCBxdW90ZWF0dHIKCiIiIgogICAgCiIiIgpjbGFzcyB1ZkhhbGxIb2FnRUFEX0luZmVycmVyKEluZmVycmVyKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmNhY2hlZGF0YSA9IE5vbmUKICAgICAgICBzZWxmLmVhZCA9IGV0cmVlLnBhcnNlKCdoYWxsaG9hZy5lYWQueG1sJykKICAgICAgICBzZWxmLnN1YmplY3RzID0gc2VsZi5fbWFrZVN1YmplY3REaWN0KHNlbGYuZWFkKQogICAgICAgIAoKICAgIGRlZiBfbWFrZVN1YmplY3REaWN0KHNlbGYsIGVhZCk6CiAgICAgICAgZGVmIGYoeCk6IHJldHVybiAoeC50ZXh0LmZpbmQoJyBDYWxsIE5vLiAnKSA+IC0xKQogICAgICAgIGRlZiBzdWJqKHgpOiByZXR1cm4geC50ZXh0LnNwbGl0KCcgICBDYWxsIE5vLiAnKVswXS5zdHJpcCgpCiAgICAgICAgZGVmIGNhbGxubyh4KTogcmV0dXJuIHgudGV4dC5zcGxpdCgnICAgQ2FsbCBOby4gJylbMV0uc3RyaXAoKQogICAgICAgIAogICAgICAgIHN1YmplY3RzID0gZWFkLmZpbmRhbGwoIi8veyp9YXJyYW5nZW1lbnQveyp9bGlzdC97Kn1pdGVtIikKICAgICAgICBzdWJqZWN0cyA9IGxpc3QoZmlsdGVyKGYsIHN1YmplY3RzKSkKICAgICAgICByZXR1cm4gZGljdChsaXN0KHppcChsaXN0KG1hcChjYWxsbm8sIHN1YmplY3RzKSksIGxpc3QobWFwKHN1YmosIHN1YmplY3RzKSkpKSkKCiAgICBkZWYgaW5mZXIoc2VsZiwgZG9jLCBzbGVlcCk6CiAgICAgICAgeG1sID0gZG9jLnhtbAogICAgICAgIG1lZGlhX3R5cGVfZGljdCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQSCc6ICdQaG90b3MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NMJzogJ0NsaXBwaW5ncycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWFgnOiAnT3ZlcnNpemVkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYWFgnOiAnT3ZlcnNpemVkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBVic6ICdBdWRpby9WaXN1YWwgTWF0ZXJpYWwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BDJzogJ0NvcnJlc3BvbmRlbmNlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJTic6ICdJbmRleCBDYXJkcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVU0nOiAnVW5pZGVudGlmaWVkIE1hdGVyaWFsJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCb29rcyc6ICdCb29rcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgCiAgICAgICAgaWQgPSB4bWwuZmluZHRleHQoJy4vL3t1cm46aXNibjoxLTkzMTY2Ni0zMy00fXJlY29yZElkJykKICAgICAgICBsb2NhbGlkID0gaWQucmVwbGFjZSgnVVMtUlBCLScsICcnKQogICAgICAgIG91dHAgPSB7fQogICAgICAgIGMgPSBzZWxmLmVhZC5maW5kKCIuLy97eyp9fWNbQGlkPSd7fSddIi5mb3JtYXQobG9jYWxpZCkpCiAgICAgICAgCiAgICAgICAgaWYgYz09Tm9uZToKICAgICAgICAgICAgcmV0dXJuIHt9CiAgICAgICAgCiAgICAgICAgb3V0cFsncmF3X2VhZF9jJ10gPSBldHJlZS50b3N0cmluZyhjKS5kZWNvZGUoKQogICAgICAgIAogICAgICAgIGV4dCA9IGMuZmluZHRleHQoInsqfWRpZC8veyp9ZXh0ZW50IikKICAgICAgICBpZiBleHQ6IAogICAgICAgICAgICBvdXRwWydleHRlbnQnXSA9IGV4dC5zcGxpdCgnICcpWzBdCiAgICAgICAgCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBtZWRpYV90eXBlcyA9IFtdCiAgICAgICAgcDEgPSBjLmZpbmQoInsqfWRpZC97Kn1jb250YWluZXJbQGxhYmVsPSdQYXJ0IEknXSIpCiAgICAgICAgY29udHMgPSBbXQogICAgICAgIGlmIHAxICE9IE5vbmU6IAo8fGZpbV9lbmR8Pg=="]
["a9e50cedf7fc8a254060429d701edc94c0def6ae-5","a9e50cedf7fc8a254060429d701edc94c0def6ae","PHxmaW1fcHJlZml4fD4KZnJvbSAuSW5mZXJyZXIgaW1wb3J0IEluZmVycmVyCmZyb20gbHhtbCBpbXBvcnQgZXRyZWUKZnJvbSB4bWwuc2F4LnNheHV0aWxzIGltcG9ydCBxdW90ZWF0dHIKCiIiIgogICAgCiIiIgpjbGFzcyB1ZkhhbGxIb2FnRUFEX0luZmVycmVyKEluZmVycmVyKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmNhY2hlZGF0YSA9IE5vbmUKICAgICAgICBzZWxmLmVhZCA9IGV0cmVlLnBhcnNlKCdoYWxsaG9hZy5lYWQueG1sJykKICAgICAgICBzZWxmLnN1YmplY3RzID0gc2VsZi5fbWFrZVN1YmplY3REaWN0KHNlbGYuZWFkKQogICAgICAgIAoKICAgIGRlZiBfbWFrZVN1YmplY3REaWN0KHNlbGYsIGVhZCk6CiAgICAgICAgZGVmIGYoeCk6IHJldHVybiAoeC50ZXh0LmZpbmQoJyBDYWxsIE5vLiAnKSA+IC0xKQogICAgICAgIGRlZiBzdWJqKHgpOiByZXR1cm4geC50ZXh0LnNwbGl0KCcgICBDYWxsIE5vLiAnKVswXS5zdHJpcCgpCiAgICAgICAgZGVmIGNhbGxubyh4KTogcmV0dXJuIHgudGV4dC5zcGxpdCgnICAgQ2FsbCBOby4gJylbMV0uc3RyaXAoKQogICAgICAgIAogICAgICAgIHN1YmplY3RzID0gZWFkLmZpbmRhbGwoIi8veyp9YXJyYW5nZW1lbnQveyp9bGlzdC97Kn1pdGVtIikKICAgICAgICBzdWJqZWN0cyA9IGxpc3QoZmlsdGVyKGYsIHN1YmplY3RzKSkKICAgICAgICByZXR1cm4gZGljdChsaXN0KHppcChsaXN0KG1hcChjYWxsbm8sIHN1YmplY3RzKSksIGxpc3QobWFwKHN1YmosIHN1YmplY3RzKSkpKSkKCiAgICBkZWYgaW5mZXIoc2VsZiwgZG9jLCBzbGVlcCk6CiAgICAgICAgeG1sID0gZG9jLnhtbAogICAgICAgIG1lZGlhX3R5cGVfZGljdCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQSCc6ICdQaG90b3MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NMJzogJ0NsaXBwaW5ncycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWFgnOiAnT3ZlcnNpemVkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYWFgnOiAnT3ZlcnNpemVkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBVic6ICdBdWRpby9WaXN1YWwgTWF0ZXJpYWwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BDJzogJ0NvcnJlc3BvbmRlbmNlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJTic6ICdJbmRleCBDYXJkcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVU0nOiAnVW5pZGVudGlmaWVkIE1hdGVyaWFsJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCb29rcyc6ICdCb29rcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgCiAgICAgICAgaWQgPSB4bWwuZmluZHRleHQoJy4vL3t1cm46aXNibjoxLTkzMTY2Ni0zMy00fXJlY29yZElkJykKICAgICAgICBsb2NhbGlkID0gaWQucmVwbGFjZSgnVVMtUlBCLScsICcnKQogICAgICAgIG91dHAgPSB7fQogICAgICAgIGMgPSBzZWxmLmVhZC5maW5kKCIuLy97eyp9fWNbQGlkPSd7fSddIi5mb3JtYXQobG9jYWxpZCkpCiAgICAgICAgCiAgICAgICAgaWYgYz09Tm9uZToKICAgICAgICAgICAgcmV0dXJuIHt9CiAgICAgICAgCiAgICAgICAgb3V0cFsncmF3X2VhZF9jJ10gPSBldHJlZS50b3N0cmluZyhjKS5kZWNvZGUoKQogICAgICAgIAogICAgICAgIGV4dCA9IGMuZmluZHRleHQoInsqfWRpZC8veyp9ZXh0ZW50IikKICAgICAgICBpZiBleHQ6IAogICAgICAgICAgICBvdXRwWydleHRlbnQnXSA9IGV4dC5zcGxpdCgnICcpWzBdCiAgICAgICAgCiAgICAgICAgbWVkaWFfdHlwZXMgPSBbXQogICAgICAgIHAxID0gYy5maW5kKCJ7Kn1kaWQveyp9Y29udGFpbmVyW0BsYWJlbD0nUGFydCBJJ10iKQogICAgICAgIGNvbnRzID0gW10KICAgICAgICBpZiBwMSAhPSBOb25lOiAKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICAgICAgZmNvZGUgPSBjb250LnNwbGl0KCctJylbMF0KICAgICAgICAgICAgICAgICAgICBpZiBmY29kZSBpbiBtZWRpYV90eXBlX2RpY3Q6CiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhX3R5cGVzLmFwcGVuZChtZWRpYV90eXBlX2RpY3RbZmNvZGVdKQogICAgICAgIAogICAgICAgIG91dHBbJ2NvbnRhaW5lciddID0gW10KICAgICAgICBvdXRwWydjb2xsZWN0aW9uX3BhcnRzJ10gPSBbXQogICAgICAgIAogICAgICAgIGlmIGNvbnRzOgogICAgICAgICAgICBvdXRwWydjb250YWluZXJfcGFydDEnXSA9IGxpc3Qoc2V0KGNvbnRzKSkKICAgICAgICAgICAgb3V0cFsnY29udGFpbmVyJ10gKz0gbGlzdChzZXQoY29udHMpKQogICAgICAgICAgICBvdXRwWydjb2xsZWN0aW9uX3BhcnRzJ10uYXBwZW5kKCdQYXJ0IEknKQogICAgICAgICAgICAKICAgICAgICBwMiA9IGMuZmluZCgieyp9ZGlkL3sqfWNvbnRhaW5lcltAbGFiZWw9J1BhcnQgSUknXSIpCiAgICAgICAgY29udHMgPSBbXQogICAgICAgIGlmIHAyICE9IE5vbmU6CiAgICAgICAgICAgIGlmIHAyLnRleHQ6CiAgICAgICAgICAgICAgICBmb3IgY29udCBpbiBwMi50ZXh0LnNwbGl0KCcsICcpOgogICAgICAgICAgICAgICAgICAgIGNvbnRzLmFwcGVuZChjb250KQogICAgICAgICAgICAgICAgICAgIGZjb2RlID0gY29udC5zcGxpdCgnLScpWzBdCiAgICAgICAgICAgICAgICAgICAgaWYgZmNvZGUgaW4gbWVkaWFfdHlwZV9kaWN0OgogICAgICAgICAgICAgICAgICAgICAgICBtZWRpYV90eXBlcy5hcHBlbmQobWVkaWFfdHlwZV9kaWN0W2Zjb2RlXSkKICAgIAogICAgICAgIGlmIGNvbnRzOiAgICAKICAgICAgICAgICAgb3V0cFsnY29udGFpbmVyX3BhcnQyJ10gPSBjb250cwogICAgICAgICAgICBvdXRwWydjb250YWluZXInXSArPSBsaXN0KHNldChjb250cykpCiAgICAgICAgICAgIG91dHBbJ2NvbGxlY3Rpb25fcGFydHMnXS5hcHBlbmQoJ1BhcnQgSUknKQogICAgICAgIAogICAgICAgIGlmIG1lZGlhX3R5cGVzOgogICAgICAgICAgICBvdXRwWydtZWRpYV90eXBlJ10gPSBsaXN0KHNldChtZWRpYV90eXBlcykpCiAgICAgICAgCiAgICAgICAgc3ViaiA9IGMuZmluZCgneyp9Y29udHJvbGFjY2Vzcy97Kn1zdWJqZWN0JykKICAgICAgICAKICAgICAgICBpZiBzdWJqICE9IE5vbmU6CiAgICAgICAgICAgIG91dHBbJ3N1YmplY3QnXSA9IHN1YmoudGV4dC5zdHJpcCgpCiAgICAgICAgCiAgICAgICAgY24gPSBjLmZpbmQoInsqfWNvbnRyb2xhY2Nlc3Mveyp9bm90ZS97Kn1wIikKICAgICAgICAKICAgICAgICBpZiBjbiAhPSBOb25lOgogICAgICAgICAgICBvdXRwWydwYXJ0MV9jYWxsX251bWJlciddID0gY24udGV4dAogICAgICAgICAgICAKICAgICAgICAgICAgaWYgY24udGV4dCBpbiBzZWxmLnN1YmplY3RzOgogICAgICAgICAgICAgICAgb3V0cFsncGFydDFfY2F0ZWdvcnknXSA9IHNlbGYuc3ViamVjdHNbY24udGV4dF0KICAgICAgICAKICAgICAgICByZXR1cm4gb3V0cAo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBpZiBwMS50ZXh0OgogICAgICAgICAgICAgICAgZm9yIGNvbnQgaW4gcDEudGV4dC5zcGxpdCgnLCAnKToKICAgICAgICAgICAgICAgICAgICBjb250ID0gY29udC5zcGxpdCgnICcpWzFdCiAgICAgICAgICAgICAgICAgICAgY29udHMuYXBwZW5kKGNvbnQpCjx8ZmltX2VuZHw+"]
["009c391ebee7fb9d4e59691138b040ef9597f403-1","009c391ebee7fb9d4e59691138b040ef9597f403","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCiMgY29kaW5nPXV0Zi04CgojICAgQ29weXJpZ2h0IDIwMjEgZ2V0Y2Fycmllci5pbwojCiMgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgoiIiIgUmVxdWlyZW1lbnRzUHJvdmlkZXIgIiIiCgo8fGZpbV9lbmR8Pg=="]
["009c391ebee7fb9d4e59691138b040ef9597f403-2","009c391ebee7fb9d4e59691138b040ef9597f403","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCiMgY29kaW5nPXV0Zi04CgojICAgQ29weXJpZ2h0IDIwMjEgZ2V0Y2Fycmllci5pbwojCiMgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKIiIiIFJlcXVpcmVtZW50c1Byb3ZpZGVyICIiIgoKCmNsYXNzIFJlcXVpcmVtZW50c1Byb3ZpZGVyTW9kZWw6Cjx8ZmltX2hvbGV8PgogICAgZGVmIGluaXQoc2VsZik6CiAgICAgICAgIiIiIEluaXRpYWxpemUgcHJvdmlkZXIgIiIiCiAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCgogICAgZGVmIGRlaW5pdChzZWxmKToKICAgICAgICAiIiIgRGUtaW5pdGlhbGl6ZSBwcm92aWRlciAiIiIKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKCiAgICBkZWYgcmVxdWlyZW1lbnRzX2V4aXN0KHNlbGYsIHBsdWdpbl9uYW1lLCBjYWNoZV9oYXNoKToKICAgICAgICAiIiIgQ2hlY2sgaWYgcGx1Z2luIHJlcXVpcmVtZW50cyBleGlzdCAiIiIKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKCiAgICBkZWYgZ2V0X3JlcXVpcmVtZW50cyhzZWxmLCBwbHVnaW5fbmFtZSwgY2FjaGVfaGFzaCwgdGVtcG9yYXJ5X29iamVjdHM9Tm9uZSk6CiAgICAgICAgIiIiIEdldCBwbHVnaW4gcmVxdWlyZW1lbnRzIChhLmsuYSB1c2VyIHNpdGUgZGF0YSkgIiIiCiAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCgogICAgZGVmIGFkZF9yZXF1aXJlbWVudHMoc2VsZiwgcGx1Z2luX25hbWUsIGNhY2hlX2hhc2gsIHBhdGgpOgogICAgICAgICIiIiBBZGQgcGx1Z2luIHJlcXVpcmVtZW50cyAoYS5rLmEgdXNlciBzaXRlIGRhdGEpICIiIgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQoKICAgIGRlZiBkZWxldGVfcmVxdWlyZW1lbnRzKHNlbGYsIHBsdWdpbl9uYW1lKToKICAgICAgICAiIiIgRGVsZXRlIHBsdWdpbiByZXF1aXJlbWVudHMgKGEuay5hIHVzZXIgc2l0ZSBkYXRhKSAiIiIKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKPHxmaW1fc3VmZml4fD4KICAgICIiIiBQcm92aWRlciBtb2RlbCAiIiIKCiAgICAjIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0LCBzZXR0aW5ncyk6Cgo8fGZpbV9lbmR8Pg=="]
["009c391ebee7fb9d4e59691138b040ef9597f403-3","009c391ebee7fb9d4e59691138b040ef9597f403","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCiMgY29kaW5nPXV0Zi04CgojICAgQ29weXJpZ2h0IDIwMjEgZ2V0Y2Fycmllci5pbwojCiMgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKPHxmaW1fZW5kfD4="]
["68d517b977dcc87c50d84340b75cc0f492bd8d0c-1","68d517b977dcc87c50d84340b75cc0f492bd8d0c","PHxmaW1fcHJlZml4fD4Kbm9tZSA9IGlucHV0KCdRdWFsIMOpIG8gc2V1IG5vbWUgY29tcGxldG8/Jykuc3RyaXAoKQpub21lc2VwID0gbm9tZS5zcGxpdCgpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcHJpbnQoJ05vbWUgY29tcGxldG86IHt9XG5QcmltZWlybyBub21lOiB7fScuZm9ybWF0KG5vbWUsbm9tZXNlcFswXSkpCnByaW50KCdVbHRpbW8gbm9tZToge30nLmZvcm1hdChub21lc2VwW2xlbihub21lc2VwKS0xXSkpCjx8ZmltX2VuZHw+"]
["e7c8b574305fa9a806a1d26dd47e1edc49e2bf67-1","e7c8b574305fa9a806a1d26dd47e1edc49e2bf67","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCkNyZWF0ZWQgb24gVGh1IE5vdiAyMyAxMDo1MTo0NCAyMDE3CgpAYXV0aG9yOiBEYW4KIiIiCgppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBDbGFzc2lmaWVyVGVtcGxhdGUgYXMgY3QKZnJvbSB0aW1lIGltcG9ydCB0aW1lCgpkZWYgc2F2ZXRocmVzaG9sZHMoZGYpOgogICAgY2xhc3NpZmllciA9IGN0LkNsYXNzaWZpZXIoZGYsICdwcm9kdWN0aXZpdHlfYmlubmVkX2JpbmFyeScpCiAgICBwcmludChsZW4oY2xhc3NpZmllci5kYXRhLmNvbHVtbnMpKQogICAgY2xhc3NpZmllci50aHJlc2hvbGRCeUNvbHVtbigzLCJjb21wYW55IikKICAgIGNsYXNzaWZpZXIudGhyZXNob2xkQnlDb2x1bW4oOCwiYWN0b3IiKQogICAgY2xhc3NpZmllci50aHJlc2hvbGRCeUNvbHVtbigzLCJkaXJlY3RvciIpCiAgICBwcmludChsZW4oY2xhc3NpZmllci5kYXRhLmNvbHVtbnMpKQogICAgZGYudG9fY3N2KCIuLi8uLi9kYXRhL3Byb2Nlc3NlZC90cmFpbl9zZXRfdGhyZXNoLmNzdiIsZW5jb2Rpbmc9InV0Zi04IikKICAgIHByaW50KCJTYXZlZCBzdWNjZXNmdWxseSIpCiAgICByZXR1cm4KCmRlZiBSYW5kb21Gb3Jlc3QoZGYpOgogICAgY2xhc3NpZmllciA9IGN0LkNsYXNzaWZpZXIoZGYsICdwcm9kdWN0aXZpdHlfYmlubmVkX2JpbmFyeScpCiAgICAjY2xhc3NpZmllci5zcGxpdERhdGEoKQogICAgI2NsYXNzaWZpZXIudXBzYW1wbGVUcmFpbkRhdGEoKQogICAgI2NsYXNzaWZpZXIuZG93bnNhbXBsZVRyYWluRGF0YSgpCiAgICAKICAgIHNjb3JlID0gY2xhc3NpZmllci5mMShhdmVyYWdlPSdtYWNybycpCiAgICBlc3RpbWF0b3IgPSBjbGFzc2lmaWVyLnJhbmRvbUZvcmVzdCgpCiAgICBjdiA9IGNsYXNzaWZpZXIuZm9sZChrPTEwLCByYW5kb21fc3RhdGU9NDIpCiAgICBwcmludCgiSW1wb3J0ZWQgY2xhc3NpZmllciIpCiAgICAKICAgIGNsYXNzaWZpZXIuZHJvcENvbHVtbnMoWwogICAgICAgICAgICAib3JpZ2luYWxfdGl0bGUiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgLCJxdWFydGVyIgogICAgICAgICAgICAsInByb2R1Y3Rpdml0eV9iaW5uZWRfbXVsdGkiCiAgICAgICAgICAgICwgImFkdWx0Igo8fGZpbV9lbmR8Pg=="]
["e7c8b574305fa9a806a1d26dd47e1edc49e2bf67-2","e7c8b574305fa9a806a1d26dd47e1edc49e2bf67","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCkNyZWF0ZWQgb24gVGh1IE5vdiAyMyAxMDo1MTo0NCAyMDE3CgpAYXV0aG9yOiBEYW4KIiIiCgppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBDbGFzc2lmaWVyVGVtcGxhdGUgYXMgY3QKZnJvbSB0aW1lIGltcG9ydCB0aW1lCgo8fGZpbV9ob2xlfD4KICAgIGNsYXNzaWZpZXIudGhyZXNob2xkQnlDb2x1bW4oOCwiYWN0b3IiKQogICAgY2xhc3NpZmllci50aHJlc2hvbGRCeUNvbHVtbigzLCJkaXJlY3RvciIpCiAgICBwcmludChsZW4oY2xhc3NpZmllci5kYXRhLmNvbHVtbnMpKQogICAgZGYudG9fY3N2KCIuLi8uLi9kYXRhL3Byb2Nlc3NlZC90cmFpbl9zZXRfdGhyZXNoLmNzdiIsZW5jb2Rpbmc9InV0Zi04IikKICAgIHByaW50KCJTYXZlZCBzdWNjZXNmdWxseSIpCiAgICByZXR1cm4KCmRlZiBSYW5kb21Gb3Jlc3QoZGYpOgogICAgY2xhc3NpZmllciA9IGN0LkNsYXNzaWZpZXIoZGYsICdwcm9kdWN0aXZpdHlfYmlubmVkX2JpbmFyeScpCiAgICAjY2xhc3NpZmllci5zcGxpdERhdGEoKQogICAgI2NsYXNzaWZpZXIudXBzYW1wbGVUcmFpbkRhdGEoKQogICAgI2NsYXNzaWZpZXIuZG93bnNhbXBsZVRyYWluRGF0YSgpCiAgICAKICAgIHNjb3JlID0gY2xhc3NpZmllci5mMShhdmVyYWdlPSdtYWNybycpCiAgICBlc3RpbWF0b3IgPSBjbGFzc2lmaWVyLnJhbmRvbUZvcmVzdCgpCiAgICBjdiA9IGNsYXNzaWZpZXIuZm9sZChrPTEwLCByYW5kb21fc3RhdGU9NDIpCiAgICBwcmludCgiSW1wb3J0ZWQgY2xhc3NpZmllciIpCiAgICAKICAgIGNsYXNzaWZpZXIuZHJvcENvbHVtbnMoWwogICAgICAgICAgICAib3JpZ2luYWxfdGl0bGUiCiAgICAgICAgICAgICwicXVhcnRlciIKICAgICAgICAgICAgLCJwcm9kdWN0aXZpdHlfYmlubmVkX211bHRpIgogICAgICAgICAgICAsICJhZHVsdCIKICAgIF0pCiAgICAKICAgIAogICAgY2xhc3NpZmllci5kcm9wQ29sdW1uQnlQcmVmaXgoImJlbG9uZ3MiKQogICAgY2xhc3NpZmllci5kcm9wQ29sdW1uQnlQcmVmaXgoImFjdG9yIikKICAgIGNsYXNzaWZpZXIuZHJvcENvbHVtbkJ5UHJlZml4KCJkaXJlY3RvciIpCiAgICBjbGFzc2lmaWVyLmRyb3BDb2x1bW5CeVByZWZpeCgicHJvZHVjdGlvbl9jb3VudHJ5IikKICAgIAogICAgcHJpbnQobGVuKGNsYXNzaWZpZXIuZGF0YS5jb2x1bW5zKSkKICAgIGNsYXNzaWZpZXIudGhyZXNob2xkQnlDb2x1bW4oMywiY29tcGFueSIpCiAgICBjbGFzc2lmaWVyLnRocmVzaG9sZEJ5Q29sdW1uKDgsImFjdG9yIikKICAgIGNsYXNzaWZpZXIudGhyZXNob2xkQnlDb2x1bW4oMywiZGlyZWN0b3IiKQogICAgcHJpbnQobGVuKGNsYXNzaWZpZXIuZGF0YS5jb2x1bW5zKSkKICAgIAogICAgCiAgICBwYXJhbV9ncmlkID0geyJtYXhfZGVwdGgiOiBbMywgTm9uZV0sCiAgICAgICAgICAgICAgICAgICJtYXhfZmVhdHVyZXMiOiBbMSwzLDEwXSwKICAgICAgICAgICAgICAgICAgIm1pbl9zYW1wbGVzX3NwbGl0IjogWzIsMywxMF0sCiAgICAgICAgICAgICAgICAgICJtaW5fc2FtcGxlc19sZWFmIjogWzEsMywxMF0sCiAgICAgICAgICAgICAgICAgICJib290c3RyYXAiOiBbVHJ1ZSwgRmFsc2VdLAogICAgICAgICAgICAgICAgICAiY3JpdGVyaW9uIjogWyJnaW5pIiwgImVudHJvcHkiXX0KICAgICIiIgogICAgcGFyYW1fZ3JpZCA9IHsibWF4X2RlcHRoIjogW05vbmVdLAogICAgICAgICAgICAgICAgICAibWF4X2ZlYXR1cmVzIjogWzVdLAogICAgICAgICAgICAgICAgICAibWluX3NhbXBsZXNfc3BsaXQiOiBbMl0sCiAgICAgICAgICAgICAgICAgICJtaW5fc2FtcGxlc19sZWFmIjogWzFdLAogICAgICAgICAgICAgICAgICAiYm9vdHN0cmFwIjogW1RydWVdLAogICAgICAgICAgICAgICAgICAiY3JpdGVyaW9uIjogWyJlbnRyb3B5Il19CiAgICAiIiIKICAgIHN0YXJ0ID0gdGltZSgpCgogICAgcHJpbnQoIlN0YXJ0aW5nIEdyaWQgU2VhcmNoIikKICAgIAogICAgZ3MgPSBjbGFzc2lmaWVyLmdyaWRTZWFyY2goZXN0aW1hdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV9ncmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfcmVzdWx0cz1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2U9MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN2PWN2CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjLG9uVHJhaW5TZXQ9VHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgY2xhc3NpZmllci5ncmlkU2VhcmNoQmVzdFNjb3JlKGdzKQogICAgcHJpbnQoIkdyaWRTZWFyY2ggZm9yIFJhbmRvbUZvcmVzdCB0b29rIHt9Ii5mb3JtYXQodGltZSgpLXN0YXJ0KSkKICAgIGNsYXNzaWZpZXIuZ3JpZFNlYXJjaFJlc3VsdHMyQ1NWKGdzLCBwYXJhbV9ncmlkLCAicmFuZEZvcmVzdC5jc3YiKQogICAgCiAgICAKICAgICIiIk9MRAogICAgIyBjYWxjdWxhdGUgY3Jvc3MgdmFsaWRhdGlvbjogdHJ5IHNhbXBsaW5ncwogICAgZXN0aW1hdG9yLnNldF9wYXJhbXMoCiAgICAgICAgbWF4X2RlcHRoPU5vbmUsCiAgICAgICAgbWF4X2ZlYXR1cmVzPTEwLAogICAgICAgIG1pbl9zYW1wbGVzX3NwbGl0PTIsCiAgICAgICAgbWluX3NhbXBsZXNfbGVhZj0xLAogICAgICAgIGJvb3RzdHJhcD1GYWxzZSwKICAgICAgICBjcml0ZXJpb249ImVudHJvcHkiCiAgICApIiIiCiAgICAgICAgIyBjYWxjdWxhdGUgY3Jvc3MgdmFsaWRhdGlvbjogdHJ5IHNhbXBsaW5ncwogICAgZXN0aW1hdG9yLnNldF9wYXJhbXMoCiAgICAgICAgbWF4X2RlcHRoPU5vbmUsCiAgICAgICAgbWF4X2ZlYXR1cmVzPTUsCiAgICAgICAgbWluX3NhbXBsZXNfc3BsaXQ9MiwKICAgICAgICBtaW5fc2FtcGxlc19sZWFmPTEsCiAgICAgICAgYm9vdHN0cmFwPVRydWUsCiAgICAgICAgY3JpdGVyaW9uPSJlbnRyb3B5IgogICAgKQogICAgcHJpbnQoY2xhc3NpZmllci5jcm9zc192YWxpZGF0ZShjdixlc3RpbWF0b3Isc2FtcGxlPSIiKSkKCiAgICAiIiIKICAgICNydW4gY2xhc3NpZmllciBvbiB0ZXN0IHNldCBhbmQgcHJpbnQgY2xhc3NpZmljYXRpb24gcmVwb3J0CiAgICBjbGFzc2lmaWVyLmZpdF9wcmVkaWN0KGdzLmJlc3RfZXN0aW1hdG9yXykKICAgIHByaW50KGNsYXNzaWZpZXIuY29uZnVzaW9uX21hdHJpeCgpKQogICAgY2xhc3NpZmllci5jbGFzc2lmaWNhdGlvbl9yZXBvcnQoKQogICAgIiIiIAogICAgcmV0dXJuCgojaW1wb3J0IGRhdGEgc2V0CmRmID0gcGQucmVhZF9jc3YoIi4uLy4uL2RhdGEvcHJvY2Vzc2VkL3RyYWluX3NldC5jc3YiLCBpbmRleF9jb2w9MCkKcHJpbnQoIkltcG9ydCBkb25lIikKI3NhdmV0aHJlc2hvbGRzKGRmKQpSYW5kb21Gb3Jlc3QoZGYpCiNwcmludChkZi5zaGFwZSkKCiIiIgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR1JJRCBTRUFSQ0ggQkVTVCBTQ09SRSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KMDIuMTIuMjAxNzogQmVzdCBzY29yZSBpcyAwLjU4MjQxMDU5NDMzMDUyMzcgd2l0aCBwYXJhbXMgeydib290c3RyYXAnOiBGYWxzZSwgJ2NyaXRlcmlvbic6ICdnaW5pJywgJ21heF9kZXB0aCc6IE5vbmUsICdtYXhfZmVhdHVyZXMnOiAxMCwgJ21pbl9zYW1wbGVzX2xlYWYnOiAxLCAnbWluX3NhbXBsZXNfc3BsaXQnOiAyfS4KICAgICAgICAgICAgeydmMSc6IDAuNTcyNTY2MjI5ODE3MDE5MjEsICdubyc6IDY0MCwgJ3llcyc6IDMyNzN9IC8vY29sbGVjdGlvbiwgYWN0b3IsIGRpcmVjdG9yLCBwcm9kX2NvbXAsIHF1YXJ0ZXIgZHJvcHBlZAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIiIiCgoiIiIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdSSUQgU0VBUkNIIEFMTCBTQ09SRVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCjAxLjEyLjIwMTc6IEJlc3Qgc2NvcmUgaXMgMC41NjI4ODU4NDcwMzYwNTc2IHdpdGggcGFyYW1zIHsnYm9vdHN0cmFwJzogVHJ1ZSwgJ2NyaXRlcmlvbic6ICdlbnRyb3B5JywgJ21heF9kZXB0aCc6IE5vbmUsICdtYXhfZmVhdHVyZXMnOiA1LCAnbWluX3NhbXBsZXNfbGVhZic6IDEsICdtaW5fc2FtcGxlc19zcGxpdCc6IDJ9LgogICAgICAgICAgICB7J2YxJzogMC41MjU0MTY1NDAwNjQ1MTYyMSwgJ25vJzogNDExLCAneWVzJzogMzUwMn0gLy9ub24gZHJvcHBlZAowMi4xMi4yMDE3OiBCZXN0IHNjb3JlIGlzIDAuNTQ5NjA2NTAxMzIzNDA5MiB3aXRoIHBhcmFtcyB7J2Jvb3RzdHJhcCc6IFRydWUsICdjcml0ZXJpb24nOiAnZW50cm9weScsICdtYXhfZGVwdGgnOiBOb25lLCAnbWF4X2ZlYXR1cmVzJzogNSwgJ21pbl9zYW1wbGVzX2xlYWYnOiAxLCAnbWluX3NhbXBsZXNfc3BsaXQnOiAyfS4KICAgICAgICAgICAgeydmMSc6IDAuNTQ3NzYwODU4MzIzOTE4MTksICdubyc6IDUyMywgJ3llcyc6IDMzOTB9IHdpdGggdGhyZXNob2xkLCBkcm9wcGVkIGNvbGxlY3Rpb24KMDIuMTIuMjAxNzogQmVzdCBzY29yZSBpcyAwLjU4MTI1Mjc0NTg0MjgwNTcgd2l0aCBwYXJhbXMgeydib290c3RyYXAnOiBGYWxzZSwgJ2NyaXRlcmlvbic6ICdlbnRyb3B5JywgJ21heF9kZXB0aCc6IE5vbmUsICdtYXhfZmVhdHVyZXMnOiAxMCwgJ21pbl9zYW1wbGVzX2xlYWYnOiAxLCAnbWluX3NhbXBsZXNfc3BsaXQnOiAyfS4gICAgICAgICAgICAKICAgICAgICAgICAgeydmMSc6IDAuNTYyNzI4NDA3MzQ0ODkzMzgsICdubyc6IDU4OSwgJ3llcyc6IDMzMjR9IC8vY29sbGVjdGlvbiwgYWN0b3IsIGRpcmVjdG9yLCBwcm9kX2NvbXAKMDIuMTIuMjAxNzogQmVzdCBzY29yZSBpcyAwLjU4MjQxMDU5NDMzMDUyMzcgd2l0aCBwYXJhbXMgeydib290c3RyYXAnOiBGYWxzZSwgJ2NyaXRlcmlvbic6ICdnaW5pJywgJ21heF9kZXB0aCc6IE5vbmUsICdtYXhfZmVhdHVyZXMnOiAxMCwgJ21pbl9zYW1wbGVzX2xlYWYnOiAxLCAnbWluX3NhbXBsZXNfc3BsaXQnOiAyfS4KICAgICAgICAgICAgeydmMSc6IDAuNTcyNTY2MjI5ODE3MDE5MjEsICdubyc6IDY0MCwgJ3llcyc6IDMyNzN9IC8vY29sbGVjdGlvbiwgYWN0b3IsIGRpcmVjdG9yLCBwcm9kX2NvbXAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiIiIgo8fGZpbV9zdWZmaXh8PgpkZWYgc2F2ZXRocmVzaG9sZHMoZGYpOgogICAgY2xhc3NpZmllciA9IGN0LkNsYXNzaWZpZXIoZGYsICdwcm9kdWN0aXZpdHlfYmlubmVkX2JpbmFyeScpCiAgICBwcmludChsZW4oY2xhc3NpZmllci5kYXRhLmNvbHVtbnMpKQogICAgY2xhc3NpZmllci50aHJlc2hvbGRCeUNvbHVtbigzLCJjb21wYW55IikKPHxmaW1fZW5kfD4="]
["68d9cbd49b97f5043eb93ad38b4e42915de50dad-1","68d9cbd49b97f5043eb93ad38b4e42915de50dad","PHxmaW1fcHJlZml4fD4KZnJvbSBpbmR5IGltcG9ydCBhbm9uY3JlZHMsIHdhbGxldAoKaW1wb3J0IHB5dGVzdAppbXBvcnQganNvbgoKCiMgbm9pbnNwZWN0aW9uIFB5VW51c2VkTG9jYWwKQHB5dGVzdC5tYXJrLmFzeW5jaW8KYXN5bmMgZGVmIHRlc3RfYW5vbmNyZWRzX2RlbW9fd29ya3MocG9vbF9uYW1lLCB3YWxsZXRfbmFtZSwgcGF0aF9ob21lKToKICAgICMgMS4gQ3JlYXRlIE15IFdhbGxldCBhbmQgR2V0IFdhbGxldCBIYW5kbGUKICAgIGF3YWl0IHdhbGxldC5jcmVhdGVfd2FsbGV0KHBvb2xfbmFtZSwgd2FsbGV0X25hbWUsIE5vbmUsIE5vbmUsIE5vbmUpCiAgICB3YWxsZXRfaGFuZGxlID0gYXdhaXQgd2FsbGV0Lm9wZW5fd2FsbGV0KHdhbGxldF9uYW1lLCBOb25lLCBOb25lKQoKICAgICMgMi4gSXNzdWVyIGNyZWF0ZSBDbGFpbSBEZWZpbml0aW9uIGZvciBTY2hlbWEKICAgIGlzc3Vlcl9kaWQgPSAnTmNZeGlEWGtwWWk2b3Y1RmNZRGkxZScKICAgIHByb3Zlcl9kaWQgPSAnVnNLVjdnclIxQlVFMjltRzJGbTJrWCcKICAgIHNjaGVtYV9rZXkgPSB7CiAgICAgICAgJ25hbWUnOiAnZ3Z0JywKICAgICAgICAndmVyc2lvbic6ICcxLjAnLAogICAgICAgICdkaWQnOiBpc3N1ZXJfZGlkCiAgICB9CgogICAgc2NoZW1hID0gewogICAgICAgICdzZXFObyc6IDEsCiAgICAgICAgJ2Rlc3QnOiBpc3N1ZXJfZGlkLAogICAgICAgICdkYXRhJzogewogICAgICAgICAgICAnbmFtZSc6ICdndnQnLAogICAgICAgICAgICAndmVyc2lvbic6ICcxLjAnLAogICAgICAgICAgICAnYXR0cl9uYW1lcyc6IFsnYWdlJywgJ3NleCcsICdoZWlnaHQnLCAnbmFtZSddCiAgICAgICAgfQogICAgfQogICAgc2NoZW1hX2pzb24gPSBqc29uLmR1bXBzKHNjaGVtYSkKCiAgICBjbGFpbV9kZWZfanNvbiA9IFwKICAgICAgICBhd2FpdCBhbm9uY3JlZHMuaXNzdWVyX2NyZWF0ZV9hbmRfc3RvcmVfY2xhaW1fZGVmKHdhbGxldF9oYW5kbGUsIGlzc3Vlcl9kaWQsIHNjaGVtYV9qc29uLCAnQ0wnLCBGYWxzZSkKCiAgICAjIDMuIFByb3ZlciBjcmVhdGUgTWFzdGVyIFNlY3JldAogICAgYXdhaXQgYW5vbmNyZWRzLnByb3Zlcl9jcmVhdGVfbWFzdGVyX3NlY3JldCh3YWxsZXRfaGFuZGxlLCAnbWFzdGVyX3NlY3JldCcpCgogICAgIyA0LiBJc3N1ZXIgY3JlYXRlIENsYWltIE9mZmVyCiAgICBjbGFpbV9vZmZlcl9qc29uID0gXAogICAgICAgIGF3YWl0IGFub25jcmVkcy5pc3N1ZXJfY3JlYXRlX2NsYWltX29mZmVyKHdhbGxldF9oYW5kbGUsIHNjaGVtYV9qc29uLCBpc3N1ZXJfZGlkLCBwcm92ZXJfZGlkKQoKICAgICMgNS4gUHJvdmVyIGNyZWF0ZSBDbGFpbSBSZXF1ZXN0CiAgICBjbGFpbV9yZXFfanNvbiA9IGF3YWl0IGFub25jcmVkcy5wcm92ZXJfY3JlYXRlX2FuZF9zdG9yZV9jbGFpbV9yZXEod2FsbGV0X2hhbmRsZSwgcHJvdmVyX2RpZCwgY2xhaW1fb2ZmZXJfanNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbV9kZWZfanNvbiwgJ21hc3Rlcl9zZWNyZXQnKQoKICAgICMgIDYuIElzc3VlciBjcmVhdGUgQ2xhaW0gZm9yIENsYWltIFJlcXVlc3QKICAgIGNsYWltX2pzb24gPSBqc29uLmR1bXBzKHsKICAgICAgICAnc2V4JzogWydtYWxlJywgJzU5NDQ2NTcwOTk1NTg5NjcyMzkyMTA5NDkyNTgzOTQ4ODc0Mjg2OTIwNTAwODE2MDc2OTI1MTk5MTcwNTAwMTExNDQyMzMxMTUxMDMnXSwKICAgICAgICAnbmFtZSc6IFsnQWxleCcsICcxMTM5NDgxNzE2NDU3NDg4NjkwMTcyMjE3OTE2Mjc4MTAzMzM1J10sCiAgICAgICAgJ2hlaWdodCc6IFsnMTc1JywgJzE3NSddLAogICAgICAgICdhZ2UnOiBbJzI4JywgJzI4J10KICAgIH0pCgogICAgKF8sIGNsYWltX2pzb24pID0gYXdhaXQgYW5vbmNyZWRzLmlzc3Vlcl9jcmVhdGVfY2xhaW0od2FsbGV0X2hhbmRsZSwgY2xhaW1fcmVxX2pzb24sIGNsYWltX2pzb24sIC0xKQoKICAgICMgNy4gUHJvdmVyIHByb2Nlc3MgYW5kIHN0b3JlIENsYWltCiAgICBhd2FpdCBhbm9uY3JlZHMucHJvdmVyX3N0b3JlX2NsYWltKHdhbGxldF9oYW5kbGUsIGNsYWltX2pzb24sIE5vbmUpCgogICAgIyA4LiBQcm92ZXIgZ2V0cyBDbGFpbXMgZm9yIFByb29mIFJlcXVlc3QKICAgIHByb29mX3JlcV9qc29uID0ganNvbi5kdW1wcyh7CiAgICAgICAgJ25vbmNlJzogJzEyMzQzMjQyMTIxMicsCiAgICAgICAgJ25hbWUnOiAncHJvb2ZfcmVxXzEnLAogICAgICAgICd2ZXJzaW9uJzogJzAuMScsCiAgICAgICAgJ3JlcXVlc3RlZF9hdHRycyc6IHsKICAgICAgICAgICAgJ2F0dHIxX3JlZmVyZW50JzogeyduYW1lJzogJ25hbWUnfQogICAgICAgIH0sCiAgICAgICAgJ3JlcXVlc3RlZF9wcmVkaWNhdGVzJzogewogICAgICAgICAgICAncHJlZGljYXRlMV9yZWZlcmVudCc6IHsnYXR0cl9uYW1lJzogJ2FnZScsICdwX3R5cGUnOiAnPj0nLCAndmFsdWUnOiAxOH0KICAgICAgICB9Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIH0pCgogICAgY2xhaW1fZm9yX3Byb29mX2pzb24gPSBhd2FpdCBhbm9uY3JlZHMucHJvdmVyX2dldF9jbGFpbXNfZm9yX3Byb29mX3JlcSh3YWxsZXRfaGFuZGxlLCBwcm9vZl9yZXFfanNvbikKICAgIGNsYWltc19mb3JfcHJvb2YgPSBqc29uLmxvYWRzKGNsYWltX2Zvcl9wcm9vZl9qc29uKQo8fGZpbV9lbmR8Pg=="]
["68d9cbd49b97f5043eb93ad38b4e42915de50dad-2","68d9cbd49b97f5043eb93ad38b4e42915de50dad","PHxmaW1fcHJlZml4fD4KZnJvbSBpbmR5IGltcG9ydCBhbm9uY3JlZHMsIHdhbGxldAoKaW1wb3J0IHB5dGVzdAppbXBvcnQganNvbgoKCiMgbm9pbnNwZWN0aW9uIFB5VW51c2VkTG9jYWwKQHB5dGVzdC5tYXJrLmFzeW5jaW8KYXN5bmMgZGVmIHRlc3RfYW5vbmNyZWRzX2RlbW9fd29ya3MocG9vbF9uYW1lLCB3YWxsZXRfbmFtZSwgcGF0aF9ob21lKToKICAgICMgMS4gQ3JlYXRlIE15IFdhbGxldCBhbmQgR2V0IFdhbGxldCBIYW5kbGUKICAgIGF3YWl0IHdhbGxldC5jcmVhdGVfd2FsbGV0KHBvb2xfbmFtZSwgd2FsbGV0X25hbWUsIE5vbmUsIE5vbmUsIE5vbmUpCiAgICB3YWxsZXRfaGFuZGxlID0gYXdhaXQgd2FsbGV0Lm9wZW5fd2FsbGV0KHdhbGxldF9uYW1lLCBOb25lLCBOb25lKQoKICAgICMgMi4gSXNzdWVyIGNyZWF0ZSBDbGFpbSBEZWZpbml0aW9uIGZvciBTY2hlbWEKICAgIGlzc3Vlcl9kaWQgPSAnTmNZeGlEWGtwWWk2b3Y1RmNZRGkxZScKICAgIHByb3Zlcl9kaWQgPSAnVnNLVjdnclIxQlVFMjltRzJGbTJrWCcKICAgIHNjaGVtYV9rZXkgPSB7CiAgICAgICAgJ25hbWUnOiAnZ3Z0JywKICAgICAgICAndmVyc2lvbic6ICcxLjAnLAogICAgICAgICdkaWQnOiBpc3N1ZXJfZGlkCiAgICB9CgogICAgc2NoZW1hID0gewogICAgICAgICdzZXFObyc6IDEsCiAgICAgICAgJ2Rlc3QnOiBpc3N1ZXJfZGlkLAogICAgICAgICdkYXRhJzogewogICAgICAgICAgICAnbmFtZSc6ICdndnQnLAogICAgICAgICAgICAndmVyc2lvbic6ICcxLjAnLAogICAgICAgICAgICAnYXR0cl9uYW1lcyc6IFsnYWdlJywgJ3NleCcsICdoZWlnaHQnLCAnbmFtZSddCiAgICAgICAgfQogICAgfQogICAgc2NoZW1hX2pzb24gPSBqc29uLmR1bXBzKHNjaGVtYSkKCiAgICBjbGFpbV9kZWZfanNvbiA9IFwKICAgICAgICBhd2FpdCBhbm9uY3JlZHMuaXNzdWVyX2NyZWF0ZV9hbmRfc3RvcmVfY2xhaW1fZGVmKHdhbGxldF9oYW5kbGUsIGlzc3Vlcl9kaWQsIHNjaGVtYV9qc29uLCAnQ0wnLCBGYWxzZSkKCiAgICAjIDMuIFByb3ZlciBjcmVhdGUgTWFzdGVyIFNlY3JldAogICAgYXdhaXQgYW5vbmNyZWRzLnByb3Zlcl9jcmVhdGVfbWFzdGVyX3NlY3JldCh3YWxsZXRfaGFuZGxlLCAnbWFzdGVyX3NlY3JldCcpCgogICAgIyA0LiBJc3N1ZXIgY3JlYXRlIENsYWltIE9mZmVyCiAgICBjbGFpbV9vZmZlcl9qc29uID0gXAogICAgICAgIGF3YWl0IGFub25jcmVkcy5pc3N1ZXJfY3JlYXRlX2NsYWltX29mZmVyKHdhbGxldF9oYW5kbGUsIHNjaGVtYV9qc29uLCBpc3N1ZXJfZGlkLCBwcm92ZXJfZGlkKQoKICAgICMgNS4gUHJvdmVyIGNyZWF0ZSBDbGFpbSBSZXF1ZXN0CiAgICBjbGFpbV9yZXFfanNvbiA9IGF3YWl0IGFub25jcmVkcy5wcm92ZXJfY3JlYXRlX2FuZF9zdG9yZV9jbGFpbV9yZXEod2FsbGV0X2hhbmRsZSwgcHJvdmVyX2RpZCwgY2xhaW1fb2ZmZXJfanNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbV9kZWZfanNvbiwgJ21hc3Rlcl9zZWNyZXQnKQoKICAgICMgIDYuIElzc3VlciBjcmVhdGUgQ2xhaW0gZm9yIENsYWltIFJlcXVlc3QKICAgIGNsYWltX2pzb24gPSBqc29uLmR1bXBzKHsKICAgICAgICAnc2V4JzogWydtYWxlJywgJzU5NDQ2NTcwOTk1NTg5NjcyMzkyMTA5NDkyNTgzOTQ4ODc0Mjg2OTIwNTAwODE2MDc2OTI1MTk5MTcwNTAwMTExNDQyMzMxMTUxMDMnXSwKICAgICAgICAnbmFtZSc6IFsnQWxleCcsICcxMTM5NDgxNzE2NDU3NDg4NjkwMTcyMjE3OTE2Mjc4MTAzMzM1J10sCiAgICAgICAgJ2hlaWdodCc6IFsnMTc1JywgJzE3NSddLAogICAgICAgICdhZ2UnOiBbJzI4JywgJzI4J10KICAgIH0pCgogICAgKF8sIGNsYWltX2pzb24pID0gYXdhaXQgYW5vbmNyZWRzLmlzc3Vlcl9jcmVhdGVfY2xhaW0od2FsbGV0X2hhbmRsZSwgY2xhaW1fcmVxX2pzb24sIGNsYWltX2pzb24sIC0xKQoKICAgICMgNy4gUHJvdmVyIHByb2Nlc3MgYW5kIHN0b3JlIENsYWltCiAgICBhd2FpdCBhbm9uY3JlZHMucHJvdmVyX3N0b3JlX2NsYWltKHdhbGxldF9oYW5kbGUsIGNsYWltX2pzb24sIE5vbmUpCgogICAgIyA4LiBQcm92ZXIgZ2V0cyBDbGFpbXMgZm9yIFByb29mIFJlcXVlc3QKICAgIHByb29mX3JlcV9qc29uID0ganNvbi5kdW1wcyh7CiAgICAgICAgJ25vbmNlJzogJzEyMzQzMjQyMTIxMicsCiAgICAgICAgJ25hbWUnOiAncHJvb2ZfcmVxXzEnLAogICAgICAgICd2ZXJzaW9uJzogJzAuMScsCiAgICAgICAgJ3JlcXVlc3RlZF9hdHRycyc6IHsKICAgICAgICAgICAgJ2F0dHIxX3JlZmVyZW50JzogeyduYW1lJzogJ25hbWUnfQogICAgICAgIH0sCiAgICAgICAgJ3JlcXVlc3RlZF9wcmVkaWNhdGVzJzogewogICAgICAgICAgICAncHJlZGljYXRlMV9yZWZlcmVudCc6IHsnYXR0cl9uYW1lJzogJ2FnZScsICdwX3R5cGUnOiAnPj0nLCAndmFsdWUnOiAxOH0KICAgICAgICB9CiAgICB9KQoKICAgIGNsYWltX2Zvcl9wcm9vZl9qc29uID0gYXdhaXQgYW5vbmNyZWRzLnByb3Zlcl9nZXRfY2xhaW1zX2Zvcl9wcm9vZl9yZXEod2FsbGV0X2hhbmRsZSwgcHJvb2ZfcmVxX2pzb24pCiAgICBjbGFpbXNfZm9yX3Byb29mID0ganNvbi5sb2FkcyhjbGFpbV9mb3JfcHJvb2ZfanNvbikKCiAgICBjbGFpbV9mb3JfYXR0cjEgPSBjbGFpbXNfZm9yX3Byb29mWydhdHRycyddWydhdHRyMV9yZWZlcmVudCddCiAgICByZWZlcmVudCA9IGNsYWltX2Zvcl9hdHRyMVswXVsncmVmZXJlbnQnXQoKICAgICMgOS4gUHJvdmVyIGNyZWF0ZSBQcm9vZiBmb3IgUHJvb2YgUmVxdWVzdAogICAgcmVxdWVzdGVkX2NsYWltc19qc29uID0ganNvbi5kdW1wcyh7CiAgICAgICAgJ3NlbGZfYXR0ZXN0ZWRfYXR0cmlidXRlcyc6IHt9LAogICAgICAgICdyZXF1ZXN0ZWRfYXR0cnMnOiB7J2F0dHIxX3JlZmVyZW50JzogW3JlZmVyZW50LCBUcnVlXX0sCiAgICAgICAgJ3JlcXVlc3RlZF9wcmVkaWNhdGVzJzogeydwcmVkaWNhdGUxX3JlZmVyZW50JzogcmVmZXJlbnR9CiAgICB9KQoKICAgIHNjaGVtYXNfanNvbiA9IGpzb24uZHVtcHMoe3JlZmVyZW50OiBzY2hlbWF9KQogICAgY2xhaW1fZGVmc19qc29uID0ganNvbi5kdW1wcyh7cmVmZXJlbnQ6IGpzb24ubG9hZHMoY2xhaW1fZGVmX2pzb24pfSkKICAgIHJldm9jX3JlZ3NfanNvbiA9IGpzb24uZHVtcHMoe30pCgogICAgcHJvb2ZfanNvbiA9IGF3YWl0IGFub25jcmVkcy5wcm92ZXJfY3JlYXRlX3Byb29mKHdhbGxldF9oYW5kbGUsIHByb29mX3JlcV9qc29uLCByZXF1ZXN0ZWRfY2xhaW1zX2pzb24sIHNjaGVtYXNfanNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFzdGVyX3NlY3JldCcsIGNsYWltX2RlZnNfanNvbiwgcmV2b2NfcmVnc19qc29uKQogICAgcHJvb2YgPSBqc29uLmxvYWRzKHByb29mX2pzb24pCgogICAgYXNzZXJ0ICdBbGV4JyA9PSBwcm9vZlsncmVxdWVzdGVkX3Byb29mJ11bJ3JldmVhbGVkX2F0dHJzJ11bJ2F0dHIxX3JlZmVyZW50J11bMV0KPHxmaW1faG9sZXw+CgogICAgIyAxMS4gQ2xvc2Ugd2FsbGV0CiAgICBhd2FpdCB3YWxsZXQuY2xvc2Vfd2FsbGV0KHdhbGxldF9oYW5kbGUpCjx8ZmltX3N1ZmZpeHw+CgogICAgIyAxMC4gVmVyaWZpZXIgdmVyaWZ5IHByb29mCiAgICBhc3NlcnQgYXdhaXQgYW5vbmNyZWRzLnZlcmlmaWVyX3ZlcmlmeV9wcm9vZihwcm9vZl9yZXFfanNvbiwgcHJvb2ZfanNvbiwgc2NoZW1hc19qc29uLCBjbGFpbV9kZWZzX2pzb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZvY19yZWdzX2pzb24pCjx8ZmltX2VuZHw+"]
["68d9cbd49b97f5043eb93ad38b4e42915de50dad-3","68d9cbd49b97f5043eb93ad38b4e42915de50dad","PHxmaW1fcHJlZml4fD4KZnJvbSBpbmR5IGltcG9ydCBhbm9uY3JlZHMsIHdhbGxldAoKaW1wb3J0IHB5dGVzdAppbXBvcnQganNvbgoKCiMgbm9pbnNwZWN0aW9uIFB5VW51c2VkTG9jYWwKQHB5dGVzdC5tYXJrLmFzeW5jaW8KYXN5bmMgZGVmIHRlc3RfYW5vbmNyZWRzX2RlbW9fd29ya3MocG9vbF9uYW1lLCB3YWxsZXRfbmFtZSwgcGF0aF9ob21lKToKICAgICMgMS4gQ3JlYXRlIE15IFdhbGxldCBhbmQgR2V0IFdhbGxldCBIYW5kbGUKICAgIGF3YWl0IHdhbGxldC5jcmVhdGVfd2FsbGV0KHBvb2xfbmFtZSwgd2FsbGV0X25hbWUsIE5vbmUsIE5vbmUsIE5vbmUpCiAgICB3YWxsZXRfaGFuZGxlID0gYXdhaXQgd2FsbGV0Lm9wZW5fd2FsbGV0KHdhbGxldF9uYW1lLCBOb25lLCBOb25lKQoKICAgICMgMi4gSXNzdWVyIGNyZWF0ZSBDbGFpbSBEZWZpbml0aW9uIGZvciBTY2hlbWEKICAgIGlzc3Vlcl9kaWQgPSAnTmNZeGlEWGtwWWk2b3Y1RmNZRGkxZScKICAgIHByb3Zlcl9kaWQgPSAnVnNLVjdnclIxQlVFMjltRzJGbTJrWCcKICAgIHNjaGVtYV9rZXkgPSB7CiAgICAgICAgJ25hbWUnOiAnZ3Z0JywKICAgICAgICAndmVyc2lvbic6ICcxLjAnLAogICAgICAgICdkaWQnOiBpc3N1ZXJfZGlkCiAgICB9CgogICAgc2NoZW1hID0gewogICAgICAgICdzZXFObyc6IDEsCiAgICAgICAgJ2Rlc3QnOiBpc3N1ZXJfZGlkLAogICAgICAgICdkYXRhJzogewogICAgICAgICAgICAnbmFtZSc6ICdndnQnLAogICAgICAgICAgICAndmVyc2lvbic6ICcxLjAnLAogICAgICAgICAgICAnYXR0cl9uYW1lcyc6IFsnYWdlJywgJ3NleCcsICdoZWlnaHQnLCAnbmFtZSddCiAgICAgICAgfQogICAgfQogICAgc2NoZW1hX2pzb24gPSBqc29uLmR1bXBzKHNjaGVtYSkKCiAgICBjbGFpbV9kZWZfanNvbiA9IFwKICAgICAgICBhd2FpdCBhbm9uY3JlZHMuaXNzdWVyX2NyZWF0ZV9hbmRfc3RvcmVfY2xhaW1fZGVmKHdhbGxldF9oYW5kbGUsIGlzc3Vlcl9kaWQsIHNjaGVtYV9qc29uLCAnQ0wnLCBGYWxzZSkKCiAgICAjIDMuIFByb3ZlciBjcmVhdGUgTWFzdGVyIFNlY3JldAogICAgYXdhaXQgYW5vbmNyZWRzLnByb3Zlcl9jcmVhdGVfbWFzdGVyX3NlY3JldCh3YWxsZXRfaGFuZGxlLCAnbWFzdGVyX3NlY3JldCcpCgogICAgIyA0LiBJc3N1ZXIgY3JlYXRlIENsYWltIE9mZmVyCiAgICBjbGFpbV9vZmZlcl9qc29uID0gXAogICAgICAgIGF3YWl0IGFub25jcmVkcy5pc3N1ZXJfY3JlYXRlX2NsYWltX29mZmVyKHdhbGxldF9oYW5kbGUsIHNjaGVtYV9qc29uLCBpc3N1ZXJfZGlkLCBwcm92ZXJfZGlkKQoKICAgICMgNS4gUHJvdmVyIGNyZWF0ZSBDbGFpbSBSZXF1ZXN0CiAgICBjbGFpbV9yZXFfanNvbiA9IGF3YWl0IGFub25jcmVkcy5wcm92ZXJfY3JlYXRlX2FuZF9zdG9yZV9jbGFpbV9yZXEod2FsbGV0X2hhbmRsZSwgcHJvdmVyX2RpZCwgY2xhaW1fb2ZmZXJfanNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbV9kZWZfanNvbiwgJ21hc3Rlcl9zZWNyZXQnKQoKICAgICMgIDYuIElzc3VlciBjcmVhdGUgQ2xhaW0gZm9yIENsYWltIFJlcXVlc3QKICAgIGNsYWltX2pzb24gPSBqc29uLmR1bXBzKHsKICAgICAgICAnc2V4JzogWydtYWxlJywgJzU5NDQ2NTcwOTk1NTg5NjcyMzkyMTA5NDkyNTgzOTQ4ODc0Mjg2OTIwNTAwODE2MDc2OTI1MTk5MTcwNTAwMTExNDQyMzMxMTUxMDMnXSwKICAgICAgICAnbmFtZSc6IFsnQWxleCcsICcxMTM5NDgxNzE2NDU3NDg4NjkwMTcyMjE3OTE2Mjc4MTAzMzM1J10sCiAgICAgICAgJ2hlaWdodCc6IFsnMTc1JywgJzE3NSddLAogICAgICAgICdhZ2UnOiBbJzI4JywgJzI4J10KICAgIH0pCgogICAgKF8sIGNsYWltX2pzb24pID0gYXdhaXQgYW5vbmNyZWRzLmlzc3Vlcl9jcmVhdGVfY2xhaW0od2FsbGV0X2hhbmRsZSwgY2xhaW1fcmVxX2pzb24sIGNsYWltX2pzb24sIC0xKQoKICAgICMgNy4gUHJvdmVyIHByb2Nlc3MgYW5kIHN0b3JlIENsYWltCiAgICBhd2FpdCBhbm9uY3JlZHMucHJvdmVyX3N0b3JlX2NsYWltKHdhbGxldF9oYW5kbGUsIGNsYWltX2pzb24sIE5vbmUpCgogICAgIyA4LiBQcm92ZXIgZ2V0cyBDbGFpbXMgZm9yIFByb29mIFJlcXVlc3QKICAgIHByb29mX3JlcV9qc29uID0ganNvbi5kdW1wcyh7CiAgICAgICAgJ25vbmNlJzogJzEyMzQzMjQyMTIxMicsCiAgICAgICAgJ25hbWUnOiAncHJvb2ZfcmVxXzEnLAogICAgICAgICd2ZXJzaW9uJzogJzAuMScsCiAgICAgICAgJ3JlcXVlc3RlZF9hdHRycyc6IHsKICAgICAgICAgICAgJ2F0dHIxX3JlZmVyZW50JzogeyduYW1lJzogJ25hbWUnfQogICAgICAgIH0sCiAgICAgICAgJ3JlcXVlc3RlZF9wcmVkaWNhdGVzJzogewogICAgICAgICAgICAncHJlZGljYXRlMV9yZWZlcmVudCc6IHsnYXR0cl9uYW1lJzogJ2FnZScsICdwX3R5cGUnOiAnPj0nLCAndmFsdWUnOiAxOH0KICAgICAgICB9CiAgICB9KQoKICAgIGNsYWltX2Zvcl9wcm9vZl9qc29uID0gYXdhaXQgYW5vbmNyZWRzLnByb3Zlcl9nZXRfY2xhaW1zX2Zvcl9wcm9vZl9yZXEod2FsbGV0X2hhbmRsZSwgcHJvb2ZfcmVxX2pzb24pCiAgICBjbGFpbXNfZm9yX3Byb29mID0ganNvbi5sb2FkcyhjbGFpbV9mb3JfcHJvb2ZfanNvbikKCiAgICBjbGFpbV9mb3JfYXR0cjEgPSBjbGFpbXNfZm9yX3Byb29mWydhdHRycyddWydhdHRyMV9yZWZlcmVudCddCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHJlZmVyZW50ID0gY2xhaW1fZm9yX2F0dHIxWzBdWydyZWZlcmVudCddCgogICAgIyA5LiBQcm92ZXIgY3JlYXRlIFByb29mIGZvciBQcm9vZiBSZXF1ZXN0CiAgICByZXF1ZXN0ZWRfY2xhaW1zX2pzb24gPSBqc29uLmR1bXBzKHsKPHxmaW1fZW5kfD4="]
["68d9cbd49b97f5043eb93ad38b4e42915de50dad-4","68d9cbd49b97f5043eb93ad38b4e42915de50dad","PHxmaW1fcHJlZml4fD4KZnJvbSBpbmR5IGltcG9ydCBhbm9uY3JlZHMsIHdhbGxldAoKaW1wb3J0IHB5dGVzdAppbXBvcnQganNvbgoKCiMgbm9pbnNwZWN0aW9uIFB5VW51c2VkTG9jYWwKQHB5dGVzdC5tYXJrLmFzeW5jaW8KYXN5bmMgZGVmIHRlc3RfYW5vbmNyZWRzX2RlbW9fd29ya3MocG9vbF9uYW1lLCB3YWxsZXRfbmFtZSwgcGF0aF9ob21lKToKICAgICMgMS4gQ3JlYXRlIE15IFdhbGxldCBhbmQgR2V0IFdhbGxldCBIYW5kbGUKICAgIGF3YWl0IHdhbGxldC5jcmVhdGVfd2FsbGV0KHBvb2xfbmFtZSwgd2FsbGV0X25hbWUsIE5vbmUsIE5vbmUsIE5vbmUpCiAgICB3YWxsZXRfaGFuZGxlID0gYXdhaXQgd2FsbGV0Lm9wZW5fd2FsbGV0KHdhbGxldF9uYW1lLCBOb25lLCBOb25lKQoKICAgICMgMi4gSXNzdWVyIGNyZWF0ZSBDbGFpbSBEZWZpbml0aW9uIGZvciBTY2hlbWEKICAgIGlzc3Vlcl9kaWQgPSAnTmNZeGlEWGtwWWk2b3Y1RmNZRGkxZScKICAgIHByb3Zlcl9kaWQgPSAnVnNLVjdnclIxQlVFMjltRzJGbTJrWCcKICAgIHNjaGVtYV9rZXkgPSB7CiAgICAgICAgJ25hbWUnOiAnZ3Z0JywKICAgICAgICAndmVyc2lvbic6ICcxLjAnLAogICAgICAgICdkaWQnOiBpc3N1ZXJfZGlkCiAgICB9CgogICAgc2NoZW1hID0gewogICAgICAgICdzZXFObyc6IDEsCiAgICAgICAgJ2Rlc3QnOiBpc3N1ZXJfZGlkLAogICAgICAgICdkYXRhJzogewogICAgICAgICAgICAnbmFtZSc6ICdndnQnLAogICAgICAgICAgICAndmVyc2lvbic6ICcxLjAnLAogICAgICAgICAgICAnYXR0cl9uYW1lcyc6IFsnYWdlJywgJ3NleCcsICdoZWlnaHQnLCAnbmFtZSddCiAgICAgICAgfQogICAgfQogICAgc2NoZW1hX2pzb24gPSBqc29uLmR1bXBzKHNjaGVtYSkKCiAgICBjbGFpbV9kZWZfanNvbiA9IFwKICAgICAgICBhd2FpdCBhbm9uY3JlZHMuaXNzdWVyX2NyZWF0ZV9hbmRfc3RvcmVfY2xhaW1fZGVmKHdhbGxldF9oYW5kbGUsIGlzc3Vlcl9kaWQsIHNjaGVtYV9qc29uLCAnQ0wnLCBGYWxzZSkKCiAgICAjIDMuIFByb3ZlciBjcmVhdGUgTWFzdGVyIFNlY3JldAogICAgYXdhaXQgYW5vbmNyZWRzLnByb3Zlcl9jcmVhdGVfbWFzdGVyX3NlY3JldCh3YWxsZXRfaGFuZGxlLCAnbWFzdGVyX3NlY3JldCcpCgogICAgIyA0LiBJc3N1ZXIgY3JlYXRlIENsYWltIE9mZmVyCiAgICBjbGFpbV9vZmZlcl9qc29uID0gXAogICAgICAgIGF3YWl0IGFub25jcmVkcy5pc3N1ZXJfY3JlYXRlX2NsYWltX29mZmVyKHdhbGxldF9oYW5kbGUsIHNjaGVtYV9qc29uLCBpc3N1ZXJfZGlkLCBwcm92ZXJfZGlkKQoKICAgICMgNS4gUHJvdmVyIGNyZWF0ZSBDbGFpbSBSZXF1ZXN0CiAgICBjbGFpbV9yZXFfanNvbiA9IGF3YWl0IGFub25jcmVkcy5wcm92ZXJfY3JlYXRlX2FuZF9zdG9yZV9jbGFpbV9yZXEod2FsbGV0X2hhbmRsZSwgcHJvdmVyX2RpZCwgY2xhaW1fb2ZmZXJfanNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbV9kZWZfanNvbiwgJ21hc3Rlcl9zZWNyZXQnKQoKICAgICMgIDYuIElzc3VlciBjcmVhdGUgQ2xhaW0gZm9yIENsYWltIFJlcXVlc3QKICAgIGNsYWltX2pzb24gPSBqc29uLmR1bXBzKHsKICAgICAgICAnc2V4JzogWydtYWxlJywgJzU5NDQ2NTcwOTk1NTg5NjcyMzkyMTA5NDkyNTgzOTQ4ODc0Mjg2OTIwNTAwODE2MDc2OTI1MTk5MTcwNTAwMTExNDQyMzMxMTUxMDMnXSwKICAgICAgICAnbmFtZSc6IFsnQWxleCcsICcxMTM5NDgxNzE2NDU3NDg4NjkwMTcyMjE3OTE2Mjc4MTAzMzM1J10sCiAgICAgICAgJ2hlaWdodCc6IFsnMTc1JywgJzE3NSddLAogICAgICAgICdhZ2UnOiBbJzI4JywgJzI4J10KICAgIH0pCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAoXywgY2xhaW1fanNvbikgPSBhd2FpdCBhbm9uY3JlZHMuaXNzdWVyX2NyZWF0ZV9jbGFpbSh3YWxsZXRfaGFuZGxlLCBjbGFpbV9yZXFfanNvbiwgY2xhaW1fanNvbiwgLTEpCgogICAgIyA3LiBQcm92ZXIgcHJvY2VzcyBhbmQgc3RvcmUgQ2xhaW0KICAgIGF3YWl0IGFub25jcmVkcy5wcm92ZXJfc3RvcmVfY2xhaW0od2FsbGV0X2hhbmRsZSwgY2xhaW1fanNvbiwgTm9uZSkKPHxmaW1fZW5kfD4="]
["68d9cbd49b97f5043eb93ad38b4e42915de50dad-5","68d9cbd49b97f5043eb93ad38b4e42915de50dad","PHxmaW1fcHJlZml4fD4KZnJvbSBpbmR5IGltcG9ydCBhbm9uY3JlZHMsIHdhbGxldAoKaW1wb3J0IHB5dGVzdAppbXBvcnQganNvbgoKCiMgbm9pbnNwZWN0aW9uIFB5VW51c2VkTG9jYWwKQHB5dGVzdC5tYXJrLmFzeW5jaW8KYXN5bmMgZGVmIHRlc3RfYW5vbmNyZWRzX2RlbW9fd29ya3MocG9vbF9uYW1lLCB3YWxsZXRfbmFtZSwgcGF0aF9ob21lKToKICAgICMgMS4gQ3JlYXRlIE15IFdhbGxldCBhbmQgR2V0IFdhbGxldCBIYW5kbGUKICAgIGF3YWl0IHdhbGxldC5jcmVhdGVfd2FsbGV0KHBvb2xfbmFtZSwgd2FsbGV0X25hbWUsIE5vbmUsIE5vbmUsIE5vbmUpCiAgICB3YWxsZXRfaGFuZGxlID0gYXdhaXQgd2FsbGV0Lm9wZW5fd2FsbGV0KHdhbGxldF9uYW1lLCBOb25lLCBOb25lKQoKICAgICMgMi4gSXNzdWVyIGNyZWF0ZSBDbGFpbSBEZWZpbml0aW9uIGZvciBTY2hlbWEKICAgIGlzc3Vlcl9kaWQgPSAnTmNZeGlEWGtwWWk2b3Y1RmNZRGkxZScKICAgIHByb3Zlcl9kaWQgPSAnVnNLVjdnclIxQlVFMjltRzJGbTJrWCcKICAgIHNjaGVtYV9rZXkgPSB7CiAgICAgICAgJ25hbWUnOiAnZ3Z0JywKICAgICAgICAndmVyc2lvbic6ICcxLjAnLAogICAgICAgICdkaWQnOiBpc3N1ZXJfZGlkCiAgICB9CgogICAgc2NoZW1hID0gewogICAgICAgICdzZXFObyc6IDEsCiAgICAgICAgJ2Rlc3QnOiBpc3N1ZXJfZGlkLAogICAgICAgICdkYXRhJzogewogICAgICAgICAgICAnbmFtZSc6ICdndnQnLAogICAgICAgICAgICAndmVyc2lvbic6ICcxLjAnLAogICAgICAgICAgICAnYXR0cl9uYW1lcyc6IFsnYWdlJywgJ3NleCcsICdoZWlnaHQnLCAnbmFtZSddCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICB9Cjx8ZmltX2VuZHw+"]
["6ba4b3cf5144aecad0dc3baa6eba0b7bcf3f3d11-1","6ba4b3cf5144aecad0dc3baa6eba0b7bcf3f3d11","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHJhbmRvbQoKZnJvbSBzZWxlbml1bS5jb21tb24uZXhjZXB0aW9ucyBpbXBvcnQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgVGltZW91dEV4Y2VwdGlvbgpmcm9tIHNlbGVuaXVtLndlYmRyaXZlci5jb21tb24uYnkgaW1wb3J0IEJ5CmZyb20gc2VsZW5pdW0ud2ViZHJpdmVyLnJlbW90ZS53ZWJkcml2ZXIgaW1wb3J0IFdlYkRyaXZlcgpmcm9tIHNlbGVuaXVtLndlYmRyaXZlci5zdXBwb3J0IGltcG9ydCBleHBlY3RlZF9jb25kaXRpb25zIGFzIGVjCmZyb20gc2VsZW5pdW0ud2ViZHJpdmVyLnN1cHBvcnQud2FpdCBpbXBvcnQgV2ViRHJpdmVyV2FpdAoKaW1wb3J0IGNvbmZpZwpmcm9tIGZpbHRlciBpbXBvcnQgUG9zdEZpbHRlcgpmcm9tIHBvc3RfcGFyc2VyIGltcG9ydCBwYXJzZV9leHBsb3JlCmZyb20gc3RyYXRlZ3kgaW1wb3J0IFJ1bkZvcmV2ZXJTdHJhdGVneQpmcm9tIHRyYWNrZXIgaW1wb3J0IHBvc3RfdHJhY2tlcgpmcm9tIHV0aWxzIGltcG9ydCByYW5kX3dhaXRfc2VjCgpsb2dnaW5nLmJhc2ljQ29uZmlnKGhhbmRsZXJzPVtsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKV0sCiAgICAgICAgICAgICAgICAgICAgbGV2ZWw9bG9nZ2luZy5JTkZPLAogICAgICAgICAgICAgICAgICAgIGZvcm1hdD0nJShhc2N0aW1lKXMgWyUobGV2ZWxuYW1lKS40c10gJShtZXNzYWdlKXMnLAogICAgICAgICAgICAgICAgICAgIGRhdGVmbXQ9JyVhICVkICVIOiVNOiVTJykKCmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKCgpjbGFzcyBBdXRvTGlrZUJvdDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkcml2ZXI6IFdlYkRyaXZlciwgcG9zdF9maWx0ZXI9UG9zdEZpbHRlcigpLCBydW5uaW5nX3N0cmF0ZWd5PVJ1bkZvcmV2ZXJTdHJhdGVneSgpKToKICAgICAgICBzZWxmLmRyaXZlciA9IGRyaXZlcgogICAgICAgIHNlbGYucG9zdF9maWx0ZXIgPSBwb3N0X2ZpbHRlcgogICAgICAgIHNlbGYucnVubmluZ19zdHJhdGVneSA9IHJ1bm5pbmdfc3RyYXRlZ3kKCiAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgICAgIGlmIG5vdCBjb25maWcuU0tJUF9MT0dJTjoKICAgICAgICAgICAgc2VsZi5sb2dfaW4oKQogICAgICAgIHJldHVybiBzZWxmCgogICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsLCBleGNfdGIpOgogICAgICAgIHNlbGYuZHJpdmVyLnF1aXQoKQogICAgICAgIGxvZ2dlci5pbmZvKHBvc3RfdHJhY2tlci5zdGF0cykKICAgICAgICByZXR1cm4gTm9uZQo8fGZpbV9ob2xlfD4KICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBwb3N0cyA9IHNlbGYuZmV0Y2hfcG9zdHNfZnJvbV9leHBsb3JlKG1heF9pZCkKICAgICAgICAgICAgZXhjZXB0IFRpbWVvdXRFeGNlcHRpb246CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICByYW5kb20uc2h1ZmZsZShwb3N0cykKICAgICAgICAgICAgZm9yIHBvc3QgaW4gcG9zdHM6CiAgICAgICAgICAgICAgICBpZiBzZWxmLnBvc3RfZmlsdGVyLnNob3VsZF9saWtlKHBvc3QpOgogICAgICAgICAgICAgICAgICAgIHNlbGYubGlrZV9wb3N0KHBvc3QpCgogICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJ1bm5pbmdfc3RyYXRlZ3kuc2hvdWxkX2NvbnRpbnVlX3J1bigpOgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgcG9zdF90cmFja2VyLnNraXBwZWRfcG9zdChwb3N0KQoKICAgICAgICAgICAgbWF4X2lkICs9IDEKCiAgICBkZWYgbG9nX2luKHNlbGYpOgogICAgICAgIHNlbGYuZHJpdmVyLmdldCgiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS8iKQogICAgICAgIHRyeToKICAgICAgICAgICAgc2VsZi53YWl0X3VudGlsKGVjLnByZXNlbmNlX29mX2VsZW1lbnRfbG9jYXRlZCgoQnkuTkFNRSwgJ3VzZXJuYW1lJykpKQoKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X25hbWUoJ3VzZXJuYW1lJykuc2VuZF9rZXlzKGNvbmZpZy5VU0VSTkFNRSkKICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9uYW1lKCdwYXNzd29yZCcpLnNlbmRfa2V5cyhjb25maWcuUEFTU1dPUkQpCiAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoCiAgICAgICAgICAgICAgICAgICAgJy8vKltAaWQ9InJlYWN0LXJvb3QiXS9zZWN0aW9uL21haW4vYXJ0aWNsZS9kaXZbMl0vZGl2WzFdL2Rpdi9mb3JtL2Rpdls0XS9idXR0b24nKS5jbGljaygpCgogICAgICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoZiJDb3VsZCBub3QgZmluZCBlbGVtZW50LiBFcnJvcjoge2V9IikKICAgICAgICAgICAgICAgIHJldHVybgoKICAgICAgICBleGNlcHQgVGltZW91dEV4Y2VwdGlvbjoKICAgICAgICAgICAgcGFzcwoKICAgICAgICB0cnk6CiAgICAgICAgICAgICMgcmVtZW1iZXIgdGhpcyBicm93c2VyIHByb21wdAogICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoCiAgICAgICAgICAgICAgICAnLy8qW0BpZD0icmVhY3Qtcm9vdCJdL3NlY3Rpb24vbWFpbi9kaXYvZGl2L2Rpdi9zZWN0aW9uL2Rpdi9idXR0b24nKS5jbGljaygpCiAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb246CiAgICAgICAgICAgIHBhc3MKCiAgICAgICAgdHJ5OgogICAgICAgICAgICAjIHR1cm4gb24gbm90aWZpY2F0aW9ucyBwcm9tcHQKICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvaHRtbC9ib2R5L2Rpdls0XS9kaXYvZGl2L2Rpdi9kaXZbM10vYnV0dG9uWzJdIikuY2xpY2soKQogICAgICAgICAgICBsb2dnZXIuZGVidWcoIlNraXBwaW5nIHR1cm4gb24gbm90aWZpY2F0aW9ucyIpCiAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb246CiAgICAgICAgICAgIHBhc3MKCiAgICAgICAgc2VsZi53YWl0X3VudGlsKGVjLnByZXNlbmNlX29mX2VsZW1lbnRfbG9jYXRlZCgoQnkuQ0xBU1NfTkFNRSwgJ0MzdUROJykpKQoKICAgIGRlZiBmZXRjaF9wb3N0c19mcm9tX2V4cGxvcmUoc2VsZiwgbWF4X2lkPTApOgogICAgICAgIHRleHQgPSBzZWxmLmxvYWRfcHJlX2Zyb21fdXJsKAogICAgICAgICAgICBmImh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZXhwbG9yZS9ncmlkLz9pc19wcmVmZXRjaD1mYWxzZSZvbWl0X2NvdmVyX21lZGlhPWZhbHNlJm1vZHVsZT1leHBsb3JlX3BvcHVsYXImdXNlX3NlY3Rpb25hbF9wYXlsb2FkPXRydWUmY2x1c3Rlcl9pZD1leHBsb3JlX2FsbCUzQTAmaW5jbHVkZV9maXhlZF9kZXN0aW5hdGlvbnM9dHJ1ZSZtYXhfaWQ9e21heF9pZH0iKQogICAgICAgIHJldHVybiBwYXJzZV9leHBsb3JlKHRleHQpCgogICAgZGVmIGxvYWRfcHJlX2Zyb21fdXJsKHNlbGYsIHVybCk6CiAgICAgICAgc2VsZi5vcGVuX2FuZF9zd2l0Y2hfdG9fdGFiKHVybCkKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYud2FpdF91bnRpbChlYy5wcmVzZW5jZV9vZl9lbGVtZW50X2xvY2F0ZWQoKEJ5LlRBR19OQU1FLCAncHJlJykpLCB0aW1lb3V0PTcpCiAgICAgICAgICAgIHJldHVybiBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfdGFnX25hbWUoJ3ByZScpLnRleHQKICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICBzZWxmLmNsb3NlX2FuZF9vcGVuX3RhYigpCgogICAgZGVmIG9wZW5fYW5kX3N3aXRjaF90b190YWIoc2VsZiwgdXJsKToKICAgICAgICBoYW5kbGVzID0gc2VsZi5kcml2ZXIud2luZG93X2hhbmRsZXMKICAgICAgICBzZWxmLmRyaXZlci5leGVjdXRlX3NjcmlwdChmIndpbmRvdy5vcGVuKCd7dXJsfScpOyIpCiAgICAgICAgIyBpbmRleCBiYXNlZAogICAgICAgIHNlbGYuZHJpdmVyLnN3aXRjaF90by53aW5kb3coc2VsZi5kcml2ZXIud2luZG93X2hhbmRsZXNbbGVuKGhhbmRsZXMpXSkKCiAgICBkZWYgY2xvc2VfYW5kX29wZW5fdGFiKHNlbGYsIHRhYl9pbmRleD0wKToKICAgICAgICBzZWxmLmRyaXZlci5jbG9zZSgpCiAgICAgICAgc2VsZi5kcml2ZXIuc3dpdGNoX3RvLndpbmRvdyhzZWxmLmRyaXZlci53aW5kb3dfaGFuZGxlc1t0YWJfaW5kZXhdKQoKICAgIGRlZiBsaWtlX3Bvc3Qoc2VsZiwgcG9zdCk6CgogICAgICAgIHNlbGYub3Blbl9hbmRfc3dpdGNoX3RvX3RhYihwb3N0LnBvc3RfbGluaykKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYud2FpdF91bnRpbChlYy5wcmVzZW5jZV9vZl9lbGVtZW50X2xvY2F0ZWQoKEJ5LkNMQVNTX05BTUUsICdmcjY2bicpKSkKICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2NsYXNzX25hbWUoJ2ZyNjZuJykuY2xpY2soKQogICAgICAgICAgICBwb3N0X3RyYWNrZXIubGlrZWRfcG9zdChwb3N0KQogICAgICAgICAgICBsb2dnZXIuaW5mbyhmIkxpa2VkIHtwb3N0fSIpCiAgICAgICAgICAgIHJhbmRfd2FpdF9zZWMoKQogICAgICAgICAgICByZXR1cm4gVHJ1ZQoKICAgICAgICAjIHBvc3QgbWlnaHQgZ2V0IHJlbW92ZWQKICAgICAgICBleGNlcHQgKE5vU3VjaEVsZW1lbnRFeGNlcHRpb24sIFRpbWVvdXRFeGNlcHRpb24pOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICBzZWxmLmNsb3NlX2FuZF9vcGVuX3RhYigpCgogICAgZGVmIHdhaXRfdW50aWwoc2VsZiwgY29uZGl0aW9uLCB0aW1lb3V0PTUpOgogICAgICAgIFdlYkRyaXZlcldhaXQoc2VsZi5kcml2ZXIsIHRpbWVvdXQpLnVudGlsKGNvbmRpdGlvbikKPHxmaW1fc3VmZml4fD4KCiAgICBkZWYgbGlrZV9mcm9tX2V4cGxvcmUoc2VsZik6CiAgICAgICAgbWF4X2lkID0gMAoKPHxmaW1fZW5kfD4="]
["97a496b3ce1b9617b586735587a279744267475c-1","97a496b3ce1b9617b586735587a279744267475c","PHxmaW1fcHJlZml4fD4KIyBlbmNvZGluZzogdXRmLTgKIiIiCnRpbWU6CiAgICBidWlsZF9oZWFwIE8obikKICAgIGhlYXBpZnkobGduKQogICAgYXZnIE8obmxnbikKIiIiCmltcG9ydCByYW5kb20KCmRlZiBoZWFwaWZ5KGhlYXAsIHNpemUsIHJvb3QpOgogICAgbGVmdCA9IDIgKiByb290ICsgMQogICAgcmlnaHQgPSBsZWZ0ICsgMQogICAgdG1wID0gcm9vdAoKICAgIGlmIGxlZnQgPCBzaXplIGFuZCBoZWFwW3RtcF0gPCBoZWFwW2xlZnRdOgogICAgICAgIHRtcCA9IGxlZnQKICAgIGlmIHJpZ2h0IDwgc2l6ZSBhbmQgaGVhcFt0bXBdIDwgaGVhcFtyaWdodF06CiAgICAgICAgdG1wID0gcmlnaHQKICAgIGlmIHRtcCAhPSByb290OgogICAgICAgIGhlYXBbdG1wXSwgaGVhcFtyb290XSA9IGhlYXBbcm9vdF0sIGhlYXBbdG1wXQogICAgICAgIGhlYXBpZnkoaGVhcCwgc2l6ZSwgdG1wKQoKCmRlZiBoZWFwX3NvcnQoaGVhcCk6CiAgICBzaXplID0gbGVuKGhlYXApCiAgICBmb3IgaSBpbiB4cmFuZ2UoKHNpemUtMikvLzIsIC0xLCAtMSk6CiAgICAgICAgaGVhcGlmeShoZWFwLCBzaXplLCBpKQoKICAgIGZvciBpIGluIHJhbmdlKGxlbihoZWFwKS0xLCAtMSwgLTEpOgogICAgICAgIGhlYXBbMF0sIGhlYXBbaV0gPSBoZWFwW2ldLCBoZWFwWzBdCiAgICAgICAgaGVhcGlmeShoZWFwLCBpLCAwKQogICAgcmV0dXJuIGhlYXAKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBsc3QgPSBbcmFuZG9tLnJhbmRpbnQoMSwgMTAwKSBmb3IgaSBpbiByYW5nZSgyMCldCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHByaW50IGxzdAogICAgaGVhcF9zb3J0KGxzdCkKICAgIHByaW50IGxzdAo8fGZpbV9lbmR8Pg=="]
["97a496b3ce1b9617b586735587a279744267475c-2","97a496b3ce1b9617b586735587a279744267475c","PHxmaW1fcHJlZml4fD4KIyBlbmNvZGluZzogdXRmLTgKIiIiCnRpbWU6CiAgICBidWlsZF9oZWFwIE8obikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgaGVhcGlmeShsZ24pCiAgICBhdmcgTyhubGduKQo8fGZpbV9lbmR8Pg=="]
["97a496b3ce1b9617b586735587a279744267475c-3","97a496b3ce1b9617b586735587a279744267475c","PHxmaW1fcHJlZml4fD4KIyBlbmNvZGluZzogdXRmLTgKIiIiCnRpbWU6CiAgICBidWlsZF9oZWFwIE8obikKICAgIGhlYXBpZnkobGduKQogICAgYXZnIE8obmxnbikKIiIiCmltcG9ydCByYW5kb20KCmRlZiBoZWFwaWZ5KGhlYXAsIHNpemUsIHJvb3QpOgogICAgbGVmdCA9IDIgKiByb290ICsgMQogICAgcmlnaHQgPSBsZWZ0ICsgMQogICAgdG1wID0gcm9vdAoKICAgIGlmIGxlZnQgPCBzaXplIGFuZCBoZWFwW3RtcF0gPCBoZWFwW2xlZnRdOgogICAgICAgIHRtcCA9IGxlZnQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgaWYgcmlnaHQgPCBzaXplIGFuZCBoZWFwW3RtcF0gPCBoZWFwW3JpZ2h0XToKICAgICAgICB0bXAgPSByaWdodAogICAgaWYgdG1wICE9IHJvb3Q6CiAgICAgICAgaGVhcFt0bXBdLCBoZWFwW3Jvb3RdID0gaGVhcFtyb290XSwgaGVhcFt0bXBdCjx8ZmltX2VuZHw+"]
["97a496b3ce1b9617b586735587a279744267475c-4","97a496b3ce1b9617b586735587a279744267475c","PHxmaW1fcHJlZml4fD4KIyBlbmNvZGluZzogdXRmLTgKIiIiCnRpbWU6CiAgICBidWlsZF9oZWFwIE8obikKICAgIGhlYXBpZnkobGduKQogICAgYXZnIE8obmxnbikKIiIiCmltcG9ydCByYW5kb20KCmRlZiBoZWFwaWZ5KGhlYXAsIHNpemUsIHJvb3QpOgogICAgbGVmdCA9IDIgKiByb290ICsgMQogICAgcmlnaHQgPSBsZWZ0ICsgMQogICAgdG1wID0gcm9vdAoKICAgIGlmIGxlZnQgPCBzaXplIGFuZCBoZWFwW3RtcF0gPCBoZWFwW2xlZnRdOgogICAgICAgIHRtcCA9IGxlZnQKICAgIGlmIHJpZ2h0IDwgc2l6ZSBhbmQgaGVhcFt0bXBdIDwgaGVhcFtyaWdodF06CiAgICAgICAgdG1wID0gcmlnaHQKICAgIGlmIHRtcCAhPSByb290OgogICAgICAgIGhlYXBbdG1wXSwgaGVhcFtyb290XSA9IGhlYXBbcm9vdF0sIGhlYXBbdG1wXQogICAgICAgIGhlYXBpZnkoaGVhcCwgc2l6ZSwgdG1wKQoKCmRlZiBoZWFwX3NvcnQoaGVhcCk6CiAgICBzaXplID0gbGVuKGhlYXApCiAgICBmb3IgaSBpbiB4cmFuZ2UoKHNpemUtMikvLzIsIC0xLCAtMSk6CiAgICAgICAgaGVhcGlmeShoZWFwLCBzaXplLCBpKQoKICAgIGZvciBpIGluIHJhbmdlKGxlbihoZWFwKS0xLCAtMSwgLTEpOgogICAgICAgIGhlYXBbMF0sIGhlYXBbaV0gPSBoZWFwW2ldLCBoZWFwWzBdCiAgICAgICAgaGVhcGlmeShoZWFwLCBpLCAwKQogICAgcmV0dXJuIGhlYXAKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGxzdCA9IFtyYW5kb20ucmFuZGludCgxLCAxMDApIGZvciBpIGluIHJhbmdlKDIwKV0KICAgIHByaW50IGxzdAogICAgaGVhcF9zb3J0KGxzdCkKICAgIHByaW50IGxzdAo8fGZpbV9lbmR8Pg=="]
["97a496b3ce1b9617b586735587a279744267475c-5","97a496b3ce1b9617b586735587a279744267475c","PHxmaW1fcHJlZml4fD4KIyBlbmNvZGluZzogdXRmLTgKIiIiCnRpbWU6CiAgICBidWlsZF9oZWFwIE8obikKICAgIGhlYXBpZnkobGduKQogICAgYXZnIE8obmxnbikKIiIiCmltcG9ydCByYW5kb20KCmRlZiBoZWFwaWZ5KGhlYXAsIHNpemUsIHJvb3QpOgogICAgbGVmdCA9IDIgKiByb290ICsgMQogICAgcmlnaHQgPSBsZWZ0ICsgMQogICAgdG1wID0gcm9vdAoKICAgIGlmIGxlZnQgPCBzaXplIGFuZCBoZWFwW3RtcF0gPCBoZWFwW2xlZnRdOgogICAgICAgIHRtcCA9IGxlZnQKICAgIGlmIHJpZ2h0IDwgc2l6ZSBhbmQgaGVhcFt0bXBdIDwgaGVhcFtyaWdodF06CiAgICAgICAgdG1wID0gcmlnaHQKICAgIGlmIHRtcCAhPSByb290Ogo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgaGVhcFt0bXBdLCBoZWFwW3Jvb3RdID0gaGVhcFtyb290XSwgaGVhcFt0bXBdCiAgICAgICAgaGVhcGlmeShoZWFwLCBzaXplLCB0bXApCgoKPHxmaW1fZW5kfD4="]
["ec281fbef1c93771251cc6f895db9fe351f5dadc-1","ec281fbef1c93771251cc6f895db9fe351f5dadc","PHxmaW1fcHJlZml4fD4KZnJvbSAub25kb2Nfb2JqZWN0IGltcG9ydCBPbkRvYwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gLnN0YW5kYXJkX29iamVjdCBpbXBvcnQgU3RhbmRhcmRPY3IKZnJvbSAuY3VzdG9tb2NyX29iamVjdCBpbXBvcnQgQ3VzdG9tT2NyCjx8ZmltX2VuZHw+"]
["ec281fbef1c93771251cc6f895db9fe351f5dadc-2","ec281fbef1c93771251cc6f895db9fe351f5dadc","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAub25kb2Nfb2JqZWN0IGltcG9ydCBPbkRvYwpmcm9tIC5zdGFuZGFyZF9vYmplY3QgaW1wb3J0IFN0YW5kYXJkT2NyCmZyb20gLmN1c3RvbW9jcl9vYmplY3QgaW1wb3J0IEN1c3RvbU9jcgo8fGZpbV9lbmR8Pg=="]
["ec281fbef1c93771251cc6f895db9fe351f5dadc-3","ec281fbef1c93771251cc6f895db9fe351f5dadc","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAub25kb2Nfb2JqZWN0IGltcG9ydCBPbkRvYwpmcm9tIC5zdGFuZGFyZF9vYmplY3QgaW1wb3J0IFN0YW5kYXJkT2NyCmZyb20gLmN1c3RvbW9jcl9vYmplY3QgaW1wb3J0IEN1c3RvbU9jcgo8fGZpbV9lbmR8Pg=="]
["ec281fbef1c93771251cc6f895db9fe351f5dadc-4","ec281fbef1c93771251cc6f895db9fe351f5dadc","PHxmaW1fcHJlZml4fD4KZnJvbSAub25kb2Nfb2JqZWN0IGltcG9ydCBPbkRvYwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gLnN0YW5kYXJkX29iamVjdCBpbXBvcnQgU3RhbmRhcmRPY3IKZnJvbSAuY3VzdG9tb2NyX29iamVjdCBpbXBvcnQgQ3VzdG9tT2NyCjx8ZmltX2VuZHw+"]
["ec281fbef1c93771251cc6f895db9fe351f5dadc-5","ec281fbef1c93771251cc6f895db9fe351f5dadc","PHxmaW1fcHJlZml4fD4KZnJvbSAub25kb2Nfb2JqZWN0IGltcG9ydCBPbkRvYwpmcm9tIC5zdGFuZGFyZF9vYmplY3QgaW1wb3J0IFN0YW5kYXJkT2NyCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuY3VzdG9tb2NyX29iamVjdCBpbXBvcnQgQ3VzdG9tT2NyCjx8ZmltX2VuZHw+"]
["8228e08b99ff0a18661ef30709e8532b666451db-1","8228e08b99ff0a18661ef30709e8532b666451db","PHxmaW1fcHJlZml4fD4KIiIiCmxpYmZpdSBweXRob24gbW9kdWxlIGZvciByZW1vdGUgY29udHJvbAoKVGhpcyBtb2R1bGUgcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8gcnVuIGEgY29tbWFuZCB3aXRoIGxpYmZpdSBlbmFibGVkLCBhbmQKY29udHJvbGxpbmcgdGhlIGZhaWx1cmUgcG9pbnRzIGR5bmFtaWNhbGx5LgoKSXQgcHJvdmlkZXMgc2ltaWxhciBmdW5jdGlvbmFsaXR5IHRvIHRoZSBmaXUtY3RybCBhbmQgZml1LXJ1biBzaGVsbCB0b29scywgYnV0CmlzIHVzZWZ1bCBmb3IgcHJvZ3JhbW1lZCB0ZXN0cy4KCk5vdGUgaXQgYXNzdW1lcyB0aGUgcHJlbG9hZGluZyBsaWJyYXJpZXMgYXJlIGluc3RhbGxlZCBpbiBAQFBMSUJQQVRIQEAuCiIiIgoKaW1wb3J0IG9zCmltcG9ydCB0ZW1wZmlsZQppbXBvcnQgc3VicHJvY2VzcwppbXBvcnQgc2h1dGlsCmltcG9ydCB0aW1lCgoKIyBEZWZhdWx0IHBhdGggdG8gbG9vayBmb3IgcHJlbG9hZGVyIGxpYnJhcmllcy4KUExJQlBBVEggPSAiQEBQTElCUEFUSEBAIgoKCmNsYXNzIENvbW1hbmRFcnJvciAoUnVudGltZUVycm9yKToKICAgICIiIlRoZXJlIHdhcyBhbiBlcnJvciBydW5uaW5nIHRoZSBjb21tYW5kLiIiIgogICAgcGFzcwoKCmNsYXNzIEZsYWdzOgoJIiIiQ29udGFpbnMgdGhlIHZhbGlkIGZsYWcgY29uc3RhbnRzLgoKCU9ORVRJTUU6IFRoaXMgcG9pbnQgb2YgZmFpbHVyZSBpcyBkaXNhYmxlZCBpbW1lZGlhdGVseSBhZnRlciBmYWlsaW5nIG9uY2UuCgkiIiIKCU9ORVRJTUUgPSAib25ldGltZSIKCgpjbGFzcyBfQ29udHJvbEJhc2UgKG9iamVjdCk6CiAgICAiIiJCYXNlIGNsYXNzIGZvciByZW1vdGUgY29udHJvbCBvYmplY3RzLiIiIgoKICAgIGRlZiBydW5fcmF3X2NtZChzZWxmLCBjbWQsIGFyZ3MpOgogICAgICAgICIiIlJ1bnMgYSBuZXcgcmF3IGNvbW1hbmQuIFRvIGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMiIiIKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogICAgZGVmIF9iYXNpY19hcmdzKHNlbGYsIG5hbWUsIGZhaWxudW0sIGZhaWxpbmZvLCBmbGFncyk6CiAgICAgICAgIiIiQ29udmVydHMgdGhlIGNvbW1vbiBhcmd1bWVudHMgdG8gYW4gYXJncyBsaXN0IGZvciBydW5fcmF3X2NtZCgpLiIiIgogICAgICAgIGFyZ3MgPSBbIm5hbWU9JXMiICUgbmFtZV0KICAgICAgICBpZiBmYWlsbnVtOgogICAgICAgICAgICBhcmdzLmFwcGVuZCgiZmFpbG51bT0lcyIgJSBmYWlsbnVtKQogICAgICAgIGlmIGZhaWxpbmZvOgogICAgICAgICAgICBhcmdzLmFwcGVuZCgiZmFpbGluZm89JXMiICUgZmFpbGluZm8pCiAgICAgICAgaWYgZmxhZ3M6CiAgICAgICAgICAgIGFyZ3MuZXh0ZW5kKGZsYWdzKQoKICAgICAgICByZXR1cm4gYXJncwoKICAgIGRlZiBlbmFibGUoc2VsZiwgbmFtZSwgZmFpbG51bSA9IDEsIGZhaWxpbmZvID0gTm9uZSwgZmxhZ3MgPSAoKSk6CiAgICAgICAgIiIiRW5hYmxlcyB0aGUgZ2l2ZW4gcG9pbnQgb2YgZmFpbHVyZS4iIiIKICAgICAgICBhcmdzID0gc2VsZi5fYmFzaWNfYXJncyhuYW1lLCBmYWlsbnVtLCBmYWlsaW5mbywgZmxhZ3MpCiAgICAgICAgc2VsZi5ydW5fcmF3X2NtZCgiZW5hYmxlIiwgYXJncykKCiAgICBkZWYgZW5hYmxlX3JhbmRvbShzZWxmLCBuYW1lLCBwcm9iYWJpbGl0eSwgZmFpbG51bSA9IDEsCiAgICAgICAgICAgIGZhaWxpbmZvID0gTm9uZSwgZmxhZ3MgPSAoKSk6CiAgICAgICAgIkVuYWJsZXMgdGhlIGdpdmVuIHBvaW50IG9mIGZhaWx1cmUsIHdpdGggdGhlIGdpdmVuIHByb2JhYmlsaXR5LiIKICAgICAgICBhcmdzID0gc2VsZi5fYmFzaWNfYXJncyhuYW1lLCBmYWlsbnVtLCBmYWlsaW5mbywgZmxhZ3MpCiAgICAgICAgYXJncy5hcHBlbmQoInByb2JhYmlsaXR5PSVmIiAlIHByb2JhYmlsaXR5KQogICAgICAgIHNlbGYucnVuX3Jhd19jbWQoImVuYWJsZV9yYW5kb20iLCBhcmdzKQoKICAgIGRlZiBlbmFibGVfc3RhY2tfYnlfbmFtZShzZWxmLCBuYW1lLCBmdW5jX25hbWUsCiAgICAgICAgICAgIGZhaWxudW0gPSAxLCBmYWlsaW5mbyA9IE5vbmUsIGZsYWdzID0gKCksCiAgICAgICAgICAgIHBvc19pbl9zdGFjayA9IC0xKToKICAgICAgICAiIiJFbmFibGVzIHRoZSBnaXZlbiBwb2ludCBvZiBmYWlsdXJlLCBidXQgb25seSBpZiAnZnVuY19uYW1lJyBpcyBpbgogICAgICAgIHRoZSBzdGFjay4KCiAgICAgICAgJ2Z1bmNfbmFtZScgaXMgYmUgdGhlIG5hbWUgb2YgdGhlIEMgZnVuY3Rpb24gdG8gbG9vayBmb3IuCiAgICAgICAgIiIiCiAgICAgICAgYXJncyA9IHNlbGYuX2Jhc2ljX2FyZ3MobmFtZSwgZmFpbG51bSwgZmFpbGluZm8sIGZsYWdzKQogICAgICAgIGFyZ3MuYXBwZW5kKCJmdW5jX25hbWU9JXMiICUgZnVuY19uYW1lKQogICAgICAgIGlmIHBvc19pbl9zdGFjayA+PSAwOgogICAgICAgICAgICBhcmdzLmFwcGVuZCgicG9zX2luX3N0YWNrPSVkIiAlIHBvc19pbl9zdGFjaykKICAgICAgICBzZWxmLnJ1bl9yYXdfY21kKCJlbmFibGVfc3RhY2tfYnlfbmFtZSIsIGFyZ3MpCgogICAgZGVmIGRpc2FibGUoc2VsZiwgbmFtZSk6CiAgICAgICAgIiIiRGlzYWJsZXMgdGhlIGdpdmVuIHBvaW50IG9mIGZhaWx1cmUuIiIiCiAgICAgICAgc2VsZi5ydW5fcmF3X2NtZCgiZGlzYWJsZSIsIFsibmFtZT0lcyIgJSBuYW1lXSkKCgpkZWYgX29wZW5fd2l0aF90aW1lb3V0KHBhdGgsIG1vZGUsIHRpbWVvdXQgPSAzKToKICAgICIiIk9wZW4gYSBmaWxlLCB3YWl0aW5nIGlmIGl0IGRvZXNuJ3QgZXhpc3QgeWV0LiIiIgogICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHRpbWVvdXQKICAgIHdoaWxlIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKToKICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCiAgICAgICAgaWYgdGltZS50aW1lKCkgPj0gZGVhZGxpbmU6CiAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVGltZW91dCB3YWl0aW5nIGZvciBmaWxlICVyIiAlIHBhdGgpCgogICAgcmV0dXJuIG9wZW4ocGF0aCwgbW9kZSkKCgpjbGFzcyBQaXBlQ29udHJvbCAoX0NvbnRyb2xCYXNlKToKICAgICIiIkNvbnRyb2wgcGlwZSB1c2VkIHRvIGNvbnRyb2wgYSBsaWJmaXUtaW5zdHJ1bWVudGVkIHByb2Nlc3MuIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aF9wcmVmaXgpOgogICAgICAgICIiIkNvbnN0cnVjdG9yLgoKICAgICAgICBBcmdzOgogICAgICAgICAgICBwYXRoOiBQYXRoIHRvIHRoZSBjb250cm9sIHBpcGUuCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5wYXRoX2luID0gcGF0aF9wcmVmaXggKyAiLmluIgogICAgICAgIHNlbGYucGF0aF9vdXQgPSBwYXRoX3ByZWZpeCArICIub3V0IgoKICAgIGRlZiBfb3Blbl9waXBlcyhzZWxmKToKICAgICAgICAjIE9wZW4gdGhlIGZpbGVzLCBidXQgd2FpdCBpZiB0aGV5IGFyZSBub3QgdGhlcmUsIGFzIHRoZSBjaGlsZCBwcm9jZXNzCiAgICAgICAgIyBtYXkgbm90IGhhdmUgY3JlYXRlZCB0aGVtIHlldC4KICAgICAgICBmZF9pbiA9IF9vcGVuX3dpdGhfdGltZW91dChzZWxmLnBhdGhfaW4sICJhIikKICAgICAgICBmZF9vdXQgPSBfb3Blbl93aXRoX3RpbWVvdXQoc2VsZi5wYXRoX291dCwgInIiKQogICAgICAgIHJldHVybiBmZF9pbiwgZmRfb3V0CgogICAgZGVmIHJ1bl9yYXdfY21kKHNlbGYsIGNtZCwgYXJncyk6CiAgICAgICAgIiIiU2VuZCBhIHJhdyBjb21tYW5kIG92ZXIgdGhlIHBpcGUuIiIiCiAgICAgICAgIyBOb3RlIHdlIG9wZW4gdGhlIHBpcGUgZWFjaCB0aW1lIGZvciBzaW1wbGljaXR5LCBhbmQgYWxzbyB0byBzaW1wbGlmeQogICAgICAgICMgZXh0ZXJuYWwgaW50ZXJ2ZW50aW9uIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2luZy4KICAgICAgICBmZF9pbiwgZmRfb3V0ID0gc2VsZi5fb3Blbl9waXBlcygpCgo8fGZpbV9ob2xlfD4KICAgICAgICByID0gaW50KGZkX291dC5yZWFkbGluZSgpKQogICAgICAgIGlmIHIgIT0gMDoKICAgICAgICAgICAgcmFpc2UgQ29tbWFuZEVycm9yCgoKY2xhc3MgRW52aXJvbm1lbnRDb250cm9sIChfQ29udHJvbEJhc2UpOgogICAgIiIiUHJlLWV4ZWN1dGlvbiBlbnZpcm9ubWVudCBjb250cm9sLiIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYuZW52ID0gIiIKCiAgICBkZWYgcnVuX3Jhd19jbWQoc2VsZiwgY21kLCBhcmdzKToKICAgICAgICAiIiJBZGQgYSByYXcgY29tbWFuZCB0byB0aGUgZW52aXJvbm1lbnQuIiIiCiAgICAgICAgc2VsZi5lbnYgKz0gIiVzICVzXG4iICUgKGNtZCwgJywnLmpvaW4oYXJncykpCgoKY2xhc3MgU3VicHJvY2VzcyAoX0NvbnRyb2xCYXNlKToKICAgICIiIldyYXBwZXIgZm9yIHN1YnByb2Nlc3MuUG9wZW4sIGJ1dCB3aXRob3V0IGltbWVkaWF0ZSBleGVjdXRpb24uCgogICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhIHdyYXBwZXIgZm9yIHN1YnByb2Nlc3MuUG9wZW4sIHdoaWNoIGNhbiBiZSB1c2VkIHRvCiAgICBydW4gb3RoZXIgcHJvY2Vzc2VzIHVuZGVyIGxpYmZpdS4KCiAgICBIb3dldmVyLCB0aGUgcHJvY2Vzc2VzIGRvbid0IHN0YXJ0IHN0cmFpZ2h0IGF3YXksIGFsbG93aW5nIHRoZSB1c2VyIHRvCiAgICBwcmUtY29uZmlndXJlIHNvbWUgZmFpbHVyZSBwb2ludHMuCgogICAgVGhlIHByb2Nlc3MgY2FuIHRoZW4gYmUgc3RhcnRlZCB3aXRoIHRoZSBzdGFydCgpIG1ldGhvZC4KCiAgICBBZnRlciB0aGUgcHJvY2VzcyBoYXMgYmVlbiBzdGFydGVkLCB0aGUgZmFpbHVyZSBwb2ludHMgY2FuIGJlIGNvbnRyb2xsZWQKICAgIHJlbW90ZWx5IHZpYSB0aGUgc2FtZSBmdW5jdGlvbnMuCgogICAgUHJvY2Vzc2VzIGNhbiBiZSBzdGFydGVkIG9ubHkgb25jZS4KICAgIE5vdGUgdGhhdCB1c2luZyBzaGVsbD1UcnVlIGlzIG5vdCByZWNvbW1lbmRlZCwgYXMgaXQgbWFrZXMgdGhlIHBpZCBvZiB0aGUKICAgIGNvbnRyb2xsZWQgcHJvY2VzcyB0byBiZSB1bmtub3duLgogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCiAgICAgICAgc2VsZi5rd2FyZ3MgPSBrd2FyZ3MKCiAgICAgICAgIyBOb3RlIHRoaXMgcmVtb3ZlcyBmaXVfZW5hYmxlX3Bvc2l4IGZyb20ga3dhcmdzIGlmIGl0J3MgdGhlcmUsIHRoYXQKICAgICAgICAjIHdheSBrd2FyZ3MgcmVtYWlucyAiY2xlYW4iIGZvciBwYXNzaW5nIHRvIFBvcGVuLgogICAgICAgIHNlbGYuZml1X2VuYWJsZV9wb3NpeCA9IGt3YXJncy5wb3AoJ2ZpdV9lbmFibGVfcG9zaXgnLCBGYWxzZSkKCiAgICAgICAgc2VsZi5fcHJvYyA9IE5vbmUKICAgICAgICBzZWxmLnRtcGRpciA9IE5vbmUKCiAgICAgICAgIyBJbml0aWFsbHksIHRoaXMgaXMgYW4gRW52aXJvbm1lbnRDb250cm9sIHNvIHdlIGNhbiBkbyBwcmVwYXJhdGlvbjsKICAgICAgICAjIG9uY2Ugd2Ugc3RhcnQgdGhlIGNvbW1hbmQsIHdlIHdpbGwgY2hhbmdlIHRoaXMgdG8gYmUgUGlwZUNvbnRyb2wuCiAgICAgICAgc2VsZi5jdHJsID0gRW52aXJvbm1lbnRDb250cm9sKCkKCiAgICBkZWYgcnVuX3Jhd19jbWQoc2VsZiwgY21kLCBhcmdzKToKICAgICAgICBzZWxmLmN0cmwucnVuX3Jhd19jbWQoY21kLCBhcmdzKQoKICAgIGRlZiBzdGFydChzZWxmKToKICAgICAgICBzZWxmLnRtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4ID0gJ2ZpdV9jdHJsLScpCgogICAgICAgIGVudiA9IG9zLmVudmlyb24KICAgICAgICBlbnZbJ0xEX1BSRUxPQUQnXSA9IGVudi5nZXQoJ0xEX1BSRUxPQUQnLCAnJykKICAgICAgICBpZiBzZWxmLmZpdV9lbmFibGVfcG9zaXg6CiAgICAgICAgICAgIGVudlsnTERfUFJFTE9BRCddICs9ICcgJyArIFBMSUJQQVRIICsgJy9maXVfcG9zaXhfcHJlbG9hZC5zbycKICAgICAgICBlbnZbJ0xEX1BSRUxPQUQnXSArPSAnICcgKyBQTElCUEFUSCArICcvZml1X3J1bl9wcmVsb2FkLnNvICcKICAgICAgICBlbnZbJ0ZJVV9DVFJMX0ZJRk8nXSA9IHNlbGYudG1wZGlyICsgJy9jdHJsLWZpZm8nCiAgICAgICAgZW52WydGSVVfRU5BQkxFJ10gPSBzZWxmLmN0cmwuZW52CgogICAgICAgIHNlbGYuX3Byb2MgPSBzdWJwcm9jZXNzLlBvcGVuKCpzZWxmLmFyZ3MsICoqc2VsZi5rd2FyZ3MpCgogICAgICAgIGZpZm9fcGF0aCA9ICIlcy0lZCIgJSAoZW52WydGSVVfQ1RSTF9GSUZPJ10sIHNlbGYuX3Byb2MucGlkKQogICAgICAgIHNlbGYuY3RybCA9IFBpcGVDb250cm9sKGZpZm9fcGF0aCkKCiAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MKCiAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAjIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KICAgICAgICAjIFRoZSAiJ2ZpdV9jdHJsLScgaW4gc2VsZi50bXBkaXIiIGNoZWNrIGlzIGp1c3QgYSBzYWZlZ3VhcmQuCiAgICAgICAgaWYgc2VsZi50bXBkaXIgYW5kICdmaXVfY3RybC0nIGluIHNlbGYudG1wZGlyOgogICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYudG1wZGlyKQoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzID0gIiVzICVzXG4iICUgKGNtZCwgJywnLmpvaW4oYXJncykpCiAgICAgICAgZmRfaW4ud3JpdGUocykKICAgICAgICBmZF9pbi5mbHVzaCgpCgo8fGZpbV9lbmR8Pg=="]
["8228e08b99ff0a18661ef30709e8532b666451db-2","8228e08b99ff0a18661ef30709e8532b666451db","PHxmaW1fcHJlZml4fD4KIiIiCmxpYmZpdSBweXRob24gbW9kdWxlIGZvciByZW1vdGUgY29udHJvbAoKVGhpcyBtb2R1bGUgcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8gcnVuIGEgY29tbWFuZCB3aXRoIGxpYmZpdSBlbmFibGVkLCBhbmQKY29udHJvbGxpbmcgdGhlIGZhaWx1cmUgcG9pbnRzIGR5bmFtaWNhbGx5LgoKSXQgcHJvdmlkZXMgc2ltaWxhciBmdW5jdGlvbmFsaXR5IHRvIHRoZSBmaXUtY3RybCBhbmQgZml1LXJ1biBzaGVsbCB0b29scywgYnV0CmlzIHVzZWZ1bCBmb3IgcHJvZ3JhbW1lZCB0ZXN0cy4KCk5vdGUgaXQgYXNzdW1lcyB0aGUgcHJlbG9hZGluZyBsaWJyYXJpZXMgYXJlIGluc3RhbGxlZCBpbiBAQFBMSUJQQVRIQEAuCiIiIgoKaW1wb3J0IG9zCmltcG9ydCB0ZW1wZmlsZQppbXBvcnQgc3VicHJvY2VzcwppbXBvcnQgc2h1dGlsCmltcG9ydCB0aW1lCgoKIyBEZWZhdWx0IHBhdGggdG8gbG9vayBmb3IgcHJlbG9hZGVyIGxpYnJhcmllcy4KUExJQlBBVEggPSAiQEBQTElCUEFUSEBAIgoKCmNsYXNzIENvbW1hbmRFcnJvciAoUnVudGltZUVycm9yKToKICAgICIiIlRoZXJlIHdhcyBhbiBlcnJvciBydW5uaW5nIHRoZSBjb21tYW5kLiIiIgogICAgcGFzcwoKCmNsYXNzIEZsYWdzOgoJIiIiQ29udGFpbnMgdGhlIHZhbGlkIGZsYWcgY29uc3RhbnRzLgoKCU9ORVRJTUU6IFRoaXMgcG9pbnQgb2YgZmFpbHVyZSBpcyBkaXNhYmxlZCBpbW1lZGlhdGVseSBhZnRlciBmYWlsaW5nIG9uY2UuCgkiIiIKCU9ORVRJTUUgPSAib25ldGltZSIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCmNsYXNzIF9Db250cm9sQmFzZSAob2JqZWN0KToKICAgICIiIkJhc2UgY2xhc3MgZm9yIHJlbW90ZSBjb250cm9sIG9iamVjdHMuIiIiCjx8ZmltX2VuZHw+"]
["8228e08b99ff0a18661ef30709e8532b666451db-3","8228e08b99ff0a18661ef30709e8532b666451db","PHxmaW1fcHJlZml4fD4KIiIiCmxpYmZpdSBweXRob24gbW9kdWxlIGZvciByZW1vdGUgY29udHJvbAoKVGhpcyBtb2R1bGUgcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8gcnVuIGEgY29tbWFuZCB3aXRoIGxpYmZpdSBlbmFibGVkLCBhbmQKY29udHJvbGxpbmcgdGhlIGZhaWx1cmUgcG9pbnRzIGR5bmFtaWNhbGx5LgoKSXQgcHJvdmlkZXMgc2ltaWxhciBmdW5jdGlvbmFsaXR5IHRvIHRoZSBmaXUtY3RybCBhbmQgZml1LXJ1biBzaGVsbCB0b29scywgYnV0CmlzIHVzZWZ1bCBmb3IgcHJvZ3JhbW1lZCB0ZXN0cy4KCk5vdGUgaXQgYXNzdW1lcyB0aGUgcHJlbG9hZGluZyBsaWJyYXJpZXMgYXJlIGluc3RhbGxlZCBpbiBAQFBMSUJQQVRIQEAuCiIiIgoKaW1wb3J0IG9zCmltcG9ydCB0ZW1wZmlsZQppbXBvcnQgc3VicHJvY2VzcwppbXBvcnQgc2h1dGlsCmltcG9ydCB0aW1lCgoKIyBEZWZhdWx0IHBhdGggdG8gbG9vayBmb3IgcHJlbG9hZGVyIGxpYnJhcmllcy4KUExJQlBBVEggPSAiQEBQTElCUEFUSEBAIgoKCmNsYXNzIENvbW1hbmRFcnJvciAoUnVudGltZUVycm9yKToKICAgICIiIlRoZXJlIHdhcyBhbiBlcnJvciBydW5uaW5nIHRoZSBjb21tYW5kLiIiIgogICAgcGFzcwoKCmNsYXNzIEZsYWdzOgoJIiIiQ29udGFpbnMgdGhlIHZhbGlkIGZsYWcgY29uc3RhbnRzLgoKCU9ORVRJTUU6IFRoaXMgcG9pbnQgb2YgZmFpbHVyZSBpcyBkaXNhYmxlZCBpbW1lZGlhdGVseSBhZnRlciBmYWlsaW5nIG9uY2UuCgkiIiIKCU9ORVRJTUUgPSAib25ldGltZSIKCgpjbGFzcyBfQ29udHJvbEJhc2UgKG9iamVjdCk6CiAgICAiIiJCYXNlIGNsYXNzIGZvciByZW1vdGUgY29udHJvbCBvYmplY3RzLiIiIgoKICAgIGRlZiBydW5fcmF3X2NtZChzZWxmLCBjbWQsIGFyZ3MpOgogICAgICAgICIiIlJ1bnMgYSBuZXcgcmF3IGNvbW1hbmQuIFRvIGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMiIiIKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogICAgZGVmIF9iYXNpY19hcmdzKHNlbGYsIG5hbWUsIGZhaWxudW0sIGZhaWxpbmZvLCBmbGFncyk6CiAgICAgICAgIiIiQ29udmVydHMgdGhlIGNvbW1vbiBhcmd1bWVudHMgdG8gYW4gYXJncyBsaXN0IGZvciBydW5fcmF3X2NtZCgpLiIiIgogICAgICAgIGFyZ3MgPSBbIm5hbWU9JXMiICUgbmFtZV0KICAgICAgICBpZiBmYWlsbnVtOgogICAgICAgICAgICBhcmdzLmFwcGVuZCgiZmFpbG51bT0lcyIgJSBmYWlsbnVtKQogICAgICAgIGlmIGZhaWxpbmZvOgogICAgICAgICAgICBhcmdzLmFwcGVuZCgiZmFpbGluZm89JXMiICUgZmFpbGluZm8pCiAgICAgICAgaWYgZmxhZ3M6CiAgICAgICAgICAgIGFyZ3MuZXh0ZW5kKGZsYWdzKQoKICAgICAgICByZXR1cm4gYXJncwoKICAgIGRlZiBlbmFibGUoc2VsZiwgbmFtZSwgZmFpbG51bSA9IDEsIGZhaWxpbmZvID0gTm9uZSwgZmxhZ3MgPSAoKSk6CiAgICAgICAgIiIiRW5hYmxlcyB0aGUgZ2l2ZW4gcG9pbnQgb2YgZmFpbHVyZS4iIiIKICAgICAgICBhcmdzID0gc2VsZi5fYmFzaWNfYXJncyhuYW1lLCBmYWlsbnVtLCBmYWlsaW5mbywgZmxhZ3MpCiAgICAgICAgc2VsZi5ydW5fcmF3X2NtZCgiZW5hYmxlIiwgYXJncykKCiAgICBkZWYgZW5hYmxlX3JhbmRvbShzZWxmLCBuYW1lLCBwcm9iYWJpbGl0eSwgZmFpbG51bSA9IDEsCiAgICAgICAgICAgIGZhaWxpbmZvID0gTm9uZSwgZmxhZ3MgPSAoKSk6CiAgICAgICAgIkVuYWJsZXMgdGhlIGdpdmVuIHBvaW50IG9mIGZhaWx1cmUsIHdpdGggdGhlIGdpdmVuIHByb2JhYmlsaXR5LiIKICAgICAgICBhcmdzID0gc2VsZi5fYmFzaWNfYXJncyhuYW1lLCBmYWlsbnVtLCBmYWlsaW5mbywgZmxhZ3MpCiAgICAgICAgYXJncy5hcHBlbmQoInByb2JhYmlsaXR5PSVmIiAlIHByb2JhYmlsaXR5KQogICAgICAgIHNlbGYucnVuX3Jhd19jbWQoImVuYWJsZV9yYW5kb20iLCBhcmdzKQoKICAgIGRlZiBlbmFibGVfc3RhY2tfYnlfbmFtZShzZWxmLCBuYW1lLCBmdW5jX25hbWUsCiAgICAgICAgICAgIGZhaWxudW0gPSAxLCBmYWlsaW5mbyA9IE5vbmUsIGZsYWdzID0gKCksCiAgICAgICAgICAgIHBvc19pbl9zdGFjayA9IC0xKToKICAgICAgICAiIiJFbmFibGVzIHRoZSBnaXZlbiBwb2ludCBvZiBmYWlsdXJlLCBidXQgb25seSBpZiAnZnVuY19uYW1lJyBpcyBpbgogICAgICAgIHRoZSBzdGFjay4KCiAgICAgICAgJ2Z1bmNfbmFtZScgaXMgYmUgdGhlIG5hbWUgb2YgdGhlIEMgZnVuY3Rpb24gdG8gbG9vayBmb3IuCiAgICAgICAgIiIiCiAgICAgICAgYXJncyA9IHNlbGYuX2Jhc2ljX2FyZ3MobmFtZSwgZmFpbG51bSwgZmFpbGluZm8sIGZsYWdzKQogICAgICAgIGFyZ3MuYXBwZW5kKCJmdW5jX25hbWU9JXMiICUgZnVuY19uYW1lKQogICAgICAgIGlmIHBvc19pbl9zdGFjayA+PSAwOgogICAgICAgICAgICBhcmdzLmFwcGVuZCgicG9zX2luX3N0YWNrPSVkIiAlIHBvc19pbl9zdGFjaykKICAgICAgICBzZWxmLnJ1bl9yYXdfY21kKCJlbmFibGVfc3RhY2tfYnlfbmFtZSIsIGFyZ3MpCgogICAgZGVmIGRpc2FibGUoc2VsZiwgbmFtZSk6CiAgICAgICAgIiIiRGlzYWJsZXMgdGhlIGdpdmVuIHBvaW50IG9mIGZhaWx1cmUuIiIiCiAgICAgICAgc2VsZi5ydW5fcmF3X2NtZCgiZGlzYWJsZSIsIFsibmFtZT0lcyIgJSBuYW1lXSkKCgpkZWYgX29wZW5fd2l0aF90aW1lb3V0KHBhdGgsIG1vZGUsIHRpbWVvdXQgPSAzKToKICAgICIiIk9wZW4gYSBmaWxlLCB3YWl0aW5nIGlmIGl0IGRvZXNuJ3QgZXhpc3QgeWV0LiIiIgogICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHRpbWVvdXQKICAgIHdoaWxlIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKToKICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCiAgICAgICAgaWYgdGltZS50aW1lKCkgPj0gZGVhZGxpbmU6CiAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVGltZW91dCB3YWl0aW5nIGZvciBmaWxlICVyIiAlIHBhdGgpCgogICAgcmV0dXJuIG9wZW4ocGF0aCwgbW9kZSkKCgpjbGFzcyBQaXBlQ29udHJvbCAoX0NvbnRyb2xCYXNlKToKICAgICIiIkNvbnRyb2wgcGlwZSB1c2VkIHRvIGNvbnRyb2wgYSBsaWJmaXUtaW5zdHJ1bWVudGVkIHByb2Nlc3MuIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aF9wcmVmaXgpOgogICAgICAgICIiIkNvbnN0cnVjdG9yLgoKICAgICAgICBBcmdzOgogICAgICAgICAgICBwYXRoOiBQYXRoIHRvIHRoZSBjb250cm9sIHBpcGUuCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5wYXRoX2luID0gcGF0aF9wcmVmaXggKyAiLmluIgogICAgICAgIHNlbGYucGF0aF9vdXQgPSBwYXRoX3ByZWZpeCArICIub3V0IgoKICAgIGRlZiBfb3Blbl9waXBlcyhzZWxmKToKICAgICAgICAjIE9wZW4gdGhlIGZpbGVzLCBidXQgd2FpdCBpZiB0aGV5IGFyZSBub3QgdGhlcmUsIGFzIHRoZSBjaGlsZCBwcm9jZXNzCiAgICAgICAgIyBtYXkgbm90IGhhdmUgY3JlYXRlZCB0aGVtIHlldC4KICAgICAgICBmZF9pbiA9IF9vcGVuX3dpdGhfdGltZW91dChzZWxmLnBhdGhfaW4sICJhIikKICAgICAgICBmZF9vdXQgPSBfb3Blbl93aXRoX3RpbWVvdXQoc2VsZi5wYXRoX291dCwgInIiKQogICAgICAgIHJldHVybiBmZF9pbiwgZmRfb3V0CgogICAgZGVmIHJ1bl9yYXdfY21kKHNlbGYsIGNtZCwgYXJncyk6CiAgICAgICAgIiIiU2VuZCBhIHJhdyBjb21tYW5kIG92ZXIgdGhlIHBpcGUuIiIiCiAgICAgICAgIyBOb3RlIHdlIG9wZW4gdGhlIHBpcGUgZWFjaCB0aW1lIGZvciBzaW1wbGljaXR5LCBhbmQgYWxzbyB0byBzaW1wbGlmeQo8fGZpbV9ob2xlfD4KICAgICAgICBmZF9pbi53cml0ZShzKQogICAgICAgIGZkX2luLmZsdXNoKCkKCiAgICAgICAgciA9IGludChmZF9vdXQucmVhZGxpbmUoKSkKICAgICAgICBpZiByICE9IDA6CiAgICAgICAgICAgIHJhaXNlIENvbW1hbmRFcnJvcgoKCmNsYXNzIEVudmlyb25tZW50Q29udHJvbCAoX0NvbnRyb2xCYXNlKToKICAgICIiIlByZS1leGVjdXRpb24gZW52aXJvbm1lbnQgY29udHJvbC4iIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmVudiA9ICIiCgogICAgZGVmIHJ1bl9yYXdfY21kKHNlbGYsIGNtZCwgYXJncyk6CiAgICAgICAgIiIiQWRkIGEgcmF3IGNvbW1hbmQgdG8gdGhlIGVudmlyb25tZW50LiIiIgogICAgICAgIHNlbGYuZW52ICs9ICIlcyAlc1xuIiAlIChjbWQsICcsJy5qb2luKGFyZ3MpKQoKCmNsYXNzIFN1YnByb2Nlc3MgKF9Db250cm9sQmFzZSk6CiAgICAiIiJXcmFwcGVyIGZvciBzdWJwcm9jZXNzLlBvcGVuLCBidXQgd2l0aG91dCBpbW1lZGlhdGUgZXhlY3V0aW9uLgoKICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSB3cmFwcGVyIGZvciBzdWJwcm9jZXNzLlBvcGVuLCB3aGljaCBjYW4gYmUgdXNlZCB0bwogICAgcnVuIG90aGVyIHByb2Nlc3NlcyB1bmRlciBsaWJmaXUuCgogICAgSG93ZXZlciwgdGhlIHByb2Nlc3NlcyBkb24ndCBzdGFydCBzdHJhaWdodCBhd2F5LCBhbGxvd2luZyB0aGUgdXNlciB0bwogICAgcHJlLWNvbmZpZ3VyZSBzb21lIGZhaWx1cmUgcG9pbnRzLgoKICAgIFRoZSBwcm9jZXNzIGNhbiB0aGVuIGJlIHN0YXJ0ZWQgd2l0aCB0aGUgc3RhcnQoKSBtZXRob2QuCgogICAgQWZ0ZXIgdGhlIHByb2Nlc3MgaGFzIGJlZW4gc3RhcnRlZCwgdGhlIGZhaWx1cmUgcG9pbnRzIGNhbiBiZSBjb250cm9sbGVkCiAgICByZW1vdGVseSB2aWEgdGhlIHNhbWUgZnVuY3Rpb25zLgoKICAgIFByb2Nlc3NlcyBjYW4gYmUgc3RhcnRlZCBvbmx5IG9uY2UuCiAgICBOb3RlIHRoYXQgdXNpbmcgc2hlbGw9VHJ1ZSBpcyBub3QgcmVjb21tZW5kZWQsIGFzIGl0IG1ha2VzIHRoZSBwaWQgb2YgdGhlCiAgICBjb250cm9sbGVkIHByb2Nlc3MgdG8gYmUgdW5rbm93bi4KICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgc2VsZi5hcmdzID0gYXJncwogICAgICAgIHNlbGYua3dhcmdzID0ga3dhcmdzCgogICAgICAgICMgTm90ZSB0aGlzIHJlbW92ZXMgZml1X2VuYWJsZV9wb3NpeCBmcm9tIGt3YXJncyBpZiBpdCdzIHRoZXJlLCB0aGF0CiAgICAgICAgIyB3YXkga3dhcmdzIHJlbWFpbnMgImNsZWFuIiBmb3IgcGFzc2luZyB0byBQb3Blbi4KICAgICAgICBzZWxmLmZpdV9lbmFibGVfcG9zaXggPSBrd2FyZ3MucG9wKCdmaXVfZW5hYmxlX3Bvc2l4JywgRmFsc2UpCgogICAgICAgIHNlbGYuX3Byb2MgPSBOb25lCiAgICAgICAgc2VsZi50bXBkaXIgPSBOb25lCgogICAgICAgICMgSW5pdGlhbGx5LCB0aGlzIGlzIGFuIEVudmlyb25tZW50Q29udHJvbCBzbyB3ZSBjYW4gZG8gcHJlcGFyYXRpb247CiAgICAgICAgIyBvbmNlIHdlIHN0YXJ0IHRoZSBjb21tYW5kLCB3ZSB3aWxsIGNoYW5nZSB0aGlzIHRvIGJlIFBpcGVDb250cm9sLgogICAgICAgIHNlbGYuY3RybCA9IEVudmlyb25tZW50Q29udHJvbCgpCgogICAgZGVmIHJ1bl9yYXdfY21kKHNlbGYsIGNtZCwgYXJncyk6CiAgICAgICAgc2VsZi5jdHJsLnJ1bl9yYXdfY21kKGNtZCwgYXJncykKCiAgICBkZWYgc3RhcnQoc2VsZik6CiAgICAgICAgc2VsZi50bXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeCA9ICdmaXVfY3RybC0nKQoKICAgICAgICBlbnYgPSBvcy5lbnZpcm9uCiAgICAgICAgZW52WydMRF9QUkVMT0FEJ10gPSBlbnYuZ2V0KCdMRF9QUkVMT0FEJywgJycpCiAgICAgICAgaWYgc2VsZi5maXVfZW5hYmxlX3Bvc2l4OgogICAgICAgICAgICBlbnZbJ0xEX1BSRUxPQUQnXSArPSAnICcgKyBQTElCUEFUSCArICcvZml1X3Bvc2l4X3ByZWxvYWQuc28nCiAgICAgICAgZW52WydMRF9QUkVMT0FEJ10gKz0gJyAnICsgUExJQlBBVEggKyAnL2ZpdV9ydW5fcHJlbG9hZC5zbyAnCiAgICAgICAgZW52WydGSVVfQ1RSTF9GSUZPJ10gPSBzZWxmLnRtcGRpciArICcvY3RybC1maWZvJwogICAgICAgIGVudlsnRklVX0VOQUJMRSddID0gc2VsZi5jdHJsLmVudgoKICAgICAgICBzZWxmLl9wcm9jID0gc3VicHJvY2Vzcy5Qb3Blbigqc2VsZi5hcmdzLCAqKnNlbGYua3dhcmdzKQoKICAgICAgICBmaWZvX3BhdGggPSAiJXMtJWQiICUgKGVudlsnRklVX0NUUkxfRklGTyddLCBzZWxmLl9wcm9jLnBpZCkKICAgICAgICBzZWxmLmN0cmwgPSBQaXBlQ29udHJvbChmaWZvX3BhdGgpCgogICAgICAgIHJldHVybiBzZWxmLl9wcm9jCgogICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkuCiAgICAgICAgIyBUaGUgIidmaXVfY3RybC0nIGluIHNlbGYudG1wZGlyIiBjaGVjayBpcyBqdXN0IGEgc2FmZWd1YXJkLgogICAgICAgIGlmIHNlbGYudG1wZGlyIGFuZCAnZml1X2N0cmwtJyBpbiBzZWxmLnRtcGRpcjoKICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnRtcGRpcikKCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIyBleHRlcm5hbCBpbnRlcnZlbnRpb24gdGhhdCBjYW4gYmUgdXNlZCBmb3IgZGVidWdnaW5nLgogICAgICAgIGZkX2luLCBmZF9vdXQgPSBzZWxmLl9vcGVuX3BpcGVzKCkKCiAgICAgICAgcyA9ICIlcyAlc1xuIiAlIChjbWQsICcsJy5qb2luKGFyZ3MpKQo8fGZpbV9lbmR8Pg=="]
["8228e08b99ff0a18661ef30709e8532b666451db-4","8228e08b99ff0a18661ef30709e8532b666451db","PHxmaW1fcHJlZml4fD4KIiIiCmxpYmZpdSBweXRob24gbW9kdWxlIGZvciByZW1vdGUgY29udHJvbAoKVGhpcyBtb2R1bGUgcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8gcnVuIGEgY29tbWFuZCB3aXRoIGxpYmZpdSBlbmFibGVkLCBhbmQKY29udHJvbGxpbmcgdGhlIGZhaWx1cmUgcG9pbnRzIGR5bmFtaWNhbGx5LgoKSXQgcHJvdmlkZXMgc2ltaWxhciBmdW5jdGlvbmFsaXR5IHRvIHRoZSBmaXUtY3RybCBhbmQgZml1LXJ1biBzaGVsbCB0b29scywgYnV0CmlzIHVzZWZ1bCBmb3IgcHJvZ3JhbW1lZCB0ZXN0cy4KCk5vdGUgaXQgYXNzdW1lcyB0aGUgcHJlbG9hZGluZyBsaWJyYXJpZXMgYXJlIGluc3RhbGxlZCBpbiBAQFBMSUJQQVRIQEAuCiIiIgoKaW1wb3J0IG9zCmltcG9ydCB0ZW1wZmlsZQppbXBvcnQgc3VicHJvY2VzcwppbXBvcnQgc2h1dGlsCmltcG9ydCB0aW1lCgoKIyBEZWZhdWx0IHBhdGggdG8gbG9vayBmb3IgcHJlbG9hZGVyIGxpYnJhcmllcy4KUExJQlBBVEggPSAiQEBQTElCUEFUSEBAIgoKCmNsYXNzIENvbW1hbmRFcnJvciAoUnVudGltZUVycm9yKToKICAgICIiIlRoZXJlIHdhcyBhbiBlcnJvciBydW5uaW5nIHRoZSBjb21tYW5kLiIiIgogICAgcGFzcwoKCmNsYXNzIEZsYWdzOgoJIiIiQ29udGFpbnMgdGhlIHZhbGlkIGZsYWcgY29uc3RhbnRzLgoKCU9ORVRJTUU6IFRoaXMgcG9pbnQgb2YgZmFpbHVyZSBpcyBkaXNhYmxlZCBpbW1lZGlhdGVseSBhZnRlciBmYWlsaW5nIG9uY2UuCgkiIiIKCU9ORVRJTUUgPSAib25ldGltZSIKCgpjbGFzcyBfQ29udHJvbEJhc2UgKG9iamVjdCk6CiAgICAiIiJCYXNlIGNsYXNzIGZvciByZW1vdGUgY29udHJvbCBvYmplY3RzLiIiIgoKICAgIGRlZiBydW5fcmF3X2NtZChzZWxmLCBjbWQsIGFyZ3MpOgogICAgICAgICIiIlJ1bnMgYSBuZXcgcmF3IGNvbW1hbmQuIFRvIGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMiIiIKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogICAgZGVmIF9iYXNpY19hcmdzKHNlbGYsIG5hbWUsIGZhaWxudW0sIGZhaWxpbmZvLCBmbGFncyk6CiAgICAgICAgIiIiQ29udmVydHMgdGhlIGNvbW1vbiBhcmd1bWVudHMgdG8gYW4gYXJncyBsaXN0IGZvciBydW5fcmF3X2NtZCgpLiIiIgogICAgICAgIGFyZ3MgPSBbIm5hbWU9JXMiICUgbmFtZV0KICAgICAgICBpZiBmYWlsbnVtOgogICAgICAgICAgICBhcmdzLmFwcGVuZCgiZmFpbG51bT0lcyIgJSBmYWlsbnVtKQogICAgICAgIGlmIGZhaWxpbmZvOgogICAgICAgICAgICBhcmdzLmFwcGVuZCgiZmFpbGluZm89JXMiICUgZmFpbGluZm8pCiAgICAgICAgaWYgZmxhZ3M6CiAgICAgICAgICAgIGFyZ3MuZXh0ZW5kKGZsYWdzKQoKICAgICAgICByZXR1cm4gYXJncwoKICAgIGRlZiBlbmFibGUoc2VsZiwgbmFtZSwgZmFpbG51bSA9IDEsIGZhaWxpbmZvID0gTm9uZSwgZmxhZ3MgPSAoKSk6CiAgICAgICAgIiIiRW5hYmxlcyB0aGUgZ2l2ZW4gcG9pbnQgb2YgZmFpbHVyZS4iIiIKICAgICAgICBhcmdzID0gc2VsZi5fYmFzaWNfYXJncyhuYW1lLCBmYWlsbnVtLCBmYWlsaW5mbywgZmxhZ3MpCiAgICAgICAgc2VsZi5ydW5fcmF3X2NtZCgiZW5hYmxlIiwgYXJncykKCiAgICBkZWYgZW5hYmxlX3JhbmRvbShzZWxmLCBuYW1lLCBwcm9iYWJpbGl0eSwgZmFpbG51bSA9IDEsCiAgICAgICAgICAgIGZhaWxpbmZvID0gTm9uZSwgZmxhZ3MgPSAoKSk6CiAgICAgICAgIkVuYWJsZXMgdGhlIGdpdmVuIHBvaW50IG9mIGZhaWx1cmUsIHdpdGggdGhlIGdpdmVuIHByb2JhYmlsaXR5LiIKICAgICAgICBhcmdzID0gc2VsZi5fYmFzaWNfYXJncyhuYW1lLCBmYWlsbnVtLCBmYWlsaW5mbywgZmxhZ3MpCiAgICAgICAgYXJncy5hcHBlbmQoInByb2JhYmlsaXR5PSVmIiAlIHByb2JhYmlsaXR5KQogICAgICAgIHNlbGYucnVuX3Jhd19jbWQoImVuYWJsZV9yYW5kb20iLCBhcmdzKQoKICAgIGRlZiBlbmFibGVfc3RhY2tfYnlfbmFtZShzZWxmLCBuYW1lLCBmdW5jX25hbWUsCiAgICAgICAgICAgIGZhaWxudW0gPSAxLCBmYWlsaW5mbyA9IE5vbmUsIGZsYWdzID0gKCksCiAgICAgICAgICAgIHBvc19pbl9zdGFjayA9IC0xKToKICAgICAgICAiIiJFbmFibGVzIHRoZSBnaXZlbiBwb2ludCBvZiBmYWlsdXJlLCBidXQgb25seSBpZiAnZnVuY19uYW1lJyBpcyBpbgogICAgICAgIHRoZSBzdGFjay4KCiAgICAgICAgJ2Z1bmNfbmFtZScgaXMgYmUgdGhlIG5hbWUgb2YgdGhlIEMgZnVuY3Rpb24gdG8gbG9vayBmb3IuCiAgICAgICAgIiIiCiAgICAgICAgYXJncyA9IHNlbGYuX2Jhc2ljX2FyZ3MobmFtZSwgZmFpbG51bSwgZmFpbGluZm8sIGZsYWdzKQogICAgICAgIGFyZ3MuYXBwZW5kKCJmdW5jX25hbWU9JXMiICUgZnVuY19uYW1lKQogICAgICAgIGlmIHBvc19pbl9zdGFjayA+PSAwOgogICAgICAgICAgICBhcmdzLmFwcGVuZCgicG9zX2luX3N0YWNrPSVkIiAlIHBvc19pbl9zdGFjaykKICAgICAgICBzZWxmLnJ1bl9yYXdfY21kKCJlbmFibGVfc3RhY2tfYnlfbmFtZSIsIGFyZ3MpCgogICAgZGVmIGRpc2FibGUoc2VsZiwgbmFtZSk6CiAgICAgICAgIiIiRGlzYWJsZXMgdGhlIGdpdmVuIHBvaW50IG9mIGZhaWx1cmUuIiIiCiAgICAgICAgc2VsZi5ydW5fcmF3X2NtZCgiZGlzYWJsZSIsIFsibmFtZT0lcyIgJSBuYW1lXSkKCgpkZWYgX29wZW5fd2l0aF90aW1lb3V0KHBhdGgsIG1vZGUsIHRpbWVvdXQgPSAzKToKICAgICIiIk9wZW4gYSBmaWxlLCB3YWl0aW5nIGlmIGl0IGRvZXNuJ3QgZXhpc3QgeWV0LiIiIgogICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHRpbWVvdXQKICAgIHdoaWxlIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKToKICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCiAgICAgICAgaWYgdGltZS50aW1lKCkgPj0gZGVhZGxpbmU6CiAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVGltZW91dCB3YWl0aW5nIGZvciBmaWxlICVyIiAlIHBhdGgpCgogICAgcmV0dXJuIG9wZW4ocGF0aCwgbW9kZSkKCgpjbGFzcyBQaXBlQ29udHJvbCAoX0NvbnRyb2xCYXNlKToKICAgICIiIkNvbnRyb2wgcGlwZSB1c2VkIHRvIGNvbnRyb2wgYSBsaWJmaXUtaW5zdHJ1bWVudGVkIHByb2Nlc3MuIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aF9wcmVmaXgpOgogICAgICAgICIiIkNvbnN0cnVjdG9yLgoKICAgICAgICBBcmdzOgogICAgICAgICAgICBwYXRoOiBQYXRoIHRvIHRoZSBjb250cm9sIHBpcGUuCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAiIiIKICAgICAgICBzZWxmLnBhdGhfaW4gPSBwYXRoX3ByZWZpeCArICIuaW4iCiAgICAgICAgc2VsZi5wYXRoX291dCA9IHBhdGhfcHJlZml4ICsgIi5vdXQiCgo8fGZpbV9lbmR8Pg=="]
["41b5860df476cbbaff9a2c348a6969315fb4be1e-1","41b5860df476cbbaff9a2c348a6969315fb4be1e","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMTggVWJlciBUZWNobm9sb2dpZXMsIEluYy4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgoKaW1wb3J0IG1vY2sKZnJvbSB0b3JuYWRvIGltcG9ydCBpb2xvb3AKCmZyb20gamFlZ2VyX2NsaWVudCBpbXBvcnQgc2VuZGVycwpmcm9tIGphZWdlcl9jbGllbnQubG9jYWxfYWdlbnRfbmV0IGltcG9ydCBMb2NhbEFnZW50U2VuZGVyCmZyb20gamFlZ2VyX2NsaWVudC50aHJpZnRfZ2VuLmFnZW50IGltcG9ydCBBZ2VudApmcm9tIHRocmlmdC5wcm90b2NvbCBpbXBvcnQgVENvbXBhY3RQcm90b2NvbAoKCmRlZiB0ZXN0X2Jhc2Vfc2VuZGVyX2NyZWF0ZV9pb19sb29wX2lmX25vdF9wcm92aWRlZCgpOgoKICAgIHNlbmRlciA9IHNlbmRlcnMuU2VuZGVyKGhvc3Q9J21vY2snLCBwb3J0PTQyNDIpCjx8ZmltX2hvbGV8PgpkZWYgdGVzdF91ZHBfc2VuZGVyX2luc3RhbnRpYXRlX3RocmlmdF9hZ2VudCgpOgoKICAgIHNlbmRlciA9IHNlbmRlcnMuVURQU2VuZGVyKGhvc3Q9J21vY2snLCBwb3J0PTQyNDIpCgogICAgYXNzZXJ0IHNlbmRlci5hZ2VudCBpcyBub3QgTm9uZQogICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2VuZGVyLmFnZW50LCBBZ2VudC5DbGllbnQpCgoKZGVmIHRlc3RfdWRwX3NlbmRlcl9pbnRhbnRpYXRlX2xvY2FsX2FnZW50X2NoYW5uZWwoKToKCiAgICBzZW5kZXIgPSBzZW5kZXJzLlVEUFNlbmRlcihob3N0PSdtb2NrJywgcG9ydD00MjQyKQoKICAgIGFzc2VydCBzZW5kZXIuY2hhbm5lbCBpcyBub3QgTm9uZQogICAgYXNzZXJ0IHNlbmRlci5jaGFubmVsLmlvX2xvb3AgPT0gc2VuZGVyLmlvX2xvb3AKICAgIGFzc2VydCBpc2luc3RhbmNlKHNlbmRlci5jaGFubmVsLCBMb2NhbEFnZW50U2VuZGVyKQoKZGVmIHRlc3RfdWRwX3NlbmRlcl9jYWxsc19hZ2VudF9lbWl0QmF0Y2hfb25fc2VuZGluZygpOgoKICAgIHRlc3RfZGF0YSA9IHsnZm9vJzogJ2Jhcid9CiAgICBzZW5kZXIgPSBzZW5kZXJzLlVEUFNlbmRlcihob3N0PSdtb2NrJywgcG9ydD00MjQyKQogICAgc2VuZGVyLmFnZW50ID0gbW9jay5Nb2NrKCkKCiAgICBzZW5kZXIuc2VuZCh0ZXN0X2RhdGEpCgogICAgc2VuZGVyLmFnZW50LmVtaXRCYXRjaC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCh0ZXN0X2RhdGEpCgoKZGVmIHRlc3RfdWRwX3NlbmRlcl9pbXBsZW1lbnRzX3RocmlmdF9wcm90b2NvbF9mYWN0b3J5KCk6CgogICAgc2VuZGVyID0gc2VuZGVycy5VRFBTZW5kZXIoaG9zdD0nbW9jaycsIHBvcnQ9NDI0MikKCiAgICBhc3NlcnQgY2FsbGFibGUoc2VuZGVyLmdldFByb3RvY29sKQogICAgcHJvdG9jb2wgPSBzZW5kZXIuZ2V0UHJvdG9jb2wobW9jay5NYWdpY01vY2soKSkKICAgIGFzc2VydCBpc2luc3RhbmNlKHByb3RvY29sLCBUQ29tcGFjdFByb3RvY29sLlRDb21wYWN0UHJvdG9jb2wpCjx8ZmltX3N1ZmZpeHw+CgogICAgYXNzZXJ0IHNlbmRlci5pb19sb29wIGlzIG5vdCBOb25lCiAgICBhc3NlcnQgaXNpbnN0YW5jZShzZW5kZXIuaW9fbG9vcCwgaW9sb29wLklPTG9vcCkKCjx8ZmltX2VuZHw+"]
["41b5860df476cbbaff9a2c348a6969315fb4be1e-2","41b5860df476cbbaff9a2c348a6969315fb4be1e","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMTggVWJlciBUZWNobm9sb2dpZXMsIEluYy4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgoKaW1wb3J0IG1vY2sKZnJvbSB0b3JuYWRvIGltcG9ydCBpb2xvb3AKCmZyb20gamFlZ2VyX2NsaWVudCBpbXBvcnQgc2VuZGVycwpmcm9tIGphZWdlcl9jbGllbnQubG9jYWxfYWdlbnRfbmV0IGltcG9ydCBMb2NhbEFnZW50U2VuZGVyCmZyb20gamFlZ2VyX2NsaWVudC50aHJpZnRfZ2VuLmFnZW50IGltcG9ydCBBZ2VudApmcm9tIHRocmlmdC5wcm90b2NvbCBpbXBvcnQgVENvbXBhY3RQcm90b2NvbAoKCmRlZiB0ZXN0X2Jhc2Vfc2VuZGVyX2NyZWF0ZV9pb19sb29wX2lmX25vdF9wcm92aWRlZCgpOgoKICAgIHNlbmRlciA9IHNlbmRlcnMuU2VuZGVyKGhvc3Q9J21vY2snLCBwb3J0PTQyNDIpCgogICAgYXNzZXJ0IHNlbmRlci5pb19sb29wIGlzIG5vdCBOb25lCiAgICBhc3NlcnQgaXNpbnN0YW5jZShzZW5kZXIuaW9fbG9vcCwgaW9sb29wLklPTG9vcCkKCmRlZiB0ZXN0X3VkcF9zZW5kZXJfaW5zdGFudGlhdGVfdGhyaWZ0X2FnZW50KCk6CgogICAgc2VuZGVyID0gc2VuZGVycy5VRFBTZW5kZXIoaG9zdD0nbW9jaycsIHBvcnQ9NDI0MikKCiAgICBhc3NlcnQgc2VuZGVyLmFnZW50IGlzIG5vdCBOb25lCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGFzc2VydCBpc2luc3RhbmNlKHNlbmRlci5hZ2VudCwgQWdlbnQuQ2xpZW50KQoKCjx8ZmltX2VuZHw+"]
["41b5860df476cbbaff9a2c348a6969315fb4be1e-3","41b5860df476cbbaff9a2c348a6969315fb4be1e","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMTggVWJlciBUZWNobm9sb2dpZXMsIEluYy4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgoKaW1wb3J0IG1vY2sKZnJvbSB0b3JuYWRvIGltcG9ydCBpb2xvb3AKCmZyb20gamFlZ2VyX2NsaWVudCBpbXBvcnQgc2VuZGVycwpmcm9tIGphZWdlcl9jbGllbnQubG9jYWxfYWdlbnRfbmV0IGltcG9ydCBMb2NhbEFnZW50U2VuZGVyCmZyb20gamFlZ2VyX2NsaWVudC50aHJpZnRfZ2VuLmFnZW50IGltcG9ydCBBZ2VudApmcm9tIHRocmlmdC5wcm90b2NvbCBpbXBvcnQgVENvbXBhY3RQcm90b2NvbAoKCmRlZiB0ZXN0X2Jhc2Vfc2VuZGVyX2NyZWF0ZV9pb19sb29wX2lmX25vdF9wcm92aWRlZCgpOgoKICAgIHNlbmRlciA9IHNlbmRlcnMuU2VuZGVyKGhvc3Q9J21vY2snLCBwb3J0PTQyNDIpCgogICAgYXNzZXJ0IHNlbmRlci5pb19sb29wIGlzIG5vdCBOb25lCiAgICBhc3NlcnQgaXNpbnN0YW5jZShzZW5kZXIuaW9fbG9vcCwgaW9sb29wLklPTG9vcCkKCmRlZiB0ZXN0X3VkcF9zZW5kZXJfaW5zdGFudGlhdGVfdGhyaWZ0X2FnZW50KCk6CgogICAgc2VuZGVyID0gc2VuZGVycy5VRFBTZW5kZXIoaG9zdD0nbW9jaycsIHBvcnQ9NDI0MikKCiAgICBhc3NlcnQgc2VuZGVyLmFnZW50IGlzIG5vdCBOb25lCiAgICBhc3NlcnQgaXNpbnN0YW5jZShzZW5kZXIuYWdlbnQsIEFnZW50LkNsaWVudCkKCgpkZWYgdGVzdF91ZHBfc2VuZGVyX2ludGFudGlhdGVfbG9jYWxfYWdlbnRfY2hhbm5lbCgpOgoKICAgIHNlbmRlciA9IHNlbmRlcnMuVURQU2VuZGVyKGhvc3Q9J21vY2snLCBwb3J0PTQyNDIpCgogICAgYXNzZXJ0IHNlbmRlci5jaGFubmVsIGlzIG5vdCBOb25lCiAgICBhc3NlcnQgc2VuZGVyLmNoYW5uZWwuaW9fbG9vcCA9PSBzZW5kZXIuaW9fbG9vcAogICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2VuZGVyLmNoYW5uZWwsIExvY2FsQWdlbnRTZW5kZXIpCgpkZWYgdGVzdF91ZHBfc2VuZGVyX2NhbGxzX2FnZW50X2VtaXRCYXRjaF9vbl9zZW5kaW5nKCk6CgogICAgdGVzdF9kYXRhID0geydmb28nOiAnYmFyJ30KICAgIHNlbmRlciA9IHNlbmRlcnMuVURQU2VuZGVyKGhvc3Q9J21vY2snLCBwb3J0PTQyNDIpCiAgICBzZW5kZXIuYWdlbnQgPSBtb2NrLk1vY2soKQoKICAgIHNlbmRlci5zZW5kKHRlc3RfZGF0YSkKPHxmaW1faG9sZXw+CmRlZiB0ZXN0X3VkcF9zZW5kZXJfaW1wbGVtZW50c190aHJpZnRfcHJvdG9jb2xfZmFjdG9yeSgpOgoKICAgIHNlbmRlciA9IHNlbmRlcnMuVURQU2VuZGVyKGhvc3Q9J21vY2snLCBwb3J0PTQyNDIpCgogICAgYXNzZXJ0IGNhbGxhYmxlKHNlbmRlci5nZXRQcm90b2NvbCkKICAgIHByb3RvY29sID0gc2VuZGVyLmdldFByb3RvY29sKG1vY2suTWFnaWNNb2NrKCkpCiAgICBhc3NlcnQgaXNpbnN0YW5jZShwcm90b2NvbCwgVENvbXBhY3RQcm90b2NvbC5UQ29tcGFjdFByb3RvY29sKQo8fGZpbV9zdWZmaXh8PgoKICAgIHNlbmRlci5hZ2VudC5lbWl0QmF0Y2guYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgodGVzdF9kYXRhKQoKCjx8ZmltX2VuZHw+"]
["e741d9c9f3d1d854c89dcb7a784ea4e56b6a92eb-1","e741d9c9f3d1d854c89dcb7a784ea4e56b6a92eb","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBrZ19yZXNvdXJjZXMKCgpfX3ZlcnNpb25fXyA9IHBrZ19yZXNvdXJjZXMuZ2V0X2Rpc3RyaWJ1dGlvbignY3Jvc3NjYXAnKS52ZXJzaW9uCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpfX2FsbF9fID0gWydfX3ZlcnNpb25fXyddCjx8ZmltX2VuZHw+"]
["e741d9c9f3d1d854c89dcb7a784ea4e56b6a92eb-2","e741d9c9f3d1d854c89dcb7a784ea4e56b6a92eb","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBrZ19yZXNvdXJjZXMKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cl9fdmVyc2lvbl9fID0gcGtnX3Jlc291cmNlcy5nZXRfZGlzdHJpYnV0aW9uKCdjcm9zc2NhcCcpLnZlcnNpb24KCgpfX2FsbF9fID0gWydfX3ZlcnNpb25fXyddCjx8ZmltX2VuZHw+"]
["e741d9c9f3d1d854c89dcb7a784ea4e56b6a92eb-3","e741d9c9f3d1d854c89dcb7a784ea4e56b6a92eb","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBrZ19yZXNvdXJjZXMKCgpfX3ZlcnNpb25fXyA9IHBrZ19yZXNvdXJjZXMuZ2V0X2Rpc3RyaWJ1dGlvbignY3Jvc3NjYXAnKS52ZXJzaW9uCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpfX2FsbF9fID0gWydfX3ZlcnNpb25fXyddCjx8ZmltX2VuZHw+"]
["c1d0a2e1c44e2ff2e2fb31641d7089878226bd09-1","c1d0a2e1c44e2ff2e2fb31641d7089878226bd09","PHxmaW1fcHJlZml4fD4KZGVmIHJhZCh4KToKCXJlcyA9IDEKCWZvciBpIGluIHJhbmdlKDIsIHgpOgoJCWlmIHggJSBpID09IDA6CgkJCXJlcyAqPSBpCgkJd2hpbGUgeCAlIGkgPT0gMDoKCQkJeCAvLz0gaQoJCWlmIGkgKiBpID4geDoKCQkJYnJlYWsKCWlmIHggPiAxOgoJCXJlcyAqPSB4Cjx8ZmltX2hvbGV8PgpyYWRzID0gW10KCmZvciBpIGluIHJhbmdlKDEsIDEwMDAwMSk6CiMJcHJpbnQoIiVzICVzIiAlIChpLCByYWQoaSkpKQoJcmFkcy5hcHBlbmQocmFkKGkpKQoJCnJhZHNwYWlyID0gemlwKHJhZHMsIFtpIGZvciBpIGluIHJhbmdlKDEsIDEwMDAwMSldKQoKc29ydGVkX3JhZHNwYWlyID0gc29ydGVkKHJhZHNwYWlyKQoKcHJpbnQoc29ydGVkX3JhZHNwYWlyWzk5OTldKQo8fGZpbV9zdWZmaXh8PgoJcmV0dXJuIHJlcwoKPHxmaW1fZW5kfD4="]
["e7a60f4f77ee358ce641bdd42907c22b609f5942-1","e7a60f4f77ee358ce641bdd42907c22b609f5942","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5CmZyb20gdHlwaW5nIGltcG9ydCBBbnksIFVuaW9uCgojIE51bXB5IGR0eXBlcyBmb3IgaGV0ZXJvZ2Vub3VzIGFycmF5cwpOVU1QWV9JTlQgPSAiaTgiCk5VTVBZX0ZMT0FUID0gImY4IgpOVU1QWV9VTkkgPSAiVTQiCgojIFJvdW5kaW5nIHF1YW50aXRpZXMgZm9yIGhhc2hpbmcKR0VPTUVUUllfTk9JU0UgPSA4ClZFTE9DSVRZX05PSVNFID0gOApGT1JDRV9OT0lTRSA9IDgKTUFTU19OT0lTRSA9IDYKQ0hBUkdFX05PSVNFID0gNAoKCmRlZiBmbG9hdF9wcmVwKGFycmF5OiBudW1weS5uZGFycmF5LCBhcm91bmQ6IGludCkgLT4gbnVtcHkubmRhcnJheToKICAgICIiIgogICAgUm91bmRzIGZsb2F0cyB0byBhIGNvbW1vbiB2YWx1ZSBhbmQgYnVpbGQgcG9zaXRpdmUgemVyb3MgdG8gcHJldmVudCBoYXNoIGNvbmZsaWN0cy4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgIiIiCiAgICBpZiBpc2luc3RhbmNlKGFycmF5LCAobGlzdCwgbnVtcHkubmRhcnJheSkpOgogICAgICAgICMgUm91bmQgYXJyYXkKICAgICAgICBhcnJheSA9IG51bXB5LmFyb3VuZChhcnJheSwgYXJvdW5kKQo8fGZpbV9lbmR8Pg=="]
["e7a60f4f77ee358ce641bdd42907c22b609f5942-2","e7a60f4f77ee358ce641bdd42907c22b609f5942","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5CmZyb20gdHlwaW5nIGltcG9ydCBBbnksIFVuaW9uCgojIE51bXB5IGR0eXBlcyBmb3IgaGV0ZXJvZ2Vub3VzIGFycmF5cwpOVU1QWV9JTlQgPSAiaTgiCk5VTVBZX0ZMT0FUID0gImY4IgpOVU1QWV9VTkkgPSAiVTQiCgojIFJvdW5kaW5nIHF1YW50aXRpZXMgZm9yIGhhc2hpbmcKR0VPTUVUUllfTk9JU0UgPSA4ClZFTE9DSVRZX05PSVNFID0gOApGT1JDRV9OT0lTRSA9IDgKTUFTU19OT0lTRSA9IDYKQ0hBUkdFX05PSVNFID0gNAoKCmRlZiBmbG9hdF9wcmVwKGFycmF5OiBudW1weS5uZGFycmF5LCBhcm91bmQ6IGludCkgLT4gbnVtcHkubmRhcnJheToKICAgICIiIgogICAgUm91bmRzIGZsb2F0cyB0byBhIGNvbW1vbiB2YWx1ZSBhbmQgYnVpbGQgcG9zaXRpdmUgemVyb3MgdG8gcHJldmVudCBoYXNoIGNvbmZsaWN0cy4KICAgICIiIgogICAgaWYgaXNpbnN0YW5jZShhcnJheSwgKGxpc3QsIG51bXB5Lm5kYXJyYXkpKToKICAgICAgICAjIFJvdW5kIGFycmF5CiAgICAgICAgYXJyYXkgPSBudW1weS5hcm91bmQoYXJyYXksIGFyb3VuZCkKICAgICAgICAjIEZsaXAgemVyb3MKICAgICAgICBhcnJheVtudW1weS5hYnMoYXJyYXkpIDwgNSAqKiAoLShhcm91bmQgKyAxKSldID0gMAoKICAgIGVsaWYgaXNpbnN0YW5jZShhcnJheSwgKGZsb2F0LCBpbnQpKToKICAgICAgICBhcnJheSA9IHJvdW5kKGFycmF5LCBhcm91bmQpCiAgICAgICAgaWYgYXJyYXkgPT0gLTAuMDoKICAgICAgICAgICAgYXJyYXkgPSAwLjAKICAgIGVsc2U6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJUeXBlICd7fScgbm90IHJlY29nbml6ZWQiLmZvcm1hdCh0eXBlKGFycmF5KS5fX25hbWVfXykpCgogICAgcmV0dXJuIGFycmF5CgoKZGVmIGdldF9kdHlwZShkYXRhOiBBbnkpIC0+IFVuaW9uW3N0ciwgTm9uZV06CiAgICAiIiJSZXR1cm5zIGEgbnVtcHkgZGF0YSB0eXBlIGZvciBhbiBvYmplY3QuIEludGVnZXJzIGFuZCBmbG9hdHMgYXJlIHJlcHJlc2VudGVkIGluIDggYnl0ZXMgKDY0IGJpdHMpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHByZWNpc2lvbiB3aGlsZSBzdHJpbmdzIGluIDQgY2hhcmFjdGVycyAoMTI4IGJpdHMpIFVURi04IHVuaWNvZGUuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQo8fGZpbV9lbmR8Pg=="]
["da63a5bd97c3deafaebffa4ccf21336f09c7f869-1","da63a5bd97c3deafaebffa4ccf21336f09c7f869","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCmltcG9ydCBweXRlc3QKCmZyb20gbWFya292Y2hhaW4udGV4dC51dGlsIGltcG9ydCAoCiAgICBDaGFyQ2FzZSwgaXNwdW5jdCwgY2FwaXRhbGl6ZSwgbHN0cmlwX3dzX2FuZF9jaGFycywKICAgIHJlX2ZsYWdzLCByZV9mbGFnc19zdHIsIHJlX3N1YiwgZ2V0X3dvcmRzLCBSZUZsYWdzCikKCgpAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoJ3Rlc3QscmVzJywgWwogICAgKCdcJyI/LCstLltde30oKTw+JywgVHJ1ZSksCiAgICAoJ1wnIj8sKy14Lltde30oKTw+JywgRmFsc2UpLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAoJycsIEZhbHNlKQo8fGZpbV9lbmR8Pg=="]
["da63a5bd97c3deafaebffa4ccf21336f09c7f869-2","da63a5bd97c3deafaebffa4ccf21336f09c7f869","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCmltcG9ydCBweXRlc3QKCmZyb20gbWFya292Y2hhaW4udGV4dC51dGlsIGltcG9ydCAoCiAgICBDaGFyQ2FzZSwgaXNwdW5jdCwgY2FwaXRhbGl6ZSwgbHN0cmlwX3dzX2FuZF9jaGFycywKICAgIHJlX2ZsYWdzLCByZV9mbGFnc19zdHIsIHJlX3N1YiwgZ2V0X3dvcmRzLCBSZUZsYWdzCikKCgpAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoJ3Rlc3QscmVzJywgWwogICAgKCdcJyI/LCstLltde30oKTw+JywgVHJ1ZSksCiAgICAoJ1wnIj8sKy14Lltde30oKTw+JywgRmFsc2UpLAogICAgKCcnLCBGYWxzZSkKXSkKZGVmIHRlc3RfaXNwdW5jdCh0ZXN0LCByZXMpOgogICAgYXNzZXJ0IGlzcHVuY3QodGVzdCkgPT0gcmVzCgoKQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCd0ZXN0LHJlcycsIFsKICAgICgnd29yRCBXT1JEIFdvUmQnLCAnV29yZCB3b3JkIHdvcmQnKSwKICAgICgneCcsICdYJyksCiAgICAoJycsICcnKQpdKQpkZWYgdGVzdF9jYXBpdGFsaXplKHRlc3QsIHJlcyk6CiAgICBhc3NlcnQgY2FwaXRhbGl6ZSh0ZXN0KSA9PSByZXMKCgpAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoJ3Rlc3QscmVzJywgWwogICAgKCgnJywgJycpLCAnJyksCiAgICAoKCcgICAgICcsICcnKSwgJycpLAogICAgKCgnICB4ICAnLCAneHknKSwgJycpLAogICAgKCgnIFx0LlxuICwgLnguICcsICcuLD8hJyksICd4LiAnKQpdKQpkZWYgdGVzdF9sc3RyaXBfd3NfYW5kX2NoYXJzKHRlc3QsIHJlcyk6CiAgICBhc3NlcnQgbHN0cmlwX3dzX2FuZF9jaGFycygqdGVzdCkgPT0gcmVzCgoKQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCdjYXNlLHN0cmluZyxyZXMnLCBbCiAgICAoQ2hhckNhc2UuUFJFU0VSVkUsICdhIEIgYycsICdhIEIgYycpLAogICAgKENoYXJDYXNlLlRJVExFLCAnYSBCIGMnLCAnQSBiIGMnKSwKICAgIChDaGFyQ2FzZS5VUFBFUiwgJ2EgQiBjJywgJ0EgQiBDJyksCiAgICAoQ2hhckNhc2UuTE9XRVIsICdhIEIgYycsICdhIGIgYycpCl0pCmRlZiB0ZXN0X2NoYXJfY2FzZV9jb252ZXJ0KGNhc2UsIHN0cmluZywgcmVzKToKICAgIGNhc2UgPSBDaGFyQ2FzZShjYXNlKQogICAgYXNzZXJ0IGNhc2UuY29udmVydChzdHJpbmcpID09IHJlcwoKCkBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgndGVzdCxyZXMnLCBbCiAgICAoJ2FiLGNkJywgWydhYicsICdjZCddKSwKICAgICgnYWIgY2QuLlxuLGVmJywgWydhYicsICdjZCcsICdlZiddKQpdKQpkZWYgdGVzdF9nZXRfd29yZHModGVzdCwgcmVzKToKICAgIGFzc2VydCBnZXRfd29yZHModGVzdCkgPT0gcmVzCgoKQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCd0ZXN0LHJlcycsIFsKICAgICgoJ3VpTScsKSwgKHJlLlUgfCByZS5JIHwgcmUuTSwgMCkpLAogICAgKCgnVU8nLCksIChyZS5VLCBSZUZsYWdzLk8pKSwKICAgICgoJ08nLCBOb25lKSwgVmFsdWVFcnJvciksCiAgICAoKCctJywpLCBWYWx1ZUVycm9yKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cl0pCmRlZiB0ZXN0X3JlX2ZsYWdzKHRlc3QsIHJlcyk6CiAgICBpZiBpc2luc3RhbmNlKHJlcywgdHlwZSk6CiAgICAgICAgd2l0aCBweXRlc3QucmFpc2VzKHJlcyk6Cjx8ZmltX2VuZHw+"]
["a9b023f3789bece4d0a818a243d02e32b78da8ce-1","a9b023f3789bece4d0a818a243d02e32b78da8ce","PHxmaW1fcHJlZml4fD4KCmZyb20gYnM0IGltcG9ydCBCZWF1dGlmdWxTb3VwCmltcG9ydCByZXF1ZXN0cwppbXBvcnQgaHRtbDJ0ZXh0CmltcG9ydCBjc3YKaW1wb3J0IHRpbWUKaW1wb3J0IG51bXB5IGFzIG5wCgoKZGVmIGZldGNoX3Jlc3VsdHMoc2VhcmNoX3Rlcm0sIG51bWJlcl9yZXN1bHRzLCBsYW5ndWFnZV9jb2RlKToKICAgIGVzY2FwZWRfc2VhcmNoX3Rlcm0gPSBzZWFyY2hfdGVybS5yZXBsYWNlKCcgJywgJysnKQoKICAgIGdvb2dsZV91cmwgPSAnaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/cT17fSZudW09e30maGw9e30nLlwKICAgICAgICBmb3JtYXQoZXNjYXBlZF9zZWFyY2hfdGVybSwgbnVtYmVyX3Jlc3VsdHMsIGxhbmd1YWdlX2NvZGUpCiAgICByZXNwb25zZSA9IHJlcXVlc3RzLmdldChnb29nbGVfdXJsLCBoZWFkZXJzPVVTRVJfQUdFTlQpCiAgICByZXNwb25zZS5yYWlzZV9mb3Jfc3RhdHVzKCkKCiAgICByZXR1cm4gc2VhcmNoX3Rlcm0sIHJlc3BvbnNlLnRleHQKCgojICUlIG1kCiMjIyBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBhIGxpc3Qgb2YgbGFiZWxzIHRvICcvJyBzZXBhcmF0ZWQgdmFsdWVzCiMgJSUKZGVmIGxpc3Rfc3RyaW5nKG15bGlzdCk6CiAgICByZXRfc3RyID0gc3RyKG15bGlzdFswXSkKICAgIHJlbWFpbmluZ19saXN0ID0gbXlsaXN0WzE6XQogICAgZm9yIGl0ZW0gaW4gcmVtYWluaW5nX2xpc3Q6CiAgICAgICAgcmV0X3N0ciArPSAnLycgKyBzdHIoaXRlbSkKICAgIHJldHVybiByZXRfc3RyCgoKIyAlJSBtZAojIyMgRnVuY3Rpb24gdGhhdCBnZXRzIHRoZSBsYWJlbHMgZm9yIGEgZ2l2ZW4gYWRkcmVzcwojICUlCmRlZiBnZXRfbGFiZWxzKGFkZHJlc3MsIGRlcHRoPTUpOgogICAgJycnCiAgICBhZGRyZXNzOiB0aGUgYWRkcmVzcyB3ZSB3aXNoIHRvCiAgICBkZXB0aDogdGhlIG51bWJlciBvZiB3ZWJzaXRlcyB0byByZXR1cm4KICAgICcnJwogICAga2V5d29yZCwgaHRtbCA9IGZldGNoX3Jlc3VsdHMoYWRkcmVzcywgZGVwdGgsICdlbicpCiAgICBzb3VwID0gQmVhdXRpZnVsU291cChodG1sLCAnaHRtbC5wYXJzZXInKQogICAgZGl2cyA9IHNvdXAuZmluZF9hbGwoJ2RpdicsIHsnY2xhc3MnOiAncid9KQogICAgd2Vic2l0ZXMgPSBbXQogICAgZm9yIGRpdiBpbiBkaXZzOgogICAgICAgIGNoaWxkcmVuID0gZGl2LmZpbmRDaGlsZHJlbigiYSIsIHJlY3Vyc2l2ZT1GYWxzZSkKICAgICAgICBmb3IgY2hpbGQgaW4gY2hpbGRyZW46IHdlYnNpdGVzLmFwcGVuZChjaGlsZFsnaHJlZiddKQoKICAgIExhYmVsc19mb3JfYWRkcmVzc2VzID0gW10KICAgIGZvciBzaXRlIGluIHdlYnNpdGVzOgogICAgICAgIHVybCA9IHNpdGUKICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmdldCh1cmwsIGhlYWRlcnM9VVNFUl9BR0VOVCkKICAgICAgICByZXNwb25zZS5yYWlzZV9mb3Jfc3RhdHVzKCkKICAgICAgICBodG1sID0gcmVzcG9uc2UudGV4dAogICAgICAgIHRleHQgPSBodG1sMnRleHQuaHRtbDJ0ZXh0KGh0bWwpCgogICAgICAgIGZvciBMYWJlbCBpbiBMYWJlbHM6CiAgICAgICAgICAgIGlmIExhYmVsIG5vdCBpbiBMYWJlbHNfZm9yX2FkZHJlc3NlcyBhbmQgTGFiZWwgaW4gdGV4dDoKICAgICAgICAgICAgICAgIExhYmVsc19mb3JfYWRkcmVzc2VzLmFwcGVuZChMYWJlbCkKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgcmV0dXJuIExhYmVsc19mb3JfYWRkcmVzc2VzCgoKCkxhYmVscyA9IFsnRXhjaGFuZ2UnLCAnR2FtYmxpbmcnLCAnaG9zdGVkIHdhbGxldCcsCiAgICAgICAgICAnTWVyY2hhbnQnLCAnb25saW5lIHNob3BwaW5nIHN0b3JlJywKICAgICAgICAgICdtaW5pbmcgcG9vbHMnLCAnbWl4aW5nJywgJ3RvcicsCiAgICAgICAgICAncmFuc29td2FyZScsICdzY2FtJywgJ3NtYXJ0IGNvbnRyYWN0JywKICAgICAgICAgICdiYW5rJywgJ3NpbXBsZSB1c2VyJ10KClVTRVJfQUdFTlQgPSB7CiAgICAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNjEuMC4zMTYzLjEwMCBTYWZhcmkvNTM3LjM2J30KCndpdGggb3BlbignbmV3X2RhdGFfaF8xLmNzdicpIGFzIGY6CiAgICBmaXJzdENvbHVtbiA9IFtsaW5lLnNwbGl0KCcsJylbMF0gZm9yIGxpbmUgaW4gZl0KCmRhdGEgPSBmaXJzdENvbHVtblsxOmxlbihmaXJzdENvbHVtbikgLSAxXQpkYXRhWCA9IGRhdGFbMDoxMDAwXQpBc3NpZ25lZF9MYWJlbHMgPSB7fQpmb3IgYWRkcmVzcyBpbiBkYXRhWDoKICAgIGEgPSB0aW1lLnBlcmZfY291bnRlcigpCiAgICBBc3NpZ25lZF9MYWJlbHNbYWRkcmVzc10gPSBnZXRfbGFiZWxzKGFkZHJlc3MpCgogICAgIyBkZWxheSBzbyB0aGF0IHdlIGRvbid0IGdldCBiYW5uZWQgZnJvbSBnb29nbGUgZHVlIHRvIHRvbyBtYW55IHJlcXVlc3RzCiAgICBiID0gdGltZS5wZXJmX2NvdW50ZXIoKQogICAgaWYgYiAtIGEgPCAyOgogICAgICAgIHRpbWUuc2xlZXAoMikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKd2l0aCBvcGVuKCdwZW9wbGUuY3N2JywgJ3cnLCBuZXdsaW5lPScnKSBhcyB3cml0ZUZpbGU6CiAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKHdyaXRlRmlsZSkKICAgIGZvciBrZXksIHZhbCBpbiBBc3NpZ25lZF9MYWJlbHMuaXRlbXMoKToKPHxmaW1fZW5kfD4="]
["17677702d2aba5eae9ccd7e99aa9cc5c7ba981ea-1","17677702d2aba5eae9ccd7e99aa9cc5c7ba981ea","PHxmaW1fcHJlZml4fD4KIiIiIERCIFNjaGVtYSAiIiIKZnJvbSAuIGltcG9ydCBkYgpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQoKCmNsYXNzIFVzZXIoZGIuTW9kZWwpOgogICAgIiIiIE1vZGVsIGZvciB1c2VycyAiIiIKCiAgICBpZCA9IGRiLkNvbHVtbihkYi5JbnRlZ2VyLAogICAgICAgICAgICAgICAgICAgcHJpbWFyeV9rZXk9VHJ1ZSkKCiAgICB1c2VybmFtZSA9IGRiLkNvbHVtbihkYi5TdHJpbmcoNTApLAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWU9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxhYmxlPUZhbHNlKQoKICAgIGVtYWlsID0gZGIuQ29sdW1uKGRiLlN0cmluZyg1MCksCiAgICAgICAgICAgICAgICAgICAgICBpbmRleD1UcnVlLAogICAgICAgICAgICAgICAgICAgICAgdW5pcXVlPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICBudWxsYWJsZT1GYWxzZSkKCiAgICBhZG1pbiA9IGRiLkNvbHVtbihkYi5Cb29sZWFuLAogICAgICAgICAgICAgICAgICAgICAgbnVsbGFibGU9RmFsc2UpCgpjbGFzcyBQb3N0cyhkYi5Nb2RlbCk6CiAgICAiIiIgTW9kZWwgZm9yIHBvc3RzIGJ5IHVzZXJzICIiIgoKICAgIGlkID0gZGIuQ29sdW1uKGRiLkludGVnZXIsCiAgICAgICAgICAgICAgICAgICBwcmltYXJ5X2tleT1UcnVlKQoKICAgIHBvc3QgPSBkYi5Db2x1bW4oZGIuVGV4dCwKICAgICAgICAgICAgICAgICAgICAgbnVsbGFibGU9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZT1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgaW5kZXg9RmFsc2UpCgogICAgZGF0ZV9jcmVhdGVkID0gZGIuQ29sdW1uKGRiLkRhdGVUaW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxhYmxlPUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ZGF0ZXRpbWUudXRjbm93KQoKICAgIHVzZXJfaWQgPSBkYi5Db2x1bW4oZGIuSW50ZWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgZGIuRm9yZWlnbktleSgndXNlci5pZCcpLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgICAgIG51bGxhYmxlPUZhbHNlKQoKPHxmaW1fZW5kfD4="]
["17677702d2aba5eae9ccd7e99aa9cc5c7ba981ea-2","17677702d2aba5eae9ccd7e99aa9cc5c7ba981ea","PHxmaW1fcHJlZml4fD4KIiIiIERCIFNjaGVtYSAiIiIKZnJvbSAuIGltcG9ydCBkYgpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQoKCmNsYXNzIFVzZXIoZGIuTW9kZWwpOgogICAgIiIiIE1vZGVsIGZvciB1c2VycyAiIiIKCiAgICBpZCA9IGRiLkNvbHVtbihkYi5JbnRlZ2VyLAogICAgICAgICAgICAgICAgICAgcHJpbWFyeV9rZXk9VHJ1ZSkKCiAgICB1c2VybmFtZSA9IGRiLkNvbHVtbihkYi5TdHJpbmcoNTApLAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWU9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxhYmxlPUZhbHNlKQoKICAgIGVtYWlsID0gZGIuQ29sdW1uKGRiLlN0cmluZyg1MCksCiAgICAgICAgICAgICAgICAgICAgICBpbmRleD1UcnVlLAogICAgICAgICAgICAgICAgICAgICAgdW5pcXVlPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICBudWxsYWJsZT1GYWxzZSkKCiAgICBhZG1pbiA9IGRiLkNvbHVtbihkYi5Cb29sZWFuLAogICAgICAgICAgICAgICAgICAgICAgbnVsbGFibGU9RmFsc2UpCgpjbGFzcyBQb3N0cyhkYi5Nb2RlbCk6CiAgICAiIiIgTW9kZWwgZm9yIHBvc3RzIGJ5IHVzZXJzICIiIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgaWQgPSBkYi5Db2x1bW4oZGIuSW50ZWdlciwKICAgICAgICAgICAgICAgICAgIHByaW1hcnlfa2V5PVRydWUpCgo8fGZpbV9lbmR8Pg=="]
["17677702d2aba5eae9ccd7e99aa9cc5c7ba981ea-3","17677702d2aba5eae9ccd7e99aa9cc5c7ba981ea","PHxmaW1fcHJlZml4fD4KIiIiIERCIFNjaGVtYSAiIiIKZnJvbSAuIGltcG9ydCBkYgpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgVXNlcihkYi5Nb2RlbCk6CiAgICAiIiIgTW9kZWwgZm9yIHVzZXJzICIiIgoKICAgIGlkID0gZGIuQ29sdW1uKGRiLkludGVnZXIsCjx8ZmltX2VuZHw+"]
["17677702d2aba5eae9ccd7e99aa9cc5c7ba981ea-4","17677702d2aba5eae9ccd7e99aa9cc5c7ba981ea","PHxmaW1fcHJlZml4fD4KIiIiIERCIFNjaGVtYSAiIiIKPHxmaW1faG9sZXw+CmNsYXNzIFVzZXIoZGIuTW9kZWwpOgogICAgIiIiIE1vZGVsIGZvciB1c2VycyAiIiIKCiAgICBpZCA9IGRiLkNvbHVtbihkYi5JbnRlZ2VyLAogICAgICAgICAgICAgICAgICAgcHJpbWFyeV9rZXk9VHJ1ZSkKCiAgICB1c2VybmFtZSA9IGRiLkNvbHVtbihkYi5TdHJpbmcoNTApLAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWU9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxhYmxlPUZhbHNlKQoKICAgIGVtYWlsID0gZGIuQ29sdW1uKGRiLlN0cmluZyg1MCksCiAgICAgICAgICAgICAgICAgICAgICBpbmRleD1UcnVlLAogICAgICAgICAgICAgICAgICAgICAgdW5pcXVlPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICBudWxsYWJsZT1GYWxzZSkKCiAgICBhZG1pbiA9IGRiLkNvbHVtbihkYi5Cb29sZWFuLAogICAgICAgICAgICAgICAgICAgICAgbnVsbGFibGU9RmFsc2UpCgpjbGFzcyBQb3N0cyhkYi5Nb2RlbCk6CiAgICAiIiIgTW9kZWwgZm9yIHBvc3RzIGJ5IHVzZXJzICIiIgoKICAgIGlkID0gZGIuQ29sdW1uKGRiLkludGVnZXIsCiAgICAgICAgICAgICAgICAgICBwcmltYXJ5X2tleT1UcnVlKQoKICAgIHBvc3QgPSBkYi5Db2x1bW4oZGIuVGV4dCwKICAgICAgICAgICAgICAgICAgICAgbnVsbGFibGU9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZT1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgaW5kZXg9RmFsc2UpCgogICAgZGF0ZV9jcmVhdGVkID0gZGIuQ29sdW1uKGRiLkRhdGVUaW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxhYmxlPUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ZGF0ZXRpbWUudXRjbm93KQoKICAgIHVzZXJfaWQgPSBkYi5Db2x1bW4oZGIuSW50ZWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgZGIuRm9yZWlnbktleSgndXNlci5pZCcpLAogICAgICAgICAgICAgICAgICAgICAgICBudWxsYWJsZT1GYWxzZSkKCiAgICB1c2VyID0gZGIucmVsYXRpb25zaGlwKCdVc2VyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja3JlZj0nYXV0aG9yJywgbGF6eT1UcnVlKQo8fGZpbV9zdWZmaXh8Pgpmcm9tIC4gaW1wb3J0IGRiCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCgoKPHxmaW1fZW5kfD4="]
["17677702d2aba5eae9ccd7e99aa9cc5c7ba981ea-5","17677702d2aba5eae9ccd7e99aa9cc5c7ba981ea","PHxmaW1fcHJlZml4fD4KIiIiIERCIFNjaGVtYSAiIiIKZnJvbSAuIGltcG9ydCBkYgpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQoKCmNsYXNzIFVzZXIoZGIuTW9kZWwpOgogICAgIiIiIE1vZGVsIGZvciB1c2VycyAiIiIKCiAgICBpZCA9IGRiLkNvbHVtbihkYi5JbnRlZ2VyLAogICAgICAgICAgICAgICAgICAgcHJpbWFyeV9rZXk9VHJ1ZSkKCiAgICB1c2VybmFtZSA9IGRiLkNvbHVtbihkYi5TdHJpbmcoNTApLAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWU9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxhYmxlPUZhbHNlKQoKICAgIGVtYWlsID0gZGIuQ29sdW1uKGRiLlN0cmluZyg1MCksCiAgICAgICAgICAgICAgICAgICAgICBpbmRleD1UcnVlLAogICAgICAgICAgICAgICAgICAgICAgdW5pcXVlPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICBudWxsYWJsZT1GYWxzZSkKCiAgICBhZG1pbiA9IGRiLkNvbHVtbihkYi5Cb29sZWFuLAogICAgICAgICAgICAgICAgICAgICAgbnVsbGFibGU9RmFsc2UpCgpjbGFzcyBQb3N0cyhkYi5Nb2RlbCk6CiAgICAiIiIgTW9kZWwgZm9yIHBvc3RzIGJ5IHVzZXJzICIiIgoKICAgIGlkID0gZGIuQ29sdW1uKGRiLkludGVnZXIsCiAgICAgICAgICAgICAgICAgICBwcmltYXJ5X2tleT1UcnVlKQoKICAgIHBvc3QgPSBkYi5Db2x1bW4oZGIuVGV4dCwKICAgICAgICAgICAgICAgICAgICAgbnVsbGFibGU9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZT1GYWxzZSwKPHxmaW1faG9sZXw+CiAgICBkYXRlX2NyZWF0ZWQgPSBkYi5Db2x1bW4oZGIuRGF0ZVRpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbGFibGU9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1kYXRldGltZS51dGNub3cpCgogICAgdXNlcl9pZCA9IGRiLkNvbHVtbihkYi5JbnRlZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICBkYi5Gb3JlaWduS2V5KCd1c2VyLmlkJyksCiAgICAgICAgICAgICAgICAgICAgICAgIG51bGxhYmxlPUZhbHNlKQoKICAgIHVzZXIgPSBkYi5yZWxhdGlvbnNoaXAoJ1VzZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrcmVmPSdhdXRob3InLCBsYXp5PVRydWUpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgIGluZGV4PUZhbHNlKQoKPHxmaW1fZW5kfD4="]
["8227f042f5136e71691771f15e4dd0b754b8df8f-1","8227f042f5136e71691771f15e4dd0b754b8df8f","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMCBvbiAyMDE4LTA2LTEwIDE1OjMxCgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucywgbW9kZWxzCgppbXBvcnQgaW1hZ2VraXQubW9kZWxzLmZpZWxkcwoKCmNsYXNzIE1pZ3JhdGlvbihtaWdyYXRpb25zLk1pZ3JhdGlvbik6CgogICAgZGVwZW5kZW5jaWVzID0gWygiZXZlbnRzIiwgIjAwMzJfYWRkX3RlYW1fc2x1ZyIpXQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgb3BlcmF0aW9ucyA9IFttaWdyYXRpb25zLlJlbW92ZUZpZWxkKG1vZGVsX25hbWU9InRlYW0iLCBuYW1lPSJjb3Zlcl9pbWciKV0KPHxmaW1fZW5kfD4="]
["8227f042f5136e71691771f15e4dd0b754b8df8f-2","8227f042f5136e71691771f15e4dd0b754b8df8f","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMCBvbiAyMDE4LTA2LTEwIDE1OjMxCgo8fGZpbV9ob2xlfD4KCmNsYXNzIE1pZ3JhdGlvbihtaWdyYXRpb25zLk1pZ3JhdGlvbik6CgogICAgZGVwZW5kZW5jaWVzID0gWygiZXZlbnRzIiwgIjAwMzJfYWRkX3RlYW1fc2x1ZyIpXQoKICAgIG9wZXJhdGlvbnMgPSBbbWlncmF0aW9ucy5SZW1vdmVGaWVsZChtb2RlbF9uYW1lPSJ0ZWFtIiwgbmFtZT0iY292ZXJfaW1nIildCjx8ZmltX3N1ZmZpeHw+CmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCmltcG9ydCBpbWFnZWtpdC5tb2RlbHMuZmllbGRzCgo8fGZpbV9lbmR8Pg=="]
["c1c1e97e1c32c9bdc5fa62d84dcbc7004aa732c8-1","c1c1e97e1c32c9bdc5fa62d84dcbc7004aa732c8","PHxmaW1fcHJlZml4fD4KZnJvbSBhc3luY2lvIGltcG9ydCBnZXRfZXZlbnRfbG9vcApmcm9tIG9zLnBhdGggaW1wb3J0IGJhc2VuYW1lCgpmcm9tIGFpb2h0dHAgaW1wb3J0IENsaWVudFNlc3Npb24KZnJvbSByZXF1ZXN0cyBpbXBvcnQgZ2V0LCBwb3N0Cgpmcm9tIC4gaW1wb3J0IGJlYXRzYXZlcl9leGNlcHRpb25zCgoKY2xhc3MgQmFzZVdyYXBwZXIoKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1c2VyX2FnZW50ID0gTm9uZSk6CiAgICAgICAgc2VsZi5iYXNlX3VybCA9ICJodHRwczovL2JlYXRzYXZlci5jb20vYXBpIgogICAgICAgIHNlbGYuZXZlbnRfbG9vcCA9IGdldF9ldmVudF9sb29wKCkKICAgICAgICBzZWxmLnVzZXJfYWdlbnQgPSB1c2VyX2FnZW50IG9yIGJhc2VuYW1lKF9fZmlsZV9fKQoKICAgIGRlZiBfZmV0Y2goc2VsZiwgZW5kcG9pbnQ6IHN0cik6CiAgICAgICAgdXJsID0gZiJ7c2VsZi5iYXNlX3VybH0ve2VuZHBvaW50fSIKICAgICAgICByZXNwb25zZSA9IGdldCh1cmwsIGhlYWRlcnM9eyJ1c2VyX2FnZW50Ijogc2VsZi51c2VyX2FnZW50fSkKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICByYWlzZSBiZWF0c2F2ZXJfZXhjZXB0aW9ucy5CZWF0U2F2ZXJOb3RGb3VuZCgpCiAgICAgICAgICAgIGlmICJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IiIGluIHJlc3BvbnNlLnRleHQ6CiAgICAgICAgICAgICAgICByYWlzZSBiZWF0c2F2ZXJfZXhjZXB0aW9ucy5CZWF0U2F2ZXJJbnRlcm5hbEVycm9yKCkKICAgICAgICAgICAgcmFpc2UgQmFzZUV4Y2VwdGlvbihyZXNwb25zZS50ZXh0KQoKICAgIGRlZiBfcG9zdChzZWxmLCBlbmRwb2ludDogc3RyLCBkYXRhOiBkaWN0KToKICAgICAgICB1cmwgPSBmIntzZWxmLmJhc2VfdXJsfS97ZW5kcG9pbnR9IgogICAgICAgIHJldHVybiBwb3N0KHVybCwganNvbj1kYXRhLCBoZWFkZXJzPXsidXNlcl9hZ2VudCI6IHNlbGYudXNlcl9hZ2VudH0pCgogICAgYXN5bmMgZGVmIF9hc3luY19mZXRjaChzZWxmLCBlbmRwb2ludDogc3RyKToKICAgICAgICB1cmwgPSBmIntzZWxmLmJhc2VfdXJsfS97ZW5kcG9pbnR9IgogICAgICAgIGFzeW5jIHdpdGggQ2xpZW50U2Vzc2lvbihsb29wPXNlbGYuZXZlbnRfbG9vcCwgaGVhZGVycz17InVzZXJfYWdlbnQiOiBzZWxmLnVzZXJfYWdlbnR9KSBhcyBzZXNzaW9uOgogICAgICAgICAgICBhc3luYyB3aXRoIHNlc3Npb24uZ2V0KHVybCkgYXMgcmVzcG9uc2U6CiAgICAgICAgICAgICAgICBpZiByZXNwb25zZS5zdGF0dXMgPT0gMjAwOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uKCkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgaWYgIk5vdCBGb3VuZCIgaW4gYXdhaXQgcmVzcG9uc2UudGV4dCgpOgogICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBiZWF0c2F2ZXJfZXhjZXB0aW9ucy5CZWF0U2F2ZXJOb3RGb3VuZCgpCiAgICAgICAgICAgICAgICAgICAgaWYgIkludGVybmFsIFNlcnZlciBFcnJvciIgaW4gYXdhaXQgcmVzcG9uc2UudGV4dCgpOgogICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBiZWF0c2F2ZXJfZXhjZXB0aW9ucy5CZWF0U2F2ZXJJbnRlcm5hbEVycm9yKCkKICAgICAgICAgICAgICAgICAgICByYWlzZSBCYXNlRXhjZXB0aW9uKGF3YWl0IHJlc3BvbnNlLnRleHQoKSkKCiAgICBhc3luYyBkZWYgX2FzeW5jX3Bvc3Qoc2VsZiwgZW5kcG9pbnQ6IHN0ciwgZGF0YTogZGljdCk6CiAgICAgICAgdXJsID0gZiJ7c2VsZi5iYXNlX3VybH0ve2VuZHBvaW50fSIKICAgICAgICBhc3luYyB3aXRoIENsaWVudFNlc3Npb24obG9vcD1zZWxmLmV2ZW50X2xvb3AsIGhlYWRlcnM9eyJ1c2VyX2FnZW50Ijogc2VsZi51c2VyX2FnZW50fSkgYXMgc2Vzc2lvbjoKICAgICAgICAgICAgYXN5bmMgd2l0aCBzZXNzaW9uLnBvc3QodXJsLCBkYXRhPWRhdGEpIGFzIHJlc3BvbnNlOgogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgPT0gMjAwOgogICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgIk5vdCBGb3VuZCIgaW4gcmVzcG9uc2UudGV4dDoKPHxmaW1fZW5kfD4="]
["c1c1e97e1c32c9bdc5fa62d84dcbc7004aa732c8-2","c1c1e97e1c32c9bdc5fa62d84dcbc7004aa732c8","PHxmaW1fcHJlZml4fD4KZnJvbSBhc3luY2lvIGltcG9ydCBnZXRfZXZlbnRfbG9vcApmcm9tIG9zLnBhdGggaW1wb3J0IGJhc2VuYW1lCgpmcm9tIGFpb2h0dHAgaW1wb3J0IENsaWVudFNlc3Npb24KZnJvbSByZXF1ZXN0cyBpbXBvcnQgZ2V0LCBwb3N0Cgpmcm9tIC4gaW1wb3J0IGJlYXRzYXZlcl9leGNlcHRpb25zCgoKY2xhc3MgQmFzZVdyYXBwZXIoKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1c2VyX2FnZW50ID0gTm9uZSk6CiAgICAgICAgc2VsZi5iYXNlX3VybCA9ICJodHRwczovL2JlYXRzYXZlci5jb20vYXBpIgogICAgICAgIHNlbGYuZXZlbnRfbG9vcCA9IGdldF9ldmVudF9sb29wKCkKICAgICAgICBzZWxmLnVzZXJfYWdlbnQgPSB1c2VyX2FnZW50IG9yIGJhc2VuYW1lKF9fZmlsZV9fKQoKICAgIGRlZiBfZmV0Y2goc2VsZiwgZW5kcG9pbnQ6IHN0cik6CiAgICAgICAgdXJsID0gZiJ7c2VsZi5iYXNlX3VybH0ve2VuZHBvaW50fSIKICAgICAgICByZXNwb25zZSA9IGdldCh1cmwsIGhlYWRlcnM9eyJ1c2VyX2FnZW50Ijogc2VsZi51c2VyX2FnZW50fSkKICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSA9PSAyMDA6CiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiAiTm90IEZvdW5kIiBpbiByZXNwb25zZS50ZXh0OgogICAgICAgICAgICAgICAgcmFpc2UgYmVhdHNhdmVyX2V4Y2VwdGlvbnMuQmVhdFNhdmVyTm90Rm91bmQoKQogICAgICAgICAgICBpZiAiSW50ZXJuYWwgU2VydmVyIEVycm9yIiBpbiByZXNwb25zZS50ZXh0OgogICAgICAgICAgICAgICAgcmFpc2UgYmVhdHNhdmVyX2V4Y2VwdGlvbnMuQmVhdFNhdmVySW50ZXJuYWxFcnJvcigpCiAgICAgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24ocmVzcG9uc2UudGV4dCkKCiAgICBkZWYgX3Bvc3Qoc2VsZiwgZW5kcG9pbnQ6IHN0ciwgZGF0YTogZGljdCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICB1cmwgPSBmIntzZWxmLmJhc2VfdXJsfS97ZW5kcG9pbnR9IgogICAgICAgIHJldHVybiBwb3N0KHVybCwganNvbj1kYXRhLCBoZWFkZXJzPXsidXNlcl9hZ2VudCI6IHNlbGYudXNlcl9hZ2VudH0pCgo8fGZpbV9lbmR8Pg=="]
["414c1ccff259486c5395fa2eea53f70d4411d32a-1","414c1ccff259486c5395fa2eea53f70d4411d32a","PHxmaW1fcHJlZml4fD4KZGVmIGNhbGN1bGF0ZV9oZWlnaHQocm93KToKCWlmIHJvd1siU2V4Il0gPT0gIk1hbGUiOgoJCXJldHVybiByb3dbIkZpcnN0X0ZWQyJdIC8gKDI3LjYzIC0gLjExMiAqIHJvd1siQWdlIl0pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCWVsc2U6CgkJcmV0dXJuIHJvd1siRmlyc3RfRlZDIl0gLyAoMjEuNzggLSAuMTAxICogcm93WyJBZ2UiXSkKCjx8ZmltX2VuZHw+"]
["414c1ccff259486c5395fa2eea53f70d4411d32a-2","414c1ccff259486c5395fa2eea53f70d4411d32a","PHxmaW1fcHJlZml4fD4KZGVmIGNhbGN1bGF0ZV9oZWlnaHQocm93KToKCWlmIHJvd1siU2V4Il0gPT0gIk1hbGUiOgo8fGZpbV9ob2xlfD4KCWVsc2U6CgkJcmV0dXJuIHJvd1siRmlyc3RfRlZDIl0gLyAoMjEuNzggLSAuMTAxICogcm93WyJBZ2UiXSkKCjx8ZmltX3N1ZmZpeHw+CgkJcmV0dXJuIHJvd1siRmlyc3RfRlZDIl0gLyAoMjcuNjMgLSAuMTEyICogcm93WyJBZ2UiXSkKPHxmaW1fZW5kfD4="]
["414c1ccff259486c5395fa2eea53f70d4411d32a-3","414c1ccff259486c5395fa2eea53f70d4411d32a","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoJCXJldHVybiByb3dbIkZpcnN0X0ZWQyJdIC8gKDIxLjc4IC0gLjEwMSAqIHJvd1siQWdlIl0pCgo8fGZpbV9zdWZmaXh8PgpkZWYgY2FsY3VsYXRlX2hlaWdodChyb3cpOgoJaWYgcm93WyJTZXgiXSA9PSAiTWFsZSI6CgkJcmV0dXJuIHJvd1siRmlyc3RfRlZDIl0gLyAoMjcuNjMgLSAuMTEyICogcm93WyJBZ2UiXSkKCWVsc2U6Cjx8ZmltX2VuZHw+"]
["414c1ccff259486c5395fa2eea53f70d4411d32a-4","414c1ccff259486c5395fa2eea53f70d4411d32a","PHxmaW1fcHJlZml4fD4KZGVmIGNhbGN1bGF0ZV9oZWlnaHQocm93KToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoJaWYgcm93WyJTZXgiXSA9PSAiTWFsZSI6CgkJcmV0dXJuIHJvd1siRmlyc3RfRlZDIl0gLyAoMjcuNjMgLSAuMTEyICogcm93WyJBZ2UiXSkKCWVsc2U6CgkJcmV0dXJuIHJvd1siRmlyc3RfRlZDIl0gLyAoMjEuNzggLSAuMTAxICogcm93WyJBZ2UiXSkKPHxmaW1fZW5kfD4="]
["414c1ccff259486c5395fa2eea53f70d4411d32a-5","414c1ccff259486c5395fa2eea53f70d4411d32a","PHxmaW1fcHJlZml4fD4KZGVmIGNhbGN1bGF0ZV9oZWlnaHQocm93KToKCWlmIHJvd1siU2V4Il0gPT0gIk1hbGUiOgoJCXJldHVybiByb3dbIkZpcnN0X0ZWQyJdIC8gKDI3LjYzIC0gLjExMiAqIHJvd1siQWdlIl0pCgllbHNlOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgkJcmV0dXJuIHJvd1siRmlyc3RfRlZDIl0gLyAoMjEuNzggLSAuMTAxICogcm93WyJBZ2UiXSkKCjx8ZmltX2VuZHw+"]
["c16fbe0f66e032c69683792375b7362a79dad556-1","c16fbe0f66e032c69683792375b7362a79dad556","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGlvCmltcG9ydCBvcwppbXBvcnQgaDVweQppbXBvcnQgdG9yY2gKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBQSUwgaW1wb3J0IEltYWdlCmZyb20gdG9yY2gudXRpbHMuZGF0YSBpbXBvcnQgRGF0YXNldApmcm9tIHRvcmNodmlzaW9uLnRyYW5zZm9ybXMgaW1wb3J0IENvbXBvc2UsIFJlc2l6ZSwgVG9UZW5zb3IKPHxmaW1fZW5kfD4="]
["c16fbe0f66e032c69683792375b7362a79dad556-2","c16fbe0f66e032c69683792375b7362a79dad556","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGlvCmltcG9ydCBvcwppbXBvcnQgaDVweQppbXBvcnQgdG9yY2gKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gUElMIGltcG9ydCBJbWFnZQpmcm9tIHRvcmNoLnV0aWxzLmRhdGEgaW1wb3J0IERhdGFzZXQKZnJvbSB0b3JjaHZpc2lvbi50cmFuc2Zvcm1zIGltcG9ydCBDb21wb3NlLCBSZXNpemUsIFRvVGVuc29yCgpjbGFzcyBEYXRhOgogICAgTUlOID0gMQogICAgQ1VCID0gMgoKY2xhc3MgQmF0Y2hEYXRhc2V0KERhdGFzZXQpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3RfZGlyLCBkYXRhc2V0X3NwZWM9RGF0YS5NSU4sIHRyYW5zZm9ybT1Ob25lLCBzcGxpdD0idHJhaW4iKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuZGF0YV9oYW5kbGUgPSBOb25lCiAgICAgICAgc2VsZi5kYXRhID0gTm9uZQogICAgICAgIHNlbGYuZGF0YXNldF9zcGVjaWZpZXIgPSBkYXRhc2V0X3NwZWMKICAgICAgICBzZWxmLnNhbXBsZXMgPSBbXQo8fGZpbV9lbmR8Pg=="]
["c16fbe0f66e032c69683792375b7362a79dad556-3","c16fbe0f66e032c69683792375b7362a79dad556","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGlvCmltcG9ydCBvcwppbXBvcnQgaDVweQppbXBvcnQgdG9yY2gKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gUElMIGltcG9ydCBJbWFnZQpmcm9tIHRvcmNoLnV0aWxzLmRhdGEgaW1wb3J0IERhdGFzZXQKZnJvbSB0b3JjaHZpc2lvbi50cmFuc2Zvcm1zIGltcG9ydCBDb21wb3NlLCBSZXNpemUsIFRvVGVuc29yCgpjbGFzcyBEYXRhOgogICAgTUlOID0gMQogICAgQ1VCID0gMgoKY2xhc3MgQmF0Y2hEYXRhc2V0KERhdGFzZXQpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3RfZGlyLCBkYXRhc2V0X3NwZWM9RGF0YS5NSU4sIHRyYW5zZm9ybT1Ob25lLCBzcGxpdD0idHJhaW4iKToKICAgICAgICBzZWxmLmRhdGFfaGFuZGxlID0gTm9uZQogICAgICAgIHNlbGYuZGF0YSA9IE5vbmUKICAgICAgICBzZWxmLmRhdGFzZXRfc3BlY2lmaWVyID0gZGF0YXNldF9zcGVjCiAgICAgICAgc2VsZi5zYW1wbGVzID0gW10KICAgICAgICBpZiBzcGxpdCA9PSAiYWxsIjoKICAgICAgICAgICAgc2VsZi5jbGFzc2VzX3Blcl9zcGxpdCA9IFtdCiAgICAgICAgICAgIGZvciBzcCBpbiBbInRyYWluIiwgInZhbCIsICJ0ZXN0Il06CiAgICAgICAgICAgICAgICBzZWxmLnJlYWRfZGF0YShyb290X2Rpciwgc3BsaXQ9c3ApCiAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5jbGFzc2VzX3Blcl9zcGxpdCkgPT0gMDoKICAgICAgICAgICAgICAgICAgICBzZWxmLmNsYXNzZXNfcGVyX3NwbGl0LmFwcGVuZChsZW4oc2VsZi5zYW1wbGVzKSkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGFzc2VzX3Blcl9zcGxpdC5hcHBlbmQoIGxlbihzZWxmLnNhbXBsZXMpIC0gc3VtKHNlbGYuY2xhc3Nlc19wZXJfc3BsaXQpICkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLnJlYWRfZGF0YShyb290X2Rpciwgc3BsaXQ9c3BsaXQpCiAgICAgICAgc2VsZi5udW1fY2xhc3NlcyA9IGxlbihzZWxmLnNhbXBsZXMpCiAgICAgICAgc2VsZi5udW1fc2FtcGxlcyA9IHN1bShbbGVuKHgpIGZvciB4IGluIHNlbGYuc2FtcGxlc10pCiAgICAgICAgc2VsZi50cmFuc2Zvcm0gPSB0cmFuc2Zvcm0KICAgICAgICBwcmludCgiTnVtIGNsYXNzZXM6Iiwgc2VsZi5udW1fY2xhc3NlcykKCiAgICAgICAgIyBDVUIgaGFzIGlycmVndWxhciBudW1iZXIgb2YgaW1hZ2VzIHBlciBjbGFzczsgc28gbWFrZSBhIHRhcmdldCBtYXAgZnJvbSAKICAgICAgICAjIGV4YW1wbGUgSUQgLT4gdGFyZ2V0IGNsYXNzCiAgICAgICAgaWYgc2VsZi5kYXRhc2V0X3NwZWNpZmllciAhPSBEYXRhLk1JTjoKICAgICAgICAgICAgc2VsZi50YXJnZXRfbWFwID0gWzAgZm9yIF8gaW4gcmFuZ2Uoc2VsZi5udW1fc2FtcGxlcyldCiAgICAgICAgICAgICMgbWFwcyB0YXJnZXQoY2xhc3MpIGlkeCAtPiBmaXJzdCBpbmRleCBpbiBzZWxmLnRhcmdldF9tYXAgd2l0aCB0aGF0IGNsYXNzIAogICAgICAgICAgICBzZWxmLm9mZnNldCA9IFswIGZvciBfIGluIHJhbmdlKHNlbGYubnVtX2NsYXNzZXMpXQogICAgICAgICAgICBpZHggPSAwCiAgICAgICAgICAgIGZvciBjaWQsIGNsYXNzX2ltYWdlcyBpbiBlbnVtZXJhdGUoc2VsZi5zYW1wbGVzKToKICAgICAgICAgICAgICAgIHNlbGYub2Zmc2V0W2NpZF0gPSBpZHgKICAgICAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKGxlbihjbGFzc19pbWFnZXMpKToKICAgICAgICAgICAgICAgICAgICBzZWxmLnRhcmdldF9tYXBbaWR4XSA9IGNpZAogICAgICAgICAgICAgICAgICAgIGlkeCArPSAxCiAgICAgICAgIAogICAgZGVmIHJlYWRfZGF0YShzZWxmLCByb290X2Rpciwgc3BsaXQ9InRyYWluIik6CiAgICAgICAgZGF0YV9maWxlID0gb3MucGF0aC5qb2luKHJvb3RfZGlyLCBmJ3tzcGxpdH1fZGF0YS5oZGY1JykKICAgICAgICBzZWxmLmRhdGFfaGFuZGxlID0gaDVweS5GaWxlKGRhdGFfZmlsZSwgJ3InKQogICAgICAgIHNlbGYuZGF0YSA9IHNlbGYuZGF0YV9oYW5kbGVbJ2RhdGFzZXRzJ10KICAgICAgICBmb3IgY2xhc3NfaWQgaW4gc2VsZi5kYXRhLmtleXMoKToKICAgICAgICAgICAgc2FtcGxlcyA9IG5wLmFycmF5KHNlbGYuZGF0YVtjbGFzc19pZF0pCiAgICAgICAgICAgIHNlbGYuc2FtcGxlcy5hcHBlbmQoc2FtcGxlcykKICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAKICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICBpZiBub3Qgc2VsZi5kYXRhX2hhbmRsZSBpcyBOb25lOgogICAgICAgICAgICBzZWxmLmRhdGFfaGFuZGxlLmNsb3NlKCkKICAgICAgICAgICAgc2VsZi5kYXRhID0gTm9uZQogICAgICAgICAgICBzZWxmLmRhdGFfaGFuZGxlID0gTm9uZQogICAgICAgICAgICAKICAgIGRlZiBfX2xlbl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLm51bV9zYW1wbGVzCgogICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGlkeCk6CiAgICAgICAgaWYgc2VsZi5kYXRhc2V0X3NwZWNpZmllciA9PSBEYXRhLk1JTjoKICAgICAgICAgICAgdGFyZ2V0ID0gaWR4ICUgc2VsZi5udW1fY2xhc3NlcwogICAgICAgICAgICBzYW1wbGVfaWQgPSAoaWR4IC0gdGFyZ2V0KSAvLyBzZWxmLm51bV9jbGFzc2VzCiAgICAgICAgICAgIGltYWdlID0gSW1hZ2UuZnJvbWFycmF5KHNlbGYuc2FtcGxlc1t0YXJnZXRdW3NhbXBsZV9pZF0pCiAgICAgICAgICAgIHRhcmdldCA9IHRvcmNoLkxvbmdUZW5zb3IoW3RhcmdldF0pCiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyBDVUIgaXMgc3RvcmVkIGluIGRpZmZlcmVudCBmb3JtYXQgLS4tIC0gdGhpcyBjb2RlIGlzIHJlcXVpcmVkIHRvIHJlYWQgdGhlIGltYWdlcwogICAgICAgICAgICBpZHggPSBpZHggJSBzZWxmLm51bV9zYW1wbGVzCiAgICAgICAgICAgIHRhcmdldF9pZHggPSBzZWxmLnRhcmdldF9tYXBbaWR4XQogICAgICAgICAgICBzYW1wbGVfaWQgPSBpZHggLSBzZWxmLm9mZnNldFt0YXJnZXRfaWR4XQogICAgICAgICAgICBpbWFnZSA9IEltYWdlLm9wZW4oaW8uQnl0ZXNJTyhzZWxmLnNhbXBsZXNbdGFyZ2V0X2lkeF1bc2FtcGxlX2lkXSkpLmNvbnZlcnQoJ1JHQicpCiAgICAgICAgICAgIHRhcmdldCA9IHRvcmNoLkxvbmdUZW5zb3IoW3RhcmdldF9pZHhdKQogICAgICAgIAogICAgICAgIGlmIHNlbGYudHJhbnNmb3JtIGlzIG5vdCBOb25lOgogICAgICAgICAgICBpbWFnZSA9IHNlbGYudHJhbnNmb3JtKGltYWdlKQogICAgICAgIHJldHVybiBpbWFnZSwgdGFyZ2V0CgoKZGVmIGN5Y2xlKGl0ZXJhYmxlKToKICAgIHdoaWxlIFRydWU6CiAgICAgICAgZm9yIHggaW4gaXRlcmFibGU6CiAgICAgICAgICAgIHlpZWxkIHgKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIGZpbml0ZShpdGVyYWJsZSk6CiAgICBmb3IgeCBpbiBpdGVyYWJsZToKICAgICAgICB5aWVsZCB4Cjx8ZmltX2VuZHw+"]
["152376b619d15fa5edf6e52815255e410c5039f8-1","152376b619d15fa5edf6e52815255e410c5039f8","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNSBOZXRmb3JjZSBDby4gTHRkLgojIAojIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAojIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKIyAKIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKIyBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgojIAojIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCiMgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgojIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAojIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgo8fGZpbV9lbmR8Pg=="]
["152376b619d15fa5edf6e52815255e410c5039f8-2","152376b619d15fa5edf6e52815255e410c5039f8","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNSBOZXRmb3JjZSBDby4gTHRkLgojIAojIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAojIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKIyAKIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKIyBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgojIAojIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAojIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgojIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KIyBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKIyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKIyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRQojIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCmZyb20gbmV0Zm9yY2UubW9kZWwgaW1wb3J0IE1vZGVsLCBmaWVsZHMKZnJvbSBuZXRmb3JjZSBpbXBvcnQgaXBjCmltcG9ydCBvcwppbXBvcnQgbmV0Zm9yY2UKCgpkZWYgX2NsZWFyX2NhY2hlKCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHByaW50KCJjbGVhciB0ZW1wbGF0ZSBjYWNoZSBwaWQ9JXMiICUgb3MuZ2V0cGlkKCkpCiAgICBuZXRmb3JjZS50ZW1wbGF0ZS5jbGVhcl90ZW1wbGF0ZV9jYWNoZSgpCgo8fGZpbV9lbmR8Pg=="]
["152376b619d15fa5edf6e52815255e410c5039f8-3","152376b619d15fa5edf6e52815255e410c5039f8","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNSBOZXRmb3JjZSBDby4gTHRkLgojIAojIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAojIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojIAojIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAojIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiMgCjx8ZmltX2VuZHw+"]
["152376b619d15fa5edf6e52815255e410c5039f8-4","152376b619d15fa5edf6e52815255e410c5039f8","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNSBOZXRmb3JjZSBDby4gTHRkLgojIAojIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAojIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKIyAKIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKIyBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgojIAojIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAojIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgojIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KIyBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKIyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKIyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRQojIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCmZyb20gbmV0Zm9yY2UubW9kZWwgaW1wb3J0IE1vZGVsLCBmaWVsZHMKZnJvbSBuZXRmb3JjZSBpbXBvcnQgaXBjCmltcG9ydCBvcwppbXBvcnQgbmV0Zm9yY2UKCgpkZWYgX2NsZWFyX2NhY2hlKCk6CiAgICBwcmludCgiY2xlYXIgdGVtcGxhdGUgY2FjaGUgcGlkPSVzIiAlIG9zLmdldHBpZCgpKQogICAgbmV0Zm9yY2UudGVtcGxhdGUuY2xlYXJfdGVtcGxhdGVfY2FjaGUoKQoKaXBjLnNldF9zaWduYWxfaGFuZGxlcigiY2xlYXJfdGVtcGxhdGVfY2FjaGUiLCBfY2xlYXJfY2FjaGUpCgoKY2xhc3MgVGVtcGxhdGUoTW9kZWwpOgogICAgX25hbWUgPSAidGVtcGxhdGUiCiAgICBfc3RyaW5nID0gIlRlbXBsYXRlIgogICAgX2tleSA9IFsibmFtZSIsInRoZW1lX2lkIl0KICAgIF9maWVsZHMgPSB7Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAibmFtZSI6IGZpZWxkcy5DaGFyKCJOYW1lIiwgcmVxdWlyZWQ9VHJ1ZSwgc2VhcmNoPVRydWUpLAogICAgICAgICJ0ZW1wbGF0ZSI6IGZpZWxkcy5UZXh0KCJUZW1wbGF0ZSIpLAogICAgICAgICJ0aGVtZV9pZCI6IGZpZWxkcy5NYW55Mk9uZSgidGhlbWUiLCJUaGVtZSIpLAogICAgICAgICJtb2R1bGVfaWQiOiBmaWVsZHMuTWFueTJPbmUoIm1vZHVsZSIsICJNb2R1bGUiKSwKPHxmaW1fZW5kfD4="]
["e78a161d4dd44ce3dec9c7604bcbd0c61dd05da0-1","e78a161d4dd44ce3dec9c7604bcbd0c61dd05da0","PHxmaW1fcHJlZml4fD4KaWYgKGZvbyA9PSA0MiBhbmQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGJhcik6Cjx8ZmltX2VuZHw+"]
["e78a161d4dd44ce3dec9c7604bcbd0c61dd05da0-2","e78a161d4dd44ce3dec9c7604bcbd0c61dd05da0","PHxmaW1fcHJlZml4fD4KaWYgKGZvbyA9PSA0MiBhbmQKICAgICAgICBiYXIpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBwYXNzCjx8ZmltX2VuZHw+"]
["e78a161d4dd44ce3dec9c7604bcbd0c61dd05da0-3","e78a161d4dd44ce3dec9c7604bcbd0c61dd05da0","PHxmaW1fcHJlZml4fD4KaWYgKGZvbyA9PSA0MiBhbmQKICAgICAgICBiYXIpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBwYXNzCjx8ZmltX2VuZHw+"]
["e78a161d4dd44ce3dec9c7604bcbd0c61dd05da0-4","e78a161d4dd44ce3dec9c7604bcbd0c61dd05da0","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaWYgKGZvbyA9PSA0MiBhbmQKICAgICAgICBiYXIpOgogICAgcGFzcwo8fGZpbV9lbmR8Pg=="]
["68bd1b9f89dfe8ef9108190f87215ed1df38524b-1","68bd1b9f89dfe8ef9108190f87215ed1df38524b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gdG9yY2gub3B0aW0gaW1wb3J0IEFkYW0KCmZyb20gT1VOb2lzZSBpbXBvcnQgT1VOb2lzZQpmcm9tIG1vZGVscyBpbXBvcnQgQWN0b3IsIENyaXRpYwpmcm9tIHV0aWxzIGltcG9ydCBoYXJkX3VwZGF0ZSwgREVWSUNFCgoKY2xhc3MgRERQR0FnZW50OgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXRlX3NpemUsIGFjdGlvbl9zaXplLCBudW1fYWdlbnRzLCBscl9hY3Rvcj0xLjBlLTQsIGxyX2NyaXRpYz0xLjBlLTMpOgogICAgICAgIHN1cGVyKEREUEdBZ2VudCwgc2VsZikuX19pbml0X18oKQoKICAgICAgICBzZWxmLmFjdG9yID0gQWN0b3Ioc3RhdGVfc2l6ZSwgYWN0aW9uX3NpemUpLnRvKERFVklDRSkKICAgICAgICBzZWxmLmNyaXRpYyA9IENyaXRpYyhzdGF0ZV9zaXplLCBhY3Rpb25fc2l6ZSwgbnVtX2FnZW50cykudG8oREVWSUNFKQogICAgICAgIHNlbGYudGFyZ2V0X2FjdG9yID0gQWN0b3Ioc3RhdGVfc2l6ZSwgYWN0aW9uX3NpemUpLnRvKERFVklDRSkKICAgICAgICBzZWxmLnRhcmdldF9jcml0aWMgPSBDcml0aWMoc3RhdGVfc2l6ZSwgYWN0aW9uX3NpemUsIG51bV9hZ2VudHMpLnRvKERFVklDRSkKCiAgICAgICAgc2VsZi5ub2lzZSA9IE9VTm9pc2UoYWN0aW9uX3NpemUsIHNjYWxlPTEuMCkKCiAgICAgICAgIyBpbml0aWFsaXplIHRhcmdldHMgc2FtZSBhcyBvcmlnaW5hbCBuZXR3b3JrcwogICAgICAgIGhhcmRfdXBkYXRlKHNlbGYudGFyZ2V0X2FjdG9yLCBzZWxmLmFjdG9yKQogICAgICAgIGhhcmRfdXBkYXRlKHNlbGYudGFyZ2V0X2NyaXRpYywgc2VsZi5jcml0aWMpCgogICAgICAgIHNlbGYuYWN0b3Jfb3B0aW1pemVyID0gQWRhbShzZWxmLmFjdG9yLnBhcmFtZXRlcnMoKSwgbHI9bHJfYWN0b3IpCiAgICAgICAgc2VsZi5jcml0aWNfb3B0aW1pemVyID0gQWRhbShzZWxmLmNyaXRpYy5wYXJhbWV0ZXJzKCksIGxyPWxyX2NyaXRpYykKCiAgICBkZWYgYWN0KHNlbGYsIHN0YXRlcywgbm9pc2U9MC4wKToKICAgICAgICBzdGF0ZXMgPSBzdGF0ZXMudG8oREVWSUNFKQogICAgICAgIHNlbGYuYWN0b3IuZXZhbCgpCjx8ZmltX2hvbGV8PgogICAgZGVmIHRhcmdldF9hY3Qoc2VsZiwgc3RhdGVzLCBub2lzZT0wLjApOgogICAgICAgIHN0YXRlcyA9IHN0YXRlcy50byhERVZJQ0UpCiAgICAgICAgc2VsZi50YXJnZXRfYWN0b3IuZXZhbCgpCiAgICAgICAgYWN0aW9ucyA9IHNlbGYudGFyZ2V0X2FjdG9yKHN0YXRlcykuY3B1KCkuZGF0YS5udW1weSgpICsgbm9pc2UgKiBzZWxmLm5vaXNlLm5vaXNlKCkKICAgICAgICByZXR1cm4gbnAuY2xpcChhY3Rpb25zLCAtMSwgMSkKPHxmaW1fc3VmZml4fD4KICAgICAgICBhY3Rpb25zID0gc2VsZi5hY3RvcihzdGF0ZXMpLmNwdSgpLmRhdGEubnVtcHkoKSArIG5vaXNlICogc2VsZi5ub2lzZS5ub2lzZSgpCiAgICAgICAgcmV0dXJuIG5wLmNsaXAoYWN0aW9ucywgLTEsIDEpCgo8fGZpbV9lbmR8Pg=="]
["68bd1b9f89dfe8ef9108190f87215ed1df38524b-2","68bd1b9f89dfe8ef9108190f87215ed1df38524b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gdG9yY2gub3B0aW0gaW1wb3J0IEFkYW0KCmZyb20gT1VOb2lzZSBpbXBvcnQgT1VOb2lzZQpmcm9tIG1vZGVscyBpbXBvcnQgQWN0b3IsIENyaXRpYwpmcm9tIHV0aWxzIGltcG9ydCBoYXJkX3VwZGF0ZSwgREVWSUNFCgoKY2xhc3MgRERQR0FnZW50OgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXRlX3NpemUsIGFjdGlvbl9zaXplLCBudW1fYWdlbnRzLCBscl9hY3Rvcj0xLjBlLTQsIGxyX2NyaXRpYz0xLjBlLTMpOgogICAgICAgIHN1cGVyKEREUEdBZ2VudCwgc2VsZikuX19pbml0X18oKQoKICAgICAgICBzZWxmLmFjdG9yID0gQWN0b3Ioc3RhdGVfc2l6ZSwgYWN0aW9uX3NpemUpLnRvKERFVklDRSkKICAgICAgICBzZWxmLmNyaXRpYyA9IENyaXRpYyhzdGF0ZV9zaXplLCBhY3Rpb25fc2l6ZSwgbnVtX2FnZW50cykudG8oREVWSUNFKQogICAgICAgIHNlbGYudGFyZ2V0X2FjdG9yID0gQWN0b3Ioc3RhdGVfc2l6ZSwgYWN0aW9uX3NpemUpLnRvKERFVklDRSkKICAgICAgICBzZWxmLnRhcmdldF9jcml0aWMgPSBDcml0aWMoc3RhdGVfc2l6ZSwgYWN0aW9uX3NpemUsIG51bV9hZ2VudHMpLnRvKERFVklDRSkKCiAgICAgICAgc2VsZi5ub2lzZSA9IE9VTm9pc2UoYWN0aW9uX3NpemUsIHNjYWxlPTEuMCkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAjIGluaXRpYWxpemUgdGFyZ2V0cyBzYW1lIGFzIG9yaWdpbmFsIG5ldHdvcmtzCiAgICAgICAgaGFyZF91cGRhdGUoc2VsZi50YXJnZXRfYWN0b3IsIHNlbGYuYWN0b3IpCiAgICAgICAgaGFyZF91cGRhdGUoc2VsZi50YXJnZXRfY3JpdGljLCBzZWxmLmNyaXRpYykKCjx8ZmltX2VuZHw+"]
["e5c26374685c6e09bab9d6a8eff271e9a21056e4-1","e5c26374685c6e09bab9d6a8eff271e9a21056e4","PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRhY2xhc3NlcyBpbXBvcnQgZmllbGQKCmZyb20gbG9jYXRpb25zLnV0aWxzLmNvbnZlcnRpYmxlIGltcG9ydCBjb252ZXJ0aWJsZWNsYXNzLCBtZXRhCmZyb20gbG9jYXRpb25zLnV0aWxzLnZhbGlkYXRvcnMgaW1wb3J0IHZhbGlkYXRlX3JhbmdlCgoKQGNvbnZlcnRpYmxlY2xhc3MKY2xhc3MgUmV0cmlldmVUZW1wZXJhdHVyZURhdGFSZXF1ZXN0T2JqZWN0OgogICAgIiIiUmV0cmlldmUgVGVtcGVyYXR1cmUgRGF0YSByZXF1ZXN0IG9iamVjdC4iIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIENJVFkgPSAiY2l0eSIKICAgIERBWVMgPSAiZGF5cyIKCjx8ZmltX2VuZHw+"]
["e5c26374685c6e09bab9d6a8eff271e9a21056e4-2","e5c26374685c6e09bab9d6a8eff271e9a21056e4","PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRhY2xhc3NlcyBpbXBvcnQgZmllbGQKPHxmaW1faG9sZXw+CgpAY29udmVydGlibGVjbGFzcwpjbGFzcyBSZXRyaWV2ZVRlbXBlcmF0dXJlRGF0YVJlcXVlc3RPYmplY3Q6CiAgICAiIiJSZXRyaWV2ZSBUZW1wZXJhdHVyZSBEYXRhIHJlcXVlc3Qgb2JqZWN0LiIiIgoKICAgIENJVFkgPSAiY2l0eSIKICAgIERBWVMgPSAiZGF5cyIKCiAgICBjaXR5OiBzdHIgPSBmaWVsZChkZWZhdWx0PU5vbmUpCiAgICBkYXlzOiBpbnQgPSBmaWVsZCgKICAgICAgICBkZWZhdWx0PU5vbmUsIG1ldGFkYXRhPW1ldGEodmFsdWVfdG9fZmllbGQ9aW50LCB2YWxpZGF0b3I9dmFsaWRhdGVfcmFuZ2UoMSwgMTApKQogICAgKQo8fGZpbV9zdWZmaXh8PgoKZnJvbSBsb2NhdGlvbnMudXRpbHMuY29udmVydGlibGUgaW1wb3J0IGNvbnZlcnRpYmxlY2xhc3MsIG1ldGEKZnJvbSBsb2NhdGlvbnMudXRpbHMudmFsaWRhdG9ycyBpbXBvcnQgdmFsaWRhdGVfcmFuZ2UKCjx8ZmltX2VuZHw+"]
["e5c26374685c6e09bab9d6a8eff271e9a21056e4-3","e5c26374685c6e09bab9d6a8eff271e9a21056e4","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKCkBjb252ZXJ0aWJsZWNsYXNzCmNsYXNzIFJldHJpZXZlVGVtcGVyYXR1cmVEYXRhUmVxdWVzdE9iamVjdDoKICAgICIiIlJldHJpZXZlIFRlbXBlcmF0dXJlIERhdGEgcmVxdWVzdCBvYmplY3QuIiIiCgogICAgQ0lUWSA9ICJjaXR5IgogICAgREFZUyA9ICJkYXlzIgoKICAgIGNpdHk6IHN0ciA9IGZpZWxkKGRlZmF1bHQ9Tm9uZSkKICAgIGRheXM6IGludCA9IGZpZWxkKAogICAgICAgIGRlZmF1bHQ9Tm9uZSwgbWV0YWRhdGE9bWV0YSh2YWx1ZV90b19maWVsZD1pbnQsIHZhbGlkYXRvcj12YWxpZGF0ZV9yYW5nZSgxLCAxMCkpCiAgICApCjx8ZmltX3N1ZmZpeHw+CmZyb20gZGF0YWNsYXNzZXMgaW1wb3J0IGZpZWxkCgpmcm9tIGxvY2F0aW9ucy51dGlscy5jb252ZXJ0aWJsZSBpbXBvcnQgY29udmVydGlibGVjbGFzcywgbWV0YQpmcm9tIGxvY2F0aW9ucy51dGlscy52YWxpZGF0b3JzIGltcG9ydCB2YWxpZGF0ZV9yYW5nZQo8fGZpbV9lbmR8Pg=="]
["a9c8513f17d2894914ce901740084e5adf4db5f1-1","a9c8513f17d2894914ce901740084e5adf4db5f1","PHxmaW1fcHJlZml4fD4KIiIiClBhcnNlcnMgZm9yIEJMQVNUIHJlbGF0ZWQgcmVzdWx0cy4KIiIiCmZyb20gLmdlbmVyaWMgaW1wb3J0IGdldF9maWxlX3R5cGUsIHBhcnNlX2pzb24KUkVTVUxUX1RZUEUgPSAnYmxhc3QnCkFDQ0VQVEVEX0ZJTEVTID0gWyIuanNvbiIsICctcGxzZGIuanNvbicsICdwbHNkYi50eHQnXQoKCmRlZiBwYXJzZShmaWxlbmFtZTogc3RyKSAtPiBkaWN0OgogICAgIiIiCiAgICBDaGVjayBpbnB1dCBmaWxlIGlzIGFuIGFjY2VwdGVkIGZpbGUsIHRoZW4gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBwYXJzaW5nIG1ldGhvZC4KCiAgICBBcmdzOgogICAgICAgIGZpbGVuYW1lIChzdHIpOiBpbnB1dCBmaWxlIHRvIGJlIHBhcnNlZAoKICAgIFJldHVybnM6CiAgICAgICAgZGljdDogcGFyc2VkIHJlc3VsdHMKICAgICIiIgogICAgZmlsZXR5cGUgPSBnZXRfZmlsZV90eXBlKEFDQ0VQVEVEX0ZJTEVTLCBmaWxlbmFtZSkKICAgIGlmIGZpbGV0eXBlID09ICIuanNvbiI6CiAgICAgICAgcmV0dXJuIF9wYXJzZV9ibGFzdChwYXJzZV9qc29uKGZpbGVuYW1lKSkKICAgIGVsaWYgZmlsZXR5cGUgPT0gInBsc2RiLnR4dCI6CiAgICAgICAgcmV0dXJuIF9wYXJzZV9wbHNkYihmaWxlbmFtZSkKCgpkZWYgX3BhcnNlX2JsYXN0KGpzb25kYXRhOiBkaWN0KSAtPiBkaWN0OgogICAgIiIiCiAgICBQYXJzZSBCTEFTVCByZXN1bHRzIGFuZCBjbGVhbiB1cCBmaW5hbCBvdXRwdXRzLgoKICAgIEFyZ3M6CiAgICAgICAganNvbmRhdGEgKGRpY3QpOiB0aGUgcGFyc2VkIEJMQVNUIHJlc3VsdHMKCiAgICBSZXR1cm5zOgogICAgICAgIGRpY3Q6IEJMQVNUIHJlc3VsdHMgd2l0aCByZWR1Y2VkIHJlZHVuZGFuY3kKICAgICIiIgogICAgcmVzdWx0cyA9IHsicHJvZ3JhbSI6IE5vbmUsICdxdWVyaWVzJzoge319CiAgICBmb3Igcm93IGluIGpzb25kYXRhWydCbGFzdE91dHB1dDInXToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJlcG9ydCA9IHJvd1sncmVwb3J0J10KICAgICAgICBpZiBub3QgcmVzdWx0c1sicHJvZ3JhbSJdOgogICAgICAgICAgICByZXN1bHRzWydwcm9ncmFtJ10gPSByZXBvcnRbJ3Byb2dyYW0nXQogICAgICAgICAgICByZXN1bHRzWyd2ZXJzaW9uJ10gPSByZXBvcnRbJ3ZlcnNpb24nXQo8fGZpbV9lbmR8Pg=="]
["a9c8513f17d2894914ce901740084e5adf4db5f1-2","a9c8513f17d2894914ce901740084e5adf4db5f1","PHxmaW1fcHJlZml4fD4KIiIiClBhcnNlcnMgZm9yIEJMQVNUIHJlbGF0ZWQgcmVzdWx0cy4KIiIiCmZyb20gLmdlbmVyaWMgaW1wb3J0IGdldF9maWxlX3R5cGUsIHBhcnNlX2pzb24KUkVTVUxUX1RZUEUgPSAnYmxhc3QnCkFDQ0VQVEVEX0ZJTEVTID0gWyIuanNvbiIsICctcGxzZGIuanNvbicsICdwbHNkYi50eHQnXQoKCmRlZiBwYXJzZShmaWxlbmFtZTogc3RyKSAtPiBkaWN0OgogICAgIiIiCiAgICBDaGVjayBpbnB1dCBmaWxlIGlzIGFuIGFjY2VwdGVkIGZpbGUsIHRoZW4gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBwYXJzaW5nIG1ldGhvZC4KCiAgICBBcmdzOgogICAgICAgIGZpbGVuYW1lIChzdHIpOiBpbnB1dCBmaWxlIHRvIGJlIHBhcnNlZAoKICAgIFJldHVybnM6CiAgICAgICAgZGljdDogcGFyc2VkIHJlc3VsdHMKICAgICIiIgogICAgZmlsZXR5cGUgPSBnZXRfZmlsZV90eXBlKEFDQ0VQVEVEX0ZJTEVTLCBmaWxlbmFtZSkKICAgIGlmIGZpbGV0eXBlID09ICIuanNvbiI6CiAgICAgICAgcmV0dXJuIF9wYXJzZV9ibGFzdChwYXJzZV9qc29uKGZpbGVuYW1lKSkKICAgIGVsaWYgZmlsZXR5cGUgPT0gInBsc2RiLnR4dCI6CiAgICAgICAgcmV0dXJuIF9wYXJzZV9wbHNkYihmaWxlbmFtZSkKCgpkZWYgX3BhcnNlX2JsYXN0KGpzb25kYXRhOiBkaWN0KSAtPiBkaWN0OgogICAgIiIiCiAgICBQYXJzZSBCTEFTVCByZXN1bHRzIGFuZCBjbGVhbiB1cCBmaW5hbCBvdXRwdXRzLgoKICAgIEFyZ3M6CiAgICAgICAganNvbmRhdGEgKGRpY3QpOiB0aGUgcGFyc2VkIEJMQVNUIHJlc3VsdHMKCiAgICBSZXR1cm5zOgogICAgICAgIGRpY3Q6IEJMQVNUIHJlc3VsdHMgd2l0aCByZWR1Y2VkIHJlZHVuZGFuY3kKICAgICIiIgogICAgcmVzdWx0cyA9IHsicHJvZ3JhbSI6IE5vbmUsICdxdWVyaWVzJzoge319CiAgICBmb3Igcm93IGluIGpzb25kYXRhWydCbGFzdE91dHB1dDInXToKICAgICAgICByZXBvcnQgPSByb3dbJ3JlcG9ydCddCiAgICAgICAgaWYgbm90IHJlc3VsdHNbInByb2dyYW0iXToKICAgICAgICAgICAgcmVzdWx0c1sncHJvZ3JhbSddID0gcmVwb3J0Wydwcm9ncmFtJ10KICAgICAgICAgICAgcmVzdWx0c1sndmVyc2lvbiddID0gcmVwb3J0Wyd2ZXJzaW9uJ10KICAgICAgICAgICAgcmVzdWx0c1snZGInXSA9IHJlcG9ydFsnc2VhcmNoX3RhcmdldCddWydkYiddCiAgICAgICAgICAgIHJlc3VsdHNbJ3BhcmFtcyddID0gcmVwb3J0WydwYXJhbXMnXQoKICAgICAgICBzZWFyY2ggPSByZXBvcnRbJ3Jlc3VsdHMnXVsnc2VhcmNoJ10KICAgICAgICBxdWVyeV9pZCA9IHNlYXJjaFsncXVlcnlfaWQnXQogICAgICAgIGlmIHF1ZXJ5X2lkIG5vdCBpbiByZXN1bHRzWydxdWVyaWVzJ106CiAgICAgICAgICAgIHJlc3VsdHNbJ3F1ZXJpZXMnXVtxdWVyeV9pZF0gPSB7J3F1ZXJ5X2xlbic6IHNlYXJjaFsncXVlcnlfbGVuJ10sICdoaXRzJzogW10sICdtZXNzYWdlJzogJyd9CgogICAgICAgIGlmICdxdWVyeV90aXRsZScgaW4gc2VhcmNoOgogICAgICAgICAgICByZXN1bHRzWydxdWVyaWVzJ11bcXVlcnlfaWRdWydxdWVyeV90aXRsZSddID0gc2VhcmNoWydxdWVyeV90aXRsZSddLAoKICAgICAgICBpZiBzZWFyY2hbJ2hpdHMnXToKICAgICAgICAgICAgZm9yIGhpdCBpbiBzZWFyY2hbJ2hpdHMnXToKICAgICAgICAgICAgICAgIHJlc3VsdHNbJ3F1ZXJpZXMnXVtxdWVyeV9pZF1bJ2hpdHMnXS5hcHBlbmQoewogICAgICAgICAgICAgICAgICAgICdzdWJqZWN0X3RpdGxlJzogaGl0WydkZXNjcmlwdGlvbiddWzBdWyd0aXRsZSddLnNwbGl0KClbMF0sCiAgICAgICAgICAgICAgICAgICAgJ3N1YmplY3RfbGVuJzogaGl0WydsZW4nXSwKICAgICAgICAgICAgICAgICAgICAnaHNwcyc6IGhpdFsnaHNwcyddCiAgICAgICAgICAgICAgICB9KQogICAgICAgIAogICAgICAgIGlmICdtZXNzYWdlJyBpbiBzZWFyY2g6CiAgICAgICAgICAgIHJlc3VsdHNbJ3F1ZXJpZXMnXVtxdWVyeV9pZF1bJ21lc3NhZ2UnXSA9IHNlYXJjaFsnbWVzc2FnZSddCiAgICByZXR1cm4gcmVzdWx0cwoKCmRlZiBfcGFyc2VfcGxzZGIoZmlsZW5hbWU6IHN0cikgLT4gZGljdDoKICAgICIiIgogICAgQ29ycmVjdCBQTFNEQiBKU09OIGZvcm1hdCB0aGVuIHVzZSBfcGFyc2VfYmxhc3QuCgogICAgQXJnczoKICAgICAgICBmaWxlbmFtZSAoc3RyKTogUExTREIgQkxBU1QgcmVzdWx0cyB0byBiZSBwYXJzZWQKCiAgICBSZXR1cm5zOgogICAgICAgIGRpY3Q6IHRoZSByZXN1bHRzIGluIGNvcnJlY3QgZm9ybWF0CiAgICAiIiIKICAgIGltcG9ydCBqc29uCiAgICBtZXJnZWRfanNvbiA9IE5vbmUKICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3J0JykgYXMgZmg6CiAgICAgICAgZW50cnkgPSBbXQogICAgICAgIGVudHJpZXMgPSBbXQogICAgICAgIGZvciBsaW5lIGluIGZoOgogICAgICAgICAgICBlbnRyeS5hcHBlbmQobGluZSkKICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJ9Iik6CiAgICAgICAgICAgICAgICBqc29uZGF0YSA9IGpzb24ubG9hZHMoJycuam9pbihlbnRyeSkpCiAgICAgICAgICAgICAgICBpZiBtZXJnZWRfanNvbjoKICAgICAgICAgICAgICAgICAgICBtZXJnZWRfanNvblsnQmxhc3RPdXRwdXQyJ10uZXh0ZW5kKGpzb25kYXRhWydCbGFzdE91dHB1dDInXSkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgbWVyZ2VkX2pzb24gPSBqc29uZGF0YQogICAgICAgICAgICAgICAgZW50cnkuY2xlYXIoKQogICAgcmV0dXJuIF9wYXJzZV9ibGFzdChtZXJnZWRfanNvbikKCgpkZWYgZ2V0X3BhcnNhYmxlX2xpc3QocGF0aDogc3RyLCBuYW1lOiBzdHIpIC0+IGxpc3Q6CiAgICAiIiIKICAgIEdlbmVyYXRlIGEgbGlzdCBvZiBwYXJzYWJsZSBmaWxlcy4KCiAgICBBcmdzOgogICAgICAgIHBhdGggKHN0cik6IGEgcGF0aCB0byBleHBlY3RlZCBCYWN0b3BpYSByZXN1bHRzCiAgICAgICAgbmFtZSAoc3RyKTogdGhlIG5hbWUgb2Ygc2FtcGxlIHRvIHRlc3QKCiAgICBSZXR1cm5zOgogICAgICAgIGxpc3Q6IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0dXMgb2YgcGFyc2FibGUgZmlsZXMKICAgICIiIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBpbXBvcnQgZ2xvYgogICAgaW1wb3J0IG9zCiAgICBwYXJzYWJsZV9yZXN1bHRzID0gW10KICAgIAo8fGZpbV9lbmR8Pg=="]
["a9c8513f17d2894914ce901740084e5adf4db5f1-3","a9c8513f17d2894914ce901740084e5adf4db5f1","PHxmaW1fcHJlZml4fD4KIiIiClBhcnNlcnMgZm9yIEJMQVNUIHJlbGF0ZWQgcmVzdWx0cy4KIiIiCmZyb20gLmdlbmVyaWMgaW1wb3J0IGdldF9maWxlX3R5cGUsIHBhcnNlX2pzb24KUkVTVUxUX1RZUEUgPSAnYmxhc3QnCkFDQ0VQVEVEX0ZJTEVTID0gWyIuanNvbiIsICctcGxzZGIuanNvbicsICdwbHNkYi50eHQnXQoKCjx8ZmltX2hvbGV8PgogICAgQXJnczoKICAgICAgICBmaWxlbmFtZSAoc3RyKTogaW5wdXQgZmlsZSB0byBiZSBwYXJzZWQKCiAgICBSZXR1cm5zOgogICAgICAgIGRpY3Q6IHBhcnNlZCByZXN1bHRzCiAgICAiIiIKICAgIGZpbGV0eXBlID0gZ2V0X2ZpbGVfdHlwZShBQ0NFUFRFRF9GSUxFUywgZmlsZW5hbWUpCiAgICBpZiBmaWxldHlwZSA9PSAiLmpzb24iOgogICAgICAgIHJldHVybiBfcGFyc2VfYmxhc3QocGFyc2VfanNvbihmaWxlbmFtZSkpCiAgICBlbGlmIGZpbGV0eXBlID09ICJwbHNkYi50eHQiOgogICAgICAgIHJldHVybiBfcGFyc2VfcGxzZGIoZmlsZW5hbWUpCgoKZGVmIF9wYXJzZV9ibGFzdChqc29uZGF0YTogZGljdCkgLT4gZGljdDoKICAgICIiIgogICAgUGFyc2UgQkxBU1QgcmVzdWx0cyBhbmQgY2xlYW4gdXAgZmluYWwgb3V0cHV0cy4KCiAgICBBcmdzOgogICAgICAgIGpzb25kYXRhIChkaWN0KTogdGhlIHBhcnNlZCBCTEFTVCByZXN1bHRzCgogICAgUmV0dXJuczoKICAgICAgICBkaWN0OiBCTEFTVCByZXN1bHRzIHdpdGggcmVkdWNlZCByZWR1bmRhbmN5CiAgICAiIiIKICAgIHJlc3VsdHMgPSB7InByb2dyYW0iOiBOb25lLCAncXVlcmllcyc6IHt9fQogICAgZm9yIHJvdyBpbiBqc29uZGF0YVsnQmxhc3RPdXRwdXQyJ106CiAgICAgICAgcmVwb3J0ID0gcm93WydyZXBvcnQnXQogICAgICAgIGlmIG5vdCByZXN1bHRzWyJwcm9ncmFtIl06CiAgICAgICAgICAgIHJlc3VsdHNbJ3Byb2dyYW0nXSA9IHJlcG9ydFsncHJvZ3JhbSddCiAgICAgICAgICAgIHJlc3VsdHNbJ3ZlcnNpb24nXSA9IHJlcG9ydFsndmVyc2lvbiddCiAgICAgICAgICAgIHJlc3VsdHNbJ2RiJ10gPSByZXBvcnRbJ3NlYXJjaF90YXJnZXQnXVsnZGInXQogICAgICAgICAgICByZXN1bHRzWydwYXJhbXMnXSA9IHJlcG9ydFsncGFyYW1zJ10KCiAgICAgICAgc2VhcmNoID0gcmVwb3J0WydyZXN1bHRzJ11bJ3NlYXJjaCddCiAgICAgICAgcXVlcnlfaWQgPSBzZWFyY2hbJ3F1ZXJ5X2lkJ10KICAgICAgICBpZiBxdWVyeV9pZCBub3QgaW4gcmVzdWx0c1sncXVlcmllcyddOgogICAgICAgICAgICByZXN1bHRzWydxdWVyaWVzJ11bcXVlcnlfaWRdID0geydxdWVyeV9sZW4nOiBzZWFyY2hbJ3F1ZXJ5X2xlbiddLCAnaGl0cyc6IFtdLCAnbWVzc2FnZSc6ICcnfQoKICAgICAgICBpZiAncXVlcnlfdGl0bGUnIGluIHNlYXJjaDoKICAgICAgICAgICAgcmVzdWx0c1sncXVlcmllcyddW3F1ZXJ5X2lkXVsncXVlcnlfdGl0bGUnXSA9IHNlYXJjaFsncXVlcnlfdGl0bGUnXSwKCiAgICAgICAgaWYgc2VhcmNoWydoaXRzJ106CiAgICAgICAgICAgIGZvciBoaXQgaW4gc2VhcmNoWydoaXRzJ106CiAgICAgICAgICAgICAgICByZXN1bHRzWydxdWVyaWVzJ11bcXVlcnlfaWRdWydoaXRzJ10uYXBwZW5kKHsKICAgICAgICAgICAgICAgICAgICAnc3ViamVjdF90aXRsZSc6IGhpdFsnZGVzY3JpcHRpb24nXVswXVsndGl0bGUnXS5zcGxpdCgpWzBdLAogICAgICAgICAgICAgICAgICAgICdzdWJqZWN0X2xlbic6IGhpdFsnbGVuJ10sCiAgICAgICAgICAgICAgICAgICAgJ2hzcHMnOiBoaXRbJ2hzcHMnXQogICAgICAgICAgICAgICAgfSkKICAgICAgICAKICAgICAgICBpZiAnbWVzc2FnZScgaW4gc2VhcmNoOgogICAgICAgICAgICByZXN1bHRzWydxdWVyaWVzJ11bcXVlcnlfaWRdWydtZXNzYWdlJ10gPSBzZWFyY2hbJ21lc3NhZ2UnXQogICAgcmV0dXJuIHJlc3VsdHMKCgpkZWYgX3BhcnNlX3Bsc2RiKGZpbGVuYW1lOiBzdHIpIC0+IGRpY3Q6CiAgICAiIiIKICAgIENvcnJlY3QgUExTREIgSlNPTiBmb3JtYXQgdGhlbiB1c2UgX3BhcnNlX2JsYXN0LgoKICAgIEFyZ3M6CiAgICAgICAgZmlsZW5hbWUgKHN0cik6IFBMU0RCIEJMQVNUIHJlc3VsdHMgdG8gYmUgcGFyc2VkCgogICAgUmV0dXJuczoKICAgICAgICBkaWN0OiB0aGUgcmVzdWx0cyBpbiBjb3JyZWN0IGZvcm1hdAogICAgIiIiCiAgICBpbXBvcnQganNvbgogICAgbWVyZ2VkX2pzb24gPSBOb25lCiAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdydCcpIGFzIGZoOgogICAgICAgIGVudHJ5ID0gW10KICAgICAgICBlbnRyaWVzID0gW10KICAgICAgICBmb3IgbGluZSBpbiBmaDoKICAgICAgICAgICAgZW50cnkuYXBwZW5kKGxpbmUpCiAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgifSIpOgogICAgICAgICAgICAgICAganNvbmRhdGEgPSBqc29uLmxvYWRzKCcnLmpvaW4oZW50cnkpKQogICAgICAgICAgICAgICAgaWYgbWVyZ2VkX2pzb246CiAgICAgICAgICAgICAgICAgICAgbWVyZ2VkX2pzb25bJ0JsYXN0T3V0cHV0MiddLmV4dGVuZChqc29uZGF0YVsnQmxhc3RPdXRwdXQyJ10pCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIG1lcmdlZF9qc29uID0ganNvbmRhdGEKICAgICAgICAgICAgICAgIGVudHJ5LmNsZWFyKCkKICAgIHJldHVybiBfcGFyc2VfYmxhc3QobWVyZ2VkX2pzb24pCgoKZGVmIGdldF9wYXJzYWJsZV9saXN0KHBhdGg6IHN0ciwgbmFtZTogc3RyKSAtPiBsaXN0OgogICAgIiIiCiAgICBHZW5lcmF0ZSBhIGxpc3Qgb2YgcGFyc2FibGUgZmlsZXMuCgogICAgQXJnczoKICAgICAgICBwYXRoIChzdHIpOiBhIHBhdGggdG8gZXhwZWN0ZWQgQmFjdG9waWEgcmVzdWx0cwogICAgICAgIG5hbWUgKHN0cik6IHRoZSBuYW1lIG9mIHNhbXBsZSB0byB0ZXN0CgogICAgUmV0dXJuczoKICAgICAgICBsaXN0OiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdHVzIG9mIHBhcnNhYmxlIGZpbGVzCiAgICAiIiIKICAgIGltcG9ydCBnbG9iCiAgICBpbXBvcnQgb3MKICAgIHBhcnNhYmxlX3Jlc3VsdHMgPSBbXQogICAgCiAgICAjIENoZWNrIGlmIFBMU0IgcmVzdWx0cyBleGlzdAogICAgYmxhc3RfZGlyID0gZiJ7cGF0aH0ve25hbWV9L3tSRVNVTFRfVFlQRX0iCiAgICBpZiBvcy5wYXRoLmV4aXN0cyhmIntibGFzdF9kaXJ9L3tuYW1lfS1wbHNkYi50eHQiKToKICAgICAgICBwYXJzYWJsZV9yZXN1bHRzLmFwcGVuZCh7CiAgICAgICAgICAgICdyZXN1bHRfbmFtZSc6ICdwbHNkYicsCiAgICAgICAgICAgICdmaWxlcyc6IFtmIntibGFzdF9kaXJ9L3tuYW1lfS1wbHNkYi50eHQiXSwKICAgICAgICAgICAgJ29wdGlvbmFsJzogVHJ1ZSwKICAgICAgICAgICAgJ21pc3NpbmcnOiBGYWxzZSBpZiBvcy5wYXRoLmV4aXN0cyhmIntibGFzdF9kaXJ9L3tuYW1lfS1wbHNkYi50eHQiKSBlbHNlIFRydWUKICAgICAgICB9KQogICAgZWxzZToKICAgICAgICBwYXJzYWJsZV9yZXN1bHRzLmFwcGVuZCh7CiAgICAgICAgICAgICdyZXN1bHRfbmFtZSc6ICdwbHNkYicsCiAgICAgICAgICAgICdmaWxlcyc6IFtmIntibGFzdF9kaXJ9L3tuYW1lfS1wbHNkYi5qc29uIl0sCiAgICAgICAgICAgICdvcHRpb25hbCc6IFRydWUsCiAgICAgICAgICAgICdtaXNzaW5nJzogRmFsc2UgaWYgb3MucGF0aC5leGlzdHMoZiJ7Ymxhc3RfZGlyfS97bmFtZX0tcGxzZGIuanNvbiIpIGVsc2UgVHJ1ZQogICAgICAgIH0pCgogICAgZm9yIGJsYXN0X3R5cGUgaW4gWydnZW5lcycsICdwcm90ZWlucycsICdwcmltZXJzJ106CiAgICAgICAgYmxhc3RfZGlyID0gZiJ7cGF0aH0ve25hbWV9L3tSRVNVTFRfVFlQRX0ve2JsYXN0X3R5cGV9IgogICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGJsYXN0X2Rpcik6CiAgICAgICAgICAgIGZvciBibGFzdF9yZXN1bHQgaW4gZ2xvYi5nbG9iKGYne2JsYXN0X2Rpcn0vKi5qc29uJyk6CiAgICAgICAgICAgICAgICByZXN1bHRfbmFtZSA9IGYie2JsYXN0X3R5cGV9LXtvcy5wYXRoLmJhc2VuYW1lKGJsYXN0X3Jlc3VsdCl9IgogICAgICAgICAgICAgICAgcGFyc2FibGVfcmVzdWx0cy5hcHBlbmQoewogICAgICAgICAgICAgICAgICAgICdyZXN1bHRfbmFtZSc6IHJlc3VsdF9uYW1lLAogICAgICAgICAgICAgICAgICAgICdmaWxlcyc6IFtibGFzdF9yZXN1bHRdLAogICAgICAgICAgICAgICAgICAgICdvcHRpb25hbCc6IFRydWUsCiAgICAgICAgICAgICAgICAgICAgJ21pc3NpbmcnOiBGYWxzZQogICAgICAgICAgICAgICAgfSkKCiAgICByZXR1cm4gcGFyc2FibGVfcmVzdWx0cwo8fGZpbV9zdWZmaXh8PgpkZWYgcGFyc2UoZmlsZW5hbWU6IHN0cikgLT4gZGljdDoKICAgICIiIgogICAgQ2hlY2sgaW5wdXQgZmlsZSBpcyBhbiBhY2NlcHRlZCBmaWxlLCB0aGVuIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgcGFyc2luZyBtZXRob2QuCgo8fGZpbV9lbmR8Pg=="]
["a9c8513f17d2894914ce901740084e5adf4db5f1-4","a9c8513f17d2894914ce901740084e5adf4db5f1","PHxmaW1fcHJlZml4fD4KIiIiClBhcnNlcnMgZm9yIEJMQVNUIHJlbGF0ZWQgcmVzdWx0cy4KIiIiCmZyb20gLmdlbmVyaWMgaW1wb3J0IGdldF9maWxlX3R5cGUsIHBhcnNlX2pzb24KUkVTVUxUX1RZUEUgPSAnYmxhc3QnCkFDQ0VQVEVEX0ZJTEVTID0gWyIuanNvbiIsICctcGxzZGIuanNvbicsICdwbHNkYi50eHQnXQoKCmRlZiBwYXJzZShmaWxlbmFtZTogc3RyKSAtPiBkaWN0OgogICAgIiIiCiAgICBDaGVjayBpbnB1dCBmaWxlIGlzIGFuIGFjY2VwdGVkIGZpbGUsIHRoZW4gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBwYXJzaW5nIG1ldGhvZC4KCiAgICBBcmdzOgogICAgICAgIGZpbGVuYW1lIChzdHIpOiBpbnB1dCBmaWxlIHRvIGJlIHBhcnNlZAoKICAgIFJldHVybnM6CiAgICAgICAgZGljdDogcGFyc2VkIHJlc3VsdHMKICAgICIiIgogICAgZmlsZXR5cGUgPSBnZXRfZmlsZV90eXBlKEFDQ0VQVEVEX0ZJTEVTLCBmaWxlbmFtZSkKICAgIGlmIGZpbGV0eXBlID09ICIuanNvbiI6CiAgICAgICAgcmV0dXJuIF9wYXJzZV9ibGFzdChwYXJzZV9qc29uKGZpbGVuYW1lKSkKICAgIGVsaWYgZmlsZXR5cGUgPT0gInBsc2RiLnR4dCI6CiAgICAgICAgcmV0dXJuIF9wYXJzZV9wbHNkYihmaWxlbmFtZSkKCgpkZWYgX3BhcnNlX2JsYXN0KGpzb25kYXRhOiBkaWN0KSAtPiBkaWN0OgogICAgIiIiCiAgICBQYXJzZSBCTEFTVCByZXN1bHRzIGFuZCBjbGVhbiB1cCBmaW5hbCBvdXRwdXRzLgoKICAgIEFyZ3M6CiAgICAgICAganNvbmRhdGEgKGRpY3QpOiB0aGUgcGFyc2VkIEJMQVNUIHJlc3VsdHMKCiAgICBSZXR1cm5zOgogICAgICAgIGRpY3Q6IEJMQVNUIHJlc3VsdHMgd2l0aCByZWR1Y2VkIHJlZHVuZGFuY3kKICAgICIiIgogICAgcmVzdWx0cyA9IHsicHJvZ3JhbSI6IE5vbmUsICdxdWVyaWVzJzoge319CiAgICBmb3Igcm93IGluIGpzb25kYXRhWydCbGFzdE91dHB1dDInXToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJlcG9ydCA9IHJvd1sncmVwb3J0J10KICAgICAgICBpZiBub3QgcmVzdWx0c1sicHJvZ3JhbSJdOgogICAgICAgICAgICByZXN1bHRzWydwcm9ncmFtJ10gPSByZXBvcnRbJ3Byb2dyYW0nXQogICAgICAgICAgICByZXN1bHRzWyd2ZXJzaW9uJ10gPSByZXBvcnRbJ3ZlcnNpb24nXQo8fGZpbV9lbmR8Pg=="]
["a9c8513f17d2894914ce901740084e5adf4db5f1-5","a9c8513f17d2894914ce901740084e5adf4db5f1","PHxmaW1fcHJlZml4fD4KIiIiClBhcnNlcnMgZm9yIEJMQVNUIHJlbGF0ZWQgcmVzdWx0cy4KIiIiCmZyb20gLmdlbmVyaWMgaW1wb3J0IGdldF9maWxlX3R5cGUsIHBhcnNlX2pzb24KUkVTVUxUX1RZUEUgPSAnYmxhc3QnCkFDQ0VQVEVEX0ZJTEVTID0gWyIuanNvbiIsICctcGxzZGIuanNvbicsICdwbHNkYi50eHQnXQoKCmRlZiBwYXJzZShmaWxlbmFtZTogc3RyKSAtPiBkaWN0OgogICAgIiIiCiAgICBDaGVjayBpbnB1dCBmaWxlIGlzIGFuIGFjY2VwdGVkIGZpbGUsIHRoZW4gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBwYXJzaW5nIG1ldGhvZC4KCiAgICBBcmdzOgogICAgICAgIGZpbGVuYW1lIChzdHIpOiBpbnB1dCBmaWxlIHRvIGJlIHBhcnNlZAoKICAgIFJldHVybnM6Cjx8ZmltX2hvbGV8PgogICAgIiIiCiAgICBmaWxldHlwZSA9IGdldF9maWxlX3R5cGUoQUNDRVBURURfRklMRVMsIGZpbGVuYW1lKQogICAgaWYgZmlsZXR5cGUgPT0gIi5qc29uIjoKICAgICAgICByZXR1cm4gX3BhcnNlX2JsYXN0KHBhcnNlX2pzb24oZmlsZW5hbWUpKQogICAgZWxpZiBmaWxldHlwZSA9PSAicGxzZGIudHh0IjoKICAgICAgICByZXR1cm4gX3BhcnNlX3Bsc2RiKGZpbGVuYW1lKQoKCmRlZiBfcGFyc2VfYmxhc3QoanNvbmRhdGE6IGRpY3QpIC0+IGRpY3Q6CiAgICAiIiIKICAgIFBhcnNlIEJMQVNUIHJlc3VsdHMgYW5kIGNsZWFuIHVwIGZpbmFsIG91dHB1dHMuCgogICAgQXJnczoKICAgICAgICBqc29uZGF0YSAoZGljdCk6IHRoZSBwYXJzZWQgQkxBU1QgcmVzdWx0cwoKICAgIFJldHVybnM6CiAgICAgICAgZGljdDogQkxBU1QgcmVzdWx0cyB3aXRoIHJlZHVjZWQgcmVkdW5kYW5jeQogICAgIiIiCiAgICByZXN1bHRzID0geyJwcm9ncmFtIjogTm9uZSwgJ3F1ZXJpZXMnOiB7fX0KICAgIGZvciByb3cgaW4ganNvbmRhdGFbJ0JsYXN0T3V0cHV0MiddOgogICAgICAgIHJlcG9ydCA9IHJvd1sncmVwb3J0J10KICAgICAgICBpZiBub3QgcmVzdWx0c1sicHJvZ3JhbSJdOgogICAgICAgICAgICByZXN1bHRzWydwcm9ncmFtJ10gPSByZXBvcnRbJ3Byb2dyYW0nXQogICAgICAgICAgICByZXN1bHRzWyd2ZXJzaW9uJ10gPSByZXBvcnRbJ3ZlcnNpb24nXQogICAgICAgICAgICByZXN1bHRzWydkYiddID0gcmVwb3J0WydzZWFyY2hfdGFyZ2V0J11bJ2RiJ10KICAgICAgICAgICAgcmVzdWx0c1sncGFyYW1zJ10gPSByZXBvcnRbJ3BhcmFtcyddCgogICAgICAgIHNlYXJjaCA9IHJlcG9ydFsncmVzdWx0cyddWydzZWFyY2gnXQogICAgICAgIHF1ZXJ5X2lkID0gc2VhcmNoWydxdWVyeV9pZCddCiAgICAgICAgaWYgcXVlcnlfaWQgbm90IGluIHJlc3VsdHNbJ3F1ZXJpZXMnXToKICAgICAgICAgICAgcmVzdWx0c1sncXVlcmllcyddW3F1ZXJ5X2lkXSA9IHsncXVlcnlfbGVuJzogc2VhcmNoWydxdWVyeV9sZW4nXSwgJ2hpdHMnOiBbXSwgJ21lc3NhZ2UnOiAnJ30KCiAgICAgICAgaWYgJ3F1ZXJ5X3RpdGxlJyBpbiBzZWFyY2g6CiAgICAgICAgICAgIHJlc3VsdHNbJ3F1ZXJpZXMnXVtxdWVyeV9pZF1bJ3F1ZXJ5X3RpdGxlJ10gPSBzZWFyY2hbJ3F1ZXJ5X3RpdGxlJ10sCgogICAgICAgIGlmIHNlYXJjaFsnaGl0cyddOgogICAgICAgICAgICBmb3IgaGl0IGluIHNlYXJjaFsnaGl0cyddOgogICAgICAgICAgICAgICAgcmVzdWx0c1sncXVlcmllcyddW3F1ZXJ5X2lkXVsnaGl0cyddLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAgICAgJ3N1YmplY3RfdGl0bGUnOiBoaXRbJ2Rlc2NyaXB0aW9uJ11bMF1bJ3RpdGxlJ10uc3BsaXQoKVswXSwKICAgICAgICAgICAgICAgICAgICAnc3ViamVjdF9sZW4nOiBoaXRbJ2xlbiddLAogICAgICAgICAgICAgICAgICAgICdoc3BzJzogaGl0Wydoc3BzJ10KICAgICAgICAgICAgICAgIH0pCiAgICAgICAgCiAgICAgICAgaWYgJ21lc3NhZ2UnIGluIHNlYXJjaDoKICAgICAgICAgICAgcmVzdWx0c1sncXVlcmllcyddW3F1ZXJ5X2lkXVsnbWVzc2FnZSddID0gc2VhcmNoWydtZXNzYWdlJ10KICAgIHJldHVybiByZXN1bHRzCgoKZGVmIF9wYXJzZV9wbHNkYihmaWxlbmFtZTogc3RyKSAtPiBkaWN0OgogICAgIiIiCiAgICBDb3JyZWN0IFBMU0RCIEpTT04gZm9ybWF0IHRoZW4gdXNlIF9wYXJzZV9ibGFzdC4KCiAgICBBcmdzOgogICAgICAgIGZpbGVuYW1lIChzdHIpOiBQTFNEQiBCTEFTVCByZXN1bHRzIHRvIGJlIHBhcnNlZAoKICAgIFJldHVybnM6CiAgICAgICAgZGljdDogdGhlIHJlc3VsdHMgaW4gY29ycmVjdCBmb3JtYXQKICAgICIiIgogICAgaW1wb3J0IGpzb24KICAgIG1lcmdlZF9qc29uID0gTm9uZQogICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncnQnKSBhcyBmaDoKICAgICAgICBlbnRyeSA9IFtdCiAgICAgICAgZW50cmllcyA9IFtdCiAgICAgICAgZm9yIGxpbmUgaW4gZmg6CiAgICAgICAgICAgIGVudHJ5LmFwcGVuZChsaW5lKQogICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIn0iKToKICAgICAgICAgICAgICAgIGpzb25kYXRhID0ganNvbi5sb2FkcygnJy5qb2luKGVudHJ5KSkKICAgICAgICAgICAgICAgIGlmIG1lcmdlZF9qc29uOgogICAgICAgICAgICAgICAgICAgIG1lcmdlZF9qc29uWydCbGFzdE91dHB1dDInXS5leHRlbmQoanNvbmRhdGFbJ0JsYXN0T3V0cHV0MiddKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBtZXJnZWRfanNvbiA9IGpzb25kYXRhCiAgICAgICAgICAgICAgICBlbnRyeS5jbGVhcigpCiAgICByZXR1cm4gX3BhcnNlX2JsYXN0KG1lcmdlZF9qc29uKQoKCmRlZiBnZXRfcGFyc2FibGVfbGlzdChwYXRoOiBzdHIsIG5hbWU6IHN0cikgLT4gbGlzdDoKICAgICIiIgogICAgR2VuZXJhdGUgYSBsaXN0IG9mIHBhcnNhYmxlIGZpbGVzLgoKICAgIEFyZ3M6CiAgICAgICAgcGF0aCAoc3RyKTogYSBwYXRoIHRvIGV4cGVjdGVkIEJhY3RvcGlhIHJlc3VsdHMKICAgICAgICBuYW1lIChzdHIpOiB0aGUgbmFtZSBvZiBzYW1wbGUgdG8gdGVzdAoKICAgIFJldHVybnM6CiAgICAgICAgbGlzdDogaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXR1cyBvZiBwYXJzYWJsZSBmaWxlcwogICAgIiIiCiAgICBpbXBvcnQgZ2xvYgogICAgaW1wb3J0IG9zCiAgICBwYXJzYWJsZV9yZXN1bHRzID0gW10KICAgIAogICAgIyBDaGVjayBpZiBQTFNCIHJlc3VsdHMgZXhpc3QKICAgIGJsYXN0X2RpciA9IGYie3BhdGh9L3tuYW1lfS97UkVTVUxUX1RZUEV9IgogICAgaWYgb3MucGF0aC5leGlzdHMoZiJ7Ymxhc3RfZGlyfS97bmFtZX0tcGxzZGIudHh0Iik6CiAgICAgICAgcGFyc2FibGVfcmVzdWx0cy5hcHBlbmQoewogICAgICAgICAgICAncmVzdWx0X25hbWUnOiAncGxzZGInLAogICAgICAgICAgICAnZmlsZXMnOiBbZiJ7Ymxhc3RfZGlyfS97bmFtZX0tcGxzZGIudHh0Il0sCiAgICAgICAgICAgICdvcHRpb25hbCc6IFRydWUsCiAgICAgICAgICAgICdtaXNzaW5nJzogRmFsc2UgaWYgb3MucGF0aC5leGlzdHMoZiJ7Ymxhc3RfZGlyfS97bmFtZX0tcGxzZGIudHh0IikgZWxzZSBUcnVlCiAgICAgICAgfSkKICAgIGVsc2U6CiAgICAgICAgcGFyc2FibGVfcmVzdWx0cy5hcHBlbmQoewogICAgICAgICAgICAncmVzdWx0X25hbWUnOiAncGxzZGInLAogICAgICAgICAgICAnZmlsZXMnOiBbZiJ7Ymxhc3RfZGlyfS97bmFtZX0tcGxzZGIuanNvbiJdLAogICAgICAgICAgICAnb3B0aW9uYWwnOiBUcnVlLAogICAgICAgICAgICAnbWlzc2luZyc6IEZhbHNlIGlmIG9zLnBhdGguZXhpc3RzKGYie2JsYXN0X2Rpcn0ve25hbWV9LXBsc2RiLmpzb24iKSBlbHNlIFRydWUKICAgICAgICB9KQoKICAgIGZvciBibGFzdF90eXBlIGluIFsnZ2VuZXMnLCAncHJvdGVpbnMnLCAncHJpbWVycyddOgogICAgICAgIGJsYXN0X2RpciA9IGYie3BhdGh9L3tuYW1lfS97UkVTVUxUX1RZUEV9L3tibGFzdF90eXBlfSIKICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhibGFzdF9kaXIpOgogICAgICAgICAgICBmb3IgYmxhc3RfcmVzdWx0IGluIGdsb2IuZ2xvYihmJ3tibGFzdF9kaXJ9LyouanNvbicpOgogICAgICAgICAgICAgICAgcmVzdWx0X25hbWUgPSBmIntibGFzdF90eXBlfS17b3MucGF0aC5iYXNlbmFtZShibGFzdF9yZXN1bHQpfSIKICAgICAgICAgICAgICAgIHBhcnNhYmxlX3Jlc3VsdHMuYXBwZW5kKHsKICAgICAgICAgICAgICAgICAgICAncmVzdWx0X25hbWUnOiByZXN1bHRfbmFtZSwKICAgICAgICAgICAgICAgICAgICAnZmlsZXMnOiBbYmxhc3RfcmVzdWx0XSwKICAgICAgICAgICAgICAgICAgICAnb3B0aW9uYWwnOiBUcnVlLAogICAgICAgICAgICAgICAgICAgICdtaXNzaW5nJzogRmFsc2UKICAgICAgICAgICAgICAgIH0pCgogICAgcmV0dXJuIHBhcnNhYmxlX3Jlc3VsdHMKPHxmaW1fc3VmZml4fD4KICAgICAgICBkaWN0OiBwYXJzZWQgcmVzdWx0cwo8fGZpbV9lbmR8Pg=="]
["c1a4fa50fd640dc7540b08aea799a40301f345e6-1","c1a4fa50fd640dc7540b08aea799a40301f345e6","PHxmaW1fcHJlZml4fD4KIyBAZGVzYyBEZXNjcmlwdGlvbiBvZiAqKmZpcnN0X2FuZF9sYXN0LnB5KioKCmRlZiBmaXJzdF9hbmRfbGFzdChzKToKICAgIGlmIHNbMF09PXNbLTFdOgogICAgICAgIHJldHVybiBUcnVlCiAgICBlbHNlOgogICAgICAgIHJldHVybiBGYWxzZQoKCmRlZiBtYWluKCk6CiAgICBwcmludChmaXJzdF9hbmRfbGFzdCgnYWJhYicpKQogICAgcHJpbnQoZmlyc3RfYW5kX2xhc3QoJ2FiYmEnKSkKICAgIHByaW50KGZpcnN0X2FuZF9sYXN0KCcnKSkKICAgIHByaW50KGZpcnN0X2FuZF9sYXN0KCcxMjMnKSkKICAgIHByaW50KGZpcnN0X2FuZF9sYXN0KCc2Nzk2JykpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbWFpbigpCjx8ZmltX2VuZHw+"]
["c1a4fa50fd640dc7540b08aea799a40301f345e6-2","c1a4fa50fd640dc7540b08aea799a40301f345e6","PHxmaW1fcHJlZml4fD4KIyBAZGVzYyBEZXNjcmlwdGlvbiBvZiAqKmZpcnN0X2FuZF9sYXN0LnB5KioKCmRlZiBmaXJzdF9hbmRfbGFzdChzKToKICAgIGlmIHNbMF09PXNbLTFdOgogICAgICAgIHJldHVybiBUcnVlCiAgICBlbHNlOgogICAgICAgIHJldHVybiBGYWxzZQoKCmRlZiBtYWluKCk6CiAgICBwcmludChmaXJzdF9hbmRfbGFzdCgnYWJhYicpKQogICAgcHJpbnQoZmlyc3RfYW5kX2xhc3QoJ2FiYmEnKSkKICAgIHByaW50KGZpcnN0X2FuZF9sYXN0KCcnKSkKICAgIHByaW50KGZpcnN0X2FuZF9sYXN0KCcxMjMnKSkKICAgIHByaW50KGZpcnN0X2FuZF9sYXN0KCc2Nzk2JykpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgbWFpbigpCjx8ZmltX2VuZHw+"]
["c1a4fa50fd640dc7540b08aea799a40301f345e6-3","c1a4fa50fd640dc7540b08aea799a40301f345e6","PHxmaW1fcHJlZml4fD4KIyBAZGVzYyBEZXNjcmlwdGlvbiBvZiAqKmZpcnN0X2FuZF9sYXN0LnB5KioKCmRlZiBmaXJzdF9hbmRfbGFzdChzKToKICAgIGlmIHNbMF09PXNbLTFdOgogICAgICAgIHJldHVybiBUcnVlCiAgICBlbHNlOgogICAgICAgIHJldHVybiBGYWxzZQoKCmRlZiBtYWluKCk6Cjx8ZmltX2hvbGV8PgogICAgcHJpbnQoZmlyc3RfYW5kX2xhc3QoJzY3OTYnKSkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICBwcmludChmaXJzdF9hbmRfbGFzdCgnYWJhYicpKQogICAgcHJpbnQoZmlyc3RfYW5kX2xhc3QoJ2FiYmEnKSkKICAgIHByaW50KGZpcnN0X2FuZF9sYXN0KCcnKSkKICAgIHByaW50KGZpcnN0X2FuZF9sYXN0KCcxMjMnKSkKPHxmaW1fZW5kfD4="]
["c1a4fa50fd640dc7540b08aea799a40301f345e6-4","c1a4fa50fd640dc7540b08aea799a40301f345e6","PHxmaW1fcHJlZml4fD4KIyBAZGVzYyBEZXNjcmlwdGlvbiBvZiAqKmZpcnN0X2FuZF9sYXN0LnB5KioKCmRlZiBmaXJzdF9hbmRfbGFzdChzKToKICAgIGlmIHNbMF09PXNbLTFdOgogICAgICAgIHJldHVybiBUcnVlCjx8ZmltX2hvbGV8PgpkZWYgbWFpbigpOgogICAgcHJpbnQoZmlyc3RfYW5kX2xhc3QoJ2FiYWInKSkKICAgIHByaW50KGZpcnN0X2FuZF9sYXN0KCdhYmJhJykpCiAgICBwcmludChmaXJzdF9hbmRfbGFzdCgnJykpCiAgICBwcmludChmaXJzdF9hbmRfbGFzdCgnMTIzJykpCiAgICBwcmludChmaXJzdF9hbmRfbGFzdCgnNjc5NicpKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIEZhbHNlCgoKPHxmaW1fZW5kfD4="]
["c1a4fa50fd640dc7540b08aea799a40301f345e6-5","c1a4fa50fd640dc7540b08aea799a40301f345e6","PHxmaW1fcHJlZml4fD4KIyBAZGVzYyBEZXNjcmlwdGlvbiBvZiAqKmZpcnN0X2FuZF9sYXN0LnB5KioKCmRlZiBmaXJzdF9hbmRfbGFzdChzKToKICAgIGlmIHNbMF09PXNbLTFdOgogICAgICAgIHJldHVybiBUcnVlCiAgICBlbHNlOgogICAgICAgIHJldHVybiBGYWxzZQoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIG1haW4oKToKICAgIHByaW50KGZpcnN0X2FuZF9sYXN0KCdhYmFiJykpCiAgICBwcmludChmaXJzdF9hbmRfbGFzdCgnYWJiYScpKQogICAgcHJpbnQoZmlyc3RfYW5kX2xhc3QoJycpKQo8fGZpbV9lbmR8Pg=="]
["a9cee919b793b25a0c90374344889d792b77b674-1","a9cee919b793b25a0c90374344889d792b77b674","PHxmaW1fcHJlZml4fD4KIiIiCkNvcHlyaWdodCAyMDE1LCBDaXNjbyBTeXN0ZW1zLCBJbmMKCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKQGF1dGhvcjogUHJhdmluIEdvaGl0ZSwgQ2lzY28gU3lzdGVtcywgSW5jLgoiIiIKCmltcG9ydCBvcwppbXBvcnQgc2h1dGlsCmltcG9ydCBsb2dnaW5nCmZyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLm1vZGVscyBpbXBvcnQgVXNlcgpmcm9tIGRqYW5nby5kYi5tb2RlbHMuc2lnbmFscyBpbXBvcnQgcHJlX2RlbGV0ZSwgcG9zdF9zYXZlCmZyb20gZGphbmdvLmNvbnRyaWIuc2Vzc2lvbnMubW9kZWxzIGltcG9ydCBTZXNzaW9uCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmltcG9ydCBseG1sLmV0cmVlIGFzIEVUCgpjbGFzcyBDb2xsZWN0aW9uKG1vZGVscy5Nb2RlbCk6CiAgICAnJycKICAgIENvbGxlY3Rpb24gb2YgdXNlciBkZWZpbmVkIG1lc3NhZ2VzCiAgICAnJycKICAgIG5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTI4LCBwcmltYXJ5X2tleT1UcnVlLCB2ZXJib3NlX25hbWU9J0NvbGxlY3Rpb24gTmFtZScpCiAgICB1c2VyID0gbW9kZWxzLkZvcmVpZ25LZXkoVXNlcikKICAgIGRlc2NyaXB0aW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEyOCwgYmxhbms9VHJ1ZSkKCiAgICBkZWYgc2F2ZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHN1cGVyKENvbGxlY3Rpb24sIHNlbGYpLnNhdmUoKmFyZ3MsICoqa3dhcmdzKQogICAgICAgIG5hbWUgPSBnZXRhdHRyKHNlbGYsICduYW1lJykKICAgICAgICBkaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oJ2RhdGEnLCAnY29sbGVjdGlvbnMnLCBuYW1lKQogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXJlY3RvcnkpOgogICAgICAgICAgICBvcy5tYWtlZGlycyhkaXJlY3RvcnkpCgogICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLm5hbWUKCmNsYXNzIFVzZXJQcm9maWxlKG1vZGVscy5Nb2RlbCk6CiAgICB1c2VyICAgPSBtb2RlbHMuRm9yZWlnbktleShVc2VyKQogICAgbW9kdWxlID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NikKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKICAgICAgICByZXR1cm4gc3RyKHNlbGYudXNlcikgKyAnOicgKyBzdHIoc2VsZi5tb2R1bGUpCgo8fGZpbV9lbmR8Pg=="]
["a9cee919b793b25a0c90374344889d792b77b674-2","a9cee919b793b25a0c90374344889d792b77b674","PHxmaW1fcHJlZml4fD4KIiIiCkNvcHlyaWdodCAyMDE1LCBDaXNjbyBTeXN0ZW1zLCBJbmMKCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKQGF1dGhvcjogUHJhdmluIEdvaGl0ZSwgQ2lzY28gU3lzdGVtcywgSW5jLgoiIiIKCmltcG9ydCBvcwppbXBvcnQgc2h1dGlsCmltcG9ydCBsb2dnaW5nCmZyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKPHxmaW1faG9sZXw+CmltcG9ydCBseG1sLmV0cmVlIGFzIEVUCgpjbGFzcyBDb2xsZWN0aW9uKG1vZGVscy5Nb2RlbCk6CiAgICAnJycKICAgIENvbGxlY3Rpb24gb2YgdXNlciBkZWZpbmVkIG1lc3NhZ2VzCiAgICAnJycKICAgIG5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTI4LCBwcmltYXJ5X2tleT1UcnVlLCB2ZXJib3NlX25hbWU9J0NvbGxlY3Rpb24gTmFtZScpCiAgICB1c2VyID0gbW9kZWxzLkZvcmVpZ25LZXkoVXNlcikKICAgIGRlc2NyaXB0aW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEyOCwgYmxhbms9VHJ1ZSkKCiAgICBkZWYgc2F2ZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHN1cGVyKENvbGxlY3Rpb24sIHNlbGYpLnNhdmUoKmFyZ3MsICoqa3dhcmdzKQogICAgICAgIG5hbWUgPSBnZXRhdHRyKHNlbGYsICduYW1lJykKICAgICAgICBkaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oJ2RhdGEnLCAnY29sbGVjdGlvbnMnLCBuYW1lKQogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXJlY3RvcnkpOgogICAgICAgICAgICBvcy5tYWtlZGlycyhkaXJlY3RvcnkpCgogICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLm5hbWUKCmNsYXNzIFVzZXJQcm9maWxlKG1vZGVscy5Nb2RlbCk6CiAgICB1c2VyICAgPSBtb2RlbHMuRm9yZWlnbktleShVc2VyKQogICAgbW9kdWxlID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NikKCiAgICBkZWYgX191bmljb2RlX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHN0cihzZWxmLnVzZXIpICsgJzonICsgc3RyKHNlbGYubW9kdWxlKQoKY2xhc3MgRGV2aWNlUHJvZmlsZShtb2RlbHMuTW9kZWwpOgogICAgJycnCiAgICBDb2xsZWN0aW9uIG9mIGRldmljZSBwcm9maWxlcwogICAgJycnCiAgICBjb25maWcgPSBFVC5wYXJzZShvcy5wYXRoLmpvaW4oJ3N0YXRpYycsJ2dsb2JhbC1jb25maWcueG1sJykpLmdldHJvb3QoKQogICAgQ0hPSUNFUyA9IFsobmFtZS50ZXh0LCBuYW1lLnRleHQpIGZvciBuYW1lIGluIGNvbmZpZy5maW5kYWxsKCduY2NsaWVudC9wbGF0Zm9ybXMvbmFtZScpXQogICAgcHJvZmlsZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMjgsIHByaW1hcnlfa2V5PVRydWUpCiAgICBkZXZpY2UgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MzIsIGNob2ljZXM9Q0hPSUNFUywgZGVmYXVsdD0nY3NyJykKICAgIHVzZXIgPSBtb2RlbHMuRm9yZWlnbktleShVc2VyKQoKICAgIG5jX2FkZHJlc3MgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTUsIGJsYW5rPVRydWUsIGRlZmF1bHQ9JycsIHZlcmJvc2VfbmFtZT0nTmV0Q29uZiBJUCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9J09wdGlvbmFsIE5ldENvbmYgSVAnKQogICAgbmNfcG9ydCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD01LCBibGFuaz1UcnVlLCBkZWZhdWx0PSc4MzAnLCB2ZXJib3NlX25hbWU9J05ldENvbmYgUG9ydCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0nT3B0aW9uYWwgTmV0Q29uZiBQb3J0JykKICAgIG5jX3VzZXJuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTMyLCBibGFuaz1UcnVlLCBkZWZhdWx0PScnLCB2ZXJib3NlX25hbWU9J05ldENvbmYgVXNlcm5hbWUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9J09wdGlvbmFsIE5ldENvbmYgVXNlcm5hbWUnKQogICAgbmNfcGFzc3dvcmQgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MzIsIGJsYW5rPVRydWUsIGRlZmF1bHQ9JycsIHZlcmJvc2VfbmFtZT0nTmV0Q29uZiBQYXNzd29yZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0nT3B0aW9uYWwgTmV0Q29uZiBQYXNzd29yZCcpCgogICAgcmVzdF9hZGRyZXNzID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTE1LCBibGFuaz1UcnVlLCBkZWZhdWx0PScnLCB2ZXJib3NlX25hbWU9J1Jlc3RDb25mIElQJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0nT3B0aW9uYWwgUmVzdENvbmYgSVAnKQogICAgcmVzdF9wb3J0ID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUsIGJsYW5rPVRydWUsIGRlZmF1bHQ9JzgwMDgnLCB2ZXJib3NlX25hbWU9J1Jlc3RDb25mIFBvcnQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSdPcHRpb25hbCBSZXN0Q29uZiBQb3J0JykKICAgIHJlc3RfdXNlcm5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MzIsIGJsYW5rPVRydWUsIGRlZmF1bHQ9JycsIHZlcmJvc2VfbmFtZT0nUmVzdENvbmYgVXNlcm5hbWUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSdPcHRpb25hbCBSZXN0Q29uZiBVc2VybmFtZScpCiAgICByZXN0X3Bhc3N3b3JkID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTMyLCBibGFuaz1UcnVlLCBkZWZhdWx0PScnLCB2ZXJib3NlX25hbWU9J1Jlc3RDb25mIFBhc3N3b3JkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0nT3B0aW9uYWwgUmVzdENvbmYgUGFzc3dvcmQnKQoKICAgIGRlc2NyaXB0aW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEyOCkKCiAgICBzaGFyZWQgPSBtb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UsIHZlcmJvc2VfbmFtZT0nU2hhcmVkIERldmljZSA/JykKCiAgICBkZWYgX191bmljb2RlX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYucHJvZmlsZQoKZGVmIHNlc3Npb25lbmRfaGFuZGxlcihzZW5kZXIsICoqa3dhcmdzKToKICAgICMgY2xlYW51cCBzZXNzaW9uICh0ZW1wKSBkYXRhCiAgICBsb2dnaW5nLmRlYnVnKCdTZXNzaW9uIGNsb3NpbmcsIGNsZWFudXAgLi4nKQogICAgc2Vzc2lvbiA9IGt3YXJncy5nZXQoJ2luc3RhbmNlJykuc2Vzc2lvbl9rZXkKICAgIGlmIHNlc3Npb24gIT0gJyc6CiAgICAgICAgdGVtcGRpciA9IG9zLnBhdGguam9pbignZGF0YScsICdzZXNzaW9uJywgc2Vzc2lvbikKICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh0ZW1wZGlyKToKICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnRGVsZXRpbmcgJXMgLi4nICUgdGVtcGRpcikKICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQoKZGVmIHNpZ25hbF9jcmVhdGVfdXNlcihzZW5kZXIsIGluc3RhbmNlLCBjcmVhdGVkLCAqKmt3YXJncyk6CiAgICB1c2VybmFtZSA9IGluc3RhbmNlLnVzZXJuYW1lCiAgICBwYXRoID0gb3MucGF0aC5qb2luKHNldHRpbmdzLkJBU0VfRElSLCAnZGF0YScsICd1c2VycycsIHVzZXJuYW1lKQogICAgaWYgY3JlYXRlZDoKICAgICAgICBsb2dnaW5nLmRlYnVnKCdTZXR0aW5nIHVwIHVzZXIgd29ya3NwYWNlIC4uJykKICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CiAgICAgICAgICAgIG9zLm1ha2VkaXJzKHBhdGgpCgogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocGF0aCwgJ3lhbmcnKSk6CiAgICAgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguam9pbihwYXRoLCAneWFuZycpKQoKICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHBhdGgsICdjeG1sJykpOgogICAgICAgICAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmpvaW4ocGF0aCwgJ2N4bWwnKSkKCmRlZiBzaWduYWxfZGVsZXRlX3VzZXIoc2VuZGVyLCAqKmt3YXJncyk6CiAgICBsb2dnaW5nLmRlYnVnKCdDbGVhbmluZyB1c2VyIHdvcmtzcGFjZSAuLicpCiAgICB1c2VybmFtZSA9IGt3YXJncy5nZXQoJ2luc3RhbmNlJykudXNlcm5hbWUKICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2V0dGluZ3MuQkFTRV9ESVIsICdkYXRhJywgJ3VzZXJzJywgdXNlcm5hbWUpCiAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoKToKICAgICAgICBzaHV0aWwucm10cmVlKHBhdGgpCgpwcmVfZGVsZXRlLmNvbm5lY3Qoc2Vzc2lvbmVuZF9oYW5kbGVyLCBzZW5kZXI9U2Vzc2lvbikKcG9zdF9zYXZlLmNvbm5lY3Qoc2lnbmFsX2NyZWF0ZV91c2VyLCBzZW5kZXI9VXNlciwgZGlzcGF0Y2hfdWlkPSJjcmVhdGVfdXNlciIpCnByZV9kZWxldGUuY29ubmVjdChzaWduYWxfZGVsZXRlX3VzZXIsIHNlbmRlcj1Vc2VyKQo8fGZpbV9zdWZmaXh8Pgpmcm9tIGRqYW5nby5jb250cmliLmF1dGgubW9kZWxzIGltcG9ydCBVc2VyCmZyb20gZGphbmdvLmRiLm1vZGVscy5zaWduYWxzIGltcG9ydCBwcmVfZGVsZXRlLCBwb3N0X3NhdmUKZnJvbSBkamFuZ28uY29udHJpYi5zZXNzaW9ucy5tb2RlbHMgaW1wb3J0IFNlc3Npb24KZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKPHxmaW1fZW5kfD4="]
["1eb650710251852dafb36f94f8a0cbe2da6e0ee8-1","1eb650710251852dafb36f94f8a0cbe2da6e0ee8","PHxmaW1fcHJlZml4fD4KJycnClJ1bGVzOgogICAgLSBFdmVyeSB0ZW1wbGF0ZSBlbmRzIGF0IHRoZSBpbmRlbnRfbGV2ZWwgd2hlcmUgaXQgc3RhcnRlZC4KICAgIC0gQXQgdGhlIGVuZCBvZiBibG9jayBjb2RlIGFkZCBhIGJsYW5rIGxpbmUuCiAgICAtIE5ldyBmdW5jdGlvbnMgKGhhdCBibG9ja3MpIGFkZCBhIG5ld2xpbmUgYXQgdGhlIGJlZ2lubmluZyB0byBnZXQgdG8gMiBibGFuayBsaW5lcy4KJycnCgp0ZW1wbGF0ZXMgPSB7CiAgICAgICAgCiAgICAgICAgImV2ZW50X3doZW5mbGFnY2xpY2tlZCI6ICcnJ1wKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZGVmIHt7ZnVuY319X3t7SUR9fShzZWxmKToKICAgICAgICAgICAgICAgICAgICB7e05FWFQgfCBpbmRlbnQoNCkgfX0KCiAgICAgICAgICAgICAgICB7e0NVUlJFTlRfU1BSSVRFfX0ue3tmdW5jfX0oe3tmdW5jfX1fe3tJRH19KQoKICAgICAgICAgICAgICAgICcnJywKICAgICAgICAKICAgICAgICAiZXZlbnRfd2hlbmJyb2FkY2FzdHJlY2VpdmVkIjogJycnXAoKICAgICAgICAgICAgICAgIGRlZiB7e2Z1bmN9fV97e0lEfX0oc2VsZik6CiAgICAgICAgICAgICAgICAgICAge3tORVhUIHwgaW5kZW50KDQpfX0KCiAgICAgICAgICAgICAgICB7e0NVUlJFTlRfU1BSSVRFfX0ue3tmdW5jfX0oe3tCUk9BRENBU1RfT1BUSU9OfX0sIHt7ZnVuY319X3t7SUR9fSkKCiAgICAgICAgICAgICAgICAnJycsCgogICAgICAgICJldmVudF93aGVua2V5cHJlc3NlZCI6ICcnJ1wKCiAgICAgICAgICAgICAgICBkZWYge3tmdW5jfX1fe3tJRH19KHNlbGYpOgogICAgICAgICAgICAgICAgICAgIHt7TkVYVCB8IGluZGVudCg0KX19CgogICAgICAgICAgICAgICAge3tDVVJSRU5UX1NQUklURX19Lnt7ZnVuY319KHt7S0VZX09QVElPTn19LCB7e2Z1bmN9fV97e0lEfX0pCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICcnJywKCiAgICAgICAgImV2ZW50X3doZW50aGlzc3ByaXRlY2xpY2tlZCI6ICcnJ1wKCiAgICAgICAgICAgICAgICBkZWYge3tmdW5jfX1fe3tJRH19KHNlbGYpOgogICAgICAgICAgICAgICAgICAgIHt7TkVYVCB8IGluZGVudCg0KX19CgogICAgICAgICAgICAgICAge3tDVVJSRU5UX1NQUklURX19Lnt7ZnVuY319KHt7ZnVuY319X3t7SUR9fSkKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJycnLAogICAgICAgICAgICAgICAgCiAgICAgICAgImNvbnRyb2xfc3RhcnRfYXNfY2xvbmUiOiAnJydcCgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJycnLAoKICAgICAgICAiY29udHJvbF9mb3JldmVyIjonJydcCiAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgICAgIHt7U1VCU1RBQ0sgfCBpbmRlbnQoNCl9fQogICAgICAgICAgICAgICAgJycnLAoKICAgICAgICAiY29udHJvbF9yZXBlYXQiOicnJ1wKICAgICAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKHt7VElNRVN9fSk6CiAgICAgICAgICAgICAgICAgICAge3tTVUJTVEFDSyB8IGluZGVudCg0KX19CiAgICAgICAgICAgICAgICAnJycsCgogICAgICAgICJjb250cm9sX3JlcGVhdF91bnRpbCI6ICcnJ1wKICAgICAgICAgICAgICAgIHdoaWxlIG5vdCB7e0NPTkRJVElPTn19OgogICAgICAgICAgICAgICAgICAgIHt7U1VCU1RBQ0sgfCBpbmRlbnQoNCl9fQogICAgICAgICAgICAgICAgJycnLAogICAgICAgIAogICAgICAgICJjb250cm9sX3dhaXRfdW50aWwiOiAnJydcCiAgICAgICAgICAgICAgICB3aGlsZSBub3Qge3tDT05ESVRJT059fToKICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAnJycsCgogICAgICAgICJjb250cm9sX2lmIjogJycnXAogICAgICAgICAgICAgICAgaWYge3tDT05ESVRJT059fToKICAgICAgICAgICAgICAgICAgICB7e1NVQlNUQUNLIHwgaW5kZW50KDQpfX0KICAgICAgICAgICAgICAgICcnJywKCiAgICAgICAgImNvbnRyb2xfaWZfZWxzZSI6JycnXAogICAgICAgICAgICAgICAgaWYge3tDT05ESVRJT059fToKICAgICAgICAgICAgICAgICAgICB7e1NVQlNUQUNLIHwgaW5kZW50KDQpfX0KICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAge3tTVUJTVEFDSzIgfCBpbmRlbnQoNCl9fQogICAgICAgICAgICAgICAgJycnLAoKICAgICAgICAib3BlcmF0b3JfYWRkIjogIih7e05VTTF9fSArIHt7TlVNMn19KSIsCiAgICAgICAgIm9wZXJhdG9yX2FuZCI6ICIoe3tPUEVSQU5EMX19IGFuZCB7e09QRVJBTkQyfX0pIiwKICAgICAgICAib3BlcmF0b3JfY29udGFpbnMiOiAiKHt7U1RSSU5HMn19IGluIHt7U1RSSU5HMX19KSIsCiAgICAgICAgIm9wZXJhdG9yX2RpdmlkZSI6ICIoe3tOVU0xfX0gLyB7e05VTTJ9fSkiLAogICAgICAgICJvcGVyYXRvcl9lcXVhbHMiOiAiKHt7T1BFUkFORDF9fSA9PSB7e09QRVJBTkQyfX0pIiwKICAgICAgICAib3BlcmF0b3JfZ3QiOiAiKHt7T1BFUkFORDF9fSA+IHt7T1BFUkFORDJ9fSkiLAogICAgICAgICJvcGVyYXRvcl9qb2luIjogJyIiLmpvaW4oW3t7U1RSSU5HMX19LCB7e1NUUklORzJ9fV0pJywKICAgICAgICAib3BlcmF0b3JfbGVuZ3RoIjogImxlbih7e1NUUklOR319KSIsCiAgICAgICAgIm9wZXJhdG9yX2xldHRlcl9vZiI6ICJ7e1NUUklOR319W3t7TEVUVEVSfX0tMV0iLAogICAgICAgICJvcGVyYXRvcl9sdCI6ICIoe3tPUEVSQU5EMX19IDwge3tPUEVSQU5EMn19KSIsCiAgICAgICAgIm9wZXJhdG9yX21vZCI6ICIoe3tOVU0xfX0gJSB7e05VTTJ9fSkiLAogICAgICAgICJvcGVyYXRvcl9tdWx0aXBseSI6ICIoe3tOVU0xfX0gKiB7e05VTTJ9fSkiLAogICAgICAgICJvcGVyYXRvcl9ub3QiOiAibm90ICh7e09QRVJBTkR9fSkiLAogICAgICAgICJvcGVyYXRvcl9vciI6ICIoe3tPUEVSQU5EMX19IG9yIHt7T1BFUkFORDJ9fSkiLAogICAgICAgICJvcGVyYXRvcl9yb3VuZCI6ICJyb3VuZCh7e05VTX19KSIsCiAgICAgICAgIm9wZXJhdG9yX3N1YnRyYWN0IjogIih7e05VTTF9fSAtIHt7TlVNMn19KSIsCgogICAgICAgICJsb29rc19jb3N0dW1lIjogInt7Q09TVFVNRSB8IGdsb2JhbF9jb3N0dW1lfX0iLAogICAgICAgICJsb29rc19iYWNrZHJvcHMiOiAie3tCQUNLRFJPUCB8IGdsb2JhbF9iYWNrZHJvcH19IiwKICAgICAgICAic291bmRfc291bmRzX21lbnUiOiAie3tTT1VORF9NRU5VIHwgZ2xvYmFsX3NvdW5kIH19IiwKCiAgICAgICAgICAgICAgICB9CgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIGRlZiB7e2Z1bmN9fV97e0lEfX0oc2VsZik6CiAgICAgICAgICAgICAgICAgICAge3tORVhUIHwgaW5kZW50KDQpfX0KCiAgICAgICAgICAgICAgICB7e0NVUlJFTlRfU1BSSVRFfX0ue3tmdW5jfX0oe3tmdW5jfX1fe3tJRH19KQo8fGZpbV9lbmR8Pg=="]
["1eb650710251852dafb36f94f8a0cbe2da6e0ee8-2","1eb650710251852dafb36f94f8a0cbe2da6e0ee8","PHxmaW1fcHJlZml4fD4KJycnClJ1bGVzOgogICAgLSBFdmVyeSB0ZW1wbGF0ZSBlbmRzIGF0IHRoZSBpbmRlbnRfbGV2ZWwgd2hlcmUgaXQgc3RhcnRlZC4KICAgIC0gQXQgdGhlIGVuZCBvZiBibG9jayBjb2RlIGFkZCBhIGJsYW5rIGxpbmUuCiAgICAtIE5ldyBmdW5jdGlvbnMgKGhhdCBibG9ja3MpIGFkZCBhIG5ld2xpbmUgYXQgdGhlIGJlZ2lubmluZyB0byBnZXQgdG8gMiBibGFuayBsaW5lcy4KJycnCgp0ZW1wbGF0ZXMgPSB7CiAgICAgICAgCiAgICAgICAgImV2ZW50X3doZW5mbGFnY2xpY2tlZCI6ICcnJ1wKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZGVmIHt7ZnVuY319X3t7SUR9fShzZWxmKToKICAgICAgICAgICAgICAgICAgICB7e05FWFQgfCBpbmRlbnQoNCkgfX0KCiAgICAgICAgICAgICAgICB7e0NVUlJFTlRfU1BSSVRFfX0ue3tmdW5jfX0oe3tmdW5jfX1fe3tJRH19KQoKICAgICAgICAgICAgICAgICcnJywKICAgICAgICAKICAgICAgICAiZXZlbnRfd2hlbmJyb2FkY2FzdHJlY2VpdmVkIjogJycnXAoKICAgICAgICAgICAgICAgIGRlZiB7e2Z1bmN9fV97e0lEfX0oc2VsZik6CiAgICAgICAgICAgICAgICAgICAge3tORVhUIHwgaW5kZW50KDQpfX0KCiAgICAgICAgICAgICAgICB7e0NVUlJFTlRfU1BSSVRFfX0ue3tmdW5jfX0oe3tCUk9BRENBU1RfT1BUSU9OfX0sIHt7ZnVuY319X3t7SUR9fSkKCiAgICAgICAgICAgICAgICAnJycsCgogICAgICAgICJldmVudF93aGVua2V5cHJlc3NlZCI6ICcnJ1wKCiAgICAgICAgICAgICAgICBkZWYge3tmdW5jfX1fe3tJRH19KHNlbGYpOgogICAgICAgICAgICAgICAgICAgIHt7TkVYVCB8IGluZGVudCg0KX19CgogICAgICAgICAgICAgICAge3tDVVJSRU5UX1NQUklURX19Lnt7ZnVuY319KHt7S0VZX09QVElPTn19LCB7e2Z1bmN9fV97e0lEfX0pCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICcnJywKCiAgICAgICAgImV2ZW50X3doZW50aGlzc3ByaXRlY2xpY2tlZCI6ICcnJ1wKCiAgICAgICAgICAgICAgICBkZWYge3tmdW5jfX1fe3tJRH19KHNlbGYpOgogICAgICAgICAgICAgICAgICAgIHt7TkVYVCB8IGluZGVudCg0KX19CgogICAgICAgICAgICAgICAge3tDVVJSRU5UX1NQUklURX19Lnt7ZnVuY319KHt7ZnVuY319X3t7SUR9fSkKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJycnLAogICAgICAgICAgICAgICAgCiAgICAgICAgImNvbnRyb2xfc3RhcnRfYXNfY2xvbmUiOiAnJydcCgogICAgICAgICAgICAgICAgZGVmIHt7ZnVuY319X3t7SUR9fShzZWxmKToKICAgICAgICAgICAgICAgICAgICB7e05FWFQgfCBpbmRlbnQoNCl9fQoKICAgICAgICAgICAgICAgIHt7Q1VSUkVOVF9TUFJJVEV9fS57e2Z1bmN9fSh7e2Z1bmN9fV97e0lEfX0pCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICcnJywKCiAgICAgICAgImNvbnRyb2xfZm9yZXZlciI6JycnXAogICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICAgICB7e1NVQlNUQUNLIHwgaW5kZW50KDQpfX0KICAgICAgICAgICAgICAgICcnJywKCiAgICAgICAgImNvbnRyb2xfcmVwZWF0IjonJydcCiAgICAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZSh7e1RJTUVTfX0pOgogICAgICAgICAgICAgICAgICAgIHt7U1VCU1RBQ0sgfCBpbmRlbnQoNCl9fQogICAgICAgICAgICAgICAgJycnLAoKICAgICAgICAiY29udHJvbF9yZXBlYXRfdW50aWwiOiAnJydcCiAgICAgICAgICAgICAgICB3aGlsZSBub3Qge3tDT05ESVRJT059fToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgIHt7U1VCU1RBQ0sgfCBpbmRlbnQoNCl9fQo8fGZpbV9lbmR8Pg=="]
["1eb650710251852dafb36f94f8a0cbe2da6e0ee8-3","1eb650710251852dafb36f94f8a0cbe2da6e0ee8","PHxmaW1fcHJlZml4fD4KJycnClJ1bGVzOgogICAgLSBFdmVyeSB0ZW1wbGF0ZSBlbmRzIGF0IHRoZSBpbmRlbnRfbGV2ZWwgd2hlcmUgaXQgc3RhcnRlZC4KICAgIC0gQXQgdGhlIGVuZCBvZiBibG9jayBjb2RlIGFkZCBhIGJsYW5rIGxpbmUuCiAgICAtIE5ldyBmdW5jdGlvbnMgKGhhdCBibG9ja3MpIGFkZCBhIG5ld2xpbmUgYXQgdGhlIGJlZ2lubmluZyB0byBnZXQgdG8gMiBibGFuayBsaW5lcy4KJycnCgp0ZW1wbGF0ZXMgPSB7CiAgICAgICAgCiAgICAgICAgImV2ZW50X3doZW5mbGFnY2xpY2tlZCI6ICcnJ1wKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZGVmIHt7ZnVuY319X3t7SUR9fShzZWxmKToKICAgICAgICAgICAgICAgICAgICB7e05FWFQgfCBpbmRlbnQoNCkgfX0KCiAgICAgICAgICAgICAgICB7e0NVUlJFTlRfU1BSSVRFfX0ue3tmdW5jfX0oe3tmdW5jfX1fe3tJRH19KQoKICAgICAgICAgICAgICAgICcnJywKICAgICAgICAKICAgICAgICAiZXZlbnRfd2hlbmJyb2FkY2FzdHJlY2VpdmVkIjogJycnXAoKICAgICAgICAgICAgICAgIGRlZiB7e2Z1bmN9fV97e0lEfX0oc2VsZik6CiAgICAgICAgICAgICAgICAgICAge3tORVhUIHwgaW5kZW50KDQpfX0KCiAgICAgICAgICAgICAgICB7e0NVUlJFTlRfU1BSSVRFfX0ue3tmdW5jfX0oe3tCUk9BRENBU1RfT1BUSU9OfX0sIHt7ZnVuY319X3t7SUR9fSkKCiAgICAgICAgICAgICAgICAnJycsCgogICAgICAgICJldmVudF93aGVua2V5cHJlc3NlZCI6ICcnJ1wKCiAgICAgICAgICAgICAgICBkZWYge3tmdW5jfX1fe3tJRH19KHNlbGYpOgogICAgICAgICAgICAgICAgICAgIHt7TkVYVCB8IGluZGVudCg0KX19CgogICAgICAgICAgICAgICAge3tDVVJSRU5UX1NQUklURX19Lnt7ZnVuY319KHt7S0VZX09QVElPTn19LCB7e2Z1bmN9fV97e0lEfX0pCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICcnJywKCiAgICAgICAgImV2ZW50X3doZW50aGlzc3ByaXRlY2xpY2tlZCI6ICcnJ1wKCiAgICAgICAgICAgICAgICBkZWYge3tmdW5jfX1fe3tJRH19KHNlbGYpOgogICAgICAgICAgICAgICAgICAgIHt7TkVYVCB8IGluZGVudCg0KX19CgogICAgICAgICAgICAgICAge3tDVVJSRU5UX1NQUklURX19Lnt7ZnVuY319KHt7ZnVuY319X3t7SUR9fSkKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJycnLAogICAgICAgICAgICAgICAgCiAgICAgICAgImNvbnRyb2xfc3RhcnRfYXNfY2xvbmUiOiAnJydcCgogICAgICAgICAgICAgICAgZGVmIHt7ZnVuY319X3t7SUR9fShzZWxmKToKICAgICAgICAgICAgICAgICAgICB7e05FWFQgfCBpbmRlbnQoNCl9fQoKICAgICAgICAgICAgICAgIHt7Q1VSUkVOVF9TUFJJVEV9fS57e2Z1bmN9fSh7e2Z1bmN9fV97e0lEfX0pCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICcnJywKCiAgICAgICAgImNvbnRyb2xfZm9yZXZlciI6JycnXAogICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICAgICB7e1NVQlNUQUNLIHwgaW5kZW50KDQpfX0KICAgICAgICAgICAgICAgICcnJywKCiAgICAgICAgImNvbnRyb2xfcmVwZWF0IjonJydcCiAgICAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZSh7e1RJTUVTfX0pOgogICAgICAgICAgICAgICAgICAgIHt7U1VCU1RBQ0sgfCBpbmRlbnQoNCl9fQogICAgICAgICAgICAgICAgJycnLAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICJjb250cm9sX3JlcGVhdF91bnRpbCI6ICcnJ1wKICAgICAgICAgICAgICAgIHdoaWxlIG5vdCB7e0NPTkRJVElPTn19OgogICAgICAgICAgICAgICAgICAgIHt7U1VCU1RBQ0sgfCBpbmRlbnQoNCl9fQogICAgICAgICAgICAgICAgJycnLAo8fGZpbV9lbmR8Pg=="]
["1eb650710251852dafb36f94f8a0cbe2da6e0ee8-4","1eb650710251852dafb36f94f8a0cbe2da6e0ee8","PHxmaW1fcHJlZml4fD4KJycnClJ1bGVzOgogICAgLSBFdmVyeSB0ZW1wbGF0ZSBlbmRzIGF0IHRoZSBpbmRlbnRfbGV2ZWwgd2hlcmUgaXQgc3RhcnRlZC4KICAgIC0gQXQgdGhlIGVuZCBvZiBibG9jayBjb2RlIGFkZCBhIGJsYW5rIGxpbmUuCiAgICAtIE5ldyBmdW5jdGlvbnMgKGhhdCBibG9ja3MpIGFkZCBhIG5ld2xpbmUgYXQgdGhlIGJlZ2lubmluZyB0byBnZXQgdG8gMiBibGFuayBsaW5lcy4KJycnCgp0ZW1wbGF0ZXMgPSB7CiAgICAgICAgCiAgICAgICAgImV2ZW50X3doZW5mbGFnY2xpY2tlZCI6ICcnJ1wKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZGVmIHt7ZnVuY319X3t7SUR9fShzZWxmKToKICAgICAgICAgICAgICAgICAgICB7e05FWFQgfCBpbmRlbnQoNCkgfX0KCiAgICAgICAgICAgICAgICB7e0NVUlJFTlRfU1BSSVRFfX0ue3tmdW5jfX0oe3tmdW5jfX1fe3tJRH19KQoKICAgICAgICAgICAgICAgICcnJywKICAgICAgICAKICAgICAgICAiZXZlbnRfd2hlbmJyb2FkY2FzdHJlY2VpdmVkIjogJycnXAoKICAgICAgICAgICAgICAgIGRlZiB7e2Z1bmN9fV97e0lEfX0oc2VsZik6CiAgICAgICAgICAgICAgICAgICAge3tORVhUIHwgaW5kZW50KDQpfX0KCiAgICAgICAgICAgICAgICB7e0NVUlJFTlRfU1BSSVRFfX0ue3tmdW5jfX0oe3tCUk9BRENBU1RfT1BUSU9OfX0sIHt7ZnVuY319X3t7SUR9fSkKCiAgICAgICAgICAgICAgICAnJycsCgogICAgICAgICJldmVudF93aGVua2V5cHJlc3NlZCI6ICcnJ1wKCiAgICAgICAgICAgICAgICBkZWYge3tmdW5jfX1fe3tJRH19KHNlbGYpOgogICAgICAgICAgICAgICAgICAgIHt7TkVYVCB8IGluZGVudCg0KX19CgogICAgICAgICAgICAgICAge3tDVVJSRU5UX1NQUklURX19Lnt7ZnVuY319KHt7S0VZX09QVElPTn19LCB7e2Z1bmN9fV97e0lEfX0pCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICcnJywKCiAgICAgICAgImV2ZW50X3doZW50aGlzc3ByaXRlY2xpY2tlZCI6ICcnJ1wKCiAgICAgICAgICAgICAgICBkZWYge3tmdW5jfX1fe3tJRH19KHNlbGYpOgogICAgICAgICAgICAgICAgICAgIHt7TkVYVCB8IGluZGVudCg0KX19CgogICAgICAgICAgICAgICAge3tDVVJSRU5UX1NQUklURX19Lnt7ZnVuY319KHt7ZnVuY319X3t7SUR9fSkKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJycnLAogICAgICAgICAgICAgICAgCiAgICAgICAgImNvbnRyb2xfc3RhcnRfYXNfY2xvbmUiOiAnJydcCgogICAgICAgICAgICAgICAgZGVmIHt7ZnVuY319X3t7SUR9fShzZWxmKToKICAgICAgICAgICAgICAgICAgICB7e05FWFQgfCBpbmRlbnQoNCl9fQoKICAgICAgICAgICAgICAgIHt7Q1VSUkVOVF9TUFJJVEV9fS57e2Z1bmN9fSh7e2Z1bmN9fV97e0lEfX0pCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICcnJywKCiAgICAgICAgImNvbnRyb2xfZm9yZXZlciI6JycnXAogICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICAgICB7e1NVQlNUQUNLIHwgaW5kZW50KDQpfX0KICAgICAgICAgICAgICAgICcnJywKCiAgICAgICAgImNvbnRyb2xfcmVwZWF0IjonJydcCiAgICAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZSh7e1RJTUVTfX0pOgogICAgICAgICAgICAgICAgICAgIHt7U1VCU1RBQ0sgfCBpbmRlbnQoNCl9fQogICAgICAgICAgICAgICAgJycnLAoKICAgICAgICAiY29udHJvbF9yZXBlYXRfdW50aWwiOiAnJydcCiAgICAgICAgICAgICAgICB3aGlsZSBub3Qge3tDT05ESVRJT059fToKICAgICAgICAgICAgICAgICAgICB7e1NVQlNUQUNLIHwgaW5kZW50KDQpfX0KICAgICAgICAgICAgICAgICcnJywKICAgICAgICAKICAgICAgICAiY29udHJvbF93YWl0X3VudGlsIjogJycnXAogICAgICAgICAgICAgICAgd2hpbGUgbm90IHt7Q09ORElUSU9OfX06CiAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgJycnLAoKICAgICAgICAiY29udHJvbF9pZiI6ICcnJ1wKICAgICAgICAgICAgICAgIGlmIHt7Q09ORElUSU9OfX06CiAgICAgICAgICAgICAgICAgICAge3tTVUJTVEFDSyB8IGluZGVudCg0KX19CiAgICAgICAgICAgICAgICAnJycsCgogICAgICAgICJjb250cm9sX2lmX2Vsc2UiOicnJ1wKICAgICAgICAgICAgICAgIGlmIHt7Q09ORElUSU9OfX06CiAgICAgICAgICAgICAgICAgICAge3tTVUJTVEFDSyB8IGluZGVudCg0KX19CiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHt7U1VCU1RBQ0syIHwgaW5kZW50KDQpfX0KICAgICAgICAgICAgICAgICcnJywKCiAgICAgICAgIm9wZXJhdG9yX2FkZCI6ICIoe3tOVU0xfX0gKyB7e05VTTJ9fSkiLAogICAgICAgICJvcGVyYXRvcl9hbmQiOiAiKHt7T1BFUkFORDF9fSBhbmQge3tPUEVSQU5EMn19KSIsCiAgICAgICAgIm9wZXJhdG9yX2NvbnRhaW5zIjogIih7e1NUUklORzJ9fSBpbiB7e1NUUklORzF9fSkiLAogICAgICAgICJvcGVyYXRvcl9kaXZpZGUiOiAiKHt7TlVNMX19IC8ge3tOVU0yfX0pIiwKICAgICAgICAib3BlcmF0b3JfZXF1YWxzIjogIih7e09QRVJBTkQxfX0gPT0ge3tPUEVSQU5EMn19KSIsCiAgICAgICAgIm9wZXJhdG9yX2d0IjogIih7e09QRVJBTkQxfX0gPiB7e09QRVJBTkQyfX0pIiwKICAgICAgICAib3BlcmF0b3Jfam9pbiI6ICciIi5qb2luKFt7e1NUUklORzF9fSwge3tTVFJJTkcyfX1dKScsCiAgICAgICAgIm9wZXJhdG9yX2xlbmd0aCI6ICJsZW4oe3tTVFJJTkd9fSkiLAogICAgICAgICJvcGVyYXRvcl9sZXR0ZXJfb2YiOiAie3tTVFJJTkd9fVt7e0xFVFRFUn19LTFdIiwKICAgICAgICAib3BlcmF0b3JfbHQiOiAiKHt7T1BFUkFORDF9fSA8IHt7T1BFUkFORDJ9fSkiLAogICAgICAgICJvcGVyYXRvcl9tb2QiOiAiKHt7TlVNMX19ICUge3tOVU0yfX0pIiwKICAgICAgICAib3BlcmF0b3JfbXVsdGlwbHkiOiAiKHt7TlVNMX19ICoge3tOVU0yfX0pIiwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICJvcGVyYXRvcl9ub3QiOiAibm90ICh7e09QRVJBTkR9fSkiLAogICAgICAgICJvcGVyYXRvcl9vciI6ICIoe3tPUEVSQU5EMX19IG9yIHt7T1BFUkFORDJ9fSkiLAogICAgICAgICJvcGVyYXRvcl9yb3VuZCI6ICJyb3VuZCh7e05VTX19KSIsCiAgICAgICAgIm9wZXJhdG9yX3N1YnRyYWN0IjogIih7e05VTTF9fSAtIHt7TlVNMn19KSIsCjx8ZmltX2VuZHw+"]
["ec147af7d885313aba2a18d131cd2e8111a2c505-1","ec147af7d885313aba2a18d131cd2e8111a2c505","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zLCBzaHV0aWwsIGdsb2IsIHJlCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IGdsb2IKaW1wb3J0IHN1YnByb2Nlc3MKCgpkZWYgcmVtX2NoZWNrbW9kZWwodGFyZ2V0KToKICByZW1kaXIgPSAnL2NvbnRlbnQvZHJpdmUvTXkgRHJpdmUvQ29sYWJkYXRhL3B5dG9yY2gtQ3ljbGVHQU4tYW5kLXBpeDJwaXgvY2hlY2twb2ludHMve30vJy5mb3JtYXQodGFyZ2V0KQogIGZvciBpIGluIHJhbmdlKDUsIDE5NSwgNSk6CiAgICByZW1maWxlID0gcmVtZGlyKyd7fV9uZXRfRy5wdGgnLmZvcm1hdChpKQogICAgdHJ5OgogICAgICBvcy5yZW1vdmUocmVtZmlsZSkKICAgICAgcHJpbnQoJ1JlbTogJywgcmVtZmlsZSkKICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgIHByaW50KCdObyBleGlzdDogJywgcmVtZmlsZSkKICAgICAgcGFzcyAgCgogICAgcmVtZmlsZSA9IHJlbWRpcisne31fbmV0X0cyLnB0aCcuZm9ybWF0KGkpCiAgICB0cnk6CiAgICAgIG9zLnJlbW92ZShyZW1maWxlKQogICAgICBwcmludCgnUmVtOiAnLCByZW1maWxlKQogICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgcHJpbnQoJ05vIGV4aXN0OiAnLCByZW1maWxlKQogICAgICBwYXNzICAKCgpkZWYgZXZhbF9kYXRhKHRhcmdldCwgZG9jb3B5PVRydWUpOgogIHRndGRpciA9ICIvY29udGVudC9kcml2ZS9NeSBEcml2ZS9Db2xhYmRhdGEvcHl0b3JjaC1DeWNsZUdBTi1hbmQtcGl4MnBpeC9yZXN1bHRzL3t9L3Rlc3RfbGF0ZXN0L2ltYWdlcy8iLmZvcm1hdCh0YXJnZXQpCiAgcHJpbnQoJ1RhcmdldCBEaXJlY3Rvcnk6IHt9Jy5mb3JtYXQodGd0ZGlyKSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojICAgcmVhbG5hbWUgPSAiX3JlYWxfQi5wbmciCiMgICBmYWtlbmFtZSA9ICJfZmFrZV9CLnBuZyIKICByZWFsbmFtZSA9ICJfcmVhbF9CKi5wbmciCiAgZmFrZW5hbWUgPSAiX2Zha2VfQioucG5nIgo8fGZpbV9lbmR8Pg=="]
["ec147af7d885313aba2a18d131cd2e8111a2c505-2","ec147af7d885313aba2a18d131cd2e8111a2c505","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zLCBzaHV0aWwsIGdsb2IsIHJlCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IGdsb2IKaW1wb3J0IHN1YnByb2Nlc3MKCgpkZWYgcmVtX2NoZWNrbW9kZWwodGFyZ2V0KToKICByZW1kaXIgPSAnL2NvbnRlbnQvZHJpdmUvTXkgRHJpdmUvQ29sYWJkYXRhL3B5dG9yY2gtQ3ljbGVHQU4tYW5kLXBpeDJwaXgvY2hlY2twb2ludHMve30vJy5mb3JtYXQodGFyZ2V0KQogIGZvciBpIGluIHJhbmdlKDUsIDE5NSwgNSk6CiAgICByZW1maWxlID0gcmVtZGlyKyd7fV9uZXRfRy5wdGgnLmZvcm1hdChpKQogICAgdHJ5OgogICAgICBvcy5yZW1vdmUocmVtZmlsZSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICBwcmludCgnUmVtOiAnLCByZW1maWxlKQo8fGZpbV9lbmR8Pg=="]
["a20ccbd5f5f5440c2b259dcbcdf664a4ba851f69-1","a20ccbd5f5f5440c2b259dcbcdf664a4ba851f69","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBpbwpmcm9tIHNldHVwdG9vbHMgaW1wb3J0IHNldHVwLCBmaW5kX3BhY2thZ2VzClBBQ0tBR0VTID0gZmluZF9wYWNrYWdlcygpCgojIEdldCB2ZXJzaW9uIGFuZCByZWxlYXNlIGluZm8sIHdoaWNoIGlzIGFsbCBzdG9yZWQgaW4gbWV0ZW9fc2kvdmVyc2lvbi5weQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CnZlcl9maWxlID0gb3MucGF0aC5qb2luKCdtZXRlb19zaScsICd2ZXJzaW9uLnB5JykKd2l0aCBvcGVuKHZlcl9maWxlKSBhcyBmOgogICAgZXhlYyhmLnJlYWQoKSkKCjx8ZmltX2VuZHw+"]
["a20ccbd5f5f5440c2b259dcbcdf664a4ba851f69-2","a20ccbd5f5f5440c2b259dcbcdf664a4ba851f69","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCjx8ZmltX2hvbGV8PgojIEdldCB2ZXJzaW9uIGFuZCByZWxlYXNlIGluZm8sIHdoaWNoIGlzIGFsbCBzdG9yZWQgaW4gbWV0ZW9fc2kvdmVyc2lvbi5weQp2ZXJfZmlsZSA9IG9zLnBhdGguam9pbignbWV0ZW9fc2knLCAndmVyc2lvbi5weScpCndpdGggb3Blbih2ZXJfZmlsZSkgYXMgZjoKICAgIGV4ZWMoZi5yZWFkKCkpCgp0aGlzX2RpcmVjdG9yeSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQp3aXRoIGlvLm9wZW4ob3MucGF0aC5qb2luKHRoaXNfZGlyZWN0b3J5LCAnUkVBRE1FLm1kJyksIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CiAgICBsb25nX2Rlc2NyaXB0aW9uID0gZi5yZWFkKCkKCm9wdHMgPSBkaWN0KG5hbWU9TkFNRSwKICAgICAgICAgICAgbWFpbnRhaW5lcj1NQUlOVEFJTkVSLAogICAgICAgICAgICBtYWludGFpbmVyX2VtYWlsPU1BSU5UQUlORVJfRU1BSUwsCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPURFU0NSSVBUSU9OLAogICAgICAgICAgICBsb25nX2Rlc2NyaXB0aW9uID0gbG9uZ19kZXNjcmlwdGlvbiwKICAgICAgICAgICAgbG9uZ19kZXNjcmlwdGlvbl9jb250ZW50X3R5cGUgPSAndGV4dC9tYXJrZG93bicsCiAgICAgICAgICAgIHVybD1VUkwsCiAgICAgICAgICAgIGRvd25sb2FkX3VybD1ET1dOTE9BRF9VUkwsCiAgICAgICAgICAgIGxpY2Vuc2U9TElDRU5TRSwKICAgICAgICAgICAgY2xhc3NpZmllcnM9Q0xBU1NJRklFUlMsCiAgICAgICAgICAgIGF1dGhvcj1BVVRIT1IsCiAgICAgICAgICAgIGF1dGhvcl9lbWFpbD1BVVRIT1JfRU1BSUwsCiAgICAgICAgICAgIHBsYXRmb3Jtcz1QTEFURk9STVMsCiAgICAgICAgICAgIHZlcnNpb249VkVSU0lPTiwKICAgICAgICAgICAgcGFja2FnZXM9UEFDS0FHRVMsCiAgICAgICAgICAgIHBhY2thZ2VfZGF0YT1QQUNLQUdFX0RBVEEsCiAgICAgICAgICAgIGluc3RhbGxfcmVxdWlyZXM9UkVRVUlSRVMsCiAgICAgICAgICAgIHJlcXVpcmVzPVJFUVVJUkVTKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBzZXR1cCgqKm9wdHMpCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBpbwpmcm9tIHNldHVwdG9vbHMgaW1wb3J0IHNldHVwLCBmaW5kX3BhY2thZ2VzClBBQ0tBR0VTID0gZmluZF9wYWNrYWdlcygpCgo8fGZpbV9lbmR8Pg=="]
["a20ccbd5f5f5440c2b259dcbcdf664a4ba851f69-3","a20ccbd5f5f5440c2b259dcbcdf664a4ba851f69","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBpbwpmcm9tIHNldHVwdG9vbHMgaW1wb3J0IHNldHVwLCBmaW5kX3BhY2thZ2VzClBBQ0tBR0VTID0gZmluZF9wYWNrYWdlcygpCgojIEdldCB2ZXJzaW9uIGFuZCByZWxlYXNlIGluZm8sIHdoaWNoIGlzIGFsbCBzdG9yZWQgaW4gbWV0ZW9fc2kvdmVyc2lvbi5weQp2ZXJfZmlsZSA9IG9zLnBhdGguam9pbignbWV0ZW9fc2knLCAndmVyc2lvbi5weScpCndpdGggb3Blbih2ZXJfZmlsZSkgYXMgZjoKICAgIGV4ZWMoZi5yZWFkKCkpCgp0aGlzX2RpcmVjdG9yeSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQp3aXRoIGlvLm9wZW4ob3MucGF0aC5qb2luKHRoaXNfZGlyZWN0b3J5LCAnUkVBRE1FLm1kJyksIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CiAgICBsb25nX2Rlc2NyaXB0aW9uID0gZi5yZWFkKCkKCm9wdHMgPSBkaWN0KG5hbWU9TkFNRSwKICAgICAgICAgICAgbWFpbnRhaW5lcj1NQUlOVEFJTkVSLAogICAgICAgICAgICBtYWludGFpbmVyX2VtYWlsPU1BSU5UQUlORVJfRU1BSUwsCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPURFU0NSSVBUSU9OLAogICAgICAgICAgICBsb25nX2Rlc2NyaXB0aW9uID0gbG9uZ19kZXNjcmlwdGlvbiwKICAgICAgICAgICAgbG9uZ19kZXNjcmlwdGlvbl9jb250ZW50X3R5cGUgPSAndGV4dC9tYXJrZG93bicsCiAgICAgICAgICAgIHVybD1VUkwsCiAgICAgICAgICAgIGRvd25sb2FkX3VybD1ET1dOTE9BRF9VUkwsCiAgICAgICAgICAgIGxpY2Vuc2U9TElDRU5TRSwKICAgICAgICAgICAgY2xhc3NpZmllcnM9Q0xBU1NJRklFUlMsCiAgICAgICAgICAgIGF1dGhvcj1BVVRIT1IsCiAgICAgICAgICAgIGF1dGhvcl9lbWFpbD1BVVRIT1JfRU1BSUwsCiAgICAgICAgICAgIHBsYXRmb3Jtcz1QTEFURk9STVMsCiAgICAgICAgICAgIHZlcnNpb249VkVSU0lPTiwKICAgICAgICAgICAgcGFja2FnZXM9UEFDS0FHRVMsCiAgICAgICAgICAgIHBhY2thZ2VfZGF0YT1QQUNLQUdFX0RBVEEsCiAgICAgICAgICAgIGluc3RhbGxfcmVxdWlyZXM9UkVRVUlSRVMsCiAgICAgICAgICAgIHJlcXVpcmVzPVJFUVVJUkVTKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHNldHVwKCoqb3B0cykKPHxmaW1fZW5kfD4="]
["a20ccbd5f5f5440c2b259dcbcdf664a4ba851f69-4","a20ccbd5f5f5440c2b259dcbcdf664a4ba851f69","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBpbwpmcm9tIHNldHVwdG9vbHMgaW1wb3J0IHNldHVwLCBmaW5kX3BhY2thZ2VzClBBQ0tBR0VTID0gZmluZF9wYWNrYWdlcygpCgojIEdldCB2ZXJzaW9uIGFuZCByZWxlYXNlIGluZm8sIHdoaWNoIGlzIGFsbCBzdG9yZWQgaW4gbWV0ZW9fc2kvdmVyc2lvbi5weQp2ZXJfZmlsZSA9IG9zLnBhdGguam9pbignbWV0ZW9fc2knLCAndmVyc2lvbi5weScpCndpdGggb3Blbih2ZXJfZmlsZSkgYXMgZjoKICAgIGV4ZWMoZi5yZWFkKCkpCgp0aGlzX2RpcmVjdG9yeSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQp3aXRoIGlvLm9wZW4ob3MucGF0aC5qb2luKHRoaXNfZGlyZWN0b3J5LCAnUkVBRE1FLm1kJyksIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CiAgICBsb25nX2Rlc2NyaXB0aW9uID0gZi5yZWFkKCkKCm9wdHMgPSBkaWN0KG5hbWU9TkFNRSwKICAgICAgICAgICAgbWFpbnRhaW5lcj1NQUlOVEFJTkVSLAogICAgICAgICAgICBtYWludGFpbmVyX2VtYWlsPU1BSU5UQUlORVJfRU1BSUwsCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPURFU0NSSVBUSU9OLAogICAgICAgICAgICBsb25nX2Rlc2NyaXB0aW9uID0gbG9uZ19kZXNjcmlwdGlvbiwKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIGNsYXNzaWZpZXJzPUNMQVNTSUZJRVJTLAogICAgICAgICAgICBhdXRob3I9QVVUSE9SLAogICAgICAgICAgICBhdXRob3JfZW1haWw9QVVUSE9SX0VNQUlMLAogICAgICAgICAgICBwbGF0Zm9ybXM9UExBVEZPUk1TLAogICAgICAgICAgICB2ZXJzaW9uPVZFUlNJT04sCiAgICAgICAgICAgIHBhY2thZ2VzPVBBQ0tBR0VTLAogICAgICAgICAgICBwYWNrYWdlX2RhdGE9UEFDS0FHRV9EQVRBLAogICAgICAgICAgICBpbnN0YWxsX3JlcXVpcmVzPVJFUVVJUkVTLAogICAgICAgICAgICByZXF1aXJlcz1SRVFVSVJFUykKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgc2V0dXAoKipvcHRzKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBsb25nX2Rlc2NyaXB0aW9uX2NvbnRlbnRfdHlwZSA9ICd0ZXh0L21hcmtkb3duJywKICAgICAgICAgICAgdXJsPVVSTCwKICAgICAgICAgICAgZG93bmxvYWRfdXJsPURPV05MT0FEX1VSTCwKICAgICAgICAgICAgbGljZW5zZT1MSUNFTlNFLAo8fGZpbV9lbmR8Pg=="]
["973cc60bb2878ad323f5fbd6a739e926b2edb367-1","973cc60bb2878ad323f5fbd6a739e926b2edb367","PHxmaW1fcHJlZml4fD4KIiIiClNjcmlwdHMgY2FsY3VsYXRlcyBsaW5lYXIgcmVncmVzc2lvbiBhbmQgTE9XRVNTIG92ZXIgQXJjdGljIERpcG9sZSBmcm9tIAoxOTQ4LgogCk5vdGVzCi0tLS0tCiAgICBTb3VyY2UgOiBodHRwOi8vd3d3LmVzcmwubm9hYS5nb3YvcHNkL2RhdGEvZ3JpZGRlZC9kYXRhLgogICAgICAgICAgICAgbmNlcC5yZWFuYWx5c2lzLmRlcml2ZWQuaHRtbAogICAgUmVmZXJlbmNlIDogV3UgZXQgYWwuIFsyMDA2XSBhbmQgT3ZlcmxhbmQgZXQgYWwuIFsyMDEyXQogICAgQXV0aG9yIDogWmFjaGFyeSBMYWJlCiAgICBEYXRlICAgOiA3IE9jdG9iZXIgMjAxNgoiIiIKCiMjIyBJbXBvcnQgbW9kdWxlcwppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHNjaXB5LnN0YXRzIGFzIHN0cwppbXBvcnQgcmVhZF9TZWFJY2VUaGlja19QSU9NQVMgYXMgQ1QKaW1wb3J0IHJlYWRfU2VhSWNlQ29uY19QSU9NQVMgYXMgQ0MKaW1wb3J0IGNhbGNfUGlvbWFzQXJlYSBhcyBDQQpmcm9tIGNhbGNfU0lWIGltcG9ydCBzaXZHcmlkCmZyb20gbXBsX3Rvb2xraXRzLmJhc2VtYXAgaW1wb3J0IEJhc2VtYXAKaW1wb3J0IHN0YXRzbW9kZWxzLmFwaSBhcyBzbQoKIyMjIERlZmluZSBkaXJlY3RvcmllcwpkaXJlY3RvcnlkYXRhID0gJy9ob21lL3psYWJlL0RvY3VtZW50cy9SZXNlYXJjaC9TZWFJY2VWYXJpYWJpbGl0eS9EYXRhLycgIApkaXJlY3RvcnlkYXRhMiA9ICcvaG9tZS96bGFiZS9TdXJ0c2V5L3NlYWljZV9vYnMvUElPTUFTLycgIApkaXJlY3RvcnlmaWd1cmUgPSAnL2hvbWUvemxhYmUvRGVza3RvcC8nCgojIyMgRGVmaW5lIHRpbWUgICAgICAgICAgIApub3cgPSBkYXRldGltZS5kYXRldGltZS5ub3coKQpjdXJyZW50bW4gPSBzdHIobm93Lm1vbnRoKQpjdXJyZW50ZHkgPSBzdHIobm93LmRheSkKY3VycmVudHlyID0gc3RyKG5vdy55ZWFyKQpjdXJyZW50dGltZSA9IGN1cnJlbnRtbiArICdfJyArIGN1cnJlbnRkeSArICdfJyArIGN1cnJlbnR5cgp0aXRsZXRpbWUgPSBjdXJyZW50bW4gKyAnLycgKyBjdXJyZW50ZHkgKyAnLycgKyBjdXJyZW50eXIKcHJpbnQgJ1xuJyAnLS0tLVBsb3QgTkNFUCAtICVzLS0tLScgJSB0aXRsZXRpbWUgCgojIyMgQWxvdHQgdGltZSBzZXJpZXMKeWVhcjEgPSAxOTQ4CnllYXIyID0gMjAxNQp5ZWFycyA9IG5wLmFyYW5nZSh5ZWFyMSx5ZWFyMisxLDEpCm1vbnRocyA9IFtyJ0phbicscidGZWInLHInTWFyJyxyJ0FwcicscidNYXknLHInSnVuJyxyJ0p1bCcscidBdWcnLAogICAgICAgICAgcidTZXAnLHInT2N0JyxyJ05vdicscidEZWMnXQogICAgICAgICAgCiMjIyBSZWFkIGluIGRhdGEKc2Vhc29ucyA9IFsnSkZNJywnQU1KJywnSkFTJywnT05EJ10gIAoKI2FkID0gbnAuZW1wdHkoKDQsbGVuKHllYXJzKSkpCiNmb3IgaSBpbiB4cmFuZ2UobGVuKHNlYXNvbnMpKToKIyAgICBmaWxlbmFtZTEgPSAnQURfJXNfJXMlcy50eHQnICUgKHNlYXNvbnNbaV0seWVhcjEseWVhcjIpCiMgICAgYWRbaSw6XSA9IG5wLmdlbmZyb210eHQoZGlyZWN0b3J5ZGF0YSArIGZpbGVuYW1lMSkKIwojICAgIHByaW50ICdSZWFkaW5nIGRhdGEgZmlsZSAlcyEnICUgc2Vhc29uc1tpXQojCiN0aW1leCA9IG5wLmFyYW5nZShsZW4oYWRbMCw6XSkpCiN2YXJ5MSA9IGFkWzAsOl0gCiNzbG9wZTEsaW50ZXJjZXB0MSxyMSxwX3ZhbHVlLHN0ZF9lcnIgPSBzdHMuc3RhdHMubGlucmVncmVzcyh0aW1leCx2YXJ5MSkgCiNsaW5lMSA9IHNsb3BlMSp0aW1leCArIGludGVyY2VwdDEKI3ZhcnkyID0gYWRbMSw6XSAKI3Nsb3BlMixpbnRlcmNlcHQyLHIyLHBfdmFsdWUsc3RkX2VyciA9IHN0cy5zdGF0cy5saW5yZWdyZXNzKHRpbWV4LHZhcnkyKSAKI2xpbmUyID0gc2xvcGUyKnRpbWV4ICsgaW50ZXJjZXB0MgojdmFyeTMgPSBhZFsyLDpdIAojc2xvcGUzLGludGVyY2VwdDMscjMscF92YWx1ZSxzdGRfZXJyID0gc3RzLnN0YXRzLmxpbnJlZ3Jlc3ModGltZXgsdmFyeTMpCiNsaW5lMyA9IHNsb3BlMyp0aW1leCArIGludGVyY2VwdDMgCiN2YXJ5NCA9IGFkWzMsOl0gCiNzbG9wZTQsaW50ZXJjZXB0NCxyNCxwX3ZhbHVlLHN0ZF9lcnIgPSBzdHMuc3RhdHMubGlucmVncmVzcyh0aW1leCx2YXJ5NCkgCiNsaW5lNCA9IHNsb3BlNCp0aW1leCArIGludGVyY2VwdDQKIwojc21vb3RoZWQxID0gc20ubm9ucGFyYW1ldHJpYy5sb3dlc3ModmFyeTEsdGltZXgpCiNzbW9vdGhlZDIgPSBzbS5ub25wYXJhbWV0cmljLmxvd2Vzcyh2YXJ5Mix0aW1leCkKI3Ntb290aGVkMyA9IHNtLm5vbnBhcmFtZXRyaWMubG93ZXNzKHZhcnkzLHRpbWV4KQojc21vb3RoZWQ0ID0gc20ubm9ucGFyYW1ldHJpYy5sb3dlc3ModmFyeTQsdGltZXgpCgojIyMgUGxvdCBQQyB0aW1lIHNlcmllcwojIyMgQWRqdXN0IGF4ZXMgaW4gdGltZSBzZXJpZXMgcGxvdHMgCmRlZiBhZGp1c3Rfc3BpbmVzKGF4LCBzcGluZXMpOgogICAgZm9yIGxvYywgc3BpbmUgaW4gYXguc3BpbmVzLml0ZW1zKCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBpZiBsb2MgaW4gc3BpbmVzOgogICAgICAgICAgICBzcGluZS5zZXRfcG9zaXRpb24oKCdvdXR3YXJkJywgMTApKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNwaW5lLnNldF9jb2xvcignbm9uZScpICAKPHxmaW1fZW5kfD4="]
["973cc60bb2878ad323f5fbd6a739e926b2edb367-2","973cc60bb2878ad323f5fbd6a739e926b2edb367","PHxmaW1fcHJlZml4fD4KIiIiClNjcmlwdHMgY2FsY3VsYXRlcyBsaW5lYXIgcmVncmVzc2lvbiBhbmQgTE9XRVNTIG92ZXIgQXJjdGljIERpcG9sZSBmcm9tIAoxOTQ4LgogCk5vdGVzCi0tLS0tCiAgICBTb3VyY2UgOiBodHRwOi8vd3d3LmVzcmwubm9hYS5nb3YvcHNkL2RhdGEvZ3JpZGRlZC9kYXRhLgogICAgICAgICAgICAgbmNlcC5yZWFuYWx5c2lzLmRlcml2ZWQuaHRtbAogICAgUmVmZXJlbmNlIDogV3UgZXQgYWwuIFsyMDA2XSBhbmQgT3ZlcmxhbmQgZXQgYWwuIFsyMDEyXQogICAgQXV0aG9yIDogWmFjaGFyeSBMYWJlCiAgICBEYXRlICAgOiA3IE9jdG9iZXIgMjAxNgoiIiIKCiMjIyBJbXBvcnQgbW9kdWxlcwppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHNjaXB5LnN0YXRzIGFzIHN0cwppbXBvcnQgcmVhZF9TZWFJY2VUaGlja19QSU9NQVMgYXMgQ1QKaW1wb3J0IHJlYWRfU2VhSWNlQ29uY19QSU9NQVMgYXMgQ0MKaW1wb3J0IGNhbGNfUGlvbWFzQXJlYSBhcyBDQQpmcm9tIGNhbGNfU0lWIGltcG9ydCBzaXZHcmlkCmZyb20gbXBsX3Rvb2xraXRzLmJhc2VtYXAgaW1wb3J0IEJhc2VtYXAKaW1wb3J0IHN0YXRzbW9kZWxzLmFwaSBhcyBzbQoKIyMjIERlZmluZSBkaXJlY3RvcmllcwpkaXJlY3RvcnlkYXRhID0gJy9ob21lL3psYWJlL0RvY3VtZW50cy9SZXNlYXJjaC9TZWFJY2VWYXJpYWJpbGl0eS9EYXRhLycgIApkaXJlY3RvcnlkYXRhMiA9ICcvaG9tZS96bGFiZS9TdXJ0c2V5L3NlYWljZV9vYnMvUElPTUFTLycgIApkaXJlY3RvcnlmaWd1cmUgPSAnL2hvbWUvemxhYmUvRGVza3RvcC8nCgojIyMgRGVmaW5lIHRpbWUgICAgICAgICAgIApub3cgPSBkYXRldGltZS5kYXRldGltZS5ub3coKQpjdXJyZW50bW4gPSBzdHIobm93Lm1vbnRoKQpjdXJyZW50ZHkgPSBzdHIobm93LmRheSkKY3VycmVudHlyID0gc3RyKG5vdy55ZWFyKQpjdXJyZW50dGltZSA9IGN1cnJlbnRtbiArICdfJyArIGN1cnJlbnRkeSArICdfJyArIGN1cnJlbnR5cgp0aXRsZXRpbWUgPSBjdXJyZW50bW4gKyAnLycgKyBjdXJyZW50ZHkgKyAnLycgKyBjdXJyZW50eXIKcHJpbnQgJ1xuJyAnLS0tLVBsb3QgTkNFUCAtICVzLS0tLScgJSB0aXRsZXRpbWUgCgojIyMgQWxvdHQgdGltZSBzZXJpZXMKeWVhcjEgPSAxOTQ4CnllYXIyID0gMjAxNQp5ZWFycyA9IG5wLmFyYW5nZSh5ZWFyMSx5ZWFyMisxLDEpCm1vbnRocyA9IFtyJ0phbicscidGZWInLHInTWFyJyxyJ0FwcicscidNYXknLHInSnVuJyxyJ0p1bCcscidBdWcnLAogICAgICAgICAgcidTZXAnLHInT2N0JyxyJ05vdicscidEZWMnXQogICAgICAgICAgCiMjIyBSZWFkIGluIGRhdGEKc2Vhc29ucyA9IFsnSkZNJywnQU1KJywnSkFTJywnT05EJ10gIAoKI2FkID0gbnAuZW1wdHkoKDQsbGVuKHllYXJzKSkpCiNmb3IgaSBpbiB4cmFuZ2UobGVuKHNlYXNvbnMpKToKIyAgICBmaWxlbmFtZTEgPSAnQURfJXNfJXMlcy50eHQnICUgKHNlYXNvbnNbaV0seWVhcjEseWVhcjIpCiMgICAgYWRbaSw6XSA9IG5wLmdlbmZyb210eHQoZGlyZWN0b3J5ZGF0YSArIGZpbGVuYW1lMSkKIwojICAgIHByaW50ICdSZWFkaW5nIGRhdGEgZmlsZSAlcyEnICUgc2Vhc29uc1tpXQojCiN0aW1leCA9IG5wLmFyYW5nZShsZW4oYWRbMCw6XSkpCiN2YXJ5MSA9IGFkWzAsOl0gCiNzbG9wZTEsaW50ZXJjZXB0MSxyMSxwX3ZhbHVlLHN0ZF9lcnIgPSBzdHMuc3RhdHMubGlucmVncmVzcyh0aW1leCx2YXJ5MSkgCiNsaW5lMSA9IHNsb3BlMSp0aW1leCArIGludGVyY2VwdDEKI3ZhcnkyID0gYWRbMSw6XSAKI3Nsb3BlMixpbnRlcmNlcHQyLHIyLHBfdmFsdWUsc3RkX2VyciA9IHN0cy5zdGF0cy5saW5yZWdyZXNzKHRpbWV4LHZhcnkyKSAKI2xpbmUyID0gc2xvcGUyKnRpbWV4ICsgaW50ZXJjZXB0MgojdmFyeTMgPSBhZFsyLDpdIAojc2xvcGUzLGludGVyY2VwdDMscjMscF92YWx1ZSxzdGRfZXJyID0gc3RzLnN0YXRzLmxpbnJlZ3Jlc3ModGltZXgsdmFyeTMpCiNsaW5lMyA9IHNsb3BlMyp0aW1leCArIGludGVyY2VwdDMgCiN2YXJ5NCA9IGFkWzMsOl0gCiNzbG9wZTQsaW50ZXJjZXB0NCxyNCxwX3ZhbHVlLHN0ZF9lcnIgPSBzdHMuc3RhdHMubGlucmVncmVzcyh0aW1leCx2YXJ5NCkgCiNsaW5lNCA9IHNsb3BlNCp0aW1leCArIGludGVyY2VwdDQKIwojc21vb3RoZWQxID0gc20ubm9ucGFyYW1ldHJpYy5sb3dlc3ModmFyeTEsdGltZXgpCiNzbW9vdGhlZDIgPSBzbS5ub25wYXJhbWV0cmljLmxvd2Vzcyh2YXJ5Mix0aW1leCkKI3Ntb290aGVkMyA9IHNtLm5vbnBhcmFtZXRyaWMubG93ZXNzKHZhcnkzLHRpbWV4KQojc21vb3RoZWQ0ID0gc20ubm9ucGFyYW1ldHJpYy5sb3dlc3ModmFyeTQsdGltZXgpCgojIyMgUGxvdCBQQyB0aW1lIHNlcmllcwojIyMgQWRqdXN0IGF4ZXMgaW4gdGltZSBzZXJpZXMgcGxvdHMgCmRlZiBhZGp1c3Rfc3BpbmVzKGF4LCBzcGluZXMpOgogICAgZm9yIGxvYywgc3BpbmUgaW4gYXguc3BpbmVzLml0ZW1zKCk6CiAgICAgICAgaWYgbG9jIGluIHNwaW5lczoKICAgICAgICAgICAgc3BpbmUuc2V0X3Bvc2l0aW9uKCgnb3V0d2FyZCcsIDEwKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzcGluZS5zZXRfY29sb3IoJ25vbmUnKSAgCiAgICBpZiAnbGVmdCcgaW4gc3BpbmVzOgogICAgICAgIGF4LnlheGlzLnNldF90aWNrc19wb3NpdGlvbignbGVmdCcpCiAgICBlbHNlOgogICAgICAgIGF4LnlheGlzLnNldF90aWNrcyhbXSkKCiAgICBpZiAnYm90dG9tJyBpbiBzcGluZXM6CiAgICAgICAgYXgueGF4aXMuc2V0X3RpY2tzX3Bvc2l0aW9uKCdib3R0b20nKQogICAgZWxzZToKICAgICAgICBheC54YXhpcy5zZXRfdGlja3MoW10pIAogICAgICAgIApwbHQucmMoJ3RleHQnLHVzZXRleD1UcnVlKQpwbHQucmMoJ2ZvbnQnLCoqeydmYW1pbHknOidzYW5zLXNlcmlmJywnc2Fucy1zZXJpZic6WydBdmFudCBHYXJkZSddfSkgCgpmaWcgPSBwbHQuZmlndXJlKCkKYXggPSBwbHQuc3VicGxvdCgyMjEpCgojIyMgQWRqdXN0IGF4ZXMgc3BpbmVzCmFkanVzdF9zcGluZXMoYXgsIFsnbGVmdCcsICdib3R0b20nXSkKYXguc3BpbmVzWyd0b3AnXS5zZXRfY29sb3IoJ25vbmUnKQpheC5zcGluZXNbJ3JpZ2h0J10uc2V0X2NvbG9yKCdub25lJykKYXguc3BpbmVzWydsZWZ0J10uc2V0X2NvbG9yKCdkYXJrZ3JleScpCmF4LnNwaW5lc1snYm90dG9tJ10uc2V0X2NvbG9yKCdkYXJrZ3JleScpCmF4LnRpY2tfcGFyYW1zKCdib3RoJyxsZW5ndGg9NCx3aWR0aD0xLjUsd2hpY2g9J21ham9yJyxjb2xvcj0nZGFya2dyZXknKQoKemVyb3MgPSBbMF0gKiBsZW4oYWRbMCw6XSkKCnBsdC5wbG90KHplcm9zLGxpbmV3aWR0aD0xLGNvbG9yPSdrJyxsaW5lc3R5bGU9Jy0nLHpvcmRlcj0xKQoKcGx0LmJhcihucC5hcmFuZ2UobGVuKGFkWzBdKSktMC40LGFkWzBdLGNvbG9yPSdsaWdodHNreWJsdWUnLGVkZ2Vjb2xvcj0nbGlnaHRza3libHVlJykKcGx0LnBsb3QodGltZXgsbGluZTEsem9yZGVyPTEsbGluZXdpZHRoPTIsY29sb3I9J2luZGlhbnJlZCcpCnBsdC5wbG90KHNtb290aGVkMVs6LDBdLHNtb290aGVkMVs6LDFdLGNvbG9yPSdkYXJrc2xhdGVibHVlJyx6b3JkZXI9OCxsaW5ld2lkdGg9MS4yKQoKI3BsdC5heHZsaW5lKG5wLndoZXJlKHllYXJzID09IDIwMDcpWzBdLGNvbG9yPSdrJyxsaW5lc3R5bGU9Jy0tJywKIyAgICAgICAgICAgIGxpbmV3aWR0aD0wLjUpCiNwbHQuYXh2bGluZShucC53aGVyZSh5ZWFycyA9PSAyMDEyKVswXSxjb2xvcj0naycsbGluZXN0eWxlPSctLScsCiMgICAgICAgICAgICBsaW5ld2lkdGg9MC41KQoKcGx0Lnh0aWNrcyhucC5hcmFuZ2UoMCx5ZWFyMi15ZWFyMSszLDEwKSwKICAgICAgICAgICBtYXAoc3RyLG5wLmFyYW5nZSh5ZWFyMSx5ZWFyMiszLDEwKSksZm9udHNpemU9OCkKcGx0LnhsaW0oWzAseWVhcjIteWVhcjErMV0pCgpwbHQueXRpY2tzKG5wLmFyYW5nZSgtMyw0LDEpLG1hcChzdHIsbnAuYXJhbmdlKC0zLDQsMSkpLGZvbnRzaXplPTgpCnBsdC55bGltKFstMywzXSkKCnBsdC50ZXh0KC0xLjMsMi44NSxyJ1x0ZXh0YmZ7SkZNfScsZm9udHNpemU9MjAsY29sb3I9J2RhcmtncmV5JykKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKYXggPSBwbHQuc3VicGxvdCgyMjIpCgojIyMgQWRqdXN0IGF4ZXMgc3BpbmVzCmFkanVzdF9zcGluZXMoYXgsIFsnbGVmdCcsICdib3R0b20nXSkKYXguc3BpbmVzWyd0b3AnXS5zZXRfY29sb3IoJ25vbmUnKQpheC5zcGluZXNbJ3JpZ2h0J10uc2V0X2NvbG9yKCdub25lJykKYXguc3BpbmVzWydsZWZ0J10uc2V0X2NvbG9yKCdkYXJrZ3JleScpCmF4LnNwaW5lc1snYm90dG9tJ10uc2V0X2NvbG9yKCdkYXJrZ3JleScpCmF4LnRpY2tfcGFyYW1zKCdib3RoJyxsZW5ndGg9NCx3aWR0aD0xLjUsd2hpY2g9J21ham9yJyxjb2xvcj0nZGFya2dyZXknKQoKcGx0LnBsb3QoemVyb3MsbGluZXdpZHRoPTEsY29sb3I9J2snLGxpbmVzdHlsZT0nLScsem9yZGVyPTEpCgpwbHQuYmFyKG5wLmFyYW5nZShsZW4oYWRbMV0pKS0wLjQsYWRbMV0sY29sb3I9J2xpZ2h0c2t5Ymx1ZScsZWRnZWNvbG9yPSdsaWdodHNreWJsdWUnKQpwbHQucGxvdCh0aW1leCxsaW5lMix6b3JkZXI9MSxsaW5ld2lkdGg9Mixjb2xvcj0naW5kaWFucmVkJykKcGx0LnBsb3Qoc21vb3RoZWQyWzosMF0sc21vb3RoZWQyWzosMV0sY29sb3I9J2RhcmtzbGF0ZWJsdWUnLHpvcmRlcj04LGxpbmV3aWR0aD0xLjIpCgojcGx0LmF4dmxpbmUobnAud2hlcmUoeWVhcnMgPT0gMjAwNylbMF0sY29sb3I9J2snLGxpbmVzdHlsZT0nLS0nLAojICAgICAgICAgICAgbGluZXdpZHRoPTAuNSkKI3BsdC5heHZsaW5lKG5wLndoZXJlKHllYXJzID09IDIwMTIpWzBdLGNvbG9yPSdrJyxsaW5lc3R5bGU9Jy0tJywKIyAgICAgICAgICAgIGxpbmV3aWR0aD0wLjUpCgpwbHQueHRpY2tzKG5wLmFyYW5nZSgwLHllYXIyLXllYXIxKzMsMTApLAogICAgICAgICAgIG1hcChzdHIsbnAuYXJhbmdlKHllYXIxLHllYXIyKzMsMTApKSxmb250c2l6ZT04KQpwbHQueGxpbShbMCx5ZWFyMi15ZWFyMSsxXSkKCnBsdC55dGlja3MobnAuYXJhbmdlKC0zLDQsMSksbWFwKHN0cixucC5hcmFuZ2UoLTMsNCwxKSksZm9udHNpemU9OCkKcGx0LnlsaW0oWy0zLDNdKQoKcGx0LnRleHQoLTEuMywyLjg1LHInXHRleHRiZntBTUp9Jyxmb250c2l6ZT0yMCxjb2xvcj0nZGFya2dyZXknKQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpheCA9IHBsdC5zdWJwbG90KDIyMykKCiMjIyBBZGp1c3QgYXhlcyBzcGluZXMKYWRqdXN0X3NwaW5lcyhheCwgWydsZWZ0JywgJ2JvdHRvbSddKQpheC5zcGluZXNbJ3RvcCddLnNldF9jb2xvcignbm9uZScpCmF4LnNwaW5lc1sncmlnaHQnXS5zZXRfY29sb3IoJ25vbmUnKQpheC5zcGluZXNbJ2xlZnQnXS5zZXRfY29sb3IoJ2RhcmtncmV5JykKYXguc3BpbmVzWydib3R0b20nXS5zZXRfY29sb3IoJ2RhcmtncmV5JykKYXgudGlja19wYXJhbXMoJ2JvdGgnLGxlbmd0aD00LHdpZHRoPTEuNSx3aGljaD0nbWFqb3InLGNvbG9yPSdkYXJrZ3JleScpCgpwbHQucGxvdCh6ZXJvcyxsaW5ld2lkdGg9MSxjb2xvcj0naycsbGluZXN0eWxlPSctJyx6b3JkZXI9MSkKCnBsdC5iYXIobnAuYXJhbmdlKGxlbihhZFsyXSkpLTAuNCxhZFsyXSxjb2xvcj0nbGlnaHRza3libHVlJyxlZGdlY29sb3I9J2xpZ2h0c2t5Ymx1ZScpCnBsdC5wbG90KHRpbWV4LGxpbmUzLHpvcmRlcj0xLGxpbmV3aWR0aD0yLGNvbG9yPSdpbmRpYW5yZWQnKQpwbHQucGxvdChzbW9vdGhlZDNbOiwwXSxzbW9vdGhlZDNbOiwxXSxjb2xvcj0nZGFya3NsYXRlYmx1ZScsem9yZGVyPTgsbGluZXdpZHRoPTEuMikKCiNwbHQuYXh2bGluZShucC53aGVyZSh5ZWFycyA9PSAyMDA3KVswXSxjb2xvcj0naycsbGluZXN0eWxlPSctLScsCiMgICAgICAgICAgICBsaW5ld2lkdGg9MC41KQojcGx0LmF4dmxpbmUobnAud2hlcmUoeWVhcnMgPT0gMjAxMilbMF0sY29sb3I9J2snLGxpbmVzdHlsZT0nLS0nLAojICAgICAgICAgICAgbGluZXdpZHRoPTAuNSkKCnBsdC54dGlja3MobnAuYXJhbmdlKDAseWVhcjIteWVhcjErMywxMCksCiAgICAgICAgICAgbWFwKHN0cixucC5hcmFuZ2UoeWVhcjEseWVhcjIrMywxMCkpLGZvbnRzaXplPTgpCnBsdC54bGltKFswLHllYXIyLXllYXIxKzFdKQoKcGx0Lnl0aWNrcyhucC5hcmFuZ2UoLTMsNCwxKSxtYXAoc3RyLG5wLmFyYW5nZSgtMyw0LDEpKSxmb250c2l6ZT04KQpwbHQueWxpbShbLTMsM10pCgpwbHQudGV4dCgtMS4zLDIuODUscidcdGV4dGJme0pBU30nLGZvbnRzaXplPTIwLGNvbG9yPSdkYXJrZ3JleScpCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmF4ID0gcGx0LnN1YnBsb3QoMjI0KQoKIyMjIEFkanVzdCBheGVzIHNwaW5lcwphZGp1c3Rfc3BpbmVzKGF4LCBbJ2xlZnQnLCAnYm90dG9tJ10pCmF4LnNwaW5lc1sndG9wJ10uc2V0X2NvbG9yKCdub25lJykKYXguc3BpbmVzWydyaWdodCddLnNldF9jb2xvcignbm9uZScpCjx8ZmltX2hvbGV8PgpwbHQucGxvdCh6ZXJvcyxsaW5ld2lkdGg9MSxjb2xvcj0naycsbGluZXN0eWxlPSctJyx6b3JkZXI9MSkKCnBsdC5iYXIobnAuYXJhbmdlKGxlbihhZFszXSkpLTAuNCxhZFszXSxjb2xvcj0nbGlnaHRza3libHVlJyxlZGdlY29sb3I9J2xpZ2h0c2t5Ymx1ZScpCnBsdC5wbG90KHRpbWV4LGxpbmU0LHpvcmRlcj0xLGxpbmV3aWR0aD0yLGNvbG9yPSdpbmRpYW5yZWQnKQpwbHQucGxvdChzbW9vdGhlZDRbOiwwXSxzbW9vdGhlZDRbOiwxXSxjb2xvcj0nZGFya3NsYXRlYmx1ZScsem9yZGVyPTgsbGluZXdpZHRoPTEuMikKCiNwbHQuYXh2bGluZShucC53aGVyZSh5ZWFycyA9PSAyMDA3KVswXSxjb2xvcj0naycsbGluZXN0eWxlPSctLScsCiMgICAgICAgICAgICBsaW5ld2lkdGg9MC41KQojcGx0LmF4dmxpbmUobnAud2hlcmUoeWVhcnMgPT0gMjAxMilbMF0sY29sb3I9J2snLGxpbmVzdHlsZT0nLS0nLAojICAgICAgICAgICAgbGluZXdpZHRoPTAuNSkKCnBsdC54dGlja3MobnAuYXJhbmdlKDAseWVhcjIteWVhcjErMywxMCksCiAgICAgICAgICAgbWFwKHN0cixucC5hcmFuZ2UoeWVhcjEseWVhcjIrMywxMCkpLGZvbnRzaXplPTgpCnBsdC54bGltKFswLHllYXIyLXllYXIxKzFdKQoKcGx0Lnl0aWNrcyhucC5hcmFuZ2UoLTMsNCwxKSxtYXAoc3RyLG5wLmFyYW5nZSgtMyw0LDEpKSxmb250c2l6ZT04KQpwbHQueWxpbShbLTMsM10pCgpwbHQudGV4dCgtMS4zLDIuODUscidcdGV4dGJme09ORH0nLGZvbnRzaXplPTIwLGNvbG9yPSdkYXJrZ3JleScpCgoKZmlnLnN1YnBsb3RzX2FkanVzdChoc3BhY2U9MC40KQpwbHQuc2F2ZWZpZyhkaXJlY3RvcnlmaWd1cmUgKyAnQURfdGltZXNlcmllc180ODE1LnBuZycsZHBpPTMwMCkKPHxmaW1fc3VmZml4fD4KYXguc3BpbmVzWydsZWZ0J10uc2V0X2NvbG9yKCdkYXJrZ3JleScpCmF4LnNwaW5lc1snYm90dG9tJ10uc2V0X2NvbG9yKCdkYXJrZ3JleScpCmF4LnRpY2tfcGFyYW1zKCdib3RoJyxsZW5ndGg9NCx3aWR0aD0xLjUsd2hpY2g9J21ham9yJyxjb2xvcj0nZGFya2dyZXknKQoKPHxmaW1fZW5kfD4="]
["973cc60bb2878ad323f5fbd6a739e926b2edb367-3","973cc60bb2878ad323f5fbd6a739e926b2edb367","PHxmaW1fcHJlZml4fD4KIiIiClNjcmlwdHMgY2FsY3VsYXRlcyBsaW5lYXIgcmVncmVzc2lvbiBhbmQgTE9XRVNTIG92ZXIgQXJjdGljIERpcG9sZSBmcm9tIAoxOTQ4LgogCk5vdGVzCi0tLS0tCiAgICBTb3VyY2UgOiBodHRwOi8vd3d3LmVzcmwubm9hYS5nb3YvcHNkL2RhdGEvZ3JpZGRlZC9kYXRhLgogICAgICAgICAgICAgbmNlcC5yZWFuYWx5c2lzLmRlcml2ZWQuaHRtbAogICAgUmVmZXJlbmNlIDogV3UgZXQgYWwuIFsyMDA2XSBhbmQgT3ZlcmxhbmQgZXQgYWwuIFsyMDEyXQogICAgQXV0aG9yIDogWmFjaGFyeSBMYWJlCiAgICBEYXRlICAgOiA3IE9jdG9iZXIgMjAxNgoiIiIKCiMjIyBJbXBvcnQgbW9kdWxlcwppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHNjaXB5LnN0YXRzIGFzIHN0cwppbXBvcnQgcmVhZF9TZWFJY2VUaGlja19QSU9NQVMgYXMgQ1QKaW1wb3J0IHJlYWRfU2VhSWNlQ29uY19QSU9NQVMgYXMgQ0MKaW1wb3J0IGNhbGNfUGlvbWFzQXJlYSBhcyBDQQpmcm9tIGNhbGNfU0lWIGltcG9ydCBzaXZHcmlkCmZyb20gbXBsX3Rvb2xraXRzLmJhc2VtYXAgaW1wb3J0IEJhc2VtYXAKaW1wb3J0IHN0YXRzbW9kZWxzLmFwaSBhcyBzbQoKIyMjIERlZmluZSBkaXJlY3RvcmllcwpkaXJlY3RvcnlkYXRhID0gJy9ob21lL3psYWJlL0RvY3VtZW50cy9SZXNlYXJjaC9TZWFJY2VWYXJpYWJpbGl0eS9EYXRhLycgIApkaXJlY3RvcnlkYXRhMiA9ICcvaG9tZS96bGFiZS9TdXJ0c2V5L3NlYWljZV9vYnMvUElPTUFTLycgIApkaXJlY3RvcnlmaWd1cmUgPSAnL2hvbWUvemxhYmUvRGVza3RvcC8nCgojIyMgRGVmaW5lIHRpbWUgICAgICAgICAgIApub3cgPSBkYXRldGltZS5kYXRldGltZS5ub3coKQpjdXJyZW50bW4gPSBzdHIobm93Lm1vbnRoKQpjdXJyZW50ZHkgPSBzdHIobm93LmRheSkKY3VycmVudHlyID0gc3RyKG5vdy55ZWFyKQpjdXJyZW50dGltZSA9IGN1cnJlbnRtbiArICdfJyArIGN1cnJlbnRkeSArICdfJyArIGN1cnJlbnR5cgp0aXRsZXRpbWUgPSBjdXJyZW50bW4gKyAnLycgKyBjdXJyZW50ZHkgKyAnLycgKyBjdXJyZW50eXIKcHJpbnQgJ1xuJyAnLS0tLVBsb3QgTkNFUCAtICVzLS0tLScgJSB0aXRsZXRpbWUgCgojIyMgQWxvdHQgdGltZSBzZXJpZXMKeWVhcjEgPSAxOTQ4CnllYXIyID0gMjAxNQp5ZWFycyA9IG5wLmFyYW5nZSh5ZWFyMSx5ZWFyMisxLDEpCm1vbnRocyA9IFtyJ0phbicscidGZWInLHInTWFyJyxyJ0FwcicscidNYXknLHInSnVuJyxyJ0p1bCcscidBdWcnLAogICAgICAgICAgcidTZXAnLHInT2N0JyxyJ05vdicscidEZWMnXQogICAgICAgICAgCiMjIyBSZWFkIGluIGRhdGEKc2Vhc29ucyA9IFsnSkZNJywnQU1KJywnSkFTJywnT05EJ10gIAoKI2FkID0gbnAuZW1wdHkoKDQsbGVuKHllYXJzKSkpCiNmb3IgaSBpbiB4cmFuZ2UobGVuKHNlYXNvbnMpKToKIyAgICBmaWxlbmFtZTEgPSAnQURfJXNfJXMlcy50eHQnICUgKHNlYXNvbnNbaV0seWVhcjEseWVhcjIpCiMgICAgYWRbaSw6XSA9IG5wLmdlbmZyb210eHQoZGlyZWN0b3J5ZGF0YSArIGZpbGVuYW1lMSkKIwojICAgIHByaW50ICdSZWFkaW5nIGRhdGEgZmlsZSAlcyEnICUgc2Vhc29uc1tpXQojCiN0aW1leCA9IG5wLmFyYW5nZShsZW4oYWRbMCw6XSkpCiN2YXJ5MSA9IGFkWzAsOl0gCiNzbG9wZTEsaW50ZXJjZXB0MSxyMSxwX3ZhbHVlLHN0ZF9lcnIgPSBzdHMuc3RhdHMubGlucmVncmVzcyh0aW1leCx2YXJ5MSkgCiNsaW5lMSA9IHNsb3BlMSp0aW1leCArIGludGVyY2VwdDEKI3ZhcnkyID0gYWRbMSw6XSAKI3Nsb3BlMixpbnRlcmNlcHQyLHIyLHBfdmFsdWUsc3RkX2VyciA9IHN0cy5zdGF0cy5saW5yZWdyZXNzKHRpbWV4LHZhcnkyKSAKI2xpbmUyID0gc2xvcGUyKnRpbWV4ICsgaW50ZXJjZXB0MgojdmFyeTMgPSBhZFsyLDpdIAojc2xvcGUzLGludGVyY2VwdDMscjMscF92YWx1ZSxzdGRfZXJyID0gc3RzLnN0YXRzLmxpbnJlZ3Jlc3ModGltZXgsdmFyeTMpCiNsaW5lMyA9IHNsb3BlMyp0aW1leCArIGludGVyY2VwdDMgCiN2YXJ5NCA9IGFkWzMsOl0gCiNzbG9wZTQsaW50ZXJjZXB0NCxyNCxwX3ZhbHVlLHN0ZF9lcnIgPSBzdHMuc3RhdHMubGlucmVncmVzcyh0aW1leCx2YXJ5NCkgCiNsaW5lNCA9IHNsb3BlNCp0aW1leCArIGludGVyY2VwdDQKIwojc21vb3RoZWQxID0gc20ubm9ucGFyYW1ldHJpYy5sb3dlc3ModmFyeTEsdGltZXgpCiNzbW9vdGhlZDIgPSBzbS5ub25wYXJhbWV0cmljLmxvd2Vzcyh2YXJ5Mix0aW1leCkKI3Ntb290aGVkMyA9IHNtLm5vbnBhcmFtZXRyaWMubG93ZXNzKHZhcnkzLHRpbWV4KQojc21vb3RoZWQ0ID0gc20ubm9ucGFyYW1ldHJpYy5sb3dlc3ModmFyeTQsdGltZXgpCgojIyMgUGxvdCBQQyB0aW1lIHNlcmllcwojIyMgQWRqdXN0IGF4ZXMgaW4gdGltZSBzZXJpZXMgcGxvdHMgCmRlZiBhZGp1c3Rfc3BpbmVzKGF4LCBzcGluZXMpOgogICAgZm9yIGxvYywgc3BpbmUgaW4gYXguc3BpbmVzLml0ZW1zKCk6CiAgICAgICAgaWYgbG9jIGluIHNwaW5lczoKICAgICAgICAgICAgc3BpbmUuc2V0X3Bvc2l0aW9uKCgnb3V0d2FyZCcsIDEwKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzcGluZS5zZXRfY29sb3IoJ25vbmUnKSAgCiAgICBpZiAnbGVmdCcgaW4gc3BpbmVzOgogICAgICAgIGF4LnlheGlzLnNldF90aWNrc19wb3NpdGlvbignbGVmdCcpCiAgICBlbHNlOgogICAgICAgIGF4LnlheGlzLnNldF90aWNrcyhbXSkKCiAgICBpZiAnYm90dG9tJyBpbiBzcGluZXM6CiAgICAgICAgYXgueGF4aXMuc2V0X3RpY2tzX3Bvc2l0aW9uKCdib3R0b20nKQo8fGZpbV9ob2xlfD4KcGx0LnJjKCd0ZXh0Jyx1c2V0ZXg9VHJ1ZSkKcGx0LnJjKCdmb250JywqKnsnZmFtaWx5Jzonc2Fucy1zZXJpZicsJ3NhbnMtc2VyaWYnOlsnQXZhbnQgR2FyZGUnXX0pIAoKZmlnID0gcGx0LmZpZ3VyZSgpCmF4ID0gcGx0LnN1YnBsb3QoMjIxKQoKIyMjIEFkanVzdCBheGVzIHNwaW5lcwphZGp1c3Rfc3BpbmVzKGF4LCBbJ2xlZnQnLCAnYm90dG9tJ10pCmF4LnNwaW5lc1sndG9wJ10uc2V0X2NvbG9yKCdub25lJykKYXguc3BpbmVzWydyaWdodCddLnNldF9jb2xvcignbm9uZScpCmF4LnNwaW5lc1snbGVmdCddLnNldF9jb2xvcignZGFya2dyZXknKQpheC5zcGluZXNbJ2JvdHRvbSddLnNldF9jb2xvcignZGFya2dyZXknKQpheC50aWNrX3BhcmFtcygnYm90aCcsbGVuZ3RoPTQsd2lkdGg9MS41LHdoaWNoPSdtYWpvcicsY29sb3I9J2RhcmtncmV5JykKCnplcm9zID0gWzBdICogbGVuKGFkWzAsOl0pCgpwbHQucGxvdCh6ZXJvcyxsaW5ld2lkdGg9MSxjb2xvcj0naycsbGluZXN0eWxlPSctJyx6b3JkZXI9MSkKCnBsdC5iYXIobnAuYXJhbmdlKGxlbihhZFswXSkpLTAuNCxhZFswXSxjb2xvcj0nbGlnaHRza3libHVlJyxlZGdlY29sb3I9J2xpZ2h0c2t5Ymx1ZScpCnBsdC5wbG90KHRpbWV4LGxpbmUxLHpvcmRlcj0xLGxpbmV3aWR0aD0yLGNvbG9yPSdpbmRpYW5yZWQnKQpwbHQucGxvdChzbW9vdGhlZDFbOiwwXSxzbW9vdGhlZDFbOiwxXSxjb2xvcj0nZGFya3NsYXRlYmx1ZScsem9yZGVyPTgsbGluZXdpZHRoPTEuMikKCiNwbHQuYXh2bGluZShucC53aGVyZSh5ZWFycyA9PSAyMDA3KVswXSxjb2xvcj0naycsbGluZXN0eWxlPSctLScsCiMgICAgICAgICAgICBsaW5ld2lkdGg9MC41KQojcGx0LmF4dmxpbmUobnAud2hlcmUoeWVhcnMgPT0gMjAxMilbMF0sY29sb3I9J2snLGxpbmVzdHlsZT0nLS0nLAojICAgICAgICAgICAgbGluZXdpZHRoPTAuNSkKCnBsdC54dGlja3MobnAuYXJhbmdlKDAseWVhcjIteWVhcjErMywxMCksCiAgICAgICAgICAgbWFwKHN0cixucC5hcmFuZ2UoeWVhcjEseWVhcjIrMywxMCkpLGZvbnRzaXplPTgpCnBsdC54bGltKFswLHllYXIyLXllYXIxKzFdKQoKcGx0Lnl0aWNrcyhucC5hcmFuZ2UoLTMsNCwxKSxtYXAoc3RyLG5wLmFyYW5nZSgtMyw0LDEpKSxmb250c2l6ZT04KQpwbHQueWxpbShbLTMsM10pCgpwbHQudGV4dCgtMS4zLDIuODUscidcdGV4dGJme0pGTX0nLGZvbnRzaXplPTIwLGNvbG9yPSdkYXJrZ3JleScpCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmF4ID0gcGx0LnN1YnBsb3QoMjIyKQoKIyMjIEFkanVzdCBheGVzIHNwaW5lcwphZGp1c3Rfc3BpbmVzKGF4LCBbJ2xlZnQnLCAnYm90dG9tJ10pCmF4LnNwaW5lc1sndG9wJ10uc2V0X2NvbG9yKCdub25lJykKYXguc3BpbmVzWydyaWdodCddLnNldF9jb2xvcignbm9uZScpCmF4LnNwaW5lc1snbGVmdCddLnNldF9jb2xvcignZGFya2dyZXknKQpheC5zcGluZXNbJ2JvdHRvbSddLnNldF9jb2xvcignZGFya2dyZXknKQpheC50aWNrX3BhcmFtcygnYm90aCcsbGVuZ3RoPTQsd2lkdGg9MS41LHdoaWNoPSdtYWpvcicsY29sb3I9J2RhcmtncmV5JykKCnBsdC5wbG90KHplcm9zLGxpbmV3aWR0aD0xLGNvbG9yPSdrJyxsaW5lc3R5bGU9Jy0nLHpvcmRlcj0xKQoKcGx0LmJhcihucC5hcmFuZ2UobGVuKGFkWzFdKSktMC40LGFkWzFdLGNvbG9yPSdsaWdodHNreWJsdWUnLGVkZ2Vjb2xvcj0nbGlnaHRza3libHVlJykKcGx0LnBsb3QodGltZXgsbGluZTIsem9yZGVyPTEsbGluZXdpZHRoPTIsY29sb3I9J2luZGlhbnJlZCcpCnBsdC5wbG90KHNtb290aGVkMls6LDBdLHNtb290aGVkMls6LDFdLGNvbG9yPSdkYXJrc2xhdGVibHVlJyx6b3JkZXI9OCxsaW5ld2lkdGg9MS4yKQoKI3BsdC5heHZsaW5lKG5wLndoZXJlKHllYXJzID09IDIwMDcpWzBdLGNvbG9yPSdrJyxsaW5lc3R5bGU9Jy0tJywKIyAgICAgICAgICAgIGxpbmV3aWR0aD0wLjUpCiNwbHQuYXh2bGluZShucC53aGVyZSh5ZWFycyA9PSAyMDEyKVswXSxjb2xvcj0naycsbGluZXN0eWxlPSctLScsCiMgICAgICAgICAgICBsaW5ld2lkdGg9MC41KQoKcGx0Lnh0aWNrcyhucC5hcmFuZ2UoMCx5ZWFyMi15ZWFyMSszLDEwKSwKICAgICAgICAgICBtYXAoc3RyLG5wLmFyYW5nZSh5ZWFyMSx5ZWFyMiszLDEwKSksZm9udHNpemU9OCkKcGx0LnhsaW0oWzAseWVhcjIteWVhcjErMV0pCgpwbHQueXRpY2tzKG5wLmFyYW5nZSgtMyw0LDEpLG1hcChzdHIsbnAuYXJhbmdlKC0zLDQsMSkpLGZvbnRzaXplPTgpCnBsdC55bGltKFstMywzXSkKCnBsdC50ZXh0KC0xLjMsMi44NSxyJ1x0ZXh0YmZ7QU1KfScsZm9udHNpemU9MjAsY29sb3I9J2RhcmtncmV5JykKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKYXggPSBwbHQuc3VicGxvdCgyMjMpCgojIyMgQWRqdXN0IGF4ZXMgc3BpbmVzCmFkanVzdF9zcGluZXMoYXgsIFsnbGVmdCcsICdib3R0b20nXSkKYXguc3BpbmVzWyd0b3AnXS5zZXRfY29sb3IoJ25vbmUnKQpheC5zcGluZXNbJ3JpZ2h0J10uc2V0X2NvbG9yKCdub25lJykKYXguc3BpbmVzWydsZWZ0J10uc2V0X2NvbG9yKCdkYXJrZ3JleScpCmF4LnNwaW5lc1snYm90dG9tJ10uc2V0X2NvbG9yKCdkYXJrZ3JleScpCmF4LnRpY2tfcGFyYW1zKCdib3RoJyxsZW5ndGg9NCx3aWR0aD0xLjUsd2hpY2g9J21ham9yJyxjb2xvcj0nZGFya2dyZXknKQoKcGx0LnBsb3QoemVyb3MsbGluZXdpZHRoPTEsY29sb3I9J2snLGxpbmVzdHlsZT0nLScsem9yZGVyPTEpCgpwbHQuYmFyKG5wLmFyYW5nZShsZW4oYWRbMl0pKS0wLjQsYWRbMl0sY29sb3I9J2xpZ2h0c2t5Ymx1ZScsZWRnZWNvbG9yPSdsaWdodHNreWJsdWUnKQpwbHQucGxvdCh0aW1leCxsaW5lMyx6b3JkZXI9MSxsaW5ld2lkdGg9Mixjb2xvcj0naW5kaWFucmVkJykKcGx0LnBsb3Qoc21vb3RoZWQzWzosMF0sc21vb3RoZWQzWzosMV0sY29sb3I9J2RhcmtzbGF0ZWJsdWUnLHpvcmRlcj04LGxpbmV3aWR0aD0xLjIpCgojcGx0LmF4dmxpbmUobnAud2hlcmUoeWVhcnMgPT0gMjAwNylbMF0sY29sb3I9J2snLGxpbmVzdHlsZT0nLS0nLAojICAgICAgICAgICAgbGluZXdpZHRoPTAuNSkKI3BsdC5heHZsaW5lKG5wLndoZXJlKHllYXJzID09IDIwMTIpWzBdLGNvbG9yPSdrJyxsaW5lc3R5bGU9Jy0tJywKIyAgICAgICAgICAgIGxpbmV3aWR0aD0wLjUpCgpwbHQueHRpY2tzKG5wLmFyYW5nZSgwLHllYXIyLXllYXIxKzMsMTApLAogICAgICAgICAgIG1hcChzdHIsbnAuYXJhbmdlKHllYXIxLHllYXIyKzMsMTApKSxmb250c2l6ZT04KQpwbHQueGxpbShbMCx5ZWFyMi15ZWFyMSsxXSkKCnBsdC55dGlja3MobnAuYXJhbmdlKC0zLDQsMSksbWFwKHN0cixucC5hcmFuZ2UoLTMsNCwxKSksZm9udHNpemU9OCkKcGx0LnlsaW0oWy0zLDNdKQoKcGx0LnRleHQoLTEuMywyLjg1LHInXHRleHRiZntKQVN9Jyxmb250c2l6ZT0yMCxjb2xvcj0nZGFya2dyZXknKQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpheCA9IHBsdC5zdWJwbG90KDIyNCkKCiMjIyBBZGp1c3QgYXhlcyBzcGluZXMKYWRqdXN0X3NwaW5lcyhheCwgWydsZWZ0JywgJ2JvdHRvbSddKQpheC5zcGluZXNbJ3RvcCddLnNldF9jb2xvcignbm9uZScpCmF4LnNwaW5lc1sncmlnaHQnXS5zZXRfY29sb3IoJ25vbmUnKQpheC5zcGluZXNbJ2xlZnQnXS5zZXRfY29sb3IoJ2RhcmtncmV5JykKYXguc3BpbmVzWydib3R0b20nXS5zZXRfY29sb3IoJ2RhcmtncmV5JykKYXgudGlja19wYXJhbXMoJ2JvdGgnLGxlbmd0aD00LHdpZHRoPTEuNSx3aGljaD0nbWFqb3InLGNvbG9yPSdkYXJrZ3JleScpCgpwbHQucGxvdCh6ZXJvcyxsaW5ld2lkdGg9MSxjb2xvcj0naycsbGluZXN0eWxlPSctJyx6b3JkZXI9MSkKCnBsdC5iYXIobnAuYXJhbmdlKGxlbihhZFszXSkpLTAuNCxhZFszXSxjb2xvcj0nbGlnaHRza3libHVlJyxlZGdlY29sb3I9J2xpZ2h0c2t5Ymx1ZScpCnBsdC5wbG90KHRpbWV4LGxpbmU0LHpvcmRlcj0xLGxpbmV3aWR0aD0yLGNvbG9yPSdpbmRpYW5yZWQnKQpwbHQucGxvdChzbW9vdGhlZDRbOiwwXSxzbW9vdGhlZDRbOiwxXSxjb2xvcj0nZGFya3NsYXRlYmx1ZScsem9yZGVyPTgsbGluZXdpZHRoPTEuMikKCiNwbHQuYXh2bGluZShucC53aGVyZSh5ZWFycyA9PSAyMDA3KVswXSxjb2xvcj0naycsbGluZXN0eWxlPSctLScsCiMgICAgICAgICAgICBsaW5ld2lkdGg9MC41KQojcGx0LmF4dmxpbmUobnAud2hlcmUoeWVhcnMgPT0gMjAxMilbMF0sY29sb3I9J2snLGxpbmVzdHlsZT0nLS0nLAojICAgICAgICAgICAgbGluZXdpZHRoPTAuNSkKCnBsdC54dGlja3MobnAuYXJhbmdlKDAseWVhcjIteWVhcjErMywxMCksCiAgICAgICAgICAgbWFwKHN0cixucC5hcmFuZ2UoeWVhcjEseWVhcjIrMywxMCkpLGZvbnRzaXplPTgpCnBsdC54bGltKFswLHllYXIyLXllYXIxKzFdKQoKcGx0Lnl0aWNrcyhucC5hcmFuZ2UoLTMsNCwxKSxtYXAoc3RyLG5wLmFyYW5nZSgtMyw0LDEpKSxmb250c2l6ZT04KQpwbHQueWxpbShbLTMsM10pCgpwbHQudGV4dCgtMS4zLDIuODUscidcdGV4dGJme09ORH0nLGZvbnRzaXplPTIwLGNvbG9yPSdkYXJrZ3JleScpCgoKZmlnLnN1YnBsb3RzX2FkanVzdChoc3BhY2U9MC40KQpwbHQuc2F2ZWZpZyhkaXJlY3RvcnlmaWd1cmUgKyAnQURfdGltZXNlcmllc180ODE1LnBuZycsZHBpPTMwMCkKPHxmaW1fc3VmZml4fD4KICAgIGVsc2U6CiAgICAgICAgYXgueGF4aXMuc2V0X3RpY2tzKFtdKSAKICAgICAgICAKPHxmaW1fZW5kfD4="]
["973cc60bb2878ad323f5fbd6a739e926b2edb367-4","973cc60bb2878ad323f5fbd6a739e926b2edb367","PHxmaW1fcHJlZml4fD4KIiIiClNjcmlwdHMgY2FsY3VsYXRlcyBsaW5lYXIgcmVncmVzc2lvbiBhbmQgTE9XRVNTIG92ZXIgQXJjdGljIERpcG9sZSBmcm9tIAoxOTQ4LgogCk5vdGVzCi0tLS0tCiAgICBTb3VyY2UgOiBodHRwOi8vd3d3LmVzcmwubm9hYS5nb3YvcHNkL2RhdGEvZ3JpZGRlZC9kYXRhLgogICAgICAgICAgICAgbmNlcC5yZWFuYWx5c2lzLmRlcml2ZWQuaHRtbAogICAgUmVmZXJlbmNlIDogV3UgZXQgYWwuIFsyMDA2XSBhbmQgT3ZlcmxhbmQgZXQgYWwuIFsyMDEyXQogICAgQXV0aG9yIDogWmFjaGFyeSBMYWJlCiAgICBEYXRlICAgOiA3IE9jdG9iZXIgMjAxNgoiIiIKCiMjIyBJbXBvcnQgbW9kdWxlcwppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHNjaXB5LnN0YXRzIGFzIHN0cwppbXBvcnQgcmVhZF9TZWFJY2VUaGlja19QSU9NQVMgYXMgQ1QKaW1wb3J0IHJlYWRfU2VhSWNlQ29uY19QSU9NQVMgYXMgQ0MKaW1wb3J0IGNhbGNfUGlvbWFzQXJlYSBhcyBDQQpmcm9tIGNhbGNfU0lWIGltcG9ydCBzaXZHcmlkCmZyb20gbXBsX3Rvb2xraXRzLmJhc2VtYXAgaW1wb3J0IEJhc2VtYXAKaW1wb3J0IHN0YXRzbW9kZWxzLmFwaSBhcyBzbQoKIyMjIERlZmluZSBkaXJlY3RvcmllcwpkaXJlY3RvcnlkYXRhID0gJy9ob21lL3psYWJlL0RvY3VtZW50cy9SZXNlYXJjaC9TZWFJY2VWYXJpYWJpbGl0eS9EYXRhLycgIApkaXJlY3RvcnlkYXRhMiA9ICcvaG9tZS96bGFiZS9TdXJ0c2V5L3NlYWljZV9vYnMvUElPTUFTLycgIApkaXJlY3RvcnlmaWd1cmUgPSAnL2hvbWUvemxhYmUvRGVza3RvcC8nCgojIyMgRGVmaW5lIHRpbWUgICAgICAgICAgIApub3cgPSBkYXRldGltZS5kYXRldGltZS5ub3coKQpjdXJyZW50bW4gPSBzdHIobm93Lm1vbnRoKQpjdXJyZW50ZHkgPSBzdHIobm93LmRheSkKY3VycmVudHlyID0gc3RyKG5vdy55ZWFyKQpjdXJyZW50dGltZSA9IGN1cnJlbnRtbiArICdfJyArIGN1cnJlbnRkeSArICdfJyArIGN1cnJlbnR5cgp0aXRsZXRpbWUgPSBjdXJyZW50bW4gKyAnLycgKyBjdXJyZW50ZHkgKyAnLycgKyBjdXJyZW50eXIKcHJpbnQgJ1xuJyAnLS0tLVBsb3QgTkNFUCAtICVzLS0tLScgJSB0aXRsZXRpbWUgCgojIyMgQWxvdHQgdGltZSBzZXJpZXMKeWVhcjEgPSAxOTQ4CnllYXIyID0gMjAxNQo8fGZpbV9ob2xlfD4KIyMjIFJlYWQgaW4gZGF0YQpzZWFzb25zID0gWydKRk0nLCdBTUonLCdKQVMnLCdPTkQnXSAgCgojYWQgPSBucC5lbXB0eSgoNCxsZW4oeWVhcnMpKSkKI2ZvciBpIGluIHhyYW5nZShsZW4oc2Vhc29ucykpOgojICAgIGZpbGVuYW1lMSA9ICdBRF8lc18lcyVzLnR4dCcgJSAoc2Vhc29uc1tpXSx5ZWFyMSx5ZWFyMikKIyAgICBhZFtpLDpdID0gbnAuZ2VuZnJvbXR4dChkaXJlY3RvcnlkYXRhICsgZmlsZW5hbWUxKQojCiMgICAgcHJpbnQgJ1JlYWRpbmcgZGF0YSBmaWxlICVzIScgJSBzZWFzb25zW2ldCiMKI3RpbWV4ID0gbnAuYXJhbmdlKGxlbihhZFswLDpdKSkKI3ZhcnkxID0gYWRbMCw6XSAKI3Nsb3BlMSxpbnRlcmNlcHQxLHIxLHBfdmFsdWUsc3RkX2VyciA9IHN0cy5zdGF0cy5saW5yZWdyZXNzKHRpbWV4LHZhcnkxKSAKI2xpbmUxID0gc2xvcGUxKnRpbWV4ICsgaW50ZXJjZXB0MQojdmFyeTIgPSBhZFsxLDpdIAojc2xvcGUyLGludGVyY2VwdDIscjIscF92YWx1ZSxzdGRfZXJyID0gc3RzLnN0YXRzLmxpbnJlZ3Jlc3ModGltZXgsdmFyeTIpIAojbGluZTIgPSBzbG9wZTIqdGltZXggKyBpbnRlcmNlcHQyCiN2YXJ5MyA9IGFkWzIsOl0gCiNzbG9wZTMsaW50ZXJjZXB0MyxyMyxwX3ZhbHVlLHN0ZF9lcnIgPSBzdHMuc3RhdHMubGlucmVncmVzcyh0aW1leCx2YXJ5MykKI2xpbmUzID0gc2xvcGUzKnRpbWV4ICsgaW50ZXJjZXB0MyAKI3Zhcnk0ID0gYWRbMyw6XSAKI3Nsb3BlNCxpbnRlcmNlcHQ0LHI0LHBfdmFsdWUsc3RkX2VyciA9IHN0cy5zdGF0cy5saW5yZWdyZXNzKHRpbWV4LHZhcnk0KSAKI2xpbmU0ID0gc2xvcGU0KnRpbWV4ICsgaW50ZXJjZXB0NAojCiNzbW9vdGhlZDEgPSBzbS5ub25wYXJhbWV0cmljLmxvd2Vzcyh2YXJ5MSx0aW1leCkKI3Ntb290aGVkMiA9IHNtLm5vbnBhcmFtZXRyaWMubG93ZXNzKHZhcnkyLHRpbWV4KQojc21vb3RoZWQzID0gc20ubm9ucGFyYW1ldHJpYy5sb3dlc3ModmFyeTMsdGltZXgpCiNzbW9vdGhlZDQgPSBzbS5ub25wYXJhbWV0cmljLmxvd2Vzcyh2YXJ5NCx0aW1leCkKCiMjIyBQbG90IFBDIHRpbWUgc2VyaWVzCiMjIyBBZGp1c3QgYXhlcyBpbiB0aW1lIHNlcmllcyBwbG90cyAKZGVmIGFkanVzdF9zcGluZXMoYXgsIHNwaW5lcyk6CiAgICBmb3IgbG9jLCBzcGluZSBpbiBheC5zcGluZXMuaXRlbXMoKToKICAgICAgICBpZiBsb2MgaW4gc3BpbmVzOgogICAgICAgICAgICBzcGluZS5zZXRfcG9zaXRpb24oKCdvdXR3YXJkJywgMTApKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNwaW5lLnNldF9jb2xvcignbm9uZScpICAKICAgIGlmICdsZWZ0JyBpbiBzcGluZXM6CiAgICAgICAgYXgueWF4aXMuc2V0X3RpY2tzX3Bvc2l0aW9uKCdsZWZ0JykKICAgIGVsc2U6CiAgICAgICAgYXgueWF4aXMuc2V0X3RpY2tzKFtdKQoKICAgIGlmICdib3R0b20nIGluIHNwaW5lczoKICAgICAgICBheC54YXhpcy5zZXRfdGlja3NfcG9zaXRpb24oJ2JvdHRvbScpCiAgICBlbHNlOgogICAgICAgIGF4LnhheGlzLnNldF90aWNrcyhbXSkgCiAgICAgICAgCnBsdC5yYygndGV4dCcsdXNldGV4PVRydWUpCnBsdC5yYygnZm9udCcsKip7J2ZhbWlseSc6J3NhbnMtc2VyaWYnLCdzYW5zLXNlcmlmJzpbJ0F2YW50IEdhcmRlJ119KSAKCmZpZyA9IHBsdC5maWd1cmUoKQpheCA9IHBsdC5zdWJwbG90KDIyMSkKCiMjIyBBZGp1c3QgYXhlcyBzcGluZXMKYWRqdXN0X3NwaW5lcyhheCwgWydsZWZ0JywgJ2JvdHRvbSddKQpheC5zcGluZXNbJ3RvcCddLnNldF9jb2xvcignbm9uZScpCmF4LnNwaW5lc1sncmlnaHQnXS5zZXRfY29sb3IoJ25vbmUnKQpheC5zcGluZXNbJ2xlZnQnXS5zZXRfY29sb3IoJ2RhcmtncmV5JykKYXguc3BpbmVzWydib3R0b20nXS5zZXRfY29sb3IoJ2RhcmtncmV5JykKYXgudGlja19wYXJhbXMoJ2JvdGgnLGxlbmd0aD00LHdpZHRoPTEuNSx3aGljaD0nbWFqb3InLGNvbG9yPSdkYXJrZ3JleScpCgp6ZXJvcyA9IFswXSAqIGxlbihhZFswLDpdKQoKcGx0LnBsb3QoemVyb3MsbGluZXdpZHRoPTEsY29sb3I9J2snLGxpbmVzdHlsZT0nLScsem9yZGVyPTEpCgpwbHQuYmFyKG5wLmFyYW5nZShsZW4oYWRbMF0pKS0wLjQsYWRbMF0sY29sb3I9J2xpZ2h0c2t5Ymx1ZScsZWRnZWNvbG9yPSdsaWdodHNreWJsdWUnKQpwbHQucGxvdCh0aW1leCxsaW5lMSx6b3JkZXI9MSxsaW5ld2lkdGg9Mixjb2xvcj0naW5kaWFucmVkJykKcGx0LnBsb3Qoc21vb3RoZWQxWzosMF0sc21vb3RoZWQxWzosMV0sY29sb3I9J2RhcmtzbGF0ZWJsdWUnLHpvcmRlcj04LGxpbmV3aWR0aD0xLjIpCgojcGx0LmF4dmxpbmUobnAud2hlcmUoeWVhcnMgPT0gMjAwNylbMF0sY29sb3I9J2snLGxpbmVzdHlsZT0nLS0nLAojICAgICAgICAgICAgbGluZXdpZHRoPTAuNSkKI3BsdC5heHZsaW5lKG5wLndoZXJlKHllYXJzID09IDIwMTIpWzBdLGNvbG9yPSdrJyxsaW5lc3R5bGU9Jy0tJywKIyAgICAgICAgICAgIGxpbmV3aWR0aD0wLjUpCgpwbHQueHRpY2tzKG5wLmFyYW5nZSgwLHllYXIyLXllYXIxKzMsMTApLAogICAgICAgICAgIG1hcChzdHIsbnAuYXJhbmdlKHllYXIxLHllYXIyKzMsMTApKSxmb250c2l6ZT04KQpwbHQueGxpbShbMCx5ZWFyMi15ZWFyMSsxXSkKCnBsdC55dGlja3MobnAuYXJhbmdlKC0zLDQsMSksbWFwKHN0cixucC5hcmFuZ2UoLTMsNCwxKSksZm9udHNpemU9OCkKcGx0LnlsaW0oWy0zLDNdKQoKcGx0LnRleHQoLTEuMywyLjg1LHInXHRleHRiZntKRk19Jyxmb250c2l6ZT0yMCxjb2xvcj0nZGFya2dyZXknKQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpheCA9IHBsdC5zdWJwbG90KDIyMikKCiMjIyBBZGp1c3QgYXhlcyBzcGluZXMKYWRqdXN0X3NwaW5lcyhheCwgWydsZWZ0JywgJ2JvdHRvbSddKQpheC5zcGluZXNbJ3RvcCddLnNldF9jb2xvcignbm9uZScpCmF4LnNwaW5lc1sncmlnaHQnXS5zZXRfY29sb3IoJ25vbmUnKQpheC5zcGluZXNbJ2xlZnQnXS5zZXRfY29sb3IoJ2RhcmtncmV5JykKYXguc3BpbmVzWydib3R0b20nXS5zZXRfY29sb3IoJ2RhcmtncmV5JykKYXgudGlja19wYXJhbXMoJ2JvdGgnLGxlbmd0aD00LHdpZHRoPTEuNSx3aGljaD0nbWFqb3InLGNvbG9yPSdkYXJrZ3JleScpCgpwbHQucGxvdCh6ZXJvcyxsaW5ld2lkdGg9MSxjb2xvcj0naycsbGluZXN0eWxlPSctJyx6b3JkZXI9MSkKCnBsdC5iYXIobnAuYXJhbmdlKGxlbihhZFsxXSkpLTAuNCxhZFsxXSxjb2xvcj0nbGlnaHRza3libHVlJyxlZGdlY29sb3I9J2xpZ2h0c2t5Ymx1ZScpCnBsdC5wbG90KHRpbWV4LGxpbmUyLHpvcmRlcj0xLGxpbmV3aWR0aD0yLGNvbG9yPSdpbmRpYW5yZWQnKQpwbHQucGxvdChzbW9vdGhlZDJbOiwwXSxzbW9vdGhlZDJbOiwxXSxjb2xvcj0nZGFya3NsYXRlYmx1ZScsem9yZGVyPTgsbGluZXdpZHRoPTEuMikKCiNwbHQuYXh2bGluZShucC53aGVyZSh5ZWFycyA9PSAyMDA3KVswXSxjb2xvcj0naycsbGluZXN0eWxlPSctLScsCiMgICAgICAgICAgICBsaW5ld2lkdGg9MC41KQojcGx0LmF4dmxpbmUobnAud2hlcmUoeWVhcnMgPT0gMjAxMilbMF0sY29sb3I9J2snLGxpbmVzdHlsZT0nLS0nLAojICAgICAgICAgICAgbGluZXdpZHRoPTAuNSkKCnBsdC54dGlja3MobnAuYXJhbmdlKDAseWVhcjIteWVhcjErMywxMCksCiAgICAgICAgICAgbWFwKHN0cixucC5hcmFuZ2UoeWVhcjEseWVhcjIrMywxMCkpLGZvbnRzaXplPTgpCnBsdC54bGltKFswLHllYXIyLXllYXIxKzFdKQoKcGx0Lnl0aWNrcyhucC5hcmFuZ2UoLTMsNCwxKSxtYXAoc3RyLG5wLmFyYW5nZSgtMyw0LDEpKSxmb250c2l6ZT04KQpwbHQueWxpbShbLTMsM10pCgpwbHQudGV4dCgtMS4zLDIuODUscidcdGV4dGJme0FNSn0nLGZvbnRzaXplPTIwLGNvbG9yPSdkYXJrZ3JleScpCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmF4ID0gcGx0LnN1YnBsb3QoMjIzKQoKIyMjIEFkanVzdCBheGVzIHNwaW5lcwphZGp1c3Rfc3BpbmVzKGF4LCBbJ2xlZnQnLCAnYm90dG9tJ10pCmF4LnNwaW5lc1sndG9wJ10uc2V0X2NvbG9yKCdub25lJykKYXguc3BpbmVzWydyaWdodCddLnNldF9jb2xvcignbm9uZScpCmF4LnNwaW5lc1snbGVmdCddLnNldF9jb2xvcignZGFya2dyZXknKQpheC5zcGluZXNbJ2JvdHRvbSddLnNldF9jb2xvcignZGFya2dyZXknKQpheC50aWNrX3BhcmFtcygnYm90aCcsbGVuZ3RoPTQsd2lkdGg9MS41LHdoaWNoPSdtYWpvcicsY29sb3I9J2RhcmtncmV5JykKCnBsdC5wbG90KHplcm9zLGxpbmV3aWR0aD0xLGNvbG9yPSdrJyxsaW5lc3R5bGU9Jy0nLHpvcmRlcj0xKQoKcGx0LmJhcihucC5hcmFuZ2UobGVuKGFkWzJdKSktMC40LGFkWzJdLGNvbG9yPSdsaWdodHNreWJsdWUnLGVkZ2Vjb2xvcj0nbGlnaHRza3libHVlJykKcGx0LnBsb3QodGltZXgsbGluZTMsem9yZGVyPTEsbGluZXdpZHRoPTIsY29sb3I9J2luZGlhbnJlZCcpCnBsdC5wbG90KHNtb290aGVkM1s6LDBdLHNtb290aGVkM1s6LDFdLGNvbG9yPSdkYXJrc2xhdGVibHVlJyx6b3JkZXI9OCxsaW5ld2lkdGg9MS4yKQoKI3BsdC5heHZsaW5lKG5wLndoZXJlKHllYXJzID09IDIwMDcpWzBdLGNvbG9yPSdrJyxsaW5lc3R5bGU9Jy0tJywKIyAgICAgICAgICAgIGxpbmV3aWR0aD0wLjUpCiNwbHQuYXh2bGluZShucC53aGVyZSh5ZWFycyA9PSAyMDEyKVswXSxjb2xvcj0naycsbGluZXN0eWxlPSctLScsCiMgICAgICAgICAgICBsaW5ld2lkdGg9MC41KQoKcGx0Lnh0aWNrcyhucC5hcmFuZ2UoMCx5ZWFyMi15ZWFyMSszLDEwKSwKICAgICAgICAgICBtYXAoc3RyLG5wLmFyYW5nZSh5ZWFyMSx5ZWFyMiszLDEwKSksZm9udHNpemU9OCkKcGx0LnhsaW0oWzAseWVhcjIteWVhcjErMV0pCgpwbHQueXRpY2tzKG5wLmFyYW5nZSgtMyw0LDEpLG1hcChzdHIsbnAuYXJhbmdlKC0zLDQsMSkpLGZvbnRzaXplPTgpCnBsdC55bGltKFstMywzXSkKCnBsdC50ZXh0KC0xLjMsMi44NSxyJ1x0ZXh0YmZ7SkFTfScsZm9udHNpemU9MjAsY29sb3I9J2RhcmtncmV5JykKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKYXggPSBwbHQuc3VicGxvdCgyMjQpCgojIyMgQWRqdXN0IGF4ZXMgc3BpbmVzCmFkanVzdF9zcGluZXMoYXgsIFsnbGVmdCcsICdib3R0b20nXSkKYXguc3BpbmVzWyd0b3AnXS5zZXRfY29sb3IoJ25vbmUnKQpheC5zcGluZXNbJ3JpZ2h0J10uc2V0X2NvbG9yKCdub25lJykKYXguc3BpbmVzWydsZWZ0J10uc2V0X2NvbG9yKCdkYXJrZ3JleScpCmF4LnNwaW5lc1snYm90dG9tJ10uc2V0X2NvbG9yKCdkYXJrZ3JleScpCmF4LnRpY2tfcGFyYW1zKCdib3RoJyxsZW5ndGg9NCx3aWR0aD0xLjUsd2hpY2g9J21ham9yJyxjb2xvcj0nZGFya2dyZXknKQoKcGx0LnBsb3QoemVyb3MsbGluZXdpZHRoPTEsY29sb3I9J2snLGxpbmVzdHlsZT0nLScsem9yZGVyPTEpCgpwbHQuYmFyKG5wLmFyYW5nZShsZW4oYWRbM10pKS0wLjQsYWRbM10sY29sb3I9J2xpZ2h0c2t5Ymx1ZScsZWRnZWNvbG9yPSdsaWdodHNreWJsdWUnKQpwbHQucGxvdCh0aW1leCxsaW5lNCx6b3JkZXI9MSxsaW5ld2lkdGg9Mixjb2xvcj0naW5kaWFucmVkJykKcGx0LnBsb3Qoc21vb3RoZWQ0WzosMF0sc21vb3RoZWQ0WzosMV0sY29sb3I9J2RhcmtzbGF0ZWJsdWUnLHpvcmRlcj04LGxpbmV3aWR0aD0xLjIpCgojcGx0LmF4dmxpbmUobnAud2hlcmUoeWVhcnMgPT0gMjAwNylbMF0sY29sb3I9J2snLGxpbmVzdHlsZT0nLS0nLAojICAgICAgICAgICAgbGluZXdpZHRoPTAuNSkKI3BsdC5heHZsaW5lKG5wLndoZXJlKHllYXJzID09IDIwMTIpWzBdLGNvbG9yPSdrJyxsaW5lc3R5bGU9Jy0tJywKIyAgICAgICAgICAgIGxpbmV3aWR0aD0wLjUpCgpwbHQueHRpY2tzKG5wLmFyYW5nZSgwLHllYXIyLXllYXIxKzMsMTApLAogICAgICAgICAgIG1hcChzdHIsbnAuYXJhbmdlKHllYXIxLHllYXIyKzMsMTApKSxmb250c2l6ZT04KQpwbHQueGxpbShbMCx5ZWFyMi15ZWFyMSsxXSkKCnBsdC55dGlja3MobnAuYXJhbmdlKC0zLDQsMSksbWFwKHN0cixucC5hcmFuZ2UoLTMsNCwxKSksZm9udHNpemU9OCkKcGx0LnlsaW0oWy0zLDNdKQoKcGx0LnRleHQoLTEuMywyLjg1LHInXHRleHRiZntPTkR9Jyxmb250c2l6ZT0yMCxjb2xvcj0nZGFya2dyZXknKQoKCmZpZy5zdWJwbG90c19hZGp1c3QoaHNwYWNlPTAuNCkKcGx0LnNhdmVmaWcoZGlyZWN0b3J5ZmlndXJlICsgJ0FEX3RpbWVzZXJpZXNfNDgxNS5wbmcnLGRwaT0zMDApCjx8ZmltX3N1ZmZpeHw+CnllYXJzID0gbnAuYXJhbmdlKHllYXIxLHllYXIyKzEsMSkKbW9udGhzID0gW3InSmFuJyxyJ0ZlYicscidNYXInLHInQXByJyxyJ01heScscidKdW4nLHInSnVsJyxyJ0F1ZycsCiAgICAgICAgICByJ1NlcCcscidPY3QnLHInTm92JyxyJ0RlYyddCiAgICAgICAgICAKPHxmaW1fZW5kfD4="]
["973cc60bb2878ad323f5fbd6a739e926b2edb367-5","973cc60bb2878ad323f5fbd6a739e926b2edb367","PHxmaW1fcHJlZml4fD4KIiIiClNjcmlwdHMgY2FsY3VsYXRlcyBsaW5lYXIgcmVncmVzc2lvbiBhbmQgTE9XRVNTIG92ZXIgQXJjdGljIERpcG9sZSBmcm9tIAoxOTQ4LgogCk5vdGVzCi0tLS0tCiAgICBTb3VyY2UgOiBodHRwOi8vd3d3LmVzcmwubm9hYS5nb3YvcHNkL2RhdGEvZ3JpZGRlZC9kYXRhLgogICAgICAgICAgICAgbmNlcC5yZWFuYWx5c2lzLmRlcml2ZWQuaHRtbAogICAgUmVmZXJlbmNlIDogV3UgZXQgYWwuIFsyMDA2XSBhbmQgT3ZlcmxhbmQgZXQgYWwuIFsyMDEyXQogICAgQXV0aG9yIDogWmFjaGFyeSBMYWJlCiAgICBEYXRlICAgOiA3IE9jdG9iZXIgMjAxNgoiIiIKCiMjIyBJbXBvcnQgbW9kdWxlcwppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHNjaXB5LnN0YXRzIGFzIHN0cwppbXBvcnQgcmVhZF9TZWFJY2VUaGlja19QSU9NQVMgYXMgQ1QKaW1wb3J0IHJlYWRfU2VhSWNlQ29uY19QSU9NQVMgYXMgQ0MKaW1wb3J0IGNhbGNfUGlvbWFzQXJlYSBhcyBDQQpmcm9tIGNhbGNfU0lWIGltcG9ydCBzaXZHcmlkCmZyb20gbXBsX3Rvb2xraXRzLmJhc2VtYXAgaW1wb3J0IEJhc2VtYXAKaW1wb3J0IHN0YXRzbW9kZWxzLmFwaSBhcyBzbQoKIyMjIERlZmluZSBkaXJlY3RvcmllcwpkaXJlY3RvcnlkYXRhID0gJy9ob21lL3psYWJlL0RvY3VtZW50cy9SZXNlYXJjaC9TZWFJY2VWYXJpYWJpbGl0eS9EYXRhLycgIApkaXJlY3RvcnlkYXRhMiA9ICcvaG9tZS96bGFiZS9TdXJ0c2V5L3NlYWljZV9vYnMvUElPTUFTLycgIApkaXJlY3RvcnlmaWd1cmUgPSAnL2hvbWUvemxhYmUvRGVza3RvcC8nCgojIyMgRGVmaW5lIHRpbWUgICAgICAgICAgIApub3cgPSBkYXRldGltZS5kYXRldGltZS5ub3coKQpjdXJyZW50bW4gPSBzdHIobm93Lm1vbnRoKQpjdXJyZW50ZHkgPSBzdHIobm93LmRheSkKY3VycmVudHlyID0gc3RyKG5vdy55ZWFyKQpjdXJyZW50dGltZSA9IGN1cnJlbnRtbiArICdfJyArIGN1cnJlbnRkeSArICdfJyArIGN1cnJlbnR5cgp0aXRsZXRpbWUgPSBjdXJyZW50bW4gKyAnLycgKyBjdXJyZW50ZHkgKyAnLycgKyBjdXJyZW50eXIKcHJpbnQgJ1xuJyAnLS0tLVBsb3QgTkNFUCAtICVzLS0tLScgJSB0aXRsZXRpbWUgCgojIyMgQWxvdHQgdGltZSBzZXJpZXMKeWVhcjEgPSAxOTQ4CnllYXIyID0gMjAxNQp5ZWFycyA9IG5wLmFyYW5nZSh5ZWFyMSx5ZWFyMisxLDEpCm1vbnRocyA9IFtyJ0phbicscidGZWInLHInTWFyJyxyJ0FwcicscidNYXknLHInSnVuJyxyJ0p1bCcscidBdWcnLAogICAgICAgICAgcidTZXAnLHInT2N0JyxyJ05vdicscidEZWMnXQogICAgICAgICAgCiMjIyBSZWFkIGluIGRhdGEKc2Vhc29ucyA9IFsnSkZNJywnQU1KJywnSkFTJywnT05EJ10gIAoKI2FkID0gbnAuZW1wdHkoKDQsbGVuKHllYXJzKSkpCiNmb3IgaSBpbiB4cmFuZ2UobGVuKHNlYXNvbnMpKToKIyAgICBmaWxlbmFtZTEgPSAnQURfJXNfJXMlcy50eHQnICUgKHNlYXNvbnNbaV0seWVhcjEseWVhcjIpCiMgICAgYWRbaSw6XSA9IG5wLmdlbmZyb210eHQoZGlyZWN0b3J5ZGF0YSArIGZpbGVuYW1lMSkKIwojICAgIHByaW50ICdSZWFkaW5nIGRhdGEgZmlsZSAlcyEnICUgc2Vhc29uc1tpXQojCiN0aW1leCA9IG5wLmFyYW5nZShsZW4oYWRbMCw6XSkpCiN2YXJ5MSA9IGFkWzAsOl0gCiNzbG9wZTEsaW50ZXJjZXB0MSxyMSxwX3ZhbHVlLHN0ZF9lcnIgPSBzdHMuc3RhdHMubGlucmVncmVzcyh0aW1leCx2YXJ5MSkgCiNsaW5lMSA9IHNsb3BlMSp0aW1leCArIGludGVyY2VwdDEKI3ZhcnkyID0gYWRbMSw6XSAKI3Nsb3BlMixpbnRlcmNlcHQyLHIyLHBfdmFsdWUsc3RkX2VyciA9IHN0cy5zdGF0cy5saW5yZWdyZXNzKHRpbWV4LHZhcnkyKSAKI2xpbmUyID0gc2xvcGUyKnRpbWV4ICsgaW50ZXJjZXB0MgojdmFyeTMgPSBhZFsyLDpdIAojc2xvcGUzLGludGVyY2VwdDMscjMscF92YWx1ZSxzdGRfZXJyID0gc3RzLnN0YXRzLmxpbnJlZ3Jlc3ModGltZXgsdmFyeTMpCiNsaW5lMyA9IHNsb3BlMyp0aW1leCArIGludGVyY2VwdDMgCiN2YXJ5NCA9IGFkWzMsOl0gCiNzbG9wZTQsaW50ZXJjZXB0NCxyNCxwX3ZhbHVlLHN0ZF9lcnIgPSBzdHMuc3RhdHMubGlucmVncmVzcyh0aW1leCx2YXJ5NCkgCiNsaW5lNCA9IHNsb3BlNCp0aW1leCArIGludGVyY2VwdDQKIwojc21vb3RoZWQxID0gc20ubm9ucGFyYW1ldHJpYy5sb3dlc3ModmFyeTEsdGltZXgpCiNzbW9vdGhlZDIgPSBzbS5ub25wYXJhbWV0cmljLmxvd2Vzcyh2YXJ5Mix0aW1leCkKI3Ntb290aGVkMyA9IHNtLm5vbnBhcmFtZXRyaWMubG93ZXNzKHZhcnkzLHRpbWV4KQojc21vb3RoZWQ0ID0gc20ubm9ucGFyYW1ldHJpYy5sb3dlc3ModmFyeTQsdGltZXgpCgojIyMgUGxvdCBQQyB0aW1lIHNlcmllcwojIyMgQWRqdXN0IGF4ZXMgaW4gdGltZSBzZXJpZXMgcGxvdHMgCmRlZiBhZGp1c3Rfc3BpbmVzKGF4LCBzcGluZXMpOgogICAgZm9yIGxvYywgc3BpbmUgaW4gYXguc3BpbmVzLml0ZW1zKCk6CiAgICAgICAgaWYgbG9jIGluIHNwaW5lczoKICAgICAgICAgICAgc3BpbmUuc2V0X3Bvc2l0aW9uKCgnb3V0d2FyZCcsIDEwKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzcGluZS5zZXRfY29sb3IoJ25vbmUnKSAgCjx8ZmltX2hvbGV8PgoKICAgIGlmICdib3R0b20nIGluIHNwaW5lczoKICAgICAgICBheC54YXhpcy5zZXRfdGlja3NfcG9zaXRpb24oJ2JvdHRvbScpCiAgICBlbHNlOgogICAgICAgIGF4LnhheGlzLnNldF90aWNrcyhbXSkgCiAgICAgICAgCnBsdC5yYygndGV4dCcsdXNldGV4PVRydWUpCnBsdC5yYygnZm9udCcsKip7J2ZhbWlseSc6J3NhbnMtc2VyaWYnLCdzYW5zLXNlcmlmJzpbJ0F2YW50IEdhcmRlJ119KSAKCmZpZyA9IHBsdC5maWd1cmUoKQpheCA9IHBsdC5zdWJwbG90KDIyMSkKCiMjIyBBZGp1c3QgYXhlcyBzcGluZXMKYWRqdXN0X3NwaW5lcyhheCwgWydsZWZ0JywgJ2JvdHRvbSddKQpheC5zcGluZXNbJ3RvcCddLnNldF9jb2xvcignbm9uZScpCmF4LnNwaW5lc1sncmlnaHQnXS5zZXRfY29sb3IoJ25vbmUnKQpheC5zcGluZXNbJ2xlZnQnXS5zZXRfY29sb3IoJ2RhcmtncmV5JykKYXguc3BpbmVzWydib3R0b20nXS5zZXRfY29sb3IoJ2RhcmtncmV5JykKYXgudGlja19wYXJhbXMoJ2JvdGgnLGxlbmd0aD00LHdpZHRoPTEuNSx3aGljaD0nbWFqb3InLGNvbG9yPSdkYXJrZ3JleScpCgp6ZXJvcyA9IFswXSAqIGxlbihhZFswLDpdKQoKcGx0LnBsb3QoemVyb3MsbGluZXdpZHRoPTEsY29sb3I9J2snLGxpbmVzdHlsZT0nLScsem9yZGVyPTEpCgpwbHQuYmFyKG5wLmFyYW5nZShsZW4oYWRbMF0pKS0wLjQsYWRbMF0sY29sb3I9J2xpZ2h0c2t5Ymx1ZScsZWRnZWNvbG9yPSdsaWdodHNreWJsdWUnKQpwbHQucGxvdCh0aW1leCxsaW5lMSx6b3JkZXI9MSxsaW5ld2lkdGg9Mixjb2xvcj0naW5kaWFucmVkJykKcGx0LnBsb3Qoc21vb3RoZWQxWzosMF0sc21vb3RoZWQxWzosMV0sY29sb3I9J2RhcmtzbGF0ZWJsdWUnLHpvcmRlcj04LGxpbmV3aWR0aD0xLjIpCgojcGx0LmF4dmxpbmUobnAud2hlcmUoeWVhcnMgPT0gMjAwNylbMF0sY29sb3I9J2snLGxpbmVzdHlsZT0nLS0nLAojICAgICAgICAgICAgbGluZXdpZHRoPTAuNSkKI3BsdC5heHZsaW5lKG5wLndoZXJlKHllYXJzID09IDIwMTIpWzBdLGNvbG9yPSdrJyxsaW5lc3R5bGU9Jy0tJywKIyAgICAgICAgICAgIGxpbmV3aWR0aD0wLjUpCgpwbHQueHRpY2tzKG5wLmFyYW5nZSgwLHllYXIyLXllYXIxKzMsMTApLAogICAgICAgICAgIG1hcChzdHIsbnAuYXJhbmdlKHllYXIxLHllYXIyKzMsMTApKSxmb250c2l6ZT04KQpwbHQueGxpbShbMCx5ZWFyMi15ZWFyMSsxXSkKCnBsdC55dGlja3MobnAuYXJhbmdlKC0zLDQsMSksbWFwKHN0cixucC5hcmFuZ2UoLTMsNCwxKSksZm9udHNpemU9OCkKcGx0LnlsaW0oWy0zLDNdKQoKcGx0LnRleHQoLTEuMywyLjg1LHInXHRleHRiZntKRk19Jyxmb250c2l6ZT0yMCxjb2xvcj0nZGFya2dyZXknKQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpheCA9IHBsdC5zdWJwbG90KDIyMikKCiMjIyBBZGp1c3QgYXhlcyBzcGluZXMKYWRqdXN0X3NwaW5lcyhheCwgWydsZWZ0JywgJ2JvdHRvbSddKQpheC5zcGluZXNbJ3RvcCddLnNldF9jb2xvcignbm9uZScpCmF4LnNwaW5lc1sncmlnaHQnXS5zZXRfY29sb3IoJ25vbmUnKQpheC5zcGluZXNbJ2xlZnQnXS5zZXRfY29sb3IoJ2RhcmtncmV5JykKYXguc3BpbmVzWydib3R0b20nXS5zZXRfY29sb3IoJ2RhcmtncmV5JykKYXgudGlja19wYXJhbXMoJ2JvdGgnLGxlbmd0aD00LHdpZHRoPTEuNSx3aGljaD0nbWFqb3InLGNvbG9yPSdkYXJrZ3JleScpCgpwbHQucGxvdCh6ZXJvcyxsaW5ld2lkdGg9MSxjb2xvcj0naycsbGluZXN0eWxlPSctJyx6b3JkZXI9MSkKCnBsdC5iYXIobnAuYXJhbmdlKGxlbihhZFsxXSkpLTAuNCxhZFsxXSxjb2xvcj0nbGlnaHRza3libHVlJyxlZGdlY29sb3I9J2xpZ2h0c2t5Ymx1ZScpCnBsdC5wbG90KHRpbWV4LGxpbmUyLHpvcmRlcj0xLGxpbmV3aWR0aD0yLGNvbG9yPSdpbmRpYW5yZWQnKQpwbHQucGxvdChzbW9vdGhlZDJbOiwwXSxzbW9vdGhlZDJbOiwxXSxjb2xvcj0nZGFya3NsYXRlYmx1ZScsem9yZGVyPTgsbGluZXdpZHRoPTEuMikKCiNwbHQuYXh2bGluZShucC53aGVyZSh5ZWFycyA9PSAyMDA3KVswXSxjb2xvcj0naycsbGluZXN0eWxlPSctLScsCiMgICAgICAgICAgICBsaW5ld2lkdGg9MC41KQojcGx0LmF4dmxpbmUobnAud2hlcmUoeWVhcnMgPT0gMjAxMilbMF0sY29sb3I9J2snLGxpbmVzdHlsZT0nLS0nLAojICAgICAgICAgICAgbGluZXdpZHRoPTAuNSkKCnBsdC54dGlja3MobnAuYXJhbmdlKDAseWVhcjIteWVhcjErMywxMCksCiAgICAgICAgICAgbWFwKHN0cixucC5hcmFuZ2UoeWVhcjEseWVhcjIrMywxMCkpLGZvbnRzaXplPTgpCnBsdC54bGltKFswLHllYXIyLXllYXIxKzFdKQoKcGx0Lnl0aWNrcyhucC5hcmFuZ2UoLTMsNCwxKSxtYXAoc3RyLG5wLmFyYW5nZSgtMyw0LDEpKSxmb250c2l6ZT04KQpwbHQueWxpbShbLTMsM10pCgpwbHQudGV4dCgtMS4zLDIuODUscidcdGV4dGJme0FNSn0nLGZvbnRzaXplPTIwLGNvbG9yPSdkYXJrZ3JleScpCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmF4ID0gcGx0LnN1YnBsb3QoMjIzKQoKIyMjIEFkanVzdCBheGVzIHNwaW5lcwphZGp1c3Rfc3BpbmVzKGF4LCBbJ2xlZnQnLCAnYm90dG9tJ10pCmF4LnNwaW5lc1sndG9wJ10uc2V0X2NvbG9yKCdub25lJykKYXguc3BpbmVzWydyaWdodCddLnNldF9jb2xvcignbm9uZScpCmF4LnNwaW5lc1snbGVmdCddLnNldF9jb2xvcignZGFya2dyZXknKQpheC5zcGluZXNbJ2JvdHRvbSddLnNldF9jb2xvcignZGFya2dyZXknKQpheC50aWNrX3BhcmFtcygnYm90aCcsbGVuZ3RoPTQsd2lkdGg9MS41LHdoaWNoPSdtYWpvcicsY29sb3I9J2RhcmtncmV5JykKCnBsdC5wbG90KHplcm9zLGxpbmV3aWR0aD0xLGNvbG9yPSdrJyxsaW5lc3R5bGU9Jy0nLHpvcmRlcj0xKQoKcGx0LmJhcihucC5hcmFuZ2UobGVuKGFkWzJdKSktMC40LGFkWzJdLGNvbG9yPSdsaWdodHNreWJsdWUnLGVkZ2Vjb2xvcj0nbGlnaHRza3libHVlJykKcGx0LnBsb3QodGltZXgsbGluZTMsem9yZGVyPTEsbGluZXdpZHRoPTIsY29sb3I9J2luZGlhbnJlZCcpCnBsdC5wbG90KHNtb290aGVkM1s6LDBdLHNtb290aGVkM1s6LDFdLGNvbG9yPSdkYXJrc2xhdGVibHVlJyx6b3JkZXI9OCxsaW5ld2lkdGg9MS4yKQoKI3BsdC5heHZsaW5lKG5wLndoZXJlKHllYXJzID09IDIwMDcpWzBdLGNvbG9yPSdrJyxsaW5lc3R5bGU9Jy0tJywKIyAgICAgICAgICAgIGxpbmV3aWR0aD0wLjUpCiNwbHQuYXh2bGluZShucC53aGVyZSh5ZWFycyA9PSAyMDEyKVswXSxjb2xvcj0naycsbGluZXN0eWxlPSctLScsCiMgICAgICAgICAgICBsaW5ld2lkdGg9MC41KQoKcGx0Lnh0aWNrcyhucC5hcmFuZ2UoMCx5ZWFyMi15ZWFyMSszLDEwKSwKICAgICAgICAgICBtYXAoc3RyLG5wLmFyYW5nZSh5ZWFyMSx5ZWFyMiszLDEwKSksZm9udHNpemU9OCkKcGx0LnhsaW0oWzAseWVhcjIteWVhcjErMV0pCgpwbHQueXRpY2tzKG5wLmFyYW5nZSgtMyw0LDEpLG1hcChzdHIsbnAuYXJhbmdlKC0zLDQsMSkpLGZvbnRzaXplPTgpCnBsdC55bGltKFstMywzXSkKCnBsdC50ZXh0KC0xLjMsMi44NSxyJ1x0ZXh0YmZ7SkFTfScsZm9udHNpemU9MjAsY29sb3I9J2RhcmtncmV5JykKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKYXggPSBwbHQuc3VicGxvdCgyMjQpCgojIyMgQWRqdXN0IGF4ZXMgc3BpbmVzCmFkanVzdF9zcGluZXMoYXgsIFsnbGVmdCcsICdib3R0b20nXSkKYXguc3BpbmVzWyd0b3AnXS5zZXRfY29sb3IoJ25vbmUnKQpheC5zcGluZXNbJ3JpZ2h0J10uc2V0X2NvbG9yKCdub25lJykKYXguc3BpbmVzWydsZWZ0J10uc2V0X2NvbG9yKCdkYXJrZ3JleScpCmF4LnNwaW5lc1snYm90dG9tJ10uc2V0X2NvbG9yKCdkYXJrZ3JleScpCmF4LnRpY2tfcGFyYW1zKCdib3RoJyxsZW5ndGg9NCx3aWR0aD0xLjUsd2hpY2g9J21ham9yJyxjb2xvcj0nZGFya2dyZXknKQoKcGx0LnBsb3QoemVyb3MsbGluZXdpZHRoPTEsY29sb3I9J2snLGxpbmVzdHlsZT0nLScsem9yZGVyPTEpCgpwbHQuYmFyKG5wLmFyYW5nZShsZW4oYWRbM10pKS0wLjQsYWRbM10sY29sb3I9J2xpZ2h0c2t5Ymx1ZScsZWRnZWNvbG9yPSdsaWdodHNreWJsdWUnKQpwbHQucGxvdCh0aW1leCxsaW5lNCx6b3JkZXI9MSxsaW5ld2lkdGg9Mixjb2xvcj0naW5kaWFucmVkJykKcGx0LnBsb3Qoc21vb3RoZWQ0WzosMF0sc21vb3RoZWQ0WzosMV0sY29sb3I9J2RhcmtzbGF0ZWJsdWUnLHpvcmRlcj04LGxpbmV3aWR0aD0xLjIpCgojcGx0LmF4dmxpbmUobnAud2hlcmUoeWVhcnMgPT0gMjAwNylbMF0sY29sb3I9J2snLGxpbmVzdHlsZT0nLS0nLAojICAgICAgICAgICAgbGluZXdpZHRoPTAuNSkKI3BsdC5heHZsaW5lKG5wLndoZXJlKHllYXJzID09IDIwMTIpWzBdLGNvbG9yPSdrJyxsaW5lc3R5bGU9Jy0tJywKIyAgICAgICAgICAgIGxpbmV3aWR0aD0wLjUpCgpwbHQueHRpY2tzKG5wLmFyYW5nZSgwLHllYXIyLXllYXIxKzMsMTApLAogICAgICAgICAgIG1hcChzdHIsbnAuYXJhbmdlKHllYXIxLHllYXIyKzMsMTApKSxmb250c2l6ZT04KQpwbHQueGxpbShbMCx5ZWFyMi15ZWFyMSsxXSkKCnBsdC55dGlja3MobnAuYXJhbmdlKC0zLDQsMSksbWFwKHN0cixucC5hcmFuZ2UoLTMsNCwxKSksZm9udHNpemU9OCkKcGx0LnlsaW0oWy0zLDNdKQoKcGx0LnRleHQoLTEuMywyLjg1LHInXHRleHRiZntPTkR9Jyxmb250c2l6ZT0yMCxjb2xvcj0nZGFya2dyZXknKQoKCmZpZy5zdWJwbG90c19hZGp1c3QoaHNwYWNlPTAuNCkKcGx0LnNhdmVmaWcoZGlyZWN0b3J5ZmlndXJlICsgJ0FEX3RpbWVzZXJpZXNfNDgxNS5wbmcnLGRwaT0zMDApCjx8ZmltX3N1ZmZpeHw+CiAgICBpZiAnbGVmdCcgaW4gc3BpbmVzOgogICAgICAgIGF4LnlheGlzLnNldF90aWNrc19wb3NpdGlvbignbGVmdCcpCiAgICBlbHNlOgogICAgICAgIGF4LnlheGlzLnNldF90aWNrcyhbXSkKPHxmaW1fZW5kfD4="]
["bdcbc8c774e5dd90ca81751c50826bc19769c0e7-1","bdcbc8c774e5dd90ca81751c50826bc19769c0e7","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cAoKc2V0dXAoCiAgICBuYW1lPSJiYWNrdXAiLAogICAgdmVyc2lvbj0iMC4xIiwKICAgIGRlc2NyaXB0aW9uPSJCYWNrdXAgZmlsZXMuIiwKICAgIHVybD0iaHR0cDovL2dpdGh1Yi5jb20vanN2YW5hL2JhY2t1cCIsCiAgICBhdXRob3I9IkpheSBWYW5hIiwKICAgIGF1dGhvcl9lbWFpbD0iamF5c3ZhbmFAZ21haWwuY29tIiwKICAgIGxpY2Vuc2U9Ik1JVCIsCiAgICBwYWNrYWdlcz1bImJhY2t1cCJdLAogICAgemlwX3NhZmU9RmFsc2UsCjx8ZmltX2hvbGV8PgopCjx8ZmltX3N1ZmZpeHw+CiAgICBlbnRyeV9wb2ludHM9eyJjb25zb2xlX3NjcmlwdHMiOiBbImJhY2t1cD1iYWNrdXAubWFpbjptYWluIl19LAo8fGZpbV9lbmR8Pg=="]
["c18a0d30775f55c8dd0780986af59d4f163a72c1-1","c18a0d30775f55c8dd0780986af59d4f163a72c1","PHxmaW1fcHJlZml4fD4KZnJvbSAuLl9jbGFzcyBpbXBvcnQgT3JkZXJpbmdQaGFudG9tQ2xhc3MKCgpjbGFzcyBGaXJzdE9yZGVyaW5nUGhhbnRvbUNsYXNzKAogICAgT3JkZXJpbmdQaGFudG9tQ2xhc3MsCik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHBhc3MKPHxmaW1fZW5kfD4="]
["c18a0d30775f55c8dd0780986af59d4f163a72c1-2","c18a0d30775f55c8dd0780986af59d4f163a72c1","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuLl9jbGFzcyBpbXBvcnQgT3JkZXJpbmdQaGFudG9tQ2xhc3MKCgpjbGFzcyBGaXJzdE9yZGVyaW5nUGhhbnRvbUNsYXNzKAo8fGZpbV9lbmR8Pg=="]
["1733173d812a6549e0ab00d62621bafc78bcb306-1","1733173d812a6549e0ab00d62621bafc78bcb306","PHxmaW1fcHJlZml4fD4KIiIiClNpbXBsZSByZWRpcyBjYWNoZQoiIiIKIyBzdGRsaWIgaW1wb3J0cwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBqc29uCmltcG9ydCBvcwoKIyB0aGlyZC1wYXJ0eSBpbXBvcnRzCjx8ZmltX2VuZHw+"]
["1733173d812a6549e0ab00d62621bafc78bcb306-2","1733173d812a6549e0ab00d62621bafc78bcb306","PHxmaW1fcHJlZml4fD4KIiIiClNpbXBsZSByZWRpcyBjYWNoZQoiIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojIHN0ZGxpYiBpbXBvcnRzCmltcG9ydCBqc29uCmltcG9ydCBvcwoKPHxmaW1fZW5kfD4="]
["1733173d812a6549e0ab00d62621bafc78bcb306-3","1733173d812a6549e0ab00d62621bafc78bcb306","PHxmaW1fcHJlZml4fD4KIiIiClNpbXBsZSByZWRpcyBjYWNoZQoiIiIKIyBzdGRsaWIgaW1wb3J0cwppbXBvcnQganNvbgppbXBvcnQgb3MKCiMgdGhpcmQtcGFydHkgaW1wb3J0cwppbXBvcnQgcmVkaXMKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRlZiBfZ2V0X2NsaWVudChyZWRpc19ob3N0PSdsb2NhbGhvc3QnKToKICAgIHRyeToKICAgICAgICByZXR1cm4gcmVkaXMuU3RyaWN0UmVkaXMuZnJvbV91cmwob3MuZW52aXJvblsnUkVESVNDTE9VRF9VUkwnXSkKICAgIGV4Y2VwdCBLZXlFcnJvcjoKPHxmaW1fZW5kfD4="]
["1733173d812a6549e0ab00d62621bafc78bcb306-4","1733173d812a6549e0ab00d62621bafc78bcb306","PHxmaW1fcHJlZml4fD4KIiIiClNpbXBsZSByZWRpcyBjYWNoZQoiIiIKIyBzdGRsaWIgaW1wb3J0cwppbXBvcnQganNvbgppbXBvcnQgb3MKCiMgdGhpcmQtcGFydHkgaW1wb3J0cwppbXBvcnQgcmVkaXMKCgpkZWYgX2dldF9jbGllbnQocmVkaXNfaG9zdD0nbG9jYWxob3N0Jyk6CiAgICB0cnk6CiAgICAgICAgcmV0dXJuIHJlZGlzLlN0cmljdFJlZGlzLmZyb21fdXJsKG9zLmVudmlyb25bJ1JFRElTQ0xPVURfVVJMJ10pCiAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgcmV0dXJuIHJlZGlzLlN0cmljdFJlZGlzKHJlZGlzX2hvc3QpCgpkZWYgZ2V0KG5hbWUpOgogICAgIiIiUmV0cmlldmUgdGhlIGtleSBgbmFtZWAgZnJvbSBjYWNoZSBvciBOb25lIGlmIG5vdCBmb3VuZAogICAgIiIiCiAgICBjbGllbnQgPSBfZ2V0X2NsaWVudCgpCiAgICByZXN1bHQgPSBjbGllbnQuZ2V0KG5hbWUpCiAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CiAgICAgICAgcmV0dXJuIGpzb24ubG9hZHMocmVzdWx0KQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZGVmIHNldChuYW1lLCB2YWx1ZSwgc2Vjb25kcz1Ob25lKToKICAgIGNsaWVudCA9IF9nZXRfY2xpZW50KCkKICAgIGNsaWVudC5zZXQobmFtZSwganNvbi5kdW1wcyh2YWx1ZSkpCjx8ZmltX2VuZHw+"]
["1733173d812a6549e0ab00d62621bafc78bcb306-5","1733173d812a6549e0ab00d62621bafc78bcb306","PHxmaW1fcHJlZml4fD4KIiIiClNpbXBsZSByZWRpcyBjYWNoZQoiIiIKIyBzdGRsaWIgaW1wb3J0cwppbXBvcnQganNvbgppbXBvcnQgb3MKCiMgdGhpcmQtcGFydHkgaW1wb3J0cwppbXBvcnQgcmVkaXMKCgpkZWYgX2dldF9jbGllbnQocmVkaXNfaG9zdD0nbG9jYWxob3N0Jyk6CiAgICB0cnk6CiAgICAgICAgcmV0dXJuIHJlZGlzLlN0cmljdFJlZGlzLmZyb21fdXJsKG9zLmVudmlyb25bJ1JFRElTQ0xPVURfVVJMJ10pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICByZXR1cm4gcmVkaXMuU3RyaWN0UmVkaXMocmVkaXNfaG9zdCkKCjx8ZmltX2VuZHw+"]
["c178fa4194d54dc36ba7e7ac67967a71a1178a88-1","c178fa4194d54dc36ba7e7ac67967a71a1178a88","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CnRyeToKICAgIGZyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgTW9jawpleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBmcm9tIG1vY2sgaW1wb3J0IE1vY2sKCgpmcm9tIGRiaGVscGVycy5jb25uZWN0aW9ucyBpbXBvcnQgQmFzZUNvbm5lY3Rpb24KCgpjbGFzcyBDb25uZWN0aW9uc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBzZWxmLmZha2VfY29ubiA9IE5vbmUKICAgICAgICBzZWxmLmZha2VfY3Vyc29yID0gTm9uZQoKICAgICAgICBjbGFzcyBDb25jcmV0ZUNvbm5lY3Rpb24oQmFzZUNvbm5lY3Rpb24pOgogICAgICAgICAgICBkZWZhdWx0X2RiID0gJ2NvbmNyZXRlZGInCiAgICAgICAgICAgIGRlZmF1bHRfdXNlciA9ICdjb25jcmV0ZXVzZXInCiAgICAgICAgICAgIGRlZmF1bHRfcGFzc3dkID0gJ2NvbmNyZXRlcGFzc3dkJwogICAgICAgICAgICBkZWZhdWx0X2hvc3QgPSAnY29uY3JldGVob3N0JwogICAgICAgICAgICBkZWZhdWx0X3BvcnQgPSA5OTk5CiAgICAgICAgICAgIGRlZmF1bHRfZXh0cmFfa3dhcmdzID0geydjaGFydHNldCc6ICd1dDgnfQoKICAgICAgICAgICAgZGVmIGNvbm5lY3Qoc2VsZl8pOgogICAgICAgICAgICAgICAgIiIiIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgTW9jayBvYmplY3QgZWFjaCBjYWxsICIiIgogICAgICAgICAgICAgICAgc2VsZi5mYWtlX2Nvbm4gPSBNb2NrKCkKICAgICAgICAgICAgICAgIHNlbGYuZmFrZV9jdXJzb3IgPSBNb2NrKCkKICAgICAgICAgICAgICAgIHNlbGYuZmFrZV9jb25uLmN1cnNvciA9IE1vY2socmV0dXJuX3ZhbHVlPXNlbGYuZmFrZV9jdXJzb3IpCiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5mYWtlX2Nvbm4KCiAgICAgICAgc2VsZi5Db25uQ2xhc3MgPSBDb25jcmV0ZUNvbm5lY3Rpb24KCiAgICBkZWYgdGVzdF9vdmVycmlkZV9hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIEEgY29uY3JldGUgY2xhc3MgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMuCiAgICAgICAgIiIiCiAgICAgICAgIyBVc2UgdGhlIGRlZmF1bHQgYXR0cmlidXRlcwogICAgICAgIGNvbmNyZXRlID0gc2VsZi5Db25uQ2xhc3MoKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9kYiwgJ2NvbmNyZXRlZGInKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF91c2VyLCAnY29uY3JldGV1c2VyJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfcGFzc3dkLCAnY29uY3JldGVwYXNzd2QnKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9ob3N0LCAnY29uY3JldGVob3N0JykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfcG9ydCwgOTk5OSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfZXh0cmFfa3dhcmdzLCB7J2NoYXJ0c2V0JzogJ3V0OCd9KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGIsICdjb25jcmV0ZWRiJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLnVzZXIsICdjb25jcmV0ZXVzZXInKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUucGFzc3dkLCAnY29uY3JldGVwYXNzd2QnKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuaG9zdCwgJ2NvbmNyZXRlaG9zdCcpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5wb3J0LCA5OTk5KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZXh0cmFfa3dhcmdzLCB7J2NoYXJ0c2V0JzogJ3V0OCd9KQoKICAgICAgICAjIFVzZSBtaXgKICAgICAgICBjb25jcmV0ZSA9IHNlbGYuQ29ubkNsYXNzKGRiPSdvdGhlcmRiJywgYXNfZGljdD1UcnVlKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9kYiwgJ2NvbmNyZXRlZGInKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF91c2VyLCAnY29uY3JldGV1c2VyJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfcGFzc3dkLCAnY29uY3JldGVwYXNzd2QnKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9ob3N0LCAnY29uY3JldGVob3N0JykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfcG9ydCwgOTk5OSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfZXh0cmFfa3dhcmdzLCB7J2NoYXJ0c2V0JzogJ3V0OCd9KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGIsICdvdGhlcmRiJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLnVzZXIsICdjb25jcmV0ZXVzZXInKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUucGFzc3dkLCAnY29uY3JldGVwYXNzd2QnKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuaG9zdCwgJ2NvbmNyZXRlaG9zdCcpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5wb3J0LCA5OTk5KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZXh0cmFfa3dhcmdzLCB7J2NoYXJ0c2V0JzogJ3V0OCcsICdhc19kaWN0JzogVHJ1ZX0pCgogICAgICAgICMgVGhlIGRlZmF1bHQgYXR0cmlidXRlcyBoYXZlIG5vdCBiZWVuIG92ZXJ3cml0dGVuCiAgICAgICAgY29uY3JldGUgPSBzZWxmLkNvbm5DbGFzcygpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5kZWZhdWx0X2RiLCAnY29uY3JldGVkYicpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5kZWZhdWx0X3VzZXIsICdjb25jcmV0ZXVzZXInKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9wYXNzd2QsICdjb25jcmV0ZXBhc3N3ZCcpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5kZWZhdWx0X2hvc3QsICdjb25jcmV0ZWhvc3QnKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9wb3J0LCA5OTk5KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9leHRyYV9rd2FyZ3MsIHsnY2hhcnRzZXQnOiAndXQ4J30pCgogICAgZGVmIHRlc3RfY29ubmVjdChzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUaGUgY29ubmVjdCBtZXRob2QgbXVzdCByZXR1cm5zIGEgbmV3IGNvbm5lY3Rpb24uCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAiIiIKICAgICAgICBjb25jcmV0ZSA9IHNlbGYuQ29ubkNsYXNzKCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmNvbm5lY3QoKSwgc2VsZi5mYWtlX2Nvbm4pCgo8fGZpbV9lbmR8Pg=="]
["c178fa4194d54dc36ba7e7ac67967a71a1178a88-2","c178fa4194d54dc36ba7e7ac67967a71a1178a88","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CnRyeToKICAgIGZyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgTW9jawpleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBmcm9tIG1vY2sgaW1wb3J0IE1vY2sKCgpmcm9tIGRiaGVscGVycy5jb25uZWN0aW9ucyBpbXBvcnQgQmFzZUNvbm5lY3Rpb24KCjx8ZmltX2hvbGV8PgogICAgICAgIHNlbGYuZmFrZV9jdXJzb3IgPSBOb25lCgogICAgICAgIGNsYXNzIENvbmNyZXRlQ29ubmVjdGlvbihCYXNlQ29ubmVjdGlvbik6CiAgICAgICAgICAgIGRlZmF1bHRfZGIgPSAnY29uY3JldGVkYicKICAgICAgICAgICAgZGVmYXVsdF91c2VyID0gJ2NvbmNyZXRldXNlcicKICAgICAgICAgICAgZGVmYXVsdF9wYXNzd2QgPSAnY29uY3JldGVwYXNzd2QnCiAgICAgICAgICAgIGRlZmF1bHRfaG9zdCA9ICdjb25jcmV0ZWhvc3QnCiAgICAgICAgICAgIGRlZmF1bHRfcG9ydCA9IDk5OTkKICAgICAgICAgICAgZGVmYXVsdF9leHRyYV9rd2FyZ3MgPSB7J2NoYXJ0c2V0JzogJ3V0OCd9CgogICAgICAgICAgICBkZWYgY29ubmVjdChzZWxmXyk6CiAgICAgICAgICAgICAgICAiIiIgQ3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyBNb2NrIG9iamVjdCBlYWNoIGNhbGwgIiIiCiAgICAgICAgICAgICAgICBzZWxmLmZha2VfY29ubiA9IE1vY2soKQogICAgICAgICAgICAgICAgc2VsZi5mYWtlX2N1cnNvciA9IE1vY2soKQogICAgICAgICAgICAgICAgc2VsZi5mYWtlX2Nvbm4uY3Vyc29yID0gTW9jayhyZXR1cm5fdmFsdWU9c2VsZi5mYWtlX2N1cnNvcikKICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmZha2VfY29ubgoKICAgICAgICBzZWxmLkNvbm5DbGFzcyA9IENvbmNyZXRlQ29ubmVjdGlvbgoKICAgIGRlZiB0ZXN0X292ZXJyaWRlX2F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgQSBjb25jcmV0ZSBjbGFzcyBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcy4KICAgICAgICAiIiIKICAgICAgICAjIFVzZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzCiAgICAgICAgY29uY3JldGUgPSBzZWxmLkNvbm5DbGFzcygpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5kZWZhdWx0X2RiLCAnY29uY3JldGVkYicpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5kZWZhdWx0X3VzZXIsICdjb25jcmV0ZXVzZXInKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9wYXNzd2QsICdjb25jcmV0ZXBhc3N3ZCcpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5kZWZhdWx0X2hvc3QsICdjb25jcmV0ZWhvc3QnKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9wb3J0LCA5OTk5KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9leHRyYV9rd2FyZ3MsIHsnY2hhcnRzZXQnOiAndXQ4J30pCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5kYiwgJ2NvbmNyZXRlZGInKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUudXNlciwgJ2NvbmNyZXRldXNlcicpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5wYXNzd2QsICdjb25jcmV0ZXBhc3N3ZCcpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5ob3N0LCAnY29uY3JldGVob3N0JykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLnBvcnQsIDk5OTkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5leHRyYV9rd2FyZ3MsIHsnY2hhcnRzZXQnOiAndXQ4J30pCgogICAgICAgICMgVXNlIG1peAogICAgICAgIGNvbmNyZXRlID0gc2VsZi5Db25uQ2xhc3MoZGI9J290aGVyZGInLCBhc19kaWN0PVRydWUpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5kZWZhdWx0X2RiLCAnY29uY3JldGVkYicpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5kZWZhdWx0X3VzZXIsICdjb25jcmV0ZXVzZXInKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9wYXNzd2QsICdjb25jcmV0ZXBhc3N3ZCcpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5kZWZhdWx0X2hvc3QsICdjb25jcmV0ZWhvc3QnKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9wb3J0LCA5OTk5KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9leHRyYV9rd2FyZ3MsIHsnY2hhcnRzZXQnOiAndXQ4J30pCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5kYiwgJ290aGVyZGInKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUudXNlciwgJ2NvbmNyZXRldXNlcicpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5wYXNzd2QsICdjb25jcmV0ZXBhc3N3ZCcpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5ob3N0LCAnY29uY3JldGVob3N0JykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLnBvcnQsIDk5OTkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5leHRyYV9rd2FyZ3MsIHsnY2hhcnRzZXQnOiAndXQ4JywgJ2FzX2RpY3QnOiBUcnVlfSkKCiAgICAgICAgIyBUaGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGhhdmUgbm90IGJlZW4gb3ZlcndyaXR0ZW4KICAgICAgICBjb25jcmV0ZSA9IHNlbGYuQ29ubkNsYXNzKCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfZGIsICdjb25jcmV0ZWRiJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfdXNlciwgJ2NvbmNyZXRldXNlcicpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5kZWZhdWx0X3Bhc3N3ZCwgJ2NvbmNyZXRlcGFzc3dkJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfaG9zdCwgJ2NvbmNyZXRlaG9zdCcpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5kZWZhdWx0X3BvcnQsIDk5OTkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5kZWZhdWx0X2V4dHJhX2t3YXJncywgeydjaGFydHNldCc6ICd1dDgnfSkKCiAgICBkZWYgdGVzdF9jb25uZWN0KHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRoZSBjb25uZWN0IG1ldGhvZCBtdXN0IHJldHVybnMgYSBuZXcgY29ubmVjdGlvbi4KICAgICAgICAiIiIKICAgICAgICBjb25jcmV0ZSA9IHNlbGYuQ29ubkNsYXNzKCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmNvbm5lY3QoKSwgc2VsZi5mYWtlX2Nvbm4pCgogICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRoZSBjb25uZWN0aW9uIGNsYXNzIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIgbXVzdCByZXR1cm5zIGEgbmV3IGNvbm5lY3Rpb24uCiAgICAgICAgIiIiCiAgICAgICAgd2l0aCBzZWxmLkNvbm5DbGFzcygpIGFzIGNvbm46CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubiwgc2VsZi5mYWtlX2Nvbm4pCjx8ZmltX3N1ZmZpeHw+CgpjbGFzcyBDb25uZWN0aW9uc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBzZWxmLmZha2VfY29ubiA9IE5vbmUKPHxmaW1fZW5kfD4="]
["c178fa4194d54dc36ba7e7ac67967a71a1178a88-3","c178fa4194d54dc36ba7e7ac67967a71a1178a88","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CnRyeToKICAgIGZyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgTW9jawpleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBmcm9tIG1vY2sgaW1wb3J0IE1vY2sKCgpmcm9tIGRiaGVscGVycy5jb25uZWN0aW9ucyBpbXBvcnQgQmFzZUNvbm5lY3Rpb24KCgpjbGFzcyBDb25uZWN0aW9uc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBzZWxmLmZha2VfY29ubiA9IE5vbmUKICAgICAgICBzZWxmLmZha2VfY3Vyc29yID0gTm9uZQoKICAgICAgICBjbGFzcyBDb25jcmV0ZUNvbm5lY3Rpb24oQmFzZUNvbm5lY3Rpb24pOgogICAgICAgICAgICBkZWZhdWx0X2RiID0gJ2NvbmNyZXRlZGInCiAgICAgICAgICAgIGRlZmF1bHRfdXNlciA9ICdjb25jcmV0ZXVzZXInCiAgICAgICAgICAgIGRlZmF1bHRfcGFzc3dkID0gJ2NvbmNyZXRlcGFzc3dkJwogICAgICAgICAgICBkZWZhdWx0X2hvc3QgPSAnY29uY3JldGVob3N0JwogICAgICAgICAgICBkZWZhdWx0X3BvcnQgPSA5OTk5CiAgICAgICAgICAgIGRlZmF1bHRfZXh0cmFfa3dhcmdzID0geydjaGFydHNldCc6ICd1dDgnfQoKICAgICAgICAgICAgZGVmIGNvbm5lY3Qoc2VsZl8pOgogICAgICAgICAgICAgICAgIiIiIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgTW9jayBvYmplY3QgZWFjaCBjYWxsICIiIgogICAgICAgICAgICAgICAgc2VsZi5mYWtlX2Nvbm4gPSBNb2NrKCkKICAgICAgICAgICAgICAgIHNlbGYuZmFrZV9jdXJzb3IgPSBNb2NrKCkKICAgICAgICAgICAgICAgIHNlbGYuZmFrZV9jb25uLmN1cnNvciA9IE1vY2socmV0dXJuX3ZhbHVlPXNlbGYuZmFrZV9jdXJzb3IpCiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5mYWtlX2Nvbm4KCiAgICAgICAgc2VsZi5Db25uQ2xhc3MgPSBDb25jcmV0ZUNvbm5lY3Rpb24KCiAgICBkZWYgdGVzdF9vdmVycmlkZV9hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIEEgY29uY3JldGUgY2xhc3MgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMuCiAgICAgICAgIiIiCiAgICAgICAgIyBVc2UgdGhlIGRlZmF1bHQgYXR0cmlidXRlcwogICAgICAgIGNvbmNyZXRlID0gc2VsZi5Db25uQ2xhc3MoKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9kYiwgJ2NvbmNyZXRlZGInKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF91c2VyLCAnY29uY3JldGV1c2VyJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfcGFzc3dkLCAnY29uY3JldGVwYXNzd2QnKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9ob3N0LCAnY29uY3JldGVob3N0JykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfcG9ydCwgOTk5OSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfZXh0cmFfa3dhcmdzLCB7J2NoYXJ0c2V0JzogJ3V0OCd9KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGIsICdjb25jcmV0ZWRiJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLnVzZXIsICdjb25jcmV0ZXVzZXInKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUucGFzc3dkLCAnY29uY3JldGVwYXNzd2QnKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuaG9zdCwgJ2NvbmNyZXRlaG9zdCcpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5wb3J0LCA5OTk5KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZXh0cmFfa3dhcmdzLCB7J2NoYXJ0c2V0JzogJ3V0OCd9KQoKICAgICAgICAjIFVzZSBtaXgKICAgICAgICBjb25jcmV0ZSA9IHNlbGYuQ29ubkNsYXNzKGRiPSdvdGhlcmRiJywgYXNfZGljdD1UcnVlKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9kYiwgJ2NvbmNyZXRlZGInKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF91c2VyLCAnY29uY3JldGV1c2VyJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfcGFzc3dkLCAnY29uY3JldGVwYXNzd2QnKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9ob3N0LCAnY29uY3JldGVob3N0JykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfcG9ydCwgOTk5OSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfZXh0cmFfa3dhcmdzLCB7J2NoYXJ0c2V0JzogJ3V0OCd9KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGIsICdvdGhlcmRiJykKPHxmaW1faG9sZXw+CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5leHRyYV9rd2FyZ3MsIHsnY2hhcnRzZXQnOiAndXQ4JywgJ2FzX2RpY3QnOiBUcnVlfSkKCiAgICAgICAgIyBUaGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGhhdmUgbm90IGJlZW4gb3ZlcndyaXR0ZW4KICAgICAgICBjb25jcmV0ZSA9IHNlbGYuQ29ubkNsYXNzKCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfZGIsICdjb25jcmV0ZWRiJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfdXNlciwgJ2NvbmNyZXRldXNlcicpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5kZWZhdWx0X3Bhc3N3ZCwgJ2NvbmNyZXRlcGFzc3dkJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfaG9zdCwgJ2NvbmNyZXRlaG9zdCcpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5kZWZhdWx0X3BvcnQsIDk5OTkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5kZWZhdWx0X2V4dHJhX2t3YXJncywgeydjaGFydHNldCc6ICd1dDgnfSkKCiAgICBkZWYgdGVzdF9jb25uZWN0KHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRoZSBjb25uZWN0IG1ldGhvZCBtdXN0IHJldHVybnMgYSBuZXcgY29ubmVjdGlvbi4KICAgICAgICAiIiIKICAgICAgICBjb25jcmV0ZSA9IHNlbGYuQ29ubkNsYXNzKCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmNvbm5lY3QoKSwgc2VsZi5mYWtlX2Nvbm4pCgogICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRoZSBjb25uZWN0aW9uIGNsYXNzIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIgbXVzdCByZXR1cm5zIGEgbmV3IGNvbm5lY3Rpb24uCiAgICAgICAgIiIiCiAgICAgICAgd2l0aCBzZWxmLkNvbm5DbGFzcygpIGFzIGNvbm46CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubiwgc2VsZi5mYWtlX2Nvbm4pCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS51c2VyLCAnY29uY3JldGV1c2VyJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLnBhc3N3ZCwgJ2NvbmNyZXRlcGFzc3dkJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmhvc3QsICdjb25jcmV0ZWhvc3QnKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUucG9ydCwgOTk5OSkKPHxmaW1fZW5kfD4="]
["c178fa4194d54dc36ba7e7ac67967a71a1178a88-4","c178fa4194d54dc36ba7e7ac67967a71a1178a88","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CnRyeToKICAgIGZyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgTW9jawpleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBmcm9tIG1vY2sgaW1wb3J0IE1vY2sKCgpmcm9tIGRiaGVscGVycy5jb25uZWN0aW9ucyBpbXBvcnQgQmFzZUNvbm5lY3Rpb24KCgpjbGFzcyBDb25uZWN0aW9uc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBzZWxmLmZha2VfY29ubiA9IE5vbmUKICAgICAgICBzZWxmLmZha2VfY3Vyc29yID0gTm9uZQoKICAgICAgICBjbGFzcyBDb25jcmV0ZUNvbm5lY3Rpb24oQmFzZUNvbm5lY3Rpb24pOgogICAgICAgICAgICBkZWZhdWx0X2RiID0gJ2NvbmNyZXRlZGInCiAgICAgICAgICAgIGRlZmF1bHRfdXNlciA9ICdjb25jcmV0ZXVzZXInCiAgICAgICAgICAgIGRlZmF1bHRfcGFzc3dkID0gJ2NvbmNyZXRlcGFzc3dkJwogICAgICAgICAgICBkZWZhdWx0X2hvc3QgPSAnY29uY3JldGVob3N0JwogICAgICAgICAgICBkZWZhdWx0X3BvcnQgPSA5OTk5CiAgICAgICAgICAgIGRlZmF1bHRfZXh0cmFfa3dhcmdzID0geydjaGFydHNldCc6ICd1dDgnfQoKICAgICAgICAgICAgZGVmIGNvbm5lY3Qoc2VsZl8pOgogICAgICAgICAgICAgICAgIiIiIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgTW9jayBvYmplY3QgZWFjaCBjYWxsICIiIgogICAgICAgICAgICAgICAgc2VsZi5mYWtlX2Nvbm4gPSBNb2NrKCkKICAgICAgICAgICAgICAgIHNlbGYuZmFrZV9jdXJzb3IgPSBNb2NrKCkKICAgICAgICAgICAgICAgIHNlbGYuZmFrZV9jb25uLmN1cnNvciA9IE1vY2socmV0dXJuX3ZhbHVlPXNlbGYuZmFrZV9jdXJzb3IpCiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5mYWtlX2Nvbm4KCiAgICAgICAgc2VsZi5Db25uQ2xhc3MgPSBDb25jcmV0ZUNvbm5lY3Rpb24KCiAgICBkZWYgdGVzdF9vdmVycmlkZV9hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIEEgY29uY3JldGUgY2xhc3MgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMuCiAgICAgICAgIiIiCiAgICAgICAgIyBVc2UgdGhlIGRlZmF1bHQgYXR0cmlidXRlcwogICAgICAgIGNvbmNyZXRlID0gc2VsZi5Db25uQ2xhc3MoKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9kYiwgJ2NvbmNyZXRlZGInKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF91c2VyLCAnY29uY3JldGV1c2VyJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfcGFzc3dkLCAnY29uY3JldGVwYXNzd2QnKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9ob3N0LCAnY29uY3JldGVob3N0JykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfcG9ydCwgOTk5OSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfZXh0cmFfa3dhcmdzLCB7J2NoYXJ0c2V0JzogJ3V0OCd9KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGIsICdjb25jcmV0ZWRiJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLnVzZXIsICdjb25jcmV0ZXVzZXInKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUucGFzc3dkLCAnY29uY3JldGVwYXNzd2QnKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuaG9zdCwgJ2NvbmNyZXRlaG9zdCcpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5wb3J0LCA5OTk5KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZXh0cmFfa3dhcmdzLCB7J2NoYXJ0c2V0JzogJ3V0OCd9KQoKICAgICAgICAjIFVzZSBtaXgKICAgICAgICBjb25jcmV0ZSA9IHNlbGYuQ29ubkNsYXNzKGRiPSdvdGhlcmRiJywgYXNfZGljdD1UcnVlKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9kYiwgJ2NvbmNyZXRlZGInKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF91c2VyLCAnY29uY3JldGV1c2VyJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfcGFzc3dkLCAnY29uY3JldGVwYXNzd2QnKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9ob3N0LCAnY29uY3JldGVob3N0JykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfcG9ydCwgOTk5OSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfZXh0cmFfa3dhcmdzLCB7J2NoYXJ0c2V0JzogJ3V0OCd9KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGIsICdvdGhlcmRiJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLnVzZXIsICdjb25jcmV0ZXVzZXInKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUucGFzc3dkLCAnY29uY3JldGVwYXNzd2QnKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuaG9zdCwgJ2NvbmNyZXRlaG9zdCcpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5wb3J0LCA5OTk5KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZXh0cmFfa3dhcmdzLCB7J2NoYXJ0c2V0JzogJ3V0OCcsICdhc19kaWN0JzogVHJ1ZX0pCgogICAgICAgICMgVGhlIGRlZmF1bHQgYXR0cmlidXRlcyBoYXZlIG5vdCBiZWVuIG92ZXJ3cml0dGVuCiAgICAgICAgY29uY3JldGUgPSBzZWxmLkNvbm5DbGFzcygpCjx8ZmltX2hvbGV8PgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9wb3J0LCA5OTk5KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9leHRyYV9rd2FyZ3MsIHsnY2hhcnRzZXQnOiAndXQ4J30pCgogICAgZGVmIHRlc3RfY29ubmVjdChzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUaGUgY29ubmVjdCBtZXRob2QgbXVzdCByZXR1cm5zIGEgbmV3IGNvbm5lY3Rpb24uCiAgICAgICAgIiIiCiAgICAgICAgY29uY3JldGUgPSBzZWxmLkNvbm5DbGFzcygpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25jcmV0ZS5jb25uZWN0KCksIHNlbGYuZmFrZV9jb25uKQoKICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUaGUgY29ubmVjdGlvbiBjbGFzcyB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyIG11c3QgcmV0dXJucyBhIG5ldyBjb25uZWN0aW9uLgogICAgICAgICIiIgogICAgICAgIHdpdGggc2VsZi5Db25uQ2xhc3MoKSBhcyBjb25uOgogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbm4sIHNlbGYuZmFrZV9jb25uKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9kYiwgJ2NvbmNyZXRlZGInKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF91c2VyLCAnY29uY3JldGV1c2VyJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmNyZXRlLmRlZmF1bHRfcGFzc3dkLCAnY29uY3JldGVwYXNzd2QnKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uY3JldGUuZGVmYXVsdF9ob3N0LCAnY29uY3JldGVob3N0JykKPHxmaW1fZW5kfD4="]
["41324d747099e5a37405fdb96aef6094da37569a-1","41324d747099e5a37405fdb96aef6094da37569a",{"$cut":{"chars":16496,"head":"PHxmaW1fcHJlZml4fD4KYmVxX2NvdW50ZXIgPSAwCgpkZWYgY29kZUdlbmVyYXRvcihlbnRyYWRhKToKICAgIHdpdGggb3BlbignbWlwc19jb2RlLnR4dCcsICd3JykgYXMgb3V0OgogICAgICAgIHN0cmluZyA9IGNnZW4oZW50cmFkYSkKICAgICAgICBvdXQud3JpdGUoc3RyaW5nKQoKZGVmIGNnZW4oZW50cmFkYSk6CiAgICAjIHByaW50KGVudHJhZGEuY2hpbGRyZW5bMV0udHlwZSkKICAgIGlmKGVudHJhZGEuY2hpbGRyZW5bMF0gaXMgbm90IE5vbmUpOgogICAgICAgIHBhcnRlMSA9IGNnZW5NYWluKGVudHJhZGEuY2hpbGRyZW5bMF0pCiAgICBpZihlbnRyYWRhLmNoaWxkcmVuWzFdIGlzIG5vdCBOb25lKToKICAgICAgICBwYXJ0ZTIgPSBjZ2VuX011bHRpcGxhc19DbGFzc2VzKGVudHJhZGEuY2hpbGRyZW5bMV0pCiAgICBzdHJpbmcgPSBmIntwYXJ0ZTF9XG57cGFydGUyfSIKICAgIHJldHVybiBzdHJpbmcKCmRlZiBjZ2VuX011bHRpcGxhc19DbGFzc2VzKGVudHJhZGEpOgogICAgc3RyaW5nID0gIiIKICAgIGlmKGxlbihlbnRyYWRhLmNoaWxkcmVuKSA+IDEpOgogICAgICAgIHN0cmluZyArPSBjZ2VuX2NsYXNzZShlbnRyYWRhLmNoaWxkcmVuWzFdKQogICAgICAgIHN0cmluZyArPSBjZ2VuX011bHRpcGxhc19DbGFzc2VzKGVudHJhZGEuY2hpbGRyZW5bMF0pCiAgICByZXR1cm4gc3RyaW5nCgpkZWYgY2dlbl9jbGFzc2UoZW50cmFkYSk6CiAgICBzdHJpbmcgPSAiIgogICAgaWYgKGxlbihlbnRyYWRhLmNoaWxkcmVuKSA+IDEpOgogICAgICAgIHN0cmluZyA9IGNnZW5fbXVsdGlwbGFzX3ZhcmlhdmVpcyhlbnRyYWRhLmNoaWxkcmVuWzFdKQogICAgICAgIHN0cmluZyArPSBjZ2VuX211bHRpcGxvc19tZXRvZG9zKGVudHJhZGEuY2hpbGRyZW5bMl0pCiAgICByZXR1cm4gc3RyaW5nCgpkZWYgY2dlbl9tdWx0aXBsb3NfbWV0b2RvcyhlbnRyYWRhKToKICAgIHN0cmluZyA9ICIiCiAgICBpZiAoIGxlbihlbnRyYWRhLmNoaWxkcmVuKSA+IDEpOgogICAgICAgIHN0cmluZyArPSBjZ2VuX3B1YmxpYyhlbnRyYWRhKQogICAgICAgIHN0cmluZyArPSBjZ2VuX211bHRpcGxvc19tZXRvZG9zKGVudHJhZGEuY2hpbGRyZW5bMV0pCiAgICByZXR1cm4gc3RyaW5nCgpkZWYgY2dlbl9wdWJsaWMoZW50cmFkYSk6CiAgICBzdHJpbmcgPSAiIgogICAgZm9yIGNoaWxkIGluIGVudHJhZGEuY2hpbGRyZW46CiAgICAgICAgaWYoY2hpbGQudHlwZSA9PSAiY21kcyIpOgogICAgICAgICAgICBzdHJpbmcgKz0gY2dlbl9tdWx0aXBsYXNfY21kcyhjaGlsZCkKICAgICAgICBpZihjaGlsZC50eXBlID09ICJleHAiKToKICAgICAgICAgICAgc3RyaW5nICs9IGNnZW5fZXhwKGNoaWxkKQogICAgcmV0dXJuIHN0cmluZwoKZGVmIGNnZW5fbXVsdGlwbGFzX3ZhcmlhdmVpcyhlbnRyYWRhKToKICAgIHN0cmluZyA9ICIiCiAgICBpZihsZW4oZW50cmFkYS5jaGlsZHJlbikgPiAxKToKICAgICAgICBzdHJpbmcgKz0gY2dlbl90aXBvKGVudHJhZGEuY2hpbGRyZW5bMF0pCiAgICAgICAgc3RyaW5nICs9IGNnZW5fbXVsdGlwbGFzX3ZhcmlhdmVpcyhlbnRyYWRhLmNoaWxkcmVuWzFdKQogICAgcmV0dXJuIHN0cmluZwoKZGVmIGNnZW5fdGlwbyhlbnRyYWRhKToKICAgIHJldHVybiAiIgoKZGVmIGNnZW5fbXVsdGlwbGFzX2NtZHMoZW50cmFkYSk6CiAgICBzdHJpbmcgPSAiIgoKICAgIGlmIChsZW4oZW50cmFkYS5jaGlsZHJlbikgPiAxKToKICAgICAgICBzdHJpbmcgKz0gY2dlbkNNRChlbnRyYWRhLmNoaWxkcmVuWzBdKQogICAgICAgIHN0cmluZyArPSBjZ2VuX211bHRpcGxhc19jbWRzKGVudHJhZGEuY2hpbGRyZW5bMV0pCiAgICByZXR1cm4gc3RyaW5nCgpkZWYgY2dlbk1haW4oZW50cmFkYSk6CiAgICBwYXJ0ZTEgPSAiIgogICAgaWYoZW50cmFkYS5jaGlsZHJlblswXSBpcyBub3QgTm9uZSk6CiAgICAgICAgcGFydGUxICs9IGNnZW5DTUQoZW50cmFkYS5jaGlsZHJlblswXSkKCiAgICBzdHJpbmcgPSAoCiAgICAgICAgZiJtb3ZlICRmcCAkc3BcbiIKICAgICAgICBmInN3ICRyYSAwKCRzcClcbiIKICAgICAgICBmImFkZGl1ICRzcCAkc3AgLTRcbiIKICAgICAgICBmIntwYXJ0ZTF9XG4iCiAgICAgICAgZiJsdyAkcmEgNCgkc3ApXG4iCiAgICAgICAgZiJhZGRpdSAkc3AgJHNwIDRcbiIKICAgICAgICBmImx3ICRmcCAwKCRzcClcbiIKICAgICAgICBmImpyICRyYSIKICAgICkKCiAgICByZXR1cm4gc3RyaW5nCgpkZWYgY2dlbkNNRChlbnRyYWRhKToKICAgIHBhcnRlMSA9ICIiCiAgICBpZiAobGVuKGVudHJhZGEubGVhZikgPiAwKToKICAgICAgICBpZihlbnRyYWRhLmxlYWZbMF0gPT0gInsiKToKICAgICAgICAgICAgcGFydGUxICs9IGNnZW5fY2hhdmUoZW50cmFkYSkKICAgICAgICBlbGlmKGVudHJhZGEubGVhZlswXS5sb3dlcigpID09ICJpZiIpOgogICAgICAgICAgICBwYXJ0ZTEgKz0gY2dlbl9pZihlbnRyYWRhKQogICAgICAgIGVsaWYoZW50cmFkYS5sZWFmWzBdLmxvd2VyKCkgPT0gImVsc2UiKToKICAgICAgICAgICAgcGFydGUxICs9IGNnZW5fZWxzZWlmKGVudHJhZGEpCiAgICAgICAgZWxpZihlbnRyYWRhLmxlYWZbMF0ubG93ZXIoKSA9PSAid2hpbGUiKToKICAgICAgICAgICAgcGFydGUxICs9IGNnZW5fd2hpbGUoZW50cmFkYSkKICAgICAgICBlbGlmKGVudHJhZGEubGVhZlswXS5sb3dlcigpID09ICJzeXN0ZW0ub3V0LnByaW50bG4iKToKICAgICAgICAgICAgcGFydGUxICs9IGNnZW5fc291dChlbnRyYWRhKQogICAgZWxpZiggbGVuKGVudHJhZGEubGVhZikgPiAxKToKICAgICAgICBpZihlbnRyYWRhLmxlYWZbMV0ubG93ZXIoKSA9PSAiPSIpOgogICAgICAgICAgICBwYXJ0ZTEgKz0gY2dlbl9hc3NpZ24oZW50cmFkYSkKICAgICAgICBlbGlmKGVudHJhZGEubGVhZlsxXS5sb3dlcigpID09ICJbIik6CiAgICAgICAgICAgIHBhcnRlMSArPSBjZ2VuX2lkKGVudHJhZGEpCiAgICByZXR1cm4gcGFydGUxCgpkZWYgY2dlbl9jaGF2ZShlbnRyYWRhKToKICAgIHJldHVybiBjZ2VuX211bHRpcGxhc19jbWRzKGVudHJhZGEuY2hpbGRyZW5bMF0pCgpkZWYgY2dlbl9pZChlbnRyYWRhKToKICAgIHJldHVybiAi"}}]
["41324d747099e5a37405fdb96aef6094da37569a-2","41324d747099e5a37405fdb96aef6094da37569a","PHxmaW1fcHJlZml4fD4KYmVxX2NvdW50ZXIgPSAwCgpkZWYgY29kZUdlbmVyYXRvcihlbnRyYWRhKToKICAgIHdpdGggb3BlbignbWlwc19jb2RlLnR4dCcsICd3JykgYXMgb3V0OgogICAgICAgIHN0cmluZyA9IGNnZW4oZW50cmFkYSkKICAgICAgICBvdXQud3JpdGUoc3RyaW5nKQoKZGVmIGNnZW4oZW50cmFkYSk6CiAgICAjIHByaW50KGVudHJhZGEuY2hpbGRyZW5bMV0udHlwZSkKICAgIGlmKGVudHJhZGEuY2hpbGRyZW5bMF0gaXMgbm90IE5vbmUpOgogICAgICAgIHBhcnRlMSA9IGNnZW5NYWluKGVudHJhZGEuY2hpbGRyZW5bMF0pCiAgICBpZihlbnRyYWRhLmNoaWxkcmVuWzFdIGlzIG5vdCBOb25lKToKICAgICAgICBwYXJ0ZTIgPSBjZ2VuX011bHRpcGxhc19DbGFzc2VzKGVudHJhZGEuY2hpbGRyZW5bMV0pCiAgICBzdHJpbmcgPSBmIntwYXJ0ZTF9XG57cGFydGUyfSIKICAgIHJldHVybiBzdHJpbmcKCmRlZiBjZ2VuX011bHRpcGxhc19DbGFzc2VzKGVudHJhZGEpOgogICAgc3RyaW5nID0gIiIKICAgIGlmKGxlbihlbnRyYWRhLmNoaWxkcmVuKSA+IDEpOgogICAgICAgIHN0cmluZyArPSBjZ2VuX2NsYXNzZShlbnRyYWRhLmNoaWxkcmVuWzFdKQogICAgICAgIHN0cmluZyArPSBjZ2VuX011bHRpcGxhc19DbGFzc2VzKGVudHJhZGEuY2hpbGRyZW5bMF0pCiAgICByZXR1cm4gc3RyaW5nCgpkZWYgY2dlbl9jbGFzc2UoZW50cmFkYSk6CiAgICBzdHJpbmcgPSAiIgogICAgaWYgKGxlbihlbnRyYWRhLmNoaWxkcmVuKSA+IDEpOgogICAgICAgIHN0cmluZyA9IGNnZW5fbXVsdGlwbGFzX3ZhcmlhdmVpcyhlbnRyYWRhLmNoaWxkcmVuWzFdKQogICAgICAgIHN0cmluZyArPSBjZ2VuX211bHRpcGxvc19tZXRvZG9zKGVudHJhZGEuY2hpbGRyZW5bMl0pCiAgICByZXR1cm4gc3RyaW5nCgpkZWYgY2dlbl9tdWx0aXBsb3NfbWV0b2RvcyhlbnRyYWRhKToKICAgIHN0cmluZyA9ICIiCiAgICBpZiAoIGxlbihlbnRyYWRhLmNoaWxkcmVuKSA+IDEpOgogICAgICAgIHN0cmluZyArPSBjZ2VuX3B1YmxpYyhlbnRyYWRhKQogICAgICAgIHN0cmluZyArPSBjZ2VuX211bHRpcGxvc19tZXRvZG9zKGVudHJhZGEuY2hpbGRyZW5bMV0pCiAgICByZXR1cm4gc3RyaW5nCgpkZWYgY2dlbl9wdWJsaWMoZW50cmFkYSk6CiAgICBzdHJpbmcgPSAiIgogICAgZm9yIGNoaWxkIGluIGVudHJhZGEuY2hpbGRyZW46CiAgICAgICAgaWYoY2hpbGQudHlwZSA9PSAiY21kcyIpOgogICAgICAgICAgICBzdHJpbmcgKz0gY2dlbl9tdWx0aXBsYXNfY21kcyhjaGlsZCkKICAgICAgICBpZihjaGlsZC50eXBlID09ICJleHAiKToKICAgICAgICAgICAgc3RyaW5nICs9IGNnZW5fZXhwKGNoaWxkKQogICAgcmV0dXJuIHN0cmluZwoKZGVmIGNnZW5fbXVsdGlwbGFzX3ZhcmlhdmVpcyhlbnRyYWRhKToKICAgIHN0cmluZyA9ICIiCiAgICBpZihsZW4oZW50cmFkYS5jaGlsZHJlbikgPiAxKToKICAgICAgICBzdHJpbmcgKz0gY2dlbl90aXBvKGVudHJhZGEuY2hpbGRyZW5bMF0pCiAgICAgICAgc3RyaW5nICs9IGNnZW5fbXVsdGlwbGFzX3ZhcmlhdmVpcyhlbnRyYWRhLmNoaWxkcmVuWzFdKQogICAgcmV0dXJuIHN0cmluZwoKZGVmIGNnZW5fdGlwbyhlbnRyYWRhKToKICAgIHJldHVybiAiIgoKZGVmIGNnZW5fbXVsdGlwbGFzX2NtZHMoZW50cmFkYSk6CiAgICBzdHJpbmcgPSAiIgoKICAgIGlmIChsZW4oZW50cmFkYS5jaGlsZHJlbikgPiAxKToKICAgICAgICBzdHJpbmcgKz0gY2dlbkNNRChlbnRyYWRhLmNoaWxkcmVuWzBdKQogICAgICAgIHN0cmluZyArPSBjZ2VuX211bHRpcGxhc19jbWRzKGVudHJhZGEuY2hpbGRyZW5bMV0pCiAgICByZXR1cm4gc3RyaW5nCgpkZWYgY2dlbk1haW4oZW50cmFkYSk6CiAgICBwYXJ0ZTEgPSAiIgogICAgaWYoZW50cmFkYS5jaGlsZHJlblswXSBpcyBub3QgTm9uZSk6CiAgICAgICAgcGFydGUxICs9IGNnZW5DTUQoZW50cmFkYS5jaGlsZHJlblswXSkKCiAgICBzdHJpbmcgPSAoCiAgICAgICAgZiJtb3ZlICRmcCAkc3BcbiIKICAgICAgICBmInN3ICRyYSAwKCRzcClcbiIKICAgICAgICBmImFkZGl1ICRzcCAkc3AgLTRcbiIKICAgICAgICBmIntwYXJ0ZTF9XG4iCiAgICAgICAgZiJsdyAkcmEgNCgkc3ApXG4iCiAgICAgICAgZiJhZGRpdSAkc3AgJHNwIDRcbiIKICAgICAgICBmImx3ICRmcCAwKCRzcClcbiIKICAgICAgICBmImpyICRyYSIKICAgICkKCiAgICByZXR1cm4gc3RyaW5nCgpkZWYgY2dlbkNNRChlbnRyYWRhKToKICAgIHBhcnRlMSA9ICIiCiAgICBpZiAobGVuKGVudHJhZGEubGVhZikgPiAwKToKICAgICAgICBpZihlbnRyYWRhLmxlYWZbMF0gPT0gInsiKToKICAgICAgICAgICAgcGFydGUxICs9IGNnZW5fY2hhdmUoZW50cmFkYSkKICAgICAgICBlbGlmKGVudHJhZGEubGVhZlswXS5sb3dlcigpID09ICJpZiIpOgogICAgICAgICAgICBwYXJ0ZTEgKz0gY2dlbl9pZihlbnRyYWRhKQogICAgICAgIGVsaWYoZW50cmFkYS5sZWFmWzBdLmxvd2VyKCkgPT0gImVsc2UiKToKICAgICAgICAgICAgcGFydGUxICs9IGNnZW5fZWxzZWlmKGVudHJhZGEpCiAgICAgICAgZWxpZihlbnRyYWRhLmxlYWZbMF0ubG93ZXIoKSA9PSAid2hpbGUiKToKICAgICAgICAgICAgcGFydGUxICs9IGNnZW5fd2hpbGUoZW50cmFkYSkKICAgICAgICBlbGlmKGVudHJhZGEubGVhZlswXS5sb3dlcigpID09ICJzeXN0ZW0ub3V0LnByaW50bG4iKToKICAgICAgICAgICAgcGFydGUxICs9IGNnZW5fc291dChlbnRyYWRhKQogICAgZWxpZiggbGVuKGVudHJhZGEubGVhZikgPiAxKToKICAgICAgICBpZihlbnRyYWRhLmxlYWZbMV0ubG93ZXIoKSA9PSAiPSIpOgogICAgICAgICAgICBwYXJ0ZTEgKz0gY2dlbl9hc3NpZ24oZW50cmFkYSkKICAgICAgICBlbGlmKGVudHJhZGEubGVhZlsxXS5sb3dlcigpID09ICJbIik6CiAgICAgICAgICAgIHBhcnRlMSArPSBjZ2VuX2lkKGVudHJhZGEpCiAgICByZXR1cm4gcGFydGUxCgpkZWYgY2dlbl9jaGF2ZShlbnRyYWRhKToKICAgIHJldHVybiBjZ2VuX211bHRpcGxhc19jbWRzKGVudHJhZGEuY2hpbGRyZW5bMF0pCgpkZWYgY2dlbl9pZChlbnRyYWRhKToKICAgIHJldHVybiAiIgoKZGVmIGNnZW5fYXNzaWduKGVudHJhZGEpOgogICAgdmFyID0gZW50cmFkYS5sZWFmWzBdCiAgICBwYXJ0ZTEgPSBjZ2VuX2V4cChlbnRyYWRhLmNoaWxkcmVuWzBdKQogICAgc3RyaW5nID0gKAogICAgICAgIGYie3BhcnRlMX1cbiIKICAgICAgICBmImxhICR0MSB7dmFyfVxuIgogICAgICAgIGYic3cgJGEwIDAoJHQxKSIKICAgICkKICAgIHJldHVybiBzdHJpbmcKCmRlZiBjZ2VuX3NvdXQoZW50cmFkYSk6CiAgICByZXR1cm4gKAogICAgICAgIGYibGkgJHYwLCAxXG4iCiAgICAgICAgZiJtb3ZlICRhMCwgJHQwXG4iCiAgICAgICAgZiJzeXNjYWxsIgogICAgKQoKZGVmIGNnZW5fd2hpbGUoZW50cmFkYSk6CiAgICBjb25kaWNhbyA9IGNnZW5fZXhwKGVudHJhZGEuY2hpbGRyZW5bMF0pCiAgICBwYXJ0ZTEgPSBjZ2VuX2NtZChlbnRyYWRhLmNoaWxkcmVuWzFdKQogICAgZ2xvYmFsIGJlcV9jb3VudGVyCiAgICBzdHJpbmcgKz0gKAogICAgICAgIGYie2NvbmRpY2FvfVxuIgogICAgICAgIGYic3cgJGEwIDAoJHNwKVxuIgogICAgICAgIGYiYWRkaXUgJHNwICRzcCAtNFxuIgogICAgICAgIGYic3RhcnR7YmVxX2NvdW50ZXJ9OlxuIgogICAgICAgIGYiYmVxICRhMCAkemVybyBmYWxzZXtiZXFfY291bnRlcn1cbiIKICAgICAgICBmIntwYXJ0ZTF9XG4iCiAgICAgICAgZiJiIHN0YXJ0e2JlcV9jb3VudGVyfVxuIgogICAgICAgIGYiZmFsc2V7YmVxX2NvdW50ZXJ9OlxuIgogICAgICAgIGYiYWRkaXUgJHNwICRzcCA0IgogICAgICAgICkKICAgIGJlcV9jb3VudGVyICs9IDEKICAgIHJldHVybiBzdHJpbmcKCmRlZiBjZ2VuX2Vsc2VpZihlbnRyYWRhKToKICAgIGNvbmQgPSBjZ2VuX2V4cChlbnRyYWRhLmNoaWxkcmVuWzBdKQogICAgcGFydGUxID0gY2dlbl9leHAoZW50cmFkYS5jaGlsZHJlblsxXSkKCiAgICBnbG9iYWwgYmVxX2NvdW50ZXIKICAgIHN0cmluZyA9ICgKICAgICAgICBmIntjb25kfVxuIgogICAgICAgIGYic3cgJGEwIDAoJHNwKVxuIgogICAgICAgIGYiYWRkaXUgJHNwICRzcCAtNFxuIgogICAgICAgIGYiYmVxICRhMCAkemVybyBmYWxzZXtiZXFfY291bnRlcn1cbiIKICAgICAgICBmIntwYXJ0ZTF9XG4iCiAgICAgICAgZiJmYWxzZXtiZXFfY291bnRlcn06XG4iCiAgICAgICAgZiJhZGRpdSAkc3AgJHNwIDQiCiAgICApCiAgICBiZXFfY291bnRlciArPSAxCgogICAgcmV0dXJuIHN0cmluZwoKZGVmIGNnZW5faWYoZW50cmFkYSk6CgogICAgY29uZCA9IGNnZW5fZXhwKGVudHJhZGEuY2hpbGRyZW5bMF0pCiAgICBwYXJ0ZTEgPSBjZ2VuX2V4cChlbnRyYWRhLmNoaWxkcmVuWzFdKQoKICAgIGdsb2JhbCBiZXFfY291bnRlcgogICAgc3RyaW5nID0gKAogICAgICAgIGYie2NvbmR9XG4iCiAgICAgICAgZiJzdyAkYTAgMCgkc3ApXG4iCiAgICAgICAgZiJhZGRpdSAkc3AgJHNwIC00XG4iCiAgICAgICAgZiJiZXEgJGEwICR6ZXJvIGZhbHNle2JlcV9jb3VudGVyfVxuIgogICAgICAgIGYie3BhcnRlMX1cbiIKICAgICAgICBmImZhbHNle2JlcV9jb3VudGVyfTpcbiIKICAgICAgICBmImFkZGl1ICRzcCAkc3AgNCIKICAgICkKICAgIGJlcV9jb3VudGVyICs9IDEKCiAgICByZXR1cm4gc3RyaW5nCgpkZWYgY2dlbl9leHAoZW50cmFkYSk6CiAgICBzdHJpbmcgPSAiIgogICAgaWYobGVuKGVudHJhZGEuY2hpbGRyZW4pID4gMCk6CiAgICAgICAgc3RyaW5nICs9IGNnZW5fZXhwX2V4cChlbnRyYWRhKQogICAgZWxzZToKICAgICAgICBzdHJpbmcgKz0gY2dlbl9leHBfcmV4cChlbnRyYWRhKQogICAgcmV0dXJuIHN0cmluZwoKZGVmIGNnZW5fZXhwX2V4cChlbnRyYWRhKToKICAgIHN0cmluZyA9ICIiCiAgICBwYXJ0ZTEgPSAiIgogICAgcGFydGUyID0gIiIKICAgIGlmKGxlbihlbnRyYWRhLmNoaWxkcmVuKSA+IDApOgogICAgICAgIGlmKGVudHJhZGEudHlwZSA9PSAnY21kJyk6CiAgICAgICAgICAgIHBhcnRlMSArPSBjZ2VuQ01EKGVudHJhZGEpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcGFydGUxICs9IGNnZW5fcmV4cChlbnRyYWRhLmNoaWxkcmVuWzBdKQogICAgc3RyaW5nICs9ICgKICAgICAgICBmIntwYXJ0ZTF9XG4iCiAgICAgICAgZiJzdyAkYTAgMCgkc3ApXG4iCiAgICAgICAgZiJhZGRpdSAkc3AgJHNwIC00XG4iCiAgICAgICAgZiJsdyAkdDEgNCgkc3ApXG4iCiAgICAgICAgZiJhbmQgJGEwICR0MSAkYTBcbiIKICAgICAgICBmImFkZGl1ICRzcCAkc3AgNCIKICAgICkKICAgIHJldHVybiBzdHJpbmcKCmRlZiBjZ2VuX3JleHAoZW50cmFkYSk6CiAgICAjIHJleHAgOiByZXhwIHJleHAyCiAgICAjICAgICAgICAgfCBhZXhwCiAgICBzdHJpbmcgPSAiIgogICAgaWYgKGxlbihlbnRyYWRhLmNoaWxkcmVuKSA+IDEpOgogICAgICAgIHN0cmluZyArPSBjZ2VuX3JleHAyKGVudHJhZGEpCiAgICBlbHNlOgogICAgICAgIHN0cmluZyArPSBjZ2VuX2FleHAoZW50cmFkYS5jaGlsZHJlblswXSkKICAgIHJldHVybiBzdHJpbmcKICAgICMgaWYobGVuKGVudHJhZGEuY2hpbGRyZW4pKQoKZGVmIGNnZW5fcmV4cDIoZW50cmFkYSk6CiAgICBzdHJpbmcgPSAiIgogICAgcGFydGUyID0gIiIKICAgIHBhcnRlMSA9IGNnZW5fcmV4cChlbnRyYWRhLmNoaWxkcmVuWzBdKQogICAgcGFydGUyICs9IGNnZW5fYWV4cChlbnRyYWRhLmNoaWxkcmVuWzFdLmNoaWxkcmVuWzBdKQogICAgZ2xvYmFsIGJlcV9jb3VudGVyCiAgICBpZiAoZW50cmFkYS5jaGlsZHJlblsxXS5sZWFmWzBdID09ICI8Iik6CiAgICAgICAgc3RyaW5nICs9ICgKICAgICAgICAgICAgICAgIGYie3BhcnRlMX1cbiIKICAgICAgICAgICAgICAgIGYic3cgJGEwIDAoJHNwKVxuIgogICAgICAgICAgICAgICAgZiJhZGRpdSAkc3AgJHNwIC00XG4iCiAgICAgICAgICAgICAgICBmIntwYXJ0ZTJ9XG4iCiAgICAgICAgICAgICAgICBmImx3ICR0MSA0KCRzcClcbiIKICAgICAgICAgICAgICAgIGYic2x0ICRhMCAkdDEgJGEwXG4iCiAgICAgICAgICAgICAgICBmImFkZGl1ICRzcCAkc3AgNCIKICAgICAgICAgICAgKQogICAgZWxpZiAoZW50cmFkYS5jaGlsZHJlblsxXS5sZWFmWzBdID09ICI+Iik6CiAgICAgICAgc3RyaW5nICs9ICgKICAgICAgICAgICAgZiJ7cGFydGUxfVxuIgogICAgICAgICAgICBmInN3ICRhMCAwKCRzcClcbiIKICAgICAgICAgICAgZiJhZGRpdSAkc3AgJHNwIC00XG4iCiAgICAgICAgICAgIGYie3BhcnRlMn1cbiIKICAgICAgICAgICAgZiJsdyAkdDEgNCgkc3ApXG4iCiAgICAgICAgICAgIGYic2x0ICRhMCAkYTAgJHQxXG4iCiAgICAgICAgICAgIGYiYWRkaXUgJHNwICRzcCA0IgogICAgICAgICkKICAgIGVsaWYgKGVudHJhZGEuY2hpbGRyZW5bMV0ubGVhZlswXSA9PSAiPT0iKToKICAgICAgICBzdHJpbmcgKz0gKAogICAgICAgICAgICBmIntwYXJ0ZTF9XG4iCiAgICAgICAgICAgIGYic3cgJGEwIDAoJHNwKVxuIgogICAgICAgICAgICBmImFkZGl1ICRzcCAkc3AgLTRcbiIKICAgICAgICAgICAgZiJ7cGFydGUyfVxuIgogICAgICAgICAgICBmImx3ICR0MSA0KCRzcClcbiIKICAgICAgICAgICAgZiJiZXEgJGEwICR0MSB0cnVle2JlcV9jb3VudGVyfVxuIgogICAgICAgICAgICBmImxpICRhMCAwXG4iCiAgICAgICAgICAgIGYiYiBlb190cnVle2JlcV9jb3VudGVyfVxuIgogICAgICAgICAgICBmInRydWV7YmVxX2NvdW50ZXJ9OlxuIgogICAgICAgICAgICBmImxpICRhMCAxXG4iCiAgICAgICAgICAgIGYiZW9fdHJ1ZXtiZXFfY291bnRlcn06XG4iCiAgICAgICAgICAgIGYiYWRkaXUgJHNwICRzcCA0IgogICAgICAgICkKICAgICAgICBiZXFfY291bnRlciArPSAxCiAgICBlbGlmIChlbnRyYWRhLmNoaWxkcmVuWzFdLmxlYWZbMF0gPT0gIiE9Iik6CiAgICAgICAgc3RyaW5nICs9ICgKICAgICAgICAgICAgICAgIGYie3BhcnRlMX1cbiIKICAgICAgICAgICAgICAgIGYic3cgJGEwIDAoJHNwKVxuIgogICAgICAgICAgICAgICAgZiJhZGRpdSAkc3AgJHNwIC00XG4iCiAgICAgICAgICAgICAgICBmIntwYXJ0ZTJ9XG4iCiAgICAgICAgICAgICAgICBmImx3ICR0MSA0KCRzcClcbiIKICAgICAgICAgICAgICAgIGYiYm5lICRhMCAkdDEgdHJ1ZXtiZXFfY291bnRlcn1cbiIKICAgICAgICAgICAgICAgIGYibGkgJGEwIDBcbiIKICAgICAgICAgICAgICAgIGYiYiBlb190cnVle2JlcV9jb3VudGVyfVxuIgogICAgICAgICAgICAgICAgZiJ0cnVle2JlcV9jb3VudGVyfTpcbiIKICAgICAgICAgICAgICAgIGYibGkgJGEwIDFcbiIKICAgICAgICAgICAgICAgIGYiZW9fdHJ1ZXtiZXFfY291bnRlcn06XG4iCiAgICAgICAgICAgICAgICBmImFkZGl1ICRzcCAkc3AgNCIKICAgICAgICAgICAgKQogICAgICAgIGJlcV9jb3VudGVyICs9IDEKICAgIGVsaWYgKGVudHJhZGEuY2hpbGRyZW5bMV0ubGVhZlswXSA9PSAiPD0iKToKICAgICAgICBzdHJpbmcgKz0gKAogICAgICAgICAgICBmIntwYXJ0ZTF9XG4iCiAgICAgICAgICAgIGYic3cgJGEwIDAoJHNwKVxuIgogICAgICAgICAgICBmImFkZGl1ICRzcCAkc3AgLTRcbiIKICAgICAgICAgICAgZiJ7cGFydGUyfVxuIgogICAgICAgICAgICBmImx3ICR0MSA0KCRzcClcbiIKICAgICAgICAgICAgZiJzbHQgJGEwICRhMCAkdDFcbiIKICAgICAgICAgICAgZiJiZXEgJGEwICR6ZXJvIHRydWV7YmVxX2NvdW50ZXJ9XG4iCiAgICAgICAgICAgIGYibGkgJGEwIDBcbiIKICAgICAgICAgICAgZiJiIGVvX3RydWV7YmVxX2NvdW50ZXJ9XG4iCiAgICAgICAgICAgIGYidHJ1ZXtiZXFfY291bnRlcn06XG4iCiAgICAgICAgICAgIGYibGkgJGEwIDFcbiIKICAgICAgICAgICAgZiJlb190cnVle2JlcV9jb3VudGVyfTpcbiIKICAgICAgICAgICAgZiJhZGRpdSAkc3AgJHNwIDQiCiAgICAgICAgKQogICAgICAgIGJlcV9jb3VudGVyICs9IDEKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZWxpZiAoZW50cmFkYS5jaGlsZHJlblsxXS5sZWFmWzBdID09ICI+PSIpOgogICAgICAgIHN0cmluZyArPSAoCiAgICAgICAgICAgIGYie3BhcnRlMX1cbiIKICAgICAgICAgICAgZiJzdyAkYTAgMCgkc3ApXG4iCjx8ZmltX2VuZHw+"]
["6b697b812bcc763cbe11b7f058f5bac118869533-1","6b697b812bcc763cbe11b7f058f5bac118869533","PHxmaW1fcHJlZml4fD4KI1NQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKIiIiCk1ldHJpY3MgdGhhdCBwcm92aWRlIGRhdGEgYWJvdXQgd2l0aCBpbnNpZ2h0IGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nCiIiIgppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHNxbGFsY2hlbXkgYXMgcwppbXBvcnQgcGFuZGFzIGFzIHBkCmZyb20gYXVndXIudXRpbCBpbXBvcnQgcmVnaXN0ZXJfbWV0cmljCmZyb20gZmxhc2sgaW1wb3J0IHJlcXVlc3QsIFJlc3BvbnNlLCBGbGFzawoKPHxmaW1faG9sZXw+CiAgICAgICAgU0VMRUNUIHJlcG9fZGVwZW5kZW5jaWVzLnJlcG9faWQsIGRhdGFfc291cmNlLCBkZXBfbmFtZSwgZGVwX2xhbmd1YWdlLCBtYXgoZGF0YV9jb2xsZWN0aW9uX2RhdGUpCiAgICAgICAgRlJPTSByZXBvX2RlcGVuZGVuY2llcywgKHNlbGVjdCByZXBvX2lkLCBtYXgoZGF0YV9jb2xsZWN0aW9uX2RhdGUpIGFzIHRoZWRhdGUgZnJvbSByZXBvX2RlcGVuZGVuY2llcyBncm91cCBieSByZXBvX2lkKSBhIAogICAgICAgIFdIRVJFIGEucmVwb19pZCA9IHJlcG9fZGVwZW5kZW5jaWVzLnJlcG9faWQgYW5kIGEudGhlZGF0ZT1yZXBvX2RlcGVuZGVuY2llcy5kYXRhX2NvbGxlY3Rpb25fZGF0ZQogICAgICAgIEdST1VQIEJZIHJlcG9fZGVwZW5kZW5jaWVzLnJlcG9faWQsIGRhdGFfc291cmNlLCBkZXBfbmFtZSwgZGVwX2xhbmd1YWdlCiAgICAgICAgT1JERVIgQlkgcmVwb19pZCwgZGVwX2xhbmd1YWdlLCBkZXBfbmFtZTsKICAgICIiIikKCiAgICByZXN1bHRzID0gcGQucmVhZF9zcWwoY29udHJpYnV0b3JzU1FMLCBzZWxmLmRhdGFiYXNlLCBwYXJhbXM9eydyZXBvX2dyb3VwX2lkJzogcmVwb19ncm91cF9pZCwgJ3BlcmlvZCc6IHBlcmlvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luX2RhdGUnOiBiZWdpbl9kYXRlLCAnZW5kX2RhdGUnOiBlbmRfZGF0ZX0pCgogICAgcmV0dXJuIHJlc3VsdHMKPHxmaW1fc3VmZml4fD4KQHJlZ2lzdGVyX21ldHJpYygpCmRlZiBkZXBzMShzZWxmLCByZXBvX2dyb3VwX2lkLCBwZXJpb2Q9J2RheScsIGJlZ2luX2RhdGU9Tm9uZSwgZW5kX2RhdGU9Tm9uZSk6CiAgICAKICAgIGNvbnRyaWJ1dG9yc1NRTCA9IHMuc3FsLnRleHQoIiIiCjx8ZmltX2VuZHw+"]
["6b697b812bcc763cbe11b7f058f5bac118869533-2","6b697b812bcc763cbe11b7f058f5bac118869533","PHxmaW1fcHJlZml4fD4KI1NQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKIiIiCk1ldHJpY3MgdGhhdCBwcm92aWRlIGRhdGEgYWJvdXQgd2l0aCBpbnNpZ2h0IGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nCiIiIgppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHNxbGFsY2hlbXkgYXMgcwppbXBvcnQgcGFuZGFzIGFzIHBkCmZyb20gYXVndXIudXRpbCBpbXBvcnQgcmVnaXN0ZXJfbWV0cmljCmZyb20gZmxhc2sgaW1wb3J0IHJlcXVlc3QsIFJlc3BvbnNlLCBGbGFzawoKQHJlZ2lzdGVyX21ldHJpYygpCmRlZiBkZXBzMShzZWxmLCByZXBvX2dyb3VwX2lkLCBwZXJpb2Q9J2RheScsIGJlZ2luX2RhdGU9Tm9uZSwgZW5kX2RhdGU9Tm9uZSk6CiAgICAKICAgIGNvbnRyaWJ1dG9yc1NRTCA9IHMuc3FsLnRleHQoIiIiCiAgICAgICAgU0VMRUNUIHJlcG9fZGVwZW5kZW5jaWVzLnJlcG9faWQsIGRhdGFfc291cmNlLCBkZXBfbmFtZSwgZGVwX2xhbmd1YWdlLCBtYXgoZGF0YV9jb2xsZWN0aW9uX2RhdGUpCiAgICAgICAgRlJPTSByZXBvX2RlcGVuZGVuY2llcywgKHNlbGVjdCByZXBvX2lkLCBtYXgoZGF0YV9jb2xsZWN0aW9uX2RhdGUpIGFzIHRoZWRhdGUgZnJvbSByZXBvX2RlcGVuZGVuY2llcyBncm91cCBieSByZXBvX2lkKSBhIAogICAgICAgIFdIRVJFIGEucmVwb19pZCA9IHJlcG9fZGVwZW5kZW5jaWVzLnJlcG9faWQgYW5kIGEudGhlZGF0ZT1yZXBvX2RlcGVuZGVuY2llcy5kYXRhX2NvbGxlY3Rpb25fZGF0ZQogICAgICAgIEdST1VQIEJZIHJlcG9fZGVwZW5kZW5jaWVzLnJlcG9faWQsIGRhdGFfc291cmNlLCBkZXBfbmFtZSwgZGVwX2xhbmd1YWdlCiAgICAgICAgT1JERVIgQlkgcmVwb19pZCwgZGVwX2xhbmd1YWdlLCBkZXBfbmFtZTsKICAgICIiIikKPHxmaW1faG9sZXw+CiAgICByZXR1cm4gcmVzdWx0cwo8fGZpbV9zdWZmaXh8PgoKICAgIHJlc3VsdHMgPSBwZC5yZWFkX3NxbChjb250cmlidXRvcnNTUUwsIHNlbGYuZGF0YWJhc2UsIHBhcmFtcz17J3JlcG9fZ3JvdXBfaWQnOiByZXBvX2dyb3VwX2lkLCAncGVyaW9kJzogcGVyaW9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW5fZGF0ZSc6IGJlZ2luX2RhdGUsICdlbmRfZGF0ZSc6IGVuZF9kYXRlfSkKCjx8ZmltX2VuZHw+"]
["6b697b812bcc763cbe11b7f058f5bac118869533-3","6b697b812bcc763cbe11b7f058f5bac118869533","PHxmaW1fcHJlZml4fD4KI1NQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKPHxmaW1faG9sZXw+CmltcG9ydCBzcWxhbGNoZW15IGFzIHMKaW1wb3J0IHBhbmRhcyBhcyBwZApmcm9tIGF1Z3VyLnV0aWwgaW1wb3J0IHJlZ2lzdGVyX21ldHJpYwpmcm9tIGZsYXNrIGltcG9ydCByZXF1ZXN0LCBSZXNwb25zZSwgRmxhc2sKCkByZWdpc3Rlcl9tZXRyaWMoKQpkZWYgZGVwczEoc2VsZiwgcmVwb19ncm91cF9pZCwgcGVyaW9kPSdkYXknLCBiZWdpbl9kYXRlPU5vbmUsIGVuZF9kYXRlPU5vbmUpOgogICAgCiAgICBjb250cmlidXRvcnNTUUwgPSBzLnNxbC50ZXh0KCIiIgogICAgICAgIFNFTEVDVCByZXBvX2RlcGVuZGVuY2llcy5yZXBvX2lkLCBkYXRhX3NvdXJjZSwgZGVwX25hbWUsIGRlcF9sYW5ndWFnZSwgbWF4KGRhdGFfY29sbGVjdGlvbl9kYXRlKQogICAgICAgIEZST00gcmVwb19kZXBlbmRlbmNpZXMsIChzZWxlY3QgcmVwb19pZCwgbWF4KGRhdGFfY29sbGVjdGlvbl9kYXRlKSBhcyB0aGVkYXRlIGZyb20gcmVwb19kZXBlbmRlbmNpZXMgZ3JvdXAgYnkgcmVwb19pZCkgYSAKICAgICAgICBXSEVSRSBhLnJlcG9faWQgPSByZXBvX2RlcGVuZGVuY2llcy5yZXBvX2lkIGFuZCBhLnRoZWRhdGU9cmVwb19kZXBlbmRlbmNpZXMuZGF0YV9jb2xsZWN0aW9uX2RhdGUKICAgICAgICBHUk9VUCBCWSByZXBvX2RlcGVuZGVuY2llcy5yZXBvX2lkLCBkYXRhX3NvdXJjZSwgZGVwX25hbWUsIGRlcF9sYW5ndWFnZQogICAgICAgIE9SREVSIEJZIHJlcG9faWQsIGRlcF9sYW5ndWFnZSwgZGVwX25hbWU7CiAgICAiIiIpCgogICAgcmVzdWx0cyA9IHBkLnJlYWRfc3FsKGNvbnRyaWJ1dG9yc1NRTCwgc2VsZi5kYXRhYmFzZSwgcGFyYW1zPXsncmVwb19ncm91cF9pZCc6IHJlcG9fZ3JvdXBfaWQsICdwZXJpb2QnOiBwZXJpb2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbl9kYXRlJzogYmVnaW5fZGF0ZSwgJ2VuZF9kYXRlJzogZW5kX2RhdGV9KQoKICAgIHJldHVybiByZXN1bHRzCjx8ZmltX3N1ZmZpeHw+CiIiIgpNZXRyaWNzIHRoYXQgcHJvdmlkZSBkYXRhIGFib3V0IHdpdGggaW5zaWdodCBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZwoiIiIKaW1wb3J0IGRhdGV0aW1lCjx8ZmltX2VuZHw+"]
["6b697b812bcc763cbe11b7f058f5bac118869533-4","6b697b812bcc763cbe11b7f058f5bac118869533","PHxmaW1fcHJlZml4fD4KI1NQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKIiIiCk1ldHJpY3MgdGhhdCBwcm92aWRlIGRhdGEgYWJvdXQgd2l0aCBpbnNpZ2h0IGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nCiIiIgppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHNxbGFsY2hlbXkgYXMgcwppbXBvcnQgcGFuZGFzIGFzIHBkCmZyb20gYXVndXIudXRpbCBpbXBvcnQgcmVnaXN0ZXJfbWV0cmljCmZyb20gZmxhc2sgaW1wb3J0IHJlcXVlc3QsIFJlc3BvbnNlLCBGbGFzawoKQHJlZ2lzdGVyX21ldHJpYygpCjx8ZmltX2hvbGV8PgogICAgICAgIEZST00gcmVwb19kZXBlbmRlbmNpZXMsIChzZWxlY3QgcmVwb19pZCwgbWF4KGRhdGFfY29sbGVjdGlvbl9kYXRlKSBhcyB0aGVkYXRlIGZyb20gcmVwb19kZXBlbmRlbmNpZXMgZ3JvdXAgYnkgcmVwb19pZCkgYSAKICAgICAgICBXSEVSRSBhLnJlcG9faWQgPSByZXBvX2RlcGVuZGVuY2llcy5yZXBvX2lkIGFuZCBhLnRoZWRhdGU9cmVwb19kZXBlbmRlbmNpZXMuZGF0YV9jb2xsZWN0aW9uX2RhdGUKICAgICAgICBHUk9VUCBCWSByZXBvX2RlcGVuZGVuY2llcy5yZXBvX2lkLCBkYXRhX3NvdXJjZSwgZGVwX25hbWUsIGRlcF9sYW5ndWFnZQogICAgICAgIE9SREVSIEJZIHJlcG9faWQsIGRlcF9sYW5ndWFnZSwgZGVwX25hbWU7CiAgICAiIiIpCgogICAgcmVzdWx0cyA9IHBkLnJlYWRfc3FsKGNvbnRyaWJ1dG9yc1NRTCwgc2VsZi5kYXRhYmFzZSwgcGFyYW1zPXsncmVwb19ncm91cF9pZCc6IHJlcG9fZ3JvdXBfaWQsICdwZXJpb2QnOiBwZXJpb2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbl9kYXRlJzogYmVnaW5fZGF0ZSwgJ2VuZF9kYXRlJzogZW5kX2RhdGV9KQoKICAgIHJldHVybiByZXN1bHRzCjx8ZmltX3N1ZmZpeHw+CmRlZiBkZXBzMShzZWxmLCByZXBvX2dyb3VwX2lkLCBwZXJpb2Q9J2RheScsIGJlZ2luX2RhdGU9Tm9uZSwgZW5kX2RhdGU9Tm9uZSk6CiAgICAKICAgIGNvbnRyaWJ1dG9yc1NRTCA9IHMuc3FsLnRleHQoIiIiCiAgICAgICAgU0VMRUNUIHJlcG9fZGVwZW5kZW5jaWVzLnJlcG9faWQsIGRhdGFfc291cmNlLCBkZXBfbmFtZSwgZGVwX2xhbmd1YWdlLCBtYXgoZGF0YV9jb2xsZWN0aW9uX2RhdGUpCjx8ZmltX2VuZHw+"]
["ececba6271fa890e5fbe0687496388c5f5d6b1c5-1","ececba6271fa890e5fbe0687496388c5f5d6b1c5","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSByZXN0X2ZyYW1ld29yay52aWV3c2V0cyBpbXBvcnQgTW9kZWxWaWV3U2V0CmZyb20gcGxheWVycy5tb2RlbHMgaW1wb3J0IFBsYXllcgpmcm9tIHBsYXllcnMuYXBpLnNlcmlhbGl6ZXJzIGltcG9ydCBQbGF5ZXJTZXJpYWxpemVyCgo8fGZpbV9lbmR8Pg=="]
["99b4482e38410218cfac095bbadc2bb7fc3276d8-1","99b4482e38410218cfac095bbadc2bb7fc3276d8","PHxmaW1fcHJlZml4fD4KZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKCgpkZWYgcGFyc2VfcnVsZXMobGluZXMpOgogICAgcnVsZXMgPSB7fQogICAgZm9yIGwgaW4gbGluZXM6CiAgICAgICAgcGFydHMgPSBsLnNwbGl0KCkKICAgICAgICBydWxlc1twYXJ0c1swXV0gPSBwYXJ0c1stMV0KICAgIHJldHVybiBydWxlcwoKCmRlZiBwYXJ0MShpbml0aWFsX3N0YXRlLCBydWxlcywgZ2VuZXJhdGlvbnM9MjApOgogICAgc3RhdGUgPSBkZWZhdWx0ZGljdChsYW1iZGE6ICIuIikKICAgIGZvciBpZHgsIHZhbCBpbiBlbnVtZXJhdGUoaW5pdGlhbF9zdGF0ZSk6CiAgICAgICAgc3RhdGVbaWR4XSA9IHZhbAoKICAgIHByZXZfc3VtID0gMAogICAgZGlmZnMgPSBbXQogICAgZm9yIF8gaW4gcmFuZ2UoZ2VuZXJhdGlvbnMpOgogICAgICAgIHByZXZfc3RhdGUgPSBzdGF0ZS5jb3B5KCkKICAgICAgICBzdGF0ZSA9IGRlZmF1bHRkaWN0KGxhbWJkYTogIi4iKQogICAgICAgIHN0YXJ0ID0gbWluKHByZXZfc3RhdGUua2V5cygpKSAtIDUKICAgICAgICBlbmQgPSBtYXgocHJldl9zdGF0ZS5rZXlzKCkpICsgNQo8fGZpbV9ob2xlfD4KICAgICAgICBkaWZmcy5hcHBlbmQoY3Vycl9zdW0gLSBwcmV2X3N1bSkKICAgICAgICBwcmV2X3N1bSA9IGN1cnJfc3VtCgogICAgYXZnX2RpZmYgPSBzdW0oZGlmZnNbLTEwMDpdKSAvLyAxMDAKICAgIHJldHVybiBzdW0oa2V5IGZvciBrZXksIHZhbCBpbiBzdGF0ZS5pdGVtcygpIGlmIHZhbCA9PSAiIyIpLCBhdmdfZGlmZgoKCmRlZiBwYXJ0Mihpbml0aWFsX3N0YXRlLCBydWxlcyk6CiAgICBpdGVycyA9IDEwMDAKICAgIGN1cnJfc3VtLCBkaWZmID0gcGFydDEoaW5pdGlhbF9zdGF0ZSwgcnVsZXMsIGl0ZXJzKQogICAgcmV0dXJuICg1MDAwMDAwMDAwMCAtIGl0ZXJzKSAqIGRpZmYgKyBjdXJyX3N1bQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICB3aXRoIG9wZW4oIjEyLnR4dCIpIGFzIGY6CiAgICAgICAgcmF3ID0gZi5yZWFkbGluZXMoKQoKICAgIGluaXRpYWxfc3RhdGUgPSByYXdbMF0uc3BsaXQoKVstMV0KICAgIHJ1bGVzID0gcGFyc2VfcnVsZXMocmF3WzI6XSkKCiAgICBwcmludCgiUGFydCAxOiB7fSIuZm9ybWF0KHBhcnQxKGluaXRpYWxfc3RhdGUsIHJ1bGVzKVswXSkpCiAgICBwcmludCgiUGFydCAyOiB7fSIuZm9ybWF0KHBhcnQyKGluaXRpYWxfc3RhdGUsIHJ1bGVzKSkpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZm9yIHN0YXJ0X2lkeCBpbiByYW5nZShzdGFydCwgZW5kICsgMSk6CiAgICAgICAgICAgIGNodW5rID0gIiIuam9pbihbcHJldl9zdGF0ZVtpXSBmb3IgaSBpbiByYW5nZShzdGFydF9pZHgsIHN0YXJ0X2lkeCArIDUpXSkKICAgICAgICAgICAgc3RhdGVbc3RhcnRfaWR4ICsgMl0gPSBydWxlcy5nZXQoY2h1bmssICIuIikKICAgICAgICBjdXJyX3N1bSA9IHN1bShrZXkgZm9yIGtleSwgdmFsIGluIHN0YXRlLml0ZW1zKCkgaWYgdmFsID09ICIjIikKPHxmaW1fZW5kfD4="]
["99b4482e38410218cfac095bbadc2bb7fc3276d8-2","99b4482e38410218cfac095bbadc2bb7fc3276d8","PHxmaW1fcHJlZml4fD4KZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKCgpkZWYgcGFyc2VfcnVsZXMobGluZXMpOgogICAgcnVsZXMgPSB7fQogICAgZm9yIGwgaW4gbGluZXM6CiAgICAgICAgcGFydHMgPSBsLnNwbGl0KCkKICAgICAgICBydWxlc1twYXJ0c1swXV0gPSBwYXJ0c1stMV0KICAgIHJldHVybiBydWxlcwoKCmRlZiBwYXJ0MShpbml0aWFsX3N0YXRlLCBydWxlcywgZ2VuZXJhdGlvbnM9MjApOgogICAgc3RhdGUgPSBkZWZhdWx0ZGljdChsYW1iZGE6ICIuIikKICAgIGZvciBpZHgsIHZhbCBpbiBlbnVtZXJhdGUoaW5pdGlhbF9zdGF0ZSk6CiAgICAgICAgc3RhdGVbaWR4XSA9IHZhbAoKICAgIHByZXZfc3VtID0gMAogICAgZGlmZnMgPSBbXQogICAgZm9yIF8gaW4gcmFuZ2UoZ2VuZXJhdGlvbnMpOgogICAgICAgIHByZXZfc3RhdGUgPSBzdGF0ZS5jb3B5KCkKICAgICAgICBzdGF0ZSA9IGRlZmF1bHRkaWN0KGxhbWJkYTogIi4iKQogICAgICAgIHN0YXJ0ID0gbWluKHByZXZfc3RhdGUua2V5cygpKSAtIDUKICAgICAgICBlbmQgPSBtYXgocHJldl9zdGF0ZS5rZXlzKCkpICsgNQogICAgICAgIGZvciBzdGFydF9pZHggaW4gcmFuZ2Uoc3RhcnQsIGVuZCArIDEpOgogICAgICAgICAgICBjaHVuayA9ICIiLmpvaW4oW3ByZXZfc3RhdGVbaV0gZm9yIGkgaW4gcmFuZ2Uoc3RhcnRfaWR4LCBzdGFydF9pZHggKyA1KV0pCiAgICAgICAgICAgIHN0YXRlW3N0YXJ0X2lkeCArIDJdID0gcnVsZXMuZ2V0KGNodW5rLCAiLiIpCiAgICAgICAgY3Vycl9zdW0gPSBzdW0oa2V5IGZvciBrZXksIHZhbCBpbiBzdGF0ZS5pdGVtcygpIGlmIHZhbCA9PSAiIyIpCiAgICAgICAgZGlmZnMuYXBwZW5kKGN1cnJfc3VtIC0gcHJldl9zdW0pCiAgICAgICAgcHJldl9zdW0gPSBjdXJyX3N1bQoKICAgIGF2Z19kaWZmID0gc3VtKGRpZmZzWy0xMDA6XSkgLy8gMTAwCiAgICByZXR1cm4gc3VtKGtleSBmb3Iga2V5LCB2YWwgaW4gc3RhdGUuaXRlbXMoKSBpZiB2YWwgPT0gIiMiKSwgYXZnX2RpZmYKCgpkZWYgcGFydDIoaW5pdGlhbF9zdGF0ZSwgcnVsZXMpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBpdGVycyA9IDEwMDAKICAgIGN1cnJfc3VtLCBkaWZmID0gcGFydDEoaW5pdGlhbF9zdGF0ZSwgcnVsZXMsIGl0ZXJzKQogICAgcmV0dXJuICg1MDAwMDAwMDAwMCAtIGl0ZXJzKSAqIGRpZmYgKyBjdXJyX3N1bQoKPHxmaW1fZW5kfD4="]
["4168fd029117d5277340036cb0cfa6006903918e-1","4168fd029117d5277340036cb0cfa6006903918e","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIiIiMjAxNy0xMS0yOCAxODowODoyMiIiIgo8fGZpbV9lbmR8Pg=="]
["1700d36de62b94a7ea5679edc9152eb7de113d08-1","1700d36de62b94a7ea5679edc9152eb7de113d08","PHxmaW1fcHJlZml4fD4KI2NvZGluZz11dGYtOAppbXBvcnQgdGVuc29yZmxvdyBhcyB0ZgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG1hdHBsb3RsaWIuaW1hZ2UgYXMgbXBpbWcKaW1wb3J0IHhtbC5ldHJlZS5FbGVtZW50VHJlZSBhcyBFVApmcm9tIHhtbC5kb20ubWluaWRvbSBpbXBvcnQgRG9jdW1lbnQKaW1wb3J0IHJhbmRvbQppbXBvcnQgb3MKaW1wb3J0IG1hdGgKZnJvbSBzZW1hbnRpYy52aXN1YWxpemF0aW9uX3V0aWxzIGltcG9ydCBkcmF3X2JvdW5kaW5nX2JveGVzX29uX2ltYWdlX3RlbnNvcnMKaW1wb3J0IG9iamVjdF9kZXRlY3Rpb24yLnZpc3VhbGl6YXRpb24gYXMgb2R2CmltcG9ydCB3bWxfdXRpbHMKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHNodXRpbAppbXBvcnQgd21sX3V0aWxzIGFzIHdtbHUKaW1wb3J0IGltZ191dGlscyBhcyB3bWxpCmltcG9ydCBjb3B5CgpkZWYgZ2V0X3NoYXBlX2Zyb21faW1nKHhtbF9wYXRoKToKICAgIGltZ19wYXRoID0gd21sdS5jaGFuZ2Vfc3VmZml4KHhtbF9wYXRoLCAianBnIikKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhpbWdfcGF0aCk6CiAgICAgICAgcHJpbnQoZiJFcnJvciBmaW5kIGltZyB7aW1nX3BhdGh9IGZhaWxkLiIpCiAgICAgICAgcmV0dXJuIFswLDAsM10KICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIGxpc3Qod21saS5pbXJlYWQoaW1nX3BhdGgpLnNoYXBlKQonJycK6K+75Y+WVk9DIHhtbOaWh+S7tgpmaWxlX3BhdGg6IHhtbOaWh+S7tui3r+W+hAphZGp1c3Q65bem77yM5LiK77yM5Y+z77yM5LiL5ZCR5Lit6Ze055qE5pS257yp5YOP57Sg5aSn5bCPCnJldHVybjoKc2hhcGU6IGltYWdlIHNpemUKYm94ZXM6IFtOLDRdIHJlbGF0aXZlIGNvb3JkaW5hdGUsKHltaW4seG1pbix5bWF4LHhtYXgpCicnJwpkZWYgcmVhZF92b2NfeG1sKGZpbGVfcGF0aCwgYWRqdXN0PU5vbmUsIGFzcGVjdF9yYW5nZT1Ob25lLCBoYXNfcHJvYnM9RmFsc2UsYWJzb2x1dGVfY29vcmQ9RmFsc2UpOgogICAgdHJlZSA9IEVULnBhcnNlKGZpbGVfcGF0aCkKICAgIHJvb3QgPSB0cmVlLmdldHJvb3QoKQoKICAgIHNpemUgPSByb290LmZpbmQoJ3NpemUnKQogICAgc2hhcGUgPSBbaW50KHNpemUuZmluZCgnaGVpZ2h0JykudGV4dCksCiAgICAgICAgICAgICBpbnQoc2l6ZS5maW5kKCd3aWR0aCcpLnRleHQpLAogICAgICAgICAgICAgaW50KHNpemUuZmluZCgnZGVwdGgnKS50ZXh0KV0KICAgIGlmIHNoYXBlWzBdIDwgNSBvciBzaGFwZVsxXSA8IDU6CiAgICAgICAgX3NoYXBlID0gZ2V0X3NoYXBlX2Zyb21faW1nKGZpbGVfcGF0aCkKICAgICAgICBwcmludChmIkZvcmNlIHVwZGF0ZSBpbWcgc2hhcGUsIG9sZD17c2hhcGV9LCBuZXc9e19zaGFwZX0uIikKICAgICAgICBzaGFwZSA9IF9zaGFwZQoKICAgIGlmIGFkanVzdCBpcyBub3QgTm9uZToKICAgICAgICBzaGFwZVswXSA9IHNoYXBlWzBdIC0gKGFkanVzdFsxXSArIGFkanVzdFszXSkKICAgICAgICBzaGFwZVsxXSA9IHNoYXBlWzFdIC0gKGFkanVzdFswXSArIGFkanVzdFsyXSkKCiAgICBiYm94ZXMgPSBbXQogICAgbGFiZWxzX3RleHQgPSBbXQogICAgZGlmZmljdWx0ID0gW10KICAgIHRydW5jYXRlZCA9IFtdCiAgICBwcm9icyA9IFtdCiAgICBmb3Igb2JqIGluIHJvb3QuZmluZGFsbCgnb2JqZWN0Jyk6CiAgICAgICAgbGFiZWwgPSBvYmouZmluZCgnbmFtZScpLnRleHQKICAgICAgICAjIOaWh+S7tuS4rWRpZmZpY3VsdOeUqDAsMeihqOekugogICAgICAgIGlmIG9iai5maW5kKCdkaWZmaWN1bHQnKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgZGlmID0gaW50KG9iai5maW5kKCdkaWZmaWN1bHQnKS50ZXh0KQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGRpZiA9IDAKICAgICAgICBpZiBoYXNfcHJvYnMgYW5kIG9iai5maW5kKCJwcm9iIikgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHByb2IgPSBmbG9hdChvYmouZmluZCgicHJvYiIpLnRleHQpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJvYiA9IDEuMAoKICAgICAgICBpZiBvYmouZmluZCgndHJ1bmNhdGVkJykgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHRydW4gPSBpbnQob2JqLmZpbmQoJ3RydW5jYXRlZCcpLnRleHQpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgdHJ1biA9IDAKICAgICAgICBiYm94ID0gb2JqLmZpbmQoJ2JuZGJveCcpCiAgICAgICAgYm94X29rID0gVHJ1ZQogICAgICAgIGlmIGFkanVzdCBpcyBOb25lOgogICAgICAgICAgICB5bWluLCB4bWluLCB5bWF4LCB4bWF4ID0gW2Zsb2F0KGJib3guZmluZCgneW1pbicpLnRleHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KGJib3guZmluZCgneG1pbicpLnRleHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KGJib3guZmluZCgneW1heCcpLnRleHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KGJib3guZmluZCgneG1heCcpLnRleHQpXQogICAgICAgICAgICBpZiBtYXRoLmZhYnMoeW1heCAtIHltaW4pIDwgMWUtOCBvciBtYXRoLmZhYnMoeG1heCAtIHhtaW4pIDwgMWUtODoKICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygiemVybyBzaXplIGJveCh7fSx7fSx7fSx7fSksIHt9Ii5mb3JtYXQoeW1pbiwgeG1pbiwgeW1heCwgeG1heCwgZmlsZV9wYXRoKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGVsaWYgYWJzb2x1dGVfY29vcmQ6CiAgICAgICAgICAgICAgICBib3ggPSAobWF4KDAuLCB5bWluKSwKICAgICAgICAgICAgICAgICAgICAgICBtYXgoMC4sIHhtaW4pLAogICAgICAgICAgICAgICAgICAgICAgIHltYXgsCiAgICAgICAgICAgICAgICAgICAgICAgeG1heAogICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGJveCA9IChtYXgoMC4sIHltaW4gLyBzaGFwZVswXSksCiAgICAgICAgICAgICAgICAgICAgICAgbWF4KDAuLCB4bWluIC8gc2hhcGVbMV0pLAogICAgICAgICAgICAgICAgICAgICAgIG1pbigxLiwgeW1heCAvIHNoYXBlWzBdKSwKICAgICAgICAgICAgICAgICAgICAgICBtaW4oMS4sIHhtYXggLyBzaGFwZVsxXSkKICAgICAgICAgICAgICAgICAgICAgICApCgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHltaW4gPSBmbG9hdChiYm94LmZpbmQoJ3ltaW4nKS50ZXh0KSAtIGZsb2F0KGFkanVzdFsxXSkKICAgICAgICAgICAgeG1pbiA9IGZsb2F0KGJib3guZmluZCgneG1pbicpLnRleHQpIC0gZmxvYXQoYWRqdXN0WzBdKQogICAgICAgICAgICB5bWF4ID0gZmxvYXQoYmJveC5maW5kKCd5bWF4JykudGV4dCkgLSBmbG9hdChhZGp1c3RbMV0pCiAgICAgICAgICAgIHhtYXggPSBmbG9hdChiYm94LmZpbmQoJ3htYXgnKS50ZXh0KSAtIGZsb2F0KGFkanVzdFswXSkKICAgICAgICAgICAgaWYgbWF0aC5mYWJzKHltYXggLSB5bWluKSA8IDFlLTggb3IgbWF0aC5mYWJzKHhtYXggLSB4bWluKSA8IDFlLTg6CiAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoInplcm8gc2l6ZSBib3goe30se30se30se30pLCB7fSIuZm9ybWF0KHltaW4sIHhtaW4sIHltYXgsIHhtYXgsIGZpbGVfcGF0aCkpCiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBlbGlmIGFic29sdXRlX2Nvb3JkOgogICAgICAgICAgICAgICAgYm94ID0gKG1heCgwLiwgeW1pbiksCiAgICAgICAgICAgICAgICAgICAgICAgbWF4KDAuLCB4bWluKSwKICAgICAgICAgICAgICAgICAgICAgICB5bWF4LAogICAgICAgICAgICAgICAgICAgICAgIHhtYXgKICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBib3ggPSAobWF4KDAuLCB5bWluIC8gc2hhcGVbMF0pLAogICAgICAgICAgICAgICAgICAgICAgIG1heCgwLiwgeG1pbiAvIHNoYXBlWzFdKSwKICAgICAgICAgICAgICAgICAgICAgICBtaW4oMS4sIHltYXggLyBzaGFwZVswXSksCiAgICAgICAgICAgICAgICAgICAgICAgbWluKDEuLCB4bWF4IC8gc2hhcGVbMV0pCiAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgIGlmIGFzcGVjdF9yYW5nZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgaWYgZmxvYXQoYm94WzJdIC0gYm94WzBdKSAvIChib3hbM10gLSBib3hbMV0pID4gYXNwZWN0X3JhbmdlWzFdIG9yIGZsb2F0KGJveFsyXSAtIGJveFswXSkgLyAoCiAgICAgICAgICAgICAgICAgICAgYm94WzNdIC0gYm94WzFdKSA8IGFzcGVjdF9yYW5nZVswXToKICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygibGFyZ2UgYXNwZWN0LiIpCiAgICAgICAgICAgICAgICBib3hfb2sgPSBGYWxzZQoKICAgICAgICBpZiBub3QgYm94X29rOgogICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoIklnbm9yZSBvbmUgYm94IikKICAgICAgICAgICAgY29udGludWUKICAgICAgICBiYm94ZXMuYXBwZW5kKGJveCkKICAgICAgICBsYWJlbHNfdGV4dC5hcHBlbmQobGFiZWwpCiAgICAgICAgZGlmZmljdWx0LmFwcGVuZChkaWYpCiAgICAgICAgdHJ1bmNhdGVkLmFwcGVuZCh0cnVuKQogICAgICAgIHByb2JzLmFwcGVuZChwcm9iKQoKICAgIGFzc2VydCBsZW4oYmJveGVzKSA9PSBsZW4obGFiZWxzX3RleHQpLCAiZXJyb3Igc2l6ZSIKICAgIGFzc2VydCBsZW4oYmJveGVzKSA9PSBsZW4oZGlmZmljdWx0KSwgImVycm9yIHNpemUiCiAgICBhc3NlcnQgbGVuKGJib3hlcykgPT0gbGVuKHRydW5jYXRlZCksICJlcnJvciBzaXplIgogICAgI3NoYXBlLCBiYm94ZXMsIGxhYmVsc19uYW1lcywgZGlmZmljdWx0LCB0cnVuY2F0ZWQscHJvYnMKICAgIHJldHVybiBzaGFwZSwgbnAuYXJyYXkoYmJveGVzKSwgbGFiZWxzX3RleHQsIGRpZmZpY3VsdCwgdHJ1bmNhdGVkLCBwcm9icwogICAgCmRlZiBjcmVhdGVfdGV4dF9lbGVtZW50KGRvYyxuYW1lLHZhbHVlKToKICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLHN0cik6CiAgICAgICAgdmFsdWUgPSBzdHIodmFsdWUpCiAgICByZXMgPSBkb2MuY3JlYXRlRWxlbWVudChuYW1lKQogICAgdmFsdWUgPSBkb2MuY3JlYXRlVGV4dE5vZGUodmFsdWUpCiAgICByZXMuYXBwZW5kQ2hpbGQodmFsdWUpCiAgICByZXR1cm4gcmVzCgonJycKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpzYXZlX3BhdGg6eG1s5paH5Lu25L+d5a2Y6Lev5b6ECmZpbGVfcGF0aDrlm77lg4/mlofku7bot6/lvoQKc2hhcGU6W2gsdyxkXQpib3hlczrnm7jlr7nlpKflsI8KPHxmaW1fZW5kfD4="]
["1700d36de62b94a7ea5679edc9152eb7de113d08-2","1700d36de62b94a7ea5679edc9152eb7de113d08",{"$cut":{"chars":28900,"head":"PHxmaW1fcHJlZml4fD4KI2NvZGluZz11dGYtOAppbXBvcnQgdGVuc29yZmxvdyBhcyB0ZgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG1hdHBsb3RsaWIuaW1hZ2UgYXMgbXBpbWcKaW1wb3J0IHhtbC5ldHJlZS5FbGVtZW50VHJlZSBhcyBFVApmcm9tIHhtbC5kb20ubWluaWRvbSBpbXBvcnQgRG9jdW1lbnQKaW1wb3J0IHJhbmRvbQppbXBvcnQgb3MKaW1wb3J0IG1hdGgKZnJvbSBzZW1hbnRpYy52aXN1YWxpemF0aW9uX3V0aWxzIGltcG9ydCBkcmF3X2JvdW5kaW5nX2JveGVzX29uX2ltYWdlX3RlbnNvcnMKaW1wb3J0IG9iamVjdF9kZXRlY3Rpb24yLnZpc3VhbGl6YXRpb24gYXMgb2R2CmltcG9ydCB3bWxfdXRpbHMKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHNodXRpbAppbXBvcnQgd21sX3V0aWxzIGFzIHdtbHUKaW1wb3J0IGltZ191dGlscyBhcyB3bWxpCmltcG9ydCBjb3B5CgpkZWYgZ2V0X3NoYXBlX2Zyb21faW1nKHhtbF9wYXRoKToKICAgIGltZ19wYXRoID0gd21sdS5jaGFuZ2Vfc3VmZml4KHhtbF9wYXRoLCAianBnIikKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhpbWdfcGF0aCk6CiAgICAgICAgcHJpbnQoZiJFcnJvciBmaW5kIGltZyB7aW1nX3BhdGh9IGZhaWxkLiIpCiAgICAgICAgcmV0dXJuIFswLDAsM10KICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIGxpc3Qod21saS5pbXJlYWQoaW1nX3BhdGgpLnNoYXBlKQonJycK6K+75Y+WVk9DIHhtbOaWh+S7tgpmaWxlX3BhdGg6IHhtbOaWh+S7tui3r+W+hAphZGp1c3Q65bem77yM5LiK77yM5Y+z77yM5LiL5ZCR5Lit6Ze055qE5pS257yp5YOP57Sg5aSn5bCPCnJldHVybjoKc2hhcGU6IGltYWdlIHNpemUKYm94ZXM6IFtOLDRdIHJlbGF0aXZlIGNvb3JkaW5hdGUsKHltaW4seG1pbix5bWF4LHhtYXgpCicnJwpkZWYgcmVhZF92b2NfeG1sKGZpbGVfcGF0aCwgYWRqdXN0PU5vbmUsIGFzcGVjdF9yYW5nZT1Ob25lLCBoYXNfcHJvYnM9RmFsc2UsYWJzb2x1dGVfY29vcmQ9RmFsc2UpOgogICAgdHJlZSA9IEVULnBhcnNlKGZpbGVfcGF0aCkKICAgIHJvb3QgPSB0cmVlLmdldHJvb3QoKQoKICAgIHNpemUgPSByb290LmZpbmQoJ3NpemUnKQogICAgc2hhcGUgPSBbaW50KHNpemUuZmluZCgnaGVpZ2h0JykudGV4dCksCiAgICAgICAgICAgICBpbnQoc2l6ZS5maW5kKCd3aWR0aCcpLnRleHQpLAogICAgICAgICAgICAgaW50KHNpemUuZmluZCgnZGVwdGgnKS50ZXh0KV0KICAgIGlmIHNoYXBlWzBdIDwgNSBvciBzaGFwZVsxXSA8IDU6CiAgICAgICAgX3NoYXBlID0gZ2V0X3NoYXBlX2Zyb21faW1nKGZpbGVfcGF0aCkKICAgICAgICBwcmludChmIkZvcmNlIHVwZGF0ZSBpbWcgc2hhcGUsIG9sZD17c2hhcGV9LCBuZXc9e19zaGFwZX0uIikKICAgICAgICBzaGFwZSA9IF9zaGFwZQoKICAgIGlmIGFkanVzdCBpcyBub3QgTm9uZToKICAgICAgICBzaGFwZVswXSA9IHNoYXBlWzBdIC0gKGFkanVzdFsxXSArIGFkanVzdFszXSkKICAgICAgICBzaGFwZVsxXSA9IHNoYXBlWzFdIC0gKGFkanVzdFswXSArIGFkanVzdFsyXSkKCiAgICBiYm94ZXMgPSBbXQogICAgbGFiZWxzX3RleHQgPSBbXQogICAgZGlmZmljdWx0ID0gW10KICAgIHRydW5jYXRlZCA9IFtdCiAgICBwcm9icyA9IFtdCiAgICBmb3Igb2JqIGluIHJvb3QuZmluZGFsbCgnb2JqZWN0Jyk6CiAgICAgICAgbGFiZWwgPSBvYmouZmluZCgnbmFtZScpLnRleHQKICAgICAgICAjIOaWh+S7tuS4rWRpZmZpY3VsdOeUqDAsMeihqOekugogICAgICAgIGlmIG9iai5maW5kKCdkaWZmaWN1bHQnKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgZGlmID0gaW50KG9iai5maW5kKCdkaWZmaWN1bHQnKS50ZXh0KQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGRpZiA9IDAKICAgICAgICBpZiBoYXNfcHJvYnMgYW5kIG9iai5maW5kKCJwcm9iIikgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHByb2IgPSBmbG9hdChvYmouZmluZCgicHJvYiIpLnRleHQpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJvYiA9IDEuMAoKICAgICAgICBpZiBvYmouZmluZCgndHJ1bmNhdGVkJykgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHRydW4gPSBpbnQob2JqLmZpbmQoJ3RydW5jYXRlZCcpLnRleHQpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgdHJ1biA9IDAKICAgICAgICBiYm94ID0gb2JqLmZpbmQoJ2JuZGJveCcpCiAgICAgICAgYm94X29rID0gVHJ1ZQogICAgICAgIGlmIGFkanVzdCBpcyBOb25lOgogICAgICAgICAgICB5bWluLCB4bWluLCB5bWF4LCB4bWF4ID0gW2Zsb2F0KGJib3guZmluZCgneW1pbicpLnRleHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KGJib3guZmluZCgneG1pbicpLnRleHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KGJib3guZmluZCgneW1heCcpLnRleHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KGJib3guZmluZCgneG1heCcpLnRleHQpXQogICAgICAgICAgICBpZiBtYXRoLmZhYnMoeW1heCAtIHltaW4pIDwgMWUtOCBvciBtYXRoLmZhYnMoeG1heCAtIHhtaW4pIDwgMWUtODoKICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygiemVybyBzaXplIGJveCh7fSx7fSx7fSx7fSksIHt9Ii5mb3JtYXQoeW1pbiwgeG1pbiwgeW1heCwgeG1heCwgZmlsZV9wYXRoKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGVsaWYgYWJzb2x1dGVfY29vcmQ6CiAgICAgICAgICAgICAgICBib3ggPSAobWF4KDAuLCB5bWluKSwKICAgICAgICAgICAgICAgICAgICAgICBtYXgoMC4sIHhtaW4pLAogICAgICAgICAgICAgICAgICAgICAgIHltYXgsCiAgICAgICAgICAgICAgICAgICAgICAgeG1heAogICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGJveCA9IChtYXgoMC4sIHltaW4gLyBzaGFwZVswXSksCiAgICAgICAgICAgICAgICAgICAgICAgbWF4KDAuLCB4bWluIC8gc2hhcGVbMV0pLAogICAgICAgICAgICAgICAgICAgICAgIG1pbigxLiwgeW1heCAv"}}]
["1700d36de62b94a7ea5679edc9152eb7de113d08-3","1700d36de62b94a7ea5679edc9152eb7de113d08",{"$cut":{"chars":28900,"head":"PHxmaW1fcHJlZml4fD4KI2NvZGluZz11dGYtOAppbXBvcnQgdGVuc29yZmxvdyBhcyB0ZgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG1hdHBsb3RsaWIuaW1hZ2UgYXMgbXBpbWcKaW1wb3J0IHhtbC5ldHJlZS5FbGVtZW50VHJlZSBhcyBFVApmcm9tIHhtbC5kb20ubWluaWRvbSBpbXBvcnQgRG9jdW1lbnQKaW1wb3J0IHJhbmRvbQppbXBvcnQgb3MKaW1wb3J0IG1hdGgKZnJvbSBzZW1hbnRpYy52aXN1YWxpemF0aW9uX3V0aWxzIGltcG9ydCBkcmF3X2JvdW5kaW5nX2JveGVzX29uX2ltYWdlX3RlbnNvcnMKaW1wb3J0IG9iamVjdF9kZXRlY3Rpb24yLnZpc3VhbGl6YXRpb24gYXMgb2R2CmltcG9ydCB3bWxfdXRpbHMKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHNodXRpbAppbXBvcnQgd21sX3V0aWxzIGFzIHdtbHUKaW1wb3J0IGltZ191dGlscyBhcyB3bWxpCmltcG9ydCBjb3B5CgpkZWYgZ2V0X3NoYXBlX2Zyb21faW1nKHhtbF9wYXRoKToKICAgIGltZ19wYXRoID0gd21sdS5jaGFuZ2Vfc3VmZml4KHhtbF9wYXRoLCAianBnIikKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhpbWdfcGF0aCk6CiAgICAgICAgcHJpbnQoZiJFcnJvciBmaW5kIGltZyB7aW1nX3BhdGh9IGZhaWxkLiIpCiAgICAgICAgcmV0dXJuIFswLDAsM10KICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIGxpc3Qod21saS5pbXJlYWQoaW1nX3BhdGgpLnNoYXBlKQonJycK6K+75Y+WVk9DIHhtbOaWh+S7tgpmaWxlX3BhdGg6IHhtbOaWh+S7tui3r+W+hAphZGp1c3Q65bem77yM5LiK77yM5Y+z77yM5LiL5ZCR5Lit6Ze055qE5pS257yp5YOP57Sg5aSn5bCPCnJldHVybjoKc2hhcGU6IGltYWdlIHNpemUKYm94ZXM6IFtOLDRdIHJlbGF0aXZlIGNvb3JkaW5hdGUsKHltaW4seG1pbix5bWF4LHhtYXgpCicnJwpkZWYgcmVhZF92b2NfeG1sKGZpbGVfcGF0aCwgYWRqdXN0PU5vbmUsIGFzcGVjdF9yYW5nZT1Ob25lLCBoYXNfcHJvYnM9RmFsc2UsYWJzb2x1dGVfY29vcmQ9RmFsc2UpOgogICAgdHJlZSA9IEVULnBhcnNlKGZpbGVfcGF0aCkKICAgIHJvb3QgPSB0cmVlLmdldHJvb3QoKQoKICAgIHNpemUgPSByb290LmZpbmQoJ3NpemUnKQogICAgc2hhcGUgPSBbaW50KHNpemUuZmluZCgnaGVpZ2h0JykudGV4dCksCiAgICAgICAgICAgICBpbnQoc2l6ZS5maW5kKCd3aWR0aCcpLnRleHQpLAogICAgICAgICAgICAgaW50KHNpemUuZmluZCgnZGVwdGgnKS50ZXh0KV0KICAgIGlmIHNoYXBlWzBdIDwgNSBvciBzaGFwZVsxXSA8IDU6CiAgICAgICAgX3NoYXBlID0gZ2V0X3NoYXBlX2Zyb21faW1nKGZpbGVfcGF0aCkKICAgICAgICBwcmludChmIkZvcmNlIHVwZGF0ZSBpbWcgc2hhcGUsIG9sZD17c2hhcGV9LCBuZXc9e19zaGFwZX0uIikKICAgICAgICBzaGFwZSA9IF9zaGFwZQoKICAgIGlmIGFkanVzdCBpcyBub3QgTm9uZToKICAgICAgICBzaGFwZVswXSA9IHNoYXBlWzBdIC0gKGFkanVzdFsxXSArIGFkanVzdFszXSkKICAgICAgICBzaGFwZVsxXSA9IHNoYXBlWzFdIC0gKGFkanVzdFswXSArIGFkanVzdFsyXSkKCiAgICBiYm94ZXMgPSBbXQogICAgbGFiZWxzX3RleHQgPSBbXQogICAgZGlmZmljdWx0ID0gW10KICAgIHRydW5jYXRlZCA9IFtdCiAgICBwcm9icyA9IFtdCiAgICBmb3Igb2JqIGluIHJvb3QuZmluZGFsbCgnb2JqZWN0Jyk6CiAgICAgICAgbGFiZWwgPSBvYmouZmluZCgnbmFtZScpLnRleHQKICAgICAgICAjIOaWh+S7tuS4rWRpZmZpY3VsdOeUqDAsMeihqOekugogICAgICAgIGlmIG9iai5maW5kKCdkaWZmaWN1bHQnKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgZGlmID0gaW50KG9iai5maW5kKCdkaWZmaWN1bHQnKS50ZXh0KQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGRpZiA9IDAKICAgICAgICBpZiBoYXNfcHJvYnMgYW5kIG9iai5maW5kKCJwcm9iIikgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHByb2IgPSBmbG9hdChvYmouZmluZCgicHJvYiIpLnRleHQpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJvYiA9IDEuMAoKICAgICAgICBpZiBvYmouZmluZCgndHJ1bmNhdGVkJykgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHRydW4gPSBpbnQob2JqLmZpbmQoJ3RydW5jYXRlZCcpLnRleHQpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgdHJ1biA9IDAKICAgICAgICBiYm94ID0gb2JqLmZpbmQoJ2JuZGJveCcpCiAgICAgICAgYm94X29rID0gVHJ1ZQogICAgICAgIGlmIGFkanVzdCBpcyBOb25lOgogICAgICAgICAgICB5bWluLCB4bWluLCB5bWF4LCB4bWF4ID0gW2Zsb2F0KGJib3guZmluZCgneW1pbicpLnRleHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KGJib3guZmluZCgneG1pbicpLnRleHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KGJib3guZmluZCgneW1heCcpLnRleHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KGJib3guZmluZCgneG1heCcpLnRleHQpXQogICAgICAgICAgICBpZiBtYXRoLmZhYnMoeW1heCAtIHltaW4pIDwgMWUtOCBvciBtYXRoLmZhYnMoeG1heCAtIHhtaW4pIDwgMWUtODoKICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygiemVybyBzaXplIGJveCh7fSx7fSx7fSx7fSksIHt9Ii5mb3JtYXQoeW1pbiwgeG1pbiwgeW1heCwgeG1heCwgZmlsZV9wYXRoKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGVsaWYgYWJzb2x1dGVfY29vcmQ6CiAgICAgICAgICAgICAgICBib3ggPSAobWF4KDAuLCB5bWluKSwKICAgICAgICAgICAgICAgICAgICAgICBtYXgoMC4sIHhtaW4pLAogICAgICAgICAgICAgICAgICAgICAgIHltYXgsCiAgICAgICAgICAgICAgICAgICAgICAgeG1heAogICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGJveCA9IChtYXgoMC4sIHltaW4gLyBzaGFwZVswXSksCiAgICAgICAgICAgICAgICAgICAgICAgbWF4KDAuLCB4bWluIC8gc2hhcGVbMV0pLAo8fGZpbV9ob2xlfD4KICAgICAgICBlbHNlOgogICAgICAgICAg"}}]
["1700d36de62b94a7ea5679edc9152eb7de113d08-4","1700d36de62b94a7ea5679edc9152eb7de113d08",{"$cut":{"chars":18108,"head":"PHxmaW1fcHJlZml4fD4KI2NvZGluZz11dGYtOAppbXBvcnQgdGVuc29yZmxvdyBhcyB0ZgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG1hdHBsb3RsaWIuaW1hZ2UgYXMgbXBpbWcKaW1wb3J0IHhtbC5ldHJlZS5FbGVtZW50VHJlZSBhcyBFVApmcm9tIHhtbC5kb20ubWluaWRvbSBpbXBvcnQgRG9jdW1lbnQKaW1wb3J0IHJhbmRvbQppbXBvcnQgb3MKaW1wb3J0IG1hdGgKZnJvbSBzZW1hbnRpYy52aXN1YWxpemF0aW9uX3V0aWxzIGltcG9ydCBkcmF3X2JvdW5kaW5nX2JveGVzX29uX2ltYWdlX3RlbnNvcnMKaW1wb3J0IG9iamVjdF9kZXRlY3Rpb24yLnZpc3VhbGl6YXRpb24gYXMgb2R2CmltcG9ydCB3bWxfdXRpbHMKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHNodXRpbAppbXBvcnQgd21sX3V0aWxzIGFzIHdtbHUKaW1wb3J0IGltZ191dGlscyBhcyB3bWxpCmltcG9ydCBjb3B5CgpkZWYgZ2V0X3NoYXBlX2Zyb21faW1nKHhtbF9wYXRoKToKICAgIGltZ19wYXRoID0gd21sdS5jaGFuZ2Vfc3VmZml4KHhtbF9wYXRoLCAianBnIikKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhpbWdfcGF0aCk6CiAgICAgICAgcHJpbnQoZiJFcnJvciBmaW5kIGltZyB7aW1nX3BhdGh9IGZhaWxkLiIpCiAgICAgICAgcmV0dXJuIFswLDAsM10KICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIGxpc3Qod21saS5pbXJlYWQoaW1nX3BhdGgpLnNoYXBlKQonJycK6K+75Y+WVk9DIHhtbOaWh+S7tgpmaWxlX3BhdGg6IHhtbOaWh+S7tui3r+W+hAphZGp1c3Q65bem77yM5LiK77yM5Y+z77yM5LiL5ZCR5Lit6Ze055qE5pS257yp5YOP57Sg5aSn5bCPCnJldHVybjoKc2hhcGU6IGltYWdlIHNpemUKYm94ZXM6IFtOLDRdIHJlbGF0aXZlIGNvb3JkaW5hdGUsKHltaW4seG1pbix5bWF4LHhtYXgpCicnJwpkZWYgcmVhZF92b2NfeG1sKGZpbGVfcGF0aCwgYWRqdXN0PU5vbmUsIGFzcGVjdF9yYW5nZT1Ob25lLCBoYXNfcHJvYnM9RmFsc2UsYWJzb2x1dGVfY29vcmQ9RmFsc2UpOgogICAgdHJlZSA9IEVULnBhcnNlKGZpbGVfcGF0aCkKICAgIHJvb3QgPSB0cmVlLmdldHJvb3QoKQoKICAgIHNpemUgPSByb290LmZpbmQoJ3NpemUnKQogICAgc2hhcGUgPSBbaW50KHNpemUuZmluZCgnaGVpZ2h0JykudGV4dCksCiAgICAgICAgICAgICBpbnQoc2l6ZS5maW5kKCd3aWR0aCcpLnRleHQpLAogICAgICAgICAgICAgaW50KHNpemUuZmluZCgnZGVwdGgnKS50ZXh0KV0KICAgIGlmIHNoYXBlWzBdIDwgNSBvciBzaGFwZVsxXSA8IDU6CiAgICAgICAgX3NoYXBlID0gZ2V0X3NoYXBlX2Zyb21faW1nKGZpbGVfcGF0aCkKICAgICAgICBwcmludChmIkZvcmNlIHVwZGF0ZSBpbWcgc2hhcGUsIG9sZD17c2hhcGV9LCBuZXc9e19zaGFwZX0uIikKICAgICAgICBzaGFwZSA9IF9zaGFwZQoKICAgIGlmIGFkanVzdCBpcyBub3QgTm9uZToKICAgICAgICBzaGFwZVswXSA9IHNoYXBlWzBdIC0gKGFkanVzdFsxXSArIGFkanVzdFszXSkKICAgICAgICBzaGFwZVsxXSA9IHNoYXBlWzFdIC0gKGFkanVzdFswXSArIGFkanVzdFsyXSkKCiAgICBiYm94ZXMgPSBbXQogICAgbGFiZWxzX3RleHQgPSBbXQogICAgZGlmZmljdWx0ID0gW10KICAgIHRydW5jYXRlZCA9IFtdCiAgICBwcm9icyA9IFtdCiAgICBmb3Igb2JqIGluIHJvb3QuZmluZGFsbCgnb2JqZWN0Jyk6CiAgICAgICAgbGFiZWwgPSBvYmouZmluZCgnbmFtZScpLnRleHQKICAgICAgICAjIOaWh+S7tuS4rWRpZmZpY3VsdOeUqDAsMeihqOekugogICAgICAgIGlmIG9iai5maW5kKCdkaWZmaWN1bHQnKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgZGlmID0gaW50KG9iai5maW5kKCdkaWZmaWN1bHQnKS50ZXh0KQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGRpZiA9IDAKICAgICAgICBpZiBoYXNfcHJvYnMgYW5kIG9iai5maW5kKCJwcm9iIikgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHByb2IgPSBmbG9hdChvYmouZmluZCgicHJvYiIpLnRleHQpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJvYiA9IDEuMAoKICAgICAgICBpZiBvYmouZmluZCgndHJ1bmNhdGVkJykgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHRydW4gPSBpbnQob2JqLmZpbmQoJ3RydW5jYXRlZCcpLnRleHQpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgdHJ1biA9IDAKICAgICAgICBiYm94ID0gb2JqLmZpbmQoJ2JuZGJveCcpCiAgICAgICAgYm94X29rID0gVHJ1ZQogICAgICAgIGlmIGFkanVzdCBpcyBOb25lOgogICAgICAgICAgICB5bWluLCB4bWluLCB5bWF4LCB4bWF4ID0gW2Zsb2F0KGJib3guZmluZCgneW1pbicpLnRleHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KGJib3guZmluZCgneG1pbicpLnRleHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KGJib3guZmluZCgneW1heCcpLnRleHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KGJib3guZmluZCgneG1heCcpLnRleHQpXQogICAgICAgICAgICBpZiBtYXRoLmZhYnMoeW1heCAtIHltaW4pIDwgMWUtOCBvciBtYXRoLmZhYnMoeG1heCAtIHhtaW4pIDwgMWUtODoKICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygiemVybyBzaXplIGJveCh7fSx7fSx7fSx7fSksIHt9Ii5mb3JtYXQoeW1pbiwgeG1pbiwgeW1heCwgeG1heCwgZmlsZV9wYXRoKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGVsaWYgYWJzb2x1dGVfY29vcmQ6CiAgICAgICAgICAgICAgICBib3ggPSAobWF4KDAuLCB5bWluKSwKICAgICAgICAgICAgICAgICAgICAgICBtYXgoMC4sIHhtaW4pLAogICAgICAgICAgICAgICAgICAgICAgIHltYXgsCiAgICAgICAgICAgICAgICAgICAgICAgeG1heAogICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGJveCA9IChtYXgoMC4sIHltaW4gLyBzaGFwZVswXSksCiAgICAgICAgICAgICAgICAgICAgICAgbWF4KDAuLCB4bWluIC8gc2hhcGVbMV0pLAogICAgICAgICAgICAgICAgICAgICAgIG1pbigxLiwgeW1heCAv"}}]
["1b3506dd27384f32540fa79b6683b8a9494d454d-1","1b3506dd27384f32540fa79b6683b8a9494d454d","PHxmaW1fcHJlZml4fD4KZnJvbSBkb2Nhc3NlbWJsZS5iYXNlLmNvcmUgaW1wb3J0IERBT2JqZWN0LCBEQUxpc3QsIERBRGljdCwgREFTZXQKZnJvbSBkb2Nhc3NlbWJsZS5iYXNlLnV0aWwgaW1wb3J0ICoKZnJvbSBEQVRyZWUgaW1wb3J0ICoKZnJvbSBsY2JyX2V4cGxhaW4gaW1wb3J0ICoKaW1wb3J0IHlhbWwKaW1wb3J0IGNvcHkKCmRlZiBleHBvcnRfaXNzdWVzX2Zyb21fdHJlZSh0YXJnZXQsIHNvdXJjZSk6CiAgIyBUaGUgdGFyZ2V0IGlzIGEgZGljdGlvbmFyeS4KICAjIFRoZSBzb3VyY2UgaXMgYSBEQVRyZWUgc3RydWN0dXJlLgogIAogIHRhcmdldFtzdHIoc291cmNlLmlkKV0gPSB7fQogIHRhcmdldFtzdHIoc291cmNlLmlkKV1bJ2lkJ10gPSBzdHIoc291cmNlLmlkKQogIHRhcmdldFtzdHIoc291cmNlLmlkKV1bJ3Byb3Bvc2l0aW9uJ10gPSBzdHIoc291cmNlLnRleHQpCiAgdGFyZ2V0W3N0cihzb3VyY2UuaWQpXVsndHlwZSddID0gc3RyKHNvdXJjZS50eXBlKQogIHRhcmdldFtzdHIoc291cmNlLmlkKV1bJ3dpbm5lcl9pZl91bnJhaXNlZCddID0gc3RyKHNvdXJjZS5kZWZhdWx0KQogICMgSWYgdGhlIGN1cnJlbnQgaXNzdWUgaGFzIGFudGVjZWRlbnRzLCBncmFiICdlbS4KICBpZiBsZW4oc291cmNlLmJyYW5jaGVzLmVsZW1lbnRzKSA8PiAwOgogICAgIyBUaGlzIHVzZXMgYSBkaWZmZXJlbnQgZm9ybWF0IHRoYW4gdGhlIGRhdGFiYXNlIHByb3ZpZGVkIGJ5IG9wZW5sY2JyCiAgICB0YXJnZXRbc3RyKHNvdXJjZS5pZCldWydhbnRlY2VkZW50cyddID0gW10KICAgIGZvciBiIGluIHNvdXJjZS5icmFuY2hlczoKICAgICAgdGFyZ2V0W3N0cihzb3VyY2UuaWQpXVsnYW50ZWNlZGVudHMnXS5hcHBlbmQoc3RyKGIuaWQpKQogICAgaWYgc291cmNlLmpvaW5fdHlwZSA9PSAiZGlzanVuY3RpdmUiOgogICAgICB0YXJnZXRbc3RyKHNvdXJjZS5pZCldWydkaXNqb2ludF9hbnRlY2VkZW50cyddID0gVHJ1ZQogIGVsc2U6CiAgICAjIFRoaXMgdXNlcyBhIGRpZmZlcmVudCBmb3JtYXQgdGhhbiB0aGUgZGF0YWJhc2UgcHJvdmlkZWQgYnkgb3BlbmxjYnIKICAgIHRhcmdldFtzdHIoc291cmNlLmlkKV1bJ2ZhY3RvcnMnXSA9IFtdCiAgICBmb3IgZiBpbiBzb3VyY2UuZmFjdG9yczoKICAgICAgdGFyZ2V0W3N0cihzb3VyY2UuaWQpXVsnZmFjdG9ycyddLmFwcGVuZChzdHIoZi5pZCkpCiAgICAKICBmb3IgYiBpbiBzb3VyY2UuYnJhbmNoZXM6CiAgICBleHBvcnRfaXNzdWVzX2Zyb21fdHJlZSh0YXJnZXQsIGIpCiAgCiAgcmV0dXJuIE5vbmUKCmRlZiB3b3JkX3RvX3NpZGUod29yZCk6CiAgaWYgd29yZCA9PSAiRGVmZW5kYW50IjoKICAgIHJldHVybiAnZCcKICBlbGlmIHdvcmQgPT0gIlBsYWludGlmZiI6CiAgICByZXR1cm4gJ3AnCiAgZWxzZToKICAgIHJldHVybiAnPycKCmRlZiBzaWRlX3RvX3dvcmQoc2lkZSk6CiAgaWYgc2lkZSA9PSAncCc6CiAgICByZXR1cm4gJ1BsYWludGlmZicKICBlbGlmIHNpZGUgPT0gImQiOgogICAgcmV0dXJuICJEZWZlbmRhbnQiCiAgZWxzZToKICAgIHJldHVybiAiPyIKCgogIApjbGFzcyBEQUlCUERhdGEoREFPYmplY3QpOgogIGRlZiBpbml0KHNlbGYsICpwYXJncywgKiprd2FyZ3MpOgogICAgcmV0dXJuIHN1cGVyKERBSUJQRGF0YSwgc2VsZikuaW5pdCgqcGFyZ3MsICoqa3dhcmdzKQogIGRlZiBsb2FkKHNlbGYsIGRhdGFiYXNlKToKICAgIHNlbGYuZGF0YWZpbGUgPSBkYXRhYmFzZS5wYXRoKCkKICAgIGRhdGFfZmlsZXMgPSBbXQogICAgZGF0YV9maWxlcy5hcHBlbmQoZGF0YWJhc2UucGF0aCgpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBzZWxmLmZhY3RvcnMsIHNlbGYuY2FzZV9jb2xsZWN0aW9ucywgc2VsZi5kb21haW5fbW9kZWxzID0gbG9hZF9kYXRhc2V0KGRhdGFfZmlsZXMpCiAgICBzZWxmLmluaXRpYWxpemVBdHRyaWJ1dGUoJ2ZhY3RvcnNsaXN0JywgREFEaWN0KQogICAgZm9yIGYgaW4gc2VsZi5mYWN0b3JzOgogICAgICBpZCA9IHNlbGYuZmFjdG9yc1tmXVsnaWQnXQo8fGZpbV9lbmR8Pg=="]
["c13f8e80f18aa16700b5c5d1c986baea25936b63-1","c13f8e80f18aa16700b5c5d1c986baea25936b63","PHxmaW1fcHJlZml4fD4KbiwgbSA9IG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkKCmFycmF5ID0gbGlzdChtYXAoaW50LCBpbnB1dCgpLnNwbGl0KCkpKQpBID0gc2V0KG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkpCkIgPSBzZXQobWFwKGludCwgaW5wdXQoKS5zcGxpdCgpKSkKCmhhcHBpbmVzcyA9IDAKZm9yIGVsZW1lbnQgaW4gYXJyYXk6CiAgICBpZiBlbGVtZW50IGluIEE6CiAgICAgICAgaGFwcGluZXNzICs9IDEKICAgIGVsaWYgZWxlbWVudCBpbiBCOgogICAgICAgIGhhcHBpbmVzcyAtPSAxCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCnByaW50KGhhcHBpbmVzcykKPHxmaW1fZW5kfD4="]
["c13f8e80f18aa16700b5c5d1c986baea25936b63-2","c13f8e80f18aa16700b5c5d1c986baea25936b63","PHxmaW1fcHJlZml4fD4KbiwgbSA9IG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkKCmFycmF5ID0gbGlzdChtYXAoaW50LCBpbnB1dCgpLnNwbGl0KCkpKQpBID0gc2V0KG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkpCkIgPSBzZXQobWFwKGludCwgaW5wdXQoKS5zcGxpdCgpKSkKCmhhcHBpbmVzcyA9IDAKZm9yIGVsZW1lbnQgaW4gYXJyYXk6CiAgICBpZiBlbGVtZW50IGluIEE6CiAgICAgICAgaGFwcGluZXNzICs9IDEKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZWxpZiBlbGVtZW50IGluIEI6CiAgICAgICAgaGFwcGluZXNzIC09IDEKCjx8ZmltX2VuZHw+"]
["c13f8e80f18aa16700b5c5d1c986baea25936b63-3","c13f8e80f18aa16700b5c5d1c986baea25936b63","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgpCID0gc2V0KG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkpCgpoYXBwaW5lc3MgPSAwCmZvciBlbGVtZW50IGluIGFycmF5OgogICAgaWYgZWxlbWVudCBpbiBBOgogICAgICAgIGhhcHBpbmVzcyArPSAxCiAgICBlbGlmIGVsZW1lbnQgaW4gQjoKICAgICAgICBoYXBwaW5lc3MgLT0gMQoKcHJpbnQoaGFwcGluZXNzKQo8fGZpbV9zdWZmaXh8PgpuLCBtID0gbWFwKGludCwgaW5wdXQoKS5zcGxpdCgpKQoKYXJyYXkgPSBsaXN0KG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkpCkEgPSBzZXQobWFwKGludCwgaW5wdXQoKS5zcGxpdCgpKSkKPHxmaW1fZW5kfD4="]
["6be9176254f564519e5d484719c468df5ffb3b54-1","6be9176254f564519e5d484719c468df5ffb3b54","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KCmltcG9ydCB1cmxsaWIKCmZyb20gZGphbmdvLmNvbnRyaWIgaW1wb3J0IG1lc3NhZ2VzCmZyb20gZGphbmdvLmNvbnRyaWIuYXV0aC5tb2RlbHMgaW1wb3J0IFVzZXIsIEdyb3VwCmZyb20gZGphbmdvLnNob3J0Y3V0cyBpbXBvcnQgcmVuZGVyCmZyb20ga2hheXlhbSBpbXBvcnQgSmFsYWxpRGF0ZXRpbWUKZnJvbSBwZXJzaWFudG9vbHMgaW1wb3J0IGRpZ2l0cwpmcm9tIHJlc3RfZnJhbWV3b3JrIGltcG9ydCBwZXJtaXNzaW9ucywgbWl4aW5zCmZyb20gcmVzdF9mcmFtZXdvcmsgaW1wb3J0IHZpZXdzZXRzCmZyb20gcmVzdF9mcmFtZXdvcmsudmlld3NldHMgaW1wb3J0IEdlbmVyaWNWaWV3U2V0Cgpmcm9tIHJlcG9ydHMuZm9ybXMgaW1wb3J0IFJlcG9ydEZvcm0sIFN0YXR1c0Zvcm0KZnJvbSByZXBvcnRzLm1vZGVscyBpbXBvcnQgUmVwb3J0CmZyb20gcmVwb3J0cy5zZXJpYWxpemVycyBpbXBvcnQgR3JvdXBTZXJpYWxpemVyLCBVc2VyU2VyaWFsaXplciwgUmVwb3J0U2VyaWFsaXplcgpmcm9tIHJlcG9ydHMudXRpbHMgaW1wb3J0IHVuaXF1ZV9yZWZlcmVuY2VfbnVtYmVyLCB1dGNfdG9fbG9jYWwKZnJvbSB3aGlzdGxlYmxvd2VycyBpbXBvcnQgc2V0dGluZ3MKCgpjbGFzcyBVc2VyVmlld1NldCh2aWV3c2V0cy5Nb2RlbFZpZXdTZXQpOgogICAgIiIiCiAgICBBUEkgZW5kcG9pbnQgdGhhdCBhbGxvd3MgdXNlcnMgdG8gYmUgdmlld2VkIG9yIGVkaXRlZC4KICAgICIiIgogICAgcXVlcnlzZXQgPSBVc2VyLm9iamVjdHMuYWxsKCkub3JkZXJfYnkoJy1kYXRlX2pvaW5lZCcpCiAgICBzZXJpYWxpemVyX2NsYXNzID0gVXNlclNlcmlhbGl6ZXIKICAgIHBlcm1pc3Npb25fY2xhc3NlcyA9IFtwZXJtaXNzaW9ucy5Jc0F1dGhlbnRpY2F0ZWRdCgoKY2xhc3MgR3JvdXBWaWV3U2V0KHZpZXdzZXRzLk1vZGVsVmlld1NldCk6CiAgICAiIiIKICAgIEFQSSBlbmRwb2ludCB0aGF0IGFsbG93cyBncm91cHMgdG8gYmUgdmlld2VkIG9yIGVkaXRlZC4KICAgICIiIgogICAgcXVlcnlzZXQgPSBHcm91cC5vYmplY3RzLmFsbCgpCiAgICBzZXJpYWxpemVyX2NsYXNzID0gR3JvdXBTZXJpYWxpemVyCiAgICBwZXJtaXNzaW9uX2NsYXNzZXMgPSBbcGVybWlzc2lvbnMuSXNBdXRoZW50aWNhdGVkXQoKCmRlZiB0aGFua3MocmVxdWVzdCk6CiAgICAjIGlmIHRoaXMgaXMgYSBQT1NUIHJlcXVlc3Qgd2UgbmVlZCB0byBwcm9jZXNzIHRoZSBmb3JtIGRhdGEKICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICdHRVQnOgogICAgICAgICMgY3JlYXRlIGEgZm9ybSBpbnN0YW5jZSBhbmQgcG9wdWxhdGUgaXQgd2l0aCBkYXRhIGZyb20gdGhlIHJlcXVlc3Q6CiAgICAgICAgYSA9IFJlcG9ydC5vYmplY3RzLmZpcnN0KCkKICAgICAgICBtbSA9IHV0Y190b19sb2NhbChhLm1vZGlmaWVkX2RhdGV0aW1lKQogICAgICAgIGN1cnJlbmN0ID0gSmFsYWxpRGF0ZXRpbWUobW0pCiAgICAgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCAndGhhbmtzLmh0bWwnLCB7J2NyZWF0ZWRfZGF0ZXRpbWUnOiBjdXJyZW5jdC5zdHJmdGltZSgiJUMiKSwgJ3JlZl9udW1iZXInOiAi27Hbstuz27Tbtdu227fbuNu527IifSkKCiAgICAjIGlmIGEgR0VUIChvciBhbnkgb3RoZXIgbWV0aG9kKSB3ZSdsbCBjcmVhdGUgYSBibGFuayBmb3JtCgoKZGVmIGhvbWUocmVxdWVzdCk6CiAgICAjIGlmIHRoaXMgaXMgYSBQT1NUIHJlcXVlc3Qgd2UgbmVlZCB0byBwcm9jZXNzIHRoZSBmb3JtIGRhdGEKICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICdHRVQnOgogICAgICAgICMgY3JlYXRlIGEgZm9ybSBpbnN0YW5jZSBhbmQgcG9wdWxhdGUgaXQgd2l0aCBkYXRhIGZyb20gdGhlIHJlcXVlc3Q6CiAgICAgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCAnaG9tZS5odG1sJywgKQoKICAgICMgaWYgYSBHRVQgKG9yIGFueSBvdGhlciBtZXRob2QpIHdlJ2xsIGNyZWF0ZSBhIGJsYW5rIGZvcm0KCgpkZWYgc3RhdHVzKHJlcXVlc3QpOgogICAgIyBpZiB0aGlzIGlzIGEgUE9TVCByZXF1ZXN0IHdlIG5lZWQgdG8gcHJvY2VzcyB0aGUgZm9ybSBkYXRhCiAgICBpZiByZXF1ZXN0Lm1ldGhvZCA9PSAnR0VUJzoKICAgICAgICBmb3JtID0gU3RhdHVzRm9ybSgpCiAgICAgICAgIyBjcmVhdGUgYSBmb3JtIGluc3RhbmNlIGFuZCBwb3B1bGF0ZSBpdCB3aXRoIGRhdGEgZnJvbSB0aGUgcmVxdWVzdDoKICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICdzdGF0dXMuaHRtbCcsIHsiZm9ybSI6IGZvcm19KQogICAgZWxzZToKICAgICAgICBmb3JtID0gU3RhdHVzRm9ybShyZXF1ZXN0LlBPU1QpCiAgICAgICAgaWYgZm9ybS5pc192YWxpZCgpOgogICAgICAgICAgICByZXBvcnQgPSBSZXBvcnQub2JqZWN0cy5maWx0ZXIocmVmZXJlbmNlX251bWJlcj1mb3JtLmNsZWFuZWRfZGF0YVsicmVmZXJlbmNlX251bWJlciJdKS5maXJzdCgpCiAgICAgICAgICAgIGlmIHJlcG9ydDoKICAgICAgICAgICAgICAgIHJlZmVyZW5jZV9udW1iZXIgPSBkaWdpdHMuZW5fdG9fZmEocmVwb3J0LnJlZmVyZW5jZV9udW1iZXIpCiAgICAgICAgICAgICAgICB0aXRsZSA9IGRpZ2l0cy5lbl90b19mYShyZXBvcnQudGl0bGUpCiAgICAgICAgICAgICAgICByZXBvcnRfc3RhdHVzID0gZGlnaXRzLmVuX3RvX2ZhKHJlcG9ydC5nZXRfc3RhdHVzX2Rpc3BsYXkoKSkKICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgJ3N0YXR1cy5odG1sJywgeyJyZWZlcmVuY2VfbnVtYmVyIjogcmVmZXJlbmNlX251bWJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aXRsZSI6IHRpdGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXR1cyI6IHJlcG9ydF9zdGF0dXN9KQogICAgICAgICAgICBtZXNzYWdlcy5lcnJvcihyZXF1ZXN0LCAn2qnYr9m+24zar9uM2LHbjCDZiNin2LHYryDYtNiv2Ycg2b7bjNiv2Kcg2YbYtNivLiDZhNi32YHYpyDYqNuM2LTYqtixINiv2YLYqiDaqdmG24zYryEnKQogICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCAnc3RhdHVzLmh0bWwnLCB7ImZvcm0iOiBmb3JtfSkKCiAgICAjIGlmIGEgR0VUIChvciBhbnkgb3RoZXIgbWV0aG9kKSB3ZSdsbCBjcmVhdGUgYSBibGFuayBmb3JtCgoKZGVmIG5ld19yZXBvcnQocmVxdWVzdCk6CiAgICBkYXRhX3NpdGVfa2V5ID0gc2V0dGluZ3MuR09PR0xFX1JFQ0FQVENIQV9EQVRBX1NJVEVfS0VZCiAgICBpZiByZXF1ZXN0Lm1ldGhvZCA9PSAnUE9TVCc6CiAgICAgICAgZm9ybSA9IFJlcG9ydEZvcm0ocmVxdWVzdC5QT1NULCByZXF1ZXN0LkZJTEVTKQogICAgICAgIGlmIGZvcm0uaXNfdmFsaWQoKToKICAgICAgICAgICAgJycnIEJlZ2luIHJlQ0FQVENIQSB2YWxpZGF0aW9uICcnJwogICAgICAgICAgICByZWNhcHRjaGFfcmVzcG9uc2UgPSByZXF1ZXN0LlBPU1QuZ2V0KCdnLXJlY2FwdGNoYS1yZXNwb25zZScpCiAgICAgICAgICAgIHVybCA9ICdodHRwczovL3d3dy5nb29nbGUuY29tL3JlY2FwdGNoYS9hcGkvc2l0ZXZlcmlmeScKICAgICAgICAgICAgdmFsdWVzID0gewogICAgICAgICAgICAgICAgJ3NlY3JldCc6IHNldHRpbmdzLkdPT0dMRV9SRUNBUFRDSEFfU0VDUkVUX0tFWSwKICAgICAgICAgICAgICAgICdyZXNwb25zZSc6IHJlY2FwdGNoYV9yZXNwb25zZQogICAgICAgICAgICB9CiAgICAgICAgICAgIGRhdGEgPSB1cmxsaWIucGFyc2UudXJsZW5jb2RlKHZhbHVlcykuZW5jb2RlKCkKICAgICAgICAgICAgcmVxID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCh1cmwsIGRhdGE9ZGF0YSkKICAgICAgICAgICAgcmVzcG9uc2UgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJlcSkKICAgICAgICAgICAgcmVzdWx0ID0ganNvbi5sb2FkcyhyZXNwb25zZS5yZWFkKCkuZGVjb2RlKCkpCiAgICAgICAgICAgICcnJyBFbmQgcmVDQVBUQ0hBIHZhbGlkYXRpb24gJycnCgogICAgICAgICAgICBpZiByZXN1bHRbJ3N1Y2Nlc3MnXToKICAgICAgICAgICAgICAgIHJlZmVyZW5jZV9udW1iZXIgPSB1bmlxdWVfcmVmZXJlbmNlX251bWJlcigpCiAgICAgICAgICAgICAgICBuX3JlcG9ydCA9IGZvcm0uc2F2ZShjb21taXQ9RmFsc2UpCiAgICAgICAgICAgICAgICBuX3JlcG9ydC5yZWZlcmVuY2VfbnVtYmVyID0gcmVmZXJlbmNlX251bWJlcgogICAgICAgICAgICAgICAgbl9yZXBvcnQuc2F2ZSgpCiAgICAgICAgICAgICAgICByZWZfbnVtYmVyID0gZGlnaXRzLmVuX3RvX2ZhKHN0cihyZWZlcmVuY2VfbnVtYmVyKSkKICAgICAgICAgICAgICAgIGNyZWF0ZWRfZGF0ZXRpbWUgPSB1dGNfdG9fbG9jYWwobl9yZXBvcnQuY3JlYXRlZF9kYXRldGltZSkKICAgICAgICAgICAgICAgIGNyZWF0ZWRfZGF0ZXRpbWUgPSBKYWxhbGlEYXRldGltZShjcmVhdGVkX2RhdGV0aW1lKQogICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCAndGhhbmtzLmh0bWwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3JlZl9udW1iZXInOiByZWZfbnVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NyZWF0ZWRfZGF0ZXRpbWUnOiBjcmVhdGVkX2RhdGV0aW1lLnN0cmZ0aW1lKCclQycpfSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIG1lc3NhZ2VzLmVycm9yKHJlcXVlc3QsICdyZUNBUFRDSEEg2YbYp9mF2LnYqtio2LEg2KfYs9iqLiDZhNi32YHYpyDYr9mI2KjYp9ix2Ycg2KrZhNin2LQg2qnZhtuM2K8uJykKICAgIGVsc2U6CiAgICAgICAgZm9ybSA9IFJlcG9ydEZvcm0oKQogICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCAnbmV3X3JlcG9ydC5odG1sJywgeydmb3JtJzogZm9ybSwgImRhdGFfc2l0ZV9rZXkiOiBkYXRhX3NpdGVfa2V5fSkKCgojIGNsYXNzIFJlcG9ydFZpZXdTZXQodmlld3NldHMuTW9kZWxWaWV3U2V0KToKIyAgICAgIiIiCiMgICAgIEEgdmlld3NldCBmb3Igdmlld2luZyBhbmQgZWRpdGluZyB1c2VyIGluc3RhbmNlcy4KIyAgICAgIiIiCiMgICAgIHNlcmlhbGl6ZXJfY2xhc3MgPSBSZXBvcnRTZXJpYWxpemVyCiMgICAgIHF1ZXJ5c2V0ID0gUmVwb3J0Lm9iamVjdHMuYWxsKCkKIyAgICAgcmVuZGVyZXJfY2xhc3NlcyA9IFtUZW1wbGF0ZUhUTUxSZW5kZXJlcl0KIyAgICAgdGVtcGxhdGVfbmFtZSA9ICdyZXBvcnRzLmh0bWwnCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIwojICAgICBkZWYgZm9ybShzZWxmLCByZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgojICAgICAgICAgc2VyaWFsaXplciA9IHNlbGYuZ2V0X3NlcmlhbGl6ZXIoKQojICAgICAgICAgcmVuZGVyZXIgPSBIVE1MRm9ybVJlbmRlcmVyKCkKPHxmaW1fZW5kfD4="]
["00b382b9a7219bf549065b3f776d86c435e812dc-1","00b382b9a7219bf549065b3f776d86c435e812dc",{"$cut":{"chars":42968,"head":"PHxmaW1fcHJlZml4fD4KIwojIENvcHlyaWdodCAoYykgU0FTIEluc3RpdHV0ZSBJbmMuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCgpmcm9tIHRlc3RydW5uZXIgaW1wb3J0IHRlc3RoZWxwCmltcG9ydCBvcwppbXBvcnQgdGltZQppbXBvcnQgdW5pdHRlc3QKaW1wb3J0IHRlbXBmaWxlCmltcG9ydCBpdGVydG9vbHMKCmZyb20gY29uYXJ5IGltcG9ydCBkYnN0b3JlCmZyb20gY29uYXJ5LmRic3RvcmUgaW1wb3J0IHNxbGxpYiwgc3FsZXJyb3JzLCBzaGVsbApmcm9tIGNvbmFyeS5saWIgaW1wb3J0IGNmZ3R5cGVzCgpmcm9tIHRlc3R1dGlscyBpbXBvcnQgc3FsaGFybmVzcwoKCmNsYXNzIERCU3RvcmVUZXN0QmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpOgogICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KQogICAgICAgIHNlbGYuaGFybmVzcyA9IE5vbmUKICAgICAgICBzZWxmLl9kYmxpc3QgPSBbXQogICAgICAgIAogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIGlmIHNlbGYuaGFybmVzcyBpcyBOb25lOgogICAgICAgICAgICBzZWxmLmhhcm5lc3MgPSBzcWxoYXJuZXNzLnN0YXJ0KCkKICAgICAgICBmb3IgZGIgaW4gc2VsZi5fZGJsaXN0OgogICAgICAgICAgICBkYi5fcmVzZXQoKQoKICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICBmb3IgZGIgaW4gc2VsZi5fZGJsaXN0OgogICAgICAgICAgICBkYi5zdG9wKCkKICAgICAgICBzZWxmLl9kYmxpc3QgPSBbXQogICAgCiAgICBkZWYgZ2V0REIoc2VsZiwgZGJOYW1lPSJkYnN0b3JlIik6CiAgICAgICAgYXNzZXJ0KHNlbGYuaGFybmVzcykKICAgICAgICByZXBvZGIgPSBzZWxmLmhhcm5lc3MuZ2V0REIoZGJOYW1lKQogICAgICAgIGRiID0gcmVwb2RiLmNvbm5lY3QoKQogICAgICAgIGRiLmxvYWRTY2hlbWEoKQogICAgICAgICMga2VlcCBhIHJlZmVyZW5jZSBhcm91bmQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSBkYgogICAgICAgICMgZGF0YWJhc2UgY2xvc2VkIGZyb20gdW5kZXIgdXMgaWYgcmVwb2RiIGdvZXMgYXdheQogICAgICAgIHNlbGYuX2RibGlzdC5hcHBlbmQocmVwb2RiKQogICAgICAgIHJldHVybiBkYgoKY2xhc3MgRHVtbXlEcml2ZXI6CiAgICBkZWYgY3Vyc29yKHNlbGYpOgogICAgICAgIHJldHVybiBEdW1teURyaXZlcigpCgogICAgZGVmIGxhc3Ryb3dpZChzZWxmKToKICAgICAgICByZXR1cm4gMQoKY2xhc3MgREJTdG9yZUJhc2VDdXJzb3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiB0ZXN0Q3Vyc29yKHNlbGYpOgogICAgICAgIGN1ID0gZGJzdG9yZS5DdXJzb3IoRHVtbXlEcml2ZXIoKSkKICAgICAgICBhc3NlcnQoY3UuYmluYXJ5ICE9IE5vbmUpCiAgICAgICAgYXNzZXJ0KGN1LmRiaCAhPSBOb25lKQogICAgICAgIGFzc2VydChjdS5fY3Vyc29yICE9IE5vbmUpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBjdS5iYWRhdHRyaWJ1dGUKICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgIHBhc3MKICAgICAgICBlbHNlOgogICAgICAgICAgICBhc3NlcnQoMCkKICAgICAgICBhc3NlcnQoY3UubGFzdHJvd2lkKCkgPT0gMSkKCmNsYXNzIERCU3RvcmVDZmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiB0ZXN0Q2ZnKHNlbGYpOgogICAgICAgIGNmZyA9IGRic3RvcmUuQ2ZnRHJpdmVyKCkKICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjZmd0eXBlcy5QYXJzZUVycm9yLCBjZmcucGFyc2VTdHJpbmcsICdzcGxhcnQnKQogICAgICAgIHBhcnNlZCA9IGNmZy5wYXJzZVN0cmluZygnbXlzcWwgcm9vdEBsb2NhbGhvc3QvZGInKQogICAgICAgIGFzc2VydChjZmcuZm9ybWF0KHBhcnNlZCkgPT0gJ215c3FsIHJvb3RAbG9jYWxob3N0L2RiJykKCmNsYXNzIERCU3RvcmVDb2RlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICBkZWYgdGVzdENhc2VsZXNzRGljdChzZWxmKToKICAgICAgICBkZWYgX190ZXN0Q0QoZCk6CiAgICAgICAgICAgIGFzc2VydCgidGVzdCIgaW4gZCkKICAgICAgICAgICAgYXNzZXJ0KCJUZXN0IiBpbiBkKQogICAgICAgICAgICBhc3NlcnQoZFsiVGVzdCJdID09ICJ2YWx1ZTAiKQogICAgICAgICAgICBhc3NlcnQoZCA9PSB7InRlc3QiIDogInZhbHVlMCJ9KQogICAgICAgICAgICBkWyJUZXNUIl0gPSAidmFsdWUxIgogICAgICAgICAgICBhc3NlcnQobGVuKGQpID09IDEpCiAgICAgICAgICAgIGFzc2VydChkID09IHsidGVzdCIgOiAidmFsdWUxIn0pCiAgICAgICAgICAgIGQudXBkYXRlKHsidGVTdCIgOiAidmFsdWUifSkKICAgICAgICAgICAgYXNzZXJ0KGxlbihkKSA9PSAxKQogICAgICAgICAgICBhc3NlcnQoZCA9PSB7InRlc3QiIDogInZhbHVlIn0pCiAgICAgICAgICAgIGFzc2VydChkLml0ZW1zKCkgPT0gWygidGVTdCIsICJ2YWx1ZSIpXSkKICAgICAgICAgICAgYXNzZXJ0KGQua2V5cygpID09IFsidGVTdCJdKQogICAgICAgICAgICBhc3NlcnQoZC52YWx1ZXMoKSA9PSBbInZhbHVlIl0pCiAgICAgICAg"}}]
["e730fae29d39c13c26fc579941517cd7c163af4d-1","e730fae29d39c13c26fc579941517cd7c163af4d","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMS4zIG9uIDIwMjEtMDItMDUgMTU6NTUKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ21lbWJlcnNoaXAnLCAnMDAwMl9hdXRvXzIwMjAwNDEyXzE5MzInKSwKICAgIF0KCiAgICBvcGVyYXRpb25zID0gWwogICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJNb2RlbE9wdGlvbnMoCiAgICAgICAgICAgIG5hbWU9J2Nvb3BtZW1iZXInLAogICAgICAgICAgICBvcHRpb25zPXsndmVyYm9zZV9uYW1lJzogJ21lbWJlcnNoaXAnLCAndmVyYm9zZV9uYW1lX3BsdXJhbCc6ICdtZW1iZXJzaGlwcyd9LAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdjb29wbWVtYmVyJywKICAgICAgICAgICAgbmFtZT0nYmlydGhkYXRlJywKICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkRhdGVGaWVsZChibGFuaz1UcnVlLCBudWxsPVRydWUsIHZlcmJvc2VfbmFtZT0nYmlydGggZGF0ZScpLAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIG1vZGVsX25hbWU9J2Nvb3BtZW1iZXInLAogICAgICAgICAgICBuYW1lPSdjaXZpbF9zdGF0dXMnLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuQ2hhckZpZWxkKGNob2ljZXM9WygnUycsICdTaW5nbGUnKSwgKCdNJywgJ01hcnJpZWQnKSwgKCdEJywgJ0Rpdm9yY2VkJyksICgnVycsICdXaWRvdyhlZCknKV0sIG1heF9sZW5ndGg9MSwgdmVyYm9zZV9uYW1lPSdjaXZpbCBzdGF0dXMnKSwKPHxmaW1fZW5kfD4="]
["e730fae29d39c13c26fc579941517cd7c163af4d-2","e730fae29d39c13c26fc579941517cd7c163af4d","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMS4zIG9uIDIwMjEtMDItMDUgMTU6NTUKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ21lbWJlcnNoaXAnLCAnMDAwMl9hdXRvXzIwMjAwNDEyXzE5MzInKSwKICAgIF0KCiAgICBvcGVyYXRpb25zID0gWwogICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJNb2RlbE9wdGlvbnMoCiAgICAgICAgICAgIG5hbWU9J2Nvb3BtZW1iZXInLAogICAgICAgICAgICBvcHRpb25zPXsndmVyYm9zZV9uYW1lJzogJ21lbWJlcnNoaXAnLCAndmVyYm9zZV9uYW1lX3BsdXJhbCc6ICdtZW1iZXJzaGlwcyd9LAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdjb29wbWVtYmVyJywKICAgICAgICAgICAgbmFtZT0nYmlydGhkYXRlJywKICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkRhdGVGaWVsZChibGFuaz1UcnVlLCBudWxsPVRydWUsIHZlcmJvc2VfbmFtZT0nYmlydGggZGF0ZScpLAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdjb29wbWVtYmVyJywKICAgICAgICAgICAgbmFtZT0nY2l2aWxfc3RhdHVzJywKPHxmaW1faG9sZXw+CiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J2Nvb3BtZW1iZXInLAogICAgICAgICAgICBuYW1lPSdnZW5kZXInLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuQ2hhckZpZWxkKGNob2ljZXM9WygnTScsICdNYWxlJyksICgnRicsICdGZW1hbGUnKSwgKCdPJywgJ090aGVyJyldLCBtYXhfbGVuZ3RoPTEsIHZlcmJvc2VfbmFtZT0nZ2VuZGVyJyksCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J2Nvb3BtZW1iZXInLAogICAgICAgICAgICBuYW1lPSduYXRpb25hbF9pZCcsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNTUsIHZlcmJvc2VfbmFtZT0nTmF0aW9uYWwgaWQnKSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nY29vcG1lbWJlcicsCiAgICAgICAgICAgIG5hbWU9J25hdGlvbmFsaXR5JywKICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSwgdmVyYm9zZV9uYW1lPSduYXRpb25hbGl0eScpLAogICAgICAgICksCiAgICBdCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5DaGFyRmllbGQoY2hvaWNlcz1bKCdTJywgJ1NpbmdsZScpLCAoJ00nLCAnTWFycmllZCcpLCAoJ0QnLCAnRGl2b3JjZWQnKSwgKCdXJywgJ1dpZG93KGVkKScpXSwgbWF4X2xlbmd0aD0xLCB2ZXJib3NlX25hbWU9J2NpdmlsIHN0YXR1cycpLAo8fGZpbV9lbmR8Pg=="]
["c1f3b8f4122ec07c0d4d938bd56e1c91b442528f-1","c1f3b8f4122ec07c0d4d938bd56e1c91b442528f","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMS4yIG9uIDIwMTgtMTItMDkgMTM6MzkKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ0V2ZW50JywgJzAwMDhfYXV0b18yMDE4MTIwNF8yMzQ5JyksCjx8ZmltX2VuZHw+"]
["c1f3b8f4122ec07c0d4d938bd56e1c91b442528f-2","c1f3b8f4122ec07c0d4d938bd56e1c91b442528f","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMS4yIG9uIDIwMTgtMTItMDkgMTM6MzkKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgKCdFdmVudCcsICcwMDA4X2F1dG9fMjAxODEyMDRfMjM0OScpLAogICAgICAgIG1pZ3JhdGlvbnMuc3dhcHBhYmxlX2RlcGVuZGVuY3koc2V0dGluZ3MuQVVUSF9VU0VSX01PREVMKSwKICAgICAgICAoJ1VzZXInLCAnMDAwNF9hdXRvXzIwMTgxMTIxXzE0MjYnKSwKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIG5hbWU9J2Zhdm91cml0ZScsCiAgICAgICAgICAgIHVuaXF1ZV90b2dldGhlcj17KCdldmVudCcsICd1c2VyJyl9LAogICAgICAgICksCiAgICBdCjx8ZmltX3N1ZmZpeHw+CiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFsdGVyVW5pcXVlVG9nZXRoZXIoCjx8ZmltX2VuZHw+"]
["c1f3b8f4122ec07c0d4d938bd56e1c91b442528f-3","c1f3b8f4122ec07c0d4d938bd56e1c91b442528f","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMS4yIG9uIDIwMTgtMTItMDkgMTM6MzkKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgKCdFdmVudCcsICcwMDA4X2F1dG9fMjAxODEyMDRfMjM0OScpLAogICAgICAgIG1pZ3JhdGlvbnMuc3dhcHBhYmxlX2RlcGVuZGVuY3koc2V0dGluZ3MuQVVUSF9VU0VSX01PREVMKSwKICAgICAgICAoJ1VzZXInLCAnMDAwNF9hdXRvXzIwMTgxMTIxXzE0MjYnKSwKICAgIF0KCiAgICBvcGVyYXRpb25zID0gWwogICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJVbmlxdWVUb2dldGhlcigKICAgICAgICAgICAgbmFtZT0nZmF2b3VyaXRlJywKICAgICAgICAgICAgdW5pcXVlX3RvZ2V0aGVyPXsoJ2V2ZW50JywgJ3VzZXInKX0sCiAgICAgICAgKSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgXQo8fGZpbV9lbmR8Pg=="]
["c1f3b8f4122ec07c0d4d938bd56e1c91b442528f-4","c1f3b8f4122ec07c0d4d938bd56e1c91b442528f","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMS4yIG9uIDIwMTgtMTItMDkgMTM6MzkKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKPHxmaW1fZW5kfD4="]
["c1f3b8f4122ec07c0d4d938bd56e1c91b442528f-5","c1f3b8f4122ec07c0d4d938bd56e1c91b442528f","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMS4yIG9uIDIwMTgtMTItMDkgMTM6MzkKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKPHxmaW1fZW5kfD4="]
["41bca1fa543dd12268598b574199581008738d8a-1","41bca1fa543dd12268598b574199581008738d8a","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiUGFyYW1ldGVyaXplIHRoZSBvbmUtZGltZW5zaW9uYWwgYnJhbmNoZXMgb2YgdGhlIG9yaWdhbWkuCgpUaGlzIHNjcmlwdCBudW1lcmljYWxseSBwYXJhbWV0ZXJpemVzIHRoZSBmb3VyIG9uZS1kaW1lbnNpb25hbCBicmFuY2hlcwooYXMgb25lLWRpbWVuc2lvbmFsIGN1cnZlcyBlbWJlZGRlZCBpbiBhIHR3ZWx2ZS1kaW1lbnNpb25hbCBhbWJpZW50CnNwYWNlKSBvZiBhbiBvcmlnYW1pIG1hZGUgYnkgdHJpYW5ndWxhdGluZyBhIHVuaXQgc3F1YXJlLgoiIiIKCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgb3MKZnJvbSBvcmlnYW1pIGltcG9ydCAqCmZyb20gdXRpbHMgaW1wb3J0ICoKCmRlZiBoaXQocXEsIHN0YXJ0PTUwKToKICAgICIiIkZpbmQgdGhlIHBvaW50IChpbmRleCkgd2hlbiBhbnkgdHdvIGZhY2VzIG9mIHRoZSBvcmlnYW1pIGhpdCBlYWNoIG90aGVyLiIiIgogICAgIyBGaXJzdCwgZmluZCB3aGVuIGFueSB0d28gZmFjZXMgdGhhdCBzaGFyZSBhbiBlZGdlIGhhdmUgYW4gaW50ZXJzZWN0aW9uLgogICAgYWEgPSBucC5hcHBseV9hbG9uZ19heGlzKGFuZ2xlcywgMSwgcXEpCiAgICBzaWduID0gbnAuYXJyYXkoW25wLnNpZ24oYWFbc3RhcnRdKSAqIGEgZm9yIGEgaW4gYWFdKQoKICAgIHRyeToKICAgICAgICBzd2l0Y2ggPSBucC53aGVyZShzaWduIDwgMClbMF1bMF0KICAgIGV4Y2VwdCBJbmRleEVycm9yIGFzIGU6CiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJBbmdsZSBzaWducyB1bmNoYW5nZWQuICBJbmNyZWFzZSAnbWF4X3N0ZXBzJy4iKQoKICAgICMgTm93LCBsb29rIGF0IGZhY2VzIHRoYXQgc2hhcmUgYSB2ZXJ0ZXggYW5kIGZhY2VzIHRoYXQgc2hhcmUgbm90aGluZy4KICAgIGZhY2VpbnRlciA9IGxhbWJkYSBBLCBCOiB0cmlpbnRlcihBLCBCLCBGYWxzZSlbMF0KICAgIGZvciBpLCBxIGluIGVudW1lcmF0ZShxcVtzdGFydDpdKToKICAgICAgICBpZiAoCiAgICAgICAgICAgICMgRmFjZXMgdGhhdCBzaGFyZSBhIHZlcnRleC4KICAgICAgICAgICAgZmFjZWludGVyKFtbcVsxMF0sIHFbMTFdLCAwXSwgWzAsIDAsIDBdLCBbcVswXSwgMCwgMF1dLAogICAgICAgICAgICAgICAgICAgICAgW1txWzEwXSwgcVsxMV0sIDBdLCBbcVsxXSwgcVsyXSwgcVszXV0sIFtxWzddLCBxWzhdLCBxWzldXV0pCiAgICAgICAgICAgIG9yIGZhY2VpbnRlcihbWzAsIDAsIDBdLCBbcVswXSwgMCwgMF0sIFtxWzEwXSwgcVsxMV0sIDBdXSwKICAgICAgICAgICAgICAgICAgICAgICAgIFtbMCwgMCwgMF0sIFtxWzddLCBxWzhdLCBxWzldXSwgW3FbNF0sIHFbNV0sIHFbNl1dXSkKICAgICAgICAgICAgb3IgZmFjZWludGVyKFtbcVsxXSwgcVsyXSwgcVszXV0sIFtxWzEwXSwgcVsxMV0sIDBdLCBbcVswXSwgMCwgMF1dLAogICAgICAgICAgICAgICAgICAgICAgICAgW1txWzFdLCBxWzJdLCBxWzNdXSwgW3FbNF0sIHFbNV0sIHFbNl1dLCBbcVs3XSwgcVs4XSwgcVs5XV1dKQogICAgICAgICAgICBvciBmYWNlaW50ZXIoW1txWzEwXSwgcVsxMV0sIDBdLCBbcVswXSwgMCwgMF0sIFtxWzFdLCBxWzJdLCBxWzNdXV0sCiAgICAgICAgICAgICAgICAgICAgICAgICBbW3FbMTBdLCBxWzExXSwgMF0sIFtxWzddLCBxWzhdLCBxWzldXSwgWzAsIDAsIDBdXSkKICAgICAgICAgICAgb3IgZmFjZWludGVyKFtbcVs3XSwgcVs4XSwgcVs5XV0sIFtxWzEwXSwgcVsxMV0sIDBdLCBbcVsxXSwgcVsyXSwgcVszXV1dLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgICAgICBbW3FbN10sIHFbOF0sIHFbOV1dLCBbcVs0XSwgcVs1XSwgcVs2XV0sIFswLCAwLCAwXV0pCjx8ZmltX2VuZHw+"]
["41bca1fa543dd12268598b574199581008738d8a-2","41bca1fa543dd12268598b574199581008738d8a","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiUGFyYW1ldGVyaXplIHRoZSBvbmUtZGltZW5zaW9uYWwgYnJhbmNoZXMgb2YgdGhlIG9yaWdhbWkuCgpUaGlzIHNjcmlwdCBudW1lcmljYWxseSBwYXJhbWV0ZXJpemVzIHRoZSBmb3VyIG9uZS1kaW1lbnNpb25hbCBicmFuY2hlcwooYXMgb25lLWRpbWVuc2lvbmFsIGN1cnZlcyBlbWJlZGRlZCBpbiBhIHR3ZWx2ZS1kaW1lbnNpb25hbCBhbWJpZW50CnNwYWNlKSBvZiBhbiBvcmlnYW1pIG1hZGUgYnkgdHJpYW5ndWxhdGluZyBhIHVuaXQgc3F1YXJlLgoiIiIKCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgb3MKZnJvbSBvcmlnYW1pIGltcG9ydCAqCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSB1dGlscyBpbXBvcnQgKgoKZGVmIGhpdChxcSwgc3RhcnQ9NTApOgogICAgIiIiRmluZCB0aGUgcG9pbnQgKGluZGV4KSB3aGVuIGFueSB0d28gZmFjZXMgb2YgdGhlIG9yaWdhbWkgaGl0IGVhY2ggb3RoZXIuIiIiCjx8ZmltX2VuZHw+"]
["41bca1fa543dd12268598b574199581008738d8a-3","41bca1fa543dd12268598b574199581008738d8a","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiUGFyYW1ldGVyaXplIHRoZSBvbmUtZGltZW5zaW9uYWwgYnJhbmNoZXMgb2YgdGhlIG9yaWdhbWkuCgo8fGZpbV9ob2xlfD4KCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgb3MKZnJvbSBvcmlnYW1pIGltcG9ydCAqCmZyb20gdXRpbHMgaW1wb3J0ICoKCmRlZiBoaXQocXEsIHN0YXJ0PTUwKToKICAgICIiIkZpbmQgdGhlIHBvaW50IChpbmRleCkgd2hlbiBhbnkgdHdvIGZhY2VzIG9mIHRoZSBvcmlnYW1pIGhpdCBlYWNoIG90aGVyLiIiIgogICAgIyBGaXJzdCwgZmluZCB3aGVuIGFueSB0d28gZmFjZXMgdGhhdCBzaGFyZSBhbiBlZGdlIGhhdmUgYW4gaW50ZXJzZWN0aW9uLgogICAgYWEgPSBucC5hcHBseV9hbG9uZ19heGlzKGFuZ2xlcywgMSwgcXEpCiAgICBzaWduID0gbnAuYXJyYXkoW25wLnNpZ24oYWFbc3RhcnRdKSAqIGEgZm9yIGEgaW4gYWFdKQoKICAgIHRyeToKICAgICAgICBzd2l0Y2ggPSBucC53aGVyZShzaWduIDwgMClbMF1bMF0KICAgIGV4Y2VwdCBJbmRleEVycm9yIGFzIGU6CiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJBbmdsZSBzaWducyB1bmNoYW5nZWQuICBJbmNyZWFzZSAnbWF4X3N0ZXBzJy4iKQoKICAgICMgTm93LCBsb29rIGF0IGZhY2VzIHRoYXQgc2hhcmUgYSB2ZXJ0ZXggYW5kIGZhY2VzIHRoYXQgc2hhcmUgbm90aGluZy4KICAgIGZhY2VpbnRlciA9IGxhbWJkYSBBLCBCOiB0cmlpbnRlcihBLCBCLCBGYWxzZSlbMF0KICAgIGZvciBpLCBxIGluIGVudW1lcmF0ZShxcVtzdGFydDpdKToKICAgICAgICBpZiAoCiAgICAgICAgICAgICMgRmFjZXMgdGhhdCBzaGFyZSBhIHZlcnRleC4KICAgICAgICAgICAgZmFjZWludGVyKFtbcVsxMF0sIHFbMTFdLCAwXSwgWzAsIDAsIDBdLCBbcVswXSwgMCwgMF1dLAogICAgICAgICAgICAgICAgICAgICAgW1txWzEwXSwgcVsxMV0sIDBdLCBbcVsxXSwgcVsyXSwgcVszXV0sIFtxWzddLCBxWzhdLCBxWzldXV0pCiAgICAgICAgICAgIG9yIGZhY2VpbnRlcihbWzAsIDAsIDBdLCBbcVswXSwgMCwgMF0sIFtxWzEwXSwgcVsxMV0sIDBdXSwKICAgICAgICAgICAgICAgICAgICAgICAgIFtbMCwgMCwgMF0sIFtxWzddLCBxWzhdLCBxWzldXSwgW3FbNF0sIHFbNV0sIHFbNl1dXSkKICAgICAgICAgICAgb3IgZmFjZWludGVyKFtbcVsxXSwgcVsyXSwgcVszXV0sIFtxWzEwXSwgcVsxMV0sIDBdLCBbcVswXSwgMCwgMF1dLAogICAgICAgICAgICAgICAgICAgICAgICAgW1txWzFdLCBxWzJdLCBxWzNdXSwgW3FbNF0sIHFbNV0sIHFbNl1dLCBbcVs3XSwgcVs4XSwgcVs5XV1dKQogICAgICAgICAgICBvciBmYWNlaW50ZXIoW1txWzEwXSwgcVsxMV0sIDBdLCBbcVswXSwgMCwgMF0sIFtxWzFdLCBxWzJdLCBxWzNdXV0sCiAgICAgICAgICAgICAgICAgICAgICAgICBbW3FbMTBdLCBxWzExXSwgMF0sIFtxWzddLCBxWzhdLCBxWzldXSwgWzAsIDAsIDBdXSkKICAgICAgICAgICAgb3IgZmFjZWludGVyKFtbcVs3XSwgcVs4XSwgcVs5XV0sIFtxWzEwXSwgcVsxMV0sIDBdLCBbcVsxXSwgcVsyXSwgcVszXV1dLAogICAgICAgICAgICAgICAgICAgICAgICAgW1txWzddLCBxWzhdLCBxWzldXSwgW3FbNF0sIHFbNV0sIHFbNl1dLCBbMCwgMCwgMF1dKQogICAgICAgICAgICBvciBmYWNlaW50ZXIoW1txWzddLCBxWzhdLCBxWzldXSwgW3FbMV0sIHFbMl0sIHFbM11dLCBbcVs0XSwgcVs1XSwgcVs2XV1dLAogICAgICAgICAgICAgICAgICAgICAgICAgW1txWzddLCBxWzhdLCBxWzldXSwgWzAsIDAsIDBdLCBbcVsxMF0sIHFbMTFdLCAwXV0pCgogICAgICAgICAgICAjIEZhY2VzIHRoYXQgc2hhcmUgbm90aGluZy4KICAgICAgICAgICAgb3IgZmFjZWludGVyKFtbMCwgMCwgMF0sIFtxWzBdLCAwLCAwXSwgW3FbMTBdLCBxWzExXSwgMF1dLAogICAgICAgICAgICAgICAgICAgICAgICAgW1txWzFdLCBxWzJdLCBxWzNdXSwgW3FbNF0sIHFbNV0sIHFbNl1dLCBbcVs3XSwgcVs4XSwgcVs5XV1dKQogICAgICAgICAgICBvciBmYWNlaW50ZXIoW1txWzBdLCAwLCAwXSwgW3FbMV0sIHFbMl0sIHFbM11dLCBbcVsxMF0sIHFbMTFdLCAwXV0sCiAgICAgICAgICAgICAgICAgICAgICAgICBbWzAsIDAsIDBdLCBbcVs3XSwgcVs4XSwgcVs5XV0sIFtxWzRdLCBxWzVdLCBxWzZdXV0pCiAgICAgICAgKToKICAgICAgICAgICAgYnJlYWsKCiAgICByZXR1cm4gbWluKHN0YXJ0ICsgaSwgc3dpdGNoKQoKZGVmIG1ldHJpYyhwLCBxcSk6CiAgICAiIiJTcXVhcmUtcm9vdCBvZiB0aGUgbWV0cmljIHRlbnNvci4iIiIKICAgIGR0ID0gbnAuYXBwbHlfYWxvbmdfYXhpcyhucC5saW5hbGcubm9ybSwgMSwgbnAuZGlmZihxcSwgYXhpcz0wKSkKICAgIGRwID0gbnAuZGlmZihwKQogICAgcmV0dXJuIGR0IC8gZHAKCiMgVGhlIHZhbHVlcyBmb2xsb3cgdGhlIGNvbnZlbnRpb24gKHRhbmdlbnQsIG1heF9hbmdsZSwgbWF4X3N0ZXBzKS4KIyAndGFuZ2VudCcgaXMgdGhlIHRhbmdlbnQgdG8gdGhlIHBvc2l0aXZlIGJyYW5jaCAoaS5lLiwgb25lIHdoZXJlIGZvbGQgYW5nbGUKIyA1LTYgaXMgYWx3YXlzIHBvc2l0aXZlKS4gICdtYXhfYW5nbGUnIGlzIHRoZSBtYXhpbXVtIHBvc3NpYmxlIGFuZ2xlIGJlZm9yZQojIHR3byBmYWNlcyBoaXQgZWFjaCBvdGhlci4gICdtYXhfc3RlcHMnIGlzIGEgbnVtYmVyIHNsaWdodGVyIGxhcmdlciB0aGFuIHRoZQojIG9uZSByZXF1aXJlZCB0byBhY2hpZXZlIG1heF9hbmdsZSB3aGVuIHBhcmFtZXRlcml6aW5nIGluIGFyYyBsZW5ndGguCkJSQU5DSEVTID0gewogICAgImJyYW5jaDEiOiAoYjEsIDU5LjksIDMyMDApLAogICAgImJyYW5jaDIiOiAoYjIsIDExNi45LCAyNTAwKSwKICAgICJicmFuY2gzIjogKGIzLCAxMTYuOSwgMTgwMCksCiAgICAiYnJhbmNoNCI6IChiNCwgMTc5LjksIDE2MDApLAp9CgpicCA9IEJyYW5jaFBhcmFtKGYsIGphYykKCm9zLm1ha2VkaXJzKCIuL2JyYW5jaGVzL2FyYy8iLCBleGlzdF9vaz1UcnVlKQpvcy5tYWtlZGlycygiLi9icmFuY2hlcy9mb2xkXzUtNiIsIGV4aXN0X29rPVRydWUpCm9zLmNoZGlyKCIuL2JyYW5jaGVzIikKCmZvciBuYW1lLCBpbmZvIGluIEJSQU5DSEVTLml0ZW1zKCk6CiAgICBxZG90MCwgbWF4X2FuZ2xlLCBtYXhfc3RlcHMgPSBpbmZvCgogICAgcXEgPSBicC5hcmNwYXIocTA9ZmxhdCwgcWRvdDA9cWRvdDAsIG1heF9zdGVwcz1tYXhfc3RlcHMpCiAgICBoID0gaGl0KHFxKQogICAgbnAuc2F2ZXR4dCgiYXJjL3t9cC5kYXQiLmZvcm1hdChuYW1lKSwgcXFbOmhdKQogICAgbnAuc2F2ZXR4dCgiYXJjL3t9cF9hbmdsZXMuZGF0Ii5mb3JtYXQobmFtZSksIG5wLmFwcGx5X2Fsb25nX2F4aXMoYW5nbGVzLCAxLCBxcVs6aF0pKQogICAgcHJpbnQoInBvc2l0aXZlIHt9IGluIGFyYyBsZW5ndGggZG9uZSEiLmZvcm1hdChuYW1lKSkKCiAgICBwb2ludHMgPSBucC5saW5zcGFjZSgwLCBtYXhfYW5nbGUsIGludChtYXhfYW5nbGUgKiAxMDAwKSkKICAgIHAsIHFxID0gYnAuZnVucGFyKHEwPWZsYXQsIHFkb3QwPXFkb3QwLCBwYXI9bGFtYmRhIHE6IGFuZ2xlcyhxLCAzKSwgcG9pbnRzPXBvaW50cywgYXJjX3N0ZXBzPWgpCiAgICBnLCBwLCBxcSA9IG1ldHJpYyhwLCBxcSksIHBbOi0xXSwgcXFbOi0xXQogICAgbnAuc2F2ZXR4dCgKICAgICAgICAiZm9sZF81LTYve31wLmRhdCIuZm9ybWF0KG5hbWUpLAogICAgICAgIG5wLmhzdGFjayhbcFs6LCBucC5uZXdheGlzXSwgZ1s6LCBucC5uZXdheGlzXSwgcXFdKSwKICAgICkKICAgIHByaW50KCJwb3NpdGl2ZSB7fSBpbiBhbmdsZSBvZiBmb2xkIDUtNiBkb25lISIuZm9ybWF0KG5hbWUpKQoKICAgIHFxID0gYnAuYXJjcGFyKHEwPWZsYXQsIHFkb3QwPS1xZG90MCwgbWF4X3N0ZXBzPW1heF9zdGVwcykKICAgIGggPSBoaXQocXEpCiAgICBucC5zYXZldHh0KCJhcmMve31uLmRhdCIuZm9ybWF0KG5hbWUpLCBxcVs6aF0pCiAgICBucC5zYXZldHh0KCJhcmMve31uX2FuZ2xlcy5kYXQiLmZvcm1hdChuYW1lKSwgbnAuYXBwbHlfYWxvbmdfYXhpcyhhbmdsZXMsIDEsIHFxWzpoXSkpCiAgICBwcmludCgibmVnYXRpdmUge30gaW4gYXJjIGxlbmd0aCBkb25lISIuZm9ybWF0KG5hbWUpKQoKICAgIHBvaW50cyA9IG5wLmxpbnNwYWNlKC1tYXhfYW5nbGUsIDAsIGludChtYXhfYW5nbGUgKiAxMDAwKSkKICAgIHAsIHFxID0gYnAuZnVucGFyKHEwPWZsYXQsIHFkb3QwPS1xZG90MCwgcGFyPWxhbWJkYSBxOiBhbmdsZXMocSwgMyksIHBvaW50cz1wb2ludHMsIGFyY19zdGVwcz1oKQogICAgZywgcCwgcXEgPSBtZXRyaWMocCwgcXEpLCBwWzotMV0sIHFxWzotMV0KICAgIG5wLnNhdmV0eHQoCiAgICAgICAgImZvbGRfNS02L3t9bi5kYXQiLmZvcm1hdChuYW1lKSwKICAgICAgICBucC5oc3RhY2soW3BbOiwgbnAubmV3YXhpc10sIGdbOiwgbnAubmV3YXhpc10sIHFxXSksCiAgICApCiAgICBwcmludCgibmVnYXRpdmUge30gaW4gYW5nbGUgb2YgZm9sZCA1LTYgZG9uZSEiLmZvcm1hdChuYW1lKSkKPHxmaW1fc3VmZml4fD4KVGhpcyBzY3JpcHQgbnVtZXJpY2FsbHkgcGFyYW1ldGVyaXplcyB0aGUgZm91ciBvbmUtZGltZW5zaW9uYWwgYnJhbmNoZXMKKGFzIG9uZS1kaW1lbnNpb25hbCBjdXJ2ZXMgZW1iZWRkZWQgaW4gYSB0d2VsdmUtZGltZW5zaW9uYWwgYW1iaWVudApzcGFjZSkgb2YgYW4gb3JpZ2FtaSBtYWRlIGJ5IHRyaWFuZ3VsYXRpbmcgYSB1bml0IHNxdWFyZS4KIiIiCjx8ZmltX2VuZHw+"]
["41bca1fa543dd12268598b574199581008738d8a-4","41bca1fa543dd12268598b574199581008738d8a","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiUGFyYW1ldGVyaXplIHRoZSBvbmUtZGltZW5zaW9uYWwgYnJhbmNoZXMgb2YgdGhlIG9yaWdhbWkuCgpUaGlzIHNjcmlwdCBudW1lcmljYWxseSBwYXJhbWV0ZXJpemVzIHRoZSBmb3VyIG9uZS1kaW1lbnNpb25hbCBicmFuY2hlcwooYXMgb25lLWRpbWVuc2lvbmFsIGN1cnZlcyBlbWJlZGRlZCBpbiBhIHR3ZWx2ZS1kaW1lbnNpb25hbCBhbWJpZW50CnNwYWNlKSBvZiBhbiBvcmlnYW1pIG1hZGUgYnkgdHJpYW5ndWxhdGluZyBhIHVuaXQgc3F1YXJlLgoiIiIKCmltcG9ydCBudW1weSBhcyBucAo8fGZpbV9ob2xlfD4KZGVmIGhpdChxcSwgc3RhcnQ9NTApOgogICAgIiIiRmluZCB0aGUgcG9pbnQgKGluZGV4KSB3aGVuIGFueSB0d28gZmFjZXMgb2YgdGhlIG9yaWdhbWkgaGl0IGVhY2ggb3RoZXIuIiIiCiAgICAjIEZpcnN0LCBmaW5kIHdoZW4gYW55IHR3byBmYWNlcyB0aGF0IHNoYXJlIGFuIGVkZ2UgaGF2ZSBhbiBpbnRlcnNlY3Rpb24uCiAgICBhYSA9IG5wLmFwcGx5X2Fsb25nX2F4aXMoYW5nbGVzLCAxLCBxcSkKICAgIHNpZ24gPSBucC5hcnJheShbbnAuc2lnbihhYVtzdGFydF0pICogYSBmb3IgYSBpbiBhYV0pCgogICAgdHJ5OgogICAgICAgIHN3aXRjaCA9IG5wLndoZXJlKHNpZ24gPCAwKVswXVswXQogICAgZXhjZXB0IEluZGV4RXJyb3IgYXMgZToKICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkFuZ2xlIHNpZ25zIHVuY2hhbmdlZC4gIEluY3JlYXNlICdtYXhfc3RlcHMnLiIpCgogICAgIyBOb3csIGxvb2sgYXQgZmFjZXMgdGhhdCBzaGFyZSBhIHZlcnRleCBhbmQgZmFjZXMgdGhhdCBzaGFyZSBub3RoaW5nLgogICAgZmFjZWludGVyID0gbGFtYmRhIEEsIEI6IHRyaWludGVyKEEsIEIsIEZhbHNlKVswXQogICAgZm9yIGksIHEgaW4gZW51bWVyYXRlKHFxW3N0YXJ0Ol0pOgogICAgICAgIGlmICgKICAgICAgICAgICAgIyBGYWNlcyB0aGF0IHNoYXJlIGEgdmVydGV4LgogICAgICAgICAgICBmYWNlaW50ZXIoW1txWzEwXSwgcVsxMV0sIDBdLCBbMCwgMCwgMF0sIFtxWzBdLCAwLCAwXV0sCiAgICAgICAgICAgICAgICAgICAgICBbW3FbMTBdLCBxWzExXSwgMF0sIFtxWzFdLCBxWzJdLCBxWzNdXSwgW3FbN10sIHFbOF0sIHFbOV1dXSkKICAgICAgICAgICAgb3IgZmFjZWludGVyKFtbMCwgMCwgMF0sIFtxWzBdLCAwLCAwXSwgW3FbMTBdLCBxWzExXSwgMF1dLAogICAgICAgICAgICAgICAgICAgICAgICAgW1swLCAwLCAwXSwgW3FbN10sIHFbOF0sIHFbOV1dLCBbcVs0XSwgcVs1XSwgcVs2XV1dKQogICAgICAgICAgICBvciBmYWNlaW50ZXIoW1txWzFdLCBxWzJdLCBxWzNdXSwgW3FbMTBdLCBxWzExXSwgMF0sIFtxWzBdLCAwLCAwXV0sCiAgICAgICAgICAgICAgICAgICAgICAgICBbW3FbMV0sIHFbMl0sIHFbM11dLCBbcVs0XSwgcVs1XSwgcVs2XV0sIFtxWzddLCBxWzhdLCBxWzldXV0pCiAgICAgICAgICAgIG9yIGZhY2VpbnRlcihbW3FbMTBdLCBxWzExXSwgMF0sIFtxWzBdLCAwLCAwXSwgW3FbMV0sIHFbMl0sIHFbM11dXSwKICAgICAgICAgICAgICAgICAgICAgICAgIFtbcVsxMF0sIHFbMTFdLCAwXSwgW3FbN10sIHFbOF0sIHFbOV1dLCBbMCwgMCwgMF1dKQogICAgICAgICAgICBvciBmYWNlaW50ZXIoW1txWzddLCBxWzhdLCBxWzldXSwgW3FbMTBdLCBxWzExXSwgMF0sIFtxWzFdLCBxWzJdLCBxWzNdXV0sCiAgICAgICAgICAgICAgICAgICAgICAgICBbW3FbN10sIHFbOF0sIHFbOV1dLCBbcVs0XSwgcVs1XSwgcVs2XV0sIFswLCAwLCAwXV0pCiAgICAgICAgICAgIG9yIGZhY2VpbnRlcihbW3FbN10sIHFbOF0sIHFbOV1dLCBbcVsxXSwgcVsyXSwgcVszXV0sIFtxWzRdLCBxWzVdLCBxWzZdXV0sCiAgICAgICAgICAgICAgICAgICAgICAgICBbW3FbN10sIHFbOF0sIHFbOV1dLCBbMCwgMCwgMF0sIFtxWzEwXSwgcVsxMV0sIDBdXSkKCiAgICAgICAgICAgICMgRmFjZXMgdGhhdCBzaGFyZSBub3RoaW5nLgogICAgICAgICAgICBvciBmYWNlaW50ZXIoW1swLCAwLCAwXSwgW3FbMF0sIDAsIDBdLCBbcVsxMF0sIHFbMTFdLCAwXV0sCiAgICAgICAgICAgICAgICAgICAgICAgICBbW3FbMV0sIHFbMl0sIHFbM11dLCBbcVs0XSwgcVs1XSwgcVs2XV0sIFtxWzddLCBxWzhdLCBxWzldXV0pCiAgICAgICAgICAgIG9yIGZhY2VpbnRlcihbW3FbMF0sIDAsIDBdLCBbcVsxXSwgcVsyXSwgcVszXV0sIFtxWzEwXSwgcVsxMV0sIDBdXSwKICAgICAgICAgICAgICAgICAgICAgICAgIFtbMCwgMCwgMF0sIFtxWzddLCBxWzhdLCBxWzldXSwgW3FbNF0sIHFbNV0sIHFbNl1dXSkKICAgICAgICApOgogICAgICAgICAgICBicmVhawoKICAgIHJldHVybiBtaW4oc3RhcnQgKyBpLCBzd2l0Y2gpCgpkZWYgbWV0cmljKHAsIHFxKToKICAgICIiIlNxdWFyZS1yb290IG9mIHRoZSBtZXRyaWMgdGVuc29yLiIiIgogICAgZHQgPSBucC5hcHBseV9hbG9uZ19heGlzKG5wLmxpbmFsZy5ub3JtLCAxLCBucC5kaWZmKHFxLCBheGlzPTApKQogICAgZHAgPSBucC5kaWZmKHApCiAgICByZXR1cm4gZHQgLyBkcAoKIyBUaGUgdmFsdWVzIGZvbGxvdyB0aGUgY29udmVudGlvbiAodGFuZ2VudCwgbWF4X2FuZ2xlLCBtYXhfc3RlcHMpLgojICd0YW5nZW50JyBpcyB0aGUgdGFuZ2VudCB0byB0aGUgcG9zaXRpdmUgYnJhbmNoIChpLmUuLCBvbmUgd2hlcmUgZm9sZCBhbmdsZQojIDUtNiBpcyBhbHdheXMgcG9zaXRpdmUpLiAgJ21heF9hbmdsZScgaXMgdGhlIG1heGltdW0gcG9zc2libGUgYW5nbGUgYmVmb3JlCiMgdHdvIGZhY2VzIGhpdCBlYWNoIG90aGVyLiAgJ21heF9zdGVwcycgaXMgYSBudW1iZXIgc2xpZ2h0ZXIgbGFyZ2VyIHRoYW4gdGhlCiMgb25lIHJlcXVpcmVkIHRvIGFjaGlldmUgbWF4X2FuZ2xlIHdoZW4gcGFyYW1ldGVyaXppbmcgaW4gYXJjIGxlbmd0aC4KQlJBTkNIRVMgPSB7CiAgICAiYnJhbmNoMSI6IChiMSwgNTkuOSwgMzIwMCksCiAgICAiYnJhbmNoMiI6IChiMiwgMTE2LjksIDI1MDApLAogICAgImJyYW5jaDMiOiAoYjMsIDExNi45LCAxODAwKSwKICAgICJicmFuY2g0IjogKGI0LCAxNzkuOSwgMTYwMCksCn0KCmJwID0gQnJhbmNoUGFyYW0oZiwgamFjKQoKb3MubWFrZWRpcnMoIi4vYnJhbmNoZXMvYXJjLyIsIGV4aXN0X29rPVRydWUpCm9zLm1ha2VkaXJzKCIuL2JyYW5jaGVzL2ZvbGRfNS02IiwgZXhpc3Rfb2s9VHJ1ZSkKb3MuY2hkaXIoIi4vYnJhbmNoZXMiKQoKZm9yIG5hbWUsIGluZm8gaW4gQlJBTkNIRVMuaXRlbXMoKToKICAgIHFkb3QwLCBtYXhfYW5nbGUsIG1heF9zdGVwcyA9IGluZm8KCiAgICBxcSA9IGJwLmFyY3BhcihxMD1mbGF0LCBxZG90MD1xZG90MCwgbWF4X3N0ZXBzPW1heF9zdGVwcykKICAgIGggPSBoaXQocXEpCiAgICBucC5zYXZldHh0KCJhcmMve31wLmRhdCIuZm9ybWF0KG5hbWUpLCBxcVs6aF0pCiAgICBucC5zYXZldHh0KCJhcmMve31wX2FuZ2xlcy5kYXQiLmZvcm1hdChuYW1lKSwgbnAuYXBwbHlfYWxvbmdfYXhpcyhhbmdsZXMsIDEsIHFxWzpoXSkpCiAgICBwcmludCgicG9zaXRpdmUge30gaW4gYXJjIGxlbmd0aCBkb25lISIuZm9ybWF0KG5hbWUpKQoKICAgIHBvaW50cyA9IG5wLmxpbnNwYWNlKDAsIG1heF9hbmdsZSwgaW50KG1heF9hbmdsZSAqIDEwMDApKQogICAgcCwgcXEgPSBicC5mdW5wYXIocTA9ZmxhdCwgcWRvdDA9cWRvdDAsIHBhcj1sYW1iZGEgcTogYW5nbGVzKHEsIDMpLCBwb2ludHM9cG9pbnRzLCBhcmNfc3RlcHM9aCkKICAgIGcsIHAsIHFxID0gbWV0cmljKHAsIHFxKSwgcFs6LTFdLCBxcVs6LTFdCiAgICBucC5zYXZldHh0KAogICAgICAgICJmb2xkXzUtNi97fXAuZGF0Ii5mb3JtYXQobmFtZSksCiAgICAgICAgbnAuaHN0YWNrKFtwWzosIG5wLm5ld2F4aXNdLCBnWzosIG5wLm5ld2F4aXNdLCBxcV0pLAogICAgKQogICAgcHJpbnQoInBvc2l0aXZlIHt9IGluIGFuZ2xlIG9mIGZvbGQgNS02IGRvbmUhIi5mb3JtYXQobmFtZSkpCgogICAgcXEgPSBicC5hcmNwYXIocTA9ZmxhdCwgcWRvdDA9LXFkb3QwLCBtYXhfc3RlcHM9bWF4X3N0ZXBzKQogICAgaCA9IGhpdChxcSkKICAgIG5wLnNhdmV0eHQoImFyYy97fW4uZGF0Ii5mb3JtYXQobmFtZSksIHFxWzpoXSkKICAgIG5wLnNhdmV0eHQoImFyYy97fW5fYW5nbGVzLmRhdCIuZm9ybWF0KG5hbWUpLCBucC5hcHBseV9hbG9uZ19heGlzKGFuZ2xlcywgMSwgcXFbOmhdKSkKICAgIHByaW50KCJuZWdhdGl2ZSB7fSBpbiBhcmMgbGVuZ3RoIGRvbmUhIi5mb3JtYXQobmFtZSkpCgogICAgcG9pbnRzID0gbnAubGluc3BhY2UoLW1heF9hbmdsZSwgMCwgaW50KG1heF9hbmdsZSAqIDEwMDApKQogICAgcCwgcXEgPSBicC5mdW5wYXIocTA9ZmxhdCwgcWRvdDA9LXFkb3QwLCBwYXI9bGFtYmRhIHE6IGFuZ2xlcyhxLCAzKSwgcG9pbnRzPXBvaW50cywgYXJjX3N0ZXBzPWgpCiAgICBnLCBwLCBxcSA9IG1ldHJpYyhwLCBxcSksIHBbOi0xXSwgcXFbOi0xXQogICAgbnAuc2F2ZXR4dCgKICAgICAgICAiZm9sZF81LTYve31uLmRhdCIuZm9ybWF0KG5hbWUpLAogICAgICAgIG5wLmhzdGFjayhbcFs6LCBucC5uZXdheGlzXSwgZ1s6LCBucC5uZXdheGlzXSwgcXFdKSwKICAgICkKICAgIHByaW50KCJuZWdhdGl2ZSB7fSBpbiBhbmdsZSBvZiBmb2xkIDUtNiBkb25lISIuZm9ybWF0KG5hbWUpKQo8fGZpbV9zdWZmaXh8PgppbXBvcnQgb3MKZnJvbSBvcmlnYW1pIGltcG9ydCAqCmZyb20gdXRpbHMgaW1wb3J0ICoKCjx8ZmltX2VuZHw+"]
["b34f6def702e6383b4d2e41382a57a09682d432a-1","b34f6def702e6383b4d2e41382a57a09682d432a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVybGxpYjIKCgpjbGFzcyBCaWJSZWNvcmQoKToKICAgIF9hY2Nlc3NfdG9rZW4gPSBOb25lCiAgICBfd3NrZXkgPSBOb25lCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFjY2Vzc190b2tlbiwgd3NrZXkpOgogICAgICAgIHNlbGYuX2FjY2Vzc190b2tlbiA9IGFjY2Vzc190b2tlbgogICAgICAgIHNlbGYuX3dza2V5ID0gd3NrZXkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiByZWFkKHNlbGYpOgogICAgICAgICIiIlVzZSBhbiBBY2Nlc3MgVG9rZW4ncyBVc2VyIFBhcmFtZXRlciB0byByZXF1ZXN0IGEgQmlibGlvZ3JhcGhpYyBSZWNvcmQiIiIKICAgICAgICByZXF1ZXN0X3VybCA9ICgKICAgICAgICAgICAgJ2h0dHBzOi8vd29ybGRjYXQub3JnL2JpYi9kYXRhLzgyMzUyMDU1Mz8nICsKPHxmaW1fZW5kfD4="]
["b34f6def702e6383b4d2e41382a57a09682d432a-2","b34f6def702e6383b4d2e41382a57a09682d432a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVybGxpYjIKCgpjbGFzcyBCaWJSZWNvcmQoKToKICAgIF9hY2Nlc3NfdG9rZW4gPSBOb25lCiAgICBfd3NrZXkgPSBOb25lCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFjY2Vzc190b2tlbiwgd3NrZXkpOgogICAgICAgIHNlbGYuX2FjY2Vzc190b2tlbiA9IGFjY2Vzc190b2tlbgogICAgICAgIHNlbGYuX3dza2V5ID0gd3NrZXkKCiAgICBkZWYgcmVhZChzZWxmKToKICAgICAgICAiIiJVc2UgYW4gQWNjZXNzIFRva2VuJ3MgVXNlciBQYXJhbWV0ZXIgdG8gcmVxdWVzdCBhIEJpYmxpb2dyYXBoaWMgUmVjb3JkIiIiCiAgICAgICAgcmVxdWVzdF91cmwgPSAoCiAgICAgICAgICAgICdodHRwczovL3dvcmxkY2F0Lm9yZy9iaWIvZGF0YS84MjM1MjA1NTM/JyArCiAgICAgICAgICAgICdjbGFzc2lmaWNhdGlvblNjaGVtZT1MaWJyYXJ5T2ZDb25ncmVzcycgKwogICAgICAgICAgICAnJmhvbGRpbmdMaWJyYXJ5Q29kZT1NQUlOJwogICAgICAgICkKCiAgICAgICAgYXV0aG9yaXphdGlvbl9oZWFkZXIgPSBzZWxmLl93c2tleS5nZXRfaG1hY19zaWduYXR1cmUoCiAgICAgICAgICAgIG1ldGhvZD0nR0VUJywKICAgICAgICAgICAgcmVxdWVzdF91cmw9cmVxdWVzdF91cmwsCiAgICAgICAgICAgIG9wdGlvbnM9eyd1c2VyJzogc2VsZi5fYWNjZXNzX3Rva2VuLnVzZXJ9CiAgICAgICAgKQoKICAgICAgICBteV9yZXF1ZXN0ID0gdXJsbGliMi5SZXF1ZXN0KAogICAgICAgICAgICB1cmw9cmVxdWVzdF91cmwsCiAgICAgICAgICAgIGRhdGE9Tm9uZSwKICAgICAgICAgICAgaGVhZGVycz17J0F1dGhvcml6YXRpb24nOiBhdXRob3JpemF0aW9uX2hlYWRlcn0KICAgICAgICApCgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgeG1sX3Jlc3VsdCA9IHN0cihlKQoKICAgICAgICByZXR1cm4gJycuam9pbihbJzxoMj5CaWJsaW9ncmFwaGljIFJlY29yZDwvaDI+PHByZT4nLCB4bWxfcmVzdWx0LnJlcGxhY2UoJzwnLCAnJmx0OycpLCAnPC9wcmU+J10pCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgdHJ5OgogICAgICAgICAgICB4bWxfcmVzdWx0ID0gdXJsbGliMi51cmxvcGVuKG15X3JlcXVlc3QpLnJlYWQoKQoKICAgICAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3IsIGU6Cjx8ZmltX2VuZHw+"]
["b34f6def702e6383b4d2e41382a57a09682d432a-3","b34f6def702e6383b4d2e41382a57a09682d432a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVybGxpYjIKCgpjbGFzcyBCaWJSZWNvcmQoKToKICAgIF9hY2Nlc3NfdG9rZW4gPSBOb25lCiAgICBfd3NrZXkgPSBOb25lCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFjY2Vzc190b2tlbiwgd3NrZXkpOgogICAgICAgIHNlbGYuX2FjY2Vzc190b2tlbiA9IGFjY2Vzc190b2tlbgogICAgICAgIHNlbGYuX3dza2V5ID0gd3NrZXkKCiAgICBkZWYgcmVhZChzZWxmKToKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICcmaG9sZGluZ0xpYnJhcnlDb2RlPU1BSU4nCiAgICAgICAgKQoKICAgICAgICBhdXRob3JpemF0aW9uX2hlYWRlciA9IHNlbGYuX3dza2V5LmdldF9obWFjX3NpZ25hdHVyZSgKICAgICAgICAgICAgbWV0aG9kPSdHRVQnLAogICAgICAgICAgICByZXF1ZXN0X3VybD1yZXF1ZXN0X3VybCwKICAgICAgICAgICAgb3B0aW9ucz17J3VzZXInOiBzZWxmLl9hY2Nlc3NfdG9rZW4udXNlcn0KICAgICAgICApCgogICAgICAgIG15X3JlcXVlc3QgPSB1cmxsaWIyLlJlcXVlc3QoCiAgICAgICAgICAgIHVybD1yZXF1ZXN0X3VybCwKICAgICAgICAgICAgZGF0YT1Ob25lLAogICAgICAgICAgICBoZWFkZXJzPXsnQXV0aG9yaXphdGlvbic6IGF1dGhvcml6YXRpb25faGVhZGVyfQogICAgICAgICkKCiAgICAgICAgdHJ5OgogICAgICAgICAgICB4bWxfcmVzdWx0ID0gdXJsbGliMi51cmxvcGVuKG15X3JlcXVlc3QpLnJlYWQoKQoKICAgICAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3IsIGU6CiAgICAgICAgICAgIHhtbF9yZXN1bHQgPSBzdHIoZSkKCiAgICAgICAgcmV0dXJuICcnLmpvaW4oWyc8aDI+QmlibGlvZ3JhcGhpYyBSZWNvcmQ8L2gyPjxwcmU+JywgeG1sX3Jlc3VsdC5yZXBsYWNlKCc8JywgJyZsdDsnKSwgJzwvcHJlPiddKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICIiIlVzZSBhbiBBY2Nlc3MgVG9rZW4ncyBVc2VyIFBhcmFtZXRlciB0byByZXF1ZXN0IGEgQmlibGlvZ3JhcGhpYyBSZWNvcmQiIiIKICAgICAgICByZXF1ZXN0X3VybCA9ICgKICAgICAgICAgICAgJ2h0dHBzOi8vd29ybGRjYXQub3JnL2JpYi9kYXRhLzgyMzUyMDU1Mz8nICsKICAgICAgICAgICAgJ2NsYXNzaWZpY2F0aW9uU2NoZW1lPUxpYnJhcnlPZkNvbmdyZXNzJyArCjx8ZmltX2VuZHw+"]
["b332d42fc2880896ec4ae6f4494f62b7f9528807-1","b332d42fc2880896ec4ae6f4494f62b7f9528807","PHxmaW1fcHJlZml4fD4KIyBmYXN0U0UKIyBDb3B5cmlnaHQgKEMpIDIwMjIgWmV5dSBNYW8KCmZyb20ga3Z4b3B0IGltcG9ydCBtYXRyaXgsIGtsdQppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBmYXN0c2UuYXNzZW1ibGUgaW1wb3J0IEFDX2phY29iaWFuCiMgSW1wb3J0IGNvcnJlc3BvbmRpbmcgQU9UL0pJVCBmdW5jdGlvbnMKZnJvbSBvcy5wYXRoIGltcG9ydCBkaXJuYW1lLCBhYnNwYXRoCmltcG9ydCBzeXMKaW1wb3J0IHBsYXRmb3JtCmltcG9ydCB3YXJuaW5ncwppbXBvcnQgaW1wb3J0bGliClBZVEhPTl9WRVJTSU9OID0gcGxhdGZvcm0ucHl0aG9uX3ZlcnNpb25fdHVwbGUoKQpzeXMucGF0aC5hcHBlbmQoYWJzcGF0aChkaXJuYW1lKF9fZmlsZV9fKSkpCiMgcHJpbnQoYWJzcGF0aChkaXJuYW1lKF9fZmlsZV9fKSkpCnBjID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoZiJwcmVjb21waWxlM3tQWVRIT05fVkVSU0lPTlsxXX0iKQoKCmRlZiBucnBmKFYsIG5wdiwgbnBxLCBZYnVzLCBTYnVzLCBwdiwgcHEsIHB2cHEsIGJhc2UsIHRvbD1Ob25lKToKICAgIFZhID0gbnAuYW5nbGUoVikKICAgIFZtID0gbnAuYWJzKFYpCiAgICBqMSA9IDAKICAgIGoyID0gbnB2ICAjIyBqMTpqMiAtIFYgYW5nbGUgb2YgcHYgYnVzZXMKICAgIGozID0gajIKICAgIGo0ID0gajIgKyBucHEgICMjIGozOmo0IC0gViBhbmdsZSBvZiBwcSBidXNlcwogICAgajUgPSBqNAogICAgajYgPSBqNCArIG5wcSAgIyMgajU6ajYgLSBWIG1hZyBvZiBwcSBidXNlcwoKICAgICMjIGV2YWx1YXRlIEYoeDApCiAgICBtaXMgPSBWICogbnAuY29uaihZYnVzICogVikgLSBTYnVzCiAgICBub3JtRiwgRiA9IHBjLmNvbXB1dGVfbm9ybWYobWlzW3B2XSwgbWlzW3BxXSwgbWlzW3BxXSkKICAgIGl0ciA9IDAKICAgIGlmIHRvbCBpcyBOb25lOgogICAgICAgIHRvbCA9IDAuMSAvIGJhc2UKCiAgICBDSEVDS19WQVJfTElNSVQgPSBGYWxzZQoKICAgIHdoaWxlIG5vcm1GID4gdG9sIGFuZCBpdHIgPCAxMDoKICAgICAgICBpdHIgKz0gMQogICAgICAgIEogPSBBQ19qYWNvYmlhbihZYnVzLCBWLCBwdnBxLCBwcSwgbnB2LCBucHEpCiAgICAgICAgRiA9IG1hdHJpeChGKQogICAgICAgIGtsdS5saW5zb2x2ZShKLCBGKQogICAgICAgIGR4ID0gLTEgKiBGCiAgICAgICAgZHggPSBucC5hcnJheShkeCkucmF2ZWwoKQogICAgICAgICMjIHVwZGF0ZSB2b2x0YWdlCiAgICAgICAgaWYgbnB2Ogo8fGZpbV9ob2xlfD4KICAgICAgICBpZiBucHE6CiAgICAgICAgICAgIFZhW3BxXSA9IFZhW3BxXSArIGR4W2ozOmo0XQogICAgICAgICAgICBWbVtwcV0gPSBWbVtwcV0gKyBkeFtqNTpqNl0KICAgICAgICBWID0gVm0gKiBucC5leHAoMWogKiBWYSkKICAgICAgICBWbSA9IG5wLmFicyhWKSAgIyMgdXBkYXRlIFZtIGFuZCBWYSBhZ2FpbiBpbiBjYXNlCiAgICAgICAgVmEgPSBucC5hbmdsZShWKSAgIyMgd2Ugd3JhcHBlZCBhcm91bmQgd2l0aCBhIG5lZ2F0aXZlIFZtCiAgICAgICAgbWlzID0gViAqIG5wLmNvbmooWWJ1cyAqIFYpIC0gU2J1cwogICAgICAgIG5vcm1GLCBGID0gcGMuY29tcHV0ZV9ub3JtZihtaXNbcHZdLCBtaXNbcHFdLCBtaXNbcHFdKQoKICAgIFNjYWxjID0gViAqIG5wLmNvbmooWWJ1cyAqIFYpCiAgICByZXR1cm4gVm0sIFZhLCBTY2FsYywgbm9ybUYsIGl0cgoKCmRlZiBwZnNvbG4oU2J1cywgViwgQ2YsIEN0LCBZZiwgWXQsIGJhc2UsIHJhdGVzLCBRZCwgUGQsIHNsYWNrLCBwdik6CiAgICAiIiJVcGRhdGUgYnVzLCBnZW4sIGJyYW5jaCBkYXRhCiAgICAiIiIKICAgIFZmID0gQ2YgKiBWCiAgICBWdCA9IEN0ICogVgogICAgSWYgPSBZZiAqIFYKICAgIEl0ID0gWXQgKiBWCiAgICBTZiA9IFZmICogbnAuY29uaihJZikKICAgIFN0ID0gVnQgKiBucC5jb25qKEl0KQogICAgIyBCcmFuY2ggbG9zc2VzIGluIE1WQQogICAgbG9zc2VzID0gKFNmICsgU3QpICogYmFzZQogICAgIyBicmFuY2ggdm9sdGFnZSBpbmNyZW1lbnQKICAgIFZicmFuY2ggPSBWZiAtIFZ0CgogICAgIyBCcmFuY2ggcG93ZXIgaW4gTVZBCiAgICBTZmIgPSBTZiAqIGJhc2UKICAgIFN0YiA9IFN0ICogYmFzZQoKICAgICMgQnJhbmNoIGxvYWRpbmcgaW4gcC51LgogICAgbG9hZGluZyA9IG5wLmFicyhTZmIpIC8gKHJhdGVzICsgMWUtOSkKCiAgICAjIFVwZGF0ZSBnZW5lcmF0b3IgcmVhY3RpdmUgcG93ZXIgKGluY2x1ZGluZyBzbGFjayBhbmQgcHYpCiAgICBRZyA9IFNidXNbbnAucl9bc2xhY2ssIHB2XV0uaW1hZyAqIGJhc2UgKyBRZFtucC5yX1tzbGFjaywgcHZdXQoKICAgICMgVXBkYXRlIGdlbmVyYXRvciByZWFsIHBvd2VyIGF0IHNsYWNrIGJ1cwogICAgUGdfc2xhY2sgPSBTYnVzW3NsYWNrXS5yZWFsKmJhc2UgKyBQZFtzbGFja10KICAgIHJldHVybiBTZmIsIFN0YiwgSWYsIEl0LCBWYnJhbmNoLCBsb2FkaW5nLCBsb3NzZXMsIFFnLCBQZ19zbGFjawoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBmcm9tIHNjaXB5LnNwYXJzZSBpbXBvcnQgY3NyX21hdHJpeAogICAgaW1wb3J0IHRpbWUKICAgICMgQSA1IGJ1cyBleGFtcGxlIGZyb20gUHJvZi4gT3ZlcmJ5ZSdzIHRleHRib29rCiAgICAjIG5vZGUgaW1wZWRhbmNlCiAgICBZYnVzID0gbnAuYXJyYXkoW1szLjcyOSAtIDQ5LjcyMGosIDAuMDAwICsgMC4wMDBqLCAwLjAwMCArIDAuMDAwaiwKICAgICAgICAgICAgICAgICAgICAgIDAuMDAwICsgMC4wMDBqLCAtMy43MjkgKyA0OS43MjBqXSwKICAgICAgICAgICAgICAgICAgICAgWzAuMDAwICsgMC4wMDBqLCAyLjY3OCAtIDI4LjQ1OWosIDAuMDAwICsgMC4wMDBqLAogICAgICAgICAgICAgICAgICAgICAgLTAuODkzICsgOS45MjBqLCAtMS43ODYgKyAxOS44MzlqXSwKICAgICAgICAgICAgICAgICAgICAgWzAuMDAwICsgMC4wMDBqLCAwLjAwMCArIDAuMDAwaiwgNy40NTggLSA5OS40NDFqLAogICAgICAgICAgICAgICAgICAgICAgLTcuNDU4ICsgOTkuNDQxaiwgMC4wMDAgKyAwLjAwMGpdLAogICAgICAgICAgICAgICAgICAgICBbMC4wMDAgKyAwLjAwMGosIC0wLjg5MyArIDkuOTIwaiwgLTcuNDU4ICsgOTkuNDQxaiwKICAgICAgICAgICAgICAgICAgICAgIDExLjkyMiAtIDE0Ny45NTlqLCAtMy41NzEgKyAzOS42NzlqXSwKICAgICAgICAgICAgICAgICAgICAgWy0zLjcyOSArIDQ5LjcyMGosIC0xLjc4NiArIDE5LjgzOWosIDAuMDAwICsgMC4wMDBqLAogICAgICAgICAgICAgICAgICAgICAgLTMuNTcxICsgMzkuNjc5aiwgOS4wODYgLSAxMDguNTc4al1dKQogICAgWWJ1cyA9IGNzcl9tYXRyaXgoWWJ1cykKICAgIFNidXMgPSBucC5hcnJheShbIDMuOTQ4KzAuMDAwaiwgLTguMDAwLTIuODAwaiwgIDQuNDAwKzUuMjIxaiwgIDAuMDAwKzAuMDAwaiwKICAgICAgICAwLjAwMCswLjAwMGpdKQogICAgViA9IG5wLmFycmF5KFsxLjAwMCswLjAwMGosIDEuMDAwKzAuMDAwaiwgMS4wNTArMC4wMDBqLCAxLjAwMCswLjAwMGosCiAgICAgICAxLjAwMCswLjAwMGpdKQogICAgcHYgPSBucC5hcnJheShbMl0pCiAgICBwcSA9IG5wLmFycmF5KFsxLCAzLCA0XSkKICAgIHB2cHEgPSBucC5hcnJheShbMiwgMSwgMywgNF0pCiAgICBiYXNlID0gbnAuYXJyYXkoWzEwMC4wMDBdKQogICAgbnB2ID0gbGVuKHB2KQogICAgbnBxID0gbGVuKHBxKQogICAgc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgbnJwZihWLCBucHYsIG5wcSwgWWJ1cywgU2J1cywgcHYsIHBxLCBwdnBxLCBiYXNlKQogICAgcHJpbnQodGltZS50aW1lKCktc3RhcnQpCgogICAgc3RhcnQgPSB0aW1lLnRpbWVfbnMoKQogICAgVm0sIF8sIF8sIF8sIF8gPSBucnBmKFYsIG5wdiwgbnBxLCBZYnVzLCBTYnVzLCBwdiwgcHEsIHB2cHEsIGJhc2UpCiAgICBwcmludCgnRXhlY3V0aW9uIHRpbWU6JywgdGltZS50aW1lX25zKCktc3RhcnQsICdWbTonLCBWbSkKCgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgVmFbcHZdID0gVmFbcHZdICsgZHhbajE6ajJdCjx8ZmltX2VuZHw+"]
["b332d42fc2880896ec4ae6f4494f62b7f9528807-2","b332d42fc2880896ec4ae6f4494f62b7f9528807","PHxmaW1fcHJlZml4fD4KIyBmYXN0U0UKIyBDb3B5cmlnaHQgKEMpIDIwMjIgWmV5dSBNYW8KCmZyb20ga3Z4b3B0IGltcG9ydCBtYXRyaXgsIGtsdQppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBmYXN0c2UuYXNzZW1ibGUgaW1wb3J0IEFDX2phY29iaWFuCiMgSW1wb3J0IGNvcnJlc3BvbmRpbmcgQU9UL0pJVCBmdW5jdGlvbnMKZnJvbSBvcy5wYXRoIGltcG9ydCBkaXJuYW1lLCBhYnNwYXRoCmltcG9ydCBzeXMKaW1wb3J0IHBsYXRmb3JtCmltcG9ydCB3YXJuaW5ncwppbXBvcnQgaW1wb3J0bGliClBZVEhPTl9WRVJTSU9OID0gcGxhdGZvcm0ucHl0aG9uX3ZlcnNpb25fdHVwbGUoKQpzeXMucGF0aC5hcHBlbmQoYWJzcGF0aChkaXJuYW1lKF9fZmlsZV9fKSkpCiMgcHJpbnQoYWJzcGF0aChkaXJuYW1lKF9fZmlsZV9fKSkpCnBjID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoZiJwcmVjb21waWxlM3tQWVRIT05fVkVSU0lPTlsxXX0iKQoKCmRlZiBucnBmKFYsIG5wdiwgbnBxLCBZYnVzLCBTYnVzLCBwdiwgcHEsIHB2cHEsIGJhc2UsIHRvbD1Ob25lKToKICAgIFZhID0gbnAuYW5nbGUoVikKICAgIFZtID0gbnAuYWJzKFYpCiAgICBqMSA9IDAKICAgIGoyID0gbnB2ICAjIyBqMTpqMiAtIFYgYW5nbGUgb2YgcHYgYnVzZXMKICAgIGozID0gajIKICAgIGo0ID0gajIgKyBucHEgICMjIGozOmo0IC0gViBhbmdsZSBvZiBwcSBidXNlcwogICAgajUgPSBqNAogICAgajYgPSBqNCArIG5wcSAgIyMgajU6ajYgLSBWIG1hZyBvZiBwcSBidXNlcwoKICAgICMjIGV2YWx1YXRlIEYoeDApCiAgICBtaXMgPSBWICogbnAuY29uaihZYnVzICogVikgLSBTYnVzCiAgICBub3JtRiwgRiA9IHBjLmNvbXB1dGVfbm9ybWYobWlzW3B2XSwgbWlzW3BxXSwgbWlzW3BxXSkKICAgIGl0ciA9IDAKICAgIGlmIHRvbCBpcyBOb25lOgogICAgICAgIHRvbCA9IDAuMSAvIGJhc2UKCiAgICBDSEVDS19WQVJfTElNSVQgPSBGYWxzZQoKICAgIHdoaWxlIG5vcm1GID4gdG9sIGFuZCBpdHIgPCAxMDoKICAgICAgICBpdHIgKz0gMQogICAgICAgIEogPSBBQ19qYWNvYmlhbihZYnVzLCBWLCBwdnBxLCBwcSwgbnB2LCBucHEpCiAgICAgICAgRiA9IG1hdHJpeChGKQogICAgICAgIGtsdS5saW5zb2x2ZShKLCBGKQogICAgICAgIGR4ID0gLTEgKiBGCiAgICAgICAgZHggPSBucC5hcnJheShkeCkucmF2ZWwoKQogICAgICAgICMjIHVwZGF0ZSB2b2x0YWdlCiAgICAgICAgaWYgbnB2OgogICAgICAgICAgICBWYVtwdl0gPSBWYVtwdl0gKyBkeFtqMTpqMl0KICAgICAgICBpZiBucHE6CiAgICAgICAgICAgIFZhW3BxXSA9IFZhW3BxXSArIGR4W2ozOmo0XQogICAgICAgICAgICBWbVtwcV0gPSBWbVtwcV0gKyBkeFtqNTpqNl0KICAgICAgICBWID0gVm0gKiBucC5leHAoMWogKiBWYSkKICAgICAgICBWbSA9IG5wLmFicyhWKSAgIyMgdXBkYXRlIFZtIGFuZCBWYSBhZ2FpbiBpbiBjYXNlCiAgICAgICAgVmEgPSBucC5hbmdsZShWKSAgIyMgd2Ugd3JhcHBlZCBhcm91bmQgd2l0aCBhIG5lZ2F0aXZlIFZtCiAgICAgICAgbWlzID0gViAqIG5wLmNvbmooWWJ1cyAqIFYpIC0gU2J1cwogICAgICAgIG5vcm1GLCBGID0gcGMuY29tcHV0ZV9ub3JtZihtaXNbcHZdLCBtaXNbcHFdLCBtaXNbcHFdKQoKICAgIFNjYWxjID0gViAqIG5wLmNvbmooWWJ1cyAqIFYpCiAgICByZXR1cm4gVm0sIFZhLCBTY2FsYywgbm9ybUYsIGl0cgoKCmRlZiBwZnNvbG4oU2J1cywgViwgQ2YsIEN0LCBZZiwgWXQsIGJhc2UsIHJhdGVzLCBRZCwgUGQsIHNsYWNrLCBwdik6CiAgICAiIiJVcGRhdGUgYnVzLCBnZW4sIGJyYW5jaCBkYXRhCiAgICAiIiIKICAgIFZmID0gQ2YgKiBWCiAgICBWdCA9IEN0ICogVgogICAgSWYgPSBZZiAqIFYKICAgIEl0ID0gWXQgKiBWCiAgICBTZiA9IFZmICogbnAuY29uaihJZikKICAgIFN0ID0gVnQgKiBucC5jb25qKEl0KQogICAgIyBCcmFuY2ggbG9zc2VzIGluIE1WQQogICAgbG9zc2VzID0gKFNmICsgU3QpICogYmFzZQogICAgIyBicmFuY2ggdm9sdGFnZSBpbmNyZW1lbnQKICAgIFZicmFuY2ggPSBWZiAtIFZ0CgogICAgIyBCcmFuY2ggcG93ZXIgaW4gTVZBCiAgICBTZmIgPSBTZiAqIGJhc2UKICAgIFN0YiA9IFN0ICogYmFzZQoKICAgICMgQnJhbmNoIGxvYWRpbmcgaW4gcC51LgogICAgbG9hZGluZyA9IG5wLmFicyhTZmIpIC8gKHJhdGVzICsgMWUtOSkKCiAgICAjIFVwZGF0ZSBnZW5lcmF0b3IgcmVhY3RpdmUgcG93ZXIgKGluY2x1ZGluZyBzbGFjayBhbmQgcHYpCiAgICBRZyA9IFNidXNbbnAucl9bc2xhY2ssIHB2XV0uaW1hZyAqIGJhc2UgKyBRZFtucC5yX1tzbGFjaywgcHZdXQoKICAgICMgVXBkYXRlIGdlbmVyYXRvciByZWFsIHBvd2VyIGF0IHNsYWNrIGJ1cwogICAgUGdfc2xhY2sgPSBTYnVzW3NsYWNrXS5yZWFsKmJhc2UgKyBQZFtzbGFja10KICAgIHJldHVybiBTZmIsIFN0YiwgSWYsIEl0LCBWYnJhbmNoLCBsb2FkaW5nLCBsb3NzZXMsIFFnLCBQZ19zbGFjawoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBmcm9tIHNjaXB5LnNwYXJzZSBpbXBvcnQgY3NyX21hdHJpeAogICAgaW1wb3J0IHRpbWUKICAgICMgQSA1IGJ1cyBleGFtcGxlIGZyb20gUHJvZi4gT3ZlcmJ5ZSdzIHRleHRib29rCiAgICAjIG5vZGUgaW1wZWRhbmNlCiAgICBZYnVzID0gbnAuYXJyYXkoW1szLjcyOSAtIDQ5LjcyMGosIDAuMDAwICsgMC4wMDBqLCAwLjAwMCArIDAuMDAwaiwKICAgICAgICAgICAgICAgICAgICAgIDAuMDAwICsgMC4wMDBqLCAtMy43MjkgKyA0OS43MjBqXSwKICAgICAgICAgICAgICAgICAgICAgWzAuMDAwICsgMC4wMDBqLCAyLjY3OCAtIDI4LjQ1OWosIDAuMDAwICsgMC4wMDBqLAogICAgICAgICAgICAgICAgICAgICAgLTAuODkzICsgOS45MjBqLCAtMS43ODYgKyAxOS44MzlqXSwKICAgICAgICAgICAgICAgICAgICAgWzAuMDAwICsgMC4wMDBqLCAwLjAwMCArIDAuMDAwaiwgNy40NTggLSA5OS40NDFqLAogICAgICAgICAgICAgICAgICAgICAgLTcuNDU4ICsgOTkuNDQxaiwgMC4wMDAgKyAwLjAwMGpdLAogICAgICAgICAgICAgICAgICAgICBbMC4wMDAgKyAwLjAwMGosIC0wLjg5MyArIDkuOTIwaiwgLTcuNDU4ICsgOTkuNDQxaiwKICAgICAgICAgICAgICAgICAgICAgIDExLjkyMiAtIDE0Ny45NTlqLCAtMy41NzEgKyAzOS42NzlqXSwKICAgICAgICAgICAgICAgICAgICAgWy0zLjcyOSArIDQ5LjcyMGosIC0xLjc4NiArIDE5LjgzOWosIDAuMDAwICsgMC4wMDBqLAogICAgICAgICAgICAgICAgICAgICAgLTMuNTcxICsgMzkuNjc5aiwgOS4wODYgLSAxMDguNTc4al1dKQogICAgWWJ1cyA9IGNzcl9tYXRyaXgoWWJ1cykKICAgIFNidXMgPSBucC5hcnJheShbIDMuOTQ4KzAuMDAwaiwgLTguMDAwLTIuODAwaiwgIDQuNDAwKzUuMjIxaiwgIDAuMDAwKzAuMDAwaiwKICAgICAgICAwLjAwMCswLjAwMGpdKQogICAgViA9IG5wLmFycmF5KFsxLjAwMCswLjAwMGosIDEuMDAwKzAuMDAwaiwgMS4wNTArMC4wMDBqLCAxLjAwMCswLjAwMGosCiAgICAgICAxLjAwMCswLjAwMGpdKQogICAgcHYgPSBucC5hcnJheShbMl0pCiAgICBwcSA9IG5wLmFycmF5KFsxLCAzLCA0XSkKICAgIHB2cHEgPSBucC5hcnJheShbMiwgMSwgMywgNF0pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGJhc2UgPSBucC5hcnJheShbMTAwLjAwMF0pCiAgICBucHYgPSBsZW4ocHYpCiAgICBucHEgPSBsZW4ocHEpCiAgICBzdGFydCA9IHRpbWUudGltZSgpCjx8ZmltX2VuZHw+"]
["b332d42fc2880896ec4ae6f4494f62b7f9528807-3","b332d42fc2880896ec4ae6f4494f62b7f9528807","PHxmaW1fcHJlZml4fD4KIyBmYXN0U0UKIyBDb3B5cmlnaHQgKEMpIDIwMjIgWmV5dSBNYW8KCmZyb20ga3Z4b3B0IGltcG9ydCBtYXRyaXgsIGtsdQppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBmYXN0c2UuYXNzZW1ibGUgaW1wb3J0IEFDX2phY29iaWFuCiMgSW1wb3J0IGNvcnJlc3BvbmRpbmcgQU9UL0pJVCBmdW5jdGlvbnMKZnJvbSBvcy5wYXRoIGltcG9ydCBkaXJuYW1lLCBhYnNwYXRoCmltcG9ydCBzeXMKaW1wb3J0IHBsYXRmb3JtCmltcG9ydCB3YXJuaW5ncwppbXBvcnQgaW1wb3J0bGliClBZVEhPTl9WRVJTSU9OID0gcGxhdGZvcm0ucHl0aG9uX3ZlcnNpb25fdHVwbGUoKQpzeXMucGF0aC5hcHBlbmQoYWJzcGF0aChkaXJuYW1lKF9fZmlsZV9fKSkpCiMgcHJpbnQoYWJzcGF0aChkaXJuYW1lKF9fZmlsZV9fKSkpCnBjID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoZiJwcmVjb21waWxlM3tQWVRIT05fVkVSU0lPTlsxXX0iKQoKCmRlZiBucnBmKFYsIG5wdiwgbnBxLCBZYnVzLCBTYnVzLCBwdiwgcHEsIHB2cHEsIGJhc2UsIHRvbD1Ob25lKToKICAgIFZhID0gbnAuYW5nbGUoVikKICAgIFZtID0gbnAuYWJzKFYpCiAgICBqMSA9IDAKICAgIGoyID0gbnB2ICAjIyBqMTpqMiAtIFYgYW5nbGUgb2YgcHYgYnVzZXMKICAgIGozID0gajIKICAgIGo0ID0gajIgKyBucHEgICMjIGozOmo0IC0gViBhbmdsZSBvZiBwcSBidXNlcwogICAgajUgPSBqNAogICAgajYgPSBqNCArIG5wcSAgIyMgajU6ajYgLSBWIG1hZyBvZiBwcSBidXNlcwoKICAgICMjIGV2YWx1YXRlIEYoeDApCiAgICBtaXMgPSBWICogbnAuY29uaihZYnVzICogVikgLSBTYnVzCiAgICBub3JtRiwgRiA9IHBjLmNvbXB1dGVfbm9ybWYobWlzW3B2XSwgbWlzW3BxXSwgbWlzW3BxXSkKICAgIGl0ciA9IDAKICAgIGlmIHRvbCBpcyBOb25lOgogICAgICAgIHRvbCA9IDAuMSAvIGJhc2UKCiAgICBDSEVDS19WQVJfTElNSVQgPSBGYWxzZQoKICAgIHdoaWxlIG5vcm1GID4gdG9sIGFuZCBpdHIgPCAxMDoKICAgICAgICBpdHIgKz0gMQogICAgICAgIEogPSBBQ19qYWNvYmlhbihZYnVzLCBWLCBwdnBxLCBwcSwgbnB2LCBucHEpCiAgICAgICAgRiA9IG1hdHJpeChGKQogICAgICAgIGtsdS5saW5zb2x2ZShKLCBGKQogICAgICAgIGR4ID0gLTEgKiBGCiAgICAgICAgZHggPSBucC5hcnJheShkeCkucmF2ZWwoKQogICAgICAgICMjIHVwZGF0ZSB2b2x0YWdlCiAgICAgICAgaWYgbnB2OgogICAgICAgICAgICBWYVtwdl0gPSBWYVtwdl0gKyBkeFtqMTpqMl0KICAgICAgICBpZiBucHE6CiAgICAgICAgICAgIFZhW3BxXSA9IFZhW3BxXSArIGR4W2ozOmo0XQogICAgICAgICAgICBWbVtwcV0gPSBWbVtwcV0gKyBkeFtqNTpqNl0KICAgICAgICBWID0gVm0gKiBucC5leHAoMWogKiBWYSkKICAgICAgICBWbSA9IG5wLmFicyhWKSAgIyMgdXBkYXRlIFZtIGFuZCBWYSBhZ2FpbiBpbiBjYXNlCiAgICAgICAgVmEgPSBucC5hbmdsZShWKSAgIyMgd2Ugd3JhcHBlZCBhcm91bmQgd2l0aCBhIG5lZ2F0aXZlIFZtCiAgICAgICAgbWlzID0gViAqIG5wLmNvbmooWWJ1cyAqIFYpIC0gU2J1cwogICAgICAgIG5vcm1GLCBGID0gcGMuY29tcHV0ZV9ub3JtZihtaXNbcHZdLCBtaXNbcHFdLCBtaXNbcHFdKQoKICAgIFNjYWxjID0gViAqIG5wLmNvbmooWWJ1cyAqIFYpCiAgICByZXR1cm4gVm0sIFZhLCBTY2FsYywgbm9ybUYsIGl0cgoKCmRlZiBwZnNvbG4oU2J1cywgViwgQ2YsIEN0LCBZZiwgWXQsIGJhc2UsIHJhdGVzLCBRZCwgUGQsIHNsYWNrLCBwdik6CiAgICAiIiJVcGRhdGUgYnVzLCBnZW4sIGJyYW5jaCBkYXRhCiAgICAiIiIKICAgIFZmID0gQ2YgKiBWCiAgICBWdCA9IEN0ICogVgogICAgSWYgPSBZZiAqIFYKICAgIEl0ID0gWXQgKiBWCiAgICBTZiA9IFZmICogbnAuY29uaihJZikKICAgIFN0ID0gVnQgKiBucC5jb25qKEl0KQogICAgIyBCcmFuY2ggbG9zc2VzIGluIE1WQQogICAgbG9zc2VzID0gKFNmICsgU3QpICogYmFzZQogICAgIyBicmFuY2ggdm9sdGFnZSBpbmNyZW1lbnQKICAgIFZicmFuY2ggPSBWZiAtIFZ0CgogICAgIyBCcmFuY2ggcG93ZXIgaW4gTVZBCiAgICBTZmIgPSBTZiAqIGJhc2UKICAgIFN0YiA9IFN0ICogYmFzZQoKICAgICMgQnJhbmNoIGxvYWRpbmcgaW4gcC51LgogICAgbG9hZGluZyA9IG5wLmFicyhTZmIpIC8gKHJhdGVzICsgMWUtOSkKCiAgICAjIFVwZGF0ZSBnZW5lcmF0b3IgcmVhY3RpdmUgcG93ZXIgKGluY2x1ZGluZyBzbGFjayBhbmQgcHYpCiAgICBRZyA9IFNidXNbbnAucl9bc2xhY2ssIHB2XV0uaW1hZyAqIGJhc2UgKyBRZFtucC5yX1tzbGFjaywgcHZdXQoKICAgICMgVXBkYXRlIGdlbmVyYXRvciByZWFsIHBvd2VyIGF0IHNsYWNrIGJ1cwogICAgUGdfc2xhY2sgPSBTYnVzW3NsYWNrXS5yZWFsKmJhc2UgKyBQZFtzbGFja10KICAgIHJldHVybiBTZmIsIFN0YiwgSWYsIEl0LCBWYnJhbmNoLCBsb2FkaW5nLCBsb3NzZXMsIFFnLCBQZ19zbGFjawoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBmcm9tIHNjaXB5LnNwYXJzZSBpbXBvcnQgY3NyX21hdHJpeAogICAgaW1wb3J0IHRpbWUKICAgICMgQSA1IGJ1cyBleGFtcGxlIGZyb20gUHJvZi4gT3ZlcmJ5ZSdzIHRleHRib29rCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICMgbm9kZSBpbXBlZGFuY2UKICAgIFlidXMgPSBucC5hcnJheShbWzMuNzI5IC0gNDkuNzIwaiwgMC4wMDAgKyAwLjAwMGosIDAuMDAwICsgMC4wMDBqLAogICAgICAgICAgICAgICAgICAgICAgMC4wMDAgKyAwLjAwMGosIC0zLjcyOSArIDQ5LjcyMGpdLAogICAgICAgICAgICAgICAgICAgICBbMC4wMDAgKyAwLjAwMGosIDIuNjc4IC0gMjguNDU5aiwgMC4wMDAgKyAwLjAwMGosCjx8ZmltX2VuZHw+"]
["c17b3bf1309352028ebafc7c28b9acea6de8d8a4-1","c17b3bf1309352028ebafc7c28b9acea6de8d8a4","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiMgRm9ybSBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZWQgZnJvbSByZWFkaW5nIHVpIGZpbGUgJ3Rlc3R1aS51aScKIwojIENyZWF0ZWQgYnk6IFB5UXQ1IFVJIGNvZGUgZ2VuZXJhdG9yIDUuNS4xCiMKIyBXQVJOSU5HISBBbGwgY2hhbmdlcyBtYWRlIGluIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3QhCgpmcm9tIFB5UXQ1IGltcG9ydCBRdENvcmUsIFF0R3VpLCBRdFdpZGdldHMKCmNsYXNzIFVpX01haW5XaW5kb3cob2JqZWN0KToKICAgIGRlZiBzZXR1cFVpKHNlbGYsIE1haW5XaW5kb3cpOgogICAgICAgIE1haW5XaW5kb3cuc2V0T2JqZWN0TmFtZSgiTWFpbldpbmRvdyIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBNYWluV2luZG93LnJlc2l6ZSg5OTAsIDYwMCkKICAgICAgICBzZWxmLmNlbnRyYWx3aWRnZXQgPSBRdFdpZGdldHMuUVdpZGdldChNYWluV2luZG93KQogICAgICAgIHNlbGYuY2VudHJhbHdpZGdldC5zZXRPYmplY3ROYW1lKCJjZW50cmFsd2lkZ2V0IikKICAgICAgICBzZWxmLmhvcml6b250YWxMYXlvdXQgPSBRdFdpZGdldHMuUUhCb3hMYXlvdXQoc2VsZi5jZW50cmFsd2lkZ2V0KQo8fGZpbV9lbmR8Pg=="]
["c17b3bf1309352028ebafc7c28b9acea6de8d8a4-2","c17b3bf1309352028ebafc7c28b9acea6de8d8a4","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiMgRm9ybSBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZWQgZnJvbSByZWFkaW5nIHVpIGZpbGUgJ3Rlc3R1aS51aScKIwojIENyZWF0ZWQgYnk6IFB5UXQ1IFVJIGNvZGUgZ2VuZXJhdG9yIDUuNS4xCiMKIyBXQVJOSU5HISBBbGwgY2hhbmdlcyBtYWRlIGluIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3QhCgpmcm9tIFB5UXQ1IGltcG9ydCBRdENvcmUsIFF0R3VpLCBRdFdpZGdldHMKCmNsYXNzIFVpX01haW5XaW5kb3cob2JqZWN0KToKICAgIGRlZiBzZXR1cFVpKHNlbGYsIE1haW5XaW5kb3cpOgogICAgICAgIE1haW5XaW5kb3cuc2V0T2JqZWN0TmFtZSgiTWFpbldpbmRvdyIpCiAgICAgICAgTWFpbldpbmRvdy5yZXNpemUoOTkwLCA2MDApCiAgICAgICAgc2VsZi5jZW50cmFsd2lkZ2V0ID0gUXRXaWRnZXRzLlFXaWRnZXQoTWFpbldpbmRvdykKICAgICAgICBzZWxmLmNlbnRyYWx3aWRnZXQuc2V0T2JqZWN0TmFtZSgiY2VudHJhbHdpZGdldCIpCiAgICAgICAgc2VsZi5ob3Jpem9udGFsTGF5b3V0ID0gUXRXaWRnZXRzLlFIQm94TGF5b3V0KHNlbGYuY2VudHJhbHdpZGdldCkKICAgICAgICBzZWxmLmhvcml6b250YWxMYXlvdXQuc2V0T2JqZWN0TmFtZSgiaG9yaXpvbnRhbExheW91dCIpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dCA9IFF0V2lkZ2V0cy5RVkJveExheW91dCgpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dC5zZXRTcGFjaW5nKDIpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dC5zZXRPYmplY3ROYW1lKCJ2ZXJ0aWNhbExheW91dCIpCiAgICAgICAgc2VsZi5wdXNoQnV0dG9uID0gUXRXaWRnZXRzLlFQdXNoQnV0dG9uKHNlbGYuY2VudHJhbHdpZGdldCkKICAgICAgICBzZWxmLnB1c2hCdXR0b24uc2V0T2JqZWN0TmFtZSgicHVzaEJ1dHRvbiIpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dC5hZGRXaWRnZXQoc2VsZi5wdXNoQnV0dG9uKQogICAgICAgIHNlbGYuY2hlY2tCb3ggPSBRdFdpZGdldHMuUUNoZWNrQm94KHNlbGYuY2VudHJhbHdpZGdldCkKICAgICAgICBzZWxmLmNoZWNrQm94LnNldE9iamVjdE5hbWUoImNoZWNrQm94IikKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0LmFkZFdpZGdldChzZWxmLmNoZWNrQm94KQogICAgICAgIHNlbGYuY29tYm9Cb3ggPSBRdFdpZGdldHMuUUNvbWJvQm94KHNlbGYuY2VudHJhbHdpZGdldCkKICAgICAgICBzZWxmLmNvbWJvQm94LnNldE9iamVjdE5hbWUoImNvbWJvQm94IikKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0LmFkZFdpZGdldChzZWxmLmNvbWJvQm94KQogICAgICAgIHNlbGYuc3BpbkJveCA9IFF0V2lkZ2V0cy5RU3BpbkJveChzZWxmLmNlbnRyYWx3aWRnZXQpCiAgICAgICAgc2VsZi5zcGluQm94LnNldE9iamVjdE5hbWUoInNwaW5Cb3giKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXQuYWRkV2lkZ2V0KHNlbGYuc3BpbkJveCkKICAgICAgICBzZWxmLmRvdWJsZVNwaW5Cb3ggPSBRdFdpZGdldHMuUURvdWJsZVNwaW5Cb3goc2VsZi5jZW50cmFsd2lkZ2V0KQogICAgICAgIHNlbGYuZG91YmxlU3BpbkJveC5zZXRPYmplY3ROYW1lKCJkb3VibGVTcGluQm94IikKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0LmFkZFdpZGdldChzZWxmLmRvdWJsZVNwaW5Cb3gpCiAgICAgICAgc2VsZi5ob3Jpem9udGFsU2xpZGVyID0gUXRXaWRnZXRzLlFTbGlkZXIoc2VsZi5jZW50cmFsd2lkZ2V0KQogICAgICAgIHNpemVQb2xpY3kgPSBRdFdpZGdldHMuUVNpemVQb2xpY3koUXRXaWRnZXRzLlFTaXplUG9saWN5LlByZWZlcnJlZCwgUXRXaWRnZXRzLlFTaXplUG9saWN5LkZpeGVkKQogICAgICAgIHNpemVQb2xpY3kuc2V0SG9yaXpvbnRhbFN0cmV0Y2goMCkKICAgICAgICBzaXplUG9saWN5LnNldFZlcnRpY2FsU3RyZXRjaCgwKQogICAgICAgIHNpemVQb2xpY3kuc2V0SGVpZ2h0Rm9yV2lkdGgoc2VsZi5ob3Jpem9udGFsU2xpZGVyLnNpemVQb2xpY3koKS5oYXNIZWlnaHRGb3JXaWR0aCgpKQogICAgICAgIHNlbGYuaG9yaXpvbnRhbFNsaWRlci5zZXRTaXplUG9saWN5KHNpemVQb2xpY3kpCiAgICAgICAgc2VsZi5ob3Jpem9udGFsU2xpZGVyLnNldE9yaWVudGF0aW9uKFF0Q29yZS5RdC5Ib3Jpem9udGFsKQogICAgICAgIHNlbGYuaG9yaXpvbnRhbFNsaWRlci5zZXRPYmplY3ROYW1lKCJob3Jpem9udGFsU2xpZGVyIikKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0LmFkZFdpZGdldChzZWxmLmhvcml6b250YWxTbGlkZXIpCiAgICAgICAgc2VsZi5sYWJlbCA9IFF0V2lkZ2V0cy5RTGFiZWwoc2VsZi5jZW50cmFsd2lkZ2V0KQogICAgICAgIHNlbGYubGFiZWwuc2V0T2JqZWN0TmFtZSgibGFiZWwiKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXQuYWRkV2lkZ2V0KHNlbGYubGFiZWwpCiAgICAgICAgc2VsZi50aW1lRWRpdCA9IFF0V2lkZ2V0cy5RVGltZUVkaXQoc2VsZi5jZW50cmFsd2lkZ2V0KQogICAgICAgIHNlbGYudGltZUVkaXQuc2V0T2JqZWN0TmFtZSgidGltZUVkaXQiKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXQuYWRkV2lkZ2V0KHNlbGYudGltZUVkaXQpCiAgICAgICAgc2VsZi5kYXRlRWRpdCA9IFF0V2lkZ2V0cy5RRGF0ZUVkaXQoc2VsZi5jZW50cmFsd2lkZ2V0KQogICAgICAgIHNlbGYuZGF0ZUVkaXQuc2V0T2JqZWN0TmFtZSgiZGF0ZUVkaXQiKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXQuYWRkV2lkZ2V0KHNlbGYuZGF0ZUVkaXQpCiAgICAgICAgc2VsZi5yYWRpb0J1dHRvbiA9IFF0V2lkZ2V0cy5RUmFkaW9CdXR0b24oc2VsZi5jZW50cmFsd2lkZ2V0KQogICAgICAgIHNlbGYucmFkaW9CdXR0b24uc2V0T2JqZWN0TmFtZSgicmFkaW9CdXR0b24iKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXQuYWRkV2lkZ2V0KHNlbGYucmFkaW9CdXR0b24pCiAgICAgICAgc2VsZi5yYWRpb0J1dHRvbl8zID0gUXRXaWRnZXRzLlFSYWRpb0J1dHRvbihzZWxmLmNlbnRyYWx3aWRnZXQpCiAgICAgICAgc2VsZi5yYWRpb0J1dHRvbl8zLnNldE9iamVjdE5hbWUoInJhZGlvQnV0dG9uXzMiKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXQuYWRkV2lkZ2V0KHNlbGYucmFkaW9CdXR0b25fMykKICAgICAgICBzZWxmLnJhZGlvQnV0dG9uXzIgPSBRdFdpZGdldHMuUVJhZGlvQnV0dG9uKHNlbGYuY2VudHJhbHdpZGdldCkKICAgICAgICBzZWxmLnJhZGlvQnV0dG9uXzIuc2V0T2JqZWN0TmFtZSgicmFkaW9CdXR0b25fMiIpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dC5hZGRXaWRnZXQoc2VsZi5yYWRpb0J1dHRvbl8yKQogICAgICAgIHNlbGYuZ3JvdXBCb3ggPSBRdFdpZGdldHMuUUdyb3VwQm94KHNlbGYuY2VudHJhbHdpZGdldCkKPHxmaW1faG9sZXw+CiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dF8zLnNldFNwYWNpbmcoMikKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0XzMuc2V0T2JqZWN0TmFtZSgidmVydGljYWxMYXlvdXRfMyIpCiAgICAgICAgc2VsZi5jaGVja0JveF80ID0gUXRXaWRnZXRzLlFDaGVja0JveChzZWxmLmdyb3VwQm94KQogICAgICAgIHNlbGYuY2hlY2tCb3hfNC5zZXRPYmplY3ROYW1lKCJjaGVja0JveF80IikKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0XzMuYWRkV2lkZ2V0KHNlbGYuY2hlY2tCb3hfNCkKICAgICAgICBzZWxmLmNoZWNrQm94XzMgPSBRdFdpZGdldHMuUUNoZWNrQm94KHNlbGYuZ3JvdXBCb3gpCiAgICAgICAgc2VsZi5jaGVja0JveF8zLnNldE9iamVjdE5hbWUoImNoZWNrQm94XzMiKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXRfMy5hZGRXaWRnZXQoc2VsZi5jaGVja0JveF8zKQogICAgICAgIHNlbGYuY2hlY2tCb3hfMiA9IFF0V2lkZ2V0cy5RQ2hlY2tCb3goc2VsZi5ncm91cEJveCkKICAgICAgICBzZWxmLmNoZWNrQm94XzIuc2V0T2JqZWN0TmFtZSgiY2hlY2tCb3hfMiIpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dF8zLmFkZFdpZGdldChzZWxmLmNoZWNrQm94XzIpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dC5hZGRXaWRnZXQoc2VsZi5ncm91cEJveCkKICAgICAgICBzcGFjZXJJdGVtID0gUXRXaWRnZXRzLlFTcGFjZXJJdGVtKDIwLCA0MCwgUXRXaWRnZXRzLlFTaXplUG9saWN5Lk1pbmltdW0sIFF0V2lkZ2V0cy5RU2l6ZVBvbGljeS5FeHBhbmRpbmcpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dC5hZGRJdGVtKHNwYWNlckl0ZW0pCiAgICAgICAgc2VsZi5ob3Jpem9udGFsTGF5b3V0LmFkZExheW91dChzZWxmLnZlcnRpY2FsTGF5b3V0KQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXRfMiA9IFF0V2lkZ2V0cy5RVkJveExheW91dCgpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dF8yLnNldE9iamVjdE5hbWUoInZlcnRpY2FsTGF5b3V0XzIiKQogICAgICAgIHNlbGYudGV4dEVkaXQgPSBRdFdpZGdldHMuUVRleHRFZGl0KHNlbGYuY2VudHJhbHdpZGdldCkKICAgICAgICBzZWxmLnRleHRFZGl0LnNldE9iamVjdE5hbWUoInRleHRFZGl0IikKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0XzIuYWRkV2lkZ2V0KHNlbGYudGV4dEVkaXQpCiAgICAgICAgc2VsZi5saW5lRWRpdCA9IFF0V2lkZ2V0cy5RTGluZUVkaXQoc2VsZi5jZW50cmFsd2lkZ2V0KQogICAgICAgIHNlbGYubGluZUVkaXQuc2V0T2JqZWN0TmFtZSgibGluZUVkaXQiKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXRfMi5hZGRXaWRnZXQoc2VsZi5saW5lRWRpdCkKICAgICAgICBzZWxmLmhvcml6b250YWxMYXlvdXQuYWRkTGF5b3V0KHNlbGYudmVydGljYWxMYXlvdXRfMikKICAgICAgICBNYWluV2luZG93LnNldENlbnRyYWxXaWRnZXQoc2VsZi5jZW50cmFsd2lkZ2V0KQogICAgICAgIHNlbGYubWVudWJhciA9IFF0V2lkZ2V0cy5RTWVudUJhcihNYWluV2luZG93KQogICAgICAgIHNlbGYubWVudWJhci5zZXRHZW9tZXRyeShRdENvcmUuUVJlY3QoMCwgMCwgOTkwLCAyNSkpCiAgICAgICAgc2VsZi5tZW51YmFyLnNldE9iamVjdE5hbWUoIm1lbnViYXIiKQogICAgICAgIHNlbGYubWVudUZpbGUgPSBRdFdpZGdldHMuUU1lbnUoc2VsZi5tZW51YmFyKQogICAgICAgIHNlbGYubWVudUZpbGUuc2V0T2JqZWN0TmFtZSgibWVudUZpbGUiKQogICAgICAgIHNlbGYubWVudUhlbHAgPSBRdFdpZGdldHMuUU1lbnUoc2VsZi5tZW51YmFyKQogICAgICAgIHNlbGYubWVudUhlbHAuc2V0T2JqZWN0TmFtZSgibWVudUhlbHAiKQogICAgICAgIE1haW5XaW5kb3cuc2V0TWVudUJhcihzZWxmLm1lbnViYXIpCiAgICAgICAgc2VsZi5zdGF0dXNiYXIgPSBRdFdpZGdldHMuUVN0YXR1c0JhcihNYWluV2luZG93KQogICAgICAgIHNlbGYuc3RhdHVzYmFyLnNldE9iamVjdE5hbWUoInN0YXR1c2JhciIpCiAgICAgICAgTWFpbldpbmRvdy5zZXRTdGF0dXNCYXIoc2VsZi5zdGF0dXNiYXIpCiAgICAgICAgc2VsZi5hY3Rpb25PcGVuID0gUXRXaWRnZXRzLlFBY3Rpb24oTWFpbldpbmRvdykKICAgICAgICBzZWxmLmFjdGlvbk9wZW4uc2V0T2JqZWN0TmFtZSgiYWN0aW9uT3BlbiIpCiAgICAgICAgc2VsZi5hY3Rpb25FeGl0ID0gUXRXaWRnZXRzLlFBY3Rpb24oTWFpbldpbmRvdykKICAgICAgICBzZWxmLmFjdGlvbkV4aXQuc2V0T2JqZWN0TmFtZSgiYWN0aW9uRXhpdCIpCiAgICAgICAgc2VsZi5hY3Rpb25OZXcgPSBRdFdpZGdldHMuUUFjdGlvbihNYWluV2luZG93KQogICAgICAgIHNlbGYuYWN0aW9uTmV3LnNldENoZWNrYWJsZShGYWxzZSkKICAgICAgICBzZWxmLmFjdGlvbk5ldy5zZXRTdGF0dXNUaXAoIiIpCiAgICAgICAgc2VsZi5hY3Rpb25OZXcuc2V0V2hhdHNUaGlzKCIiKQogICAgICAgIHNlbGYuYWN0aW9uTmV3LnNldE9iamVjdE5hbWUoImFjdGlvbk5ldyIpCiAgICAgICAgc2VsZi5hY3Rpb25BYm91dCA9IFF0V2lkZ2V0cy5RQWN0aW9uKE1haW5XaW5kb3cpCiAgICAgICAgc2VsZi5hY3Rpb25BYm91dC5zZXRPYmplY3ROYW1lKCJhY3Rpb25BYm91dCIpCiAgICAgICAgc2VsZi5hY3Rpb25IZWxwID0gUXRXaWRnZXRzLlFBY3Rpb24oTWFpbldpbmRvdykKICAgICAgICBzZWxmLmFjdGlvbkhlbHAuc2V0T2JqZWN0TmFtZSgiYWN0aW9uSGVscCIpCiAgICAgICAgc2VsZi5tZW51RmlsZS5hZGRBY3Rpb24oc2VsZi5hY3Rpb25OZXcpCiAgICAgICAgc2VsZi5tZW51RmlsZS5hZGRBY3Rpb24oc2VsZi5hY3Rpb25PcGVuKQogICAgICAgIHNlbGYubWVudUZpbGUuYWRkU2VwYXJhdG9yKCkKICAgICAgICBzZWxmLm1lbnVGaWxlLmFkZEFjdGlvbihzZWxmLmFjdGlvbkV4aXQpCiAgICAgICAgc2VsZi5tZW51SGVscC5hZGRBY3Rpb24oc2VsZi5hY3Rpb25IZWxwKQogICAgICAgIHNlbGYubWVudUhlbHAuYWRkU2VwYXJhdG9yKCkKICAgICAgICBzZWxmLm1lbnVIZWxwLmFkZEFjdGlvbihzZWxmLmFjdGlvbkFib3V0KQogICAgICAgIHNlbGYubWVudWJhci5hZGRBY3Rpb24oc2VsZi5tZW51RmlsZS5tZW51QWN0aW9uKCkpCiAgICAgICAgc2VsZi5tZW51YmFyLmFkZEFjdGlvbihzZWxmLm1lbnVIZWxwLm1lbnVBY3Rpb24oKSkKCiAgICAgICAgc2VsZi5yZXRyYW5zbGF0ZVVpKE1haW5XaW5kb3cpCiAgICAgICAgUXRDb3JlLlFNZXRhT2JqZWN0LmNvbm5lY3RTbG90c0J5TmFtZShNYWluV2luZG93KQoKICAgIGRlZiByZXRyYW5zbGF0ZVVpKHNlbGYsIE1haW5XaW5kb3cpOgogICAgICAgIF90cmFuc2xhdGUgPSBRdENvcmUuUUNvcmVBcHBsaWNhdGlvbi50cmFuc2xhdGUKICAgICAgICBNYWluV2luZG93LnNldFdpbmRvd1RpdGxlKF90cmFuc2xhdGUoIk1haW5XaW5kb3ciLCAiTWFpbldpbmRvdyIpKQogICAgICAgIHNlbGYucHVzaEJ1dHRvbi5zZXRUZXh0KF90cmFuc2xhdGUoIk1haW5XaW5kb3ciLCAiUHVzaEJ1dHRvbiIpKQogICAgICAgIHNlbGYuY2hlY2tCb3guc2V0VGV4dChfdHJhbnNsYXRlKCJNYWluV2luZG93IiwgIkNoZWNrQm94IikpCiAgICAgICAgc2VsZi5sYWJlbC5zZXRUZXh0KF90cmFuc2xhdGUoIk1haW5XaW5kb3ciLCAiVGV4dExhYmVsIikpCiAgICAgICAgc2VsZi5yYWRpb0J1dHRvbi5zZXRUZXh0KF90cmFuc2xhdGUoIk1haW5XaW5kb3ciLCAiUmFkaW9CdXR0b24iKSkKICAgICAgICBzZWxmLnJhZGlvQnV0dG9uXzMuc2V0VGV4dChfdHJhbnNsYXRlKCJNYWluV2luZG93IiwgIlJhZGlvQnV0dG9uIikpCiAgICAgICAgc2VsZi5yYWRpb0J1dHRvbl8yLnNldFRleHQoX3RyYW5zbGF0ZSgiTWFpbldpbmRvdyIsICJSYWRpb0J1dHRvbiIpKQogICAgICAgIHNlbGYuZ3JvdXBCb3guc2V0VGl0bGUoX3RyYW5zbGF0ZSgiTWFpbldpbmRvdyIsICJHcm91cEJveCIpKQogICAgICAgIHNlbGYuY2hlY2tCb3hfNC5zZXRUZXh0KF90cmFuc2xhdGUoIk1haW5XaW5kb3ciLCAiQ2hlY2tCb3giKSkKICAgICAgICBzZWxmLmNoZWNrQm94XzMuc2V0VGV4dChfdHJhbnNsYXRlKCJNYWluV2luZG93IiwgIkNoZWNrQm94IikpCiAgICAgICAgc2VsZi5jaGVja0JveF8yLnNldFRleHQoX3RyYW5zbGF0ZSgiTWFpbldpbmRvdyIsICJDaGVja0JveCIpKQogICAgICAgIHNlbGYubWVudUZpbGUuc2V0VGl0bGUoX3RyYW5zbGF0ZSgiTWFpbldpbmRvdyIsICJGaWxlIikpCiAgICAgICAgc2VsZi5tZW51SGVscC5zZXRUaXRsZShfdHJhbnNsYXRlKCJNYWluV2luZG93IiwgIkhlbHAiKSkKICAgICAgICBzZWxmLmFjdGlvbk9wZW4uc2V0VGV4dChfdHJhbnNsYXRlKCJNYWluV2luZG93IiwgIk9wZW4iKSkKICAgICAgICBzZWxmLmFjdGlvbkV4aXQuc2V0VGV4dChfdHJhbnNsYXRlKCJNYWluV2luZG93IiwgIlF1aXQiKSkKICAgICAgICBzZWxmLmFjdGlvbk5ldy5zZXRUZXh0KF90cmFuc2xhdGUoIk1haW5XaW5kb3ciLCAiTmV3IikpCiAgICAgICAgc2VsZi5hY3Rpb25OZXcuc2V0VG9vbFRpcChfdHJhbnNsYXRlKCJNYWluV2luZG93IiwgIk5ldyIpKQogICAgICAgIHNlbGYuYWN0aW9uQWJvdXQuc2V0VGV4dChfdHJhbnNsYXRlKCJNYWluV2luZG93IiwgIkFib3V0IikpCiAgICAgICAgc2VsZi5hY3Rpb25IZWxwLnNldFRleHQoX3RyYW5zbGF0ZSgiTWFpbldpbmRvdyIsICJIZWxwIikpCgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuZ3JvdXBCb3guc2V0Q2hlY2thYmxlKFRydWUpCiAgICAgICAgc2VsZi5ncm91cEJveC5zZXRPYmplY3ROYW1lKCJncm91cEJveCIpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dF8zID0gUXRXaWRnZXRzLlFWQm94TGF5b3V0KHNlbGYuZ3JvdXBCb3gpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dF8zLnNldENvbnRlbnRzTWFyZ2lucygyLCAyLCAyLCAyKQo8fGZpbV9lbmR8Pg=="]
["c17b3bf1309352028ebafc7c28b9acea6de8d8a4-3","c17b3bf1309352028ebafc7c28b9acea6de8d8a4","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiMgRm9ybSBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZWQgZnJvbSByZWFkaW5nIHVpIGZpbGUgJ3Rlc3R1aS51aScKIwojIENyZWF0ZWQgYnk6IFB5UXQ1IFVJIGNvZGUgZ2VuZXJhdG9yIDUuNS4xCiMKIyBXQVJOSU5HISBBbGwgY2hhbmdlcyBtYWRlIGluIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3QhCgpmcm9tIFB5UXQ1IGltcG9ydCBRdENvcmUsIFF0R3VpLCBRdFdpZGdldHMKCmNsYXNzIFVpX01haW5XaW5kb3cob2JqZWN0KToKICAgIGRlZiBzZXR1cFVpKHNlbGYsIE1haW5XaW5kb3cpOgogICAgICAgIE1haW5XaW5kb3cuc2V0T2JqZWN0TmFtZSgiTWFpbldpbmRvdyIpCiAgICAgICAgTWFpbldpbmRvdy5yZXNpemUoOTkwLCA2MDApCiAgICAgICAgc2VsZi5jZW50cmFsd2lkZ2V0ID0gUXRXaWRnZXRzLlFXaWRnZXQoTWFpbldpbmRvdykKICAgICAgICBzZWxmLmNlbnRyYWx3aWRnZXQuc2V0T2JqZWN0TmFtZSgiY2VudHJhbHdpZGdldCIpCiAgICAgICAgc2VsZi5ob3Jpem9udGFsTGF5b3V0ID0gUXRXaWRnZXRzLlFIQm94TGF5b3V0KHNlbGYuY2VudHJhbHdpZGdldCkKICAgICAgICBzZWxmLmhvcml6b250YWxMYXlvdXQuc2V0T2JqZWN0TmFtZSgiaG9yaXpvbnRhbExheW91dCIpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dCA9IFF0V2lkZ2V0cy5RVkJveExheW91dCgpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dC5zZXRTcGFjaW5nKDIpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dC5zZXRPYmplY3ROYW1lKCJ2ZXJ0aWNhbExheW91dCIpCiAgICAgICAgc2VsZi5wdXNoQnV0dG9uID0gUXRXaWRnZXRzLlFQdXNoQnV0dG9uKHNlbGYuY2VudHJhbHdpZGdldCkKICAgICAgICBzZWxmLnB1c2hCdXR0b24uc2V0T2JqZWN0TmFtZSgicHVzaEJ1dHRvbiIpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dC5hZGRXaWRnZXQoc2VsZi5wdXNoQnV0dG9uKQogICAgICAgIHNlbGYuY2hlY2tCb3ggPSBRdFdpZGdldHMuUUNoZWNrQm94KHNlbGYuY2VudHJhbHdpZGdldCkKICAgICAgICBzZWxmLmNoZWNrQm94LnNldE9iamVjdE5hbWUoImNoZWNrQm94IikKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0LmFkZFdpZGdldChzZWxmLmNoZWNrQm94KQogICAgICAgIHNlbGYuY29tYm9Cb3ggPSBRdFdpZGdldHMuUUNvbWJvQm94KHNlbGYuY2VudHJhbHdpZGdldCkKICAgICAgICBzZWxmLmNvbWJvQm94LnNldE9iamVjdE5hbWUoImNvbWJvQm94IikKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0LmFkZFdpZGdldChzZWxmLmNvbWJvQm94KQogICAgICAgIHNlbGYuc3BpbkJveCA9IFF0V2lkZ2V0cy5RU3BpbkJveChzZWxmLmNlbnRyYWx3aWRnZXQpCiAgICAgICAgc2VsZi5zcGluQm94LnNldE9iamVjdE5hbWUoInNwaW5Cb3giKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXQuYWRkV2lkZ2V0KHNlbGYuc3BpbkJveCkKICAgICAgICBzZWxmLmRvdWJsZVNwaW5Cb3ggPSBRdFdpZGdldHMuUURvdWJsZVNwaW5Cb3goc2VsZi5jZW50cmFsd2lkZ2V0KQogICAgICAgIHNlbGYuZG91YmxlU3BpbkJveC5zZXRPYmplY3ROYW1lKCJkb3VibGVTcGluQm94IikKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0LmFkZFdpZGdldChzZWxmLmRvdWJsZVNwaW5Cb3gpCiAgICAgICAgc2VsZi5ob3Jpem9udGFsU2xpZGVyID0gUXRXaWRnZXRzLlFTbGlkZXIoc2VsZi5jZW50cmFsd2lkZ2V0KQogICAgICAgIHNpemVQb2xpY3kgPSBRdFdpZGdldHMuUVNpemVQb2xpY3koUXRXaWRnZXRzLlFTaXplUG9saWN5LlByZWZlcnJlZCwgUXRXaWRnZXRzLlFTaXplUG9saWN5LkZpeGVkKQogICAgICAgIHNpemVQb2xpY3kuc2V0SG9yaXpvbnRhbFN0cmV0Y2goMCkKICAgICAgICBzaXplUG9saWN5LnNldFZlcnRpY2FsU3RyZXRjaCgwKQogICAgICAgIHNpemVQb2xpY3kuc2V0SGVpZ2h0Rm9yV2lkdGgoc2VsZi5ob3Jpem9udGFsU2xpZGVyLnNpemVQb2xpY3koKS5oYXNIZWlnaHRGb3JXaWR0aCgpKQogICAgICAgIHNlbGYuaG9yaXpvbnRhbFNsaWRlci5zZXRTaXplUG9saWN5KHNpemVQb2xpY3kpCiAgICAgICAgc2VsZi5ob3Jpem9udGFsU2xpZGVyLnNldE9yaWVudGF0aW9uKFF0Q29yZS5RdC5Ib3Jpem9udGFsKQogICAgICAgIHNlbGYuaG9yaXpvbnRhbFNsaWRlci5zZXRPYmplY3ROYW1lKCJob3Jpem9udGFsU2xpZGVyIikKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0LmFkZFdpZGdldChzZWxmLmhvcml6b250YWxTbGlkZXIpCiAgICAgICAgc2VsZi5sYWJlbCA9IFF0V2lkZ2V0cy5RTGFiZWwoc2VsZi5jZW50cmFsd2lkZ2V0KQogICAgICAgIHNlbGYubGFiZWwuc2V0T2JqZWN0TmFtZSgibGFiZWwiKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXQuYWRkV2lkZ2V0KHNlbGYubGFiZWwpCiAgICAgICAgc2VsZi50aW1lRWRpdCA9IFF0V2lkZ2V0cy5RVGltZUVkaXQoc2VsZi5jZW50cmFsd2lkZ2V0KQogICAgICAgIHNlbGYudGltZUVkaXQuc2V0T2JqZWN0TmFtZSgidGltZUVkaXQiKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXQuYWRkV2lkZ2V0KHNlbGYudGltZUVkaXQpCiAgICAgICAgc2VsZi5kYXRlRWRpdCA9IFF0V2lkZ2V0cy5RRGF0ZUVkaXQoc2VsZi5jZW50cmFsd2lkZ2V0KQogICAgICAgIHNlbGYuZGF0ZUVkaXQuc2V0T2JqZWN0TmFtZSgiZGF0ZUVkaXQiKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXQuYWRkV2lkZ2V0KHNlbGYuZGF0ZUVkaXQpCiAgICAgICAgc2VsZi5yYWRpb0J1dHRvbiA9IFF0V2lkZ2V0cy5RUmFkaW9CdXR0b24oc2VsZi5jZW50cmFsd2lkZ2V0KQogICAgICAgIHNlbGYucmFkaW9CdXR0b24uc2V0T2JqZWN0TmFtZSgicmFkaW9CdXR0b24iKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXQuYWRkV2lkZ2V0KHNlbGYucmFkaW9CdXR0b24pCiAgICAgICAgc2VsZi5yYWRpb0J1dHRvbl8zID0gUXRXaWRnZXRzLlFSYWRpb0J1dHRvbihzZWxmLmNlbnRyYWx3aWRnZXQpCiAgICAgICAgc2VsZi5yYWRpb0J1dHRvbl8zLnNldE9iamVjdE5hbWUoInJhZGlvQnV0dG9uXzMiKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXQuYWRkV2lkZ2V0KHNlbGYucmFkaW9CdXR0b25fMykKICAgICAgICBzZWxmLnJhZGlvQnV0dG9uXzIgPSBRdFdpZGdldHMuUVJhZGlvQnV0dG9uKHNlbGYuY2VudHJhbHdpZGdldCkKICAgICAgICBzZWxmLnJhZGlvQnV0dG9uXzIuc2V0T2JqZWN0TmFtZSgicmFkaW9CdXR0b25fMiIpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dC5hZGRXaWRnZXQoc2VsZi5yYWRpb0J1dHRvbl8yKQogICAgICAgIHNlbGYuZ3JvdXBCb3ggPSBRdFdpZGdldHMuUUdyb3VwQm94KHNlbGYuY2VudHJhbHdpZGdldCkKICAgICAgICBzZWxmLmdyb3VwQm94LnNldENoZWNrYWJsZShUcnVlKQogICAgICAgIHNlbGYuZ3JvdXBCb3guc2V0T2JqZWN0TmFtZSgiZ3JvdXBCb3giKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXRfMyA9IFF0V2lkZ2V0cy5RVkJveExheW91dChzZWxmLmdyb3VwQm94KQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXRfMy5zZXRDb250ZW50c01hcmdpbnMoMiwgMiwgMiwgMikKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0XzMuc2V0U3BhY2luZygyKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXRfMy5zZXRPYmplY3ROYW1lKCJ2ZXJ0aWNhbExheW91dF8zIikKICAgICAgICBzZWxmLmNoZWNrQm94XzQgPSBRdFdpZGdldHMuUUNoZWNrQm94KHNlbGYuZ3JvdXBCb3gpCiAgICAgICAgc2VsZi5jaGVja0JveF80LnNldE9iamVjdE5hbWUoImNoZWNrQm94XzQiKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXRfMy5hZGRXaWRnZXQoc2VsZi5jaGVja0JveF80KQogICAgICAgIHNlbGYuY2hlY2tCb3hfMyA9IFF0V2lkZ2V0cy5RQ2hlY2tCb3goc2VsZi5ncm91cEJveCkKICAgICAgICBzZWxmLmNoZWNrQm94XzMuc2V0T2JqZWN0TmFtZSgiY2hlY2tCb3hfMyIpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dF8zLmFkZFdpZGdldChzZWxmLmNoZWNrQm94XzMpCiAgICAgICAgc2VsZi5jaGVja0JveF8yID0gUXRXaWRnZXRzLlFDaGVja0JveChzZWxmLmdyb3VwQm94KQogICAgICAgIHNlbGYuY2hlY2tCb3hfMi5zZXRPYmplY3ROYW1lKCJjaGVja0JveF8yIikKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0XzMuYWRkV2lkZ2V0KHNlbGYuY2hlY2tCb3hfMikKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0LmFkZFdpZGdldChzZWxmLmdyb3VwQm94KQogICAgICAgIHNwYWNlckl0ZW0gPSBRdFdpZGdldHMuUVNwYWNlckl0ZW0oMjAsIDQwLCBRdFdpZGdldHMuUVNpemVQb2xpY3kuTWluaW11bSwgUXRXaWRnZXRzLlFTaXplUG9saWN5LkV4cGFuZGluZykKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0LmFkZEl0ZW0oc3BhY2VySXRlbSkKICAgICAgICBzZWxmLmhvcml6b250YWxMYXlvdXQuYWRkTGF5b3V0KHNlbGYudmVydGljYWxMYXlvdXQpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dF8yID0gUXRXaWRnZXRzLlFWQm94TGF5b3V0KCkKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0XzIuc2V0T2JqZWN0TmFtZSgidmVydGljYWxMYXlvdXRfMiIpCiAgICAgICAgc2VsZi50ZXh0RWRpdCA9IFF0V2lkZ2V0cy5RVGV4dEVkaXQoc2VsZi5jZW50cmFsd2lkZ2V0KQogICAgICAgIHNlbGYudGV4dEVkaXQuc2V0T2JqZWN0TmFtZSgidGV4dEVkaXQiKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXRfMi5hZGRXaWRnZXQoc2VsZi50ZXh0RWRpdCkKICAgICAgICBzZWxmLmxpbmVFZGl0ID0gUXRXaWRnZXRzLlFMaW5lRWRpdChzZWxmLmNlbnRyYWx3aWRnZXQpCiAgICAgICAgc2VsZi5saW5lRWRpdC5zZXRPYmplY3ROYW1lKCJsaW5lRWRpdCIpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dF8yLmFkZFdpZGdldChzZWxmLmxpbmVFZGl0KQogICAgICAgIHNlbGYuaG9yaXpvbnRhbExheW91dC5hZGRMYXlvdXQoc2VsZi52ZXJ0aWNhbExheW91dF8yKQogICAgICAgIE1haW5XaW5kb3cuc2V0Q2VudHJhbFdpZGdldChzZWxmLmNlbnRyYWx3aWRnZXQpCiAgICAgICAgc2VsZi5tZW51YmFyID0gUXRXaWRnZXRzLlFNZW51QmFyKE1haW5XaW5kb3cpCiAgICAgICAgc2VsZi5tZW51YmFyLnNldEdlb21ldHJ5KFF0Q29yZS5RUmVjdCgwLCAwLCA5OTAsIDI1KSkKICAgICAgICBzZWxmLm1lbnViYXIuc2V0T2JqZWN0TmFtZSgibWVudWJhciIpCiAgICAgICAgc2VsZi5tZW51RmlsZSA9IFF0V2lkZ2V0cy5RTWVudShzZWxmLm1lbnViYXIpCiAgICAgICAgc2VsZi5tZW51RmlsZS5zZXRPYmplY3ROYW1lKCJtZW51RmlsZSIpCiAgICAgICAgc2VsZi5tZW51SGVscCA9IFF0V2lkZ2V0cy5RTWVudShzZWxmLm1lbnViYXIpCiAgICAgICAgc2VsZi5tZW51SGVscC5zZXRPYmplY3ROYW1lKCJtZW51SGVscCIpCiAgICAgICAgTWFpbldpbmRvdy5zZXRNZW51QmFyKHNlbGYubWVudWJhcikKICAgICAgICBzZWxmLnN0YXR1c2JhciA9IFF0V2lkZ2V0cy5RU3RhdHVzQmFyKE1haW5XaW5kb3cpCiAgICAgICAgc2VsZi5zdGF0dXNiYXIuc2V0T2JqZWN0TmFtZSgic3RhdHVzYmFyIikKICAgICAgICBNYWluV2luZG93LnNldFN0YXR1c0JhcihzZWxmLnN0YXR1c2JhcikKICAgICAgICBzZWxmLmFjdGlvbk9wZW4gPSBRdFdpZGdldHMuUUFjdGlvbihNYWluV2luZG93KQogICAgICAgIHNlbGYuYWN0aW9uT3Blbi5zZXRPYmplY3ROYW1lKCJhY3Rpb25PcGVuIikKICAgICAgICBzZWxmLmFjdGlvbkV4aXQgPSBRdFdpZGdldHMuUUFjdGlvbihNYWluV2luZG93KQogICAgICAgIHNlbGYuYWN0aW9uRXhpdC5zZXRPYmplY3ROYW1lKCJhY3Rpb25FeGl0IikKICAgICAgICBzZWxmLmFjdGlvbk5ldyA9IFF0V2lkZ2V0cy5RQWN0aW9uKE1haW5XaW5kb3cpCiAgICAgICAgc2VsZi5hY3Rpb25OZXcuc2V0Q2hlY2thYmxlKEZhbHNlKQogICAgICAgIHNlbGYuYWN0aW9uTmV3LnNldFN0YXR1c1RpcCgiIikKICAgICAgICBzZWxmLmFjdGlvbk5ldy5zZXRXaGF0c1RoaXMoIiIpCiAgICAgICAgc2VsZi5hY3Rpb25OZXcuc2V0T2JqZWN0TmFtZSgiYWN0aW9uTmV3IikKICAgICAgICBzZWxmLmFjdGlvbkFib3V0ID0gUXRXaWRnZXRzLlFBY3Rpb24oTWFpbldpbmRvdykKICAgICAgICBzZWxmLmFjdGlvbkFib3V0LnNldE9iamVjdE5hbWUoImFjdGlvbkFib3V0IikKICAgICAgICBzZWxmLmFjdGlvbkhlbHAgPSBRdFdpZGdldHMuUUFjdGlvbihNYWluV2luZG93KQogICAgICAgIHNlbGYuYWN0aW9uSGVscC5zZXRPYmplY3ROYW1lKCJhY3Rpb25IZWxwIikKICAgICAgICBzZWxmLm1lbnVGaWxlLmFkZEFjdGlvbihzZWxmLmFjdGlvbk5ldykKICAgICAgICBzZWxmLm1lbnVGaWxlLmFkZEFjdGlvbihzZWxmLmFjdGlvbk9wZW4pCiAgICAgICAgc2VsZi5tZW51RmlsZS5hZGRTZXBhcmF0b3IoKQogICAgICAgIHNlbGYubWVudUZpbGUuYWRkQWN0aW9uKHNlbGYuYWN0aW9uRXhpdCkKICAgICAgICBzZWxmLm1lbnVIZWxwLmFkZEFjdGlvbihzZWxmLmFjdGlvbkhlbHApCiAgICAgICAgc2VsZi5tZW51SGVscC5hZGRTZXBhcmF0b3IoKQogICAgICAgIHNlbGYubWVudUhlbHAuYWRkQWN0aW9uKHNlbGYuYWN0aW9uQWJvdXQpCiAgICAgICAgc2VsZi5tZW51YmFyLmFkZEFjdGlvbihzZWxmLm1lbnVGaWxlLm1lbnVBY3Rpb24oKSkKICAgICAgICBzZWxmLm1lbnViYXIuYWRkQWN0aW9uKHNlbGYubWVudUhlbHAubWVudUFjdGlvbigpKQoKICAgICAgICBzZWxmLnJldHJhbnNsYXRlVWkoTWFpbldpbmRvdykKICAgICAgICBRdENvcmUuUU1ldGFPYmplY3QuY29ubmVjdFNsb3RzQnlOYW1lKE1haW5XaW5kb3cpCgogICAgZGVmIHJldHJhbnNsYXRlVWkoc2VsZiwgTWFpbldpbmRvdyk6CiAgICAgICAgX3RyYW5zbGF0ZSA9IFF0Q29yZS5RQ29yZUFwcGxpY2F0aW9uLnRyYW5zbGF0ZQogICAgICAgIE1haW5XaW5kb3cuc2V0V2luZG93VGl0bGUoX3RyYW5zbGF0ZSgiTWFpbldpbmRvdyIsICJNYWluV2luZG93IikpCiAgICAgICAgc2VsZi5wdXNoQnV0dG9uLnNldFRleHQoX3RyYW5zbGF0ZSgiTWFpbldpbmRvdyIsICJQdXNoQnV0dG9uIikpCiAgICAgICAgc2VsZi5jaGVja0JveC5zZXRUZXh0KF90cmFuc2xhdGUoIk1haW5XaW5kb3ciLCAiQ2hlY2tCb3giKSkKICAgICAgICBzZWxmLmxhYmVsLnNldFRleHQoX3RyYW5zbGF0ZSgiTWFpbldpbmRvdyIsICJUZXh0TGFiZWwiKSkKICAgICAgICBzZWxmLnJhZGlvQnV0dG9uLnNldFRleHQoX3RyYW5zbGF0ZSgiTWFpbldpbmRvdyIsICJSYWRpb0J1dHRvbiIpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5yYWRpb0J1dHRvbl8zLnNldFRleHQoX3RyYW5zbGF0ZSgiTWFpbldpbmRvdyIsICJSYWRpb0J1dHRvbiIpKQogICAgICAgIHNlbGYucmFkaW9CdXR0b25fMi5zZXRUZXh0KF90cmFuc2xhdGUoIk1haW5XaW5kb3ciLCAiUmFkaW9CdXR0b24iKSkKICAgICAgICBzZWxmLmdyb3VwQm94LnNldFRpdGxlKF90cmFuc2xhdGUoIk1haW5XaW5kb3ciLCAiR3JvdXBCb3giKSkKICAgICAgICBzZWxmLmNoZWNrQm94XzQuc2V0VGV4dChfdHJhbnNsYXRlKCJNYWluV2luZG93IiwgIkNoZWNrQm94IikpCjx8ZmltX2VuZHw+"]
["005fabce80b447e846d7a10cf73adb400687c259-1","005fabce80b447e846d7a10cf73adb400687c259","PHxmaW1fcHJlZml4fD4KZnJvbSBhc3luY2lvIGltcG9ydCBzbGVlcApmcm9tIHR5cGluZyBpbXBvcnQgRGljdCwgQ2FsbGFibGUKCgpjbGFzcyBBbmFyY2h5RGVtb2NyYWN5VHJhY2tlcjoKPHxmaW1faG9sZXw+CiAgICAgICAgc2VsZi5kZW1vY3JhY3kgPSAuNQogICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjawoKICAgIGFzeW5jIGRlZiBzdGFydChzZWxmKToKICAgICAgICAjIGxvb3AgdGhyb3VnaAogICAgICAgICMgc2VwYXJhdGUgbG9vcCB0aGF0IGV4ZWN1dGVzIHRoaXMgYmFkIGJveT8/PwogICAgICAgIGF3YWl0IHNsZWVwKDEpCiAgICAgICAgc2VsZi5jYWxsYmFjaygpCgoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGFuYXJjaHkoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuYW5hcmNoeQoKICAgIEBhbmFyY2h5LnNldHRlcgogICAgZGVmIGFuYXJjaHkoc2VsZiwgYW5hcmNoeSk6CiAgICAgICAgc2VsZi5fYW5hcmNoeSA9IGFuYXJjaHkKCiAgICBAcHJvcGVydHkKICAgIGRlZiBkZW1vY3JhY3koc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuZGVtb2NyYWN5CgogICAgQGRlbW9jcmFjeS5zZXR0ZXIKICAgIGRlZiBkZW1vY3JhY3koc2VsZiwgZGVtb2NyYWN5KToKICAgICAgICBzZWxmLl9kZW1vY3JhY3kgPSBkZW1vY3JhY3kKPHxmaW1fc3VmZml4fD4KICAgICMgd2VpZ2h0IG9mIGFuYXJjaHkKICAgICMgd2VpZ2h0IG9mIGRlbW9jcmFjeQogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhbGxiYWNrOiBDYWxsYWJsZVtbXSwgTm9uZV0sIGludGVydmFsOmludCA9IDEsIGFuYXJjaHk6IGludCA9IC41LCBkZW1vY3JhY3k6IGludCA9IDUpOgogICAgICAgIHNlbGYuYW5hcmNoeSA9IC41Cjx8ZmltX2VuZHw+"]
["005fabce80b447e846d7a10cf73adb400687c259-2","005fabce80b447e846d7a10cf73adb400687c259","PHxmaW1fcHJlZml4fD4KZnJvbSBhc3luY2lvIGltcG9ydCBzbGVlcApmcm9tIHR5cGluZyBpbXBvcnQgRGljdCwgQ2FsbGFibGUKCgpjbGFzcyBBbmFyY2h5RGVtb2NyYWN5VHJhY2tlcjoKICAgICMgd2VpZ2h0IG9mIGFuYXJjaHkKICAgICMgd2VpZ2h0IG9mIGRlbW9jcmFjeQogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhbGxiYWNrOiBDYWxsYWJsZVtbXSwgTm9uZV0sIGludGVydmFsOmludCA9IDEsIGFuYXJjaHk6IGludCA9IC41LCBkZW1vY3JhY3k6IGludCA9IDUpOgogICAgICAgIHNlbGYuYW5hcmNoeSA9IC41CiAgICAgICAgc2VsZi5kZW1vY3JhY3kgPSAuNQogICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjawo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgYXN5bmMgZGVmIHN0YXJ0KHNlbGYpOgogICAgICAgICMgbG9vcCB0aHJvdWdoCiAgICAgICAgIyBzZXBhcmF0ZSBsb29wIHRoYXQgZXhlY3V0ZXMgdGhpcyBiYWQgYm95Pz8/Cjx8ZmltX2VuZHw+"]
["005fabce80b447e846d7a10cf73adb400687c259-3","005fabce80b447e846d7a10cf73adb400687c259","PHxmaW1fcHJlZml4fD4KZnJvbSBhc3luY2lvIGltcG9ydCBzbGVlcApmcm9tIHR5cGluZyBpbXBvcnQgRGljdCwgQ2FsbGFibGUKCgpjbGFzcyBBbmFyY2h5RGVtb2NyYWN5VHJhY2tlcjoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgIyB3ZWlnaHQgb2YgYW5hcmNoeQogICAgIyB3ZWlnaHQgb2YgZGVtb2NyYWN5CiAgICBkZWYgX19pbml0X18oc2VsZiwgY2FsbGJhY2s6IENhbGxhYmxlW1tdLCBOb25lXSwgaW50ZXJ2YWw6aW50ID0gMSwgYW5hcmNoeTogaW50ID0gLjUsIGRlbW9jcmFjeTogaW50ID0gNSk6CiAgICAgICAgc2VsZi5hbmFyY2h5ID0gLjUKPHxmaW1fZW5kfD4="]
["005fabce80b447e846d7a10cf73adb400687c259-4","005fabce80b447e846d7a10cf73adb400687c259","PHxmaW1fcHJlZml4fD4KZnJvbSBhc3luY2lvIGltcG9ydCBzbGVlcApmcm9tIHR5cGluZyBpbXBvcnQgRGljdCwgQ2FsbGFibGUKCgpjbGFzcyBBbmFyY2h5RGVtb2NyYWN5VHJhY2tlcjoKICAgICMgd2VpZ2h0IG9mIGFuYXJjaHkKICAgICMgd2VpZ2h0IG9mIGRlbW9jcmFjeQogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhbGxiYWNrOiBDYWxsYWJsZVtbXSwgTm9uZV0sIGludGVydmFsOmludCA9IDEsIGFuYXJjaHk6IGludCA9IC41LCBkZW1vY3JhY3k6IGludCA9IDUpOgogICAgICAgIHNlbGYuYW5hcmNoeSA9IC41CiAgICAgICAgc2VsZi5kZW1vY3JhY3kgPSAuNQo8fGZpbV9ob2xlfD4KICAgIGFzeW5jIGRlZiBzdGFydChzZWxmKToKICAgICAgICAjIGxvb3AgdGhyb3VnaAogICAgICAgICMgc2VwYXJhdGUgbG9vcCB0aGF0IGV4ZWN1dGVzIHRoaXMgYmFkIGJveT8/PwogICAgICAgIGF3YWl0IHNsZWVwKDEpCiAgICAgICAgc2VsZi5jYWxsYmFjaygpCgoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGFuYXJjaHkoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuYW5hcmNoeQoKICAgIEBhbmFyY2h5LnNldHRlcgogICAgZGVmIGFuYXJjaHkoc2VsZiwgYW5hcmNoeSk6CiAgICAgICAgc2VsZi5fYW5hcmNoeSA9IGFuYXJjaHkKCiAgICBAcHJvcGVydHkKICAgIGRlZiBkZW1vY3JhY3koc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuZGVtb2NyYWN5CgogICAgQGRlbW9jcmFjeS5zZXR0ZXIKICAgIGRlZiBkZW1vY3JhY3koc2VsZiwgZGVtb2NyYWN5KToKICAgICAgICBzZWxmLl9kZW1vY3JhY3kgPSBkZW1vY3JhY3kKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKCjx8ZmltX2VuZHw+"]
["68e7692b5b3870fc678c302427de94f6688f0b61-1","68e7692b5b3870fc678c302427de94f6688f0b61","PHxmaW1fcHJlZml4fD4KIyBXcml0ZSBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIG51bWJlciB4IGFuZCBldmFsdWF0ZXMgdGhlIGZvbGxvd2luZyBleHByZXNzaW9uOgojIHk9YWJzKHgzKStjb3MoM3jiiJLiiJLiiJopIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB5LiBIaW50OiBVc2UgdGhlIG1hdGggbW9kdWxlIQppbXBvcnQgbWF0aAoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIGV2YWx1YXRlX2V4cHJlc3Npb24obnVtX3gpOgogICAgcmVzdWx0ID0gYWJzKG1hdGgucG93KG51bV94LCAzKSkgKyBtYXRoLmNvcyhtYXRoLnNxcnQoMypudW1feCkpCiAgICByZXR1cm4gcmVzdWx0Cgo8fGZpbV9lbmR8Pg=="]
["68e7692b5b3870fc678c302427de94f6688f0b61-2","68e7692b5b3870fc678c302427de94f6688f0b61","PHxmaW1fcHJlZml4fD4KIyBXcml0ZSBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIG51bWJlciB4IGFuZCBldmFsdWF0ZXMgdGhlIGZvbGxvd2luZyBleHByZXNzaW9uOgojIHk9YWJzKHgzKStjb3MoM3jiiJLiiJLiiJopIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB5LiBIaW50OiBVc2UgdGhlIG1hdGggbW9kdWxlIQppbXBvcnQgbWF0aAoKCmRlZiBldmFsdWF0ZV9leHByZXNzaW9uKG51bV94KToKICAgIHJlc3VsdCA9IGFicyhtYXRoLnBvdyhudW1feCwgMykpICsgbWF0aC5jb3MobWF0aC5zcXJ0KDMqbnVtX3gpKQogICAgcmV0dXJuIHJlc3VsdAoKIyBvcgojCiMgaW1wb3J0IG1hdGgKIyBkZWYgX2V2YWx1YXRlX2V4cHJlc3Npb25fc2FtcGxlM18oeCk6CiMgICAgIHkgPSBhYnMoeCoqMykgKyBtYXRoLmNvcyhtYXRoLnNxcnQoMyp4KSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojICAgICByZXR1cm4geQo8fGZpbV9lbmR8Pg=="]
["68e7692b5b3870fc678c302427de94f6688f0b61-3","68e7692b5b3870fc678c302427de94f6688f0b61","PHxmaW1fcHJlZml4fD4KIyBXcml0ZSBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIG51bWJlciB4IGFuZCBldmFsdWF0ZXMgdGhlIGZvbGxvd2luZyBleHByZXNzaW9uOgojIHk9YWJzKHgzKStjb3MoM3jiiJLiiJLiiJopIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB5LiBIaW50OiBVc2UgdGhlIG1hdGggbW9kdWxlIQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBtYXRoCgoKZGVmIGV2YWx1YXRlX2V4cHJlc3Npb24obnVtX3gpOgo8fGZpbV9lbmR8Pg=="]
["68e7692b5b3870fc678c302427de94f6688f0b61-4","68e7692b5b3870fc678c302427de94f6688f0b61","PHxmaW1fcHJlZml4fD4KIyBXcml0ZSBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIG51bWJlciB4IGFuZCBldmFsdWF0ZXMgdGhlIGZvbGxvd2luZyBleHByZXNzaW9uOgojIHk9YWJzKHgzKStjb3MoM3jiiJLiiJLiiJopIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB5LiBIaW50OiBVc2UgdGhlIG1hdGggbW9kdWxlIQppbXBvcnQgbWF0aAoKCmRlZiBldmFsdWF0ZV9leHByZXNzaW9uKG51bV94KToKICAgIHJlc3VsdCA9IGFicyhtYXRoLnBvdyhudW1feCwgMykpICsgbWF0aC5jb3MobWF0aC5zcXJ0KDMqbnVtX3gpKQogICAgcmV0dXJuIHJlc3VsdAoKIyBvcgojCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBpbXBvcnQgbWF0aAojIGRlZiBfZXZhbHVhdGVfZXhwcmVzc2lvbl9zYW1wbGUzXyh4KToKIyAgICAgeSA9IGFicyh4KiozKSArIG1hdGguY29zKG1hdGguc3FydCgzKngpKQojICAgICByZXR1cm4geQo8fGZpbV9lbmR8Pg=="]
["68e7692b5b3870fc678c302427de94f6688f0b61-5","68e7692b5b3870fc678c302427de94f6688f0b61","PHxmaW1fcHJlZml4fD4KIyBXcml0ZSBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIG51bWJlciB4IGFuZCBldmFsdWF0ZXMgdGhlIGZvbGxvd2luZyBleHByZXNzaW9uOgojIHk9YWJzKHgzKStjb3MoM3jiiJLiiJLiiJopIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB5LiBIaW50OiBVc2UgdGhlIG1hdGggbW9kdWxlIQppbXBvcnQgbWF0aAoKCmRlZiBldmFsdWF0ZV9leHByZXNzaW9uKG51bV94KToKICAgIHJlc3VsdCA9IGFicyhtYXRoLnBvdyhudW1feCwgMykpICsgbWF0aC5jb3MobWF0aC5zcXJ0KDMqbnVtX3gpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICByZXR1cm4gcmVzdWx0Cgo8fGZpbV9lbmR8Pg=="]
["68fb5d9f680a1457a12d36e29b159b660c860268-1","68fb5d9f680a1457a12d36e29b159b660c860268","PHxmaW1fcHJlZml4fD4KIiIiCkRlc2lnbmVkIHRvIGNhbGN1bGF0ZSB0aGUgbGluZWFyIHJlZ3Jlc3Npb24gb2YgYW55IGRhdGEgcGFzc2VkIGluLgpNdXN0IHRha2UgaW4gYXQgbGVhc3QgdHdvIHNldHMgb2YgZGF0YSAoeCwgeSkgYXhpcyBpbiBvcmRlciBmb3IgYQpsaW5lYXIgcmVncmVzc2lvbiBsaW5lIHRvIGJlIGNhbGN1bGF0ZWQuCgpBdXRob3I6IEFzaHRvbiBGb3VsZ2VyClZlcnNpb246IDAuMDEsIDExLzMvMjEKUHl0aG9uLVZlcnNpb246IDMuMTAuMAoiIiIKCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKCiIiIgpUYWtlcyBpbiB0d28gc2V0cyBvZiBkYXRhIHRvIGNvbXB1dGUgdGhlIHN1bSBvZiBYIHRpbWVzIFkKdmFyaWFibGVzIGZyb20gYm90aCBzZXRzIG9mIGRhdGEuIFJldHVybmluZyBhbiBpbnQgdmFsdWUgb2YKdGhlIHN1bSBvZiB0aGUgdHdvIGRhdGEgYXJyYXlzLgoiIiIKZGVmIENvbXB1dGVfU3VtWFkoZGF0YTEsIGRhdGEyKToKICAgIGRhdGFfWFkgPSBbXQoKICAgIGZvciBuMSwgbjIgaW4gemlwKGRhdGExLCBkYXRhMik6CiAgICAgICAgZGF0YV9YWS5hcHBlbmQobjEgKiBuMikKCiAgICByZXR1cm4gc3VtKGRhdGFfWFkpICAKCiIiIgpUYWtlcyBpbiBhIGRhdGEgc2V0LCBhbiBhbHBoYSBhbmQgYmV0YSB2YWx1ZXMgdG8gY29tcHV0ZSBwb2ludHMKb24gdGhlIGxpbmVhciByZWdyZXNzaW9uIGxpbmUuIFRvIHRoZW4gYmUgdXNlZCB0byBwbG90IHRoZSBsaW5lIG9mIApyZWdyZXNzaW9uLgo8fGZpbV9ob2xlfD4KCiAgICBmb3IgaSBpbiByYW5nZShsZW4oZGF0YSkpOgogICAgICAgIHkgPSBhICsgYiAqIGRhdGFbaV0KICAgICAgICBzcXVhcmVQb2ludHMuYXBwZW5kKHkpCgogICAgcmV0dXJuIHNxdWFyZVBvaW50cyAKCiIiIgpDb21wdXRlcyB0aGUgU3VtIG9mIFNxdWFyZXMgRXJyb3IgdXNlZCBpbiBjYWxjdWxhdGluZyB0aGUKY29lZmZpY2llbnQgb2YgZGV0ZXJtaW5hdGlvbi4gVGFraW5nIGluIGEgZGF0YSBhcnJheSwgcG9pbnRzCihmb3VuZCBvbiBsaW5lIG9mIHJlZ3Jlc3Npb24pLCBhbmQgYW4gbiB2YWx1ZSB0byBhY3QgYXMgYSBjb3VudApmb3IgaG93IG1heSBwb2ludHMgd2UgbmVlZCB0byBzdW0uIFJldHVybmluZyBhbiBpbnQgdmFsdWUgb2YgdGhlIHN1bQpvZiBzcXVhcmVzIGVycm9yLgoiIiIKZGVmIENvbXB1dGVfU1NFKGRhdGEsIHNxdWFyZXMsIG4pOgogICAgdGVtcCA9IFtdCgogICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgICAgZGF0YVtpXSAtIHNxdWFyZXNbaV0KICAgICAgICB0ZW1wLmFwcGVuZCgoZGF0YVtpXSAtIHNxdWFyZXNbaV0pKioyKQoKICAgIHJldHVybiBzdW0odGVtcCkgICAKCiIiIgpDb21wdXRlcyB0aGUgU3VtIG9mIFNxdWFyZXMgVG90YWwgdXNlZCBpbiBjYWxjdWxhdGluZyB0aGUgY29lZmZpY2VudApvZiBkZXRlcm1pbmF0aW9uLiBUYWtpbmcgaW4gYSBkYXRhIGFycmF5LCBNZWFuIG9mIFkgYXhpcyBwb2ludHMsIGFuZCBhbgpuIHZhbHVlIHRvIGFjdCBhcyBhIGNvdW50IGZvciBob3cgbWFueSBwb2ludHMgd2UgbmVlZCB0byBzdW0uIFJldHVybmluZwphbiBpbnQgdmFsdWUgb2YgdGhlIHN1bSBvZiBzcXVhcmVzIHRvdGFsLgoiIiIKZGVmIENvbXB1dGVfU1NUKFlfZGF0YSwgWV9tZWFuLCBuKToKICAgIHRlbXAgPSBbXQogICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgICAgdGVtcC5hcHBlbmQoKFlfZGF0YVtpXSAtIFlfbWVhbikqKjIpCgogICAgcmV0dXJuIHN1bSh0ZW1wKQoKIiIiCkNvbXB1dGVzIHRoZSBDb2VmZmljZW50IG9mIERldGVybWluYXRpb24gZm9yIGxpbmVhciByZWdyZXNzaW9uIGxpbmUgZnJvbSB0aGUgZGF0YS4KVGFraW5nIGluIGEgU3VtIG9mIFNxdWFyZXMgRXJyb3IgaW50IHZhbHVlLCBhbmQgU3VtIG9mIFNxdWFyZXMgVG90YWwgaW4gdmFsdWUuClJldHVybmluZyBhbiBpbnQgdmFsdWUgb2YgUiBzcXVhcmVkLgoiIiIKZGVmIENvbXB1dGVfUl9TcXVhcmVkKFNTRSwgU1NUKToKICAgIFIgPSAxIC0gKFNTRSAvIFNTVCkKICAgIHJldHVybiBSCgojLS0tLS0tLS0tLS0tLS0tTElORV9PRl9CRVNUX0ZJVF9DQUxDVUxBVElPTi0tLS0tLS0tLS0tLS0tLSMKCiNEYXRhIEFycmF5cwpkYXRhX1ggPSBbMSwyLDMsNCw1LDZdCmRhdGFfWSA9IFswLDcsNiwxNCwxMSwxMF0KCiNEYXRhIFNhbXBsZSBNZWFucwptZWFuX1ggPSBucC5tZWFuKGRhdGFfWCkKbWVhbl9ZID0gbnAubWVhbihkYXRhX1kpCgojRGF0YSBTYW1wbGUgVmFyaWFuY2VzCnZhcmlhbmNlX1ggPSBucC52YXIoZGF0YV9YKQp2YXJpYW5jZV9ZID0gbnAudmFyKGRhdGFfWSkKCiNEYXRhIExpbmVhciBSZWdyZXNzaW9uIEVxdWF0aW9uIFZhcmlhYmxlcwpuID0gNgpzdW1YID0gc3VtKGRhdGFfWCkKc3VtWFggPSBzdW0obnAucG93ZXIoZGF0YV9YLCAyKSkKc3VtWSA9IHN1bShkYXRhX1kpCnN1bVhZID0gQ29tcHV0ZV9TdW1YWShkYXRhX1gsIGRhdGFfWSkKYSA9ICgoc3VtWSAqIHN1bVhYKSAtIChzdW1YICogc3VtWFkpKSAvICgobiAqIHN1bVhYKSAtIChzdW1YKSoqMikKYiA9ICgobiAqIHN1bVhZKSAtIChzdW1YICogc3VtWSkpIC8gKChuICogc3VtWFgpIC0gKHN1bVgpKioyKQoKI0RhdGEgQ29lZmZpY2VudCBvZiBEZXRlcm1pbmF0aW9uIFZhcmlhYmxlCmxpbmVPZkJlc3RGaXRTcXVhcmVzID0gQ29tcHV0ZV9SZWdyZXNzaW9uX1Nsb3BlX1BvaW50cyhkYXRhX1gsIGEsIGIpClNTRSA9IENvbXB1dGVfU1NFKGRhdGFfWSwgbGluZU9mQmVzdEZpdFNxdWFyZXMsIG4pClNTVCA9IENvbXB1dGVfU1NUKGRhdGFfWSwgbWVhbl9ZLCBuKQpSID0gQ29tcHV0ZV9SX1NxdWFyZWQoU1NFLCBTU1QpCgojUHJpbnQgTGluZWFyIFJlZ3Jlc3Npb24gVmFsdWVzICYgQ29lZmZpY2VudCBvZiBEZXRlcm1pbmF0aW9uCnByaW50KCJcbiIpCnByaW50KCJNZWFuIFggOiAiICsgc3RyKG1lYW5fWCkpCnByaW50KCJNZWFuIFkgOiAiICsgc3RyKG1lYW5fWSkpCnByaW50KCJWYXJpYW5jZSBYIDogIiArIHN0cihyb3VuZCh2YXJpYW5jZV9YICwgMikpKQpwcmludCgiVmFyaWFuY2UgWSA6ICIgKyBzdHIocm91bmQodmFyaWFuY2VfWSwgMikpKQpwcmludCgiU3VtIFggOiAiICsgc3RyKHN1bVgpKQpwcmludCgiU3VtIFhYIDogIiArIHN0cihzdW1YWCkpCnByaW50KCJTdW0gWSA6ICIgKyBzdHIoc3VtWSkpCnByaW50KCJTdW0gWFkgOiAiICsgc3RyKHN1bVhZKSkKcHJpbnQoIlZhciBhIDogIiArIHN0cihhKSkKcHJpbnQoIlZhciBiIDsgIiArIHN0cihiKSkKcHJpbnQoIlNTRSA6ICIgKyBzdHIoU1NFKSkKcHJpbnQoIlNTVCA6ICIgKyBzdHIoU1NUKSkKcHJpbnQoIlJeMiA6ICIgKyBzdHIoUikpCnByaW50KCJcbiIpCgojRGlzcGxheSBMaW5lYXIgUmVncmVzc2lvbiBHcmFwaApwbHQuc2NhdHRlcihkYXRhX1gsZGF0YV9ZLCBtYXJrZXIgPSAnZCcsIGNvbG9yID0gJ2JsdWUnKQpwbHQucGxvdChkYXRhX1gsIGRhdGFfWSwgY29sb3IgPSAnYmx1ZScpCnBsdC5zY2F0dGVyKGRhdGFfWCwgbGluZU9mQmVzdEZpdFNxdWFyZXMsIG1hcmtlciA9ICdzJywgY29sb3IgPSAncmVkJykKcGx0LnBsb3QoZGF0YV9YLCBsaW5lT2ZCZXN0Rml0U3F1YXJlcywgY29sb3IgPSAncmVkJykKcGx0LnNob3coKQo8fGZpbV9zdWZmaXh8PgoiIiIKZGVmIENvbXB1dGVfUmVncmVzc2lvbl9TbG9wZV9Qb2ludHMoZGF0YSwgYSwgYik6CiAgICB5ID0gMAogICAgc3F1YXJlUG9pbnRzID0gW10KPHxmaW1fZW5kfD4="]
["68fb5d9f680a1457a12d36e29b159b660c860268-2","68fb5d9f680a1457a12d36e29b159b660c860268","PHxmaW1fcHJlZml4fD4KIiIiCkRlc2lnbmVkIHRvIGNhbGN1bGF0ZSB0aGUgbGluZWFyIHJlZ3Jlc3Npb24gb2YgYW55IGRhdGEgcGFzc2VkIGluLgpNdXN0IHRha2UgaW4gYXQgbGVhc3QgdHdvIHNldHMgb2YgZGF0YSAoeCwgeSkgYXhpcyBpbiBvcmRlciBmb3IgYQpsaW5lYXIgcmVncmVzc2lvbiBsaW5lIHRvIGJlIGNhbGN1bGF0ZWQuCgpBdXRob3I6IEFzaHRvbiBGb3VsZ2VyClZlcnNpb246IDAuMDEsIDExLzMvMjEKUHl0aG9uLVZlcnNpb246IDMuMTAuMAoiIiIKCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKCiIiIgpUYWtlcyBpbiB0d28gc2V0cyBvZiBkYXRhIHRvIGNvbXB1dGUgdGhlIHN1bSBvZiBYIHRpbWVzIFkKdmFyaWFibGVzIGZyb20gYm90aCBzZXRzIG9mIGRhdGEuIFJldHVybmluZyBhbiBpbnQgdmFsdWUgb2YKdGhlIHN1bSBvZiB0aGUgdHdvIGRhdGEgYXJyYXlzLgoiIiIKZGVmIENvbXB1dGVfU3VtWFkoZGF0YTEsIGRhdGEyKToKICAgIGRhdGFfWFkgPSBbXQoKICAgIGZvciBuMSwgbjIgaW4gemlwKGRhdGExLCBkYXRhMik6CiAgICAgICAgZGF0YV9YWS5hcHBlbmQobjEgKiBuMikKCiAgICByZXR1cm4gc3VtKGRhdGFfWFkpICAKCiIiIgpUYWtlcyBpbiBhIGRhdGEgc2V0LCBhbiBhbHBoYSBhbmQgYmV0YSB2YWx1ZXMgdG8gY29tcHV0ZSBwb2ludHMKb24gdGhlIGxpbmVhciByZWdyZXNzaW9uIGxpbmUuIFRvIHRoZW4gYmUgdXNlZCB0byBwbG90IHRoZSBsaW5lIG9mIApyZWdyZXNzaW9uLgoiIiIKZGVmIENvbXB1dGVfUmVncmVzc2lvbl9TbG9wZV9Qb2ludHMoZGF0YSwgYSwgYik6CiAgICB5ID0gMAogICAgc3F1YXJlUG9pbnRzID0gW10KCiAgICBmb3IgaSBpbiByYW5nZShsZW4oZGF0YSkpOgogICAgICAgIHkgPSBhICsgYiAqIGRhdGFbaV0KICAgICAgICBzcXVhcmVQb2ludHMuYXBwZW5kKHkpCgogICAgcmV0dXJuIHNxdWFyZVBvaW50cyAKCiIiIgpDb21wdXRlcyB0aGUgU3VtIG9mIFNxdWFyZXMgRXJyb3IgdXNlZCBpbiBjYWxjdWxhdGluZyB0aGUKY29lZmZpY2llbnQgb2YgZGV0ZXJtaW5hdGlvbi4gVGFraW5nIGluIGEgZGF0YSBhcnJheSwgcG9pbnRzCihmb3VuZCBvbiBsaW5lIG9mIHJlZ3Jlc3Npb24pLCBhbmQgYW4gbiB2YWx1ZSB0byBhY3QgYXMgYSBjb3VudApmb3IgaG93IG1heSBwb2ludHMgd2UgbmVlZCB0byBzdW0uIFJldHVybmluZyBhbiBpbnQgdmFsdWUgb2YgdGhlIHN1bQpvZiBzcXVhcmVzIGVycm9yLgoiIiIKZGVmIENvbXB1dGVfU1NFKGRhdGEsIHNxdWFyZXMsIG4pOgogICAgdGVtcCA9IFtdCgogICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgICAgZGF0YVtpXSAtIHNxdWFyZXNbaV0KICAgICAgICB0ZW1wLmFwcGVuZCgoZGF0YVtpXSAtIHNxdWFyZXNbaV0pKioyKQoKICAgIHJldHVybiBzdW0odGVtcCkgICAKCiIiIgpDb21wdXRlcyB0aGUgU3VtIG9mIFNxdWFyZXMgVG90YWwgdXNlZCBpbiBjYWxjdWxhdGluZyB0aGUgY29lZmZpY2VudApvZiBkZXRlcm1pbmF0aW9uLiBUYWtpbmcgaW4gYSBkYXRhIGFycmF5LCBNZWFuIG9mIFkgYXhpcyBwb2ludHMsIGFuZCBhbgpuIHZhbHVlIHRvIGFjdCBhcyBhIGNvdW50IGZvciBob3cgbWFueSBwb2ludHMgd2UgbmVlZCB0byBzdW0uIFJldHVybmluZwphbiBpbnQgdmFsdWUgb2YgdGhlIHN1bSBvZiBzcXVhcmVzIHRvdGFsLgoiIiIKZGVmIENvbXB1dGVfU1NUKFlfZGF0YSwgWV9tZWFuLCBuKToKICAgIHRlbXAgPSBbXQogICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgICAgdGVtcC5hcHBlbmQoKFlfZGF0YVtpXSAtIFlfbWVhbikqKjIpCgogICAgcmV0dXJuIHN1bSh0ZW1wKQoKIiIiCkNvbXB1dGVzIHRoZSBDb2VmZmljZW50IG9mIERldGVybWluYXRpb24gZm9yIGxpbmVhciByZWdyZXNzaW9uIGxpbmUgZnJvbSB0aGUgZGF0YS4KVGFraW5nIGluIGEgU3VtIG9mIFNxdWFyZXMgRXJyb3IgaW50IHZhbHVlLCBhbmQgU3VtIG9mIFNxdWFyZXMgVG90YWwgaW4gdmFsdWUuClJldHVybmluZyBhbiBpbnQgdmFsdWUgb2YgUiBzcXVhcmVkLgoiIiIKZGVmIENvbXB1dGVfUl9TcXVhcmVkKFNTRSwgU1NUKToKICAgIFIgPSAxIC0gKFNTRSAvIFNTVCkKICAgIHJldHVybiBSCgojLS0tLS0tLS0tLS0tLS0tTElORV9PRl9CRVNUX0ZJVF9DQUxDVUxBVElPTi0tLS0tLS0tLS0tLS0tLSMKCiNEYXRhIEFycmF5cwpkYXRhX1ggPSBbMSwyLDMsNCw1LDZdCmRhdGFfWSA9IFswLDcsNiwxNCwxMSwxMF0KCiNEYXRhIFNhbXBsZSBNZWFucwptZWFuX1ggPSBucC5tZWFuKGRhdGFfWCkKbWVhbl9ZID0gbnAubWVhbihkYXRhX1kpCgojRGF0YSBTYW1wbGUgVmFyaWFuY2VzCnZhcmlhbmNlX1ggPSBucC52YXIoZGF0YV9YKQp2YXJpYW5jZV9ZID0gbnAudmFyKGRhdGFfWSkKCiNEYXRhIExpbmVhciBSZWdyZXNzaW9uIEVxdWF0aW9uIFZhcmlhYmxlcwpuID0gNgpzdW1YID0gc3VtKGRhdGFfWCkKc3VtWFggPSBzdW0obnAucG93ZXIoZGF0YV9YLCAyKSkKc3VtWSA9IHN1bShkYXRhX1kpCnN1bVhZID0gQ29tcHV0ZV9TdW1YWShkYXRhX1gsIGRhdGFfWSkKYSA9ICgoc3VtWSAqIHN1bVhYKSAtIChzdW1YICogc3VtWFkpKSAvICgobiAqIHN1bVhYKSAtIChzdW1YKSoqMikKYiA9ICgobiAqIHN1bVhZKSAtIChzdW1YICogc3VtWSkpIC8gKChuICogc3VtWFgpIC0gKHN1bVgpKioyKQoKI0RhdGEgQ29lZmZpY2VudCBvZiBEZXRlcm1pbmF0aW9uIFZhcmlhYmxlCmxpbmVPZkJlc3RGaXRTcXVhcmVzID0gQ29tcHV0ZV9SZWdyZXNzaW9uX1Nsb3BlX1BvaW50cyhkYXRhX1gsIGEsIGIpClNTRSA9IENvbXB1dGVfU1NFKGRhdGFfWSwgbGluZU9mQmVzdEZpdFNxdWFyZXMsIG4pClNTVCA9IENvbXB1dGVfU1NUKGRhdGFfWSwgbWVhbl9ZLCBuKQpSID0gQ29tcHV0ZV9SX1NxdWFyZWQoU1NFLCBTU1QpCgojUHJpbnQgTGluZWFyIFJlZ3Jlc3Npb24gVmFsdWVzICYgQ29lZmZpY2VudCBvZiBEZXRlcm1pbmF0aW9uCnByaW50KCJcbiIpCnByaW50KCJNZWFuIFggOiAiICsgc3RyKG1lYW5fWCkpCnByaW50KCJNZWFuIFkgOiAiICsgc3RyKG1lYW5fWSkpCnByaW50KCJWYXJpYW5jZSBYIDogIiArIHN0cihyb3VuZCh2YXJpYW5jZV9YICwgMikpKQpwcmludCgiVmFyaWFuY2UgWSA6ICIgKyBzdHIocm91bmQodmFyaWFuY2VfWSwgMikpKQpwcmludCgiU3VtIFggOiAiICsgc3RyKHN1bVgpKQpwcmludCgiU3VtIFhYIDogIiArIHN0cihzdW1YWCkpCnByaW50KCJTdW0gWSA6ICIgKyBzdHIoc3VtWSkpCnByaW50KCJTdW0gWFkgOiAiICsgc3RyKHN1bVhZKSkKcHJpbnQoIlZhciBhIDogIiArIHN0cihhKSkKcHJpbnQoIlZhciBiIDsgIiArIHN0cihiKSkKPHxmaW1faG9sZXw+CgojRGlzcGxheSBMaW5lYXIgUmVncmVzc2lvbiBHcmFwaApwbHQuc2NhdHRlcihkYXRhX1gsZGF0YV9ZLCBtYXJrZXIgPSAnZCcsIGNvbG9yID0gJ2JsdWUnKQpwbHQucGxvdChkYXRhX1gsIGRhdGFfWSwgY29sb3IgPSAnYmx1ZScpCnBsdC5zY2F0dGVyKGRhdGFfWCwgbGluZU9mQmVzdEZpdFNxdWFyZXMsIG1hcmtlciA9ICdzJywgY29sb3IgPSAncmVkJykKcGx0LnBsb3QoZGF0YV9YLCBsaW5lT2ZCZXN0Rml0U3F1YXJlcywgY29sb3IgPSAncmVkJykKcGx0LnNob3coKQo8fGZpbV9zdWZmaXh8PgpwcmludCgiU1NFIDogIiArIHN0cihTU0UpKQpwcmludCgiU1NUIDogIiArIHN0cihTU1QpKQpwcmludCgiUl4yIDogIiArIHN0cihSKSkKcHJpbnQoIlxuIikKPHxmaW1fZW5kfD4="]
["68fb5d9f680a1457a12d36e29b159b660c860268-3","68fb5d9f680a1457a12d36e29b159b660c860268","PHxmaW1fcHJlZml4fD4KIiIiCkRlc2lnbmVkIHRvIGNhbGN1bGF0ZSB0aGUgbGluZWFyIHJlZ3Jlc3Npb24gb2YgYW55IGRhdGEgcGFzc2VkIGluLgpNdXN0IHRha2UgaW4gYXQgbGVhc3QgdHdvIHNldHMgb2YgZGF0YSAoeCwgeSkgYXhpcyBpbiBvcmRlciBmb3IgYQpsaW5lYXIgcmVncmVzc2lvbiBsaW5lIHRvIGJlIGNhbGN1bGF0ZWQuCgpBdXRob3I6IEFzaHRvbiBGb3VsZ2VyClZlcnNpb246IDAuMDEsIDExLzMvMjEKUHl0aG9uLVZlcnNpb246IDMuMTAuMAoiIiIKCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKCiIiIgpUYWtlcyBpbiB0d28gc2V0cyBvZiBkYXRhIHRvIGNvbXB1dGUgdGhlIHN1bSBvZiBYIHRpbWVzIFkKdmFyaWFibGVzIGZyb20gYm90aCBzZXRzIG9mIGRhdGEuIFJldHVybmluZyBhbiBpbnQgdmFsdWUgb2YKdGhlIHN1bSBvZiB0aGUgdHdvIGRhdGEgYXJyYXlzLgoiIiIKZGVmIENvbXB1dGVfU3VtWFkoZGF0YTEsIGRhdGEyKToKICAgIGRhdGFfWFkgPSBbXQoKICAgIGZvciBuMSwgbjIgaW4gemlwKGRhdGExLCBkYXRhMik6CiAgICAgICAgZGF0YV9YWS5hcHBlbmQobjEgKiBuMikKCiAgICByZXR1cm4gc3VtKGRhdGFfWFkpICAKCiIiIgpUYWtlcyBpbiBhIGRhdGEgc2V0LCBhbiBhbHBoYSBhbmQgYmV0YSB2YWx1ZXMgdG8gY29tcHV0ZSBwb2ludHMKb24gdGhlIGxpbmVhciByZWdyZXNzaW9uIGxpbmUuIFRvIHRoZW4gYmUgdXNlZCB0byBwbG90IHRoZSBsaW5lIG9mIApyZWdyZXNzaW9uLgoiIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpkZWYgQ29tcHV0ZV9SZWdyZXNzaW9uX1Nsb3BlX1BvaW50cyhkYXRhLCBhLCBiKToKICAgIHkgPSAwCiAgICBzcXVhcmVQb2ludHMgPSBbXQoKPHxmaW1fZW5kfD4="]
["68fb5d9f680a1457a12d36e29b159b660c860268-4","68fb5d9f680a1457a12d36e29b159b660c860268","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIiIiCkRlc2lnbmVkIHRvIGNhbGN1bGF0ZSB0aGUgbGluZWFyIHJlZ3Jlc3Npb24gb2YgYW55IGRhdGEgcGFzc2VkIGluLgpNdXN0IHRha2UgaW4gYXQgbGVhc3QgdHdvIHNldHMgb2YgZGF0YSAoeCwgeSkgYXhpcyBpbiBvcmRlciBmb3IgYQpsaW5lYXIgcmVncmVzc2lvbiBsaW5lIHRvIGJlIGNhbGN1bGF0ZWQuCjx8ZmltX2VuZHw+"]
["68fb5d9f680a1457a12d36e29b159b660c860268-5","68fb5d9f680a1457a12d36e29b159b660c860268","PHxmaW1fcHJlZml4fD4KIiIiCkRlc2lnbmVkIHRvIGNhbGN1bGF0ZSB0aGUgbGluZWFyIHJlZ3Jlc3Npb24gb2YgYW55IGRhdGEgcGFzc2VkIGluLgpNdXN0IHRha2UgaW4gYXQgbGVhc3QgdHdvIHNldHMgb2YgZGF0YSAoeCwgeSkgYXhpcyBpbiBvcmRlciBmb3IgYQpsaW5lYXIgcmVncmVzc2lvbiBsaW5lIHRvIGJlIGNhbGN1bGF0ZWQuCgpBdXRob3I6IEFzaHRvbiBGb3VsZ2VyClZlcnNpb246IDAuMDEsIDExLzMvMjEKUHl0aG9uLVZlcnNpb246IDMuMTAuMAoiIiIKCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKCiIiIgpUYWtlcyBpbiB0d28gc2V0cyBvZiBkYXRhIHRvIGNvbXB1dGUgdGhlIHN1bSBvZiBYIHRpbWVzIFkKdmFyaWFibGVzIGZyb20gYm90aCBzZXRzIG9mIGRhdGEuIFJldHVybmluZyBhbiBpbnQgdmFsdWUgb2YKdGhlIHN1bSBvZiB0aGUgdHdvIGRhdGEgYXJyYXlzLgoiIiIKZGVmIENvbXB1dGVfU3VtWFkoZGF0YTEsIGRhdGEyKToKICAgIGRhdGFfWFkgPSBbXQoKICAgIGZvciBuMSwgbjIgaW4gemlwKGRhdGExLCBkYXRhMik6CiAgICAgICAgZGF0YV9YWS5hcHBlbmQobjEgKiBuMikKCiAgICByZXR1cm4gc3VtKGRhdGFfWFkpICAKCiIiIgpUYWtlcyBpbiBhIGRhdGEgc2V0LCBhbiBhbHBoYSBhbmQgYmV0YSB2YWx1ZXMgdG8gY29tcHV0ZSBwb2ludHMKb24gdGhlIGxpbmVhciByZWdyZXNzaW9uIGxpbmUuIFRvIHRoZW4gYmUgdXNlZCB0byBwbG90IHRoZSBsaW5lIG9mIApyZWdyZXNzaW9uLgoiIiIKZGVmIENvbXB1dGVfUmVncmVzc2lvbl9TbG9wZV9Qb2ludHMoZGF0YSwgYSwgYik6CiAgICB5ID0gMAogICAgc3F1YXJlUG9pbnRzID0gW10KCiAgICBmb3IgaSBpbiByYW5nZShsZW4oZGF0YSkpOgogICAgICAgIHkgPSBhICsgYiAqIGRhdGFbaV0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNxdWFyZVBvaW50cy5hcHBlbmQoeSkKCjx8ZmltX2VuZHw+"]
["68fafb9927ae75cf16e0974cb99fe43ed2607b6d-1","68fafb9927ae75cf16e0974cb99fe43ed2607b6d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBpY2tsZQppbXBvcnQgcmUKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKZnJvbSBtcGxfdG9vbGtpdHMubXBsb3QzZCBpbXBvcnQgQXhlczNECmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0IHRyYWluX3Rlc3Rfc3BsaXQKZnJvbSBza2xlYXJuLnN2bSBpbXBvcnQgU1ZDCmZyb20gc2tsZWFybi5saW5lYXJfbW9kZWwgaW1wb3J0IExvZ2lzdGljUmVncmVzc2lvbgpmcm9tIHNrbGVhcm4udHJlZSBpbXBvcnQgRGVjaXNpb25UcmVlQ2xhc3NpZmllcgpmcm9tIHNrbGVhcm4ubmFpdmVfYmF5ZXMgaW1wb3J0IEdhdXNzaWFuTkIKZnJvbSBza2xlYXJuLm5laWdoYm9ycyBpbXBvcnQgS05laWdoYm9yc0NsYXNzaWZpZXIKZnJvbSBza2xlYXJuLmVuc2VtYmxlIGltcG9ydCBHcmFkaWVudEJvb3N0aW5nQ2xhc3NpZmllcgoKCgoKZGVmIHByZXBhcmVUYWdzKCk6CiAgICBhbGxUYWdzID0gc2V0KCkKICAgIGNvdW50ID0gMAoKICAgIGZvciBpIGluIHJhbmdlKDE5Nyk6CiAgICAgICAgcGF0aCA9ICdyYXcgZGF0YS9ib29rVGFncy9ib29rc1RhZ3NfJXMucGlja2xlJyVzdHIoaSkKICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgZGF0YSA9IHBpY2tsZS5sb2FkKGZpbGUpCjx8ZmltX2hvbGV8PgogICAgICAgICAgICBjb3VudCArPSAxCiAgICB3aXRoIG9wZW4oJ3JhdyBkYXRhL2Jvb2tUYWdzLnBpY2tsZScsICd3YicpIGFzIGZpbGU6CiAgICAgICAgcGlja2xlLmR1bXAobGlzdChhbGxUYWdzKSwgZmlsZSkKICAgIHByaW50KGxlbihhbGxUYWdzKSkKICAgIHByaW50KGNvdW50KQoKCiMgcHJlcGFyZVRhZ3MoKSAjIDE5NTU4IGJvb2tzICAgICMzODQwIFRhZ3MKCgpkZWYgZ2V0Qm9va0RhdGFGcmFtZSgpOgogICAgd2l0aCBvcGVuKCdyYXcgZGF0YS9ib29rVGFncy5waWNrbGUnLCAncmInKSBhcyBmaWxlOgogICAgICAgIGluZGV4ZXMgPSBsaXN0KHBpY2tsZS5sb2FkKGZpbGUpKQoKICAgICMgdmFsaWQgbnVtYmVyIG9mIGJvb2tzIHdpdGggdGFnIGluZm9ybWF0aW9uIGlzIDE0MDYxCgogICAgYm9va01hdHJpeCA9IG5wLnplcm9zKCgzODQwLCAxNDA2MSkpCiAgICBib29rcyA9IGxpc3QoKQogICAgY291bnQgPSAwCiAgICBmb3IgaSBpbiByYW5nZSgxOTcpOgogICAgICAgIHBhdGggPSAncmF3IGRhdGEvYm9va1RhZ3MvYm9va3NUYWdzXyVzLnBpY2tsZScgJSBzdHIoaSkKICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgZGF0YSA9IHBpY2tsZS5sb2FkKGZpbGUpCgogICAgICAgIGZvciBrZXkgaW4gZGF0YS5rZXlzKCk6CiAgICAgICAgICAgIGlmIGtleSBub3QgaW4gYm9va3M6CiAgICAgICAgICAgICAgICBpZiBsZW4oZGF0YVtrZXldKSA+IDA6CiAgICAgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gZGF0YVtrZXldOgogICAgICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29rTWF0cml4W2luZGV4ZXMuaW5kZXgoaXRlbSldW2NvdW50XSArPSAxCiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAgICAgICAgIGJvb2tzLmFwcGVuZChrZXkpCiAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gMQogICAgYm9va0RhdGFGcmFtZSA9IHBkLkRhdGFGcmFtZShib29rTWF0cml4LCBpbmRleGVzLCBib29rcykKICAgICMgc2F2ZSB0aGUgaW5mb3JtYXRpb24gZm9yIGVhY2ggZmlsbQogICAgIyBib29rRGF0YUZyYW1lLnRvX2NzdigncmF3IGRhdGEvYm9va0luZm9tYXRpb24uY3N2JykKICAgICMgd2l0aCBvcGVuKCdyYXcgZGF0YS9ib29rRGF0YUZyYW1lLnBpY2tsZScsICd3YicpIGFzIGZpbGU6CiAgICAjICAgICBwaWNrbGUuZHVtcChib29rRGF0YUZyYW1lLCBmaWxlKQogICAgcmV0dXJuIGJvb2tEYXRhRnJhbWUsIGluZGV4ZXMKCgoKCmRlZiBnZXRVc2VySWRzKHR5cGUpOgogICAgdXNlcklkID0gc2V0KCkKCiAgICBmb3IgaSBpbiByYW5nZSgyMCk6CiAgICAgICAgd2l0aCBvcGVuKCd1c2VyTW92aWVzQm9va3NfJXNQZW9wbGUvcmVjb3JkXyVzLnBpY2tsZSclKHR5cGUsIHN0cihpKSksICdyYicpIGFzIGZpbGU6CiAgICAgICAgICAgIGRhdGEgPSBwaWNrbGUubG9hZChmaWxlKQogICAgICAgIGZvciBrZXkgaW4gZGF0YS5rZXlzKCk6CiAgICAgICAgICAgIHVzZXJJZC5hZGQoa2V5KQogICAgdXNlcklkID0gbGlzdCh1c2VySWQpCiAgICB3aXRoIG9wZW4oJ3VzZXJNb3ZpZXNCb29rc18lc1Blb3BsZS91c2VySWQucGlja2xlJyV0eXBlLCAnd2InKSBhcyBmaWxlOgogICAgICAgIHBpY2tsZS5kdW1wKHVzZXJJZCwgZmlsZSkKCmRlZiBnZXRNYXRyaXgodHlwZSk6CgogICAgI3R5cGUgPT0gRG9nL0NhdAoKICAgIGRmLCBpbmRleGVzID0gZ2V0Qm9va0RhdGFGcmFtZSgpCiAgICB3aXRoIG9wZW4oJ3VzZXJNb3ZpZXNCb29rc18lc1Blb3BsZS91c2VySWQucGlja2xlJyAlIHR5cGUsICdyYicpIGFzIGZpbGU6CiAgICAgICAgdXNlcklkcyA9IHBpY2tsZS5sb2FkKGZpbGUpCgogICAgUGVvcGxlRGF0YUZyYW1lID0gcGQuRGF0YUZyYW1lKG5wLnplcm9zKCgzODQwLCAyMDAxKSksIGluZGV4ZXMsIHVzZXJJZHMpCiAgICBjb3VudCA9IDAKCiAgICBkZWZhdWx0VmFsdWUgPSAxLzM4NDAKICAgIGZvciBpIGluIHJhbmdlKDIwKToKICAgICAgICB3aXRoIG9wZW4oJ3VzZXJNb3ZpZXNCb29rc18lc1Blb3BsZS9yZWNvcmRfJXMucGlja2xlJyAlICh0eXBlLCBzdHIoaSkpLCAncmInKSBhcyBmaWxlOgogICAgICAgICAgICBkYXRhID0gcGlja2xlLmxvYWQoZmlsZSkKCiAgICAgICAgZm9yIGtleSBpbiBkYXRhLmtleXMoKToKICAgICAgICAgICAgYm9va0xpc3QgPSBkYXRhW2tleV1bJ2Jvb2snXQoKICAgICAgICAgICAgaWYgbGVuKGJvb2tMaXN0KSAhPSAwOgogICAgICAgICAgICAgICAgayA9IGxlbihib29rTGlzdCkKICAgICAgICAgICAgICAgIGxpa2VzID0gW10KICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGJvb2tMaXN0OgogICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgbGlrZXMuYXBwZW5kKGRmW2l0ZW1dKQogICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgaWYgbGVuKGxpa2VzKSAhPSAwOgogICAgICAgICAgICAgICAgICAgIFBlb3BsZURhdGFGcmFtZVtrZXldID0gc3VtKGxpa2VzKS9rCiAgICAgICAgICAgICAgICAgICAgIyBjb3VudCArPSAxCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICMgZGVsIFBlb3BsZURhdGFGcmFtZVtrZXldCiAgICAgICAgICAgICAgICAgICAgUGVvcGxlRGF0YUZyYW1lW2tleV0gPSBkZWZhdWx0VmFsdWUKCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAjIGRlbCBQZW9wbGVEYXRhRnJhbWVba2V5XQogICAgICAgICAgICAgICAgUGVvcGxlRGF0YUZyYW1lW2tleV0gPSBkZWZhdWx0VmFsdWUKCiAgICAgICAgICAgIGNvdW50ICs9IDEKCiAgICBwcmludChjb3VudCkKICAgIFBlb3BsZURhdGFGcmFtZSA9IFBlb3BsZURhdGFGcmFtZS50cmFuc3Bvc2UoKQogICAgIyBwcmludCgiJXNQZW9wbGUgaGFzICVzICIlKHR5cGUsIHN0cihjb3VudCkpKQogICAgUGVvcGxlRGF0YUZyYW1lLnRvX2NzdignVHJhaW5pbmdEYXRhLyVzUGVvcGxlQm9va19ub3JtYWxpemVkLmNzdicldHlwZSkKICAgIHJldHVybiBQZW9wbGVEYXRhRnJhbWUKCiMgZ2V0VXNlcklkcygnRG9nJykKIyBnZXRNYXRyaXgoJ0RvZycpCiMgZ2V0VXNlcklkcygnQ2F0JykKIyBnZXRNYXRyaXgoJ0NhdCcpCgoKJycnCgpEb2dQZW9wbGUgaGFzIDY1MSAgCkNhdFBlb3BsZSBoYXMgNzE4ICAKCgonJycKCiMgZG9nQm9va01hdHJpeCA9IGdldE1hdHJpeCgnRG9nJykKIyBkb2dCb29rTWF0cml4ID0gbnAuYXJyYXkoZG9nQm9va01hdHJpeCkKIyB3aXRoIG9wZW4oJ1RyYWluaW5nRGF0YS9kb2dCb29rTWF0cml4LnBpY2tsZScsICd3YicpIGFzIGZpbGU6CiMgICAgIHBpY2tsZS5kdW1wKGRvZ0Jvb2tNYXRyaXgsIGZpbGUpCndpdGggb3BlbignVHJhaW5pbmdEYXRhL2RvZ0Jvb2tNYXRyaXgucGlja2xlJywgJ3JiJykgYXMgZmlsZToKICAgIGRvZ0Jvb2tNYXRyaXggPSBwaWNrbGUubG9hZChmaWxlKQoKIyBjYXRCb29rTWF0cml4ID0gZ2V0TWF0cml4KCdDYXQnKQojIGNhdEJvb2tNYXRyaXggPSBucC5hcnJheShjYXRCb29rTWF0cml4KQojIHdpdGggb3BlbignVHJhaW5pbmdEYXRhL2NhdEJvb2tNYXRyaXgucGlja2xlJywgJ3diJykgYXMgZmlsZToKIyAgICAgcGlja2xlLmR1bXAoY2F0Qm9va01hdHJpeCwgZmlsZSkKd2l0aCBvcGVuKCdUcmFpbmluZ0RhdGEvY2F0Qm9va01hdHJpeC5waWNrbGUnLCAncmInKSBhcyBmaWxlOgogICAgY2F0Qm9va01hdHJpeCA9IHBpY2tsZS5sb2FkKGZpbGUpCgoKZGVmIGRhdGFNaW5pbmcobWF0cml4MSwgbWF0cml4Mik6CgogICAgZG9nTGlzdCA9IG1hdHJpeDEudG9saXN0KCkKICAgIGNhdExpc3QgPSBtYXRyaXgyLnRvbGlzdCgpCgogICAgZG9nTGlzdC5leHRlbmQoY2F0TGlzdCkKICAgIHdob2xlTGlzdCA9IGRvZ0xpc3QKICAgICMgd2hvbGVMaXN0VCA9IG5wLmFycmF5KHdob2xlTGlzdCkudHJhbnNwb3NlKCkudG9saXN0KCkKICAgICNubyBuZWVkIGZvciB0Zi1pZGYKICAgICMgd2hvbGVMaXN0ID0gZ2V0VEZJREYod2hvbGVMaXN0LCB3aG9sZUxpc3RUKQoKCiAgICAjIDAgZm9yIGRvZyAxIGZvciBjYXQKICAgIGxhYmVscyA9IG5wLnplcm9zKCgxLCAyMDAxKSkudG9saXN0KClbMF0KICAgIGxhYmVscy5leHRlbmQobnAub25lcygoMSwgMjAwMSkpLnRvbGlzdCgpWzBdKQoKCiAgICBkYXRhID0gbnAuYXJyYXkod2hvbGVMaXN0KQogICAgbWF0cml4X21lYW4gPSBucC5tZWFuKGRhdGEsIDApCgogICAgbWF0cml4X2hhdCA9IGRhdGEgLSBtYXRyaXhfbWVhbgoKCiAgICBVLCBELCBWID0gbnAubGluYWxnLnN2ZChtYXRyaXhfaGF0LCBmdWxsX21hdHJpY2VzPUZhbHNlKQogICAgIwogICAgIyAjIyBmaW5kIDkwJSBvZiB0aGUgc3VtIG9mIHRoZSBlaWdlbnZhbHVlcwogICAgIwogICAgdGVtcCA9IDAuMAogICAgY291bnQgPSAwCiAgICBmb3IgaXRlbSBpbiBEOgogICAgICAgIGlmIHRlbXAgPD0gKHN1bShEKSowLjkpOgogICAgICAgICAgICB0ZW1wICs9IGl0ZW0KICAgICAgICAgICAgY291bnQgKz0gMQogICAgcHJpbnQoJ3JlZHVjZSB0aGUgZGltZW5zaW9uIHRvOiAnLCBjb3VudCkKICAgICMgcHJpbnQoKERbMF0rRFsxXStEWzJdK0RbM10rRFs0XSkvc3VtKEQpKQogICAgZGltZW5zaW9uUmVkdWN0aW9uTWF0cml4ID0gbnAubWF0KFZbMDpjb3VudCwgOl0pLnRyYW5zcG9zZSgpCiAgICBtYXRyaXhfcHJvamVjdGVkID0gbnAuZG90KG1hdHJpeF9oYXQsIGRpbWVuc2lvblJlZHVjdGlvbk1hdHJpeCkKICAgIG1hdHJpeF9wcm9qZWN0ZWQgPSBtYXRyaXhfcHJvamVjdGVkLnRvbGlzdCgpCiAgICAjIGZpZyA9IHBsdC5maWd1cmUoKQogICAgIyBwbHQuc2NhdHRlcihbdFswXSBmb3IgdCBpbiBtYXRyaXhfcHJvamVjdGVkWzo5NDJdXSwgW3RbMV0gZm9yIHQgaW4gbWF0cml4X3Byb2plY3RlZFs6OTQyXV0sIGM9J3JlZCcsIGFscGhhPTAuMykKICAgICMgcGx0LnNjYXR0ZXIoW3RbMF0gZm9yIHQgaW4gbWF0cml4X3Byb2plY3RlZFs5NDI6XV0sIFt0WzFdIGZvciB0IGluIG1hdHJpeF9wcm9qZWN0ZWRbOTQyOl1dLCBjPSdibHVlJywgYWxwaGE9MC4zKQogICAgIyBwbHQuc2hvdygpCgogICAgcmVzdWx0ID0gbnAuemVyb3MoKDYsIDEwKSkKICAgIGZvciBpIGluIHJhbmdlKDEwKToKICAgICAgICBYX3RyYWluLCBYX3Rlc3QsIHlfdHJhaW4sIHlfdGVzdCA9IHRyYWluX3Rlc3Rfc3BsaXQobWF0cml4X3Byb2plY3RlZCwgbGFiZWxzLCB0ZXN0X3NpemU9MC4yLCByYW5kb21fc3RhdGU9MykKICAgICAgICAjCiAgICAgICAgIyBubyBzaWduaWZpY2FudCBmaW5kCiAgICAgICAgIwogICAgICAgIGxyID0gTG9naXN0aWNSZWdyZXNzaW9uKCkKICAgICAgICBsci5maXQoWF90cmFpbiwgeV90cmFpbikKICAgICAgICByZXN1bHRbMF1baV0gPSBsci5zY29yZShYX3Rlc3QsIHlfdGVzdCkKICAgICAgICAjIHByaW50KCdsb2dpc3RpYyByZWdyZXNzaW9uIHNjb3JlOiAnLCBsci5zY29yZShYX3Rlc3QsIHlfdGVzdCkpCgoKICAgICAgICBjbGYgPSBEZWNpc2lvblRyZWVDbGFzc2lmaWVyKCkKICAgICAgICBjbGYuZml0KFhfdHJhaW4sIHlfdHJhaW4pCiAgICAgICAgcmVzdWx0WzFdW2ldID0gY2xmLnNjb3JlKFhfdGVzdCwgeV90ZXN0KQogICAgICAgICMgcHJpbnQoJ2xkZWNpc2lvbiB0cmVlIHNjb3JlOiAnLCBjbGYuc2NvcmUoWF90ZXN0LCB5X3Rlc3QpKQoKICAgICAgICBjbGYgPSBTVkMoKQogICAgICAgIGNsZi5maXQoWF90cmFpbiwgeV90cmFpbikKICAgICAgICByZXN1bHRbMl1baV0gPSBjbGYuc2NvcmUoWF90ZXN0LCB5X3Rlc3QpCiAgICAgICAgIyBwcmludCgnU1ZNIHNjb3JlOiAnLCBjbGYuc2NvcmUoWF90ZXN0LCB5X3Rlc3QpKQoKICAgICAgICBjbGYgPSBHYXVzc2lhbk5CKCkKICAgICAgICBjbGYuZml0KFhfdHJhaW4sIHlfdHJhaW4pCiAgICAgICAgcmVzdWx0WzNdW2ldID0gY2xmLnNjb3JlKFhfdGVzdCwgeV90ZXN0KQogICAgICAgICMgcHJpbnQoJ05haXZlIGJheWVzIHNjb3JlOiAnLCBjbGYuc2NvcmUoWF90ZXN0LCB5X3Rlc3QpKQoKICAgICAgICBuZWlnaCA9IEtOZWlnaGJvcnNDbGFzc2lmaWVyKG5fbmVpZ2hib3JzPTMpCiAgICAgICAgbmVpZ2guZml0KFhfdHJhaW4sIHlfdHJhaW4pCiAgICAgICAgcmVzdWx0WzRdW2ldID0gbmVpZ2guc2NvcmUoWF90ZXN0LCB5X3Rlc3QpCiAgICAgICAgIyBwcmludCgnayBuZWFyZXN0IG5laWdoYm91ciBzY29yZTogJywgbmVpZ2guc2NvcmUoWF90ZXN0LCB5X3Rlc3QpKQoKICAgICAgICBjbGYgPSBHcmFkaWVudEJvb3N0aW5nQ2xhc3NpZmllcigpCiAgICAgICAgY2xmLmZpdChYX3RyYWluLCB5X3RyYWluKQogICAgICAgIHJlc3VsdFs1XVtpXSA9IGNsZi5zY29yZShYX3Rlc3QsIHlfdGVzdCkKICAgICAgICAjIHByaW50KCdib29zdGluZyBzY29yZTogJywgY2xmLnNjb3JlKFhfdGVzdCwgeV90ZXN0KSkKICAgICAgICAjIHByaW50KHJlc3VsdCkKCiAgICByZXN1bHQgPSByZXN1bHQubWVhbihheGlzPTEpCiAgICBmb3IgaXRlbSBpbiByZXN1bHQ6CiAgICAgICAgcHJpbnQoaXRlbSkKCgoKCgpkYXRhTWluaW5nKGRvZ0Jvb2tNYXRyaXgsIGNhdEJvb2tNYXRyaXgpCgoKCgoKCgo8fGZpbV9zdWZmaXh8PgoKICAgICAgICBmb3Iga2V5IGluIGRhdGEua2V5cygpOgogICAgICAgICAgICBmb3IgaXRlbSBpbiBkYXRhW2tleV1bOjFdOgogICAgICAgICAgICAgICAgYWxsVGFncy5hZGQoaXRlbSkKPHxmaW1fZW5kfD4="]
["68fafb9927ae75cf16e0974cb99fe43ed2607b6d-2","68fafb9927ae75cf16e0974cb99fe43ed2607b6d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBpY2tsZQppbXBvcnQgcmUKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKZnJvbSBtcGxfdG9vbGtpdHMubXBsb3QzZCBpbXBvcnQgQXhlczNECmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0IHRyYWluX3Rlc3Rfc3BsaXQKZnJvbSBza2xlYXJuLnN2bSBpbXBvcnQgU1ZDCmZyb20gc2tsZWFybi5saW5lYXJfbW9kZWwgaW1wb3J0IExvZ2lzdGljUmVncmVzc2lvbgpmcm9tIHNrbGVhcm4udHJlZSBpbXBvcnQgRGVjaXNpb25UcmVlQ2xhc3NpZmllcgpmcm9tIHNrbGVhcm4ubmFpdmVfYmF5ZXMgaW1wb3J0IEdhdXNzaWFuTkIKZnJvbSBza2xlYXJuLm5laWdoYm9ycyBpbXBvcnQgS05laWdoYm9yc0NsYXNzaWZpZXIKZnJvbSBza2xlYXJuLmVuc2VtYmxlIGltcG9ydCBHcmFkaWVudEJvb3N0aW5nQ2xhc3NpZmllcgoKCgoKZGVmIHByZXBhcmVUYWdzKCk6CiAgICBhbGxUYWdzID0gc2V0KCkKICAgIGNvdW50ID0gMAoKICAgIGZvciBpIGluIHJhbmdlKDE5Nyk6CiAgICAgICAgcGF0aCA9ICdyYXcgZGF0YS9ib29rVGFncy9ib29rc1RhZ3NfJXMucGlja2xlJyVzdHIoaSkKICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgZGF0YSA9IHBpY2tsZS5sb2FkKGZpbGUpCgogICAgICAgIGZvciBrZXkgaW4gZGF0YS5rZXlzKCk6CiAgICAgICAgICAgIGZvciBpdGVtIGluIGRhdGFba2V5XVs6MV06CiAgICAgICAgICAgICAgICBhbGxUYWdzLmFkZChpdGVtKQogICAgICAgICAgICBjb3VudCArPSAxCiAgICB3aXRoIG9wZW4oJ3JhdyBkYXRhL2Jvb2tUYWdzLnBpY2tsZScsICd3YicpIGFzIGZpbGU6CiAgICAgICAgcGlja2xlLmR1bXAobGlzdChhbGxUYWdzKSwgZmlsZSkKICAgIHByaW50KGxlbihhbGxUYWdzKSkKICAgIHByaW50KGNvdW50KQoKCiMgcHJlcGFyZVRhZ3MoKSAjIDE5NTU4IGJvb2tzICAgICMzODQwIFRhZ3MKCgpkZWYgZ2V0Qm9va0RhdGFGcmFtZSgpOgogICAgd2l0aCBvcGVuKCdyYXcgZGF0YS9ib29rVGFncy5waWNrbGUnLCAncmInKSBhcyBmaWxlOgogICAgICAgIGluZGV4ZXMgPSBsaXN0KHBpY2tsZS5sb2FkKGZpbGUpKQoKICAgICMgdmFsaWQgbnVtYmVyIG9mIGJvb2tzIHdpdGggdGFnIGluZm9ybWF0aW9uIGlzIDE0MDYxCgogICAgYm9va01hdHJpeCA9IG5wLnplcm9zKCgzODQwLCAxNDA2MSkpCiAgICBib29rcyA9IGxpc3QoKQogICAgY291bnQgPSAwCiAgICBmb3IgaSBpbiByYW5nZSgxOTcpOgogICAgICAgIHBhdGggPSAncmF3IGRhdGEvYm9va1RhZ3MvYm9va3NUYWdzXyVzLnBpY2tsZScgJSBzdHIoaSkKICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgZGF0YSA9IHBpY2tsZS5sb2FkKGZpbGUpCgogICAgICAgIGZvciBrZXkgaW4gZGF0YS5rZXlzKCk6CiAgICAgICAgICAgIGlmIGtleSBub3QgaW4gYm9va3M6CiAgICAgICAgICAgICAgICBpZiBsZW4oZGF0YVtrZXldKSA+IDA6CiAgICAgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gZGF0YVtrZXldOgogICAgICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29rTWF0cml4W2luZGV4ZXMuaW5kZXgoaXRlbSldW2NvdW50XSArPSAxCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKCjx8ZmltX2VuZHw+"]
["68fafb9927ae75cf16e0974cb99fe43ed2607b6d-3","68fafb9927ae75cf16e0974cb99fe43ed2607b6d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBpY2tsZQppbXBvcnQgcmUKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKZnJvbSBtcGxfdG9vbGtpdHMubXBsb3QzZCBpbXBvcnQgQXhlczNECmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0IHRyYWluX3Rlc3Rfc3BsaXQKZnJvbSBza2xlYXJuLnN2bSBpbXBvcnQgU1ZDCmZyb20gc2tsZWFybi5saW5lYXJfbW9kZWwgaW1wb3J0IExvZ2lzdGljUmVncmVzc2lvbgpmcm9tIHNrbGVhcm4udHJlZSBpbXBvcnQgRGVjaXNpb25UcmVlQ2xhc3NpZmllcgpmcm9tIHNrbGVhcm4ubmFpdmVfYmF5ZXMgaW1wb3J0IEdhdXNzaWFuTkIKZnJvbSBza2xlYXJuLm5laWdoYm9ycyBpbXBvcnQgS05laWdoYm9yc0NsYXNzaWZpZXIKZnJvbSBza2xlYXJuLmVuc2VtYmxlIGltcG9ydCBHcmFkaWVudEJvb3N0aW5nQ2xhc3NpZmllcgoKCgoKZGVmIHByZXBhcmVUYWdzKCk6CiAgICBhbGxUYWdzID0gc2V0KCkKICAgIGNvdW50ID0gMAoKICAgIGZvciBpIGluIHJhbmdlKDE5Nyk6CiAgICAgICAgcGF0aCA9ICdyYXcgZGF0YS9ib29rVGFncy9ib29rc1RhZ3NfJXMucGlja2xlJyVzdHIoaSkKICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgZGF0YSA9IHBpY2tsZS5sb2FkKGZpbGUpCgogICAgICAgIGZvciBrZXkgaW4gZGF0YS5rZXlzKCk6CiAgICAgICAgICAgIGZvciBpdGVtIGluIGRhdGFba2V5XVs6MV06CiAgICAgICAgICAgICAgICBhbGxUYWdzLmFkZChpdGVtKQogICAgICAgICAgICBjb3VudCArPSAxCiAgICB3aXRoIG9wZW4oJ3JhdyBkYXRhL2Jvb2tUYWdzLnBpY2tsZScsICd3YicpIGFzIGZpbGU6CiAgICAgICAgcGlja2xlLmR1bXAobGlzdChhbGxUYWdzKSwgZmlsZSkKICAgIHByaW50KGxlbihhbGxUYWdzKSkKICAgIHByaW50KGNvdW50KQoKCiMgcHJlcGFyZVRhZ3MoKSAjIDE5NTU4IGJvb2tzICAgICMzODQwIFRhZ3MKCgpkZWYgZ2V0Qm9va0RhdGFGcmFtZSgpOgogICAgd2l0aCBvcGVuKCdyYXcgZGF0YS9ib29rVGFncy5waWNrbGUnLCAncmInKSBhcyBmaWxlOgogICAgICAgIGluZGV4ZXMgPSBsaXN0KHBpY2tsZS5sb2FkKGZpbGUpKQoKICAgICMgdmFsaWQgbnVtYmVyIG9mIGJvb2tzIHdpdGggdGFnIGluZm9ybWF0aW9uIGlzIDE0MDYxCgogICAgYm9va01hdHJpeCA9IG5wLnplcm9zKCgzODQwLCAxNDA2MSkpCiAgICBib29rcyA9IGxpc3QoKQogICAgY291bnQgPSAwCiAgICBmb3IgaSBpbiByYW5nZSgxOTcpOgogICAgICAgIHBhdGggPSAncmF3IGRhdGEvYm9va1RhZ3MvYm9va3NUYWdzXyVzLnBpY2tsZScgJSBzdHIoaSkKICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgZGF0YSA9IHBpY2tsZS5sb2FkKGZpbGUpCgogICAgICAgIGZvciBrZXkgaW4gZGF0YS5rZXlzKCk6CiAgICAgICAgICAgIGlmIGtleSBub3QgaW4gYm9va3M6CiAgICAgICAgICAgICAgICBpZiBsZW4oZGF0YVtrZXldKSA+IDA6CiAgICAgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gZGF0YVtrZXldOgogICAgICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29rTWF0cml4W2luZGV4ZXMuaW5kZXgoaXRlbSldW2NvdW50XSArPSAxCiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAgICAgICAgIGJvb2tzLmFwcGVuZChrZXkpCiAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gMQogICAgYm9va0RhdGFGcmFtZSA9IHBkLkRhdGFGcmFtZShib29rTWF0cml4LCBpbmRleGVzLCBib29rcykKICAgICMgc2F2ZSB0aGUgaW5mb3JtYXRpb24gZm9yIGVhY2ggZmlsbQogICAgIyBib29rRGF0YUZyYW1lLnRvX2NzdigncmF3IGRhdGEvYm9va0luZm9tYXRpb24uY3N2JykKICAgICMgd2l0aCBvcGVuKCdyYXcgZGF0YS9ib29rRGF0YUZyYW1lLnBpY2tsZScsICd3YicpIGFzIGZpbGU6CiAgICAjICAgICBwaWNrbGUuZHVtcChib29rRGF0YUZyYW1lLCBmaWxlKQogICAgcmV0dXJuIGJvb2tEYXRhRnJhbWUsIGluZGV4ZXMKCgoKCmRlZiBnZXRVc2VySWRzKHR5cGUpOgogICAgdXNlcklkID0gc2V0KCkKCiAgICBmb3IgaSBpbiByYW5nZSgyMCk6CiAgICAgICAgd2l0aCBvcGVuKCd1c2VyTW92aWVzQm9va3NfJXNQZW9wbGUvcmVjb3JkXyVzLnBpY2tsZSclKHR5cGUsIHN0cihpKSksICdyYicpIGFzIGZpbGU6CiAgICAgICAgICAgIGRhdGEgPSBwaWNrbGUubG9hZChmaWxlKQogICAgICAgIGZvciBrZXkgaW4gZGF0YS5rZXlzKCk6CiAgICAgICAgICAgIHVzZXJJZC5hZGQoa2V5KQogICAgdXNlcklkID0gbGlzdCh1c2VySWQpCiAgICB3aXRoIG9wZW4oJ3VzZXJNb3ZpZXNCb29rc18lc1Blb3BsZS91c2VySWQucGlja2xlJyV0eXBlLCAnd2InKSBhcyBmaWxlOgogICAgICAgIHBpY2tsZS5kdW1wKHVzZXJJZCwgZmlsZSkKCmRlZiBnZXRNYXRyaXgodHlwZSk6CgogICAgI3R5cGUgPT0gRG9nL0NhdAoKICAgIGRmLCBpbmRleGVzID0gZ2V0Qm9va0RhdGFGcmFtZSgpCiAgICB3aXRoIG9wZW4oJ3VzZXJNb3ZpZXNCb29rc18lc1Blb3BsZS91c2VySWQucGlja2xlJyAlIHR5cGUsICdyYicpIGFzIGZpbGU6CiAgICAgICAgdXNlcklkcyA9IHBpY2tsZS5sb2FkKGZpbGUpCgogICAgUGVvcGxlRGF0YUZyYW1lID0gcGQuRGF0YUZyYW1lKG5wLnplcm9zKCgzODQwLCAyMDAxKSksIGluZGV4ZXMsIHVzZXJJZHMpCiAgICBjb3VudCA9IDAKCiAgICBkZWZhdWx0VmFsdWUgPSAxLzM4NDAKICAgIGZvciBpIGluIHJhbmdlKDIwKToKICAgICAgICB3aXRoIG9wZW4oJ3VzZXJNb3ZpZXNCb29rc18lc1Blb3BsZS9yZWNvcmRfJXMucGlja2xlJyAlICh0eXBlLCBzdHIoaSkpLCAncmInKSBhcyBmaWxlOgogICAgICAgICAgICBkYXRhID0gcGlja2xlLmxvYWQoZmlsZSkKCiAgICAgICAgZm9yIGtleSBpbiBkYXRhLmtleXMoKToKICAgICAgICAgICAgYm9va0xpc3QgPSBkYXRhW2tleV1bJ2Jvb2snXQoKICAgICAgICAgICAgaWYgbGVuKGJvb2tMaXN0KSAhPSAwOgogICAgICAgICAgICAgICAgayA9IGxlbihib29rTGlzdCkKICAgICAgICAgICAgICAgIGxpa2VzID0gW10KICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGJvb2tMaXN0OgogICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgbGlrZXMuYXBwZW5kKGRmW2l0ZW1dKQogICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgaWYgbGVuKGxpa2VzKSAhPSAwOgogICAgICAgICAgICAgICAgICAgIFBlb3BsZURhdGFGcmFtZVtrZXldID0gc3VtKGxpa2VzKS9rCiAgICAgICAgICAgICAgICAgICAgIyBjb3VudCArPSAxCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICMgZGVsIFBlb3BsZURhdGFGcmFtZVtrZXldCiAgICAgICAgICAgICAgICAgICAgUGVvcGxlRGF0YUZyYW1lW2tleV0gPSBkZWZhdWx0VmFsdWUKCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAjIGRlbCBQZW9wbGVEYXRhRnJhbWVba2V5XQogICAgICAgICAgICAgICAgUGVvcGxlRGF0YUZyYW1lW2tleV0gPSBkZWZhdWx0VmFsdWUKCiAgICAgICAgICAgIGNvdW50ICs9IDEKCiAgICBwcmludChjb3VudCkKICAgIFBlb3BsZURhdGFGcmFtZSA9IFBlb3BsZURhdGFGcmFtZS50cmFuc3Bvc2UoKQogICAgIyBwcmludCgiJXNQZW9wbGUgaGFzICVzICIlKHR5cGUsIHN0cihjb3VudCkpKQogICAgUGVvcGxlRGF0YUZyYW1lLnRvX2NzdignVHJhaW5pbmdEYXRhLyVzUGVvcGxlQm9va19ub3JtYWxpemVkLmNzdicldHlwZSkKICAgIHJldHVybiBQZW9wbGVEYXRhRnJhbWUKCiMgZ2V0VXNlcklkcygnRG9nJykKIyBnZXRNYXRyaXgoJ0RvZycpCiMgZ2V0VXNlcklkcygnQ2F0JykKIyBnZXRNYXRyaXgoJ0NhdCcpCgoKJycnCgpEb2dQZW9wbGUgaGFzIDY1MSAgCkNhdFBlb3BsZSBoYXMgNzE4ICAKCgonJycKCiMgZG9nQm9va01hdHJpeCA9IGdldE1hdHJpeCgnRG9nJykKIyBkb2dCb29rTWF0cml4ID0gbnAuYXJyYXkoZG9nQm9va01hdHJpeCkKIyB3aXRoIG9wZW4oJ1RyYWluaW5nRGF0YS9kb2dCb29rTWF0cml4LnBpY2tsZScsICd3YicpIGFzIGZpbGU6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyAgICAgcGlja2xlLmR1bXAoZG9nQm9va01hdHJpeCwgZmlsZSkKd2l0aCBvcGVuKCdUcmFpbmluZ0RhdGEvZG9nQm9va01hdHJpeC5waWNrbGUnLCAncmInKSBhcyBmaWxlOgogICAgZG9nQm9va01hdHJpeCA9IHBpY2tsZS5sb2FkKGZpbGUpCgo8fGZpbV9lbmR8Pg=="]
["68fafb9927ae75cf16e0974cb99fe43ed2607b6d-4","68fafb9927ae75cf16e0974cb99fe43ed2607b6d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBpY2tsZQppbXBvcnQgcmUKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKZnJvbSBtcGxfdG9vbGtpdHMubXBsb3QzZCBpbXBvcnQgQXhlczNECmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0IHRyYWluX3Rlc3Rfc3BsaXQKZnJvbSBza2xlYXJuLnN2bSBpbXBvcnQgU1ZDCmZyb20gc2tsZWFybi5saW5lYXJfbW9kZWwgaW1wb3J0IExvZ2lzdGljUmVncmVzc2lvbgpmcm9tIHNrbGVhcm4udHJlZSBpbXBvcnQgRGVjaXNpb25UcmVlQ2xhc3NpZmllcgpmcm9tIHNrbGVhcm4ubmFpdmVfYmF5ZXMgaW1wb3J0IEdhdXNzaWFuTkIKZnJvbSBza2xlYXJuLm5laWdoYm9ycyBpbXBvcnQgS05laWdoYm9yc0NsYXNzaWZpZXIKZnJvbSBza2xlYXJuLmVuc2VtYmxlIGltcG9ydCBHcmFkaWVudEJvb3N0aW5nQ2xhc3NpZmllcgoKCgoKZGVmIHByZXBhcmVUYWdzKCk6CiAgICBhbGxUYWdzID0gc2V0KCkKICAgIGNvdW50ID0gMAoKICAgIGZvciBpIGluIHJhbmdlKDE5Nyk6CiAgICAgICAgcGF0aCA9ICdyYXcgZGF0YS9ib29rVGFncy9ib29rc1RhZ3NfJXMucGlja2xlJyVzdHIoaSkKICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgZGF0YSA9IHBpY2tsZS5sb2FkKGZpbGUpCgogICAgICAgIGZvciBrZXkgaW4gZGF0YS5rZXlzKCk6CiAgICAgICAgICAgIGZvciBpdGVtIGluIGRhdGFba2V5XVs6MV06CiAgICAgICAgICAgICAgICBhbGxUYWdzLmFkZChpdGVtKQogICAgICAgICAgICBjb3VudCArPSAxCiAgICB3aXRoIG9wZW4oJ3JhdyBkYXRhL2Jvb2tUYWdzLnBpY2tsZScsICd3YicpIGFzIGZpbGU6CiAgICAgICAgcGlja2xlLmR1bXAobGlzdChhbGxUYWdzKSwgZmlsZSkKICAgIHByaW50KGxlbihhbGxUYWdzKSkKICAgIHByaW50KGNvdW50KQoKCiMgcHJlcGFyZVRhZ3MoKSAjIDE5NTU4IGJvb2tzICAgICMzODQwIFRhZ3MKCgpkZWYgZ2V0Qm9va0RhdGFGcmFtZSgpOgogICAgd2l0aCBvcGVuKCdyYXcgZGF0YS9ib29rVGFncy5waWNrbGUnLCAncmInKSBhcyBmaWxlOgogICAgICAgIGluZGV4ZXMgPSBsaXN0KHBpY2tsZS5sb2FkKGZpbGUpKQoKICAgICMgdmFsaWQgbnVtYmVyIG9mIGJvb2tzIHdpdGggdGFnIGluZm9ybWF0aW9uIGlzIDE0MDYxCgogICAgYm9va01hdHJpeCA9IG5wLnplcm9zKCgzODQwLCAxNDA2MSkpCiAgICBib29rcyA9IGxpc3QoKQogICAgY291bnQgPSAwCiAgICBmb3IgaSBpbiByYW5nZSgxOTcpOgogICAgICAgIHBhdGggPSAncmF3IGRhdGEvYm9va1RhZ3MvYm9va3NUYWdzXyVzLnBpY2tsZScgJSBzdHIoaSkKICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgZGF0YSA9IHBpY2tsZS5sb2FkKGZpbGUpCgogICAgICAgIGZvciBrZXkgaW4gZGF0YS5rZXlzKCk6CiAgICAgICAgICAgIGlmIGtleSBub3QgaW4gYm9va3M6CiAgICAgICAgICAgICAgICBpZiBsZW4oZGF0YVtrZXldKSA+IDA6CiAgICAgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gZGF0YVtrZXldOgogICAgICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29rTWF0cml4W2luZGV4ZXMuaW5kZXgoaXRlbSldW2NvdW50XSArPSAxCiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAgICAgICAgIGJvb2tzLmFwcGVuZChrZXkpCiAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gMQogICAgYm9va0RhdGFGcmFtZSA9IHBkLkRhdGFGcmFtZShib29rTWF0cml4LCBpbmRleGVzLCBib29rcykKICAgICMgc2F2ZSB0aGUgaW5mb3JtYXRpb24gZm9yIGVhY2ggZmlsbQogICAgIyBib29rRGF0YUZyYW1lLnRvX2NzdigncmF3IGRhdGEvYm9va0luZm9tYXRpb24uY3N2JykKICAgICMgd2l0aCBvcGVuKCdyYXcgZGF0YS9ib29rRGF0YUZyYW1lLnBpY2tsZScsICd3YicpIGFzIGZpbGU6CiAgICAjICAgICBwaWNrbGUuZHVtcChib29rRGF0YUZyYW1lLCBmaWxlKQogICAgcmV0dXJuIGJvb2tEYXRhRnJhbWUsIGluZGV4ZXMKCgoKCmRlZiBnZXRVc2VySWRzKHR5cGUpOgogICAgdXNlcklkID0gc2V0KCkKCiAgICBmb3IgaSBpbiByYW5nZSgyMCk6CiAgICAgICAgd2l0aCBvcGVuKCd1c2VyTW92aWVzQm9va3NfJXNQZW9wbGUvcmVjb3JkXyVzLnBpY2tsZSclKHR5cGUsIHN0cihpKSksICdyYicpIGFzIGZpbGU6CiAgICAgICAgICAgIGRhdGEgPSBwaWNrbGUubG9hZChmaWxlKQogICAgICAgIGZvciBrZXkgaW4gZGF0YS5rZXlzKCk6CiAgICAgICAgICAgIHVzZXJJZC5hZGQoa2V5KQogICAgdXNlcklkID0gbGlzdCh1c2VySWQpCiAgICB3aXRoIG9wZW4oJ3VzZXJNb3ZpZXNCb29rc18lc1Blb3BsZS91c2VySWQucGlja2xlJyV0eXBlLCAnd2InKSBhcyBmaWxlOgogICAgICAgIHBpY2tsZS5kdW1wKHVzZXJJZCwgZmlsZSkKCmRlZiBnZXRNYXRyaXgodHlwZSk6CgogICAgI3R5cGUgPT0gRG9nL0NhdAoKICAgIGRmLCBpbmRleGVzID0gZ2V0Qm9va0RhdGFGcmFtZSgpCiAgICB3aXRoIG9wZW4oJ3VzZXJNb3ZpZXNCb29rc18lc1Blb3BsZS91c2VySWQucGlja2xlJyAlIHR5cGUsICdyYicpIGFzIGZpbGU6CiAgICAgICAgdXNlcklkcyA9IHBpY2tsZS5sb2FkKGZpbGUpCgogICAgUGVvcGxlRGF0YUZyYW1lID0gcGQuRGF0YUZyYW1lKG5wLnplcm9zKCgzODQwLCAyMDAxKSksIGluZGV4ZXMsIHVzZXJJZHMpCiAgICBjb3VudCA9IDAKCiAgICBkZWZhdWx0VmFsdWUgPSAxLzM4NDAKICAgIGZvciBpIGluIHJhbmdlKDIwKToKICAgICAgICB3aXRoIG9wZW4oJ3VzZXJNb3ZpZXNCb29rc18lc1Blb3BsZS9yZWNvcmRfJXMucGlja2xlJyAlICh0eXBlLCBzdHIoaSkpLCAncmInKSBhcyBmaWxlOgogICAgICAgICAgICBkYXRhID0gcGlja2xlLmxvYWQoZmlsZSkKCiAgICAgICAgZm9yIGtleSBpbiBkYXRhLmtleXMoKToKICAgICAgICAgICAgYm9va0xpc3QgPSBkYXRhW2tleV1bJ2Jvb2snXQoKICAgICAgICAgICAgaWYgbGVuKGJvb2tMaXN0KSAhPSAwOgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgICAgICAgICAgbGlrZXMuYXBwZW5kKGRmW2l0ZW1dKQogICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgaWYgbGVuKGxpa2VzKSAhPSAwOgogICAgICAgICAgICAgICAgICAgIFBlb3BsZURhdGFGcmFtZVtrZXldID0gc3VtKGxpa2VzKS9rCiAgICAgICAgICAgICAgICAgICAgIyBjb3VudCArPSAxCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICMgZGVsIFBlb3BsZURhdGFGcmFtZVtrZXldCiAgICAgICAgICAgICAgICAgICAgUGVvcGxlRGF0YUZyYW1lW2tleV0gPSBkZWZhdWx0VmFsdWUKCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAjIGRlbCBQZW9wbGVEYXRhRnJhbWVba2V5XQogICAgICAgICAgICAgICAgUGVvcGxlRGF0YUZyYW1lW2tleV0gPSBkZWZhdWx0VmFsdWUKCiAgICAgICAgICAgIGNvdW50ICs9IDEKCiAgICBwcmludChjb3VudCkKICAgIFBlb3BsZURhdGFGcmFtZSA9IFBlb3BsZURhdGFGcmFtZS50cmFuc3Bvc2UoKQogICAgIyBwcmludCgiJXNQZW9wbGUgaGFzICVzICIlKHR5cGUsIHN0cihjb3VudCkpKQogICAgUGVvcGxlRGF0YUZyYW1lLnRvX2NzdignVHJhaW5pbmdEYXRhLyVzUGVvcGxlQm9va19ub3JtYWxpemVkLmNzdicldHlwZSkKICAgIHJldHVybiBQZW9wbGVEYXRhRnJhbWUKCiMgZ2V0VXNlcklkcygnRG9nJykKIyBnZXRNYXRyaXgoJ0RvZycpCiMgZ2V0VXNlcklkcygnQ2F0JykKIyBnZXRNYXRyaXgoJ0NhdCcpCgoKJycnCgpEb2dQZW9wbGUgaGFzIDY1MSAgCkNhdFBlb3BsZSBoYXMgNzE4ICAKCgonJycKCiMgZG9nQm9va01hdHJpeCA9IGdldE1hdHJpeCgnRG9nJykKIyBkb2dCb29rTWF0cml4ID0gbnAuYXJyYXkoZG9nQm9va01hdHJpeCkKIyB3aXRoIG9wZW4oJ1RyYWluaW5nRGF0YS9kb2dCb29rTWF0cml4LnBpY2tsZScsICd3YicpIGFzIGZpbGU6CiMgICAgIHBpY2tsZS5kdW1wKGRvZ0Jvb2tNYXRyaXgsIGZpbGUpCndpdGggb3BlbignVHJhaW5pbmdEYXRhL2RvZ0Jvb2tNYXRyaXgucGlja2xlJywgJ3JiJykgYXMgZmlsZToKICAgIGRvZ0Jvb2tNYXRyaXggPSBwaWNrbGUubG9hZChmaWxlKQoKIyBjYXRCb29rTWF0cml4ID0gZ2V0TWF0cml4KCdDYXQnKQojIGNhdEJvb2tNYXRyaXggPSBucC5hcnJheShjYXRCb29rTWF0cml4KQojIHdpdGggb3BlbignVHJhaW5pbmdEYXRhL2NhdEJvb2tNYXRyaXgucGlja2xlJywgJ3diJykgYXMgZmlsZToKIyAgICAgcGlja2xlLmR1bXAoY2F0Qm9va01hdHJpeCwgZmlsZSkKd2l0aCBvcGVuKCdUcmFpbmluZ0RhdGEvY2F0Qm9va01hdHJpeC5waWNrbGUnLCAncmInKSBhcyBmaWxlOgogICAgY2F0Qm9va01hdHJpeCA9IHBpY2tsZS5sb2FkKGZpbGUpCgoKZGVmIGRhdGFNaW5pbmcobWF0cml4MSwgbWF0cml4Mik6CgogICAgZG9nTGlzdCA9IG1hdHJpeDEudG9saXN0KCkKICAgIGNhdExpc3QgPSBtYXRyaXgyLnRvbGlzdCgpCgogICAgZG9nTGlzdC5leHRlbmQoY2F0TGlzdCkKICAgIHdob2xlTGlzdCA9IGRvZ0xpc3QKICAgICMgd2hvbGVMaXN0VCA9IG5wLmFycmF5KHdob2xlTGlzdCkudHJhbnNwb3NlKCkudG9saXN0KCkKICAgICNubyBuZWVkIGZvciB0Zi1pZGYKICAgICMgd2hvbGVMaXN0ID0gZ2V0VEZJREYod2hvbGVMaXN0LCB3aG9sZUxpc3RUKQoKCiAgICAjIDAgZm9yIGRvZyAxIGZvciBjYXQKICAgIGxhYmVscyA9IG5wLnplcm9zKCgxLCAyMDAxKSkudG9saXN0KClbMF0KICAgIGxhYmVscy5leHRlbmQobnAub25lcygoMSwgMjAwMSkpLnRvbGlzdCgpWzBdKQoKCiAgICBkYXRhID0gbnAuYXJyYXkod2hvbGVMaXN0KQogICAgbWF0cml4X21lYW4gPSBucC5tZWFuKGRhdGEsIDApCgogICAgbWF0cml4X2hhdCA9IGRhdGEgLSBtYXRyaXhfbWVhbgoKCiAgICBVLCBELCBWID0gbnAubGluYWxnLnN2ZChtYXRyaXhfaGF0LCBmdWxsX21hdHJpY2VzPUZhbHNlKQogICAgIwogICAgIyAjIyBmaW5kIDkwJSBvZiB0aGUgc3VtIG9mIHRoZSBlaWdlbnZhbHVlcwogICAgIwogICAgdGVtcCA9IDAuMAogICAgY291bnQgPSAwCiAgICBmb3IgaXRlbSBpbiBEOgogICAgICAgIGlmIHRlbXAgPD0gKHN1bShEKSowLjkpOgogICAgICAgICAgICB0ZW1wICs9IGl0ZW0KICAgICAgICAgICAgY291bnQgKz0gMQogICAgcHJpbnQoJ3JlZHVjZSB0aGUgZGltZW5zaW9uIHRvOiAnLCBjb3VudCkKICAgICMgcHJpbnQoKERbMF0rRFsxXStEWzJdK0RbM10rRFs0XSkvc3VtKEQpKQogICAgZGltZW5zaW9uUmVkdWN0aW9uTWF0cml4ID0gbnAubWF0KFZbMDpjb3VudCwgOl0pLnRyYW5zcG9zZSgpCiAgICBtYXRyaXhfcHJvamVjdGVkID0gbnAuZG90KG1hdHJpeF9oYXQsIGRpbWVuc2lvblJlZHVjdGlvbk1hdHJpeCkKICAgIG1hdHJpeF9wcm9qZWN0ZWQgPSBtYXRyaXhfcHJvamVjdGVkLnRvbGlzdCgpCiAgICAjIGZpZyA9IHBsdC5maWd1cmUoKQogICAgIyBwbHQuc2NhdHRlcihbdFswXSBmb3IgdCBpbiBtYXRyaXhfcHJvamVjdGVkWzo5NDJdXSwgW3RbMV0gZm9yIHQgaW4gbWF0cml4X3Byb2plY3RlZFs6OTQyXV0sIGM9J3JlZCcsIGFscGhhPTAuMykKICAgICMgcGx0LnNjYXR0ZXIoW3RbMF0gZm9yIHQgaW4gbWF0cml4X3Byb2plY3RlZFs5NDI6XV0sIFt0WzFdIGZvciB0IGluIG1hdHJpeF9wcm9qZWN0ZWRbOTQyOl1dLCBjPSdibHVlJywgYWxwaGE9MC4zKQogICAgIyBwbHQuc2hvdygpCgogICAgcmVzdWx0ID0gbnAuemVyb3MoKDYsIDEwKSkKICAgIGZvciBpIGluIHJhbmdlKDEwKToKICAgICAgICBYX3RyYWluLCBYX3Rlc3QsIHlfdHJhaW4sIHlfdGVzdCA9IHRyYWluX3Rlc3Rfc3BsaXQobWF0cml4X3Byb2plY3RlZCwgbGFiZWxzLCB0ZXN0X3NpemU9MC4yLCByYW5kb21fc3RhdGU9MykKICAgICAgICAjCiAgICAgICAgIyBubyBzaWduaWZpY2FudCBmaW5kCiAgICAgICAgIwogICAgICAgIGxyID0gTG9naXN0aWNSZWdyZXNzaW9uKCkKICAgICAgICBsci5maXQoWF90cmFpbiwgeV90cmFpbikKICAgICAgICByZXN1bHRbMF1baV0gPSBsci5zY29yZShYX3Rlc3QsIHlfdGVzdCkKICAgICAgICAjIHByaW50KCdsb2dpc3RpYyByZWdyZXNzaW9uIHNjb3JlOiAnLCBsci5zY29yZShYX3Rlc3QsIHlfdGVzdCkpCgoKICAgICAgICBjbGYgPSBEZWNpc2lvblRyZWVDbGFzc2lmaWVyKCkKICAgICAgICBjbGYuZml0KFhfdHJhaW4sIHlfdHJhaW4pCiAgICAgICAgcmVzdWx0WzFdW2ldID0gY2xmLnNjb3JlKFhfdGVzdCwgeV90ZXN0KQogICAgICAgICMgcHJpbnQoJ2xkZWNpc2lvbiB0cmVlIHNjb3JlOiAnLCBjbGYuc2NvcmUoWF90ZXN0LCB5X3Rlc3QpKQoKICAgICAgICBjbGYgPSBTVkMoKQogICAgICAgIGNsZi5maXQoWF90cmFpbiwgeV90cmFpbikKICAgICAgICByZXN1bHRbMl1baV0gPSBjbGYuc2NvcmUoWF90ZXN0LCB5X3Rlc3QpCiAgICAgICAgIyBwcmludCgnU1ZNIHNjb3JlOiAnLCBjbGYuc2NvcmUoWF90ZXN0LCB5X3Rlc3QpKQoKICAgICAgICBjbGYgPSBHYXVzc2lhbk5CKCkKICAgICAgICBjbGYuZml0KFhfdHJhaW4sIHlfdHJhaW4pCiAgICAgICAgcmVzdWx0WzNdW2ldID0gY2xmLnNjb3JlKFhfdGVzdCwgeV90ZXN0KQogICAgICAgICMgcHJpbnQoJ05haXZlIGJheWVzIHNjb3JlOiAnLCBjbGYuc2NvcmUoWF90ZXN0LCB5X3Rlc3QpKQoKICAgICAgICBuZWlnaCA9IEtOZWlnaGJvcnNDbGFzc2lmaWVyKG5fbmVpZ2hib3JzPTMpCiAgICAgICAgbmVpZ2guZml0KFhfdHJhaW4sIHlfdHJhaW4pCiAgICAgICAgcmVzdWx0WzRdW2ldID0gbmVpZ2guc2NvcmUoWF90ZXN0LCB5X3Rlc3QpCiAgICAgICAgIyBwcmludCgnayBuZWFyZXN0IG5laWdoYm91ciBzY29yZTogJywgbmVpZ2guc2NvcmUoWF90ZXN0LCB5X3Rlc3QpKQoKICAgICAgICBjbGYgPSBHcmFkaWVudEJvb3N0aW5nQ2xhc3NpZmllcigpCiAgICAgICAgY2xmLmZpdChYX3RyYWluLCB5X3RyYWluKQogICAgICAgIHJlc3VsdFs1XVtpXSA9IGNsZi5zY29yZShYX3Rlc3QsIHlfdGVzdCkKICAgICAgICAjIHByaW50KCdib29zdGluZyBzY29yZTogJywgY2xmLnNjb3JlKFhfdGVzdCwgeV90ZXN0KSkKICAgICAgICAjIHByaW50KHJlc3VsdCkKCiAgICByZXN1bHQgPSByZXN1bHQubWVhbihheGlzPTEpCiAgICBmb3IgaXRlbSBpbiByZXN1bHQ6CiAgICAgICAgcHJpbnQoaXRlbSkKCgoKCgpkYXRhTWluaW5nKGRvZ0Jvb2tNYXRyaXgsIGNhdEJvb2tNYXRyaXgpCgoKCgoKCgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgayA9IGxlbihib29rTGlzdCkKICAgICAgICAgICAgICAgIGxpa2VzID0gW10KICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGJvb2tMaXN0OgogICAgICAgICAgICAgICAgICAgIHRyeToKPHxmaW1fZW5kfD4="]
["68fafb9927ae75cf16e0974cb99fe43ed2607b6d-5","68fafb9927ae75cf16e0974cb99fe43ed2607b6d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBpY2tsZQppbXBvcnQgcmUKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKZnJvbSBtcGxfdG9vbGtpdHMubXBsb3QzZCBpbXBvcnQgQXhlczNECmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0IHRyYWluX3Rlc3Rfc3BsaXQKZnJvbSBza2xlYXJuLnN2bSBpbXBvcnQgU1ZDCmZyb20gc2tsZWFybi5saW5lYXJfbW9kZWwgaW1wb3J0IExvZ2lzdGljUmVncmVzc2lvbgpmcm9tIHNrbGVhcm4udHJlZSBpbXBvcnQgRGVjaXNpb25UcmVlQ2xhc3NpZmllcgpmcm9tIHNrbGVhcm4ubmFpdmVfYmF5ZXMgaW1wb3J0IEdhdXNzaWFuTkIKZnJvbSBza2xlYXJuLm5laWdoYm9ycyBpbXBvcnQgS05laWdoYm9yc0NsYXNzaWZpZXIKZnJvbSBza2xlYXJuLmVuc2VtYmxlIGltcG9ydCBHcmFkaWVudEJvb3N0aW5nQ2xhc3NpZmllcgoKCgoKZGVmIHByZXBhcmVUYWdzKCk6CiAgICBhbGxUYWdzID0gc2V0KCkKICAgIGNvdW50ID0gMAoKICAgIGZvciBpIGluIHJhbmdlKDE5Nyk6CiAgICAgICAgcGF0aCA9ICdyYXcgZGF0YS9ib29rVGFncy9ib29rc1RhZ3NfJXMucGlja2xlJyVzdHIoaSkKICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgZGF0YSA9IHBpY2tsZS5sb2FkKGZpbGUpCgogICAgICAgIGZvciBrZXkgaW4gZGF0YS5rZXlzKCk6CiAgICAgICAgICAgIGZvciBpdGVtIGluIGRhdGFba2V5XVs6MV06CiAgICAgICAgICAgICAgICBhbGxUYWdzLmFkZChpdGVtKQogICAgICAgICAgICBjb3VudCArPSAxCiAgICB3aXRoIG9wZW4oJ3JhdyBkYXRhL2Jvb2tUYWdzLnBpY2tsZScsICd3YicpIGFzIGZpbGU6CiAgICAgICAgcGlja2xlLmR1bXAobGlzdChhbGxUYWdzKSwgZmlsZSkKICAgIHByaW50KGxlbihhbGxUYWdzKSkKICAgIHByaW50KGNvdW50KQoKCiMgcHJlcGFyZVRhZ3MoKSAjIDE5NTU4IGJvb2tzICAgICMzODQwIFRhZ3MKCgpkZWYgZ2V0Qm9va0RhdGFGcmFtZSgpOgogICAgd2l0aCBvcGVuKCdyYXcgZGF0YS9ib29rVGFncy5waWNrbGUnLCAncmInKSBhcyBmaWxlOgogICAgICAgIGluZGV4ZXMgPSBsaXN0KHBpY2tsZS5sb2FkKGZpbGUpKQoKICAgICMgdmFsaWQgbnVtYmVyIG9mIGJvb2tzIHdpdGggdGFnIGluZm9ybWF0aW9uIGlzIDE0MDYxCgogICAgYm9va01hdHJpeCA9IG5wLnplcm9zKCgzODQwLCAxNDA2MSkpCiAgICBib29rcyA9IGxpc3QoKQogICAgY291bnQgPSAwCiAgICBmb3IgaSBpbiByYW5nZSgxOTcpOgogICAgICAgIHBhdGggPSAncmF3IGRhdGEvYm9va1RhZ3MvYm9va3NUYWdzXyVzLnBpY2tsZScgJSBzdHIoaSkKICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgZGF0YSA9IHBpY2tsZS5sb2FkKGZpbGUpCgogICAgICAgIGZvciBrZXkgaW4gZGF0YS5rZXlzKCk6CiAgICAgICAgICAgIGlmIGtleSBub3QgaW4gYm9va3M6CiAgICAgICAgICAgICAgICBpZiBsZW4oZGF0YVtrZXldKSA+IDA6CiAgICAgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gZGF0YVtrZXldOgogICAgICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29rTWF0cml4W2luZGV4ZXMuaW5kZXgoaXRlbSldW2NvdW50XSArPSAxCiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAgICAgICAgIGJvb2tzLmFwcGVuZChrZXkpCiAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gMQogICAgYm9va0RhdGFGcmFtZSA9IHBkLkRhdGFGcmFtZShib29rTWF0cml4LCBpbmRleGVzLCBib29rcykKICAgICMgc2F2ZSB0aGUgaW5mb3JtYXRpb24gZm9yIGVhY2ggZmlsbQogICAgIyBib29rRGF0YUZyYW1lLnRvX2NzdigncmF3IGRhdGEvYm9va0luZm9tYXRpb24uY3N2JykKICAgICMgd2l0aCBvcGVuKCdyYXcgZGF0YS9ib29rRGF0YUZyYW1lLnBpY2tsZScsICd3YicpIGFzIGZpbGU6CiAgICAjICAgICBwaWNrbGUuZHVtcChib29rRGF0YUZyYW1lLCBmaWxlKQogICAgcmV0dXJuIGJvb2tEYXRhRnJhbWUsIGluZGV4ZXMKCgoKCmRlZiBnZXRVc2VySWRzKHR5cGUpOgogICAgdXNlcklkID0gc2V0KCkKCiAgICBmb3IgaSBpbiByYW5nZSgyMCk6CiAgICAgICAgd2l0aCBvcGVuKCd1c2VyTW92aWVzQm9va3NfJXNQZW9wbGUvcmVjb3JkXyVzLnBpY2tsZSclKHR5cGUsIHN0cihpKSksICdyYicpIGFzIGZpbGU6CiAgICAgICAgICAgIGRhdGEgPSBwaWNrbGUubG9hZChmaWxlKQogICAgICAgIGZvciBrZXkgaW4gZGF0YS5rZXlzKCk6CiAgICAgICAgICAgIHVzZXJJZC5hZGQoa2V5KQogICAgdXNlcklkID0gbGlzdCh1c2VySWQpCiAgICB3aXRoIG9wZW4oJ3VzZXJNb3ZpZXNCb29rc18lc1Blb3BsZS91c2VySWQucGlja2xlJyV0eXBlLCAnd2InKSBhcyBmaWxlOgogICAgICAgIHBpY2tsZS5kdW1wKHVzZXJJZCwgZmlsZSkKCmRlZiBnZXRNYXRyaXgodHlwZSk6CgogICAgI3R5cGUgPT0gRG9nL0NhdAoKICAgIGRmLCBpbmRleGVzID0gZ2V0Qm9va0RhdGFGcmFtZSgpCiAgICB3aXRoIG9wZW4oJ3VzZXJNb3ZpZXNCb29rc18lc1Blb3BsZS91c2VySWQucGlja2xlJyAlIHR5cGUsICdyYicpIGFzIGZpbGU6CiAgICAgICAgdXNlcklkcyA9IHBpY2tsZS5sb2FkKGZpbGUpCgogICAgUGVvcGxlRGF0YUZyYW1lID0gcGQuRGF0YUZyYW1lKG5wLnplcm9zKCgzODQwLCAyMDAxKSksIGluZGV4ZXMsIHVzZXJJZHMpCiAgICBjb3VudCA9IDAKCiAgICBkZWZhdWx0VmFsdWUgPSAxLzM4NDAKICAgIGZvciBpIGluIHJhbmdlKDIwKToKICAgICAgICB3aXRoIG9wZW4oJ3VzZXJNb3ZpZXNCb29rc18lc1Blb3BsZS9yZWNvcmRfJXMucGlja2xlJyAlICh0eXBlLCBzdHIoaSkpLCAncmInKSBhcyBmaWxlOgogICAgICAgICAgICBkYXRhID0gcGlja2xlLmxvYWQoZmlsZSkKCiAgICAgICAgZm9yIGtleSBpbiBkYXRhLmtleXMoKToKICAgICAgICAgICAgYm9va0xpc3QgPSBkYXRhW2tleV1bJ2Jvb2snXQoKICAgICAgICAgICAgaWYgbGVuKGJvb2tMaXN0KSAhPSAwOgogICAgICAgICAgICAgICAgayA9IGxlbihib29rTGlzdCkKICAgICAgICAgICAgICAgIGxpa2VzID0gW10KICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGJvb2tMaXN0OgogICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgbGlrZXMuYXBwZW5kKGRmW2l0ZW1dKQogICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgaWYgbGVuKGxpa2VzKSAhPSAwOgogICAgICAgICAgICAgICAgICAgIFBlb3BsZURhdGFGcmFtZVtrZXldID0gc3VtKGxpa2VzKS9rCiAgICAgICAgICAgICAgICAgICAgIyBjb3VudCArPSAxCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICMgZGVsIFBlb3BsZURhdGFGcmFtZVtrZXldCiAgICAgICAgICAgICAgICAgICAgUGVvcGxlRGF0YUZyYW1lW2tleV0gPSBkZWZhdWx0VmFsdWUKCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAjIGRlbCBQZW9wbGVEYXRhRnJhbWVba2V5XQogICAgICAgICAgICAgICAgUGVvcGxlRGF0YUZyYW1lW2tleV0gPSBkZWZhdWx0VmFsdWUKCiAgICAgICAgICAgIGNvdW50ICs9IDEKCiAgICBwcmludChjb3VudCkKICAgIFBlb3BsZURhdGFGcmFtZSA9IFBlb3BsZURhdGFGcmFtZS50cmFuc3Bvc2UoKQogICAgIyBwcmludCgiJXNQZW9wbGUgaGFzICVzICIlKHR5cGUsIHN0cihjb3VudCkpKQogICAgUGVvcGxlRGF0YUZyYW1lLnRvX2NzdignVHJhaW5pbmdEYXRhLyVzUGVvcGxlQm9va19ub3JtYWxpemVkLmNzdicldHlwZSkKICAgIHJldHVybiBQZW9wbGVEYXRhRnJhbWUKCiMgZ2V0VXNlcklkcygnRG9nJykKIyBnZXRNYXRyaXgoJ0RvZycpCiMgZ2V0VXNlcklkcygnQ2F0JykKIyBnZXRNYXRyaXgoJ0NhdCcpCgoKJycnCgpEb2dQZW9wbGUgaGFzIDY1MSAgCkNhdFBlb3BsZSBoYXMgNzE4ICAKCgonJycKCiMgZG9nQm9va01hdHJpeCA9IGdldE1hdHJpeCgnRG9nJykKIyBkb2dCb29rTWF0cml4ID0gbnAuYXJyYXkoZG9nQm9va01hdHJpeCkKIyB3aXRoIG9wZW4oJ1RyYWluaW5nRGF0YS9kb2dCb29rTWF0cml4LnBpY2tsZScsICd3YicpIGFzIGZpbGU6CiMgICAgIHBpY2tsZS5kdW1wKGRvZ0Jvb2tNYXRyaXgsIGZpbGUpCndpdGggb3BlbignVHJhaW5pbmdEYXRhL2RvZ0Jvb2tNYXRyaXgucGlja2xlJywgJ3JiJykgYXMgZmlsZToKICAgIGRvZ0Jvb2tNYXRyaXggPSBwaWNrbGUubG9hZChmaWxlKQoKIyBjYXRCb29rTWF0cml4ID0gZ2V0TWF0cml4KCdDYXQnKQojIGNhdEJvb2tNYXRyaXggPSBucC5hcnJheShjYXRCb29rTWF0cml4KQojIHdpdGggb3BlbignVHJhaW5pbmdEYXRhL2NhdEJvb2tNYXRyaXgucGlja2xlJywgJ3diJykgYXMgZmlsZToKIyAgICAgcGlja2xlLmR1bXAoY2F0Qm9va01hdHJpeCwgZmlsZSkKd2l0aCBvcGVuKCdUcmFpbmluZ0RhdGEvY2F0Qm9va01hdHJpeC5waWNrbGUnLCAncmInKSBhcyBmaWxlOgogICAgY2F0Qm9va01hdHJpeCA9IHBpY2tsZS5sb2FkKGZpbGUpCgoKZGVmIGRhdGFNaW5pbmcobWF0cml4MSwgbWF0cml4Mik6CgogICAgZG9nTGlzdCA9IG1hdHJpeDEudG9saXN0KCkKICAgIGNhdExpc3QgPSBtYXRyaXgyLnRvbGlzdCgpCgogICAgZG9nTGlzdC5leHRlbmQoY2F0TGlzdCkKICAgIHdob2xlTGlzdCA9IGRvZ0xpc3QKICAgICMgd2hvbGVMaXN0VCA9IG5wLmFycmF5KHdob2xlTGlzdCkudHJhbnNwb3NlKCkudG9saXN0KCkKICAgICNubyBuZWVkIGZvciB0Zi1pZGYKICAgICMgd2hvbGVMaXN0ID0gZ2V0VEZJREYod2hvbGVMaXN0LCB3aG9sZUxpc3RUKQoKCiAgICAjIDAgZm9yIGRvZyAxIGZvciBjYXQKICAgIGxhYmVscyA9IG5wLnplcm9zKCgxLCAyMDAxKSkudG9saXN0KClbMF0KICAgIGxhYmVscy5leHRlbmQobnAub25lcygoMSwgMjAwMSkpLnRvbGlzdCgpWzBdKQoKCiAgICBkYXRhID0gbnAuYXJyYXkod2hvbGVMaXN0KQogICAgbWF0cml4X21lYW4gPSBucC5tZWFuKGRhdGEsIDApCgogICAgbWF0cml4X2hhdCA9IGRhdGEgLSBtYXRyaXhfbWVhbgoKCiAgICBVLCBELCBWID0gbnAubGluYWxnLnN2ZChtYXRyaXhfaGF0LCBmdWxsX21hdHJpY2VzPUZhbHNlKQogICAgIwogICAgIyAjIyBmaW5kIDkwJSBvZiB0aGUgc3VtIG9mIHRoZSBlaWdlbnZhbHVlcwogICAgIwogICAgdGVtcCA9IDAuMAogICAgY291bnQgPSAwCiAgICBmb3IgaXRlbSBpbiBEOgogICAgICAgIGlmIHRlbXAgPD0gKHN1bShEKSowLjkpOgogICAgICAgICAgICB0ZW1wICs9IGl0ZW0KICAgICAgICAgICAgY291bnQgKz0gMQogICAgcHJpbnQoJ3JlZHVjZSB0aGUgZGltZW5zaW9uIHRvOiAnLCBjb3VudCkKICAgICMgcHJpbnQoKERbMF0rRFsxXStEWzJdK0RbM10rRFs0XSkvc3VtKEQpKQogICAgZGltZW5zaW9uUmVkdWN0aW9uTWF0cml4ID0gbnAubWF0KFZbMDpjb3VudCwgOl0pLnRyYW5zcG9zZSgpCiAgICBtYXRyaXhfcHJvamVjdGVkID0gbnAuZG90KG1hdHJpeF9oYXQsIGRpbWVuc2lvblJlZHVjdGlvbk1hdHJpeCkKICAgIG1hdHJpeF9wcm9qZWN0ZWQgPSBtYXRyaXhfcHJvamVjdGVkLnRvbGlzdCgpCiAgICAjIGZpZyA9IHBsdC5maWd1cmUoKQogICAgIyBwbHQuc2NhdHRlcihbdFswXSBmb3IgdCBpbiBtYXRyaXhfcHJvamVjdGVkWzo5NDJdXSwgW3RbMV0gZm9yIHQgaW4gbWF0cml4X3Byb2plY3RlZFs6OTQyXV0sIGM9J3JlZCcsIGFscGhhPTAuMykKICAgICMgcGx0LnNjYXR0ZXIoW3RbMF0gZm9yIHQgaW4gbWF0cml4X3Byb2plY3RlZFs5NDI6XV0sIFt0WzFdIGZvciB0IGluIG1hdHJpeF9wcm9qZWN0ZWRbOTQyOl1dLCBjPSdibHVlJywgYWxwaGE9MC4zKQogICAgIyBwbHQuc2hvdygpCgogICAgcmVzdWx0ID0gbnAuemVyb3MoKDYsIDEwKSkKICAgIGZvciBpIGluIHJhbmdlKDEwKToKICAgICAgICBYX3RyYWluLCBYX3Rlc3QsIHlfdHJhaW4sIHlfdGVzdCA9IHRyYWluX3Rlc3Rfc3BsaXQobWF0cml4X3Byb2plY3RlZCwgbGFiZWxzLCB0ZXN0X3NpemU9MC4yLCByYW5kb21fc3RhdGU9MykKICAgICAgICAjCiAgICAgICAgIyBubyBzaWduaWZpY2FudCBmaW5kCiAgICAgICAgIwogICAgICAgIGxyID0gTG9naXN0aWNSZWdyZXNzaW9uKCkKICAgICAgICBsci5maXQoWF90cmFpbiwgeV90cmFpbikKICAgICAgICByZXN1bHRbMF1baV0gPSBsci5zY29yZShYX3Rlc3QsIHlfdGVzdCkKICAgICAgICAjIHByaW50KCdsb2dpc3RpYyByZWdyZXNzaW9uIHNjb3JlOiAnLCBsci5zY29yZShYX3Rlc3QsIHlfdGVzdCkpCgoKICAgICAgICBjbGYgPSBEZWNpc2lvblRyZWVDbGFzc2lmaWVyKCkKICAgICAgICBjbGYuZml0KFhfdHJhaW4sIHlfdHJhaW4pCiAgICAgICAgcmVzdWx0WzFdW2ldID0gY2xmLnNjb3JlKFhfdGVzdCwgeV90ZXN0KQogICAgICAgICMgcHJpbnQoJ2xkZWNpc2lvbiB0cmVlIHNjb3JlOiAnLCBjbGYuc2NvcmUoWF90ZXN0LCB5X3Rlc3QpKQoKICAgICAgICBjbGYgPSBTVkMoKQogICAgICAgIGNsZi5maXQoWF90cmFpbiwgeV90cmFpbikKICAgICAgICByZXN1bHRbMl1baV0gPSBjbGYuc2NvcmUoWF90ZXN0LCB5X3Rlc3QpCiAgICAgICAgIyBwcmludCgnU1ZNIHNjb3JlOiAnLCBjbGYuc2NvcmUoWF90ZXN0LCB5X3Rlc3QpKQoKICAgICAgICBjbGYgPSBHYXVzc2lhbk5CKCkKICAgICAgICBjbGYuZml0KFhfdHJhaW4sIHlfdHJhaW4pCiAgICAgICAgcmVzdWx0WzNdW2ldID0gY2xmLnNjb3JlKFhfdGVzdCwgeV90ZXN0KQogICAgICAgICMgcHJpbnQoJ05haXZlIGJheWVzIHNjb3JlOiAnLCBjbGYuc2NvcmUoWF90ZXN0LCB5X3Rlc3QpKQoKICAgICAgICBuZWlnaCA9IEtOZWlnaGJvcnNDbGFzc2lmaWVyKG5fbmVpZ2hib3JzPTMpCiAgICAgICAgbmVpZ2guZml0KFhfdHJhaW4sIHlfdHJhaW4pCiAgICAgICAgcmVzdWx0WzRdW2ldID0gbmVpZ2guc2NvcmUoWF90ZXN0LCB5X3Rlc3QpCiAgICAgICAgIyBwcmludCgnayBuZWFyZXN0IG5laWdoYm91ciBzY29yZTogJywgbmVpZ2guc2NvcmUoWF90ZXN0LCB5X3Rlc3QpKQoKICAgICAgICBjbGYgPSBHcmFkaWVudEJvb3N0aW5nQ2xhc3NpZmllcigpCiAgICAgICAgY2xmLmZpdChYX3RyYWluLCB5X3RyYWluKQogICAgICAgIHJlc3VsdFs1XVtpXSA9IGNsZi5zY29yZShYX3Rlc3QsIHlfdGVzdCkKICAgICAgICAjIHByaW50KCdib29zdGluZyBzY29yZTogJywgY2xmLnNjb3JlKFhfdGVzdCwgeV90ZXN0KSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICMgcHJpbnQocmVzdWx0KQoKPHxmaW1fZW5kfD4="]
["ec468e6c3cd873eaa1af8c0a29b0ee37e4105919-1","ec468e6c3cd873eaa1af8c0a29b0ee37e4105919","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgpmcm9tIHNrbGVhcm4ubW9kZWxfc2VsZWN0aW9uIGltcG9ydCB0cmFpbl90ZXN0X3NwbGl0CmZyb20gc2NpcHkgaW1wb3J0IG1pc2MKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IGpzb24KZnJvbSBnbG9iIGltcG9ydCBnbG9iCmltcG9ydCBvcwppbXBvcnQgc3lzCgpkZWYgbGFiZWwoZixkZik6Cjx8ZmltX2hvbGV8PgogICAgICAgIGlmIHBob25lLnNoYXBlWzBdID4gMDoKICAgICAgICAgICAgcGhvbmUgPSBwaG9uZVswXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHBob25lID0gTm9uZQogICAgZWxzZToKICAgICAgICBwaG9uZSA9IE5vbmUKCiAgICBzeXMuc3Rkb3V0LndyaXRlKCdccicrZikKCiAgICByZXR1cm4gcGhvbmUsIHNwa3IKCmRlZiByZWFkX25zZl92dHNmKGZpbGVuYW1lKToKICAgIHdpdGggbnAubG9hZChmaWxlbmFtZSkgYXMgZjoKICAgICAgICByZXR1cm4gZlsneF90cmFpbiddLCBmWyd4X3ZhbCddLCBmWyd4X3Rlc3QnXSwgXAogICAgICAgICAgICBmWydwaG9uZV90cmFpbiddLCBmWydwaG9uZV92YWwnXSwgZlsncGhvbmVfdGVzdCddLCBcCiAgICAgICAgICAgIGZbJ3Nwa3JfdHJhaW4nXSwgZlsnc3Brcl92YWwnXSwgZlsnc3Brcl90ZXN0J10sIFwKICAgICAgICAgICAgZlsnYWxpZ25fdHJhaW4nXSwgZlsnYWxpZ25fdmFsJ10sIGZbJ2FsaWduX3Rlc3QnXSwgXAogICAgICAgICAgICBmWydmbmFtZV90cmFpbiddLCBmWydmbmFtZV92YWwnXSwgZlsnZm5hbWVfdGVzdCddCgpkZWYgbGFiZWxfcGhvbmVzKGZpbGVuYW1lcywgYWxpZ25fZGlyKToKICAgIHRyX3Blcl9pbWcgPSAyLjAKICAgIHRyID0gMC4wMDYwMDQKICAgIGZzID0gMS4wIC8gKHRyX3Blcl9pbWcgKiB0cikKCiAgICBkZWYgc2VjMmZyYW1lKHQpOgogICAgICAgIHMgPSBpbnQobnAucm91bmQodCAqIGZzKSkKICAgICAgICByZXR1cm4gcwoKICAgIHBob25lX2xpc3QgPSBbTm9uZV0gKiBsZW4oZmlsZW5hbWVzKQogICAgYXZpX2xpc3QgPSBbIGYuc3BsaXQob3MucGF0aC5zZXApWy0yXSBmb3IgZiBpbiBmaWxlbmFtZXMgXQogICAgaW1nX2xpc3QgPSBbIGludChmLnNwbGl0KG9zLnBhdGguc2VwKVstMV0ucmVwbGFjZSgnLnBuZycsJycpKSBmb3IgZiBpbiBmaWxlbmFtZXMgXQoKICAgICMgbGlzdCBqc29uIGZpbGVzCiAgICBqc29uX2ZpbGVzID0gZ2xvYihvcy5wYXRoLmpvaW4oYWxpZ25fZGlyLCcqJywnYWxpZ24nLCcqLmpzb24nKSkKCiAgICBmb3IganNvbl9pZHgsIGpzb25fZmlsZW5hbWUgaW4gZW51bWVyYXRlKGpzb25fZmlsZXMpOgogICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xyJytzdHIoanNvbl9pZHgrMSkrJy8nK3N0cihsZW4oanNvbl9maWxlcykpKycgJytqc29uX2ZpbGVuYW1lKQoKICAgICAgICAjIGxvYWQgdGhlIGpzb24gZmlsZQogICAgICAgIGQgPSBqc29uLmxvYWRzKG9wZW4oanNvbl9maWxlbmFtZSkucmVhZCgpKQoKICAgICAgICAjIGRldGVybWluZSB3aGljaCBhdmkgZmlsZSB0aGUganNvbiBmaWxlIGNvcnJlc3BvbmRzIHRvCiAgICAgICAgYXZpID0ganNvbl9maWxlbmFtZS5zcGxpdChvcy5wYXRoLnNlcClbLTFdLnJlcGxhY2UoJy5qc29uJywnJykKCiAgICAgICAgZm9yIHcgaW4gZFsnd29yZHMnXToKICAgICAgICAgICAgaWYgd1snY2FzZSddPT0nc3VjY2Vzcyc6CiAgICAgICAgICAgICAgICB3X25hbWUgPSB3WydhbGlnbmVkV29yZCddCgogICAgICAgICAgICAgICAgIyBnZXQgc3RhcnQgdGltZSBmb3Igd29yZAogICAgICAgICAgICAgICAgd29yZF9zdGFydF90aW1lID0gZmxvYXQod1snc3RhcnQnXSkKCiAgICAgICAgICAgICAgICAjIG9mZnNldCB0cmFja3MgdGltZSBzaW5jZSBzdGFydCBvZiB3b3JkCiAgICAgICAgICAgICAgICBvZmZzZXQgPSAwLjAKICAgICAgICAgICAgICAgIGZvciBwaCBpbiB3WydwaG9uZXMnXToKICAgICAgICAgICAgICAgICAgICBwaF9uYW1lID0gcGhbJ3Bob25lJ10KCiAgICAgICAgICAgICAgICAgICAgIyBnZXQgb25zZXQgYW5kIGVuZCBvZiBwaG9uZSBpbiBzZWNvbmRzCiAgICAgICAgICAgICAgICAgICAgb25zID0gd29yZF9zdGFydF90aW1lICsgb2Zmc2V0CiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGZsb2F0KHBoWydkdXJhdGlvbiddKQogICAgICAgICAgICAgICAgICAgIGVuZCA9ICBvbnMgKyBvZmZzZXQKCiAgICAgICAgICAgICAgICAgICAgIyBjb252ZXJ0IG9uc2V0IGFuZCBlbmQgb2YgcGhvbmUgdG8gZnJhbWVzCiAgICAgICAgICAgICAgICAgICAgb25zID0gc2VjMmZyYW1lKG9ucykKICAgICAgICAgICAgICAgICAgICBlbmQgPSBzZWMyZnJhbWUoZW5kKQoKICAgICAgICAgICAgICAgICAgICAjIHNldCBwaG9uZSBmb3IgYWxsIGltYWdlcyBpbiByYW5nZQogICAgICAgICAgICAgICAgICAgIGZvciBpZHgsIChhLCBpbWcpIGluIGVudW1lcmF0ZSh6aXAoYXZpX2xpc3QsIGltZ19saXN0KSk6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID09IGF2aSkgYW5kIChpbWcgPj0gb25zKSBhbmQgKGltZyA8PSBlbmQpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmVfbGlzdFtpZHhdID0gcGhfbmFtZS5zcGxpdCgnXycpWzBdCgogICAgcmV0dXJuIG5wLmFycmF5KHBob25lX2xpc3QpCgppZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKCiAgICBkYXRhX3BhdGggPSBzeXMuYXJndlsxXQogICAgYWxpZ25fcGF0aCA9IHN5cy5hcmd2WzJdCgogICAgIyBnZXQgbGlzdCBvZiBmaWxlbmFtZXMKICAgIGZuYW1lID0gZ2xvYihvcy5wYXRoLmpvaW4oZGF0YV9wYXRoLCcqJywncG5nJywnKicsJyoucG5nJykpCgogICAgIyBnZXQgbGlzdCBvZiBpbWFnZXMKICAgIHByaW50KCdMb2FkaW5nIGltYWdlIGRhdGEnKQogICAgaW1nX2xpc3QgPSBbTm9uZV0gKiBsZW4oZm5hbWUpCiAgICBmb3IgaWR4LCBmIGluIGVudW1lcmF0ZShmbmFtZSk6CiAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXHInK3N0cihpZHgrMSkrJy8nK3N0cihsZW4oZm5hbWUpKSsnICcrZikKICAgICAgICBpbWdfbGlzdFtpZHhdID0gbWlzYy5pbXJlYWQoZikKICAgIGltZyA9IG5wLmFycmF5KGltZ19saXN0KQogICAgcHJpbnQoJycpCgogICAgcHJpbnQoJ0NvbnZlcnQgaW1hZ2VzIHRvIGZsb2F0MzIsIG5vcm1hbGl6ZSB0byByYW5nZSBbMCwxXSwgcmVzaGFwZSB0byBzaXplICg/LDg0LDg0LDEpJykKICAgIGltZyA9IG5wLmZsb2F0MzIoaW1nKSAvIGltZy5tYXgoKQogICAgaW1nID0gbnAucmVzaGFwZShpbWcsIGltZy5zaGFwZSsoMSwpKQoKICAgICMgcmVhZCBtYW51YWwgYW5ub3RhdGlvbnMKICAgIGRmID0gcGQucmVhZF9jc3Yob3MucGF0aC5qb2luKCdhbm5vdGF0aW9ucycsJ2VuZHBvaW50cy5jc3YnKSkKCiAgICBwcmludCgnTGFiZWxpbmcgcGhvbmVzIChtYW51YWwgYW5ub3RhdGlvbiBsYWJlbHMpJykKICAgIHBob25lLCBzcGtyID0gbWFwKGxpc3QsIHppcCgqW2xhYmVsKGYsZGYpIGZvciBmIGluIGZuYW1lXSkpCiAgICBwcmludCgnJykKCiAgICBwcmludCgnTGFiZWxpbmcgcGhvbmVzIChnZW50bGUgZm9yY2VkIGFsaWdubWVudCBsYWJlbHMpJykKICAgIGFsaWduID0gbGFiZWxfcGhvbmVzKGZuYW1lLCBhbGlnbl9wYXRoKQoKICAgICMgdHJhaW4vdmFsL3Rlc3Qgc3BsaXQgMC41LzAuMjUvMC4yNQogICAgcHJpbnQoJ1xuR2VuZXJhdGUgdHJhaW4vdmFsL3Rlc3Qgc3BsaXQgKDUwLzI1LzI1KScpCiAgICB4X3RyYWluLCB4X3Rlc3QsIGZuYW1lX3RyYWluLCBmbmFtZV90ZXN0LCBwaG9uZV90cmFpbiwgcGhvbmVfdGVzdCwgc3Brcl90cmFpbiwgc3Brcl90ZXN0LCBhbGlnbl90cmFpbiwgYWxpZ25fdGVzdCBcCiAgICAgICAgPSB0cmFpbl90ZXN0X3NwbGl0KGltZywgZm5hbWUsIHBob25lLCBzcGtyLCBhbGlnbiwgdGVzdF9zaXplPTAuMjUsIHN0cmF0aWZ5PXNwa3IpCiAgICB4X3RyYWluLCB4X3ZhbCwgZm5hbWVfdHJhaW4sIGZuYW1lX3ZhbCwgcGhvbmVfdHJhaW4sIHBob25lX3ZhbCwgc3Brcl90cmFpbiwgc3Brcl92YWwsIGFsaWduX3RyYWluLCBhbGlnbl92YWwgXAogICAgICAgID0gdHJhaW5fdGVzdF9zcGxpdCh4X3RyYWluLCBmbmFtZV90cmFpbiwgcGhvbmVfdHJhaW4sIHNwa3JfdHJhaW4sIGFsaWduX3RyYWluLCB0ZXN0X3NpemU9MC4zMywgc3RyYXRpZnk9c3Brcl90cmFpbikKCiAgICBwcmludCgnU2F2aW5nIHRvIGRpc2snKQogICAgbnAuc2F2ZXpfY29tcHJlc3NlZCgnbnNmX3Z0c2YubnB6JywgXAogICAgICAgIHhfdHJhaW49eF90cmFpbiwgeF92YWw9eF92YWwsIHhfdGVzdD14X3Rlc3QsIFwKICAgICAgICBwaG9uZV90cmFpbj1waG9uZV90cmFpbiwgcGhvbmVfdmFsPXBob25lX3ZhbCwgcGhvbmVfdGVzdD1waG9uZV90ZXN0LCBcCiAgICAgICAgc3Brcl90cmFpbj1zcGtyX3RyYWluLCBzcGtyX3ZhbD1zcGtyX3ZhbCwgc3Brcl90ZXN0PXNwa3JfdGVzdCwgXAogICAgICAgIGFsaWduX3RyYWluPWFsaWduX3RyYWluLCBhbGlnbl92YWw9YWxpZ25fdmFsLCBhbGlnbl90ZXN0PWFsaWduX3Rlc3QsIFwKICAgICAgICBmbmFtZV90cmFpbj1mbmFtZV90cmFpbiwgZm5hbWVfdmFsPWZuYW1lX3ZhbCwgZm5hbWVfdGVzdD1mbmFtZV90ZXN0KQo8fGZpbV9zdWZmaXh8PgogICAgc3BrciwgXywgYXZpLCBmaWxlbmFtZSA9IGYuc3BsaXQob3MucGF0aC5zZXApWy00Ol0KICAgIGlmIGF2aSBpbiBkZi5hdmkudmFsdWVzOgogICAgICAgIGltZyA9IGZsb2F0KGZpbGVuYW1lLnJlcGxhY2UoJy5wbmcnLCcnKSkKICAgICAgICBwaG9uZSA9IGRmLmxvY1tkZlsoZGYuYXZpID09IGF2aSkgJiAoZGYuaW1nID09IGltZyldLmluZGV4LCdwaG9uZSddLnZhbHVlcwo8fGZpbV9lbmR8Pg=="]
["ec468e6c3cd873eaa1af8c0a29b0ee37e4105919-2","ec468e6c3cd873eaa1af8c0a29b0ee37e4105919","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgpmcm9tIHNrbGVhcm4ubW9kZWxfc2VsZWN0aW9uIGltcG9ydCB0cmFpbl90ZXN0X3NwbGl0CmZyb20gc2NpcHkgaW1wb3J0IG1pc2MKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IGpzb24KZnJvbSBnbG9iIGltcG9ydCBnbG9iCmltcG9ydCBvcwppbXBvcnQgc3lzCgpkZWYgbGFiZWwoZixkZik6CiAgICBzcGtyLCBfLCBhdmksIGZpbGVuYW1lID0gZi5zcGxpdChvcy5wYXRoLnNlcClbLTQ6XQogICAgaWYgYXZpIGluIGRmLmF2aS52YWx1ZXM6CiAgICAgICAgaW1nID0gZmxvYXQoZmlsZW5hbWUucmVwbGFjZSgnLnBuZycsJycpKQogICAgICAgIHBob25lID0gZGYubG9jW2RmWyhkZi5hdmkgPT0gYXZpKSAmIChkZi5pbWcgPT0gaW1nKV0uaW5kZXgsJ3Bob25lJ10udmFsdWVzCiAgICAgICAgaWYgcGhvbmUuc2hhcGVbMF0gPiAwOgogICAgICAgICAgICBwaG9uZSA9IHBob25lWzBdCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcGhvbmUgPSBOb25lCiAgICBlbHNlOgogICAgICAgIHBob25lID0gTm9uZQoKICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xyJytmKQoKICAgIHJldHVybiBwaG9uZSwgc3BrcgoKZGVmIHJlYWRfbnNmX3Z0c2YoZmlsZW5hbWUpOgogICAgd2l0aCBucC5sb2FkKGZpbGVuYW1lKSBhcyBmOgogICAgICAgIHJldHVybiBmWyd4X3RyYWluJ10sIGZbJ3hfdmFsJ10sIGZbJ3hfdGVzdCddLCBcCiAgICAgICAgICAgIGZbJ3Bob25lX3RyYWluJ10sIGZbJ3Bob25lX3ZhbCddLCBmWydwaG9uZV90ZXN0J10sIFwKICAgICAgICAgICAgZlsnc3Brcl90cmFpbiddLCBmWydzcGtyX3ZhbCddLCBmWydzcGtyX3Rlc3QnXSwgXAogICAgICAgICAgICBmWydhbGlnbl90cmFpbiddLCBmWydhbGlnbl92YWwnXSwgZlsnYWxpZ25fdGVzdCddLCBcCiAgICAgICAgICAgIGZbJ2ZuYW1lX3RyYWluJ10sIGZbJ2ZuYW1lX3ZhbCddLCBmWydmbmFtZV90ZXN0J10KCmRlZiBsYWJlbF9waG9uZXMoZmlsZW5hbWVzLCBhbGlnbl9kaXIpOgogICAgdHJfcGVyX2ltZyA9IDIuMAogICAgdHIgPSAwLjAwNjAwNAogICAgZnMgPSAxLjAgLyAodHJfcGVyX2ltZyAqIHRyKQoKICAgIGRlZiBzZWMyZnJhbWUodCk6CiAgICAgICAgcyA9IGludChucC5yb3VuZCh0ICogZnMpKQogICAgICAgIHJldHVybiBzCgogICAgcGhvbmVfbGlzdCA9IFtOb25lXSAqIGxlbihmaWxlbmFtZXMpCiAgICBhdmlfbGlzdCA9IFsgZi5zcGxpdChvcy5wYXRoLnNlcClbLTJdIGZvciBmIGluIGZpbGVuYW1lcyBdCiAgICBpbWdfbGlzdCA9IFsgaW50KGYuc3BsaXQob3MucGF0aC5zZXApWy0xXS5yZXBsYWNlKCcucG5nJywnJykpIGZvciBmIGluIGZpbGVuYW1lcyBdCgogICAgIyBsaXN0IGpzb24gZmlsZXMKICAgIGpzb25fZmlsZXMgPSBnbG9iKG9zLnBhdGguam9pbihhbGlnbl9kaXIsJyonLCdhbGlnbicsJyouanNvbicpKQoKICAgIGZvciBqc29uX2lkeCwganNvbl9maWxlbmFtZSBpbiBlbnVtZXJhdGUoanNvbl9maWxlcyk6CiAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXHInK3N0cihqc29uX2lkeCsxKSsnLycrc3RyKGxlbihqc29uX2ZpbGVzKSkrJyAnK2pzb25fZmlsZW5hbWUpCgogICAgICAgICMgbG9hZCB0aGUganNvbiBmaWxlCiAgICAgICAgZCA9IGpzb24ubG9hZHMob3Blbihqc29uX2ZpbGVuYW1lKS5yZWFkKCkpCgogICAgICAgICMgZGV0ZXJtaW5lIHdoaWNoIGF2aSBmaWxlIHRoZSBqc29uIGZpbGUgY29ycmVzcG9uZHMgdG8KICAgICAgICBhdmkgPSBqc29uX2ZpbGVuYW1lLnNwbGl0KG9zLnBhdGguc2VwKVstMV0ucmVwbGFjZSgnLmpzb24nLCcnKQoKICAgICAgICBmb3IgdyBpbiBkWyd3b3JkcyddOgogICAgICAgICAgICBpZiB3WydjYXNlJ109PSdzdWNjZXNzJzoKICAgICAgICAgICAgICAgIHdfbmFtZSA9IHdbJ2FsaWduZWRXb3JkJ10KCiAgICAgICAgICAgICAgICAjIGdldCBzdGFydCB0aW1lIGZvciB3b3JkCiAgICAgICAgICAgICAgICB3b3JkX3N0YXJ0X3RpbWUgPSBmbG9hdCh3WydzdGFydCddKQoKICAgICAgICAgICAgICAgICMgb2Zmc2V0IHRyYWNrcyB0aW1lIHNpbmNlIHN0YXJ0IG9mIHdvcmQKICAgICAgICAgICAgICAgIG9mZnNldCA9IDAuMAogICAgICAgICAgICAgICAgZm9yIHBoIGluIHdbJ3Bob25lcyddOgogICAgICAgICAgICAgICAgICAgIHBoX25hbWUgPSBwaFsncGhvbmUnXQoKICAgICAgICAgICAgICAgICAgICAjIGdldCBvbnNldCBhbmQgZW5kIG9mIHBob25lIGluIHNlY29uZHMKICAgICAgICAgICAgICAgICAgICBvbnMgPSB3b3JkX3N0YXJ0X3RpbWUgKyBvZmZzZXQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBmbG9hdChwaFsnZHVyYXRpb24nXSkKICAgICAgICAgICAgICAgICAgICBlbmQgPSAgb25zICsgb2Zmc2V0CgogICAgICAgICAgICAgICAgICAgICMgY29udmVydCBvbnNldCBhbmQgZW5kIG9mIHBob25lIHRvIGZyYW1lcwo8fGZpbV9lbmR8Pg=="]
["ec468e6c3cd873eaa1af8c0a29b0ee37e4105919-3","ec468e6c3cd873eaa1af8c0a29b0ee37e4105919","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgpmcm9tIHNrbGVhcm4ubW9kZWxfc2VsZWN0aW9uIGltcG9ydCB0cmFpbl90ZXN0X3NwbGl0CmZyb20gc2NpcHkgaW1wb3J0IG1pc2MKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IGpzb24KZnJvbSBnbG9iIGltcG9ydCBnbG9iCmltcG9ydCBvcwppbXBvcnQgc3lzCgpkZWYgbGFiZWwoZixkZik6CiAgICBzcGtyLCBfLCBhdmksIGZpbGVuYW1lID0gZi5zcGxpdChvcy5wYXRoLnNlcClbLTQ6XQogICAgaWYgYXZpIGluIGRmLmF2aS52YWx1ZXM6CiAgICAgICAgaW1nID0gZmxvYXQoZmlsZW5hbWUucmVwbGFjZSgnLnBuZycsJycpKQogICAgICAgIHBob25lID0gZGYubG9jW2RmWyhkZi5hdmkgPT0gYXZpKSAmIChkZi5pbWcgPT0gaW1nKV0uaW5kZXgsJ3Bob25lJ10udmFsdWVzCiAgICAgICAgaWYgcGhvbmUuc2hhcGVbMF0gPiAwOgogICAgICAgICAgICBwaG9uZSA9IHBob25lWzBdCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcGhvbmUgPSBOb25lCiAgICBlbHNlOgogICAgICAgIHBob25lID0gTm9uZQoKICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xyJytmKQoKICAgIHJldHVybiBwaG9uZSwgc3BrcgoKZGVmIHJlYWRfbnNmX3Z0c2YoZmlsZW5hbWUpOgogICAgd2l0aCBucC5sb2FkKGZpbGVuYW1lKSBhcyBmOgogICAgICAgIHJldHVybiBmWyd4X3RyYWluJ10sIGZbJ3hfdmFsJ10sIGZbJ3hfdGVzdCddLCBcCiAgICAgICAgICAgIGZbJ3Bob25lX3RyYWluJ10sIGZbJ3Bob25lX3ZhbCddLCBmWydwaG9uZV90ZXN0J10sIFwKICAgICAgICAgICAgZlsnc3Brcl90cmFpbiddLCBmWydzcGtyX3ZhbCddLCBmWydzcGtyX3Rlc3QnXSwgXAogICAgICAgICAgICBmWydhbGlnbl90cmFpbiddLCBmWydhbGlnbl92YWwnXSwgZlsnYWxpZ25fdGVzdCddLCBcCiAgICAgICAgICAgIGZbJ2ZuYW1lX3RyYWluJ10sIGZbJ2ZuYW1lX3ZhbCddLCBmWydmbmFtZV90ZXN0J10KCmRlZiBsYWJlbF9waG9uZXMoZmlsZW5hbWVzLCBhbGlnbl9kaXIpOgogICAgdHJfcGVyX2ltZyA9IDIuMAogICAgdHIgPSAwLjAwNjAwNAogICAgZnMgPSAxLjAgLyAodHJfcGVyX2ltZyAqIHRyKQoKICAgIGRlZiBzZWMyZnJhbWUodCk6CiAgICAgICAgcyA9IGludChucC5yb3VuZCh0ICogZnMpKQogICAgICAgIHJldHVybiBzCgogICAgcGhvbmVfbGlzdCA9IFtOb25lXSAqIGxlbihmaWxlbmFtZXMpCiAgICBhdmlfbGlzdCA9IFsgZi5zcGxpdChvcy5wYXRoLnNlcClbLTJdIGZvciBmIGluIGZpbGVuYW1lcyBdCiAgICBpbWdfbGlzdCA9IFsgaW50KGYuc3BsaXQob3MucGF0aC5zZXApWy0xXS5yZXBsYWNlKCcucG5nJywnJykpIGZvciBmIGluIGZpbGVuYW1lcyBdCgogICAgIyBsaXN0IGpzb24gZmlsZXMKICAgIGpzb25fZmlsZXMgPSBnbG9iKG9zLnBhdGguam9pbihhbGlnbl9kaXIsJyonLCdhbGlnbicsJyouanNvbicpKQoKICAgIGZvciBqc29uX2lkeCwganNvbl9maWxlbmFtZSBpbiBlbnVtZXJhdGUoanNvbl9maWxlcyk6CiAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXHInK3N0cihqc29uX2lkeCsxKSsnLycrc3RyKGxlbihqc29uX2ZpbGVzKSkrJyAnK2pzb25fZmlsZW5hbWUpCgogICAgICAgICMgbG9hZCB0aGUganNvbiBmaWxlCiAgICAgICAgZCA9IGpzb24ubG9hZHMob3Blbihqc29uX2ZpbGVuYW1lKS5yZWFkKCkpCgogICAgICAgICMgZGV0ZXJtaW5lIHdoaWNoIGF2aSBmaWxlIHRoZSBqc29uIGZpbGUgY29ycmVzcG9uZHMgdG8KICAgICAgICBhdmkgPSBqc29uX2ZpbGVuYW1lLnNwbGl0KG9zLnBhdGguc2VwKVstMV0ucmVwbGFjZSgnLmpzb24nLCcnKQoKICAgICAgICBmb3IgdyBpbiBkWyd3b3JkcyddOgogICAgICAgICAgICBpZiB3WydjYXNlJ109PSdzdWNjZXNzJzoKICAgICAgICAgICAgICAgIHdfbmFtZSA9IHdbJ2FsaWduZWRXb3JkJ10KCiAgICAgICAgICAgICAgICAjIGdldCBzdGFydCB0aW1lIGZvciB3b3JkCiAgICAgICAgICAgICAgICB3b3JkX3N0YXJ0X3RpbWUgPSBmbG9hdCh3WydzdGFydCddKQoKICAgICAgICAgICAgICAgICMgb2Zmc2V0IHRyYWNrcyB0aW1lIHNpbmNlIHN0YXJ0IG9mIHdvcmQKICAgICAgICAgICAgICAgIG9mZnNldCA9IDAuMAogICAgICAgICAgICAgICAgZm9yIHBoIGluIHdbJ3Bob25lcyddOgogICAgICAgICAgICAgICAgICAgIHBoX25hbWUgPSBwaFsncGhvbmUnXQoKICAgICAgICAgICAgICAgICAgICAjIGdldCBvbnNldCBhbmQgZW5kIG9mIHBob25lIGluIHNlY29uZHMKICAgICAgICAgICAgICAgICAgICBvbnMgPSB3b3JkX3N0YXJ0X3RpbWUgKyBvZmZzZXQKICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gZmxvYXQocGhbJ2R1cmF0aW9uJ10pCiAgICAgICAgICAgICAgICAgICAgZW5kID0gIG9ucyArIG9mZnNldAoKICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgb25zZXQgYW5kIGVuZCBvZiBwaG9uZSB0byBmcmFtZXMKICAgICAgICAgICAgICAgICAgICBvbnMgPSBzZWMyZnJhbWUob25zKQogICAgICAgICAgICAgICAgICAgIGVuZCA9IHNlYzJmcmFtZShlbmQpCgogICAgICAgICAgICAgICAgICAgICMgc2V0IHBob25lIGZvciBhbGwgaW1hZ2VzIGluIHJhbmdlCiAgICAgICAgICAgICAgICAgICAgZm9yIGlkeCwgKGEsIGltZykgaW4gZW51bWVyYXRlKHppcChhdmlfbGlzdCwgaW1nX2xpc3QpKToKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPT0gYXZpKSBhbmQgKGltZyA+PSBvbnMpIGFuZCAoaW1nIDw9IGVuZCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaG9uZV9saXN0W2lkeF0gPSBwaF9uYW1lLnNwbGl0KCdfJylbMF0KCiAgICByZXR1cm4gbnAuYXJyYXkocGhvbmVfbGlzdCkKCmlmIF9fbmFtZV9fPT0iX19tYWluX18iOgoKICAgIGRhdGFfcGF0aCA9IHN5cy5hcmd2WzFdCiAgICBhbGlnbl9wYXRoID0gc3lzLmFyZ3ZbMl0KCiAgICAjIGdldCBsaXN0IG9mIGZpbGVuYW1lcwogICAgZm5hbWUgPSBnbG9iKG9zLnBhdGguam9pbihkYXRhX3BhdGgsJyonLCdwbmcnLCcqJywnKi5wbmcnKSkKCiAgICAjIGdldCBsaXN0IG9mIGltYWdlcwogICAgcHJpbnQoJ0xvYWRpbmcgaW1hZ2UgZGF0YScpCiAgICBpbWdfbGlzdCA9IFtOb25lXSAqIGxlbihmbmFtZSkKICAgIGZvciBpZHgsIGYgaW4gZW51bWVyYXRlKGZuYW1lKToKICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdccicrc3RyKGlkeCsxKSsnLycrc3RyKGxlbihmbmFtZSkpKycgJytmKQogICAgICAgIGltZ19saXN0W2lkeF0gPSBtaXNjLmltcmVhZChmKQogICAgaW1nID0gbnAuYXJyYXkoaW1nX2xpc3QpCiAgICBwcmludCgnJykKCiAgICBwcmludCgnQ29udmVydCBpbWFnZXMgdG8gZmxvYXQzMiwgbm9ybWFsaXplIHRvIHJhbmdlIFswLDFdLCByZXNoYXBlIHRvIHNpemUgKD8sODQsODQsMSknKQogICAgaW1nID0gbnAuZmxvYXQzMihpbWcpIC8gaW1nLm1heCgpCiAgICBpbWcgPSBucC5yZXNoYXBlKGltZywgaW1nLnNoYXBlKygxLCkpCgogICAgIyByZWFkIG1hbnVhbCBhbm5vdGF0aW9ucwogICAgZGYgPSBwZC5yZWFkX2Nzdihvcy5wYXRoLmpvaW4oJ2Fubm90YXRpb25zJywnZW5kcG9pbnRzLmNzdicpKQoKICAgIHByaW50KCdMYWJlbGluZyBwaG9uZXMgKG1hbnVhbCBhbm5vdGF0aW9uIGxhYmVscyknKQogICAgcGhvbmUsIHNwa3IgPSBtYXAobGlzdCwgemlwKCpbbGFiZWwoZixkZikgZm9yIGYgaW4gZm5hbWVdKSkKICAgIHByaW50KCcnKQoKICAgIHByaW50KCdMYWJlbGluZyBwaG9uZXMgKGdlbnRsZSBmb3JjZWQgYWxpZ25tZW50IGxhYmVscyknKQogICAgYWxpZ24gPSBsYWJlbF9waG9uZXMoZm5hbWUsIGFsaWduX3BhdGgpCgogICAgIyB0cmFpbi92YWwvdGVzdCBzcGxpdCAwLjUvMC4yNS8wLjI1CiAgICBwcmludCgnXG5HZW5lcmF0ZSB0cmFpbi92YWwvdGVzdCBzcGxpdCAoNTAvMjUvMjUpJykKICAgIHhfdHJhaW4sIHhfdGVzdCwgZm5hbWVfdHJhaW4sIGZuYW1lX3Rlc3QsIHBob25lX3RyYWluLCBwaG9uZV90ZXN0LCBzcGtyX3RyYWluLCBzcGtyX3Rlc3QsIGFsaWduX3RyYWluLCBhbGlnbl90ZXN0IFwKICAgICAgICA9IHRyYWluX3Rlc3Rfc3BsaXQoaW1nLCBmbmFtZSwgcGhvbmUsIHNwa3IsIGFsaWduLCB0ZXN0X3NpemU9MC4yNSwgc3RyYXRpZnk9c3BrcikKICAgIHhfdHJhaW4sIHhfdmFsLCBmbmFtZV90cmFpbiwgZm5hbWVfdmFsLCBwaG9uZV90cmFpbiwgcGhvbmVfdmFsLCBzcGtyX3RyYWluLCBzcGtyX3ZhbCwgYWxpZ25fdHJhaW4sIGFsaWduX3ZhbCBcCiAgICAgICAgPSB0cmFpbl90ZXN0X3NwbGl0KHhfdHJhaW4sIGZuYW1lX3RyYWluLCBwaG9uZV90cmFpbiwgc3Brcl90cmFpbiwgYWxpZ25fdHJhaW4sIHRlc3Rfc2l6ZT0wLjMzLCBzdHJhdGlmeT1zcGtyX3RyYWluKQoKICAgIHByaW50KCdTYXZpbmcgdG8gZGlzaycpCiAgICBucC5zYXZlel9jb21wcmVzc2VkKCduc2ZfdnRzZi5ucHonLCBcCjx8ZmltX2hvbGV8PgogICAgICAgIGZuYW1lX3RyYWluPWZuYW1lX3RyYWluLCBmbmFtZV92YWw9Zm5hbWVfdmFsLCBmbmFtZV90ZXN0PWZuYW1lX3Rlc3QpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgeF90cmFpbj14X3RyYWluLCB4X3ZhbD14X3ZhbCwgeF90ZXN0PXhfdGVzdCwgXAogICAgICAgIHBob25lX3RyYWluPXBob25lX3RyYWluLCBwaG9uZV92YWw9cGhvbmVfdmFsLCBwaG9uZV90ZXN0PXBob25lX3Rlc3QsIFwKICAgICAgICBzcGtyX3RyYWluPXNwa3JfdHJhaW4sIHNwa3JfdmFsPXNwa3JfdmFsLCBzcGtyX3Rlc3Q9c3Brcl90ZXN0LCBcCiAgICAgICAgYWxpZ25fdHJhaW49YWxpZ25fdHJhaW4sIGFsaWduX3ZhbD1hbGlnbl92YWwsIGFsaWduX3Rlc3Q9YWxpZ25fdGVzdCwgXAo8fGZpbV9lbmR8Pg=="]
["e7b9fb84e92465d21f75581a60328c4279ca4565-1","e7b9fb84e92465d21f75581a60328c4279ca4565","PHxmaW1fcHJlZml4fD4KZGVmIHR4dGZyb21saXN0KGZpbGUsIGxpc3QpOgogICAgaW1wb3J0IHBhdGhsaWIKICAgIGZpbGUgPSBwYXRobGliLlBhdGgoZmlsZSkKICAgIGlmIGZpbGUuZXhpc3RzKCk6CiAgICAgICAgd2l0aCBvcGVuKGZpbGUsICd3JykgYXMgZmlsZWhhbmRsZToKICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gbGlzdDoKPHxmaW1faG9sZXw+CiAgICBlbHNlOgogICAgICAgIHByaW50KCJGaWxlIG5vdCBleGlzdCIpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICBmaWxlaGFuZGxlLndyaXRlKCclc1xuJyAlIGVsZW1lbnQpCjx8ZmltX2VuZHw+"]
["e7b9fb84e92465d21f75581a60328c4279ca4565-2","e7b9fb84e92465d21f75581a60328c4279ca4565","PHxmaW1fcHJlZml4fD4KZGVmIHR4dGZyb21saXN0KGZpbGUsIGxpc3QpOgogICAgaW1wb3J0IHBhdGhsaWIKICAgIGZpbGUgPSBwYXRobGliLlBhdGgoZmlsZSkKICAgIGlmIGZpbGUuZXhpc3RzKCk6CiAgICAgICAgd2l0aCBvcGVuKGZpbGUsICd3JykgYXMgZmlsZWhhbmRsZToKICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gbGlzdDoKICAgICAgICAgICAgICAgIGZpbGVoYW5kbGUud3JpdGUoJyVzXG4nICUgZWxlbWVudCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZWxzZToKICAgICAgICBwcmludCgiRmlsZSBub3QgZXhpc3QiKQo8fGZpbV9lbmR8Pg=="]
["e7b9fb84e92465d21f75581a60328c4279ca4565-3","e7b9fb84e92465d21f75581a60328c4279ca4565","PHxmaW1fcHJlZml4fD4KZGVmIHR4dGZyb21saXN0KGZpbGUsIGxpc3QpOgogICAgaW1wb3J0IHBhdGhsaWIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZmlsZSA9IHBhdGhsaWIuUGF0aChmaWxlKQogICAgaWYgZmlsZS5leGlzdHMoKToKICAgICAgICB3aXRoIG9wZW4oZmlsZSwgJ3cnKSBhcyBmaWxlaGFuZGxlOgogICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBsaXN0Ogo8fGZpbV9lbmR8Pg=="]
["e7b9fb84e92465d21f75581a60328c4279ca4565-4","e7b9fb84e92465d21f75581a60328c4279ca4565","PHxmaW1fcHJlZml4fD4KZGVmIHR4dGZyb21saXN0KGZpbGUsIGxpc3QpOgogICAgaW1wb3J0IHBhdGhsaWIKICAgIGZpbGUgPSBwYXRobGliLlBhdGgoZmlsZSkKICAgIGlmIGZpbGUuZXhpc3RzKCk6CiAgICAgICAgd2l0aCBvcGVuKGZpbGUsICd3JykgYXMgZmlsZWhhbmRsZToKICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gbGlzdDoKICAgICAgICAgICAgICAgIGZpbGVoYW5kbGUud3JpdGUoJyVzXG4nICUgZWxlbWVudCkKICAgIGVsc2U6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBwcmludCgiRmlsZSBub3QgZXhpc3QiKQo8fGZpbV9lbmR8Pg=="]
["e7b9fb84e92465d21f75581a60328c4279ca4565-5","e7b9fb84e92465d21f75581a60328c4279ca4565","PHxmaW1fcHJlZml4fD4KZGVmIHR4dGZyb21saXN0KGZpbGUsIGxpc3QpOgogICAgaW1wb3J0IHBhdGhsaWIKICAgIGZpbGUgPSBwYXRobGliLlBhdGgoZmlsZSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgaWYgZmlsZS5leGlzdHMoKToKICAgICAgICB3aXRoIG9wZW4oZmlsZSwgJ3cnKSBhcyBmaWxlaGFuZGxlOgogICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBsaXN0OgogICAgICAgICAgICAgICAgZmlsZWhhbmRsZS53cml0ZSgnJXNcbicgJSBlbGVtZW50KQo8fGZpbV9lbmR8Pg=="]
["6b55984751303c70f3d4584ba02e017642794152-1","6b55984751303c70f3d4584ba02e017642794152","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIHJhc2EuaW50ZW50X3RocmVzaG9sZCBpbXBvcnQgSW50ZW50VGhyZXNob2xkCmZyb20gcmFzYS5yYXNhX2NsYXNzaWZpZXIgaW1wb3J0IFJhc2FDbGFzc2lmaWVyCjx8ZmltX2hvbGV8PgoKY2xhc3MgVGVzdE5MUEludGVncmF0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIHJhc2FDbGFzc2lmaWVyID0gTm9uZQogICAgaW50ZW50VGhyZXNob2xkID0gTm9uZQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKICAgICAgICBjbHMucmFzYUNsYXNzaWZpZXIgPSBSYXNhQ2xhc3NpZmllcigpCiAgICAgICAgY2xzLnJhc2FDbGFzc2lmaWVyLnRyYWluKGZvcmNlX3RyYWluPUZhbHNlKQogICAgICAgIGNscy5pbnRlbnRUaHJlc2hvbGQgPSBJbnRlbnRUaHJlc2hvbGQobWluX3BlcmNlbnRfZGlmZmVyZW5jZT0wLCBtaW5fY29uZmlkZW5jZV90aHJlc2hvbGQ9MC4xNSkKCiAgICBkZWYgdGVzdF9hbGxfdGVuYW50X2NsYWltX2NhdGVnb3J5KHNlbGYpOgogICAgICAgIGZpbGVwYXRoID0gb3MuZ2V0Y3dkKCkgKyAnL3Jhc2EvZGF0YS9jYXRlZ29yeS9jYXRlZ29yeV90ZW5hbnQuanNvbicKICAgICAgICBkYXRhID0ganNvbi5sb2Fkcyhjb2RlY3Mub3BlbihmaWxlcGF0aCwgJ3InLCAndXRmLTgnKS5yZWFkKCkuZW5jb2RlKCd1dGYtOCcpKQogICAgICAgIGNvbW1vbl9leGFtcGxlcyA9IGRhdGFbJ3Jhc2Ffbmx1X2RhdGEnXVsnY29tbW9uX2V4YW1wbGVzJ10KCiAgICAgICAgc2VsZi5jbGFpbV9jYXRlZ29yeV9jbGFzc2lmaWNhdGlvbihjb21tb25fZXhhbXBsZXMsICJ0ZW5hbnQiKQoKICAgIGRlZiB0ZXN0X2FsbF9sYW5kbG9yZF9jbGFpbV9jYXRlZ29yeShzZWxmKToKICAgICAgICBmaWxlcGF0aCA9IG9zLmdldGN3ZCgpICsgJy9yYXNhL2RhdGEvY2F0ZWdvcnkvY2F0ZWdvcnlfbGFuZGxvcmQuanNvbicKICAgICAgICBkYXRhID0ganNvbi5sb2Fkcyhjb2RlY3Mub3BlbihmaWxlcGF0aCwgJ3InLCAndXRmLTgnKS5yZWFkKCkuZW5jb2RlKCd1dGYtOCcpKQogICAgICAgIGNvbW1vbl9leGFtcGxlcyA9IGRhdGFbJ3Jhc2Ffbmx1X2RhdGEnXVsnY29tbW9uX2V4YW1wbGVzJ10KCiAgICAgICAgc2VsZi5jbGFpbV9jYXRlZ29yeV9jbGFzc2lmaWNhdGlvbihjb21tb25fZXhhbXBsZXMsICJsYW5kbG9yZCIpCgogICAgZGVmIGNsYWltX2NhdGVnb3J5X2NsYXNzaWZpY2F0aW9uKHNlbGYsIGNvbW1vbl9leGFtcGxlcywgcGVyc29uX3R5cGUpOgogICAgICAgIGZvciBleGFtcGxlIGluIGNvbW1vbl9leGFtcGxlczoKICAgICAgICAgICAgY2xhc3NpZnlfZGljdCA9IHNlbGYucmFzYUNsYXNzaWZpZXIuY2xhc3NpZnlfcHJvYmxlbV9jYXRlZ29yeShleGFtcGxlWyd0ZXh0J10sIHBlcnNvbl90eXBlKQogICAgICAgICAgICBkZXRlcm1pbmVkX2NsYWltX2NhdGVnb3J5ID0gY2xhc3NpZnlfZGljdFsnaW50ZW50J11bJ25hbWUnXQogICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5pbnRlbnRUaHJlc2hvbGQuaXNfc3VmZmljaWVudChjbGFzc2lmeV9kaWN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnN1ZmZpY2llbnQgQ29uZmlkZW5jZSAtIEludGVudDoge31cbkNvbmZpZGVuY2Uge31cbkV4YW1wbGUgU2VudGVuY2U6IHt9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVkX2NsYWltX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5X2RpY3RbJ2ludGVudCddWydjb25maWRlbmNlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhbXBsZVsndGV4dCddKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZGV0ZXJtaW5lZF9jbGFpbV9jYXRlZ29yeSA9PSBleGFtcGxlWydpbnRlbnQnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXcm9uZyBJbnRlbnQgQ2xhc3NpZmljYXRpb25cbkNsYXNzaWZpZWQgSW50ZW50OiB7fVxuQWN0dWFsIEludGVudDoge31cbkV4YW1wbGUgU2VudGVuY2U6IHt9Ii5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lZF9jbGFpbV9jYXRlZ29yeSwgZXhhbXBsZVsnaW50ZW50J10sIGV4YW1wbGVbJ3RleHQnXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKPHxmaW1fc3VmZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IGNvZGVjcwppbXBvcnQgb3MKCjx8ZmltX2VuZHw+"]
["6b55984751303c70f3d4584ba02e017642794152-2","6b55984751303c70f3d4584ba02e017642794152","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIHJhc2EuaW50ZW50X3RocmVzaG9sZCBpbXBvcnQgSW50ZW50VGhyZXNob2xkCmZyb20gcmFzYS5yYXNhX2NsYXNzaWZpZXIgaW1wb3J0IFJhc2FDbGFzc2lmaWVyCmltcG9ydCBqc29uCmltcG9ydCBjb2RlY3MKaW1wb3J0IG9zCgoKY2xhc3MgVGVzdE5MUEludGVncmF0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIHJhc2FDbGFzc2lmaWVyID0gTm9uZQogICAgaW50ZW50VGhyZXNob2xkID0gTm9uZQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKICAgICAgICBjbHMucmFzYUNsYXNzaWZpZXIgPSBSYXNhQ2xhc3NpZmllcigpCiAgICAgICAgY2xzLnJhc2FDbGFzc2lmaWVyLnRyYWluKGZvcmNlX3RyYWluPUZhbHNlKQogICAgICAgIGNscy5pbnRlbnRUaHJlc2hvbGQgPSBJbnRlbnRUaHJlc2hvbGQobWluX3BlcmNlbnRfZGlmZmVyZW5jZT0wLCBtaW5fY29uZmlkZW5jZV90aHJlc2hvbGQ9MC4xNSkKCiAgICBkZWYgdGVzdF9hbGxfdGVuYW50X2NsYWltX2NhdGVnb3J5KHNlbGYpOgogICAgICAgIGZpbGVwYXRoID0gb3MuZ2V0Y3dkKCkgKyAnL3Jhc2EvZGF0YS9jYXRlZ29yeS9jYXRlZ29yeV90ZW5hbnQuanNvbicKICAgICAgICBkYXRhID0ganNvbi5sb2Fkcyhjb2RlY3Mub3BlbihmaWxlcGF0aCwgJ3InLCAndXRmLTgnKS5yZWFkKCkuZW5jb2RlKCd1dGYtOCcpKQogICAgICAgIGNvbW1vbl9leGFtcGxlcyA9IGRhdGFbJ3Jhc2Ffbmx1X2RhdGEnXVsnY29tbW9uX2V4YW1wbGVzJ10KCiAgICAgICAgc2VsZi5jbGFpbV9jYXRlZ29yeV9jbGFzc2lmaWNhdGlvbihjb21tb25fZXhhbXBsZXMsICJ0ZW5hbnQiKQoKICAgIGRlZiB0ZXN0X2FsbF9sYW5kbG9yZF9jbGFpbV9jYXRlZ29yeShzZWxmKToKICAgICAgICBmaWxlcGF0aCA9IG9zLmdldGN3ZCgpICsgJy9yYXNhL2RhdGEvY2F0ZWdvcnkvY2F0ZWdvcnlfbGFuZGxvcmQuanNvbicKICAgICAgICBkYXRhID0ganNvbi5sb2Fkcyhjb2RlY3Mub3BlbihmaWxlcGF0aCwgJ3InLCAndXRmLTgnKS5yZWFkKCkuZW5jb2RlKCd1dGYtOCcpKQogICAgICAgIGNvbW1vbl9leGFtcGxlcyA9IGRhdGFbJ3Jhc2Ffbmx1X2RhdGEnXVsnY29tbW9uX2V4YW1wbGVzJ10KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmNsYWltX2NhdGVnb3J5X2NsYXNzaWZpY2F0aW9uKGNvbW1vbl9leGFtcGxlcywgImxhbmRsb3JkIikKCjx8ZmltX2VuZHw+"]
["daef7a7083839319640fd764ef687084e02e4ea8-1","daef7a7083839319640fd764ef687084e02e4ea8","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgU2tpcFRlc3RFeGNlcHRpb24oRXhjZXB0aW9uKToKICAgIHBhc3MKPHxmaW1fZW5kfD4="]
["f90611e808968d4fb0981f61cce9b38b94011174-1","f90611e808968d4fb0981f61cce9b38b94011174","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgogICAgICAgIHJldHVybiBtaW4obnVtc1swXSwgZ2V0X21heChudW1zWzE6XSkpCiAgICAgIAo8fGZpbV9zdWZmaXh8PgpkZWYgZ2V0X21heChudW1zKToKICAgIGlmIGxlbihudW1zKSA9PSAxOgogICAgICAgIHJldHVybiBudW1zWzBdCiAgICBlbHNlOgo8fGZpbV9lbmR8Pg=="]
["f90611e808968d4fb0981f61cce9b38b94011174-2","f90611e808968d4fb0981f61cce9b38b94011174","PHxmaW1fcHJlZml4fD4KZGVmIGdldF9tYXgobnVtcyk6CiAgICBpZiBsZW4obnVtcykgPT0gMToKPHxmaW1faG9sZXw+CiAgICBlbHNlOgogICAgICAgIHJldHVybiBtaW4obnVtc1swXSwgZ2V0X21heChudW1zWzE6XSkpCiAgICAgIAo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJldHVybiBudW1zWzBdCjx8ZmltX2VuZHw+"]
["99cedaf83473ae5d42bc6773d7eaec0024d1c72f-1","99cedaf83473ae5d42bc6773d7eaec0024d1c72f","PHxmaW1fcHJlZml4fD4KdXNlcm5hbWVzID0gWydyWWFuJywgJ0FCQnknLCAnICBqYW1lcyAgJ10KCnVzZXJuYW1lID0gaW5wdXQoJ1VzZXJuYW1lOiAnKQoKaWYgdXNlcm5hbWUgaW4gdXNlcm5hbWVzOgogICAgcHJpbnQoJ0FjY2VzcyBHcmFudGVkJykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgplbHNlOgogICAgc3lzLnN0ZG91dC53cml0ZSgnU29ycnksIHdlIGRvIG5vdCByZWNvZ25pc2UgdGhhdCB1c2VybmFtZScpCjx8ZmltX2VuZHw+"]
["99cedaf83473ae5d42bc6773d7eaec0024d1c72f-2","99cedaf83473ae5d42bc6773d7eaec0024d1c72f","PHxmaW1fcHJlZml4fD4KdXNlcm5hbWVzID0gWydyWWFuJywgJ0FCQnknLCAnICBqYW1lcyAgJ10KCnVzZXJuYW1lID0gaW5wdXQoJ1VzZXJuYW1lOiAnKQoKaWYgdXNlcm5hbWUgaW4gdXNlcm5hbWVzOgogICAgcHJpbnQoJ0FjY2VzcyBHcmFudGVkJykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgplbHNlOgogICAgc3lzLnN0ZG91dC53cml0ZSgnU29ycnksIHdlIGRvIG5vdCByZWNvZ25pc2UgdGhhdCB1c2VybmFtZScpCjx8ZmltX2VuZHw+"]
["99cedaf83473ae5d42bc6773d7eaec0024d1c72f-3","99cedaf83473ae5d42bc6773d7eaec0024d1c72f","PHxmaW1fcHJlZml4fD4KdXNlcm5hbWVzID0gWydyWWFuJywgJ0FCQnknLCAnICBqYW1lcyAgJ10KCnVzZXJuYW1lID0gaW5wdXQoJ1VzZXJuYW1lOiAnKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgppZiB1c2VybmFtZSBpbiB1c2VybmFtZXM6CiAgICBwcmludCgnQWNjZXNzIEdyYW50ZWQnKQplbHNlOgo8fGZpbV9lbmR8Pg=="]
["99cedaf83473ae5d42bc6773d7eaec0024d1c72f-4","99cedaf83473ae5d42bc6773d7eaec0024d1c72f","PHxmaW1fcHJlZml4fD4KdXNlcm5hbWVzID0gWydyWWFuJywgJ0FCQnknLCAnICBqYW1lcyAgJ10KCjx8ZmltX2hvbGV8PgplbHNlOgogICAgc3lzLnN0ZG91dC53cml0ZSgnU29ycnksIHdlIGRvIG5vdCByZWNvZ25pc2UgdGhhdCB1c2VybmFtZScpCjx8ZmltX3N1ZmZpeHw+CnVzZXJuYW1lID0gaW5wdXQoJ1VzZXJuYW1lOiAnKQoKaWYgdXNlcm5hbWUgaW4gdXNlcm5hbWVzOgogICAgcHJpbnQoJ0FjY2VzcyBHcmFudGVkJykKPHxmaW1fZW5kfD4="]
["99cedaf83473ae5d42bc6773d7eaec0024d1c72f-5","99cedaf83473ae5d42bc6773d7eaec0024d1c72f","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KdXNlcm5hbWVzID0gWydyWWFuJywgJ0FCQnknLCAnICBqYW1lcyAgJ10KCnVzZXJuYW1lID0gaW5wdXQoJ1VzZXJuYW1lOiAnKQoKPHxmaW1fZW5kfD4="]
["4172fd9a2c3641bde8a139b6a35ba5cb25c66522-1","4172fd9a2c3641bde8a139b6a35ba5cb25c66522","PHxmaW1fcHJlZml4fD4KZnJvbSBEYXRhU3RydWN0dXJlcy5UcmVlcy5CaW5hcnlUcmVlLkJpbmFyeVRyZWVOb2RlIGltcG9ydCBCaW5hcnlUcmVlTm9kZQpmcm9tIERhdGFTdHJ1Y3R1cmVzLlF1ZXVlcy5Qcmlvcml0eVF1ZXVlLlByaW9yaXR5UXVldWUgaW1wb3J0IFByaW9yaXR5UXVldWUKCmNsYXNzIEh1ZmZtYW5Db2Rpbmc6CiAgICAiIiIKICAgICAgICBIdWZmbWFuIGNvZGluZyBpcyBhIGxvc3NsZXNzIGRhdGEgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBUaGUgaWRlYSBpcyB0byBhc3NpZ24gdmFyaWFibGUtbGVuZ3RoIGNvZGVzIHRvIGlucHV0IGNoYXJhY3RlcnMsCiAgICAgICAgbGVuZ3RocyBvZiB0aGUgYXNzaWduZWQgY29kZXMgYXJlIGJhc2VkIG9uIHRoZSBmcmVxdWVuY2llcyBvZiBjb3JyZXNwb25kaW5nIGNoYXJhY3RlcnMuCiAgICAgICAgVGhlIG1vc3QgZnJlcXVlbnQgY2hhcmFjdGVyIGdldHMgdGhlIHNtYWxsZXN0IGNvZGUgYW5kIHRoZSBsZWFzdCBmcmVxdWVudCBjaGFyYWN0ZXIgZ2V0cyB0aGUgbGFyZ2VzdCBjb2RlLgogICAgICAgIFRoZSB2YXJpYWJsZS1sZW5ndGggY29kZXMgYXNzaWduZWQgdG8gaW5wdXQgY2hhcmFjdGVycyBhcmUgUHJlZml4IENvZGVzLAogICAgICAgIG1lYW5zIHRoZSBjb2RlcyAoYml0IHNlcXVlbmNlcykgYXJlIGFzc2lnbmVkIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUgY29kZSBhc3NpZ25lZCB0byBvbmUgY2hhcmFjdGVyIGlzIG5vdCB0aGUgcHJlZml4IG9mIGNvZGUKICAgICAgICBhc3NpZ25lZCB0byBhbnkgb3RoZXIgY2hhcmFjdGVyLiBUaGlzIGlzIGhvdyBIdWZmbWFuIENvZGluZyBtYWtlcyBzdXJlIHRoYXQgdGhlcmUgaXMgbm8gYW1iaWd1aXR5IHdoZW4gZGVjb2RpbmcgdGhlIGdlbmVyYXRlZCBiaXRzdHJlYW0uCiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXh0KToKICAgICAgICBzZWxmLmN1cnJCeXRlID0gMHgwCiAgICAgICAgc2VsZi5jdXJyQnl0ZUluZGV4ID0gNwogICAgICAgIHNlbGYuYnVmZmVyID0gW10KICAgICAgICAKICAgICAgICAKICAgICAgICBpZiBsZW4odGV4dCkgPT0gMDoKICAgICAgICAgICAgc2VsZi5yb290ID0gTm9uZQogICAgICAgICAgICByZXR1cm4KICAgICAgICAKICAgICAgICBwcSA9IFByaW9yaXR5UXVldWUoKQogICAgICAgIGZvciB0IGluIHNldCh0ZXh0KToKICAgICAgICAgICAgcHEucHVzaChCaW5hcnlUcmVlTm9kZSgodGV4dC5jb3VudCh0KSwgdCkpKQogICAgICAgIAogICAgICAgIHdoaWxlIGxlbihwcSkgPiAxOgogICAgICAgICAgICBub2RlQSA9IHBxLmdldCgpCiAgICAgICAgICAgIG5vZGVCID0gcHEuZ2V0KCkKICAgICAgICAgICAgc2VsZi5yb290ID0gQmluYXJ5VHJlZU5vZGUoKG5vZGVBLnZhbHVlWzBdICsgbm9kZUIudmFsdWVbMF0sICksIG5vZGVBLCBub2RlQikKICAgICAgICAgICAgcHEucHVzaChzZWxmLnJvb3QpCiAgICAgICAgICAgIAogICAgICAgIHNlbGYuY3Vyck5vZGUgPSBzZWxmLnJvb3QKICAgICAgICBzZWxmLmRlY29kZWRNZXNzYWdlID0gIiIKICAgICAgICAgICAgCiAgICBkZWYgX2luY3JlbWVudEJ5dGUoc2VsZiwgcmlnaHQpOgogICAgICAgIGlmIHNlbGYuY3VyckJ5dGVJbmRleCA8IDA6CiAgICAgICAgICAgIHNlbGYuY3VyckJ5dGVJbmRleCA9IDcKICAgICAgICAgICAgc2VsZi5idWZmZXIuYXBwZW5kKHNlbGYuY3VyckJ5dGUpCiAgICAgICAgICAgIHNlbGYuY3VyckJ5dGUgPSAwYjAKICAgICAgICAgICAgCiAgICAgICAgaWYgcmlnaHQ6CiAgICAgICAgICAgIHNlbGYuY3VyckJ5dGUgfD0gMSA8PCBzZWxmLmN1cnJCeXRlSW5kZXgKICAgICAgICBzZWxmLmN1cnJCeXRlSW5kZXggLT0gMQogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICBkZWYgX2VuY29kZUNoYXIoc2VsZiwgY2hhciwgbm9kZT1Ob25lLCBmaXJzdFJ1bj1UcnVlKToKICAgICAgICBpZiBub2RlID09IE5vbmU6CiAgICAgICAgICAgIG5vZGUgPSBzZWxmLnJvb3QKICAgICAgICAgICAgCiAgICAgICAgcmVzID0gW10KICAgICAgICAgICAgCiAgICAgICAgaWYgbm9kZS5sZWZ0IGFuZCBub2RlLnJpZ2h0OgogICAgICAgICAgICBsZWZ0RW5jb2RlID0gc2VsZi5fZW5jb2RlQ2hhcihjaGFyLCBub2RlLmxlZnQsIEZhbHNlKQogICAgICAgICAgICBpZiBsZWZ0RW5jb2RlOgogICAgICAgICAgICAgICAgaWYgbm90IGZpcnN0UnVuOgogICAgICAgICAgICAgICAgICAgIGlmIGxlZnRFbmNvZGUgPT0gVHJ1ZToKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFswXQogICAgICAgICAgICAgICAgICAgIHJldHVybiBbMF0gKyBsZWZ0RW5jb2RlCiAgICAgICAgICAgICAgICByZXMgPSBbMF0gKyBsZWZ0RW5jb2RlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByaWdodEVuY29kZSA9IHNlbGYuX2VuY29kZUNoYXIoY2hhciwgbm9kZS5yaWdodCwgRmFsc2UpCiAgICAgICAgICAgICAgICBpZiByaWdodEVuY29kZToKICAgICAgICAgICAgICAgICAgICBpZiBub3QgZmlyc3RSdW46CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJpZ2h0RW5jb2RlID09IFRydWU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzFdCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMV0gKyByaWdodEVuY29kZQogICAgICAgICAgICAgICAgICAgIHJlcyA9IFsxXSArIHJpZ2h0RW5jb2RlCiAgICAgICAgICAgIAogICAgICAgICAgICBpZiBmaXJzdFJ1bjoKICAgICAgICAgICAgICAgIGZvciByIGluIHJlczoKICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbmNyZW1lbnRCeXRlKGludChyKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiBub2RlLnZhbHVlWzFdID09IGNoYXI6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCjx8ZmltX2VuZHw+"]
["4172fd9a2c3641bde8a139b6a35ba5cb25c66522-2","4172fd9a2c3641bde8a139b6a35ba5cb25c66522","PHxmaW1fcHJlZml4fD4KZnJvbSBEYXRhU3RydWN0dXJlcy5UcmVlcy5CaW5hcnlUcmVlLkJpbmFyeVRyZWVOb2RlIGltcG9ydCBCaW5hcnlUcmVlTm9kZQpmcm9tIERhdGFTdHJ1Y3R1cmVzLlF1ZXVlcy5Qcmlvcml0eVF1ZXVlLlByaW9yaXR5UXVldWUgaW1wb3J0IFByaW9yaXR5UXVldWUKCmNsYXNzIEh1ZmZtYW5Db2Rpbmc6CiAgICAiIiIKICAgICAgICBIdWZmbWFuIGNvZGluZyBpcyBhIGxvc3NsZXNzIGRhdGEgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBUaGUgaWRlYSBpcyB0byBhc3NpZ24gdmFyaWFibGUtbGVuZ3RoIGNvZGVzIHRvIGlucHV0IGNoYXJhY3RlcnMsCiAgICAgICAgbGVuZ3RocyBvZiB0aGUgYXNzaWduZWQgY29kZXMgYXJlIGJhc2VkIG9uIHRoZSBmcmVxdWVuY2llcyBvZiBjb3JyZXNwb25kaW5nIGNoYXJhY3RlcnMuCiAgICAgICAgVGhlIG1vc3QgZnJlcXVlbnQgY2hhcmFjdGVyIGdldHMgdGhlIHNtYWxsZXN0IGNvZGUgYW5kIHRoZSBsZWFzdCBmcmVxdWVudCBjaGFyYWN0ZXIgZ2V0cyB0aGUgbGFyZ2VzdCBjb2RlLgogICAgICAgIFRoZSB2YXJpYWJsZS1sZW5ndGggY29kZXMgYXNzaWduZWQgdG8gaW5wdXQgY2hhcmFjdGVycyBhcmUgUHJlZml4IENvZGVzLAogICAgICAgIG1lYW5zIHRoZSBjb2RlcyAoYml0IHNlcXVlbmNlcykgYXJlIGFzc2lnbmVkIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUgY29kZSBhc3NpZ25lZCB0byBvbmUgY2hhcmFjdGVyIGlzIG5vdCB0aGUgcHJlZml4IG9mIGNvZGUKICAgICAgICBhc3NpZ25lZCB0byBhbnkgb3RoZXIgY2hhcmFjdGVyLiBUaGlzIGlzIGhvdyBIdWZmbWFuIENvZGluZyBtYWtlcyBzdXJlIHRoYXQgdGhlcmUgaXMgbm8gYW1iaWd1aXR5IHdoZW4gZGVjb2RpbmcgdGhlIGdlbmVyYXRlZCBiaXRzdHJlYW0uCiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXh0KToKICAgICAgICBzZWxmLmN1cnJCeXRlID0gMHgwCiAgICAgICAgc2VsZi5jdXJyQnl0ZUluZGV4ID0gNwogICAgICAgIHNlbGYuYnVmZmVyID0gW10KICAgICAgICAKICAgICAgICAKICAgICAgICBpZiBsZW4odGV4dCkgPT0gMDoKICAgICAgICAgICAgc2VsZi5yb290ID0gTm9uZQogICAgICAgICAgICByZXR1cm4KICAgICAgICAKICAgICAgICBwcSA9IFByaW9yaXR5UXVldWUoKQogICAgICAgIGZvciB0IGluIHNldCh0ZXh0KToKICAgICAgICAgICAgcHEucHVzaChCaW5hcnlUcmVlTm9kZSgodGV4dC5jb3VudCh0KSwgdCkpKQogICAgICAgIAogICAgICAgIHdoaWxlIGxlbihwcSkgPiAxOgogICAgICAgICAgICBub2RlQSA9IHBxLmdldCgpCiAgICAgICAgICAgIG5vZGVCID0gcHEuZ2V0KCkKICAgICAgICAgICAgc2VsZi5yb290ID0gQmluYXJ5VHJlZU5vZGUoKG5vZGVBLnZhbHVlWzBdICsgbm9kZUIudmFsdWVbMF0sICksIG5vZGVBLCBub2RlQikKICAgICAgICAgICAgcHEucHVzaChzZWxmLnJvb3QpCiAgICAgICAgICAgIAogICAgICAgIHNlbGYuY3Vyck5vZGUgPSBzZWxmLnJvb3QKICAgICAgICBzZWxmLmRlY29kZWRNZXNzYWdlID0gIiIKICAgICAgICAgICAgCiAgICBkZWYgX2luY3JlbWVudEJ5dGUoc2VsZiwgcmlnaHQpOgogICAgICAgIGlmIHNlbGYuY3VyckJ5dGVJbmRleCA8IDA6CiAgICAgICAgICAgIHNlbGYuY3VyckJ5dGVJbmRleCA9IDcKICAgICAgICAgICAgc2VsZi5idWZmZXIuYXBwZW5kKHNlbGYuY3VyckJ5dGUpCiAgICAgICAgICAgIHNlbGYuY3VyckJ5dGUgPSAwYjAKICAgICAgICAgICAgCiAgICAgICAgaWYgcmlnaHQ6CiAgICAgICAgICAgIHNlbGYuY3VyckJ5dGUgfD0gMSA8PCBzZWxmLmN1cnJCeXRlSW5kZXgKICAgICAgICBzZWxmLmN1cnJCeXRlSW5kZXggLT0gMQogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICBkZWYgX2VuY29kZUNoYXIoc2VsZiwgY2hhciwgbm9kZT1Ob25lLCBmaXJzdFJ1bj1UcnVlKToKICAgICAgICBpZiBub2RlID09IE5vbmU6CiAgICAgICAgICAgIG5vZGUgPSBzZWxmLnJvb3QKICAgICAgICAgICAgCiAgICAgICAgcmVzID0gW10KICAgICAgICAgICAgCiAgICAgICAgaWYgbm9kZS5sZWZ0IGFuZCBub2RlLnJpZ2h0OgogICAgICAgICAgICBsZWZ0RW5jb2RlID0gc2VsZi5fZW5jb2RlQ2hhcihjaGFyLCBub2RlLmxlZnQsIEZhbHNlKQogICAgICAgICAgICBpZiBsZWZ0RW5jb2RlOgogICAgICAgICAgICAgICAgaWYgbm90IGZpcnN0UnVuOgogICAgICAgICAgICAgICAgICAgIGlmIGxlZnRFbmNvZGUgPT0gVHJ1ZToKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFswXQogICAgICAgICAgICAgICAgICAgIHJldHVybiBbMF0gKyBsZWZ0RW5jb2RlCiAgICAgICAgICAgICAgICByZXMgPSBbMF0gKyBsZWZ0RW5jb2RlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByaWdodEVuY29kZSA9IHNlbGYuX2VuY29kZUNoYXIoY2hhciwgbm9kZS5yaWdodCwgRmFsc2UpCiAgICAgICAgICAgICAgICBpZiByaWdodEVuY29kZToKICAgICAgICAgICAgICAgICAgICBpZiBub3QgZmlyc3RSdW46CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJpZ2h0RW5jb2RlID09IFRydWU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzFdCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMV0gKyByaWdodEVuY29kZQogICAgICAgICAgICAgICAgICAgIHJlcyA9IFsxXSArIHJpZ2h0RW5jb2RlCiAgICAgICAgICAgIAogICAgICAgICAgICBpZiBmaXJzdFJ1bjoKICAgICAgICAgICAgICAgIGZvciByIGluIHJlczoKICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbmNyZW1lbnRCeXRlKGludChyKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiBub2RlLnZhbHVlWzFdID09IGNoYXI6CiAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgIAogICAgZGVmIF9kZWNvZGVDaGFyKHNlbGYsIG5leHRCaXQpOgogICAgICAgIHRyeToKICAgICAgICAgICAgaWYgbmV4dEJpdCA9PSAiMCI6CiAgICAgICAgICAgICAgICBzZWxmLmN1cnJOb2RlID0gc2VsZi5jdXJyTm9kZS5sZWZ0CiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBzZWxmLmN1cnJOb2RlID0gc2VsZi5jdXJyTm9kZS5yaWdodAogICAgICAgICAgICAKICAgICAgICAgICAgaWYgbm90IHNlbGYuY3Vyck5vZGUubGVmdCBhbmQgbm90IHNlbGYuY3Vyck5vZGUucmlnaHQ6CiAgICAgICAgICAgICAgICBzZWxmLmRlY29kZWRNZXNzYWdlICs9IHNlbGYuY3Vyck5vZGUudmFsdWVbMV0KICAgICAgICAgICAgICAgIHNlbGYuY3Vyck5vZGUgPSBzZWxmLnJvb3QKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IoIkVuY29kZWQgY2hhciBkb2Vzbid0IGV4aXN0IGluIHRoZSBodWZmbWFuIHRyZWUuIikKICAgICAgICAgICAgCiAgICBkZWYgZW5jb2RlTWVzc2FnZShzZWxmLCB0ZXh0KToKICAgICAgICB3aXRoIG9wZW4oJy4vQWxnb3JpdGhtcy9Db21wcmVzc2lvbi9IdWZmbWFuRW5jb2RlZE1lc3NhZ2UudHh0JywgJ3diJykgYXMgZjoKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICAgICAgZi53cml0ZShiLnRvX2J5dGVzKDEsICdiaWcnKSkKICAgICAgICAgICAgaWYgc2VsZi5jdXJyQnl0ZSAhPSAwYjA6CiAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYuY3VyckJ5dGUudG9fYnl0ZXMoMSwgJ2JpZycpKQogICAgICAgICAgICAgICAgc2VsZi5jdXJyQnl0ZSA9IDBiMAogICAgICAgICAgICAgICAgCiAgICBkZWYgZGVjb2RlTWVzc2FnZShzZWxmKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYuY3Vyck5vZGUgPSBzZWxmLnJvb3QKICAgICAgICAgICAgc2VsZi5kZWNvZGVkTWVzc2FnZSA9ICIiCiAgICAgICAgICAgIHdpdGggb3BlbignLi9BbGdvcml0aG1zL0NvbXByZXNzaW9uL0h1ZmZtYW5FbmNvZGVkTWVzc2FnZS50eHQnLCAncmInKSBhcyBmOgogICAgICAgICAgICAgICAgYnl0ZSA9IGYucmVhZCgxKQogICAgICAgICAgICAgICAgd2hpbGUgYnl0ZSAhPSBiJyc6CiAgICAgICAgICAgICAgICAgICAgYmluYXJ5TnVtYmVyID0gYmluKGludC5mcm9tX2J5dGVzKGJ5dGUsICdiaWcnKSlbMjpdCiAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoOCAtIGxlbihiaW5hcnlOdW1iZXIpKToKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGVjb2RlQ2hhcigiMCIpCiAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gYmluKGludC5mcm9tX2J5dGVzKGJ5dGUsICdiaWcnKSlbMjpdOgogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kZWNvZGVDaGFyKGMpCiAgICAgICAgICAgICAgICAgICAgYnl0ZSA9IGYucmVhZCgxKQogICAgICAgICAgICBwcmludChzZWxmLmRlY29kZWRNZXNzYWdlKQogICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgogICAgICAgICAgICBwcmludChzZWxmLmRlY29kZWRNZXNzYWdlKQogICAgICAgIAppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgaHVmZm1hbiA9IEh1ZmZtYW5Db2RpbmcoInR0Z2FnYXRjZ2djdGNjdGd0dGFhY2N0Z3R0YWdhY3R0Z3RhYWF0YXR0Z2FjYXRjY3RnZ2dhYWNnZ3RjdHRjY3R0Y2N0dGN0Y2NnY2djZ2N0YWdjY2N0Z2djY2NhYWNhY3RnY2dnZ2dnYWFhY2NjZ2dndHR0dGN0dHRhY2FnYWNjYWdnY2FjdHRjdHR0Z2djZ2FnZ3RhZ3R0Y3R0YWF0Y2F0Z3RhYWN0dGdjZ2FjdGdndGdnY2NndGFjY2FhY3RhYWFjZ2djZ2NndHRnY2F0Y2NhY2dhYWdnZ2dndHRhY2NjdGdjZ2djdGFjY3RjdGdjYXRhZ2djYWNnYXRhZ2N0dGFhY2NjZ2N0Y2FhYWN0dGdndGNnY2FndGNhdGd0Y2NjYWN0YWdjdGFjY2FjY2NnZ2d0dGF0Z2N0dGFhY2FjdHRjYWFhYXRnZ2d0dGFjdGNjYWd0Y3R0Y2NjdGF0dGNhdGNhZ3R0Y2F0YWFhZ2NnYWd0Z3R0Y2dhZ3RjY3RjZ2NnYWNjY2NhdGdhdGNjdHRnY3RnY2F0YWN0YWdjY2F0YWFnYWN0YWN0YWF0dGN0Z2NnZ2d0dHRnY2N0Y3RndHRndGF0dGd0Y2djdGF0dGFnY2NnZ2FjYWFndGFhY2NhZ2FnY2FhZ2FhZ2NjYWNhY2FndGdnY3RnZ3RhdGNnYWNnY2FjYWFhYWd0Y2N0Y3R0YXRjYWdjYWd0YWdjYXRhY2FnYWNndGNjZ2N0YXRnY2d0dHRnYWFjYWdndGdnYWd0Z2d0YWdndGdhdGd0Z2FjdGN0dGN0Y3R0YWNnY2NnZ2FjdHRjYXR0YWdjZ2djYWdnYWNnZ2FjYWNjY3RndHRnYWdhZ2F0Y3RjZ2FjYXR0Y3R0YXRjYWNjYWdjY3RnZ2FhY2NnYWdjYXR0Y2FjdGdhdGNjYWF0YWN0Z2djY2d0YWNndGFjY2NhY2FjdGFjZ3R0Y2FjYXRhdGNhYXRhZ2djdGNnY3RnZ2FjYWFjYWNnZ2dhY2FjZ2N0YXR0Z2FhZ2N0Z3RnYXRnYWdhZ2djdGN0dGF0dGdjY2djZ2djZ2dnY3RnZ2N0Y3RhYWNhY2FjdGNnY3R0Z2NndGNnYWF0Z2dnZ2NnY2N0YWd0Z2dhY2djdGF0Z2NnYWN0Y2FhY3RhY2NhYWN0YWFjY2FjdGFhY3RhdGFnZ2d0YWdnY3R0dGdhYWd0Z2N0Z2N0Z2djdHRjZ3R0dGd0Z2N0YWdjY3R0dHRnZ2F0YWdhdGF0dGFjZ2djdHRjYWF0Y2NhdGFnY2d0YWNjYWFnYWFhY2FhdGd0dHRndGdnY3RjY2djZ2NhY2N0Z2F0Z3RjYWF0Z2NhYWMiKSAgIAogICAgaHVmZm1hbi5lbmNvZGVNZXNzYWdlKCJ0dGdhZ2F0Y2dnY3RjY3RndHRhYWNjdGd0dGFnYWN0dGd0YWFhdGF0dGdhY2F0Y2N0Z2dnYWFjZ2d0Y3R0Y2N0dGNjdHRjdGNjZ2NnY2djdGFnY2NjdGdnY2NjYWFjYWN0Z2NnZ2dnZ2FhYWNjY2dnZ3R0dHRjdHR0YWNhZ2FjY2FnZ2NhY3R0Y3R0dGdnY2dhZ2d0YWd0dGN0dGFhdGNhdGd0YWFjdHRnY2dhY3RnZ3RnZ2NjZ3RhY2NhYWN0YWFhY2dnY2djZ3R0Z2NhdGNjYWNnYWFnZ2dnZ3R0YWNjY3RnY2dnY3RhY2N0Y3RnY2F0YWdnY2FjZ2F0YWdjdHRhYWNjY2djdGNhYWFjdHRnZ3RjZ2NhZ3RjYXRndGNjY2FjdGFnY3RhY2NhY2NjZ2dndHRhdGdjdHRhYWNhY3R0Y2FhYWF0Z2dndHRhY3RjY2FndGN0dGNjY3RhdHRjYXRjYWd0dGNhdGFhYWdjZ2FndGd0dGNnYWd0Y2N0Y2djZ2FjY2NjYXRnYXRjY3R0Z2N0Z2NhdGFjdGFnY2NhdGFhZ2FjdGFjdGFhdHRjdGdjZ2dndHR0Z2NjdGN0Z3R0Z3RhdHRndGNnY3RhdHRhZ2NjZ2dhY2FhZ3RhYWNjYWdhZ2NhYWdhYWdjY2FjYWNhZ3RnZ2N0Z2d0YXRjZ2FjZ2NhY2FhYWFndGNjdGN0dGF0Y2FnY2FndGFnY2F0YWNhZ2FjZ3RjY2djdGF0Z2NndHR0Z2FhY2FnZ3RnZ2FndGdndGFnZ3RnYXRndGdhY3RjdHRjdGN0dGFjZ2NjZ2dhY3R0Y2F0dGFnY2dnY2FnZ2FjZ2dhY2FjY2N0Z3R0Z2FnYWdhdGN0Y2dhY2F0dGN0dGF0Y2FjY2FnY2N0Z2dhYWNjZ2FnY2F0dGNhY3RnYXRjY2FhdGFjdGdnY2NndGFjZ3RhY2NjYWNhY3RhY2d0dGNhY2F0YXRjYWF0YWdnY3RjZ2N0Z2dhY2FhY2FjZ2dnYWNhY2djdGF0dGdhYWdjdGd0Z2F0Z2FnYWdnY3RjdHRhdHRnY2NnY2dnY2dnZ2N0Z2djdGN0YWFjYWNhY3RjZ2N0dGdjZ3RjZ2FhdGdnZ2djZ2NjdGFndGdnYWNnY3RhdGdjZ2FjdGNhYWN0YWNjYWFjdGFhY2NhY3RhYWN0YXRhZ2dndGFnZ2N0dHRnYWFndGdjdGdjdGdnY3R0Y2d0dHRndGdjdGFnY2N0dHR0Z2dhdGFnYXRhdHRhY2dnY3R0Y2FhdGNjYXRhZ2NndGFjY2FhZ2FhYWNhYXRndHR0Z3RnZ2N0Y2NnY2djYWNjdGdhdGd0Y2FhdGdjYWFjIikKICAgIGh1ZmZtYW4uZGVjb2RlTWVzc2FnZSgpCiAgICAKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgZm9yIGNoYXIgaW4gdGV4dDoKICAgICAgICAgICAgICAgIHNlbGYuX2VuY29kZUNoYXIoY2hhcikKICAgICAgICAgICAgICAgIHdoaWxlIGxlbihzZWxmLmJ1ZmZlcikgPiAwOgogICAgICAgICAgICAgICAgICAgIGIgPSBzZWxmLmJ1ZmZlci5wb3AoMCkKPHxmaW1fZW5kfD4="]
["4172fd9a2c3641bde8a139b6a35ba5cb25c66522-3","4172fd9a2c3641bde8a139b6a35ba5cb25c66522","PHxmaW1fcHJlZml4fD4KZnJvbSBEYXRhU3RydWN0dXJlcy5UcmVlcy5CaW5hcnlUcmVlLkJpbmFyeVRyZWVOb2RlIGltcG9ydCBCaW5hcnlUcmVlTm9kZQpmcm9tIERhdGFTdHJ1Y3R1cmVzLlF1ZXVlcy5Qcmlvcml0eVF1ZXVlLlByaW9yaXR5UXVldWUgaW1wb3J0IFByaW9yaXR5UXVldWUKCmNsYXNzIEh1ZmZtYW5Db2Rpbmc6CiAgICAiIiIKICAgICAgICBIdWZmbWFuIGNvZGluZyBpcyBhIGxvc3NsZXNzIGRhdGEgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBUaGUgaWRlYSBpcyB0byBhc3NpZ24gdmFyaWFibGUtbGVuZ3RoIGNvZGVzIHRvIGlucHV0IGNoYXJhY3RlcnMsCiAgICAgICAgbGVuZ3RocyBvZiB0aGUgYXNzaWduZWQgY29kZXMgYXJlIGJhc2VkIG9uIHRoZSBmcmVxdWVuY2llcyBvZiBjb3JyZXNwb25kaW5nIGNoYXJhY3RlcnMuCiAgICAgICAgVGhlIG1vc3QgZnJlcXVlbnQgY2hhcmFjdGVyIGdldHMgdGhlIHNtYWxsZXN0IGNvZGUgYW5kIHRoZSBsZWFzdCBmcmVxdWVudCBjaGFyYWN0ZXIgZ2V0cyB0aGUgbGFyZ2VzdCBjb2RlLgogICAgICAgIFRoZSB2YXJpYWJsZS1sZW5ndGggY29kZXMgYXNzaWduZWQgdG8gaW5wdXQgY2hhcmFjdGVycyBhcmUgUHJlZml4IENvZGVzLAogICAgICAgIG1lYW5zIHRoZSBjb2RlcyAoYml0IHNlcXVlbmNlcykgYXJlIGFzc2lnbmVkIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUgY29kZSBhc3NpZ25lZCB0byBvbmUgY2hhcmFjdGVyIGlzIG5vdCB0aGUgcHJlZml4IG9mIGNvZGUKICAgICAgICBhc3NpZ25lZCB0byBhbnkgb3RoZXIgY2hhcmFjdGVyLiBUaGlzIGlzIGhvdyBIdWZmbWFuIENvZGluZyBtYWtlcyBzdXJlIHRoYXQgdGhlcmUgaXMgbm8gYW1iaWd1aXR5IHdoZW4gZGVjb2RpbmcgdGhlIGdlbmVyYXRlZCBiaXRzdHJlYW0uCiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXh0KToKICAgICAgICBzZWxmLmN1cnJCeXRlID0gMHgwCiAgICAgICAgc2VsZi5jdXJyQnl0ZUluZGV4ID0gNwogICAgICAgIHNlbGYuYnVmZmVyID0gW10KICAgICAgICAKICAgICAgICAKICAgICAgICBpZiBsZW4odGV4dCkgPT0gMDoKICAgICAgICAgICAgc2VsZi5yb290ID0gTm9uZQogICAgICAgICAgICByZXR1cm4KICAgICAgICAKICAgICAgICBwcSA9IFByaW9yaXR5UXVldWUoKQogICAgICAgIGZvciB0IGluIHNldCh0ZXh0KToKICAgICAgICAgICAgcHEucHVzaChCaW5hcnlUcmVlTm9kZSgodGV4dC5jb3VudCh0KSwgdCkpKQogICAgICAgIAogICAgICAgIHdoaWxlIGxlbihwcSkgPiAxOgogICAgICAgICAgICBub2RlQSA9IHBxLmdldCgpCiAgICAgICAgICAgIG5vZGVCID0gcHEuZ2V0KCkKICAgICAgICAgICAgc2VsZi5yb290ID0gQmluYXJ5VHJlZU5vZGUoKG5vZGVBLnZhbHVlWzBdICsgbm9kZUIudmFsdWVbMF0sICksIG5vZGVBLCBub2RlQikKICAgICAgICAgICAgcHEucHVzaChzZWxmLnJvb3QpCiAgICAgICAgICAgIAogICAgICAgIHNlbGYuY3Vyck5vZGUgPSBzZWxmLnJvb3QKICAgICAgICBzZWxmLmRlY29kZWRNZXNzYWdlID0gIiIKICAgICAgICAgICAgCiAgICBkZWYgX2luY3JlbWVudEJ5dGUoc2VsZiwgcmlnaHQpOgogICAgICAgIGlmIHNlbGYuY3VyckJ5dGVJbmRleCA8IDA6CiAgICAgICAgICAgIHNlbGYuY3VyckJ5dGVJbmRleCA9IDcKICAgICAgICAgICAgc2VsZi5idWZmZXIuYXBwZW5kKHNlbGYuY3VyckJ5dGUpCiAgICAgICAgICAgIHNlbGYuY3VyckJ5dGUgPSAwYjAKICAgICAgICAgICAgCiAgICAgICAgaWYgcmlnaHQ6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgc2VsZi5jdXJyQnl0ZSB8PSAxIDw8IHNlbGYuY3VyckJ5dGVJbmRleAo8fGZpbV9lbmR8Pg=="]
["4172fd9a2c3641bde8a139b6a35ba5cb25c66522-4","4172fd9a2c3641bde8a139b6a35ba5cb25c66522","PHxmaW1fcHJlZml4fD4KZnJvbSBEYXRhU3RydWN0dXJlcy5UcmVlcy5CaW5hcnlUcmVlLkJpbmFyeVRyZWVOb2RlIGltcG9ydCBCaW5hcnlUcmVlTm9kZQpmcm9tIERhdGFTdHJ1Y3R1cmVzLlF1ZXVlcy5Qcmlvcml0eVF1ZXVlLlByaW9yaXR5UXVldWUgaW1wb3J0IFByaW9yaXR5UXVldWUKCmNsYXNzIEh1ZmZtYW5Db2Rpbmc6CiAgICAiIiIKICAgICAgICBIdWZmbWFuIGNvZGluZyBpcyBhIGxvc3NsZXNzIGRhdGEgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBUaGUgaWRlYSBpcyB0byBhc3NpZ24gdmFyaWFibGUtbGVuZ3RoIGNvZGVzIHRvIGlucHV0IGNoYXJhY3RlcnMsCiAgICAgICAgbGVuZ3RocyBvZiB0aGUgYXNzaWduZWQgY29kZXMgYXJlIGJhc2VkIG9uIHRoZSBmcmVxdWVuY2llcyBvZiBjb3JyZXNwb25kaW5nIGNoYXJhY3RlcnMuCiAgICAgICAgVGhlIG1vc3QgZnJlcXVlbnQgY2hhcmFjdGVyIGdldHMgdGhlIHNtYWxsZXN0IGNvZGUgYW5kIHRoZSBsZWFzdCBmcmVxdWVudCBjaGFyYWN0ZXIgZ2V0cyB0aGUgbGFyZ2VzdCBjb2RlLgogICAgICAgIFRoZSB2YXJpYWJsZS1sZW5ndGggY29kZXMgYXNzaWduZWQgdG8gaW5wdXQgY2hhcmFjdGVycyBhcmUgUHJlZml4IENvZGVzLAogICAgICAgIG1lYW5zIHRoZSBjb2RlcyAoYml0IHNlcXVlbmNlcykgYXJlIGFzc2lnbmVkIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUgY29kZSBhc3NpZ25lZCB0byBvbmUgY2hhcmFjdGVyIGlzIG5vdCB0aGUgcHJlZml4IG9mIGNvZGUKICAgICAgICBhc3NpZ25lZCB0byBhbnkgb3RoZXIgY2hhcmFjdGVyLiBUaGlzIGlzIGhvdyBIdWZmbWFuIENvZGluZyBtYWtlcyBzdXJlIHRoYXQgdGhlcmUgaXMgbm8gYW1iaWd1aXR5IHdoZW4gZGVjb2RpbmcgdGhlIGdlbmVyYXRlZCBiaXRzdHJlYW0uCiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXh0KToKICAgICAgICBzZWxmLmN1cnJCeXRlID0gMHgwCiAgICAgICAgc2VsZi5jdXJyQnl0ZUluZGV4ID0gNwogICAgICAgIHNlbGYuYnVmZmVyID0gW10KICAgICAgICAKICAgICAgICAKICAgICAgICBpZiBsZW4odGV4dCkgPT0gMDoKPHxmaW1faG9sZXw+CiAgICAgICAgcHEgPSBQcmlvcml0eVF1ZXVlKCkKICAgICAgICBmb3IgdCBpbiBzZXQodGV4dCk6CiAgICAgICAgICAgIHBxLnB1c2goQmluYXJ5VHJlZU5vZGUoKHRleHQuY291bnQodCksIHQpKSkKICAgICAgICAKICAgICAgICB3aGlsZSBsZW4ocHEpID4gMToKICAgICAgICAgICAgbm9kZUEgPSBwcS5nZXQoKQogICAgICAgICAgICBub2RlQiA9IHBxLmdldCgpCiAgICAgICAgICAgIHNlbGYucm9vdCA9IEJpbmFyeVRyZWVOb2RlKChub2RlQS52YWx1ZVswXSArIG5vZGVCLnZhbHVlWzBdLCApLCBub2RlQSwgbm9kZUIpCiAgICAgICAgICAgIHBxLnB1c2goc2VsZi5yb290KQogICAgICAgICAgICAKICAgICAgICBzZWxmLmN1cnJOb2RlID0gc2VsZi5yb290CiAgICAgICAgc2VsZi5kZWNvZGVkTWVzc2FnZSA9ICIiCiAgICAgICAgICAgIAogICAgZGVmIF9pbmNyZW1lbnRCeXRlKHNlbGYsIHJpZ2h0KToKICAgICAgICBpZiBzZWxmLmN1cnJCeXRlSW5kZXggPCAwOgogICAgICAgICAgICBzZWxmLmN1cnJCeXRlSW5kZXggPSA3CiAgICAgICAgICAgIHNlbGYuYnVmZmVyLmFwcGVuZChzZWxmLmN1cnJCeXRlKQogICAgICAgICAgICBzZWxmLmN1cnJCeXRlID0gMGIwCiAgICAgICAgICAgIAogICAgICAgIGlmIHJpZ2h0OgogICAgICAgICAgICBzZWxmLmN1cnJCeXRlIHw9IDEgPDwgc2VsZi5jdXJyQnl0ZUluZGV4CiAgICAgICAgc2VsZi5jdXJyQnl0ZUluZGV4IC09IDEKICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgZGVmIF9lbmNvZGVDaGFyKHNlbGYsIGNoYXIsIG5vZGU9Tm9uZSwgZmlyc3RSdW49VHJ1ZSk6CiAgICAgICAgaWYgbm9kZSA9PSBOb25lOgogICAgICAgICAgICBub2RlID0gc2VsZi5yb290CiAgICAgICAgICAgIAogICAgICAgIHJlcyA9IFtdCiAgICAgICAgICAgIAogICAgICAgIGlmIG5vZGUubGVmdCBhbmQgbm9kZS5yaWdodDoKICAgICAgICAgICAgbGVmdEVuY29kZSA9IHNlbGYuX2VuY29kZUNoYXIoY2hhciwgbm9kZS5sZWZ0LCBGYWxzZSkKICAgICAgICAgICAgaWYgbGVmdEVuY29kZToKICAgICAgICAgICAgICAgIGlmIG5vdCBmaXJzdFJ1bjoKICAgICAgICAgICAgICAgICAgICBpZiBsZWZ0RW5jb2RlID09IFRydWU6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMF0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzBdICsgbGVmdEVuY29kZQogICAgICAgICAgICAgICAgcmVzID0gWzBdICsgbGVmdEVuY29kZQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmlnaHRFbmNvZGUgPSBzZWxmLl9lbmNvZGVDaGFyKGNoYXIsIG5vZGUucmlnaHQsIEZhbHNlKQogICAgICAgICAgICAgICAgaWYgcmlnaHRFbmNvZGU6CiAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZpcnN0UnVuOgogICAgICAgICAgICAgICAgICAgICAgICBpZiByaWdodEVuY29kZSA9PSBUcnVlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsxXQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzFdICsgcmlnaHRFbmNvZGUKICAgICAgICAgICAgICAgICAgICByZXMgPSBbMV0gKyByaWdodEVuY29kZQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgZmlyc3RSdW46CiAgICAgICAgICAgICAgICBmb3IgciBpbiByZXM6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5jcmVtZW50Qnl0ZShpbnQocikpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgbm9kZS52YWx1ZVsxXSA9PSBjaGFyOgogICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAKICAgIGRlZiBfZGVjb2RlQ2hhcihzZWxmLCBuZXh0Qml0KToKICAgICAgICB0cnk6CiAgICAgICAgICAgIGlmIG5leHRCaXQgPT0gIjAiOgogICAgICAgICAgICAgICAgc2VsZi5jdXJyTm9kZSA9IHNlbGYuY3Vyck5vZGUubGVmdAogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgc2VsZi5jdXJyTm9kZSA9IHNlbGYuY3Vyck5vZGUucmlnaHQKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIG5vdCBzZWxmLmN1cnJOb2RlLmxlZnQgYW5kIG5vdCBzZWxmLmN1cnJOb2RlLnJpZ2h0OgogICAgICAgICAgICAgICAgc2VsZi5kZWNvZGVkTWVzc2FnZSArPSBzZWxmLmN1cnJOb2RlLnZhbHVlWzFdCiAgICAgICAgICAgICAgICBzZWxmLmN1cnJOb2RlID0gc2VsZi5yb290CiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICByYWlzZSBJbmRleEVycm9yKCJFbmNvZGVkIGNoYXIgZG9lc24ndCBleGlzdCBpbiB0aGUgaHVmZm1hbiB0cmVlLiIpCiAgICAgICAgICAgIAogICAgZGVmIGVuY29kZU1lc3NhZ2Uoc2VsZiwgdGV4dCk6CiAgICAgICAgd2l0aCBvcGVuKCcuL0FsZ29yaXRobXMvQ29tcHJlc3Npb24vSHVmZm1hbkVuY29kZWRNZXNzYWdlLnR4dCcsICd3YicpIGFzIGY6CiAgICAgICAgICAgIGZvciBjaGFyIGluIHRleHQ6CiAgICAgICAgICAgICAgICBzZWxmLl9lbmNvZGVDaGFyKGNoYXIpCiAgICAgICAgICAgICAgICB3aGlsZSBsZW4oc2VsZi5idWZmZXIpID4gMDoKICAgICAgICAgICAgICAgICAgICBiID0gc2VsZi5idWZmZXIucG9wKDApCiAgICAgICAgICAgICAgICAgICAgZi53cml0ZShiLnRvX2J5dGVzKDEsICdiaWcnKSkKICAgICAgICAgICAgaWYgc2VsZi5jdXJyQnl0ZSAhPSAwYjA6CiAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYuY3VyckJ5dGUudG9fYnl0ZXMoMSwgJ2JpZycpKQogICAgICAgICAgICAgICAgc2VsZi5jdXJyQnl0ZSA9IDBiMAogICAgICAgICAgICAgICAgCiAgICBkZWYgZGVjb2RlTWVzc2FnZShzZWxmKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYuY3Vyck5vZGUgPSBzZWxmLnJvb3QKICAgICAgICAgICAgc2VsZi5kZWNvZGVkTWVzc2FnZSA9ICIiCiAgICAgICAgICAgIHdpdGggb3BlbignLi9BbGdvcml0aG1zL0NvbXByZXNzaW9uL0h1ZmZtYW5FbmNvZGVkTWVzc2FnZS50eHQnLCAncmInKSBhcyBmOgogICAgICAgICAgICAgICAgYnl0ZSA9IGYucmVhZCgxKQogICAgICAgICAgICAgICAgd2hpbGUgYnl0ZSAhPSBiJyc6CiAgICAgICAgICAgICAgICAgICAgYmluYXJ5TnVtYmVyID0gYmluKGludC5mcm9tX2J5dGVzKGJ5dGUsICdiaWcnKSlbMjpdCiAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoOCAtIGxlbihiaW5hcnlOdW1iZXIpKToKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGVjb2RlQ2hhcigiMCIpCiAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gYmluKGludC5mcm9tX2J5dGVzKGJ5dGUsICdiaWcnKSlbMjpdOgogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kZWNvZGVDaGFyKGMpCiAgICAgICAgICAgICAgICAgICAgYnl0ZSA9IGYucmVhZCgxKQogICAgICAgICAgICBwcmludChzZWxmLmRlY29kZWRNZXNzYWdlKQogICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgogICAgICAgICAgICBwcmludChzZWxmLmRlY29kZWRNZXNzYWdlKQogICAgICAgIAppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgaHVmZm1hbiA9IEh1ZmZtYW5Db2RpbmcoInR0Z2FnYXRjZ2djdGNjdGd0dGFhY2N0Z3R0YWdhY3R0Z3RhYWF0YXR0Z2FjYXRjY3RnZ2dhYWNnZ3RjdHRjY3R0Y2N0dGN0Y2NnY2djZ2N0YWdjY2N0Z2djY2NhYWNhY3RnY2dnZ2dnYWFhY2NjZ2dndHR0dGN0dHRhY2FnYWNjYWdnY2FjdHRjdHR0Z2djZ2FnZ3RhZ3R0Y3R0YWF0Y2F0Z3RhYWN0dGdjZ2FjdGdndGdnY2NndGFjY2FhY3RhYWFjZ2djZ2NndHRnY2F0Y2NhY2dhYWdnZ2dndHRhY2NjdGdjZ2djdGFjY3RjdGdjYXRhZ2djYWNnYXRhZ2N0dGFhY2NjZ2N0Y2FhYWN0dGdndGNnY2FndGNhdGd0Y2NjYWN0YWdjdGFjY2FjY2NnZ2d0dGF0Z2N0dGFhY2FjdHRjYWFhYXRnZ2d0dGFjdGNjYWd0Y3R0Y2NjdGF0dGNhdGNhZ3R0Y2F0YWFhZ2NnYWd0Z3R0Y2dhZ3RjY3RjZ2NnYWNjY2NhdGdhdGNjdHRnY3RnY2F0YWN0YWdjY2F0YWFnYWN0YWN0YWF0dGN0Z2NnZ2d0dHRnY2N0Y3RndHRndGF0dGd0Y2djdGF0dGFnY2NnZ2FjYWFndGFhY2NhZ2FnY2FhZ2FhZ2NjYWNhY2FndGdnY3RnZ3RhdGNnYWNnY2FjYWFhYWd0Y2N0Y3R0YXRjYWdjYWd0YWdjYXRhY2FnYWNndGNjZ2N0YXRnY2d0dHRnYWFjYWdndGdnYWd0Z2d0YWdndGdhdGd0Z2FjdGN0dGN0Y3R0YWNnY2NnZ2FjdHRjYXR0YWdjZ2djYWdnYWNnZ2FjYWNjY3RndHRnYWdhZ2F0Y3RjZ2FjYXR0Y3R0YXRjYWNjYWdjY3RnZ2FhY2NnYWdjYXR0Y2FjdGdhdGNjYWF0YWN0Z2djY2d0YWNndGFjY2NhY2FjdGFjZ3R0Y2FjYXRhdGNhYXRhZ2djdGNnY3RnZ2FjYWFjYWNnZ2dhY2FjZ2N0YXR0Z2FhZ2N0Z3RnYXRnYWdhZ2djdGN0dGF0dGdjY2djZ2djZ2dnY3RnZ2N0Y3RhYWNhY2FjdGNnY3R0Z2NndGNnYWF0Z2dnZ2NnY2N0YWd0Z2dhY2djdGF0Z2NnYWN0Y2FhY3RhY2NhYWN0YWFjY2FjdGFhY3RhdGFnZ2d0YWdnY3R0dGdhYWd0Z2N0Z2N0Z2djdHRjZ3R0dGd0Z2N0YWdjY3R0dHRnZ2F0YWdhdGF0dGFjZ2djdHRjYWF0Y2NhdGFnY2d0YWNjYWFnYWFhY2FhdGd0dHRndGdnY3RjY2djZ2NhY2N0Z2F0Z3RjYWF0Z2NhYWMiKSAgIAogICAgaHVmZm1hbi5lbmNvZGVNZXNzYWdlKCJ0dGdhZ2F0Y2dnY3RjY3RndHRhYWNjdGd0dGFnYWN0dGd0YWFhdGF0dGdhY2F0Y2N0Z2dnYWFjZ2d0Y3R0Y2N0dGNjdHRjdGNjZ2NnY2djdGFnY2NjdGdnY2NjYWFjYWN0Z2NnZ2dnZ2FhYWNjY2dnZ3R0dHRjdHR0YWNhZ2FjY2FnZ2NhY3R0Y3R0dGdnY2dhZ2d0YWd0dGN0dGFhdGNhdGd0YWFjdHRnY2dhY3RnZ3RnZ2NjZ3RhY2NhYWN0YWFhY2dnY2djZ3R0Z2NhdGNjYWNnYWFnZ2dnZ3R0YWNjY3RnY2dnY3RhY2N0Y3RnY2F0YWdnY2FjZ2F0YWdjdHRhYWNjY2djdGNhYWFjdHRnZ3RjZ2NhZ3RjYXRndGNjY2FjdGFnY3RhY2NhY2NjZ2dndHRhdGdjdHRhYWNhY3R0Y2FhYWF0Z2dndHRhY3RjY2FndGN0dGNjY3RhdHRjYXRjYWd0dGNhdGFhYWdjZ2FndGd0dGNnYWd0Y2N0Y2djZ2FjY2NjYXRnYXRjY3R0Z2N0Z2NhdGFjdGFnY2NhdGFhZ2FjdGFjdGFhdHRjdGdjZ2dndHR0Z2NjdGN0Z3R0Z3RhdHRndGNnY3RhdHRhZ2NjZ2dhY2FhZ3RhYWNjYWdhZ2NhYWdhYWdjY2FjYWNhZ3RnZ2N0Z2d0YXRjZ2FjZ2NhY2FhYWFndGNjdGN0dGF0Y2FnY2FndGFnY2F0YWNhZ2FjZ3RjY2djdGF0Z2NndHR0Z2FhY2FnZ3RnZ2FndGdndGFnZ3RnYXRndGdhY3RjdHRjdGN0dGFjZ2NjZ2dhY3R0Y2F0dGFnY2dnY2FnZ2FjZ2dhY2FjY2N0Z3R0Z2FnYWdhdGN0Y2dhY2F0dGN0dGF0Y2FjY2FnY2N0Z2dhYWNjZ2FnY2F0dGNhY3RnYXRjY2FhdGFjdGdnY2NndGFjZ3RhY2NjYWNhY3RhY2d0dGNhY2F0YXRjYWF0YWdnY3RjZ2N0Z2dhY2FhY2FjZ2dnYWNhY2djdGF0dGdhYWdjdGd0Z2F0Z2FnYWdnY3RjdHRhdHRnY2NnY2dnY2dnZ2N0Z2djdGN0YWFjYWNhY3RjZ2N0dGdjZ3RjZ2FhdGdnZ2djZ2NjdGFndGdnYWNnY3RhdGdjZ2FjdGNhYWN0YWNjYWFjdGFhY2NhY3RhYWN0YXRhZ2dndGFnZ2N0dHRnYWFndGdjdGdjdGdnY3R0Y2d0dHRndGdjdGFnY2N0dHR0Z2dhdGFnYXRhdHRhY2dnY3R0Y2FhdGNjYXRhZ2NndGFjY2FhZ2FhYWNhYXRndHR0Z3RnZ2N0Y2NnY2djYWNjdGdhdGd0Y2FhdGdjYWFjIikKICAgIGh1ZmZtYW4uZGVjb2RlTWVzc2FnZSgpCiAgICAKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgc2VsZi5yb290ID0gTm9uZQogICAgICAgICAgICByZXR1cm4KICAgICAgICAKPHxmaW1fZW5kfD4="]
["4172fd9a2c3641bde8a139b6a35ba5cb25c66522-5","4172fd9a2c3641bde8a139b6a35ba5cb25c66522","PHxmaW1fcHJlZml4fD4KZnJvbSBEYXRhU3RydWN0dXJlcy5UcmVlcy5CaW5hcnlUcmVlLkJpbmFyeVRyZWVOb2RlIGltcG9ydCBCaW5hcnlUcmVlTm9kZQpmcm9tIERhdGFTdHJ1Y3R1cmVzLlF1ZXVlcy5Qcmlvcml0eVF1ZXVlLlByaW9yaXR5UXVldWUgaW1wb3J0IFByaW9yaXR5UXVldWUKCmNsYXNzIEh1ZmZtYW5Db2Rpbmc6CiAgICAiIiIKICAgICAgICBIdWZmbWFuIGNvZGluZyBpcyBhIGxvc3NsZXNzIGRhdGEgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBUaGUgaWRlYSBpcyB0byBhc3NpZ24gdmFyaWFibGUtbGVuZ3RoIGNvZGVzIHRvIGlucHV0IGNoYXJhY3RlcnMsCiAgICAgICAgbGVuZ3RocyBvZiB0aGUgYXNzaWduZWQgY29kZXMgYXJlIGJhc2VkIG9uIHRoZSBmcmVxdWVuY2llcyBvZiBjb3JyZXNwb25kaW5nIGNoYXJhY3RlcnMuCiAgICAgICAgVGhlIG1vc3QgZnJlcXVlbnQgY2hhcmFjdGVyIGdldHMgdGhlIHNtYWxsZXN0IGNvZGUgYW5kIHRoZSBsZWFzdCBmcmVxdWVudCBjaGFyYWN0ZXIgZ2V0cyB0aGUgbGFyZ2VzdCBjb2RlLgogICAgICAgIFRoZSB2YXJpYWJsZS1sZW5ndGggY29kZXMgYXNzaWduZWQgdG8gaW5wdXQgY2hhcmFjdGVycyBhcmUgUHJlZml4IENvZGVzLAogICAgICAgIG1lYW5zIHRoZSBjb2RlcyAoYml0IHNlcXVlbmNlcykgYXJlIGFzc2lnbmVkIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUgY29kZSBhc3NpZ25lZCB0byBvbmUgY2hhcmFjdGVyIGlzIG5vdCB0aGUgcHJlZml4IG9mIGNvZGUKICAgICAgICBhc3NpZ25lZCB0byBhbnkgb3RoZXIgY2hhcmFjdGVyLiBUaGlzIGlzIGhvdyBIdWZmbWFuIENvZGluZyBtYWtlcyBzdXJlIHRoYXQgdGhlcmUgaXMgbm8gYW1iaWd1aXR5IHdoZW4gZGVjb2RpbmcgdGhlIGdlbmVyYXRlZCBiaXRzdHJlYW0uCiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXh0KToKICAgICAgICBzZWxmLmN1cnJCeXRlID0gMHgwCiAgICAgICAgc2VsZi5jdXJyQnl0ZUluZGV4ID0gNwogICAgICAgIHNlbGYuYnVmZmVyID0gW10KICAgICAgICAKICAgICAgICAKICAgICAgICBpZiBsZW4odGV4dCkgPT0gMDoKICAgICAgICAgICAgc2VsZi5yb290ID0gTm9uZQogICAgICAgICAgICByZXR1cm4KICAgICAgICAKICAgICAgICBwcSA9IFByaW9yaXR5UXVldWUoKQogICAgICAgIGZvciB0IGluIHNldCh0ZXh0KToKICAgICAgICAgICAgcHEucHVzaChCaW5hcnlUcmVlTm9kZSgodGV4dC5jb3VudCh0KSwgdCkpKQogICAgICAgIAogICAgICAgIHdoaWxlIGxlbihwcSkgPiAxOgogICAgICAgICAgICBub2RlQSA9IHBxLmdldCgpCiAgICAgICAgICAgIG5vZGVCID0gcHEuZ2V0KCkKICAgICAgICAgICAgc2VsZi5yb290ID0gQmluYXJ5VHJlZU5vZGUoKG5vZGVBLnZhbHVlWzBdICsgbm9kZUIudmFsdWVbMF0sICksIG5vZGVBLCBub2RlQikKICAgICAgICAgICAgcHEucHVzaChzZWxmLnJvb3QpCiAgICAgICAgICAgIAogICAgICAgIHNlbGYuY3Vyck5vZGUgPSBzZWxmLnJvb3QKICAgICAgICBzZWxmLmRlY29kZWRNZXNzYWdlID0gIiIKICAgICAgICAgICAgCiAgICBkZWYgX2luY3JlbWVudEJ5dGUoc2VsZiwgcmlnaHQpOgogICAgICAgIGlmIHNlbGYuY3VyckJ5dGVJbmRleCA8IDA6CiAgICAgICAgICAgIHNlbGYuY3VyckJ5dGVJbmRleCA9IDcKICAgICAgICAgICAgc2VsZi5idWZmZXIuYXBwZW5kKHNlbGYuY3VyckJ5dGUpCiAgICAgICAgICAgIHNlbGYuY3VyckJ5dGUgPSAwYjAKICAgICAgICAgICAgCiAgICAgICAgaWYgcmlnaHQ6CiAgICAgICAgICAgIHNlbGYuY3VyckJ5dGUgfD0gMSA8PCBzZWxmLmN1cnJCeXRlSW5kZXgKICAgICAgICBzZWxmLmN1cnJCeXRlSW5kZXggLT0gMQogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICBkZWYgX2VuY29kZUNoYXIoc2VsZiwgY2hhciwgbm9kZT1Ob25lLCBmaXJzdFJ1bj1UcnVlKToKICAgICAgICBpZiBub2RlID09IE5vbmU6CiAgICAgICAgICAgIG5vZGUgPSBzZWxmLnJvb3QKICAgICAgICAgICAgCiAgICAgICAgcmVzID0gW10KICAgICAgICAgICAgCiAgICAgICAgaWYgbm9kZS5sZWZ0IGFuZCBub2RlLnJpZ2h0OgogICAgICAgICAgICBsZWZ0RW5jb2RlID0gc2VsZi5fZW5jb2RlQ2hhcihjaGFyLCBub2RlLmxlZnQsIEZhbHNlKQogICAgICAgICAgICBpZiBsZWZ0RW5jb2RlOgogICAgICAgICAgICAgICAgaWYgbm90IGZpcnN0UnVuOgogICAgICAgICAgICAgICAgICAgIGlmIGxlZnRFbmNvZGUgPT0gVHJ1ZToKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFswXQogICAgICAgICAgICAgICAgICAgIHJldHVybiBbMF0gKyBsZWZ0RW5jb2RlCiAgICAgICAgICAgICAgICByZXMgPSBbMF0gKyBsZWZ0RW5jb2RlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByaWdodEVuY29kZSA9IHNlbGYuX2VuY29kZUNoYXIoY2hhciwgbm9kZS5yaWdodCwgRmFsc2UpCiAgICAgICAgICAgICAgICBpZiByaWdodEVuY29kZToKICAgICAgICAgICAgICAgICAgICBpZiBub3QgZmlyc3RSdW46CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJpZ2h0RW5jb2RlID09IFRydWU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzFdCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMV0gKyByaWdodEVuY29kZQogICAgICAgICAgICAgICAgICAgIHJlcyA9IFsxXSArIHJpZ2h0RW5jb2RlCiAgICAgICAgICAgIAogICAgICAgICAgICBpZiBmaXJzdFJ1bjoKICAgICAgICAgICAgICAgIGZvciByIGluIHJlczoKICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbmNyZW1lbnRCeXRlKGludChyKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiBub2RlLnZhbHVlWzFdID09IGNoYXI6CiAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgIAogICAgZGVmIF9kZWNvZGVDaGFyKHNlbGYsIG5leHRCaXQpOgogICAgICAgIHRyeToKICAgICAgICAgICAgaWYgbmV4dEJpdCA9PSAiMCI6CiAgICAgICAgICAgICAgICBzZWxmLmN1cnJOb2RlID0gc2VsZi5jdXJyTm9kZS5sZWZ0CiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBzZWxmLmN1cnJOb2RlID0gc2VsZi5jdXJyTm9kZS5yaWdodAogICAgICAgICAgICAKICAgICAgICAgICAgaWYgbm90IHNlbGYuY3Vyck5vZGUubGVmdCBhbmQgbm90IHNlbGYuY3Vyck5vZGUucmlnaHQ6CiAgICAgICAgICAgICAgICBzZWxmLmRlY29kZWRNZXNzYWdlICs9IHNlbGYuY3Vyck5vZGUudmFsdWVbMV0KICAgICAgICAgICAgICAgIHNlbGYuY3Vyck5vZGUgPSBzZWxmLnJvb3QKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IoIkVuY29kZWQgY2hhciBkb2Vzbid0IGV4aXN0IGluIHRoZSBodWZmbWFuIHRyZWUuIikKICAgICAgICAgICAgCiAgICBkZWYgZW5jb2RlTWVzc2FnZShzZWxmLCB0ZXh0KToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHdpdGggb3BlbignLi9BbGdvcml0aG1zL0NvbXByZXNzaW9uL0h1ZmZtYW5FbmNvZGVkTWVzc2FnZS50eHQnLCAnd2InKSBhcyBmOgogICAgICAgICAgICBmb3IgY2hhciBpbiB0ZXh0OgogICAgICAgICAgICAgICAgc2VsZi5fZW5jb2RlQ2hhcihjaGFyKQogICAgICAgICAgICAgICAgd2hpbGUgbGVuKHNlbGYuYnVmZmVyKSA+IDA6Cjx8ZmltX2VuZHw+"]
["4190c0d5f756eb8be9c5e7b6212bf14ada1e1fea-1","4190c0d5f756eb8be9c5e7b6212bf14ada1e1fea","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IGRhdGV0aW1lCmZyb20gc291dGguZGIgaW1wb3J0IGRiCmZyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCgoKY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CgogICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CiAgICAgICAgIyBSZW1vdmluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnU2l0ZUtleVZhbHVlJywgZmllbGRzIFsndmFsdWUnLCAna2V5J10KICAgICAgICBkYi5kZWxldGVfdW5pcXVlKCdzaXRlX2tleV92YWx1ZScsIFsndmFsdWUnLCAna2V5J10pCgogICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdTaXRlS2V5VmFsdWUnLCBmaWVsZHMgWydvYmonLCAndmFsdWUnLCAna2V5J10KICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKCdzaXRlX2tleV92YWx1ZScsIFsnb2JqX2lkJywgJ3ZhbHVlJywgJ2tleSddKQoKCiAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CiAgICAgICAgIyBSZW1vdmluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnU2l0ZUtleVZhbHVlJywgZmllbGRzIFsnb2JqJywgJ3ZhbHVlJywgJ2tleSddCiAgICAgICAgZGIuZGVsZXRlX3VuaXF1ZSgnc2l0ZV9rZXlfdmFsdWUnLCBbJ29ial9pZCcsICd2YWx1ZScsICdrZXknXSkKCiAgICAgICAgIyBBZGRpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ1NpdGVLZXlWYWx1ZScsIGZpZWxkcyBbJ3ZhbHVlJywgJ2tleSddCiAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSgnc2l0ZV9rZXlfdmFsdWUnLCBbJ3ZhbHVlJywgJ2tleSddKQoKCiAgICBtb2RlbHMgPSB7CiAgICAgICAgJ3NpdGUuc2l0ZSc6IHsKICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCduYW1lJywgJ3BhcmVudCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnU2l0ZScsICdkYl90YWJsZSc6ICInc2l0ZScifSwKICAgICAgICAgICAgJ2Z1bGxfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCjx8ZmltX2hvbGV8PgogICAgICAgIH0sCiAgICAgICAgJ3NpdGUuc2l0ZWtleXZhbHVlJzogewogICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2tleScsICd2YWx1ZScsICdvYmonKSwpIiwgJ29iamVjdF9uYW1lJzogJ1NpdGVLZXlWYWx1ZScsICdkYl90YWJsZSc6ICInc2l0ZV9rZXlfdmFsdWUnIn0sCiAgICAgICAgICAgICdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCiAgICAgICAgICAgICdvYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIna2V5dmFsdWVfc2V0JyIsICd0byc6ICJvcm1bJ3NpdGUuU2l0ZSddIn0pLAogICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCiAgICAgICAgfQogICAgfQoKICAgIGNvbXBsZXRlX2FwcHMgPSBbJ3NpdGUnXQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCiAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKICAgICAgICAgICAgJ3BhcmVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiAib3JtWydzaXRlLlNpdGUnXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQo8fGZpbV9lbmR8Pg=="]
["4190c0d5f756eb8be9c5e7b6212bf14ada1e1fea-2","4190c0d5f756eb8be9c5e7b6212bf14ada1e1fea","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IGRhdGV0aW1lCmZyb20gc291dGguZGIgaW1wb3J0IGRiCmZyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCgoKY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CgogICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CiAgICAgICAgIyBSZW1vdmluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnU2l0ZUtleVZhbHVlJywgZmllbGRzIFsndmFsdWUnLCAna2V5J10KICAgICAgICBkYi5kZWxldGVfdW5pcXVlKCdzaXRlX2tleV92YWx1ZScsIFsndmFsdWUnLCAna2V5J10pCgogICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdTaXRlS2V5VmFsdWUnLCBmaWVsZHMgWydvYmonLCAndmFsdWUnLCAna2V5J10KICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKCdzaXRlX2tleV92YWx1ZScsIFsnb2JqX2lkJywgJ3ZhbHVlJywgJ2tleSddKQoKCiAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CiAgICAgICAgIyBSZW1vdmluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnU2l0ZUtleVZhbHVlJywgZmllbGRzIFsnb2JqJywgJ3ZhbHVlJywgJ2tleSddCiAgICAgICAgZGIuZGVsZXRlX3VuaXF1ZSgnc2l0ZV9rZXlfdmFsdWUnLCBbJ29ial9pZCcsICd2YWx1ZScsICdrZXknXSkKCiAgICAgICAgIyBBZGRpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ1NpdGVLZXlWYWx1ZScsIGZpZWxkcyBbJ3ZhbHVlJywgJ2tleSddCiAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSgnc2l0ZV9rZXlfdmFsdWUnLCBbJ3ZhbHVlJywgJ2tleSddKQoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIG1vZGVscyA9IHsKICAgICAgICAnc2l0ZS5zaXRlJzogewogICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ25hbWUnLCAncGFyZW50JyksKSIsICdvYmplY3RfbmFtZSc6ICdTaXRlJywgJ2RiX3RhYmxlJzogIidzaXRlJyJ9LAogICAgICAgICAgICAnZnVsbF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKPHxmaW1fZW5kfD4="]
["4190c0d5f756eb8be9c5e7b6212bf14ada1e1fea-3","4190c0d5f756eb8be9c5e7b6212bf14ada1e1fea","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IGRhdGV0aW1lCmZyb20gc291dGguZGIgaW1wb3J0IGRiCmZyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCgoKY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6Cgo8fGZpbV9ob2xlfD4KICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnU2l0ZUtleVZhbHVlJywgZmllbGRzIFsnb2JqJywgJ3ZhbHVlJywgJ2tleSddCiAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSgnc2l0ZV9rZXlfdmFsdWUnLCBbJ29ial9pZCcsICd2YWx1ZScsICdrZXknXSkKCgogICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgogICAgICAgICMgUmVtb3ZpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ1NpdGVLZXlWYWx1ZScsIGZpZWxkcyBbJ29iaicsICd2YWx1ZScsICdrZXknXQogICAgICAgIGRiLmRlbGV0ZV91bmlxdWUoJ3NpdGVfa2V5X3ZhbHVlJywgWydvYmpfaWQnLCAndmFsdWUnLCAna2V5J10pCgogICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdTaXRlS2V5VmFsdWUnLCBmaWVsZHMgWyd2YWx1ZScsICdrZXknXQogICAgICAgIGRiLmNyZWF0ZV91bmlxdWUoJ3NpdGVfa2V5X3ZhbHVlJywgWyd2YWx1ZScsICdrZXknXSkKCgogICAgbW9kZWxzID0gewogICAgICAgICdzaXRlLnNpdGUnOiB7CiAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbmFtZScsICdwYXJlbnQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1NpdGUnLCAnZGJfdGFibGUnOiAiJ3NpdGUnIn0sCiAgICAgICAgICAgICdmdWxsX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAogICAgICAgICAgICAnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCiAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKICAgICAgICAgICAgJ3BhcmVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiAib3JtWydzaXRlLlNpdGUnXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQogICAgICAgIH0sCiAgICAgICAgJ3NpdGUuc2l0ZWtleXZhbHVlJzogewogICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2tleScsICd2YWx1ZScsICdvYmonKSwpIiwgJ29iamVjdF9uYW1lJzogJ1NpdGVLZXlWYWx1ZScsICdkYl90YWJsZSc6ICInc2l0ZV9rZXlfdmFsdWUnIn0sCiAgICAgICAgICAgICdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCiAgICAgICAgICAgICdvYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIna2V5dmFsdWVfc2V0JyIsICd0byc6ICJvcm1bJ3NpdGUuU2l0ZSddIn0pLAogICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCiAgICAgICAgfQogICAgfQoKICAgIGNvbXBsZXRlX2FwcHMgPSBbJ3NpdGUnXQo8fGZpbV9zdWZmaXh8PgogICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CiAgICAgICAgIyBSZW1vdmluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnU2l0ZUtleVZhbHVlJywgZmllbGRzIFsndmFsdWUnLCAna2V5J10KICAgICAgICBkYi5kZWxldGVfdW5pcXVlKCdzaXRlX2tleV92YWx1ZScsIFsndmFsdWUnLCAna2V5J10pCgo8fGZpbV9lbmR8Pg=="]
["4190c0d5f756eb8be9c5e7b6212bf14ada1e1fea-4","4190c0d5f756eb8be9c5e7b6212bf14ada1e1fea","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IGRhdGV0aW1lCmZyb20gc291dGguZGIgaW1wb3J0IGRiCmZyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCgoKY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CgogICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CiAgICAgICAgIyBSZW1vdmluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnU2l0ZUtleVZhbHVlJywgZmllbGRzIFsndmFsdWUnLCAna2V5J10KICAgICAgICBkYi5kZWxldGVfdW5pcXVlKCdzaXRlX2tleV92YWx1ZScsIFsndmFsdWUnLCAna2V5J10pCgogICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdTaXRlS2V5VmFsdWUnLCBmaWVsZHMgWydvYmonLCAndmFsdWUnLCAna2V5J10KICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKCdzaXRlX2tleV92YWx1ZScsIFsnb2JqX2lkJywgJ3ZhbHVlJywgJ2tleSddKQoKCiAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CiAgICAgICAgIyBSZW1vdmluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnU2l0ZUtleVZhbHVlJywgZmllbGRzIFsnb2JqJywgJ3ZhbHVlJywgJ2tleSddCiAgICAgICAgZGIuZGVsZXRlX3VuaXF1ZSgnc2l0ZV9rZXlfdmFsdWUnLCBbJ29ial9pZCcsICd2YWx1ZScsICdrZXknXSkKPHxmaW1faG9sZXw+CgogICAgbW9kZWxzID0gewogICAgICAgICdzaXRlLnNpdGUnOiB7CiAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbmFtZScsICdwYXJlbnQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1NpdGUnLCAnZGJfdGFibGUnOiAiJ3NpdGUnIn0sCiAgICAgICAgICAgICdmdWxsX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAogICAgICAgICAgICAnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCiAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKICAgICAgICAgICAgJ3BhcmVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiAib3JtWydzaXRlLlNpdGUnXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQogICAgICAgIH0sCiAgICAgICAgJ3NpdGUuc2l0ZWtleXZhbHVlJzogewogICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2tleScsICd2YWx1ZScsICdvYmonKSwpIiwgJ29iamVjdF9uYW1lJzogJ1NpdGVLZXlWYWx1ZScsICdkYl90YWJsZSc6ICInc2l0ZV9rZXlfdmFsdWUnIn0sCiAgICAgICAgICAgICdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCiAgICAgICAgICAgICdvYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIna2V5dmFsdWVfc2V0JyIsICd0byc6ICJvcm1bJ3NpdGUuU2l0ZSddIn0pLAogICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCiAgICAgICAgfQogICAgfQoKICAgIGNvbXBsZXRlX2FwcHMgPSBbJ3NpdGUnXQo8fGZpbV9zdWZmaXh8PgoKICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnU2l0ZUtleVZhbHVlJywgZmllbGRzIFsndmFsdWUnLCAna2V5J10KICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKCdzaXRlX2tleV92YWx1ZScsIFsndmFsdWUnLCAna2V5J10pCgo8fGZpbV9lbmR8Pg=="]
["dabdbb86e57679f5d6e6a0c94f2d22adcd5c37e3-1","dabdbb86e57679f5d6e6a0c94f2d22adcd5c37e3","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc9dXRmLTgKaW1wb3J0IHN5cwoKcmVsb2FkKHN5cykKc3lzLnNldGRlZmF1bHRlbmNvZGluZygndXRmLTgnKQoKaW1wb3J0IGxvZ2dpbmcKCmZyb20gZGFvLmJhc2UuYmFzZV9kYW8gaW1wb3J0IEJhc2VEYW8KZnJvbSBzdXBwb3J0LmRiLm15c3FsX2RiIGltcG9ydCBkb2N0b3JfY29ubgoKCmNsYXNzIEhvc3BpdGFsU2VjdGlvbkRhbyhCYXNlRGFvKToKICAgIGRiX25hbWUgPSAiZG9jdG9yIgogICAgdGFibGVfbmFtZSA9ICJob3NwaXRhbF9zZWN0aW9uX21hcCIKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiB1cGRhdGVfZGVhbF9kb2N0b3JfZmxhZyhjbHMsIHNlY3Rpb25faWQsIHN0YXR1cz0tMSk6CiAgICAgICAgc3FsID0gInVwZGF0ZSB7ZGJ9Lnt0Ymx9ICBzZXQgZGVhbF9kb2N0b3JfZmxhZz17c3RhdHVzfSB3aGVyZSBgaWRgPXtzZWN0aW9uX2lkfSIuZm9ybWF0KGRiPWNscy5kYl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Ymw9Y2xzLnRhYmxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cz1zdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25faWQ9c2VjdGlvbl9pZCkKICAgICAgICBkb2N0b3JfY29ubi5leGVjdXRlX3NxbChzcWwpCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgZ2V0X2FsbF9zZWN0aW9uc193aGljaF9uZWVkX3RvX2RlYWxfZG9jdG9yKGNscyk6CiAgICAgICAgc3FsID0gInNlbGVjdCAqIGZyb20ge2RifS57dGJsfSB3aGVyZSBkZWFsX2RvY3Rvcl9mbGFnPTAgbGltaXQgNjAwMDAsIDMwMDAwIi5mb3JtYXQoZGI9Y2xzLmRiX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Ymw9Y2xzLnRhYmxlX25hbWUpCjx8ZmltX2hvbGV8PgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgZ2V0X2J5X2hvc3BpdGFsX2luZGV4KGNscywgaG9zcGl0YWxfaW5kZXgpOgogICAgICAgIHNxbCA9ICJzZWxlY3QgKiBmcm9tIHtkYn0ue3RibH0gd2hlcmUgYGhvc3BpdGFsX2luZGV4YD17aG9zcGl0YWxfaW5kZXh9Ii4gXAogICAgICAgICAgICBmb3JtYXQoZGI9Y2xzLmRiX25hbWUsCiAgICAgICAgICAgICAgICAgICB0Ymw9Y2xzLnRhYmxlX25hbWUsCiAgICAgICAgICAgICAgICAgICBob3NwaXRhbF9pbmRleD1ob3NwaXRhbF9pbmRleCkKICAgICAgICBpdGVtID0gZG9jdG9yX2Nvbm4uZmV0Y2hvbmUoc3FsKQogICAgICAgIHJldHVybiBpdGVtCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgZ2V0X2J5X2hvc3BpdGFsX2luZGV4X3NlY3Rpb25QX3NlY3Rpb25DKGNscywgaG9zcGl0YWxfaW5kZXgsIHNlY3Rpb25fcCwgc2VjdGlvbl9jKToKICAgICAgICBzcWwgPSAic2VsZWN0ICogZnJvbSB7ZGJ9Lnt0Ymx9IHdoZXJlIGBob3NwaXRhbF9pbmRleGA9e2hvc3BpdGFsX2luZGV4fSAiIFwKICAgICAgICAgICAgICAiYW5kIHNlY3Rpb25fcD0ne3NlY3Rpb25fcH0nIGFuZCBzZWN0aW9uX2M9J3tzZWN0aW9uX2N9JyIuIFwKICAgICAgICAgICAgZm9ybWF0KGRiPWNscy5kYl9uYW1lLAogICAgICAgICAgICAgICAgICAgdGJsPWNscy50YWJsZV9uYW1lLAogICAgICAgICAgICAgICAgICAgaG9zcGl0YWxfaW5kZXg9aG9zcGl0YWxfaW5kZXgsCiAgICAgICAgICAgICAgICAgICBzZWN0aW9uX3A9c2VjdGlvbl9wLAogICAgICAgICAgICAgICAgICAgc2VjdGlvbl9jPXNlY3Rpb25fYykKICAgICAgICBpdGVtID0gZG9jdG9yX2Nvbm4uZmV0Y2hvbmUoc3FsKQogICAgICAgIHJldHVybiBpdGVtCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgZ2V0X2FsbF9pbmRleHMoY2xzKToKICAgICAgICBzcWwgPSAic2VsZWN0IGBpbmRleGAgZnJvbSB7ZGJ9Lnt0Ymx9ICIuZm9ybWF0KGRiPWNscy5kYl9uYW1lLCB0Ymw9Y2xzLnRhYmxlX25hbWUpCiAgICAgICAgaXRlbXMgPSBkb2N0b3JfY29ubi5mZXRjaGFsbChzcWwpCiAgICAgICAgcmV0dXJuIGl0ZW1zCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgaW5zZXJ0KGNscywgbWFwX2l0ZW0pOgogICAgICAgIHNxbCA9ICJpbnNlcnQgaW50byB7ZGJ9Lnt0Ymx9KGBob3NwaXRhbF9pbmRleGAsIGBzZWN0aW9uX3BgLCBzZWN0aW9uX2MsIGRvY3Rvcl9jbnQsIGxpbmssIGxpa2VfY250KSAiIFwKICAgICAgICAgICAgICAidmFsdWVzICAoe2hvc3BpdGFsX2luZGV4fSwgJ3tzZWN0aW9uX3B9JywgJ3tzZWN0aW9uX2N9Jywge2RvY3Rvcl9jbnR9LCAne2xpbmt9Jywge2xpa2VfY250fSkgIi5mb3JtYXQoCiAgICAgICAgICAgICAgICBkYj1jbHMuZGJfbmFtZSwKICAgICAgICAgICAgICAgIHRibD1jbHMudGFibGVfbmFtZSwKICAgICAgICAgICAgICAgIGhvc3BpdGFsX2luZGV4PW1hcF9pdGVtWyJob3NwaXRhbF9pbmRleCJdIGlmICJob3NwaXRhbF9pbmRleCIgaW4gbWFwX2l0ZW0gZWxzZSAwLAogICAgICAgICAgICAgICAgc2VjdGlvbl9wPW1hcF9pdGVtWyJzZWN0aW9uX3AiXSBpZiAic2VjdGlvbl9wIiBpbiBtYXBfaXRlbSBlbHNlIDAsCiAgICAgICAgICAgICAgICBzZWN0aW9uX2M9bWFwX2l0ZW1bInNlY3Rpb25fYyJdIGlmICJzZWN0aW9uX2MiIGluIG1hcF9pdGVtIGVsc2UgMCwKICAgICAgICAgICAgICAgIGxpbms9bWFwX2l0ZW1bImxpbmsiXSBpZiAibGluayIgaW4gbWFwX2l0ZW0gZWxzZSAwLAogICAgICAgICAgICAgICAgbGlrZV9jbnQ9bWFwX2l0ZW1bImxpa2VfY250Il0gaWYgImxpa2VfY250IiBpbiBtYXBfaXRlbSBlbHNlIDAsCiAgICAgICAgICAgICAgICBkb2N0b3JfY250PW1hcF9pdGVtWyJkb2N0b3JfY250Il0gaWYgImRvY3Rvcl9jbnQiIGluIG1hcF9pdGVtIGVsc2UgMCwKICAgICAgICApCiAgICAgICAgZG9jdG9yX2Nvbm4uZXhlY3V0ZV9zcWwoc3FsKQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGluc2VydF9saXN0KGNscywgaG9zcGl0YWxfbGlzdCk6CiAgICAgICAgaWYgbGVuKGhvc3BpdGFsX2xpc3QpID09IDA6CiAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIiMjIyMjIyMjIG5vdGhpbmcgdG8gYmUgaW5zZXJ0ZWQuLi4iKQogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgc3FsID0gImluc2VydCBpbnRvIHtkYn0ue3RibH0oYG5hbWVgLCBgaW5kZXhgLCBpbWdfdXJsLCBzZWN0aW9uX2NudCwgZG9jdG9yX2NudCwgY29tbWVudF9jbnQsIHByb3ZpbmNlLCBjaXR5KSAiIFwKICAgICAgICAgICAgICAidmFsdWVzICIuZm9ybWF0KGRiPWNscy5kYl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJsPWNscy50YWJsZV9uYW1lKQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZvciBpbmRleCwgaXRlbSBpbiBlbnVtZXJhdGUoaG9zcGl0YWxfbGlzdCk6CiAgICAgICAgICAgICAgICBzcWwgKz0gIiAoJ3tuYW1lfScsIHtpbmRleH0sICd7aW1nX3VybH0nLCB7c2VjdGlvbl9jbnR9LCB7ZG9jdG9yX2NudH0sIHtjb21tZW50X2NudH0sICd7cHJvdmluY2V9JywgIiBcCiAgICAgICAgICAgICAgICAgICAgICAgIid7Y2l0eX0nKSwiLiBcCiAgICAgICAgICAgICAgICAgICAgZm9ybWF0KG5hbWU9aXRlbVsibmFtZSJdLmVuY29kZSgidXRmLTgiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9aXRlbVsiaW5kZXgiXSBpZiAiaW5kZXgiIGluIGl0ZW0gZWxzZSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uX2NudD1pdGVtWyJzZWN0aW9uX2NudCJdIGlmICJzZWN0aW9uX2NudCIgaW4gaXRlbSBlbHNlIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3Rvcl9jbnQ9aXRlbVsiZG9jdG9yX2NudCJdIGlmICJkb2N0b3JfY250IiBpbiBpdGVtIGVsc2UgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudF9jbnQ9aXRlbVsiY29tbWVudF9jbnQiXSBpZiAiY29tbWVudF9jbnQiIGluIGl0ZW0gZWxzZSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aW5jZT1pdGVtWyJwcm92aW5jZSJdIGlmICJwcm92aW5jZSIgaW4gaXRlbSBlbHNlIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpdHk9aXRlbVsiY2l0eSJdIGlmICJjaXR5IiBpbiBpdGVtIGVsc2UgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nX3VybD1pdGVtWyJpbWdfdXJsIl0uZW5jb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBleDoKICAgICAgICAgICAgbG9nZ2luZy5lcnJvcihleCwgZXhjX2luZm89MSkKICAgICAgICAgICAgcmFpc2UgZXgKCiAgICAgICAgc3FsID0gc3FsWzotMV0gICMg5Y675o6J5pyA5ZCO55qELAogICAgICAgIGRvY3Rvcl9jb25uLmV4ZWN1dGVfc3FsKHNxbCkKPHxmaW1fc3VmZml4fD4KICAgICAgICBwcmludCBzcWwKICAgICAgICBpdGVtcyA9IGRvY3Rvcl9jb25uLmZldGNoYWxsKHNxbCkKICAgICAgICByZXR1cm4gaXRlbXMKCjx8ZmltX2VuZHw+"]
["e7b8d99b4cfc7ffc5dda85cb45bc7616c6adb490-1","e7b8d99b4cfc7ffc5dda85cb45bc7616c6adb490","PHxmaW1fcHJlZml4fD4KIyAgLSotIGNvZGluZzogdXRmLTggLSotCiMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIyBOSUNPUywgdGhlIE5ldHdvcmtlZCBJbnN0cnVtZW50IENvbnRyb2wgU3lzdGVtIG9mIHRoZSBNTFoKIyBDb3B5cmlnaHQgKGMpIDIwMDktMjAyMSBieSB0aGUgTklDT1MgY29udHJpYnV0b3JzIChzZWUgQVVUSE9SUykKIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgojIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKIyBkZXRhaWxzLgojCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAojIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAojIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKIwojIE1vZHVsZSBhdXRob3JzOgojICAgTWF0dCBDbGFya2UgPG1hdHQuY2xhcmtlQGVzcy5ldT4KIwojICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmltcG9ydCBjb3B5CmltcG9ydCBqc29uCmltcG9ydCB0aW1lCgpmcm9tIG5pY29zLmNvcmUgaW1wb3J0IERldmljZSwgTmljb3NFcnJvciwgT3ZlcnJpZGUsIFBhcmFtLCByZWxhdGl2ZV9wYXRoCgpmcm9tIG5pY29zX2Vzcy5uZXh1cy5jb252ZXJ0ZXIgaW1wb3J0IE5leHVzVGVtcGxhdGVDb252ZXJ0ZXIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCmNsYXNzIE5leHVzU3RydWN0dXJlUHJvdmlkZXIoRGV2aWNlKToKCjx8ZmltX2VuZHw+"]
["e7b8d99b4cfc7ffc5dda85cb45bc7616c6adb490-2","e7b8d99b4cfc7ffc5dda85cb45bc7616c6adb490","PHxmaW1fcHJlZml4fD4KIyAgLSotIGNvZGluZzogdXRmLTggLSotCiMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIyBOSUNPUywgdGhlIE5ldHdvcmtlZCBJbnN0cnVtZW50IENvbnRyb2wgU3lzdGVtIG9mIHRoZSBNTFoKIyBDb3B5cmlnaHQgKGMpIDIwMDktMjAyMSBieSB0aGUgTklDT1MgY29udHJpYnV0b3JzIChzZWUgQVVUSE9SUykKIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgojIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKIyBkZXRhaWxzLgojCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAojIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAojIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKIwojIE1vZHVsZSBhdXRob3JzOgojICAgTWF0dCBDbGFya2UgPG1hdHQuY2xhcmtlQGVzcy5ldT4KIwojICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmltcG9ydCBjb3B5CmltcG9ydCBqc29uCmltcG9ydCB0aW1lCgpmcm9tIG5pY29zLmNvcmUgaW1wb3J0IERldmljZSwgTmljb3NFcnJvciwgT3ZlcnJpZGUsIFBhcmFtLCByZWxhdGl2ZV9wYXRoCgpmcm9tIG5pY29zX2Vzcy5uZXh1cy5jb252ZXJ0ZXIgaW1wb3J0IE5leHVzVGVtcGxhdGVDb252ZXJ0ZXIKCgpjbGFzcyBOZXh1c1N0cnVjdHVyZVByb3ZpZGVyKERldmljZSk6CgogICAgcGFyYW1ldGVyX292ZXJyaWRlcyA9IHsKICAgICAgICAnbG93bGV2ZWwnOiBPdmVycmlkZShkZWZhdWx0PVRydWUpLAogICAgfQoKICAgIGRlZiBnZXRfc3RydWN0dXJlKHNlbGYsIGRhdGFzZXQsIHN0YXJ0X3RpbWUpOgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ211c3QgaW1wbGVtZW50IGdldF9zdHJ1Y3R1cmUgbWV0aG9kJykKCgpjbGFzcyBOZXh1c1N0cnVjdHVyZUpzb25GaWxlKE5leHVzU3RydWN0dXJlUHJvdmlkZXIpOgogICAgcGFyYW1ldGVycyA9IHsKICAgICAgICAnbmV4dXNfY29uZmlnX3BhdGgnOiBQYXJhbSgnTmVYdXMgY29uZmlndXJhdGlvbiBmaWxlcGF0aCcsCiAgICAgICAgICAgIHR5cGU9cmVsYXRpdmVfcGF0aCwgbWFuZGF0b3J5PVRydWUsIHVzZXJwYXJhbT1UcnVlLCBzZXR0YWJsZT1UcnVlKSwKICAgIH0KCiAgICBkZWYgZ2V0X3N0cnVjdHVyZShzZWxmLCBkYXRhc2V0LCBzdGFydF90aW1lKToKICAgICAgICB3aXRoIG9wZW4oc2VsZi5uZXh1c19jb25maWdfcGF0aCwgJ3InLCBlbmNvZGluZz0ndXRmLTgnKSBhcyBmaWxlOgogICAgICAgICAgICBzdHJ1Y3R1cmUgPSBmaWxlLnJlYWQoKQogICAgICAgIHJldHVybiBzZWxmLl9pbnNlcnRfbWV0YWRhdGEoc3RydWN0dXJlLCBkYXRhc2V0Lm1ldGFpbmZvKQoKICAgIGRlZiBfaW5zZXJ0X21ldGFkYXRhKHNlbGYsIHN0cnVjdHVyZSwgbWV0YWluZm8pOgogICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZS5yZXBsYWNlKCckVElUTEUkJywgbWV0YWluZm9bKCdFeHAnLCAndGl0bGUnKV1bMF0pCiAgICAgICAgc3RydWN0dXJlID0gc3RydWN0dXJlLnJlcGxhY2UoJyRFWFBfSUQkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhaW5mb1soJ0V4cCcsICdwcm9wb3NhbCcpXVswXSkKICAgICAgICBzdHJ1Y3R1cmUgPSBzZWxmLl9pbnNlcnRfdXNlcnMoc3RydWN0dXJlLCBtZXRhaW5mbykKICAgICAgICByZXR1cm4gc3RydWN0dXJlCgogICAgZGVmIF9pbnNlcnRfdXNlcnMoc2VsZiwgc3RydWN0dXJlLCBtZXRhaW5mbyk6CiAgICAgICAgdXNlcnMgPSBbXQogICAgICAgIGZvciB1c2VyIGluIG1ldGFpbmZvWygnRXhwJywgJ3VzZXJzJyldWzBdOgogICAgICAgICAgICB1c2VybmFtZSA9IHVzZXIuZ2V0KCduYW1lJywgJycpLnJlcGxhY2UoIiAiLCAiIikKICAgICAgICAgICAgaWYgbm90IHVzZXJuYW1lOgogICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgIHJlc3VsdCA9IHsKICAgICAgICAgICAgICAgICd0eXBlJzogJ2dyb3VwJywKICAgICAgICAgICAgICAgICduYW1lJzogZid1c2VyX3t1c2VybmFtZX0nLAogICAgICAgICAgICAgICAgJ2F0dHJpYnV0ZXMnOiB7J05YX2NsYXNzJzogJ05YdXNlcid9LAogICAgICAgICAgICAgICAgJ2NoaWxkcmVuJzogW10sCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yIG4sIHYgaW4gdXNlci5pdGVtcygpOgogICAgICAgICAgICAgICAgcmVzdWx0WydjaGlsZHJlbiddLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICdtb2R1bGUnOiAnZGF0YXNldCcsCiAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWcnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmFtZSc6IG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWVzJzogdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkdHlwZSc6ICdzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICB1c2Vycy5hcHBlbmQoanNvbi5kdW1wcyhyZXN1bHQpKQogICAgICAgIHVzZXJzX3N0ciA9ICcsJy5qb2luKHVzZXJzKSBpZiB1c2VycyBlbHNlICcnCiAgICAgICAgcmV0dXJuIHN0cnVjdHVyZS5yZXBsYWNlKCciJFVTRVJTJCInLCB1c2Vyc19zdHIpCgoKY2xhc3MgTmV4dXNTdHJ1Y3R1cmVUZW1wbGF0ZShOZXh1c1N0cnVjdHVyZVByb3ZpZGVyKToKICAgIHBhcmFtZXRlcnMgPSB7CiAgICAgICAgJ3RlbXBsYXRlc21vZHVsZSc6IFBhcmFtKAogICAgICAgICAgICAnUHl0aG9uIG1vZHVsZSBjb250YWluaW5nIE5lWHVzIG5leHVzX3RlbXBsYXRlcycsCiAgICAgICAgICAgIHR5cGU9c3RyLCBtYW5kYXRvcnk9VHJ1ZSksCiAgICAgICAgJ3RlbXBsYXRlbmFtZSc6IFBhcmFtKCdUZW1wbGF0ZSBuYW1lIGZyb20gdGhlIG5leHVzX3RlbXBsYXRlcyBtb2R1bGUnLAogICAgICAgICAgICB0eXBlPXN0ciwgbWFuZGF0b3J5PVRydWUpLAogICAgfQoKICAgIF90ZW1wbGF0ZXMgPSBbXQogICAgX3RlbXBsYXRlID0gTm9uZQoKICAgIGRlZiBkb0luaXQoc2VsZiwgbW9kZSk6CiAgICAgICAgc2VsZi5sb2cuaW5mbyhzZWxmLnRlbXBsYXRlc21vZHVsZSkKICAgICAgICBzZWxmLl90ZW1wbGF0ZXMgPSBfX2ltcG9ydF9fKAogICAgICAgICAgICBzZWxmLnRlbXBsYXRlc21vZHVsZSwgZnJvbWxpc3Q9W3NlbGYudGVtcGxhdGVuYW1lXQogICAgICAgICkKICAgICAgICBzZWxmLmxvZy5pbmZvKCdGaW5pc2hlZCBpbXBvcnRpbmcgbmV4dXNfdGVtcGxhdGVzJykKICAgICAgICBzZWxmLnNldF90ZW1wbGF0ZShzZWxmLnRlbXBsYXRlbmFtZSkKCiAgICBkZWYgc2V0X3RlbXBsYXRlKHNlbGYsIHZhbCk6CiAgICAgICAgIiIiCiAgICAgICAgU2V0cyB0aGUgdGVtcGxhdGUgZnJvbSB0aGUgZ2l2ZW4gdGVtcGxhdGUgbW9kdWxlcy4KICAgICAgICBQYXJzZXMgdGhlIHRlbXBsYXRlIHVzaW5nICpwYXJzZXJjbGFzcyogbWV0aG9kIHBhcnNlLiBUaGUgcGFyc2VkCiAgICAgICAgcm9vdCwgZXZlbnQga2Fma2Egc3RyZWFtcyBhbmQgZGV2aWNlIHBsYWNlaG9sZGVycyBhcmUgdGhlbiBzZXQuCiAgICAgICAgOnBhcmFtIHZhbDogdGVtcGxhdGUgbmFtZQogICAgICAgICIiIgogICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYuX3RlbXBsYXRlcywgdmFsKToKICAgICAgICAgICAgcmFpc2UgTmljb3NFcnJvcigKICAgICAgICAgICAgICAgICdUZW1wbGF0ZSAlcyBub3QgZm91bmQgaW4gbW9kdWxlICVzJwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAlICh2YWwsIHNlbGYudGVtcGxhdGVzbW9kdWxlKQo8fGZpbV9lbmR8Pg=="]
["e7b8d99b4cfc7ffc5dda85cb45bc7616c6adb490-3","e7b8d99b4cfc7ffc5dda85cb45bc7616c6adb490","PHxmaW1fcHJlZml4fD4KIyAgLSotIGNvZGluZzogdXRmLTggLSotCiMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIyBOSUNPUywgdGhlIE5ldHdvcmtlZCBJbnN0cnVtZW50IENvbnRyb2wgU3lzdGVtIG9mIHRoZSBNTFoKIyBDb3B5cmlnaHQgKGMpIDIwMDktMjAyMSBieSB0aGUgTklDT1MgY29udHJpYnV0b3JzIChzZWUgQVVUSE9SUykKIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgojIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKIyBkZXRhaWxzLgojCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAojIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAojIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKIwojIE1vZHVsZSBhdXRob3JzOgojICAgTWF0dCBDbGFya2UgPG1hdHQuY2xhcmtlQGVzcy5ldT4KIwojICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmltcG9ydCBjb3B5CmltcG9ydCBqc29uCmltcG9ydCB0aW1lCgpmcm9tIG5pY29zLmNvcmUgaW1wb3J0IERldmljZSwgTmljb3NFcnJvciwgT3ZlcnJpZGUsIFBhcmFtLCByZWxhdGl2ZV9wYXRoCgpmcm9tIG5pY29zX2Vzcy5uZXh1cy5jb252ZXJ0ZXIgaW1wb3J0IE5leHVzVGVtcGxhdGVDb252ZXJ0ZXIKCgpjbGFzcyBOZXh1c1N0cnVjdHVyZVByb3ZpZGVyKERldmljZSk6CgogICAgcGFyYW1ldGVyX292ZXJyaWRlcyA9IHsKICAgICAgICAnbG93bGV2ZWwnOiBPdmVycmlkZShkZWZhdWx0PVRydWUpLAogICAgfQoKICAgIGRlZiBnZXRfc3RydWN0dXJlKHNlbGYsIGRhdGFzZXQsIHN0YXJ0X3RpbWUpOgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ211c3QgaW1wbGVtZW50IGdldF9zdHJ1Y3R1cmUgbWV0aG9kJykKCgpjbGFzcyBOZXh1c1N0cnVjdHVyZUpzb25GaWxlKE5leHVzU3RydWN0dXJlUHJvdmlkZXIpOgogICAgcGFyYW1ldGVycyA9IHsKICAgICAgICAnbmV4dXNfY29uZmlnX3BhdGgnOiBQYXJhbSgnTmVYdXMgY29uZmlndXJhdGlvbiBmaWxlcGF0aCcsCiAgICAgICAgICAgIHR5cGU9cmVsYXRpdmVfcGF0aCwgbWFuZGF0b3J5PVRydWUsIHVzZXJwYXJhbT1UcnVlLCBzZXR0YWJsZT1UcnVlKSwKICAgIH0KCiAgICBkZWYgZ2V0X3N0cnVjdHVyZShzZWxmLCBkYXRhc2V0LCBzdGFydF90aW1lKToKICAgICAgICB3aXRoIG9wZW4oc2VsZi5uZXh1c19jb25maWdfcGF0aCwgJ3InLCBlbmNvZGluZz0ndXRmLTgnKSBhcyBmaWxlOgogICAgICAgICAgICBzdHJ1Y3R1cmUgPSBmaWxlLnJlYWQoKQo8fGZpbV9ob2xlfD4KICAgIGRlZiBfaW5zZXJ0X21ldGFkYXRhKHNlbGYsIHN0cnVjdHVyZSwgbWV0YWluZm8pOgogICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZS5yZXBsYWNlKCckVElUTEUkJywgbWV0YWluZm9bKCdFeHAnLCAndGl0bGUnKV1bMF0pCiAgICAgICAgc3RydWN0dXJlID0gc3RydWN0dXJlLnJlcGxhY2UoJyRFWFBfSUQkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhaW5mb1soJ0V4cCcsICdwcm9wb3NhbCcpXVswXSkKICAgICAgICBzdHJ1Y3R1cmUgPSBzZWxmLl9pbnNlcnRfdXNlcnMoc3RydWN0dXJlLCBtZXRhaW5mbykKICAgICAgICByZXR1cm4gc3RydWN0dXJlCgogICAgZGVmIF9pbnNlcnRfdXNlcnMoc2VsZiwgc3RydWN0dXJlLCBtZXRhaW5mbyk6CiAgICAgICAgdXNlcnMgPSBbXQogICAgICAgIGZvciB1c2VyIGluIG1ldGFpbmZvWygnRXhwJywgJ3VzZXJzJyldWzBdOgogICAgICAgICAgICB1c2VybmFtZSA9IHVzZXIuZ2V0KCduYW1lJywgJycpLnJlcGxhY2UoIiAiLCAiIikKICAgICAgICAgICAgaWYgbm90IHVzZXJuYW1lOgogICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgIHJlc3VsdCA9IHsKICAgICAgICAgICAgICAgICd0eXBlJzogJ2dyb3VwJywKICAgICAgICAgICAgICAgICduYW1lJzogZid1c2VyX3t1c2VybmFtZX0nLAogICAgICAgICAgICAgICAgJ2F0dHJpYnV0ZXMnOiB7J05YX2NsYXNzJzogJ05YdXNlcid9LAogICAgICAgICAgICAgICAgJ2NoaWxkcmVuJzogW10sCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yIG4sIHYgaW4gdXNlci5pdGVtcygpOgogICAgICAgICAgICAgICAgcmVzdWx0WydjaGlsZHJlbiddLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICdtb2R1bGUnOiAnZGF0YXNldCcsCiAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWcnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmFtZSc6IG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWVzJzogdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkdHlwZSc6ICdzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICB1c2Vycy5hcHBlbmQoanNvbi5kdW1wcyhyZXN1bHQpKQogICAgICAgIHVzZXJzX3N0ciA9ICcsJy5qb2luKHVzZXJzKSBpZiB1c2VycyBlbHNlICcnCiAgICAgICAgcmV0dXJuIHN0cnVjdHVyZS5yZXBsYWNlKCciJFVTRVJTJCInLCB1c2Vyc19zdHIpCgoKY2xhc3MgTmV4dXNTdHJ1Y3R1cmVUZW1wbGF0ZShOZXh1c1N0cnVjdHVyZVByb3ZpZGVyKToKICAgIHBhcmFtZXRlcnMgPSB7CiAgICAgICAgJ3RlbXBsYXRlc21vZHVsZSc6IFBhcmFtKAogICAgICAgICAgICAnUHl0aG9uIG1vZHVsZSBjb250YWluaW5nIE5lWHVzIG5leHVzX3RlbXBsYXRlcycsCiAgICAgICAgICAgIHR5cGU9c3RyLCBtYW5kYXRvcnk9VHJ1ZSksCiAgICAgICAgJ3RlbXBsYXRlbmFtZSc6IFBhcmFtKCdUZW1wbGF0ZSBuYW1lIGZyb20gdGhlIG5leHVzX3RlbXBsYXRlcyBtb2R1bGUnLAogICAgICAgICAgICB0eXBlPXN0ciwgbWFuZGF0b3J5PVRydWUpLAogICAgfQoKICAgIF90ZW1wbGF0ZXMgPSBbXQogICAgX3RlbXBsYXRlID0gTm9uZQoKICAgIGRlZiBkb0luaXQoc2VsZiwgbW9kZSk6CiAgICAgICAgc2VsZi5sb2cuaW5mbyhzZWxmLnRlbXBsYXRlc21vZHVsZSkKICAgICAgICBzZWxmLl90ZW1wbGF0ZXMgPSBfX2ltcG9ydF9fKAogICAgICAgICAgICBzZWxmLnRlbXBsYXRlc21vZHVsZSwgZnJvbWxpc3Q9W3NlbGYudGVtcGxhdGVuYW1lXQogICAgICAgICkKICAgICAgICBzZWxmLmxvZy5pbmZvKCdGaW5pc2hlZCBpbXBvcnRpbmcgbmV4dXNfdGVtcGxhdGVzJykKICAgICAgICBzZWxmLnNldF90ZW1wbGF0ZShzZWxmLnRlbXBsYXRlbmFtZSkKCiAgICBkZWYgc2V0X3RlbXBsYXRlKHNlbGYsIHZhbCk6CiAgICAgICAgIiIiCiAgICAgICAgU2V0cyB0aGUgdGVtcGxhdGUgZnJvbSB0aGUgZ2l2ZW4gdGVtcGxhdGUgbW9kdWxlcy4KICAgICAgICBQYXJzZXMgdGhlIHRlbXBsYXRlIHVzaW5nICpwYXJzZXJjbGFzcyogbWV0aG9kIHBhcnNlLiBUaGUgcGFyc2VkCiAgICAgICAgcm9vdCwgZXZlbnQga2Fma2Egc3RyZWFtcyBhbmQgZGV2aWNlIHBsYWNlaG9sZGVycyBhcmUgdGhlbiBzZXQuCiAgICAgICAgOnBhcmFtIHZhbDogdGVtcGxhdGUgbmFtZQogICAgICAgICIiIgogICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYuX3RlbXBsYXRlcywgdmFsKToKICAgICAgICAgICAgcmFpc2UgTmljb3NFcnJvcigKICAgICAgICAgICAgICAgICdUZW1wbGF0ZSAlcyBub3QgZm91bmQgaW4gbW9kdWxlICVzJwogICAgICAgICAgICAgICAgJSAodmFsLCBzZWxmLnRlbXBsYXRlc21vZHVsZSkKICAgICAgICAgICAgKQoKICAgICAgICBzZWxmLl90ZW1wbGF0ZSA9IGdldGF0dHIoc2VsZi5fdGVtcGxhdGVzLCB2YWwpCgogICAgICAgIGlmIHNlbGYudGVtcGxhdGVuYW1lICE9IHZhbDoKICAgICAgICAgICAgc2VsZi5fc2V0Uk9QYXJhbSgndGVtcGxhdGVuYW1lJywgdmFsKQoKICAgIGRlZiBfYWRkX3N0YXJ0X3RpbWUoc2VsZiwgZGF0YXNldCk6CiAgICAgICAgaWYgKCdkYXRhc2V0JywgJ3N0YXJ0dGltZScpIG5vdCBpbiBkYXRhc2V0Lm1ldGFpbmZvOgogICAgICAgICAgICBzdGFydF90aW1lID0gdGltZS5zdHJmdGltZSgnJVktJW0tJWQgJUg6JU06JVMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLmxvY2FsdGltZShkYXRhc2V0LnN0YXJ0ZWQpKQogICAgICAgICAgICBkYXRhc2V0Lm1ldGFpbmZvWygnZGF0YXNldCcsICdzdGFydHRpbWUnKV0gPSAoc3RhcnRfdGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywgJ2dlbmVyYWwnKQoKICAgIGRlZiBnZXRfc3RydWN0dXJlKHNlbGYsIGRhdGFzZXQsIHN0YXJ0X3RpbWUpOgogICAgICAgIHRlbXBsYXRlID0gY29weS5kZWVwY29weShzZWxmLl90ZW1wbGF0ZSkKICAgICAgICBzZWxmLl9hZGRfc3RhcnRfdGltZShkYXRhc2V0KQogICAgICAgIGNvbnZlcnRlciA9IE5leHVzVGVtcGxhdGVDb252ZXJ0ZXIoKQogICAgICAgIHN0cnVjdHVyZSA9IGNvbnZlcnRlci5jb252ZXJ0KHRlbXBsYXRlLCBkYXRhc2V0Lm1ldGFpbmZvKQogICAgICAgIHJldHVybiBqc29uLmR1bXBzKHN0cnVjdHVyZSkKPHxmaW1fc3VmZml4fD4KICAgICAgICByZXR1cm4gc2VsZi5faW5zZXJ0X21ldGFkYXRhKHN0cnVjdHVyZSwgZGF0YXNldC5tZXRhaW5mbykKCjx8ZmltX2VuZHw+"]
["99f4bc41e8a11d96650a6c1adbd480fe8bc88088-1","99f4bc41e8a11d96650a6c1adbd480fe8bc88088","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiVGhlIGNvbXByZXNzZWQgc3RyZWFtIGZpbGUtbGlrZSBvYmplY3QgaW1wbGVtZW50YXRpb24uIiIiCgppbXBvcnQgb3MKCmZyb20gZGZ2ZnMuY29tcHJlc3Npb24gaW1wb3J0IG1hbmFnZXIgYXMgY29tcHJlc3Npb25fbWFuYWdlcgpmcm9tIGRmdmZzLmZpbGVfaW8gaW1wb3J0IGZpbGVfaW8KZnJvbSBkZnZmcy5saWIgaW1wb3J0IGVycm9ycwpmcm9tIGRmdmZzLnJlc29sdmVyIGltcG9ydCByZXNvbHZlcgoKCmNsYXNzIENvbXByZXNzZWRTdHJlYW0oZmlsZV9pby5GaWxlSU8pOgogICIiIkNsYXNzIHRoYXQgaW1wbGVtZW50cyBhIGZpbGUtbGlrZSBvYmplY3Qgb2YgYSBjb21wcmVzc2VkIHN0cmVhbS4iIiIKCiAgIyBUaGUgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGJ1ZmZlci4KICBfQ09NUFJFU1NFRF9EQVRBX0JVRkZFUl9TSVpFID0gOCAqIDEwMjQgKiAxMDI0CgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwgcmVzb2x2ZXJfY29udGV4dCwgY29tcHJlc3Npb25fbWV0aG9kPU5vbmUsIGZpbGVfb2JqZWN0PU5vbmUpOgogICAgIiIiSW5pdGlhbGl6ZXMgdGhlIGZpbGUtbGlrZSBvYmplY3QuCgogICAgICAgSWYgdGhlIGZpbGUtbGlrZSBvYmplY3QgaXMgY2hhaW5lZCBkbyBub3Qgc2VwYXJhdGVseSB1c2UgdGhlIHBhcmVudAogICAgICAgZmlsZS1saWtlIG9iamVjdC4KCiAgICBBcmdzOgogICAgICByZXNvbHZlcl9jb250ZXh0OiB0aGUgcmVzb2x2ZXIgY29udGV4dCAoaW5zdGFuY2Ugb2YgcmVzb2x2ZXIuQ29udGV4dCkuCiAgICAgIGNvbXByZXNzaW9uX21ldGhvZDogb3B0aW9uYWwgbWV0aG9kIHVzZWQgdG8gdGhlIGNvbXByZXNzIHRoZSBkYXRhLgogICAgICBmaWxlX29iamVjdDogb3B0aW9uYWwgcGFyZW50IGZpbGUtbGlrZSBvYmplY3QuIFRoZSBkZWZhdWx0IGlzIE5vbmUuCgogICAgUmFpc2VzOgogICAgICBWYWx1ZUVycm9yOiBpZiBmaWxlX29iamVjdCBwcm92aWRlZCBidXQgY29tcHJlc3Npb25fbWV0aG9kIGlzIG5vdC4KICAgICIiIgogICAgaWYgZmlsZV9vYmplY3QgaXMgbm90IE5vbmUgYW5kIGNvbXByZXNzaW9uX21ldGhvZCBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgdSdGaWxlLWxpa2Ugb2JqZWN0IHByb3ZpZGVkIHdpdGhvdXQgY29ycmVzcG9uZGluZyBjb21wcmVzc2lvbiAnCiAgICAgICAgICB1J21ldGhvZC4nKQoKICAgIHN1cGVyKENvbXByZXNzZWRTdHJlYW0sIHNlbGYpLl9faW5pdF9fKHJlc29sdmVyX2NvbnRleHQpCiAgICBzZWxmLl9jb21wcmVzc2lvbl9tZXRob2QgPSBjb21wcmVzc2lvbl9tZXRob2QKICAgIHNlbGYuX2ZpbGVfb2JqZWN0ID0gZmlsZV9vYmplY3QKICAgIHNlbGYuX2NvbXByZXNzZWRfZGF0YSA9IGInJwogICAgc2VsZi5fY3VycmVudF9vZmZzZXQgPSAwCiAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBOb25lCiAgICBzZWxmLl9yZWFsaWduX29mZnNldCA9IFRydWUKICAgIHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhID0gYicnCiAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQgPSAwCiAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9zaXplID0gMAogICAgc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplID0gTm9uZQoKICAgIGlmIGZpbGVfb2JqZWN0OgogICAgICBzZWxmLl9maWxlX29iamVjdF9zZXRfaW5faW5pdCA9IFRydWUKICAgIGVsc2U6CiAgICAgIHNlbGYuX2ZpbGVfb2JqZWN0X3NldF9pbl9pbml0ID0gRmFsc2UKCiAgZGVmIF9DbG9zZShzZWxmKToKICAgICIiIkNsb3NlcyB0aGUgZmlsZS1saWtlIG9iamVjdC4KCiAgICAgICBJZiB0aGUgZmlsZS1saWtlIG9iamVjdCB3YXMgcGFzc2VkIGluIHRoZSBpbml0IGZ1bmN0aW9uCiAgICAgICB0aGUgY29tcHJlc3NlZCBzdHJlYW0gZmlsZS1saWtlIG9iamVjdCBkb2VzIG5vdCBjb250cm9sCiAgICAgICB0aGUgZmlsZS1saWtlIG9iamVjdCBhbmQgc2hvdWxkIG5vdCBhY3R1YWxseSBjbG9zZSBpdC4KCiAgICBSYWlzZXM6CiAgICAgIElPRXJyb3I6IGlmIHRoZSBjbG9zZSBmYWlsZWQuCiAgICAiIiIKICAgIGlmIG5vdCBzZWxmLl9maWxlX29iamVjdF9zZXRfaW5faW5pdDoKICAgICAgc2VsZi5fZmlsZV9vYmplY3QuY2xvc2UoKQogICAgICBzZWxmLl9maWxlX29iamVjdCA9IE5vbmUKCiAgICBzZWxmLl9jb21wcmVzc2VkX2RhdGEgPSBiJycKICAgIHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhID0gYicnCiAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBOb25lCgogIGRlZiBfR2V0RGVjb21wcmVzc29yKHNlbGYpOgogICAgIiIiUmV0cmlldmVzIHRoZSBkZWNvbXByZXNzb3IuIiIiCiAgICByZXR1cm4gY29tcHJlc3Npb25fbWFuYWdlci5Db21wcmVzc2lvbk1hbmFnZXIuR2V0RGVjb21wcmVzc29yKAogICAgICAgIHNlbGYuX2NvbXByZXNzaW9uX21ldGhvZCkKCiAgZGVmIF9HZXRVbmNvbXByZXNzZWRTdHJlYW1TaXplKHNlbGYpOgogICAgIiIiUmV0cmlldmVzIHRoZSB1bmNvbXByZXNzZWQgc3RyZWFtIHNpemUuIiIiCiAgICBzZWxmLl9maWxlX29iamVjdC5zZWVrKDAsIG9zLlNFRUtfU0VUKQoKICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IHNlbGYuX0dldERlY29tcHJlc3NvcigpCiAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YSA9IGInJwoKICAgIGNvbXByZXNzZWRfZGF0YV9vZmZzZXQgPSAwCiAgICBjb21wcmVzc2VkX2RhdGFfc2l6ZSA9IHNlbGYuX2ZpbGVfb2JqZWN0LmdldF9zaXplKCkKICAgIHVuY29tcHJlc3NlZF9zdHJlYW1fc2l6ZSA9IDAKCiAgICB3aGlsZSBjb21wcmVzc2VkX2RhdGFfb2Zmc2V0IDwgY29tcHJlc3NlZF9kYXRhX3NpemU6CiAgICAgIHJlYWRfY291bnQgPSBzZWxmLl9SZWFkQ29tcHJlc3NlZERhdGEoc2VsZi5fQ09NUFJFU1NFRF9EQVRBX0JVRkZFUl9TSVpFKQogICAgICBpZiByZWFkX2NvdW50ID09IDA6CiAgICAgICAgYnJlYWsKCiAgICAgIGNvbXByZXNzZWRfZGF0YV9vZmZzZXQgKz0gcmVhZF9jb3VudAogICAgICB1bmNvbXByZXNzZWRfc3RyZWFtX3NpemUgKz0gc2VsZi5fdW5jb21wcmVzc2VkX2RhdGFfc2l6ZQoKICAgIHJldHVybiB1bmNvbXByZXNzZWRfc3RyZWFtX3NpemUKCiAgZGVmIF9PcGVuKHNlbGYsIHBhdGhfc3BlYz1Ob25lLCBtb2RlPSdyYicpOgogICAgIiIiT3BlbnMgdGhlIGZpbGUtbGlrZSBvYmplY3QuCgogICAgQXJnczoKICAgICAgcGF0aF9zcGVjOiBvcHRpb25hbCBwYXRoIHNwZWNpZmljYXRpb24gKGluc3RhbmNlIG9mIHBhdGguUGF0aFNwZWMpLgogICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIE5vbmUuCiAgICAgIG1vZGU6IG9wdGlvbmFsIGZpbGUgYWNjZXNzIG1vZGUuIFRoZSBkZWZhdWx0IGlzICdyYicgcmVhZC1vbmx5IGJpbmFyeS4KCiAgICBSYWlzZXM6CiAgICAgIEFjY2Vzc0Vycm9yOiBpZiB0aGUgYWNjZXNzIHRvIG9wZW4gdGhlIGZpbGUgd2FzIGRlbmllZC4KICAgICAgSU9FcnJvcjogaWYgdGhlIGZpbGUtbGlrZSBvYmplY3QgY291bGQgbm90IGJlIG9wZW5lZC4KICAgICAgUGF0aFNwZWNFcnJvcjogaWYgdGhlIHBhdGggc3BlY2lmaWNhdGlvbiBpcyBpbmNvcnJlY3QuCiAgICAgIFZhbHVlRXJyb3I6IGlmIHRoZSBwYXRoIHNwZWNpZmljYXRpb24gaXMgaW52YWxpZC4KICAgICIiIgogICAgaWYgbm90IHNlbGYuX2ZpbGVfb2JqZWN0X3NldF9pbl9pbml0IGFuZCBub3QgcGF0aF9zcGVjOgogICAgICByYWlzZSBWYWx1ZUVycm9yKHUnTWlzc2luZyBwYXRoIHNwZWNmaWNhdGlvbi4nKQoKICAgIGlmIG5vdCBzZWxmLl9maWxlX29iamVjdF9zZXRfaW5faW5pdDoKICAgICAgaWYgbm90IHBhdGhfc3BlYy5IYXNQYXJlbnQoKToKICAgICAgICByYWlzZSBlcnJvcnMuUGF0aFNwZWNFcnJvcigKICAgICAgICAgICAgdSdVbnN1cHBvcnRlZCBwYXRoIHNwZWNpZmljYXRpb24gd2l0aG91dCBwYXJlbnQuJykKCiAgICAgIHNlbGYuX2NvbXByZXNzaW9uX21ldGhvZCA9IGdldGF0dHIocGF0aF9zcGVjLCB1J2NvbXByZXNzaW9uX21ldGhvZCcsIE5vbmUpCgogICAgICBpZiBzZWxmLl9jb21wcmVzc2lvbl9tZXRob2QgaXMgTm9uZToKICAgICAgICByYWlzZSBlcnJvcnMuUGF0aFNwZWNFcnJvcigKICAgICAgICAgICAgdSdQYXRoIHNwZWNpZmljYXRpb24gbWlzc2luZyBjb21wcmVzc2lvbiBtZXRob2QuJykKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgc2VsZi5fZmlsZV9vYmplY3QgPSByZXNvbHZlci5SZXNvbHZlci5PcGVuRmlsZU9iamVjdCgKICAgICAgICAgIHBhdGhfc3BlYy5wYXJlbnQsIHJlc29sdmVyX2NvbnRleHQ9c2VsZi5fcmVzb2x2ZXJfY29udGV4dCkKCjx8ZmltX2VuZHw+"]
["99f4bc41e8a11d96650a6c1adbd480fe8bc88088-2","99f4bc41e8a11d96650a6c1adbd480fe8bc88088","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiVGhlIGNvbXByZXNzZWQgc3RyZWFtIGZpbGUtbGlrZSBvYmplY3QgaW1wbGVtZW50YXRpb24uIiIiCgppbXBvcnQgb3MKCmZyb20gZGZ2ZnMuY29tcHJlc3Npb24gaW1wb3J0IG1hbmFnZXIgYXMgY29tcHJlc3Npb25fbWFuYWdlcgpmcm9tIGRmdmZzLmZpbGVfaW8gaW1wb3J0IGZpbGVfaW8KZnJvbSBkZnZmcy5saWIgaW1wb3J0IGVycm9ycwpmcm9tIGRmdmZzLnJlc29sdmVyIGltcG9ydCByZXNvbHZlcgoKCmNsYXNzIENvbXByZXNzZWRTdHJlYW0oZmlsZV9pby5GaWxlSU8pOgogICIiIkNsYXNzIHRoYXQgaW1wbGVtZW50cyBhIGZpbGUtbGlrZSBvYmplY3Qgb2YgYSBjb21wcmVzc2VkIHN0cmVhbS4iIiIKCiAgIyBUaGUgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGJ1ZmZlci4KICBfQ09NUFJFU1NFRF9EQVRBX0JVRkZFUl9TSVpFID0gOCAqIDEwMjQgKiAxMDI0CgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwgcmVzb2x2ZXJfY29udGV4dCwgY29tcHJlc3Npb25fbWV0aG9kPU5vbmUsIGZpbGVfb2JqZWN0PU5vbmUpOgogICAgIiIiSW5pdGlhbGl6ZXMgdGhlIGZpbGUtbGlrZSBvYmplY3QuCgogICAgICAgSWYgdGhlIGZpbGUtbGlrZSBvYmplY3QgaXMgY2hhaW5lZCBkbyBub3Qgc2VwYXJhdGVseSB1c2UgdGhlIHBhcmVudAogICAgICAgZmlsZS1saWtlIG9iamVjdC4KCiAgICBBcmdzOgogICAgICByZXNvbHZlcl9jb250ZXh0OiB0aGUgcmVzb2x2ZXIgY29udGV4dCAoaW5zdGFuY2Ugb2YgcmVzb2x2ZXIuQ29udGV4dCkuCiAgICAgIGNvbXByZXNzaW9uX21ldGhvZDogb3B0aW9uYWwgbWV0aG9kIHVzZWQgdG8gdGhlIGNvbXByZXNzIHRoZSBkYXRhLgogICAgICBmaWxlX29iamVjdDogb3B0aW9uYWwgcGFyZW50IGZpbGUtbGlrZSBvYmplY3QuIFRoZSBkZWZhdWx0IGlzIE5vbmUuCgogICAgUmFpc2VzOgogICAgICBWYWx1ZUVycm9yOiBpZiBmaWxlX29iamVjdCBwcm92aWRlZCBidXQgY29tcHJlc3Npb25fbWV0aG9kIGlzIG5vdC4KICAgICIiIgogICAgaWYgZmlsZV9vYmplY3QgaXMgbm90IE5vbmUgYW5kIGNvbXByZXNzaW9uX21ldGhvZCBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgdSdGaWxlLWxpa2Ugb2JqZWN0IHByb3ZpZGVkIHdpdGhvdXQgY29ycmVzcG9uZGluZyBjb21wcmVzc2lvbiAnCiAgICAgICAgICB1J21ldGhvZC4nKQoKICAgIHN1cGVyKENvbXByZXNzZWRTdHJlYW0sIHNlbGYpLl9faW5pdF9fKHJlc29sdmVyX2NvbnRleHQpCiAgICBzZWxmLl9jb21wcmVzc2lvbl9tZXRob2QgPSBjb21wcmVzc2lvbl9tZXRob2QKICAgIHNlbGYuX2ZpbGVfb2JqZWN0ID0gZmlsZV9vYmplY3QKICAgIHNlbGYuX2NvbXByZXNzZWRfZGF0YSA9IGInJwogICAgc2VsZi5fY3VycmVudF9vZmZzZXQgPSAwCiAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBOb25lCiAgICBzZWxmLl9yZWFsaWduX29mZnNldCA9IFRydWUKICAgIHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhID0gYicnCiAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQgPSAwCiAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9zaXplID0gMAogICAgc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplID0gTm9uZQoKICAgIGlmIGZpbGVfb2JqZWN0OgogICAgICBzZWxmLl9maWxlX29iamVjdF9zZXRfaW5faW5pdCA9IFRydWUKICAgIGVsc2U6CiAgICAgIHNlbGYuX2ZpbGVfb2JqZWN0X3NldF9pbl9pbml0ID0gRmFsc2UKCiAgZGVmIF9DbG9zZShzZWxmKToKICAgICIiIkNsb3NlcyB0aGUgZmlsZS1saWtlIG9iamVjdC4KCiAgICAgICBJZiB0aGUgZmlsZS1saWtlIG9iamVjdCB3YXMgcGFzc2VkIGluIHRoZSBpbml0IGZ1bmN0aW9uCiAgICAgICB0aGUgY29tcHJlc3NlZCBzdHJlYW0gZmlsZS1saWtlIG9iamVjdCBkb2VzIG5vdCBjb250cm9sCiAgICAgICB0aGUgZmlsZS1saWtlIG9iamVjdCBhbmQgc2hvdWxkIG5vdCBhY3R1YWxseSBjbG9zZSBpdC4KCiAgICBSYWlzZXM6CiAgICAgIElPRXJyb3I6IGlmIHRoZSBjbG9zZSBmYWlsZWQuCiAgICAiIiIKICAgIGlmIG5vdCBzZWxmLl9maWxlX29iamVjdF9zZXRfaW5faW5pdDoKICAgICAgc2VsZi5fZmlsZV9vYmplY3QuY2xvc2UoKQogICAgICBzZWxmLl9maWxlX29iamVjdCA9IE5vbmUKCiAgICBzZWxmLl9jb21wcmVzc2VkX2RhdGEgPSBiJycKICAgIHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhID0gYicnCiAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBOb25lCgogIGRlZiBfR2V0RGVjb21wcmVzc29yKHNlbGYpOgogICAgIiIiUmV0cmlldmVzIHRoZSBkZWNvbXByZXNzb3IuIiIiCiAgICByZXR1cm4gY29tcHJlc3Npb25fbWFuYWdlci5Db21wcmVzc2lvbk1hbmFnZXIuR2V0RGVjb21wcmVzc29yKAogICAgICAgIHNlbGYuX2NvbXByZXNzaW9uX21ldGhvZCkKCiAgZGVmIF9HZXRVbmNvbXByZXNzZWRTdHJlYW1TaXplKHNlbGYpOgogICAgIiIiUmV0cmlldmVzIHRoZSB1bmNvbXByZXNzZWQgc3RyZWFtIHNpemUuIiIiCiAgICBzZWxmLl9maWxlX29iamVjdC5zZWVrKDAsIG9zLlNFRUtfU0VUKQoKICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IHNlbGYuX0dldERlY29tcHJlc3NvcigpCiAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YSA9IGInJwoKICAgIGNvbXByZXNzZWRfZGF0YV9vZmZzZXQgPSAwCiAgICBjb21wcmVzc2VkX2RhdGFfc2l6ZSA9IHNlbGYuX2ZpbGVfb2JqZWN0LmdldF9zaXplKCkKICAgIHVuY29tcHJlc3NlZF9zdHJlYW1fc2l6ZSA9IDAKCiAgICB3aGlsZSBjb21wcmVzc2VkX2RhdGFfb2Zmc2V0IDwgY29tcHJlc3NlZF9kYXRhX3NpemU6CiAgICAgIHJlYWRfY291bnQgPSBzZWxmLl9SZWFkQ29tcHJlc3NlZERhdGEoc2VsZi5fQ09NUFJFU1NFRF9EQVRBX0JVRkZFUl9TSVpFKQogICAgICBpZiByZWFkX2NvdW50ID09IDA6CiAgICAgICAgYnJlYWsKCiAgICAgIGNvbXByZXNzZWRfZGF0YV9vZmZzZXQgKz0gcmVhZF9jb3VudAogICAgICB1bmNvbXByZXNzZWRfc3RyZWFtX3NpemUgKz0gc2VsZi5fdW5jb21wcmVzc2VkX2RhdGFfc2l6ZQoKICAgIHJldHVybiB1bmNvbXByZXNzZWRfc3RyZWFtX3NpemUKCiAgZGVmIF9PcGVuKHNlbGYsIHBhdGhfc3BlYz1Ob25lLCBtb2RlPSdyYicpOgogICAgIiIiT3BlbnMgdGhlIGZpbGUtbGlrZSBvYmplY3QuCgogICAgQXJnczoKICAgICAgcGF0aF9zcGVjOiBvcHRpb25hbCBwYXRoIHNwZWNpZmljYXRpb24gKGluc3RhbmNlIG9mIHBhdGguUGF0aFNwZWMpLgogICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIE5vbmUuCiAgICAgIG1vZGU6IG9wdGlvbmFsIGZpbGUgYWNjZXNzIG1vZGUuIFRoZSBkZWZhdWx0IGlzICdyYicgcmVhZC1vbmx5IGJpbmFyeS4KCiAgICBSYWlzZXM6CiAgICAgIEFjY2Vzc0Vycm9yOiBpZiB0aGUgYWNjZXNzIHRvIG9wZW4gdGhlIGZpbGUgd2FzIGRlbmllZC4KICAgICAgSU9FcnJvcjogaWYgdGhlIGZpbGUtbGlrZSBvYmplY3QgY291bGQgbm90IGJlIG9wZW5lZC4KICAgICAgUGF0aFNwZWNFcnJvcjogaWYgdGhlIHBhdGggc3BlY2lmaWNhdGlvbiBpcyBpbmNvcnJlY3QuCiAgICAgIFZhbHVlRXJyb3I6IGlmIHRoZSBwYXRoIHNwZWNpZmljYXRpb24gaXMgaW52YWxpZC4KICAgICIiIgogICAgaWYgbm90IHNlbGYuX2ZpbGVfb2JqZWN0X3NldF9pbl9pbml0IGFuZCBub3QgcGF0aF9zcGVjOgogICAgICByYWlzZSBWYWx1ZUVycm9yKHUnTWlzc2luZyBwYXRoIHNwZWNmaWNhdGlvbi4nKQoKICAgIGlmIG5vdCBzZWxmLl9maWxlX29iamVjdF9zZXRfaW5faW5pdDoKICAgICAgaWYgbm90IHBhdGhfc3BlYy5IYXNQYXJlbnQoKToKICAgICAgICByYWlzZSBlcnJvcnMuUGF0aFNwZWNFcnJvcigKICAgICAgICAgICAgdSdVbnN1cHBvcnRlZCBwYXRoIHNwZWNpZmljYXRpb24gd2l0aG91dCBwYXJlbnQuJykKCiAgICAgIHNlbGYuX2NvbXByZXNzaW9uX21ldGhvZCA9IGdldGF0dHIocGF0aF9zcGVjLCB1J2NvbXByZXNzaW9uX21ldGhvZCcsIE5vbmUpCgogICAgICBpZiBzZWxmLl9jb21wcmVzc2lvbl9tZXRob2QgaXMgTm9uZToKICAgICAgICByYWlzZSBlcnJvcnMuUGF0aFNwZWNFcnJvcigKICAgICAgICAgICAgdSdQYXRoIHNwZWNpZmljYXRpb24gbWlzc2luZyBjb21wcmVzc2lvbiBtZXRob2QuJykKCiAgICAgIHNlbGYuX2ZpbGVfb2JqZWN0ID0gcmVzb2x2ZXIuUmVzb2x2ZXIuT3BlbkZpbGVPYmplY3QoCiAgICAgICAgICBwYXRoX3NwZWMucGFyZW50LCByZXNvbHZlcl9jb250ZXh0PXNlbGYuX3Jlc29sdmVyX2NvbnRleHQpCgogIGRlZiBfQWxpZ25VbmNvbXByZXNzZWREYXRhT2Zmc2V0KHNlbGYsIHVuY29tcHJlc3NlZF9kYXRhX29mZnNldCk6CiAgICAiIiJBbGlnbnMgdGhlIGNvbXByZXNzZWQgZmlsZSB3aXRoIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBvZmZzZXQuCgogICAgQXJnczoKICAgICAgdW5jb21wcmVzc2VkX2RhdGFfb2Zmc2V0OiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgb2Zmc2V0LgogICAgIiIiCiAgICBzZWxmLl9maWxlX29iamVjdC5zZWVrKDAsIG9zLlNFRUtfU0VUKQoKICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IHNlbGYuX0dldERlY29tcHJlc3NvcigpCiAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YSA9IGInJwoKICAgIGNvbXByZXNzZWRfZGF0YV9vZmZzZXQgPSAwCiAgICBjb21wcmVzc2VkX2RhdGFfc2l6ZSA9IHNlbGYuX2ZpbGVfb2JqZWN0LmdldF9zaXplKCkKCiAgICB3aGlsZSBjb21wcmVzc2VkX2RhdGFfb2Zmc2V0IDwgY29tcHJlc3NlZF9kYXRhX3NpemU6CiAgICAgIHJlYWRfY291bnQgPSBzZWxmLl9SZWFkQ29tcHJlc3NlZERhdGEoc2VsZi5fQ09NUFJFU1NFRF9EQVRBX0JVRkZFUl9TSVpFKQogICAgICBpZiByZWFkX2NvdW50ID09IDA6CiAgICAgICAgYnJlYWsKCiAgICAgIGNvbXByZXNzZWRfZGF0YV9vZmZzZXQgKz0gcmVhZF9jb3VudAoKICAgICAgaWYgdW5jb21wcmVzc2VkX2RhdGFfb2Zmc2V0IDwgc2VsZi5fdW5jb21wcmVzc2VkX2RhdGFfc2l6ZToKICAgICAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQgPSB1bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQKICAgICAgICBicmVhawoKICAgICAgdW5jb21wcmVzc2VkX2RhdGFfb2Zmc2V0IC09IHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhX3NpemUKCiAgZGVmIF9SZWFkQ29tcHJlc3NlZERhdGEoc2VsZiwgcmVhZF9zaXplKToKICAgICIiIlJlYWRzIGNvbXByZXNzZWQgZGF0YSBmcm9tIHRoZSBmaWxlLWxpa2Ugb2JqZWN0LgoKICAgIEFyZ3M6CiAgICAgIHJlYWRfc2l6ZTogdGhlIG51bWJlciBvZiBieXRlcyBvZiBjb21wcmVzc2VkIGRhdGEgdG8gcmVhZC4KCiAgICBSZXR1cm5zOgogICAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGNvbXByZXNzZWQgZGF0YSByZWFkLgogICAgIiIiCiAgICBjb21wcmVzc2VkX2RhdGEgPSBzZWxmLl9maWxlX29iamVjdC5yZWFkKHJlYWRfc2l6ZSkKCiAgICByZWFkX2NvdW50ID0gbGVuKGNvbXByZXNzZWRfZGF0YSkKCiAgICBzZWxmLl9jb21wcmVzc2VkX2RhdGEgPSBiJycuam9pbihbc2VsZi5fY29tcHJlc3NlZF9kYXRhLCBjb21wcmVzc2VkX2RhdGFdKQoKICAgIHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhLCBzZWxmLl9jb21wcmVzc2VkX2RhdGEgPSAoCiAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yLkRlY29tcHJlc3Moc2VsZi5fY29tcHJlc3NlZF9kYXRhKSkKCiAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9zaXplID0gbGVuKHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhKQoKICAgIHJldHVybiByZWFkX2NvdW50CgogICMgTm90ZTogdGhhdCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBkbyBub3QgZm9sbG93IHRoZSBzdHlsZSBndWlkZQogICMgYmVjYXVzZSB0aGV5IGFyZSBwYXJ0IG9mIHRoZSBmaWxlLWxpa2Ugb2JqZWN0IGludGVyZmFjZS4KCiAgZGVmIHJlYWQoc2VsZiwgc2l6ZT1Ob25lKToKICAgICIiIlJlYWRzIGEgYnl0ZSBzdHJpbmcgZnJvbSB0aGUgZmlsZS1saWtlIG9iamVjdCBhdCB0aGUgY3VycmVudCBvZmZzZXQuCgogICAgICAgVGhlIGZ1bmN0aW9uIHdpbGwgcmVhZCBhIGJ5dGUgc3RyaW5nIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZSBvcgogICAgICAgYWxsIG9mIHRoZSByZW1haW5pbmcgZGF0YSBpZiBubyBzaXplIHdhcyBzcGVjaWZpZWQuCgogICAgQXJnczoKICAgICAgc2l6ZTogT3B0aW9uYWwgaW50ZWdlciB2YWx1ZSBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4KICAgICAgICAgICAgRGVmYXVsdCBpcyBhbGwgcmVtYWluaW5nIGRhdGEgKE5vbmUpLgoKICAgIFJldHVybnM6CiAgICAgIEEgYnl0ZSBzdHJpbmcgY29udGFpbmluZyB0aGUgZGF0YSByZWFkLgoKICAgIFJhaXNlczoKICAgICAgSU9FcnJvcjogaWYgdGhlIHJlYWQgZmFpbGVkLgogICAgIiIiCiAgICBpZiBub3Qgc2VsZi5faXNfb3BlbjoKICAgICAgcmFpc2UgSU9FcnJvcih1J05vdCBvcGVuZWQuJykKCiAgICBpZiBzZWxmLl9jdXJyZW50X29mZnNldCA8IDA6CiAgICAgIHJhaXNlIElPRXJyb3IoCiAgICAgICAgICB1J0ludmFsaWQgY3VycmVudCBvZmZzZXQ6IHswOmR9IHZhbHVlIGxlc3MgdGhhbiB6ZXJvLicuZm9ybWF0KAogICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfb2Zmc2V0KSkKCiAgICBpZiBzZWxmLl91bmNvbXByZXNzZWRfc3RyZWFtX3NpemUgaXMgTm9uZToKICAgICAgc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplID0gc2VsZi5fR2V0VW5jb21wcmVzc2VkU3RyZWFtU2l6ZSgpCgogICAgaWYgc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplIDwgMDoKICAgICAgcmFpc2UgSU9FcnJvcih1J0ludmFsaWQgdW5jb21wcmVzc2VkIHN0cmVhbSBzaXplLicpCgogICAgaWYgc2VsZi5fY3VycmVudF9vZmZzZXQgPj0gc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplOgogICAgICByZXR1cm4gYicnCgogICAgaWYgc2VsZi5fcmVhbGlnbl9vZmZzZXQ6CiAgICAgIHNlbGYuX0FsaWduVW5jb21wcmVzc2VkRGF0YU9mZnNldChzZWxmLl9jdXJyZW50X29mZnNldCkKICAgICAgc2VsZi5fcmVhbGlnbl9vZmZzZXQgPSBGYWxzZQoKICAgIGlmIHNpemUgaXMgTm9uZToKICAgICAgc2l6ZSA9IHNlbGYuX3VuY29tcHJlc3NlZF9zdHJlYW1fc2l6ZQogICAgaWYgc2VsZi5fY3VycmVudF9vZmZzZXQgKyBzaXplID4gc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplOgogICAgICBzaXplID0gc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplIC0gc2VsZi5fY3VycmVudF9vZmZzZXQKCiAgICB1bmNvbXByZXNzZWRfZGF0YSA9IGInJwoKICAgIGlmIHNpemUgPT0gMDoKICAgICAgcmV0dXJuIHVuY29tcHJlc3NlZF9kYXRhCgogICAgd2hpbGUgc2l6ZSA+IHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhX3NpemU6CiAgICAgIHVuY29tcHJlc3NlZF9kYXRhID0gYicnLmpvaW4oWwogICAgICAgICAgdW5jb21wcmVzc2VkX2RhdGEsCiAgICAgICAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YVtzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQ6XV0pCgogICAgICByZW1haW5pbmdfdW5jb21wcmVzc2VkX2RhdGFfc2l6ZSA9ICgKICAgICAgICAgIHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhX3NpemUgLSBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQpCgogICAgICBzZWxmLl9jdXJyZW50X29mZnNldCArPSByZW1haW5pbmdfdW5jb21wcmVzc2VkX2RhdGFfc2l6ZQogICAgICBzaXplIC09IHJlbWFpbmluZ191bmNvbXByZXNzZWRfZGF0YV9zaXplCgogICAgICBpZiBzZWxmLl9jdXJyZW50X29mZnNldCA+PSBzZWxmLl91bmNvbXByZXNzZWRfc3RyZWFtX3NpemU6CiAgICAgICAgYnJlYWsKCiAgICAgIHJlYWRfY291bnQgPSBzZWxmLl9SZWFkQ29tcHJlc3NlZERhdGEoc2VsZi5fQ09NUFJFU1NFRF9EQVRBX0JVRkZFUl9TSVpFKQogICAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQgPSAwCiAgICAgIGlmIHJlYWRfY291bnQgPT0gMDoKICAgICAgICBicmVhawoKICAgIGlmIHNpemUgPiAwOgogICAgICBzbGljZV9zdGFydF9vZmZzZXQgPSBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQKICAgICAgc2xpY2VfZW5kX29mZnNldCA9IHNsaWNlX3N0YXJ0X29mZnNldCArIHNpemUKCiAgICAgIHVuY29tcHJlc3NlZF9kYXRhID0gYicnLmpvaW4oWwogICAgICAgICAgdW5jb21wcmVzc2VkX2RhdGEsCiAgICAgICAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YVtzbGljZV9zdGFydF9vZmZzZXQ6c2xpY2VfZW5kX29mZnNldF1dKQoKICAgICAgc2VsZi5fdW5jb21wcmVzc2VkX2RhdGFfb2Zmc2V0ICs9IHNpemUKICAgICAgc2VsZi5fY3VycmVudF9vZmZzZXQgKz0gc2l6ZQoKICAgIHJldHVybiB1bmNvbXByZXNzZWRfZGF0YQoKICBkZWYgc2VlayhzZWxmLCBvZmZzZXQsIHdoZW5jZT1vcy5TRUVLX1NFVCk6CiAgICAiIiJTZWVrcyBhbiBvZmZzZXQgd2l0aGluIHRoZSBmaWxlLWxpa2Ugb2JqZWN0LgoKICAgIEFyZ3M6CiAgICAgIG9mZnNldDogdGhlIG9mZnNldCB0byBzZWVrLgogICAgICB3aGVuY2U6IG9wdGlvbmFsIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgb2Zmc2V0IGlzIGFuIGFic29sdXRlCiAgICAgICAgICAgICAgb3IgcmVsYXRpdmUgcG9zaXRpb24gd2l0aGluIHRoZSBmaWxlLiBEZWZhdWx0IGlzIFNFRUtfU0VULgoKICAgIFJhaXNlczoKICAgICAgSU9FcnJvcjogaWYgdGhlIHNlZWsgZmFpbGVkLgogICAgIiIiCiAgICBpZiBub3Qgc2VsZi5faXNfb3BlbjoKICAgICAgcmFpc2UgSU9FcnJvcih1J05vdCBvcGVuZWQuJykKCiAgICBpZiBzZWxmLl9jdXJyZW50X29mZnNldCA8IDA6CiAgICAgIHJhaXNlIElPRXJyb3IoCiAgICAgICAgICB1J0ludmFsaWQgY3VycmVudCBvZmZzZXQ6IHswOmR9IHZhbHVlIGxlc3MgdGhhbiB6ZXJvLicuZm9ybWF0KAogICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfb2Zmc2V0KSkKCiAgICBpZiB3aGVuY2UgPT0gb3MuU0VFS19DVVI6CiAgICAgIG9mZnNldCArPSBzZWxmLl9jdXJyZW50X29mZnNldAogICAgZWxpZiB3aGVuY2UgPT0gb3MuU0VFS19FTkQ6CiAgICAgIG9mZnNldCArPSBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9zaXplCiAgICBlbGlmIHdoZW5jZSAhPSBvcy5TRUVLX1NFVDoKICAgICAgcmFpc2UgSU9FcnJvcih1J1Vuc3VwcG9ydGVkIHdoZW5jZS4nKQogICAgaWYgb2Zmc2V0IDwgMDoKICAgICAgcmFpc2UgSU9FcnJvcih1J0ludmFsaWQgb2Zmc2V0IHZhbHVlIGxlc3MgdGhhbiB6ZXJvLicpCgogICAgaWYgb2Zmc2V0ICE9IHNlbGYuX2N1cnJlbnRfb2Zmc2V0OgogICAgICBzZWxmLl9jdXJyZW50X29mZnNldCA9IG9mZnNldAogICAgICBzZWxmLl9yZWFsaWduX29mZnNldCA9IFRydWUKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICBkZWYgZ2V0X29mZnNldChzZWxmKToKICAgICIiIlJldHVybnMgdGhlIGN1cnJlbnQgb2Zmc2V0IGludG8gdGhlIGZpbGUtbGlrZSBvYmplY3QuCgogICAgUmFpc2VzOgo8fGZpbV9lbmR8Pg=="]
["99f4bc41e8a11d96650a6c1adbd480fe8bc88088-3","99f4bc41e8a11d96650a6c1adbd480fe8bc88088","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiVGhlIGNvbXByZXNzZWQgc3RyZWFtIGZpbGUtbGlrZSBvYmplY3QgaW1wbGVtZW50YXRpb24uIiIiCgppbXBvcnQgb3MKCmZyb20gZGZ2ZnMuY29tcHJlc3Npb24gaW1wb3J0IG1hbmFnZXIgYXMgY29tcHJlc3Npb25fbWFuYWdlcgpmcm9tIGRmdmZzLmZpbGVfaW8gaW1wb3J0IGZpbGVfaW8KZnJvbSBkZnZmcy5saWIgaW1wb3J0IGVycm9ycwpmcm9tIGRmdmZzLnJlc29sdmVyIGltcG9ydCByZXNvbHZlcgoKCmNsYXNzIENvbXByZXNzZWRTdHJlYW0oZmlsZV9pby5GaWxlSU8pOgogICIiIkNsYXNzIHRoYXQgaW1wbGVtZW50cyBhIGZpbGUtbGlrZSBvYmplY3Qgb2YgYSBjb21wcmVzc2VkIHN0cmVhbS4iIiIKCiAgIyBUaGUgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGJ1ZmZlci4KICBfQ09NUFJFU1NFRF9EQVRBX0JVRkZFUl9TSVpFID0gOCAqIDEwMjQgKiAxMDI0CgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwgcmVzb2x2ZXJfY29udGV4dCwgY29tcHJlc3Npb25fbWV0aG9kPU5vbmUsIGZpbGVfb2JqZWN0PU5vbmUpOgogICAgIiIiSW5pdGlhbGl6ZXMgdGhlIGZpbGUtbGlrZSBvYmplY3QuCgogICAgICAgSWYgdGhlIGZpbGUtbGlrZSBvYmplY3QgaXMgY2hhaW5lZCBkbyBub3Qgc2VwYXJhdGVseSB1c2UgdGhlIHBhcmVudAogICAgICAgZmlsZS1saWtlIG9iamVjdC4KCiAgICBBcmdzOgogICAgICByZXNvbHZlcl9jb250ZXh0OiB0aGUgcmVzb2x2ZXIgY29udGV4dCAoaW5zdGFuY2Ugb2YgcmVzb2x2ZXIuQ29udGV4dCkuCiAgICAgIGNvbXByZXNzaW9uX21ldGhvZDogb3B0aW9uYWwgbWV0aG9kIHVzZWQgdG8gdGhlIGNvbXByZXNzIHRoZSBkYXRhLgogICAgICBmaWxlX29iamVjdDogb3B0aW9uYWwgcGFyZW50IGZpbGUtbGlrZSBvYmplY3QuIFRoZSBkZWZhdWx0IGlzIE5vbmUuCgogICAgUmFpc2VzOgogICAgICBWYWx1ZUVycm9yOiBpZiBmaWxlX29iamVjdCBwcm92aWRlZCBidXQgY29tcHJlc3Npb25fbWV0aG9kIGlzIG5vdC4KICAgICIiIgogICAgaWYgZmlsZV9vYmplY3QgaXMgbm90IE5vbmUgYW5kIGNvbXByZXNzaW9uX21ldGhvZCBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgdSdGaWxlLWxpa2Ugb2JqZWN0IHByb3ZpZGVkIHdpdGhvdXQgY29ycmVzcG9uZGluZyBjb21wcmVzc2lvbiAnCiAgICAgICAgICB1J21ldGhvZC4nKQoKICAgIHN1cGVyKENvbXByZXNzZWRTdHJlYW0sIHNlbGYpLl9faW5pdF9fKHJlc29sdmVyX2NvbnRleHQpCiAgICBzZWxmLl9jb21wcmVzc2lvbl9tZXRob2QgPSBjb21wcmVzc2lvbl9tZXRob2QKICAgIHNlbGYuX2ZpbGVfb2JqZWN0ID0gZmlsZV9vYmplY3QKICAgIHNlbGYuX2NvbXByZXNzZWRfZGF0YSA9IGInJwogICAgc2VsZi5fY3VycmVudF9vZmZzZXQgPSAwCiAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBOb25lCiAgICBzZWxmLl9yZWFsaWduX29mZnNldCA9IFRydWUKICAgIHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhID0gYicnCiAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQgPSAwCiAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9zaXplID0gMAogICAgc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplID0gTm9uZQoKICAgIGlmIGZpbGVfb2JqZWN0OgogICAgICBzZWxmLl9maWxlX29iamVjdF9zZXRfaW5faW5pdCA9IFRydWUKICAgIGVsc2U6CiAgICAgIHNlbGYuX2ZpbGVfb2JqZWN0X3NldF9pbl9pbml0ID0gRmFsc2UKCiAgZGVmIF9DbG9zZShzZWxmKToKICAgICIiIkNsb3NlcyB0aGUgZmlsZS1saWtlIG9iamVjdC4KCiAgICAgICBJZiB0aGUgZmlsZS1saWtlIG9iamVjdCB3YXMgcGFzc2VkIGluIHRoZSBpbml0IGZ1bmN0aW9uCiAgICAgICB0aGUgY29tcHJlc3NlZCBzdHJlYW0gZmlsZS1saWtlIG9iamVjdCBkb2VzIG5vdCBjb250cm9sCiAgICAgICB0aGUgZmlsZS1saWtlIG9iamVjdCBhbmQgc2hvdWxkIG5vdCBhY3R1YWxseSBjbG9zZSBpdC4KCiAgICBSYWlzZXM6CiAgICAgIElPRXJyb3I6IGlmIHRoZSBjbG9zZSBmYWlsZWQuCiAgICAiIiIKICAgIGlmIG5vdCBzZWxmLl9maWxlX29iamVjdF9zZXRfaW5faW5pdDoKICAgICAgc2VsZi5fZmlsZV9vYmplY3QuY2xvc2UoKQogICAgICBzZWxmLl9maWxlX29iamVjdCA9IE5vbmUKCiAgICBzZWxmLl9jb21wcmVzc2VkX2RhdGEgPSBiJycKICAgIHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhID0gYicnCiAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBOb25lCgogIGRlZiBfR2V0RGVjb21wcmVzc29yKHNlbGYpOgogICAgIiIiUmV0cmlldmVzIHRoZSBkZWNvbXByZXNzb3IuIiIiCiAgICByZXR1cm4gY29tcHJlc3Npb25fbWFuYWdlci5Db21wcmVzc2lvbk1hbmFnZXIuR2V0RGVjb21wcmVzc29yKAogICAgICAgIHNlbGYuX2NvbXByZXNzaW9uX21ldGhvZCkKCiAgZGVmIF9HZXRVbmNvbXByZXNzZWRTdHJlYW1TaXplKHNlbGYpOgogICAgIiIiUmV0cmlldmVzIHRoZSB1bmNvbXByZXNzZWQgc3RyZWFtIHNpemUuIiIiCiAgICBzZWxmLl9maWxlX29iamVjdC5zZWVrKDAsIG9zLlNFRUtfU0VUKQoKICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IHNlbGYuX0dldERlY29tcHJlc3NvcigpCiAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YSA9IGInJwoKICAgIGNvbXByZXNzZWRfZGF0YV9vZmZzZXQgPSAwCiAgICBjb21wcmVzc2VkX2RhdGFfc2l6ZSA9IHNlbGYuX2ZpbGVfb2JqZWN0LmdldF9zaXplKCkKICAgIHVuY29tcHJlc3NlZF9zdHJlYW1fc2l6ZSA9IDAKCiAgICB3aGlsZSBjb21wcmVzc2VkX2RhdGFfb2Zmc2V0IDwgY29tcHJlc3NlZF9kYXRhX3NpemU6CiAgICAgIHJlYWRfY291bnQgPSBzZWxmLl9SZWFkQ29tcHJlc3NlZERhdGEoc2VsZi5fQ09NUFJFU1NFRF9EQVRBX0JVRkZFUl9TSVpFKQogICAgICBpZiByZWFkX2NvdW50ID09IDA6CiAgICAgICAgYnJlYWsKCiAgICAgIGNvbXByZXNzZWRfZGF0YV9vZmZzZXQgKz0gcmVhZF9jb3VudAogICAgICB1bmNvbXByZXNzZWRfc3RyZWFtX3NpemUgKz0gc2VsZi5fdW5jb21wcmVzc2VkX2RhdGFfc2l6ZQoKPHxmaW1faG9sZXw+CiAgZGVmIF9PcGVuKHNlbGYsIHBhdGhfc3BlYz1Ob25lLCBtb2RlPSdyYicpOgogICAgIiIiT3BlbnMgdGhlIGZpbGUtbGlrZSBvYmplY3QuCgogICAgQXJnczoKICAgICAgcGF0aF9zcGVjOiBvcHRpb25hbCBwYXRoIHNwZWNpZmljYXRpb24gKGluc3RhbmNlIG9mIHBhdGguUGF0aFNwZWMpLgogICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIE5vbmUuCiAgICAgIG1vZGU6IG9wdGlvbmFsIGZpbGUgYWNjZXNzIG1vZGUuIFRoZSBkZWZhdWx0IGlzICdyYicgcmVhZC1vbmx5IGJpbmFyeS4KCiAgICBSYWlzZXM6CiAgICAgIEFjY2Vzc0Vycm9yOiBpZiB0aGUgYWNjZXNzIHRvIG9wZW4gdGhlIGZpbGUgd2FzIGRlbmllZC4KICAgICAgSU9FcnJvcjogaWYgdGhlIGZpbGUtbGlrZSBvYmplY3QgY291bGQgbm90IGJlIG9wZW5lZC4KICAgICAgUGF0aFNwZWNFcnJvcjogaWYgdGhlIHBhdGggc3BlY2lmaWNhdGlvbiBpcyBpbmNvcnJlY3QuCiAgICAgIFZhbHVlRXJyb3I6IGlmIHRoZSBwYXRoIHNwZWNpZmljYXRpb24gaXMgaW52YWxpZC4KICAgICIiIgogICAgaWYgbm90IHNlbGYuX2ZpbGVfb2JqZWN0X3NldF9pbl9pbml0IGFuZCBub3QgcGF0aF9zcGVjOgogICAgICByYWlzZSBWYWx1ZUVycm9yKHUnTWlzc2luZyBwYXRoIHNwZWNmaWNhdGlvbi4nKQoKICAgIGlmIG5vdCBzZWxmLl9maWxlX29iamVjdF9zZXRfaW5faW5pdDoKICAgICAgaWYgbm90IHBhdGhfc3BlYy5IYXNQYXJlbnQoKToKICAgICAgICByYWlzZSBlcnJvcnMuUGF0aFNwZWNFcnJvcigKICAgICAgICAgICAgdSdVbnN1cHBvcnRlZCBwYXRoIHNwZWNpZmljYXRpb24gd2l0aG91dCBwYXJlbnQuJykKCiAgICAgIHNlbGYuX2NvbXByZXNzaW9uX21ldGhvZCA9IGdldGF0dHIocGF0aF9zcGVjLCB1J2NvbXByZXNzaW9uX21ldGhvZCcsIE5vbmUpCgogICAgICBpZiBzZWxmLl9jb21wcmVzc2lvbl9tZXRob2QgaXMgTm9uZToKICAgICAgICByYWlzZSBlcnJvcnMuUGF0aFNwZWNFcnJvcigKICAgICAgICAgICAgdSdQYXRoIHNwZWNpZmljYXRpb24gbWlzc2luZyBjb21wcmVzc2lvbiBtZXRob2QuJykKCiAgICAgIHNlbGYuX2ZpbGVfb2JqZWN0ID0gcmVzb2x2ZXIuUmVzb2x2ZXIuT3BlbkZpbGVPYmplY3QoCiAgICAgICAgICBwYXRoX3NwZWMucGFyZW50LCByZXNvbHZlcl9jb250ZXh0PXNlbGYuX3Jlc29sdmVyX2NvbnRleHQpCgogIGRlZiBfQWxpZ25VbmNvbXByZXNzZWREYXRhT2Zmc2V0KHNlbGYsIHVuY29tcHJlc3NlZF9kYXRhX29mZnNldCk6CiAgICAiIiJBbGlnbnMgdGhlIGNvbXByZXNzZWQgZmlsZSB3aXRoIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBvZmZzZXQuCgogICAgQXJnczoKICAgICAgdW5jb21wcmVzc2VkX2RhdGFfb2Zmc2V0OiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgb2Zmc2V0LgogICAgIiIiCiAgICBzZWxmLl9maWxlX29iamVjdC5zZWVrKDAsIG9zLlNFRUtfU0VUKQoKICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IHNlbGYuX0dldERlY29tcHJlc3NvcigpCiAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YSA9IGInJwoKICAgIGNvbXByZXNzZWRfZGF0YV9vZmZzZXQgPSAwCiAgICBjb21wcmVzc2VkX2RhdGFfc2l6ZSA9IHNlbGYuX2ZpbGVfb2JqZWN0LmdldF9zaXplKCkKCiAgICB3aGlsZSBjb21wcmVzc2VkX2RhdGFfb2Zmc2V0IDwgY29tcHJlc3NlZF9kYXRhX3NpemU6CiAgICAgIHJlYWRfY291bnQgPSBzZWxmLl9SZWFkQ29tcHJlc3NlZERhdGEoc2VsZi5fQ09NUFJFU1NFRF9EQVRBX0JVRkZFUl9TSVpFKQogICAgICBpZiByZWFkX2NvdW50ID09IDA6CiAgICAgICAgYnJlYWsKCiAgICAgIGNvbXByZXNzZWRfZGF0YV9vZmZzZXQgKz0gcmVhZF9jb3VudAoKICAgICAgaWYgdW5jb21wcmVzc2VkX2RhdGFfb2Zmc2V0IDwgc2VsZi5fdW5jb21wcmVzc2VkX2RhdGFfc2l6ZToKICAgICAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQgPSB1bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQKICAgICAgICBicmVhawoKICAgICAgdW5jb21wcmVzc2VkX2RhdGFfb2Zmc2V0IC09IHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhX3NpemUKCiAgZGVmIF9SZWFkQ29tcHJlc3NlZERhdGEoc2VsZiwgcmVhZF9zaXplKToKICAgICIiIlJlYWRzIGNvbXByZXNzZWQgZGF0YSBmcm9tIHRoZSBmaWxlLWxpa2Ugb2JqZWN0LgoKICAgIEFyZ3M6CiAgICAgIHJlYWRfc2l6ZTogdGhlIG51bWJlciBvZiBieXRlcyBvZiBjb21wcmVzc2VkIGRhdGEgdG8gcmVhZC4KCiAgICBSZXR1cm5zOgogICAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGNvbXByZXNzZWQgZGF0YSByZWFkLgogICAgIiIiCiAgICBjb21wcmVzc2VkX2RhdGEgPSBzZWxmLl9maWxlX29iamVjdC5yZWFkKHJlYWRfc2l6ZSkKCiAgICByZWFkX2NvdW50ID0gbGVuKGNvbXByZXNzZWRfZGF0YSkKCiAgICBzZWxmLl9jb21wcmVzc2VkX2RhdGEgPSBiJycuam9pbihbc2VsZi5fY29tcHJlc3NlZF9kYXRhLCBjb21wcmVzc2VkX2RhdGFdKQoKICAgIHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhLCBzZWxmLl9jb21wcmVzc2VkX2RhdGEgPSAoCiAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yLkRlY29tcHJlc3Moc2VsZi5fY29tcHJlc3NlZF9kYXRhKSkKCiAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9zaXplID0gbGVuKHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhKQoKICAgIHJldHVybiByZWFkX2NvdW50CgogICMgTm90ZTogdGhhdCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBkbyBub3QgZm9sbG93IHRoZSBzdHlsZSBndWlkZQogICMgYmVjYXVzZSB0aGV5IGFyZSBwYXJ0IG9mIHRoZSBmaWxlLWxpa2Ugb2JqZWN0IGludGVyZmFjZS4KCiAgZGVmIHJlYWQoc2VsZiwgc2l6ZT1Ob25lKToKICAgICIiIlJlYWRzIGEgYnl0ZSBzdHJpbmcgZnJvbSB0aGUgZmlsZS1saWtlIG9iamVjdCBhdCB0aGUgY3VycmVudCBvZmZzZXQuCgogICAgICAgVGhlIGZ1bmN0aW9uIHdpbGwgcmVhZCBhIGJ5dGUgc3RyaW5nIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZSBvcgogICAgICAgYWxsIG9mIHRoZSByZW1haW5pbmcgZGF0YSBpZiBubyBzaXplIHdhcyBzcGVjaWZpZWQuCgogICAgQXJnczoKICAgICAgc2l6ZTogT3B0aW9uYWwgaW50ZWdlciB2YWx1ZSBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4KICAgICAgICAgICAgRGVmYXVsdCBpcyBhbGwgcmVtYWluaW5nIGRhdGEgKE5vbmUpLgoKICAgIFJldHVybnM6CiAgICAgIEEgYnl0ZSBzdHJpbmcgY29udGFpbmluZyB0aGUgZGF0YSByZWFkLgoKICAgIFJhaXNlczoKICAgICAgSU9FcnJvcjogaWYgdGhlIHJlYWQgZmFpbGVkLgogICAgIiIiCiAgICBpZiBub3Qgc2VsZi5faXNfb3BlbjoKICAgICAgcmFpc2UgSU9FcnJvcih1J05vdCBvcGVuZWQuJykKCiAgICBpZiBzZWxmLl9jdXJyZW50X29mZnNldCA8IDA6CiAgICAgIHJhaXNlIElPRXJyb3IoCiAgICAgICAgICB1J0ludmFsaWQgY3VycmVudCBvZmZzZXQ6IHswOmR9IHZhbHVlIGxlc3MgdGhhbiB6ZXJvLicuZm9ybWF0KAogICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfb2Zmc2V0KSkKCiAgICBpZiBzZWxmLl91bmNvbXByZXNzZWRfc3RyZWFtX3NpemUgaXMgTm9uZToKICAgICAgc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplID0gc2VsZi5fR2V0VW5jb21wcmVzc2VkU3RyZWFtU2l6ZSgpCgogICAgaWYgc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplIDwgMDoKICAgICAgcmFpc2UgSU9FcnJvcih1J0ludmFsaWQgdW5jb21wcmVzc2VkIHN0cmVhbSBzaXplLicpCgogICAgaWYgc2VsZi5fY3VycmVudF9vZmZzZXQgPj0gc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplOgogICAgICByZXR1cm4gYicnCgogICAgaWYgc2VsZi5fcmVhbGlnbl9vZmZzZXQ6CiAgICAgIHNlbGYuX0FsaWduVW5jb21wcmVzc2VkRGF0YU9mZnNldChzZWxmLl9jdXJyZW50X29mZnNldCkKICAgICAgc2VsZi5fcmVhbGlnbl9vZmZzZXQgPSBGYWxzZQoKICAgIGlmIHNpemUgaXMgTm9uZToKICAgICAgc2l6ZSA9IHNlbGYuX3VuY29tcHJlc3NlZF9zdHJlYW1fc2l6ZQogICAgaWYgc2VsZi5fY3VycmVudF9vZmZzZXQgKyBzaXplID4gc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplOgogICAgICBzaXplID0gc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplIC0gc2VsZi5fY3VycmVudF9vZmZzZXQKCiAgICB1bmNvbXByZXNzZWRfZGF0YSA9IGInJwoKICAgIGlmIHNpemUgPT0gMDoKICAgICAgcmV0dXJuIHVuY29tcHJlc3NlZF9kYXRhCgogICAgd2hpbGUgc2l6ZSA+IHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhX3NpemU6CiAgICAgIHVuY29tcHJlc3NlZF9kYXRhID0gYicnLmpvaW4oWwogICAgICAgICAgdW5jb21wcmVzc2VkX2RhdGEsCiAgICAgICAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YVtzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQ6XV0pCgogICAgICByZW1haW5pbmdfdW5jb21wcmVzc2VkX2RhdGFfc2l6ZSA9ICgKICAgICAgICAgIHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhX3NpemUgLSBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQpCgogICAgICBzZWxmLl9jdXJyZW50X29mZnNldCArPSByZW1haW5pbmdfdW5jb21wcmVzc2VkX2RhdGFfc2l6ZQogICAgICBzaXplIC09IHJlbWFpbmluZ191bmNvbXByZXNzZWRfZGF0YV9zaXplCgogICAgICBpZiBzZWxmLl9jdXJyZW50X29mZnNldCA+PSBzZWxmLl91bmNvbXByZXNzZWRfc3RyZWFtX3NpemU6CiAgICAgICAgYnJlYWsKCiAgICAgIHJlYWRfY291bnQgPSBzZWxmLl9SZWFkQ29tcHJlc3NlZERhdGEoc2VsZi5fQ09NUFJFU1NFRF9EQVRBX0JVRkZFUl9TSVpFKQogICAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQgPSAwCiAgICAgIGlmIHJlYWRfY291bnQgPT0gMDoKICAgICAgICBicmVhawoKICAgIGlmIHNpemUgPiAwOgogICAgICBzbGljZV9zdGFydF9vZmZzZXQgPSBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQKICAgICAgc2xpY2VfZW5kX29mZnNldCA9IHNsaWNlX3N0YXJ0X29mZnNldCArIHNpemUKCiAgICAgIHVuY29tcHJlc3NlZF9kYXRhID0gYicnLmpvaW4oWwogICAgICAgICAgdW5jb21wcmVzc2VkX2RhdGEsCiAgICAgICAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YVtzbGljZV9zdGFydF9vZmZzZXQ6c2xpY2VfZW5kX29mZnNldF1dKQoKICAgICAgc2VsZi5fdW5jb21wcmVzc2VkX2RhdGFfb2Zmc2V0ICs9IHNpemUKICAgICAgc2VsZi5fY3VycmVudF9vZmZzZXQgKz0gc2l6ZQoKICAgIHJldHVybiB1bmNvbXByZXNzZWRfZGF0YQoKICBkZWYgc2VlayhzZWxmLCBvZmZzZXQsIHdoZW5jZT1vcy5TRUVLX1NFVCk6CiAgICAiIiJTZWVrcyBhbiBvZmZzZXQgd2l0aGluIHRoZSBmaWxlLWxpa2Ugb2JqZWN0LgoKICAgIEFyZ3M6CiAgICAgIG9mZnNldDogdGhlIG9mZnNldCB0byBzZWVrLgogICAgICB3aGVuY2U6IG9wdGlvbmFsIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgb2Zmc2V0IGlzIGFuIGFic29sdXRlCiAgICAgICAgICAgICAgb3IgcmVsYXRpdmUgcG9zaXRpb24gd2l0aGluIHRoZSBmaWxlLiBEZWZhdWx0IGlzIFNFRUtfU0VULgoKICAgIFJhaXNlczoKICAgICAgSU9FcnJvcjogaWYgdGhlIHNlZWsgZmFpbGVkLgogICAgIiIiCiAgICBpZiBub3Qgc2VsZi5faXNfb3BlbjoKICAgICAgcmFpc2UgSU9FcnJvcih1J05vdCBvcGVuZWQuJykKCiAgICBpZiBzZWxmLl9jdXJyZW50X29mZnNldCA8IDA6CiAgICAgIHJhaXNlIElPRXJyb3IoCiAgICAgICAgICB1J0ludmFsaWQgY3VycmVudCBvZmZzZXQ6IHswOmR9IHZhbHVlIGxlc3MgdGhhbiB6ZXJvLicuZm9ybWF0KAogICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfb2Zmc2V0KSkKCiAgICBpZiB3aGVuY2UgPT0gb3MuU0VFS19DVVI6CiAgICAgIG9mZnNldCArPSBzZWxmLl9jdXJyZW50X29mZnNldAogICAgZWxpZiB3aGVuY2UgPT0gb3MuU0VFS19FTkQ6CiAgICAgIG9mZnNldCArPSBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9zaXplCiAgICBlbGlmIHdoZW5jZSAhPSBvcy5TRUVLX1NFVDoKICAgICAgcmFpc2UgSU9FcnJvcih1J1Vuc3VwcG9ydGVkIHdoZW5jZS4nKQogICAgaWYgb2Zmc2V0IDwgMDoKICAgICAgcmFpc2UgSU9FcnJvcih1J0ludmFsaWQgb2Zmc2V0IHZhbHVlIGxlc3MgdGhhbiB6ZXJvLicpCgogICAgaWYgb2Zmc2V0ICE9IHNlbGYuX2N1cnJlbnRfb2Zmc2V0OgogICAgICBzZWxmLl9jdXJyZW50X29mZnNldCA9IG9mZnNldAogICAgICBzZWxmLl9yZWFsaWduX29mZnNldCA9IFRydWUKCiAgZGVmIGdldF9vZmZzZXQoc2VsZik6CiAgICAiIiJSZXR1cm5zIHRoZSBjdXJyZW50IG9mZnNldCBpbnRvIHRoZSBmaWxlLWxpa2Ugb2JqZWN0LgoKICAgIFJhaXNlczoKICAgICAgSU9FcnJvcjogaWYgdGhlIGZpbGUtbGlrZSBvYmplY3QgaGFzIG5vdCBiZWVuIG9wZW5lZC4KICAgICIiIgogICAgaWYgbm90IHNlbGYuX2lzX29wZW46CiAgICAgIHJhaXNlIElPRXJyb3IodSdOb3Qgb3BlbmVkLicpCgogICAgcmV0dXJuIHNlbGYuX2N1cnJlbnRfb2Zmc2V0CgogIGRlZiBnZXRfc2l6ZShzZWxmKToKICAgICIiIlJldHVybnMgdGhlIHNpemUgb2YgdGhlIGZpbGUtbGlrZSBvYmplY3QuCgogICAgUmFpc2VzOgogICAgICBJT0Vycm9yOiBpZiB0aGUgZmlsZS1saWtlIG9iamVjdCBoYXMgbm90IGJlZW4gb3BlbmVkLgogICAgIiIiCiAgICBpZiBub3Qgc2VsZi5faXNfb3BlbjoKICAgICAgcmFpc2UgSU9FcnJvcih1J05vdCBvcGVuZWQuJykKCiAgICBpZiBzZWxmLl91bmNvbXByZXNzZWRfc3RyZWFtX3NpemUgaXMgTm9uZToKICAgICAgc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplID0gc2VsZi5fR2V0VW5jb21wcmVzc2VkU3RyZWFtU2l6ZSgpCgogICAgcmV0dXJuIHNlbGYuX3VuY29tcHJlc3NlZF9zdHJlYW1fc2l6ZQo8fGZpbV9zdWZmaXh8PgogICAgcmV0dXJuIHVuY29tcHJlc3NlZF9zdHJlYW1fc2l6ZQoKPHxmaW1fZW5kfD4="]
["99f4bc41e8a11d96650a6c1adbd480fe8bc88088-4","99f4bc41e8a11d96650a6c1adbd480fe8bc88088","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiVGhlIGNvbXByZXNzZWQgc3RyZWFtIGZpbGUtbGlrZSBvYmplY3QgaW1wbGVtZW50YXRpb24uIiIiCgppbXBvcnQgb3MKCmZyb20gZGZ2ZnMuY29tcHJlc3Npb24gaW1wb3J0IG1hbmFnZXIgYXMgY29tcHJlc3Npb25fbWFuYWdlcgpmcm9tIGRmdmZzLmZpbGVfaW8gaW1wb3J0IGZpbGVfaW8KZnJvbSBkZnZmcy5saWIgaW1wb3J0IGVycm9ycwpmcm9tIGRmdmZzLnJlc29sdmVyIGltcG9ydCByZXNvbHZlcgoKCmNsYXNzIENvbXByZXNzZWRTdHJlYW0oZmlsZV9pby5GaWxlSU8pOgogICIiIkNsYXNzIHRoYXQgaW1wbGVtZW50cyBhIGZpbGUtbGlrZSBvYmplY3Qgb2YgYSBjb21wcmVzc2VkIHN0cmVhbS4iIiIKCiAgIyBUaGUgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGJ1ZmZlci4KICBfQ09NUFJFU1NFRF9EQVRBX0JVRkZFUl9TSVpFID0gOCAqIDEwMjQgKiAxMDI0CgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwgcmVzb2x2ZXJfY29udGV4dCwgY29tcHJlc3Npb25fbWV0aG9kPU5vbmUsIGZpbGVfb2JqZWN0PU5vbmUpOgogICAgIiIiSW5pdGlhbGl6ZXMgdGhlIGZpbGUtbGlrZSBvYmplY3QuCgogICAgICAgSWYgdGhlIGZpbGUtbGlrZSBvYmplY3QgaXMgY2hhaW5lZCBkbyBub3Qgc2VwYXJhdGVseSB1c2UgdGhlIHBhcmVudAogICAgICAgZmlsZS1saWtlIG9iamVjdC4KCiAgICBBcmdzOgogICAgICByZXNvbHZlcl9jb250ZXh0OiB0aGUgcmVzb2x2ZXIgY29udGV4dCAoaW5zdGFuY2Ugb2YgcmVzb2x2ZXIuQ29udGV4dCkuCiAgICAgIGNvbXByZXNzaW9uX21ldGhvZDogb3B0aW9uYWwgbWV0aG9kIHVzZWQgdG8gdGhlIGNvbXByZXNzIHRoZSBkYXRhLgogICAgICBmaWxlX29iamVjdDogb3B0aW9uYWwgcGFyZW50IGZpbGUtbGlrZSBvYmplY3QuIFRoZSBkZWZhdWx0IGlzIE5vbmUuCgogICAgUmFpc2VzOgogICAgICBWYWx1ZUVycm9yOiBpZiBmaWxlX29iamVjdCBwcm92aWRlZCBidXQgY29tcHJlc3Npb25fbWV0aG9kIGlzIG5vdC4KICAgICIiIgogICAgaWYgZmlsZV9vYmplY3QgaXMgbm90IE5vbmUgYW5kIGNvbXByZXNzaW9uX21ldGhvZCBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgdSdGaWxlLWxpa2Ugb2JqZWN0IHByb3ZpZGVkIHdpdGhvdXQgY29ycmVzcG9uZGluZyBjb21wcmVzc2lvbiAnCiAgICAgICAgICB1J21ldGhvZC4nKQoKICAgIHN1cGVyKENvbXByZXNzZWRTdHJlYW0sIHNlbGYpLl9faW5pdF9fKHJlc29sdmVyX2NvbnRleHQpCiAgICBzZWxmLl9jb21wcmVzc2lvbl9tZXRob2QgPSBjb21wcmVzc2lvbl9tZXRob2QKICAgIHNlbGYuX2ZpbGVfb2JqZWN0ID0gZmlsZV9vYmplY3QKICAgIHNlbGYuX2NvbXByZXNzZWRfZGF0YSA9IGInJwogICAgc2VsZi5fY3VycmVudF9vZmZzZXQgPSAwCiAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBOb25lCiAgICBzZWxmLl9yZWFsaWduX29mZnNldCA9IFRydWUKICAgIHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhID0gYicnCiAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQgPSAwCiAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9zaXplID0gMAogICAgc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplID0gTm9uZQoKICAgIGlmIGZpbGVfb2JqZWN0OgogICAgICBzZWxmLl9maWxlX29iamVjdF9zZXRfaW5faW5pdCA9IFRydWUKICAgIGVsc2U6CiAgICAgIHNlbGYuX2ZpbGVfb2JqZWN0X3NldF9pbl9pbml0ID0gRmFsc2UKCiAgZGVmIF9DbG9zZShzZWxmKToKICAgICIiIkNsb3NlcyB0aGUgZmlsZS1saWtlIG9iamVjdC4KCiAgICAgICBJZiB0aGUgZmlsZS1saWtlIG9iamVjdCB3YXMgcGFzc2VkIGluIHRoZSBpbml0IGZ1bmN0aW9uCiAgICAgICB0aGUgY29tcHJlc3NlZCBzdHJlYW0gZmlsZS1saWtlIG9iamVjdCBkb2VzIG5vdCBjb250cm9sCiAgICAgICB0aGUgZmlsZS1saWtlIG9iamVjdCBhbmQgc2hvdWxkIG5vdCBhY3R1YWxseSBjbG9zZSBpdC4KCiAgICBSYWlzZXM6CiAgICAgIElPRXJyb3I6IGlmIHRoZSBjbG9zZSBmYWlsZWQuCiAgICAiIiIKICAgIGlmIG5vdCBzZWxmLl9maWxlX29iamVjdF9zZXRfaW5faW5pdDoKICAgICAgc2VsZi5fZmlsZV9vYmplY3QuY2xvc2UoKQogICAgICBzZWxmLl9maWxlX29iamVjdCA9IE5vbmUKCiAgICBzZWxmLl9jb21wcmVzc2VkX2RhdGEgPSBiJycKICAgIHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhID0gYicnCiAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBOb25lCgogIGRlZiBfR2V0RGVjb21wcmVzc29yKHNlbGYpOgogICAgIiIiUmV0cmlldmVzIHRoZSBkZWNvbXByZXNzb3IuIiIiCiAgICByZXR1cm4gY29tcHJlc3Npb25fbWFuYWdlci5Db21wcmVzc2lvbk1hbmFnZXIuR2V0RGVjb21wcmVzc29yKAogICAgICAgIHNlbGYuX2NvbXByZXNzaW9uX21ldGhvZCkKCiAgZGVmIF9HZXRVbmNvbXByZXNzZWRTdHJlYW1TaXplKHNlbGYpOgogICAgIiIiUmV0cmlldmVzIHRoZSB1bmNvbXByZXNzZWQgc3RyZWFtIHNpemUuIiIiCiAgICBzZWxmLl9maWxlX29iamVjdC5zZWVrKDAsIG9zLlNFRUtfU0VUKQoKICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IHNlbGYuX0dldERlY29tcHJlc3NvcigpCiAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YSA9IGInJwoKICAgIGNvbXByZXNzZWRfZGF0YV9vZmZzZXQgPSAwCiAgICBjb21wcmVzc2VkX2RhdGFfc2l6ZSA9IHNlbGYuX2ZpbGVfb2JqZWN0LmdldF9zaXplKCkKICAgIHVuY29tcHJlc3NlZF9zdHJlYW1fc2l6ZSA9IDAKCiAgICB3aGlsZSBjb21wcmVzc2VkX2RhdGFfb2Zmc2V0IDwgY29tcHJlc3NlZF9kYXRhX3NpemU6CiAgICAgIHJlYWRfY291bnQgPSBzZWxmLl9SZWFkQ29tcHJlc3NlZERhdGEoc2VsZi5fQ09NUFJFU1NFRF9EQVRBX0JVRkZFUl9TSVpFKQogICAgICBpZiByZWFkX2NvdW50ID09IDA6CiAgICAgICAgYnJlYWsKCiAgICAgIGNvbXByZXNzZWRfZGF0YV9vZmZzZXQgKz0gcmVhZF9jb3VudAogICAgICB1bmNvbXByZXNzZWRfc3RyZWFtX3NpemUgKz0gc2VsZi5fdW5jb21wcmVzc2VkX2RhdGFfc2l6ZQoKICAgIHJldHVybiB1bmNvbXByZXNzZWRfc3RyZWFtX3NpemUKCiAgZGVmIF9PcGVuKHNlbGYsIHBhdGhfc3BlYz1Ob25lLCBtb2RlPSdyYicpOgogICAgIiIiT3BlbnMgdGhlIGZpbGUtbGlrZSBvYmplY3QuCgogICAgQXJnczoKICAgICAgcGF0aF9zcGVjOiBvcHRpb25hbCBwYXRoIHNwZWNpZmljYXRpb24gKGluc3RhbmNlIG9mIHBhdGguUGF0aFNwZWMpLgogICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIE5vbmUuCiAgICAgIG1vZGU6IG9wdGlvbmFsIGZpbGUgYWNjZXNzIG1vZGUuIFRoZSBkZWZhdWx0IGlzICdyYicgcmVhZC1vbmx5IGJpbmFyeS4KCiAgICBSYWlzZXM6CiAgICAgIEFjY2Vzc0Vycm9yOiBpZiB0aGUgYWNjZXNzIHRvIG9wZW4gdGhlIGZpbGUgd2FzIGRlbmllZC4KICAgICAgSU9FcnJvcjogaWYgdGhlIGZpbGUtbGlrZSBvYmplY3QgY291bGQgbm90IGJlIG9wZW5lZC4KICAgICAgUGF0aFNwZWNFcnJvcjogaWYgdGhlIHBhdGggc3BlY2lmaWNhdGlvbiBpcyBpbmNvcnJlY3QuCiAgICAgIFZhbHVlRXJyb3I6IGlmIHRoZSBwYXRoIHNwZWNpZmljYXRpb24gaXMgaW52YWxpZC4KICAgICIiIgogICAgaWYgbm90IHNlbGYuX2ZpbGVfb2JqZWN0X3NldF9pbl9pbml0IGFuZCBub3QgcGF0aF9zcGVjOgogICAgICByYWlzZSBWYWx1ZUVycm9yKHUnTWlzc2luZyBwYXRoIHNwZWNmaWNhdGlvbi4nKQoKICAgIGlmIG5vdCBzZWxmLl9maWxlX29iamVjdF9zZXRfaW5faW5pdDoKICAgICAgaWYgbm90IHBhdGhfc3BlYy5IYXNQYXJlbnQoKToKICAgICAgICByYWlzZSBlcnJvcnMuUGF0aFNwZWNFcnJvcigKICAgICAgICAgICAgdSdVbnN1cHBvcnRlZCBwYXRoIHNwZWNpZmljYXRpb24gd2l0aG91dCBwYXJlbnQuJykKCiAgICAgIHNlbGYuX2NvbXByZXNzaW9uX21ldGhvZCA9IGdldGF0dHIocGF0aF9zcGVjLCB1J2NvbXByZXNzaW9uX21ldGhvZCcsIE5vbmUpCgogICAgICBpZiBzZWxmLl9jb21wcmVzc2lvbl9tZXRob2QgaXMgTm9uZToKICAgICAgICByYWlzZSBlcnJvcnMuUGF0aFNwZWNFcnJvcigKICAgICAgICAgICAgdSdQYXRoIHNwZWNpZmljYXRpb24gbWlzc2luZyBjb21wcmVzc2lvbiBtZXRob2QuJykKCiAgICAgIHNlbGYuX2ZpbGVfb2JqZWN0ID0gcmVzb2x2ZXIuUmVzb2x2ZXIuT3BlbkZpbGVPYmplY3QoCiAgICAgICAgICBwYXRoX3NwZWMucGFyZW50LCByZXNvbHZlcl9jb250ZXh0PXNlbGYuX3Jlc29sdmVyX2NvbnRleHQpCgogIGRlZiBfQWxpZ25VbmNvbXByZXNzZWREYXRhT2Zmc2V0KHNlbGYsIHVuY29tcHJlc3NlZF9kYXRhX29mZnNldCk6CiAgICAiIiJBbGlnbnMgdGhlIGNvbXByZXNzZWQgZmlsZSB3aXRoIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBvZmZzZXQuCgogICAgQXJnczoKICAgICAgdW5jb21wcmVzc2VkX2RhdGFfb2Zmc2V0OiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgb2Zmc2V0LgogICAgIiIiCiAgICBzZWxmLl9maWxlX29iamVjdC5zZWVrKDAsIG9zLlNFRUtfU0VUKQoKICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IHNlbGYuX0dldERlY29tcHJlc3NvcigpCiAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YSA9IGInJwoKICAgIGNvbXByZXNzZWRfZGF0YV9vZmZzZXQgPSAwCiAgICBjb21wcmVzc2VkX2RhdGFfc2l6ZSA9IHNlbGYuX2ZpbGVfb2JqZWN0LmdldF9zaXplKCkKCiAgICB3aGlsZSBjb21wcmVzc2VkX2RhdGFfb2Zmc2V0IDwgY29tcHJlc3NlZF9kYXRhX3NpemU6CiAgICAgIHJlYWRfY291bnQgPSBzZWxmLl9SZWFkQ29tcHJlc3NlZERhdGEoc2VsZi5fQ09NUFJFU1NFRF9EQVRBX0JVRkZFUl9TSVpFKQogICAgICBpZiByZWFkX2NvdW50ID09IDA6CiAgICAgICAgYnJlYWsKCiAgICAgIGNvbXByZXNzZWRfZGF0YV9vZmZzZXQgKz0gcmVhZF9jb3VudAoKICAgICAgaWYgdW5jb21wcmVzc2VkX2RhdGFfb2Zmc2V0IDwgc2VsZi5fdW5jb21wcmVzc2VkX2RhdGFfc2l6ZToKICAgICAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQgPSB1bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQKICAgICAgICBicmVhawoKICAgICAgdW5jb21wcmVzc2VkX2RhdGFfb2Zmc2V0IC09IHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhX3NpemUKCiAgZGVmIF9SZWFkQ29tcHJlc3NlZERhdGEoc2VsZiwgcmVhZF9zaXplKToKICAgICIiIlJlYWRzIGNvbXByZXNzZWQgZGF0YSBmcm9tIHRoZSBmaWxlLWxpa2Ugb2JqZWN0LgoKICAgIEFyZ3M6CiAgICAgIHJlYWRfc2l6ZTogdGhlIG51bWJlciBvZiBieXRlcyBvZiBjb21wcmVzc2VkIGRhdGEgdG8gcmVhZC4KCiAgICBSZXR1cm5zOgogICAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGNvbXByZXNzZWQgZGF0YSByZWFkLgogICAgIiIiCiAgICBjb21wcmVzc2VkX2RhdGEgPSBzZWxmLl9maWxlX29iamVjdC5yZWFkKHJlYWRfc2l6ZSkKCiAgICByZWFkX2NvdW50ID0gbGVuKGNvbXByZXNzZWRfZGF0YSkKCiAgICBzZWxmLl9jb21wcmVzc2VkX2RhdGEgPSBiJycuam9pbihbc2VsZi5fY29tcHJlc3NlZF9kYXRhLCBjb21wcmVzc2VkX2RhdGFdKQoKICAgIHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhLCBzZWxmLl9jb21wcmVzc2VkX2RhdGEgPSAoCiAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yLkRlY29tcHJlc3Moc2VsZi5fY29tcHJlc3NlZF9kYXRhKSkKCiAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9zaXplID0gbGVuKHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhKQoKICAgIHJldHVybiByZWFkX2NvdW50CgogICMgTm90ZTogdGhhdCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBkbyBub3QgZm9sbG93IHRoZSBzdHlsZSBndWlkZQogICMgYmVjYXVzZSB0aGV5IGFyZSBwYXJ0IG9mIHRoZSBmaWxlLWxpa2Ugb2JqZWN0IGludGVyZmFjZS4KCiAgZGVmIHJlYWQoc2VsZiwgc2l6ZT1Ob25lKToKICAgICIiIlJlYWRzIGEgYnl0ZSBzdHJpbmcgZnJvbSB0aGUgZmlsZS1saWtlIG9iamVjdCBhdCB0aGUgY3VycmVudCBvZmZzZXQuCgogICAgICAgVGhlIGZ1bmN0aW9uIHdpbGwgcmVhZCBhIGJ5dGUgc3RyaW5nIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZSBvcgogICAgICAgYWxsIG9mIHRoZSByZW1haW5pbmcgZGF0YSBpZiBubyBzaXplIHdhcyBzcGVjaWZpZWQuCgogICAgQXJnczoKICAgICAgc2l6ZTogT3B0aW9uYWwgaW50ZWdlciB2YWx1ZSBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4KICAgICAgICAgICAgRGVmYXVsdCBpcyBhbGwgcmVtYWluaW5nIGRhdGEgKE5vbmUpLgoKICAgIFJldHVybnM6CiAgICAgIEEgYnl0ZSBzdHJpbmcgY29udGFpbmluZyB0aGUgZGF0YSByZWFkLgoKICAgIFJhaXNlczoKICAgICAgSU9FcnJvcjogaWYgdGhlIHJlYWQgZmFpbGVkLgogICAgIiIiCiAgICBpZiBub3Qgc2VsZi5faXNfb3BlbjoKICAgICAgcmFpc2UgSU9FcnJvcih1J05vdCBvcGVuZWQuJykKCiAgICBpZiBzZWxmLl9jdXJyZW50X29mZnNldCA8IDA6CiAgICAgIHJhaXNlIElPRXJyb3IoCiAgICAgICAgICB1J0ludmFsaWQgY3VycmVudCBvZmZzZXQ6IHswOmR9IHZhbHVlIGxlc3MgdGhhbiB6ZXJvLicuZm9ybWF0KAogICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfb2Zmc2V0KSkKCiAgICBpZiBzZWxmLl91bmNvbXByZXNzZWRfc3RyZWFtX3NpemUgaXMgTm9uZToKICAgICAgc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplID0gc2VsZi5fR2V0VW5jb21wcmVzc2VkU3RyZWFtU2l6ZSgpCgogICAgaWYgc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplIDwgMDoKICAgICAgcmFpc2UgSU9FcnJvcih1J0ludmFsaWQgdW5jb21wcmVzc2VkIHN0cmVhbSBzaXplLicpCgogICAgaWYgc2VsZi5fY3VycmVudF9vZmZzZXQgPj0gc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplOgogICAgICByZXR1cm4gYicnCgo8fGZpbV9ob2xlfD4KICAgIGlmIHNpemUgaXMgTm9uZToKICAgICAgc2l6ZSA9IHNlbGYuX3VuY29tcHJlc3NlZF9zdHJlYW1fc2l6ZQogICAgaWYgc2VsZi5fY3VycmVudF9vZmZzZXQgKyBzaXplID4gc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplOgogICAgICBzaXplID0gc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplIC0gc2VsZi5fY3VycmVudF9vZmZzZXQKCiAgICB1bmNvbXByZXNzZWRfZGF0YSA9IGInJwoKICAgIGlmIHNpemUgPT0gMDoKICAgICAgcmV0dXJuIHVuY29tcHJlc3NlZF9kYXRhCgogICAgd2hpbGUgc2l6ZSA+IHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhX3NpemU6CiAgICAgIHVuY29tcHJlc3NlZF9kYXRhID0gYicnLmpvaW4oWwogICAgICAgICAgdW5jb21wcmVzc2VkX2RhdGEsCiAgICAgICAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YVtzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQ6XV0pCgogICAgICByZW1haW5pbmdfdW5jb21wcmVzc2VkX2RhdGFfc2l6ZSA9ICgKICAgICAgICAgIHNlbGYuX3VuY29tcHJlc3NlZF9kYXRhX3NpemUgLSBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQpCgogICAgICBzZWxmLl9jdXJyZW50X29mZnNldCArPSByZW1haW5pbmdfdW5jb21wcmVzc2VkX2RhdGFfc2l6ZQogICAgICBzaXplIC09IHJlbWFpbmluZ191bmNvbXByZXNzZWRfZGF0YV9zaXplCgogICAgICBpZiBzZWxmLl9jdXJyZW50X29mZnNldCA+PSBzZWxmLl91bmNvbXByZXNzZWRfc3RyZWFtX3NpemU6CiAgICAgICAgYnJlYWsKCiAgICAgIHJlYWRfY291bnQgPSBzZWxmLl9SZWFkQ29tcHJlc3NlZERhdGEoc2VsZi5fQ09NUFJFU1NFRF9EQVRBX0JVRkZFUl9TSVpFKQogICAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQgPSAwCiAgICAgIGlmIHJlYWRfY291bnQgPT0gMDoKICAgICAgICBicmVhawoKICAgIGlmIHNpemUgPiAwOgogICAgICBzbGljZV9zdGFydF9vZmZzZXQgPSBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9vZmZzZXQKICAgICAgc2xpY2VfZW5kX29mZnNldCA9IHNsaWNlX3N0YXJ0X29mZnNldCArIHNpemUKCiAgICAgIHVuY29tcHJlc3NlZF9kYXRhID0gYicnLmpvaW4oWwogICAgICAgICAgdW5jb21wcmVzc2VkX2RhdGEsCiAgICAgICAgICBzZWxmLl91bmNvbXByZXNzZWRfZGF0YVtzbGljZV9zdGFydF9vZmZzZXQ6c2xpY2VfZW5kX29mZnNldF1dKQoKICAgICAgc2VsZi5fdW5jb21wcmVzc2VkX2RhdGFfb2Zmc2V0ICs9IHNpemUKICAgICAgc2VsZi5fY3VycmVudF9vZmZzZXQgKz0gc2l6ZQoKICAgIHJldHVybiB1bmNvbXByZXNzZWRfZGF0YQoKICBkZWYgc2VlayhzZWxmLCBvZmZzZXQsIHdoZW5jZT1vcy5TRUVLX1NFVCk6CiAgICAiIiJTZWVrcyBhbiBvZmZzZXQgd2l0aGluIHRoZSBmaWxlLWxpa2Ugb2JqZWN0LgoKICAgIEFyZ3M6CiAgICAgIG9mZnNldDogdGhlIG9mZnNldCB0byBzZWVrLgogICAgICB3aGVuY2U6IG9wdGlvbmFsIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgb2Zmc2V0IGlzIGFuIGFic29sdXRlCiAgICAgICAgICAgICAgb3IgcmVsYXRpdmUgcG9zaXRpb24gd2l0aGluIHRoZSBmaWxlLiBEZWZhdWx0IGlzIFNFRUtfU0VULgoKICAgIFJhaXNlczoKICAgICAgSU9FcnJvcjogaWYgdGhlIHNlZWsgZmFpbGVkLgogICAgIiIiCiAgICBpZiBub3Qgc2VsZi5faXNfb3BlbjoKICAgICAgcmFpc2UgSU9FcnJvcih1J05vdCBvcGVuZWQuJykKCiAgICBpZiBzZWxmLl9jdXJyZW50X29mZnNldCA8IDA6CiAgICAgIHJhaXNlIElPRXJyb3IoCiAgICAgICAgICB1J0ludmFsaWQgY3VycmVudCBvZmZzZXQ6IHswOmR9IHZhbHVlIGxlc3MgdGhhbiB6ZXJvLicuZm9ybWF0KAogICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfb2Zmc2V0KSkKCiAgICBpZiB3aGVuY2UgPT0gb3MuU0VFS19DVVI6CiAgICAgIG9mZnNldCArPSBzZWxmLl9jdXJyZW50X29mZnNldAogICAgZWxpZiB3aGVuY2UgPT0gb3MuU0VFS19FTkQ6CiAgICAgIG9mZnNldCArPSBzZWxmLl91bmNvbXByZXNzZWRfZGF0YV9zaXplCiAgICBlbGlmIHdoZW5jZSAhPSBvcy5TRUVLX1NFVDoKICAgICAgcmFpc2UgSU9FcnJvcih1J1Vuc3VwcG9ydGVkIHdoZW5jZS4nKQogICAgaWYgb2Zmc2V0IDwgMDoKICAgICAgcmFpc2UgSU9FcnJvcih1J0ludmFsaWQgb2Zmc2V0IHZhbHVlIGxlc3MgdGhhbiB6ZXJvLicpCgogICAgaWYgb2Zmc2V0ICE9IHNlbGYuX2N1cnJlbnRfb2Zmc2V0OgogICAgICBzZWxmLl9jdXJyZW50X29mZnNldCA9IG9mZnNldAogICAgICBzZWxmLl9yZWFsaWduX29mZnNldCA9IFRydWUKCiAgZGVmIGdldF9vZmZzZXQoc2VsZik6CiAgICAiIiJSZXR1cm5zIHRoZSBjdXJyZW50IG9mZnNldCBpbnRvIHRoZSBmaWxlLWxpa2Ugb2JqZWN0LgoKICAgIFJhaXNlczoKICAgICAgSU9FcnJvcjogaWYgdGhlIGZpbGUtbGlrZSBvYmplY3QgaGFzIG5vdCBiZWVuIG9wZW5lZC4KICAgICIiIgogICAgaWYgbm90IHNlbGYuX2lzX29wZW46CiAgICAgIHJhaXNlIElPRXJyb3IodSdOb3Qgb3BlbmVkLicpCgogICAgcmV0dXJuIHNlbGYuX2N1cnJlbnRfb2Zmc2V0CgogIGRlZiBnZXRfc2l6ZShzZWxmKToKICAgICIiIlJldHVybnMgdGhlIHNpemUgb2YgdGhlIGZpbGUtbGlrZSBvYmplY3QuCgogICAgUmFpc2VzOgogICAgICBJT0Vycm9yOiBpZiB0aGUgZmlsZS1saWtlIG9iamVjdCBoYXMgbm90IGJlZW4gb3BlbmVkLgogICAgIiIiCiAgICBpZiBub3Qgc2VsZi5faXNfb3BlbjoKICAgICAgcmFpc2UgSU9FcnJvcih1J05vdCBvcGVuZWQuJykKCiAgICBpZiBzZWxmLl91bmNvbXByZXNzZWRfc3RyZWFtX3NpemUgaXMgTm9uZToKICAgICAgc2VsZi5fdW5jb21wcmVzc2VkX3N0cmVhbV9zaXplID0gc2VsZi5fR2V0VW5jb21wcmVzc2VkU3RyZWFtU2l6ZSgpCgogICAgcmV0dXJuIHNlbGYuX3VuY29tcHJlc3NlZF9zdHJlYW1fc2l6ZQo8fGZpbV9zdWZmaXh8PgogICAgaWYgc2VsZi5fcmVhbGlnbl9vZmZzZXQ6CiAgICAgIHNlbGYuX0FsaWduVW5jb21wcmVzc2VkRGF0YU9mZnNldChzZWxmLl9jdXJyZW50X29mZnNldCkKICAgICAgc2VsZi5fcmVhbGlnbl9vZmZzZXQgPSBGYWxzZQoKPHxmaW1fZW5kfD4="]
["a9d762d147f46c5324ee2e1e825dd3232efa8c08-1","a9d762d147f46c5324ee2e1e825dd3232efa8c08",{"$cut":{"chars":17256,"head":"PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMTYsIDIwMTcsIDIwMTgsIDIwMTkgQ2hyaXMgQ3VtbWlucy4KIwojIGNsZ2VuIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIGNsZ2VuIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIwojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCBjbGdlbi4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiIiIlRoaXMgZmlsZSBkZWZpbmVzIGEgZGF0YWJhc2UgZm9yIHByZS1wcmVwcm9jZXNzZWQgY29udGVudCBmaWxlcy4iIiIKaW1wb3J0IGNvbnRleHRsaWIKaW1wb3J0IGRhdGV0aW1lCmltcG9ydCBoYXNobGliCmltcG9ydCBtdWx0aXByb2Nlc3NpbmcKaW1wb3J0IG9zCmltcG9ydCBwYXRobGliCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCB0ZW1wZmlsZQppbXBvcnQgdGltZQppbXBvcnQgdHlwaW5nCgppbXBvcnQgcHJvZ3Jlc3NiYXIKaW1wb3J0IHNxbGFsY2hlbXkgYXMgc3FsCmZyb20gc3FsYWxjaGVteS5leHQgaW1wb3J0IGRlY2xhcmF0aXZlCmZyb20gc3FsYWxjaGVteS5zcWwgaW1wb3J0IGZ1bmMKCmZyb20gZGVlcGxlYXJuaW5nLmNsZ2VuIGltcG9ydCBlcnJvcnMKZnJvbSBkZWVwbGVhcm5pbmcuY2xnZW4ucHJlcHJvY2Vzc29ycyBpbXBvcnQgcHJlcHJvY2Vzc29ycwpmcm9tIGRlZXBsZWFybmluZy5jbGdlbi5wcm90byBpbXBvcnQgY29ycHVzX3BiMgpmcm9tIGRlZXBsZWFybmluZy5jbGdlbi5wcm90byBpbXBvcnQgaW50ZXJuYWxfcGIyCmZyb20gbGFibTgucHkgaW1wb3J0IGFwcApmcm9tIGxhYm04LnB5IGltcG9ydCBmcwpmcm9tIGxhYm04LnB5IGltcG9ydCBodW1hbml6ZQpmcm9tIGxhYm04LnB5IGltcG9ydCBzcWx1dGlsCgpGTEFHUyA9IGFwcC5GTEFHUwoKQmFzZSA9IGRlY2xhcmF0aXZlLmRlY2xhcmF0aXZlX2Jhc2UoKQoKCmNsYXNzIE1ldGEoQmFzZSk6CiAgX190YWJsZW5hbWVfXyA9ICJtZXRhIgoKICBrZXk6IHN0ciA9IHNxbC5Db2x1bW4oc3FsLlN0cmluZygxMDI0KSwgcHJpbWFyeV9rZXk9VHJ1ZSkKICB2YWx1ZTogc3RyID0gc3FsLkNvbHVtbihzcWwuU3RyaW5nKDEwMjQpLCBudWxsYWJsZT1GYWxzZSkKCgpjbGFzcyBQcmVwcm9jZXNzZWRDb250ZW50RmlsZShCYXNlKToKICBfX3RhYmxlbmFtZV9fID0gInByZXByb2Nlc3NlZF9jb250ZW50ZmlsZXMiCgogIGlkOiBpbnQgPSBzcWwuQ29sdW1uKHNxbC5JbnRlZ2VyLCBwcmltYXJ5X2tleT1UcnVlKQogICMgUmVsYXRpdmUgcGF0aCBvZiB0aGUgaW5wdXQgZmlsZSB3aXRoaW4gdGhlIGNvbnRlbnQgZmlsZXMuCiAgaW5wdXRfcmVscGF0aDogc3RyID0gc3FsLkNvbHVtbihzcWwuU3RyaW5nKDMwNzIpLCBudWxsYWJsZT1GYWxzZSwgdW5pcXVlPVRydWUpCiAgIyBDaGVja3N1bSBvZiB0aGUgaW5wdXQgZmlsZS4KICBpbnB1dF9zaGEyNTY6IHN0ciA9IHNxbC5Db2x1bW4oc3FsLlN0cmluZyg2NCksIG51bGxhYmxlPUZhbHNlKQogIGlucHV0X2NoYXJjb3VudCA9IHNxbC5Db2x1bW4oc3FsLkludGVnZXIsIG51bGxhYmxlPUZhbHNlKQogIGlucHV0X2xpbmVjb3VudCA9IHNxbC5Db2x1bW4oc3FsLkludGVnZXIsIG51bGxhYmxlPUZhbHNlKQogICMgQ2hlY2tzdW0gb2YgdGhlIHByZXByb2Nlc3NlZCBmaWxlLgogIHNoYTI1Njogc3RyID0gc3FsLkNvbHVtbihzcWwuU3RyaW5nKDY0KSwgbnVsbGFibGU9RmFsc2UsIGluZGV4PVRydWUpCiAgY2hhcmNvdW50ID0gc3FsLkNvbHVtbihzcWwuSW50ZWdlciwgbnVsbGFibGU9RmFsc2UpCiAgbGluZWNvdW50ID0gc3FsLkNvbHVtbihzcWwuSW50ZWdlciwgbnVsbGFibGU9RmFsc2UpCiAgdGV4dDogc3RyID0gc3FsLkNvbHVtbigKICAgIHNxbHV0aWwuQ29sdW1uVHlwZXMuVW5ib3VuZGVkVW5pY29kZVRleHQoKSwgbnVsbGFibGU9RmFsc2UKICApCiAgIyBUcnVlIGlmIHByZS1wcm9jZXNzaW5nIHN1Y2NlZWRlZCwgZWxzZSBGYWxzZS4KICBwcmVwcm9jZXNzaW5nX3N1Y2NlZWRlZDogYm9vbCA9IHNxbC5Db2x1bW4oc3FsLkJvb2xlYW4sIG51bGxhYmxlPUZhbHNlKQogICMgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgcHJlLXByZXByb2Nlc3NpbmcgdG9vay4KICBwcmVwcm9jZXNzX3RpbWVfbXM6IGludCA9IHNxbC5Db2x1bW4oc3FsLkludGVnZXIsIG51bGxhYmxlPUZhbHNlKQogICMgUHJlLXByb2Nlc3NpbmcgaXMgcGFyYWxsZWxpemFibGUsIHNvIHRoZSBhY3R1YWwgd2FsbCB0aW1lIG9mIHByZS1wcm9jZXNzaW5nCiAgIyBtYXkgYmUgbXVjaCBsZXNzIHRoYW4gdGhlIHN1bSBvZiBhbGwgcHJlcHJvY2Vzc190aW1lX21zLiBUaGlzIGNvbHVtbgogICMgY291bnRzIHRoZSBlZmZlY3RpdmUgbnVtYmVyIG9mICJyZWFsIiBtaWxsaXNlY29uZHMgZHVyaW5nIHByZS1wcm9jZXNzaW5nCiAgIyBiZXR3ZWVuIHRoZSBsYXN0IHByZS1wcm9jZXNzZWQgcmVzdWx0IGFuZCB0aGlzIHJlc3VsdCBjb21pbmcgaW4uIFRoZSBpZGVhCiAgIyBpcyB0aGF0IHN1bW1pbmcgdGhpcyBjb2x1bW4gcHJvdmlkZXMgYW4gYWNjdXJhdGUgdG90YWwgb2YgdGhlIGFjdHVhbCB0aW1lCiAgIyBzcGVudCBwcmUtcHJvY2Vzc2luZyBhbiBlbnRpcmUgY29ycHVzLiBXaWxsIGJlIDw9IHByZXByb2Nlc3NfdGltZV9t"}}]
["c1ff22833a71873501d023f4a1fc330a5550494a-1","c1ff22833a71873501d023f4a1fc330a5550494a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNsaWNrCmltcG9ydCBwc3ljb3BnMgoKZnJvbSBzcWxhbGNoZW15LmV4YyBpbXBvcnQgREJBUElFcnJvcgpmcm9tIG11bHRpcHJvY2Vzc2luZy5kdW1teSBpbXBvcnQgUG9vbCBhcyBUaHJlYWRQb29sCmZyb20gZmxhc2sgaW1wb3J0IGN1cnJlbnRfYXBwCgpmcm9tIGFwcC5hcGkudXRpbHMuaW5jbHVkZS51c2VyX2luZm8gaW1wb3J0IFVzZXIKZnJvbSBhcHAuZXh0ZW5zaW9ucyBpbXBvcnQgZGIKCmZyb20gdGVzdHMuZmFjdG9yaWVzIGltcG9ydCBNaW5lRmFjdG9yeSwgTWluZVBhcnR5QXBwb2ludG1lbnRGYWN0b3J5LCBOT1dTdWJtaXNzaW9uRmFjdG9yeSwgTk9XQXBwbGljYXRpb25JZGVudGl0eUZhY3RvcnkKCgpkZWYgcmVnaXN0ZXJfY29tbWFuZHMoYXBwKToKICAgIEBhcHAuY2xpLmNvbW1hbmQoKQogICAgZGVmIGltcG9ydF9pZGlyKCk6CiAgICAgICAgZnJvbSBhcHAuY2xpX2pvYnMuSURJUl9qb2JzIGltcG9ydCBpbXBvcnRfZW1wcl9pZGlyX3VzZXJzCiAgICAgICAgaW1wb3J0X2VtcHJfaWRpcl91c2VycygpCgogICAgQGFwcC5jbGkuY29tbWFuZCgpCiAgICBkZWYgdGVzdF9ucmlzX2FwaSgpOgogICAgICAgIGZyb20gYXBwLmFwaS5zZXJ2aWNlcy5OUklTX0FQSV9zZXJ2aWNlIGltcG9ydCBfZ2V0X05SSVNfZGF0YV9ieV9taW5lCiAgICAgICAgcHJpbnQoX2dldF9OUklTX2RhdGFfYnlfbWluZSgiIiwgIjAxMDAyODciKSkKCiAgICBAYXBwLmNsaS5jb21tYW5kKCkKICAgIEBjbGljay5hcmd1bWVudCgnbnVtJykKICAgIEBjbGljay5hcmd1bWVudCgndGhyZWFkaW5nJywgZGVmYXVsdD1UcnVlKQogICAgZGVmIGNyZWF0ZV9kYXRhKG51bSwgdGhyZWFkaW5nKToKICAgICAgICBmcm9tIC4gaW1wb3J0IGF1dGgKICAgICAgICAiIiIKICAgICAgICBDcmVhdGVzIGR1bW15IGRhdGEgaW4gdGhlIGRhdGFiYXNlLiBJZiB0aHJlYWRpbmc9VHJ1ZQogICAgICAgIFVzZSBUaHJlYWRpbmcgYW5kIG11bHRpcHJvY2Vzc2luZyB0byBjcmVhdGUgcmVjb3JkcyBpbiBjaHVua3Mgb2YgMTAwLgoKICAgICAgICA6cGFyYW0gbnVtOiBudW1iZXIgb2YgcmVjb3JkcyBjcmVhdGUKICAgICAgICA6cGFyYW0gdGhyZWFkaW5nOiB1c2UgdGhyZWFkaW5nIG9yIG5vdAogICAgICAgIDpyZXR1cm46IE5vbmUKICAgICAgICAiIiIKICAgICAgICBVc2VyLl90ZXN0X21vZGUgPSBUcnVlCgogICAgICAgIGlmIHRocmVhZGluZzoKICAgICAgICAgICAgYmF0Y2hfc2l6ZSA9IDI1CiAgICAgICAgICAgIG51bSA9IGludChudW0pCgogICAgICAgICAgICAjIEJyZWFrIG51bSBpbnRvIGEgbGlzdCBvZiBpbnRzIG9mIHNpemUgYmF0Y2hfc2l6ZSwgdGhlbiBhcHBlbmQgcmVtYWluZGVyLgogICAgICAgICAgICAjIEUuZy4gNTIwIC0+IFsxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMjBdCiAgICAgICAgICAgIGZ1bGxfYmF0Y2hlcyA9IGludChudW0gLyBiYXRjaF9zaXplKQogICAgICAgICAgICBiYXRjaGVzID0gW2JhdGNoX3NpemVdICogZnVsbF9iYXRjaGVzCiAgICAgICAgICAgIGlmIDAgPCBudW0gJSBiYXRjaF9zaXplOgogICAgICAgICAgICAgICAgYmF0Y2hlcy5hcHBlbmQobnVtICUgYmF0Y2hfc2l6ZSkKCiAgICAgICAgICAgIHBvb2wgPSBUaHJlYWRQb29sKHByb2Nlc3Nlcz0xNikKICAgICAgICAgICAgcmVzdWx0cyA9IHBvb2wubWFwKF9jcmVhdGVfZGF0YSwgYmF0Y2hlcykKICAgICAgICAgICAgcG9vbC5jbG9zZSgpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgX2NyZWF0ZV9kYXRhKG51bSkKCjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgbWluZSA9IE1pbmVGYWN0b3J5KCkKICAgICAgICAgICAgICAgIGVvciA9IE1pbmVQYXJ0eUFwcG9pbnRtZW50RmFjdG9yeShtaW5lPW1pbmUsIG1pbmVfcGFydHlfYXBwdF90eXBlX2NvZGU9J0VPUicpCiAgICAgICAgICAgICAgICBtaW5lX21hbmFnZXIgPSBNaW5lUGFydHlBcHBvaW50bWVudEZhY3RvcnkoCiAgICAgICAgICAgICAgICAgICAgbWluZT1taW5lLCBtaW5lX3BhcnR5X2FwcHRfdHlwZV9jb2RlPSdNTUcnKQogICAgICAgICAgICAgICAgaWYgbGVuKG1pbmUubWluZV9wZXJtaXQpID4gMDoKICAgICAgICAgICAgICAgICAgICBwZXJtaXR0ZWUgPSBNaW5lUGFydHlBcHBvaW50bWVudEZhY3RvcnkocGVybWl0dGVlPVRydWUsIHBhcnR5X19jb21wYW55PVRydWUpCiAgICAgICAgICAgICAgICBOT1dBcHBsaWNhdGlvbklkZW50aXR5RmFjdG9yeShtaW5lPW1pbmUpCiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIGRiLnNlc3Npb24uY29tbWl0KCkKICAgICAgICAgICAgICAgIHByaW50KGYnQ3JlYXRlZCB7bnVtfSByYW5kb20gbWluZXMgd2l0aCByZWxhdGVkIGRhdGEuJykKICAgICAgICAgICAgZXhjZXB0IERCQVBJRXJyb3I6CiAgICAgICAgICAgICAgICBkYi5zZXNzaW9uLnJvbGxiYWNrKCkKICAgICAgICAgICAgICAgIHJhaXNlCgogICAgQGFwcC5jbGkuY29tbWFuZCgpCiAgICBkZWYgcnVuX2V0bCgpOgogICAgICAgIGZyb20gYXBwLmNsaV9qb2JzIGltcG9ydCBFVExfam9icwogICAgICAgIEVUTF9qb2JzLnJ1bl9FVEwoKQoKICAgIEBhcHAuY2xpLmNvbW1hbmQoKQogICAgZGVmIHJ1bl9hZGRyZXNzX2V0bCgpOgogICAgICAgIGZyb20gYXBwLmNsaV9qb2JzIGltcG9ydCBFVExfam9icwogICAgICAgIEVUTF9qb2JzLnJ1bl9hZGRyZXNzX2V0bCgpCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgX2NyZWF0ZV9kYXRhKG51bSk6CiAgICAgICAgVXNlci5fdGVzdF9tb2RlID0gVHJ1ZQogICAgICAgIHdpdGggYXBwLmFwcF9jb250ZXh0KCk6CiAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKGludChudW0pKToKPHxmaW1fZW5kfD4="]
["417986a35e561fae79b1e1b4781fa918a57cb6ac-1","417986a35e561fae79b1e1b4781fa918a57cb6ac","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IGNzdgppbXBvcnQgbG9nZ2luZwppbXBvcnQgbWF0aAppbXBvcnQgb3BlcmF0b3IKaW1wb3J0IG9zCmZyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKZnJvbSB0eXBpbmcgaW1wb3J0IFRZUEVfQ0hFQ0tJTkcsIFR1cGxlCgppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gcXViZWtpdC5tb2xlY3VsZXMgaW1wb3J0IExpZ2FuZApmcm9tIHF1YmVraXQudXRpbHMgaW1wb3J0IGNvbnN0YW50cwpmcm9tIHF1YmVraXQudXRpbHMuY29uc3RhbnRzIGltcG9ydCBDT0xPVVJTCmZyb20gcXViZWtpdC51dGlscy5leGNlcHRpb25zIGltcG9ydCBGaWxlVHlwZUVycm9yLCBUb3BvbG9neU1pc21hdGNoCgppZiBUWVBFX0NIRUNLSU5HOgogICAgZnJvbSBxdWJla2l0Lm1vbGVjdWxlcyBpbXBvcnQgVG9yc2lvbkRyaXZlRGF0YQoKIyBUT0RPIE1vdmUgY3N2IHN0dWZmIGZvciBidWxrIHJ1bnMgdG8gZmlsZV9oYW5kbGluZy5weQoKCmRlZiBtb2xfZGF0YV9mcm9tX2Nzdihjc3ZfbmFtZTogc3RyKToKICAgICIiIgogICAgU2NhbiB0aGUgY3N2IGZpbGUgdG8gZmluZCB0aGUgcm93IHdpdGggdGhlIGRlc2lyZWQgbW9sZWN1bGUgZGF0YS4KICAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IG9mIGRpY3Rpb25hcmllcyBpbiB0aGUgZm9ybToKICAgIHsnbWV0aGFuZSc6IHsnc21pbGVzJzogJ0MnLCAnbXVsdGlwbGljaXR5JzogMSwgLi4ufSwgJ2V0aGFuZSc6IHsnc21pbGVzJzogJ0MnLCAuLi59LCAuLi59CiAgICAiIiIKCiAgICB3aXRoIG9wZW4oY3N2X25hbWUsICJyIikgYXMgY3N2X2ZpbGU6CgogICAgICAgIG1vbF9jb25mcyA9IGNzdi5EaWN0UmVhZGVyKGNzdl9maWxlKQoKICAgICAgICByb3dzID0gW10KICAgICAgICBmb3Igcm93IGluIG1vbF9jb25mczoKCiAgICAgICAgICAgICMgQ29udmVydHMgdG8gb3JkaW5hcnkgZGljdCByYXRoZXIgdGhhbiBvcmRlcmVkLgogICAgICAgICAgICByb3cgPSBkaWN0KHJvdykKICAgICAgICAgICAgIyBJZiB0aGVyZSBpcyBubyBjb25maWcgZ2l2ZW4gYXNzdW1lIGl0cyB0aGUgZGVmYXVsdAogICAgICAgICAgICByb3dbInNtaWxlcyJdID0gcm93WyJzbWlsZXMiXSBpZiByb3dbInNtaWxlcyJdIGVsc2UgTm9uZQogICAgICAgICAgICByb3dbIm11bHRpcGxpY2l0eSJdID0gKAogICAgICAgICAgICAgICAgaW50KGZsb2F0KHJvd1sibXVsdGlwbGljaXR5Il0pKSBpZiByb3dbIm11bHRpcGxpY2l0eSJdIGVsc2UgMQogICAgICAgICAgICApCiAgICAgICAgICAgIHJvd1siY29uZmlnX2ZpbGUiXSA9IHJvd1siY29uZmlnX2ZpbGUiXSBpZiByb3dbImNvbmZpZ19maWxlIl0gZWxzZSBOb25lCiAgICAgICAgICAgIHJvd1sicmVzdGFydCJdID0gcm93WyJyZXN0YXJ0Il0gaWYgcm93WyJyZXN0YXJ0Il0gZWxzZSBOb25lCiAgICAgICAgICAgIHJvd1siZW5kIl0gPSByb3dbImVuZCJdIGlmIHJvd1siZW5kIl0gZWxzZSBOb25lCiAgICAgICAgICAgIHJvd3MuYXBwZW5kKHJvdykKCiAgICAjIENyZWF0ZXMgdGhlIG5lc3RlZCBkaWN0aW9uYXJpZXMgd2l0aCB0aGUgbmFtZXMgYXMgdGhlIGtleXMKICAgIGZpbmFsID0ge3Jvd1sibmFtZSJdOiByb3cgZm9yIHJvdyBpbiByb3dzfQoKICAgICMgUmVtb3ZlcyB0aGUgbmFtZXMgZnJvbSB0aGUgc3ViLWRpY3Rpb25hcmllczoKICAgICMgZS5nLiB7J21ldGhhbmUnOiB7J25hbWUnOiAnbWV0aGFuZScsICdzbWlsZXMnOiAnQycsIC4uLn0sIC4uLn0KICAgICMgLS0tPiB7J21ldGhhbmUnOiB7J3NtaWxlcyc6ICdDJywgLi4ufSwgLi4ufQogICAgZm9yIHZhbCBpbiBmaW5hbC52YWx1ZXMoKToKICAgICAgICBkZWwgdmFsWyJuYW1lIl0KCiAgICByZXR1cm4gZmluYWwKCgpkZWYgZ2VuZXJhdGVfYnVsa19jc3YoY3N2X25hbWUsIG1heF9leGVjcz1Ob25lKToKICAgICIiIgogICAgR2VuZXJhdGVzIGEgY3N2IHdpdGggbWluaW1hbCBpbmZvcm1hdGlvbiBpbnNpZGUuCiAgICBDb250YWlucyBvbmx5IGhlYWRlcnMgYW5kIGEgcm93IG9mIGRlZmF1bHRzIGFuZCBwb3B1bGF0ZXMgYWxsIG9mIHRoZSBuYW1lZCBmaWxlcyB3aGVyZSBhdmFpbGFibGUuCiAgICBGb3IgZXhhbXBsZSwgMTAgcGRiIGZpbGVzIHdpdGggYSB2YWx1ZSBvZiBtYXhfZXhlY3M9NiB3aWxsIGdlbmVyYXRlIHR3byBjc3YgZmlsZXMsCiAgICBvbmUgY29udGFpbmluZyA2IG9mIHRob3NlIGZpbGVzLCB0aGUgb3RoZXIgd2l0aCB0aGUgcmVtYWluaW5nIDQuCgogICAgOnBhcmFtIGNzdl9uYW1lOiAoc3RyKSBuYW1lIG9mIHRoZSBjc3YgZmlsZSBiZWluZyBnZW5lcmF0ZWQKICAgIDpwYXJhbSBtYXhfZXhlY3M6IChpbnQgb3IgTm9uZSkgZGV0ZXJtaW5lcyB0aGUgbWF4IG51bWJlciBvZiBtb2xlY3VsZXMtLWFuZCB0aGVyZWZvcmUgZXhlY3V0aW9ucy0tcGVyIGNzdiBmaWxlLgogICAgIiIiCgogICAgaWYgY3N2X25hbWVbLTQ6XSAhPSAiLmNzdiI6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJJbnZhbGlkIG9yIHVuc3BlY2lmaWVkIGZpbGUgdHlwZS4gRmlsZSBtdXN0IGJlIC5jc3YiKQoKICAgICMgRmluZCBhbnkgbG9jYWwgcGRiIGZpbGVzIHRvIHdyaXRlIHNhbXBsZSBjb25maWdzCiAgICBmaWxlcyA9IFtdCiAgICBmb3IgZmlsZSBpbiBvcy5saXN0ZGlyKCIuIik6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBfID0gTGlnYW5kLmZyb21fZmlsZShmaWxlX25hbWU9ZmlsZSkKICAgICAgICAgICAgZmlsZXMuYXBwZW5kKGZpbGUpCiAgICAgICAgZXhjZXB0IEZpbGVUeXBlRXJyb3I6CiAgICAgICAgICAgIGNvbnRpbnVlCgogICAgIyBJZiBtYXggbnVtYmVyIG9mIHBkYnMgcGVyIGZpbGUgaXMgdW5zcGVjaWZpZWQsIGp1c3QgcHV0IHRoZW0gYWxsIGluIG9uZSBmaWxlLgogICAgaWYgbWF4X2V4ZWNzIGlzIE5vbmU6CiAgICAgICAgd2l0aCBvcGVuKGNzdl9uYW1lLCAidyIpIGFzIGNzdl9maWxlOgoKICAgICAgICAgICAgZmlsZV93cml0ZXIgPSBjc3Yud3JpdGVyKAogICAgICAgICAgICAgICAgY3N2X2ZpbGUsIGRlbGltaXRlcj0iLCIsIHF1b3RlY2hhcj0ifCIsIHF1b3Rpbmc9Y3N2LlFVT1RFX01JTklNQUwKICAgICAgICAgICAgKQogICAgICAgICAgICBmaWxlX3dyaXRlci53cml0ZXJvdygKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgInNtaWxlcyIsCiAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxpY2l0eSIsCiAgICAgICAgICAgICAgICAgICAgImNvbmZpZ19maWxlIiwKICAgICAgICAgICAgICAgICAgICAicmVzdGFydCIsCiAgICAgICAgICAgICAgICAgICAgImVuZCIsCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICkKICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CiAgICAgICAgICAgICAgICBmaWxlX3dyaXRlci53cml0ZXJvdyhbZmlsZSwgIiIsIDEsICIiLCAiIiwgIiJdKQogICAgICAgIHByaW50KGYie2Nzdl9uYW1lfSBnZW5lcmF0ZWQuIiwgZmx1c2g9VHJ1ZSkKICAgICAgICByZXR1cm4KCiAgICB0cnk6CiAgICAgICAgbWF4X2V4ZWNzID0gaW50KG1heF9leGVjcykKICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgICAiTnVtYmVyIG9mIGV4ZWN1dGlvbnMgbXVzdCBiZSBwcm92aWRlZCBhcyBhbiBpbnQgZ3JlYXRlciB0aGFuIDEuIgogICAgICAgICkKICAgIGlmIG1heF9leGVjcyA+IGxlbihmaWxlcyk6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgIk51bWJlciBvZiBleGVjdXRpb25zIGNhbm5vdCBleGNlZWQgdGhlIG51bWJlciBvZiBmaWxlcyBwcm92aWRlZC4iCiAgICAgICAgKQoKICAgICMgSWYgbWF4IG51bWJlciBvZiBwZGJzIHBlciBmaWxlIGlzIHNwZWNpZmllZCwgc3ByZWFkIHRoZW0gYWNyb3NzIHNldmVyYWwgY3N2IGZpbGVzLgogICAgbnVtX2NzdnMgPSBtYXRoLmNlaWwobGVuKGZpbGVzKSAvIG1heF9leGVjcykKCiAgICBmb3IgY3N2X2NvdW50IGluIHJhbmdlKG51bV9jc3ZzKToKICAgICAgICB3aXRoIG9wZW4oZiJ7Y3N2X25hbWVbOi00XX1fe3N0cihjc3ZfY291bnQpLnpmaWxsKDIpfS5jc3YiLCAidyIpIGFzIGNzdl9maWxlOgogICAgICAgICAgICBmaWxlX3dyaXRlciA9IGNzdi53cml0ZXIoCiAgICAgICAgICAgICAgICBjc3ZfZmlsZSwgZGVsaW1pdGVyPSIsIiwgcXVvdGVjaGFyPSJ8IiwgcXVvdGluZz1jc3YuUVVPVEVfTUlOSU1BTAogICAgICAgICAgICApCiAgICAgICAgICAgIGZpbGVfd3JpdGVyLndyaXRlcm93KAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAic21pbGVzIiwKICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGljaXR5IiwKICAgICAgICAgICAgICAgICAgICAiY29uZmlnX2ZpbGUiLAogICAgICAgICAgICAgICAgICAgICJyZXN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICAiZW5kIiwKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgKQoKICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXNbY3N2X2NvdW50ICogbWF4X2V4ZWNzIDogKGNzdl9jb3VudCArIDEpICogbWF4X2V4ZWNzXToKICAgICAgICAgICAgICAgIGZpbGVfd3JpdGVyLndyaXRlcm93KFtmaWxlLCAiIiwgMSwgIiIsICIiLCAiIl0pCgogICAgICAgIHByaW50KGYie2Nzdl9uYW1lWzotNF19X3tzdHIoY3N2X2NvdW50KS56ZmlsbCgyKX0uY3N2IGdlbmVyYXRlZC4iLCBmbHVzaD1UcnVlKQoKCkBjb250ZXh0bWFuYWdlcgpkZWYgX2Fzc2VydF93cmFwcGVyKGV4Y2VwdGlvbl90eXBlKToKICAgICIiIgogICAgTWFrZXMgYXNzZXJ0aW9ucyBtb3JlIGluZm9ybWF0aXZlIHdoZW4gYW4gRXhjZXB0aW9uIGlzIHRocm93bi4KICAgIFJhdGhlciB0aGFuIGp1c3QgZ2V0dGluZyAnQXNzZXJ0aW9uRXJyb3InIGFsbCB0aGUgdGltZSwgYW4gYWN0dWFsIG5hbWVkIGV4Y2VwdGlvbiBjYW4gYmUgcGFzc2VkLgogICAgQ2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgc2FtZSAnd2l0aCcgc3RhdGVtZW50IGZvciB0aGUgc2FtZSBleGNlcHRpb24gdHlwZSBidXQgZGlmZmVyZW50IGV4Y2VwdGlvbnMuCgogICAgU2ltcGxlIGV4YW1wbGUgdXNlIGNhc2VzOgoKICAgICAgICB3aXRoIGFzc2VydF93cmFwcGVyKFZhbHVlRXJyb3IpOgogICAgICAgICAgICBhc3NlcnQgKGFyZzEgPiAwKSwgJ2FyZzEgY2Fubm90IGJlIG5vbi1wb3NpdGl2ZS4nCiAgICAgICAgICAgIGFzc2VydCAoYXJnMiAhPSAxMiksICdhcmcyIGNhbm5vdCBiZSAxMi4nCiAgICAgICAgd2l0aCBhc3NlcnRfd3JhcHBlcihUeXBlRXJyb3IpOgogICAgICAgICAgICBhc3NlcnQgKHR5cGUoYXJnMSkgaXMgbm90IGZsb2F0KSwgJ2FyZzEgbXVzdCBub3QgYmUgYSBmbG9hdC4nCiAgICAiIiIKCiAgICB0cnk6CiAgICAgICAgeWllbGQKICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvciBhcyBleGM6CiAgICAgICAgcmFpc2UgZXhjZXB0aW9uX3R5cGUoKmV4Yy5hcmdzKSBmcm9tIE5vbmUKCgpkZWYgY2hlY2tfc3ltbWV0cnkobWF0cml4LCBlcnJvcj0xZS01KToKICAgICIiIgogICAgQ2hlY2sgbWF0cml4IGlzIHN5bW1ldHJpYyB0byB3aXRoaW4gc29tZSBlcnJvci4KICAgIDpwYXJhbSBtYXRyaXg6IG51bXB5IGFycmF5IG9mIEhlc3NpYW4gbWF0cml4CiAgICA6cGFyYW0gZXJyb3I6IGFsbG93ZWQgZXJyb3IgYmV0d2VlbiBtYXRyaXggZWxlbWVudHMgd2hpY2ggc2hvdWxkIGJlIHN5bW1ldHJpYyAoaSxqKSwgKGosaSkKICAgIEVycm9yIGlzIHJhaXNlZCBpZiBtYXRyaXggaXMgbm90IHN5bW1ldHJpYyB3aXRoaW4gZXJyb3IKICAgICIiIgoKICAgICMgQ2hlY2sgdGhlIG1hdHJpeCB0cmFuc3Bvc2UgaXMgZXF1YWwgdG8gdGhlIG1hdHJpeCB3aXRoaW4gZXJyb3IuCiAgICB3aXRoIF9hc3NlcnRfd3JhcHBlcihWYWx1ZUVycm9yKToKICAgICAgICBhc3NlcnQgbnAuYWxsY2xvc2UobWF0cml4LCBtYXRyaXguVCwgYXRvbD1lcnJvciksICJNYXRyaXggaXMgbm90IHN5bW1ldHJpYy4iCgogICAgcHJpbnQoCiAgICAgICAgZiJ7Q09MT1VSUy5wdXJwbGV9U3ltbWV0cnkgY2hlY2sgc3VjY2Vzc2Z1bC4gIgogICAgICAgIGYiVGhlIG1hdHJpeCBpcyBzeW1tZXRyaWMgd2l0aGluIGFuIGVycm9yIG9mIHtlcnJvcn0ue0NPTE9VUlMuZW5kfSIKICAgICkKCgpkZWYgY29sbGVjdF9hcmNoaXZlX3Rkcml2ZSh0ZHJpdmVfcmVjb3JkLCBjbGllbnQpOgogICAgIiIiCiAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGluIGEgUUNBcmNoaXZlIHRkcml2ZSByZWNvcmQgYW5kIGNvbGxlY3RzIGFsbCBvZiB0aGUgZmluYWwgZ2VvbWV0cmllcyBhbmQgZW5lcmdpZXMgdG8gYmUgdXNlZCBpbgogICAgdG9yc2lvbiBmaXR0aW5nLgogICAgOnBhcmFtIHRkcml2ZV9yZWNvcmQ6IEEgUUNBcmNoaXZlIGRhdGEgb2JqZWN0IGNvbnRhaW5pbmcgYW4gb3B0aW1pc2F0aW9uIGFuZCBlbmVyZ3kgZGljdGlvbmFyeQogICAgOnBhcmFtIGNsaWVudDogIEEgUUNQb3J0YWwgY2xpZW50IGluc3RhbmNlLgogICAgOnJldHVybjogUVVCRUtpdCBxbV9zY2FucyBkYXRhOiBsaXN0IG9mIGVuZXJnaWVzIGFuZCBnZW9tZXRyaWVzIFtucC5hcnJheShlbmVyZ2llcyksIFtucC5hcnJheShnZW9tZXRyeSldXQogICAgIiIiCgogICAgIyBTb3J0IHRoZSBkaWN0aW9uYXJ5IGJ5IGFzY2VuZGluZyBrZXlzCiAgICBlbmVyZ3lfZGljdCA9IHsKICAgICAgICBpbnQoa2V5LnN0cmlwKCJdWyIpKTogdmFsdWUKICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiB0ZHJpdmVfcmVjb3JkLmZpbmFsX2VuZXJneV9kaWN0Lml0ZW1zKCkKICAgIH0KICAgIHNvcnRlZF9lbmVyZ2llcyA9IHNvcnRlZChlbmVyZ3lfZGljdC5pdGVtcygpLCBrZXk9b3BlcmF0b3IuaXRlbWdldHRlcigwKSkKCiAgICBlbmVyZ2llcyA9IG5wLmFycmF5KFt4WzFdIGZvciB4IGluIHNvcnRlZF9lbmVyZ2llc10pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBnZW9tZXRyeSA9IFtdCiAgICAjIE5vdyBtYWtlIHRoZSBvcHRpbWl6YXRpb24gZGljdCBhbmQgc3RvcmUgYW4gYXJyYXkgb2YgdGhlIGZpbmFsIGdlb21ldHJ5CiAgICBmb3IgcGFpciBpbiBzb3J0ZWRfZW5lcmdpZXM6Cjx8ZmltX2VuZHw+"]
["417986a35e561fae79b1e1b4781fa918a57cb6ac-2","417986a35e561fae79b1e1b4781fa918a57cb6ac","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IGNzdgppbXBvcnQgbG9nZ2luZwppbXBvcnQgbWF0aAppbXBvcnQgb3BlcmF0b3IKaW1wb3J0IG9zCmZyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKZnJvbSB0eXBpbmcgaW1wb3J0IFRZUEVfQ0hFQ0tJTkcsIFR1cGxlCgppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gcXViZWtpdC5tb2xlY3VsZXMgaW1wb3J0IExpZ2FuZApmcm9tIHF1YmVraXQudXRpbHMgaW1wb3J0IGNvbnN0YW50cwpmcm9tIHF1YmVraXQudXRpbHMuY29uc3RhbnRzIGltcG9ydCBDT0xPVVJTCmZyb20gcXViZWtpdC51dGlscy5leGNlcHRpb25zIGltcG9ydCBGaWxlVHlwZUVycm9yLCBUb3BvbG9neU1pc21hdGNoCgppZiBUWVBFX0NIRUNLSU5HOgogICAgZnJvbSBxdWJla2l0Lm1vbGVjdWxlcyBpbXBvcnQgVG9yc2lvbkRyaXZlRGF0YQoKIyBUT0RPIE1vdmUgY3N2IHN0dWZmIGZvciBidWxrIHJ1bnMgdG8gZmlsZV9oYW5kbGluZy5weQoKCmRlZiBtb2xfZGF0YV9mcm9tX2Nzdihjc3ZfbmFtZTogc3RyKToKICAgICIiIgogICAgU2NhbiB0aGUgY3N2IGZpbGUgdG8gZmluZCB0aGUgcm93IHdpdGggdGhlIGRlc2lyZWQgbW9sZWN1bGUgZGF0YS4KICAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IG9mIGRpY3Rpb25hcmllcyBpbiB0aGUgZm9ybToKICAgIHsnbWV0aGFuZSc6IHsnc21pbGVzJzogJ0MnLCAnbXVsdGlwbGljaXR5JzogMSwgLi4ufSwgJ2V0aGFuZSc6IHsnc21pbGVzJzogJ0MnLCAuLi59LCAuLi59CiAgICAiIiIKCiAgICB3aXRoIG9wZW4oY3N2X25hbWUsICJyIikgYXMgY3N2X2ZpbGU6CgogICAgICAgIG1vbF9jb25mcyA9IGNzdi5EaWN0UmVhZGVyKGNzdl9maWxlKQoKICAgICAgICByb3dzID0gW10KICAgICAgICBmb3Igcm93IGluIG1vbF9jb25mczoKCiAgICAgICAgICAgICMgQ29udmVydHMgdG8gb3JkaW5hcnkgZGljdCByYXRoZXIgdGhhbiBvcmRlcmVkLgogICAgICAgICAgICByb3cgPSBkaWN0KHJvdykKICAgICAgICAgICAgIyBJZiB0aGVyZSBpcyBubyBjb25maWcgZ2l2ZW4gYXNzdW1lIGl0cyB0aGUgZGVmYXVsdAogICAgICAgICAgICByb3dbInNtaWxlcyJdID0gcm93WyJzbWlsZXMiXSBpZiByb3dbInNtaWxlcyJdIGVsc2UgTm9uZQogICAgICAgICAgICByb3dbIm11bHRpcGxpY2l0eSJdID0gKAogICAgICAgICAgICAgICAgaW50KGZsb2F0KHJvd1sibXVsdGlwbGljaXR5Il0pKSBpZiByb3dbIm11bHRpcGxpY2l0eSJdIGVsc2UgMQogICAgICAgICAgICApCiAgICAgICAgICAgIHJvd1siY29uZmlnX2ZpbGUiXSA9IHJvd1siY29uZmlnX2ZpbGUiXSBpZiByb3dbImNvbmZpZ19maWxlIl0gZWxzZSBOb25lCiAgICAgICAgICAgIHJvd1sicmVzdGFydCJdID0gcm93WyJyZXN0YXJ0Il0gaWYgcm93WyJyZXN0YXJ0Il0gZWxzZSBOb25lCiAgICAgICAgICAgIHJvd1siZW5kIl0gPSByb3dbImVuZCJdIGlmIHJvd1siZW5kIl0gZWxzZSBOb25lCiAgICAgICAgICAgIHJvd3MuYXBwZW5kKHJvdykKCiAgICAjIENyZWF0ZXMgdGhlIG5lc3RlZCBkaWN0aW9uYXJpZXMgd2l0aCB0aGUgbmFtZXMgYXMgdGhlIGtleXMKICAgIGZpbmFsID0ge3Jvd1sibmFtZSJdOiByb3cgZm9yIHJvdyBpbiByb3dzfQoKICAgICMgUmVtb3ZlcyB0aGUgbmFtZXMgZnJvbSB0aGUgc3ViLWRpY3Rpb25hcmllczoKICAgICMgZS5nLiB7J21ldGhhbmUnOiB7J25hbWUnOiAnbWV0aGFuZScsICdzbWlsZXMnOiAnQycsIC4uLn0sIC4uLn0KICAgICMgLS0tPiB7J21ldGhhbmUnOiB7J3NtaWxlcyc6ICdDJywgLi4ufSwgLi4ufQogICAgZm9yIHZhbCBpbiBmaW5hbC52YWx1ZXMoKToKICAgICAgICBkZWwgdmFsWyJuYW1lIl0KCiAgICByZXR1cm4gZmluYWwKCgpkZWYgZ2VuZXJhdGVfYnVsa19jc3YoY3N2X25hbWUsIG1heF9leGVjcz1Ob25lKToKICAgICIiIgogICAgR2VuZXJhdGVzIGEgY3N2IHdpdGggbWluaW1hbCBpbmZvcm1hdGlvbiBpbnNpZGUuCiAgICBDb250YWlucyBvbmx5IGhlYWRlcnMgYW5kIGEgcm93IG9mIGRlZmF1bHRzIGFuZCBwb3B1bGF0ZXMgYWxsIG9mIHRoZSBuYW1lZCBmaWxlcyB3aGVyZSBhdmFpbGFibGUuCiAgICBGb3IgZXhhbXBsZSwgMTAgcGRiIGZpbGVzIHdpdGggYSB2YWx1ZSBvZiBtYXhfZXhlY3M9NiB3aWxsIGdlbmVyYXRlIHR3byBjc3YgZmlsZXMsCiAgICBvbmUgY29udGFpbmluZyA2IG9mIHRob3NlIGZpbGVzLCB0aGUgb3RoZXIgd2l0aCB0aGUgcmVtYWluaW5nIDQuCgogICAgOnBhcmFtIGNzdl9uYW1lOiAoc3RyKSBuYW1lIG9mIHRoZSBjc3YgZmlsZSBiZWluZyBnZW5lcmF0ZWQKICAgIDpwYXJhbSBtYXhfZXhlY3M6IChpbnQgb3IgTm9uZSkgZGV0ZXJtaW5lcyB0aGUgbWF4IG51bWJlciBvZiBtb2xlY3VsZXMtLWFuZCB0aGVyZWZvcmUgZXhlY3V0aW9ucy0tcGVyIGNzdiBmaWxlLgogICAgIiIiCgogICAgaWYgY3N2X25hbWVbLTQ6XSAhPSAiLmNzdiI6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJJbnZhbGlkIG9yIHVuc3BlY2lmaWVkIGZpbGUgdHlwZS4gRmlsZSBtdXN0IGJlIC5jc3YiKQoKICAgICMgRmluZCBhbnkgbG9jYWwgcGRiIGZpbGVzIHRvIHdyaXRlIHNhbXBsZSBjb25maWdzCiAgICBmaWxlcyA9IFtdCiAgICBmb3IgZmlsZSBpbiBvcy5saXN0ZGlyKCIuIik6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBfID0gTGlnYW5kLmZyb21fZmlsZShmaWxlX25hbWU9ZmlsZSkKICAgICAgICAgICAgZmlsZXMuYXBwZW5kKGZpbGUpCiAgICAgICAgZXhjZXB0IEZpbGVUeXBlRXJyb3I6CiAgICAgICAgICAgIGNvbnRpbnVlCgogICAgIyBJZiBtYXggbnVtYmVyIG9mIHBkYnMgcGVyIGZpbGUgaXMgdW5zcGVjaWZpZWQsIGp1c3QgcHV0IHRoZW0gYWxsIGluIG9uZSBmaWxlLgogICAgaWYgbWF4X2V4ZWNzIGlzIE5vbmU6CiAgICAgICAgd2l0aCBvcGVuKGNzdl9uYW1lLCAidyIpIGFzIGNzdl9maWxlOgoKICAgICAgICAgICAgZmlsZV93cml0ZXIgPSBjc3Yud3JpdGVyKAogICAgICAgICAgICAgICAgY3N2X2ZpbGUsIGRlbGltaXRlcj0iLCIsIHF1b3RlY2hhcj0ifCIsIHF1b3Rpbmc9Y3N2LlFVT1RFX01JTklNQUwKICAgICAgICAgICAgKQogICAgICAgICAgICBmaWxlX3dyaXRlci53cml0ZXJvdygKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgInNtaWxlcyIsCiAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxpY2l0eSIsCiAgICAgICAgICAgICAgICAgICAgImNvbmZpZ19maWxlIiwKICAgICAgICAgICAgICAgICAgICAicmVzdGFydCIsCiAgICAgICAgICAgICAgICAgICAgImVuZCIsCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICkKICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CiAgICAgICAgICAgICAgICBmaWxlX3dyaXRlci53cml0ZXJvdyhbZmlsZSwgIiIsIDEsICIiLCAiIiwgIiJdKQogICAgICAgIHByaW50KGYie2Nzdl9uYW1lfSBnZW5lcmF0ZWQuIiwgZmx1c2g9VHJ1ZSkKICAgICAgICByZXR1cm4KCiAgICB0cnk6CiAgICAgICAgbWF4X2V4ZWNzID0gaW50KG1heF9leGVjcykKICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgICAiTnVtYmVyIG9mIGV4ZWN1dGlvbnMgbXVzdCBiZSBwcm92aWRlZCBhcyBhbiBpbnQgZ3JlYXRlciB0aGFuIDEuIgogICAgICAgICkKICAgIGlmIG1heF9leGVjcyA+IGxlbihmaWxlcyk6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgIk51bWJlciBvZiBleGVjdXRpb25zIGNhbm5vdCBleGNlZWQgdGhlIG51bWJlciBvZiBmaWxlcyBwcm92aWRlZC4iCiAgICAgICAgKQoKICAgICMgSWYgbWF4IG51bWJlciBvZiBwZGJzIHBlciBmaWxlIGlzIHNwZWNpZmllZCwgc3ByZWFkIHRoZW0gYWNyb3NzIHNldmVyYWwgY3N2IGZpbGVzLgogICAgbnVtX2NzdnMgPSBtYXRoLmNlaWwobGVuKGZpbGVzKSAvIG1heF9leGVjcykKCiAgICBmb3IgY3N2X2NvdW50IGluIHJhbmdlKG51bV9jc3ZzKToKICAgICAgICB3aXRoIG9wZW4oZiJ7Y3N2X25hbWVbOi00XX1fe3N0cihjc3ZfY291bnQpLnpmaWxsKDIpfS5jc3YiLCAidyIpIGFzIGNzdl9maWxlOgogICAgICAgICAgICBmaWxlX3dyaXRlciA9IGNzdi53cml0ZXIoCiAgICAgICAgICAgICAgICBjc3ZfZmlsZSwgZGVsaW1pdGVyPSIsIiwgcXVvdGVjaGFyPSJ8IiwgcXVvdGluZz1jc3YuUVVPVEVfTUlOSU1BTAogICAgICAgICAgICApCiAgICAgICAgICAgIGZpbGVfd3JpdGVyLndyaXRlcm93KAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAic21pbGVzIiwKICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGljaXR5IiwKICAgICAgICAgICAgICAgICAgICAiY29uZmlnX2ZpbGUiLAogICAgICAgICAgICAgICAgICAgICJyZXN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICAiZW5kIiwKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgKQoKICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXNbY3N2X2NvdW50ICogbWF4X2V4ZWNzIDogKGNzdl9jb3VudCArIDEpICogbWF4X2V4ZWNzXToKICAgICAgICAgICAgICAgIGZpbGVfd3JpdGVyLndyaXRlcm93KFtmaWxlLCAiIiwgMSwgIiIsICIiLCAiIl0pCgogICAgICAgIHByaW50KGYie2Nzdl9uYW1lWzotNF19X3tzdHIoY3N2X2NvdW50KS56ZmlsbCgyKX0uY3N2IGdlbmVyYXRlZC4iLCBmbHVzaD1UcnVlKQoKCkBjb250ZXh0bWFuYWdlcgpkZWYgX2Fzc2VydF93cmFwcGVyKGV4Y2VwdGlvbl90eXBlKToKICAgICIiIgogICAgTWFrZXMgYXNzZXJ0aW9ucyBtb3JlIGluZm9ybWF0aXZlIHdoZW4gYW4gRXhjZXB0aW9uIGlzIHRocm93bi4KICAgIFJhdGhlciB0aGFuIGp1c3QgZ2V0dGluZyAnQXNzZXJ0aW9uRXJyb3InIGFsbCB0aGUgdGltZSwgYW4gYWN0dWFsIG5hbWVkIGV4Y2VwdGlvbiBjYW4gYmUgcGFzc2VkLgogICAgQ2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgc2FtZSAnd2l0aCcgc3RhdGVtZW50IGZvciB0aGUgc2FtZSBleGNlcHRpb24gdHlwZSBidXQgZGlmZmVyZW50IGV4Y2VwdGlvbnMuCgogICAgU2ltcGxlIGV4YW1wbGUgdXNlIGNhc2VzOgoKICAgICAgICB3aXRoIGFzc2VydF93cmFwcGVyKFZhbHVlRXJyb3IpOgogICAgICAgICAgICBhc3NlcnQgKGFyZzEgPiAwKSwgJ2FyZzEgY2Fubm90IGJlIG5vbi1wb3NpdGl2ZS4nCiAgICAgICAgICAgIGFzc2VydCAoYXJnMiAhPSAxMiksICdhcmcyIGNhbm5vdCBiZSAxMi4nCiAgICAgICAgd2l0aCBhc3NlcnRfd3JhcHBlcihUeXBlRXJyb3IpOgogICAgICAgICAgICBhc3NlcnQgKHR5cGUoYXJnMSkgaXMgbm90IGZsb2F0KSwgJ2FyZzEgbXVzdCBub3QgYmUgYSBmbG9hdC4nCiAgICAiIiIKCiAgICB0cnk6CiAgICAgICAgeWllbGQKICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvciBhcyBleGM6CiAgICAgICAgcmFpc2UgZXhjZXB0aW9uX3R5cGUoKmV4Yy5hcmdzKSBmcm9tIE5vbmUKCgpkZWYgY2hlY2tfc3ltbWV0cnkobWF0cml4LCBlcnJvcj0xZS01KToKICAgICIiIgogICAgQ2hlY2sgbWF0cml4IGlzIHN5bW1ldHJpYyB0byB3aXRoaW4gc29tZSBlcnJvci4KICAgIDpwYXJhbSBtYXRyaXg6IG51bXB5IGFycmF5IG9mIEhlc3NpYW4gbWF0cml4CiAgICA6cGFyYW0gZXJyb3I6IGFsbG93ZWQgZXJyb3IgYmV0d2VlbiBtYXRyaXggZWxlbWVudHMgd2hpY2ggc2hvdWxkIGJlIHN5bW1ldHJpYyAoaSxqKSwgKGosaSkKICAgIEVycm9yIGlzIHJhaXNlZCBpZiBtYXRyaXggaXMgbm90IHN5bW1ldHJpYyB3aXRoaW4gZXJyb3IKICAgICIiIgoKICAgICMgQ2hlY2sgdGhlIG1hdHJpeCB0cmFuc3Bvc2UgaXMgZXF1YWwgdG8gdGhlIG1hdHJpeCB3aXRoaW4gZXJyb3IuCiAgICB3aXRoIF9hc3NlcnRfd3JhcHBlcihWYWx1ZUVycm9yKToKICAgICAgICBhc3NlcnQgbnAuYWxsY2xvc2UobWF0cml4LCBtYXRyaXguVCwgYXRvbD1lcnJvciksICJNYXRyaXggaXMgbm90IHN5bW1ldHJpYy4iCgogICAgcHJpbnQoCiAgICAgICAgZiJ7Q09MT1VSUy5wdXJwbGV9U3ltbWV0cnkgY2hlY2sgc3VjY2Vzc2Z1bC4gIgogICAgICAgIGYiVGhlIG1hdHJpeCBpcyBzeW1tZXRyaWMgd2l0aGluIGFuIGVycm9yIG9mIHtlcnJvcn0ue0NPTE9VUlMuZW5kfSIKICAgICkKCgpkZWYgY29sbGVjdF9hcmNoaXZlX3Rkcml2ZSh0ZHJpdmVfcmVjb3JkLCBjbGllbnQpOgogICAgIiIiCiAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGluIGEgUUNBcmNoaXZlIHRkcml2ZSByZWNvcmQgYW5kIGNvbGxlY3RzIGFsbCBvZiB0aGUgZmluYWwgZ2VvbWV0cmllcyBhbmQgZW5lcmdpZXMgdG8gYmUgdXNlZCBpbgogICAgdG9yc2lvbiBmaXR0aW5nLgogICAgOnBhcmFtIHRkcml2ZV9yZWNvcmQ6IEEgUUNBcmNoaXZlIGRhdGEgb2JqZWN0IGNvbnRhaW5pbmcgYW4gb3B0aW1pc2F0aW9uIGFuZCBlbmVyZ3kgZGljdGlvbmFyeQogICAgOnBhcmFtIGNsaWVudDogIEEgUUNQb3J0YWwgY2xpZW50IGluc3RhbmNlLgogICAgOnJldHVybjogUVVCRUtpdCBxbV9zY2FucyBkYXRhOiBsaXN0IG9mIGVuZXJnaWVzIGFuZCBnZW9tZXRyaWVzIFtucC5hcnJheShlbmVyZ2llcyksIFtucC5hcnJheShnZW9tZXRyeSldXQogICAgIiIiCgogICAgIyBTb3J0IHRoZSBkaWN0aW9uYXJ5IGJ5IGFzY2VuZGluZyBrZXlzCiAgICBlbmVyZ3lfZGljdCA9IHsKICAgICAgICBpbnQoa2V5LnN0cmlwKCJdWyIpKTogdmFsdWUKICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiB0ZHJpdmVfcmVjb3JkLmZpbmFsX2VuZXJneV9kaWN0Lml0ZW1zKCkKICAgIH0KICAgIHNvcnRlZF9lbmVyZ2llcyA9IHNvcnRlZChlbmVyZ3lfZGljdC5pdGVtcygpLCBrZXk9b3BlcmF0b3IuaXRlbWdldHRlcigwKSkKCiAgICBlbmVyZ2llcyA9IG5wLmFycmF5KFt4WzFdIGZvciB4IGluIHNvcnRlZF9lbmVyZ2llc10pCgogICAgZ2VvbWV0cnkgPSBbXQogICAgIyBOb3cgbWFrZSB0aGUgb3B0aW1pemF0aW9uIGRpY3QgYW5kIHN0b3JlIGFuIGFycmF5IG9mIHRoZSBmaW5hbCBnZW9tZXRyeQogICAgZm9yIHBhaXIgaW4gc29ydGVkX2VuZXJnaWVzOgogICAgICAgIG1pbl9lbmVyZ3lfaWQgPSB0ZHJpdmVfcmVjb3JkLm1pbmltdW1fcG9zaXRpb25zW2YiW3twYWlyWzBdfV0iXQogICAgICAgIG9wdF9oaXN0b3J5ID0gaW50KAogICAgICAgICAgICB0ZHJpdmVfcmVjb3JkLm9wdGltaXphdGlvbl9oaXN0b3J5W2YiW3twYWlyWzBdfV0iXVttaW5fZW5lcmd5X2lkXQogICAgICAgICkKICAgICAgICBvcHRfc3RydWN0ID0gY2xpZW50LnF1ZXJ5X3Byb2NlZHVyZXMoaWQ9b3B0X2hpc3RvcnkpWzBdCiAgICAgICAgZ2VvbWV0cnkuYXBwZW5kKAogICAgICAgICAgICBvcHRfc3RydWN0LmdldF9maW5hbF9tb2xlY3VsZSgpLmdlb21ldHJ5ICogY29uc3RhbnRzLkJPSFJfVE9fQU5HUwogICAgICAgICkKICAgICAgICBhc3NlcnQgKAogICAgICAgICAgICBvcHRfc3RydWN0LmdldF9maW5hbF9lbmVyZ3koKSA9PSBwYWlyWzFdCiAgICAgICAgKSwgIlRoZSBlbmVyZ2llcyBjb2xsZWN0ZWQgZG8gbm90IG1hdGNoIHRoZSBRQ0FyY2hpdmUgbWluaW1hLiIKCiAgICByZXR1cm4gZW5lcmdpZXMsIGdlb21ldHJ5CgoKQGNvbnRleHRtYW5hZ2VyCmRlZiBoaWRlX3dhcm5pbmdzKCk6CiAgICAiIiIKICAgIFRlbXBvcmFyaWx5IGhpZGUgYW55IHdhcm5pbmdzIGZvciBmdW5jdGlvbiB3cmFwcGVkIHdpdGggdGhpcyBjb250ZXh0IG1hbmFnZXIuCiAgICAiIiIKICAgIGxvZ2dpbmcuZGlzYWJsZShsb2dnaW5nLldBUk5JTkcpCiAgICB5aWVsZAogICAgbG9nZ2luZy5kaXNhYmxlKGxvZ2dpbmcuTk9UU0VUKQoKCmRlZiBjaGVja19wcm9wZXJfdG9yc2lvbigKICAgIHRvcnNpb246IFR1cGxlW2ludCwgaW50LCBpbnQsIGludF0sIG1vbGVjdWxlOiAiTGlnYW5kIgopIC0+IGJvb2w6CiAgICAiIiIKICAgIENoZWNrIHRoYXQgdGhlIGdpdmVuIHRvcnNpb24gaXMgdmFsaWQgZm9yIHRoZSBtb2xlY3VsZSBncmFwaC4KICAgICIiIgogICAgZm9yIGkgaW4gcmFuZ2UoMyk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBfID0gbW9sZWN1bGUuZ2V0X2JvbmRfYmV0d2VlbigKICAgICAgICAgICAgICAgIGF0b20xX2luZGV4PXRvcnNpb25baV0sIGF0b20yX2luZGV4PXRvcnNpb25baSArIDFdCiAgICAgICAgICAgICkKICAgICAgICBleGNlcHQgVG9wb2xvZ3lNaXNtYXRjaDoKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgcmV0dXJuIFRydWUKCgpkZWYgY2hlY2tfaW1wcm9wZXJfdG9yc2lvbigKICAgIGltcHJvcGVyOiBUdXBsZVtpbnQsIGludCwgaW50LCBpbnRdLCBtb2xlY3VsZTogIkxpZ2FuZCIKKSAtPiBUdXBsZVtpbnQsIGludCwgaW50LCBpbnRdOgogICAgIiIiCiAgICBDaGVjayB0aGF0IHRoZSBnaXZlbiBpbXByb3BlciBpcyB2YWxpZCBmb3IgdGhlIG1vbGVjdWxlIGdyYXBoLgogICAgYW5kIGFsd2F5cyByZXR1cm4gdGhlIGNlbnRyYWwgYXRvbSBhcyB0aGUgZmlyc3QgYXRvbS4KICAgICIiIgogICAgZm9yIGF0b21faW5kZXggaW4gaW1wcm9wZXI6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBhdG9tID0gbW9sZWN1bGUuYXRvbXNbYXRvbV9pbmRleF0KICAgICAgICAgICAgYm9uZGVkX2F0b21zID0gc2V0KCkKICAgICAgICAgICAgZm9yIGJvbmRlZCBpbiBhdG9tLmJvbmRzOgogICAgICAgICAgICAgICAgYm9uZGVkX2F0b21zLmFkZChib25kZWQpCiAgICAgICAgICAgIGlmIGxlbihib25kZWRfYXRvbXMuaW50ZXJzZWN0aW9uKHNldChpbXByb3BlcikpKSA9PSAzOgogICAgICAgICAgICAgICAgaWYgaW1wcm9wZXJbMF0gPT0gYXRvbV9pbmRleDoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1wcm9wZXIKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhdG9tX2luZGV4LCAqYXRvbS5ib25kcykKICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICAgICAgY29udGludWUKICAgIHJhaXNlIFRvcG9sb2d5TWlzbWF0Y2goZiJUaGUgaW1wcm9wZXIge2ltcHJvcGVyfSBpcyBub3QgYSB2YWxpZCBmb3IgdGhpcyBtb2xlY3VsZS4iKQoKCmRlZiBleHBvcnRfdG9yc2lvbmRyaXZlX2RhdGEoCiAgICBtb2xlY3VsZTogIkxpZ2FuZCIsIHRkcml2ZV9kYXRhOiAiVG9yc2lvbkRyaXZlRGF0YSIKKSAtPiBOb25lOgogICAgIiIiCiAgICBFeHBvcnQgdGhlIHN0b3JlZCB0b3JzaW9uZHJpdmUgZGF0YSBvYmplY3QgdG8gYSBzY2FuLnh5eiBmaWxlIGFuZCBxZGF0YS50eHQgZmlsZSByZXF1aXJlZCBmb3IgRm9yY2VCYWxhbmNlLgoKICAgIE1ldGhvZCB0YWtlbiBmcm9tIDxodHRwczovL2dpdGh1Yi5jb20vbHB3Z3JvdXAvdG9yc2lvbmRyaXZlL2Jsb2IvYWMzMzA2NmVkZjQ0N2UyNWU0YmVhZjIxYzA5OGU1MmNhMGZjNjY0OS90b3JzaW9uZHJpdmUvZGloZWRyYWxfc2Nhbm5lci5weSNMNjU1PgoKICAgIEFyZ3M6Cjx8ZmltX2hvbGV8PgogICAgIiIiCiAgICBmcm9tIGdlb21ldHJpYy5tb2xlY3VsZSBpbXBvcnQgTW9sZWN1bGUgYXMgR0VPTW9sCgogICAgbW9sID0gR0VPTW9sKCkKICAgIG1vbC5lbGVtID0gW2F0b20uYXRvbWljX3N5bWJvbCBmb3IgYXRvbSBpbiBtb2xlY3VsZS5hdG9tc10KICAgIG1vbC5xbV9lbmVyZ2llcywgbW9sLnh5enMsIG1vbC5jb21tcyA9IFtdLCBbXSwgW10KICAgIGZvciBhbmdsZSwgZ3JpZF9kYXRhIGluIHNvcnRlZCh0ZHJpdmVfZGF0YS5yZWZlcmVuY2VfZGF0YS5pdGVtcygpKToKICAgICAgICBtb2wucW1fZW5lcmdpZXMuYXBwZW5kKGdyaWRfZGF0YS5lbmVyZ3kpCiAgICAgICAgbW9sLnh5enMuYXBwZW5kKGdyaWRfZGF0YS5nZW9tZXRyeSkKICAgICAgICBtb2wuY29tbXMuYXBwZW5kKGYiRGloZWRyYWwgKHthbmdsZX0sKSBFbmVyZ3kge2dyaWRfZGF0YS5lbmVyZ3l9IikKICAgIG1vbC53cml0ZSgicWRhdGEudHh0IikKICAgIG1vbC53cml0ZSgic2Nhbi54eXoiKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIG1vbGVjdWxlOiBUaGUgbW9sZWN1bGUgb2JqZWN0IHdoaWNoIGNvbnRhaW5zIHRoZSB0b3BvbG9neS4KICAgICAgICB0ZHJpdmVfZGF0YTogVGhlIHJlc3VsdHMgb2YgYSB0b3JzaW9uZHJpdmUgb24gdGhlIGlucHV0IG1vbGVjdWxlLgo8fGZpbV9lbmR8Pg=="]
["417986a35e561fae79b1e1b4781fa918a57cb6ac-3","417986a35e561fae79b1e1b4781fa918a57cb6ac","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IGNzdgppbXBvcnQgbG9nZ2luZwppbXBvcnQgbWF0aAppbXBvcnQgb3BlcmF0b3IKaW1wb3J0IG9zCmZyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKZnJvbSB0eXBpbmcgaW1wb3J0IFRZUEVfQ0hFQ0tJTkcsIFR1cGxlCgppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gcXViZWtpdC5tb2xlY3VsZXMgaW1wb3J0IExpZ2FuZApmcm9tIHF1YmVraXQudXRpbHMgaW1wb3J0IGNvbnN0YW50cwpmcm9tIHF1YmVraXQudXRpbHMuY29uc3RhbnRzIGltcG9ydCBDT0xPVVJTCmZyb20gcXViZWtpdC51dGlscy5leGNlcHRpb25zIGltcG9ydCBGaWxlVHlwZUVycm9yLCBUb3BvbG9neU1pc21hdGNoCgppZiBUWVBFX0NIRUNLSU5HOgogICAgZnJvbSBxdWJla2l0Lm1vbGVjdWxlcyBpbXBvcnQgVG9yc2lvbkRyaXZlRGF0YQoKIyBUT0RPIE1vdmUgY3N2IHN0dWZmIGZvciBidWxrIHJ1bnMgdG8gZmlsZV9oYW5kbGluZy5weQoKCmRlZiBtb2xfZGF0YV9mcm9tX2Nzdihjc3ZfbmFtZTogc3RyKToKICAgICIiIgogICAgU2NhbiB0aGUgY3N2IGZpbGUgdG8gZmluZCB0aGUgcm93IHdpdGggdGhlIGRlc2lyZWQgbW9sZWN1bGUgZGF0YS4KICAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IG9mIGRpY3Rpb25hcmllcyBpbiB0aGUgZm9ybToKICAgIHsnbWV0aGFuZSc6IHsnc21pbGVzJzogJ0MnLCAnbXVsdGlwbGljaXR5JzogMSwgLi4ufSwgJ2V0aGFuZSc6IHsnc21pbGVzJzogJ0MnLCAuLi59LCAuLi59CiAgICAiIiIKCiAgICB3aXRoIG9wZW4oY3N2X25hbWUsICJyIikgYXMgY3N2X2ZpbGU6CgogICAgICAgIG1vbF9jb25mcyA9IGNzdi5EaWN0UmVhZGVyKGNzdl9maWxlKQoKICAgICAgICByb3dzID0gW10KICAgICAgICBmb3Igcm93IGluIG1vbF9jb25mczoKCiAgICAgICAgICAgICMgQ29udmVydHMgdG8gb3JkaW5hcnkgZGljdCByYXRoZXIgdGhhbiBvcmRlcmVkLgogICAgICAgICAgICByb3cgPSBkaWN0KHJvdykKICAgICAgICAgICAgIyBJZiB0aGVyZSBpcyBubyBjb25maWcgZ2l2ZW4gYXNzdW1lIGl0cyB0aGUgZGVmYXVsdAogICAgICAgICAgICByb3dbInNtaWxlcyJdID0gcm93WyJzbWlsZXMiXSBpZiByb3dbInNtaWxlcyJdIGVsc2UgTm9uZQogICAgICAgICAgICByb3dbIm11bHRpcGxpY2l0eSJdID0gKAogICAgICAgICAgICAgICAgaW50KGZsb2F0KHJvd1sibXVsdGlwbGljaXR5Il0pKSBpZiByb3dbIm11bHRpcGxpY2l0eSJdIGVsc2UgMQogICAgICAgICAgICApCiAgICAgICAgICAgIHJvd1siY29uZmlnX2ZpbGUiXSA9IHJvd1siY29uZmlnX2ZpbGUiXSBpZiByb3dbImNvbmZpZ19maWxlIl0gZWxzZSBOb25lCiAgICAgICAgICAgIHJvd1sicmVzdGFydCJdID0gcm93WyJyZXN0YXJ0Il0gaWYgcm93WyJyZXN0YXJ0Il0gZWxzZSBOb25lCiAgICAgICAgICAgIHJvd1siZW5kIl0gPSByb3dbImVuZCJdIGlmIHJvd1siZW5kIl0gZWxzZSBOb25lCiAgICAgICAgICAgIHJvd3MuYXBwZW5kKHJvdykKCiAgICAjIENyZWF0ZXMgdGhlIG5lc3RlZCBkaWN0aW9uYXJpZXMgd2l0aCB0aGUgbmFtZXMgYXMgdGhlIGtleXMKICAgIGZpbmFsID0ge3Jvd1sibmFtZSJdOiByb3cgZm9yIHJvdyBpbiByb3dzfQoKICAgICMgUmVtb3ZlcyB0aGUgbmFtZXMgZnJvbSB0aGUgc3ViLWRpY3Rpb25hcmllczoKICAgICMgZS5nLiB7J21ldGhhbmUnOiB7J25hbWUnOiAnbWV0aGFuZScsICdzbWlsZXMnOiAnQycsIC4uLn0sIC4uLn0KICAgICMgLS0tPiB7J21ldGhhbmUnOiB7J3NtaWxlcyc6ICdDJywgLi4ufSwgLi4ufQogICAgZm9yIHZhbCBpbiBmaW5hbC52YWx1ZXMoKToKICAgICAgICBkZWwgdmFsWyJuYW1lIl0KCiAgICByZXR1cm4gZmluYWwKCgpkZWYgZ2VuZXJhdGVfYnVsa19jc3YoY3N2X25hbWUsIG1heF9leGVjcz1Ob25lKToKICAgICIiIgogICAgR2VuZXJhdGVzIGEgY3N2IHdpdGggbWluaW1hbCBpbmZvcm1hdGlvbiBpbnNpZGUuCiAgICBDb250YWlucyBvbmx5IGhlYWRlcnMgYW5kIGEgcm93IG9mIGRlZmF1bHRzIGFuZCBwb3B1bGF0ZXMgYWxsIG9mIHRoZSBuYW1lZCBmaWxlcyB3aGVyZSBhdmFpbGFibGUuCiAgICBGb3IgZXhhbXBsZSwgMTAgcGRiIGZpbGVzIHdpdGggYSB2YWx1ZSBvZiBtYXhfZXhlY3M9NiB3aWxsIGdlbmVyYXRlIHR3byBjc3YgZmlsZXMsCiAgICBvbmUgY29udGFpbmluZyA2IG9mIHRob3NlIGZpbGVzLCB0aGUgb3RoZXIgd2l0aCB0aGUgcmVtYWluaW5nIDQuCgogICAgOnBhcmFtIGNzdl9uYW1lOiAoc3RyKSBuYW1lIG9mIHRoZSBjc3YgZmlsZSBiZWluZyBnZW5lcmF0ZWQKICAgIDpwYXJhbSBtYXhfZXhlY3M6IChpbnQgb3IgTm9uZSkgZGV0ZXJtaW5lcyB0aGUgbWF4IG51bWJlciBvZiBtb2xlY3VsZXMtLWFuZCB0aGVyZWZvcmUgZXhlY3V0aW9ucy0tcGVyIGNzdiBmaWxlLgogICAgIiIiCgogICAgaWYgY3N2X25hbWVbLTQ6XSAhPSAiLmNzdiI6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJJbnZhbGlkIG9yIHVuc3BlY2lmaWVkIGZpbGUgdHlwZS4gRmlsZSBtdXN0IGJlIC5jc3YiKQoKICAgICMgRmluZCBhbnkgbG9jYWwgcGRiIGZpbGVzIHRvIHdyaXRlIHNhbXBsZSBjb25maWdzCiAgICBmaWxlcyA9IFtdCiAgICBmb3IgZmlsZSBpbiBvcy5saXN0ZGlyKCIuIik6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBfID0gTGlnYW5kLmZyb21fZmlsZShmaWxlX25hbWU9ZmlsZSkKICAgICAgICAgICAgZmlsZXMuYXBwZW5kKGZpbGUpCiAgICAgICAgZXhjZXB0IEZpbGVUeXBlRXJyb3I6CiAgICAgICAgICAgIGNvbnRpbnVlCgogICAgIyBJZiBtYXggbnVtYmVyIG9mIHBkYnMgcGVyIGZpbGUgaXMgdW5zcGVjaWZpZWQsIGp1c3QgcHV0IHRoZW0gYWxsIGluIG9uZSBmaWxlLgogICAgaWYgbWF4X2V4ZWNzIGlzIE5vbmU6CiAgICAgICAgd2l0aCBvcGVuKGNzdl9uYW1lLCAidyIpIGFzIGNzdl9maWxlOgoKICAgICAgICAgICAgZmlsZV93cml0ZXIgPSBjc3Yud3JpdGVyKAogICAgICAgICAgICAgICAgY3N2X2ZpbGUsIGRlbGltaXRlcj0iLCIsIHF1b3RlY2hhcj0ifCIsIHF1b3Rpbmc9Y3N2LlFVT1RFX01JTklNQUwKICAgICAgICAgICAgKQogICAgICAgICAgICBmaWxlX3dyaXRlci53cml0ZXJvdygKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgInNtaWxlcyIsCiAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxpY2l0eSIsCiAgICAgICAgICAgICAgICAgICAgImNvbmZpZ19maWxlIiwKICAgICAgICAgICAgICAgICAgICAicmVzdGFydCIsCiAgICAgICAgICAgICAgICAgICAgImVuZCIsCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICkKICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CiAgICAgICAgICAgICAgICBmaWxlX3dyaXRlci53cml0ZXJvdyhbZmlsZSwgIiIsIDEsICIiLCAiIiwgIiJdKQogICAgICAgIHByaW50KGYie2Nzdl9uYW1lfSBnZW5lcmF0ZWQuIiwgZmx1c2g9VHJ1ZSkKICAgICAgICByZXR1cm4KCiAgICB0cnk6CiAgICAgICAgbWF4X2V4ZWNzID0gaW50KG1heF9leGVjcykKICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgICAiTnVtYmVyIG9mIGV4ZWN1dGlvbnMgbXVzdCBiZSBwcm92aWRlZCBhcyBhbiBpbnQgZ3JlYXRlciB0aGFuIDEuIgogICAgICAgICkKICAgIGlmIG1heF9leGVjcyA+IGxlbihmaWxlcyk6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgIk51bWJlciBvZiBleGVjdXRpb25zIGNhbm5vdCBleGNlZWQgdGhlIG51bWJlciBvZiBmaWxlcyBwcm92aWRlZC4iCiAgICAgICAgKQoKICAgICMgSWYgbWF4IG51bWJlciBvZiBwZGJzIHBlciBmaWxlIGlzIHNwZWNpZmllZCwgc3ByZWFkIHRoZW0gYWNyb3NzIHNldmVyYWwgY3N2IGZpbGVzLgogICAgbnVtX2NzdnMgPSBtYXRoLmNlaWwobGVuKGZpbGVzKSAvIG1heF9leGVjcykKCiAgICBmb3IgY3N2X2NvdW50IGluIHJhbmdlKG51bV9jc3ZzKToKICAgICAgICB3aXRoIG9wZW4oZiJ7Y3N2X25hbWVbOi00XX1fe3N0cihjc3ZfY291bnQpLnpmaWxsKDIpfS5jc3YiLCAidyIpIGFzIGNzdl9maWxlOgogICAgICAgICAgICBmaWxlX3dyaXRlciA9IGNzdi53cml0ZXIoCiAgICAgICAgICAgICAgICBjc3ZfZmlsZSwgZGVsaW1pdGVyPSIsIiwgcXVvdGVjaGFyPSJ8IiwgcXVvdGluZz1jc3YuUVVPVEVfTUlOSU1BTAogICAgICAgICAgICApCiAgICAgICAgICAgIGZpbGVfd3JpdGVyLndyaXRlcm93KAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAic21pbGVzIiwKICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGljaXR5IiwKICAgICAgICAgICAgICAgICAgICAiY29uZmlnX2ZpbGUiLAogICAgICAgICAgICAgICAgICAgICJyZXN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICAiZW5kIiwKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgKQoKICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXNbY3N2X2NvdW50ICogbWF4X2V4ZWNzIDogKGNzdl9jb3VudCArIDEpICogbWF4X2V4ZWNzXToKICAgICAgICAgICAgICAgIGZpbGVfd3JpdGVyLndyaXRlcm93KFtmaWxlLCAiIiwgMSwgIiIsICIiLCAiIl0pCgogICAgICAgIHByaW50KGYie2Nzdl9uYW1lWzotNF19X3tzdHIoY3N2X2NvdW50KS56ZmlsbCgyKX0uY3N2IGdlbmVyYXRlZC4iLCBmbHVzaD1UcnVlKQoKCkBjb250ZXh0bWFuYWdlcgpkZWYgX2Fzc2VydF93cmFwcGVyKGV4Y2VwdGlvbl90eXBlKToKICAgICIiIgogICAgTWFrZXMgYXNzZXJ0aW9ucyBtb3JlIGluZm9ybWF0aXZlIHdoZW4gYW4gRXhjZXB0aW9uIGlzIHRocm93bi4KICAgIFJhdGhlciB0aGFuIGp1c3QgZ2V0dGluZyAnQXNzZXJ0aW9uRXJyb3InIGFsbCB0aGUgdGltZSwgYW4gYWN0dWFsIG5hbWVkIGV4Y2VwdGlvbiBjYW4gYmUgcGFzc2VkLgogICAgQ2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgc2FtZSAnd2l0aCcgc3RhdGVtZW50IGZvciB0aGUgc2FtZSBleGNlcHRpb24gdHlwZSBidXQgZGlmZmVyZW50IGV4Y2VwdGlvbnMuCgogICAgU2ltcGxlIGV4YW1wbGUgdXNlIGNhc2VzOgoKICAgICAgICB3aXRoIGFzc2VydF93cmFwcGVyKFZhbHVlRXJyb3IpOgogICAgICAgICAgICBhc3NlcnQgKGFyZzEgPiAwKSwgJ2FyZzEgY2Fubm90IGJlIG5vbi1wb3NpdGl2ZS4nCiAgICAgICAgICAgIGFzc2VydCAoYXJnMiAhPSAxMiksICdhcmcyIGNhbm5vdCBiZSAxMi4nCiAgICAgICAgd2l0aCBhc3NlcnRfd3JhcHBlcihUeXBlRXJyb3IpOgogICAgICAgICAgICBhc3NlcnQgKHR5cGUoYXJnMSkgaXMgbm90IGZsb2F0KSwgJ2FyZzEgbXVzdCBub3QgYmUgYSBmbG9hdC4nCiAgICAiIiIKCiAgICB0cnk6CiAgICAgICAgeWllbGQKICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvciBhcyBleGM6CiAgICAgICAgcmFpc2UgZXhjZXB0aW9uX3R5cGUoKmV4Yy5hcmdzKSBmcm9tIE5vbmUKCgpkZWYgY2hlY2tfc3ltbWV0cnkobWF0cml4LCBlcnJvcj0xZS01KToKICAgICIiIgogICAgQ2hlY2sgbWF0cml4IGlzIHN5bW1ldHJpYyB0byB3aXRoaW4gc29tZSBlcnJvci4KICAgIDpwYXJhbSBtYXRyaXg6IG51bXB5IGFycmF5IG9mIEhlc3NpYW4gbWF0cml4CiAgICA6cGFyYW0gZXJyb3I6IGFsbG93ZWQgZXJyb3IgYmV0d2VlbiBtYXRyaXggZWxlbWVudHMgd2hpY2ggc2hvdWxkIGJlIHN5bW1ldHJpYyAoaSxqKSwgKGosaSkKICAgIEVycm9yIGlzIHJhaXNlZCBpZiBtYXRyaXggaXMgbm90IHN5bW1ldHJpYyB3aXRoaW4gZXJyb3IKICAgICIiIgoKICAgICMgQ2hlY2sgdGhlIG1hdHJpeCB0cmFuc3Bvc2UgaXMgZXF1YWwgdG8gdGhlIG1hdHJpeCB3aXRoaW4gZXJyb3IuCiAgICB3aXRoIF9hc3NlcnRfd3JhcHBlcihWYWx1ZUVycm9yKToKICAgICAgICBhc3NlcnQgbnAuYWxsY2xvc2UobWF0cml4LCBtYXRyaXguVCwgYXRvbD1lcnJvciksICJNYXRyaXggaXMgbm90IHN5bW1ldHJpYy4iCgogICAgcHJpbnQoCiAgICAgICAgZiJ7Q09MT1VSUy5wdXJwbGV9U3ltbWV0cnkgY2hlY2sgc3VjY2Vzc2Z1bC4gIgogICAgICAgIGYiVGhlIG1hdHJpeCBpcyBzeW1tZXRyaWMgd2l0aGluIGFuIGVycm9yIG9mIHtlcnJvcn0ue0NPTE9VUlMuZW5kfSIKICAgICkKCgpkZWYgY29sbGVjdF9hcmNoaXZlX3Rkcml2ZSh0ZHJpdmVfcmVjb3JkLCBjbGllbnQpOgogICAgIiIiCiAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGluIGEgUUNBcmNoaXZlIHRkcml2ZSByZWNvcmQgYW5kIGNvbGxlY3RzIGFsbCBvZiB0aGUgZmluYWwgZ2VvbWV0cmllcyBhbmQgZW5lcmdpZXMgdG8gYmUgdXNlZCBpbgogICAgdG9yc2lvbiBmaXR0aW5nLgogICAgOnBhcmFtIHRkcml2ZV9yZWNvcmQ6IEEgUUNBcmNoaXZlIGRhdGEgb2JqZWN0IGNvbnRhaW5pbmcgYW4gb3B0aW1pc2F0aW9uIGFuZCBlbmVyZ3kgZGljdGlvbmFyeQogICAgOnBhcmFtIGNsaWVudDogIEEgUUNQb3J0YWwgY2xpZW50IGluc3RhbmNlLgogICAgOnJldHVybjogUVVCRUtpdCBxbV9zY2FucyBkYXRhOiBsaXN0IG9mIGVuZXJnaWVzIGFuZCBnZW9tZXRyaWVzIFtucC5hcnJheShlbmVyZ2llcyksIFtucC5hcnJheShnZW9tZXRyeSldXQogICAgIiIiCgogICAgIyBTb3J0IHRoZSBkaWN0aW9uYXJ5IGJ5IGFzY2VuZGluZyBrZXlzCiAgICBlbmVyZ3lfZGljdCA9IHsKICAgICAgICBpbnQoa2V5LnN0cmlwKCJdWyIpKTogdmFsdWUKICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiB0ZHJpdmVfcmVjb3JkLmZpbmFsX2VuZXJneV9kaWN0Lml0ZW1zKCkKICAgIH0KICAgIHNvcnRlZF9lbmVyZ2llcyA9IHNvcnRlZChlbmVyZ3lfZGljdC5pdGVtcygpLCBrZXk9b3BlcmF0b3IuaXRlbWdldHRlcigwKSkKCiAgICBlbmVyZ2llcyA9IG5wLmFycmF5KFt4WzFdIGZvciB4IGluIHNvcnRlZF9lbmVyZ2llc10pCgogICAgZ2VvbWV0cnkgPSBbXQogICAgIyBOb3cgbWFrZSB0aGUgb3B0aW1pemF0aW9uIGRpY3QgYW5kIHN0b3JlIGFuIGFycmF5IG9mIHRoZSBmaW5hbCBnZW9tZXRyeQogICAgZm9yIHBhaXIgaW4gc29ydGVkX2VuZXJnaWVzOgogICAgICAgIG1pbl9lbmVyZ3lfaWQgPSB0ZHJpdmVfcmVjb3JkLm1pbmltdW1fcG9zaXRpb25zW2YiW3twYWlyWzBdfV0iXQogICAgICAgIG9wdF9oaXN0b3J5ID0gaW50KAogICAgICAgICAgICB0ZHJpdmVfcmVjb3JkLm9wdGltaXphdGlvbl9oaXN0b3J5W2YiW3twYWlyWzBdfV0iXVttaW5fZW5lcmd5X2lkXQogICAgICAgICkKICAgICAgICBvcHRfc3RydWN0ID0gY2xpZW50LnF1ZXJ5X3Byb2NlZHVyZXMoaWQ9b3B0X2hpc3RvcnkpWzBdCiAgICAgICAgZ2VvbWV0cnkuYXBwZW5kKAogICAgICAgICAgICBvcHRfc3RydWN0LmdldF9maW5hbF9tb2xlY3VsZSgpLmdlb21ldHJ5ICogY29uc3RhbnRzLkJPSFJfVE9fQU5HUwogICAgICAgICkKICAgICAgICBhc3NlcnQgKAogICAgICAgICAgICBvcHRfc3RydWN0LmdldF9maW5hbF9lbmVyZ3koKSA9PSBwYWlyWzFdCiAgICAgICAgKSwgIlRoZSBlbmVyZ2llcyBjb2xsZWN0ZWQgZG8gbm90IG1hdGNoIHRoZSBRQ0FyY2hpdmUgbWluaW1hLiIKCiAgICByZXR1cm4gZW5lcmdpZXMsIGdlb21ldHJ5CgoKQGNvbnRleHRtYW5hZ2VyCmRlZiBoaWRlX3dhcm5pbmdzKCk6CiAgICAiIiIKICAgIFRlbXBvcmFyaWx5IGhpZGUgYW55IHdhcm5pbmdzIGZvciBmdW5jdGlvbiB3cmFwcGVkIHdpdGggdGhpcyBjb250ZXh0IG1hbmFnZXIuCiAgICAiIiIKICAgIGxvZ2dpbmcuZGlzYWJsZShsb2dnaW5nLldBUk5JTkcpCiAgICB5aWVsZAogICAgbG9nZ2luZy5kaXNhYmxlKGxvZ2dpbmcuTk9UU0VUKQoKCmRlZiBjaGVja19wcm9wZXJfdG9yc2lvbigKICAgIHRvcnNpb246IFR1cGxlW2ludCwgaW50LCBpbnQsIGludF0sIG1vbGVjdWxlOiAiTGlnYW5kIgopIC0+IGJvb2w6CiAgICAiIiIKICAgIENoZWNrIHRoYXQgdGhlIGdpdmVuIHRvcnNpb24gaXMgdmFsaWQgZm9yIHRoZSBtb2xlY3VsZSBncmFwaC4KICAgICIiIgogICAgZm9yIGkgaW4gcmFuZ2UoMyk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBfID0gbW9sZWN1bGUuZ2V0X2JvbmRfYmV0d2VlbigKICAgICAgICAgICAgICAgIGF0b20xX2luZGV4PXRvcnNpb25baV0sIGF0b20yX2luZGV4PXRvcnNpb25baSArIDFdCiAgICAgICAgICAgICkKICAgICAgICBleGNlcHQgVG9wb2xvZ3lNaXNtYXRjaDoKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgcmV0dXJuIFRydWUKCgpkZWYgY2hlY2tfaW1wcm9wZXJfdG9yc2lvbigKICAgIGltcHJvcGVyOiBUdXBsZVtpbnQsIGludCwgaW50LCBpbnRdLCBtb2xlY3VsZTogIkxpZ2FuZCIKKSAtPiBUdXBsZVtpbnQsIGludCwgaW50LCBpbnRdOgogICAgIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIENoZWNrIHRoYXQgdGhlIGdpdmVuIGltcHJvcGVyIGlzIHZhbGlkIGZvciB0aGUgbW9sZWN1bGUgZ3JhcGguCiAgICBhbmQgYWx3YXlzIHJldHVybiB0aGUgY2VudHJhbCBhdG9tIGFzIHRoZSBmaXJzdCBhdG9tLgogICAgIiIiCiAgICBmb3IgYXRvbV9pbmRleCBpbiBpbXByb3BlcjoKPHxmaW1fZW5kfD4="]
["417986a35e561fae79b1e1b4781fa918a57cb6ac-4","417986a35e561fae79b1e1b4781fa918a57cb6ac","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IGNzdgppbXBvcnQgbG9nZ2luZwo8fGZpbV9ob2xlfD4KZnJvbSB0eXBpbmcgaW1wb3J0IFRZUEVfQ0hFQ0tJTkcsIFR1cGxlCgppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gcXViZWtpdC5tb2xlY3VsZXMgaW1wb3J0IExpZ2FuZApmcm9tIHF1YmVraXQudXRpbHMgaW1wb3J0IGNvbnN0YW50cwpmcm9tIHF1YmVraXQudXRpbHMuY29uc3RhbnRzIGltcG9ydCBDT0xPVVJTCmZyb20gcXViZWtpdC51dGlscy5leGNlcHRpb25zIGltcG9ydCBGaWxlVHlwZUVycm9yLCBUb3BvbG9neU1pc21hdGNoCgppZiBUWVBFX0NIRUNLSU5HOgogICAgZnJvbSBxdWJla2l0Lm1vbGVjdWxlcyBpbXBvcnQgVG9yc2lvbkRyaXZlRGF0YQoKIyBUT0RPIE1vdmUgY3N2IHN0dWZmIGZvciBidWxrIHJ1bnMgdG8gZmlsZV9oYW5kbGluZy5weQoKCmRlZiBtb2xfZGF0YV9mcm9tX2Nzdihjc3ZfbmFtZTogc3RyKToKICAgICIiIgogICAgU2NhbiB0aGUgY3N2IGZpbGUgdG8gZmluZCB0aGUgcm93IHdpdGggdGhlIGRlc2lyZWQgbW9sZWN1bGUgZGF0YS4KICAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IG9mIGRpY3Rpb25hcmllcyBpbiB0aGUgZm9ybToKICAgIHsnbWV0aGFuZSc6IHsnc21pbGVzJzogJ0MnLCAnbXVsdGlwbGljaXR5JzogMSwgLi4ufSwgJ2V0aGFuZSc6IHsnc21pbGVzJzogJ0MnLCAuLi59LCAuLi59CiAgICAiIiIKCiAgICB3aXRoIG9wZW4oY3N2X25hbWUsICJyIikgYXMgY3N2X2ZpbGU6CgogICAgICAgIG1vbF9jb25mcyA9IGNzdi5EaWN0UmVhZGVyKGNzdl9maWxlKQoKICAgICAgICByb3dzID0gW10KICAgICAgICBmb3Igcm93IGluIG1vbF9jb25mczoKCiAgICAgICAgICAgICMgQ29udmVydHMgdG8gb3JkaW5hcnkgZGljdCByYXRoZXIgdGhhbiBvcmRlcmVkLgogICAgICAgICAgICByb3cgPSBkaWN0KHJvdykKICAgICAgICAgICAgIyBJZiB0aGVyZSBpcyBubyBjb25maWcgZ2l2ZW4gYXNzdW1lIGl0cyB0aGUgZGVmYXVsdAogICAgICAgICAgICByb3dbInNtaWxlcyJdID0gcm93WyJzbWlsZXMiXSBpZiByb3dbInNtaWxlcyJdIGVsc2UgTm9uZQogICAgICAgICAgICByb3dbIm11bHRpcGxpY2l0eSJdID0gKAogICAgICAgICAgICAgICAgaW50KGZsb2F0KHJvd1sibXVsdGlwbGljaXR5Il0pKSBpZiByb3dbIm11bHRpcGxpY2l0eSJdIGVsc2UgMQogICAgICAgICAgICApCiAgICAgICAgICAgIHJvd1siY29uZmlnX2ZpbGUiXSA9IHJvd1siY29uZmlnX2ZpbGUiXSBpZiByb3dbImNvbmZpZ19maWxlIl0gZWxzZSBOb25lCiAgICAgICAgICAgIHJvd1sicmVzdGFydCJdID0gcm93WyJyZXN0YXJ0Il0gaWYgcm93WyJyZXN0YXJ0Il0gZWxzZSBOb25lCiAgICAgICAgICAgIHJvd1siZW5kIl0gPSByb3dbImVuZCJdIGlmIHJvd1siZW5kIl0gZWxzZSBOb25lCiAgICAgICAgICAgIHJvd3MuYXBwZW5kKHJvdykKCiAgICAjIENyZWF0ZXMgdGhlIG5lc3RlZCBkaWN0aW9uYXJpZXMgd2l0aCB0aGUgbmFtZXMgYXMgdGhlIGtleXMKICAgIGZpbmFsID0ge3Jvd1sibmFtZSJdOiByb3cgZm9yIHJvdyBpbiByb3dzfQoKICAgICMgUmVtb3ZlcyB0aGUgbmFtZXMgZnJvbSB0aGUgc3ViLWRpY3Rpb25hcmllczoKICAgICMgZS5nLiB7J21ldGhhbmUnOiB7J25hbWUnOiAnbWV0aGFuZScsICdzbWlsZXMnOiAnQycsIC4uLn0sIC4uLn0KICAgICMgLS0tPiB7J21ldGhhbmUnOiB7J3NtaWxlcyc6ICdDJywgLi4ufSwgLi4ufQogICAgZm9yIHZhbCBpbiBmaW5hbC52YWx1ZXMoKToKICAgICAgICBkZWwgdmFsWyJuYW1lIl0KCiAgICByZXR1cm4gZmluYWwKCgpkZWYgZ2VuZXJhdGVfYnVsa19jc3YoY3N2X25hbWUsIG1heF9leGVjcz1Ob25lKToKICAgICIiIgogICAgR2VuZXJhdGVzIGEgY3N2IHdpdGggbWluaW1hbCBpbmZvcm1hdGlvbiBpbnNpZGUuCiAgICBDb250YWlucyBvbmx5IGhlYWRlcnMgYW5kIGEgcm93IG9mIGRlZmF1bHRzIGFuZCBwb3B1bGF0ZXMgYWxsIG9mIHRoZSBuYW1lZCBmaWxlcyB3aGVyZSBhdmFpbGFibGUuCiAgICBGb3IgZXhhbXBsZSwgMTAgcGRiIGZpbGVzIHdpdGggYSB2YWx1ZSBvZiBtYXhfZXhlY3M9NiB3aWxsIGdlbmVyYXRlIHR3byBjc3YgZmlsZXMsCiAgICBvbmUgY29udGFpbmluZyA2IG9mIHRob3NlIGZpbGVzLCB0aGUgb3RoZXIgd2l0aCB0aGUgcmVtYWluaW5nIDQuCgogICAgOnBhcmFtIGNzdl9uYW1lOiAoc3RyKSBuYW1lIG9mIHRoZSBjc3YgZmlsZSBiZWluZyBnZW5lcmF0ZWQKICAgIDpwYXJhbSBtYXhfZXhlY3M6IChpbnQgb3IgTm9uZSkgZGV0ZXJtaW5lcyB0aGUgbWF4IG51bWJlciBvZiBtb2xlY3VsZXMtLWFuZCB0aGVyZWZvcmUgZXhlY3V0aW9ucy0tcGVyIGNzdiBmaWxlLgogICAgIiIiCgogICAgaWYgY3N2X25hbWVbLTQ6XSAhPSAiLmNzdiI6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJJbnZhbGlkIG9yIHVuc3BlY2lmaWVkIGZpbGUgdHlwZS4gRmlsZSBtdXN0IGJlIC5jc3YiKQoKICAgICMgRmluZCBhbnkgbG9jYWwgcGRiIGZpbGVzIHRvIHdyaXRlIHNhbXBsZSBjb25maWdzCiAgICBmaWxlcyA9IFtdCiAgICBmb3IgZmlsZSBpbiBvcy5saXN0ZGlyKCIuIik6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBfID0gTGlnYW5kLmZyb21fZmlsZShmaWxlX25hbWU9ZmlsZSkKICAgICAgICAgICAgZmlsZXMuYXBwZW5kKGZpbGUpCiAgICAgICAgZXhjZXB0IEZpbGVUeXBlRXJyb3I6CiAgICAgICAgICAgIGNvbnRpbnVlCgogICAgIyBJZiBtYXggbnVtYmVyIG9mIHBkYnMgcGVyIGZpbGUgaXMgdW5zcGVjaWZpZWQsIGp1c3QgcHV0IHRoZW0gYWxsIGluIG9uZSBmaWxlLgogICAgaWYgbWF4X2V4ZWNzIGlzIE5vbmU6CiAgICAgICAgd2l0aCBvcGVuKGNzdl9uYW1lLCAidyIpIGFzIGNzdl9maWxlOgoKICAgICAgICAgICAgZmlsZV93cml0ZXIgPSBjc3Yud3JpdGVyKAogICAgICAgICAgICAgICAgY3N2X2ZpbGUsIGRlbGltaXRlcj0iLCIsIHF1b3RlY2hhcj0ifCIsIHF1b3Rpbmc9Y3N2LlFVT1RFX01JTklNQUwKICAgICAgICAgICAgKQogICAgICAgICAgICBmaWxlX3dyaXRlci53cml0ZXJvdygKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgInNtaWxlcyIsCiAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxpY2l0eSIsCiAgICAgICAgICAgICAgICAgICAgImNvbmZpZ19maWxlIiwKICAgICAgICAgICAgICAgICAgICAicmVzdGFydCIsCiAgICAgICAgICAgICAgICAgICAgImVuZCIsCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICkKICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CiAgICAgICAgICAgICAgICBmaWxlX3dyaXRlci53cml0ZXJvdyhbZmlsZSwgIiIsIDEsICIiLCAiIiwgIiJdKQogICAgICAgIHByaW50KGYie2Nzdl9uYW1lfSBnZW5lcmF0ZWQuIiwgZmx1c2g9VHJ1ZSkKICAgICAgICByZXR1cm4KCiAgICB0cnk6CiAgICAgICAgbWF4X2V4ZWNzID0gaW50KG1heF9leGVjcykKICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgICAiTnVtYmVyIG9mIGV4ZWN1dGlvbnMgbXVzdCBiZSBwcm92aWRlZCBhcyBhbiBpbnQgZ3JlYXRlciB0aGFuIDEuIgogICAgICAgICkKICAgIGlmIG1heF9leGVjcyA+IGxlbihmaWxlcyk6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgIk51bWJlciBvZiBleGVjdXRpb25zIGNhbm5vdCBleGNlZWQgdGhlIG51bWJlciBvZiBmaWxlcyBwcm92aWRlZC4iCiAgICAgICAgKQoKICAgICMgSWYgbWF4IG51bWJlciBvZiBwZGJzIHBlciBmaWxlIGlzIHNwZWNpZmllZCwgc3ByZWFkIHRoZW0gYWNyb3NzIHNldmVyYWwgY3N2IGZpbGVzLgogICAgbnVtX2NzdnMgPSBtYXRoLmNlaWwobGVuKGZpbGVzKSAvIG1heF9leGVjcykKCiAgICBmb3IgY3N2X2NvdW50IGluIHJhbmdlKG51bV9jc3ZzKToKICAgICAgICB3aXRoIG9wZW4oZiJ7Y3N2X25hbWVbOi00XX1fe3N0cihjc3ZfY291bnQpLnpmaWxsKDIpfS5jc3YiLCAidyIpIGFzIGNzdl9maWxlOgogICAgICAgICAgICBmaWxlX3dyaXRlciA9IGNzdi53cml0ZXIoCiAgICAgICAgICAgICAgICBjc3ZfZmlsZSwgZGVsaW1pdGVyPSIsIiwgcXVvdGVjaGFyPSJ8IiwgcXVvdGluZz1jc3YuUVVPVEVfTUlOSU1BTAogICAgICAgICAgICApCiAgICAgICAgICAgIGZpbGVfd3JpdGVyLndyaXRlcm93KAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAic21pbGVzIiwKICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGljaXR5IiwKICAgICAgICAgICAgICAgICAgICAiY29uZmlnX2ZpbGUiLAogICAgICAgICAgICAgICAgICAgICJyZXN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICAiZW5kIiwKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgKQoKICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXNbY3N2X2NvdW50ICogbWF4X2V4ZWNzIDogKGNzdl9jb3VudCArIDEpICogbWF4X2V4ZWNzXToKICAgICAgICAgICAgICAgIGZpbGVfd3JpdGVyLndyaXRlcm93KFtmaWxlLCAiIiwgMSwgIiIsICIiLCAiIl0pCgogICAgICAgIHByaW50KGYie2Nzdl9uYW1lWzotNF19X3tzdHIoY3N2X2NvdW50KS56ZmlsbCgyKX0uY3N2IGdlbmVyYXRlZC4iLCBmbHVzaD1UcnVlKQoKCkBjb250ZXh0bWFuYWdlcgpkZWYgX2Fzc2VydF93cmFwcGVyKGV4Y2VwdGlvbl90eXBlKToKICAgICIiIgogICAgTWFrZXMgYXNzZXJ0aW9ucyBtb3JlIGluZm9ybWF0aXZlIHdoZW4gYW4gRXhjZXB0aW9uIGlzIHRocm93bi4KICAgIFJhdGhlciB0aGFuIGp1c3QgZ2V0dGluZyAnQXNzZXJ0aW9uRXJyb3InIGFsbCB0aGUgdGltZSwgYW4gYWN0dWFsIG5hbWVkIGV4Y2VwdGlvbiBjYW4gYmUgcGFzc2VkLgogICAgQ2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgc2FtZSAnd2l0aCcgc3RhdGVtZW50IGZvciB0aGUgc2FtZSBleGNlcHRpb24gdHlwZSBidXQgZGlmZmVyZW50IGV4Y2VwdGlvbnMuCgogICAgU2ltcGxlIGV4YW1wbGUgdXNlIGNhc2VzOgoKICAgICAgICB3aXRoIGFzc2VydF93cmFwcGVyKFZhbHVlRXJyb3IpOgogICAgICAgICAgICBhc3NlcnQgKGFyZzEgPiAwKSwgJ2FyZzEgY2Fubm90IGJlIG5vbi1wb3NpdGl2ZS4nCiAgICAgICAgICAgIGFzc2VydCAoYXJnMiAhPSAxMiksICdhcmcyIGNhbm5vdCBiZSAxMi4nCiAgICAgICAgd2l0aCBhc3NlcnRfd3JhcHBlcihUeXBlRXJyb3IpOgogICAgICAgICAgICBhc3NlcnQgKHR5cGUoYXJnMSkgaXMgbm90IGZsb2F0KSwgJ2FyZzEgbXVzdCBub3QgYmUgYSBmbG9hdC4nCiAgICAiIiIKCiAgICB0cnk6CiAgICAgICAgeWllbGQKICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvciBhcyBleGM6CiAgICAgICAgcmFpc2UgZXhjZXB0aW9uX3R5cGUoKmV4Yy5hcmdzKSBmcm9tIE5vbmUKCgpkZWYgY2hlY2tfc3ltbWV0cnkobWF0cml4LCBlcnJvcj0xZS01KToKICAgICIiIgogICAgQ2hlY2sgbWF0cml4IGlzIHN5bW1ldHJpYyB0byB3aXRoaW4gc29tZSBlcnJvci4KICAgIDpwYXJhbSBtYXRyaXg6IG51bXB5IGFycmF5IG9mIEhlc3NpYW4gbWF0cml4CiAgICA6cGFyYW0gZXJyb3I6IGFsbG93ZWQgZXJyb3IgYmV0d2VlbiBtYXRyaXggZWxlbWVudHMgd2hpY2ggc2hvdWxkIGJlIHN5bW1ldHJpYyAoaSxqKSwgKGosaSkKICAgIEVycm9yIGlzIHJhaXNlZCBpZiBtYXRyaXggaXMgbm90IHN5bW1ldHJpYyB3aXRoaW4gZXJyb3IKICAgICIiIgoKICAgICMgQ2hlY2sgdGhlIG1hdHJpeCB0cmFuc3Bvc2UgaXMgZXF1YWwgdG8gdGhlIG1hdHJpeCB3aXRoaW4gZXJyb3IuCiAgICB3aXRoIF9hc3NlcnRfd3JhcHBlcihWYWx1ZUVycm9yKToKICAgICAgICBhc3NlcnQgbnAuYWxsY2xvc2UobWF0cml4LCBtYXRyaXguVCwgYXRvbD1lcnJvciksICJNYXRyaXggaXMgbm90IHN5bW1ldHJpYy4iCgogICAgcHJpbnQoCiAgICAgICAgZiJ7Q09MT1VSUy5wdXJwbGV9U3ltbWV0cnkgY2hlY2sgc3VjY2Vzc2Z1bC4gIgogICAgICAgIGYiVGhlIG1hdHJpeCBpcyBzeW1tZXRyaWMgd2l0aGluIGFuIGVycm9yIG9mIHtlcnJvcn0ue0NPTE9VUlMuZW5kfSIKICAgICkKCgpkZWYgY29sbGVjdF9hcmNoaXZlX3Rkcml2ZSh0ZHJpdmVfcmVjb3JkLCBjbGllbnQpOgogICAgIiIiCiAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGluIGEgUUNBcmNoaXZlIHRkcml2ZSByZWNvcmQgYW5kIGNvbGxlY3RzIGFsbCBvZiB0aGUgZmluYWwgZ2VvbWV0cmllcyBhbmQgZW5lcmdpZXMgdG8gYmUgdXNlZCBpbgogICAgdG9yc2lvbiBmaXR0aW5nLgogICAgOnBhcmFtIHRkcml2ZV9yZWNvcmQ6IEEgUUNBcmNoaXZlIGRhdGEgb2JqZWN0IGNvbnRhaW5pbmcgYW4gb3B0aW1pc2F0aW9uIGFuZCBlbmVyZ3kgZGljdGlvbmFyeQogICAgOnBhcmFtIGNsaWVudDogIEEgUUNQb3J0YWwgY2xpZW50IGluc3RhbmNlLgogICAgOnJldHVybjogUVVCRUtpdCBxbV9zY2FucyBkYXRhOiBsaXN0IG9mIGVuZXJnaWVzIGFuZCBnZW9tZXRyaWVzIFtucC5hcnJheShlbmVyZ2llcyksIFtucC5hcnJheShnZW9tZXRyeSldXQogICAgIiIiCgogICAgIyBTb3J0IHRoZSBkaWN0aW9uYXJ5IGJ5IGFzY2VuZGluZyBrZXlzCiAgICBlbmVyZ3lfZGljdCA9IHsKICAgICAgICBpbnQoa2V5LnN0cmlwKCJdWyIpKTogdmFsdWUKICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiB0ZHJpdmVfcmVjb3JkLmZpbmFsX2VuZXJneV9kaWN0Lml0ZW1zKCkKICAgIH0KICAgIHNvcnRlZF9lbmVyZ2llcyA9IHNvcnRlZChlbmVyZ3lfZGljdC5pdGVtcygpLCBrZXk9b3BlcmF0b3IuaXRlbWdldHRlcigwKSkKCiAgICBlbmVyZ2llcyA9IG5wLmFycmF5KFt4WzFdIGZvciB4IGluIHNvcnRlZF9lbmVyZ2llc10pCgogICAgZ2VvbWV0cnkgPSBbXQogICAgIyBOb3cgbWFrZSB0aGUgb3B0aW1pemF0aW9uIGRpY3QgYW5kIHN0b3JlIGFuIGFycmF5IG9mIHRoZSBmaW5hbCBnZW9tZXRyeQogICAgZm9yIHBhaXIgaW4gc29ydGVkX2VuZXJnaWVzOgogICAgICAgIG1pbl9lbmVyZ3lfaWQgPSB0ZHJpdmVfcmVjb3JkLm1pbmltdW1fcG9zaXRpb25zW2YiW3twYWlyWzBdfV0iXQogICAgICAgIG9wdF9oaXN0b3J5ID0gaW50KAogICAgICAgICAgICB0ZHJpdmVfcmVjb3JkLm9wdGltaXphdGlvbl9oaXN0b3J5W2YiW3twYWlyWzBdfV0iXVttaW5fZW5lcmd5X2lkXQogICAgICAgICkKICAgICAgICBvcHRfc3RydWN0ID0gY2xpZW50LnF1ZXJ5X3Byb2NlZHVyZXMoaWQ9b3B0X2hpc3RvcnkpWzBdCiAgICAgICAgZ2VvbWV0cnkuYXBwZW5kKAogICAgICAgICAgICBvcHRfc3RydWN0LmdldF9maW5hbF9tb2xlY3VsZSgpLmdlb21ldHJ5ICogY29uc3RhbnRzLkJPSFJfVE9fQU5HUwogICAgICAgICkKICAgICAgICBhc3NlcnQgKAogICAgICAgICAgICBvcHRfc3RydWN0LmdldF9maW5hbF9lbmVyZ3koKSA9PSBwYWlyWzFdCiAgICAgICAgKSwgIlRoZSBlbmVyZ2llcyBjb2xsZWN0ZWQgZG8gbm90IG1hdGNoIHRoZSBRQ0FyY2hpdmUgbWluaW1hLiIKCiAgICByZXR1cm4gZW5lcmdpZXMsIGdlb21ldHJ5CgoKQGNvbnRleHRtYW5hZ2VyCmRlZiBoaWRlX3dhcm5pbmdzKCk6CiAgICAiIiIKICAgIFRlbXBvcmFyaWx5IGhpZGUgYW55IHdhcm5pbmdzIGZvciBmdW5jdGlvbiB3cmFwcGVkIHdpdGggdGhpcyBjb250ZXh0IG1hbmFnZXIuCiAgICAiIiIKICAgIGxvZ2dpbmcuZGlzYWJsZShsb2dnaW5nLldBUk5JTkcpCiAgICB5aWVsZAogICAgbG9nZ2luZy5kaXNhYmxlKGxvZ2dpbmcuTk9UU0VUKQoKCmRlZiBjaGVja19wcm9wZXJfdG9yc2lvbigKICAgIHRvcnNpb246IFR1cGxlW2ludCwgaW50LCBpbnQsIGludF0sIG1vbGVjdWxlOiAiTGlnYW5kIgopIC0+IGJvb2w6CiAgICAiIiIKICAgIENoZWNrIHRoYXQgdGhlIGdpdmVuIHRvcnNpb24gaXMgdmFsaWQgZm9yIHRoZSBtb2xlY3VsZSBncmFwaC4KICAgICIiIgogICAgZm9yIGkgaW4gcmFuZ2UoMyk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBfID0gbW9sZWN1bGUuZ2V0X2JvbmRfYmV0d2VlbigKICAgICAgICAgICAgICAgIGF0b20xX2luZGV4PXRvcnNpb25baV0sIGF0b20yX2luZGV4PXRvcnNpb25baSArIDFdCiAgICAgICAgICAgICkKICAgICAgICBleGNlcHQgVG9wb2xvZ3lNaXNtYXRjaDoKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgcmV0dXJuIFRydWUKCgpkZWYgY2hlY2tfaW1wcm9wZXJfdG9yc2lvbigKICAgIGltcHJvcGVyOiBUdXBsZVtpbnQsIGludCwgaW50LCBpbnRdLCBtb2xlY3VsZTogIkxpZ2FuZCIKKSAtPiBUdXBsZVtpbnQsIGludCwgaW50LCBpbnRdOgogICAgIiIiCiAgICBDaGVjayB0aGF0IHRoZSBnaXZlbiBpbXByb3BlciBpcyB2YWxpZCBmb3IgdGhlIG1vbGVjdWxlIGdyYXBoLgogICAgYW5kIGFsd2F5cyByZXR1cm4gdGhlIGNlbnRyYWwgYXRvbSBhcyB0aGUgZmlyc3QgYXRvbS4KICAgICIiIgogICAgZm9yIGF0b21faW5kZXggaW4gaW1wcm9wZXI6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBhdG9tID0gbW9sZWN1bGUuYXRvbXNbYXRvbV9pbmRleF0KICAgICAgICAgICAgYm9uZGVkX2F0b21zID0gc2V0KCkKICAgICAgICAgICAgZm9yIGJvbmRlZCBpbiBhdG9tLmJvbmRzOgogICAgICAgICAgICAgICAgYm9uZGVkX2F0b21zLmFkZChib25kZWQpCiAgICAgICAgICAgIGlmIGxlbihib25kZWRfYXRvbXMuaW50ZXJzZWN0aW9uKHNldChpbXByb3BlcikpKSA9PSAzOgogICAgICAgICAgICAgICAgaWYgaW1wcm9wZXJbMF0gPT0gYXRvbV9pbmRleDoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1wcm9wZXIKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhdG9tX2luZGV4LCAqYXRvbS5ib25kcykKICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICAgICAgY29udGludWUKICAgIHJhaXNlIFRvcG9sb2d5TWlzbWF0Y2goZiJUaGUgaW1wcm9wZXIge2ltcHJvcGVyfSBpcyBub3QgYSB2YWxpZCBmb3IgdGhpcyBtb2xlY3VsZS4iKQoKCmRlZiBleHBvcnRfdG9yc2lvbmRyaXZlX2RhdGEoCiAgICBtb2xlY3VsZTogIkxpZ2FuZCIsIHRkcml2ZV9kYXRhOiAiVG9yc2lvbkRyaXZlRGF0YSIKKSAtPiBOb25lOgogICAgIiIiCiAgICBFeHBvcnQgdGhlIHN0b3JlZCB0b3JzaW9uZHJpdmUgZGF0YSBvYmplY3QgdG8gYSBzY2FuLnh5eiBmaWxlIGFuZCBxZGF0YS50eHQgZmlsZSByZXF1aXJlZCBmb3IgRm9yY2VCYWxhbmNlLgoKICAgIE1ldGhvZCB0YWtlbiBmcm9tIDxodHRwczovL2dpdGh1Yi5jb20vbHB3Z3JvdXAvdG9yc2lvbmRyaXZlL2Jsb2IvYWMzMzA2NmVkZjQ0N2UyNWU0YmVhZjIxYzA5OGU1MmNhMGZjNjY0OS90b3JzaW9uZHJpdmUvZGloZWRyYWxfc2Nhbm5lci5weSNMNjU1PgoKICAgIEFyZ3M6CiAgICAgICAgbW9sZWN1bGU6IFRoZSBtb2xlY3VsZSBvYmplY3Qgd2hpY2ggY29udGFpbnMgdGhlIHRvcG9sb2d5LgogICAgICAgIHRkcml2ZV9kYXRhOiBUaGUgcmVzdWx0cyBvZiBhIHRvcnNpb25kcml2ZSBvbiB0aGUgaW5wdXQgbW9sZWN1bGUuCiAgICAiIiIKICAgIGZyb20gZ2VvbWV0cmljLm1vbGVjdWxlIGltcG9ydCBNb2xlY3VsZSBhcyBHRU9Nb2wKCiAgICBtb2wgPSBHRU9Nb2woKQogICAgbW9sLmVsZW0gPSBbYXRvbS5hdG9taWNfc3ltYm9sIGZvciBhdG9tIGluIG1vbGVjdWxlLmF0b21zXQogICAgbW9sLnFtX2VuZXJnaWVzLCBtb2wueHl6cywgbW9sLmNvbW1zID0gW10sIFtdLCBbXQogICAgZm9yIGFuZ2xlLCBncmlkX2RhdGEgaW4gc29ydGVkKHRkcml2ZV9kYXRhLnJlZmVyZW5jZV9kYXRhLml0ZW1zKCkpOgogICAgICAgIG1vbC5xbV9lbmVyZ2llcy5hcHBlbmQoZ3JpZF9kYXRhLmVuZXJneSkKICAgICAgICBtb2wueHl6cy5hcHBlbmQoZ3JpZF9kYXRhLmdlb21ldHJ5KQogICAgICAgIG1vbC5jb21tcy5hcHBlbmQoZiJEaWhlZHJhbCAoe2FuZ2xlfSwpIEVuZXJneSB7Z3JpZF9kYXRhLmVuZXJneX0iKQogICAgbW9sLndyaXRlKCJxZGF0YS50eHQiKQogICAgbW9sLndyaXRlKCJzY2FuLnh5eiIpCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBtYXRoCmltcG9ydCBvcGVyYXRvcgppbXBvcnQgb3MKZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgo8fGZpbV9lbmR8Pg=="]
["417986a35e561fae79b1e1b4781fa918a57cb6ac-5","417986a35e561fae79b1e1b4781fa918a57cb6ac","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IGNzdgppbXBvcnQgbG9nZ2luZwppbXBvcnQgbWF0aAppbXBvcnQgb3BlcmF0b3IKaW1wb3J0IG9zCmZyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKZnJvbSB0eXBpbmcgaW1wb3J0IFRZUEVfQ0hFQ0tJTkcsIFR1cGxlCgppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gcXViZWtpdC5tb2xlY3VsZXMgaW1wb3J0IExpZ2FuZApmcm9tIHF1YmVraXQudXRpbHMgaW1wb3J0IGNvbnN0YW50cwpmcm9tIHF1YmVraXQudXRpbHMuY29uc3RhbnRzIGltcG9ydCBDT0xPVVJTCmZyb20gcXViZWtpdC51dGlscy5leGNlcHRpb25zIGltcG9ydCBGaWxlVHlwZUVycm9yLCBUb3BvbG9neU1pc21hdGNoCgppZiBUWVBFX0NIRUNLSU5HOgogICAgZnJvbSBxdWJla2l0Lm1vbGVjdWxlcyBpbXBvcnQgVG9yc2lvbkRyaXZlRGF0YQoKIyBUT0RPIE1vdmUgY3N2IHN0dWZmIGZvciBidWxrIHJ1bnMgdG8gZmlsZV9oYW5kbGluZy5weQoKCmRlZiBtb2xfZGF0YV9mcm9tX2Nzdihjc3ZfbmFtZTogc3RyKToKICAgICIiIgogICAgU2NhbiB0aGUgY3N2IGZpbGUgdG8gZmluZCB0aGUgcm93IHdpdGggdGhlIGRlc2lyZWQgbW9sZWN1bGUgZGF0YS4KICAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IG9mIGRpY3Rpb25hcmllcyBpbiB0aGUgZm9ybToKICAgIHsnbWV0aGFuZSc6IHsnc21pbGVzJzogJ0MnLCAnbXVsdGlwbGljaXR5JzogMSwgLi4ufSwgJ2V0aGFuZSc6IHsnc21pbGVzJzogJ0MnLCAuLi59LCAuLi59CiAgICAiIiIKCiAgICB3aXRoIG9wZW4oY3N2X25hbWUsICJyIikgYXMgY3N2X2ZpbGU6CgogICAgICAgIG1vbF9jb25mcyA9IGNzdi5EaWN0UmVhZGVyKGNzdl9maWxlKQoKICAgICAgICByb3dzID0gW10KICAgICAgICBmb3Igcm93IGluIG1vbF9jb25mczoKCiAgICAgICAgICAgICMgQ29udmVydHMgdG8gb3JkaW5hcnkgZGljdCByYXRoZXIgdGhhbiBvcmRlcmVkLgogICAgICAgICAgICByb3cgPSBkaWN0KHJvdykKICAgICAgICAgICAgIyBJZiB0aGVyZSBpcyBubyBjb25maWcgZ2l2ZW4gYXNzdW1lIGl0cyB0aGUgZGVmYXVsdAogICAgICAgICAgICByb3dbInNtaWxlcyJdID0gcm93WyJzbWlsZXMiXSBpZiByb3dbInNtaWxlcyJdIGVsc2UgTm9uZQogICAgICAgICAgICByb3dbIm11bHRpcGxpY2l0eSJdID0gKAogICAgICAgICAgICAgICAgaW50KGZsb2F0KHJvd1sibXVsdGlwbGljaXR5Il0pKSBpZiByb3dbIm11bHRpcGxpY2l0eSJdIGVsc2UgMQogICAgICAgICAgICApCiAgICAgICAgICAgIHJvd1siY29uZmlnX2ZpbGUiXSA9IHJvd1siY29uZmlnX2ZpbGUiXSBpZiByb3dbImNvbmZpZ19maWxlIl0gZWxzZSBOb25lCiAgICAgICAgICAgIHJvd1sicmVzdGFydCJdID0gcm93WyJyZXN0YXJ0Il0gaWYgcm93WyJyZXN0YXJ0Il0gZWxzZSBOb25lCiAgICAgICAgICAgIHJvd1siZW5kIl0gPSByb3dbImVuZCJdIGlmIHJvd1siZW5kIl0gZWxzZSBOb25lCiAgICAgICAgICAgIHJvd3MuYXBwZW5kKHJvdykKCiAgICAjIENyZWF0ZXMgdGhlIG5lc3RlZCBkaWN0aW9uYXJpZXMgd2l0aCB0aGUgbmFtZXMgYXMgdGhlIGtleXMKICAgIGZpbmFsID0ge3Jvd1sibmFtZSJdOiByb3cgZm9yIHJvdyBpbiByb3dzfQoKICAgICMgUmVtb3ZlcyB0aGUgbmFtZXMgZnJvbSB0aGUgc3ViLWRpY3Rpb25hcmllczoKICAgICMgZS5nLiB7J21ldGhhbmUnOiB7J25hbWUnOiAnbWV0aGFuZScsICdzbWlsZXMnOiAnQycsIC4uLn0sIC4uLn0KICAgICMgLS0tPiB7J21ldGhhbmUnOiB7J3NtaWxlcyc6ICdDJywgLi4ufSwgLi4ufQogICAgZm9yIHZhbCBpbiBmaW5hbC52YWx1ZXMoKToKICAgICAgICBkZWwgdmFsWyJuYW1lIl0KCiAgICByZXR1cm4gZmluYWwKCgpkZWYgZ2VuZXJhdGVfYnVsa19jc3YoY3N2X25hbWUsIG1heF9leGVjcz1Ob25lKToKICAgICIiIgogICAgR2VuZXJhdGVzIGEgY3N2IHdpdGggbWluaW1hbCBpbmZvcm1hdGlvbiBpbnNpZGUuCiAgICBDb250YWlucyBvbmx5IGhlYWRlcnMgYW5kIGEgcm93IG9mIGRlZmF1bHRzIGFuZCBwb3B1bGF0ZXMgYWxsIG9mIHRoZSBuYW1lZCBmaWxlcyB3aGVyZSBhdmFpbGFibGUuCiAgICBGb3IgZXhhbXBsZSwgMTAgcGRiIGZpbGVzIHdpdGggYSB2YWx1ZSBvZiBtYXhfZXhlY3M9NiB3aWxsIGdlbmVyYXRlIHR3byBjc3YgZmlsZXMsCiAgICBvbmUgY29udGFpbmluZyA2IG9mIHRob3NlIGZpbGVzLCB0aGUgb3RoZXIgd2l0aCB0aGUgcmVtYWluaW5nIDQuCgogICAgOnBhcmFtIGNzdl9uYW1lOiAoc3RyKSBuYW1lIG9mIHRoZSBjc3YgZmlsZSBiZWluZyBnZW5lcmF0ZWQKICAgIDpwYXJhbSBtYXhfZXhlY3M6IChpbnQgb3IgTm9uZSkgZGV0ZXJtaW5lcyB0aGUgbWF4IG51bWJlciBvZiBtb2xlY3VsZXMtLWFuZCB0aGVyZWZvcmUgZXhlY3V0aW9ucy0tcGVyIGNzdiBmaWxlLgogICAgIiIiCgogICAgaWYgY3N2X25hbWVbLTQ6XSAhPSAiLmNzdiI6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJJbnZhbGlkIG9yIHVuc3BlY2lmaWVkIGZpbGUgdHlwZS4gRmlsZSBtdXN0IGJlIC5jc3YiKQoKICAgICMgRmluZCBhbnkgbG9jYWwgcGRiIGZpbGVzIHRvIHdyaXRlIHNhbXBsZSBjb25maWdzCiAgICBmaWxlcyA9IFtdCiAgICBmb3IgZmlsZSBpbiBvcy5saXN0ZGlyKCIuIik6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBfID0gTGlnYW5kLmZyb21fZmlsZShmaWxlX25hbWU9ZmlsZSkKICAgICAgICAgICAgZmlsZXMuYXBwZW5kKGZpbGUpCiAgICAgICAgZXhjZXB0IEZpbGVUeXBlRXJyb3I6CiAgICAgICAgICAgIGNvbnRpbnVlCgogICAgIyBJZiBtYXggbnVtYmVyIG9mIHBkYnMgcGVyIGZpbGUgaXMgdW5zcGVjaWZpZWQsIGp1c3QgcHV0IHRoZW0gYWxsIGluIG9uZSBmaWxlLgogICAgaWYgbWF4X2V4ZWNzIGlzIE5vbmU6CiAgICAgICAgd2l0aCBvcGVuKGNzdl9uYW1lLCAidyIpIGFzIGNzdl9maWxlOgoKICAgICAgICAgICAgZmlsZV93cml0ZXIgPSBjc3Yud3JpdGVyKAogICAgICAgICAgICAgICAgY3N2X2ZpbGUsIGRlbGltaXRlcj0iLCIsIHF1b3RlY2hhcj0ifCIsIHF1b3Rpbmc9Y3N2LlFVT1RFX01JTklNQUwKICAgICAgICAgICAgKQogICAgICAgICAgICBmaWxlX3dyaXRlci53cml0ZXJvdygKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgInNtaWxlcyIsCiAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxpY2l0eSIsCiAgICAgICAgICAgICAgICAgICAgImNvbmZpZ19maWxlIiwKICAgICAgICAgICAgICAgICAgICAicmVzdGFydCIsCiAgICAgICAgICAgICAgICAgICAgImVuZCIsCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICkKICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CiAgICAgICAgICAgICAgICBmaWxlX3dyaXRlci53cml0ZXJvdyhbZmlsZSwgIiIsIDEsICIiLCAiIiwgIiJdKQogICAgICAgIHByaW50KGYie2Nzdl9uYW1lfSBnZW5lcmF0ZWQuIiwgZmx1c2g9VHJ1ZSkKICAgICAgICByZXR1cm4KCiAgICB0cnk6CiAgICAgICAgbWF4X2V4ZWNzID0gaW50KG1heF9leGVjcykKICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgICAiTnVtYmVyIG9mIGV4ZWN1dGlvbnMgbXVzdCBiZSBwcm92aWRlZCBhcyBhbiBpbnQgZ3JlYXRlciB0aGFuIDEuIgogICAgICAgICkKICAgIGlmIG1heF9leGVjcyA+IGxlbihmaWxlcyk6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgIk51bWJlciBvZiBleGVjdXRpb25zIGNhbm5vdCBleGNlZWQgdGhlIG51bWJlciBvZiBmaWxlcyBwcm92aWRlZC4iCiAgICAgICAgKQoKICAgICMgSWYgbWF4IG51bWJlciBvZiBwZGJzIHBlciBmaWxlIGlzIHNwZWNpZmllZCwgc3ByZWFkIHRoZW0gYWNyb3NzIHNldmVyYWwgY3N2IGZpbGVzLgogICAgbnVtX2NzdnMgPSBtYXRoLmNlaWwobGVuKGZpbGVzKSAvIG1heF9leGVjcykKCiAgICBmb3IgY3N2X2NvdW50IGluIHJhbmdlKG51bV9jc3ZzKToKICAgICAgICB3aXRoIG9wZW4oZiJ7Y3N2X25hbWVbOi00XX1fe3N0cihjc3ZfY291bnQpLnpmaWxsKDIpfS5jc3YiLCAidyIpIGFzIGNzdl9maWxlOgogICAgICAgICAgICBmaWxlX3dyaXRlciA9IGNzdi53cml0ZXIoCiAgICAgICAgICAgICAgICBjc3ZfZmlsZSwgZGVsaW1pdGVyPSIsIiwgcXVvdGVjaGFyPSJ8IiwgcXVvdGluZz1jc3YuUVVPVEVfTUlOSU1BTAogICAgICAgICAgICApCiAgICAgICAgICAgIGZpbGVfd3JpdGVyLndyaXRlcm93KAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAic21pbGVzIiwKICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGljaXR5IiwKICAgICAgICAgICAgICAgICAgICAiY29uZmlnX2ZpbGUiLAogICAgICAgICAgICAgICAgICAgICJyZXN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICAiZW5kIiwKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgKQo8fGZpbV9ob2xlfD4KICAgICAgICBwcmludChmIntjc3ZfbmFtZVs6LTRdfV97c3RyKGNzdl9jb3VudCkuemZpbGwoMil9LmNzdiBnZW5lcmF0ZWQuIiwgZmx1c2g9VHJ1ZSkKCgpAY29udGV4dG1hbmFnZXIKZGVmIF9hc3NlcnRfd3JhcHBlcihleGNlcHRpb25fdHlwZSk6CiAgICAiIiIKICAgIE1ha2VzIGFzc2VydGlvbnMgbW9yZSBpbmZvcm1hdGl2ZSB3aGVuIGFuIEV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICBSYXRoZXIgdGhhbiBqdXN0IGdldHRpbmcgJ0Fzc2VydGlvbkVycm9yJyBhbGwgdGhlIHRpbWUsIGFuIGFjdHVhbCBuYW1lZCBleGNlcHRpb24gY2FuIGJlIHBhc3NlZC4KICAgIENhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgaW4gdGhlIHNhbWUgJ3dpdGgnIHN0YXRlbWVudCBmb3IgdGhlIHNhbWUgZXhjZXB0aW9uIHR5cGUgYnV0IGRpZmZlcmVudCBleGNlcHRpb25zLgoKICAgIFNpbXBsZSBleGFtcGxlIHVzZSBjYXNlczoKCiAgICAgICAgd2l0aCBhc3NlcnRfd3JhcHBlcihWYWx1ZUVycm9yKToKICAgICAgICAgICAgYXNzZXJ0IChhcmcxID4gMCksICdhcmcxIGNhbm5vdCBiZSBub24tcG9zaXRpdmUuJwogICAgICAgICAgICBhc3NlcnQgKGFyZzIgIT0gMTIpLCAnYXJnMiBjYW5ub3QgYmUgMTIuJwogICAgICAgIHdpdGggYXNzZXJ0X3dyYXBwZXIoVHlwZUVycm9yKToKICAgICAgICAgICAgYXNzZXJ0ICh0eXBlKGFyZzEpIGlzIG5vdCBmbG9hdCksICdhcmcxIG11c3Qgbm90IGJlIGEgZmxvYXQuJwogICAgIiIiCgogICAgdHJ5OgogICAgICAgIHlpZWxkCiAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3IgYXMgZXhjOgogICAgICAgIHJhaXNlIGV4Y2VwdGlvbl90eXBlKCpleGMuYXJncykgZnJvbSBOb25lCgoKZGVmIGNoZWNrX3N5bW1ldHJ5KG1hdHJpeCwgZXJyb3I9MWUtNSk6CiAgICAiIiIKICAgIENoZWNrIG1hdHJpeCBpcyBzeW1tZXRyaWMgdG8gd2l0aGluIHNvbWUgZXJyb3IuCiAgICA6cGFyYW0gbWF0cml4OiBudW1weSBhcnJheSBvZiBIZXNzaWFuIG1hdHJpeAogICAgOnBhcmFtIGVycm9yOiBhbGxvd2VkIGVycm9yIGJldHdlZW4gbWF0cml4IGVsZW1lbnRzIHdoaWNoIHNob3VsZCBiZSBzeW1tZXRyaWMgKGksaiksIChqLGkpCiAgICBFcnJvciBpcyByYWlzZWQgaWYgbWF0cml4IGlzIG5vdCBzeW1tZXRyaWMgd2l0aGluIGVycm9yCiAgICAiIiIKCiAgICAjIENoZWNrIHRoZSBtYXRyaXggdHJhbnNwb3NlIGlzIGVxdWFsIHRvIHRoZSBtYXRyaXggd2l0aGluIGVycm9yLgogICAgd2l0aCBfYXNzZXJ0X3dyYXBwZXIoVmFsdWVFcnJvcik6CiAgICAgICAgYXNzZXJ0IG5wLmFsbGNsb3NlKG1hdHJpeCwgbWF0cml4LlQsIGF0b2w9ZXJyb3IpLCAiTWF0cml4IGlzIG5vdCBzeW1tZXRyaWMuIgoKICAgIHByaW50KAogICAgICAgIGYie0NPTE9VUlMucHVycGxlfVN5bW1ldHJ5IGNoZWNrIHN1Y2Nlc3NmdWwuICIKICAgICAgICBmIlRoZSBtYXRyaXggaXMgc3ltbWV0cmljIHdpdGhpbiBhbiBlcnJvciBvZiB7ZXJyb3J9LntDT0xPVVJTLmVuZH0iCiAgICApCgoKZGVmIGNvbGxlY3RfYXJjaGl2ZV90ZHJpdmUodGRyaXZlX3JlY29yZCwgY2xpZW50KToKICAgICIiIgogICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBpbiBhIFFDQXJjaGl2ZSB0ZHJpdmUgcmVjb3JkIGFuZCBjb2xsZWN0cyBhbGwgb2YgdGhlIGZpbmFsIGdlb21ldHJpZXMgYW5kIGVuZXJnaWVzIHRvIGJlIHVzZWQgaW4KICAgIHRvcnNpb24gZml0dGluZy4KICAgIDpwYXJhbSB0ZHJpdmVfcmVjb3JkOiBBIFFDQXJjaGl2ZSBkYXRhIG9iamVjdCBjb250YWluaW5nIGFuIG9wdGltaXNhdGlvbiBhbmQgZW5lcmd5IGRpY3Rpb25hcnkKICAgIDpwYXJhbSBjbGllbnQ6ICBBIFFDUG9ydGFsIGNsaWVudCBpbnN0YW5jZS4KICAgIDpyZXR1cm46IFFVQkVLaXQgcW1fc2NhbnMgZGF0YTogbGlzdCBvZiBlbmVyZ2llcyBhbmQgZ2VvbWV0cmllcyBbbnAuYXJyYXkoZW5lcmdpZXMpLCBbbnAuYXJyYXkoZ2VvbWV0cnkpXV0KICAgICIiIgoKICAgICMgU29ydCB0aGUgZGljdGlvbmFyeSBieSBhc2NlbmRpbmcga2V5cwogICAgZW5lcmd5X2RpY3QgPSB7CiAgICAgICAgaW50KGtleS5zdHJpcCgiXVsiKSk6IHZhbHVlCiAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gdGRyaXZlX3JlY29yZC5maW5hbF9lbmVyZ3lfZGljdC5pdGVtcygpCiAgICB9CiAgICBzb3J0ZWRfZW5lcmdpZXMgPSBzb3J0ZWQoZW5lcmd5X2RpY3QuaXRlbXMoKSwga2V5PW9wZXJhdG9yLml0ZW1nZXR0ZXIoMCkpCgogICAgZW5lcmdpZXMgPSBucC5hcnJheShbeFsxXSBmb3IgeCBpbiBzb3J0ZWRfZW5lcmdpZXNdKQoKICAgIGdlb21ldHJ5ID0gW10KICAgICMgTm93IG1ha2UgdGhlIG9wdGltaXphdGlvbiBkaWN0IGFuZCBzdG9yZSBhbiBhcnJheSBvZiB0aGUgZmluYWwgZ2VvbWV0cnkKICAgIGZvciBwYWlyIGluIHNvcnRlZF9lbmVyZ2llczoKICAgICAgICBtaW5fZW5lcmd5X2lkID0gdGRyaXZlX3JlY29yZC5taW5pbXVtX3Bvc2l0aW9uc1tmIlt7cGFpclswXX1dIl0KICAgICAgICBvcHRfaGlzdG9yeSA9IGludCgKICAgICAgICAgICAgdGRyaXZlX3JlY29yZC5vcHRpbWl6YXRpb25faGlzdG9yeVtmIlt7cGFpclswXX1dIl1bbWluX2VuZXJneV9pZF0KICAgICAgICApCiAgICAgICAgb3B0X3N0cnVjdCA9IGNsaWVudC5xdWVyeV9wcm9jZWR1cmVzKGlkPW9wdF9oaXN0b3J5KVswXQogICAgICAgIGdlb21ldHJ5LmFwcGVuZCgKICAgICAgICAgICAgb3B0X3N0cnVjdC5nZXRfZmluYWxfbW9sZWN1bGUoKS5nZW9tZXRyeSAqIGNvbnN0YW50cy5CT0hSX1RPX0FOR1MKICAgICAgICApCiAgICAgICAgYXNzZXJ0ICgKICAgICAgICAgICAgb3B0X3N0cnVjdC5nZXRfZmluYWxfZW5lcmd5KCkgPT0gcGFpclsxXQogICAgICAgICksICJUaGUgZW5lcmdpZXMgY29sbGVjdGVkIGRvIG5vdCBtYXRjaCB0aGUgUUNBcmNoaXZlIG1pbmltYS4iCgogICAgcmV0dXJuIGVuZXJnaWVzLCBnZW9tZXRyeQoKCkBjb250ZXh0bWFuYWdlcgpkZWYgaGlkZV93YXJuaW5ncygpOgogICAgIiIiCiAgICBUZW1wb3JhcmlseSBoaWRlIGFueSB3YXJuaW5ncyBmb3IgZnVuY3Rpb24gd3JhcHBlZCB3aXRoIHRoaXMgY29udGV4dCBtYW5hZ2VyLgogICAgIiIiCiAgICBsb2dnaW5nLmRpc2FibGUobG9nZ2luZy5XQVJOSU5HKQogICAgeWllbGQKICAgIGxvZ2dpbmcuZGlzYWJsZShsb2dnaW5nLk5PVFNFVCkKCgpkZWYgY2hlY2tfcHJvcGVyX3RvcnNpb24oCiAgICB0b3JzaW9uOiBUdXBsZVtpbnQsIGludCwgaW50LCBpbnRdLCBtb2xlY3VsZTogIkxpZ2FuZCIKKSAtPiBib29sOgogICAgIiIiCiAgICBDaGVjayB0aGF0IHRoZSBnaXZlbiB0b3JzaW9uIGlzIHZhbGlkIGZvciB0aGUgbW9sZWN1bGUgZ3JhcGguCiAgICAiIiIKICAgIGZvciBpIGluIHJhbmdlKDMpOgogICAgICAgIHRyeToKICAgICAgICAgICAgXyA9IG1vbGVjdWxlLmdldF9ib25kX2JldHdlZW4oCiAgICAgICAgICAgICAgICBhdG9tMV9pbmRleD10b3JzaW9uW2ldLCBhdG9tMl9pbmRleD10b3JzaW9uW2kgKyAxXQogICAgICAgICAgICApCiAgICAgICAgZXhjZXB0IFRvcG9sb2d5TWlzbWF0Y2g6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIHJldHVybiBUcnVlCgoKZGVmIGNoZWNrX2ltcHJvcGVyX3RvcnNpb24oCiAgICBpbXByb3BlcjogVHVwbGVbaW50LCBpbnQsIGludCwgaW50XSwgbW9sZWN1bGU6ICJMaWdhbmQiCikgLT4gVHVwbGVbaW50LCBpbnQsIGludCwgaW50XToKICAgICIiIgogICAgQ2hlY2sgdGhhdCB0aGUgZ2l2ZW4gaW1wcm9wZXIgaXMgdmFsaWQgZm9yIHRoZSBtb2xlY3VsZSBncmFwaC4KICAgIGFuZCBhbHdheXMgcmV0dXJuIHRoZSBjZW50cmFsIGF0b20gYXMgdGhlIGZpcnN0IGF0b20uCiAgICAiIiIKICAgIGZvciBhdG9tX2luZGV4IGluIGltcHJvcGVyOgogICAgICAgIHRyeToKICAgICAgICAgICAgYXRvbSA9IG1vbGVjdWxlLmF0b21zW2F0b21faW5kZXhdCiAgICAgICAgICAgIGJvbmRlZF9hdG9tcyA9IHNldCgpCiAgICAgICAgICAgIGZvciBib25kZWQgaW4gYXRvbS5ib25kczoKICAgICAgICAgICAgICAgIGJvbmRlZF9hdG9tcy5hZGQoYm9uZGVkKQogICAgICAgICAgICBpZiBsZW4oYm9uZGVkX2F0b21zLmludGVyc2VjdGlvbihzZXQoaW1wcm9wZXIpKSkgPT0gMzoKICAgICAgICAgICAgICAgIGlmIGltcHJvcGVyWzBdID09IGF0b21faW5kZXg6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltcHJvcGVyCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAoYXRvbV9pbmRleCwgKmF0b20uYm9uZHMpCiAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICByYWlzZSBUb3BvbG9neU1pc21hdGNoKGYiVGhlIGltcHJvcGVyIHtpbXByb3Blcn0gaXMgbm90IGEgdmFsaWQgZm9yIHRoaXMgbW9sZWN1bGUuIikKCgpkZWYgZXhwb3J0X3RvcnNpb25kcml2ZV9kYXRhKAogICAgbW9sZWN1bGU6ICJMaWdhbmQiLCB0ZHJpdmVfZGF0YTogIlRvcnNpb25Ecml2ZURhdGEiCikgLT4gTm9uZToKICAgICIiIgogICAgRXhwb3J0IHRoZSBzdG9yZWQgdG9yc2lvbmRyaXZlIGRhdGEgb2JqZWN0IHRvIGEgc2Nhbi54eXogZmlsZSBhbmQgcWRhdGEudHh0IGZpbGUgcmVxdWlyZWQgZm9yIEZvcmNlQmFsYW5jZS4KCiAgICBNZXRob2QgdGFrZW4gZnJvbSA8aHR0cHM6Ly9naXRodWIuY29tL2xwd2dyb3VwL3RvcnNpb25kcml2ZS9ibG9iL2FjMzMwNjZlZGY0NDdlMjVlNGJlYWYyMWMwOThlNTJjYTBmYzY2NDkvdG9yc2lvbmRyaXZlL2RpaGVkcmFsX3NjYW5uZXIucHkjTDY1NT4KCiAgICBBcmdzOgogICAgICAgIG1vbGVjdWxlOiBUaGUgbW9sZWN1bGUgb2JqZWN0IHdoaWNoIGNvbnRhaW5zIHRoZSB0b3BvbG9neS4KICAgICAgICB0ZHJpdmVfZGF0YTogVGhlIHJlc3VsdHMgb2YgYSB0b3JzaW9uZHJpdmUgb24gdGhlIGlucHV0IG1vbGVjdWxlLgogICAgIiIiCiAgICBmcm9tIGdlb21ldHJpYy5tb2xlY3VsZSBpbXBvcnQgTW9sZWN1bGUgYXMgR0VPTW9sCgogICAgbW9sID0gR0VPTW9sKCkKICAgIG1vbC5lbGVtID0gW2F0b20uYXRvbWljX3N5bWJvbCBmb3IgYXRvbSBpbiBtb2xlY3VsZS5hdG9tc10KICAgIG1vbC5xbV9lbmVyZ2llcywgbW9sLnh5enMsIG1vbC5jb21tcyA9IFtdLCBbXSwgW10KICAgIGZvciBhbmdsZSwgZ3JpZF9kYXRhIGluIHNvcnRlZCh0ZHJpdmVfZGF0YS5yZWZlcmVuY2VfZGF0YS5pdGVtcygpKToKICAgICAgICBtb2wucW1fZW5lcmdpZXMuYXBwZW5kKGdyaWRfZGF0YS5lbmVyZ3kpCiAgICAgICAgbW9sLnh5enMuYXBwZW5kKGdyaWRfZGF0YS5nZW9tZXRyeSkKICAgICAgICBtb2wuY29tbXMuYXBwZW5kKGYiRGloZWRyYWwgKHthbmdsZX0sKSBFbmVyZ3kge2dyaWRfZGF0YS5lbmVyZ3l9IikKICAgIG1vbC53cml0ZSgicWRhdGEudHh0IikKICAgIG1vbC53cml0ZSgic2Nhbi54eXoiKQo8fGZpbV9zdWZmaXh8PgoKICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXNbY3N2X2NvdW50ICogbWF4X2V4ZWNzIDogKGNzdl9jb3VudCArIDEpICogbWF4X2V4ZWNzXToKICAgICAgICAgICAgICAgIGZpbGVfd3JpdGVyLndyaXRlcm93KFtmaWxlLCAiIiwgMSwgIiIsICIiLCAiIl0pCgo8fGZpbV9lbmR8Pg=="]
["da3486315835c0a9c4e6fc1d8c7721bae78a0260-1","da3486315835c0a9c4e6fc1d8c7721bae78a0260","PHxmaW1fcHJlZml4fD4KZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBjcmVhdGVfYXV0b3NwZWMKCmltcG9ydCBweXRlc3QKZnJvbSBoX21hdGNoZXJzIGltcG9ydCBBbnkKCmZyb20gbG1zLnJlc291cmNlcy5fanNfY29uZmlnIGltcG9ydCBKU0NvbmZpZwpmcm9tIGxtcy5yZXNvdXJjZXMub2F1dGgyX3JlZGlyZWN0IGltcG9ydCBPQXV0aDJSZWRpcmVjdFJlc291cmNlCmZyb20gbG1zLnZpZXdzLmFwaS5ibGFja2JvYXJkLmF1dGhvcml6ZSBpbXBvcnQgKAogICAgYXV0aG9yaXplLAogICAgb2F1dGgyX3JlZGlyZWN0LAogICAgb2F1dGgyX3JlZGlyZWN0X2Vycm9yLAopCmZyb20gdGVzdHMubWF0Y2hlcnMgaW1wb3J0IHRlbXBvcmFyeV9yZWRpcmVjdF90bwoKCkBweXRlc3QubWFyay51c2VmaXh0dXJlcygiYXBwbGljYXRpb25faW5zdGFuY2Vfc2VydmljZSIpCmNsYXNzIFRlc3RBdXRob3JpemU6CiAgICBkZWYgdGVzdF9pdF9yZWRpcmVjdHNfdG9fdGhlX0JsYWNrYm9hcmRfYXV0aG9yaXphdGlvbl9wYWdlKAogICAgICAgIHNlbGYsCiAgICAgICAgYXBwbGljYXRpb25faW5zdGFuY2Vfc2VydmljZSwKICAgICAgICBPQXV0aENhbGxiYWNrU2NoZW1hLAogICAgICAgIG9hdXRoX2NhbGxiYWNrX3NjaGVtYSwKICAgICAgICBweXJhbWlkX3JlcXVlc3QsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICk6CiAgICAgICAgYXBwbGljYXRpb25faW5zdGFuY2UgPSBhcHBsaWNhdGlvbl9pbnN0YW5jZV9zZXJ2aWNlLmdldF9jdXJyZW50LnJldHVybl92YWx1ZQoKICAgICAgICByZXNwb25zZSA9IGF1dGhvcml6ZShweXJhbWlkX3JlcXVlc3QpCjx8ZmltX2VuZHw+"]
["da3486315835c0a9c4e6fc1d8c7721bae78a0260-2","da3486315835c0a9c4e6fc1d8c7721bae78a0260","PHxmaW1fcHJlZml4fD4KZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBjcmVhdGVfYXV0b3NwZWMKCmltcG9ydCBweXRlc3QKZnJvbSBoX21hdGNoZXJzIGltcG9ydCBBbnkKCmZyb20gbG1zLnJlc291cmNlcy5fanNfY29uZmlnIGltcG9ydCBKU0NvbmZpZwpmcm9tIGxtcy5yZXNvdXJjZXMub2F1dGgyX3JlZGlyZWN0IGltcG9ydCBPQXV0aDJSZWRpcmVjdFJlc291cmNlCmZyb20gbG1zLnZpZXdzLmFwaS5ibGFja2JvYXJkLmF1dGhvcml6ZSBpbXBvcnQgKAogICAgYXV0aG9yaXplLAo8fGZpbV9ob2xlfD4KKQpmcm9tIHRlc3RzLm1hdGNoZXJzIGltcG9ydCB0ZW1wb3JhcnlfcmVkaXJlY3RfdG8KCgpAcHl0ZXN0Lm1hcmsudXNlZml4dHVyZXMoImFwcGxpY2F0aW9uX2luc3RhbmNlX3NlcnZpY2UiKQpjbGFzcyBUZXN0QXV0aG9yaXplOgogICAgZGVmIHRlc3RfaXRfcmVkaXJlY3RzX3RvX3RoZV9CbGFja2JvYXJkX2F1dGhvcml6YXRpb25fcGFnZSgKICAgICAgICBzZWxmLAogICAgICAgIGFwcGxpY2F0aW9uX2luc3RhbmNlX3NlcnZpY2UsCiAgICAgICAgT0F1dGhDYWxsYmFja1NjaGVtYSwKICAgICAgICBvYXV0aF9jYWxsYmFja19zY2hlbWEsCiAgICAgICAgcHlyYW1pZF9yZXF1ZXN0LAogICAgKToKICAgICAgICBhcHBsaWNhdGlvbl9pbnN0YW5jZSA9IGFwcGxpY2F0aW9uX2luc3RhbmNlX3NlcnZpY2UuZ2V0X2N1cnJlbnQucmV0dXJuX3ZhbHVlCgogICAgICAgIHJlc3BvbnNlID0gYXV0aG9yaXplKHB5cmFtaWRfcmVxdWVzdCkKCiAgICAgICAgT0F1dGhDYWxsYmFja1NjaGVtYS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChweXJhbWlkX3JlcXVlc3QpCiAgICAgICAgYXNzZXJ0IHJlc3BvbnNlID09IHRlbXBvcmFyeV9yZWRpcmVjdF90bygKICAgICAgICAgICAgQW55LnVybCgKICAgICAgICAgICAgICAgIHNjaGVtZT0iaHR0cHMiLAogICAgICAgICAgICAgICAgaG9zdD1hcHBsaWNhdGlvbl9pbnN0YW5jZS5sbXNfaG9zdCgpLAogICAgICAgICAgICAgICAgcGF0aD0ibGVhcm4vYXBpL3B1YmxpYy92MS9vYXV0aDIvYXV0aG9yaXphdGlvbmNvZGUiLAogICAgICAgICAgICAgICAgcXVlcnk9ewogICAgICAgICAgICAgICAgICAgICJjbGllbnRfaWQiOiBweXJhbWlkX3JlcXVlc3QucmVnaXN0cnkuc2V0dGluZ3NbCiAgICAgICAgICAgICAgICAgICAgICAgICJibGFja2JvYXJkX2FwaV9jbGllbnRfaWQiCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAicmVzcG9uc2VfdHlwZSI6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgICAicmVkaXJlY3RfdXJpIjogcHlyYW1pZF9yZXF1ZXN0LnJvdXRlX3VybCgKICAgICAgICAgICAgICAgICAgICAgICAgImJsYWNrYm9hcmRfYXBpLm9hdXRoLmNhbGxiYWNrIgogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgInN0YXRlIjogc3RyKG9hdXRoX2NhbGxiYWNrX3NjaGVtYS5zdGF0ZV9wYXJhbS5yZXR1cm5fdmFsdWUpLAogICAgICAgICAgICAgICAgICAgICJzY29wZSI6ICJyZWFkIG9mZmxpbmUiLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKQogICAgICAgICkKCgpjbGFzcyBUZXN0T0F1dGgyUmVkaXJlY3RFcnJvcjoKICAgIGRlZiB0ZXN0X2l0KHNlbGYsIHB5cmFtaWRfcmVxdWVzdCk6CiAgICAgICAgdGVtcGxhdGVfdmFyaWFibGVzID0gb2F1dGgyX3JlZGlyZWN0X2Vycm9yKHB5cmFtaWRfcmVxdWVzdCkKCiAgICAgICAgcHlyYW1pZF9yZXF1ZXN0LmNvbnRleHQuanNfY29uZmlnLmVuYWJsZV9vYXV0aDJfcmVkaXJlY3RfZXJyb3JfbW9kZS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKICAgICAgICAgICAgZXJyb3JfY29kZT1Ob25lLAogICAgICAgICAgICBhdXRoX3JvdXRlPSJibGFja2JvYXJkX2FwaS5vYXV0aC5hdXRob3JpemUiLAogICAgICAgICkKICAgICAgICBhc3NlcnQgbm90IHRlbXBsYXRlX3ZhcmlhYmxlcwoKICAgIGRlZiB0ZXN0X21pc3NpbmdfaW50ZWdyYXRpb25fZXJyb3Ioc2VsZiwgcHlyYW1pZF9yZXF1ZXN0KToKICAgICAgICBweXJhbWlkX3JlcXVlc3QucGFyYW1zID0gewogICAgICAgICAgICAiZXJyb3JfZGVzY3JpcHRpb24iOiAiQXBwbGljYXRpb24gbm90IGVuYWJsZWQgZm9yIHNpdGUiCiAgICAgICAgfQoKICAgICAgICB0ZW1wbGF0ZV92YXJpYWJsZXMgPSBvYXV0aDJfcmVkaXJlY3RfZXJyb3IocHlyYW1pZF9yZXF1ZXN0KQoKICAgICAgICBweXJhbWlkX3JlcXVlc3QuY29udGV4dC5qc19jb25maWcuZW5hYmxlX29hdXRoMl9yZWRpcmVjdF9lcnJvcl9tb2RlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAogICAgICAgICAgICBlcnJvcl9jb2RlPUpTQ29uZmlnLkVycm9yQ29kZS5CTEFDS0JPQVJEX01JU1NJTkdfSU5URUdSQVRJT04sCiAgICAgICAgICAgIGF1dGhfcm91dGU9ImJsYWNrYm9hcmRfYXBpLm9hdXRoLmF1dGhvcml6ZSIsCiAgICAgICAgKQogICAgICAgIGFzc2VydCBub3QgdGVtcGxhdGVfdmFyaWFibGVzCgogICAgQHB5dGVzdC5maXh0dXJlCiAgICBkZWYgcHlyYW1pZF9yZXF1ZXN0KHNlbGYsIHB5cmFtaWRfcmVxdWVzdCk6CiAgICAgICAganNfY29uZmlnID0gY3JlYXRlX2F1dG9zcGVjKEpTQ29uZmlnLCBzcGVjX3NldD1UcnVlLCBpbnN0YW5jZT1UcnVlKQogICAgICAgIGpzX2NvbmZpZy5FcnJvckNvZGUgPSBKU0NvbmZpZy5FcnJvckNvZGUKICAgICAgICBweXJhbWlkX3JlcXVlc3QuY29udGV4dCA9IGNyZWF0ZV9hdXRvc3BlYygKICAgICAgICAgICAgT0F1dGgyUmVkaXJlY3RSZXNvdXJjZSwKICAgICAgICAgICAgaW5zdGFuY2U9VHJ1ZSwKICAgICAgICAgICAganNfY29uZmlnPWpzX2NvbmZpZywKICAgICAgICApCiAgICAgICAgcmV0dXJuIHB5cmFtaWRfcmVxdWVzdAoKCkBweXRlc3QubWFyay51c2VmaXh0dXJlcygiYmxhY2tib2FyZF9hcGlfY2xpZW50IikKY2xhc3MgVGVzdE9BdXRoMlJlZGlyZWN0OgogICAgZGVmIHRlc3RfaXRfZ2V0c19hX25ld19hY2Nlc3NfdG9rZW5fZm9yX3RoZV91c2VyKAogICAgICAgIHNlbGYsIHB5cmFtaWRfcmVxdWVzdCwgYmxhY2tib2FyZF9hcGlfY2xpZW50CiAgICApOgogICAgICAgIHB5cmFtaWRfcmVxdWVzdC5wYXJhbXNbImNvZGUiXSA9ICJ0ZXN0X2NvZGUiCgogICAgICAgIHJlc3VsdCA9IG9hdXRoMl9yZWRpcmVjdChweXJhbWlkX3JlcXVlc3QpCgogICAgICAgIGJsYWNrYm9hcmRfYXBpX2NsaWVudC5nZXRfdG9rZW4uYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoInRlc3RfY29kZSIpCiAgICAgICAgYXNzZXJ0IG5vdCByZXN1bHQKCgpAcHl0ZXN0LmZpeHR1cmUoYXV0b3VzZT1UcnVlKQpkZWYgT0F1dGhDYWxsYmFja1NjaGVtYShwYXRjaCk6CiAgICBPQXV0aENhbGxiYWNrU2NoZW1hID0gcGF0Y2goCiAgICAgICAgImxtcy52aWV3cy5hcGkuYmxhY2tib2FyZC5hdXRob3JpemUuT0F1dGhDYWxsYmFja1NjaGVtYSIKICAgICkKICAgIHJldHVybiBPQXV0aENhbGxiYWNrU2NoZW1hCgoKQHB5dGVzdC5maXh0dXJlCmRlZiBvYXV0aF9jYWxsYmFja19zY2hlbWEoT0F1dGhDYWxsYmFja1NjaGVtYSk6CiAgICByZXR1cm4gT0F1dGhDYWxsYmFja1NjaGVtYS5yZXR1cm5fdmFsdWUKPHxmaW1fc3VmZml4fD4KICAgIG9hdXRoMl9yZWRpcmVjdCwKICAgIG9hdXRoMl9yZWRpcmVjdF9lcnJvciwKPHxmaW1fZW5kfD4="]
["a20fecf87e1c48e310c264705f56e57fe7da92f6-1","a20fecf87e1c48e310c264705f56e57fe7da92f6","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDEuMTEuMjAgb24gMjAxOS0wOS0yNiAxMDoxMQpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKPHxmaW1faG9sZXw+CiAgICBvcGVyYXRpb25zID0gWwogICAgICAgIG1pZ3JhdGlvbnMuQWRkRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J2FuYWx5c2lzJywKICAgICAgICAgICAgbmFtZT0ndGFza19maW5pc2hlZCcsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9Tm9uZSwgZWRpdGFibGU9RmFsc2UsIG51bGw9VHJ1ZSksCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkFkZEZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdhbmFseXNpcycsCiAgICAgICAgICAgIG5hbWU9J3Rhc2tfc3RhcnRlZCcsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9Tm9uZSwgZWRpdGFibGU9RmFsc2UsIG51bGw9VHJ1ZSksCiAgICAgICAgKSwKICAgIF0KPHxmaW1fc3VmZml4fD4KICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ2FuYWx5c2VzJywgJzAwMDVfYW5hbHlzaXNfc3VtbWFyeV9sZXZlbHNfZmlsZScpLAogICAgXQoKPHxmaW1fZW5kfD4="]
["a20fecf87e1c48e310c264705f56e57fe7da92f6-2","a20fecf87e1c48e310c264705f56e57fe7da92f6","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDEuMTEuMjAgb24gMjAxOS0wOS0yNiAxMDoxMQpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ2FuYWx5c2VzJywgJzAwMDVfYW5hbHlzaXNfc3VtbWFyeV9sZXZlbHNfZmlsZScpLAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgbW9kZWxfbmFtZT0nYW5hbHlzaXMnLAogICAgICAgICAgICBuYW1lPSd0YXNrX2ZpbmlzaGVkJywKICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkRhdGVUaW1lRmllbGQoZGVmYXVsdD1Ob25lLCBlZGl0YWJsZT1GYWxzZSwgbnVsbD1UcnVlKSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQWRkRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J2FuYWx5c2lzJywKICAgICAgICAgICAgbmFtZT0ndGFza19zdGFydGVkJywKICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkRhdGVUaW1lRmllbGQoZGVmYXVsdD1Ob25lLCBlZGl0YWJsZT1GYWxzZSwgbnVsbD1UcnVlKSwKICAgICAgICApLAogICAgXQo8fGZpbV9zdWZmaXh8PgogICAgXQoKICAgIG9wZXJhdGlvbnMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5BZGRGaWVsZCgKPHxmaW1fZW5kfD4="]
["a20fecf87e1c48e310c264705f56e57fe7da92f6-3","a20fecf87e1c48e310c264705f56e57fe7da92f6","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDEuMTEuMjAgb24gMjAxOS0wOS0yNiAxMDoxMQpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ2FuYWx5c2VzJywgJzAwMDVfYW5hbHlzaXNfc3VtbWFyeV9sZXZlbHNfZmlsZScpLAogICAgXQoKICAgIG9wZXJhdGlvbnMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5BZGRGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nYW5hbHlzaXMnLAogICAgICAgICAgICBuYW1lPSd0YXNrX2ZpbmlzaGVkJywKICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkRhdGVUaW1lRmllbGQoZGVmYXVsdD1Ob25lLCBlZGl0YWJsZT1GYWxzZSwgbnVsbD1UcnVlKSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQWRkRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J2FuYWx5c2lzJywKICAgICAgICAgICAgbmFtZT0ndGFza19zdGFydGVkJywKICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkRhdGVUaW1lRmllbGQoZGVmYXVsdD1Ob25lLCBlZGl0YWJsZT1GYWxzZSwgbnVsbD1UcnVlKSwKICAgICAgICApLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBdCjx8ZmltX2VuZHw+"]
["a20fecf87e1c48e310c264705f56e57fe7da92f6-4","a20fecf87e1c48e310c264705f56e57fe7da92f6","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDEuMTEuMjAgb24gMjAxOS0wOS0yNiAxMDoxMQpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVwZW5kZW5jaWVzID0gWwogICAgICAgICgnYW5hbHlzZXMnLCAnMDAwNV9hbmFseXNpc19zdW1tYXJ5X2xldmVsc19maWxlJyksCiAgICBdCgo8fGZpbV9lbmR8Pg=="]
["a20fecf87e1c48e310c264705f56e57fe7da92f6-5","a20fecf87e1c48e310c264705f56e57fe7da92f6","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDEuMTEuMjAgb24gMjAxOS0wOS0yNiAxMDoxMQpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKPHxmaW1faG9sZXw+CiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgKCdhbmFseXNlcycsICcwMDA1X2FuYWx5c2lzX3N1bW1hcnlfbGV2ZWxzX2ZpbGUnKSwKICAgIF0KCiAgICBvcGVyYXRpb25zID0gWwogICAgICAgIG1pZ3JhdGlvbnMuQWRkRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J2FuYWx5c2lzJywKICAgICAgICAgICAgbmFtZT0ndGFza19maW5pc2hlZCcsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9Tm9uZSwgZWRpdGFibGU9RmFsc2UsIG51bGw9VHJ1ZSksCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkFkZEZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdhbmFseXNpcycsCiAgICAgICAgICAgIG5hbWU9J3Rhc2tfc3RhcnRlZCcsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9Tm9uZSwgZWRpdGFibGU9RmFsc2UsIG51bGw9VHJ1ZSksCiAgICAgICAgKSwKICAgIF0KPHxmaW1fc3VmZml4fD4KCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKPHxmaW1fZW5kfD4="]
["6b771b361c3520a225d365e39582fc13099b7288-1","6b771b361c3520a225d365e39582fc13099b7288","PHxmaW1fcHJlZml4fD4KY2xhc3MgRmllbGQ6CgogICAgQUxMT1dFRF9UWVBFUyA9IFsnc3RyJywgJ2ludCcsICdib29sJ10KCiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZTogc3RyLCB0eXBlOiBzdHIsICoqb3B0aW9ucyk6CiAgICAgICAgc2VsZi5fX2NoZWNrX3R5cGVfaW50ZWdyaXR5KHR5cGUpCjx8ZmltX2hvbGV8PgogICAgICAgIGRlZmF1bHRfb3B0aW9ucyA9IHsKICAgICAgICAgICAgJ3ByaW1hcnlfa2V5JzogRmFsc2UsCiAgICAgICAgICAgICdudWxsYWJsZSc6IEZhbHNlCiAgICAgICAgfQogICAgICAgIG9wdGlvbnMgPSB7KipkZWZhdWx0X29wdGlvbnMsICoqb3B0aW9uc30KICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvcHRpb25zLml0ZW1zKCk6CiAgICAgICAgICAgIHNldGF0dHIoc2VsZiwga2V5LCB2YWx1ZSkKCiAgICBkZWYgY2hlY2tfdmFsdWVfaW50ZWdyaXR5KHNlbGYsIHZhbHVlKToKICAgICAgICB0eXBlcyA9IHsKICAgICAgICAgICAgJ3N0cic6IHN0ciwKICAgICAgICAgICAgJ2ludCc6IGludCwKICAgICAgICAgICAgJ2Jvb2wnOiBib29sCiAgICAgICAgfQoKICAgICAgICBmb3IgdHlwZV9uYW1lLCBvYmogaW4gdHlwZXMuaXRlbXMoKToKICAgICAgICAgICAgaWYgc2VsZi50eXBlID09IHR5cGVfbmFtZSBhbmQgbm90IGlzaW5zdGFuY2UodmFsdWUsIG9iaik6CiAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oZiJUaGUgdmFsdWUgc2hvdWxkIGJlIG9mIHR5cGUge3ZhbHVlfSBidXQgaXQgaXMgeyB0eXBlKHZhbHVlKSB9IikKCiAgICBkZWYgX19jaGVja190eXBlX2ludGVncml0eShzZWxmLCB0eXBlKToKICAgICAgICBpZiB0eXBlIG5vdCBpbiBGaWVsZC5BTExPV0VEX1RZUEVTOgogICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oZid7dHlwZX0gaXMgbm90IGEgdmFsaWQgdHlwZS4gVmFsaWQgdHlwZXM6IHsiICIuam9pbihGaWVsZC5BTExPV0VEX1RZUEVTKX0uJykKCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCgo8fGZpbV9lbmR8Pg=="]
["6b771b361c3520a225d365e39582fc13099b7288-2","6b771b361c3520a225d365e39582fc13099b7288","PHxmaW1fcHJlZml4fD4KY2xhc3MgRmllbGQ6CgogICAgQUxMT1dFRF9UWVBFUyA9IFsnc3RyJywgJ2ludCcsICdib29sJ10KCiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZTogc3RyLCB0eXBlOiBzdHIsICoqb3B0aW9ucyk6CiAgICAgICAgc2VsZi5fX2NoZWNrX3R5cGVfaW50ZWdyaXR5KHR5cGUpCgogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICdudWxsYWJsZSc6IEZhbHNlCiAgICAgICAgfQogICAgICAgIG9wdGlvbnMgPSB7KipkZWZhdWx0X29wdGlvbnMsICoqb3B0aW9uc30KICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvcHRpb25zLml0ZW1zKCk6CiAgICAgICAgICAgIHNldGF0dHIoc2VsZiwga2V5LCB2YWx1ZSkKCiAgICBkZWYgY2hlY2tfdmFsdWVfaW50ZWdyaXR5KHNlbGYsIHZhbHVlKToKICAgICAgICB0eXBlcyA9IHsKICAgICAgICAgICAgJ3N0cic6IHN0ciwKICAgICAgICAgICAgJ2ludCc6IGludCwKICAgICAgICAgICAgJ2Jvb2wnOiBib29sCiAgICAgICAgfQoKICAgICAgICBmb3IgdHlwZV9uYW1lLCBvYmogaW4gdHlwZXMuaXRlbXMoKToKICAgICAgICAgICAgaWYgc2VsZi50eXBlID09IHR5cGVfbmFtZSBhbmQgbm90IGlzaW5zdGFuY2UodmFsdWUsIG9iaik6CiAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oZiJUaGUgdmFsdWUgc2hvdWxkIGJlIG9mIHR5cGUge3ZhbHVlfSBidXQgaXQgaXMgeyB0eXBlKHZhbHVlKSB9IikKCiAgICBkZWYgX19jaGVja190eXBlX2ludGVncml0eShzZWxmLCB0eXBlKToKICAgICAgICBpZiB0eXBlIG5vdCBpbiBGaWVsZC5BTExPV0VEX1RZUEVTOgogICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oZid7dHlwZX0gaXMgbm90IGEgdmFsaWQgdHlwZS4gVmFsaWQgdHlwZXM6IHsiICIuam9pbihGaWVsZC5BTExPV0VEX1RZUEVTKX0uJykKCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi50eXBlID0gdHlwZQoKICAgICAgICBkZWZhdWx0X29wdGlvbnMgPSB7CiAgICAgICAgICAgICdwcmltYXJ5X2tleSc6IEZhbHNlLAo8fGZpbV9lbmR8Pg=="]
["6b771b361c3520a225d365e39582fc13099b7288-3","6b771b361c3520a225d365e39582fc13099b7288","PHxmaW1fcHJlZml4fD4KY2xhc3MgRmllbGQ6CgogICAgQUxMT1dFRF9UWVBFUyA9IFsnc3RyJywgJ2ludCcsICdib29sJ10KCiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZTogc3RyLCB0eXBlOiBzdHIsICoqb3B0aW9ucyk6CiAgICAgICAgc2VsZi5fX2NoZWNrX3R5cGVfaW50ZWdyaXR5KHR5cGUpCgogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCgogICAgICAgIGRlZmF1bHRfb3B0aW9ucyA9IHsKICAgICAgICAgICAgJ3ByaW1hcnlfa2V5JzogRmFsc2UsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgJ251bGxhYmxlJzogRmFsc2UKPHxmaW1fZW5kfD4="]
["6b771b361c3520a225d365e39582fc13099b7288-4","6b771b361c3520a225d365e39582fc13099b7288","PHxmaW1fcHJlZml4fD4KY2xhc3MgRmllbGQ6CgogICAgQUxMT1dFRF9UWVBFUyA9IFsnc3RyJywgJ2ludCcsICdib29sJ10KCiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZTogc3RyLCB0eXBlOiBzdHIsICoqb3B0aW9ucyk6CiAgICAgICAgc2VsZi5fX2NoZWNrX3R5cGVfaW50ZWdyaXR5KHR5cGUpCgogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCgogICAgICAgIGRlZmF1bHRfb3B0aW9ucyA9IHsKICAgICAgICAgICAgJ3ByaW1hcnlfa2V5JzogRmFsc2UsCiAgICAgICAgICAgICdudWxsYWJsZSc6IEZhbHNlCiAgICAgICAgfQogICAgICAgIG9wdGlvbnMgPSB7KipkZWZhdWx0X29wdGlvbnMsICoqb3B0aW9uc30KICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvcHRpb25zLml0ZW1zKCk6CiAgICAgICAgICAgIHNldGF0dHIoc2VsZiwga2V5LCB2YWx1ZSkKCiAgICBkZWYgY2hlY2tfdmFsdWVfaW50ZWdyaXR5KHNlbGYsIHZhbHVlKToKICAgICAgICB0eXBlcyA9IHsKICAgICAgICAgICAgJ3N0cic6IHN0ciwKICAgICAgICAgICAgJ2ludCc6IGludCwKPHxmaW1faG9sZXw+CiAgICAgICAgfQoKICAgICAgICBmb3IgdHlwZV9uYW1lLCBvYmogaW4gdHlwZXMuaXRlbXMoKToKICAgICAgICAgICAgaWYgc2VsZi50eXBlID09IHR5cGVfbmFtZSBhbmQgbm90IGlzaW5zdGFuY2UodmFsdWUsIG9iaik6CiAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oZiJUaGUgdmFsdWUgc2hvdWxkIGJlIG9mIHR5cGUge3ZhbHVlfSBidXQgaXQgaXMgeyB0eXBlKHZhbHVlKSB9IikKCiAgICBkZWYgX19jaGVja190eXBlX2ludGVncml0eShzZWxmLCB0eXBlKToKICAgICAgICBpZiB0eXBlIG5vdCBpbiBGaWVsZC5BTExPV0VEX1RZUEVTOgogICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oZid7dHlwZX0gaXMgbm90IGEgdmFsaWQgdHlwZS4gVmFsaWQgdHlwZXM6IHsiICIuam9pbihGaWVsZC5BTExPV0VEX1RZUEVTKX0uJykKCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICdib29sJzogYm9vbAo8fGZpbV9lbmR8Pg=="]
["6b771b361c3520a225d365e39582fc13099b7288-5","6b771b361c3520a225d365e39582fc13099b7288","PHxmaW1fcHJlZml4fD4KY2xhc3MgRmllbGQ6CgogICAgQUxMT1dFRF9UWVBFUyA9IFsnc3RyJywgJ2ludCcsICdib29sJ10KCiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZTogc3RyLCB0eXBlOiBzdHIsICoqb3B0aW9ucyk6CiAgICAgICAgc2VsZi5fX2NoZWNrX3R5cGVfaW50ZWdyaXR5KHR5cGUpCgogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCgogICAgICAgIGRlZmF1bHRfb3B0aW9ucyA9IHsKICAgICAgICAgICAgJ3ByaW1hcnlfa2V5JzogRmFsc2UsCiAgICAgICAgICAgICdudWxsYWJsZSc6IEZhbHNlCiAgICAgICAgfQogICAgICAgIG9wdGlvbnMgPSB7KipkZWZhdWx0X29wdGlvbnMsICoqb3B0aW9uc30KICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvcHRpb25zLml0ZW1zKCk6CiAgICAgICAgICAgIHNldGF0dHIoc2VsZiwga2V5LCB2YWx1ZSkKCiAgICBkZWYgY2hlY2tfdmFsdWVfaW50ZWdyaXR5KHNlbGYsIHZhbHVlKToKICAgICAgICB0eXBlcyA9IHsKICAgICAgICAgICAgJ3N0cic6IHN0ciwKICAgICAgICAgICAgJ2ludCc6IGludCwKICAgICAgICAgICAgJ2Jvb2wnOiBib29sCiAgICAgICAgfQoKICAgICAgICBmb3IgdHlwZV9uYW1lLCBvYmogaW4gdHlwZXMuaXRlbXMoKToKICAgICAgICAgICAgaWYgc2VsZi50eXBlID09IHR5cGVfbmFtZSBhbmQgbm90IGlzaW5zdGFuY2UodmFsdWUsIG9iaik6CiAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oZiJUaGUgdmFsdWUgc2hvdWxkIGJlIG9mIHR5cGUge3ZhbHVlfSBidXQgaXQgaXMgeyB0eXBlKHZhbHVlKSB9IikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiBfX2NoZWNrX3R5cGVfaW50ZWdyaXR5KHNlbGYsIHR5cGUpOgogICAgICAgIGlmIHR5cGUgbm90IGluIEZpZWxkLkFMTE9XRURfVFlQRVM6CiAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihmJ3t0eXBlfSBpcyBub3QgYSB2YWxpZCB0eXBlLiBWYWxpZCB0eXBlczogeyIgIi5qb2luKEZpZWxkLkFMTE9XRURfVFlQRVMpfS4nKQo8fGZpbV9lbmR8Pg=="]
["ec8ba643583694690a430b737facea387120aeea-1","ec8ba643583694690a430b737facea387120aeea","PHxmaW1fcHJlZml4fD4KIiIiSW5zdGFsbGF0aW9uIHNjcmlwdCBmb3IgdGhlIG1vZHVsZSBhaG9Db3Jhc2ljay4iIiIKZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAsIEV4dGVuc2lvbgppbXBvcnQgcGxhdGZvcm0gICMgRm9yIGRldGVybWluaW5nIHRoZSBvcyB0eXBlLCBpLmUuIGxpbnV4LCB3aW5kb3dzLCBldGMuCgpvc1R5cGUgPSBwbGF0Zm9ybS5zeXN0ZW0oKQoKZmxhZ3M9WyItTzIiXQoKaWYgb3NUeXBlLmxvd2VyKCkuc3RhcnRzd2l0aCgnd2luZG93cycpOgogICAgZmxhZ3MuZXh0ZW5kKFsnL0VIc2MnLCAnL08yJ10pCgphaG9DTW9kdWxlID0gRXh0ZW5zaW9uKCdhaG9Db3Jhc2ljaycsCiAgICAgICAgICAgICAgICAgICAgICAgc291cmNlcz1bJ3NyYy9hY1B5dGhvbi5jcHAnLCAnc3JjL2Fob0NvcmFzaWNrLmNwcCddLAogICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2NvbXBpbGVfYXJncz1mbGFncykKc2V0dXAobmFtZT0nQWhvQ29yYXNpY2snLAogICAgICB2ZXJzaW9uPScxLjAnLAo8fGZpbV9ob2xlfD4KICAgICAgICIiIi5zdHJpcCgpLnNwbGl0KCkpLAogICAgICBhdXRob3I9J0NhcnNvbiBLZW50JywKICAgICAgYXV0aG9yX2VtYWlsPSdja2VudEBzYW5kaWEuZ292JywKICAgICAgcGxhdGZvcm1zPVsnUE9TSVgnXSwKICAgICAgcGFja2FnZV9kaXI9eycnOiAnc3JjJ30sCiAgICAgIGV4dF9tb2R1bGVzPVthaG9DTW9kdWxlXSkKPHxmaW1fc3VmZml4fD4KICAgICAgZGVzY3JpcHRpb249J0ltcGxlbWVudGF0aW9uIG9mIHRoZSBBaG8tQ29yYXNpY2sgQWxnb3JpdGhtJywKICAgICAgbG9uZ19kZXNjcmlwdGlvbj0iICIuam9pbigiIiIKICAgICAgICBNb2R1bGUgdG8gYWNjZWxlcmF0ZSBzdWJzdHJpbmcgbWF0Y2hpbmcgdXNpbmcgdGhlIEFoby1Db3Jhc2ljawogICAgICAgIGFsZ29yaXRobS4KPHxmaW1fZW5kfD4="]
["ec8ba643583694690a430b737facea387120aeea-2","ec8ba643583694690a430b737facea387120aeea","PHxmaW1fcHJlZml4fD4KIiIiSW5zdGFsbGF0aW9uIHNjcmlwdCBmb3IgdGhlIG1vZHVsZSBhaG9Db3Jhc2ljay4iIiIKZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAsIEV4dGVuc2lvbgppbXBvcnQgcGxhdGZvcm0gICMgRm9yIGRldGVybWluaW5nIHRoZSBvcyB0eXBlLCBpLmUuIGxpbnV4LCB3aW5kb3dzLCBldGMuCgpvc1R5cGUgPSBwbGF0Zm9ybS5zeXN0ZW0oKQoKZmxhZ3M9WyItTzIiXQoKaWYgb3NUeXBlLmxvd2VyKCkuc3RhcnRzd2l0aCgnd2luZG93cycpOgogICAgZmxhZ3MuZXh0ZW5kKFsnL0VIc2MnLCAnL08yJ10pCjx8ZmltX2hvbGV8PgpzZXR1cChuYW1lPSdBaG9Db3Jhc2ljaycsCiAgICAgIHZlcnNpb249JzEuMCcsCiAgICAgIGRlc2NyaXB0aW9uPSdJbXBsZW1lbnRhdGlvbiBvZiB0aGUgQWhvLUNvcmFzaWNrIEFsZ29yaXRobScsCiAgICAgIGxvbmdfZGVzY3JpcHRpb249IiAiLmpvaW4oIiIiCiAgICAgICAgTW9kdWxlIHRvIGFjY2VsZXJhdGUgc3Vic3RyaW5nIG1hdGNoaW5nIHVzaW5nIHRoZSBBaG8tQ29yYXNpY2sKICAgICAgICBhbGdvcml0aG0uCiAgICAgICAiIiIuc3RyaXAoKS5zcGxpdCgpKSwKICAgICAgYXV0aG9yPSdDYXJzb24gS2VudCcsCiAgICAgIGF1dGhvcl9lbWFpbD0nY2tlbnRAc2FuZGlhLmdvdicsCiAgICAgIHBsYXRmb3Jtcz1bJ1BPU0lYJ10sCiAgICAgIHBhY2thZ2VfZGlyPXsnJzogJ3NyYyd9LAogICAgICBleHRfbW9kdWxlcz1bYWhvQ01vZHVsZV0pCjx8ZmltX3N1ZmZpeHw+CgphaG9DTW9kdWxlID0gRXh0ZW5zaW9uKCdhaG9Db3Jhc2ljaycsCiAgICAgICAgICAgICAgICAgICAgICAgc291cmNlcz1bJ3NyYy9hY1B5dGhvbi5jcHAnLCAnc3JjL2Fob0NvcmFzaWNrLmNwcCddLAogICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2NvbXBpbGVfYXJncz1mbGFncykKPHxmaW1fZW5kfD4="]
["ec8ba643583694690a430b737facea387120aeea-3","ec8ba643583694690a430b737facea387120aeea","PHxmaW1fcHJlZml4fD4KIiIiSW5zdGFsbGF0aW9uIHNjcmlwdCBmb3IgdGhlIG1vZHVsZSBhaG9Db3Jhc2ljay4iIiIKZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAsIEV4dGVuc2lvbgppbXBvcnQgcGxhdGZvcm0gICMgRm9yIGRldGVybWluaW5nIHRoZSBvcyB0eXBlLCBpLmUuIGxpbnV4LCB3aW5kb3dzLCBldGMuCgpvc1R5cGUgPSBwbGF0Zm9ybS5zeXN0ZW0oKQoKZmxhZ3M9WyItTzIiXQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgppZiBvc1R5cGUubG93ZXIoKS5zdGFydHN3aXRoKCd3aW5kb3dzJyk6CiAgICBmbGFncy5leHRlbmQoWycvRUhzYycsICcvTzInXSkKCjx8ZmltX2VuZHw+"]
["ec8ba643583694690a430b737facea387120aeea-4","ec8ba643583694690a430b737facea387120aeea","PHxmaW1fcHJlZml4fD4KIiIiSW5zdGFsbGF0aW9uIHNjcmlwdCBmb3IgdGhlIG1vZHVsZSBhaG9Db3Jhc2ljay4iIiIKZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAsIEV4dGVuc2lvbgppbXBvcnQgcGxhdGZvcm0gICMgRm9yIGRldGVybWluaW5nIHRoZSBvcyB0eXBlLCBpLmUuIGxpbnV4LCB3aW5kb3dzLCBldGMuCgpvc1R5cGUgPSBwbGF0Zm9ybS5zeXN0ZW0oKQoKZmxhZ3M9WyItTzIiXQoKaWYgb3NUeXBlLmxvd2VyKCkuc3RhcnRzd2l0aCgnd2luZG93cycpOgogICAgZmxhZ3MuZXh0ZW5kKFsnL0VIc2MnLCAnL08yJ10pCgphaG9DTW9kdWxlID0gRXh0ZW5zaW9uKCdhaG9Db3Jhc2ljaycsCiAgICAgICAgICAgICAgICAgICAgICAgc291cmNlcz1bJ3NyYy9hY1B5dGhvbi5jcHAnLCAnc3JjL2Fob0NvcmFzaWNrLmNwcCddLAogICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2NvbXBpbGVfYXJncz1mbGFncykKc2V0dXAobmFtZT0nQWhvQ29yYXNpY2snLAogICAgICB2ZXJzaW9uPScxLjAnLAogICAgICBkZXNjcmlwdGlvbj0nSW1wbGVtZW50YXRpb24gb2YgdGhlIEFoby1Db3Jhc2ljayBBbGdvcml0aG0nLAogICAgICBsb25nX2Rlc2NyaXB0aW9uPSIgIi5qb2luKCIiIgogICAgICAgIE1vZHVsZSB0byBhY2NlbGVyYXRlIHN1YnN0cmluZyBtYXRjaGluZyB1c2luZyB0aGUgQWhvLUNvcmFzaWNrCiAgICAgICAgYWxnb3JpdGhtLgo8fGZpbV9ob2xlfD4KICAgICAgYXV0aG9yPSdDYXJzb24gS2VudCcsCiAgICAgIGF1dGhvcl9lbWFpbD0nY2tlbnRAc2FuZGlhLmdvdicsCiAgICAgIHBsYXRmb3Jtcz1bJ1BPU0lYJ10sCiAgICAgIHBhY2thZ2VfZGlyPXsnJzogJ3NyYyd9LAogICAgICBleHRfbW9kdWxlcz1bYWhvQ01vZHVsZV0pCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAiIiIuc3RyaXAoKS5zcGxpdCgpKSwKPHxmaW1fZW5kfD4="]
["ec8ba643583694690a430b737facea387120aeea-5","ec8ba643583694690a430b737facea387120aeea","PHxmaW1fcHJlZml4fD4KIiIiSW5zdGFsbGF0aW9uIHNjcmlwdCBmb3IgdGhlIG1vZHVsZSBhaG9Db3Jhc2ljay4iIiIKZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAsIEV4dGVuc2lvbgppbXBvcnQgcGxhdGZvcm0gICMgRm9yIGRldGVybWluaW5nIHRoZSBvcyB0eXBlLCBpLmUuIGxpbnV4LCB3aW5kb3dzLCBldGMuCgpvc1R5cGUgPSBwbGF0Zm9ybS5zeXN0ZW0oKQoKZmxhZ3M9WyItTzIiXQoKaWYgb3NUeXBlLmxvd2VyKCkuc3RhcnRzd2l0aCgnd2luZG93cycpOgogICAgZmxhZ3MuZXh0ZW5kKFsnL0VIc2MnLCAnL08yJ10pCgphaG9DTW9kdWxlID0gRXh0ZW5zaW9uKCdhaG9Db3Jhc2ljaycsCiAgICAgICAgICAgICAgICAgICAgICAgc291cmNlcz1bJ3NyYy9hY1B5dGhvbi5jcHAnLCAnc3JjL2Fob0NvcmFzaWNrLmNwcCddLAogICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2NvbXBpbGVfYXJncz1mbGFncykKc2V0dXAobmFtZT0nQWhvQ29yYXNpY2snLAogICAgICB2ZXJzaW9uPScxLjAnLAogICAgICBkZXNjcmlwdGlvbj0nSW1wbGVtZW50YXRpb24gb2YgdGhlIEFoby1Db3Jhc2ljayBBbGdvcml0aG0nLAogICAgICBsb25nX2Rlc2NyaXB0aW9uPSIgIi5qb2luKCIiIgogICAgICAgIE1vZHVsZSB0byBhY2NlbGVyYXRlIHN1YnN0cmluZyBtYXRjaGluZyB1c2luZyB0aGUgQWhvLUNvcmFzaWNrCiAgICAgICAgYWxnb3JpdGhtLgogICAgICAgIiIiLnN0cmlwKCkuc3BsaXQoKSksCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgYXV0aG9yPSdDYXJzb24gS2VudCcsCiAgICAgIGF1dGhvcl9lbWFpbD0nY2tlbnRAc2FuZGlhLmdvdicsCiAgICAgIHBsYXRmb3Jtcz1bJ1BPU0lYJ10sCiAgICAgIHBhY2thZ2VfZGlyPXsnJzogJ3NyYyd9LAo8fGZpbV9lbmR8Pg=="]
["e7c19075918354f70747a42c53294ba9bf5a5639-1","e7c19075918354f70747a42c53294ba9bf5a5639","PHxmaW1fcHJlZml4fD4KIyByZWFkIGFuZCB3cml0ZSBmaWxlcwoKIyMjIyMjIyMjIyMjIyMjIyMKIyBSZWFkaW5nIGZpbGVzICMKIyMjIyMjIyMjIyMjIyMjIyMKCiMgb3BlbiB0aGUgZmlsZSBpbiByZWFkIG1vZGUKaGVsbG9GaWxlID0gb3BlbihyJ2M6XHVzZXJzXHJ5YW5cRGVza3RvcFxweXRob25caGVsbG8udHh0JykKCiMgcmVhZCB0aGUgZmlsZSwgY2xvc2luZyB3aGVuIGZpbmlzaGVkIChyZXR1cm5zIGEgc2luZ2xlIHN0cmluZykKY29udGVudCA9IGhlbGxvRmlsZS5yZWFkKCkKcHJpbnQoY29udGVudCkKaGVsbG9GaWxlLmNsb3NlKCkKCiMgQWx0ZXJuYXRpdmU6IHJlYWRsaW5lcyByZXR1cm5zIGEgbGlzdCBvZiBzdHJpbmdzCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaGVsbG9GaWxlID0gb3BlbihyJ2M6XHVzZXJzXHJ5YW5cRGVza3RvcFxweXRob25caGVsbG8udHh0JykKcHJpbnQoaGVsbG9GaWxlLnJlYWRsaW5lcygpKQpoZWxsb0ZpbGUuY2xvc2UoKQoKPHxmaW1fZW5kfD4="]
["4180f5a97180ccee77cb53bf8b0674c59181f96a-1","4180f5a97180ccee77cb53bf8b0674c59181f96a",{"$cut":{"chars":19396,"head":"PHxmaW1fcHJlZml4fD4KIiIiCkZpbGVuYW1lOiBzY3JhcGUucHkKTW9kaWZpZWQ6IDIwMTktMDYtMTcKQXV0aG9yOiBEYXZpZCBPbmlhbmkKRS1tYWlsOiBvbmlhbmlkYXZpZEBnbWFpbC5jb20KCkxpY2Vuc2U6CiAgICBUaGUgY29kZSBpcyBsaWNlbnNlZCB1bmRlciBNSVQgTGljZW5zZS4gUGxlYXNlIHJlYWQgdGhlIExJQ0VOU0UgZmlsZSBpbgogICAgdGhpcyBkaXN0cmlidXRpb24gZm9yIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBsaWNlbnNpbmcgb2YgdGhpcyBjb2RlLgoKRGVzY3JpcHRpb246CiAgICBDaGVja2luZyBDU1YgZmlsZXMgZm9yIHZhbGlkaXR5LgogICAgVGhpcyBpcyBhIHZlcnkgY3J1ZGUgY2hlY2tlci4KICAgIEl0IGlzIG5vdDoKICAgICAgICAtIEVmZmljaWVudAogICAgICAgIC0gV3JpdHRlbiBpbiBpZGlvbWF0aWMgUHl0aG9uMwogICAgICAgIC0gUEVQIDgtY29tcGxpYW50CiAgICAgICAgLSBCZWF1dGlmdWwgKGNvZGUtd2lzZSkKICAgICAgICAtIFVzaW5nIGEgdW5pdCB0ZXN0aW5nIGxpYnJhcnkgbGlrZSBweXRlc3Qgb3IgaHlwb3RoZXNpcwoiIiIKCmltcG9ydCBvcwppbXBvcnQgcGRmdG90ZXh0CgppbXBvcnQgcGFuZGFzIGFzIHBkCgoKZGVmIGNoZWNrX251bV9vZl9saW5lcyhwYXRoX2Nzdjogc3RyLCBwYXRoX3BkZjogc3RyKSAtPiBib29sOgogICAgIiIiQ2hlY2tzIHdoZXRoZXIgYWxsIHRoZSBmaWxlcyB3ZXJlIHBhcnNlZC4KCiAgICBQYXJhbWV0ZXJzOgogICAgICAgIHBhdGhfY3N2OiBwYXRoIHRvIHRoZSBDU1YgZmlsZQogICAgICAgIHBhdGhfcGRmOiBwYXRoIHRvIHRoZSBQREYgZmlsZShzKQogICAgIiIiCiAgICByZXR1cm4gbGVuKG9zLmxpc3RkaXIocGF0aF9wZGYpKSA9PSBsZW4ocGQucmVhZF9jc3YocGF0aF9jc3YpKQoKCmRlZiB2ZXJpZnlfYWRfZW5kX2RhdGUocGF0aF9jc3Y6IHN0ciwgcGF0aF9wZGY6IHN0cikgLT4gYm9vbDoKICAgICIiIkNoZWNrcyB3aGV0aGVyIHRoZSBBZCBFbmQgRGF0ZSBjb2x1bW4gd2FzIHBhcnNlZCBjb3JyZWN0bHkuCgogICAgVW5mb3J0dW5hdGVseSwgdGhlIHBhcnNpbmcgcHJvZ3JhbSB3YXMgZGVmZWN0aXZlLgogICAgcGRmdG90ZXh0IGxpYnJhcnkgYWxzbyBoYWQgcHJvYmxlbXMgcGFyc2luZyBQREYgZmlsZXMuCiAgICBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGluIG9yZGVyIHRvIGFzc2lzdCBpbiBtYW51YWwKICAgIHJlbW92YWwgb2YgcmVkdW5kYW50IEFkIEVuZCBEYXRlcy4KCiAgICBQYXJhbWV0ZXJzOgogICAgICAgIHBhdGhfY3N2OiBwYXRoIHRvIHRoZSBDU1YgZmlsZQogICAgICAgIHBhdGhfcGRmOiBwYXRoIHRvIHRoZSBQREYgZmlsZShzKQogICAgIiIiCiAgICByb3dzID0gcGQucmVhZF9jc3YocGF0aF9jc3YsIGtlZXBfZGVmYXVsdF9uYT1GYWxzZSkKCiAgICBwYXRoX2NzdiA9IHBhdGhfY3N2Lmxvd2VyKCkKCiAgICBwZGZfdGV4dCA9IFtdCiAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcihwYXRoX3BkZik6CiAgICAgICAgd2l0aCBvcGVuKGYie3BhdGhfcGRmfS97ZmlsZW5hbWV9IiwgInJiIikgYXMgZmlsZToKICAgICAgICAgICAgcGRmX3RleHQuYXBwZW5kKHBkZnRvdGV4dC5QREYoZmlsZSlbMF0pCgogICAgd2l0aG91dF9hZF9lbmRfZGF0ZSA9IFtdCiAgICBmb3IgdGV4dCBpbiBwZGZfdGV4dDoKICAgICAgICBpZiAiQWQgRW5kIERhdGUiIG5vdCBpbiB0ZXh0OgogICAgICAgICAgICBpZHggPSB0ZXh0LmZpbmQoIkFkIElEIikKICAgICAgICAgICAgIyAxMSBjaGFyYWN0ZXJzIGFyZSBlbm91Z2gKICAgICAgICAgICAgd2l0aG91dF9hZF9lbmRfZGF0ZS5hcHBlbmQodGV4dFtpZHggKyA1IDogaWR4ICsgMTVdLnN0cmlwKCkpCgogICAgaWYgcGF0aF9jc3YgPT0gIi4uL2RhdGEvY3N2L3llYXItMjAxNS8yMDE1LXF1YXJ0ZXItMi5jc3YiOgogICAgICAgIGZvciBfLCByb3cgaW4gcm93cy5pdGVycm93cygpOgogICAgICAgICAgICBpZiBzdHIocm93WyJBZCBJRCJdKSBpbiB3aXRob3V0X2FkX2VuZF9kYXRlOgogICAgICAgICAgICAgICAgaWYgc3RyKHJvd1siQWQgRW5kIERhdGUiXSkgIT0gIk4vQSI6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICAgICAgICAjIE5vdGUgdGhhdCAjMzM5NCwgZm9yIHNvbWUgcmVhc29uLCB3YXMgbm90IHBhcnNlZCBieSBwZGZ0b3RleHQKICAgICAgICAgICAgZWxpZiAoCiAgICAgICAgICAgICAgICBzdHIocm93WyJBZCBFbmQgRGF0ZSJdKSA9PSAiTi9BIgogICAgICAgICAgICAgICAgYW5kIHN0cihyb3dbIkFkIElEIl0pICE9ICIzMzk0IgogICAgICAgICAgICApOgogICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZWxpZiBwYXRoX2NzdiA9PSAiLi4vZGF0YS9jc3YveWVhci0yMDE1LzIwMTUtcXVhcnRlci0zLmNzdiI6CiAgICAgICAgZm9yIF8sIHJvdyBpbiByb3dzLml0ZXJyb3dzKCk6CiAgICAgICAgICAgICMgTm90ZSB0aGF0ICMxMzEgaXMgbm90IHBhcnNlZCBieSBwZGZ0b3RleHQgKGFzIHdlIG9ubHkgcGFyc2UgdGhlIGZpcnN0IHBhZ2UpCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIHN0cihyb3dbIkFkIElEIl0pIGluIHdpdGhvdXRfYWRfZW5kX2RhdGUKICAgICAgICAgICAgICAgIGFuZCBzdHIocm93WyJBZCBJRCJdKSAhPSAiMTMxIgogICAgICAgICAgICApOgogICAgICAgICAgICAgICAgaWYgc3RyKHJvd1siQWQgRW5kIERhdGUiXSkgIT0gIk4vQSI6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICAgICAgICBlbGlmIHN0cihyb3dbIkFkIEVuZCBEYXRlIl0pID09ICJOL0EiOgogICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZWxpZiBwYXRoX2NzdiA9PSAiLi4vZGF0YS9jc3YveWVhci0yMDE2LzIwMTYtcXVhcnRlci0yLmNzdiI6CiAgICAgICAgZm9yIF8sIHJvdyBpbiByb3dzLml0ZXJyb3dzKCk6CiAgICAgICAgICAgICMgTm90ZSB0aGF0ICMxMzEgaXMgbm90IHBhcnNlZCBieSBwZGZ0b3RleHQgKGFzIHdlIG9ubHkgcGFyc2UgdGhlIGZpcnN0IHBhZ2UpCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIHN0cihyb3dbIkFkIElEIl0pIGlu"}}]
["4180f5a97180ccee77cb53bf8b0674c59181f96a-2","4180f5a97180ccee77cb53bf8b0674c59181f96a","PHxmaW1fcHJlZml4fD4KIiIiCkZpbGVuYW1lOiBzY3JhcGUucHkKTW9kaWZpZWQ6IDIwMTktMDYtMTcKQXV0aG9yOiBEYXZpZCBPbmlhbmkKRS1tYWlsOiBvbmlhbmlkYXZpZEBnbWFpbC5jb20KCkxpY2Vuc2U6CiAgICBUaGUgY29kZSBpcyBsaWNlbnNlZCB1bmRlciBNSVQgTGljZW5zZS4gUGxlYXNlIHJlYWQgdGhlIExJQ0VOU0UgZmlsZSBpbgogICAgdGhpcyBkaXN0cmlidXRpb24gZm9yIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBsaWNlbnNpbmcgb2YgdGhpcyBjb2RlLgoKRGVzY3JpcHRpb246CiAgICBDaGVja2luZyBDU1YgZmlsZXMgZm9yIHZhbGlkaXR5LgogICAgVGhpcyBpcyBhIHZlcnkgY3J1ZGUgY2hlY2tlci4KICAgIEl0IGlzIG5vdDoKICAgICAgICAtIEVmZmljaWVudAogICAgICAgIC0gV3JpdHRlbiBpbiBpZGlvbWF0aWMgUHl0aG9uMwogICAgICAgIC0gUEVQIDgtY29tcGxpYW50CiAgICAgICAgLSBCZWF1dGlmdWwgKGNvZGUtd2lzZSkKICAgICAgICAtIFVzaW5nIGEgdW5pdCB0ZXN0aW5nIGxpYnJhcnkgbGlrZSBweXRlc3Qgb3IgaHlwb3RoZXNpcwoiIiIKCmltcG9ydCBvcwppbXBvcnQgcGRmdG90ZXh0CgppbXBvcnQgcGFuZGFzIGFzIHBkCgoKZGVmIGNoZWNrX251bV9vZl9saW5lcyhwYXRoX2Nzdjogc3RyLCBwYXRoX3BkZjogc3RyKSAtPiBib29sOgogICAgIiIiQ2hlY2tzIHdoZXRoZXIgYWxsIHRoZSBmaWxlcyB3ZXJlIHBhcnNlZC4KCiAgICBQYXJhbWV0ZXJzOgogICAgICAgIHBhdGhfY3N2OiBwYXRoIHRvIHRoZSBDU1YgZmlsZQogICAgICAgIHBhdGhfcGRmOiBwYXRoIHRvIHRoZSBQREYgZmlsZShzKQogICAgIiIiCiAgICByZXR1cm4gbGVuKG9zLmxpc3RkaXIocGF0aF9wZGYpKSA9PSBsZW4ocGQucmVhZF9jc3YocGF0aF9jc3YpKQoKCmRlZiB2ZXJpZnlfYWRfZW5kX2RhdGUocGF0aF9jc3Y6IHN0ciwgcGF0aF9wZGY6IHN0cikgLT4gYm9vbDoKICAgICIiIkNoZWNrcyB3aGV0aGVyIHRoZSBBZCBFbmQgRGF0ZSBjb2x1bW4gd2FzIHBhcnNlZCBjb3JyZWN0bHkuCgogICAgVW5mb3J0dW5hdGVseSwgdGhlIHBhcnNpbmcgcHJvZ3JhbSB3YXMgZGVmZWN0aXZlLgogICAgcGRmdG90ZXh0IGxpYnJhcnkgYWxzbyBoYWQgcHJvYmxlbXMgcGFyc2luZyBQREYgZmlsZXMuCiAgICBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGluIG9yZGVyIHRvIGFzc2lzdCBpbiBtYW51YWwKICAgIHJlbW92YWwgb2YgcmVkdW5kYW50IEFkIEVuZCBEYXRlcy4KCiAgICBQYXJhbWV0ZXJzOgogICAgICAgIHBhdGhfY3N2OiBwYXRoIHRvIHRoZSBDU1YgZmlsZQogICAgICAgIHBhdGhfcGRmOiBwYXRoIHRvIHRoZSBQREYgZmlsZShzKQogICAgIiIiCiAgICByb3dzID0gcGQucmVhZF9jc3YocGF0aF9jc3YsIGtlZXBfZGVmYXVsdF9uYT1GYWxzZSkKCiAgICBwYXRoX2NzdiA9IHBhdGhfY3N2Lmxvd2VyKCkKCiAgICBwZGZfdGV4dCA9IFtdCiAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcihwYXRoX3BkZik6CiAgICAgICAgd2l0aCBvcGVuKGYie3BhdGhfcGRmfS97ZmlsZW5hbWV9IiwgInJiIikgYXMgZmlsZToKICAgICAgICAgICAgcGRmX3RleHQuYXBwZW5kKHBkZnRvdGV4dC5QREYoZmlsZSlbMF0pCgogICAgd2l0aG91dF9hZF9lbmRfZGF0ZSA9IFtdCiAgICBmb3IgdGV4dCBpbiBwZGZfdGV4dDoKICAgICAgICBpZiAiQWQgRW5kIERhdGUiIG5vdCBpbiB0ZXh0OgogICAgICAgICAgICBpZHggPSB0ZXh0LmZpbmQoIkFkIElEIikKICAgICAgICAgICAgIyAxMSBjaGFyYWN0ZXJzIGFyZSBlbm91Z2gKICAgICAgICAgICAgd2l0aG91dF9hZF9lbmRfZGF0ZS5hcHBlbmQodGV4dFtpZHggKyA1IDogaWR4ICsgMTVdLnN0cmlwKCkpCgogICAgaWYgcGF0aF9jc3YgPT0gIi4uL2RhdGEvY3N2L3llYXItMjAxNS8yMDE1LXF1YXJ0ZXItMi5jc3YiOgogICAgICAgIGZvciBfLCByb3cgaW4gcm93cy5pdGVycm93cygpOgogICAgICAgICAgICBpZiBzdHIocm93WyJBZCBJRCJdKSBpbiB3aXRob3V0X2FkX2VuZF9kYXRlOgogICAgICAgICAgICAgICAgaWYgc3RyKHJvd1siQWQgRW5kIERhdGUiXSkgIT0gIk4vQSI6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICAgICAgICAjIE5vdGUgdGhhdCAjMzM5NCwgZm9yIHNvbWUgcmVhc29uLCB3YXMgbm90IHBhcnNlZCBieSBwZGZ0b3RleHQKICAgICAgICAgICAgZWxpZiAoCiAgICAgICAgICAgICAgICBzdHIocm93WyJBZCBFbmQgRGF0ZSJdKSA9PSAiTi9BIgogICAgICAgICAgICAgICAgYW5kIHN0cihyb3dbIkFkIElEIl0pICE9ICIzMzk0IgogICAgICAgICAgICApOgogICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZWxpZiBwYXRoX2NzdiA9PSAiLi4vZGF0YS9jc3YveWVhci0yMDE1LzIwMTUtcXVhcnRlci0zLmNzdiI6CiAgICAgICAgZm9yIF8sIHJvdyBpbiByb3dzLml0ZXJyb3dzKCk6CiAgICAgICAgICAgICMgTm90ZSB0aGF0ICMxMzEgaXMgbm90IHBhcnNlZCBieSBwZGZ0b3RleHQgKGFzIHdlIG9ubHkgcGFyc2UgdGhlIGZpcnN0IHBhZ2UpCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIHN0cihyb3dbIkFkIElEIl0pIGluIHdpdGhvdXRfYWRfZW5kX2RhdGUKICAgICAgICAgICAgICAgIGFuZCBzdHIocm93WyJBZCBJRCJdKSAhPSAiMTMxIgogICAgICAgICAgICApOgogICAgICAgICAgICAgICAgaWYgc3RyKHJvd1siQWQgRW5kIERhdGUiXSkgIT0gIk4vQSI6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICAgICAgICBlbGlmIHN0cihyb3dbIkFkIEVuZCBEYXRlIl0pID09ICJOL0EiOgogICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZWxpZiBwYXRoX2NzdiA9PSAiLi4vZGF0YS9jc3YveWVhci0yMDE2LzIwMTYtcXVhcnRlci0yLmNzdiI6CiAgICAgICAgZm9yIF8sIHJvdyBpbiByb3dzLml0ZXJyb3dzKCk6CiAgICAgICAgICAgICMgTm90ZSB0aGF0ICMxMzEgaXMgbm90IHBhcnNlZCBieSBwZGZ0b3RleHQgKGFzIHdlIG9ubHkgcGFyc2UgdGhlIGZpcnN0IHBhZ2UpCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIHN0cihyb3dbIkFkIElEIl0pIGluIHdpdGhvdXRfYWRfZW5kX2RhdGUKICAgICAgICAgICAgICAgIGFuZCBzdHIocm93WyJBZCBJRCJdKSAhPSAiMTMxIgogICAgICAgICAgICApOgogICAgICAgICAgICAgICAgaWYgc3RyKHJvd1siQWQgRW5kIERhdGUiXSkgIT0gIk4vQSI6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICAgICAgICAjIFRoaXMgaXMgYWxsIGJlY2F1c2UgcGRmdG90ZXh0IGZhaWxzIHRvIHBhcnNlIGNvcnJlY3RseQogICAgICAgICAgICBlbGlmIHN0cihyb3dbIkFkIEVuZCBEYXRlIl0pID09ICJOL0EiIGFuZCBzdHIoCiAgICAgICAgICAgICAgICByb3dbIkFkIElEIl0KICAgICAgICAgICAgKSBub3QgaW4gewogICAgICAgICAgICAgICAgIjM0OTkiLAogICAgICAgICAgICAgICAgIjM0OTUiLAogICAgICAgICAgICAgICAgIjM0OTYiLAogICAgICAgICAgICAgICAgIjM0OTAiLAogICAgICAgICAgICAgICAgIjM0MjQiLAogICAgICAgICAgICAgICAgIjM0ODUiLAogICAgICAgICAgICAgICAgIjM0NDUiLAogICAgICAgICAgICAgICAgIjM0MDMiLAogICAgICAgICAgICAgICAgIjM0MDQiLAogICAgICAgICAgICAgICAgIjMzOTciLAogICAgICAgICAgICAgICAgIjM0NDkiLAogICAgICAgICAgICAgICAgIjMzOTkiLAogICAgICAgICAgICAgICAgIjM0MDIiLAogICAgICAgICAgICAgICAgIjMzOTgiLAogICAgICAgICAgICAgICAgIjMzOTUiLAogICAgICAgICAgICAgICAgIjM0MDAiLAogICAgICAgICAgICAgICAgIjM0NDEiLAogICAgICAgICAgICAgICAgIjM0NzkiLAogICAgICAgICAgICAgICAgIjM0NTgiLAogICAgICAgICAgICAgICAgIjM0NjEiLAogICAgICAgICAgICAgICAgIjM0NjMiLAogICAgICAgICAgICAgICAgIjM0NDQiLAogICAgICAgICAgICAgICAgIjM0ODQiLAogICAgICAgICAgICAgICAgIjM0ODMiLAogICAgICAgICAgICAgICAgIjM0MDUiLAogICAgICAgICAgICAgICAgIjM0NjQiLAogICAgICAgICAgICAgICAgIjM0NTciLAogICAgICAgICAgICAgICAgIjM0MjgiLAogICAgICAgICAgICB9OgogICAgICAgICAgICAgICAgcHJpbnQocGF0aF9jc3YsIHBhdGhfcGRmLCAiTUlTU0lOR1xuIiwgcm93KQogICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZWxpZiBwYXRoX2NzdiA9PSAiLi4vZGF0YS9jc3YveWVhci0yMDE2LzIwMTYtcXVhcnRlci00LmNzdiI6CiAgICAgICAgZm9yIF8sIHJvdyBpbiByb3dzLml0ZXJyb3dzKCk6CiAgICAgICAgICAgICMgTm90ZSB0aGF0ICMxMzEgaXMgbm90IHBhcnNlZCBieSBwZGZ0b3RleHQgKGFzIHdlIG9ubHkgcGFyc2UgdGhlIGZpcnN0IHBhZ2UpCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIHN0cihyb3dbIkFkIElEIl0pIGluIHdpdGhvdXRfYWRfZW5kX2RhdGUKICAgICAgICAgICAgICAgIGFuZCBzdHIocm93WyJBZCBJRCJdKSAhPSAiMTMxIgogICAgICAgICAgICApOgogICAgICAgICAgICAgICAgaWYgc3RyKHJvd1siQWQgRW5kIERhdGUiXSkgIT0gIk4vQSI6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICAgICAgICAjIFRoaXMgaXMgYWxsIGJlY2F1c2UgcGRmdG90ZXh0IGZhaWxzIHRvIHBhcnNlIGNvcnJlY3RseQogICAgICAgICAgICBlbGlmIHN0cihyb3dbIkFkIEVuZCBEYXRlIl0pID09ICJOL0EiIGFuZCBzdHIoCiAgICAgICAgICAgICAgICByb3dbIkFkIElEIl0KICAgICAgICAgICAgKSBub3QgaW4geyIyNzQ1IiwgIjMwMDQiLCAiMjc0NyIsICIyNzQyIn06CiAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBlbGlmIHBhdGhfY3N2ID09ICIuLi9kYXRhL2Nzdi95ZWFyLTIwMTcvMjAxNy1xdWFydGVyLTEuY3N2IjoKICAgICAgICBmb3IgXywgcm93IGluIHJvd3MuaXRlcnJvd3MoKToKICAgICAgICAgICAgaWYgc3RyKHJvd1siQWQgSUQiXSkgaW4gd2l0aG91dF9hZF9lbmRfZGF0ZToKICAgICAgICAgICAgICAgIGlmIHN0cihyb3dbIkFkIEVuZCBEYXRlIl0pICE9ICJOL0EiOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgICAgICAgICAgZWxpZiAoCiAgICAgICAgICAgICAgICBzdHIocm93WyJBZCBFbmQgRGF0ZSJdKSA9PSAiTi9BIgogICAgICAgICAgICAgICAgYW5kIHN0cihyb3dbIkFkIElEIl0pICE9ICIzMjQ1IgogICAgICAgICAgICApOgogICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZWxzZToKICAgICAgICBmb3IgXywgcm93IGluIHJvd3MuaXRlcnJvd3MoKToKICAgICAgICAgICAgaWYgc3RyKHJvd1siQWQgSUQiXSkgaW4gd2l0aG91dF9hZF9lbmRfZGF0ZToKICAgICAgICAgICAgICAgIGlmIHN0cihyb3dbIkFkIEVuZCBEYXRlIl0pICE9ICJOL0EiOgogICAgICAgICAgICAgICAgICAgICMgRGVidWdnaW5nCiAgICAgICAgICAgICAgICAgICAgcHJpbnQoCiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY3N2LAogICAgICAgICAgICAgICAgICAgICAgICBwYXRoX3BkZiwKICAgICAgICAgICAgICAgICAgICAgICAgIlwwMzNbMDszMW1NSVNTSU5HIE4vQVwwMzNbMG1cblxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgcm93LAogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAjIHJldHVybiBGYWxzZQoKICAgICAgICAgICAgZWxpZiBzdHIocm93WyJBZCBFbmQgRGF0ZSJdKSA9PSAiTi9BIjoKICAgICAgICAgICAgICAgICMgRGVidWdnaW5nCiAgICAgICAgICAgICAgICBwcmludCgKICAgICAgICAgICAgICAgICAgICBwYXRoX2NzdiwKICAgICAgICAgICAgICAgICAgICBwYXRoX3BkZiwKICAgICAgICAgICAgICAgICAgICAiXDAzM1swOzMxbVJFRFVOREFOVCBOL0FcMDMzWzBtXG5cbiIsCiAgICAgICAgICAgICAgICAgICAgcm93LAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgIyByZXR1cm4gRmFsc2UKCiAgICByZXR1cm4gVHJ1ZQoKCmRlZiBjaGVja19mb3JfZHVwZV9pZChmaWxlbmFtZTogc3RyKSAtPiBib29sOgogICAgIiIiQ2hlY2sgaWYgZHVwbGljYXRlIElEcyBhcmUgcHJlc2VudCIiIgogICAgZGF0YSA9IGxpc3QocGQucmVhZF9jc3Yob3BlbihmaWxlbmFtZSwgInIiKSlbIkFkIElEIl0pCiAgICBpZiBsZW4oZGF0YSkgPT0gbGVuKHNldChkYXRhKSk6CiAgICAgICAgcmV0dXJuIFRydWUKICAgIHByaW50KGYiXG57ZmlsZW5hbWV9XG4iKQogICAgcmV0dXJuIEZhbHNlCgoKZGVmIG1haW4oKSAtPiBOb25lOgogICAgIiIiVGhlIG1haW4gZnVuY3Rpb24uIiIiCiAgICAjIDIwMTUKICAgIF8yMDE1ID0gWwogICAgICAgICIvVXNlcnMvb25pYW5pL0RvY3VtZW50cy9jc3ZfZnJvbV9wZGYvZGF0YS95ZWFyLTIwMTUvMjAxNS1RdWFydGVyLTIvIiwKICAgICAgICAiL1VzZXJzL29uaWFuaS9Eb2N1bWVudHMvY3N2X2Zyb21fcGRmL2RhdGEveWVhci0yMDE1LzIwMTUtUXVhcnRlci0zLyIsCiAgICAgICAgIi9Vc2Vycy9vbmlhbmkvRG9jdW1lbnRzL2Nzdl9mcm9tX3BkZi9kYXRhL3llYXItMjAxNS8yMDE1LVF1YXJ0ZXItNC8iLAogICAgXQoKICAgICMgMjAxNgogICAgXzIwMTYgPSBbCiAgICAgICAgIi9Vc2Vycy9vbmlhbmkvRG9jdW1lbnRzL2Nzdl9mcm9tX3BkZi9kYXRhL3llYXItMjAxNi8yMDE2LVF1YXJ0ZXItMS8iLAogICAgICAgICIvVXNlcnMvb25pYW5pL0RvY3VtZW50cy9jc3ZfZnJvbV9wZGYvZGF0YS95ZWFyLTIwMTYvMjAxNi1RdWFydGVyLTIvIiwKICAgICAgICAiL1VzZXJzL29uaWFuaS9Eb2N1bWVudHMvY3N2X2Zyb21fcGRmL2RhdGEveWVhci0yMDE2LzIwMTYtUXVhcnRlci0zLyIsCiAgICAgICAgIi9Vc2Vycy9vbmlhbmkvRG9jdW1lbnRzL2Nzdl9mcm9tX3BkZi9kYXRhL3llYXItMjAxNi8yMDE2LVF1YXJ0ZXItNC8iLAogICAgXQoKICAgICMgMjAxNwogICAgXzIwMTcgPSBbCiAgICAgICAgIi9Vc2Vycy9vbmlhbmkvRG9jdW1lbnRzL2Nzdl9mcm9tX3BkZi9kYXRhL3llYXItMjAxNy8yMDE3LVF1YXJ0ZXItMS8iLAogICAgICAgICIvVXNlcnMvb25pYW5pL0RvY3VtZW50cy9jc3ZfZnJvbV9wZGYvZGF0YS95ZWFyLTIwMTcvMjAxNy1RdWFydGVyLTItQXByaWwvIiwKICAgICAgICAiL1VzZXJzL29uaWFuaS9Eb2N1bWVudHMvY3N2X2Zyb21fcGRmL2RhdGEveWVhci0yMDE3LzIwMTctUXVhcnRlci0yLU1heS8iLAogICAgICAgICIvVXNlcnMvb25pYW5pL0RvY3VtZW50cy9jc3ZfZnJvbV9wZGYvZGF0YS95ZWFyLTIwMTcvMjAxNy1RdWFydGVyLTMvIiwKICAgIF0KCiAgICAjICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMgVmVyaWZ5IHRoYXQgdGhlIG51bWJlciBvZiBsaW5lcyBtYXRjaCEKICAgICMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKICAgICMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIyBZIEUgQSBSICAyIDAgMSA1CiAgICAjICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiAgICAjIDIwMTUgUXVhcnRlciAyCiAgICBhc3NlcnQgKAogICAgICAgIGNoZWNrX251bV9vZl9saW5lcygKICAgICAgICAgICAgIi4uL2RhdGEvY3N2L3llYXItMjAxNS8yMDE1LVF1YXJ0ZXItMi5jc3YiLCBfMjAxNVswXQogICAgICAgICkKICAgICAgICBpcyBUcnVlCiAgICApCgogICAgIyAyMDE1IFF1YXJ0ZXIgMwogICAgYXNzZXJ0ICgKICAgICAgICBjaGVja19udW1fb2ZfbGluZXMoCiAgICAgICAgICAgICIuLi9kYXRhL2Nzdi95ZWFyLTIwMTUvMjAxNS1RdWFydGVyLTMuY3N2IiwgXzIwMTVbMV0KICAgICAgICApCiAgICAgICAgaXMgVHJ1ZQogICAgKQoKICAgICMgMjAxNSBRdWFydGVyIDQKICAgIGFzc2VydCAoCiAgICAgICAgY2hlY2tfbnVtX29mX2xpbmVzKAogICAgICAgICAgICAiLi4vZGF0YS9jc3YveWVhci0yMDE1LzIwMTUtUXVhcnRlci00LmNzdiIsIF8yMDE1WzJdCiAgICAgICAgKQogICAgICAgIGlzIFRydWUKICAgICkKCiAgICAjICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMgWSBFIEEgUiAgMiAwIDEgNgogICAgIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgogICAgIyAyMDE2IFF1YXJ0ZXIgMQogICAgYXNzZXJ0ICgKICAgICAgICBjaGVja19udW1fb2ZfbGluZXMoCiAgICAgICAgICAgICIuLi9kYXRhL2Nzdi95ZWFyLTIwMTYvMjAxNi1RdWFydGVyLTEuY3N2IiwgXzIwMTZbMF0KICAgICAgICApCiAgICAgICAgaXMgVHJ1ZQogICAgKQoKICAgICMgMjAxNiBRdWFydGVyIDIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgYXNzZXJ0ICgKICAgICAgICBjaGVja19udW1fb2ZfbGluZXMoCiAgICAgICAgICAgICIuLi9kYXRhL2Nzdi95ZWFyLTIwMTYvMjAxNi1RdWFydGVyLTIuY3N2IiwgXzIwMTZbMV0KICAgICAgICApCjx8ZmltX2VuZHw+"]
["4180f5a97180ccee77cb53bf8b0674c59181f96a-3","4180f5a97180ccee77cb53bf8b0674c59181f96a",{"$cut":{"chars":19396,"head":"PHxmaW1fcHJlZml4fD4KIiIiCkZpbGVuYW1lOiBzY3JhcGUucHkKTW9kaWZpZWQ6IDIwMTktMDYtMTcKQXV0aG9yOiBEYXZpZCBPbmlhbmkKRS1tYWlsOiBvbmlhbmlkYXZpZEBnbWFpbC5jb20KCkxpY2Vuc2U6CiAgICBUaGUgY29kZSBpcyBsaWNlbnNlZCB1bmRlciBNSVQgTGljZW5zZS4gUGxlYXNlIHJlYWQgdGhlIExJQ0VOU0UgZmlsZSBpbgogICAgdGhpcyBkaXN0cmlidXRpb24gZm9yIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBsaWNlbnNpbmcgb2YgdGhpcyBjb2RlLgoKRGVzY3JpcHRpb246CiAgICBDaGVja2luZyBDU1YgZmlsZXMgZm9yIHZhbGlkaXR5LgogICAgVGhpcyBpcyBhIHZlcnkgY3J1ZGUgY2hlY2tlci4KICAgIEl0IGlzIG5vdDoKICAgICAgICAtIEVmZmljaWVudAogICAgICAgIC0gV3JpdHRlbiBpbiBpZGlvbWF0aWMgUHl0aG9uMwogICAgICAgIC0gUEVQIDgtY29tcGxpYW50CiAgICAgICAgLSBCZWF1dGlmdWwgKGNvZGUtd2lzZSkKICAgICAgICAtIFVzaW5nIGEgdW5pdCB0ZXN0aW5nIGxpYnJhcnkgbGlrZSBweXRlc3Qgb3IgaHlwb3RoZXNpcwoiIiIKCmltcG9ydCBvcwppbXBvcnQgcGRmdG90ZXh0CgppbXBvcnQgcGFuZGFzIGFzIHBkCgoKZGVmIGNoZWNrX251bV9vZl9saW5lcyhwYXRoX2Nzdjogc3RyLCBwYXRoX3BkZjogc3RyKSAtPiBib29sOgogICAgIiIiQ2hlY2tzIHdoZXRoZXIgYWxsIHRoZSBmaWxlcyB3ZXJlIHBhcnNlZC4KCiAgICBQYXJhbWV0ZXJzOgogICAgICAgIHBhdGhfY3N2OiBwYXRoIHRvIHRoZSBDU1YgZmlsZQogICAgICAgIHBhdGhfcGRmOiBwYXRoIHRvIHRoZSBQREYgZmlsZShzKQogICAgIiIiCiAgICByZXR1cm4gbGVuKG9zLmxpc3RkaXIocGF0aF9wZGYpKSA9PSBsZW4ocGQucmVhZF9jc3YocGF0aF9jc3YpKQoKCmRlZiB2ZXJpZnlfYWRfZW5kX2RhdGUocGF0aF9jc3Y6IHN0ciwgcGF0aF9wZGY6IHN0cikgLT4gYm9vbDoKICAgICIiIkNoZWNrcyB3aGV0aGVyIHRoZSBBZCBFbmQgRGF0ZSBjb2x1bW4gd2FzIHBhcnNlZCBjb3JyZWN0bHkuCgogICAgVW5mb3J0dW5hdGVseSwgdGhlIHBhcnNpbmcgcHJvZ3JhbSB3YXMgZGVmZWN0aXZlLgogICAgcGRmdG90ZXh0IGxpYnJhcnkgYWxzbyBoYWQgcHJvYmxlbXMgcGFyc2luZyBQREYgZmlsZXMuCiAgICBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGluIG9yZGVyIHRvIGFzc2lzdCBpbiBtYW51YWwKICAgIHJlbW92YWwgb2YgcmVkdW5kYW50IEFkIEVuZCBEYXRlcy4KCiAgICBQYXJhbWV0ZXJzOgogICAgICAgIHBhdGhfY3N2OiBwYXRoIHRvIHRoZSBDU1YgZmlsZQogICAgICAgIHBhdGhfcGRmOiBwYXRoIHRvIHRoZSBQREYgZmlsZShzKQogICAgIiIiCiAgICByb3dzID0gcGQucmVhZF9jc3YocGF0aF9jc3YsIGtlZXBfZGVmYXVsdF9uYT1GYWxzZSkKCiAgICBwYXRoX2NzdiA9IHBhdGhfY3N2Lmxvd2VyKCkKCiAgICBwZGZfdGV4dCA9IFtdCiAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcihwYXRoX3BkZik6CiAgICAgICAgd2l0aCBvcGVuKGYie3BhdGhfcGRmfS97ZmlsZW5hbWV9IiwgInJiIikgYXMgZmlsZToKICAgICAgICAgICAgcGRmX3RleHQuYXBwZW5kKHBkZnRvdGV4dC5QREYoZmlsZSlbMF0pCgogICAgd2l0aG91dF9hZF9lbmRfZGF0ZSA9IFtdCiAgICBmb3IgdGV4dCBpbiBwZGZfdGV4dDoKICAgICAgICBpZiAiQWQgRW5kIERhdGUiIG5vdCBpbiB0ZXh0OgogICAgICAgICAgICBpZHggPSB0ZXh0LmZpbmQoIkFkIElEIikKICAgICAgICAgICAgIyAxMSBjaGFyYWN0ZXJzIGFyZSBlbm91Z2gKICAgICAgICAgICAgd2l0aG91dF9hZF9lbmRfZGF0ZS5hcHBlbmQodGV4dFtpZHggKyA1IDogaWR4ICsgMTVdLnN0cmlwKCkpCgogICAgaWYgcGF0aF9jc3YgPT0gIi4uL2RhdGEvY3N2L3llYXItMjAxNS8yMDE1LXF1YXJ0ZXItMi5jc3YiOgogICAgICAgIGZvciBfLCByb3cgaW4gcm93cy5pdGVycm93cygpOgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgIyBOb3RlIHRoYXQgIzMzOTQsIGZvciBzb21lIHJlYXNvbiwgd2FzIG5vdCBwYXJzZWQgYnkgcGRmdG90ZXh0CiAgICAgICAgICAgIGVsaWYgKAogICAgICAgICAgICAgICAgc3RyKHJvd1siQWQgRW5kIERhdGUiXSkgPT0gIk4vQSIKICAgICAgICAgICAgICAgIGFuZCBzdHIocm93WyJBZCBJRCJdKSAhPSAiMzM5NCIKICAgICAgICAgICAgKToKICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIGVsaWYgcGF0aF9jc3YgPT0gIi4uL2RhdGEvY3N2L3llYXItMjAxNS8yMDE1LXF1YXJ0ZXItMy5jc3YiOgogICAgICAgIGZvciBfLCByb3cgaW4gcm93cy5pdGVycm93cygpOgogICAgICAgICAgICAjIE5vdGUgdGhhdCAjMTMxIGlzIG5vdCBwYXJzZWQgYnkgcGRmdG90ZXh0IChhcyB3ZSBvbmx5IHBhcnNlIHRoZSBmaXJzdCBwYWdlKQogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICBzdHIocm93WyJBZCBJRCJdKSBpbiB3aXRob3V0X2FkX2VuZF9kYXRlCiAgICAgICAgICAgICAgICBhbmQgc3RyKHJvd1siQWQgSUQiXSkgIT0gIjEzMSIKICAgICAgICAgICAgKToKICAgICAgICAgICAgICAgIGlmIHN0cihyb3dbIkFkIEVuZCBEYXRlIl0pICE9ICJOL0EiOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgICAgICAgICAgZWxpZiBzdHIocm93WyJBZCBFbmQgRGF0ZSJdKSA9PSAiTi9BIjoKICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIGVsaWYgcGF0aF9jc3YgPT0gIi4uL2RhdGEvY3N2L3llYXItMjAxNi8yMDE2LXF1YXJ0ZXItMi5jc3YiOgogICAgICAgIGZvciBfLCByb3cgaW4gcm93cy5pdGVycm93cygpOgogICAgICAgICAgICAjIE5vdGUgdGhhdCAjMTMxIGlzIG5vdCBwYXJzZWQgYnkgcGRmdG90ZXh0IChhcyB3ZSBvbmx5IHBhcnNlIHRoZSBmaXJzdCBwYWdlKQogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICBzdHIocm93WyJBZCBJRCJdKSBpbiB3aXRob3V0X2FkX2VuZF9kYXRlCiAgICAgICAgICAgICAgICBhbmQgc3RyKHJvd1siQWQgSUQiXSkgIT0gIjEzMSIKICAgICAgICAgICAgKToKICAgICAgICAgICAgICAgIGlmIHN0cihyb3dbIkFkIEVuZCBEYXRlIl0pICE9ICJO"}}]
["4180f5a97180ccee77cb53bf8b0674c59181f96a-4","4180f5a97180ccee77cb53bf8b0674c59181f96a",{"$cut":{"chars":19396,"head":"PHxmaW1fcHJlZml4fD4KIiIiCkZpbGVuYW1lOiBzY3JhcGUucHkKTW9kaWZpZWQ6IDIwMTktMDYtMTcKQXV0aG9yOiBEYXZpZCBPbmlhbmkKRS1tYWlsOiBvbmlhbmlkYXZpZEBnbWFpbC5jb20KCkxpY2Vuc2U6CiAgICBUaGUgY29kZSBpcyBsaWNlbnNlZCB1bmRlciBNSVQgTGljZW5zZS4gUGxlYXNlIHJlYWQgdGhlIExJQ0VOU0UgZmlsZSBpbgogICAgdGhpcyBkaXN0cmlidXRpb24gZm9yIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBsaWNlbnNpbmcgb2YgdGhpcyBjb2RlLgoKRGVzY3JpcHRpb246CiAgICBDaGVja2luZyBDU1YgZmlsZXMgZm9yIHZhbGlkaXR5LgogICAgVGhpcyBpcyBhIHZlcnkgY3J1ZGUgY2hlY2tlci4KICAgIEl0IGlzIG5vdDoKICAgICAgICAtIEVmZmljaWVudAogICAgICAgIC0gV3JpdHRlbiBpbiBpZGlvbWF0aWMgUHl0aG9uMwogICAgICAgIC0gUEVQIDgtY29tcGxpYW50CiAgICAgICAgLSBCZWF1dGlmdWwgKGNvZGUtd2lzZSkKICAgICAgICAtIFVzaW5nIGEgdW5pdCB0ZXN0aW5nIGxpYnJhcnkgbGlrZSBweXRlc3Qgb3IgaHlwb3RoZXNpcwoiIiIKCmltcG9ydCBvcwppbXBvcnQgcGRmdG90ZXh0CgppbXBvcnQgcGFuZGFzIGFzIHBkCgoKZGVmIGNoZWNrX251bV9vZl9saW5lcyhwYXRoX2Nzdjogc3RyLCBwYXRoX3BkZjogc3RyKSAtPiBib29sOgogICAgIiIiQ2hlY2tzIHdoZXRoZXIgYWxsIHRoZSBmaWxlcyB3ZXJlIHBhcnNlZC4KCiAgICBQYXJhbWV0ZXJzOgogICAgICAgIHBhdGhfY3N2OiBwYXRoIHRvIHRoZSBDU1YgZmlsZQogICAgICAgIHBhdGhfcGRmOiBwYXRoIHRvIHRoZSBQREYgZmlsZShzKQogICAgIiIiCiAgICByZXR1cm4gbGVuKG9zLmxpc3RkaXIocGF0aF9wZGYpKSA9PSBsZW4ocGQucmVhZF9jc3YocGF0aF9jc3YpKQoKCmRlZiB2ZXJpZnlfYWRfZW5kX2RhdGUocGF0aF9jc3Y6IHN0ciwgcGF0aF9wZGY6IHN0cikgLT4gYm9vbDoKICAgICIiIkNoZWNrcyB3aGV0aGVyIHRoZSBBZCBFbmQgRGF0ZSBjb2x1bW4gd2FzIHBhcnNlZCBjb3JyZWN0bHkuCgogICAgVW5mb3J0dW5hdGVseSwgdGhlIHBhcnNpbmcgcHJvZ3JhbSB3YXMgZGVmZWN0aXZlLgogICAgcGRmdG90ZXh0IGxpYnJhcnkgYWxzbyBoYWQgcHJvYmxlbXMgcGFyc2luZyBQREYgZmlsZXMuCiAgICBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGluIG9yZGVyIHRvIGFzc2lzdCBpbiBtYW51YWwKICAgIHJlbW92YWwgb2YgcmVkdW5kYW50IEFkIEVuZCBEYXRlcy4KCiAgICBQYXJhbWV0ZXJzOgogICAgICAgIHBhdGhfY3N2OiBwYXRoIHRvIHRoZSBDU1YgZmlsZQogICAgICAgIHBhdGhfcGRmOiBwYXRoIHRvIHRoZSBQREYgZmlsZShzKQogICAgIiIiCiAgICByb3dzID0gcGQucmVhZF9jc3YocGF0aF9jc3YsIGtlZXBfZGVmYXVsdF9uYT1GYWxzZSkKCiAgICBwYXRoX2NzdiA9IHBhdGhfY3N2Lmxvd2VyKCkKCiAgICBwZGZfdGV4dCA9IFtdCiAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcihwYXRoX3BkZik6CiAgICAgICAgd2l0aCBvcGVuKGYie3BhdGhfcGRmfS97ZmlsZW5hbWV9IiwgInJiIikgYXMgZmlsZToKICAgICAgICAgICAgcGRmX3RleHQuYXBwZW5kKHBkZnRvdGV4dC5QREYoZmlsZSlbMF0pCgogICAgd2l0aG91dF9hZF9lbmRfZGF0ZSA9IFtdCiAgICBmb3IgdGV4dCBpbiBwZGZfdGV4dDoKICAgICAgICBpZiAiQWQgRW5kIERhdGUiIG5vdCBpbiB0ZXh0OgogICAgICAgICAgICBpZHggPSB0ZXh0LmZpbmQoIkFkIElEIikKICAgICAgICAgICAgIyAxMSBjaGFyYWN0ZXJzIGFyZSBlbm91Z2gKICAgICAgICAgICAgd2l0aG91dF9hZF9lbmRfZGF0ZS5hcHBlbmQodGV4dFtpZHggKyA1IDogaWR4ICsgMTVdLnN0cmlwKCkpCgogICAgaWYgcGF0aF9jc3YgPT0gIi4uL2RhdGEvY3N2L3llYXItMjAxNS8yMDE1LXF1YXJ0ZXItMi5jc3YiOgogICAgICAgIGZvciBfLCByb3cgaW4gcm93cy5pdGVycm93cygpOgogICAgICAgICAgICBpZiBzdHIocm93WyJBZCBJRCJdKSBpbiB3aXRob3V0X2FkX2VuZF9kYXRlOgogICAgICAgICAgICAgICAgaWYgc3RyKHJvd1siQWQgRW5kIERhdGUiXSkgIT0gIk4vQSI6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICAgICAgICAjIE5vdGUgdGhhdCAjMzM5NCwgZm9yIHNvbWUgcmVhc29uLCB3YXMgbm90IHBhcnNlZCBieSBwZGZ0b3RleHQKICAgICAgICAgICAgZWxpZiAoCiAgICAgICAgICAgICAgICBzdHIocm93WyJBZCBFbmQgRGF0ZSJdKSA9PSAiTi9BIgogICAgICAgICAgICAgICAgYW5kIHN0cihyb3dbIkFkIElEIl0pICE9ICIzMzk0IgogICAgICAgICAgICApOgogICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZWxpZiBwYXRoX2NzdiA9PSAiLi4vZGF0YS9jc3YveWVhci0yMDE1LzIwMTUtcXVhcnRlci0zLmNzdiI6CiAgICAgICAgZm9yIF8sIHJvdyBpbiByb3dzLml0ZXJyb3dzKCk6CiAgICAgICAgICAgICMgTm90ZSB0aGF0ICMxMzEgaXMgbm90IHBhcnNlZCBieSBwZGZ0b3RleHQgKGFzIHdlIG9ubHkgcGFyc2UgdGhlIGZpcnN0IHBhZ2UpCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIHN0cihyb3dbIkFkIElEIl0pIGluIHdpdGhvdXRfYWRfZW5kX2RhdGUKICAgICAgICAgICAgICAgIGFuZCBzdHIocm93WyJBZCBJRCJdKSAhPSAiMTMxIgogICAgICAgICAgICApOgogICAgICAgICAgICAgICAgaWYgc3RyKHJvd1siQWQgRW5kIERhdGUiXSkgIT0gIk4vQSI6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICAgICAgICBlbGlmIHN0cihyb3dbIkFkIEVuZCBEYXRlIl0pID09ICJOL0EiOgogICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZWxpZiBwYXRoX2NzdiA9PSAiLi4vZGF0YS9jc3YveWVhci0yMDE2LzIwMTYtcXVhcnRlci0yLmNzdiI6CiAgICAgICAgZm9yIF8sIHJvdyBpbiByb3dzLml0ZXJyb3dzKCk6CiAgICAgICAgICAgICMgTm90ZSB0aGF0ICMxMzEgaXMgbm90IHBhcnNlZCBieSBwZGZ0b3RleHQgKGFzIHdlIG9ubHkgcGFyc2UgdGhlIGZpcnN0IHBhZ2UpCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIHN0cihyb3dbIkFkIElEIl0pIGlu"}}]
["c1d0f35a24a420d2d63d465032aa5ff79cb9093a-1","c1d0f35a24a420d2d63d465032aa5ff79cb9093a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwo8fGZpbV9ob2xlfD4KQGF1dGhvcjogampiZXJnCiIiIgoKcHJpbnQoJ1RoaXMgcHJvZ3JhbSBkaXNwbGF5cyBhIGxpc3Qgb2YgbnVtYmVycycpCnByaW50KCcoc3RhcnRpbmcgYXQgMSkgYW5kIHRoZWlyIHNxdWFyZXMuJykKZW5kID0gaW50KGlucHV0KCdIb3cgaGlnaCBzaG91bGQgSSBnbz8gJykpCnByaW50KCkKcHJpbnQoJ051bWJlclx0U3F1YXJlJykKcHJpbnQoJy0tLS0tLS0tLS0tLS0tLScpCgpmb3IgdGFsbCBpbiByYW5nZSgxLCBlbmQgKzEpOgogICAgc3F1YXJlID0gdGFsbCAqKiAyCiAgICBwcmludChmJ3t0YWxsfVx0XHR7c3F1YXJlfScpCjx8ZmltX3N1ZmZpeHw+CiMgLSotIGNvZGluZzogdXRmLTggLSotCiIiIgpDcmVhdGVkIG9uIFN1biBEZWMgMjYgMTA6NTk6MzIgMjAyMQoKPHxmaW1fZW5kfD4="]
["6bac48aa51db93bd714fe59f42c9dbfc6ddec231-1","6bac48aa51db93bd714fe59f42c9dbfc6ddec231","PHxmaW1fcHJlZml4fD4KZXhwZWN0ZWRfb3V0cHV0ID0gewogICAgInRyYWNlcm91dGUiOiB7Cjx8ZmltX2hvbGV8PgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaG9wLW51bWJlciI6ICIxIiwKICAgICAgICAgICAgICAgICJyb3V0ZXItbmFtZSI6ICJyMSIsCiAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIxMC4xNDUuMC4yIiwKICAgICAgICAgICAgICAgICJyb3VuZC10cmlwLXRpbWUiOiAiMS43OTIgbXMgIDEuMTQyIG1zICAwLjgzMSBtcyIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJob3AtbnVtYmVyIjogIjIiLAogICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMTAuMTM1LjAuMiIsCiAgICAgICAgICAgICAgICAicm91bmQtdHJpcC10aW1lIjogIjEuNzM0IG1zICAxLjIzNCBtcyAgMC44NTUgbXMiLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9Cn0KPHxmaW1fc3VmZml4fD4KICAgICAgICAidG8iOiB7ImRvbWFpbiI6ICJleGFtcGxlLmxvY2FsIiwgImFkZHJlc3MiOiAiMTAuMTM1LjAuMiJ9LAogICAgICAgICJtYXgtaG9wcyI6ICIzMCIsCiAgICAgICAgInBhY2tldC1zaXplIjogIjUyIiwKICAgICAgICAiaG9wcyI6IFsKPHxmaW1fZW5kfD4="]
["6bac48aa51db93bd714fe59f42c9dbfc6ddec231-2","6bac48aa51db93bd714fe59f42c9dbfc6ddec231","PHxmaW1fcHJlZml4fD4KZXhwZWN0ZWRfb3V0cHV0ID0gewogICAgInRyYWNlcm91dGUiOiB7CiAgICAgICAgInRvIjogeyJkb21haW4iOiAiZXhhbXBsZS5sb2NhbCIsICJhZGRyZXNzIjogIjEwLjEzNS4wLjIifSwKICAgICAgICAibWF4LWhvcHMiOiAiMzAiLAogICAgICAgICJwYWNrZXQtc2l6ZSI6ICI1MiIsCiAgICAgICAgImhvcHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJob3AtbnVtYmVyIjogIjEiLAogICAgICAgICAgICAgICAgInJvdXRlci1uYW1lIjogInIxIiwKICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjEwLjE0NS4wLjIiLAogICAgICAgICAgICAgICAgInJvdW5kLXRyaXAtdGltZSI6ICIxLjc5MiBtcyAgMS4xNDIgbXMgIDAuODMxIG1zIiwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaG9wLW51bWJlciI6ICIyIiwKICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjEwLjEzNS4wLjIiLAo8fGZpbV9lbmR8Pg=="]
["6bac48aa51db93bd714fe59f42c9dbfc6ddec231-3","6bac48aa51db93bd714fe59f42c9dbfc6ddec231","PHxmaW1fcHJlZml4fD4KZXhwZWN0ZWRfb3V0cHV0ID0gewogICAgInRyYWNlcm91dGUiOiB7CiAgICAgICAgInRvIjogeyJkb21haW4iOiAiZXhhbXBsZS5sb2NhbCIsICJhZGRyZXNzIjogIjEwLjEzNS4wLjIifSwKICAgICAgICAibWF4LWhvcHMiOiAiMzAiLAogICAgICAgICJwYWNrZXQtc2l6ZSI6ICI1MiIsCiAgICAgICAgImhvcHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJob3AtbnVtYmVyIjogIjEiLAogICAgICAgICAgICAgICAgInJvdXRlci1uYW1lIjogInIxIiwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMTAuMTQ1LjAuMiIsCiAgICAgICAgICAgICAgICAicm91bmQtdHJpcC10aW1lIjogIjEuNzkyIG1zICAxLjE0MiBtcyAgMC44MzEgbXMiLAo8fGZpbV9lbmR8Pg=="]
["82019022ecdc065e906da1713d2a1c649891cbdd-1","82019022ecdc065e906da1713d2a1c649891cbdd","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udGVzdCBpbXBvcnQgU2ltcGxlVGVzdENhc2UKCmZyb20gLi51dGlscyBpbXBvcnQgcmVuZGVyLCBzZXR1cAoKCmNsYXNzIEVzY2FwZWpzVGVzdHMoU2ltcGxlVGVzdENhc2UpOgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgQHNldHVwKHsnZXNjYXBlanMwMSc6ICd7eyBhfGVzY2FwZWpzIH19J30pCiAgICBkZWYgdGVzdF9lc2NhcGVqczAxKHNlbGYpOgogICAgICAgIG91dHB1dCA9IHJlbmRlcignZXNjYXBlanMwMScsIHsnYSc6ICd0ZXN0aW5nXHJcbmphdmFzY3JpcHQgXCdzdHJpbmciIDxiPmVzY2FwaW5nPC9iPid9KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAndGVzdGluZ1xcdTAwMERcXHUwMDBBamF2YXNjcmlwdCAnCjx8ZmltX2VuZHw+"]
["82019022ecdc065e906da1713d2a1c649891cbdd-2","82019022ecdc065e906da1713d2a1c649891cbdd","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udGVzdCBpbXBvcnQgU2ltcGxlVGVzdENhc2UKCmZyb20gLi51dGlscyBpbXBvcnQgcmVuZGVyLCBzZXR1cAoKCmNsYXNzIEVzY2FwZWpzVGVzdHMoU2ltcGxlVGVzdENhc2UpOgoKICAgIEBzZXR1cCh7J2VzY2FwZWpzMDEnOiAne3sgYXxlc2NhcGVqcyB9fSd9KQogICAgZGVmIHRlc3RfZXNjYXBlanMwMShzZWxmKToKICAgICAgICBvdXRwdXQgPSByZW5kZXIoJ2VzY2FwZWpzMDEnLCB7J2EnOiAndGVzdGluZ1xyXG5qYXZhc2NyaXB0IFwnc3RyaW5nIiA8Yj5lc2NhcGluZzwvYj4nfSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgJ3Rlc3RpbmdcXHUwMDBEXFx1MDAwQWphdmFzY3JpcHQgJwo8fGZpbV9ob2xlfD4KICAgIEBzZXR1cCh7J2VzY2FwZWpzMDInOiAneyUgYXV0b2VzY2FwZSBvZmYgJX17eyBhfGVzY2FwZWpzIH19eyUgZW5kYXV0b2VzY2FwZSAlfSd9KQogICAgZGVmIHRlc3RfZXNjYXBlanMwMihzZWxmKToKICAgICAgICBvdXRwdXQgPSByZW5kZXIoJ2VzY2FwZWpzMDInLCB7J2EnOiAndGVzdGluZ1xyXG5qYXZhc2NyaXB0IFwnc3RyaW5nIiA8Yj5lc2NhcGluZzwvYj4nfSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgJ3Rlc3RpbmdcXHUwMDBEXFx1MDAwQWphdmFzY3JpcHQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFx1MDAyN3N0cmluZ1xcdTAwMjIgXFx1MDAzQ2JcXHUwMDNFJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNjYXBpbmdcXHUwMDNDL2JcXHUwMDNFJykKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcdTAwMjdzdHJpbmdcXHUwMDIyIFxcdTAwM0NiXFx1MDAzRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzY2FwaW5nXFx1MDAzQy9iXFx1MDAzRScpCgo8fGZpbV9lbmR8Pg=="]
["ec018096f5e029066578c7236c44040eac4c425d-1","ec018096f5e029066578c7236c44040eac4c425d","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KIiIiCklkZW50aWZ5IGZpbGUgZGF0YSBiYXNlZCBvbiBjb250ZW50Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgo8fGZpbV9lbmR8Pg=="]
["ec018096f5e029066578c7236c44040eac4c425d-2","ec018096f5e029066578c7236c44040eac4c425d","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KIiIiCklkZW50aWZ5IGZpbGUgZGF0YSBiYXNlZCBvbiBjb250ZW50CiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKZnJvbSB4bmJfcGFyc2UuaWRlbnRpZnkgaW1wb3J0IG1haW4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBtYWluKCkKPHxmaW1fZW5kfD4="]
["ec27008b657db9ca12159720652417bff5ab4d61-1","ec27008b657db9ca12159720652417bff5ab4d61","PHxmaW1fcHJlZml4fD4KZnJvbSByYW5kb20gaW1wb3J0IHJhbmRpbnQKCmZyb20gUElMIGltcG9ydCBJbWFnZSwgSW1hZ2VEcmF3Cgpmcm9tIHBpdG9wIGltcG9ydCBQaXRvcAoKcGl0b3AgPSBQaXRvcCgpCm1pbmlzY3JlZW4gPSBwaXRvcC5taW5pc2NyZWVuCmltYWdlID0gSW1hZ2UubmV3KAogICAgbWluaXNjcmVlbi5tb2RlLAogICAgbWluaXNjcmVlbi5zaXplLAopCmNhbnZhcyA9IEltYWdlRHJhdy5EcmF3KGltYWdlKQoKc3BlZWRfZmFjdG9yID0gMTUKcGFydGljbGVzID0gW10KCgpjbGFzcyBQYXJ0aWNsZToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4LCB5KToKICAgICAgICBzZWxmLnggPSB4CiAgICAgICAgc2VsZi55ID0geQogICAgICAgIHNlbGYudXBkYXRlKCkKCiAgICBkZWYgZ2V0X3Bvc2l0aW9uKHNlbGYpOgogICAgICAgIHJldHVybiAoc2VsZi54LCBzZWxmLnkpCgogICAgZGVmIHVwZGF0ZShzZWxmKToKICAgICAgICBkeCA9ICgKICAgICAgICAgICAgKHNlbGYueCAtIChtaW5pc2NyZWVuLndpZHRoIC8gMikpIC8gc3BlZWRfZmFjdG9yCiAgICAgICAgICAgIGlmIHNlbGYueCA8IChtaW5pc2NyZWVuLndpZHRoIC8gMikKICAgICAgICAgICAgZWxzZSAoc2VsZi54IC0gKG1pbmlzY3JlZW4ud2lkdGggLyAyKSkgLyBzcGVlZF9mYWN0b3IKICAgICAgICApCiAgICAgICAgZHkgPSAoCiAgICAgICAgICAgIChzZWxmLnkgLSAobWluaXNjcmVlbi5oZWlnaHQgLyAyKSkgLyBzcGVlZF9mYWN0b3IKICAgICAgICAgICAgaWYgc2VsZi55IDwgKG1pbmlzY3JlZW4uaGVpZ2h0IC8gMikKICAgICAgICAgICAgZWxzZSAoc2VsZi55IC0gKG1pbmlzY3JlZW4uaGVpZ2h0IC8gMikpIC8gc3BlZWRfZmFjdG9yCiAgICAgICAgKQogICAgICAgIHNlbGYueCArPSBkeAogICAgICAgIHNlbGYueSArPSBkeQoKCmRlZiBhZGRfbmV3X3BhcnRpY2xlKCk6CiAgICB4ID0gcmFuZGludCgwLCBtaW5pc2NyZWVuLndpZHRoKQogICAgeSA9IHJhbmRpbnQoMCwgbWluaXNjcmVlbi5oZWlnaHQpCiAgICBwYXJ0aWNsZXMuYXBwZW5kKFBhcnRpY2xlKHgsIHkpKQoKCndoaWxlIFRydWU6CiAgICAjIENsZWFyIGRpc3BsYXkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgY2FudmFzLnJlY3RhbmdsZShtaW5pc2NyZWVuLmJvdW5kaW5nX2JveCwgZmlsbD0wKQogICAgcGFydGljbGVzLmNsZWFyKCkKCiAgICBzcGVlZF9mYWN0b3IgPSByYW5kaW50KDUsIDMwKQo8fGZpbV9lbmR8Pg=="]
["68ce1f7526533d210e0b620de5d30be833694ce4-1","68ce1f7526533d210e0b620de5d30be833694ce4","PHxmaW1fcHJlZml4fD4KIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KU2VhcmNoIGFsZ29yaXRobXMgYW5kIGRpc3RhbmNlIGhldXJpc3RpY3MKIiIiCjx8ZmltX2VuZHw+"]
["68ce1f7526533d210e0b620de5d30be833694ce4-2","68ce1f7526533d210e0b620de5d30be833694ce4","PHxmaW1fcHJlZml4fD4KIiIiClNlYXJjaCBhbGdvcml0aG1zIGFuZCBkaXN0YW5jZSBoZXVyaXN0aWNzCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIiIiCjx8ZmltX2VuZHw+"]
["68ce1f7526533d210e0b620de5d30be833694ce4-3","68ce1f7526533d210e0b620de5d30be833694ce4","PHxmaW1fcHJlZml4fD4KIiIiClNlYXJjaCBhbGdvcml0aG1zIGFuZCBkaXN0YW5jZSBoZXVyaXN0aWNzCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIiIiCjx8ZmltX2VuZHw+"]
["68ce1f7526533d210e0b620de5d30be833694ce4-4","68ce1f7526533d210e0b620de5d30be833694ce4","PHxmaW1fcHJlZml4fD4KIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KU2VhcmNoIGFsZ29yaXRobXMgYW5kIGRpc3RhbmNlIGhldXJpc3RpY3MKIiIiCjx8ZmltX2VuZHw+"]
["68ce1f7526533d210e0b620de5d30be833694ce4-5","68ce1f7526533d210e0b620de5d30be833694ce4","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIiIiClNlYXJjaCBhbGdvcml0aG1zIGFuZCBkaXN0YW5jZSBoZXVyaXN0aWNzCiIiIgo8fGZpbV9lbmR8Pg=="]
["e78526c9742be0a806e208b76d7a4f249bcaf554-1","e78526c9742be0a806e208b76d7a4f249bcaf554","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKaW1wb3J0IG51bXB5IGFzIG5wCiMgVyA9IHRmLlZhcmlhYmxlKFtbMSwyLDNdLCBbMyw0LDVdXSwgZHR5cGU9dGYuZmxvYXQzMiwgbmFtZT0nd2VpZ2h0cycpCiMgYiA9IHRmLlZhcmlhYmxlKFtbMSwyLDNdXSwgZHR5cGU9dGYuZmxvYXQzMiwgbmFtZT0nYmlhc2VzJykKIwojIGluaXQgPSB0Zi5nbG9iYWxfdmFyaWFibGVzX2luaXRpYWxpemVyKCkKIwojIHNhdmVyID0gdGYudHJhaW4uU2F2ZXIoKQojCiMgd2l0aCB0Zi5TZXNzaW9uKCkgYXMgc2VzczoKIyAgICAgc2Vzcy5ydW4oaW5pdCkKIyAgICAgc2F2ZV9wYXRoID0gc2F2ZXIuc2F2ZShzZXNzLCAnbXlfbmV0L3NhdmVfbmV0LmNrcHQnKSAj5bCG5Y+Y6YeP5L+d5a2Y5Yiw5paH5Lu25LitCiMgICAgIHByaW50KCfkv53lrZjot6/lvoTvvJonICtzYXZlX3BhdGgpCgpXID0gdGYuVmFyaWFibGUobnAuYXJhbmdlKDYpLnJlc2hhcGUoKDIsMykpLCBkdHlwZT10Zi5mbG9hdDMyLCBuYW1lPSd3ZWlnaHRzJykKYiA9IHRmLlZhcmlhYmxlKG5wLmFyYW5nZSgzKS5yZXNoYXBlKCgxLDMpKSwgZHR5cGU9dGYuZmxvYXQzMiwgbmFtZT0nYmlhc2VzJykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKc2F2ZXIgPSB0Zi50cmFpbi5TYXZlcigpCndpdGggdGYuU2Vzc2lvbigpIGFzIHNlc3M6CiAgICBzYXZlci5yZXN0b3JlKHNlc3MsICdteV9uZXQvc2F2ZV9uZXQuY2twdCcpICPku47mlofku7bkuK3or7vlj5blj5jph48KPHxmaW1fZW5kfD4="]
["e78526c9742be0a806e208b76d7a4f249bcaf554-2","e78526c9742be0a806e208b76d7a4f249bcaf554","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKaW1wb3J0IG51bXB5IGFzIG5wCiMgVyA9IHRmLlZhcmlhYmxlKFtbMSwyLDNdLCBbMyw0LDVdXSwgZHR5cGU9dGYuZmxvYXQzMiwgbmFtZT0nd2VpZ2h0cycpCiMgYiA9IHRmLlZhcmlhYmxlKFtbMSwyLDNdXSwgZHR5cGU9dGYuZmxvYXQzMiwgbmFtZT0nYmlhc2VzJykKIwojIGluaXQgPSB0Zi5nbG9iYWxfdmFyaWFibGVzX2luaXRpYWxpemVyKCkKIwojIHNhdmVyID0gdGYudHJhaW4uU2F2ZXIoKQojCiMgd2l0aCB0Zi5TZXNzaW9uKCkgYXMgc2VzczoKIyAgICAgc2Vzcy5ydW4oaW5pdCkKIyAgICAgc2F2ZV9wYXRoID0gc2F2ZXIuc2F2ZShzZXNzLCAnbXlfbmV0L3NhdmVfbmV0LmNrcHQnKSAj5bCG5Y+Y6YeP5L+d5a2Y5Yiw5paH5Lu25LitCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyAgICAgcHJpbnQoJ+S/neWtmOi3r+W+hO+8micgK3NhdmVfcGF0aCkKClcgPSB0Zi5WYXJpYWJsZShucC5hcmFuZ2UoNikucmVzaGFwZSgoMiwzKSksIGR0eXBlPXRmLmZsb2F0MzIsIG5hbWU9J3dlaWdodHMnKQpiID0gdGYuVmFyaWFibGUobnAuYXJhbmdlKDMpLnJlc2hhcGUoKDEsMykpLCBkdHlwZT10Zi5mbG9hdDMyLCBuYW1lPSdiaWFzZXMnKQo8fGZpbV9lbmR8Pg=="]
["e78526c9742be0a806e208b76d7a4f249bcaf554-3","e78526c9742be0a806e208b76d7a4f249bcaf554","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKaW1wb3J0IG51bXB5IGFzIG5wCiMgVyA9IHRmLlZhcmlhYmxlKFtbMSwyLDNdLCBbMyw0LDVdXSwgZHR5cGU9dGYuZmxvYXQzMiwgbmFtZT0nd2VpZ2h0cycpCiMgYiA9IHRmLlZhcmlhYmxlKFtbMSwyLDNdXSwgZHR5cGU9dGYuZmxvYXQzMiwgbmFtZT0nYmlhc2VzJykKIwojIGluaXQgPSB0Zi5nbG9iYWxfdmFyaWFibGVzX2luaXRpYWxpemVyKCkKIwojIHNhdmVyID0gdGYudHJhaW4uU2F2ZXIoKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMKIyB3aXRoIHRmLlNlc3Npb24oKSBhcyBzZXNzOgojICAgICBzZXNzLnJ1bihpbml0KQojICAgICBzYXZlX3BhdGggPSBzYXZlci5zYXZlKHNlc3MsICdteV9uZXQvc2F2ZV9uZXQuY2twdCcpICPlsIblj5jph4/kv53lrZjliLDmlofku7bkuK0KPHxmaW1fZW5kfD4="]
["e78526c9742be0a806e208b76d7a4f249bcaf554-4","e78526c9742be0a806e208b76d7a4f249bcaf554","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKaW1wb3J0IG51bXB5IGFzIG5wCiMgVyA9IHRmLlZhcmlhYmxlKFtbMSwyLDNdLCBbMyw0LDVdXSwgZHR5cGU9dGYuZmxvYXQzMiwgbmFtZT0nd2VpZ2h0cycpCiMgYiA9IHRmLlZhcmlhYmxlKFtbMSwyLDNdXSwgZHR5cGU9dGYuZmxvYXQzMiwgbmFtZT0nYmlhc2VzJykKIwojIGluaXQgPSB0Zi5nbG9iYWxfdmFyaWFibGVzX2luaXRpYWxpemVyKCkKIwojIHNhdmVyID0gdGYudHJhaW4uU2F2ZXIoKQojCiMgd2l0aCB0Zi5TZXNzaW9uKCkgYXMgc2VzczoKIyAgICAgc2Vzcy5ydW4oaW5pdCkKPHxmaW1faG9sZXw+CmIgPSB0Zi5WYXJpYWJsZShucC5hcmFuZ2UoMykucmVzaGFwZSgoMSwzKSksIGR0eXBlPXRmLmZsb2F0MzIsIG5hbWU9J2JpYXNlcycpCgpzYXZlciA9IHRmLnRyYWluLlNhdmVyKCkKd2l0aCB0Zi5TZXNzaW9uKCkgYXMgc2VzczoKICAgIHNhdmVyLnJlc3RvcmUoc2VzcywgJ215X25ldC9zYXZlX25ldC5ja3B0JykgI+S7juaWh+S7tuS4reivu+WPluWPmOmHjwogICAgcHJpbnQoc2Vzcy5ydW4oVykpCiAgICBwcmludChzZXNzLnJ1bihiKSkKPHxmaW1fc3VmZml4fD4KIyAgICAgc2F2ZV9wYXRoID0gc2F2ZXIuc2F2ZShzZXNzLCAnbXlfbmV0L3NhdmVfbmV0LmNrcHQnKSAj5bCG5Y+Y6YeP5L+d5a2Y5Yiw5paH5Lu25LitCiMgICAgIHByaW50KCfkv53lrZjot6/lvoTvvJonICtzYXZlX3BhdGgpCgpXID0gdGYuVmFyaWFibGUobnAuYXJhbmdlKDYpLnJlc2hhcGUoKDIsMykpLCBkdHlwZT10Zi5mbG9hdDMyLCBuYW1lPSd3ZWlnaHRzJykKPHxmaW1fZW5kfD4="]
["68de75aa5d1183574a38ebe025ab79337c3f5d17-1","68de75aa5d1183574a38ebe025ab79337c3f5d17","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAoKZnJvbSBjb3Jlc2VuZGVyIGltcG9ydCBodHRwX2Vycm9yX2hhbmRsZXJzIGFzIGhhbmRsZXJzCmZyb20gY29yZXNlbmRlciBpbXBvcnQgZXJyb3JzCgoKZGVmIHRlc3RfZGVmYXVsdF9lcnJvcihtb2NrZXIpOgogICAgcnNwID0gbW9ja2VyLnBhdGNoKCdodHRweC5SZXNwb25zZScpCiAgICByc3Auc3RhdHVzX2NvZGUgPSA0NDcKICAgIHJzcF9qc29uID0geydkYXRhJzogeydjb2RlJzogJycsICdlcnJvcnMnOiBbeydjb2RlJzogJ0EnLCAnZGVzY3JpcHRpb24nOiAnZGVzYyd9XX19CiAgICByc3AuanNvbiA9IG1vY2tlci5NYWdpY01vY2socmV0dXJuX3ZhbHVlPXJzcF9qc29uKQoKICAgIGhhbmRsZXIgPSBoYW5kbGVycy5nZXRfaGFuZGxlcihyc3ApCiAgICBhc3NlcnQgdHlwZShoYW5kbGVyKSBpcyBoYW5kbGVycy5FcnJvckhhbmRsZXJEZWZhdWx0CgogICAgd2l0aCBweXRlc3QucmFpc2VzKGVycm9ycy5Db3Jlc2VuZGVyQXBpRXJyb3IpOgogICAgICAgIGhhbmRsZXIoKQoKCmRlZiB0ZXN0X2F1dGhfZXJyb3IobW9ja2VyKToKICAgIHJzcCA9IG1vY2tlci5wYXRjaCgnaHR0cHguUmVzcG9uc2UnKQogICAgcnNwLnN0YXR1c19jb2RlID0gNDAxCiAgICByc3BfanNvbiA9IHsnZGF0YSc6IHsnY29kZSc6ICcnLCAnZXJyb3JzJzogW3snY29kZSc6ICdBVVRIT1JJWkFUSU9OX0VSUk9SJywgJ2Rlc2NyaXB0aW9uJzogJ0ludmFsaWQgY3JlZGVudGlhbHMnfV19fQogICAgcnNwLmpzb24gPSBtb2NrZXIuTWFnaWNNb2NrKHJldHVybl92YWx1ZT1yc3BfanNvbikKCiAgICBoYW5kbGVyID0gaGFuZGxlcnMuZ2V0X2hhbmRsZXIocnNwKQogICAgYXNzZXJ0IHR5cGUoaGFuZGxlcikgaXMgaGFuZGxlcnMuRXJyb3JIYW5kbGVyNDAxCgo8fGZpbV9ob2xlfD4KZGVmIHRlc3RfdmFsaWRhdGlvbl9lcnJvcihtb2NrZXIpOgogICAgcnNwID0gbW9ja2VyLnBhdGNoKCdodHRweC5SZXNwb25zZScpCiAgICByc3Auc3RhdHVzX2NvZGUgPSA0MjIKICAgIHJzcF9qc29uID0gewogICAgICAgICdkYXRhJzogewogICAgICAgICAgICAnY29kZSc6ICcnLAogICAgICAgICAgICAnZXJyb3JzJzogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICdmaWVsZCc6ICdlbWFpbCcsCiAgICAgICAgICAgICAgICAgICAgJ2Vycm9ycyc6IFsKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvZGUnOiAnSU5WQUxJRF9FTUFJTCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAnaW52YWxpZCBlbWFpbCBhZGRyZXNzJywKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgIH0KICAgIH0KICAgIHJzcC5qc29uID0gbW9ja2VyLk1hZ2ljTW9jayhyZXR1cm5fdmFsdWU9cnNwX2pzb24pCgogICAgaGFuZGxlciA9IGhhbmRsZXJzLmdldF9oYW5kbGVyKHJzcCkKICAgIGFzc2VydCB0eXBlKGhhbmRsZXIpIGlzIGhhbmRsZXJzLkVycm9ySGFuZGxlcjQyMgoKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhlcnJvcnMuVmFsaWRhdGlvbkVycm9yKToKICAgICAgICBoYW5kbGVyKCkKPHxmaW1fc3VmZml4fD4KICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhlcnJvcnMuQXV0aG9yaXphdGlvbkVycm9yKToKICAgICAgICBoYW5kbGVyKCkKCgo8fGZpbV9lbmR8Pg=="]
["68de75aa5d1183574a38ebe025ab79337c3f5d17-2","68de75aa5d1183574a38ebe025ab79337c3f5d17","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAoKZnJvbSBjb3Jlc2VuZGVyIGltcG9ydCBodHRwX2Vycm9yX2hhbmRsZXJzIGFzIGhhbmRsZXJzCmZyb20gY29yZXNlbmRlciBpbXBvcnQgZXJyb3JzCgoKZGVmIHRlc3RfZGVmYXVsdF9lcnJvcihtb2NrZXIpOgogICAgcnNwID0gbW9ja2VyLnBhdGNoKCdodHRweC5SZXNwb25zZScpCiAgICByc3Auc3RhdHVzX2NvZGUgPSA0NDcKICAgIHJzcF9qc29uID0geydkYXRhJzogeydjb2RlJzogJycsICdlcnJvcnMnOiBbeydjb2RlJzogJ0EnLCAnZGVzY3JpcHRpb24nOiAnZGVzYyd9XX19CiAgICByc3AuanNvbiA9IG1vY2tlci5NYWdpY01vY2socmV0dXJuX3ZhbHVlPXJzcF9qc29uKQoKICAgIGhhbmRsZXIgPSBoYW5kbGVycy5nZXRfaGFuZGxlcihyc3ApCiAgICBhc3NlcnQgdHlwZShoYW5kbGVyKSBpcyBoYW5kbGVycy5FcnJvckhhbmRsZXJEZWZhdWx0CgogICAgd2l0aCBweXRlc3QucmFpc2VzKGVycm9ycy5Db3Jlc2VuZGVyQXBpRXJyb3IpOgogICAgICAgIGhhbmRsZXIoKQoKCmRlZiB0ZXN0X2F1dGhfZXJyb3IobW9ja2VyKToKICAgIHJzcCA9IG1vY2tlci5wYXRjaCgnaHR0cHguUmVzcG9uc2UnKQogICAgcnNwLnN0YXR1c19jb2RlID0gNDAxCiAgICByc3BfanNvbiA9IHsnZGF0YSc6IHsnY29kZSc6ICcnLCAnZXJyb3JzJzogW3snY29kZSc6ICdBVVRIT1JJWkFUSU9OX0VSUk9SJywgJ2Rlc2NyaXB0aW9uJzogJ0ludmFsaWQgY3JlZGVudGlhbHMnfV19fQogICAgcnNwLmpzb24gPSBtb2NrZXIuTWFnaWNNb2NrKHJldHVybl92YWx1ZT1yc3BfanNvbikKCiAgICBoYW5kbGVyID0gaGFuZGxlcnMuZ2V0X2hhbmRsZXIocnNwKQogICAgYXNzZXJ0IHR5cGUoaGFuZGxlcikgaXMgaGFuZGxlcnMuRXJyb3JIYW5kbGVyNDAxCgogICAgd2l0aCBweXRlc3QucmFpc2VzKGVycm9ycy5BdXRob3JpemF0aW9uRXJyb3IpOgogICAgICAgIGhhbmRsZXIoKQoKCmRlZiB0ZXN0X3ZhbGlkYXRpb25fZXJyb3IobW9ja2VyKToKICAgIHJzcCA9IG1vY2tlci5wYXRjaCgnaHR0cHguUmVzcG9uc2UnKQogICAgcnNwLnN0YXR1c19jb2RlID0gNDIyCiAgICByc3BfanNvbiA9IHsKICAgICAgICAnZGF0YSc6IHsKICAgICAgICAgICAgJ2NvZGUnOiAnJywKICAgICAgICAgICAgJ2Vycm9ycyc6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAnZmllbGQnOiAnZW1haWwnLAogICAgICAgICAgICAgICAgICAgICdlcnJvcnMnOiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2RlJzogJ0lOVkFMSURfRU1BSUwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogJ2ludmFsaWQgZW1haWwgYWRkcmVzcycsCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICB9CiAgICB9CiAgICByc3AuanNvbiA9IG1vY2tlci5NYWdpY01vY2socmV0dXJuX3ZhbHVlPXJzcF9qc29uKQoKPHxmaW1faG9sZXw+CiAgICAgICAgaGFuZGxlcigpCjx8ZmltX3N1ZmZpeHw+CiAgICBoYW5kbGVyID0gaGFuZGxlcnMuZ2V0X2hhbmRsZXIocnNwKQogICAgYXNzZXJ0IHR5cGUoaGFuZGxlcikgaXMgaGFuZGxlcnMuRXJyb3JIYW5kbGVyNDIyCgogICAgd2l0aCBweXRlc3QucmFpc2VzKGVycm9ycy5WYWxpZGF0aW9uRXJyb3IpOgo8fGZpbV9lbmR8Pg=="]
["6b70e34f0bc12c17aca383c8961238918558fd41-1","6b70e34f0bc12c17aca383c8961238918558fd41","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN1YmxpbWUKaW1wb3J0IHN1YmxpbWVfcGx1Z2luCmZyb20gLnV0aWxzIGltcG9ydCAqCgojIHN1YmxpbWUubG9nX2lucHV0KFRydWUpOyBzdWJsaW1lLmxvZ19jb21tYW5kcyhUcnVlKTsgc3VibGltZS5sb2dfcmVzdWx0X3JlZ2V4KFRydWUpCiMgc3VibGltZS5sb2dfaW5wdXQoRmFsc2UpOyBzdWJsaW1lLmxvZ19jb21tYW5kcyhGYWxzZSk7IHN1YmxpbWUubG9nX3Jlc3VsdF9yZWdleChGYWxzZSkKClBST0pFQ1RfTkFNRSA9ICdJbXBvcnQgSGVscGVyJwpub2RlX21vZHVsZXMgPSBbXQpzb3VyY2VfbW9kdWxlcyA9IFtdOwoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBQbHVnaW4gTGlmZWN5Y2xlCgpkZWYgcGx1Z2luX2xvYWRlZCgpOgogICAgcHJpbnQoKQogICAgZGVidWcoJ1BsdWdpbiBsb2FkZWQnLCBQUk9KRUNUX05BTUUpCiAgICBzdWJsaW1lLnNldF90aW1lb3V0KGluaXRpYWxpemUsIDApCiAgICBzdWJsaW1lLnNldF90aW1lb3V0KHNldHVwLCAwKQoKZGVmIHNldHVwKCk6CiAgICBwcm9qZWN0X2ZpbGUgPSBzdWJsaW1lLmFjdGl2ZV93aW5kb3coKS5wcm9qZWN0X2ZpbGVfbmFtZSgpCiAgICBpZiBwcm9qZWN0X2ZpbGUgaXMgTm9uZToKICAgICAgICBtZXNzYWdlID0gJ1RoZXJlIGlzIG5vIHByb2plY3QgZmlsZSwgezB9IHdpbGwgbm90IHdvcmsgd2l0aG91dCBwcm9qZWN0LicuZm9ybWF0KFBST0pFQ1RfTkFNRSkKICAgICAgICBkZWJ1ZyhtZXNzYWdlLCBmb3JjZT1UcnVlKQogICAgICAgIHN1YmxpbWUuc3RhdHVzX21lc3NhZ2UobWVzc2FnZSkKICAgICAgICByZXR1cm4KICAgIHVwZGF0ZV9zb3VyY2VfbW9kdWxlcygpCiAgICB1cGRhdGVfbm9kZV9tb2R1bGVzKCkKCmRlZiB1cGRhdGVfc291cmNlX21vZHVsZXMoKToKICAgIHNvdXJjZV9mb2xkZXJzID0gZ2V0X3NvdXJjZV9mb2xkZXJzKCkKICAgIGRlYnVnKCdzb3VyY2VfZm9sZGVycycsIHNvdXJjZV9mb2xkZXJzKQogICAgZGVmIGdldF9zb3VyY2VfbW9kdWxlc19jYWxsYmFjayhlcnIsIHJlc3VsdCk6CiAgICAgICAgaWYgZXJyOgogICAgICAgICAgICBzdWJsaW1lLmVycm9yX21lc3NhZ2UoUFJPSkVDVF9OQU1FICsgJ1xuJyArIHN0cihlcnIpKQogICAgICAgICAgICByZXR1cm4KICAgICAgICBzb3VyY2VfbW9kdWxlcy5jbGVhcigpOwogICAgICAgIGV4Y2x1ZGVfcGF0dGVybnMgPSBnZXRfZXhjbHVkZV9wYXR0ZXJucygpCiAgICAgICAgaWYgdHlwZShyZXN1bHQpIGlzIG5vdCBsaXN0OgogICAgICAgICAgICBzdWJsaW1lLmVycm9yX21lc3NhZ2UoUFJPSkVDVF9OQU1FICsgJ1xuJyArICdVbmV4cGVjdGVkIHR5cGUgb2YgcmVzdWx0OiAnICsgdHlwZShyZXN1bHQpKQogICAgICAgICAgICByZXR1cm4KICAgICAgICBmb3IgaXRlbSBpbiByZXN1bHQ6CiAgICAgICAgICAgIGZpbGVwYXRoID0gaXRlbS5nZXQoJ2ZpbGVwYXRoJykKICAgICAgICAgICAgaWYgZmlsZXBhdGggaXMgTm9uZTogY29udGludWUKICAgICAgICAgICAgaWYgaXNfZXhjbHVkZWRfZmlsZShmaWxlcGF0aCwgZXhjbHVkZV9wYXR0ZXJucyk6IGNvbnRpbnVlCiAgICAgICAgICAgIHNvdXJjZV9tb2R1bGVzLmFwcGVuZChpdGVtKQogICAgICAgIHN1YmxpbWUuc3RhdHVzX21lc3NhZ2UoJ3swfTogezF9IHNvdXJjZSBtb2R1bGVzIGZvdW5kJy5mb3JtYXQoUFJPSkVDVF9OQU1FLCBsZW4oc291cmNlX21vZHVsZXMpKSkKICAgICAgICBkZWJ1ZygnVXBkYXRlIHNvdXJjZSBtb2R1bGVzJywgbGVuKHNvdXJjZV9tb2R1bGVzKSkKPHxmaW1faG9sZXw+CmRlZiB1cGRhdGVfbm9kZV9tb2R1bGVzKCk6CiAgICBub2RlX21vZHVsZXMuY2xlYXIoKQogICAgaW1wb3J0X3Jvb3QgPSBnZXRfaW1wb3J0X3Jvb3QoKQogICAgZGVidWcoJ2ltcG9ydF9yb290JywgaW1wb3J0X3Jvb3QpCiAgICBydW5fY29tbWFuZF9hc3luYygnZ2V0X21vZHVsZXMnLCB7J2ltcG9ydFJvb3QnOiBpbXBvcnRfcm9vdCwgJ3BhY2thZ2VLZXlzJzogWydkZXZEZXBlbmRlbmNpZXMnXX0sIGdldF9tb2R1bGVzX2NhbGxiYWNrKQogICAgcnVuX2NvbW1hbmRfYXN5bmMoJ2dldF9tb2R1bGVzJywgeydpbXBvcnRSb290JzogaW1wb3J0X3Jvb3QsICdwYWNrYWdlS2V5cyc6IFsnZGVwZW5kZW5jaWVzJ119LCBnZXRfbW9kdWxlc19jYWxsYmFjaykKCmRlZiBnZXRfc291cmNlX2ZvbGRlcnMoKToKICAgIHdpbmRvdyA9IHN1YmxpbWUuYWN0aXZlX3dpbmRvdygpCiAgICBwcm9qZWN0X2ZpbGUgPSB3aW5kb3cucHJvamVjdF9maWxlX25hbWUoKQogICAgcHJvamVjdF9kYXRhID0gd2luZG93LnByb2plY3RfZGF0YSgpCiAgICByZXN1bHQgPSBbXQogICAgZm9yIGZvbGRlciBpbiBwcm9qZWN0X2RhdGFbJ2ZvbGRlcnMnXToKICAgICAgICBmb2xkZXJfcGF0aCA9IGZvbGRlclsncGF0aCddCiAgICAgICAgcGF0aF9zb3VyY2UgPSBwcm9qZWN0X2RhdGEuZ2V0KCdwYXRoX3NvdXJjZScpCiAgICAgICAgaWYgYm9vbChwYXRoX3NvdXJjZSk6CiAgICAgICAgICAgIGZvbGRlcl9wYXRoID0gcGF0aF9zb3VyY2UKICAgICAgICBmb2xkZXJfcGF0aCA9IG5vcm1fcGF0aChwcm9qZWN0X2ZpbGUsIGZvbGRlcl9wYXRoKQogICAgICAgIHJlc3VsdC5hcHBlbmQoZm9sZGVyX3BhdGgpCiAgICByZXR1cm4gcmVzdWx0CgpkZWYgZ2V0X21vZHVsZXNfY2FsbGJhY2soZXJyLCByZXN1bHQpOgogICAgaWYgZXJyOgogICAgICAgIHN1YmxpbWUuZXJyb3JfbWVzc2FnZShQUk9KRUNUX05BTUUgKyAnXG4nICsgc3RyKGVycikpCiAgICAgICAgcmV0dXJuCiAgICBpZiB0eXBlKHJlc3VsdCkgaXMgbm90IGxpc3Q6CiAgICAgICAgc3VibGltZS5lcnJvcl9tZXNzYWdlKFBST0pFQ1RfTkFNRSArICdcbicgKyAnVW5leHBlY3RlZCB0eXBlIG9mIHJlc3VsdDogJyArIHR5cGUocmVzdWx0KSkKICAgICAgICByZXR1cm4KICAgIG5vZGVfbW9kdWxlcy5leHRlbmQocmVzdWx0KQogICAgc3VibGltZS5zdGF0dXNfbWVzc2FnZSgnezB9OiB7MX0gbm9kZSBtb2R1bGVzIGZvdW5kJy5mb3JtYXQoUFJPSkVDVF9OQU1FLCBsZW4obm9kZV9tb2R1bGVzKSkpCiAgICBkZWJ1ZygnR2V0IHBhY2thZ2VzIHJlc3VsdCcsIGxlbihyZXN1bHQpKQoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDb21tYW5kIGluc2VydF9pbXBvcnQKCmNsYXNzIEluc2VydEltcG9ydENvbW1hbmQoc3VibGltZV9wbHVnaW4uVGV4dENvbW1hbmQpOgogICAgIyBBZGRzIGltcG9ydCBvZiBpZGVudGlmaWVyIG5lYXIgY3Vyc29yCgogICAgZGVmIHJ1bihzZWxmLCBlZGl0LCBzZWxlY3RlZD1Ob25lKToKICAgICAgICBpZiAoc2VsZWN0ZWQgaXMgTm9uZSk6CiAgICAgICAgICAgIHNlbGVjdGVkX3JlZ2lvbiA9IHNlbGYudmlldy5zZWwoKVswXQogICAgICAgICAgICBzZWxlY3RlZCA9IHNlbGYudmlldy5zdWJzdHIoc2VsZWN0ZWRfcmVnaW9uKQogICAgICAgIGlmIG5vdCBib29sKHNlbGVjdGVkKToKICAgICAgICAgICAgY3Vyc29yX3JlZ2lvbiA9IHNlbGYudmlldy5leHBhbmRfYnlfY2xhc3Moc2VsZWN0ZWRfcmVnaW9uLCBzdWJsaW1lLkNMQVNTX1dPUkRfU1RBUlQgfCBzdWJsaW1lLkNMQVNTX1dPUkRfRU5EKQogICAgICAgICAgICBzZWxlY3RlZCA9IHNlbGYudmlldy5zdWJzdHIoY3Vyc29yX3JlZ2lvbikKICAgICAgICBkZWJ1ZygnU2VsZWN0ZWQgd29yZCByZWdpb24nLCBzZWxlY3RlZCkKICAgICAgICBpbXBvcnRfcm9vdCA9IGdldF9pbXBvcnRfcm9vdCgpCiAgICAgICAgbWF0Y2hfaXRlbXMgPSBbXQogICAgICAgIHBhbmVsX2l0ZW1zID0gW10KICAgICAgICAjIEl0ZXJhdGUgdGhyb3VnaCBzb3VyY2UgbW9kdWxlcyArIG5vZGUgbW9kdWxlcwogICAgICAgIGZvciBpdGVtIGluIHNvdXJjZV9tb2R1bGVzICsgbm9kZV9tb2R1bGVzOgogICAgICAgICAgICBpZiAoaXRlbS5nZXQoJ25hbWUnKSA9PSBzZWxlY3RlZCk6CiAgICAgICAgICAgICAgICBwYW5lbF9pdGVtID0gZ2V0X3BhbmVsX2l0ZW0oaW1wb3J0X3Jvb3QsIGl0ZW0pCiAgICAgICAgICAgICAgICBpZiBwYW5lbF9pdGVtIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgIHBhbmVsX2l0ZW1zLmFwcGVuZChwYW5lbF9pdGVtKQogICAgICAgICAgICAgICAgICAgIG1hdGNoX2l0ZW1zLmFwcGVuZChpdGVtKQogICAgICAgIGlmIChsZW4ocGFuZWxfaXRlbXMpID09IDApOgogICAgICAgICAgICBzZWxmLnZpZXcuc2hvd19wb3B1cCgnTm8gaW1wb3J0cyBmb3VuZCBmb3IgYDxzdHJvbmc+ezB9PC9zdHJvbmc+YCcuZm9ybWF0KHNlbGVjdGVkKSkKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgaWYgKGxlbihwYW5lbF9pdGVtcykgPT0gMSk6CiAgICAgICAgICAgIHNlbGYudmlldy5ydW5fY29tbWFuZCgnZG9faW5zZXJ0X2ltcG9ydCcsIHsnaXRlbSc6IG1hdGNoX2l0ZW1zWzBdfSkKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgb25fZG9uZSA9IG9uX2RvbmVfZnVuYyhtYXRjaF9pdGVtcywgc2VsZi5vbl9zZWxlY3QpCiAgICAgICAgc2VsZi52aWV3LndpbmRvdygpLnNob3dfcXVpY2tfcGFuZWwocGFuZWxfaXRlbXMsIG9uX2RvbmUpCiAgICAgICAgCiAgICBkZWYgb25fc2VsZWN0KHNlbGYsIHNlbGVjdGVkX2l0ZW0pOgogICAgICAgIGRlYnVnKCdTZWxlY3RlZCBpdGVtJywgc2VsZWN0ZWRfaXRlbSkKICAgICAgICBzZWxmLnZpZXcucnVuX2NvbW1hbmQoJ2RvX2luc2VydF9pbXBvcnQnLCB7J2l0ZW0nOiBzZWxlY3RlZF9pdGVtfSkKICAgIAojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENvbW1hbmQgbGlzdF9pbXBvcnRzCiMgdmlldy5ydW5fY29tbWFuZCgnbGlzdF9pbXBvcnRzJykKY2xhc3MgTGlzdEltcG9ydHNDb21tYW5kKHN1YmxpbWVfcGx1Z2luLlRleHRDb21tYW5kKToKICAgICMgU2hvdyBhbGwgYXZhaWxhYmxlIGltcG9ydHMKCiAgICBkZWYgcnVuKHNlbGYsIGVkaXQpOgogICAgICAgIGltcG9ydF9yb290ID0gZ2V0X2ltcG9ydF9yb290KCkKICAgICAgICBtYXRjaF9pdGVtcyA9IFtdCiAgICAgICAgcGFuZWxfaXRlbXMgPSBbXQogICAgICAgIGZvciBpdGVtIGluIHNvdXJjZV9tb2R1bGVzICsgbm9kZV9tb2R1bGVzOgogICAgICAgICAgICBwYW5lbF9pdGVtID0gZ2V0X3BhbmVsX2l0ZW0oaW1wb3J0X3Jvb3QsIGl0ZW0pCiAgICAgICAgICAgIGlmIHBhbmVsX2l0ZW0gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICBwYW5lbF9pdGVtcy5hcHBlbmQocGFuZWxfaXRlbSkKICAgICAgICAgICAgICAgIG1hdGNoX2l0ZW1zLmFwcGVuZChpdGVtKQogICAgICAgIG9uX2RvbmUgPSBvbl9kb25lX2Z1bmMobWF0Y2hfaXRlbXMsIHNlbGYub25fc2VsZWN0KQogICAgICAgIHNlbGYudmlldy53aW5kb3coKS5zaG93X3F1aWNrX3BhbmVsKHBhbmVsX2l0ZW1zLCBvbl9kb25lKQoKICAgIGRlZiBvbl9zZWxlY3Qoc2VsZiwgc2VsZWN0ZWRfaXRlbSk6CiAgICAgICAgZGVidWcoJ1NlbGVjdGVkIGl0ZW0nLCBzZWxlY3RlZF9pdGVtKQogICAgICAgIHNlbGYudmlldy5ydW5fY29tbWFuZCgnZG9faW5zZXJ0X2ltcG9ydCcsIHsnaXRlbSc6IHNlbGVjdGVkX2l0ZW19KQoKIyB3aW5kb3cucnVuX2NvbW1hbmQoJ3VwZGF0ZV9pbXBvcnRzJykKIyBzdWJsaW1lLmFjdGl2ZV93aW5kb3coKS5ydW5fY29tbWFuZCgndXBkYXRlX2ltcG9ydHMnLCBhcmdzPXsnYSc6J2Jhcid9KQpjbGFzcyBVcGRhdGVJbXBvcnRzQ29tbWFuZChzdWJsaW1lX3BsdWdpbi5XaW5kb3dDb21tYW5kKToKICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgc2V0dXAoKQoKIyB3aW5kb3cucnVuX2NvbW1hbmQoJ3VwZGF0ZV9zb3VyY2VfbW9kdWxlcycpCmNsYXNzIFVwZGF0ZVNvdXJjZU1vZHVsZXNDb21tYW5kKHN1YmxpbWVfcGx1Z2luLldpbmRvd0NvbW1hbmQpOgogICAgCiAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgIHVwZGF0ZV9zb3VyY2VfbW9kdWxlcygpCgojIHZpZXcucnVuX2NvbW1hbmQoJ2ltcG9ydF9mcm9tX2NsaXBib2FyZCcpCmNsYXNzIEltcG9ydEZyb21DbGlwYm9hcmRDb21tYW5kKHN1YmxpbWVfcGx1Z2luLlRleHRDb21tYW5kKToKICAgIGRlZiBydW4oc2VsZiwgZWRpdCk6CiAgICAgICAgc2VsZi52aWV3LnJ1bl9jb21tYW5kKCdpbnNlcnRfaW1wb3J0JywgYXJncz0oeydzZWxlY3RlZCc6IHN1YmxpbWUuZ2V0X2NsaXBib2FyZCgpfSkpCgpjbGFzcyBVcGRhdGVTb3VyY2VFdmVudExpc3RlbmVyKHN1YmxpbWVfcGx1Z2luLkV2ZW50TGlzdGVuZXIpOgogICAgCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi52aWV3SWRzID0gW10KCiAgICBkZWYgb25fbmV3KHNlbGYsIHZpZXcpOgogICAgICAgIHNlbGYudmlld0lkcy5hcHBlbmQodmlldy5pZCgpKQoKICAgIGRlZiBvbl9wb3N0X3NhdmUoc2VsZiwgdmlldyk6CiAgICAgICAgaWYgdmlldy5pZCgpIGluIHNlbGYudmlld0lkczoKICAgICAgICAgICAgc2VsZi52aWV3SWRzLnJlbW92ZSh2aWV3LmlkKCkpCiAgICAgICAgICAgIHVwZGF0ZV9zb3VyY2VfbW9kdWxlcygpCgojIHZpZXcucnVuX2NvbW1hbmQoJ3Rlc3QnKQojIGNsYXNzIFRlc3RDb21tYW5kKHN1YmxpbWVfcGx1Z2luLlRleHRDb21tYW5kKToKIyAgICAgZGVmIHJ1bihzZWxmLCBlZGl0KToKIyAgICAgICAgICMgcG9uZyA9IHJ1bl9jb21tYW5kKCdwaW5nJykKIyAgICAgICAgICMgZGVidWcoJ3BvbmcnLCBwb25nKQojICAgICAgICAgZGVmIGNhbGxiYWNrKGVyciwgcmVzdWx0KToKIyAgICAgICAgICAgICBkZWJ1ZygnZXJyJywgZXJyKQojICAgICAgICAgICAgIGlmIChib29sKGVycikpOiByZXR1cm4KIyAgICAgICAgICAgICBkZWJ1ZygncmVzdWx0JywgcmVzdWx0KQojICAgICAgICAgcG9uZyA9IHJ1bl9jb21tYW5kX2FzeW5jKCdwaW5nJyxkYXRhPU5vbmUsIGNhbGxiYWNrPWNhbGxiYWNrKQojICAgICAgICAgIyBkZWJ1ZygncG9uZycsIHBvbmcpCgo8fGZpbV9zdWZmaXh8PgogICAgcnVuX2NvbW1hbmRfYXN5bmMoJ2dldF9mb2xkZXJzJywgeydmb2xkZXJzJzogc291cmNlX2ZvbGRlcnN9LCBnZXRfc291cmNlX21vZHVsZXNfY2FsbGJhY2spCgo8fGZpbV9lbmR8Pg=="]
["6b70e34f0bc12c17aca383c8961238918558fd41-2","6b70e34f0bc12c17aca383c8961238918558fd41","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN1YmxpbWUKaW1wb3J0IHN1YmxpbWVfcGx1Z2luCmZyb20gLnV0aWxzIGltcG9ydCAqCgojIHN1YmxpbWUubG9nX2lucHV0KFRydWUpOyBzdWJsaW1lLmxvZ19jb21tYW5kcyhUcnVlKTsgc3VibGltZS5sb2dfcmVzdWx0X3JlZ2V4KFRydWUpCiMgc3VibGltZS5sb2dfaW5wdXQoRmFsc2UpOyBzdWJsaW1lLmxvZ19jb21tYW5kcyhGYWxzZSk7IHN1YmxpbWUubG9nX3Jlc3VsdF9yZWdleChGYWxzZSkKClBST0pFQ1RfTkFNRSA9ICdJbXBvcnQgSGVscGVyJwpub2RlX21vZHVsZXMgPSBbXQpzb3VyY2VfbW9kdWxlcyA9IFtdOwoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBQbHVnaW4gTGlmZWN5Y2xlCgpkZWYgcGx1Z2luX2xvYWRlZCgpOgogICAgcHJpbnQoKQogICAgZGVidWcoJ1BsdWdpbiBsb2FkZWQnLCBQUk9KRUNUX05BTUUpCiAgICBzdWJsaW1lLnNldF90aW1lb3V0KGluaXRpYWxpemUsIDApCiAgICBzdWJsaW1lLnNldF90aW1lb3V0KHNldHVwLCAwKQoKZGVmIHNldHVwKCk6CiAgICBwcm9qZWN0X2ZpbGUgPSBzdWJsaW1lLmFjdGl2ZV93aW5kb3coKS5wcm9qZWN0X2ZpbGVfbmFtZSgpCiAgICBpZiBwcm9qZWN0X2ZpbGUgaXMgTm9uZToKICAgICAgICBtZXNzYWdlID0gJ1RoZXJlIGlzIG5vIHByb2plY3QgZmlsZSwgezB9IHdpbGwgbm90IHdvcmsgd2l0aG91dCBwcm9qZWN0LicuZm9ybWF0KFBST0pFQ1RfTkFNRSkKICAgICAgICBkZWJ1ZyhtZXNzYWdlLCBmb3JjZT1UcnVlKQogICAgICAgIHN1YmxpbWUuc3RhdHVzX21lc3NhZ2UobWVzc2FnZSkKICAgICAgICByZXR1cm4KICAgIHVwZGF0ZV9zb3VyY2VfbW9kdWxlcygpCiAgICB1cGRhdGVfbm9kZV9tb2R1bGVzKCkKCmRlZiB1cGRhdGVfc291cmNlX21vZHVsZXMoKToKICAgIHNvdXJjZV9mb2xkZXJzID0gZ2V0X3NvdXJjZV9mb2xkZXJzKCkKICAgIGRlYnVnKCdzb3VyY2VfZm9sZGVycycsIHNvdXJjZV9mb2xkZXJzKQogICAgZGVmIGdldF9zb3VyY2VfbW9kdWxlc19jYWxsYmFjayhlcnIsIHJlc3VsdCk6CiAgICAgICAgaWYgZXJyOgogICAgICAgICAgICBzdWJsaW1lLmVycm9yX21lc3NhZ2UoUFJPSkVDVF9OQU1FICsgJ1xuJyArIHN0cihlcnIpKQogICAgICAgICAgICByZXR1cm4KICAgICAgICBzb3VyY2VfbW9kdWxlcy5jbGVhcigpOwogICAgICAgIGV4Y2x1ZGVfcGF0dGVybnMgPSBnZXRfZXhjbHVkZV9wYXR0ZXJucygpCiAgICAgICAgaWYgdHlwZShyZXN1bHQpIGlzIG5vdCBsaXN0OgogICAgICAgICAgICBzdWJsaW1lLmVycm9yX21lc3NhZ2UoUFJPSkVDVF9OQU1FICsgJ1xuJyArICdVbmV4cGVjdGVkIHR5cGUgb2YgcmVzdWx0OiAnICsgdHlwZShyZXN1bHQpKQogICAgICAgICAgICByZXR1cm4KICAgICAgICBmb3IgaXRlbSBpbiByZXN1bHQ6CiAgICAgICAgICAgIGZpbGVwYXRoID0gaXRlbS5nZXQoJ2ZpbGVwYXRoJykKICAgICAgICAgICAgaWYgZmlsZXBhdGggaXMgTm9uZTogY29udGludWUKICAgICAgICAgICAgaWYgaXNfZXhjbHVkZWRfZmlsZShmaWxlcGF0aCwgZXhjbHVkZV9wYXR0ZXJucyk6IGNvbnRpbnVlCiAgICAgICAgICAgIHNvdXJjZV9tb2R1bGVzLmFwcGVuZChpdGVtKQogICAgICAgIHN1YmxpbWUuc3RhdHVzX21lc3NhZ2UoJ3swfTogezF9IHNvdXJjZSBtb2R1bGVzIGZvdW5kJy5mb3JtYXQoUFJPSkVDVF9OQU1FLCBsZW4oc291cmNlX21vZHVsZXMpKSkKICAgICAgICBkZWJ1ZygnVXBkYXRlIHNvdXJjZSBtb2R1bGVzJywgbGVuKHNvdXJjZV9tb2R1bGVzKSkKICAgIHJ1bl9jb21tYW5kX2FzeW5jKCdnZXRfZm9sZGVycycsIHsnZm9sZGVycyc6IHNvdXJjZV9mb2xkZXJzfSwgZ2V0X3NvdXJjZV9tb2R1bGVzX2NhbGxiYWNrKQoKZGVmIHVwZGF0ZV9ub2RlX21vZHVsZXMoKToKICAgIG5vZGVfbW9kdWxlcy5jbGVhcigpCiAgICBpbXBvcnRfcm9vdCA9IGdldF9pbXBvcnRfcm9vdCgpCiAgICBkZWJ1ZygnaW1wb3J0X3Jvb3QnLCBpbXBvcnRfcm9vdCkKICAgIHJ1bl9jb21tYW5kX2FzeW5jKCdnZXRfbW9kdWxlcycsIHsnaW1wb3J0Um9vdCc6IGltcG9ydF9yb290LCAncGFja2FnZUtleXMnOiBbJ2RldkRlcGVuZGVuY2llcyddfSwgZ2V0X21vZHVsZXNfY2FsbGJhY2spCiAgICBydW5fY29tbWFuZF9hc3luYygnZ2V0X21vZHVsZXMnLCB7J2ltcG9ydFJvb3QnOiBpbXBvcnRfcm9vdCwgJ3BhY2thZ2VLZXlzJzogWydkZXBlbmRlbmNpZXMnXX0sIGdldF9tb2R1bGVzX2NhbGxiYWNrKQoKZGVmIGdldF9zb3VyY2VfZm9sZGVycygpOgogICAgd2luZG93ID0gc3VibGltZS5hY3RpdmVfd2luZG93KCkKICAgIHByb2plY3RfZmlsZSA9IHdpbmRvdy5wcm9qZWN0X2ZpbGVfbmFtZSgpCiAgICBwcm9qZWN0X2RhdGEgPSB3aW5kb3cucHJvamVjdF9kYXRhKCkKICAgIHJlc3VsdCA9IFtdCiAgICBmb3IgZm9sZGVyIGluIHByb2plY3RfZGF0YVsnZm9sZGVycyddOgogICAgICAgIGZvbGRlcl9wYXRoID0gZm9sZGVyWydwYXRoJ10KICAgICAgICBwYXRoX3NvdXJjZSA9IHByb2plY3RfZGF0YS5nZXQoJ3BhdGhfc291cmNlJykKICAgICAgICBpZiBib29sKHBhdGhfc291cmNlKToKICAgICAgICAgICAgZm9sZGVyX3BhdGggPSBwYXRoX3NvdXJjZQogICAgICAgIGZvbGRlcl9wYXRoID0gbm9ybV9wYXRoKHByb2plY3RfZmlsZSwgZm9sZGVyX3BhdGgpCiAgICAgICAgcmVzdWx0LmFwcGVuZChmb2xkZXJfcGF0aCkKICAgIHJldHVybiByZXN1bHQKCmRlZiBnZXRfbW9kdWxlc19jYWxsYmFjayhlcnIsIHJlc3VsdCk6CiAgICBpZiBlcnI6CiAgICAgICAgc3VibGltZS5lcnJvcl9tZXNzYWdlKFBST0pFQ1RfTkFNRSArICdcbicgKyBzdHIoZXJyKSkKICAgICAgICByZXR1cm4KICAgIGlmIHR5cGUocmVzdWx0KSBpcyBub3QgbGlzdDoKICAgICAgICBzdWJsaW1lLmVycm9yX21lc3NhZ2UoUFJPSkVDVF9OQU1FICsgJ1xuJyArICdVbmV4cGVjdGVkIHR5cGUgb2YgcmVzdWx0OiAnICsgdHlwZShyZXN1bHQpKQogICAgICAgIHJldHVybgogICAgbm9kZV9tb2R1bGVzLmV4dGVuZChyZXN1bHQpCiAgICBzdWJsaW1lLnN0YXR1c19tZXNzYWdlKCd7MH06IHsxfSBub2RlIG1vZHVsZXMgZm91bmQnLmZvcm1hdChQUk9KRUNUX05BTUUsIGxlbihub2RlX21vZHVsZXMpKSkKICAgIGRlYnVnKCdHZXQgcGFja2FnZXMgcmVzdWx0JywgbGVuKHJlc3VsdCkpCgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENvbW1hbmQgaW5zZXJ0X2ltcG9ydAoKY2xhc3MgSW5zZXJ0SW1wb3J0Q29tbWFuZChzdWJsaW1lX3BsdWdpbi5UZXh0Q29tbWFuZCk6CiAgICAjIEFkZHMgaW1wb3J0IG9mIGlkZW50aWZpZXIgbmVhciBjdXJzb3IKCiAgICBkZWYgcnVuKHNlbGYsIGVkaXQsIHNlbGVjdGVkPU5vbmUpOgogICAgICAgIGlmIChzZWxlY3RlZCBpcyBOb25lKToKICAgICAgICAgICAgc2VsZWN0ZWRfcmVnaW9uID0gc2VsZi52aWV3LnNlbCgpWzBdCiAgICAgICAgICAgIHNlbGVjdGVkID0gc2VsZi52aWV3LnN1YnN0cihzZWxlY3RlZF9yZWdpb24pCiAgICAgICAgaWYgbm90IGJvb2woc2VsZWN0ZWQpOgogICAgICAgICAgICBjdXJzb3JfcmVnaW9uID0gc2VsZi52aWV3LmV4cGFuZF9ieV9jbGFzcyhzZWxlY3RlZF9yZWdpb24sIHN1YmxpbWUuQ0xBU1NfV09SRF9TVEFSVCB8IHN1YmxpbWUuQ0xBU1NfV09SRF9FTkQpCiAgICAgICAgICAgIHNlbGVjdGVkID0gc2VsZi52aWV3LnN1YnN0cihjdXJzb3JfcmVnaW9uKQogICAgICAgIGRlYnVnKCdTZWxlY3RlZCB3b3JkIHJlZ2lvbicsIHNlbGVjdGVkKQogICAgICAgIGltcG9ydF9yb290ID0gZ2V0X2ltcG9ydF9yb290KCkKICAgICAgICBtYXRjaF9pdGVtcyA9IFtdCiAgICAgICAgcGFuZWxfaXRlbXMgPSBbXQogICAgICAgICMgSXRlcmF0ZSB0aHJvdWdoIHNvdXJjZSBtb2R1bGVzICsgbm9kZSBtb2R1bGVzCiAgICAgICAgZm9yIGl0ZW0gaW4gc291cmNlX21vZHVsZXMgKyBub2RlX21vZHVsZXM6CiAgICAgICAgICAgIGlmIChpdGVtLmdldCgnbmFtZScpID09IHNlbGVjdGVkKToKICAgICAgICAgICAgICAgIHBhbmVsX2l0ZW0gPSBnZXRfcGFuZWxfaXRlbShpbXBvcnRfcm9vdCwgaXRlbSkKICAgICAgICAgICAgICAgIGlmIHBhbmVsX2l0ZW0gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgcGFuZWxfaXRlbXMuYXBwZW5kKHBhbmVsX2l0ZW0pCiAgICAgICAgICAgICAgICAgICAgbWF0Y2hfaXRlbXMuYXBwZW5kKGl0ZW0pCiAgICAgICAgaWYgKGxlbihwYW5lbF9pdGVtcykgPT0gMCk6CiAgICAgICAgICAgIHNlbGYudmlldy5zaG93X3BvcHVwKCdObyBpbXBvcnRzIGZvdW5kIGZvciBgPHN0cm9uZz57MH08L3N0cm9uZz5gJy5mb3JtYXQoc2VsZWN0ZWQpKQogICAgICAgICAgICByZXR1cm4KICAgICAgICBpZiAobGVuKHBhbmVsX2l0ZW1zKSA9PSAxKToKICAgICAgICAgICAgc2VsZi52aWV3LnJ1bl9jb21tYW5kKCdkb19pbnNlcnRfaW1wb3J0JywgeydpdGVtJzogbWF0Y2hfaXRlbXNbMF19KQogICAgICAgICAgICByZXR1cm4KICAgICAgICBvbl9kb25lID0gb25fZG9uZV9mdW5jKG1hdGNoX2l0ZW1zLCBzZWxmLm9uX3NlbGVjdCkKICAgICAgICBzZWxmLnZpZXcud2luZG93KCkuc2hvd19xdWlja19wYW5lbChwYW5lbF9pdGVtcywgb25fZG9uZSkKICAgICAgICAKICAgIGRlZiBvbl9zZWxlY3Qoc2VsZiwgc2VsZWN0ZWRfaXRlbSk6CiAgICAgICAgZGVidWcoJ1NlbGVjdGVkIGl0ZW0nLCBzZWxlY3RlZF9pdGVtKQogICAgICAgIHNlbGYudmlldy5ydW5fY29tbWFuZCgnZG9faW5zZXJ0X2ltcG9ydCcsIHsnaXRlbSc6IHNlbGVjdGVkX2l0ZW19KQogICAgCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ29tbWFuZCBsaXN0X2ltcG9ydHMKIyB2aWV3LnJ1bl9jb21tYW5kKCdsaXN0X2ltcG9ydHMnKQpjbGFzcyBMaXN0SW1wb3J0c0NvbW1hbmQoc3VibGltZV9wbHVnaW4uVGV4dENvbW1hbmQpOgogICAgIyBTaG93IGFsbCBhdmFpbGFibGUgaW1wb3J0cwoKICAgIGRlZiBydW4oc2VsZiwgZWRpdCk6CiAgICAgICAgaW1wb3J0X3Jvb3QgPSBnZXRfaW1wb3J0X3Jvb3QoKQogICAgICAgIG1hdGNoX2l0ZW1zID0gW10KICAgICAgICBwYW5lbF9pdGVtcyA9IFtdCiAgICAgICAgZm9yIGl0ZW0gaW4gc291cmNlX21vZHVsZXMgKyBub2RlX21vZHVsZXM6CiAgICAgICAgICAgIHBhbmVsX2l0ZW0gPSBnZXRfcGFuZWxfaXRlbShpbXBvcnRfcm9vdCwgaXRlbSkKICAgICAgICAgICAgaWYgcGFuZWxfaXRlbSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgIHBhbmVsX2l0ZW1zLmFwcGVuZChwYW5lbF9pdGVtKQogICAgICAgICAgICAgICAgbWF0Y2hfaXRlbXMuYXBwZW5kKGl0ZW0pCiAgICAgICAgb25fZG9uZSA9IG9uX2RvbmVfZnVuYyhtYXRjaF9pdGVtcywgc2VsZi5vbl9zZWxlY3QpCiAgICAgICAgc2VsZi52aWV3LndpbmRvdygpLnNob3dfcXVpY2tfcGFuZWwocGFuZWxfaXRlbXMsIG9uX2RvbmUpCgogICAgZGVmIG9uX3NlbGVjdChzZWxmLCBzZWxlY3RlZF9pdGVtKToKICAgICAgICBkZWJ1ZygnU2VsZWN0ZWQgaXRlbScsIHNlbGVjdGVkX2l0ZW0pCiAgICAgICAgc2VsZi52aWV3LnJ1bl9jb21tYW5kKCdkb19pbnNlcnRfaW1wb3J0JywgeydpdGVtJzogc2VsZWN0ZWRfaXRlbX0pCgojIHdpbmRvdy5ydW5fY29tbWFuZCgndXBkYXRlX2ltcG9ydHMnKQojIHN1YmxpbWUuYWN0aXZlX3dpbmRvdygpLnJ1bl9jb21tYW5kKCd1cGRhdGVfaW1wb3J0cycsIGFyZ3M9eydhJzonYmFyJ30pCmNsYXNzIFVwZGF0ZUltcG9ydHNDb21tYW5kKHN1YmxpbWVfcGx1Z2luLldpbmRvd0NvbW1hbmQpOgogICAgZGVmIHJ1bihzZWxmKToKICAgICAgICBzZXR1cCgpCgojIHdpbmRvdy5ydW5fY29tbWFuZCgndXBkYXRlX3NvdXJjZV9tb2R1bGVzJykKY2xhc3MgVXBkYXRlU291cmNlTW9kdWxlc0NvbW1hbmQoc3VibGltZV9wbHVnaW4uV2luZG93Q29tbWFuZCk6CiAgICAKICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgdXBkYXRlX3NvdXJjZV9tb2R1bGVzKCkKCiMgdmlldy5ydW5fY29tbWFuZCgnaW1wb3J0X2Zyb21fY2xpcGJvYXJkJykKY2xhc3MgSW1wb3J0RnJvbUNsaXBib2FyZENvbW1hbmQoc3VibGltZV9wbHVnaW4uVGV4dENvbW1hbmQpOgogICAgZGVmIHJ1bihzZWxmLCBlZGl0KToKICAgICAgICBzZWxmLnZpZXcucnVuX2NvbW1hbmQoJ2luc2VydF9pbXBvcnQnLCBhcmdzPSh7J3NlbGVjdGVkJzogc3VibGltZS5nZXRfY2xpcGJvYXJkKCl9KSkKCmNsYXNzIFVwZGF0ZVNvdXJjZUV2ZW50TGlzdGVuZXIoc3VibGltZV9wbHVnaW4uRXZlbnRMaXN0ZW5lcik6CiAgICAKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLnZpZXdJZHMgPSBbXQoKICAgIGRlZiBvbl9uZXcoc2VsZiwgdmlldyk6CiAgICAgICAgc2VsZi52aWV3SWRzLmFwcGVuZCh2aWV3LmlkKCkpCgogICAgZGVmIG9uX3Bvc3Rfc2F2ZShzZWxmLCB2aWV3KToKICAgICAgICBpZiB2aWV3LmlkKCkgaW4gc2VsZi52aWV3SWRzOgogICAgICAgICAgICBzZWxmLnZpZXdJZHMucmVtb3ZlKHZpZXcuaWQoKSkKICAgICAgICAgICAgdXBkYXRlX3NvdXJjZV9tb2R1bGVzKCkKCiMgdmlldy5ydW5fY29tbWFuZCgndGVzdCcpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBjbGFzcyBUZXN0Q29tbWFuZChzdWJsaW1lX3BsdWdpbi5UZXh0Q29tbWFuZCk6CiMgICAgIGRlZiBydW4oc2VsZiwgZWRpdCk6CiMgICAgICAgICAjIHBvbmcgPSBydW5fY29tbWFuZCgncGluZycpCiMgICAgICAgICAjIGRlYnVnKCdwb25nJywgcG9uZykKPHxmaW1fZW5kfD4="]
["e72cbbb8222e365a42c080908b827f17aab973c4-1","e72cbbb8222e365a42c080908b827f17aab973c4","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KZnJvbSBwYWdlZG93bi53aWRnZXRzIGltcG9ydCBBZG1pblBhZ2Vkb3duV2lkZ2V0CmZyb20gZGphbmdvIGltcG9ydCBmb3JtcwoKCmZyb20gbW9kZWxzIGltcG9ydCBQb3N0LCBDYXRlZ29yeSwgTm90aWNlLCBDb21tZW50CiMgUmVnaXN0ZXIgeW91ciBtb2RlbHMgaGVyZS4KY2xhc3MgUG9zdEZvcm0oZm9ybXMuTW9kZWxGb3JtKToKICAgIGNvbnRlbnQgPSBmb3Jtcy5DaGFyRmllbGQod2lkZ2V0PUFkbWluUGFnZWRvd25XaWRnZXQoKSkKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIG1vZGVsID0gUG9zdAogICAgICAgIGZpZWxkcyA9ICdfX2FsbF9fJwoKY2xhc3MgTm90aWNlRm9ybShmb3Jtcy5Nb2RlbEZvcm0pOgogICAgY29udGVudCA9IGZvcm1zLkNoYXJGaWVsZCh3aWRnZXQ9QWRtaW5QYWdlZG93bldpZGdldCgpKQoKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgbW9kZWwgPSBOb3RpY2UKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGZpZWxkcyA9ICdfX2FsbF9fJwoKPHxmaW1fZW5kfD4="]
["e72cbbb8222e365a42c080908b827f17aab973c4-2","e72cbbb8222e365a42c080908b827f17aab973c4","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KZnJvbSBwYWdlZG93bi53aWRnZXRzIGltcG9ydCBBZG1pblBhZ2Vkb3duV2lkZ2V0CmZyb20gZGphbmdvIGltcG9ydCBmb3JtcwoKCmZyb20gbW9kZWxzIGltcG9ydCBQb3N0LCBDYXRlZ29yeSwgTm90aWNlLCBDb21tZW50CiMgUmVnaXN0ZXIgeW91ciBtb2RlbHMgaGVyZS4KY2xhc3MgUG9zdEZvcm0oZm9ybXMuTW9kZWxGb3JtKToKICAgIGNvbnRlbnQgPSBmb3Jtcy5DaGFyRmllbGQod2lkZ2V0PUFkbWluUGFnZWRvd25XaWRnZXQoKSkKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIG1vZGVsID0gUG9zdAogICAgICAgIGZpZWxkcyA9ICdfX2FsbF9fJwoKY2xhc3MgTm90aWNlRm9ybShmb3Jtcy5Nb2RlbEZvcm0pOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBjb250ZW50ID0gZm9ybXMuQ2hhckZpZWxkKHdpZGdldD1BZG1pblBhZ2Vkb3duV2lkZ2V0KCkpCgogICAgY2xhc3MgTWV0YToKICAgICAgICBtb2RlbCA9IE5vdGljZQo8fGZpbV9lbmR8Pg=="]
["e72cbbb8222e365a42c080908b827f17aab973c4-3","e72cbbb8222e365a42c080908b827f17aab973c4","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KZnJvbSBwYWdlZG93bi53aWRnZXRzIGltcG9ydCBBZG1pblBhZ2Vkb3duV2lkZ2V0CmZyb20gZGphbmdvIGltcG9ydCBmb3JtcwoKCmZyb20gbW9kZWxzIGltcG9ydCBQb3N0LCBDYXRlZ29yeSwgTm90aWNlLCBDb21tZW50CiMgUmVnaXN0ZXIgeW91ciBtb2RlbHMgaGVyZS4KY2xhc3MgUG9zdEZvcm0oZm9ybXMuTW9kZWxGb3JtKToKICAgIGNvbnRlbnQgPSBmb3Jtcy5DaGFyRmllbGQod2lkZ2V0PUFkbWluUGFnZWRvd25XaWRnZXQoKSkKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIG1vZGVsID0gUG9zdAogICAgICAgIGZpZWxkcyA9ICdfX2FsbF9fJwoKY2xhc3MgTm90aWNlRm9ybShmb3Jtcy5Nb2RlbEZvcm0pOgogICAgY29udGVudCA9IGZvcm1zLkNoYXJGaWVsZCh3aWRnZXQ9QWRtaW5QYWdlZG93bldpZGdldCgpKQoKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgbW9kZWwgPSBOb3RpY2UKICAgICAgICBmaWVsZHMgPSAnX19hbGxfXycKCmNsYXNzIFBvc3RBZG1pbihhZG1pbi5Nb2RlbEFkbWluKToKICAgIGZvcm0gPSBQb3N0Rm9ybQogICAgbGlzdF9kaXNwbGF5ID0gWydoZWFkbGluZScsICdjcmVhdGVfZGF0ZScsICdwdWJfZGF0ZScsJ2F1dGhvcicsICdpc19hY3RpdmUnXQogICAgZmlsdGVyX2hvcml6b250YWwgPSAoJ2NhdGVnb3J5JywpCgpjbGFzcyBOb3RpY2VBZG1pbihhZG1pbi5Nb2RlbEFkbWluKToKPHxmaW1faG9sZXw+CmFkbWluLnNpdGUucmVnaXN0ZXIoQ29tbWVudCkKYWRtaW4uc2l0ZS5yZWdpc3RlcihQb3N0LCBQb3N0QWRtaW4pCmFkbWluLnNpdGUucmVnaXN0ZXIoQ2F0ZWdvcnkpCmFkbWluLnNpdGUucmVnaXN0ZXIoTm90aWNlLCBOb3RpY2VBZG1pbikKPHxmaW1fc3VmZml4fD4KICAgIGZvcm0gPSBOb3RpY2VGb3JtCiAgICBsaXN0X2Rpc3BsYXkgPSBbJ2hlYWRsaW5lJ10KCjx8ZmltX2VuZHw+"]
["e72cbbb8222e365a42c080908b827f17aab973c4-4","e72cbbb8222e365a42c080908b827f17aab973c4","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KZnJvbSBwYWdlZG93bi53aWRnZXRzIGltcG9ydCBBZG1pblBhZ2Vkb3duV2lkZ2V0CmZyb20gZGphbmdvIGltcG9ydCBmb3JtcwoKCmZyb20gbW9kZWxzIGltcG9ydCBQb3N0LCBDYXRlZ29yeSwgTm90aWNlLCBDb21tZW50CiMgUmVnaXN0ZXIgeW91ciBtb2RlbHMgaGVyZS4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpjbGFzcyBQb3N0Rm9ybShmb3Jtcy5Nb2RlbEZvcm0pOgogICAgY29udGVudCA9IGZvcm1zLkNoYXJGaWVsZCh3aWRnZXQ9QWRtaW5QYWdlZG93bldpZGdldCgpKQoKICAgIGNsYXNzIE1ldGE6Cjx8ZmltX2VuZHw+"]
["e72cbbb8222e365a42c080908b827f17aab973c4-5","e72cbbb8222e365a42c080908b827f17aab973c4","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKCmZyb20gbW9kZWxzIGltcG9ydCBQb3N0LCBDYXRlZ29yeSwgTm90aWNlLCBDb21tZW50CiMgUmVnaXN0ZXIgeW91ciBtb2RlbHMgaGVyZS4KY2xhc3MgUG9zdEZvcm0oZm9ybXMuTW9kZWxGb3JtKToKICAgIGNvbnRlbnQgPSBmb3Jtcy5DaGFyRmllbGQod2lkZ2V0PUFkbWluUGFnZWRvd25XaWRnZXQoKSkKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIG1vZGVsID0gUG9zdAogICAgICAgIGZpZWxkcyA9ICdfX2FsbF9fJwoKY2xhc3MgTm90aWNlRm9ybShmb3Jtcy5Nb2RlbEZvcm0pOgogICAgY29udGVudCA9IGZvcm1zLkNoYXJGaWVsZCh3aWRnZXQ9QWRtaW5QYWdlZG93bldpZGdldCgpKQoKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgbW9kZWwgPSBOb3RpY2UKICAgICAgICBmaWVsZHMgPSAnX19hbGxfXycKCmNsYXNzIFBvc3RBZG1pbihhZG1pbi5Nb2RlbEFkbWluKToKICAgIGZvcm0gPSBQb3N0Rm9ybQogICAgbGlzdF9kaXNwbGF5ID0gWydoZWFkbGluZScsICdjcmVhdGVfZGF0ZScsICdwdWJfZGF0ZScsJ2F1dGhvcicsICdpc19hY3RpdmUnXQogICAgZmlsdGVyX2hvcml6b250YWwgPSAoJ2NhdGVnb3J5JywpCgpjbGFzcyBOb3RpY2VBZG1pbihhZG1pbi5Nb2RlbEFkbWluKToKICAgIGZvcm0gPSBOb3RpY2VGb3JtCiAgICBsaXN0X2Rpc3BsYXkgPSBbJ2hlYWRsaW5lJ10KCmFkbWluLnNpdGUucmVnaXN0ZXIoQ29tbWVudCkKYWRtaW4uc2l0ZS5yZWdpc3RlcihQb3N0LCBQb3N0QWRtaW4pCmFkbWluLnNpdGUucmVnaXN0ZXIoQ2F0ZWdvcnkpCmFkbWluLnNpdGUucmVnaXN0ZXIoTm90aWNlLCBOb3RpY2VBZG1pbikKPHxmaW1fc3VmZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KZnJvbSBwYWdlZG93bi53aWRnZXRzIGltcG9ydCBBZG1pblBhZ2Vkb3duV2lkZ2V0CmZyb20gZGphbmdvIGltcG9ydCBmb3Jtcwo8fGZpbV9lbmR8Pg=="]
["6bd5e1edad57256f4ff4cb18c69697e854f18e94-1","6bd5e1edad57256f4ff4cb18c69697e854f18e94","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmltcG9ydCBqc29uCmltcG9ydCBvcwppbXBvcnQgcmFuZG9tCmltcG9ydCBvcwppbXBvcnQgdGVuc29yZmxvdyBhcyB0ZgppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBnZW5zaW0gaW1wb3J0IGNvcnBvcmEKZnJvbSB0ZW5zb3JmbG93LnB5dGhvbiBpbXBvcnQga2VyYXMKZnJvbSB0ZW5zb3JmbG93LnB5dGhvbi5rZXJhcy5jYWxsYmFja3MgaW1wb3J0IE1vZGVsQ2hlY2twb2ludCwgVGVuc29yQm9hcmQKZnJvbSB0ZW5zb3JmbG93LnB5dGhvbi5rZXJhcy5tb2RlbHMgaW1wb3J0IGxvYWRfbW9kZWwsIFNlcXVlbnRpYWwsIE1vZGVsCgoKZGVmIGxvYWRfY29ycHVzKGZpbGVuYW1lKToKICAgIHJldHVybiBjb3Jwb3JhLkRpY3Rpb25hcnkubG9hZChmaWxlbmFtZSkKCgpjbGFzcyBEc3NtKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWxfcGF0aD0nbW9kZWwnLCBtb2RlbF9uYW1lPSJkc3NtIiwKICAgICAgICAgICAgICAgICBpc190cmFpbj1GYWxzZSwgZGljdGlvbmFyeT1Ob25lLCBjb25maWc9Tm9uZSwgc2F2ZV9sb2dzPUZhbHNlLCB2ZXJzaW9uPU5vbmUpOgogICAgICAgIGlmIHZlcnNpb246CiAgICAgICAgICAgIHNlbGYubW9kZWxfbmFtZSA9IG1vZGVsX25hbWUgKyAnXycgKyBzdHIodmVyc2lvbikKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLm1vZGVsX25hbWUgPSBtb2RlbF9uYW1lCiAgICAgICAgc2VsZi5tb2RlbF9wYXRoID0gbW9kZWxfcGF0aAogICAgICAgIHNlbGYuZGljdGlvbmFyeSA9IGRpY3Rpb25hcnkKICAgICAgICBzZWxmLnNhdmVfbG9ncyA9IHNhdmVfbG9ncwogICAgICAgIHNlbGYuY29uZmlnID0gY29uZmlnCgogICAgICAgIHNlbGYubG9hZF9kaWN0aW9uYXJ5KCkKCiAgICAgICAgaWYgaXNfdHJhaW46CiAgICAgICAgICAgIHNlbGYubW9kZWwgPSBOb25lCiAgICAgICAgICAgIHNlbGYuYnVpbGRfbW9kZWwoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgICMgTk9URSDkuLrkuobog73moLnmja7nm7jlr7not6/lvoTmib7liLDmlofku7YKICAgICAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKICAgICAgICAgICAgb3MuY2hkaXIob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKCiAgICAgICAgICAgIHNlbGYubW9kZWwgPSBsb2FkX21vZGVsKCd7fS97fS5oNScuZm9ybWF0KHNlbGYubW9kZWxfcGF0aCwgc2VsZi5tb2RlbF9uYW1lKSkKICAgICAgICAgICAgb3MuY2hkaXIoY3dkKQoKICAgIGRlZiBidWlsZF9tb2RlbChzZWxmKToKICAgICAgICBjb21wYW55ID0ga2VyYXMubGF5ZXJzLklucHV0KHNoYXBlPShzZWxmLmNvbmZpZ1snY29tcGFueV9tYXhfbGVuJ10sKSwgZHR5cGU9dGYuaW50NjQpCiAgICAgICAgaW5kdXN0cnkgPSBrZXJhcy5sYXllcnMuSW5wdXQoc2hhcGU9KHNlbGYuY29uZmlnWydpbmR1c3RyeV9tYXhfbGVuJ10sKSwgZHR5cGU9dGYuaW50NjQpCiAgICAgICAgZnVuY3Rpb25fbHZsNCA9IGtlcmFzLmxheWVycy5JbnB1dChzaGFwZT0oc2VsZi5jb25maWdbJ2Z1bmN0aW9uX2x2bDRfbWF4X2xlbiddLCksIGR0eXBlPXRmLmludDY0KQogICAgICAgIHNraWxsID0ga2VyYXMubGF5ZXJzLklucHV0KHNoYXBlPShzZWxmLmNvbmZpZ1snc2tpbGxfbWF4X2xlbiddLCksIGR0eXBlPXRmLmludDY0KQogICAgICAgIG1ham9yID0ga2VyYXMubGF5ZXJzLklucHV0KHNoYXBlPShzZWxmLmNvbmZpZ1snbWFqb3JfbWF4X2xlbiddLCksIGR0eXBlPXRmLmludDY0KQoKICAgICAgICBjb21wYW55XzIgPSBrZXJhcy5sYXllcnMuSW5wdXQoc2hhcGU9KHNlbGYuY29uZmlnWydjb21wYW55X21heF9sZW4nXSwpLCBkdHlwZT10Zi5pbnQ2NCkKICAgICAgICBpbmR1c3RyeV8yID0ga2VyYXMubGF5ZXJzLklucHV0KHNoYXBlPShzZWxmLmNvbmZpZ1snaW5kdXN0cnlfbWF4X2xlbiddLCksIGR0eXBlPXRmLmludDY0KQogICAgICAgIGZ1bmN0aW9uX2x2bDRfMiA9IGtlcmFzLmxheWVycy5JbnB1dChzaGFwZT0oc2VsZi5jb25maWdbJ2Z1bmN0aW9uX2x2bDRfbWF4X2xlbiddLCksIGR0eXBlPXRmLmludDY0KQogICAgICAgIHNraWxsXzIgPSBrZXJhcy5sYXllcnMuSW5wdXQoc2hhcGU9KHNlbGYuY29uZmlnWydza2lsbF9tYXhfbGVuJ10sKSwgZHR5cGU9dGYuaW50NjQpCiAgICAgICAgbWFqb3JfMiA9IGtlcmFzLmxheWVycy5JbnB1dChzaGFwZT0oc2VsZi5jb25maWdbJ21ham9yX21heF9sZW4nXSwpLCBkdHlwZT10Zi5pbnQ2NCkKCiAgICAgICAgZW1iZWRkaW5nID0ga2VyYXMubGF5ZXJzLkVtYmVkZGluZyhzZWxmLmNvbmZpZ1sndm9jYWJfc2l6ZSddLCBzZWxmLmNvbmZpZ1snZW1iZWRkaW5nX3NpemUnXSwgbWFza196ZXJvPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRzPVtzZWxmLmNvbmZpZ1snd2VpZ2h0cyddXSwgbmFtZT0nZW1iZWRkaW5nJywgdHJhaW5hYmxlPVRydWUpCiAgICAgICAgIyBhdmVyYWdlIGVtYmVkZGluZwogICAgICAgIGF2Z19lbWJlZGRpbmcgPSBrZXJhcy5sYXllcnMuTGFtYmRhKGxhbWJkYSB4OiB0Zi5yZWR1Y2VfbWVhbih4LCAxKSkKICAgICAgICAjIGF2Z19lbWJlZGRpbmcgPSBrZXJhcy5sYXllcnMuR2xvYmFsQXZnUG9vbDFEKCkKCiAgICAgICAgY29tcGFueV9lbWJlZCA9IGVtYmVkZGluZyhjb21wYW55KQogICAgICAgIGNvbXBhbnlfZW1iZWQgPSBhdmdfZW1iZWRkaW5nKGNvbXBhbnlfZW1iZWQpCiAgICAgICAgaW5kdXN0cnlfZW1iZWQgPSBlbWJlZGRpbmcoaW5kdXN0cnkpCiAgICAgICAgaW5kdXN0cnlfZW1iZWQgPSBhdmdfZW1iZWRkaW5nKGluZHVzdHJ5X2VtYmVkKQogICAgICAgIGZ1bmN0aW9uX2x2bDRfZW1iZWQgPSBlbWJlZGRpbmcoZnVuY3Rpb25fbHZsNCkKICAgICAgICBmdW5jdGlvbl9sdmw0X2VtYmVkID0gYXZnX2VtYmVkZGluZyhmdW5jdGlvbl9sdmw0X2VtYmVkKQogICAgICAgIHNraWxsX2VtYmVkID0gZW1iZWRkaW5nKHNraWxsKQogICAgICAgIHNraWxsX2VtYmVkID0gYXZnX2VtYmVkZGluZyhza2lsbF9lbWJlZCkKICAgICAgICBtYWpvcl9lbWJlZCA9IGVtYmVkZGluZyhtYWpvcikKICAgICAgICBtYWpvcl9lbWJlZCA9IGF2Z19lbWJlZGRpbmcobWFqb3JfZW1iZWQpCgogICAgICAgIGNvbXBhbnlfZW1iZWRfMiA9IGVtYmVkZGluZyhjb21wYW55XzIpCiAgICAgICAgY29tcGFueV9lbWJlZF8yID0gYXZnX2VtYmVkZGluZyhjb21wYW55X2VtYmVkXzIpCiAgICAgICAgaW5kdXN0cnlfZW1iZWRfMiA9IGVtYmVkZGluZyhpbmR1c3RyeV8yKQogICAgICAgIGluZHVzdHJ5X2VtYmVkXzIgPSBhdmdfZW1iZWRkaW5nKGluZHVzdHJ5X2VtYmVkXzIpCiAgICAgICAgZnVuY3Rpb25fbHZsNF9lbWJlZF8yID0gZW1iZWRkaW5nKGZ1bmN0aW9uX2x2bDRfMikKICAgICAgICBmdW5jdGlvbl9sdmw0X2VtYmVkXzIgPSBhdmdfZW1iZWRkaW5nKGZ1bmN0aW9uX2x2bDRfZW1iZWRfMikKICAgICAgICBza2lsbF9lbWJlZF8yID0gZW1iZWRkaW5nKHNraWxsXzIpCiAgICAgICAgc2tpbGxfZW1iZWRfMiA9IGF2Z19lbWJlZGRpbmcoc2tpbGxfZW1iZWRfMikKICAgICAgICBtYWpvcl9lbWJlZF8yID0gZW1iZWRkaW5nKG1ham9yXzIpCiAgICAgICAgbWFqb3JfZW1iZWRfMiA9IGF2Z19lbWJlZGRpbmcobWFqb3JfZW1iZWRfMikKCiAgICAgICAgY29zX2NvbXBhbnkgPSBrZXJhcy5sYXllcnMuRG90KGF4ZXM9LTEsIG5vcm1hbGl6ZT1UcnVlLCBuYW1lPSdjb3NfY29tcGFueScpKFtjb21wYW55X2VtYmVkLCBjb21wYW55X2VtYmVkXzJdKQogICAgICAgIGNvc19pbmR1c3RyeSA9IGtlcmFzLmxheWVycy5Eb3QoYXhlcz0tMSwgbm9ybWFsaXplPVRydWUsIG5hbWU9J2Nvc19pbmR1c3RyeScpKAogICAgICAgICAgICBbaW5kdXN0cnlfZW1iZWQsIGluZHVzdHJ5X2VtYmVkXzJdKQogICAgICAgIGNvc19mdW5jdGlvbl9sdmw0ID0ga2VyYXMubGF5ZXJzLkRvdChheGVzPS0xLCBub3JtYWxpemU9VHJ1ZSwgbmFtZT0nY29zX2Z1bmN0aW9uX2x2bDQnKSgKICAgICAgICAgICAgW2Z1bmN0aW9uX2x2bDRfZW1iZWQsIGZ1bmN0aW9uX2x2bDRfZW1iZWRfMl0pCiAgICAgICAgY29zX3NraWxsID0ga2VyYXMubGF5ZXJzLkRvdChheGVzPS0xLCBub3JtYWxpemU9VHJ1ZSwgbmFtZT0nY29zX3NraWxsJykoW3NraWxsX2VtYmVkLCBza2lsbF9lbWJlZF8yXSkKICAgICAgICBjb3NfbWFqb3IgPSBrZXJhcy5sYXllcnMuRG90KGF4ZXM9LTEsIG5vcm1hbGl6ZT1UcnVlLCBuYW1lPSdjb3NfbWFqb3InKShbbWFqb3JfZW1iZWQsIG1ham9yX2VtYmVkXzJdKQogICAgICAgIG91dCA9IGtlcmFzLmxheWVycy5EZW5zZSgxLCBhY3RpdmF0aW9uPSdzaWdtb2lkJywgbmFtZT0nb3V0JykoCiAgICAgICAgICAgIGtlcmFzLmJhY2tlbmQuY29uY2F0ZW5hdGUoW2Nvc19jb21wYW55LCBjb3NfaW5kdXN0cnksIGNvc19mdW5jdGlvbl9sdmw0LCBjb3Nfc2tpbGwsIGNvc19tYWpvcl0pKQogICAgICAgIG1vZGVsID0ga2VyYXMuTW9kZWwoCiAgICAgICAgICAgIGlucHV0cz1bY29tcGFueSwgaW5kdXN0cnksIGZ1bmN0aW9uX2x2bDQsIHNraWxsLCBtYWpvciwgY29tcGFueV8yLCBpbmR1c3RyeV8yLCBmdW5jdGlvbl9sdmw0XzIsIHNraWxsXzIsCiAgICAgICAgICAgICAgICAgICAgbWFqb3JfMl0sCiAgICAgICAgICAgIG91dHB1dHM9eydvdXQnOiBvdXQsICdjb3NfY29tcGFueSc6IGNvc19jb21wYW55LCAnY29zX2luZHVzdHJ5JzogY29zX2luZHVzdHJ5LAogICAgICAgICAgICAgICAgICAgICAnY29zX2Z1bmN0aW9uX2x2bDQnOiBjb3NfZnVuY3Rpb25fbHZsNCwgJ2Nvc19za2lsbCc6IGNvc19za2lsbCwgJ2Nvc19tYWpvcic6IGNvc19tYWpvcn0pCgogICAgICAgIHNnZCA9IGtlcmFzLm9wdGltaXplcnMuU0dEKGxyPTAuMDEsIGRlY2F5PTFlLTYsIG1vbWVudHVtPTAuOSwgbmVzdGVyb3Y9VHJ1ZSkKICAgICAgICBtb2RlbC5jb21waWxlKG9wdGltaXplcj1zZ2QsCiAgICAgICAgICAgICAgICAgICAgICBsb3NzPXsnb3V0JzogJ2JpbmFyeV9jcm9zc2VudHJvcHknfSwKICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3M9ewogICAgICAgICAgICAgICAgICAgICAgICAgICJvdXQiOiBba2VyYXMubWV0cmljcy5CaW5hcnlBY2N1cmFjeSgpLCBrZXJhcy5tZXRyaWNzLlByZWNpc2lvbigpLCBrZXJhcy5tZXRyaWNzLlJlY2FsbCgpXX0pCiAgICAgICAgbW9kZWwuc3VtbWFyeSgpCiAgICAgICAgc2VsZi5tb2RlbCA9IG1vZGVsCgogICAgZGVmIGxvYWRfZGljdGlvbmFyeShzZWxmKToKICAgICAgICB3aXRoIG9wZW4oc2VsZi5jb25maWdbInZvY2FiX2ZpbGUiXSwgInIiLCBlbmNvZGluZz0idXRmLTgiKSBhcyBmOgogICAgICAgICAgICB2b2NhYiA9IFt4LnN0cmlwKCJcbiIpIGZvciB4IGluIGYucmVhZGxpbmVzKCldCiAgICAgICAgZGljdGlvbmFyeSA9IGNvcnBvcmEuRGljdGlvbmFyeShbdm9jYWJdKQogICAgICAgIHNlbGYuZGljdGlvbmFyeSA9IGRpY3Rpb25hcnkKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgZ2VuZXJhdGVfYmF0Y2hfZGF0YV9yYW5kb20odHJhaW5feCwgeSwgYmF0Y2hfc2l6ZSk6CiAgICAgICAgIiIiCiAgICAgICAg6YCQ5q2l5o+Q5Y+WYmF0Y2jmlbDmja7liLDmmL7lrZjvvIzpmY3kvY7lr7nmmL7lrZjnmoTljaDnlKgKICAgICAgICA6cGFyYW0gdHJhaW5feDoKICAgICAgICA6cGFyYW0geToKICAgICAgICA6cGFyYW0gYmF0Y2hfc2l6ZTog5om55aSE55CG5qC35pys5aSn5bCPCiAgICAgICAgOnJldHVybjoKICAgICAgICAiIiIKICAgICAgICB5X2xlbiA9IGxlbih5KQogICAgICAgIGxvb3BfY291bnQgPSB5X2xlbiAvLyBiYXRjaF9zaXplCiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgaSA9IHJhbmRvbS5yYW5kaW50KDAsIGxvb3BfY291bnQpCiAgICAgICAgICAgIHlpZWxkICh0cmFpbl94W2kgKiBiYXRjaF9zaXplOihpICsgMSkgKiBiYXRjaF9zaXplXVswXSwgeVtpICogYmF0Y2hfc2l6ZTooaSArIDEpICogYmF0Y2hfc2l6ZV0pCgogICAgZGVmIHRyYWluKHNlbGYpOgogICAgICAgIHRyYWluX3ggPSBbXQogICAgICAgIHRyYWluX3kgPSBbXQogICAgICAgIHdpdGggb3BlbihzZWxmLmNvbmZpZ1sidHJhaW5fZmlsZXMiXSwgInIiLCBlbmNvZGluZz0idXRmLTgiKSBhcyBmOgogICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgogICAgICAgICAgICAgICAgbGluZSA9IGpzb24ubG9hZHMobGluZSkKICAgICAgICAgICAgICAgIGN2X3J0ID0gbGlzdChsaW5lLmdldCgiY3ZfcnQiKS52YWx1ZXMoKSkKICAgICAgICAgICAgICAgIGpkX3J0ID0gbGlzdChsaW5lLmdldCgiamRfcnQiKS52YWx1ZXMoKSkKICAgICAgICAgICAgICAgIGxhYmVsID0gbGluZS5nZXQoImxhYmVsIikKICAgICAgICAgICAgICAgIHRyYWluX2lucHV0ID0gc2VsZi50ZXh0MmlkcyhzZWxmLmRpY3Rpb25hcnksIGN2X3J0ICsgamRfcnQpCiAgICAgICAgICAgICAgICB0cmFpbl94LmFwcGVuZChucC5hcnJheShbbnAuYXJyYXkoeCkgZm9yIHggaW4gdHJhaW5faW5wdXRdKSkKICAgICAgICAgICAgICAgIHRyYWluX3kuYXBwZW5kKGxhYmVsKQogICAgICAgIHRyYWluX3ggPSBucC5hc2FycmF5KHRyYWluX3gsIGR0eXBlPSJ1aW50OCIpCiAgICAgICAgdHJhaW5feSA9IG5wLmV4cGFuZF9kaW1zKHRyYWluX3ksIC0xKQoKICAgICAgICBjYWxsYmFja3NfbGlzdCA9IFtdCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBjaGVja3BvaW50ID0gTW9kZWxDaGVja3BvaW50KCd7fS97fS5oNScuZm9ybWF0KHNlbGYubW9kZWxfcGF0aCwgc2VsZi5tb2RlbF9uYW1lKSwgbW9uaXRvcj0ndmFsX2FjYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlX2Jlc3Rfb25seT1UcnVlLCB2ZXJib3NlPTEsIG1vZGU9J21heCcpCiAgICAgICAgY2FsbGJhY2tzX2xpc3QuYXBwZW5kKGNoZWNrcG9pbnQpCiAgICAgICAgc2VsZi5tb2RlbC5maXRfZ2VuZXJhdG9yKHNlbGYuZ2VuZXJhdGVfYmF0Y2hfZGF0YV9yYW5kb20odHJhaW5feCwgdHJhaW5feSwgc2VsZi5jb25maWdbInRyYWluX2JhdGNoX3NpemUiXSksCjx8ZmltX2VuZHw+"]
["6bd5e1edad57256f4ff4cb18c69697e854f18e94-2","6bd5e1edad57256f4ff4cb18c69697e854f18e94","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmltcG9ydCBqc29uCmltcG9ydCBvcwppbXBvcnQgcmFuZG9tCmltcG9ydCBvcwppbXBvcnQgdGVuc29yZmxvdyBhcyB0ZgppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBnZW5zaW0gaW1wb3J0IGNvcnBvcmEKZnJvbSB0ZW5zb3JmbG93LnB5dGhvbiBpbXBvcnQga2VyYXMKZnJvbSB0ZW5zb3JmbG93LnB5dGhvbi5rZXJhcy5jYWxsYmFja3MgaW1wb3J0IE1vZGVsQ2hlY2twb2ludCwgVGVuc29yQm9hcmQKZnJvbSB0ZW5zb3JmbG93LnB5dGhvbi5rZXJhcy5tb2RlbHMgaW1wb3J0IGxvYWRfbW9kZWwsIFNlcXVlbnRpYWwsIE1vZGVsCgoKZGVmIGxvYWRfY29ycHVzKGZpbGVuYW1lKToKICAgIHJldHVybiBjb3Jwb3JhLkRpY3Rpb25hcnkubG9hZChmaWxlbmFtZSkKCgpjbGFzcyBEc3NtKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWxfcGF0aD0nbW9kZWwnLCBtb2RlbF9uYW1lPSJkc3NtIiwKICAgICAgICAgICAgICAgICBpc190cmFpbj1GYWxzZSwgZGljdGlvbmFyeT1Ob25lLCBjb25maWc9Tm9uZSwgc2F2ZV9sb2dzPUZhbHNlLCB2ZXJzaW9uPU5vbmUpOgogICAgICAgIGlmIHZlcnNpb246CiAgICAgICAgICAgIHNlbGYubW9kZWxfbmFtZSA9IG1vZGVsX25hbWUgKyAnXycgKyBzdHIodmVyc2lvbikKICAgICAgICBlbHNlOgo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLm1vZGVsX3BhdGggPSBtb2RlbF9wYXRoCiAgICAgICAgc2VsZi5kaWN0aW9uYXJ5ID0gZGljdGlvbmFyeQogICAgICAgIHNlbGYuc2F2ZV9sb2dzID0gc2F2ZV9sb2dzCiAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKCiAgICAgICAgc2VsZi5sb2FkX2RpY3Rpb25hcnkoKQoKICAgICAgICBpZiBpc190cmFpbjoKICAgICAgICAgICAgc2VsZi5tb2RlbCA9IE5vbmUKICAgICAgICAgICAgc2VsZi5idWlsZF9tb2RlbCgpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyBOT1RFIOS4uuS6huiDveagueaNruebuOWvuei3r+W+hOaJvuWIsOaWh+S7tgogICAgICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQogICAgICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQoKICAgICAgICAgICAgc2VsZi5tb2RlbCA9IGxvYWRfbW9kZWwoJ3t9L3t9Lmg1Jy5mb3JtYXQoc2VsZi5tb2RlbF9wYXRoLCBzZWxmLm1vZGVsX25hbWUpKQogICAgICAgICAgICBvcy5jaGRpcihjd2QpCgogICAgZGVmIGJ1aWxkX21vZGVsKHNlbGYpOgogICAgICAgIGNvbXBhbnkgPSBrZXJhcy5sYXllcnMuSW5wdXQoc2hhcGU9KHNlbGYuY29uZmlnWydjb21wYW55X21heF9sZW4nXSwpLCBkdHlwZT10Zi5pbnQ2NCkKICAgICAgICBpbmR1c3RyeSA9IGtlcmFzLmxheWVycy5JbnB1dChzaGFwZT0oc2VsZi5jb25maWdbJ2luZHVzdHJ5X21heF9sZW4nXSwpLCBkdHlwZT10Zi5pbnQ2NCkKICAgICAgICBmdW5jdGlvbl9sdmw0ID0ga2VyYXMubGF5ZXJzLklucHV0KHNoYXBlPShzZWxmLmNvbmZpZ1snZnVuY3Rpb25fbHZsNF9tYXhfbGVuJ10sKSwgZHR5cGU9dGYuaW50NjQpCiAgICAgICAgc2tpbGwgPSBrZXJhcy5sYXllcnMuSW5wdXQoc2hhcGU9KHNlbGYuY29uZmlnWydza2lsbF9tYXhfbGVuJ10sKSwgZHR5cGU9dGYuaW50NjQpCiAgICAgICAgbWFqb3IgPSBrZXJhcy5sYXllcnMuSW5wdXQoc2hhcGU9KHNlbGYuY29uZmlnWydtYWpvcl9tYXhfbGVuJ10sKSwgZHR5cGU9dGYuaW50NjQpCgogICAgICAgIGNvbXBhbnlfMiA9IGtlcmFzLmxheWVycy5JbnB1dChzaGFwZT0oc2VsZi5jb25maWdbJ2NvbXBhbnlfbWF4X2xlbiddLCksIGR0eXBlPXRmLmludDY0KQogICAgICAgIGluZHVzdHJ5XzIgPSBrZXJhcy5sYXllcnMuSW5wdXQoc2hhcGU9KHNlbGYuY29uZmlnWydpbmR1c3RyeV9tYXhfbGVuJ10sKSwgZHR5cGU9dGYuaW50NjQpCiAgICAgICAgZnVuY3Rpb25fbHZsNF8yID0ga2VyYXMubGF5ZXJzLklucHV0KHNoYXBlPShzZWxmLmNvbmZpZ1snZnVuY3Rpb25fbHZsNF9tYXhfbGVuJ10sKSwgZHR5cGU9dGYuaW50NjQpCiAgICAgICAgc2tpbGxfMiA9IGtlcmFzLmxheWVycy5JbnB1dChzaGFwZT0oc2VsZi5jb25maWdbJ3NraWxsX21heF9sZW4nXSwpLCBkdHlwZT10Zi5pbnQ2NCkKICAgICAgICBtYWpvcl8yID0ga2VyYXMubGF5ZXJzLklucHV0KHNoYXBlPShzZWxmLmNvbmZpZ1snbWFqb3JfbWF4X2xlbiddLCksIGR0eXBlPXRmLmludDY0KQoKICAgICAgICBlbWJlZGRpbmcgPSBrZXJhcy5sYXllcnMuRW1iZWRkaW5nKHNlbGYuY29uZmlnWyd2b2NhYl9zaXplJ10sIHNlbGYuY29uZmlnWydlbWJlZGRpbmdfc2l6ZSddLCBtYXNrX3plcm89VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodHM9W3NlbGYuY29uZmlnWyd3ZWlnaHRzJ11dLCBuYW1lPSdlbWJlZGRpbmcnLCB0cmFpbmFibGU9VHJ1ZSkKICAgICAgICAjIGF2ZXJhZ2UgZW1iZWRkaW5nCiAgICAgICAgYXZnX2VtYmVkZGluZyA9IGtlcmFzLmxheWVycy5MYW1iZGEobGFtYmRhIHg6IHRmLnJlZHVjZV9tZWFuKHgsIDEpKQogICAgICAgICMgYXZnX2VtYmVkZGluZyA9IGtlcmFzLmxheWVycy5HbG9iYWxBdmdQb29sMUQoKQoKICAgICAgICBjb21wYW55X2VtYmVkID0gZW1iZWRkaW5nKGNvbXBhbnkpCiAgICAgICAgY29tcGFueV9lbWJlZCA9IGF2Z19lbWJlZGRpbmcoY29tcGFueV9lbWJlZCkKICAgICAgICBpbmR1c3RyeV9lbWJlZCA9IGVtYmVkZGluZyhpbmR1c3RyeSkKICAgICAgICBpbmR1c3RyeV9lbWJlZCA9IGF2Z19lbWJlZGRpbmcoaW5kdXN0cnlfZW1iZWQpCiAgICAgICAgZnVuY3Rpb25fbHZsNF9lbWJlZCA9IGVtYmVkZGluZyhmdW5jdGlvbl9sdmw0KQogICAgICAgIGZ1bmN0aW9uX2x2bDRfZW1iZWQgPSBhdmdfZW1iZWRkaW5nKGZ1bmN0aW9uX2x2bDRfZW1iZWQpCiAgICAgICAgc2tpbGxfZW1iZWQgPSBlbWJlZGRpbmcoc2tpbGwpCiAgICAgICAgc2tpbGxfZW1iZWQgPSBhdmdfZW1iZWRkaW5nKHNraWxsX2VtYmVkKQogICAgICAgIG1ham9yX2VtYmVkID0gZW1iZWRkaW5nKG1ham9yKQogICAgICAgIG1ham9yX2VtYmVkID0gYXZnX2VtYmVkZGluZyhtYWpvcl9lbWJlZCkKCiAgICAgICAgY29tcGFueV9lbWJlZF8yID0gZW1iZWRkaW5nKGNvbXBhbnlfMikKICAgICAgICBjb21wYW55X2VtYmVkXzIgPSBhdmdfZW1iZWRkaW5nKGNvbXBhbnlfZW1iZWRfMikKICAgICAgICBpbmR1c3RyeV9lbWJlZF8yID0gZW1iZWRkaW5nKGluZHVzdHJ5XzIpCiAgICAgICAgaW5kdXN0cnlfZW1iZWRfMiA9IGF2Z19lbWJlZGRpbmcoaW5kdXN0cnlfZW1iZWRfMikKICAgICAgICBmdW5jdGlvbl9sdmw0X2VtYmVkXzIgPSBlbWJlZGRpbmcoZnVuY3Rpb25fbHZsNF8yKQogICAgICAgIGZ1bmN0aW9uX2x2bDRfZW1iZWRfMiA9IGF2Z19lbWJlZGRpbmcoZnVuY3Rpb25fbHZsNF9lbWJlZF8yKQogICAgICAgIHNraWxsX2VtYmVkXzIgPSBlbWJlZGRpbmcoc2tpbGxfMikKICAgICAgICBza2lsbF9lbWJlZF8yID0gYXZnX2VtYmVkZGluZyhza2lsbF9lbWJlZF8yKQogICAgICAgIG1ham9yX2VtYmVkXzIgPSBlbWJlZGRpbmcobWFqb3JfMikKICAgICAgICBtYWpvcl9lbWJlZF8yID0gYXZnX2VtYmVkZGluZyhtYWpvcl9lbWJlZF8yKQoKICAgICAgICBjb3NfY29tcGFueSA9IGtlcmFzLmxheWVycy5Eb3QoYXhlcz0tMSwgbm9ybWFsaXplPVRydWUsIG5hbWU9J2Nvc19jb21wYW55JykoW2NvbXBhbnlfZW1iZWQsIGNvbXBhbnlfZW1iZWRfMl0pCiAgICAgICAgY29zX2luZHVzdHJ5ID0ga2VyYXMubGF5ZXJzLkRvdChheGVzPS0xLCBub3JtYWxpemU9VHJ1ZSwgbmFtZT0nY29zX2luZHVzdHJ5JykoCiAgICAgICAgICAgIFtpbmR1c3RyeV9lbWJlZCwgaW5kdXN0cnlfZW1iZWRfMl0pCiAgICAgICAgY29zX2Z1bmN0aW9uX2x2bDQgPSBrZXJhcy5sYXllcnMuRG90KGF4ZXM9LTEsIG5vcm1hbGl6ZT1UcnVlLCBuYW1lPSdjb3NfZnVuY3Rpb25fbHZsNCcpKAogICAgICAgICAgICBbZnVuY3Rpb25fbHZsNF9lbWJlZCwgZnVuY3Rpb25fbHZsNF9lbWJlZF8yXSkKICAgICAgICBjb3Nfc2tpbGwgPSBrZXJhcy5sYXllcnMuRG90KGF4ZXM9LTEsIG5vcm1hbGl6ZT1UcnVlLCBuYW1lPSdjb3Nfc2tpbGwnKShbc2tpbGxfZW1iZWQsIHNraWxsX2VtYmVkXzJdKQogICAgICAgIGNvc19tYWpvciA9IGtlcmFzLmxheWVycy5Eb3QoYXhlcz0tMSwgbm9ybWFsaXplPVRydWUsIG5hbWU9J2Nvc19tYWpvcicpKFttYWpvcl9lbWJlZCwgbWFqb3JfZW1iZWRfMl0pCiAgICAgICAgb3V0ID0ga2VyYXMubGF5ZXJzLkRlbnNlKDEsIGFjdGl2YXRpb249J3NpZ21vaWQnLCBuYW1lPSdvdXQnKSgKICAgICAgICAgICAga2VyYXMuYmFja2VuZC5jb25jYXRlbmF0ZShbY29zX2NvbXBhbnksIGNvc19pbmR1c3RyeSwgY29zX2Z1bmN0aW9uX2x2bDQsIGNvc19za2lsbCwgY29zX21ham9yXSkpCiAgICAgICAgbW9kZWwgPSBrZXJhcy5Nb2RlbCgKICAgICAgICAgICAgaW5wdXRzPVtjb21wYW55LCBpbmR1c3RyeSwgZnVuY3Rpb25fbHZsNCwgc2tpbGwsIG1ham9yLCBjb21wYW55XzIsIGluZHVzdHJ5XzIsIGZ1bmN0aW9uX2x2bDRfMiwgc2tpbGxfMiwKICAgICAgICAgICAgICAgICAgICBtYWpvcl8yXSwKICAgICAgICAgICAgb3V0cHV0cz17J291dCc6IG91dCwgJ2Nvc19jb21wYW55JzogY29zX2NvbXBhbnksICdjb3NfaW5kdXN0cnknOiBjb3NfaW5kdXN0cnksCiAgICAgICAgICAgICAgICAgICAgICdjb3NfZnVuY3Rpb25fbHZsNCc6IGNvc19mdW5jdGlvbl9sdmw0LCAnY29zX3NraWxsJzogY29zX3NraWxsLCAnY29zX21ham9yJzogY29zX21ham9yfSkKCiAgICAgICAgc2dkID0ga2VyYXMub3B0aW1pemVycy5TR0QobHI9MC4wMSwgZGVjYXk9MWUtNiwgbW9tZW50dW09MC45LCBuZXN0ZXJvdj1UcnVlKQogICAgICAgIG1vZGVsLmNvbXBpbGUob3B0aW1pemVyPXNnZCwKICAgICAgICAgICAgICAgICAgICAgIGxvc3M9eydvdXQnOiAnYmluYXJ5X2Nyb3NzZW50cm9weSd9LAogICAgICAgICAgICAgICAgICAgICAgbWV0cmljcz17CiAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dCI6IFtrZXJhcy5tZXRyaWNzLkJpbmFyeUFjY3VyYWN5KCksIGtlcmFzLm1ldHJpY3MuUHJlY2lzaW9uKCksIGtlcmFzLm1ldHJpY3MuUmVjYWxsKCldfSkKICAgICAgICBtb2RlbC5zdW1tYXJ5KCkKICAgICAgICBzZWxmLm1vZGVsID0gbW9kZWwKCiAgICBkZWYgbG9hZF9kaWN0aW9uYXJ5KHNlbGYpOgogICAgICAgIHdpdGggb3BlbihzZWxmLmNvbmZpZ1sidm9jYWJfZmlsZSJdLCAiciIsIGVuY29kaW5nPSJ1dGYtOCIpIGFzIGY6CiAgICAgICAgICAgIHZvY2FiID0gW3guc3RyaXAoIlxuIikgZm9yIHggaW4gZi5yZWFkbGluZXMoKV0KICAgICAgICBkaWN0aW9uYXJ5ID0gY29ycG9yYS5EaWN0aW9uYXJ5KFt2b2NhYl0pCiAgICAgICAgc2VsZi5kaWN0aW9uYXJ5ID0gZGljdGlvbmFyeQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBnZW5lcmF0ZV9iYXRjaF9kYXRhX3JhbmRvbSh0cmFpbl94LCB5LCBiYXRjaF9zaXplKToKICAgICAgICAiIiIKICAgICAgICDpgJDmraXmj5Dlj5ZiYXRjaOaVsOaNruWIsOaYvuWtmO+8jOmZjeS9juWvueaYvuWtmOeahOWNoOeUqAogICAgICAgIDpwYXJhbSB0cmFpbl94OgogICAgICAgIDpwYXJhbSB5OgogICAgICAgIDpwYXJhbSBiYXRjaF9zaXplOiDmibnlpITnkIbmoLfmnKzlpKflsI8KICAgICAgICA6cmV0dXJuOgogICAgICAgICIiIgogICAgICAgIHlfbGVuID0gbGVuKHkpCiAgICAgICAgbG9vcF9jb3VudCA9IHlfbGVuIC8vIGJhdGNoX3NpemUKICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICBpID0gcmFuZG9tLnJhbmRpbnQoMCwgbG9vcF9jb3VudCkKICAgICAgICAgICAgeWllbGQgKHRyYWluX3hbaSAqIGJhdGNoX3NpemU6KGkgKyAxKSAqIGJhdGNoX3NpemVdWzBdLCB5W2kgKiBiYXRjaF9zaXplOihpICsgMSkgKiBiYXRjaF9zaXplXSkKCiAgICBkZWYgdHJhaW4oc2VsZik6CiAgICAgICAgdHJhaW5feCA9IFtdCiAgICAgICAgdHJhaW5feSA9IFtdCiAgICAgICAgd2l0aCBvcGVuKHNlbGYuY29uZmlnWyJ0cmFpbl9maWxlcyJdLCAiciIsIGVuY29kaW5nPSJ1dGYtOCIpIGFzIGY6CiAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CiAgICAgICAgICAgICAgICBsaW5lID0ganNvbi5sb2FkcyhsaW5lKQogICAgICAgICAgICAgICAgY3ZfcnQgPSBsaXN0KGxpbmUuZ2V0KCJjdl9ydCIpLnZhbHVlcygpKQogICAgICAgICAgICAgICAgamRfcnQgPSBsaXN0KGxpbmUuZ2V0KCJqZF9ydCIpLnZhbHVlcygpKQogICAgICAgICAgICAgICAgbGFiZWwgPSBsaW5lLmdldCgibGFiZWwiKQogICAgICAgICAgICAgICAgdHJhaW5faW5wdXQgPSBzZWxmLnRleHQyaWRzKHNlbGYuZGljdGlvbmFyeSwgY3ZfcnQgKyBqZF9ydCkKICAgICAgICAgICAgICAgIHRyYWluX3guYXBwZW5kKG5wLmFycmF5KFtucC5hcnJheSh4KSBmb3IgeCBpbiB0cmFpbl9pbnB1dF0pKQogICAgICAgICAgICAgICAgdHJhaW5feS5hcHBlbmQobGFiZWwpCiAgICAgICAgdHJhaW5feCA9IG5wLmFzYXJyYXkodHJhaW5feCwgZHR5cGU9InVpbnQ4IikKICAgICAgICB0cmFpbl95ID0gbnAuZXhwYW5kX2RpbXModHJhaW5feSwgLTEpCgogICAgICAgIGNhbGxiYWNrc19saXN0ID0gW10KICAgICAgICBjaGVja3BvaW50ID0gTW9kZWxDaGVja3BvaW50KCd7fS97fS5oNScuZm9ybWF0KHNlbGYubW9kZWxfcGF0aCwgc2VsZi5tb2RlbF9uYW1lKSwgbW9uaXRvcj0ndmFsX2FjYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlX2Jlc3Rfb25seT1UcnVlLCB2ZXJib3NlPTEsIG1vZGU9J21heCcpCiAgICAgICAgY2FsbGJhY2tzX2xpc3QuYXBwZW5kKGNoZWNrcG9pbnQpCiAgICAgICAgc2VsZi5tb2RlbC5maXRfZ2VuZXJhdG9yKHNlbGYuZ2VuZXJhdGVfYmF0Y2hfZGF0YV9yYW5kb20odHJhaW5feCwgdHJhaW5feSwgc2VsZi5jb25maWdbInRyYWluX2JhdGNoX3NpemUiXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBzX3Blcl9lcG9jaD1sZW4odHJhaW5feSkgLy8gc2VsZi5jb25maWdbInRyYWluX2JhdGNoX3NpemUiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBvY2hzPXNlbGYuY29uZmlnWyJlcG9jaHMiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbl9kYXRhPSh0cmFpbl94LCB0cmFpbl95KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZT0yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3M9Y2FsbGJhY2tzX2xpc3QpCgogICAgZGVmIHByZWRpY3RfZnVuKHNlbGYsIHNlZ21lbnRfZG9jcyk6CiAgICAgICAgZGF0YV94ID0gc2VsZi50ZXh0MmlkcyhzZWxmLmRpY3Rpb25hcnksIHNlZ21lbnRfZG9jcykKICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkYXRhX3gsIGxpc3QpIGFuZCBib29sKGRhdGFfeCkgaXMgVHJ1ZQogICAgICAgIGRhdGFfeCA9IG5wLmFzYXJyYXkoZGF0YV94LCBkdHlwZT0idWludDgiKQogICAgICAgIHJlc3VsdF95ID0gc2VsZi5tb2RlbC5wcmVkaWN0KG5wLmFycmF5KGRhdGFfeCkpCiAgICAgICAgcmVzdWx0ID0gW10KICAgICAgICBmb3IgaXRlbSBpbiByZXN1bHRfeToKICAgICAgICAgICAgcHJvYmEgPSBpdGVtLm1heCgpCiAgICAgICAgICAgIG51bSA9IG5wLmFyZ21heChpdGVtKQogICAgICAgICAgICBzaW5nbGUgPSB7CiAgICAgICAgICAgICAgICAnbnVtJzogbnVtLAogICAgICAgICAgICAgICAgJ3Byb2JhJzogcHJvYmEKICAgICAgICAgICAgfQogICAgICAgICAgICByZXN1bHQuYXBwZW5kKHNpbmdsZSkKCiAgICAgICAgcmV0dXJuIHJlc3VsdAoKICAgIGRlZiB0ZXh0MmlkcyhzZWxmLCBkaWN0aW9uYXJ5LCBkb2MsIG1heF9sZW49OCk6CiAgICAgICAgIiIiCiAgICAgICAgdGV4dCDlsI/kuo7mnIDlpKfplb/luqbnlKgw6L+b6KGM5ZCO6KGl5L2N77yM5peg5oSP5LmJCiAgICAgICAgdGV4dCDkuK3kuI3lnKhkaWN0aW9uYXJ55Lit55qE6K+N77yMaWQ9bGVuKGRpY3Rpb25hcnkpKzEKICAgICAgICAi6ZmM55Sf57uP55CGIiDliIbor43lkI5kb2Mg5Li6IFtbXV0KICAgICAgICA6cGFyYW0gZGljdGlvbmFyeToKICAgICAgICA6cGFyYW0gZG9jOgogICAgICAgIDpyZXR1cm46CiAgICAgICAgIiIiCiAgICAgICAgaWYgaXNpbnN0YW5jZShtYXhfbGVuLCBsaXN0KToKICAgICAgICAgICAgbWF4X2xlbiA9IG1heF9sZW5bMF0KICAgICAgICB0ZXh0X2lkc19saXN0ID0gW10KICAgICAgICBmb3IgaXRlbSBpbiBkb2M6CiAgICAgICAgICAgIGlmIGl0ZW06CiAgICAgICAgICAgICAgICBlbnRpdHlfdHlwZSA9IGl0ZW1bMF0uc3BsaXQoInwkfCIpWzBdCiAgICAgICAgICAgICAgICBpZiBlbnRpdHlfdHlwZSA9PSAiY29tcGFueSI6CiAgICAgICAgICAgICAgICAgICAgbWF4X2xlbiA9IHNlbGYuY29uZmlnWydjb21wYW55X21heF9sZW4nXQogICAgICAgICAgICAgICAgZWxpZiBlbnRpdHlfdHlwZSA9PSAiaW5kdXN0cnkiOgogICAgICAgICAgICAgICAgICAgIG1heF9sZW4gPSBzZWxmLmNvbmZpZ1snaW5kdXN0cnlfbWF4X2xlbiddCiAgICAgICAgICAgICAgICBlbGlmIGVudGl0eV90eXBlID09ICJmdW5jdGlvbiI6CiAgICAgICAgICAgICAgICAgICAgbWF4X2xlbiA9IHNlbGYuY29uZmlnWydmdW5jdGlvbl9sdmw0X21heF9sZW4nXQogICAgICAgICAgICAgICAgZWxpZiBlbnRpdHlfdHlwZSA9PSAic2tpbGwiOgogICAgICAgICAgICAgICAgICAgIG1heF9sZW4gPSBzZWxmLmNvbmZpZ1snc2tpbGxfbWF4X2xlbiddCiAgICAgICAgICAgICAgICBlbGlmIGVudGl0eV90eXBlID09ICJtYWpvciI6CiAgICAgICAgICAgICAgICAgICAgbWF4X2xlbiA9IHNlbGYuY29uZmlnWydtYWpvcl9tYXhfbGVuJ10KICAgICAgICAgICAgaXRlbV9pZHMgPSBkaWN0aW9uYXJ5LmRvYzJpZHgoaXRlbSwgdW5rbm93bl93b3JkX2luZGV4PS0xKQogICAgICAgICAgICBpZiBsZW4oaXRlbV9pZHMpID4gbWF4X2xlbjoKICAgICAgICAgICAgICAgIGl0ZW1faWRzID0gaXRlbV9pZHNbOm1heF9sZW5dCiAgICAgICAgICAgIHRleHRfaWRzX2xpc3QuYXBwZW5kKGl0ZW1faWRzKQoKICAgICAgICByZXR1cm4gW3JvdyArIFswXSAqIChtYXhfbGVuIC0gbGVuKHJvdykpIGZvciByb3cgaW4gdGV4dF9pZHNfbGlzdF0KCiAgICBkZWYgZmlsdGVyX25vaXNlX3dvcmRzKHNlbGYsIGRvYyk6CiAgICAgICAgIiIiCiAgICAgICAg6L+H5ruk5a2X5YW45Lit5pyq5Ye6546w55qE5bmy5omw6K+NCiAgICAgICAgOnBhcmFtIGRpY3Rpb25hcnk6CiAgICAgICAgOnBhcmFtIGRvYzoKICAgICAgICA6cmV0dXJuOgogICAgICAgICIiIgogICAgICAgIHRleHRfaWRzX2xpc3QgPSBbXQogICAgICAgIGZvciBpdGVtIGluIGRvYzoKICAgICAgICAgICAgaXRlbV9maWx0ZXIgPSBbeCBmb3IgeCBpbiBpdGVtIGlmIHNlbGYuZGljdGlvbmFyeS50b2tlbjJpZC5nZXQoeCwgLTEpID4gLTFdCiAgICAgICAgICAgIGl0ZW1fZmlsdGVyX3N0cmluZyA9ICcnLmpvaW4oaXRlbV9maWx0ZXIpCiAgICAgICAgICAgIHRleHRfaWRzX2xpc3QuYXBwZW5kKGl0ZW1fZmlsdGVyX3N0cmluZykKCiAgICAgICAgcmV0dXJuIHRleHRfaWRzX2xpc3QKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgY29uZmlnID0ge30KICAgIGRhdGFzZXRfY29uZmlnID0gewogICAgICAgICdzZXAnOiAnQCcsCiAgICAgICAgJ251bV9wYXJhbGxlbF9jYWxscyc6IDIwLAogICAgICAgICdidWZmZXJfc2l6ZSc6IDUwMDAwLAogICAgICAgICdzZWVkJzogTm9uZSwKICAgICAgICAncmVzaHVmZmxlX2VhY2hfaXRlcmF0aW9uJzogVHJ1ZSwKICAgICAgICAndHJhaW5fYmF0Y2hfc2l6ZSc6IDIsCiAgICAgICAgJ2V2YWxfcHJlZGljdF9zaXplJzogNTEyLAogICAgICAgICdwcmVkaWN0X2JhdGNoX3NpemUnOiA1MTIsCiAgICAgICAgJ3F1ZXJ5X21heF9sZW4nOiA1LAogICAgICAgICdkb2NfbWF4X2xlbic6IDUsCiAgICAgICAgJ3ZvY2FiX2ZpbGUnOiAnLi4vZGF0YS92b2NhYi50eHQnLAogICAgICAgICd0cmFpbl9maWxlcyc6ICcuLi9kYXRhL3RyYWluJywKICAgICAgICAnZXZhbF9maWxlcyc6ICdkYXRhL3RyYWluLnR4dCcsCiAgICAgICAgJ3ByZWRpY3RfZmlsZXMnOiAnZGF0YS9wcmVkaWN0X3Bvc18xa19uZWdfMWsudHh0JywKICAgICAgICAndG90YWxfZmlsZXMnOiAnZGF0YS90b2JfYXRzJywKICAgICAgICAncHJlZGljdF9maWxlc19ydCc6ICdkYXRhL3ByZWRpY3RfcnQudHh0JywKICAgICAgICAnZW1iZWRkaW5nX3BhdGgnOiAnZGF0YS9lbnRpdHlfZW1iZWRkaW5nLnZlYycsCiAgICAgICAgJ2NvbXBhbnlfbWF4X2xlbic6IDEsCiAgICAgICAgJ2luZHVzdHJ5X21heF9sZW4nOiA1LAogICAgICAgICdmdW5jdGlvbl9sdmw0X21heF9sZW4nOiAyLAogICAgICAgICdza2lsbF9tYXhfbGVuJzogMTAsCiAgICAgICAgJ21ham9yX21heF9sZW4nOiAyLAogICAgICAgICd0cmFpbmFibGUnOiBUcnVlLAogICAgfQogICAgbW9kZWxfY29uZmlnID0gewogICAgICAgICd2b2NhYl9zaXplJzogNjAwMCwKICAgICAgICAnZW1iZWRkaW5nX3NpemUnOiAyMDAsCiAgICAgICAgJ3ZlY19kaW0nOiAyMDAsCiAgICAgICAgJ3dlaWdodHMnOiBucC56ZXJvcygoNjAwMCwgMjAwKSkKICAgIH0KICAgIHJ1bm5lcl9jb25maWcgPSB7CiAgICAgICAgJ2NrcHRfcGVyaW9kJzogMSwKICAgICAgICAnZXBvY2hzJzogMiwKICAgICAgICAnbW9kZWxfZGlyJzogJ3RtcC9kc3NtJwogICAgfQogICAgY29uZmlnLnVwZGF0ZShkYXRhc2V0X2NvbmZpZykKICAgIGNvbmZpZy51cGRhdGUobW9kZWxfY29uZmlnKQogICAgY29uZmlnLnVwZGF0ZShydW5uZXJfY29uZmlnKQogICAgbW9kZWxfZHNzbSA9IERzc20oaXNfdHJhaW49VHJ1ZSwgY29uZmlnPWNvbmZpZykKICAgIG1vZGVsX2Rzc20udHJhaW4oKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBzZWxmLm1vZGVsX25hbWUgPSBtb2RlbF9uYW1lCjx8ZmltX2VuZHw+"]
["6bd5e1edad57256f4ff4cb18c69697e854f18e94-3","6bd5e1edad57256f4ff4cb18c69697e854f18e94","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCByYW5kb20KaW1wb3J0IG9zCjx8ZmltX2VuZHw+"]
["6bd5e1edad57256f4ff4cb18c69697e854f18e94-4","6bd5e1edad57256f4ff4cb18c69697e854f18e94","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmltcG9ydCBqc29uCmltcG9ydCBvcwppbXBvcnQgcmFuZG9tCmltcG9ydCBvcwppbXBvcnQgdGVuc29yZmxvdyBhcyB0ZgppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBnZW5zaW0gaW1wb3J0IGNvcnBvcmEKZnJvbSB0ZW5zb3JmbG93LnB5dGhvbiBpbXBvcnQga2VyYXMKZnJvbSB0ZW5zb3JmbG93LnB5dGhvbi5rZXJhcy5jYWxsYmFja3MgaW1wb3J0IE1vZGVsQ2hlY2twb2ludCwgVGVuc29yQm9hcmQKZnJvbSB0ZW5zb3JmbG93LnB5dGhvbi5rZXJhcy5tb2RlbHMgaW1wb3J0IGxvYWRfbW9kZWwsIFNlcXVlbnRpYWwsIE1vZGVsCgoKZGVmIGxvYWRfY29ycHVzKGZpbGVuYW1lKToKICAgIHJldHVybiBjb3Jwb3JhLkRpY3Rpb25hcnkubG9hZChmaWxlbmFtZSkKCgpjbGFzcyBEc3NtKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWxfcGF0aD0nbW9kZWwnLCBtb2RlbF9uYW1lPSJkc3NtIiwKICAgICAgICAgICAgICAgICBpc190cmFpbj1GYWxzZSwgZGljdGlvbmFyeT1Ob25lLCBjb25maWc9Tm9uZSwgc2F2ZV9sb2dzPUZhbHNlLCB2ZXJzaW9uPU5vbmUpOgogICAgICAgIGlmIHZlcnNpb246CiAgICAgICAgICAgIHNlbGYubW9kZWxfbmFtZSA9IG1vZGVsX25hbWUgKyAnXycgKyBzdHIodmVyc2lvbikKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLm1vZGVsX25hbWUgPSBtb2RlbF9uYW1lCiAgICAgICAgc2VsZi5tb2RlbF9wYXRoID0gbW9kZWxfcGF0aAogICAgICAgIHNlbGYuZGljdGlvbmFyeSA9IGRpY3Rpb25hcnkKICAgICAgICBzZWxmLnNhdmVfbG9ncyA9IHNhdmVfbG9ncwogICAgICAgIHNlbGYuY29uZmlnID0gY29uZmlnCgogICAgICAgIHNlbGYubG9hZF9kaWN0aW9uYXJ5KCkKCiAgICAgICAgaWYgaXNfdHJhaW46CiAgICAgICAgICAgIHNlbGYubW9kZWwgPSBOb25lCiAgICAgICAgICAgIHNlbGYuYnVpbGRfbW9kZWwoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgICMgTk9URSDkuLrkuobog73moLnmja7nm7jlr7not6/lvoTmib7liLDmlofku7YKICAgICAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKICAgICAgICAgICAgb3MuY2hkaXIob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKCiAgICAgICAgICAgIHNlbGYubW9kZWwgPSBsb2FkX21vZGVsKCd7fS97fS5oNScuZm9ybWF0KHNlbGYubW9kZWxfcGF0aCwgc2VsZi5tb2RlbF9uYW1lKSkKICAgICAgICAgICAgb3MuY2hkaXIoY3dkKQoKICAgIGRlZiBidWlsZF9tb2RlbChzZWxmKToKICAgICAgICBjb21wYW55ID0ga2VyYXMubGF5ZXJzLklucHV0KHNoYXBlPShzZWxmLmNvbmZpZ1snY29tcGFueV9tYXhfbGVuJ10sKSwgZHR5cGU9dGYuaW50NjQpCiAgICAgICAgaW5kdXN0cnkgPSBrZXJhcy5sYXllcnMuSW5wdXQoc2hhcGU9KHNlbGYuY29uZmlnWydpbmR1c3RyeV9tYXhfbGVuJ10sKSwgZHR5cGU9dGYuaW50NjQpCiAgICAgICAgZnVuY3Rpb25fbHZsNCA9IGtlcmFzLmxheWVycy5JbnB1dChzaGFwZT0oc2VsZi5jb25maWdbJ2Z1bmN0aW9uX2x2bDRfbWF4X2xlbiddLCksIGR0eXBlPXRmLmludDY0KQogICAgICAgIHNraWxsID0ga2VyYXMubGF5ZXJzLklucHV0KHNoYXBlPShzZWxmLmNvbmZpZ1snc2tpbGxfbWF4X2xlbiddLCksIGR0eXBlPXRmLmludDY0KQogICAgICAgIG1ham9yID0ga2VyYXMubGF5ZXJzLklucHV0KHNoYXBlPShzZWxmLmNvbmZpZ1snbWFqb3JfbWF4X2xlbiddLCksIGR0eXBlPXRmLmludDY0KQoKICAgICAgICBjb21wYW55XzIgPSBrZXJhcy5sYXllcnMuSW5wdXQoc2hhcGU9KHNlbGYuY29uZmlnWydjb21wYW55X21heF9sZW4nXSwpLCBkdHlwZT10Zi5pbnQ2NCkKICAgICAgICBpbmR1c3RyeV8yID0ga2VyYXMubGF5ZXJzLklucHV0KHNoYXBlPShzZWxmLmNvbmZpZ1snaW5kdXN0cnlfbWF4X2xlbiddLCksIGR0eXBlPXRmLmludDY0KQogICAgICAgIGZ1bmN0aW9uX2x2bDRfMiA9IGtlcmFzLmxheWVycy5JbnB1dChzaGFwZT0oc2VsZi5jb25maWdbJ2Z1bmN0aW9uX2x2bDRfbWF4X2xlbiddLCksIGR0eXBlPXRmLmludDY0KQogICAgICAgIHNraWxsXzIgPSBrZXJhcy5sYXllcnMuSW5wdXQoc2hhcGU9KHNlbGYuY29uZmlnWydza2lsbF9tYXhfbGVuJ10sKSwgZHR5cGU9dGYuaW50NjQpCiAgICAgICAgbWFqb3JfMiA9IGtlcmFzLmxheWVycy5JbnB1dChzaGFwZT0oc2VsZi5jb25maWdbJ21ham9yX21heF9sZW4nXSwpLCBkdHlwZT10Zi5pbnQ2NCkKCiAgICAgICAgZW1iZWRkaW5nID0ga2VyYXMubGF5ZXJzLkVtYmVkZGluZyhzZWxmLmNvbmZpZ1sndm9jYWJfc2l6ZSddLCBzZWxmLmNvbmZpZ1snZW1iZWRkaW5nX3NpemUnXSwgbWFza196ZXJvPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRzPVtzZWxmLmNvbmZpZ1snd2VpZ2h0cyddXSwgbmFtZT0nZW1iZWRkaW5nJywgdHJhaW5hYmxlPVRydWUpCiAgICAgICAgIyBhdmVyYWdlIGVtYmVkZGluZwogICAgICAgIGF2Z19lbWJlZGRpbmcgPSBrZXJhcy5sYXllcnMuTGFtYmRhKGxhbWJkYSB4OiB0Zi5yZWR1Y2VfbWVhbih4LCAxKSkKICAgICAgICAjIGF2Z19lbWJlZGRpbmcgPSBrZXJhcy5sYXllcnMuR2xvYmFsQXZnUG9vbDFEKCkKCiAgICAgICAgY29tcGFueV9lbWJlZCA9IGVtYmVkZGluZyhjb21wYW55KQogICAgICAgIGNvbXBhbnlfZW1iZWQgPSBhdmdfZW1iZWRkaW5nKGNvbXBhbnlfZW1iZWQpCiAgICAgICAgaW5kdXN0cnlfZW1iZWQgPSBlbWJlZGRpbmcoaW5kdXN0cnkpCiAgICAgICAgaW5kdXN0cnlfZW1iZWQgPSBhdmdfZW1iZWRkaW5nKGluZHVzdHJ5X2VtYmVkKQogICAgICAgIGZ1bmN0aW9uX2x2bDRfZW1iZWQgPSBlbWJlZGRpbmcoZnVuY3Rpb25fbHZsNCkKICAgICAgICBmdW5jdGlvbl9sdmw0X2VtYmVkID0gYXZnX2VtYmVkZGluZyhmdW5jdGlvbl9sdmw0X2VtYmVkKQogICAgICAgIHNraWxsX2VtYmVkID0gZW1iZWRkaW5nKHNraWxsKQogICAgICAgIHNraWxsX2VtYmVkID0gYXZnX2VtYmVkZGluZyhza2lsbF9lbWJlZCkKICAgICAgICBtYWpvcl9lbWJlZCA9IGVtYmVkZGluZyhtYWpvcikKICAgICAgICBtYWpvcl9lbWJlZCA9IGF2Z19lbWJlZGRpbmcobWFqb3JfZW1iZWQpCgogICAgICAgIGNvbXBhbnlfZW1iZWRfMiA9IGVtYmVkZGluZyhjb21wYW55XzIpCiAgICAgICAgY29tcGFueV9lbWJlZF8yID0gYXZnX2VtYmVkZGluZyhjb21wYW55X2VtYmVkXzIpCiAgICAgICAgaW5kdXN0cnlfZW1iZWRfMiA9IGVtYmVkZGluZyhpbmR1c3RyeV8yKQogICAgICAgIGluZHVzdHJ5X2VtYmVkXzIgPSBhdmdfZW1iZWRkaW5nKGluZHVzdHJ5X2VtYmVkXzIpCiAgICAgICAgZnVuY3Rpb25fbHZsNF9lbWJlZF8yID0gZW1iZWRkaW5nKGZ1bmN0aW9uX2x2bDRfMikKICAgICAgICBmdW5jdGlvbl9sdmw0X2VtYmVkXzIgPSBhdmdfZW1iZWRkaW5nKGZ1bmN0aW9uX2x2bDRfZW1iZWRfMikKICAgICAgICBza2lsbF9lbWJlZF8yID0gZW1iZWRkaW5nKHNraWxsXzIpCiAgICAgICAgc2tpbGxfZW1iZWRfMiA9IGF2Z19lbWJlZGRpbmcoc2tpbGxfZW1iZWRfMikKICAgICAgICBtYWpvcl9lbWJlZF8yID0gZW1iZWRkaW5nKG1ham9yXzIpCiAgICAgICAgbWFqb3JfZW1iZWRfMiA9IGF2Z19lbWJlZGRpbmcobWFqb3JfZW1iZWRfMikKCiAgICAgICAgY29zX2NvbXBhbnkgPSBrZXJhcy5sYXllcnMuRG90KGF4ZXM9LTEsIG5vcm1hbGl6ZT1UcnVlLCBuYW1lPSdjb3NfY29tcGFueScpKFtjb21wYW55X2VtYmVkLCBjb21wYW55X2VtYmVkXzJdKQogICAgICAgIGNvc19pbmR1c3RyeSA9IGtlcmFzLmxheWVycy5Eb3QoYXhlcz0tMSwgbm9ybWFsaXplPVRydWUsIG5hbWU9J2Nvc19pbmR1c3RyeScpKAogICAgICAgICAgICBbaW5kdXN0cnlfZW1iZWQsIGluZHVzdHJ5X2VtYmVkXzJdKQogICAgICAgIGNvc19mdW5jdGlvbl9sdmw0ID0ga2VyYXMubGF5ZXJzLkRvdChheGVzPS0xLCBub3JtYWxpemU9VHJ1ZSwgbmFtZT0nY29zX2Z1bmN0aW9uX2x2bDQnKSgKICAgICAgICAgICAgW2Z1bmN0aW9uX2x2bDRfZW1iZWQsIGZ1bmN0aW9uX2x2bDRfZW1iZWRfMl0pCiAgICAgICAgY29zX3NraWxsID0ga2VyYXMubGF5ZXJzLkRvdChheGVzPS0xLCBub3JtYWxpemU9VHJ1ZSwgbmFtZT0nY29zX3NraWxsJykoW3NraWxsX2VtYmVkLCBza2lsbF9lbWJlZF8yXSkKICAgICAgICBjb3NfbWFqb3IgPSBrZXJhcy5sYXllcnMuRG90KGF4ZXM9LTEsIG5vcm1hbGl6ZT1UcnVlLCBuYW1lPSdjb3NfbWFqb3InKShbbWFqb3JfZW1iZWQsIG1ham9yX2VtYmVkXzJdKQogICAgICAgIG91dCA9IGtlcmFzLmxheWVycy5EZW5zZSgxLCBhY3RpdmF0aW9uPSdzaWdtb2lkJywgbmFtZT0nb3V0JykoCiAgICAgICAgICAgIGtlcmFzLmJhY2tlbmQuY29uY2F0ZW5hdGUoW2Nvc19jb21wYW55LCBjb3NfaW5kdXN0cnksIGNvc19mdW5jdGlvbl9sdmw0LCBjb3Nfc2tpbGwsIGNvc19tYWpvcl0pKQogICAgICAgIG1vZGVsID0ga2VyYXMuTW9kZWwoCiAgICAgICAgICAgIGlucHV0cz1bY29tcGFueSwgaW5kdXN0cnksIGZ1bmN0aW9uX2x2bDQsIHNraWxsLCBtYWpvciwgY29tcGFueV8yLCBpbmR1c3RyeV8yLCBmdW5jdGlvbl9sdmw0XzIsIHNraWxsXzIsCiAgICAgICAgICAgICAgICAgICAgbWFqb3JfMl0sCiAgICAgICAgICAgIG91dHB1dHM9eydvdXQnOiBvdXQsICdjb3NfY29tcGFueSc6IGNvc19jb21wYW55LCAnY29zX2luZHVzdHJ5JzogY29zX2luZHVzdHJ5LAogICAgICAgICAgICAgICAgICAgICAnY29zX2Z1bmN0aW9uX2x2bDQnOiBjb3NfZnVuY3Rpb25fbHZsNCwgJ2Nvc19za2lsbCc6IGNvc19za2lsbCwgJ2Nvc19tYWpvcic6IGNvc19tYWpvcn0pCgogICAgICAgIHNnZCA9IGtlcmFzLm9wdGltaXplcnMuU0dEKGxyPTAuMDEsIGRlY2F5PTFlLTYsIG1vbWVudHVtPTAuOSwgbmVzdGVyb3Y9VHJ1ZSkKICAgICAgICBtb2RlbC5jb21waWxlKG9wdGltaXplcj1zZ2QsCiAgICAgICAgICAgICAgICAgICAgICBsb3NzPXsnb3V0JzogJ2JpbmFyeV9jcm9zc2VudHJvcHknfSwKICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3M9ewogICAgICAgICAgICAgICAgICAgICAgICAgICJvdXQiOiBba2VyYXMubWV0cmljcy5CaW5hcnlBY2N1cmFjeSgpLCBrZXJhcy5tZXRyaWNzLlByZWNpc2lvbigpLCBrZXJhcy5tZXRyaWNzLlJlY2FsbCgpXX0pCiAgICAgICAgbW9kZWwuc3VtbWFyeSgpCiAgICAgICAgc2VsZi5tb2RlbCA9IG1vZGVsCgogICAgZGVmIGxvYWRfZGljdGlvbmFyeShzZWxmKToKICAgICAgICB3aXRoIG9wZW4oc2VsZi5jb25maWdbInZvY2FiX2ZpbGUiXSwgInIiLCBlbmNvZGluZz0idXRmLTgiKSBhcyBmOgogICAgICAgICAgICB2b2NhYiA9IFt4LnN0cmlwKCJcbiIpIGZvciB4IGluIGYucmVhZGxpbmVzKCldCiAgICAgICAgZGljdGlvbmFyeSA9IGNvcnBvcmEuRGljdGlvbmFyeShbdm9jYWJdKQogICAgICAgIHNlbGYuZGljdGlvbmFyeSA9IGRpY3Rpb25hcnkKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgZ2VuZXJhdGVfYmF0Y2hfZGF0YV9yYW5kb20odHJhaW5feCwgeSwgYmF0Y2hfc2l6ZSk6CiAgICAgICAgIiIiCiAgICAgICAg6YCQ5q2l5o+Q5Y+WYmF0Y2jmlbDmja7liLDmmL7lrZjvvIzpmY3kvY7lr7nmmL7lrZjnmoTljaDnlKgKICAgICAgICA6cGFyYW0gdHJhaW5feDoKICAgICAgICA6cGFyYW0geToKICAgICAgICA6cGFyYW0gYmF0Y2hfc2l6ZTog5om55aSE55CG5qC35pys5aSn5bCPCiAgICAgICAgOnJldHVybjoKICAgICAgICAiIiIKICAgICAgICB5X2xlbiA9IGxlbih5KQogICAgICAgIGxvb3BfY291bnQgPSB5X2xlbiAvLyBiYXRjaF9zaXplCiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgaSA9IHJhbmRvbS5yYW5kaW50KDAsIGxvb3BfY291bnQpCiAgICAgICAgICAgIHlpZWxkICh0cmFpbl94W2kgKiBiYXRjaF9zaXplOihpICsgMSkgKiBiYXRjaF9zaXplXVswXSwgeVtpICogYmF0Y2hfc2l6ZTooaSArIDEpICogYmF0Y2hfc2l6ZV0pCgogICAgZGVmIHRyYWluKHNlbGYpOgogICAgICAgIHRyYWluX3ggPSBbXQogICAgICAgIHRyYWluX3kgPSBbXQogICAgICAgIHdpdGggb3BlbihzZWxmLmNvbmZpZ1sidHJhaW5fZmlsZXMiXSwgInIiLCBlbmNvZGluZz0idXRmLTgiKSBhcyBmOgogICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgogICAgICAgICAgICAgICAgbGluZSA9IGpzb24ubG9hZHMobGluZSkKICAgICAgICAgICAgICAgIGN2X3J0ID0gbGlzdChsaW5lLmdldCgiY3ZfcnQiKS52YWx1ZXMoKSkKICAgICAgICAgICAgICAgIGpkX3J0ID0gbGlzdChsaW5lLmdldCgiamRfcnQiKS52YWx1ZXMoKSkKICAgICAgICAgICAgICAgIGxhYmVsID0gbGluZS5nZXQoImxhYmVsIikKICAgICAgICAgICAgICAgIHRyYWluX2lucHV0ID0gc2VsZi50ZXh0MmlkcyhzZWxmLmRpY3Rpb25hcnksIGN2X3J0ICsgamRfcnQpCiAgICAgICAgICAgICAgICB0cmFpbl94LmFwcGVuZChucC5hcnJheShbbnAuYXJyYXkoeCkgZm9yIHggaW4gdHJhaW5faW5wdXRdKSkKPHxmaW1faG9sZXw+CiAgICAgICAgdHJhaW5feCA9IG5wLmFzYXJyYXkodHJhaW5feCwgZHR5cGU9InVpbnQ4IikKICAgICAgICB0cmFpbl95ID0gbnAuZXhwYW5kX2RpbXModHJhaW5feSwgLTEpCgogICAgICAgIGNhbGxiYWNrc19saXN0ID0gW10KICAgICAgICBjaGVja3BvaW50ID0gTW9kZWxDaGVja3BvaW50KCd7fS97fS5oNScuZm9ybWF0KHNlbGYubW9kZWxfcGF0aCwgc2VsZi5tb2RlbF9uYW1lKSwgbW9uaXRvcj0ndmFsX2FjYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlX2Jlc3Rfb25seT1UcnVlLCB2ZXJib3NlPTEsIG1vZGU9J21heCcpCiAgICAgICAgY2FsbGJhY2tzX2xpc3QuYXBwZW5kKGNoZWNrcG9pbnQpCiAgICAgICAgc2VsZi5tb2RlbC5maXRfZ2VuZXJhdG9yKHNlbGYuZ2VuZXJhdGVfYmF0Y2hfZGF0YV9yYW5kb20odHJhaW5feCwgdHJhaW5feSwgc2VsZi5jb25maWdbInRyYWluX2JhdGNoX3NpemUiXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBzX3Blcl9lcG9jaD1sZW4odHJhaW5feSkgLy8gc2VsZi5jb25maWdbInRyYWluX2JhdGNoX3NpemUiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBvY2hzPXNlbGYuY29uZmlnWyJlcG9jaHMiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbl9kYXRhPSh0cmFpbl94LCB0cmFpbl95KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZT0yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3M9Y2FsbGJhY2tzX2xpc3QpCgogICAgZGVmIHByZWRpY3RfZnVuKHNlbGYsIHNlZ21lbnRfZG9jcyk6CiAgICAgICAgZGF0YV94ID0gc2VsZi50ZXh0MmlkcyhzZWxmLmRpY3Rpb25hcnksIHNlZ21lbnRfZG9jcykKICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkYXRhX3gsIGxpc3QpIGFuZCBib29sKGRhdGFfeCkgaXMgVHJ1ZQogICAgICAgIGRhdGFfeCA9IG5wLmFzYXJyYXkoZGF0YV94LCBkdHlwZT0idWludDgiKQogICAgICAgIHJlc3VsdF95ID0gc2VsZi5tb2RlbC5wcmVkaWN0KG5wLmFycmF5KGRhdGFfeCkpCiAgICAgICAgcmVzdWx0ID0gW10KICAgICAgICBmb3IgaXRlbSBpbiByZXN1bHRfeToKICAgICAgICAgICAgcHJvYmEgPSBpdGVtLm1heCgpCiAgICAgICAgICAgIG51bSA9IG5wLmFyZ21heChpdGVtKQogICAgICAgICAgICBzaW5nbGUgPSB7CiAgICAgICAgICAgICAgICAnbnVtJzogbnVtLAogICAgICAgICAgICAgICAgJ3Byb2JhJzogcHJvYmEKICAgICAgICAgICAgfQogICAgICAgICAgICByZXN1bHQuYXBwZW5kKHNpbmdsZSkKCiAgICAgICAgcmV0dXJuIHJlc3VsdAoKICAgIGRlZiB0ZXh0MmlkcyhzZWxmLCBkaWN0aW9uYXJ5LCBkb2MsIG1heF9sZW49OCk6CiAgICAgICAgIiIiCiAgICAgICAgdGV4dCDlsI/kuo7mnIDlpKfplb/luqbnlKgw6L+b6KGM5ZCO6KGl5L2N77yM5peg5oSP5LmJCiAgICAgICAgdGV4dCDkuK3kuI3lnKhkaWN0aW9uYXJ55Lit55qE6K+N77yMaWQ9bGVuKGRpY3Rpb25hcnkpKzEKICAgICAgICAi6ZmM55Sf57uP55CGIiDliIbor43lkI5kb2Mg5Li6IFtbXV0KICAgICAgICA6cGFyYW0gZGljdGlvbmFyeToKICAgICAgICA6cGFyYW0gZG9jOgogICAgICAgIDpyZXR1cm46CiAgICAgICAgIiIiCiAgICAgICAgaWYgaXNpbnN0YW5jZShtYXhfbGVuLCBsaXN0KToKICAgICAgICAgICAgbWF4X2xlbiA9IG1heF9sZW5bMF0KICAgICAgICB0ZXh0X2lkc19saXN0ID0gW10KICAgICAgICBmb3IgaXRlbSBpbiBkb2M6CiAgICAgICAgICAgIGlmIGl0ZW06CiAgICAgICAgICAgICAgICBlbnRpdHlfdHlwZSA9IGl0ZW1bMF0uc3BsaXQoInwkfCIpWzBdCiAgICAgICAgICAgICAgICBpZiBlbnRpdHlfdHlwZSA9PSAiY29tcGFueSI6CiAgICAgICAgICAgICAgICAgICAgbWF4X2xlbiA9IHNlbGYuY29uZmlnWydjb21wYW55X21heF9sZW4nXQogICAgICAgICAgICAgICAgZWxpZiBlbnRpdHlfdHlwZSA9PSAiaW5kdXN0cnkiOgogICAgICAgICAgICAgICAgICAgIG1heF9sZW4gPSBzZWxmLmNvbmZpZ1snaW5kdXN0cnlfbWF4X2xlbiddCiAgICAgICAgICAgICAgICBlbGlmIGVudGl0eV90eXBlID09ICJmdW5jdGlvbiI6CiAgICAgICAgICAgICAgICAgICAgbWF4X2xlbiA9IHNlbGYuY29uZmlnWydmdW5jdGlvbl9sdmw0X21heF9sZW4nXQogICAgICAgICAgICAgICAgZWxpZiBlbnRpdHlfdHlwZSA9PSAic2tpbGwiOgogICAgICAgICAgICAgICAgICAgIG1heF9sZW4gPSBzZWxmLmNvbmZpZ1snc2tpbGxfbWF4X2xlbiddCiAgICAgICAgICAgICAgICBlbGlmIGVudGl0eV90eXBlID09ICJtYWpvciI6CiAgICAgICAgICAgICAgICAgICAgbWF4X2xlbiA9IHNlbGYuY29uZmlnWydtYWpvcl9tYXhfbGVuJ10KICAgICAgICAgICAgaXRlbV9pZHMgPSBkaWN0aW9uYXJ5LmRvYzJpZHgoaXRlbSwgdW5rbm93bl93b3JkX2luZGV4PS0xKQogICAgICAgICAgICBpZiBsZW4oaXRlbV9pZHMpID4gbWF4X2xlbjoKICAgICAgICAgICAgICAgIGl0ZW1faWRzID0gaXRlbV9pZHNbOm1heF9sZW5dCiAgICAgICAgICAgIHRleHRfaWRzX2xpc3QuYXBwZW5kKGl0ZW1faWRzKQoKICAgICAgICByZXR1cm4gW3JvdyArIFswXSAqIChtYXhfbGVuIC0gbGVuKHJvdykpIGZvciByb3cgaW4gdGV4dF9pZHNfbGlzdF0KCiAgICBkZWYgZmlsdGVyX25vaXNlX3dvcmRzKHNlbGYsIGRvYyk6CiAgICAgICAgIiIiCiAgICAgICAg6L+H5ruk5a2X5YW45Lit5pyq5Ye6546w55qE5bmy5omw6K+NCiAgICAgICAgOnBhcmFtIGRpY3Rpb25hcnk6CiAgICAgICAgOnBhcmFtIGRvYzoKICAgICAgICA6cmV0dXJuOgogICAgICAgICIiIgogICAgICAgIHRleHRfaWRzX2xpc3QgPSBbXQogICAgICAgIGZvciBpdGVtIGluIGRvYzoKICAgICAgICAgICAgaXRlbV9maWx0ZXIgPSBbeCBmb3IgeCBpbiBpdGVtIGlmIHNlbGYuZGljdGlvbmFyeS50b2tlbjJpZC5nZXQoeCwgLTEpID4gLTFdCiAgICAgICAgICAgIGl0ZW1fZmlsdGVyX3N0cmluZyA9ICcnLmpvaW4oaXRlbV9maWx0ZXIpCiAgICAgICAgICAgIHRleHRfaWRzX2xpc3QuYXBwZW5kKGl0ZW1fZmlsdGVyX3N0cmluZykKCiAgICAgICAgcmV0dXJuIHRleHRfaWRzX2xpc3QKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgY29uZmlnID0ge30KICAgIGRhdGFzZXRfY29uZmlnID0gewogICAgICAgICdzZXAnOiAnQCcsCiAgICAgICAgJ251bV9wYXJhbGxlbF9jYWxscyc6IDIwLAogICAgICAgICdidWZmZXJfc2l6ZSc6IDUwMDAwLAogICAgICAgICdzZWVkJzogTm9uZSwKICAgICAgICAncmVzaHVmZmxlX2VhY2hfaXRlcmF0aW9uJzogVHJ1ZSwKICAgICAgICAndHJhaW5fYmF0Y2hfc2l6ZSc6IDIsCiAgICAgICAgJ2V2YWxfcHJlZGljdF9zaXplJzogNTEyLAogICAgICAgICdwcmVkaWN0X2JhdGNoX3NpemUnOiA1MTIsCiAgICAgICAgJ3F1ZXJ5X21heF9sZW4nOiA1LAogICAgICAgICdkb2NfbWF4X2xlbic6IDUsCiAgICAgICAgJ3ZvY2FiX2ZpbGUnOiAnLi4vZGF0YS92b2NhYi50eHQnLAogICAgICAgICd0cmFpbl9maWxlcyc6ICcuLi9kYXRhL3RyYWluJywKICAgICAgICAnZXZhbF9maWxlcyc6ICdkYXRhL3RyYWluLnR4dCcsCiAgICAgICAgJ3ByZWRpY3RfZmlsZXMnOiAnZGF0YS9wcmVkaWN0X3Bvc18xa19uZWdfMWsudHh0JywKICAgICAgICAndG90YWxfZmlsZXMnOiAnZGF0YS90b2JfYXRzJywKICAgICAgICAncHJlZGljdF9maWxlc19ydCc6ICdkYXRhL3ByZWRpY3RfcnQudHh0JywKICAgICAgICAnZW1iZWRkaW5nX3BhdGgnOiAnZGF0YS9lbnRpdHlfZW1iZWRkaW5nLnZlYycsCiAgICAgICAgJ2NvbXBhbnlfbWF4X2xlbic6IDEsCiAgICAgICAgJ2luZHVzdHJ5X21heF9sZW4nOiA1LAogICAgICAgICdmdW5jdGlvbl9sdmw0X21heF9sZW4nOiAyLAogICAgICAgICdza2lsbF9tYXhfbGVuJzogMTAsCiAgICAgICAgJ21ham9yX21heF9sZW4nOiAyLAogICAgICAgICd0cmFpbmFibGUnOiBUcnVlLAogICAgfQogICAgbW9kZWxfY29uZmlnID0gewogICAgICAgICd2b2NhYl9zaXplJzogNjAwMCwKICAgICAgICAnZW1iZWRkaW5nX3NpemUnOiAyMDAsCiAgICAgICAgJ3ZlY19kaW0nOiAyMDAsCiAgICAgICAgJ3dlaWdodHMnOiBucC56ZXJvcygoNjAwMCwgMjAwKSkKICAgIH0KICAgIHJ1bm5lcl9jb25maWcgPSB7CiAgICAgICAgJ2NrcHRfcGVyaW9kJzogMSwKICAgICAgICAnZXBvY2hzJzogMiwKICAgICAgICAnbW9kZWxfZGlyJzogJ3RtcC9kc3NtJwogICAgfQogICAgY29uZmlnLnVwZGF0ZShkYXRhc2V0X2NvbmZpZykKICAgIGNvbmZpZy51cGRhdGUobW9kZWxfY29uZmlnKQogICAgY29uZmlnLnVwZGF0ZShydW5uZXJfY29uZmlnKQogICAgbW9kZWxfZHNzbSA9IERzc20oaXNfdHJhaW49VHJ1ZSwgY29uZmlnPWNvbmZpZykKICAgIG1vZGVsX2Rzc20udHJhaW4oKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgdHJhaW5feS5hcHBlbmQobGFiZWwpCjx8ZmltX2VuZHw+"]
["6bd5d7cf17f462405d08a7aa1ebfa7cead67c4d3-1","6bd5d7cf17f462405d08a7aa1ebfa7cead67c4d3","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCicnJwpAYXV0aG9yIEx1a2UgQwpAZGF0ZSBNb24gTWFyIDI1IDA5OjU3OjU5IEVEVCAyMDEzCkBmaWxlIGlvbi91dGlsL3N0b3JlZF92YWx1ZXMucHkKJycnCgpmcm9tIHB5b24uY29yZS5leGNlcHRpb24gaW1wb3J0IE5vdEZvdW5kCmltcG9ydCBnZXZlbnQKCgoKY2xhc3MgU3RvcmVkVmFsdWVNYW5hZ2VyKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGFpbmVyKToKICAgICAgICBzZWxmLnN0b3JlID0gY29udGFpbmVyLm9iamVjdF9zdG9yZQoKICAgIGRlZiBzdG9yZWRfdmFsdWVfY2FzKHNlbGYsIGRvY19rZXksIGRvY3VtZW50X3VwZGF0ZXMpOgogICAgICAgICcnJwogICAgICAgIFBlcmZvcm1zIGEgY2hlY2sgYW5kIHNldCBmb3IgYSBsb29rdXBfdGFibGUgaW4gdGhlIG9iamVjdCBzdG9yZSBmb3IgdGhlIGdpdmVuIGtleQogICAgICAgICcnJwogICAgICAgIHRyeToKICAgICAgICAgICAgZG9jID0gc2VsZi5zdG9yZS5yZWFkX2RvYyhkb2Nfa2V5KQo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgaWYgJ2h0dHAnIGluIGUubWVzc2FnZToKICAgICAgICAgICAgICAgIGRvY19pZCwgcmV2ID0gc2VsZi5zdG9yZS5jcmVhdGVfZG9jKGRvY3VtZW50X3VwZGF0ZXMsIG9iamVjdF9pZD1kb2Nfa2V5KQogICAgICAgICAgICAgICAgcmV0dXJuIGRvY19pZCwgcmV2CgogICAgICAgIGZvciBrLHYgaW4gZG9jdW1lbnRfdXBkYXRlcy5pdGVyaXRlbXMoKToKICAgICAgICAgICAgZG9jW2tdID0gdgogICAgICAgIGRvY19pZCwgcmV2ID0gc2VsZi5zdG9yZS51cGRhdGVfZG9jKGRvYykKICAgICAgICByZXR1cm4gZG9jX2lkLCByZXYKCiAgICBkZWYgcmVhZF92YWx1ZShzZWxmLCBkb2Nfa2V5KToKICAgICAgICBkb2MgPSBzZWxmLnN0b3JlLnJlYWRfZG9jKGRvY19rZXkpCiAgICAgICAgcmV0dXJuIGRvYwoKICAgIGRlZiByZWFkX3ZhbHVlX211bHQoc2VsZiwgZG9jX2tleXMsIHN0cmljdD1GYWxzZSk6CiAgICAgICAgZG9jX2xpc3QgPSBzZWxmLnN0b3JlLnJlYWRfZG9jX211bHQoZG9jX2tleXMsIHN0cmljdD1zdHJpY3QpCiAgICAgICAgcmV0dXJuIGRvY19saXN0CgogICAgZGVmIGRlbGV0ZV9zdG9yZWRfdmFsdWUoc2VsZiwgZG9jX2tleSk6CiAgICAgICAgc2VsZi5zdG9yZS5kZWxldGVfZG9jKGRvY19rZXkpCgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBleGNlcHQgTm90Rm91bmQ6CiAgICAgICAgICAgIGRvY19pZCwgcmV2ID0gc2VsZi5zdG9yZS5jcmVhdGVfZG9jKGRvY3VtZW50X3VwZGF0ZXMsIG9iamVjdF9pZD1kb2Nfa2V5KQogICAgICAgICAgICByZXR1cm4gZG9jX2lkLCByZXYKICAgICAgICBleGNlcHQgS2V5RXJyb3IgYXMgZToKPHxmaW1fZW5kfD4="]
["6bd5d7cf17f462405d08a7aa1ebfa7cead67c4d3-2","6bd5d7cf17f462405d08a7aa1ebfa7cead67c4d3","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCicnJwpAYXV0aG9yIEx1a2UgQwpAZGF0ZSBNb24gTWFyIDI1IDA5OjU3OjU5IEVEVCAyMDEzCkBmaWxlIGlvbi91dGlsL3N0b3JlZF92YWx1ZXMucHkKJycnCgpmcm9tIHB5b24uY29yZS5leGNlcHRpb24gaW1wb3J0IE5vdEZvdW5kCmltcG9ydCBnZXZlbnQKCgoKY2xhc3MgU3RvcmVkVmFsdWVNYW5hZ2VyKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGFpbmVyKToKICAgICAgICBzZWxmLnN0b3JlID0gY29udGFpbmVyLm9iamVjdF9zdG9yZQoKICAgIGRlZiBzdG9yZWRfdmFsdWVfY2FzKHNlbGYsIGRvY19rZXksIGRvY3VtZW50X3VwZGF0ZXMpOgogICAgICAgICcnJwogICAgICAgIFBlcmZvcm1zIGEgY2hlY2sgYW5kIHNldCBmb3IgYSBsb29rdXBfdGFibGUgaW4gdGhlIG9iamVjdCBzdG9yZSBmb3IgdGhlIGdpdmVuIGtleQogICAgICAgICcnJwo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgcmV0dXJuIGRvY19pZCwgcmV2CiAgICAgICAgZXhjZXB0IEtleUVycm9yIGFzIGU6CiAgICAgICAgICAgIGlmICdodHRwJyBpbiBlLm1lc3NhZ2U6CiAgICAgICAgICAgICAgICBkb2NfaWQsIHJldiA9IHNlbGYuc3RvcmUuY3JlYXRlX2RvYyhkb2N1bWVudF91cGRhdGVzLCBvYmplY3RfaWQ9ZG9jX2tleSkKICAgICAgICAgICAgICAgIHJldHVybiBkb2NfaWQsIHJldgoKICAgICAgICBmb3Igayx2IGluIGRvY3VtZW50X3VwZGF0ZXMuaXRlcml0ZW1zKCk6CiAgICAgICAgICAgIGRvY1trXSA9IHYKICAgICAgICBkb2NfaWQsIHJldiA9IHNlbGYuc3RvcmUudXBkYXRlX2RvYyhkb2MpCiAgICAgICAgcmV0dXJuIGRvY19pZCwgcmV2CgogICAgZGVmIHJlYWRfdmFsdWUoc2VsZiwgZG9jX2tleSk6CiAgICAgICAgZG9jID0gc2VsZi5zdG9yZS5yZWFkX2RvYyhkb2Nfa2V5KQogICAgICAgIHJldHVybiBkb2MKCiAgICBkZWYgcmVhZF92YWx1ZV9tdWx0KHNlbGYsIGRvY19rZXlzLCBzdHJpY3Q9RmFsc2UpOgogICAgICAgIGRvY19saXN0ID0gc2VsZi5zdG9yZS5yZWFkX2RvY19tdWx0KGRvY19rZXlzLCBzdHJpY3Q9c3RyaWN0KQogICAgICAgIHJldHVybiBkb2NfbGlzdAoKICAgIGRlZiBkZWxldGVfc3RvcmVkX3ZhbHVlKHNlbGYsIGRvY19rZXkpOgogICAgICAgIHNlbGYuc3RvcmUuZGVsZXRlX2RvYyhkb2Nfa2V5KQoKCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgdHJ5OgogICAgICAgICAgICBkb2MgPSBzZWxmLnN0b3JlLnJlYWRfZG9jKGRvY19rZXkpCiAgICAgICAgZXhjZXB0IE5vdEZvdW5kOgogICAgICAgICAgICBkb2NfaWQsIHJldiA9IHNlbGYuc3RvcmUuY3JlYXRlX2RvYyhkb2N1bWVudF91cGRhdGVzLCBvYmplY3RfaWQ9ZG9jX2tleSkKPHxmaW1fZW5kfD4="]
["6bd5d7cf17f462405d08a7aa1ebfa7cead67c4d3-3","6bd5d7cf17f462405d08a7aa1ebfa7cead67c4d3","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCicnJwpAYXV0aG9yIEx1a2UgQwpAZGF0ZSBNb24gTWFyIDI1IDA5OjU3OjU5IEVEVCAyMDEzCkBmaWxlIGlvbi91dGlsL3N0b3JlZF92YWx1ZXMucHkKJycnCgpmcm9tIHB5b24uY29yZS5leGNlcHRpb24gaW1wb3J0IE5vdEZvdW5kCmltcG9ydCBnZXZlbnQKCgoKY2xhc3MgU3RvcmVkVmFsdWVNYW5hZ2VyKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGFpbmVyKToKICAgICAgICBzZWxmLnN0b3JlID0gY29udGFpbmVyLm9iamVjdF9zdG9yZQoKICAgIGRlZiBzdG9yZWRfdmFsdWVfY2FzKHNlbGYsIGRvY19rZXksIGRvY3VtZW50X3VwZGF0ZXMpOgogICAgICAgICcnJwogICAgICAgIFBlcmZvcm1zIGEgY2hlY2sgYW5kIHNldCBmb3IgYSBsb29rdXBfdGFibGUgaW4gdGhlIG9iamVjdCBzdG9yZSBmb3IgdGhlIGdpdmVuIGtleQogICAgICAgICcnJwogICAgICAgIHRyeToKICAgICAgICAgICAgZG9jID0gc2VsZi5zdG9yZS5yZWFkX2RvYyhkb2Nfa2V5KQogICAgICAgIGV4Y2VwdCBOb3RGb3VuZDoKICAgICAgICAgICAgZG9jX2lkLCByZXYgPSBzZWxmLnN0b3JlLmNyZWF0ZV9kb2MoZG9jdW1lbnRfdXBkYXRlcywgb2JqZWN0X2lkPWRvY19rZXkpCiAgICAgICAgICAgIHJldHVybiBkb2NfaWQsIHJldgogICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBlOgogICAgICAgICAgICBpZiAnaHR0cCcgaW4gZS5tZXNzYWdlOgogICAgICAgICAgICAgICAgZG9jX2lkLCByZXYgPSBzZWxmLnN0b3JlLmNyZWF0ZV9kb2MoZG9jdW1lbnRfdXBkYXRlcywgb2JqZWN0X2lkPWRvY19rZXkpCiAgICAgICAgICAgICAgICByZXR1cm4gZG9jX2lkLCByZXYKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBmb3Igayx2IGluIGRvY3VtZW50X3VwZGF0ZXMuaXRlcml0ZW1zKCk6CiAgICAgICAgICAgIGRvY1trXSA9IHYKICAgICAgICBkb2NfaWQsIHJldiA9IHNlbGYuc3RvcmUudXBkYXRlX2RvYyhkb2MpCiAgICAgICAgcmV0dXJuIGRvY19pZCwgcmV2Cjx8ZmltX2VuZHw+"]
["6bd5d7cf17f462405d08a7aa1ebfa7cead67c4d3-4","6bd5d7cf17f462405d08a7aa1ebfa7cead67c4d3","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgpAZmlsZSBpb24vdXRpbC9zdG9yZWRfdmFsdWVzLnB5CicnJwoKZnJvbSBweW9uLmNvcmUuZXhjZXB0aW9uIGltcG9ydCBOb3RGb3VuZAppbXBvcnQgZ2V2ZW50CgoKCmNsYXNzIFN0b3JlZFZhbHVlTWFuYWdlcihvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRhaW5lcik6CiAgICAgICAgc2VsZi5zdG9yZSA9IGNvbnRhaW5lci5vYmplY3Rfc3RvcmUKCiAgICBkZWYgc3RvcmVkX3ZhbHVlX2NhcyhzZWxmLCBkb2Nfa2V5LCBkb2N1bWVudF91cGRhdGVzKToKICAgICAgICAnJycKICAgICAgICBQZXJmb3JtcyBhIGNoZWNrIGFuZCBzZXQgZm9yIGEgbG9va3VwX3RhYmxlIGluIHRoZSBvYmplY3Qgc3RvcmUgZm9yIHRoZSBnaXZlbiBrZXkKICAgICAgICAnJycKICAgICAgICB0cnk6CiAgICAgICAgICAgIGRvYyA9IHNlbGYuc3RvcmUucmVhZF9kb2MoZG9jX2tleSkKICAgICAgICBleGNlcHQgTm90Rm91bmQ6CiAgICAgICAgICAgIGRvY19pZCwgcmV2ID0gc2VsZi5zdG9yZS5jcmVhdGVfZG9jKGRvY3VtZW50X3VwZGF0ZXMsIG9iamVjdF9pZD1kb2Nfa2V5KQogICAgICAgICAgICByZXR1cm4gZG9jX2lkLCByZXYKICAgICAgICBleGNlcHQgS2V5RXJyb3IgYXMgZToKICAgICAgICAgICAgaWYgJ2h0dHAnIGluIGUubWVzc2FnZToKICAgICAgICAgICAgICAgIGRvY19pZCwgcmV2ID0gc2VsZi5zdG9yZS5jcmVhdGVfZG9jKGRvY3VtZW50X3VwZGF0ZXMsIG9iamVjdF9pZD1kb2Nfa2V5KQogICAgICAgICAgICAgICAgcmV0dXJuIGRvY19pZCwgcmV2CgogICAgICAgIGZvciBrLHYgaW4gZG9jdW1lbnRfdXBkYXRlcy5pdGVyaXRlbXMoKToKICAgICAgICAgICAgZG9jW2tdID0gdgogICAgICAgIGRvY19pZCwgcmV2ID0gc2VsZi5zdG9yZS51cGRhdGVfZG9jKGRvYykKICAgICAgICByZXR1cm4gZG9jX2lkLCByZXYKCiAgICBkZWYgcmVhZF92YWx1ZShzZWxmLCBkb2Nfa2V5KToKICAgICAgICBkb2MgPSBzZWxmLnN0b3JlLnJlYWRfZG9jKGRvY19rZXkpCiAgICAgICAgcmV0dXJuIGRvYwoKICAgIGRlZiByZWFkX3ZhbHVlX211bHQoc2VsZiwgZG9jX2tleXMsIHN0cmljdD1GYWxzZSk6CiAgICAgICAgZG9jX2xpc3QgPSBzZWxmLnN0b3JlLnJlYWRfZG9jX211bHQoZG9jX2tleXMsIHN0cmljdD1zdHJpY3QpCiAgICAgICAgcmV0dXJuIGRvY19saXN0CgogICAgZGVmIGRlbGV0ZV9zdG9yZWRfdmFsdWUoc2VsZiwgZG9jX2tleSk6CiAgICAgICAgc2VsZi5zdG9yZS5kZWxldGVfZG9jKGRvY19rZXkpCgoKPHxmaW1fc3VmZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCicnJwpAYXV0aG9yIEx1a2UgQwpAZGF0ZSBNb24gTWFyIDI1IDA5OjU3OjU5IEVEVCAyMDEzCjx8ZmltX2VuZHw+"]
["6bd5d7cf17f462405d08a7aa1ebfa7cead67c4d3-5","6bd5d7cf17f462405d08a7aa1ebfa7cead67c4d3","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCicnJwpAYXV0aG9yIEx1a2UgQwpAZGF0ZSBNb24gTWFyIDI1IDA5OjU3OjU5IEVEVCAyMDEzCkBmaWxlIGlvbi91dGlsL3N0b3JlZF92YWx1ZXMucHkKJycnCgpmcm9tIHB5b24uY29yZS5leGNlcHRpb24gaW1wb3J0IE5vdEZvdW5kCmltcG9ydCBnZXZlbnQKCgoKY2xhc3MgU3RvcmVkVmFsdWVNYW5hZ2VyKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGFpbmVyKToKICAgICAgICBzZWxmLnN0b3JlID0gY29udGFpbmVyLm9iamVjdF9zdG9yZQoKICAgIGRlZiBzdG9yZWRfdmFsdWVfY2FzKHNlbGYsIGRvY19rZXksIGRvY3VtZW50X3VwZGF0ZXMpOgogICAgICAgICcnJwogICAgICAgIFBlcmZvcm1zIGEgY2hlY2sgYW5kIHNldCBmb3IgYSBsb29rdXBfdGFibGUgaW4gdGhlIG9iamVjdCBzdG9yZSBmb3IgdGhlIGdpdmVuIGtleQogICAgICAgICcnJwogICAgICAgIHRyeToKICAgICAgICAgICAgZG9jID0gc2VsZi5zdG9yZS5yZWFkX2RvYyhkb2Nfa2V5KQogICAgICAgIGV4Y2VwdCBOb3RGb3VuZDoKICAgICAgICAgICAgZG9jX2lkLCByZXYgPSBzZWxmLnN0b3JlLmNyZWF0ZV9kb2MoZG9jdW1lbnRfdXBkYXRlcywgb2JqZWN0X2lkPWRvY19rZXkpCiAgICAgICAgICAgIHJldHVybiBkb2NfaWQsIHJldgogICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBlOgogICAgICAgICAgICBpZiAnaHR0cCcgaW4gZS5tZXNzYWdlOgogICAgICAgICAgICAgICAgZG9jX2lkLCByZXYgPSBzZWxmLnN0b3JlLmNyZWF0ZV9kb2MoZG9jdW1lbnRfdXBkYXRlcywgb2JqZWN0X2lkPWRvY19rZXkpCiAgICAgICAgICAgICAgICByZXR1cm4gZG9jX2lkLCByZXYKCiAgICAgICAgZm9yIGssdiBpbiBkb2N1bWVudF91cGRhdGVzLml0ZXJpdGVtcygpOgogICAgICAgICAgICBkb2Nba10gPSB2CiAgICAgICAgZG9jX2lkLCByZXYgPSBzZWxmLnN0b3JlLnVwZGF0ZV9kb2MoZG9jKQogICAgICAgIHJldHVybiBkb2NfaWQsIHJldgoKICAgIGRlZiByZWFkX3ZhbHVlKHNlbGYsIGRvY19rZXkpOgogICAgICAgIGRvYyA9IHNlbGYuc3RvcmUucmVhZF9kb2MoZG9jX2tleSkKICAgICAgICByZXR1cm4gZG9jCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBkZWYgcmVhZF92YWx1ZV9tdWx0KHNlbGYsIGRvY19rZXlzLCBzdHJpY3Q9RmFsc2UpOgogICAgICAgIGRvY19saXN0ID0gc2VsZi5zdG9yZS5yZWFkX2RvY19tdWx0KGRvY19rZXlzLCBzdHJpY3Q9c3RyaWN0KQogICAgICAgIHJldHVybiBkb2NfbGlzdAo8fGZpbV9lbmR8Pg=="]
["419b96994074fc3c8b94cf93269ac5a2bc2bd75b-1","419b96994074fc3c8b94cf93269ac5a2bc2bd75b","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IFR1cGxlCgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRvcmNoIGFzIHQKZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluCgpmcm9tIGNvbW1vbi50b3JjaF91dGlscyBpbXBvcnQgZGl2X25vX25hbgoKCmNsYXNzIE5CZWF0c0ZDKHQubm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICAgIGlucHV0X3NpemU6IGludCwKICAgICAgICAgICAgICAgICBmY19sYXllcnM6IGludCwKICAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZTogaW50KToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLmZjX2xheWVycyA9IHQubm4uTW9kdWxlTGlzdChbdC5ubi5MaW5lYXIoaW5fZmVhdHVyZXM9aW5wdXRfc2l6ZSwgb3V0X2ZlYXR1cmVzPW91dHB1dF9zaXplKV0gKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Lm5uLkxpbmVhcihpbl9mZWF0dXJlcz1vdXRwdXRfc2l6ZSwgb3V0X2ZlYXR1cmVzPW91dHB1dF9zaXplKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZShmY19sYXllcnMgLSAxKV0pCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeDogdC5UZW5zb3IpIC0+IHQuVGVuc29yOgogICAgICAgIG91dHB1dCA9IHgKICAgICAgICBmb3IgbGF5ZXIgaW4gc2VsZi5mY19sYXllcnM6CiAgICAgICAgICAgIG91dHB1dCA9IHQucmVsdShsYXllcihvdXRwdXQpKQogICAgICAgIHJldHVybiBvdXRwdXQKCgpjbGFzcyBOQmVhdHNHZW5lcmljQmxvY2sodC5ubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAgaW5wdXRfc2l6ZTogaW50LAogICAgICAgICAgICAgICAgIGZjX2xheWVyczogaW50LAogICAgICAgICAgICAgICAgIGZjX2xheWVyc19zaXplOiBpbnQsCiAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemU6IGludCk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5mYyA9IE5CZWF0c0ZDKGlucHV0X3NpemU9aW5wdXRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzPWZjX2xheWVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemU9ZmNfbGF5ZXJzX3NpemUpCiAgICAgICAgc2VsZi5iYXNpcyA9IHQubm4uTGluZWFyKGluX2ZlYXR1cmVzPWZjX2xheWVyc19zaXplLCBvdXRfZmVhdHVyZXM9aW5wdXRfc2l6ZSArIG91dHB1dF9zaXplKQogICAgICAgIHNlbGYub3V0cHV0X3NpemUgPSBvdXRwdXRfc2l6ZQoKICAgICAgICBzZWxmLmJhY2tjYXN0X2R1bXAgPSBOb25lCiAgICAgICAgc2VsZi5mb3JlY2FzdF9kdW1wID0gTm9uZQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHQuVGVuc29yKSAtPiBUdXBsZVt0LlRlbnNvciwgdC5UZW5zb3JdOgogICAgICAgIGlucHV0X3NpemUgPSB4LnNoYXBlWzFdCiAgICAgICAgb3V0cHV0ID0gc2VsZi5iYXNpcyhzZWxmLmZjKHgpKQogICAgICAgIGJhY2tjYXN0ID0gb3V0cHV0WzosIDppbnB1dF9zaXplXQogICAgICAgIGZvcmVjYXN0ID0gb3V0cHV0WzosIGlucHV0X3NpemU6XQogICAgICAgIHNlbGYuYmFja2Nhc3RfZHVtcCA9IGJhY2tjYXN0CiAgICAgICAgc2VsZi5mb3JlY2FzdF9kdW1wID0gZm9yZWNhc3QKICAgICAgICByZXR1cm4gYmFja2Nhc3QsIGZvcmVjYXN0CgoKY2xhc3MgTkJlYXRzVHJlbmRCbG9jayh0Lm5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICBpbnB1dF9zaXplOiBpbnQsCiAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzOiBpbnQsCiAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzX3NpemU6IGludCwKICAgICAgICAgICAgICAgICBkZWdyZWVfb2ZfcG9seW5vbWlhbDogaW50LAogICAgICAgICAgICAgICAgIG91dHB1dF9zaXplOiBpbnQpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYucG9seW5vbWlhbF9zaXplID0gZGVncmVlX29mX3BvbHlub21pYWwgKyAxICAjIGRlZ3JlZSBvZiBwb2x5bm9taWFsIHdpdGggY29uc3RhbnQgdGVybQogICAgICAgIHNlbGYuZmMgPSBOQmVhdHNGQyhpbnB1dF9zaXplPWlucHV0X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjX2xheWVycz1mY19sYXllcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9zaXplPWZjX2xheWVyc19zaXplKQogICAgICAgIHNlbGYuYmFzaXMgPSB0Lm5uLkxpbmVhcihpbl9mZWF0dXJlcz1mY19sYXllcnNfc2l6ZSwgb3V0X2ZlYXR1cmVzPTIgKiBzZWxmLnBvbHlub21pYWxfc2l6ZSkKICAgICAgICBzZWxmLm91dHB1dF9zaXplID0gb3V0cHV0X3NpemUKICAgICAgICBzZWxmLmJhY2tjYXN0X3RpbWUgPSBucC5jb25jYXRlbmF0ZShbbnAucG93ZXIobnAuYXJhbmdlKGlucHV0X3NpemUsIGR0eXBlPW5wLmZsb2F0KSAvIGlucHV0X3NpemUsIGkpW05vbmUsIDpdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYucG9seW5vbWlhbF9zaXplKV0pCiAgICAgICAgc2VsZi5mb3JlY2FzdF90aW1lID0gbnAuY29uY2F0ZW5hdGUoW25wLnBvd2VyKG5wLmFyYW5nZShvdXRwdXRfc2l6ZSwgZHR5cGU9bnAuZmxvYXQpIC8gb3V0cHV0X3NpemUsIGkpW05vbmUsIDpdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYucG9seW5vbWlhbF9zaXplKV0pCiAgICAgICAgc2VsZi5iYWNrY2FzdF9kdW1wID0gTm9uZQogICAgICAgIHNlbGYuZm9yZWNhc3RfZHVtcCA9IE5vbmUKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4OiB0LlRlbnNvcik6CiAgICAgICAgdGhldGFzID0gc2VsZi5iYXNpcyhzZWxmLmZjKHgpKQogICAgICAgIGJhY2tjYXN0ID0gdC5laW5zdW0oJ2JwLHB0LT5idCcsIHRoZXRhc1s6LCBzZWxmLnBvbHlub21pYWxfc2l6ZTpdLCB4Lm5ldyhzZWxmLmJhY2tjYXN0X3RpbWUpKQogICAgICAgIGZvcmVjYXN0ID0gdC5laW5zdW0oJ2JwLHB0LT5idCcsIHRoZXRhc1s6LCA6c2VsZi5wb2x5bm9taWFsX3NpemVdLCB4Lm5ldyhzZWxmLmZvcmVjYXN0X3RpbWUpKQogICAgICAgIHNlbGYuYmFja2Nhc3RfZHVtcCA9IGJhY2tjYXN0CiAgICAgICAgc2VsZi5mb3JlY2FzdF9kdW1wID0gZm9yZWNhc3QKICAgICAgICByZXR1cm4gYmFja2Nhc3QsIGZvcmVjYXN0CgoKY2xhc3MgTkJlYXRzU2Vhc29uYWxpdHlCbG9jayh0Lm5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICBpbnB1dF9zaXplOiBpbnQsCiAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzOiBpbnQsCiAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzX3NpemU6IGludCwKICAgICAgICAgICAgICAgICBudW1fb2ZfaGFybW9uaWNzOiBpbnQsCiAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemU6IGludCk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5iYXNpc19wYXJhbWV0ZXJzID0gaW50KG5wLmNlaWwobnVtX29mX2hhcm1vbmljcyAvIDIgKiBvdXRwdXRfc2l6ZSkgLSAobnVtX29mX2hhcm1vbmljcyAtIDEpKQoKICAgICAgICBzZWxmLmZjID0gTkJlYXRzRkMoaW5wdXRfc2l6ZT1pbnB1dF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmY19sYXllcnM9ZmNfbGF5ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZT1mY19sYXllcnNfc2l6ZSkKICAgICAgICBzZWxmLmJhc2lzID0gdC5ubi5MaW5lYXIoaW5fZmVhdHVyZXM9ZmNfbGF5ZXJzX3NpemUsIG91dF9mZWF0dXJlcz00ICogc2VsZi5iYXNpc19wYXJhbWV0ZXJzKQoKICAgICAgICBmcmVxdWVuY3kgPSBucC5hcHBlbmQobnAuemVyb3MoMSwgZHR5cGU9bnAuZmxvYXQzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5wLmFyYW5nZShudW1fb2ZfaGFybW9uaWNzLCBudW1fb2ZfaGFybW9uaWNzIC8gMiAqIG91dHB1dF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHR5cGU9bnAuZmxvYXQzMikgLyBudW1fb2ZfaGFybW9uaWNzKVtOb25lLCA6XQogICAgICAgIGJhY2tjYXN0X2dyaWQgPSAtMiAqIG5wLnBpICogKG5wLmFyYW5nZShpbnB1dF9zaXplLCBkdHlwZT1ucC5mbG9hdDMyKVs6LCBOb25lXSAvIG91dHB1dF9zaXplKSAqIGZyZXF1ZW5jeQogICAgICAgIGZvcmVjYXN0X2dyaWQgPSAyICogbnAucGkgKiAobnAuYXJhbmdlKG91dHB1dF9zaXplLCBkdHlwZT1ucC5mbG9hdDMyKVs6LCBOb25lXSAvIG91dHB1dF9zaXplKSAqIGZyZXF1ZW5jeQogICAgICAgIHNlbGYuYmFja2Nhc3RfY29zX3RlbXBsYXRlID0gbnAudHJhbnNwb3NlKG5wLmNvcyhiYWNrY2FzdF9ncmlkKSkKICAgICAgICBzZWxmLmJhY2tjYXN0X3Npbl90ZW1wbGF0ZSA9IG5wLnRyYW5zcG9zZShucC5zaW4oYmFja2Nhc3RfZ3JpZCkpCiAgICAgICAgc2VsZi5mb3JlY2FzdF9jb3NfdGVtcGxhdGUgPSBucC50cmFuc3Bvc2UobnAuY29zKGZvcmVjYXN0X2dyaWQpKQogICAgICAgIHNlbGYuZm9yZWNhc3Rfc2luX3RlbXBsYXRlID0gbnAudHJhbnNwb3NlKG5wLnNpbihmb3JlY2FzdF9ncmlkKSkKCiAgICAgICAgc2VsZi5iYWNrY2FzdF9kdW1wID0gTm9uZQogICAgICAgIHNlbGYuZm9yZWNhc3RfZHVtcCA9IE5vbmUKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4OiB0LlRlbnNvcik6CiAgICAgICAgaGFybW9uaWNzX3dlaWdodHMgPSBzZWxmLmJhc2lzKHNlbGYuZmMoeCkpCgogICAgICAgIGJhY2tjYXN0X2hhcm1vbmljc19jb3MgPSB0LmVpbnN1bSgnYnAscHQtPmJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFybW9uaWNzX3dlaWdodHNbOiwgMiAqIHNlbGYuYmFzaXNfcGFyYW1ldGVyczozICogc2VsZi5iYXNpc19wYXJhbWV0ZXJzXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeC5uZXcoc2VsZi5iYWNrY2FzdF9jb3NfdGVtcGxhdGUpKQogICAgICAgIGJhY2tjYXN0X2hhcm1vbmljc19zaW4gPSB0LmVpbnN1bSgnYnAscHQtPmJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFybW9uaWNzX3dlaWdodHNbOiwgMyAqIHNlbGYuYmFzaXNfcGFyYW1ldGVyczpdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Lm5ldyhzZWxmLmJhY2tjYXN0X3Npbl90ZW1wbGF0ZSkpCiAgICAgICAgYmFja2Nhc3QgPSBiYWNrY2FzdF9oYXJtb25pY3Nfc2luICsgYmFja2Nhc3RfaGFybW9uaWNzX2NvcwoKICAgICAgICBmb3JlY2FzdF9oYXJtb25pY3NfY29zID0gdC5laW5zdW0oJ2JwLHB0LT5idCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcm1vbmljc193ZWlnaHRzWzosIDpzZWxmLmJhc2lzX3BhcmFtZXRlcnNdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Lm5ldyhzZWxmLmZvcmVjYXN0X2Nvc190ZW1wbGF0ZSkpCiAgICAgICAgZm9yZWNhc3RfaGFybW9uaWNzX3NpbiA9IHQuZWluc3VtKCdicCxwdC0+YnQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJtb25pY3Nfd2VpZ2h0c1s6LCBzZWxmLmJhc2lzX3BhcmFtZXRlcnM6MiAqIHNlbGYuYmFzaXNfcGFyYW1ldGVyc10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgubmV3KHNlbGYuZm9yZWNhc3Rfc2luX3RlbXBsYXRlKSkKICAgICAgICBmb3JlY2FzdCA9IGZvcmVjYXN0X2hhcm1vbmljc19zaW4gKyBmb3JlY2FzdF9oYXJtb25pY3NfY29zCgogICAgICAgIHNlbGYuYmFja2Nhc3RfZHVtcCA9IGJhY2tjYXN0CiAgICAgICAgc2VsZi5mb3JlY2FzdF9kdW1wID0gZm9yZWNhc3QKCiAgICAgICAgcmV0dXJuIGJhY2tjYXN0LCBmb3JlY2FzdAoKCmNsYXNzIE5CZWF0cyh0Lm5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhY2tzOiB0Lm5uLk1vZHVsZUxpc3QsIHNjYWxpbmc9Tm9uZSwgbW9kZTogc3RyID0gJ2RyZXNzJyk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5zdGFja3MgPSBzdGFja3MKICAgICAgICBzZWxmLm1vZGUgPSBtb2RlCiAgICAgICAgc2VsZi5zY2FsaW5nID0gc2NhbGluZwoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHQuVGVuc29yLCBpbnB1dF9tYXNrOiB0LlRlbnNvcikgLT4gdC5UZW5zb3I6CiAgICAgICAgc2NhbGVfY29uc3QgPSBOb25lCiAgICAgICAgaWYgc2VsZi5zY2FsaW5nIGlzIG5vdCBOb25lOgogICAgICAgICAgICBpZiBzZWxmLnNjYWxpbmcgPT0gJ21heCc6CiAgICAgICAgICAgICAgICBzY2FsZV9jb25zdCA9IHQubWF4KHgsIGRpbT0xKS52YWx1ZXNbOiwgTm9uZV0KICAgICAgICAgICAgZWxpZiBzZWxmLnNjYWxpbmcgPT0gJ2xhc3QnOgogICAgICAgICAgICAgICAgc2NhbGVfY29uc3QgPSB4WzosIC0xOl0KICAgICAgICAgICAgeCA9IGRpdl9ub19uYW4oeCwgc2NhbGVfY29uc3QpCgogICAgICAgIHJlc2lkdWFscyA9IHguZmxpcChkaW1zPSgxLCkpCiAgICAgICAgaW5wdXRfbWFzayA9IGlucHV0X21hc2suZmxpcChkaW1zPSgxLCkpCiAgICAgICAgZm9yZWNhc3QgPSB4WzosIC0xOl0KCiAgICAgICAgb3JpZ2luYWxfaW5wdXQgPSByZXNpZHVhbHMKICAgICAgICBmb3IgaSwgc3RhY2sgaW4gZW51bWVyYXRlKHNlbGYuc3RhY2tzKToKICAgICAgICAgICAgaWYgc2VsZi5tb2RlID09ICdkcmVzcyc6CiAgICAgICAgICAgICAgICBiYWNrY2FzdCwgc3RhY2tfZm9yZWNhc3QgPSBzdGFjayhyZXNpZHVhbHMpCiAgICAgICAgICAgICAgICByZXNpZHVhbHMgPSAocmVzaWR1YWxzIC0gYmFja2Nhc3QpICogaW5wdXRfbWFzawogICAgICAgICAgICAgICAgZm9yZWNhc3QgPSBmb3JlY2FzdCArIHN0YWNrX2ZvcmVjYXN0CiAgICAgICAgICAgIGVsaWYgc2VsZi5tb2RlID09ICdwYXJhbGxlbCc6CiAgICAgICAgICAgICAgICBiYWNrY2FzdCwgc3RhY2tfZm9yZWNhc3QgPSBzdGFjayhyZXNpZHVhbHMpCiAgICAgICAgICAgICAgICBmb3JlY2FzdCA9IGZvcmVjYXN0ICsgc3RhY2tfZm9yZWNhc3QKICAgICAgICAgICAgZWxpZiBzZWxmLm1vZGUgPT0gJ2xhc3RfZm9yd2FyZCc6CiAgICAgICAgICAgICAgICBiYWNrY2FzdCwgc3RhY2tfZm9yZWNhc3QgPSBzdGFjayhyZXNpZHVhbHMpCiAgICAgICAgICAgICAgICByZXNpZHVhbHMgPSAocmVzaWR1YWxzIC0gYmFja2Nhc3QpICogaW5wdXRfbWFzawogICAgICAgICAgICAgICAgZm9yZWNhc3QgPSBmb3JlY2FzdCArIHN0YWNrX2ZvcmVjYXN0CiAgICAgICAgICAgIGVsaWYgc2VsZi5tb2RlID09ICdub19yZXNpZHVhbCc6CiAgICAgICAgICAgICAgICBiYWNrY2FzdCwgc3RhY2tfZm9yZWNhc3QgPSBzdGFjayhyZXNpZHVhbHMpCiAgICAgICAgICAgICAgICByZXNpZHVhbHMgPSBiYWNrY2FzdAogICAgICAgICAgICAgICAgZm9yZWNhc3QgPSBmb3JlY2FzdCArIHN0YWNrX2ZvcmVjYXN0CiAgICAgICAgICAgIGVsaWYgc2VsZi5tb2RlID09ICdub19yZXNpZHVhbF9sYXN0X2ZvcndhcmQnOgogICAgICAgICAgICAgICAgYmFja2Nhc3QsIHN0YWNrX2ZvcmVjYXN0ID0gc3RhY2socmVzaWR1YWxzKQogICAgICAgICAgICAgICAgcmVzaWR1YWxzID0gYmFja2Nhc3QKICAgICAgICAgICAgICAgIGZvcmVjYXN0ID0gZm9yZWNhc3QgKyBzdGFja19mb3JlY2FzdAogICAgICAgICAgICBlbGlmIHNlbGYubW9kZSA9PSAncmVzaWR1YWxfaW5wdXQnOgogICAgICAgICAgICAgICAgYmFja2Nhc3QsIHN0YWNrX2ZvcmVjYXN0ID0gc3RhY2socmVzaWR1YWxzKQogICAgICAgICAgICAgICAgcmVzaWR1YWxzID0gKG9yaWdpbmFsX2lucHV0IC0gYmFja2Nhc3QpICogaW5wdXRfbWFzawogICAgICAgICAgICAgICAgZm9yZWNhc3QgPSBmb3JlY2FzdCArIHN0YWNrX2ZvcmVjYXN0CiAgICAgICAgICAgIGVsaWYgc2VsZi5tb2RlID09ICdyZXNpZHVhbF9pbnB1dF9sYXN0X2ZvcndhcmQnOgogICAgICAgICAgICAgICAgYmFja2Nhc3QsIHN0YWNrX2ZvcmVjYXN0ID0gc3RhY2socmVzaWR1YWxzKQogICAgICAgICAgICAgICAgcmVzaWR1YWxzID0gKG9yaWdpbmFsX2lucHV0IC0gYmFja2Nhc3QpICogaW5wdXRfbWFzawogICAgICAgICAgICAgICAgZm9yZWNhc3QgPSBmb3JlY2FzdCArIHN0YWNrX2ZvcmVjYXN0CgogICAgICAgIGlmIHNlbGYuc2NhbGluZyBpcyBub3QgTm9uZToKICAgICAgICAgICAgZm9yZWNhc3QgPSBmb3JlY2FzdCAqIHNjYWxlX2NvbnN0CgogICAgICAgIHJldHVybiBmb3JlY2FzdAoKCmRlZiBuYmVhdHNfZ2VuZXJpYyhpbnB1dF9zaXplOiBpbnQsIG91dHB1dF9zaXplOiBpbnQsCiAgICAgICAgICAgICAgICAgICBibG9ja3M6IGludCA9IDEsIHN0YWNrczogaW50ID0gMzAsCiAgICAgICAgICAgICAgICAgICBmY19sYXllcnM6IGludCA9IDQsIGZjX2xheWVyc19zaXplOiBpbnQgPSA1MTIsCiAgICAgICAgICAgICAgICAgICBzY2FsaW5nOiBzdHIgPSBOb25lLCBtb2RlOiBzdHIgPSAnZHJlc3MnKToKICAgIG1vZHVsZXMgPSBbW05CZWF0c0dlbmVyaWNCbG9jayhpbnB1dF9zaXplPWlucHV0X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzPWZjX2xheWVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY19sYXllcnNfc2l6ZT1mY19sYXllcnNfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZT1vdXRwdXRfc2l6ZSldICogYmxvY2tzIGZvciBfIGluIHJhbmdlKHN0YWNrcyldCgogICAgcmV0dXJuIE5CZWF0cyh0Lm5uLk1vZHVsZUxpc3QobGlzdChjaGFpbi5mcm9tX2l0ZXJhYmxlKG1vZHVsZXMpKSksCiAgICAgICAgICAgICAgICAgIHNjYWxpbmc9c2NhbGluZywKICAgICAgICAgICAgICAgICAgbW9kZT1tb2RlKQoKCmRlZiBuYmVhdHNfaW50ZXJwcmV0YWJsZShpbnB1dF9zaXplOiBpbnQsIG91dHB1dF9zaXplOiBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICB0cmVuZF9ibG9ja3M6IGludCA9IDMsCiAgICAgICAgICAgICAgICAgICAgICAgICB0cmVuZF9mY19sYXllcnM6IGludCA9IDQsCiAgICAgICAgICAgICAgICAgICAgICAgICB0cmVuZF9mY19sYXllcnNfc2l6ZTogaW50ID0gMjU2LAogICAgICAgICAgICAgICAgICAgICAgICAgZGVncmVlX29mX3BvbHlub21pYWw6IGludCA9IDMsCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWFzb25hbGl0eV9ibG9ja3M6IGludCA9IDMsCjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogc3RyID0gJ2RyZXNzJyk6CiAgICB0cmVuZF9ibG9jayA9IE5CZWF0c1RyZW5kQmxvY2soaW5wdXRfc2l6ZT1pbnB1dF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjX2xheWVycz10cmVuZF9mY19sYXllcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzX3NpemU9dHJlbmRfZmNfbGF5ZXJzX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVncmVlX29mX3BvbHlub21pYWw9ZGVncmVlX29mX3BvbHlub21pYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemU9b3V0cHV0X3NpemUpCiAgICBzZWFzb25hbGl0eV9ibG9jayA9IE5CZWF0c1NlYXNvbmFsaXR5QmxvY2soaW5wdXRfc2l6ZT1pbnB1dF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjX2xheWVycz1zZWFzb25hbGl0eV9mY19sYXllcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzX3NpemU9c2Vhc29uYWxpdHlfZmNfbGF5ZXJzX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX29mX2hhcm1vbmljcz1udW1fb2ZfaGFybW9uaWNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9zaXplPW91dHB1dF9zaXplKQogICAgcmV0dXJuIE5CZWF0cyh0Lm5uLk1vZHVsZUxpc3QoCiAgICAgICAgW3RyZW5kX2Jsb2NrIGZvciBfIGluIHJhbmdlKHRyZW5kX2Jsb2NrcyldICsgW3NlYXNvbmFsaXR5X2Jsb2NrIGZvciBfIGluIHJhbmdlKHNlYXNvbmFsaXR5X2Jsb2NrcyldKSwKICAgICAgICBzY2FsaW5nPXNjYWxpbmcsIG1vZGU9bW9kZSkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXNvbmFsaXR5X2ZjX2xheWVyczogaW50ID0gNCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXNvbmFsaXR5X2ZjX2xheWVyc19zaXplOiBpbnQgPSAyMDQ4LAogICAgICAgICAgICAgICAgICAgICAgICAgbnVtX29mX2hhcm1vbmljczogaW50ID0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxpbmc6IHN0ciA9IE5vbmUsCjx8ZmltX2VuZHw+"]
["419b96994074fc3c8b94cf93269ac5a2bc2bd75b-2","419b96994074fc3c8b94cf93269ac5a2bc2bd75b","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IFR1cGxlCgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRvcmNoIGFzIHQKZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluCgpmcm9tIGNvbW1vbi50b3JjaF91dGlscyBpbXBvcnQgZGl2X25vX25hbgoKCmNsYXNzIE5CZWF0c0ZDKHQubm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICAgIGlucHV0X3NpemU6IGludCwKICAgICAgICAgICAgICAgICBmY19sYXllcnM6IGludCwKICAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZTogaW50KToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLmZjX2xheWVycyA9IHQubm4uTW9kdWxlTGlzdChbdC5ubi5MaW5lYXIoaW5fZmVhdHVyZXM9aW5wdXRfc2l6ZSwgb3V0X2ZlYXR1cmVzPW91dHB1dF9zaXplKV0gKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Lm5uLkxpbmVhcihpbl9mZWF0dXJlcz1vdXRwdXRfc2l6ZSwgb3V0X2ZlYXR1cmVzPW91dHB1dF9zaXplKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZShmY19sYXllcnMgLSAxKV0pCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeDogdC5UZW5zb3IpIC0+IHQuVGVuc29yOgogICAgICAgIG91dHB1dCA9IHgKICAgICAgICBmb3IgbGF5ZXIgaW4gc2VsZi5mY19sYXllcnM6CiAgICAgICAgICAgIG91dHB1dCA9IHQucmVsdShsYXllcihvdXRwdXQpKQogICAgICAgIHJldHVybiBvdXRwdXQKCgpjbGFzcyBOQmVhdHNHZW5lcmljQmxvY2sodC5ubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAgaW5wdXRfc2l6ZTogaW50LAogICAgICAgICAgICAgICAgIGZjX2xheWVyczogaW50LAogICAgICAgICAgICAgICAgIGZjX2xheWVyc19zaXplOiBpbnQsCiAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemU6IGludCk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5mYyA9IE5CZWF0c0ZDKGlucHV0X3NpemU9aW5wdXRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzPWZjX2xheWVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemU9ZmNfbGF5ZXJzX3NpemUpCiAgICAgICAgc2VsZi5iYXNpcyA9IHQubm4uTGluZWFyKGluX2ZlYXR1cmVzPWZjX2xheWVyc19zaXplLCBvdXRfZmVhdHVyZXM9aW5wdXRfc2l6ZSArIG91dHB1dF9zaXplKQogICAgICAgIHNlbGYub3V0cHV0X3NpemUgPSBvdXRwdXRfc2l6ZQoKICAgICAgICBzZWxmLmJhY2tjYXN0X2R1bXAgPSBOb25lCiAgICAgICAgc2VsZi5mb3JlY2FzdF9kdW1wID0gTm9uZQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHQuVGVuc29yKSAtPiBUdXBsZVt0LlRlbnNvciwgdC5UZW5zb3JdOgogICAgICAgIGlucHV0X3NpemUgPSB4LnNoYXBlWzFdCiAgICAgICAgb3V0cHV0ID0gc2VsZi5iYXNpcyhzZWxmLmZjKHgpKQogICAgICAgIGJhY2tjYXN0ID0gb3V0cHV0WzosIDppbnB1dF9zaXplXQogICAgICAgIGZvcmVjYXN0ID0gb3V0cHV0WzosIGlucHV0X3NpemU6XQogICAgICAgIHNlbGYuYmFja2Nhc3RfZHVtcCA9IGJhY2tjYXN0CiAgICAgICAgc2VsZi5mb3JlY2FzdF9kdW1wID0gZm9yZWNhc3QKICAgICAgICByZXR1cm4gYmFja2Nhc3QsIGZvcmVjYXN0CgoKY2xhc3MgTkJlYXRzVHJlbmRCbG9jayh0Lm5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICBpbnB1dF9zaXplOiBpbnQsCiAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzOiBpbnQsCiAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzX3NpemU6IGludCwKICAgICAgICAgICAgICAgICBkZWdyZWVfb2ZfcG9seW5vbWlhbDogaW50LAogICAgICAgICAgICAgICAgIG91dHB1dF9zaXplOiBpbnQpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYucG9seW5vbWlhbF9zaXplID0gZGVncmVlX29mX3BvbHlub21pYWwgKyAxICAjIGRlZ3JlZSBvZiBwb2x5bm9taWFsIHdpdGggY29uc3RhbnQgdGVybQogICAgICAgIHNlbGYuZmMgPSBOQmVhdHNGQyhpbnB1dF9zaXplPWlucHV0X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjX2xheWVycz1mY19sYXllcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9zaXplPWZjX2xheWVyc19zaXplKQogICAgICAgIHNlbGYuYmFzaXMgPSB0Lm5uLkxpbmVhcihpbl9mZWF0dXJlcz1mY19sYXllcnNfc2l6ZSwgb3V0X2ZlYXR1cmVzPTIgKiBzZWxmLnBvbHlub21pYWxfc2l6ZSkKICAgICAgICBzZWxmLm91dHB1dF9zaXplID0gb3V0cHV0X3NpemUKICAgICAgICBzZWxmLmJhY2tjYXN0X3RpbWUgPSBucC5jb25jYXRlbmF0ZShbbnAucG93ZXIobnAuYXJhbmdlKGlucHV0X3NpemUsIGR0eXBlPW5wLmZsb2F0KSAvIGlucHV0X3NpemUsIGkpW05vbmUsIDpdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYucG9seW5vbWlhbF9zaXplKV0pCiAgICAgICAgc2VsZi5mb3JlY2FzdF90aW1lID0gbnAuY29uY2F0ZW5hdGUoW25wLnBvd2VyKG5wLmFyYW5nZShvdXRwdXRfc2l6ZSwgZHR5cGU9bnAuZmxvYXQpIC8gb3V0cHV0X3NpemUsIGkpW05vbmUsIDpdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYucG9seW5vbWlhbF9zaXplKV0pCiAgICAgICAgc2VsZi5iYWNrY2FzdF9kdW1wID0gTm9uZQogICAgICAgIHNlbGYuZm9yZWNhc3RfZHVtcCA9IE5vbmUKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4OiB0LlRlbnNvcik6CiAgICAgICAgdGhldGFzID0gc2VsZi5iYXNpcyhzZWxmLmZjKHgpKQogICAgICAgIGJhY2tjYXN0ID0gdC5laW5zdW0oJ2JwLHB0LT5idCcsIHRoZXRhc1s6LCBzZWxmLnBvbHlub21pYWxfc2l6ZTpdLCB4Lm5ldyhzZWxmLmJhY2tjYXN0X3RpbWUpKQogICAgICAgIGZvcmVjYXN0ID0gdC5laW5zdW0oJ2JwLHB0LT5idCcsIHRoZXRhc1s6LCA6c2VsZi5wb2x5bm9taWFsX3NpemVdLCB4Lm5ldyhzZWxmLmZvcmVjYXN0X3RpbWUpKQogICAgICAgIHNlbGYuYmFja2Nhc3RfZHVtcCA9IGJhY2tjYXN0CiAgICAgICAgc2VsZi5mb3JlY2FzdF9kdW1wID0gZm9yZWNhc3QKICAgICAgICByZXR1cm4gYmFja2Nhc3QsIGZvcmVjYXN0CgoKY2xhc3MgTkJlYXRzU2Vhc29uYWxpdHlCbG9jayh0Lm5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICBpbnB1dF9zaXplOiBpbnQsCiAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzOiBpbnQsCiAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzX3NpemU6IGludCwKICAgICAgICAgICAgICAgICBudW1fb2ZfaGFybW9uaWNzOiBpbnQsCiAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemU6IGludCk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5iYXNpc19wYXJhbWV0ZXJzID0gaW50KG5wLmNlaWwobnVtX29mX2hhcm1vbmljcyAvIDIgKiBvdXRwdXRfc2l6ZSkgLSAobnVtX29mX2hhcm1vbmljcyAtIDEpKQoKICAgICAgICBzZWxmLmZjID0gTkJlYXRzRkMoaW5wdXRfc2l6ZT1pbnB1dF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmY19sYXllcnM9ZmNfbGF5ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZT1mY19sYXllcnNfc2l6ZSkKICAgICAgICBzZWxmLmJhc2lzID0gdC5ubi5MaW5lYXIoaW5fZmVhdHVyZXM9ZmNfbGF5ZXJzX3NpemUsIG91dF9mZWF0dXJlcz00ICogc2VsZi5iYXNpc19wYXJhbWV0ZXJzKQoKICAgICAgICBmcmVxdWVuY3kgPSBucC5hcHBlbmQobnAuemVyb3MoMSwgZHR5cGU9bnAuZmxvYXQzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5wLmFyYW5nZShudW1fb2ZfaGFybW9uaWNzLCBudW1fb2ZfaGFybW9uaWNzIC8gMiAqIG91dHB1dF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHR5cGU9bnAuZmxvYXQzMikgLyBudW1fb2ZfaGFybW9uaWNzKVtOb25lLCA6XQogICAgICAgIGJhY2tjYXN0X2dyaWQgPSAtMiAqIG5wLnBpICogKG5wLmFyYW5nZShpbnB1dF9zaXplLCBkdHlwZT1ucC5mbG9hdDMyKVs6LCBOb25lXSAvIG91dHB1dF9zaXplKSAqIGZyZXF1ZW5jeQogICAgICAgIGZvcmVjYXN0X2dyaWQgPSAyICogbnAucGkgKiAobnAuYXJhbmdlKG91dHB1dF9zaXplLCBkdHlwZT1ucC5mbG9hdDMyKVs6LCBOb25lXSAvIG91dHB1dF9zaXplKSAqIGZyZXF1ZW5jeQogICAgICAgIHNlbGYuYmFja2Nhc3RfY29zX3RlbXBsYXRlID0gbnAudHJhbnNwb3NlKG5wLmNvcyhiYWNrY2FzdF9ncmlkKSkKICAgICAgICBzZWxmLmJhY2tjYXN0X3Npbl90ZW1wbGF0ZSA9IG5wLnRyYW5zcG9zZShucC5zaW4oYmFja2Nhc3RfZ3JpZCkpCiAgICAgICAgc2VsZi5mb3JlY2FzdF9jb3NfdGVtcGxhdGUgPSBucC50cmFuc3Bvc2UobnAuY29zKGZvcmVjYXN0X2dyaWQpKQogICAgICAgIHNlbGYuZm9yZWNhc3Rfc2luX3RlbXBsYXRlID0gbnAudHJhbnNwb3NlKG5wLnNpbihmb3JlY2FzdF9ncmlkKSkKCiAgICAgICAgc2VsZi5iYWNrY2FzdF9kdW1wID0gTm9uZQogICAgICAgIHNlbGYuZm9yZWNhc3RfZHVtcCA9IE5vbmUKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4OiB0LlRlbnNvcik6CiAgICAgICAgaGFybW9uaWNzX3dlaWdodHMgPSBzZWxmLmJhc2lzKHNlbGYuZmMoeCkpCgogICAgICAgIGJhY2tjYXN0X2hhcm1vbmljc19jb3MgPSB0LmVpbnN1bSgnYnAscHQtPmJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFybW9uaWNzX3dlaWdodHNbOiwgMiAqIHNlbGYuYmFzaXNfcGFyYW1ldGVyczozICogc2VsZi5iYXNpc19wYXJhbWV0ZXJzXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeC5uZXcoc2VsZi5iYWNrY2FzdF9jb3NfdGVtcGxhdGUpKQogICAgICAgIGJhY2tjYXN0X2hhcm1vbmljc19zaW4gPSB0LmVpbnN1bSgnYnAscHQtPmJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFybW9uaWNzX3dlaWdodHNbOiwgMyAqIHNlbGYuYmFzaXNfcGFyYW1ldGVyczpdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Lm5ldyhzZWxmLmJhY2tjYXN0X3Npbl90ZW1wbGF0ZSkpCiAgICAgICAgYmFja2Nhc3QgPSBiYWNrY2FzdF9oYXJtb25pY3Nfc2luICsgYmFja2Nhc3RfaGFybW9uaWNzX2NvcwoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGZvcmVjYXN0X2hhcm1vbmljc19jb3MgPSB0LmVpbnN1bSgnYnAscHQtPmJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFybW9uaWNzX3dlaWdodHNbOiwgOnNlbGYuYmFzaXNfcGFyYW1ldGVyc10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgubmV3KHNlbGYuZm9yZWNhc3RfY29zX3RlbXBsYXRlKSkKICAgICAgICBmb3JlY2FzdF9oYXJtb25pY3Nfc2luID0gdC5laW5zdW0oJ2JwLHB0LT5idCcsCjx8ZmltX2VuZHw+"]
["419b96994074fc3c8b94cf93269ac5a2bc2bd75b-3","419b96994074fc3c8b94cf93269ac5a2bc2bd75b","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IFR1cGxlCgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRvcmNoIGFzIHQKZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluCgpmcm9tIGNvbW1vbi50b3JjaF91dGlscyBpbXBvcnQgZGl2X25vX25hbgoKCmNsYXNzIE5CZWF0c0ZDKHQubm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICAgIGlucHV0X3NpemU6IGludCwKICAgICAgICAgICAgICAgICBmY19sYXllcnM6IGludCwKICAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZTogaW50KToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLmZjX2xheWVycyA9IHQubm4uTW9kdWxlTGlzdChbdC5ubi5MaW5lYXIoaW5fZmVhdHVyZXM9aW5wdXRfc2l6ZSwgb3V0X2ZlYXR1cmVzPW91dHB1dF9zaXplKV0gKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Lm5uLkxpbmVhcihpbl9mZWF0dXJlcz1vdXRwdXRfc2l6ZSwgb3V0X2ZlYXR1cmVzPW91dHB1dF9zaXplKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZShmY19sYXllcnMgLSAxKV0pCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeDogdC5UZW5zb3IpIC0+IHQuVGVuc29yOgogICAgICAgIG91dHB1dCA9IHgKICAgICAgICBmb3IgbGF5ZXIgaW4gc2VsZi5mY19sYXllcnM6CiAgICAgICAgICAgIG91dHB1dCA9IHQucmVsdShsYXllcihvdXRwdXQpKQogICAgICAgIHJldHVybiBvdXRwdXQKCgpjbGFzcyBOQmVhdHNHZW5lcmljQmxvY2sodC5ubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAgaW5wdXRfc2l6ZTogaW50LAogICAgICAgICAgICAgICAgIGZjX2xheWVyczogaW50LAogICAgICAgICAgICAgICAgIGZjX2xheWVyc19zaXplOiBpbnQsCiAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemU6IGludCk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5mYyA9IE5CZWF0c0ZDKGlucHV0X3NpemU9aW5wdXRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzPWZjX2xheWVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemU9ZmNfbGF5ZXJzX3NpemUpCiAgICAgICAgc2VsZi5iYXNpcyA9IHQubm4uTGluZWFyKGluX2ZlYXR1cmVzPWZjX2xheWVyc19zaXplLCBvdXRfZmVhdHVyZXM9aW5wdXRfc2l6ZSArIG91dHB1dF9zaXplKQogICAgICAgIHNlbGYub3V0cHV0X3NpemUgPSBvdXRwdXRfc2l6ZQoKICAgICAgICBzZWxmLmJhY2tjYXN0X2R1bXAgPSBOb25lCiAgICAgICAgc2VsZi5mb3JlY2FzdF9kdW1wID0gTm9uZQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHQuVGVuc29yKSAtPiBUdXBsZVt0LlRlbnNvciwgdC5UZW5zb3JdOgogICAgICAgIGlucHV0X3NpemUgPSB4LnNoYXBlWzFdCiAgICAgICAgb3V0cHV0ID0gc2VsZi5iYXNpcyhzZWxmLmZjKHgpKQogICAgICAgIGJhY2tjYXN0ID0gb3V0cHV0WzosIDppbnB1dF9zaXplXQogICAgICAgIGZvcmVjYXN0ID0gb3V0cHV0WzosIGlucHV0X3NpemU6XQogICAgICAgIHNlbGYuYmFja2Nhc3RfZHVtcCA9IGJhY2tjYXN0CiAgICAgICAgc2VsZi5mb3JlY2FzdF9kdW1wID0gZm9yZWNhc3QKICAgICAgICByZXR1cm4gYmFja2Nhc3QsIGZvcmVjYXN0CgoKY2xhc3MgTkJlYXRzVHJlbmRCbG9jayh0Lm5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICBpbnB1dF9zaXplOiBpbnQsCiAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzOiBpbnQsCiAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzX3NpemU6IGludCwKICAgICAgICAgICAgICAgICBkZWdyZWVfb2ZfcG9seW5vbWlhbDogaW50LAogICAgICAgICAgICAgICAgIG91dHB1dF9zaXplOiBpbnQpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYucG9seW5vbWlhbF9zaXplID0gZGVncmVlX29mX3BvbHlub21pYWwgKyAxICAjIGRlZ3JlZSBvZiBwb2x5bm9taWFsIHdpdGggY29uc3RhbnQgdGVybQogICAgICAgIHNlbGYuZmMgPSBOQmVhdHNGQyhpbnB1dF9zaXplPWlucHV0X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjX2xheWVycz1mY19sYXllcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9zaXplPWZjX2xheWVyc19zaXplKQogICAgICAgIHNlbGYuYmFzaXMgPSB0Lm5uLkxpbmVhcihpbl9mZWF0dXJlcz1mY19sYXllcnNfc2l6ZSwgb3V0X2ZlYXR1cmVzPTIgKiBzZWxmLnBvbHlub21pYWxfc2l6ZSkKICAgICAgICBzZWxmLm91dHB1dF9zaXplID0gb3V0cHV0X3NpemUKICAgICAgICBzZWxmLmJhY2tjYXN0X3RpbWUgPSBucC5jb25jYXRlbmF0ZShbbnAucG93ZXIobnAuYXJhbmdlKGlucHV0X3NpemUsIGR0eXBlPW5wLmZsb2F0KSAvIGlucHV0X3NpemUsIGkpW05vbmUsIDpdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYucG9seW5vbWlhbF9zaXplKV0pCiAgICAgICAgc2VsZi5mb3JlY2FzdF90aW1lID0gbnAuY29uY2F0ZW5hdGUoW25wLnBvd2VyKG5wLmFyYW5nZShvdXRwdXRfc2l6ZSwgZHR5cGU9bnAuZmxvYXQpIC8gb3V0cHV0X3NpemUsIGkpW05vbmUsIDpdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYucG9seW5vbWlhbF9zaXplKV0pCiAgICAgICAgc2VsZi5iYWNrY2FzdF9kdW1wID0gTm9uZQogICAgICAgIHNlbGYuZm9yZWNhc3RfZHVtcCA9IE5vbmUKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4OiB0LlRlbnNvcik6CiAgICAgICAgdGhldGFzID0gc2VsZi5iYXNpcyhzZWxmLmZjKHgpKQogICAgICAgIGJhY2tjYXN0ID0gdC5laW5zdW0oJ2JwLHB0LT5idCcsIHRoZXRhc1s6LCBzZWxmLnBvbHlub21pYWxfc2l6ZTpdLCB4Lm5ldyhzZWxmLmJhY2tjYXN0X3RpbWUpKQogICAgICAgIGZvcmVjYXN0ID0gdC5laW5zdW0oJ2JwLHB0LT5idCcsIHRoZXRhc1s6LCA6c2VsZi5wb2x5bm9taWFsX3NpemVdLCB4Lm5ldyhzZWxmLmZvcmVjYXN0X3RpbWUpKQogICAgICAgIHNlbGYuYmFja2Nhc3RfZHVtcCA9IGJhY2tjYXN0CiAgICAgICAgc2VsZi5mb3JlY2FzdF9kdW1wID0gZm9yZWNhc3QKICAgICAgICByZXR1cm4gYmFja2Nhc3QsIGZvcmVjYXN0CgoKY2xhc3MgTkJlYXRzU2Vhc29uYWxpdHlCbG9jayh0Lm5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICBpbnB1dF9zaXplOiBpbnQsCiAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzOiBpbnQsCiAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzX3NpemU6IGludCwKICAgICAgICAgICAgICAgICBudW1fb2ZfaGFybW9uaWNzOiBpbnQsCiAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemU6IGludCk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5iYXNpc19wYXJhbWV0ZXJzID0gaW50KG5wLmNlaWwobnVtX29mX2hhcm1vbmljcyAvIDIgKiBvdXRwdXRfc2l6ZSkgLSAobnVtX29mX2hhcm1vbmljcyAtIDEpKQoKICAgICAgICBzZWxmLmZjID0gTkJlYXRzRkMoaW5wdXRfc2l6ZT1pbnB1dF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmY19sYXllcnM9ZmNfbGF5ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZT1mY19sYXllcnNfc2l6ZSkKICAgICAgICBzZWxmLmJhc2lzID0gdC5ubi5MaW5lYXIoaW5fZmVhdHVyZXM9ZmNfbGF5ZXJzX3NpemUsIG91dF9mZWF0dXJlcz00ICogc2VsZi5iYXNpc19wYXJhbWV0ZXJzKQoKICAgICAgICBmcmVxdWVuY3kgPSBucC5hcHBlbmQobnAuemVyb3MoMSwgZHR5cGU9bnAuZmxvYXQzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5wLmFyYW5nZShudW1fb2ZfaGFybW9uaWNzLCBudW1fb2ZfaGFybW9uaWNzIC8gMiAqIG91dHB1dF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHR5cGU9bnAuZmxvYXQzMikgLyBudW1fb2ZfaGFybW9uaWNzKVtOb25lLCA6XQogICAgICAgIGJhY2tjYXN0X2dyaWQgPSAtMiAqIG5wLnBpICogKG5wLmFyYW5nZShpbnB1dF9zaXplLCBkdHlwZT1ucC5mbG9hdDMyKVs6LCBOb25lXSAvIG91dHB1dF9zaXplKSAqIGZyZXF1ZW5jeQogICAgICAgIGZvcmVjYXN0X2dyaWQgPSAyICogbnAucGkgKiAobnAuYXJhbmdlKG91dHB1dF9zaXplLCBkdHlwZT1ucC5mbG9hdDMyKVs6LCBOb25lXSAvIG91dHB1dF9zaXplKSAqIGZyZXF1ZW5jeQogICAgICAgIHNlbGYuYmFja2Nhc3RfY29zX3RlbXBsYXRlID0gbnAudHJhbnNwb3NlKG5wLmNvcyhiYWNrY2FzdF9ncmlkKSkKICAgICAgICBzZWxmLmJhY2tjYXN0X3Npbl90ZW1wbGF0ZSA9IG5wLnRyYW5zcG9zZShucC5zaW4oYmFja2Nhc3RfZ3JpZCkpCiAgICAgICAgc2VsZi5mb3JlY2FzdF9jb3NfdGVtcGxhdGUgPSBucC50cmFuc3Bvc2UobnAuY29zKGZvcmVjYXN0X2dyaWQpKQogICAgICAgIHNlbGYuZm9yZWNhc3Rfc2luX3RlbXBsYXRlID0gbnAudHJhbnNwb3NlKG5wLnNpbihmb3JlY2FzdF9ncmlkKSkKCiAgICAgICAgc2VsZi5iYWNrY2FzdF9kdW1wID0gTm9uZQogICAgICAgIHNlbGYuZm9yZWNhc3RfZHVtcCA9IE5vbmUKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4OiB0LlRlbnNvcik6CiAgICAgICAgaGFybW9uaWNzX3dlaWdodHMgPSBzZWxmLmJhc2lzKHNlbGYuZmMoeCkpCgogICAgICAgIGJhY2tjYXN0X2hhcm1vbmljc19jb3MgPSB0LmVpbnN1bSgnYnAscHQtPmJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFybW9uaWNzX3dlaWdodHNbOiwgMiAqIHNlbGYuYmFzaXNfcGFyYW1ldGVyczozICogc2VsZi5iYXNpc19wYXJhbWV0ZXJzXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeC5uZXcoc2VsZi5iYWNrY2FzdF9jb3NfdGVtcGxhdGUpKQogICAgICAgIGJhY2tjYXN0X2hhcm1vbmljc19zaW4gPSB0LmVpbnN1bSgnYnAscHQtPmJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFybW9uaWNzX3dlaWdodHNbOiwgMyAqIHNlbGYuYmFzaXNfcGFyYW1ldGVyczpdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Lm5ldyhzZWxmLmJhY2tjYXN0X3Npbl90ZW1wbGF0ZSkpCiAgICAgICAgYmFja2Nhc3QgPSBiYWNrY2FzdF9oYXJtb25pY3Nfc2luICsgYmFja2Nhc3RfaGFybW9uaWNzX2NvcwoKICAgICAgICBmb3JlY2FzdF9oYXJtb25pY3NfY29zID0gdC5laW5zdW0oJ2JwLHB0LT5idCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcm1vbmljc193ZWlnaHRzWzosIDpzZWxmLmJhc2lzX3BhcmFtZXRlcnNdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Lm5ldyhzZWxmLmZvcmVjYXN0X2Nvc190ZW1wbGF0ZSkpCiAgICAgICAgZm9yZWNhc3RfaGFybW9uaWNzX3NpbiA9IHQuZWluc3VtKCdicCxwdC0+YnQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJtb25pY3Nfd2VpZ2h0c1s6LCBzZWxmLmJhc2lzX3BhcmFtZXRlcnM6MiAqIHNlbGYuYmFzaXNfcGFyYW1ldGVyc10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgubmV3KHNlbGYuZm9yZWNhc3Rfc2luX3RlbXBsYXRlKSkKICAgICAgICBmb3JlY2FzdCA9IGZvcmVjYXN0X2hhcm1vbmljc19zaW4gKyBmb3JlY2FzdF9oYXJtb25pY3NfY29zCgogICAgICAgIHNlbGYuYmFja2Nhc3RfZHVtcCA9IGJhY2tjYXN0CiAgICAgICAgc2VsZi5mb3JlY2FzdF9kdW1wID0gZm9yZWNhc3QKCiAgICAgICAgcmV0dXJuIGJhY2tjYXN0LCBmb3JlY2FzdAoKCmNsYXNzIE5CZWF0cyh0Lm5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhY2tzOiB0Lm5uLk1vZHVsZUxpc3QsIHNjYWxpbmc9Tm9uZSwgbW9kZTogc3RyID0gJ2RyZXNzJyk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5zdGFja3MgPSBzdGFja3MKICAgICAgICBzZWxmLm1vZGUgPSBtb2RlCiAgICAgICAgc2VsZi5zY2FsaW5nID0gc2NhbGluZwoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHQuVGVuc29yLCBpbnB1dF9tYXNrOiB0LlRlbnNvcikgLT4gdC5UZW5zb3I6CiAgICAgICAgc2NhbGVfY29uc3QgPSBOb25lCiAgICAgICAgaWYgc2VsZi5zY2FsaW5nIGlzIG5vdCBOb25lOgogICAgICAgICAgICBpZiBzZWxmLnNjYWxpbmcgPT0gJ21heCc6CiAgICAgICAgICAgICAgICBzY2FsZV9jb25zdCA9IHQubWF4KHgsIGRpbT0xKS52YWx1ZXNbOiwgTm9uZV0KICAgICAgICAgICAgZWxpZiBzZWxmLnNjYWxpbmcgPT0gJ2xhc3QnOgogICAgICAgICAgICAgICAgc2NhbGVfY29uc3QgPSB4WzosIC0xOl0KPHxmaW1faG9sZXw+CiAgICAgICAgcmVzaWR1YWxzID0geC5mbGlwKGRpbXM9KDEsKSkKICAgICAgICBpbnB1dF9tYXNrID0gaW5wdXRfbWFzay5mbGlwKGRpbXM9KDEsKSkKICAgICAgICBmb3JlY2FzdCA9IHhbOiwgLTE6XQoKICAgICAgICBvcmlnaW5hbF9pbnB1dCA9IHJlc2lkdWFscwogICAgICAgIGZvciBpLCBzdGFjayBpbiBlbnVtZXJhdGUoc2VsZi5zdGFja3MpOgogICAgICAgICAgICBpZiBzZWxmLm1vZGUgPT0gJ2RyZXNzJzoKICAgICAgICAgICAgICAgIGJhY2tjYXN0LCBzdGFja19mb3JlY2FzdCA9IHN0YWNrKHJlc2lkdWFscykKICAgICAgICAgICAgICAgIHJlc2lkdWFscyA9IChyZXNpZHVhbHMgLSBiYWNrY2FzdCkgKiBpbnB1dF9tYXNrCiAgICAgICAgICAgICAgICBmb3JlY2FzdCA9IGZvcmVjYXN0ICsgc3RhY2tfZm9yZWNhc3QKICAgICAgICAgICAgZWxpZiBzZWxmLm1vZGUgPT0gJ3BhcmFsbGVsJzoKICAgICAgICAgICAgICAgIGJhY2tjYXN0LCBzdGFja19mb3JlY2FzdCA9IHN0YWNrKHJlc2lkdWFscykKICAgICAgICAgICAgICAgIGZvcmVjYXN0ID0gZm9yZWNhc3QgKyBzdGFja19mb3JlY2FzdAogICAgICAgICAgICBlbGlmIHNlbGYubW9kZSA9PSAnbGFzdF9mb3J3YXJkJzoKICAgICAgICAgICAgICAgIGJhY2tjYXN0LCBzdGFja19mb3JlY2FzdCA9IHN0YWNrKHJlc2lkdWFscykKICAgICAgICAgICAgICAgIHJlc2lkdWFscyA9IChyZXNpZHVhbHMgLSBiYWNrY2FzdCkgKiBpbnB1dF9tYXNrCiAgICAgICAgICAgICAgICBmb3JlY2FzdCA9IGZvcmVjYXN0ICsgc3RhY2tfZm9yZWNhc3QKICAgICAgICAgICAgZWxpZiBzZWxmLm1vZGUgPT0gJ25vX3Jlc2lkdWFsJzoKICAgICAgICAgICAgICAgIGJhY2tjYXN0LCBzdGFja19mb3JlY2FzdCA9IHN0YWNrKHJlc2lkdWFscykKICAgICAgICAgICAgICAgIHJlc2lkdWFscyA9IGJhY2tjYXN0CiAgICAgICAgICAgICAgICBmb3JlY2FzdCA9IGZvcmVjYXN0ICsgc3RhY2tfZm9yZWNhc3QKICAgICAgICAgICAgZWxpZiBzZWxmLm1vZGUgPT0gJ25vX3Jlc2lkdWFsX2xhc3RfZm9yd2FyZCc6CiAgICAgICAgICAgICAgICBiYWNrY2FzdCwgc3RhY2tfZm9yZWNhc3QgPSBzdGFjayhyZXNpZHVhbHMpCiAgICAgICAgICAgICAgICByZXNpZHVhbHMgPSBiYWNrY2FzdAogICAgICAgICAgICAgICAgZm9yZWNhc3QgPSBmb3JlY2FzdCArIHN0YWNrX2ZvcmVjYXN0CiAgICAgICAgICAgIGVsaWYgc2VsZi5tb2RlID09ICdyZXNpZHVhbF9pbnB1dCc6CiAgICAgICAgICAgICAgICBiYWNrY2FzdCwgc3RhY2tfZm9yZWNhc3QgPSBzdGFjayhyZXNpZHVhbHMpCiAgICAgICAgICAgICAgICByZXNpZHVhbHMgPSAob3JpZ2luYWxfaW5wdXQgLSBiYWNrY2FzdCkgKiBpbnB1dF9tYXNrCiAgICAgICAgICAgICAgICBmb3JlY2FzdCA9IGZvcmVjYXN0ICsgc3RhY2tfZm9yZWNhc3QKICAgICAgICAgICAgZWxpZiBzZWxmLm1vZGUgPT0gJ3Jlc2lkdWFsX2lucHV0X2xhc3RfZm9yd2FyZCc6CiAgICAgICAgICAgICAgICBiYWNrY2FzdCwgc3RhY2tfZm9yZWNhc3QgPSBzdGFjayhyZXNpZHVhbHMpCiAgICAgICAgICAgICAgICByZXNpZHVhbHMgPSAob3JpZ2luYWxfaW5wdXQgLSBiYWNrY2FzdCkgKiBpbnB1dF9tYXNrCiAgICAgICAgICAgICAgICBmb3JlY2FzdCA9IGZvcmVjYXN0ICsgc3RhY2tfZm9yZWNhc3QKCiAgICAgICAgaWYgc2VsZi5zY2FsaW5nIGlzIG5vdCBOb25lOgogICAgICAgICAgICBmb3JlY2FzdCA9IGZvcmVjYXN0ICogc2NhbGVfY29uc3QKCiAgICAgICAgcmV0dXJuIGZvcmVjYXN0CgoKZGVmIG5iZWF0c19nZW5lcmljKGlucHV0X3NpemU6IGludCwgb3V0cHV0X3NpemU6IGludCwKICAgICAgICAgICAgICAgICAgIGJsb2NrczogaW50ID0gMSwgc3RhY2tzOiBpbnQgPSAzMCwKICAgICAgICAgICAgICAgICAgIGZjX2xheWVyczogaW50ID0gNCwgZmNfbGF5ZXJzX3NpemU6IGludCA9IDUxMiwKICAgICAgICAgICAgICAgICAgIHNjYWxpbmc6IHN0ciA9IE5vbmUsIG1vZGU6IHN0ciA9ICdkcmVzcycpOgogICAgbW9kdWxlcyA9IFtbTkJlYXRzR2VuZXJpY0Jsb2NrKGlucHV0X3NpemU9aW5wdXRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY19sYXllcnM9ZmNfbGF5ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjX2xheWVyc19zaXplPWZjX2xheWVyc19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9zaXplPW91dHB1dF9zaXplKV0gKiBibG9ja3MgZm9yIF8gaW4gcmFuZ2Uoc3RhY2tzKV0KCiAgICByZXR1cm4gTkJlYXRzKHQubm4uTW9kdWxlTGlzdChsaXN0KGNoYWluLmZyb21faXRlcmFibGUobW9kdWxlcykpKSwKICAgICAgICAgICAgICAgICAgc2NhbGluZz1zY2FsaW5nLAogICAgICAgICAgICAgICAgICBtb2RlPW1vZGUpCgoKZGVmIG5iZWF0c19pbnRlcnByZXRhYmxlKGlucHV0X3NpemU6IGludCwgb3V0cHV0X3NpemU6IGludCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRyZW5kX2Jsb2NrczogaW50ID0gMywKICAgICAgICAgICAgICAgICAgICAgICAgIHRyZW5kX2ZjX2xheWVyczogaW50ID0gNCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRyZW5kX2ZjX2xheWVyc19zaXplOiBpbnQgPSAyNTYsCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWdyZWVfb2ZfcG9seW5vbWlhbDogaW50ID0gMywKICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXNvbmFsaXR5X2Jsb2NrczogaW50ID0gMywKICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXNvbmFsaXR5X2ZjX2xheWVyczogaW50ID0gNCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXNvbmFsaXR5X2ZjX2xheWVyc19zaXplOiBpbnQgPSAyMDQ4LAogICAgICAgICAgICAgICAgICAgICAgICAgbnVtX29mX2hhcm1vbmljczogaW50ID0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxpbmc6IHN0ciA9IE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlOiBzdHIgPSAnZHJlc3MnKToKICAgIHRyZW5kX2Jsb2NrID0gTkJlYXRzVHJlbmRCbG9jayhpbnB1dF9zaXplPWlucHV0X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzPXRyZW5kX2ZjX2xheWVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY19sYXllcnNfc2l6ZT10cmVuZF9mY19sYXllcnNfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWdyZWVfb2ZfcG9seW5vbWlhbD1kZWdyZWVfb2ZfcG9seW5vbWlhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZT1vdXRwdXRfc2l6ZSkKICAgIHNlYXNvbmFsaXR5X2Jsb2NrID0gTkJlYXRzU2Vhc29uYWxpdHlCbG9jayhpbnB1dF9zaXplPWlucHV0X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzPXNlYXNvbmFsaXR5X2ZjX2xheWVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY19sYXllcnNfc2l6ZT1zZWFzb25hbGl0eV9mY19sYXllcnNfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fb2ZfaGFybW9uaWNzPW51bV9vZl9oYXJtb25pY3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemU9b3V0cHV0X3NpemUpCiAgICByZXR1cm4gTkJlYXRzKHQubm4uTW9kdWxlTGlzdCgKICAgICAgICBbdHJlbmRfYmxvY2sgZm9yIF8gaW4gcmFuZ2UodHJlbmRfYmxvY2tzKV0gKyBbc2Vhc29uYWxpdHlfYmxvY2sgZm9yIF8gaW4gcmFuZ2Uoc2Vhc29uYWxpdHlfYmxvY2tzKV0pLAogICAgICAgIHNjYWxpbmc9c2NhbGluZywgbW9kZT1tb2RlKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICB4ID0gZGl2X25vX25hbih4LCBzY2FsZV9jb25zdCkKCjx8ZmltX2VuZHw+"]
["419b96994074fc3c8b94cf93269ac5a2bc2bd75b-4","419b96994074fc3c8b94cf93269ac5a2bc2bd75b","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IFR1cGxlCgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRvcmNoIGFzIHQKZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluCgpmcm9tIGNvbW1vbi50b3JjaF91dGlscyBpbXBvcnQgZGl2X25vX25hbgoKCmNsYXNzIE5CZWF0c0ZDKHQubm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICAgIGlucHV0X3NpemU6IGludCwKICAgICAgICAgICAgICAgICBmY19sYXllcnM6IGludCwKICAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZTogaW50KToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLmZjX2xheWVycyA9IHQubm4uTW9kdWxlTGlzdChbdC5ubi5MaW5lYXIoaW5fZmVhdHVyZXM9aW5wdXRfc2l6ZSwgb3V0X2ZlYXR1cmVzPW91dHB1dF9zaXplKV0gKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Lm5uLkxpbmVhcihpbl9mZWF0dXJlcz1vdXRwdXRfc2l6ZSwgb3V0X2ZlYXR1cmVzPW91dHB1dF9zaXplKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZShmY19sYXllcnMgLSAxKV0pCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeDogdC5UZW5zb3IpIC0+IHQuVGVuc29yOgogICAgICAgIG91dHB1dCA9IHgKICAgICAgICBmb3IgbGF5ZXIgaW4gc2VsZi5mY19sYXllcnM6CiAgICAgICAgICAgIG91dHB1dCA9IHQucmVsdShsYXllcihvdXRwdXQpKQogICAgICAgIHJldHVybiBvdXRwdXQKCgpjbGFzcyBOQmVhdHNHZW5lcmljQmxvY2sodC5ubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAgaW5wdXRfc2l6ZTogaW50LAogICAgICAgICAgICAgICAgIGZjX2xheWVyczogaW50LAogICAgICAgICAgICAgICAgIGZjX2xheWVyc19zaXplOiBpbnQsCiAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemU6IGludCk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5mYyA9IE5CZWF0c0ZDKGlucHV0X3NpemU9aW5wdXRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzPWZjX2xheWVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemU9ZmNfbGF5ZXJzX3NpemUpCiAgICAgICAgc2VsZi5iYXNpcyA9IHQubm4uTGluZWFyKGluX2ZlYXR1cmVzPWZjX2xheWVyc19zaXplLCBvdXRfZmVhdHVyZXM9aW5wdXRfc2l6ZSArIG91dHB1dF9zaXplKQogICAgICAgIHNlbGYub3V0cHV0X3NpemUgPSBvdXRwdXRfc2l6ZQoKICAgICAgICBzZWxmLmJhY2tjYXN0X2R1bXAgPSBOb25lCiAgICAgICAgc2VsZi5mb3JlY2FzdF9kdW1wID0gTm9uZQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHQuVGVuc29yKSAtPiBUdXBsZVt0LlRlbnNvciwgdC5UZW5zb3JdOgogICAgICAgIGlucHV0X3NpemUgPSB4LnNoYXBlWzFdCiAgICAgICAgb3V0cHV0ID0gc2VsZi5iYXNpcyhzZWxmLmZjKHgpKQogICAgICAgIGJhY2tjYXN0ID0gb3V0cHV0WzosIDppbnB1dF9zaXplXQogICAgICAgIGZvcmVjYXN0ID0gb3V0cHV0WzosIGlucHV0X3NpemU6XQogICAgICAgIHNlbGYuYmFja2Nhc3RfZHVtcCA9IGJhY2tjYXN0CiAgICAgICAgc2VsZi5mb3JlY2FzdF9kdW1wID0gZm9yZWNhc3QKICAgICAgICByZXR1cm4gYmFja2Nhc3QsIGZvcmVjYXN0CgoKY2xhc3MgTkJlYXRzVHJlbmRCbG9jayh0Lm5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICBpbnB1dF9zaXplOiBpbnQsCiAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzOiBpbnQsCiAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzX3NpemU6IGludCwKICAgICAgICAgICAgICAgICBkZWdyZWVfb2ZfcG9seW5vbWlhbDogaW50LAogICAgICAgICAgICAgICAgIG91dHB1dF9zaXplOiBpbnQpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYucG9seW5vbWlhbF9zaXplID0gZGVncmVlX29mX3BvbHlub21pYWwgKyAxICAjIGRlZ3JlZSBvZiBwb2x5bm9taWFsIHdpdGggY29uc3RhbnQgdGVybQogICAgICAgIHNlbGYuZmMgPSBOQmVhdHNGQyhpbnB1dF9zaXplPWlucHV0X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjX2xheWVycz1mY19sYXllcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9zaXplPWZjX2xheWVyc19zaXplKQogICAgICAgIHNlbGYuYmFzaXMgPSB0Lm5uLkxpbmVhcihpbl9mZWF0dXJlcz1mY19sYXllcnNfc2l6ZSwgb3V0X2ZlYXR1cmVzPTIgKiBzZWxmLnBvbHlub21pYWxfc2l6ZSkKICAgICAgICBzZWxmLm91dHB1dF9zaXplID0gb3V0cHV0X3NpemUKICAgICAgICBzZWxmLmJhY2tjYXN0X3RpbWUgPSBucC5jb25jYXRlbmF0ZShbbnAucG93ZXIobnAuYXJhbmdlKGlucHV0X3NpemUsIGR0eXBlPW5wLmZsb2F0KSAvIGlucHV0X3NpemUsIGkpW05vbmUsIDpdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYucG9seW5vbWlhbF9zaXplKV0pCiAgICAgICAgc2VsZi5mb3JlY2FzdF90aW1lID0gbnAuY29uY2F0ZW5hdGUoW25wLnBvd2VyKG5wLmFyYW5nZShvdXRwdXRfc2l6ZSwgZHR5cGU9bnAuZmxvYXQpIC8gb3V0cHV0X3NpemUsIGkpW05vbmUsIDpdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYucG9seW5vbWlhbF9zaXplKV0pCiAgICAgICAgc2VsZi5iYWNrY2FzdF9kdW1wID0gTm9uZQogICAgICAgIHNlbGYuZm9yZWNhc3RfZHVtcCA9IE5vbmUKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4OiB0LlRlbnNvcik6CiAgICAgICAgdGhldGFzID0gc2VsZi5iYXNpcyhzZWxmLmZjKHgpKQogICAgICAgIGJhY2tjYXN0ID0gdC5laW5zdW0oJ2JwLHB0LT5idCcsIHRoZXRhc1s6LCBzZWxmLnBvbHlub21pYWxfc2l6ZTpdLCB4Lm5ldyhzZWxmLmJhY2tjYXN0X3RpbWUpKQogICAgICAgIGZvcmVjYXN0ID0gdC5laW5zdW0oJ2JwLHB0LT5idCcsIHRoZXRhc1s6LCA6c2VsZi5wb2x5bm9taWFsX3NpemVdLCB4Lm5ldyhzZWxmLmZvcmVjYXN0X3RpbWUpKQogICAgICAgIHNlbGYuYmFja2Nhc3RfZHVtcCA9IGJhY2tjYXN0CiAgICAgICAgc2VsZi5mb3JlY2FzdF9kdW1wID0gZm9yZWNhc3QKICAgICAgICByZXR1cm4gYmFja2Nhc3QsIGZvcmVjYXN0CgoKY2xhc3MgTkJlYXRzU2Vhc29uYWxpdHlCbG9jayh0Lm5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICBpbnB1dF9zaXplOiBpbnQsCiAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzOiBpbnQsCiAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzX3NpemU6IGludCwKICAgICAgICAgICAgICAgICBudW1fb2ZfaGFybW9uaWNzOiBpbnQsCiAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemU6IGludCk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5iYXNpc19wYXJhbWV0ZXJzID0gaW50KG5wLmNlaWwobnVtX29mX2hhcm1vbmljcyAvIDIgKiBvdXRwdXRfc2l6ZSkgLSAobnVtX29mX2hhcm1vbmljcyAtIDEpKQoKICAgICAgICBzZWxmLmZjID0gTkJlYXRzRkMoaW5wdXRfc2l6ZT1pbnB1dF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmY19sYXllcnM9ZmNfbGF5ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZT1mY19sYXllcnNfc2l6ZSkKICAgICAgICBzZWxmLmJhc2lzID0gdC5ubi5MaW5lYXIoaW5fZmVhdHVyZXM9ZmNfbGF5ZXJzX3NpemUsIG91dF9mZWF0dXJlcz00ICogc2VsZi5iYXNpc19wYXJhbWV0ZXJzKQoKICAgICAgICBmcmVxdWVuY3kgPSBucC5hcHBlbmQobnAuemVyb3MoMSwgZHR5cGU9bnAuZmxvYXQzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5wLmFyYW5nZShudW1fb2ZfaGFybW9uaWNzLCBudW1fb2ZfaGFybW9uaWNzIC8gMiAqIG91dHB1dF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHR5cGU9bnAuZmxvYXQzMikgLyBudW1fb2ZfaGFybW9uaWNzKVtOb25lLCA6XQogICAgICAgIGJhY2tjYXN0X2dyaWQgPSAtMiAqIG5wLnBpICogKG5wLmFyYW5nZShpbnB1dF9zaXplLCBkdHlwZT1ucC5mbG9hdDMyKVs6LCBOb25lXSAvIG91dHB1dF9zaXplKSAqIGZyZXF1ZW5jeQogICAgICAgIGZvcmVjYXN0X2dyaWQgPSAyICogbnAucGkgKiAobnAuYXJhbmdlKG91dHB1dF9zaXplLCBkdHlwZT1ucC5mbG9hdDMyKVs6LCBOb25lXSAvIG91dHB1dF9zaXplKSAqIGZyZXF1ZW5jeQogICAgICAgIHNlbGYuYmFja2Nhc3RfY29zX3RlbXBsYXRlID0gbnAudHJhbnNwb3NlKG5wLmNvcyhiYWNrY2FzdF9ncmlkKSkKICAgICAgICBzZWxmLmJhY2tjYXN0X3Npbl90ZW1wbGF0ZSA9IG5wLnRyYW5zcG9zZShucC5zaW4oYmFja2Nhc3RfZ3JpZCkpCiAgICAgICAgc2VsZi5mb3JlY2FzdF9jb3NfdGVtcGxhdGUgPSBucC50cmFuc3Bvc2UobnAuY29zKGZvcmVjYXN0X2dyaWQpKQogICAgICAgIHNlbGYuZm9yZWNhc3Rfc2luX3RlbXBsYXRlID0gbnAudHJhbnNwb3NlKG5wLnNpbihmb3JlY2FzdF9ncmlkKSkKCiAgICAgICAgc2VsZi5iYWNrY2FzdF9kdW1wID0gTm9uZQogICAgICAgIHNlbGYuZm9yZWNhc3RfZHVtcCA9IE5vbmUKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4OiB0LlRlbnNvcik6CiAgICAgICAgaGFybW9uaWNzX3dlaWdodHMgPSBzZWxmLmJhc2lzKHNlbGYuZmMoeCkpCgogICAgICAgIGJhY2tjYXN0X2hhcm1vbmljc19jb3MgPSB0LmVpbnN1bSgnYnAscHQtPmJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFybW9uaWNzX3dlaWdodHNbOiwgMiAqIHNlbGYuYmFzaXNfcGFyYW1ldGVyczozICogc2VsZi5iYXNpc19wYXJhbWV0ZXJzXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeC5uZXcoc2VsZi5iYWNrY2FzdF9jb3NfdGVtcGxhdGUpKQogICAgICAgIGJhY2tjYXN0X2hhcm1vbmljc19zaW4gPSB0LmVpbnN1bSgnYnAscHQtPmJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFybW9uaWNzX3dlaWdodHNbOiwgMyAqIHNlbGYuYmFzaXNfcGFyYW1ldGVyczpdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Lm5ldyhzZWxmLmJhY2tjYXN0X3Npbl90ZW1wbGF0ZSkpCiAgICAgICAgYmFja2Nhc3QgPSBiYWNrY2FzdF9oYXJtb25pY3Nfc2luICsgYmFja2Nhc3RfaGFybW9uaWNzX2NvcwoKICAgICAgICBmb3JlY2FzdF9oYXJtb25pY3NfY29zID0gdC5laW5zdW0oJ2JwLHB0LT5idCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcm1vbmljc193ZWlnaHRzWzosIDpzZWxmLmJhc2lzX3BhcmFtZXRlcnNdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Lm5ldyhzZWxmLmZvcmVjYXN0X2Nvc190ZW1wbGF0ZSkpCiAgICAgICAgZm9yZWNhc3RfaGFybW9uaWNzX3NpbiA9IHQuZWluc3VtKCdicCxwdC0+YnQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJtb25pY3Nfd2VpZ2h0c1s6LCBzZWxmLmJhc2lzX3BhcmFtZXRlcnM6MiAqIHNlbGYuYmFzaXNfcGFyYW1ldGVyc10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgubmV3KHNlbGYuZm9yZWNhc3Rfc2luX3RlbXBsYXRlKSkKICAgICAgICBmb3JlY2FzdCA9IGZvcmVjYXN0X2hhcm1vbmljc19zaW4gKyBmb3JlY2FzdF9oYXJtb25pY3NfY29zCgogICAgICAgIHNlbGYuYmFja2Nhc3RfZHVtcCA9IGJhY2tjYXN0CiAgICAgICAgc2VsZi5mb3JlY2FzdF9kdW1wID0gZm9yZWNhc3QKCiAgICAgICAgcmV0dXJuIGJhY2tjYXN0LCBmb3JlY2FzdAoKCmNsYXNzIE5CZWF0cyh0Lm5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhY2tzOiB0Lm5uLk1vZHVsZUxpc3QsIHNjYWxpbmc9Tm9uZSwgbW9kZTogc3RyID0gJ2RyZXNzJyk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5zdGFja3MgPSBzdGFja3MKICAgICAgICBzZWxmLm1vZGUgPSBtb2RlCiAgICAgICAgc2VsZi5zY2FsaW5nID0gc2NhbGluZwoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHQuVGVuc29yLCBpbnB1dF9tYXNrOiB0LlRlbnNvcikgLT4gdC5UZW5zb3I6CiAgICAgICAgc2NhbGVfY29uc3QgPSBOb25lCiAgICAgICAgaWYgc2VsZi5zY2FsaW5nIGlzIG5vdCBOb25lOgogICAgICAgICAgICBpZiBzZWxmLnNjYWxpbmcgPT0gJ21heCc6CiAgICAgICAgICAgICAgICBzY2FsZV9jb25zdCA9IHQubWF4KHgsIGRpbT0xKS52YWx1ZXNbOiwgTm9uZV0KICAgICAgICAgICAgZWxpZiBzZWxmLnNjYWxpbmcgPT0gJ2xhc3QnOgogICAgICAgICAgICAgICAgc2NhbGVfY29uc3QgPSB4WzosIC0xOl0KICAgICAgICAgICAgeCA9IGRpdl9ub19uYW4oeCwgc2NhbGVfY29uc3QpCgogICAgICAgIHJlc2lkdWFscyA9IHguZmxpcChkaW1zPSgxLCkpCiAgICAgICAgaW5wdXRfbWFzayA9IGlucHV0X21hc2suZmxpcChkaW1zPSgxLCkpCiAgICAgICAgZm9yZWNhc3QgPSB4WzosIC0xOl0KCiAgICAgICAgb3JpZ2luYWxfaW5wdXQgPSByZXNpZHVhbHMKICAgICAgICBmb3IgaSwgc3RhY2sgaW4gZW51bWVyYXRlKHNlbGYuc3RhY2tzKToKICAgICAgICAgICAgaWYgc2VsZi5tb2RlID09ICdkcmVzcyc6CiAgICAgICAgICAgICAgICBiYWNrY2FzdCwgc3RhY2tfZm9yZWNhc3QgPSBzdGFjayhyZXNpZHVhbHMpCiAgICAgICAgICAgICAgICByZXNpZHVhbHMgPSAocmVzaWR1YWxzIC0gYmFja2Nhc3QpICogaW5wdXRfbWFzawogICAgICAgICAgICAgICAgZm9yZWNhc3QgPSBmb3JlY2FzdCArIHN0YWNrX2ZvcmVjYXN0CiAgICAgICAgICAgIGVsaWYgc2VsZi5tb2RlID09ICdwYXJhbGxlbCc6CiAgICAgICAgICAgICAgICBiYWNrY2FzdCwgc3RhY2tfZm9yZWNhc3QgPSBzdGFjayhyZXNpZHVhbHMpCiAgICAgICAgICAgICAgICBmb3JlY2FzdCA9IGZvcmVjYXN0ICsgc3RhY2tfZm9yZWNhc3QKICAgICAgICAgICAgZWxpZiBzZWxmLm1vZGUgPT0gJ2xhc3RfZm9yd2FyZCc6CiAgICAgICAgICAgICAgICBiYWNrY2FzdCwgc3RhY2tfZm9yZWNhc3QgPSBzdGFjayhyZXNpZHVhbHMpCiAgICAgICAgICAgICAgICByZXNpZHVhbHMgPSAocmVzaWR1YWxzIC0gYmFja2Nhc3QpICogaW5wdXRfbWFzawogICAgICAgICAgICAgICAgZm9yZWNhc3QgPSBmb3JlY2FzdCArIHN0YWNrX2ZvcmVjYXN0CiAgICAgICAgICAgIGVsaWYgc2VsZi5tb2RlID09ICdub19yZXNpZHVhbCc6CiAgICAgICAgICAgICAgICBiYWNrY2FzdCwgc3RhY2tfZm9yZWNhc3QgPSBzdGFjayhyZXNpZHVhbHMpCiAgICAgICAgICAgICAgICByZXNpZHVhbHMgPSBiYWNrY2FzdAogICAgICAgICAgICAgICAgZm9yZWNhc3QgPSBmb3JlY2FzdCArIHN0YWNrX2ZvcmVjYXN0CiAgICAgICAgICAgIGVsaWYgc2VsZi5tb2RlID09ICdub19yZXNpZHVhbF9sYXN0X2ZvcndhcmQnOgogICAgICAgICAgICAgICAgYmFja2Nhc3QsIHN0YWNrX2ZvcmVjYXN0ID0gc3RhY2socmVzaWR1YWxzKQogICAgICAgICAgICAgICAgcmVzaWR1YWxzID0gYmFja2Nhc3QKICAgICAgICAgICAgICAgIGZvcmVjYXN0ID0gZm9yZWNhc3QgKyBzdGFja19mb3JlY2FzdAogICAgICAgICAgICBlbGlmIHNlbGYubW9kZSA9PSAncmVzaWR1YWxfaW5wdXQnOgogICAgICAgICAgICAgICAgYmFja2Nhc3QsIHN0YWNrX2ZvcmVjYXN0ID0gc3RhY2socmVzaWR1YWxzKQogICAgICAgICAgICAgICAgcmVzaWR1YWxzID0gKG9yaWdpbmFsX2lucHV0IC0gYmFja2Nhc3QpICogaW5wdXRfbWFzawogICAgICAgICAgICAgICAgZm9yZWNhc3QgPSBmb3JlY2FzdCArIHN0YWNrX2ZvcmVjYXN0CiAgICAgICAgICAgIGVsaWYgc2VsZi5tb2RlID09ICdyZXNpZHVhbF9pbnB1dF9sYXN0X2ZvcndhcmQnOgogICAgICAgICAgICAgICAgYmFja2Nhc3QsIHN0YWNrX2ZvcmVjYXN0ID0gc3RhY2socmVzaWR1YWxzKQogICAgICAgICAgICAgICAgcmVzaWR1YWxzID0gKG9yaWdpbmFsX2lucHV0IC0gYmFja2Nhc3QpICogaW5wdXRfbWFzawogICAgICAgICAgICAgICAgZm9yZWNhc3QgPSBmb3JlY2FzdCArIHN0YWNrX2ZvcmVjYXN0CgogICAgICAgIGlmIHNlbGYuc2NhbGluZyBpcyBub3QgTm9uZToKICAgICAgICAgICAgZm9yZWNhc3QgPSBmb3JlY2FzdCAqIHNjYWxlX2NvbnN0CgogICAgICAgIHJldHVybiBmb3JlY2FzdAoKCmRlZiBuYmVhdHNfZ2VuZXJpYyhpbnB1dF9zaXplOiBpbnQsIG91dHB1dF9zaXplOiBpbnQsCiAgICAgICAgICAgICAgICAgICBibG9ja3M6IGludCA9IDEsIHN0YWNrczogaW50ID0gMzAsCiAgICAgICAgICAgICAgICAgICBmY19sYXllcnM6IGludCA9IDQsIGZjX2xheWVyc19zaXplOiBpbnQgPSA1MTIsCiAgICAgICAgICAgICAgICAgICBzY2FsaW5nOiBzdHIgPSBOb25lLCBtb2RlOiBzdHIgPSAnZHJlc3MnKToKICAgIG1vZHVsZXMgPSBbW05CZWF0c0dlbmVyaWNCbG9jayhpbnB1dF9zaXplPWlucHV0X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNfbGF5ZXJzPWZjX2xheWVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY19sYXllcnNfc2l6ZT1mY19sYXllcnNfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZT1vdXRwdXRfc2l6ZSldICogYmxvY2tzIGZvciBfIGluIHJhbmdlKHN0YWNrcyldCgogICAgcmV0dXJuIE5CZWF0cyh0Lm5uLk1vZHVsZUxpc3QobGlzdChjaGFpbi5mcm9tX2l0ZXJhYmxlKG1vZHVsZXMpKSksCiAgICAgICAgICAgICAgICAgIHNjYWxpbmc9c2NhbGluZywKICAgICAgICAgICAgICAgICAgbW9kZT1tb2RlKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZGVmIG5iZWF0c19pbnRlcnByZXRhYmxlKGlucHV0X3NpemU6IGludCwgb3V0cHV0X3NpemU6IGludCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRyZW5kX2Jsb2NrczogaW50ID0gMywKICAgICAgICAgICAgICAgICAgICAgICAgIHRyZW5kX2ZjX2xheWVyczogaW50ID0gNCwKPHxmaW1fZW5kfD4="]
["bdd8348b510b0141b766b0fb81a1c40725284c5e-1","bdd8348b510b0141b766b0fb81a1c40725284c5e","PHxmaW1fcHJlZml4fD4KIwojIEEgY2xhc3MgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIHRpbWUsIGluZGl2aWR1YWxseSBhbmQgY3VtdWxhdGl2ZWx5LCBpcwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgdGFrZW4gZG9pbmcgc29tZXRoaW5nLiAgQWxzbyBrZWVwcyB0cmFjayBvZiBhbW91bnQgb2YgdGltZSAoaW5kaXZpZHVhbGx5CiMgYW5kIGN1bXVsYXRpdmUpIF9OT1RfIGRvaW5nIHNvbWV0aGluZy4KIyAKCjx8ZmltX2VuZHw+"]
["bdd8348b510b0141b766b0fb81a1c40725284c5e-2","bdd8348b510b0141b766b0fb81a1c40725284c5e","PHxmaW1fcHJlZml4fD4KIwojIEEgY2xhc3MgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIHRpbWUsIGluZGl2aWR1YWxseSBhbmQgY3VtdWxhdGl2ZWx5LCBpcwojIHRha2VuIGRvaW5nIHNvbWV0aGluZy4gIEFsc28ga2VlcHMgdHJhY2sgb2YgYW1vdW50IG9mIHRpbWUgKGluZGl2aWR1YWxseQojIGFuZCBjdW11bGF0aXZlKSBfTk9UXyBkb2luZyBzb21ldGhpbmcuCiMgCgppbXBvcnQgdGltZQoKY2xhc3MgVGltZXJFcnJvcihFeGNlcHRpb24pOgogICAgIiIiQSBjdXN0b20gZXhjZXB0aW9uIHVzZWQgdG8gcmVwb3J0IGVycm9ycyBpbiB1c2Ugb2YgVGltZXIgY2xhc3MiIiIKCmNsYXNzIEN1bXVsYXRpdmVUaW1lcjoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLl9vdmVyYWxsX3N0YXJ0X3RpbWUgPSB0aW1lLnBlcmZfY291bnRlcigpCiAgICAgICAgc2VsZi5fc3RhcnRfdGltZSA9IE5vbmUKICAgICAgICBzZWxmLl9jdW11bGF0aXZlX2VsYXBzZWQgPSAwLjAKCiAgICAgICAgc2VsZi5fbm9uX3RpbWUgPSB0aW1lLnBlcmZfY291bnRlcigpCiAgICAgICAgc2VsZi5fY3VtdWxhdGl2ZV9ub24gPSAwLjAKICAgICAgICAKICAgIGRlZiBzdGFydChzZWxmKToKICAgICAgICAiIiJTdGFydCBhIG5ldyB0aW1lciIiIgogICAgICAgIGlmIHNlbGYuX3N0YXJ0X3RpbWUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHJhaXNlIFRpbWVyRXJyb3IoZiJUaW1lciBpcyBydW5uaW5nLiBVc2UgLnN0b3AoKSB0byBzdG9wIGl0IikKCiAgICAgICAgZWxhcHNlZF9ub24gPSB0aW1lLnBlcmZfY291bnRlcigpIC0gc2VsZi5fbm9uX3RpbWUKICAgICAgICBzZWxmLl9jdW11bGF0aXZlX25vbiArPSBlbGFwc2VkX25vbgo8fGZpbV9ob2xlfD4KICAgIGRlZiBzdG9wKHNlbGYsIG1lc3NhZ2U9IiIpOgogICAgICAgICIiIlN0b3AgdGhlIHRpbWVyLCBhbmQgcmVwb3J0IHRoZSBlbGFwc2VkIHRpbWUiIiIKICAgICAgICBpZiBzZWxmLl9zdGFydF90aW1lIGlzIE5vbmU6CiAgICAgICAgICAgIHJhaXNlIFRpbWVyRXJyb3IoZiJUaW1lciBpcyBub3QgcnVubmluZy4gVXNlIC5zdGFydCgpIHRvIHN0YXJ0IGl0IikKCiAgICAgICAgZWxhcHNlZF90aW1lID0gdGltZS5wZXJmX2NvdW50ZXIoKSAtIHNlbGYuX3N0YXJ0X3RpbWUKICAgICAgICBzZWxmLl9ub25fdGltZSA9IHRpbWUucGVyZl9jb3VudGVyKCkKICAgICAgICBzZWxmLl9jdW11bGF0aXZlX2VsYXBzZWQgKz0gZWxhcHNlZF90aW1lCiAgICAgICAgc2VsZi5fc3RhcnRfdGltZSA9IE5vbmUKICAgICAgICBwcmludChmInttZXNzYWdlfSB0aW1lOiB7ZWxhcHNlZF90aW1lOjAuNGZ9IHNlYy4gIFRvdGFsOiB7c2VsZi5fY3VtdWxhdGl2ZV9lbGFwc2VkOjAuNGZ9IHNlYyIpCgogICAgZGVmIGZpbmlzaChzZWxmKToKICAgICAgICBwcmludChmIkN1bXVsYXRpdmUgZWxhcHNlZCB0aW1lOiB7c2VsZi5fY3VtdWxhdGl2ZV9lbGFwc2VkOjAuNGZ9IHNlY29uZHMiKQogICAgICAgIHByaW50KGYiQ3VtdWxhdGl2ZSBub24gdGltZToge3NlbGYuX2N1bXVsYXRpdmVfbm9uOjAuNGZ9IHNlY29uZHMiKQogICAgICAgIHRvdGFsX3RpbWUgPSBzZWxmLl9jdW11bGF0aXZlX25vbiArIHNlbGYuX2N1bXVsYXRpdmVfZWxhcHNlZAogICAgICAgIHByaW50KGYiVG90YWwgdGltZToge3RvdGFsX3RpbWU6MC40Zn0gc2Vjb25kcyIpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcHJpbnQoZiJOb24gaW50ZXJuYWwgdGltZToge2VsYXBzZWRfbm9uOjAuNGZ9IHNlYy4gIFRvdGFsIG5vbjoge3NlbGYuX2N1bXVsYXRpdmVfbm9uOjAuNGZ9IHNlYyIpICAgICAgICAKICAgICAgICBzZWxmLl9zdGFydF90aW1lID0gdGltZS5wZXJmX2NvdW50ZXIoKQoKPHxmaW1fZW5kfD4="]
["bdd8348b510b0141b766b0fb81a1c40725284c5e-3","bdd8348b510b0141b766b0fb81a1c40725284c5e","PHxmaW1fcHJlZml4fD4KIwojIEEgY2xhc3MgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIHRpbWUsIGluZGl2aWR1YWxseSBhbmQgY3VtdWxhdGl2ZWx5LCBpcwojIHRha2VuIGRvaW5nIHNvbWV0aGluZy4gIEFsc28ga2VlcHMgdHJhY2sgb2YgYW1vdW50IG9mIHRpbWUgKGluZGl2aWR1YWxseQojIGFuZCBjdW11bGF0aXZlKSBfTk9UXyBkb2luZyBzb21ldGhpbmcuCiMgCgppbXBvcnQgdGltZQoKY2xhc3MgVGltZXJFcnJvcihFeGNlcHRpb24pOgogICAgIiIiQSBjdXN0b20gZXhjZXB0aW9uIHVzZWQgdG8gcmVwb3J0IGVycm9ycyBpbiB1c2Ugb2YgVGltZXIgY2xhc3MiIiIKCmNsYXNzIEN1bXVsYXRpdmVUaW1lcjoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLl9vdmVyYWxsX3N0YXJ0X3RpbWUgPSB0aW1lLnBlcmZfY291bnRlcigpCiAgICAgICAgc2VsZi5fc3RhcnRfdGltZSA9IE5vbmUKICAgICAgICBzZWxmLl9jdW11bGF0aXZlX2VsYXBzZWQgPSAwLjAKCiAgICAgICAgc2VsZi5fbm9uX3RpbWUgPSB0aW1lLnBlcmZfY291bnRlcigpCiAgICAgICAgc2VsZi5fY3VtdWxhdGl2ZV9ub24gPSAwLjAKICAgICAgICAKICAgIGRlZiBzdGFydChzZWxmKToKICAgICAgICAiIiJTdGFydCBhIG5ldyB0aW1lciIiIgogICAgICAgIGlmIHNlbGYuX3N0YXJ0X3RpbWUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHJhaXNlIFRpbWVyRXJyb3IoZiJUaW1lciBpcyBydW5uaW5nLiBVc2UgLnN0b3AoKSB0byBzdG9wIGl0IikKCiAgICAgICAgZWxhcHNlZF9ub24gPSB0aW1lLnBlcmZfY291bnRlcigpIC0gc2VsZi5fbm9uX3RpbWUKICAgICAgICBzZWxmLl9jdW11bGF0aXZlX25vbiArPSBlbGFwc2VkX25vbgogICAgICAgIHByaW50KGYiTm9uIGludGVybmFsIHRpbWU6IHtlbGFwc2VkX25vbjowLjRmfSBzZWMuICBUb3RhbCBub246IHtzZWxmLl9jdW11bGF0aXZlX25vbjowLjRmfSBzZWMiKSAgICAgICAgCiAgICAgICAgc2VsZi5fc3RhcnRfdGltZSA9IHRpbWUucGVyZl9jb3VudGVyKCkKCiAgICBkZWYgc3RvcChzZWxmLCBtZXNzYWdlPSIiKToKICAgICAgICAiIiJTdG9wIHRoZSB0aW1lciwgYW5kIHJlcG9ydCB0aGUgZWxhcHNlZCB0aW1lIiIiCiAgICAgICAgaWYgc2VsZi5fc3RhcnRfdGltZSBpcyBOb25lOgogICAgICAgICAgICByYWlzZSBUaW1lckVycm9yKGYiVGltZXIgaXMgbm90IHJ1bm5pbmcuIFVzZSAuc3RhcnQoKSB0byBzdGFydCBpdCIpCgogICAgICAgIGVsYXBzZWRfdGltZSA9IHRpbWUucGVyZl9jb3VudGVyKCkgLSBzZWxmLl9zdGFydF90aW1lCiAgICAgICAgc2VsZi5fbm9uX3RpbWUgPSB0aW1lLnBlcmZfY291bnRlcigpCiAgICAgICAgc2VsZi5fY3VtdWxhdGl2ZV9lbGFwc2VkICs9IGVsYXBzZWRfdGltZQogICAgICAgIHNlbGYuX3N0YXJ0X3RpbWUgPSBOb25lCiAgICAgICAgcHJpbnQoZiJ7bWVzc2FnZX0gdGltZToge2VsYXBzZWRfdGltZTowLjRmfSBzZWMuICBUb3RhbDoge3NlbGYuX2N1bXVsYXRpdmVfZWxhcHNlZDowLjRmfSBzZWMiKQoKICAgIGRlZiBmaW5pc2goc2VsZik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBwcmludChmIkN1bXVsYXRpdmUgZWxhcHNlZCB0aW1lOiB7c2VsZi5fY3VtdWxhdGl2ZV9lbGFwc2VkOjAuNGZ9IHNlY29uZHMiKQogICAgICAgIHByaW50KGYiQ3VtdWxhdGl2ZSBub24gdGltZToge3NlbGYuX2N1bXVsYXRpdmVfbm9uOjAuNGZ9IHNlY29uZHMiKQogICAgICAgIHRvdGFsX3RpbWUgPSBzZWxmLl9jdW11bGF0aXZlX25vbiArIHNlbGYuX2N1bXVsYXRpdmVfZWxhcHNlZAogICAgICAgIHByaW50KGYiVG90YWwgdGltZToge3RvdGFsX3RpbWU6MC40Zn0gc2Vjb25kcyIpCjx8ZmltX2VuZHw+"]
["6b636ad0f6871f58ca0892be44d2c1c0b240cf84-1","6b636ad0f6871f58ca0892be44d2c1c0b240cf84","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKaW1wb3J0IG9zCmltcG9ydCBwbGF0Zm9ybQppbXBvcnQgc3lzCmltcG9ydCBzdHJpbmcKaW1wb3J0IGdsb2IKaW1wb3J0IHJlCmltcG9ydCBjb3B5CmZyb20gc2h1dGlsIGltcG9ydCBtb3ZlIGFzIHNodXRpbF9tb3ZlCmltcG9ydCBjdjIKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20ga2VyYXMubW9kZWxzIGltcG9ydCBsb2FkX21vZGVsCmZyb20gUElMIGltcG9ydCBJbWFnZQppbXBvcnQgY3YyCmltcG9ydCB0aW1lCmltcG9ydCBvcwoKaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKCnRmLmNvbXBhdC52MS5sb2dnaW5nLnNldF92ZXJib3NpdHkodGYuY29tcGF0LnYxLmxvZ2dpbmcuRVJST1IpCm9zLmVudmlyb25bJ1RGX0NQUF9NSU5fTE9HX0xFVkVMJ10gPSAnMycKCmltcG9ydCBrZXJhcwpmcm9tIGtlcmFzLm1vZGVscyBpbXBvcnQgbG9hZF9tb2RlbApmcm9tIGtlcmFzIGltcG9ydCBiYWNrZW5kIGFzIEsKCmlmIEsuYmFja2VuZCgpICE9ICd0ZW5zb3JmbG93JzoKICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihmIlBsZWFzZSBzZXQgeW91ciBrZXJhcy5qc29uIHRvIHVzZSBUZW5zb3JGbG93LiBJdCBpcyBjdXJyZW50bHkgdXNpbmcge2tlcmFzLmJhY2tlbmQuYmFja2VuZCgpfSIpCgpwb3NpdGlvbl9tb2RlbCA9IHRmLmxpdGUuSW50ZXJwcmV0ZXIobW9kZWxfcGF0aD0ibW9kZWxzL0NvbG9yTmV0L21scF9wcm9wb3NhbC50ZmxpdGUiKQpwb3NpdGlvbl9tb2RlbC5hbGxvY2F0ZV90ZW5zb3JzKCkKcG9zaXRpb25faW5wdXRfZGV0YWlscyA9IHBvc2l0aW9uX21vZGVsLmdldF9pbnB1dF9kZXRhaWxzKCkKcG9zaXRpb25fb3V0cHV0X2RldGFpbHMgPSBwb3NpdGlvbl9tb2RlbC5nZXRfb3V0cHV0X2RldGFpbHMoKQoKS19wb3NpdGlvbl9tb2RlbCA9IGxvYWRfbW9kZWwoIm1vZGVscy9Db2xvck5ldC8vbWxwX3Byb3Bvc2FsX2suaGRmNSIpCnBvc2l0aW9uX2Z1bmN0aW9uID0gSy5mdW5jdGlvbihbS19wb3NpdGlvbl9tb2RlbC5sYXllcnNbMF0uaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS19wb3NpdGlvbl9tb2RlbC5sYXllcnNbMV0uaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSy5sZWFybmluZ19waGFzZSgpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtLX3Bvc2l0aW9uX21vZGVsLmxheWVyc1stMV0ub3V0cHV0XSkKCmRpc2NyaW1pbmF0b3JfbW9kZWwgPSB0Zi5saXRlLkludGVycHJldGVyKG1vZGVsX3BhdGg9Im1vZGVscy9Db2xvck5ldC9kaXNjcmltaW5hdG9yLnRmbGl0ZSIpCmRpc2NyaW1pbmF0b3JfbW9kZWwuYWxsb2NhdGVfdGVuc29ycygpCmRpc2NyaW1pbmF0b3JfaW5wdXRfZGV0YWlscyA9IGRpc2NyaW1pbmF0b3JfbW9kZWwuZ2V0X2lucHV0X2RldGFpbHMoKQpkaXNjcmltaW5hdG9yX291dHB1dF9kZXRhaWxzID0gZGlzY3JpbWluYXRvcl9tb2RlbC5nZXRfb3V0cHV0X2RldGFpbHMoKQoKCmRlZiBvY3ZfdG9fcGlsKGltKToKICAgIHBpbF9pbWFnZSA9IG5wLmFycmF5KGltKQogICAgcGlsX2ltYWdlID0gSW1hZ2UuZnJvbWFycmF5KHBpbF9pbWFnZSkKICAgIHJldHVybiBwaWxfaW1hZ2UKCgpkZWYgX3Bvc2l0aW9uX3dpdGhfdW5jZXJ0YWludHkoeCwgbl9pdGVyPTEwKToKICAgIHJlc3VsdCA9IFtdCgogICAgZm9yIGkgaW4gcmFuZ2Uobl9pdGVyKToKICAgICAgICByZXN1bHQuYXBwZW5kKHBvc2l0aW9uX2Z1bmN0aW9uKFt4WzBdLCB4WzFdLCAxXSkpCgogICAgcmVzdWx0ID0gbnAuYXJyYXkocmVzdWx0KQogICAgdW5jZXJ0YWludHkgPSByZXN1bHQudmFyKGF4aXM9MCkKICAgIHByZWRpY3Rpb24gPSByZXN1bHQubWVhbihheGlzPTApCiAgICByZXR1cm4gcHJlZGljdGlvbiwgdW5jZXJ0YWludHkKCgpkZWYgX2xlZ2FjeV9yZWdpb25zKGltLCBpbV9oc3YsIGltYWdlX3dpZHRoLCBpbWFnZV9oZWlnaHQsIHdob2xlX2V4dHJlbWEsIHN0cmlkZV9zdHlsZT0ncXVpY2snLCBzdHJpZGU9MjUsCiAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uX3NpemU9MTI1LCBvdmVyX2Nyb3A9MCwgaGFyZF9jdXRfdmFsdWU9NTApOgogICAgcG9zc2libGVfcG9zaXRpb25zID0gW10KICAgIGhpc3RzX3JnYiA9IFtdCiAgICBoaXN0c19oc3YgPSBbXQoKICAgIGlmIHN0cmlkZV9zdHlsZSA9PSAnd2hvbGUnOgogICAgICAgIGZvciByIGluIHJhbmdlKC1vdmVyX2Nyb3AsIChpbWFnZV9oZWlnaHQgLSBwYXJ0aXRpb25fc2l6ZSkgLy8gc3RyaWRlICsgb3Zlcl9jcm9wKToKICAgICAgICAgICAgZm9yIGMgaW4gcmFuZ2UoLW92ZXJfY3JvcCwgKGltYWdlX3dpZHRoIC0gcGFydGl0aW9uX3NpemUpIC8vIHN0cmlkZSArIG92ZXJfY3JvcCk6CiAgICAgICAgICAgICAgICB4MSwgeTEgPSBjICogc3RyaWRlLCByICogc3RyaWRlCiAgICAgICAgICAgICAgICB4MiwgeTIgPSB4MSArIHBhcnRpdGlvbl9zaXplLCB5MSArIHBhcnRpdGlvbl9zaXplCiAgICAgICAgICAgICAgICBwYXJ0aXRpb25lZF9pbV9oc3YgPSBpbV9oc3YuY3JvcCgoeDEsIHkxLCB4MiwgeTIpKQogICAgICAgICAgICAgICAgcGFydGl0aW9uZWRfaW1faHN2ID0gcGFydGl0aW9uZWRfaW1faHN2LnJlc2l6ZSgoMTI1LCAxMjUpKQogICAgICAgICAgICAgICAgZXh0cmVtYSA9IHBhcnRpdGlvbmVkX2ltX2hzdi5nZXRleHRyZW1hKCkKICAgICAgICAgICAgICAgIGV4dHJlbWEgPSBleHRyZW1hWzFdWzFdCiAgICAgICAgICAgICAgICBpZiB3aG9sZV9leHRyZW1hIC0gaGFyZF9jdXRfdmFsdWUgPCBleHRyZW1hOgogICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlX3Bvc2l0aW9ucy5hcHBlbmQoKHgxLCB5MSwgeDIsIHkyKSkKICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb25lZF9pbSA9IGltLmNyb3AoKHgxLCB5MSwgeDIsIHkyKSkKICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb25lZF9pbSA9IHBhcnRpdGlvbmVkX2ltLnJlc2l6ZSgoMTI1LCAxMjUpKQogICAgICAgICAgICAgICAgICAgIGhpc3RzX3JnYi5hcHBlbmQocGFydGl0aW9uZWRfaW0uaGlzdG9ncmFtKCkpCiAgICAgICAgICAgICAgICAgICAgaGlzdHNfaHN2LmFwcGVuZChwYXJ0aXRpb25lZF9pbV9oc3YuaGlzdG9ncmFtKCkpCgogICAgZWxpZiBzdHJpZGVfc3R5bGUgPT0gJ3F1aWNrJzoKICAgICAgICBmb3IgYyBpbiByYW5nZSgtb3Zlcl9jcm9wLCAoaW1hZ2Vfd2lkdGggLSBwYXJ0aXRpb25fc2l6ZSkgLy8gc3RyaWRlICsgb3Zlcl9jcm9wKToKICAgICAgICAgICAgeDEsIHkxID0gYyAqIHN0cmlkZSwgMAogICAgICAgICAgICB4MiwgeTIgPSB4MSArIHBhcnRpdGlvbl9zaXplLCB5MSArIHBhcnRpdGlvbl9zaXplCiAgICAgICAgICAgIHBhcnRpdGlvbmVkX2ltID0gaW0uY3JvcCgoeDEsIHkxLCB4MiwgeTIpKQogICAgICAgICAgICBwb3NzaWJsZV9wb3NpdGlvbnMuYXBwZW5kKCh4MSwgeTEsIHgyLCB5MikpCiAgICAgICAgICAgIHBhcnRpdGlvbmVkX2ltX2hzdiA9IGltX2hzdi5jcm9wKCh4MSwgeTEsIHgyLCB5MikpCgogICAgICAgICAgICBoaXN0ID0gcGFydGl0aW9uZWRfaW0uaGlzdG9ncmFtKCkKICAgICAgICAgICAgaGlzdF9oc3YgPSBwYXJ0aXRpb25lZF9pbV9oc3YuaGlzdG9ncmFtKCkKCiAgICAgICAgICAgIGhpc3RzX3JnYi5hcHBlbmQoaGlzdCkKICAgICAgICAgICAgaGlzdHNfaHN2LmFwcGVuZChoaXN0X2hzdikKCiAgICAgICAgICAgIHgxLCB5MSA9IGMgKiBzdHJpZGUsIGltYWdlX2hlaWdodCAtIHBhcnRpdGlvbl9zaXplCiAgICAgICAgICAgIHgyLCB5MiA9IHgxICsgcGFydGl0aW9uX3NpemUsIHkxICsgcGFydGl0aW9uX3NpemUKICAgICAgICAgICAgcGFydGl0aW9uZWRfaW0gPSBpbS5jcm9wKCh4MSwgeTEsIHgyLCB5MikpCiAgICAgICAgICAgIHBvc3NpYmxlX3Bvc2l0aW9ucy5hcHBlbmQoKHgxLCB5MSwgeDIsIHkyKSkKICAgICAgICAgICAgcGFydGl0aW9uZWRfaW1faHN2ID0gaW1faHN2LmNyb3AoKHgxLCB5MSwgeDIsIHkyKSkKICAgICAgICAgICAgaGlzdCA9IHBhcnRpdGlvbmVkX2ltLmhpc3RvZ3JhbSgpCiAgICAgICAgICAgIGhpc3RfaHN2ID0gcGFydGl0aW9uZWRfaW1faHN2Lmhpc3RvZ3JhbSgpCgogICAgICAgICAgICBoaXN0c19yZ2IuYXBwZW5kKGhpc3QpCiAgICAgICAgICAgIGhpc3RzX2hzdi5hcHBlbmQoaGlzdF9oc3YpCgogICAgICAgIGZvciByIGluIHJhbmdlKC1vdmVyX2Nyb3AsIChpbWFnZV9oZWlnaHQgLSBwYXJ0aXRpb25fc2l6ZSkgLy8gc3RyaWRlICsgb3Zlcl9jcm9wKToKICAgICAgICAgICAgeDEsIHkxID0gMCwgciAqIHN0cmlkZQogICAgICAgICAgICB4MiwgeTIgPSB4MSArIHBhcnRpdGlvbl9zaXplLCB5MSArIHBhcnRpdGlvbl9zaXplCiAgICAgICAgICAgIHBhcnRpdGlvbmVkX2ltID0gaW0uY3JvcCgoeDEsIHkxLCB4MiwgeTIpKQogICAgICAgICAgICBwb3NzaWJsZV9wb3NpdGlvbnMuYXBwZW5kKCh4MSwgeTEsIHgyLCB5MikpCiAgICAgICAgICAgIHBhcnRpdGlvbmVkX2ltX2hzdiA9IGltX2hzdi5jcm9wKCh4MSwgeTEsIHgyLCB5MikpCiAgICAgICAgICAgIGhpc3QgPSBwYXJ0aXRpb25lZF9pbS5oaXN0b2dyYW0oKQogICAgICAgICAgICBoaXN0X2hzdiA9IHBhcnRpdGlvbmVkX2ltX2hzdi5oaXN0b2dyYW0oKQoKICAgICAgICAgICAgaGlzdHNfcmdiLmFwcGVuZChoaXN0KQogICAgICAgICAgICBoaXN0c19oc3YuYXBwZW5kKGhpc3RfaHN2KQoKICAgICAgICAgICAgeDEsIHkxID0gaW1hZ2Vfd2lkdGggLSBwYXJ0aXRpb25fc2l6ZSwgciAqIHN0cmlkZQogICAgICAgICAgICB4MiwgeTIgPSB4MSArIHBhcnRpdGlvbl9zaXplLCB5MSArIHBhcnRpdGlvbl9zaXplCiAgICAgICAgICAgIHBhcnRpdGlvbmVkX2ltID0gaW0uY3JvcCgoeDEsIHkxLCB4MiwgeTIpKQogICAgICAgICAgICBwb3NzaWJsZV9wb3NpdGlvbnMuYXBwZW5kKCh4MSwgeTEsIHgyLCB5MikpCiAgICAgICAgICAgIHBhcnRpdGlvbmVkX2ltX2hzdiA9IGltX2hzdi5jcm9wKCh4MSwgeTEsIHgyLCB5MikpCiAgICAgICAgICAgIGhpc3QgPSBwYXJ0aXRpb25lZF9pbS5oaXN0b2dyYW0oKQogICAgICAgICAgICBoaXN0X2hzdiA9IHBhcnRpdGlvbmVkX2ltX2hzdi5oaXN0b2dyYW0oKQoKICAgICAgICAgICAgaGlzdHNfcmdiLmFwcGVuZChoaXN0KQogICAgICAgICAgICBoaXN0c19oc3YuYXBwZW5kKGhpc3RfaHN2KQogICAgZWxpZiBzdHJpZGVfc3R5bGUgPT0gJ3VsdHJhcXVpY2snOgogICAgICAgIHBvc2l0aW9ucyA9IFsoMCwgMCwgcGFydGl0aW9uX3NpemUsIHBhcnRpdGlvbl9zaXplKSwKICAgICAgICAgICAgICAgICAgICAgKDAsIGltYWdlX2hlaWdodCAtIHBhcnRpdGlvbl9zaXplLCBwYXJ0aXRpb25fc2l6ZSwgaW1hZ2VfaGVpZ2h0KSwKICAgICAgICAgICAgICAgICAgICAgKGltYWdlX3dpZHRoIC0gcGFydGl0aW9uX3NpemUsIDAsIGltYWdlX3dpZHRoLCBwYXJ0aXRpb25fc2l6ZSksCiAgICAgICAgICAgICAgICAgICAgIChpbWFnZV93aWR0aCAtIHBhcnRpdGlvbl9zaXplLCBpbWFnZV9oZWlnaHQgLSBwYXJ0aXRpb25fc2l6ZSwgaW1hZ2Vfd2lkdGgsIGltYWdlX2hlaWdodCldCgogICAgICAgIGZvciBwb3NpdGlvbiBpbiBwb3NpdGlvbnM6CiAgICAgICAgICAgIHBhcnRpdGlvbmVkX2ltID0gaW0uY3JvcChwb3NpdGlvbikKICAgICAgICAgICAgcG9zc2libGVfcG9zaXRpb25zLmFwcGVuZChwb3NpdGlvbikKICAgICAgICAgICAgcGFydGl0aW9uZWRfaW1faHN2ID0gaW1faHN2LmNyb3AocG9zaXRpb24pCiAgICAgICAgICAgIGhpc3RzX3JnYi5hcHBlbmQocGFydGl0aW9uZWRfaW0uaGlzdG9ncmFtKCkpCiAgICAgICAgICAgIGhpc3RzX2hzdi5hcHBlbmQocGFydGl0aW9uZWRfaW1faHN2Lmhpc3RvZ3JhbSgpKQogICAgZWxzZToKICAgICAgICByYWlzZSBJbnZhbGlkU3RyaWRlCgogICAgcmV0dXJuIGhpc3RzX3JnYiwgaGlzdHNfaHN2LCBwb3NzaWJsZV9wb3NpdGlvbnMKCgpkZWYgc2NhbGVfaW1hZ2VzX3dpdGhfaW5mbyhpbSwgbGFyZ2VzdF9kaW09MTg3NSk6CiAgICBpbWFnZV9oZWlnaHQsIGltYWdlX3dpZHRoID0gaW0uc2hhcGVbMDoyXQoKICAgIGlmIGltYWdlX3dpZHRoID4gaW1hZ2VfaGVpZ2h0Ogo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcmVkdWNlZF9pbSA9IGN2Mi5yZXNpemUoaW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhcmdlc3RfZGltLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZCgobGFyZ2VzdF9kaW0gLyBpbWFnZV93aWR0aCkgKiBpbWFnZV9oZWlnaHQpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0aW9uPWN2Mi5JTlRFUl9ORUFSRVNUKQo8fGZpbV9lbmR8Pg=="]
["6b636ad0f6871f58ca0892be44d2c1c0b240cf84-2","6b636ad0f6871f58ca0892be44d2c1c0b240cf84",{"$cut":{"chars":25916,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKaW1wb3J0IG9zCmltcG9ydCBwbGF0Zm9ybQppbXBvcnQgc3lzCmltcG9ydCBzdHJpbmcKaW1wb3J0IGdsb2IKaW1wb3J0IHJlCmltcG9ydCBjb3B5CmZyb20gc2h1dGlsIGltcG9ydCBtb3ZlIGFzIHNodXRpbF9tb3ZlCmltcG9ydCBjdjIKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20ga2VyYXMubW9kZWxzIGltcG9ydCBsb2FkX21vZGVsCmZyb20gUElMIGltcG9ydCBJbWFnZQppbXBvcnQgY3YyCmltcG9ydCB0aW1lCmltcG9ydCBvcwoKaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKCnRmLmNvbXBhdC52MS5sb2dnaW5nLnNldF92ZXJib3NpdHkodGYuY29tcGF0LnYxLmxvZ2dpbmcuRVJST1IpCm9zLmVudmlyb25bJ1RGX0NQUF9NSU5fTE9HX0xFVkVMJ10gPSAnMycKCmltcG9ydCBrZXJhcwpmcm9tIGtlcmFzLm1vZGVscyBpbXBvcnQgbG9hZF9tb2RlbApmcm9tIGtlcmFzIGltcG9ydCBiYWNrZW5kIGFzIEsKCmlmIEsuYmFja2VuZCgpICE9ICd0ZW5zb3JmbG93JzoKICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihmIlBsZWFzZSBzZXQgeW91ciBrZXJhcy5qc29uIHRvIHVzZSBUZW5zb3JGbG93LiBJdCBpcyBjdXJyZW50bHkgdXNpbmcge2tlcmFzLmJhY2tlbmQuYmFja2VuZCgpfSIpCgpwb3NpdGlvbl9tb2RlbCA9IHRmLmxpdGUuSW50ZXJwcmV0ZXIobW9kZWxfcGF0aD0ibW9kZWxzL0NvbG9yTmV0L21scF9wcm9wb3NhbC50ZmxpdGUiKQpwb3NpdGlvbl9tb2RlbC5hbGxvY2F0ZV90ZW5zb3JzKCkKcG9zaXRpb25faW5wdXRfZGV0YWlscyA9IHBvc2l0aW9uX21vZGVsLmdldF9pbnB1dF9kZXRhaWxzKCkKcG9zaXRpb25fb3V0cHV0X2RldGFpbHMgPSBwb3NpdGlvbl9tb2RlbC5nZXRfb3V0cHV0X2RldGFpbHMoKQoKS19wb3NpdGlvbl9tb2RlbCA9IGxvYWRfbW9kZWwoIm1vZGVscy9Db2xvck5ldC8vbWxwX3Byb3Bvc2FsX2suaGRmNSIpCnBvc2l0aW9uX2Z1bmN0aW9uID0gSy5mdW5jdGlvbihbS19wb3NpdGlvbl9tb2RlbC5sYXllcnNbMF0uaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS19wb3NpdGlvbl9tb2RlbC5sYXllcnNbMV0uaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSy5sZWFybmluZ19waGFzZSgpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtLX3Bvc2l0aW9uX21vZGVsLmxheWVyc1stMV0ub3V0cHV0XSkKCmRpc2NyaW1pbmF0b3JfbW9kZWwgPSB0Zi5saXRlLkludGVycHJldGVyKG1vZGVsX3BhdGg9Im1vZGVscy9Db2xvck5ldC9kaXNjcmltaW5hdG9yLnRmbGl0ZSIpCmRpc2NyaW1pbmF0b3JfbW9kZWwuYWxsb2NhdGVfdGVuc29ycygpCmRpc2NyaW1pbmF0b3JfaW5wdXRfZGV0YWlscyA9IGRpc2NyaW1pbmF0b3JfbW9kZWwuZ2V0X2lucHV0X2RldGFpbHMoKQpkaXNjcmltaW5hdG9yX291dHB1dF9kZXRhaWxzID0gZGlzY3JpbWluYXRvcl9tb2RlbC5nZXRfb3V0cHV0X2RldGFpbHMoKQoKCmRlZiBvY3ZfdG9fcGlsKGltKToKICAgIHBpbF9pbWFnZSA9IG5wLmFycmF5KGltKQogICAgcGlsX2ltYWdlID0gSW1hZ2UuZnJvbWFycmF5KHBpbF9pbWFnZSkKICAgIHJldHVybiBwaWxfaW1hZ2UKCgpkZWYgX3Bvc2l0aW9uX3dpdGhfdW5jZXJ0YWludHkoeCwgbl9pdGVyPTEwKToKICAgIHJlc3VsdCA9IFtdCgogICAgZm9yIGkgaW4gcmFuZ2Uobl9pdGVyKToKICAgICAgICByZXN1bHQuYXBwZW5kKHBvc2l0aW9uX2Z1bmN0aW9uKFt4WzBdLCB4WzFdLCAxXSkpCgogICAgcmVzdWx0ID0gbnAuYXJyYXkocmVzdWx0KQogICAgdW5jZXJ0YWludHkgPSByZXN1bHQudmFyKGF4aXM9MCkKICAgIHByZWRpY3Rpb24gPSByZXN1bHQubWVhbihheGlzPTApCiAgICByZXR1cm4gcHJlZGljdGlvbiwgdW5jZXJ0YWludHkKCgpkZWYgX2xlZ2FjeV9yZWdpb25zKGltLCBpbV9oc3YsIGltYWdlX3dpZHRoLCBpbWFnZV9oZWlnaHQsIHdob2xlX2V4dHJlbWEsIHN0cmlkZV9zdHlsZT0ncXVpY2snLCBzdHJpZGU9MjUsCiAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uX3NpemU9MTI1LCBvdmVyX2Nyb3A9MCwgaGFyZF9jdXRfdmFsdWU9NTApOgogICAgcG9zc2libGVfcG9zaXRpb25zID0gW10KICAgIGhpc3RzX3JnYiA9IFtdCiAgICBoaXN0c19oc3YgPSBbXQoKICAgIGlmIHN0cmlkZV9zdHlsZSA9PSAnd2hvbGUnOgogICAgICAgIGZvciByIGluIHJhbmdlKC1vdmVyX2Nyb3AsIChpbWFnZV9oZWlnaHQgLSBwYXJ0aXRpb25fc2l6ZSkgLy8gc3RyaWRlICsgb3Zlcl9jcm9wKToKICAgICAgICAgICAgZm9yIGMgaW4gcmFuZ2UoLW92ZXJfY3JvcCwgKGltYWdlX3dpZHRoIC0gcGFydGl0aW9uX3NpemUpIC8vIHN0cmlkZSArIG92ZXJfY3JvcCk6CiAgICAgICAgICAgICAgICB4MSwgeTEgPSBjICogc3RyaWRlLCByICogc3RyaWRlCiAgICAgICAgICAgICAgICB4MiwgeTIgPSB4MSArIHBhcnRpdGlvbl9zaXplLCB5MSArIHBhcnRpdGlvbl9zaXplCiAgICAgICAgICAgICAgICBwYXJ0aXRpb25lZF9pbV9oc3YgPSBpbV9oc3YuY3JvcCgoeDEsIHkxLCB4MiwgeTIpKQogICAgICAgICAgICAgICAgcGFydGl0aW9uZWRfaW1faHN2ID0gcGFydGl0aW9uZWRfaW1faHN2LnJlc2l6ZSgoMTI1LCAxMjUpKQogICAgICAgICAgICAgICAgZXh0cmVtYSA9IHBhcnRpdGlvbmVkX2ltX2hzdi5nZXRleHRyZW1hKCkKICAgICAgICAgICAgICAgIGV4dHJlbWEgPSBleHRyZW1hWzFdWzFdCiAgICAgICAgICAgICAgICBpZiB3aG9sZV9leHRyZW1hIC0gaGFyZF9jdXRfdmFsdWUgPCBleHRyZW1hOgogICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlX3Bvc2l0aW9ucy5hcHBlbmQoKHgxLCB5MSwgeDIsIHkyKSkKICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb25lZF9pbSA9IGltLmNyb3AoKHgxLCB5MSwgeDIsIHkyKSkKICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb25lZF9pbSA9IHBhcnRpdGlvbmVkX2ltLnJlc2l6ZSgoMTI1LCAxMjUpKQogICAgICAgICAgICAgICAgICAgIGhpc3RzX3JnYi5hcHBlbmQocGFydGl0aW9uZWRfaW0uaGlzdG9ncmFtKCkpCiAgICAgICAgICAgICAgICAgICAgaGlzdHNfaHN2LmFwcGVuZChwYXJ0"}}]
["c198447ba2f28fc91d530059b8857360946f49ea-1","c198447ba2f28fc91d530059b8857360946f49ea","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgJElkJAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoiIiIxIHNvbHV0aW9uIiIiCgppbXBvcnQgcHV6emxlcgo8fGZpbV9lbmR8Pg=="]
["c198447ba2f28fc91d530059b8857360946f49ea-2","c198447ba2f28fc91d530059b8857360946f49ea","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyAkSWQkCgoiIiIxIHNvbHV0aW9uIiIiCgo8fGZpbV9lbmR8Pg=="]
["c198447ba2f28fc91d530059b8857360946f49ea-3","c198447ba2f28fc91d530059b8857360946f49ea","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgJElkJAoKIiIiMSBzb2x1dGlvbiIiIgoKaW1wb3J0IHB1enpsZXIKZnJvbSBwdXp6bGVyLnB1enpsZXMuaGV4aWFtb25kcyBpbXBvcnQgSGV4aWFtb25kc0lhbW9uZEhleEpvaW5lZENvbG9ycwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpwdXp6bGVyLnJ1bihIZXhpYW1vbmRzSWFtb25kSGV4Sm9pbmVkQ29sb3JzKQo8fGZpbV9lbmR8Pg=="]
["c198447ba2f28fc91d530059b8857360946f49ea-4","c198447ba2f28fc91d530059b8857360946f49ea","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgJElkJAo8fGZpbV9ob2xlfD4KZnJvbSBwdXp6bGVyLnB1enpsZXMuaGV4aWFtb25kcyBpbXBvcnQgSGV4aWFtb25kc0lhbW9uZEhleEpvaW5lZENvbG9ycwoKcHV6emxlci5ydW4oSGV4aWFtb25kc0lhbW9uZEhleEpvaW5lZENvbG9ycykKPHxmaW1fc3VmZml4fD4KCiIiIjEgc29sdXRpb24iIiIKCmltcG9ydCBwdXp6bGVyCjx8ZmltX2VuZHw+"]
["c198447ba2f28fc91d530059b8857360946f49ea-5","c198447ba2f28fc91d530059b8857360946f49ea","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgJElkJAoKIiIiMSBzb2x1dGlvbiIiIgoKaW1wb3J0IHB1enpsZXIKZnJvbSBwdXp6bGVyLnB1enpsZXMuaGV4aWFtb25kcyBpbXBvcnQgSGV4aWFtb25kc0lhbW9uZEhleEpvaW5lZENvbG9ycwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpwdXp6bGVyLnJ1bihIZXhpYW1vbmRzSWFtb25kSGV4Sm9pbmVkQ29sb3JzKQo8fGZpbV9lbmR8Pg=="]
["97b4473c28ebcc07df455170b0fd3fe3c28e218f-1","97b4473c28ebcc07df455170b0fd3fe3c28e218f","PHxmaW1fcHJlZml4fD4KZnJvbSAuLiBpbXBvcnQgU29sdmVyCmZyb20gcnViaWtfc29sdmVyLk1vdmUgaW1wb3J0IE1vdmUKCjx8ZmltX2hvbGV8PgoKICAgIGRlZiBtb3ZlKHNlbGYsIG0sIHNvbHV0aW9uKToKICAgICAgICBzZWxmLmN1YmUubW92ZShNb3ZlKG0pKQogICAgICAgIHNvbHV0aW9uLmFwcGVuZChtKQoKICAgIGRlZiBzb2x1dGlvbihzZWxmKToKICAgICAgICBzb2x1dGlvbiA9IFtdCiAgICAgICAgIyBBcHBseSBGIFIgVSBSJyBVJyBGJyBvbmNlLCB0d2ljZSBvciB0aHJpY2UKICAgICAgICB1cF95ZWxsb3dzID0gW2VkZ2UgZm9yIGVkZ2UgaW4gWydGVScsICdSVScsICdMVScsICdCVSddIGlmIHNlbGYuY3ViZS5jdWJpZXNbZWRnZV0uY29sb3JfZmFjaW5nKCdZJykgPT0gJ1UnXQoKICAgICAgICBpZiBsZW4odXBfeWVsbG93cykgPT0gMDoKICAgICAgICAgICAgc2VsZi5hcHBseV9hbGdvcml0aG0oc29sdXRpb24pCiAgICAgICAgICAgIHNlbGYubW92ZSgiVTIiLCBzb2x1dGlvbikKICAgICAgICAgICAgc2VsZi5hcHBseV9hbGdvcml0aG0oc29sdXRpb24pCiAgICAgICAgICAgIHNlbGYuYXBwbHlfYWxnb3JpdGhtKHNvbHV0aW9uKQogICAgICAgIGVsaWYgbGVuKHVwX3llbGxvd3MpID09IDI6CiAgICAgICAgICAgICMgSWYgbm90IGxpbmUgcG9zaXRpb24sIGl0J3MgTCBwb3NpdGlvbgogICAgICAgICAgICBpZiBub3QgKCdGVScgaW4gdXBfeWVsbG93cyBhbmQgJ0JVJyBpbiB1cF95ZWxsb3dzKSBhbmQgbm90ICgnUlUnIGluIHVwX3llbGxvd3MgYW5kICdMVScgaW4gdXBfeWVsbG93cyk6CiAgICAgICAgICAgICAgICAjIFJvdGF0ZSB1bnRpbCBMIGlzIGF0IEJVIC0gTFUKICAgICAgICAgICAgICAgIHdoaWxlIG5vdCAoc2VsZi5jdWJlLmN1Ymllc1snQlUnXS5jb2xvcl9mYWNpbmcoJ1knKSA9PSAnVScgYW5kIHNlbGYuY3ViZS5jdWJpZXNbJ0xVJ10uY29sb3JfZmFjaW5nKCdZJykgPT0gJ1UnKToKICAgICAgICAgICAgICAgICAgICBzZWxmLm1vdmUoIlUiLCBzb2x1dGlvbikKICAgICAgICAgICAgICAgIHNlbGYuYXBwbHlfYWxnb3JpdGhtKHNvbHV0aW9uKQogICAgICAgICAgICAjIFJvdGF0ZSB1bnRpbCBsaW5lIGlzIGF0IFJVIC0gTFUKICAgICAgICAgICAgd2hpbGUgbm90IChzZWxmLmN1YmUuY3ViaWVzWydSVSddLmNvbG9yX2ZhY2luZygnWScpID09ICdVJyBhbmQgc2VsZi5jdWJlLmN1Ymllc1snTFUnXS5jb2xvcl9mYWNpbmcoJ1knKSA9PSAnVScpOgogICAgICAgICAgICAgICAgc2VsZi5tb3ZlKCJVIiwgc29sdXRpb24pCiAgICAgICAgICAgICMgTGluZSBwb3NpdGlvbgogICAgICAgICAgICBzZWxmLmFwcGx5X2FsZ29yaXRobShzb2x1dGlvbikKCiAgICAgICAgcmV0dXJuIHNvbHV0aW9uCjx8ZmltX3N1ZmZpeHw+CmNsYXNzIFllbGxvd0Nyb3NzU29sdmVyKFNvbHZlcik6CiAgICBkZWYgYXBwbHlfYWxnb3JpdGhtKHNlbGYsIHNvbHV0aW9uKToKICAgICAgICBmb3IgbW92ZSBpbiBbIkYiLCAiUiIsICJVIiwgIlInIiwgIlUnIiwgIkYnIl06CiAgICAgICAgICAgIHNlbGYubW92ZShtb3ZlLCBzb2x1dGlvbikKPHxmaW1fZW5kfD4="]
["97b4473c28ebcc07df455170b0fd3fe3c28e218f-2","97b4473c28ebcc07df455170b0fd3fe3c28e218f","PHxmaW1fcHJlZml4fD4KZnJvbSAuLiBpbXBvcnQgU29sdmVyCmZyb20gcnViaWtfc29sdmVyLk1vdmUgaW1wb3J0IE1vdmUKCjx8ZmltX2hvbGV8PgoKICAgIGRlZiBtb3ZlKHNlbGYsIG0sIHNvbHV0aW9uKToKICAgICAgICBzZWxmLmN1YmUubW92ZShNb3ZlKG0pKQogICAgICAgIHNvbHV0aW9uLmFwcGVuZChtKQoKICAgIGRlZiBzb2x1dGlvbihzZWxmKToKICAgICAgICBzb2x1dGlvbiA9IFtdCiAgICAgICAgIyBBcHBseSBGIFIgVSBSJyBVJyBGJyBvbmNlLCB0d2ljZSBvciB0aHJpY2UKICAgICAgICB1cF95ZWxsb3dzID0gW2VkZ2UgZm9yIGVkZ2UgaW4gWydGVScsICdSVScsICdMVScsICdCVSddIGlmIHNlbGYuY3ViZS5jdWJpZXNbZWRnZV0uY29sb3JfZmFjaW5nKCdZJykgPT0gJ1UnXQoKICAgICAgICBpZiBsZW4odXBfeWVsbG93cykgPT0gMDoKICAgICAgICAgICAgc2VsZi5hcHBseV9hbGdvcml0aG0oc29sdXRpb24pCiAgICAgICAgICAgIHNlbGYubW92ZSgiVTIiLCBzb2x1dGlvbikKICAgICAgICAgICAgc2VsZi5hcHBseV9hbGdvcml0aG0oc29sdXRpb24pCiAgICAgICAgICAgIHNlbGYuYXBwbHlfYWxnb3JpdGhtKHNvbHV0aW9uKQogICAgICAgIGVsaWYgbGVuKHVwX3llbGxvd3MpID09IDI6CiAgICAgICAgICAgICMgSWYgbm90IGxpbmUgcG9zaXRpb24sIGl0J3MgTCBwb3NpdGlvbgogICAgICAgICAgICBpZiBub3QgKCdGVScgaW4gdXBfeWVsbG93cyBhbmQgJ0JVJyBpbiB1cF95ZWxsb3dzKSBhbmQgbm90ICgnUlUnIGluIHVwX3llbGxvd3MgYW5kICdMVScgaW4gdXBfeWVsbG93cyk6CiAgICAgICAgICAgICAgICAjIFJvdGF0ZSB1bnRpbCBMIGlzIGF0IEJVIC0gTFUKICAgICAgICAgICAgICAgIHdoaWxlIG5vdCAoc2VsZi5jdWJlLmN1Ymllc1snQlUnXS5jb2xvcl9mYWNpbmcoJ1knKSA9PSAnVScgYW5kIHNlbGYuY3ViZS5jdWJpZXNbJ0xVJ10uY29sb3JfZmFjaW5nKCdZJykgPT0gJ1UnKToKICAgICAgICAgICAgICAgICAgICBzZWxmLm1vdmUoIlUiLCBzb2x1dGlvbikKICAgICAgICAgICAgICAgIHNlbGYuYXBwbHlfYWxnb3JpdGhtKHNvbHV0aW9uKQogICAgICAgICAgICAjIFJvdGF0ZSB1bnRpbCBsaW5lIGlzIGF0IFJVIC0gTFUKICAgICAgICAgICAgd2hpbGUgbm90IChzZWxmLmN1YmUuY3ViaWVzWydSVSddLmNvbG9yX2ZhY2luZygnWScpID09ICdVJyBhbmQgc2VsZi5jdWJlLmN1Ymllc1snTFUnXS5jb2xvcl9mYWNpbmcoJ1knKSA9PSAnVScpOgogICAgICAgICAgICAgICAgc2VsZi5tb3ZlKCJVIiwgc29sdXRpb24pCiAgICAgICAgICAgICMgTGluZSBwb3NpdGlvbgogICAgICAgICAgICBzZWxmLmFwcGx5X2FsZ29yaXRobShzb2x1dGlvbikKCiAgICAgICAgcmV0dXJuIHNvbHV0aW9uCjx8ZmltX3N1ZmZpeHw+CmNsYXNzIFllbGxvd0Nyb3NzU29sdmVyKFNvbHZlcik6CiAgICBkZWYgYXBwbHlfYWxnb3JpdGhtKHNlbGYsIHNvbHV0aW9uKToKICAgICAgICBmb3IgbW92ZSBpbiBbIkYiLCAiUiIsICJVIiwgIlInIiwgIlUnIiwgIkYnIl06CiAgICAgICAgICAgIHNlbGYubW92ZShtb3ZlLCBzb2x1dGlvbikKPHxmaW1fZW5kfD4="]
["97b4473c28ebcc07df455170b0fd3fe3c28e218f-3","97b4473c28ebcc07df455170b0fd3fe3c28e218f","PHxmaW1fcHJlZml4fD4KZnJvbSAuLiBpbXBvcnQgU29sdmVyCmZyb20gcnViaWtfc29sdmVyLk1vdmUgaW1wb3J0IE1vdmUKCmNsYXNzIFllbGxvd0Nyb3NzU29sdmVyKFNvbHZlcik6CiAgICBkZWYgYXBwbHlfYWxnb3JpdGhtKHNlbGYsIHNvbHV0aW9uKToKICAgICAgICBmb3IgbW92ZSBpbiBbIkYiLCAiUiIsICJVIiwgIlInIiwgIlUnIiwgIkYnIl06CiAgICAgICAgICAgIHNlbGYubW92ZShtb3ZlLCBzb2x1dGlvbikKCiAgICBkZWYgbW92ZShzZWxmLCBtLCBzb2x1dGlvbik6CiAgICAgICAgc2VsZi5jdWJlLm1vdmUoTW92ZShtKSkKICAgICAgICBzb2x1dGlvbi5hcHBlbmQobSkKCiAgICBkZWYgc29sdXRpb24oc2VsZik6CiAgICAgICAgc29sdXRpb24gPSBbXQogICAgICAgICMgQXBwbHkgRiBSIFUgUicgVScgRicgb25jZSwgdHdpY2Ugb3IgdGhyaWNlCiAgICAgICAgdXBfeWVsbG93cyA9IFtlZGdlIGZvciBlZGdlIGluIFsnRlUnLCAnUlUnLCAnTFUnLCAnQlUnXSBpZiBzZWxmLmN1YmUuY3ViaWVzW2VkZ2VdLmNvbG9yX2ZhY2luZygnWScpID09ICdVJ10KCiAgICAgICAgaWYgbGVuKHVwX3llbGxvd3MpID09IDA6CiAgICAgICAgICAgIHNlbGYuYXBwbHlfYWxnb3JpdGhtKHNvbHV0aW9uKQogICAgICAgICAgICBzZWxmLm1vdmUoIlUyIiwgc29sdXRpb24pCiAgICAgICAgICAgIHNlbGYuYXBwbHlfYWxnb3JpdGhtKHNvbHV0aW9uKQogICAgICAgICAgICBzZWxmLmFwcGx5X2FsZ29yaXRobShzb2x1dGlvbikKICAgICAgICBlbGlmIGxlbih1cF95ZWxsb3dzKSA9PSAyOgogICAgICAgICAgICAjIElmIG5vdCBsaW5lIHBvc2l0aW9uLCBpdCdzIEwgcG9zaXRpb24KICAgICAgICAgICAgaWYgbm90ICgnRlUnIGluIHVwX3llbGxvd3MgYW5kICdCVScgaW4gdXBfeWVsbG93cykgYW5kIG5vdCAoJ1JVJyBpbiB1cF95ZWxsb3dzIGFuZCAnTFUnIGluIHVwX3llbGxvd3MpOgogICAgICAgICAgICAgICAgIyBSb3RhdGUgdW50aWwgTCBpcyBhdCBCVSAtIExVCiAgICAgICAgICAgICAgICB3aGlsZSBub3QgKHNlbGYuY3ViZS5jdWJpZXNbJ0JVJ10uY29sb3JfZmFjaW5nKCdZJykgPT0gJ1UnIGFuZCBzZWxmLmN1YmUuY3ViaWVzWydMVSddLmNvbG9yX2ZhY2luZygnWScpID09ICdVJyk6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5tb3ZlKCJVIiwgc29sdXRpb24pCiAgICAgICAgICAgICAgICBzZWxmLmFwcGx5X2FsZ29yaXRobShzb2x1dGlvbikKICAgICAgICAgICAgIyBSb3RhdGUgdW50aWwgbGluZSBpcyBhdCBSVSAtIExVCjx8ZmltX2hvbGV8PgoKICAgICAgICByZXR1cm4gc29sdXRpb24KPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgd2hpbGUgbm90IChzZWxmLmN1YmUuY3ViaWVzWydSVSddLmNvbG9yX2ZhY2luZygnWScpID09ICdVJyBhbmQgc2VsZi5jdWJlLmN1Ymllc1snTFUnXS5jb2xvcl9mYWNpbmcoJ1knKSA9PSAnVScpOgogICAgICAgICAgICAgICAgc2VsZi5tb3ZlKCJVIiwgc29sdXRpb24pCiAgICAgICAgICAgICMgTGluZSBwb3NpdGlvbgogICAgICAgICAgICBzZWxmLmFwcGx5X2FsZ29yaXRobShzb2x1dGlvbikKPHxmaW1fZW5kfD4="]
["97b4473c28ebcc07df455170b0fd3fe3c28e218f-4","97b4473c28ebcc07df455170b0fd3fe3c28e218f","PHxmaW1fcHJlZml4fD4KZnJvbSAuLiBpbXBvcnQgU29sdmVyCmZyb20gcnViaWtfc29sdmVyLk1vdmUgaW1wb3J0IE1vdmUKCmNsYXNzIFllbGxvd0Nyb3NzU29sdmVyKFNvbHZlcik6CiAgICBkZWYgYXBwbHlfYWxnb3JpdGhtKHNlbGYsIHNvbHV0aW9uKToKICAgICAgICBmb3IgbW92ZSBpbiBbIkYiLCAiUiIsICJVIiwgIlInIiwgIlUnIiwgIkYnIl06CiAgICAgICAgICAgIHNlbGYubW92ZShtb3ZlLCBzb2x1dGlvbikKCiAgICBkZWYgbW92ZShzZWxmLCBtLCBzb2x1dGlvbik6CiAgICAgICAgc2VsZi5jdWJlLm1vdmUoTW92ZShtKSkKICAgICAgICBzb2x1dGlvbi5hcHBlbmQobSkKCiAgICBkZWYgc29sdXRpb24oc2VsZik6CiAgICAgICAgc29sdXRpb24gPSBbXQogICAgICAgICMgQXBwbHkgRiBSIFUgUicgVScgRicgb25jZSwgdHdpY2Ugb3IgdGhyaWNlCiAgICAgICAgdXBfeWVsbG93cyA9IFtlZGdlIGZvciBlZGdlIGluIFsnRlUnLCAnUlUnLCAnTFUnLCAnQlUnXSBpZiBzZWxmLmN1YmUuY3ViaWVzW2VkZ2VdLmNvbG9yX2ZhY2luZygnWScpID09ICdVJ10KCiAgICAgICAgaWYgbGVuKHVwX3llbGxvd3MpID09IDA6CiAgICAgICAgICAgIHNlbGYuYXBwbHlfYWxnb3JpdGhtKHNvbHV0aW9uKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHNlbGYubW92ZSgiVTIiLCBzb2x1dGlvbikKICAgICAgICAgICAgc2VsZi5hcHBseV9hbGdvcml0aG0oc29sdXRpb24pCiAgICAgICAgICAgIHNlbGYuYXBwbHlfYWxnb3JpdGhtKHNvbHV0aW9uKQo8fGZpbV9lbmR8Pg=="]
["41cbf99a24ac5537a306d5ff0c8f678bd85e49d3-1","41cbf99a24ac5537a306d5ff0c8f678bd85e49d3","PHxmaW1fcHJlZml4fD4KIyBlbmNvZGluZzogdXRmLTgKX19hdXRob3JfXyA9ICdBbGVrc2VpIE1hbGl1dGluJwoiIiIKUmV2ZW51ZUFjY291bnQucHkKQ3JlYXRlZCBieSBsZXggYXQgMjAxOS0wMy0yNi4KIiIiCmZyb20gU2ltdWxhdGlvbi5BYnN0cmFjdC5BY2NvdW50IGltcG9ydCAqCgoKY2xhc3MgUmV2ZW51ZUFjY291bnQoQWNjb3VudCk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGVudiwgbmFtZSwgaW5pdGlhbFN0b2NrPU5vbmUpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oZW52LCBuYW1lLCBpbml0aWFsU3RvY2spCgogICAgICAgIHNlbGYuc2FsZXNPYnNlcnZlciA9IFJldmVudWVBY2NvdW50LlNhbGVzT2JzZXJ2ZXIoc2VsZikKCiAgICBkZWYgcHJvY2Vzc1NhbGVzKHNlbGYsIGxhc3RUcmFuc2FjdGlvbkRldGFpbHMpOgogICAgICAgIHRyYWRlX3JlYywgcmV2ZW51ZSwgdGF4LCBfLCBfID0gbGFzdFRyYW5zYWN0aW9uRGV0YWlscwogICAgICAgIGlmIHJldmVudWUgPiAwOgo8fGZpbV9ob2xlfD4KICAgIGNsYXNzIFNhbGVzT2JzZXJ2ZXIoT2JzZXJ2ZXIpOgogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRlcik6CiAgICAgICAgICAgIHNlbGYub3V0ZXIgPSBvdXRlcgoKICAgICAgICBkZWYgdXBkYXRlKHNlbGYsIG9ic2VydmFibGUsIGFyZ3MpOgogICAgICAgICAgICBmb3Igb2JzIGluIHNlbGYub3V0ZXIucHJvY2Vzc1NhbGVzKGFyZ3MpOgogICAgICAgICAgICAgICAgeWllbGQgb2JzCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHlpZWxkIHNlbGYuY29udGFpbmVyLnB1dChyZXZlbnVlKQoKPHxmaW1fZW5kfD4="]
["41cbf99a24ac5537a306d5ff0c8f678bd85e49d3-2","41cbf99a24ac5537a306d5ff0c8f678bd85e49d3","PHxmaW1fcHJlZml4fD4KIyBlbmNvZGluZzogdXRmLTgKX19hdXRob3JfXyA9ICdBbGVrc2VpIE1hbGl1dGluJwoiIiIKUmV2ZW51ZUFjY291bnQucHkKQ3JlYXRlZCBieSBsZXggYXQgMjAxOS0wMy0yNi4KIiIiCjx8ZmltX2hvbGV8PgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbnYsIG5hbWUsIGluaXRpYWxTdG9jaz1Ob25lKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKGVudiwgbmFtZSwgaW5pdGlhbFN0b2NrKQoKICAgICAgICBzZWxmLnNhbGVzT2JzZXJ2ZXIgPSBSZXZlbnVlQWNjb3VudC5TYWxlc09ic2VydmVyKHNlbGYpCgogICAgZGVmIHByb2Nlc3NTYWxlcyhzZWxmLCBsYXN0VHJhbnNhY3Rpb25EZXRhaWxzKToKICAgICAgICB0cmFkZV9yZWMsIHJldmVudWUsIHRheCwgXywgXyA9IGxhc3RUcmFuc2FjdGlvbkRldGFpbHMKICAgICAgICBpZiByZXZlbnVlID4gMDoKICAgICAgICAgICAgeWllbGQgc2VsZi5jb250YWluZXIucHV0KHJldmVudWUpCgogICAgY2xhc3MgU2FsZXNPYnNlcnZlcihPYnNlcnZlcik6CiAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dGVyKToKICAgICAgICAgICAgc2VsZi5vdXRlciA9IG91dGVyCgogICAgICAgIGRlZiB1cGRhdGUoc2VsZiwgb2JzZXJ2YWJsZSwgYXJncyk6CiAgICAgICAgICAgIGZvciBvYnMgaW4gc2VsZi5vdXRlci5wcm9jZXNzU2FsZXMoYXJncyk6CiAgICAgICAgICAgICAgICB5aWVsZCBvYnMKPHxmaW1fc3VmZml4fD4KZnJvbSBTaW11bGF0aW9uLkFic3RyYWN0LkFjY291bnQgaW1wb3J0ICoKCgpjbGFzcyBSZXZlbnVlQWNjb3VudChBY2NvdW50KToKPHxmaW1fZW5kfD4="]
["41cbf99a24ac5537a306d5ff0c8f678bd85e49d3-3","41cbf99a24ac5537a306d5ff0c8f678bd85e49d3","PHxmaW1fcHJlZml4fD4KIyBlbmNvZGluZzogdXRmLTgKX19hdXRob3JfXyA9ICdBbGVrc2VpIE1hbGl1dGluJwoiIiIKUmV2ZW51ZUFjY291bnQucHkKQ3JlYXRlZCBieSBsZXggYXQgMjAxOS0wMy0yNi4KIiIiCmZyb20gU2ltdWxhdGlvbi5BYnN0cmFjdC5BY2NvdW50IGltcG9ydCAqCgoKY2xhc3MgUmV2ZW51ZUFjY291bnQoQWNjb3VudCk6Cgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgX19pbml0X18oc2VsZiwgZW52LCBuYW1lLCBpbml0aWFsU3RvY2s9Tm9uZSk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhlbnYsIG5hbWUsIGluaXRpYWxTdG9jaykKCiAgICAgICAgc2VsZi5zYWxlc09ic2VydmVyID0gUmV2ZW51ZUFjY291bnQuU2FsZXNPYnNlcnZlcihzZWxmKQo8fGZpbV9lbmR8Pg=="]
["41cbf99a24ac5537a306d5ff0c8f678bd85e49d3-4","41cbf99a24ac5537a306d5ff0c8f678bd85e49d3","PHxmaW1fcHJlZml4fD4KIyBlbmNvZGluZzogdXRmLTgKX19hdXRob3JfXyA9ICdBbGVrc2VpIE1hbGl1dGluJwoiIiIKUmV2ZW51ZUFjY291bnQucHkKQ3JlYXRlZCBieSBsZXggYXQgMjAxOS0wMy0yNi4KIiIiCmZyb20gU2ltdWxhdGlvbi5BYnN0cmFjdC5BY2NvdW50IGltcG9ydCAqCgoKY2xhc3MgUmV2ZW51ZUFjY291bnQoQWNjb3VudCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBkZWYgX19pbml0X18oc2VsZiwgZW52LCBuYW1lLCBpbml0aWFsU3RvY2s9Tm9uZSk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhlbnYsIG5hbWUsIGluaXRpYWxTdG9jaykKCjx8ZmltX2VuZHw+"]
["c12a602f1723543caed3450380dcfcbd489b1424-1","c12a602f1723543caed3450380dcfcbd489b1424","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBmbGFzayBpbXBvcnQgQmx1ZXByaW50CgpibHVlcHJpbnQgPSBCbHVlcHJpbnQoJ2luZGV4JywgX19uYW1lX18pCgo8fGZpbV9lbmR8Pg=="]
["ec1af49fb51e9dad7e117f95dfb85685cc934e48-1","ec1af49fb51e9dad7e117f95dfb85685cc934e48","PHxmaW1fcHJlZml4fD4KZnJvbSBrZXJhcyBpbXBvcnQgbGF5ZXJzLCBjb25zdHJhaW50cwpmcm9tIGtlcmFzIGltcG9ydCBiYWNrZW5kIGFzIEsKCgpjbGFzcyBQUmVMVTIobGF5ZXJzLlBSZUxVKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhbHBoYV9pbml0aWFsaXplcj0nemVyb3MnLCBhbHBoYV9yZWd1bGFyaXplcj1Ob25lLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgYWxwaGFfY29uc3RyYWludD1Ob25lLCBzaGFyZWRfYXhlcz1Ob25lLCAqKmt3YXJncyk6Cjx8ZmltX2VuZHw+"]
["ec1af49fb51e9dad7e117f95dfb85685cc934e48-2","ec1af49fb51e9dad7e117f95dfb85685cc934e48","PHxmaW1fcHJlZml4fD4KZnJvbSBrZXJhcyBpbXBvcnQgbGF5ZXJzLCBjb25zdHJhaW50cwpmcm9tIGtlcmFzIGltcG9ydCBiYWNrZW5kIGFzIEsKCgpjbGFzcyBQUmVMVTIobGF5ZXJzLlBSZUxVKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhbHBoYV9pbml0aWFsaXplcj0nemVyb3MnLCBhbHBoYV9yZWd1bGFyaXplcj1Ob25lLAogICAgICAgICAgICAgICAgIGFscGhhX2NvbnN0cmFpbnQ9Tm9uZSwgc2hhcmVkX2F4ZXM9Tm9uZSwgKiprd2FyZ3MpOgogICAgICAgIHN1cGVyKGxheWVycy5QUmVMVSwgc2VsZikuX19pbml0X18oKiprd2FyZ3MpCiAgICAgICAgc2VsZi5zdXBwb3J0c19tYXNraW5nID0gVHJ1ZQogICAgICAgIHNlbGYuYWxwaGFfaW5pdGlhbGl6ZXIgPSBsYXllcnMuaW5pdGlhbGl6ZXJzLmdldChhbHBoYV9pbml0aWFsaXplcikKICAgICAgICBzZWxmLmFscGhhX3JlZ3VsYXJpemVyID0gbGF5ZXJzLnJlZ3VsYXJpemVycy5nZXQoYWxwaGFfcmVndWxhcml6ZXIpCiAgICAgICAgc2VsZi5hbHBoYV9jb25zdHJhaW50ID0gY29uc3RyYWludHMuZ2V0KGFscGhhX2NvbnN0cmFpbnQpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLl9fbmFtZV9fID0gJ1BSZUxVJwogICAgICAgIGlmIHNoYXJlZF9heGVzIGlzIE5vbmU6CiAgICAgICAgICAgIHNlbGYuc2hhcmVkX2F4ZXMgPSBOb25lCiAgICAgICAgZWxzZToKPHxmaW1fZW5kfD4="]
["ec1af49fb51e9dad7e117f95dfb85685cc934e48-3","ec1af49fb51e9dad7e117f95dfb85685cc934e48","PHxmaW1fcHJlZml4fD4KZnJvbSBrZXJhcyBpbXBvcnQgbGF5ZXJzLCBjb25zdHJhaW50cwpmcm9tIGtlcmFzIGltcG9ydCBiYWNrZW5kIGFzIEsKCgpjbGFzcyBQUmVMVTIobGF5ZXJzLlBSZUxVKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhbHBoYV9pbml0aWFsaXplcj0nemVyb3MnLCBhbHBoYV9yZWd1bGFyaXplcj1Ob25lLAogICAgICAgICAgICAgICAgIGFscGhhX2NvbnN0cmFpbnQ9Tm9uZSwgc2hhcmVkX2F4ZXM9Tm9uZSwgKiprd2FyZ3MpOgogICAgICAgIHN1cGVyKGxheWVycy5QUmVMVSwgc2VsZikuX19pbml0X18oKiprd2FyZ3MpCiAgICAgICAgc2VsZi5zdXBwb3J0c19tYXNraW5nID0gVHJ1ZQogICAgICAgIHNlbGYuYWxwaGFfaW5pdGlhbGl6ZXIgPSBsYXllcnMuaW5pdGlhbGl6ZXJzLmdldChhbHBoYV9pbml0aWFsaXplcikKICAgICAgICBzZWxmLmFscGhhX3JlZ3VsYXJpemVyID0gbGF5ZXJzLnJlZ3VsYXJpemVycy5nZXQoYWxwaGFfcmVndWxhcml6ZXIpCiAgICAgICAgc2VsZi5hbHBoYV9jb25zdHJhaW50ID0gY29uc3RyYWludHMuZ2V0KGFscGhhX2NvbnN0cmFpbnQpCiAgICAgICAgc2VsZi5fX25hbWVfXyA9ICdQUmVMVScKICAgICAgICBpZiBzaGFyZWRfYXhlcyBpcyBOb25lOgo8fGZpbV9ob2xlfD4KICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLnNoYXJlZF9heGVzID0gbGF5ZXJzLnRvX2xpc3Qoc2hhcmVkX2F4ZXMsIGFsbG93X3R1cGxlPVRydWUpCgoKY2xhc3MgTGVha3lSZUxVMihsYXllcnMuTGVha3lSZUxVKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhbHBoYT0wLjMsICoqa3dhcmdzKToKICAgICAgICBzdXBlcihsYXllcnMuTGVha3lSZUxVLCBzZWxmKS5fX2luaXRfXygqKmt3YXJncykKICAgICAgICBzZWxmLl9fbmFtZV9fID0gJ0xlYWt5UmVMVTInCiAgICAgICAgc2VsZi5zdXBwb3J0c19tYXNraW5nID0gVHJ1ZQogICAgICAgIHNlbGYuYWxwaGEgPSBLLmNhc3RfdG9fZmxvYXR4KGFscGhhKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBzZWxmLnNoYXJlZF9heGVzID0gTm9uZQo8fGZpbV9lbmR8Pg=="]
["ec1af49fb51e9dad7e117f95dfb85685cc934e48-4","ec1af49fb51e9dad7e117f95dfb85685cc934e48","PHxmaW1fcHJlZml4fD4KZnJvbSBrZXJhcyBpbXBvcnQgbGF5ZXJzLCBjb25zdHJhaW50cwpmcm9tIGtlcmFzIGltcG9ydCBiYWNrZW5kIGFzIEsKCgpjbGFzcyBQUmVMVTIobGF5ZXJzLlBSZUxVKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhbHBoYV9pbml0aWFsaXplcj0nemVyb3MnLCBhbHBoYV9yZWd1bGFyaXplcj1Ob25lLAogICAgICAgICAgICAgICAgIGFscGhhX2NvbnN0cmFpbnQ9Tm9uZSwgc2hhcmVkX2F4ZXM9Tm9uZSwgKiprd2FyZ3MpOgogICAgICAgIHN1cGVyKGxheWVycy5QUmVMVSwgc2VsZikuX19pbml0X18oKiprd2FyZ3MpCiAgICAgICAgc2VsZi5zdXBwb3J0c19tYXNraW5nID0gVHJ1ZQogICAgICAgIHNlbGYuYWxwaGFfaW5pdGlhbGl6ZXIgPSBsYXllcnMuaW5pdGlhbGl6ZXJzLmdldChhbHBoYV9pbml0aWFsaXplcikKICAgICAgICBzZWxmLmFscGhhX3JlZ3VsYXJpemVyID0gbGF5ZXJzLnJlZ3VsYXJpemVycy5nZXQoYWxwaGFfcmVndWxhcml6ZXIpCiAgICAgICAgc2VsZi5hbHBoYV9jb25zdHJhaW50ID0gY29uc3RyYWludHMuZ2V0KGFscGhhX2NvbnN0cmFpbnQpCiAgICAgICAgc2VsZi5fX25hbWVfXyA9ICdQUmVMVScKICAgICAgICBpZiBzaGFyZWRfYXhlcyBpcyBOb25lOgogICAgICAgICAgICBzZWxmLnNoYXJlZF9heGVzID0gTm9uZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYuc2hhcmVkX2F4ZXMgPSBsYXllcnMudG9fbGlzdChzaGFyZWRfYXhlcywgYWxsb3dfdHVwbGU9VHJ1ZSkKCgpjbGFzcyBMZWFreVJlTFUyKGxheWVycy5MZWFreVJlTFUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFscGhhPTAuMywgKiprd2FyZ3MpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc3VwZXIobGF5ZXJzLkxlYWt5UmVMVSwgc2VsZikuX19pbml0X18oKiprd2FyZ3MpCiAgICAgICAgc2VsZi5fX25hbWVfXyA9ICdMZWFreVJlTFUyJwogICAgICAgIHNlbGYuc3VwcG9ydHNfbWFza2luZyA9IFRydWUKICAgICAgICBzZWxmLmFscGhhID0gSy5jYXN0X3RvX2Zsb2F0eChhbHBoYSkKPHxmaW1fZW5kfD4="]
["e756c96cdf5afa1e045aa0e63e2a994981ecea5a-1","e756c96cdf5afa1e045aa0e63e2a994981ecea5a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IHNodXRpbAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpkYXRhc2V0X3BhdGggPW9zLnBhdGguam9pbihvcy5nZXRjd2QoKSArICIvREIvUGxhdGUvIikKcGF0aHM9IFsiREIvdHJhaW4iLCAiREIvdGVzdCIsICJEQi92YWxpZGF0aW9uIl0KZm9yIHBhdGggaW4gcGF0aHM6CiAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihwYXRoKToKPHxmaW1fZW5kfD4="]
["ec3d4c84b70e346f1750d71b1cf012924ab994db-1","ec3d4c84b70e346f1750d71b1cf012924ab994db",{"$cut":{"chars":36832,"head":"PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOnV0Zi04IC0qLQoiIiIKQ3JlYXRlZCBvbiBXZWQgTm92IDIxIDA5OjMzIDIwMTkKCkBhdXRob3IgSnVsaWVuIFdhbHpiZXJnIC0gSnVsaWVuLldhbHpiZXJnQG5yZWwuZ292CgpNb2RlbCAtIGFnZW50LWJhc2VkIHNpbXVsYXRpb25zIG9mIHRoZSBjaXJjdWxhciBlY29ub215IChBQlNpQ0UpCiIiIgoKZnJvbSBtZXNhIGltcG9ydCBNb2RlbApmcm9tIEFCTV9DRV9QVl9Db25zdW1lckFnZW50cyBpbXBvcnQgQ29uc3VtZXJzCmZyb20gQUJNX0NFX1BWX1JlY3ljbGVyQWdlbnRzIGltcG9ydCBSZWN5Y2xlcnMKZnJvbSBBQk1fQ0VfUFZfUmVmdXJiaXNoZXJBZ2VudHMgaW1wb3J0IFJlZnVyYmlzaGVycwpmcm9tIEFCTV9DRV9QVl9Qcm9kdWNlckFnZW50cyBpbXBvcnQgUHJvZHVjZXJzCmZyb20gbWVzYS50aW1lIGltcG9ydCBCYXNlU2NoZWR1bGVyCmZyb20gbWVzYS5zcGFjZSBpbXBvcnQgTmV0d29ya0dyaWQKZnJvbSBtZXNhLmRhdGFjb2xsZWN0aW9uIGltcG9ydCBEYXRhQ29sbGVjdG9yCmltcG9ydCBuZXR3b3JreCBhcyBueAppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBtYXRoIGltcG9ydCAqCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgcmFuZG9tCgoKY2xhc3MgQUJNX0NFX1BWKE1vZGVsKToKICAgICIiIgogICAgSW50cm86CiAgICBUaGUgYWdlbnQtYmFzZWQgc2ltdWxhdGlvbnMgb2YgdGhlIGNpcmN1bGFyIGVjb25vbXkgKEFCU2lDRSkgbW9kZWwgaXMgYW4KICAgIGFnZW50LWJhc2VkIG1vZGVsIGJhc2VkIG9uIHZhcmlvdXMgd29yayAoZS5nLiwgVG9uZyBldCBhbC4gMjAxOAogICAgYW5kIEdoYWxpIGV0IGFsLiAyMDE3LCBJUkVOQS1JRUEgMjAxNi4uLikuIFRoaXMgaW5zdGFuY2Ugb2YgdGhlIG1vZGVsCiAgICBzaW11bGF0ZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgY2lyY3VsYXIgZWNvbm9teSAoQ0UpIHN0cmF0ZWdpZXMuCgogICAgUHVycG9zZToKICAgIEFCU2lDRSBhaW1zIGF0IHNpbXVsYXRpbmcgdGhlIGFkb3B0aW9uIG9mIHZhcmlvdXMgdmFyaW91cyBDRSBzdHJhdGVnaWVzLgogICAgTW9yZSBzcGVjaWZpY2FsbHksIHRoZSBtb2RlbCBlbmFibGVzIGV4cGxvcmluZyB0aGUgZWZmZWN0IG9mIHZhcmlvdXMgcG9saWN5CiAgICBvciB0ZWNobm8tZWNvbm9taWMgZmFjdG9ycyBvbiB0aGUgYWRvcHRpb24gb2YgdGhlIENFIHN0cmF0ZWdpZXMgYnkgYQogICAgc3lzdGVtJ3MgYWN0b3JzLiAoRGVmYXVsdCB2YWx1ZXMgYXJlIGZvciB0aGUgY2FzZSBzdHVkeSBvZiB0aGUgcGhvdG92b2x0YWljCiAgICAoUFYpIGluZHVzdHJ5LCBmdW5jdGlvbmFsIHVuaXQgPSBXcCkuCgogICAgSG93IHRvIHVzZSBpdDoKICAgIENoYW5nZSB0aGUgbW9kZWwncyBhdHRyaWJ1dGVzJyB2YWx1ZXMgaWYgbmVlZGVkIGluIHRoZSBBQk1fQ0VfUFZfQmF0Y2hSdW4KICAgIG9yIEFCTV9DRV9QVl9NdWx0aXBsZVJ1biBmaWxlcyBhbmQgcnVuIHRoZSBtb2RlbCBmcm9tIGVpdGhlciBvZiB0aG9zZQogICAgZmlsZXMuCgogICAgQXR0cmlidXRlczoKICAgICAgICBzZWVkICh0byBmaXggcmFuZG9tIG51bWJlcnMpLCAoZGVmYXVsdD1Ob25lKS4gTW9kZWxlcidzIGNob2ljZS4KICAgICAgICBjYWxpYnJhdGlvbl9uX3NlbnNpdGl2aXR5MSAodXNlIHRvIHZhcnkgbGlzdCBwYXJhbWV0ZXJzIG9yCiAgICAgICAgICAgIGRpY3Rpb25uYXJpZXMpLCAoZGVmYXVsdD0xKS4gTW9kZWxlcidzIGNob2ljZS4KICAgICAgICBjYWxpYnJhdGlvbl9uX3NlbnNpdGl2aXR5XzIgKHVzZSB0byB2YXJ5IGxpc3QgcGFyYW1ldGVycyBvcgogICAgICAgICAgICBkaWN0aW9ubmFyaWVzKSwgKGRlZmF1bHQ9MSkuIE1vZGVsZXIncyBjaG9pY2UuCiAgICAgICAgbnVtX2NvbnN1bWVycywgKGRlZmF1bHQ9MTAwMCkuIFNpbXBsaWZ5aW5nIGFzc3VtcHRpb24KICAgICAgICBjb25zdW1lcnNfbm9kZV9kZWdyZWUsIChkZWZhdWx0PTUpLiBGcm9tIFNtYWxsLVdvcmxkIGxpdGVyYXR1cmUuCiAgICAgICAgY29uc3VtZXJzX25ldHdvcmtfdHlwZT0oInNtYWxsLXdvcmxkIiwgImNvbXBsZXRlIGdyYXBoIiwgInJhbmRvbSIKICAgICAgICAgICAgImN5Y2xlIGdyYXBoIiwgInNjYWxlLWZyZWUgZ3JhcGgiKSwgKGRlZmF1bHQ9InNtYWxsLXdvcmxkIikuCiAgICAgICAgICAgIEZyb20gU21hbGwtV29ybGQgbGl0ZXJhdHVyZSAoZS5nLiwgQnlya2EgZXQgYWwuIDIwMTYpLgogICAgICAgIG51bV9yZWN5Y2xlcnMsIChkZWZhdWx0PTE2KS4gMTYgRnJvbSBTRUlBLCAyMDE5LgogICAgICAgIG51bV9wcm9kdWNlcnMsIChkZWZhdWx0PTYwKS4gU2ltcGxpZnlpbmcgYXNzdW1wdGlvbi4KICAgICAgICBwcm9kX25fcmVjeWNfbm9kZV9kZWdyZWUsIChkZWZhdWx0PTUpLiBGcm9tIFNtYWxsLVdvcmxkIGxpdGVyYXR1cmUuCiAgICAgICAgcHJvZF9uX3JlY3ljX25ldHdvcmtfdHlwZSwgKGRlZmF1bHQ9InNtYWxsLXdvcmxkIikuIEZyb20gU21hbGwtV29ybGQKICAgICAgICAgICAgYW5kIGluZHVzdHJpYWwgc3ltYmlvc2lzIGxpdGVyYXR1cmUgKGUuZy4sIERvbcOpbmVjaCAmIERhdmllcywKICAgICAgICAgICAgMjAxMSkuCiAgICAgICAgbnVtX3JlZnVyYmlzaGVycywgKGRlZmF1bHQ9MTUpLiBGcm9tIFdvb2QgTWFja2VuemllLCAyMDE5LgogICAgICAgIGNvbnN1bWVyc19kaXN0cmlidXRpb24gKGFsbG9jYXRpb24gb2YgZGlmZmVyZW50IHR5cGVzIG9mIGNvbnN1bWVycyksCiAgICAgICAgICAgIChkZWZhdWx0PXsicmVzaWRlbnRpYWwiOiAxLCAiY29tbWVyY2lhbCI6IDAuLCAidXRpbGl0eSI6IDAufSkuCiAgICAgICAgICAgIChPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYmFzZWQgb24gRUlBLCAyMDE5IGFuZCBTQkUgY291bmNpbCwgMjAxOToKICAgICAgICAgICAgcmVzaWRlbnRpYWw9MC43NSwgY29tbWVyY2lhbD0wLjIgYW5kIHV0aWxpdHk9MC4wNSkuCiAgICAgICAgaW5pdF9lb2xfcmF0ZSAoZGljdGlvbmFyeSB3aXRoIGluaXRpYWwgZW5kLW9mLWxpZmUgKEVPTCkgcmF0aW9zKSwKICAgICAgICAgICAgKGRlZmF1bHQ9eyJyZXBhaXIiOiAwLjAwNSwgInNl"}}]
["ec3d4c84b70e346f1750d71b1cf012924ab994db-2","ec3d4c84b70e346f1750d71b1cf012924ab994db","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOnV0Zi04IC0qLQoiIiIKQ3JlYXRlZCBvbiBXZWQgTm92IDIxIDA5OjMzIDIwMTkKCkBhdXRob3IgSnVsaWVuIFdhbHpiZXJnIC0gSnVsaWVuLldhbHpiZXJnQG5yZWwuZ292CgpNb2RlbCAtIGFnZW50LWJhc2VkIHNpbXVsYXRpb25zIG9mIHRoZSBjaXJjdWxhciBlY29ub215IChBQlNpQ0UpCiIiIgoKZnJvbSBtZXNhIGltcG9ydCBNb2RlbApmcm9tIEFCTV9DRV9QVl9Db25zdW1lckFnZW50cyBpbXBvcnQgQ29uc3VtZXJzCmZyb20gQUJNX0NFX1BWX1JlY3ljbGVyQWdlbnRzIGltcG9ydCBSZWN5Y2xlcnMKZnJvbSBBQk1fQ0VfUFZfUmVmdXJiaXNoZXJBZ2VudHMgaW1wb3J0IFJlZnVyYmlzaGVycwpmcm9tIEFCTV9DRV9QVl9Qcm9kdWNlckFnZW50cyBpbXBvcnQgUHJvZHVjZXJzCmZyb20gbWVzYS50aW1lIGltcG9ydCBCYXNlU2NoZWR1bGVyCmZyb20gbWVzYS5zcGFjZSBpbXBvcnQgTmV0d29ya0dyaWQKZnJvbSBtZXNhLmRhdGFjb2xsZWN0aW9uIGltcG9ydCBEYXRhQ29sbGVjdG9yCmltcG9ydCBuZXR3b3JreCBhcyBueAppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBtYXRoIGltcG9ydCAqCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgcmFuZG9tCgoKY2xhc3MgQUJNX0NFX1BWKE1vZGVsKToKICAgICIiIgogICAgSW50cm86CiAgICBUaGUgYWdlbnQtYmFzZWQgc2ltdWxhdGlvbnMgb2YgdGhlIGNpcmN1bGFyIGVjb25vbXkgKEFCU2lDRSkgbW9kZWwgaXMgYW4KICAgIGFnZW50LWJhc2VkIG1vZGVsIGJhc2VkIG9uIHZhcmlvdXMgd29yayAoZS5nLiwgVG9uZyBldCBhbC4gMjAxOAogICAgYW5kIEdoYWxpIGV0IGFsLiAyMDE3LCBJUkVOQS1JRUEgMjAxNi4uLikuIFRoaXMgaW5zdGFuY2Ugb2YgdGhlIG1vZGVsCiAgICBzaW11bGF0ZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgY2lyY3VsYXIgZWNvbm9teSAoQ0UpIHN0cmF0ZWdpZXMuCgogICAgUHVycG9zZToKICAgIEFCU2lDRSBhaW1zIGF0IHNpbXVsYXRpbmcgdGhlIGFkb3B0aW9uIG9mIHZhcmlvdXMgdmFyaW91cyBDRSBzdHJhdGVnaWVzLgogICAgTW9yZSBzcGVjaWZpY2FsbHksIHRoZSBtb2RlbCBlbmFibGVzIGV4cGxvcmluZyB0aGUgZWZmZWN0IG9mIHZhcmlvdXMgcG9saWN5CiAgICBvciB0ZWNobm8tZWNvbm9taWMgZmFjdG9ycyBvbiB0aGUgYWRvcHRpb24gb2YgdGhlIENFIHN0cmF0ZWdpZXMgYnkgYQogICAgc3lzdGVtJ3MgYWN0b3JzLiAoRGVmYXVsdCB2YWx1ZXMgYXJlIGZvciB0aGUgY2FzZSBzdHVkeSBvZiB0aGUgcGhvdG92b2x0YWljCiAgICAoUFYpIGluZHVzdHJ5LCBmdW5jdGlvbmFsIHVuaXQgPSBXcCkuCgogICAgSG93IHRvIHVzZSBpdDoKICAgIENoYW5nZSB0aGUgbW9kZWwncyBhdHRyaWJ1dGVzJyB2YWx1ZXMgaWYgbmVlZGVkIGluIHRoZSBBQk1fQ0VfUFZfQmF0Y2hSdW4KICAgIG9yIEFCTV9DRV9QVl9NdWx0aXBsZVJ1biBmaWxlcyBhbmQgcnVuIHRoZSBtb2RlbCBmcm9tIGVpdGhlciBvZiB0aG9zZQogICAgZmlsZXMuCgogICAgQXR0cmlidXRlczoKICAgICAgICBzZWVkICh0byBmaXggcmFuZG9tIG51bWJlcnMpLCAoZGVmYXVsdD1Ob25lKS4gTW9kZWxlcidzIGNob2ljZS4KICAgICAgICBjYWxpYnJhdGlvbl9uX3NlbnNpdGl2aXR5MSAodXNlIHRvIHZhcnkgbGlzdCBwYXJhbWV0ZXJzIG9yCiAgICAgICAgICAgIGRpY3Rpb25uYXJpZXMpLCAoZGVmYXVsdD0xKS4gTW9kZWxlcidzIGNob2ljZS4KICAgICAgICBjYWxpYnJhdGlvbl9uX3NlbnNpdGl2aXR5XzIgKHVzZSB0byB2YXJ5IGxpc3QgcGFyYW1ldGVycyBvcgogICAgICAgICAgICBkaWN0aW9ubmFyaWVzKSwgKGRlZmF1bHQ9MSkuIE1vZGVsZXIncyBjaG9pY2UuCiAgICAgICAgbnVtX2NvbnN1bWVycywgKGRlZmF1bHQ9MTAwMCkuIFNpbXBsaWZ5aW5nIGFzc3VtcHRpb24KICAgICAgICBjb25zdW1lcnNfbm9kZV9kZWdyZWUsIChkZWZhdWx0PTUpLiBGcm9tIFNtYWxsLVdvcmxkIGxpdGVyYXR1cmUuCiAgICAgICAgY29uc3VtZXJzX25ldHdvcmtfdHlwZT0oInNtYWxsLXdvcmxkIiwgImNvbXBsZXRlIGdyYXBoIiwgInJhbmRvbSIKICAgICAgICAgICAgImN5Y2xlIGdyYXBoIiwgInNjYWxlLWZyZWUgZ3JhcGgiKSwgKGRlZmF1bHQ9InNtYWxsLXdvcmxkIikuCiAgICAgICAgICAgIEZyb20gU21hbGwtV29ybGQgbGl0ZXJhdHVyZSAoZS5nLiwgQnlya2EgZXQgYWwuIDIwMTYpLgogICAgICAgIG51bV9yZWN5Y2xlcnMsIChkZWZhdWx0PTE2KS4gMTYgRnJvbSBTRUlBLCAyMDE5LgogICAgICAgIG51bV9wcm9kdWNlcnMsIChkZWZhdWx0PTYwKS4gU2ltcGxpZnlpbmcgYXNzdW1wdGlvbi4KICAgICAgICBwcm9kX25fcmVjeWNfbm9kZV9kZWdyZWUsIChkZWZhdWx0PTUpLiBGcm9tIFNtYWxsLVdvcmxkIGxpdGVyYXR1cmUuCiAgICAgICAgcHJvZF9uX3JlY3ljX25ldHdvcmtfdHlwZSwgKGRlZmF1bHQ9InNtYWxsLXdvcmxkIikuIEZyb20gU21hbGwtV29ybGQKICAgICAgICAgICAgYW5kIGluZHVzdHJpYWwgc3ltYmlvc2lzIGxpdGVyYXR1cmUgKGUuZy4sIERvbcOpbmVjaCAmIERhdmllcywKICAgICAgICAgICAgMjAxMSkuCiAgICAgICAgbnVtX3JlZnVyYmlzaGVycywgKGRlZmF1bHQ9MTUpLiBGcm9tIFdvb2QgTWFja2VuemllLCAyMDE5LgogICAgICAgIGNvbnN1bWVyc19kaXN0cmlidXRpb24gKGFsbG9jYXRpb24gb2YgZGlmZmVyZW50IHR5cGVzIG9mIGNvbnN1bWVycyksCiAgICAgICAgICAgIChkZWZhdWx0PXsicmVzaWRlbnRpYWwiOiAxLCAiY29tbWVyY2lhbCI6IDAuLCAidXRpbGl0eSI6IDAufSkuCiAgICAgICAgICAgIChPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYmFzZWQgb24gRUlBLCAyMDE5IGFuZCBTQkUgY291bmNpbCwgMjAxOToKICAgICAgICAgICAgcmVzaWRlbnRpYWw9MC43NSwgY29tbWVyY2lhbD0wLjIgYW5kIHV0aWxpdHk9MC4wNSkuCiAgICAgICAgaW5pdF9lb2xfcmF0ZSAoZGljdGlvbmFyeSB3aXRoIGluaXRpYWwgZW5kLW9mLWxpZmUgKEVPTCkgcmF0aW9zKSwKICAgICAgICAgICAgKGRlZmF1bHQ9eyJyZXBhaXIiOiAwLjAwNSwgInNlbGwiOiAwLjAyLCAicmVjeWNsZSI6IDAuMSwKICAgICAgICAgICAgImxhbmRmaWxsIjogMC40Mzc1LCAiaG9hcmQiOiAwLjQzNzV9KS4gRnJvbSBNb250ZWlybyBMdW5hcmRpCiAgICAgICAgICAgIGV0IGFsIDIwMTggYW5kIEV1cm9wZWFuIENvbW1pc3Npb24gKDIwMTUpLgogICAgICAgIGluaXRfcHVyY2hhc2VfY2hvaWNlIChkaWN0aW9uYXJ5IHdpdGggaW5pdGlhbCBwdXJjaGFzZSByYXRpb3MpLAogICAgICAgICAgICAoZGVmYXVsdD17Im5ldyI6IDAuOTgsICJ1c2VkIjogMC4wMiwgImNlcnRpZmllZCI6IDB9KS4gRnJvbQogICAgICAgICAgICBFdXJvcGVhbiBDb21taXNzaW9uICgyMDE1KS4KICAgICAgICB0b3RhbF9udW1iZXJfcHJvZHVjdCAoYSBsaXN0IGZvciB0aGUgd2hvbGUgcG9wdWxhdGlvbiBlLmcuCiAgICAgICAgICAgICh0aW1lIHNlcmllcyBvZiBwcm9kdWN0IHF1YW50aXR5KSkgKGluIHVuaXQgb2YgZnVuY3Rpb25hbAogICAgICAgICAgICB1bml0IChmdSksIGV4YW1wbGVzIG9mIGZ1OiBXcCBmb3IgUFYsIEJpdCBmb3IgaGFyZCBkcml2ZSksICgKICAgICAgICAgICAgZGVmYXVsdD1bMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDEzOSwgMjUxLCAzNzgsIDczOSwgMTY3MCwKICAgICAgICAgICAgMjkzNSwgNDE0NiwgNTQzMiwgNjUyNSwgMzYwOSwgNDIwNywgNDkwNSwgNTcxOV0pLiBGcm9tIElSRU5BLUlFQQogICAgICAgICAgICAyMDE2IChhc3N1bWluZyB0aGF0IDg3JSBvZiB0aGUgUFYgbWFya2V0IGlzIGMtU2kpLgogICAgICAgIHByb2R1Y3RfZGlzdHJpYnV0aW9uIChyYXRpb3Mgb2YgcHJvZHVjdCBhbW9uZyBjb25zdW1lciB0eXBlcyksIChkZWZhdWx0CiAgICAgICAgICAgID17InJlc2lkZW50aWFsIjogMSwgImNvbW1lcmNpYWwiOiAwLiwgInV0aWxpdHkiOiAwLn0pLiAoT3RoZXIKICAgICAgICAgICAgcG9zc2libGUgdmFsdWVzIGJhc2VkIG9uIEJvbGluZ2VyIGV0IGFsLiAyMDE4OiByZXNpZGVudGlhbD0wLjIxLAogICAgICAgICAgICBjb21tZXJjaWFsPTAuMTggYW5kIHV0aWxpdHk9MC42MSkuCiAgICAgICAgcHJvZHVjdF9ncm93dGggKGEgbGlzdCBmb3IgYSBwaWVjZXdpc2UgZnVuY3Rpb24pIChyYXRpbyksIChkZWZhdWx0PQogICAgICAgICAgICBbMC4xNjYsIDAuMDQ1XSkuIEZyb20gSVJFTkEtSUVBIDIwMTYKICAgICAgICBncm93dGhfdGhyZXNob2xkLCAoZGVmYXVsdD0xMCkuIEZyb20gSVJFTkEtSUVBIDIwMTYKICAgICAgICBmYWlsdXJlX3JhdGVfYWxwaGEgKGEgbGlzdCBmb3IgYSB0cmlhbmd1bGFyIGRpc3RyaWJ1dGlvbiksIChkZWZhdWx0PQogICAgICAgICAgICBbMi40OTI4LCA1LjM3NTksIDMuOTM0OTVdKS4gRnJvbSBJUkVOQS1JRUEgMjAxNi4KICAgICAgICBob2FyZGluZ19jb3N0IChhIGxpc3QgZm9yIGEgdHJpYW5ndWxhciBkaXN0cmlidXRpb24pICgkL2Z1KSwgKGRlZmF1bHQ9CiAgICAgICAgICAgIFswLCAwLjAwMSwgMC4wMDA1XSkuIEZyb20gd3d3LmNpc2NvLWVhZ2xlLmNvbSAoYWNjZXNzZWQgMTIvMjAxOSkuCiAgICAgICAgbGFuZGZpbGxfY29zdCAoYSBsaXN0IGZvciBhIHRyaWFuZ3VsYXIgZGlzdHJpYnV0aW9uKSAoJC9mdSksIChkZWZhdWx0PQogICAgICAgICAgICBbMC4wMDg5LCAwLjAwNzQsIDAuMDA3MSwgMC4wMDY5LCAwLjAwNTYsIDAuMDA0MywKICAgICAgICAgICAgICAgICAgICAgMC4wMDY3LCAwLjAxMTAsIDAuMDA4NSwgMC4wMDgyLCAwLjAwNzksIDAuMDA3NCwgMC4wMDY5LAogICAgICAgICAgICAgICAgICAgICAwLjAwNjgsIDAuMDA2OCwgMC4wMDUyLCAwLjAwNTIsIDAuMDA1MSwgMC4wMDc0LCAwLjAwNjIsCiAgICAgICAgICAgICAgICAgICAgIDAuMDA0OSwgMC4wMDQ5LCAwLjAwNDcsIDAuMDAzMiwgMC4wMDQ5LCAwLjAwNjUsIDAuMDA2NCwKICAgICAgICAgICAgICAgICAgICAgMC4wMDYyLCAwLjAwNTIsIDAuMDA0OCwgMC4wMDQ4LCAwLjAwNDQsIDAuMDA0MiwgMC4wMDM5LAogICAgICAgICAgICAgICAgICAgICAwLjAwMzksIDAuMDA0NSwgMC4wMDU1LCAwLjAwNTAsIDAuMDA0OSwgMC4wMDQ0LCAwLjAwNDQsCiAgICAgICAgICAgICAgICAgICAgIDAuMDAzOSwgMC4wMDMzLCAwLjAwMzAsIDAuMDA0MSwgMC4wMDUwLCAwLjAwNDAsIDAuMDA0MCwKICAgICAgICAgICAgICAgICAgICAgMC4wMDM4LCAwLjAwMzNdKS4gRnJvbSBFUkVGIDIwMTkuCiAgICAgICAgd19zbl9lb2wgKHRoZSB3ZWlnaHQgb2Ygc3ViamVjdGl2ZSBub3JtIGluIHRoZSBhZ2VudHMnIGRlY2lzaW9ucyBhcwogICAgICAgICAgICBtb2RlbGVkIHdpdGggdGhlIHRoZW9yeSBvZiBwbGFubmVkIGJlaGF2aW9yKSwgKGRlZmF1bHQ9MC4zMykuIEZyb20KICAgICAgICAgICAgR2VpZ2VyIGV0IGFsLiAyMDE5LgogICAgICAgIHdfcGJjX2VvbCAodGhlIHdlaWdodCBvZiBwZXJjZWl2ZWQgYmVoYXZpb3JhbCBjb250cm9sIGluIHRoZSBhZ2VudHMnCiAgICAgICAgICAgIGRlY2lzaW9ucyBhcyBtb2RlbGVkIHdpdGggdGhlIHRoZW9yeSBvZiBwbGFubmVkIGJlaGF2aW9yKSwgKAogICAgICAgICAgICBkZWZhdWx0PTAuMzkpLiBGcm9tIEdlaWdlciBldCBhbC4gMjAxOS4KICAgICAgICB3X2FfZW9sICh0aGUgd2VpZ2h0IG9mIGF0dGl0dWRlIGluIHRoZSBhZ2VudHMnIGRlY2lzaW9ucyBhcyBtb2RlbGVkCiAgICAgICAgICAgIHdpdGggdGhlIHRoZW9yeSBvZiBwbGFubmVkIGJlaGF2aW9yKSwgKGRlZmF1bHQ9MC4zNCkuIEZyb20KICAgICAgICAgICAgR2VpZ2VyIGV0IGFsLiAyMDE5LgogICAgICAgIHdfc25fcmV1c2UgKHNhbWUgYXMgYWJvdmUgYnV0IGZvciByZW1hbnVmYWN0dXJlZCBwcm9kdWN0IHB1cmNoYXNlCiAgICAgICAgICAgIGRlY2lzaW9uKSwgKGRlZmF1bHQ9MC40OTcpLiBGcm9tIFNpbmdoYWwgZXQgYWwuIDIwMTkuCiAgICAgICAgd19wYmNfcmV1c2UgKHNhbWUgYXMgYWJvdmUgYnV0IGZvciByZW1hbnVmYWN0dXJlZCBwcm9kdWN0IHB1cmNoYXNlCiAgICAgICAgICAgIGRlY2lzaW9uKSwgKGRlZmF1bHQ9MC4zODIpLiBGcm9tIFNpbmdoYWwgZXQgYWwuIDIwMTkuCiAgICAgICAgd19hX3JldXNlIChzYW1lIGFzIGFib3ZlIGJ1dCBmb3IgcmVtYW51ZmFjdHVyZWQgcHJvZHVjdCBwdXJjaGFzZQogICAgICAgICAgICBkZWNpc2lvbiksIChkZWZhdWx0PTAuNDY0KS4gRnJvbSBTaW5naGFsIGV0IGFsLiAyMDE5LgogICAgICAgIHByb2R1Y3RfbGlmZXRpbWUgKHllYXJzKSwgKGRlZmF1bHQ9MzApLiBGcm9tIElSRU5BLUlFQSAyMDE2LgogICAgICAgIGFsbF9Fb0xfcGF0aHdheXMgKGRpY3Rpb25hcnkgb2YgYm9vbGVhbnMgZm9yIEVPTCBwYXRod2F5cyksIChkZWZhdWx0PQogICAgICAgICAgICB7InJlcGFpciI6IFRydWUsICJzZWxsIjogRmFsc2UsICJyZWN5Y2xlIjogVHJ1ZSwgImxhbmRmaWxsIjogRmFsc2UsCiAgICAgICAgICAgICJob2FyZCI6IFRydWV9KS4gTW9kZWxlcidzIGNob2ljZS4KICAgICAgICBtYXhfc3RvcmFnZSAoYSBsaXN0IGZvciBhIHRyaWFuZ3VsYXIgZGlzdHJpYnV0aW9uKSAoeWVhcnMpLCAoZGVmYXVsdD0KICAgICAgICAgICAgWzEsIDgsIDRdKS4gRnJvbSBXaWxzb24gZXQgYWwuIDIwMTcuCiAgICAgICAgYXR0X2Rpc3RyaWJfcGFyYW1fZW9sIChhIGxpc3QgZm9yIGEgYm91bmRlZCBub3JtYWwgZGlzdHJpYnV0aW9uKSwgKAogICAgICAgICAgICBkZWZhdWx0PVswLjUzLCAwLjEyXSkuIEZyb20gbW9kZWwncyBjYWxpYnJhdGlvbiBzdGVwIChtZWFuKSwKICAgICAgICAgICAgU2FwaG9yZXMgMjAxMiAoc3RhbmRhcmQgZGV2aWF0aW9uKS4KICAgICAgICBhdHRfZGlzdHJpYl9wYXJhbV9lb2wgKGEgbGlzdCBmb3IgYSBib3VuZGVkIG5vcm1hbCBkaXN0cmlidXRpb24pLCAoCiAgICAgICAgICAgIGRlZmF1bHQ9WzAuMzUsIDAuMl0pLiBGcm9tIG1vZGVsJ3MgY2FsaWJyYXRpb24gc3RlcCAobWVhbiksCiAgICAgICAgICAgIEFiYmV5IGV0IGFsLiAyMDE2IChzdGFuZGFyZCBkZXZpYXRpb24pLgogICAgICAgIG9yaWdpbmFsX3JlY3ljbGluZ19jb3N0IChhIGxpc3QgZm9yIGEgdHJpYW5ndWxhciBkaXN0cmlidXRpb24pICgkL2Z1KSAoCiAgICAgICAgICAgIGRlZmF1bHQ9WzAuMTA2LCAwLjEyOCwgMC4xMTddKS4gRnJvbSBFUFJJIDIwMTguCiAgICAgICAgcmVjeWNsaW5nX2xlYXJuaW5nX3NoYXBlX2ZhY3RvciwgKGRlZmF1bHQ9LTAuMzkpLiBGcm9tIFFpdSAmIFN1aCAyMDE5LgogICAgICAgIHJlcGFpcmFiaWxpdHkgKHJhdGlvKSwgKGRlZmF1bHQ9MC41NSkuIEZyb20gVHNhbmFrYXMgZXQgYWwuIDIwMTkuCiAgICAgICAgb3JpZ2luYWxfcmVwYWlyaW5nX2Nvc3QgKGEgbGlzdCBmb3IgYSB0cmlhbmd1bGFyIGRpc3RyaWJ1dGlvbikgKCQvZnUpLAogICAgICAgICAgICAoZGVmYXVsdD1bMC4xLCAwLjQ1LCAwLjI4XSkuIEZyb20gVHNhbmFrYXMgZXQgYWwuIDIwMTkuCiAgICAgICAgcmVwYWlyaW5nX2xlYXJuaW5nX3NoYXBlX2ZhY3RvciwgKGRlZmF1bHQ9LTAuMzEpLiBFc3RpbWF0ZWQgd2l0aCBkYXRhCiAgICAgICAgICAgIG9uIHJlcGFpcmluZyBjb3N0cyBhdCBkaWZmZXJlbnQgc2NhbGVzIGZyb20gSlJDIDIwMTkuCiAgICAgICAgc2NuZGhhbmRfbWt0X3ByaWNfcmF0ZSAoYSBsaXN0IGZvciBhIHRyaWFuZ3VsYXIgZGlzdHJpYnV0aW9uKSAocmF0aW8pLAogICAgICAgICAgICAoZGVmYXVsdD1bMC40LCAxLCAwLjddKS4gRnJvbSB1bnB1Ymxpc2hlZCBzdHVkeSBXYW5nIGV0IGFsLgogICAgICAgIGZzdGhhbmRfbWt0X3ByaWMgKCQvZnUpLCAoZGVmYXVsdD0wLjMpLiBGcm9tIFdvb2QgTWFja2VuemllLCAyMDE5LgogICAgICAgIHJlZnVyYmlzaGVyX21hcmdpbiAocmF0aW8pLCAoZGVmYXVsdD1bMC4wMywgMC40NSwgMC4yNF0pLiBGcm9tIER1dmFuCiAgICAgICAgICAgICYgQXlrYcOnIDIwMDggYW5kIHd3dy5pbnZlc3RvcGVkaWEuY29tIChhY2Nlc3NlZCAwMy8yMDIwKS4KICAgICAgICBwdXJjaGFzZV9jaG9pY2VzIChkaWN0aW9uYXJ5IG9mIGJvb2xlYW5zIGZvciBwdXJjaGFzZSBjaG9pY2UpLCAoZGVmYXVsdAogICAgICAgICAgICA9eyJuZXciOiBUcnVlLCAidXNlZCI6IFRydWUsICJjZXJ0aWZpZWQiOiBGYWxzZX0pLgogICAgICAgICAgICBNb2RlbGVyJ3MgY2hvaWNlLgogICAgICAgIGluaXRfdHJ1c3RfYm91bmRhcmllcyAoZnJvbSBHaGFsaSBldCBhbC4gMjAxNykKICAgICAgICBzb2NpYWxfZXZlbnRfYm91bmRhcmllcyAoZnJvbSBHaGFsaSBldCBhbC4gMjAxNykKICAgICAgICBzb2NpYWxfaW5mbHVlbmNhYmlsaXR5X2JvdW5kYXJpZXMgKGZyb20gR2hhbGkgZXQgYWwuIDIwMTcpCiAgICAgICAgdHJ1c3RfdGhyZXNob2xkIChmcm9tIEdoYWxpIGV0IGFsLiAyMDE3KQogICAgICAgIGtub3dsZWRnZV90aHJlc2hvbGQgKGZyb20gR2hhbGkgZXQgYWwuIDIwMTcpCiAgICAgICAgd2lsbGluZ25lc3NfdGhyZXNob2xkIChmcm9tIEdoYWxpIGV0IGFsLiAyMDE3KQogICAgICAgIHNlbGZfY29uZmlkZW5jZV9ib3VuZGFyaWVzIChmcm9tIEdoYWxpIGV0IGFsLiAyMDE3KQogICAgICAgIHByb2R1Y3RfbWFzc19mcmFjdGlvbnMgKGRpY3Rpb25hcnkgY29udGFpbmluZyBtYXNzIGZyYWN0aW9ucyBvZgogICAgICAgICAgICBtYXRlcmlhbHMgY29tcG9zaW5nIHRoZSBwcm9kdWN0KSwgKGRlZmF1bHQ9eyJQcm9kdWN0IjogMSwKICAgICAgICAgICAgIkFsdW1pbnVtIjogMC4wOCwgIkdsYXNzIjogMC43NiwgIkNvcHBlciI6IDAuMDEsICJJbnN1bGF0ZWQgY2FibGUiCiAgICAgICAgICAgIDogMC4wMTIsICJTaWxpY29uIjogMC4wMzYsICJTaWx2ZXIiOiAwLjAwMDMyfSkuIEZyb20gSVRSUFYsIDIwMTUsCiAgICAgICAgICAgIDIwMTguCiAgICAgICAgZXN0YWJsaXNoZWRfc2NkX21rdCAoZGljdGlvbmFyeSBjb250YWluaW5nIGJvb2xlYW5zIHJlZ2FyZGluZyB0aGUKICAgICAgICAgICAgYXZhaWxhYmlsaXR5IG9mIGFuIGluZHVzdHJpYWwgcGF0aHdheSBmb3IgdGhlIHJlY292ZXJlZCBtYXRlcmlhbCksCiAgICAgICAgICAgIChkZWZhdWx0PXsiUHJvZHVjdCI6IFRydWUsICJBbHVtaW51bSI6IFRydWUsICJHbGFzcyI6IFRydWUsCiAgICAgICAgICAgICJDb3BwZXIiOiBUcnVlLCAiSW5zdWxhdGVkIGNhYmxlIjogVHJ1ZSwgIlNpbGljb24iOiBGYWxzZSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAiU2lsdmVyIjogRmFsc2V9KS4gTW9kZWxlcidzIGNob2ljZS4KPHxmaW1fZW5kfD4="]
["ec3d4c84b70e346f1750d71b1cf012924ab994db-3","ec3d4c84b70e346f1750d71b1cf012924ab994db",{"$cut":{"chars":71644,"head":"PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOnV0Zi04IC0qLQoiIiIKQ3JlYXRlZCBvbiBXZWQgTm92IDIxIDA5OjMzIDIwMTkKCkBhdXRob3IgSnVsaWVuIFdhbHpiZXJnIC0gSnVsaWVuLldhbHpiZXJnQG5yZWwuZ292CgpNb2RlbCAtIGFnZW50LWJhc2VkIHNpbXVsYXRpb25zIG9mIHRoZSBjaXJjdWxhciBlY29ub215IChBQlNpQ0UpCiIiIgoKZnJvbSBtZXNhIGltcG9ydCBNb2RlbApmcm9tIEFCTV9DRV9QVl9Db25zdW1lckFnZW50cyBpbXBvcnQgQ29uc3VtZXJzCmZyb20gQUJNX0NFX1BWX1JlY3ljbGVyQWdlbnRzIGltcG9ydCBSZWN5Y2xlcnMKZnJvbSBBQk1fQ0VfUFZfUmVmdXJiaXNoZXJBZ2VudHMgaW1wb3J0IFJlZnVyYmlzaGVycwpmcm9tIEFCTV9DRV9QVl9Qcm9kdWNlckFnZW50cyBpbXBvcnQgUHJvZHVjZXJzCmZyb20gbWVzYS50aW1lIGltcG9ydCBCYXNlU2NoZWR1bGVyCmZyb20gbWVzYS5zcGFjZSBpbXBvcnQgTmV0d29ya0dyaWQKZnJvbSBtZXNhLmRhdGFjb2xsZWN0aW9uIGltcG9ydCBEYXRhQ29sbGVjdG9yCmltcG9ydCBuZXR3b3JreCBhcyBueAppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBtYXRoIGltcG9ydCAqCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgcmFuZG9tCgoKY2xhc3MgQUJNX0NFX1BWKE1vZGVsKToKICAgICIiIgogICAgSW50cm86CiAgICBUaGUgYWdlbnQtYmFzZWQgc2ltdWxhdGlvbnMgb2YgdGhlIGNpcmN1bGFyIGVjb25vbXkgKEFCU2lDRSkgbW9kZWwgaXMgYW4KICAgIGFnZW50LWJhc2VkIG1vZGVsIGJhc2VkIG9uIHZhcmlvdXMgd29yayAoZS5nLiwgVG9uZyBldCBhbC4gMjAxOAogICAgYW5kIEdoYWxpIGV0IGFsLiAyMDE3LCBJUkVOQS1JRUEgMjAxNi4uLikuIFRoaXMgaW5zdGFuY2Ugb2YgdGhlIG1vZGVsCiAgICBzaW11bGF0ZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgY2lyY3VsYXIgZWNvbm9teSAoQ0UpIHN0cmF0ZWdpZXMuCgogICAgUHVycG9zZToKICAgIEFCU2lDRSBhaW1zIGF0IHNpbXVsYXRpbmcgdGhlIGFkb3B0aW9uIG9mIHZhcmlvdXMgdmFyaW91cyBDRSBzdHJhdGVnaWVzLgogICAgTW9yZSBzcGVjaWZpY2FsbHksIHRoZSBtb2RlbCBlbmFibGVzIGV4cGxvcmluZyB0aGUgZWZmZWN0IG9mIHZhcmlvdXMgcG9saWN5CiAgICBvciB0ZWNobm8tZWNvbm9taWMgZmFjdG9ycyBvbiB0aGUgYWRvcHRpb24gb2YgdGhlIENFIHN0cmF0ZWdpZXMgYnkgYQogICAgc3lzdGVtJ3MgYWN0b3JzLiAoRGVmYXVsdCB2YWx1ZXMgYXJlIGZvciB0aGUgY2FzZSBzdHVkeSBvZiB0aGUgcGhvdG92b2x0YWljCiAgICAoUFYpIGluZHVzdHJ5LCBmdW5jdGlvbmFsIHVuaXQgPSBXcCkuCgogICAgSG93IHRvIHVzZSBpdDoKICAgIENoYW5nZSB0aGUgbW9kZWwncyBhdHRyaWJ1dGVzJyB2YWx1ZXMgaWYgbmVlZGVkIGluIHRoZSBBQk1fQ0VfUFZfQmF0Y2hSdW4KICAgIG9yIEFCTV9DRV9QVl9NdWx0aXBsZVJ1biBmaWxlcyBhbmQgcnVuIHRoZSBtb2RlbCBmcm9tIGVpdGhlciBvZiB0aG9zZQogICAgZmlsZXMuCgogICAgQXR0cmlidXRlczoKICAgICAgICBzZWVkICh0byBmaXggcmFuZG9tIG51bWJlcnMpLCAoZGVmYXVsdD1Ob25lKS4gTW9kZWxlcidzIGNob2ljZS4KICAgICAgICBjYWxpYnJhdGlvbl9uX3NlbnNpdGl2aXR5MSAodXNlIHRvIHZhcnkgbGlzdCBwYXJhbWV0ZXJzIG9yCiAgICAgICAgICAgIGRpY3Rpb25uYXJpZXMpLCAoZGVmYXVsdD0xKS4gTW9kZWxlcidzIGNob2ljZS4KICAgICAgICBjYWxpYnJhdGlvbl9uX3NlbnNpdGl2aXR5XzIgKHVzZSB0byB2YXJ5IGxpc3QgcGFyYW1ldGVycyBvcgogICAgICAgICAgICBkaWN0aW9ubmFyaWVzKSwgKGRlZmF1bHQ9MSkuIE1vZGVsZXIncyBjaG9pY2UuCiAgICAgICAgbnVtX2NvbnN1bWVycywgKGRlZmF1bHQ9MTAwMCkuIFNpbXBsaWZ5aW5nIGFzc3VtcHRpb24KICAgICAgICBjb25zdW1lcnNfbm9kZV9kZWdyZWUsIChkZWZhdWx0PTUpLiBGcm9tIFNtYWxsLVdvcmxkIGxpdGVyYXR1cmUuCiAgICAgICAgY29uc3VtZXJzX25ldHdvcmtfdHlwZT0oInNtYWxsLXdvcmxkIiwgImNvbXBsZXRlIGdyYXBoIiwgInJhbmRvbSIKICAgICAgICAgICAgImN5Y2xlIGdyYXBoIiwgInNjYWxlLWZyZWUgZ3JhcGgiKSwgKGRlZmF1bHQ9InNtYWxsLXdvcmxkIikuCiAgICAgICAgICAgIEZyb20gU21hbGwtV29ybGQgbGl0ZXJhdHVyZSAoZS5nLiwgQnlya2EgZXQgYWwuIDIwMTYpLgogICAgICAgIG51bV9yZWN5Y2xlcnMsIChkZWZhdWx0PTE2KS4gMTYgRnJvbSBTRUlBLCAyMDE5LgogICAgICAgIG51bV9wcm9kdWNlcnMsIChkZWZhdWx0PTYwKS4gU2ltcGxpZnlpbmcgYXNzdW1wdGlvbi4KICAgICAgICBwcm9kX25fcmVjeWNfbm9kZV9kZWdyZWUsIChkZWZhdWx0PTUpLiBGcm9tIFNtYWxsLVdvcmxkIGxpdGVyYXR1cmUuCiAgICAgICAgcHJvZF9uX3JlY3ljX25ldHdvcmtfdHlwZSwgKGRlZmF1bHQ9InNtYWxsLXdvcmxkIikuIEZyb20gU21hbGwtV29ybGQKICAgICAgICAgICAgYW5kIGluZHVzdHJpYWwgc3ltYmlvc2lzIGxpdGVyYXR1cmUgKGUuZy4sIERvbcOpbmVjaCAmIERhdmllcywKICAgICAgICAgICAgMjAxMSkuCiAgICAgICAgbnVtX3JlZnVyYmlzaGVycywgKGRlZmF1bHQ9MTUpLiBGcm9tIFdvb2QgTWFja2VuemllLCAyMDE5LgogICAgICAgIGNvbnN1bWVyc19kaXN0cmlidXRpb24gKGFsbG9jYXRpb24gb2YgZGlmZmVyZW50IHR5cGVzIG9mIGNvbnN1bWVycyksCiAgICAgICAgICAgIChkZWZhdWx0PXsicmVzaWRlbnRpYWwiOiAxLCAiY29tbWVyY2lhbCI6IDAuLCAidXRpbGl0eSI6IDAufSkuCiAgICAgICAgICAgIChPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYmFzZWQgb24gRUlBLCAyMDE5IGFuZCBTQkUgY291bmNpbCwgMjAxOToKICAgICAgICAgICAgcmVzaWRlbnRpYWw9MC43NSwgY29tbWVyY2lhbD0wLjIgYW5kIHV0aWxpdHk9MC4wNSkuCiAgICAgICAgaW5pdF9lb2xfcmF0ZSAoZGljdGlvbmFyeSB3aXRoIGluaXRpYWwgZW5kLW9mLWxpZmUgKEVPTCkgcmF0aW9zKSwKICAgICAgICAgICAgKGRlZmF1bHQ9eyJyZXBhaXIiOiAwLjAwNSwgInNl"}}]
["de013a6f1f18cd590a90b608e30c20c3113e4946-1","de013a6f1f18cd590a90b608e30c20c3113e4946","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5YnVsbGV0X2VudnMuYnVsbGV0Lm1pbml0YXVyX2d5bV9lbnYgYXMgZQpmcm9tIHN0YWJsZV9iYXNlbGluZXMgaW1wb3J0IFBQTzIKCnRvdGFsX3RpbWVzdGVwcyA9IDEwMDAwMDAKbW9kZWwgPSBQUE8yLmxvYWQoIi4vbW9kZWwvbW9kZWx7fSIuZm9ybWF0KHRvdGFsX3RpbWVzdGVwcykpCmVudiA9IGUuTWluaXRhdXJCdWxsZXRFbnYocmVuZGVyPVRydWUpCm9icyA9IGVudi5yZXNldCgpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZm9yIGkgaW4gcmFuZ2UoNTAwMDApOgogICAgYWN0aW9uLCBfc3RhdGVzID0gbW9kZWwucHJlZGljdChvYnMpCiAgICBvYnMsIHJld2FyZHMsIGRvbmUsIGluZm8gPSBlbnYuc3RlcChhY3Rpb24pCiAgICBlbnYucmVuZGVyKG1vZGU9Imh1bWFuIikKPHxmaW1fZW5kfD4="]
["de013a6f1f18cd590a90b608e30c20c3113e4946-2","de013a6f1f18cd590a90b608e30c20c3113e4946","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5YnVsbGV0X2VudnMuYnVsbGV0Lm1pbml0YXVyX2d5bV9lbnYgYXMgZQo8fGZpbV9ob2xlfD4KZW52ID0gZS5NaW5pdGF1ckJ1bGxldEVudihyZW5kZXI9VHJ1ZSkKb2JzID0gZW52LnJlc2V0KCkKZm9yIGkgaW4gcmFuZ2UoNTAwMDApOgogICAgYWN0aW9uLCBfc3RhdGVzID0gbW9kZWwucHJlZGljdChvYnMpCiAgICBvYnMsIHJld2FyZHMsIGRvbmUsIGluZm8gPSBlbnYuc3RlcChhY3Rpb24pCiAgICBlbnYucmVuZGVyKG1vZGU9Imh1bWFuIikKZW52LmNsb3NlKCkKPHxmaW1fc3VmZml4fD4KZnJvbSBzdGFibGVfYmFzZWxpbmVzIGltcG9ydCBQUE8yCgp0b3RhbF90aW1lc3RlcHMgPSAxMDAwMDAwCm1vZGVsID0gUFBPMi5sb2FkKCIuL21vZGVsL21vZGVse30iLmZvcm1hdCh0b3RhbF90aW1lc3RlcHMpKQo8fGZpbV9lbmR8Pg=="]
["418262955180e0da089a3e4197e302e9243d6ad3-1","418262955180e0da089a3e4197e302e9243d6ad3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGlvCmltcG9ydCBzeXMKZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgpmcm9tIHRpbWUgaW1wb3J0IHRpbWUKZnJvbSB1bml0dGVzdCBpbXBvcnQgVGV4dFRlc3RSZXN1bHQsIG1vY2sKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmRiIGltcG9ydCBERUZBVUxUX0RCX0FMSUFTLCBjb25uZWN0aW9ucwpmcm9tIGRqYW5nby50ZXN0LnJ1bm5lciBpbXBvcnQgRGlzY292ZXJSdW5uZXIKZnJvbSBkamFuZ28udGVzdC51dGlscyBpbXBvcnQgQ2FwdHVyZVF1ZXJpZXNDb250ZXh0Cgpmcm9tIC51dGlscyBpbXBvcnQgcHJpbnRfY29sb3IKCgpAY29udGV4dG1hbmFnZXIKZGVmIGNhdGNoX3NpZ25hbChzaWduYWwpOgogICAgIiIiCiAgICBDYXRjaGVzIGRqYW5nbyBzaWduYWwgYW5kIHJldHVybnMgbW9jayBjYWxsIGZvciB0aGUgc2FtZQogICAgIiIiCiAgICBoYW5kbGVyID0gbW9jay5Nb2NrKCkKICAgIHNpZ25hbC5jb25uZWN0KGhhbmRsZXIpCiAgICB5aWVsZCBoYW5kbGVyCiAgICBzaWduYWwuZGlzY29ubmVjdChoYW5kbGVyKQoKCmNsYXNzIFRpbWVMb2dnaW5nVGVzdFJlc3VsdChUZXh0VGVzdFJlc3VsdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzZWxmLnRlc3RfdGltaW5ncyA9IFtdCiAgICAgICAgc2VsZi5zbG93X3Rlc3RfdGhyZXNob2xkID0gc2VsZi5fZ2V0X3Nsb3dfdGVzdF90aHJlc2hvbGQoKQogICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQoKICAgIGRlZiBfZ2V0X3Nsb3dfdGVzdF90aHJlc2hvbGQoc2VsZik6CiAgICAgICAgc2xvd190ZXN0X3RocmVzaG9sZCA9IGdldGF0dHIoCiAgICAgICAgICAgIHNldHRpbmdzLCAnT1BFTldJU1BfU0xPV19URVNUX1RIUkVTSE9MRCcsIFswLjMsIDFdCiAgICAgICAgKQogICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNsb3dfdGVzdF90aHJlc2hvbGQsIGxpc3QpCiAgICAgICAgYXNzZXJ0IGxlbihzbG93X3Rlc3RfdGhyZXNob2xkKSA9PSAyCiAgICAgICAgcmV0dXJuIHNsb3dfdGVzdF90aHJlc2hvbGQKCiAgICBkZWYgc3RhcnRUZXN0KHNlbGYsIHRlc3QpOgogICAgICAgIHNlbGYuX3N0YXJ0X3RpbWUgPSB0aW1lKCkKICAgICAgICBzdXBlcigpLnN0YXJ0VGVzdCh0ZXN0KQoKICAgIGRlZiBhZGRTdWNjZXNzKHNlbGYsIHRlc3QpOgogICAgICAgIGVsYXBzZWQgPSB0aW1lKCkgLSBzZWxmLl9zdGFydF90aW1lCiAgICAgICAgbmFtZSA9IHNlbGYuZ2V0RGVzY3JpcHRpb24odGVzdCkKICAgICAgICBzZWxmLnRlc3RfdGltaW5ncy5hcHBlbmQoKG5hbWUsIGVsYXBzZWQpKQogICAgICAgIHN1cGVyKCkuYWRkU3VjY2Vzcyh0ZXN0KQoKICAgIGRlZiBkaXNwbGF5X3Nsb3dfdGVzdHMoc2VsZik6CiAgICAgICAgcHJpbnRfY29sb3IoCiAgICAgICAgICAgIGYnXG5TdW1tYXJ5IG9mIHNsb3cgdGVzdHMgKD57c2VsZi5zbG93X3Rlc3RfdGhyZXNob2xkWzBdfXMpXG4nLCAnd2hpdGVfYm9sZCcKICAgICAgICApCiAgICAgICAgc2VsZi5fbW9kdWxlID0gTm9uZQogICAgICAgIHNsb3dfdGVzdHNfY291bnRlciA9IDAKICAgICAgICBmb3IgbmFtZSwgZWxhcHNlZCBpbiBzZWxmLnRlc3RfdGltaW5nczoKICAgICAgICAgICAgaWYgZWxhcHNlZCA+IHNlbGYuc2xvd190ZXN0X3RocmVzaG9sZFswXToKICAgICAgICAgICAgICAgIHNsb3dfdGVzdHNfY291bnRlciArPSAxCiAgICAgICAgICAgICAgICAjIFJlbW92ZSBkb2NzdHJpbmcgaWYgcHJlc2VudAogICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3BsaXQoJ1xuJylbMF0KICAgICAgICAgICAgICAgIG5hbWUsIG1vZHVsZSA9IG5hbWUuc3BsaXQoKQogICAgICAgICAgICAgICAgaWYgbW9kdWxlICE9IHNlbGYuX21vZHVsZToKICAgICAgICAgICAgICAgICAgICBzZWxmLl9tb2R1bGUgPSBtb2R1bGUKICAgICAgICAgICAgICAgICAgICBwcmludF9jb2xvcihmJ3ttb2R1bGV9JywgJ3llbGxvd19ib2xkJykKICAgICAgICAgICAgICAgIGNvbG9yID0gKAogICAgICAgICAgICAgICAgICAgICdyZWRfYm9sZCcKICAgICAgICAgICAgICAgICAgICBpZiBlbGFwc2VkID4gc2VsZi5zbG93X3Rlc3RfdGhyZXNob2xkWzFdCiAgICAgICAgICAgICAgICAgICAgZWxzZSAneWVsbG93X2JvbGQnCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICBwcmludF9jb2xvcihmJyAgKHtlbGFwc2VkOi4yZn1zKScsIGNvbG9yLCBlbmQ9JyAnKQogICAgICAgICAgICAgICAgcHJpbnQobmFtZSkKICAgICAgICBwcmludF9jb2xvcihmJ1xuVG90YWwgc2xvdyB0ZXN0cyBkZXRlY3RlZDoge3Nsb3dfdGVzdHNfY291bnRlcn0nLCAnd2hpdGVfYm9sZCcpCiAgICAgICAgcmV0dXJuIHNlbGYudGVzdF90aW1pbmdzCgogICAgZGVmIHN0b3BUZXN0UnVuKHNlbGYpOgogICAgICAgIHNlbGYuZGlzcGxheV9zbG93X3Rlc3RzKCkKICAgICAgICBzdXBlcigpLnN0b3BUZXN0UnVuKCkKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmNsYXNzIFRpbWVMb2dnaW5nVGVzdFJ1bm5lcihEaXNjb3ZlclJ1bm5lcik6CiAgICBkZWYgZ2V0X3Jlc3VsdGNsYXNzKHNlbGYpOgogICAgICAgIHJldHVybiBUaW1lTG9nZ2luZ1Rlc3RSZXN1bHQKCjx8ZmltX2VuZHw+"]
["418262955180e0da089a3e4197e302e9243d6ad3-2","418262955180e0da089a3e4197e302e9243d6ad3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGlvCmltcG9ydCBzeXMKZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgpmcm9tIHRpbWUgaW1wb3J0IHRpbWUKZnJvbSB1bml0dGVzdCBpbXBvcnQgVGV4dFRlc3RSZXN1bHQsIG1vY2sKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmRiIGltcG9ydCBERUZBVUxUX0RCX0FMSUFTLCBjb25uZWN0aW9ucwpmcm9tIGRqYW5nby50ZXN0LnJ1bm5lciBpbXBvcnQgRGlzY292ZXJSdW5uZXIKZnJvbSBkamFuZ28udGVzdC51dGlscyBpbXBvcnQgQ2FwdHVyZVF1ZXJpZXNDb250ZXh0Cgpmcm9tIC51dGlscyBpbXBvcnQgcHJpbnRfY29sb3IKCgpAY29udGV4dG1hbmFnZXIKZGVmIGNhdGNoX3NpZ25hbChzaWduYWwpOgogICAgIiIiCiAgICBDYXRjaGVzIGRqYW5nbyBzaWduYWwgYW5kIHJldHVybnMgbW9jayBjYWxsIGZvciB0aGUgc2FtZQogICAgIiIiCiAgICBoYW5kbGVyID0gbW9jay5Nb2NrKCkKICAgIHNpZ25hbC5jb25uZWN0KGhhbmRsZXIpCiAgICB5aWVsZCBoYW5kbGVyCiAgICBzaWduYWwuZGlzY29ubmVjdChoYW5kbGVyKQoKCmNsYXNzIFRpbWVMb2dnaW5nVGVzdFJlc3VsdChUZXh0VGVzdFJlc3VsdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzZWxmLnRlc3RfdGltaW5ncyA9IFtdCiAgICAgICAgc2VsZi5zbG93X3Rlc3RfdGhyZXNob2xkID0gc2VsZi5fZ2V0X3Nsb3dfdGVzdF90aHJlc2hvbGQoKQogICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQoKICAgIGRlZiBfZ2V0X3Nsb3dfdGVzdF90aHJlc2hvbGQoc2VsZik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzbG93X3Rlc3RfdGhyZXNob2xkID0gZ2V0YXR0cigKICAgICAgICAgICAgc2V0dGluZ3MsICdPUEVOV0lTUF9TTE9XX1RFU1RfVEhSRVNIT0xEJywgWzAuMywgMV0KICAgICAgICApCiAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2xvd190ZXN0X3RocmVzaG9sZCwgbGlzdCkKPHxmaW1fZW5kfD4="]
["418262955180e0da089a3e4197e302e9243d6ad3-3","418262955180e0da089a3e4197e302e9243d6ad3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGlvCmltcG9ydCBzeXMKZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgpmcm9tIHRpbWUgaW1wb3J0IHRpbWUKZnJvbSB1bml0dGVzdCBpbXBvcnQgVGV4dFRlc3RSZXN1bHQsIG1vY2sKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmRiIGltcG9ydCBERUZBVUxUX0RCX0FMSUFTLCBjb25uZWN0aW9ucwpmcm9tIGRqYW5nby50ZXN0LnJ1bm5lciBpbXBvcnQgRGlzY292ZXJSdW5uZXIKZnJvbSBkamFuZ28udGVzdC51dGlscyBpbXBvcnQgQ2FwdHVyZVF1ZXJpZXNDb250ZXh0Cgpmcm9tIC51dGlscyBpbXBvcnQgcHJpbnRfY29sb3IKCgpAY29udGV4dG1hbmFnZXIKZGVmIGNhdGNoX3NpZ25hbChzaWduYWwpOgogICAgIiIiCiAgICBDYXRjaGVzIGRqYW5nbyBzaWduYWwgYW5kIHJldHVybnMgbW9jayBjYWxsIGZvciB0aGUgc2FtZQogICAgIiIiCiAgICBoYW5kbGVyID0gbW9jay5Nb2NrKCkKICAgIHNpZ25hbC5jb25uZWN0KGhhbmRsZXIpCiAgICB5aWVsZCBoYW5kbGVyCiAgICBzaWduYWwuZGlzY29ubmVjdChoYW5kbGVyKQoKCmNsYXNzIFRpbWVMb2dnaW5nVGVzdFJlc3VsdChUZXh0VGVzdFJlc3VsdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzZWxmLnRlc3RfdGltaW5ncyA9IFtdCiAgICAgICAgc2VsZi5zbG93X3Rlc3RfdGhyZXNob2xkID0gc2VsZi5fZ2V0X3Nsb3dfdGVzdF90aHJlc2hvbGQoKQogICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQoKICAgIGRlZiBfZ2V0X3Nsb3dfdGVzdF90aHJlc2hvbGQoc2VsZik6CiAgICAgICAgc2xvd190ZXN0X3RocmVzaG9sZCA9IGdldGF0dHIoCiAgICAgICAgICAgIHNldHRpbmdzLCAnT1BFTldJU1BfU0xPV19URVNUX1RIUkVTSE9MRCcsIFswLjMsIDFdCiAgICAgICAgKQogICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNsb3dfdGVzdF90aHJlc2hvbGQsIGxpc3QpCiAgICAgICAgYXNzZXJ0IGxlbihzbG93X3Rlc3RfdGhyZXNob2xkKSA9PSAyCiAgICAgICAgcmV0dXJuIHNsb3dfdGVzdF90aHJlc2hvbGQKCiAgICBkZWYgc3RhcnRUZXN0KHNlbGYsIHRlc3QpOgogICAgICAgIHNlbGYuX3N0YXJ0X3RpbWUgPSB0aW1lKCkKICAgICAgICBzdXBlcigpLnN0YXJ0VGVzdCh0ZXN0KQoKICAgIGRlZiBhZGRTdWNjZXNzKHNlbGYsIHRlc3QpOgogICAgICAgIGVsYXBzZWQgPSB0aW1lKCkgLSBzZWxmLl9zdGFydF90aW1lCiAgICAgICAgbmFtZSA9IHNlbGYuZ2V0RGVzY3JpcHRpb24odGVzdCkKICAgICAgICBzZWxmLnRlc3RfdGltaW5ncy5hcHBlbmQoKG5hbWUsIGVsYXBzZWQpKQogICAgICAgIHN1cGVyKCkuYWRkU3VjY2Vzcyh0ZXN0KQoKICAgIGRlZiBkaXNwbGF5X3Nsb3dfdGVzdHMoc2VsZik6CiAgICAgICAgcHJpbnRfY29sb3IoCiAgICAgICAgICAgIGYnXG5TdW1tYXJ5IG9mIHNsb3cgdGVzdHMgKD57c2VsZi5zbG93X3Rlc3RfdGhyZXNob2xkWzBdfXMpXG4nLCAnd2hpdGVfYm9sZCcKICAgICAgICApCiAgICAgICAgc2VsZi5fbW9kdWxlID0gTm9uZQogICAgICAgIHNsb3dfdGVzdHNfY291bnRlciA9IDAKICAgICAgICBmb3IgbmFtZSwgZWxhcHNlZCBpbiBzZWxmLnRlc3RfdGltaW5nczoKICAgICAgICAgICAgaWYgZWxhcHNlZCA+IHNlbGYuc2xvd190ZXN0X3RocmVzaG9sZFswXToKICAgICAgICAgICAgICAgIHNsb3dfdGVzdHNfY291bnRlciArPSAxCiAgICAgICAgICAgICAgICAjIFJlbW92ZSBkb2NzdHJpbmcgaWYgcHJlc2VudAogICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3BsaXQoJ1xuJylbMF0KICAgICAgICAgICAgICAgIG5hbWUsIG1vZHVsZSA9IG5hbWUuc3BsaXQoKQogICAgICAgICAgICAgICAgaWYgbW9kdWxlICE9IHNlbGYuX21vZHVsZToKICAgICAgICAgICAgICAgICAgICBzZWxmLl9tb2R1bGUgPSBtb2R1bGUKICAgICAgICAgICAgICAgICAgICBwcmludF9jb2xvcihmJ3ttb2R1bGV9JywgJ3llbGxvd19ib2xkJykKICAgICAgICAgICAgICAgIGNvbG9yID0gKAogICAgICAgICAgICAgICAgICAgICdyZWRfYm9sZCcKICAgICAgICAgICAgICAgICAgICBpZiBlbGFwc2VkID4gc2VsZi5zbG93X3Rlc3RfdGhyZXNob2xkWzFdCiAgICAgICAgICAgICAgICAgICAgZWxzZSAneWVsbG93X2JvbGQnCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICBwcmludF9jb2xvcihmJyAgKHtlbGFwc2VkOi4yZn1zKScsIGNvbG9yLCBlbmQ9JyAnKQogICAgICAgICAgICAgICAgcHJpbnQobmFtZSkKICAgICAgICBwcmludF9jb2xvcihmJ1xuVG90YWwgc2xvdyB0ZXN0cyBkZXRlY3RlZDoge3Nsb3dfdGVzdHNfY291bnRlcn0nLCAnd2hpdGVfYm9sZCcpCiAgICAgICAgcmV0dXJuIHNlbGYudGVzdF90aW1pbmdzCgogICAgZGVmIHN0b3BUZXN0UnVuKHNlbGYpOgogICAgICAgIHNlbGYuZGlzcGxheV9zbG93X3Rlc3RzKCkKICAgICAgICBzdXBlcigpLnN0b3BUZXN0UnVuKCkKCgpjbGFzcyBUaW1lTG9nZ2luZ1Rlc3RSdW5uZXIoRGlzY292ZXJSdW5uZXIpOgogICAgZGVmIGdldF9yZXN1bHRjbGFzcyhzZWxmKToKICAgICAgICByZXR1cm4gVGltZUxvZ2dpbmdUZXN0UmVzdWx0CgoKY2xhc3MgQ2FwdHVyZU91dHB1dChvYmplY3QpOgogICAgZGVmIF9fY2FsbF9fKHNlbGYsIGZ1bmN0aW9uKToKICAgICAgICBkZWYgd3JhcHBlZF9mdW5jdGlvbigqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdzdGRvdXQnKToKICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLnN0ZG91dAogICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdzdGRlcnInKToKICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBzZWxmLnN0ZGVycgogICAgICAgICAgICBvcmlnaW5hbF9hcmdzID0gbGlzdChhcmdzKQogICAgICAgICAgICBhcmdzID0gbGlzdChhcmdzKQogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdzdGRvdXQnKToKICAgICAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChzZWxmLnN0ZG91dCkKICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ3N0ZGVycicpOgogICAgICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHNlbGYuc3RkZXJyKQogICAgICAgICAgICAgICAgZnVuY3Rpb24oKmFyZ3MsICoqa3dhcmdzKQogICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgICAgZnVuY3Rpb24oKm9yaWdpbmFsX2FyZ3MsICoqa3dhcmdzKQogICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnc3Rkb3V0Jyk6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRvdXQuY2xvc2UoKQogICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzeXMuX19zdGRvdXRfXwogICAgICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnc3RkZXJyJyk6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRlcnIuY2xvc2UoKQogICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBzeXMuX19zdGRlcnJfXwoKICAgICAgICByZXR1cm4gd3JhcHBlZF9mdW5jdGlvbgo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLmt3YXJncyA9IGt3YXJncwogICAgICAgIHNlbGYuc3Rkb3V0ID0gc3Rkb3V0IG9yIGlvLlN0cmluZ0lPKCkKCgpjbGFzcyBjYXB0dXJlX3N0ZGVycihDYXB0dXJlT3V0cHV0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGRlcnI9Tm9uZSwgKiprd2FyZ3MpOgogICAgICAgIHNlbGYua3dhcmdzID0ga3dhcmdzCiAgICAgICAgc2VsZi5zdGRlcnIgPSBzdGRlcnIgb3IgaW8uU3RyaW5nSU8oKQoKCmNsYXNzIGNhcHR1cmVfYW55X291dHB1dChDYXB0dXJlT3V0cHV0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUsICoqa3dhcmdzKToKICAgICAgICBzZWxmLmt3YXJncyA9IGt3YXJncwogICAgICAgIHNlbGYuc3Rkb3V0ID0gc3Rkb3V0IG9yIGlvLlN0cmluZ0lPKCkKICAgICAgICBzZWxmLnN0ZGVyciA9IHN0ZGVyciBvciBpby5TdHJpbmdJTygpCgoKY2xhc3MgX0Fzc2VydE51bVF1ZXJpZXNDb250ZXh0U3ViVGVzdChDYXB0dXJlUXVlcmllc0NvbnRleHQpOgogICAgIiIiCiAgICBOZWVkZWQgdG8gZXhlY3V0ZSBhc3NlcnROdW1RdWVyaWVzIGluIGEgc3ViVGVzdAogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSwgbnVtLCBjb25uZWN0aW9uKToKICAgICAgICBzZWxmLnRlc3RfY2FzZSA9IHRlc3RfY2FzZQogICAgICAgIHNlbGYubnVtID0gbnVtCiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhjb25uZWN0aW9uKQoKICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0cmFjZWJhY2spOgogICAgICAgIHN1cGVyKCkuX19leGl0X18oZXhjX3R5cGUsIGV4Y192YWx1ZSwgdHJhY2ViYWNrKQogICAgICAgIGlmIGV4Y190eXBlIGlzIG5vdCBOb25lOgogICAgICAgICAgICByZXR1cm4KICAgICAgICBleGVjdXRlZCA9IGxlbihzZWxmKQogICAgICAgIHdpdGggc2VsZi50ZXN0X2Nhc2Uuc3ViVGVzdChmJ0V4cGVjdGluZyB7c2VsZi5udW19IFNRTCBxdWVyaWVzJyk6CiAgICAgICAgICAgIHNlbGYudGVzdF9jYXNlLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgICAgZXhlY3V0ZWQsCiAgICAgICAgICAgICAgICBzZWxmLm51bSwKICAgICAgICAgICAgICAgICIlZCBxdWVyaWVzIGV4ZWN1dGVkLCAlZCBleHBlY3RlZFxuQ2FwdHVyZWQgcXVlcmllcyB3ZXJlOlxuJXMiCiAgICAgICAgICAgICAgICAlICgKICAgICAgICAgICAgICAgICAgICBleGVjdXRlZCwKICAgICAgICAgICAgICAgICAgICBzZWxmLm51bSwKICAgICAgICAgICAgICAgICAgICAnXG4nLmpvaW4oCiAgICAgICAgICAgICAgICAgICAgICAgICclZC4gJXMnICUgKGksIHF1ZXJ5WydzcWwnXSkKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGksIHF1ZXJ5IGluIGVudW1lcmF0ZShzZWxmLmNhcHR1cmVkX3F1ZXJpZXMsIHN0YXJ0PTEpCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICkKCgpjbGFzcyBBc3NlcnROdW1RdWVyaWVzU3ViVGVzdE1peGluOgogICAgZGVmIGFzc2VydE51bVF1ZXJpZXMoc2VsZiwgbnVtLCBmdW5jPU5vbmUsICphcmdzLCB1c2luZz1ERUZBVUxUX0RCX0FMSUFTLCAqKmt3YXJncyk6CiAgICAgICAgY29ubiA9IGNvbm5lY3Rpb25zW3VzaW5nXQoKICAgICAgICBjb250ZXh0ID0gX0Fzc2VydE51bVF1ZXJpZXNDb250ZXh0U3ViVGVzdChzZWxmLCBudW0sIGNvbm4pCiAgICAgICAgaWYgZnVuYyBpcyBOb25lOgogICAgICAgICAgICByZXR1cm4gY29udGV4dAoKICAgICAgICB3aXRoIGNvbnRleHQ6CiAgICAgICAgICAgIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQo8fGZpbV9zdWZmaXh8PgoKCmNsYXNzIGNhcHR1cmVfc3Rkb3V0KENhcHR1cmVPdXRwdXQpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0ZG91dD1Ob25lLCAqKmt3YXJncyk6Cjx8ZmltX2VuZHw+"]
["c1ff215a8b076c60eb201fa4663641165ad11415-1","c1ff215a8b076c60eb201fa4663641165ad11415","PHxmaW1fcHJlZml4fD4KZnJvbSBweWdhbWUubG9jYWxzIGltcG9ydCAqCmltcG9ydCBweWdhbWUKaW1wb3J0IG1hdGgKaW1wb3J0IG9zCmltcG9ydCBzeXMKZnJvbSBQb2RTaXhOZXQuQ29ubmVjdGlvbiBpbXBvcnQgQ29ubmVjdGlvbkxpc3RlbmVyLCBjb25uZWN0aW9uCmZyb20gdGltZSBpbXBvcnQgc2xlZXAKZnJvbSBFelRleHQgaW1wb3J0IGV6dGV4dAoKaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CiAgICBpbXBvcnQgcHlnYW1lLl92aWV3CgojIFNldCByb290IHBhdGgKdHJ5OgogICAgYXBwcm9vdCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQpleGNlcHQgTmFtZUVycm9yOiAgIyBXZSBhcmUgdGhlIG1haW4gcHkyZXhlIHNjcmlwdCwgbm90IGEgbW9kdWxlCiAgICBhcHByb290ID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkpCgppZigiLmV4ZSIgaW4gYXBwcm9vdCk6CiAgICBhcHByb290ID0gYXBwcm9vdC5yZXBsYWNlKCJib3h4eS5leGUiLCAiIikKCgojIGRlZmluaW5nIHNvbWUgY29sb3JzCmJsdWUgPSAoMCwgMCwgMjU1KQpncmVlbiA9ICgwLCAyNTUsIDApCnJlZCA9ICgyNTUsIDAsIDApCndoaXRlID0gKDI1NSwgMjU1LCAyNTUpCmJsYWNrID0gKDAsIDAsIDApCgoKZGVmIHRleHRJbnB1dChzY3JlZW4sIG1heExlbmd0aCwgcHJvbXB0KToKICAgICMgZmlsbCB0aGUgc2NyZWVuIHcvIGJsYWNrCiAgICBzY3JlZW4uZmlsbChibGFjaykKICAgIHlwb3MgPSAwCiAgICBkZWx0YXkgPSAyNQogICAgdHh0YnggPSBbXQogICAgIyBGb3IgZ2V0dGluZyB0aGUgcmV0dXJuIHZhbHVlcwogICAgYSA9IFsnJ10KICAgICMgaGVyZSBpcyB0aGUgbWFnaWM6IG1ha2luZyB0aGUgdGV4dCBpbnB1dAogICAgIyBjcmVhdGUgYW4gaW5wdXQgd2l0aCBhIG1heCBsZW5ndGggb2YgNDUsCiAgICAjIGFuZCBhIHJlZCBjb2xvciBhbmQgYSBwcm9tcHQgc2F5aW5nICd0eXBlIGhlcmUgJGk6ICcKICAgIHR4dGJ4LmFwcGVuZChlenRleHQuSW5wdXQobWF4bGVuZ3RoPW1heExlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9Ymx1ZSwgeT15cG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHQ9cHJvbXB0KSkKICAgIHlwb3MgKz0gZGVsdGF5CgogICAgIyBjcmVhdGUgdGhlIHB5Z2FtZSBjbG9jawogICAgY2xvY2sgPSBweWdhbWUudGltZS5DbG9jaygpCiAgICAjIG1haW4gbG9vcCEKCiAgICB3aGlsZSBUcnVlOgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBwcm9ncmFtIGlzIHJ1bm5pbmcgYXQgMzAgZnBzCiAgICAgICAgY2xvY2sudGljaygzMCkKCiAgICAgICAgIyBldmVudHMgZm9yIHR4dGJ4CiAgICAgICAgZXZlbnRzID0gcHlnYW1lLmV2ZW50LmdldCgpCiAgICAgICAgIyBwcm9jZXNzIG90aGVyIGV2ZW50cwogICAgICAgIGZvciBldmVudCBpbiBldmVudHM6CiAgICAgICAgICAgICMgY2xvc2UgaXQgeCBidXR0b24gc2kgcHJlc3NlZAogICAgICAgICAgICBpZiBldmVudC50eXBlID09IFFVSVQ6CiAgICAgICAgICAgICAgICByZXR1cm4gIk5vbmUiCgogICAgICAgICMgY2xlYXIgdGhlIHNjcmVlbgogICAgICAgIHNjcmVlbi5maWxsKHdoaXRlKSAgIyBJIGxpa2UgYmxhY2sgYmV0dGVyIDopCiAgICAgICAgIyB1cGRhdGUgdHh0YnggYW5kIGdldCByZXR1cm4gdmFsCiAgICAgICAgYVswXSA9IHR4dGJ4WzBdLnVwZGF0ZShldmVudHMpCiAgICAgICAgdHh0YnhbMF0uZm9jdXMgPSBUcnVlCiAgICAgICAgdHh0YnhbMF0uY29sb3IgPSBibGFjawoKICAgICAgICAjIGJsaXQgdHh0YnhbaV0gb24gdGhlIHNjcmVlbgogICAgICAgIHR4dGJ4WzBdLmRyYXcoc2NyZWVuKQoKICAgICAgICAjIENoYW5naW5nIHRoZSBmb2N1cyB0byB0aGUgbmV4dCBlbGVtZW50Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAjIGV2ZXJ5IHRpbWUgZW50ZXIgaXMgcHJlc3NlZAogICAgICAgIGlmIGFbMF0gIT0gTm9uZToKICAgICAgICAgICAgcmV0dXJuIGFbMF0KCjx8ZmltX2VuZHw+"]
["c1ff215a8b076c60eb201fa4663641165ad11415-2","c1ff215a8b076c60eb201fa4663641165ad11415",{"$cut":{"chars":18332,"head":"PHxmaW1fcHJlZml4fD4KZnJvbSBweWdhbWUubG9jYWxzIGltcG9ydCAqCmltcG9ydCBweWdhbWUKaW1wb3J0IG1hdGgKaW1wb3J0IG9zCmltcG9ydCBzeXMKZnJvbSBQb2RTaXhOZXQuQ29ubmVjdGlvbiBpbXBvcnQgQ29ubmVjdGlvbkxpc3RlbmVyLCBjb25uZWN0aW9uCmZyb20gdGltZSBpbXBvcnQgc2xlZXAKZnJvbSBFelRleHQgaW1wb3J0IGV6dGV4dAoKaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CiAgICBpbXBvcnQgcHlnYW1lLl92aWV3CgojIFNldCByb290IHBhdGgKdHJ5OgogICAgYXBwcm9vdCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQpleGNlcHQgTmFtZUVycm9yOiAgIyBXZSBhcmUgdGhlIG1haW4gcHkyZXhlIHNjcmlwdCwgbm90IGEgbW9kdWxlCiAgICBhcHByb290ID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkpCgppZigiLmV4ZSIgaW4gYXBwcm9vdCk6CiAgICBhcHByb290ID0gYXBwcm9vdC5yZXBsYWNlKCJib3h4eS5leGUiLCAiIikKCgojIGRlZmluaW5nIHNvbWUgY29sb3JzCmJsdWUgPSAoMCwgMCwgMjU1KQpncmVlbiA9ICgwLCAyNTUsIDApCnJlZCA9ICgyNTUsIDAsIDApCndoaXRlID0gKDI1NSwgMjU1LCAyNTUpCmJsYWNrID0gKDAsIDAsIDApCgoKZGVmIHRleHRJbnB1dChzY3JlZW4sIG1heExlbmd0aCwgcHJvbXB0KToKICAgICMgZmlsbCB0aGUgc2NyZWVuIHcvIGJsYWNrCiAgICBzY3JlZW4uZmlsbChibGFjaykKICAgIHlwb3MgPSAwCiAgICBkZWx0YXkgPSAyNQogICAgdHh0YnggPSBbXQogICAgIyBGb3IgZ2V0dGluZyB0aGUgcmV0dXJuIHZhbHVlcwogICAgYSA9IFsnJ10KICAgICMgaGVyZSBpcyB0aGUgbWFnaWM6IG1ha2luZyB0aGUgdGV4dCBpbnB1dAogICAgIyBjcmVhdGUgYW4gaW5wdXQgd2l0aCBhIG1heCBsZW5ndGggb2YgNDUsCiAgICAjIGFuZCBhIHJlZCBjb2xvciBhbmQgYSBwcm9tcHQgc2F5aW5nICd0eXBlIGhlcmUgJGk6ICcKICAgIHR4dGJ4LmFwcGVuZChlenRleHQuSW5wdXQobWF4bGVuZ3RoPW1heExlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9Ymx1ZSwgeT15cG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHQ9cHJvbXB0KSkKICAgIHlwb3MgKz0gZGVsdGF5CgogICAgIyBjcmVhdGUgdGhlIHB5Z2FtZSBjbG9jawogICAgY2xvY2sgPSBweWdhbWUudGltZS5DbG9jaygpCiAgICAjIG1haW4gbG9vcCEKCiAgICB3aGlsZSBUcnVlOgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBwcm9ncmFtIGlzIHJ1bm5pbmcgYXQgMzAgZnBzCiAgICAgICAgY2xvY2sudGljaygzMCkKCiAgICAgICAgIyBldmVudHMgZm9yIHR4dGJ4CiAgICAgICAgZXZlbnRzID0gcHlnYW1lLmV2ZW50LmdldCgpCiAgICAgICAgIyBwcm9jZXNzIG90aGVyIGV2ZW50cwogICAgICAgIGZvciBldmVudCBpbiBldmVudHM6CiAgICAgICAgICAgICMgY2xvc2UgaXQgeCBidXR0b24gc2kgcHJlc3NlZAogICAgICAgICAgICBpZiBldmVudC50eXBlID09IFFVSVQ6CiAgICAgICAgICAgICAgICByZXR1cm4gIk5vbmUiCgogICAgICAgICMgY2xlYXIgdGhlIHNjcmVlbgogICAgICAgIHNjcmVlbi5maWxsKHdoaXRlKSAgIyBJIGxpa2UgYmxhY2sgYmV0dGVyIDopCiAgICAgICAgIyB1cGRhdGUgdHh0YnggYW5kIGdldCByZXR1cm4gdmFsCiAgICAgICAgYVswXSA9IHR4dGJ4WzBdLnVwZGF0ZShldmVudHMpCiAgICAgICAgdHh0YnhbMF0uZm9jdXMgPSBUcnVlCiAgICAgICAgdHh0YnhbMF0uY29sb3IgPSBibGFjawoKICAgICAgICAjIGJsaXQgdHh0YnhbaV0gb24gdGhlIHNjcmVlbgogICAgICAgIHR4dGJ4WzBdLmRyYXcoc2NyZWVuKQoKICAgICAgICAjIENoYW5naW5nIHRoZSBmb2N1cyB0byB0aGUgbmV4dCBlbGVtZW50CiAgICAgICAgIyBldmVyeSB0aW1lIGVudGVyIGlzIHByZXNzZWQKICAgICAgICBpZiBhWzBdICE9IE5vbmU6CiAgICAgICAgICAgIHJldHVybiBhWzBdCgogICAgICAgICMgcmVmcmVzaCB0aGUgZGlzcGxheQogICAgICAgIHB5Z2FtZS5kaXNwbGF5LmZsaXAoKQoKCmNsYXNzIEJveGVzR2FtZShDb25uZWN0aW9uTGlzdGVuZXIpOgogICAgZGVmIGluaXRTb3VuZChzZWxmKToKICAgICAgICBweWdhbWUubWl4ZXIubXVzaWMubG9hZChvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoIlJFU09VUkNFUEFUSCIsIGFwcHJvb3QpLCAicmVzb3VyY2VzIiwgIm11c2ljLndhdiIpKQogICAgICAgIHNlbGYud2luU291bmQgPSBweWdhbWUubWl4ZXIuU291bmQob3MucGF0aC5qb2luKG9zLmVudmlyb24uZ2V0KCJSRVNPVVJDRVBBVEgiLCBhcHByb290KSwgInJlc291cmNlcyIsICJ3aW4ud2F2IikpCiAgICAgICAgc2VsZi5sb3NlU291bmQgPSBweWdhbWUubWl4ZXIuU291bmQob3MucGF0aC5qb2luKG9zLmVudmlyb24uZ2V0KCJSRVNPVVJDRVBBVEgiLCBhcHByb290KSwgInJlc291cmNlcyIsICJsb3NlLndhdiIpKQogICAgICAgIHNlbGYucGxhY2VTb3VuZCA9IHB5Z2FtZS5taXhlci5Tb3VuZChvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoIlJFU09VUkNFUEFUSCIsIGFwcHJvb3QpLCAicmVzb3VyY2VzIiwgInBsYWNlLndhdiIpKQogICAgICAgIGlmIHNlbGYuZW5hYmxlU291bmQ6CiAgICAgICAgICAgIHB5Z2FtZS5taXhlci5tdXNpYy5wbGF5KCkKCiAgICBkZWYgTmV0d29ya19jbG9zZShzZWxmLCBkYXRhKToKICAgICAgICBzeXMuZXhpdCgpCgogICAgZGVmIE5ldHdvcmtfeW91cnR1cm4oc2VsZiwgZGF0YSk6CiAgICAgICAgIyAgdG9yZiA9IHNob3J0IGZvciB0cnVlIG9yIGZhbHNlCiAgICAgICAgc2VsZi50dXJuID0gZGF0YVsidG9yZiJdCgogICAgZGVmIE5ldHdvcmtfc3RhcnRnYW1lKHNlbGYsIGRhdGEpOgogICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKICAgICAgICBzZWxmLm51bSA9IGRhdGFbInBsYXllciJdCiAgICAgICAgc2VsZi5nYW1laWQgPSBkYXRhWyJnYW1laWQiXQoKICAgIGRlZiBOZXR3b3JrX3BsYWNlKHNlbGYsIGRhdGEpOgogICAgICAgIGlmIHNlbGYuZW5hYmxlU291bmQ6CiAgICAgICAgICAgIHNlbGYucGxhY2VT"}}]
["c1ff215a8b076c60eb201fa4663641165ad11415-3","c1ff215a8b076c60eb201fa4663641165ad11415",{"$cut":{"chars":18332,"head":"PHxmaW1fcHJlZml4fD4KZnJvbSBweWdhbWUubG9jYWxzIGltcG9ydCAqCmltcG9ydCBweWdhbWUKaW1wb3J0IG1hdGgKaW1wb3J0IG9zCmltcG9ydCBzeXMKZnJvbSBQb2RTaXhOZXQuQ29ubmVjdGlvbiBpbXBvcnQgQ29ubmVjdGlvbkxpc3RlbmVyLCBjb25uZWN0aW9uCmZyb20gdGltZSBpbXBvcnQgc2xlZXAKZnJvbSBFelRleHQgaW1wb3J0IGV6dGV4dAoKaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CiAgICBpbXBvcnQgcHlnYW1lLl92aWV3CgojIFNldCByb290IHBhdGgKdHJ5OgogICAgYXBwcm9vdCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQpleGNlcHQgTmFtZUVycm9yOiAgIyBXZSBhcmUgdGhlIG1haW4gcHkyZXhlIHNjcmlwdCwgbm90IGEgbW9kdWxlCiAgICBhcHByb290ID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkpCgppZigiLmV4ZSIgaW4gYXBwcm9vdCk6CiAgICBhcHByb290ID0gYXBwcm9vdC5yZXBsYWNlKCJib3h4eS5leGUiLCAiIikKCgojIGRlZmluaW5nIHNvbWUgY29sb3JzCmJsdWUgPSAoMCwgMCwgMjU1KQpncmVlbiA9ICgwLCAyNTUsIDApCnJlZCA9ICgyNTUsIDAsIDApCndoaXRlID0gKDI1NSwgMjU1LCAyNTUpCmJsYWNrID0gKDAsIDAsIDApCgoKZGVmIHRleHRJbnB1dChzY3JlZW4sIG1heExlbmd0aCwgcHJvbXB0KToKICAgICMgZmlsbCB0aGUgc2NyZWVuIHcvIGJsYWNrCiAgICBzY3JlZW4uZmlsbChibGFjaykKICAgIHlwb3MgPSAwCiAgICBkZWx0YXkgPSAyNQogICAgdHh0YnggPSBbXQogICAgIyBGb3IgZ2V0dGluZyB0aGUgcmV0dXJuIHZhbHVlcwogICAgYSA9IFsnJ10KICAgICMgaGVyZSBpcyB0aGUgbWFnaWM6IG1ha2luZyB0aGUgdGV4dCBpbnB1dAogICAgIyBjcmVhdGUgYW4gaW5wdXQgd2l0aCBhIG1heCBsZW5ndGggb2YgNDUsCiAgICAjIGFuZCBhIHJlZCBjb2xvciBhbmQgYSBwcm9tcHQgc2F5aW5nICd0eXBlIGhlcmUgJGk6ICcKICAgIHR4dGJ4LmFwcGVuZChlenRleHQuSW5wdXQobWF4bGVuZ3RoPW1heExlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9Ymx1ZSwgeT15cG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHQ9cHJvbXB0KSkKICAgIHlwb3MgKz0gZGVsdGF5CgogICAgIyBjcmVhdGUgdGhlIHB5Z2FtZSBjbG9jawogICAgY2xvY2sgPSBweWdhbWUudGltZS5DbG9jaygpCiAgICAjIG1haW4gbG9vcCEKCiAgICB3aGlsZSBUcnVlOgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBwcm9ncmFtIGlzIHJ1bm5pbmcgYXQgMzAgZnBzCiAgICAgICAgY2xvY2sudGljaygzMCkKCiAgICAgICAgIyBldmVudHMgZm9yIHR4dGJ4CiAgICAgICAgZXZlbnRzID0gcHlnYW1lLmV2ZW50LmdldCgpCiAgICAgICAgIyBwcm9jZXNzIG90aGVyIGV2ZW50cwogICAgICAgIGZvciBldmVudCBpbiBldmVudHM6CiAgICAgICAgICAgICMgY2xvc2UgaXQgeCBidXR0b24gc2kgcHJlc3NlZAogICAgICAgICAgICBpZiBldmVudC50eXBlID09IFFVSVQ6CiAgICAgICAgICAgICAgICByZXR1cm4gIk5vbmUiCgogICAgICAgICMgY2xlYXIgdGhlIHNjcmVlbgogICAgICAgIHNjcmVlbi5maWxsKHdoaXRlKSAgIyBJIGxpa2UgYmxhY2sgYmV0dGVyIDopCiAgICAgICAgIyB1cGRhdGUgdHh0YnggYW5kIGdldCByZXR1cm4gdmFsCiAgICAgICAgYVswXSA9IHR4dGJ4WzBdLnVwZGF0ZShldmVudHMpCiAgICAgICAgdHh0YnhbMF0uZm9jdXMgPSBUcnVlCiAgICAgICAgdHh0YnhbMF0uY29sb3IgPSBibGFjawoKICAgICAgICAjIGJsaXQgdHh0YnhbaV0gb24gdGhlIHNjcmVlbgogICAgICAgIHR4dGJ4WzBdLmRyYXcoc2NyZWVuKQoKICAgICAgICAjIENoYW5naW5nIHRoZSBmb2N1cyB0byB0aGUgbmV4dCBlbGVtZW50CiAgICAgICAgIyBldmVyeSB0aW1lIGVudGVyIGlzIHByZXNzZWQKICAgICAgICBpZiBhWzBdICE9IE5vbmU6CiAgICAgICAgICAgIHJldHVybiBhWzBdCgogICAgICAgICMgcmVmcmVzaCB0aGUgZGlzcGxheQogICAgICAgIHB5Z2FtZS5kaXNwbGF5LmZsaXAoKQoKCmNsYXNzIEJveGVzR2FtZShDb25uZWN0aW9uTGlzdGVuZXIpOgogICAgZGVmIGluaXRTb3VuZChzZWxmKToKICAgICAgICBweWdhbWUubWl4ZXIubXVzaWMubG9hZChvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoIlJFU09VUkNFUEFUSCIsIGFwcHJvb3QpLCAicmVzb3VyY2VzIiwgIm11c2ljLndhdiIpKQogICAgICAgIHNlbGYud2luU291bmQgPSBweWdhbWUubWl4ZXIuU291bmQob3MucGF0aC5qb2luKG9zLmVudmlyb24uZ2V0KCJSRVNPVVJDRVBBVEgiLCBhcHByb290KSwgInJlc291cmNlcyIsICJ3aW4ud2F2IikpCiAgICAgICAgc2VsZi5sb3NlU291bmQgPSBweWdhbWUubWl4ZXIuU291bmQob3MucGF0aC5qb2luKG9zLmVudmlyb24uZ2V0KCJSRVNPVVJDRVBBVEgiLCBhcHByb290KSwgInJlc291cmNlcyIsICJsb3NlLndhdiIpKQogICAgICAgIHNlbGYucGxhY2VTb3VuZCA9IHB5Z2FtZS5taXhlci5Tb3VuZChvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoIlJFU09VUkNFUEFUSCIsIGFwcHJvb3QpLCAicmVzb3VyY2VzIiwgInBsYWNlLndhdiIpKQogICAgICAgIGlmIHNlbGYuZW5hYmxlU291bmQ6CiAgICAgICAgICAgIHB5Z2FtZS5taXhlci5tdXNpYy5wbGF5KCkKCiAgICBkZWYgTmV0d29ya19jbG9zZShzZWxmLCBkYXRhKToKICAgICAgICBzeXMuZXhpdCgpCgogICAgZGVmIE5ldHdvcmtfeW91cnR1cm4oc2VsZiwgZGF0YSk6CiAgICAgICAgIyAgdG9yZiA9IHNob3J0IGZvciB0cnVlIG9yIGZhbHNlCiAgICAgICAgc2VsZi50dXJuID0gZGF0YVsidG9yZiJdCgogICAgZGVmIE5ldHdvcmtfc3RhcnRnYW1lKHNlbGYsIGRhdGEpOgogICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKICAgICAgICBzZWxmLm51bSA9IGRhdGFbInBsYXllciJdCiAgICAgICAgc2VsZi5nYW1laWQgPSBkYXRhWyJnYW1laWQiXQoKICAgIGRlZiBOZXR3b3JrX3BsYWNlKHNlbGYsIGRhdGEpOgogICAgICAgIGlmIHNlbGYuZW5hYmxlU291bmQ6CiAgICAgICAgICAgIHNlbGYucGxhY2VT"}}]
["c1ff215a8b076c60eb201fa4663641165ad11415-4","c1ff215a8b076c60eb201fa4663641165ad11415","PHxmaW1fcHJlZml4fD4KZnJvbSBweWdhbWUubG9jYWxzIGltcG9ydCAqCmltcG9ydCBweWdhbWUKaW1wb3J0IG1hdGgKaW1wb3J0IG9zCmltcG9ydCBzeXMKZnJvbSBQb2RTaXhOZXQuQ29ubmVjdGlvbiBpbXBvcnQgQ29ubmVjdGlvbkxpc3RlbmVyLCBjb25uZWN0aW9uCmZyb20gdGltZSBpbXBvcnQgc2xlZXAKZnJvbSBFelRleHQgaW1wb3J0IGV6dGV4dAoKaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CiAgICBpbXBvcnQgcHlnYW1lLl92aWV3CgojIFNldCByb290IHBhdGgKdHJ5OgogICAgYXBwcm9vdCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQpleGNlcHQgTmFtZUVycm9yOiAgIyBXZSBhcmUgdGhlIG1haW4gcHkyZXhlIHNjcmlwdCwgbm90IGEgbW9kdWxlCiAgICBhcHByb290ID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkpCgppZigiLmV4ZSIgaW4gYXBwcm9vdCk6CiAgICBhcHByb290ID0gYXBwcm9vdC5yZXBsYWNlKCJib3h4eS5leGUiLCAiIikKCgojIGRlZmluaW5nIHNvbWUgY29sb3JzCmJsdWUgPSAoMCwgMCwgMjU1KQpncmVlbiA9ICgwLCAyNTUsIDApCnJlZCA9ICgyNTUsIDAsIDApCndoaXRlID0gKDI1NSwgMjU1LCAyNTUpCmJsYWNrID0gKDAsIDAsIDApCgoKZGVmIHRleHRJbnB1dChzY3JlZW4sIG1heExlbmd0aCwgcHJvbXB0KToKICAgICMgZmlsbCB0aGUgc2NyZWVuIHcvIGJsYWNrCiAgICBzY3JlZW4uZmlsbChibGFjaykKICAgIHlwb3MgPSAwCiAgICBkZWx0YXkgPSAyNQogICAgdHh0YnggPSBbXQogICAgIyBGb3IgZ2V0dGluZyB0aGUgcmV0dXJuIHZhbHVlcwogICAgYSA9IFsnJ10KICAgICMgaGVyZSBpcyB0aGUgbWFnaWM6IG1ha2luZyB0aGUgdGV4dCBpbnB1dAogICAgIyBjcmVhdGUgYW4gaW5wdXQgd2l0aCBhIG1heCBsZW5ndGggb2YgNDUsCiAgICAjIGFuZCBhIHJlZCBjb2xvciBhbmQgYSBwcm9tcHQgc2F5aW5nICd0eXBlIGhlcmUgJGk6ICcKICAgIHR4dGJ4LmFwcGVuZChlenRleHQuSW5wdXQobWF4bGVuZ3RoPW1heExlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9Ymx1ZSwgeT15cG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHQ9cHJvbXB0KSkKICAgIHlwb3MgKz0gZGVsdGF5CgogICAgIyBjcmVhdGUgdGhlIHB5Z2FtZSBjbG9jawogICAgY2xvY2sgPSBweWdhbWUudGltZS5DbG9jaygpCiAgICAjIG1haW4gbG9vcCEKCiAgICB3aGlsZSBUcnVlOgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBwcm9ncmFtIGlzIHJ1bm5pbmcgYXQgMzAgZnBzCiAgICAgICAgY2xvY2sudGljaygzMCkKCiAgICAgICAgIyBldmVudHMgZm9yIHR4dGJ4CiAgICAgICAgZXZlbnRzID0gcHlnYW1lLmV2ZW50LmdldCgpCiAgICAgICAgIyBwcm9jZXNzIG90aGVyIGV2ZW50cwogICAgICAgIGZvciBldmVudCBpbiBldmVudHM6CiAgICAgICAgICAgICMgY2xvc2UgaXQgeCBidXR0b24gc2kgcHJlc3NlZAogICAgICAgICAgICBpZiBldmVudC50eXBlID09IFFVSVQ6CiAgICAgICAgICAgICAgICByZXR1cm4gIk5vbmUiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgIyBjbGVhciB0aGUgc2NyZWVuCiAgICAgICAgc2NyZWVuLmZpbGwod2hpdGUpICAjIEkgbGlrZSBibGFjayBiZXR0ZXIgOikKICAgICAgICAjIHVwZGF0ZSB0eHRieCBhbmQgZ2V0IHJldHVybiB2YWwKPHxmaW1fZW5kfD4="]
["e7101ab5ed4f59ccb4a6eb3c69693ad8a135013e-1","e7101ab5ed4f59ccb4a6eb3c69693ad8a135013e",{"$cut":{"chars":19756,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2xvY2FsL2Jpbi9weXRob24zCgojIFRoaXMgdG9vbCB3aWxsIHRha2UgYW4gYW4gYXJ0aWZhY3QgZnJvbSBjb21tYW5kbGluZSBhbmQgZ3JhYiBJb0MgaW5mb3JtYXRpb24gc3VjaCBhcyBleGlmIGFuZCBoYXNoZXMgYW5kIHByaW50IHRoZW0KCiMgSXQgY2FuIGFsc28gYmUgaW1wb3J0ZWQgbGlrZSBhIGxpYnJhcnkgdG8gYmUgdXNlZCBieSBvdGhlciB0b29scy4gCiMgSWYgdXNlZCBhcyBhIGxpYnJhcnksIHRoZSBpdGVtcyB3b24ndCBiZSBwcmludGVkIHRvIHRoZSBjb25zb2xlLCBhcyB0aGlzIGlzIGRvbmUgaW4gdGhlIE1haW4gZnVuY3Rpb24KCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCBzeXMKZnJvbSBvcy5wYXRoIGltcG9ydCBpc2Rpciwgam9pbiwgZXhpc3RzLCBzcGxpdGV4dApmcm9tIG9zIGltcG9ydCBsaXN0ZGlyCmZyb20gcmUgaW1wb3J0IGZpbmRhbGwsIE1VTFRJTElORQpmcm9tIHBhdGhsaWIgaW1wb3J0IFB1cmVQYXRoCmZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZQpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoKIyBUaGVzZSBzaG91bGRuJ3QgY2hhbmdlIHRoYXQgbXVjaCwgYnV0IHBvc3NpYmx5IHdpbGwgZnJvbSBzeXN0ZW0gdG8gc3lzdGVtLiBJZiBzbywgc2V0IHRoZW0gaGVyZToKbXNidWlsZFBhdGggPSAnL3Vzci9sb2NhbC9iaW4vbXNidWlsZCcKY3NjUGF0aCA9ICcvdXNyL2xvY2FsL2Jpbi9jc2MnCgoKIyMjIyMgQ29tcGlsZXIgRnVuY3Rpb25zICMjIyMjCgpkZWYgbXNidWlsZENTaGFycChmaWxlLCBwbGF0Zm9ybT0ieDY0IiwgY29uZmlnPSJSZWxlYXNlIiwgdGFyZ2V0PSJSZWJ1aWxkIik6CglmbGFncyA9IFtmaWxlLCAiL3Q6e30iLmZvcm1hdCh0YXJnZXQpLCAiL3A6Q29uZmlndXJhdGlvbj17fSxQbGF0Zm9ybT17fSIuZm9ybWF0KGNvbmZpZywgcGxhdGZvcm0pXQoJb3V0cHV0ID0gc3VicHJvY2Vzcy5ydW4oW21zYnVpbGRQYXRoXSArIGZsYWdzLCBjYXB0dXJlX291dHB1dD1UcnVlKQoJcmV0dXJuIG91dHB1dC5zdGRvdXQuZGVjb2RlKCkKCgpkZWYgY3NjQ1NoYXJwKGZpbGUsIHBsYXRmb3JtPSJ4NjQiLCB0YXJnZXQ9IndpbmV4ZSIpOgoJZmxhZ3MgPSBbZmlsZSwgIi90Ont9Ii5mb3JtYXQodGFyZ2V0KSwgIi9wbGF0Zm9ybTp7fSIuZm9ybWF0KHBsYXRmb3JtKV0KCW91dHB1dCA9IHN1YnByb2Nlc3MucnVuKFtjc2NQYXRoXSArIGZsYWdzLCBjYXB0dXJlX291dHB1dD1UcnVlKQoJcmV0dXJuIG91dHB1dC5zdGRvdXQuZGVjb2RlKCkKCiMjIyMjIyMjIyMgRHluYW1pYyBGdW5jdGlvbnMgIyMjIyMjIyMjIwoKZGVmIF9keW5hbWljYWxseURldGVybWluZSgKCWlkZW50aWZpZXI6IHN0ciwgCglmdW5jX25hbWU6IHN0ciwgCglkaXJlY3RvcnlfaWQ6IHN0ciA9ICdEaXJlY3RvcnknLCAKCXNsbl9pZDogc3RyID0gJ1NsbicsIAoJY3Nwcm9qX2lkOiBzdHIgPSAnQ3NQcm9qJwopOgoJIiIiQSBwcml2YXRlIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB0byBkeW5hbWljYWxseSBkZXRlcm1pbmUgd2hpY2ggY29ycmVzcG9uZGluZyBmdW5jdGlvbiBydW4gYmFzZWQgb2ZmIG9mIHdoZXRoZXIgCgl0aGUgaW5wdXQgaXMgYSBkaXJlY3RvcnksIGEgc29sdXRpb24gZmlsZSwgb3IgYSBjc3Byb2ogZmlsZS4KCglBcmdzOgoJCWlkZW50aWZpZXIgKHN0cik6IFRoZSBpbnB1dCB3aGljaCBpZGVudGlmaWVzIGEgZGlyZWN0b3J5LCBzbG4gZmlsZSwgb3IgY3Nwcm9qIGZpbGUuCgkJZnVuY19uYW1lIChzdHIpOiBUaGUgZnVuY3Rpb24gbmFtZSB0byBkeW5hbWljYWxseSBmaW5kIHRoZSB0aHJlZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9ucyBmcm9tLgoJCWRpcmVjdG9yeV9pZCAoc3RyLCBvcHRpb25hbCk6IFRoZSBJRCB0byBhZGQgdG8gdGhlIGZ1bmNfbmFtZSB0byBmaW5kIHRoZSBkaXJlY3RvcnkgZnVuY3Rpb24uIAoJCQlEZWZhdWx0cyB0byAnRGlyZWN0b3J5Jy4KCQlzbG5faWQgKHN0ciwgb3B0aW9uYWwpOiBUaGUgSUQgdG8gYWRkIHRvIHRoZSBmdW5jX25hbWUgdG8gZmluZCB0aGUgc29sdXRpb24gZnVuY3Rpb24uIERlZmF1bHRzIHRvICdTbG4nLgoJCWNzcHJval9pZCAoc3RyLCBvcHRpb25hbCk6IFRoZSBJRCB0byBhZGQgdG8gdGhlIGZ1bmNfbmFtZSB0byBmaW5kIHRoZSBjc3Byb2ogZnVuY3Rpb24uIERlZmF1bHRzIHRvICdDc1Byb2onLgoKCVJldHVybnM6CgkJQW55OiBUaGUgcmVzdWx0IGZyb20gdGhlIGR5bmFtaWNhbGx5IGludm9rZWQgZnVuY3Rpb24uCgkiIiIKCWRpcmVjdG9yeV9mdW5jID0gZmlsZV9sb2NhbHMuZ2V0KGZ1bmNfbmFtZSArIGRpcmVjdG9yeV9pZCkKCXNsbl9mdW5jID0gZmlsZV9sb2NhbHMuZ2V0KGZ1bmNfbmFtZSArIHNsbl9pZCkKCWNzcHJval9mdW5jID0gZmlsZV9sb2NhbHMuZ2V0KGZ1bmNfbmFtZSArIGNzcHJval9pZCkKCgkjIElmIGlzIGRpcmVjdG9yeQoJaWYgaXNkaXIoaWRlbnRpZmllcik6CgkJaWYgZGlyZWN0b3J5X2Z1bmM6CgkJCXJldHVybiBkaXJlY3RvcnlfZnVuYyhpZGVudGlmaWVyKQoJCWVsc2U6CgkJCXByaW50KGYiWy1dIERpcmVjdG9yeSBGdW5jdGlvbjoge2Z1bmNfbmFtZSArIGRpcmVjdG9yeV9pZH0gbm90IGZvdW5kLiIpCgkKCV8sIGV4dGVuc2lvbiA9IHNwbGl0ZXh0KGlkZW50aWZpZXIpCgkjIElmIGlzIC5zbG4KCWlmIGV4dGVuc2lvbiA9PSAnLnNsbic6CgkJaWYgc2xuX2Z1bmM6CgkJCXJldHVybiBzbG5fZnVuYyhpZGVudGlmaWVyKQoJCWVsc2U6CgkJCXByaW50KGYiWy1dIFNvbHV0aW9uIEZ1bmN0aW9uOiB7ZnVuY19uYW1lICsgc2xuX2lkfSBub3QgZm91bmQuIikKCgkjIElmIGlzIC5jc3Byb2oKCWVsaWYgZXh0ZW5zaW9uID09ICcuY3Nwcm9qJzoKCQlpZiBjc3Byb2pfZnVuYzoKCQkJcmV0dXJuIGNzcHJval9mdW5jKGlkZW50aWZpZXIpCgkJZWxzZToKCQkJcHJpbnQoZiJbLV0gQ3NQcm9qIEZ1bmN0aW9uOiB7ZnVuY19uYW1lICsgY3Nwcm9qX2lkfSBub3QgZm91bmQuIikKCmRlZiBfZHluYW1pY0RpcmVjdG9yeShkaXJlY3Rvcnk6IHN0ciwgZnVuY19uYW1lOiBzdHIsIHNsbl9pZDogc3RyID0gJ1NsbicpIC0+IGxpc3Q6CgkiIiJEeW5hbWlj"}}]
["e7101ab5ed4f59ccb4a6eb3c69693ad8a135013e-2","e7101ab5ed4f59ccb4a6eb3c69693ad8a135013e",{"$cut":{"chars":19756,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2xvY2FsL2Jpbi9weXRob24zCgojIFRoaXMgdG9vbCB3aWxsIHRha2UgYW4gYW4gYXJ0aWZhY3QgZnJvbSBjb21tYW5kbGluZSBhbmQgZ3JhYiBJb0MgaW5mb3JtYXRpb24gc3VjaCBhcyBleGlmIGFuZCBoYXNoZXMgYW5kIHByaW50IHRoZW0KCiMgSXQgY2FuIGFsc28gYmUgaW1wb3J0ZWQgbGlrZSBhIGxpYnJhcnkgdG8gYmUgdXNlZCBieSBvdGhlciB0b29scy4gCiMgSWYgdXNlZCBhcyBhIGxpYnJhcnksIHRoZSBpdGVtcyB3b24ndCBiZSBwcmludGVkIHRvIHRoZSBjb25zb2xlLCBhcyB0aGlzIGlzIGRvbmUgaW4gdGhlIE1haW4gZnVuY3Rpb24KCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCBzeXMKZnJvbSBvcy5wYXRoIGltcG9ydCBpc2Rpciwgam9pbiwgZXhpc3RzLCBzcGxpdGV4dApmcm9tIG9zIGltcG9ydCBsaXN0ZGlyCmZyb20gcmUgaW1wb3J0IGZpbmRhbGwsIE1VTFRJTElORQpmcm9tIHBhdGhsaWIgaW1wb3J0IFB1cmVQYXRoCmZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZQpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoKIyBUaGVzZSBzaG91bGRuJ3QgY2hhbmdlIHRoYXQgbXVjaCwgYnV0IHBvc3NpYmx5IHdpbGwgZnJvbSBzeXN0ZW0gdG8gc3lzdGVtLiBJZiBzbywgc2V0IHRoZW0gaGVyZToKbXNidWlsZFBhdGggPSAnL3Vzci9sb2NhbC9iaW4vbXNidWlsZCcKY3NjUGF0aCA9ICcvdXNyL2xvY2FsL2Jpbi9jc2MnCgoKIyMjIyMgQ29tcGlsZXIgRnVuY3Rpb25zICMjIyMjCgpkZWYgbXNidWlsZENTaGFycChmaWxlLCBwbGF0Zm9ybT0ieDY0IiwgY29uZmlnPSJSZWxlYXNlIiwgdGFyZ2V0PSJSZWJ1aWxkIik6CglmbGFncyA9IFtmaWxlLCAiL3Q6e30iLmZvcm1hdCh0YXJnZXQpLCAiL3A6Q29uZmlndXJhdGlvbj17fSxQbGF0Zm9ybT17fSIuZm9ybWF0KGNvbmZpZywgcGxhdGZvcm0pXQoJb3V0cHV0ID0gc3VicHJvY2Vzcy5ydW4oW21zYnVpbGRQYXRoXSArIGZsYWdzLCBjYXB0dXJlX291dHB1dD1UcnVlKQoJcmV0dXJuIG91dHB1dC5zdGRvdXQuZGVjb2RlKCkKCgpkZWYgY3NjQ1NoYXJwKGZpbGUsIHBsYXRmb3JtPSJ4NjQiLCB0YXJnZXQ9IndpbmV4ZSIpOgoJZmxhZ3MgPSBbZmlsZSwgIi90Ont9Ii5mb3JtYXQodGFyZ2V0KSwgIi9wbGF0Zm9ybTp7fSIuZm9ybWF0KHBsYXRmb3JtKV0KCW91dHB1dCA9IHN1YnByb2Nlc3MucnVuKFtjc2NQYXRoXSArIGZsYWdzLCBjYXB0dXJlX291dHB1dD1UcnVlKQoJcmV0dXJuIG91dHB1dC5zdGRvdXQuZGVjb2RlKCkKCiMjIyMjIyMjIyMgRHluYW1pYyBGdW5jdGlvbnMgIyMjIyMjIyMjIwoKZGVmIF9keW5hbWljYWxseURldGVybWluZSgKCWlkZW50aWZpZXI6IHN0ciwgCglmdW5jX25hbWU6IHN0ciwgCglkaXJlY3RvcnlfaWQ6IHN0ciA9ICdEaXJlY3RvcnknLCAKCXNsbl9pZDogc3RyID0gJ1NsbicsIAoJY3Nwcm9qX2lkOiBzdHIgPSAnQ3NQcm9qJwopOgoJIiIiQSBwcml2YXRlIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB0byBkeW5hbWljYWxseSBkZXRlcm1pbmUgd2hpY2ggY29ycmVzcG9uZGluZyBmdW5jdGlvbiBydW4gYmFzZWQgb2ZmIG9mIHdoZXRoZXIgCgl0aGUgaW5wdXQgaXMgYSBkaXJlY3RvcnksIGEgc29sdXRpb24gZmlsZSwgb3IgYSBjc3Byb2ogZmlsZS4KCglBcmdzOgoJCWlkZW50aWZpZXIgKHN0cik6IFRoZSBpbnB1dCB3aGljaCBpZGVudGlmaWVzIGEgZGlyZWN0b3J5LCBzbG4gZmlsZSwgb3IgY3Nwcm9qIGZpbGUuCgkJZnVuY19uYW1lIChzdHIpOiBUaGUgZnVuY3Rpb24gbmFtZSB0byBkeW5hbWljYWxseSBmaW5kIHRoZSB0aHJlZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9ucyBmcm9tLgoJCWRpcmVjdG9yeV9pZCAoc3RyLCBvcHRpb25hbCk6IFRoZSBJRCB0byBhZGQgdG8gdGhlIGZ1bmNfbmFtZSB0byBmaW5kIHRoZSBkaXJlY3RvcnkgZnVuY3Rpb24uIAoJCQlEZWZhdWx0cyB0byAnRGlyZWN0b3J5Jy4KCQlzbG5faWQgKHN0ciwgb3B0aW9uYWwpOiBUaGUgSUQgdG8gYWRkIHRvIHRoZSBmdW5jX25hbWUgdG8gZmluZCB0aGUgc29sdXRpb24gZnVuY3Rpb24uIERlZmF1bHRzIHRvICdTbG4nLgoJCWNzcHJval9pZCAoc3RyLCBvcHRpb25hbCk6IFRoZSBJRCB0byBhZGQgdG8gdGhlIGZ1bmNfbmFtZSB0byBmaW5kIHRoZSBjc3Byb2ogZnVuY3Rpb24uIERlZmF1bHRzIHRvICdDc1Byb2onLgoKCVJldHVybnM6CgkJQW55OiBUaGUgcmVzdWx0IGZyb20gdGhlIGR5bmFtaWNhbGx5IGludm9rZWQgZnVuY3Rpb24uCgkiIiIKCWRpcmVjdG9yeV9mdW5jID0gZmlsZV9sb2NhbHMuZ2V0KGZ1bmNfbmFtZSArIGRpcmVjdG9yeV9pZCkKCXNsbl9mdW5jID0gZmlsZV9sb2NhbHMuZ2V0KGZ1bmNfbmFtZSArIHNsbl9pZCkKCWNzcHJval9mdW5jID0gZmlsZV9sb2NhbHMuZ2V0KGZ1bmNfbmFtZSArIGNzcHJval9pZCkKCgkjIElmIGlzIGRpcmVjdG9yeQoJaWYgaXNkaXIoaWRlbnRpZmllcik6CgkJaWYgZGlyZWN0b3J5X2Z1bmM6CgkJCXJldHVybiBkaXJlY3RvcnlfZnVuYyhpZGVudGlmaWVyKQoJCWVsc2U6CgkJCXByaW50KGYiWy1dIERpcmVjdG9yeSBGdW5jdGlvbjoge2Z1bmNfbmFtZSArIGRpcmVjdG9yeV9pZH0gbm90IGZvdW5kLiIpCgkKCV8sIGV4dGVuc2lvbiA9IHNwbGl0ZXh0KGlkZW50aWZpZXIpCgkjIElmIGlzIC5zbG4KCWlmIGV4dGVuc2lvbiA9PSAnLnNsbic6CgkJaWYgc2xuX2Z1bmM6CgkJCXJldHVybiBzbG5fZnVuYyhpZGVudGlmaWVyKQoJCWVsc2U6CgkJCXByaW50KGYiWy1dIFNvbHV0aW9uIEZ1bmN0aW9uOiB7ZnVuY19uYW1lICsgc2xuX2lkfSBub3QgZm91bmQuIikKCgkjIElmIGlzIC5jc3Byb2oKCWVsaWYgZXh0ZW5zaW9uID09ICcuY3Nwcm9qJzoKCQlpZiBjc3Byb2pfZnVuYzoKCQkJcmV0dXJuIGNzcHJval9mdW5jKGlkZW50aWZpZXIpCgkJZWxzZToKCQkJcHJpbnQoZiJbLV0gQ3NQcm9qIEZ1bmN0aW9uOiB7ZnVuY19uYW1lICsgY3Nwcm9qX2lkfSBub3QgZm91bmQuIikKCmRlZiBfZHluYW1pY0RpcmVjdG9yeShkaXJlY3Rvcnk6IHN0ciwgZnVuY19uYW1lOiBzdHIsIHNsbl9pZDogc3RyID0gJ1NsbicpIC0+IGxpc3Q6CgkiIiJEeW5hbWlj"}}]
["e7101ab5ed4f59ccb4a6eb3c69693ad8a135013e-3","e7101ab5ed4f59ccb4a6eb3c69693ad8a135013e","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2xvY2FsL2Jpbi9weXRob24zCgojIFRoaXMgdG9vbCB3aWxsIHRha2UgYW4gYW4gYXJ0aWZhY3QgZnJvbSBjb21tYW5kbGluZSBhbmQgZ3JhYiBJb0MgaW5mb3JtYXRpb24gc3VjaCBhcyBleGlmIGFuZCBoYXNoZXMgYW5kIHByaW50IHRoZW0KCiMgSXQgY2FuIGFsc28gYmUgaW1wb3J0ZWQgbGlrZSBhIGxpYnJhcnkgdG8gYmUgdXNlZCBieSBvdGhlciB0b29scy4gCiMgSWYgdXNlZCBhcyBhIGxpYnJhcnksIHRoZSBpdGVtcyB3b24ndCBiZSBwcmludGVkIHRvIHRoZSBjb25zb2xlLCBhcyB0aGlzIGlzIGRvbmUgaW4gdGhlIE1haW4gZnVuY3Rpb24KCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCBzeXMKZnJvbSBvcy5wYXRoIGltcG9ydCBpc2Rpciwgam9pbiwgZXhpc3RzLCBzcGxpdGV4dApmcm9tIG9zIGltcG9ydCBsaXN0ZGlyCmZyb20gcmUgaW1wb3J0IGZpbmRhbGwsIE1VTFRJTElORQpmcm9tIHBhdGhsaWIgaW1wb3J0IFB1cmVQYXRoCmZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZQpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoKIyBUaGVzZSBzaG91bGRuJ3QgY2hhbmdlIHRoYXQgbXVjaCwgYnV0IHBvc3NpYmx5IHdpbGwgZnJvbSBzeXN0ZW0gdG8gc3lzdGVtLiBJZiBzbywgc2V0IHRoZW0gaGVyZToKbXNidWlsZFBhdGggPSAnL3Vzci9sb2NhbC9iaW4vbXNidWlsZCcKY3NjUGF0aCA9ICcvdXNyL2xvY2FsL2Jpbi9jc2MnCgoKIyMjIyMgQ29tcGlsZXIgRnVuY3Rpb25zICMjIyMjCgpkZWYgbXNidWlsZENTaGFycChmaWxlLCBwbGF0Zm9ybT0ieDY0IiwgY29uZmlnPSJSZWxlYXNlIiwgdGFyZ2V0PSJSZWJ1aWxkIik6CglmbGFncyA9IFtmaWxlLCAiL3Q6e30iLmZvcm1hdCh0YXJnZXQpLCAiL3A6Q29uZmlndXJhdGlvbj17fSxQbGF0Zm9ybT17fSIuZm9ybWF0KGNvbmZpZywgcGxhdGZvcm0pXQoJb3V0cHV0ID0gc3VicHJvY2Vzcy5ydW4oW21zYnVpbGRQYXRoXSArIGZsYWdzLCBjYXB0dXJlX291dHB1dD1UcnVlKQoJcmV0dXJuIG91dHB1dC5zdGRvdXQuZGVjb2RlKCkKCgpkZWYgY3NjQ1NoYXJwKGZpbGUsIHBsYXRmb3JtPSJ4NjQiLCB0YXJnZXQ9IndpbmV4ZSIpOgoJZmxhZ3MgPSBbZmlsZSwgIi90Ont9Ii5mb3JtYXQodGFyZ2V0KSwgIi9wbGF0Zm9ybTp7fSIuZm9ybWF0KHBsYXRmb3JtKV0KCW91dHB1dCA9IHN1YnByb2Nlc3MucnVuKFtjc2NQYXRoXSArIGZsYWdzLCBjYXB0dXJlX291dHB1dD1UcnVlKQoJcmV0dXJuIG91dHB1dC5zdGRvdXQuZGVjb2RlKCkKCiMjIyMjIyMjIyMgRHluYW1pYyBGdW5jdGlvbnMgIyMjIyMjIyMjIwoKZGVmIF9keW5hbWljYWxseURldGVybWluZSgKCWlkZW50aWZpZXI6IHN0ciwgCglmdW5jX25hbWU6IHN0ciwgCglkaXJlY3RvcnlfaWQ6IHN0ciA9ICdEaXJlY3RvcnknLCAKCXNsbl9pZDogc3RyID0gJ1NsbicsIAoJY3Nwcm9qX2lkOiBzdHIgPSAnQ3NQcm9qJwopOgoJIiIiQSBwcml2YXRlIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB0byBkeW5hbWljYWxseSBkZXRlcm1pbmUgd2hpY2ggY29ycmVzcG9uZGluZyBmdW5jdGlvbiBydW4gYmFzZWQgb2ZmIG9mIHdoZXRoZXIgCgl0aGUgaW5wdXQgaXMgYSBkaXJlY3RvcnksIGEgc29sdXRpb24gZmlsZSwgb3IgYSBjc3Byb2ogZmlsZS4KCglBcmdzOgoJCWlkZW50aWZpZXIgKHN0cik6IFRoZSBpbnB1dCB3aGljaCBpZGVudGlmaWVzIGEgZGlyZWN0b3J5LCBzbG4gZmlsZSwgb3IgY3Nwcm9qIGZpbGUuCgkJZnVuY19uYW1lIChzdHIpOiBUaGUgZnVuY3Rpb24gbmFtZSB0byBkeW5hbWljYWxseSBmaW5kIHRoZSB0aHJlZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9ucyBmcm9tLgoJCWRpcmVjdG9yeV9pZCAoc3RyLCBvcHRpb25hbCk6IFRoZSBJRCB0byBhZGQgdG8gdGhlIGZ1bmNfbmFtZSB0byBmaW5kIHRoZSBkaXJlY3RvcnkgZnVuY3Rpb24uIAoJCQlEZWZhdWx0cyB0byAnRGlyZWN0b3J5Jy4KCQlzbG5faWQgKHN0ciwgb3B0aW9uYWwpOiBUaGUgSUQgdG8gYWRkIHRvIHRoZSBmdW5jX25hbWUgdG8gZmluZCB0aGUgc29sdXRpb24gZnVuY3Rpb24uIERlZmF1bHRzIHRvICdTbG4nLgoJCWNzcHJval9pZCAoc3RyLCBvcHRpb25hbCk6IFRoZSBJRCB0byBhZGQgdG8gdGhlIGZ1bmNfbmFtZSB0byBmaW5kIHRoZSBjc3Byb2ogZnVuY3Rpb24uIERlZmF1bHRzIHRvICdDc1Byb2onLgoKCVJldHVybnM6CgkJQW55OiBUaGUgcmVzdWx0IGZyb20gdGhlIGR5bmFtaWNhbGx5IGludm9rZWQgZnVuY3Rpb24uCgkiIiIKCWRpcmVjdG9yeV9mdW5jID0gZmlsZV9sb2NhbHMuZ2V0KGZ1bmNfbmFtZSArIGRpcmVjdG9yeV9pZCkKCXNsbl9mdW5jID0gZmlsZV9sb2NhbHMuZ2V0KGZ1bmNfbmFtZSArIHNsbl9pZCkKCWNzcHJval9mdW5jID0gZmlsZV9sb2NhbHMuZ2V0KGZ1bmNfbmFtZSArIGNzcHJval9pZCkKCgkjIElmIGlzIGRpcmVjdG9yeQoJaWYgaXNkaXIoaWRlbnRpZmllcik6CgkJaWYgZGlyZWN0b3J5X2Z1bmM6CgkJCXJldHVybiBkaXJlY3RvcnlfZnVuYyhpZGVudGlmaWVyKQoJCWVsc2U6CgkJCXByaW50KGYiWy1dIERpcmVjdG9yeSBGdW5jdGlvbjoge2Z1bmNfbmFtZSArIGRpcmVjdG9yeV9pZH0gbm90IGZvdW5kLiIpCgkKCV8sIGV4dGVuc2lvbiA9IHNwbGl0ZXh0KGlkZW50aWZpZXIpCgkjIElmIGlzIC5zbG4KCWlmIGV4dGVuc2lvbiA9PSAnLnNsbic6CgkJaWYgc2xuX2Z1bmM6CgkJCXJldHVybiBzbG5fZnVuYyhpZGVudGlmaWVyKQoJCWVsc2U6CgkJCXByaW50KGYiWy1dIFNvbHV0aW9uIEZ1bmN0aW9uOiB7ZnVuY19uYW1lICsgc2xuX2lkfSBub3QgZm91bmQuIikKCgkjIElmIGlzIC5jc3Byb2oKCWVsaWYgZXh0ZW5zaW9uID09ICcuY3Nwcm9qJzoKCQlpZiBjc3Byb2pfZnVuYzoKCQkJcmV0dXJuIGNzcHJval9mdW5jKGlkZW50aWZpZXIpCgkJZWxzZToKCQkJcHJpbnQoZiJbLV0gQ3NQcm9qIEZ1bmN0aW9uOiB7ZnVuY19uYW1lICsgY3Nwcm9qX2lkfSBub3QgZm91bmQuIikKCmRlZiBfZHluYW1pY0RpcmVjdG9yeShkaXJlY3Rvcnk6IHN0ciwgZnVuY19uYW1lOiBzdHIsIHNsbl9pZDogc3RyID0gJ1NsbicpIC0+IGxpc3Q6CgkiIiJEeW5hbWljYWxseSBpbnZva2VzIGEgZnVuY3Rpb24gZm9yIHBhcnNpbmcgYSBkaXJlY3RvcnkgZm9yIGEgc2xuIGZpbGUuCgoJQXJnczoKCQlkaXJlY3RvcnkgKHN0cik6IFRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBhIHNsbiBmaWxlLgoJCWZ1bmNfbmFtZSAoc3RyKTogVGhlIGZ1bmN0aW9uIG5hbWUgdG8gcnVuIHRoZSBzb2x1dGlvbiBmdW5jdGlvbiBvbi4KCQlzbG5faWQgKHN0ciwgb3B0aW9uYWwpOiBUaGUgSUQgdG8gYXBwZW5kIHRvIHRoZSBmdW5jdGlvbiBuYW1lIHRvIGZpbmQgdGhlIHNvbHV0aW9uIGZ1bmN0aW9uLiBEZWZhdWx0cyB0byAnU2xuJy4KCglSZXR1cm5zOgoJCWxpc3Q6IEEgbGlzdCBvZiBhbGwgdGhlIHJlc3VsdHMgZnJvbSBldmVyeSBzb2x1dGlvbiBmaWxlLgoJIiIiCglyZXN1bHRzID0gbGlzdCgpCglzbG5fZnVuYyA9IGZpbGVfbG9jYWxzLmdldChmdW5jX25hbWUgKyBzbG5faWQpCglpZiBzbG5fZnVuYzoKCQlzbG5fZmlsZXMgPSBwYXJzZURpcmVjdG9yeShkaXJlY3RvcnkpCgkJZm9yIHNsbl9maWxlIGluIHNsbl9maWxlczoKCQkJcmVzdWx0cyArPSBzbG5fZnVuYyhzbG5fZmlsZSkKCglyZXR1cm4gcmVzdWx0cwoKCmRlZiBfZHluYW1pY1NsbihzbG5fZmlsZTogc3RyLCBmdW5jX25hbWU6IHN0ciwgY3Nwcm9qX2lkOiBzdHIgPSAnQ3NQcm9qJykgLT4gbGlzdDoKCSIiIkR5bmFtaWNhbGx5IGludm9rZXMgYSBmdW5jdGlvbiBmb3IgcGFyc2luZyBhIHNsbiBmaWxlLgoKCUFyZ3M6CgkJc2xuX2ZpbGUgKHN0cik6IFRoZSBzb2x1dGlvbiBmaWxlIHRvIHBhcnNlLgoJCWZ1bmNfbmFtZSAoc3RyKTogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGR5bmFtaWNhbGx5IHJ1bi4KCQljc3Byb2pfaWQgKHN0ciwgb3B0aW9uYWwpOiBUaGUgSUQgdG8gYXBwZW5kIHRvIHRoZSBmdW5jdGlvbiBuYW1lIHRvIGZpbmQgdGhlIGNzcHJvaiBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gJ0NzUHJvaicuCgoJUmV0dXJuczoKCQlsaXN0OiBBIGxpc3Qgb2YgYWxsIHRoZSByZXN1bHRzIGZyb20gZXZlcnkgY3Nwcm9qIGZpbGUgaW4gdGhpcyBzbG4gZmlsZS4KCSIiIgoJcmVzdWx0cyA9IGxpc3QoKQoJY3Nwcm9qX2Z1bmMgPSBmaWxlX2xvY2Fscy5nZXQoZnVuY19uYW1lICsgY3Nwcm9qX2lkKQoJaWYgY3Nwcm9qX2Z1bmM6CgkJY3Nwcm9qX2ZpbGVzID0gcGFyc2VTbG4oc2xuX2ZpbGUpCgkJZm9yIGNzcHJval9maWxlIGluIGNzcHJval9maWxlczoKCQkJcmVzdWx0ID0gY3Nwcm9qX2Z1bmMoY3Nwcm9qX2ZpbGUpCgkJCXJlc3VsdHMuYXBwZW5kKHJlc3VsdCkKCglyZXR1cm4gcmVzdWx0cwoKIyMjIyMjIyMjIyBIZWxwZXIgRnVuY3Rpb25zICMjIyMjIyMjIyMKCmRlZiBnZXRDc1Byb2pUYWdzKGNzcHJval9maWxlOiBzdHIsIHRhZzogc3RyKToKCSIiIkdldHMgYSBsaXN0IG9mIHRhZ3MgZnJvbSBhIGNzcHJvaiBmaWxlCgoJQXJnczoKCQljc3Byb2pfZmlsZSAoc3RyKTogVGhlIGZpbGUgdG8gZXh0cmFjdCB0YWdzIGZyb20uCgkJdGFnIChzdHIpOiBUaGUgdGFncyB0byBzZWFyY2ggdGhlIGNzcHJvaiBmaWxlIGZvci4KCglSZXR1cm5zOgoJCUl0ZXJhdG9yOiBJdGVyYXRvciBvZiBlbGVtZW50IHRyZWUgb2JqZWN0cwoJIiIiCgl0cnk6CgkJdHJlZSA9IEVsZW1lbnRUcmVlLnBhcnNlKGNzcHJval9maWxlKQoJCXJvb3QgPSB0cmVlLmdldHJvb3QoKQoJCSMgQWxsIHRhZ3MgaGF2ZSBhIGhlYWRlciBpbiBmcm9udCBvZiB0aGVtIGZvciB3aGF0ZXZlciByZWFzb24gc28gd2UgbmVlZCB0byBhZGQgdGhhdAoJCXRhZ0hlYWRlciA9IHJvb3QudGFnLnJlcGxhY2UoJ1Byb2plY3QnLCAnJykKCQlyZWFsVGFnID0gdGFnSGVhZGVyICsgdGFnCgkJcmV0dXJuIHJvb3QuaXRlcihyZWFsVGFnKQoJZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgoJCSMgUmV0dXJuIGVtcHR5IGdlbmVyYXRvcgoJCXJldHVybiBpdGVyKCgpKQoKCmRlZiBwYXJzZURpcmVjdG9yeShkaXJlY3Rvcnk6IHN0cikgLT4gbGlzdDoKCSIiIlBhcnNlIGEgZGlyZWN0b3J5IGFuZCByZXR1cm4gdGhlIHBhdGhzIG9mIGFsbCAuc2xuIGZpbGVzLgoKCUFyZ3M6CgkJZGlyZWN0b3J5IChzdHIpOiBUaGUgZGlyZWN0b3J5IHRvIHBhcnNlLgoKCVJldHVybnM6CgkJbGlzdDogVGhlIGxpc3Qgb2YgcGFyc2VkIG91dCBzbG4gZmlsZXMuCgkiIiIKCXBhdGhzID0gbGlzdCgpCglpZiBpc2RpcihkaXJlY3RvcnkpOgoJCWZpbGVzID0gbGlzdGRpcihkaXJlY3RvcnkpCgkJZm9yIGZpbGUgaW4gZmlsZXM6CgkJCWlmICcuc2xuJyBpbiBmaWxlOgoJCQkJZnVsbF9wYXRoID0gam9pbihkaXJlY3RvcnksIGZpbGUpCgkJCQlwYXRocy5hcHBlbmQoZnVsbF9wYXRoKQoKCXJldHVybiBwYXRocwoKCmRlZiBwYXJzZVNsbihzbG5fZmlsZTogc3RyKSAtPiBsaXN0OgoJIiIiUGFyc2UgYSBzb2x1dGlvbiBmaWxlIGZvciBhbGwgY3Nwcm9qIGZpbGVzLgoKCUFyZ3M6CgkJc2xuX2ZpbGUgKHN0cik6IFRoZSBwYXRoIHRvIHRoZSBzbG4gZmlsZS4KCglSZXR1cm5zOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgkJbGlzdDogVGhlIGxpc3Qgb2YgcGFyc2VkIGNzcHJvaiBmaWxlcy4KPHxmaW1fZW5kfD4="]
["e7101ab5ed4f59ccb4a6eb3c69693ad8a135013e-4","e7101ab5ed4f59ccb4a6eb3c69693ad8a135013e",{"$cut":{"chars":19756,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2xvY2FsL2Jpbi9weXRob24zCgojIFRoaXMgdG9vbCB3aWxsIHRha2UgYW4gYW4gYXJ0aWZhY3QgZnJvbSBjb21tYW5kbGluZSBhbmQgZ3JhYiBJb0MgaW5mb3JtYXRpb24gc3VjaCBhcyBleGlmIGFuZCBoYXNoZXMgYW5kIHByaW50IHRoZW0KCiMgSXQgY2FuIGFsc28gYmUgaW1wb3J0ZWQgbGlrZSBhIGxpYnJhcnkgdG8gYmUgdXNlZCBieSBvdGhlciB0b29scy4gCiMgSWYgdXNlZCBhcyBhIGxpYnJhcnksIHRoZSBpdGVtcyB3b24ndCBiZSBwcmludGVkIHRvIHRoZSBjb25zb2xlLCBhcyB0aGlzIGlzIGRvbmUgaW4gdGhlIE1haW4gZnVuY3Rpb24KCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCBzeXMKZnJvbSBvcy5wYXRoIGltcG9ydCBpc2Rpciwgam9pbiwgZXhpc3RzLCBzcGxpdGV4dApmcm9tIG9zIGltcG9ydCBsaXN0ZGlyCmZyb20gcmUgaW1wb3J0IGZpbmRhbGwsIE1VTFRJTElORQpmcm9tIHBhdGhsaWIgaW1wb3J0IFB1cmVQYXRoCmZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZQpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoKIyBUaGVzZSBzaG91bGRuJ3QgY2hhbmdlIHRoYXQgbXVjaCwgYnV0IHBvc3NpYmx5IHdpbGwgZnJvbSBzeXN0ZW0gdG8gc3lzdGVtLiBJZiBzbywgc2V0IHRoZW0gaGVyZToKbXNidWlsZFBhdGggPSAnL3Vzci9sb2NhbC9iaW4vbXNidWlsZCcKY3NjUGF0aCA9ICcvdXNyL2xvY2FsL2Jpbi9jc2MnCgoKIyMjIyMgQ29tcGlsZXIgRnVuY3Rpb25zICMjIyMjCgpkZWYgbXNidWlsZENTaGFycChmaWxlLCBwbGF0Zm9ybT0ieDY0IiwgY29uZmlnPSJSZWxlYXNlIiwgdGFyZ2V0PSJSZWJ1aWxkIik6CglmbGFncyA9IFtmaWxlLCAiL3Q6e30iLmZvcm1hdCh0YXJnZXQpLCAiL3A6Q29uZmlndXJhdGlvbj17fSxQbGF0Zm9ybT17fSIuZm9ybWF0KGNvbmZpZywgcGxhdGZvcm0pXQoJb3V0cHV0ID0gc3VicHJvY2Vzcy5ydW4oW21zYnVpbGRQYXRoXSArIGZsYWdzLCBjYXB0dXJlX291dHB1dD1UcnVlKQoJcmV0dXJuIG91dHB1dC5zdGRvdXQuZGVjb2RlKCkKCgpkZWYgY3NjQ1NoYXJwKGZpbGUsIHBsYXRmb3JtPSJ4NjQiLCB0YXJnZXQ9IndpbmV4ZSIpOgoJZmxhZ3MgPSBbZmlsZSwgIi90Ont9Ii5mb3JtYXQodGFyZ2V0KSwgIi9wbGF0Zm9ybTp7fSIuZm9ybWF0KHBsYXRmb3JtKV0KCW91dHB1dCA9IHN1YnByb2Nlc3MucnVuKFtjc2NQYXRoXSArIGZsYWdzLCBjYXB0dXJlX291dHB1dD1UcnVlKQoJcmV0dXJuIG91dHB1dC5zdGRvdXQuZGVjb2RlKCkKCiMjIyMjIyMjIyMgRHluYW1pYyBGdW5jdGlvbnMgIyMjIyMjIyMjIwoKZGVmIF9keW5hbWljYWxseURldGVybWluZSgKCWlkZW50aWZpZXI6IHN0ciwgCglmdW5jX25hbWU6IHN0ciwgCglkaXJlY3RvcnlfaWQ6IHN0ciA9ICdEaXJlY3RvcnknLCAKCXNsbl9pZDogc3RyID0gJ1NsbicsIAoJY3Nwcm9qX2lkOiBzdHIgPSAnQ3NQcm9qJwopOgoJIiIiQSBwcml2YXRlIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB0byBkeW5hbWljYWxseSBkZXRlcm1pbmUgd2hpY2ggY29ycmVzcG9uZGluZyBmdW5jdGlvbiBydW4gYmFzZWQgb2ZmIG9mIHdoZXRoZXIgCgl0aGUgaW5wdXQgaXMgYSBkaXJlY3RvcnksIGEgc29sdXRpb24gZmlsZSwgb3IgYSBjc3Byb2ogZmlsZS4KCglBcmdzOgoJCWlkZW50aWZpZXIgKHN0cik6IFRoZSBpbnB1dCB3aGljaCBpZGVudGlmaWVzIGEgZGlyZWN0b3J5LCBzbG4gZmlsZSwgb3IgY3Nwcm9qIGZpbGUuCgkJZnVuY19uYW1lIChzdHIpOiBUaGUgZnVuY3Rpb24gbmFtZSB0byBkeW5hbWljYWxseSBmaW5kIHRoZSB0aHJlZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9ucyBmcm9tLgoJCWRpcmVjdG9yeV9pZCAoc3RyLCBvcHRpb25hbCk6IFRoZSBJRCB0byBhZGQgdG8gdGhlIGZ1bmNfbmFtZSB0byBmaW5kIHRoZSBkaXJlY3RvcnkgZnVuY3Rpb24uIAoJCQlEZWZhdWx0cyB0byAnRGlyZWN0b3J5Jy4KCQlzbG5faWQgKHN0ciwgb3B0aW9uYWwpOiBUaGUgSUQgdG8gYWRkIHRvIHRoZSBmdW5jX25hbWUgdG8gZmluZCB0aGUgc29sdXRpb24gZnVuY3Rpb24uIERlZmF1bHRzIHRvICdTbG4nLgoJCWNzcHJval9pZCAoc3RyLCBvcHRpb25hbCk6IFRoZSBJRCB0byBhZGQgdG8gdGhlIGZ1bmNfbmFtZSB0byBmaW5kIHRoZSBjc3Byb2ogZnVuY3Rpb24uIERlZmF1bHRzIHRvICdDc1Byb2onLgoKCVJldHVybnM6CgkJQW55OiBUaGUgcmVzdWx0IGZyb20gdGhlIGR5bmFtaWNhbGx5IGludm9rZWQgZnVuY3Rpb24uCgkiIiIKCWRpcmVjdG9yeV9mdW5jID0gZmlsZV9sb2NhbHMuZ2V0KGZ1bmNfbmFtZSArIGRpcmVjdG9yeV9pZCkKCXNsbl9mdW5jID0gZmlsZV9sb2NhbHMuZ2V0KGZ1bmNfbmFtZSArIHNsbl9pZCkKCWNzcHJval9mdW5jID0gZmlsZV9sb2NhbHMuZ2V0KGZ1bmNfbmFtZSArIGNzcHJval9pZCkKCgkjIElmIGlzIGRpcmVjdG9yeQoJaWYgaXNkaXIoaWRlbnRpZmllcik6CgkJaWYgZGlyZWN0b3J5X2Z1bmM6CgkJCXJldHVybiBkaXJlY3RvcnlfZnVuYyhpZGVudGlmaWVyKQoJCWVsc2U6CgkJCXByaW50KGYiWy1dIERpcmVjdG9yeSBGdW5jdGlvbjoge2Z1bmNfbmFtZSArIGRpcmVjdG9yeV9pZH0gbm90IGZvdW5kLiIpCgkKCV8sIGV4dGVuc2lvbiA9IHNwbGl0ZXh0KGlkZW50aWZpZXIpCgkjIElmIGlzIC5zbG4KCWlmIGV4dGVuc2lvbiA9PSAnLnNsbic6CgkJaWYgc2xuX2Z1bmM6CgkJCXJldHVybiBzbG5fZnVuYyhpZGVudGlmaWVyKQoJCWVsc2U6CgkJCXByaW50KGYiWy1dIFNvbHV0aW9uIEZ1bmN0aW9uOiB7ZnVuY19uYW1lICsgc2xuX2lkfSBub3QgZm91bmQuIikKCgkjIElmIGlzIC5jc3Byb2oKCWVsaWYgZXh0ZW5zaW9uID09ICcuY3Nwcm9qJzoKCQlpZiBjc3Byb2pfZnVuYzoKCQkJcmV0dXJuIGNzcHJval9mdW5jKGlkZW50aWZpZXIpCgkJZWxzZToKCQkJcHJpbnQoZiJbLV0gQ3NQcm9qIEZ1bmN0aW9uOiB7ZnVuY19uYW1lICsgY3Nwcm9qX2lkfSBub3QgZm91bmQuIikKCmRlZiBfZHluYW1pY0RpcmVjdG9yeShkaXJlY3Rvcnk6IHN0ciwgZnVuY19uYW1lOiBzdHIsIHNsbl9pZDogc3RyID0gJ1NsbicpIC0+IGxpc3Q6CgkiIiJEeW5hbWlj"}}]
["e7101ab5ed4f59ccb4a6eb3c69693ad8a135013e-5","e7101ab5ed4f59ccb4a6eb3c69693ad8a135013e",{"$cut":{"chars":19756,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2xvY2FsL2Jpbi9weXRob24zCgojIFRoaXMgdG9vbCB3aWxsIHRha2UgYW4gYW4gYXJ0aWZhY3QgZnJvbSBjb21tYW5kbGluZSBhbmQgZ3JhYiBJb0MgaW5mb3JtYXRpb24gc3VjaCBhcyBleGlmIGFuZCBoYXNoZXMgYW5kIHByaW50IHRoZW0KCiMgSXQgY2FuIGFsc28gYmUgaW1wb3J0ZWQgbGlrZSBhIGxpYnJhcnkgdG8gYmUgdXNlZCBieSBvdGhlciB0b29scy4gCiMgSWYgdXNlZCBhcyBhIGxpYnJhcnksIHRoZSBpdGVtcyB3b24ndCBiZSBwcmludGVkIHRvIHRoZSBjb25zb2xlLCBhcyB0aGlzIGlzIGRvbmUgaW4gdGhlIE1haW4gZnVuY3Rpb24KCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCBzeXMKZnJvbSBvcy5wYXRoIGltcG9ydCBpc2Rpciwgam9pbiwgZXhpc3RzLCBzcGxpdGV4dApmcm9tIG9zIGltcG9ydCBsaXN0ZGlyCmZyb20gcmUgaW1wb3J0IGZpbmRhbGwsIE1VTFRJTElORQpmcm9tIHBhdGhsaWIgaW1wb3J0IFB1cmVQYXRoCmZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZQpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoKIyBUaGVzZSBzaG91bGRuJ3QgY2hhbmdlIHRoYXQgbXVjaCwgYnV0IHBvc3NpYmx5IHdpbGwgZnJvbSBzeXN0ZW0gdG8gc3lzdGVtLiBJZiBzbywgc2V0IHRoZW0gaGVyZToKbXNidWlsZFBhdGggPSAnL3Vzci9sb2NhbC9iaW4vbXNidWlsZCcKY3NjUGF0aCA9ICcvdXNyL2xvY2FsL2Jpbi9jc2MnCgoKIyMjIyMgQ29tcGlsZXIgRnVuY3Rpb25zICMjIyMjCgpkZWYgbXNidWlsZENTaGFycChmaWxlLCBwbGF0Zm9ybT0ieDY0IiwgY29uZmlnPSJSZWxlYXNlIiwgdGFyZ2V0PSJSZWJ1aWxkIik6CglmbGFncyA9IFtmaWxlLCAiL3Q6e30iLmZvcm1hdCh0YXJnZXQpLCAiL3A6Q29uZmlndXJhdGlvbj17fSxQbGF0Zm9ybT17fSIuZm9ybWF0KGNvbmZpZywgcGxhdGZvcm0pXQoJb3V0cHV0ID0gc3VicHJvY2Vzcy5ydW4oW21zYnVpbGRQYXRoXSArIGZsYWdzLCBjYXB0dXJlX291dHB1dD1UcnVlKQoJcmV0dXJuIG91dHB1dC5zdGRvdXQuZGVjb2RlKCkKCgpkZWYgY3NjQ1NoYXJwKGZpbGUsIHBsYXRmb3JtPSJ4NjQiLCB0YXJnZXQ9IndpbmV4ZSIpOgoJZmxhZ3MgPSBbZmlsZSwgIi90Ont9Ii5mb3JtYXQodGFyZ2V0KSwgIi9wbGF0Zm9ybTp7fSIuZm9ybWF0KHBsYXRmb3JtKV0KCW91dHB1dCA9IHN1YnByb2Nlc3MucnVuKFtjc2NQYXRoXSArIGZsYWdzLCBjYXB0dXJlX291dHB1dD1UcnVlKQoJcmV0dXJuIG91dHB1dC5zdGRvdXQuZGVjb2RlKCkKCiMjIyMjIyMjIyMgRHluYW1pYyBGdW5jdGlvbnMgIyMjIyMjIyMjIwoKZGVmIF9keW5hbWljYWxseURldGVybWluZSgKCWlkZW50aWZpZXI6IHN0ciwgCglmdW5jX25hbWU6IHN0ciwgCglkaXJlY3RvcnlfaWQ6IHN0ciA9ICdEaXJlY3RvcnknLCAKCXNsbl9pZDogc3RyID0gJ1NsbicsIAoJY3Nwcm9qX2lkOiBzdHIgPSAnQ3NQcm9qJwopOgoJIiIiQSBwcml2YXRlIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB0byBkeW5hbWljYWxseSBkZXRlcm1pbmUgd2hpY2ggY29ycmVzcG9uZGluZyBmdW5jdGlvbiBydW4gYmFzZWQgb2ZmIG9mIHdoZXRoZXIgCgl0aGUgaW5wdXQgaXMgYSBkaXJlY3RvcnksIGEgc29sdXRpb24gZmlsZSwgb3IgYSBjc3Byb2ogZmlsZS4KCglBcmdzOgoJCWlkZW50aWZpZXIgKHN0cik6IFRoZSBpbnB1dCB3aGljaCBpZGVudGlmaWVzIGEgZGlyZWN0b3J5LCBzbG4gZmlsZSwgb3IgY3Nwcm9qIGZpbGUuCgkJZnVuY19uYW1lIChzdHIpOiBUaGUgZnVuY3Rpb24gbmFtZSB0byBkeW5hbWljYWxseSBmaW5kIHRoZSB0aHJlZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9ucyBmcm9tLgoJCWRpcmVjdG9yeV9pZCAoc3RyLCBvcHRpb25hbCk6IFRoZSBJRCB0byBhZGQgdG8gdGhlIGZ1bmNfbmFtZSB0byBmaW5kIHRoZSBkaXJlY3RvcnkgZnVuY3Rpb24uIAoJCQlEZWZhdWx0cyB0byAnRGlyZWN0b3J5Jy4KCQlzbG5faWQgKHN0ciwgb3B0aW9uYWwpOiBUaGUgSUQgdG8gYWRkIHRvIHRoZSBmdW5jX25hbWUgdG8gZmluZCB0aGUgc29sdXRpb24gZnVuY3Rpb24uIERlZmF1bHRzIHRvICdTbG4nLgoJCWNzcHJval9pZCAoc3RyLCBvcHRpb25hbCk6IFRoZSBJRCB0byBhZGQgdG8gdGhlIGZ1bmNfbmFtZSB0byBmaW5kIHRoZSBjc3Byb2ogZnVuY3Rpb24uIERlZmF1bHRzIHRvICdDc1Byb2onLgoKCVJldHVybnM6CgkJQW55OiBUaGUgcmVzdWx0IGZyb20gdGhlIGR5bmFtaWNhbGx5IGludm9rZWQgZnVuY3Rpb24uCgkiIiIKCWRpcmVjdG9yeV9mdW5jID0gZmlsZV9sb2NhbHMuZ2V0KGZ1bmNfbmFtZSArIGRpcmVjdG9yeV9pZCkKCXNsbl9mdW5jID0gZmlsZV9sb2NhbHMuZ2V0KGZ1bmNfbmFtZSArIHNsbl9pZCkKCWNzcHJval9mdW5jID0gZmlsZV9sb2NhbHMuZ2V0KGZ1bmNfbmFtZSArIGNzcHJval9pZCkKPHxmaW1faG9sZXw+CgkJCXJldHVybiBkaXJlY3RvcnlfZnVuYyhpZGVudGlmaWVyKQoJCWVsc2U6CgkJCXByaW50KGYiWy1dIERpcmVjdG9yeSBGdW5jdGlvbjoge2Z1bmNfbmFtZSArIGRpcmVjdG9yeV9pZH0gbm90IGZvdW5kLiIpCgkKCV8sIGV4dGVuc2lvbiA9IHNwbGl0ZXh0KGlkZW50aWZpZXIpCgkjIElmIGlzIC5zbG4KCWlmIGV4dGVuc2lvbiA9PSAnLnNsbic6CgkJaWYgc2xuX2Z1bmM6CgkJCXJldHVybiBzbG5fZnVuYyhpZGVudGlmaWVyKQoJCWVsc2U6CgkJCXByaW50KGYiWy1dIFNvbHV0aW9uIEZ1bmN0aW9uOiB7ZnVuY19uYW1lICsgc2xuX2lkfSBub3QgZm91bmQuIikKCgkjIElmIGlzIC5jc3Byb2oKCWVsaWYgZXh0ZW5zaW9uID09ICcuY3Nwcm9qJzoKCQlpZiBjc3Byb2pfZnVuYzoKCQkJcmV0dXJuIGNzcHJval9mdW5jKGlkZW50aWZpZXIpCgkJZWxzZToKCQkJcHJpbnQoZiJbLV0gQ3NQcm9qIEZ1bmN0aW9uOiB7ZnVuY19uYW1lICsgY3Nwcm9qX2lkfSBub3QgZm91bmQuIikKCmRlZiBfZHluYW1pY0RpcmVjdG9yeShkaXJlY3Rvcnk6IHN0ciwgZnVuY19uYW1lOiBzdHIsIHNsbl9pZDogc3RyID0gJ1NsbicpIC0+IGxpc3Q6CgkiIiJEeW5hbWljYWxseSBpbnZva2VzIGEgZnVuY3Rpb24gZm9yIHBhcnNpbmcgYSBkaXJlY3RvcnkgZm9y"}}]
["d4220bf4a61a358fcbe868b4798e9f4519b74c72-1","d4220bf4a61a358fcbe868b4798e9f4519b74c72","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiClNweWRlciBFZGl0b3IKClRoaXMgaXMgYSB0ZW1wb3Jhcnkgc2NyaXB0IGZpbGUuCiIiIgoKIyUlIG5vbWJyZSBkZWwgYmxvcXVlCjx8ZmltX2hvbGV8Pgpmb3IgcGFsYWJyYSBpbiBwYWxhYnJhczoKICAgIGlmIHBhbGFicmEgWy0xXSA9PSAnbyc6CiAgICAgICAgbnVldmFfcGFsYWJyYSA9IHBhbGFicmFbOi0xXSArJ2UnCiAgICBlbGlmIGxlbihwYWxhYnJhKT4xIGFuZCBwYWxhYnJhIFstMl0gPT0gJ28nOiAKICAgICAgICAjIGVsc2lmIGFudGVyaW9yIHNlIGxsYW1hIGV2YWx1YWNpw7NuIHBlcmVzb3phIHBvcnF1ZSBsYSBzZWd1bmRhIHByb3Bvc2ljacOzbiB0ZSBkYSB1biBlcnJvciBzaSBsbyBlamVjdXRhcyBzb2xvCiAgICAgICAgbnVldmFfcGFsYWJyYSA9IHBhbGFicmFbOi0yXSArJ2UnKyBwYWxhYnJhWy0xXQogICAgZWxzZToKICAgICAgICBudWV2YV9wYWxhYnJhID0gcGFsYWJyYQogICAgdHJhZHVjY2lvbi5hcHBlbmQobnVldmFfcGFsYWJyYSkKICAgICNwcmludChwYWxhYnJhLCBudWV2YV9wYWxhYnJhKQoKZnJhc2VfdCA9ICcgJy5qb2luKHRyYWR1Y2Npb24pCnByaW50KGZyYXNlX3QpCgojJSUKPHxmaW1fc3VmZml4fD4KCmZyYXNlID0gJ3RvZG9zIHNvbW9zIHByb2dyYW1hZG9yZXMnCnBhbGFicmFzID0gZnJhc2Uuc3BsaXQoKQp0cmFkdWNjaW9uID0gW10KPHxmaW1fZW5kfD4="]
["d4220bf4a61a358fcbe868b4798e9f4519b74c72-2","d4220bf4a61a358fcbe868b4798e9f4519b74c72","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiClNweWRlciBFZGl0b3IKClRoaXMgaXMgYSB0ZW1wb3Jhcnkgc2NyaXB0IGZpbGUuCiIiIgoKIyUlIG5vbWJyZSBkZWwgYmxvcXVlCgpmcmFzZSA9ICd0b2RvcyBzb21vcyBwcm9ncmFtYWRvcmVzJwpwYWxhYnJhcyA9IGZyYXNlLnNwbGl0KCkKdHJhZHVjY2lvbiA9IFtdCmZvciBwYWxhYnJhIGluIHBhbGFicmFzOgo8fGZpbV9ob2xlfD4KICAgICAgICBudWV2YV9wYWxhYnJhID0gcGFsYWJyYVs6LTJdICsnZScrIHBhbGFicmFbLTFdCiAgICBlbHNlOgogICAgICAgIG51ZXZhX3BhbGFicmEgPSBwYWxhYnJhCiAgICB0cmFkdWNjaW9uLmFwcGVuZChudWV2YV9wYWxhYnJhKQogICAgI3ByaW50KHBhbGFicmEsIG51ZXZhX3BhbGFicmEpCgpmcmFzZV90ID0gJyAnLmpvaW4odHJhZHVjY2lvbikKcHJpbnQoZnJhc2VfdCkKCiMlJQo8fGZpbV9zdWZmaXh8PgogICAgaWYgcGFsYWJyYSBbLTFdID09ICdvJzoKICAgICAgICBudWV2YV9wYWxhYnJhID0gcGFsYWJyYVs6LTFdICsnZScKICAgIGVsaWYgbGVuKHBhbGFicmEpPjEgYW5kIHBhbGFicmEgWy0yXSA9PSAnbyc6IAogICAgICAgICMgZWxzaWYgYW50ZXJpb3Igc2UgbGxhbWEgZXZhbHVhY2nDs24gcGVyZXNvemEgcG9ycXVlIGxhIHNlZ3VuZGEgcHJvcG9zaWNpw7NuIHRlIGRhIHVuIGVycm9yIHNpIGxvIGVqZWN1dGFzIHNvbG8KPHxmaW1fZW5kfD4="]
["d4220bf4a61a358fcbe868b4798e9f4519b74c72-3","d4220bf4a61a358fcbe868b4798e9f4519b74c72","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiClNweWRlciBFZGl0b3IKCjx8ZmltX2hvbGV8PgoKZnJhc2UgPSAndG9kb3Mgc29tb3MgcHJvZ3JhbWFkb3JlcycKcGFsYWJyYXMgPSBmcmFzZS5zcGxpdCgpCnRyYWR1Y2Npb24gPSBbXQpmb3IgcGFsYWJyYSBpbiBwYWxhYnJhczoKICAgIGlmIHBhbGFicmEgWy0xXSA9PSAnbyc6CiAgICAgICAgbnVldmFfcGFsYWJyYSA9IHBhbGFicmFbOi0xXSArJ2UnCiAgICBlbGlmIGxlbihwYWxhYnJhKT4xIGFuZCBwYWxhYnJhIFstMl0gPT0gJ28nOiAKICAgICAgICAjIGVsc2lmIGFudGVyaW9yIHNlIGxsYW1hIGV2YWx1YWNpw7NuIHBlcmVzb3phIHBvcnF1ZSBsYSBzZWd1bmRhIHByb3Bvc2ljacOzbiB0ZSBkYSB1biBlcnJvciBzaSBsbyBlamVjdXRhcyBzb2xvCiAgICAgICAgbnVldmFfcGFsYWJyYSA9IHBhbGFicmFbOi0yXSArJ2UnKyBwYWxhYnJhWy0xXQogICAgZWxzZToKICAgICAgICBudWV2YV9wYWxhYnJhID0gcGFsYWJyYQogICAgdHJhZHVjY2lvbi5hcHBlbmQobnVldmFfcGFsYWJyYSkKICAgICNwcmludChwYWxhYnJhLCBudWV2YV9wYWxhYnJhKQoKZnJhc2VfdCA9ICcgJy5qb2luKHRyYWR1Y2Npb24pCnByaW50KGZyYXNlX3QpCgojJSUKPHxmaW1fc3VmZml4fD4KVGhpcyBpcyBhIHRlbXBvcmFyeSBzY3JpcHQgZmlsZS4KIiIiCgojJSUgbm9tYnJlIGRlbCBibG9xdWUKPHxmaW1fZW5kfD4="]
["d4220bf4a61a358fcbe868b4798e9f4519b74c72-4","d4220bf4a61a358fcbe868b4798e9f4519b74c72","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiClNweWRlciBFZGl0b3IKClRoaXMgaXMgYSB0ZW1wb3Jhcnkgc2NyaXB0IGZpbGUuCiIiIgoKIyUlIG5vbWJyZSBkZWwgYmxvcXVlCgpmcmFzZSA9ICd0b2RvcyBzb21vcyBwcm9ncmFtYWRvcmVzJwpwYWxhYnJhcyA9IGZyYXNlLnNwbGl0KCkKdHJhZHVjY2lvbiA9IFtdCmZvciBwYWxhYnJhIGluIHBhbGFicmFzOgogICAgaWYgcGFsYWJyYSBbLTFdID09ICdvJzoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIG51ZXZhX3BhbGFicmEgPSBwYWxhYnJhWzotMV0gKydlJwo8fGZpbV9lbmR8Pg=="]
["d4220bf4a61a358fcbe868b4798e9f4519b74c72-5","d4220bf4a61a358fcbe868b4798e9f4519b74c72","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiClNweWRlciBFZGl0b3IKClRoaXMgaXMgYSB0ZW1wb3Jhcnkgc2NyaXB0IGZpbGUuCiIiIgoKIyUlIG5vbWJyZSBkZWwgYmxvcXVlCgpmcmFzZSA9ICd0b2RvcyBzb21vcyBwcm9ncmFtYWRvcmVzJwpwYWxhYnJhcyA9IGZyYXNlLnNwbGl0KCkKdHJhZHVjY2lvbiA9IFtdCjx8ZmltX2hvbGV8PgogICAgICAgICMgZWxzaWYgYW50ZXJpb3Igc2UgbGxhbWEgZXZhbHVhY2nDs24gcGVyZXNvemEgcG9ycXVlIGxhIHNlZ3VuZGEgcHJvcG9zaWNpw7NuIHRlIGRhIHVuIGVycm9yIHNpIGxvIGVqZWN1dGFzIHNvbG8KICAgICAgICBudWV2YV9wYWxhYnJhID0gcGFsYWJyYVs6LTJdICsnZScrIHBhbGFicmFbLTFdCiAgICBlbHNlOgogICAgICAgIG51ZXZhX3BhbGFicmEgPSBwYWxhYnJhCiAgICB0cmFkdWNjaW9uLmFwcGVuZChudWV2YV9wYWxhYnJhKQogICAgI3ByaW50KHBhbGFicmEsIG51ZXZhX3BhbGFicmEpCgpmcmFzZV90ID0gJyAnLmpvaW4odHJhZHVjY2lvbikKcHJpbnQoZnJhc2VfdCkKCiMlJQo8fGZpbV9zdWZmaXh8Pgpmb3IgcGFsYWJyYSBpbiBwYWxhYnJhczoKICAgIGlmIHBhbGFicmEgWy0xXSA9PSAnbyc6CiAgICAgICAgbnVldmFfcGFsYWJyYSA9IHBhbGFicmFbOi0xXSArJ2UnCiAgICBlbGlmIGxlbihwYWxhYnJhKT4xIGFuZCBwYWxhYnJhIFstMl0gPT0gJ28nOiAKPHxmaW1fZW5kfD4="]
["dab9c2d71d8afbee4f228d84a7adf46e9929f58e-1","dab9c2d71d8afbee4f228d84a7adf46e9929f58e","PHxmaW1fcHJlZml4fD4KZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgc2VyaWFsaXplcnMKCmZyb20gdGFza3MubW9kZWxzIGltcG9ydCBUYXNrCgpmcm9tIGFjY291bnRzLmFwaS5zZXJpYWxpemVycyBpbXBvcnQgVXNlclB1YmxpY1NlcmlhbGl6ZXIKCmNsYXNzIFRhc2tTZXJpYWxpemVyKHNlcmlhbGl6ZXJzLk1vZGVsU2VyaWFsaXplcik6CiAgICB1c2VyID0gVXNlclB1YmxpY1NlcmlhbGl6ZXIocmVhZF9vbmx5PVRydWUpCiAgICBjbGFzcyBNZXRhOgogICAgICAgIG1vZGVsID0gVGFzawogICAgICAgIGZpZWxkcyA9IFsKICAgICAgICAgICAgJ3VzZXInLAogICAgICAgICAgICAndGFzaycsCiAgICAgICAgICAgICdpc19jb21wbGV0ZWQnLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICd0aW1lc3RhbXAnLAogICAgICAgICAgICAnaWQnCjx8ZmltX2VuZHw+"]
["8245c3ff08707e86627b8f9ce6ded28adc40145f-1","8245c3ff08707e86627b8f9ce6ded28adc40145f","PHxmaW1fcHJlZml4fD4KIiIiCkNvZGUgYm9ycm93ZWQgZnJvbSBYaW5zaHVvX1B5VG9vbGJveDogaHR0cHM6Ly9naXRodWIuY29tL3hpbnNodW93ZW5nL1hpbnNodW9fUHlUb29sYm94CiIiIgoKaW1wb3J0IG9zCmltcG9ydCBzaHV0aWwKaW1wb3J0IHRvcmNoCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcmFuZG9tCmltcG9ydCB0aW1lCmltcG9ydCBjb3B5CmltcG9ydCBnbG9iLCBnbG9iMgpmcm9tIHRvcmNoIGltcG9ydCBubgoKCmNsYXNzIEF2ZXJhZ2VNZXRlcihvYmplY3QpOiAgICAgCiAgIiIiQ29tcHV0ZXMgYW5kIHN0b3JlcyB0aGUgYXZlcmFnZSBhbmQgY3VycmVudCB2YWx1ZSIiIiAgICAKICBkZWYgX19pbml0X18oc2VsZik6ICAgCiAgICBzZWxmLnJlc2V0KCkKICAKICBkZWYgcmVzZXQoc2VsZik6CiAgICBzZWxmLnZhbCA9IDAKICAgIHNlbGYuYXZnID0gMAogICAgc2VsZi5zdW0gPSAwCiAgICBzZWxmLmNvdW50ID0gMCAgICAKICAgIHNlbGYubGlzdCA9IGxpc3QoKQogIAogIGRlZiB1cGRhdGUoc2VsZiwgdmFsLCBuPTEpOiAKICAgIHNlbGYudmFsID0gdmFsICAgIAogICAgc2VsZi5zdW0gKz0gdmFsICogbiAgICAgCiAgICBzZWxmLmNvdW50ICs9IG4KICAgIHNlbGYuYXZnID0gc2VsZi5zdW0gLyBzZWxmLmNvdW50ICAKICAgIHNlbGYubGlzdC5hcHBlbmQodmFsKQoKCmRlZiBpc25wYXJyYXkobnBhcnJheV90ZXN0KToKCXJldHVybiBpc2luc3RhbmNlKG5wYXJyYXlfdGVzdCwgbnAubmRhcnJheSkKCgpkZWYgaXNpbnRlZ2VyKGludGVnZXJfdGVzdCk6CglpZiBpc25wYXJyYXkoaW50ZWdlcl90ZXN0KTogcmV0dXJuIEZhbHNlCgl0cnk6IHJldHVybiBpc2luc3RhbmNlKGludGVnZXJfdGVzdCwgaW50KSBvciBpbnQoaW50ZWdlcl90ZXN0KSA9PSBpbnRlZ2VyX3Rlc3QKCWV4Y2VwdCBWYWx1ZUVycm9yOiByZXR1cm4gRmFsc2UKCWV4Y2VwdCBUeXBlRXJyb3I6IHJldHVybiBGYWxzZQoKCmRlZiBpc2Zsb2F0KGZsb2F0X3Rlc3QpOgoJcmV0dXJuIGlzaW5zdGFuY2UoZmxvYXRfdGVzdCwgZmxvYXQpCgoKZGVmIGlzc2NhbGFyKHNjYWxhcl90ZXN0KToKCXRyeTogcmV0dXJuIGlzaW50ZWdlcihzY2FsYXJfdGVzdCkgb3IgaXNmbG9hdChzY2FsYXJfdGVzdCkKCWV4Y2VwdCBUeXBlRXJyb3I6IHJldHVybiBGYWxzZQoKCmRlZiBpc2xvZ2ljYWwobG9naWNhbF90ZXN0KToKCXJldHVybiBpc2luc3RhbmNlKGxvZ2ljYWxfdGVzdCwgYm9vbCkKCiAgICAKZGVmIGlzc3RyaW5nKHN0cmluZ190ZXN0KToKICAgIHJldHVybiBpc2luc3RhbmNlKHN0cmluZ190ZXN0LCBzdHIpCgoKZGVmIGlzbGlzdChsaXN0X3Rlc3QpOgoJcmV0dXJuIGlzaW5zdGFuY2UobGlzdF90ZXN0LCBsaXN0KQoKCmRlZiBjb252ZXJ0X3NlY3MydGltZShzZWNvbmRzKToKICAgICcnJwogICAgZm9ybWF0IHNlY29uZCB0byBodW1hbiByZWFkYWJsZSB3YXkKICAgICcnJwogICAgYXNzZXJ0IGlzc2NhbGFyKHNlY29uZHMpLCAnaW5wdXQgc2hvdWxkIGJlIGEgc2NhbGFyIHRvIHJlcHJlc2VudCBudW1iZXIgb2Ygc2Vjb25kcycKICAgIG0sIHMgPSBkaXZtb2QoaW50KHNlY29uZHMpLCA2MCkKICAgIGgsIG0gPSBkaXZtb2QobSwgNjApCiAgICByZXR1cm4gJ1slZDolMDJkOiUwMmRdJyAlIChoLCBtLCBzKQoKCmRlZiBnZXRfdGltZXN0cmluZygpOgogICAgcmV0dXJuIHRpbWUuc3RyZnRpbWUoJyVZJW0lZF8lSGglTW0lU3MnKQoKCmRlZiByZWNyZWF0ZV9kaXJzKCpkaXJzKToKICAgIGZvciBkIGluIGRpcnM6CiAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZCk6CiAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZCkKICAgICAgICBvcy5tYWtlZGlycyhkKQoKCmRlZiBpc19wYXRoX3ZhbGlkKHBhdGhuYW1lKToKCXRyeTogIAoJCWlmIG5vdCBpc3N0cmluZyhwYXRobmFtZSkgb3Igbm90IHBhdGhuYW1lOiByZXR1cm4gRmFsc2UKCWV4Y2VwdCBUeXBlRXJyb3I6IHJldHVybiBGYWxzZQoJZWxzZTogcmV0dXJuIFRydWUKCgpkZWYgaXNfcGF0aF9jcmVhdGFibGUocGF0aG5hbWUpOgoJJycnCglpZiBhbnkgcHJldmlvdXMgbGV2ZWwgb2YgcGFyZW50IGZvbGRlciBleGlzdHMsIHJldHVybnMgdHJ1ZQoJJycnCglpZiBub3QgaXNfcGF0aF92YWxpZChwYXRobmFtZSk6IHJldHVybiBGYWxzZQoJcGF0aG5hbWUgPSBvcy5wYXRoLm5vcm1wYXRoKHBhdGhuYW1lKQoJcGF0aG5hbWUgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHBhdGhuYW1lKSkKCgkjIHJlY3Vyc2l2ZWx5IHRvIGZpbmQgdGhlIHByZXZpb3VzIGxldmVsIG9mIHBhcmVudCBmb2xkZXIgZXhpc3RpbmcKCXdoaWxlIG5vdCBpc19wYXRoX2V4aXN0cyhwYXRobmFtZSk6ICAgICAKCQlwYXRobmFtZV9uZXcgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHBhdGhuYW1lKSkKCQlpZiBwYXRobmFtZV9uZXcgPT0gcGF0aG5hbWU6IHJldHVybiBGYWxzZQoJCXBhdGhuYW1lID0gcGF0aG5hbWVfbmV3CglyZXR1cm4gb3MuYWNjZXNzKHBhdGhuYW1lLCBvcy5XX09LKQoKCmRlZiBpc19wYXRoX2V4aXN0cyhwYXRobmFtZSk6Cgl0cnk6IHJldHVybiBpc19wYXRoX3ZhbGlkKHBhdGhuYW1lKSBhbmQgb3MucGF0aC5leGlzdHMocGF0aG5hbWUpCglleGNlcHQgT1NFcnJvcjogcmV0dXJuIEZhbHNlCgoKZGVmIGlzX3BhdGhfZXhpc3RzX29yX2NyZWF0YWJsZShwYXRobmFtZSk6Cgl0cnk6IHJldHVybiBpc19wYXRoX2V4aXN0cyhwYXRobmFtZSkgb3IgaXNfcGF0aF9jcmVhdGFibGUocGF0aG5hbWUpCglleGNlcHQgT1NFcnJvcjogcmV0dXJuIEZhbHNlCgoKZGVmIGlzZmlsZShwYXRobmFtZSk6CglpZiBpc19wYXRoX3ZhbGlkKHBhdGhuYW1lKToKCQlwYXRobmFtZSA9IG9zLnBhdGgubm9ybXBhdGgocGF0aG5hbWUpCgkJbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShwYXRobmFtZSkpWzBdCgkJZXh0ID0gb3MucGF0aC5zcGxpdGV4dChwYXRobmFtZSlbMV0KCQlyZXR1cm4gbGVuKG5hbWUpID4gMCBhbmQgbGVuKGV4dCkgPiAwCgllbHNlOiByZXR1cm4gRmFsc2UKCgpkZWYgaXNmb2xkZXIocGF0aG5hbWUpOgoJJycnCglpZiAnLicgZXhpc3RzIGluIHRoZSBzdWJmb2xkZXIsIHRoZSBmdW5jdGlvbiBzdGlsbCBqdXN0aWZpZXMgaXQgYXMgYSBmb2xkZXIuIGUuZy4sIC9tbnQvZG9tZS9hZGhvY18wLjV4L2FiYyBpcyBhIGZvbGRlcgoJaWYgJy4nIGV4aXN0cyBhZnRlciBhbGwgc2xhc2hlcywgdGhlIGZ1bmN0aW9uIHdpbGwgbm90IGp1c3RpZnkgaXMgYXMgYSBmb2xkZXIuIGUuZy4sIC9tbnQvZG9tZS9hZGhvY18wLjV4IGlzIE5PVCBhIGZvbGRlcgoJJycnCglpZiBpc19wYXRoX3ZhbGlkKHBhdGhuYW1lKToKCQlwYXRobmFtZSA9IG9zLnBhdGgubm9ybXBhdGgocGF0aG5hbWUpCgkJaWYgcGF0aG5hbWUgPT0gJy4vJzogcmV0dXJuIFRydWUKCQluYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKHBhdGhuYW1lKSlbMF0KCQlleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KHBhdGhuYW1lKVsxXQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgkJcmV0dXJuIGxlbihuYW1lKSA+IDAgYW5kIGxlbihleHQpID09IDAKPHxmaW1fZW5kfD4="]
["8245c3ff08707e86627b8f9ce6ded28adc40145f-2","8245c3ff08707e86627b8f9ce6ded28adc40145f","PHxmaW1fcHJlZml4fD4KIiIiCkNvZGUgYm9ycm93ZWQgZnJvbSBYaW5zaHVvX1B5VG9vbGJveDogaHR0cHM6Ly9naXRodWIuY29tL3hpbnNodW93ZW5nL1hpbnNodW9fUHlUb29sYm94CiIiIgoKaW1wb3J0IG9zCmltcG9ydCBzaHV0aWwKaW1wb3J0IHRvcmNoCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcmFuZG9tCmltcG9ydCB0aW1lCmltcG9ydCBjb3B5CmltcG9ydCBnbG9iLCBnbG9iMgpmcm9tIHRvcmNoIGltcG9ydCBubgoKCmNsYXNzIEF2ZXJhZ2VNZXRlcihvYmplY3QpOiAgICAgCiAgIiIiQ29tcHV0ZXMgYW5kIHN0b3JlcyB0aGUgYXZlcmFnZSBhbmQgY3VycmVudCB2YWx1ZSIiIiAgICAKICBkZWYgX19pbml0X18oc2VsZik6ICAgCiAgICBzZWxmLnJlc2V0KCkKICAKICBkZWYgcmVzZXQoc2VsZik6CiAgICBzZWxmLnZhbCA9IDAKICAgIHNlbGYuYXZnID0gMAogICAgc2VsZi5zdW0gPSAwCiAgICBzZWxmLmNvdW50ID0gMCAgICAKICAgIHNlbGYubGlzdCA9IGxpc3QoKQogIAogIGRlZiB1cGRhdGUoc2VsZiwgdmFsLCBuPTEpOiAKICAgIHNlbGYudmFsID0gdmFsICAgIAogICAgc2VsZi5zdW0gKz0gdmFsICogbiAgICAgCiAgICBzZWxmLmNvdW50ICs9IG4KICAgIHNlbGYuYXZnID0gc2VsZi5zdW0gLyBzZWxmLmNvdW50ICAKICAgIHNlbGYubGlzdC5hcHBlbmQodmFsKQoKCmRlZiBpc25wYXJyYXkobnBhcnJheV90ZXN0KToKCXJldHVybiBpc2luc3RhbmNlKG5wYXJyYXlfdGVzdCwgbnAubmRhcnJheSkKCgpkZWYgaXNpbnRlZ2VyKGludGVnZXJfdGVzdCk6CglpZiBpc25wYXJyYXkoaW50ZWdlcl90ZXN0KTogcmV0dXJuIEZhbHNlCgl0cnk6IHJldHVybiBpc2luc3RhbmNlKGludGVnZXJfdGVzdCwgaW50KSBvciBpbnQoaW50ZWdlcl90ZXN0KSA9PSBpbnRlZ2VyX3Rlc3QKCWV4Y2VwdCBWYWx1ZUVycm9yOiByZXR1cm4gRmFsc2UKCWV4Y2VwdCBUeXBlRXJyb3I6IHJldHVybiBGYWxzZQoKCmRlZiBpc2Zsb2F0KGZsb2F0X3Rlc3QpOgoJcmV0dXJuIGlzaW5zdGFuY2UoZmxvYXRfdGVzdCwgZmxvYXQpCgoKZGVmIGlzc2NhbGFyKHNjYWxhcl90ZXN0KToKCXRyeTogcmV0dXJuIGlzaW50ZWdlcihzY2FsYXJfdGVzdCkgb3IgaXNmbG9hdChzY2FsYXJfdGVzdCkKCWV4Y2VwdCBUeXBlRXJyb3I6IHJldHVybiBGYWxzZQoKCmRlZiBpc2xvZ2ljYWwobG9naWNhbF90ZXN0KToKCXJldHVybiBpc2luc3RhbmNlKGxvZ2ljYWxfdGVzdCwgYm9vbCkKCiAgICAKZGVmIGlzc3RyaW5nKHN0cmluZ190ZXN0KToKICAgIHJldHVybiBpc2luc3RhbmNlKHN0cmluZ190ZXN0LCBzdHIpCgoKZGVmIGlzbGlzdChsaXN0X3Rlc3QpOgoJcmV0dXJuIGlzaW5zdGFuY2UobGlzdF90ZXN0LCBsaXN0KQoKCmRlZiBjb252ZXJ0X3NlY3MydGltZShzZWNvbmRzKToKICAgICcnJwogICAgZm9ybWF0IHNlY29uZCB0byBodW1hbiByZWFkYWJsZSB3YXkKICAgICcnJwogICAgYXNzZXJ0IGlzc2NhbGFyKHNlY29uZHMpLCAnaW5wdXQgc2hvdWxkIGJlIGEgc2NhbGFyIHRvIHJlcHJlc2VudCBudW1iZXIgb2Ygc2Vjb25kcycKICAgIG0sIHMgPSBkaXZtb2QoaW50KHNlY29uZHMpLCA2MCkKICAgIGgsIG0gPSBkaXZtb2QobSwgNjApCiAgICByZXR1cm4gJ1slZDolMDJkOiUwMmRdJyAlIChoLCBtLCBzKQoKCmRlZiBnZXRfdGltZXN0cmluZygpOgogICAgcmV0dXJuIHRpbWUuc3RyZnRpbWUoJyVZJW0lZF8lSGglTW0lU3MnKQoKCmRlZiByZWNyZWF0ZV9kaXJzKCpkaXJzKToKICAgIGZvciBkIGluIGRpcnM6CiAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZCk6CiAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZCkKICAgICAgICBvcy5tYWtlZGlycyhkKQoKCmRlZiBpc19wYXRoX3ZhbGlkKHBhdGhuYW1lKToKCXRyeTogIAoJCWlmIG5vdCBpc3N0cmluZyhwYXRobmFtZSkgb3Igbm90IHBhdGhuYW1lOiByZXR1cm4gRmFsc2UKCWV4Y2VwdCBUeXBlRXJyb3I6IHJldHVybiBGYWxzZQoJZWxzZTogcmV0dXJuIFRydWUKCgpkZWYgaXNfcGF0aF9jcmVhdGFibGUocGF0aG5hbWUpOgoJJycnCglpZiBhbnkgcHJldmlvdXMgbGV2ZWwgb2YgcGFyZW50IGZvbGRlciBleGlzdHMsIHJldHVybnMgdHJ1ZQoJJycnCglpZiBub3QgaXNfcGF0aF92YWxpZChwYXRobmFtZSk6IHJldHVybiBGYWxzZQoJcGF0aG5hbWUgPSBvcy5wYXRoLm5vcm1wYXRoKHBhdGhuYW1lKQoJcGF0aG5hbWUgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHBhdGhuYW1lKSkKCgkjIHJlY3Vyc2l2ZWx5IHRvIGZpbmQgdGhlIHByZXZpb3VzIGxldmVsIG9mIHBhcmVudCBmb2xkZXIgZXhpc3RpbmcKCXdoaWxlIG5vdCBpc19wYXRoX2V4aXN0cyhwYXRobmFtZSk6ICAgICAKCQlwYXRobmFtZV9uZXcgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHBhdGhuYW1lKSkKCQlpZiBwYXRobmFtZV9uZXcgPT0gcGF0aG5hbWU6IHJldHVybiBGYWxzZQoJCXBhdGhuYW1lID0gcGF0aG5hbWVfbmV3CglyZXR1cm4gb3MuYWNjZXNzKHBhdGhuYW1lLCBvcy5XX09LKQoKCmRlZiBpc19wYXRoX2V4aXN0cyhwYXRobmFtZSk6Cgl0cnk6IHJldHVybiBpc19wYXRoX3ZhbGlkKHBhdGhuYW1lKSBhbmQgb3MucGF0aC5leGlzdHMocGF0aG5hbWUpCglleGNlcHQgT1NFcnJvcjogcmV0dXJuIEZhbHNlCgoKZGVmIGlzX3BhdGhfZXhpc3RzX29yX2NyZWF0YWJsZShwYXRobmFtZSk6Cgl0cnk6IHJldHVybiBpc19wYXRoX2V4aXN0cyhwYXRobmFtZSkgb3IgaXNfcGF0aF9jcmVhdGFibGUocGF0aG5hbWUpCglleGNlcHQgT1NFcnJvcjogcmV0dXJuIEZhbHNlCgoKZGVmIGlzZmlsZShwYXRobmFtZSk6CglpZiBpc19wYXRoX3ZhbGlkKHBhdGhuYW1lKToKCQlwYXRobmFtZSA9IG9zLnBhdGgubm9ybXBhdGgocGF0aG5hbWUpCgkJbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShwYXRobmFtZSkpWzBdCgkJZXh0ID0gb3MucGF0aC5zcGxpdGV4dChwYXRobmFtZSlbMV0KCQlyZXR1cm4gbGVuKG5hbWUpID4gMCBhbmQgbGVuKGV4dCkgPiAwCgllbHNlOiByZXR1cm4gRmFsc2UKCgpkZWYgaXNmb2xkZXIocGF0aG5hbWUpOgoJJycnCglpZiAnLicgZXhpc3RzIGluIHRoZSBzdWJmb2xkZXIsIHRoZSBmdW5jdGlvbiBzdGlsbCBqdXN0aWZpZXMgaXQgYXMgYSBmb2xkZXIuIGUuZy4sIC9tbnQvZG9tZS9hZGhvY18wLjV4L2FiYyBpcyBhIGZvbGRlcgoJaWYgJy4nIGV4aXN0cyBhZnRlciBhbGwgc2xhc2hlcywgdGhlIGZ1bmN0aW9uIHdpbGwgbm90IGp1c3RpZnkgaXMgYXMgYSBmb2xkZXIuIGUuZy4sIC9tbnQvZG9tZS9hZGhvY18wLjV4IGlzIE5PVCBhIGZvbGRlcgoJJycnCglpZiBpc19wYXRoX3ZhbGlkKHBhdGhuYW1lKToKCQlwYXRobmFtZSA9IG9zLnBhdGgubm9ybXBhdGgocGF0aG5hbWUpCgkJaWYgcGF0aG5hbWUgPT0gJy4vJzogcmV0dXJuIFRydWUKCQluYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKHBhdGhuYW1lKSlbMF0KCQlleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KHBhdGhuYW1lKVsxXQoJCXJldHVybiBsZW4obmFtZSkgPiAwIGFuZCBsZW4oZXh0KSA9PSAwCgllbHNlOiByZXR1cm4gRmFsc2UKCgpkZWYgbWtkaXJfaWZfbWlzc2luZyhpbnB1dF9wYXRoKToKICAgIGZvbGRlciA9IGlucHV0X3BhdGggaWYgaXNmb2xkZXIoaW5wdXRfcGF0aCkgZWxzZSBvcy5wYXRoLmRpcm5hbWUoaW5wdXRfcGF0aCkKICAgIG9zLm1ha2VkaXJzKGZvbGRlciwgZXhpc3Rfb2s9VHJ1ZSkKCgpkZWYgc2FmZV9saXN0KGlucHV0X2RhdGEsIHdhcm5pbmc9VHJ1ZSwgZGVidWc9VHJ1ZSk6CgknJycKCWNvcHkgYSBsaXN0IHRvIHRoZSBidWZmZXIgZm9yIHVzZQoJcGFyYW1ldGVyczoKCQlpbnB1dF9kYXRhOgkJYSBsaXN0CglvdXRwdXRzOgoJCXNhZmVfZGF0YToJCWEgY29weSBvZiBpbnB1dCBkYXRhCgknJycKCWlmIGRlYnVnOiBhc3NlcnQgaXNsaXN0KGlucHV0X2RhdGEpLCAndGhlIGlucHV0IGRhdGEgaXMgbm90IGEgbGlzdCcKCXNhZmVfZGF0YSA9IGNvcHkuY29weShpbnB1dF9kYXRhKQoJcmV0dXJuIHNhZmVfZGF0YQoKCmRlZiBzYWZlX3BhdGgoaW5wdXRfcGF0aCwgd2FybmluZz1UcnVlLCBkZWJ1Zz1UcnVlKToKICAgICcnJwogICAgY29udmVydCBwYXRoIHRvIGEgdmFsaWQgT1MgZm9ybWF0LCBlLmcuLCBlbXB0eSBzdHJpbmcgJycgdG8gJy4nLCByZW1vdmUgcmVkdW5kYW50ICcvJyBhdCB0aGUgZW5kIGZyb20gJ2FhLycgdG8gJ2FhJwogICAgcGFyYW1ldGVyczoKICAgIAlpbnB1dF9wYXRoOgkJYSBzdHJpbmcKICAgIG91dHB1dHM6CiAgICAJc2FmZV9kYXRhOgkJYSB2YWxpZCBwYXRoIGluIE9TIGZvcm1hdAogICAgJycnCiAgICBpZiBkZWJ1ZzogYXNzZXJ0IGlzc3RyaW5nKGlucHV0X3BhdGgpLCAncGF0aCBpcyBub3QgYSBzdHJpbmc6ICVzJyAlIGlucHV0X3BhdGgKICAgIHNhZmVfZGF0YSA9IGNvcHkuY29weShpbnB1dF9wYXRoKQogICAgc2FmZV9kYXRhID0gb3MucGF0aC5ub3JtcGF0aChzYWZlX2RhdGEpCiAgICByZXR1cm4gc2FmZV9kYXRhCgoKZGVmIHByZXBhcmVfc2VlZChyYW5kX3NlZWQpOgoJbnAucmFuZG9tLnNlZWQocmFuZF9zZWVkKQoJcmFuZG9tLnNlZWQocmFuZF9zZWVkKQoJdG9yY2gubWFudWFsX3NlZWQocmFuZF9zZWVkKQoJdG9yY2guY3VkYS5tYW51YWxfc2VlZF9hbGwocmFuZF9zZWVkKQoKCmRlZiBpbml0aWFsaXplX3dlaWdodHMobW9kdWxlcyk6CiAgICBmb3IgbSBpbiBtb2R1bGVzOgogICAgICAgIGlmIGlzaW5zdGFuY2UobSwgbm4uQ29udjJkKToKICAgICAgICAgICAgbm4uaW5pdC5rYWltaW5nX25vcm1hbF8obS53ZWlnaHQsIG1vZGU9J2Zhbl9vdXQnLCBub25saW5lYXJpdHk9J3JlbHUnKQogICAgICAgICAgICBpZiBtLmJpYXMgaXMgbm90IE5vbmU6IG5uLmluaXQuY29uc3RhbnRfKG0uYmlhcywgMCkKICAgICAgICBlbGlmIGlzaW5zdGFuY2UobSwgbm4uQmF0Y2hOb3JtMmQpOgogICAgICAgICAgICBubi5pbml0LmNvbnN0YW50XyhtLndlaWdodCwgMSkKICAgICAgICAgICAgaWYgbS5iaWFzIGlzIG5vdCBOb25lOiBubi5pbml0LmNvbnN0YW50XyhtLmJpYXMsIDApCiAgICAgICAgZWxpZiBpc2luc3RhbmNlKG0sIG5uLkxpbmVhcik6CiAgICAgICAgICAgIG5uLmluaXQubm9ybWFsXyhtLndlaWdodCwgMCwgMC4wMSkKICAgICAgICAgICAgaWYgbS5iaWFzIGlzIG5vdCBOb25lOiBubi5pbml0LmNvbnN0YW50XyhtLmJpYXMsIDApCgoKZGVmIHByaW50X2xvZyhwcmludF9zdHIsIGxvZywgc2FtZV9saW5lPUZhbHNlLCBkaXNwbGF5PVRydWUpOgoJJycnCglwcmludCBhIHN0cmluZyB0byBhIGxvZyBmaWxlCgoJcGFyYW1ldGVyczoKCQlwcmludF9zdHI6ICAgICAgICAgIGEgc3RyaW5nIHRvIHByaW50CgkJbG9nOiAgICAgICAgICAgICAgICBhIG9wZW5lZCBmaWxlIHRvIHNhdmUgdGhlIGxvZwoJCXNhbWVfbGluZTogICAgICAgICAgVHJ1ZSBpZiB3ZSB3YW50IHRvIHByaW50IHRoZSBzdHJpbmcgd2l0aG91dCBhIG5ldyBuZXh0IGxpbmUKCQlkaXNwbGF5OiAgICAgICAgICAgIEZhbHNlIGlmIHdlIHdhbnQgdG8gZGlzYWJsZSB0byBwcmludCB0aGUgc3RyaW5nIG9udG8gdGhlIHRlcm1pbmFsCgknJycKCWlmIGRpc3BsYXk6CgkJaWYgc2FtZV9saW5lOiBwcmludCgne30nLmZvcm1hdChwcmludF9zdHIpLCBlbmQ9JycpCgkJZWxzZTogcHJpbnQoJ3t9Jy5mb3JtYXQocHJpbnRfc3RyKSkKCglpZiBzYW1lX2xpbmU6IGxvZy53cml0ZSgne30nLmZvcm1hdChwcmludF9zdHIpKQoJZWxzZTogbG9nLndyaXRlKCd7fVxuJy5mb3JtYXQocHJpbnRfc3RyKSkKCWxvZy5mbHVzaCgpCgoKZGVmIGZpbmRfdW5pcXVlX2NvbW1vbl9mcm9tX2xpc3RzKGlucHV0X2xpc3QxLCBpbnB1dF9saXN0Miwgd2FybmluZz1UcnVlLCBkZWJ1Zz1UcnVlKToKCScnJwoJZmluZCBjb21tb24gaXRlbXMgZnJvbSAyIGxpc3RzLCB0aGUgcmV0dXJuZWQgZWxlbWVudHMgYXJlIHVuaXF1ZS4gcmVwZXRpdGl2ZSBpdGVtcyB3aWxsIGJlIGlnbm9yZWQKCWlmIHRoZSBjb21tb24gaXRlbXMgaW4gdHdvIGVsZW1lbnRzIGFyZSBub3QgaW4gdGhlIHNhbWUgb3JkZXIsIHRoZSBvdXRwdXRzIGZvbGxvd3MgdGhlIG9yZGVyIGluIHRoZSBmaXJzdCBsaXN0CgoJcGFyYW1ldGVyczoKCQlpbnB1dF9saXN0MSwgaW5wdXRfbGlzdDI6CQl0d28gaW5wdXQgbGlzdHMKCglvdXRwdXRzOgoJCWxpc3RfY29tbW9uOglhIGxpc3Qgb2YgZWxlbWVudHMgZXhpc3RpbmcgYm90aCBpbiBsaXN0X3NyYzEgYW5kIGxpc3Rfc3JjMgkKCQlpbmRleF9saXN0MToJYSBsaXN0IG9mIGluZGV4IHRoYXQgbGlzdCAxIGhhcyBjb21tb24gaXRlbXMKCQlpbmRleF9saXN0MjoJYSBsaXN0IG9mIGluZGV4IHRoYXQgbGlzdCAyIGhhcyBjb21tb24gaXRlbXMKCScnJwoJaW5wdXRfbGlzdDEgPSBzYWZlX2xpc3QoaW5wdXRfbGlzdDEsIHdhcm5pbmc9d2FybmluZywgZGVidWc9ZGVidWcpCglpbnB1dF9saXN0MiA9IHNhZmVfbGlzdChpbnB1dF9saXN0Miwgd2FybmluZz13YXJuaW5nLCBkZWJ1Zz1kZWJ1ZykKCgljb21tb25fbGlzdCA9IGxpc3Qoc2V0KGlucHV0X2xpc3QxKS5pbnRlcnNlY3Rpb24oaW5wdXRfbGlzdDIpKQoJCgkjIGZpbmQgaW5kZXgKCWluZGV4X2xpc3QxID0gW10KCWZvciBpbmRleCBpbiByYW5nZShsZW4oaW5wdXRfbGlzdDEpKToKCQlpdGVtID0gaW5wdXRfbGlzdDFbaW5kZXhdCgkJaWYgaXRlbSBpbiBjb21tb25fbGlzdDoKCQkJaW5kZXhfbGlzdDEuYXBwZW5kKGluZGV4KQoKCWluZGV4X2xpc3QyID0gW10KCWZvciBpbmRleCBpbiByYW5nZShsZW4oaW5wdXRfbGlzdDIpKToKCQlpdGVtID0gaW5wdXRfbGlzdDJbaW5kZXhdCgkJaWYgaXRlbSBpbiBjb21tb25fbGlzdDoKCQkJaW5kZXhfbGlzdDIuYXBwZW5kKGluZGV4KQoKCXJldHVybiBjb21tb25fbGlzdCwgaW5kZXhfbGlzdDEsIGluZGV4X2xpc3QyCgoKZGVmIGxvYWRfdHh0X2ZpbGUoZmlsZV9wYXRoLCBkZWJ1Zz1UcnVlKToKICAgICcnJwogICAgbG9hZCBkYXRhIG9yIHN0cmluZyBmcm9tIHRleHQgZmlsZQogICAgJycnCiAgICBmaWxlX3BhdGggPSBzYWZlX3BhdGgoZmlsZV9wYXRoKQogICAgaWYgZGVidWc6IGFzc2VydCBpc19wYXRoX2V4aXN0cyhmaWxlX3BhdGgpLCAndGV4dCBmaWxlIGlzIG5vdCBleGlzdGluZyBhdCBwYXRoOiAlcyEnICUgZmlsZV9wYXRoCiAgICB3aXRoIG9wZW4oZmlsZV9wYXRoLCAncicpIGFzIGZpbGU6IGRhdGEgPSBmaWxlLnJlYWQoKS5zcGxpdGxpbmVzKCkKICAgIG51bV9saW5lcyA9IGxlbihkYXRhKQogICAgZmlsZS5jbG9zZSgpCiAgICByZXR1cm4gZGF0YSwgbnVtX2xpbmVzCgoKZGVmIGxvYWRfbGlzdF9mcm9tX2ZvbGRlcihmb2xkZXJfcGF0aCwgZXh0X2ZpbHRlcj1Ob25lLCBkZXB0aD0xLCByZWN1cnNpdmU9RmFsc2UsIHNvcnQ9VHJ1ZSwgc2F2ZV9wYXRoPU5vbmUsIGRlYnVnPVRydWUpOgo8fGZpbV9ob2xlfD4KICAgICAgICBmb2xkZXJfcGF0aDogICAgcm9vdCB0byBzZWFyY2ggCiAgICAgICAgZXh0X2ZpbHRlcjogICAgIGEgc3RyaW5nIHRvIHJlcHJlc2VudCB0aGUgZXh0ZW5zaW9uIG9mIGZpbGVzIGludGVyZXN0ZWQKICAgICAgICBkZXB0aDogICAgICAgICAgbWF4aW11bSBkZXB0aCBvZiBmb2xkZXIgdG8gc2VhcmNoLCB3aGVuIGl0J3MgTm9uZSwgYWxsIGxldmVscyBvZiBmb2xkZXJzIHdpbGwgYmUgc2VhcmNoZWQKICAgICAgICByZWN1cnNpdmU6ICAgICAgRmFsc2U6IG9ubHkgcmV0dXJuIGN1cnJlbnQgbGV2ZWwKICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZTogcmV0dXJuIGFsbCBsZXZlbHMgdGlsbCB0byB0aGUgaW5wdXQgZGVwdGgKCiAgICBvdXRwdXRzOgogICAgICAgIGZ1bGxsaXN0OiAgICAgICBhIGxpc3Qgb2YgZWxlbWVudHMKICAgICAgICBudW1fZWxlbTogICAgICAgbnVtYmVyIG9mIHRoZSBlbGVtZW50cwogICAgJycnCiAgICBmb2xkZXJfcGF0aCA9IHNhZmVfcGF0aChmb2xkZXJfcGF0aCkKICAgIGlmIGRlYnVnOiBhc3NlcnQgaXNmb2xkZXIoZm9sZGVyX3BhdGgpLCAnaW5wdXQgZm9sZGVyIHBhdGggaXMgbm90IGNvcnJlY3Q6ICVzJyAlIGZvbGRlcl9wYXRoCiAgICBpZiBub3QgaXNfcGF0aF9leGlzdHMoZm9sZGVyX3BhdGgpOiAKICAgICAgICBwcmludCgndGhlIGlucHV0IGZvbGRlciBkb2VzIG5vdCBleGlzdFxuJykKICAgICAgICByZXR1cm4gW10sIDAKICAgIGlmIGRlYnVnOgogICAgICAgIGFzc2VydCBpc2xvZ2ljYWwocmVjdXJzaXZlKSwgJ3JlY3Vyc2l2ZSBzaG91bGQgYmUgYSBsb2dpY2FsIHZhcmlhYmxlOiB7fScuZm9ybWF0KHJlY3Vyc2l2ZSkKICAgICAgICBhc3NlcnQgZGVwdGggaXMgTm9uZSBvciAoaXNpbnRlZ2VyKGRlcHRoKSBhbmQgZGVwdGggPj0gMSksICdpbnB1dCBkZXB0aCBpcyBub3QgY29ycmVjdCB7fScuZm9ybWF0KGRlcHRoKQogICAgICAgIGFzc2VydCBleHRfZmlsdGVyIGlzIE5vbmUgb3IgKGlzbGlzdChleHRfZmlsdGVyKSBhbmQgYWxsKGlzc3RyaW5nKGV4dF90bXApIGZvciBleHRfdG1wIGluIGV4dF9maWx0ZXIpKSBvciBpc3N0cmluZyhleHRfZmlsdGVyKSwgJ2V4dGVuc2lvbiBmaWx0ZXIgaXMgbm90IGNvcnJlY3QnCiAgICBpZiBpc3N0cmluZyhleHRfZmlsdGVyKTogZXh0X2ZpbHRlciA9IFtleHRfZmlsdGVyXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgdG8gYSBsaXN0CiAgICAjIHp4YwoKICAgIGZ1bGxsaXN0ID0gbGlzdCgpCiAgICBpZiBkZXB0aCBpcyBOb25lOiAgICAgICAgIyBmaW5kIGFsbCBmaWxlcyByZWN1cnNpdmVseQogICAgICAgIHJlY3Vyc2l2ZSA9IFRydWUKICAgICAgICB3aWxkY2FyZF9wcmVmaXggPSAnKionCiAgICAgICAgaWYgZXh0X2ZpbHRlciBpcyBub3QgTm9uZToKICAgICAgICAgICAgZm9yIGV4dF90bXAgaW4gZXh0X2ZpbHRlcjoKICAgICAgICAgICAgICAgICMgd2lsZGNhcmQgPSBvcy5wYXRoLmpvaW4od2lsZGNhcmRfcHJlZml4LCAnKicgKyBzdHJpbmcyZXh0X2ZpbHRlcihleHRfdG1wKSkKICAgICAgICAgICAgICAgIHdpbGRjYXJkID0gb3MucGF0aC5qb2luKHdpbGRjYXJkX3ByZWZpeCwgJyonICsgZXh0X3RtcCkKICAgICAgICAgICAgICAgIGN1cmxpc3QgPSBnbG9iMi5nbG9iKG9zLnBhdGguam9pbihmb2xkZXJfcGF0aCwgd2lsZGNhcmQpKQogICAgICAgICAgICAgICAgaWYgc29ydDogY3VybGlzdCA9IHNvcnRlZChjdXJsaXN0KQogICAgICAgICAgICAgICAgZnVsbGxpc3QgKz0gY3VybGlzdAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHdpbGRjYXJkID0gd2lsZGNhcmRfcHJlZml4CiAgICAgICAgICAgIGN1cmxpc3QgPSBnbG9iMi5nbG9iKG9zLnBhdGguam9pbihmb2xkZXJfcGF0aCwgd2lsZGNhcmQpKQogICAgICAgICAgICBpZiBzb3J0OiBjdXJsaXN0ID0gc29ydGVkKGN1cmxpc3QpCiAgICAgICAgICAgIGZ1bGxsaXN0ICs9IGN1cmxpc3QKICAgIGVsc2U6ICAgICAgICAgICAgICAgICAgICAjIGZpbmQgZmlsZXMgYmFzZWQgb24gZGVwdGggYW5kIHJlY3Vyc2l2ZSBmbGFnCiAgICAgICAgd2lsZGNhcmRfcHJlZml4ID0gJyonCiAgICAgICAgZm9yIGluZGV4IGluIHJhbmdlKGRlcHRoLTEpOiB3aWxkY2FyZF9wcmVmaXggPSBvcy5wYXRoLmpvaW4od2lsZGNhcmRfcHJlZml4LCAnKicpCiAgICAgICAgaWYgZXh0X2ZpbHRlciBpcyBub3QgTm9uZToKICAgICAgICAgICAgZm9yIGV4dF90bXAgaW4gZXh0X2ZpbHRlcjoKICAgICAgICAgICAgICAgICMgd2lsZGNhcmQgPSB3aWxkY2FyZF9wcmVmaXggKyBzdHJpbmcyZXh0X2ZpbHRlcihleHRfdG1wKQogICAgICAgICAgICAgICAgd2lsZGNhcmQgPSB3aWxkY2FyZF9wcmVmaXggKyBleHRfdG1wCiAgICAgICAgICAgICAgICBjdXJsaXN0ID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihmb2xkZXJfcGF0aCwgd2lsZGNhcmQpKQogICAgICAgICAgICAgICAgaWYgc29ydDogY3VybGlzdCA9IHNvcnRlZChjdXJsaXN0KQogICAgICAgICAgICAgICAgZnVsbGxpc3QgKz0gY3VybGlzdAogICAgICAgICAgICAjIHp4YwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHdpbGRjYXJkID0gd2lsZGNhcmRfcHJlZml4CiAgICAgICAgICAgIGN1cmxpc3QgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKGZvbGRlcl9wYXRoLCB3aWxkY2FyZCkpCiAgICAgICAgICAgICMgcHJpbnQoY3VybGlzdCkKICAgICAgICAgICAgaWYgc29ydDogY3VybGlzdCA9IHNvcnRlZChjdXJsaXN0KQogICAgICAgICAgICBmdWxsbGlzdCArPSBjdXJsaXN0CiAgICAgICAgaWYgcmVjdXJzaXZlIGFuZCBkZXB0aCA+IDE6CiAgICAgICAgICAgIG5ld2xpc3QsIF8gPSBsb2FkX2xpc3RfZnJvbV9mb2xkZXIoZm9sZGVyX3BhdGg9Zm9sZGVyX3BhdGgsIGV4dF9maWx0ZXI9ZXh0X2ZpbHRlciwgZGVwdGg9ZGVwdGgtMSwgcmVjdXJzaXZlPVRydWUpCiAgICAgICAgICAgIGZ1bGxsaXN0ICs9IG5ld2xpc3QKCiAgICBmdWxsbGlzdCA9IFtvcy5wYXRoLm5vcm1wYXRoKHBhdGhfdG1wKSBmb3IgcGF0aF90bXAgaW4gZnVsbGxpc3RdCiAgICBudW1fZWxlbSA9IGxlbihmdWxsbGlzdCkKCiAgICAjIHNhdmUgbGlzdCB0byBhIHBhdGgKICAgIGlmIHNhdmVfcGF0aCBpcyBub3QgTm9uZToKICAgICAgICBzYXZlX3BhdGggPSBzYWZlX3BhdGgoc2F2ZV9wYXRoKQogICAgICAgIGlmIGRlYnVnOiBhc3NlcnQgaXNfcGF0aF9leGlzdHNfb3JfY3JlYXRhYmxlKHNhdmVfcGF0aCksICd0aGUgZmlsZSBjYW5ub3QgYmUgY3JlYXRlZCcKICAgICAgICB3aXRoIG9wZW4oc2F2ZV9wYXRoLCAndycpIGFzIGZpbGU6CiAgICAgICAgICAgIGZvciBpdGVtIGluIGZ1bGxsaXN0OiBmaWxlLndyaXRlKCclc1xuJyAlIGl0ZW0pCiAgICAgICAgZmlsZS5jbG9zZSgpCgogICAgcmV0dXJuIGZ1bGxsaXN0LCBudW1fZWxlbQo8fGZpbV9zdWZmaXh8PgogICAgJycnCiAgICBsb2FkIGEgbGlzdCBvZiBmaWxlcyBvciBmb2xkZXJzIGZyb20gYSBzeXN0ZW0gcGF0aAoKICAgIHBhcmFtZXRlcnM6Cjx8ZmltX2VuZHw+"]
["8245c3ff08707e86627b8f9ce6ded28adc40145f-3","8245c3ff08707e86627b8f9ce6ded28adc40145f","PHxmaW1fcHJlZml4fD4KIiIiCkNvZGUgYm9ycm93ZWQgZnJvbSBYaW5zaHVvX1B5VG9vbGJveDogaHR0cHM6Ly9naXRodWIuY29tL3hpbnNodW93ZW5nL1hpbnNodW9fUHlUb29sYm94CiIiIgoKaW1wb3J0IG9zCmltcG9ydCBzaHV0aWwKaW1wb3J0IHRvcmNoCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcmFuZG9tCmltcG9ydCB0aW1lCmltcG9ydCBjb3B5CmltcG9ydCBnbG9iLCBnbG9iMgpmcm9tIHRvcmNoIGltcG9ydCBubgoKCmNsYXNzIEF2ZXJhZ2VNZXRlcihvYmplY3QpOiAgICAgCiAgIiIiQ29tcHV0ZXMgYW5kIHN0b3JlcyB0aGUgYXZlcmFnZSBhbmQgY3VycmVudCB2YWx1ZSIiIiAgICAKICBkZWYgX19pbml0X18oc2VsZik6ICAgCiAgICBzZWxmLnJlc2V0KCkKICAKICBkZWYgcmVzZXQoc2VsZik6CiAgICBzZWxmLnZhbCA9IDAKICAgIHNlbGYuYXZnID0gMAogICAgc2VsZi5zdW0gPSAwCiAgICBzZWxmLmNvdW50ID0gMCAgICAKICAgIHNlbGYubGlzdCA9IGxpc3QoKQogIAogIGRlZiB1cGRhdGUoc2VsZiwgdmFsLCBuPTEpOiAKICAgIHNlbGYudmFsID0gdmFsICAgIAogICAgc2VsZi5zdW0gKz0gdmFsICogbiAgICAgCiAgICBzZWxmLmNvdW50ICs9IG4KICAgIHNlbGYuYXZnID0gc2VsZi5zdW0gLyBzZWxmLmNvdW50ICAKICAgIHNlbGYubGlzdC5hcHBlbmQodmFsKQoKCmRlZiBpc25wYXJyYXkobnBhcnJheV90ZXN0KToKCXJldHVybiBpc2luc3RhbmNlKG5wYXJyYXlfdGVzdCwgbnAubmRhcnJheSkKCgpkZWYgaXNpbnRlZ2VyKGludGVnZXJfdGVzdCk6CglpZiBpc25wYXJyYXkoaW50ZWdlcl90ZXN0KTogcmV0dXJuIEZhbHNlCgl0cnk6IHJldHVybiBpc2luc3RhbmNlKGludGVnZXJfdGVzdCwgaW50KSBvciBpbnQoaW50ZWdlcl90ZXN0KSA9PSBpbnRlZ2VyX3Rlc3QKCWV4Y2VwdCBWYWx1ZUVycm9yOiByZXR1cm4gRmFsc2UKCWV4Y2VwdCBUeXBlRXJyb3I6IHJldHVybiBGYWxzZQoKCmRlZiBpc2Zsb2F0KGZsb2F0X3Rlc3QpOgoJcmV0dXJuIGlzaW5zdGFuY2UoZmxvYXRfdGVzdCwgZmxvYXQpCgoKZGVmIGlzc2NhbGFyKHNjYWxhcl90ZXN0KToKCXRyeTogcmV0dXJuIGlzaW50ZWdlcihzY2FsYXJfdGVzdCkgb3IgaXNmbG9hdChzY2FsYXJfdGVzdCkKCWV4Y2VwdCBUeXBlRXJyb3I6IHJldHVybiBGYWxzZQoKCmRlZiBpc2xvZ2ljYWwobG9naWNhbF90ZXN0KToKCXJldHVybiBpc2luc3RhbmNlKGxvZ2ljYWxfdGVzdCwgYm9vbCkKCiAgICAKZGVmIGlzc3RyaW5nKHN0cmluZ190ZXN0KToKICAgIHJldHVybiBpc2luc3RhbmNlKHN0cmluZ190ZXN0LCBzdHIpCgoKZGVmIGlzbGlzdChsaXN0X3Rlc3QpOgoJcmV0dXJuIGlzaW5zdGFuY2UobGlzdF90ZXN0LCBsaXN0KQoKCmRlZiBjb252ZXJ0X3NlY3MydGltZShzZWNvbmRzKToKICAgICcnJwogICAgZm9ybWF0IHNlY29uZCB0byBodW1hbiByZWFkYWJsZSB3YXkKICAgICcnJwogICAgYXNzZXJ0IGlzc2NhbGFyKHNlY29uZHMpLCAnaW5wdXQgc2hvdWxkIGJlIGEgc2NhbGFyIHRvIHJlcHJlc2VudCBudW1iZXIgb2Ygc2Vjb25kcycKICAgIG0sIHMgPSBkaXZtb2QoaW50KHNlY29uZHMpLCA2MCkKICAgIGgsIG0gPSBkaXZtb2QobSwgNjApCiAgICByZXR1cm4gJ1slZDolMDJkOiUwMmRdJyAlIChoLCBtLCBzKQoKCmRlZiBnZXRfdGltZXN0cmluZygpOgogICAgcmV0dXJuIHRpbWUuc3RyZnRpbWUoJyVZJW0lZF8lSGglTW0lU3MnKQoKCmRlZiByZWNyZWF0ZV9kaXJzKCpkaXJzKToKICAgIGZvciBkIGluIGRpcnM6CiAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZCk6CiAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZCkKICAgICAgICBvcy5tYWtlZGlycyhkKQoKCmRlZiBpc19wYXRoX3ZhbGlkKHBhdGhuYW1lKToKCXRyeTogIAoJCWlmIG5vdCBpc3N0cmluZyhwYXRobmFtZSkgb3Igbm90IHBhdGhuYW1lOiByZXR1cm4gRmFsc2UKCWV4Y2VwdCBUeXBlRXJyb3I6IHJldHVybiBGYWxzZQoJZWxzZTogcmV0dXJuIFRydWUKCgpkZWYgaXNfcGF0aF9jcmVhdGFibGUocGF0aG5hbWUpOgoJJycnCglpZiBhbnkgcHJldmlvdXMgbGV2ZWwgb2YgcGFyZW50IGZvbGRlciBleGlzdHMsIHJldHVybnMgdHJ1ZQoJJycnCglpZiBub3QgaXNfcGF0aF92YWxpZChwYXRobmFtZSk6IHJldHVybiBGYWxzZQoJcGF0aG5hbWUgPSBvcy5wYXRoLm5vcm1wYXRoKHBhdGhuYW1lKQoJcGF0aG5hbWUgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHBhdGhuYW1lKSkKCgkjIHJlY3Vyc2l2ZWx5IHRvIGZpbmQgdGhlIHByZXZpb3VzIGxldmVsIG9mIHBhcmVudCBmb2xkZXIgZXhpc3RpbmcKCXdoaWxlIG5vdCBpc19wYXRoX2V4aXN0cyhwYXRobmFtZSk6ICAgICAKCQlwYXRobmFtZV9uZXcgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHBhdGhuYW1lKSkKCQlpZiBwYXRobmFtZV9uZXcgPT0gcGF0aG5hbWU6IHJldHVybiBGYWxzZQoJCXBhdGhuYW1lID0gcGF0aG5hbWVfbmV3CglyZXR1cm4gb3MuYWNjZXNzKHBhdGhuYW1lLCBvcy5XX09LKQoKCmRlZiBpc19wYXRoX2V4aXN0cyhwYXRobmFtZSk6Cgl0cnk6IHJldHVybiBpc19wYXRoX3ZhbGlkKHBhdGhuYW1lKSBhbmQgb3MucGF0aC5leGlzdHMocGF0aG5hbWUpCglleGNlcHQgT1NFcnJvcjogcmV0dXJuIEZhbHNlCgoKZGVmIGlzX3BhdGhfZXhpc3RzX29yX2NyZWF0YWJsZShwYXRobmFtZSk6Cgl0cnk6IHJldHVybiBpc19wYXRoX2V4aXN0cyhwYXRobmFtZSkgb3IgaXNfcGF0aF9jcmVhdGFibGUocGF0aG5hbWUpCglleGNlcHQgT1NFcnJvcjogcmV0dXJuIEZhbHNlCgoKZGVmIGlzZmlsZShwYXRobmFtZSk6CglpZiBpc19wYXRoX3ZhbGlkKHBhdGhuYW1lKToKCQlwYXRobmFtZSA9IG9zLnBhdGgubm9ybXBhdGgocGF0aG5hbWUpCgkJbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShwYXRobmFtZSkpWzBdCgkJZXh0ID0gb3MucGF0aC5zcGxpdGV4dChwYXRobmFtZSlbMV0KCQlyZXR1cm4gbGVuKG5hbWUpID4gMCBhbmQgbGVuKGV4dCkgPiAwCgllbHNlOiByZXR1cm4gRmFsc2UKCgpkZWYgaXNmb2xkZXIocGF0aG5hbWUpOgoJJycnCglpZiAnLicgZXhpc3RzIGluIHRoZSBzdWJmb2xkZXIsIHRoZSBmdW5jdGlvbiBzdGlsbCBqdXN0aWZpZXMgaXQgYXMgYSBmb2xkZXIuIGUuZy4sIC9tbnQvZG9tZS9hZGhvY18wLjV4L2FiYyBpcyBhIGZvbGRlcgoJaWYgJy4nIGV4aXN0cyBhZnRlciBhbGwgc2xhc2hlcywgdGhlIGZ1bmN0aW9uIHdpbGwgbm90IGp1c3RpZnkgaXMgYXMgYSBmb2xkZXIuIGUuZy4sIC9tbnQvZG9tZS9hZGhvY18wLjV4IGlzIE5PVCBhIGZvbGRlcgoJJycnCglpZiBpc19wYXRoX3ZhbGlkKHBhdGhuYW1lKToKCQlwYXRobmFtZSA9IG9zLnBhdGgubm9ybXBhdGgocGF0aG5hbWUpCgkJaWYgcGF0aG5hbWUgPT0gJy4vJzogcmV0dXJuIFRydWUKCQluYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKHBhdGhuYW1lKSlbMF0KCQlleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KHBhdGhuYW1lKVsxXQoJCXJldHVybiBsZW4obmFtZSkgPiAwIGFuZCBsZW4oZXh0KSA9PSAwCgllbHNlOiByZXR1cm4gRmFsc2UKCgpkZWYgbWtkaXJfaWZfbWlzc2luZyhpbnB1dF9wYXRoKToKICAgIGZvbGRlciA9IGlucHV0X3BhdGggaWYgaXNmb2xkZXIoaW5wdXRfcGF0aCkgZWxzZSBvcy5wYXRoLmRpcm5hbWUoaW5wdXRfcGF0aCkKICAgIG9zLm1ha2VkaXJzKGZvbGRlciwgZXhpc3Rfb2s9VHJ1ZSkKCgpkZWYgc2FmZV9saXN0KGlucHV0X2RhdGEsIHdhcm5pbmc9VHJ1ZSwgZGVidWc9VHJ1ZSk6CgknJycKCWNvcHkgYSBsaXN0IHRvIHRoZSBidWZmZXIgZm9yIHVzZQoJcGFyYW1ldGVyczoKCQlpbnB1dF9kYXRhOgkJYSBsaXN0CglvdXRwdXRzOgoJCXNhZmVfZGF0YToJCWEgY29weSBvZiBpbnB1dCBkYXRhCgknJycKCWlmIGRlYnVnOiBhc3NlcnQgaXNsaXN0KGlucHV0X2RhdGEpLCAndGhlIGlucHV0IGRhdGEgaXMgbm90IGEgbGlzdCcKCXNhZmVfZGF0YSA9IGNvcHkuY29weShpbnB1dF9kYXRhKQoJcmV0dXJuIHNhZmVfZGF0YQoKCmRlZiBzYWZlX3BhdGgoaW5wdXRfcGF0aCwgd2FybmluZz1UcnVlLCBkZWJ1Zz1UcnVlKToKICAgICcnJwogICAgY29udmVydCBwYXRoIHRvIGEgdmFsaWQgT1MgZm9ybWF0LCBlLmcuLCBlbXB0eSBzdHJpbmcgJycgdG8gJy4nLCByZW1vdmUgcmVkdW5kYW50ICcvJyBhdCB0aGUgZW5kIGZyb20gJ2FhLycgdG8gJ2FhJwogICAgcGFyYW1ldGVyczoKICAgIAlpbnB1dF9wYXRoOgkJYSBzdHJpbmcKICAgIG91dHB1dHM6CiAgICAJc2FmZV9kYXRhOgkJYSB2YWxpZCBwYXRoIGluIE9TIGZvcm1hdAogICAgJycnCiAgICBpZiBkZWJ1ZzogYXNzZXJ0IGlzc3RyaW5nKGlucHV0X3BhdGgpLCAncGF0aCBpcyBub3QgYSBzdHJpbmc6ICVzJyAlIGlucHV0X3BhdGgKICAgIHNhZmVfZGF0YSA9IGNvcHkuY29weShpbnB1dF9wYXRoKQogICAgc2FmZV9kYXRhID0gb3MucGF0aC5ub3JtcGF0aChzYWZlX2RhdGEpCiAgICByZXR1cm4gc2FmZV9kYXRhCgoKZGVmIHByZXBhcmVfc2VlZChyYW5kX3NlZWQpOgoJbnAucmFuZG9tLnNlZWQocmFuZF9zZWVkKQoJcmFuZG9tLnNlZWQocmFuZF9zZWVkKQoJdG9yY2gubWFudWFsX3NlZWQocmFuZF9zZWVkKQoJdG9yY2guY3VkYS5tYW51YWxfc2VlZF9hbGwocmFuZF9zZWVkKQoKCmRlZiBpbml0aWFsaXplX3dlaWdodHMobW9kdWxlcyk6CiAgICBmb3IgbSBpbiBtb2R1bGVzOgogICAgICAgIGlmIGlzaW5zdGFuY2UobSwgbm4uQ29udjJkKToKICAgICAgICAgICAgbm4uaW5pdC5rYWltaW5nX25vcm1hbF8obS53ZWlnaHQsIG1vZGU9J2Zhbl9vdXQnLCBub25saW5lYXJpdHk9J3JlbHUnKQogICAgICAgICAgICBpZiBtLmJpYXMgaXMgbm90IE5vbmU6IG5uLmluaXQuY29uc3RhbnRfKG0uYmlhcywgMCkKICAgICAgICBlbGlmIGlzaW5zdGFuY2UobSwgbm4uQmF0Y2hOb3JtMmQpOgogICAgICAgICAgICBubi5pbml0LmNvbnN0YW50XyhtLndlaWdodCwgMSkKICAgICAgICAgICAgaWYgbS5iaWFzIGlzIG5vdCBOb25lOiBubi5pbml0LmNvbnN0YW50XyhtLmJpYXMsIDApCiAgICAgICAgZWxpZiBpc2luc3RhbmNlKG0sIG5uLkxpbmVhcik6CiAgICAgICAgICAgIG5uLmluaXQubm9ybWFsXyhtLndlaWdodCwgMCwgMC4wMSkKICAgICAgICAgICAgaWYgbS5iaWFzIGlzIG5vdCBOb25lOiBubi5pbml0LmNvbnN0YW50XyhtLmJpYXMsIDApCgoKZGVmIHByaW50X2xvZyhwcmludF9zdHIsIGxvZywgc2FtZV9saW5lPUZhbHNlLCBkaXNwbGF5PVRydWUpOgoJJycnCglwcmludCBhIHN0cmluZyB0byBhIGxvZyBmaWxlCgoJcGFyYW1ldGVyczoKCQlwcmludF9zdHI6ICAgICAgICAgIGEgc3RyaW5nIHRvIHByaW50CgkJbG9nOiAgICAgICAgICAgICAgICBhIG9wZW5lZCBmaWxlIHRvIHNhdmUgdGhlIGxvZwoJCXNhbWVfbGluZTogICAgICAgICAgVHJ1ZSBpZiB3ZSB3YW50IHRvIHByaW50IHRoZSBzdHJpbmcgd2l0aG91dCBhIG5ldyBuZXh0IGxpbmUKCQlkaXNwbGF5OiAgICAgICAgICAgIEZhbHNlIGlmIHdlIHdhbnQgdG8gZGlzYWJsZSB0byBwcmludCB0aGUgc3RyaW5nIG9udG8gdGhlIHRlcm1pbmFsCgknJycKCWlmIGRpc3BsYXk6CgkJaWYgc2FtZV9saW5lOiBwcmludCgne30nLmZvcm1hdChwcmludF9zdHIpLCBlbmQ9JycpCgkJZWxzZTogcHJpbnQoJ3t9Jy5mb3JtYXQocHJpbnRfc3RyKSkKCglpZiBzYW1lX2xpbmU6IGxvZy53cml0ZSgne30nLmZvcm1hdChwcmludF9zdHIpKQoJZWxzZTogbG9nLndyaXRlKCd7fVxuJy5mb3JtYXQocHJpbnRfc3RyKSkKCWxvZy5mbHVzaCgpCgoKZGVmIGZpbmRfdW5pcXVlX2NvbW1vbl9mcm9tX2xpc3RzKGlucHV0X2xpc3QxLCBpbnB1dF9saXN0Miwgd2FybmluZz1UcnVlLCBkZWJ1Zz1UcnVlKToKPHxmaW1faG9sZXw+CglwYXJhbWV0ZXJzOgoJCWlucHV0X2xpc3QxLCBpbnB1dF9saXN0MjoJCXR3byBpbnB1dCBsaXN0cwoKCW91dHB1dHM6CgkJbGlzdF9jb21tb246CWEgbGlzdCBvZiBlbGVtZW50cyBleGlzdGluZyBib3RoIGluIGxpc3Rfc3JjMSBhbmQgbGlzdF9zcmMyCQoJCWluZGV4X2xpc3QxOglhIGxpc3Qgb2YgaW5kZXggdGhhdCBsaXN0IDEgaGFzIGNvbW1vbiBpdGVtcwoJCWluZGV4X2xpc3QyOglhIGxpc3Qgb2YgaW5kZXggdGhhdCBsaXN0IDIgaGFzIGNvbW1vbiBpdGVtcwoJJycnCglpbnB1dF9saXN0MSA9IHNhZmVfbGlzdChpbnB1dF9saXN0MSwgd2FybmluZz13YXJuaW5nLCBkZWJ1Zz1kZWJ1ZykKCWlucHV0X2xpc3QyID0gc2FmZV9saXN0KGlucHV0X2xpc3QyLCB3YXJuaW5nPXdhcm5pbmcsIGRlYnVnPWRlYnVnKQoKCWNvbW1vbl9saXN0ID0gbGlzdChzZXQoaW5wdXRfbGlzdDEpLmludGVyc2VjdGlvbihpbnB1dF9saXN0MikpCgkKCSMgZmluZCBpbmRleAoJaW5kZXhfbGlzdDEgPSBbXQoJZm9yIGluZGV4IGluIHJhbmdlKGxlbihpbnB1dF9saXN0MSkpOgoJCWl0ZW0gPSBpbnB1dF9saXN0MVtpbmRleF0KCQlpZiBpdGVtIGluIGNvbW1vbl9saXN0OgoJCQlpbmRleF9saXN0MS5hcHBlbmQoaW5kZXgpCgoJaW5kZXhfbGlzdDIgPSBbXQoJZm9yIGluZGV4IGluIHJhbmdlKGxlbihpbnB1dF9saXN0MikpOgoJCWl0ZW0gPSBpbnB1dF9saXN0MltpbmRleF0KCQlpZiBpdGVtIGluIGNvbW1vbl9saXN0OgoJCQlpbmRleF9saXN0Mi5hcHBlbmQoaW5kZXgpCgoJcmV0dXJuIGNvbW1vbl9saXN0LCBpbmRleF9saXN0MSwgaW5kZXhfbGlzdDIKCgpkZWYgbG9hZF90eHRfZmlsZShmaWxlX3BhdGgsIGRlYnVnPVRydWUpOgogICAgJycnCiAgICBsb2FkIGRhdGEgb3Igc3RyaW5nIGZyb20gdGV4dCBmaWxlCiAgICAnJycKICAgIGZpbGVfcGF0aCA9IHNhZmVfcGF0aChmaWxlX3BhdGgpCiAgICBpZiBkZWJ1ZzogYXNzZXJ0IGlzX3BhdGhfZXhpc3RzKGZpbGVfcGF0aCksICd0ZXh0IGZpbGUgaXMgbm90IGV4aXN0aW5nIGF0IHBhdGg6ICVzIScgJSBmaWxlX3BhdGgKICAgIHdpdGggb3BlbihmaWxlX3BhdGgsICdyJykgYXMgZmlsZTogZGF0YSA9IGZpbGUucmVhZCgpLnNwbGl0bGluZXMoKQogICAgbnVtX2xpbmVzID0gbGVuKGRhdGEpCiAgICBmaWxlLmNsb3NlKCkKICAgIHJldHVybiBkYXRhLCBudW1fbGluZXMKCgpkZWYgbG9hZF9saXN0X2Zyb21fZm9sZGVyKGZvbGRlcl9wYXRoLCBleHRfZmlsdGVyPU5vbmUsIGRlcHRoPTEsIHJlY3Vyc2l2ZT1GYWxzZSwgc29ydD1UcnVlLCBzYXZlX3BhdGg9Tm9uZSwgZGVidWc9VHJ1ZSk6CiAgICAnJycKICAgIGxvYWQgYSBsaXN0IG9mIGZpbGVzIG9yIGZvbGRlcnMgZnJvbSBhIHN5c3RlbSBwYXRoCgogICAgcGFyYW1ldGVyczoKICAgICAgICBmb2xkZXJfcGF0aDogICAgcm9vdCB0byBzZWFyY2ggCiAgICAgICAgZXh0X2ZpbHRlcjogICAgIGEgc3RyaW5nIHRvIHJlcHJlc2VudCB0aGUgZXh0ZW5zaW9uIG9mIGZpbGVzIGludGVyZXN0ZWQKICAgICAgICBkZXB0aDogICAgICAgICAgbWF4aW11bSBkZXB0aCBvZiBmb2xkZXIgdG8gc2VhcmNoLCB3aGVuIGl0J3MgTm9uZSwgYWxsIGxldmVscyBvZiBmb2xkZXJzIHdpbGwgYmUgc2VhcmNoZWQKICAgICAgICByZWN1cnNpdmU6ICAgICAgRmFsc2U6IG9ubHkgcmV0dXJuIGN1cnJlbnQgbGV2ZWwKICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZTogcmV0dXJuIGFsbCBsZXZlbHMgdGlsbCB0byB0aGUgaW5wdXQgZGVwdGgKCiAgICBvdXRwdXRzOgogICAgICAgIGZ1bGxsaXN0OiAgICAgICBhIGxpc3Qgb2YgZWxlbWVudHMKICAgICAgICBudW1fZWxlbTogICAgICAgbnVtYmVyIG9mIHRoZSBlbGVtZW50cwogICAgJycnCiAgICBmb2xkZXJfcGF0aCA9IHNhZmVfcGF0aChmb2xkZXJfcGF0aCkKICAgIGlmIGRlYnVnOiBhc3NlcnQgaXNmb2xkZXIoZm9sZGVyX3BhdGgpLCAnaW5wdXQgZm9sZGVyIHBhdGggaXMgbm90IGNvcnJlY3Q6ICVzJyAlIGZvbGRlcl9wYXRoCiAgICBpZiBub3QgaXNfcGF0aF9leGlzdHMoZm9sZGVyX3BhdGgpOiAKICAgICAgICBwcmludCgndGhlIGlucHV0IGZvbGRlciBkb2VzIG5vdCBleGlzdFxuJykKICAgICAgICByZXR1cm4gW10sIDAKICAgIGlmIGRlYnVnOgogICAgICAgIGFzc2VydCBpc2xvZ2ljYWwocmVjdXJzaXZlKSwgJ3JlY3Vyc2l2ZSBzaG91bGQgYmUgYSBsb2dpY2FsIHZhcmlhYmxlOiB7fScuZm9ybWF0KHJlY3Vyc2l2ZSkKICAgICAgICBhc3NlcnQgZGVwdGggaXMgTm9uZSBvciAoaXNpbnRlZ2VyKGRlcHRoKSBhbmQgZGVwdGggPj0gMSksICdpbnB1dCBkZXB0aCBpcyBub3QgY29ycmVjdCB7fScuZm9ybWF0KGRlcHRoKQogICAgICAgIGFzc2VydCBleHRfZmlsdGVyIGlzIE5vbmUgb3IgKGlzbGlzdChleHRfZmlsdGVyKSBhbmQgYWxsKGlzc3RyaW5nKGV4dF90bXApIGZvciBleHRfdG1wIGluIGV4dF9maWx0ZXIpKSBvciBpc3N0cmluZyhleHRfZmlsdGVyKSwgJ2V4dGVuc2lvbiBmaWx0ZXIgaXMgbm90IGNvcnJlY3QnCiAgICBpZiBpc3N0cmluZyhleHRfZmlsdGVyKTogZXh0X2ZpbHRlciA9IFtleHRfZmlsdGVyXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgdG8gYSBsaXN0CiAgICAjIHp4YwoKICAgIGZ1bGxsaXN0ID0gbGlzdCgpCiAgICBpZiBkZXB0aCBpcyBOb25lOiAgICAgICAgIyBmaW5kIGFsbCBmaWxlcyByZWN1cnNpdmVseQogICAgICAgIHJlY3Vyc2l2ZSA9IFRydWUKICAgICAgICB3aWxkY2FyZF9wcmVmaXggPSAnKionCiAgICAgICAgaWYgZXh0X2ZpbHRlciBpcyBub3QgTm9uZToKICAgICAgICAgICAgZm9yIGV4dF90bXAgaW4gZXh0X2ZpbHRlcjoKICAgICAgICAgICAgICAgICMgd2lsZGNhcmQgPSBvcy5wYXRoLmpvaW4od2lsZGNhcmRfcHJlZml4LCAnKicgKyBzdHJpbmcyZXh0X2ZpbHRlcihleHRfdG1wKSkKICAgICAgICAgICAgICAgIHdpbGRjYXJkID0gb3MucGF0aC5qb2luKHdpbGRjYXJkX3ByZWZpeCwgJyonICsgZXh0X3RtcCkKICAgICAgICAgICAgICAgIGN1cmxpc3QgPSBnbG9iMi5nbG9iKG9zLnBhdGguam9pbihmb2xkZXJfcGF0aCwgd2lsZGNhcmQpKQogICAgICAgICAgICAgICAgaWYgc29ydDogY3VybGlzdCA9IHNvcnRlZChjdXJsaXN0KQogICAgICAgICAgICAgICAgZnVsbGxpc3QgKz0gY3VybGlzdAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHdpbGRjYXJkID0gd2lsZGNhcmRfcHJlZml4CiAgICAgICAgICAgIGN1cmxpc3QgPSBnbG9iMi5nbG9iKG9zLnBhdGguam9pbihmb2xkZXJfcGF0aCwgd2lsZGNhcmQpKQogICAgICAgICAgICBpZiBzb3J0OiBjdXJsaXN0ID0gc29ydGVkKGN1cmxpc3QpCiAgICAgICAgICAgIGZ1bGxsaXN0ICs9IGN1cmxpc3QKICAgIGVsc2U6ICAgICAgICAgICAgICAgICAgICAjIGZpbmQgZmlsZXMgYmFzZWQgb24gZGVwdGggYW5kIHJlY3Vyc2l2ZSBmbGFnCiAgICAgICAgd2lsZGNhcmRfcHJlZml4ID0gJyonCiAgICAgICAgZm9yIGluZGV4IGluIHJhbmdlKGRlcHRoLTEpOiB3aWxkY2FyZF9wcmVmaXggPSBvcy5wYXRoLmpvaW4od2lsZGNhcmRfcHJlZml4LCAnKicpCiAgICAgICAgaWYgZXh0X2ZpbHRlciBpcyBub3QgTm9uZToKICAgICAgICAgICAgZm9yIGV4dF90bXAgaW4gZXh0X2ZpbHRlcjoKICAgICAgICAgICAgICAgICMgd2lsZGNhcmQgPSB3aWxkY2FyZF9wcmVmaXggKyBzdHJpbmcyZXh0X2ZpbHRlcihleHRfdG1wKQogICAgICAgICAgICAgICAgd2lsZGNhcmQgPSB3aWxkY2FyZF9wcmVmaXggKyBleHRfdG1wCiAgICAgICAgICAgICAgICBjdXJsaXN0ID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihmb2xkZXJfcGF0aCwgd2lsZGNhcmQpKQogICAgICAgICAgICAgICAgaWYgc29ydDogY3VybGlzdCA9IHNvcnRlZChjdXJsaXN0KQogICAgICAgICAgICAgICAgZnVsbGxpc3QgKz0gY3VybGlzdAogICAgICAgICAgICAjIHp4YwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHdpbGRjYXJkID0gd2lsZGNhcmRfcHJlZml4CiAgICAgICAgICAgIGN1cmxpc3QgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKGZvbGRlcl9wYXRoLCB3aWxkY2FyZCkpCiAgICAgICAgICAgICMgcHJpbnQoY3VybGlzdCkKICAgICAgICAgICAgaWYgc29ydDogY3VybGlzdCA9IHNvcnRlZChjdXJsaXN0KQogICAgICAgICAgICBmdWxsbGlzdCArPSBjdXJsaXN0CiAgICAgICAgaWYgcmVjdXJzaXZlIGFuZCBkZXB0aCA+IDE6CiAgICAgICAgICAgIG5ld2xpc3QsIF8gPSBsb2FkX2xpc3RfZnJvbV9mb2xkZXIoZm9sZGVyX3BhdGg9Zm9sZGVyX3BhdGgsIGV4dF9maWx0ZXI9ZXh0X2ZpbHRlciwgZGVwdGg9ZGVwdGgtMSwgcmVjdXJzaXZlPVRydWUpCiAgICAgICAgICAgIGZ1bGxsaXN0ICs9IG5ld2xpc3QKCiAgICBmdWxsbGlzdCA9IFtvcy5wYXRoLm5vcm1wYXRoKHBhdGhfdG1wKSBmb3IgcGF0aF90bXAgaW4gZnVsbGxpc3RdCiAgICBudW1fZWxlbSA9IGxlbihmdWxsbGlzdCkKCiAgICAjIHNhdmUgbGlzdCB0byBhIHBhdGgKICAgIGlmIHNhdmVfcGF0aCBpcyBub3QgTm9uZToKICAgICAgICBzYXZlX3BhdGggPSBzYWZlX3BhdGgoc2F2ZV9wYXRoKQogICAgICAgIGlmIGRlYnVnOiBhc3NlcnQgaXNfcGF0aF9leGlzdHNfb3JfY3JlYXRhYmxlKHNhdmVfcGF0aCksICd0aGUgZmlsZSBjYW5ub3QgYmUgY3JlYXRlZCcKICAgICAgICB3aXRoIG9wZW4oc2F2ZV9wYXRoLCAndycpIGFzIGZpbGU6CiAgICAgICAgICAgIGZvciBpdGVtIGluIGZ1bGxsaXN0OiBmaWxlLndyaXRlKCclc1xuJyAlIGl0ZW0pCiAgICAgICAgZmlsZS5jbG9zZSgpCgogICAgcmV0dXJuIGZ1bGxsaXN0LCBudW1fZWxlbQo8fGZpbV9zdWZmaXh8PgoJJycnCglmaW5kIGNvbW1vbiBpdGVtcyBmcm9tIDIgbGlzdHMsIHRoZSByZXR1cm5lZCBlbGVtZW50cyBhcmUgdW5pcXVlLiByZXBldGl0aXZlIGl0ZW1zIHdpbGwgYmUgaWdub3JlZAoJaWYgdGhlIGNvbW1vbiBpdGVtcyBpbiB0d28gZWxlbWVudHMgYXJlIG5vdCBpbiB0aGUgc2FtZSBvcmRlciwgdGhlIG91dHB1dHMgZm9sbG93cyB0aGUgb3JkZXIgaW4gdGhlIGZpcnN0IGxpc3QKCjx8ZmltX2VuZHw+"]
["8ae2e5a5fa1e20932104c6e977946802cfc0ea0d-1","8ae2e5a5fa1e20932104c6e977946802cfc0ea0d","PHxmaW1fcHJlZml4fD4KZnJvbSBnaW5nZXJpdC5naW5nZXJpdCBpbXBvcnQgR2luZ2VySXQKCnRleHQgPSBpbnB1dCgiRW50ZXIgeW91ciB0ZXh0ICIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmNvcnJlY3RlZF90ZXh0ID0gR2luZ2VySXQoKS5wYXJzZSh0ZXh0KQoKcHJpbnQoY29ycmVjdGVkX3RleHRbInJlc3VsdCJdKQo8fGZpbV9lbmR8Pg=="]
["8ae2e5a5fa1e20932104c6e977946802cfc0ea0d-2","8ae2e5a5fa1e20932104c6e977946802cfc0ea0d","PHxmaW1fcHJlZml4fD4KZnJvbSBnaW5nZXJpdC5naW5nZXJpdCBpbXBvcnQgR2luZ2VySXQKCnRleHQgPSBpbnB1dCgiRW50ZXIgeW91ciB0ZXh0ICIpCgpjb3JyZWN0ZWRfdGV4dCA9IEdpbmdlckl0KCkucGFyc2UodGV4dCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKcHJpbnQoY29ycmVjdGVkX3RleHRbInJlc3VsdCJdKQoKPHxmaW1fZW5kfD4="]
["8ae2e5a5fa1e20932104c6e977946802cfc0ea0d-3","8ae2e5a5fa1e20932104c6e977946802cfc0ea0d","PHxmaW1fcHJlZml4fD4KZnJvbSBnaW5nZXJpdC5naW5nZXJpdCBpbXBvcnQgR2luZ2VySXQKCnRleHQgPSBpbnB1dCgiRW50ZXIgeW91ciB0ZXh0ICIpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmNvcnJlY3RlZF90ZXh0ID0gR2luZ2VySXQoKS5wYXJzZSh0ZXh0KQoKcHJpbnQoY29ycmVjdGVkX3RleHRbInJlc3VsdCJdKQoKPHxmaW1fZW5kfD4="]
["8ae2e5a5fa1e20932104c6e977946802cfc0ea0d-4","8ae2e5a5fa1e20932104c6e977946802cfc0ea0d","PHxmaW1fcHJlZml4fD4KZnJvbSBnaW5nZXJpdC5naW5nZXJpdCBpbXBvcnQgR2luZ2VySXQKCjx8ZmltX2hvbGV8PgpwcmludChjb3JyZWN0ZWRfdGV4dFsicmVzdWx0Il0pCgo8fGZpbV9zdWZmaXh8Pgp0ZXh0ID0gaW5wdXQoIkVudGVyIHlvdXIgdGV4dCAiKQoKY29ycmVjdGVkX3RleHQgPSBHaW5nZXJJdCgpLnBhcnNlKHRleHQpCgo8fGZpbV9lbmR8Pg=="]
["8ae2e5a5fa1e20932104c6e977946802cfc0ea0d-5","8ae2e5a5fa1e20932104c6e977946802cfc0ea0d","PHxmaW1fcHJlZml4fD4KZnJvbSBnaW5nZXJpdC5naW5nZXJpdCBpbXBvcnQgR2luZ2VySXQKCjx8ZmltX2hvbGV8PgpwcmludChjb3JyZWN0ZWRfdGV4dFsicmVzdWx0Il0pCgo8fGZpbV9zdWZmaXh8Pgp0ZXh0ID0gaW5wdXQoIkVudGVyIHlvdXIgdGV4dCAiKQoKY29ycmVjdGVkX3RleHQgPSBHaW5nZXJJdCgpLnBhcnNlKHRleHQpCgo8fGZpbV9lbmR8Pg=="]
["e7032af9dbaa837a65d784ec921c2831c4abf9b6-1","e7032af9dbaa837a65d784ec921c2831c4abf9b6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KCmZyb20gZmxhc2sgaW1wb3J0IGN1cnJlbnRfYXBwIGFzIGNhcHAKZnJvbSBldmUudXRpbHMgaW1wb3J0IGhvbWVfbGluawpmcm9tIC5sYWJlbHMgaW1wb3J0IExBQkVMUwpmcm9tIGZsYXNrIGltcG9ydCBGbGFzawppbXBvcnQgcmUKI0dldCByZXNvdXJjZXMgYnkgYmx1ZXByaW50CmRlZiBnZXRfY3VzdG9tX2Z1bmN0aW9ucyhibHVlcHJpbnQpOgogICAgdGVtcF9hcHAgPSBGbGFzayhfX25hbWVfXykKICAgIHRlbXBfYXBwLnJlZ2lzdGVyX2JsdWVwcmludChibHVlcHJpbnQpCiAgICByZXQgPSB7fQogICAgaW1wb3J0X25hbWUgPSBibHVlcHJpbnQuX19kaWN0X19bJ2ltcG9ydF9uYW1lJ10KICAgIG1vZHVsZV9pbXBvcnRlZCA9IF9faW1wb3J0X18oaW1wb3J0X25hbWUsIGZyb21saXN0PVsnJ10pCiAgICBmdW5jdGlvbnNfbmFtZXMgPSBbeCBmb3IgeCBpbiBkaXIobW9kdWxlX2ltcG9ydGVkKSBpZiByZS5tYXRjaCgiXmFwaSIsIHgpXQogICAgZnVuY3Rpb25zID0ge30KICAgIGZvciBmIGluIGZ1bmN0aW9uc19uYW1lczoKICAgICAgICBmdW5jdGlvbnNbZl09bW9kdWxlX2ltcG9ydGVkLl9fZGljdF9fW2ZdCiAgICBmb3IgcmVzb3VyY2UgaW4gdGVtcF9hcHAudXJsX21hcC5pdGVyX3J1bGVzKCk6CiAgICAgICAgaWYgcmVzb3VyY2UuZW5kcG9pbnQgPT0gJ3N0YXRpYyc6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZW5kcG9pbnQgPSByZXNvdXJjZS5lbmRwb2ludC5zcGxpdCgiLiIpWzFdCiAgICAgICAgZnVuY3Rpb24gPSBmdW5jdGlvbnNbZW5kcG9pbnRdCiAgICAgICAgdHJ5OgogICAgICAgICAgICBmdW5jdGlvbl9kb2MgPSBqc29uLmxvYWRzKHJlLnN1YignW1xuXHRdJywgJycsIGZ1bmN0aW9uLl9fZG9jX18pKSBpZiBmdW5jdGlvbi5fX2RvY19fIGVsc2UgeyJkb2MiOnsidGl0bGUiOiIiLCJib2R5IjoiIn19CiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkludmFsaWQgZG9jc3RyaW5nIGZvciBmdW5jdGlvbnt9Ii5mb3JtYXQoZnVuY3Rpb24pKQogICAgICAgIGVuZHBvaW50ID0gZW5kcG9pbnQucmVwbGFjZSgiYXBpXyIsIiIpCiAgICAgICAgZnVuY19jYWxsID0gc3RyKHJlc291cmNlKS5yZXBsYWNlKCc8JywneycpLnJlcGxhY2UoJz4nLCd9JykKICAgICAgICByZXRbZW5kcG9pbnRdID0ge30KICAgICAgICByZXRbZW5kcG9pbnRdW2Z1bmNfY2FsbF09e30KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJldFtlbmRwb2ludF1bInt9L25vIi5mb3JtYXQoZnVuY19jYWxsKV09e30KICAgICAgICByZXRbZW5kcG9pbnRdWyJkb2MiXSA9IGZ1bmN0aW9uX2RvY1snZG9jJ10KICAgICAgICBmb3IgbWV0aG9kIGluIHJlc291cmNlLm1ldGhvZHMgLSBzZXQobGlzdChbJ09QVElPTlMnLCdIRUFEJ10pKToKICAgICAgICAgICAgaWYgbWV0aG9kIGluIGZ1bmN0aW9uX2RvYzoKPHxmaW1fZW5kfD4="]
["e7032af9dbaa837a65d784ec921c2831c4abf9b6-2","e7032af9dbaa837a65d784ec921c2831c4abf9b6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KCmZyb20gZmxhc2sgaW1wb3J0IGN1cnJlbnRfYXBwIGFzIGNhcHAKZnJvbSBldmUudXRpbHMgaW1wb3J0IGhvbWVfbGluawpmcm9tIC5sYWJlbHMgaW1wb3J0IExBQkVMUwpmcm9tIGZsYXNrIGltcG9ydCBGbGFzawppbXBvcnQgcmUKI0dldCByZXNvdXJjZXMgYnkgYmx1ZXByaW50CmRlZiBnZXRfY3VzdG9tX2Z1bmN0aW9ucyhibHVlcHJpbnQpOgogICAgdGVtcF9hcHAgPSBGbGFzayhfX25hbWVfXykKICAgIHRlbXBfYXBwLnJlZ2lzdGVyX2JsdWVwcmludChibHVlcHJpbnQpCiAgICByZXQgPSB7fQogICAgaW1wb3J0X25hbWUgPSBibHVlcHJpbnQuX19kaWN0X19bJ2ltcG9ydF9uYW1lJ10KICAgIG1vZHVsZV9pbXBvcnRlZCA9IF9faW1wb3J0X18oaW1wb3J0X25hbWUsIGZyb21saXN0PVsnJ10pCiAgICBmdW5jdGlvbnNfbmFtZXMgPSBbeCBmb3IgeCBpbiBkaXIobW9kdWxlX2ltcG9ydGVkKSBpZiByZS5tYXRjaCgiXmFwaSIsIHgpXQogICAgZnVuY3Rpb25zID0ge30KICAgIGZvciBmIGluIGZ1bmN0aW9uc19uYW1lczoKICAgICAgICBmdW5jdGlvbnNbZl09bW9kdWxlX2ltcG9ydGVkLl9fZGljdF9fW2ZdCiAgICBmb3IgcmVzb3VyY2UgaW4gdGVtcF9hcHAudXJsX21hcC5pdGVyX3J1bGVzKCk6CiAgICAgICAgaWYgcmVzb3VyY2UuZW5kcG9pbnQgPT0gJ3N0YXRpYyc6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZW5kcG9pbnQgPSByZXNvdXJjZS5lbmRwb2ludC5zcGxpdCgiLiIpWzFdCiAgICAgICAgZnVuY3Rpb24gPSBmdW5jdGlvbnNbZW5kcG9pbnRdCiAgICAgICAgdHJ5OgogICAgICAgICAgICBmdW5jdGlvbl9kb2MgPSBqc29uLmxvYWRzKHJlLnN1YignW1xuXHRdJywgJycsIGZ1bmN0aW9uLl9fZG9jX18pKSBpZiBmdW5jdGlvbi5fX2RvY19fIGVsc2UgeyJkb2MiOnsidGl0bGUiOiIiLCJib2R5IjoiIn19CiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkludmFsaWQgZG9jc3RyaW5nIGZvciBmdW5jdGlvbnt9Ii5mb3JtYXQoZnVuY3Rpb24pKQogICAgICAgIGVuZHBvaW50ID0gZW5kcG9pbnQucmVwbGFjZSgiYXBpXyIsIiIpCiAgICAgICAgZnVuY19jYWxsID0gc3RyKHJlc291cmNlKS5yZXBsYWNlKCc8JywneycpLnJlcGxhY2UoJz4nLCd9JykKICAgICAgICByZXRbZW5kcG9pbnRdID0ge30KICAgICAgICByZXRbZW5kcG9pbnRdW2Z1bmNfY2FsbF09e30KICAgICAgICByZXRbZW5kcG9pbnRdWyJ7fS9ubyIuZm9ybWF0KGZ1bmNfY2FsbCldPXt9CiAgICAgICAgcmV0W2VuZHBvaW50XVsiZG9jIl0gPSBmdW5jdGlvbl9kb2NbJ2RvYyddCiAgICAgICAgZm9yIG1ldGhvZCBpbiByZXNvdXJjZS5tZXRob2RzIC0gc2V0KGxpc3QoWydPUFRJT05TJywnSEVBRCddKSk6CiAgICAgICAgICAgIGlmIG1ldGhvZCBpbiBmdW5jdGlvbl9kb2M6CiAgICAgICAgICAgICAgICBwYXJhbXMgPSBmdW5jdGlvbl9kb2NbbWV0aG9kXVsicGFyYW1zIl0gaWYgInBhcmFtcyIgaW4gZnVuY3Rpb25fZG9jW21ldGhvZF0gZWxzZSBbXQogICAgICAgICAgICAgICAgbGFiZWwgPSBmdW5jdGlvbl9kb2NbbWV0aG9kXVsibGFiZWwiXSBpZiAibGFiZWwiIGluIGZ1bmN0aW9uX2RvY1ttZXRob2RdIGVsc2UgZ2V0X2N1c3RvbV9sYWJlbHMoZW5kcG9pbnQsIG1ldGhvZCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHBhcmFtcyA9IFtdCiAgICAgICAgICAgICAgICBsYWJlbCA9IGdldF9jdXN0b21fbGFiZWxzKGVuZHBvaW50LCBtZXRob2QpCiAgICAgICAgICAgIGlmIG5vdCBwYXJhbXM6CiAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnQgaW4gcmVzb3VyY2UuYXJndW1lbnRzOgogICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoeyduYW1lJzphcmd1bWVudCwgJ3R5cGUnOidzdHJpbmcnLCAncmVxdWlyZWQnOiBUcnVlfSkKICAgICAgICAgICAgcmV0W2VuZHBvaW50XVtmdW5jX2NhbGxdW21ldGhvZF0gPSB7CiAgICAgICAgICAgICAgICAnbGFiZWwnOiBsYWJlbCwKICAgICAgICAgICAgICAgICdwYXJhbXMnOiBwYXJhbXMsCiAgICAgICAgICAgIH0KCiAgICByZXR1cm4gcmV0CgpkZWYgZ2V0X2NmZyhibHVlcHJpbnRzKToKICAgIGNmZyA9IHt9CiAgICBwcm90b2NvbCA9IGNhcHAuY29uZmlnWydQUkVGRVJSRURfVVJMX1NDSEVNRSddCiAgICBob21lID0gaG9tZV9saW5rKCkKICAgIGNmZ1snYmFzZSddID0gJ3t9Oi8ve30nLmZvcm1hdChwcm90b2NvbCwgaG9tZVsnaHJlZiddKQogICAgY2ZnWydkb21haW5zJ10gPSB7fQogICAgY2ZnWydzZXJ2ZXJfbmFtZSddID0gY2FwcC5jb25maWdbJ1NFUlZFUl9OQU1FJ10KICAgIGNmZ1snYXBpX25hbWUnXSA9IGNhcHAuY29uZmlnLmdldCgnQVBJX05BTUUnLCAnQVBJJykKICAgIGZvciBkb21haW4gaW4gY2FwcC5jb25maWdbJ0RPTUFJTiddLmtleXMoKToKICAgICAgICAjIGVtcG93ZXJpbmcgZG9jCiAgICAgICAgIyBhZGRlZCBzaG93X29uX2RvYyBwcm9wZXJ0eSB3aGVyZSB0aGVyZSBhcmVuJ3QgYW55IGl0ZW1fbWV0aG9kcyBub3IgcmVzb3VyY2VfbWV0aG9kcwogICAgICAgIGlmIGNhcHAuY29uZmlnWydET01BSU4nXVtkb21haW5dWydpdGVtX21ldGhvZHMnXSBvciBjYXBwLmNvbmZpZ1snRE9NQUlOJ11bZG9tYWluXVsncmVzb3VyY2VfbWV0aG9kcyddIG9yICdzaG93X29uX2RvYycgaW4gY2FwcC5jb25maWdbJ0RPTUFJTiddW2RvbWFpbl06CiAgICAgICAgICAgIGNmZ1snZG9tYWlucyddW2RvbWFpbl0gPSB7fQogICAgICAgICAgICBjZmdbJ2RvbWFpbnMnXVtkb21haW5dID0gcGF0aHMoZG9tYWluKQogICAgICAgICAgICBpZiAnZG9jJyBpbiBjYXBwLmNvbmZpZ1snRE9NQUlOJ11bZG9tYWluXToKICAgICAgICAgICAgICAgIGNmZ1snZG9tYWlucyddW2RvbWFpbl1bJ2RvYyddID0gY2FwcC5jb25maWdbJ0RPTUFJTiddW2RvbWFpbl1bJ2RvYyddCiAgICBmb3IgYiBpbiBibHVlcHJpbnRzOgogICAgICAgIHJlc291cmNlcyA9IGdldF9jdXN0b21fZnVuY3Rpb25zKGIpCiAgICAgICAgZm9yIGRvbWFpbiBpbiByZXNvdXJjZXM6CiAgICAgICAgICAgIGNmZ1snZG9tYWlucyddW2RvbWFpbl0gPSByZXNvdXJjZXNbZG9tYWluXQogICAgcmV0dXJuIGNmZwoKCmRlZiBpZGVudGlmaWVyKGRvbWFpbik6CiAgICBuYW1lID0gY2FwcC5jb25maWdbJ0RPTUFJTiddW2RvbWFpbl1bJ2l0ZW1fbG9va3VwX2ZpZWxkJ10KICAgIHJldCA9IHsKICAgICAgICAnbmFtZSc6IG5hbWUsCiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJywKICAgICAgICAncmVxdWlyZWQnOiBUcnVlLAogICAgfQogICAgcmV0dXJuIHJldAoKCmRlZiBzY2hlbWEoZG9tYWluLCBmaWVsZD1Ob25lKToKICAgIHJldCA9IFtdCiAgICBpZiBmaWVsZCBpcyBub3QgTm9uZToKICAgICAgICBwYXJhbXMgPSB7ZmllbGQ6IGNhcHAuY29uZmlnWydET01BSU4nXVtkb21haW5dWydzY2hlbWEnXVtmaWVsZF19CiAgICBlbHNlOgogICAgICAgIHBhcmFtcyA9IGNhcHAuY29uZmlnWydET01BSU4nXVtkb21haW5dWydzY2hlbWEnXQogICAgZm9yIGZpZWxkLCBhdHRycyBpbiBwYXJhbXMuaXRlbXMoKToKICAgICAgICB0ZW1wbGF0ZSA9IHsKICAgICAgICAgICAgJ25hbWUnOiBmaWVsZCwKICAgICAgICAgICAgJ3R5cGUnOiAnTm9uZScsCiAgICAgICAgICAgICdyZXF1aXJlZCc6IEZhbHNlLAogICAgICAgIH0KICAgICAgICB0ZW1wbGF0ZS51cGRhdGUoYXR0cnMpCiAgICAgICAgcmV0LmFwcGVuZCh0ZW1wbGF0ZSkKICAgIHJldHVybiByZXQKCgpkZWYgcGF0aHMoZG9tYWluKToKICAgIHJldCA9IHt9CiAgICBwYXRoID0gJy97fScuZm9ybWF0KGRvbWFpbikKICAgIHBhdGh0eXBlID0gJ3Jlc291cmNlJwogICAgcmV0W3BhdGhdID0gbWV0aG9kcyhkb21haW4sIHBhdGh0eXBlKQoKICAgIHByaW1hcnkgPSBpZGVudGlmaWVyKGRvbWFpbikKICAgIHBhdGggPSAnL3t9L3t9Jy5mb3JtYXQoZG9tYWluLCBwYXRocGFyYW0ocHJpbWFyeVsnbmFtZSddKSkKICAgIHBhdGh0eXBlID0gJ2l0ZW0nCiAgICByZXRbcGF0aF0gPSBtZXRob2RzKGRvbWFpbiwgcGF0aHR5cGUpCgogICAgYWx0ID0gY2FwcC5jb25maWdbJ0RPTUFJTiddW2RvbWFpbl0uZ2V0KCdhZGRpdGlvbmFsX2xvb2t1cCcsIE5vbmUpCiAgICBpZiBhbHQgaXMgbm90IE5vbmU6CiAgICAgICAgcGF0aCA9ICcve30ve30nLmZvcm1hdChkb21haW4sIHBhdGhwYXJhbShhbHRbJ2ZpZWxkJ10pKQogICAgICAgIHBhdGh0eXBlID0gJ2FkZGl0aW9uYWxfbG9va3VwJwogICAgICAgIHJldFtwYXRoXSA9IG1ldGhvZHMoZG9tYWluLCBwYXRodHlwZSwgYWx0WydmaWVsZCddKQogICAgcmV0dXJuIHJldAoKCmRlZiBtZXRob2RzKGRvbWFpbiwgcGF0aHR5cGUsIHBhcmFtPU5vbmUpOgogICAgcmV0ID0ge30KICAgIGlmIHBhdGh0eXBlID09ICdhZGRpdGlvbmFsX2xvb2t1cCc6CiAgICAgICAgbWV0aG9kID0gJ0dFVCcKICAgICAgICByZXRbbWV0aG9kXSA9IHt9CiAgICAgICAgcmV0W21ldGhvZF1bJ2xhYmVsJ10gPSBnZXRfbGFiZWwoZG9tYWluLCBwYXRodHlwZSwgbWV0aG9kKQogICAgICAgIHJldFttZXRob2RdWydwYXJhbXMnXSA9IHNjaGVtYShkb21haW4sIHBhcmFtKQogICAgZWxzZToKICAgICAgICBrZXkgPSAne31fbWV0aG9kcycuZm9ybWF0KHBhdGh0eXBlKQogICAgICAgIG1ldGhvZHMgPSBjYXBwLmNvbmZpZ1snRE9NQUlOJ11bZG9tYWluXVtrZXldCiAgICAgICAgZm9yIG1ldGhvZCBpbiBtZXRob2RzOgogICAgICAgICAgICByZXRbbWV0aG9kXSA9IHt9CiAgICAgICAgICAgIHJldFttZXRob2RdWydsYWJlbCddID0gZ2V0X2xhYmVsKGRvbWFpbiwgcGF0aHR5cGUsIG1ldGhvZCkKICAgICAgICAgICAgcmV0W21ldGhvZF1bJ3BhcmFtcyddID0gW10KICAgICAgICAgICAgaWYgbWV0aG9kID09ICdQT1NUJzoKICAgICAgICAgICAgICAgIHJldFttZXRob2RdWydwYXJhbXMnXS5leHRlbmQoc2NoZW1hKGRvbWFpbikpCiAgICAgICAgICAgIGVsaWYgbWV0aG9kID09ICdQQVRDSCc6CiAgICAgICAgICAgICAgICByZXRbbWV0aG9kXVsncGFyYW1zJ10uZXh0ZW5kKHNjaGVtYShkb21haW4pKQogICAgICAgICAgICAgICAgcmV0W21ldGhvZF1bJ3BhcmFtcyddLmFwcGVuZChpZGVudGlmaWVyKGRvbWFpbikpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByZXRbbWV0aG9kXVsncGFyYW1zJ10uYXBwZW5kKGlkZW50aWZpZXIoZG9tYWluKSkKICAgIHJldHVybiByZXQKCgpkZWYgcGF0aHBhcmFtKHBhcmFtKToKICAgIHJldHVybiAne3t7fX19Jy5mb3JtYXQocGFyYW0pCgoKZGVmIGdldF9jdXN0b21fbGFiZWxzKG5hbWUsIG1ldGhvZCk6CiAgICB2ZXJiID0gTEFCRUxTW21ldGhvZF0KICAgIHJldHVybiAne30ge30nLmZvcm1hdCh2ZXJiLCBuYW1lKQoKZGVmIGdldF9sYWJlbChkb21haW4sIHBhdGh0eXBlLCBtZXRob2QpOgogICAgdmVyYiA9IExBQkVMU1ttZXRob2RdCiAgICBpZiBtZXRob2QgPT0gJ1BPU1QnIG9yIHBhdGh0eXBlICE9ICdyZXNvdXJjZSc6CiAgICAgICAgbm91biA9IGNhcHAuY29uZmlnWydET01BSU4nXVtkb21haW5dWydpdGVtX3RpdGxlJ10KPHxmaW1faG9sZXw+CiAgICBlbHNlOgogICAgICAgIG5vdW4gPSBkb21haW4KICAgICAgICBhcnRpY2xlID0gJ2FsbCcKICAgIHJldHVybiAne30ge30ge30nLmZvcm1hdCh2ZXJiLCBhcnRpY2xlLCBub3VuKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGFydGljbGUgPSAnYScKPHxmaW1fZW5kfD4="]
["dae6a3871b26351cedaab44872be8e693963461d-1","dae6a3871b26351cedaab44872be8e693963461d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCmZyb20gcHltb25nbyBpbXBvcnQgKgoKY2xpZW50ID0gTW9uZ29DbGllbnQoIm1vbmdvZGIrc3J2Oi8vU2FzaG86Umlrb3NoZXQxMjMzMjFAYWJpbGl0eS5oc3JwOS5tb25nb2RiLm5ldC9BYmlsaXR5P3JldHJ5V3JpdGVzPXRydWUmdz1tYWpvcml0eSIpCmRiID0gY2xpZW50WyJkYXRhIl0KYWRzID0gZGJbInVzZXJzIl0KCmRlZiBjaGVja19yZXEoKToKICAgIFVSTCA9ICJodHRwOi8vMTI3LjAuMC4xOjUwMDAvdGFza3MvZ2V0IgogICAgUEFSQU1TID0geyJ0aXRsZSI6ICJ0ZXN0IiwgImRlc2NyaXB0aW9uIjogInRlc3QiLCAidWlkIjogIjEiLCAibG9jYXRpb24iOiAidGVzdCJ9CgogICAgciA9IHJlcXVlc3RzLmdldCh1cmwgPSBVUkwsIHBhcmFtcyA9IFBBUkFNUykKCiAgICBkYXRhID0gci5qc29uKCkKCiAgICBwcmludChkYXRhKQoKZGVmIGNhc2NhZGVfaW5zZXJ0KCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGFkcy51cGRhdGVfbWFueSh7fSwgeyIkc2V0IjogeyJwb2ludHMiOiAwfX0pCjx8ZmltX2VuZHw+"]
["dae6a3871b26351cedaab44872be8e693963461d-2","dae6a3871b26351cedaab44872be8e693963461d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCmZyb20gcHltb25nbyBpbXBvcnQgKgoKPHxmaW1faG9sZXw+CmRlZiBjaGVja19yZXEoKToKICAgIFVSTCA9ICJodHRwOi8vMTI3LjAuMC4xOjUwMDAvdGFza3MvZ2V0IgogICAgUEFSQU1TID0geyJ0aXRsZSI6ICJ0ZXN0IiwgImRlc2NyaXB0aW9uIjogInRlc3QiLCAidWlkIjogIjEiLCAibG9jYXRpb24iOiAidGVzdCJ9CgogICAgciA9IHJlcXVlc3RzLmdldCh1cmwgPSBVUkwsIHBhcmFtcyA9IFBBUkFNUykKCiAgICBkYXRhID0gci5qc29uKCkKCiAgICBwcmludChkYXRhKQoKZGVmIGNhc2NhZGVfaW5zZXJ0KCk6CiAgICBhZHMudXBkYXRlX21hbnkoe30sIHsiJHNldCI6IHsicG9pbnRzIjogMH19KQo8fGZpbV9zdWZmaXh8PgpjbGllbnQgPSBNb25nb0NsaWVudCgibW9uZ29kYitzcnY6Ly9TYXNobzpSaWtvc2hldDEyMzMyMUBhYmlsaXR5LmhzcnA5Lm1vbmdvZGIubmV0L0FiaWxpdHk/cmV0cnlXcml0ZXM9dHJ1ZSZ3PW1ham9yaXR5IikKZGIgPSBjbGllbnRbImRhdGEiXQphZHMgPSBkYlsidXNlcnMiXQoKPHxmaW1fZW5kfD4="]
["dae6a3871b26351cedaab44872be8e693963461d-3","dae6a3871b26351cedaab44872be8e693963461d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCjx8ZmltX2hvbGV8PgphZHMgPSBkYlsidXNlcnMiXQoKZGVmIGNoZWNrX3JlcSgpOgogICAgVVJMID0gImh0dHA6Ly8xMjcuMC4wLjE6NTAwMC90YXNrcy9nZXQiCiAgICBQQVJBTVMgPSB7InRpdGxlIjogInRlc3QiLCAiZGVzY3JpcHRpb24iOiAidGVzdCIsICJ1aWQiOiAiMSIsICJsb2NhdGlvbiI6ICJ0ZXN0In0KCiAgICByID0gcmVxdWVzdHMuZ2V0KHVybCA9IFVSTCwgcGFyYW1zID0gUEFSQU1TKQoKICAgIGRhdGEgPSByLmpzb24oKQoKICAgIHByaW50KGRhdGEpCgpkZWYgY2FzY2FkZV9pbnNlcnQoKToKICAgIGFkcy51cGRhdGVfbWFueSh7fSwgeyIkc2V0IjogeyJwb2ludHMiOiAwfX0pCjx8ZmltX3N1ZmZpeHw+CmZyb20gcHltb25nbyBpbXBvcnQgKgoKY2xpZW50ID0gTW9uZ29DbGllbnQoIm1vbmdvZGIrc3J2Oi8vU2FzaG86Umlrb3NoZXQxMjMzMjFAYWJpbGl0eS5oc3JwOS5tb25nb2RiLm5ldC9BYmlsaXR5P3JldHJ5V3JpdGVzPXRydWUmdz1tYWpvcml0eSIpCmRiID0gY2xpZW50WyJkYXRhIl0KPHxmaW1fZW5kfD4="]
["dae6a3871b26351cedaab44872be8e693963461d-4","dae6a3871b26351cedaab44872be8e693963461d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCmZyb20gcHltb25nbyBpbXBvcnQgKgoKY2xpZW50ID0gTW9uZ29DbGllbnQoIm1vbmdvZGIrc3J2Oi8vU2FzaG86Umlrb3NoZXQxMjMzMjFAYWJpbGl0eS5oc3JwOS5tb25nb2RiLm5ldC9BYmlsaXR5P3JldHJ5V3JpdGVzPXRydWUmdz1tYWpvcml0eSIpCmRiID0gY2xpZW50WyJkYXRhIl0KYWRzID0gZGJbInVzZXJzIl0KCmRlZiBjaGVja19yZXEoKToKICAgIFVSTCA9ICJodHRwOi8vMTI3LjAuMC4xOjUwMDAvdGFza3MvZ2V0IgogICAgUEFSQU1TID0geyJ0aXRsZSI6ICJ0ZXN0IiwgImRlc2NyaXB0aW9uIjogInRlc3QiLCAidWlkIjogIjEiLCAibG9jYXRpb24iOiAidGVzdCJ9Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICByID0gcmVxdWVzdHMuZ2V0KHVybCA9IFVSTCwgcGFyYW1zID0gUEFSQU1TKQoKICAgIGRhdGEgPSByLmpzb24oKQo8fGZpbV9lbmR8Pg=="]
["8232c57a56a54776af50abfc1924bfd68a1390cb-1","8232c57a56a54776af50abfc1924bfd68a1390cb","PHxmaW1fcHJlZml4fD4KZnJvbSBmdW5jdGlvbnMgaW1wb3J0ICoKCiMgNi4xLkEKY2FkZW5hID0gImhlbGxvIgpwcmludChnZXRfZmlydHNfdHdvX2NoYXJhY3RlcnMoY2FkZW5hKSkKCiMgNi4xLkIKY2FkZW5hID0gImhlbGxvIgpwcmludChnZXRfbGFzdF90aHJlZV9jaGFyYWN0ZXJzKGNhZGVuYSkpCgojIDYuMS5DCmNhZGVuYSA9ICJyZWN0YSIKcHJpbnQocHJpbnRfZXZlcnlfdHdvKGNhZGVuYSkpCgojIDYuMS5ECmNhZGVuYSA9ICJyZWN0YSIKcHJpbnQocmV2ZXJzZShjYWRlbmEpKQoKIyA2LjEuQwpjYWRlbmEgPSAicmVjdGEiCnByaW50KHJldmVyc2VfYW5kX2NvbmNhY3QoY2FkZW5hKSkKCiMgNi4yLkEKY2hhciA9ICIsIgpzdHJpbmcgPSAic2VwYXJhciIKcHJpbnQoc3RyX2luc2VydF9jaGFyYWN0ZXIoc3RyaW5nLCBjaGFyKSkKCiMgNi4yLkIKY2hhciA9ICI+IgpzdHJpbmcgPSAibWkgYXJjaGl2byBkZSB0ZXh0by50eHQiCnByaW50KHN0cl9kZWxldGVfc3BhY2luZyhzdHJpbmcsIGNoYXIpKQoKIyA2LjIuQwpjaGFyID0gIngiCnN0cmluZyA9ICJjb25zdHJhc2VuYTogMTIzNCIKcHJpbnQoc3RyX2RlbGV0ZV9udW1iZXJzKHN0cmluZywgY2hhcikpCgojIDYuMi5ECmNoYXIgPSAiLiIKc3RyaW5nID0gIjI1NTI1NTI1NTAiCnByaW50KHN0cl9pbnNlcnRfY2hhcmFjdGVyX2V2ZXJ5X3RocmVlKHN0cmluZywgY2hhcikpCgoKIyA2LjMKPHxmaW1faG9sZXw+CiMgNi4zCmNoYXIgPSAieCIKc3RyaW5nID0gImNvbnN0cmFzZW5hOiAxMjM0IgpwcmludChzdHJfZGVsZXRlX251bWJlcnMoc3RyaW5nLCBjaGFyKSkKCiMgNi4zCmNoYXIgPSAiLiIKc3RyaW5nID0gIjI1NTI1NTI1NTAiCnByaW50KHN0cl9pbnNlcnRfY2hhcmFjdGVyX2V2ZXJ5X3RocmVlKHN0cmluZywgY2hhcikpCjx8ZmltX3N1ZmZpeHw+CmNoYXIgPSAiPiIKc3RyaW5nID0gIm1pIGFyY2hpdm8gZGUgdGV4dG8udHh0IgpwcmludChzdHJfZGVsZXRlX3NwYWNpbmcoc3RyaW5nLCBjaGFyKSkKCjx8ZmltX2VuZHw+"]
["8232c57a56a54776af50abfc1924bfd68a1390cb-2","8232c57a56a54776af50abfc1924bfd68a1390cb","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgpwcmludChnZXRfZmlydHNfdHdvX2NoYXJhY3RlcnMoY2FkZW5hKSkKCiMgNi4xLkIKY2FkZW5hID0gImhlbGxvIgpwcmludChnZXRfbGFzdF90aHJlZV9jaGFyYWN0ZXJzKGNhZGVuYSkpCgojIDYuMS5DCmNhZGVuYSA9ICJyZWN0YSIKcHJpbnQocHJpbnRfZXZlcnlfdHdvKGNhZGVuYSkpCgojIDYuMS5ECmNhZGVuYSA9ICJyZWN0YSIKcHJpbnQocmV2ZXJzZShjYWRlbmEpKQoKIyA2LjEuQwpjYWRlbmEgPSAicmVjdGEiCnByaW50KHJldmVyc2VfYW5kX2NvbmNhY3QoY2FkZW5hKSkKCiMgNi4yLkEKY2hhciA9ICIsIgpzdHJpbmcgPSAic2VwYXJhciIKcHJpbnQoc3RyX2luc2VydF9jaGFyYWN0ZXIoc3RyaW5nLCBjaGFyKSkKCiMgNi4yLkIKY2hhciA9ICI+IgpzdHJpbmcgPSAibWkgYXJjaGl2byBkZSB0ZXh0by50eHQiCnByaW50KHN0cl9kZWxldGVfc3BhY2luZyhzdHJpbmcsIGNoYXIpKQoKIyA2LjIuQwpjaGFyID0gIngiCnN0cmluZyA9ICJjb25zdHJhc2VuYTogMTIzNCIKcHJpbnQoc3RyX2RlbGV0ZV9udW1iZXJzKHN0cmluZywgY2hhcikpCgojIDYuMi5ECmNoYXIgPSAiLiIKc3RyaW5nID0gIjI1NTI1NTI1NTAiCnByaW50KHN0cl9pbnNlcnRfY2hhcmFjdGVyX2V2ZXJ5X3RocmVlKHN0cmluZywgY2hhcikpCgoKIyA2LjMKY2hhciA9ICI+IgpzdHJpbmcgPSAibWkgYXJjaGl2byBkZSB0ZXh0by50eHQiCnByaW50KHN0cl9kZWxldGVfc3BhY2luZyhzdHJpbmcsIGNoYXIpKQoKIyA2LjMKY2hhciA9ICJ4IgpzdHJpbmcgPSAiY29uc3RyYXNlbmE6IDEyMzQiCnByaW50KHN0cl9kZWxldGVfbnVtYmVycyhzdHJpbmcsIGNoYXIpKQoKIyA2LjMKY2hhciA9ICIuIgpzdHJpbmcgPSAiMjU1MjU1MjU1MCIKcHJpbnQoc3RyX2luc2VydF9jaGFyYWN0ZXJfZXZlcnlfdGhyZWUoc3RyaW5nLCBjaGFyKSkKPHxmaW1fc3VmZml4fD4KZnJvbSBmdW5jdGlvbnMgaW1wb3J0ICoKCiMgNi4xLkEKY2FkZW5hID0gImhlbGxvIgo8fGZpbV9lbmR8Pg=="]
["8232c57a56a54776af50abfc1924bfd68a1390cb-3","8232c57a56a54776af50abfc1924bfd68a1390cb","PHxmaW1fcHJlZml4fD4KZnJvbSBmdW5jdGlvbnMgaW1wb3J0ICoKCiMgNi4xLkEKY2FkZW5hID0gImhlbGxvIgpwcmludChnZXRfZmlydHNfdHdvX2NoYXJhY3RlcnMoY2FkZW5hKSkKCiMgNi4xLkIKY2FkZW5hID0gImhlbGxvIgpwcmludChnZXRfbGFzdF90aHJlZV9jaGFyYWN0ZXJzKGNhZGVuYSkpCgojIDYuMS5DCmNhZGVuYSA9ICJyZWN0YSIKcHJpbnQocHJpbnRfZXZlcnlfdHdvKGNhZGVuYSkpCgojIDYuMS5ECmNhZGVuYSA9ICJyZWN0YSIKcHJpbnQocmV2ZXJzZShjYWRlbmEpKQoKIyA2LjEuQwpjYWRlbmEgPSAicmVjdGEiCnByaW50KHJldmVyc2VfYW5kX2NvbmNhY3QoY2FkZW5hKSkKCiMgNi4yLkEKY2hhciA9ICIsIgpzdHJpbmcgPSAic2VwYXJhciIKcHJpbnQoc3RyX2luc2VydF9jaGFyYWN0ZXIoc3RyaW5nLCBjaGFyKSkKCiMgNi4yLkIKY2hhciA9ICI+IgpzdHJpbmcgPSAibWkgYXJjaGl2byBkZSB0ZXh0by50eHQiCnByaW50KHN0cl9kZWxldGVfc3BhY2luZyhzdHJpbmcsIGNoYXIpKQoKIyA2LjIuQwpjaGFyID0gIngiCnN0cmluZyA9ICJjb25zdHJhc2VuYTogMTIzNCIKcHJpbnQoc3RyX2RlbGV0ZV9udW1iZXJzKHN0cmluZywgY2hhcikpCgojIDYuMi5ECmNoYXIgPSAiLiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpzdHJpbmcgPSAiMjU1MjU1MjU1MCIKcHJpbnQoc3RyX2luc2VydF9jaGFyYWN0ZXJfZXZlcnlfdGhyZWUoc3RyaW5nLCBjaGFyKSkKCgo8fGZpbV9lbmR8Pg=="]
["8232c57a56a54776af50abfc1924bfd68a1390cb-4","8232c57a56a54776af50abfc1924bfd68a1390cb","PHxmaW1fcHJlZml4fD4KZnJvbSBmdW5jdGlvbnMgaW1wb3J0ICoKCiMgNi4xLkEKY2FkZW5hID0gImhlbGxvIgpwcmludChnZXRfZmlydHNfdHdvX2NoYXJhY3RlcnMoY2FkZW5hKSkKCiMgNi4xLkIKY2FkZW5hID0gImhlbGxvIgo8fGZpbV9ob2xlfD4KcHJpbnQocHJpbnRfZXZlcnlfdHdvKGNhZGVuYSkpCgojIDYuMS5ECmNhZGVuYSA9ICJyZWN0YSIKcHJpbnQocmV2ZXJzZShjYWRlbmEpKQoKIyA2LjEuQwpjYWRlbmEgPSAicmVjdGEiCnByaW50KHJldmVyc2VfYW5kX2NvbmNhY3QoY2FkZW5hKSkKCiMgNi4yLkEKY2hhciA9ICIsIgpzdHJpbmcgPSAic2VwYXJhciIKcHJpbnQoc3RyX2luc2VydF9jaGFyYWN0ZXIoc3RyaW5nLCBjaGFyKSkKCiMgNi4yLkIKY2hhciA9ICI+IgpzdHJpbmcgPSAibWkgYXJjaGl2byBkZSB0ZXh0by50eHQiCnByaW50KHN0cl9kZWxldGVfc3BhY2luZyhzdHJpbmcsIGNoYXIpKQoKIyA2LjIuQwpjaGFyID0gIngiCnN0cmluZyA9ICJjb25zdHJhc2VuYTogMTIzNCIKcHJpbnQoc3RyX2RlbGV0ZV9udW1iZXJzKHN0cmluZywgY2hhcikpCgojIDYuMi5ECmNoYXIgPSAiLiIKc3RyaW5nID0gIjI1NTI1NTI1NTAiCnByaW50KHN0cl9pbnNlcnRfY2hhcmFjdGVyX2V2ZXJ5X3RocmVlKHN0cmluZywgY2hhcikpCgoKIyA2LjMKY2hhciA9ICI+IgpzdHJpbmcgPSAibWkgYXJjaGl2byBkZSB0ZXh0by50eHQiCnByaW50KHN0cl9kZWxldGVfc3BhY2luZyhzdHJpbmcsIGNoYXIpKQoKIyA2LjMKY2hhciA9ICJ4IgpzdHJpbmcgPSAiY29uc3RyYXNlbmE6IDEyMzQiCnByaW50KHN0cl9kZWxldGVfbnVtYmVycyhzdHJpbmcsIGNoYXIpKQoKIyA2LjMKY2hhciA9ICIuIgpzdHJpbmcgPSAiMjU1MjU1MjU1MCIKcHJpbnQoc3RyX2luc2VydF9jaGFyYWN0ZXJfZXZlcnlfdGhyZWUoc3RyaW5nLCBjaGFyKSkKPHxmaW1fc3VmZml4fD4KcHJpbnQoZ2V0X2xhc3RfdGhyZWVfY2hhcmFjdGVycyhjYWRlbmEpKQoKIyA2LjEuQwpjYWRlbmEgPSAicmVjdGEiCjx8ZmltX2VuZHw+"]
["c114b80977203fe53dd9334c3a6523d48476657a-1","c114b80977203fe53dd9334c3a6523d48476657a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHF1Y2F0X2NpcmN1aXRzIGFzIHFDCmltcG9ydCBrZXJtYW5fY2lyY3VpdHMgYXMga0MKaW1wb3J0IHV0aWxzLG51bXB5CgpkZWYgdHJhbnNtb24oZmx1eGVzKToKICAgIHFfc3BlY3RydW0sa19zcGVjdHJ1bSA9IFtdLFtdCiAgICBxX3RyYW5zbW9uID0gcUMudHJhbnNtb24oKQogICAga190cmFuc21vbiA9IGtDLnRyYW5zbW9uKFs3XSkKCiAgICBmb3IgZmx1eCBpbiBmbHV4ZXM6CiAgICAgICAgSCA9IGtfdHJhbnNtb24uaGFtaWx0b25pYW5fY2hhcmdlZChbZmx1eF0pCiAgICAgICAgZW5lcmd5ID0gbnVtcHkubGluYWxnLmVpZ3ZhbHMoSCkKICAgICAgICBrX3NwZWN0cnVtLmFwcGVuZChtaW4oZW5lcmd5KS5yZWFsKQoKICAgICAgICBIID0gcV90cmFuc21vbi5oYW1pbHRvbmlhbihMaiA9IHFDLkxqKGZsdXgpLGV4Y2l0YXRpb25zID0gNyx0YXlsb3IgPSA0KQogICAgICAgIHFfc3BlY3RydW0uYXBwZW5kKEguZWlnZW5lbmVyZ2llcygpWzBdKQoKICAgIGVpZ2Vuc3BlY3RydW0gPSB7J3F1Y2F0JzpxX3NwZWN0cnVtLCdrZXJtYW4nOmtfc3BlY3RydW19CiAgICB1dGlscy5wbG90Q29tcGFyZShmbHV4ZXMsZWlnZW5zcGVjdHJ1bSkKICAgIHJldHVybiB0cmFuc21vbgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgppZiBfX25hbWVfXz09J19fbWFpbl9fJzoKICAgIGZsdXhlcyA9IG51bXB5LmxpbnNwYWNlKC0xLDEsMTAwKQogICAgdHJhbnNtb24oZmx1eGVzKQo8fGZpbV9lbmR8Pg=="]
["c114b80977203fe53dd9334c3a6523d48476657a-2","c114b80977203fe53dd9334c3a6523d48476657a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHF1Y2F0X2NpcmN1aXRzIGFzIHFDCmltcG9ydCBrZXJtYW5fY2lyY3VpdHMgYXMga0MKaW1wb3J0IHV0aWxzLG51bXB5CgpkZWYgdHJhbnNtb24oZmx1eGVzKToKICAgIHFfc3BlY3RydW0sa19zcGVjdHJ1bSA9IFtdLFtdCiAgICBxX3RyYW5zbW9uID0gcUMudHJhbnNtb24oKQogICAga190cmFuc21vbiA9IGtDLnRyYW5zbW9uKFs3XSkKCiAgICBmb3IgZmx1eCBpbiBmbHV4ZXM6Cjx8ZmltX2hvbGV8PgogICAgICAgIEggPSBxX3RyYW5zbW9uLmhhbWlsdG9uaWFuKExqID0gcUMuTGooZmx1eCksZXhjaXRhdGlvbnMgPSA3LHRheWxvciA9IDQpCiAgICAgICAgcV9zcGVjdHJ1bS5hcHBlbmQoSC5laWdlbmVuZXJnaWVzKClbMF0pCgogICAgZWlnZW5zcGVjdHJ1bSA9IHsncXVjYXQnOnFfc3BlY3RydW0sJ2tlcm1hbic6a19zcGVjdHJ1bX0KICAgIHV0aWxzLnBsb3RDb21wYXJlKGZsdXhlcyxlaWdlbnNwZWN0cnVtKQogICAgcmV0dXJuIHRyYW5zbW9uCgppZiBfX25hbWVfXz09J19fbWFpbl9fJzoKICAgIGZsdXhlcyA9IG51bXB5LmxpbnNwYWNlKC0xLDEsMTAwKQogICAgdHJhbnNtb24oZmx1eGVzKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIEggPSBrX3RyYW5zbW9uLmhhbWlsdG9uaWFuX2NoYXJnZWQoW2ZsdXhdKQogICAgICAgIGVuZXJneSA9IG51bXB5LmxpbmFsZy5laWd2YWxzKEgpCiAgICAgICAga19zcGVjdHJ1bS5hcHBlbmQobWluKGVuZXJneSkucmVhbCkKCjx8ZmltX2VuZHw+"]
["68bdc5aedce16d9a6604095563b9b783198097c7-1","68bdc5aedce16d9a6604095563b9b783198097c7","PHxmaW1fcHJlZml4fD4KZnJvbSBjb3Vyc2VfYXJyYW5nZW1lbnQubW9kZWxzIGltcG9ydCBTZWxlY3Rpb24KZnJvbSBjb3Vyc2VfYXJyYW5nZW1lbnQubW9kZWxzIGltcG9ydCBDb3Vyc2UKZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRCgpkZWYgY291cnNlX2NhcGFjaXR5KCk6CgogICAgcm9vbV9saXN0XzEgPSBbMSwgMiwgMywgN10KICAgIHJvb21fbGlzdF8yID0gWzIsIDQsIDVdCiAgICByb29tX2xpc3RfMyA9IFszMTUsIDQxNSwgNjE3LCA2MTksIDcyMSwgNzI0LCA4MjEsIDgyNF0KCiAgICAjIGZvciByb29tXzEgaW4gcmFuZ2UoMSwgOCk6CiAgICAjICAgICBmb3Igcm9vbV8zIGluIHJvb21fbGlzdF8xOgogICAgIyAgICAgICAgIHJvb20gPSByb29tXzEgKiAxMDAgKyByb29tXzMKICAgICMgICAgICAgICBpZiByb29tID09IDEwMyBvciByb29tID09IDIwMzoKICAgICMgICAgICAgICAgICAgY29udGludWUKICAgICMgICAgICAgICBzZWxlY3Rpb25fbGlzdCA9IFNlbGVjdGlvbi5vYmplY3RzLmZpbHRlcihRKGNvdXJzZV9idWlsZGluZz0xKSAmIFEoY291cnNlX2NsYXNzcm9vbT1yb29tKSkub3JkZXJfYnkoJ2lkJykKICAgICMgICAgICAgICBmb3Igc2VsZWN0aW9uIGluIHNlbGVjdGlvbl9saXN0OgogICAgIyAgICAgICAgICAgICBzZWxlY3Rpb24uY2FwYWNpdHkgPSBGYWxzZQogICAgIyAgICAgICAgICAgICBwcmludChzZWxlY3Rpb24uc2VsZWN0aW9uKQogICAgIyAgICAgICAgICAgICBzZWxlY3Rpb24uc2F2ZSgpCgogICAgIyBmb3Igcm9vbV8xIGluIHJhbmdlKDEsIDYpOgogICAgIyAgICAgZm9yIHJvb21fMyBpbiByb29tX2xpc3RfMjoKICAgICMgICAgICAgICByb29tID0gcm9vbV8xICogMTAwICsgcm9vbV8zCiAgICAjICAgICAgICAgaWYgcm9vbSA9PSAxMDUgb3Igcm9vbSA9PSAyMDUgb3Igcm9vbSA9PSAzMDU6CiAgICAjICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAjICAgICAgICAgc2VsZWN0aW9uX2xpc3QgPSBTZWxlY3Rpb24ub2JqZWN0cy5maWx0ZXIoUShjb3Vyc2VfYnVpbGRpbmc9MikgJiBRKGNvdXJzZV9jbGFzc3Jvb209cm9vbSkpLm9yZGVyX2J5KCdpZCcpCiAgICAjICAgICAgICAgZm9yIHNlbGVjdGlvbiBpbiBzZWxlY3Rpb25fbGlzdDoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgIyAgICAgICAgICAgICBzZWxlY3Rpb24uY2FwYWNpdHkgPSBGYWxzZQogICAgIyAgICAgICAgICAgICBwcmludChzZWxlY3Rpb24uc2VsZWN0aW9uKQogICAgIyAgICAgICAgICAgICBzZWxlY3Rpb24uc2F2ZSgpCiAgICAjCjx8ZmltX2VuZHw+"]
["68bdc5aedce16d9a6604095563b9b783198097c7-2","68bdc5aedce16d9a6604095563b9b783198097c7","PHxmaW1fcHJlZml4fD4KZnJvbSBjb3Vyc2VfYXJyYW5nZW1lbnQubW9kZWxzIGltcG9ydCBTZWxlY3Rpb24KZnJvbSBjb3Vyc2VfYXJyYW5nZW1lbnQubW9kZWxzIGltcG9ydCBDb3Vyc2UKZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRCgpkZWYgY291cnNlX2NhcGFjaXR5KCk6CgogICAgcm9vbV9saXN0XzEgPSBbMSwgMiwgMywgN10KICAgIHJvb21fbGlzdF8yID0gWzIsIDQsIDVdCiAgICByb29tX2xpc3RfMyA9IFszMTUsIDQxNSwgNjE3LCA2MTksIDcyMSwgNzI0LCA4MjEsIDgyNF0KCiAgICAjIGZvciByb29tXzEgaW4gcmFuZ2UoMSwgOCk6CiAgICAjICAgICBmb3Igcm9vbV8zIGluIHJvb21fbGlzdF8xOgogICAgIyAgICAgICAgIHJvb20gPSByb29tXzEgKiAxMDAgKyByb29tXzMKICAgICMgICAgICAgICBpZiByb29tID09IDEwMyBvciByb29tID09IDIwMzoKICAgICMgICAgICAgICAgICAgY29udGludWUKICAgICMgICAgICAgICBzZWxlY3Rpb25fbGlzdCA9IFNlbGVjdGlvbi5vYmplY3RzLmZpbHRlcihRKGNvdXJzZV9idWlsZGluZz0xKSAmIFEoY291cnNlX2NsYXNzcm9vbT1yb29tKSkub3JkZXJfYnkoJ2lkJykKICAgICMgICAgICAgICBmb3Igc2VsZWN0aW9uIGluIHNlbGVjdGlvbl9saXN0OgogICAgIyAgICAgICAgICAgICBzZWxlY3Rpb24uY2FwYWNpdHkgPSBGYWxzZQogICAgIyAgICAgICAgICAgICBwcmludChzZWxlY3Rpb24uc2VsZWN0aW9uKQogICAgIyAgICAgICAgICAgICBzZWxlY3Rpb24uc2F2ZSgpCgogICAgIyBmb3Igcm9vbV8xIGluIHJhbmdlKDEsIDYpOgogICAgIyAgICAgZm9yIHJvb21fMyBpbiByb29tX2xpc3RfMjoKICAgICMgICAgICAgICByb29tID0gcm9vbV8xICogMTAwICsgcm9vbV8zCiAgICAjICAgICAgICAgaWYgcm9vbSA9PSAxMDUgb3Igcm9vbSA9PSAyMDUgb3Igcm9vbSA9PSAzMDU6CiAgICAjICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAjICAgICAgICAgc2VsZWN0aW9uX2xpc3QgPSBTZWxlY3Rpb24ub2JqZWN0cy5maWx0ZXIoUShjb3Vyc2VfYnVpbGRpbmc9MikgJiBRKGNvdXJzZV9jbGFzc3Jvb209cm9vbSkpLm9yZGVyX2J5KCdpZCcpCiAgICAjICAgICAgICAgZm9yIHNlbGVjdGlvbiBpbiBzZWxlY3Rpb25fbGlzdDoKICAgICMgICAgICAgICAgICAgc2VsZWN0aW9uLmNhcGFjaXR5ID0gRmFsc2UKICAgICMgICAgICAgICAgICAgcHJpbnQoc2VsZWN0aW9uLnNlbGVjdGlvbikKPHxmaW1faG9sZXw+CiAgICAjICAgICBmb3Igc2VsZWN0aW9uIGluIHNlbGVjdGlvbl9saXN0OgogICAgIyAgICAgICAgIHNlbGVjdGlvbi5jYXBhY2l0eSA9IEZhbHNlCiAgICAjICAgICAgICAgcHJpbnQoc2VsZWN0aW9uLnNlbGVjdGlvbikKICAgICMgICAgICAgICBzZWxlY3Rpb24uc2F2ZSgpCgoKICAgICMgc2VsZWN0aW9uX2xpc3QgPSBTZWxlY3Rpb24ub2JqZWN0cy5maWx0ZXIoUShjb3Vyc2VfcGVyaW9kPTEpICYKICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShjb3Vyc2Vfd2Vla2RheT0yKSAmCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEoY291cnNlX3RpbWU9MikgJgogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRKGNvdXJzZV9idWlsZGluZz0xKSAmCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEoaXNfZW1wdHk9RmFsc2UpICYKICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShjYXBhY2l0eT1UcnVlKSkub3JkZXJfYnkoJ3NlbGVjdGlvbicpCiAgICAjIGZvciBzZWxlY3Rpb24gaW4gc2VsZWN0aW9uX2xpc3Q6CiAgICAjICAgICBzZWxlY3Rpb24uaXNfZW1wdHkgPSBUcnVlCiAgICAjICAgICBwcmludChzZWxlY3Rpb24uc2VsZWN0aW9uKQogICAgIyAgICAgc2VsZWN0aW9uLnNhdmUoKQoKICAgICMgc2VsZWN0aW9uX2xpc3QgPSBTZWxlY3Rpb24ub2JqZWN0cy5hbGwoKS5vcmRlcl9ieSgnaWQnKQogICAgIyBmb3Igc2VsZWN0aW9uIGluIHNlbGVjdGlvbl9saXN0OgogICAgIyAgICAgaWYgc2VsZWN0aW9uLmlzX2VtcHR5ID09IEZhbHNlOgogICAgIyAgICAgICAgIHNlbGVjdGlvbi5pc19lbXB0eSA9IFRydWUKICAgICMgICAgICAgICBwcmludChzZWxlY3Rpb24uc2VsZWN0aW9uKQogICAgIyAgICAgICAgIHNlbGVjdGlvbi5zYXZlKCkKICAgICMgY291cnNlX2xpc3QgPSBDb3Vyc2Uub2JqZWN0cy5hbGwoKS5vcmRlcl9ieSgnY291cnNlX2lkJykKICAgICMgZm9yIGNvdXJzZSBpbiBjb3Vyc2VfbGlzdDoKICAgICMgICAgIGlmIGNvdXJzZS5pc19hcnJhbmdlZCA9PSBUcnVlOgogICAgIyAgICAgICAgIGNvdXJzZS5pc19hcnJhbmdlZCA9IEZhbHNlCiAgICAjICAgICAgICAgcHJpbnQoY291cnNlLmNvdXJzZV9uYW1lKQogICAgIyAgICAgICAgIGNvdXJzZS5zYXZlKCkKCjx8ZmltX3N1ZmZpeHw+CiAgICAjICAgICAgICAgICAgIHNlbGVjdGlvbi5zYXZlKCkKICAgICMKICAgICMgZm9yIHJvb20gaW4gcm9vbV9saXN0XzM6CiAgICAjICAgICBzZWxlY3Rpb25fbGlzdCA9IFNlbGVjdGlvbi5vYmplY3RzLmZpbHRlcihRKGNvdXJzZV9idWlsZGluZz0zKSAmIFEoY291cnNlX2NsYXNzcm9vbT1yb29tKSkub3JkZXJfYnkoJ2lkJykKPHxmaW1fZW5kfD4="]
["68bdc5aedce16d9a6604095563b9b783198097c7-3","68bdc5aedce16d9a6604095563b9b783198097c7","PHxmaW1fcHJlZml4fD4KZnJvbSBjb3Vyc2VfYXJyYW5nZW1lbnQubW9kZWxzIGltcG9ydCBTZWxlY3Rpb24KZnJvbSBjb3Vyc2VfYXJyYW5nZW1lbnQubW9kZWxzIGltcG9ydCBDb3Vyc2UKZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRCgpkZWYgY291cnNlX2NhcGFjaXR5KCk6Cjx8ZmltX2hvbGV8PgoKICAgICMgZm9yIHJvb21fMSBpbiByYW5nZSgxLCA4KToKICAgICMgICAgIGZvciByb29tXzMgaW4gcm9vbV9saXN0XzE6CiAgICAjICAgICAgICAgcm9vbSA9IHJvb21fMSAqIDEwMCArIHJvb21fMwogICAgIyAgICAgICAgIGlmIHJvb20gPT0gMTAzIG9yIHJvb20gPT0gMjAzOgogICAgIyAgICAgICAgICAgICBjb250aW51ZQogICAgIyAgICAgICAgIHNlbGVjdGlvbl9saXN0ID0gU2VsZWN0aW9uLm9iamVjdHMuZmlsdGVyKFEoY291cnNlX2J1aWxkaW5nPTEpICYgUShjb3Vyc2VfY2xhc3Nyb29tPXJvb20pKS5vcmRlcl9ieSgnaWQnKQogICAgIyAgICAgICAgIGZvciBzZWxlY3Rpb24gaW4gc2VsZWN0aW9uX2xpc3Q6CiAgICAjICAgICAgICAgICAgIHNlbGVjdGlvbi5jYXBhY2l0eSA9IEZhbHNlCiAgICAjICAgICAgICAgICAgIHByaW50KHNlbGVjdGlvbi5zZWxlY3Rpb24pCiAgICAjICAgICAgICAgICAgIHNlbGVjdGlvbi5zYXZlKCkKCiAgICAjIGZvciByb29tXzEgaW4gcmFuZ2UoMSwgNik6CiAgICAjICAgICBmb3Igcm9vbV8zIGluIHJvb21fbGlzdF8yOgogICAgIyAgICAgICAgIHJvb20gPSByb29tXzEgKiAxMDAgKyByb29tXzMKICAgICMgICAgICAgICBpZiByb29tID09IDEwNSBvciByb29tID09IDIwNSBvciByb29tID09IDMwNToKICAgICMgICAgICAgICAgICAgY29udGludWUKICAgICMgICAgICAgICBzZWxlY3Rpb25fbGlzdCA9IFNlbGVjdGlvbi5vYmplY3RzLmZpbHRlcihRKGNvdXJzZV9idWlsZGluZz0yKSAmIFEoY291cnNlX2NsYXNzcm9vbT1yb29tKSkub3JkZXJfYnkoJ2lkJykKICAgICMgICAgICAgICBmb3Igc2VsZWN0aW9uIGluIHNlbGVjdGlvbl9saXN0OgogICAgIyAgICAgICAgICAgICBzZWxlY3Rpb24uY2FwYWNpdHkgPSBGYWxzZQogICAgIyAgICAgICAgICAgICBwcmludChzZWxlY3Rpb24uc2VsZWN0aW9uKQogICAgIyAgICAgICAgICAgICBzZWxlY3Rpb24uc2F2ZSgpCiAgICAjCiAgICAjIGZvciByb29tIGluIHJvb21fbGlzdF8zOgogICAgIyAgICAgc2VsZWN0aW9uX2xpc3QgPSBTZWxlY3Rpb24ub2JqZWN0cy5maWx0ZXIoUShjb3Vyc2VfYnVpbGRpbmc9MykgJiBRKGNvdXJzZV9jbGFzc3Jvb209cm9vbSkpLm9yZGVyX2J5KCdpZCcpCiAgICAjICAgICBmb3Igc2VsZWN0aW9uIGluIHNlbGVjdGlvbl9saXN0OgogICAgIyAgICAgICAgIHNlbGVjdGlvbi5jYXBhY2l0eSA9IEZhbHNlCiAgICAjICAgICAgICAgcHJpbnQoc2VsZWN0aW9uLnNlbGVjdGlvbikKICAgICMgICAgICAgICBzZWxlY3Rpb24uc2F2ZSgpCgoKICAgICMgc2VsZWN0aW9uX2xpc3QgPSBTZWxlY3Rpb24ub2JqZWN0cy5maWx0ZXIoUShjb3Vyc2VfcGVyaW9kPTEpICYKICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShjb3Vyc2Vfd2Vla2RheT0yKSAmCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEoY291cnNlX3RpbWU9MikgJgogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRKGNvdXJzZV9idWlsZGluZz0xKSAmCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEoaXNfZW1wdHk9RmFsc2UpICYKICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShjYXBhY2l0eT1UcnVlKSkub3JkZXJfYnkoJ3NlbGVjdGlvbicpCiAgICAjIGZvciBzZWxlY3Rpb24gaW4gc2VsZWN0aW9uX2xpc3Q6CiAgICAjICAgICBzZWxlY3Rpb24uaXNfZW1wdHkgPSBUcnVlCiAgICAjICAgICBwcmludChzZWxlY3Rpb24uc2VsZWN0aW9uKQogICAgIyAgICAgc2VsZWN0aW9uLnNhdmUoKQoKICAgICMgc2VsZWN0aW9uX2xpc3QgPSBTZWxlY3Rpb24ub2JqZWN0cy5hbGwoKS5vcmRlcl9ieSgnaWQnKQogICAgIyBmb3Igc2VsZWN0aW9uIGluIHNlbGVjdGlvbl9saXN0OgogICAgIyAgICAgaWYgc2VsZWN0aW9uLmlzX2VtcHR5ID09IEZhbHNlOgogICAgIyAgICAgICAgIHNlbGVjdGlvbi5pc19lbXB0eSA9IFRydWUKICAgICMgICAgICAgICBwcmludChzZWxlY3Rpb24uc2VsZWN0aW9uKQogICAgIyAgICAgICAgIHNlbGVjdGlvbi5zYXZlKCkKICAgICMgY291cnNlX2xpc3QgPSBDb3Vyc2Uub2JqZWN0cy5hbGwoKS5vcmRlcl9ieSgnY291cnNlX2lkJykKICAgICMgZm9yIGNvdXJzZSBpbiBjb3Vyc2VfbGlzdDoKICAgICMgICAgIGlmIGNvdXJzZS5pc19hcnJhbmdlZCA9PSBUcnVlOgogICAgIyAgICAgICAgIGNvdXJzZS5pc19hcnJhbmdlZCA9IEZhbHNlCiAgICAjICAgICAgICAgcHJpbnQoY291cnNlLmNvdXJzZV9uYW1lKQogICAgIyAgICAgICAgIGNvdXJzZS5zYXZlKCkKCjx8ZmltX3N1ZmZpeHw+CgogICAgcm9vbV9saXN0XzEgPSBbMSwgMiwgMywgN10KICAgIHJvb21fbGlzdF8yID0gWzIsIDQsIDVdCiAgICByb29tX2xpc3RfMyA9IFszMTUsIDQxNSwgNjE3LCA2MTksIDcyMSwgNzI0LCA4MjEsIDgyNF0KPHxmaW1fZW5kfD4="]
["68bdc5aedce16d9a6604095563b9b783198097c7-4","68bdc5aedce16d9a6604095563b9b783198097c7","PHxmaW1fcHJlZml4fD4KZnJvbSBjb3Vyc2VfYXJyYW5nZW1lbnQubW9kZWxzIGltcG9ydCBTZWxlY3Rpb24KZnJvbSBjb3Vyc2VfYXJyYW5nZW1lbnQubW9kZWxzIGltcG9ydCBDb3Vyc2UKZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRCgpkZWYgY291cnNlX2NhcGFjaXR5KCk6CgogICAgcm9vbV9saXN0XzEgPSBbMSwgMiwgMywgN10KICAgIHJvb21fbGlzdF8yID0gWzIsIDQsIDVdCiAgICByb29tX2xpc3RfMyA9IFszMTUsIDQxNSwgNjE3LCA2MTksIDcyMSwgNzI0LCA4MjEsIDgyNF0KCiAgICAjIGZvciByb29tXzEgaW4gcmFuZ2UoMSwgOCk6CiAgICAjICAgICBmb3Igcm9vbV8zIGluIHJvb21fbGlzdF8xOgogICAgIyAgICAgICAgIHJvb20gPSByb29tXzEgKiAxMDAgKyByb29tXzMKICAgICMgICAgICAgICBpZiByb29tID09IDEwMyBvciByb29tID09IDIwMzoKICAgICMgICAgICAgICAgICAgY29udGludWUKICAgICMgICAgICAgICBzZWxlY3Rpb25fbGlzdCA9IFNlbGVjdGlvbi5vYmplY3RzLmZpbHRlcihRKGNvdXJzZV9idWlsZGluZz0xKSAmIFEoY291cnNlX2NsYXNzcm9vbT1yb29tKSkub3JkZXJfYnkoJ2lkJykKICAgICMgICAgICAgICBmb3Igc2VsZWN0aW9uIGluIHNlbGVjdGlvbl9saXN0OgogICAgIyAgICAgICAgICAgICBzZWxlY3Rpb24uY2FwYWNpdHkgPSBGYWxzZQogICAgIyAgICAgICAgICAgICBwcmludChzZWxlY3Rpb24uc2VsZWN0aW9uKQogICAgIyAgICAgICAgICAgICBzZWxlY3Rpb24uc2F2ZSgpCgogICAgIyBmb3Igcm9vbV8xIGluIHJhbmdlKDEsIDYpOgogICAgIyAgICAgZm9yIHJvb21fMyBpbiByb29tX2xpc3RfMjoKICAgICMgICAgICAgICByb29tID0gcm9vbV8xICogMTAwICsgcm9vbV8zCiAgICAjICAgICAgICAgaWYgcm9vbSA9PSAxMDUgb3Igcm9vbSA9PSAyMDUgb3Igcm9vbSA9PSAzMDU6CiAgICAjICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAjICAgICAgICAgc2VsZWN0aW9uX2xpc3QgPSBTZWxlY3Rpb24ub2JqZWN0cy5maWx0ZXIoUShjb3Vyc2VfYnVpbGRpbmc9MikgJiBRKGNvdXJzZV9jbGFzc3Jvb209cm9vbSkpLm9yZGVyX2J5KCdpZCcpCiAgICAjICAgICAgICAgZm9yIHNlbGVjdGlvbiBpbiBzZWxlY3Rpb25fbGlzdDoKICAgICMgICAgICAgICAgICAgc2VsZWN0aW9uLmNhcGFjaXR5ID0gRmFsc2UKICAgICMgICAgICAgICAgICAgcHJpbnQoc2VsZWN0aW9uLnNlbGVjdGlvbikKICAgICMgICAgICAgICAgICAgc2VsZWN0aW9uLnNhdmUoKQo8fGZpbV9ob2xlfD4KICAgICMgICAgICAgICBzZWxlY3Rpb24uY2FwYWNpdHkgPSBGYWxzZQogICAgIyAgICAgICAgIHByaW50KHNlbGVjdGlvbi5zZWxlY3Rpb24pCiAgICAjICAgICAgICAgc2VsZWN0aW9uLnNhdmUoKQoKCiAgICAjIHNlbGVjdGlvbl9saXN0ID0gU2VsZWN0aW9uLm9iamVjdHMuZmlsdGVyKFEoY291cnNlX3BlcmlvZD0xKSAmCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEoY291cnNlX3dlZWtkYXk9MikgJgogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRKGNvdXJzZV90aW1lPTIpICYKICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShjb3Vyc2VfYnVpbGRpbmc9MSkgJgogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRKGlzX2VtcHR5PUZhbHNlKSAmCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEoY2FwYWNpdHk9VHJ1ZSkpLm9yZGVyX2J5KCdzZWxlY3Rpb24nKQogICAgIyBmb3Igc2VsZWN0aW9uIGluIHNlbGVjdGlvbl9saXN0OgogICAgIyAgICAgc2VsZWN0aW9uLmlzX2VtcHR5ID0gVHJ1ZQogICAgIyAgICAgcHJpbnQoc2VsZWN0aW9uLnNlbGVjdGlvbikKICAgICMgICAgIHNlbGVjdGlvbi5zYXZlKCkKCiAgICAjIHNlbGVjdGlvbl9saXN0ID0gU2VsZWN0aW9uLm9iamVjdHMuYWxsKCkub3JkZXJfYnkoJ2lkJykKICAgICMgZm9yIHNlbGVjdGlvbiBpbiBzZWxlY3Rpb25fbGlzdDoKICAgICMgICAgIGlmIHNlbGVjdGlvbi5pc19lbXB0eSA9PSBGYWxzZToKICAgICMgICAgICAgICBzZWxlY3Rpb24uaXNfZW1wdHkgPSBUcnVlCiAgICAjICAgICAgICAgcHJpbnQoc2VsZWN0aW9uLnNlbGVjdGlvbikKICAgICMgICAgICAgICBzZWxlY3Rpb24uc2F2ZSgpCiAgICAjIGNvdXJzZV9saXN0ID0gQ291cnNlLm9iamVjdHMuYWxsKCkub3JkZXJfYnkoJ2NvdXJzZV9pZCcpCiAgICAjIGZvciBjb3Vyc2UgaW4gY291cnNlX2xpc3Q6CiAgICAjICAgICBpZiBjb3Vyc2UuaXNfYXJyYW5nZWQgPT0gVHJ1ZToKICAgICMgICAgICAgICBjb3Vyc2UuaXNfYXJyYW5nZWQgPSBGYWxzZQogICAgIyAgICAgICAgIHByaW50KGNvdXJzZS5jb3Vyc2VfbmFtZSkKICAgICMgICAgICAgICBjb3Vyc2Uuc2F2ZSgpCgo8fGZpbV9zdWZmaXh8PgogICAgIwogICAgIyBmb3Igcm9vbSBpbiByb29tX2xpc3RfMzoKICAgICMgICAgIHNlbGVjdGlvbl9saXN0ID0gU2VsZWN0aW9uLm9iamVjdHMuZmlsdGVyKFEoY291cnNlX2J1aWxkaW5nPTMpICYgUShjb3Vyc2VfY2xhc3Nyb29tPXJvb20pKS5vcmRlcl9ieSgnaWQnKQogICAgIyAgICAgZm9yIHNlbGVjdGlvbiBpbiBzZWxlY3Rpb25fbGlzdDoKPHxmaW1fZW5kfD4="]
["68bdc5aedce16d9a6604095563b9b783198097c7-5","68bdc5aedce16d9a6604095563b9b783198097c7","PHxmaW1fcHJlZml4fD4KZnJvbSBjb3Vyc2VfYXJyYW5nZW1lbnQubW9kZWxzIGltcG9ydCBTZWxlY3Rpb24KZnJvbSBjb3Vyc2VfYXJyYW5nZW1lbnQubW9kZWxzIGltcG9ydCBDb3Vyc2UKZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRCgpkZWYgY291cnNlX2NhcGFjaXR5KCk6CgogICAgcm9vbV9saXN0XzEgPSBbMSwgMiwgMywgN10KICAgIHJvb21fbGlzdF8yID0gWzIsIDQsIDVdCiAgICByb29tX2xpc3RfMyA9IFszMTUsIDQxNSwgNjE3LCA2MTksIDcyMSwgNzI0LCA4MjEsIDgyNF0KCiAgICAjIGZvciByb29tXzEgaW4gcmFuZ2UoMSwgOCk6CiAgICAjICAgICBmb3Igcm9vbV8zIGluIHJvb21fbGlzdF8xOgogICAgIyAgICAgICAgIHJvb20gPSByb29tXzEgKiAxMDAgKyByb29tXzMKICAgICMgICAgICAgICBpZiByb29tID09IDEwMyBvciByb29tID09IDIwMzoKICAgICMgICAgICAgICAgICAgY29udGludWUKICAgICMgICAgICAgICBzZWxlY3Rpb25fbGlzdCA9IFNlbGVjdGlvbi5vYmplY3RzLmZpbHRlcihRKGNvdXJzZV9idWlsZGluZz0xKSAmIFEoY291cnNlX2NsYXNzcm9vbT1yb29tKSkub3JkZXJfYnkoJ2lkJykKICAgICMgICAgICAgICBmb3Igc2VsZWN0aW9uIGluIHNlbGVjdGlvbl9saXN0OgogICAgIyAgICAgICAgICAgICBzZWxlY3Rpb24uY2FwYWNpdHkgPSBGYWxzZQogICAgIyAgICAgICAgICAgICBwcmludChzZWxlY3Rpb24uc2VsZWN0aW9uKQogICAgIyAgICAgICAgICAgICBzZWxlY3Rpb24uc2F2ZSgpCgogICAgIyBmb3Igcm9vbV8xIGluIHJhbmdlKDEsIDYpOgo8fGZpbV9ob2xlfD4KICAgICMgICAgICAgICBzZWxlY3Rpb25fbGlzdCA9IFNlbGVjdGlvbi5vYmplY3RzLmZpbHRlcihRKGNvdXJzZV9idWlsZGluZz0yKSAmIFEoY291cnNlX2NsYXNzcm9vbT1yb29tKSkub3JkZXJfYnkoJ2lkJykKICAgICMgICAgICAgICBmb3Igc2VsZWN0aW9uIGluIHNlbGVjdGlvbl9saXN0OgogICAgIyAgICAgICAgICAgICBzZWxlY3Rpb24uY2FwYWNpdHkgPSBGYWxzZQogICAgIyAgICAgICAgICAgICBwcmludChzZWxlY3Rpb24uc2VsZWN0aW9uKQogICAgIyAgICAgICAgICAgICBzZWxlY3Rpb24uc2F2ZSgpCiAgICAjCiAgICAjIGZvciByb29tIGluIHJvb21fbGlzdF8zOgogICAgIyAgICAgc2VsZWN0aW9uX2xpc3QgPSBTZWxlY3Rpb24ub2JqZWN0cy5maWx0ZXIoUShjb3Vyc2VfYnVpbGRpbmc9MykgJiBRKGNvdXJzZV9jbGFzc3Jvb209cm9vbSkpLm9yZGVyX2J5KCdpZCcpCiAgICAjICAgICBmb3Igc2VsZWN0aW9uIGluIHNlbGVjdGlvbl9saXN0OgogICAgIyAgICAgICAgIHNlbGVjdGlvbi5jYXBhY2l0eSA9IEZhbHNlCiAgICAjICAgICAgICAgcHJpbnQoc2VsZWN0aW9uLnNlbGVjdGlvbikKICAgICMgICAgICAgICBzZWxlY3Rpb24uc2F2ZSgpCgoKICAgICMgc2VsZWN0aW9uX2xpc3QgPSBTZWxlY3Rpb24ub2JqZWN0cy5maWx0ZXIoUShjb3Vyc2VfcGVyaW9kPTEpICYKICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShjb3Vyc2Vfd2Vla2RheT0yKSAmCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEoY291cnNlX3RpbWU9MikgJgogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRKGNvdXJzZV9idWlsZGluZz0xKSAmCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEoaXNfZW1wdHk9RmFsc2UpICYKICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUShjYXBhY2l0eT1UcnVlKSkub3JkZXJfYnkoJ3NlbGVjdGlvbicpCiAgICAjIGZvciBzZWxlY3Rpb24gaW4gc2VsZWN0aW9uX2xpc3Q6CiAgICAjICAgICBzZWxlY3Rpb24uaXNfZW1wdHkgPSBUcnVlCiAgICAjICAgICBwcmludChzZWxlY3Rpb24uc2VsZWN0aW9uKQogICAgIyAgICAgc2VsZWN0aW9uLnNhdmUoKQoKICAgICMgc2VsZWN0aW9uX2xpc3QgPSBTZWxlY3Rpb24ub2JqZWN0cy5hbGwoKS5vcmRlcl9ieSgnaWQnKQogICAgIyBmb3Igc2VsZWN0aW9uIGluIHNlbGVjdGlvbl9saXN0OgogICAgIyAgICAgaWYgc2VsZWN0aW9uLmlzX2VtcHR5ID09IEZhbHNlOgogICAgIyAgICAgICAgIHNlbGVjdGlvbi5pc19lbXB0eSA9IFRydWUKICAgICMgICAgICAgICBwcmludChzZWxlY3Rpb24uc2VsZWN0aW9uKQogICAgIyAgICAgICAgIHNlbGVjdGlvbi5zYXZlKCkKICAgICMgY291cnNlX2xpc3QgPSBDb3Vyc2Uub2JqZWN0cy5hbGwoKS5vcmRlcl9ieSgnY291cnNlX2lkJykKICAgICMgZm9yIGNvdXJzZSBpbiBjb3Vyc2VfbGlzdDoKICAgICMgICAgIGlmIGNvdXJzZS5pc19hcnJhbmdlZCA9PSBUcnVlOgogICAgIyAgICAgICAgIGNvdXJzZS5pc19hcnJhbmdlZCA9IEZhbHNlCiAgICAjICAgICAgICAgcHJpbnQoY291cnNlLmNvdXJzZV9uYW1lKQogICAgIyAgICAgICAgIGNvdXJzZS5zYXZlKCkKCjx8ZmltX3N1ZmZpeHw+CiAgICAjICAgICBmb3Igcm9vbV8zIGluIHJvb21fbGlzdF8yOgogICAgIyAgICAgICAgIHJvb20gPSByb29tXzEgKiAxMDAgKyByb29tXzMKICAgICMgICAgICAgICBpZiByb29tID09IDEwNSBvciByb29tID09IDIwNSBvciByb29tID09IDMwNToKICAgICMgICAgICAgICAgICAgY29udGludWUKPHxmaW1fZW5kfD4="]
["d44a58365a564ac077aa11ae9efcc2b7febbda89-1","d44a58365a564ac077aa11ae9efcc2b7febbda89","PHxmaW1fcHJlZml4fD4KIiIiCiMgTk9URSAoZm9yIFNhbSk6IFJ1biBvbiAiUVNUcmFkZXIiIENvbmRhIFZpcnR1YWwgRW52aXJvbWVudCAKICAgID4gInNvdXJjZSBhY3RpdmF0ZSBRU1RyYWRlciIKPHxmaW1faG9sZXw+ClN1bW1hcnkgb2Ygc2NyaXB0CiAgICAtIFRoaXMgc2NyaXB0IHdpbGwgCgojIE5PVEU6IENvZGUgbXVzdCBiZSBydW4gb24gYSBWaXJ0dWFsIEVudmlyb25tZW50IGluIG9yZGVyIHRvIGltcG9ydCAicHJldHR5dGFibGUiIChhcyBsZWFzdCB0aGlzIHdhcyB0aGUgY2FzZSBmb3IgbWUpCiIiIgoKaW1wb3J0IG1hdGgKaW1wb3J0IGpzb24KaW1wb3J0IGxvY2FsZQppbXBvcnQgcmVxdWVzdHMKZnJvbSBwcmV0dHl0YWJsZSBpbXBvcnQgUHJldHR5VGFibGUKCmxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0FMTCwgJ2VuX1VTLlVURi04JykKCmdsb2JhbF91cmwgPSAiaHR0cHM6Ly9hcGkuY29pbm1hcmtldGNhcC5jb20vdjIvZ2xvYmFsLyIKdGlja2VyX3VybCA9ICJodHRwczovL2FwaS5jb2lubWFya2V0Y2FwLmNvbS92Mi90aWNrZXIvP3N0cnVjdHVyZT1hcnJheSIKCnJlcXVlc3QgPSByZXF1ZXN0cy5nZXQoZ2xvYmFsX3VybCkKcmVzdWx0cyA9IHJlcXVlc3QuanNvbigpCmRhdGEgPSByZXN1bHRzWydkYXRhJ10KZ2xvYmFsX2NhcCA9IGludChkYXRhWydxdW90ZXMnXVsnVVNEJ11bJ3RvdGFsX21hcmtldF9jYXAnXSkKZ2xvYmFsX2NhcF9zdHJpbmcgPSAnezosfScuZm9ybWF0KGdsb2JhbF9jYXApCgp0YWJsZSA9IFByZXR0eVRhYmxlKFsnTmFtZScsICdUaWNrZXInLCAnJSBvZiB0b3RhbCBnbG9iYWwgY2FwJywgJ0N1cnJlbnQnLCAnNy43VCAoR29sZCknLCAnMzYuOFQgKE5hcnJvdyBNb25leSknLCAnNzNUIChXb3JsZCBTdG9jayBNYXJrZXRzKScsICc5MC40VCAoQnJvYWQgTW9uZXkpJywgJzIxN1QgKFJlYWwgRXN0YXRlKScsICc1NDRUIChEZXJpdmF0aXZlcyknXSkKCnJlcXVlc3QgPSByZXF1ZXN0cy5nZXQodGlja2VyX3VybCkKcmVzdWx0cyA9IHJlcXVlc3QuanNvbigpCmRhdGEgPSByZXN1bHRzWydkYXRhJ10KCmZvciBjdXJyZW5jeSBpbiBkYXRhOgogICAgbmFtZSA9IGN1cnJlbmN5WyduYW1lJ10KICAgIHRpY2tlciA9IGN1cnJlbmN5WydzeW1ib2wnXQogICAgcGVyY2VudGFnZV9vZl9nbG9iYWxfY2FwID0gZmxvYXQoY3VycmVuY3lbJ3F1b3RlcyddWydVU0QnXVsnbWFya2V0X2NhcCddKSAvIGZsb2F0KGdsb2JhbF9jYXApCiAgICBjdXJyZW50UHJpY2UgPSByb3VuZChmbG9hdChjdXJyZW5jeVsncXVvdGVzJ11bJ1VTRCddWydwcmljZSddKSwyKQogICAgYXZhaWxhYmxlU3VwcGx5ID0gZmxvYXQoY3VycmVuY3lbJ3RvdGFsX3N1cHBseSddKQoKICAgIHRyaWxsaW9uN3ByaWNlID0gcm91bmQoNzcwMDAwMDAwMDAwMCAqIHBlcmNlbnRhZ2Vfb2ZfZ2xvYmFsX2NhcCAvIGF2YWlsYWJsZVN1cHBseSwyKQogICAgdHJpbGxpb24zNnByaWNlID0gcm91bmQoMzY4MDAwMDAwMDAwMDAgKiBwZXJjZW50YWdlX29mX2dsb2JhbF9jYXAgLyBhdmFpbGFibGVTdXBwbHksMikKICAgIHRyaWxsaW9uNzNwcmljZSA9IHJvdW5kKDczMDAwMDAwMDAwMDAwICogcGVyY2VudGFnZV9vZl9nbG9iYWxfY2FwIC8gYXZhaWxhYmxlU3VwcGx5LDIpCiAgICB0cmlsbGlvbjkwcHJpY2UgPSByb3VuZCg5MDQwMDAwMDAwMDAwMCAqIHBlcmNlbnRhZ2Vfb2ZfZ2xvYmFsX2NhcCAvIGF2YWlsYWJsZVN1cHBseSwyKQogICAgdHJpbGxpb24yMTdwcmljZSA9IHJvdW5kKDIxNzAwMDAwMDAwMDAwMCAqIHBlcmNlbnRhZ2Vfb2ZfZ2xvYmFsX2NhcCAvIGF2YWlsYWJsZVN1cHBseSwyKQogICAgdHJpbGxpb241NDRwcmljZSA9IHJvdW5kKDU0NDAwMDAwMDAwMDAwMCAqIHBlcmNlbnRhZ2Vfb2ZfZ2xvYmFsX2NhcCAvIGF2YWlsYWJsZVN1cHBseSwyKQoKICAgIHBlcmNlbnRhZ2Vfb2ZfZ2xvYmFsX2NhcFN0cmluZyA9IHN0cihyb3VuZChwZXJjZW50YWdlX29mX2dsb2JhbF9jYXAqMTAwLDIpKSsiJSIKICAgIGN1cnJlbnRfcHJpY2Vfc3RyaW5nID0gJyQnK3N0cihjdXJyZW50UHJpY2UpCiAgICB0cmlsbGlvbjdwcmljZV9zdHJpbmcgPSAnJCcrbG9jYWxlLmZvcm1hdCgnJS4yZicsdHJpbGxpb243cHJpY2UsVHJ1ZSkKICAgIHRyaWxsaW9uMzZwcmljZV9zdHJpbmcgPSAnJCcrbG9jYWxlLmZvcm1hdCgnJS4yZicsdHJpbGxpb24zNnByaWNlLFRydWUpCiAgICB0cmlsbGlvbjczcHJpY2Vfc3RyaW5nID0gJyQnK2xvY2FsZS5mb3JtYXQoJyUuMmYnLHRyaWxsaW9uNzNwcmljZSxUcnVlKQogICAgdHJpbGxpb245MHByaWNlX3N0cmluZyA9ICckJytsb2NhbGUuZm9ybWF0KCclLjJmJyx0cmlsbGlvbjkwcHJpY2UsVHJ1ZSkKICAgIHRyaWxsaW9uMjE3cHJpY2Vfc3RyaW5nID0gJyQnK2xvY2FsZS5mb3JtYXQoJyUuMmYnLHRyaWxsaW9uMjE3cHJpY2UsVHJ1ZSkKICAgIHRyaWxsaW9uNTQ0cHJpY2Vfc3RyaW5nID0gJyQnK2xvY2FsZS5mb3JtYXQoJyUuMmYnLHRyaWxsaW9uNTQ0cHJpY2UsVHJ1ZSkKCiAgICB0YWJsZS5hZGRfcm93KFtuYW1lLHRpY2tlcixwZXJjZW50YWdlX29mX2dsb2JhbF9jYXBTdHJpbmcsY3VycmVudF9wcmljZV9zdHJpbmcsdHJpbGxpb243cHJpY2Vfc3RyaW5nLHRyaWxsaW9uMzZwcmljZV9zdHJpbmcsdHJpbGxpb243M3ByaWNlX3N0cmluZyx0cmlsbGlvbjkwcHJpY2Vfc3RyaW5nLHRyaWxsaW9uMjE3cHJpY2Vfc3RyaW5nLHRyaWxsaW9uNTQ0cHJpY2Vfc3RyaW5nXSkKCnByaW50KCkKcHJpbnQodGFibGUpCnByaW50KCkKPHxmaW1fc3VmZml4fD4KICAgID4gUnVuIHZpYSAicHl0aG9uIGNvaW5jYXBfcDQucHkiCgo8fGZpbV9lbmR8Pg=="]
["00b91af8cea15e2c1a673c6571d088501ffbf0b7-1","00b91af8cea15e2c1a673c6571d088501ffbf0b7","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgogICAgZGVmIF9faW5pdF9fKHNlbGYsICBuYW1lPU5vbmUsIGxhc3RuYW1lPU5vbmUsIGFkZHJlcz1Ob25lKToKICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgc2VsZi5sYXN0bmFtZSA9IGxhc3RuYW1lCiAgICAgICAgc2VsZi5hZGRyZXMgPSBhZGRyZXMKPHxmaW1fc3VmZml4fD4KX19hdXRob3JfXyA9ICdwb3Bvdi5zbicKCmNsYXNzIENvbnRhY3Q6Cgo8fGZpbV9lbmR8Pg=="]
["00b91af8cea15e2c1a673c6571d088501ffbf0b7-2","00b91af8cea15e2c1a673c6571d088501ffbf0b7","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyA9ICdwb3Bvdi5zbicKPHxmaW1faG9sZXw+CiAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgIHNlbGYubGFzdG5hbWUgPSBsYXN0bmFtZQogICAgICAgIHNlbGYuYWRkcmVzID0gYWRkcmVzCjx8ZmltX3N1ZmZpeHw+CgpjbGFzcyBDb250YWN0OgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCAgbmFtZT1Ob25lLCBsYXN0bmFtZT1Ob25lLCBhZGRyZXM9Tm9uZSk6Cjx8ZmltX2VuZHw+"]
["c165dd39574530d64763c3dddc325f4659bc8739-1","c165dd39574530d64763c3dddc325f4659bc8739","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiIgpAZGF0ZTogMjAyMC8xMC8xMyDkuIvljYgzOjIwCjx8ZmltX2VuZHw+"]
["c165dd39574530d64763c3dddc325f4659bc8739-2","c165dd39574530d64763c3dddc325f4659bc8739","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CkBkYXRlOiAyMDIwLzEwLzEzIOS4i+WNiDM6MjAKQGZpbGU6IHN0b3BfdG9rZW4ucHkKQGF1dGhvcjogemoKQGRlc2NyaXB0aW9uOiAKPHxmaW1fZW5kfD4="]
["c165dd39574530d64763c3dddc325f4659bc8739-3","c165dd39574530d64763c3dddc325f4659bc8739","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiIgpAZGF0ZTogMjAyMC8xMC8xMyDkuIvljYgzOjIwCkBmaWxlOiBzdG9wX3Rva2VuLnB5CkBhdXRob3I6IHpqCkBkZXNjcmlwdGlvbjogCjx8ZmltX2hvbGV8PgogICAgcGFzcwo8fGZpbV9zdWZmaXh8PgoiIiIKCgpjbGFzcyBfU3RvcFRva2VuOgo8fGZpbV9lbmR8Pg=="]
["c165dd39574530d64763c3dddc325f4659bc8739-4","c165dd39574530d64763c3dddc325f4659bc8739","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiIgpAZGF0ZTogMjAyMC8xMC8xMyDkuIvljYgzOjIwCkBmaWxlOiBzdG9wX3Rva2VuLnB5CkBhdXRob3I6IHpqCjx8ZmltX2hvbGV8PgpjbGFzcyBfU3RvcFRva2VuOgogICAgcGFzcwo8fGZpbV9zdWZmaXh8PgpAZGVzY3JpcHRpb246IAoiIiIKCgo8fGZpbV9lbmR8Pg=="]
["c165dd39574530d64763c3dddc325f4659bc8739-5","c165dd39574530d64763c3dddc325f4659bc8739","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiIgpAZGF0ZTogMjAyMC8xMC8xMyDkuIvljYgzOjIwCjx8ZmltX2VuZHw+"]
["6baf86de85a64bdd1984c5babbc1c5da6f51fc1e-1","6baf86de85a64bdd1984c5babbc1c5da6f51fc1e","PHxmaW1fcHJlZml4fD4KZGVmIGR1bXBfYWxsX2ludG9fZGljdChtb2R1bGUpOgo8fGZpbV9ob2xlfD4KICAgIHJldHVybiBkY3QKPHxmaW1fc3VmZml4fD4KICAgICIiIiBEdW1wIGBgbW9kdWxlLl9fYWxsX18gaW50byBhIGRpY3QsIGFuZCByZXR1cm4gdGhlIGRpY3QuICIiIgogICAgZGN0ID0ge30KICAgIGZvciBjbHNuYW1lIGluIG1vZHVsZS5fX2FsbF9fOgogICAgICAgIGRjdFtjbHNuYW1lXSA9IGdldGF0dHIobW9kdWxlLCBjbHNuYW1lKQo8fGZpbV9lbmR8Pg=="]
["e799ff1381516468caf2410cdcc42bc4e4ed6d50-1","e799ff1381516468caf2410cdcc42bc4e4ed6d50","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojCgppbXBvcnQgdXRpbCBhcyB1dAppbXBvcnQgSW1nVmlld2VyIGFzIGl2CmltcG9ydCBjdjIKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBJbWdVdGlsIGFzIGl1CmltcG9ydCBJbWdWaWV3ZXIgYXMgaXYKaW1wb3J0IExhbmVVdGlscyBhcyBsdQoKIyBvdXIgb2JqZWN0IG1vZGVsCiMgTGFuZXM6ICBjb250YWluIExhbmVCb3VuZGFyeShzKSBhbmQgYXR0cmlidXRlcyBjb21tb24gdG8gYm90aCBib3VuZGFyaWVzCiMgTGFuZUJvdW5kYXJ5KHMpOiBjb250YWluIGF0dHJpYnV0ZXMgZm9yIGEgcGFydGljdWxhciBsYW5lIGJvdW5kYXkKIyBXaW5kb3dzOiBhcmUgdXNlZCB0byBjYWxjdWxhdGUgbGFuZSBib3VuZGFyaWVzCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiNjZCBpcyBjYWNoZV9kaWN0LCBwZCBpcyBwYXJtX2RpY3QKY2QsIHBkID0gdXQuYXBwX2luaXQodmlld2VyPVRydWUsIHNhdmVyPVRydWUsIHRpdGxlPSJ3aGF0ZXZlciIpCjx8ZmltX2VuZHw+"]
["e799ff1381516468caf2410cdcc42bc4e4ed6d50-2","e799ff1381516468caf2410cdcc42bc4e4ed6d50","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojCgppbXBvcnQgdXRpbCBhcyB1dAppbXBvcnQgSW1nVmlld2VyIGFzIGl2CmltcG9ydCBjdjIKPHxmaW1faG9sZXw+CgojIG91ciBvYmplY3QgbW9kZWwKIyBMYW5lczogIGNvbnRhaW4gTGFuZUJvdW5kYXJ5KHMpIGFuZCBhdHRyaWJ1dGVzIGNvbW1vbiB0byBib3RoIGJvdW5kYXJpZXMKIyBMYW5lQm91bmRhcnkocyk6IGNvbnRhaW4gYXR0cmlidXRlcyBmb3IgYSBwYXJ0aWN1bGFyIGxhbmUgYm91bmRheQojIFdpbmRvd3M6IGFyZSB1c2VkIHRvIGNhbGN1bGF0ZSBsYW5lIGJvdW5kYXJpZXMKCiNjZCBpcyBjYWNoZV9kaWN0LCBwZCBpcyBwYXJtX2RpY3QKY2QsIHBkID0gdXQuYXBwX2luaXQodmlld2VyPVRydWUsIHNhdmVyPVRydWUsIHRpdGxlPSJ3aGF0ZXZlciIpCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgSW1nVXRpbCBhcyBpdQppbXBvcnQgSW1nVmlld2VyIGFzIGl2CmltcG9ydCBMYW5lVXRpbHMgYXMgbHUKPHxmaW1fZW5kfD4="]
["e799ff1381516468caf2410cdcc42bc4e4ed6d50-3","e799ff1381516468caf2410cdcc42bc4e4ed6d50","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojCgppbXBvcnQgdXRpbCBhcyB1dAppbXBvcnQgSW1nVmlld2VyIGFzIGl2CmltcG9ydCBjdjIKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBJbWdVdGlsIGFzIGl1CmltcG9ydCBJbWdWaWV3ZXIgYXMgaXYKaW1wb3J0IExhbmVVdGlscyBhcyBsdQoKIyBvdXIgb2JqZWN0IG1vZGVsCiMgTGFuZXM6ICBjb250YWluIExhbmVCb3VuZGFyeShzKSBhbmQgYXR0cmlidXRlcyBjb21tb24gdG8gYm90aCBib3VuZGFyaWVzCiMgTGFuZUJvdW5kYXJ5KHMpOiBjb250YWluIGF0dHJpYnV0ZXMgZm9yIGEgcGFydGljdWxhciBsYW5lIGJvdW5kYXkKIyBXaW5kb3dzOiBhcmUgdXNlZCB0byBjYWxjdWxhdGUgbGFuZSBib3VuZGFyaWVzCgojY2QgaXMgY2FjaGVfZGljdCwgcGQgaXMgcGFybV9kaWN0Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2QsIHBkID0gdXQuYXBwX2luaXQodmlld2VyPVRydWUsIHNhdmVyPVRydWUsIHRpdGxlPSJ3aGF0ZXZlciIpCjx8ZmltX2VuZHw+"]
["e799ff1381516468caf2410cdcc42bc4e4ed6d50-4","e799ff1381516468caf2410cdcc42bc4e4ed6d50","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCB1dGlsIGFzIHV0CmltcG9ydCBJbWdWaWV3ZXIgYXMgaXYKaW1wb3J0IGN2MgppbXBvcnQgbnVtcHkgYXMgbnAKPHxmaW1fZW5kfD4="]
["007a28794cc471e6bba7bca31a0a4434a0c7b7a5-1","007a28794cc471e6bba7bca31a0a4434a0c7b7a5","PHxmaW1fcHJlZml4fD4KZnJvbSBtYXRwbG90bGliIGltcG9ydCBweXBsb3QgYXMgcGx0CgpwYXltZW50X21ldGhvZF9uYW1lcyA9IFsiQ2FyZCBTd2lwZSIsICJDYXNoIiwgIkFwcGxlIFBheSIsICJPdGhlciJdCnBheW1lbnRfbWV0aG9kX2ZyZXFzID0gWzI3MCwgNzcsIDMyLCAxMV0KCnBsdC5waWUocGF5bWVudF9tZXRob2RfZnJlcXMsIGF1dG9wY3Q9JyUwLjFmJSUnKQpwbHQuYXhpcygnZXF1YWwnKQpwbHQubGVnZW5kKHBheW1lbnRfbWV0aG9kX25hbWVzKQpwbHQuc2hvdygpCiMlJQpmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHB5cGxvdCBhcyBwbHQKCnVuaXRfdG9waWNzID0gWydMaW1pdHMnLCAnRGVyaXZhdGl2ZXMnLCAnSW50ZWdyYWxzJywgJ0RpZmYgRXEnLCAnQXBwbGljYXRpb25zJ10KPHxmaW1faG9sZXw+CnBsdC5heGlzKCdlcXVhbCcpCnBsdC50aXRsZSgiSGFyZGVzdCBUb3BpY3MiKQpwbHQuc2F2ZWZpZygibXlfcGllX2NoYXJ0LnBuZyIpCnBsdC5zaG93KCkKCiMlJQpjb3VudHJpZXMgPSBbNDQ3LCA2NiwgNjQsIDQ5LCA0NSwgMjgsIDI1LCAyMCwgMTksIDE3LCAxNywgMjc5XQpjb2xvcnMgPSBbJ2xpZ2h0c2t5Ymx1ZScsICdnb2xkJywgJ2xpZ2h0Y29yYWwnLCAnZ2FpbnNib3JvJywgJ3JveWFsYmx1ZScsICdsaWdodHBpbmsnLCAnZGFya3NlYWdyZWVuJywgJ3NpZW5uYScsICdraGFraScsICdnb2xkJywgJ3Zpb2xldCcsICd5ZWxsb3dncmVlbiddCmV4cGxvZGUgPSAoMC4xLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKQpwbHQucGllKGNvdW50cmllcyxleHBsb2RlID0gZXhwbG9kZSxjb2xvcnM9Y29sb3JzLAogICAgICAgc2hhZG93PVRydWUsIHN0YXJ0YW5nbGU9MzQ1LCBhdXRvcGN0PSclMS4wZiUlJywKICAgICAgIHBjdGRpc3RhbmNlPTEuMTUpCnBsdC50aXRsZSgiTGVhZ3VlIG9mIExlZ2VuZHMgVmlld2VycycgV2hlcmVhYm91dHMiKQpwbHQubGVnZW5kKGxhYmVscywgbG9jPSJyaWdodCIpCnBsdC5zaG93KCkKPHxmaW1fc3VmZml4fD4KbnVtX2hhcmRlc3RfcmVwb3J0ZWQgPSBbMSwgMywgMTAsIDE1LCAxXQoKcGx0LmZpZ3VyZShmaWdzaXplPSgxMCw4KSkKcGx0LnBpZShudW1faGFyZGVzdF9yZXBvcnRlZCwgbGFiZWxzPSB1bml0X3RvcGljcywgYXV0b3BjdD0nJTFkJSUnKQo8fGZpbV9lbmR8Pg=="]
["007a28794cc471e6bba7bca31a0a4434a0c7b7a5-2","007a28794cc471e6bba7bca31a0a4434a0c7b7a5","PHxmaW1fcHJlZml4fD4KZnJvbSBtYXRwbG90bGliIGltcG9ydCBweXBsb3QgYXMgcGx0CgpwYXltZW50X21ldGhvZF9uYW1lcyA9IFsiQ2FyZCBTd2lwZSIsICJDYXNoIiwgIkFwcGxlIFBheSIsICJPdGhlciJdCnBheW1lbnRfbWV0aG9kX2ZyZXFzID0gWzI3MCwgNzcsIDMyLCAxMV0KCjx8ZmltX2hvbGV8PgojJSUKZnJvbSBtYXRwbG90bGliIGltcG9ydCBweXBsb3QgYXMgcGx0Cgp1bml0X3RvcGljcyA9IFsnTGltaXRzJywgJ0Rlcml2YXRpdmVzJywgJ0ludGVncmFscycsICdEaWZmIEVxJywgJ0FwcGxpY2F0aW9ucyddCm51bV9oYXJkZXN0X3JlcG9ydGVkID0gWzEsIDMsIDEwLCAxNSwgMV0KCnBsdC5maWd1cmUoZmlnc2l6ZT0oMTAsOCkpCnBsdC5waWUobnVtX2hhcmRlc3RfcmVwb3J0ZWQsIGxhYmVscz0gdW5pdF90b3BpY3MsIGF1dG9wY3Q9JyUxZCUlJykKcGx0LmF4aXMoJ2VxdWFsJykKcGx0LnRpdGxlKCJIYXJkZXN0IFRvcGljcyIpCnBsdC5zYXZlZmlnKCJteV9waWVfY2hhcnQucG5nIikKcGx0LnNob3coKQoKIyUlCmNvdW50cmllcyA9IFs0NDcsIDY2LCA2NCwgNDksIDQ1LCAyOCwgMjUsIDIwLCAxOSwgMTcsIDE3LCAyNzldCmNvbG9ycyA9IFsnbGlnaHRza3libHVlJywgJ2dvbGQnLCAnbGlnaHRjb3JhbCcsICdnYWluc2Jvcm8nLCAncm95YWxibHVlJywgJ2xpZ2h0cGluaycsICdkYXJrc2VhZ3JlZW4nLCAnc2llbm5hJywgJ2toYWtpJywgJ2dvbGQnLCAndmlvbGV0JywgJ3llbGxvd2dyZWVuJ10KZXhwbG9kZSA9ICgwLjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApCnBsdC5waWUoY291bnRyaWVzLGV4cGxvZGUgPSBleHBsb2RlLGNvbG9ycz1jb2xvcnMsCiAgICAgICBzaGFkb3c9VHJ1ZSwgc3RhcnRhbmdsZT0zNDUsIGF1dG9wY3Q9JyUxLjBmJSUnLAogICAgICAgcGN0ZGlzdGFuY2U9MS4xNSkKcGx0LnRpdGxlKCJMZWFndWUgb2YgTGVnZW5kcyBWaWV3ZXJzJyBXaGVyZWFib3V0cyIpCnBsdC5sZWdlbmQobGFiZWxzLCBsb2M9InJpZ2h0IikKcGx0LnNob3coKQo8fGZpbV9zdWZmaXh8PgpwbHQucGllKHBheW1lbnRfbWV0aG9kX2ZyZXFzLCBhdXRvcGN0PSclMC4xZiUlJykKcGx0LmF4aXMoJ2VxdWFsJykKcGx0LmxlZ2VuZChwYXltZW50X21ldGhvZF9uYW1lcykKcGx0LnNob3coKQo8fGZpbV9lbmR8Pg=="]
["007a28794cc471e6bba7bca31a0a4434a0c7b7a5-3","007a28794cc471e6bba7bca31a0a4434a0c7b7a5","PHxmaW1fcHJlZml4fD4KZnJvbSBtYXRwbG90bGliIGltcG9ydCBweXBsb3QgYXMgcGx0CgpwYXltZW50X21ldGhvZF9uYW1lcyA9IFsiQ2FyZCBTd2lwZSIsICJDYXNoIiwgIkFwcGxlIFBheSIsICJPdGhlciJdCnBheW1lbnRfbWV0aG9kX2ZyZXFzID0gWzI3MCwgNzcsIDMyLCAxMV0KCnBsdC5waWUocGF5bWVudF9tZXRob2RfZnJlcXMsIGF1dG9wY3Q9JyUwLjFmJSUnKQpwbHQuYXhpcygnZXF1YWwnKQpwbHQubGVnZW5kKHBheW1lbnRfbWV0aG9kX25hbWVzKQo8fGZpbV9ob2xlfD4KdW5pdF90b3BpY3MgPSBbJ0xpbWl0cycsICdEZXJpdmF0aXZlcycsICdJbnRlZ3JhbHMnLCAnRGlmZiBFcScsICdBcHBsaWNhdGlvbnMnXQpudW1faGFyZGVzdF9yZXBvcnRlZCA9IFsxLCAzLCAxMCwgMTUsIDFdCgpwbHQuZmlndXJlKGZpZ3NpemU9KDEwLDgpKQpwbHQucGllKG51bV9oYXJkZXN0X3JlcG9ydGVkLCBsYWJlbHM9IHVuaXRfdG9waWNzLCBhdXRvcGN0PSclMWQlJScpCnBsdC5heGlzKCdlcXVhbCcpCnBsdC50aXRsZSgiSGFyZGVzdCBUb3BpY3MiKQpwbHQuc2F2ZWZpZygibXlfcGllX2NoYXJ0LnBuZyIpCnBsdC5zaG93KCkKCiMlJQpjb3VudHJpZXMgPSBbNDQ3LCA2NiwgNjQsIDQ5LCA0NSwgMjgsIDI1LCAyMCwgMTksIDE3LCAxNywgMjc5XQpjb2xvcnMgPSBbJ2xpZ2h0c2t5Ymx1ZScsICdnb2xkJywgJ2xpZ2h0Y29yYWwnLCAnZ2FpbnNib3JvJywgJ3JveWFsYmx1ZScsICdsaWdodHBpbmsnLCAnZGFya3NlYWdyZWVuJywgJ3NpZW5uYScsICdraGFraScsICdnb2xkJywgJ3Zpb2xldCcsICd5ZWxsb3dncmVlbiddCmV4cGxvZGUgPSAoMC4xLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKQpwbHQucGllKGNvdW50cmllcyxleHBsb2RlID0gZXhwbG9kZSxjb2xvcnM9Y29sb3JzLAogICAgICAgc2hhZG93PVRydWUsIHN0YXJ0YW5nbGU9MzQ1LCBhdXRvcGN0PSclMS4wZiUlJywKICAgICAgIHBjdGRpc3RhbmNlPTEuMTUpCnBsdC50aXRsZSgiTGVhZ3VlIG9mIExlZ2VuZHMgVmlld2VycycgV2hlcmVhYm91dHMiKQpwbHQubGVnZW5kKGxhYmVscywgbG9jPSJyaWdodCIpCnBsdC5zaG93KCkKPHxmaW1fc3VmZml4fD4KcGx0LnNob3coKQojJSUKZnJvbSBtYXRwbG90bGliIGltcG9ydCBweXBsb3QgYXMgcGx0Cgo8fGZpbV9lbmR8Pg=="]
["007a28794cc471e6bba7bca31a0a4434a0c7b7a5-4","007a28794cc471e6bba7bca31a0a4434a0c7b7a5","PHxmaW1fcHJlZml4fD4KZnJvbSBtYXRwbG90bGliIGltcG9ydCBweXBsb3QgYXMgcGx0CgpwYXltZW50X21ldGhvZF9uYW1lcyA9IFsiQ2FyZCBTd2lwZSIsICJDYXNoIiwgIkFwcGxlIFBheSIsICJPdGhlciJdCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcGF5bWVudF9tZXRob2RfZnJlcXMgPSBbMjcwLCA3NywgMzIsIDExXQoKcGx0LnBpZShwYXltZW50X21ldGhvZF9mcmVxcywgYXV0b3BjdD0nJTAuMWYlJScpCnBsdC5heGlzKCdlcXVhbCcpCjx8ZmltX2VuZHw+"]
["007a28794cc471e6bba7bca31a0a4434a0c7b7a5-5","007a28794cc471e6bba7bca31a0a4434a0c7b7a5","PHxmaW1fcHJlZml4fD4KZnJvbSBtYXRwbG90bGliIGltcG9ydCBweXBsb3QgYXMgcGx0CgpwYXltZW50X21ldGhvZF9uYW1lcyA9IFsiQ2FyZCBTd2lwZSIsICJDYXNoIiwgIkFwcGxlIFBheSIsICJPdGhlciJdCnBheW1lbnRfbWV0aG9kX2ZyZXFzID0gWzI3MCwgNzcsIDMyLCAxMV0KCnBsdC5waWUocGF5bWVudF9tZXRob2RfZnJlcXMsIGF1dG9wY3Q9JyUwLjFmJSUnKQpwbHQuYXhpcygnZXF1YWwnKQpwbHQubGVnZW5kKHBheW1lbnRfbWV0aG9kX25hbWVzKQpwbHQuc2hvdygpCiMlJQpmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHB5cGxvdCBhcyBwbHQKCnVuaXRfdG9waWNzID0gWydMaW1pdHMnLCAnRGVyaXZhdGl2ZXMnLCAnSW50ZWdyYWxzJywgJ0RpZmYgRXEnLCAnQXBwbGljYXRpb25zJ10KbnVtX2hhcmRlc3RfcmVwb3J0ZWQgPSBbMSwgMywgMTAsIDE1LCAxXQoKPHxmaW1faG9sZXw+CnBsdC5zYXZlZmlnKCJteV9waWVfY2hhcnQucG5nIikKcGx0LnNob3coKQoKIyUlCmNvdW50cmllcyA9IFs0NDcsIDY2LCA2NCwgNDksIDQ1LCAyOCwgMjUsIDIwLCAxOSwgMTcsIDE3LCAyNzldCmNvbG9ycyA9IFsnbGlnaHRza3libHVlJywgJ2dvbGQnLCAnbGlnaHRjb3JhbCcsICdnYWluc2Jvcm8nLCAncm95YWxibHVlJywgJ2xpZ2h0cGluaycsICdkYXJrc2VhZ3JlZW4nLCAnc2llbm5hJywgJ2toYWtpJywgJ2dvbGQnLCAndmlvbGV0JywgJ3llbGxvd2dyZWVuJ10KZXhwbG9kZSA9ICgwLjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApCnBsdC5waWUoY291bnRyaWVzLGV4cGxvZGUgPSBleHBsb2RlLGNvbG9ycz1jb2xvcnMsCiAgICAgICBzaGFkb3c9VHJ1ZSwgc3RhcnRhbmdsZT0zNDUsIGF1dG9wY3Q9JyUxLjBmJSUnLAogICAgICAgcGN0ZGlzdGFuY2U9MS4xNSkKcGx0LnRpdGxlKCJMZWFndWUgb2YgTGVnZW5kcyBWaWV3ZXJzJyBXaGVyZWFib3V0cyIpCnBsdC5sZWdlbmQobGFiZWxzLCBsb2M9InJpZ2h0IikKcGx0LnNob3coKQo8fGZpbV9zdWZmaXh8PgpwbHQuZmlndXJlKGZpZ3NpemU9KDEwLDgpKQpwbHQucGllKG51bV9oYXJkZXN0X3JlcG9ydGVkLCBsYWJlbHM9IHVuaXRfdG9waWNzLCBhdXRvcGN0PSclMWQlJScpCnBsdC5heGlzKCdlcXVhbCcpCnBsdC50aXRsZSgiSGFyZGVzdCBUb3BpY3MiKQo8fGZpbV9lbmR8Pg=="]
["68c8b1dffe72884a75cfc35bf3a9050125baee04-1","68c8b1dffe72884a75cfc35bf3a9050125baee04","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCgpTY3JpcHQgTmFtZTogUnVubmFibGUucHkKQXV0aG9yOiBEbyBUcmluaC9KaW1teSAtIDNEIGFydGlzdC4KCkRlc2NyaXB0aW9uOgogICAgCgoiIiIKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiIiIiBJbXBvcnQgIiIiCgoKZnJvbSBQeVNpZGUyLlF0Q29yZSAgICAgICAgICAgICAgICAgaW1wb3J0IFFSdW5uYWJsZQoKCgpjbGFzcyBSdW5uYWJsZShRUnVubmFibGUpOgoKICAgIFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnREFNR1JVTkFCTEUnCiAgICBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJ1J1bm5hYmxlJwogICAgX25hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdEQU1HIFJ1bm5hYmxlJwoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXNrLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHN1cGVyKFJ1bm5hYmxlLCBzZWxmKS5fX2luaXRfXygpCgogICAgICAgIHNlbGYudGFzayAgICAgICAgICAgICAgICAgICA9IHRhc2sKICAgICAgICBzZWxmLmFyZ3MgICAgICAgICAgICAgICAgICAgPSBhcmdzCiAgICAgICAgc2VsZi5rd2FyZ3MgICAgICAgICAgICAgICAgID0ga3dhcmdzCgogICAgQHByb3BlcnR5CiAgICBkZWYgbmFtZShzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQoKICAgIEBuYW1lLnNldHRlcgogICAgZGVmIG5hbWUoc2VsZiwgdmFsKToKICAgICAgICBzZWxmLl9uYW1lICAgICAgICAgICAgICAgICA9IHZhbAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ3JlYXRlZCBieSBwYW5kYSBvbiAzLzIwLzIwMjAgLSA2OjE3IEFNCiMgwqkgMjAxNyAtIDIwMTkgREFNR3RlYW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQKPHxmaW1fZW5kfD4="]
["68c8b1dffe72884a75cfc35bf3a9050125baee04-2","68c8b1dffe72884a75cfc35bf3a9050125baee04","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCgpTY3JpcHQgTmFtZTogUnVubmFibGUucHkKQXV0aG9yOiBEbyBUcmluaC9KaW1teSAtIDNEIGFydGlzdC4KCkRlc2NyaXB0aW9uOgogICAgCgoiIiIKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiIiIiBJbXBvcnQgIiIiCgoKZnJvbSBQeVNpZGUyLlF0Q29yZSAgICAgICAgICAgICAgICAgaW1wb3J0IFFSdW5uYWJsZQoKCgpjbGFzcyBSdW5uYWJsZShRUnVubmFibGUpOgoKICAgIFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnREFNR1JVTkFCTEUnCiAgICBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJ1J1bm5hYmxlJwogICAgX25hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdEQU1HIFJ1bm5hYmxlJwoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXNrLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHN1cGVyKFJ1bm5hYmxlLCBzZWxmKS5fX2luaXRfXygpCgogICAgICAgIHNlbGYudGFzayAgICAgICAgICAgICAgICAgICA9IHRhc2sKICAgICAgICBzZWxmLmFyZ3MgICAgICAgICAgICAgICAgICAgPSBhcmdzCiAgICAgICAgc2VsZi5rd2FyZ3MgICAgICAgICAgICAgICAgID0ga3dhcmdzCgogICAgQHByb3BlcnR5CiAgICBkZWYgbmFtZShzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQo8fGZpbV9ob2xlfD4KCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDcmVhdGVkIGJ5IHBhbmRhIG9uIDMvMjAvMjAyMCAtIDY6MTcgQU0KIyDCqSAyMDE3IC0gMjAxOSBEQU1HdGVhbS4gQWxsIHJpZ2h0cyByZXNlcnZlZAo8fGZpbV9zdWZmaXh8PgoKICAgIEBuYW1lLnNldHRlcgogICAgZGVmIG5hbWUoc2VsZiwgdmFsKToKICAgICAgICBzZWxmLl9uYW1lICAgICAgICAgICAgICAgICA9IHZhbAo8fGZpbV9lbmR8Pg=="]
["68c8b1dffe72884a75cfc35bf3a9050125baee04-3","68c8b1dffe72884a75cfc35bf3a9050125baee04","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCgpTY3JpcHQgTmFtZTogUnVubmFibGUucHkKQXV0aG9yOiBEbyBUcmluaC9KaW1teSAtIDNEIGFydGlzdC4KCkRlc2NyaXB0aW9uOgogICAgCgoiIiIKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiIiIiBJbXBvcnQgIiIiCgoKZnJvbSBQeVNpZGUyLlF0Q29yZSAgICAgICAgICAgICAgICAgaW1wb3J0IFFSdW5uYWJsZQoKCgpjbGFzcyBSdW5uYWJsZShRUnVubmFibGUpOgoKPHxmaW1faG9sZXw+CiAgICBkZWYgX19pbml0X18oc2VsZiwgdGFzaywgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzdXBlcihSdW5uYWJsZSwgc2VsZikuX19pbml0X18oKQoKICAgICAgICBzZWxmLnRhc2sgICAgICAgICAgICAgICAgICAgPSB0YXNrCiAgICAgICAgc2VsZi5hcmdzICAgICAgICAgICAgICAgICAgID0gYXJncwogICAgICAgIHNlbGYua3dhcmdzICAgICAgICAgICAgICAgICA9IGt3YXJncwoKICAgIEBwcm9wZXJ0eQogICAgZGVmIG5hbWUoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKCiAgICBAbmFtZS5zZXR0ZXIKICAgIGRlZiBuYW1lKHNlbGYsIHZhbCk6CiAgICAgICAgc2VsZi5fbmFtZSAgICAgICAgICAgICAgICAgPSB2YWwKCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDcmVhdGVkIGJ5IHBhbmRhIG9uIDMvMjAvMjAyMCAtIDY6MTcgQU0KIyDCqSAyMDE3IC0gMjAxOSBEQU1HdGVhbS4gQWxsIHJpZ2h0cyByZXNlcnZlZAo8fGZpbV9zdWZmaXh8PgogICAgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdEQU1HUlVOQUJMRScKICAgIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnUnVubmFibGUnCiAgICBfbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJ0RBTUcgUnVubmFibGUnCgo8fGZpbV9lbmR8Pg=="]
["68c8b1dffe72884a75cfc35bf3a9050125baee04-4","68c8b1dffe72884a75cfc35bf3a9050125baee04","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCgpTY3JpcHQgTmFtZTogUnVubmFibGUucHkKQXV0aG9yOiBEbyBUcmluaC9KaW1teSAtIDNEIGFydGlzdC4KCkRlc2NyaXB0aW9uOgogICAgCgoiIiIKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiIiIiBJbXBvcnQgIiIiCgoKZnJvbSBQeVNpZGUyLlF0Q29yZSAgICAgICAgICAgICAgICAgaW1wb3J0IFFSdW5uYWJsZQoKCgpjbGFzcyBSdW5uYWJsZShRUnVubmFibGUpOgoKICAgIFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnREFNR1JVTkFCTEUnCiAgICBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJ1J1bm5hYmxlJwogICAgX25hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdEQU1HIFJ1bm5hYmxlJwoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXNrLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHN1cGVyKFJ1bm5hYmxlLCBzZWxmKS5fX2luaXRfXygpCgogICAgICAgIHNlbGYudGFzayAgICAgICAgICAgICAgICAgICA9IHRhc2sKICAgICAgICBzZWxmLmFyZ3MgICAgICAgICAgICAgICAgICAgPSBhcmdzCiAgICAgICAgc2VsZi5rd2FyZ3MgICAgICAgICAgICAgICAgID0ga3dhcmdzCgogICAgQHByb3BlcnR5CiAgICBkZWYgbmFtZShzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQoKICAgIEBuYW1lLnNldHRlcgogICAgZGVmIG5hbWUoc2VsZiwgdmFsKToKPHxmaW1faG9sZXw+CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENyZWF0ZWQgYnkgcGFuZGEgb24gMy8yMC8yMDIwIC0gNjoxNyBBTQojIMKpIDIwMTcgLSAyMDE5IERBTUd0ZWFtLiBBbGwgcmlnaHRzIHJlc2VydmVkCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5fbmFtZSAgICAgICAgICAgICAgICAgPSB2YWwKCgo8fGZpbV9lbmR8Pg=="]
["68c8b1dffe72884a75cfc35bf3a9050125baee04-5","68c8b1dffe72884a75cfc35bf3a9050125baee04","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCgpTY3JpcHQgTmFtZTogUnVubmFibGUucHkKQXV0aG9yOiBEbyBUcmluaC9KaW1teSAtIDNEIGFydGlzdC4KCkRlc2NyaXB0aW9uOgogICAgCgoiIiIKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiIiIiBJbXBvcnQgIiIiCgoKZnJvbSBQeVNpZGUyLlF0Q29yZSAgICAgICAgICAgICAgICAgaW1wb3J0IFFSdW5uYWJsZQoKCgpjbGFzcyBSdW5uYWJsZShRUnVubmFibGUpOgoKICAgIFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnREFNR1JVTkFCTEUnCiAgICBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJ1J1bm5hYmxlJwogICAgX25hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdEQU1HIFJ1bm5hYmxlJwoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXNrLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHN1cGVyKFJ1bm5hYmxlLCBzZWxmKS5fX2luaXRfXygpCgogICAgICAgIHNlbGYudGFzayAgICAgICAgICAgICAgICAgICA9IHRhc2sKICAgICAgICBzZWxmLmFyZ3MgICAgICAgICAgICAgICAgICAgPSBhcmdzCiAgICAgICAgc2VsZi5rd2FyZ3MgICAgICAgICAgICAgICAgID0ga3dhcmdzCgogICAgQHByb3BlcnR5CiAgICBkZWYgbmFtZShzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQoKICAgIEBuYW1lLnNldHRlcgogICAgZGVmIG5hbWUoc2VsZiwgdmFsKToKICAgICAgICBzZWxmLl9uYW1lICAgICAgICAgICAgICAgICA9IHZhbAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ3JlYXRlZCBieSBwYW5kYSBvbiAzLzIwLzIwMjAgLSA2OjE3IEFNCiMgwqkgMjAxNyAtIDIwMTkgREFNR3RlYW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQKPHxmaW1fZW5kfD4="]
["e738da8cef1405c3d87120622ed68df1f2c7fc3f-1","e738da8cef1405c3d87120622ed68df1f2c7fc3f","PHxmaW1fcHJlZml4fD4KZnJvbSB0aW1lIGltcG9ydCBzbGVlcAoKaW1wb3J0IG9zCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCByZXF1ZXN0cwpmcm9tIGJhc2U2NCBpbXBvcnQgYjY0ZGVjb2RlCgppbXBvcnQgbWF0aAppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gaXRlcmF0aW9uX3V0aWxpdGllcyBpbXBvcnQgZGVlcGZsYXR0ZW4KZnJvbSByZXF1ZXN0cyBpbXBvcnQgUmVhZFRpbWVvdXQKZnJvbSB1cmxfbm9ybWFsaXplIGltcG9ydCB1cmxfbm9ybWFsaXplCmZyb20gdXJsbGliIGltcG9ydCBwYXJzZSBhcyB1cmxwYXJzZQoKZnJvbSBQSUwgaW1wb3J0IEltYWdlCmltcG9ydCBpbWFnZWhhc2gKClNQTEFTSF9FTkRQT0lOVCA9ICJodHRwOi8vbG9jYWxob3N0OjgwNTAvIgoKQUNDRVRFRF9NSU1FX1RZUEVTID0gewogICAgJ2ltYWdlL2pwZWcnOiAnanBnJywKICAgICdpbWFnZS9wbmcnOiAncG5nJywKICAgICdpbWFnZS93ZWJwJzogJ3dlYnAnCn0KCkRFRkFVTFRfSEVBREVSID0gewogICAgJ0NvbnRlbnQtVHlwZSc6ICJhcHBsaWNhdGlvbi9qc29uIgp9CgpUSFJFU0hPTEQgPSAyCgoKZGVmIHRyaV9tYXRyaXgobHN0LCBjYWxsYmFjaywgcGF0aHM9W10sIGltYWdlcz1bXSk6CiAgICBkZWxldGVkID0gW10KICAgIHNpemUgPSBsZW4obHN0KQogICAgbSA9IG5wLnplcm9zKChzaXplLCBzaXplKSkKICAgIGZvciBpIGluIHJhbmdlKDEsIHNpemUpOgogICAgICAgIGZvciBqIGluIHJhbmdlKDAsIGkpOgogICAgICAgICAgICBtW2ldW2pdLCBkZWxldGVkID0gY2FsbGJhY2soaSwgaiwgbHN0LCBwYXRocz1wYXRocywgaW1hZ2VzPWltYWdlcywgZGVsZXRlZD1kZWxldGVkKQogICAgcmV0dXJuIG0KCgpkZWYgcGVyY2VwdHVhbF9oYXNoX2NtcCh4LCB5LCBsc3QsIHBhdGhzPVtdLCBpbWFnZXM9W10sIGRlbGV0ZWQ9W10pOgoKICAgIGlmIHggaW4gZGVsZXRlZCBvciB5IGluIGRlbGV0ZWQ6CiAgICAgICAgcmV0dXJuIC0xLCBkZWxldGVkCgogICAgZGVidWdfYSA9IHBhdGhzW3hdCiAgICBkZWJ1Z19iID0gcGF0aHNbeV0KICAgIGRlbHRhID0gKGxzdFt4XSAtIGxzdFt5XSkKCiAgICBpZiBtYXRoLmZhYnMoZGVsdGEpIDwgVEhSRVNIT0xEOgogICAgICAgICMgRGVsZXRlIGltYWdlIHdpdGggc21hbGxlciBkaW1lbnNpb25zCiAgICAgICAgaWYgaW1hZ2VzW3hdLnNpemVbMF0qaW1hZ2VzW3hdLnNpemVbMV0gPiBpbWFnZXNbeV0uc2l6ZVswXSppbWFnZXNbeV0uc2l6ZVsxXToKICAgICAgICAgICAgb3MucmVtb3ZlKHBhdGhzW3ldKQogICAgICAgICAgICBkZWxldGVkLmFwcGVuZCh5KQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG9zLnJlbW92ZShwYXRoc1t4XSkKICAgICAgICAgICAgZGVsZXRlZC5hcHBlbmQoeCkKCiAgICByZXR1cm4gZGVsdGEsIGRlbGV0ZWQKCiMgUHJvYmFibHkgdGhlIGJlc3Qgc2NyYXBlciBpJ3ZlIGV2ZXIgbWFkZSEKZGVmIHNjcmFwZV9oYXJfZXh0cmFjdChzcmMsIGhhcj1UcnVlLCBwbmc9VHJ1ZSwgd2FpdD0zLCBvdXRwdXRfZm9sZGVyPSdkZWZhdWx0JywgdmVyYm9zZT1GYWxzZSk6CiAgICBib2R5ID0gewogICAgICAgICJ1cmwiOiB1cmxfbm9ybWFsaXplKHNyYyksCiAgICAgICAgIndhaXQiOiB3YWl0LAogICAgICAgICJoYXIiOiAxIGlmIGhhciBlbHNlIDAsCiAgICAgICAgInBuZyI6IDEgaWYgcG5nIGVsc2UgMCwKICAgICAgICAicmVzcG9uc2VfYm9keSI6IDEKICAgIH0KCiAgICB0cnk6CiAgICAgICAgcmVzID0gcmVxdWVzdHMucG9zdCh1cmxwYXJzZS51cmxqb2luKFNQTEFTSF9FTkRQT0lOVCwgJy9yZW5kZXIuanNvbicpLCBoZWFkZXJzPURFRkFVTFRfSEVBREVSLCBqc29uPWJvZHksIHRpbWVvdXQ9MTApCiAgICAgICAgY29udGVudCA9IHJlcy5qc29uKCkKICAgIGV4Y2VwdCBSZWFkVGltZW91dCBhcyBlOgogICAgICAgIHByaW50KCJGQUlMVVJFOiBUaGUgd2ViZHJpdmVyIHNlcnZlciB3YXMgbm90IHJlc3BvbmRpbmcgKHRpbWVvdXQpLiBFbnN1cmUgdGhlIHNlcnZlciBpcyB3b3JraW5nIHByb3Blcmx5LiIpCiAgICAgICAgcmV0dXJuIC0xCiAgICBleGNlcHQgQ29ubmVjdGlvbkVycm9yIGFzIGU6CiAgICAgICAgcHJpbnQoIkZBSUxVUkU6IEEgbmV0d29yayBlcnJvciBoYXMgb2NjdXJyZWQuIFBsZWFzZSBjaGVjayB0aGUgc2VydmVyJ3MgaW50ZXJuZXQgY29ubmVjdGlvbi4iKQogICAgICAgIHJldHVybiAtMgoKICAgICMgT2J0YWluIGltYWdlIGxpc3QgZnJvbSBIQVIKICAgIGVudHJpZXMgPSBjb250ZW50WydoYXInXVsnbG9nJ11bJ2VudHJpZXMnXQogICAgaW1hZ2VfcmVxdWVzdHMgPSBbeCBmb3IgeCBpbiBlbnRyaWVzIGlmICdpbWFnZScgaW4geFsncmVzcG9uc2UnXVsnY29udGVudCddWydtaW1lVHlwZSddIGFuZCAncmVzcG9uc2UnIGluIHhdCgogICAgIyBDcmVhdGUgZGlyZWN0b3J5IHN0cnVjdHVyZQogICAgcGF0aCA9IGYie291dHB1dF9mb2xkZXJ9LyIKICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHBhdGgpOgogICAgICAgIG9zLm1rZGlyKHBhdGgpCgogICAgIyBEb3dubG9hZCBhbGwgaW1hZ2VzIGFuZCBzYXZlIHRvIG1hY2hpbmUKICAgIHJlc3VsdHMgPSBbXQogICAgY291bnRlciA9IDAKICAgIGZvciBpbWFnZSBpbiBpbWFnZV9yZXF1ZXN0czoKICAgICAgICBjb250ZW50ID0gaW1hZ2VbJ3Jlc3BvbnNlJ11bJ2NvbnRlbnQnXQogICAgICAgIGlmIGFueSh4IGluIGNvbnRlbnRbJ21pbWVUeXBlJ10gZm9yIHggaW4gQUNDRVRFRF9NSU1FX1RZUEVTLmtleXMoKSk6CiAgICAgICAgICAgIGV4dGVuc2lvbiA9IEFDQ0VURURfTUlNRV9UWVBFU1tjb250ZW50WydtaW1lVHlwZSddXQogICAgICAgICAgICBmaWxlbmFtZSA9IGYic291cmNlX3tjb3VudGVyOjA0fS57ZXh0ZW5zaW9ufSIgICMgdXJscGFyc2UudXJscGFyc2UoWydyZXNwb25zZSddWyd1cmwnXSkucGF0aC5yc3BsaXQoIi8iKVstMV0KCiAgICAgICAgICAgIHN1Y2Nlc3MgPSBGYWxzZQogICAgICAgICAgICBlcnJvciA9IE5vbmUKCiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocGF0aCwgZmlsZW5hbWUpLCAnd2InKSBhcyBmOgogICAgICAgICAgICAgICAgICAgIGYud3JpdGUoYjY0ZGVjb2RlKGNvbnRlbnRbJ3RleHQnXSkpCiAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFRydWUKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgZXJyb3IgPSBlCgogICAgICAgICAgICByZXN1bHRzLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAidXJsIjogaW1hZ2VbJ3JlcXVlc3QnXVsndXJsJ10sCiAgICAgICAgICAgICAgICAiZmlsZW5hbWUiOiBmaWxlbmFtZSwKICAgICAgICAgICAgICAgICJzdWNjZXNzIjogc3VjY2VzcywKICAgICAgICAgICAgICAgICJlcnJvciI6IGVycm9yCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICBwcmludChmIntmaWxlbmFtZX0gc2F2ZWQiKQoKICAgICAgICAgICAgY291bnRlciArPSAxCgogICAgIyBIYW5kbGUgZHVwbGljYXRlcwoKICAgIGltYWdlcyA9IFtdCiAgICBmb3IgeCBpbiBvcy5saXN0ZGlyKHBhdGgpOgogICAgICAgIHRyeToKICAgICAgICAgICAgaW1hZ2VzLmFwcGVuZChJbWFnZS5vcGVuKG9zLnBhdGguam9pbihwYXRoLCB4KSkpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBwcmludChlKQogICAgIyBUT0RPOiBJZiBmaWxlIGV4dGVuc2lvbiBpcyBvZiBpbWFnZQoKICAgIHRyeToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGhhc2hlcyA9IFtpbWFnZWhhc2gud2hhc2goeCkgZm9yIHggaW4gaW1hZ2VzXQogICAgICAgIHRyaV9tYXRyaXgoaGFzaGVzLCBwZXJjZXB0dWFsX2hhc2hfY21wLCBwYXRocz1bb3MucGF0aC5qb2luKHBhdGgsIHgpIGZvciB4IGluIG9zLmxpc3RkaXIocGF0aCldLCBpbWFnZXM9aW1hZ2VzKQo8fGZpbV9lbmR8Pg=="]
["e738da8cef1405c3d87120622ed68df1f2c7fc3f-2","e738da8cef1405c3d87120622ed68df1f2c7fc3f","PHxmaW1fcHJlZml4fD4KZnJvbSB0aW1lIGltcG9ydCBzbGVlcAoKaW1wb3J0IG9zCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCByZXF1ZXN0cwpmcm9tIGJhc2U2NCBpbXBvcnQgYjY0ZGVjb2RlCgppbXBvcnQgbWF0aAppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gaXRlcmF0aW9uX3V0aWxpdGllcyBpbXBvcnQgZGVlcGZsYXR0ZW4KZnJvbSByZXF1ZXN0cyBpbXBvcnQgUmVhZFRpbWVvdXQKZnJvbSB1cmxfbm9ybWFsaXplIGltcG9ydCB1cmxfbm9ybWFsaXplCmZyb20gdXJsbGliIGltcG9ydCBwYXJzZSBhcyB1cmxwYXJzZQoKZnJvbSBQSUwgaW1wb3J0IEltYWdlCmltcG9ydCBpbWFnZWhhc2gKClNQTEFTSF9FTkRQT0lOVCA9ICJodHRwOi8vbG9jYWxob3N0OjgwNTAvIgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpBQ0NFVEVEX01JTUVfVFlQRVMgPSB7CiAgICAnaW1hZ2UvanBlZyc6ICdqcGcnLAogICAgJ2ltYWdlL3BuZyc6ICdwbmcnLAogICAgJ2ltYWdlL3dlYnAnOiAnd2VicCcKPHxmaW1fZW5kfD4="]
["e738da8cef1405c3d87120622ed68df1f2c7fc3f-3","e738da8cef1405c3d87120622ed68df1f2c7fc3f","PHxmaW1fcHJlZml4fD4KZnJvbSB0aW1lIGltcG9ydCBzbGVlcAoKaW1wb3J0IG9zCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCByZXF1ZXN0cwpmcm9tIGJhc2U2NCBpbXBvcnQgYjY0ZGVjb2RlCgppbXBvcnQgbWF0aAppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gaXRlcmF0aW9uX3V0aWxpdGllcyBpbXBvcnQgZGVlcGZsYXR0ZW4KZnJvbSByZXF1ZXN0cyBpbXBvcnQgUmVhZFRpbWVvdXQKZnJvbSB1cmxfbm9ybWFsaXplIGltcG9ydCB1cmxfbm9ybWFsaXplCmZyb20gdXJsbGliIGltcG9ydCBwYXJzZSBhcyB1cmxwYXJzZQoKZnJvbSBQSUwgaW1wb3J0IEltYWdlCmltcG9ydCBpbWFnZWhhc2gKClNQTEFTSF9FTkRQT0lOVCA9ICJodHRwOi8vbG9jYWxob3N0OjgwNTAvIgoKQUNDRVRFRF9NSU1FX1RZUEVTID0gewogICAgJ2ltYWdlL2pwZWcnOiAnanBnJywKICAgICdpbWFnZS9wbmcnOiAncG5nJywKICAgICdpbWFnZS93ZWJwJzogJ3dlYnAnCn0KCkRFRkFVTFRfSEVBREVSID0gewogICAgJ0NvbnRlbnQtVHlwZSc6ICJhcHBsaWNhdGlvbi9qc29uIgp9CgpUSFJFU0hPTEQgPSAyCgoKZGVmIHRyaV9tYXRyaXgobHN0LCBjYWxsYmFjaywgcGF0aHM9W10sIGltYWdlcz1bXSk6CiAgICBkZWxldGVkID0gW10KICAgIHNpemUgPSBsZW4obHN0KQogICAgbSA9IG5wLnplcm9zKChzaXplLCBzaXplKSkKICAgIGZvciBpIGluIHJhbmdlKDEsIHNpemUpOgogICAgICAgIGZvciBqIGluIHJhbmdlKDAsIGkpOgogICAgICAgICAgICBtW2ldW2pdLCBkZWxldGVkID0gY2FsbGJhY2soaSwgaiwgbHN0LCBwYXRocz1wYXRocywgaW1hZ2VzPWltYWdlcywgZGVsZXRlZD1kZWxldGVkKQogICAgcmV0dXJuIG0KCgpkZWYgcGVyY2VwdHVhbF9oYXNoX2NtcCh4LCB5LCBsc3QsIHBhdGhzPVtdLCBpbWFnZXM9W10sIGRlbGV0ZWQ9W10pOgoKICAgIGlmIHggaW4gZGVsZXRlZCBvciB5IGluIGRlbGV0ZWQ6CiAgICAgICAgcmV0dXJuIC0xLCBkZWxldGVkCgogICAgZGVidWdfYSA9IHBhdGhzW3hdCiAgICBkZWJ1Z19iID0gcGF0aHNbeV0KICAgIGRlbHRhID0gKGxzdFt4XSAtIGxzdFt5XSkKCiAgICBpZiBtYXRoLmZhYnMoZGVsdGEpIDwgVEhSRVNIT0xEOgogICAgICAgICMgRGVsZXRlIGltYWdlIHdpdGggc21hbGxlciBkaW1lbnNpb25zCiAgICAgICAgaWYgaW1hZ2VzW3hdLnNpemVbMF0qaW1hZ2VzW3hdLnNpemVbMV0gPiBpbWFnZXNbeV0uc2l6ZVswXSppbWFnZXNbeV0uc2l6ZVsxXToKICAgICAgICAgICAgb3MucmVtb3ZlKHBhdGhzW3ldKQogICAgICAgICAgICBkZWxldGVkLmFwcGVuZCh5KQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG9zLnJlbW92ZShwYXRoc1t4XSkKICAgICAgICAgICAgZGVsZXRlZC5hcHBlbmQoeCkKCiAgICByZXR1cm4gZGVsdGEsIGRlbGV0ZWQKCiMgUHJvYmFibHkgdGhlIGJlc3Qgc2NyYXBlciBpJ3ZlIGV2ZXIgbWFkZSEKZGVmIHNjcmFwZV9oYXJfZXh0cmFjdChzcmMsIGhhcj1UcnVlLCBwbmc9VHJ1ZSwgd2FpdD0zLCBvdXRwdXRfZm9sZGVyPSdkZWZhdWx0JywgdmVyYm9zZT1GYWxzZSk6CiAgICBib2R5ID0gewogICAgICAgICJ1cmwiOiB1cmxfbm9ybWFsaXplKHNyYyksCiAgICAgICAgIndhaXQiOiB3YWl0LAogICAgICAgICJoYXIiOiAxIGlmIGhhciBlbHNlIDAsCiAgICAgICAgInBuZyI6IDEgaWYgcG5nIGVsc2UgMCwKICAgICAgICAicmVzcG9uc2VfYm9keSI6IDEKICAgIH0KCiAgICB0cnk6CiAgICAgICAgcmVzID0gcmVxdWVzdHMucG9zdCh1cmxwYXJzZS51cmxqb2luKFNQTEFTSF9FTkRQT0lOVCwgJy9yZW5kZXIuanNvbicpLCBoZWFkZXJzPURFRkFVTFRfSEVBREVSLCBqc29uPWJvZHksIHRpbWVvdXQ9MTApCiAgICAgICAgY29udGVudCA9IHJlcy5qc29uKCkKICAgIGV4Y2VwdCBSZWFkVGltZW91dCBhcyBlOgogICAgICAgIHByaW50KCJGQUlMVVJFOiBUaGUgd2ViZHJpdmVyIHNlcnZlciB3YXMgbm90IHJlc3BvbmRpbmcgKHRpbWVvdXQpLiBFbnN1cmUgdGhlIHNlcnZlciBpcyB3b3JraW5nIHByb3Blcmx5LiIpCiAgICAgICAgcmV0dXJuIC0xCiAgICBleGNlcHQgQ29ubmVjdGlvbkVycm9yIGFzIGU6CiAgICAgICAgcHJpbnQoIkZBSUxVUkU6IEEgbmV0d29yayBlcnJvciBoYXMgb2NjdXJyZWQuIFBsZWFzZSBjaGVjayB0aGUgc2VydmVyJ3MgaW50ZXJuZXQgY29ubmVjdGlvbi4iKQogICAgICAgIHJldHVybiAtMgoKICAgICMgT2J0YWluIGltYWdlIGxpc3QgZnJvbSBIQVIKICAgIGVudHJpZXMgPSBjb250ZW50WydoYXInXVsnbG9nJ11bJ2VudHJpZXMnXQogICAgaW1hZ2VfcmVxdWVzdHMgPSBbeCBmb3IgeCBpbiBlbnRyaWVzIGlmICdpbWFnZScgaW4geFsncmVzcG9uc2UnXVsnY29udGVudCddWydtaW1lVHlwZSddIGFuZCAncmVzcG9uc2UnIGluIHhdCgogICAgIyBDcmVhdGUgZGlyZWN0b3J5IHN0cnVjdHVyZQogICAgcGF0aCA9IGYie291dHB1dF9mb2xkZXJ9LyIKICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHBhdGgpOgogICAgICAgIG9zLm1rZGlyKHBhdGgpCgogICAgIyBEb3dubG9hZCBhbGwgaW1hZ2VzIGFuZCBzYXZlIHRvIG1hY2hpbmUKICAgIHJlc3VsdHMgPSBbXQogICAgY291bnRlciA9IDAKICAgIGZvciBpbWFnZSBpbiBpbWFnZV9yZXF1ZXN0czoKICAgICAgICBjb250ZW50ID0gaW1hZ2VbJ3Jlc3BvbnNlJ11bJ2NvbnRlbnQnXQogICAgICAgIGlmIGFueSh4IGluIGNvbnRlbnRbJ21pbWVUeXBlJ10gZm9yIHggaW4gQUNDRVRFRF9NSU1FX1RZUEVTLmtleXMoKSk6CiAgICAgICAgICAgIGV4dGVuc2lvbiA9IEFDQ0VURURfTUlNRV9UWVBFU1tjb250ZW50WydtaW1lVHlwZSddXQogICAgICAgICAgICBmaWxlbmFtZSA9IGYic291cmNlX3tjb3VudGVyOjA0fS57ZXh0ZW5zaW9ufSIgICMgdXJscGFyc2UudXJscGFyc2UoWydyZXNwb25zZSddWyd1cmwnXSkucGF0aC5yc3BsaXQoIi8iKVstMV0KCiAgICAgICAgICAgIHN1Y2Nlc3MgPSBGYWxzZQogICAgICAgICAgICBlcnJvciA9IE5vbmUKCiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocGF0aCwgZmlsZW5hbWUpLCAnd2InKSBhcyBmOgogICAgICAgICAgICAgICAgICAgIGYud3JpdGUoYjY0ZGVjb2RlKGNvbnRlbnRbJ3RleHQnXSkpCiAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFRydWUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAgICBlcnJvciA9IGUKCiAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHsKPHxmaW1fZW5kfD4="]
["e738da8cef1405c3d87120622ed68df1f2c7fc3f-4","e738da8cef1405c3d87120622ed68df1f2c7fc3f","PHxmaW1fcHJlZml4fD4KZnJvbSB0aW1lIGltcG9ydCBzbGVlcAoKaW1wb3J0IG9zCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCByZXF1ZXN0cwpmcm9tIGJhc2U2NCBpbXBvcnQgYjY0ZGVjb2RlCgppbXBvcnQgbWF0aAppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gaXRlcmF0aW9uX3V0aWxpdGllcyBpbXBvcnQgZGVlcGZsYXR0ZW4KZnJvbSByZXF1ZXN0cyBpbXBvcnQgUmVhZFRpbWVvdXQKZnJvbSB1cmxfbm9ybWFsaXplIGltcG9ydCB1cmxfbm9ybWFsaXplCmZyb20gdXJsbGliIGltcG9ydCBwYXJzZSBhcyB1cmxwYXJzZQoKZnJvbSBQSUwgaW1wb3J0IEltYWdlCmltcG9ydCBpbWFnZWhhc2gKClNQTEFTSF9FTkRQT0lOVCA9ICJodHRwOi8vbG9jYWxob3N0OjgwNTAvIgoKQUNDRVRFRF9NSU1FX1RZUEVTID0gewogICAgJ2ltYWdlL2pwZWcnOiAnanBnJywKICAgICdpbWFnZS9wbmcnOiAncG5nJywKICAgICdpbWFnZS93ZWJwJzogJ3dlYnAnCn0KCkRFRkFVTFRfSEVBREVSID0gewogICAgJ0NvbnRlbnQtVHlwZSc6ICJhcHBsaWNhdGlvbi9qc29uIgp9CgpUSFJFU0hPTEQgPSAyCgoKZGVmIHRyaV9tYXRyaXgobHN0LCBjYWxsYmFjaywgcGF0aHM9W10sIGltYWdlcz1bXSk6CiAgICBkZWxldGVkID0gW10KICAgIHNpemUgPSBsZW4obHN0KQogICAgbSA9IG5wLnplcm9zKChzaXplLCBzaXplKSkKICAgIGZvciBpIGluIHJhbmdlKDEsIHNpemUpOgogICAgICAgIGZvciBqIGluIHJhbmdlKDAsIGkpOgogICAgICAgICAgICBtW2ldW2pdLCBkZWxldGVkID0gY2FsbGJhY2soaSwgaiwgbHN0LCBwYXRocz1wYXRocywgaW1hZ2VzPWltYWdlcywgZGVsZXRlZD1kZWxldGVkKQogICAgcmV0dXJuIG0KCgpkZWYgcGVyY2VwdHVhbF9oYXNoX2NtcCh4LCB5LCBsc3QsIHBhdGhzPVtdLCBpbWFnZXM9W10sIGRlbGV0ZWQ9W10pOgoKICAgIGlmIHggaW4gZGVsZXRlZCBvciB5IGluIGRlbGV0ZWQ6CiAgICAgICAgcmV0dXJuIC0xLCBkZWxldGVkCgogICAgZGVidWdfYSA9IHBhdGhzW3hdCiAgICBkZWJ1Z19iID0gcGF0aHNbeV0KICAgIGRlbHRhID0gKGxzdFt4XSAtIGxzdFt5XSkKCiAgICBpZiBtYXRoLmZhYnMoZGVsdGEpIDwgVEhSRVNIT0xEOgogICAgICAgICMgRGVsZXRlIGltYWdlIHdpdGggc21hbGxlciBkaW1lbnNpb25zCiAgICAgICAgaWYgaW1hZ2VzW3hdLnNpemVbMF0qaW1hZ2VzW3hdLnNpemVbMV0gPiBpbWFnZXNbeV0uc2l6ZVswXSppbWFnZXNbeV0uc2l6ZVsxXToKICAgICAgICAgICAgb3MucmVtb3ZlKHBhdGhzW3ldKQogICAgICAgICAgICBkZWxldGVkLmFwcGVuZCh5KQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG9zLnJlbW92ZShwYXRoc1t4XSkKICAgICAgICAgICAgZGVsZXRlZC5hcHBlbmQoeCkKCiAgICByZXR1cm4gZGVsdGEsIGRlbGV0ZWQKCiMgUHJvYmFibHkgdGhlIGJlc3Qgc2NyYXBlciBpJ3ZlIGV2ZXIgbWFkZSEKZGVmIHNjcmFwZV9oYXJfZXh0cmFjdChzcmMsIGhhcj1UcnVlLCBwbmc9VHJ1ZSwgd2FpdD0zLCBvdXRwdXRfZm9sZGVyPSdkZWZhdWx0JywgdmVyYm9zZT1GYWxzZSk6CiAgICBib2R5ID0gewogICAgICAgICJ1cmwiOiB1cmxfbm9ybWFsaXplKHNyYyksCiAgICAgICAgIndhaXQiOiB3YWl0LAogICAgICAgICJoYXIiOiAxIGlmIGhhciBlbHNlIDAsCiAgICAgICAgInBuZyI6IDEgaWYgcG5nIGVsc2UgMCwKICAgICAgICAicmVzcG9uc2VfYm9keSI6IDEKICAgIH0KCiAgICB0cnk6CiAgICAgICAgcmVzID0gcmVxdWVzdHMucG9zdCh1cmxwYXJzZS51cmxqb2luKFNQTEFTSF9FTkRQT0lOVCwgJy9yZW5kZXIuanNvbicpLCBoZWFkZXJzPURFRkFVTFRfSEVBREVSLCBqc29uPWJvZHksIHRpbWVvdXQ9MTApCiAgICAgICAgY29udGVudCA9IHJlcy5qc29uKCkKICAgIGV4Y2VwdCBSZWFkVGltZW91dCBhcyBlOgogICAgICAgIHByaW50KCJGQUlMVVJFOiBUaGUgd2ViZHJpdmVyIHNlcnZlciB3YXMgbm90IHJlc3BvbmRpbmcgKHRpbWVvdXQpLiBFbnN1cmUgdGhlIHNlcnZlciBpcyB3b3JraW5nIHByb3Blcmx5LiIpCiAgICAgICAgcmV0dXJuIC0xCiAgICBleGNlcHQgQ29ubmVjdGlvbkVycm9yIGFzIGU6CiAgICAgICAgcHJpbnQoIkZBSUxVUkU6IEEgbmV0d29yayBlcnJvciBoYXMgb2NjdXJyZWQuIFBsZWFzZSBjaGVjayB0aGUgc2VydmVyJ3MgaW50ZXJuZXQgY29ubmVjdGlvbi4iKQogICAgICAgIHJldHVybiAtMgoKICAgICMgT2J0YWluIGltYWdlIGxpc3QgZnJvbSBIQVIKICAgIGVudHJpZXMgPSBjb250ZW50WydoYXInXVsnbG9nJ11bJ2VudHJpZXMnXQogICAgaW1hZ2VfcmVxdWVzdHMgPSBbeCBmb3IgeCBpbiBlbnRyaWVzIGlmICdpbWFnZScgaW4geFsncmVzcG9uc2UnXVsnY29udGVudCddWydtaW1lVHlwZSddIGFuZCAncmVzcG9uc2UnIGluIHhdCgogICAgIyBDcmVhdGUgZGlyZWN0b3J5IHN0cnVjdHVyZQogICAgcGF0aCA9IGYie291dHB1dF9mb2xkZXJ9LyIKICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHBhdGgpOgogICAgICAgIG9zLm1rZGlyKHBhdGgpCgogICAgIyBEb3dubG9hZCBhbGwgaW1hZ2VzIGFuZCBzYXZlIHRvIG1hY2hpbmUKICAgIHJlc3VsdHMgPSBbXQogICAgY291bnRlciA9IDAKICAgIGZvciBpbWFnZSBpbiBpbWFnZV9yZXF1ZXN0czoKICAgICAgICBjb250ZW50ID0gaW1hZ2VbJ3Jlc3BvbnNlJ11bJ2NvbnRlbnQnXQogICAgICAgIGlmIGFueSh4IGluIGNvbnRlbnRbJ21pbWVUeXBlJ10gZm9yIHggaW4gQUNDRVRFRF9NSU1FX1RZUEVTLmtleXMoKSk6CiAgICAgICAgICAgIGV4dGVuc2lvbiA9IEFDQ0VURURfTUlNRV9UWVBFU1tjb250ZW50WydtaW1lVHlwZSddXQogICAgICAgICAgICBmaWxlbmFtZSA9IGYic291cmNlX3tjb3VudGVyOjA0fS57ZXh0ZW5zaW9ufSIgICMgdXJscGFyc2UudXJscGFyc2UoWydyZXNwb25zZSddWyd1cmwnXSkucGF0aC5yc3BsaXQoIi8iKVstMV0KCiAgICAgICAgICAgIHN1Y2Nlc3MgPSBGYWxzZQogICAgICAgICAgICBlcnJvciA9IE5vbmUKCiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocGF0aCwgZmlsZW5hbWUpLCAnd2InKSBhcyBmOgogICAgICAgICAgICAgICAgICAgIGYud3JpdGUoYjY0ZGVjb2RlKGNvbnRlbnRbJ3RleHQnXSkpCiAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFRydWUKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgZXJyb3IgPSBlCgogICAgICAgICAgICByZXN1bHRzLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAidXJsIjogaW1hZ2VbJ3JlcXVlc3QnXVsndXJsJ10sCiAgICAgICAgICAgICAgICAiZmlsZW5hbWUiOiBmaWxlbmFtZSwKICAgICAgICAgICAgICAgICJzdWNjZXNzIjogc3VjY2VzcywKICAgICAgICAgICAgICAgICJlcnJvciI6IGVycm9yCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICBwcmludChmIntmaWxlbmFtZX0gc2F2ZWQiKQoKICAgICAgICAgICAgY291bnRlciArPSAxCgogICAgIyBIYW5kbGUgZHVwbGljYXRlcwoKICAgIGltYWdlcyA9IFtdCiAgICBmb3IgeCBpbiBvcy5saXN0ZGlyKHBhdGgpOgogICAgICAgIHRyeToKICAgICAgICAgICAgaW1hZ2VzLmFwcGVuZChJbWFnZS5vcGVuKG9zLnBhdGguam9pbihwYXRoLCB4KSkpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBwcmludChlKQogICAgIyBUT0RPOiBJZiBmaWxlIGV4dGVuc2lvbiBpcyBvZiBpbWFnZQoKICAgIHRyeToKICAgICAgICBoYXNoZXMgPSBbaW1hZ2VoYXNoLndoYXNoKHgpIGZvciB4IGluIGltYWdlc10KICAgICAgICB0cmlfbWF0cml4KGhhc2hlcywgcGVyY2VwdHVhbF9oYXNoX2NtcCwgcGF0aHM9W29zLnBhdGguam9pbihwYXRoLCB4KSBmb3IgeCBpbiBvcy5saXN0ZGlyKHBhdGgpXSwgaW1hZ2VzPWltYWdlcykKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBwcmludChlKQoKICAgIHJldHVybiBjb3VudGVyCgoKIyBSZXF1ZXN0cyBhbmQgc2F2ZXMgYSB3b3JraW5nIHNuYXBzaG90IG9mIHRoZSB3ZWIgcGFnZS4KIyBHb29kIGZvciBkZXRlY3RpbmcgYmFja2dyb3VuZCBpbWFnZXMKZGVmIHNjcmFwZV9zcGxhc2hfc25hcChzcmMpOgogICAgcGFyYW1zID0gewogICAgICAgICd1cmwnOiBzcmMsCiAgICAgICAgJ3dpZHRoJzogMTkyMCwKICAgICAgICAnd2FpdCc6IDMsCiAgICAgICAgJ3JlbmRlcl9hbGwnOiAxCiAgICB9CgogICAgcHJpbnQoZiJHRVQge3NyY30iKQogICAgcmV0dXJuIHJlcXVlc3RzLmdldCgiaHR0cDovL2xvY2FsaG9zdDo4MDUwL3JlbmRlci5wbmciLCBwYXJhbXMpCgoKZGVmIHNjcmFwZV9pbWFnZXNfd2ViZHJpdmVyKHVybCwgb3V0cHV0X3BhdGg9IiIpOgogICAgIyBUT0RPOiBWYWxpZGF0ZSBmb3IgVVJMCgogICAgIyBTdGFydCB3ZWJkcml2ZXIKICAgIGRyaXZlciA9IHt9CiAgICBkcml2ZXIuZ2V0KHVybCkKCiAgICBzbGVlcCgzKQoKICAgICMgR2V0IGFsbCBpbWFnZXMgaW4gRE9NCiAgICBlbGVtZW50cyA9IGxpc3QoZGVlcGZsYXR0ZW4oW3guZ2V0X3Byb3BlcnR5KCJjdXJyZW50U3JjIikgZm9yIHggaW4gZHJpdmVyLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gZG9jdW1lbnQuaW1hZ2VzIildLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzPWxpc3QpKQoKICAgICMgR2V0IGEgbGlzdCBvZiBhbGwgZGlzdGluY3RpdmUgVVJMIHN0cmluZ3MgKFJlbW92ZSBkdXBsaWNhdGVzKQogICAgc3JjcyA9IFtdCiAgICBbc3Jjcy5hcHBlbmQoeCkgZm9yIHggaW4gZWxlbWVudHMgaWYgeCBub3QgaW4gc3Jjc10KCiAgICAjIERvd25sb2FkIGltYWdlIGxpc3QKICAgIGxvZyA9IFtdCgogICAgZm9yIHNyYyBpbiBzcmNzOgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHN1Y2Nlc3MgPSBGYWxzZQoKICAgICAgICB0cnk6CiAgICAgICAgICAgICMgVE9ETzogTW9kaWZ5IHdnZXQgbGlicmFyeSB0byBhdm9pZCBvdmVyd3JpdGluZwo8fGZpbV9lbmR8Pg=="]
["e738da8cef1405c3d87120622ed68df1f2c7fc3f-5","e738da8cef1405c3d87120622ed68df1f2c7fc3f","PHxmaW1fcHJlZml4fD4KZnJvbSB0aW1lIGltcG9ydCBzbGVlcAoKaW1wb3J0IG9zCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCByZXF1ZXN0cwpmcm9tIGJhc2U2NCBpbXBvcnQgYjY0ZGVjb2RlCgppbXBvcnQgbWF0aAppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gaXRlcmF0aW9uX3V0aWxpdGllcyBpbXBvcnQgZGVlcGZsYXR0ZW4KZnJvbSByZXF1ZXN0cyBpbXBvcnQgUmVhZFRpbWVvdXQKZnJvbSB1cmxfbm9ybWFsaXplIGltcG9ydCB1cmxfbm9ybWFsaXplCmZyb20gdXJsbGliIGltcG9ydCBwYXJzZSBhcyB1cmxwYXJzZQoKZnJvbSBQSUwgaW1wb3J0IEltYWdlCmltcG9ydCBpbWFnZWhhc2gKClNQTEFTSF9FTkRQT0lOVCA9ICJodHRwOi8vbG9jYWxob3N0OjgwNTAvIgoKQUNDRVRFRF9NSU1FX1RZUEVTID0gewogICAgJ2ltYWdlL2pwZWcnOiAnanBnJywKICAgICdpbWFnZS9wbmcnOiAncG5nJywKICAgICdpbWFnZS93ZWJwJzogJ3dlYnAnCn0KCkRFRkFVTFRfSEVBREVSID0gewogICAgJ0NvbnRlbnQtVHlwZSc6ICJhcHBsaWNhdGlvbi9qc29uIgp9CgpUSFJFU0hPTEQgPSAyCgoKZGVmIHRyaV9tYXRyaXgobHN0LCBjYWxsYmFjaywgcGF0aHM9W10sIGltYWdlcz1bXSk6CiAgICBkZWxldGVkID0gW10KICAgIHNpemUgPSBsZW4obHN0KQogICAgbSA9IG5wLnplcm9zKChzaXplLCBzaXplKSkKICAgIGZvciBpIGluIHJhbmdlKDEsIHNpemUpOgogICAgICAgIGZvciBqIGluIHJhbmdlKDAsIGkpOgogICAgICAgICAgICBtW2ldW2pdLCBkZWxldGVkID0gY2FsbGJhY2soaSwgaiwgbHN0LCBwYXRocz1wYXRocywgaW1hZ2VzPWltYWdlcywgZGVsZXRlZD1kZWxldGVkKQogICAgcmV0dXJuIG0KCgpkZWYgcGVyY2VwdHVhbF9oYXNoX2NtcCh4LCB5LCBsc3QsIHBhdGhzPVtdLCBpbWFnZXM9W10sIGRlbGV0ZWQ9W10pOgoKICAgIGlmIHggaW4gZGVsZXRlZCBvciB5IGluIGRlbGV0ZWQ6CiAgICAgICAgcmV0dXJuIC0xLCBkZWxldGVkCgogICAgZGVidWdfYSA9IHBhdGhzW3hdCiAgICBkZWJ1Z19iID0gcGF0aHNbeV0KICAgIGRlbHRhID0gKGxzdFt4XSAtIGxzdFt5XSkKCiAgICBpZiBtYXRoLmZhYnMoZGVsdGEpIDwgVEhSRVNIT0xEOgogICAgICAgICMgRGVsZXRlIGltYWdlIHdpdGggc21hbGxlciBkaW1lbnNpb25zCiAgICAgICAgaWYgaW1hZ2VzW3hdLnNpemVbMF0qaW1hZ2VzW3hdLnNpemVbMV0gPiBpbWFnZXNbeV0uc2l6ZVswXSppbWFnZXNbeV0uc2l6ZVsxXToKICAgICAgICAgICAgb3MucmVtb3ZlKHBhdGhzW3ldKQogICAgICAgICAgICBkZWxldGVkLmFwcGVuZCh5KQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG9zLnJlbW92ZShwYXRoc1t4XSkKICAgICAgICAgICAgZGVsZXRlZC5hcHBlbmQoeCkKCiAgICByZXR1cm4gZGVsdGEsIGRlbGV0ZWQKCiMgUHJvYmFibHkgdGhlIGJlc3Qgc2NyYXBlciBpJ3ZlIGV2ZXIgbWFkZSEKZGVmIHNjcmFwZV9oYXJfZXh0cmFjdChzcmMsIGhhcj1UcnVlLCBwbmc9VHJ1ZSwgd2FpdD0zLCBvdXRwdXRfZm9sZGVyPSdkZWZhdWx0JywgdmVyYm9zZT1GYWxzZSk6CiAgICBib2R5ID0gewogICAgICAgICJ1cmwiOiB1cmxfbm9ybWFsaXplKHNyYyksCiAgICAgICAgIndhaXQiOiB3YWl0LAogICAgICAgICJoYXIiOiAxIGlmIGhhciBlbHNlIDAsCiAgICAgICAgInBuZyI6IDEgaWYgcG5nIGVsc2UgMCwKICAgICAgICAicmVzcG9uc2VfYm9keSI6IDEKICAgIH0KCiAgICB0cnk6CiAgICAgICAgcmVzID0gcmVxdWVzdHMucG9zdCh1cmxwYXJzZS51cmxqb2luKFNQTEFTSF9FTkRQT0lOVCwgJy9yZW5kZXIuanNvbicpLCBoZWFkZXJzPURFRkFVTFRfSEVBREVSLCBqc29uPWJvZHksIHRpbWVvdXQ9MTApCiAgICAgICAgY29udGVudCA9IHJlcy5qc29uKCkKICAgIGV4Y2VwdCBSZWFkVGltZW91dCBhcyBlOgogICAgICAgIHByaW50KCJGQUlMVVJFOiBUaGUgd2ViZHJpdmVyIHNlcnZlciB3YXMgbm90IHJlc3BvbmRpbmcgKHRpbWVvdXQpLiBFbnN1cmUgdGhlIHNlcnZlciBpcyB3b3JraW5nIHByb3Blcmx5LiIpCiAgICAgICAgcmV0dXJuIC0xCiAgICBleGNlcHQgQ29ubmVjdGlvbkVycm9yIGFzIGU6CiAgICAgICAgcHJpbnQoIkZBSUxVUkU6IEEgbmV0d29yayBlcnJvciBoYXMgb2NjdXJyZWQuIFBsZWFzZSBjaGVjayB0aGUgc2VydmVyJ3MgaW50ZXJuZXQgY29ubmVjdGlvbi4iKQogICAgICAgIHJldHVybiAtMgoKICAgICMgT2J0YWluIGltYWdlIGxpc3QgZnJvbSBIQVIKICAgIGVudHJpZXMgPSBjb250ZW50WydoYXInXVsnbG9nJ11bJ2VudHJpZXMnXQogICAgaW1hZ2VfcmVxdWVzdHMgPSBbeCBmb3IgeCBpbiBlbnRyaWVzIGlmICdpbWFnZScgaW4geFsncmVzcG9uc2UnXVsnY29udGVudCddWydtaW1lVHlwZSddIGFuZCAncmVzcG9uc2UnIGluIHhdCgogICAgIyBDcmVhdGUgZGlyZWN0b3J5IHN0cnVjdHVyZQogICAgcGF0aCA9IGYie291dHB1dF9mb2xkZXJ9LyIKICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHBhdGgpOgogICAgICAgIG9zLm1rZGlyKHBhdGgpCgogICAgIyBEb3dubG9hZCBhbGwgaW1hZ2VzIGFuZCBzYXZlIHRvIG1hY2hpbmUKICAgIHJlc3VsdHMgPSBbXQogICAgY291bnRlciA9IDAKICAgIGZvciBpbWFnZSBpbiBpbWFnZV9yZXF1ZXN0czoKICAgICAgICBjb250ZW50ID0gaW1hZ2VbJ3Jlc3BvbnNlJ11bJ2NvbnRlbnQnXQogICAgICAgIGlmIGFueSh4IGluIGNvbnRlbnRbJ21pbWVUeXBlJ10gZm9yIHggaW4gQUNDRVRFRF9NSU1FX1RZUEVTLmtleXMoKSk6CiAgICAgICAgICAgIGV4dGVuc2lvbiA9IEFDQ0VURURfTUlNRV9UWVBFU1tjb250ZW50WydtaW1lVHlwZSddXQogICAgICAgICAgICBmaWxlbmFtZSA9IGYic291cmNlX3tjb3VudGVyOjA0fS57ZXh0ZW5zaW9ufSIgICMgdXJscGFyc2UudXJscGFyc2UoWydyZXNwb25zZSddWyd1cmwnXSkucGF0aC5yc3BsaXQoIi8iKVstMV0KCiAgICAgICAgICAgIHN1Y2Nlc3MgPSBGYWxzZQogICAgICAgICAgICBlcnJvciA9IE5vbmUKCiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocGF0aCwgZmlsZW5hbWUpLCAnd2InKSBhcyBmOgogICAgICAgICAgICAgICAgICAgIGYud3JpdGUoYjY0ZGVjb2RlKGNvbnRlbnRbJ3RleHQnXSkpCiAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFRydWUKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgZXJyb3IgPSBlCgogICAgICAgICAgICByZXN1bHRzLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAidXJsIjogaW1hZ2VbJ3JlcXVlc3QnXVsndXJsJ10sCiAgICAgICAgICAgICAgICAiZmlsZW5hbWUiOiBmaWxlbmFtZSwKICAgICAgICAgICAgICAgICJzdWNjZXNzIjogc3VjY2VzcywKICAgICAgICAgICAgICAgICJlcnJvciI6IGVycm9yCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICBwcmludChmIntmaWxlbmFtZX0gc2F2ZWQiKQoKICAgICAgICAgICAgY291bnRlciArPSAxCgogICAgIyBIYW5kbGUgZHVwbGljYXRlcwoKICAgIGltYWdlcyA9IFtdCiAgICBmb3IgeCBpbiBvcy5saXN0ZGlyKHBhdGgpOgogICAgICAgIHRyeToKICAgICAgICAgICAgaW1hZ2VzLmFwcGVuZChJbWFnZS5vcGVuKG9zLnBhdGguam9pbihwYXRoLCB4KSkpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBwcmludChlKQogICAgIyBUT0RPOiBJZiBmaWxlIGV4dGVuc2lvbiBpcyBvZiBpbWFnZQoKICAgIHRyeToKICAgICAgICBoYXNoZXMgPSBbaW1hZ2VoYXNoLndoYXNoKHgpIGZvciB4IGluIGltYWdlc10KICAgICAgICB0cmlfbWF0cml4KGhhc2hlcywgcGVyY2VwdHVhbF9oYXNoX2NtcCwgcGF0aHM9W29zLnBhdGguam9pbihwYXRoLCB4KSBmb3IgeCBpbiBvcy5saXN0ZGlyKHBhdGgpXSwgaW1hZ2VzPWltYWdlcykKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBwcmludChlKQoKICAgIHJldHVybiBjb3VudGVyCgoKIyBSZXF1ZXN0cyBhbmQgc2F2ZXMgYSB3b3JraW5nIHNuYXBzaG90IG9mIHRoZSB3ZWIgcGFnZS4KIyBHb29kIGZvciBkZXRlY3RpbmcgYmFja2dyb3VuZCBpbWFnZXMKZGVmIHNjcmFwZV9zcGxhc2hfc25hcChzcmMpOgogICAgcGFyYW1zID0gewogICAgICAgICd1cmwnOiBzcmMsCiAgICAgICAgJ3dpZHRoJzogMTkyMCwKICAgICAgICAnd2FpdCc6IDMsCiAgICAgICAgJ3JlbmRlcl9hbGwnOiAxCiAgICB9CgogICAgcHJpbnQoZiJHRVQge3NyY30iKQogICAgcmV0dXJuIHJlcXVlc3RzLmdldCgiaHR0cDovL2xvY2FsaG9zdDo4MDUwL3JlbmRlci5wbmciLCBwYXJhbXMpCgoKZGVmIHNjcmFwZV9pbWFnZXNfd2ViZHJpdmVyKHVybCwgb3V0cHV0X3BhdGg9IiIpOgogICAgIyBUT0RPOiBWYWxpZGF0ZSBmb3IgVVJMCgogICAgIyBTdGFydCB3ZWJkcml2ZXIKICAgIGRyaXZlciA9IHt9CiAgICBkcml2ZXIuZ2V0KHVybCkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHNsZWVwKDMpCgogICAgIyBHZXQgYWxsIGltYWdlcyBpbiBET00KICAgIGVsZW1lbnRzID0gbGlzdChkZWVwZmxhdHRlbihbeC5nZXRfcHJvcGVydHkoImN1cnJlbnRTcmMiKSBmb3IgeCBpbiBkcml2ZXIuZXhlY3V0ZV9zY3JpcHQoInJldHVybiBkb2N1bWVudC5pbWFnZXMiKV0sCjx8ZmltX2VuZHw+"]
["4131cb9f3716475ae2103b2d83d2a387b5c54776-1","4131cb9f3716475ae2103b2d83d2a387b5c54776","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zLnBhdGggYXMgb3AKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBuaXB5cGUucGlwZWxpbmUuZW5naW5lIGFzIHBlCmltcG9ydCBuaXB5cGUuaW50ZXJmYWNlcy5pbyBhcyBuaW8KCmltcG9ydCBlcGh5cHlwZQpmcm9tIGVwaHlweXBlLm5vZGVzIGltcG9ydCBjcmVhdGVfaXRlcmF0b3IKZnJvbSBlcGh5cHlwZS5kYXRhc2V0cyBpbXBvcnQgZmV0Y2hfb21lZ2FfZGF0YXNldAoKI2Jhc2VfcGF0aCA9IG9wLmpvaW4ob3AuZGlybmFtZShlcGh5cHlwZS5fX2ZpbGVfXyksICcuLicsICdleGFtcGxlcycpCiNkYXRhX3BhdGggPSBmZXRjaF9vbWVnYV9kYXRhc2V0KGJhc2VfcGF0aCkKZGF0YV9wYXRoID0gb3Auam9pbignL3NjcmF0Y2gvaHlydXVrL3NhZmxvd19kYXRhL3NhZmxvd19iaWRzJykKCiMjIyMgUEFSQU1FVEVSUwppbXBvcnQganNvbiAgIyBub3FhCmltcG9ydCBwcHJpbnQgICMgbm9xYQpwYXJhbXMgPSBqc29uLmxvYWQob3BlbigicGFyYW1zLmpzb24iKSkKCnBwcmludC5wcHJpbnQoeydleHBlcmltZW50IHBhcmFtZXRlcnMnOiBwYXJhbXNbImdlbmVyYWwiXX0pCnN1YmplY3RfaWRzID0gcGFyYW1zWyJnZW5lcmFsIl1bInN1YmplY3RfaWRzIl0gICMgc3ViLTAwMwpzZXNzaW9uX2lkcyA9IHBhcmFtc1siZ2VuZXJhbCJdWyJzZXNzaW9uX2lkcyJdCnJ1bl9pZHMgPSBwYXJhbXNbImdlbmVyYWwiXVsicnVuX2lkcyJdICAjIHNlcy0wMDAxCk5KT0JTID0gcGFyYW1zWyJnZW5lcmFsIl1bIk5KT0JTIl0KCnBwcmludC5wcHJpbnQoeydpbnZlcnNlIHBhcmFtZXRlcnMnOiBwYXJhbXNbImludmVyc2UiXX0pCnNwYWNpbmcgPSBwYXJhbXNbImludmVyc2UiXVsnc3BhY2luZyddICAjIGljby01IHZzIG9jdC02CnNuciA9IHBhcmFtc1siaW52ZXJzZSJdWydzbnInXSAgIyB1c2Ugc21hbGxlciBTTlIgZm9yIHJhdyBkYXRhCmludl9tZXRob2QgPSBwYXJhbXNbImludmVyc2UiXVsnaW1nX21ldGhvZCddICAjIHNMT1JFVEEsIE1ORSwgZFNQTSwgTENNVgpwYXJjID0gcGFyYW1zWyJpbnZlcnNlIl1bJ3BhcmNlbGxhdGlvbiddICAjIHBhcmNlbGxhdGlvbiB0byB1c2U6ICdhcGFyYycgdnMgJ2FwYXJjLmEyMDA5cycgICMgbm9xYQojIG5vaXNlIGNvdmFyaWFuY2UgbWF0cml4IGZpbGVuYW1lIHRlbXBsYXRlCm5vaXNlX2Nvdl9mbmFtZSA9IHBhcmFtc1siaW52ZXJzZSJdWydub2lzZV9jb3ZfZm5hbWUnXQoKIyBzZXQgc2JqIGRpciBwYXRoLCBpLmUuIHdoZXJlIHRoZSBGUyBmb2xmZXJzIGFyZQpzdWJqZWN0c19kaXIgPSBvcC5qb2luKGRhdGFfcGF0aCwgcGFyYW1zWyJnZW5lcmFsIl1bInN1YmplY3RzX2RpciJdKQoKIyMjIyMjIyMKCiMgd29ya2Zsb3cgZGlyZWN0b3J5IHdpdGhpbiB0aGUgYGJhc2VfZGlyYApzcmNfcmVjb25zdHJ1Y3Rpb25fcGlwZWxpbmVfbmFtZSA9ICdzb3VyY2VfcmVjb25zdHJ1Y3Rpb25fJyArIFwKICAgIGludl9tZXRob2QgKyAnXycgKyBwYXJjLnJlcGxhY2UoJy4nLCAnJykKCm1haW5fd29ya2Zsb3cgPSBwZS5Xb3JrZmxvdyhuYW1lPXNyY19yZWNvbnN0cnVjdGlvbl9waXBlbGluZV9uYW1lKQptYWluX3dvcmtmbG93LmJhc2VfZGlyID0gZGF0YV9wYXRoCgppbmZvc291cmNlID0gY3JlYXRlX2l0ZXJhdG9yKFsnc3ViamVjdF9pZCcsICdzZXNzaW9uX2lkJywgJ3J1bl9pZCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdWJqZWN0X2lkcywgc2Vzc2lvbl9pZHMsIHJ1bl9pZHNdKQojIyMjIyMjIyMjIyMKCmRhdGFzb3VyY2UgPSBwZS5Ob2RlKGludGVyZmFjZT1uaW8uRGF0YUdyYWJiZXIoaW5maWVsZHM9WydzdWJqZWN0X2lkJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZmllbGRzPVsncmF3X2ZpbGUnLCAndHJhbnNfZmlsZSddKSwgICMgbm9xYQogICAgICAgICAgICAgICAgICAgICBuYW1lPSdkYXRhc291cmNlJykKCmRhdGFzb3VyY2UuaW5wdXRzLmJhc2VfZGlyZWN0b3J5ID0gZGF0YV9wYXRoCmRhdGFzb3VyY2UuaW5wdXRzLnRlbXBsYXRlID0gJyolcy8lcy9tZWcvJXNfJXNfdGFzay1ncmFkQ1BUXyVzX21lZ18lcy5maWYnCgpkYXRhc291cmNlLmlucHV0cy50ZW1wbGF0ZV9hcmdzID0gZGljdCgKICAgICAgICByYXdfZmlsZT1bWydzdWJqZWN0X2lkJywgJ3Nlc3Npb25faWQnLCAnc3ViamVjdF9pZCcsICdzZXNzaW9uX2lkJywgJ3J1bl9pZCcsICctZXBvJ11dLAogICAgICAgIHRyYW5zX2ZpbGU9W1snc3ViamVjdF9pZCcsICdzZXNzaW9uX2lkJywgJ3N1YmplY3RfaWQnLCAnc2Vzc2lvbl9pZCcsICdydW5faWQnLCAnLWVwb3RyYW5zJ11dKQoKZGF0YXNvdXJjZS5pbnB1dHMuc29ydF9maWxlbGlzdCA9IFRydWUKCiMjIyMjIyMjIyMjCmZyb20gZXBoeXB5cGUucGlwZWxpbmVzIGltcG9ydCBjcmVhdGVfcGlwZWxpbmVfc291cmNlX3JlY29uc3RydWN0aW9uICAjIG5vcWEKZXZlbnRfaWQgPSB7J0ZyZXEnOiAyMSwgJ1JhcmUnOiAzMX0KaW52X3NvbF93b3JrZmxvdyA9IGNyZWF0ZV9waXBlbGluZV9zb3VyY2VfcmVjb25zdHJ1Y3Rpb24oCiAgICBkYXRhX3BhdGgsIHN1YmplY3RzX2Rpciwgc3BhY2luZz1zcGFjaW5nLCBpbnZfbWV0aG9kPWludl9tZXRob2QsIHBhcmM9cGFyYywKICAgIG5vaXNlX2Nvdl9mbmFtZT1ub2lzZV9jb3ZfZm5hbWUsIGlzX2Vwb2NoZWQ9VHJ1ZSwgZXZlbnRzX2lkPXt9LCBST0lzX21lYW49RmFsc2UsIGFsbF9zcmNfc3BhY2U9VHJ1ZSkKCiMjIyMjIyMjIyMjCgptYWluX3dvcmtmbG93LmNvbm5lY3QoaW5mb3NvdXJjZSwgJ3N1YmplY3RfaWQnLCBkYXRhc291cmNlLCAnc3ViamVjdF9pZCcpCm1haW5fd29ya2Zsb3cuY29ubmVjdChpbmZvc291cmNlLCAnc2Vzc2lvbl9pZCcsIGRhdGFzb3VyY2UsICdzZXNzaW9uX2lkJykKbWFpbl93b3JrZmxvdy5jb25uZWN0KGluZm9zb3VyY2UsICdydW5faWQnLCBkYXRhc291cmNlLCAncnVuX2lkJykKCiMjIyMjIyMjIyMKCm1haW5fd29ya2Zsb3cuY29ubmVjdChpbmZvc291cmNlLCAnc3ViamVjdF9pZCcsCiAgICAgICAgICAgICAgICAgICAgICBpbnZfc29sX3dvcmtmbG93LCAnaW5wdXRub2RlLnNial9pZCcpCm1haW5fd29ya2Zsb3cuY29ubmVjdChkYXRhc291cmNlLCAncmF3X2ZpbGUnLAogICAgICAgICAgICAgICAgICAgICAgaW52X3NvbF93b3JrZmxvdywgJ2lucHV0bm9kZS5yYXcnKQptYWluX3dvcmtmbG93LmNvbm5lY3QoZGF0YXNvdXJjZSwgJ3RyYW5zX2ZpbGUnLAogICAgICAgICAgICAgICAgICAgICAgaW52X3NvbF93b3JrZmxvdywgJ2lucHV0bm9kZS50cmFuc19maWxlJykKCgojIyMjIyMjIyMjCiNtYWluX3dvcmtmbG93LndyaXRlX2dyYXBoKGdyYXBoMnVzZT0nY29sb3JlZCcpICAjIGNvbG9yZWQKCiMjIyMjIyMjIwojaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdCAgIyBub3FhCiNpbWcgPSBwbHQuaW1yZWFkKG9wLmpvaW4oZGF0YV9wYXRoLCBzcmNfcmVjb25zdHJ1Y3Rpb25fcGlwZWxpbmVfbmFtZSwgJ2dyYXBoLnBuZycpKSAgIyBub3FhCiNwbHQuZmlndXJlKGZpZ3NpemU9KDgsIDgpKQojcGx0Lmltc2hvdyhpbWcpCiNwbHQuYXhpcygnb2ZmJykKCiMjIyMjIyMjIwptYWluX3dvcmtmbG93LmNvbmZpZ1snZXhlY3V0aW9uJ10gPSB7J3JlbW92ZV91bm5lY2Vzc2FyeV9vdXRwdXRzJzogJ2ZhbHNlJ30KCiMgUnVuIHdvcmtmbG93IGxvY2FsbHkgb24gMSBDUFUKbWFpbl93b3JrZmxvdy5ydW4ocGx1Z2luPSdNdWx0aVByb2MnLCBwbHVnaW5fYXJncz17J25fcHJvY3MnOiBOSk9CU30pCgojIyMjIyMjIyMKaW1wb3J0IHBpY2tsZSAgIyBub3FhCmZyb20gZXBoeXB5cGUuZ2F0aGVyIGltcG9ydCBnZXRfcmVzdWx0cyAgIyBub3FhCmZyb20gdmlzYnJhaW4ub2JqZWN0cyBpbXBvcnQgQnJhaW5PYmosIENvbG9yYmFyT2JqLCBTY2VuZU9iaiAgIyBub3FhCgp0aW1lX3Nlcmllc19maWxlcywgbGFiZWxfZmlsZXMgPSBnZXRfcmVzdWx0cyhtYWluX3dvcmtmbG93LmJhc2VfZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluX3dvcmtmbG93Lm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lPSdpbnZlcnNlJykKCnRpbWVfcHRzID0gMzAKCnNjID0gU2NlbmVPYmooc2l6ZT0oODAwLCA1MDApLCBiZ2NvbG9yPSgwLCAwLCAwKSkKbGhfZmlsZSA9IG9wLmpvaW4oc3ViamVjdHNfZGlyLCAnZnNhdmVyYWdlJywgJ2xhYmVsL2xoLmFwYXJjLmFubm90JykKcmhfZmlsZSA9IG9wLmpvaW4oc3ViamVjdHNfZGlyLCAnZnNhdmVyYWdlJywgJ2xhYmVsL3JoLmFwYXJjLmFubm90JykKY21hcCA9ICdid3InCnR4dGNvbG9yID0gJ3doaXRlJwpmb3IgaW52ZXJzZV9maWxlLCBsYWJlbF9maWxlIGluIHppcCh0aW1lX3Nlcmllc19maWxlcywgbGFiZWxfZmlsZXMpOgogICAgIyBMb2FkIGZpbGVzIDoKICAgIHdpdGggb3BlbihsYWJlbF9maWxlLCAncmInKSBhcyBmOgogICAgICAgIGFyID0gcGlja2xlLmxvYWQoZikKICAgICAgICBuYW1lcywgeHl6LCBjb2xvcnMgPSBhclsnUk9JX25hbWVzJ10sIGFyWydST0lfY29vcmRzJ10sIGFyWydST0lfY29sb3JzJ10gICMgbm9xYQogICAgdHMgPSBucC5zcXVlZXplKG5wLmxvYWQoaW52ZXJzZV9maWxlKSkKICAgIGNlbiA9IG5wLmFycmF5KFtrLm1lYW4oMCkgZm9yIGsgaW4geHl6XSkKCiAgICAjIEdldCB0aGUgZGF0YSBvZiB0aGUgbGVmdCAvIHJpZ2h0IGhlbWlzcGhlcmUgOgogICAgbGhfZGF0YSwgcmhfZGF0YSA9IHRzWzo6MiwgdGltZV9wdHNdLCB0c1sxOjoyLCB0aW1lX3B0c10KICAgIGNsaW0gPSAodHNbOiwgdGltZV9wdHNdLm1pbigpLCB0c1s6LCB0aW1lX3B0c10ubWF4KCkpCiAgICByb2lfbmFtZXMgPSBba1swOi0zXSBmb3IgayBpbiBucC5hcnJheShuYW1lcylbOjoyXV0KCiAgICAjIExlZnQgaGVtaXNwaGVyZSBvdXRzaWRlIDoKICAgIGJfb2JqX2xpID0gQnJhaW5PYmooJ3doaXRlJywgdHJhbnNsdWNlbnQ9RmFsc2UsIGhlbWlzcGhlcmU9J2xlZnQnKQogICAgYl9vYmpfbGkucGFyY2VsbGl6ZShsaF9maWxlLCBzZWxlY3Q9cm9pX25hbWVzLCBkYXRhPWxoX2RhdGEsIGNtYXA9Y21hcCkKICAgIHNjLmFkZF90b19zdWJwbG90KGJfb2JqX2xpLCByb3RhdGU9J2xlZnQnKQoKICAgICMgTGVmdCBoZW1pc3BoZXJlIGluc2lkZSA6CiAgICBiX29ial9sbyA9IEJyYWluT2JqKCd3aGl0ZScsICB0cmFuc2x1Y2VudD1GYWxzZSwgaGVtaXNwaGVyZT0nbGVmdCcpCiAgICBiX29ial9sby5wYXJjZWxsaXplKGxoX2ZpbGUsIHNlbGVjdD1yb2lfbmFtZXMsIGRhdGE9bGhfZGF0YSwgY21hcD1jbWFwKQogICAgc2MuYWRkX3RvX3N1YnBsb3QoYl9vYmpfbG8sIGNvbD0xLCByb3RhdGU9J3JpZ2h0JykKCiAgICAjIFJpZ2h0IGhlbWlzcGhlcmUgb3V0c2lkZSA6CiAgICBiX29ial9ybyA9IEJyYWluT2JqKCd3aGl0ZScsICB0cmFuc2x1Y2VudD1GYWxzZSwgaGVtaXNwaGVyZT0ncmlnaHQnKQogICAgYl9vYmpfcm8ucGFyY2VsbGl6ZShyaF9maWxlLCBzZWxlY3Q9cm9pX25hbWVzLCBkYXRhPXJoX2RhdGEsIGNtYXA9Y21hcCkKICAgIHNjLmFkZF90b19zdWJwbG90KGJfb2JqX3JvLCByb3c9MSwgcm90YXRlPSdyaWdodCcpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAjIFJpZ2h0IGhlbWlzcGhlcmUgaW5zaWRlIDoKICAgIGJfb2JqX3JpID0gQnJhaW5PYmooJ3doaXRlJywgIHRyYW5zbHVjZW50PUZhbHNlLCBoZW1pc3BoZXJlPSdyaWdodCcpCiAgICBiX29ial9yaS5wYXJjZWxsaXplKHJoX2ZpbGUsIHNlbGVjdD1yb2lfbmFtZXMsIGRhdGE9cmhfZGF0YSwgY21hcD1jbWFwKQogICAgc2MuYWRkX3RvX3N1YnBsb3QoYl9vYmpfcmksIHJvdz0xLCBjb2w9MSwgcm90YXRlPSdsZWZ0JykKPHxmaW1fZW5kfD4="]
["4131cb9f3716475ae2103b2d83d2a387b5c54776-2","4131cb9f3716475ae2103b2d83d2a387b5c54776","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zLnBhdGggYXMgb3AKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBuaXB5cGUucGlwZWxpbmUuZW5naW5lIGFzIHBlCmltcG9ydCBuaXB5cGUuaW50ZXJmYWNlcy5pbyBhcyBuaW8KCmltcG9ydCBlcGh5cHlwZQpmcm9tIGVwaHlweXBlLm5vZGVzIGltcG9ydCBjcmVhdGVfaXRlcmF0b3IKZnJvbSBlcGh5cHlwZS5kYXRhc2V0cyBpbXBvcnQgZmV0Y2hfb21lZ2FfZGF0YXNldAoKI2Jhc2VfcGF0aCA9IG9wLmpvaW4ob3AuZGlybmFtZShlcGh5cHlwZS5fX2ZpbGVfXyksICcuLicsICdleGFtcGxlcycpCiNkYXRhX3BhdGggPSBmZXRjaF9vbWVnYV9kYXRhc2V0KGJhc2VfcGF0aCkKZGF0YV9wYXRoID0gb3Auam9pbignL3NjcmF0Y2gvaHlydXVrL3NhZmxvd19kYXRhL3NhZmxvd19iaWRzJykKCiMjIyMgUEFSQU1FVEVSUwppbXBvcnQganNvbiAgIyBub3FhCmltcG9ydCBwcHJpbnQgICMgbm9xYQpwYXJhbXMgPSBqc29uLmxvYWQob3BlbigicGFyYW1zLmpzb24iKSkKCnBwcmludC5wcHJpbnQoeydleHBlcmltZW50IHBhcmFtZXRlcnMnOiBwYXJhbXNbImdlbmVyYWwiXX0pCnN1YmplY3RfaWRzID0gcGFyYW1zWyJnZW5lcmFsIl1bInN1YmplY3RfaWRzIl0gICMgc3ViLTAwMwpzZXNzaW9uX2lkcyA9IHBhcmFtc1siZ2VuZXJhbCJdWyJzZXNzaW9uX2lkcyJdCnJ1bl9pZHMgPSBwYXJhbXNbImdlbmVyYWwiXVsicnVuX2lkcyJdICAjIHNlcy0wMDAxCk5KT0JTID0gcGFyYW1zWyJnZW5lcmFsIl1bIk5KT0JTIl0KCnBwcmludC5wcHJpbnQoeydpbnZlcnNlIHBhcmFtZXRlcnMnOiBwYXJhbXNbImludmVyc2UiXX0pCnNwYWNpbmcgPSBwYXJhbXNbImludmVyc2UiXVsnc3BhY2luZyddICAjIGljby01IHZzIG9jdC02CnNuciA9IHBhcmFtc1siaW52ZXJzZSJdWydzbnInXSAgIyB1c2Ugc21hbGxlciBTTlIgZm9yIHJhdyBkYXRhCmludl9tZXRob2QgPSBwYXJhbXNbImludmVyc2UiXVsnaW1nX21ldGhvZCddICAjIHNMT1JFVEEsIE1ORSwgZFNQTSwgTENNVgpwYXJjID0gcGFyYW1zWyJpbnZlcnNlIl1bJ3BhcmNlbGxhdGlvbiddICAjIHBhcmNlbGxhdGlvbiB0byB1c2U6ICdhcGFyYycgdnMgJ2FwYXJjLmEyMDA5cycgICMgbm9xYQojIG5vaXNlIGNvdmFyaWFuY2UgbWF0cml4IGZpbGVuYW1lIHRlbXBsYXRlCm5vaXNlX2Nvdl9mbmFtZSA9IHBhcmFtc1siaW52ZXJzZSJdWydub2lzZV9jb3ZfZm5hbWUnXQoKIyBzZXQgc2JqIGRpciBwYXRoLCBpLmUuIHdoZXJlIHRoZSBGUyBmb2xmZXJzIGFyZQpzdWJqZWN0c19kaXIgPSBvcC5qb2luKGRhdGFfcGF0aCwgcGFyYW1zWyJnZW5lcmFsIl1bInN1YmplY3RzX2RpciJdKQoKIyMjIyMjIyMKCiMgd29ya2Zsb3cgZGlyZWN0b3J5IHdpdGhpbiB0aGUgYGJhc2VfZGlyYApzcmNfcmVjb25zdHJ1Y3Rpb25fcGlwZWxpbmVfbmFtZSA9ICdzb3VyY2VfcmVjb25zdHJ1Y3Rpb25fJyArIFwKICAgIGludl9tZXRob2QgKyAnXycgKyBwYXJjLnJlcGxhY2UoJy4nLCAnJykKCm1haW5fd29ya2Zsb3cgPSBwZS5Xb3JrZmxvdyhuYW1lPXNyY19yZWNvbnN0cnVjdGlvbl9waXBlbGluZV9uYW1lKQptYWluX3dvcmtmbG93LmJhc2VfZGlyID0gZGF0YV9wYXRoCgppbmZvc291cmNlID0gY3JlYXRlX2l0ZXJhdG9yKFsnc3ViamVjdF9pZCcsICdzZXNzaW9uX2lkJywgJ3J1bl9pZCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdWJqZWN0X2lkcywgc2Vzc2lvbl9pZHMsIHJ1bl9pZHNdKQojIyMjIyMjIyMjIyMKCmRhdGFzb3VyY2UgPSBwZS5Ob2RlKGludGVyZmFjZT1uaW8uRGF0YUdyYWJiZXIoaW5maWVsZHM9WydzdWJqZWN0X2lkJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZmllbGRzPVsncmF3X2ZpbGUnLCAndHJhbnNfZmlsZSddKSwgICMgbm9xYQogICAgICAgICAgICAgICAgICAgICBuYW1lPSdkYXRhc291cmNlJykKCmRhdGFzb3VyY2UuaW5wdXRzLmJhc2VfZGlyZWN0b3J5ID0gZGF0YV9wYXRoCmRhdGFzb3VyY2UuaW5wdXRzLnRlbXBsYXRlID0gJyolcy8lcy9tZWcvJXNfJXNfdGFzay1ncmFkQ1BUXyVzX21lZ18lcy5maWYnCgpkYXRhc291cmNlLmlucHV0cy50ZW1wbGF0ZV9hcmdzID0gZGljdCgKICAgICAgICByYXdfZmlsZT1bWydzdWJqZWN0X2lkJywgJ3Nlc3Npb25faWQnLCAnc3ViamVjdF9pZCcsICdzZXNzaW9uX2lkJywgJ3J1bl9pZCcsICctZXBvJ11dLAogICAgICAgIHRyYW5zX2ZpbGU9W1snc3ViamVjdF9pZCcsICdzZXNzaW9uX2lkJywgJ3N1YmplY3RfaWQnLCAnc2Vzc2lvbl9pZCcsICdydW5faWQnLCAnLWVwb3RyYW5zJ11dKQoKZGF0YXNvdXJjZS5pbnB1dHMuc29ydF9maWxlbGlzdCA9IFRydWUKCiMjIyMjIyMjIyMjCmZyb20gZXBoeXB5cGUucGlwZWxpbmVzIGltcG9ydCBjcmVhdGVfcGlwZWxpbmVfc291cmNlX3JlY29uc3RydWN0aW9uICAjIG5vcWEKZXZlbnRfaWQgPSB7J0ZyZXEnOiAyMSwgJ1JhcmUnOiAzMX0KaW52X3NvbF93b3JrZmxvdyA9IGNyZWF0ZV9waXBlbGluZV9zb3VyY2VfcmVjb25zdHJ1Y3Rpb24oCiAgICBkYXRhX3BhdGgsIHN1YmplY3RzX2Rpciwgc3BhY2luZz1zcGFjaW5nLCBpbnZfbWV0aG9kPWludl9tZXRob2QsIHBhcmM9cGFyYywKICAgIG5vaXNlX2Nvdl9mbmFtZT1ub2lzZV9jb3ZfZm5hbWUsIGlzX2Vwb2NoZWQ9VHJ1ZSwgZXZlbnRzX2lkPXt9LCBST0lzX21lYW49RmFsc2UsIGFsbF9zcmNfc3BhY2U9VHJ1ZSkKCiMjIyMjIyMjIyMjCgptYWluX3dvcmtmbG93LmNvbm5lY3QoaW5mb3NvdXJjZSwgJ3N1YmplY3RfaWQnLCBkYXRhc291cmNlLCAnc3ViamVjdF9pZCcpCm1haW5fd29ya2Zsb3cuY29ubmVjdChpbmZvc291cmNlLCAnc2Vzc2lvbl9pZCcsIGRhdGFzb3VyY2UsICdzZXNzaW9uX2lkJykKbWFpbl93b3JrZmxvdy5jb25uZWN0KGluZm9zb3VyY2UsICdydW5faWQnLCBkYXRhc291cmNlLCAncnVuX2lkJykKCiMjIyMjIyMjIyMKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICAgICAgICBpbnZfc29sX3dvcmtmbG93LCAnaW5wdXRub2RlLnJhdycpCm1haW5fd29ya2Zsb3cuY29ubmVjdChkYXRhc291cmNlLCAndHJhbnNfZmlsZScsCiAgICAgICAgICAgICAgICAgICAgICBpbnZfc29sX3dvcmtmbG93LCAnaW5wdXRub2RlLnRyYW5zX2ZpbGUnKQoKCiMjIyMjIyMjIyMKI21haW5fd29ya2Zsb3cud3JpdGVfZ3JhcGgoZ3JhcGgydXNlPSdjb2xvcmVkJykgICMgY29sb3JlZAoKIyMjIyMjIyMjCiNpbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0ICAjIG5vcWEKI2ltZyA9IHBsdC5pbXJlYWQob3Auam9pbihkYXRhX3BhdGgsIHNyY19yZWNvbnN0cnVjdGlvbl9waXBlbGluZV9uYW1lLCAnZ3JhcGgucG5nJykpICAjIG5vcWEKI3BsdC5maWd1cmUoZmlnc2l6ZT0oOCwgOCkpCiNwbHQuaW1zaG93KGltZykKI3BsdC5heGlzKCdvZmYnKQoKIyMjIyMjIyMjCm1haW5fd29ya2Zsb3cuY29uZmlnWydleGVjdXRpb24nXSA9IHsncmVtb3ZlX3VubmVjZXNzYXJ5X291dHB1dHMnOiAnZmFsc2UnfQoKIyBSdW4gd29ya2Zsb3cgbG9jYWxseSBvbiAxIENQVQptYWluX3dvcmtmbG93LnJ1bihwbHVnaW49J011bHRpUHJvYycsIHBsdWdpbl9hcmdzPXsnbl9wcm9jcyc6IE5KT0JTfSkKCiMjIyMjIyMjIwppbXBvcnQgcGlja2xlICAjIG5vcWEKZnJvbSBlcGh5cHlwZS5nYXRoZXIgaW1wb3J0IGdldF9yZXN1bHRzICAjIG5vcWEKZnJvbSB2aXNicmFpbi5vYmplY3RzIGltcG9ydCBCcmFpbk9iaiwgQ29sb3JiYXJPYmosIFNjZW5lT2JqICAjIG5vcWEKCnRpbWVfc2VyaWVzX2ZpbGVzLCBsYWJlbF9maWxlcyA9IGdldF9yZXN1bHRzKG1haW5fd29ya2Zsb3cuYmFzZV9kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5fd29ya2Zsb3cubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmU9J2ludmVyc2UnKQoKdGltZV9wdHMgPSAzMAoKc2MgPSBTY2VuZU9iaihzaXplPSg4MDAsIDUwMCksIGJnY29sb3I9KDAsIDAsIDApKQpsaF9maWxlID0gb3Auam9pbihzdWJqZWN0c19kaXIsICdmc2F2ZXJhZ2UnLCAnbGFiZWwvbGguYXBhcmMuYW5ub3QnKQpyaF9maWxlID0gb3Auam9pbihzdWJqZWN0c19kaXIsICdmc2F2ZXJhZ2UnLCAnbGFiZWwvcmguYXBhcmMuYW5ub3QnKQpjbWFwID0gJ2J3cicKdHh0Y29sb3IgPSAnd2hpdGUnCmZvciBpbnZlcnNlX2ZpbGUsIGxhYmVsX2ZpbGUgaW4gemlwKHRpbWVfc2VyaWVzX2ZpbGVzLCBsYWJlbF9maWxlcyk6CiAgICAjIExvYWQgZmlsZXMgOgogICAgd2l0aCBvcGVuKGxhYmVsX2ZpbGUsICdyYicpIGFzIGY6CiAgICAgICAgYXIgPSBwaWNrbGUubG9hZChmKQogICAgICAgIG5hbWVzLCB4eXosIGNvbG9ycyA9IGFyWydST0lfbmFtZXMnXSwgYXJbJ1JPSV9jb29yZHMnXSwgYXJbJ1JPSV9jb2xvcnMnXSAgIyBub3FhCiAgICB0cyA9IG5wLnNxdWVlemUobnAubG9hZChpbnZlcnNlX2ZpbGUpKQogICAgY2VuID0gbnAuYXJyYXkoW2subWVhbigwKSBmb3IgayBpbiB4eXpdKQoKICAgICMgR2V0IHRoZSBkYXRhIG9mIHRoZSBsZWZ0IC8gcmlnaHQgaGVtaXNwaGVyZSA6CiAgICBsaF9kYXRhLCByaF9kYXRhID0gdHNbOjoyLCB0aW1lX3B0c10sIHRzWzE6OjIsIHRpbWVfcHRzXQogICAgY2xpbSA9ICh0c1s6LCB0aW1lX3B0c10ubWluKCksIHRzWzosIHRpbWVfcHRzXS5tYXgoKSkKICAgIHJvaV9uYW1lcyA9IFtrWzA6LTNdIGZvciBrIGluIG5wLmFycmF5KG5hbWVzKVs6OjJdXQoKICAgICMgTGVmdCBoZW1pc3BoZXJlIG91dHNpZGUgOgogICAgYl9vYmpfbGkgPSBCcmFpbk9iaignd2hpdGUnLCB0cmFuc2x1Y2VudD1GYWxzZSwgaGVtaXNwaGVyZT0nbGVmdCcpCiAgICBiX29ial9saS5wYXJjZWxsaXplKGxoX2ZpbGUsIHNlbGVjdD1yb2lfbmFtZXMsIGRhdGE9bGhfZGF0YSwgY21hcD1jbWFwKQogICAgc2MuYWRkX3RvX3N1YnBsb3QoYl9vYmpfbGksIHJvdGF0ZT0nbGVmdCcpCgogICAgIyBMZWZ0IGhlbWlzcGhlcmUgaW5zaWRlIDoKICAgIGJfb2JqX2xvID0gQnJhaW5PYmooJ3doaXRlJywgIHRyYW5zbHVjZW50PUZhbHNlLCBoZW1pc3BoZXJlPSdsZWZ0JykKICAgIGJfb2JqX2xvLnBhcmNlbGxpemUobGhfZmlsZSwgc2VsZWN0PXJvaV9uYW1lcywgZGF0YT1saF9kYXRhLCBjbWFwPWNtYXApCiAgICBzYy5hZGRfdG9fc3VicGxvdChiX29ial9sbywgY29sPTEsIHJvdGF0ZT0ncmlnaHQnKQoKICAgICMgUmlnaHQgaGVtaXNwaGVyZSBvdXRzaWRlIDoKICAgIGJfb2JqX3JvID0gQnJhaW5PYmooJ3doaXRlJywgIHRyYW5zbHVjZW50PUZhbHNlLCBoZW1pc3BoZXJlPSdyaWdodCcpCiAgICBiX29ial9yby5wYXJjZWxsaXplKHJoX2ZpbGUsIHNlbGVjdD1yb2lfbmFtZXMsIGRhdGE9cmhfZGF0YSwgY21hcD1jbWFwKQogICAgc2MuYWRkX3RvX3N1YnBsb3QoYl9vYmpfcm8sIHJvdz0xLCByb3RhdGU9J3JpZ2h0JykKCiAgICAjIFJpZ2h0IGhlbWlzcGhlcmUgaW5zaWRlIDoKICAgIGJfb2JqX3JpID0gQnJhaW5PYmooJ3doaXRlJywgIHRyYW5zbHVjZW50PUZhbHNlLCBoZW1pc3BoZXJlPSdyaWdodCcpCiAgICBiX29ial9yaS5wYXJjZWxsaXplKHJoX2ZpbGUsIHNlbGVjdD1yb2lfbmFtZXMsIGRhdGE9cmhfZGF0YSwgY21hcD1jbWFwKQogICAgc2MuYWRkX3RvX3N1YnBsb3QoYl9vYmpfcmksIHJvdz0xLCBjb2w9MSwgcm90YXRlPSdsZWZ0JykKCiAgICAjIEFkZCB0aGUgY29sb3JiYXIgOgogICAgY2JhciA9IENvbG9yYmFyT2JqKGJfb2JqX2xpLCB0eHRzej0xNSwgY2J0eHRzej0yMCwgdHh0Y29sb3I9dHh0Y29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgY2JsYWJlbD0nSW50ZW5zaXR5JykKICAgIHNjLmFkZF90b19zdWJwbG90KGNiYXIsIGNvbD0yLCByb3dfc3Bhbj0yKQoKc2MucHJldmlldygpCjx8ZmltX3N1ZmZpeHw+CgptYWluX3dvcmtmbG93LmNvbm5lY3QoaW5mb3NvdXJjZSwgJ3N1YmplY3RfaWQnLAogICAgICAgICAgICAgICAgICAgICAgaW52X3NvbF93b3JrZmxvdywgJ2lucHV0bm9kZS5zYmpfaWQnKQptYWluX3dvcmtmbG93LmNvbm5lY3QoZGF0YXNvdXJjZSwgJ3Jhd19maWxlJywKPHxmaW1fZW5kfD4="]
["4131cb9f3716475ae2103b2d83d2a387b5c54776-3","4131cb9f3716475ae2103b2d83d2a387b5c54776","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zLnBhdGggYXMgb3AKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBuaXB5cGUucGlwZWxpbmUuZW5naW5lIGFzIHBlCmltcG9ydCBuaXB5cGUuaW50ZXJmYWNlcy5pbyBhcyBuaW8KCmltcG9ydCBlcGh5cHlwZQpmcm9tIGVwaHlweXBlLm5vZGVzIGltcG9ydCBjcmVhdGVfaXRlcmF0b3IKZnJvbSBlcGh5cHlwZS5kYXRhc2V0cyBpbXBvcnQgZmV0Y2hfb21lZ2FfZGF0YXNldAoKI2Jhc2VfcGF0aCA9IG9wLmpvaW4ob3AuZGlybmFtZShlcGh5cHlwZS5fX2ZpbGVfXyksICcuLicsICdleGFtcGxlcycpCiNkYXRhX3BhdGggPSBmZXRjaF9vbWVnYV9kYXRhc2V0KGJhc2VfcGF0aCkKZGF0YV9wYXRoID0gb3Auam9pbignL3NjcmF0Y2gvaHlydXVrL3NhZmxvd19kYXRhL3NhZmxvd19iaWRzJykKCiMjIyMgUEFSQU1FVEVSUwppbXBvcnQganNvbiAgIyBub3FhCmltcG9ydCBwcHJpbnQgICMgbm9xYQpwYXJhbXMgPSBqc29uLmxvYWQob3BlbigicGFyYW1zLmpzb24iKSkKCnBwcmludC5wcHJpbnQoeydleHBlcmltZW50IHBhcmFtZXRlcnMnOiBwYXJhbXNbImdlbmVyYWwiXX0pCnN1YmplY3RfaWRzID0gcGFyYW1zWyJnZW5lcmFsIl1bInN1YmplY3RfaWRzIl0gICMgc3ViLTAwMwpzZXNzaW9uX2lkcyA9IHBhcmFtc1siZ2VuZXJhbCJdWyJzZXNzaW9uX2lkcyJdCnJ1bl9pZHMgPSBwYXJhbXNbImdlbmVyYWwiXVsicnVuX2lkcyJdICAjIHNlcy0wMDAxCk5KT0JTID0gcGFyYW1zWyJnZW5lcmFsIl1bIk5KT0JTIl0KCnBwcmludC5wcHJpbnQoeydpbnZlcnNlIHBhcmFtZXRlcnMnOiBwYXJhbXNbImludmVyc2UiXX0pCnNwYWNpbmcgPSBwYXJhbXNbImludmVyc2UiXVsnc3BhY2luZyddICAjIGljby01IHZzIG9jdC02CnNuciA9IHBhcmFtc1siaW52ZXJzZSJdWydzbnInXSAgIyB1c2Ugc21hbGxlciBTTlIgZm9yIHJhdyBkYXRhCmludl9tZXRob2QgPSBwYXJhbXNbImludmVyc2UiXVsnaW1nX21ldGhvZCddICAjIHNMT1JFVEEsIE1ORSwgZFNQTSwgTENNVgpwYXJjID0gcGFyYW1zWyJpbnZlcnNlIl1bJ3BhcmNlbGxhdGlvbiddICAjIHBhcmNlbGxhdGlvbiB0byB1c2U6ICdhcGFyYycgdnMgJ2FwYXJjLmEyMDA5cycgICMgbm9xYQojIG5vaXNlIGNvdmFyaWFuY2UgbWF0cml4IGZpbGVuYW1lIHRlbXBsYXRlCm5vaXNlX2Nvdl9mbmFtZSA9IHBhcmFtc1siaW52ZXJzZSJdWydub2lzZV9jb3ZfZm5hbWUnXQoKIyBzZXQgc2JqIGRpciBwYXRoLCBpLmUuIHdoZXJlIHRoZSBGUyBmb2xmZXJzIGFyZQpzdWJqZWN0c19kaXIgPSBvcC5qb2luKGRhdGFfcGF0aCwgcGFyYW1zWyJnZW5lcmFsIl1bInN1YmplY3RzX2RpciJdKQoKIyMjIyMjIyMKCiMgd29ya2Zsb3cgZGlyZWN0b3J5IHdpdGhpbiB0aGUgYGJhc2VfZGlyYApzcmNfcmVjb25zdHJ1Y3Rpb25fcGlwZWxpbmVfbmFtZSA9ICdzb3VyY2VfcmVjb25zdHJ1Y3Rpb25fJyArIFwKICAgIGludl9tZXRob2QgKyAnXycgKyBwYXJjLnJlcGxhY2UoJy4nLCAnJykKCm1haW5fd29ya2Zsb3cgPSBwZS5Xb3JrZmxvdyhuYW1lPXNyY19yZWNvbnN0cnVjdGlvbl9waXBlbGluZV9uYW1lKQptYWluX3dvcmtmbG93LmJhc2VfZGlyID0gZGF0YV9wYXRoCgppbmZvc291cmNlID0gY3JlYXRlX2l0ZXJhdG9yKFsnc3ViamVjdF9pZCcsICdzZXNzaW9uX2lkJywgJ3J1bl9pZCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdWJqZWN0X2lkcywgc2Vzc2lvbl9pZHMsIHJ1bl9pZHNdKQojIyMjIyMjIyMjIyMKCmRhdGFzb3VyY2UgPSBwZS5Ob2RlKGludGVyZmFjZT1uaW8uRGF0YUdyYWJiZXIoaW5maWVsZHM9WydzdWJqZWN0X2lkJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZmllbGRzPVsncmF3X2ZpbGUnLCAndHJhbnNfZmlsZSddKSwgICMgbm9xYQogICAgICAgICAgICAgICAgICAgICBuYW1lPSdkYXRhc291cmNlJykKCmRhdGFzb3VyY2UuaW5wdXRzLmJhc2VfZGlyZWN0b3J5ID0gZGF0YV9wYXRoCmRhdGFzb3VyY2UuaW5wdXRzLnRlbXBsYXRlID0gJyolcy8lcy9tZWcvJXNfJXNfdGFzay1ncmFkQ1BUXyVzX21lZ18lcy5maWYnCgpkYXRhc291cmNlLmlucHV0cy50ZW1wbGF0ZV9hcmdzID0gZGljdCgKICAgICAgICByYXdfZmlsZT1bWydzdWJqZWN0X2lkJywgJ3Nlc3Npb25faWQnLCAnc3ViamVjdF9pZCcsICdzZXNzaW9uX2lkJywgJ3J1bl9pZCcsICctZXBvJ11dLAogICAgICAgIHRyYW5zX2ZpbGU9W1snc3ViamVjdF9pZCcsICdzZXNzaW9uX2lkJywgJ3N1YmplY3RfaWQnLCAnc2Vzc2lvbl9pZCcsICdydW5faWQnLCAnLWVwb3RyYW5zJ11dKQoKZGF0YXNvdXJjZS5pbnB1dHMuc29ydF9maWxlbGlzdCA9IFRydWUKCiMjIyMjIyMjIyMjCmZyb20gZXBoeXB5cGUucGlwZWxpbmVzIGltcG9ydCBjcmVhdGVfcGlwZWxpbmVfc291cmNlX3JlY29uc3RydWN0aW9uICAjIG5vcWEKZXZlbnRfaWQgPSB7J0ZyZXEnOiAyMSwgJ1JhcmUnOiAzMX0KaW52X3NvbF93b3JrZmxvdyA9IGNyZWF0ZV9waXBlbGluZV9zb3VyY2VfcmVjb25zdHJ1Y3Rpb24oCiAgICBkYXRhX3BhdGgsIHN1YmplY3RzX2Rpciwgc3BhY2luZz1zcGFjaW5nLCBpbnZfbWV0aG9kPWludl9tZXRob2QsIHBhcmM9cGFyYywKICAgIG5vaXNlX2Nvdl9mbmFtZT1ub2lzZV9jb3ZfZm5hbWUsIGlzX2Vwb2NoZWQ9VHJ1ZSwgZXZlbnRzX2lkPXt9LCBST0lzX21lYW49RmFsc2UsIGFsbF9zcmNfc3BhY2U9VHJ1ZSkKCiMjIyMjIyMjIyMjCgptYWluX3dvcmtmbG93LmNvbm5lY3QoaW5mb3NvdXJjZSwgJ3N1YmplY3RfaWQnLCBkYXRhc291cmNlLCAnc3ViamVjdF9pZCcpCm1haW5fd29ya2Zsb3cuY29ubmVjdChpbmZvc291cmNlLCAnc2Vzc2lvbl9pZCcsIGRhdGFzb3VyY2UsICdzZXNzaW9uX2lkJykKbWFpbl93b3JrZmxvdy5jb25uZWN0KGluZm9zb3VyY2UsICdydW5faWQnLCBkYXRhc291cmNlLCAncnVuX2lkJykKCiMjIyMjIyMjIyMKCm1haW5fd29ya2Zsb3cuY29ubmVjdChpbmZvc291cmNlLCAnc3ViamVjdF9pZCcsCiAgICAgICAgICAgICAgICAgICAgICBpbnZfc29sX3dvcmtmbG93LCAnaW5wdXRub2RlLnNial9pZCcpCm1haW5fd29ya2Zsb3cuY29ubmVjdChkYXRhc291cmNlLCAncmF3X2ZpbGUnLAogICAgICAgICAgICAgICAgICAgICAgaW52X3NvbF93b3JrZmxvdywgJ2lucHV0bm9kZS5yYXcnKQptYWluX3dvcmtmbG93LmNvbm5lY3QoZGF0YXNvdXJjZSwgJ3RyYW5zX2ZpbGUnLAogICAgICAgICAgICAgICAgICAgICAgaW52X3NvbF93b3JrZmxvdywgJ2lucHV0bm9kZS50cmFuc19maWxlJykKCgojIyMjIyMjIyMjCiNtYWluX3dvcmtmbG93LndyaXRlX2dyYXBoKGdyYXBoMnVzZT0nY29sb3JlZCcpICAjIGNvbG9yZWQKCiMjIyMjIyMjIwojaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdCAgIyBub3FhCiNpbWcgPSBwbHQuaW1yZWFkKG9wLmpvaW4oZGF0YV9wYXRoLCBzcmNfcmVjb25zdHJ1Y3Rpb25fcGlwZWxpbmVfbmFtZSwgJ2dyYXBoLnBuZycpKSAgIyBub3FhCiNwbHQuZmlndXJlKGZpZ3NpemU9KDgsIDgpKQojcGx0Lmltc2hvdyhpbWcpCiNwbHQuYXhpcygnb2ZmJykKCiMjIyMjIyMjIwo8fGZpbV9ob2xlfD4KCiMjIyMjIyMjIwppbXBvcnQgcGlja2xlICAjIG5vcWEKZnJvbSBlcGh5cHlwZS5nYXRoZXIgaW1wb3J0IGdldF9yZXN1bHRzICAjIG5vcWEKZnJvbSB2aXNicmFpbi5vYmplY3RzIGltcG9ydCBCcmFpbk9iaiwgQ29sb3JiYXJPYmosIFNjZW5lT2JqICAjIG5vcWEKCnRpbWVfc2VyaWVzX2ZpbGVzLCBsYWJlbF9maWxlcyA9IGdldF9yZXN1bHRzKG1haW5fd29ya2Zsb3cuYmFzZV9kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5fd29ya2Zsb3cubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmU9J2ludmVyc2UnKQoKdGltZV9wdHMgPSAzMAoKc2MgPSBTY2VuZU9iaihzaXplPSg4MDAsIDUwMCksIGJnY29sb3I9KDAsIDAsIDApKQpsaF9maWxlID0gb3Auam9pbihzdWJqZWN0c19kaXIsICdmc2F2ZXJhZ2UnLCAnbGFiZWwvbGguYXBhcmMuYW5ub3QnKQpyaF9maWxlID0gb3Auam9pbihzdWJqZWN0c19kaXIsICdmc2F2ZXJhZ2UnLCAnbGFiZWwvcmguYXBhcmMuYW5ub3QnKQpjbWFwID0gJ2J3cicKdHh0Y29sb3IgPSAnd2hpdGUnCmZvciBpbnZlcnNlX2ZpbGUsIGxhYmVsX2ZpbGUgaW4gemlwKHRpbWVfc2VyaWVzX2ZpbGVzLCBsYWJlbF9maWxlcyk6CiAgICAjIExvYWQgZmlsZXMgOgogICAgd2l0aCBvcGVuKGxhYmVsX2ZpbGUsICdyYicpIGFzIGY6CiAgICAgICAgYXIgPSBwaWNrbGUubG9hZChmKQogICAgICAgIG5hbWVzLCB4eXosIGNvbG9ycyA9IGFyWydST0lfbmFtZXMnXSwgYXJbJ1JPSV9jb29yZHMnXSwgYXJbJ1JPSV9jb2xvcnMnXSAgIyBub3FhCiAgICB0cyA9IG5wLnNxdWVlemUobnAubG9hZChpbnZlcnNlX2ZpbGUpKQogICAgY2VuID0gbnAuYXJyYXkoW2subWVhbigwKSBmb3IgayBpbiB4eXpdKQoKICAgICMgR2V0IHRoZSBkYXRhIG9mIHRoZSBsZWZ0IC8gcmlnaHQgaGVtaXNwaGVyZSA6CiAgICBsaF9kYXRhLCByaF9kYXRhID0gdHNbOjoyLCB0aW1lX3B0c10sIHRzWzE6OjIsIHRpbWVfcHRzXQogICAgY2xpbSA9ICh0c1s6LCB0aW1lX3B0c10ubWluKCksIHRzWzosIHRpbWVfcHRzXS5tYXgoKSkKICAgIHJvaV9uYW1lcyA9IFtrWzA6LTNdIGZvciBrIGluIG5wLmFycmF5KG5hbWVzKVs6OjJdXQoKICAgICMgTGVmdCBoZW1pc3BoZXJlIG91dHNpZGUgOgogICAgYl9vYmpfbGkgPSBCcmFpbk9iaignd2hpdGUnLCB0cmFuc2x1Y2VudD1GYWxzZSwgaGVtaXNwaGVyZT0nbGVmdCcpCiAgICBiX29ial9saS5wYXJjZWxsaXplKGxoX2ZpbGUsIHNlbGVjdD1yb2lfbmFtZXMsIGRhdGE9bGhfZGF0YSwgY21hcD1jbWFwKQogICAgc2MuYWRkX3RvX3N1YnBsb3QoYl9vYmpfbGksIHJvdGF0ZT0nbGVmdCcpCgogICAgIyBMZWZ0IGhlbWlzcGhlcmUgaW5zaWRlIDoKICAgIGJfb2JqX2xvID0gQnJhaW5PYmooJ3doaXRlJywgIHRyYW5zbHVjZW50PUZhbHNlLCBoZW1pc3BoZXJlPSdsZWZ0JykKICAgIGJfb2JqX2xvLnBhcmNlbGxpemUobGhfZmlsZSwgc2VsZWN0PXJvaV9uYW1lcywgZGF0YT1saF9kYXRhLCBjbWFwPWNtYXApCiAgICBzYy5hZGRfdG9fc3VicGxvdChiX29ial9sbywgY29sPTEsIHJvdGF0ZT0ncmlnaHQnKQoKICAgICMgUmlnaHQgaGVtaXNwaGVyZSBvdXRzaWRlIDoKICAgIGJfb2JqX3JvID0gQnJhaW5PYmooJ3doaXRlJywgIHRyYW5zbHVjZW50PUZhbHNlLCBoZW1pc3BoZXJlPSdyaWdodCcpCiAgICBiX29ial9yby5wYXJjZWxsaXplKHJoX2ZpbGUsIHNlbGVjdD1yb2lfbmFtZXMsIGRhdGE9cmhfZGF0YSwgY21hcD1jbWFwKQogICAgc2MuYWRkX3RvX3N1YnBsb3QoYl9vYmpfcm8sIHJvdz0xLCByb3RhdGU9J3JpZ2h0JykKCiAgICAjIFJpZ2h0IGhlbWlzcGhlcmUgaW5zaWRlIDoKICAgIGJfb2JqX3JpID0gQnJhaW5PYmooJ3doaXRlJywgIHRyYW5zbHVjZW50PUZhbHNlLCBoZW1pc3BoZXJlPSdyaWdodCcpCiAgICBiX29ial9yaS5wYXJjZWxsaXplKHJoX2ZpbGUsIHNlbGVjdD1yb2lfbmFtZXMsIGRhdGE9cmhfZGF0YSwgY21hcD1jbWFwKQogICAgc2MuYWRkX3RvX3N1YnBsb3QoYl9vYmpfcmksIHJvdz0xLCBjb2w9MSwgcm90YXRlPSdsZWZ0JykKCiAgICAjIEFkZCB0aGUgY29sb3JiYXIgOgogICAgY2JhciA9IENvbG9yYmFyT2JqKGJfb2JqX2xpLCB0eHRzej0xNSwgY2J0eHRzej0yMCwgdHh0Y29sb3I9dHh0Y29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgY2JsYWJlbD0nSW50ZW5zaXR5JykKICAgIHNjLmFkZF90b19zdWJwbG90KGNiYXIsIGNvbD0yLCByb3dfc3Bhbj0yKQoKc2MucHJldmlldygpCjx8ZmltX3N1ZmZpeHw+Cm1haW5fd29ya2Zsb3cuY29uZmlnWydleGVjdXRpb24nXSA9IHsncmVtb3ZlX3VubmVjZXNzYXJ5X291dHB1dHMnOiAnZmFsc2UnfQoKIyBSdW4gd29ya2Zsb3cgbG9jYWxseSBvbiAxIENQVQptYWluX3dvcmtmbG93LnJ1bihwbHVnaW49J011bHRpUHJvYycsIHBsdWdpbl9hcmdzPXsnbl9wcm9jcyc6IE5KT0JTfSkKPHxmaW1fZW5kfD4="]
["4131cb9f3716475ae2103b2d83d2a387b5c54776-4","4131cb9f3716475ae2103b2d83d2a387b5c54776","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zLnBhdGggYXMgb3AKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBuaXB5cGUucGlwZWxpbmUuZW5naW5lIGFzIHBlCmltcG9ydCBuaXB5cGUuaW50ZXJmYWNlcy5pbyBhcyBuaW8KCmltcG9ydCBlcGh5cHlwZQpmcm9tIGVwaHlweXBlLm5vZGVzIGltcG9ydCBjcmVhdGVfaXRlcmF0b3IKZnJvbSBlcGh5cHlwZS5kYXRhc2V0cyBpbXBvcnQgZmV0Y2hfb21lZ2FfZGF0YXNldAoKI2Jhc2VfcGF0aCA9IG9wLmpvaW4ob3AuZGlybmFtZShlcGh5cHlwZS5fX2ZpbGVfXyksICcuLicsICdleGFtcGxlcycpCiNkYXRhX3BhdGggPSBmZXRjaF9vbWVnYV9kYXRhc2V0KGJhc2VfcGF0aCkKZGF0YV9wYXRoID0gb3Auam9pbignL3NjcmF0Y2gvaHlydXVrL3NhZmxvd19kYXRhL3NhZmxvd19iaWRzJykKCiMjIyMgUEFSQU1FVEVSUwppbXBvcnQganNvbiAgIyBub3FhCmltcG9ydCBwcHJpbnQgICMgbm9xYQpwYXJhbXMgPSBqc29uLmxvYWQob3BlbigicGFyYW1zLmpzb24iKSkKCnBwcmludC5wcHJpbnQoeydleHBlcmltZW50IHBhcmFtZXRlcnMnOiBwYXJhbXNbImdlbmVyYWwiXX0pCnN1YmplY3RfaWRzID0gcGFyYW1zWyJnZW5lcmFsIl1bInN1YmplY3RfaWRzIl0gICMgc3ViLTAwMwpzZXNzaW9uX2lkcyA9IHBhcmFtc1siZ2VuZXJhbCJdWyJzZXNzaW9uX2lkcyJdCnJ1bl9pZHMgPSBwYXJhbXNbImdlbmVyYWwiXVsicnVuX2lkcyJdICAjIHNlcy0wMDAxCk5KT0JTID0gcGFyYW1zWyJnZW5lcmFsIl1bIk5KT0JTIl0KCnBwcmludC5wcHJpbnQoeydpbnZlcnNlIHBhcmFtZXRlcnMnOiBwYXJhbXNbImludmVyc2UiXX0pCnNwYWNpbmcgPSBwYXJhbXNbImludmVyc2UiXVsnc3BhY2luZyddICAjIGljby01IHZzIG9jdC02CnNuciA9IHBhcmFtc1siaW52ZXJzZSJdWydzbnInXSAgIyB1c2Ugc21hbGxlciBTTlIgZm9yIHJhdyBkYXRhCmludl9tZXRob2QgPSBwYXJhbXNbImludmVyc2UiXVsnaW1nX21ldGhvZCddICAjIHNMT1JFVEEsIE1ORSwgZFNQTSwgTENNVgpwYXJjID0gcGFyYW1zWyJpbnZlcnNlIl1bJ3BhcmNlbGxhdGlvbiddICAjIHBhcmNlbGxhdGlvbiB0byB1c2U6ICdhcGFyYycgdnMgJ2FwYXJjLmEyMDA5cycgICMgbm9xYQojIG5vaXNlIGNvdmFyaWFuY2UgbWF0cml4IGZpbGVuYW1lIHRlbXBsYXRlCm5vaXNlX2Nvdl9mbmFtZSA9IHBhcmFtc1siaW52ZXJzZSJdWydub2lzZV9jb3ZfZm5hbWUnXQoKIyBzZXQgc2JqIGRpciBwYXRoLCBpLmUuIHdoZXJlIHRoZSBGUyBmb2xmZXJzIGFyZQpzdWJqZWN0c19kaXIgPSBvcC5qb2luKGRhdGFfcGF0aCwgcGFyYW1zWyJnZW5lcmFsIl1bInN1YmplY3RzX2RpciJdKQoKIyMjIyMjIyMKCiMgd29ya2Zsb3cgZGlyZWN0b3J5IHdpdGhpbiB0aGUgYGJhc2VfZGlyYApzcmNfcmVjb25zdHJ1Y3Rpb25fcGlwZWxpbmVfbmFtZSA9ICdzb3VyY2VfcmVjb25zdHJ1Y3Rpb25fJyArIFwKICAgIGludl9tZXRob2QgKyAnXycgKyBwYXJjLnJlcGxhY2UoJy4nLCAnJykKCm1haW5fd29ya2Zsb3cgPSBwZS5Xb3JrZmxvdyhuYW1lPXNyY19yZWNvbnN0cnVjdGlvbl9waXBlbGluZV9uYW1lKQptYWluX3dvcmtmbG93LmJhc2VfZGlyID0gZGF0YV9wYXRoCgppbmZvc291cmNlID0gY3JlYXRlX2l0ZXJhdG9yKFsnc3ViamVjdF9pZCcsICdzZXNzaW9uX2lkJywgJ3J1bl9pZCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdWJqZWN0X2lkcywgc2Vzc2lvbl9pZHMsIHJ1bl9pZHNdKQojIyMjIyMjIyMjIyMKCmRhdGFzb3VyY2UgPSBwZS5Ob2RlKGludGVyZmFjZT1uaW8uRGF0YUdyYWJiZXIoaW5maWVsZHM9WydzdWJqZWN0X2lkJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZmllbGRzPVsncmF3X2ZpbGUnLCAndHJhbnNfZmlsZSddKSwgICMgbm9xYQogICAgICAgICAgICAgICAgICAgICBuYW1lPSdkYXRhc291cmNlJykKCmRhdGFzb3VyY2UuaW5wdXRzLmJhc2VfZGlyZWN0b3J5ID0gZGF0YV9wYXRoCmRhdGFzb3VyY2UuaW5wdXRzLnRlbXBsYXRlID0gJyolcy8lcy9tZWcvJXNfJXNfdGFzay1ncmFkQ1BUXyVzX21lZ18lcy5maWYnCgpkYXRhc291cmNlLmlucHV0cy50ZW1wbGF0ZV9hcmdzID0gZGljdCgKICAgICAgICByYXdfZmlsZT1bWydzdWJqZWN0X2lkJywgJ3Nlc3Npb25faWQnLCAnc3ViamVjdF9pZCcsICdzZXNzaW9uX2lkJywgJ3J1bl9pZCcsICctZXBvJ11dLAogICAgICAgIHRyYW5zX2ZpbGU9W1snc3ViamVjdF9pZCcsICdzZXNzaW9uX2lkJywgJ3N1YmplY3RfaWQnLCAnc2Vzc2lvbl9pZCcsICdydW5faWQnLCAnLWVwb3RyYW5zJ11dKQoKZGF0YXNvdXJjZS5pbnB1dHMuc29ydF9maWxlbGlzdCA9IFRydWUKCiMjIyMjIyMjIyMjCmZyb20gZXBoeXB5cGUucGlwZWxpbmVzIGltcG9ydCBjcmVhdGVfcGlwZWxpbmVfc291cmNlX3JlY29uc3RydWN0aW9uICAjIG5vcWEKZXZlbnRfaWQgPSB7J0ZyZXEnOiAyMSwgJ1JhcmUnOiAzMX0KaW52X3NvbF93b3JrZmxvdyA9IGNyZWF0ZV9waXBlbGluZV9zb3VyY2VfcmVjb25zdHJ1Y3Rpb24oCiAgICBkYXRhX3BhdGgsIHN1YmplY3RzX2Rpciwgc3BhY2luZz1zcGFjaW5nLCBpbnZfbWV0aG9kPWludl9tZXRob2QsIHBhcmM9cGFyYywKICAgIG5vaXNlX2Nvdl9mbmFtZT1ub2lzZV9jb3ZfZm5hbWUsIGlzX2Vwb2NoZWQ9VHJ1ZSwgZXZlbnRzX2lkPXt9LCBST0lzX21lYW49RmFsc2UsIGFsbF9zcmNfc3BhY2U9VHJ1ZSkKCiMjIyMjIyMjIyMjCgptYWluX3dvcmtmbG93LmNvbm5lY3QoaW5mb3NvdXJjZSwgJ3N1YmplY3RfaWQnLCBkYXRhc291cmNlLCAnc3ViamVjdF9pZCcpCm1haW5fd29ya2Zsb3cuY29ubmVjdChpbmZvc291cmNlLCAnc2Vzc2lvbl9pZCcsIGRhdGFzb3VyY2UsICdzZXNzaW9uX2lkJykKbWFpbl93b3JrZmxvdy5jb25uZWN0KGluZm9zb3VyY2UsICdydW5faWQnLCBkYXRhc291cmNlLCAncnVuX2lkJykKCiMjIyMjIyMjIyMKCm1haW5fd29ya2Zsb3cuY29ubmVjdChpbmZvc291cmNlLCAnc3ViamVjdF9pZCcsCiAgICAgICAgICAgICAgICAgICAgICBpbnZfc29sX3dvcmtmbG93LCAnaW5wdXRub2RlLnNial9pZCcpCm1haW5fd29ya2Zsb3cuY29ubmVjdChkYXRhc291cmNlLCAncmF3X2ZpbGUnLAogICAgICAgICAgICAgICAgICAgICAgaW52X3NvbF93b3JrZmxvdywgJ2lucHV0bm9kZS5yYXcnKQptYWluX3dvcmtmbG93LmNvbm5lY3QoZGF0YXNvdXJjZSwgJ3RyYW5zX2ZpbGUnLAogICAgICAgICAgICAgICAgICAgICAgaW52X3NvbF93b3JrZmxvdywgJ2lucHV0bm9kZS50cmFuc19maWxlJykKCgojIyMjIyMjIyMjCiNtYWluX3dvcmtmbG93LndyaXRlX2dyYXBoKGdyYXBoMnVzZT0nY29sb3JlZCcpICAjIGNvbG9yZWQKCiMjIyMjIyMjIwojaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdCAgIyBub3FhCiNpbWcgPSBwbHQuaW1yZWFkKG9wLmpvaW4oZGF0YV9wYXRoLCBzcmNfcmVjb25zdHJ1Y3Rpb25fcGlwZWxpbmVfbmFtZSwgJ2dyYXBoLnBuZycpKSAgIyBub3FhCiNwbHQuZmlndXJlKGZpZ3NpemU9KDgsIDgpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiNwbHQuaW1zaG93KGltZykKI3BsdC5heGlzKCdvZmYnKQoKIyMjIyMjIyMjCjx8ZmltX2VuZHw+"]
["d46e3437e9a32df73668b76ae8442748c10103aa-1","d46e3437e9a32df73668b76ae8442748c10103aa","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogbGF0aW4tMSAtKi0KIwojICAgQ29weXJpZ2h0IDIwMTgtMjAyMSBCbGFpc2UgRnJlZGVyaWNrCiMKIyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKIwoiIiIKRnVuY3Rpb25zIGZvciBwYXJzZXJzLgoiIiIKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBvcy5wYXRoIGFzIG9wCmltcG9ydCBzeXMKCmltcG9ydCByYXBpZHRpZGUuZmlsdGVyIGFzIHRpZGVfZmlsdAppbXBvcnQgcmFwaWR0aWRlLmlvIGFzIHRpZGVfaW8KCgpjbGFzcyBJbmRpY2F0ZVNwZWNpZmllZEFjdGlvbihhcmdwYXJzZS5BY3Rpb24pOgogICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CiAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIHNlbGYuZGVzdCwgdmFsdWVzKQogICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRlc3QgKyAiX25vbmRlZmF1bHQiLCBUcnVlKQoKCmRlZiBzZXRpZm5vdHNldCh0aGVkaWN0LCB0aGVrZXksIHRoZXZhbCk6CiAgICBpZiAodGhla2V5ICsgIl9ub25kZWZhdWx0Iikgbm90IGluIHRoZWRpY3Qua2V5cygpOgogICAgICAgIHByaW50KCJvdmVycmlkaW5nICIgKyB0aGVrZXkpCiAgICAgICAgdGhlZGljdFt0aGVrZXldID0gdGhldmFsCgoKZGVmIGlzX3ZhbGlkX2ZpbGUocGFyc2VyLCBhcmcpOgogICAgIiIiCiAgICBDaGVjayBpZiBhcmd1bWVudCBpcyBleGlzdGluZyBmaWxlLgogICAgIiIiCiAgICBpZiBhcmcgaXMgbm90IE5vbmU6CiAgICAgICAgdGhlZmlsZW5hbWUsIGNvbHNwZWMgPSB0aWRlX2lvLnBhcnNlZmlsZXNwZWMoYXJnKQogICAgZWxzZToKICAgICAgICB0aGVmaWxlbmFtZSA9IE5vbmUKCiAgICBpZiBub3Qgb3AuaXNmaWxlKHRoZWZpbGVuYW1lKSBhbmQgdGhlZmlsZW5hbWUgaXMgbm90IE5vbmU6CiAgICAgICAgcGFyc2VyLmVycm9yKCJUaGUgZmlsZSB7MH0gZG9lcyBub3QgZXhpc3QhIi5mb3JtYXQodGhlZmlsZW5hbWUpKQoKICAgIHJldHVybiBhcmcKCgpkZWYgaW52ZXJ0X2Zsb2F0KHBhcnNlciwgYXJnKToKICAgICIiIgogICAgQ2hlY2sgaWYgYXJndW1lbnQgaXMgZmxvYXQgb3IgYXV0by4KICAgICIiIgogICAgYXJnID0gaXNfZmxvYXQocGFyc2VyLCBhcmcpCgogICAgaWYgYXJnICE9ICJhdXRvIjoKICAgICAgICBhcmcgPSAxLjAgLyBhcmcKICAgIHJldHVybiBhcmcKCgpkZWYgaXNfZmxvYXQocGFyc2VyLCBhcmcpOgogICAgIiIiCiAgICBDaGVjayBpZiBhcmd1bWVudCBpcyBmbG9hdCBvciBhdXRvLgogICAgIiIiCiAgICBpZiBhcmcgIT0gImF1dG8iOgogICAgICAgIHRyeToKICAgICAgICAgICAgYXJnID0gZmxvYXQoYXJnKQogICAgICAgIGV4Y2VwdCBwYXJzZXIuZXJyb3I6CiAgICAgICAgICAgIHBhcnNlci5lcnJvcignVmFsdWUgezB9IGlzIG5vdCBhIGZsb2F0IG9yICJhdXRvIicuZm9ybWF0KGFyZykpCgogICAgcmV0dXJuIGFyZwoKCmRlZiBpc19pbnQocGFyc2VyLCBhcmcpOgogICAgIiIiCiAgICBDaGVjayBpZiBhcmd1bWVudCBpcyBpbnQgb3IgYXV0by4KICAgICIiIgogICAgaWYgYXJnICE9ICJhdXRvIjoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGFyZyA9IGludChhcmcpCiAgICAgICAgZXhjZXB0IHBhcnNlci5lcnJvcjoKICAgICAgICAgICAgcGFyc2VyLmVycm9yKCdWYWx1ZSB7MH0gaXMgbm90IGFuIGludCBvciAiYXV0byInLmZvcm1hdChhcmcpKQoKICAgIHJldHVybiBhcmcKCgpkZWYgaXNfcmFuZ2UocGFyc2VyLCBhcmcpOgogICAgIiIiCiAgICBDaGVjayBpZiBhcmd1bWVudCBpcyBtaW4vbWF4IHBhaXIuCiAgICAiIiIKICAgIGlmIGFyZyBpcyBub3QgTm9uZSBhbmQgbGVuKGFyZykgIT0gMjoKICAgICAgICBwYXJzZXIuZXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgbWluL21heCBwYWlyLiIpCiAgICBlbGlmIGFyZyBpcyBub3QgTm9uZSBhbmQgZmxvYXQoYXJnWzBdKSA+IGZsb2F0KGFyZ1sxXSk6CiAgICAgICAgcGFyc2VyLmVycm9yKCJBcmd1bWVudCBtaW4gbXVzdCBiZSBsb3dlciB0aGFuIG1heC4iKQoKICAgIHJldHVybiBhcmcKCgpERUZBVUxUX0ZJTFRFUl9PUkRFUiA9IDYKREVGQVVMVF9QQURfU0VDT05EUyA9IDMwLjAKREVGQVVMVF9QRVJNVVRBVElPTk1FVEhPRCA9ICJzaHVmZmxlIgpERUZBVUxUX05PUk1UWVBFID0gInN0ZGRldiIKREVGQVVMVF9GSUxURVJCQU5EID0gImxmbyIKREVGQVVMVF9GSUxURVJUWVBFID0gInRyYXBlem9pZGFsIgpERUZBVUxUX1BBRFZBTCA9IDAKREVGQVVMVF9XSU5ET1dGVU5DID0gImhhbW1pbmciCgoKZGVmIGFkZHJlcWlucHV0bmlmdGlmaWxlKHBhcnNlciwgdmFybmFtZSwgYWRkZWR0ZXh0PSIiKToKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgdmFybmFtZSwKICAgICAgICB0eXBlPWxhbWJkYSB4OiBpc192YWxpZF9maWxlKHBhcnNlciwgeCksCiAgICAgICAgaGVscD0iSW5wdXQgTklGVEkgZmlsZSBuYW1lLiAgIiArIGFkZGVkdGV4dCwKICAgICkKCgpkZWYgYWRkcmVxb3V0cHV0bmlmdGlmaWxlKHBhcnNlciwgdmFybmFtZSwgYWRkZWR0ZXh0PSIiKToKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgdmFybmFtZSwKICAgICAgICB0eXBlPXN0ciwKICAgICAgICBoZWxwPSJPdXRwdXQgTklGVEkgZmlsZSBuYW1lLiAgIiArIGFkZGVkdGV4dCwKICAgICkKCgpkZWYgYWRkcmVxaW5wdXR0ZXh0ZmlsZShwYXJzZXIsIHZhcm5hbWUsIG9uZWNvbD1GYWxzZSk6CiAgICBpZiBvbmVjb2w6CiAgICAgICAgY29sc3BlY2xpbmUgPSAoCiAgICAgICAgICAgICJVc2UgWzpDT0xVTU5dIHRvIHNlbGVjdCB3aGljaCBjb2x1bW4gdG8gdXNlLCB3aGVyZSBDT0xVTU4gaXMgYW4gIgogICAgICAgICAgICAiaW50ZWdlciBvciBhIGNvbHVtbiBuYW1lIChpZiBpbnB1dCBmaWxlIGlzIEJJRFMpLiIKICAgICAgICApCiAgICBlbHNlOgogICAgICAgIGNvbHNwZWNsaW5lID0gKAogICAgICAgICAgICAiVXNlIFs6Q09MU1BFQ10gdG8gc2VsZWN0IHdoaWNoIGNvbHVtbihzKSB0byB1c2UsIHdoZXJlIENPTFNQRUMgaXMgYW4gIgogICAgICAgICAgICAiaW50ZWdlciwgYSBjb2x1bW4gc2VwYXJhdGVkIGxpc3Qgb2YgcmFuZ2VzLCBvciBhIGNvbW1hICIKICAgICAgICAgICAgInNlcGFyYXRlZCBzZXQgb2YgY29sdW1uIG5hbWVzIChpZiBpbnB1dCBmaWxlIGlzIEJJRFMpLiAgRGVmYXVsdCBpcyB0byB1c2UgYWxsIGNvbHVtbnMiCiAgICAgICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICB2YXJuYW1lLAogICAgICAgIHR5cGU9bGFtYmRhIHg6IGlzX3ZhbGlkX2ZpbGUocGFyc2VyLCB4KSwKICAgICAgICBoZWxwPSJUZXh0IGZpbGUgY29udGFpbmluZyBvbmUgb3IgbW9yZSB0aW1lc2VyaWVzIGNvbHVtbnMuICIgKyBjb2xzcGVjbGluZSwKICAgICkKCgpkZWYgYWRkcmVxaW5wdXR0ZXh0ZmlsZXMocGFyc2VyLCB2YXJuYW1lLCBudW1yZXE9IlR3byIsIG5hcmdzPSIqIiwgb25lY29sPUZhbHNlKToKICAgIGlmIG9uZWNvbDoKICAgICAgICBjb2xzcGVjbGluZSA9ICgKICAgICAgICAgICAgIlVzZSBbOkNPTFVNTl0gdG8gc2VsZWN0IHdoaWNoIGNvbHVtbiB0byB1c2UsIHdoZXJlIENPTFVNTiBpcyBhbiAiCiAgICAgICAgICAgICJpbnRlZ2VyIG9yIGEgY29sdW1uIG5hbWUgKGlmIGlucHV0IGZpbGUgaXMgQklEUykuIgogICAgICAgICkKICAgIGVsc2U6CiAgICAgICAgY29sc3BlY2xpbmUgPSAoCiAgICAgICAgICAgICJVc2UgWzpDT0xTUEVDXSB0byBzZWxlY3Qgd2hpY2ggY29sdW1uKHMpIHRvIHVzZSwgd2hlcmUgQ09MU1BFQyBpcyBhbiAiCiAgICAgICAgICAgICJpbnRlZ2VyLCBhIGNvbHVtbiBzZXBhcmF0ZWQgbGlzdCBvZiByYW5nZXMsIG9yIGEgY29tbWEgIgogICAgICAgICAgICAic2VwYXJhdGVkIHNldCBvZiBjb2x1bW4gbmFtZXMgKGlmIGlucHV0IGZpbGUgaXMgQklEUykuICBEZWZhdWx0IGlzIHRvIHVzZSBhbGwgY29sdW1ucy4iCiAgICAgICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICB2YXJuYW1lLAogICAgICAgIG5hcmdzPW5hcmdzLAogICAgICAgIHR5cGU9bGFtYmRhIHg6IGlzX3ZhbGlkX2ZpbGUocGFyc2VyLCB4KSwKICAgICAgICBoZWxwPW51bXJlcSArICIgdGV4dCBmaWxlcyBjb250YWluaW5nIG9uZSBvciBtb3JlIHRpbWVzZXJpZXMgY29sdW1ucy4gIiArIGNvbHNwZWNsaW5lLAogICAgKQoKCmRlZiBhZGRyZXFvdXRwdXR0ZXh0ZmlsZShwYXJzZXIsIHZhcm5hbWUsIHJvb3RuYW1lPUZhbHNlKToKICAgIGlmIHJvb3RuYW1lOgogICAgICAgIGhlbHBsaW5lID0gIlJvb3QgbmFtZSBmb3IgdGhlIG91dHB1dCBmaWxlcyIKICAgIGVsc2U6CiAgICAgICAgaGVscGxpbmUgPSAiTmFtZSBvZiB0aGUgb3V0cHV0IHRleHQgZmlsZS4iCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgIHZhcm5hbWUsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgaGVscD1oZWxwbGluZSwKICAgICkKCgpkZWYgYWRkbm9ybWFsaXphdGlvbm9wdHMocGFyc2VyLCBub3JtdGFyZ2V0PSJ0aW1lY291cnNlIiwgZGVmYXVsdG1ldGhvZD1ERUZBVUxUX05PUk1UWVBFKToKICAgIG5vcm1fb3B0cyA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoIk5vcm1hbGl6YXRpb24gb3B0aW9ucyIpCiAgICBub3JtX29wdHMuYWRkX2FyZ3VtZW50KAogICAgICAgICItLW5vcm1tZXRob2QiLAogICAgICAgIGRlc3Q9Im5vcm1tZXRob2QiLAogICAgICAgIGFjdGlvbj0ic3RvcmUiLAogICAgICAgIHR5cGU9c3RyLAogICAgICAgIGNob2ljZXM9WyJOb25lIiwgInBlcmNlbnQiLCAidmFyaWFuY2UiLCAic3RkZGV2IiwgInoiLCAicDJwIiwgIm1hZCJdLAogICAgICAgIGhlbHA9KAogICAgICAgICAgICBmIkRlbWVhbiBhbmQgbm9ybWFsaXplIHtub3JtdGFyZ2V0fSAiCiAgICAgICAgICAgICJ1c2luZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzOiAiCiAgICAgICAgICAgICciTm9uZSIgLSBkZW1lYW4gb25seTsgJwogICAgICAgICAgICAnInBlcmNlbnQiIC0gZGl2aWRlIGJ5IG1lYW47ICcKICAgICAgICAgICAgJyJ2YXJpYW5jZSIgLSBkaXZpZGUgYnkgdmFyaWFuY2U7ICcKICAgICAgICAgICAgJyJzdGRkZXYiIG9yICJ6IiAtIGRpdmlkZSBieSBzdGFuZGFyZCBkZXZpYXRpb247ICcKICAgICAgICAgICAgJyJwMnAiIC0gZGl2aWRlIGJ5IHJhbmdlOyAnCiAgICAgICAgICAgICcibWFkIiAtIGRpdmlkZSBieSBtZWRpYW4gYWJzb2x1dGUgZGV2aWF0aW9uLiAnCiAgICAgICAgICAgIGYnRGVmYXVsdCBpcyAie2RlZmF1bHRtZXRob2R9Ii4nCiAgICAgICAgKSwKICAgICAgICBkZWZhdWx0PWRlZmF1bHRtZXRob2QsCiAgICApCgoKZGVmIGFkZGZpbHRlcm9wdHMoCiAgICBwYXJzZXIsIGZpbHRlcnRhcmdldD0idGltZWNvdXJzZXMiLCBkZWZhdWx0bWV0aG9kPURFRkFVTFRfRklMVEVSQkFORCwgZGV0YWlscz1GYWxzZQopOgogICAgZmlsdF9vcHRzID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgiRmlsdGVyaW5nIG9wdGlvbnMiKQogICAgZmlsdF9vcHRzLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1maWx0ZXJiYW5kIiwKICAgICAgICBkZXN0PSJmaWx0ZXJiYW5kIiwKICAgICAgICBhY3Rpb249InN0b3JlIiwKICAgICAgICB0eXBlPXN0ciwKICAgICAgICBjaG9pY2VzPVsiTm9uZSIsICJ2bGYiLCAibGZvIiwgInJlc3AiLCAiY2FyZGlhYyIsICJsZm9fbGVnYWN5Il0sCiAgICAgICAgaGVscD0oCiAgICAgICAgICAgIGYnRmlsdGVyIHtmaWx0ZXJ0YXJnZXR9IHRvIHNwZWNpZmljIGJhbmQuIFVzZSAiTm9uZSIgdG8gZGlzYWJsZSBmaWx0ZXJpbmcuICAnCiAgICAgICAgICAgIGYnRGVmYXVsdCBpcyAie2RlZmF1bHRtZXRob2R9Ii4nCiAgICAgICAgKSwKICAgICAgICBkZWZhdWx0PWRlZmF1bHRtZXRob2QsCiAgICApCiAgICBmaWx0X29wdHMuYWRkX2FyZ3VtZW50KAogICAgICAgICItLWZpbHRlcmZyZXFzIiwKICAgICAgICBkZXN0PSJwYXNzdmVjIiwKICAgICAgICBhY3Rpb249InN0b3JlIiwKICAgICAgICBuYXJncz0yLAogICAgICAgIHR5cGU9ZmxvYXQsCiAgICAgICAgbWV0YXZhcj0oIkxPV0VSUEFTUyIsICJVUFBFUlBBU1MiKSwKICAgICAgICBoZWxwPSgKICAgICAgICAgICAgIkZpbHRlciAiICsgZmlsdGVydGFyZ2V0ICsgIiB0byByZXRhaW4gTE9XRVJQQVNTIHRvICIKICAgICAgICAgICAgIlVQUEVSUEFTUy4gSWYgLS1maWx0ZXJzdG9wZnJlcXMgaXMgbm90IGFsc28gc3BlY2lmaWVkLCAiCiAgICAgICAgICAgICJMT1dFUlNUT1AgYW5kIFVQUEVSU1RPUCB3aWxsIGJlIGNhbGN1bGF0ZWQgIgogICAgICAgICAgICAiYXV0b21hdGljYWxseS4gIgogICAgICAgICksCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgKQogICAgZmlsdF9vcHRzLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1maWx0ZXJzdG9wZnJlcXMiLAogICAgICAgIGRlc3Q9InN0b3B2ZWMiLAogICAgICAgIGFjdGlvbj0ic3RvcmUiLAogICAgICAgIG5hcmdzPTIsCiAgICAgICAgdHlwZT1mbG9hdCwKICAgICAgICBtZXRhdmFyPSgiTE9XRVJTVE9QIiwgIlVQUEVSU1RPUCIpLAogICAgICAgIGhlbHA9KAogICAgICAgICAgICAiRmlsdGVyICIgKyBmaWx0ZXJ0YXJnZXQgKyAiIHRvIHdpdGggc3RvcCBmcmVxdWVuY2llcyBMT1dFUlNUT1AgYW5kIFVQUEVSU1RPUC4gIgogICAgICAgICAgICAiTE9XRVJTVE9QIG11c3QgYmUgPD0gTE9XRVJQQVNTLCBVUFBFUlNUT1AgbXVzdCBiZSA+PSBVUFBFUlBBU1MuICIKICAgICAgICAgICAgIlVzaW5nIHRoaXMgYXJndW1lbnQgcmVxdWlyZXMgdGhlIHVzZSBvZiAtLWZpbHRlcmZyZXFzLiIKICAgICAgICApLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICkKICAgIGlmIGRldGFpbHM6CiAgICAgICAgZmlsdF9vcHRzLmFkZF9hcmd1bWVudCgKICAgICAgICAgICAgIi0tZmlsdGVydHlwZSIsCiAgICAgICAgICAgIGRlc3Q9ImZpbHRlcnR5cGUiLAogICAgICAgICAgICBhY3Rpb249InN0b3JlIiwKICAgICAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgICAgIGNob2ljZXM9WyJ0cmFwZXpvaWRhbCIsICJicmlja3dhbGwiLCAiYnV0dGVyd29ydGgiXSwKICAgICAgICAgICAgaGVscD0oCiAgICAgICAgICAgICAgICBmIkZpbHRlciB7ZmlsdGVydGFyZ2V0fSAiCiAgICAgICAgICAgICAgICAidXNpbmcgYSB0cmFwZXpvaWRhbCBGRlQsIGJyaWNrd2FsbCBGRlQsIG9yICIKICAgICAgICAgICAgICAgICJidXR0ZXJ3b3J0aCBiYW5kcGFzcyBmaWx0ZXIuICIKICAgICAgICAgICAgICAgIGYnRGVmYXVsdCBpcyAie0RFRkFVTFRfRklMVEVSVFlQRX0iLicKICAgICAgICAgICAgKSwKICAgICAgICAgICAgZGVmYXVsdD1ERUZBVUxUX0ZJTFRFUlRZUEUsCiAgICAgICAgKQogICAgICAgIGZpbHRfb3B0cy5hZGRfYXJndW1lbnQoCiAgICAgICAgICAgICItLWJ1dHRlcm9yZGVyIiwKICAgICAgICAgICAgZGVzdD0iZmlsdG9yZGVyIiwKICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsCiAgICAgICAgICAgIHR5cGU9aW50LAogICAgICAgICAgICBtZXRhdmFyPSJPUkRFUiIsCiAgICAgICAgICAgIGhlbHA9KAogICAgICAgICAgICAgICAgIlNldCBvcmRlciBvZiBidXR0ZXJ3b3J0aCBmaWx0ZXIgKGlmIHVzZWQpLiAiIGYiRGVmYXVsdCBpcyB7REVGQVVMVF9GSUxURVJfT1JERVJ9LiIKICAgICAgICAgICAgKSwKICAgICAgICAgICAgZGVmYXVsdD1ERUZBVUxUX0ZJTFRFUl9PUkRFUiwKICAgICAgICApCiAgICAgICAgZmlsdF9vcHRzLmFkZF9hcmd1bWVudCgKICAgICAgICAgICAgIi0tcGFkc2Vjb25kcyIsCiAgICAgICAgICAgIGRlc3Q9InBhZHNlY29uZHMiLAogICAgICAgICAgICBhY3Rpb249InN0b3JlIiwKICAgICAgICAgICAgdHlwZT1mbG9hdCwKICAgICAgICAgICAgbWV0YXZhcj0iU0VDT05EUyIsCiAgICAgICAgICAgIGhlbHA9KAogICAgICAgICAgICAgICAgIlRoZSBudW1iZXIgb2Ygc2Vjb25kcyBvZiBwYWRkaW5nIHRvIGFkZCB0byBlYWNoIGVuZCBvZiBhICIKICAgICAgICAgICAgICAgICJmaWx0ZXJlZCB0aW1lY291cnNlICIKICAgICAgICAgICAgICAgIGYidG8gcmVkdWNlIGVuZCBlZmZlY3RzLiAgRGVmYXVsdCBpcyB7REVGQVVMVF9QQURfU0VDT05EU30uIgogICAgICAgICAgICApLAogICAgICAgICAgICBkZWZhdWx0PURFRkFVTFRfUEFEX1NFQ09ORFMsCiAgICAgICAgKQoKCmRlZiBwb3N0cHJvY2Vzc2ZpbHRlcm9wdHMoYXJncywgZGVidWc9RmFsc2UpOgogICAgIyBjb25maWd1cmUgdGhlIGZpbHRlcgogICAgIyBzZXQgdGhlIHRyYXBlem9pZGFsIGZsYWcsIGlmIHVzaW5nCiAgICB0cnk6CiAgICAgICAgdGhldHlwZSA9IGFyZ3MuZmlsdGVydHlwZQogICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgIGFyZ3MuZmlsdGVydHlwZSA9ICJ0cmFwZXpvaWRhbCIKICAgIHRyeToKICAgICAgICB0aGVvcmRlciA9IGFyZ3MuZmlsdG9yZGVyCiAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgYXJncy5maWx0b3JkZXIgPSBERUZBVUxUX0ZJTFRFUl9PUkRFUgogICAgdHJ5OgogICAgICAgIHRoZXBhZHNlY29uZHMgPSBhcmdzLnBhZHNlY29uZHMKICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICBhcmdzLnBhZHNlY29uZHMgPSBERUZBVUxUX1BBRF9TRUNPTkRTCgogICAgIyBpZiBwYXNzdmVjLCBvciBwYXNzdmVjIGFuZCBzdG9wdmVjLCBhcmUgc2V0LCB3ZSBhcmUgZ29pbmcgc2V0IHVwIGFuIGFyYnBhc3MgZmlsdGVyCiAgICBhcmdzLmFyYnZlYyA9IE5vbmUKICAgIGlmIGRlYnVnOgogICAgICAgIHByaW50KCJiZWZvcmUgcHJlcHJvY2Vzc2luZyIpCiAgICAgICAgcHJpbnQoIlx0YXJncy5hcmJ2ZWM6IiwgYXJncy5hcmJ2ZWMpCiAgICAgICAgcHJpbnQoIlx0YXJncy5wYXNzdmVjOiIsIGFyZ3MucGFzc3ZlYykKICAgICAgICBwcmludCgiXHRhcmdzLnN0b3B2ZWM6IiwgYXJncy5zdG9wdmVjKQogICAgICAgIHByaW50KCJcdGFyZ3MuZmlsdGVyYmFuZDoiLCBhcmdzLmZpbHRlcmJhbmQpCiAgICBpZiBhcmdzLnN0b3B2ZWMgaXMgbm90IE5vbmU6CiAgICAgICAgaWYgYXJncy5wYXNzdmVjIGlzIG5vdCBOb25lOgogICAgICAgICAgICBhcmdzLmFyYnZlYyA9IFthcmdzLnBhc3N2ZWNbMF0sIGFyZ3MucGFzc3ZlY1sxXSwgYXJncy5zdG9wdmVjWzBdLCBhcmdzLnN0b3B2ZWNbMV1dCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiLS1maWx0ZXJmcmVxcyBtdXN0IGJlIHVzZWQgaWYgLS1maWx0ZXJzdG9wZnJlcXMgaXMgc3BlY2lmaWVkIikKICAgIGVsc2U6CiAgICAgICAgaWYgYXJncy5wYXNzdmVjIGlzIG5vdCBOb25lOgogICAgICAgICAgICBhcmdzLmFyYnZlYyA9IFsKICAgICAgICAgICAgICAgIGFyZ3MucGFzc3ZlY1swXSwKICAgICAgICAgICAgICAgIGFyZ3MucGFzc3ZlY1sxXSwKICAgICAgICAgICAgICAgIGFyZ3MucGFzc3ZlY1swXSAqIDAuOTUsCiAgICAgICAgICAgICAgICBhcmdzLnBhc3N2ZWNbMV0gKiAxLjA1LAogICAgICAgICAgICBdCiAgICBpZiBhcmdzLmFyYnZlYyBpcyBub3QgTm9uZToKICAgICAgICAjIE5PVEUgLSB0aGlzIHZlY3RvciBpcyBMT1dFUlBBU1MsIFVQUEVSUEFTUywgTE9XRVJTVE9QLCBVUFBFUlNUT1AKICAgICAgICAjIHNldGZyZXFzIGV4cGVjdHMgTE9XRVJTVE9QLCBMT1dFUlBBU1MsIFVQUEVSUEFTUywgVVBQRVJTVE9QCiAgICAgICAgdGhlcHJlZmlsdGVyID0gdGlkZV9maWx0Lk5vbmNhdXNhbEZpbHRlcigKICAgICAgICAgICAgImFyYiIsCiAgICAgICAgICAgIHRyYW5zZmVyZnVuYz1hcmdzLmZpbHRlcnR5cGUsCiAgICAgICAgKQogICAgICAgIHRoZXByZWZpbHRlci5zZXRmcmVxcyhhcmdzLmFyYnZlY1syXSwgYXJncy5hcmJ2ZWNbMF0sIGFyZ3MuYXJidmVjWzFdLCBhcmdzLmFyYnZlY1szXSkKICAgIGVsc2U6CiAgICAgICAgdGhlcHJlZmlsdGVyID0gdGlkZV9maWx0Lk5vbmNhdXNhbEZpbHRlcigKICAgICAgICAgICAgYXJncy5maWx0ZXJiYW5kLAogICAgICAgICAgICB0cmFuc2ZlcmZ1bmM9YXJncy5maWx0ZXJ0eXBlLAogICAgICAgICAgICBwYWR0aW1lPWFyZ3MucGFkc2Vjb25kcywKICAgICAgICApCgogICAgIyBzZXQgdGhlIGJ1dHRlcndvcnRoIG9yZGVyCiAgICB0aGVwcmVmaWx0ZXIuc2V0YnV0dGVyb3JkZXIoYXJncy5maWx0b3JkZXIpCgogICAgaWYgZGVidWc6CiAgICAgICAgcHJpbnQoImJlZm9yZSBwcmVwcm9jZXNzaW5nIikKICAgICAgICBwcmludCgiXHRhcmdzLmFyYnZlYzoiLCBhcmdzLmFyYnZlYykKICAgICAgICBwcmludCgiXHRhcmdzLnBhc3N2ZWM6IiwgYXJncy5wYXNzdmVjKQogICAgICAgIHByaW50KCJcdGFyZ3Muc3RvcHZlYzoiLCBhcmdzLnN0b3B2ZWMpCiAgICAgICAgcHJpbnQoIlx0YXJncy5maWx0ZXJiYW5kOiIsIGFyZ3MuZmlsdGVyYmFuZCkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICgKICAgICAgICBhcmdzLmxvd2Vyc3RvcCwKICAgICAgICBhcmdzLmxvd2VycGFzcywKICAgICAgICBhcmdzLnVwcGVycGFzcywKPHxmaW1fZW5kfD4="]
["d46e3437e9a32df73668b76ae8442748c10103aa-2","d46e3437e9a32df73668b76ae8442748c10103aa","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogbGF0aW4tMSAtKi0KIwojICAgQ29weXJpZ2h0IDIwMTgtMjAyMSBCbGFpc2UgRnJlZGVyaWNrCiMKIyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKIwoiIiIKRnVuY3Rpb25zIGZvciBwYXJzZXJzLgoiIiIKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBvcy5wYXRoIGFzIG9wCmltcG9ydCBzeXMKCmltcG9ydCByYXBpZHRpZGUuZmlsdGVyIGFzIHRpZGVfZmlsdAppbXBvcnQgcmFwaWR0aWRlLmlvIGFzIHRpZGVfaW8KCgpjbGFzcyBJbmRpY2F0ZVNwZWNpZmllZEFjdGlvbihhcmdwYXJzZS5BY3Rpb24pOgogICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CiAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIHNlbGYuZGVzdCwgdmFsdWVzKQogICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRlc3QgKyAiX25vbmRlZmF1bHQiLCBUcnVlKQoKCmRlZiBzZXRpZm5vdHNldCh0aGVkaWN0LCB0aGVrZXksIHRoZXZhbCk6CiAgICBpZiAodGhla2V5ICsgIl9ub25kZWZhdWx0Iikgbm90IGluIHRoZWRpY3Qua2V5cygpOgogICAgICAgIHByaW50KCJvdmVycmlkaW5nICIgKyB0aGVrZXkpCiAgICAgICAgdGhlZGljdFt0aGVrZXldID0gdGhldmFsCgoKZGVmIGlzX3ZhbGlkX2ZpbGUocGFyc2VyLCBhcmcpOgogICAgIiIiCiAgICBDaGVjayBpZiBhcmd1bWVudCBpcyBleGlzdGluZyBmaWxlLgogICAgIiIiCiAgICBpZiBhcmcgaXMgbm90IE5vbmU6CiAgICAgICAgdGhlZmlsZW5hbWUsIGNvbHNwZWMgPSB0aWRlX2lvLnBhcnNlZmlsZXNwZWMoYXJnKQogICAgZWxzZToKICAgICAgICB0aGVmaWxlbmFtZSA9IE5vbmUKCiAgICBpZiBub3Qgb3AuaXNmaWxlKHRoZWZpbGVuYW1lKSBhbmQgdGhlZmlsZW5hbWUgaXMgbm90IE5vbmU6CiAgICAgICAgcGFyc2VyLmVycm9yKCJUaGUgZmlsZSB7MH0gZG9lcyBub3QgZXhpc3QhIi5mb3JtYXQodGhlZmlsZW5hbWUpKQoKICAgIHJldHVybiBhcmcKCgpkZWYgaW52ZXJ0X2Zsb2F0KHBhcnNlciwgYXJnKToKICAgICIiIgogICAgQ2hlY2sgaWYgYXJndW1lbnQgaXMgZmxvYXQgb3IgYXV0by4KICAgICIiIgogICAgYXJnID0gaXNfZmxvYXQocGFyc2VyLCBhcmcpCgogICAgaWYgYXJnICE9ICJhdXRvIjoKICAgICAgICBhcmcgPSAxLjAgLyBhcmcKICAgIHJldHVybiBhcmcKCgpkZWYgaXNfZmxvYXQocGFyc2VyLCBhcmcpOgogICAgIiIiCiAgICBDaGVjayBpZiBhcmd1bWVudCBpcyBmbG9hdCBvciBhdXRvLgogICAgIiIiCiAgICBpZiBhcmcgIT0gImF1dG8iOgogICAgICAgIHRyeToKICAgICAgICAgICAgYXJnID0gZmxvYXQoYXJnKQogICAgICAgIGV4Y2VwdCBwYXJzZXIuZXJyb3I6CiAgICAgICAgICAgIHBhcnNlci5lcnJvcignVmFsdWUgezB9IGlzIG5vdCBhIGZsb2F0IG9yICJhdXRvIicuZm9ybWF0KGFyZykpCgogICAgcmV0dXJuIGFyZwoKCmRlZiBpc19pbnQocGFyc2VyLCBhcmcpOgogICAgIiIiCiAgICBDaGVjayBpZiBhcmd1bWVudCBpcyBpbnQgb3IgYXV0by4KICAgICIiIgogICAgaWYgYXJnICE9ICJhdXRvIjoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGFyZyA9IGludChhcmcpCiAgICAgICAgZXhjZXB0IHBhcnNlci5lcnJvcjoKICAgICAgICAgICAgcGFyc2VyLmVycm9yKCdWYWx1ZSB7MH0gaXMgbm90IGFuIGludCBvciAiYXV0byInLmZvcm1hdChhcmcpKQoKICAgIHJldHVybiBhcmcKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmRlZiBpc19yYW5nZShwYXJzZXIsIGFyZyk6CiAgICAiIiIKICAgIENoZWNrIGlmIGFyZ3VtZW50IGlzIG1pbi9tYXggcGFpci4KPHxmaW1fZW5kfD4="]
["99d7e6d9a155cd3cb49656239e31cfb217ff8c5f-1","99d7e6d9a155cd3cb49656239e31cfb217ff8c5f","PHxmaW1fcHJlZml4fD4KcGFyYW1ldGVycyA9IHsKCSJyZXN1bHRzIjogWwoJCXsKICAgICAgICAgICAgInR5cGUiOiAibWF4IiwKICAgICAgICAgICAgInN0ZXAiOiAiU2hlYXIiLAogICAgICAgICAgICAiaWRlbnRpZmllciI6CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInN5bWJvbCI6ICJTMjMiLAogICAgICAgICAgICAgICAgICAgICJlbHNldCI6ICJDT0hFU0lWRSIsCiAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uIjogIkVsZW1lbnQgMSBJbnQgUG9pbnQgMSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZWZlcmVuY2VWYWx1ZSI6IDc1LjMsICAjIFNUID0gWUMqY29zKGFscGhhMCkgKiAoc2luKGFscGhhMCkgKyBjb3MoYWxwaGEwKS90YW4oMi4wKmFscGhhMCkpCiAgICAgICAgICAgICJ0b2xlcmFuY2UiOiAwLjA3NTMKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAiZGlzcF9hdF96ZXJvX3kiLAogICAgICAgICAgICAic3RlcCI6ICJTaGVhciIsCiAgICAgICAgICAgICJpZGVudGlmaWVyIjogWwogICAgICAgICAgICAgICAgeyAjIHgKICAgICAgICAgICAgICAgICAgICAic3ltYm9sIjogIlUyIiwKICAgICAgICAgICAgICAgICAgICAibnNldCI6ICJaKyIsCiAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uIjogIk5vZGUgNSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7ICMgeQogICAgICAgICAgICAgICAgICAgICJzeW1ib2wiOiAiUzIzIiwKICAgICAgICAgICAgICAgICAgICAiZWxzZXQiOiAiQ09IRVNJVkUiLAogICAgICAgICAgICAgICAgICAgICJwb3NpdGlvbiI6ICJFbGVtZW50IDEgSW50IFBvaW50IDEiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ3aW5kb3ciOiBbMC4wMTUsIDAuMDI1XSwKICAgICAgICAgICAgInplcm9Ub2wiOiAwLjAwNSwgICMgRGVmaW5lcyBob3cgY2xvc2UgdG8gemVybyB0aGUgeSB2YWx1ZSBuZWVkcyB0byBiZQogICAgICAgICAgICAicmVmZXJlbmNlVmFsdWUiOiAyLjAqMC43ODgvNzUuMywgICMgdV9mID0gMipHU0wvU1QKICAgICAgICAgICAgInRvbGVyYW5jZSI6IDFlLTUKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAibWF4IiwKICAgICAgICAgICAgInN0ZXAiOiAiU2hlYXIiLAogICAgICAgICAgICAiaWRlbnRpZmllciI6CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInN5bWJvbCI6ICJTRFZfQ09IX2RtZyIsCiAgICAgICAgICAgICAgICAgICAgImVsc2V0IjogIkNPSEVTSVZFIiwKICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24iOiAiRWxlbWVudCAxIEludCBQb2ludCAxIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlZmVyZW5jZVZhbHVlIjogMS4wLAogICAgICAgICAgICAidG9sZXJhbmNlIjogMC4wCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJ0eXBlIjogImNvbnRpbnVvdXMiLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICJzdGVwIjogIlNoZWFyIiwKICAgICAgICAgICAgImlkZW50aWZpZXIiOgogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJzeW1ib2wiOiAiUzIzIiwKPHxmaW1fZW5kfD4="]
["99d7e6d9a155cd3cb49656239e31cfb217ff8c5f-2","99d7e6d9a155cd3cb49656239e31cfb217ff8c5f","PHxmaW1fcHJlZml4fD4KcGFyYW1ldGVycyA9IHsKCSJyZXN1bHRzIjogWwoJCXsKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICAgICAgInN5bWJvbCI6ICJTMjMiLAogICAgICAgICAgICAgICAgICAgICJlbHNldCI6ICJDT0hFU0lWRSIsCiAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uIjogIkVsZW1lbnQgMSBJbnQgUG9pbnQgMSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZWZlcmVuY2VWYWx1ZSI6IDc1LjMsICAjIFNUID0gWUMqY29zKGFscGhhMCkgKiAoc2luKGFscGhhMCkgKyBjb3MoYWxwaGEwKS90YW4oMi4wKmFscGhhMCkpCiAgICAgICAgICAgICJ0b2xlcmFuY2UiOiAwLjA3NTMKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAiZGlzcF9hdF96ZXJvX3kiLAogICAgICAgICAgICAic3RlcCI6ICJTaGVhciIsCiAgICAgICAgICAgICJpZGVudGlmaWVyIjogWwogICAgICAgICAgICAgICAgeyAjIHgKICAgICAgICAgICAgICAgICAgICAic3ltYm9sIjogIlUyIiwKICAgICAgICAgICAgICAgICAgICAibnNldCI6ICJaKyIsCiAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uIjogIk5vZGUgNSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7ICMgeQogICAgICAgICAgICAgICAgICAgICJzeW1ib2wiOiAiUzIzIiwKICAgICAgICAgICAgICAgICAgICAiZWxzZXQiOiAiQ09IRVNJVkUiLAogICAgICAgICAgICAgICAgICAgICJwb3NpdGlvbiI6ICJFbGVtZW50IDEgSW50IFBvaW50IDEiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ3aW5kb3ciOiBbMC4wMTUsIDAuMDI1XSwKICAgICAgICAgICAgInplcm9Ub2wiOiAwLjAwNSwgICMgRGVmaW5lcyBob3cgY2xvc2UgdG8gemVybyB0aGUgeSB2YWx1ZSBuZWVkcyB0byBiZQogICAgICAgICAgICAicmVmZXJlbmNlVmFsdWUiOiAyLjAqMC43ODgvNzUuMywgICMgdV9mID0gMipHU0wvU1QKICAgICAgICAgICAgInRvbGVyYW5jZSI6IDFlLTUKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAibWF4IiwKICAgICAgICAgICAgInN0ZXAiOiAiU2hlYXIiLAogICAgICAgICAgICAiaWRlbnRpZmllciI6CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInN5bWJvbCI6ICJTRFZfQ09IX2RtZyIsCiAgICAgICAgICAgICAgICAgICAgImVsc2V0IjogIkNPSEVTSVZFIiwKICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24iOiAiRWxlbWVudCAxIEludCBQb2ludCAxIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlZmVyZW5jZVZhbHVlIjogMS4wLAogICAgICAgICAgICAidG9sZXJhbmNlIjogMC4wCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJ0eXBlIjogImNvbnRpbnVvdXMiLAogICAgICAgICAgICAic3RlcCI6ICJTaGVhciIsCiAgICAgICAgICAgICJpZGVudGlmaWVyIjoKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAic3ltYm9sIjogIlMyMyIsCiAgICAgICAgICAgICAgICAgICAgImVsc2V0IjogIkNPSEVTSVZFIiwKICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24iOiAiRWxlbWVudCAxIEludCBQb2ludCAxIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlZmVyZW5jZVZhbHVlIjogMC4wLAogICAgICAgICAgICAidG9sZXJhbmNlIjogMC4xCiAgICAgICAgfQoJXQp9Cjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICJ0eXBlIjogIm1heCIsCiAgICAgICAgICAgICJzdGVwIjogIlNoZWFyIiwKICAgICAgICAgICAgImlkZW50aWZpZXIiOgogICAgICAgICAgICAgICAgewo8fGZpbV9lbmR8Pg=="]
["99d7e6d9a155cd3cb49656239e31cfb217ff8c5f-3","99d7e6d9a155cd3cb49656239e31cfb217ff8c5f","PHxmaW1fcHJlZml4fD4KcGFyYW1ldGVycyA9IHsKCSJyZXN1bHRzIjogWwoJCXsKICAgICAgICAgICAgInR5cGUiOiAibWF4IiwKICAgICAgICAgICAgInN0ZXAiOiAiU2hlYXIiLAogICAgICAgICAgICAiaWRlbnRpZmllciI6CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInN5bWJvbCI6ICJTMjMiLAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZWZlcmVuY2VWYWx1ZSI6IDc1LjMsICAjIFNUID0gWUMqY29zKGFscGhhMCkgKiAoc2luKGFscGhhMCkgKyBjb3MoYWxwaGEwKS90YW4oMi4wKmFscGhhMCkpCiAgICAgICAgICAgICJ0b2xlcmFuY2UiOiAwLjA3NTMKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAiZGlzcF9hdF96ZXJvX3kiLAogICAgICAgICAgICAic3RlcCI6ICJTaGVhciIsCiAgICAgICAgICAgICJpZGVudGlmaWVyIjogWwogICAgICAgICAgICAgICAgeyAjIHgKICAgICAgICAgICAgICAgICAgICAic3ltYm9sIjogIlUyIiwKICAgICAgICAgICAgICAgICAgICAibnNldCI6ICJaKyIsCiAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uIjogIk5vZGUgNSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7ICMgeQogICAgICAgICAgICAgICAgICAgICJzeW1ib2wiOiAiUzIzIiwKICAgICAgICAgICAgICAgICAgICAiZWxzZXQiOiAiQ09IRVNJVkUiLAogICAgICAgICAgICAgICAgICAgICJwb3NpdGlvbiI6ICJFbGVtZW50IDEgSW50IFBvaW50IDEiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ3aW5kb3ciOiBbMC4wMTUsIDAuMDI1XSwKICAgICAgICAgICAgInplcm9Ub2wiOiAwLjAwNSwgICMgRGVmaW5lcyBob3cgY2xvc2UgdG8gemVybyB0aGUgeSB2YWx1ZSBuZWVkcyB0byBiZQogICAgICAgICAgICAicmVmZXJlbmNlVmFsdWUiOiAyLjAqMC43ODgvNzUuMywgICMgdV9mID0gMipHU0wvU1QKICAgICAgICAgICAgInRvbGVyYW5jZSI6IDFlLTUKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAibWF4IiwKICAgICAgICAgICAgInN0ZXAiOiAiU2hlYXIiLAogICAgICAgICAgICAiaWRlbnRpZmllciI6CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInN5bWJvbCI6ICJTRFZfQ09IX2RtZyIsCiAgICAgICAgICAgICAgICAgICAgImVsc2V0IjogIkNPSEVTSVZFIiwKICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24iOiAiRWxlbWVudCAxIEludCBQb2ludCAxIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlZmVyZW5jZVZhbHVlIjogMS4wLAogICAgICAgICAgICAidG9sZXJhbmNlIjogMC4wCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJ0eXBlIjogImNvbnRpbnVvdXMiLAogICAgICAgICAgICAic3RlcCI6ICJTaGVhciIsCiAgICAgICAgICAgICJpZGVudGlmaWVyIjoKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAic3ltYm9sIjogIlMyMyIsCiAgICAgICAgICAgICAgICAgICAgImVsc2V0IjogIkNPSEVTSVZFIiwKICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24iOiAiRWxlbWVudCAxIEludCBQb2ludCAxIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlZmVyZW5jZVZhbHVlIjogMC4wLAogICAgICAgICAgICAidG9sZXJhbmNlIjogMC4xCiAgICAgICAgfQoJXQp9Cjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgImVsc2V0IjogIkNPSEVTSVZFIiwKICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24iOiAiRWxlbWVudCAxIEludCBQb2ludCAxIgo8fGZpbV9lbmR8Pg=="]
["99d7e6d9a155cd3cb49656239e31cfb217ff8c5f-4","99d7e6d9a155cd3cb49656239e31cfb217ff8c5f","PHxmaW1fcHJlZml4fD4KcGFyYW1ldGVycyA9IHsKCSJyZXN1bHRzIjogWwoJCXsKICAgICAgICAgICAgInR5cGUiOiAibWF4IiwKICAgICAgICAgICAgInN0ZXAiOiAiU2hlYXIiLAogICAgICAgICAgICAiaWRlbnRpZmllciI6CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInN5bWJvbCI6ICJTMjMiLAogICAgICAgICAgICAgICAgICAgICJlbHNldCI6ICJDT0hFU0lWRSIsCiAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uIjogIkVsZW1lbnQgMSBJbnQgUG9pbnQgMSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZWZlcmVuY2VWYWx1ZSI6IDc1LjMsICAjIFNUID0gWUMqY29zKGFscGhhMCkgKiAoc2luKGFscGhhMCkgKyBjb3MoYWxwaGEwKS90YW4oMi4wKmFscGhhMCkpCiAgICAgICAgICAgICJ0b2xlcmFuY2UiOiAwLjA3NTMKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAiZGlzcF9hdF96ZXJvX3kiLAogICAgICAgICAgICAic3RlcCI6ICJTaGVhciIsCiAgICAgICAgICAgICJpZGVudGlmaWVyIjogWwogICAgICAgICAgICAgICAgeyAjIHgKICAgICAgICAgICAgICAgICAgICAic3ltYm9sIjogIlUyIiwKICAgICAgICAgICAgICAgICAgICAibnNldCI6ICJaKyIsCiAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uIjogIk5vZGUgNSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7ICMgeQogICAgICAgICAgICAgICAgICAgICJzeW1ib2wiOiAiUzIzIiwKICAgICAgICAgICAgICAgICAgICAiZWxzZXQiOiAiQ09IRVNJVkUiLAogICAgICAgICAgICAgICAgICAgICJwb3NpdGlvbiI6ICJFbGVtZW50IDEgSW50IFBvaW50IDEiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ3aW5kb3ciOiBbMC4wMTUsIDAuMDI1XSwKICAgICAgICAgICAgInplcm9Ub2wiOiAwLjAwNSwgICMgRGVmaW5lcyBob3cgY2xvc2UgdG8gemVybyB0aGUgeSB2YWx1ZSBuZWVkcyB0byBiZQogICAgICAgICAgICAicmVmZXJlbmNlVmFsdWUiOiAyLjAqMC43ODgvNzUuMywgICMgdV9mID0gMipHU0wvU1QKICAgICAgICAgICAgInRvbGVyYW5jZSI6IDFlLTUKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAibWF4IiwKICAgICAgICAgICAgInN0ZXAiOiAiU2hlYXIiLAogICAgICAgICAgICAiaWRlbnRpZmllciI6CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInN5bWJvbCI6ICJTRFZfQ09IX2RtZyIsCiAgICAgICAgICAgICAgICAgICAgImVsc2V0IjogIkNPSEVTSVZFIiwKICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24iOiAiRWxlbWVudCAxIEludCBQb2ludCAxIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlZmVyZW5jZVZhbHVlIjogMS4wLAogICAgICAgICAgICAidG9sZXJhbmNlIjogMC4wCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJ0eXBlIjogImNvbnRpbnVvdXMiLAogICAgICAgICAgICAic3RlcCI6ICJTaGVhciIsCiAgICAgICAgICAgICJpZGVudGlmaWVyIjoKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAic3ltYm9sIjogIlMyMyIsCiAgICAgICAgICAgICAgICAgICAgImVsc2V0IjogIkNPSEVTSVZFIiwKICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24iOiAiRWxlbWVudCAxIEludCBQb2ludCAxIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlZmVyZW5jZVZhbHVlIjogMC4wLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICJ0b2xlcmFuY2UiOiAwLjEKPHxmaW1fZW5kfD4="]
["99d7e6d9a155cd3cb49656239e31cfb217ff8c5f-5","99d7e6d9a155cd3cb49656239e31cfb217ff8c5f","PHxmaW1fcHJlZml4fD4KcGFyYW1ldGVycyA9IHsKCSJyZXN1bHRzIjogWwoJCXsKICAgICAgICAgICAgInR5cGUiOiAibWF4IiwKICAgICAgICAgICAgInN0ZXAiOiAiU2hlYXIiLAogICAgICAgICAgICAiaWRlbnRpZmllciI6CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInN5bWJvbCI6ICJTMjMiLAogICAgICAgICAgICAgICAgICAgICJlbHNldCI6ICJDT0hFU0lWRSIsCiAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uIjogIkVsZW1lbnQgMSBJbnQgUG9pbnQgMSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZWZlcmVuY2VWYWx1ZSI6IDc1LjMsICAjIFNUID0gWUMqY29zKGFscGhhMCkgKiAoc2luKGFscGhhMCkgKyBjb3MoYWxwaGEwKS90YW4oMi4wKmFscGhhMCkpCiAgICAgICAgICAgICJ0b2xlcmFuY2UiOiAwLjA3NTMKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAiZGlzcF9hdF96ZXJvX3kiLAogICAgICAgICAgICAic3RlcCI6ICJTaGVhciIsCiAgICAgICAgICAgICJpZGVudGlmaWVyIjogWwogICAgICAgICAgICAgICAgeyAjIHgKICAgICAgICAgICAgICAgICAgICAic3ltYm9sIjogIlUyIiwKICAgICAgICAgICAgICAgICAgICAibnNldCI6ICJaKyIsCiAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uIjogIk5vZGUgNSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7ICMgeQogICAgICAgICAgICAgICAgICAgICJzeW1ib2wiOiAiUzIzIiwKICAgICAgICAgICAgICAgICAgICAiZWxzZXQiOiAiQ09IRVNJVkUiLAogICAgICAgICAgICAgICAgICAgICJwb3NpdGlvbiI6ICJFbGVtZW50IDEgSW50IFBvaW50IDEiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ3aW5kb3ciOiBbMC4wMTUsIDAuMDI1XSwKICAgICAgICAgICAgInplcm9Ub2wiOiAwLjAwNSwgICMgRGVmaW5lcyBob3cgY2xvc2UgdG8gemVybyB0aGUgeSB2YWx1ZSBuZWVkcyB0byBiZQogICAgICAgICAgICAicmVmZXJlbmNlVmFsdWUiOiAyLjAqMC43ODgvNzUuMywgICMgdV9mID0gMipHU0wvU1QKICAgICAgICAgICAgInRvbGVyYW5jZSI6IDFlLTUKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAibWF4IiwKICAgICAgICAgICAgInN0ZXAiOiAiU2hlYXIiLAogICAgICAgICAgICAiaWRlbnRpZmllciI6CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInN5bWJvbCI6ICJTRFZfQ09IX2RtZyIsCiAgICAgICAgICAgICAgICAgICAgImVsc2V0IjogIkNPSEVTSVZFIiwKICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24iOiAiRWxlbWVudCAxIEludCBQb2ludCAxIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlZmVyZW5jZVZhbHVlIjogMS4wLAogICAgICAgICAgICAidG9sZXJhbmNlIjogMC4wCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJ0eXBlIjogImNvbnRpbnVvdXMiLAogICAgICAgICAgICAic3RlcCI6ICJTaGVhciIsCiAgICAgICAgICAgICJpZGVudGlmaWVyIjoKICAgICAgICAgICAgICAgIHsKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAicmVmZXJlbmNlVmFsdWUiOiAwLjAsCiAgICAgICAgICAgICJ0b2xlcmFuY2UiOiAwLjEKICAgICAgICB9CgldCn0KPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAic3ltYm9sIjogIlMyMyIsCiAgICAgICAgICAgICAgICAgICAgImVsc2V0IjogIkNPSEVTSVZFIiwKICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24iOiAiRWxlbWVudCAxIEludCBQb2ludCAxIgo8fGZpbV9lbmR8Pg=="]
["ec04f8179270bf83e7b325f2ef2b6a272f3ed527-1","ec04f8179270bf83e7b325f2ef2b6a272f3ed527","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgcHl0ZXN0CgppbXBvcnQgb2xhbmFseXRpY3MucGxvdHRpbmcuc2V0dGVycyBhcyBsaWIKCgpkZWYgdGVzdF9zZXRfc2l6ZSgpOgo8fGZpbV9ob2xlfD4KICAgIGFzc2VydCBwbHQucmNQYXJhbXNbJ2ZpZ3VyZS5maWdzaXplJ10gPT0gWzEwLCA1XQoKCmRlZiB0ZXN0X3NldF9zdHlsZSgpOgoKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICBsaWIuc2V0X3N0eWxlKCd1bmtub3duJykKCiAgICBhc3NlcnQgcGx0LnJjUGFyYW1zWydwYXRjaC5mYWNlY29sb3InXSA9PSAiQzAiCiAgICBsaWIuc2V0X3N0eWxlKCkKICAgIGFzc2VydCBwbHQucmNQYXJhbXNbJ3BhdGNoLmZhY2Vjb2xvciddID09ICIjNEM3MkIwIgoKPHxmaW1fc3VmZml4fD4KICAgIGxpYi5zZXRfc2l6ZSgpCiAgICBhc3NlcnQgcGx0LnJjUGFyYW1zWydmaWd1cmUuZmlnc2l6ZSddID09IFsxNywgNF0KCiAgICBsaWIuc2V0X3NpemUoMTAsIDUpCjx8ZmltX2VuZHw+"]
["ec04f8179270bf83e7b325f2ef2b6a272f3ed527-2","ec04f8179270bf83e7b325f2ef2b6a272f3ed527","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgcHl0ZXN0CgppbXBvcnQgb2xhbmFseXRpY3MucGxvdHRpbmcuc2V0dGVycyBhcyBsaWIKPHxmaW1faG9sZXw+CiAgICBhc3NlcnQgcGx0LnJjUGFyYW1zWydmaWd1cmUuZmlnc2l6ZSddID09IFsxNywgNF0KCiAgICBsaWIuc2V0X3NpemUoMTAsIDUpCiAgICBhc3NlcnQgcGx0LnJjUGFyYW1zWydmaWd1cmUuZmlnc2l6ZSddID09IFsxMCwgNV0KCgpkZWYgdGVzdF9zZXRfc3R5bGUoKToKCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgbGliLnNldF9zdHlsZSgndW5rbm93bicpCgogICAgYXNzZXJ0IHBsdC5yY1BhcmFtc1sncGF0Y2guZmFjZWNvbG9yJ10gPT0gIkMwIgogICAgbGliLnNldF9zdHlsZSgpCiAgICBhc3NlcnQgcGx0LnJjUGFyYW1zWydwYXRjaC5mYWNlY29sb3InXSA9PSAiIzRDNzJCMCIKCjx8ZmltX3N1ZmZpeHw+CgoKZGVmIHRlc3Rfc2V0X3NpemUoKToKICAgIGxpYi5zZXRfc2l6ZSgpCjx8ZmltX2VuZHw+"]
["ec04f8179270bf83e7b325f2ef2b6a272f3ed527-3","ec04f8179270bf83e7b325f2ef2b6a272f3ed527","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgcHl0ZXN0CgppbXBvcnQgb2xhbmFseXRpY3MucGxvdHRpbmcuc2V0dGVycyBhcyBsaWIKCgpkZWYgdGVzdF9zZXRfc2l6ZSgpOgogICAgbGliLnNldF9zaXplKCkKICAgIGFzc2VydCBwbHQucmNQYXJhbXNbJ2ZpZ3VyZS5maWdzaXplJ10gPT0gWzE3LCA0XQoKICAgIGxpYi5zZXRfc2l6ZSgxMCwgNSkKICAgIGFzc2VydCBwbHQucmNQYXJhbXNbJ2ZpZ3VyZS5maWdzaXplJ10gPT0gWzEwLCA1XQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZGVmIHRlc3Rfc2V0X3N0eWxlKCk6CgogICAgd2l0aCBweXRlc3QucmFpc2VzKFZhbHVlRXJyb3IpOgo8fGZpbV9lbmR8Pg=="]
["ec04f8179270bf83e7b325f2ef2b6a272f3ed527-4","ec04f8179270bf83e7b325f2ef2b6a272f3ed527","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgcHl0ZXN0CgppbXBvcnQgb2xhbmFseXRpY3MucGxvdHRpbmcuc2V0dGVycyBhcyBsaWIKCgpkZWYgdGVzdF9zZXRfc2l6ZSgpOgogICAgbGliLnNldF9zaXplKCkKICAgIGFzc2VydCBwbHQucmNQYXJhbXNbJ2ZpZ3VyZS5maWdzaXplJ10gPT0gWzE3LCA0XQoKICAgIGxpYi5zZXRfc2l6ZSgxMCwgNSkKICAgIGFzc2VydCBwbHQucmNQYXJhbXNbJ2ZpZ3VyZS5maWdzaXplJ10gPT0gWzEwLCA1XQoKCmRlZiB0ZXN0X3NldF9zdHlsZSgpOgoKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhWYWx1ZUVycm9yKToKPHxmaW1faG9sZXw+CiAgICBhc3NlcnQgcGx0LnJjUGFyYW1zWydwYXRjaC5mYWNlY29sb3InXSA9PSAiQzAiCiAgICBsaWIuc2V0X3N0eWxlKCkKICAgIGFzc2VydCBwbHQucmNQYXJhbXNbJ3BhdGNoLmZhY2Vjb2xvciddID09ICIjNEM3MkIwIgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBsaWIuc2V0X3N0eWxlKCd1bmtub3duJykKCjx8ZmltX2VuZHw+"]
["c1d0f60143317bb6cde175096b737a06e4e68158-1","c1d0f60143317bb6cde175096b737a06e4e68158","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udGVzdCBpbXBvcnQgVGVzdENhc2UKaW1wb3J0IGRhdGV0aW1lCgpmcm9tIHJlY2lwZV9ib29rLm1vZGVscyBpbXBvcnQgUmVjaXBlLCBJbmdyZWRpZW50LCBUYWcsIEluZ3JlZGllbnRBbW91bnQKZnJvbSAudmlld3MgaW1wb3J0IHN1Z2dlc3RfcmVjaXBlCgoKIyBDcmVhdGUgeW91ciB0ZXN0cyBoZXJlLgoKY2xhc3MgU3VnZ2VzdGVkUmVjaXBlVGVzdHMoVGVzdENhc2UpOgogICAgIiIiVGVzdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSByZWNpcGUgcXVldWUuIiIiCgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIHNlbGYuaW5ncmVkaWVudDFfbmFtZSA9ICJpbmdyZWRpZW50MSIKICAgICAgICBzZWxmLnRhZzFfbmFtZSA9ICJ0YWcxIgogICAgICAgIHNlbGYucmVjaXBlMV9uYW1lID0gInJlY2lwZTEiCiAgICAgICAgc2VsZi5yZWNpcGUxX2Rlc2MgPSAiZGVzY3JpcHRpb24xIgogICAgICAgIHNlbGYuaW5ncmVkaWVudF9hbW91bnQxX2Ftb3VudCA9ICIyIHBpZWNlcyIKCiAgICAgICAgc2VsZi5pbmdyZWRpZW50MSA9IEluZ3JlZGllbnQub2JqZWN0cy5jcmVhdGUoCiAgICAgICAgICAgIG5hbWU9c2VsZi5pbmdyZWRpZW50MV9uYW1lCiAgICAgICAgKQogICAgICAgIHNlbGYudGFnMSA9IFRhZy5vYmplY3RzLmNyZWF0ZSgKICAgICAgICAgICAgbmFtZT1zZWxmLnRhZzFfbmFtZSwKICAgICAgICAgICAgY29sb3I9IiNjY2NjY2MiCiAgICAgICAgKQogICAgICAgIHNlbGYucmVjaXBlMSA9IFJlY2lwZS5vYmplY3RzLmNyZWF0ZSgKICAgICAgICAgICAgbmFtZT1zZWxmLnJlY2lwZTFfbmFtZSwKICAgICAgICAgICAgZGVzY3JpcHRpb249c2VsZi5yZWNpcGUxX2Rlc2MsCiAgICAgICAgICAgIGNvb2tlZF9sYXN0PWRhdGV0aW1lLmRhdGUudG9kYXkoKSwKICAgICAgICApCiAgICAgICAgc2VsZi5yZWNpcGUxLnRhZ3MgPSBbc2VsZi50YWcxXQogICAgICAgIEluZ3JlZGllbnRBbW91bnQub2JqZWN0cy5jcmVhdGUoCiAgICAgICAgICAgIGluZ3JlZGllbnQ9c2VsZi5pbmdyZWRpZW50MSwKICAgICAgICAgICAgcmVjaXBlPXNlbGYucmVjaXBlMSwKICAgICAgICAgICAgYW1vdW50PXNlbGYuaW5ncmVkaWVudF9hbW91bnQxX2Ftb3VudCwKICAgICAgICApCiAgICAgICAgc2VsZi5yZWNpcGUxLnNhdmUoKQoKICAgIGRlZiB0ZXN0X3NldHVwKHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIHNlbGYucmVjaXBlMS5pbmdyZWRpZW50cy5hbGwoKVswXS5uYW1lLAogICAgICAgICAgICBzZWxmLmluZ3JlZGllbnQxX25hbWUKICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgc2VsZi5yZWNpcGUxLmluZ3JlZGllbnRfYW1vdW50cy5hbGwoKVswXS5hbW91bnQsCiAgICAgICAgICAgIHNlbGYuaW5ncmVkaWVudF9hbW91bnQxX2Ftb3VudAogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydElzKAogICAgICAgICAgICBzZWxmLnJlY2lwZTEuaW5ncmVkaWVudF9hbW91bnRzLmFsbCgpWzBdLnJlY2lwZSwKICAgICAgICAgICAgc2VsZi5yZWNpcGUxCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIHNlbGYucmVjaXBlMS50YWdzLmFsbCgpWzBdLm5hbWUsCiAgICAgICAgICAgIHNlbGYudGFnMV9uYW1lCiAgICAgICAgKQoKICAgICMgbWV0aG9kIG5hbWUgbXVzdCBiZWdpbiB3aXRoICJ0ZXN0XyIKICAgIGRlZiB0ZXN0X3N1Z2dlc3RfbGVhc3RfcmVjZW50bHlfY29va2VkKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRoZSByZWNpcGUgY29va2VkIG9uIHRoZSBlYXJsaWVzdCBkYXRlIHNob3VsZCBiZSBzdWdnZXN0ZWQuCiAgICAgICAgSWYgc2V2ZXJhbCByZWNpcGVzIGhhdmUgYmVlbiBjb29rZWQgb24gdGhlIHNhbWUgZGF5IHRoZW4KICAgICAgICB0aGUgcmVjaXBlIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkgc2hvdWxkIGJlIHN1Z2dlc3RlZC4KICAgICAgICBJZiBzZXZlcmFsIHJlY2lwZXMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSB0aGVuIGFueSByZWNpcGUKICAgICAgICBtYXkgYmUgc3VnZ2VzdGVkLgogICAgICAgICIiIgogICAgICAgIHJlY2lwZV95ZXN0ZXJkYXkgPSBSZWNpcGUub2JqZWN0cy5jcmVhdGUoCiAgICAgICAgICAgIG5hbWU9InJlY2lwZV95ZXN0ZXJkYXkiLAogICAgICAgICAgICBkZXNjcmlwdGlvbj0iLi4uIiwKICAgICAgICAgICAgY29va2VkX2xhc3Q9ZGF0ZXRpbWUuZGF0ZS50b2RheSgpIC0gZGF0ZXRpbWUudGltZWRlbHRhKGRheXM9MSksCiAgICAgICAgKQogICAgICAgIHJlY2lwZV95ZXN0ZXJkYXkudGFncyA9IFtzZWxmLnRhZzFdCiAgICAgICAgSW5ncmVkaWVudEFtb3VudC5vYmplY3RzLmNyZWF0ZSgKICAgICAgICAgICAgaW5ncmVkaWVudD1zZWxmLmluZ3JlZGllbnQxLAogICAgICAgICAgICByZWNpcGU9cmVjaXBlX3llc3RlcmRheSwKICAgICAgICAgICAgYW1vdW50PSIyIG1sIiwKICAgICAgICApCgogICAgICAgICMgc2VsZi5yZWNpcGUxIGhhcyBiZWVuIGNvb2tlZCB0b2RheSA9PiBleHBlY3QgcmVjaXBlX3llc3RlcmRheQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIHN1Z2dlc3RfcmVjaXBlKAogICAgICAgICAgICAgICAgcmVjaXBlcz1SZWNpcGUub2JqZWN0cy5hbGwoKSwKICAgICAgICAgICAgICAgIHRhZ3M9VGFnLm9iamVjdHMuYWxsKCksCiAgICAgICAgICAgICAgICBpbmdyZWRpZW50cz1JbmdyZWRpZW50Lm9iamVjdHMuYWxsKCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIHJlY2lwZV95ZXN0ZXJkYXkKICAgICAgICApCgogICAgICAgICMgMiByZWNpcGVzIGNvb2tlZCBvbiB0aGUgc2FtZSBkYXkgPT4gcHJpb3JpdHkgc29ydGluZwogICAgICAgIHJlY2lwZV95ZXN0ZXJkYXkyID0gUmVjaXBlLm9iamVjdHMuY3JlYXRlKAogICAgICAgICAgICBuYW1lPSJyZWNpcGVfeWVzdGVyZGF5MiIsCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSIuLi4iLAogICAgICAgICAgICBjb29rZWRfbGFzdD1kYXRldGltZS5kYXRlLnRvZGF5KCkgLSBkYXRldGltZS50aW1lZGVsdGEoZGF5cz0xKSwKICAgICAgICAgICAgcHJpb3JpdHk9cmVjaXBlX3llc3RlcmRheS5wcmlvcml0eSArIDEsCiAgICAgICAgKQogICAgICAgIHJlY2lwZV95ZXN0ZXJkYXkyLnRhZ3MgPSBbc2VsZi50YWcxXQogICAgICAgIEluZ3JlZGllbnRBbW91bnQub2JqZWN0cy5jcmVhdGUoCiAgICAgICAgICAgIGluZ3JlZGllbnQ9c2VsZi5pbmdyZWRpZW50MSwKICAgICAgICAgICAgcmVjaXBlPXJlY2lwZV95ZXN0ZXJkYXkyLAogICAgICAgICAgICBhbW91bnQ9IjUwMCBnIiwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICkKCiAgICAgICAgIyBzZWxmLnJlY2lwZTEgaGFzIGJlZW4gY29va2VkIHRvZGF5ID0+IGV4cGVjdCByZWNpcGVfeWVzdGVyZGF5CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKPHxmaW1fZW5kfD4="]
["c1d0f60143317bb6cde175096b737a06e4e68158-2","c1d0f60143317bb6cde175096b737a06e4e68158","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udGVzdCBpbXBvcnQgVGVzdENhc2UKaW1wb3J0IGRhdGV0aW1lCgpmcm9tIHJlY2lwZV9ib29rLm1vZGVscyBpbXBvcnQgUmVjaXBlLCBJbmdyZWRpZW50LCBUYWcsIEluZ3JlZGllbnRBbW91bnQKZnJvbSAudmlld3MgaW1wb3J0IHN1Z2dlc3RfcmVjaXBlCgoKIyBDcmVhdGUgeW91ciB0ZXN0cyBoZXJlLgoKY2xhc3MgU3VnZ2VzdGVkUmVjaXBlVGVzdHMoVGVzdENhc2UpOgogICAgIiIiVGVzdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSByZWNpcGUgcXVldWUuIiIiCgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIHNlbGYuaW5ncmVkaWVudDFfbmFtZSA9ICJpbmdyZWRpZW50MSIKICAgICAgICBzZWxmLnRhZzFfbmFtZSA9ICJ0YWcxIgogICAgICAgIHNlbGYucmVjaXBlMV9uYW1lID0gInJlY2lwZTEiCiAgICAgICAgc2VsZi5yZWNpcGUxX2Rlc2MgPSAiZGVzY3JpcHRpb24xIgogICAgICAgIHNlbGYuaW5ncmVkaWVudF9hbW91bnQxX2Ftb3VudCA9ICIyIHBpZWNlcyIKCiAgICAgICAgc2VsZi5pbmdyZWRpZW50MSA9IEluZ3JlZGllbnQub2JqZWN0cy5jcmVhdGUoCiAgICAgICAgICAgIG5hbWU9c2VsZi5pbmdyZWRpZW50MV9uYW1lCiAgICAgICAgKQogICAgICAgIHNlbGYudGFnMSA9IFRhZy5vYmplY3RzLmNyZWF0ZSgKICAgICAgICAgICAgbmFtZT1zZWxmLnRhZzFfbmFtZSwKICAgICAgICAgICAgY29sb3I9IiNjY2NjY2MiCiAgICAgICAgKQogICAgICAgIHNlbGYucmVjaXBlMSA9IFJlY2lwZS5vYmplY3RzLmNyZWF0ZSgKICAgICAgICAgICAgbmFtZT1zZWxmLnJlY2lwZTFfbmFtZSwKICAgICAgICAgICAgZGVzY3JpcHRpb249c2VsZi5yZWNpcGUxX2Rlc2MsCiAgICAgICAgICAgIGNvb2tlZF9sYXN0PWRhdGV0aW1lLmRhdGUudG9kYXkoKSwKICAgICAgICApCiAgICAgICAgc2VsZi5yZWNpcGUxLnRhZ3MgPSBbc2VsZi50YWcxXQogICAgICAgIEluZ3JlZGllbnRBbW91bnQub2JqZWN0cy5jcmVhdGUoCiAgICAgICAgICAgIGluZ3JlZGllbnQ9c2VsZi5pbmdyZWRpZW50MSwKICAgICAgICAgICAgcmVjaXBlPXNlbGYucmVjaXBlMSwKICAgICAgICAgICAgYW1vdW50PXNlbGYuaW5ncmVkaWVudF9hbW91bnQxX2Ftb3VudCwKICAgICAgICApCiAgICAgICAgc2VsZi5yZWNpcGUxLnNhdmUoKQoKICAgIGRlZiB0ZXN0X3NldHVwKHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIHNlbGYucmVjaXBlMS5pbmdyZWRpZW50cy5hbGwoKVswXS5uYW1lLAogICAgICAgICAgICBzZWxmLmluZ3JlZGllbnQxX25hbWUKICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgc2VsZi5yZWNpcGUxLmluZ3JlZGllbnRfYW1vdW50cy5hbGwoKVswXS5hbW91bnQsCiAgICAgICAgICAgIHNlbGYuaW5ncmVkaWVudF9hbW91bnQxX2Ftb3VudAogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydElzKAogICAgICAgICAgICBzZWxmLnJlY2lwZTEuaW5ncmVkaWVudF9hbW91bnRzLmFsbCgpWzBdLnJlY2lwZSwKICAgICAgICAgICAgc2VsZi5yZWNpcGUxCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIHNlbGYucmVjaXBlMS50YWdzLmFsbCgpWzBdLm5hbWUsCiAgICAgICAgICAgIHNlbGYudGFnMV9uYW1lCiAgICAgICAgKQoKICAgICMgbWV0aG9kIG5hbWUgbXVzdCBiZWdpbiB3aXRoICJ0ZXN0XyIKICAgIGRlZiB0ZXN0X3N1Z2dlc3RfbGVhc3RfcmVjZW50bHlfY29va2VkKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRoZSByZWNpcGUgY29va2VkIG9uIHRoZSBlYXJsaWVzdCBkYXRlIHNob3VsZCBiZSBzdWdnZXN0ZWQuCiAgICAgICAgSWYgc2V2ZXJhbCByZWNpcGVzIGhhdmUgYmVlbiBjb29rZWQgb24gdGhlIHNhbWUgZGF5IHRoZW4KICAgICAgICB0aGUgcmVjaXBlIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkgc2hvdWxkIGJlIHN1Z2dlc3RlZC4KICAgICAgICBJZiBzZXZlcmFsIHJlY2lwZXMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSB0aGVuIGFueSByZWNpcGUKICAgICAgICBtYXkgYmUgc3VnZ2VzdGVkLgogICAgICAgICIiIgogICAgICAgIHJlY2lwZV95ZXN0ZXJkYXkgPSBSZWNpcGUub2JqZWN0cy5jcmVhdGUoCiAgICAgICAgICAgIG5hbWU9InJlY2lwZV95ZXN0ZXJkYXkiLAogICAgICAgICAgICBkZXNjcmlwdGlvbj0iLi4uIiwKICAgICAgICAgICAgY29va2VkX2xhc3Q9ZGF0ZXRpbWUuZGF0ZS50b2RheSgpIC0gZGF0ZXRpbWUudGltZWRlbHRhKGRheXM9MSksCiAgICAgICAgKQogICAgICAgIHJlY2lwZV95ZXN0ZXJkYXkudGFncyA9IFtzZWxmLnRhZzFdCiAgICAgICAgSW5ncmVkaWVudEFtb3VudC5vYmplY3RzLmNyZWF0ZSgKICAgICAgICAgICAgaW5ncmVkaWVudD1zZWxmLmluZ3JlZGllbnQxLAogICAgICAgICAgICByZWNpcGU9cmVjaXBlX3llc3RlcmRheSwKICAgICAgICAgICAgYW1vdW50PSIyIG1sIiwKICAgICAgICApCgogICAgICAgICMgc2VsZi5yZWNpcGUxIGhhcyBiZWVuIGNvb2tlZCB0b2RheSA9PiBleHBlY3QgcmVjaXBlX3llc3RlcmRheQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIHN1Z2dlc3RfcmVjaXBlKAogICAgICAgICAgICAgICAgcmVjaXBlcz1SZWNpcGUub2JqZWN0cy5hbGwoKSwKICAgICAgICAgICAgICAgIHRhZ3M9VGFnLm9iamVjdHMuYWxsKCksCjx8ZmltX2hvbGV8PgogICAgICAgICAgICApLAogICAgICAgICAgICByZWNpcGVfeWVzdGVyZGF5CiAgICAgICAgKQoKICAgICAgICAjIDIgcmVjaXBlcyBjb29rZWQgb24gdGhlIHNhbWUgZGF5ID0+IHByaW9yaXR5IHNvcnRpbmcKICAgICAgICByZWNpcGVfeWVzdGVyZGF5MiA9IFJlY2lwZS5vYmplY3RzLmNyZWF0ZSgKICAgICAgICAgICAgbmFtZT0icmVjaXBlX3llc3RlcmRheTIiLAogICAgICAgICAgICBkZXNjcmlwdGlvbj0iLi4uIiwKICAgICAgICAgICAgY29va2VkX2xhc3Q9ZGF0ZXRpbWUuZGF0ZS50b2RheSgpIC0gZGF0ZXRpbWUudGltZWRlbHRhKGRheXM9MSksCiAgICAgICAgICAgIHByaW9yaXR5PXJlY2lwZV95ZXN0ZXJkYXkucHJpb3JpdHkgKyAxLAogICAgICAgICkKICAgICAgICByZWNpcGVfeWVzdGVyZGF5Mi50YWdzID0gW3NlbGYudGFnMV0KICAgICAgICBJbmdyZWRpZW50QW1vdW50Lm9iamVjdHMuY3JlYXRlKAogICAgICAgICAgICBpbmdyZWRpZW50PXNlbGYuaW5ncmVkaWVudDEsCiAgICAgICAgICAgIHJlY2lwZT1yZWNpcGVfeWVzdGVyZGF5MiwKICAgICAgICAgICAgYW1vdW50PSI1MDAgZyIsCiAgICAgICAgKQoKICAgICAgICAjIHNlbGYucmVjaXBlMSBoYXMgYmVlbiBjb29rZWQgdG9kYXkgPT4gZXhwZWN0IHJlY2lwZV95ZXN0ZXJkYXkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBzdWdnZXN0X3JlY2lwZSgKICAgICAgICAgICAgICAgIHJlY2lwZXM9UmVjaXBlLm9iamVjdHMuYWxsKCksCiAgICAgICAgICAgICAgICB0YWdzPVRhZy5vYmplY3RzLmFsbCgpLAogICAgICAgICAgICAgICAgaW5ncmVkaWVudHM9SW5ncmVkaWVudC5vYmplY3RzLmFsbCgpLAogICAgICAgICAgICApLAogICAgICAgICAgICByZWNpcGVfeWVzdGVyZGF5MgogICAgICAgICkKCiAgICBkZWYgdGVzdF9zdWdnZXN0ZWRfaGFzX3RhZ19vcl9pbmdyZWRpZW50KHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRoZSBzdWdnZXN0ZWQgcmVjaXBlIHNob3VsZCBoYXZlIGF0IGxlYXN0IDEgdGFnIG9yIGluZ3JlZGllbnQKICAgICAgICBpbiBjb21tb24gd2l0aCB0aGUgdGFncyBhbmQgaW5ncmVkaWVudHMgcHJvdmlkZWQgYnkgdGhlIGZpbHRlci4KICAgICAgICAiIiIKICAgICAgICBzZWxmLmFzc2VydElzKAogICAgICAgICAgICBzdWdnZXN0X3JlY2lwZSgKICAgICAgICAgICAgICAgIHJlY2lwZXM9UmVjaXBlLm9iamVjdHMuYWxsKCksCiAgICAgICAgICAgICAgICB0YWdzPXNldCgpLAogICAgICAgICAgICAgICAgaW5ncmVkaWVudHM9c2V0KCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIE5vbmUKICAgICAgICApCgogICAgICAgIHRhZ3MgPSBzZXQoVGFnLm9iamVjdHMuYWxsKCkpCiAgICAgICAgaW5ncmVkaWVudHMgPSBzZXQoSW5ncmVkaWVudC5vYmplY3RzLmFsbCgpKQoKICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICBzdWdnZXN0ZWRfcmVjaXBlID0gc3VnZ2VzdF9yZWNpcGUoCiAgICAgICAgICAgICAgICByZWNpcGVzPVJlY2lwZS5vYmplY3RzLmFsbCgpLAogICAgICAgICAgICAgICAgdGFncz10YWdzLAogICAgICAgICAgICAgICAgaW5ncmVkaWVudHM9aW5ncmVkaWVudHMsCiAgICAgICAgICAgICkKCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgICAgIHNldChzdWdnZXN0ZWRfcmVjaXBlLnRhZ3MuYWxsKCkpIDw9IHRhZ3Mgb3IKICAgICAgICAgICAgICAgIHNldChzdWdnZXN0ZWRfcmVjaXBlLmluZ3JlZGllbnRzLmFsbCgpKSA8PSBpbmdyZWRpZW50cwogICAgICAgICAgICAgICAgIyB7aW5ncmVkaWVudF9hbW91bnQuaW5ncmVkaWVudAogICAgICAgICAgICAgICAgIyAgZm9yIGluZ3JlZGllbnRfYW1vdW50IGluIHN1Z2dlc3RlZF9yZWNpcGUuaW5ncmVkaWVudHMuYWxsKCl9CiAgICAgICAgICAgICAgICAjIDw9IGluZ3JlZGllbnRzCiAgICAgICAgICAgICkKCiAgICAgICAgICAgIGlmIGxlbih0YWdzKSA+IDA6CiAgICAgICAgICAgICAgICB0YWdzLnBvcCgpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBpbmdyZWRpZW50cy5wb3AoKQogICAgICAgICAgICBpZiBsZW4odGFncykgPT0gMCBhbmQgbGVuKGluZ3JlZGllbnRzKSA9PSAwOgogICAgICAgICAgICAgICAgYnJlYWsKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIGluZ3JlZGllbnRzPUluZ3JlZGllbnQub2JqZWN0cy5hbGwoKSwKPHxmaW1fZW5kfD4="]
["00f4078531853f8819177dea3216bd6918d46918-1","00f4078531853f8819177dea3216bd6918d46918","PHxmaW1fcHJlZml4fD4KCmZyb20gc3VibGltZV9kYi5jb3JlLnR5cGVjaGVjayBpbXBvcnQgKAoJQW55LAoJQ2FsbGFibGUsCglPcHRpb25hbAopCmltcG9ydCBzdWJsaW1lCmltcG9ydCBzdWJsaW1lX3BsdWdpbgoKZnJvbSAuIGltcG9ydCB2aWV3X2RyYWdfc2VsZWN0Cgpjb21tYW5kX2lkID0gMApjb21tYW5kX2RhdGEgPSB7fQpzdWJsaW1lX2NvbW1hbmRfdmlzaWJsZSA9IEZhbHNlCmlzX3J1bm5pbmdfaW5wdXQgPSBGYWxzZQoKY2xhc3MgU3VibGltZURlYnVnSW5wdXRDb21tYW5kKHN1YmxpbWVfcGx1Z2luLldpbmRvd0NvbW1hbmQpOgoJZGVmIHJ1bihzZWxmLCBjb21tYW5kX2lkLCAqKmFyZ3MpOgoJCWdsb2JhbCBpc19ydW5uaW5nX2lucHV0CgkJaXNfcnVubmluZ19pbnB1dCA9IEZhbHNlCgkJY29tbWFuZF9kYXRhW2NvbW1hbmRfaWRdWzFdKCoqYXJncykKCWRlZiBpbnB1dChzZWxmLCBhcmdzKToKCQlyZXR1cm4gY29tbWFuZF9kYXRhW2FyZ3NbImNvbW1hbmRfaWQiXV1bMF0KCWRlZiBpc192aXNpYmxlKHNlbGYpOgoJCXJldHVybiBzdWJsaW1lX2NvbW1hbmRfdmlzaWJsZQoKZGVmIG9uX3ZpZXdfZHJhZ19zZWxlY3QoZXZlbnQpOgoJaWYgaXNfcnVubmluZ19pbnB1dDoKCQl3aW5kb3cgPSBzdWJsaW1lLmFjdGl2ZV93aW5kb3coKQoJCXdpbmRvdy5ydW5fY29tbWFuZCgiaGlkZV9vdmVybGF5IiwgewoJCQkib3ZlcmxheSI6ICJjb21tYW5kX3BhbGV0dGUiLAoJCX0pCgp2aWV3X2RyYWdfc2VsZWN0LmFkZChvbl92aWV3X2RyYWdfc2VsZWN0KQpkZWYgcnVuX2lucHV0X2NvbW1hbmQoaW5wdXQsIHJ1biwgb25fY2FuY2VsID0gTm9uZSk6CglnbG9iYWwgY29tbWFuZF9pZAoJY29tbWFuZF9pZCArPSAxCgljdXJyZW50X2NvbW1hbmQgPSBjb21tYW5kX2lkCgljb21tYW5kX2RhdGFbY3VycmVudF9jb21tYW5kXSA9IFtpbnB1dCwgcnVuXQoKCXdpbmRvdyA9IHN1YmxpbWUuYWN0aXZlX3dpbmRvdygpCglkZWYgb25fY2FuY2VsX2ludGVybmFsKCk6CgkJZGVmIGNiKCk6CgkJCSMgc2luY2Ugd2UgYXJlIGFzeW5jIGhlcmUgd2UgZG9uJ3Qgd2FudCB0byBoaWRlIHRoZSBwYW5lbCBpZiBhIG5ldyBvbmUgd2FzIHByZXNlbnRlZAoJCQlpZiBjdXJyZW50X2NvbW1hbmQgPT0gY29tbWFuZF9pZDoKCQkJCXdpbmRvdy5ydW5fY29tbWFuZCgiaGlkZV9vdmVybGF5IiwgewoJCQkJCQkib3ZlcmxheSI6ICJjb21tYW5kX3BhbGV0dGUiLAoJCQkJCX0pCgkJI3doZW4gd2UgZG8gdGhpcyB3aGlsZSBhIGNvbW1hbmQgaXMgY2xvc2luZyBpdCBjcmFzaGVzIHN1YmxpbWUKCQlzdWJsaW1lLnNldF90aW1lb3V0KGNiLCAwKQoJCWdsb2JhbCBpc19ydW5uaW5nX2lucHV0CgkJaXNfcnVubmluZ19pbnB1dCA9IEZhbHNlCgoJaW5wdXQuX29uX2NhbmNlbF9pbnRlcm5hbCA9IG9uX2NhbmNlbF9pbnRlcm5hbAoJaWYgb25fY2FuY2VsOgoJCWlucHV0Ll9vbl9jYW5jZWwgPSBvbl9jYW5jZWwKCglkZWYgY2IoKToKCQlnbG9iYWwgc3VibGltZV9jb21tYW5kX3Zpc2libGUKCQlzdWJsaW1lX2NvbW1hbmRfdmlzaWJsZSA9IFRydWUKCQl3aW5kb3cucnVuX2NvbW1hbmQoImhpZGVfb3ZlcmxheSIsIHsKCQkJCSJvdmVybGF5IjogImNvbW1hbmRfcGFsZXR0ZSIsCgkJCX0KCQkpCgkJZ2xvYmFsIGlzX3J1bm5pbmdfaW5wdXQKCQlpc19ydW5uaW5nX2lucHV0ID0gVHJ1ZQoJCXdpbmRvdy5ydW5fY29tbWFuZCgic2hvd19vdmVybGF5IiwgewoJCQkJIm92ZXJsYXkiOiAiY29tbWFuZF9wYWxldHRlIiwKCQkJCSJjb21tYW5kIjogInN1YmxpbWVfZGVidWdfaW5wdXQiLAoJCQkJImFyZ3MiOiB7CgkJCQkJImNvbW1hbmRfaWQiIDogY29tbWFuZF9pZAoJCQkJfQoJCQl9CgkJKQoJCXByaW50KCdydW4gY29tbWFuZCcpCgkJc3VibGltZV9jb21tYW5kX3Zpc2libGUgPSBGYWxzZQoJc3VibGltZS5zZXRfdGltZW91dChjYiwgMCkKCgpjbGFzcyBUZXh0SW5wdXQoc3VibGltZV9wbHVnaW4uVGV4dElucHV0SGFuZGxlcik6CglkZWYgX19pbml0X18oc2VsZiwgcGxhY2Vob2xkZXI9Tm9uZSwgaW5pdGlhbD1Ob25lLCBvbl9jYW5jZWw9Tm9uZSwgYXJnX25hbWU9InRleHQiKToKCQlzdXBlcigpLl9faW5pdF9fKCkKCQlzZWxmLl9wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyCjx8ZmltX2hvbGV8PgoJZGVmIHBsYWNlaG9sZGVyKHNlbGYpOgoJCXJldHVybiBzZWxmLl9wbGFjZWhvbGRlcgoJZGVmIGluaXRpYWxfdGV4dChzZWxmKToKCQlyZXR1cm4gc2VsZi5faW5pdGlhbAoJZGVmIG5leHRfaW5wdXQoc2VsZiwgYXJncyk6CgkJcmV0dXJuIE5vbmUKCWRlZiBuYW1lKHNlbGYpOgoJCXJldHVybiBzZWxmLmFyZ19uYW1lCglkZWYgY2FuY2VsKHNlbGYpOgoJCXByaW50KCdjYW5jZWxkJykKCQlpZiBzZWxmLl9vbl9jYW5jZWxfaW50ZXJuYWw6CgkJCXNlbGYuX29uX2NhbmNlbF9pbnRlcm5hbCgpCgkJaWYgc2VsZi5fb25fY2FuY2VsOgoJCQlzZWxmLl9vbl9jYW5jZWwoKQoKY2xhc3MgTGlzdElucHV0SXRlbToKCWRlZiBfX2luaXRfXyhzZWxmLCB0ZXh0LCBuYW1lID0gTm9uZSwgbmV4dF9pbnB1dCA9IE5vbmUpOgoJCXNlbGYudGV4dCA9IHRleHQKCQlzZWxmLm5hbWUgPSBuYW1lCgkJc2VsZi5uZXh0X2lucHV0ID0gbmV4dF9pbnB1dAoKY2xhc3MgTGlzdElucHV0KHN1YmxpbWVfcGx1Z2luLkxpc3RJbnB1dEhhbmRsZXIpOgoJZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlcywgcGxhY2Vob2xkZXI9Tm9uZSwgaW5kZXg9MCwgb25fY2FuY2VsPU5vbmUsIGFyZ19uYW1lPSJsaXN0Iik6CgkJc3VwZXIoKS5fX2luaXRfXygpCgkJc2VsZi5fbmV4dF9pbnB1dCA9IE5vbmUKCQlzZWxmLnZhbHVlcyA9IHZhbHVlcwoJCXNlbGYuX3BsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXIKCQlzZWxmLmluZGV4ID0gaW5kZXgKCQlzZWxmLl9vbl9jYW5jZWwgPSBvbl9jYW5jZWwKCQlzZWxmLmFyZ19uYW1lID0gYXJnX25hbWUKCQlzZWxmLl9vbl9jYW5jZWxfaW50ZXJuYWwgPSBOb25lCgoJZGVmIG5hbWUoc2VsZik6CgkJcmV0dXJuIHNlbGYuYXJnX25hbWUKCglkZWYgcGxhY2Vob2xkZXIoc2VsZik6CgkJcmV0dXJuIHNlbGYuX3BsYWNlaG9sZGVyCgoJZGVmIGxpc3RfaXRlbXMoc2VsZik6CgkJaXRlbXMgPSBbXQoJCWZvciBpbmRleCwgdmFsdWUgaW4gZW51bWVyYXRlKHNlbGYudmFsdWVzKToKCQkJaXRlbXMuYXBwZW5kKFt2YWx1ZS50ZXh0LCBpbmRleF0pCgkJcmV0dXJuIChpdGVtcywgc2VsZi5pbmRleCkKCglkZWYgY29uZmlybShzZWxmLCB2YWx1ZSk6CgkJc2VsZi5fbmV4dF9pbnB1dCA9IHNlbGYudmFsdWVzW3ZhbHVlXS5uZXh0X2lucHV0CgkJcmV0dXJuIHZhbHVlCglkZWYgdmFsaWRhdGUoc2VsZiwgdmFsdWUpOgoJCXJldHVybiBUcnVlCgoJZGVmIG5leHRfaW5wdXQoc2VsZiwgYXJncyk6CgkJcmV0dXJuIHNlbGYuX25leHRfaW5wdXQKCglkZWYgY2FuY2VsKHNlbGYpOgoJCWlmIHNlbGYuX29uX2NhbmNlbF9pbnRlcm5hbDoKCQkJc2VsZi5fb25fY2FuY2VsX2ludGVybmFsKCkKCQlpZiBzZWxmLl9vbl9jYW5jZWw6CgkJCXNlbGYuX29uX2NhbmNlbCgpCgoJZGVmIGRlc2NyaXB0aW9uKHNlbGYsIHZhbHVlLCB0ZXh0KToKCQlyZXR1cm4gc2VsZi52YWx1ZXNbdmFsdWVdLm5hbWUgb3Igc2VsZi52YWx1ZXNbdmFsdWVdLnRleHQKCgoKPHxmaW1fc3VmZml4fD4KCQlzZWxmLl9pbml0aWFsID0gaW5pdGlhbAoJCXNlbGYuYXJnX25hbWUgPSBhcmdfbmFtZQoJCXNlbGYuX29uX2NhbmNlbCA9IG9uX2NhbmNlbAoJCXNlbGYuX29uX2NhbmNlbF9pbnRlcm5hbCA9IE5vbmUKPHxmaW1fZW5kfD4="]
["00f4078531853f8819177dea3216bd6918d46918-2","00f4078531853f8819177dea3216bd6918d46918","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmZyb20gc3VibGltZV9kYi5jb3JlLnR5cGVjaGVjayBpbXBvcnQgKAoJQW55LAoJQ2FsbGFibGUsCjx8ZmltX2VuZHw+"]
["00f4078531853f8819177dea3216bd6918d46918-3","00f4078531853f8819177dea3216bd6918d46918","PHxmaW1fcHJlZml4fD4KCmZyb20gc3VibGltZV9kYi5jb3JlLnR5cGVjaGVjayBpbXBvcnQgKAoJQW55LAoJQ2FsbGFibGUsCglPcHRpb25hbAopCmltcG9ydCBzdWJsaW1lCmltcG9ydCBzdWJsaW1lX3BsdWdpbgoKZnJvbSAuIGltcG9ydCB2aWV3X2RyYWdfc2VsZWN0Cgpjb21tYW5kX2lkID0gMApjb21tYW5kX2RhdGEgPSB7fQpzdWJsaW1lX2NvbW1hbmRfdmlzaWJsZSA9IEZhbHNlCmlzX3J1bm5pbmdfaW5wdXQgPSBGYWxzZQoKY2xhc3MgU3VibGltZURlYnVnSW5wdXRDb21tYW5kKHN1YmxpbWVfcGx1Z2luLldpbmRvd0NvbW1hbmQpOgoJZGVmIHJ1bihzZWxmLCBjb21tYW5kX2lkLCAqKmFyZ3MpOgoJCWdsb2JhbCBpc19ydW5uaW5nX2lucHV0CgkJaXNfcnVubmluZ19pbnB1dCA9IEZhbHNlCgkJY29tbWFuZF9kYXRhW2NvbW1hbmRfaWRdWzFdKCoqYXJncykKCWRlZiBpbnB1dChzZWxmLCBhcmdzKToKCQlyZXR1cm4gY29tbWFuZF9kYXRhW2FyZ3NbImNvbW1hbmRfaWQiXV1bMF0KCWRlZiBpc192aXNpYmxlKHNlbGYpOgoJCXJldHVybiBzdWJsaW1lX2NvbW1hbmRfdmlzaWJsZQoKZGVmIG9uX3ZpZXdfZHJhZ19zZWxlY3QoZXZlbnQpOgoJaWYgaXNfcnVubmluZ19pbnB1dDoKCQl3aW5kb3cgPSBzdWJsaW1lLmFjdGl2ZV93aW5kb3coKQoJCXdpbmRvdy5ydW5fY29tbWFuZCgiaGlkZV9vdmVybGF5IiwgewoJCQkib3ZlcmxheSI6ICJjb21tYW5kX3BhbGV0dGUiLAoJCX0pCgp2aWV3X2RyYWdfc2VsZWN0LmFkZChvbl92aWV3X2RyYWdfc2VsZWN0KQpkZWYgcnVuX2lucHV0X2NvbW1hbmQoaW5wdXQsIHJ1biwgb25fY2FuY2VsID0gTm9uZSk6CglnbG9iYWwgY29tbWFuZF9pZAoJY29tbWFuZF9pZCArPSAxCgljdXJyZW50X2NvbW1hbmQgPSBjb21tYW5kX2lkCgljb21tYW5kX2RhdGFbY3VycmVudF9jb21tYW5kXSA9IFtpbnB1dCwgcnVuXQoKCXdpbmRvdyA9IHN1YmxpbWUuYWN0aXZlX3dpbmRvdygpCglkZWYgb25fY2FuY2VsX2ludGVybmFsKCk6CgkJZGVmIGNiKCk6CgkJCSMgc2luY2Ugd2UgYXJlIGFzeW5jIGhlcmUgd2UgZG9uJ3Qgd2FudCB0byBoaWRlIHRoZSBwYW5lbCBpZiBhIG5ldyBvbmUgd2FzIHByZXNlbnRlZAoJCQlpZiBjdXJyZW50X2NvbW1hbmQgPT0gY29tbWFuZF9pZDoKCQkJCXdpbmRvdy5ydW5fY29tbWFuZCgiaGlkZV9vdmVybGF5IiwgewoJCQkJCQkib3ZlcmxheSI6ICJjb21tYW5kX3BhbGV0dGUiLAoJCQkJCX0pCgkJI3doZW4gd2UgZG8gdGhpcyB3aGlsZSBhIGNvbW1hbmQgaXMgY2xvc2luZyBpdCBjcmFzaGVzIHN1YmxpbWUKCQlzdWJsaW1lLnNldF90aW1lb3V0KGNiLCAwKQoJCWdsb2JhbCBpc19ydW5uaW5nX2lucHV0CgkJaXNfcnVubmluZ19pbnB1dCA9IEZhbHNlCgoJaW5wdXQuX29uX2NhbmNlbF9pbnRlcm5hbCA9IG9uX2NhbmNlbF9pbnRlcm5hbAoJaWYgb25fY2FuY2VsOgoJCWlucHV0Ll9vbl9jYW5jZWwgPSBvbl9jYW5jZWwKCglkZWYgY2IoKToKCQlnbG9iYWwgc3VibGltZV9jb21tYW5kX3Zpc2libGUKCQlzdWJsaW1lX2NvbW1hbmRfdmlzaWJsZSA9IFRydWUKCQl3aW5kb3cucnVuX2NvbW1hbmQoImhpZGVfb3ZlcmxheSIsIHsKCQkJCSJvdmVybGF5IjogImNvbW1hbmRfcGFsZXR0ZSIsCgkJCX0KCQkpCgkJZ2xvYmFsIGlzX3J1bm5pbmdfaW5wdXQKCQlpc19ydW5uaW5nX2lucHV0ID0gVHJ1ZQoJCXdpbmRvdy5ydW5fY29tbWFuZCgic2hvd19vdmVybGF5IiwgewoJCQkJIm92ZXJsYXkiOiAiY29tbWFuZF9wYWxldHRlIiwKCQkJCSJjb21tYW5kIjogInN1YmxpbWVfZGVidWdfaW5wdXQiLAoJCQkJImFyZ3MiOiB7CgkJCQkJImNvbW1hbmRfaWQiIDogY29tbWFuZF9pZAoJCQkJfQo8fGZpbV9ob2xlfD4KCQkpCgkJcHJpbnQoJ3J1biBjb21tYW5kJykKCQlzdWJsaW1lX2NvbW1hbmRfdmlzaWJsZSA9IEZhbHNlCglzdWJsaW1lLnNldF90aW1lb3V0KGNiLCAwKQoKCmNsYXNzIFRleHRJbnB1dChzdWJsaW1lX3BsdWdpbi5UZXh0SW5wdXRIYW5kbGVyKToKCWRlZiBfX2luaXRfXyhzZWxmLCBwbGFjZWhvbGRlcj1Ob25lLCBpbml0aWFsPU5vbmUsIG9uX2NhbmNlbD1Ob25lLCBhcmdfbmFtZT0idGV4dCIpOgoJCXN1cGVyKCkuX19pbml0X18oKQoJCXNlbGYuX3BsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXIKCQlzZWxmLl9pbml0aWFsID0gaW5pdGlhbAoJCXNlbGYuYXJnX25hbWUgPSBhcmdfbmFtZQoJCXNlbGYuX29uX2NhbmNlbCA9IG9uX2NhbmNlbAoJCXNlbGYuX29uX2NhbmNlbF9pbnRlcm5hbCA9IE5vbmUKCWRlZiBwbGFjZWhvbGRlcihzZWxmKToKCQlyZXR1cm4gc2VsZi5fcGxhY2Vob2xkZXIKCWRlZiBpbml0aWFsX3RleHQoc2VsZik6CgkJcmV0dXJuIHNlbGYuX2luaXRpYWwKCWRlZiBuZXh0X2lucHV0KHNlbGYsIGFyZ3MpOgoJCXJldHVybiBOb25lCglkZWYgbmFtZShzZWxmKToKCQlyZXR1cm4gc2VsZi5hcmdfbmFtZQoJZGVmIGNhbmNlbChzZWxmKToKCQlwcmludCgnY2FuY2VsZCcpCgkJaWYgc2VsZi5fb25fY2FuY2VsX2ludGVybmFsOgoJCQlzZWxmLl9vbl9jYW5jZWxfaW50ZXJuYWwoKQoJCWlmIHNlbGYuX29uX2NhbmNlbDoKCQkJc2VsZi5fb25fY2FuY2VsKCkKCmNsYXNzIExpc3RJbnB1dEl0ZW06CglkZWYgX19pbml0X18oc2VsZiwgdGV4dCwgbmFtZSA9IE5vbmUsIG5leHRfaW5wdXQgPSBOb25lKToKCQlzZWxmLnRleHQgPSB0ZXh0CgkJc2VsZi5uYW1lID0gbmFtZQoJCXNlbGYubmV4dF9pbnB1dCA9IG5leHRfaW5wdXQKCmNsYXNzIExpc3RJbnB1dChzdWJsaW1lX3BsdWdpbi5MaXN0SW5wdXRIYW5kbGVyKToKCWRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZXMsIHBsYWNlaG9sZGVyPU5vbmUsIGluZGV4PTAsIG9uX2NhbmNlbD1Ob25lLCBhcmdfbmFtZT0ibGlzdCIpOgoJCXN1cGVyKCkuX19pbml0X18oKQoJCXNlbGYuX25leHRfaW5wdXQgPSBOb25lCgkJc2VsZi52YWx1ZXMgPSB2YWx1ZXMKCQlzZWxmLl9wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyCgkJc2VsZi5pbmRleCA9IGluZGV4CgkJc2VsZi5fb25fY2FuY2VsID0gb25fY2FuY2VsCgkJc2VsZi5hcmdfbmFtZSA9IGFyZ19uYW1lCgkJc2VsZi5fb25fY2FuY2VsX2ludGVybmFsID0gTm9uZQoKCWRlZiBuYW1lKHNlbGYpOgoJCXJldHVybiBzZWxmLmFyZ19uYW1lCgoJZGVmIHBsYWNlaG9sZGVyKHNlbGYpOgoJCXJldHVybiBzZWxmLl9wbGFjZWhvbGRlcgoKCWRlZiBsaXN0X2l0ZW1zKHNlbGYpOgoJCWl0ZW1zID0gW10KCQlmb3IgaW5kZXgsIHZhbHVlIGluIGVudW1lcmF0ZShzZWxmLnZhbHVlcyk6CgkJCWl0ZW1zLmFwcGVuZChbdmFsdWUudGV4dCwgaW5kZXhdKQoJCXJldHVybiAoaXRlbXMsIHNlbGYuaW5kZXgpCgoJZGVmIGNvbmZpcm0oc2VsZiwgdmFsdWUpOgoJCXNlbGYuX25leHRfaW5wdXQgPSBzZWxmLnZhbHVlc1t2YWx1ZV0ubmV4dF9pbnB1dAoJCXJldHVybiB2YWx1ZQoJZGVmIHZhbGlkYXRlKHNlbGYsIHZhbHVlKToKCQlyZXR1cm4gVHJ1ZQoKCWRlZiBuZXh0X2lucHV0KHNlbGYsIGFyZ3MpOgoJCXJldHVybiBzZWxmLl9uZXh0X2lucHV0CgoJZGVmIGNhbmNlbChzZWxmKToKCQlpZiBzZWxmLl9vbl9jYW5jZWxfaW50ZXJuYWw6CgkJCXNlbGYuX29uX2NhbmNlbF9pbnRlcm5hbCgpCgkJaWYgc2VsZi5fb25fY2FuY2VsOgoJCQlzZWxmLl9vbl9jYW5jZWwoKQoKCWRlZiBkZXNjcmlwdGlvbihzZWxmLCB2YWx1ZSwgdGV4dCk6CgkJcmV0dXJuIHNlbGYudmFsdWVzW3ZhbHVlXS5uYW1lIG9yIHNlbGYudmFsdWVzW3ZhbHVlXS50ZXh0CgoKCjx8ZmltX3N1ZmZpeHw+CgkJCX0KPHxmaW1fZW5kfD4="]
["00f4078531853f8819177dea3216bd6918d46918-4","00f4078531853f8819177dea3216bd6918d46918","PHxmaW1fcHJlZml4fD4KCmZyb20gc3VibGltZV9kYi5jb3JlLnR5cGVjaGVjayBpbXBvcnQgKAoJQW55LAoJQ2FsbGFibGUsCglPcHRpb25hbAopCmltcG9ydCBzdWJsaW1lCmltcG9ydCBzdWJsaW1lX3BsdWdpbgoKZnJvbSAuIGltcG9ydCB2aWV3X2RyYWdfc2VsZWN0Cgpjb21tYW5kX2lkID0gMApjb21tYW5kX2RhdGEgPSB7fQpzdWJsaW1lX2NvbW1hbmRfdmlzaWJsZSA9IEZhbHNlCmlzX3J1bm5pbmdfaW5wdXQgPSBGYWxzZQoKY2xhc3MgU3VibGltZURlYnVnSW5wdXRDb21tYW5kKHN1YmxpbWVfcGx1Z2luLldpbmRvd0NvbW1hbmQpOgoJZGVmIHJ1bihzZWxmLCBjb21tYW5kX2lkLCAqKmFyZ3MpOgoJCWdsb2JhbCBpc19ydW5uaW5nX2lucHV0CgkJaXNfcnVubmluZ19pbnB1dCA9IEZhbHNlCgkJY29tbWFuZF9kYXRhW2NvbW1hbmRfaWRdWzFdKCoqYXJncykKCWRlZiBpbnB1dChzZWxmLCBhcmdzKToKCQlyZXR1cm4gY29tbWFuZF9kYXRhW2FyZ3NbImNvbW1hbmRfaWQiXV1bMF0KCWRlZiBpc192aXNpYmxlKHNlbGYpOgoJCXJldHVybiBzdWJsaW1lX2NvbW1hbmRfdmlzaWJsZQoKZGVmIG9uX3ZpZXdfZHJhZ19zZWxlY3QoZXZlbnQpOgoJaWYgaXNfcnVubmluZ19pbnB1dDoKCQl3aW5kb3cgPSBzdWJsaW1lLmFjdGl2ZV93aW5kb3coKQoJCXdpbmRvdy5ydW5fY29tbWFuZCgiaGlkZV9vdmVybGF5IiwgewoJCQkib3ZlcmxheSI6ICJjb21tYW5kX3BhbGV0dGUiLAoJCX0pCgp2aWV3X2RyYWdfc2VsZWN0LmFkZChvbl92aWV3X2RyYWdfc2VsZWN0KQpkZWYgcnVuX2lucHV0X2NvbW1hbmQoaW5wdXQsIHJ1biwgb25fY2FuY2VsID0gTm9uZSk6CglnbG9iYWwgY29tbWFuZF9pZAoJY29tbWFuZF9pZCArPSAxCgljdXJyZW50X2NvbW1hbmQgPSBjb21tYW5kX2lkCgljb21tYW5kX2RhdGFbY3VycmVudF9jb21tYW5kXSA9IFtpbnB1dCwgcnVuXQoKCXdpbmRvdyA9IHN1YmxpbWUuYWN0aXZlX3dpbmRvdygpCglkZWYgb25fY2FuY2VsX2ludGVybmFsKCk6CgkJZGVmIGNiKCk6CgkJCSMgc2luY2Ugd2UgYXJlIGFzeW5jIGhlcmUgd2UgZG9uJ3Qgd2FudCB0byBoaWRlIHRoZSBwYW5lbCBpZiBhIG5ldyBvbmUgd2FzIHByZXNlbnRlZAoJCQlpZiBjdXJyZW50X2NvbW1hbmQgPT0gY29tbWFuZF9pZDoKCQkJCXdpbmRvdy5ydW5fY29tbWFuZCgiaGlkZV9vdmVybGF5IiwgewoJCQkJCQkib3ZlcmxheSI6ICJjb21tYW5kX3BhbGV0dGUiLAoJCQkJCX0pCgkJI3doZW4gd2UgZG8gdGhpcyB3aGlsZSBhIGNvbW1hbmQgaXMgY2xvc2luZyBpdCBjcmFzaGVzIHN1YmxpbWUKCQlzdWJsaW1lLnNldF90aW1lb3V0KGNiLCAwKQoJCWdsb2JhbCBpc19ydW5uaW5nX2lucHV0CgkJaXNfcnVubmluZ19pbnB1dCA9IEZhbHNlCgoJaW5wdXQuX29uX2NhbmNlbF9pbnRlcm5hbCA9IG9uX2NhbmNlbF9pbnRlcm5hbAoJaWYgb25fY2FuY2VsOgoJCWlucHV0Ll9vbl9jYW5jZWwgPSBvbl9jYW5jZWwKCglkZWYgY2IoKToKCQlnbG9iYWwgc3VibGltZV9jb21tYW5kX3Zpc2libGUKCQlzdWJsaW1lX2NvbW1hbmRfdmlzaWJsZSA9IFRydWUKCQl3aW5kb3cucnVuX2NvbW1hbmQoImhpZGVfb3ZlcmxheSIsIHsKCQkJCSJvdmVybGF5IjogImNvbW1hbmRfcGFsZXR0ZSIsCgkJCX0KCQkpCgkJZ2xvYmFsIGlzX3J1bm5pbmdfaW5wdXQKCQlpc19ydW5uaW5nX2lucHV0ID0gVHJ1ZQoJCXdpbmRvdy5ydW5fY29tbWFuZCgic2hvd19vdmVybGF5IiwgewoJCQkJIm92ZXJsYXkiOiAiY29tbWFuZF9wYWxldHRlIiwKCQkJCSJjb21tYW5kIjogInN1YmxpbWVfZGVidWdfaW5wdXQiLAoJCQkJImFyZ3MiOiB7CgkJCQkJImNvbW1hbmRfaWQiIDogY29tbWFuZF9pZAoJCQkJfQoJCQl9CgkJKQoJCXByaW50KCdydW4gY29tbWFuZCcpCgkJc3VibGltZV9jb21tYW5kX3Zpc2libGUgPSBGYWxzZQoJc3VibGltZS5zZXRfdGltZW91dChjYiwgMCkKCgpjbGFzcyBUZXh0SW5wdXQoc3VibGltZV9wbHVnaW4uVGV4dElucHV0SGFuZGxlcik6CglkZWYgX19pbml0X18oc2VsZiwgcGxhY2Vob2xkZXI9Tm9uZSwgaW5pdGlhbD1Ob25lLCBvbl9jYW5jZWw9Tm9uZSwgYXJnX25hbWU9InRleHQiKToKCQlzdXBlcigpLl9faW5pdF9fKCkKCQlzZWxmLl9wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyCgkJc2VsZi5faW5pdGlhbCA9IGluaXRpYWwKCQlzZWxmLmFyZ19uYW1lID0gYXJnX25hbWUKPHxmaW1faG9sZXw+CglkZWYgcGxhY2Vob2xkZXIoc2VsZik6CgkJcmV0dXJuIHNlbGYuX3BsYWNlaG9sZGVyCglkZWYgaW5pdGlhbF90ZXh0KHNlbGYpOgoJCXJldHVybiBzZWxmLl9pbml0aWFsCglkZWYgbmV4dF9pbnB1dChzZWxmLCBhcmdzKToKCQlyZXR1cm4gTm9uZQoJZGVmIG5hbWUoc2VsZik6CgkJcmV0dXJuIHNlbGYuYXJnX25hbWUKCWRlZiBjYW5jZWwoc2VsZik6CgkJcHJpbnQoJ2NhbmNlbGQnKQoJCWlmIHNlbGYuX29uX2NhbmNlbF9pbnRlcm5hbDoKCQkJc2VsZi5fb25fY2FuY2VsX2ludGVybmFsKCkKCQlpZiBzZWxmLl9vbl9jYW5jZWw6CgkJCXNlbGYuX29uX2NhbmNlbCgpCgpjbGFzcyBMaXN0SW5wdXRJdGVtOgoJZGVmIF9faW5pdF9fKHNlbGYsIHRleHQsIG5hbWUgPSBOb25lLCBuZXh0X2lucHV0ID0gTm9uZSk6CgkJc2VsZi50ZXh0ID0gdGV4dAoJCXNlbGYubmFtZSA9IG5hbWUKCQlzZWxmLm5leHRfaW5wdXQgPSBuZXh0X2lucHV0CgpjbGFzcyBMaXN0SW5wdXQoc3VibGltZV9wbHVnaW4uTGlzdElucHV0SGFuZGxlcik6CglkZWYgX19pbml0X18oc2VsZiwgdmFsdWVzLCBwbGFjZWhvbGRlcj1Ob25lLCBpbmRleD0wLCBvbl9jYW5jZWw9Tm9uZSwgYXJnX25hbWU9Imxpc3QiKToKCQlzdXBlcigpLl9faW5pdF9fKCkKCQlzZWxmLl9uZXh0X2lucHV0ID0gTm9uZQoJCXNlbGYudmFsdWVzID0gdmFsdWVzCgkJc2VsZi5fcGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcgoJCXNlbGYuaW5kZXggPSBpbmRleAoJCXNlbGYuX29uX2NhbmNlbCA9IG9uX2NhbmNlbAoJCXNlbGYuYXJnX25hbWUgPSBhcmdfbmFtZQoJCXNlbGYuX29uX2NhbmNlbF9pbnRlcm5hbCA9IE5vbmUKCglkZWYgbmFtZShzZWxmKToKCQlyZXR1cm4gc2VsZi5hcmdfbmFtZQoKCWRlZiBwbGFjZWhvbGRlcihzZWxmKToKCQlyZXR1cm4gc2VsZi5fcGxhY2Vob2xkZXIKCglkZWYgbGlzdF9pdGVtcyhzZWxmKToKCQlpdGVtcyA9IFtdCgkJZm9yIGluZGV4LCB2YWx1ZSBpbiBlbnVtZXJhdGUoc2VsZi52YWx1ZXMpOgoJCQlpdGVtcy5hcHBlbmQoW3ZhbHVlLnRleHQsIGluZGV4XSkKCQlyZXR1cm4gKGl0ZW1zLCBzZWxmLmluZGV4KQoKCWRlZiBjb25maXJtKHNlbGYsIHZhbHVlKToKCQlzZWxmLl9uZXh0X2lucHV0ID0gc2VsZi52YWx1ZXNbdmFsdWVdLm5leHRfaW5wdXQKCQlyZXR1cm4gdmFsdWUKCWRlZiB2YWxpZGF0ZShzZWxmLCB2YWx1ZSk6CgkJcmV0dXJuIFRydWUKCglkZWYgbmV4dF9pbnB1dChzZWxmLCBhcmdzKToKCQlyZXR1cm4gc2VsZi5fbmV4dF9pbnB1dAoKCWRlZiBjYW5jZWwoc2VsZik6CgkJaWYgc2VsZi5fb25fY2FuY2VsX2ludGVybmFsOgoJCQlzZWxmLl9vbl9jYW5jZWxfaW50ZXJuYWwoKQoJCWlmIHNlbGYuX29uX2NhbmNlbDoKCQkJc2VsZi5fb25fY2FuY2VsKCkKCglkZWYgZGVzY3JpcHRpb24oc2VsZiwgdmFsdWUsIHRleHQpOgoJCXJldHVybiBzZWxmLnZhbHVlc1t2YWx1ZV0ubmFtZSBvciBzZWxmLnZhbHVlc1t2YWx1ZV0udGV4dAoKCgo8fGZpbV9zdWZmaXh8PgoJCXNlbGYuX29uX2NhbmNlbCA9IG9uX2NhbmNlbAoJCXNlbGYuX29uX2NhbmNlbF9pbnRlcm5hbCA9IE5vbmUKPHxmaW1fZW5kfD4="]
["6bda8fa2bb8a176d8fb435811860c223d5116ca1-1","6bda8fa2bb8a176d8fb435811860c223d5116ca1","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMKIyBAQXV0aG9yOiBKb3PDqSBTw6FuY2hlei1HYWxsZWdvIChnYWxsZWdvakB1dy5lZHUpCiMgQERhdGU6IDIwMjEtMDUtMTIKIyBARmlsZW5hbWU6IGllYi5weQojIEBMaWNlbnNlOiBCU0QgMy1jbGF1c2UgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlKQoKaW1wb3J0IHdhcm5pbmdzCgpmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBEaWN0Cgpmcm9tIGRyaWZ0IGltcG9ydCBEcmlmdCwgRHJpZnRFcnJvcgoKZnJvbSBmdmMuZXhjZXB0aW9ucyBpbXBvcnQgRlZDVXNlcldhcm5pbmcKCgpfX2FsbF9fID0gWyJJRUIiXQoKCmNsYXNzIElFQihEcmlmdCk6CiAgICAiIiJUaGluZyB3cmFwcGVyIGFyb3VuZCBhIDpjbGFzczpgfmRyaWZ0LmRyaWZ0LkRyaWZ0YCBjbGFzcy4KCiAgICBBbGxvd3MgYWRkaXRpb25hbCBmZWF0dXJlcyBzdWNoIGFzIGRpc2FibGluZyB0aGUgaW50ZXJmYWNlLgoKICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgoKICAgICAgICBzZWxmLmRpc2FibGVkID0gRmFsc2UKCiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCgogICAgICAgIHNlbGYuX2NhdGVnb3JpZXMgPSBOb25lCgogICAgZGVmIGdldF9jYXRlZ29yaWVzKHNlbGYpOgogICAgICAgICIiIlJldHVybnMgYSBsaXN0IG9mIGNhdGVnb3JpZXMuIiIiCgogICAgICAgIGlmIHNlbGYuX2NhdGVnb3JpZXMgaXMgTm9uZToKICAgICAgICAgICAgY2F0ZWdvcmllcyA9IFsKICAgICAgICAgICAgICAgIGRldmljZS5jYXRlZ29yeQogICAgICAgICAgICAgICAgZm9yIG1vZHVsZSBpbiBzZWxmLm1vZHVsZXMKICAgICAgICAgICAgICAgIGZvciBkZXZpY2UgaW4gc2VsZi5tb2R1bGVzW21vZHVsZV0uZGV2aWNlcy52YWx1ZXMoKQogICAgICAgICAgICBdCiAgICAgICAgICAgIHNlbGYuX2NhdGVnb3JpZXMgPSBzZXQoY2F0ZWdvcmllcykKICAgICAgICAgICAgc2VsZi5fY2F0ZWdvcmllcy5kaXNjYXJkKE5vbmUpCgogICAgICAgIHJldHVybiBzZWxmLl9jYXRlZ29yaWVzCgogICAgYXN5bmMgZGVmIF9fYWVudGVyX18oc2VsZik6CgogICAgICAgIGlmIHNlbGYuZGlzYWJsZWQ6CiAgICAgICAgICAgIHJhaXNlIERyaWZ0RXJyb3IoIklFQiBpcyBkaXNhYmxlZC4iKQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGF3YWl0IERyaWZ0Ll9fYWVudGVyX18oc2VsZikKICAgICAgICBleGNlcHQgRHJpZnRFcnJvcjoKICAgICAgICAgICAgc2VsZi5kaXNhYmxlZCA9IFRydWUKICAgICAgICAgICAgd2FybmluZ3Mud2FybigiRmFpbGVkIGNvbm5lY3RpbmcgdG8gdGhlIElFQi4gRGlzYWJsaW5nIGl0LiIsIEZWQ1VzZXJXYXJuaW5nKQoKICAgIGFzeW5jIGRlZiBfX2FleGl0X18oc2VsZiwgKmFyZ3MpOgoKICAgICAgICBhd2FpdCBEcmlmdC5fX2FleGl0X18oc2VsZiwgKmFyZ3MpCgogICAgYXN5bmMgZGVmIGdldF9zdGF0dXMoc2VsZikgLT4gRGljdFtzdHIsIEFueV06CiAgICAgICAgIiIiUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBJRUIgY29tcG9uZW50cy4iIiIKCiAgICAgICAgc3RhdHVzID0ge30KICAgICAgICBmb3IgY2F0ZWdvcnkgaW4gc2VsZi5nZXRfY2F0ZWdvcmllcygpOgogICAgICAgICAgICBkYXRhID0gYXdhaXQgc2VsZi5yZWFkX2NhdGVnb3J5KGNhdGVnb3J5KQogICAgICAgICAgICBmb3IgZGV2aWNlIGluIGRhdGE6CiAgICAgICAgICAgICAgICBpZiBzZWxmLmdldF9kZXZpY2UoZGV2aWNlKS5fX3R5cGVfXyA9PSAicmVsYXkiOgogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gRmFsc2UgaWYgZGF0YVtkZXZpY2VdWzBdID09ICJvcGVuIiBlbHNlIFRydWUKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkYXRhW2RldmljZV1bMF0KICAgICAgICAgICAgICAgIHN0YXR1c1tkZXZpY2VdID0gdmFsdWUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICAgICByZXR1cm4gc3RhdHVzCjx8ZmltX2VuZHw+"]
["6bda8fa2bb8a176d8fb435811860c223d5116ca1-2","6bda8fa2bb8a176d8fb435811860c223d5116ca1","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMKIyBAQXV0aG9yOiBKb3PDqSBTw6FuY2hlei1HYWxsZWdvIChnYWxsZWdvakB1dy5lZHUpCiMgQERhdGU6IDIwMjEtMDUtMTIKIyBARmlsZW5hbWU6IGllYi5weQojIEBMaWNlbnNlOiBCU0QgMy1jbGF1c2UgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlKQoKaW1wb3J0IHdhcm5pbmdzCgpmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBEaWN0Cgpmcm9tIGRyaWZ0IGltcG9ydCBEcmlmdCwgRHJpZnRFcnJvcgoKZnJvbSBmdmMuZXhjZXB0aW9ucyBpbXBvcnQgRlZDVXNlcldhcm5pbmcKCgpfX2FsbF9fID0gWyJJRUIiXQoKCmNsYXNzIElFQihEcmlmdCk6CiAgICAiIiJUaGluZyB3cmFwcGVyIGFyb3VuZCBhIDpjbGFzczpgfmRyaWZ0LmRyaWZ0LkRyaWZ0YCBjbGFzcy4KCiAgICBBbGxvd3MgYWRkaXRpb25hbCBmZWF0dXJlcyBzdWNoIGFzIGRpc2FibGluZyB0aGUgaW50ZXJmYWNlLgoKICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgoKICAgICAgICBzZWxmLmRpc2FibGVkID0gRmFsc2UKCiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCgogICAgICAgIHNlbGYuX2NhdGVnb3JpZXMgPSBOb25lCgogICAgZGVmIGdldF9jYXRlZ29yaWVzKHNlbGYpOgogICAgICAgICIiIlJldHVybnMgYSBsaXN0IG9mIGNhdGVnb3JpZXMuIiIiCgogICAgICAgIGlmIHNlbGYuX2NhdGVnb3JpZXMgaXMgTm9uZToKICAgICAgICAgICAgY2F0ZWdvcmllcyA9IFsKICAgICAgICAgICAgICAgIGRldmljZS5jYXRlZ29yeQogICAgICAgICAgICAgICAgZm9yIG1vZHVsZSBpbiBzZWxmLm1vZHVsZXMKICAgICAgICAgICAgICAgIGZvciBkZXZpY2UgaW4gc2VsZi5tb2R1bGVzW21vZHVsZV0uZGV2aWNlcy52YWx1ZXMoKQogICAgICAgICAgICBdCiAgICAgICAgICAgIHNlbGYuX2NhdGVnb3JpZXMgPSBzZXQoY2F0ZWdvcmllcykKICAgICAgICAgICAgc2VsZi5fY2F0ZWdvcmllcy5kaXNjYXJkKE5vbmUpCgogICAgICAgIHJldHVybiBzZWxmLl9jYXRlZ29yaWVzCgogICAgYXN5bmMgZGVmIF9fYWVudGVyX18oc2VsZik6CgogICAgICAgIGlmIHNlbGYuZGlzYWJsZWQ6CiAgICAgICAgICAgIHJhaXNlIERyaWZ0RXJyb3IoIklFQiBpcyBkaXNhYmxlZC4iKQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGF3YWl0IERyaWZ0Ll9fYWVudGVyX18oc2VsZikKICAgICAgICBleGNlcHQgRHJpZnRFcnJvcjoKICAgICAgICAgICAgc2VsZi5kaXNhYmxlZCA9IFRydWUKICAgICAgICAgICAgd2FybmluZ3Mud2FybigiRmFpbGVkIGNvbm5lY3RpbmcgdG8gdGhlIElFQi4gRGlzYWJsaW5nIGl0LiIsIEZWQ1VzZXJXYXJuaW5nKQoKICAgIGFzeW5jIGRlZiBfX2FleGl0X18oc2VsZiwgKmFyZ3MpOgoKICAgICAgICBhd2FpdCBEcmlmdC5fX2FleGl0X18oc2VsZiwgKmFyZ3MpCgogICAgYXN5bmMgZGVmIGdldF9zdGF0dXMoc2VsZikgLT4gRGljdFtzdHIsIEFueV06CiAgICAgICAgIiIiUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBJRUIgY29tcG9uZW50cy4iIiIKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIGZvciBkZXZpY2UgaW4gZGF0YToKICAgICAgICAgICAgICAgIGlmIHNlbGYuZ2V0X2RldmljZShkZXZpY2UpLl9fdHlwZV9fID09ICJyZWxheSI6CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBGYWxzZSBpZiBkYXRhW2RldmljZV1bMF0gPT0gIm9wZW4iIGVsc2UgVHJ1ZQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGRhdGFbZGV2aWNlXVswXQogICAgICAgICAgICAgICAgc3RhdHVzW2RldmljZV0gPSB2YWx1ZQoKICAgICAgICByZXR1cm4gc3RhdHVzCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgIHN0YXR1cyA9IHt9CiAgICAgICAgZm9yIGNhdGVnb3J5IGluIHNlbGYuZ2V0X2NhdGVnb3JpZXMoKToKICAgICAgICAgICAgZGF0YSA9IGF3YWl0IHNlbGYucmVhZF9jYXRlZ29yeShjYXRlZ29yeSkKPHxmaW1fZW5kfD4="]
["e7c9e5957bdc40a1e936ecf43f93157d5c0d6729-1","e7c9e5957bdc40a1e936ecf43f93157d5c0d6729","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBkamFuZ28uY29yZS5maWxlcy5zdG9yYWdlIGltcG9ydCBGaWxlU3lzdGVtU3RvcmFnZQoKCmNsYXNzIERGRmlsZVN5c3RlbVN0b3JhZ2UoRmlsZVN5c3RlbVN0b3JhZ2UpOgo8fGZpbV9lbmR8Pg=="]
["e7c9e5957bdc40a1e936ecf43f93157d5c0d6729-2","e7c9e5957bdc40a1e936ecf43f93157d5c0d6729","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29yZS5maWxlcy5zdG9yYWdlIGltcG9ydCBGaWxlU3lzdGVtU3RvcmFnZQoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgREZGaWxlU3lzdGVtU3RvcmFnZShGaWxlU3lzdGVtU3RvcmFnZSk6CiAgICBkZWYgdXJsKHNlbGYsIG5hbWUpOgogICAgICAgIHJldHVybiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL21lZGlhLyIgKyBuYW1lCjx8ZmltX2VuZHw+"]
["e7c9e5957bdc40a1e936ecf43f93157d5c0d6729-3","e7c9e5957bdc40a1e936ecf43f93157d5c0d6729","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29yZS5maWxlcy5zdG9yYWdlIGltcG9ydCBGaWxlU3lzdGVtU3RvcmFnZQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgREZGaWxlU3lzdGVtU3RvcmFnZShGaWxlU3lzdGVtU3RvcmFnZSk6CiAgICBkZWYgdXJsKHNlbGYsIG5hbWUpOgogICAgICAgIHJldHVybiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL21lZGlhLyIgKyBuYW1lCjx8ZmltX2VuZHw+"]
["e7c9e5957bdc40a1e936ecf43f93157d5c0d6729-4","e7c9e5957bdc40a1e936ecf43f93157d5c0d6729","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBkamFuZ28uY29yZS5maWxlcy5zdG9yYWdlIGltcG9ydCBGaWxlU3lzdGVtU3RvcmFnZQoKCmNsYXNzIERGRmlsZVN5c3RlbVN0b3JhZ2UoRmlsZVN5c3RlbVN0b3JhZ2UpOgo8fGZpbV9lbmR8Pg=="]
["e7c9e5957bdc40a1e936ecf43f93157d5c0d6729-5","e7c9e5957bdc40a1e936ecf43f93157d5c0d6729","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29yZS5maWxlcy5zdG9yYWdlIGltcG9ydCBGaWxlU3lzdGVtU3RvcmFnZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKY2xhc3MgREZGaWxlU3lzdGVtU3RvcmFnZShGaWxlU3lzdGVtU3RvcmFnZSk6CiAgICBkZWYgdXJsKHNlbGYsIG5hbWUpOgo8fGZpbV9lbmR8Pg=="]
["d45c504ae46c9903f72cf5e33eed22485744bf0f-1","d45c504ae46c9903f72cf5e33eed22485744bf0f","PHxmaW1fcHJlZml4fD4KIyByZW5hbWVkIHRvIGNvb3Jkcy5weQpmcm9tIC5jb29yZHMgaW1wb3J0ICoKZnJvbSAuY29vcmRzIGltcG9ydCBfQVBZX0NPT1JEUywgX0FQWV9MT0FERUQsIF9ERUdUT1JBRCwgX0ssIFwKICAgIF9wYXJzZV9lcG9jaF9mcmFtZV9hcHkKaW1wb3J0IHdhcm5pbmdzCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4Kd2FybmluZ3Mud2FybignZ2FscHkudXRpbC5ib3Z5X2Nvb3JkcyBpcyBiZWluZyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGdhbHB5LnV0aWwuY29vcmRzOyBhbGwgZnVuY3Rpb25zIGluIHRoZXJlIGFyZSB0aGUgc2FtZTsgcGxlYXNlIHN3aXRjaCB0byB0aGUgbmV3IGltcG9ydCwgYmVjYXVzZSB0aGUgb2xkIGltcG9ydCB3aWxsIGJlIHJlbW92ZWQgaW4gdjEuOScsRnV0dXJlV2FybmluZykKPHxmaW1fZW5kfD4="]
["d45c504ae46c9903f72cf5e33eed22485744bf0f-2","d45c504ae46c9903f72cf5e33eed22485744bf0f","PHxmaW1fcHJlZml4fD4KIyByZW5hbWVkIHRvIGNvb3Jkcy5weQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gLmNvb3JkcyBpbXBvcnQgKgpmcm9tIC5jb29yZHMgaW1wb3J0IF9BUFlfQ09PUkRTLCBfQVBZX0xPQURFRCwgX0RFR1RPUkFELCBfSywgXAogICAgX3BhcnNlX2Vwb2NoX2ZyYW1lX2FweQppbXBvcnQgd2FybmluZ3MKPHxmaW1fZW5kfD4="]
["d45c504ae46c9903f72cf5e33eed22485744bf0f-3","d45c504ae46c9903f72cf5e33eed22485744bf0f","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgppbXBvcnQgd2FybmluZ3MKd2FybmluZ3Mud2FybignZ2FscHkudXRpbC5ib3Z5X2Nvb3JkcyBpcyBiZWluZyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGdhbHB5LnV0aWwuY29vcmRzOyBhbGwgZnVuY3Rpb25zIGluIHRoZXJlIGFyZSB0aGUgc2FtZTsgcGxlYXNlIHN3aXRjaCB0byB0aGUgbmV3IGltcG9ydCwgYmVjYXVzZSB0aGUgb2xkIGltcG9ydCB3aWxsIGJlIHJlbW92ZWQgaW4gdjEuOScsRnV0dXJlV2FybmluZykKPHxmaW1fc3VmZml4fD4KIyByZW5hbWVkIHRvIGNvb3Jkcy5weQpmcm9tIC5jb29yZHMgaW1wb3J0ICoKZnJvbSAuY29vcmRzIGltcG9ydCBfQVBZX0NPT1JEUywgX0FQWV9MT0FERUQsIF9ERUdUT1JBRCwgX0ssIFwKICAgIF9wYXJzZV9lcG9jaF9mcmFtZV9hcHkKPHxmaW1fZW5kfD4="]
["d45c504ae46c9903f72cf5e33eed22485744bf0f-4","d45c504ae46c9903f72cf5e33eed22485744bf0f","PHxmaW1fcHJlZml4fD4KIyByZW5hbWVkIHRvIGNvb3Jkcy5weQpmcm9tIC5jb29yZHMgaW1wb3J0ICoKZnJvbSAuY29vcmRzIGltcG9ydCBfQVBZX0NPT1JEUywgX0FQWV9MT0FERUQsIF9ERUdUT1JBRCwgX0ssIFwKPHxmaW1faG9sZXw+CmltcG9ydCB3YXJuaW5ncwp3YXJuaW5ncy53YXJuKCdnYWxweS51dGlsLmJvdnlfY29vcmRzIGlzIGJlaW5nIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgZ2FscHkudXRpbC5jb29yZHM7IGFsbCBmdW5jdGlvbnMgaW4gdGhlcmUgYXJlIHRoZSBzYW1lOyBwbGVhc2Ugc3dpdGNoIHRvIHRoZSBuZXcgaW1wb3J0LCBiZWNhdXNlIHRoZSBvbGQgaW1wb3J0IHdpbGwgYmUgcmVtb3ZlZCBpbiB2MS45JyxGdXR1cmVXYXJuaW5nKQo8fGZpbV9zdWZmaXh8PgogICAgX3BhcnNlX2Vwb2NoX2ZyYW1lX2FweQo8fGZpbV9lbmR8Pg=="]
["d45c504ae46c9903f72cf5e33eed22485744bf0f-5","d45c504ae46c9903f72cf5e33eed22485744bf0f","PHxmaW1fcHJlZml4fD4KIyByZW5hbWVkIHRvIGNvb3Jkcy5weQpmcm9tIC5jb29yZHMgaW1wb3J0ICoKZnJvbSAuY29vcmRzIGltcG9ydCBfQVBZX0NPT1JEUywgX0FQWV9MT0FERUQsIF9ERUdUT1JBRCwgX0ssIFwKICAgIF9wYXJzZV9lcG9jaF9mcmFtZV9hcHkKaW1wb3J0IHdhcm5pbmdzCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4Kd2FybmluZ3Mud2FybignZ2FscHkudXRpbC5ib3Z5X2Nvb3JkcyBpcyBiZWluZyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGdhbHB5LnV0aWwuY29vcmRzOyBhbGwgZnVuY3Rpb25zIGluIHRoZXJlIGFyZSB0aGUgc2FtZTsgcGxlYXNlIHN3aXRjaCB0byB0aGUgbmV3IGltcG9ydCwgYmVjYXVzZSB0aGUgb2xkIGltcG9ydCB3aWxsIGJlIHJlbW92ZWQgaW4gdjEuOScsRnV0dXJlV2FybmluZykKPHxmaW1fZW5kfD4="]
["6bf47d7e604fc6f1bb0e97e907469312f8cdbd41-1","6bf47d7e604fc6f1bb0e97e907469312f8cdbd41","PHxmaW1fcHJlZml4fD4KZnJvbSAuYXV0aGVudGljYXRlX2xvZ2luIGltcG9ydCBBdXRoZW50aWNhdGVMb2dpbgpmcm9tIC5wYXJzZV90b2tlbl9kYXRhIGltcG9ydCBQYXJzZVRva2VuRGF0YQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gLmNoYW5nZV9wYXNzd29yZCBpbXBvcnQgQ2hhbmdlUGFzc3dvcmQKZnJvbSAucmVjb3ZlcnlfcGFzc3dvcmQgaW1wb3J0IFJlY292ZXJ5UGFzc3dvcmQKZnJvbSAucmVmcmVzaF90b2tlbiBpbXBvcnQgUmVmcmVzaFRva2VuCjx8ZmltX2VuZHw+"]
["6bf47d7e604fc6f1bb0e97e907469312f8cdbd41-2","6bf47d7e604fc6f1bb0e97e907469312f8cdbd41","PHxmaW1fcHJlZml4fD4KZnJvbSAuYXV0aGVudGljYXRlX2xvZ2luIGltcG9ydCBBdXRoZW50aWNhdGVMb2dpbgpmcm9tIC5wYXJzZV90b2tlbl9kYXRhIGltcG9ydCBQYXJzZVRva2VuRGF0YQpmcm9tIC5jaGFuZ2VfcGFzc3dvcmQgaW1wb3J0IENoYW5nZVBhc3N3b3JkCmZyb20gLnJlY292ZXJ5X3Bhc3N3b3JkIGltcG9ydCBSZWNvdmVyeVBhc3N3b3JkCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAucmVmcmVzaF90b2tlbiBpbXBvcnQgUmVmcmVzaFRva2VuCjx8ZmltX2VuZHw+"]
["7851a8c948bbebc5d8dc1b116678e698d5a44695-1","7851a8c948bbebc5d8dc1b116678e698d5a44695","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKCmNsYXNzIFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiB0ZXN0X2RyYXcoc2VsZik6CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAwMCwpLCBzLnNoYXBlLCBtc2c9IkRyYXcgMTAwMCBzYW1wbGVzLiIpCgogICAgZGVmIHRlc3RfbWVhbihzZWxmKToKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAuMCwgIHJvdW5kKGFicyhtdSAtIG5wLm1lYW4ocykpLCAxKSwgbXNnPSJNZWFuIHNob3VsZCBiZSBjbG9zZSB0byAwLjAuIikKCiAgICBkZWYgdGVzdF92YXJpYW5jZShzZWxmKToKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAuMCwgIHJvdW5kKGFicyhzaWdtYSAtIG5wLnN0ZChzLCBkZG9mPTEpKSwgMSksIG1zZz0iVmFyaWFuY2Ugc2hvdWxkIGJlIGNsb3NlIHRvIDAuMC4iKQoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCBudW1weSBhcyBucAoKZnJvbSB0YXNrIGltcG9ydCAqCjx8ZmltX2VuZHw+"]
["7851a8c948bbebc5d8dc1b116678e698d5a44695-2","7851a8c948bbebc5d8dc1b116678e698d5a44695","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCBudW1weSBhcyBucAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cgpmcm9tIHRhc2sgaW1wb3J0ICoKCgo8fGZpbV9lbmR8Pg=="]
["7851a8c948bbebc5d8dc1b116678e698d5a44695-3","7851a8c948bbebc5d8dc1b116678e698d5a44695","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKCmNsYXNzIFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiB0ZXN0X2RyYXcoc2VsZik6CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAwMCwpLCBzLnNoYXBlLCBtc2c9IkRyYXcgMTAwMCBzYW1wbGVzLiIpCgogICAgZGVmIHRlc3RfbWVhbihzZWxmKToKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAuMCwgIHJvdW5kKGFicyhtdSAtIG5wLm1lYW4ocykpLCAxKSwgbXNnPSJNZWFuIHNob3VsZCBiZSBjbG9zZSB0byAwLjAuIikKCiAgICBkZWYgdGVzdF92YXJpYW5jZShzZWxmKToKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAuMCwgIHJvdW5kKGFicyhzaWdtYSAtIG5wLnN0ZChzLCBkZG9mPTEpKSwgMSksIG1zZz0iVmFyaWFuY2Ugc2hvdWxkIGJlIGNsb3NlIHRvIDAuMC4iKQoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCBudW1weSBhcyBucAoKZnJvbSB0YXNrIGltcG9ydCAqCjx8ZmltX2VuZHw+"]
["7851a8c948bbebc5d8dc1b116678e698d5a44695-4","7851a8c948bbebc5d8dc1b116678e698d5a44695","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCBudW1weSBhcyBucAoKZnJvbSB0YXNrIGltcG9ydCAqCgoKY2xhc3MgVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgZGVmIHRlc3RfZHJhdyhzZWxmKToKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMDAwLCksIHMuc2hhcGUsIG1zZz0iRHJhdyAxMDAwIHNhbXBsZXMuIikKCjx8ZmltX2hvbGV8PgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMC4wLCAgcm91bmQoYWJzKHNpZ21hIC0gbnAuc3RkKHMsIGRkb2Y9MSkpLCAxKSwgbXNnPSJWYXJpYW5jZSBzaG91bGQgYmUgY2xvc2UgdG8gMC4wLiIpCgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIHRlc3RfbWVhbihzZWxmKToKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAuMCwgIHJvdW5kKGFicyhtdSAtIG5wLm1lYW4ocykpLCAxKSwgbXNnPSJNZWFuIHNob3VsZCBiZSBjbG9zZSB0byAwLjAuIikKCiAgICBkZWYgdGVzdF92YXJpYW5jZShzZWxmKToKPHxmaW1fZW5kfD4="]
["e787399c8e46f03a0e5a58d3405f56b6047420f8-1","e787399c8e46f03a0e5a58d3405f56b6047420f8","PHxmaW1fcHJlZml4fD4KaHR0cHM6Ly9sZWV0Y29kZS5jb20vcHJvYmxlbXMvbWF4aW11bS1kZXB0aC1vZi1iaW5hcnktdHJlZS8KCiMgY2xhc3MgVHJlZU5vZGU6CiMgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWw9MCwgbGVmdD1Ob25lLCByaWdodD1Ob25lKToKIyAgICAgICAgIHNlbGYudmFsID0gdmFsCiMgICAgICAgICBzZWxmLmxlZnQgPSBsZWZ0CiMgICAgICAgICBzZWxmLnJpZ2h0ID0gcmlnaHQKCmRlZiBtYXhEZXB0aChzZWxmLCByb290OiBUcmVlTm9kZSkgLT4gaW50OgogICAgaWYgbm90IHJvb3Q6CiAgICAgICAgcmV0dXJuIDAKICAgIHJldHVybiAxICsgbWF4KHNlbGYubWF4RGVwdGgocm9vdC5sZWZ0KSwgc2VsZi5tYXhEZXB0aChyb290LnJpZ2h0KSkKCgpkZWYgbWF4RGVwdGgxKHNlbGYsIHJvb3QpOgogICAgZGVxdWUsIGRlcHRoID0gY29sbGVjdGlvbnMuZGVxdWUoKSwgMAogICAgaWYgcm9vdDoKICAgICAgICBkZXF1ZS5hcHBlbmQocm9vdCkKICAgIHdoaWxlIGRlcXVlOgogICAgICAgIHNpemUgPSBsZW4oZGVxdWUpCiAgICAgICAgZm9yIF8gaW4gcmFuZ2Uoc2l6ZSk6CiAgICAgICAgICAgIG5vZGUgPSBkZXF1ZS5wb3BsZWZ0KCkKICAgICAgICAgICAgaWYgbm9kZS5sZWZ0OgogICAgICAgICAgICAgICAgZGVxdWUuYXBwZW5kKG5vZGUubGVmdCkKICAgICAgICAgICAgaWYgbm9kZS5yaWdodDoKICAgICAgICAgICAgICAgIGRlcXVlLmFwcGVuZChub2RlLnJpZ2h0KQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZGVwdGggKz0gMQo8fGZpbV9lbmR8Pg=="]
["e787399c8e46f03a0e5a58d3405f56b6047420f8-2","e787399c8e46f03a0e5a58d3405f56b6047420f8","PHxmaW1fcHJlZml4fD4KaHR0cHM6Ly9sZWV0Y29kZS5jb20vcHJvYmxlbXMvbWF4aW11bS1kZXB0aC1vZi1iaW5hcnktdHJlZS8KCiMgY2xhc3MgVHJlZU5vZGU6CiMgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWw9MCwgbGVmdD1Ob25lLCByaWdodD1Ob25lKToKPHxmaW1faG9sZXw+CmRlZiBtYXhEZXB0aChzZWxmLCByb290OiBUcmVlTm9kZSkgLT4gaW50OgogICAgaWYgbm90IHJvb3Q6CiAgICAgICAgcmV0dXJuIDAKICAgIHJldHVybiAxICsgbWF4KHNlbGYubWF4RGVwdGgocm9vdC5sZWZ0KSwgc2VsZi5tYXhEZXB0aChyb290LnJpZ2h0KSkKCgpkZWYgbWF4RGVwdGgxKHNlbGYsIHJvb3QpOgogICAgZGVxdWUsIGRlcHRoID0gY29sbGVjdGlvbnMuZGVxdWUoKSwgMAogICAgaWYgcm9vdDoKICAgICAgICBkZXF1ZS5hcHBlbmQocm9vdCkKICAgIHdoaWxlIGRlcXVlOgogICAgICAgIHNpemUgPSBsZW4oZGVxdWUpCiAgICAgICAgZm9yIF8gaW4gcmFuZ2Uoc2l6ZSk6CiAgICAgICAgICAgIG5vZGUgPSBkZXF1ZS5wb3BsZWZ0KCkKICAgICAgICAgICAgaWYgbm9kZS5sZWZ0OgogICAgICAgICAgICAgICAgZGVxdWUuYXBwZW5kKG5vZGUubGVmdCkKICAgICAgICAgICAgaWYgbm9kZS5yaWdodDoKICAgICAgICAgICAgICAgIGRlcXVlLmFwcGVuZChub2RlLnJpZ2h0KQogICAgICAgIGRlcHRoICs9IDEKICAgIHJldHVybiBkZXB0aAo8fGZpbV9zdWZmaXh8PgojICAgICAgICAgc2VsZi52YWwgPSB2YWwKIyAgICAgICAgIHNlbGYubGVmdCA9IGxlZnQKIyAgICAgICAgIHNlbGYucmlnaHQgPSByaWdodAoKPHxmaW1fZW5kfD4="]
["e787399c8e46f03a0e5a58d3405f56b6047420f8-3","e787399c8e46f03a0e5a58d3405f56b6047420f8","PHxmaW1fcHJlZml4fD4KaHR0cHM6Ly9sZWV0Y29kZS5jb20vcHJvYmxlbXMvbWF4aW11bS1kZXB0aC1vZi1iaW5hcnktdHJlZS8KCiMgY2xhc3MgVHJlZU5vZGU6Cjx8ZmltX2hvbGV8PgoKZGVmIG1heERlcHRoKHNlbGYsIHJvb3Q6IFRyZWVOb2RlKSAtPiBpbnQ6CiAgICBpZiBub3Qgcm9vdDoKICAgICAgICByZXR1cm4gMAogICAgcmV0dXJuIDEgKyBtYXgoc2VsZi5tYXhEZXB0aChyb290LmxlZnQpLCBzZWxmLm1heERlcHRoKHJvb3QucmlnaHQpKQoKCmRlZiBtYXhEZXB0aDEoc2VsZiwgcm9vdCk6CiAgICBkZXF1ZSwgZGVwdGggPSBjb2xsZWN0aW9ucy5kZXF1ZSgpLCAwCiAgICBpZiByb290OgogICAgICAgIGRlcXVlLmFwcGVuZChyb290KQogICAgd2hpbGUgZGVxdWU6CiAgICAgICAgc2l6ZSA9IGxlbihkZXF1ZSkKICAgICAgICBmb3IgXyBpbiByYW5nZShzaXplKToKICAgICAgICAgICAgbm9kZSA9IGRlcXVlLnBvcGxlZnQoKQogICAgICAgICAgICBpZiBub2RlLmxlZnQ6CiAgICAgICAgICAgICAgICBkZXF1ZS5hcHBlbmQobm9kZS5sZWZ0KQogICAgICAgICAgICBpZiBub2RlLnJpZ2h0OgogICAgICAgICAgICAgICAgZGVxdWUuYXBwZW5kKG5vZGUucmlnaHQpCiAgICAgICAgZGVwdGggKz0gMQogICAgcmV0dXJuIGRlcHRoCjx8ZmltX3N1ZmZpeHw+CiMgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWw9MCwgbGVmdD1Ob25lLCByaWdodD1Ob25lKToKIyAgICAgICAgIHNlbGYudmFsID0gdmFsCiMgICAgICAgICBzZWxmLmxlZnQgPSBsZWZ0CiMgICAgICAgICBzZWxmLnJpZ2h0ID0gcmlnaHQKPHxmaW1fZW5kfD4="]
["e787399c8e46f03a0e5a58d3405f56b6047420f8-4","e787399c8e46f03a0e5a58d3405f56b6047420f8","PHxmaW1fcHJlZml4fD4KaHR0cHM6Ly9sZWV0Y29kZS5jb20vcHJvYmxlbXMvbWF4aW11bS1kZXB0aC1vZi1iaW5hcnktdHJlZS8KCiMgY2xhc3MgVHJlZU5vZGU6CiMgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWw9MCwgbGVmdD1Ob25lLCByaWdodD1Ob25lKToKIyAgICAgICAgIHNlbGYudmFsID0gdmFsCiMgICAgICAgICBzZWxmLmxlZnQgPSBsZWZ0CiMgICAgICAgICBzZWxmLnJpZ2h0ID0gcmlnaHQKCmRlZiBtYXhEZXB0aChzZWxmLCByb290OiBUcmVlTm9kZSkgLT4gaW50OgogICAgaWYgbm90IHJvb3Q6CiAgICAgICAgcmV0dXJuIDAKICAgIHJldHVybiAxICsgbWF4KHNlbGYubWF4RGVwdGgocm9vdC5sZWZ0KSwgc2VsZi5tYXhEZXB0aChyb290LnJpZ2h0KSkKCgpkZWYgbWF4RGVwdGgxKHNlbGYsIHJvb3QpOgogICAgZGVxdWUsIGRlcHRoID0gY29sbGVjdGlvbnMuZGVxdWUoKSwgMAogICAgaWYgcm9vdDoKICAgICAgICBkZXF1ZS5hcHBlbmQocm9vdCkKICAgIHdoaWxlIGRlcXVlOgogICAgICAgIHNpemUgPSBsZW4oZGVxdWUpCiAgICAgICAgZm9yIF8gaW4gcmFuZ2Uoc2l6ZSk6CiAgICAgICAgICAgIG5vZGUgPSBkZXF1ZS5wb3BsZWZ0KCkKICAgICAgICAgICAgaWYgbm9kZS5sZWZ0Ogo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgaWYgbm9kZS5yaWdodDoKICAgICAgICAgICAgICAgIGRlcXVlLmFwcGVuZChub2RlLnJpZ2h0KQogICAgICAgIGRlcHRoICs9IDEKICAgIHJldHVybiBkZXB0aAo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgZGVxdWUuYXBwZW5kKG5vZGUubGVmdCkKPHxmaW1fZW5kfD4="]
["e787399c8e46f03a0e5a58d3405f56b6047420f8-5","e787399c8e46f03a0e5a58d3405f56b6047420f8","PHxmaW1fcHJlZml4fD4KaHR0cHM6Ly9sZWV0Y29kZS5jb20vcHJvYmxlbXMvbWF4aW11bS1kZXB0aC1vZi1iaW5hcnktdHJlZS8KCiMgY2xhc3MgVHJlZU5vZGU6CiMgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWw9MCwgbGVmdD1Ob25lLCByaWdodD1Ob25lKToKIyAgICAgICAgIHNlbGYudmFsID0gdmFsCiMgICAgICAgICBzZWxmLmxlZnQgPSBsZWZ0CiMgICAgICAgICBzZWxmLnJpZ2h0ID0gcmlnaHQKCmRlZiBtYXhEZXB0aChzZWxmLCByb290OiBUcmVlTm9kZSkgLT4gaW50OgogICAgaWYgbm90IHJvb3Q6CiAgICAgICAgcmV0dXJuIDAKICAgIHJldHVybiAxICsgbWF4KHNlbGYubWF4RGVwdGgocm9vdC5sZWZ0KSwgc2VsZi5tYXhEZXB0aChyb290LnJpZ2h0KSkKCjx8ZmltX2hvbGV8PgogICAgICAgIGRlcXVlLmFwcGVuZChyb290KQogICAgd2hpbGUgZGVxdWU6CiAgICAgICAgc2l6ZSA9IGxlbihkZXF1ZSkKICAgICAgICBmb3IgXyBpbiByYW5nZShzaXplKToKICAgICAgICAgICAgbm9kZSA9IGRlcXVlLnBvcGxlZnQoKQogICAgICAgICAgICBpZiBub2RlLmxlZnQ6CiAgICAgICAgICAgICAgICBkZXF1ZS5hcHBlbmQobm9kZS5sZWZ0KQogICAgICAgICAgICBpZiBub2RlLnJpZ2h0OgogICAgICAgICAgICAgICAgZGVxdWUuYXBwZW5kKG5vZGUucmlnaHQpCiAgICAgICAgZGVwdGggKz0gMQogICAgcmV0dXJuIGRlcHRoCjx8ZmltX3N1ZmZpeHw+CgpkZWYgbWF4RGVwdGgxKHNlbGYsIHJvb3QpOgogICAgZGVxdWUsIGRlcHRoID0gY29sbGVjdGlvbnMuZGVxdWUoKSwgMAogICAgaWYgcm9vdDoKPHxmaW1fZW5kfD4="]
["c190b933a912234953fd3fb66f5dedb176c83405-1","c190b933a912234953fd3fb66f5dedb176c83405","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMi45IG9uIDIwMjEtMTItMDEgMTE6MjQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKaW1wb3J0IGRqYW5nby5kYi5tb2RlbHMuZGVsZXRpb24KZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMsIG1vZGVscwo8fGZpbV9lbmR8Pg=="]
["c190b933a912234953fd3fb66f5dedb176c83405-2","c190b933a912234953fd3fb66f5dedb176c83405","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMi45IG9uIDIwMjEtMTItMDEgMTE6MjQKCmltcG9ydCBkamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICBtaWdyYXRpb25zLnN3YXBwYWJsZV9kZXBlbmRlbmN5KHNldHRpbmdzLkFVVEhfVVNFUl9NT0RFTCksCiAgICAgICAgKCdyZWNpcGVzJywgJzAwMDNfZm9sbG93JyksCjx8ZmltX2hvbGV8PgogICAgICAgICAgICBuYW1lPSd0YWcnLAogICAgICAgICAgICBvcHRpb25zPXsndmVyYm9zZV9uYW1lJzogJ9Ci0LXQsycsICd2ZXJib3NlX25hbWVfcGx1cmFsJzogJ9Ci0LXQs9C4J30sCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkNyZWF0ZU1vZGVsKAogICAgICAgICAgICBuYW1lPSdTaG9wcGluZ0NhcnQnLAogICAgICAgICAgICBmaWVsZHM9WwogICAgICAgICAgICAgICAgKCdpZCcsIG1vZGVscy5CaWdBdXRvRmllbGQoYXV0b19jcmVhdGVkPVRydWUsIHByaW1hcnlfa2V5PVRydWUsIHNlcmlhbGl6ZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdJRCcpKSwKICAgICAgICAgICAgICAgICgncmVjaXBlJywgbW9kZWxzLkZvcmVpZ25LZXkob25fZGVsZXRlPWRqYW5nby5kYi5tb2RlbHMuZGVsZXRpb24uQ0FTQ0FERSwgcmVsYXRlZF9uYW1lPSdwdXJjaGFzZScsIHRvPSdyZWNpcGVzLnJlY2lwZScpKSwKICAgICAgICAgICAgICAgICgndXNlcicsIG1vZGVscy5Gb3JlaWduS2V5KG9uX2RlbGV0ZT1kamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uLkNBU0NBREUsIHJlbGF0ZWRfbmFtZT0nY3VzdG9tZXInLCB0bz1zZXR0aW5ncy5BVVRIX1VTRVJfTU9ERUwpKSwKICAgICAgICAgICAgXSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQ3JlYXRlTW9kZWwoCiAgICAgICAgICAgIG5hbWU9J0Zhdm9yaXRlJywKICAgICAgICAgICAgZmllbGRzPVsKICAgICAgICAgICAgICAgICgnaWQnLCBtb2RlbHMuQmlnQXV0b0ZpZWxkKGF1dG9fY3JlYXRlZD1UcnVlLCBwcmltYXJ5X2tleT1UcnVlLCBzZXJpYWxpemU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nSUQnKSksCiAgICAgICAgICAgICAgICAoJ3JlY2lwZScsIG1vZGVscy5Gb3JlaWduS2V5KG9uX2RlbGV0ZT1kamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uLkNBU0NBREUsIHJlbGF0ZWRfbmFtZT0nZmF2b3JpdGUnLCB0bz0ncmVjaXBlcy5yZWNpcGUnKSksCiAgICAgICAgICAgICAgICAoJ3VzZXInLCBtb2RlbHMuRm9yZWlnbktleShvbl9kZWxldGU9ZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbi5DQVNDQURFLCB0bz1zZXR0aW5ncy5BVVRIX1VTRVJfTU9ERUwpKSwKICAgICAgICAgICAgXSwKICAgICAgICApLAogICAgXQo8fGZpbV9zdWZmaXh8PgogICAgXQoKICAgIG9wZXJhdGlvbnMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5BbHRlck1vZGVsT3B0aW9ucygKPHxmaW1fZW5kfD4="]
["c190b933a912234953fd3fb66f5dedb176c83405-3","c190b933a912234953fd3fb66f5dedb176c83405","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMi45IG9uIDIwMjEtMTItMDEgMTE6MjQKCmltcG9ydCBkamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICBtaWdyYXRpb25zLnN3YXBwYWJsZV9kZXBlbmRlbmN5KHNldHRpbmdzLkFVVEhfVVNFUl9NT0RFTCksCiAgICAgICAgKCdyZWNpcGVzJywgJzAwMDNfZm9sbG93JyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFsdGVyTW9kZWxPcHRpb25zKAogICAgICAgICAgICBuYW1lPSd0YWcnLAogICAgICAgICAgICBvcHRpb25zPXsndmVyYm9zZV9uYW1lJzogJ9Ci0LXQsycsICd2ZXJib3NlX25hbWVfcGx1cmFsJzogJ9Ci0LXQs9C4J30sCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkNyZWF0ZU1vZGVsKAogICAgICAgICAgICBuYW1lPSdTaG9wcGluZ0NhcnQnLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGZpZWxkcz1bCiAgICAgICAgICAgICAgICAoJ2lkJywgbW9kZWxzLkJpZ0F1dG9GaWVsZChhdXRvX2NyZWF0ZWQ9VHJ1ZSwgcHJpbWFyeV9rZXk9VHJ1ZSwgc2VyaWFsaXplPUZhbHNlLCB2ZXJib3NlX25hbWU9J0lEJykpLAogICAgICAgICAgICAgICAgKCdyZWNpcGUnLCBtb2RlbHMuRm9yZWlnbktleShvbl9kZWxldGU9ZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbi5DQVNDQURFLCByZWxhdGVkX25hbWU9J3B1cmNoYXNlJywgdG89J3JlY2lwZXMucmVjaXBlJykpLAogICAgICAgICAgICAgICAgKCd1c2VyJywgbW9kZWxzLkZvcmVpZ25LZXkob25fZGVsZXRlPWRqYW5nby5kYi5tb2RlbHMuZGVsZXRpb24uQ0FTQ0FERSwgcmVsYXRlZF9uYW1lPSdjdXN0b21lcicsIHRvPXNldHRpbmdzLkFVVEhfVVNFUl9NT0RFTCkpLAo8fGZpbV9lbmR8Pg=="]
["c190b933a912234953fd3fb66f5dedb176c83405-4","c190b933a912234953fd3fb66f5dedb176c83405","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMi45IG9uIDIwMjEtMTItMDEgMTE6MjQKCmltcG9ydCBkamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICBtaWdyYXRpb25zLnN3YXBwYWJsZV9kZXBlbmRlbmN5KHNldHRpbmdzLkFVVEhfVVNFUl9NT0RFTCksCiAgICAgICAgKCdyZWNpcGVzJywgJzAwMDNfZm9sbG93JyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFsdGVyTW9kZWxPcHRpb25zKAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIG5hbWU9J3RhZycsCiAgICAgICAgICAgIG9wdGlvbnM9eyd2ZXJib3NlX25hbWUnOiAn0KLQtdCzJywgJ3ZlcmJvc2VfbmFtZV9wbHVyYWwnOiAn0KLQtdCz0LgnfSwKPHxmaW1fZW5kfD4="]
["c190b933a912234953fd3fb66f5dedb176c83405-5","c190b933a912234953fd3fb66f5dedb176c83405","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMi45IG9uIDIwMjEtMTItMDEgMTE6MjQKCmltcG9ydCBkamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICBtaWdyYXRpb25zLnN3YXBwYWJsZV9kZXBlbmRlbmN5KHNldHRpbmdzLkFVVEhfVVNFUl9NT0RFTCksCiAgICAgICAgKCdyZWNpcGVzJywgJzAwMDNfZm9sbG93JyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFsdGVyTW9kZWxPcHRpb25zKAogICAgICAgICAgICBuYW1lPSd0YWcnLAogICAgICAgICAgICBvcHRpb25zPXsndmVyYm9zZV9uYW1lJzogJ9Ci0LXQsycsICd2ZXJib3NlX25hbWVfcGx1cmFsJzogJ9Ci0LXQs9C4J30sCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkNyZWF0ZU1vZGVsKAogICAgICAgICAgICBuYW1lPSdTaG9wcGluZ0NhcnQnLAogICAgICAgICAgICBmaWVsZHM9WwogICAgICAgICAgICAgICAgKCdpZCcsIG1vZGVscy5CaWdBdXRvRmllbGQoYXV0b19jcmVhdGVkPVRydWUsIHByaW1hcnlfa2V5PVRydWUsIHNlcmlhbGl6ZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdJRCcpKSwKICAgICAgICAgICAgICAgICgncmVjaXBlJywgbW9kZWxzLkZvcmVpZ25LZXkob25fZGVsZXRlPWRqYW5nby5kYi5tb2RlbHMuZGVsZXRpb24uQ0FTQ0FERSwgcmVsYXRlZF9uYW1lPSdwdXJjaGFzZScsIHRvPSdyZWNpcGVzLnJlY2lwZScpKSwKICAgICAgICAgICAgICAgICgndXNlcicsIG1vZGVscy5Gb3JlaWduS2V5KG9uX2RlbGV0ZT1kamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uLkNBU0NBREUsIHJlbGF0ZWRfbmFtZT0nY3VzdG9tZXInLCB0bz1zZXR0aW5ncy5BVVRIX1VTRVJfTU9ERUwpKSwKICAgICAgICAgICAgXSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQ3JlYXRlTW9kZWwoCiAgICAgICAgICAgIG5hbWU9J0Zhdm9yaXRlJywKICAgICAgICAgICAgZmllbGRzPVsKICAgICAgICAgICAgICAgICgnaWQnLCBtb2RlbHMuQmlnQXV0b0ZpZWxkKGF1dG9fY3JlYXRlZD1UcnVlLCBwcmltYXJ5X2tleT1UcnVlLCBzZXJpYWxpemU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nSUQnKSksCiAgICAgICAgICAgICAgICAoJ3JlY2lwZScsIG1vZGVscy5Gb3JlaWduS2V5KG9uX2RlbGV0ZT1kamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uLkNBU0NBREUsIHJlbGF0ZWRfbmFtZT0nZmF2b3JpdGUnLCB0bz0ncmVjaXBlcy5yZWNpcGUnKSksCiAgICAgICAgICAgICAgICAoJ3VzZXInLCBtb2RlbHMuRm9yZWlnbktleShvbl9kZWxldGU9ZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbi5DQVNDQURFLCB0bz1zZXR0aW5ncy5BVVRIX1VTRVJfTU9ERUwpKSwKPHxmaW1faG9sZXw+CiAgICAgICAgKSwKICAgIF0KPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgXSwKPHxmaW1fZW5kfD4="]
["8aec61017a23682538d880a63097e59c9b0cec32-1","8aec61017a23682538d880a63097e59c9b0cec32","PHxmaW1fcHJlZml4fD4KZnJvbSBwcHJpbnQgaW1wb3J0IHBwcmludAoKaW1wb3J0IG51bXB5IGFzIG5wCgpNQVhfSEVJR0hUID0gNQpNQVhfV0lEVEggPSA1CkRFU0lSRURfU1VNID0gMTUKCkNBQ0hFRF9MQVlPVVQgPSBucC5hcnJheShbCiAgICBbNSwgMywgMiwgNCwgMV0sCiAgICBbMywgNCwgMSwgMiwgNV0sCiAgICBbMSwgMiwgMywgNSwgNF0sCiAgICBbMiwgNSwgNCwgMSwgM10sCiAgICBbNCwgMSwgNSwgMywgMl0KXSkKCgpkZWYgaW5pdF9sYXlvdXQoKSAtPiBucC5uZGFycmF5OgogICAgX2xheW91dCA9IG5wLmVtcHR5KChNQVhfSEVJR0hULCBNQVhfV0lEVEgpLCBkdHlwZT1pbnQpCiAgICBmb3IgaSBpbiByYW5nZShNQVhfSEVJR0hUKToKICAgICAgICBfbGF5b3V0W2ldID0gbnAuYXJhbmdlKDEsIE1BWF9IRUlHSFQgKyAxKQogICAgcmV0dXJuIF9sYXlvdXQKCgpkZWYgc2h1ZmZsZV9sYXlvdXQoX2xheW91dDogbnAubmRhcnJheSkgLT4gbnAubmRhcnJheToKICAgIGZvciBsaW5lIGluIF9sYXlvdXQ6CiAgICAgICAgbnAucmFuZG9tLnNodWZmbGUobGluZSkKICAgIHJldHVybiBfbGF5b3V0CgoKZGVmIGxheW91dF9pc192YWxpZChfbGF5b3V0OiBucC5uZGFycmF5KSAtPiBib29sOgogICAgaWYgbGVuKF9sYXlvdXQpICE9IE1BWF9IRUlHSFQ6CiAgICAgICAgcHJpbnQoZidMYXlvdXQgZ29uZSB3cm9uZzogaGVpZ2h0IGlzIG5vdCB7TUFYX0hFSUdIVH0nKQogICAgICAgIHJldHVybiBGYWxzZQoKICAgIGZvciBpLCBsaW5lIGluIGVudW1lcmF0ZShfbGF5b3V0KToKICAgICAgICBpZiBsZW4obGluZSkgIT0gTUFYX1dJRFRIOgogICAgICAgICAgICBwcmludChmJ0xheW91dCBnb25lIHdyb25nOiBsaW5lIHtpICsgMX0gd2lkdGggIT0ge01BWF9XSURUSH0nKQogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUoX2xheW91dCk6CiAgICAgICAgaWYgbGVuKGxpbmUpICE9IGxlbihzZXQobGluZSkpOgogICAgICAgICAgICBwcmludChmJ0xheW91dCBnb25lIHdyb25nOiBsaW5lIHtpICsgMX0gaGFzIGR1cGxpY2F0ZXMnKQogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBmb3IgaSBpbiByYW5nZShNQVhfSEVJR0hUKToKICAgICAgICBjb2x1bW4gPSBbbGluZVtpXSBmb3IgbGluZSBpbiBfbGF5b3V0XQogICAgICAgIGlmIGxlbihjb2x1bW4pICE9IGxlbihzZXQoY29sdW1uKSk6CiAgICAgICAgICAgIHByaW50KGYnTGF5b3V0IGdvbmUgd3Jvbmc6IGNvbHVtbiB7aSArIDF9IGhhcyBkdXBsaWNhdGVzJykKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZm9yIGksIGxpbmUgaW4gZW51bWVyYXRlKF9sYXlvdXQpOgogICAgICAgIGlmIHN1bShsaW5lKSAhPSBERVNJUkVEX1NVTToKICAgICAgICAgICAgcHJpbnQoZidMYXlvdXQgZ29uZSB3cm9uZzogbGluZSB7aSArIDF9IHN1bSB7c3VtKGxpbmUpfSAhPSB7REVTSVJFRF9TVU19JykKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZm9yIGkgaW4gcmFuZ2UoTUFYX0hFSUdIVCk6CiAgICAgICAgY29sdW1uID0gW2xpbmVbaV0gZm9yIGxpbmUgaW4gX2xheW91dF0KICAgICAgICBpZiBzdW0oY29sdW1uKSAhPSBERVNJUkVEX1NVTToKICAgICAgICAgICAgcHJpbnQoZidMYXlvdXQgZ29uZSB3cm9uZzogY29sdW1uIHtpICsgMX0gc3VtIHtzdW0oY29sdW1uKX0gIT0ge0RFU0lSRURfU1VNfScpCiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIG1haW5fZGlhZ29uYWwgPSBucC5kaWFnKF9sYXlvdXQpCiAgICBpZiBzdW0obWFpbl9kaWFnb25hbCkgIT0gREVTSVJFRF9TVU06CiAgICAgICAgcHJpbnQoZidMYXlvdXQgZ29uZSB3cm9uZzogbWFpbiBkaWFnb25hbCBzdW0ge3N1bShtYWluX2RpYWdvbmFsKX0gIT0ge0RFU0lSRURfU1VNfScpCiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgaWYgbGVuKG1haW5fZGlhZ29uYWwpICE9IGxlbihzZXQobWFpbl9kaWFnb25hbCkpOgogICAgICAgIHByaW50KGYnTGF5b3V0IGdvbmUgd3Jvbmc6IG1haW4gZGlhZ29uYWwgaGFzIGR1cGxpY2F0ZXMnKQogICAgICAgIHJldHVybiBGYWxzZQoKPHxmaW1faG9sZXw+CgogICAgaWYgbGVuKHNlY29uZGFyeV9kaWFnb25hbCkgIT0gbGVuKHNldChzZWNvbmRhcnlfZGlhZ29uYWwpKToKICAgICAgICBwcmludChmJ0xheW91dCBnb25lIHdyb25nOiBzZWNvbmRhcnkgZGlhZ29uYWwgaGFzIGR1cGxpY2F0ZXMnKQogICAgICAgIHJldHVybiBGYWxzZQoKICAgIHByaW50KCdMYXlvdXQgaXMgdmFsaWQuJykKICAgIHJldHVybiBUcnVlCgoKZGVmIGJydXRlX2ZvcmNlKCkgLT4gbnAubmRhcnJheToKICAgIGxheW91dCA9IGluaXRfbGF5b3V0KCkKICAgIGxheW91dCA9IHNodWZmbGVfbGF5b3V0KGxheW91dCkKICAgIGl0ZXJhdGlvbiA9IDEKICAgIHdoaWxlIG5vdCBsYXlvdXRfaXNfdmFsaWQobGF5b3V0KToKICAgICAgICBwcmludChmJ1RyeWluZyBhbm90aGVyIGxheW91dCwgaXRlcmF0aW9uICN7aXRlcmF0aW9ufSAuLicpCiAgICAgICAgaXRlcmF0aW9uICs9IDEKICAgICAgICBsYXlvdXQgPSBzaHVmZmxlX2xheW91dChsYXlvdXQpCiAgICByZXR1cm4gbGF5b3V0CgoKZGVmIHNvbHZlKCk6CiAgICBpZiBDQUNIRURfTEFZT1VUIGlzIG5vdCBOb25lOgogICAgICAgIHBwcmludChDQUNIRURfTEFZT1VUKQogICAgZWxzZToKICAgICAgICBwcHJpbnQoYnJ1dGVfZm9yY2UoKSkKCgpzb2x2ZSgpCjx8ZmltX3N1ZmZpeHw+CiAgICBzZWNvbmRhcnlfZGlhZ29uYWwgPSBucC5kaWFnKG5wLmZsaXBscihfbGF5b3V0KSkKICAgIGlmIHN1bShzZWNvbmRhcnlfZGlhZ29uYWwpICE9IERFU0lSRURfU1VNOgogICAgICAgIHByaW50KGYnTGF5b3V0IGdvbmUgd3Jvbmc6IHNlY29uZGFyeSBkaWFnb25hbCBzdW0ge3N1bShzZWNvbmRhcnlfZGlhZ29uYWwpfSAhPSB7REVTSVJFRF9TVU19JykKICAgICAgICByZXR1cm4gRmFsc2UKPHxmaW1fZW5kfD4="]
["8aec61017a23682538d880a63097e59c9b0cec32-2","8aec61017a23682538d880a63097e59c9b0cec32","PHxmaW1fcHJlZml4fD4KZnJvbSBwcHJpbnQgaW1wb3J0IHBwcmludAoKaW1wb3J0IG51bXB5IGFzIG5wCgpNQVhfSEVJR0hUID0gNQpNQVhfV0lEVEggPSA1CkRFU0lSRURfU1VNID0gMTUKCkNBQ0hFRF9MQVlPVVQgPSBucC5hcnJheShbCiAgICBbNSwgMywgMiwgNCwgMV0sCiAgICBbMywgNCwgMSwgMiwgNV0sCiAgICBbMSwgMiwgMywgNSwgNF0sCiAgICBbMiwgNSwgNCwgMSwgM10sCiAgICBbNCwgMSwgNSwgMywgMl0KXSkKCgpkZWYgaW5pdF9sYXlvdXQoKSAtPiBucC5uZGFycmF5OgogICAgX2xheW91dCA9IG5wLmVtcHR5KChNQVhfSEVJR0hULCBNQVhfV0lEVEgpLCBkdHlwZT1pbnQpCiAgICBmb3IgaSBpbiByYW5nZShNQVhfSEVJR0hUKToKICAgICAgICBfbGF5b3V0W2ldID0gbnAuYXJhbmdlKDEsIE1BWF9IRUlHSFQgKyAxKQogICAgcmV0dXJuIF9sYXlvdXQKCgpkZWYgc2h1ZmZsZV9sYXlvdXQoX2xheW91dDogbnAubmRhcnJheSkgLT4gbnAubmRhcnJheToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZm9yIGxpbmUgaW4gX2xheW91dDoKICAgICAgICBucC5yYW5kb20uc2h1ZmZsZShsaW5lKQogICAgcmV0dXJuIF9sYXlvdXQKCjx8ZmltX2VuZHw+"]
["8aec61017a23682538d880a63097e59c9b0cec32-3","8aec61017a23682538d880a63097e59c9b0cec32","PHxmaW1fcHJlZml4fD4KZnJvbSBwcHJpbnQgaW1wb3J0IHBwcmludAoKaW1wb3J0IG51bXB5IGFzIG5wCgpNQVhfSEVJR0hUID0gNQpNQVhfV0lEVEggPSA1CkRFU0lSRURfU1VNID0gMTUKCkNBQ0hFRF9MQVlPVVQgPSBucC5hcnJheShbCiAgICBbNSwgMywgMiwgNCwgMV0sCiAgICBbMywgNCwgMSwgMiwgNV0sCiAgICBbMSwgMiwgMywgNSwgNF0sCiAgICBbMiwgNSwgNCwgMSwgM10sCiAgICBbNCwgMSwgNSwgMywgMl0KXSkKCgpkZWYgaW5pdF9sYXlvdXQoKSAtPiBucC5uZGFycmF5OgogICAgX2xheW91dCA9IG5wLmVtcHR5KChNQVhfSEVJR0hULCBNQVhfV0lEVEgpLCBkdHlwZT1pbnQpCiAgICBmb3IgaSBpbiByYW5nZShNQVhfSEVJR0hUKToKICAgICAgICBfbGF5b3V0W2ldID0gbnAuYXJhbmdlKDEsIE1BWF9IRUlHSFQgKyAxKQogICAgcmV0dXJuIF9sYXlvdXQKCgpkZWYgc2h1ZmZsZV9sYXlvdXQoX2xheW91dDogbnAubmRhcnJheSkgLT4gbnAubmRhcnJheToKICAgIGZvciBsaW5lIGluIF9sYXlvdXQ6CiAgICAgICAgbnAucmFuZG9tLnNodWZmbGUobGluZSkKICAgIHJldHVybiBfbGF5b3V0CgoKZGVmIGxheW91dF9pc192YWxpZChfbGF5b3V0OiBucC5uZGFycmF5KSAtPiBib29sOgogICAgaWYgbGVuKF9sYXlvdXQpICE9IE1BWF9IRUlHSFQ6CiAgICAgICAgcHJpbnQoZidMYXlvdXQgZ29uZSB3cm9uZzogaGVpZ2h0IGlzIG5vdCB7TUFYX0hFSUdIVH0nKQogICAgICAgIHJldHVybiBGYWxzZQoKICAgIGZvciBpLCBsaW5lIGluIGVudW1lcmF0ZShfbGF5b3V0KToKICAgICAgICBpZiBsZW4obGluZSkgIT0gTUFYX1dJRFRIOgogICAgICAgICAgICBwcmludChmJ0xheW91dCBnb25lIHdyb25nOiBsaW5lIHtpICsgMX0gd2lkdGggIT0ge01BWF9XSURUSH0nKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKPHxmaW1fZW5kfD4="]
["8aec61017a23682538d880a63097e59c9b0cec32-4","8aec61017a23682538d880a63097e59c9b0cec32","PHxmaW1fcHJlZml4fD4KZnJvbSBwcHJpbnQgaW1wb3J0IHBwcmludAoKaW1wb3J0IG51bXB5IGFzIG5wCgpNQVhfSEVJR0hUID0gNQpNQVhfV0lEVEggPSA1CkRFU0lSRURfU1VNID0gMTUKCkNBQ0hFRF9MQVlPVVQgPSBucC5hcnJheShbCiAgICBbNSwgMywgMiwgNCwgMV0sCiAgICBbMywgNCwgMSwgMiwgNV0sCiAgICBbMSwgMiwgMywgNSwgNF0sCiAgICBbMiwgNSwgNCwgMSwgM10sCiAgICBbNCwgMSwgNSwgMywgMl0KXSkKCgpkZWYgaW5pdF9sYXlvdXQoKSAtPiBucC5uZGFycmF5OgogICAgX2xheW91dCA9IG5wLmVtcHR5KChNQVhfSEVJR0hULCBNQVhfV0lEVEgpLCBkdHlwZT1pbnQpCiAgICBmb3IgaSBpbiByYW5nZShNQVhfSEVJR0hUKToKICAgICAgICBfbGF5b3V0W2ldID0gbnAuYXJhbmdlKDEsIE1BWF9IRUlHSFQgKyAxKQogICAgcmV0dXJuIF9sYXlvdXQKCgpkZWYgc2h1ZmZsZV9sYXlvdXQoX2xheW91dDogbnAubmRhcnJheSkgLT4gbnAubmRhcnJheToKICAgIGZvciBsaW5lIGluIF9sYXlvdXQ6CiAgICAgICAgbnAucmFuZG9tLnNodWZmbGUobGluZSkKICAgIHJldHVybiBfbGF5b3V0CgoKZGVmIGxheW91dF9pc192YWxpZChfbGF5b3V0OiBucC5uZGFycmF5KSAtPiBib29sOgogICAgaWYgbGVuKF9sYXlvdXQpICE9IE1BWF9IRUlHSFQ6CiAgICAgICAgcHJpbnQoZidMYXlvdXQgZ29uZSB3cm9uZzogaGVpZ2h0IGlzIG5vdCB7TUFYX0hFSUdIVH0nKQogICAgICAgIHJldHVybiBGYWxzZQoKICAgIGZvciBpLCBsaW5lIGluIGVudW1lcmF0ZShfbGF5b3V0KToKICAgICAgICBpZiBsZW4obGluZSkgIT0gTUFYX1dJRFRIOgogICAgICAgICAgICBwcmludChmJ0xheW91dCBnb25lIHdyb25nOiBsaW5lIHtpICsgMX0gd2lkdGggIT0ge01BWF9XSURUSH0nKQogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUoX2xheW91dCk6CiAgICAgICAgaWYgbGVuKGxpbmUpICE9IGxlbihzZXQobGluZSkpOgogICAgICAgICAgICBwcmludChmJ0xheW91dCBnb25lIHdyb25nOiBsaW5lIHtpICsgMX0gaGFzIGR1cGxpY2F0ZXMnKQogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBmb3IgaSBpbiByYW5nZShNQVhfSEVJR0hUKToKICAgICAgICBjb2x1bW4gPSBbbGluZVtpXSBmb3IgbGluZSBpbiBfbGF5b3V0XQogICAgICAgIGlmIGxlbihjb2x1bW4pICE9IGxlbihzZXQoY29sdW1uKSk6CiAgICAgICAgICAgIHByaW50KGYnTGF5b3V0IGdvbmUgd3Jvbmc6IGNvbHVtbiB7aSArIDF9IGhhcyBkdXBsaWNhdGVzJykKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZm9yIGksIGxpbmUgaW4gZW51bWVyYXRlKF9sYXlvdXQpOgogICAgICAgIGlmIHN1bShsaW5lKSAhPSBERVNJUkVEX1NVTToKICAgICAgICAgICAgcHJpbnQoZidMYXlvdXQgZ29uZSB3cm9uZzogbGluZSB7aSArIDF9IHN1bSB7c3VtKGxpbmUpfSAhPSB7REVTSVJFRF9TVU19JykKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZm9yIGkgaW4gcmFuZ2UoTUFYX0hFSUdIVCk6CiAgICAgICAgY29sdW1uID0gW2xpbmVbaV0gZm9yIGxpbmUgaW4gX2xheW91dF0KICAgICAgICBpZiBzdW0oY29sdW1uKSAhPSBERVNJUkVEX1NVTToKICAgICAgICAgICAgcHJpbnQoZidMYXlvdXQgZ29uZSB3cm9uZzogY29sdW1uIHtpICsgMX0gc3VtIHtzdW0oY29sdW1uKX0gIT0ge0RFU0lSRURfU1VNfScpCiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIG1haW5fZGlhZ29uYWwgPSBucC5kaWFnKF9sYXlvdXQpCiAgICBpZiBzdW0obWFpbl9kaWFnb25hbCkgIT0gREVTSVJFRF9TVU06CiAgICAgICAgcHJpbnQoZidMYXlvdXQgZ29uZSB3cm9uZzogbWFpbiBkaWFnb25hbCBzdW0ge3N1bShtYWluX2RpYWdvbmFsKX0gIT0ge0RFU0lSRURfU1VNfScpCiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgaWYgbGVuKG1haW5fZGlhZ29uYWwpICE9IGxlbihzZXQobWFpbl9kaWFnb25hbCkpOgogICAgICAgIHByaW50KGYnTGF5b3V0IGdvbmUgd3Jvbmc6IG1haW4gZGlhZ29uYWwgaGFzIGR1cGxpY2F0ZXMnKQogICAgICAgIHJldHVybiBGYWxzZQoKICAgIHNlY29uZGFyeV9kaWFnb25hbCA9IG5wLmRpYWcobnAuZmxpcGxyKF9sYXlvdXQpKQogICAgaWYgc3VtKHNlY29uZGFyeV9kaWFnb25hbCkgIT0gREVTSVJFRF9TVU06CiAgICAgICAgcHJpbnQoZidMYXlvdXQgZ29uZSB3cm9uZzogc2Vjb25kYXJ5IGRpYWdvbmFsIHN1bSB7c3VtKHNlY29uZGFyeV9kaWFnb25hbCl9ICE9IHtERVNJUkVEX1NVTX0nKQogICAgICAgIHJldHVybiBGYWxzZQoKICAgIGlmIGxlbihzZWNvbmRhcnlfZGlhZ29uYWwpICE9IGxlbihzZXQoc2Vjb25kYXJ5X2RpYWdvbmFsKSk6CiAgICAgICAgcHJpbnQoZidMYXlvdXQgZ29uZSB3cm9uZzogc2Vjb25kYXJ5IGRpYWdvbmFsIGhhcyBkdXBsaWNhdGVzJykKICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBwcmludCgnTGF5b3V0IGlzIHZhbGlkLicpCiAgICByZXR1cm4gVHJ1ZQoKCmRlZiBicnV0ZV9mb3JjZSgpIC0+IG5wLm5kYXJyYXk6CiAgICBsYXlvdXQgPSBpbml0X2xheW91dCgpCiAgICBsYXlvdXQgPSBzaHVmZmxlX2xheW91dChsYXlvdXQpCiAgICBpdGVyYXRpb24gPSAxCiAgICB3aGlsZSBub3QgbGF5b3V0X2lzX3ZhbGlkKGxheW91dCk6CiAgICAgICAgcHJpbnQoZidUcnlpbmcgYW5vdGhlciBsYXlvdXQsIGl0ZXJhdGlvbiAje2l0ZXJhdGlvbn0gLi4nKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgaXRlcmF0aW9uICs9IDEKICAgICAgICBsYXlvdXQgPSBzaHVmZmxlX2xheW91dChsYXlvdXQpCjx8ZmltX2VuZHw+"]
["8aec61017a23682538d880a63097e59c9b0cec32-5","8aec61017a23682538d880a63097e59c9b0cec32","PHxmaW1fcHJlZml4fD4KZnJvbSBwcHJpbnQgaW1wb3J0IHBwcmludAoKaW1wb3J0IG51bXB5IGFzIG5wCgpNQVhfSEVJR0hUID0gNQpNQVhfV0lEVEggPSA1CkRFU0lSRURfU1VNID0gMTUKCkNBQ0hFRF9MQVlPVVQgPSBucC5hcnJheShbCiAgICBbNSwgMywgMiwgNCwgMV0sCiAgICBbMywgNCwgMSwgMiwgNV0sCiAgICBbMSwgMiwgMywgNSwgNF0sCiAgICBbMiwgNSwgNCwgMSwgM10sCiAgICBbNCwgMSwgNSwgMywgMl0KXSkKCgpkZWYgaW5pdF9sYXlvdXQoKSAtPiBucC5uZGFycmF5OgogICAgX2xheW91dCA9IG5wLmVtcHR5KChNQVhfSEVJR0hULCBNQVhfV0lEVEgpLCBkdHlwZT1pbnQpCiAgICBmb3IgaSBpbiByYW5nZShNQVhfSEVJR0hUKToKPHxmaW1faG9sZXw+CiAgICByZXR1cm4gX2xheW91dAoKCmRlZiBzaHVmZmxlX2xheW91dChfbGF5b3V0OiBucC5uZGFycmF5KSAtPiBucC5uZGFycmF5OgogICAgZm9yIGxpbmUgaW4gX2xheW91dDoKICAgICAgICBucC5yYW5kb20uc2h1ZmZsZShsaW5lKQogICAgcmV0dXJuIF9sYXlvdXQKCgpkZWYgbGF5b3V0X2lzX3ZhbGlkKF9sYXlvdXQ6IG5wLm5kYXJyYXkpIC0+IGJvb2w6CiAgICBpZiBsZW4oX2xheW91dCkgIT0gTUFYX0hFSUdIVDoKICAgICAgICBwcmludChmJ0xheW91dCBnb25lIHdyb25nOiBoZWlnaHQgaXMgbm90IHtNQVhfSEVJR0hUfScpCiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZm9yIGksIGxpbmUgaW4gZW51bWVyYXRlKF9sYXlvdXQpOgogICAgICAgIGlmIGxlbihsaW5lKSAhPSBNQVhfV0lEVEg6CiAgICAgICAgICAgIHByaW50KGYnTGF5b3V0IGdvbmUgd3Jvbmc6IGxpbmUge2kgKyAxfSB3aWR0aCAhPSB7TUFYX1dJRFRIfScpCiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIGZvciBpLCBsaW5lIGluIGVudW1lcmF0ZShfbGF5b3V0KToKICAgICAgICBpZiBsZW4obGluZSkgIT0gbGVuKHNldChsaW5lKSk6CiAgICAgICAgICAgIHByaW50KGYnTGF5b3V0IGdvbmUgd3Jvbmc6IGxpbmUge2kgKyAxfSBoYXMgZHVwbGljYXRlcycpCiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIGZvciBpIGluIHJhbmdlKE1BWF9IRUlHSFQpOgogICAgICAgIGNvbHVtbiA9IFtsaW5lW2ldIGZvciBsaW5lIGluIF9sYXlvdXRdCiAgICAgICAgaWYgbGVuKGNvbHVtbikgIT0gbGVuKHNldChjb2x1bW4pKToKICAgICAgICAgICAgcHJpbnQoZidMYXlvdXQgZ29uZSB3cm9uZzogY29sdW1uIHtpICsgMX0gaGFzIGR1cGxpY2F0ZXMnKQogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUoX2xheW91dCk6CiAgICAgICAgaWYgc3VtKGxpbmUpICE9IERFU0lSRURfU1VNOgogICAgICAgICAgICBwcmludChmJ0xheW91dCBnb25lIHdyb25nOiBsaW5lIHtpICsgMX0gc3VtIHtzdW0obGluZSl9ICE9IHtERVNJUkVEX1NVTX0nKQogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBmb3IgaSBpbiByYW5nZShNQVhfSEVJR0hUKToKICAgICAgICBjb2x1bW4gPSBbbGluZVtpXSBmb3IgbGluZSBpbiBfbGF5b3V0XQogICAgICAgIGlmIHN1bShjb2x1bW4pICE9IERFU0lSRURfU1VNOgogICAgICAgICAgICBwcmludChmJ0xheW91dCBnb25lIHdyb25nOiBjb2x1bW4ge2kgKyAxfSBzdW0ge3N1bShjb2x1bW4pfSAhPSB7REVTSVJFRF9TVU19JykKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgbWFpbl9kaWFnb25hbCA9IG5wLmRpYWcoX2xheW91dCkKICAgIGlmIHN1bShtYWluX2RpYWdvbmFsKSAhPSBERVNJUkVEX1NVTToKICAgICAgICBwcmludChmJ0xheW91dCBnb25lIHdyb25nOiBtYWluIGRpYWdvbmFsIHN1bSB7c3VtKG1haW5fZGlhZ29uYWwpfSAhPSB7REVTSVJFRF9TVU19JykKICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBpZiBsZW4obWFpbl9kaWFnb25hbCkgIT0gbGVuKHNldChtYWluX2RpYWdvbmFsKSk6CiAgICAgICAgcHJpbnQoZidMYXlvdXQgZ29uZSB3cm9uZzogbWFpbiBkaWFnb25hbCBoYXMgZHVwbGljYXRlcycpCiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgc2Vjb25kYXJ5X2RpYWdvbmFsID0gbnAuZGlhZyhucC5mbGlwbHIoX2xheW91dCkpCiAgICBpZiBzdW0oc2Vjb25kYXJ5X2RpYWdvbmFsKSAhPSBERVNJUkVEX1NVTToKICAgICAgICBwcmludChmJ0xheW91dCBnb25lIHdyb25nOiBzZWNvbmRhcnkgZGlhZ29uYWwgc3VtIHtzdW0oc2Vjb25kYXJ5X2RpYWdvbmFsKX0gIT0ge0RFU0lSRURfU1VNfScpCiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgaWYgbGVuKHNlY29uZGFyeV9kaWFnb25hbCkgIT0gbGVuKHNldChzZWNvbmRhcnlfZGlhZ29uYWwpKToKICAgICAgICBwcmludChmJ0xheW91dCBnb25lIHdyb25nOiBzZWNvbmRhcnkgZGlhZ29uYWwgaGFzIGR1cGxpY2F0ZXMnKQogICAgICAgIHJldHVybiBGYWxzZQoKICAgIHByaW50KCdMYXlvdXQgaXMgdmFsaWQuJykKICAgIHJldHVybiBUcnVlCgoKZGVmIGJydXRlX2ZvcmNlKCkgLT4gbnAubmRhcnJheToKICAgIGxheW91dCA9IGluaXRfbGF5b3V0KCkKICAgIGxheW91dCA9IHNodWZmbGVfbGF5b3V0KGxheW91dCkKICAgIGl0ZXJhdGlvbiA9IDEKICAgIHdoaWxlIG5vdCBsYXlvdXRfaXNfdmFsaWQobGF5b3V0KToKICAgICAgICBwcmludChmJ1RyeWluZyBhbm90aGVyIGxheW91dCwgaXRlcmF0aW9uICN7aXRlcmF0aW9ufSAuLicpCiAgICAgICAgaXRlcmF0aW9uICs9IDEKICAgICAgICBsYXlvdXQgPSBzaHVmZmxlX2xheW91dChsYXlvdXQpCiAgICByZXR1cm4gbGF5b3V0CgoKZGVmIHNvbHZlKCk6CiAgICBpZiBDQUNIRURfTEFZT1VUIGlzIG5vdCBOb25lOgogICAgICAgIHBwcmludChDQUNIRURfTEFZT1VUKQogICAgZWxzZToKICAgICAgICBwcHJpbnQoYnJ1dGVfZm9yY2UoKSkKCgpzb2x2ZSgpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgX2xheW91dFtpXSA9IG5wLmFyYW5nZSgxLCBNQVhfSEVJR0hUICsgMSkKPHxmaW1fZW5kfD4="]
["da6f710e488b0728db33dd17fa3e7155b22d190f-1","da6f710e488b0728db33dd17fa3e7155b22d190f","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCjx8ZmltX2hvbGV8PgppbXBvcnQgdGVtcGZpbGUKZnJvbSBsb3cgaW1wb3J0ICoJCQkjIGN1c3RvbSBmdW5jdGlvbnMsIHdyaXR0ZW4gYnkgbXlzZWxmCgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CQpkZWYgc2hvd19oZWxwKCApOgogICIiIiBkaXNwbGF5cyB0aGUgcHJvZ3JhbSBwYXJhbWV0ZXIgbGlzdCBhbmQgdXNhZ2UgaW5mb3JtYXRpb24gIiIiCiAgc3Rkb3V0KCAidXNhZ2U6ICIgKyBzeXMuYXJndlswXSArICIgLWYgPHBhdGg+IiApCiAgc3Rkb3V0KCAiICIgKQogIHN0ZG91dCggIiBvcHRpb24gICAgZGVzY3JpcHRpb24iICkKICBzdGRvdXQoICIgLWggICAgICAgIGhlbHAgKHRoaXMgdGV4dCBoZXJlKSIgKQogIHN0ZG91dCggIiAtZiAgICAgICAgbnQgYWxpZ25tZW50IGZpbGUiICkKICBzdGRvdXQoICIgLXQgICAgICAgIHRyZWUgZmlsZSAobmV3aWNrIGZvcm1hdCkiICkKICBzdGRvdXQoICIgLW0gICAgICAgIG1vZGVscyB0byBydW4gKGNvbW1hIHNlcGFyYXRlcykiICkKICBzdGRvdXQoICIgLXAgICAgICAgIHBhdGggdG8gUEFNTCBjb2RlbWwiICkKICBzdGRvdXQoICIgIiApCgogIHN5cy5leGl0KDEpCgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRlZiBoYW5kbGVfYXJndW1lbnRzKCk6CiAgIiIiIHZlcmlmaWVzIHRoZSBwcmVzZW5jZSBvZiBhbGwgbmVjZXNzYXJ5IGFyZ3VtZW50cyBhbmQgcmV0dXJucyB0aGUgZGF0YSBkaXIgIiIiCiAgaWYgbGVuICggc3lzLmFyZ3YgKSA9PSAxOgogICAgc3RkZXJyKCAibm8gYXJndW1lbnRzIHByb3ZpZGVkLiIgKQogICAgc2hvd19oZWxwKCkJCgogIHRyeTogIyBjaGVjayBmb3IgdGhlIHJpZ2h0IGFyZ3VtZW50cwogICAga2V5cywgdmFsdWVzID0gZ2V0b3B0LmdldG9wdCggc3lzLmFyZ3ZbMTpdLCAiaGY6dDptOnA6IiApCiAgZXhjZXB0IGdldG9wdC5HZXRvcHRFcnJvcjoKICAgIHN0ZGVyciggImludmFsaWQgYXJndW1lbnRzIHByb3ZpZGVkLiIgKQogICAgc2hvd19oZWxwKCkKCiAgYXJncyA9IHt9CiAgZm9yIGtleSwgdmFsdWUgaW4ga2V5czoKICAgIGlmIGtleSA9PSAnLWYnOglhcmdzWydhbG4nXSA9IHZhbHVlCiAgICBpZiBrZXkgPT0gJy10JzoJYXJnc1sndHJlZSddID0gdmFsdWUKICAgIGlmIGtleSA9PSAnLXAnOglhcmdzWydjb2RlbWwnXSA9IHZhbHVlCiAgICBpZiBrZXkgPT0gJy1tJzoJYXJnc1snbW9kZWxzJ10gPSB2YWx1ZS5zcGxpdCgiLCIpCiAgICAgICAgCiAgaWYgbm90IGFyZ3MuaGFzX2tleSgnYWxuJyk6CiAgICBzdGRlcnIoICJhbG4gZmlsZSBtaXNzaW5nLiIgKQogICAgc2hvd19oZWxwKCkKICBpZiBub3QgZmlsZV9leGlzdHMoIGFyZ3MuZ2V0KCdhbG4nKSApOgogICAgc3RkZXJyKCAiYWxuIGZpbGUgZG9lcyBub3QgZXhpc3QuIiApCiAgICBzaG93X2hlbHAoKQogICAgCiAgaWYgbm90IGFyZ3MuaGFzX2tleSgndHJlZScpOgogICAgc3RkZXJyKCAidHJlZSBmaWxlIG1pc3NpbmcuIiApCiAgICBzaG93X2hlbHAoKQogIGlmIG5vdCBmaWxlX2V4aXN0cyggYXJncy5nZXQoJ3RyZWUnKSApOgogICAgc3RkZXJyKCAidHJlZSBmaWxlIGRvZXMgbm90IGV4aXN0LiIgKQogICAgc2hvd19oZWxwKCkKICBpZiBub3QgYXJncy5oYXNfa2V5KCdtb2RlbHMnKTogCiAgICBzdGRlcnIoICJubyBtb2RlbHMgdG8gcnVuLiIgKQogICAgc2hvd19oZWxwKCkKCiAgaWYgbm90IGZpbGVfZXhpc3RzKCBhcmdzLmdldCgnY29kZW1sJykgKToKICAgIHN0ZGVyciggImNvZGVtbCBiaW5hcnkgbm90IGZvdW5kLiIgKQogICAgc2hvd19oZWxwKCkKICBhcmdzWydwYW1sZm9sZGVyJ10gPSBvcy5wYXRoLnNwbGl0KGFyZ3MuZ2V0KCdjb2RlbWwnKSlbMF0gKyAnLycKICBpZiBub3QgZGlyX2V4aXN0cyggYXJncy5nZXQoJ3BhbWxmb2xkZXInKSApOgogICAgc3RkZXJyKCAicGFtbCBmb2xkZXIgZG9lcyBub3QgZXhpc3QiICkKICAgIHNob3dfaGVscCgpCgogIHJldHVybiBhcmdzCgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGVmIG1haW4oIGFyZ3MgKToKICAKICBtb2RlbHMgPSBhcmdzWydtb2RlbHMnXQogIGFsbiwgdHJlZSA9IGFyZ3NbJ2FsbiddLCBhcmdzWyd0cmVlJ10KICBjb2RlbWxiaW4gPSBhcmdzWydjb2RlbWwnXQogIGN0bGJhc2UgPSBhcmdzWydwYW1sZm9sZGVyJ10gKyAnY29kZW1sLmN0bC4nCiAgZm9yIG1vZGVsIGluIG1vZGVsczoKICAgIGlmIHRyZWUuY291bnQoIi4iKToKICAgICAgZXh0ID0gb3MucGF0aC5zcGxpdGV4dCh0cmVlKVsxXQogICAgICBvdXRmaWxlID0gYWxuKyIuY29kZW1sIitleHQrIi4iK21vZGVsCiAgICBlbHNlOgogICAgICBvdXRmaWxlID0gYWxuKyIuY29kZW1sLiIrbW9kZWwKICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHN1ZmZpeD1tb2RlbCwgcHJlZml4PSd0bXAuY29kZW1sLicsIGRpcj0nLicpCiAgICBvcy5zeXN0ZW0oImNwICVzICVzIiAlKGFsbiwgdGVtcGRpciArICcvaW4tYWxuJykpCiAgICBvcy5zeXN0ZW0oImNwICVzICVzIiAlKHRyZWUsIHRlbXBkaXIgKyAnL2luLXRyZWUnKSkKICAgIG9zLnN5c3RlbSgiY3AgJXMgJXMiICUoY3RsYmFzZSArIG1vZGVsLCB0ZW1wZGlyICsgJy9jb2RlbWwuY3RsJykpCiAgICBvcy5jaGRpcih0ZW1wZGlyKQogICAgb3Muc3lzdGVtKGNvZGVtbGJpbikKICAgIG9zLmNoZGlyKCIuLiIpCiAgICBvcy5zeXN0ZW0oIm12ICVzL291dC1jb2RlbWwgJXMiICUodGVtcGRpciwgb3V0ZmlsZSkpCiAgICBvcy5zeXN0ZW0oInJtIC1yZiAlcyIgJSB0ZW1wZGlyKQoKCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyA9PT0gTUFJTiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgphcmdzID0gaGFuZGxlX2FyZ3VtZW50cyggICkKbWFpbiggYXJncyApCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBvcywgc3lzIAkJCQkjIGxvdyBsZXZlbCBoYW5kbGluZywgc3VjaCBhcyBjb21tYW5kIGxpbmUgc3R1ZmYKaW1wb3J0IHN0cmluZwkJCQkJIyBzdHJpbmcgbWV0aG9kcyBhdmFpbGFibGUKaW1wb3J0IHJlCQkJCQkJCSMgcmVndWxhciBleHByZXNzaW9ucwppbXBvcnQgZ2V0b3B0CQkJCQkjIGNvbWFuZCBsaW5lIGFyZ3VtZW50IGhhbmRsaW5nCjx8ZmltX2VuZHw+"]
["da6f710e488b0728db33dd17fa3e7155b22d190f-2","da6f710e488b0728db33dd17fa3e7155b22d190f","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCmltcG9ydCBvcywgc3lzIAkJCQkjIGxvdyBsZXZlbCBoYW5kbGluZywgc3VjaCBhcyBjb21tYW5kIGxpbmUgc3R1ZmYKaW1wb3J0IHN0cmluZwkJCQkJIyBzdHJpbmcgbWV0aG9kcyBhdmFpbGFibGUKaW1wb3J0IHJlCQkJCQkJCSMgcmVndWxhciBleHByZXNzaW9ucwppbXBvcnQgZ2V0b3B0CQkJCQkjIGNvbWFuZCBsaW5lIGFyZ3VtZW50IGhhbmRsaW5nCmltcG9ydCB0ZW1wZmlsZQpmcm9tIGxvdyBpbXBvcnQgKgkJCSMgY3VzdG9tIGZ1bmN0aW9ucywgd3JpdHRlbiBieSBteXNlbGYKCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0JCmRlZiBzaG93X2hlbHAoICk6CiAgIiIiIGRpc3BsYXlzIHRoZSBwcm9ncmFtIHBhcmFtZXRlciBsaXN0IGFuZCB1c2FnZSBpbmZvcm1hdGlvbiAiIiIKICBzdGRvdXQoICJ1c2FnZTogIiArIHN5cy5hcmd2WzBdICsgIiAtZiA8cGF0aD4iICkKICBzdGRvdXQoICIgIiApCiAgc3Rkb3V0KCAiIG9wdGlvbiAgICBkZXNjcmlwdGlvbiIgKQogIHN0ZG91dCggIiAtaCAgICAgICAgaGVscCAodGhpcyB0ZXh0IGhlcmUpIiApCiAgc3Rkb3V0KCAiIC1mICAgICAgICBudCBhbGlnbm1lbnQgZmlsZSIgKQogIHN0ZG91dCggIiAtdCAgICAgICAgdHJlZSBmaWxlIChuZXdpY2sgZm9ybWF0KSIgKQo8fGZpbV9ob2xlfD4KICBzeXMuZXhpdCgxKQoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkZWYgaGFuZGxlX2FyZ3VtZW50cygpOgogICIiIiB2ZXJpZmllcyB0aGUgcHJlc2VuY2Ugb2YgYWxsIG5lY2Vzc2FyeSBhcmd1bWVudHMgYW5kIHJldHVybnMgdGhlIGRhdGEgZGlyICIiIgogIGlmIGxlbiAoIHN5cy5hcmd2ICkgPT0gMToKICAgIHN0ZGVyciggIm5vIGFyZ3VtZW50cyBwcm92aWRlZC4iICkKICAgIHNob3dfaGVscCgpCQoKICB0cnk6ICMgY2hlY2sgZm9yIHRoZSByaWdodCBhcmd1bWVudHMKICAgIGtleXMsIHZhbHVlcyA9IGdldG9wdC5nZXRvcHQoIHN5cy5hcmd2WzE6XSwgImhmOnQ6bTpwOiIgKQogIGV4Y2VwdCBnZXRvcHQuR2V0b3B0RXJyb3I6CiAgICBzdGRlcnIoICJpbnZhbGlkIGFyZ3VtZW50cyBwcm92aWRlZC4iICkKICAgIHNob3dfaGVscCgpCgogIGFyZ3MgPSB7fQogIGZvciBrZXksIHZhbHVlIGluIGtleXM6CiAgICBpZiBrZXkgPT0gJy1mJzoJYXJnc1snYWxuJ10gPSB2YWx1ZQogICAgaWYga2V5ID09ICctdCc6CWFyZ3NbJ3RyZWUnXSA9IHZhbHVlCiAgICBpZiBrZXkgPT0gJy1wJzoJYXJnc1snY29kZW1sJ10gPSB2YWx1ZQogICAgaWYga2V5ID09ICctbSc6CWFyZ3NbJ21vZGVscyddID0gdmFsdWUuc3BsaXQoIiwiKQogICAgICAgIAogIGlmIG5vdCBhcmdzLmhhc19rZXkoJ2FsbicpOgogICAgc3RkZXJyKCAiYWxuIGZpbGUgbWlzc2luZy4iICkKICAgIHNob3dfaGVscCgpCiAgaWYgbm90IGZpbGVfZXhpc3RzKCBhcmdzLmdldCgnYWxuJykgKToKICAgIHN0ZGVyciggImFsbiBmaWxlIGRvZXMgbm90IGV4aXN0LiIgKQogICAgc2hvd19oZWxwKCkKICAgIAogIGlmIG5vdCBhcmdzLmhhc19rZXkoJ3RyZWUnKToKICAgIHN0ZGVyciggInRyZWUgZmlsZSBtaXNzaW5nLiIgKQogICAgc2hvd19oZWxwKCkKICBpZiBub3QgZmlsZV9leGlzdHMoIGFyZ3MuZ2V0KCd0cmVlJykgKToKICAgIHN0ZGVyciggInRyZWUgZmlsZSBkb2VzIG5vdCBleGlzdC4iICkKICAgIHNob3dfaGVscCgpCiAgaWYgbm90IGFyZ3MuaGFzX2tleSgnbW9kZWxzJyk6IAogICAgc3RkZXJyKCAibm8gbW9kZWxzIHRvIHJ1bi4iICkKICAgIHNob3dfaGVscCgpCgogIGlmIG5vdCBmaWxlX2V4aXN0cyggYXJncy5nZXQoJ2NvZGVtbCcpICk6CiAgICBzdGRlcnIoICJjb2RlbWwgYmluYXJ5IG5vdCBmb3VuZC4iICkKICAgIHNob3dfaGVscCgpCiAgYXJnc1sncGFtbGZvbGRlciddID0gb3MucGF0aC5zcGxpdChhcmdzLmdldCgnY29kZW1sJykpWzBdICsgJy8nCiAgaWYgbm90IGRpcl9leGlzdHMoIGFyZ3MuZ2V0KCdwYW1sZm9sZGVyJykgKToKICAgIHN0ZGVyciggInBhbWwgZm9sZGVyIGRvZXMgbm90IGV4aXN0IiApCiAgICBzaG93X2hlbHAoKQoKICByZXR1cm4gYXJncwoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRlZiBtYWluKCBhcmdzICk6CiAgCiAgbW9kZWxzID0gYXJnc1snbW9kZWxzJ10KICBhbG4sIHRyZWUgPSBhcmdzWydhbG4nXSwgYXJnc1sndHJlZSddCiAgY29kZW1sYmluID0gYXJnc1snY29kZW1sJ10KICBjdGxiYXNlID0gYXJnc1sncGFtbGZvbGRlciddICsgJ2NvZGVtbC5jdGwuJwogIGZvciBtb2RlbCBpbiBtb2RlbHM6CiAgICBpZiB0cmVlLmNvdW50KCIuIik6CiAgICAgIGV4dCA9IG9zLnBhdGguc3BsaXRleHQodHJlZSlbMV0KICAgICAgb3V0ZmlsZSA9IGFsbisiLmNvZGVtbCIrZXh0KyIuIittb2RlbAogICAgZWxzZToKICAgICAgb3V0ZmlsZSA9IGFsbisiLmNvZGVtbC4iK21vZGVsCiAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChzdWZmaXg9bW9kZWwsIHByZWZpeD0ndG1wLmNvZGVtbC4nLCBkaXI9Jy4nKQogICAgb3Muc3lzdGVtKCJjcCAlcyAlcyIgJShhbG4sIHRlbXBkaXIgKyAnL2luLWFsbicpKQogICAgb3Muc3lzdGVtKCJjcCAlcyAlcyIgJSh0cmVlLCB0ZW1wZGlyICsgJy9pbi10cmVlJykpCiAgICBvcy5zeXN0ZW0oImNwICVzICVzIiAlKGN0bGJhc2UgKyBtb2RlbCwgdGVtcGRpciArICcvY29kZW1sLmN0bCcpKQogICAgb3MuY2hkaXIodGVtcGRpcikKICAgIG9zLnN5c3RlbShjb2RlbWxiaW4pCiAgICBvcy5jaGRpcigiLi4iKQogICAgb3Muc3lzdGVtKCJtdiAlcy9vdXQtY29kZW1sICVzIiAlKHRlbXBkaXIsIG91dGZpbGUpKQogICAgb3Muc3lzdGVtKCJybSAtcmYgJXMiICUgdGVtcGRpcikKCgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgPT09IE1BSU4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKYXJncyA9IGhhbmRsZV9hcmd1bWVudHMoICApCm1haW4oIGFyZ3MgKQo8fGZpbV9zdWZmaXh8PgogIHN0ZG91dCggIiAtbSAgICAgICAgbW9kZWxzIHRvIHJ1biAoY29tbWEgc2VwYXJhdGVzKSIgKQogIHN0ZG91dCggIiAtcCAgICAgICAgcGF0aCB0byBQQU1MIGNvZGVtbCIgKQogIHN0ZG91dCggIiAiICkKCjx8ZmltX2VuZHw+"]
["e72897e9806f75ff0c7eba68fb31dc0fd2390016-1","e72897e9806f75ff0c7eba68fb31dc0fd2390016",{"$cut":{"chars":28468,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiIiIgpDb3ZpZCBIb21lIE1vbml0b3JpbmcgUHJvamVjdCBSRURjYXAgcHJvamVjdCBmaWxlIEF1ZGl0b3IKClNlZSBSRUFETUUudHh0IGluIGZvciBmdWxsIGRldGFpbHMKCgpJbnN0cnVjdGlvbnM6CjEuIE9wZW4gcmVjYXAgcHJvamVjdCAnQ292aWQgSG9tZSBNb25pdG9yaW5nJwoyLiBDbGljayAnUHJvamVjdCBIb21lJwozLiBDbGljayAnT3RoZXIgRnVuY3Rpb25hbGl0eScgdGFiCjQuIEZpbmQgdGhlICdDb3B5IG9yIEJhY2sgVXAgdGhlIFByb2plY3QnIHNlY3Rpb24KNS4gVGljayAnTGVhdmUgQVNJcyBlbmFibGVkICh1bmxlc3MgZGlzYWJsZWQpJyBib3gKNi4gQ2xpY2sgJ0Rvd25sb2FkIG1ldGFkYXRhIG9ubHkgKFhNTCknIGJ1dHRvbgo3LiBQbGFjZSBkb3dubG9hZGVkIHhtbCBmaWxlIGluIHRoaXMgZGlyZWN0b3J5CjguIC4vYXVkaXRfcHJvamVjdC5weSBkb3dubG9hZGVmaWxlLnhtbAo5LiBsb29rIGF0IHRoZSBvdXRwdXQKICAgVE9ETwoKIiIiCgpmcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5CmZyb20gb3MgaW1wb3J0IGFjY2VzcywgUl9PSwpmcm9tIG9zLnBhdGggaW1wb3J0IGlzZmlsZQppbXBvcnQgc3lzCgppbXBvcnQgcHl0ZXN0CmZyb20gbHhtbCBpbXBvcnQgZXRyZWUKCkVYUEVDVEVEX09CU0VSVkFUSU9OUyA9IFsKICAgICdvYl90ZW1wbGF0ZScsICdvYl8wJywKICAgICdvYl8xYScsICdvYl8xYicsICdvYl8yYScsICdvYl8yYicsICdvYl8zYScsICdvYl8zYicsICdvYl80YScsICdvYl80YicsCiAgICAnb2JfNWEnLCAnb2JfNWInLCAnb2JfNmEnLCAnb2JfNmInLCAnb2JfN2EnLCAnb2JfN2InLCAnb2JfOGEnLCAnb2JfOGInLAogICAgJ29iXzlhJywgJ29iXzliJywgJ29iXzEwYScsICdvYl8xMGInLCAnb2JfMTFhJywgJ29iXzExYicsICdvYl8xMmEnLCAnb2JfMTJiJywKICAgICdvYl8xM2EnLCAnb2JfMTNiJywgJ29iXzE0YScsICdvYl8xNGInXQoKRVhQRUNURURfT0JTRVJWQVRJT05fQVVUT01BVElDX0lOVklURVMgPSBbCiAgICAjICdvYl90ZW1wbGF0ZScsICdvYl8wJywgICAjIHRoZXNlIHR3byBhcmUgbm90IGF1dG9tYXRpY2FsbHkgc2VudAogICAgJ29iXzFhJywgJ29iXzFiJywgJ29iXzJhJywgJ29iXzJiJywgJ29iXzNhJywgJ29iXzNiJywgJ29iXzRhJywgJ29iXzRiJywKICAgICdvYl81YScsICdvYl81YicsICdvYl82YScsICdvYl82YicsICdvYl83YScsICdvYl83YicsICdvYl84YScsICdvYl84YicsCiAgICAnb2JfOWEnLCAnb2JfOWInLCAnb2JfMTBhJywgJ29iXzEwYicsICdvYl8xMWEnLCAnb2JfMTFiJywgJ29iXzEyYScsICdvYl8xMmInLAogICAgJ29iXzEzYScsICdvYl8xM2InLCAnb2JfMTRhJywgJ29iXzE0YiddCgoKIyBUaGlzIGlzIHRoZSBwaG9uZSBudW1iZXIgd2UgZXhwZWN0IHRvIHNlbmQgb3VyIG1lc3NhZ2VzICdmcm9tJwojIEl0IGlzIGF0dGFjaGVkIHRvIG91ciBUd2lsaW8gU01TIGFjY291bnQKQVVTVFJBTElBTl9UV0lMSU9fTlVNQkVSID0gJzYxNDgwMDI5MTc4JwoKIyBUaGlzIGlzIHRoZSByZWFsIG1vYmlsZSBwaG9uZSBzdGFmZiBjYXJyeSBhbmQgc2hvdWxkIHJlY2VpdmUgYWxlcnRzIG9uClNUQUZGX0FMRVJUX1BIT05FTlVNID0gJzYxNDgyNTI1OTI5JwoKCiMgVGhlc2UgYXJlIHRoZSBwcmV0ZW5kIGNvbnRhY3QgZGV0YWlscyB3ZSBvZnRlbiB1c2UgZm9yIHRlc3RpbmcKREVWRUxPUEVSX1BIT05FTlVNQkVSUyA9IFsnJywgJyddCkRFVkVMT1BFUl9FTUFJTFMgPSBbJycsIF0KCiMgV2UncmUgdXNpbmcgcHl0ZXN0IGZvciBtb3N0IG9mIHRoZSBoZWF2eSBsaWZ0aW5nLCBidXQgd2UgbmVlZCBhIHdheSB0bwojIHBhc3MgaW4gdGhlIHByb2plY3QgWE1MIGZpbGUgZnJvbSB0aGUgY21kbGluZS4gUHl0ZXN0IG1ha2VzIHRoYXQgZGlmZmljdWx0CiMgd2UgaGF2ZSB0byBkZWZpbmUgYSBjbWxkaW5lIGFyZyAnLS1wcm9qeG1sZmlsZScgaW4gdGhlIGNvbmZ0ZXN0LnB5IGZpbGUKIwojIFRoZW4gd2UgZG9uJ3Qgd2FudCB0byBwYXJzZSB0aGUgWE1MIGluIGV2ZXJ5IHNpbmdsZSB0ZXN0LiBTbyB3ZSBwYXJzZSBpdAojIG9uY2UgYW5kIGNhY2hlIGl0IGluIGEgbW9kdWxlIGdsb2JhbCB2YXJpYWJsZQpHTE9CQUxfUkVEQ0FQX1hNTF9ST09UID0gTm9uZQoKCkBweXRlc3QuZml4dHVyZQpkZWYgcHJvanhtbHBhdGgocmVxdWVzdCk6CiAgICAiIiJHZXQgdGhlIGZpbGVwYXRoIHRvIHRoZSBYTUwgZmlsZSB1bmRlciB0ZXN0IiIiCiAgICByZXR1cm4gcmVxdWVzdC5jb25maWcuZ2V0b3B0aW9uKCItLXByb2p4bWxmaWxlIikKCgpAcHl0ZXN0LmZpeHR1cmUKZGVmIHByb2oocmVxdWVzdCk6CiAgICAiIiJHZXQgYSBseG1sIHJvb3QgZWxlbWVudCBmb3IgdGhlIHJlZGNhcCBwcm9qZWN0IHhtbCBmaWxlCiAgICBDYWNoZSBpdCBpbiBHTE9CQUxfUkVEQ0FQX1hNTF9ST09UIHNvIHdlIGRvbid0IHBhcnNlIGl0IGV2ZXJ5IHRpbWUiIiIKICAgIGdsb2JhbCBHTE9CQUxfUkVEQ0FQX1hNTF9ST09UCgogICAgaWYgR0xPQkFMX1JFRENBUF9YTUxfUk9PVCBpcyBOb25lOgogICAgICAgIHRyeToKICAgICAgICAgICAgeG1sZmlsZXBhdGggPSByZXF1ZXN0LmNvbmZpZy5nZXRvcHRpb24oIi0tcHJvanhtbGZpbGUiKQogICAgICAgICAgICBHTE9CQUxfUkVEQ0FQX1hNTF9ST09UID0gZXRyZWUucGFyc2UoeG1sZmlsZXBhdGgpLmdldHJvb3QoKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgIHB5dGVzdC5leGl0KCJDb3VsZG4ndCBwYXJzZSBYTUwgZmlsZSAlcyIgJSBweXRlc3QuR0xPQkFMX1JFRENBUF9YTUxfRklMRVBBVEgpCgogICAgaWYgR0xPQkFMX1JFRENBUF9YTUxfUk9PVCBpcyBOb25lOgogICAgICAgIHB5dGVzdC5leGl0KCJFcnJvciBhY2Nlc3NpbmcgcHJvamVjdCB4bWwgcm9vdCIpCgogICAgcmV0dXJuIEdMT0JBTF9SRURDQVBfWE1MX1JPT1QKCgpkZWYgdGVzdF90d2lsaW9fc2VuZGluZ19mcm9tX2F1c3RyYWxpYW5fbW9iaWxlbnVtKHByb2opOgogICAgIiIiUHJvamVjdCBzaG91bGQgYmUgY29uZmlndXJlZCB0byBzZW5kIGZyb20gb3VyIHR3aWxvIGF1c3Ry"}}]
["4184ea817e574c1f271006c91f73a71d540950e1-1","4184ea817e574c1f271006c91f73a71d540950e1","PHxmaW1fcHJlZml4fD4KIyA6Y29kaW5nOiB1dGYtOAojIDpjb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAxMyBNYXJ0aW4gUGVuZ2VsbHktUGhpbGxpcHMKIyA6bGljZW5zZTogU2VlIExJQ0VOU0UudHh0LgoKaW1wb3J0IHJlCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0Cgpmcm9tIC5fdmVyc2lvbiBpbXBvcnQgX192ZXJzaW9uX18KZnJvbSAuY29sbGVjdGlvbiBpbXBvcnQgQ29sbGVjdGlvbgpmcm9tIC5lcnJvciBpbXBvcnQgQ29sbGVjdGlvbkVycm9yCgoKIzogUGF0dGVybiBmb3IgbWF0Y2hpbmcgYW4gaW5kZXggd2l0aCBvcHRpb25hbCBwYWRkaW5nLgpESUdJVFNfUEFUVEVSTiA9ICcoP1A8aW5kZXg+KD9QPHBhZGRpbmc+MCopXGQrKScKCiM6IENvbW1vbiBwYXR0ZXJucyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gOnB5OmZ1bmM6YH5jbGlxdWUuYXNzZW1ibGVgLgpQQVRURVJOUyA9IHsKICAgICdmcmFtZXMnOiAnXC57MH1cLlxEK1xkPyQnLmZvcm1hdChESUdJVFNfUEFUVEVSTiksCiAgICAndmVyc2lvbnMnOiAndnswfScuZm9ybWF0KERJR0lUU19QQVRURVJOKQp9CgppZiBub3QgaGFzYXR0cihfX2J1aWx0aW5zX18sICJiYXNlc3RyaW5nIik6CiAgICBiYXNlc3RyaW5nID0gKHN0ciwgYnl0ZXMpCgpkZWYgYXNzZW1ibGUoCiAgICBpdGVyYWJsZSwgcGF0dGVybnM9Tm9uZSwgbWluaW11bV9pdGVtcz0yLCBjYXNlX3NlbnNpdGl2ZT1UcnVlLAogICAgYXNzdW1lX3BhZGRlZF93aGVuX2FtYmlndW91cz1GYWxzZQopOgogICAgJycnQXNzZW1ibGUgaXRlbXMgaW4gKml0ZXJhYmxlKiBpbnRvIGRpc2NyZWV0IGNvbGxlY3Rpb25zLgoKICAgICpwYXR0ZXJucyogbWF5IGJlIHNwZWNpZmllZCBhcyBhIGxpc3Qgb2YgcmVndWxhciBleHByZXNzaW9ucyB0byBsaW1pdAogICAgdGhlIHJldHVybmVkIGNvbGxlY3Rpb24gcG9zc2liaWxpdGllcy4gVXNlIHRoaXMgd2hlbiBpbnRlcmVzdGVkIGluCiAgICBjb2xsZWN0aW9ucyB0aGF0IG9ubHkgbWF0Y2ggc3BlY2lmaWMgcGF0dGVybnMuIEVhY2ggcGF0dGVybiBtdXN0IGNvbnRhaW4KICAgIHRoZSBleHByZXNzaW9uIGZyb20gOnB5OmRhdGE6YERJR0lUU19QQVRURVJOYCBleGFjdGx5IG9uY2UuCgogICAgQSBzZWxlY3Rpb24gb2YgY29tbW9uIGV4cHJlc3Npb25zIGFyZSBhdmFpbGFibGUgaW4gOnB5OmRhdGE6YFBBVFRFUk5TYC4KCiAgICAuLiBub3RlOjoKCiAgICAgICAgSWYgYSBwYXR0ZXJuIGlzIHN1cHBsaWVkIGFzIGEgc3RyaW5nIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBjb21waWxlZAogICAgICAgIHRvIGEgOnB5OmNsYXNzOmByZS5SZWdleE9iamVjdGAgaW5zdGFuY2UgZm9yIGNvbnZlbmllbmNlLgoKICAgIFdoZW4gKnBhdHRlcm5zKiBpcyBub3Qgc3BlY2lmaWVkLCBjb2xsZWN0aW9ucyBhcmUgZm9ybWVkIGJ5IGV4YW1pbmluZyBhbGwKICAgIHBvc3NpYmxlIGdyb3VwaW5ncyBvZiB0aGUgaXRlbXMgaW4gKml0ZXJhYmxlKiBiYXNlZCBhcm91bmQgY29tbW9uIG51bWVyaWNhbAogICAgY29tcG9uZW50cy4KCiAgICAqbWluaW11bV9pdGVtcyogZGljdGF0ZXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGl0ZW1zIGEgY29sbGVjdGlvbiBtdXN0IGhhdmUKICAgIGluIG9yZGVyIHRvIGJlIGluY2x1ZGVkIGluIHRoZSByZXN1bHQuIFRoZSBkZWZhdWx0IGlzIDIsIGZpbHRlcmluZyBvdXQKICAgIHNpbmdsZSBpdGVtIGNvbGxlY3Rpb25zLgoKICAgIElmICpjYXNlX3NlbnNpdGl2ZSogaXMgRmFsc2UsIHRoZW4gaXRlbXMgd2lsbCBiZSB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlIHNhbWUKICAgIGNvbGxlY3Rpb24gd2hlbiB0aGV5IG9ubHkgZGlmZmVyIGluIGNhc2luZy4gVG8gYXZvaWQgYW1iaWd1aXR5LCB0aGUKICAgIHJlc3VsdGluZyBjb2xsZWN0aW9uIHdpbGwgYWx3YXlzIGJlIGxvd2VyY2FzZS4gRm9yIGV4YW1wbGUsICJpdGVtLjAwMDEuZHB4IgogICAgYW5kICJJdGVtLjAwMDIuZHB4IiB3b3VsZCBiZSBwYXJ0IG9mIHRoZSBzYW1lIGNvbGxlY3Rpb24sICJpdGVtLiUwNGQuZHB4Ii4KCiAgICAuLiBub3RlOjoKCiAgICAgICAgQW55IGNvbXBpbGVkICpwYXR0ZXJucyogd2lsbCBhbHNvIHJlc3BlY3QgdGhlIHNldCBjYXNlIHNlbnNpdGl2aXR5LgoKICAgIEZvciBjZXJ0YWluIGNvbGxlY3Rpb25zIGl0IG1heSBiZSBhbWJpZ3VvdXMgd2hldGhlciB0aGV5IGFyZSBwYWRkZWQgb3Igbm90LgogICAgRm9yIGV4YW1wbGUsIDEwMDAtMTAxMCBjYW4gYmUgY29uc2lkZXJlZCBlaXRoZXIgYW4gdW5wYWRkZWQgY29sbGVjdGlvbiBvciBhCiAgICBmb3VyIHBhZGRlZCBjb2xsZWN0aW9uLiBCeSBkZWZhdWx0LCBDbGlxdWUgaXMgY29uc2VydmF0aXZlIGFuZCBhc3N1bWVzIHRoYXQKICAgIHRoZSBjb2xsZWN0aW9uIGlzIHVucGFkZGVkLiBUbyBjaGFuZ2UgdGhpcyBiZWhhdmlvdXIsIHNldAogICAgKmFzc3VtZV9wYWRkZWRfd2hlbl9hbWJpZ3VvdXMqIHRvIFRydWUgYW5kIGFueSBhbWJpZ3VvdXMgY29sbGVjdGlvbiB3aWxsIGhhdmUKICAgIGEgcmVsZXZhbnQgcGFkZGluZyBzZXQuCgogICAgLi4gbm90ZTo6CgogICAgICAgICphc3N1bWVfcGFkZGVkX3doZW5fYW1iaWd1b3VzKiBoYXMgbm8gZWZmZWN0IG9uIGNvbGxlY3Rpb25zIHRoYXQgYXJlCiAgICAgICAgdW5hbWJpZ3VvdXMuIEZvciBleGFtcGxlLCAxLTEwMCB3aWxsIGFsd2F5cyBiZSBjb25zaWRlcmVkIHVucGFkZGVkCiAgICAgICAgcmVnYXJkbGVzcyBvZiB0aGUgKmFzc3VtZV9wYWRkZWRfd2hlbl9hbWJpZ3VvdXMqIHNldHRpbmcuCgogICAgUmV0dXJuIHR1cGxlIG9mIHR3byBsaXN0cyAoY29sbGVjdGlvbnMsIHJlbWFpbmRlcikgd2hlcmUgJ2NvbGxlY3Rpb25zJyBpcyBhCiAgICBsaXN0IG9mIGFzc2VtYmxlZCA6cHk6Y2xhc3M6YH5jbGlxdWUuY29sbGVjdGlvbi5Db2xsZWN0aW9uYCBpbnN0YW5jZXMgYW5kCiAgICAncmVtYWluZGVyJyBpcyBhIGxpc3Qgb2YgaXRlbXMgdGhhdCBkaWQgbm90IGJlbG9uZyB0byBhbnkgY29sbGVjdGlvbi4KCiAgICAnJycKICAgIGNvbGxlY3Rpb25fbWFwID0gZGVmYXVsdGRpY3Qoc2V0KQogICAgY29sbGVjdGlvbnMgPSBbXQogICAgcmVtYWluZGVyID0gW10KCiAgICAjIENvbXBpbGUgcGF0dGVybnMuCiAgICBmbGFncyA9IDAKICAgIGlmIG5vdCBjYXNlX3NlbnNpdGl2ZToKICAgICAgICBmbGFncyB8PSByZS5JR05PUkVDQVNFCgogICAgY29tcGlsZWRfcGF0dGVybnMgPSBbXQoKICAgIGlmIHBhdHRlcm5zIGlzIG5vdCBOb25lOgogICAgICAgIGlmIG5vdCBwYXR0ZXJuczoKICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25zLCBsaXN0KGl0ZXJhYmxlKQoKICAgICAgICBmb3IgcGF0dGVybiBpbiBwYXR0ZXJuczoKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXR0ZXJuLCBiYXNlc3RyaW5nKToKICAgICAgICAgICAgICAgIGNvbXBpbGVkX3BhdHRlcm5zLmFwcGVuZChyZS5jb21waWxlKHBhdHRlcm4sIGZsYWdzPWZsYWdzKSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGNvbXBpbGVkX3BhdHRlcm5zLmFwcGVuZChwYXR0ZXJuKQoKICAgIGVsc2U6CiAgICAgICAgY29tcGlsZWRfcGF0dGVybnMuYXBwZW5kKHJlLmNvbXBpbGUoRElHSVRTX1BBVFRFUk4sIGZsYWdzPWZsYWdzKSkKCiAgICAjIFByb2Nlc3MgaXRlcmFibGUuCiAgICBmb3IgaXRlbSBpbiBpdGVyYWJsZToKICAgICAgICBtYXRjaGVkID0gRmFsc2UKCiAgICAgICAgZm9yIHBhdHRlcm4gaW4gY29tcGlsZWRfcGF0dGVybnM6CiAgICAgICAgICAgIGZvciBtYXRjaCBpbiBwYXR0ZXJuLmZpbmRpdGVyKGl0ZW0pOgogICAgICAgICAgICAgICAgaW5kZXggPSBtYXRjaC5ncm91cCgnaW5kZXgnKQoKICAgICAgICAgICAgICAgIGhlYWQgPSBpdGVtWzptYXRjaC5zdGFydCgnaW5kZXgnKV0KICAgICAgICAgICAgICAgIHRhaWwgPSBpdGVtW21hdGNoLmVuZCgnaW5kZXgnKTpdCgogICAgICAgICAgICAgICAgaWYgbm90IGNhc2Vfc2Vuc2l0aXZlOgogICAgICAgICAgICAgICAgICAgIGhlYWQgPSBoZWFkLmxvd2VyKCkKICAgICAgICAgICAgICAgICAgICB0YWlsID0gdGFpbC5sb3dlcigpCgogICAgICAgICAgICAgICAgcGFkZGluZyA9IG1hdGNoLmdyb3VwKCdwYWRkaW5nJykKICAgICAgICAgICAgICAgIGlmIHBhZGRpbmc6CiAgICAgICAgICAgICAgICAgICAgcGFkZGluZyA9IGxlbihpbmRleCkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgcGFkZGluZyA9IDAKCiAgICAgICAgICAgICAgICBrZXkgPSAoaGVhZCwgdGFpbCwgcGFkZGluZykKICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25fbWFwW2tleV0uYWRkKGludChpbmRleCkpCiAgICAgICAgICAgICAgICBtYXRjaGVkID0gVHJ1ZQoKICAgICAgICBpZiBub3QgbWF0Y2hlZDoKICAgICAgICAgICAgcmVtYWluZGVyLmFwcGVuZChpdGVtKQoKICAgICMgRm9ybSBjb2xsZWN0aW9ucy4KICAgIG1lcmdlX2NhbmRpZGF0ZXMgPSBbXQogICAgZm9yIChoZWFkLCB0YWlsLCBwYWRkaW5nKSwgaW5kZXhlcyBpbiBjb2xsZWN0aW9uX21hcC5pdGVtcygpOgogICAgICAgIGNvbGxlY3Rpb24gPSBDb2xsZWN0aW9uKGhlYWQsIHRhaWwsIHBhZGRpbmcsIGluZGV4ZXMpCiAgICAgICAgY29sbGVjdGlvbnMuYXBwZW5kKGNvbGxlY3Rpb24pCgogICAgICAgIGlmIGNvbGxlY3Rpb24ucGFkZGluZyA9PSAwOgogICAgICAgICAgICBtZXJnZV9jYW5kaWRhdGVzLmFwcGVuZChjb2xsZWN0aW9uKQoKICAgICMgTWVyZ2UgdG9nZXRoZXIgY29sbGVjdGlvbnMgdGhhdCBhbGlnbiBvbiBwYWRkaW5nIGJvdW5kYXJpZXMuIEZvciBleGFtcGxlLAogICAgIyAwOTk4LTA5OTkgYW5kIDEwMDAtMTAwMSBjYW4gYmUgbWVyZ2VkIGludG8gMDk5OC0xMDAxLiBOb3RlIHRoYXQgb25seQogICAgIyBpbmRleGVzIHdpdGhpbiB0aGUgcGFkZGluZyB3aWR0aCBsaW1pdCBhcmUgbWVyZ2VkLiBJZiBhIGNvbGxlY3Rpb24gaXMKICAgICMgZW50aXJlbHkgbWVyZ2VkIGludG8gYW5vdGhlciB0aGVuIGl0IHdpbGwgbm90IGJlIGluY2x1ZGVkIGFzIGEgc2VwYXJhdGUKICAgICMgY29sbGVjdGlvbiBpbiB0aGUgcmVzdWx0cy4KICAgIGZ1bGx5X21lcmdlZCA9IFtdCiAgICBmb3IgY29sbGVjdGlvbiBpbiBjb2xsZWN0aW9uczoKICAgICAgICBpZiBjb2xsZWN0aW9uLnBhZGRpbmcgPT0gMDoKICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgZm9yIGNhbmRpZGF0ZSBpbiBtZXJnZV9jYW5kaWRhdGVzOgogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICBjYW5kaWRhdGUuaGVhZCA9PSBjb2xsZWN0aW9uLmhlYWQgYW5kCiAgICAgICAgICAgICAgICBjYW5kaWRhdGUudGFpbCA9PSBjb2xsZWN0aW9uLnRhaWwKICAgICAgICAgICAgKToKICAgICAgICAgICAgICAgIG1lcmdlZF9pbmRleF9jb3VudCA9IDAKICAgICAgICAgICAgICAgIGZvciBpbmRleCBpbiBjYW5kaWRhdGUuaW5kZXhlczoKICAgICAgICAgICAgICAgICAgICBpZiBsZW4oc3RyKGFicyhpbmRleCkpKSA9PSBjb2xsZWN0aW9uLnBhZGRpbmc6CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24uaW5kZXhlcy5hZGQoaW5kZXgpCiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZF9pbmRleF9jb3VudCArPSAxCgogICAgICAgICAgICAgICAgaWYgbWVyZ2VkX2luZGV4X2NvdW50ID09IGxlbihjYW5kaWRhdGUuaW5kZXhlcyk6CiAgICAgICAgICAgICAgICAgICAgZnVsbHlfbWVyZ2VkLmFwcGVuZChjYW5kaWRhdGUpCgogICAgIyBGaWx0ZXIgb3V0IGZ1bGx5IG1lcmdlZCBjb2xsZWN0aW9ucy4KICAgIGNvbGxlY3Rpb25zID0gW2NvbGxlY3Rpb24gZm9yIGNvbGxlY3Rpb24gaW4gY29sbGVjdGlvbnMKICAgICAgICAgICAgICAgICAgIGlmIGNvbGxlY3Rpb24gbm90IGluIGZ1bGx5X21lcmdlZF0KCiAgICAjIEZpbHRlciBvdXQgY29sbGVjdGlvbnMgdGhhdCBkbyBub3QgaGF2ZSBhdCBsZWFzdCBhcyBtYW55IGluZGV4ZXMgYXMKICAgICMgbWluaW11bV9pdGVtcy4gSW4gYWRkaXRpb24sIGFkZCBhbnkgbWVtYmVycyBvZiBhIGZpbHRlcmVkIGNvbGxlY3Rpb24sCiAgICAjIHdoaWNoIGFyZSBub3QgbWVtYmVycyBvZiBhbiB1bmZpbHRlcmVkIGNvbGxlY3Rpb24sIHRvIHRoZSByZW1haW5kZXIuCiAgICBmaWx0ZXJlZCA9IFtdCiAgICByZW1haW5kZXJfY2FuZGlkYXRlcyA9IFtdCiAgICBmb3IgY29sbGVjdGlvbiBpbiBjb2xsZWN0aW9uczoKICAgICAgICBpZiBsZW4oY29sbGVjdGlvbi5pbmRleGVzKSA+PSBtaW5pbXVtX2l0ZW1zOgogICAgICAgICAgICBmaWx0ZXJlZC5hcHBlbmQoY29sbGVjdGlvbikKICAgICAgICBlbHNlOgogICAgICAgICAgICBmb3IgbWVtYmVyIGluIGNvbGxlY3Rpb246CiAgICAgICAgICAgICAgICByZW1haW5kZXJfY2FuZGlkYXRlcy5hcHBlbmQobWVtYmVyKQoKICAgIGZvciBjYW5kaWRhdGUgaW4gcmVtYWluZGVyX2NhbmRpZGF0ZXM6CiAgICAgICAgIyBDaGVjayBpZiBjYW5kaWRhdGUgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byByZW1haW5kZXIgdG8gYXZvaWQKICAgICAgICAjIGR1cGxpY2F0ZSBlbnRyaWVzLgogICAgICAgIGlmIGNhbmRpZGF0ZSBpbiByZW1haW5kZXI6CiAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgIGhhc19tZW1iZXJzaGlwID0gRmFsc2UKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBmb3IgY29sbGVjdGlvbiBpbiBmaWx0ZXJlZDoKICAgICAgICAgICAgaWYgY2FuZGlkYXRlIGluIGNvbGxlY3Rpb246CiAgICAgICAgICAgICAgICBoYXNfbWVtYmVyc2hpcCA9IFRydWUKICAgICAgICAgICAgICAgIGJyZWFrCjx8ZmltX2VuZHw+"]
["4184ea817e574c1f271006c91f73a71d540950e1-2","4184ea817e574c1f271006c91f73a71d540950e1","PHxmaW1fcHJlZml4fD4KIyA6Y29kaW5nOiB1dGYtOAojIDpjb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAxMyBNYXJ0aW4gUGVuZ2VsbHktUGhpbGxpcHMKIyA6bGljZW5zZTogU2VlIExJQ0VOU0UudHh0LgoKaW1wb3J0IHJlCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0Cgpmcm9tIC5fdmVyc2lvbiBpbXBvcnQgX192ZXJzaW9uX18KZnJvbSAuY29sbGVjdGlvbiBpbXBvcnQgQ29sbGVjdGlvbgpmcm9tIC5lcnJvciBpbXBvcnQgQ29sbGVjdGlvbkVycm9yCgoKIzogUGF0dGVybiBmb3IgbWF0Y2hpbmcgYW4gaW5kZXggd2l0aCBvcHRpb25hbCBwYWRkaW5nLgpESUdJVFNfUEFUVEVSTiA9ICcoP1A8aW5kZXg+KD9QPHBhZGRpbmc+MCopXGQrKScKCiM6IENvbW1vbiBwYXR0ZXJucyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gOnB5OmZ1bmM6YH5jbGlxdWUuYXNzZW1ibGVgLgpQQVRURVJOUyA9IHsKICAgICdmcmFtZXMnOiAnXC57MH1cLlxEK1xkPyQnLmZvcm1hdChESUdJVFNfUEFUVEVSTiksCiAgICAndmVyc2lvbnMnOiAndnswfScuZm9ybWF0KERJR0lUU19QQVRURVJOKQp9CgppZiBub3QgaGFzYXR0cihfX2J1aWx0aW5zX18sICJiYXNlc3RyaW5nIik6CiAgICBiYXNlc3RyaW5nID0gKHN0ciwgYnl0ZXMpCgpkZWYgYXNzZW1ibGUoCiAgICBpdGVyYWJsZSwgcGF0dGVybnM9Tm9uZSwgbWluaW11bV9pdGVtcz0yLCBjYXNlX3NlbnNpdGl2ZT1UcnVlLAogICAgYXNzdW1lX3BhZGRlZF93aGVuX2FtYmlndW91cz1GYWxzZQopOgogICAgJycnQXNzZW1ibGUgaXRlbXMgaW4gKml0ZXJhYmxlKiBpbnRvIGRpc2NyZWV0IGNvbGxlY3Rpb25zLgoKICAgICpwYXR0ZXJucyogbWF5IGJlIHNwZWNpZmllZCBhcyBhIGxpc3Qgb2YgcmVndWxhciBleHByZXNzaW9ucyB0byBsaW1pdAogICAgdGhlIHJldHVybmVkIGNvbGxlY3Rpb24gcG9zc2liaWxpdGllcy4gVXNlIHRoaXMgd2hlbiBpbnRlcmVzdGVkIGluCiAgICBjb2xsZWN0aW9ucyB0aGF0IG9ubHkgbWF0Y2ggc3BlY2lmaWMgcGF0dGVybnMuIEVhY2ggcGF0dGVybiBtdXN0IGNvbnRhaW4KICAgIHRoZSBleHByZXNzaW9uIGZyb20gOnB5OmRhdGE6YERJR0lUU19QQVRURVJOYCBleGFjdGx5IG9uY2UuCgogICAgQSBzZWxlY3Rpb24gb2YgY29tbW9uIGV4cHJlc3Npb25zIGFyZSBhdmFpbGFibGUgaW4gOnB5OmRhdGE6YFBBVFRFUk5TYC4KCiAgICAuLiBub3RlOjoKCiAgICAgICAgSWYgYSBwYXR0ZXJuIGlzIHN1cHBsaWVkIGFzIGEgc3RyaW5nIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBjb21waWxlZAogICAgICAgIHRvIGEgOnB5OmNsYXNzOmByZS5SZWdleE9iamVjdGAgaW5zdGFuY2UgZm9yIGNvbnZlbmllbmNlLgoKICAgIFdoZW4gKnBhdHRlcm5zKiBpcyBub3Qgc3BlY2lmaWVkLCBjb2xsZWN0aW9ucyBhcmUgZm9ybWVkIGJ5IGV4YW1pbmluZyBhbGwKICAgIHBvc3NpYmxlIGdyb3VwaW5ncyBvZiB0aGUgaXRlbXMgaW4gKml0ZXJhYmxlKiBiYXNlZCBhcm91bmQgY29tbW9uIG51bWVyaWNhbAogICAgY29tcG9uZW50cy4KCiAgICAqbWluaW11bV9pdGVtcyogZGljdGF0ZXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGl0ZW1zIGEgY29sbGVjdGlvbiBtdXN0IGhhdmUKICAgIGluIG9yZGVyIHRvIGJlIGluY2x1ZGVkIGluIHRoZSByZXN1bHQuIFRoZSBkZWZhdWx0IGlzIDIsIGZpbHRlcmluZyBvdXQKICAgIHNpbmdsZSBpdGVtIGNvbGxlY3Rpb25zLgoKICAgIElmICpjYXNlX3NlbnNpdGl2ZSogaXMgRmFsc2UsIHRoZW4gaXRlbXMgd2lsbCBiZSB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlIHNhbWUKICAgIGNvbGxlY3Rpb24gd2hlbiB0aGV5IG9ubHkgZGlmZmVyIGluIGNhc2luZy4gVG8gYXZvaWQgYW1iaWd1aXR5LCB0aGUKICAgIHJlc3VsdGluZyBjb2xsZWN0aW9uIHdpbGwgYWx3YXlzIGJlIGxvd2VyY2FzZS4gRm9yIGV4YW1wbGUsICJpdGVtLjAwMDEuZHB4IgogICAgYW5kICJJdGVtLjAwMDIuZHB4IiB3b3VsZCBiZSBwYXJ0IG9mIHRoZSBzYW1lIGNvbGxlY3Rpb24sICJpdGVtLiUwNGQuZHB4Ii4KCiAgICAuLiBub3RlOjoKCiAgICAgICAgQW55IGNvbXBpbGVkICpwYXR0ZXJucyogd2lsbCBhbHNvIHJlc3BlY3QgdGhlIHNldCBjYXNlIHNlbnNpdGl2aXR5LgoKICAgIEZvciBjZXJ0YWluIGNvbGxlY3Rpb25zIGl0IG1heSBiZSBhbWJpZ3VvdXMgd2hldGhlciB0aGV5IGFyZSBwYWRkZWQgb3Igbm90LgogICAgRm9yIGV4YW1wbGUsIDEwMDAtMTAxMCBjYW4gYmUgY29uc2lkZXJlZCBlaXRoZXIgYW4gdW5wYWRkZWQgY29sbGVjdGlvbiBvciBhCiAgICBmb3VyIHBhZGRlZCBjb2xsZWN0aW9uLiBCeSBkZWZhdWx0LCBDbGlxdWUgaXMgY29uc2VydmF0aXZlIGFuZCBhc3N1bWVzIHRoYXQKICAgIHRoZSBjb2xsZWN0aW9uIGlzIHVucGFkZGVkLiBUbyBjaGFuZ2UgdGhpcyBiZWhhdmlvdXIsIHNldAogICAgKmFzc3VtZV9wYWRkZWRfd2hlbl9hbWJpZ3VvdXMqIHRvIFRydWUgYW5kIGFueSBhbWJpZ3VvdXMgY29sbGVjdGlvbiB3aWxsIGhhdmUKICAgIGEgcmVsZXZhbnQgcGFkZGluZyBzZXQuCgogICAgLi4gbm90ZTo6CgogICAgICAgICphc3N1bWVfcGFkZGVkX3doZW5fYW1iaWd1b3VzKiBoYXMgbm8gZWZmZWN0IG9uIGNvbGxlY3Rpb25zIHRoYXQgYXJlCiAgICAgICAgdW5hbWJpZ3VvdXMuIEZvciBleGFtcGxlLCAxLTEwMCB3aWxsIGFsd2F5cyBiZSBjb25zaWRlcmVkIHVucGFkZGVkCiAgICAgICAgcmVnYXJkbGVzcyBvZiB0aGUgKmFzc3VtZV9wYWRkZWRfd2hlbl9hbWJpZ3VvdXMqIHNldHRpbmcuCgogICAgUmV0dXJuIHR1cGxlIG9mIHR3byBsaXN0cyAoY29sbGVjdGlvbnMsIHJlbWFpbmRlcikgd2hlcmUgJ2NvbGxlY3Rpb25zJyBpcyBhCiAgICBsaXN0IG9mIGFzc2VtYmxlZCA6cHk6Y2xhc3M6YH5jbGlxdWUuY29sbGVjdGlvbi5Db2xsZWN0aW9uYCBpbnN0YW5jZXMgYW5kCiAgICAncmVtYWluZGVyJyBpcyBhIGxpc3Qgb2YgaXRlbXMgdGhhdCBkaWQgbm90IGJlbG9uZyB0byBhbnkgY29sbGVjdGlvbi4KCiAgICAnJycKICAgIGNvbGxlY3Rpb25fbWFwID0gZGVmYXVsdGRpY3Qoc2V0KQogICAgY29sbGVjdGlvbnMgPSBbXQogICAgcmVtYWluZGVyID0gW10KCiAgICAjIENvbXBpbGUgcGF0dGVybnMuCiAgICBmbGFncyA9IDAKICAgIGlmIG5vdCBjYXNlX3NlbnNpdGl2ZToKICAgICAgICBmbGFncyB8PSByZS5JR05PUkVDQVNFCgogICAgY29tcGlsZWRfcGF0dGVybnMgPSBbXQoKICAgIGlmIHBhdHRlcm5zIGlzIG5vdCBOb25lOgogICAgICAgIGlmIG5vdCBwYXR0ZXJuczoKICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25zLCBsaXN0KGl0ZXJhYmxlKQoKICAgICAgICBmb3IgcGF0dGVybiBpbiBwYXR0ZXJuczoKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXR0ZXJuLCBiYXNlc3RyaW5nKToKICAgICAgICAgICAgICAgIGNvbXBpbGVkX3BhdHRlcm5zLmFwcGVuZChyZS5jb21waWxlKHBhdHRlcm4sIGZsYWdzPWZsYWdzKSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGNvbXBpbGVkX3BhdHRlcm5zLmFwcGVuZChwYXR0ZXJuKQoKICAgIGVsc2U6CiAgICAgICAgY29tcGlsZWRfcGF0dGVybnMuYXBwZW5kKHJlLmNvbXBpbGUoRElHSVRTX1BBVFRFUk4sIGZsYWdzPWZsYWdzKSkKCiAgICAjIFByb2Nlc3MgaXRlcmFibGUuCiAgICBmb3IgaXRlbSBpbiBpdGVyYWJsZToKICAgICAgICBtYXRjaGVkID0gRmFsc2UKCiAgICAgICAgZm9yIHBhdHRlcm4gaW4gY29tcGlsZWRfcGF0dGVybnM6CiAgICAgICAgICAgIGZvciBtYXRjaCBpbiBwYXR0ZXJuLmZpbmRpdGVyKGl0ZW0pOgogICAgICAgICAgICAgICAgaW5kZXggPSBtYXRjaC5ncm91cCgnaW5kZXgnKQoKICAgICAgICAgICAgICAgIGhlYWQgPSBpdGVtWzptYXRjaC5zdGFydCgnaW5kZXgnKV0KICAgICAgICAgICAgICAgIHRhaWwgPSBpdGVtW21hdGNoLmVuZCgnaW5kZXgnKTpdCgogICAgICAgICAgICAgICAgaWYgbm90IGNhc2Vfc2Vuc2l0aXZlOgogICAgICAgICAgICAgICAgICAgIGhlYWQgPSBoZWFkLmxvd2VyKCkKICAgICAgICAgICAgICAgICAgICB0YWlsID0gdGFpbC5sb3dlcigpCgogICAgICAgICAgICAgICAgcGFkZGluZyA9IG1hdGNoLmdyb3VwKCdwYWRkaW5nJykKICAgICAgICAgICAgICAgIGlmIHBhZGRpbmc6CiAgICAgICAgICAgICAgICAgICAgcGFkZGluZyA9IGxlbihpbmRleCkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgcGFkZGluZyA9IDAKCiAgICAgICAgICAgICAgICBrZXkgPSAoaGVhZCwgdGFpbCwgcGFkZGluZykKICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25fbWFwW2tleV0uYWRkKGludChpbmRleCkpCiAgICAgICAgICAgICAgICBtYXRjaGVkID0gVHJ1ZQoKICAgICAgICBpZiBub3QgbWF0Y2hlZDoKICAgICAgICAgICAgcmVtYWluZGVyLmFwcGVuZChpdGVtKQoKICAgICMgRm9ybSBjb2xsZWN0aW9ucy4KICAgIG1lcmdlX2NhbmRpZGF0ZXMgPSBbXQogICAgZm9yIChoZWFkLCB0YWlsLCBwYWRkaW5nKSwgaW5kZXhlcyBpbiBjb2xsZWN0aW9uX21hcC5pdGVtcygpOgogICAgICAgIGNvbGxlY3Rpb24gPSBDb2xsZWN0aW9uKGhlYWQsIHRhaWwsIHBhZGRpbmcsIGluZGV4ZXMpCiAgICAgICAgY29sbGVjdGlvbnMuYXBwZW5kKGNvbGxlY3Rpb24pCgogICAgICAgIGlmIGNvbGxlY3Rpb24ucGFkZGluZyA9PSAwOgogICAgICAgICAgICBtZXJnZV9jYW5kaWRhdGVzLmFwcGVuZChjb2xsZWN0aW9uKQoKICAgICMgTWVyZ2UgdG9nZXRoZXIgY29sbGVjdGlvbnMgdGhhdCBhbGlnbiBvbiBwYWRkaW5nIGJvdW5kYXJpZXMuIEZvciBleGFtcGxlLAogICAgIyAwOTk4LTA5OTkgYW5kIDEwMDAtMTAwMSBjYW4gYmUgbWVyZ2VkIGludG8gMDk5OC0xMDAxLiBOb3RlIHRoYXQgb25seQogICAgIyBpbmRleGVzIHdpdGhpbiB0aGUgcGFkZGluZyB3aWR0aCBsaW1pdCBhcmUgbWVyZ2VkLiBJZiBhIGNvbGxlY3Rpb24gaXMKICAgICMgZW50aXJlbHkgbWVyZ2VkIGludG8gYW5vdGhlciB0aGVuIGl0IHdpbGwgbm90IGJlIGluY2x1ZGVkIGFzIGEgc2VwYXJhdGUKICAgICMgY29sbGVjdGlvbiBpbiB0aGUgcmVzdWx0cy4KICAgIGZ1bGx5X21lcmdlZCA9IFtdCiAgICBmb3IgY29sbGVjdGlvbiBpbiBjb2xsZWN0aW9uczoKICAgICAgICBpZiBjb2xsZWN0aW9uLnBhZGRpbmcgPT0gMDoKICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgZm9yIGNhbmRpZGF0ZSBpbiBtZXJnZV9jYW5kaWRhdGVzOgogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICBjYW5kaWRhdGUuaGVhZCA9PSBjb2xsZWN0aW9uLmhlYWQgYW5kCiAgICAgICAgICAgICAgICBjYW5kaWRhdGUudGFpbCA9PSBjb2xsZWN0aW9uLnRhaWwKICAgICAgICAgICAgKToKICAgICAgICAgICAgICAgIG1lcmdlZF9pbmRleF9jb3VudCA9IDAKICAgICAgICAgICAgICAgIGZvciBpbmRleCBpbiBjYW5kaWRhdGUuaW5kZXhlczoKICAgICAgICAgICAgICAgICAgICBpZiBsZW4oc3RyKGFicyhpbmRleCkpKSA9PSBjb2xsZWN0aW9uLnBhZGRpbmc6CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24uaW5kZXhlcy5hZGQoaW5kZXgpCiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZF9pbmRleF9jb3VudCArPSAxCgogICAgICAgICAgICAgICAgaWYgbWVyZ2VkX2luZGV4X2NvdW50ID09IGxlbihjYW5kaWRhdGUuaW5kZXhlcyk6CiAgICAgICAgICAgICAgICAgICAgZnVsbHlfbWVyZ2VkLmFwcGVuZChjYW5kaWRhdGUpCgogICAgIyBGaWx0ZXIgb3V0IGZ1bGx5IG1lcmdlZCBjb2xsZWN0aW9ucy4KICAgIGNvbGxlY3Rpb25zID0gW2NvbGxlY3Rpb24gZm9yIGNvbGxlY3Rpb24gaW4gY29sbGVjdGlvbnMKICAgICAgICAgICAgICAgICAgIGlmIGNvbGxlY3Rpb24gbm90IGluIGZ1bGx5X21lcmdlZF0KCiAgICAjIEZpbHRlciBvdXQgY29sbGVjdGlvbnMgdGhhdCBkbyBub3QgaGF2ZSBhdCBsZWFzdCBhcyBtYW55IGluZGV4ZXMgYXMKICAgICMgbWluaW11bV9pdGVtcy4gSW4gYWRkaXRpb24sIGFkZCBhbnkgbWVtYmVycyBvZiBhIGZpbHRlcmVkIGNvbGxlY3Rpb24sCiAgICAjIHdoaWNoIGFyZSBub3QgbWVtYmVycyBvZiBhbiB1bmZpbHRlcmVkIGNvbGxlY3Rpb24sIHRvIHRoZSByZW1haW5kZXIuCiAgICBmaWx0ZXJlZCA9IFtdCiAgICByZW1haW5kZXJfY2FuZGlkYXRlcyA9IFtdCiAgICBmb3IgY29sbGVjdGlvbiBpbiBjb2xsZWN0aW9uczoKICAgICAgICBpZiBsZW4oY29sbGVjdGlvbi5pbmRleGVzKSA+PSBtaW5pbXVtX2l0ZW1zOgogICAgICAgICAgICBmaWx0ZXJlZC5hcHBlbmQoY29sbGVjdGlvbikKICAgICAgICBlbHNlOgogICAgICAgICAgICBmb3IgbWVtYmVyIGluIGNvbGxlY3Rpb246CiAgICAgICAgICAgICAgICByZW1haW5kZXJfY2FuZGlkYXRlcy5hcHBlbmQobWVtYmVyKQoKICAgIGZvciBjYW5kaWRhdGUgaW4gcmVtYWluZGVyX2NhbmRpZGF0ZXM6CiAgICAgICAgIyBDaGVjayBpZiBjYW5kaWRhdGUgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byByZW1haW5kZXIgdG8gYXZvaWQKICAgICAgICAjIGR1cGxpY2F0ZSBlbnRyaWVzLgogICAgICAgIGlmIGNhbmRpZGF0ZSBpbiByZW1haW5kZXI6CiAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgIGhhc19tZW1iZXJzaGlwID0gRmFsc2UKCiAgICAgICAgZm9yIGNvbGxlY3Rpb24gaW4gZmlsdGVyZWQ6CiAgICAgICAgICAgIGlmIGNhbmRpZGF0ZSBpbiBjb2xsZWN0aW9uOgogICAgICAgICAgICAgICAgaGFzX21lbWJlcnNoaXAgPSBUcnVlCiAgICAgICAgICAgICAgICBicmVhawoKICAgICAgICBpZiBub3QgaGFzX21lbWJlcnNoaXA6CiAgICAgICAgICAgIHJlbWFpbmRlci5hcHBlbmQoY2FuZGlkYXRlKQoKICAgICMgU2V0IHBhZGRpbmcgZm9yIGFsbCBhbWJpZ3VvdXMgY29sbGVjdGlvbnMgYWNjb3JkaW5nIHRvIHRoZQogICAgIyBhc3N1bWVfcGFkZGVkX3doZW5fYW1iaWd1b3VzIHNldHRpbmcuCiAgICBpZiBhc3N1bWVfcGFkZGVkX3doZW5fYW1iaWd1b3VzOgogICAgICAgIGZvciBjb2xsZWN0aW9uIGluIGZpbHRlcmVkOgogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICBub3QgY29sbGVjdGlvbi5wYWRkaW5nIGFuZCBjb2xsZWN0aW9uLmluZGV4ZXMKICAgICAgICAgICAgKToKICAgICAgICAgICAgICAgIGluZGV4ZXMgPSBsaXN0KGNvbGxlY3Rpb24uaW5kZXhlcykKICAgICAgICAgICAgICAgIGZpcnN0X2luZGV4X3dpZHRoID0gbGVuKHN0cihpbmRleGVzWzBdKSkKICAgICAgICAgICAgICAgIGxhc3RfaW5kZXhfd2lkdGggPSBsZW4oc3RyKGluZGV4ZXNbLTFdKSkKICAgICAgICAgICAgICAgIGlmIGZpcnN0X2luZGV4X3dpZHRoID09IGxhc3RfaW5kZXhfd2lkdGg6CiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbi5wYWRkaW5nID0gZmlyc3RfaW5kZXhfd2lkdGgKCiAgICByZXR1cm4gZmlsdGVyZWQsIHJlbWFpbmRlcgoKCmRlZiBwYXJzZSh2YWx1ZSwgcGF0dGVybj0ne2hlYWR9e3BhZGRpbmd9e3RhaWx9IFt7cmFuZ2VzfV0nKToKICAgICcnJ1BhcnNlICp2YWx1ZSogaW50byBhIDpweTpjbGFzczpgfmNsaXF1ZS5jb2xsZWN0aW9uLkNvbGxlY3Rpb25gLgoKICAgIFVzZSAqcGF0dGVybiogdG8gZXh0cmFjdCBpbmZvcm1hdGlvbiBmcm9tICp2YWx1ZSouIEl0IG1heSBtYWtlIHVzZSBvZiB0aGUKICAgIGZvbGxvd2luZyBrZXlzOgoKICAgICAgICAqICpoZWFkKiAtIENvbW1vbiBsZWFkaW5nIHBhcnQgb2YgdGhlIGNvbGxlY3Rpb24uCiAgICAgICAgKiAqdGFpbCogLSBDb21tb24gdHJhaWxpbmcgcGFydCBvZiB0aGUgY29sbGVjdGlvbi4KICAgICAgICAqICpwYWRkaW5nKiAtIFBhZGRpbmcgdmFsdWUgaW4gYGAlMGRgYCBmb3JtYXQuCiAgICAgICAgKiAqcmFuZ2UqIC0gVG90YWwgcmFuZ2UgaW4gdGhlIGZvcm0gYGBzdGFydC1lbmRgYC4KICAgICAgICAqICpyYW5nZXMqIC0gQ29tbWEgc2VwYXJhdGVkIHJhbmdlcyBvZiBpbmRleGVzLgogICAgICAgICogKmhvbGVzKiAtIENvbW1hIHNlcGFyYXRlZCByYW5nZXMgb2YgbWlzc2luZyBpbmRleGVzLgoKICAgIC4uIG5vdGU6OgoKICAgICAgICAqaG9sZXMqIG9ubHkgbWFrZXMgc2Vuc2UgaWYgKnJhbmdlKiBvciAqcmFuZ2VzKiBpcyBhbHNvIHByZXNlbnQuCgogICAgJycnCiAgICAjIENvbnN0cnVjdCByZWd1bGFyIGV4cHJlc3Npb24gZm9yIGdpdmVuIHBhdHRlcm4uCiAgICBleHByZXNzaW9ucyA9IHsKICAgICAgICAnaGVhZCc6ICcoP1A8aGVhZD4uKiknLAogICAgICAgICd0YWlsJzogJyg/UDx0YWlsPi4qKScsCiAgICAgICAgJ3BhZGRpbmcnOiAnJSg/UDxwYWRkaW5nPlxkKilkJywKICAgICAgICAncmFuZ2UnOiAnKD9QPHJhbmdlPlxkKy1cZCspPycsCiAgICAgICAgJ3Jhbmdlcyc6ICcoP1A8cmFuZ2VzPltcZCAsXC1dKyk/JywKICAgICAgICAnaG9sZXMnOiAnKD9QPGhvbGVzPltcZCAsXC1dKyknCiAgICB9CgogICAgcGF0dGVybl9yZWdleCA9IHJlLmVzY2FwZShwYXR0ZXJuKQogICAgZm9yIGtleSwgZXhwcmVzc2lvbiBpbiBleHByZXNzaW9ucy5pdGVtcygpOgogICAgICAgIHBhdHRlcm5fcmVnZXggPSBwYXR0ZXJuX3JlZ2V4LnJlcGxhY2UoCiAgICAgICAgICAgICdce3t7MH1cfX0nLmZvcm1hdChrZXkpLAogICAgICAgICAgICBleHByZXNzaW9uCiAgICAgICAgKQogICAgcGF0dGVybl9yZWdleCA9ICdeezB9JCcuZm9ybWF0KHBhdHRlcm5fcmVnZXgpCgogICAgIyBNYXRjaCBwYXR0ZXJuIGFnYWluc3QgdmFsdWUgYW5kIHVzZSByZXN1bHRzIHRvIGNvbnN0cnVjdCBjb2xsZWN0aW9uLgogICAgbWF0Y2ggPSByZS5zZWFyY2gocGF0dGVybl9yZWdleCwgdmFsdWUpCiAgICBpZiBtYXRjaCBpcyBOb25lOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1ZhbHVlIGRpZCBub3QgbWF0Y2ggcGF0dGVybi4nKQoKICAgIGdyb3VwcyA9IG1hdGNoLmdyb3VwZGljdCgpCiAgICBpZiAncGFkZGluZycgaW4gZ3JvdXBzIGFuZCBncm91cHNbJ3BhZGRpbmcnXToKICAgICAgICBncm91cHNbJ3BhZGRpbmcnXSA9IGludChncm91cHNbJ3BhZGRpbmcnXSkKICAgIGVsc2U6CiAgICAgICAgZ3JvdXBzWydwYWRkaW5nJ10gPSAwCgogICAgIyBDcmVhdGUgY29sbGVjdGlvbiBhbmQgdGhlbiBhZGQgaW5kZXhlcy4KICAgIGNvbGxlY3Rpb24gPSBDb2xsZWN0aW9uKAogICAgICAgIGdyb3Vwcy5nZXQoJ2hlYWQnLCAnJyksCiAgICAgICAgZ3JvdXBzLmdldCgndGFpbCcsICcnKSwKICAgICAgICBncm91cHNbJ3BhZGRpbmcnXQogICAgKQoKICAgIGlmIGdyb3Vwcy5nZXQoJ3JhbmdlJywgTm9uZSkgaXMgbm90IE5vbmU6Cjx8ZmltX2hvbGV8PgogICAgaWYgZ3JvdXBzLmdldCgncmFuZ2VzJywgTm9uZSkgaXMgbm90IE5vbmU6CiAgICAgICAgcGFydHMgPSBbcGFydC5zdHJpcCgpIGZvciBwYXJ0IGluIGdyb3Vwc1sncmFuZ2VzJ10uc3BsaXQoJywnKV0KICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKICAgICAgICAgICAgaW5kZXhfcmFuZ2UgPSBsaXN0KG1hcChpbnQsIHBhcnQuc3BsaXQoJy0nLCAyKSkpCgogICAgICAgICAgICBpZiBsZW4oaW5kZXhfcmFuZ2UpID4gMToKICAgICAgICAgICAgICAgICMgSW5kZXggcmFuZ2UuCiAgICAgICAgICAgICAgICBmb3IgaW5kZXggaW4gcmFuZ2UoaW5kZXhfcmFuZ2VbMF0sIGluZGV4X3JhbmdlWzFdICsgMSk6CiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbi5pbmRleGVzLmFkZChpbmRleCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICMgU2luZ2xlIGluZGV4LgogICAgICAgICAgICAgICAgY29sbGVjdGlvbi5pbmRleGVzLmFkZChpbmRleF9yYW5nZVswXSkKCiAgICBpZiAnaG9sZXMnIGluIGdyb3VwczoKICAgICAgICBwYXJ0cyA9IFtwYXJ0LnN0cmlwKCkgZm9yIHBhcnQgaW4gZ3JvdXBzWydob2xlcyddLnNwbGl0KCcsJyldCiAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6CiAgICAgICAgICAgIGluZGV4X3JhbmdlID0gbWFwKGludCwgcGFydC5zcGxpdCgnLScsIDIpKQoKICAgICAgICAgICAgaWYgbGVuKGluZGV4X3JhbmdlKSA+IDE6CiAgICAgICAgICAgICAgICAjIEluZGV4IHJhbmdlLgogICAgICAgICAgICAgICAgZm9yIGluZGV4IGluIHJhbmdlKGluZGV4X3JhbmdlWzBdLCBpbmRleF9yYW5nZVsxXSArIDEpOgogICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24uaW5kZXhlcy5yZW1vdmUoaW5kZXgpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAjIFNpbmdsZSBpbmRleC4KICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24uaW5kZXhlcy5yZW1vdmUoaW5kZXhfcmFuZ2VbMF0pCgogICAgcmV0dXJuIGNvbGxlY3Rpb24KPHxmaW1fc3VmZml4fD4KICAgICAgICBzdGFydCwgZW5kID0gbWFwKGludCwgZ3JvdXBzWydyYW5nZSddLnNwbGl0KCctJykpCiAgICAgICAgY29sbGVjdGlvbi5pbmRleGVzLnVwZGF0ZShyYW5nZShzdGFydCwgZW5kICsgMSkpCgo8fGZpbV9lbmR8Pg=="]
["4184ea817e574c1f271006c91f73a71d540950e1-3","4184ea817e574c1f271006c91f73a71d540950e1","PHxmaW1fcHJlZml4fD4KIyA6Y29kaW5nOiB1dGYtOAojIDpjb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAxMyBNYXJ0aW4gUGVuZ2VsbHktUGhpbGxpcHMKIyA6bGljZW5zZTogU2VlIExJQ0VOU0UudHh0LgoKaW1wb3J0IHJlCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0Cgpmcm9tIC5fdmVyc2lvbiBpbXBvcnQgX192ZXJzaW9uX18KZnJvbSAuY29sbGVjdGlvbiBpbXBvcnQgQ29sbGVjdGlvbgpmcm9tIC5lcnJvciBpbXBvcnQgQ29sbGVjdGlvbkVycm9yCgoKIzogUGF0dGVybiBmb3IgbWF0Y2hpbmcgYW4gaW5kZXggd2l0aCBvcHRpb25hbCBwYWRkaW5nLgpESUdJVFNfUEFUVEVSTiA9ICcoP1A8aW5kZXg+KD9QPHBhZGRpbmc+MCopXGQrKScKCiM6IENvbW1vbiBwYXR0ZXJucyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gOnB5OmZ1bmM6YH5jbGlxdWUuYXNzZW1ibGVgLgpQQVRURVJOUyA9IHsKICAgICdmcmFtZXMnOiAnXC57MH1cLlxEK1xkPyQnLmZvcm1hdChESUdJVFNfUEFUVEVSTiksCiAgICAndmVyc2lvbnMnOiAndnswfScuZm9ybWF0KERJR0lUU19QQVRURVJOKQp9CgppZiBub3QgaGFzYXR0cihfX2J1aWx0aW5zX18sICJiYXNlc3RyaW5nIik6CiAgICBiYXNlc3RyaW5nID0gKHN0ciwgYnl0ZXMpCgpkZWYgYXNzZW1ibGUoCiAgICBpdGVyYWJsZSwgcGF0dGVybnM9Tm9uZSwgbWluaW11bV9pdGVtcz0yLCBjYXNlX3NlbnNpdGl2ZT1UcnVlLAogICAgYXNzdW1lX3BhZGRlZF93aGVuX2FtYmlndW91cz1GYWxzZQopOgogICAgJycnQXNzZW1ibGUgaXRlbXMgaW4gKml0ZXJhYmxlKiBpbnRvIGRpc2NyZWV0IGNvbGxlY3Rpb25zLgoKICAgICpwYXR0ZXJucyogbWF5IGJlIHNwZWNpZmllZCBhcyBhIGxpc3Qgb2YgcmVndWxhciBleHByZXNzaW9ucyB0byBsaW1pdAogICAgdGhlIHJldHVybmVkIGNvbGxlY3Rpb24gcG9zc2liaWxpdGllcy4gVXNlIHRoaXMgd2hlbiBpbnRlcmVzdGVkIGluCiAgICBjb2xsZWN0aW9ucyB0aGF0IG9ubHkgbWF0Y2ggc3BlY2lmaWMgcGF0dGVybnMuIEVhY2ggcGF0dGVybiBtdXN0IGNvbnRhaW4KICAgIHRoZSBleHByZXNzaW9uIGZyb20gOnB5OmRhdGE6YERJR0lUU19QQVRURVJOYCBleGFjdGx5IG9uY2UuCgogICAgQSBzZWxlY3Rpb24gb2YgY29tbW9uIGV4cHJlc3Npb25zIGFyZSBhdmFpbGFibGUgaW4gOnB5OmRhdGE6YFBBVFRFUk5TYC4KCiAgICAuLiBub3RlOjoKCiAgICAgICAgSWYgYSBwYXR0ZXJuIGlzIHN1cHBsaWVkIGFzIGEgc3RyaW5nIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBjb21waWxlZAogICAgICAgIHRvIGEgOnB5OmNsYXNzOmByZS5SZWdleE9iamVjdGAgaW5zdGFuY2UgZm9yIGNvbnZlbmllbmNlLgoKICAgIFdoZW4gKnBhdHRlcm5zKiBpcyBub3Qgc3BlY2lmaWVkLCBjb2xsZWN0aW9ucyBhcmUgZm9ybWVkIGJ5IGV4YW1pbmluZyBhbGwKICAgIHBvc3NpYmxlIGdyb3VwaW5ncyBvZiB0aGUgaXRlbXMgaW4gKml0ZXJhYmxlKiBiYXNlZCBhcm91bmQgY29tbW9uIG51bWVyaWNhbAogICAgY29tcG9uZW50cy4KCiAgICAqbWluaW11bV9pdGVtcyogZGljdGF0ZXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGl0ZW1zIGEgY29sbGVjdGlvbiBtdXN0IGhhdmUKICAgIGluIG9yZGVyIHRvIGJlIGluY2x1ZGVkIGluIHRoZSByZXN1bHQuIFRoZSBkZWZhdWx0IGlzIDIsIGZpbHRlcmluZyBvdXQKICAgIHNpbmdsZSBpdGVtIGNvbGxlY3Rpb25zLgoKICAgIElmICpjYXNlX3NlbnNpdGl2ZSogaXMgRmFsc2UsIHRoZW4gaXRlbXMgd2lsbCBiZSB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlIHNhbWUKICAgIGNvbGxlY3Rpb24gd2hlbiB0aGV5IG9ubHkgZGlmZmVyIGluIGNhc2luZy4gVG8gYXZvaWQgYW1iaWd1aXR5LCB0aGUKICAgIHJlc3VsdGluZyBjb2xsZWN0aW9uIHdpbGwgYWx3YXlzIGJlIGxvd2VyY2FzZS4gRm9yIGV4YW1wbGUsICJpdGVtLjAwMDEuZHB4IgogICAgYW5kICJJdGVtLjAwMDIuZHB4IiB3b3VsZCBiZSBwYXJ0IG9mIHRoZSBzYW1lIGNvbGxlY3Rpb24sICJpdGVtLiUwNGQuZHB4Ii4KCiAgICAuLiBub3RlOjoKCiAgICAgICAgQW55IGNvbXBpbGVkICpwYXR0ZXJucyogd2lsbCBhbHNvIHJlc3BlY3QgdGhlIHNldCBjYXNlIHNlbnNpdGl2aXR5LgoKICAgIEZvciBjZXJ0YWluIGNvbGxlY3Rpb25zIGl0IG1heSBiZSBhbWJpZ3VvdXMgd2hldGhlciB0aGV5IGFyZSBwYWRkZWQgb3Igbm90LgogICAgRm9yIGV4YW1wbGUsIDEwMDAtMTAxMCBjYW4gYmUgY29uc2lkZXJlZCBlaXRoZXIgYW4gdW5wYWRkZWQgY29sbGVjdGlvbiBvciBhCiAgICBmb3VyIHBhZGRlZCBjb2xsZWN0aW9uLiBCeSBkZWZhdWx0LCBDbGlxdWUgaXMgY29uc2VydmF0aXZlIGFuZCBhc3N1bWVzIHRoYXQKICAgIHRoZSBjb2xsZWN0aW9uIGlzIHVucGFkZGVkLiBUbyBjaGFuZ2UgdGhpcyBiZWhhdmlvdXIsIHNldAogICAgKmFzc3VtZV9wYWRkZWRfd2hlbl9hbWJpZ3VvdXMqIHRvIFRydWUgYW5kIGFueSBhbWJpZ3VvdXMgY29sbGVjdGlvbiB3aWxsIGhhdmUKICAgIGEgcmVsZXZhbnQgcGFkZGluZyBzZXQuCgogICAgLi4gbm90ZTo6CgogICAgICAgICphc3N1bWVfcGFkZGVkX3doZW5fYW1iaWd1b3VzKiBoYXMgbm8gZWZmZWN0IG9uIGNvbGxlY3Rpb25zIHRoYXQgYXJlCiAgICAgICAgdW5hbWJpZ3VvdXMuIEZvciBleGFtcGxlLCAxLTEwMCB3aWxsIGFsd2F5cyBiZSBjb25zaWRlcmVkIHVucGFkZGVkCiAgICAgICAgcmVnYXJkbGVzcyBvZiB0aGUgKmFzc3VtZV9wYWRkZWRfd2hlbl9hbWJpZ3VvdXMqIHNldHRpbmcuCgogICAgUmV0dXJuIHR1cGxlIG9mIHR3byBsaXN0cyAoY29sbGVjdGlvbnMsIHJlbWFpbmRlcikgd2hlcmUgJ2NvbGxlY3Rpb25zJyBpcyBhCiAgICBsaXN0IG9mIGFzc2VtYmxlZCA6cHk6Y2xhc3M6YH5jbGlxdWUuY29sbGVjdGlvbi5Db2xsZWN0aW9uYCBpbnN0YW5jZXMgYW5kCiAgICAncmVtYWluZGVyJyBpcyBhIGxpc3Qgb2YgaXRlbXMgdGhhdCBkaWQgbm90IGJlbG9uZyB0byBhbnkgY29sbGVjdGlvbi4KCiAgICAnJycKICAgIGNvbGxlY3Rpb25fbWFwID0gZGVmYXVsdGRpY3Qoc2V0KQogICAgY29sbGVjdGlvbnMgPSBbXQogICAgcmVtYWluZGVyID0gW10KCiAgICAjIENvbXBpbGUgcGF0dGVybnMuCiAgICBmbGFncyA9IDAKICAgIGlmIG5vdCBjYXNlX3NlbnNpdGl2ZToKICAgICAgICBmbGFncyB8PSByZS5JR05PUkVDQVNFCgogICAgY29tcGlsZWRfcGF0dGVybnMgPSBbXQoKICAgIGlmIHBhdHRlcm5zIGlzIG5vdCBOb25lOgogICAgICAgIGlmIG5vdCBwYXR0ZXJuczoKICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25zLCBsaXN0KGl0ZXJhYmxlKQoKICAgICAgICBmb3IgcGF0dGVybiBpbiBwYXR0ZXJuczoKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXR0ZXJuLCBiYXNlc3RyaW5nKToKICAgICAgICAgICAgICAgIGNvbXBpbGVkX3BhdHRlcm5zLmFwcGVuZChyZS5jb21waWxlKHBhdHRlcm4sIGZsYWdzPWZsYWdzKSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGNvbXBpbGVkX3BhdHRlcm5zLmFwcGVuZChwYXR0ZXJuKQoKICAgIGVsc2U6CiAgICAgICAgY29tcGlsZWRfcGF0dGVybnMuYXBwZW5kKHJlLmNvbXBpbGUoRElHSVRTX1BBVFRFUk4sIGZsYWdzPWZsYWdzKSkKCiAgICAjIFByb2Nlc3MgaXRlcmFibGUuCiAgICBmb3IgaXRlbSBpbiBpdGVyYWJsZToKICAgICAgICBtYXRjaGVkID0gRmFsc2UKCiAgICAgICAgZm9yIHBhdHRlcm4gaW4gY29tcGlsZWRfcGF0dGVybnM6CiAgICAgICAgICAgIGZvciBtYXRjaCBpbiBwYXR0ZXJuLmZpbmRpdGVyKGl0ZW0pOgogICAgICAgICAgICAgICAgaW5kZXggPSBtYXRjaC5ncm91cCgnaW5kZXgnKQoKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICAgICAgaGVhZCA9IGhlYWQubG93ZXIoKQogICAgICAgICAgICAgICAgICAgIHRhaWwgPSB0YWlsLmxvd2VyKCkKCiAgICAgICAgICAgICAgICBwYWRkaW5nID0gbWF0Y2guZ3JvdXAoJ3BhZGRpbmcnKQogICAgICAgICAgICAgICAgaWYgcGFkZGluZzoKICAgICAgICAgICAgICAgICAgICBwYWRkaW5nID0gbGVuKGluZGV4KQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBwYWRkaW5nID0gMAoKICAgICAgICAgICAgICAgIGtleSA9IChoZWFkLCB0YWlsLCBwYWRkaW5nKQogICAgICAgICAgICAgICAgY29sbGVjdGlvbl9tYXBba2V5XS5hZGQoaW50KGluZGV4KSkKICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBUcnVlCgogICAgICAgIGlmIG5vdCBtYXRjaGVkOgogICAgICAgICAgICByZW1haW5kZXIuYXBwZW5kKGl0ZW0pCgogICAgIyBGb3JtIGNvbGxlY3Rpb25zLgogICAgbWVyZ2VfY2FuZGlkYXRlcyA9IFtdCiAgICBmb3IgKGhlYWQsIHRhaWwsIHBhZGRpbmcpLCBpbmRleGVzIGluIGNvbGxlY3Rpb25fbWFwLml0ZW1zKCk6CiAgICAgICAgY29sbGVjdGlvbiA9IENvbGxlY3Rpb24oaGVhZCwgdGFpbCwgcGFkZGluZywgaW5kZXhlcykKICAgICAgICBjb2xsZWN0aW9ucy5hcHBlbmQoY29sbGVjdGlvbikKCiAgICAgICAgaWYgY29sbGVjdGlvbi5wYWRkaW5nID09IDA6CiAgICAgICAgICAgIG1lcmdlX2NhbmRpZGF0ZXMuYXBwZW5kKGNvbGxlY3Rpb24pCgogICAgIyBNZXJnZSB0b2dldGhlciBjb2xsZWN0aW9ucyB0aGF0IGFsaWduIG9uIHBhZGRpbmcgYm91bmRhcmllcy4gRm9yIGV4YW1wbGUsCiAgICAjIDA5OTgtMDk5OSBhbmQgMTAwMC0xMDAxIGNhbiBiZSBtZXJnZWQgaW50byAwOTk4LTEwMDEuIE5vdGUgdGhhdCBvbmx5CiAgICAjIGluZGV4ZXMgd2l0aGluIHRoZSBwYWRkaW5nIHdpZHRoIGxpbWl0IGFyZSBtZXJnZWQuIElmIGEgY29sbGVjdGlvbiBpcwogICAgIyBlbnRpcmVseSBtZXJnZWQgaW50byBhbm90aGVyIHRoZW4gaXQgd2lsbCBub3QgYmUgaW5jbHVkZWQgYXMgYSBzZXBhcmF0ZQogICAgIyBjb2xsZWN0aW9uIGluIHRoZSByZXN1bHRzLgogICAgZnVsbHlfbWVyZ2VkID0gW10KICAgIGZvciBjb2xsZWN0aW9uIGluIGNvbGxlY3Rpb25zOgogICAgICAgIGlmIGNvbGxlY3Rpb24ucGFkZGluZyA9PSAwOgogICAgICAgICAgICBjb250aW51ZQoKICAgICAgICBmb3IgY2FuZGlkYXRlIGluIG1lcmdlX2NhbmRpZGF0ZXM6CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIGNhbmRpZGF0ZS5oZWFkID09IGNvbGxlY3Rpb24uaGVhZCBhbmQKICAgICAgICAgICAgICAgIGNhbmRpZGF0ZS50YWlsID09IGNvbGxlY3Rpb24udGFpbAogICAgICAgICAgICApOgogICAgICAgICAgICAgICAgbWVyZ2VkX2luZGV4X2NvdW50ID0gMAogICAgICAgICAgICAgICAgZm9yIGluZGV4IGluIGNhbmRpZGF0ZS5pbmRleGVzOgogICAgICAgICAgICAgICAgICAgIGlmIGxlbihzdHIoYWJzKGluZGV4KSkpID09IGNvbGxlY3Rpb24ucGFkZGluZzoKICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbi5pbmRleGVzLmFkZChpbmRleCkKICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VkX2luZGV4X2NvdW50ICs9IDEKCiAgICAgICAgICAgICAgICBpZiBtZXJnZWRfaW5kZXhfY291bnQgPT0gbGVuKGNhbmRpZGF0ZS5pbmRleGVzKToKICAgICAgICAgICAgICAgICAgICBmdWxseV9tZXJnZWQuYXBwZW5kKGNhbmRpZGF0ZSkKCiAgICAjIEZpbHRlciBvdXQgZnVsbHkgbWVyZ2VkIGNvbGxlY3Rpb25zLgogICAgY29sbGVjdGlvbnMgPSBbY29sbGVjdGlvbiBmb3IgY29sbGVjdGlvbiBpbiBjb2xsZWN0aW9ucwogICAgICAgICAgICAgICAgICAgaWYgY29sbGVjdGlvbiBub3QgaW4gZnVsbHlfbWVyZ2VkXQoKICAgICMgRmlsdGVyIG91dCBjb2xsZWN0aW9ucyB0aGF0IGRvIG5vdCBoYXZlIGF0IGxlYXN0IGFzIG1hbnkgaW5kZXhlcyBhcwogICAgIyBtaW5pbXVtX2l0ZW1zLiBJbiBhZGRpdGlvbiwgYWRkIGFueSBtZW1iZXJzIG9mIGEgZmlsdGVyZWQgY29sbGVjdGlvbiwKICAgICMgd2hpY2ggYXJlIG5vdCBtZW1iZXJzIG9mIGFuIHVuZmlsdGVyZWQgY29sbGVjdGlvbiwgdG8gdGhlIHJlbWFpbmRlci4KICAgIGZpbHRlcmVkID0gW10KICAgIHJlbWFpbmRlcl9jYW5kaWRhdGVzID0gW10KICAgIGZvciBjb2xsZWN0aW9uIGluIGNvbGxlY3Rpb25zOgogICAgICAgIGlmIGxlbihjb2xsZWN0aW9uLmluZGV4ZXMpID49IG1pbmltdW1faXRlbXM6CiAgICAgICAgICAgIGZpbHRlcmVkLmFwcGVuZChjb2xsZWN0aW9uKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gY29sbGVjdGlvbjoKICAgICAgICAgICAgICAgIHJlbWFpbmRlcl9jYW5kaWRhdGVzLmFwcGVuZChtZW1iZXIpCgogICAgZm9yIGNhbmRpZGF0ZSBpbiByZW1haW5kZXJfY2FuZGlkYXRlczoKICAgICAgICAjIENoZWNrIGlmIGNhbmRpZGF0ZSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHJlbWFpbmRlciB0byBhdm9pZAogICAgICAgICMgZHVwbGljYXRlIGVudHJpZXMuCiAgICAgICAgaWYgY2FuZGlkYXRlIGluIHJlbWFpbmRlcjoKICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgaGFzX21lbWJlcnNoaXAgPSBGYWxzZQoKICAgICAgICBmb3IgY29sbGVjdGlvbiBpbiBmaWx0ZXJlZDoKICAgICAgICAgICAgaWYgY2FuZGlkYXRlIGluIGNvbGxlY3Rpb246CiAgICAgICAgICAgICAgICBoYXNfbWVtYmVyc2hpcCA9IFRydWUKICAgICAgICAgICAgICAgIGJyZWFrCgogICAgICAgIGlmIG5vdCBoYXNfbWVtYmVyc2hpcDoKICAgICAgICAgICAgcmVtYWluZGVyLmFwcGVuZChjYW5kaWRhdGUpCgogICAgIyBTZXQgcGFkZGluZyBmb3IgYWxsIGFtYmlndW91cyBjb2xsZWN0aW9ucyBhY2NvcmRpbmcgdG8gdGhlCiAgICAjIGFzc3VtZV9wYWRkZWRfd2hlbl9hbWJpZ3VvdXMgc2V0dGluZy4KICAgIGlmIGFzc3VtZV9wYWRkZWRfd2hlbl9hbWJpZ3VvdXM6CiAgICAgICAgZm9yIGNvbGxlY3Rpb24gaW4gZmlsdGVyZWQ6CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIG5vdCBjb2xsZWN0aW9uLnBhZGRpbmcgYW5kIGNvbGxlY3Rpb24uaW5kZXhlcwogICAgICAgICAgICApOgogICAgICAgICAgICAgICAgaW5kZXhlcyA9IGxpc3QoY29sbGVjdGlvbi5pbmRleGVzKQogICAgICAgICAgICAgICAgZmlyc3RfaW5kZXhfd2lkdGggPSBsZW4oc3RyKGluZGV4ZXNbMF0pKQogICAgICAgICAgICAgICAgbGFzdF9pbmRleF93aWR0aCA9IGxlbihzdHIoaW5kZXhlc1stMV0pKQogICAgICAgICAgICAgICAgaWYgZmlyc3RfaW5kZXhfd2lkdGggPT0gbGFzdF9pbmRleF93aWR0aDoKICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLnBhZGRpbmcgPSBmaXJzdF9pbmRleF93aWR0aAoKICAgIHJldHVybiBmaWx0ZXJlZCwgcmVtYWluZGVyCgoKZGVmIHBhcnNlKHZhbHVlLCBwYXR0ZXJuPSd7aGVhZH17cGFkZGluZ317dGFpbH0gW3tyYW5nZXN9XScpOgogICAgJycnUGFyc2UgKnZhbHVlKiBpbnRvIGEgOnB5OmNsYXNzOmB+Y2xpcXVlLmNvbGxlY3Rpb24uQ29sbGVjdGlvbmAuCgogICAgVXNlICpwYXR0ZXJuKiB0byBleHRyYWN0IGluZm9ybWF0aW9uIGZyb20gKnZhbHVlKi4gSXQgbWF5IG1ha2UgdXNlIG9mIHRoZQogICAgZm9sbG93aW5nIGtleXM6CgogICAgICAgICogKmhlYWQqIC0gQ29tbW9uIGxlYWRpbmcgcGFydCBvZiB0aGUgY29sbGVjdGlvbi4KICAgICAgICAqICp0YWlsKiAtIENvbW1vbiB0cmFpbGluZyBwYXJ0IG9mIHRoZSBjb2xsZWN0aW9uLgogICAgICAgICogKnBhZGRpbmcqIC0gUGFkZGluZyB2YWx1ZSBpbiBgYCUwZGBgIGZvcm1hdC4KICAgICAgICAqICpyYW5nZSogLSBUb3RhbCByYW5nZSBpbiB0aGUgZm9ybSBgYHN0YXJ0LWVuZGBgLgogICAgICAgICogKnJhbmdlcyogLSBDb21tYSBzZXBhcmF0ZWQgcmFuZ2VzIG9mIGluZGV4ZXMuCiAgICAgICAgKiAqaG9sZXMqIC0gQ29tbWEgc2VwYXJhdGVkIHJhbmdlcyBvZiBtaXNzaW5nIGluZGV4ZXMuCgogICAgLi4gbm90ZTo6CgogICAgICAgICpob2xlcyogb25seSBtYWtlcyBzZW5zZSBpZiAqcmFuZ2UqIG9yICpyYW5nZXMqIGlzIGFsc28gcHJlc2VudC4KCiAgICAnJycKICAgICMgQ29uc3RydWN0IHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgZ2l2ZW4gcGF0dGVybi4KICAgIGV4cHJlc3Npb25zID0gewogICAgICAgICdoZWFkJzogJyg/UDxoZWFkPi4qKScsCiAgICAgICAgJ3RhaWwnOiAnKD9QPHRhaWw+LiopJywKICAgICAgICAncGFkZGluZyc6ICclKD9QPHBhZGRpbmc+XGQqKWQnLAogICAgICAgICdyYW5nZSc6ICcoP1A8cmFuZ2U+XGQrLVxkKyk/JywKICAgICAgICAncmFuZ2VzJzogJyg/UDxyYW5nZXM+W1xkICxcLV0rKT8nLAogICAgICAgICdob2xlcyc6ICcoP1A8aG9sZXM+W1xkICxcLV0rKScKICAgIH0KCiAgICBwYXR0ZXJuX3JlZ2V4ID0gcmUuZXNjYXBlKHBhdHRlcm4pCiAgICBmb3Iga2V5LCBleHByZXNzaW9uIGluIGV4cHJlc3Npb25zLml0ZW1zKCk6CiAgICAgICAgcGF0dGVybl9yZWdleCA9IHBhdHRlcm5fcmVnZXgucmVwbGFjZSgKICAgICAgICAgICAgJ1x7e3swfVx9fScuZm9ybWF0KGtleSksCiAgICAgICAgICAgIGV4cHJlc3Npb24KICAgICAgICApCiAgICBwYXR0ZXJuX3JlZ2V4ID0gJ157MH0kJy5mb3JtYXQocGF0dGVybl9yZWdleCkKCiAgICAjIE1hdGNoIHBhdHRlcm4gYWdhaW5zdCB2YWx1ZSBhbmQgdXNlIHJlc3VsdHMgdG8gY29uc3RydWN0IGNvbGxlY3Rpb24uCiAgICBtYXRjaCA9IHJlLnNlYXJjaChwYXR0ZXJuX3JlZ2V4LCB2YWx1ZSkKICAgIGlmIG1hdGNoIGlzIE5vbmU6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVmFsdWUgZGlkIG5vdCBtYXRjaCBwYXR0ZXJuLicpCgogICAgZ3JvdXBzID0gbWF0Y2guZ3JvdXBkaWN0KCkKICAgIGlmICdwYWRkaW5nJyBpbiBncm91cHMgYW5kIGdyb3Vwc1sncGFkZGluZyddOgogICAgICAgIGdyb3Vwc1sncGFkZGluZyddID0gaW50KGdyb3Vwc1sncGFkZGluZyddKQogICAgZWxzZToKICAgICAgICBncm91cHNbJ3BhZGRpbmcnXSA9IDAKCiAgICAjIENyZWF0ZSBjb2xsZWN0aW9uIGFuZCB0aGVuIGFkZCBpbmRleGVzLgogICAgY29sbGVjdGlvbiA9IENvbGxlY3Rpb24oCiAgICAgICAgZ3JvdXBzLmdldCgnaGVhZCcsICcnKSwKICAgICAgICBncm91cHMuZ2V0KCd0YWlsJywgJycpLAogICAgICAgIGdyb3Vwc1sncGFkZGluZyddCiAgICApCgogICAgaWYgZ3JvdXBzLmdldCgncmFuZ2UnLCBOb25lKSBpcyBub3QgTm9uZToKICAgICAgICBzdGFydCwgZW5kID0gbWFwKGludCwgZ3JvdXBzWydyYW5nZSddLnNwbGl0KCctJykpCiAgICAgICAgY29sbGVjdGlvbi5pbmRleGVzLnVwZGF0ZShyYW5nZShzdGFydCwgZW5kICsgMSkpCgogICAgaWYgZ3JvdXBzLmdldCgncmFuZ2VzJywgTm9uZSkgaXMgbm90IE5vbmU6CiAgICAgICAgcGFydHMgPSBbcGFydC5zdHJpcCgpIGZvciBwYXJ0IGluIGdyb3Vwc1sncmFuZ2VzJ10uc3BsaXQoJywnKV0KICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKICAgICAgICAgICAgaW5kZXhfcmFuZ2UgPSBsaXN0KG1hcChpbnQsIHBhcnQuc3BsaXQoJy0nLCAyKSkpCgogICAgICAgICAgICBpZiBsZW4oaW5kZXhfcmFuZ2UpID4gMToKICAgICAgICAgICAgICAgICMgSW5kZXggcmFuZ2UuCiAgICAgICAgICAgICAgICBmb3IgaW5kZXggaW4gcmFuZ2UoaW5kZXhfcmFuZ2VbMF0sIGluZGV4X3JhbmdlWzFdICsgMSk6CiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbi5pbmRleGVzLmFkZChpbmRleCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICMgU2luZ2xlIGluZGV4LgogICAgICAgICAgICAgICAgY29sbGVjdGlvbi5pbmRleGVzLmFkZChpbmRleF9yYW5nZVswXSkKCiAgICBpZiAnaG9sZXMnIGluIGdyb3VwczoKICAgICAgICBwYXJ0cyA9IFtwYXJ0LnN0cmlwKCkgZm9yIHBhcnQgaW4gZ3JvdXBzWydob2xlcyddLnNwbGl0KCcsJyldCiAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6CiAgICAgICAgICAgIGluZGV4X3JhbmdlID0gbWFwKGludCwgcGFydC5zcGxpdCgnLScsIDIpKQoKICAgICAgICAgICAgaWYgbGVuKGluZGV4X3JhbmdlKSA+IDE6CiAgICAgICAgICAgICAgICAjIEluZGV4IHJhbmdlLgogICAgICAgICAgICAgICAgZm9yIGluZGV4IGluIHJhbmdlKGluZGV4X3JhbmdlWzBdLCBpbmRleF9yYW5nZVsxXSArIDEpOgogICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24uaW5kZXhlcy5yZW1vdmUoaW5kZXgpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAjIFNpbmdsZSBpbmRleC4KICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24uaW5kZXhlcy5yZW1vdmUoaW5kZXhfcmFuZ2VbMF0pCgogICAgcmV0dXJuIGNvbGxlY3Rpb24KPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIGhlYWQgPSBpdGVtWzptYXRjaC5zdGFydCgnaW5kZXgnKV0KICAgICAgICAgICAgICAgIHRhaWwgPSBpdGVtW21hdGNoLmVuZCgnaW5kZXgnKTpdCgogICAgICAgICAgICAgICAgaWYgbm90IGNhc2Vfc2Vuc2l0aXZlOgo8fGZpbV9lbmR8Pg=="]
["6be7e2240e714d30316eaefeb5a4a681e9158756-1","6be7e2240e714d30316eaefeb5a4a681e9158756","PHxmaW1fcHJlZml4fD4KIiIi5YKo5a2Y5LiA5Lqb6Leo5paH5Lu255qE5bi46YeP77yM5pa55L6/57uf5LiA5L+u5pS5IiIiCmNoaWxkX2Zsb3dzX2tleSA9ICJjaGlsZF9mbG93czp7fSIKIyBmbG93X2lkLCDlgLzkuLpsaXN057O75YiX5YyW5ZCO55qEc3Ry57G75Z6LOue8k+WtmOWtkOa1geeoi+S/oeaBrwoKY2FjaGVfa2V5ID0gImNhY2hlOnt9IgojIGRldmljZV9pZCwg5YC85Li6ZGljdOezu+WIl+WMluWQjnN0cuexu+Wei++8mue8k+WtmOa1geeoi+S/oeaBrwoKdW5rbm93bl9rZXkgPSAidW5rbm93bjp7fSIKIyBkZXZpY2VfaWQsIOWAvOS4umludOexu+Wei++8mue8k+WtmOaXoOazleWbnuetlOeahOasoeaVsAoKY3JvbnRhYl9rZXkgPSAiY3JvbnRhYjp7fS17fSIKIyBkZXZpY2VfaWQsIOWAvOS4umRpY3Tns7vliJfljJblkI5zdHLnsbvlnovvvJrlrprml7bku7vliqHnvJPlrZgKCnJvYm90X2luZm9fa2V5ID0gInJvYm90X2luZm86e30iCiMgZGV2aWNlX2lkLCDlgLzkuLpkaWN077ya5py65Zmo5Lq65L+h5oGv57yT5a2YCgpicm9hZGNhc3Rfa2V5ID0gImJyb2FkY2FzdDp7fSIKIyBkZXZpY2VfaWTvvJog5Y2O5Lic5a2m6Zmi6YCB56uZ5bm/5pKt5L+h5oGv57yT5a2YCjx8ZmltX2hvbGV8PgojIHNlc3Npb25faWQsIOWAvOS4umxpc3Q66Zeu562U5pel5b+X57yT5a2YCgojIHVzZXJfa2V5ID0gInVzZXI6e30iCiMgZGV2aWNlX2lk77yaIOeUqOaIt+S/oeaBr+e8k+WtmAoKc3RhdHVzX2tleSA9ICJkZXZpY2Vfc3RhdHVzOnt9Ont9IgojIHN1YnN5c3RlbV9pZCwgZGV2aWNlX2lkLCDlgLzkuLpkaWN077yaIOiuvuWkh+eKtuaAgee8k+WtmAoKc3RvcF9yZXNwID0gWyLlubjlpb3mnInkvaAs5beu54K55YGc5LiN5LiL5p2l5LqGIiwgIuWlveeahCIsICLmgqjov5jmnInliKvnmoTlkKnlkpDlkJciLCAi5ZOmIl0KCkZNVCA9ICIlWS0lbS0lZCAlSDolTTolUyIKbG9nX25hbWVfa2VlcF9hbGl2ZSA9ICJrZWVwX2FsaXZlIgpsb2dfbmFtZV9tYWluID0gIm1haW4iCmxvZ19uYW1lX3RpbWVyID0gInRpbWVyIgpsb2dfbmFtZV9zb2NrZXRpbyA9ICJzb2NrZXRpbyIKCnNlcCA9ICJ8Igpjb21tID0gIndheV9jb21tb25fc3Vic3lzdGVtIiAgIyDlhazlhbHlrZDns7vnu58KZW0gPSAnPHNwYW4gY2xhc3M9InllbGxvd0ZvbnQiPnt9PC9zcGFuPicKY3NzID0gIiIiPGRpdiBjbGFzcz0ic2ltcGxlU2VudCI+PGRpdiBjbGFzcz0ic2ltcGxlY291bnQiPgo8ZGl2IGNsYXNzPSJjb21tYWxlZnQiPjwvZGl2Pgp7fQo8ZGl2IGNsYXNzPSJjb21tYXJpZ2h0Ij48L2Rpdj4KPC9kaXY+PC9kaXY+IiIiCgpub3VuX2NhY2hlX2tleSA9ICJub3VuOnt9IgojIOWQjeivjee8k+WtmOmUruWAvCBrZXk9bm91bjp7ZGV2aWNlX2lkfTsg5YC85qC85byP5Li65a2X56ym5LiyIGpzb24uZHVtcChbWyfljJfkuqwnLCflpKnlronpl6gnXSxbJ+WkqumYsyddLFsn6KW/55OcJ11dKSDliJfooajmnIDlkI7kuIDkuKrmnIDmlrAKPHxmaW1fc3VmZml4fD4Kc3RhZmZfa2V5ID0gIndheV9zdGFmZl97fTp7fSIKIyBzdWJzeXN0ZW1faWQsIHN0YWZmX2lkLCDlgLzkuLpzZXQo5o6l566hZGV2aWNlX2lkMSxkZXZpY2VfaWQyLi4uKe+8muWRmOW3peS/oeaBryvmjqXnrqHnmoTmnLrlmahpZAoKbG9nX2tleSA9ICJsb2dzOnt9Igo8fGZpbV9lbmR8Pg=="]
["ec4b98acc4675e76d481f763036d3058a3080b10-1","ec4b98acc4675e76d481f763036d3058a3080b10","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbiwgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCBjb3B5CmltcG9ydCBvcwppbXBvcnQgdGltZQoKaW1wb3J0IHRvcmNoCmltcG9ydCB0b3JjaC5ubiBhcyBubgppbXBvcnQgdG9yY2gub3B0aW0gYXMgb3B0aW0KZnJvbSBza2xlYXJuLm1ldHJpY3MgaW1wb3J0IGNsYXNzaWZpY2F0aW9uX3JlcG9ydApmcm9tIHRvcmNoLnV0aWxzLmRhdGEgaW1wb3J0IERhdGFMb2FkZXIKZnJvbSB0b3JjaHZpc2lvbiBpbXBvcnQgZGF0YXNldHMsIHRyYW5zZm9ybXMKCmZyb20gbW9kZWxzIGltcG9ydCBpbml0aWFsaXplX21vZGVsCgojICAgdG8gdGhlIEltYWdlRm9sZGVyIHN0cnVjdHVyZQpkYXRhX2RpciA9ICJkYXRhIgojIE1vZGVscyB0byBjaG9vc2UgZnJvbSBbcmVzbmV0LCBhbGV4bmV0LCB2Z2csIHNxdWVlemVuZXQsIGRlbnNlbmV0LCBpbmNlcHRpb25dCm1vZGVsX25hbWUgPSAic3F1ZWV6ZW5ldCIKIyBOdW1iZXIgb2YgY2xhc3NlcyBpbiB0aGUgZGF0YXNldApudW1fY2xhc3NlcyA9IDEwCiMgQmF0Y2ggc2l6ZSBmb3IgdHJhaW5pbmcgKGNoYW5nZSBkZXBlbmRpbmcgb24gaG93IG11Y2ggbWVtb3J5IHlvdSBoYXZlKQpiYXRjaF9zaXplID0gMjU2CiMgTnVtYmVyIG9mIGVwb2NocyB0byB0cmFpbiBmb3IgCm51bV9lcG9jaHMgPSAyMAojIEZsYWcgZm9yIGZlYXR1cmUgZXh0cmFjdGluZy4gV2hlbiBGYWxzZSwgd2UgZmluZXR1bmUgdGhlIHdob2xlIG1vZGVsLCAKIyAgIHdoZW4gVHJ1ZSB3ZSBvbmx5IHVwZGF0ZSB0aGUgcmVzaGFwZWQgbGF5ZXIgcGFyYW1zCmZlYXR1cmVfZXh0cmFjdCA9IFRydWUKCgpkZWYgdHJhaW5fbW9kZWwobW9kZWwsIGRhdGFsb2FkZXJzLCBjcml0ZXJpb24sIG9wdGltaXplciwgbnVtX2Vwb2Nocz0yNSwgaXNfaW5jZXB0aW9uPUZhbHNlKToKICAgIHNpbmNlID0gdGltZS50aW1lKCkKCiAgICB2YWxfYWNjX2hpc3RvcnkgPSBbXQoKICAgIGJlc3RfbW9kZWxfd3RzID0gY29weS5kZWVwY29weShtb2RlbC5zdGF0ZV9kaWN0KCkpCiAgICBiZXN0X2FjYyA9IDAuMAoKICAgIGZvciBlcG9jaCBpbiByYW5nZShudW1fZXBvY2hzKToKICAgICAgICBwcmludCgnRXBvY2gge30ve30nLmZvcm1hdChlcG9jaCwgbnVtX2Vwb2NocyAtIDEpKQogICAgICAgIHByaW50KCctJyAqIDEwKQoKICAgICAgICAjIEVhY2ggZXBvY2ggaGFzIGEgdHJhaW5pbmcgYW5kIHZhbGlkYXRpb24gcGhhc2UKICAgICAgICBmb3IgcGhhc2UgaW4gWyd0cmFpbicsICd2YWxpZGF0aW9uJ106CiAgICAgICAgICAgIGlmIHBoYXNlID09ICd0cmFpbic6CiAgICAgICAgICAgICAgICBtb2RlbC50cmFpbigpICAjIFNldCBtb2RlbCB0byB0cmFpbmluZyBtb2RlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBtb2RlbC5ldmFsKCkgICAjIFNldCBtb2RlbCB0byBldmFsdWF0ZSBtb2RlCgogICAgICAgICAgICBydW5uaW5nX2xvc3MgPSAwLjAKICAgICAgICAgICAgcnVubmluZ19jb3JyZWN0cyA9IDAKCiAgICAgICAgICAgICMgSXRlcmF0ZSBvdmVyIGRhdGEuCiAgICAgICAgICAgIGZvciBpbnB1dHMsIGxhYmVscyBpbiBkYXRhbG9hZGVyc1twaGFzZV06CiAgICAgICAgICAgICAgICBpbnB1dHMgPSBpbnB1dHMudG8oZGV2aWNlKQogICAgICAgICAgICAgICAgbGFiZWxzID0gbGFiZWxzLnRvKGRldmljZSkKCiAgICAgICAgICAgICAgICAjIHplcm8gdGhlIHBhcmFtZXRlciBncmFkaWVudHMKICAgICAgICAgICAgICAgIG9wdGltaXplci56ZXJvX2dyYWQoKQoKICAgICAgICAgICAgICAgICMgZm9yd2FyZAogICAgICAgICAgICAgICAgIyB0cmFjayBoaXN0b3J5IGlmIG9ubHkgaW4gdHJhaW4KICAgICAgICAgICAgICAgIHdpdGggdG9yY2guc2V0X2dyYWRfZW5hYmxlZChwaGFzZSA9PSAndHJhaW4nKToKICAgICAgICAgICAgICAgICAgICAjIEdldCBtb2RlbCBvdXRwdXRzIGFuZCBjYWxjdWxhdGUgbG9zcwogICAgICAgICAgICAgICAgICAgICMgU3BlY2lhbCBjYXNlIGZvciBpbmNlcHRpb24gYmVjYXVzZSBpbiB0cmFpbmluZyBpdCBoYXMgYW4gYXV4aWxpYXJ5IG91dHB1dC4gSW4gdHJhaW4KICAgICAgICAgICAgICAgICAgICAjICAgbW9kZSB3ZSBjYWxjdWxhdGUgdGhlIGxvc3MgYnkgc3VtbWluZyB0aGUgZmluYWwgb3V0cHV0IGFuZCB0aGUgYXV4aWxpYXJ5IG91dHB1dAogICAgICAgICAgICAgICAgICAgICMgICBidXQgaW4gdGVzdGluZyB3ZSBvbmx5IGNvbnNpZGVyIHRoZSBmaW5hbCBvdXRwdXQuCiAgICAgICAgICAgICAgICAgICAgaWYgaXNfaW5jZXB0aW9uIGFuZCBwaGFzZSA9PSAndHJhaW4nOgogICAgICAgICAgICAgICAgICAgICAgICAjIEZyb20gaHR0cHM6Ly9kaXNjdXNzLnB5dG9yY2gub3JnL3QvaG93LXRvLW9wdGltaXplLWluY2VwdGlvbi1tb2RlbC13aXRoLWF1eGlsaWFyeS1jbGFzc2lmaWVycy83OTU4CiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dHMsIGF1eF9vdXRwdXRzID0gbW9kZWwoaW5wdXRzKQogICAgICAgICAgICAgICAgICAgICAgICBsb3NzMSA9IGNyaXRlcmlvbihvdXRwdXRzLCBsYWJlbHMpCiAgICAgICAgICAgICAgICAgICAgICAgIGxvc3MyID0gY3JpdGVyaW9uKGF1eF9vdXRwdXRzLCBsYWJlbHMpCiAgICAgICAgICAgICAgICAgICAgICAgIGxvc3MgPSBsb3NzMSArIDAuNCpsb3NzMgogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dHMgPSBtb2RlbChpbnB1dHMpCiAgICAgICAgICAgICAgICAgICAgICAgIGxvc3MgPSBjcml0ZXJpb24ob3V0cHV0cywgbGFiZWxzKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgIF8sIHByZWRzID0gdG9yY2gubWF4KG91dHB1dHMsIDEpCgogICAgICAgICAgICAgICAgICAgICMgYmFja3dhcmQgKyBvcHRpbWl6ZSBvbmx5IGlmIGluIHRyYWluaW5nIHBoYXNlCiAgICAgICAgICAgICAgICAgICAgaWYgcGhhc2UgPT0gJ3RyYWluJzoKPHxmaW1fZW5kfD4="]
["ec4b98acc4675e76d481f763036d3058a3080b10-2","ec4b98acc4675e76d481f763036d3058a3080b10","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbiwgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCBjb3B5CmltcG9ydCBvcwppbXBvcnQgdGltZQoKaW1wb3J0IHRvcmNoCmltcG9ydCB0b3JjaC5ubiBhcyBubgppbXBvcnQgdG9yY2gub3B0aW0gYXMgb3B0aW0KZnJvbSBza2xlYXJuLm1ldHJpY3MgaW1wb3J0IGNsYXNzaWZpY2F0aW9uX3JlcG9ydApmcm9tIHRvcmNoLnV0aWxzLmRhdGEgaW1wb3J0IERhdGFMb2FkZXIKZnJvbSB0b3JjaHZpc2lvbiBpbXBvcnQgZGF0YXNldHMsIHRyYW5zZm9ybXMKCmZyb20gbW9kZWxzIGltcG9ydCBpbml0aWFsaXplX21vZGVsCgojICAgdG8gdGhlIEltYWdlRm9sZGVyIHN0cnVjdHVyZQpkYXRhX2RpciA9ICJkYXRhIgojIE1vZGVscyB0byBjaG9vc2UgZnJvbSBbcmVzbmV0LCBhbGV4bmV0LCB2Z2csIHNxdWVlemVuZXQsIGRlbnNlbmV0LCBpbmNlcHRpb25dCm1vZGVsX25hbWUgPSAic3F1ZWV6ZW5ldCIKIyBOdW1iZXIgb2YgY2xhc3NlcyBpbiB0aGUgZGF0YXNldApudW1fY2xhc3NlcyA9IDEwCiMgQmF0Y2ggc2l6ZSBmb3IgdHJhaW5pbmcgKGNoYW5nZSBkZXBlbmRpbmcgb24gaG93IG11Y2ggbWVtb3J5IHlvdSBoYXZlKQpiYXRjaF9zaXplID0gMjU2CiMgTnVtYmVyIG9mIGVwb2NocyB0byB0cmFpbiBmb3IgCm51bV9lcG9jaHMgPSAyMAojIEZsYWcgZm9yIGZlYXR1cmUgZXh0cmFjdGluZy4gV2hlbiBGYWxzZSwgd2UgZmluZXR1bmUgdGhlIHdob2xlIG1vZGVsLCAKIyAgIHdoZW4gVHJ1ZSB3ZSBvbmx5IHVwZGF0ZSB0aGUgcmVzaGFwZWQgbGF5ZXIgcGFyYW1zCmZlYXR1cmVfZXh0cmFjdCA9IFRydWUKCgpkZWYgdHJhaW5fbW9kZWwobW9kZWwsIGRhdGFsb2FkZXJzLCBjcml0ZXJpb24sIG9wdGltaXplciwgbnVtX2Vwb2Nocz0yNSwgaXNfaW5jZXB0aW9uPUZhbHNlKToKICAgIHNpbmNlID0gdGltZS50aW1lKCkKCiAgICB2YWxfYWNjX2hpc3RvcnkgPSBbXQoKICAgIGJlc3RfbW9kZWxfd3RzID0gY29weS5kZWVwY29weShtb2RlbC5zdGF0ZV9kaWN0KCkpCiAgICBiZXN0X2FjYyA9IDAuMAoKICAgIGZvciBlcG9jaCBpbiByYW5nZShudW1fZXBvY2hzKToKICAgICAgICBwcmludCgnRXBvY2gge30ve30nLmZvcm1hdChlcG9jaCwgbnVtX2Vwb2NocyAtIDEpKQogICAgICAgIHByaW50KCctJyAqIDEwKQoKICAgICAgICAjIEVhY2ggZXBvY2ggaGFzIGEgdHJhaW5pbmcgYW5kIHZhbGlkYXRpb24gcGhhc2UKICAgICAgICBmb3IgcGhhc2UgaW4gWyd0cmFpbicsICd2YWxpZGF0aW9uJ106CiAgICAgICAgICAgIGlmIHBoYXNlID09ICd0cmFpbic6CiAgICAgICAgICAgICAgICBtb2RlbC50cmFpbigpICAjIFNldCBtb2RlbCB0byB0cmFpbmluZyBtb2RlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBtb2RlbC5ldmFsKCkgICAjIFNldCBtb2RlbCB0byBldmFsdWF0ZSBtb2RlCgogICAgICAgICAgICBydW5uaW5nX2xvc3MgPSAwLjAKICAgICAgICAgICAgcnVubmluZ19jb3JyZWN0cyA9IDAKCiAgICAgICAgICAgICMgSXRlcmF0ZSBvdmVyIGRhdGEuCiAgICAgICAgICAgIGZvciBpbnB1dHMsIGxhYmVscyBpbiBkYXRhbG9hZGVyc1twaGFzZV06CiAgICAgICAgICAgICAgICBpbnB1dHMgPSBpbnB1dHMudG8oZGV2aWNlKQogICAgICAgICAgICAgICAgbGFiZWxzID0gbGFiZWxzLnRvKGRldmljZSkKCiAgICAgICAgICAgICAgICAjIHplcm8gdGhlIHBhcmFtZXRlciBncmFkaWVudHMKICAgICAgICAgICAgICAgIG9wdGltaXplci56ZXJvX2dyYWQoKQoKICAgICAgICAgICAgICAgICMgZm9yd2FyZAogICAgICAgICAgICAgICAgIyB0cmFjayBoaXN0b3J5IGlmIG9ubHkgaW4gdHJhaW4KICAgICAgICAgICAgICAgIHdpdGggdG9yY2guc2V0X2dyYWRfZW5hYmxlZChwaGFzZSA9PSAndHJhaW4nKToKICAgICAgICAgICAgICAgICAgICAjIEdldCBtb2RlbCBvdXRwdXRzIGFuZCBjYWxjdWxhdGUgbG9zcwogICAgICAgICAgICAgICAgICAgICMgU3BlY2lhbCBjYXNlIGZvciBpbmNlcHRpb24gYmVjYXVzZSBpbiB0cmFpbmluZyBpdCBoYXMgYW4gYXV4aWxpYXJ5IG91dHB1dC4gSW4gdHJhaW4KICAgICAgICAgICAgICAgICAgICAjICAgbW9kZSB3ZSBjYWxjdWxhdGUgdGhlIGxvc3MgYnkgc3VtbWluZyB0aGUgZmluYWwgb3V0cHV0IGFuZCB0aGUgYXV4aWxpYXJ5IG91dHB1dAogICAgICAgICAgICAgICAgICAgICMgICBidXQgaW4gdGVzdGluZyB3ZSBvbmx5IGNvbnNpZGVyIHRoZSBmaW5hbCBvdXRwdXQuCiAgICAgICAgICAgICAgICAgICAgaWYgaXNfaW5jZXB0aW9uIGFuZCBwaGFzZSA9PSAndHJhaW4nOgogICAgICAgICAgICAgICAgICAgICAgICAjIEZyb20gaHR0cHM6Ly9kaXNjdXNzLnB5dG9yY2gub3JnL3QvaG93LXRvLW9wdGltaXplLWluY2VwdGlvbi1tb2RlbC13aXRoLWF1eGlsaWFyeS1jbGFzc2lmaWVycy83OTU4CiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dHMsIGF1eF9vdXRwdXRzID0gbW9kZWwoaW5wdXRzKQogICAgICAgICAgICAgICAgICAgICAgICBsb3NzMSA9IGNyaXRlcmlvbihvdXRwdXRzLCBsYWJlbHMpCiAgICAgICAgICAgICAgICAgICAgICAgIGxvc3MyID0gY3JpdGVyaW9uKGF1eF9vdXRwdXRzLCBsYWJlbHMpCiAgICAgICAgICAgICAgICAgICAgICAgIGxvc3MgPSBsb3NzMSArIDAuNCpsb3NzMgogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dHMgPSBtb2RlbChpbnB1dHMpCiAgICAgICAgICAgICAgICAgICAgICAgIGxvc3MgPSBjcml0ZXJpb24ob3V0cHV0cywgbGFiZWxzKQoKICAgICAgICAgICAgICAgICAgICBfLCBwcmVkcyA9IHRvcmNoLm1heChvdXRwdXRzLCAxKQoKICAgICAgICAgICAgICAgICAgICAjIGJhY2t3YXJkICsgb3B0aW1pemUgb25seSBpZiBpbiB0cmFpbmluZyBwaGFzZQogICAgICAgICAgICAgICAgICAgIGlmIHBoYXNlID09ICd0cmFpbic6CiAgICAgICAgICAgICAgICAgICAgICAgIGxvc3MuYmFja3dhcmQoKQogICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZXIuc3RlcCgpCgogICAgICAgICAgICAgICAgIyBzdGF0aXN0aWNzCiAgICAgICAgICAgICAgICBydW5uaW5nX2xvc3MgKz0gbG9zcy5pdGVtKCkgKiBpbnB1dHMuc2l6ZSgwKQogICAgICAgICAgICAgICAgcnVubmluZ19jb3JyZWN0cyArPSB0b3JjaC5zdW0ocHJlZHMgPT0gbGFiZWxzLmRhdGEpCgogICAgICAgICAgICBlcG9jaF9sb3NzID0gcnVubmluZ19sb3NzIC8gbGVuKGRhdGFsb2FkZXJzW3BoYXNlXS5kYXRhc2V0KQogICAgICAgICAgICBlcG9jaF9hY2MgPSBydW5uaW5nX2NvcnJlY3RzLmRvdWJsZSgpIC8gbGVuKGRhdGFsb2FkZXJzW3BoYXNlXS5kYXRhc2V0KQoKICAgICAgICAgICAgcHJpbnQoJ3t9IExvc3M6IHs6LjRmfSBBY2M6IHs6LjRmfScuZm9ybWF0KHBoYXNlLCBlcG9jaF9sb3NzLCBlcG9jaF9hY2MpKQoKICAgICAgICAgICAgIyBkZWVwIGNvcHkgdGhlIG1vZGVsCiAgICAgICAgICAgIGlmIHBoYXNlID09ICd2YWxpZGF0aW9uJyBhbmQgZXBvY2hfYWNjID4gYmVzdF9hY2M6CiAgICAgICAgICAgICAgICBiZXN0X2FjYyA9IGVwb2NoX2FjYwogICAgICAgICAgICAgICAgYmVzdF9tb2RlbF93dHMgPSBjb3B5LmRlZXBjb3B5KG1vZGVsLnN0YXRlX2RpY3QoKSkKICAgICAgICAgICAgaWYgcGhhc2UgPT0gJ3ZhbGlkYXRpb24nOgogICAgICAgICAgICAgICAgdmFsX2FjY19oaXN0b3J5LmFwcGVuZChlcG9jaF9hY2MpCgogICAgICAgIHByaW50KCkKCiAgICB0aW1lX2VsYXBzZWQgPSB0aW1lLnRpbWUoKSAtIHNpbmNlCiAgICBwcmludCgnVHJhaW5pbmcgY29tcGxldGUgaW4gezouMGZ9bSB7Oi4wZn1zJy5mb3JtYXQodGltZV9lbGFwc2VkIC8vIDYwLCB0aW1lX2VsYXBzZWQgJSA2MCkpCiAgICBwcmludCgnQmVzdCB2YWwgQWNjOiB7OjRmfScuZm9ybWF0KGJlc3RfYWNjKSkKCiAgICAjIGxvYWQgYmVzdCBtb2RlbCB3ZWlnaHRzCiAgICBtb2RlbC5sb2FkX3N0YXRlX2RpY3QoYmVzdF9tb2RlbF93dHMpCiAgICByZXR1cm4gbW9kZWwsIHZhbF9hY2NfaGlzdG9yeQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAjIFRvcCBsZXZlbCBkYXRhIGRpcmVjdG9yeS4gSGVyZSB3ZSBhc3N1bWUgdGhlIGZvcm1hdCBvZiB0aGUgZGlyZWN0b3J5IGNvbmZvcm1zIAogICAgbW9kZWxfZnQsIGlucHV0X3NpemUgPSBpbml0aWFsaXplX21vZGVsKG1vZGVsX25hbWUsIG51bV9jbGFzc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVfZXh0cmFjdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX3ByZXRyYWluZWQ9VHJ1ZSkgIAogICAgIyBBc3N1bWluZyB0aGF0IHdlIGFyZSBvbiBhIENVREEgbWFjaGluZSwgdGhpcyBzaG91bGQgcHJpbnQgYSBDVURBIGRldmljZToKICAgIGRldmljZSA9IHRvcmNoLmRldmljZSgiY3VkYTowIiBpZiB0b3JjaC5jdWRhLmlzX2F2YWlsYWJsZSgpIGVsc2UgImNwdSIpCiAgICAjIERhdGEgYXVnbWVudGF0aW9uIGFuZCBub3JtYWxpemF0aW9uIGZvciB0cmFpbmluZwogICAgIyBKdXN0IG5vcm1hbGl6YXRpb24gZm9yIHZhbGlkYXRpb24KICAgIGRhdGFfdHJhbnNmb3JtcyA9IHsKICAgICAgICAndHJhaW4nOiB0cmFuc2Zvcm1zLkNvbXBvc2UoWwogICAgICAgICAgICB0cmFuc2Zvcm1zLlJhbmRvbVJlc2l6ZWRDcm9wKGlucHV0X3NpemUpLAogICAgICAgICAgICB0cmFuc2Zvcm1zLlJhbmRvbUhvcml6b250YWxGbGlwKCksCiAgICAgICAgICAgIHRyYW5zZm9ybXMuVG9UZW5zb3IoKSwKICAgICAgICAgICAgdHJhbnNmb3Jtcy5Ob3JtYWxpemUoWzAuNDg1LCAwLjQ1NiwgMC40MDZdLCBbMC4yMjksIDAuMjI0LCAwLjIyNV0pCiAgICAgICAgXSksCiAgICAgICAgJ3ZhbGlkYXRpb24nOiB0cmFuc2Zvcm1zLkNvbXBvc2UoWwogICAgICAgICAgICB0cmFuc2Zvcm1zLlJlc2l6ZShpbnB1dF9zaXplKSwKICAgICAgICAgICAgdHJhbnNmb3Jtcy5DZW50ZXJDcm9wKGlucHV0X3NpemUpLAogICAgICAgICAgICB0cmFuc2Zvcm1zLlRvVGVuc29yKCksCiAgICAgICAgICAgIHRyYW5zZm9ybXMuTm9ybWFsaXplKFswLjQ4NSwgMC40NTYsIDAuNDA2XSwgWzAuMjI5LCAwLjIyNCwgMC4yMjVdKQogICAgICAgIF0pLAogICAgfQoKICAgICMgQ3JlYXRlIHRyYWluaW5nIGFuZCB2YWxpZGF0aW9uIGRhdGFzZXRzCiAgICBpbWFnZV9kYXRhc2V0cyA9IHt4OiBkYXRhc2V0cy5JbWFnZUZvbGRlcihvcy5wYXRoLmpvaW4oZGF0YV9kaXIsIHgpLCBkYXRhX3RyYW5zZm9ybXNbeF0pIGZvciB4IGluIFsndHJhaW4nLCAndmFsaWRhdGlvbiddfQogICAgIyBDcmVhdGUgdHJhaW5pbmcgYW5kIHZhbGlkYXRpb24gZGF0YWxvYWRlcnMKICAgIGRhdGFsb2FkZXJzX2RpY3QgPSB7eDogRGF0YUxvYWRlcihpbWFnZV9kYXRhc2V0c1t4XSwgYmF0Y2hfc2l6ZT1iYXRjaF9zaXplLCBzaHVmZmxlPVRydWUsIG51bV93b3JrZXJzPTQpIGZvciB4IGluIFsndHJhaW4nLCAndmFsaWRhdGlvbiddfQogICAgIyBTZW5kIHRoZSBtb2RlbCB0byBHUFUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgbW9kZWxfZnQgPSBtb2RlbF9mdC50byhkZXZpY2UpCiAgICAjIEdhdGhlciB0aGUgcGFyYW1ldGVycyB0byBiZSBvcHRpbWl6ZWQvdXBkYXRlZCBpbiB0aGlzIHJ1bi4gSWYgd2UgYXJlCiAgICAjICBmaW5ldHVuaW5nIHdlIHdpbGwgYmUgdXBkYXRpbmcgYWxsIHBhcmFtZXRlcnMuIEhvd2V2ZXIsIGlmIHdlIGFyZSAKICAgICMgIGRvaW5nIGZlYXR1cmUgZXh0cmFjdCBtZXRob2QsIHdlIHdpbGwgb25seSB1cGRhdGUgdGhlIHBhcmFtZXRlcnMKPHxmaW1fZW5kfD4="]
["ec4b98acc4675e76d481f763036d3058a3080b10-3","ec4b98acc4675e76d481f763036d3058a3080b10","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbiwgcHJpbnRfZnVuY3Rpb24KCjx8ZmltX2hvbGV8PgppbXBvcnQgdG9yY2gKaW1wb3J0IHRvcmNoLm5uIGFzIG5uCmltcG9ydCB0b3JjaC5vcHRpbSBhcyBvcHRpbQpmcm9tIHNrbGVhcm4ubWV0cmljcyBpbXBvcnQgY2xhc3NpZmljYXRpb25fcmVwb3J0CmZyb20gdG9yY2gudXRpbHMuZGF0YSBpbXBvcnQgRGF0YUxvYWRlcgpmcm9tIHRvcmNodmlzaW9uIGltcG9ydCBkYXRhc2V0cywgdHJhbnNmb3JtcwoKZnJvbSBtb2RlbHMgaW1wb3J0IGluaXRpYWxpemVfbW9kZWwKCiMgICB0byB0aGUgSW1hZ2VGb2xkZXIgc3RydWN0dXJlCmRhdGFfZGlyID0gImRhdGEiCiMgTW9kZWxzIHRvIGNob29zZSBmcm9tIFtyZXNuZXQsIGFsZXhuZXQsIHZnZywgc3F1ZWV6ZW5ldCwgZGVuc2VuZXQsIGluY2VwdGlvbl0KbW9kZWxfbmFtZSA9ICJzcXVlZXplbmV0IgojIE51bWJlciBvZiBjbGFzc2VzIGluIHRoZSBkYXRhc2V0Cm51bV9jbGFzc2VzID0gMTAKIyBCYXRjaCBzaXplIGZvciB0cmFpbmluZyAoY2hhbmdlIGRlcGVuZGluZyBvbiBob3cgbXVjaCBtZW1vcnkgeW91IGhhdmUpCmJhdGNoX3NpemUgPSAyNTYKIyBOdW1iZXIgb2YgZXBvY2hzIHRvIHRyYWluIGZvciAKbnVtX2Vwb2NocyA9IDIwCiMgRmxhZyBmb3IgZmVhdHVyZSBleHRyYWN0aW5nLiBXaGVuIEZhbHNlLCB3ZSBmaW5ldHVuZSB0aGUgd2hvbGUgbW9kZWwsIAojICAgd2hlbiBUcnVlIHdlIG9ubHkgdXBkYXRlIHRoZSByZXNoYXBlZCBsYXllciBwYXJhbXMKZmVhdHVyZV9leHRyYWN0ID0gVHJ1ZQoKCmRlZiB0cmFpbl9tb2RlbChtb2RlbCwgZGF0YWxvYWRlcnMsIGNyaXRlcmlvbiwgb3B0aW1pemVyLCBudW1fZXBvY2hzPTI1LCBpc19pbmNlcHRpb249RmFsc2UpOgogICAgc2luY2UgPSB0aW1lLnRpbWUoKQoKICAgIHZhbF9hY2NfaGlzdG9yeSA9IFtdCgogICAgYmVzdF9tb2RlbF93dHMgPSBjb3B5LmRlZXBjb3B5KG1vZGVsLnN0YXRlX2RpY3QoKSkKICAgIGJlc3RfYWNjID0gMC4wCgogICAgZm9yIGVwb2NoIGluIHJhbmdlKG51bV9lcG9jaHMpOgogICAgICAgIHByaW50KCdFcG9jaCB7fS97fScuZm9ybWF0KGVwb2NoLCBudW1fZXBvY2hzIC0gMSkpCiAgICAgICAgcHJpbnQoJy0nICogMTApCgogICAgICAgICMgRWFjaCBlcG9jaCBoYXMgYSB0cmFpbmluZyBhbmQgdmFsaWRhdGlvbiBwaGFzZQogICAgICAgIGZvciBwaGFzZSBpbiBbJ3RyYWluJywgJ3ZhbGlkYXRpb24nXToKICAgICAgICAgICAgaWYgcGhhc2UgPT0gJ3RyYWluJzoKICAgICAgICAgICAgICAgIG1vZGVsLnRyYWluKCkgICMgU2V0IG1vZGVsIHRvIHRyYWluaW5nIG1vZGUKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIG1vZGVsLmV2YWwoKSAgICMgU2V0IG1vZGVsIHRvIGV2YWx1YXRlIG1vZGUKCiAgICAgICAgICAgIHJ1bm5pbmdfbG9zcyA9IDAuMAogICAgICAgICAgICBydW5uaW5nX2NvcnJlY3RzID0gMAoKICAgICAgICAgICAgIyBJdGVyYXRlIG92ZXIgZGF0YS4KICAgICAgICAgICAgZm9yIGlucHV0cywgbGFiZWxzIGluIGRhdGFsb2FkZXJzW3BoYXNlXToKICAgICAgICAgICAgICAgIGlucHV0cyA9IGlucHV0cy50byhkZXZpY2UpCiAgICAgICAgICAgICAgICBsYWJlbHMgPSBsYWJlbHMudG8oZGV2aWNlKQoKICAgICAgICAgICAgICAgICMgemVybyB0aGUgcGFyYW1ldGVyIGdyYWRpZW50cwogICAgICAgICAgICAgICAgb3B0aW1pemVyLnplcm9fZ3JhZCgpCgogICAgICAgICAgICAgICAgIyBmb3J3YXJkCiAgICAgICAgICAgICAgICAjIHRyYWNrIGhpc3RvcnkgaWYgb25seSBpbiB0cmFpbgogICAgICAgICAgICAgICAgd2l0aCB0b3JjaC5zZXRfZ3JhZF9lbmFibGVkKHBoYXNlID09ICd0cmFpbicpOgogICAgICAgICAgICAgICAgICAgICMgR2V0IG1vZGVsIG91dHB1dHMgYW5kIGNhbGN1bGF0ZSBsb3NzCiAgICAgICAgICAgICAgICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIGluY2VwdGlvbiBiZWNhdXNlIGluIHRyYWluaW5nIGl0IGhhcyBhbiBhdXhpbGlhcnkgb3V0cHV0LiBJbiB0cmFpbgogICAgICAgICAgICAgICAgICAgICMgICBtb2RlIHdlIGNhbGN1bGF0ZSB0aGUgbG9zcyBieSBzdW1taW5nIHRoZSBmaW5hbCBvdXRwdXQgYW5kIHRoZSBhdXhpbGlhcnkgb3V0cHV0CiAgICAgICAgICAgICAgICAgICAgIyAgIGJ1dCBpbiB0ZXN0aW5nIHdlIG9ubHkgY29uc2lkZXIgdGhlIGZpbmFsIG91dHB1dC4KICAgICAgICAgICAgICAgICAgICBpZiBpc19pbmNlcHRpb24gYW5kIHBoYXNlID09ICd0cmFpbic6CiAgICAgICAgICAgICAgICAgICAgICAgICMgRnJvbSBodHRwczovL2Rpc2N1c3MucHl0b3JjaC5vcmcvdC9ob3ctdG8tb3B0aW1pemUtaW5jZXB0aW9uLW1vZGVsLXdpdGgtYXV4aWxpYXJ5LWNsYXNzaWZpZXJzLzc5NTgKICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0cywgYXV4X291dHB1dHMgPSBtb2RlbChpbnB1dHMpCiAgICAgICAgICAgICAgICAgICAgICAgIGxvc3MxID0gY3JpdGVyaW9uKG91dHB1dHMsIGxhYmVscykKICAgICAgICAgICAgICAgICAgICAgICAgbG9zczIgPSBjcml0ZXJpb24oYXV4X291dHB1dHMsIGxhYmVscykKICAgICAgICAgICAgICAgICAgICAgICAgbG9zcyA9IGxvc3MxICsgMC40Kmxvc3MyCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0cyA9IG1vZGVsKGlucHV0cykKICAgICAgICAgICAgICAgICAgICAgICAgbG9zcyA9IGNyaXRlcmlvbihvdXRwdXRzLCBsYWJlbHMpCgogICAgICAgICAgICAgICAgICAgIF8sIHByZWRzID0gdG9yY2gubWF4KG91dHB1dHMsIDEpCgogICAgICAgICAgICAgICAgICAgICMgYmFja3dhcmQgKyBvcHRpbWl6ZSBvbmx5IGlmIGluIHRyYWluaW5nIHBoYXNlCiAgICAgICAgICAgICAgICAgICAgaWYgcGhhc2UgPT0gJ3RyYWluJzoKICAgICAgICAgICAgICAgICAgICAgICAgbG9zcy5iYWNrd2FyZCgpCiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGltaXplci5zdGVwKCkKCiAgICAgICAgICAgICAgICAjIHN0YXRpc3RpY3MKICAgICAgICAgICAgICAgIHJ1bm5pbmdfbG9zcyArPSBsb3NzLml0ZW0oKSAqIGlucHV0cy5zaXplKDApCiAgICAgICAgICAgICAgICBydW5uaW5nX2NvcnJlY3RzICs9IHRvcmNoLnN1bShwcmVkcyA9PSBsYWJlbHMuZGF0YSkKCiAgICAgICAgICAgIGVwb2NoX2xvc3MgPSBydW5uaW5nX2xvc3MgLyBsZW4oZGF0YWxvYWRlcnNbcGhhc2VdLmRhdGFzZXQpCiAgICAgICAgICAgIGVwb2NoX2FjYyA9IHJ1bm5pbmdfY29ycmVjdHMuZG91YmxlKCkgLyBsZW4oZGF0YWxvYWRlcnNbcGhhc2VdLmRhdGFzZXQpCgogICAgICAgICAgICBwcmludCgne30gTG9zczogezouNGZ9IEFjYzogezouNGZ9Jy5mb3JtYXQocGhhc2UsIGVwb2NoX2xvc3MsIGVwb2NoX2FjYykpCgogICAgICAgICAgICAjIGRlZXAgY29weSB0aGUgbW9kZWwKICAgICAgICAgICAgaWYgcGhhc2UgPT0gJ3ZhbGlkYXRpb24nIGFuZCBlcG9jaF9hY2MgPiBiZXN0X2FjYzoKICAgICAgICAgICAgICAgIGJlc3RfYWNjID0gZXBvY2hfYWNjCiAgICAgICAgICAgICAgICBiZXN0X21vZGVsX3d0cyA9IGNvcHkuZGVlcGNvcHkobW9kZWwuc3RhdGVfZGljdCgpKQogICAgICAgICAgICBpZiBwaGFzZSA9PSAndmFsaWRhdGlvbic6CiAgICAgICAgICAgICAgICB2YWxfYWNjX2hpc3RvcnkuYXBwZW5kKGVwb2NoX2FjYykKCiAgICAgICAgcHJpbnQoKQoKICAgIHRpbWVfZWxhcHNlZCA9IHRpbWUudGltZSgpIC0gc2luY2UKICAgIHByaW50KCdUcmFpbmluZyBjb21wbGV0ZSBpbiB7Oi4wZn1tIHs6LjBmfXMnLmZvcm1hdCh0aW1lX2VsYXBzZWQgLy8gNjAsIHRpbWVfZWxhcHNlZCAlIDYwKSkKICAgIHByaW50KCdCZXN0IHZhbCBBY2M6IHs6NGZ9Jy5mb3JtYXQoYmVzdF9hY2MpKQoKICAgICMgbG9hZCBiZXN0IG1vZGVsIHdlaWdodHMKICAgIG1vZGVsLmxvYWRfc3RhdGVfZGljdChiZXN0X21vZGVsX3d0cykKICAgIHJldHVybiBtb2RlbCwgdmFsX2FjY19oaXN0b3J5CgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICMgVG9wIGxldmVsIGRhdGEgZGlyZWN0b3J5LiBIZXJlIHdlIGFzc3VtZSB0aGUgZm9ybWF0IG9mIHRoZSBkaXJlY3RvcnkgY29uZm9ybXMgCiAgICBtb2RlbF9mdCwgaW5wdXRfc2l6ZSA9IGluaXRpYWxpemVfbW9kZWwobW9kZWxfbmFtZSwgbnVtX2NsYXNzZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZV9leHRyYWN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VfcHJldHJhaW5lZD1UcnVlKSAgCiAgICAjIEFzc3VtaW5nIHRoYXQgd2UgYXJlIG9uIGEgQ1VEQSBtYWNoaW5lLCB0aGlzIHNob3VsZCBwcmludCBhIENVREEgZGV2aWNlOgogICAgZGV2aWNlID0gdG9yY2guZGV2aWNlKCJjdWRhOjAiIGlmIHRvcmNoLmN1ZGEuaXNfYXZhaWxhYmxlKCkgZWxzZSAiY3B1IikKICAgICMgRGF0YSBhdWdtZW50YXRpb24gYW5kIG5vcm1hbGl6YXRpb24gZm9yIHRyYWluaW5nCiAgICAjIEp1c3Qgbm9ybWFsaXphdGlvbiBmb3IgdmFsaWRhdGlvbgogICAgZGF0YV90cmFuc2Zvcm1zID0gewogICAgICAgICd0cmFpbic6IHRyYW5zZm9ybXMuQ29tcG9zZShbCiAgICAgICAgICAgIHRyYW5zZm9ybXMuUmFuZG9tUmVzaXplZENyb3AoaW5wdXRfc2l6ZSksCiAgICAgICAgICAgIHRyYW5zZm9ybXMuUmFuZG9tSG9yaXpvbnRhbEZsaXAoKSwKICAgICAgICAgICAgdHJhbnNmb3Jtcy5Ub1RlbnNvcigpLAogICAgICAgICAgICB0cmFuc2Zvcm1zLk5vcm1hbGl6ZShbMC40ODUsIDAuNDU2LCAwLjQwNl0sIFswLjIyOSwgMC4yMjQsIDAuMjI1XSkKICAgICAgICBdKSwKICAgICAgICAndmFsaWRhdGlvbic6IHRyYW5zZm9ybXMuQ29tcG9zZShbCiAgICAgICAgICAgIHRyYW5zZm9ybXMuUmVzaXplKGlucHV0X3NpemUpLAogICAgICAgICAgICB0cmFuc2Zvcm1zLkNlbnRlckNyb3AoaW5wdXRfc2l6ZSksCiAgICAgICAgICAgIHRyYW5zZm9ybXMuVG9UZW5zb3IoKSwKICAgICAgICAgICAgdHJhbnNmb3Jtcy5Ob3JtYWxpemUoWzAuNDg1LCAwLjQ1NiwgMC40MDZdLCBbMC4yMjksIDAuMjI0LCAwLjIyNV0pCiAgICAgICAgXSksCiAgICB9CgogICAgIyBDcmVhdGUgdHJhaW5pbmcgYW5kIHZhbGlkYXRpb24gZGF0YXNldHMKICAgIGltYWdlX2RhdGFzZXRzID0ge3g6IGRhdGFzZXRzLkltYWdlRm9sZGVyKG9zLnBhdGguam9pbihkYXRhX2RpciwgeCksIGRhdGFfdHJhbnNmb3Jtc1t4XSkgZm9yIHggaW4gWyd0cmFpbicsICd2YWxpZGF0aW9uJ119CiAgICAjIENyZWF0ZSB0cmFpbmluZyBhbmQgdmFsaWRhdGlvbiBkYXRhbG9hZGVycwogICAgZGF0YWxvYWRlcnNfZGljdCA9IHt4OiBEYXRhTG9hZGVyKGltYWdlX2RhdGFzZXRzW3hdLCBiYXRjaF9zaXplPWJhdGNoX3NpemUsIHNodWZmbGU9VHJ1ZSwgbnVtX3dvcmtlcnM9NCkgZm9yIHggaW4gWyd0cmFpbicsICd2YWxpZGF0aW9uJ119CiAgICAjIFNlbmQgdGhlIG1vZGVsIHRvIEdQVQogICAgbW9kZWxfZnQgPSBtb2RlbF9mdC50byhkZXZpY2UpCiAgICAjIEdhdGhlciB0aGUgcGFyYW1ldGVycyB0byBiZSBvcHRpbWl6ZWQvdXBkYXRlZCBpbiB0aGlzIHJ1bi4gSWYgd2UgYXJlCiAgICAjICBmaW5ldHVuaW5nIHdlIHdpbGwgYmUgdXBkYXRpbmcgYWxsIHBhcmFtZXRlcnMuIEhvd2V2ZXIsIGlmIHdlIGFyZSAKICAgICMgIGRvaW5nIGZlYXR1cmUgZXh0cmFjdCBtZXRob2QsIHdlIHdpbGwgb25seSB1cGRhdGUgdGhlIHBhcmFtZXRlcnMKICAgICMgIHRoYXQgd2UgaGF2ZSBqdXN0IGluaXRpYWxpemVkLCBpLmUuIHRoZSBwYXJhbWV0ZXJzIHdpdGggcmVxdWlyZXNfZ3JhZAogICAgIyAgaXMgVHJ1ZS4KICAgIHBhcmFtc190b191cGRhdGUgPSBtb2RlbF9mdC5wYXJhbWV0ZXJzKCkKICAgIHByaW50KCJQYXJhbXMgdG8gbGVhcm46IikKICAgIGlmIGZlYXR1cmVfZXh0cmFjdDoKICAgICAgICBwYXJhbXNfdG9fdXBkYXRlID0gW10KICAgICAgICBmb3IgbmFtZSwgcGFyYW0gaW4gbW9kZWxfZnQubmFtZWRfcGFyYW1ldGVycygpOgogICAgICAgICAgICBpZiBwYXJhbS5yZXF1aXJlc19ncmFkID09IFRydWU6CiAgICAgICAgICAgICAgICBwYXJhbXNfdG9fdXBkYXRlLmFwcGVuZChwYXJhbSkKICAgICAgICAgICAgICAgIHByaW50KCJcdCIsbmFtZSkKICAgIGVsc2U6CiAgICAgICAgZm9yIG5hbWUsIHBhcmFtIGluIG1vZGVsX2Z0Lm5hbWVkX3BhcmFtZXRlcnMoKToKICAgICAgICAgICAgaWYgcGFyYW0ucmVxdWlyZXNfZ3JhZCA9PSBUcnVlOgogICAgICAgICAgICAgICAgcHJpbnQoIlx0IiwgbmFtZSkKCiAgICAjIE9ic2VydmUgdGhhdCBhbGwgcGFyYW1ldGVycyBhcmUgYmVpbmcgb3B0aW1pemVkCiAgICBvcHRpbWl6ZXJfZnQgPSBvcHRpbS5TR0QocGFyYW1zX3RvX3VwZGF0ZSwgbHI9MC4wMDEsIG1vbWVudHVtPTAuOSkKICAgICMgU2V0dXAgdGhlIGxvc3MgZnhuCiAgICBjcml0ZXJpb24gPSBubi5Dcm9zc0VudHJvcHlMb3NzKCkKICAgICMgVHJhaW4gYW5kIGV2YWx1YXRlCiAgICBtb2RlbF9mdCwgaGlzdCA9IHRyYWluX21vZGVsKG1vZGVsX2Z0LCBkYXRhbG9hZGVyc19kaWN0LCBjcml0ZXJpb24sIG9wdGltaXplcl9mdCwgbnVtX2Vwb2Nocz1udW1fZXBvY2hzLCBpc19pbmNlcHRpb249KG1vZGVsX25hbWUgPT0gImluY2VwdGlvbiIpKQogICAgcHJpbnQoaW5wdXRfc2l6ZSkKICAgIG1vZGVsX2Z0LmV2YWwoKQogICAgb3V0cHV0cyA9IFtdCiAgICBsYWJlbHMgPSBbXQogICAgZm9yIGlucHV0cywgbGFiZWwgaW4gZGF0YWxvYWRlcnNfZGljdFsidmFsaWRhdGlvbiJdOgogICAgICAgIGlucHV0cyA9IGlucHV0cy50byhkZXZpY2UpCiAgICAgICAgb3V0cHV0ID0gbW9kZWxfZnQoaW5wdXRzKQogICAgICAgIF8sIHByZWRzID0gdG9yY2gubWF4KG91dHB1dCwgMSkKICAgICAgICBsYWJlbHMuYXBwZW5kKGxhYmVsLmRhdGEpCiAgICAgICAgb3V0cHV0cy5hcHBlbmQocHJlZHMuY3B1KCkubnVtcHkoKSkKICAgIG91dHB1dHMgPSBbYS5zcXVlZXplKCkudG9saXN0KCkgZm9yIGEgaW4gb3V0cHV0c10KICAgIGxhYmVscyA9IFthLnNxdWVlemUoKS50b2xpc3QoKSBmb3IgYSBpbiBsYWJlbHNdCiAgICBvdXRwdXRzID0gc3VtKG91dHB1dHMsIFtdKQogICAgbGFiZWxzID0gc3VtKGxhYmVscywgW10pCiAgICBwcmludChjbGFzc2lmaWNhdGlvbl9yZXBvcnQobGFiZWxzLCBvdXRwdXRzKSkKICAgIGR1bW15X2lucHV0ID0gdG9yY2gucmFuZG4oMSwgMywgaW5wdXRfc2l6ZSwgaW5wdXRfc2l6ZSkudG8oZGV2aWNlKQogICAgdG9yY2gub25ueC5leHBvcnQobW9kZWxfZnQsIGR1bW15X2lucHV0LCAiYXBwL21vZGVscy9iYW5rbm90ZV9iZXN0Lm9ubngiKQo8fGZpbV9zdWZmaXh8PgppbXBvcnQgY29weQppbXBvcnQgb3MKaW1wb3J0IHRpbWUKCjx8ZmltX2VuZHw+"]
["ec4b98acc4675e76d481f763036d3058a3080b10-4","ec4b98acc4675e76d481f763036d3058a3080b10","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbiwgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCBjb3B5CmltcG9ydCBvcwppbXBvcnQgdGltZQoKaW1wb3J0IHRvcmNoCmltcG9ydCB0b3JjaC5ubiBhcyBubgppbXBvcnQgdG9yY2gub3B0aW0gYXMgb3B0aW0KZnJvbSBza2xlYXJuLm1ldHJpY3MgaW1wb3J0IGNsYXNzaWZpY2F0aW9uX3JlcG9ydApmcm9tIHRvcmNoLnV0aWxzLmRhdGEgaW1wb3J0IERhdGFMb2FkZXIKZnJvbSB0b3JjaHZpc2lvbiBpbXBvcnQgZGF0YXNldHMsIHRyYW5zZm9ybXMKCmZyb20gbW9kZWxzIGltcG9ydCBpbml0aWFsaXplX21vZGVsCgojICAgdG8gdGhlIEltYWdlRm9sZGVyIHN0cnVjdHVyZQpkYXRhX2RpciA9ICJkYXRhIgojIE1vZGVscyB0byBjaG9vc2UgZnJvbSBbcmVzbmV0LCBhbGV4bmV0LCB2Z2csIHNxdWVlemVuZXQsIGRlbnNlbmV0LCBpbmNlcHRpb25dCm1vZGVsX25hbWUgPSAic3F1ZWV6ZW5ldCIKIyBOdW1iZXIgb2YgY2xhc3NlcyBpbiB0aGUgZGF0YXNldApudW1fY2xhc3NlcyA9IDEwCiMgQmF0Y2ggc2l6ZSBmb3IgdHJhaW5pbmcgKGNoYW5nZSBkZXBlbmRpbmcgb24gaG93IG11Y2ggbWVtb3J5IHlvdSBoYXZlKQpiYXRjaF9zaXplID0gMjU2CiMgTnVtYmVyIG9mIGVwb2NocyB0byB0cmFpbiBmb3IgCm51bV9lcG9jaHMgPSAyMAojIEZsYWcgZm9yIGZlYXR1cmUgZXh0cmFjdGluZy4gV2hlbiBGYWxzZSwgd2UgZmluZXR1bmUgdGhlIHdob2xlIG1vZGVsLCAKIyAgIHdoZW4gVHJ1ZSB3ZSBvbmx5IHVwZGF0ZSB0aGUgcmVzaGFwZWQgbGF5ZXIgcGFyYW1zCmZlYXR1cmVfZXh0cmFjdCA9IFRydWUKCgpkZWYgdHJhaW5fbW9kZWwobW9kZWwsIGRhdGFsb2FkZXJzLCBjcml0ZXJpb24sIG9wdGltaXplciwgbnVtX2Vwb2Nocz0yNSwgaXNfaW5jZXB0aW9uPUZhbHNlKToKICAgIHNpbmNlID0gdGltZS50aW1lKCkKCiAgICB2YWxfYWNjX2hpc3RvcnkgPSBbXQoKICAgIGJlc3RfbW9kZWxfd3RzID0gY29weS5kZWVwY29weShtb2RlbC5zdGF0ZV9kaWN0KCkpCiAgICBiZXN0X2FjYyA9IDAuMAoKICAgIGZvciBlcG9jaCBpbiByYW5nZShudW1fZXBvY2hzKToKICAgICAgICBwcmludCgnRXBvY2gge30ve30nLmZvcm1hdChlcG9jaCwgbnVtX2Vwb2NocyAtIDEpKQogICAgICAgIHByaW50KCctJyAqIDEwKQoKICAgICAgICAjIEVhY2ggZXBvY2ggaGFzIGEgdHJhaW5pbmcgYW5kIHZhbGlkYXRpb24gcGhhc2UKICAgICAgICBmb3IgcGhhc2UgaW4gWyd0cmFpbicsICd2YWxpZGF0aW9uJ106CiAgICAgICAgICAgIGlmIHBoYXNlID09ICd0cmFpbic6CiAgICAgICAgICAgICAgICBtb2RlbC50cmFpbigpICAjIFNldCBtb2RlbCB0byB0cmFpbmluZyBtb2RlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBtb2RlbC5ldmFsKCkgICAjIFNldCBtb2RlbCB0byBldmFsdWF0ZSBtb2RlCgogICAgICAgICAgICBydW5uaW5nX2xvc3MgPSAwLjAKICAgICAgICAgICAgcnVubmluZ19jb3JyZWN0cyA9IDAKCiAgICAgICAgICAgICMgSXRlcmF0ZSBvdmVyIGRhdGEuCiAgICAgICAgICAgIGZvciBpbnB1dHMsIGxhYmVscyBpbiBkYXRhbG9hZGVyc1twaGFzZV06CiAgICAgICAgICAgICAgICBpbnB1dHMgPSBpbnB1dHMudG8oZGV2aWNlKQogICAgICAgICAgICAgICAgbGFiZWxzID0gbGFiZWxzLnRvKGRldmljZSkKCiAgICAgICAgICAgICAgICAjIHplcm8gdGhlIHBhcmFtZXRlciBncmFkaWVudHMKICAgICAgICAgICAgICAgIG9wdGltaXplci56ZXJvX2dyYWQoKQoKICAgICAgICAgICAgICAgICMgZm9yd2FyZAogICAgICAgICAgICAgICAgIyB0cmFjayBoaXN0b3J5IGlmIG9ubHkgaW4gdHJhaW4KICAgICAgICAgICAgICAgIHdpdGggdG9yY2guc2V0X2dyYWRfZW5hYmxlZChwaGFzZSA9PSAndHJhaW4nKToKICAgICAgICAgICAgICAgICAgICAjIEdldCBtb2RlbCBvdXRwdXRzIGFuZCBjYWxjdWxhdGUgbG9zcwogICAgICAgICAgICAgICAgICAgICMgU3BlY2lhbCBjYXNlIGZvciBpbmNlcHRpb24gYmVjYXVzZSBpbiB0cmFpbmluZyBpdCBoYXMgYW4gYXV4aWxpYXJ5IG91dHB1dC4gSW4gdHJhaW4KICAgICAgICAgICAgICAgICAgICAjICAgbW9kZSB3ZSBjYWxjdWxhdGUgdGhlIGxvc3MgYnkgc3VtbWluZyB0aGUgZmluYWwgb3V0cHV0IGFuZCB0aGUgYXV4aWxpYXJ5IG91dHB1dAogICAgICAgICAgICAgICAgICAgICMgICBidXQgaW4gdGVzdGluZyB3ZSBvbmx5IGNvbnNpZGVyIHRoZSBmaW5hbCBvdXRwdXQuCiAgICAgICAgICAgICAgICAgICAgaWYgaXNfaW5jZXB0aW9uIGFuZCBwaGFzZSA9PSAndHJhaW4nOgogICAgICAgICAgICAgICAgICAgICAgICAjIEZyb20gaHR0cHM6Ly9kaXNjdXNzLnB5dG9yY2gub3JnL3QvaG93LXRvLW9wdGltaXplLWluY2VwdGlvbi1tb2RlbC13aXRoLWF1eGlsaWFyeS1jbGFzc2lmaWVycy83OTU4CiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dHMsIGF1eF9vdXRwdXRzID0gbW9kZWwoaW5wdXRzKQogICAgICAgICAgICAgICAgICAgICAgICBsb3NzMSA9IGNyaXRlcmlvbihvdXRwdXRzLCBsYWJlbHMpCiAgICAgICAgICAgICAgICAgICAgICAgIGxvc3MyID0gY3JpdGVyaW9uKGF1eF9vdXRwdXRzLCBsYWJlbHMpCiAgICAgICAgICAgICAgICAgICAgICAgIGxvc3MgPSBsb3NzMSArIDAuNCpsb3NzMgogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dHMgPSBtb2RlbChpbnB1dHMpCiAgICAgICAgICAgICAgICAgICAgICAgIGxvc3MgPSBjcml0ZXJpb24ob3V0cHV0cywgbGFiZWxzKQoKICAgICAgICAgICAgICAgICAgICBfLCBwcmVkcyA9IHRvcmNoLm1heChvdXRwdXRzLCAxKQoKICAgICAgICAgICAgICAgICAgICAjIGJhY2t3YXJkICsgb3B0aW1pemUgb25seSBpZiBpbiB0cmFpbmluZyBwaGFzZQogICAgICAgICAgICAgICAgICAgIGlmIHBoYXNlID09ICd0cmFpbic6CiAgICAgICAgICAgICAgICAgICAgICAgIGxvc3MuYmFja3dhcmQoKQogICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZXIuc3RlcCgpCgogICAgICAgICAgICAgICAgIyBzdGF0aXN0aWNzCiAgICAgICAgICAgICAgICBydW5uaW5nX2xvc3MgKz0gbG9zcy5pdGVtKCkgKiBpbnB1dHMuc2l6ZSgwKQogICAgICAgICAgICAgICAgcnVubmluZ19jb3JyZWN0cyArPSB0b3JjaC5zdW0ocHJlZHMgPT0gbGFiZWxzLmRhdGEpCgogICAgICAgICAgICBlcG9jaF9sb3NzID0gcnVubmluZ19sb3NzIC8gbGVuKGRhdGFsb2FkZXJzW3BoYXNlXS5kYXRhc2V0KQogICAgICAgICAgICBlcG9jaF9hY2MgPSBydW5uaW5nX2NvcnJlY3RzLmRvdWJsZSgpIC8gbGVuKGRhdGFsb2FkZXJzW3BoYXNlXS5kYXRhc2V0KQoKICAgICAgICAgICAgcHJpbnQoJ3t9IExvc3M6IHs6LjRmfSBBY2M6IHs6LjRmfScuZm9ybWF0KHBoYXNlLCBlcG9jaF9sb3NzLCBlcG9jaF9hY2MpKQoKICAgICAgICAgICAgIyBkZWVwIGNvcHkgdGhlIG1vZGVsCiAgICAgICAgICAgIGlmIHBoYXNlID09ICd2YWxpZGF0aW9uJyBhbmQgZXBvY2hfYWNjID4gYmVzdF9hY2M6CiAgICAgICAgICAgICAgICBiZXN0X2FjYyA9IGVwb2NoX2FjYwogICAgICAgICAgICAgICAgYmVzdF9tb2RlbF93dHMgPSBjb3B5LmRlZXBjb3B5KG1vZGVsLnN0YXRlX2RpY3QoKSkKICAgICAgICAgICAgaWYgcGhhc2UgPT0gJ3ZhbGlkYXRpb24nOgogICAgICAgICAgICAgICAgdmFsX2FjY19oaXN0b3J5LmFwcGVuZChlcG9jaF9hY2MpCgogICAgICAgIHByaW50KCkKCiAgICB0aW1lX2VsYXBzZWQgPSB0aW1lLnRpbWUoKSAtIHNpbmNlCiAgICBwcmludCgnVHJhaW5pbmcgY29tcGxldGUgaW4gezouMGZ9bSB7Oi4wZn1zJy5mb3JtYXQodGltZV9lbGFwc2VkIC8vIDYwLCB0aW1lX2VsYXBzZWQgJSA2MCkpCiAgICBwcmludCgnQmVzdCB2YWwgQWNjOiB7OjRmfScuZm9ybWF0KGJlc3RfYWNjKSkKCiAgICAjIGxvYWQgYmVzdCBtb2RlbCB3ZWlnaHRzCiAgICBtb2RlbC5sb2FkX3N0YXRlX2RpY3QoYmVzdF9tb2RlbF93dHMpCiAgICByZXR1cm4gbW9kZWwsIHZhbF9hY2NfaGlzdG9yeQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAjIFRvcCBsZXZlbCBkYXRhIGRpcmVjdG9yeS4gSGVyZSB3ZSBhc3N1bWUgdGhlIGZvcm1hdCBvZiB0aGUgZGlyZWN0b3J5IGNvbmZvcm1zIAogICAgbW9kZWxfZnQsIGlucHV0X3NpemUgPSBpbml0aWFsaXplX21vZGVsKG1vZGVsX25hbWUsIG51bV9jbGFzc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVfZXh0cmFjdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX3ByZXRyYWluZWQ9VHJ1ZSkgIAogICAgIyBBc3N1bWluZyB0aGF0IHdlIGFyZSBvbiBhIENVREEgbWFjaGluZSwgdGhpcyBzaG91bGQgcHJpbnQgYSBDVURBIGRldmljZToKICAgIGRldmljZSA9IHRvcmNoLmRldmljZSgiY3VkYTowIiBpZiB0b3JjaC5jdWRhLmlzX2F2YWlsYWJsZSgpIGVsc2UgImNwdSIpCiAgICAjIERhdGEgYXVnbWVudGF0aW9uIGFuZCBub3JtYWxpemF0aW9uIGZvciB0cmFpbmluZwogICAgIyBKdXN0IG5vcm1hbGl6YXRpb24gZm9yIHZhbGlkYXRpb24KICAgIGRhdGFfdHJhbnNmb3JtcyA9IHsKICAgICAgICAndHJhaW4nOiB0cmFuc2Zvcm1zLkNvbXBvc2UoWwogICAgICAgICAgICB0cmFuc2Zvcm1zLlJhbmRvbVJlc2l6ZWRDcm9wKGlucHV0X3NpemUpLAogICAgICAgICAgICB0cmFuc2Zvcm1zLlJhbmRvbUhvcml6b250YWxGbGlwKCksCiAgICAgICAgICAgIHRyYW5zZm9ybXMuVG9UZW5zb3IoKSwKICAgICAgICAgICAgdHJhbnNmb3Jtcy5Ob3JtYWxpemUoWzAuNDg1LCAwLjQ1NiwgMC40MDZdLCBbMC4yMjksIDAuMjI0LCAwLjIyNV0pCiAgICAgICAgXSksCiAgICAgICAgJ3ZhbGlkYXRpb24nOiB0cmFuc2Zvcm1zLkNvbXBvc2UoWwogICAgICAgICAgICB0cmFuc2Zvcm1zLlJlc2l6ZShpbnB1dF9zaXplKSwKICAgICAgICAgICAgdHJhbnNmb3Jtcy5DZW50ZXJDcm9wKGlucHV0X3NpemUpLAogICAgICAgICAgICB0cmFuc2Zvcm1zLlRvVGVuc29yKCksCiAgICAgICAgICAgIHRyYW5zZm9ybXMuTm9ybWFsaXplKFswLjQ4NSwgMC40NTYsIDAuNDA2XSwgWzAuMjI5LCAwLjIyNCwgMC4yMjVdKQogICAgICAgIF0pLAogICAgfQoKICAgICMgQ3JlYXRlIHRyYWluaW5nIGFuZCB2YWxpZGF0aW9uIGRhdGFzZXRzCiAgICBpbWFnZV9kYXRhc2V0cyA9IHt4OiBkYXRhc2V0cy5JbWFnZUZvbGRlcihvcy5wYXRoLmpvaW4oZGF0YV9kaXIsIHgpLCBkYXRhX3RyYW5zZm9ybXNbeF0pIGZvciB4IGluIFsndHJhaW4nLCAndmFsaWRhdGlvbiddfQogICAgIyBDcmVhdGUgdHJhaW5pbmcgYW5kIHZhbGlkYXRpb24gZGF0YWxvYWRlcnMKICAgIGRhdGFsb2FkZXJzX2RpY3QgPSB7eDogRGF0YUxvYWRlcihpbWFnZV9kYXRhc2V0c1t4XSwgYmF0Y2hfc2l6ZT1iYXRjaF9zaXplLCBzaHVmZmxlPVRydWUsIG51bV93b3JrZXJzPTQpIGZvciB4IGluIFsndHJhaW4nLCAndmFsaWRhdGlvbiddfQogICAgIyBTZW5kIHRoZSBtb2RlbCB0byBHUFUKICAgIG1vZGVsX2Z0ID0gbW9kZWxfZnQudG8oZGV2aWNlKQogICAgIyBHYXRoZXIgdGhlIHBhcmFtZXRlcnMgdG8gYmUgb3B0aW1pemVkL3VwZGF0ZWQgaW4gdGhpcyBydW4uIElmIHdlIGFyZQogICAgIyAgZmluZXR1bmluZyB3ZSB3aWxsIGJlIHVwZGF0aW5nIGFsbCBwYXJhbWV0ZXJzLiBIb3dldmVyLCBpZiB3ZSBhcmUgCiAgICAjICBkb2luZyBmZWF0dXJlIGV4dHJhY3QgbWV0aG9kLCB3ZSB3aWxsIG9ubHkgdXBkYXRlIHRoZSBwYXJhbWV0ZXJzCiAgICAjICB0aGF0IHdlIGhhdmUganVzdCBpbml0aWFsaXplZCwgaS5lLiB0aGUgcGFyYW1ldGVycyB3aXRoIHJlcXVpcmVzX2dyYWQKICAgICMgIGlzIFRydWUuCiAgICBwYXJhbXNfdG9fdXBkYXRlID0gbW9kZWxfZnQucGFyYW1ldGVycygpCiAgICBwcmludCgiUGFyYW1zIHRvIGxlYXJuOiIpCiAgICBpZiBmZWF0dXJlX2V4dHJhY3Q6CiAgICAgICAgcGFyYW1zX3RvX3VwZGF0ZSA9IFtdCiAgICAgICAgZm9yIG5hbWUsIHBhcmFtIGluIG1vZGVsX2Z0Lm5hbWVkX3BhcmFtZXRlcnMoKToKICAgICAgICAgICAgaWYgcGFyYW0ucmVxdWlyZXNfZ3JhZCA9PSBUcnVlOgogICAgICAgICAgICAgICAgcGFyYW1zX3RvX3VwZGF0ZS5hcHBlbmQocGFyYW0pCiAgICAgICAgICAgICAgICBwcmludCgiXHQiLG5hbWUpCiAgICBlbHNlOgogICAgICAgIGZvciBuYW1lLCBwYXJhbSBpbiBtb2RlbF9mdC5uYW1lZF9wYXJhbWV0ZXJzKCk6CiAgICAgICAgICAgIGlmIHBhcmFtLnJlcXVpcmVzX2dyYWQgPT0gVHJ1ZToKICAgICAgICAgICAgICAgIHByaW50KCJcdCIsIG5hbWUpCgogICAgIyBPYnNlcnZlIHRoYXQgYWxsIHBhcmFtZXRlcnMgYXJlIGJlaW5nIG9wdGltaXplZAogICAgb3B0aW1pemVyX2Z0ID0gb3B0aW0uU0dEKHBhcmFtc190b191cGRhdGUsIGxyPTAuMDAxLCBtb21lbnR1bT0wLjkpCiAgICAjIFNldHVwIHRoZSBsb3NzIGZ4bgogICAgY3JpdGVyaW9uID0gbm4uQ3Jvc3NFbnRyb3B5TG9zcygpCiAgICAjIFRyYWluIGFuZCBldmFsdWF0ZQogICAgbW9kZWxfZnQsIGhpc3QgPSB0cmFpbl9tb2RlbChtb2RlbF9mdCwgZGF0YWxvYWRlcnNfZGljdCwgY3JpdGVyaW9uLCBvcHRpbWl6ZXJfZnQsIG51bV9lcG9jaHM9bnVtX2Vwb2NocywgaXNfaW5jZXB0aW9uPShtb2RlbF9uYW1lID09ICJpbmNlcHRpb24iKSkKICAgIHByaW50KGlucHV0X3NpemUpCjx8ZmltX2hvbGV8PgogICAgICAgIGlucHV0cyA9IGlucHV0cy50byhkZXZpY2UpCiAgICAgICAgb3V0cHV0ID0gbW9kZWxfZnQoaW5wdXRzKQogICAgICAgIF8sIHByZWRzID0gdG9yY2gubWF4KG91dHB1dCwgMSkKICAgICAgICBsYWJlbHMuYXBwZW5kKGxhYmVsLmRhdGEpCiAgICAgICAgb3V0cHV0cy5hcHBlbmQocHJlZHMuY3B1KCkubnVtcHkoKSkKICAgIG91dHB1dHMgPSBbYS5zcXVlZXplKCkudG9saXN0KCkgZm9yIGEgaW4gb3V0cHV0c10KICAgIGxhYmVscyA9IFthLnNxdWVlemUoKS50b2xpc3QoKSBmb3IgYSBpbiBsYWJlbHNdCiAgICBvdXRwdXRzID0gc3VtKG91dHB1dHMsIFtdKQogICAgbGFiZWxzID0gc3VtKGxhYmVscywgW10pCiAgICBwcmludChjbGFzc2lmaWNhdGlvbl9yZXBvcnQobGFiZWxzLCBvdXRwdXRzKSkKICAgIGR1bW15X2lucHV0ID0gdG9yY2gucmFuZG4oMSwgMywgaW5wdXRfc2l6ZSwgaW5wdXRfc2l6ZSkudG8oZGV2aWNlKQogICAgdG9yY2gub25ueC5leHBvcnQobW9kZWxfZnQsIGR1bW15X2lucHV0LCAiYXBwL21vZGVscy9iYW5rbm90ZV9iZXN0Lm9ubngiKQo8fGZpbV9zdWZmaXh8PgogICAgbW9kZWxfZnQuZXZhbCgpCiAgICBvdXRwdXRzID0gW10KICAgIGxhYmVscyA9IFtdCiAgICBmb3IgaW5wdXRzLCBsYWJlbCBpbiBkYXRhbG9hZGVyc19kaWN0WyJ2YWxpZGF0aW9uIl06Cjx8ZmltX2VuZHw+"]
["ec4b98acc4675e76d481f763036d3058a3080b10-5","ec4b98acc4675e76d481f763036d3058a3080b10","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbiwgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCBjb3B5CmltcG9ydCBvcwppbXBvcnQgdGltZQoKaW1wb3J0IHRvcmNoCmltcG9ydCB0b3JjaC5ubiBhcyBubgppbXBvcnQgdG9yY2gub3B0aW0gYXMgb3B0aW0KZnJvbSBza2xlYXJuLm1ldHJpY3MgaW1wb3J0IGNsYXNzaWZpY2F0aW9uX3JlcG9ydApmcm9tIHRvcmNoLnV0aWxzLmRhdGEgaW1wb3J0IERhdGFMb2FkZXIKZnJvbSB0b3JjaHZpc2lvbiBpbXBvcnQgZGF0YXNldHMsIHRyYW5zZm9ybXMKCmZyb20gbW9kZWxzIGltcG9ydCBpbml0aWFsaXplX21vZGVsCgojICAgdG8gdGhlIEltYWdlRm9sZGVyIHN0cnVjdHVyZQpkYXRhX2RpciA9ICJkYXRhIgojIE1vZGVscyB0byBjaG9vc2UgZnJvbSBbcmVzbmV0LCBhbGV4bmV0LCB2Z2csIHNxdWVlemVuZXQsIGRlbnNlbmV0LCBpbmNlcHRpb25dCm1vZGVsX25hbWUgPSAic3F1ZWV6ZW5ldCIKIyBOdW1iZXIgb2YgY2xhc3NlcyBpbiB0aGUgZGF0YXNldApudW1fY2xhc3NlcyA9IDEwCiMgQmF0Y2ggc2l6ZSBmb3IgdHJhaW5pbmcgKGNoYW5nZSBkZXBlbmRpbmcgb24gaG93IG11Y2ggbWVtb3J5IHlvdSBoYXZlKQpiYXRjaF9zaXplID0gMjU2CiMgTnVtYmVyIG9mIGVwb2NocyB0byB0cmFpbiBmb3IgCm51bV9lcG9jaHMgPSAyMAojIEZsYWcgZm9yIGZlYXR1cmUgZXh0cmFjdGluZy4gV2hlbiBGYWxzZSwgd2UgZmluZXR1bmUgdGhlIHdob2xlIG1vZGVsLCAKIyAgIHdoZW4gVHJ1ZSB3ZSBvbmx5IHVwZGF0ZSB0aGUgcmVzaGFwZWQgbGF5ZXIgcGFyYW1zCmZlYXR1cmVfZXh0cmFjdCA9IFRydWUKCgpkZWYgdHJhaW5fbW9kZWwobW9kZWwsIGRhdGFsb2FkZXJzLCBjcml0ZXJpb24sIG9wdGltaXplciwgbnVtX2Vwb2Nocz0yNSwgaXNfaW5jZXB0aW9uPUZhbHNlKToKICAgIHNpbmNlID0gdGltZS50aW1lKCkKCiAgICB2YWxfYWNjX2hpc3RvcnkgPSBbXQoKICAgIGJlc3RfbW9kZWxfd3RzID0gY29weS5kZWVwY29weShtb2RlbC5zdGF0ZV9kaWN0KCkpCiAgICBiZXN0X2FjYyA9IDAuMAoKICAgIGZvciBlcG9jaCBpbiByYW5nZShudW1fZXBvY2hzKToKICAgICAgICBwcmludCgnRXBvY2gge30ve30nLmZvcm1hdChlcG9jaCwgbnVtX2Vwb2NocyAtIDEpKQogICAgICAgIHByaW50KCctJyAqIDEwKQoKICAgICAgICAjIEVhY2ggZXBvY2ggaGFzIGEgdHJhaW5pbmcgYW5kIHZhbGlkYXRpb24gcGhhc2UKICAgICAgICBmb3IgcGhhc2UgaW4gWyd0cmFpbicsICd2YWxpZGF0aW9uJ106CiAgICAgICAgICAgIGlmIHBoYXNlID09ICd0cmFpbic6CiAgICAgICAgICAgICAgICBtb2RlbC50cmFpbigpICAjIFNldCBtb2RlbCB0byB0cmFpbmluZyBtb2RlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBtb2RlbC5ldmFsKCkgICAjIFNldCBtb2RlbCB0byBldmFsdWF0ZSBtb2RlCgogICAgICAgICAgICBydW5uaW5nX2xvc3MgPSAwLjAKICAgICAgICAgICAgcnVubmluZ19jb3JyZWN0cyA9IDAKCiAgICAgICAgICAgICMgSXRlcmF0ZSBvdmVyIGRhdGEuCiAgICAgICAgICAgIGZvciBpbnB1dHMsIGxhYmVscyBpbiBkYXRhbG9hZGVyc1twaGFzZV06CiAgICAgICAgICAgICAgICBpbnB1dHMgPSBpbnB1dHMudG8oZGV2aWNlKQogICAgICAgICAgICAgICAgbGFiZWxzID0gbGFiZWxzLnRvKGRldmljZSkKCiAgICAgICAgICAgICAgICAjIHplcm8gdGhlIHBhcmFtZXRlciBncmFkaWVudHMKICAgICAgICAgICAgICAgIG9wdGltaXplci56ZXJvX2dyYWQoKQoKICAgICAgICAgICAgICAgICMgZm9yd2FyZAogICAgICAgICAgICAgICAgIyB0cmFjayBoaXN0b3J5IGlmIG9ubHkgaW4gdHJhaW4KICAgICAgICAgICAgICAgIHdpdGggdG9yY2guc2V0X2dyYWRfZW5hYmxlZChwaGFzZSA9PSAndHJhaW4nKToKICAgICAgICAgICAgICAgICAgICAjIEdldCBtb2RlbCBvdXRwdXRzIGFuZCBjYWxjdWxhdGUgbG9zcwogICAgICAgICAgICAgICAgICAgICMgU3BlY2lhbCBjYXNlIGZvciBpbmNlcHRpb24gYmVjYXVzZSBpbiB0cmFpbmluZyBpdCBoYXMgYW4gYXV4aWxpYXJ5IG91dHB1dC4gSW4gdHJhaW4KICAgICAgICAgICAgICAgICAgICAjICAgbW9kZSB3ZSBjYWxjdWxhdGUgdGhlIGxvc3MgYnkgc3VtbWluZyB0aGUgZmluYWwgb3V0cHV0IGFuZCB0aGUgYXV4aWxpYXJ5IG91dHB1dAogICAgICAgICAgICAgICAgICAgICMgICBidXQgaW4gdGVzdGluZyB3ZSBvbmx5IGNvbnNpZGVyIHRoZSBmaW5hbCBvdXRwdXQuCiAgICAgICAgICAgICAgICAgICAgaWYgaXNfaW5jZXB0aW9uIGFuZCBwaGFzZSA9PSAndHJhaW4nOgogICAgICAgICAgICAgICAgICAgICAgICAjIEZyb20gaHR0cHM6Ly9kaXNjdXNzLnB5dG9yY2gub3JnL3QvaG93LXRvLW9wdGltaXplLWluY2VwdGlvbi1tb2RlbC13aXRoLWF1eGlsaWFyeS1jbGFzc2lmaWVycy83OTU4CiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dHMsIGF1eF9vdXRwdXRzID0gbW9kZWwoaW5wdXRzKQogICAgICAgICAgICAgICAgICAgICAgICBsb3NzMSA9IGNyaXRlcmlvbihvdXRwdXRzLCBsYWJlbHMpCiAgICAgICAgICAgICAgICAgICAgICAgIGxvc3MyID0gY3JpdGVyaW9uKGF1eF9vdXRwdXRzLCBsYWJlbHMpCiAgICAgICAgICAgICAgICAgICAgICAgIGxvc3MgPSBsb3NzMSArIDAuNCpsb3NzMgogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dHMgPSBtb2RlbChpbnB1dHMpCiAgICAgICAgICAgICAgICAgICAgICAgIGxvc3MgPSBjcml0ZXJpb24ob3V0cHV0cywgbGFiZWxzKQoKICAgICAgICAgICAgICAgICAgICBfLCBwcmVkcyA9IHRvcmNoLm1heChvdXRwdXRzLCAxKQoKICAgICAgICAgICAgICAgICAgICAjIGJhY2t3YXJkICsgb3B0aW1pemUgb25seSBpZiBpbiB0cmFpbmluZyBwaGFzZQogICAgICAgICAgICAgICAgICAgIGlmIHBoYXNlID09ICd0cmFpbic6CiAgICAgICAgICAgICAgICAgICAgICAgIGxvc3MuYmFja3dhcmQoKQogICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZXIuc3RlcCgpCgogICAgICAgICAgICAgICAgIyBzdGF0aXN0aWNzCiAgICAgICAgICAgICAgICBydW5uaW5nX2xvc3MgKz0gbG9zcy5pdGVtKCkgKiBpbnB1dHMuc2l6ZSgwKQogICAgICAgICAgICAgICAgcnVubmluZ19jb3JyZWN0cyArPSB0b3JjaC5zdW0ocHJlZHMgPT0gbGFiZWxzLmRhdGEpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGVwb2NoX2xvc3MgPSBydW5uaW5nX2xvc3MgLyBsZW4oZGF0YWxvYWRlcnNbcGhhc2VdLmRhdGFzZXQpCiAgICAgICAgICAgIGVwb2NoX2FjYyA9IHJ1bm5pbmdfY29ycmVjdHMuZG91YmxlKCkgLyBsZW4oZGF0YWxvYWRlcnNbcGhhc2VdLmRhdGFzZXQpCgogICAgICAgICAgICBwcmludCgne30gTG9zczogezouNGZ9IEFjYzogezouNGZ9Jy5mb3JtYXQocGhhc2UsIGVwb2NoX2xvc3MsIGVwb2NoX2FjYykpCjx8ZmltX2VuZHw+"]
["6b567955605e286feeea04cbb5899b71f4b4940b-1","6b567955605e286feeea04cbb5899b71f4b4940b","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KIyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCgpmcm9tIGVudW0gaW1wb3J0IEVudW0sIEludEVudW0KCgpjbGFzcyBFdmVudHMoRW51bSk6CiAgICAiIiJWTS1QTSBwYWlycyByZWxhdGVkIGV2ZW50cy4iIiIKICAgICMgVk0gcmVxdWVzdCBldmVudHMuCiAgICBSRVFVRVNUID0gInZtX3JlcXVpcmVkIgo8fGZpbV9ob2xlfD4KICAgICMgUG9zdHBvbmUgdGhlIFZNIHJlcXVpcmVtZW50IGR1ZSB0byB0aGUgcmVzb3VyY2UgZXhoYXVzdGlvbi4KICAgIFJlc291cmNlID0gInJlc291cmNlIgogICAgIyBQb3N0cG9uZSB0aGUgVk0gcmVxdWlyZW1lbnQgZHVlIHRvIHRoZSBhZ2VudCdzIGRlY2lzaW9uLgogICAgQWdlbnQgPSAiYWdlbnQiCgoKY2xhc3MgUG1TdGF0ZShJbnRFbnVtKToKICAgICIiIlBNIG92ZXJzdWJzY3JpcHRpb24gc3RhdGUsIGluY2x1ZGVzIGVtcHR5LCBvdmVyc3Vic2NyaWJhYmxlLCBub24tb3ZlcnN1YnNjcmliYWJsZS4iIiIKICAgIE5PTl9PVkVSU1VCU0NSSUJBQkxFID0gLTEKICAgIEVNUFRZID0gMAogICAgT1ZFUlNVQlNDUklCQUJMRSA9IDEKCgpjbGFzcyBWbUNhdGVnb3J5KEludEVudW0pOgogICAgREVMQVlfSU5TRU5TSVRJVkUgPSAwCiAgICBJTlRFUkFDVElWRSA9IDEKICAgIFVOS05PV04gPSAyCjx8ZmltX3N1ZmZpeHw+CgoKY2xhc3MgUG9zdHBvbmVUeXBlKEVudW0pOgogICAgIiIiUG9zdHBvbmUgdHlwZS4iIiIKPHxmaW1fZW5kfD4="]
["6b567955605e286feeea04cbb5899b71f4b4940b-2","6b567955605e286feeea04cbb5899b71f4b4940b","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KIyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCgpmcm9tIGVudW0gaW1wb3J0IEVudW0sIEludEVudW0KCgpjbGFzcyBFdmVudHMoRW51bSk6CiAgICAiIiJWTS1QTSBwYWlycyByZWxhdGVkIGV2ZW50cy4iIiIKICAgICMgVk0gcmVxdWVzdCBldmVudHMuCiAgICBSRVFVRVNUID0gInZtX3JlcXVpcmVkIgoKCmNsYXNzIFBvc3Rwb25lVHlwZShFbnVtKToKICAgICIiIlBvc3Rwb25lIHR5cGUuIiIiCiAgICAjIFBvc3Rwb25lIHRoZSBWTSByZXF1aXJlbWVudCBkdWUgdG8gdGhlIHJlc291cmNlIGV4aGF1c3Rpb24uCiAgICBSZXNvdXJjZSA9ICJyZXNvdXJjZSIKICAgICMgUG9zdHBvbmUgdGhlIFZNIHJlcXVpcmVtZW50IGR1ZSB0byB0aGUgYWdlbnQncyBkZWNpc2lvbi4KICAgIEFnZW50ID0gImFnZW50IgoKCmNsYXNzIFBtU3RhdGUoSW50RW51bSk6CiAgICAiIiJQTSBvdmVyc3Vic2NyaXB0aW9uIHN0YXRlLCBpbmNsdWRlcyBlbXB0eSwgb3ZlcnN1YnNjcmliYWJsZSwgbm9uLW92ZXJzdWJzY3JpYmFibGUuIiIiCjx8ZmltX2hvbGV8PgoKY2xhc3MgVm1DYXRlZ29yeShJbnRFbnVtKToKICAgIERFTEFZX0lOU0VOU0lUSVZFID0gMAogICAgSU5URVJBQ1RJVkUgPSAxCiAgICBVTktOT1dOID0gMgo8fGZpbV9zdWZmaXh8PgogICAgTk9OX09WRVJTVUJTQ1JJQkFCTEUgPSAtMQogICAgRU1QVFkgPSAwCiAgICBPVkVSU1VCU0NSSUJBQkxFID0gMQoKPHxmaW1fZW5kfD4="]
["6b567955605e286feeea04cbb5899b71f4b4940b-3","6b567955605e286feeea04cbb5899b71f4b4940b","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KIyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCgpmcm9tIGVudW0gaW1wb3J0IEVudW0sIEludEVudW0KPHxmaW1faG9sZXw+CiAgICAjIFZNIHJlcXVlc3QgZXZlbnRzLgogICAgUkVRVUVTVCA9ICJ2bV9yZXF1aXJlZCIKCgpjbGFzcyBQb3N0cG9uZVR5cGUoRW51bSk6CiAgICAiIiJQb3N0cG9uZSB0eXBlLiIiIgogICAgIyBQb3N0cG9uZSB0aGUgVk0gcmVxdWlyZW1lbnQgZHVlIHRvIHRoZSByZXNvdXJjZSBleGhhdXN0aW9uLgogICAgUmVzb3VyY2UgPSAicmVzb3VyY2UiCiAgICAjIFBvc3Rwb25lIHRoZSBWTSByZXF1aXJlbWVudCBkdWUgdG8gdGhlIGFnZW50J3MgZGVjaXNpb24uCiAgICBBZ2VudCA9ICJhZ2VudCIKCgpjbGFzcyBQbVN0YXRlKEludEVudW0pOgogICAgIiIiUE0gb3ZlcnN1YnNjcmlwdGlvbiBzdGF0ZSwgaW5jbHVkZXMgZW1wdHksIG92ZXJzdWJzY3JpYmFibGUsIG5vbi1vdmVyc3Vic2NyaWJhYmxlLiIiIgogICAgTk9OX09WRVJTVUJTQ1JJQkFCTEUgPSAtMQogICAgRU1QVFkgPSAwCiAgICBPVkVSU1VCU0NSSUJBQkxFID0gMQoKCmNsYXNzIFZtQ2F0ZWdvcnkoSW50RW51bSk6CiAgICBERUxBWV9JTlNFTlNJVElWRSA9IDAKICAgIElOVEVSQUNUSVZFID0gMQogICAgVU5LTk9XTiA9IDIKPHxmaW1fc3VmZml4fD4KCgpjbGFzcyBFdmVudHMoRW51bSk6CiAgICAiIiJWTS1QTSBwYWlycyByZWxhdGVkIGV2ZW50cy4iIiIKPHxmaW1fZW5kfD4="]
["416680e5261155dbfbe06e25a48de4b522ff64d1-1","416680e5261155dbfbe06e25a48de4b522ff64d1","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KZnJvbSBzZWxlbml1bSBpbXBvcnQgd2ViZHJpdmVyCmZyb20gdGltZSBpbXBvcnQgc2xlZXAKZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBjYWxsCmltcG9ydCB3ZWJicm93c2VyCiIiIgp0ZXN0IHRoZSBsaWJyYXJpZXMnIEdvb2dsZSBGb3JtcyB3aGljaCBhcmUgaG9va2VkIHVwIHRvIEdvb2dsZSBBcHBzIFNjcmlwdApuZWVkIHRvIHJ1biB0aGlzIHBlcmlvZGljYWxseSBzaW5jZSB0aGUgZm9ybXMgdGVuZCB0byBsb3NlIHRoZWlyIGFiaWxpdHkgdG8Kc2VuZCBlbWFpbHMgd2l0aG91dCB3YXJuaW5nLCB0aGlzIGNoZWNrcyB0aGF0IHNjcmlwdHMgc3RpbGwgaGF2ZSBwZXJtaXNzaW9ucwoiIiIKCmZvcm1fcm9vdCA9ICdodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9hL2NjYS5lZHUvZm9ybXMvZC97MH0vdmlld2Zvcm0nCmZvcm1zID0gewogICAgJ2FjcXVpc2l0aW9ucyc6ICcxN3BLb1pfVThBSGJGakVnNGJsWGlKb2Q4dVp3S0kwczFERkpCU1NTQjdyRScsCiAgICAnaWxsJzogJzFweWhmN2tyR1AzUFFYMU1jSkl0MWZ3TFVZQXdVZDg4dkdHMWJyQzMzcWU4JywKICAgICdpbnN0cnVjdGlvbic6ICcxaTZYbjBxM01JN0VYTTZWcHhVcjY0b3l3aWZHRGNVLTROWm9pdHAyeTctZycKfQojIHZhbHVlcyBzdWJtaXR0ZWQgdGhyb3VnaCBmb3JtCnZhbHMgPSB7CiAgICAnZmlyc3QgdGl0bGUnOiAnVEVTVCBTd2VldCBDaXRhdGlvbiB0byBGaXJzdCBUaXRsZVxuXG5kb29iaWUgZG9vd29wIGJlZG9vJywKICAgICduYW1lJzogJ1Rlc3R5IFRlc3RlcnNvbicsCiAgICAnZW1haWwnOiAnZXBoZXR0ZXBsYWNlQGNjYS5lZHUnCn0KCgpkZWYgZmlsbF9pbihsYWJlbCwgdmFsdWUpOgogICAgIiIiCiAgICBHaXZlbiBBUklBIGxhYmVsLCBmaWxsIGluIGFsbCBtYXRjaGluZyBmb3JtIGlucHV0cyB3aXRoIHByb3ZpZGVkIHZhbHVlCiAgICAiIiIKICAgICMgZmluZF9lbGVtZW50cyB0eXBlIG1ldGhvZCByZXR1cm4gbGlzdHMKICAgIGZvciBlbCBpbiBicm93c2VyLmZpbmRfZWxlbWVudHNfYnlfY3NzX3NlbGVjdG9yKCdbYXJpYS1sYWJlbD0iJyArIGxhYmVsICsgJyJdJyk6CiAgICAgICAgZWwuc2VuZF9rZXlzKHZhbHVlKQoKCmRlZiBjbGljayhsYWJlbCk6CiAgICAiIiIKICAgIEdpdmVuIEFSSUEgbGFiZWwsIGNsaWNrIHRoZSBET00gZWxlbWVudAogICAgIiIiCiAgICBicm93c2VyLmZpbmRfZWxlbWVudHNfYnlfY3NzX3NlbGVjdG9yKCdbYXJpYS1sYWJlbD0iJyArIGxhYmVsICsgJyJdJylbMF0uY2xpY2soKQoKCmRlZiB0ZXN0X3JlY29tbWVuZGF0aW9ucygpOgogICAgIiIiCiAgICB0ZXN0IHRoZSByZWNvbW1lbmRlZCBhY3F1aXNpdGlvbnMgZm9ybQogICAgIiIiCiAgICBicm93c2VyLmdldChmb3JtX3Jvb3QuZm9ybWF0KGZvcm1zWydhY3F1aXNpdGlvbnMnXSkpCgogICAgIyBmaXJzdCBjaXRhdGlvbgogICAgZmlsbF9pbigiRmlyc3QgVGl0bGUiLCB2YWxzWydmaXJzdCB0aXRsZSddKQogICAgIyBsZWF2ZSBibGFuayBhIGJ1bmNoIG9mIG9wdGlvbmFsIGZpZWxkcy4uLgogICAgIyBuYW1lCiAgICBmaWxsX2luKCJOYW1lIiwgdmFsc1snbmFtZSddKQogICAgIyBDQ0EgYWZmaWxsaWF0aW9uID0+IEdyYWQgU3R1ZGVudAogICAgY2xpY2soIkdyYWR1YXRlIFN0dWRlbnQiKQogICAgIyBlbWFpbAogICAgZmlsbF9pbigiRW1haWwiLCB2YWxzWydlbWFpbCddKQogICAgIyBwcm9ncmFtID0+IFdyaXRpbmcvTGl0ZXJhdHVyZS9Db21pY3MKICAgIGNsaWNrKCJXcml0aW5nL0xpdGVyYXR1cmUvQ29taWNzIikKCiAgICAjIHN1Ym1pdCBmb3JtCiAgICBicm93c2VyLmZpbmRfZWxlbWVudF9ieV90YWdfbmFtZSgnZm9ybScpLnN1Ym1pdCgpCgoKZGVmIHRlc3RfaWxsKCk6CiAgICAiIiIKICAgIHRlc3QgdGhlIGludGVyLWxpYnJhcnkgbG9hbiByZXF1ZXN0IGZvcm0KICAgICIiIgogICAgYnJvd3Nlci5nZXQoZm9ybV9yb290LmZvcm1hdChmb3Jtc1snaWxsJ10pKQogICAgIyBjaXRhdGlvbgogICAgZmlsbF9pbignQ2l0YXRpb24nLCB2YWxzWydmaXJzdCB0aXRsZSddKQogICAgIyBuYW1lCiAgICBmaWxsX2luKCdOYW1lJywgdmFsc1snbmFtZSddKQogICAgIyBlbWFpbAogICAgZmlsbF9pbignRW1haWwnLCB2YWxzWydlbWFpbCddKQogICAgIyBDQ0EgYWZmaWxsaWF0aW9uID0+IEdyYWQgU3R1ZGVudAogICAgY2xpY2soJ0dyYWR1YXRlIFN0dWRlbnQnKQogICAgIyBEZXBhcnRtZW50IGRyb3AtZG93biBpcyBjb21wbGljYXRlZCBiZWNhdXNlIGNob2ljZXMgYXJlIGhpZGRlbiAmIGNhbm5vdCBiZSBjbGlja2VkCjx8ZmltX2hvbGV8PgogICAgd2ViZHJpdmVyLkFjdGlvbkNoYWlucyhicm93c2VyKS5jbGljayhkcm9wX2Rvd24pLm1vdmVfdG9fZWxlbWVudChkZXB0KS5jbGljayhkZXB0KS5wZXJmb3JtKCkKICAgICMgc3VibWl0IGZvcm0KICAgIGJyb3dzZXIuZmluZF9lbGVtZW50X2J5X3RhZ19uYW1lKCdmb3JtJykuc3VibWl0KCkKCgpkZWYgdGVzdF9pbnN0cnVjdGlvbigpOgogICAgIiIiCiAgICB0ZXN0IHRoZSBpbnN0cnVjdGlvbiBzZXNzaW9uIHJlcXVlc3QgZm9ybQogICAgIiIiCiAgICBicm93c2VyLmdldChmb3JtX3Jvb3QuZm9ybWF0KGZvcm1zWydpbnN0cnVjdGlvbiddKSkKICAgICMgd2FpdCBmb3IgdXNlciB0byBtYW51YWxseSBzaWduIGludG8gR29vZ2xlCiAgICAjIEBUT0RPIHNob3VsZCBhdXRvbWF0ZSB0aGlzLCBwcm9iYWJseSBieSBwYXNzaW5nIGNyZWRlbnRpYWxzIG9uIHRoZSBDTEkKICAgIHByaW50KCdXYWl0aW5nIHRvIHNpZ24gaW50byBHb29nbGUsIGhpdCBSZXR1cm4gd2hlbiBkb25lLi4uJykKICAgIGNhbGwoJ3JlYWQnKSAgIyBnb3R0YSBiZSBhIG5hdGl2ZSBQeXRob24gd2F5IHRvIGRvIHRoaXMgdy9vIHNoZWxsaW5nIG91dAogICAgIyBjb3Vyc2UgbmFtZQogICAgZmlsbF9pbignQ291cnNlJywgJ1RFU1RTLTEwMScpCiAgICAjIGRhdGUvdGltZSwgc3RyaW5nIGlzIG1vcmUgY29tcGxpY2F0ZWQgdG8gZG8sIG11bHRpLXBhcnQgaW5wdXQKICAgICMgd2Ugc2V0IHRvIDAxLzAxLzIwMDAgMTA6MTAgQU0KICAgIGZvciBlbCBpbiBicm93c2VyLmZpbmRfZWxlbWVudHNfYnlfY3NzX3NlbGVjdG9yKCdpbnB1dFt0eXBlPSJkYXRlIl0nKToKICAgICAgICBlbC5zZW5kX2tleXMoJzAxMDEyMDAwJykKICAgIGZpbGxfaW4oJ0hvdXInLCAnMTAnKQogICAgZmlsbF9pbignTWludXRlJywgJzEwJykKICAgICMgQU0gaXMgZGVmYXVsdCBzbyB3ZSBkb24ndCBuZWVkIHRvIHNwZWNpZnkKICAgIGJyb3dzZXIuZmluZF9lbGVtZW50X2J5X3RhZ19uYW1lKCdmb3JtJykuc3VibWl0KCkKCgpkZWYgb3Blbl9zaGVldHMoKToKICAgICIiIgogICAgT3BlbiB0aGUgYmFjay1lbmQgc3ByZWFkc2hlZXRzIGZvciBlYWNoIGZvcm0KICAgIHRvIHNlZSBpZiBlbnRyaWVzIHdlcmUgY29waWVkIG92ZXIgcHJvcGVybHkKICAgICIiIgogICAgc2hlZXRfcm9vdCA9ICdodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9zcHJlYWRzaGVldHMvZC8nCiAgICBzaGVldHMgPSB7CiAgICAgICAgJ2FjcXVpc2l0aW9ucyc6ICcxQTBiQkI0X21ZV3RjV29xZkI1SFA2SDdXYklXalRrbnpIblZyLTVFUHc4cy9lZGl0I2dpZD0xMzExNjI3NTM0JywKICAgICAgICAnaWxsJzogJzFWNHlhSmFqUTM3b0dFRlpYWXhHY1R0bEY2SnFfWGhRdlpWR0Y0eEJXTzFrL2VkaXQjZ2lkPTI3NTg3NTU0NCcsCiAgICAgICAgJ2luc3RydWN0aW9uJzogJzFXcGR5eXZyVmpDcld6SHByVU9aMUlsRG1VMnBRRWIycXJ6Tk1MOUcySlJ3L2VkaXQjZ2lkPTExOTA2NTQ2MzYnCiAgICB9CiAgICBmb3Igc2hlZXQgaW4gc2hlZXRzOgogICAgICAgIHdlYmJyb3dzZXIub3BlbihzaGVldF9yb290ICsgc2hlZXRzW3NoZWV0XSkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIyBQaGFudG9tSlMgaXMgYSBwcmVmZXJhYmxlLCBmYXN0ZXIgb3B0aW9uIGJ1dCBpdCBzZWVtcyB0byBjaG9rZQogICAgIyB3aGVyZWFzIGFuIGFjdHVhbCBicm93c2VyIHdpbmRvdyBkb2VzIG5vdAogICAgIyBicm93c2VyID0gd2ViZHJpdmVyLlBoYW50b21KUygpCiAgICBicm93c2VyID0gd2ViZHJpdmVyLkNocm9tZSgpCiAgICBicm93c2VyLmltcGxpY2l0bHlfd2FpdCgzMCkKCiAgICBmb3IgdGVzdCBpbiAodGVzdF9yZWNvbW1lbmRhdGlvbnMsIHRlc3RfaWxsLCB0ZXN0X2luc3RydWN0aW9uKToKICAgICAgICB0ZXN0KCkKICAgICAgICBzbGVlcCgxKQoKICAgIG9wZW5fc2hlZXRzKCkKICAgIGJyb3dzZXIucXVpdCgpCjx8ZmltX3N1ZmZpeHw+CiAgICAjIFdlIG5lZWQgdG8gZG8gc29tZXRoaW5nIGxpa2UgY2xpY2sgRGVwYXJ0bWVudCBsYWJlbCwgY2xpY2sgc3BlY2lmaWMgb3B0aW9uCiAgICBkcm9wX2Rvd24gPSBicm93c2VyLmZpbmRfZWxlbWVudHNfYnlfY3NzX3NlbGVjdG9yKCdbYXJpYS1sYWJlbD0iRGVwYXJ0bWVudCJdJylbMF0KICAgIGRlcHQgPSBicm93c2VyLmZpbmRfZWxlbWVudHNfYnlfY3NzX3NlbGVjdG9yKCdbYXJpYS1sYWJlbD0iQXJjaGl0ZWN0dXJlIl0nKVswXQogICAgIyBodHRwOi8vc2VsZW5pdW0tcHl0aG9uLnJlYWR0aGVkb2NzLm9yZy9hcGkuaHRtbCNtb2R1bGUtc2VsZW5pdW0ud2ViZHJpdmVyLmNvbW1vbi5hY3Rpb25fY2hhaW5zCjx8ZmltX2VuZHw+"]
["416680e5261155dbfbe06e25a48de4b522ff64d1-2","416680e5261155dbfbe06e25a48de4b522ff64d1","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KZnJvbSBzZWxlbml1bSBpbXBvcnQgd2ViZHJpdmVyCmZyb20gdGltZSBpbXBvcnQgc2xlZXAKZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBjYWxsCmltcG9ydCB3ZWJicm93c2VyCiIiIgp0ZXN0IHRoZSBsaWJyYXJpZXMnIEdvb2dsZSBGb3JtcyB3aGljaCBhcmUgaG9va2VkIHVwIHRvIEdvb2dsZSBBcHBzIFNjcmlwdApuZWVkIHRvIHJ1biB0aGlzIHBlcmlvZGljYWxseSBzaW5jZSB0aGUgZm9ybXMgdGVuZCB0byBsb3NlIHRoZWlyIGFiaWxpdHkgdG8Kc2VuZCBlbWFpbHMgd2l0aG91dCB3YXJuaW5nLCB0aGlzIGNoZWNrcyB0aGF0IHNjcmlwdHMgc3RpbGwgaGF2ZSBwZXJtaXNzaW9ucwoiIiIKCmZvcm1fcm9vdCA9ICdodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9hL2NjYS5lZHUvZm9ybXMvZC97MH0vdmlld2Zvcm0nCmZvcm1zID0gewogICAgJ2FjcXVpc2l0aW9ucyc6ICcxN3BLb1pfVThBSGJGakVnNGJsWGlKb2Q4dVp3S0kwczFERkpCU1NTQjdyRScsCiAgICAnaWxsJzogJzFweWhmN2tyR1AzUFFYMU1jSkl0MWZ3TFVZQXdVZDg4dkdHMWJyQzMzcWU4JywKICAgICdpbnN0cnVjdGlvbic6ICcxaTZYbjBxM01JN0VYTTZWcHhVcjY0b3l3aWZHRGNVLTROWm9pdHAyeTctZycKfQojIHZhbHVlcyBzdWJtaXR0ZWQgdGhyb3VnaCBmb3JtCnZhbHMgPSB7CiAgICAnZmlyc3QgdGl0bGUnOiAnVEVTVCBTd2VldCBDaXRhdGlvbiB0byBGaXJzdCBUaXRsZVxuXG5kb29iaWUgZG9vd29wIGJlZG9vJywKICAgICduYW1lJzogJ1Rlc3R5IFRlc3RlcnNvbicsCiAgICAnZW1haWwnOiAnZXBoZXR0ZXBsYWNlQGNjYS5lZHUnCn0KCgpkZWYgZmlsbF9pbihsYWJlbCwgdmFsdWUpOgogICAgIiIiCiAgICBHaXZlbiBBUklBIGxhYmVsLCBmaWxsIGluIGFsbCBtYXRjaGluZyBmb3JtIGlucHV0cyB3aXRoIHByb3ZpZGVkIHZhbHVlCiAgICAiIiIKICAgICMgZmluZF9lbGVtZW50cyB0eXBlIG1ldGhvZCByZXR1cm4gbGlzdHMKICAgIGZvciBlbCBpbiBicm93c2VyLmZpbmRfZWxlbWVudHNfYnlfY3NzX3NlbGVjdG9yKCdbYXJpYS1sYWJlbD0iJyArIGxhYmVsICsgJyJdJyk6CiAgICAgICAgZWwuc2VuZF9rZXlzKHZhbHVlKQoKCmRlZiBjbGljayhsYWJlbCk6CiAgICAiIiIKICAgIEdpdmVuIEFSSUEgbGFiZWwsIGNsaWNrIHRoZSBET00gZWxlbWVudAogICAgIiIiCiAgICBicm93c2VyLmZpbmRfZWxlbWVudHNfYnlfY3NzX3NlbGVjdG9yKCdbYXJpYS1sYWJlbD0iJyArIGxhYmVsICsgJyJdJylbMF0uY2xpY2soKQoKCmRlZiB0ZXN0X3JlY29tbWVuZGF0aW9ucygpOgogICAgIiIiCiAgICB0ZXN0IHRoZSByZWNvbW1lbmRlZCBhY3F1aXNpdGlvbnMgZm9ybQo8fGZpbV9ob2xlfD4KICAgIGZpbGxfaW4oIkZpcnN0IFRpdGxlIiwgdmFsc1snZmlyc3QgdGl0bGUnXSkKICAgICMgbGVhdmUgYmxhbmsgYSBidW5jaCBvZiBvcHRpb25hbCBmaWVsZHMuLi4KICAgICMgbmFtZQogICAgZmlsbF9pbigiTmFtZSIsIHZhbHNbJ25hbWUnXSkKICAgICMgQ0NBIGFmZmlsbGlhdGlvbiA9PiBHcmFkIFN0dWRlbnQKICAgIGNsaWNrKCJHcmFkdWF0ZSBTdHVkZW50IikKICAgICMgZW1haWwKICAgIGZpbGxfaW4oIkVtYWlsIiwgdmFsc1snZW1haWwnXSkKICAgICMgcHJvZ3JhbSA9PiBXcml0aW5nL0xpdGVyYXR1cmUvQ29taWNzCiAgICBjbGljaygiV3JpdGluZy9MaXRlcmF0dXJlL0NvbWljcyIpCgogICAgIyBzdWJtaXQgZm9ybQogICAgYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfdGFnX25hbWUoJ2Zvcm0nKS5zdWJtaXQoKQoKCmRlZiB0ZXN0X2lsbCgpOgogICAgIiIiCiAgICB0ZXN0IHRoZSBpbnRlci1saWJyYXJ5IGxvYW4gcmVxdWVzdCBmb3JtCiAgICAiIiIKICAgIGJyb3dzZXIuZ2V0KGZvcm1fcm9vdC5mb3JtYXQoZm9ybXNbJ2lsbCddKSkKICAgICMgY2l0YXRpb24KICAgIGZpbGxfaW4oJ0NpdGF0aW9uJywgdmFsc1snZmlyc3QgdGl0bGUnXSkKICAgICMgbmFtZQogICAgZmlsbF9pbignTmFtZScsIHZhbHNbJ25hbWUnXSkKICAgICMgZW1haWwKICAgIGZpbGxfaW4oJ0VtYWlsJywgdmFsc1snZW1haWwnXSkKICAgICMgQ0NBIGFmZmlsbGlhdGlvbiA9PiBHcmFkIFN0dWRlbnQKICAgIGNsaWNrKCdHcmFkdWF0ZSBTdHVkZW50JykKICAgICMgRGVwYXJ0bWVudCBkcm9wLWRvd24gaXMgY29tcGxpY2F0ZWQgYmVjYXVzZSBjaG9pY2VzIGFyZSBoaWRkZW4gJiBjYW5ub3QgYmUgY2xpY2tlZAogICAgIyBXZSBuZWVkIHRvIGRvIHNvbWV0aGluZyBsaWtlIGNsaWNrIERlcGFydG1lbnQgbGFiZWwsIGNsaWNrIHNwZWNpZmljIG9wdGlvbgogICAgZHJvcF9kb3duID0gYnJvd3Nlci5maW5kX2VsZW1lbnRzX2J5X2Nzc19zZWxlY3RvcignW2FyaWEtbGFiZWw9IkRlcGFydG1lbnQiXScpWzBdCiAgICBkZXB0ID0gYnJvd3Nlci5maW5kX2VsZW1lbnRzX2J5X2Nzc19zZWxlY3RvcignW2FyaWEtbGFiZWw9IkFyY2hpdGVjdHVyZSJdJylbMF0KICAgICMgaHR0cDovL3NlbGVuaXVtLXB5dGhvbi5yZWFkdGhlZG9jcy5vcmcvYXBpLmh0bWwjbW9kdWxlLXNlbGVuaXVtLndlYmRyaXZlci5jb21tb24uYWN0aW9uX2NoYWlucwogICAgd2ViZHJpdmVyLkFjdGlvbkNoYWlucyhicm93c2VyKS5jbGljayhkcm9wX2Rvd24pLm1vdmVfdG9fZWxlbWVudChkZXB0KS5jbGljayhkZXB0KS5wZXJmb3JtKCkKICAgICMgc3VibWl0IGZvcm0KICAgIGJyb3dzZXIuZmluZF9lbGVtZW50X2J5X3RhZ19uYW1lKCdmb3JtJykuc3VibWl0KCkKCgpkZWYgdGVzdF9pbnN0cnVjdGlvbigpOgogICAgIiIiCiAgICB0ZXN0IHRoZSBpbnN0cnVjdGlvbiBzZXNzaW9uIHJlcXVlc3QgZm9ybQogICAgIiIiCiAgICBicm93c2VyLmdldChmb3JtX3Jvb3QuZm9ybWF0KGZvcm1zWydpbnN0cnVjdGlvbiddKSkKICAgICMgd2FpdCBmb3IgdXNlciB0byBtYW51YWxseSBzaWduIGludG8gR29vZ2xlCiAgICAjIEBUT0RPIHNob3VsZCBhdXRvbWF0ZSB0aGlzLCBwcm9iYWJseSBieSBwYXNzaW5nIGNyZWRlbnRpYWxzIG9uIHRoZSBDTEkKICAgIHByaW50KCdXYWl0aW5nIHRvIHNpZ24gaW50byBHb29nbGUsIGhpdCBSZXR1cm4gd2hlbiBkb25lLi4uJykKICAgIGNhbGwoJ3JlYWQnKSAgIyBnb3R0YSBiZSBhIG5hdGl2ZSBQeXRob24gd2F5IHRvIGRvIHRoaXMgdy9vIHNoZWxsaW5nIG91dAogICAgIyBjb3Vyc2UgbmFtZQogICAgZmlsbF9pbignQ291cnNlJywgJ1RFU1RTLTEwMScpCiAgICAjIGRhdGUvdGltZSwgc3RyaW5nIGlzIG1vcmUgY29tcGxpY2F0ZWQgdG8gZG8sIG11bHRpLXBhcnQgaW5wdXQKICAgICMgd2Ugc2V0IHRvIDAxLzAxLzIwMDAgMTA6MTAgQU0KICAgIGZvciBlbCBpbiBicm93c2VyLmZpbmRfZWxlbWVudHNfYnlfY3NzX3NlbGVjdG9yKCdpbnB1dFt0eXBlPSJkYXRlIl0nKToKICAgICAgICBlbC5zZW5kX2tleXMoJzAxMDEyMDAwJykKICAgIGZpbGxfaW4oJ0hvdXInLCAnMTAnKQogICAgZmlsbF9pbignTWludXRlJywgJzEwJykKICAgICMgQU0gaXMgZGVmYXVsdCBzbyB3ZSBkb24ndCBuZWVkIHRvIHNwZWNpZnkKICAgIGJyb3dzZXIuZmluZF9lbGVtZW50X2J5X3RhZ19uYW1lKCdmb3JtJykuc3VibWl0KCkKCgpkZWYgb3Blbl9zaGVldHMoKToKICAgICIiIgogICAgT3BlbiB0aGUgYmFjay1lbmQgc3ByZWFkc2hlZXRzIGZvciBlYWNoIGZvcm0KICAgIHRvIHNlZSBpZiBlbnRyaWVzIHdlcmUgY29waWVkIG92ZXIgcHJvcGVybHkKICAgICIiIgogICAgc2hlZXRfcm9vdCA9ICdodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9zcHJlYWRzaGVldHMvZC8nCiAgICBzaGVldHMgPSB7CiAgICAgICAgJ2FjcXVpc2l0aW9ucyc6ICcxQTBiQkI0X21ZV3RjV29xZkI1SFA2SDdXYklXalRrbnpIblZyLTVFUHc4cy9lZGl0I2dpZD0xMzExNjI3NTM0JywKICAgICAgICAnaWxsJzogJzFWNHlhSmFqUTM3b0dFRlpYWXhHY1R0bEY2SnFfWGhRdlpWR0Y0eEJXTzFrL2VkaXQjZ2lkPTI3NTg3NTU0NCcsCiAgICAgICAgJ2luc3RydWN0aW9uJzogJzFXcGR5eXZyVmpDcld6SHByVU9aMUlsRG1VMnBRRWIycXJ6Tk1MOUcySlJ3L2VkaXQjZ2lkPTExOTA2NTQ2MzYnCiAgICB9CiAgICBmb3Igc2hlZXQgaW4gc2hlZXRzOgogICAgICAgIHdlYmJyb3dzZXIub3BlbihzaGVldF9yb290ICsgc2hlZXRzW3NoZWV0XSkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIyBQaGFudG9tSlMgaXMgYSBwcmVmZXJhYmxlLCBmYXN0ZXIgb3B0aW9uIGJ1dCBpdCBzZWVtcyB0byBjaG9rZQogICAgIyB3aGVyZWFzIGFuIGFjdHVhbCBicm93c2VyIHdpbmRvdyBkb2VzIG5vdAogICAgIyBicm93c2VyID0gd2ViZHJpdmVyLlBoYW50b21KUygpCiAgICBicm93c2VyID0gd2ViZHJpdmVyLkNocm9tZSgpCiAgICBicm93c2VyLmltcGxpY2l0bHlfd2FpdCgzMCkKCiAgICBmb3IgdGVzdCBpbiAodGVzdF9yZWNvbW1lbmRhdGlvbnMsIHRlc3RfaWxsLCB0ZXN0X2luc3RydWN0aW9uKToKICAgICAgICB0ZXN0KCkKICAgICAgICBzbGVlcCgxKQoKICAgIG9wZW5fc2hlZXRzKCkKICAgIGJyb3dzZXIucXVpdCgpCjx8ZmltX3N1ZmZpeHw+CiAgICAiIiIKICAgIGJyb3dzZXIuZ2V0KGZvcm1fcm9vdC5mb3JtYXQoZm9ybXNbJ2FjcXVpc2l0aW9ucyddKSkKCiAgICAjIGZpcnN0IGNpdGF0aW9uCjx8ZmltX2VuZHw+"]
["4164b2b4c3d05f394cd7a8dc60080157efd3be79-1","4164b2b4c3d05f394cd7a8dc60080157efd3be79","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KZnJvbSB0d2lzdGVkLmludGVybmV0IGltcG9ydCByZWFjdG9yLCBlcnJvcgpmcm9tIGNvbm5lY3Rpb25zIGltcG9ydCBNZXNoQ2xpZW50RmFjdG9yeSwgTWVzaFNlcnZlckZhY3RvcnksIE1lc2hUY3BQcm90b2NvbCwgTWVzaFVkcFByb3RvY29sCgoKY2xhc3MgTWVzaERldmljZUluZm86CiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgbGlzdGVuc190byk6CiAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgIHNlbGYubGlzdGVuc190byA9IGxpc3RlbnNfdG8KCgpjbGFzcyBNZXNoTWVzc2FnZToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZW5kZXIsIHRhcmdldCwgbXNnX3R5cGUsIGRhdGEpOgogICAgICAgIHNlbGYuc2VuZGVyID0gc2VuZGVyCiAgICAgICAgc2VsZi50YXJnZXQgPSB0YXJnZXQKICAgICAgICBzZWxmLnR5cGUgPSBtc2dfdHlwZQogICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKCgpjbGFzcyBBbnlNZXNoRGVsZWdhdGVQcm90b2NvbDoKICAgIGRlZiBjb25uZWN0ZWRfdG8oc2VsZiwgYW55bWVzaCwgZGV2aWNlX2luZm8pOgogICAgICAgIHBhc3MKICAgIGRlZiBkaXNjb25uZWN0ZWRfZnJvbShzZWxmLCBhbnltZXNoLCBuYW1lKToKICAgICAgICBwYXNzCiAgICBkZWYgcmVjZWl2ZWRfbXNnKHNlbGYsIGFueW1lc2gsIG1lc3NhZ2UpOgogICAgICAgIHBhc3MKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIHJlY2VpdmVkX3VwZGF0ZWRfc3Vic2NyaXB0aW9ucyhzZWxmLCBhbnltZXNoLCBzdWJzY3JpcHRpb25zLCBuYW1lKToKICAgICAgICBwYXNzCgo8fGZpbV9lbmR8Pg=="]
["4164b2b4c3d05f394cd7a8dc60080157efd3be79-2","4164b2b4c3d05f394cd7a8dc60080157efd3be79","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KZnJvbSB0d2lzdGVkLmludGVybmV0IGltcG9ydCByZWFjdG9yLCBlcnJvcgpmcm9tIGNvbm5lY3Rpb25zIGltcG9ydCBNZXNoQ2xpZW50RmFjdG9yeSwgTWVzaFNlcnZlckZhY3RvcnksIE1lc2hUY3BQcm90b2NvbCwgTWVzaFVkcFByb3RvY29sCgoKY2xhc3MgTWVzaERldmljZUluZm86CiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgbGlzdGVuc190byk6CiAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgIHNlbGYubGlzdGVuc190byA9IGxpc3RlbnNfdG8KCgpjbGFzcyBNZXNoTWVzc2FnZToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZW5kZXIsIHRhcmdldCwgbXNnX3R5cGUsIGRhdGEpOgogICAgICAgIHNlbGYuc2VuZGVyID0gc2VuZGVyCiAgICAgICAgc2VsZi50YXJnZXQgPSB0YXJnZXQKICAgICAgICBzZWxmLnR5cGUgPSBtc2dfdHlwZQogICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKCgpjbGFzcyBBbnlNZXNoRGVsZWdhdGVQcm90b2NvbDoKICAgIGRlZiBjb25uZWN0ZWRfdG8oc2VsZiwgYW55bWVzaCwgZGV2aWNlX2luZm8pOgogICAgICAgIHBhc3MKICAgIGRlZiBkaXNjb25uZWN0ZWRfZnJvbShzZWxmLCBhbnltZXNoLCBuYW1lKToKICAgICAgICBwYXNzCiAgICBkZWYgcmVjZWl2ZWRfbXNnKHNlbGYsIGFueW1lc2gsIG1lc3NhZ2UpOgogICAgICAgIHBhc3MKICAgIGRlZiByZWNlaXZlZF91cGRhdGVkX3N1YnNjcmlwdGlvbnMoc2VsZiwgYW55bWVzaCwgc3Vic2NyaXB0aW9ucywgbmFtZSk6CiAgICAgICAgcGFzcwoKY2xhc3MgQW55TWVzaDoKICAgIE1TR19UWVBFX1JFUVVFU1QgPSAwCiAgICBNU0dfVFlQRV9QVUJMSVNIID0gMQogICAgTVNHX1RZUEVfU1lTVEVNID0gMgogICAgTVNHX1NZU1RZUEVfU1VCU0NSSVBUSU9OUyA9IDAKCiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgc3Vic2NyaXB0aW9ucywgZGVsZWdhdGUsIG5ldHdvcmtfaWQ9ImFueW1lc2giLCB1ZHBfcG9ydD0xMjM0NSwgdGNwX3BvcnQ9MTIzNDYpOgogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICBzZWxmLnN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zCiAgICAgICAgc2VsZi5jb25uZWN0aW9ucyA9IFtdCgogICAgICAgIHNlbGYubmV0d29ya19pZCA9IG5ldHdvcmtfaWQKICAgICAgICBzZWxmLnRjcF9wb3J0ID0gMAogICAgICAgIHNlbGYudWRwX3BvcnQgPSB1ZHBfcG9ydAogICAgICAgIHNlbGYud29ya2luZ19wb3J0ID0gdGNwX3BvcnQKICAgICAgICBzZWxmLmRlbGVnYXRlID0gZGVsZWdhdGUKCiAgICAgICAgc2VsZi5zZXR1cF91ZHAoKQo8fGZpbV9ob2xlfD4KICAgIGRlZiBzZXR1cF90Y3Aoc2VsZik6CiAgICAgICAgZiA9IE1lc2hTZXJ2ZXJGYWN0b3J5KHNlbGYpCiAgICAgICAgZi5wcm90b2NvbCA9IE1lc2hUY3BQcm90b2NvbAogICAgICAgIHRyeToKICAgICAgICAgICAgcmVhY3Rvci5saXN0ZW5UQ1Aoc2VsZi53b3JraW5nX3BvcnQsIGYpCiAgICAgICAgZXhjZXB0IGVycm9yLkNhbm5vdExpc3RlbkVycm9yOgogICAgICAgICAgICBzZWxmLndvcmtpbmdfcG9ydCArPSAxCiAgICAgICAgICAgIHNlbGYuc2V0dXBfdGNwKCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLnRjcF9wb3J0ID0gc2VsZi53b3JraW5nX3BvcnQKCiAgICBkZWYgc2V0dXBfdWRwKHNlbGYpOgogICAgICAgIHJlYWN0b3IubGlzdGVuTXVsdGljYXN0KHNlbGYudWRwX3BvcnQsIE1lc2hVZHBQcm90b2NvbChzZWxmKSwgbGlzdGVuTXVsdGlwbGU9VHJ1ZSkKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgcnVuKCk6CiAgICAgICAgcmVhY3Rvci5ydW4oKQoKICAgIGRlZiBjb25uZWN0X3RjcChzZWxmLCBhZGRyZXNzLCBwb3J0LCBuYW1lKToKICAgICAgICBpZiBub3Qgc2VsZi5jb25uZWN0aW9uX2Zvcl9uYW1lKG5hbWUpOgogICAgICAgICAgICAjc2VsZi5hbnltZXNoLl9yZXBvcnQoJ3RjcCcsICdjb25uZWN0aW5nIG5vdyB0byAnICsgYWRkcmVzcyArICcsJyArIHN0cihwb3J0KSArICcsJyArIG5hbWUpCiAgICAgICAgICAgIHJlYWN0b3IuY29ubmVjdFRDUChhZGRyZXNzLCBwb3J0LCBNZXNoQ2xpZW50RmFjdG9yeShzZWxmKSkKCiAgICBkZWYgcmVxdWVzdChzZWxmLCB0YXJnZXQsIG1lc3NhZ2UpOgogICAgICAgIG1zZ19zdHJpbmcgPSBzZWxmLnN0cmluZ19mcm9tX21zZ19kYXRhKCdyZXEnLCB0YXJnZXQsIG1lc3NhZ2UpCiAgICAgICAgY29ubiA9IHNlbGYuY29ubmVjdGlvbl9mb3JfbmFtZSh0YXJnZXQpCiAgICAgICAgaWYgY29ubjoKICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uX2Zvcl9uYW1lKHRhcmdldCkuc2VuZExpbmUobXNnX3N0cmluZykKCiAgICBkZWYgcHVibGlzaChzZWxmLCB0YXJnZXQsIG1lc3NhZ2UpOgogICAgICAgIG1zZ19zdHJpbmcgPSBzZWxmLnN0cmluZ19mcm9tX21zZ19kYXRhKCdyZXEnLCB0YXJnZXQsIG1lc3NhZ2UpCiAgICAgICAgZm9yIGNvbm5lY3Rpb24gaW4gc2VsZi5jb25uZWN0aW9uczoKICAgICAgICAgICAgZm9yIHN1YnNjcmlwdGlvbiBpbiBjb25uZWN0aW9uLnN1YnNjcmlwdGlvbnM6CiAgICAgICAgICAgICAgICBpZiBzdWJzY3JpcHRpb24gPT0gdGFyZ2V0OgogICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uc2VuZExpbmUobXNnX3N0cmluZykKICAgICAgICAgICAgICAgICAgICBicmVhawogICAgZGVmIHVwZGF0ZV9zdWJzY3JpcHRpb25zKHNlbGYsIHN1YnNjcmlwdGlvbnMpOgogICAgICAgIHNlbGYuc3Vic2NyaXB0aW9ucyA9IHN1YnNjcmlwdGlvbnMKICAgICAgICBmb3IgY29ubmVjdGlvbiBpbiBzZWxmLmNvbm5lY3Rpb25zOgogICAgICAgICAgICBjb25uZWN0aW9uLnNlbmRJbmZvKFRydWUpCgojdXRpbGl0eSBtZXRob2RzOgogICAgZGVmIHN0cmluZ19mcm9tX21zZ19kYXRhKHNlbGYsIG1zZ190eXBlLCB0YXJnZXQsIHBheWxvYWQpOgogICAgICAgIHBhY2thZ2UgPSB7InR5cGUiOiBtc2dfdHlwZSwgInRhcmdldCI6IHRhcmdldCwgInNlbmRlciI6IHNlbGYubmFtZSwgImRhdGEiOiBwYXlsb2FkfQogICAgICAgIHJldHVybiBqc29uLmR1bXBzKHBhY2thZ2UpCgogICAgZGVmIGNvbm5lY3Rpb25fZm9yX25hbWUoc2VsZiwgbmFtZSk6CiAgICAgICAgZm9yIGNvbm5lY3Rpb24gaW4gc2VsZi5jb25uZWN0aW9uczoKICAgICAgICAgICAgaWYgaGFzYXR0cihjb25uZWN0aW9uLCAnbmFtZScpOgogICAgICAgICAgICAgICAgaWYgY29ubmVjdGlvbi5uYW1lID09IG5hbWU6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24KICAgICAgICByZXR1cm4gTm9uZQoKICAgIGRlZiBnZXRfY29ubmVjdGlvbnMoc2VsZik6CiAgICAgICAgYWN0aXZlX2Nvbm5lY3Rpb25zID0gW10KICAgICAgICBmb3IgY29ubmVjdGlvbiBpbiBzZWxmLmNvbm5lY3Rpb25zOgogICAgICAgICAgICBpZiBoYXNhdHRyKGNvbm5lY3Rpb24sICduYW1lJyk6CiAgICAgICAgICAgICAgICBhY3RpdmVfY29ubmVjdGlvbnMuYXBwZW5kKE1lc2hEZXZpY2VJbmZvKGNvbm5lY3Rpb24ubmFtZVs6XSwgY29ubmVjdGlvbi5zdWJzY3JpcHRpb25zWzpdKSkKICAgICAgICByZXR1cm4gYWN0aXZlX2Nvbm5lY3Rpb25zCgogICAgZGVmIF9yZXBvcnQoc2VsZiwgcmVwb3J0X21zZyk6CiAgICAgICAgc2VsZi5fcmVjZWl2ZWRfbXNnKHsnc2VuZGVyJzogImRpYWciLCAndHlwZSc6IEFueU1lc2guTVNHX1RZUEVfU1lTVEVNLCAndGFyZ2V0JzogJ3JlcG9ydCcsICdkYXRhJzogeydtc2cnOiByZXBvcnRfbXNnfX0pCgojRnJvbSBUQ1A6CiAgICBkZWYgX2Nvbm5lY3RlZF90byhzZWxmLCBjb25uZWN0aW9uKToKICAgICAgICBpZiBoYXNhdHRyKGNvbm5lY3Rpb24sICduYW1lJyk6CiAgICAgICAgICAgIHNlbGYuZGVsZWdhdGUuY29ubmVjdGVkX3RvKHNlbGYsIE1lc2hEZXZpY2VJbmZvKGNvbm5lY3Rpb24ubmFtZVs6XSwgY29ubmVjdGlvbi5zdWJzY3JpcHRpb25zWzpdKSkKCiAgICBkZWYgX2Rpc2Nvbm5lY3RlZF9mcm9tKHNlbGYsIGNvbm5lY3Rpb24pOgogICAgICAgIGlmIGhhc2F0dHIoY29ubmVjdGlvbiwgJ25hbWUnKToKICAgICAgICAgICBzZWxmLmRlbGVnYXRlLmRpc2Nvbm5lY3RlZF9mcm9tKHNlbGYsIGNvbm5lY3Rpb24ubmFtZVs6XSkKCiAgICBkZWYgX3JlY2VpdmVkX21zZyhzZWxmLCBkYXRhKToKICAgICAgICBtc2cgPSBNZXNoTWVzc2FnZShkYXRhWydzZW5kZXInXSwgZGF0YVsndGFyZ2V0J10sIGRhdGFbJ3R5cGUnXSwgZGF0YVsnZGF0YSddKQogICAgICAgIHNlbGYuZGVsZWdhdGUucmVjZWl2ZWRfbXNnKHNlbGYsIG1zZykKICAgIGRlZiBfdXBkYXRlZF9zdWJzY3JpcHRpb25zKHNlbGYsIHN1YnNjcmlwdGlvbnMsIG5hbWUpOgogICAgICAgIHNlbGYuZGVsZWdhdGUucmVjZWl2ZWRfdXBkYXRlZF9zdWJzY3JpcHRpb25zKHNlbGYsIHN1YnNjcmlwdGlvbnMsIG5hbWUpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5zZXR1cF90Y3AoKQoKPHxmaW1fZW5kfD4="]
["4164b2b4c3d05f394cd7a8dc60080157efd3be79-3","4164b2b4c3d05f394cd7a8dc60080157efd3be79","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KZnJvbSB0d2lzdGVkLmludGVybmV0IGltcG9ydCByZWFjdG9yLCBlcnJvcgpmcm9tIGNvbm5lY3Rpb25zIGltcG9ydCBNZXNoQ2xpZW50RmFjdG9yeSwgTWVzaFNlcnZlckZhY3RvcnksIE1lc2hUY3BQcm90b2NvbCwgTWVzaFVkcFByb3RvY29sCgoKY2xhc3MgTWVzaERldmljZUluZm86CiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgbGlzdGVuc190byk6CiAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgIHNlbGYubGlzdGVuc190byA9IGxpc3RlbnNfdG8KCgpjbGFzcyBNZXNoTWVzc2FnZToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZW5kZXIsIHRhcmdldCwgbXNnX3R5cGUsIGRhdGEpOgogICAgICAgIHNlbGYuc2VuZGVyID0gc2VuZGVyCiAgICAgICAgc2VsZi50YXJnZXQgPSB0YXJnZXQKICAgICAgICBzZWxmLnR5cGUgPSBtc2dfdHlwZQogICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKCgpjbGFzcyBBbnlNZXNoRGVsZWdhdGVQcm90b2NvbDoKICAgIGRlZiBjb25uZWN0ZWRfdG8oc2VsZiwgYW55bWVzaCwgZGV2aWNlX2luZm8pOgogICAgICAgIHBhc3MKICAgIGRlZiBkaXNjb25uZWN0ZWRfZnJvbShzZWxmLCBhbnltZXNoLCBuYW1lKToKICAgICAgICBwYXNzCiAgICBkZWYgcmVjZWl2ZWRfbXNnKHNlbGYsIGFueW1lc2gsIG1lc3NhZ2UpOgogICAgICAgIHBhc3MKICAgIGRlZiByZWNlaXZlZF91cGRhdGVkX3N1YnNjcmlwdGlvbnMoc2VsZiwgYW55bWVzaCwgc3Vic2NyaXB0aW9ucywgbmFtZSk6CiAgICAgICAgcGFzcwoKY2xhc3MgQW55TWVzaDoKICAgIE1TR19UWVBFX1JFUVVFU1QgPSAwCiAgICBNU0dfVFlQRV9QVUJMSVNIID0gMQogICAgTVNHX1RZUEVfU1lTVEVNID0gMgogICAgTVNHX1NZU1RZUEVfU1VCU0NSSVBUSU9OUyA9IDAKCiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgc3Vic2NyaXB0aW9ucywgZGVsZWdhdGUsIG5ldHdvcmtfaWQ9ImFueW1lc2giLCB1ZHBfcG9ydD0xMjM0NSwgdGNwX3BvcnQ9MTIzNDYpOgogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICBzZWxmLnN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zCiAgICAgICAgc2VsZi5jb25uZWN0aW9ucyA9IFtdCgogICAgICAgIHNlbGYubmV0d29ya19pZCA9IG5ldHdvcmtfaWQKICAgICAgICBzZWxmLnRjcF9wb3J0ID0gMAogICAgICAgIHNlbGYudWRwX3BvcnQgPSB1ZHBfcG9ydAogICAgICAgIHNlbGYud29ya2luZ19wb3J0ID0gdGNwX3BvcnQKICAgICAgICBzZWxmLmRlbGVnYXRlID0gZGVsZWdhdGUKCiAgICAgICAgc2VsZi5zZXR1cF91ZHAoKQogICAgICAgIHNlbGYuc2V0dXBfdGNwKCkKCiAgICBkZWYgc2V0dXBfdGNwKHNlbGYpOgo8fGZpbV9ob2xlfD4KICAgICAgICBleGNlcHQgZXJyb3IuQ2Fubm90TGlzdGVuRXJyb3I6CiAgICAgICAgICAgIHNlbGYud29ya2luZ19wb3J0ICs9IDEKICAgICAgICAgICAgc2VsZi5zZXR1cF90Y3AoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYudGNwX3BvcnQgPSBzZWxmLndvcmtpbmdfcG9ydAoKICAgIGRlZiBzZXR1cF91ZHAoc2VsZik6CiAgICAgICAgcmVhY3Rvci5saXN0ZW5NdWx0aWNhc3Qoc2VsZi51ZHBfcG9ydCwgTWVzaFVkcFByb3RvY29sKHNlbGYpLCBsaXN0ZW5NdWx0aXBsZT1UcnVlKQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBydW4oKToKICAgICAgICByZWFjdG9yLnJ1bigpCgogICAgZGVmIGNvbm5lY3RfdGNwKHNlbGYsIGFkZHJlc3MsIHBvcnQsIG5hbWUpOgogICAgICAgIGlmIG5vdCBzZWxmLmNvbm5lY3Rpb25fZm9yX25hbWUobmFtZSk6CiAgICAgICAgICAgICNzZWxmLmFueW1lc2guX3JlcG9ydCgndGNwJywgJ2Nvbm5lY3Rpbmcgbm93IHRvICcgKyBhZGRyZXNzICsgJywnICsgc3RyKHBvcnQpICsgJywnICsgbmFtZSkKICAgICAgICAgICAgcmVhY3Rvci5jb25uZWN0VENQKGFkZHJlc3MsIHBvcnQsIE1lc2hDbGllbnRGYWN0b3J5KHNlbGYpKQoKICAgIGRlZiByZXF1ZXN0KHNlbGYsIHRhcmdldCwgbWVzc2FnZSk6CiAgICAgICAgbXNnX3N0cmluZyA9IHNlbGYuc3RyaW5nX2Zyb21fbXNnX2RhdGEoJ3JlcScsIHRhcmdldCwgbWVzc2FnZSkKICAgICAgICBjb25uID0gc2VsZi5jb25uZWN0aW9uX2Zvcl9uYW1lKHRhcmdldCkKICAgICAgICBpZiBjb25uOgogICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb25fZm9yX25hbWUodGFyZ2V0KS5zZW5kTGluZShtc2dfc3RyaW5nKQoKICAgIGRlZiBwdWJsaXNoKHNlbGYsIHRhcmdldCwgbWVzc2FnZSk6CiAgICAgICAgbXNnX3N0cmluZyA9IHNlbGYuc3RyaW5nX2Zyb21fbXNnX2RhdGEoJ3JlcScsIHRhcmdldCwgbWVzc2FnZSkKICAgICAgICBmb3IgY29ubmVjdGlvbiBpbiBzZWxmLmNvbm5lY3Rpb25zOgogICAgICAgICAgICBmb3Igc3Vic2NyaXB0aW9uIGluIGNvbm5lY3Rpb24uc3Vic2NyaXB0aW9uczoKICAgICAgICAgICAgICAgIGlmIHN1YnNjcmlwdGlvbiA9PSB0YXJnZXQ6CiAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5zZW5kTGluZShtc2dfc3RyaW5nKQogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICBkZWYgdXBkYXRlX3N1YnNjcmlwdGlvbnMoc2VsZiwgc3Vic2NyaXB0aW9ucyk6CiAgICAgICAgc2VsZi5zdWJzY3JpcHRpb25zID0gc3Vic2NyaXB0aW9ucwogICAgICAgIGZvciBjb25uZWN0aW9uIGluIHNlbGYuY29ubmVjdGlvbnM6CiAgICAgICAgICAgIGNvbm5lY3Rpb24uc2VuZEluZm8oVHJ1ZSkKCiN1dGlsaXR5IG1ldGhvZHM6CiAgICBkZWYgc3RyaW5nX2Zyb21fbXNnX2RhdGEoc2VsZiwgbXNnX3R5cGUsIHRhcmdldCwgcGF5bG9hZCk6CiAgICAgICAgcGFja2FnZSA9IHsidHlwZSI6IG1zZ190eXBlLCAidGFyZ2V0IjogdGFyZ2V0LCAic2VuZGVyIjogc2VsZi5uYW1lLCAiZGF0YSI6IHBheWxvYWR9CiAgICAgICAgcmV0dXJuIGpzb24uZHVtcHMocGFja2FnZSkKCiAgICBkZWYgY29ubmVjdGlvbl9mb3JfbmFtZShzZWxmLCBuYW1lKToKICAgICAgICBmb3IgY29ubmVjdGlvbiBpbiBzZWxmLmNvbm5lY3Rpb25zOgogICAgICAgICAgICBpZiBoYXNhdHRyKGNvbm5lY3Rpb24sICduYW1lJyk6CiAgICAgICAgICAgICAgICBpZiBjb25uZWN0aW9uLm5hbWUgPT0gbmFtZToKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29ubmVjdGlvbgogICAgICAgIHJldHVybiBOb25lCgogICAgZGVmIGdldF9jb25uZWN0aW9ucyhzZWxmKToKICAgICAgICBhY3RpdmVfY29ubmVjdGlvbnMgPSBbXQogICAgICAgIGZvciBjb25uZWN0aW9uIGluIHNlbGYuY29ubmVjdGlvbnM6CiAgICAgICAgICAgIGlmIGhhc2F0dHIoY29ubmVjdGlvbiwgJ25hbWUnKToKICAgICAgICAgICAgICAgIGFjdGl2ZV9jb25uZWN0aW9ucy5hcHBlbmQoTWVzaERldmljZUluZm8oY29ubmVjdGlvbi5uYW1lWzpdLCBjb25uZWN0aW9uLnN1YnNjcmlwdGlvbnNbOl0pKQogICAgICAgIHJldHVybiBhY3RpdmVfY29ubmVjdGlvbnMKCiAgICBkZWYgX3JlcG9ydChzZWxmLCByZXBvcnRfbXNnKToKICAgICAgICBzZWxmLl9yZWNlaXZlZF9tc2coeydzZW5kZXInOiAiZGlhZyIsICd0eXBlJzogQW55TWVzaC5NU0dfVFlQRV9TWVNURU0sICd0YXJnZXQnOiAncmVwb3J0JywgJ2RhdGEnOiB7J21zZyc6IHJlcG9ydF9tc2d9fSkKCiNGcm9tIFRDUDoKICAgIGRlZiBfY29ubmVjdGVkX3RvKHNlbGYsIGNvbm5lY3Rpb24pOgogICAgICAgIGlmIGhhc2F0dHIoY29ubmVjdGlvbiwgJ25hbWUnKToKICAgICAgICAgICAgc2VsZi5kZWxlZ2F0ZS5jb25uZWN0ZWRfdG8oc2VsZiwgTWVzaERldmljZUluZm8oY29ubmVjdGlvbi5uYW1lWzpdLCBjb25uZWN0aW9uLnN1YnNjcmlwdGlvbnNbOl0pKQoKICAgIGRlZiBfZGlzY29ubmVjdGVkX2Zyb20oc2VsZiwgY29ubmVjdGlvbik6CiAgICAgICAgaWYgaGFzYXR0cihjb25uZWN0aW9uLCAnbmFtZScpOgogICAgICAgICAgIHNlbGYuZGVsZWdhdGUuZGlzY29ubmVjdGVkX2Zyb20oc2VsZiwgY29ubmVjdGlvbi5uYW1lWzpdKQoKICAgIGRlZiBfcmVjZWl2ZWRfbXNnKHNlbGYsIGRhdGEpOgogICAgICAgIG1zZyA9IE1lc2hNZXNzYWdlKGRhdGFbJ3NlbmRlciddLCBkYXRhWyd0YXJnZXQnXSwgZGF0YVsndHlwZSddLCBkYXRhWydkYXRhJ10pCiAgICAgICAgc2VsZi5kZWxlZ2F0ZS5yZWNlaXZlZF9tc2coc2VsZiwgbXNnKQogICAgZGVmIF91cGRhdGVkX3N1YnNjcmlwdGlvbnMoc2VsZiwgc3Vic2NyaXB0aW9ucywgbmFtZSk6CiAgICAgICAgc2VsZi5kZWxlZ2F0ZS5yZWNlaXZlZF91cGRhdGVkX3N1YnNjcmlwdGlvbnMoc2VsZiwgc3Vic2NyaXB0aW9ucywgbmFtZSkKPHxmaW1fc3VmZml4fD4KICAgICAgICBmID0gTWVzaFNlcnZlckZhY3Rvcnkoc2VsZikKICAgICAgICBmLnByb3RvY29sID0gTWVzaFRjcFByb3RvY29sCiAgICAgICAgdHJ5OgogICAgICAgICAgICByZWFjdG9yLmxpc3RlblRDUChzZWxmLndvcmtpbmdfcG9ydCwgZikKPHxmaW1fZW5kfD4="]
["4164b2b4c3d05f394cd7a8dc60080157efd3be79-4","4164b2b4c3d05f394cd7a8dc60080157efd3be79","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KZnJvbSB0d2lzdGVkLmludGVybmV0IGltcG9ydCByZWFjdG9yLCBlcnJvcgpmcm9tIGNvbm5lY3Rpb25zIGltcG9ydCBNZXNoQ2xpZW50RmFjdG9yeSwgTWVzaFNlcnZlckZhY3RvcnksIE1lc2hUY3BQcm90b2NvbCwgTWVzaFVkcFByb3RvY29sCgoKY2xhc3MgTWVzaERldmljZUluZm86CiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgbGlzdGVuc190byk6CiAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgIHNlbGYubGlzdGVuc190byA9IGxpc3RlbnNfdG8KCgpjbGFzcyBNZXNoTWVzc2FnZToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZW5kZXIsIHRhcmdldCwgbXNnX3R5cGUsIGRhdGEpOgogICAgICAgIHNlbGYuc2VuZGVyID0gc2VuZGVyCiAgICAgICAgc2VsZi50YXJnZXQgPSB0YXJnZXQKICAgICAgICBzZWxmLnR5cGUgPSBtc2dfdHlwZQogICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKCgpjbGFzcyBBbnlNZXNoRGVsZWdhdGVQcm90b2NvbDoKICAgIGRlZiBjb25uZWN0ZWRfdG8oc2VsZiwgYW55bWVzaCwgZGV2aWNlX2luZm8pOgogICAgICAgIHBhc3MKICAgIGRlZiBkaXNjb25uZWN0ZWRfZnJvbShzZWxmLCBhbnltZXNoLCBuYW1lKToKICAgICAgICBwYXNzCiAgICBkZWYgcmVjZWl2ZWRfbXNnKHNlbGYsIGFueW1lc2gsIG1lc3NhZ2UpOgogICAgICAgIHBhc3MKICAgIGRlZiByZWNlaXZlZF91cGRhdGVkX3N1YnNjcmlwdGlvbnMoc2VsZiwgYW55bWVzaCwgc3Vic2NyaXB0aW9ucywgbmFtZSk6CiAgICAgICAgcGFzcwoKY2xhc3MgQW55TWVzaDoKICAgIE1TR19UWVBFX1JFUVVFU1QgPSAwCiAgICBNU0dfVFlQRV9QVUJMSVNIID0gMQogICAgTVNHX1RZUEVfU1lTVEVNID0gMgogICAgTVNHX1NZU1RZUEVfU1VCU0NSSVBUSU9OUyA9IDAKCiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgc3Vic2NyaXB0aW9ucywgZGVsZWdhdGUsIG5ldHdvcmtfaWQ9ImFueW1lc2giLCB1ZHBfcG9ydD0xMjM0NSwgdGNwX3BvcnQ9MTIzNDYpOgogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICBzZWxmLnN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zCiAgICAgICAgc2VsZi5jb25uZWN0aW9ucyA9IFtdCgogICAgICAgIHNlbGYubmV0d29ya19pZCA9IG5ldHdvcmtfaWQKICAgICAgICBzZWxmLnRjcF9wb3J0ID0gMAogICAgICAgIHNlbGYudWRwX3BvcnQgPSB1ZHBfcG9ydAogICAgICAgIHNlbGYud29ya2luZ19wb3J0ID0gdGNwX3BvcnQKICAgICAgICBzZWxmLmRlbGVnYXRlID0gZGVsZWdhdGUKCiAgICAgICAgc2VsZi5zZXR1cF91ZHAoKQogICAgICAgIHNlbGYuc2V0dXBfdGNwKCkKCiAgICBkZWYgc2V0dXBfdGNwKHNlbGYpOgogICAgICAgIGYgPSBNZXNoU2VydmVyRmFjdG9yeShzZWxmKQogICAgICAgIGYucHJvdG9jb2wgPSBNZXNoVGNwUHJvdG9jb2wKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJlYWN0b3IubGlzdGVuVENQKHNlbGYud29ya2luZ19wb3J0LCBmKQogICAgICAgIGV4Y2VwdCBlcnJvci5DYW5ub3RMaXN0ZW5FcnJvcjoKICAgICAgICAgICAgc2VsZi53b3JraW5nX3BvcnQgKz0gMQogICAgICAgICAgICBzZWxmLnNldHVwX3RjcCgpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi50Y3BfcG9ydCA9IHNlbGYud29ya2luZ19wb3J0CgogICAgZGVmIHNldHVwX3VkcChzZWxmKToKICAgICAgICByZWFjdG9yLmxpc3Rlbk11bHRpY2FzdChzZWxmLnVkcF9wb3J0LCBNZXNoVWRwUHJvdG9jb2woc2VsZiksIGxpc3Rlbk11bHRpcGxlPVRydWUpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHJ1bigpOgogICAgICAgIHJlYWN0b3IucnVuKCkKCiAgICBkZWYgY29ubmVjdF90Y3Aoc2VsZiwgYWRkcmVzcywgcG9ydCwgbmFtZSk6CiAgICAgICAgaWYgbm90IHNlbGYuY29ubmVjdGlvbl9mb3JfbmFtZShuYW1lKToKICAgICAgICAgICAgI3NlbGYuYW55bWVzaC5fcmVwb3J0KCd0Y3AnLCAnY29ubmVjdGluZyBub3cgdG8gJyArIGFkZHJlc3MgKyAnLCcgKyBzdHIocG9ydCkgKyAnLCcgKyBuYW1lKQogICAgICAgICAgICByZWFjdG9yLmNvbm5lY3RUQ1AoYWRkcmVzcywgcG9ydCwgTWVzaENsaWVudEZhY3Rvcnkoc2VsZikpCgogICAgZGVmIHJlcXVlc3Qoc2VsZiwgdGFyZ2V0LCBtZXNzYWdlKToKICAgICAgICBtc2dfc3RyaW5nID0gc2VsZi5zdHJpbmdfZnJvbV9tc2dfZGF0YSgncmVxJywgdGFyZ2V0LCBtZXNzYWdlKQogICAgICAgIGNvbm4gPSBzZWxmLmNvbm5lY3Rpb25fZm9yX25hbWUodGFyZ2V0KQogICAgICAgIGlmIGNvbm46CiAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbl9mb3JfbmFtZSh0YXJnZXQpLnNlbmRMaW5lKG1zZ19zdHJpbmcpCgogICAgZGVmIHB1Ymxpc2goc2VsZiwgdGFyZ2V0LCBtZXNzYWdlKToKICAgICAgICBtc2dfc3RyaW5nID0gc2VsZi5zdHJpbmdfZnJvbV9tc2dfZGF0YSgncmVxJywgdGFyZ2V0LCBtZXNzYWdlKQogICAgICAgIGZvciBjb25uZWN0aW9uIGluIHNlbGYuY29ubmVjdGlvbnM6CiAgICAgICAgICAgIGZvciBzdWJzY3JpcHRpb24gaW4gY29ubmVjdGlvbi5zdWJzY3JpcHRpb25zOgogICAgICAgICAgICAgICAgaWYgc3Vic2NyaXB0aW9uID09IHRhcmdldDoKICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnNlbmRMaW5lKG1zZ19zdHJpbmcpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgIGRlZiB1cGRhdGVfc3Vic2NyaXB0aW9ucyhzZWxmLCBzdWJzY3JpcHRpb25zKToKICAgICAgICBzZWxmLnN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zCiAgICAgICAgZm9yIGNvbm5lY3Rpb24gaW4gc2VsZi5jb25uZWN0aW9uczoKICAgICAgICAgICAgY29ubmVjdGlvbi5zZW5kSW5mbyhUcnVlKQoKI3V0aWxpdHkgbWV0aG9kczoKICAgIGRlZiBzdHJpbmdfZnJvbV9tc2dfZGF0YShzZWxmLCBtc2dfdHlwZSwgdGFyZ2V0LCBwYXlsb2FkKToKICAgICAgICBwYWNrYWdlID0geyJ0eXBlIjogbXNnX3R5cGUsICJ0YXJnZXQiOiB0YXJnZXQsICJzZW5kZXIiOiBzZWxmLm5hbWUsICJkYXRhIjogcGF5bG9hZH0KICAgICAgICByZXR1cm4ganNvbi5kdW1wcyhwYWNrYWdlKQoKICAgIGRlZiBjb25uZWN0aW9uX2Zvcl9uYW1lKHNlbGYsIG5hbWUpOgogICAgICAgIGZvciBjb25uZWN0aW9uIGluIHNlbGYuY29ubmVjdGlvbnM6CiAgICAgICAgICAgIGlmIGhhc2F0dHIoY29ubmVjdGlvbiwgJ25hbWUnKToKICAgICAgICAgICAgICAgIGlmIGNvbm5lY3Rpb24ubmFtZSA9PSBuYW1lOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uCiAgICAgICAgcmV0dXJuIE5vbmUKCiAgICBkZWYgZ2V0X2Nvbm5lY3Rpb25zKHNlbGYpOgogICAgICAgIGFjdGl2ZV9jb25uZWN0aW9ucyA9IFtdCiAgICAgICAgZm9yIGNvbm5lY3Rpb24gaW4gc2VsZi5jb25uZWN0aW9uczoKICAgICAgICAgICAgaWYgaGFzYXR0cihjb25uZWN0aW9uLCAnbmFtZScpOgogICAgICAgICAgICAgICAgYWN0aXZlX2Nvbm5lY3Rpb25zLmFwcGVuZChNZXNoRGV2aWNlSW5mbyhjb25uZWN0aW9uLm5hbWVbOl0sIGNvbm5lY3Rpb24uc3Vic2NyaXB0aW9uc1s6XSkpCiAgICAgICAgcmV0dXJuIGFjdGl2ZV9jb25uZWN0aW9ucwoKICAgIGRlZiBfcmVwb3J0KHNlbGYsIHJlcG9ydF9tc2cpOgogICAgICAgIHNlbGYuX3JlY2VpdmVkX21zZyh7J3NlbmRlcic6ICJkaWFnIiwgJ3R5cGUnOiBBbnlNZXNoLk1TR19UWVBFX1NZU1RFTSwgJ3RhcmdldCc6ICdyZXBvcnQnLCAnZGF0YSc6IHsnbXNnJzogcmVwb3J0X21zZ319KQoKI0Zyb20gVENQOgogICAgZGVmIF9jb25uZWN0ZWRfdG8oc2VsZiwgY29ubmVjdGlvbik6CiAgICAgICAgaWYgaGFzYXR0cihjb25uZWN0aW9uLCAnbmFtZScpOgogICAgICAgICAgICBzZWxmLmRlbGVnYXRlLmNvbm5lY3RlZF90byhzZWxmLCBNZXNoRGV2aWNlSW5mbyhjb25uZWN0aW9uLm5hbWVbOl0sIGNvbm5lY3Rpb24uc3Vic2NyaXB0aW9uc1s6XSkpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgX2Rpc2Nvbm5lY3RlZF9mcm9tKHNlbGYsIGNvbm5lY3Rpb24pOgogICAgICAgIGlmIGhhc2F0dHIoY29ubmVjdGlvbiwgJ25hbWUnKToKICAgICAgICAgICBzZWxmLmRlbGVnYXRlLmRpc2Nvbm5lY3RlZF9mcm9tKHNlbGYsIGNvbm5lY3Rpb24ubmFtZVs6XSkKCjx8ZmltX2VuZHw+"]
["4164b2b4c3d05f394cd7a8dc60080157efd3be79-5","4164b2b4c3d05f394cd7a8dc60080157efd3be79","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KZnJvbSB0d2lzdGVkLmludGVybmV0IGltcG9ydCByZWFjdG9yLCBlcnJvcgpmcm9tIGNvbm5lY3Rpb25zIGltcG9ydCBNZXNoQ2xpZW50RmFjdG9yeSwgTWVzaFNlcnZlckZhY3RvcnksIE1lc2hUY3BQcm90b2NvbCwgTWVzaFVkcFByb3RvY29sCgoKY2xhc3MgTWVzaERldmljZUluZm86CiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgbGlzdGVuc190byk6CiAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgIHNlbGYubGlzdGVuc190byA9IGxpc3RlbnNfdG8KCgpjbGFzcyBNZXNoTWVzc2FnZToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZW5kZXIsIHRhcmdldCwgbXNnX3R5cGUsIGRhdGEpOgogICAgICAgIHNlbGYuc2VuZGVyID0gc2VuZGVyCiAgICAgICAgc2VsZi50YXJnZXQgPSB0YXJnZXQKICAgICAgICBzZWxmLnR5cGUgPSBtc2dfdHlwZQogICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKCgpjbGFzcyBBbnlNZXNoRGVsZWdhdGVQcm90b2NvbDoKICAgIGRlZiBjb25uZWN0ZWRfdG8oc2VsZiwgYW55bWVzaCwgZGV2aWNlX2luZm8pOgogICAgICAgIHBhc3MKICAgIGRlZiBkaXNjb25uZWN0ZWRfZnJvbShzZWxmLCBhbnltZXNoLCBuYW1lKToKICAgICAgICBwYXNzCiAgICBkZWYgcmVjZWl2ZWRfbXNnKHNlbGYsIGFueW1lc2gsIG1lc3NhZ2UpOgogICAgICAgIHBhc3MKICAgIGRlZiByZWNlaXZlZF91cGRhdGVkX3N1YnNjcmlwdGlvbnMoc2VsZiwgYW55bWVzaCwgc3Vic2NyaXB0aW9ucywgbmFtZSk6CiAgICAgICAgcGFzcwoKY2xhc3MgQW55TWVzaDoKICAgIE1TR19UWVBFX1JFUVVFU1QgPSAwCiAgICBNU0dfVFlQRV9QVUJMSVNIID0gMQogICAgTVNHX1RZUEVfU1lTVEVNID0gMgogICAgTVNHX1NZU1RZUEVfU1VCU0NSSVBUSU9OUyA9IDAKCiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgc3Vic2NyaXB0aW9ucywgZGVsZWdhdGUsIG5ldHdvcmtfaWQ9ImFueW1lc2giLCB1ZHBfcG9ydD0xMjM0NSwgdGNwX3BvcnQ9MTIzNDYpOgogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICBzZWxmLnN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zCiAgICAgICAgc2VsZi5jb25uZWN0aW9ucyA9IFtdCgogICAgICAgIHNlbGYubmV0d29ya19pZCA9IG5ldHdvcmtfaWQKICAgICAgICBzZWxmLnRjcF9wb3J0ID0gMAogICAgICAgIHNlbGYudWRwX3BvcnQgPSB1ZHBfcG9ydAogICAgICAgIHNlbGYud29ya2luZ19wb3J0ID0gdGNwX3BvcnQKICAgICAgICBzZWxmLmRlbGVnYXRlID0gZGVsZWdhdGUKCiAgICAgICAgc2VsZi5zZXR1cF91ZHAoKQogICAgICAgIHNlbGYuc2V0dXBfdGNwKCkKCiAgICBkZWYgc2V0dXBfdGNwKHNlbGYpOgogICAgICAgIGYgPSBNZXNoU2VydmVyRmFjdG9yeShzZWxmKQogICAgICAgIGYucHJvdG9jb2wgPSBNZXNoVGNwUHJvdG9jb2wKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJlYWN0b3IubGlzdGVuVENQKHNlbGYud29ya2luZ19wb3J0LCBmKQogICAgICAgIGV4Y2VwdCBlcnJvci5DYW5ub3RMaXN0ZW5FcnJvcjoKICAgICAgICAgICAgc2VsZi53b3JraW5nX3BvcnQgKz0gMQogICAgICAgICAgICBzZWxmLnNldHVwX3RjcCgpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi50Y3BfcG9ydCA9IHNlbGYud29ya2luZ19wb3J0CgogICAgZGVmIHNldHVwX3VkcChzZWxmKToKICAgICAgICByZWFjdG9yLmxpc3Rlbk11bHRpY2FzdChzZWxmLnVkcF9wb3J0LCBNZXNoVWRwUHJvdG9jb2woc2VsZiksIGxpc3Rlbk11bHRpcGxlPVRydWUpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHJ1bigpOgogICAgICAgIHJlYWN0b3IucnVuKCkKCiAgICBkZWYgY29ubmVjdF90Y3Aoc2VsZiwgYWRkcmVzcywgcG9ydCwgbmFtZSk6CiAgICAgICAgaWYgbm90IHNlbGYuY29ubmVjdGlvbl9mb3JfbmFtZShuYW1lKToKICAgICAgICAgICAgI3NlbGYuYW55bWVzaC5fcmVwb3J0KCd0Y3AnLCAnY29ubmVjdGluZyBub3cgdG8gJyArIGFkZHJlc3MgKyAnLCcgKyBzdHIocG9ydCkgKyAnLCcgKyBuYW1lKQogICAgICAgICAgICByZWFjdG9yLmNvbm5lY3RUQ1AoYWRkcmVzcywgcG9ydCwgTWVzaENsaWVudEZhY3Rvcnkoc2VsZikpCgogICAgZGVmIHJlcXVlc3Qoc2VsZiwgdGFyZ2V0LCBtZXNzYWdlKToKICAgICAgICBtc2dfc3RyaW5nID0gc2VsZi5zdHJpbmdfZnJvbV9tc2dfZGF0YSgncmVxJywgdGFyZ2V0LCBtZXNzYWdlKQogICAgICAgIGNvbm4gPSBzZWxmLmNvbm5lY3Rpb25fZm9yX25hbWUodGFyZ2V0KQogICAgICAgIGlmIGNvbm46CiAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbl9mb3JfbmFtZSh0YXJnZXQpLnNlbmRMaW5lKG1zZ19zdHJpbmcpCgogICAgZGVmIHB1Ymxpc2goc2VsZiwgdGFyZ2V0LCBtZXNzYWdlKToKICAgICAgICBtc2dfc3RyaW5nID0gc2VsZi5zdHJpbmdfZnJvbV9tc2dfZGF0YSgncmVxJywgdGFyZ2V0LCBtZXNzYWdlKQogICAgICAgIGZvciBjb25uZWN0aW9uIGluIHNlbGYuY29ubmVjdGlvbnM6CiAgICAgICAgICAgIGZvciBzdWJzY3JpcHRpb24gaW4gY29ubmVjdGlvbi5zdWJzY3JpcHRpb25zOgogICAgICAgICAgICAgICAgaWYgc3Vic2NyaXB0aW9uID09IHRhcmdldDoKICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnNlbmRMaW5lKG1zZ19zdHJpbmcpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgIGRlZiB1cGRhdGVfc3Vic2NyaXB0aW9ucyhzZWxmLCBzdWJzY3JpcHRpb25zKToKICAgICAgICBzZWxmLnN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zCiAgICAgICAgZm9yIGNvbm5lY3Rpb24gaW4gc2VsZi5jb25uZWN0aW9uczoKICAgICAgICAgICAgY29ubmVjdGlvbi5zZW5kSW5mbyhUcnVlKQoKI3V0aWxpdHkgbWV0aG9kczoKICAgIGRlZiBzdHJpbmdfZnJvbV9tc2dfZGF0YShzZWxmLCBtc2dfdHlwZSwgdGFyZ2V0LCBwYXlsb2FkKToKICAgICAgICBwYWNrYWdlID0geyJ0eXBlIjogbXNnX3R5cGUsICJ0YXJnZXQiOiB0YXJnZXQsICJzZW5kZXIiOiBzZWxmLm5hbWUsICJkYXRhIjogcGF5bG9hZH0KICAgICAgICByZXR1cm4ganNvbi5kdW1wcyhwYWNrYWdlKQoKICAgIGRlZiBjb25uZWN0aW9uX2Zvcl9uYW1lKHNlbGYsIG5hbWUpOgogICAgICAgIGZvciBjb25uZWN0aW9uIGluIHNlbGYuY29ubmVjdGlvbnM6CiAgICAgICAgICAgIGlmIGhhc2F0dHIoY29ubmVjdGlvbiwgJ25hbWUnKToKICAgICAgICAgICAgICAgIGlmIGNvbm5lY3Rpb24ubmFtZSA9PSBuYW1lOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uCiAgICAgICAgcmV0dXJuIE5vbmUKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBnZXRfY29ubmVjdGlvbnMoc2VsZik6CiAgICAgICAgYWN0aXZlX2Nvbm5lY3Rpb25zID0gW10KICAgICAgICBmb3IgY29ubmVjdGlvbiBpbiBzZWxmLmNvbm5lY3Rpb25zOgogICAgICAgICAgICBpZiBoYXNhdHRyKGNvbm5lY3Rpb24sICduYW1lJyk6Cjx8ZmltX2VuZHw+"]
["84eac31f4357f6d61fdbac7ef2edc5a2dd888468-1","84eac31f4357f6d61fdbac7ef2edc5a2dd888468","PHxmaW1fcHJlZml4fD4KZnJvbSBicm93bmllIGltcG9ydCBGdW5kTWUsIGFjY291bnRzLCBuZXR3b3JrLCBjb25maWcKCgpkZWYgZGVwbG95RnVuZE1lKCk6CiAgICBhY2MgPSBnZXRBY2NvdW50KCkKICAgIHByaW50KCJBY2NvdW50OiIsIGFjYykKCiAgICBmID0gRnVuZE1lLmRlcGxveSh7J2Zyb20nOiBhY2N9KQogICAgcHJpbnQoIkZ1bmRNZSBpcyBkZXBsb3llZDoiLCBmKQoKCmRlZiBnZXRBY2NvdW50KCk6CiAgICBpZiAobmV0d29yay5zaG93X2FjdGl2ZSgpPT0gJ2RldmVsb3BtZW50Jyk6CiAgICAgICAgcHJpbnQoIkRlYWxpbmcgd2l0aCB0aGUgbG9jYWwgZGV2ZWxvcG1lbnQgbmV0d29yayIpCiAgICAgICAgcmV0dXJuIGFjY291bnRzWzBdCiAgICBlbHNlOgogICAgICAgIHByaW50KCJEZWFsaW5nIHdpdGggbm9uIGRldmVsb3BtZW50IG5ldHdvcms6IiwgbmV0d29yay5zaG93X2FjdGl2ZSgpKQogICAgICAgIHJldHVybiBhY2NvdW50cy5hZGQoY29uZmlnWyd3YWxsZXRzJ11bJ2Zyb21fa2V5J10pCgpkZWYgbWFpbigpOgogICAgZGVwbG95RnVuZE1lKCkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIG1haW4oKQo8fGZpbV9lbmR8Pg=="]
["84eac31f4357f6d61fdbac7ef2edc5a2dd888468-2","84eac31f4357f6d61fdbac7ef2edc5a2dd888468","PHxmaW1fcHJlZml4fD4KZnJvbSBicm93bmllIGltcG9ydCBGdW5kTWUsIGFjY291bnRzLCBuZXR3b3JrLCBjb25maWcKCgpkZWYgZGVwbG95RnVuZE1lKCk6CiAgICBhY2MgPSBnZXRBY2NvdW50KCkKICAgIHByaW50KCJBY2NvdW50OiIsIGFjYykKCiAgICBmID0gRnVuZE1lLmRlcGxveSh7J2Zyb20nOiBhY2N9KQo8fGZpbV9ob2xlfD4KZGVmIGdldEFjY291bnQoKToKICAgIGlmIChuZXR3b3JrLnNob3dfYWN0aXZlKCk9PSAnZGV2ZWxvcG1lbnQnKToKICAgICAgICBwcmludCgiRGVhbGluZyB3aXRoIHRoZSBsb2NhbCBkZXZlbG9wbWVudCBuZXR3b3JrIikKICAgICAgICByZXR1cm4gYWNjb3VudHNbMF0KICAgIGVsc2U6CiAgICAgICAgcHJpbnQoIkRlYWxpbmcgd2l0aCBub24gZGV2ZWxvcG1lbnQgbmV0d29yazoiLCBuZXR3b3JrLnNob3dfYWN0aXZlKCkpCiAgICAgICAgcmV0dXJuIGFjY291bnRzLmFkZChjb25maWdbJ3dhbGxldHMnXVsnZnJvbV9rZXknXSkKCmRlZiBtYWluKCk6CiAgICBkZXBsb3lGdW5kTWUoKQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIG1haW4oKQo8fGZpbV9zdWZmaXh8PgogICAgcHJpbnQoIkZ1bmRNZSBpcyBkZXBsb3llZDoiLCBmKQoKCjx8ZmltX2VuZHw+"]
["84eac31f4357f6d61fdbac7ef2edc5a2dd888468-3","84eac31f4357f6d61fdbac7ef2edc5a2dd888468","PHxmaW1fcHJlZml4fD4KZnJvbSBicm93bmllIGltcG9ydCBGdW5kTWUsIGFjY291bnRzLCBuZXR3b3JrLCBjb25maWcKCgpkZWYgZGVwbG95RnVuZE1lKCk6CiAgICBhY2MgPSBnZXRBY2NvdW50KCkKICAgIHByaW50KCJBY2NvdW50OiIsIGFjYykKCiAgICBmID0gRnVuZE1lLmRlcGxveSh7J2Zyb20nOiBhY2N9KQogICAgcHJpbnQoIkZ1bmRNZSBpcyBkZXBsb3llZDoiLCBmKQoKCmRlZiBnZXRBY2NvdW50KCk6CiAgICBpZiAobmV0d29yay5zaG93X2FjdGl2ZSgpPT0gJ2RldmVsb3BtZW50Jyk6CiAgICAgICAgcHJpbnQoIkRlYWxpbmcgd2l0aCB0aGUgbG9jYWwgZGV2ZWxvcG1lbnQgbmV0d29yayIpCiAgICAgICAgcmV0dXJuIGFjY291bnRzWzBdCiAgICBlbHNlOgogICAgICAgIHByaW50KCJEZWFsaW5nIHdpdGggbm9uIGRldmVsb3BtZW50IG5ldHdvcms6IiwgbmV0d29yay5zaG93X2FjdGl2ZSgpKQogICAgICAgIHJldHVybiBhY2NvdW50cy5hZGQoY29uZmlnWyd3YWxsZXRzJ11bJ2Zyb21fa2V5J10pCgpkZWYgbWFpbigpOgogICAgZGVwbG95RnVuZE1lKCkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIG1haW4oKQo8fGZpbV9lbmR8Pg=="]
["99d430673a11e0ba37cb26d2c53e316138662170-1","99d430673a11e0ba37cb26d2c53e316138662170","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmZyb20gUElMIGltcG9ydCBJbWFnZSwgSW1hZ2VTdGF0CmltcG9ydCBtYXRoCgpwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCnBhcnNlci5hZGRfYXJndW1lbnQoJ2ZuYW1lJykKcGFyc2VyLmFkZF9hcmd1bWVudCgncHJlZicsIGRlZmF1bHQ9IiIsIG5hcmdzPSI/IikKYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCmRlZiBTYXR1cmF0aW9uT2ZNYXNrKGltLCBsLCB0LCByLCBiKToKICAgIG1hc2sgPSBpbS5jcm9wKChpbnQobCksIGludCh0KSwgaW50KHIpLCBpbnQoYikpKQogICAgc3RhdCA9IEltYWdlU3RhdC5TdGF0KG1hc2spCiAgICByLGcsYiA9IHN0YXQubWVhbgogICAgcmV0dXJuIChyLzI1NSxnLzI1NSxiLzI1NSkKCmRlZiBTYXR1cmF0aW9uT2ZSZXN0KGltLCBsLCB0LCByLCBiKToKICAgIGltV2lkdGgsIGltSGVpZ2h0ID0gaW0uc2l6ZQogICAgdG0gPSBTYXR1cmF0aW9uT2ZNYXNrKGltLCAwLCAwLCBpbVdpZHRoLCBpbnQodCkpCiAgICBzdCA9IGZsb2F0KGltV2lkdGggKiBpbnQodCkpCiAgICBibSA9IFNhdHVyYXRpb25PZk1hc2soaW0sIDAsIGludChiKSwgaW1XaWR0aCwgaW1IZWlnaHQpCiAgICBzYiA9IGZsb2F0KChpbUhlaWdodC1pbnQoYikpKmltV2lkdGgpCiAgICBsbSA9IFNhdHVyYXRpb25PZk1hc2soaW0sIDAsIGludCh0KSwgaW50KGwpLCBpbnQoYikpCiAgICBzbCA9IGZsb2F0KGludChsKSooaW50KGIpLWludCh0KSkpCiAgICBybSA9IFNhdHVyYXRpb25PZk1hc2soaW0sIGludChyKSwgaW50KHQpLCBpbVdpZHRoLCBpbnQoYikpCiAgICBzciA9IGZsb2F0KChpbVdpZHRoLWludChyKSkqKGludChiKS1pbnQodCkpKQogICAgcmV0dXJuICgodG1bMF0qc3QrYm1bMF0qc2IrbG1bMF0qc2wrcm1bMF0qc3IpLyhzdCtzYitzbCtzciksCiAgICAgICAgICAgICh0bVsxXSpzdCtibVsxXSpzYitsbVsxXSpzbCtybVsxXSpzcikvKHN0K3NiK3NsK3NyKSwKICAgICAgICAgICAgKHRtWzJdKnN0K2JtWzJdKnNiK2xtWzJdKnNsK3JtWzJdKnNyKS8oc3Qrc2Irc2wrc3IpKQoKCmltID0gSW1hZ2Uub3BlbihhcmdzLmZuYW1lKQppbVdpZHRoLCBpbUhlaWdodCA9IGltLnNpemUKCnRvdGFsU2F0dXJhdGlvbiA9IFNhdHVyYXRpb25PZk1hc2soaW0sIDAsIDAsIGltV2lkdGgsIGltSGVpZ2h0KQoKcD1hcmdzLnByZWYKCnByaW50KCJTYXR1cmF0aW9uVG90YWxSZWQ9IitzdHIodG90YWxTYXR1cmF0aW9uWzBdKSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpwcmludCgiU2F0dXJhdGlvblRvdGFsR3JlZW49IitzdHIodG90YWxTYXR1cmF0aW9uWzFdKSkKcHJpbnQoIlNhdHVyYXRpb25Ub3RhbEJsdWU9IitzdHIodG90YWxTYXR1cmF0aW9uWzJdKSkKPHxmaW1fZW5kfD4="]
["99d430673a11e0ba37cb26d2c53e316138662170-2","99d430673a11e0ba37cb26d2c53e316138662170","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmZyb20gUElMIGltcG9ydCBJbWFnZSwgSW1hZ2VTdGF0CmltcG9ydCBtYXRoCgpwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCnBhcnNlci5hZGRfYXJndW1lbnQoJ2ZuYW1lJykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpwYXJzZXIuYWRkX2FyZ3VtZW50KCdwcmVmJywgZGVmYXVsdD0iIiwgbmFyZ3M9Ij8iKQphcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQoKZGVmIFNhdHVyYXRpb25PZk1hc2soaW0sIGwsIHQsIHIsIGIpOgo8fGZpbV9lbmR8Pg=="]
["99d430673a11e0ba37cb26d2c53e316138662170-3","99d430673a11e0ba37cb26d2c53e316138662170","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmZyb20gUElMIGltcG9ydCBJbWFnZSwgSW1hZ2VTdGF0CmltcG9ydCBtYXRoCgpwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCnBhcnNlci5hZGRfYXJndW1lbnQoJ2ZuYW1lJykKcGFyc2VyLmFkZF9hcmd1bWVudCgncHJlZicsIGRlZmF1bHQ9IiIsIG5hcmdzPSI/IikKYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCmRlZiBTYXR1cmF0aW9uT2ZNYXNrKGltLCBsLCB0LCByLCBiKToKICAgIG1hc2sgPSBpbS5jcm9wKChpbnQobCksIGludCh0KSwgaW50KHIpLCBpbnQoYikpKQogICAgc3RhdCA9IEltYWdlU3RhdC5TdGF0KG1hc2spCiAgICByLGcsYiA9IHN0YXQubWVhbgogICAgcmV0dXJuIChyLzI1NSxnLzI1NSxiLzI1NSkKCmRlZiBTYXR1cmF0aW9uT2ZSZXN0KGltLCBsLCB0LCByLCBiKToKICAgIGltV2lkdGgsIGltSGVpZ2h0ID0gaW0uc2l6ZQogICAgdG0gPSBTYXR1cmF0aW9uT2ZNYXNrKGltLCAwLCAwLCBpbVdpZHRoLCBpbnQodCkpCiAgICBzdCA9IGZsb2F0KGltV2lkdGggKiBpbnQodCkpCiAgICBibSA9IFNhdHVyYXRpb25PZk1hc2soaW0sIDAsIGludChiKSwgaW1XaWR0aCwgaW1IZWlnaHQpCiAgICBzYiA9IGZsb2F0KChpbUhlaWdodC1pbnQoYikpKmltV2lkdGgpCiAgICBsbSA9IFNhdHVyYXRpb25PZk1hc2soaW0sIDAsIGludCh0KSwgaW50KGwpLCBpbnQoYikpCiAgICBzbCA9IGZsb2F0KGludChsKSooaW50KGIpLWludCh0KSkpCiAgICBybSA9IFNhdHVyYXRpb25PZk1hc2soaW0sIGludChyKSwgaW50KHQpLCBpbVdpZHRoLCBpbnQoYikpCiAgICBzciA9IGZsb2F0KChpbVdpZHRoLWludChyKSkqKGludChiKS1pbnQodCkpKQogICAgcmV0dXJuICgodG1bMF0qc3QrYm1bMF0qc2IrbG1bMF0qc2wrcm1bMF0qc3IpLyhzdCtzYitzbCtzciksCiAgICAgICAgICAgICh0bVsxXSpzdCtibVsxXSpzYitsbVsxXSpzbCtybVsxXSpzcikvKHN0K3NiK3NsK3NyKSwKPHxmaW1faG9sZXw+CmltID0gSW1hZ2Uub3BlbihhcmdzLmZuYW1lKQppbVdpZHRoLCBpbUhlaWdodCA9IGltLnNpemUKCnRvdGFsU2F0dXJhdGlvbiA9IFNhdHVyYXRpb25PZk1hc2soaW0sIDAsIDAsIGltV2lkdGgsIGltSGVpZ2h0KQoKcD1hcmdzLnByZWYKCnByaW50KCJTYXR1cmF0aW9uVG90YWxSZWQ9IitzdHIodG90YWxTYXR1cmF0aW9uWzBdKSkKcHJpbnQoIlNhdHVyYXRpb25Ub3RhbEdyZWVuPSIrc3RyKHRvdGFsU2F0dXJhdGlvblsxXSkpCnByaW50KCJTYXR1cmF0aW9uVG90YWxCbHVlPSIrc3RyKHRvdGFsU2F0dXJhdGlvblsyXSkpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICh0bVsyXSpzdCtibVsyXSpzYitsbVsyXSpzbCtybVsyXSpzcikvKHN0K3NiK3NsK3NyKSkKCgo8fGZpbV9lbmR8Pg=="]
["4180b52747e3279ccc16831cf1edba6b0e629650-1","4180b52747e3279ccc16831cf1edba6b0e629650","PHxmaW1fcHJlZml4fD4KIiIiClBlcnNvbiBEYXRhYmFzZSBBY2Nlc3MgT2JqZWN0ClRoZSBjbGFzcyBmb3IgYWNjZXNzaW5nIHRoZSBQZXJzb25zIERhdGFiYXNlCiIiIgoKaW1wb3J0IHNxbGl0ZTMKCgpjbGFzcyBQZXJzb25EYW8ob2JqZWN0KToKICAgICIiIgogICAgUGVyc29uIERhdGFiYXNlIEFjY2VzcyBPYmplY3QKICAgIFRoZSBjbGFzcyBmb3IgYWNjZXNzaW5nIHRoZSBQZXJzb25zIERhdGFiYXNlCiAgICAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgSW5pdGlhbGl6ZSB0aGUgUGVyc29uIERhdGFiYXNlIEFjY2VzcyBPYmplY3QKICAgICAgICAiIiIKCiAgICBkZWYgcHJpbnRfcGVyc29uc19kYihzZWxmKToKICAgICAgICAiIiIKICAgICAgICBQcmludCBhbGwgUGVyc29ucyBpbiB0aGUgcGVyc29ucyBkYXRhYmFzZQogICAgICAgICIiIgogICAgICAgIHByaW50KCJQZXJzb25zIERCOiIpCiAgICAgICAgZm9yIHJvdyBpbiBzZWxmLmdldF9hbGwoKToKICAgICAgICAgICAgcHJpbnQocm93KQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBnZXRfYWxsKCk6CiAgICAgICAgIiIiCiAgICAgICAgR2V0IGFsbCBwZXJzb25zCiAgICAgICAgOnJldHVybjogQWxsIHBlcnNvbnMKICAgICAgICAiIiIKICAgICAgICBwY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgncGVyc29ucy5kYicsIHRpbWVvdXQ9NSkKICAgICAgICBwYyA9IHBjb25uLmN1cnNvcigpCiAgICAgICAgcGMuZXhlY3V0ZSgnU0VMRUNUICogRlJPTSBwZXJzb25zJykKICAgICAgICByZXN1bHQgPSBwYy5mZXRjaGFsbCgpCiAgICAgICAgcGMuY2xvc2UoKQogICAgICAgIHBjb25uLmNsb3NlKCkKICAgICAgICByZXR1cm4gcmVzdWx0CgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGdldChuYW1lKToKICAgICAgICAiIiIKICAgICAgICBHZXQgdGhlIHBlcnNvbiB3aXRoIHRoZSBnaXZlbiBuYW1lCiAgICAgICAgOnBhcmFtIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBwZXJzb24KICAgICAgICA6cmV0dXJuOiBUaGUgcGVyc29uIHdpdGggdGhlIGdpdmVuIG5hbWUKICAgICAgICAiIiIKICAgICAgICBwY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgncGVyc29ucy5kYicsIHRpbWVvdXQ9NSkKICAgICAgICBwYyA9IHBjb25uLmN1cnNvcigpCiAgICAgICAgcGMuZXhlY3V0ZSgnU0VMRUNUICogRlJPTSBwZXJzb25zIFdIRVJFIHBlcnNvbj0/JywgKG5hbWUsKSkKICAgICAgICByZXN1bHQgPSBwYy5mZXRjaG9uZSgpCiAgICAgICAgcGMuY2xvc2UoKQogICAgICAgIHBjb25uLmNsb3NlKCkKICAgICAgICByZXR1cm4gcmVzdWx0CgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGluc2VydChuYW1lKToKICAgICAgICAiIiIKICAgICAgICBBZGQgYW4gZW50cnkgdG8gdGhlIHBlcnNvbnMgZGF0YWJhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZQogICAgICAgIDpwYXJhbSBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgcGVyc29uIHRvIGFkZCB0byB0aGUgZGF0YWJhc2UKICAgICAgICAiIiIKICAgICAgICBwY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgncGVyc29ucy5kYicsIHRpbWVvdXQ9NSkKICAgICAgICBwYyA9IHBjb25uLmN1cnNvcigpCiAgICAgICAgcGMuZXhlY3V0ZSgnSU5TRVJUIElOVE8gcGVyc29ucyBWQUxVRVMgKD8sID8sID8sID8sID8pJywKICAgICAgICAgICAgICAgICAgIChuYW1lLCAwLCAwLCAwLCAwKSkKICAgICAgICBwYy5jbG9zZSgpCiAgICAgICAgcGNvbm4uY29tbWl0KCkKICAgICAgICBwY29ubi5jbG9zZSgpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHNldF9mcmllbmRsaW5lc3MobmFtZSwgZnJpZW5kbGluZXNzKToKICAgICAgICAiIiIKICAgICAgICBTZXQgdGhlIHZhbHVlIG9mIGZyaWVuZGxpbmVzcyBmb3IgdGhlIHBlcnNvbiB3aXRoIHRoZSBnaXZlbiBuYW1lCiAgICAgICAgOnBhcmFtIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBwZXJzb24KICAgICAgICA6cGFyYW0gZnJpZW5kbGluZXNzOiBUaGUgdmFsdWUgb2YgZnJpZW5kbGluZXNzIHRvIHNldCBmb3IgdGhlIHBlcnNvbgogICAgICAgICIiIgogICAgICAgIHBjb25uID0gc3FsaXRlMy5jb25uZWN0KCdwZXJzb25zLmRiJywgdGltZW91dD01KQogICAgICAgIHBjID0gcGNvbm4uY3Vyc29yKCkKICAgICAgICBwYy5leGVjdXRlKCdVUERBVEUgcGVyc29ucyBTRVQgZnJpZW5kbGluZXNzPT8gV0hFUkUgcGVyc29uPT8nLAo8fGZpbV9ob2xlfD4KICAgICAgICBwYy5jbG9zZSgpCiAgICAgICAgcGNvbm4uY29tbWl0KCkKICAgICAgICBwY29ubi5jbG9zZSgpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHNldF9uX2ZyaWVuZGxpbmVzcyhuYW1lLCBuX2ZyaWVuZGxpbmVzcyk6CiAgICAgICAgIiIiCiAgICAgICAgU2V0IHRoZSB2YWx1ZSBvZiBuX2ZyaWVuZGxpbmVzcyBmb3IgdGhlIHBlcnNvbiB3aXRoIHRoZSBnaXZlbiBuYW1lCiAgICAgICAgOnBhcmFtIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBwZXJzb24KICAgICAgICA6cGFyYW0gbl9mcmllbmRsaW5lc3M6IFRoZSB2YWx1ZSBvZiBuX2ZyaWVuZGxpbmVzcyB0byBzZXQgZm9yIHRoZSBwZXJzb24KICAgICAgICAiIiIKICAgICAgICBwY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgncGVyc29ucy5kYicsIHRpbWVvdXQ9NSkKICAgICAgICBwYyA9IHBjb25uLmN1cnNvcigpCiAgICAgICAgcGMuZXhlY3V0ZSgnVVBEQVRFIHBlcnNvbnMgU0VUIG5fZnJpZW5kbGluZXNzPT8gV0hFUkUgcGVyc29uPT8nLAogICAgICAgICAgICAgICAgICAgKG5fZnJpZW5kbGluZXNzLCBuYW1lKSkKICAgICAgICBwYy5jbG9zZSgpCiAgICAgICAgcGNvbm4uY29tbWl0KCkKICAgICAgICBwY29ubi5jbG9zZSgpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHNldF9kb21pbmFuY2UobmFtZSwgZG9taW5hbmNlKToKICAgICAgICAiIiIKICAgICAgICBTZXQgdGhlIHZhbHVlIG9mIGRvbWluYW5jZSBmb3IgdGhlIHBlcnNvbiB3aXRoIHRoZSBnaXZlbiBuYW1lCiAgICAgICAgOnBhcmFtIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBwZXJzb24KICAgICAgICA6cGFyYW0gZG9taW5hbmNlOiBUaGUgdmFsdWUgb2YgZG9taW5hbmNlIHRvIHNldCBmb3IgdGhlIHBlcnNvbgogICAgICAgICIiIgogICAgICAgIHBjb25uID0gc3FsaXRlMy5jb25uZWN0KCdwZXJzb25zLmRiJywgdGltZW91dD01KQogICAgICAgIHBjID0gcGNvbm4uY3Vyc29yKCkKICAgICAgICBwYy5leGVjdXRlKCdVUERBVEUgcGVyc29ucyBTRVQgZG9taW5hbmNlPT8gV0hFUkUgcGVyc29uPT8nLAogICAgICAgICAgICAgICAgICAgKGRvbWluYW5jZSwgbmFtZSkpCiAgICAgICAgcGMuY2xvc2UoKQogICAgICAgIHBjb25uLmNvbW1pdCgpCiAgICAgICAgcGNvbm4uY2xvc2UoKQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBzZXRfbl9kb21pbmFuY2UobmFtZSwgbl9kb21pbmFuY2UpOgogICAgICAgICIiIgogICAgICAgIFNldCB0aGUgdmFsdWUgb2Ygbl9kb21pbmFuY2UgZm9yIHRoZSBwZXJzb24gd2l0aCB0aGUgZ2l2ZW4gbmFtZQogICAgICAgIDpwYXJhbSBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgcGVyc29uCiAgICAgICAgOnBhcmFtIG5fZG9taW5hbmNlOiBUaGUgdmFsdWUgb2Ygbl9kb21pbmFuY2UgdG8gc2V0IGZvciB0aGUgcGVyc29uCiAgICAgICAgIiIiCiAgICAgICAgcGNvbm4gPSBzcWxpdGUzLmNvbm5lY3QoJ3BlcnNvbnMuZGInLCB0aW1lb3V0PTUpCiAgICAgICAgcGMgPSBwY29ubi5jdXJzb3IoKQogICAgICAgIHBjLmV4ZWN1dGUoJ1VQREFURSBwZXJzb25zIFNFVCBuX2RvbWluYW5jZT0/IFdIRVJFIHBlcnNvbj0/JywKICAgICAgICAgICAgICAgICAgIChuX2RvbWluYW5jZSwgbmFtZSkpCiAgICAgICAgcGMuY2xvc2UoKQogICAgICAgIHBjb25uLmNvbW1pdCgpCiAgICAgICAgcGNvbm4uY2xvc2UoKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgKGZyaWVuZGxpbmVzcywgbmFtZSkpCjx8ZmltX2VuZHw+"]
["4180b52747e3279ccc16831cf1edba6b0e629650-2","4180b52747e3279ccc16831cf1edba6b0e629650","PHxmaW1fcHJlZml4fD4KIiIiClBlcnNvbiBEYXRhYmFzZSBBY2Nlc3MgT2JqZWN0ClRoZSBjbGFzcyBmb3IgYWNjZXNzaW5nIHRoZSBQZXJzb25zIERhdGFiYXNlCiIiIgoKaW1wb3J0IHNxbGl0ZTMKCgpjbGFzcyBQZXJzb25EYW8ob2JqZWN0KToKICAgICIiIgogICAgUGVyc29uIERhdGFiYXNlIEFjY2VzcyBPYmplY3QKICAgIFRoZSBjbGFzcyBmb3IgYWNjZXNzaW5nIHRoZSBQZXJzb25zIERhdGFiYXNlCiAgICAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgSW5pdGlhbGl6ZSB0aGUgUGVyc29uIERhdGFiYXNlIEFjY2VzcyBPYmplY3QKICAgICAgICAiIiIKCiAgICBkZWYgcHJpbnRfcGVyc29uc19kYihzZWxmKToKICAgICAgICAiIiIKICAgICAgICBQcmludCBhbGwgUGVyc29ucyBpbiB0aGUgcGVyc29ucyBkYXRhYmFzZQogICAgICAgICIiIgogICAgICAgIHByaW50KCJQZXJzb25zIERCOiIpCiAgICAgICAgZm9yIHJvdyBpbiBzZWxmLmdldF9hbGwoKToKICAgICAgICAgICAgcHJpbnQocm93KQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBnZXRfYWxsKCk6CiAgICAgICAgIiIiCiAgICAgICAgR2V0IGFsbCBwZXJzb25zCiAgICAgICAgOnJldHVybjogQWxsIHBlcnNvbnMKICAgICAgICAiIiIKICAgICAgICBwY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgncGVyc29ucy5kYicsIHRpbWVvdXQ9NSkKICAgICAgICBwYyA9IHBjb25uLmN1cnNvcigpCiAgICAgICAgcGMuZXhlY3V0ZSgnU0VMRUNUICogRlJPTSBwZXJzb25zJykKICAgICAgICByZXN1bHQgPSBwYy5mZXRjaGFsbCgpCiAgICAgICAgcGMuY2xvc2UoKQogICAgICAgIHBjb25uLmNsb3NlKCkKICAgICAgICByZXR1cm4gcmVzdWx0CgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGdldChuYW1lKToKICAgICAgICAiIiIKICAgICAgICBHZXQgdGhlIHBlcnNvbiB3aXRoIHRoZSBnaXZlbiBuYW1lCiAgICAgICAgOnBhcmFtIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBwZXJzb24KICAgICAgICA6cmV0dXJuOiBUaGUgcGVyc29uIHdpdGggdGhlIGdpdmVuIG5hbWUKICAgICAgICAiIiIKICAgICAgICBwY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgncGVyc29ucy5kYicsIHRpbWVvdXQ9NSkKICAgICAgICBwYyA9IHBjb25uLmN1cnNvcigpCiAgICAgICAgcGMuZXhlY3V0ZSgnU0VMRUNUICogRlJPTSBwZXJzb25zIFdIRVJFIHBlcnNvbj0/JywgKG5hbWUsKSkKICAgICAgICByZXN1bHQgPSBwYy5mZXRjaG9uZSgpCiAgICAgICAgcGMuY2xvc2UoKQogICAgICAgIHBjb25uLmNsb3NlKCkKICAgICAgICByZXR1cm4gcmVzdWx0CgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGluc2VydChuYW1lKToKICAgICAgICAiIiIKICAgICAgICBBZGQgYW4gZW50cnkgdG8gdGhlIHBlcnNvbnMgZGF0YWJhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZQogICAgICAgIDpwYXJhbSBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgcGVyc29uIHRvIGFkZCB0byB0aGUgZGF0YWJhc2UKICAgICAgICAiIiIKICAgICAgICBwY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgncGVyc29ucy5kYicsIHRpbWVvdXQ9NSkKICAgICAgICBwYyA9IHBjb25uLmN1cnNvcigpCiAgICAgICAgcGMuZXhlY3V0ZSgnSU5TRVJUIElOVE8gcGVyc29ucyBWQUxVRVMgKD8sID8sID8sID8sID8pJywKICAgICAgICAgICAgICAgICAgIChuYW1lLCAwLCAwLCAwLCAwKSkKICAgICAgICBwYy5jbG9zZSgpCiAgICAgICAgcGNvbm4uY29tbWl0KCkKICAgICAgICBwY29ubi5jbG9zZSgpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHNldF9mcmllbmRsaW5lc3MobmFtZSwgZnJpZW5kbGluZXNzKToKICAgICAgICAiIiIKICAgICAgICBTZXQgdGhlIHZhbHVlIG9mIGZyaWVuZGxpbmVzcyBmb3IgdGhlIHBlcnNvbiB3aXRoIHRoZSBnaXZlbiBuYW1lCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICA6cGFyYW0gbmFtZTogVGhlIG5hbWUgb2YgdGhlIHBlcnNvbgogICAgICAgIDpwYXJhbSBmcmllbmRsaW5lc3M6IFRoZSB2YWx1ZSBvZiBmcmllbmRsaW5lc3MgdG8gc2V0IGZvciB0aGUgcGVyc29uCiAgICAgICAgIiIiCiAgICAgICAgcGNvbm4gPSBzcWxpdGUzLmNvbm5lY3QoJ3BlcnNvbnMuZGInLCB0aW1lb3V0PTUpCjx8ZmltX2VuZHw+"]
["4180b52747e3279ccc16831cf1edba6b0e629650-3","4180b52747e3279ccc16831cf1edba6b0e629650","PHxmaW1fcHJlZml4fD4KIiIiClBlcnNvbiBEYXRhYmFzZSBBY2Nlc3MgT2JqZWN0ClRoZSBjbGFzcyBmb3IgYWNjZXNzaW5nIHRoZSBQZXJzb25zIERhdGFiYXNlCiIiIgoKaW1wb3J0IHNxbGl0ZTMKCgpjbGFzcyBQZXJzb25EYW8ob2JqZWN0KToKICAgICIiIgogICAgUGVyc29uIERhdGFiYXNlIEFjY2VzcyBPYmplY3QKICAgIFRoZSBjbGFzcyBmb3IgYWNjZXNzaW5nIHRoZSBQZXJzb25zIERhdGFiYXNlCiAgICAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgSW5pdGlhbGl6ZSB0aGUgUGVyc29uIERhdGFiYXNlIEFjY2VzcyBPYmplY3QKICAgICAgICAiIiIKCiAgICBkZWYgcHJpbnRfcGVyc29uc19kYihzZWxmKToKICAgICAgICAiIiIKICAgICAgICBQcmludCBhbGwgUGVyc29ucyBpbiB0aGUgcGVyc29ucyBkYXRhYmFzZQogICAgICAgICIiIgogICAgICAgIHByaW50KCJQZXJzb25zIERCOiIpCiAgICAgICAgZm9yIHJvdyBpbiBzZWxmLmdldF9hbGwoKToKICAgICAgICAgICAgcHJpbnQocm93KQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBnZXRfYWxsKCk6CiAgICAgICAgIiIiCiAgICAgICAgR2V0IGFsbCBwZXJzb25zCiAgICAgICAgOnJldHVybjogQWxsIHBlcnNvbnMKICAgICAgICAiIiIKICAgICAgICBwY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgncGVyc29ucy5kYicsIHRpbWVvdXQ9NSkKICAgICAgICBwYyA9IHBjb25uLmN1cnNvcigpCiAgICAgICAgcGMuZXhlY3V0ZSgnU0VMRUNUICogRlJPTSBwZXJzb25zJykKICAgICAgICByZXN1bHQgPSBwYy5mZXRjaGFsbCgpCiAgICAgICAgcGMuY2xvc2UoKQogICAgICAgIHBjb25uLmNsb3NlKCkKICAgICAgICByZXR1cm4gcmVzdWx0CgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGdldChuYW1lKToKICAgICAgICAiIiIKICAgICAgICBHZXQgdGhlIHBlcnNvbiB3aXRoIHRoZSBnaXZlbiBuYW1lCiAgICAgICAgOnBhcmFtIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBwZXJzb24KICAgICAgICA6cmV0dXJuOiBUaGUgcGVyc29uIHdpdGggdGhlIGdpdmVuIG5hbWUKICAgICAgICAiIiIKICAgICAgICBwY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgncGVyc29ucy5kYicsIHRpbWVvdXQ9NSkKICAgICAgICBwYyA9IHBjb25uLmN1cnNvcigpCiAgICAgICAgcGMuZXhlY3V0ZSgnU0VMRUNUICogRlJPTSBwZXJzb25zIFdIRVJFIHBlcnNvbj0/JywgKG5hbWUsKSkKICAgICAgICByZXN1bHQgPSBwYy5mZXRjaG9uZSgpCiAgICAgICAgcGMuY2xvc2UoKQogICAgICAgIHBjb25uLmNsb3NlKCkKICAgICAgICByZXR1cm4gcmVzdWx0CgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGluc2VydChuYW1lKToKICAgICAgICAiIiIKICAgICAgICBBZGQgYW4gZW50cnkgdG8gdGhlIHBlcnNvbnMgZGF0YWJhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZQogICAgICAgIDpwYXJhbSBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgcGVyc29uIHRvIGFkZCB0byB0aGUgZGF0YWJhc2UKICAgICAgICAiIiIKICAgICAgICBwY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgncGVyc29ucy5kYicsIHRpbWVvdXQ9NSkKICAgICAgICBwYyA9IHBjb25uLmN1cnNvcigpCiAgICAgICAgcGMuZXhlY3V0ZSgnSU5TRVJUIElOVE8gcGVyc29ucyBWQUxVRVMgKD8sID8sID8sID8sID8pJywKICAgICAgICAgICAgICAgICAgIChuYW1lLCAwLCAwLCAwLCAwKSkKICAgICAgICBwYy5jbG9zZSgpCiAgICAgICAgcGNvbm4uY29tbWl0KCkKICAgICAgICBwY29ubi5jbG9zZSgpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHNldF9mcmllbmRsaW5lc3MobmFtZSwgZnJpZW5kbGluZXNzKToKICAgICAgICAiIiIKICAgICAgICBTZXQgdGhlIHZhbHVlIG9mIGZyaWVuZGxpbmVzcyBmb3IgdGhlIHBlcnNvbiB3aXRoIHRoZSBnaXZlbiBuYW1lCiAgICAgICAgOnBhcmFtIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBwZXJzb24KICAgICAgICA6cGFyYW0gZnJpZW5kbGluZXNzOiBUaGUgdmFsdWUgb2YgZnJpZW5kbGluZXNzIHRvIHNldCBmb3IgdGhlIHBlcnNvbgogICAgICAgICIiIgogICAgICAgIHBjb25uID0gc3FsaXRlMy5jb25uZWN0KCdwZXJzb25zLmRiJywgdGltZW91dD01KQogICAgICAgIHBjID0gcGNvbm4uY3Vyc29yKCkKICAgICAgICBwYy5leGVjdXRlKCdVUERBVEUgcGVyc29ucyBTRVQgZnJpZW5kbGluZXNzPT8gV0hFUkUgcGVyc29uPT8nLAogICAgICAgICAgICAgICAgICAgKGZyaWVuZGxpbmVzcywgbmFtZSkpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBwYy5jbG9zZSgpCiAgICAgICAgcGNvbm4uY29tbWl0KCkKICAgICAgICBwY29ubi5jbG9zZSgpCgo8fGZpbV9lbmR8Pg=="]
["4180b52747e3279ccc16831cf1edba6b0e629650-4","4180b52747e3279ccc16831cf1edba6b0e629650","PHxmaW1fcHJlZml4fD4KIiIiClBlcnNvbiBEYXRhYmFzZSBBY2Nlc3MgT2JqZWN0ClRoZSBjbGFzcyBmb3IgYWNjZXNzaW5nIHRoZSBQZXJzb25zIERhdGFiYXNlCiIiIgoKaW1wb3J0IHNxbGl0ZTMKCgpjbGFzcyBQZXJzb25EYW8ob2JqZWN0KToKICAgICIiIgogICAgUGVyc29uIERhdGFiYXNlIEFjY2VzcyBPYmplY3QKICAgIFRoZSBjbGFzcyBmb3IgYWNjZXNzaW5nIHRoZSBQZXJzb25zIERhdGFiYXNlCiAgICAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgSW5pdGlhbGl6ZSB0aGUgUGVyc29uIERhdGFiYXNlIEFjY2VzcyBPYmplY3QKICAgICAgICAiIiIKCiAgICBkZWYgcHJpbnRfcGVyc29uc19kYihzZWxmKToKICAgICAgICAiIiIKICAgICAgICBQcmludCBhbGwgUGVyc29ucyBpbiB0aGUgcGVyc29ucyBkYXRhYmFzZQogICAgICAgICIiIgogICAgICAgIHByaW50KCJQZXJzb25zIERCOiIpCiAgICAgICAgZm9yIHJvdyBpbiBzZWxmLmdldF9hbGwoKToKICAgICAgICAgICAgcHJpbnQocm93KQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBnZXRfYWxsKCk6CiAgICAgICAgIiIiCiAgICAgICAgR2V0IGFsbCBwZXJzb25zCiAgICAgICAgOnJldHVybjogQWxsIHBlcnNvbnMKICAgICAgICAiIiIKICAgICAgICBwY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgncGVyc29ucy5kYicsIHRpbWVvdXQ9NSkKICAgICAgICBwYyA9IHBjb25uLmN1cnNvcigpCiAgICAgICAgcGMuZXhlY3V0ZSgnU0VMRUNUICogRlJPTSBwZXJzb25zJykKICAgICAgICByZXN1bHQgPSBwYy5mZXRjaGFsbCgpCiAgICAgICAgcGMuY2xvc2UoKQogICAgICAgIHBjb25uLmNsb3NlKCkKICAgICAgICByZXR1cm4gcmVzdWx0CgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGdldChuYW1lKToKICAgICAgICAiIiIKICAgICAgICBHZXQgdGhlIHBlcnNvbiB3aXRoIHRoZSBnaXZlbiBuYW1lCiAgICAgICAgOnBhcmFtIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBwZXJzb24KICAgICAgICA6cmV0dXJuOiBUaGUgcGVyc29uIHdpdGggdGhlIGdpdmVuIG5hbWUKICAgICAgICAiIiIKICAgICAgICBwY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgncGVyc29ucy5kYicsIHRpbWVvdXQ9NSkKICAgICAgICBwYyA9IHBjb25uLmN1cnNvcigpCiAgICAgICAgcGMuZXhlY3V0ZSgnU0VMRUNUICogRlJPTSBwZXJzb25zIFdIRVJFIHBlcnNvbj0/JywgKG5hbWUsKSkKICAgICAgICByZXN1bHQgPSBwYy5mZXRjaG9uZSgpCiAgICAgICAgcGMuY2xvc2UoKQogICAgICAgIHBjb25uLmNsb3NlKCkKICAgICAgICByZXR1cm4gcmVzdWx0CgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGluc2VydChuYW1lKToKICAgICAgICAiIiIKICAgICAgICBBZGQgYW4gZW50cnkgdG8gdGhlIHBlcnNvbnMgZGF0YWJhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZQogICAgICAgIDpwYXJhbSBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgcGVyc29uIHRvIGFkZCB0byB0aGUgZGF0YWJhc2UKICAgICAgICAiIiIKICAgICAgICBwY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgncGVyc29ucy5kYicsIHRpbWVvdXQ9NSkKICAgICAgICBwYyA9IHBjb25uLmN1cnNvcigpCiAgICAgICAgcGMuZXhlY3V0ZSgnSU5TRVJUIElOVE8gcGVyc29ucyBWQUxVRVMgKD8sID8sID8sID8sID8pJywKICAgICAgICAgICAgICAgICAgIChuYW1lLCAwLCAwLCAwLCAwKSkKICAgICAgICBwYy5jbG9zZSgpCiAgICAgICAgcGNvbm4uY29tbWl0KCkKICAgICAgICBwY29ubi5jbG9zZSgpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHNldF9mcmllbmRsaW5lc3MobmFtZSwgZnJpZW5kbGluZXNzKToKICAgICAgICAiIiIKICAgICAgICBTZXQgdGhlIHZhbHVlIG9mIGZyaWVuZGxpbmVzcyBmb3IgdGhlIHBlcnNvbiB3aXRoIHRoZSBnaXZlbiBuYW1lCiAgICAgICAgOnBhcmFtIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBwZXJzb24KICAgICAgICA6cGFyYW0gZnJpZW5kbGluZXNzOiBUaGUgdmFsdWUgb2YgZnJpZW5kbGluZXNzIHRvIHNldCBmb3IgdGhlIHBlcnNvbgogICAgICAgICIiIgogICAgICAgIHBjb25uID0gc3FsaXRlMy5jb25uZWN0KCdwZXJzb25zLmRiJywgdGltZW91dD01KQogICAgICAgIHBjID0gcGNvbm4uY3Vyc29yKCkKICAgICAgICBwYy5leGVjdXRlKCdVUERBVEUgcGVyc29ucyBTRVQgZnJpZW5kbGluZXNzPT8gV0hFUkUgcGVyc29uPT8nLAogICAgICAgICAgICAgICAgICAgKGZyaWVuZGxpbmVzcywgbmFtZSkpCiAgICAgICAgcGMuY2xvc2UoKQogICAgICAgIHBjb25uLmNvbW1pdCgpCiAgICAgICAgcGNvbm4uY2xvc2UoKQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBzZXRfbl9mcmllbmRsaW5lc3MobmFtZSwgbl9mcmllbmRsaW5lc3MpOgogICAgICAgICIiIgogICAgICAgIFNldCB0aGUgdmFsdWUgb2Ygbl9mcmllbmRsaW5lc3MgZm9yIHRoZSBwZXJzb24gd2l0aCB0aGUgZ2l2ZW4gbmFtZQogICAgICAgIDpwYXJhbSBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgcGVyc29uCiAgICAgICAgOnBhcmFtIG5fZnJpZW5kbGluZXNzOiBUaGUgdmFsdWUgb2Ygbl9mcmllbmRsaW5lc3MgdG8gc2V0IGZvciB0aGUgcGVyc29uCiAgICAgICAgIiIiCiAgICAgICAgcGNvbm4gPSBzcWxpdGUzLmNvbm5lY3QoJ3BlcnNvbnMuZGInLCB0aW1lb3V0PTUpCiAgICAgICAgcGMgPSBwY29ubi5jdXJzb3IoKQogICAgICAgIHBjLmV4ZWN1dGUoJ1VQREFURSBwZXJzb25zIFNFVCBuX2ZyaWVuZGxpbmVzcz0/IFdIRVJFIHBlcnNvbj0/JywKICAgICAgICAgICAgICAgICAgIChuX2ZyaWVuZGxpbmVzcywgbmFtZSkpCiAgICAgICAgcGMuY2xvc2UoKQogICAgICAgIHBjb25uLmNvbW1pdCgpCiAgICAgICAgcGNvbm4uY2xvc2UoKQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBzZXRfZG9taW5hbmNlKG5hbWUsIGRvbWluYW5jZSk6CiAgICAgICAgIiIiCiAgICAgICAgU2V0IHRoZSB2YWx1ZSBvZiBkb21pbmFuY2UgZm9yIHRoZSBwZXJzb24gd2l0aCB0aGUgZ2l2ZW4gbmFtZQogICAgICAgIDpwYXJhbSBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgcGVyc29uCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICA6cGFyYW0gZG9taW5hbmNlOiBUaGUgdmFsdWUgb2YgZG9taW5hbmNlIHRvIHNldCBmb3IgdGhlIHBlcnNvbgogICAgICAgICIiIgogICAgICAgIHBjb25uID0gc3FsaXRlMy5jb25uZWN0KCdwZXJzb25zLmRiJywgdGltZW91dD01KQogICAgICAgIHBjID0gcGNvbm4uY3Vyc29yKCkKPHxmaW1fZW5kfD4="]
["e5212da6369142d923039c391d12e79d74f908bc-1","e5212da6369142d923039c391d12e79d74f908bc","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gZW51bSBpbXBvcnQgRW51bQoKQVVUSF9VUkwgPSAoCiAgICAiaHR0cHM6Ly9oNGktbWVudGVlLWF1dGgudmVyY2VsLmFwcCIKICAgIGlmIG9zLmVudmlyb24uZ2V0KCJERVBMT1lNRU5UIikgPT0gInByb2QiCiAgICBlbHNlICJodHRwczovL21lbnRlZS1hdXRoLWRldi52ZXJjZWwuYXBwIgopCgojIFRlbXBsYXRlIElEIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdGhyb3VnaCBzZW5kZ3JpZCdzIFVJCiMgaHR0cHM6Ly9zZW5kZ3JpZC5jb20vZG9jcy91aS9zZW5kaW5nLWVtYWlsL2hvdy10by1zZW5kLWFuLWVtYWlsLXdpdGgtZHluYW1pYy10cmFuc2FjdGlvbmFsLXRlbXBsYXRlcy8KTUVOVE9SX0FQUFRfVEVNUExBVEUgPSAiZC0zYTJiNTE0NjZlNjU0MWZmYTA1MmExOTdjZWQwOGMxOCIKTUVOVEVFX0FQUFRfVEVNUExBVEUgPSAiZC0yY2U5NjNiMzZjOTE0NTdjODljOTE2YTExMWQ2NThiZCIKVVNFUl9WRVJJRklDQVRJT05fVEVNUExBVEUgPSAiZC03YmQwOWFiOGY4NDg0Y2VlOTIyN2E5YTI1YWQ1MjdlYyIKVVNFUl9GT1JHT1RfUEFTU1dPUkRfVEVNUExBVEUgPSAiZC1kZjFhZGNjZWQ4YWI0NjFjYTcyY2VhZTVlZWNmYzU2NiIKTUVOVE9SX0FQUF9PRkZFUiA9ICJkLTNhN2E1ZGIyY2Y0ZTQxMmU5ZTY4ZTcyOWE3YjUyODEzIgpNRU5UT1JfQ09OVEFDVF9NRSA9ICJkLWQ2YzZkOGYzM2MzYjQ5NzA5MzdhOWRiZDg1Zjk3ZDFhIgoKTUVOVE9SX0FQUF9TVUJNSVRURUQgPSAiZC03NTM3MjdlMmM3ZGY0NTA5YjI1MWE1NzY2NDVkODI5YSIKTUVOVE9SX0FQUF9SRUpFQ1RFRCA9ICJkLTUxNTg5ODBmY2Y5YTQyNDdiMDE4ZWYwZDgzMmQ3OTZjIgoKIyBUaGlzIGxhY2tzIHRpbWV6b25lIHNvIHlvdSdsbCBuZWVkIHRvIGFkZCB0aGF0IGFjY29yZGluZyB0byB3aGF0ZXZlciBjb2RlIHlvdSdyZSB3b3JraW5nIHdpdGgKQVBQVF9USU1FX0ZPUk1BVCA9ICIlbS0lZC0lWSBhdCAlSTolTSVwIgoKIyBsZWdhY3kgcm9sZXMgKG1vdmVkIHRvIEFjY291bnQgRW51bSkKTUVOVE9SX1JPTEUgPSAibWVudG9yIgpNRU5URUVfUk9MRSA9ICJtZW50ZWUiCkFETUlOX1JPTEUgPSAiYWRtaW4iCgojIEFjY291bnQgdHlwZXMKY2xhc3MgQWNjb3VudChFbnVtKToKICAgIEFETUlOID0gMAogICAgTUVOVE9SID0gMQogICAgTUVOVEVFID0gMgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIKCgo8fGZpbV9lbmR8Pg=="]
["e5212da6369142d923039c391d12e79d74f908bc-2","e5212da6369142d923039c391d12e79d74f908bc","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gZW51bSBpbXBvcnQgRW51bQoKQVVUSF9VUkwgPSAoCiAgICAiaHR0cHM6Ly9oNGktbWVudGVlLWF1dGgudmVyY2VsLmFwcCIKICAgIGlmIG9zLmVudmlyb24uZ2V0KCJERVBMT1lNRU5UIikgPT0gInByb2QiCiAgICBlbHNlICJodHRwczovL21lbnRlZS1hdXRoLWRldi52ZXJjZWwuYXBwIgopCgojIFRlbXBsYXRlIElEIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdGhyb3VnaCBzZW5kZ3JpZCdzIFVJCiMgaHR0cHM6Ly9zZW5kZ3JpZC5jb20vZG9jcy91aS9zZW5kaW5nLWVtYWlsL2hvdy10by1zZW5kLWFuLWVtYWlsLXdpdGgtZHluYW1pYy10cmFuc2FjdGlvbmFsLXRlbXBsYXRlcy8KTUVOVE9SX0FQUFRfVEVNUExBVEUgPSAiZC0zYTJiNTE0NjZlNjU0MWZmYTA1MmExOTdjZWQwOGMxOCIKTUVOVEVFX0FQUFRfVEVNUExBVEUgPSAiZC0yY2U5NjNiMzZjOTE0NTdjODljOTE2YTExMWQ2NThiZCIKVVNFUl9WRVJJRklDQVRJT05fVEVNUExBVEUgPSAiZC03YmQwOWFiOGY4NDg0Y2VlOTIyN2E5YTI1YWQ1MjdlYyIKVVNFUl9GT1JHT1RfUEFTU1dPUkRfVEVNUExBVEUgPSAiZC1kZjFhZGNjZWQ4YWI0NjFjYTcyY2VhZTVlZWNmYzU2NiIKTUVOVE9SX0FQUF9PRkZFUiA9ICJkLTNhN2E1ZGIyY2Y0ZTQxMmU5ZTY4ZTcyOWE3YjUyODEzIgpNRU5UT1JfQ09OVEFDVF9NRSA9ICJkLWQ2YzZkOGYzM2MzYjQ5NzA5MzdhOWRiZDg1Zjk3ZDFhIgoKTUVOVE9SX0FQUF9TVUJNSVRURUQgPSAiZC03NTM3MjdlMmM3ZGY0NTA5YjI1MWE1NzY2NDVkODI5YSIKTUVOVE9SX0FQUF9SRUpFQ1RFRCA9ICJkLTUxNTg5ODBmY2Y5YTQyNDdiMDE4ZWYwZDgzMmQ3OTZjIgoKIyBUaGlzIGxhY2tzIHRpbWV6b25lIHNvIHlvdSdsbCBuZWVkIHRvIGFkZCB0aGF0IGFjY29yZGluZyB0byB3aGF0ZXZlciBjb2RlIHlvdSdyZSB3b3JraW5nIHdpdGgKQVBQVF9USU1FX0ZPUk1BVCA9ICIlbS0lZC0lWSBhdCAlSTolTSVwIgoKIyBsZWdhY3kgcm9sZXMgKG1vdmVkIHRvIEFjY291bnQgRW51bSkKTUVOVE9SX1JPTEUgPSAibWVudG9yIgpNRU5URUVfUk9MRSA9ICJtZW50ZWUiCkFETUlOX1JPTEUgPSAiYWRtaW4iCgojIEFjY291bnQgdHlwZXMKY2xhc3MgQWNjb3VudChFbnVtKToKICAgIEFETUlOID0gMAogICAgTUVOVE9SID0gMQogICAgTUVOVEVFID0gMgoKICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyCgoKIyBNZW50b3IgQXBwbGljYXRpb24gU3RhdHVzCjx8ZmltX2hvbGV8PgogICAgIk9GRkVSX01BREUiOiAiT2ZmZXIgTWFkZSIsCn0KCiMgQXBwb2ludG1lbnQgU3RhdHVzCkFQUFRfU1RBVFVTID0geyJQRU5ESU5HIjogInBlbmRpbmciLCAiREVOSUVEIjogImRlbmllZCIsICJBQ0NFUFRFRCI6ICJhY2NlcHRlZCJ9Cjx8ZmltX3N1ZmZpeHw+Ck1FTlRPUl9BUFBfU1RBVEVTID0gewogICAgIlBFTkRJTkciOiAiUGVuZGluZyIsCiAgICAiUkVWSUVXRUQiOiAiUmV2aWV3ZWQiLAogICAgIlJFSkVDVEVEIjogIlJlamVjdGVkIiwKPHxmaW1fZW5kfD4="]
["e5212da6369142d923039c391d12e79d74f908bc-3","e5212da6369142d923039c391d12e79d74f908bc","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gZW51bSBpbXBvcnQgRW51bQoKQVVUSF9VUkwgPSAoCiAgICAiaHR0cHM6Ly9oNGktbWVudGVlLWF1dGgudmVyY2VsLmFwcCIKICAgIGlmIG9zLmVudmlyb24uZ2V0KCJERVBMT1lNRU5UIikgPT0gInByb2QiCiAgICBlbHNlICJodHRwczovL21lbnRlZS1hdXRoLWRldi52ZXJjZWwuYXBwIgopCgojIFRlbXBsYXRlIElEIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdGhyb3VnaCBzZW5kZ3JpZCdzIFVJCiMgaHR0cHM6Ly9zZW5kZ3JpZC5jb20vZG9jcy91aS9zZW5kaW5nLWVtYWlsL2hvdy10by1zZW5kLWFuLWVtYWlsLXdpdGgtZHluYW1pYy10cmFuc2FjdGlvbmFsLXRlbXBsYXRlcy8KTUVOVE9SX0FQUFRfVEVNUExBVEUgPSAiZC0zYTJiNTE0NjZlNjU0MWZmYTA1MmExOTdjZWQwOGMxOCIKTUVOVEVFX0FQUFRfVEVNUExBVEUgPSAiZC0yY2U5NjNiMzZjOTE0NTdjODljOTE2YTExMWQ2NThiZCIKVVNFUl9WRVJJRklDQVRJT05fVEVNUExBVEUgPSAiZC03YmQwOWFiOGY4NDg0Y2VlOTIyN2E5YTI1YWQ1MjdlYyIKVVNFUl9GT1JHT1RfUEFTU1dPUkRfVEVNUExBVEUgPSAiZC1kZjFhZGNjZWQ4YWI0NjFjYTcyY2VhZTVlZWNmYzU2NiIKTUVOVE9SX0FQUF9PRkZFUiA9ICJkLTNhN2E1ZGIyY2Y0ZTQxMmU5ZTY4ZTcyOWE3YjUyODEzIgpNRU5UT1JfQ09OVEFDVF9NRSA9ICJkLWQ2YzZkOGYzM2MzYjQ5NzA5MzdhOWRiZDg1Zjk3ZDFhIgoKTUVOVE9SX0FQUF9TVUJNSVRURUQgPSAiZC03NTM3MjdlMmM3ZGY0NTA5YjI1MWE1NzY2NDVkODI5YSIKTUVOVE9SX0FQUF9SRUpFQ1RFRCA9ICJkLTUxNTg5ODBmY2Y5YTQyNDdiMDE4ZWYwZDgzMmQ3OTZjIgoKIyBUaGlzIGxhY2tzIHRpbWV6b25lIHNvIHlvdSdsbCBuZWVkIHRvIGFkZCB0aGF0IGFjY29yZGluZyB0byB3aGF0ZXZlciBjb2RlIHlvdSdyZSB3b3JraW5nIHdpdGgKQVBQVF9USU1FX0ZPUk1BVCA9ICIlbS0lZC0lWSBhdCAlSTolTSVwIgoKIyBsZWdhY3kgcm9sZXMgKG1vdmVkIHRvIEFjY291bnQgRW51bSkKTUVOVE9SX1JPTEUgPSAibWVudG9yIgpNRU5URUVfUk9MRSA9ICJtZW50ZWUiCkFETUlOX1JPTEUgPSAiYWRtaW4iCgojIEFjY291bnQgdHlwZXMKY2xhc3MgQWNjb3VudChFbnVtKToKICAgIEFETUlOID0gMAogICAgTUVOVE9SID0gMQogICAgTUVOVEVFID0gMgoKICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyCgoKIyBNZW50b3IgQXBwbGljYXRpb24gU3RhdHVzCk1FTlRPUl9BUFBfU1RBVEVTID0gewogICAgIlBFTkRJTkciOiAiUGVuZGluZyIsCiAgICAiUkVWSUVXRUQiOiAiUmV2aWV3ZWQiLAo8fGZpbV9ob2xlfD4KfQoKIyBBcHBvaW50bWVudCBTdGF0dXMKQVBQVF9TVEFUVVMgPSB7IlBFTkRJTkciOiAicGVuZGluZyIsICJERU5JRUQiOiAiZGVuaWVkIiwgIkFDQ0VQVEVEIjogImFjY2VwdGVkIn0KPHxmaW1fc3VmZml4fD4KICAgICJSRUpFQ1RFRCI6ICJSZWplY3RlZCIsCiAgICAiT0ZGRVJfTUFERSI6ICJPZmZlciBNYWRlIiwKPHxmaW1fZW5kfD4="]
["e5212da6369142d923039c391d12e79d74f908bc-4","e5212da6369142d923039c391d12e79d74f908bc","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gZW51bSBpbXBvcnQgRW51bQoKQVVUSF9VUkwgPSAoCiAgICAiaHR0cHM6Ly9oNGktbWVudGVlLWF1dGgudmVyY2VsLmFwcCIKICAgIGlmIG9zLmVudmlyb24uZ2V0KCJERVBMT1lNRU5UIikgPT0gInByb2QiCiAgICBlbHNlICJodHRwczovL21lbnRlZS1hdXRoLWRldi52ZXJjZWwuYXBwIgopCgojIFRlbXBsYXRlIElEIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdGhyb3VnaCBzZW5kZ3JpZCdzIFVJCiMgaHR0cHM6Ly9zZW5kZ3JpZC5jb20vZG9jcy91aS9zZW5kaW5nLWVtYWlsL2hvdy10by1zZW5kLWFuLWVtYWlsLXdpdGgtZHluYW1pYy10cmFuc2FjdGlvbmFsLXRlbXBsYXRlcy8KTUVOVE9SX0FQUFRfVEVNUExBVEUgPSAiZC0zYTJiNTE0NjZlNjU0MWZmYTA1MmExOTdjZWQwOGMxOCIKTUVOVEVFX0FQUFRfVEVNUExBVEUgPSAiZC0yY2U5NjNiMzZjOTE0NTdjODljOTE2YTExMWQ2NThiZCIKVVNFUl9WRVJJRklDQVRJT05fVEVNUExBVEUgPSAiZC03YmQwOWFiOGY4NDg0Y2VlOTIyN2E5YTI1YWQ1MjdlYyIKVVNFUl9GT1JHT1RfUEFTU1dPUkRfVEVNUExBVEUgPSAiZC1kZjFhZGNjZWQ4YWI0NjFjYTcyY2VhZTVlZWNmYzU2NiIKTUVOVE9SX0FQUF9PRkZFUiA9ICJkLTNhN2E1ZGIyY2Y0ZTQxMmU5ZTY4ZTcyOWE3YjUyODEzIgpNRU5UT1JfQ09OVEFDVF9NRSA9ICJkLWQ2YzZkOGYzM2MzYjQ5NzA5MzdhOWRiZDg1Zjk3ZDFhIgoKTUVOVE9SX0FQUF9TVUJNSVRURUQgPSAiZC03NTM3MjdlMmM3ZGY0NTA5YjI1MWE1NzY2NDVkODI5YSIKTUVOVE9SX0FQUF9SRUpFQ1RFRCA9ICJkLTUxNTg5ODBmY2Y5YTQyNDdiMDE4ZWYwZDgzMmQ3OTZjIgoKIyBUaGlzIGxhY2tzIHRpbWV6b25lIHNvIHlvdSdsbCBuZWVkIHRvIGFkZCB0aGF0IGFjY29yZGluZyB0byB3aGF0ZXZlciBjb2RlIHlvdSdyZSB3b3JraW5nIHdpdGgKQVBQVF9USU1FX0ZPUk1BVCA9ICIlbS0lZC0lWSBhdCAlSTolTSVwIgoKIyBsZWdhY3kgcm9sZXMgKG1vdmVkIHRvIEFjY291bnQgRW51bSkKTUVOVE9SX1JPTEUgPSAibWVudG9yIgpNRU5URUVfUk9MRSA9ICJtZW50ZWUiCjx8ZmltX2hvbGV8PgogICAgQURNSU4gPSAwCiAgICBNRU5UT1IgPSAxCiAgICBNRU5URUUgPSAyCgogICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIKCgojIE1lbnRvciBBcHBsaWNhdGlvbiBTdGF0dXMKTUVOVE9SX0FQUF9TVEFURVMgPSB7CiAgICAiUEVORElORyI6ICJQZW5kaW5nIiwKICAgICJSRVZJRVdFRCI6ICJSZXZpZXdlZCIsCiAgICAiUkVKRUNURUQiOiAiUmVqZWN0ZWQiLAogICAgIk9GRkVSX01BREUiOiAiT2ZmZXIgTWFkZSIsCn0KCiMgQXBwb2ludG1lbnQgU3RhdHVzCkFQUFRfU1RBVFVTID0geyJQRU5ESU5HIjogInBlbmRpbmciLCAiREVOSUVEIjogImRlbmllZCIsICJBQ0NFUFRFRCI6ICJhY2NlcHRlZCJ9Cjx8ZmltX3N1ZmZpeHw+CkFETUlOX1JPTEUgPSAiYWRtaW4iCgojIEFjY291bnQgdHlwZXMKY2xhc3MgQWNjb3VudChFbnVtKToKPHxmaW1fZW5kfD4="]
["94ddc7aa2115e85e3dddc56db30bf66a561c1bca-1","94ddc7aa2115e85e3dddc56db30bf66a561c1bca","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCgpmcm9tIGxpdmVzdHJlYW1lci5jb21wYXQgaW1wb3J0IHVybGpvaW4KZnJvbSBsaXZlc3RyZWFtZXIucGx1Z2luIGltcG9ydCBQbHVnaW4KZnJvbSBsaXZlc3RyZWFtZXIucGx1Z2luLmFwaSBpbXBvcnQgaHR0cCwgdmFsaWRhdGUKZnJvbSBsaXZlc3RyZWFtZXIuc3RyZWFtIGltcG9ydCBSVE1QU3RyZWFtCgpSVE1QX1VSTCA9ICJydG1wOi8vezB9L2FwcC97MX0iCkNIQU5ORUxfREVUQUlMU19VUkkgPSAiaHR0cHM6Ly9hcGkuc3RyZWFtdXAuY29tLzEuMC9jaGFubmVscy97MH0/YWNjZXNzX3Rva2VuPXsxfSIKUkVESVJFQ1RfU0VSVklDRV9VUkkgPSAiaHR0cHM6Ly9sYW5jZXIuc3RyZWFtdXAuY29tL2FwaS9yZWRpcmVjdC97MH0iCgpfdXJsX3JlID0gcmUuY29tcGlsZSgiaHR0cChzKT86Ly8oXHcrXC4pP3N0cmVhbXVwLmNvbS8oP1A8Y2hhbm5lbD5bXi8/XSspIikKX2ZsYXNodmFyc19yZSA9IHJlLmNvbXBpbGUoImZsYXNodmFyc1wuKD9QPHZhcj5cdyspXHM/PVxzPycoP1A8dmFsdWU+W14nXSspJzsiKQpfc3dmX3VybF9yZSA9IHJlLmNvbXBpbGUoInN3Zm9iamVjdC5lbWJlZFNXRlwoXHMqXCIoP1A8cGxheWVyX3VybD5bXlwiXSspXCIsIikKCl9zY2hlbWEgPSB2YWxpZGF0ZS5TY2hlbWEoCiAgICB2YWxpZGF0ZS51bmlvbih7CiAgICAgICAgInZhcnMiOiB2YWxpZGF0ZS5hbGwoCiAgICAgICAgICAgIHZhbGlkYXRlLnRyYW5zZm9ybShfZmxhc2h2YXJzX3JlLmZpbmRhbGwpLAogICAgICAgICAgICB2YWxpZGF0ZS50cmFuc2Zvcm0oZGljdCksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJvd25lciI6IHZhbGlkYXRlLnRleHQsCiAgICAgICAgICAgICAgICB2YWxpZGF0ZS5vcHRpb25hbCgidG9rZW4iKTogdmFsaWRhdGUudGV4dAogICAgICAgICAgICB9CiAgICAgICAgKSwKICAgICAgICAic3dmIjogdmFsaWRhdGUuYWxsKAogICAgICAgICAgICB2YWxpZGF0ZS50cmFuc2Zvcm0oX3N3Zl91cmxfcmUuc2VhcmNoKSwKICAgICAgICAgICAgdmFsaWRhdGUuZ2V0KCJwbGF5ZXJfdXJsIiksCiAgICAgICAgICAgIHZhbGlkYXRlLmVuZHN3aXRoKCIuc3dmIikKICAgICAgICApCiAgICB9KQopCgpfY2hhbm5lbF9kZXRhaWxzX3NjaGVtYSA9IHZhbGlkYXRlLlNjaGVtYSh7CiAgICAiY2hhbm5lbCI6IHsKICAgICAgICAibGl2ZSI6IGJvb2wsCiAgICAgICAgInNsdWciOiB2YWxpZGF0ZS50ZXh0CiAgICB9Cn0pCgpjbGFzcyBTdHJlYW11cENvbShQbHVnaW4pOgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgY2FuX2hhbmRsZV91cmwoY2xzLCB1cmwpOgogICAgICAgIHJldHVybiBfdXJsX3JlLm1hdGNoKHVybCkKCiAgICBkZWYgX2dldF9zdHJlYW1zKHNlbGYpOgogICAgICAgIHJlcyA9IGh0dHAuZ2V0KHNlbGYudXJsLCBzY2hlbWE9X3NjaGVtYSkKICAgICAgICBpZiBub3QgcmVzOgogICAgICAgICAgICByZXR1cm4KICAgICAgICBvd25lciA9IHJlc1sidmFycyJdWyJvd25lciJdCiAgICAgICAgdG9rZW4gPSByZXNbInZhcnMiXS5nZXQoInRva2VuIiwgIm51bGwiKQogICAgICAgIHN3Zl91cmwgPSByZXNbInN3ZiJdCgogICAgICAgICMgQ2hlY2sgaWYgdGhlIHN0cmVhbSBpcyBvbmxpbmUKICAgICAgICByZXMgPSBodHRwLmdldChDSEFOTkVMX0RFVEFJTFNfVVJJLmZvcm1hdChvd25lciwgdG9rZW4pKQogICAgICAgIGNoYW5uZWxfZGV0YWlscyA9IGh0dHAuanNvbihyZXMsIHNjaGVtYT1fY2hhbm5lbF9kZXRhaWxzX3NjaGVtYSkKICAgICAgICBpZiBub3QgY2hhbm5lbF9kZXRhaWxzWyJjaGFubmVsIl1bImxpdmUiXToKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIHN0cmVhbV9pcCA9IGh0dHAuZ2V0KFJFRElSRUNUX1NFUlZJQ0VfVVJJLmZvcm1hdChvd25lcikpLnRleHQKCiAgICAgICAgc3RyZWFtcyA9IHt9CiAgICAgICAgc3RyZWFtc1sibGl2ZSJdID0gUlRNUFN0cmVhbShzZWxmLnNlc3Npb24sIHsKPHxmaW1faG9sZXw+CiAgICAgICAgfSkKICAgICAgICByZXR1cm4gc3RyZWFtcwoKX19wbHVnaW5fXyA9IFN0cmVhbXVwQ29tCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICJydG1wIjogUlRNUF9VUkwuZm9ybWF0KHN0cmVhbV9pcCwgY2hhbm5lbF9kZXRhaWxzWyJjaGFubmVsIl1bInNsdWciXSksCiAgICAgICAgICAgICJwYWdlVXJsIjogc2VsZi51cmwsCiAgICAgICAgICAgICJzd2ZVcmwiOiB1cmxqb2luKHNlbGYudXJsLCBzd2ZfdXJsKSwKICAgICAgICAgICAgImxpdmUiOiBUcnVlCjx8ZmltX2VuZHw+"]
["94ddc7aa2115e85e3dddc56db30bf66a561c1bca-2","94ddc7aa2115e85e3dddc56db30bf66a561c1bca","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCgpmcm9tIGxpdmVzdHJlYW1lci5jb21wYXQgaW1wb3J0IHVybGpvaW4KZnJvbSBsaXZlc3RyZWFtZXIucGx1Z2luIGltcG9ydCBQbHVnaW4KZnJvbSBsaXZlc3RyZWFtZXIucGx1Z2luLmFwaSBpbXBvcnQgaHR0cCwgdmFsaWRhdGUKZnJvbSBsaXZlc3RyZWFtZXIuc3RyZWFtIGltcG9ydCBSVE1QU3RyZWFtCgpSVE1QX1VSTCA9ICJydG1wOi8vezB9L2FwcC97MX0iCkNIQU5ORUxfREVUQUlMU19VUkkgPSAiaHR0cHM6Ly9hcGkuc3RyZWFtdXAuY29tLzEuMC9jaGFubmVscy97MH0/YWNjZXNzX3Rva2VuPXsxfSIKUkVESVJFQ1RfU0VSVklDRV9VUkkgPSAiaHR0cHM6Ly9sYW5jZXIuc3RyZWFtdXAuY29tL2FwaS9yZWRpcmVjdC97MH0iCjx8ZmltX2hvbGV8PgoKX3NjaGVtYSA9IHZhbGlkYXRlLlNjaGVtYSgKICAgIHZhbGlkYXRlLnVuaW9uKHsKICAgICAgICAidmFycyI6IHZhbGlkYXRlLmFsbCgKICAgICAgICAgICAgdmFsaWRhdGUudHJhbnNmb3JtKF9mbGFzaHZhcnNfcmUuZmluZGFsbCksCiAgICAgICAgICAgIHZhbGlkYXRlLnRyYW5zZm9ybShkaWN0KSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm93bmVyIjogdmFsaWRhdGUudGV4dCwKICAgICAgICAgICAgICAgIHZhbGlkYXRlLm9wdGlvbmFsKCJ0b2tlbiIpOiB2YWxpZGF0ZS50ZXh0CiAgICAgICAgICAgIH0KICAgICAgICApLAogICAgICAgICJzd2YiOiB2YWxpZGF0ZS5hbGwoCiAgICAgICAgICAgIHZhbGlkYXRlLnRyYW5zZm9ybShfc3dmX3VybF9yZS5zZWFyY2gpLAogICAgICAgICAgICB2YWxpZGF0ZS5nZXQoInBsYXllcl91cmwiKSwKICAgICAgICAgICAgdmFsaWRhdGUuZW5kc3dpdGgoIi5zd2YiKQogICAgICAgICkKICAgIH0pCikKCl9jaGFubmVsX2RldGFpbHNfc2NoZW1hID0gdmFsaWRhdGUuU2NoZW1hKHsKICAgICJjaGFubmVsIjogewogICAgICAgICJsaXZlIjogYm9vbCwKICAgICAgICAic2x1ZyI6IHZhbGlkYXRlLnRleHQKICAgIH0KfSkKCmNsYXNzIFN0cmVhbXVwQ29tKFBsdWdpbik6CiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBjYW5faGFuZGxlX3VybChjbHMsIHVybCk6CiAgICAgICAgcmV0dXJuIF91cmxfcmUubWF0Y2godXJsKQoKICAgIGRlZiBfZ2V0X3N0cmVhbXMoc2VsZik6CiAgICAgICAgcmVzID0gaHR0cC5nZXQoc2VsZi51cmwsIHNjaGVtYT1fc2NoZW1hKQogICAgICAgIGlmIG5vdCByZXM6CiAgICAgICAgICAgIHJldHVybgogICAgICAgIG93bmVyID0gcmVzWyJ2YXJzIl1bIm93bmVyIl0KICAgICAgICB0b2tlbiA9IHJlc1sidmFycyJdLmdldCgidG9rZW4iLCAibnVsbCIpCiAgICAgICAgc3dmX3VybCA9IHJlc1sic3dmIl0KCiAgICAgICAgIyBDaGVjayBpZiB0aGUgc3RyZWFtIGlzIG9ubGluZQogICAgICAgIHJlcyA9IGh0dHAuZ2V0KENIQU5ORUxfREVUQUlMU19VUkkuZm9ybWF0KG93bmVyLCB0b2tlbikpCiAgICAgICAgY2hhbm5lbF9kZXRhaWxzID0gaHR0cC5qc29uKHJlcywgc2NoZW1hPV9jaGFubmVsX2RldGFpbHNfc2NoZW1hKQogICAgICAgIGlmIG5vdCBjaGFubmVsX2RldGFpbHNbImNoYW5uZWwiXVsibGl2ZSJdOgogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgc3RyZWFtX2lwID0gaHR0cC5nZXQoUkVESVJFQ1RfU0VSVklDRV9VUkkuZm9ybWF0KG93bmVyKSkudGV4dAoKICAgICAgICBzdHJlYW1zID0ge30KICAgICAgICBzdHJlYW1zWyJsaXZlIl0gPSBSVE1QU3RyZWFtKHNlbGYuc2Vzc2lvbiwgewogICAgICAgICAgICAicnRtcCI6IFJUTVBfVVJMLmZvcm1hdChzdHJlYW1faXAsIGNoYW5uZWxfZGV0YWlsc1siY2hhbm5lbCJdWyJzbHVnIl0pLAogICAgICAgICAgICAicGFnZVVybCI6IHNlbGYudXJsLAogICAgICAgICAgICAic3dmVXJsIjogdXJsam9pbihzZWxmLnVybCwgc3dmX3VybCksCiAgICAgICAgICAgICJsaXZlIjogVHJ1ZQogICAgICAgIH0pCiAgICAgICAgcmV0dXJuIHN0cmVhbXMKCl9fcGx1Z2luX18gPSBTdHJlYW11cENvbQo8fGZpbV9zdWZmaXh8PgoKX3VybF9yZSA9IHJlLmNvbXBpbGUoImh0dHAocyk/Oi8vKFx3K1wuKT9zdHJlYW11cC5jb20vKD9QPGNoYW5uZWw+W14vP10rKSIpCl9mbGFzaHZhcnNfcmUgPSByZS5jb21waWxlKCJmbGFzaHZhcnNcLig/UDx2YXI+XHcrKVxzPz1ccz8nKD9QPHZhbHVlPlteJ10rKSc7IikKX3N3Zl91cmxfcmUgPSByZS5jb21waWxlKCJzd2ZvYmplY3QuZW1iZWRTV0ZcKFxzKlwiKD9QPHBsYXllcl91cmw+W15cIl0rKVwiLCIpCjx8ZmltX2VuZHw+"]
["94ddc7aa2115e85e3dddc56db30bf66a561c1bca-3","94ddc7aa2115e85e3dddc56db30bf66a561c1bca","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCgpmcm9tIGxpdmVzdHJlYW1lci5jb21wYXQgaW1wb3J0IHVybGpvaW4KZnJvbSBsaXZlc3RyZWFtZXIucGx1Z2luIGltcG9ydCBQbHVnaW4KZnJvbSBsaXZlc3RyZWFtZXIucGx1Z2luLmFwaSBpbXBvcnQgaHR0cCwgdmFsaWRhdGUKZnJvbSBsaXZlc3RyZWFtZXIuc3RyZWFtIGltcG9ydCBSVE1QU3RyZWFtCgpSVE1QX1VSTCA9ICJydG1wOi8vezB9L2FwcC97MX0iCkNIQU5ORUxfREVUQUlMU19VUkkgPSAiaHR0cHM6Ly9hcGkuc3RyZWFtdXAuY29tLzEuMC9jaGFubmVscy97MH0/YWNjZXNzX3Rva2VuPXsxfSIKUkVESVJFQ1RfU0VSVklDRV9VUkkgPSAiaHR0cHM6Ly9sYW5jZXIuc3RyZWFtdXAuY29tL2FwaS9yZWRpcmVjdC97MH0iCgpfdXJsX3JlID0gcmUuY29tcGlsZSgiaHR0cChzKT86Ly8oXHcrXC4pP3N0cmVhbXVwLmNvbS8oP1A8Y2hhbm5lbD5bXi8/XSspIikKX2ZsYXNodmFyc19yZSA9IHJlLmNvbXBpbGUoImZsYXNodmFyc1wuKD9QPHZhcj5cdyspXHM/PVxzPycoP1A8dmFsdWU+W14nXSspJzsiKQpfc3dmX3VybF9yZSA9IHJlLmNvbXBpbGUoInN3Zm9iamVjdC5lbWJlZFNXRlwoXHMqXCIoP1A8cGxheWVyX3VybD5bXlwiXSspXCIsIikKCl9zY2hlbWEgPSB2YWxpZGF0ZS5TY2hlbWEoCiAgICB2YWxpZGF0ZS51bmlvbih7CiAgICAgICAgInZhcnMiOiB2YWxpZGF0ZS5hbGwoCiAgICAgICAgICAgIHZhbGlkYXRlLnRyYW5zZm9ybShfZmxhc2h2YXJzX3JlLmZpbmRhbGwpLAogICAgICAgICAgICB2YWxpZGF0ZS50cmFuc2Zvcm0oZGljdCksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJvd25lciI6IHZhbGlkYXRlLnRleHQsCiAgICAgICAgICAgICAgICB2YWxpZGF0ZS5vcHRpb25hbCgidG9rZW4iKTogdmFsaWRhdGUudGV4dAogICAgICAgICAgICB9CiAgICAgICAgKSwKICAgICAgICAic3dmIjogdmFsaWRhdGUuYWxsKAogICAgICAgICAgICB2YWxpZGF0ZS50cmFuc2Zvcm0oX3N3Zl91cmxfcmUuc2VhcmNoKSwKICAgICAgICAgICAgdmFsaWRhdGUuZ2V0KCJwbGF5ZXJfdXJsIiksCiAgICAgICAgICAgIHZhbGlkYXRlLmVuZHN3aXRoKCIuc3dmIikKICAgICAgICApCiAgICB9KQopCgpfY2hhbm5lbF9kZXRhaWxzX3NjaGVtYSA9IHZhbGlkYXRlLlNjaGVtYSh7CiAgICAiY2hhbm5lbCI6IHsKICAgICAgICAibGl2ZSI6IGJvb2wsCiAgICAgICAgInNsdWciOiB2YWxpZGF0ZS50ZXh0CiAgICB9Cn0pCgpjbGFzcyBTdHJlYW11cENvbShQbHVnaW4pOgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgY2FuX2hhbmRsZV91cmwoY2xzLCB1cmwpOgogICAgICAgIHJldHVybiBfdXJsX3JlLm1hdGNoKHVybCkKCiAgICBkZWYgX2dldF9zdHJlYW1zKHNlbGYpOgogICAgICAgIHJlcyA9IGh0dHAuZ2V0KHNlbGYudXJsLCBzY2hlbWE9X3NjaGVtYSkKICAgICAgICBpZiBub3QgcmVzOgogICAgICAgICAgICByZXR1cm4KICAgICAgICBvd25lciA9IHJlc1sidmFycyJdWyJvd25lciJdCiAgICAgICAgdG9rZW4gPSByZXNbInZhcnMiXS5nZXQoInRva2VuIiwgIm51bGwiKQogICAgICAgIHN3Zl91cmwgPSByZXNbInN3ZiJdCgogICAgICAgICMgQ2hlY2sgaWYgdGhlIHN0cmVhbSBpcyBvbmxpbmUKICAgICAgICByZXMgPSBodHRwLmdldChDSEFOTkVMX0RFVEFJTFNfVVJJLmZvcm1hdChvd25lciwgdG9rZW4pKQogICAgICAgIGNoYW5uZWxfZGV0YWlscyA9IGh0dHAuanNvbihyZXMsIHNjaGVtYT1fY2hhbm5lbF9kZXRhaWxzX3NjaGVtYSkKICAgICAgICBpZiBub3QgY2hhbm5lbF9kZXRhaWxzWyJjaGFubmVsIl1bImxpdmUiXToKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIHN0cmVhbV9pcCA9IGh0dHAuZ2V0KFJFRElSRUNUX1NFUlZJQ0VfVVJJLmZvcm1hdChvd25lcikpLnRleHQKCiAgICAgICAgc3RyZWFtcyA9IHt9CiAgICAgICAgc3RyZWFtc1sibGl2ZSJdID0gUlRNUFN0cmVhbShzZWxmLnNlc3Npb24sIHsKICAgICAgICAgICAgInJ0bXAiOiBSVE1QX1VSTC5mb3JtYXQoc3RyZWFtX2lwLCBjaGFubmVsX2RldGFpbHNbImNoYW5uZWwiXVsic2x1ZyJdKSwKICAgICAgICAgICAgInBhZ2VVcmwiOiBzZWxmLnVybCwKICAgICAgICAgICAgInN3ZlVybCI6IHVybGpvaW4oc2VsZi51cmwsIHN3Zl91cmwpLAogICAgICAgICAgICAibGl2ZSI6IFRydWUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIH0pCiAgICAgICAgcmV0dXJuIHN0cmVhbXMKCjx8ZmltX2VuZHw+"]
["94ddc7aa2115e85e3dddc56db30bf66a561c1bca-4","94ddc7aa2115e85e3dddc56db30bf66a561c1bca","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCgpmcm9tIGxpdmVzdHJlYW1lci5jb21wYXQgaW1wb3J0IHVybGpvaW4KPHxmaW1faG9sZXw+ClJUTVBfVVJMID0gInJ0bXA6Ly97MH0vYXBwL3sxfSIKQ0hBTk5FTF9ERVRBSUxTX1VSSSA9ICJodHRwczovL2FwaS5zdHJlYW11cC5jb20vMS4wL2NoYW5uZWxzL3swfT9hY2Nlc3NfdG9rZW49ezF9IgpSRURJUkVDVF9TRVJWSUNFX1VSSSA9ICJodHRwczovL2xhbmNlci5zdHJlYW11cC5jb20vYXBpL3JlZGlyZWN0L3swfSIKCl91cmxfcmUgPSByZS5jb21waWxlKCJodHRwKHMpPzovLyhcdytcLik/c3RyZWFtdXAuY29tLyg/UDxjaGFubmVsPlteLz9dKykiKQpfZmxhc2h2YXJzX3JlID0gcmUuY29tcGlsZSgiZmxhc2h2YXJzXC4oP1A8dmFyPlx3Kylccz89XHM/Jyg/UDx2YWx1ZT5bXiddKyknOyIpCl9zd2ZfdXJsX3JlID0gcmUuY29tcGlsZSgic3dmb2JqZWN0LmVtYmVkU1dGXChccypcIig/UDxwbGF5ZXJfdXJsPlteXCJdKylcIiwiKQoKX3NjaGVtYSA9IHZhbGlkYXRlLlNjaGVtYSgKICAgIHZhbGlkYXRlLnVuaW9uKHsKICAgICAgICAidmFycyI6IHZhbGlkYXRlLmFsbCgKICAgICAgICAgICAgdmFsaWRhdGUudHJhbnNmb3JtKF9mbGFzaHZhcnNfcmUuZmluZGFsbCksCiAgICAgICAgICAgIHZhbGlkYXRlLnRyYW5zZm9ybShkaWN0KSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm93bmVyIjogdmFsaWRhdGUudGV4dCwKICAgICAgICAgICAgICAgIHZhbGlkYXRlLm9wdGlvbmFsKCJ0b2tlbiIpOiB2YWxpZGF0ZS50ZXh0CiAgICAgICAgICAgIH0KICAgICAgICApLAogICAgICAgICJzd2YiOiB2YWxpZGF0ZS5hbGwoCiAgICAgICAgICAgIHZhbGlkYXRlLnRyYW5zZm9ybShfc3dmX3VybF9yZS5zZWFyY2gpLAogICAgICAgICAgICB2YWxpZGF0ZS5nZXQoInBsYXllcl91cmwiKSwKICAgICAgICAgICAgdmFsaWRhdGUuZW5kc3dpdGgoIi5zd2YiKQogICAgICAgICkKICAgIH0pCikKCl9jaGFubmVsX2RldGFpbHNfc2NoZW1hID0gdmFsaWRhdGUuU2NoZW1hKHsKICAgICJjaGFubmVsIjogewogICAgICAgICJsaXZlIjogYm9vbCwKICAgICAgICAic2x1ZyI6IHZhbGlkYXRlLnRleHQKICAgIH0KfSkKCmNsYXNzIFN0cmVhbXVwQ29tKFBsdWdpbik6CiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBjYW5faGFuZGxlX3VybChjbHMsIHVybCk6CiAgICAgICAgcmV0dXJuIF91cmxfcmUubWF0Y2godXJsKQoKICAgIGRlZiBfZ2V0X3N0cmVhbXMoc2VsZik6CiAgICAgICAgcmVzID0gaHR0cC5nZXQoc2VsZi51cmwsIHNjaGVtYT1fc2NoZW1hKQogICAgICAgIGlmIG5vdCByZXM6CiAgICAgICAgICAgIHJldHVybgogICAgICAgIG93bmVyID0gcmVzWyJ2YXJzIl1bIm93bmVyIl0KICAgICAgICB0b2tlbiA9IHJlc1sidmFycyJdLmdldCgidG9rZW4iLCAibnVsbCIpCiAgICAgICAgc3dmX3VybCA9IHJlc1sic3dmIl0KCiAgICAgICAgIyBDaGVjayBpZiB0aGUgc3RyZWFtIGlzIG9ubGluZQogICAgICAgIHJlcyA9IGh0dHAuZ2V0KENIQU5ORUxfREVUQUlMU19VUkkuZm9ybWF0KG93bmVyLCB0b2tlbikpCiAgICAgICAgY2hhbm5lbF9kZXRhaWxzID0gaHR0cC5qc29uKHJlcywgc2NoZW1hPV9jaGFubmVsX2RldGFpbHNfc2NoZW1hKQogICAgICAgIGlmIG5vdCBjaGFubmVsX2RldGFpbHNbImNoYW5uZWwiXVsibGl2ZSJdOgogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgc3RyZWFtX2lwID0gaHR0cC5nZXQoUkVESVJFQ1RfU0VSVklDRV9VUkkuZm9ybWF0KG93bmVyKSkudGV4dAoKICAgICAgICBzdHJlYW1zID0ge30KICAgICAgICBzdHJlYW1zWyJsaXZlIl0gPSBSVE1QU3RyZWFtKHNlbGYuc2Vzc2lvbiwgewogICAgICAgICAgICAicnRtcCI6IFJUTVBfVVJMLmZvcm1hdChzdHJlYW1faXAsIGNoYW5uZWxfZGV0YWlsc1siY2hhbm5lbCJdWyJzbHVnIl0pLAogICAgICAgICAgICAicGFnZVVybCI6IHNlbGYudXJsLAogICAgICAgICAgICAic3dmVXJsIjogdXJsam9pbihzZWxmLnVybCwgc3dmX3VybCksCiAgICAgICAgICAgICJsaXZlIjogVHJ1ZQogICAgICAgIH0pCiAgICAgICAgcmV0dXJuIHN0cmVhbXMKCl9fcGx1Z2luX18gPSBTdHJlYW11cENvbQo8fGZpbV9zdWZmaXh8Pgpmcm9tIGxpdmVzdHJlYW1lci5wbHVnaW4gaW1wb3J0IFBsdWdpbgpmcm9tIGxpdmVzdHJlYW1lci5wbHVnaW4uYXBpIGltcG9ydCBodHRwLCB2YWxpZGF0ZQpmcm9tIGxpdmVzdHJlYW1lci5zdHJlYW0gaW1wb3J0IFJUTVBTdHJlYW0KCjx8ZmltX2VuZHw+"]
["94ddc7aa2115e85e3dddc56db30bf66a561c1bca-5","94ddc7aa2115e85e3dddc56db30bf66a561c1bca","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCjx8ZmltX2hvbGV8Pgpmcm9tIGxpdmVzdHJlYW1lci5zdHJlYW0gaW1wb3J0IFJUTVBTdHJlYW0KClJUTVBfVVJMID0gInJ0bXA6Ly97MH0vYXBwL3sxfSIKQ0hBTk5FTF9ERVRBSUxTX1VSSSA9ICJodHRwczovL2FwaS5zdHJlYW11cC5jb20vMS4wL2NoYW5uZWxzL3swfT9hY2Nlc3NfdG9rZW49ezF9IgpSRURJUkVDVF9TRVJWSUNFX1VSSSA9ICJodHRwczovL2xhbmNlci5zdHJlYW11cC5jb20vYXBpL3JlZGlyZWN0L3swfSIKCl91cmxfcmUgPSByZS5jb21waWxlKCJodHRwKHMpPzovLyhcdytcLik/c3RyZWFtdXAuY29tLyg/UDxjaGFubmVsPlteLz9dKykiKQpfZmxhc2h2YXJzX3JlID0gcmUuY29tcGlsZSgiZmxhc2h2YXJzXC4oP1A8dmFyPlx3Kylccz89XHM/Jyg/UDx2YWx1ZT5bXiddKyknOyIpCl9zd2ZfdXJsX3JlID0gcmUuY29tcGlsZSgic3dmb2JqZWN0LmVtYmVkU1dGXChccypcIig/UDxwbGF5ZXJfdXJsPlteXCJdKylcIiwiKQoKX3NjaGVtYSA9IHZhbGlkYXRlLlNjaGVtYSgKICAgIHZhbGlkYXRlLnVuaW9uKHsKICAgICAgICAidmFycyI6IHZhbGlkYXRlLmFsbCgKICAgICAgICAgICAgdmFsaWRhdGUudHJhbnNmb3JtKF9mbGFzaHZhcnNfcmUuZmluZGFsbCksCiAgICAgICAgICAgIHZhbGlkYXRlLnRyYW5zZm9ybShkaWN0KSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm93bmVyIjogdmFsaWRhdGUudGV4dCwKICAgICAgICAgICAgICAgIHZhbGlkYXRlLm9wdGlvbmFsKCJ0b2tlbiIpOiB2YWxpZGF0ZS50ZXh0CiAgICAgICAgICAgIH0KICAgICAgICApLAogICAgICAgICJzd2YiOiB2YWxpZGF0ZS5hbGwoCiAgICAgICAgICAgIHZhbGlkYXRlLnRyYW5zZm9ybShfc3dmX3VybF9yZS5zZWFyY2gpLAogICAgICAgICAgICB2YWxpZGF0ZS5nZXQoInBsYXllcl91cmwiKSwKICAgICAgICAgICAgdmFsaWRhdGUuZW5kc3dpdGgoIi5zd2YiKQogICAgICAgICkKICAgIH0pCikKCl9jaGFubmVsX2RldGFpbHNfc2NoZW1hID0gdmFsaWRhdGUuU2NoZW1hKHsKICAgICJjaGFubmVsIjogewogICAgICAgICJsaXZlIjogYm9vbCwKICAgICAgICAic2x1ZyI6IHZhbGlkYXRlLnRleHQKICAgIH0KfSkKCmNsYXNzIFN0cmVhbXVwQ29tKFBsdWdpbik6CiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBjYW5faGFuZGxlX3VybChjbHMsIHVybCk6CiAgICAgICAgcmV0dXJuIF91cmxfcmUubWF0Y2godXJsKQoKICAgIGRlZiBfZ2V0X3N0cmVhbXMoc2VsZik6CiAgICAgICAgcmVzID0gaHR0cC5nZXQoc2VsZi51cmwsIHNjaGVtYT1fc2NoZW1hKQogICAgICAgIGlmIG5vdCByZXM6CiAgICAgICAgICAgIHJldHVybgogICAgICAgIG93bmVyID0gcmVzWyJ2YXJzIl1bIm93bmVyIl0KICAgICAgICB0b2tlbiA9IHJlc1sidmFycyJdLmdldCgidG9rZW4iLCAibnVsbCIpCiAgICAgICAgc3dmX3VybCA9IHJlc1sic3dmIl0KCiAgICAgICAgIyBDaGVjayBpZiB0aGUgc3RyZWFtIGlzIG9ubGluZQogICAgICAgIHJlcyA9IGh0dHAuZ2V0KENIQU5ORUxfREVUQUlMU19VUkkuZm9ybWF0KG93bmVyLCB0b2tlbikpCiAgICAgICAgY2hhbm5lbF9kZXRhaWxzID0gaHR0cC5qc29uKHJlcywgc2NoZW1hPV9jaGFubmVsX2RldGFpbHNfc2NoZW1hKQogICAgICAgIGlmIG5vdCBjaGFubmVsX2RldGFpbHNbImNoYW5uZWwiXVsibGl2ZSJdOgogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgc3RyZWFtX2lwID0gaHR0cC5nZXQoUkVESVJFQ1RfU0VSVklDRV9VUkkuZm9ybWF0KG93bmVyKSkudGV4dAoKICAgICAgICBzdHJlYW1zID0ge30KICAgICAgICBzdHJlYW1zWyJsaXZlIl0gPSBSVE1QU3RyZWFtKHNlbGYuc2Vzc2lvbiwgewogICAgICAgICAgICAicnRtcCI6IFJUTVBfVVJMLmZvcm1hdChzdHJlYW1faXAsIGNoYW5uZWxfZGV0YWlsc1siY2hhbm5lbCJdWyJzbHVnIl0pLAogICAgICAgICAgICAicGFnZVVybCI6IHNlbGYudXJsLAogICAgICAgICAgICAic3dmVXJsIjogdXJsam9pbihzZWxmLnVybCwgc3dmX3VybCksCiAgICAgICAgICAgICJsaXZlIjogVHJ1ZQogICAgICAgIH0pCiAgICAgICAgcmV0dXJuIHN0cmVhbXMKCl9fcGx1Z2luX18gPSBTdHJlYW11cENvbQo8fGZpbV9zdWZmaXh8PgoKZnJvbSBsaXZlc3RyZWFtZXIuY29tcGF0IGltcG9ydCB1cmxqb2luCmZyb20gbGl2ZXN0cmVhbWVyLnBsdWdpbiBpbXBvcnQgUGx1Z2luCmZyb20gbGl2ZXN0cmVhbWVyLnBsdWdpbi5hcGkgaW1wb3J0IGh0dHAsIHZhbGlkYXRlCjx8ZmltX2VuZHw+"]
["01a7b1603cd5eabaf90080359c59e3e3d7a5c744-1","01a7b1603cd5eabaf90080359c59e3e3d7a5c744","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGdsb2IKaW1wb3J0IG9zCmltcG9ydCBzeXMKaW1wb3J0IHRlbXBmaWxlCmltcG9ydCBzaHV0aWwKCmltcG9ydCBweXRlc3QKCmZyb20gZGVicGFja2FnZXIgaW1wb3J0IG1haW4KCgpAcHl0ZXN0Lm1hcmsuaW50ZWdyYXRpb24KY2xhc3MgVGVzdE1haW4ob2JqZWN0KToKCiAgICBkZWYgc2V0dXBfbWV0aG9kKHNlbGYsIG1ldGhvZCk6CiAgICAgICAgc2VsZi50bXBfZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCgogICAgICAgIG9zLm1ha2VkaXJzKHNlbGYudG1wX2RpciArICcvJyArICdmb2xkZXJBJykKICAgICAgICBvcy5tYWtlZGlycyhzZWxmLnRtcF9kaXIgKyAnLycgKyAnZm9sZGVyQicpCiAgICAgICAgb3MubWFrZWRpcnMoc2VsZi50bXBfZGlyICsgJy8nICsgJ2RlYmlhbicpCiAgICAgICAgd2l0aCBvcGVuKHNlbGYudG1wX2RpciArICcvJyArICdwcm9qZWN0Lmpzb24nLCAndycpIGFzIGY6CiAgICAgICAgICAgIHByb2plY3RfY29uZiA9ICcnJ3sKICAgICAgICAgICAgICAgICAgInZlcnNpb24iOiAiMC4xLjAiLAogICAgICAgICAgICAgICAgICAidHlwZSI6ICJnZW5lcmFsIiwKICAgICAgICAgICAiZGViaWFucyI6IFt7Im5hbWUiOiJ0ZXN0LXByb2oiLCAiaW5zdGFsbF9wYXRoIjogIi9vcHQvdGVzdC1wcm9qIn1dLAogICAgICAgICAgICAgICAgICAiZGViX2RlcGVuZGVuY2llcyIgOiBbXSwKICAgICAgICAgICAgICAgICAgImV4Y2x1ZGVzIiA6IFtdCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAnJycKICAgICAgICAgICAgZi53cml0ZShwcm9qZWN0X2NvbmYpCiAgICAgICAgb3MuY2hkaXIoc2VsZi50bXBfZGlyKQoKICAgIGRlZiB0ZWFyZG93bl9tZXRob2Qoc2VsZiwgbWV0aG9kKToKICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYudG1wX2RpcikKCiAgICBkZWYgdGVzdF9nZW5lcmF0ZShzZWxmKToKICAgICAgICBzeXMuYXJndiA9IFsnJywgJ2dlbmVyYXRlJywgJy1wJywgc2VsZi50bXBfZGlyXQogICAgICAgIHRyeToKICAgICAgICAgICAgbWFpbi5tYWluKCkKICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCBhcyBleHA6CiAgICAgICAgICAgIGFzc2VydCBleHAuY29kZSA9PSAwCiAgICAgICAgICAgIGFzc2VydCBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHNlbGYudG1wX2RpciwgJyouZGViJykpID09IFtdCiAgICAgICAgICAgIGFzc2VydCBvcy5saXN0ZGlyKG9zLnBhdGguam9pbihzZWxmLnRtcF9kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGViX2J1aWxkX3Rlc3QtcHJvaicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGViaWFuJykpICE9IFtdCgogICAgZGVmIHRlc3RfYnVpbGRfZnJvbV9nZW5lcmF0ZShzZWxmKToKICAgICAgICBzeXMuYXJndiA9IFsnJywgJ2dlbmVyYXRlJywgJy1wJywgc2VsZi50bXBfZGlyXQogICAgICAgIHRyeToKICAgICAgICAgICAgbWFpbi5tYWluKCkKICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCBhcyBleHA6CiAgICAgICAgICAgIGFzc2VydCBleHAuY29kZSA9PSAwCgogICAgICAgIHN5cy5hcmd2ID0gWycnLCAnYnVpbGQnLCAnLXAnLCBzZWxmLnRtcF9kaXJdCiAgICAgICAgdHJ5OgogICAgICAgICAgICBtYWluLm1haW4oKQogICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0IGFzIGV4cDoKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlYl9idWlsZF90ZXN0LXByb2onKSkgaXMgRmFsc2UKCiAgICBkZWYgdGVzdF9idWlsZF9mcm9tX2dlbmVyYXRlX3VuY2xlYW4oc2VsZik6CiAgICAgICAgc3lzLmFyZ3YgPSBbJycsICdnZW5lcmF0ZScsICctcCcsIHNlbGYudG1wX2Rpcl0KICAgICAgICB0cnk6CiAgICAgICAgICAgIG1haW4ubWFpbigpCiAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQgYXMgZXhwOgogICAgICAgICAgICBhc3NlcnQgZXhwLmNvZGUgPT0gMAoKICAgICAgICBzeXMuYXJndiA9IFsnJywgJ2J1aWxkJywgJy1wJywgc2VsZi50bXBfZGlyLCAnLS1uby1jbGVhbiddCiAgICAgICAgdHJ5OgogICAgICAgICAgICBtYWluLm1haW4oKQogICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0IGFzIGV4cDoKICAgICAgICAgICAgYXNzZXJ0IGV4cC5jb2RlID09IDAKICAgICAgICAgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLnRtcF9kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QtcHJval8wLjEuMF9hbGwuZGViJykpCiAgICAgICAgICAgIGFzc2VydCBvcy5saXN0ZGlyKG9zLnBhdGguam9pbihzZWxmLnRtcF9kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGViX2J1aWxkX3Rlc3QtcHJvaicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGViaWFuJykpICE9IFtdCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGFzc2VydCBleHAuY29kZSA9PSAwCiAgICAgICAgICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi50bXBfZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0LXByb2pfMC4xLjBfYWxsLmRlYicpKQogICAgICAgICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYudG1wX2RpciwKPHxmaW1fZW5kfD4="]
["6bdcd57f6d00e0c3c629a3d7f2f33eb6b0c4608d-1","6bdcd57f6d00e0c3c629a3d7f2f33eb6b0c4608d","PHxmaW1fcHJlZml4fD4KIyBWb2xhdGlsaXR5CiMKIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBWb2xhdGlsaXR5LgojCiMgVm9sYXRpbGl0eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBWb2xhdGlsaXR5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIwojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCBWb2xhdGlsaXR5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojCgoiIiIKQGF1dGhvcjogICAgICAgSm9lIFN5bHZlCkBsaWNlbnNlOiAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIDIuMApAY29udGFjdDogICAgICBqb2Uuc3lsdmVAZ21haWwuY29tCkBvcmdhbml6YXRpb246IERpZ2l0YWwgRm9yZW5zaWNzIFNvbHV0aW9ucwoiIiIKCmltcG9ydCB2b2xhdGlsaXR5LnBsdWdpbnMubGludXguY29tbW9uIGFzIGxpbnV4X2NvbW1vbgpmcm9tIHZvbGF0aWxpdHkucGx1Z2lucy5saW51eC5zbGFiX2luZm8gaW1wb3J0IGxpbnV4X3NsYWJpbmZvCmltcG9ydCB2b2xhdGlsaXR5LnBsdWdpbnMubGludXgucHNsaXN0IGFzIGxpbnV4X3BzbGlzdAoKY2xhc3MgbGludXhfcHNsaXN0X2NhY2hlKGxpbnV4X3BzbGlzdC5saW51eF9wc2xpc3QpOgogICAgIiIiR2F0aGVyIHRhc2tzIGZyb20gdGhlIGttZW1fY2FjaGUiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIGxpbnV4X3BzbGlzdC5saW51eF9wc2xpc3QuX19pbml0X18oc2VsZiwgY29uZmlnLCAqYXJncywgKiprd2FyZ3MpCiAgICAgICAgc2VsZi5fY29uZmlnLmFkZF9vcHRpb24oJ1VOQUxMT0NBVEVEJywgc2hvcnRfb3B0aW9uID0gJ3UnLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHAgPSAnU2hvdyB1bmFsbG9jYXRlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICdzdG9yZV90cnVlJykKCiAgICBkZWYgY2FsY3VsYXRlKHNlbGYpOgogICAgICAgIGxpbnV4X2NvbW1vbi5zZXRfcGx1Z2luX21lbWJlcnMoc2VsZikKICAgICAgICBwaWRsaXN0ID0gc2VsZi5fY29uZmlnLlBJRAogICAgICAgIGlmIHBpZGxpc3Q6CiAgICAgICAgICAgIHBpZGxpc3QgPSBbaW50KHApIGZvciBwIGluIHNlbGYuX2NvbmZpZy5QSUQuc3BsaXQoJywnKV0KCiAgICAgICAgY2FjaGUgPSBsaW51eF9zbGFiaW5mbyhzZWxmLl9jb25maWcpLmdldF9rbWVtX2NhY2hlKCJ0YXNrX3N0cnVjdCIsIHNlbGYuX2NvbmZpZy5VTkFMTE9DQVRFRCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICAgICBmb3IgdGFzayBpbiBjYWNoZToKICAgICAgICAgICAgaWYgbm90IHBpZGxpc3Qgb3IgdGFzay5waWQgaW4gcGlkbGlzdDoKICAgICAgICAgICAgICAgIHlpZWxkIHRhc2sKPHxmaW1fZW5kfD4="]
["6bdcd57f6d00e0c3c629a3d7f2f33eb6b0c4608d-2","6bdcd57f6d00e0c3c629a3d7f2f33eb6b0c4608d","PHxmaW1fcHJlZml4fD4KIyBWb2xhdGlsaXR5CiMKIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBWb2xhdGlsaXR5LgojCiMgVm9sYXRpbGl0eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBWb2xhdGlsaXR5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIwojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCBWb2xhdGlsaXR5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiIiIgpAYXV0aG9yOiAgICAgICBKb2UgU3lsdmUKQGxpY2Vuc2U6ICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgMi4wCkBjb250YWN0OiAgICAgIGpvZS5zeWx2ZUBnbWFpbC5jb20KPHxmaW1fZW5kfD4="]
["6bdcd57f6d00e0c3c629a3d7f2f33eb6b0c4608d-3","6bdcd57f6d00e0c3c629a3d7f2f33eb6b0c4608d","PHxmaW1fcHJlZml4fD4KIyBWb2xhdGlsaXR5CiMKIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBWb2xhdGlsaXR5LgojCiMgVm9sYXRpbGl0eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBWb2xhdGlsaXR5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIwojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCBWb2xhdGlsaXR5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojCgoiIiIKQGF1dGhvcjogICAgICAgSm9lIFN5bHZlCkBsaWNlbnNlOiAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIDIuMApAY29udGFjdDogICAgICBqb2Uuc3lsdmVAZ21haWwuY29tCkBvcmdhbml6YXRpb246IERpZ2l0YWwgRm9yZW5zaWNzIFNvbHV0aW9ucwoiIiIKCmltcG9ydCB2b2xhdGlsaXR5LnBsdWdpbnMubGludXguY29tbW9uIGFzIGxpbnV4X2NvbW1vbgpmcm9tIHZvbGF0aWxpdHkucGx1Z2lucy5saW51eC5zbGFiX2luZm8gaW1wb3J0IGxpbnV4X3NsYWJpbmZvCmltcG9ydCB2b2xhdGlsaXR5LnBsdWdpbnMubGludXgucHNsaXN0IGFzIGxpbnV4X3BzbGlzdAoKY2xhc3MgbGludXhfcHNsaXN0X2NhY2hlKGxpbnV4X3BzbGlzdC5saW51eF9wc2xpc3QpOgogICAgIiIiR2F0aGVyIHRhc2tzIGZyb20gdGhlIGttZW1fY2FjaGUiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnLCAqYXJncywgKiprd2FyZ3MpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgbGludXhfcHNsaXN0LmxpbnV4X3BzbGlzdC5fX2luaXRfXyhzZWxmLCBjb25maWcsICphcmdzLCAqKmt3YXJncykKICAgICAgICBzZWxmLl9jb25maWcuYWRkX29wdGlvbignVU5BTExPQ0FURUQnLCBzaG9ydF9vcHRpb24gPSAndScsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBGYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgaGVscCA9ICdTaG93IHVuYWxsb2NhdGVkJywKPHxmaW1fZW5kfD4="]
["d4754626c0c723afbc48e121575e00e5e43ffbb8-1","d4754626c0c723afbc48e121575e00e5e43ffbb8","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMgojIENvcHlyaWdodCAyMDE2IFRoZSBGb250IEJha2VyeSBBdXRob3JzCiMgQ29weXJpZ2h0IDIwMTcgVGhlIEdvb2dsZSBGb250cyBUb29scyBBdXRob3JzLgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cjx8ZmltX2VuZHw+"]
["d4754626c0c723afbc48e121575e00e5e43ffbb8-2","d4754626c0c723afbc48e121575e00e5e43ffbb8","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMgojIENvcHlyaWdodCAyMDE2IFRoZSBGb250IEJha2VyeSBBdXRob3JzCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBDb3B5cmlnaHQgMjAxNyBUaGUgR29vZ2xlIEZvbnRzIFRvb2xzIEF1dGhvcnMuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCjx8ZmltX2VuZHw+"]
["d4754626c0c723afbc48e121575e00e5e43ffbb8-3","d4754626c0c723afbc48e121575e00e5e43ffbb8","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMgojIENvcHlyaWdodCAyMDE2IFRoZSBGb250IEJha2VyeSBBdXRob3JzCiMgQ29weXJpZ2h0IDIwMTcgVGhlIEdvb2dsZSBGb250cyBUb29scyBBdXRob3JzLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgZ2x5cGhzTGliCgpwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nUmVwb3J0IGlzc3VlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBvbiAuZ2x5cGhzIGZvbnQgZmlsZXMnKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCdmb250JywgbmFyZ3M9IisiKQojcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1hdXRvZml4JywgZGVmYXVsdD1GYWxzZSwKIyAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nQXBwbHkgYXV0b2ZpeCcpCgpkZWYgY3VzdG9tcGFyYW0oZGF0YSwgbmFtZSk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICBmb3IgcGFyYW0gaW4gZGF0YVsnY3VzdG9tUGFyYW1ldGVycyddOgogICAgaWYgcGFyYW1bJ25hbWUnXSA9PSBuYW1lOgogICAgICByZXR1cm4gcGFyYW1bJ3ZhbHVlJ10KCjx8ZmltX2VuZHw+"]
["d4754626c0c723afbc48e121575e00e5e43ffbb8-4","d4754626c0c723afbc48e121575e00e5e43ffbb8","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMgojIENvcHlyaWdodCAyMDE2IFRoZSBGb250IEJha2VyeSBBdXRob3JzCiMgQ29weXJpZ2h0IDIwMTcgVGhlIEdvb2dsZSBGb250cyBUb29scyBBdXRob3JzLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgZ2x5cGhzTGliCgpwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nUmVwb3J0IGlzc3VlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBvbiAuZ2x5cGhzIGZvbnQgZmlsZXMnKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCdmb250JywgbmFyZ3M9IisiKQojcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1hdXRvZml4JywgZGVmYXVsdD1GYWxzZSwKIyAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nQXBwbHkgYXV0b2ZpeCcpCgpkZWYgY3VzdG9tcGFyYW0oZGF0YSwgbmFtZSk6CiAgZm9yIHBhcmFtIGluIGRhdGFbJ2N1c3RvbVBhcmFtZXRlcnMnXToKICAgIGlmIHBhcmFtWyduYW1lJ10gPT0gbmFtZToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICByZXR1cm4gcGFyYW1bJ3ZhbHVlJ10KCgo8fGZpbV9lbmR8Pg=="]
["c1914606553cac71289b80d1fdcf38ddf8bd5878-1","c1914606553cac71289b80d1fdcf38ddf8bd5878","PHxmaW1fcHJlZml4fD4KY2xhc3MgU29sdXRpb246Cjx8ZmltX2hvbGV8PgogICAgICAgIHJldHVybiAnJwogICAgICAgIAo8fGZpbV9zdWZmaXh8PgogICAgZGVmIGxhcmdlc3RUaW1lRnJvbURpZ2l0cyhzZWxmLCBBOiBMaXN0W2ludF0pIC0+IHN0cjoKICAgICAgICBmb3IgcCBpbiBpdGVydG9vbHMucGVybXV0YXRpb25zKHNvcnRlZChBLCByZXZlcnNlPVRydWUpKToKICAgICAgICAgICAgaWYgcFswXSAqIDEwICsgcFsxXSA8IDI0IGFuZCBwWzJdIDwgNjoKICAgICAgICAgICAgICAgIHJldHVybiBmIntwWzBdfXtwWzFdfTp7cFsyXX17cFszXX0iCjx8ZmltX2VuZHw+"]
["c1914606553cac71289b80d1fdcf38ddf8bd5878-2","c1914606553cac71289b80d1fdcf38ddf8bd5878","PHxmaW1fcHJlZml4fD4KY2xhc3MgU29sdXRpb246CiAgICBkZWYgbGFyZ2VzdFRpbWVGcm9tRGlnaXRzKHNlbGYsIEE6IExpc3RbaW50XSkgLT4gc3RyOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZm9yIHAgaW4gaXRlcnRvb2xzLnBlcm11dGF0aW9ucyhzb3J0ZWQoQSwgcmV2ZXJzZT1UcnVlKSk6CiAgICAgICAgICAgIGlmIHBbMF0gKiAxMCArIHBbMV0gPCAyNCBhbmQgcFsyXSA8IDY6CiAgICAgICAgICAgICAgICByZXR1cm4gZiJ7cFswXX17cFsxXX06e3BbMl19e3BbM119IgogICAgICAgIHJldHVybiAnJwo8fGZpbV9lbmR8Pg=="]
["c1914606553cac71289b80d1fdcf38ddf8bd5878-3","c1914606553cac71289b80d1fdcf38ddf8bd5878","PHxmaW1fcHJlZml4fD4KY2xhc3MgU29sdXRpb246CiAgICBkZWYgbGFyZ2VzdFRpbWVGcm9tRGlnaXRzKHNlbGYsIEE6IExpc3RbaW50XSkgLT4gc3RyOgogICAgICAgIGZvciBwIGluIGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMoc29ydGVkKEEsIHJldmVyc2U9VHJ1ZSkpOgo8fGZpbV9ob2xlfD4KICAgICAgICByZXR1cm4gJycKICAgICAgICAKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgaWYgcFswXSAqIDEwICsgcFsxXSA8IDI0IGFuZCBwWzJdIDwgNjoKICAgICAgICAgICAgICAgIHJldHVybiBmIntwWzBdfXtwWzFdfTp7cFsyXX17cFszXX0iCjx8ZmltX2VuZHw+"]
["c1914606553cac71289b80d1fdcf38ddf8bd5878-4","c1914606553cac71289b80d1fdcf38ddf8bd5878","PHxmaW1fcHJlZml4fD4KY2xhc3MgU29sdXRpb246CiAgICBkZWYgbGFyZ2VzdFRpbWVGcm9tRGlnaXRzKHNlbGYsIEE6IExpc3RbaW50XSkgLT4gc3RyOgogICAgICAgIGZvciBwIGluIGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMoc29ydGVkKEEsIHJldmVyc2U9VHJ1ZSkpOgogICAgICAgICAgICBpZiBwWzBdICogMTAgKyBwWzFdIDwgMjQgYW5kIHBbMl0gPCA2OgogICAgICAgICAgICAgICAgcmV0dXJuIGYie3BbMF19e3BbMV19OntwWzJdfXtwWzNdfSIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJldHVybiAnJwogICAgICAgIAo8fGZpbV9lbmR8Pg=="]
["c1914606553cac71289b80d1fdcf38ddf8bd5878-5","c1914606553cac71289b80d1fdcf38ddf8bd5878","PHxmaW1fcHJlZml4fD4KY2xhc3MgU29sdXRpb246CiAgICBkZWYgbGFyZ2VzdFRpbWVGcm9tRGlnaXRzKHNlbGYsIEE6IExpc3RbaW50XSkgLT4gc3RyOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZm9yIHAgaW4gaXRlcnRvb2xzLnBlcm11dGF0aW9ucyhzb3J0ZWQoQSwgcmV2ZXJzZT1UcnVlKSk6CiAgICAgICAgICAgIGlmIHBbMF0gKiAxMCArIHBbMV0gPCAyNCBhbmQgcFsyXSA8IDY6CiAgICAgICAgICAgICAgICByZXR1cm4gZiJ7cFswXX17cFsxXX06e3BbMl19e3BbM119IgogICAgICAgIHJldHVybiAnJwo8fGZpbV9lbmR8Pg=="]
["780ea259a2b49bb40da1ad7d563afadafc17423b-1","780ea259a2b49bb40da1ad7d563afadafc17423b","PHxmaW1fcHJlZml4fD4KIyBBdXRob3IgOiBWZWRhbnQgU2hhaAojIEUtbWFpbCA6IHZlZGFudHNoYWgyMDEyQGdtYWlsLmNvbQoKaW1wb3J0IGd5bQppbXBvcnQgdG9yY2gKZnJvbSB0b3JjaC5kaXN0cmlidXRpb25zLmNhdGVnb3JpY2FsIGltcG9ydCBDYXRlZ29yaWNhbAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm9wdGltIGFzIG9wdGltCgpkZXZpY2UgPSB0b3JjaC5kZXZpY2UoImN1ZGEiIGlmIHRvcmNoLmN1ZGEuaXNfYXZhaWxhYmxlKCkgZWxzZSAiY3B1IikKZHR5cGUgPSB0b3JjaC5kb3VibGUKCgpjbGFzcyBhZ2VudDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbnYsIHBvbGljeV9sYXllcnNfc2l6ZXMsIHZhbHVlX2xheWVyc19zaXplcyk6CgogICAgICAgIHNlbGYuZW52ID0gZW52CiAgICAgICAgc2VsZi5wb2xpY3lfbmV0d29yaywgc2VsZi52YWx1ZV9uZXR3b3JrID0gc2VsZi5tYWtlX21vZGVscygKICAgICAgICAgICAgcG9saWN5X2xheWVyc19zaXplcywgdmFsdWVfbGF5ZXJzX3NpemVzCiAgICAgICAgKQoKICAgIGRlZiBtYWtlX21vZGVscygKICAgICAgICBzZWxmLCBwb2xpY3lfbGF5ZXJzX3NpemVzPVszMiwgMzJdLCB2YWx1ZV9sYXllcnNfc2l6ZXM9WzI0LCAyNF0KICAgICk6CgogICAgICAgIHBvbGljeV9uZXR3b3JrID0gKAogICAgICAgICAgICAoCiAgICAgICAgICAgICAgICBubi5TZXF1ZW50aWFsKAogICAgICAgICAgICAgICAgICAgIG5uLkxpbmVhcigKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lbnYub2JzZXJ2YXRpb24uc3BhY2Uuc2hhcGVbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeV9sYXllcnNfc2l6ZXNbMF0sCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBubi5SZUxVKCksCiAgICAgICAgICAgICAgICAgICAgbm4uTGluZWFyKAogICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lfbGF5ZXJzX3NpemVzWzBdLCBwb2xpY3lfbGF5ZXJzX3NpemVzWzFdCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBubi5SZUxVKCksCiAgICAgICAgICAgICAgICAgICAgbm4uTGluZWFyKAogICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lfbGF5ZXJzX3NpemVzWzFdLCBzZWxmLmVudi5hY3Rpb25fc3BhY2UubgogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgbm4uU29mdG1heChkaW09MCkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKQogICAgICAgICAgICAudG8oZGV2aWNlKQogICAgICAgICAgICAudG8oZHR5cGUpCiAgICAgICAgKQoKICAgICAgICB2YWx1ZV9uZXR3b3JrID0gKAogICAgICAgICAgICAoCiAgICAgICAgICAgICAgICBubi5TZXF1ZW50aWFsKAogICAgICAgICAgICAgICAgICAgIG5uLkxpbmVhcigKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVudi5vYnNlcnZhdGlvbl9zcGFjZS5zaGFwZVswXSwKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfbGF5ZXJzX3NpemVzWzBdLAo8fGZpbV9lbmR8Pg=="]
["ec05efb48c0a17178b838362eec81942e13148af-1","ec05efb48c0a17178b838362eec81942e13148af","PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCiMgQ29weXJpZ2h0IDIwMTQgYnkgU2hvb2J4LCBJbmMuCiMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCwgSXRlcmFibGUsIEdlbmVyaWMsIFR5cGVWYXIKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHBrZ19yZXNvdXJjZXMKCmZyb20gbWlncmFudCBpbXBvcnQgZXhjZXB0aW9ucwoKbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKIyBEYXRhYmFzZSBuYW1lIHR5cGUKREJOID0gVHlwZVZhcigiREJOIikKCiMgRGF0YWJhc2UgY29ubmVjdGlvbiB0eXBlCkRCQyA9IFR5cGVWYXIoIkRCQyIpCgoKY2xhc3MgTWlncmFudEJhY2tlbmQoR2VuZXJpY1tEQk4sIERCQ10pOgogICAgIiIiQmFzZSBpbnRlcmZhY2UgZm9yIGJhY2tlbmQgaW1wbGVtZW50YXRpb25zIiIiCgogICAgZGVmIGdlbmVyYXRlX2Nvbm5lY3Rpb25zKHNlbGYpIC0+IEl0ZXJhYmxlW0RCTl06CiAgICAgICAgIiIiR2VuZXJhdGUgY29ubmVjdGlvbnMgdG8gcHJvY2VzcwogICAgICAgICIiIgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IgICMgcHJhZ21hOiBubyBjb3ZlcgoKICAgIGRlZiBnZW5lcmF0ZV90ZXN0X2Nvbm5lY3Rpb25zKHNlbGYpIC0+IEl0ZXJhYmxlW0RCTl06CiAgICAgICAgIiIiR2VuZXJhdGUgY29ubmVjdGlvbnMgZm9yIG1pZ3JhdGlvbiB0ZXN0cwoKICAgICAgICBUaGUgc2FtZSBpbnRlcmZhY2UgYXMgYGdlbmVyYXRlX2Nvbm5lY3Rpb25zYCwgaG93ZXZlciB0aGlzIHNob3VsZCBub3QKICAgICAgICByZXR1cm4gImxpdmUiIGRhdGFiYXNlIGNvbm5lY3Rpb25zLCBhcyB0ZXN0cyBtaWdodCBoYXJtIHRoZSBkYXRhLgoKICAgICAgICBJZiBubyBjb25uZWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IHRoaXMgbWV0aG9kLCBubyB0ZXN0cyB3aWxsIGJlIHJ1biBieQogICAgICAgIGBtaWdyYW50IHRlc3RgLgogICAgICAgICIiIgogICAgICAgIHJldHVybiBbXSAgIyBwYXJnbWE6IG5vIGNvdmVyCgogICAgZGVmIGJlZ2luKHNlbGYsIGRiOiBEQk4pIC0+IERCQzoKICAgICAgICAiIiJCZWdpbiB0aGUgbWlncmF0aW9uCgogICAgICAgIFRoaXMgZ2l2ZXMgdGhlIG9wcG9ydHVuaXR5IHRvIHBlcmZvcm0gYWN0dWFsIGNvbm5lY3Rpb24gdG8gdGhlIGRhdGFiYXNlCiAgICAgICAgYmVmb3JlIGFueSBtaWdyYXRpb24gaXMgcnVuLgoKICAgICAgICBDYW4gcmFpc2UgRGF0YWJhc2VVbmF2YWlsYWJsZSBleGNlcHRpb24uIEluIHRoaXMgY2FzZSwgbWlncmF0aW9uIHdpbGwKICAgICAgICBiZSBza2lwcGVkIGZvciB0aGlzIGRhdGFiYXNlLgogICAgICAgICIiIgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IgICMgcHJhZ21hOiBubyBjb3ZlcgoKICAgIGRlZiBjb21taXQoc2VsZiwgZGI6IERCQykgLT4gTm9uZToKICAgICAgICAiIiJDYWxsZWQgb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGEgbWlncmF0aW9uCgogICAgICAgIFRoaXMgaXMgYW4gb3Bwb3J0dW5pdHkgdG8gY29tbWl0IHdvcmsgYW5kIGNsb3NlIHRoZSBjb25uZWN0aW9uLgogICAgICAgICIiIgogICAgICAgIHBhc3MKCiAgICBkZWYgYWJvcnQoc2VsZiwgZGI6IERCQykgLT4gTm9uZToKICAgICAgICAiIiJDYWxsZWQgd2hlbiBtaWdyYXRpb24gaGF2ZSBmYWlsZWQiIiIKICAgICAgICBwYXNzCgogICAgZGVmIGNsZWFudXAoc2VsZiwgZGI6IERCQykgLT4gTm9uZToKICAgICAgICAiIiJDb21wbGV0ZSB0aGUgbWlncmF0aW9uCgogICAgICAgIENhbGxlZCB3aGVuIGFsbCB3b3JrIG9uIGRhdGFiYXNlIGlzIGRvbmUuCiAgICAgICAgIiIiCiAgICAgICAgcGFzcwoKICAgIGRlZiBsaXN0X21pZ3JhdGlvbnMoc2VsZiwgZGI6IERCQykgLT4gTGlzdFtzdHJdOgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IgICMgcHJhZ21hOiBubyBjb3ZlcgoKICAgIGRlZiBwdXNoX21pZ3JhdGlvbihzZWxmLCBkYjogREJDLCBtaWdyYXRpb246IHN0cikgLT4gTm9uZToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yICAjIHByYWdtYTogbm8gY292ZXIKCiAgICBkZWYgcG9wX21pZ3JhdGlvbihzZWxmLCBkYjogREJDLCBtaWdyYXRpb246IHN0cikgLT4gTm9uZToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yICAjIHByYWdtYTogbm8gY292ZXIKCiAgICBkZWYgb25fbmV3X3NjcmlwdChzZWxmLCByZXZfbmFtZTogc3RyKSAtPiBOb25lOgogICAgICAgICIiIkNhbGxlZCB3aGVuIG5ldyBzY3JpcHQgaXMgY3JlYXRlZAogICAgICAgICIiIgogICAgICAgIHBhc3MgICMgcHJhZ21hOiBubyBjb3ZlcgoKICAgIGRlZiBvbl9yZXBvX2luaXQoc2VsZikgLT4gTm9uZToKICAgICAgICAiIiJDYWxsZWQgd2hlbiBuZXcgc2NyaXB0IHJlcG9zaXRvcnkgaXMgaW5pdGlhbGl6ZWQKICAgICAgICAiIiIKICAgICAgICBwYXNzICAjIHByYWdtYTogbm8gY292ZXIKCgpjbGFzcyBOb29wQmFja2VuZChNaWdyYW50QmFja2VuZFtzdHIsIHN0cl0pOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNmZyk6CiAgICAgICAgc2VsZi5jZmcgPSBjZmcKCiAgICBkZWYgbGlzdF9taWdyYXRpb25zKHNlbGYsIGRiOiBzdHIpIC0+IExpc3Rbc3RyXToKICAgICAgICByZXR1cm4gWyJJTklUSUFMIl0KCiAgICBkZWYgcHVzaF9taWdyYXRpb24oc2VsZiwgZGI6IHN0ciwgbWlncmF0aW9uOiBzdHIpIC0+IE5vbmU6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBsb2cuaW5mbygiTk9PUDogcHVzaGluZyBtaWdyYXRpb24gJXMiICUgbWlncmF0aW9uKQoKPHxmaW1fZW5kfD4="]
["ec05efb48c0a17178b838362eec81942e13148af-2","ec05efb48c0a17178b838362eec81942e13148af","PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCiMgQ29weXJpZ2h0IDIwMTQgYnkgU2hvb2J4LCBJbmMuCiMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCwgSXRlcmFibGUsIEdlbmVyaWMsIFR5cGVWYXIKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHBrZ19yZXNvdXJjZXMKCmZyb20gbWlncmFudCBpbXBvcnQgZXhjZXB0aW9ucwoKbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKIyBEYXRhYmFzZSBuYW1lIHR5cGUKREJOID0gVHlwZVZhcigiREJOIikKCiMgRGF0YWJhc2UgY29ubmVjdGlvbiB0eXBlCkRCQyA9IFR5cGVWYXIoIkRCQyIpCgoKY2xhc3MgTWlncmFudEJhY2tlbmQoR2VuZXJpY1tEQk4sIERCQ10pOgogICAgIiIiQmFzZSBpbnRlcmZhY2UgZm9yIGJhY2tlbmQgaW1wbGVtZW50YXRpb25zIiIiCgogICAgZGVmIGdlbmVyYXRlX2Nvbm5lY3Rpb25zKHNlbGYpIC0+IEl0ZXJhYmxlW0RCTl06CiAgICAgICAgIiIiR2VuZXJhdGUgY29ubmVjdGlvbnMgdG8gcHJvY2VzcwogICAgICAgICIiIgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IgICMgcHJhZ21hOiBubyBjb3ZlcgoKICAgIGRlZiBnZW5lcmF0ZV90ZXN0X2Nvbm5lY3Rpb25zKHNlbGYpIC0+IEl0ZXJhYmxlW0RCTl06CiAgICAgICAgIiIiR2VuZXJhdGUgY29ubmVjdGlvbnMgZm9yIG1pZ3JhdGlvbiB0ZXN0cwoKICAgICAgICBUaGUgc2FtZSBpbnRlcmZhY2UgYXMgYGdlbmVyYXRlX2Nvbm5lY3Rpb25zYCwgaG93ZXZlciB0aGlzIHNob3VsZCBub3QKICAgICAgICByZXR1cm4gImxpdmUiIGRhdGFiYXNlIGNvbm5lY3Rpb25zLCBhcyB0ZXN0cyBtaWdodCBoYXJtIHRoZSBkYXRhLgoKICAgICAgICBJZiBubyBjb25uZWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IHRoaXMgbWV0aG9kLCBubyB0ZXN0cyB3aWxsIGJlIHJ1biBieQogICAgICAgIGBtaWdyYW50IHRlc3RgLgogICAgICAgICIiIgogICAgICAgIHJldHVybiBbXSAgIyBwYXJnbWE6IG5vIGNvdmVyCgogICAgZGVmIGJlZ2luKHNlbGYsIGRiOiBEQk4pIC0+IERCQzoKICAgICAgICAiIiJCZWdpbiB0aGUgbWlncmF0aW9uCgogICAgICAgIFRoaXMgZ2l2ZXMgdGhlIG9wcG9ydHVuaXR5IHRvIHBlcmZvcm0gYWN0dWFsIGNvbm5lY3Rpb24gdG8gdGhlIGRhdGFiYXNlCiAgICAgICAgYmVmb3JlIGFueSBtaWdyYXRpb24gaXMgcnVuLgoKICAgICAgICBDYW4gcmFpc2UgRGF0YWJhc2VVbmF2YWlsYWJsZSBleGNlcHRpb24uIEluIHRoaXMgY2FzZSwgbWlncmF0aW9uIHdpbGwKICAgICAgICBiZSBza2lwcGVkIGZvciB0aGlzIGRhdGFiYXNlLgogICAgICAgICIiIgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IgICMgcHJhZ21hOiBubyBjb3Zlcgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIGNvbW1pdChzZWxmLCBkYjogREJDKSAtPiBOb25lOgogICAgICAgICIiIkNhbGxlZCBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgYSBtaWdyYXRpb24KCjx8ZmltX2VuZHw+"]
["ec05efb48c0a17178b838362eec81942e13148af-3","ec05efb48c0a17178b838362eec81942e13148af","PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCiMgQ29weXJpZ2h0IDIwMTQgYnkgU2hvb2J4LCBJbmMuCiMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCwgSXRlcmFibGUsIEdlbmVyaWMsIFR5cGVWYXIKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHBrZ19yZXNvdXJjZXMKCmZyb20gbWlncmFudCBpbXBvcnQgZXhjZXB0aW9ucwoKbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKIyBEYXRhYmFzZSBuYW1lIHR5cGUKREJOID0gVHlwZVZhcigiREJOIikKCiMgRGF0YWJhc2UgY29ubmVjdGlvbiB0eXBlCkRCQyA9IFR5cGVWYXIoIkRCQyIpCgoKY2xhc3MgTWlncmFudEJhY2tlbmQoR2VuZXJpY1tEQk4sIERCQ10pOgogICAgIiIiQmFzZSBpbnRlcmZhY2UgZm9yIGJhY2tlbmQgaW1wbGVtZW50YXRpb25zIiIiCgogICAgZGVmIGdlbmVyYXRlX2Nvbm5lY3Rpb25zKHNlbGYpIC0+IEl0ZXJhYmxlW0RCTl06CiAgICAgICAgIiIiR2VuZXJhdGUgY29ubmVjdGlvbnMgdG8gcHJvY2VzcwogICAgICAgICIiIgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IgICMgcHJhZ21hOiBubyBjb3ZlcgoKICAgIGRlZiBnZW5lcmF0ZV90ZXN0X2Nvbm5lY3Rpb25zKHNlbGYpIC0+IEl0ZXJhYmxlW0RCTl06CiAgICAgICAgIiIiR2VuZXJhdGUgY29ubmVjdGlvbnMgZm9yIG1pZ3JhdGlvbiB0ZXN0cwoKICAgICAgICBUaGUgc2FtZSBpbnRlcmZhY2UgYXMgYGdlbmVyYXRlX2Nvbm5lY3Rpb25zYCwgaG93ZXZlciB0aGlzIHNob3VsZCBub3QKICAgICAgICByZXR1cm4gImxpdmUiIGRhdGFiYXNlIGNvbm5lY3Rpb25zLCBhcyB0ZXN0cyBtaWdodCBoYXJtIHRoZSBkYXRhLgoKICAgICAgICBJZiBubyBjb25uZWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IHRoaXMgbWV0aG9kLCBubyB0ZXN0cyB3aWxsIGJlIHJ1biBieQogICAgICAgIGBtaWdyYW50IHRlc3RgLgogICAgICAgICIiIgogICAgICAgIHJldHVybiBbXSAgIyBwYXJnbWE6IG5vIGNvdmVyCgogICAgZGVmIGJlZ2luKHNlbGYsIGRiOiBEQk4pIC0+IERCQzoKICAgICAgICAiIiJCZWdpbiB0aGUgbWlncmF0aW9uCgogICAgICAgIFRoaXMgZ2l2ZXMgdGhlIG9wcG9ydHVuaXR5IHRvIHBlcmZvcm0gYWN0dWFsIGNvbm5lY3Rpb24gdG8gdGhlIGRhdGFiYXNlCiAgICAgICAgYmVmb3JlIGFueSBtaWdyYXRpb24gaXMgcnVuLgoKICAgICAgICBDYW4gcmFpc2UgRGF0YWJhc2VVbmF2YWlsYWJsZSBleGNlcHRpb24uIEluIHRoaXMgY2FzZSwgbWlncmF0aW9uIHdpbGwKICAgICAgICBiZSBza2lwcGVkIGZvciB0aGlzIGRhdGFiYXNlLgogICAgICAgICIiIgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IgICMgcHJhZ21hOiBubyBjb3ZlcgoKICAgIGRlZiBjb21taXQoc2VsZiwgZGI6IERCQykgLT4gTm9uZToKICAgICAgICAiIiJDYWxsZWQgb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGEgbWlncmF0aW9uCgogICAgICAgIFRoaXMgaXMgYW4gb3Bwb3J0dW5pdHkgdG8gY29tbWl0IHdvcmsgYW5kIGNsb3NlIHRoZSBjb25uZWN0aW9uLgogICAgICAgICIiIgogICAgICAgIHBhc3MKCiAgICBkZWYgYWJvcnQoc2VsZiwgZGI6IERCQykgLT4gTm9uZToKICAgICAgICAiIiJDYWxsZWQgd2hlbiBtaWdyYXRpb24gaGF2ZSBmYWlsZWQiIiIKICAgICAgICBwYXNzCgogICAgZGVmIGNsZWFudXAoc2VsZiwgZGI6IERCQykgLT4gTm9uZToKICAgICAgICAiIiJDb21wbGV0ZSB0aGUgbWlncmF0aW9uCgogICAgICAgIENhbGxlZCB3aGVuIGFsbCB3b3JrIG9uIGRhdGFiYXNlIGlzIGRvbmUuCiAgICAgICAgIiIiCiAgICAgICAgcGFzcwoKICAgIGRlZiBsaXN0X21pZ3JhdGlvbnMoc2VsZiwgZGI6IERCQykgLT4gTGlzdFtzdHJdOgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IgICMgcHJhZ21hOiBubyBjb3ZlcgoKICAgIGRlZiBwdXNoX21pZ3JhdGlvbihzZWxmLCBkYjogREJDLCBtaWdyYXRpb246IHN0cikgLT4gTm9uZToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yICAjIHByYWdtYTogbm8gY292ZXIKCiAgICBkZWYgcG9wX21pZ3JhdGlvbihzZWxmLCBkYjogREJDLCBtaWdyYXRpb246IHN0cikgLT4gTm9uZToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yICAjIHByYWdtYTogbm8gY292ZXIKCiAgICBkZWYgb25fbmV3X3NjcmlwdChzZWxmLCByZXZfbmFtZTogc3RyKSAtPiBOb25lOgogICAgICAgICIiIkNhbGxlZCB3aGVuIG5ldyBzY3JpcHQgaXMgY3JlYXRlZAogICAgICAgICIiIgogICAgICAgIHBhc3MgICMgcHJhZ21hOiBubyBjb3ZlcgoKICAgIGRlZiBvbl9yZXBvX2luaXQoc2VsZikgLT4gTm9uZToKICAgICAgICAiIiJDYWxsZWQgd2hlbiBuZXcgc2NyaXB0IHJlcG9zaXRvcnkgaXMgaW5pdGlhbGl6ZWQKICAgICAgICAiIiIKICAgICAgICBwYXNzICAjIHByYWdtYTogbm8gY292ZXIKCgpjbGFzcyBOb29wQmFja2VuZChNaWdyYW50QmFja2VuZFtzdHIsIHN0cl0pOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNmZyk6CiAgICAgICAgc2VsZi5jZmcgPSBjZmcKCiAgICBkZWYgbGlzdF9taWdyYXRpb25zKHNlbGYsIGRiOiBzdHIpIC0+IExpc3Rbc3RyXToKICAgICAgICByZXR1cm4gWyJJTklUSUFMIl0KCiAgICBkZWYgcHVzaF9taWdyYXRpb24oc2VsZiwgZGI6IHN0ciwgbWlncmF0aW9uOiBzdHIpIC0+IE5vbmU6CiAgICAgICAgbG9nLmluZm8oIk5PT1A6IHB1c2hpbmcgbWlncmF0aW9uICVzIiAlIG1pZ3JhdGlvbikKCiAgICBkZWYgcG9wX21pZ3JhdGlvbihzZWxmLCBkYjogc3RyLCBtaWdyYXRpb246IHN0cikgLT4gTm9uZToKICAgICAgICBsb2cuaW5mbygiTk9PUDogcG9wcGluZyBtaWdyYXRpb24gJXMiICUgbWlncmF0aW9uKQoKICAgIGRlZiBnZW5lcmF0ZV9jb25uZWN0aW9ucyhzZWxmKToKICAgICAgICB5aWVsZCAiTk9PUCIKCiAgICBkZWYgYmVnaW4oc2VsZiwgZGI6IHN0cikgLT4gc3RyOgogICAgICAgIHJldHVybiBkYgoKCmRlZiBjcmVhdGVfYmFja2VuZChjZmcpOgogICAgbmFtZSA9IGNmZ1siYmFja2VuZCJdCgogICAgZmFjdG9yeSA9IGdldF9iYWNrZW5kKG5hbWUpCiAgICByZXR1cm4gZmFjdG9yeShjZmcpCgoKZGVmIGdldF9iYWNrZW5kKG5hbWUpOgogICAgYmFja2VuZHMgPSBsaXN0KHBrZ19yZXNvdXJjZXMuaXRlcl9lbnRyeV9wb2ludHMoIm1pZ3JhbnQiLCBuYW1lKSkKICAgIGlmIG5vdCBiYWNrZW5kczoKICAgICAgICByYWlzZSBleGNlcHRpb25zLkJhY2tlbmROb3RSZWdpc3RlcmVkKG5hbWUpCiAgICBpZiBsZW4oYmFja2VuZHMpID4gMToKICAgICAgICByYWlzZSBleGNlcHRpb25zLkJhY2tlbmROYW1lQ29uZmxpY3QoYmFja2VuZHMpCiAgICBwY2xzID0gYmFja2VuZHNbMF0ubG9hZCgpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHJldHVybiBwY2xzCjx8ZmltX2VuZHw+"]
["ec05efb48c0a17178b838362eec81942e13148af-4","ec05efb48c0a17178b838362eec81942e13148af","PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCiMgQ29weXJpZ2h0IDIwMTQgYnkgU2hvb2J4LCBJbmMuCiMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCwgSXRlcmFibGUsIEdlbmVyaWMsIFR5cGVWYXIKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHBrZ19yZXNvdXJjZXMKCmZyb20gbWlncmFudCBpbXBvcnQgZXhjZXB0aW9ucwoKbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKIyBEYXRhYmFzZSBuYW1lIHR5cGUKREJOID0gVHlwZVZhcigiREJOIikKCiMgRGF0YWJhc2UgY29ubmVjdGlvbiB0eXBlCkRCQyA9IFR5cGVWYXIoIkRCQyIpCgoKY2xhc3MgTWlncmFudEJhY2tlbmQoR2VuZXJpY1tEQk4sIERCQ10pOgogICAgIiIiQmFzZSBpbnRlcmZhY2UgZm9yIGJhY2tlbmQgaW1wbGVtZW50YXRpb25zIiIiCgogICAgZGVmIGdlbmVyYXRlX2Nvbm5lY3Rpb25zKHNlbGYpIC0+IEl0ZXJhYmxlW0RCTl06CiAgICAgICAgIiIiR2VuZXJhdGUgY29ubmVjdGlvbnMgdG8gcHJvY2VzcwogICAgICAgICIiIgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IgICMgcHJhZ21hOiBubyBjb3ZlcgoKICAgIGRlZiBnZW5lcmF0ZV90ZXN0X2Nvbm5lY3Rpb25zKHNlbGYpIC0+IEl0ZXJhYmxlW0RCTl06CiAgICAgICAgIiIiR2VuZXJhdGUgY29ubmVjdGlvbnMgZm9yIG1pZ3JhdGlvbiB0ZXN0cwoKICAgICAgICBUaGUgc2FtZSBpbnRlcmZhY2UgYXMgYGdlbmVyYXRlX2Nvbm5lY3Rpb25zYCwgaG93ZXZlciB0aGlzIHNob3VsZCBub3QKICAgICAgICByZXR1cm4gImxpdmUiIGRhdGFiYXNlIGNvbm5lY3Rpb25zLCBhcyB0ZXN0cyBtaWdodCBoYXJtIHRoZSBkYXRhLgoKICAgICAgICBJZiBubyBjb25uZWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IHRoaXMgbWV0aG9kLCBubyB0ZXN0cyB3aWxsIGJlIHJ1biBieQogICAgICAgIGBtaWdyYW50IHRlc3RgLgogICAgICAgICIiIgogICAgICAgIHJldHVybiBbXSAgIyBwYXJnbWE6IG5vIGNvdmVyCgogICAgZGVmIGJlZ2luKHNlbGYsIGRiOiBEQk4pIC0+IERCQzoKICAgICAgICAiIiJCZWdpbiB0aGUgbWlncmF0aW9uCgogICAgICAgIFRoaXMgZ2l2ZXMgdGhlIG9wcG9ydHVuaXR5IHRvIHBlcmZvcm0gYWN0dWFsIGNvbm5lY3Rpb24gdG8gdGhlIGRhdGFiYXNlCiAgICAgICAgYmVmb3JlIGFueSBtaWdyYXRpb24gaXMgcnVuLgoKICAgICAgICBDYW4gcmFpc2UgRGF0YWJhc2VVbmF2YWlsYWJsZSBleGNlcHRpb24uIEluIHRoaXMgY2FzZSwgbWlncmF0aW9uIHdpbGwKICAgICAgICBiZSBza2lwcGVkIGZvciB0aGlzIGRhdGFiYXNlLgogICAgICAgICIiIgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IgICMgcHJhZ21hOiBubyBjb3ZlcgoKICAgIGRlZiBjb21taXQoc2VsZiwgZGI6IERCQykgLT4gTm9uZToKICAgICAgICAiIiJDYWxsZWQgb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGEgbWlncmF0aW9uCgogICAgICAgIFRoaXMgaXMgYW4gb3Bwb3J0dW5pdHkgdG8gY29tbWl0IHdvcmsgYW5kIGNsb3NlIHRoZSBjb25uZWN0aW9uLgogICAgICAgICIiIgogICAgICAgIHBhc3MKCiAgICBkZWYgYWJvcnQoc2VsZiwgZGI6IERCQykgLT4gTm9uZToKICAgICAgICAiIiJDYWxsZWQgd2hlbiBtaWdyYXRpb24gaGF2ZSBmYWlsZWQiIiIKICAgICAgICBwYXNzCgogICAgZGVmIGNsZWFudXAoc2VsZiwgZGI6IERCQykgLT4gTm9uZToKICAgICAgICAiIiJDb21wbGV0ZSB0aGUgbWlncmF0aW9uCgogICAgICAgIENhbGxlZCB3aGVuIGFsbCB3b3JrIG9uIGRhdGFiYXNlIGlzIGRvbmUuCiAgICAgICAgIiIiCiAgICAgICAgcGFzcwoKICAgIGRlZiBsaXN0X21pZ3JhdGlvbnMoc2VsZiwgZGI6IERCQykgLT4gTGlzdFtzdHJdOgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IgICMgcHJhZ21hOiBubyBjb3ZlcgoKICAgIGRlZiBwdXNoX21pZ3JhdGlvbihzZWxmLCBkYjogREJDLCBtaWdyYXRpb246IHN0cikgLT4gTm9uZToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yICAjIHByYWdtYTogbm8gY292ZXIKCiAgICBkZWYgcG9wX21pZ3JhdGlvbihzZWxmLCBkYjogREJDLCBtaWdyYXRpb246IHN0cikgLT4gTm9uZToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yICAjIHByYWdtYTogbm8gY292ZXIKCiAgICBkZWYgb25fbmV3X3NjcmlwdChzZWxmLCByZXZfbmFtZTogc3RyKSAtPiBOb25lOgogICAgICAgICIiIkNhbGxlZCB3aGVuIG5ldyBzY3JpcHQgaXMgY3JlYXRlZAogICAgICAgICIiIgogICAgICAgIHBhc3MgICMgcHJhZ21hOiBubyBjb3ZlcgoKICAgIGRlZiBvbl9yZXBvX2luaXQoc2VsZikgLT4gTm9uZToKICAgICAgICAiIiJDYWxsZWQgd2hlbiBuZXcgc2NyaXB0IHJlcG9zaXRvcnkgaXMgaW5pdGlhbGl6ZWQKICAgICAgICAiIiIKICAgICAgICBwYXNzICAjIHByYWdtYTogbm8gY292ZXIKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmNsYXNzIE5vb3BCYWNrZW5kKE1pZ3JhbnRCYWNrZW5kW3N0ciwgc3RyXSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY2ZnKToKICAgICAgICBzZWxmLmNmZyA9IGNmZwo8fGZpbV9lbmR8Pg=="]
["414c9c0bcf5de551c4480f2b633beea3c7b60a5d-1","414c9c0bcf5de551c4480f2b633beea3c7b60a5d","PHxmaW1fcHJlZml4fD4KY2FjdGlfY29uZiA9ICIiIlwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgotc2l6ZSAoYnl0ZXMpIHt9Ci1BcnJheSBQb3dlciBHYXRpbmcgLSAiZmFsc2UiCi1XTCBQb3dlciBHYXRpbmcgLSAiZmFsc2UiCi1DTCBQb3dlciBHYXRpbmcgLSAiZmFsc2UiCjx8ZmltX2VuZHw+"]
["e756b6af011e0ab3527039b644fba15d32cc8a8f-1","e756b6af011e0ab3527039b644fba15d32cc8a8f","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMS41IG9uIDIwMTktMDYtMDggMDg6NTMKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ3NpdGUnLCAnMDAwMV9pbml0aWFsJyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCjx8ZmltX2hvbGV8PgogICAgICAgICksCiAgICBdCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIG1vZGVsX25hbWU9J3NpdGVzZXR0aW5ncycsCiAgICAgICAgICAgIG5hbWU9J2RlZmF1bHRfd2VpZ2h0X3VuaXQnLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuQ2hhckZpZWxkKGNob2ljZXM9WygnSFInLCAnSFInKSwgKCdJREQnLCAnSUREJyksICgnWUVBUicsICdZRUFSJyldLCBkZWZhdWx0PSdIUicsIG1heF9sZW5ndGg9MTApLAo8fGZpbV9lbmR8Pg=="]
["e756b6af011e0ab3527039b644fba15d32cc8a8f-2","e756b6af011e0ab3527039b644fba15d32cc8a8f","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgKCdzaXRlJywgJzAwMDFfaW5pdGlhbCcpLAogICAgXQoKICAgIG9wZXJhdGlvbnMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdzaXRlc2V0dGluZ3MnLAogICAgICAgICAgICBuYW1lPSdkZWZhdWx0X3dlaWdodF91bml0JywKICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkNoYXJGaWVsZChjaG9pY2VzPVsoJ0hSJywgJ0hSJyksICgnSUREJywgJ0lERCcpLCAoJ1lFQVInLCAnWUVBUicpXSwgZGVmYXVsdD0nSFInLCBtYXhfbGVuZ3RoPTEwKSwKICAgICAgICApLAogICAgXQo8fGZpbV9zdWZmaXh8PgojIEdlbmVyYXRlZCBieSBEamFuZ28gMi4xLjUgb24gMjAxOS0wNi0wOCAwODo1MwoKZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMsIG1vZGVscwoKPHxmaW1fZW5kfD4="]
["4199e2fe8f937b2d1654065fc7f5ab687e3e5578-1","4199e2fe8f937b2d1654065fc7f5ab687e3e5578","PHxmaW1fcHJlZml4fD4KIiIiCkRhdGFMb2FkZXIgZm9yIHRoZSBXZWF0aGVyIENpdHlzY2FwZXMuCkl0IGhhbmRsZXMgdGhlIGZvZ2d5IENpdHlzY2FwZXMgYXMgZXhwbGFpbmVkIGhlcmUgOiBodHRwczovL2dpdGh1Yi5jb20vc2FrYXJpZGlzL2ZvZ19zaW11bGF0aW9uLVNGU1Vfc3ludGhldGljLwoiIiIKCmZyb20gdG9yY2gudXRpbHMuZGF0YSBpbXBvcnQgRGF0YXNldAppbXBvcnQgdG9yY2h2aXNpb24uZGF0YXNldHMgYXMgRApmcm9tIFBJTCBpbXBvcnQgSW1hZ2UKCmltcG9ydCBvcwoKY2xhc3MgRm9nZ3lDaXR5c2NhcGVzKERhdGFzZXQpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGltZ19kaXIsIGNpdHlzY2FwZXNfZGlyLCB0cmFuc21pdHRhbmNlPSczMG0nKToKICAgICAgICBzZWxmLmltZ19sYWJlbHMgPSBELkNpdHlzY2FwZXMoY2l0eXNjYXBlc19kaXIsIHNwbGl0PSJ0cmFpbiIsIHRhcmdldF90eXBlPSdzZW1hbnRpYycpCiAgICAgICAgc2VsZi5pbWdfZGlyID0gaW1nX2RpciArICcvbGVmdEltZzhiaXQvdHJhaW4vZm9nX3RyYW5zbWl0dGFuY2UvJyArIHRyYW5zbWl0dGFuY2UKICAgIAogICAgICAgIGNpdGllcyA9IG9zLmxpc3RkaXIoc2VsZi5pbWdfZGlyKQogICAgICAgIHNlbGYuaW1nX3Blcl9mb2xkZXIgPSB7fQogICAgICAgIGZvciBmIGluIGNpdGllczoKICAgICAgICAgICAgaW1ncyA9IG9zLmxpc3RkaXIoc2VsZi5pbWdfZGlyICsnLycgKyBmKQogICAgICAgICAgICBzZWxmLmltZ19wZXJfZm9sZGVyW2ZdID0gaW1ncwoKICAgIGRlZiBfX2xlbl9fKHNlbGYpOgogICAgICAgIHJldHVybiBsZW4oc2VsZi5pbWdfbGFiZWxzKQoKICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpZHgpOgogICAgICAgIGl0ZXJhdG9yLCBtZW1vcnksIGNpdHlfaWQgPSAwLCAwLCAwCiAgICAgICAgd2hpbGUgaXRlcmF0b3IgPCBpZHg6Cjx8ZmltX2hvbGV8PgogICAgICAgIAogICAgICAgIGNpdHkgPSBsaXN0KHNlbGYuaW1nX3Blcl9mb2xkZXIua2V5cygpKVtjaXR5X2lkXQogICAgICAgIGlkeCA9IGlkeC1tZW1vcnkKICAgICAgICAKICAgICAgICBwcmludChzZWxmLmltZ19kaXIgKyAnLycgKyBzZWxmLmltZ19wZXJfZm9sZGVyW2NpdHldW2lkeF0pCiAgICAgICAgaW1hZ2UgPSBJbWFnZS5vcGVuKHNlbGYuaW1nX2RpciArICcvJyArIGNpdHkgKyAnLycgKyBzZWxmLmltZ19wZXJfZm9sZGVyW2NpdHldW2lkeF0pCiAgICAgICAgbGFiZWwgPSBzZWxmLmltZ19sYWJlbHNbaWR4XVsxXQogICAgICAgIAogICAgICAgIHJldHVybiBpbWFnZSwgbGFiZWwKCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIG1lbW9yeSA9IGl0ZXJhdG9yCiAgICAgICAgICAgIGMgPSBsaXN0KHNlbGYuaW1nX3Blcl9mb2xkZXIua2V5cygpKVtjaXR5X2lkXQogICAgICAgICAgICBpdGVyYXRvciArPSBsZW4oc2VsZi5pbWdfcGVyX2ZvbGRlcltjXSkKICAgICAgICAgICAgY2l0eV9pZCs9MQo8fGZpbV9lbmR8Pg=="]
["820e79ceb33889c1243322a782eada7f95802bed-1","820e79ceb33889c1243322a782eada7f95802bed","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKCgpjbGFzcyBncmlkd29ybGQ6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHNpemUsIEEsIEFfLCBCLCBCXyk6CiAgICAgICAgIyBzaXplIG9mIHRoZSBncmlkd29ybGQgKG11c3QgYmUgc3F1YXJlIGluIHRoaXMgaW1wbGVtZW50YXRpb24pCiAgICAgICAgc2VsZi5zaXplID0gc2l6ZQogICAgICAgIHNlbGYuQSA9IEEgICMgQSBjZWxsCiAgICAgICAgc2VsZi5BXyA9IEFfICAjIEEnIGNlbGwKICAgICAgICBzZWxmLkIgPSBCICAjIEIgY2VsbAogICAgICAgIHNlbGYuQl8gPSBCXyAgIyBCJyBjZWxsCiAgICAgICAgIyBwb3NzaWJsZSBhY3Rpb25zIHRoZSBhZ2VudCBjYW4gdGFrZQogICAgICAgIHNlbGYuYWN0aW9ucyA9IFsiTiIsICJXIiwgIlMiLCAiRSJdCiAgICAgICAgIyBwcm9iYWJpbGl0eSBvZiBlYWNoIGFjdGlvbiB0YWtlbgogICAgICAgIHNlbGYuYWN0aW9uX3Byb2IgPSBbMC4yNSwgMC4yNSwgMC4yNSwgMC4yNV0KICAgICAgICBzZWxmLnMgPSBbMCwgMF0gICMgaW5pdGlhbCBzdGF0ZQogICAgICAgIHNlbGYuViA9IDAKCiAgICBkZWYgYWN0aW9uKHNlbGYsIGFjdGlvbik6CiAgICAgICAgIyBDaGVjayBpZiBnaXZlbiBhY3Rpb24gaXMgbGVnYWwKICAgICAgICBpZiBhY3Rpb24gbm90IGluIHNlbGYuYWN0aW9uczoKICAgICAgICAgICAgcmV0dXJuICJJbnZhbGlkIGFjdGlvbiIKICAgICAgICAjIENoZWNrIHNwZWNpYWwgY2FzZXMgKGkuZS4gY2VsbCBBIG9yIEIpCiAgICAgICAgaWYgc2VsZi5zID09IHNlbGYuQToKICAgICAgICAgICAgc2VsZi5zID0gc2VsZi5BXyAgIyBtb3ZlIGFnZW50IHRvIGNlbGwgQScKICAgICAgICAgICAgcmV3YXJkID0gMTAgICMgcmVjZWl2ZSByZXdhcmQgb2YgMTAKICAgICAgICBlbGlmIHNlbGYucyA9PSBzZWxmLkI6CiAgICAgICAgICAgIHNlbGYucyA9IHNlbGYuQl8gICMgbW92ZSBhZ2VudCB0byBjZWxsIEInCiAgICAgICAgICAgIHJld2FyZCA9IDUgICMgcmVjZWl2ZSByZXdhcmQgb2YgNQogICAgICAgICMgTW92ZSBub3J0aCwgbWFraW5nIHN1cmUgYWdlbnQgaXMgbm90IGluIHRvcCByb3cKICAgICAgICBlbGlmIGFjdGlvbiA9PSAiTiIgYW5kIHNlbGYuc1swXSA+IDA6CiAgICAgICAgICAgIHNlbGYuc1swXSAtPSAxCiAgICAgICAgICAgIHJld2FyZCA9IDAKICAgICAgICAjIE1vdmUgd2VzdCwgbWFraW5nIHN1cmUgYWdlbnQgaXMgbm90IGluIGxlZnRtb3N0IGNvbHVtbgogICAgICAgIGVsaWYgYWN0aW9uID09ICJXIiBhbmQgc2VsZi5zWzFdID4gMDoKICAgICAgICAgICAgc2VsZi5zWzFdIC09IDEKICAgICAgICAgICAgcmV3YXJkID0gMAogICAgICAgICMgTW92ZSBzb3V0aCwgbWFraW5nIHN1cmUgYWdlbnQgaXMgbm90IGluIGJvdHRvbSByb3cKICAgICAgICBlbGlmIGFjdGlvbiA9PSAiUyIgYW5kIHNlbGYuc1swXSA8IHNlbGYuc2l6ZSAtIDE6CiAgICAgICAgICAgIHNlbGYuc1swXSArPSAxCiAgICAgICAgICAgIHJld2FyZCA9IDAKICAgICAgICAjIE1vdmUgZWFzdCwgbWFraW5nIHN1cmUgYWdlbnQgaXMgbm90IGluIHJpZ2h0bW9zdCBjb2x1bW4KICAgICAgICBlbGlmIGFjdGlvbiA9PSAiRSIgYW5kIHNlbGYuc1sxXSA8IHNlbGYuc2l6ZSAtIDE6CiAgICAgICAgICAgIHNlbGYuc1sxXSArPSAxCiAgICAgICAgICAgIHJld2FyZCA9IDAKICAgICAgICAjIEJ1bXBlZCBpbnRvIHdhbGwgYW5kIGNhbm5vdCBtb3ZlIC0gcmVkdWNlIHJld2FyZAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJld2FyZCA9IC0xCiAgICAgICAgcmV0dXJuIHNlbGYucywgcmV3YXJkCgoKZGVmIHN0YXRlX3ZhbHVlX3RhYmxlKGdyaWQsIGRpc2NvdW50KToKICAgIHYgPSBucC56ZXJvcygoZ3JpZC5zaXplLCBncmlkLnNpemUpKQogICAgZGVsdGEgPSAwLjAxCiAgICBkZWx0YV90ID0gMQoKICAgIHdoaWxlIGRlbHRhX3QgPiBkZWx0YToKICAgICAgICB2XyA9IG5wLnplcm9zKChncmlkLnNpemUsIGdyaWQuc2l6ZSkpCiAgICAgICAgIyBpdGVyYXRlIHRocm91Z2ggZWFjaCBzdGF0ZQogICAgICAgIGZvciBpIGluIHJhbmdlKGdyaWQuc2l6ZSk6CiAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKGdyaWQuc2l6ZSk6CiAgICAgICAgICAgICAgICAjIGl0ZXJhdGUgdGhyb3VnaCBlYWNoIGFjdGlvbgogICAgICAgICAgICAgICAgZm9yIGFjdGlvbiBpbiBncmlkLmFjdGlvbnM6CiAgICAgICAgICAgICAgICAgICAgZ3JpZC5zID0gW2ksIGpdCiAgICAgICAgICAgICAgICAgICAgIyBkZXRlcm1pbmUgc3RhdGUgYW5kIHJld2FyZCBvZiBjdXJyZW50IGFjdGlvbgogICAgICAgICAgICAgICAgICAgIHMsIHIgPSBncmlkLmFjdGlvbihhY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgIyBkZXRlcm1pbmUgaW5kZXggb2YgY3VycmVudCBhY3Rpb24KICAgICAgICAgICAgICAgICAgICBhY3Rpb25faW5kZXggPSBncmlkLmFjdGlvbnMuaW5kZXgoYWN0aW9uKQogICAgICAgICAgICAgICAgICAgIHByb2IgPSBncmlkLmFjdGlvbl9wcm9iW2FjdGlvbl9pbmRleF0KICAgICAgICAgICAgICAgICAgICB2X1tpLCBqXSArPSBwcm9iICogKHIgKyBkaXNjb3VudCAqIHZbc1swXSwgc1sxXV0pCiAgICAgICAgZGVsdGFfdCA9IG5wLnN1bShucC5hYnModiAtIHZfKSkKICAgICAgICB2ID0gdl8uY29weSgpCiAgICByZXR1cm4gdgoKCmRlZiB2X3N0YXIoZ3JpZCwgZGlzY291bnQpOgogICAgIyBJbml0aWFsaXplIGVtcHR5IHEsIGFuZCBkZWx0YSB2YWx1ZXMKICAgIHEgPSBucC56ZXJvcygoZ3JpZC5zaXplLCBncmlkLnNpemUsIGxlbihncmlkLmFjdGlvbnMpKSkKICAgIGRlbHRhID0gMC4wMQogICAgZGVsdGFfdCA9IDEKICAgIHdoaWxlIGRlbHRhX3QgPiBkZWx0YToKICAgICAgICBxX29sZCA9IHEuY29weSgpCiAgICAgICAgIyBpdGVyYXRlIHRocm91Z2ggZWFjaCBzdGF0ZQogICAgICAgIGZvciBpIGluIHJhbmdlKGdyaWQuc2l6ZSk6CiAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKGdyaWQuc2l6ZSk6CiAgICAgICAgICAgICAgICAjIGl0ZXJhdGUgdGhyb3VnaCBlYWNoIGF2YWlsYWJsZSBhY3Rpb24KICAgICAgICAgICAgICAgIGZvciBhIGluIGdyaWQuYWN0aW9uczoKICAgICAgICAgICAgICAgICAgICBncmlkLnMgPSBbaSwgal0KICAgICAgICAgICAgICAgICAgICAjIGRldGVybWluZSBzdGF0ZSBhbmQgcmV3YXJkIG9mIGN1cnJlbnQKICAgICAgICAgICAgICAgICAgICBzLCByID0gZ3JpZC5hY3Rpb24oYSkKICAgICAgICAgICAgICAgICAgICAjIGRldGVybWluZSBpbmRleCBvZiB0aGUgY3VycmVudCBhY3Rpb24KICAgICAgICAgICAgICAgICAgICBhX2luZGV4ID0gZ3JpZC5hY3Rpb25zLmluZGV4KGEpCiAgICAgICAgICAgICAgICAgICAgcVtpLCBqLCBhX2luZGV4XSA9IHIgKyBkaXNjb3VudCAqIG5wLm1heChxX29sZFtzWzBdLCBzWzFdXSkKICAgICAgICBkZWx0YV90ID0gbnAuc3VtKG5wLmFicyhxIC0gcV9vbGQpKQogICAgcmV0dXJuIHEKCgpkZWYgb3B0aW1hbF9wb2xpY3kocSwgZ3JpZCk6CiAgICB4ID0gbnAubGluc3BhY2UoMCwgZ3JpZC5zaXplIC0gMSwgZ3JpZC5zaXplKSArIDAuNQogICAgeSA9IG5wLmxpbnNwYWNlKGdyaWQuc2l6ZSAtIDEsIDAsIGdyaWQuc2l6ZSkgKyAwLjUKICAgIFgsIFkgPSBucC5tZXNoZ3JpZCh4LCB5KQogICAgemVyb3MgPSBucC56ZXJvcygoZ3JpZC5zaXplLCBncmlkLnNpemUpKQogICAgcV9tYXggPSBucC5tYXgocSwgYXhpcz0yKQoKICAgIHBsdC5maWd1cmUoZmlnc2l6ZT0oNCwgNCkpCiAgICBheGVzID0gcGx0LmF4ZXMoKQoKICAgIGZvciBhLCBhY3Rpb24gaW4gZW51bWVyYXRlKGdyaWQuYWN0aW9ucyk6CiAgICAgICAgcV9zdGFyID0gbnAuemVyb3MoKGdyaWQuc2l6ZSwgZ3JpZC5zaXplKSkKICAgICAgICBmb3IgYiBpbiByYW5nZShncmlkLnNpemUpOgogICAgICAgICAgICBmb3IgYyBpbiByZXZlcnNlZChyYW5nZShncmlkLnNpemUpKToKICAgICAgICAgICAgICAgIGlmIHFbYiwgYywgYV0gPT0gcV9tYXhbYiwgY106CiAgICAgICAgICAgICAgICAgICAgcV9zdGFyW2IsIGNdID0gMC40CiAgICAgICAgIyBQbG90IHJlc3VsdHMKICAgICAgICBpZiBhY3Rpb24gPT0gIk4iOgogICAgICAgICAgICAjIGFycm93IHBvaW50cyBub3J0aAogICAgICAgICAgICBwbHQucXVpdmVyKFgsIFksIHplcm9zLCBxX3N0YXIsIHNjYWxlPTEsIHVuaXRzPSd4eScpCiAgICAgICAgZWxpZiBhY3Rpb24gPT0gIlciOgogICAgICAgICAgICAjIGFycm93IHBvaW50cyB3ZXN0CiAgICAgICAgICAgIHBsdC5xdWl2ZXIoWCwgWSwgLXFfc3RhciwgemVyb3MsIHNjYWxlPTEsIHVuaXRzPSd4eScpCiAgICAgICAgZWxpZiBhY3Rpb24gPT0gIlMiOgogICAgICAgICAgICAjIGFycm93IHBvaW50cyBzb3V0aAogICAgICAgICAgICBwbHQucXVpdmVyKFgsIFksIHplcm9zLCAtcV9zdGFyLCBzY2FsZT0xLCB1bml0cz0neHknKQogICAgICAgIGVsaWYgYWN0aW9uID09ICJFIjoKICAgICAgICAgICAgIyBhcnJvdyBwb2ludHMgZWFzdAogICAgICAgICAgICBwbHQucXVpdmVyKFgsIFksIHFfc3RhciwgemVyb3MsIHNjYWxlPTEsIHVuaXRzPSd4eScpCgogICAgIyBTZXQgYmxhbmsgYXhpcyB0aWNrIGxhYmVscwogICAgYXhlcy5zZXRfeXRpY2tsYWJlbHMoW10pCiAgICBheGVzLnNldF94dGlja2xhYmVscyhbXSkKICAgICMgU2V0IHRoZSB4IGFuZCB5IGxpbWl0cyBmb3IgdGhlIGF4aXMKICAgIHBsdC54bGltKFswLCBncmlkLnNpemVdKQogICAgcGx0LnlsaW0oWzAsIGdyaWQuc2l6ZV0pCiAgICBwbHQuZ3JpZCgpICAjIENvbmZpZ3VyZSBncmlkIGxpbmVzCiAgICBwbHQuc2hvdygpICAjIERpc3BsYXkgdGhlIHBsb3Qgd2l0aCB0aGUgb3B0aW1hbCBwb2xpY3kKCgoiIiIgNXg1IGdyaWQgcHJvYmxlbSAiIiIKPHxmaW1faG9sZXw+CkIgPSBbMCwgM10KQl8gPSBbMiwgM10KCiMgRGlzY291bnQgcmF0ZSA9IDAuODUKcHJpbnQoIjV4NSBjYXNlIC0gRGlzY291bnQgcmF0ZSA9IDAuODUiKQpncmlkID0gZ3JpZHdvcmxkKDUsIEEsIEFfLCBCLCBCXykKdiA9IHN0YXRlX3ZhbHVlX3RhYmxlKGdyaWQsIDAuODUpCnByaW50KHYucm91bmQoMSkpCnYgPSB2X3N0YXIoZ3JpZCwgMC44NSkKcHJpbnQobnAubWF4KHYsIGF4aXM9Mikucm91bmQoMSkpCm9wdGltYWxfcG9saWN5KHYsIGdyaWQpCgojICMgRGlzY291bnQgcmF0ZSA9IDAuNzUKcHJpbnQoIlxuNXg1IGNhc2UgLSBEaXNjb3VudCByYXRlID0gMC43NSIpCmdyaWQgPSBncmlkd29ybGQoNSwgQSwgQV8sIEIsIEJfKQp2ID0gc3RhdGVfdmFsdWVfdGFibGUoZ3JpZCwgMC43NSkKcHJpbnQodi5yb3VuZCgxKSkKdiA9IHZfc3RhcihncmlkLCAwLjc1KQpwcmludChucC5tYXgodiwgYXhpcz0yKS5yb3VuZCgxKSkKb3B0aW1hbF9wb2xpY3kodiwgZ3JpZCkKCiMgIiIiIDd4NyBncmlkIHByb2JsZW0gIiIiCiMgIyBBKDMsMiksIEEnKDcsMiksIEIoMSw2KSwgQicoNCw2KQojICMgSW5pdGlhbGl6ZSBzcGVjaWFsIGNlbGxzIEEvQiB0YWtpbmcgaW50byBhY2NvdW50IGluZGV4IHN0YXJ0aW5nIGF0IDAKQSA9IFsyLCAxXQpBXyA9IFs2LCAxXQpCID0gWzAsIDVdCkJfID0gWzMsIDVdCgojICMgRGlzY291bnQgcmF0ZSA9IDAuODUKcHJpbnQoIlxuN3g3IGNhc2UgLSBEaXNjb3VudCByYXRlID0gMC44NSIpCmdyaWQgPSBncmlkd29ybGQoNywgQSwgQV8sIEIsIEJfKQp2ID0gc3RhdGVfdmFsdWVfdGFibGUoZ3JpZCwgMC44NSkKcHJpbnQodi5yb3VuZCgxKSkKdiA9IHZfc3RhcihncmlkLCAwLjg1KQpwcmludChucC5tYXgodiwgYXhpcz0yKS5yb3VuZCgxKSkKb3B0aW1hbF9wb2xpY3kodiwgZ3JpZCkKCiMgIyBEaXNjb3VudCByYXRlID0gMC43NQpwcmludCgiXG43eDcgY2FzZSAtIERpc2NvdW50IHJhdGUgPSAwLjc1IikKZ3JpZCA9IGdyaWR3b3JsZCg3LCBBLCBBXywgQiwgQl8pCnYgPSBzdGF0ZV92YWx1ZV90YWJsZShncmlkLCAwLjc1KQpwcmludCh2LnJvdW5kKDEpKQp2ID0gdl9zdGFyKGdyaWQsIDAuNzUpCnByaW50KG5wLm1heCh2LCBheGlzPTIpLnJvdW5kKDEpKQpvcHRpbWFsX3BvbGljeSh2LCBncmlkKQo8fGZpbV9zdWZmaXh8PgojIEEoMSwyKSwgQScoNSwyKSwgQigxLDQpLCBCJygzLDQpCiMgSW5pdGlhbGl6ZSBzcGVjaWFsIGNlbGxzIEEvQiB0YWtpbmcgaW50byBhY2NvdW50IGluZGV4IHN0YXJ0aW5nIGF0IDAKQSA9IFswLCAxXQpBXyA9IFs0LCAxXQo8fGZpbV9lbmR8Pg=="]
["820e79ceb33889c1243322a782eada7f95802bed-2","820e79ceb33889c1243322a782eada7f95802bed","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKCgpjbGFzcyBncmlkd29ybGQ6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHNpemUsIEEsIEFfLCBCLCBCXyk6CiAgICAgICAgIyBzaXplIG9mIHRoZSBncmlkd29ybGQgKG11c3QgYmUgc3F1YXJlIGluIHRoaXMgaW1wbGVtZW50YXRpb24pCiAgICAgICAgc2VsZi5zaXplID0gc2l6ZQogICAgICAgIHNlbGYuQSA9IEEgICMgQSBjZWxsCiAgICAgICAgc2VsZi5BXyA9IEFfICAjIEEnIGNlbGwKICAgICAgICBzZWxmLkIgPSBCICAjIEIgY2VsbAogICAgICAgIHNlbGYuQl8gPSBCXyAgIyBCJyBjZWxsCiAgICAgICAgIyBwb3NzaWJsZSBhY3Rpb25zIHRoZSBhZ2VudCBjYW4gdGFrZQogICAgICAgIHNlbGYuYWN0aW9ucyA9IFsiTiIsICJXIiwgIlMiLCAiRSJdCiAgICAgICAgIyBwcm9iYWJpbGl0eSBvZiBlYWNoIGFjdGlvbiB0YWtlbgogICAgICAgIHNlbGYuYWN0aW9uX3Byb2IgPSBbMC4yNSwgMC4yNSwgMC4yNSwgMC4yNV0KICAgICAgICBzZWxmLnMgPSBbMCwgMF0gICMgaW5pdGlhbCBzdGF0ZQogICAgICAgIHNlbGYuViA9IDAKCiAgICBkZWYgYWN0aW9uKHNlbGYsIGFjdGlvbik6CiAgICAgICAgIyBDaGVjayBpZiBnaXZlbiBhY3Rpb24gaXMgbGVnYWwKICAgICAgICBpZiBhY3Rpb24gbm90IGluIHNlbGYuYWN0aW9uczoKICAgICAgICAgICAgcmV0dXJuICJJbnZhbGlkIGFjdGlvbiIKICAgICAgICAjIENoZWNrIHNwZWNpYWwgY2FzZXMgKGkuZS4gY2VsbCBBIG9yIEIpCiAgICAgICAgaWYgc2VsZi5zID09IHNlbGYuQToKICAgICAgICAgICAgc2VsZi5zID0gc2VsZi5BXyAgIyBtb3ZlIGFnZW50IHRvIGNlbGwgQScKICAgICAgICAgICAgcmV3YXJkID0gMTAgICMgcmVjZWl2ZSByZXdhcmQgb2YgMTAKICAgICAgICBlbGlmIHNlbGYucyA9PSBzZWxmLkI6CiAgICAgICAgICAgIHNlbGYucyA9IHNlbGYuQl8gICMgbW92ZSBhZ2VudCB0byBjZWxsIEInCiAgICAgICAgICAgIHJld2FyZCA9IDUgICMgcmVjZWl2ZSByZXdhcmQgb2YgNQogICAgICAgICMgTW92ZSBub3J0aCwgbWFraW5nIHN1cmUgYWdlbnQgaXMgbm90IGluIHRvcCByb3cKICAgICAgICBlbGlmIGFjdGlvbiA9PSAiTiIgYW5kIHNlbGYuc1swXSA+IDA6CiAgICAgICAgICAgIHNlbGYuc1swXSAtPSAxCiAgICAgICAgICAgIHJld2FyZCA9IDAKICAgICAgICAjIE1vdmUgd2VzdCwgbWFraW5nIHN1cmUgYWdlbnQgaXMgbm90IGluIGxlZnRtb3N0IGNvbHVtbgogICAgICAgIGVsaWYgYWN0aW9uID09ICJXIiBhbmQgc2VsZi5zWzFdID4gMDoKICAgICAgICAgICAgc2VsZi5zWzFdIC09IDEKICAgICAgICAgICAgcmV3YXJkID0gMAogICAgICAgICMgTW92ZSBzb3V0aCwgbWFraW5nIHN1cmUgYWdlbnQgaXMgbm90IGluIGJvdHRvbSByb3cKICAgICAgICBlbGlmIGFjdGlvbiA9PSAiUyIgYW5kIHNlbGYuc1swXSA8IHNlbGYuc2l6ZSAtIDE6CiAgICAgICAgICAgIHNlbGYuc1swXSArPSAxCiAgICAgICAgICAgIHJld2FyZCA9IDAKICAgICAgICAjIE1vdmUgZWFzdCwgbWFraW5nIHN1cmUgYWdlbnQgaXMgbm90IGluIHJpZ2h0bW9zdCBjb2x1bW4KICAgICAgICBlbGlmIGFjdGlvbiA9PSAiRSIgYW5kIHNlbGYuc1sxXSA8IHNlbGYuc2l6ZSAtIDE6CiAgICAgICAgICAgIHNlbGYuc1sxXSArPSAxCiAgICAgICAgICAgIHJld2FyZCA9IDAKICAgICAgICAjIEJ1bXBlZCBpbnRvIHdhbGwgYW5kIGNhbm5vdCBtb3ZlIC0gcmVkdWNlIHJld2FyZAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJld2FyZCA9IC0xCiAgICAgICAgcmV0dXJuIHNlbGYucywgcmV3YXJkCgoKZGVmIHN0YXRlX3ZhbHVlX3RhYmxlKGdyaWQsIGRpc2NvdW50KToKICAgIHYgPSBucC56ZXJvcygoZ3JpZC5zaXplLCBncmlkLnNpemUpKQogICAgZGVsdGEgPSAwLjAxCiAgICBkZWx0YV90ID0gMQoKICAgIHdoaWxlIGRlbHRhX3QgPiBkZWx0YToKICAgICAgICB2XyA9IG5wLnplcm9zKChncmlkLnNpemUsIGdyaWQuc2l6ZSkpCiAgICAgICAgIyBpdGVyYXRlIHRocm91Z2ggZWFjaCBzdGF0ZQogICAgICAgIGZvciBpIGluIHJhbmdlKGdyaWQuc2l6ZSk6CiAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKGdyaWQuc2l6ZSk6CiAgICAgICAgICAgICAgICAjIGl0ZXJhdGUgdGhyb3VnaCBlYWNoIGFjdGlvbgogICAgICAgICAgICAgICAgZm9yIGFjdGlvbiBpbiBncmlkLmFjdGlvbnM6CiAgICAgICAgICAgICAgICAgICAgZ3JpZC5zID0gW2ksIGpdCiAgICAgICAgICAgICAgICAgICAgIyBkZXRlcm1pbmUgc3RhdGUgYW5kIHJld2FyZCBvZiBjdXJyZW50IGFjdGlvbgogICAgICAgICAgICAgICAgICAgIHMsIHIgPSBncmlkLmFjdGlvbihhY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgIyBkZXRlcm1pbmUgaW5kZXggb2YgY3VycmVudCBhY3Rpb24KICAgICAgICAgICAgICAgICAgICBhY3Rpb25faW5kZXggPSBncmlkLmFjdGlvbnMuaW5kZXgoYWN0aW9uKQogICAgICAgICAgICAgICAgICAgIHByb2IgPSBncmlkLmFjdGlvbl9wcm9iW2FjdGlvbl9pbmRleF0KICAgICAgICAgICAgICAgICAgICB2X1tpLCBqXSArPSBwcm9iICogKHIgKyBkaXNjb3VudCAqIHZbc1swXSwgc1sxXV0pCiAgICAgICAgZGVsdGFfdCA9IG5wLnN1bShucC5hYnModiAtIHZfKSkKICAgICAgICB2ID0gdl8uY29weSgpCiAgICByZXR1cm4gdgoKCmRlZiB2X3N0YXIoZ3JpZCwgZGlzY291bnQpOgogICAgIyBJbml0aWFsaXplIGVtcHR5IHEsIGFuZCBkZWx0YSB2YWx1ZXMKICAgIHEgPSBucC56ZXJvcygoZ3JpZC5zaXplLCBncmlkLnNpemUsIGxlbihncmlkLmFjdGlvbnMpKSkKICAgIGRlbHRhID0gMC4wMQogICAgZGVsdGFfdCA9IDEKICAgIHdoaWxlIGRlbHRhX3QgPiBkZWx0YToKICAgICAgICBxX29sZCA9IHEuY29weSgpCiAgICAgICAgIyBpdGVyYXRlIHRocm91Z2ggZWFjaCBzdGF0ZQogICAgICAgIGZvciBpIGluIHJhbmdlKGdyaWQuc2l6ZSk6CiAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKGdyaWQuc2l6ZSk6CiAgICAgICAgICAgICAgICAjIGl0ZXJhdGUgdGhyb3VnaCBlYWNoIGF2YWlsYWJsZSBhY3Rpb24KICAgICAgICAgICAgICAgIGZvciBhIGluIGdyaWQuYWN0aW9uczoKICAgICAgICAgICAgICAgICAgICBncmlkLnMgPSBbaSwgal0KICAgICAgICAgICAgICAgICAgICAjIGRldGVybWluZSBzdGF0ZSBhbmQgcmV3YXJkIG9mIGN1cnJlbnQKICAgICAgICAgICAgICAgICAgICBzLCByID0gZ3JpZC5hY3Rpb24oYSkKICAgICAgICAgICAgICAgICAgICAjIGRldGVybWluZSBpbmRleCBvZiB0aGUgY3VycmVudCBhY3Rpb24KICAgICAgICAgICAgICAgICAgICBhX2luZGV4ID0gZ3JpZC5hY3Rpb25zLmluZGV4KGEpCiAgICAgICAgICAgICAgICAgICAgcVtpLCBqLCBhX2luZGV4XSA9IHIgKyBkaXNjb3VudCAqIG5wLm1heChxX29sZFtzWzBdLCBzWzFdXSkKICAgICAgICBkZWx0YV90ID0gbnAuc3VtKG5wLmFicyhxIC0gcV9vbGQpKQogICAgcmV0dXJuIHEKCgpkZWYgb3B0aW1hbF9wb2xpY3kocSwgZ3JpZCk6CiAgICB4ID0gbnAubGluc3BhY2UoMCwgZ3JpZC5zaXplIC0gMSwgZ3JpZC5zaXplKSArIDAuNQogICAgeSA9IG5wLmxpbnNwYWNlKGdyaWQuc2l6ZSAtIDEsIDAsIGdyaWQuc2l6ZSkgKyAwLjUKICAgIFgsIFkgPSBucC5tZXNoZ3JpZCh4LCB5KQogICAgemVyb3MgPSBucC56ZXJvcygoZ3JpZC5zaXplLCBncmlkLnNpemUpKQogICAgcV9tYXggPSBucC5tYXgocSwgYXhpcz0yKQoKICAgIHBsdC5maWd1cmUoZmlnc2l6ZT0oNCwgNCkpCiAgICBheGVzID0gcGx0LmF4ZXMoKQoKICAgIGZvciBhLCBhY3Rpb24gaW4gZW51bWVyYXRlKGdyaWQuYWN0aW9ucyk6CiAgICAgICAgcV9zdGFyID0gbnAuemVyb3MoKGdyaWQuc2l6ZSwgZ3JpZC5zaXplKSkKICAgICAgICBmb3IgYiBpbiByYW5nZShncmlkLnNpemUpOgogICAgICAgICAgICBmb3IgYyBpbiByZXZlcnNlZChyYW5nZShncmlkLnNpemUpKToKICAgICAgICAgICAgICAgIGlmIHFbYiwgYywgYV0gPT0gcV9tYXhbYiwgY106CiAgICAgICAgICAgICAgICAgICAgcV9zdGFyW2IsIGNdID0gMC40CiAgICAgICAgIyBQbG90IHJlc3VsdHMKICAgICAgICBpZiBhY3Rpb24gPT0gIk4iOgogICAgICAgICAgICAjIGFycm93IHBvaW50cyBub3J0aAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHBsdC5xdWl2ZXIoWCwgWSwgemVyb3MsIHFfc3Rhciwgc2NhbGU9MSwgdW5pdHM9J3h5JykKPHxmaW1fZW5kfD4="]
["daeeb091850366626e1b96f086782d38760d7ebe-1","daeeb091850366626e1b96f086782d38760d7ebe","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMSBUaGUgVHJpZXN0ZSBDb250cmlidXRvcnMKIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAo8fGZpbV9lbmR8Pg=="]
["daeeb091850366626e1b96f086782d38760d7ebe-2","daeeb091850366626e1b96f086782d38760d7ebe","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMSBUaGUgVHJpZXN0ZSBDb250cmlidXRvcnMKIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYW5ub3RhdGlvbnMKCmltcG9ydCB0ZW5zb3JmbG93IGFzIHRmCmZyb20gZ3BmbHV4LmxheWVycyBpbXBvcnQgR1BMYXllciwgTGF0ZW50VmFyaWFibGVMYXllcgpmcm9tIGdwZmx1eC5tb2RlbHMgaW1wb3J0IERlZXBHUApmcm9tIGdwZmx1eC5zYW1wbGluZy5zYW1wbGUgaW1wb3J0IFNhbXBsZQo8fGZpbV9ob2xlfD4KZGVmIHNhbXBsZV9jb25zaXN0ZW50X2x2X2xheWVyKGxheWVyOiBMYXRlbnRWYXJpYWJsZUxheWVyKSAtPiBTYW1wbGU6CiAgICBjbGFzcyBTYW1wbGVMVihTYW1wbGUpOiAgIyB0eXBlOiBpZ25vcmVbbWlzY10KICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgWDogVGVuc29yVHlwZSkgLT4gdGYuVGVuc29yOgogICAgICAgICAgICBzYW1wbGUgPSBsYXllci5wcmlvci5zYW1wbGUoKQogICAgICAgICAgICBiYXRjaF9zaGFwZSA9IHRmLnNoYXBlKFgpWzotMV0KICAgICAgICAgICAgc2FtcGxlX3JhbmsgPSB0Zi5yYW5rKHNhbXBsZSkKICAgICAgICAgICAgZm9yIF8gaW4gcmFuZ2UobGVuKGJhdGNoX3NoYXBlKSk6CiAgICAgICAgICAgICAgICBzYW1wbGUgPSB0Zi5leHBhbmRfZGltcyhzYW1wbGUsIDApCiAgICAgICAgICAgIHNhbXBsZSA9IHRmLnRpbGUoCiAgICAgICAgICAgICAgICBzYW1wbGUsIHRmLmNvbmNhdChbYmF0Y2hfc2hhcGUsIHRmLm9uZXMoc2FtcGxlX3JhbmssIGR0eXBlPSJpbnQzMiIpXSwgLTEpCiAgICAgICAgICAgICkKICAgICAgICAgICAgcmV0dXJuIGxheWVyLmNvbXBvc2l0b3IoW1gsIHNhbXBsZV0pCgogICAgcmV0dXJuIFNhbXBsZUxWKCkKCgpkZWYgc2FtcGxlX2RncChtb2RlbDogRGVlcEdQKSAtPiBTYW1wbGU6CiAgICBmdW5jdGlvbl9kcmF3cyA9IFtdCiAgICBmb3IgbGF5ZXIgaW4gbW9kZWwuZl9sYXllcnM6CiAgICAgICAgaWYgaXNpbnN0YW5jZShsYXllciwgR1BMYXllcik6CiAgICAgICAgICAgIGZ1bmN0aW9uX2RyYXdzLmFwcGVuZChsYXllci5zYW1wbGUoKSkKICAgICAgICBlbGlmIGlzaW5zdGFuY2UobGF5ZXIsIExhdGVudFZhcmlhYmxlTGF5ZXIpOgogICAgICAgICAgICBmdW5jdGlvbl9kcmF3cy5hcHBlbmQoc2FtcGxlX2NvbnNpc3RlbnRfbHZfbGF5ZXIobGF5ZXIpKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoZiJTYW1wbGluZyBub3QgaW1wbGVtZW50ZWQgZm9yIHt0eXBlKGxheWVyKX0iKQoKICAgIGNsYXNzIENoYWluZWRTYW1wbGUoU2FtcGxlKTogICMgdHlwZTogaWdub3JlW21pc2NdCiAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIFg6IFRlbnNvclR5cGUpIC0+IHRmLlRlbnNvcjoKICAgICAgICAgICAgZm9yIGYgaW4gZnVuY3Rpb25fZHJhd3M6CiAgICAgICAgICAgICAgICBYID0gZihYKQogICAgICAgICAgICByZXR1cm4gWAoKICAgIHJldHVybiBDaGFpbmVkU2FtcGxlKCkKPHxmaW1fc3VmZml4fD4KCmZyb20gLi4udHlwZXMgaW1wb3J0IFRlbnNvclR5cGUKCgo8fGZpbV9lbmR8Pg=="]
["6bea283113001a0a5b20b988ad5fac609158ed7b-1","6bea283113001a0a5b20b988ad5fac609158ed7b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgdGltZQppbXBvcnQgb3MKZnJvbSBhcHBsaWNhdGlvbiBpbXBvcnQgYXBwbGljYXRpb24KZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3RlbXBsYXRlLCByZXF1ZXN0LCBqc29uaWZ5CmZyb20gYXBwbGljYXRpb24uZml0UGh5c2ljcyBpbXBvcnQgZml0X1AyRF9ieV9jYXBhY2l0eQppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQganNvbgpmcm9tIGFwcGxpY2F0aW9uLkVDZml0IGltcG9ydCBmaXRFQwoKCkBhcHBsaWNhdGlvbi5yb3V0ZSgnLycsIG1ldGhvZHM9WydHRVQnXSkKZGVmIGluZGV4KCk6CiAgICAiIiIgSW1wZWRhbmNlIEFuYWx5emVyIE1haW4gUGFnZSAiIiIKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoJ2luZGV4Lmh0bWwnLCB2ZXJzaW9uPXN0cihpbnQodGltZS50aW1lKCkpKSkKCgpAYXBwbGljYXRpb24ucm91dGUoJy9nZXRFeGFtcGxlRGF0YScsIG1ldGhvZHM9WydHRVQnXSkKZGVmIGdldEV4YW1wbGVEYXRhKCk6CiAgICAiIiIgR2V0cyB0aGUgZGF0YSBmcm9tIHRoZSBzZWxlY3RlZCBleGFtcGxlCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgZmlsZW5hbWUgOiBzdHIKICAgICAgICBmaWxlbmFtZSBmb3Igc2VsZWN0aW5nIGV4YW1wbGUKCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBkYXRhIDoganNvbmlmaWVkIGRhdGEKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICIiIgoKICAgIGZpbGVuYW1lID0gcmVxdWVzdC52YWx1ZXNbImZpbGVuYW1lIl0KCjx8ZmltX2VuZHw+"]
["6bea283113001a0a5b20b988ad5fac609158ed7b-2","6bea283113001a0a5b20b988ad5fac609158ed7b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgdGltZQppbXBvcnQgb3MKZnJvbSBhcHBsaWNhdGlvbiBpbXBvcnQgYXBwbGljYXRpb24KZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3RlbXBsYXRlLCByZXF1ZXN0LCBqc29uaWZ5CmZyb20gYXBwbGljYXRpb24uZml0UGh5c2ljcyBpbXBvcnQgZml0X1AyRF9ieV9jYXBhY2l0eQppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQganNvbgpmcm9tIGFwcGxpY2F0aW9uLkVDZml0IGltcG9ydCBmaXRFQwoKCkBhcHBsaWNhdGlvbi5yb3V0ZSgnLycsIG1ldGhvZHM9WydHRVQnXSkKZGVmIGluZGV4KCk6CiAgICAiIiIgSW1wZWRhbmNlIEFuYWx5emVyIE1haW4gUGFnZSAiIiIKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoJ2luZGV4Lmh0bWwnLCB2ZXJzaW9uPXN0cihpbnQodGltZS50aW1lKCkpKSkKCgpAYXBwbGljYXRpb24ucm91dGUoJy9nZXRFeGFtcGxlRGF0YScsIG1ldGhvZHM9WydHRVQnXSkKZGVmIGdldEV4YW1wbGVEYXRhKCk6CiAgICAiIiIgR2V0cyB0aGUgZGF0YSBmcm9tIHRoZSBzZWxlY3RlZCBleGFtcGxlCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgZmlsZW5hbWUgOiBzdHIKICAgICAgICBmaWxlbmFtZSBmb3Igc2VsZWN0aW5nIGV4YW1wbGUKCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBkYXRhIDoganNvbmlmaWVkIGRhdGEKCiAgICAiIiIKCiAgICBmaWxlbmFtZSA9IHJlcXVlc3QudmFsdWVzWyJmaWxlbmFtZSJdCgogICAgd2l0aCBvcGVuKCcuL2FwcGxpY2F0aW9uL3N0YXRpYy9kYXRhL2V4YW1wbGVzLycgKyBmaWxlbmFtZSwgJ3InKSBhcyBmOgogICAgICAgIGNvbnRlbnRzID0gZi5yZWFkKCkKCiAgICBkYXRhID0gdG9fYXJyYXkoY29udGVudHMpCgogICAgcmV0dXJuIGpzb25pZnkoZGF0YT1kYXRhKQoKCkBhcHBsaWNhdGlvbi5yb3V0ZSgnL2dldFVwbG9hZERhdGEnLCBtZXRob2RzPVsnUE9TVCddKQpkZWYgZ2V0VXBsb2FkRGF0YSgpOgogICAgIiIiIEdldHMgdXBsb2FkZWQgZGF0YSAiIiIKICAgIGYgPSByZXF1ZXN0LmZpbGVzWydkYXRhJ10KICAgIGNvbnRlbnRzID0gZi5yZWFkKCkKICAgIGRhdGEgPSB0b19hcnJheShjb250ZW50cykKCiAgICByZXR1cm4ganNvbmlmeShkYXRhPWRhdGEpCgoKQGFwcGxpY2F0aW9uLnJvdXRlKCcvZml0Q2lyY3VpdCcsIG1ldGhvZHM9WydQT1NUJ10pCmRlZiBmaXRDaXJjdWl0KCk6CiAgICAiIiIgZml0cyBlcXVpdmFsZW50IGNpcmN1aXQKCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCgogICAgY2lyY3VpdCA6IHN0cgogICAgICAgIHN0cmluZyBkZWZpbmluZyBjaXJjdWl0IHRvIGZpdAoKICAgIGRhdGEgOiBzdHIKICAgICAgICBzdHJpbmcgb2YgZGF0YSBvZiBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzIG9mIGZyZXEsIHJlYWwsIGltYWcKCiAgICBwMCA6IHN0cgogICAgICAgIGNvbW1hIGRlbGltaW5hdGVkIHN0cmluZyBvZiBpbml0aWFsIHBhcmFtZXRlciBndWVzc2VzCgogICAgUmV0dXJucwogICAgLS0tLS0tLQoKICAgIG5hbWVzIDogbGlzdCBvZiBzdHJpbmdzCiAgICAgICAgbGlzdCBvZiBwYXJhbWV0ZXIgbmFtZXMKCiAgICB2YWx1ZXMgOiBsaXN0IG9mIHN0cmluZ3MKICAgICAgICBsaXN0IG9mIHBhcmFtZXRlciB2YWx1ZXMKCiAgICBlcnJvcnMgOiBsaXN0IG9mIHN0cmluZ3MKICAgICAgICBsaXN0IG9mIHBhcmFtZXRlciBlcnJvcnMKCiAgICBlY0ZpdCA6CgoKICAgIE5vdGVzCiAgICAtLS0tLQoKCiAgICAiIiIKICAgIGRhdGEgPSByZXF1ZXN0LnZhbHVlc1siZGF0YSJdLnNwbGl0KCcsJykKICAgIGYgPSBbZmxvYXQoZikgZm9yIGYgaW4gZGF0YVs6OjNdXQogICAgcmVhbCA9IFtmbG9hdChyKSBmb3IgciBpbiBkYXRhWzE6OjNdXQogICAgaW1hZyA9IFtmbG9hdChpKSBmb3IgaSBpbiBkYXRhWzI6OjNdXQogICAgZGF0YSA9IGxpc3QoemlwKGYsIHJlYWwsIGltYWcpKQoKICAgIGNpcmN1aXQgPSByZXF1ZXN0LnZhbHVlc1siY2lyY3VpdCJdCiAgICBwMCA9IHJlcXVlc3QudmFsdWVzWyJwMCJdCiAgICBwMCA9IFtmbG9hdChwKSBmb3IgcCBpbiBwMC5zcGxpdCgnLCcpXQoKICAgIHBfcmVzdWx0cywgcF9lcnJvciwgZWNGaXQgPSBmaXRFQy5lcXVpdmFsZW50X2NpcmN1aXQoZGF0YSwgY2lyY3VpdCwgcDApCgogICAgZWxlbWVudHMgPSBjaXJjdWl0LnJlcGxhY2UoJywnLCAnLScpLnJlcGxhY2UoJy8nLCAnLScpLnNwbGl0KCctJykKICAgIHJlcGxhY2UgPSB7b3JkKHgpOiAnJyBmb3IgeCBpbiBbJygnLCAnKScsICdwJ119CiAgICBuYW1lcyA9IFtlLnRyYW5zbGF0ZShyZXBsYWNlKSBmb3IgZSBpbiBlbGVtZW50c10KCiAgICByZXR1cm4ganNvbmlmeShuYW1lcz1uYW1lcywKICAgICAgICAgICAgICAgICAgIHZhbHVlcz1wX3Jlc3VsdHMudG9saXN0KCksCiAgICAgICAgICAgICAgICAgICBlcnJvcnM9cF9lcnJvciwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgZWNGaXQ9ZWNGaXQpCgoKPHxmaW1fZW5kfD4="]
["6bea283113001a0a5b20b988ad5fac609158ed7b-3","6bea283113001a0a5b20b988ad5fac609158ed7b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgdGltZQppbXBvcnQgb3MKZnJvbSBhcHBsaWNhdGlvbiBpbXBvcnQgYXBwbGljYXRpb24KZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3RlbXBsYXRlLCByZXF1ZXN0LCBqc29uaWZ5CmZyb20gYXBwbGljYXRpb24uZml0UGh5c2ljcyBpbXBvcnQgZml0X1AyRF9ieV9jYXBhY2l0eQppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQganNvbgpmcm9tIGFwcGxpY2F0aW9uLkVDZml0IGltcG9ydCBmaXRFQwoKCkBhcHBsaWNhdGlvbi5yb3V0ZSgnLycsIG1ldGhvZHM9WydHRVQnXSkKZGVmIGluZGV4KCk6CiAgICAiIiIgSW1wZWRhbmNlIEFuYWx5emVyIE1haW4gUGFnZSAiIiIKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoJ2luZGV4Lmh0bWwnLCB2ZXJzaW9uPXN0cihpbnQodGltZS50aW1lKCkpKSkKCgpAYXBwbGljYXRpb24ucm91dGUoJy9nZXRFeGFtcGxlRGF0YScsIG1ldGhvZHM9WydHRVQnXSkKZGVmIGdldEV4YW1wbGVEYXRhKCk6CiAgICAiIiIgR2V0cyB0aGUgZGF0YSBmcm9tIHRoZSBzZWxlY3RlZCBleGFtcGxlCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgZmlsZW5hbWUgOiBzdHIKICAgICAgICBmaWxlbmFtZSBmb3Igc2VsZWN0aW5nIGV4YW1wbGUKCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBkYXRhIDoganNvbmlmaWVkIGRhdGEKCiAgICAiIiIKCiAgICBmaWxlbmFtZSA9IHJlcXVlc3QudmFsdWVzWyJmaWxlbmFtZSJdCgogICAgd2l0aCBvcGVuKCcuL2FwcGxpY2F0aW9uL3N0YXRpYy9kYXRhL2V4YW1wbGVzLycgKyBmaWxlbmFtZSwgJ3InKSBhcyBmOgogICAgICAgIGNvbnRlbnRzID0gZi5yZWFkKCkKCiAgICBkYXRhID0gdG9fYXJyYXkoY29udGVudHMpCgogICAgcmV0dXJuIGpzb25pZnkoZGF0YT1kYXRhKQoKCkBhcHBsaWNhdGlvbi5yb3V0ZSgnL2dldFVwbG9hZERhdGEnLCBtZXRob2RzPVsnUE9TVCddKQpkZWYgZ2V0VXBsb2FkRGF0YSgpOgogICAgIiIiIEdldHMgdXBsb2FkZWQgZGF0YSAiIiIKICAgIGYgPSByZXF1ZXN0LmZpbGVzWydkYXRhJ10KICAgIGNvbnRlbnRzID0gZi5yZWFkKCkKICAgIGRhdGEgPSB0b19hcnJheShjb250ZW50cykKCiAgICByZXR1cm4ganNvbmlmeShkYXRhPWRhdGEpCgoKQGFwcGxpY2F0aW9uLnJvdXRlKCcvZml0Q2lyY3VpdCcsIG1ldGhvZHM9WydQT1NUJ10pCmRlZiBmaXRDaXJjdWl0KCk6CiAgICAiIiIgZml0cyBlcXVpdmFsZW50IGNpcmN1aXQKCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCgogICAgY2lyY3VpdCA6IHN0cgogICAgICAgIHN0cmluZyBkZWZpbmluZyBjaXJjdWl0IHRvIGZpdAoKICAgIGRhdGEgOiBzdHIKICAgICAgICBzdHJpbmcgb2YgZGF0YSBvZiBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzIG9mIGZyZXEsIHJlYWwsIGltYWcKCiAgICBwMCA6IHN0cgogICAgICAgIGNvbW1hIGRlbGltaW5hdGVkIHN0cmluZyBvZiBpbml0aWFsIHBhcmFtZXRlciBndWVzc2VzCgogICAgUmV0dXJucwogICAgLS0tLS0tLQoKICAgIG5hbWVzIDogbGlzdCBvZiBzdHJpbmdzCiAgICAgICAgbGlzdCBvZiBwYXJhbWV0ZXIgbmFtZXMKCiAgICB2YWx1ZXMgOiBsaXN0IG9mIHN0cmluZ3MKICAgICAgICBsaXN0IG9mIHBhcmFtZXRlciB2YWx1ZXMKCiAgICBlcnJvcnMgOiBsaXN0IG9mIHN0cmluZ3MKICAgICAgICBsaXN0IG9mIHBhcmFtZXRlciBlcnJvcnMKCiAgICBlY0ZpdCA6CgoKICAgIE5vdGVzCiAgICAtLS0tLQoKCiAgICAiIiIKICAgIGRhdGEgPSByZXF1ZXN0LnZhbHVlc1siZGF0YSJdLnNwbGl0KCcsJykKICAgIGYgPSBbZmxvYXQoZikgZm9yIGYgaW4gZGF0YVs6OjNdXQogICAgcmVhbCA9IFtmbG9hdChyKSBmb3IgciBpbiBkYXRhWzE6OjNdXQogICAgaW1hZyA9IFtmbG9hdChpKSBmb3IgaSBpbiBkYXRhWzI6OjNdXQogICAgZGF0YSA9IGxpc3QoemlwKGYsIHJlYWwsIGltYWcpKQoKICAgIGNpcmN1aXQgPSByZXF1ZXN0LnZhbHVlc1siY2lyY3VpdCJdCiAgICBwMCA9IHJlcXVlc3QudmFsdWVzWyJwMCJdCiAgICBwMCA9IFtmbG9hdChwKSBmb3IgcCBpbiBwMC5zcGxpdCgnLCcpXQoKICAgIHBfcmVzdWx0cywgcF9lcnJvciwgZWNGaXQgPSBmaXRFQy5lcXVpdmFsZW50X2NpcmN1aXQoZGF0YSwgY2lyY3VpdCwgcDApCgogICAgZWxlbWVudHMgPSBjaXJjdWl0LnJlcGxhY2UoJywnLCAnLScpLnJlcGxhY2UoJy8nLCAnLScpLnNwbGl0KCctJykKICAgIHJlcGxhY2UgPSB7b3JkKHgpOiAnJyBmb3IgeCBpbiBbJygnLCAnKScsICdwJ119CiAgICBuYW1lcyA9IFtlLnRyYW5zbGF0ZShyZXBsYWNlKSBmb3IgZSBpbiBlbGVtZW50c10KCiAgICByZXR1cm4ganNvbmlmeShuYW1lcz1uYW1lcywKICAgICAgICAgICAgICAgICAgIHZhbHVlcz1wX3Jlc3VsdHMudG9saXN0KCksCiAgICAgICAgICAgICAgICAgICBlcnJvcnM9cF9lcnJvciwKICAgICAgICAgICAgICAgICAgIGVjRml0PWVjRml0KQoKCkBhcHBsaWNhdGlvbi5yb3V0ZSgnL2ZpdFBoeXNpY3MnLCBtZXRob2RzPVsnUE9TVCddKQpkZWYgZml0UGh5c2ljcygpOgogICAgIiIiIGZpdHMgcGh5c2ljcyBtb2RlbAoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KCiAgICByZXF1ZXN0LnZhbHVlc1siZGF0YSJdIDogc3RyaW5nCiAgICAgICAgY29tbWEtc2VwYXJhdGVkIGRhdGEgc3RyaW5nCgogICAgUmV0dXJucwogICAgLS0tLS0tLQoKICAgIGZpdCA6IGxpc3QKICAgICAgICBsaXN0IG9mIHR1cGxlcyBjb250YWluaW5nIHRoZSAoZiwgWnIsIFppKSBvZiB0aGUgYmVzdCBmaXQgUDJEIG1vZGVsCgogICAgbmFtZXMgOiBsaXN0CiAgICAgICAgbGlzdCBvZiBwYXJhbWV0ZXIgbmFtZXMKCiAgICB1bml0cyA6IGxpc3QKCjx8ZmltX2hvbGV8PgoKICAgIHJlc3VsdHM9cDJkX3Jlc2lkdWFscywKCiAgICBzaW11bGF0aW9ucz1wMmRfc2ltdWxhdGlvbnMsCgogICAgZml0X3BvaW50cyA6CgogICAgIiIiCiAgICBkYXRhID0gcmVxdWVzdC52YWx1ZXNbImRhdGEiXS5zcGxpdCgnLCcpCiAgICBmID0gW2Zsb2F0KGYpIGZvciBmIGluIGRhdGFbOjozXV0KICAgIHJlYWwgPSBbZmxvYXQocikgZm9yIHIgaW4gZGF0YVsxOjozXV0KICAgIGltYWcgPSBbZmxvYXQoaSkgZm9yIGkgaW4gZGF0YVsyOjozXV0KICAgIGRhdGEgPSBsaXN0KHppcChmLCByZWFsLCBpbWFnKSkKCiAgICBmaXRfdHlwZSA9IHJlcXVlc3QudmFsdWVzWyJmaXQtdHlwZSJdCgogICAgaWYgZml0X3R5cGUgPT0gImNhcF9jb250YWN0IjoKICAgICAgICBmaXRfbUFoID0gZmxvYXQocmVxdWVzdC52YWx1ZXNbImZpdC1tQWgiXSkKICAgICAgICBmaXRfcG9pbnRzLCBmaXQsIHNvcnRlZF9yZXN1bHRzID0gZml0X1AyRF9ieV9jYXBhY2l0eShkYXRhLCBmaXRfbUFoKQoKICAgICMgcmVhZCBpbiBhbGwgb2YgdGhlIHNpbXVsYXRpb24gcmVzdWx0cwogICAgWl9jc3YgPSBwZC5yZWFkX2NzdignLi9hcHBsaWNhdGlvbi9zdGF0aWMvZGF0YS8zODgwMC1aLmNzdicsIGluZGV4X2NvbD0wKQoKICAgIHJlYWwgPSBbYSBmb3IgYSBpbiBaX2Nzdi5jb2x1bW5zIGlmICdyZWFsJyBpbiBhXQogICAgcmVhbF9kZiA9IFpfY3N2W3JlYWxdCiAgICByZWFsX2RmLmNvbHVtbnMgPSBbZmxvYXQoYS5zcGxpdCgnX3JlYWwnKVswXSkgZm9yIGEgaW4gcmVhbF9kZi5jb2x1bW5zXQoKICAgIGltYWcgPSBbYSBmb3IgYSBpbiBaX2Nzdi5jb2x1bW5zIGlmICdpbWFnJyBpbiBhXQogICAgaW1hZ19kZiA9IFpfY3N2W2ltYWddCiAgICBpbWFnX2RmLmNvbHVtbnMgPSBbZmxvYXQoYS5zcGxpdCgnX2ltYWcnKVswXSkgZm9yIGEgaW4gaW1hZ19kZi5jb2x1bW5zXQoKICAgIFogPSByZWFsX2RmICsgaW1hZ19kZioxagoKICAgIG1hc2sgPSBbZiBmb3IgZiwgciwgaSBpbiBmaXRdCiAgICBaID0gWi5sb2Nbc29ydGVkX3Jlc3VsdHNbJ3J1biddLm1hcChpbnQpLnZhbHVlcywgbWFza10KCiAgICBmdWxsX1AgPSBwZC5yZWFkX2NzdignLi9hcHBsaWNhdGlvbi9zdGF0aWMvZGF0YS9tb2RlbF9ydW5zLnR4dCcpCiAgICBmdWxsX1AuaW5kZXggPSBmdWxsX1BbJ3J1biddCiAgICBQID0gZnVsbF9QLmxvY1tzb3J0ZWRfcmVzdWx0c1sncnVuJ10ubWFwKGludCkudmFsdWVzXQoKICAgIHRvX3NraXAgPSBbJ2QyVWRjcDJfbmVnJywgJ2QyVWRjcDJfcG9zJywgJ2QzVWRjcDNfbmVnJywgJ2QzVWRjcDNfcG9zJ10KCiAgICBtYXNrID0gW2MgZm9yIGMgaW4gUC5jb2x1bW5zIGlmIGMuc3BsaXQoJ1snKVswXSBub3QgaW4gdG9fc2tpcF0KICAgIFAgPSBQLmxvY1s6LCBtYXNrXQoKICAgIGZ1bGxfcmVzdWx0cyA9IFtdCgogICAgZm9yIGksIHNwZWN0cnVtIGluIFouaXRlcnJvd3MoKToKCiAgICAgICAgcGFyYW1ldGVycyA9IFtdCgogICAgICAgIGFyZWEgPSBzb3J0ZWRfcmVzdWx0c1snYXJlYSddLmxvY1tpXQogICAgICAgIGNvbnRhY3RfcmVzaXN0YW5jZSA9IHNvcnRlZF9yZXN1bHRzWydjb250YWN0X3Jlc2lzdGFuY2UnXS5sb2NbaV0KICAgICAgICByZXNpZHVhbCA9IHNvcnRlZF9yZXN1bHRzWydyZXNpZHVhbCddLmxvY1tpXQoKICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCh7Im5hbWUiOiAiZml0IHBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICd7Oi40ZX0nLmZvcm1hdChhcmVhKjFlNCl9KQoKICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCh7Im5hbWUiOiAicnVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogc3RyKFAubG9jW2ksICdydW4nXSl9KQoKICAgICAgICBmb3IgcCBpbiBQLmNvbHVtbnNbMTpdOgogICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCh7Im5hbWUiOiBwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuaXRzIjogcC5zcGxpdCgnWycpWy0xXS5zdHJpcCgnXScpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogJ3s6LjRlfScuZm9ybWF0KFAubG9jW2ksIHBdKX0pCgogICAgICAgIGZ1bGxfcmVzdWx0cy5hcHBlbmQoeyJydW4iOiBpbnQoaSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyZXEiOiBaLmNvbHVtbnMudmFsdWVzLnRvbGlzdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFsIjogc3BlY3RydW0uYXBwbHkobnAucmVhbCkudmFsdWVzLnRvbGlzdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbWFnIjogc3BlY3RydW0uYXBwbHkobnAuaW1hZykudmFsdWVzLnRvbGlzdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogcGFyYW1ldGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29udGFjdF9yZXNpc3RhbmNlIjogY29udGFjdF9yZXNpc3RhbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmVhIjogYXJlYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzaWR1YWwiOiByZXNpZHVhbH0pCgogICAgYmVzdF9maXQgPSBzb3J0ZWRfcmVzdWx0c1sncnVuJ10uaWxvY1swXQogICAgcGFyYW1fU2VyaWVzID0gUC5sb2NbYmVzdF9maXRdCgogICAgcDJkX3Jlc2lkdWFscyA9IHNvcnRlZF9yZXN1bHRzLnZhbHVlcy50b2xpc3QoKQoKICAgIHBhcmFtZXRlcnMgPSBbXQogICAgcGFyYW1ldGVycy5hcHBlbmQoeyJuYW1lIjogImZpdCBwYXJhbWV0ZXIiLCAidW5pdHMiOiAiY21eMiIsCiAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogc29ydGVkX3Jlc3VsdHNbJ2FyZWEnXS5pbG9jWzBdKjFlNCwKICAgICAgICAgICAgICAgICAgICAgICAic2Vuc2l0aXZpdHkiOiAieCJ9KQoKICAgIGZvciBpLCBwYXJhbWV0ZXIgaW4gZW51bWVyYXRlKHBhcmFtX1Nlcmllcy5pbmRleCk6CiAgICAgICAgaWYgcGFyYW1ldGVyLnNwbGl0KCdbJylbMF0gbm90IGluIHRvX3NraXA6CiAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHsibmFtZSI6IHBhcmFtZXRlci5zcGxpdCgnWycpWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuaXRzIjogcGFyYW1ldGVyLnNwbGl0KCdbJylbLTFdLnN0cmlwKCJdIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBwYXJhbV9TZXJpZXMuaWxvY1tpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW5zaXRpdml0eSI6ICJ4In0pCgogICAgcmV0dXJuIGpzb25pZnkoZml0PWZpdCwgcGFyYW1ldGVycz1wYXJhbWV0ZXJzLCByZXN1bHRzPXAyZF9yZXNpZHVhbHMsCiAgICAgICAgICAgICAgICAgICBmaXRfcG9pbnRzPWZpdF9wb2ludHMsIGZ1bGxfcmVzdWx0cz1mdWxsX3Jlc3VsdHMpCgoKZGVmIHRvX2FycmF5KGlucHV0KToKICAgICIiIiBwYXJzZSBzdHJpbmdzIG9mIGRhdGEgZnJvbSBhamF4IHJlcXVlc3RzIHRvIHJldHVybgoKICAgICIiIgoKICAgIHRyeToKICAgICAgICBpbnB1dCA9IGlucHV0LmRlY29kZSgidXRmLTgiKQogICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgIHBhc3MKCiAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoJ1xyXG4nLCAnLCcpCiAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoJ1xuJywgJywnKQogICAgY29sMCA9IFtmbG9hdCh4KSBmb3IgeCBpbiBpbnB1dC5zcGxpdCgnLCcpWzA6LTE6M11dCiAgICBjb2wxID0gW2Zsb2F0KHgpIGZvciB4IGluIGlucHV0LnNwbGl0KCcsJylbMTotMTozXV0KICAgIGNvbDIgPSBbZmxvYXQoeCkgZm9yIHggaW4gaW5wdXQuc3BsaXQoJywnKVsyOi0xOjNdXQoKICAgIHJldHVybiBsaXN0KHppcChjb2wwLCBjb2wxLCBjb2wyKSkKPHxmaW1fc3VmZml4fD4KCiAgICB2YWx1ZXM9dmFsdWVzLAoKICAgIGVycm9ycz1lcnJvcnMsCjx8ZmltX2VuZHw+"]
["6bea283113001a0a5b20b988ad5fac609158ed7b-4","6bea283113001a0a5b20b988ad5fac609158ed7b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgdGltZQppbXBvcnQgb3MKZnJvbSBhcHBsaWNhdGlvbiBpbXBvcnQgYXBwbGljYXRpb24KZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3RlbXBsYXRlLCByZXF1ZXN0LCBqc29uaWZ5CmZyb20gYXBwbGljYXRpb24uZml0UGh5c2ljcyBpbXBvcnQgZml0X1AyRF9ieV9jYXBhY2l0eQppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQganNvbgpmcm9tIGFwcGxpY2F0aW9uLkVDZml0IGltcG9ydCBmaXRFQwoKCkBhcHBsaWNhdGlvbi5yb3V0ZSgnLycsIG1ldGhvZHM9WydHRVQnXSkKZGVmIGluZGV4KCk6CiAgICAiIiIgSW1wZWRhbmNlIEFuYWx5emVyIE1haW4gUGFnZSAiIiIKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoJ2luZGV4Lmh0bWwnLCB2ZXJzaW9uPXN0cihpbnQodGltZS50aW1lKCkpKSkKCgpAYXBwbGljYXRpb24ucm91dGUoJy9nZXRFeGFtcGxlRGF0YScsIG1ldGhvZHM9WydHRVQnXSkKZGVmIGdldEV4YW1wbGVEYXRhKCk6CiAgICAiIiIgR2V0cyB0aGUgZGF0YSBmcm9tIHRoZSBzZWxlY3RlZCBleGFtcGxlCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgZmlsZW5hbWUgOiBzdHIKICAgICAgICBmaWxlbmFtZSBmb3Igc2VsZWN0aW5nIGV4YW1wbGUKCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBkYXRhIDoganNvbmlmaWVkIGRhdGEKCiAgICAiIiIKCiAgICBmaWxlbmFtZSA9IHJlcXVlc3QudmFsdWVzWyJmaWxlbmFtZSJdCgogICAgd2l0aCBvcGVuKCcuL2FwcGxpY2F0aW9uL3N0YXRpYy9kYXRhL2V4YW1wbGVzLycgKyBmaWxlbmFtZSwgJ3InKSBhcyBmOgogICAgICAgIGNvbnRlbnRzID0gZi5yZWFkKCkKCiAgICBkYXRhID0gdG9fYXJyYXkoY29udGVudHMpCgogICAgcmV0dXJuIGpzb25pZnkoZGF0YT1kYXRhKQoKCjx8ZmltX2hvbGV8PgogICAgY29udGVudHMgPSBmLnJlYWQoKQogICAgZGF0YSA9IHRvX2FycmF5KGNvbnRlbnRzKQoKICAgIHJldHVybiBqc29uaWZ5KGRhdGE9ZGF0YSkKCgpAYXBwbGljYXRpb24ucm91dGUoJy9maXRDaXJjdWl0JywgbWV0aG9kcz1bJ1BPU1QnXSkKZGVmIGZpdENpcmN1aXQoKToKICAgICIiIiBmaXRzIGVxdWl2YWxlbnQgY2lyY3VpdAoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KCiAgICBjaXJjdWl0IDogc3RyCiAgICAgICAgc3RyaW5nIGRlZmluaW5nIGNpcmN1aXQgdG8gZml0CgogICAgZGF0YSA6IHN0cgogICAgICAgIHN0cmluZyBvZiBkYXRhIG9mIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMgb2YgZnJlcSwgcmVhbCwgaW1hZwoKICAgIHAwIDogc3RyCiAgICAgICAgY29tbWEgZGVsaW1pbmF0ZWQgc3RyaW5nIG9mIGluaXRpYWwgcGFyYW1ldGVyIGd1ZXNzZXMKCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCgogICAgbmFtZXMgOiBsaXN0IG9mIHN0cmluZ3MKICAgICAgICBsaXN0IG9mIHBhcmFtZXRlciBuYW1lcwoKICAgIHZhbHVlcyA6IGxpc3Qgb2Ygc3RyaW5ncwogICAgICAgIGxpc3Qgb2YgcGFyYW1ldGVyIHZhbHVlcwoKICAgIGVycm9ycyA6IGxpc3Qgb2Ygc3RyaW5ncwogICAgICAgIGxpc3Qgb2YgcGFyYW1ldGVyIGVycm9ycwoKICAgIGVjRml0IDoKCgogICAgTm90ZXMKICAgIC0tLS0tCgoKICAgICIiIgogICAgZGF0YSA9IHJlcXVlc3QudmFsdWVzWyJkYXRhIl0uc3BsaXQoJywnKQogICAgZiA9IFtmbG9hdChmKSBmb3IgZiBpbiBkYXRhWzo6M11dCiAgICByZWFsID0gW2Zsb2F0KHIpIGZvciByIGluIGRhdGFbMTo6M11dCiAgICBpbWFnID0gW2Zsb2F0KGkpIGZvciBpIGluIGRhdGFbMjo6M11dCiAgICBkYXRhID0gbGlzdCh6aXAoZiwgcmVhbCwgaW1hZykpCgogICAgY2lyY3VpdCA9IHJlcXVlc3QudmFsdWVzWyJjaXJjdWl0Il0KICAgIHAwID0gcmVxdWVzdC52YWx1ZXNbInAwIl0KICAgIHAwID0gW2Zsb2F0KHApIGZvciBwIGluIHAwLnNwbGl0KCcsJyldCgogICAgcF9yZXN1bHRzLCBwX2Vycm9yLCBlY0ZpdCA9IGZpdEVDLmVxdWl2YWxlbnRfY2lyY3VpdChkYXRhLCBjaXJjdWl0LCBwMCkKCiAgICBlbGVtZW50cyA9IGNpcmN1aXQucmVwbGFjZSgnLCcsICctJykucmVwbGFjZSgnLycsICctJykuc3BsaXQoJy0nKQogICAgcmVwbGFjZSA9IHtvcmQoeCk6ICcnIGZvciB4IGluIFsnKCcsICcpJywgJ3AnXX0KICAgIG5hbWVzID0gW2UudHJhbnNsYXRlKHJlcGxhY2UpIGZvciBlIGluIGVsZW1lbnRzXQoKICAgIHJldHVybiBqc29uaWZ5KG5hbWVzPW5hbWVzLAogICAgICAgICAgICAgICAgICAgdmFsdWVzPXBfcmVzdWx0cy50b2xpc3QoKSwKICAgICAgICAgICAgICAgICAgIGVycm9ycz1wX2Vycm9yLAogICAgICAgICAgICAgICAgICAgZWNGaXQ9ZWNGaXQpCgoKQGFwcGxpY2F0aW9uLnJvdXRlKCcvZml0UGh5c2ljcycsIG1ldGhvZHM9WydQT1NUJ10pCmRlZiBmaXRQaHlzaWNzKCk6CiAgICAiIiIgZml0cyBwaHlzaWNzIG1vZGVsCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQoKICAgIHJlcXVlc3QudmFsdWVzWyJkYXRhIl0gOiBzdHJpbmcKICAgICAgICBjb21tYS1zZXBhcmF0ZWQgZGF0YSBzdHJpbmcKCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCgogICAgZml0IDogbGlzdAogICAgICAgIGxpc3Qgb2YgdHVwbGVzIGNvbnRhaW5pbmcgdGhlIChmLCBaciwgWmkpIG9mIHRoZSBiZXN0IGZpdCBQMkQgbW9kZWwKCiAgICBuYW1lcyA6IGxpc3QKICAgICAgICBsaXN0IG9mIHBhcmFtZXRlciBuYW1lcwoKICAgIHVuaXRzIDogbGlzdAoKCiAgICB2YWx1ZXM9dmFsdWVzLAoKICAgIGVycm9ycz1lcnJvcnMsCgogICAgcmVzdWx0cz1wMmRfcmVzaWR1YWxzLAoKICAgIHNpbXVsYXRpb25zPXAyZF9zaW11bGF0aW9ucywKCiAgICBmaXRfcG9pbnRzIDoKCiAgICAiIiIKICAgIGRhdGEgPSByZXF1ZXN0LnZhbHVlc1siZGF0YSJdLnNwbGl0KCcsJykKICAgIGYgPSBbZmxvYXQoZikgZm9yIGYgaW4gZGF0YVs6OjNdXQogICAgcmVhbCA9IFtmbG9hdChyKSBmb3IgciBpbiBkYXRhWzE6OjNdXQogICAgaW1hZyA9IFtmbG9hdChpKSBmb3IgaSBpbiBkYXRhWzI6OjNdXQogICAgZGF0YSA9IGxpc3QoemlwKGYsIHJlYWwsIGltYWcpKQoKICAgIGZpdF90eXBlID0gcmVxdWVzdC52YWx1ZXNbImZpdC10eXBlIl0KCiAgICBpZiBmaXRfdHlwZSA9PSAiY2FwX2NvbnRhY3QiOgogICAgICAgIGZpdF9tQWggPSBmbG9hdChyZXF1ZXN0LnZhbHVlc1siZml0LW1BaCJdKQogICAgICAgIGZpdF9wb2ludHMsIGZpdCwgc29ydGVkX3Jlc3VsdHMgPSBmaXRfUDJEX2J5X2NhcGFjaXR5KGRhdGEsIGZpdF9tQWgpCgogICAgIyByZWFkIGluIGFsbCBvZiB0aGUgc2ltdWxhdGlvbiByZXN1bHRzCiAgICBaX2NzdiA9IHBkLnJlYWRfY3N2KCcuL2FwcGxpY2F0aW9uL3N0YXRpYy9kYXRhLzM4ODAwLVouY3N2JywgaW5kZXhfY29sPTApCgogICAgcmVhbCA9IFthIGZvciBhIGluIFpfY3N2LmNvbHVtbnMgaWYgJ3JlYWwnIGluIGFdCiAgICByZWFsX2RmID0gWl9jc3ZbcmVhbF0KICAgIHJlYWxfZGYuY29sdW1ucyA9IFtmbG9hdChhLnNwbGl0KCdfcmVhbCcpWzBdKSBmb3IgYSBpbiByZWFsX2RmLmNvbHVtbnNdCgogICAgaW1hZyA9IFthIGZvciBhIGluIFpfY3N2LmNvbHVtbnMgaWYgJ2ltYWcnIGluIGFdCiAgICBpbWFnX2RmID0gWl9jc3ZbaW1hZ10KICAgIGltYWdfZGYuY29sdW1ucyA9IFtmbG9hdChhLnNwbGl0KCdfaW1hZycpWzBdKSBmb3IgYSBpbiBpbWFnX2RmLmNvbHVtbnNdCgogICAgWiA9IHJlYWxfZGYgKyBpbWFnX2RmKjFqCgogICAgbWFzayA9IFtmIGZvciBmLCByLCBpIGluIGZpdF0KICAgIFogPSBaLmxvY1tzb3J0ZWRfcmVzdWx0c1sncnVuJ10ubWFwKGludCkudmFsdWVzLCBtYXNrXQoKICAgIGZ1bGxfUCA9IHBkLnJlYWRfY3N2KCcuL2FwcGxpY2F0aW9uL3N0YXRpYy9kYXRhL21vZGVsX3J1bnMudHh0JykKICAgIGZ1bGxfUC5pbmRleCA9IGZ1bGxfUFsncnVuJ10KICAgIFAgPSBmdWxsX1AubG9jW3NvcnRlZF9yZXN1bHRzWydydW4nXS5tYXAoaW50KS52YWx1ZXNdCgogICAgdG9fc2tpcCA9IFsnZDJVZGNwMl9uZWcnLCAnZDJVZGNwMl9wb3MnLCAnZDNVZGNwM19uZWcnLCAnZDNVZGNwM19wb3MnXQoKICAgIG1hc2sgPSBbYyBmb3IgYyBpbiBQLmNvbHVtbnMgaWYgYy5zcGxpdCgnWycpWzBdIG5vdCBpbiB0b19za2lwXQogICAgUCA9IFAubG9jWzosIG1hc2tdCgogICAgZnVsbF9yZXN1bHRzID0gW10KCiAgICBmb3IgaSwgc3BlY3RydW0gaW4gWi5pdGVycm93cygpOgoKICAgICAgICBwYXJhbWV0ZXJzID0gW10KCiAgICAgICAgYXJlYSA9IHNvcnRlZF9yZXN1bHRzWydhcmVhJ10ubG9jW2ldCiAgICAgICAgY29udGFjdF9yZXNpc3RhbmNlID0gc29ydGVkX3Jlc3VsdHNbJ2NvbnRhY3RfcmVzaXN0YW5jZSddLmxvY1tpXQogICAgICAgIHJlc2lkdWFsID0gc29ydGVkX3Jlc3VsdHNbJ3Jlc2lkdWFsJ10ubG9jW2ldCgogICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHsibmFtZSI6ICJmaXQgcGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogJ3s6LjRlfScuZm9ybWF0KGFyZWEqMWU0KX0pCgogICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHsibmFtZSI6ICJydW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBzdHIoUC5sb2NbaSwgJ3J1biddKX0pCgogICAgICAgIGZvciBwIGluIFAuY29sdW1uc1sxOl06CiAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHsibmFtZSI6IHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5pdHMiOiBwLnNwbGl0KCdbJylbLTFdLnN0cmlwKCddJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAnezouNGV9Jy5mb3JtYXQoUC5sb2NbaSwgcF0pfSkKCiAgICAgICAgZnVsbF9yZXN1bHRzLmFwcGVuZCh7InJ1biI6IGludChpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJlcSI6IFouY29sdW1ucy52YWx1ZXMudG9saXN0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWwiOiBzcGVjdHJ1bS5hcHBseShucC5yZWFsKS52YWx1ZXMudG9saXN0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltYWciOiBzcGVjdHJ1bS5hcHBseShucC5pbWFnKS52YWx1ZXMudG9saXN0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBwYXJhbWV0ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb250YWN0X3Jlc2lzdGFuY2UiOiBjb250YWN0X3Jlc2lzdGFuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZWEiOiBhcmVhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXNpZHVhbCI6IHJlc2lkdWFsfSkKCiAgICBiZXN0X2ZpdCA9IHNvcnRlZF9yZXN1bHRzWydydW4nXS5pbG9jWzBdCiAgICBwYXJhbV9TZXJpZXMgPSBQLmxvY1tiZXN0X2ZpdF0KCiAgICBwMmRfcmVzaWR1YWxzID0gc29ydGVkX3Jlc3VsdHMudmFsdWVzLnRvbGlzdCgpCgogICAgcGFyYW1ldGVycyA9IFtdCiAgICBwYXJhbWV0ZXJzLmFwcGVuZCh7Im5hbWUiOiAiZml0IHBhcmFtZXRlciIsICJ1bml0cyI6ICJjbV4yIiwKICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBzb3J0ZWRfcmVzdWx0c1snYXJlYSddLmlsb2NbMF0qMWU0LAogICAgICAgICAgICAgICAgICAgICAgICJzZW5zaXRpdml0eSI6ICJ4In0pCgogICAgZm9yIGksIHBhcmFtZXRlciBpbiBlbnVtZXJhdGUocGFyYW1fU2VyaWVzLmluZGV4KToKICAgICAgICBpZiBwYXJhbWV0ZXIuc3BsaXQoJ1snKVswXSBub3QgaW4gdG9fc2tpcDoKICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoeyJuYW1lIjogcGFyYW1ldGVyLnNwbGl0KCdbJylbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5pdHMiOiBwYXJhbWV0ZXIuc3BsaXQoJ1snKVstMV0uc3RyaXAoIl0iKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHBhcmFtX1Nlcmllcy5pbG9jW2ldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbnNpdGl2aXR5IjogIngifSkKCiAgICByZXR1cm4ganNvbmlmeShmaXQ9Zml0LCBwYXJhbWV0ZXJzPXBhcmFtZXRlcnMsIHJlc3VsdHM9cDJkX3Jlc2lkdWFscywKICAgICAgICAgICAgICAgICAgIGZpdF9wb2ludHM9Zml0X3BvaW50cywgZnVsbF9yZXN1bHRzPWZ1bGxfcmVzdWx0cykKCgpkZWYgdG9fYXJyYXkoaW5wdXQpOgogICAgIiIiIHBhcnNlIHN0cmluZ3Mgb2YgZGF0YSBmcm9tIGFqYXggcmVxdWVzdHMgdG8gcmV0dXJuCgogICAgIiIiCgogICAgdHJ5OgogICAgICAgIGlucHV0ID0gaW5wdXQuZGVjb2RlKCJ1dGYtOCIpCiAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgcGFzcwoKICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZSgnXHJcbicsICcsJykKICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZSgnXG4nLCAnLCcpCiAgICBjb2wwID0gW2Zsb2F0KHgpIGZvciB4IGluIGlucHV0LnNwbGl0KCcsJylbMDotMTozXV0KICAgIGNvbDEgPSBbZmxvYXQoeCkgZm9yIHggaW4gaW5wdXQuc3BsaXQoJywnKVsxOi0xOjNdXQogICAgY29sMiA9IFtmbG9hdCh4KSBmb3IgeCBpbiBpbnB1dC5zcGxpdCgnLCcpWzI6LTE6M11dCgogICAgcmV0dXJuIGxpc3QoemlwKGNvbDAsIGNvbDEsIGNvbDIpKQo8fGZpbV9zdWZmaXh8PgpAYXBwbGljYXRpb24ucm91dGUoJy9nZXRVcGxvYWREYXRhJywgbWV0aG9kcz1bJ1BPU1QnXSkKZGVmIGdldFVwbG9hZERhdGEoKToKICAgICIiIiBHZXRzIHVwbG9hZGVkIGRhdGEgIiIiCiAgICBmID0gcmVxdWVzdC5maWxlc1snZGF0YSddCjx8ZmltX2VuZHw+"]
["ec1739bf7fea149420fe985af6dcc83c95a02d13-1","ec1739bf7fea149420fe985af6dcc83c95a02d13","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIiIiVW5pdCB0ZXN0IHBhY2thZ2UgZm9yIGFzeW5jaW9fbGVhcm4uIiIiCjx8ZmltX2VuZHw+"]
["ec1739bf7fea149420fe985af6dcc83c95a02d13-2","ec1739bf7fea149420fe985af6dcc83c95a02d13","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiIlVuaXQgdGVzdCBwYWNrYWdlIGZvciBhc3luY2lvX2xlYXJuLiIiIgo8fGZpbV9lbmR8Pg=="]
["ec1739bf7fea149420fe985af6dcc83c95a02d13-3","ec1739bf7fea149420fe985af6dcc83c95a02d13","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiIlVuaXQgdGVzdCBwYWNrYWdlIGZvciBhc3luY2lvX2xlYXJuLiIiIgo8fGZpbV9lbmR8Pg=="]
["ec1739bf7fea149420fe985af6dcc83c95a02d13-4","ec1739bf7fea149420fe985af6dcc83c95a02d13","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIiIiVW5pdCB0ZXN0IHBhY2thZ2UgZm9yIGFzeW5jaW9fbGVhcm4uIiIiCjx8ZmltX2VuZHw+"]
["ec1739bf7fea149420fe985af6dcc83c95a02d13-5","ec1739bf7fea149420fe985af6dcc83c95a02d13","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKIiIiVW5pdCB0ZXN0IHBhY2thZ2UgZm9yIGFzeW5jaW9fbGVhcm4uIiIiCjx8ZmltX2VuZHw+"]
["41b330476dda8561a2b867da8e2f626f90c20aeb-1","41b330476dda8561a2b867da8e2f626f90c20aeb","PHxmaW1fcHJlZml4fD4KIyMKIyMgQXBwbGljYXRpb24gU2VjdXJpdHkgVGhyZWF0IEF0dGFjayBNb2RlbGluZyAoQVNUQU0pCiMjCiMjIENvcHlyaWdodCAoQykgMjAxNyBBcHBsaWVkIFZpc2lvbnMgLSBodHRwOi8vc2VjdXJlZGVjaXNpb25zLmNvbQojIwojIyBXcml0dGVuIGJ5IEFzcGVjdCBTZWN1cml0eSAtIGh0dHA6Ly9hc3BlY3RzZWN1cml0eS5jb20KIyMKIyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMjCiMjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIyMKIyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIyMKCiIiIgpQYWdlUmVuZGVyQVBJLnB5CiIiIgoKaW1wb3J0IGJhc2U2NAppbXBvcnQganNvbgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBzb2NrZXQKCmltcG9ydCByZXF1ZXN0cwoKPHxmaW1fZW5kfD4="]
["41b330476dda8561a2b867da8e2f626f90c20aeb-2","41b330476dda8561a2b867da8e2f626f90c20aeb","PHxmaW1fcHJlZml4fD4KIyMKIyMgQXBwbGljYXRpb24gU2VjdXJpdHkgVGhyZWF0IEF0dGFjayBNb2RlbGluZyAoQVNUQU0pCiMjCiMjIENvcHlyaWdodCAoQykgMjAxNyBBcHBsaWVkIFZpc2lvbnMgLSBodHRwOi8vc2VjdXJlZGVjaXNpb25zLmNvbQojIwojIyBXcml0dGVuIGJ5IEFzcGVjdCBTZWN1cml0eSAtIGh0dHA6Ly9hc3BlY3RzZWN1cml0eS5jb20KIyMKIyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMjCiMjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIyMKIyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIyMKCiIiIgpQYWdlUmVuZGVyQVBJLnB5CiIiIgoKaW1wb3J0IGJhc2U2NAppbXBvcnQganNvbgppbXBvcnQgc29ja2V0CgppbXBvcnQgcmVxdWVzdHMKCmZyb20gWHNzTWFwU2V0dGluZ3MgaW1wb3J0IFBIQU5UT01fQUREUkVTUwoKY2xhc3MgUGFnZVJlbmRlckFQSShvYmplY3QpOgogICAgIiIiCiAgICBIYW5kbGVzIHJlcXVlc3RzIHRvIFhzc01hcCdzIHZhcmlvdXMgSmF2YXNjcmlwdCBlbmdpbmVzLAogICAgcmV0dXJuaW5nIHJlbmRlcmVkIHBhZ2UgZGF0YSBmb3IgYW5hbHlzaXMuCiAgICAiIiIKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgZW5zdXJlX2xvY2FsX3NlcnZpY2VfaXNfdXAobmFtZSwgYWRkcmVzcyk6CiAgICAgICAgIiIiCiAgICAgICAgQ2hlY2tzIGlmIGEgbG9jYWwgcmVuZGVyaW5nIHNlcnZpY2UgaXMgdXAsIGVycm9yIG91dCBpZiBub3QuCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIG5hbWUgKHN0cikgLSBuYW1lIG9mIHNlcnZpY2UKICAgICAgICAgICAgYWRkcmVzcyAoc3RyKSAtIHdoZXJlIHRvIGNoZWNrIGZvciBzZXJ2aWNlCiAgICAgICAgIiIiCgogICAgICAgIHNlcnZpY2VfcG9ydCA9IGludCgnJy5qb2luKGMgZm9yIGMgaW4gYWRkcmVzcy5zcGxpdCgnOicpWy0xXSBpZiBjLmlzZGlnaXQoKSkpCiAgICAgICAgc2VydmljZV91cCA9IEZhbHNlCgogICAgICAgIHRlc3Rfc29ja2V0ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHRlc3Rfc29ja2V0LmJpbmQoKCcxMjcuMC4wLjEnLCBzZXJ2aWNlX3BvcnQpKQogICAgICAgICAgICB0ZXN0X3NvY2tldC5jbG9zZSgpCiAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKICAgICAgICAgICAgIyBDb3VsZCBub3QgYmluZCB0byBwb3J0LCBhc3N1bWUgc2VydmljZSBpcyB1cCB0aGVyZQogICAgICAgICAgICBzZXJ2aWNlX3VwID0gVHJ1ZQoKICAgICAgICBpZiBub3Qgc2VydmljZV91cDoKICAgICAgICAgICAgbXNnID0gbmFtZSArICcgZG9lcyBub3Qgc2VlbSB0byBiZSBydW5uaW5nIGF0ICcgKyBhZGRyZXNzCiAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihtc2cpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHJlbmRlcl9wYWdlX3dpdGhfcGhhbnRvbShtZXRob2QsIHVybCwgYm9keSwgaGVhZGVycywgY29va2llcywgcGFnZUV2ZW50cz1GYWxzZSk6CiAgICAgICAgIiIiCiAgICAgICAgU2VuZCByZXF1ZXN0IHBhcmFtZXRlcnMgdG8gUGhhbnRvbUpTIGVuZ2luZSBhbmQgZ2V0IHJlbmRlcmVkIHBhZ2Ugb3V0cHV0LgoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICAob2JqKQoKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJ3BhZ2VfaHRtbCcgOiBzdHJpbmcgb2YgcGFnZSdzIHJlbmRlcmVkIGh0bWwKICAgICAgICAgICAgICAgICdwYWdlX2Vycm9ycycgOiBsaXN0IG9mIHN0cmluZ3Mgb2YgamF2YXNjcmlwdCBlcnJvcigpCiAgICAgICAgICAgICAgICAncGFnZV9jb25zb2xlX21lc3NhZ2UnIDogbGlzdCBvZiBzdHJpbmdzIG9mIGphdmFzY3JpcHQgY29uc29sZS5sb2coKQogICAgICAgICAgICAgICAgJ3BhZ2VfY29uZmlybXMnIDogbGlzdCBvZiBzdHJpbmdzIG9mIGphdmFzY3JpcHQgY29uZmlybSgpCiAgICAgICAgICAgICAgICAncGFnZV9wcm9tcHRzJyA6IGxpc3Qgb2Ygc3RyaW5ncyBvZiBqYXZhc2NyaXB0IHByb21wdCgpCiAgICAgICAgICAgIH0KICAgICAgICAiIiIKCiAgICAgICAgdSA9ICd1dGYtOCcKCiAgICAgICAgaW5wdXRzID0ge30KCiAgICAgICAgaW5wdXRzWydtZXRob2QnXSA9IG1ldGhvZAogICAgICAgIGlucHV0c1sndXJsJ10gPSBiYXNlNjQuYjY0ZW5jb2RlKGJ5dGVzKHVybCwgdSkpCgogICAgICAgIGlmIGJvZHkgYW5kIGJvZHkgIT0gJyc6CiAgICAgICAgICAgIGlucHV0c1snYm9keSddID0gYmFzZTY0LmI2NGVuY29kZShieXRlcyhib2R5LCB1KSkKCiAgICAgICAgaWYgaGVhZGVycyBvciBtZXRob2QgPT0gJ1BPU1QnOgogICAgICAgICAgICBpZiBub3QgaGVhZGVyczoKICAgICAgICAgICAgICAgIGlucHV0c1snaGVhZGVycyddID0ge30KICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGlucHV0c1snaGVhZGVycyddID0gaGVhZGVycwogICAgICAgICAgICBpZiBtZXRob2QgPT0gJ1BPU1QnOgogICAgICAgICAgICAgICAgaW5wdXRzWydoZWFkZXJzJ11bJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcKICAgICAgICAgICAgaW5wdXRzWydoZWFkZXJzJ10gPSBiYXNlNjQuYjY0ZW5jb2RlKGJ5dGVzKGpzb24uZHVtcHMoaW5wdXRzWydoZWFkZXJzJ10pLCB1KSkKCiAgICAgICAgaWYgY29va2llczoKICAgICAgICAgICAgaW5wdXRzWydjb29raWVzJ10gPSBiYXNlNjQuYjY0ZW5jb2RlKGJ5dGVzKGpzb24uZHVtcHMoY29va2llcyksIHUpKQoKICAgICAgICBpbnB1dHNbJ3Byb3Zva2VQYWdlRXZlbnRzJ10gPSBUcnVlCgogICAgICAgIGlmICcxMjcuMC4wLjEnIGluIFBIQU5UT01fQUREUkVTUyBvciAnbG9jYWxob3N0JyBpbiBQSEFOVE9NX0FERFJFU1M6CiAgICAgICAgICAgIFBhZ2VSZW5kZXJBUEkuZW5zdXJlX2xvY2FsX3NlcnZpY2VfaXNfdXAoJ1BoYW50b21KUyByZW5kZXJpbmcgZW5naW5lJywgUEhBTlRPTV9BRERSRVNTKQoKICAgICAgICByID0gcmVxdWVzdHMucG9zdChQSEFOVE9NX0FERFJFU1MsIGRhdGE9aW5wdXRzKQogICAgICAgIHIuY29ubmVjdGlvbi5jbG9zZSgpCgogICAgICAgIHJlbmRlcmVkX3BhZ2Vfb3V0cHV0ID0gci5qc29uKCkKCiAgICAgICAgb3V0cHV0ID0ge30KCiAgICAgICAgdHJ5OgogICAgICAgICAgcGFnZV9odG1sID0gYmFzZTY0LmI2NGRlY29kZShyZW5kZXJlZF9wYWdlX291dHB1dFsnaHRtbCddKS5kZWNvZGUodSkKICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yIGFzIGU6CiAgICAgICAgICBwYWdlX2h0bWwgPSBiYXNlNjQuZGVjb2RlYnl0ZXMoYnl0ZXMocmVuZGVyZWRfcGFnZV9vdXRwdXRbJ2h0bWwnXSwgdSkpCiAgICAgICAgb3V0cHV0WydwYWdlX2h0bWwnXSA9IHBhZ2VfaHRtbAoKICAgICAgICBwYWdlX2Vycm9ycyA9IGJhc2U2NC5iNjRkZWNvZGUocmVuZGVyZWRfcGFnZV9vdXRwdXRbJ2Vycm9ycyddKS5kZWNvZGUodSkKICAgICAgICBwYWdlX2Vycm9ycyA9IGpzb24ubG9hZHMocGFnZV9lcnJvcnMpCiAgICAgICAgb3V0cHV0WydwYWdlX2Vycm9ycyddID0gcGFnZV9lcnJvcnMKCiAgICAgICAgcGFnZV9jb25zb2xlX21zZ3MgPSBiYXNlNjQuYjY0ZGVjb2RlKHJlbmRlcmVkX3BhZ2Vfb3V0cHV0Wydjb25zb2xlTWVzc2FnZXMnXSkuZGVjb2RlKHUpCiAgICAgICAgcGFnZV9jb25zb2xlX21zZ3MgPSBqc29uLmxvYWRzKHBhZ2VfY29uc29sZV9tc2dzKQogICAgICAgIG91dHB1dFsncGFnZV9jb25zb2xlX21lc3NhZ2VzJ10gPSBwYWdlX2NvbnNvbGVfbXNncwoKPHxmaW1faG9sZXw+CiAgICAgICAgcGFnZV9jb25maXJtcyA9IGJhc2U2NC5iNjRkZWNvZGUocmVuZGVyZWRfcGFnZV9vdXRwdXRbJ2NvbmZpcm1zJ10pLmRlY29kZSh1KQogICAgICAgIHBhZ2VfY29uZmlybXMgPSBqc29uLmxvYWRzKHBhZ2VfY29uZmlybXMpCiAgICAgICAgb3V0cHV0WydwYWdlX2NvbmZpcm1zJ10gPSBwYWdlX2NvbmZpcm1zCgogICAgICAgIHBhZ2VfcHJvbXB0cyA9IGJhc2U2NC5iNjRkZWNvZGUocmVuZGVyZWRfcGFnZV9vdXRwdXRbJ3Byb21wdHMnXSkuZGVjb2RlKHUpCiAgICAgICAgcGFnZV9wcm9tcHRzID0ganNvbi5sb2FkcyhwYWdlX3Byb21wdHMpCiAgICAgICAgb3V0cHV0WydwYWdlX3Byb21wdHMnXSA9IHBhZ2VfcHJvbXB0cwoKICAgICAgICByZXR1cm4gb3V0cHV0Cjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcGFnZV9hbGVydHMgPSBiYXNlNjQuYjY0ZGVjb2RlKHJlbmRlcmVkX3BhZ2Vfb3V0cHV0WydhbGVydHMnXSkuZGVjb2RlKHUpCiAgICAgICAgcGFnZV9hbGVydHMgPSBqc29uLmxvYWRzKHBhZ2VfYWxlcnRzKQogICAgICAgIG91dHB1dFsncGFnZV9hbGVydHMnXSA9IHBhZ2VfYWxlcnRzCgo8fGZpbV9lbmR8Pg=="]
["41b330476dda8561a2b867da8e2f626f90c20aeb-3","41b330476dda8561a2b867da8e2f626f90c20aeb","PHxmaW1fcHJlZml4fD4KIyMKIyMgQXBwbGljYXRpb24gU2VjdXJpdHkgVGhyZWF0IEF0dGFjayBNb2RlbGluZyAoQVNUQU0pCiMjCiMjIENvcHlyaWdodCAoQykgMjAxNyBBcHBsaWVkIFZpc2lvbnMgLSBodHRwOi8vc2VjdXJlZGVjaXNpb25zLmNvbQojIwojIyBXcml0dGVuIGJ5IEFzcGVjdCBTZWN1cml0eSAtIGh0dHA6Ly9hc3BlY3RzZWN1cml0eS5jb20KIyMKIyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMjCiMjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIyMKIyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIyMKCiIiIgpQYWdlUmVuZGVyQVBJLnB5CiIiIgoKaW1wb3J0IGJhc2U2NAppbXBvcnQganNvbgppbXBvcnQgc29ja2V0Cgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCByZXF1ZXN0cwoKZnJvbSBYc3NNYXBTZXR0aW5ncyBpbXBvcnQgUEhBTlRPTV9BRERSRVNTCgo8fGZpbV9lbmR8Pg=="]
["41b330476dda8561a2b867da8e2f626f90c20aeb-4","41b330476dda8561a2b867da8e2f626f90c20aeb","PHxmaW1fcHJlZml4fD4KIyMKIyMgQXBwbGljYXRpb24gU2VjdXJpdHkgVGhyZWF0IEF0dGFjayBNb2RlbGluZyAoQVNUQU0pCiMjCiMjIENvcHlyaWdodCAoQykgMjAxNyBBcHBsaWVkIFZpc2lvbnMgLSBodHRwOi8vc2VjdXJlZGVjaXNpb25zLmNvbQojIwojIyBXcml0dGVuIGJ5IEFzcGVjdCBTZWN1cml0eSAtIGh0dHA6Ly9hc3BlY3RzZWN1cml0eS5jb20KIyMKIyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMjCiMjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIyMKIyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIyMKCiIiIgpQYWdlUmVuZGVyQVBJLnB5CiIiIgoKaW1wb3J0IGJhc2U2NAppbXBvcnQganNvbgppbXBvcnQgc29ja2V0CgppbXBvcnQgcmVxdWVzdHMKCmZyb20gWHNzTWFwU2V0dGluZ3MgaW1wb3J0IFBIQU5UT01fQUREUkVTUwoKY2xhc3MgUGFnZVJlbmRlckFQSShvYmplY3QpOgogICAgIiIiCiAgICBIYW5kbGVzIHJlcXVlc3RzIHRvIFhzc01hcCdzIHZhcmlvdXMgSmF2YXNjcmlwdCBlbmdpbmVzLAogICAgcmV0dXJuaW5nIHJlbmRlcmVkIHBhZ2UgZGF0YSBmb3IgYW5hbHlzaXMuCiAgICAiIiIKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgZW5zdXJlX2xvY2FsX3NlcnZpY2VfaXNfdXAobmFtZSwgYWRkcmVzcyk6CiAgICAgICAgIiIiCiAgICAgICAgQ2hlY2tzIGlmIGEgbG9jYWwgcmVuZGVyaW5nIHNlcnZpY2UgaXMgdXAsIGVycm9yIG91dCBpZiBub3QuCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIG5hbWUgKHN0cikgLSBuYW1lIG9mIHNlcnZpY2UKICAgICAgICAgICAgYWRkcmVzcyAoc3RyKSAtIHdoZXJlIHRvIGNoZWNrIGZvciBzZXJ2aWNlCiAgICAgICAgIiIiCgogICAgICAgIHNlcnZpY2VfcG9ydCA9IGludCgnJy5qb2luKGMgZm9yIGMgaW4gYWRkcmVzcy5zcGxpdCgnOicpWy0xXSBpZiBjLmlzZGlnaXQoKSkpCiAgICAgICAgc2VydmljZV91cCA9IEZhbHNlCgogICAgICAgIHRlc3Rfc29ja2V0ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHRlc3Rfc29ja2V0LmJpbmQoKCcxMjcuMC4wLjEnLCBzZXJ2aWNlX3BvcnQpKQogICAgICAgICAgICB0ZXN0X3NvY2tldC5jbG9zZSgpCiAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKICAgICAgICAgICAgIyBDb3VsZCBub3QgYmluZCB0byBwb3J0LCBhc3N1bWUgc2VydmljZSBpcyB1cCB0aGVyZQogICAgICAgICAgICBzZXJ2aWNlX3VwID0gVHJ1ZQoKICAgICAgICBpZiBub3Qgc2VydmljZV91cDoKICAgICAgICAgICAgbXNnID0gbmFtZSArICcgZG9lcyBub3Qgc2VlbSB0byBiZSBydW5uaW5nIGF0ICcgKyBhZGRyZXNzCiAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihtc2cpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHJlbmRlcl9wYWdlX3dpdGhfcGhhbnRvbShtZXRob2QsIHVybCwgYm9keSwgaGVhZGVycywgY29va2llcywgcGFnZUV2ZW50cz1GYWxzZSk6CiAgICAgICAgIiIiCiAgICAgICAgU2VuZCByZXF1ZXN0IHBhcmFtZXRlcnMgdG8gUGhhbnRvbUpTIGVuZ2luZSBhbmQgZ2V0IHJlbmRlcmVkIHBhZ2Ugb3V0cHV0LgoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICAob2JqKQoKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJ3BhZ2VfaHRtbCcgOiBzdHJpbmcgb2YgcGFnZSdzIHJlbmRlcmVkIGh0bWwKICAgICAgICAgICAgICAgICdwYWdlX2Vycm9ycycgOiBsaXN0IG9mIHN0cmluZ3Mgb2YgamF2YXNjcmlwdCBlcnJvcigpCiAgICAgICAgICAgICAgICAncGFnZV9jb25zb2xlX21lc3NhZ2UnIDogbGlzdCBvZiBzdHJpbmdzIG9mIGphdmFzY3JpcHQgY29uc29sZS5sb2coKQogICAgICAgICAgICAgICAgJ3BhZ2VfY29uZmlybXMnIDogbGlzdCBvZiBzdHJpbmdzIG9mIGphdmFzY3JpcHQgY29uZmlybSgpCiAgICAgICAgICAgICAgICAncGFnZV9wcm9tcHRzJyA6IGxpc3Qgb2Ygc3RyaW5ncyBvZiBqYXZhc2NyaXB0IHByb21wdCgpCiAgICAgICAgICAgIH0KICAgICAgICAiIiIKCiAgICAgICAgdSA9ICd1dGYtOCcKCiAgICAgICAgaW5wdXRzID0ge30KCiAgICAgICAgaW5wdXRzWydtZXRob2QnXSA9IG1ldGhvZAogICAgICAgIGlucHV0c1sndXJsJ10gPSBiYXNlNjQuYjY0ZW5jb2RlKGJ5dGVzKHVybCwgdSkpCgogICAgICAgIGlmIGJvZHkgYW5kIGJvZHkgIT0gJyc6CiAgICAgICAgICAgIGlucHV0c1snYm9keSddID0gYmFzZTY0LmI2NGVuY29kZShieXRlcyhib2R5LCB1KSkKCiAgICAgICAgaWYgaGVhZGVycyBvciBtZXRob2QgPT0gJ1BPU1QnOgogICAgICAgICAgICBpZiBub3QgaGVhZGVyczoKICAgICAgICAgICAgICAgIGlucHV0c1snaGVhZGVycyddID0ge30KICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGlucHV0c1snaGVhZGVycyddID0gaGVhZGVycwogICAgICAgICAgICBpZiBtZXRob2QgPT0gJ1BPU1QnOgogICAgICAgICAgICAgICAgaW5wdXRzWydoZWFkZXJzJ11bJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcKICAgICAgICAgICAgaW5wdXRzWydoZWFkZXJzJ10gPSBiYXNlNjQuYjY0ZW5jb2RlKGJ5dGVzKGpzb24uZHVtcHMoaW5wdXRzWydoZWFkZXJzJ10pLCB1KSkKCiAgICAgICAgaWYgY29va2llczoKICAgICAgICAgICAgaW5wdXRzWydjb29raWVzJ10gPSBiYXNlNjQuYjY0ZW5jb2RlKGJ5dGVzKGpzb24uZHVtcHMoY29va2llcyksIHUpKQoKICAgICAgICBpbnB1dHNbJ3Byb3Zva2VQYWdlRXZlbnRzJ10gPSBUcnVlCgogICAgICAgIGlmICcxMjcuMC4wLjEnIGluIFBIQU5UT01fQUREUkVTUyBvciAnbG9jYWxob3N0JyBpbiBQSEFOVE9NX0FERFJFU1M6CiAgICAgICAgICAgIFBhZ2VSZW5kZXJBUEkuZW5zdXJlX2xvY2FsX3NlcnZpY2VfaXNfdXAoJ1BoYW50b21KUyByZW5kZXJpbmcgZW5naW5lJywgUEhBTlRPTV9BRERSRVNTKQoKICAgICAgICByID0gcmVxdWVzdHMucG9zdChQSEFOVE9NX0FERFJFU1MsIGRhdGE9aW5wdXRzKQo8fGZpbV9ob2xlfD4KICAgICAgICBvdXRwdXQgPSB7fQoKICAgICAgICB0cnk6CiAgICAgICAgICBwYWdlX2h0bWwgPSBiYXNlNjQuYjY0ZGVjb2RlKHJlbmRlcmVkX3BhZ2Vfb3V0cHV0WydodG1sJ10pLmRlY29kZSh1KQogICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3IgYXMgZToKICAgICAgICAgIHBhZ2VfaHRtbCA9IGJhc2U2NC5kZWNvZGVieXRlcyhieXRlcyhyZW5kZXJlZF9wYWdlX291dHB1dFsnaHRtbCddLCB1KSkKICAgICAgICBvdXRwdXRbJ3BhZ2VfaHRtbCddID0gcGFnZV9odG1sCgogICAgICAgIHBhZ2VfZXJyb3JzID0gYmFzZTY0LmI2NGRlY29kZShyZW5kZXJlZF9wYWdlX291dHB1dFsnZXJyb3JzJ10pLmRlY29kZSh1KQogICAgICAgIHBhZ2VfZXJyb3JzID0ganNvbi5sb2FkcyhwYWdlX2Vycm9ycykKICAgICAgICBvdXRwdXRbJ3BhZ2VfZXJyb3JzJ10gPSBwYWdlX2Vycm9ycwoKICAgICAgICBwYWdlX2NvbnNvbGVfbXNncyA9IGJhc2U2NC5iNjRkZWNvZGUocmVuZGVyZWRfcGFnZV9vdXRwdXRbJ2NvbnNvbGVNZXNzYWdlcyddKS5kZWNvZGUodSkKICAgICAgICBwYWdlX2NvbnNvbGVfbXNncyA9IGpzb24ubG9hZHMocGFnZV9jb25zb2xlX21zZ3MpCiAgICAgICAgb3V0cHV0WydwYWdlX2NvbnNvbGVfbWVzc2FnZXMnXSA9IHBhZ2VfY29uc29sZV9tc2dzCgogICAgICAgIHBhZ2VfYWxlcnRzID0gYmFzZTY0LmI2NGRlY29kZShyZW5kZXJlZF9wYWdlX291dHB1dFsnYWxlcnRzJ10pLmRlY29kZSh1KQogICAgICAgIHBhZ2VfYWxlcnRzID0ganNvbi5sb2FkcyhwYWdlX2FsZXJ0cykKICAgICAgICBvdXRwdXRbJ3BhZ2VfYWxlcnRzJ10gPSBwYWdlX2FsZXJ0cwoKICAgICAgICBwYWdlX2NvbmZpcm1zID0gYmFzZTY0LmI2NGRlY29kZShyZW5kZXJlZF9wYWdlX291dHB1dFsnY29uZmlybXMnXSkuZGVjb2RlKHUpCiAgICAgICAgcGFnZV9jb25maXJtcyA9IGpzb24ubG9hZHMocGFnZV9jb25maXJtcykKICAgICAgICBvdXRwdXRbJ3BhZ2VfY29uZmlybXMnXSA9IHBhZ2VfY29uZmlybXMKCiAgICAgICAgcGFnZV9wcm9tcHRzID0gYmFzZTY0LmI2NGRlY29kZShyZW5kZXJlZF9wYWdlX291dHB1dFsncHJvbXB0cyddKS5kZWNvZGUodSkKICAgICAgICBwYWdlX3Byb21wdHMgPSBqc29uLmxvYWRzKHBhZ2VfcHJvbXB0cykKICAgICAgICBvdXRwdXRbJ3BhZ2VfcHJvbXB0cyddID0gcGFnZV9wcm9tcHRzCgogICAgICAgIHJldHVybiBvdXRwdXQKPHxmaW1fc3VmZml4fD4KICAgICAgICByLmNvbm5lY3Rpb24uY2xvc2UoKQoKICAgICAgICByZW5kZXJlZF9wYWdlX291dHB1dCA9IHIuanNvbigpCgo8fGZpbV9lbmR8Pg=="]
["41b330476dda8561a2b867da8e2f626f90c20aeb-5","41b330476dda8561a2b867da8e2f626f90c20aeb","PHxmaW1fcHJlZml4fD4KIyMKIyMgQXBwbGljYXRpb24gU2VjdXJpdHkgVGhyZWF0IEF0dGFjayBNb2RlbGluZyAoQVNUQU0pCiMjCiMjIENvcHlyaWdodCAoQykgMjAxNyBBcHBsaWVkIFZpc2lvbnMgLSBodHRwOi8vc2VjdXJlZGVjaXNpb25zLmNvbQojIwojIyBXcml0dGVuIGJ5IEFzcGVjdCBTZWN1cml0eSAtIGh0dHA6Ly9hc3BlY3RzZWN1cml0eS5jb20KIyMKIyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMjCiMjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIyMKIyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIyMKCiIiIgpQYWdlUmVuZGVyQVBJLnB5CiIiIgoKaW1wb3J0IGJhc2U2NAppbXBvcnQganNvbgppbXBvcnQgc29ja2V0CgppbXBvcnQgcmVxdWVzdHMKCmZyb20gWHNzTWFwU2V0dGluZ3MgaW1wb3J0IFBIQU5UT01fQUREUkVTUwoKY2xhc3MgUGFnZVJlbmRlckFQSShvYmplY3QpOgogICAgIiIiCiAgICBIYW5kbGVzIHJlcXVlc3RzIHRvIFhzc01hcCdzIHZhcmlvdXMgSmF2YXNjcmlwdCBlbmdpbmVzLAogICAgcmV0dXJuaW5nIHJlbmRlcmVkIHBhZ2UgZGF0YSBmb3IgYW5hbHlzaXMuCiAgICAiIiIKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgZW5zdXJlX2xvY2FsX3NlcnZpY2VfaXNfdXAobmFtZSwgYWRkcmVzcyk6CiAgICAgICAgIiIiCiAgICAgICAgQ2hlY2tzIGlmIGEgbG9jYWwgcmVuZGVyaW5nIHNlcnZpY2UgaXMgdXAsIGVycm9yIG91dCBpZiBub3QuCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIG5hbWUgKHN0cikgLSBuYW1lIG9mIHNlcnZpY2UKICAgICAgICAgICAgYWRkcmVzcyAoc3RyKSAtIHdoZXJlIHRvIGNoZWNrIGZvciBzZXJ2aWNlCiAgICAgICAgIiIiCgogICAgICAgIHNlcnZpY2VfcG9ydCA9IGludCgnJy5qb2luKGMgZm9yIGMgaW4gYWRkcmVzcy5zcGxpdCgnOicpWy0xXSBpZiBjLmlzZGlnaXQoKSkpCiAgICAgICAgc2VydmljZV91cCA9IEZhbHNlCgogICAgICAgIHRlc3Rfc29ja2V0ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHRlc3Rfc29ja2V0LmJpbmQoKCcxMjcuMC4wLjEnLCBzZXJ2aWNlX3BvcnQpKQogICAgICAgICAgICB0ZXN0X3NvY2tldC5jbG9zZSgpCiAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKICAgICAgICAgICAgIyBDb3VsZCBub3QgYmluZCB0byBwb3J0LCBhc3N1bWUgc2VydmljZSBpcyB1cCB0aGVyZQogICAgICAgICAgICBzZXJ2aWNlX3VwID0gVHJ1ZQoKICAgICAgICBpZiBub3Qgc2VydmljZV91cDoKICAgICAgICAgICAgbXNnID0gbmFtZSArICcgZG9lcyBub3Qgc2VlbSB0byBiZSBydW5uaW5nIGF0ICcgKyBhZGRyZXNzCiAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihtc2cpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHJlbmRlcl9wYWdlX3dpdGhfcGhhbnRvbShtZXRob2QsIHVybCwgYm9keSwgaGVhZGVycywgY29va2llcywgcGFnZUV2ZW50cz1GYWxzZSk6CiAgICAgICAgIiIiCiAgICAgICAgU2VuZCByZXF1ZXN0IHBhcmFtZXRlcnMgdG8gUGhhbnRvbUpTIGVuZ2luZSBhbmQgZ2V0IHJlbmRlcmVkIHBhZ2Ugb3V0cHV0Lgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIChvYmopCgo8fGZpbV9lbmR8Pg=="]
["d446350892a13e30956fb8bf143929714df14d49-1","d446350892a13e30956fb8bf143929714df14d49","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIwojIEZpbHRlcnMgdXNlZCBieSB0aGUgT3BlblNTSCByb2xlcwojCiMgRmFicml6aW8gQ29sb25uYSA8Y29sb2ZhYnJpeEB0aW4uaXQ+IC0gMzEvMDUvMjAxNwojCgppbXBvcnQgcmUKaW1wb3J0IHB3ZAppbXBvcnQgZ2V0cGFzcwoKCmRlZiBhdXRoZmlsZV9yZXBsYWNlKHZhbHVlLCBnZXRlbnRfaW5mbyk6CiAgICAiIiIKICAgIFJlcGxhY2UgZnVuY3Rpb24gZm9yIG9wdGlvbiBBdXRob3JpemVkS2V5c0ZpbGVzCiAgICAiIiIKICAgIHVzZXIgPSBnZXRlbnRfaW5mby5rZXlzKClbMF0KICAgIHVzZXJfaG9tZSA9IGdldGVudF9pbmZvW3VzZXJdWzRdCgogICAgIyBMaXRlcmFsICUKICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgiJSUiLCAiJSIpCiAgICAjIEhvbWUgZGlyZWN0b3J5IG9mIHRoZSB1c2VyIGJlaW5nIGF1dGhlbnRpY2F0ZWQKICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgiJWgiLCB1c2VyX2hvbWUpCiAgICAjIFVzZXJuYW1lIG9mIHRoYXQgdXNlcgogICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCIldSIsIHVzZXIpCiAgICAjIEhvbWUgZGlyZWN0b3J5IHN5bWJvbAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoIn4iLCB1c2VyX2hvbWUpCgogICAgcmV0dXJuIHZhbHVlCgo8fGZpbV9lbmR8Pg=="]
["d446350892a13e30956fb8bf143929714df14d49-2","d446350892a13e30956fb8bf143929714df14d49","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIwojIEZpbHRlcnMgdXNlZCBieSB0aGUgT3BlblNTSCByb2xlcwojCiMgRmFicml6aW8gQ29sb25uYSA8Y29sb2ZhYnJpeEB0aW4uaXQ+IC0gMzEvMDUvMjAxNwojCgppbXBvcnQgcmUKaW1wb3J0IHB3ZAppbXBvcnQgZ2V0cGFzcwoKCmRlZiBhdXRoZmlsZV9yZXBsYWNlKHZhbHVlLCBnZXRlbnRfaW5mbyk6CiAgICAiIiIKICAgIFJlcGxhY2UgZnVuY3Rpb24gZm9yIG9wdGlvbiBBdXRob3JpemVkS2V5c0ZpbGVzCiAgICAiIiIKICAgIHVzZXIgPSBnZXRlbnRfaW5mby5rZXlzKClbMF0KICAgIHVzZXJfaG9tZSA9IGdldGVudF9pbmZvW3VzZXJdWzRdCgogICAgIyBMaXRlcmFsICUKICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgiJSUiLCAiJSIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICMgSG9tZSBkaXJlY3Rvcnkgb2YgdGhlIHVzZXIgYmVpbmcgYXV0aGVudGljYXRlZAogICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCIlaCIsIHVzZXJfaG9tZSkKICAgICMgVXNlcm5hbWUgb2YgdGhhdCB1c2VyCiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoIiV1IiwgdXNlcikKPHxmaW1fZW5kfD4="]
["d446350892a13e30956fb8bf143929714df14d49-3","d446350892a13e30956fb8bf143929714df14d49","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojCiMgRmlsdGVycyB1c2VkIGJ5IHRoZSBPcGVuU1NIIHJvbGVzCiMKIyBGYWJyaXppbyBDb2xvbm5hIDxjb2xvZmFicml4QHRpbi5pdD4gLSAzMS8wNS8yMDE3Cjx8ZmltX2VuZHw+"]
["ec1b4eedc6ea1ecbb6ba8128999165bbb8d74ec7-1","ec1b4eedc6ea1ecbb6ba8128999165bbb8d74ec7","PHxmaW1fcHJlZml4fD4KIyBSZWFkIGRlZi5hc20gZmlsZSBhbmQgY29udmVydCBpdCB0byBhIC5pbmMucGFzIGZpbGUKIyB2MS4wLjIKCmltcG9ydCBzeXMKaW1wb3J0IG50cGF0aAoKI3ByaW50IChzeXMuYXJndikKCmZpbGVuYW1lID0gc3lzLmFyZ3ZbMl0ucmVwbGFjZSgiJyIsJycpCm91dHB1dFBhdGggPSBzeXMuYXJndlsxXS5yZXBsYWNlKCInIiwnJykKCnByZWZpeCA9ICcnCmlmIGxlbihzeXMuYXJndikgPj0gNDoKICBwcmVmaXggPSBzeXMuYXJndlszXS5yZXBsYWNlKCInIiwnJykuc3RyaXAoKQoKd2l0aCBvcGVuKGZpbGVuYW1lKycuYXNtJykgYXMgZmlsZV9pbjoKICAgIGxpbmVzID0gW10KICAgIGZpcnN0Q29uc3QgPSBUcnVlCgogICAgZm9yIGxpbmUgaW4gZmlsZV9pbjoKICAgICAgICAgIyBtb3ZlIGNvbW1lbnRzIGludG8gYSBzZXBhcmF0ZSB2YXIKICAgICAgICAgc3BsaXQgPSBsaW5lLnNwbGl0KCc7JykKICAgICAgICAgbGluZSA9IHNwbGl0WzBdCiAgICAgICAgIGlmIGxlbihzcGxpdCkgPiAxOgogICAgICAgICAgICAgY29tbWVudHMgPSAnJwogICAgICAgICAgICAgaSA9IDEKICAgICAgICAgICAgIHdoaWxlIGkgPCBsZW4oc3BsaXQpOgogICAgICAgICAgICAgICAgIGNvbW1lbnRzID0gY29tbWVudHMgKyAnLy8nICsgc3BsaXRbaV0KICAgICAgICAgICAgICAgICBpICs9IDEKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGNvbW1lbnRzID0gJycKCiAgICAgICAgICMgc2VtaWNvbG9uIGlzIG5lZWRlZCBmb3IgY29uc3QgZXhwcmVzc2lvbgogICAgICAgICBpZiBsaW5lLmZpbmQoJz0nKSAhPSAtMToKICAgICAgICAgICAgIGxpbmUgPSAnICAnICsgcHJlZml4ICsgbGluZS5yc3RyaXAoKSArICc7JwogICAgICAgICAgICAgaWYgZmlyc3RDb25zdDoKPHxmaW1faG9sZXw+CiAgICAgICAgICMgY29tbWVudCAuYnl0ZSBhbmQgLndvcmQgZGVmaW5pdGlvbnMKICAgICAgICAgaWYgKGxpbmUuZmluZCgnLmJ5dGUnKSAhPSAtMSkgb3IgKGxpbmUuZmluZCgnLndvcmQnKSAhPSAtMSk6CiAgICAgICAgICAgICAgICAgcmVzdWx0TGluZSA9ICcvLycgKyBsaW5lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBjaGVjayBmb3IgLmluY2x1ZGUKICAgICAgICAgICAgICAgICBpZiBsaW5lLmZpbmQoJy5pbmNsdWRlICcpICE9IC0xOgogICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCIuaW5jbHVkZSIsICJ7JGluY2x1ZGUiKQogICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCcuYXNtIicsICcuaW5jLnBhcyJ9JykKICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgnIicsICInIikKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0TGluZSA9IGxpbmUKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICByZXN1bHRMaW5lID0gbGluZQoKCiAgICAgICAgIGlmIGxlbihyZXN1bHRMaW5lKSA+IDA6CiAgICAgICAgICAgIHJlc3VsdExpbmUgPSByZXN1bHRMaW5lICsgJyAgJyArIGNvbW1lbnRzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBub3QgZmlyc3RDb25zdDoKICAgICAgICAgICAgICAgIHJlc3VsdExpbmUgPSAnICAnICsgcmVzdWx0TGluZQogICAgICAgICAgICAgcmVzdWx0TGluZSA9IHJlc3VsdExpbmUgKyBjb21tZW50cwoKICAgICAgICAgbGluZXMuYXBwZW5kKHJlc3VsdExpbmUucnN0cmlwKCkgKyAnXG4nKQoKIyB3cml0aW5nIHRvIGZpbGUgCm91dHB1dEZpbGVuYW1lID0gbnRwYXRoLmJhc2VuYW1lKGZpbGVuYW1lKSArICcuaW5jLnBhcycKZmlsZTEgPSBvcGVuKG91dHB1dFBhdGggKyAnXFwnICsgb3V0cHV0RmlsZW5hbWUsICd3JykgCmZpbGUxLndyaXRlbGluZXMobGluZXMpIApmaWxlMS5jbG9zZSgpIAoKCndpdGggb3BlbigiaW5jbHVkZXMucGFzIiwgImEiKSBhcyBmaWxlX29iamVjdDoKICAgIGZpbGVfb2JqZWN0LndyaXRlKCJ7JGluY2x1ZGUgJyIgKyBvdXRwdXRGaWxlbmFtZSArICInfVxuIikKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIGZpcnN0Q29uc3QgPSBGYWxzZQogICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdjb25zdFxuJykKCjx8ZmltX2VuZHw+"]
["ec1b4eedc6ea1ecbb6ba8128999165bbb8d74ec7-2","ec1b4eedc6ea1ecbb6ba8128999165bbb8d74ec7","PHxmaW1fcHJlZml4fD4KIyBSZWFkIGRlZi5hc20gZmlsZSBhbmQgY29udmVydCBpdCB0byBhIC5pbmMucGFzIGZpbGUKIyB2MS4wLjIKCmltcG9ydCBzeXMKaW1wb3J0IG50cGF0aAoKI3ByaW50IChzeXMuYXJndikKCmZpbGVuYW1lID0gc3lzLmFyZ3ZbMl0ucmVwbGFjZSgiJyIsJycpCm91dHB1dFBhdGggPSBzeXMuYXJndlsxXS5yZXBsYWNlKCInIiwnJykKCnByZWZpeCA9ICcnCmlmIGxlbihzeXMuYXJndikgPj0gNDoKICBwcmVmaXggPSBzeXMuYXJndlszXS5yZXBsYWNlKCInIiwnJykuc3RyaXAoKQoKd2l0aCBvcGVuKGZpbGVuYW1lKycuYXNtJykgYXMgZmlsZV9pbjoKICAgIGxpbmVzID0gW10KICAgIGZpcnN0Q29uc3QgPSBUcnVlCgogICAgZm9yIGxpbmUgaW4gZmlsZV9pbjoKICAgICAgICAgIyBtb3ZlIGNvbW1lbnRzIGludG8gYSBzZXBhcmF0ZSB2YXIKICAgICAgICAgc3BsaXQgPSBsaW5lLnNwbGl0KCc7JykKICAgICAgICAgbGluZSA9IHNwbGl0WzBdCiAgICAgICAgIGlmIGxlbihzcGxpdCkgPiAxOgogICAgICAgICAgICAgY29tbWVudHMgPSAnJwogICAgICAgICAgICAgaSA9IDEKICAgICAgICAgICAgIHdoaWxlIGkgPCBsZW4oc3BsaXQpOgogICAgICAgICAgICAgICAgIGNvbW1lbnRzID0gY29tbWVudHMgKyAnLy8nICsgc3BsaXRbaV0KICAgICAgICAgICAgICAgICBpICs9IDEKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGNvbW1lbnRzID0gJycKCiAgICAgICAgICMgc2VtaWNvbG9uIGlzIG5lZWRlZCBmb3IgY29uc3QgZXhwcmVzc2lvbgogICAgICAgICBpZiBsaW5lLmZpbmQoJz0nKSAhPSAtMToKICAgICAgICAgICAgIGxpbmUgPSAnICAnICsgcHJlZml4ICsgbGluZS5yc3RyaXAoKSArICc7JwogICAgICAgICAgICAgaWYgZmlyc3RDb25zdDoKICAgICAgICAgICAgICAgIGZpcnN0Q29uc3QgPSBGYWxzZQogICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdjb25zdFxuJykKCiAgICAgICAgICMgY29tbWVudCAuYnl0ZSBhbmQgLndvcmQgZGVmaW5pdGlvbnMKICAgICAgICAgaWYgKGxpbmUuZmluZCgnLmJ5dGUnKSAhPSAtMSkgb3IgKGxpbmUuZmluZCgnLndvcmQnKSAhPSAtMSk6CiAgICAgICAgICAgICAgICAgcmVzdWx0TGluZSA9ICcvLycgKyBsaW5lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBjaGVjayBmb3IgLmluY2x1ZGUKICAgICAgICAgICAgICAgICBpZiBsaW5lLmZpbmQoJy5pbmNsdWRlICcpICE9IC0xOgogICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCIuaW5jbHVkZSIsICJ7JGluY2x1ZGUiKQogICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCcuYXNtIicsICcuaW5jLnBhcyJ9JykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCciJywgIiciKQogICAgICAgICAgICAgICAgICAgICByZXN1bHRMaW5lID0gbGluZQo8fGZpbV9lbmR8Pg=="]
["d42d7d79656994bfa575dc22fe0116061c4626b0-1","d42d7d79656994bfa575dc22fe0116061c4626b0","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCgpmcm9tIGRqYW5nby5jb250cmliLmNvbnRlbnR0eXBlcy5maWVsZHMgaW1wb3J0IEdlbmVyaWNGb3JlaWduS2V5CmZyb20gZGphbmdvLmNvbnRyaWIuY29udGVudHR5cGVzLm1vZGVscyBpbXBvcnQgQ29udGVudFR5cGUKZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwpmcm9tIGRqYW5nby51dGlscy50aW1lem9uZSBpbXBvcnQgbm93Cgo8fGZpbV9ob2xlfD4KICAgIEdFTlJFUyA9IHsKICAgICAgICAxOiAnRHJhbWEnLAogICAgICAgIDI6ICdDb21pY3MnLAogICAgICAgIDM6ICdPdGhlcicsCiAgICB9CgogICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApICAjIGxvbCwgd2UncmUgbWluaW1hbGlzdHMKICAgIGF1dGhvciA9IG1vZGVscy5Gb3JlaWduS2V5KCdhdXRoLlVzZXInLCBvbl9kZWxldGU9bW9kZWxzLkNBU0NBREUpCiAgICBnZW5yZSA9IG1vZGVscy5Qb3NpdGl2ZUludGVnZXJGaWVsZCgKICAgICAgICBudWxsPVRydWUsCiAgICAgICAgYmxhbms9VHJ1ZSwKICAgICAgICBjaG9pY2VzPUdFTlJFUy5pdGVtcygpLAogICAgKQogICAgd3JpdHRlbiA9IG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9bm93KQogICAgaXNfcHVibGlzaGVkID0gbW9kZWxzLkJvb2xlYW5GaWVsZChkZWZhdWx0PUZhbHNlKQogICAgcmF0aW5nID0gbW9kZWxzLkZsb2F0RmllbGQobnVsbD1UcnVlKQogICAgcHJpY2UgPSBtb2RlbHMuRGVjaW1hbEZpZWxkKG1heF9kaWdpdHM9NywgZGVjaW1hbF9wbGFjZXM9MiwgbnVsbD1UcnVlKQogICAgY29udGVudF90eXBlID0gbW9kZWxzLkZvcmVpZ25LZXkoCiAgICAgICAgQ29udGVudFR5cGUsCiAgICAgICAgbnVsbD1UcnVlLAogICAgICAgIG9uX2RlbGV0ZT1tb2RlbHMuQ0FTQ0FERSwKICAgICAgICBlZGl0YWJsZT1GYWxzZSwKICAgICkKICAgIG9iamVjdF9pZCA9IG1vZGVscy5Qb3NpdGl2ZUludGVnZXJGaWVsZChudWxsPVRydWUsIGVkaXRhYmxlPUZhbHNlKQogICAgY29udGVudF9vYmplY3QgPSBHZW5lcmljRm9yZWlnbktleSgnY29udGVudF90eXBlJywgJ29iamVjdF9pZCcpCgogICAgc2ltaWxhcl9ib29rcyA9IG1vZGVscy5NYW55VG9NYW55RmllbGQoJ0Jvb2snLCBibGFuaz1UcnVlLCByZWxhdGVkX25hbWU9JysnKQoKICAgIG9iamVjdHMgPSBEamFuZ29RTFF1ZXJ5U2V0LmFzX21hbmFnZXIoKQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLm5hbWUKPHxmaW1fc3VmZml4fD4KZnJvbSBkamFuZ29xbC5xdWVyeXNldCBpbXBvcnQgRGphbmdvUUxRdWVyeVNldAoKCmNsYXNzIEJvb2sobW9kZWxzLk1vZGVsKToKPHxmaW1fZW5kfD4="]
["f908cd5be09503718fa0b7c81ec42d66e866d4a0-1","f908cd5be09503718fa0b7c81ec42d66e866d4a0","PHxmaW1fcHJlZml4fD4KIyEgdmVudi9iaW4vcHl0aG9uMwoKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IHNvY2tldAppbXBvcnQgc3lzCmZyb20gdGltZSBpbXBvcnQgcGVyZl9jb3VudGVyLCB0aW1lCnJlcXVlc3RzLnBhY2thZ2VzLnVybGxpYjMuZGlzYWJsZV93YXJuaW5ncygpCgoKZGVmIGNvbmZpZ19maWxlX2NoZWNrKCk6CiAgICAiIiJDaGVja3MgZm9yIGV4aXN0ZW5jZSBvZiBxbmNweS5jb25mIGZpbGUgIiIiCiAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoJ3FuY3B5LmNvbmYnKToKICAgICAgICBwcmludCgiY29uZmlnIGZpbGUgcW5jcHkuY29uZmYgbm90IGZvdW5kIikKICAgICAgICBzeXMuZXhpdCgpCgoKZGVmIHJlYWRfY29uZmlnX2ZpbGUoKToKICAgICIiIkltcG9ydCBob3N0LCBzb2NrZXQgdHlwZSBhbmQgcG9ydHMgZnJvbSBjb25maWdfZGF0YSBmaWxlIiIiCiAgICAiIiJJZ25vcmUgY29tbWVudHMgIywgbGluZXMgdGhhdCBzdGFydCB3aXRoIHNwYWNlcywgYW5kIGJsYW5rIGxpbmVzIiIiCiAgICByX2xpbmVzID0gW10KICAgIHdpdGggb3BlbigncW5jcHkuY29uZicsICdyJykgYXMgZjoKICAgICAgICByYXdfbGluZXMgPSBmLnJlYWRsaW5lcygpCiAgICAgICAgZm9yIGxpbmUgaW4gcmF3X2xpbmVzOgogICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIiMiKSBvciBsaW5lLnN0YXJ0c3dpdGgoIiAiKSBvciBub3QgbGluZS5zdHJpcCgpOgogICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJfbGluZXMuYXBwZW5kKGxpbmUpIAogICAgcmV0dXJuIHJfbGluZXMKCgpkZWYgcG9ydF9jaGVjayhob3N0bmFtZSwgcG9ydCk6CiAgICAiIiJWYWxpZGF0ZSBwb3J0IGlzIGFuIGludGVnZXIgYW5kIGluIHBvcnQgcmFuZ2UgIiIiCiAgICBwb3J0ID0gcG9ydC5zdHJpcCgpCiAgICBwb3J0X2Zvcm1hdCA9IHJlLmNvbXBpbGUocideWzEtOV1bMC05XSokJykKICAgIG1hdGNoID0gcmUubWF0Y2gocG9ydF9mb3JtYXQsIHBvcnQpCiAgICBpZiBub3QgbWF0Y2g6CiAgICAgICAgcHJpbnQoZiJQb3J0cyBlcnJvciBpbiBsaW5lIHtob3N0bmFtZX0ge3BvcnR9IGV4aXRpbmciKQogICAgICAgIHN5cy5leGl0KCkKICAgIGVsc2U6CiAgICAgICAgcG9ydCA9IGludChwb3J0KQogICAgaWYgcG9ydCBub3QgaW4gcmFuZ2UoMSw2NTUzNik6CiAgICAgICAgcHJpbnQoZiJ7cG9ydH0gbm90IGluIHJhbmdlIDEgLSA2NTUzNSIpCiAgICAgICAgc3lzLmV4aXQoKQoKCmRlZiBjaGVja19jb25maWdfZGF0YShjb25maWcpOgogICAgIiIiVmFsaWRhdGUgZGF0YSBpcyB2YWxpZCBhbmQgcmVhZHkgdG8gcHJvY2VzcyAiIiIKICAgIGhvc3RuYW1lLCBjaGVja190eXBlLCBwb3J0cyA9IGNvbmZpZy5zcGxpdCgnOjonKQogICAgZm9yIHBvcnQgaW4gcG9ydHMuc3BsaXQoJywnKToKICAgICAgICBwb3J0X2NoZWNrKGhvc3RuYW1lLCBwb3J0KQogICAgaWYgZG5zX2hvc3RfY2hlY2soaG9zdG5hbWUpICE9IE5vbmU6CiAgICAgICAgcmV0dXJuKGhvc3RuYW1lLCBjaGVja190eXBlLCBwb3J0cykgICAKICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIE5vbmUKCgpkZWYgdGltZV9zdGFtcCgpOgogICAgIiIiQ3VycmVudCB0aW1lIHN0YW1wIiIiCiAgICB0cyA9IGRhdGV0aW1lLm5vdygpCiAgICByZXR1cm4gdHMuc3RyZnRpbWUoJyVkLSViLSVZICVIOiVNOiVTJykKCgpkZWYgdG9kYXlfZ2VuKCk6CiAgICAiIiJDcmVhdGUgc3RyaW5nIGZvciBkYXRlIGZvcm1hdCIiIgogICAgdGltZXN0YW1wID0gZGF0ZXRpbWUubm93KCkKICAgIHJldHVybiB0aW1lc3RhbXAuc3RyZnRpbWUoJyVkJykKCgpkZWYgdG9kYXlfd3JpdGVfZmlsZW5hbWVfZ2VuKCk6CiAgICAiIiJDcmVhdGUgZmlsZW5hbWUgdG8gd3JpdGUgdG8iIiIKICAgIHJldHVybiBmJ3FuY3B5X3t0b2RheV9nZW4oKX0udHh0JwoKCmRlZiBkaWN0X2luc2VydChkaWN0X25hbWUsIGtleV9uYW1lLCB2YWx1ZV9uYW1lKToKICAgICIiIkluc2VydCBpZiBuZXcsIGFwcGVuZCBpZiBleGlzdHMiIiIKICAgIGlmIGtleV9uYW1lIG5vdCBpbiBkaWN0X25hbWU6CiAgICAgICAgZGljdF9uYW1lLnVwZGF0ZSh7a2V5X25hbWU6IFt2YWx1ZV9uYW1lXX0pCiAgICBlbHNlOgogICAgICAgIGRpY3RfbmFtZVtrZXlfbmFtZV0uYXBwZW5kKHZhbHVlX25hbWUpCgoKZGVmIGh0dHBfcG9ydF9jaGVjayh1cmwsIHBvcnRzKToKICAgICIiIlVzZSByZXF1ZXN0cyB0byB0ZXN0IGZvciBodHRwIHJlc3BvbnNlIiIiCiAgICBmb3IgcG9ydCBpbiBwb3J0cy5zcGxpdCgnLCcpOgogICAgICAgIGh0dHBfcmVxdWVzdCA9IGYne3VybH06e3BvcnR9JwogICAgICAgIHRyeToKICAgICAgICAgICAgaHR0cF9yZXNwb25zZSA9IHJlcXVlc3RzLmdldChodHRwX3JlcXVlc3QsIHRpbWVvdXQ9MywgdmVyaWZ5PUZhbHNlKQogICAgICAgICAgICBpZiBodHRwX3Jlc3BvbnNlLnN0YXR1c19jb2RlID09IDIwMDoKICAgICAgICAgICAgICAgIGRpY3RfaW5zZXJ0KGh0dHBfdXAsIHVybCwgcG9ydC5zdHJpcCgnICcpICsgZicgOntodHRwX3Jlc3BvbnNlLnN0YXR1c19jb2RlfScpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBkaWN0X2luc2VydChodHRwX2Rvd24sIHVybCwgcG9ydC5zdHJpcCgnICcpICsgZicgOntodHRwX3Jlc3BvbnNlLnN0YXR1c19jb2RlfScpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBodHRwX2VycjoKICAgICAgICAgICAgZGljdF9pbnNlcnQoaHR0cF9kb3duLCB1cmwsIHBvcnQuc3RyaXAoJyAnKSArIGYnIDpObyBSZXNwb25zZScpCgoKZGVmIHRjcF9wb3J0X2NoZWNrKGhvc3QsIHBvcnRzKToKICAgICIiIlVzZSBzb2NrZXQgdG8gdGVzdCBmb3IgdGNwIHBvcnQgIiIiCiAgICBmb3IgcG9ydCBpbiBwb3J0cy5zcGxpdCgiLCIpOgogICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzb2NrOgogICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoMykKICAgICAgICAgICAgcmVzdWx0ID0gc29jay5jb25uZWN0X2V4KChob3N0LCBpbnQocG9ydCkpKSAgICAjIGhvc3QgKyBwb3J0IG11c3QgYmUgYSB0dXBsZQogICAgICAgICAgICBpZiByZXN1bHQgPT0gMDoKICAgICAgICAgICAgICAgIGRpY3RfaW5zZXJ0KHRjcF91cCwgaG9zdCwgcG9ydC5zdHJpcCgnICcpKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgZGljdF9pbnNlcnQodGNwX2Rvd24sIGhvc3QsIHBvcnQuc3RyaXAoJyAnKSkKCgpkZWYgZG5zX2hvc3RfY2hlY2soaG9zdG5hbWUpOgogICAgIiIiVmFsaWRhdGUgdGhlIGhvc3RuYW1lIHJlc29sdmVzLCBza2lwIGlmIG5vdCIiIgogICAgaWYgJ2h0dHAnIGluIGhvc3RuYW1lOgogICAgICAgIGhvc3RuYW1lID0gaG9zdG5hbWUuc3BsaXQoJy8vJylbMV0gICAgICMgc3BsaXQgb2ZmIGh0dHA6Ly8gZXRjCiAgICBpZiAnLycgaW4gaG9zdG5hbWU6CiAgICAgICAgaG9zdG5hbWUgPSBob3N0bmFtZS5zcGxpdCgnLycpWzBdICAgIyBzcGxpdCBvZmYgYW55IHRyYWlsaW5nIGNoYXJhY3RlcnMgYWZ0ZXIgLwogICAgdHJ5OgogICAgICAgZG5zX2lwID0gc29ja2V0LmdldGhvc3RieW5hbWUoaG9zdG5hbWUpCiAgICAgICByZXR1cm4gZG5zX2lwCiAgICBleGNlcHQ6CiAgICAgICAgcmV0dXJuIE5vbmUKCgpkZWYgZGlyZWN0X2J5X3R5cGUoaG9zdG5hbWUsIGNoZWNrX3R5cGUsIHBvcnRzKToKICAgICIiIlNlbmQgcmVxdWVzdCB0byBjb3JyZWN0IHR5cGUgY2hlY2tlciAiIiIKICAgIHRyeToKICAgICAgICBpZiBjaGVja190eXBlID09ICd0Y3AnOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHRjcF9wb3J0X2NoZWNrKGhvc3RuYW1lLCBwb3J0cykKPHxmaW1fZW5kfD4="]
["f908cd5be09503718fa0b7c81ec42d66e866d4a0-2","f908cd5be09503718fa0b7c81ec42d66e866d4a0","PHxmaW1fcHJlZml4fD4KIyEgdmVudi9iaW4vcHl0aG9uMwoKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IHNvY2tldAppbXBvcnQgc3lzCmZyb20gdGltZSBpbXBvcnQgcGVyZl9jb3VudGVyLCB0aW1lCnJlcXVlc3RzLnBhY2thZ2VzLnVybGxpYjMuZGlzYWJsZV93YXJuaW5ncygpCgoKZGVmIGNvbmZpZ19maWxlX2NoZWNrKCk6CiAgICAiIiJDaGVja3MgZm9yIGV4aXN0ZW5jZSBvZiBxbmNweS5jb25mIGZpbGUgIiIiCiAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoJ3FuY3B5LmNvbmYnKToKICAgICAgICBwcmludCgiY29uZmlnIGZpbGUgcW5jcHkuY29uZmYgbm90IGZvdW5kIikKICAgICAgICBzeXMuZXhpdCgpCgoKZGVmIHJlYWRfY29uZmlnX2ZpbGUoKToKICAgICIiIkltcG9ydCBob3N0LCBzb2NrZXQgdHlwZSBhbmQgcG9ydHMgZnJvbSBjb25maWdfZGF0YSBmaWxlIiIiCiAgICAiIiJJZ25vcmUgY29tbWVudHMgIywgbGluZXMgdGhhdCBzdGFydCB3aXRoIHNwYWNlcywgYW5kIGJsYW5rIGxpbmVzIiIiCiAgICByX2xpbmVzID0gW10KICAgIHdpdGggb3BlbigncW5jcHkuY29uZicsICdyJykgYXMgZjoKICAgICAgICByYXdfbGluZXMgPSBmLnJlYWRsaW5lcygpCiAgICAgICAgZm9yIGxpbmUgaW4gcmF3X2xpbmVzOgogICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIiMiKSBvciBsaW5lLnN0YXJ0c3dpdGgoIiAiKSBvciBub3QgbGluZS5zdHJpcCgpOgogICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJfbGluZXMuYXBwZW5kKGxpbmUpIAogICAgcmV0dXJuIHJfbGluZXMKCgpkZWYgcG9ydF9jaGVjayhob3N0bmFtZSwgcG9ydCk6CiAgICAiIiJWYWxpZGF0ZSBwb3J0IGlzIGFuIGludGVnZXIgYW5kIGluIHBvcnQgcmFuZ2UgIiIiCiAgICBwb3J0ID0gcG9ydC5zdHJpcCgpCiAgICBwb3J0X2Zvcm1hdCA9IHJlLmNvbXBpbGUocideWzEtOV1bMC05XSokJykKICAgIG1hdGNoID0gcmUubWF0Y2gocG9ydF9mb3JtYXQsIHBvcnQpCiAgICBpZiBub3QgbWF0Y2g6CiAgICAgICAgcHJpbnQoZiJQb3J0cyBlcnJvciBpbiBsaW5lIHtob3N0bmFtZX0ge3BvcnR9IGV4aXRpbmciKQogICAgICAgIHN5cy5leGl0KCkKICAgIGVsc2U6CiAgICAgICAgcG9ydCA9IGludChwb3J0KQogICAgaWYgcG9ydCBub3QgaW4gcmFuZ2UoMSw2NTUzNik6CiAgICAgICAgcHJpbnQoZiJ7cG9ydH0gbm90IGluIHJhbmdlIDEgLSA2NTUzNSIpCiAgICAgICAgc3lzLmV4aXQoKQoKCmRlZiBjaGVja19jb25maWdfZGF0YShjb25maWcpOgogICAgIiIiVmFsaWRhdGUgZGF0YSBpcyB2YWxpZCBhbmQgcmVhZHkgdG8gcHJvY2VzcyAiIiIKICAgIGhvc3RuYW1lLCBjaGVja190eXBlLCBwb3J0cyA9IGNvbmZpZy5zcGxpdCgnOjonKQogICAgZm9yIHBvcnQgaW4gcG9ydHMuc3BsaXQoJywnKToKICAgICAgICBwb3J0X2NoZWNrKGhvc3RuYW1lLCBwb3J0KQogICAgaWYgZG5zX2hvc3RfY2hlY2soaG9zdG5hbWUpICE9IE5vbmU6CiAgICAgICAgcmV0dXJuKGhvc3RuYW1lLCBjaGVja190eXBlLCBwb3J0cykgICAKICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIE5vbmUKCgpkZWYgdGltZV9zdGFtcCgpOgogICAgIiIiQ3VycmVudCB0aW1lIHN0YW1wIiIiCiAgICB0cyA9IGRhdGV0aW1lLm5vdygpCiAgICByZXR1cm4gdHMuc3RyZnRpbWUoJyVkLSViLSVZICVIOiVNOiVTJykKCgpkZWYgdG9kYXlfZ2VuKCk6CiAgICAiIiJDcmVhdGUgc3RyaW5nIGZvciBkYXRlIGZvcm1hdCIiIgogICAgdGltZXN0YW1wID0gZGF0ZXRpbWUubm93KCkKICAgIHJldHVybiB0aW1lc3RhbXAuc3RyZnRpbWUoJyVkJykKCgpkZWYgdG9kYXlfd3JpdGVfZmlsZW5hbWVfZ2VuKCk6CiAgICAiIiJDcmVhdGUgZmlsZW5hbWUgdG8gd3JpdGUgdG8iIiIKICAgIHJldHVybiBmJ3FuY3B5X3t0b2RheV9nZW4oKX0udHh0JwoKCmRlZiBkaWN0X2luc2VydChkaWN0X25hbWUsIGtleV9uYW1lLCB2YWx1ZV9uYW1lKToKICAgICIiIkluc2VydCBpZiBuZXcsIGFwcGVuZCBpZiBleGlzdHMiIiIKICAgIGlmIGtleV9uYW1lIG5vdCBpbiBkaWN0X25hbWU6CiAgICAgICAgZGljdF9uYW1lLnVwZGF0ZSh7a2V5X25hbWU6IFt2YWx1ZV9uYW1lXX0pCiAgICBlbHNlOgogICAgICAgIGRpY3RfbmFtZVtrZXlfbmFtZV0uYXBwZW5kKHZhbHVlX25hbWUpCjx8ZmltX2hvbGV8PgogICAgZm9yIHBvcnQgaW4gcG9ydHMuc3BsaXQoJywnKToKICAgICAgICBodHRwX3JlcXVlc3QgPSBmJ3t1cmx9Ontwb3J0fScKICAgICAgICB0cnk6CiAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UgPSByZXF1ZXN0cy5nZXQoaHR0cF9yZXF1ZXN0LCB0aW1lb3V0PTMsIHZlcmlmeT1GYWxzZSkKICAgICAgICAgICAgaWYgaHR0cF9yZXNwb25zZS5zdGF0dXNfY29kZSA9PSAyMDA6CiAgICAgICAgICAgICAgICBkaWN0X2luc2VydChodHRwX3VwLCB1cmwsIHBvcnQuc3RyaXAoJyAnKSArIGYnIDp7aHR0cF9yZXNwb25zZS5zdGF0dXNfY29kZX0nKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgZGljdF9pbnNlcnQoaHR0cF9kb3duLCB1cmwsIHBvcnQuc3RyaXAoJyAnKSArIGYnIDp7aHR0cF9yZXNwb25zZS5zdGF0dXNfY29kZX0nKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgaHR0cF9lcnI6CiAgICAgICAgICAgIGRpY3RfaW5zZXJ0KGh0dHBfZG93biwgdXJsLCBwb3J0LnN0cmlwKCcgJykgKyBmJyA6Tm8gUmVzcG9uc2UnKQoKCmRlZiB0Y3BfcG9ydF9jaGVjayhob3N0LCBwb3J0cyk6CiAgICAiIiJVc2Ugc29ja2V0IHRvIHRlc3QgZm9yIHRjcCBwb3J0ICIiIgogICAgZm9yIHBvcnQgaW4gcG9ydHMuc3BsaXQoIiwiKToKICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgc29jazoKICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMpCiAgICAgICAgICAgIHJlc3VsdCA9IHNvY2suY29ubmVjdF9leCgoaG9zdCwgaW50KHBvcnQpKSkgICAgIyBob3N0ICsgcG9ydCBtdXN0IGJlIGEgdHVwbGUKICAgICAgICAgICAgaWYgcmVzdWx0ID09IDA6CiAgICAgICAgICAgICAgICBkaWN0X2luc2VydCh0Y3BfdXAsIGhvc3QsIHBvcnQuc3RyaXAoJyAnKSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGRpY3RfaW5zZXJ0KHRjcF9kb3duLCBob3N0LCBwb3J0LnN0cmlwKCcgJykpCgoKZGVmIGRuc19ob3N0X2NoZWNrKGhvc3RuYW1lKToKICAgICIiIlZhbGlkYXRlIHRoZSBob3N0bmFtZSByZXNvbHZlcywgc2tpcCBpZiBub3QiIiIKICAgIGlmICdodHRwJyBpbiBob3N0bmFtZToKICAgICAgICBob3N0bmFtZSA9IGhvc3RuYW1lLnNwbGl0KCcvLycpWzFdICAgICAjIHNwbGl0IG9mZiBodHRwOi8vIGV0YwogICAgaWYgJy8nIGluIGhvc3RuYW1lOgogICAgICAgIGhvc3RuYW1lID0gaG9zdG5hbWUuc3BsaXQoJy8nKVswXSAgICMgc3BsaXQgb2ZmIGFueSB0cmFpbGluZyBjaGFyYWN0ZXJzIGFmdGVyIC8KICAgIHRyeToKICAgICAgIGRuc19pcCA9IHNvY2tldC5nZXRob3N0YnluYW1lKGhvc3RuYW1lKQogICAgICAgcmV0dXJuIGRuc19pcAogICAgZXhjZXB0OgogICAgICAgIHJldHVybiBOb25lCgoKZGVmIGRpcmVjdF9ieV90eXBlKGhvc3RuYW1lLCBjaGVja190eXBlLCBwb3J0cyk6CiAgICAiIiJTZW5kIHJlcXVlc3QgdG8gY29ycmVjdCB0eXBlIGNoZWNrZXIgIiIiCiAgICB0cnk6CiAgICAgICAgaWYgY2hlY2tfdHlwZSA9PSAndGNwJzoKICAgICAgICAgICAgdGNwX3BvcnRfY2hlY2soaG9zdG5hbWUsIHBvcnRzKQogICAgICAgIGVsaWYgY2hlY2tfdHlwZSA9PSAnaHR0cCc6CiAgICAgICAgICAgIGh0dHBfcG9ydF9jaGVjayhob3N0bmFtZSwgcG9ydHMpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZGljdF9pbnNlcnQoZXJyb3JzLCBob3N0bmFtZSwgY2hlY2tfdHlwZSArIGYnIFVua25vd24gdHlwZSBkZXRlY3RlZCcpCiAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IpIGFzIGU6CiAgICAgICAgcHJpbnQoIkVycm9yIG9jY3VycmVkOiIsIGUpCiAgICAgICAgc3lzLmV4aXQoKQoKCmRlZiBydW5fY29uZmlnX2RhdGEoY29uZmlnX2RhdGEpOgogICAgZm9yIGNvbmZpZyBpbiBjb25maWdfZGF0YToKICAgICAgICBob3N0bmFtZSwgY2hlY2tfdHlwZSwgcG9ydHMgPSBjb25maWcuc3RyaXAoKS5zcGxpdCgnOjonKQogICAgICAgIGlmIGNoZWNrX2NvbmZpZ19kYXRhKGNvbmZpZykgIT0gTm9uZToKICAgICAgICAgICAgZGlyZWN0X2J5X3R5cGUoaG9zdG5hbWUsIGNoZWNrX3R5cGUsIHBvcnRzKSAKICAgICAgICBlbGlmIGNoZWNrX2NvbmZpZ19kYXRhKGNvbmZpZykgPT0gTm9uZToKICAgICAgICAgICAgZGljdF9pbnNlcnQoZXJyb3JzLCBob3N0bmFtZSwgZid7aG9zdG5hbWV9IGZhaWxlZCBETlMgY2hlY2snKQoKCmRlZiBjaGVja19wYXJzZV9jb25maWcoY29uZmlnX2RhdGEpOgogICAgIiIiQ2hlY2sgY29uZmlnIGRhdGEgaXMgYWJsZSB0byBiZSBwYXJzZWQgIiIiCiAgICB0cnk6CiAgICAgICAgZm9yIGNvbmZpZyBpbiBjb25maWdfZGF0YToKICAgICAgICAgICAgaG9zdG5hbWUsIGNoZWNrX3R5cGUsIHBvcnRzID0gY29uZmlnLnN0cmlwKCkuc3BsaXQoJzo6JykKICAgIGV4Y2VwdDoKICAgICAgICBwcmludChmIlVuYWJsZSB0byBwYXJzZSBsaW5lIHtjb25maWd9IGluIHFuY3B5LmNvbmYsIGV4aXRpbmcuLi4uIikKICAgICAgICBzeXMuZXhpdCgpCgoKZGVmIGRpY3Rfd3JpdGVyKGRpY3RfbmFtZSwgb3V0cHV0X2ZpbGUpOgogICAgaWYgbGVuKGRpY3RfbmFtZS5pdGVtcygpKSA9PSAwOgogICAgICAgIG91dHB1dF9maWxlLndyaXRlKGYiTm9uZSBmb3VuZFxuIikKICAgIGVsc2U6CiAgICAgICAgZm9yIGhvc3QsIHBvcnQgaW4gZGljdF9uYW1lLml0ZW1zKCk6CiAgICAgICAgICAgIG91dHB1dF9maWxlLndyaXRlKGYie2hvc3Q6PDMwfSB7cG9ydH1cbiIpCgoKZGVmIGRpY3RfcHJpbnRlcihkaWN0X25hbWUsIG91dHB1dF9maWxlKToKICAgIGlmIGxlbihkaWN0X25hbWUuaXRlbXMoKSkgPT0gMDoKICAgICAgICBwcmludChmIk5vbmUgZm91bmRcbiIpCiAgICBlbHNlOgogICAgICAgIGZvciBob3N0LCBwb3J0IGluIGRpY3RfbmFtZS5pdGVtcygpOgogICAgICAgICAgICBwcmludChmIntob3N0OjwzMH0ge3BvcnR9IikKCgpkZWYgd3JpdGVfcmVwb3J0KHN0YXJ0X3RpbWUpOgogICAgd2l0aCBvcGVuKHRvZGF5X3dyaXRlX2ZpbGVuYW1lX2dlbigpLCAidyIpIGFzIGY6CiAgICAgICAgc3RvcF90aW1lID0gcGVyZl9jb3VudGVyKCkKICAgICAgICBmLndyaXRlKGYie3RpbWVfc3RhbXAoKX0gICIpCiAgICAgICAgZi53cml0ZShmIlRvdGFsIHJ1biB0aW1lOiB7c3RvcF90aW1lIC0gc3RhcnRfdGltZTouMmZ9cyIpCiAgICAgICAgZi53cml0ZShmIlxuaHR0cCBob3N0cyBOT1QgcmVzcG9uZGluZyBvciBub3QgMjAwIFxueyctJyAqIDUwfVxuIikKICAgICAgICBkaWN0X3dyaXRlcihodHRwX2Rvd24sIGYpCiAgICAgICAgZi53cml0ZShmIlxudGNwIGhvc3QgcG9ydHMgTk9UIHJlc3BvbmRpbmdcbnsnLScgKiA1MH1cbiIpCiAgICAgICAgZGljdF93cml0ZXIodGNwX2Rvd24sIGYpCiAgICAgICAgZi53cml0ZShmIlxuaHR0cCBob3N0cyByZXBvcnRpbmcgMjAwIFtwb3J0IDpyZXNwb25zZSBjb2RlXVxueyctJyAqIDUwfVxuIikKICAgICAgICBkaWN0X3dyaXRlcihodHRwX3VwLCBmKQogICAgICAgIGYud3JpdGUoZiJcbnRjcCBob3N0cyByZXNwb25kaW5nIE9LXG57Jy0nICogNTB9XG4iKQogICAgICAgIGRpY3Rfd3JpdGVyKHRjcF91cCwgZikKICAgICAgICBmLndyaXRlKGYiXG5FcnJvcnMgZGV0ZWN0ZWQgaW4gY29uZmlnX2ZpbGVcbnsnLScgKiA1MH1cbiIpCiAgICAgICAgZGljdF93cml0ZXIoZXJyb3JzLCBmKQogICAgICAgIHByaW50KCJcblJlcG9ydCB3cml0dGVuIHRvIiwgdG9kYXlfd3JpdGVfZmlsZW5hbWVfZ2VuKCkpCiAgICAgICAgcHJpbnQoIlxudmVyc2lvbiA9IDAuODAxNCIpIAoKCmRlZiBwcmludF9yZXBvcnQoc3RhcnRfdGltZSk6CiAgICB3aXRoIG9wZW4odG9kYXlfd3JpdGVfZmlsZW5hbWVfZ2VuKCksICJ3IikgYXMgZjoKICAgICAgICBzdG9wX3RpbWUgPSBwZXJmX2NvdW50ZXIoKQogICAgICAgIHByaW50KGYiXG57dGltZV9zdGFtcCgpfSAgIikKICAgICAgICBwcmludChmIlRvdGFsIHJ1biB0aW1lOiB7c3RvcF90aW1lIC0gc3RhcnRfdGltZTouMmZ9cyIpCiAgICAgICAgcHJpbnQoZiJcbmh0dHAgaG9zdHMgTk9UIHJlc3BvbmRpbmcgb3Igbm90IDIwMCBcbnsnLScgKiA1MH1cbiIpCiAgICAgICAgZGljdF9wcmludGVyKGh0dHBfZG93biwgZikKICAgICAgICBwcmludChmIlxudGNwIGhvc3QgcG9ydHMgTk9UIHJlc3BvbmRpbmdcbnsnLScgKiA1MH1cbiIpCiAgICAgICAgZGljdF9wcmludGVyKHRjcF9kb3duLCBmKQogICAgICAgIHByaW50KGYiXG5odHRwIGhvc3RzIHJlcG9ydGluZyAyMDAgW3BvcnQgOnJlc3BvbnNlIGNvZGVdXG57Jy0nICogNTB9XG4iKQogICAgICAgIGRpY3RfcHJpbnRlcihodHRwX3VwLCBmKQogICAgICAgIHByaW50KGYiXG50Y3AgaG9zdHMgcmVzcG9uZGluZyBPS1xueyctJyAqIDUwfVxuIikKICAgICAgICBkaWN0X3ByaW50ZXIodGNwX3VwLCBmKQogICAgICAgIHByaW50KGYiXG5FcnJvcnMgZGV0ZWN0ZWQgaW4gY29uZmlnX2ZpbGVcbnsnLScgKiA1MH1cbiIpCiAgICAgICAgZGljdF9wcmludGVyKGVycm9ycywgZikKCgpkZWYgbWFpbigpOgogICAgY29uZmlnX2ZpbGVfY2hlY2soKSAgICAgICAgICAgICAgICAgICAgIyB2YWxpZGF0ZSBxbmNweS5jb25mIGZpbGUgZXhpc3RzLCBlbHNlIG5vdGhpbmcgdG8gY2hlY2sKICAgIHN0YXJ0X3RpbWUgPSBwZXJmX2NvdW50ZXIoKSAgICAgICAgICAgICMgcGVyZiBjb3VudGVyIHN0YXJ0aW5nCiAgICBjb25maWdfZGF0YSA9IHJlYWRfY29uZmlnX2ZpbGUoKSAgICAgICAjIHJlYWQgaW4gY29uZmlnIGRhdGEgZm9yIHByb2Nlc3NpbmcKICAgIGNoZWNrX3BhcnNlX2NvbmZpZyhjb25maWdfZGF0YSkgICAgICAgICMgdmFsaWRhdGUgcW5jcHkuY29uZiBpcyBhYmxlIHRvIGJlIHBhcnNlZCBzdWNjZXNzZnVsbHkKICAgIHJ1bl9jb25maWdfZGF0YShjb25maWdfZGF0YSkgICAgICAgICAgICMgcHJvY2VzcyBodHRwICYgdGNwIGNoZWNrcwogICAgd3JpdGVfcmVwb3J0KHN0YXJ0X3RpbWUpICAgICAgICAgICAgICAgIyB3cml0ZSBvdXQgdG8gcmVwb3J0IGZpbGUKICAgIHByaW50X3JlcG9ydChzdGFydF90aW1lKSAgICAgICAgICAgICAgICMgcHJpbnQgcmVwb3J0IHRvIHNjcmVlbgoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBlcnJvcnMsIHRjcF91cCwgdGNwX2Rvd24sIGh0dHBfdXAsIGh0dHBfZG93biA9IHt9LCB7fSwge30sIHt9LCB7fQogICAgbWFpbigpCgo8fGZpbV9zdWZmaXh8PgoKCmRlZiBodHRwX3BvcnRfY2hlY2sodXJsLCBwb3J0cyk6CiAgICAiIiJVc2UgcmVxdWVzdHMgdG8gdGVzdCBmb3IgaHR0cCByZXNwb25zZSIiIgo8fGZpbV9lbmR8Pg=="]
["68e286d24e4e4952ebd301023e2a2b852ee0ab51-1","68e286d24e4e4952ebd301023e2a2b852ee0ab51","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwpmcm9tIG9zLnBhdGggaW1wb3J0IGRpcm5hbWUsIGFic3BhdGgKCmltcG9ydCB0b3JjaAoKbGFiZWxzID0gWwogICAgJ0VUVCAtIEFibm9ybWFsJywKICAgICdFVFQgLSBCb3JkZXJsaW5lJywKICAgICdFVFQgLSBOb3JtYWwnLAogICAgJ05HVCAtIEFibm9ybWFsJywKICAgICdOR1QgLSBCb3JkZXJsaW5lJywKICAgICdOR1QgLSBJbmNvbXBsZXRlbHkgSW1hZ2VkJywKICAgICdOR1QgLSBOb3JtYWwnLAogICAgJ0NWQyAtIEFibm9ybWFsJywKICAgICdDVkMgLSBCb3JkZXJsaW5lJywKICAgICdDVkMgLSBOb3JtYWwnLAogICAgJ1N3YW4gR2FueiBDYXRoZXRlciBQcmVzZW50JwpdCgpwcmVmaXggPSBkaXJuYW1lKGRpcm5hbWUoZGlybmFtZShkaXJuYW1lKGFic3BhdGgoX19maWxlX18pKSkpKQptb2RlbF9kaXIgPSBmJ3twcmVmaXh9L3Jlc291cmNlcy9tb2RlbHMnCgpkZXZpY2UgPSB0b3JjaC5kZXZpY2UoJ2N1ZGEnKSBpZiB0b3JjaC5jdWRhLmlzX2F2YWlsYWJsZSgpIGVsc2UgdG9yY2guZGV2aWNlKCdjcHUnKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpudW1fd29ya2VycyA9IDIKaW1hZ2Vfc2l6ZSA9IDUxMgpiYXRjaF9zaXplID0gOAoKPHxmaW1fZW5kfD4="]
["6bda720bce2aeac6cb35367c5adf5e9581512b7a-1","6bda720bce2aeac6cb35367c5adf5e9581512b7a","PHxmaW1fcHJlZml4fD4KZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgdmlld3NldHMsIHBlcm1pc3Npb25zLCByZW5kZXJlcnMKZnJvbSBhcGkuc2VyaWFsaXplcnMgaW1wb3J0IFByb2ZpbGVTZXJpYWxpemVyCmZyb20gYWNjb3VudC5tb2RlbHMgaW1wb3J0IFVzZXJFeHQKZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgbWl4aW5zCmZyb20gcmVzdF9mcmFtZXdvcmsuZGVjb3JhdG9ycyBpbXBvcnQgYWN0aW9uCmZyb20gcmVzdF9mcmFtZXdvcmsucmVzcG9uc2UgaW1wb3J0IFJlc3BvbnNlCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmNsYXNzIFByb2ZpbGVWaWV3U2V0KG1peGlucy5SZXRyaWV2ZU1vZGVsTWl4aW4sCiAgICAgICAgICAgICAgICAgICAgbWl4aW5zLkxpc3RNb2RlbE1peGluLAogICAgICAgICAgICAgICAgICAgIHZpZXdzZXRzLkdlbmVyaWNWaWV3U2V0KToKICAgIHNlcmlhbGl6ZXJfY2xhc3MgPSBQcm9maWxlU2VyaWFsaXplcgo8fGZpbV9lbmR8Pg=="]
["6bda720bce2aeac6cb35367c5adf5e9581512b7a-2","6bda720bce2aeac6cb35367c5adf5e9581512b7a","PHxmaW1fcHJlZml4fD4KZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgdmlld3NldHMsIHBlcm1pc3Npb25zLCByZW5kZXJlcnMKZnJvbSBhcGkuc2VyaWFsaXplcnMgaW1wb3J0IFByb2ZpbGVTZXJpYWxpemVyCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBhY2NvdW50Lm1vZGVscyBpbXBvcnQgVXNlckV4dApmcm9tIHJlc3RfZnJhbWV3b3JrIGltcG9ydCBtaXhpbnMKZnJvbSByZXN0X2ZyYW1ld29yay5kZWNvcmF0b3JzIGltcG9ydCBhY3Rpb24KZnJvbSByZXN0X2ZyYW1ld29yay5yZXNwb25zZSBpbXBvcnQgUmVzcG9uc2UKPHxmaW1fZW5kfD4="]
["6bda720bce2aeac6cb35367c5adf5e9581512b7a-3","6bda720bce2aeac6cb35367c5adf5e9581512b7a","PHxmaW1fcHJlZml4fD4KZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgdmlld3NldHMsIHBlcm1pc3Npb25zLCByZW5kZXJlcnMKZnJvbSBhcGkuc2VyaWFsaXplcnMgaW1wb3J0IFByb2ZpbGVTZXJpYWxpemVyCmZyb20gYWNjb3VudC5tb2RlbHMgaW1wb3J0IFVzZXJFeHQKZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgbWl4aW5zCmZyb20gcmVzdF9mcmFtZXdvcmsuZGVjb3JhdG9ycyBpbXBvcnQgYWN0aW9uCmZyb20gcmVzdF9mcmFtZXdvcmsucmVzcG9uc2UgaW1wb3J0IFJlc3BvbnNlCgpjbGFzcyBQcm9maWxlVmlld1NldChtaXhpbnMuUmV0cmlldmVNb2RlbE1peGluLAogICAgICAgICAgICAgICAgICAgIG1peGlucy5MaXN0TW9kZWxNaXhpbiwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgIHZpZXdzZXRzLkdlbmVyaWNWaWV3U2V0KToKPHxmaW1fZW5kfD4="]
["6bda720bce2aeac6cb35367c5adf5e9581512b7a-4","6bda720bce2aeac6cb35367c5adf5e9581512b7a","PHxmaW1fcHJlZml4fD4KZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgdmlld3NldHMsIHBlcm1pc3Npb25zLCByZW5kZXJlcnMKZnJvbSBhcGkuc2VyaWFsaXplcnMgaW1wb3J0IFByb2ZpbGVTZXJpYWxpemVyCmZyb20gYWNjb3VudC5tb2RlbHMgaW1wb3J0IFVzZXJFeHQKZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgbWl4aW5zCmZyb20gcmVzdF9mcmFtZXdvcmsuZGVjb3JhdG9ycyBpbXBvcnQgYWN0aW9uCmZyb20gcmVzdF9mcmFtZXdvcmsucmVzcG9uc2UgaW1wb3J0IFJlc3BvbnNlCgpjbGFzcyBQcm9maWxlVmlld1NldChtaXhpbnMuUmV0cmlldmVNb2RlbE1peGluLAogICAgICAgICAgICAgICAgICAgIG1peGlucy5MaXN0TW9kZWxNaXhpbiwKICAgICAgICAgICAgICAgICAgICB2aWV3c2V0cy5HZW5lcmljVmlld1NldCk6CiAgICBzZXJpYWxpemVyX2NsYXNzID0gUHJvZmlsZVNlcmlhbGl6ZXIKICAgIHBlcm1pc3Npb25fY2xhc3NlcyA9IFtwZXJtaXNzaW9ucy5Jc0F1dGhlbnRpY2F0ZWRdCiAgICByZW5kZXJlcl9jbGFzc2VzID0gW3JlbmRlcmVycy5Ccm93c2FibGVBUElSZW5kZXJlciwgcmVuZGVyZXJzLkpTT05SZW5kZXJlcixdCgogICAgZGVmIGdldF9xdWVyeXNldChzZWxmKToKICAgICAgICByZXR1cm4gVXNlckV4dC5vYmplY3RzLmZpbHRlcih1c2VyPXNlbGYucmVxdWVzdC51c2VyLmlkKQoKICAgIEBhY3Rpb24oZGV0YWlsPUZhbHNlKQogICAgZGVmIGRlbGV0ZV9hdmF0YXIoc2VsZiwgcmVxdWVzdCwgcGs9Tm9uZSk6CiAgICAgICAgdXNlcmV4dCA9IFVzZXJFeHQub2JqZWN0cy5maWx0ZXIodXNlcj1yZXF1ZXN0LnVzZXIuaWQpLmdldCgpCjx8ZmltX2hvbGV8PgogICAgICAgIHJldHVybiBSZXNwb25zZSh7fSkKPHxmaW1fc3VmZml4fD4KICAgICAgICB1c2VyZXh0LmF2YXRhciA9IE5vbmUKICAgICAgICB1c2VyZXh0LmF2YXRhcl9taW5pID0gTm9uZQogICAgICAgIHVzZXJleHQuc2F2ZSgpCiAgICAgICAgc2VyaWFsaXplciA9IFByb2ZpbGVTZXJpYWxpemVyKGluc3RhbmNlPXVzZXJleHQsIGNvbnRleHQ9eydyZXF1ZXN0JzogcmVxdWVzdH0pCjx8ZmltX2VuZHw+"]
["97b4f6a26216aac122a48553c279052b1a8714c7-1","97b4f6a26216aac122a48553c279052b1a8714c7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIgYXMgbXBsCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gbWF0cGxvdGxpYi5wYXRjaGVzIGltcG9ydCBDaXJjbGUsIFdlZGdlLCBSZWN0YW5nbGUKZnJvbSBtYXRwbG90bGliIGltcG9ydCBjbQppbXBvcnQgbWF0cGxvdGxpYi5wYXRoZWZmZWN0cyBhcyBwYXRoX2VmZmVjdHMKCgpkZWYgZGVncmVlX3JhbmdlKG4sIHN0YXJ0PTAsIGVuZD0xODApOgogICAgIiIiCiAgICByZXR1cm5zIGEgdHVwbGUgb2YgYW4gTngyIGFycmF5IG9mIHN0YXJ0IGFuZCBlbmQgYW5nbGVzCiAgICBhbmQgdGhlIG1pZHBvaW50cyBvZiBlYWNoIG9mIHRob3NlIHJhbmdlcwogICAgIiIiCiAgICBzdGFydF8gPSBucC5saW5zcGFjZShzdGFydCwgZW5kLCBuKzEsIGVuZHBvaW50PVRydWUpWzA6LTFdCiAgICBlbmRfID0gbnAubGluc3BhY2Uoc3RhcnQsIGVuZCwgbisxLCBlbmRwb2ludD1UcnVlKVsxOjpdCiAgICBtaWRfcG9pbnRzID0gc3RhcnRfICsgKChlbmRfLXN0YXJ0XykvMi4pCiAgICByZXR1cm4gbnAuY19bc3RhcnRfLCBlbmRfXSwgbWlkX3BvaW50cwoKCmRlZiByb3RhdGUoYW5nbGUpOgogICAgcm90YXRpb24gPSBucC5kZWdyZWVzKG5wLnJhZGlhbnMoYW5nbGUpICogbnAucGkgLyBucC5waSAtIG5wLnJhZGlhbnMoOTApKQogICAgcmV0dXJuIHJvdGF0aW9uCgoKY2xhc3MgU3BlZWRvbWV0ZXI6CiAgICAiIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZHJhd3MgYSBTcGVlZG9tZXRlciBDaGFydAoKICAgIEFyZ3M6CiAgICBjZW50ZXIgKHR1cGxlKTogKHgsIHkpLVBvc2l0aW9uIG9mIHRoZSBjZW50ZXIKPHxmaW1fZW5kfD4="]
["97b4f6a26216aac122a48553c279052b1a8714c7-2","97b4f6a26216aac122a48553c279052b1a8714c7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIgYXMgbXBsCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gbWF0cGxvdGxpYi5wYXRjaGVzIGltcG9ydCBDaXJjbGUsIFdlZGdlLCBSZWN0YW5nbGUKZnJvbSBtYXRwbG90bGliIGltcG9ydCBjbQppbXBvcnQgbWF0cGxvdGxpYi5wYXRoZWZmZWN0cyBhcyBwYXRoX2VmZmVjdHMKCgpkZWYgZGVncmVlX3JhbmdlKG4sIHN0YXJ0PTAsIGVuZD0xODApOgogICAgIiIiCiAgICByZXR1cm5zIGEgdHVwbGUgb2YgYW4gTngyIGFycmF5IG9mIHN0YXJ0IGFuZCBlbmQgYW5nbGVzCiAgICBhbmQgdGhlIG1pZHBvaW50cyBvZiBlYWNoIG9mIHRob3NlIHJhbmdlcwogICAgIiIiCiAgICBzdGFydF8gPSBucC5saW5zcGFjZShzdGFydCwgZW5kLCBuKzEsIGVuZHBvaW50PVRydWUpWzA6LTFdCiAgICBlbmRfID0gbnAubGluc3BhY2Uoc3RhcnQsIGVuZCwgbisxLCBlbmRwb2ludD1UcnVlKVsxOjpdCiAgICBtaWRfcG9pbnRzID0gc3RhcnRfICsgKChlbmRfLXN0YXJ0XykvMi4pCiAgICByZXR1cm4gbnAuY19bc3RhcnRfLCBlbmRfXSwgbWlkX3BvaW50cwoKCmRlZiByb3RhdGUoYW5nbGUpOgogICAgcm90YXRpb24gPSBucC5kZWdyZWVzKG5wLnJhZGlhbnMoYW5nbGUpICogbnAucGkgLyBucC5waSAtIG5wLnJhZGlhbnMoOTApKQogICAgcmV0dXJuIHJvdGF0aW9uCgoKY2xhc3MgU3BlZWRvbWV0ZXI6CiAgICAiIiIKICAgIGRyYXdzIGEgU3BlZWRvbWV0ZXIgQ2hhcnQKCiAgICBBcmdzOgogICAgY2VudGVyICh0dXBsZSk6ICh4LCB5KS1Qb3NpdGlvbiBvZiB0aGUgY2VudGVyCiAgICBzdGFydF92YWx1ZSAoZmxvYXQpOiBTdGFydCBvZiB0aGUgcmFuZ2Ugb2YgdmFsdWVzIHBsb3R0ZWQKICAgIGVuZF92YWx1ZSAoZmxvYXQpOiBFbmQgb2YgdGhlIHJhbmdlIG9mIHZhbHVlcyBwbG90dGVkCiAgICB2YWx1ZSAoZmxvYXQpOiBWYWx1ZSB0aGUgbmVlZGxlIGlzIHBvaW50aW5nIHRvCiAgICByYWRpdXMgKHJlYWwpOiByYWRpdXMgb2YgdGhlIHNwZWVkb21ldGVyIGNoYXJ0CiAgICB3aWR0aF9yYXRpbyAocmVhbCk6IHJhdGlvIG9mIHdlZGdlcyB0byByYWRpdXMKICAgIGNvbG9ycyAobGlzdCk6IGxpc3Qgb2Ygd2VkZ2UgZmFjZWNvbG9ycyAKICAgIHNlZ21lbnRzX3Blcl9jb2xvciAoaW50KSA9IDU6IG51bWJlciBvZiBzZWdtZW50cyBwZXIgY29sb3IKICAgIHN0YXJ0X2FuZ2xlIChmbG9hdCkgPSAtMzA6IHN0YXJ0IGFuZ2xlIG9mIHRoZSBzcGVlZG9tZXRlcgogICAgZW5kX2FuZ2xlIChmbG9hdCkgPSAyMTA6IGVuZCBhbmdsZSBvZiB0aGUgc3BlZWRvbWV0ZXIKICAgIGFyY19lZGdlY29sb3IgKHN0cikgPSBOb25lOiBsaW5lY29sb3IgZm9yIHRoZSB3ZWRnZXMKICAgIGZhZGVfYWxwaGEgKGZsb2F0KSA9IDAuMjU6IGFscGhhIG9mIHdlZGdlcyB0aGF0IGFyZSBncmVhdGVyIHRoYW4gdGhlIHZhbHVlCiAgICBwYXRjaF9sdyAoZmxvYXQpID0gMC4yNTogbGluZXdpZHRoIGJldHdlZW4gd2VkZ2VzCiAgICBzbmFwX3RvX3BvcyAoYm9vbCkgPSBGYWxzZTogd2hldGhlciB0byBzbmFwIHRvIHRoZSBhcnJvdyB0byB0aGUgY2VudGVyIG9mIGEgd2VkZ2UKICAgIHRpdGxlIChzdHIpID0gTm9uZTogdGl0bGUKICAgIHVuaXQgKHN0cikgPSBOb25lOiB0aGUgdW5pdCBvZiB0aGUgdmFsdWUgdG8gYW5ub3RhdGUgYmVsb3cgdGhlIHBsb3QKICAgIGxhYmVsX2ZvbnRzaXplIChpbnQpID0gNzogbGFiZWwgZm9udHNpemUKICAgIHRpdGxlX2ZvbnRjb2xvciAoc3RyKSA9IE5vbmU6IHRpdGxlIGZvbnRjb2xvcgogICAgdGl0bGVfZmFjZWNvbG9yIChzdHIpID0gTm9uZTogdGl0bGUgYmJveCBmYWNlY29sb3IKICAgIHRpdGxlX2VkZ2Vjb2xvciAoc3RyKSA9IE5vbmU6IHRpdGxlIGJib3ggZWRnZWNvbG9yCiAgICB0aXRsZV9vZmZzZXQgKGZsb2F0KSA9IDEuMjU6IHRpdGxlIG9mZnNldCBhYm92ZSB0aGUgc3BlZWRvbWV0ZXIgaW4gYSBmYWN0b3Igb2YgcmFkaXVzIGZyb20gY2VudGVyCiAgICB0aXRsZV9wYWQgKGZsb2F0KSA9IDA6IHRpdGxlIGJib3ggcGFkZGluZwogICAgdGl0bGVfZm9udHNpemUgKGludCkgPSAxODogdGl0bGUgYW5ub3RhdGlvbiBmb250c2l6ZQogICAgZHJhd19hbm5vdGF0aW9uIChib29sKSA9IFRydWU6IHdoZXRoZXIgdG8gYW5ub3RhdGUgdGhlIHZhbHVlIGJlbG93IHRoZSBzcGVlZG9tZXRlcgogICAgYW5ub3RhdGlvbl90ZXh0IChzdHIpID0gTm9uZTogdGhlIHRleHQgdG8gYW5ub3RhdGUsIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZQogICAgYW5ub3RhdGlvbl9mb250Y29sb3IgKHN0cikgPSBOb25lOiBhbm5vdGF0aW9uIGZvbnRjb2xvcgogICAgYW5ub3RhdGlvbl9mYWNlY29sb3IgKHN0cikgPSBOb25lOiBhbm5vdGF0aW9uIGJib3ggZmFjZWNvbG9yCiAgICBhbm5vdGF0aW9uX2VkZ2Vjb2xvciAoc3RyKSA9IE5vbmU6IGFubm90YXRpb24gYmJveCBlZGdlY29sb3IKICAgIGFubm90YXRpb25fb2Zmc2V0IChmbG9hdCkgPSAwLjc1OiBhbm5vdGF0aW9uIG9mZnNldCBiZWxvdyB0aGUgc3BlZWRvbWV0ZXIgaW4gYSBmYWN0b3Igb2YgcmFkaXVzIGZyb20gY2VudGVyCiAgICBhbm5vdGF0aW9uX3BhZCAoZmxvYXQpID0gMDogcGFkZGluZyBhcm91bmQgdGhlIGFubm90YXRpb24gYmJveAogICAgYW5ub3RhdGlvbl9mb250c2l6ZSAoaW50KSA9IDE2OiBhbm5vdGF0aW9uIGZvbnRzaXplCiAgICBsYWJlbF9mb250Y29sb3IgKHN0cikgPSBOb25lOiBsYWJlbCBjb2xvcgogICAgZHJhd19sYWJlbHMgKGJvb2wpID0gVHJ1ZTogd2hldGhlciB0byBhbm5vdGF0ZSBsYWJlbHMKICAgIGxhYmVscyAobGlzdCkgPSBOb25lOiBjdXN0b20gbGFiZWxzLCBpZSBbJ1Nsb3dlc3QnLCAnU2xvdycsICdBdmVyYWdlJywgJ0Zhc3QnLCAnRmFzdGVzdCddCiAgICByb3RhdGVfbGFiZWxzIChib29sKSA9IEZhbHNlOiB3aGV0aGVyIHRvIHJvdGF0ZSB0aGUgdmFsdWUgbGFiZWxzCiAgICBmYWRlX2hhdGNoIChzdHIpID0gTm9uZTogaGF0Y2ggc3RyaW5nLCBpZSAneHh4JyBmb3IgYWxsIHdlZGdlcyA+IHZhbHVlCiAgICBheCAobWF0cGxvdGxpYi5heGVzLl9zdWJwbG90cyBvYmplY3QpID0gTm9uZTogQXhlcyB0byBkcmF3IHRoZSBzcGVlZG9tZXRlciBvbnRvLiBOb25lIGRlZmF1bHRzIHRvIHBsdC5nY2EoKQoKICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAgY2VudGVyLAogICAgICAgICAgICAgICAgIHN0YXJ0X3ZhbHVlLAogICAgICAgICAgICAgICAgIGVuZF92YWx1ZSwKICAgICAgICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAgICAgICByYWRpdXM9NCwKICAgICAgICAgICAgICAgICB3aWR0aF9yYXRpbz0xLzQsCiAgICAgICAgICAgICAgICAgY29sb3JzPVsiI2Q3MTkxYyIsICIjZmRhZTYxIiwgIiNmZmZmYmYiLCAiI2FiZDllOSIsICIjMmM3YmI2Il0sCiAgICAgICAgICAgICAgICAgc2VnbWVudHNfcGVyX2NvbG9yPTUsCiAgICAgICAgICAgICAgICAgc3RhcnRfYW5nbGU9LTMwLAogICAgICAgICAgICAgICAgIGVuZF9hbmdsZT0yMTAsCiAgICAgICAgICAgICAgICAgYXJjX2VkZ2Vjb2xvcj1Ob25lLAogICAgICAgICAgICAgICAgIGZhZGVfYWxwaGE9MC4yNSwKICAgICAgICAgICAgICAgICBwYXRjaF9sdz0wLjI1LAogICAgICAgICAgICAgICAgIHNuYXBfdG9fcG9zPUZhbHNlLAogICAgICAgICAgICAgICAgIHRpdGxlPU5vbmUsCiAgICAgICAgICAgICAgICAgdW5pdD1Ob25lLAogICAgICAgICAgICAgICAgIGxhYmVsX2ZvbnRzaXplPTcsCiAgICAgICAgICAgICAgICAgdGl0bGVfZm9udGNvbG9yPU5vbmUsCiAgICAgICAgICAgICAgICAgdGl0bGVfZmFjZWNvbG9yPU5vbmUsCiAgICAgICAgICAgICAgICAgdGl0bGVfZWRnZWNvbG9yPU5vbmUsCiAgICAgICAgICAgICAgICAgdGl0bGVfb2Zmc2V0PTEuNSwKICAgICAgICAgICAgICAgICB0aXRsZV9wYWQ9MSwKICAgICAgICAgICAgICAgICB0aXRsZV9mb250c2l6ZT0xOCwKICAgICAgICAgICAgICAgICBkcmF3X2Fubm90YXRpb249VHJ1ZSwKICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uX3RleHQ9Tm9uZSwKICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uX2ZvbnRjb2xvcj1Ob25lLAogICAgICAgICAgICAgICAgIGFubm90YXRpb25fZmFjZWNvbG9yPU5vbmUsCiAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbl9lZGdlY29sb3I9Tm9uZSwKICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uX29mZnNldD0wLjc1LAogICAgICAgICAgICAgICAgIGFubm90YXRpb25fcGFkPTAsCiAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbl9mb250c2l6ZT0xNiwKICAgICAgICAgICAgICAgICBsYWJlbF9mb250Y29sb3I9Tm9uZSwKICAgICAgICAgICAgICAgICBkcmF3X2xhYmVscz1UcnVlLAogICAgICAgICAgICAgICAgIGxhYmVscz1Ob25lLAogICAgICAgICAgICAgICAgIHJvdGF0ZV9sYWJlbHM9RmFsc2UsCiAgICAgICAgICAgICAgICAgZmFkZV9oYXRjaD1Ob25lLAogICAgICAgICAgICAgICAgIGF4PU5vbmUpOgoKICAgICAgICBzZWxmLmF4ID0gYXggb3IgcGx0LmdjYSgpCgogICAgICAgIHNlbGYucmFkaXVzID0gcmFkaXVzCiAgICAgICAgc2VsZi5jZW50ZXIgPSBjZW50ZXIKICAgICAgICBzZWxmLnN0YXJ0X3ZhbHVlID0gc3RhcnRfdmFsdWUKICAgICAgICBzZWxmLmVuZF92YWx1ZSA9IGVuZF92YWx1ZQogICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQogICAgICAgIHNlbGYud2lkdGhfcmF0aW8gPSB3aWR0aF9yYXRpbwogICAgICAgIHNlbGYuc3RhcnRfYW5nbGUgPSBzdGFydF9hbmdsZQogICAgICAgIHNlbGYuZW5kX2FuZ2xlID0gZW5kX2FuZ2xlCgogICAgICAgIHNlbGYuc25hcF90b19wb3MgPSBzbmFwX3RvX3BvcwoKICAgICAgICBpZiBhcmNfZWRnZWNvbG9yIGlzIE5vbmU6CiAgICAgICAgICAgIHNlbGYuYXJjX2VkZ2Vjb2xvciA9IHNlbGYuYXguZ2V0X2ZhY2Vjb2xvcigpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5hcmNfZWRnZWNvbG9yID0gYXJjX2VkZ2Vjb2xvcgoKICAgICAgICBzZWxmLmxhYmVsX2ZvbnRzaXplID0gbGFiZWxfZm9udHNpemUKCiAgICAgICAgc2VsZi50aXRsZSA9IHRpdGxlCgogICAgICAgIGlmIHRpdGxlX2ZvbnRjb2xvciBpcyBOb25lOgogICAgICAgICAgICBzZWxmLnRpdGxlX2ZvbnRjb2xvciA9IG1wbC5yY1BhcmFtc1snYXhlcy5sYWJlbGNvbG9yJ10KICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLnRpdGxlX2ZvbnRjb2xvciA9IHRpdGxlX2ZvbnRjb2xvcgoKICAgICAgICBpZiB0aXRsZV9mYWNlY29sb3IgaXMgTm9uZToKICAgICAgICAgICAgc2VsZi50aXRsZV9mYWNlY29sb3IgPSBzZWxmLmF4LmdldF9mYWNlY29sb3IoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYudGl0bGVfZmFjZWNvbG9yID0gdGl0bGVfZmFjZWNvbG9yCgogICAgICAgIGlmIHRpdGxlX2VkZ2Vjb2xvciBpcyBOb25lOgogICAgICAgICAgICBzZWxmLnRpdGxlX2VkZ2Vjb2xvciA9IHNlbGYuYXguZ2V0X2ZhY2Vjb2xvcigpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi50aXRsZV9lZGdlY29sb3IgPSB0aXRsZV9lZGdlY29sb3IKCiAgICAgICAgc2VsZi5hbm5vdGF0aW9uX3RleHQgPSBhbm5vdGF0aW9uX3RleHQKCiAgICAgICAgc2VsZi50aXRsZV9vZmZzZXQgPSB0aXRsZV9vZmZzZXQKICAgICAgICBzZWxmLnRpdGxlX3BhZCA9IHRpdGxlX3BhZAogICAgICAgIHNlbGYudGl0bGVfZm9udHNpemUgPSB0aXRsZV9mb250c2l6ZQoKICAgICAgICBpZiBhbm5vdGF0aW9uX2ZvbnRjb2xvciBpcyBOb25lOgogICAgICAgICAgICBzZWxmLmFubm90YXRpb25fZm9udGNvbG9yID0gbXBsLnJjUGFyYW1zWydheGVzLmxhYmVsY29sb3InXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYuYW5ub3RhdGlvbl9mb250Y29sb3IgPSBhbm5vdGF0aW9uX2ZvbnRjb2xvcgoKICAgICAgICBpZiBhbm5vdGF0aW9uX2ZhY2Vjb2xvciBpcyBOb25lOgogICAgICAgICAgICBzZWxmLmFubm90YXRpb25fZmFjZWNvbG9yID0gc2VsZi5heC5nZXRfZmFjZWNvbG9yKCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLmFubm90YXRpb25fZmFjZWNvbG9yID0gYW5ub3RhdGlvbl9mYWNlY29sb3IKCiAgICAgICAgaWYgYW5ub3RhdGlvbl9lZGdlY29sb3IgaXMgTm9uZToKICAgICAgICAgICAgc2VsZi5hbm5vdGF0aW9uX2VkZ2Vjb2xvciA9IHNlbGYuYXguZ2V0X2ZhY2Vjb2xvcigpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5hbm5vdGF0aW9uX2VkZ2Vjb2xvciA9IGFubm90YXRpb25fZWRnZWNvbG9yCgogICAgICAgIHNlbGYuYW5ub3RhdGlvbl9vZmZzZXQgPSBhbm5vdGF0aW9uX29mZnNldAogICAgICAgIHNlbGYuYW5ub3RhdGlvbl9wYWQgPSBhbm5vdGF0aW9uX3BhZAogICAgICAgIHNlbGYuYW5ub3RhdGlvbl9mb250c2l6ZSA9IGFubm90YXRpb25fZm9udHNpemUKCiAgICAgICAgaWYgdW5pdCBpcyBOb25lOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHNlbGYudW5pdCA9ICcnCjx8ZmltX2VuZHw+"]
["edb9badefa243c2f41b848087baab4599725b659-1","edb9badefa243c2f41b848087baab4599725b659","PHxmaW1fcHJlZml4fD4KIiIiVXNlciBjbGFzcyBmaWxlLgoiIiIKCgpjbGFzcyBVc2VyKG9iamVjdCk6CgogICAgIiIiQXBwIHVzZXIgY2xhc3MuCiAgICAKICAgIEF0dHJpYnV0ZXM6CiAgICAgICAgY2FsbCAoQ2FsbCk6IFRoZSBjYWxsIGluIHdoaWNoIHRoZSB1c2VyIGlzIGluIChOb25lIGlmIGhlJ3Mgbm90KS4KICAgICAgICBjb25uIChzb2NrZXQuc29ja2V0KTogQ29ubmVjdGlvbiBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHVzZXIuCiAgICAgICAgbmFtZSAoc3RyKTogVXNlcm5hbWUuCiAgICAgICAgc3RhdHVzIChzdHIpOiBXaGV0aGVyIHRoZSB1c2VyIGlzIGluIGNhbGwgKGF2YWlsYWJsZS9pbiBjYWxsKS4KICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIiIiQ29uc3RydWN0b3IgbWV0aG9kLgogICAgICAgIAogICAgICAgIEFyZ3M6CiAgICAgICAgICAgICoqa3dhcmdzOiBLZXl3b3JkIGFyZ3VtZW50cyBzdXBwbGllZCBpbiBkaWN0aW9uYXJ5IGZvcm0uCiAgICAgICAgIiIiCgogICAgICAgIHNlbGYubmFtZSA9IGt3YXJnc1snbmFtZSddCiAgICAgICAgc2VsZi5jb25uID0ga3dhcmdzWydjb25uJ10KICAgICAgICBzZWxmLnN0YXR1cyA9ICdhdmFpbGFibGUnCiAgICAgICAgc2VsZi5jYWxsID0gTm9uZQoKICAgIGRlZiBzd2l0Y2hfc3RhdHVzKHNlbGYpOgogICAgICAgICIiIlN3aXRjaGluZyB1c2VyIHN0YXR1cy4KICAgICAgICAiIiIKCiAgICAgICAgaWYgc2VsZi5zdGF0dXMgPT0gJ2F2YWlsYWJsZSc6CiAgICAgICAgICAgIHNlbGYuc3RhdHVzID0gJ2luIGNhbGwnCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5zdGF0dXMgPSAnYXZhaWxhYmxlJwoKICAgIGRlZiBqb2luX2NhbGwoc2VsZiwgY2FsbCk6CiAgICAgICAgIiIiQWRkcyB1c2VyIHRvIGNhbGwuCiAgICAgICAgCiAgICAgICAgQXJnczoKICAgICAgICAgICAgY2FsbCAoQ2FsbCk6IENhbGwgdG8gam9pbi4KICAgICAgICAiIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICAgICBzZWxmLmNhbGwgPSBjYWxsCiAgICAgICAgY2FsbC51c2VyX2pvaW4oc2VsZi5uYW1lKQoKPHxmaW1fZW5kfD4="]
["edb9badefa243c2f41b848087baab4599725b659-2","edb9badefa243c2f41b848087baab4599725b659","PHxmaW1fcHJlZml4fD4KIiIiVXNlciBjbGFzcyBmaWxlLgoiIiIKCgpjbGFzcyBVc2VyKG9iamVjdCk6CgogICAgIiIiQXBwIHVzZXIgY2xhc3MuCiAgICAKICAgIEF0dHJpYnV0ZXM6CiAgICAgICAgY2FsbCAoQ2FsbCk6IFRoZSBjYWxsIGluIHdoaWNoIHRoZSB1c2VyIGlzIGluIChOb25lIGlmIGhlJ3Mgbm90KS4KICAgICAgICBjb25uIChzb2NrZXQuc29ja2V0KTogQ29ubmVjdGlvbiBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHVzZXIuCiAgICAgICAgbmFtZSAoc3RyKTogVXNlcm5hbWUuCiAgICAgICAgc3RhdHVzIChzdHIpOiBXaGV0aGVyIHRoZSB1c2VyIGlzIGluIGNhbGwgKGF2YWlsYWJsZS9pbiBjYWxsKS4KICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIiIiQ29uc3RydWN0b3IgbWV0aG9kLgogICAgICAgIAogICAgICAgIEFyZ3M6CiAgICAgICAgICAgICoqa3dhcmdzOiBLZXl3b3JkIGFyZ3VtZW50cyBzdXBwbGllZCBpbiBkaWN0aW9uYXJ5IGZvcm0uCiAgICAgICAgIiIiCgogICAgICAgIHNlbGYubmFtZSA9IGt3YXJnc1snbmFtZSddCiAgICAgICAgc2VsZi5jb25uID0ga3dhcmdzWydjb25uJ10KICAgICAgICBzZWxmLnN0YXR1cyA9ICdhdmFpbGFibGUnCiAgICAgICAgc2VsZi5jYWxsID0gTm9uZQoKICAgIGRlZiBzd2l0Y2hfc3RhdHVzKHNlbGYpOgogICAgICAgICIiIlN3aXRjaGluZyB1c2VyIHN0YXR1cy4KICAgICAgICAiIiIKCiAgICAgICAgaWYgc2VsZi5zdGF0dXMgPT0gJ2F2YWlsYWJsZSc6CiAgICAgICAgICAgIHNlbGYuc3RhdHVzID0gJ2luIGNhbGwnCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5zdGF0dXMgPSAnYXZhaWxhYmxlJwoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIGpvaW5fY2FsbChzZWxmLCBjYWxsKToKICAgICAgICAiIiJBZGRzIHVzZXIgdG8gY2FsbC4KICAgICAgICAKICAgICAgICBBcmdzOgo8fGZpbV9lbmR8Pg=="]
["787162bb88dc9db97cd167f86091b557489ce14c-1","787162bb88dc9db97cd167f86091b557489ce14c","PHxmaW1fcHJlZml4fD4KZnJvbSAuY29udmVydF9hdWRpbyBpbXBvcnQgY29udmVydF9hdWRpbwoKZnJvbSAuc3BlZWNoX3RvX3RleHQgaW1wb3J0IHNwZWVjaF90b190ZXh0Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCl9fYWxsX18gPSBbJ2NvbnZlcnRfYXVkaW8nLCAnc3BlZWNoX3RvX3RleHQnXQo8fGZpbV9lbmR8Pg=="]
["787162bb88dc9db97cd167f86091b557489ce14c-2","787162bb88dc9db97cd167f86091b557489ce14c","PHxmaW1fcHJlZml4fD4KZnJvbSAuY29udmVydF9hdWRpbyBpbXBvcnQgY29udmVydF9hdWRpbwoKZnJvbSAuc3BlZWNoX3RvX3RleHQgaW1wb3J0IHNwZWVjaF90b190ZXh0Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCl9fYWxsX18gPSBbJ2NvbnZlcnRfYXVkaW8nLCAnc3BlZWNoX3RvX3RleHQnXQo8fGZpbV9lbmR8Pg=="]
["6be8ea771cb3a36988c18f81ebf6d0401e86235c-1","6be8ea771cb3a36988c18f81ebf6d0401e86235c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBvcwppbXBvcnQgY3YyCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IHJhbmRvbQppbXBvcnQgcGlja2xlCgpEQVRBRElSID0gIkQ6XENPTExFR0VcU1lcU0RQXERhdGFzZXRzIgo8fGZpbV9lbmR8Pg=="]
["6be8ea771cb3a36988c18f81ebf6d0401e86235c-2","6be8ea771cb3a36988c18f81ebf6d0401e86235c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBvcwppbXBvcnQgY3YyCmltcG9ydCByYW5kb20KaW1wb3J0IHBpY2tsZQoKREFUQURJUiA9ICJEOlxDT0xMRUdFXFNZXFNEUFxEYXRhc2V0cyIKCkNBVEVHT1JJRVMgPSBbIkNsb3NlZCIsICJPcGVuIl0KCnRyYWluaW5nX2RhdGEgPSBbXQpJTUdfU0laRSA9IDI0CgpkZWYgY3JlYXRlX3RyYWluaW5nX2RhdGEoKToKICAgIGZvciBjYXRlZ29yeSBpbiBDQVRFR09SSUVTOiAgCgogICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oREFUQURJUixjYXRlZ29yeSkgIAogICAgICAgIGNsYXNzX251bSA9IENBVEVHT1JJRVMuaW5kZXgoY2F0ZWdvcnkpICAjIGdldCB0aGUgY2xhc3NpZmljYXRpb24gICgwIG9yIGEgMSkuIDA9Y2xvc2VkIDE9b3BlbgoKICAgICAgICBmb3IgaW1nIGluIG9zLmxpc3RkaXIocGF0aCk6ICAKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgaW1nX2FycmF5ID0gY3YyLmltcmVhZChvcy5wYXRoLmpvaW4ocGF0aCxpbWcpICxjdjIuSU1SRUFEX0dSQVlTQ0FMRSkgICMgY29udmVydCB0byBhcnJheQogICAgICAgICAgICAgICAgbmV3X2FycmF5ID0gY3YyLnJlc2l6ZShpbWdfYXJyYXksIChJTUdfU0laRSwgSU1HX1NJWkUpKSAgIyByZXNpemUgdG8gbm9ybWFsaXplIGRhdGEgc2l6ZQogICAgICAgICAgICAgICAgdHJhaW5pbmdfZGF0YS5hcHBlbmQoW25ld19hcnJheSwgY2xhc3NfbnVtXSkgICMgYWRkIHRoaXMgdG8gb3VyIHRyYWluaW5nX2RhdGEKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAgIyBpbiB0aGUgaW50ZXJlc3QgaW4ga2VlcGluZyB0aGUgb3V0cHV0IGNsZWFuLi4uCiAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgIApjcmVhdGVfdHJhaW5pbmdfZGF0YSgpCnByaW50KGxlbih0cmFpbmluZ19kYXRhKSkKCnJhbmRvbS5zaHVmZmxlKHRyYWluaW5nX2RhdGEpCgpYID0gW10KPHxmaW1faG9sZXw+CiAgICB5LmFwcGVuZChsYWJlbCkKCnByaW50KFhbMF0ucmVzaGFwZSgtMSwgSU1HX1NJWkUsIElNR19TSVpFLCAxKSkKClggPSBucC5hcnJheShYKS5yZXNoYXBlKC0xLCBJTUdfU0laRSwgSU1HX1NJWkUsIDEpCgpwaWNrbGVfb3V0ID0gb3BlbigiUGlja2xlL1gucGlja2xlIiwid2IiKQpwaWNrbGUuZHVtcChYLCBwaWNrbGVfb3V0KQpwaWNrbGVfb3V0LmNsb3NlKCkKCnBpY2tsZV9vdXQgPSBvcGVuKCJQaWNrbGUveS5waWNrbGUiLCJ3YiIpCnBpY2tsZS5kdW1wKHksIHBpY2tsZV9vdXQpCnBpY2tsZV9vdXQuY2xvc2UoKQoKCgoKCgoKCgoKCgoKCgoKCgoKCjx8ZmltX3N1ZmZpeHw+CnkgPSBbXQoKZm9yIGZlYXR1cmVzLGxhYmVsIGluIHRyYWluaW5nX2RhdGE6CiAgICBYLmFwcGVuZChmZWF0dXJlcykKPHxmaW1fZW5kfD4="]
["6be8ea771cb3a36988c18f81ebf6d0401e86235c-3","6be8ea771cb3a36988c18f81ebf6d0401e86235c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBvcwppbXBvcnQgY3YyCmltcG9ydCByYW5kb20KaW1wb3J0IHBpY2tsZQoKREFUQURJUiA9ICJEOlxDT0xMRUdFXFNZXFNEUFxEYXRhc2V0cyIKCkNBVEVHT1JJRVMgPSBbIkNsb3NlZCIsICJPcGVuIl0KCnRyYWluaW5nX2RhdGEgPSBbXQpJTUdfU0laRSA9IDI0CgpkZWYgY3JlYXRlX3RyYWluaW5nX2RhdGEoKToKICAgIGZvciBjYXRlZ29yeSBpbiBDQVRFR09SSUVTOiAgCgogICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oREFUQURJUixjYXRlZ29yeSkgIAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgIGltZ19hcnJheSA9IGN2Mi5pbXJlYWQob3MucGF0aC5qb2luKHBhdGgsaW1nKSAsY3YyLklNUkVBRF9HUkFZU0NBTEUpICAjIGNvbnZlcnQgdG8gYXJyYXkKICAgICAgICAgICAgICAgIG5ld19hcnJheSA9IGN2Mi5yZXNpemUoaW1nX2FycmF5LCAoSU1HX1NJWkUsIElNR19TSVpFKSkgICMgcmVzaXplIHRvIG5vcm1hbGl6ZSBkYXRhIHNpemUKICAgICAgICAgICAgICAgIHRyYWluaW5nX2RhdGEuYXBwZW5kKFtuZXdfYXJyYXksIGNsYXNzX251bV0pICAjIGFkZCB0aGlzIHRvIG91ciB0cmFpbmluZ19kYXRhCiAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgaW4gdGhlIGludGVyZXN0IGluIGtlZXBpbmcgdGhlIG91dHB1dCBjbGVhbi4uLgogICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAKY3JlYXRlX3RyYWluaW5nX2RhdGEoKQpwcmludChsZW4odHJhaW5pbmdfZGF0YSkpCgpyYW5kb20uc2h1ZmZsZSh0cmFpbmluZ19kYXRhKQoKWCA9IFtdCnkgPSBbXQoKZm9yIGZlYXR1cmVzLGxhYmVsIGluIHRyYWluaW5nX2RhdGE6CiAgICBYLmFwcGVuZChmZWF0dXJlcykKICAgIHkuYXBwZW5kKGxhYmVsKQoKcHJpbnQoWFswXS5yZXNoYXBlKC0xLCBJTUdfU0laRSwgSU1HX1NJWkUsIDEpKQoKWCA9IG5wLmFycmF5KFgpLnJlc2hhcGUoLTEsIElNR19TSVpFLCBJTUdfU0laRSwgMSkKCnBpY2tsZV9vdXQgPSBvcGVuKCJQaWNrbGUvWC5waWNrbGUiLCJ3YiIpCnBpY2tsZS5kdW1wKFgsIHBpY2tsZV9vdXQpCnBpY2tsZV9vdXQuY2xvc2UoKQoKcGlja2xlX291dCA9IG9wZW4oIlBpY2tsZS95LnBpY2tsZSIsIndiIikKcGlja2xlLmR1bXAoeSwgcGlja2xlX291dCkKcGlja2xlX291dC5jbG9zZSgpCgoKCgoKCgoKCgoKCgoKCgoKCgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBjbGFzc19udW0gPSBDQVRFR09SSUVTLmluZGV4KGNhdGVnb3J5KSAgIyBnZXQgdGhlIGNsYXNzaWZpY2F0aW9uICAoMCBvciBhIDEpLiAwPWNsb3NlZCAxPW9wZW4KCiAgICAgICAgZm9yIGltZyBpbiBvcy5saXN0ZGlyKHBhdGgpOiAgCiAgICAgICAgICAgIHRyeToKPHxmaW1fZW5kfD4="]
["6be8ea771cb3a36988c18f81ebf6d0401e86235c-4","6be8ea771cb3a36988c18f81ebf6d0401e86235c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBvcwppbXBvcnQgY3YyCmltcG9ydCByYW5kb20KaW1wb3J0IHBpY2tsZQoKREFUQURJUiA9ICJEOlxDT0xMRUdFXFNZXFNEUFxEYXRhc2V0cyIKCkNBVEVHT1JJRVMgPSBbIkNsb3NlZCIsICJPcGVuIl0KCnRyYWluaW5nX2RhdGEgPSBbXQpJTUdfU0laRSA9IDI0CgpkZWYgY3JlYXRlX3RyYWluaW5nX2RhdGEoKToKICAgIGZvciBjYXRlZ29yeSBpbiBDQVRFR09SSUVTOiAgCgogICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oREFUQURJUixjYXRlZ29yeSkgIAogICAgICAgIGNsYXNzX251bSA9IENBVEVHT1JJRVMuaW5kZXgoY2F0ZWdvcnkpICAjIGdldCB0aGUgY2xhc3NpZmljYXRpb24gICgwIG9yIGEgMSkuIDA9Y2xvc2VkIDE9b3BlbgoKICAgICAgICBmb3IgaW1nIGluIG9zLmxpc3RkaXIocGF0aCk6ICAKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgaW1nX2FycmF5ID0gY3YyLmltcmVhZChvcy5wYXRoLmpvaW4ocGF0aCxpbWcpICxjdjIuSU1SRUFEX0dSQVlTQ0FMRSkgICMgY29udmVydCB0byBhcnJheQogICAgICAgICAgICAgICAgbmV3X2FycmF5ID0gY3YyLnJlc2l6ZShpbWdfYXJyYXksIChJTUdfU0laRSwgSU1HX1NJWkUpKSAgIyByZXNpemUgdG8gbm9ybWFsaXplIGRhdGEgc2l6ZQogICAgICAgICAgICAgICAgdHJhaW5pbmdfZGF0YS5hcHBlbmQoW25ld19hcnJheSwgY2xhc3NfbnVtXSkgICMgYWRkIHRoaXMgdG8gb3VyIHRyYWluaW5nX2RhdGEKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAgIyBpbiB0aGUgaW50ZXJlc3QgaW4ga2VlcGluZyB0aGUgb3V0cHV0IGNsZWFuLi4uCiAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgIApjcmVhdGVfdHJhaW5pbmdfZGF0YSgpCnByaW50KGxlbih0cmFpbmluZ19kYXRhKSkKCnJhbmRvbS5zaHVmZmxlKHRyYWluaW5nX2RhdGEpCgpYID0gW10KeSA9IFtdCgpmb3IgZmVhdHVyZXMsbGFiZWwgaW4gdHJhaW5pbmdfZGF0YToKICAgIFguYXBwZW5kKGZlYXR1cmVzKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICB5LmFwcGVuZChsYWJlbCkKCjx8ZmltX2VuZHw+"]
["6be8ea771cb3a36988c18f81ebf6d0401e86235c-5","6be8ea771cb3a36988c18f81ebf6d0401e86235c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBvcwppbXBvcnQgY3YyCmltcG9ydCByYW5kb20KaW1wb3J0IHBpY2tsZQoKREFUQURJUiA9ICJEOlxDT0xMRUdFXFNZXFNEUFxEYXRhc2V0cyIKCkNBVEVHT1JJRVMgPSBbIkNsb3NlZCIsICJPcGVuIl0KCnRyYWluaW5nX2RhdGEgPSBbXQpJTUdfU0laRSA9IDI0CgpkZWYgY3JlYXRlX3RyYWluaW5nX2RhdGEoKToKICAgIGZvciBjYXRlZ29yeSBpbiBDQVRFR09SSUVTOiAgCgogICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oREFUQURJUixjYXRlZ29yeSkgIAogICAgICAgIGNsYXNzX251bSA9IENBVEVHT1JJRVMuaW5kZXgoY2F0ZWdvcnkpICAjIGdldCB0aGUgY2xhc3NpZmljYXRpb24gICgwIG9yIGEgMSkuIDA9Y2xvc2VkIDE9b3BlbgoKICAgICAgICBmb3IgaW1nIGluIG9zLmxpc3RkaXIocGF0aCk6ICAKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgaW1nX2FycmF5ID0gY3YyLmltcmVhZChvcy5wYXRoLmpvaW4ocGF0aCxpbWcpICxjdjIuSU1SRUFEX0dSQVlTQ0FMRSkgICMgY29udmVydCB0byBhcnJheQogICAgICAgICAgICAgICAgbmV3X2FycmF5ID0gY3YyLnJlc2l6ZShpbWdfYXJyYXksIChJTUdfU0laRSwgSU1HX1NJWkUpKSAgIyByZXNpemUgdG8gbm9ybWFsaXplIGRhdGEgc2l6ZQogICAgICAgICAgICAgICAgdHJhaW5pbmdfZGF0YS5hcHBlbmQoW25ld19hcnJheSwgY2xhc3NfbnVtXSkgICMgYWRkIHRoaXMgdG8gb3VyIHRyYWluaW5nX2RhdGEKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAgIyBpbiB0aGUgaW50ZXJlc3QgaW4ga2VlcGluZyB0aGUgb3V0cHV0IGNsZWFuLi4uCiAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgIApjcmVhdGVfdHJhaW5pbmdfZGF0YSgpCjx8ZmltX2hvbGV8PgpYID0gW10KeSA9IFtdCgpmb3IgZmVhdHVyZXMsbGFiZWwgaW4gdHJhaW5pbmdfZGF0YToKICAgIFguYXBwZW5kKGZlYXR1cmVzKQogICAgeS5hcHBlbmQobGFiZWwpCgpwcmludChYWzBdLnJlc2hhcGUoLTEsIElNR19TSVpFLCBJTUdfU0laRSwgMSkpCgpYID0gbnAuYXJyYXkoWCkucmVzaGFwZSgtMSwgSU1HX1NJWkUsIElNR19TSVpFLCAxKQoKcGlja2xlX291dCA9IG9wZW4oIlBpY2tsZS9YLnBpY2tsZSIsIndiIikKcGlja2xlLmR1bXAoWCwgcGlja2xlX291dCkKcGlja2xlX291dC5jbG9zZSgpCgpwaWNrbGVfb3V0ID0gb3BlbigiUGlja2xlL3kucGlja2xlIiwid2IiKQpwaWNrbGUuZHVtcCh5LCBwaWNrbGVfb3V0KQpwaWNrbGVfb3V0LmNsb3NlKCkKCgoKCgoKCgoKCgoKCgoKCgoKCgo8fGZpbV9zdWZmaXh8PgpwcmludChsZW4odHJhaW5pbmdfZGF0YSkpCgpyYW5kb20uc2h1ZmZsZSh0cmFpbmluZ19kYXRhKQoKPHxmaW1fZW5kfD4="]
["4140fcee16f07e43c6ee30528594f92f1b92c2d6-1","4140fcee16f07e43c6ee30528594f92f1b92c2d6",{"$cut":{"chars":33856,"head":"PHxmaW1fcHJlZml4fD4KIwojIFB5U05NUCBNSUIgbW9kdWxlIE1QTFMtTERQLUFUTS1TVEQtTUlCIChodHRwOi8vcHlzbm1wLnNmLm5ldCkKIyBBU04uMSBzb3VyY2UgaHR0cDovL21pYnMuc25tcGxhYnMuY29tOjgwL2FzbjEvTVBMUy1MRFAtQVRNLVNURC1NSUIKIyBQcm9kdWNlZCBieSBweXNtaS0wLjAuNyBhdCBTdW4gRmViIDE0IDAwOjIxOjE3IDIwMTYKIyBPbiBob3N0IGJsZGZhcm0gcGxhdGZvcm0gTGludXggdmVyc2lvbiA0LjEuMTMtMTAwLmZjMjEueDg2XzY0IGJ5IHVzZXIgZ29vc2UKIyBVc2luZyBQeXRob24gdmVyc2lvbiAzLjUuMCAoZGVmYXVsdCwgSmFuICA1IDIwMTYsIDE3OjExOjUyKSAKIwooIEludGVnZXIsIE9iamVjdElkZW50aWZpZXIsIE9jdGV0U3RyaW5nLCApID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJBU04xIiwgIkludGVnZXIiLCAiT2JqZWN0SWRlbnRpZmllciIsICJPY3RldFN0cmluZyIpCiggTmFtZWRWYWx1ZXMsICkgPSBtaWJCdWlsZGVyLmltcG9ydFN5bWJvbHMoIkFTTjEtRU5VTUVSQVRJT04iLCAiTmFtZWRWYWx1ZXMiKQooIFZhbHVlUmFuZ2VDb25zdHJhaW50LCBDb25zdHJhaW50c1VuaW9uLCBDb25zdHJhaW50c0ludGVyc2VjdGlvbiwgVmFsdWVTaXplQ29uc3RyYWludCwgU2luZ2xlVmFsdWVDb25zdHJhaW50LCApID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJBU04xLVJFRklORU1FTlQiLCAiVmFsdWVSYW5nZUNvbnN0cmFpbnQiLCAiQ29uc3RyYWludHNVbmlvbiIsICJDb25zdHJhaW50c0ludGVyc2VjdGlvbiIsICJWYWx1ZVNpemVDb25zdHJhaW50IiwgIlNpbmdsZVZhbHVlQ29uc3RyYWludCIpCiggQXRtVnBJZGVudGlmaWVyLCApID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJBVE0tVEMtTUlCIiwgIkF0bVZwSWRlbnRpZmllciIpCiggSW50ZXJmYWNlSW5kZXhPclplcm8sICkgPSBtaWJCdWlsZGVyLmltcG9ydFN5bWJvbHMoIklGLU1JQiIsICJJbnRlcmZhY2VJbmRleE9yWmVybyIpCiggbXBsc0xkcEVudGl0eUluZGV4LCBtcGxzTGRwUGVlckxkcElkLCBtcGxzTGRwRW50aXR5TGRwSWQsICkgPSBtaWJCdWlsZGVyLmltcG9ydFN5bWJvbHMoIk1QTFMtTERQLVNURC1NSUIiLCAibXBsc0xkcEVudGl0eUluZGV4IiwgIm1wbHNMZHBQZWVyTGRwSWQiLCAibXBsc0xkcEVudGl0eUxkcElkIikKKCBtcGxzU3RkTUlCLCBNcGxzQXRtVmNJZGVudGlmaWVyLCApID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJNUExTLVRDLVNURC1NSUIiLCAibXBsc1N0ZE1JQiIsICJNcGxzQXRtVmNJZGVudGlmaWVyIikKKCBPYmplY3RHcm91cCwgTW9kdWxlQ29tcGxpYW5jZSwgTm90aWZpY2F0aW9uR3JvdXAsICkgPSBtaWJCdWlsZGVyLmltcG9ydFN5bWJvbHMoIlNOTVB2Mi1DT05GIiwgIk9iamVjdEdyb3VwIiwgIk1vZHVsZUNvbXBsaWFuY2UiLCAiTm90aWZpY2F0aW9uR3JvdXAiKQooIE1pYlNjYWxhciwgTWliVGFibGUsIE1pYlRhYmxlUm93LCBNaWJUYWJsZUNvbHVtbiwgVW5zaWduZWQzMiwgT2JqZWN0SWRlbnRpdHksIE1vZHVsZUlkZW50aXR5LCBJcEFkZHJlc3MsIEJpdHMsIENvdW50ZXI2NCwgTm90aWZpY2F0aW9uVHlwZSwgQ291bnRlcjMyLCBpc28sIE1pYklkZW50aWZpZXIsIEludGVnZXIzMiwgVGltZVRpY2tzLCBHYXVnZTMyLCApID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJTTk1QdjItU01JIiwgIk1pYlNjYWxhciIsICJNaWJUYWJsZSIsICJNaWJUYWJsZVJvdyIsICJNaWJUYWJsZUNvbHVtbiIsICJVbnNpZ25lZDMyIiwgIk9iamVjdElkZW50aXR5IiwgIk1vZHVsZUlkZW50aXR5IiwgIklwQWRkcmVzcyIsICJCaXRzIiwgIkNvdW50ZXI2NCIsICJOb3RpZmljYXRpb25UeXBlIiwgIkNvdW50ZXIzMiIsICJpc28iLCAiTWliSWRlbnRpZmllciIsICJJbnRlZ2VyMzIiLCAiVGltZVRpY2tzIiwgIkdhdWdlMzIiKQooIERpc3BsYXlTdHJpbmcsIFN0b3JhZ2VUeXBlLCBUZXh0dWFsQ29udmVudGlvbiwgUm93U3RhdHVzLCApID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJTTk1QdjItVEMiLCAiRGlzcGxheVN0cmluZyIsICJTdG9yYWdlVHlwZSIsICJUZXh0dWFsQ29udmVudGlvbiIsICJSb3dTdGF0dXMiKQptcGxzTGRwQXRtU3RkTUlCID0gTW9kdWxlSWRlbnRpdHkoKDEsIDMsIDYsIDEsIDIsIDEsIDEwLCAxNjYsIDUpKS5zZXRSZXZpc2lvbnMoKCIyMDA0LTA2LTAzIDAwOjAwIiwpKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogbXBsc0xkcEF0bVN0ZE1JQi5zZXRMYXN0VXBkYXRlZCgnMjAwNDA2MDMwMDAwWicpCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiBtcGxzTGRwQXRtU3RkTUlCLnNldE9yZ2FuaXphdGlvbignTXVsdGlwcm90b2NvbCBMYWJlbCBTd2l0Y2hpbmcgKG1wbHMpXG4gICAgICAgICAgICAgICAgICBXb3JraW5nIEdyb3VwJykKaWYgbWliQnVpbGRlci5sb2FkVGV4dHM6IG1wbHNMZHBBdG1TdGRNSUIuc2V0Q29udGFjdEluZm8oJ0pvYW4gQ3VjY2hpYXJhIChqY3VjY2hpYXJhQG1pbmRzcHJpbmcuY29tKVxuICAgICAgICAgTWFyY29uaSBDb21tdW5pY2F0aW9ucywgSW5jLlxuXG4gICAgICAgICBIYW5zIFNqb3N0cmFuZCAoaGFuc0BpcHVucGx1Z2dlZC5jb20pXG4gICAgICAgICBpcFVucGx1Z2dlZFxuXG4gICAgICAgICBKYW1lcyBWLiBMdWNpYW5pIChqYW1lc19sdWNpYW5pQG1pbmRzcHJpbmcuY29tKVxuICAgICAgICAgTWFyY29uaSBDb21tdW5pY2F0aW9ucywgSW5jLlxuXG4gICAgICAgICBXb3JraW5nIEdyb3VwIENoYWlyczpcbiAgICAgICAgIEdlb3JnZSBTd2FsbG93LCAgIGVtYWlsOiBzd2FsbG93QGNpc2NvLmNvbVxuICAgICAgICAgTG9hIEFuZGVyc3NvbiwgICAgZW1haWw6IGxvYUBwaS5zZVxuXG4gICAgICAgICBNUExTIFdvcmtpbmcgR3JvdXAsIGVtYWlsOiBtcGxzQHV1Lm5ldFxuICAgICcpCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiBtcGxzTGRwQXRtU3RkTUlCLnNldERlc2NyaXB0aW9uKCdDb3B5cmlnaHQgKEMpIFRoZSBJbnRlcm5ldCBTb2NpZXR5ICgyMDA0KS4gVGhlXG4gICAgICAgIGluaXRpYWwgdmVyc2lvbiBvZiB0aGlzIE1JQiBtb2R1bGUgd2FzIHB1Ymxpc2hlZFxuICAgICAg"}}]
["c1e5f8c8cd8fdd1e839422ed5e73b7176c02d402-1","c1e5f8c8cd8fdd1e839422ed5e73b7176c02d402","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KCmZyb20gZXZlbnRzLm1vZGVscyBpbXBvcnQgRXZlbnQKCgpjbGFzcyBFdmVudEFkbWluKGFkbWluLk1vZGVsQWRtaW4pOgogICAgbGlzdF9kaXNwbGF5ID0gKCJ0aXRsZSIsICJldmVudF90eXBlIiwgImxvY2F0aW9uIiwgImhvc3QiLCAic3RhdHVzIiwgInN0YXJ0X2RhdGUiKQogICAgc2VhcmNoX2ZpZWxkcyA9ICgKICAgICAgICAidGl0bGUiLAogICAgICAgICJob3N0IiwKICAgICAgICAicHJlc2VudGVyX2ZpcnN0X25hbWUiLAogICAgICAgICJwcmVzZW50ZXJfbGFzdF9uYW1lIiwKICAgICAgICAicHJlc2VudGVyX2NvbXBhbnlfbmFtZSIsCiAgICApCiAgICByZWFkb25seV9maWVsZHMgPSAoCiAgICAgICAgImFkZGVkX2J5IiwKICAgICAgICAiYWRkZWRfb24iLAogICAgKQogICAgZXhjbHVkZSA9ICgicHJlc2VudGVyX3BpY3R1cmUiLCAicHJlc2VudGVyX2NvbXBhbnlfbG9nbyIpCgogICAgZmlsdGVyX2hvcml6b250YWwgPSAoKQogICAgbGlzdF9maWx0ZXIgPSAoInN0YXR1cyIsICJtb2RlIiwgImV2ZW50X3R5cGUiKQogICAgZmllbGRzZXRzID0gKAogICAgICAgICgKICAgICAgICAgICAgTm9uZSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImZpZWxkcyI6ICgKICAgICAgICAgICAgICAgICAgICAidGl0bGUiLAogICAgICAgICAgICAgICAgICAgICJzdGF0dXMiLAogICAgICAgICAgICAgICAgICAgICJldmVudF90eXBlIiwKICAgICAgICAgICAgICAgICAgICAibW9kZSIsCiAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIiwKICAgICAgICAgICAgICAgICAgICAiaG9zdCIsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICB9LAogICAgICAgICksCiAgICAgICAgKAogICAgICAgICAgICAiUHJlc2VudGVyIERldGFpbHMiLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiZmllbGRzIjogKAogICAgICAgICAgICAgICAgICAgICJwcmVzZW50ZXJfZmlyc3RfbmFtZSIsCiAgICAgICAgICAgICAgICAgICAgInByZXNlbnRlcl9sYXN0X25hbWUiLAogICAgICAgICAgICAgICAgICAgICJwcmVzX2ltZyIsCiAgICAgICAgICAgICAgICAgICAgInByZXNlbnRlcl9wcm9maWxlX3VybCIsCiAgICAgICAgICAgICAgICAgICAgInByZXNlbnRlcl9jb21wYW55X25hbWUiLAogICAgICAgICAgICAgICAgICAgICJwcmVzX2NvbV9sb2ciLAogICAgICAgICAgICAgICAgICAgICJwcmVzZW50ZXJfYmlvIiwKICAgICAgICAgICAgICAgICAgICAicHJlc2VudGVyX2Rlc2lnbmF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAicHJlc2VudGVyX2NvbXBhbnlfd2Vic2l0ZSIsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICB9LAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgKSwKICAgICAgICAoCiAgICAgICAgICAgICJFdmVudCBEZXRhaWxzIiwKICAgICAgICAgICAgewo8fGZpbV9lbmR8Pg=="]
["c1e5f8c8cd8fdd1e839422ed5e73b7176c02d402-2","c1e5f8c8cd8fdd1e839422ed5e73b7176c02d402","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KCmZyb20gZXZlbnRzLm1vZGVscyBpbXBvcnQgRXZlbnQKCgpjbGFzcyBFdmVudEFkbWluKGFkbWluLk1vZGVsQWRtaW4pOgogICAgbGlzdF9kaXNwbGF5ID0gKCJ0aXRsZSIsICJldmVudF90eXBlIiwgImxvY2F0aW9uIiwgImhvc3QiLCAic3RhdHVzIiwgInN0YXJ0X2RhdGUiKQogICAgc2VhcmNoX2ZpZWxkcyA9ICgKICAgICAgICAidGl0bGUiLAogICAgICAgICJob3N0IiwKICAgICAgICAicHJlc2VudGVyX2ZpcnN0X25hbWUiLAogICAgICAgICJwcmVzZW50ZXJfbGFzdF9uYW1lIiwKICAgICAgICAicHJlc2VudGVyX2NvbXBhbnlfbmFtZSIsCiAgICApCiAgICByZWFkb25seV9maWVsZHMgPSAoCiAgICAgICAgImFkZGVkX2J5IiwKICAgICAgICAiYWRkZWRfb24iLAogICAgKQogICAgZXhjbHVkZSA9ICgicHJlc2VudGVyX3BpY3R1cmUiLCAicHJlc2VudGVyX2NvbXBhbnlfbG9nbyIpCjx8ZmltX2hvbGV8PgogICAgICAgICgKICAgICAgICAgICAgTm9uZSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImZpZWxkcyI6ICgKICAgICAgICAgICAgICAgICAgICAidGl0bGUiLAogICAgICAgICAgICAgICAgICAgICJzdGF0dXMiLAogICAgICAgICAgICAgICAgICAgICJldmVudF90eXBlIiwKICAgICAgICAgICAgICAgICAgICAibW9kZSIsCiAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIiwKICAgICAgICAgICAgICAgICAgICAiaG9zdCIsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICB9LAogICAgICAgICksCiAgICAgICAgKAogICAgICAgICAgICAiUHJlc2VudGVyIERldGFpbHMiLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiZmllbGRzIjogKAogICAgICAgICAgICAgICAgICAgICJwcmVzZW50ZXJfZmlyc3RfbmFtZSIsCiAgICAgICAgICAgICAgICAgICAgInByZXNlbnRlcl9sYXN0X25hbWUiLAogICAgICAgICAgICAgICAgICAgICJwcmVzX2ltZyIsCiAgICAgICAgICAgICAgICAgICAgInByZXNlbnRlcl9wcm9maWxlX3VybCIsCiAgICAgICAgICAgICAgICAgICAgInByZXNlbnRlcl9jb21wYW55X25hbWUiLAogICAgICAgICAgICAgICAgICAgICJwcmVzX2NvbV9sb2ciLAogICAgICAgICAgICAgICAgICAgICJwcmVzZW50ZXJfYmlvIiwKICAgICAgICAgICAgICAgICAgICAicHJlc2VudGVyX2Rlc2lnbmF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAicHJlc2VudGVyX2NvbXBhbnlfd2Vic2l0ZSIsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICB9LAogICAgICAgICksCiAgICAgICAgKAogICAgICAgICAgICAiRXZlbnQgRGV0YWlscyIsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJmaWVsZHMiOiAoCiAgICAgICAgICAgICAgICAgICAgImV2ZW50X2FkZHJlc3MiLAogICAgICAgICAgICAgICAgICAgICJldmVudF9kZXNjcmlwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgImxpbmsiLAogICAgICAgICAgICAgICAgICAgICJzbGlkZXMiLAogICAgICAgICAgICAgICAgICAgICJ0aW1lem9uZSIsCiAgICAgICAgICAgICAgICAgICAgInN0YXJ0X2RhdGUiLAogICAgICAgICAgICAgICAgICAgICJzdGFydF90aW1lIiwKICAgICAgICAgICAgICAgICAgICAiZW5kX2RhdGUiLAogICAgICAgICAgICAgICAgICAgICJlbmRfdGltZSIsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICB9LAogICAgICAgICksCiAgICAgICAgKAogICAgICAgICAgICAiTWV0YSBEYXRhIiwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImZpZWxkcyI6ICgKICAgICAgICAgICAgICAgICAgICAiYWRkZWRfYnkiLAogICAgICAgICAgICAgICAgICAgICJhZGRlZF9vbiIsCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIH0sCiAgICAgICAgKSwKICAgICkKCiAgICBkZWYgc2F2ZV9tb2RlbChzZWxmLCByZXF1ZXN0LCBvYmosIGZvcm0sIGNoYW5nZSk6CiAgICAgICAgb2JqLmFkZGVkX2J5ID0gcmVxdWVzdC51c2VyCiAgICAgICAgcmV0dXJuIHN1cGVyKCkuc2F2ZV9tb2RlbChyZXF1ZXN0LCBvYmosIGZvcm0sIGNoYW5nZSkKCgphZG1pbi5zaXRlLnJlZ2lzdGVyKEV2ZW50LCBFdmVudEFkbWluKQo8fGZpbV9zdWZmaXh8PgoKICAgIGZpbHRlcl9ob3Jpem9udGFsID0gKCkKICAgIGxpc3RfZmlsdGVyID0gKCJzdGF0dXMiLCAibW9kZSIsICJldmVudF90eXBlIikKICAgIGZpZWxkc2V0cyA9ICgKPHxmaW1fZW5kfD4="]
["c1e5f8c8cd8fdd1e839422ed5e73b7176c02d402-3","c1e5f8c8cd8fdd1e839422ed5e73b7176c02d402","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KCmZyb20gZXZlbnRzLm1vZGVscyBpbXBvcnQgRXZlbnQKCgpjbGFzcyBFdmVudEFkbWluKGFkbWluLk1vZGVsQWRtaW4pOgogICAgbGlzdF9kaXNwbGF5ID0gKCJ0aXRsZSIsICJldmVudF90eXBlIiwgImxvY2F0aW9uIiwgImhvc3QiLCAic3RhdHVzIiwgInN0YXJ0X2RhdGUiKQogICAgc2VhcmNoX2ZpZWxkcyA9ICgKICAgICAgICAidGl0bGUiLAogICAgICAgICJob3N0IiwKICAgICAgICAicHJlc2VudGVyX2ZpcnN0X25hbWUiLAogICAgICAgICJwcmVzZW50ZXJfbGFzdF9uYW1lIiwKICAgICAgICAicHJlc2VudGVyX2NvbXBhbnlfbmFtZSIsCiAgICApCiAgICByZWFkb25seV9maWVsZHMgPSAoCiAgICAgICAgImFkZGVkX2J5IiwKICAgICAgICAiYWRkZWRfb24iLAogICAgKQogICAgZXhjbHVkZSA9ICgicHJlc2VudGVyX3BpY3R1cmUiLCAicHJlc2VudGVyX2NvbXBhbnlfbG9nbyIpCgogICAgZmlsdGVyX2hvcml6b250YWwgPSAoKQogICAgbGlzdF9maWx0ZXIgPSAoInN0YXR1cyIsICJtb2RlIiwgImV2ZW50X3R5cGUiKQogICAgZmllbGRzZXRzID0gKAogICAgICAgICgKICAgICAgICAgICAgTm9uZSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImZpZWxkcyI6ICgKICAgICAgICAgICAgICAgICAgICAidGl0bGUiLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgInN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICAgImV2ZW50X3R5cGUiLAogICAgICAgICAgICAgICAgICAgICJtb2RlIiwKICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24iLAo8fGZpbV9lbmR8Pg=="]
["68ed9321fc70e1eadf5636a1e877166d58af4df9-1","68ed9321fc70e1eadf5636a1e877166d58af4df9","PHxmaW1fcHJlZml4fD4KJycnUGhvdG9hcHAgTW9kZWxzJycnCgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCgpmcm9tIGRqYW5nby5jb250cmliLmF1dGggaW1wb3J0IGdldF91c2VyX21vZGVsCgpmcm9tIHRhZ2dpdC5tYW5hZ2VycyBpbXBvcnQgVGFnZ2FibGVNYW5hZ2VyCgpjbGFzcyBQaG90byhtb2RlbHMuTW9kZWwpOgogICAgCiAgICB0aXRsZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD00NSkKICAgIAogICAgZGVzY3JpcHRpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjUwKSAKCiAgICBjcmVhdGVkID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoYXV0b19ub3dfYWRkPVRydWUpCgogICAgaW1hZ2UgPSBtb2RlbHMuSW1hZ2VGaWVsZCh1cGxvYWRfdG89J3Bob3Rvcy8nKQoKICAgIHN1Ym1pdHRlciA9IG1vZGVscy5Gb3JlaWduS2V5KGdldF91c2VyX21vZGVsKCksIG9uX2RlbGV0ZT1tb2RlbHMuQ0FTQ0FERSkKCiAgICB0YWdzID0gVGFnZ2FibGVNYW5hZ2VyKCkgCgogICAgZGVmIF9fc3RyX18oc2VsZik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICByZXR1cm4gc2VsZi50aXRsZQo8fGZpbV9lbmR8Pg=="]
["68ed9321fc70e1eadf5636a1e877166d58af4df9-2","68ed9321fc70e1eadf5636a1e877166d58af4df9","PHxmaW1fcHJlZml4fD4KJycnUGhvdG9hcHAgTW9kZWxzJycnCgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCgpmcm9tIGRqYW5nby5jb250cmliLmF1dGggaW1wb3J0IGdldF91c2VyX21vZGVsCgpmcm9tIHRhZ2dpdC5tYW5hZ2VycyBpbXBvcnQgVGFnZ2FibGVNYW5hZ2VyCgpjbGFzcyBQaG90byhtb2RlbHMuTW9kZWwpOgogICAgCiAgICB0aXRsZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD00NSkKICAgIAogICAgZGVzY3JpcHRpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjUwKSAKCiAgICBjcmVhdGVkID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoYXV0b19ub3dfYWRkPVRydWUpCgogICAgaW1hZ2UgPSBtb2RlbHMuSW1hZ2VGaWVsZCh1cGxvYWRfdG89J3Bob3Rvcy8nKQoKPHxmaW1faG9sZXw+CiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi50aXRsZQo8fGZpbV9zdWZmaXh8PgogICAgc3VibWl0dGVyID0gbW9kZWxzLkZvcmVpZ25LZXkoZ2V0X3VzZXJfbW9kZWwoKSwgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFKQoKICAgIHRhZ3MgPSBUYWdnYWJsZU1hbmFnZXIoKSAKCjx8ZmltX2VuZHw+"]
["68ed9321fc70e1eadf5636a1e877166d58af4df9-3","68ed9321fc70e1eadf5636a1e877166d58af4df9","PHxmaW1fcHJlZml4fD4KJycnUGhvdG9hcHAgTW9kZWxzJycnCgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCgpmcm9tIGRqYW5nby5jb250cmliLmF1dGggaW1wb3J0IGdldF91c2VyX21vZGVsCgpmcm9tIHRhZ2dpdC5tYW5hZ2VycyBpbXBvcnQgVGFnZ2FibGVNYW5hZ2VyCgpjbGFzcyBQaG90byhtb2RlbHMuTW9kZWwpOgogICAgCiAgICB0aXRsZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD00NSkKICAgIAogICAgZGVzY3JpcHRpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjUwKSAKCiAgICBjcmVhdGVkID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoYXV0b19ub3dfYWRkPVRydWUpCgogICAgaW1hZ2UgPSBtb2RlbHMuSW1hZ2VGaWVsZCh1cGxvYWRfdG89J3Bob3Rvcy8nKQoKPHxmaW1faG9sZXw+CiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi50aXRsZQo8fGZpbV9zdWZmaXh8PgogICAgc3VibWl0dGVyID0gbW9kZWxzLkZvcmVpZ25LZXkoZ2V0X3VzZXJfbW9kZWwoKSwgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFKQoKICAgIHRhZ3MgPSBUYWdnYWJsZU1hbmFnZXIoKSAKCjx8ZmltX2VuZHw+"]
["68ed9321fc70e1eadf5636a1e877166d58af4df9-4","68ed9321fc70e1eadf5636a1e877166d58af4df9","PHxmaW1fcHJlZml4fD4KJycnUGhvdG9hcHAgTW9kZWxzJycnCgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCgpmcm9tIGRqYW5nby5jb250cmliLmF1dGggaW1wb3J0IGdldF91c2VyX21vZGVsCgpmcm9tIHRhZ2dpdC5tYW5hZ2VycyBpbXBvcnQgVGFnZ2FibGVNYW5hZ2VyCgpjbGFzcyBQaG90byhtb2RlbHMuTW9kZWwpOgogICAgCiAgICB0aXRsZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD00NSkKPHxmaW1faG9sZXw+CgogICAgaW1hZ2UgPSBtb2RlbHMuSW1hZ2VGaWVsZCh1cGxvYWRfdG89J3Bob3Rvcy8nKQoKICAgIHN1Ym1pdHRlciA9IG1vZGVscy5Gb3JlaWduS2V5KGdldF91c2VyX21vZGVsKCksIG9uX2RlbGV0ZT1tb2RlbHMuQ0FTQ0FERSkKCiAgICB0YWdzID0gVGFnZ2FibGVNYW5hZ2VyKCkgCgogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYudGl0bGUKPHxmaW1fc3VmZml4fD4KICAgIAogICAgZGVzY3JpcHRpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjUwKSAKCiAgICBjcmVhdGVkID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoYXV0b19ub3dfYWRkPVRydWUpCjx8ZmltX2VuZHw+"]
["e7e024a669665fc5bac63644dca4adedf186d827-1","e7e024a669665fc5bac63644dca4adedf186d827","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgQ29weXJpZ2h0IDIwMTQtMjAxOCBUaGUgUHlTQ0YgRGV2ZWxvcGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwojIEF1dGhvcjogUWltaW5nIFN1biA8b3NpcnB0LnN1bkBnbWFpbC5jb20+CiMKCiIiIgpESUlTCiIiIgoKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZQppbXBvcnQgbnVtcHkKaW1wb3J0IHNjaXB5LmxpbmFsZwppbXBvcnQgc2NpcHkub3B0aW1pemUKZnJvbSBweXNjZiBpbXBvcnQgbGliCmZyb20gcHlzY2YubGliIGltcG9ydCBsb2dnZXIKCkRFQlVHID0gRmFsc2UKCiMgSi4gTW9sLiBTdHJ1Y3QuIDExNCwgMzEtMzQKIyBQQ0NQLCA0LCAxMQojIEdFRElJUywgSkNUQywgMiwgODM1CiMgQzJESUlTLCBJSlFDLCA0NSwgMzEKCiMgZXJyb3IgdmVjdG9yID0gU0RGLUZEUwojIGVycm9yIHZlY3RvciA9IEZfYWkgfiAoUy1TRFMpKlNeey0xfUZEUyA9IEZEUyAtIFNERkRTIH4gRkRTLVNERiBpbiBjb252ZXJnZQpjbGFzcyBDRElJUyhsaWIuZGlpcy5ESUlTKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZj1Ob25lLCBmaWxlbmFtZT1Ob25lKToKICAgICAgICBsaWIuZGlpcy5ESUlTLl9faW5pdF9fKHNlbGYsIG1mLCBmaWxlbmFtZSkKICAgICAgICBzZWxmLnJvbGxiYWNrID0gRmFsc2UKICAgICAgICBzZWxmLnNwYWNlID0gOAo8fGZpbV9ob2xlfD4KICAgICAgICB4bmV3ID0gbGliLmRpaXMuRElJUy51cGRhdGUoc2VsZiwgZiwgeGVycj1lcnJ2ZWMpCiAgICAgICAgaWYgc2VsZi5yb2xsYmFjayA+IDAgYW5kIGxlbihzZWxmLl9ib29ra2VlcCkgPT0gc2VsZi5zcGFjZToKICAgICAgICAgICAgc2VsZi5fYm9va2tlZXAgPSBzZWxmLl9ib29ra2VlcFstc2VsZi5yb2xsYmFjazpdCiAgICAgICAgcmV0dXJuIHhuZXcKCiAgICBkZWYgZ2V0X251bV92ZWMoc2VsZik6CiAgICAgICAgaWYgc2VsZi5yb2xsYmFjazoKICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hlYWQKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2Jvb2trZWVwKQoKU0NGRElJUyA9IFNDRl9ESUlTID0gRElJUyA9IENESUlTCgpkZWYgZ2V0X2Vycl92ZWMocywgZCwgZik6CiAgICAnJydlcnJvciB2ZWN0b3IgPSBTREYgLSBGRFMnJycKICAgIGlmIGlzaW5zdGFuY2UoZiwgbnVtcHkubmRhcnJheSkgYW5kIGYubmRpbSA9PSAyOgogICAgICAgIHNkZiA9IHJlZHVjZShudW1weS5kb3QsIChzLGQsZikpCiAgICAgICAgZXJydmVjID0gc2RmLlQuY29uaigpIC0gc2RmCgogICAgZWxpZiBpc2luc3RhbmNlKGYsIG51bXB5Lm5kYXJyYXkpIGFuZCBmLm5kaW0gPT0gMyBhbmQgcy5uZGltID09IDM6CiAgICAgICAgZXJydmVjID0gW10KICAgICAgICBmb3IgaSBpbiByYW5nZShmLnNoYXBlWzBdKToKICAgICAgICAgICAgc2RmID0gcmVkdWNlKG51bXB5LmRvdCwgKHNbaV0sIGRbaV0sIGZbaV0pKQogICAgICAgICAgICBlcnJ2ZWMuYXBwZW5kKChzZGYuVC5jb25qKCkgLSBzZGYpKQogICAgICAgIGVycnZlYyA9IG51bXB5LnZzdGFjayhlcnJ2ZWMpCgogICAgZWxpZiBmLm5kaW0gPT0gcy5uZGltKzEgYW5kIGYuc2hhcGVbMF0gPT0gMjogICMgZm9yIFVIRgogICAgICAgIG5hbyA9IHMuc2hhcGVbLTFdCiAgICAgICAgcyA9IGxpYi5hc2FycmF5KChzLHMpKS5yZXNoYXBlKC0xLG5hbyxuYW8pCiAgICAgICAgcmV0dXJuIGdldF9lcnJfdmVjKHMsIGQucmVzaGFwZShzLnNoYXBlKSwgZi5yZXNoYXBlKHMuc2hhcGUpKQogICAgZWxzZToKICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1Vua25vd24gU0NGIERJSVMgdHlwZScpCiAgICByZXR1cm4gZXJydmVjCgoKY2xhc3MgRURJSVMobGliLmRpaXMuRElJUyk6CiAgICAnJydTQ0YtRURJSVMKICAgIFJlZjogSkNQIDExNiwgODI1NQogICAgJycnCiAgICBkZWYgdXBkYXRlKHNlbGYsIHMsIGQsIGYsIG1mLCBoMWUsIHZoZik6CiAgICAgICAgaWYgc2VsZi5faGVhZCA+PSBzZWxmLnNwYWNlOgogICAgICAgICAgICBzZWxmLl9oZWFkID0gMAogICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CiAgICAgICAgICAgIHNoYXBlID0gKHNlbGYuc3BhY2UsKSArIGYuc2hhcGUKICAgICAgICAgICAgc2VsZi5fYnVmZmVyWydkbScgIF0gPSBudW1weS56ZXJvcyhzaGFwZSwgZHR5cGU9Zi5kdHlwZSkKICAgICAgICAgICAgc2VsZi5fYnVmZmVyWydmb2NrJ10gPSBudW1weS56ZXJvcyhzaGFwZSwgZHR5cGU9Zi5kdHlwZSkKICAgICAgICAgICAgc2VsZi5fYnVmZmVyWydldG90J10gPSBudW1weS56ZXJvcyhzZWxmLnNwYWNlKQogICAgICAgIHNlbGYuX2J1ZmZlclsnZG0nICBdW3NlbGYuX2hlYWRdID0gZAogICAgICAgIHNlbGYuX2J1ZmZlclsnZm9jayddW3NlbGYuX2hlYWRdID0gZgogICAgICAgIHNlbGYuX2J1ZmZlclsnZXRvdCddW3NlbGYuX2hlYWRdID0gbWYuZW5lcmd5X2VsZWMoZCwgaDFlLCB2aGYpWzBdCiAgICAgICAgc2VsZi5faGVhZCArPSAxCgogICAgICAgIGRzID0gc2VsZi5fYnVmZmVyWydkbScgIF0KICAgICAgICBmcyA9IHNlbGYuX2J1ZmZlclsnZm9jayddCiAgICAgICAgZXMgPSBzZWxmLl9idWZmZXJbJ2V0b3QnXQogICAgICAgIGV0b3QsIGMgPSBlZGlpc19taW5pbWl6ZShlcywgZHMsIGZzKQogICAgICAgIGxvZ2dlci5kZWJ1ZzEoc2VsZiwgJ0UgJXMgIGRpaXMtYyAlcycsIGV0b3QsIGMpCiAgICAgICAgZm9jayA9IG51bXB5LmVpbnN1bSgnaSxpLi4ucHEtPi4uLnBxJywgYywgZnMpCiAgICAgICAgcmV0dXJuIGZvY2sKCmRlZiBlZGlpc19taW5pbWl6ZShlcywgZHMsIGZzKToKICAgIG54ID0gZXMuc2l6ZQogICAgbmFvID0gZHMuc2hhcGVbLTFdCiAgICBkcyA9IGRzLnJlc2hhcGUobngsLTEsbmFvLG5hbykKICAgIGZzID0gZnMucmVzaGFwZShueCwtMSxuYW8sbmFvKQogICAgZGYgPSBudW1weS5laW5zdW0oJ2lucHEsam5xcC0+aWonLCBkcywgZnMpLnJlYWwKICAgIGRpYWcgPSBkZi5kaWFnb25hbCgpCiAgICBkZiA9IGRpYWdbOixOb25lXSArIGRpYWcgLSBkZiAtIGRmLlQKCiAgICBkZWYgY29zdGYoeCk6CiAgICAgICAgYyA9IHgqKjIgLyAoeCoqMikuc3VtKCkKICAgICAgICByZXR1cm4gbnVtcHkuZWluc3VtKCdpLGknLCBjLCBlcykgLSBudW1weS5laW5zdW0oJ2ksaWosaicsIGMsIGRmLCBjKQoKICAgIGRlZiBncmFkKHgpOgogICAgICAgIHgyc3VtID0gKHgqKjIpLnN1bSgpCiAgICAgICAgYyA9IHgqKjIgLyB4MnN1bQogICAgICAgIGZjID0gZXMgLSAyKm51bXB5LmVpbnN1bSgnaSxpay0+aycsIGMsIGRmKQogICAgICAgIGN4ID0gbnVtcHkuZGlhZyh4Kngyc3VtKSAtIG51bXB5LmVpbnN1bSgnayxuLT5rbicsIHgqKjIsIHgpCiAgICAgICAgY3ggKj0gMi94MnN1bSoqMgogICAgICAgIHJldHVybiBudW1weS5laW5zdW0oJ2ssa24tPm4nLCBmYywgY3gpCgogICAgaWYgREVCVUc6CiAgICAgICAgeDAgPSBudW1weS5yYW5kb20ucmFuZG9tKG54KQogICAgICAgIGRmeDAgPSBudW1weS56ZXJvc19saWtlKHgwKQogICAgICAgIGZvciBpIGluIHJhbmdlKG54KToKICAgICAgICAgICAgeDEgPSB4MC5jb3B5KCkKICAgICAgICAgICAgeDFbaV0gKz0gMWUtNAogICAgICAgICAgICBkZngwW2ldID0gKGNvc3RmKHgxKSAtIGNvc3RmKHgwKSkqMWU0CiAgICAgICAgcHJpbnQoKGRmeDAgLSBncmFkKHgwKSkgLyBkZngwKQoKICAgIHJlcyA9IHNjaXB5Lm9wdGltaXplLm1pbmltaXplKGNvc3RmLCBudW1weS5vbmVzKG54KSwgbWV0aG9kPSdCRkdTJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphYz1ncmFkLCB0b2w9MWUtOSkKICAgIHJldHVybiByZXMuZnVuLCAocmVzLngqKjIpLyhyZXMueCoqMikuc3VtKCkKCgpjbGFzcyBBRElJUyhsaWIuZGlpcy5ESUlTKToKICAgICcnJwogICAgUmVmOiBKQ1AsIDEzMiwgMDU0MTA5CiAgICAnJycKICAgIGRlZiB1cGRhdGUoc2VsZiwgcywgZCwgZiwgbWYsIGgxZSwgdmhmKToKICAgICAgICBpZiBzZWxmLl9oZWFkID49IHNlbGYuc3BhY2U6CiAgICAgICAgICAgIHNlbGYuX2hlYWQgPSAwCiAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKICAgICAgICAgICAgc2hhcGUgPSAoc2VsZi5zcGFjZSwpICsgZi5zaGFwZQogICAgICAgICAgICBzZWxmLl9idWZmZXJbJ2RtJyAgXSA9IG51bXB5Lnplcm9zKHNoYXBlLCBkdHlwZT1mLmR0eXBlKQogICAgICAgICAgICBzZWxmLl9idWZmZXJbJ2ZvY2snXSA9IG51bXB5Lnplcm9zKHNoYXBlLCBkdHlwZT1mLmR0eXBlKQogICAgICAgIHNlbGYuX2J1ZmZlclsnZG0nICBdW3NlbGYuX2hlYWRdID0gZAogICAgICAgIHNlbGYuX2J1ZmZlclsnZm9jayddW3NlbGYuX2hlYWRdID0gZgoKICAgICAgICBkcyA9IHNlbGYuX2J1ZmZlclsnZG0nICBdCiAgICAgICAgZnMgPSBzZWxmLl9idWZmZXJbJ2ZvY2snXQogICAgICAgIGZ1biwgYyA9IGFkaWlzX21pbmltaXplKGRzLCBmcywgc2VsZi5faGVhZCkKICAgICAgICBpZiBzZWxmLnZlcmJvc2UgPj0gbG9nZ2VyLkRFQlVHMToKICAgICAgICAgICAgZXRvdCA9IG1mLmVuZXJneV9lbGVjKGQsIGgxZSwgdmhmKVswXSArIGZ1bgogICAgICAgICAgICBsb2dnZXIuZGVidWcxKHNlbGYsICdFICVzICBkaWlzLWMgJXMgJywgZXRvdCwgYykKICAgICAgICBmb2NrID0gbnVtcHkuZWluc3VtKCdpLGkuLi5wcS0+Li4ucHEnLCBjLCBmcykKICAgICAgICBzZWxmLl9oZWFkICs9IDEKICAgICAgICByZXR1cm4gZm9jawoKZGVmIGFkaWlzX21pbmltaXplKGRzLCBmcywgaWRuZXdlc3QpOgogICAgbnggPSBkcy5zaGFwZVswXQogICAgbmFvID0gZHMuc2hhcGVbLTFdCiAgICBkcyA9IGRzLnJlc2hhcGUobngsLTEsbmFvLG5hbykKICAgIGZzID0gZnMucmVzaGFwZShueCwtMSxuYW8sbmFvKQogICAgZGYgPSBudW1weS5laW5zdW0oJ2lucHEsam5xcC0+aWonLCBkcywgZnMpLnJlYWwKICAgIGRfZm4gPSBkZls6LGlkbmV3ZXN0XQogICAgZG5fZiA9IGRmW2lkbmV3ZXN0XQogICAgZG5fZm4gPSBkZltpZG5ld2VzdCxpZG5ld2VzdF0KICAgIGRkX2ZuID0gZF9mbiAtIGRuX2ZuCiAgICBkZiA9IGRmIC0gZF9mbls6LE5vbmVdIC0gZG5fZiArIGRuX2ZuCgogICAgZGVmIGNvc3RmKHgpOgogICAgICAgIGMgPSB4KioyIC8gKHgqKjIpLnN1bSgpCiAgICAgICAgcmV0dXJuIChudW1weS5laW5zdW0oJ2ksaScsIGMsIGRkX2ZuKSAqIDIgKwogICAgICAgICAgICAgICAgbnVtcHkuZWluc3VtKCdpLGlqLGonLCBjLCBkZiwgYykpCgogICAgZGVmIGdyYWQoeCk6CiAgICAgICAgeDJzdW0gPSAoeCoqMikuc3VtKCkKICAgICAgICBjID0geCoqMiAvIHgyc3VtCiAgICAgICAgZmMgPSAyKmRkX2ZuCiAgICAgICAgZmMrPSBudW1weS5laW5zdW0oJ2osa2otPmsnLCBjLCBkZikKICAgICAgICBmYys9IG51bXB5LmVpbnN1bSgnaSxpay0+aycsIGMsIGRmKQogICAgICAgIGN4ID0gbnVtcHkuZGlhZyh4Kngyc3VtKSAtIG51bXB5LmVpbnN1bSgnayxuLT5rbicsIHgqKjIsIHgpCiAgICAgICAgY3ggKj0gMi94MnN1bSoqMgogICAgICAgIHJldHVybiBudW1weS5laW5zdW0oJ2ssa24tPm4nLCBmYywgY3gpCgogICAgaWYgREVCVUc6CiAgICAgICAgeDAgPSBudW1weS5yYW5kb20ucmFuZG9tKG54KQogICAgICAgIGRmeDAgPSBudW1weS56ZXJvc19saWtlKHgwKQogICAgICAgIGZvciBpIGluIHJhbmdlKG54KToKICAgICAgICAgICAgeDEgPSB4MC5jb3B5KCkKICAgICAgICAgICAgeDFbaV0gKz0gMWUtNAogICAgICAgICAgICBkZngwW2ldID0gKGNvc3RmKHgxKSAtIGNvc3RmKHgwKSkqMWU0CiAgICAgICAgcHJpbnQoKGRmeDAgLSBncmFkKHgwKSkgLyBkZngwKQoKICAgIHJlcyA9IHNjaXB5Lm9wdGltaXplLm1pbmltaXplKGNvc3RmLCBudW1weS5vbmVzKG54KSwgbWV0aG9kPSdCRkdTJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphYz1ncmFkLCB0b2w9MWUtOSkKICAgIHJldHVybiByZXMuZnVuLCAocmVzLngqKjIpLyhyZXMueCoqMikuc3VtKCkKCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIHVwZGF0ZShzZWxmLCBzLCBkLCBmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIGVycnZlYyA9IGdldF9lcnJfdmVjKHMsIGQsIGYpCiAgICAgICAgbG9nZ2VyLmRlYnVnMShzZWxmLCAnZGlpcy1ub3JtKGVycnZlYyk9JWcnLCBudW1weS5saW5hbGcubm9ybShlcnJ2ZWMpKQo8fGZpbV9lbmR8Pg=="]
["15b191c1180049bfeb86bae3d82f63eef1b784aa-1","15b191c1180049bfeb86bae3d82f63eef1b784aa","PHxmaW1fcHJlZml4fD4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDb3B5cmlnaHQgKGMpIDIwMjAgUHlJbnN0YWxsZXIgRGV2ZWxvcG1lbnQgVGVhbS4KIwojIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwojIExpY2Vuc2UgKHZlcnNpb24gMi4wIG9yIGxhdGVyKS4KIwojIFRoZSBmdWxsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlIGluIExJQ0VOU0UuR1BMLnR4dCwgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgc29mdHdhcmUuCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgo8fGZpbV9ob2xlfD4KSG9vayBmb3IgaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2g1cHkvCiIiIgoKCmhpZGRlbmltcG9ydHMgPSBbJ2g1cHkuX3Byb3h5JywgJ2g1cHkudXRpbHMnLCAnaDVweS5kZWZzJywgJ2g1cHkuaDVhYyddCjx8ZmltX3N1ZmZpeHw+CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKIiIiCjx8ZmltX2VuZHw+"]
["15b191c1180049bfeb86bae3d82f63eef1b784aa-2","15b191c1180049bfeb86bae3d82f63eef1b784aa","PHxmaW1fcHJlZml4fD4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDb3B5cmlnaHQgKGMpIDIwMjAgUHlJbnN0YWxsZXIgRGV2ZWxvcG1lbnQgVGVhbS4KIwojIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwojIExpY2Vuc2UgKHZlcnNpb24gMi4wIG9yIGxhdGVyKS4KIwojIFRoZSBmdWxsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlIGluIExJQ0VOU0UuR1BMLnR4dCwgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgc29mdHdhcmUuCiMKPHxmaW1faG9sZXw+CiIiIgpIb29rIGZvciBodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvaDVweS8KIiIiCgoKaGlkZGVuaW1wb3J0cyA9IFsnaDVweS5fcHJveHknLCAnaDVweS51dGlscycsICdoNXB5LmRlZnMnLCAnaDVweS5oNWFjJ10KPHxmaW1fc3VmZml4fD4KIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCjx8ZmltX2VuZHw+"]
["15b191c1180049bfeb86bae3d82f63eef1b784aa-3","15b191c1180049bfeb86bae3d82f63eef1b784aa","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDb3B5cmlnaHQgKGMpIDIwMjAgUHlJbnN0YWxsZXIgRGV2ZWxvcG1lbnQgVGVhbS4KIwojIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo8fGZpbV9lbmR8Pg=="]
["15b191c1180049bfeb86bae3d82f63eef1b784aa-4","15b191c1180049bfeb86bae3d82f63eef1b784aa","PHxmaW1fcHJlZml4fD4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDb3B5cmlnaHQgKGMpIDIwMjAgUHlJbnN0YWxsZXIgRGV2ZWxvcG1lbnQgVGVhbS4KIwojIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo8fGZpbV9ob2xlfD4KIwojIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKIiIiCkhvb2sgZm9yIGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9oNXB5LwoiIiIKCgpoaWRkZW5pbXBvcnRzID0gWydoNXB5Ll9wcm94eScsICdoNXB5LnV0aWxzJywgJ2g1cHkuZGVmcycsICdoNXB5Lmg1YWMnXQo8fGZpbV9zdWZmaXh8PgojIExpY2Vuc2UgKHZlcnNpb24gMi4wIG9yIGxhdGVyKS4KIwojIFRoZSBmdWxsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlIGluIExJQ0VOU0UuR1BMLnR4dCwgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgc29mdHdhcmUuCjx8ZmltX2VuZHw+"]
["15b191c1180049bfeb86bae3d82f63eef1b784aa-5","15b191c1180049bfeb86bae3d82f63eef1b784aa","PHxmaW1fcHJlZml4fD4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDb3B5cmlnaHQgKGMpIDIwMjAgUHlJbnN0YWxsZXIgRGV2ZWxvcG1lbnQgVGVhbS4KIwojIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwojIExpY2Vuc2UgKHZlcnNpb24gMi4wIG9yIGxhdGVyKS4KIwojIFRoZSBmdWxsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlIGluIExJQ0VOU0UuR1BMLnR4dCwgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgc29mdHdhcmUuCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCiIiIgpIb29rIGZvciBodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvaDVweS8KIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgpoaWRkZW5pbXBvcnRzID0gWydoNXB5Ll9wcm94eScsICdoNXB5LnV0aWxzJywgJ2g1cHkuZGVmcycsICdoNXB5Lmg1YWMnXQo8fGZpbV9lbmR8Pg=="]
["e70a0f9f04a679937bbd6e2ddd11ed9a03e23be6-1","e70a0f9f04a679937bbd6e2ddd11ed9a03e23be6","PHxmaW1fcHJlZml4fD4KZnJvbSBtdGdubHAgaW1wb3J0IGNvbmZpZwpmcm9tIGhlbHBlcnMudXBzZXJ0X2RmIGltcG9ydCB1cHNlcnRfZGYKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCmZyb20gdHlwaW5nIGltcG9ydCBMaXN0CgppbXBvcnQgcGFuZGFzIGFzIHBkCmZyb20gc3FsYWxjaGVteSBpbXBvcnQgY3JlYXRlX2VuZ2luZSwgZW5naW5lCgppbXBvcnQgcHJlZmVjdApmcm9tIHByZWZlY3QgaW1wb3J0IEZsb3csIFBhcmFtZXRlciwgVGFzaywgdGFzawoKZnJvbSBwcmVmZWN0LnRhc2tzLmNvbnRyb2xfZmxvdy5maWx0ZXIgaW1wb3J0IEZpbHRlclRhc2sKZnJvbSBwcmVmZWN0LmVuZ2luZS5zaWduYWxzIGltcG9ydCBTS0lQCgpmcm9tIG10Z25scC5oZWxwZXJzLmZsb3dzX2NvbW1vbnMgaW1wb3J0IGdldF9saXN0X29yX2FsbF9kZWNrX2lkcwoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQoKZW5naW5lID0gY3JlYXRlX2VuZ2luZShjb25maWcuREJfU1RSKQpNVEdNRVRBX0RFQ0tfVE5BTUUgPSBjb25maWcuTVRHTUVUQV9ERUNLX1ROQU1FCk1UR01FVEFfQ0FSRFNfVE5BTUUgPSBjb25maWcuTVRHTUVUQV9DQVJEU19UTkFNRQpERUNLU19UTkFNRSA9IGNvbmZpZy5ERUNLU19UTkFNRQpERUNLU19GRUFUVVJFU19UTkFNRSA9IGNvbmZpZy5ERUNLU19GRUFUVVJFU19UTkFNRQoKCkB0YXNrCmRlZiBjcmVhdGVfY2FyZHNfZmVhdHVyZXMoCiAgICBkZWNrX2lkOiBzdHIsIGRlY2tzX3RhYmxlPURFQ0tTX1ROQU1FLCBlbmdpbmU9ZW5naW5lCikgLT4gcGQuRGF0YUZyYW1lOgoKICAgIHJldHVybiBOb25lCgoKQHRhc2sKZGVmIGNyZWF0ZV9zaW5lcmd5X2ZlYXR1cmVzKAogICAgZGVja19pZDogc3RyLCBkZWNrc190YWJsZT1ERUNLU19UTkFNRSwgZW5naW5lPWVuZ2luZQopIC0+IHBkLkRhdGFGcmFtZToKCiAgICByZXR1cm4gTm9uZQoKCkB0YXNrCmRlZiBjcmVhdGVfYW50ZXJneV9mZWF0dXJlcygKICAgIGRlY2tfaWQ6IHN0ciwgZGVja3NfdGFibGU9REVDS1NfVE5BTUUsIGVuZ2luZT1lbmdpbmUKKSAtPiBwZC5EYXRhRnJhbWU6CgogICAgcmV0dXJuIE5vbmUKCgojIENyZWF0ZXMgYSBkZWNrX2ZlYXR1cmVzIHRhYmxlIGFuZCBhZGRzIGFsbCBjYWxjdWxhdGVkIGZlYXR1cmVzIHRvIGl0CmRlZiBnZXRfZmxvd19mZWF0dXJpemVfZGVja3MoZm9yX2lkczogTGlzdCA9IFtdKSAtPiBGbG93OgogICAgIiIiRm9yIGVhY2ggZGVjayBpZCwKICAgIGNyZWF0ZSBpbmRpdmlkdWFsIGNhcmRzIGZlYXR1cmVzCiAgICBzaW5lcmd5IGZlYXR1cmVzCiAgICBhbnRlcmd5IGZlYXR1cmVzCgogICAgQXJnczoKICAgICAgICBmb3JfaWRzIChMaXN0LCBvcHRpb25hbCk6IFBhc3MgYSBsaXN0IGlmIHlvdSB3aXNoIHRvIGV4ZWN1dGUgdGhlIGZsb3cKICAgICAgICAgICAgb25seSBmb3Igc3BlY2lmIGRlY2tzLiBEZWZhdWx0cyB0byBbXSAocHJvY2VzcyBhbGwgaWRzIGluIHRhYmxlKS4KCiAgICBSZXR1cm5zOgogICAgICAgIEZsb3c6IHByZWZlY3QgZmxvdywgdGhhdCBjYW4gYmUgcnVuCiAgICAiIiIKICAgIHdpdGggRmxvdygiZmVhdHVyaXplX2RlY2tzIikgYXMgZmVhdHVyaXplX2RlY2tzOgoKICAgICAgICB0ZXN0X2lkcyA9IFsKICAgICAgICAgICAgImh0dHBzOi8vbXRnbWV0YS5pby9kZWNrcy8yMDMxMT9yaWQ9Mjc1NTEwIiwgICMgYWxsIGNhcmRzIGluIGNhcmRzCiAgICAgICAgXQogICAgICAgICMgRmV0Y2ggc3BlY2lmaWMgbGlzdCBvZiB1cmxzIG9yIGFsbAogICAgICAgIGRlY2tfaWRzID0gZ2V0X2xpc3Rfb3JfYWxsX2RlY2tfaWRzKGRlY2tfaWRzPVtdKQogICAgICAgICMgZGVja191cmxzID0gZ2V0X2xpc3Rfb3JfYWxsX2RlY2tfdXJscyh1cmxzPXRlc3RfdXJscykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICAgICBjYXJkc19mZWF0dXJlcyA9IGNyZWF0ZV9jYXJkc19mZWF0dXJlcy5tYXAoZGVja19pZHMpCiAgICAgICAgc2luZXJneV9mZWF0dXJlcyA9IGNyZWF0ZV9zaW5lcmd5X2ZlYXR1cmVzLm1hcChkZWNrX2lkcykKICAgICAgICBhbnRlcmd5X2ZlYXR1cmVzID0gY3JlYXRlX2FudGVyZ3lfZmVhdHVyZXMubWFwKGRlY2tfaWRzKQo8fGZpbV9lbmR8Pg=="]
["e70a0f9f04a679937bbd6e2ddd11ed9a03e23be6-2","e70a0f9f04a679937bbd6e2ddd11ed9a03e23be6","PHxmaW1fcHJlZml4fD4KZnJvbSBtdGdubHAgaW1wb3J0IGNvbmZpZwpmcm9tIGhlbHBlcnMudXBzZXJ0X2RmIGltcG9ydCB1cHNlcnRfZGYKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCmZyb20gdHlwaW5nIGltcG9ydCBMaXN0CgppbXBvcnQgcGFuZGFzIGFzIHBkCmZyb20gc3FsYWxjaGVteSBpbXBvcnQgY3JlYXRlX2VuZ2luZSwgZW5naW5lCgppbXBvcnQgcHJlZmVjdApmcm9tIHByZWZlY3QgaW1wb3J0IEZsb3csIFBhcmFtZXRlciwgVGFzaywgdGFzawoKZnJvbSBwcmVmZWN0LnRhc2tzLmNvbnRyb2xfZmxvdy5maWx0ZXIgaW1wb3J0IEZpbHRlclRhc2sKZnJvbSBwcmVmZWN0LmVuZ2luZS5zaWduYWxzIGltcG9ydCBTS0lQCgpmcm9tIG10Z25scC5oZWxwZXJzLmZsb3dzX2NvbW1vbnMgaW1wb3J0IGdldF9saXN0X29yX2FsbF9kZWNrX2lkcwoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQoKZW5naW5lID0gY3JlYXRlX2VuZ2luZShjb25maWcuREJfU1RSKQpNVEdNRVRBX0RFQ0tfVE5BTUUgPSBjb25maWcuTVRHTUVUQV9ERUNLX1ROQU1FCk1UR01FVEFfQ0FSRFNfVE5BTUUgPSBjb25maWcuTVRHTUVUQV9DQVJEU19UTkFNRQpERUNLU19UTkFNRSA9IGNvbmZpZy5ERUNLU19UTkFNRQpERUNLU19GRUFUVVJFU19UTkFNRSA9IGNvbmZpZy5ERUNLU19GRUFUVVJFU19UTkFNRQoKCkB0YXNrCmRlZiBjcmVhdGVfY2FyZHNfZmVhdHVyZXMoCiAgICBkZWNrX2lkOiBzdHIsIGRlY2tzX3RhYmxlPURFQ0tTX1ROQU1FLCBlbmdpbmU9ZW5naW5lCikgLT4gcGQuRGF0YUZyYW1lOgoKICAgIHJldHVybiBOb25lCgoKQHRhc2sKZGVmIGNyZWF0ZV9zaW5lcmd5X2ZlYXR1cmVzKAogICAgZGVja19pZDogc3RyLCBkZWNrc190YWJsZT1ERUNLU19UTkFNRSwgZW5naW5lPWVuZ2luZQopIC0+IHBkLkRhdGFGcmFtZToKCjx8ZmltX2hvbGV8PgpAdGFzawpkZWYgY3JlYXRlX2FudGVyZ3lfZmVhdHVyZXMoCiAgICBkZWNrX2lkOiBzdHIsIGRlY2tzX3RhYmxlPURFQ0tTX1ROQU1FLCBlbmdpbmU9ZW5naW5lCikgLT4gcGQuRGF0YUZyYW1lOgoKICAgIHJldHVybiBOb25lCgoKIyBDcmVhdGVzIGEgZGVja19mZWF0dXJlcyB0YWJsZSBhbmQgYWRkcyBhbGwgY2FsY3VsYXRlZCBmZWF0dXJlcyB0byBpdApkZWYgZ2V0X2Zsb3dfZmVhdHVyaXplX2RlY2tzKGZvcl9pZHM6IExpc3QgPSBbXSkgLT4gRmxvdzoKICAgICIiIkZvciBlYWNoIGRlY2sgaWQsCiAgICBjcmVhdGUgaW5kaXZpZHVhbCBjYXJkcyBmZWF0dXJlcwogICAgc2luZXJneSBmZWF0dXJlcwogICAgYW50ZXJneSBmZWF0dXJlcwoKICAgIEFyZ3M6CiAgICAgICAgZm9yX2lkcyAoTGlzdCwgb3B0aW9uYWwpOiBQYXNzIGEgbGlzdCBpZiB5b3Ugd2lzaCB0byBleGVjdXRlIHRoZSBmbG93CiAgICAgICAgICAgIG9ubHkgZm9yIHNwZWNpZiBkZWNrcy4gRGVmYXVsdHMgdG8gW10gKHByb2Nlc3MgYWxsIGlkcyBpbiB0YWJsZSkuCgogICAgUmV0dXJuczoKICAgICAgICBGbG93OiBwcmVmZWN0IGZsb3csIHRoYXQgY2FuIGJlIHJ1bgogICAgIiIiCiAgICB3aXRoIEZsb3coImZlYXR1cml6ZV9kZWNrcyIpIGFzIGZlYXR1cml6ZV9kZWNrczoKCiAgICAgICAgdGVzdF9pZHMgPSBbCiAgICAgICAgICAgICJodHRwczovL210Z21ldGEuaW8vZGVja3MvMjAzMTE/cmlkPTI3NTUxMCIsICAjIGFsbCBjYXJkcyBpbiBjYXJkcwogICAgICAgIF0KICAgICAgICAjIEZldGNoIHNwZWNpZmljIGxpc3Qgb2YgdXJscyBvciBhbGwKICAgICAgICBkZWNrX2lkcyA9IGdldF9saXN0X29yX2FsbF9kZWNrX2lkcyhkZWNrX2lkcz1bXSkKICAgICAgICAjIGRlY2tfdXJscyA9IGdldF9saXN0X29yX2FsbF9kZWNrX3VybHModXJscz10ZXN0X3VybHMpCgogICAgICAgIGNhcmRzX2ZlYXR1cmVzID0gY3JlYXRlX2NhcmRzX2ZlYXR1cmVzLm1hcChkZWNrX2lkcykKICAgICAgICBzaW5lcmd5X2ZlYXR1cmVzID0gY3JlYXRlX3NpbmVyZ3lfZmVhdHVyZXMubWFwKGRlY2tfaWRzKQogICAgICAgIGFudGVyZ3lfZmVhdHVyZXMgPSBjcmVhdGVfYW50ZXJneV9mZWF0dXJlcy5tYXAoZGVja19pZHMpCgogICAgcmV0dXJuIGZlYXR1cml6ZV9kZWNrcwoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBmbG93ID0gZ2V0X2Zsb3dfZmVhdHVyaXplX2RlY2tzKCkKICAgIGZsb3cudmlzdWFsaXplKCkKICAgIGZsb3dfc3RhdGUgPSBmbG93LnJ1bigpCiAgICBmbG93LnZpc3VhbGl6ZShmbG93X3N0YXRlPWZsb3dfc3RhdGUpCjx8ZmltX3N1ZmZpeHw+CiAgICByZXR1cm4gTm9uZQoKCjx8ZmltX2VuZHw+"]
["e70a0f9f04a679937bbd6e2ddd11ed9a03e23be6-3","e70a0f9f04a679937bbd6e2ddd11ed9a03e23be6","PHxmaW1fcHJlZml4fD4KZnJvbSBtdGdubHAgaW1wb3J0IGNvbmZpZwpmcm9tIGhlbHBlcnMudXBzZXJ0X2RmIGltcG9ydCB1cHNlcnRfZGYKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCmZyb20gdHlwaW5nIGltcG9ydCBMaXN0CgppbXBvcnQgcGFuZGFzIGFzIHBkCmZyb20gc3FsYWxjaGVteSBpbXBvcnQgY3JlYXRlX2VuZ2luZSwgZW5naW5lCgppbXBvcnQgcHJlZmVjdApmcm9tIHByZWZlY3QgaW1wb3J0IEZsb3csIFBhcmFtZXRlciwgVGFzaywgdGFzawoKZnJvbSBwcmVmZWN0LnRhc2tzLmNvbnRyb2xfZmxvdy5maWx0ZXIgaW1wb3J0IEZpbHRlclRhc2sKZnJvbSBwcmVmZWN0LmVuZ2luZS5zaWduYWxzIGltcG9ydCBTS0lQCgpmcm9tIG10Z25scC5oZWxwZXJzLmZsb3dzX2NvbW1vbnMgaW1wb3J0IGdldF9saXN0X29yX2FsbF9kZWNrX2lkcwoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQoKZW5naW5lID0gY3JlYXRlX2VuZ2luZShjb25maWcuREJfU1RSKQpNVEdNRVRBX0RFQ0tfVE5BTUUgPSBjb25maWcuTVRHTUVUQV9ERUNLX1ROQU1FCk1UR01FVEFfQ0FSRFNfVE5BTUUgPSBjb25maWcuTVRHTUVUQV9DQVJEU19UTkFNRQpERUNLU19UTkFNRSA9IGNvbmZpZy5ERUNLU19UTkFNRQpERUNLU19GRUFUVVJFU19UTkFNRSA9IGNvbmZpZy5ERUNLU19GRUFUVVJFU19UTkFNRQoKCkB0YXNrCmRlZiBjcmVhdGVfY2FyZHNfZmVhdHVyZXMoCiAgICBkZWNrX2lkOiBzdHIsIGRlY2tzX3RhYmxlPURFQ0tTX1ROQU1FLCBlbmdpbmU9ZW5naW5lCikgLT4gcGQuRGF0YUZyYW1lOgoKICAgIHJldHVybiBOb25lCgoKQHRhc2sKZGVmIGNyZWF0ZV9zaW5lcmd5X2ZlYXR1cmVzKAogICAgZGVja19pZDogc3RyLCBkZWNrc190YWJsZT1ERUNLU19UTkFNRSwgZW5naW5lPWVuZ2luZQopIC0+IHBkLkRhdGFGcmFtZToKCiAgICByZXR1cm4gTm9uZQoKCkB0YXNrCmRlZiBjcmVhdGVfYW50ZXJneV9mZWF0dXJlcygKICAgIGRlY2tfaWQ6IHN0ciwgZGVja3NfdGFibGU9REVDS1NfVE5BTUUsIGVuZ2luZT1lbmdpbmUKKSAtPiBwZC5EYXRhRnJhbWU6CgogICAgcmV0dXJuIE5vbmUKCgojIENyZWF0ZXMgYSBkZWNrX2ZlYXR1cmVzIHRhYmxlIGFuZCBhZGRzIGFsbCBjYWxjdWxhdGVkIGZlYXR1cmVzIHRvIGl0CmRlZiBnZXRfZmxvd19mZWF0dXJpemVfZGVja3MoZm9yX2lkczogTGlzdCA9IFtdKSAtPiBGbG93OgogICAgIiIiRm9yIGVhY2ggZGVjayBpZCwKICAgIGNyZWF0ZSBpbmRpdmlkdWFsIGNhcmRzIGZlYXR1cmVzCiAgICBzaW5lcmd5IGZlYXR1cmVzCiAgICBhbnRlcmd5IGZlYXR1cmVzCgogICAgQXJnczoKICAgICAgICBmb3JfaWRzIChMaXN0LCBvcHRpb25hbCk6IFBhc3MgYSBsaXN0IGlmIHlvdSB3aXNoIHRvIGV4ZWN1dGUgdGhlIGZsb3cKICAgICAgICAgICAgb25seSBmb3Igc3BlY2lmIGRlY2tzLiBEZWZhdWx0cyB0byBbXSAocHJvY2VzcyBhbGwgaWRzIGluIHRhYmxlKS4KCiAgICBSZXR1cm5zOgogICAgICAgIEZsb3c6IHByZWZlY3QgZmxvdywgdGhhdCBjYW4gYmUgcnVuCiAgICAiIiIKICAgIHdpdGggRmxvdygiZmVhdHVyaXplX2RlY2tzIikgYXMgZmVhdHVyaXplX2RlY2tzOgoKICAgICAgICB0ZXN0X2lkcyA9IFsKICAgICAgICAgICAgImh0dHBzOi8vbXRnbWV0YS5pby9kZWNrcy8yMDMxMT9yaWQ9Mjc1NTEwIiwgICMgYWxsIGNhcmRzIGluIGNhcmRzCiAgICAgICAgXQogICAgICAgICMgRmV0Y2ggc3BlY2lmaWMgbGlzdCBvZiB1cmxzIG9yIGFsbAogICAgICAgIGRlY2tfaWRzID0gZ2V0X2xpc3Rfb3JfYWxsX2RlY2tfaWRzKGRlY2tfaWRzPVtdKQogICAgICAgICMgZGVja191cmxzID0gZ2V0X2xpc3Rfb3JfYWxsX2RlY2tfdXJscyh1cmxzPXRlc3RfdXJscykKCiAgICAgICAgY2FyZHNfZmVhdHVyZXMgPSBjcmVhdGVfY2FyZHNfZmVhdHVyZXMubWFwKGRlY2tfaWRzKQogICAgICAgIHNpbmVyZ3lfZmVhdHVyZXMgPSBjcmVhdGVfc2luZXJneV9mZWF0dXJlcy5tYXAoZGVja19pZHMpCiAgICAgICAgYW50ZXJneV9mZWF0dXJlcyA9IGNyZWF0ZV9hbnRlcmd5X2ZlYXR1cmVzLm1hcChkZWNrX2lkcykKCiAgICByZXR1cm4gZmVhdHVyaXplX2RlY2tzCgoKPHxmaW1faG9sZXw+CiAgICBmbG93LnZpc3VhbGl6ZShmbG93X3N0YXRlPWZsb3dfc3RhdGUpCjx8ZmltX3N1ZmZpeHw+CmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBmbG93ID0gZ2V0X2Zsb3dfZmVhdHVyaXplX2RlY2tzKCkKICAgIGZsb3cudmlzdWFsaXplKCkKICAgIGZsb3dfc3RhdGUgPSBmbG93LnJ1bigpCjx8ZmltX2VuZHw+"]
["e70a0f9f04a679937bbd6e2ddd11ed9a03e23be6-4","e70a0f9f04a679937bbd6e2ddd11ed9a03e23be6","PHxmaW1fcHJlZml4fD4KZnJvbSBtdGdubHAgaW1wb3J0IGNvbmZpZwpmcm9tIGhlbHBlcnMudXBzZXJ0X2RmIGltcG9ydCB1cHNlcnRfZGYKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCmZyb20gdHlwaW5nIGltcG9ydCBMaXN0CgppbXBvcnQgcGFuZGFzIGFzIHBkCmZyb20gc3FsYWxjaGVteSBpbXBvcnQgY3JlYXRlX2VuZ2luZSwgZW5naW5lCgppbXBvcnQgcHJlZmVjdApmcm9tIHByZWZlY3QgaW1wb3J0IEZsb3csIFBhcmFtZXRlciwgVGFzaywgdGFzawoKZnJvbSBwcmVmZWN0LnRhc2tzLmNvbnRyb2xfZmxvdy5maWx0ZXIgaW1wb3J0IEZpbHRlclRhc2sKZnJvbSBwcmVmZWN0LmVuZ2luZS5zaWduYWxzIGltcG9ydCBTS0lQCgpmcm9tIG10Z25scC5oZWxwZXJzLmZsb3dzX2NvbW1vbnMgaW1wb3J0IGdldF9saXN0X29yX2FsbF9kZWNrX2lkcwoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQoKZW5naW5lID0gY3JlYXRlX2VuZ2luZShjb25maWcuREJfU1RSKQpNVEdNRVRBX0RFQ0tfVE5BTUUgPSBjb25maWcuTVRHTUVUQV9ERUNLX1ROQU1FCk1UR01FVEFfQ0FSRFNfVE5BTUUgPSBjb25maWcuTVRHTUVUQV9DQVJEU19UTkFNRQpERUNLU19UTkFNRSA9IGNvbmZpZy5ERUNLU19UTkFNRQpERUNLU19GRUFUVVJFU19UTkFNRSA9IGNvbmZpZy5ERUNLU19GRUFUVVJFU19UTkFNRQoKCkB0YXNrCmRlZiBjcmVhdGVfY2FyZHNfZmVhdHVyZXMoCiAgICBkZWNrX2lkOiBzdHIsIGRlY2tzX3RhYmxlPURFQ0tTX1ROQU1FLCBlbmdpbmU9ZW5naW5lCikgLT4gcGQuRGF0YUZyYW1lOgoKICAgIHJldHVybiBOb25lCgoKQHRhc2sKZGVmIGNyZWF0ZV9zaW5lcmd5X2ZlYXR1cmVzKAogICAgZGVja19pZDogc3RyLCBkZWNrc190YWJsZT1ERUNLU19UTkFNRSwgZW5naW5lPWVuZ2luZQopIC0+IHBkLkRhdGFGcmFtZToKCiAgICByZXR1cm4gTm9uZQoKCkB0YXNrCmRlZiBjcmVhdGVfYW50ZXJneV9mZWF0dXJlcygKICAgIGRlY2tfaWQ6IHN0ciwgZGVja3NfdGFibGU9REVDS1NfVE5BTUUsIGVuZ2luZT1lbmdpbmUKKSAtPiBwZC5EYXRhRnJhbWU6CgogICAgcmV0dXJuIE5vbmUKCgojIENyZWF0ZXMgYSBkZWNrX2ZlYXR1cmVzIHRhYmxlIGFuZCBhZGRzIGFsbCBjYWxjdWxhdGVkIGZlYXR1cmVzIHRvIGl0CmRlZiBnZXRfZmxvd19mZWF0dXJpemVfZGVja3MoZm9yX2lkczogTGlzdCA9IFtdKSAtPiBGbG93OgogICAgIiIiRm9yIGVhY2ggZGVjayBpZCwKICAgIGNyZWF0ZSBpbmRpdmlkdWFsIGNhcmRzIGZlYXR1cmVzCiAgICBzaW5lcmd5IGZlYXR1cmVzCiAgICBhbnRlcmd5IGZlYXR1cmVzCgogICAgQXJnczoKPHxmaW1faG9sZXw+CiAgICBSZXR1cm5zOgogICAgICAgIEZsb3c6IHByZWZlY3QgZmxvdywgdGhhdCBjYW4gYmUgcnVuCiAgICAiIiIKICAgIHdpdGggRmxvdygiZmVhdHVyaXplX2RlY2tzIikgYXMgZmVhdHVyaXplX2RlY2tzOgoKICAgICAgICB0ZXN0X2lkcyA9IFsKICAgICAgICAgICAgImh0dHBzOi8vbXRnbWV0YS5pby9kZWNrcy8yMDMxMT9yaWQ9Mjc1NTEwIiwgICMgYWxsIGNhcmRzIGluIGNhcmRzCiAgICAgICAgXQogICAgICAgICMgRmV0Y2ggc3BlY2lmaWMgbGlzdCBvZiB1cmxzIG9yIGFsbAogICAgICAgIGRlY2tfaWRzID0gZ2V0X2xpc3Rfb3JfYWxsX2RlY2tfaWRzKGRlY2tfaWRzPVtdKQogICAgICAgICMgZGVja191cmxzID0gZ2V0X2xpc3Rfb3JfYWxsX2RlY2tfdXJscyh1cmxzPXRlc3RfdXJscykKCiAgICAgICAgY2FyZHNfZmVhdHVyZXMgPSBjcmVhdGVfY2FyZHNfZmVhdHVyZXMubWFwKGRlY2tfaWRzKQogICAgICAgIHNpbmVyZ3lfZmVhdHVyZXMgPSBjcmVhdGVfc2luZXJneV9mZWF0dXJlcy5tYXAoZGVja19pZHMpCiAgICAgICAgYW50ZXJneV9mZWF0dXJlcyA9IGNyZWF0ZV9hbnRlcmd5X2ZlYXR1cmVzLm1hcChkZWNrX2lkcykKCiAgICByZXR1cm4gZmVhdHVyaXplX2RlY2tzCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIGZsb3cgPSBnZXRfZmxvd19mZWF0dXJpemVfZGVja3MoKQogICAgZmxvdy52aXN1YWxpemUoKQogICAgZmxvd19zdGF0ZSA9IGZsb3cucnVuKCkKICAgIGZsb3cudmlzdWFsaXplKGZsb3dfc3RhdGU9Zmxvd19zdGF0ZSkKPHxmaW1fc3VmZml4fD4KICAgICAgICBmb3JfaWRzIChMaXN0LCBvcHRpb25hbCk6IFBhc3MgYSBsaXN0IGlmIHlvdSB3aXNoIHRvIGV4ZWN1dGUgdGhlIGZsb3cKICAgICAgICAgICAgb25seSBmb3Igc3BlY2lmIGRlY2tzLiBEZWZhdWx0cyB0byBbXSAocHJvY2VzcyBhbGwgaWRzIGluIHRhYmxlKS4KCjx8ZmltX2VuZHw+"]
["f90bbd5d65dac68fc649660ebacb55131f6b7fdf-1","f90bbd5d65dac68fc649660ebacb55131f6b7fdf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBzY2lweQppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBtYXRoCmltcG9ydCBjb3B5CmltcG9ydCByYW5kb20KaW1wb3J0IGN2eHB5IGFzIGNwCmZyb20gcmFuZG9tIGltcG9ydCByYW5kcmFuZ2UKaW1wb3J0IHRpbWUKZnJvbSBhYmMgaW1wb3J0IEFCQywgYWJzdHJhY3RtZXRob2QKaW1wb3J0IHNjaXB5LmxpbmFsZyBhcyBsYQoKZGVmIEVWSShpdGUsIFUsIGhhdHRoZXRhLCBiZXRhLCBwaGksIHBoaXYsIHJld2FyZCwgUywgQSwgZCwgZ2FtbWEpOgogICAgI2hlcmUgVSBzaG91bGQgYmUgc2lnbWFeezEvMn0KICAgIHFxID0gbnAub25lcygoUywgQSkpLygxLWdhbW1hKQogICAgdnYgPSBucC5vbmVzKFMpLygxLWdhbW1hKQoKICAgIHggPSBjcC5WYXJpYWJsZShkKQoKICAgIHNvY19jb25zdHJhaW50cyA9IFtjcC5ub3JtKFVAKHgtaGF0dGhldGEpLCAyKSA8PSBiZXRhXQogICAgIyBUaGUgZm9sbG93aW5nIGxvb3BzIGFkZCB0aGUgZm9sbG93aW5nIGNvbnRyYWludHM6CiAgICAjIENvbnN0cmFpbnQgMTogMCA8PSBwaGkocyd8IHMsIGEpICogeCA8PSAxCiAgICAjIENvbnN0cmFpbnQgMjogU3VtIG92ZXIgcycgb2YgcGhpKHMnIHwgcywgYSkgKiB4ID0gMQoKICAgIGZvciBzIGluIHJhbmdlKFMpOgogICAgICAgIGZvciBhIGluIHJhbmdlKEEpOgogICAgICAgICAgICBydW5uaW5nX21hdHJpeCA9IFtdCiAgICAgICAgICAgIHJ1bm5pbmdfc3VtID0gMAogICAgICAgICAgICBmb3Igc19wcmltZSBpbiByYW5nZShTKToKICAgICAgICAgICAgICAgIHJ1bm5pbmdfc3VtICs9IHBoaShzLCBhLCBzX3ByaW1lKQogICAgICAgICAgICAgICAgcnVubmluZ19tYXRyaXggPSBucC5jb25jYXRlbmF0ZSgocnVubmluZ19tYXRyaXgsIHBoaShzLCBhLCBzX3ByaW1lKSkpCiAgICAgICAgICAgIHJ1bm5pbmdfbWF0cml4ID0gcnVubmluZ19tYXRyaXgucmVzaGFwZSgoLTEsIGQpKQogICAgICAgICAgICBzb2NfY29uc3RyYWludHMgKz0gW3J1bm5pbmdfbWF0cml4QHggPD0gMSwgcnVubmluZ19tYXRyaXhAeCA+PSAwLCBydW5uaW5nX3N1bUB4ID09IDFdCgogICAgZm9yIGkgaW4gcmFuZ2UoaXRlKToKICAgICAgICBmb3Igc3MgaW4gcmFuZ2UoUyk6CiAgICAgICAgICAgIGZvciBhYSBpbiByYW5nZShBKToKICAgICAgICAgICAgICAgIHBoaV92ID0gcGhpdihzcyxhYSx2dikKICAgICAgICAgICAgICAgIGYgPSAtcGhpX3YKICAgICAgICAgICAgICAgIHByb2IgPSBjcC5Qcm9ibGVtKGNwLk1pbmltaXplKGZAeCksIHNvY19jb25zdHJhaW50cykKICAgICAgICAgICAgICAgIHByb2Iuc29sdmUoKQoKICAgICAgICAgICAgICAgIHdoaWxlIHByb2Iuc3RhdHVzICE9IGNwLk9QVElNQUw6CiAgICAgICAgICAgICAgICAgICAgYmV0YSAqPSAyCiAgICAgICAgICAgICAgICAgICAgc29jX2NvbnN0cmFpbnRzID0gW2NwLm5vcm0oVUAoeC1oYXR0aGV0YSksIDIpIDw9IGJldGFdICsgc29jX2NvbnN0cmFpbnRzWzE6XQogICAgICAgICAgICAgICAgICAgIHByb2IgPSBjcC5Qcm9ibGVtKGNwLk1pbmltaXplKGZAeCksIHNvY19jb25zdHJhaW50cykKICAgICAgICAgICAgICAgICAgICBwcm9iLnNvbHZlKCkKCiAgICAgICAgICAgICAgICBxcVtzcyxhYV0gPSByZXdhcmQoc3MsYWEpK2dhbW1hKnBoaV92QHgudmFsdWUKICAgICAgICAgICAgdnZbc3NdID0gbWF4KHFxW3NzXSkKICAgIHJldHVybiBxcSx2dgoKZGVmIEJWSShpdGUsIHNpZ21hLCBoYXR0aGV0YSwgYmV0YSwgcGhpdiwgcmV3YXJkLCBTLCBBLCBkLCBnYW1tYSk6CiAgICBxMCA9IG5wLm9uZXMoKFMsIEEpKS8oMS1nYW1tYSkKICAgIHJ1bm5pbmdfdiA9IG5wLm9uZXMoUykvKDEtZ2FtbWEpCiAgICBxX2hpc3RvcnkgPSBbcTBdCiAgICBzaWdtYV9zcXJ0X2ludiA9IGxhLmludihsYS5zcXJ0bShzaWdtYSkpCgogICAgZm9yIGkgaW4gcmFuZ2UoaXRlKToKICAgICAgICBxbmV4dCA9IG5wLm9uZXMoKFMsIEEpKQoKCiAgICAgICAgI2NvbXB1dGUgbmV3IHEgdmFsdWVzCiAgICAgICAgZm9yIHMgaW4gcmFuZ2UoUyk6CiAgICAgICAgICAgIGZvciBhIGluIHJhbmdlKEEpOgogICAgICAgICAgICAgICAgcGhpX3YgPSBwaGl2KHMsIGEsIHJ1bm5pbmdfdikKICAgICAgICAgICAgICAgIHRlcm0xID0gKGdhbW1hKihucC5kb3QoaGF0dGhldGEsIHBoaV92KSkpCiAgICAgICAgICAgICAgICB0ZXJtMiA9IChnYW1tYSpiZXRhKihsYS5ub3JtKCBzaWdtYV9zcXJ0X2ludkBwaGlfdiwgMiApKSApCiAgICAgICAgICAgICAgICBhbnMgPSByZXdhcmQocywgYSkgKyB0ZXJtMSArIHRlcm0yCiAgICAgICAgICAgICAgICBxbmV4dFtzXVthXSA9IG1pbigxLjAvKDEtZ2FtbWEpLCBhbnMpCgogICAgICAgICN1cGRhdGUgdgogICAgICAgIGZvciBzIGluIHJhbmdlKFMpOgogICAgICAgICAgICBydW5uaW5nX3Zbc10gPSBtYXgocW5leHRbc10pCgogICAgICAgICNzdG9yZSBuZXcgcSB2YWx1ZXMgYXQgdGhlIGZyb250IG9mIHRoZSBhcnJheQogICAgICAgIHFfaGlzdG9yeSA9IFtxbmV4dF0gKyBxX2hpc3RvcnkKCiAgICByZXR1cm4gcV9oaXN0b3J5CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKY2xhc3MgQWxnb3JpdGhtKEFCQyk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZW52KToKICAgICAgICBzZWxmLmVudiA9IGVudgoKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIHRyYWluKHNlbGYsIHRpbWVzdGVwcyk6CiAgICAgICAgcGFzcwoKY2xhc3MgVUNMSyhBbGdvcml0aG0pOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGVudiwgZCwgQSwgUywgZ2FtbWEsIHBoaSk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhlbnYpCiAgICAgICAgc2VsZi5kID0gZAogICAgICAgIHNlbGYuQSA9IEEKICAgICAgICBzZWxmLlMgPSBTCiAgICAgICAgc2VsZi5nYW1tYSA9IGdhbW1hCiAgICAgICAgc2VsZi5waGkgPSBwaGkKICAgICAgICAjc2VsZi50aGV0YXN0YXIgPSB0aGV0YXN0YXIKCiAgICAgICAgc2VsZi5xdmFscyA9IG5wLm9uZXMoKFMsIEEpKS8oMS1nYW1tYSkKICAgICAgICBzZWxmLnZ2YWxzID0gbnAub25lcyhTKS8oMS1nYW1tYSkKICAgICAgICBzZWxmLlNJR01BID0gbnAuZGlhZyhucC5vbmVzKGQpKQogICAgICAgIHNlbGYuVFNJR01BID0gbnAuZGlhZyhucC5vbmVzKGQpKQogICAgICAgIHNlbGYuQkIgPSBucC56ZXJvcygoZCwgMSkpCgogICAgZGVmIHBoaXYoc2VsZiwgcywgYSwgdik6CiAgICAgICAgdG90YWwgPSAwCiAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2VsZi5TKToKICAgICAgICAgICAgdG90YWwgKz0gc2VsZi5waGkocywgYSwgaSkqdltpXQogICAgICAgIHJldHVybiB0b3RhbAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIHRyYWluKHNlbGYsIHRpbWVzdGVwcywgcGxvdCA9IFRydWUpOgogICAgICAgIFJFV0FSRCA9IDAKICAgICAgICBzZWxmLmVudi5yZXNldCgpCiAgICAgICAgdCA9IDEKPHxmaW1fZW5kfD4="]
["f90bbd5d65dac68fc649660ebacb55131f6b7fdf-2","f90bbd5d65dac68fc649660ebacb55131f6b7fdf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBzY2lweQppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IG1hdGgKaW1wb3J0IGNvcHkKaW1wb3J0IHJhbmRvbQppbXBvcnQgY3Z4cHkgYXMgY3AKPHxmaW1fZW5kfD4="]
["bd9f9b96d7c94d2fdce685fc4c6ee9a2a0b93d54-1","bd9f9b96d7c94d2fdce685fc4c6ee9a2a0b93d54","PHxmaW1fcHJlZml4fD4KI3NldHVwIEFsaWNlJ3Mgb2NlYW4gaW5zdGFuY2UKaW1wb3J0IG9zCmltcG9ydCB0aW1lCgpmcm9tIG9jZWFuX2xpYi5vY2Vhbi5vY2VhbiBpbXBvcnQgT2NlYW4KZnJvbSBvY2Vhbl9saWIuZGF0YV9wcm92aWRlci5kYXRhX3NlcnZpY2VfcHJvdmlkZXIgaW1wb3J0IERhdGFTZXJ2aWNlUHJvdmlkZXIKZnJvbSBvY2Vhbl91dGlscy5hZ3JlZW1lbnRzLnNlcnZpY2VfZmFjdG9yeSBpbXBvcnQgU2VydmljZURlc2NyaXB0b3IKZnJvbSBvY2Vhbl9saWIubW9kZWxzLmJ0b2tlbiBpbXBvcnQgQlRva2VuICNCVG9rZW4gaXMgRVJDMjAKZnJvbSBvY2Vhbl91dGlscy5hZ3JlZW1lbnRzLnNlcnZpY2VfdHlwZXMgaW1wb3J0IFNlcnZpY2VUeXBlcwpmcm9tIG9jZWFuX2xpYi53ZWIzX2ludGVybmFsLndhbGxldCBpbXBvcnQgV2FsbGV0Cgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRlZiBjcmVhdGVfcG9vbChvY2VhbiwgdG9rZW5fYWRkcmVzcywgYWxpY2Vfd2FsbGV0KToKICAgIHBvb2wgPSBvY2Vhbi5wb29sLmNyZWF0ZSgKICAgICAgICB0b2tlbl9hZGRyZXNzLAogICAgICAgIGRhdGFfdG9rZW5fYW1vdW50PTEwMC4wLAo8fGZpbV9lbmR8Pg=="]
["c1c021f793199248a5dd14045f137121d154dccc-1","c1c021f793199248a5dd14045f137121d154dccc","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cywgb3MKCmZyb20gZGphbmdvLmNvcmUud3NnaSBpbXBvcnQgZ2V0X3dzZ2lfYXBwbGljYXRpb24KCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CnN5cy5wYXRoLmFwcGVuZChvcy5nZXRjd2QoKSkKb3MuZW52aXJvblsnREpBTkdPX1NFVFRJTkdTX01PRFVMRSddID0gInB1YmxpY19weXRob24uc2V0dGluZ3MiCgphcHBsaWNhdGlvbiA9IGdldF93c2dpX2FwcGxpY2F0aW9uKCkKPHxmaW1fZW5kfD4="]
["6bca06cb38398a6c674421fc5643c5cc49ecbc0c-1","6bca06cb38398a6c674421fc5643c5cc49ecbc0c","PHxmaW1fcHJlZml4fD4KIyBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQoKIyAjIEZ1bmN0aW9uIHRvIHByaW50IGN1cnJlbnQgZGF0ZSBhbmQgdGltZQojIGRlZiBwcmludF90aW1lKHRhc2tfbmFtZSk6CiMgICAgIHByaW50KHRhc2tfbmFtZSkKIyAgICAgcHJpbnQoZGF0ZXRpbWUubm93KCkpCgojIHByaW50X3RpbWUoJ3Rhc2sgc3RhcnRlZCcpCgojIGZvciB4IGluIHJhbmdlKDAsIDEwKToKIyAgICAgcHJpbnQoeCkKCiMgcHJpbnRfdGltZSgndGFzayBjb21wbGV0ZWQnKQo8fGZpbV9ob2xlfD4KCmZpcnN0X25hbWUgPSBpbnB1dCgnRW50ZXIgeW91ciBmaXJzdCBuYW1lOiAnKQppbml0aWFscyA9IGdldF9pbml0aWFscyhmaXJzdF9uYW1lKQoKbWlkZGxlX25hbWUgPSBpbnB1dCgnRW50ZXIgeW91ciBtaWRkbGUgbmFtZTogJykKaW5pdGlhbHMgKz0gZ2V0X2luaXRpYWxzKG1pZGRsZV9uYW1lKQoKbGFzdF9uYW1lID0gaW5wdXQoJ0VudGVyIHlvdXIgbGFzdCBuYW1lOiAnKQppbml0aWFscyArPSBnZXRfaW5pdGlhbHMobGFzdF9uYW1lKQoKcHJpbnQoJ1lvdXIgaW5pdGlhbHMgYXJlOiAnICsgaW5pdGlhbHMpCjx8ZmltX3N1ZmZpeHw+CgpkZWYgZ2V0X2luaXRpYWxzKG5hbWUpOgogICAgaW5pdGlhbCA9IG5hbWVbMDoxXS51cHBlcigpCiAgICByZXR1cm4gaW5pdGlhbAo8fGZpbV9lbmR8Pg=="]
["6bca06cb38398a6c674421fc5643c5cc49ecbc0c-2","6bca06cb38398a6c674421fc5643c5cc49ecbc0c","PHxmaW1fcHJlZml4fD4KIyBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQoKIyAjIEZ1bmN0aW9uIHRvIHByaW50IGN1cnJlbnQgZGF0ZSBhbmQgdGltZQojIGRlZiBwcmludF90aW1lKHRhc2tfbmFtZSk6CiMgICAgIHByaW50KHRhc2tfbmFtZSkKIyAgICAgcHJpbnQoZGF0ZXRpbWUubm93KCkpCgojIHByaW50X3RpbWUoJ3Rhc2sgc3RhcnRlZCcpCgojIGZvciB4IGluIHJhbmdlKDAsIDEwKToKIyAgICAgcHJpbnQoeCkKCiMgcHJpbnRfdGltZSgndGFzayBjb21wbGV0ZWQnKQoKZGVmIGdldF9pbml0aWFscyhuYW1lKToKICAgIGluaXRpYWwgPSBuYW1lWzA6MV0udXBwZXIoKQogICAgcmV0dXJuIGluaXRpYWwKCmZpcnN0X25hbWUgPSBpbnB1dCgnRW50ZXIgeW91ciBmaXJzdCBuYW1lOiAnKQppbml0aWFscyA9IGdldF9pbml0aWFscyhmaXJzdF9uYW1lKQoKbWlkZGxlX25hbWUgPSBpbnB1dCgnRW50ZXIgeW91ciBtaWRkbGUgbmFtZTogJykKaW5pdGlhbHMgKz0gZ2V0X2luaXRpYWxzKG1pZGRsZV9uYW1lKQoKbGFzdF9uYW1lID0gaW5wdXQoJ0VudGVyIHlvdXIgbGFzdCBuYW1lOiAnKQppbml0aWFscyArPSBnZXRfaW5pdGlhbHMobGFzdF9uYW1lKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpwcmludCgnWW91ciBpbml0aWFscyBhcmU6ICcgKyBpbml0aWFscykKPHxmaW1fZW5kfD4="]
["8aeb1fa442192fd30fb607194ebc35d2e51cf01c-1","8aeb1fa442192fd30fb607194ebc35d2e51cf01c","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKEMpIEp1bHkgMjAxODogIFRGIFRFQ0ggTlYgaW4gQmVsZ2l1bSBzZWUgaHR0cHM6Ly93d3cudGhyZWVmb2xkLnRlY2gvCiMgSW4gY2FzZSBURiBURUNIIE5WIGNlYXNlcyB0byBleGlzdCAoZS5nLiBiZWNhdXNlIG9mIGJhbmtydXB0Y3kpCiMgICB0aGVuIEluY3ViYWlkIE5WIGFsc28gaW4gQmVsZ2l1bSB3aWxsIGdldCB0aGUgQ29weXJpZ2h0ICYgQXV0aG9yc2hpcCBmb3IgYWxsIGNoYW5nZXMgbWFkZSBzaW5jZSBKdWx5IDIwMTgKIyAgIGFuZCB0aGUgbGljZW5zZSB3aWxsIGF1dG9tYXRpY2FsbHkgYmVjb21lIEFwYWNoZSB2MiBmb3IgYWxsIGNvZGUgcmVsYXRlZCB0byBKdW1wc2NhbGUgJiBEaWdpdGFsTWUKIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBqdW1wc2NhbGUgYXQgPGh0dHBzOi8vZ2l0aHViLmNvbS90aHJlZWZvbGR0ZWNoPi4KIyBqdW1wc2NhbGUgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMganVtcHNjYWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjMgZm9yIG1vcmUgZGV0YWlscy4KIwojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCBqdW1wc2NhbGUgb3IganVtcHNjYWxlIGRlcml2ZWQgd29ya3MuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgTElDRU5TRSBFTkQKCgpmcm9tIEp1bXBzY2FsZSBpbXBvcnQgagoKCmRlZiBtYWluKHNlbGYpOgogICAgIiIiCiAgICB0byBydW46Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGtvc21vcyAnai5kYXRhLmJjZGIudGVzdChuYW1lPSJyZWRpc19pbmRleF9sb3N0IiknCgogICAgIiIiCgo8fGZpbV9lbmR8Pg=="]
["99b30ddae98f3d0e748a8ff88628402f1a5580c4-1","99b30ddae98f3d0e748a8ff88628402f1a5580c4","PHxmaW1fcHJlZml4fD4KZnJvbSBzcmMuSGluRHJvaWQgaW1wb3J0IHVwZGF0ZV93aXRoX25ld19hcHAsIGFsaWduX2tleV9vcmRlciwgc2FtcGxlX21hbHdhcmVzCmltcG9ydCBnbG9iCmltcG9ydCByYW5kb20KZnJvbSBza2xlYXJuLm1vZGVsX3NlbGVjdGlvbiBpbXBvcnQgdHJhaW5fdGVzdF9zcGxpdApmcm9tIHNrbGVhcm4ucHJlcHJvY2Vzc2luZyBpbXBvcnQgTXVsdGlMYWJlbEJpbmFyaXplcgppbXBvcnQgb3MKaW1wb3J0IGpzb24KaW1wb3J0IHNjaXB5LnNwYXJzZQppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBudW1weSBhcyBucAoKZGVmIGdldF9tYXRyaWNlcyhudW1fbWFsd2FyZXMsIG51bV9iZW5pZ24pOgogICAgYmVuaWdud2FyZV9kaXJzID0gZ2xvYi5nbG9iKCIuL3NtYWxpX2ZpbGVzLyoiLCByZWN1cnNpdmUgPSBUcnVlKQogICAgbWFsd2FyZV9kaXJzID0gc2FtcGxlX21hbHdhcmVzKG51bV9tYWx3YXJlcykKICAgIGJlbmlnbndhcmVfZGlycyA9IHJhbmRvbS5zYW1wbGUoYmVuaWdud2FyZV9kaXJzLCBudW1fYmVuaWduKQogICAgWF9kYXRhID0gYmVuaWdud2FyZV9kaXJzICsgbWFsd2FyZV9kaXJzCiAgICAjIyAwIGluZGljYXRlIG5vdCBtYWx3YXJlIHdoaWxlIDEgaW5kaWNhdGUgbWFsd2FyZS4KICAgIHlfZGF0YSA9IFswXSpsZW4oYmVuaWdud2FyZV9kaXJzKStbMV0qbGVuKG1hbHdhcmVfZGlycykKICAgIAoKCiAgICBYX3RyYWluLCBYX3Rlc3QsIHlfdHJhaW4sIHlfdGVzdCA9IHRyYWluX3Rlc3Rfc3BsaXQoWF9kYXRhLCB5X2RhdGEsIHRlc3Rfc2l6ZT0wLjMzLCByYW5kb21fc3RhdGU9NDIpCiAgICAKICAgICMjIFRyYWluIE1hdHJpeCBQcmVwYXJhdGlvbgogICAgQSA9IGRpY3QoKQogICAgQiA9IGRpY3QoKQogICAgUCA9IGRpY3QoKQoKICAgIGkgPSAwCiAgICBmb3IgYXBwIGluIFhfdHJhaW46CiAgICAgICAgcHJpbnQoaSkKICAgICAgICB1cGRhdGVfd2l0aF9uZXdfYXBwKGFwcCwgQSwgQiwgUCkKICAgICAgICBpKz0xCgogICAgZm9yIGFwcCBpbiBYX3Rlc3Q6CiAgICAgICAgcHJpbnQoaSkKICAgICAgICB1cGRhdGVfd2l0aF9uZXdfYXBwKGFwcCwgQSwgQiwgUCkKICAgICAgICBpKz0xCiAgICAKICAgIGFwcF9zZXEgPSBsaXN0KEEua2V5cygpKQogICAgbWxiID0gTXVsdGlMYWJlbEJpbmFyaXplcihzcGFyc2Vfb3V0cHV0PVRydWUpCiAgICBBX21hdHJpeCA9IG1sYi5maXRfdHJhbnNmb3JtKGxpc3QoQS52YWx1ZXMoKSkpCiAgICBhcGlfc2VxID0gbWxiLmNsYXNzZXNfLnRvbGlzdCgpCiAgICAKICAgIGFsaWduZWRfQiA9IGFsaWduX2tleV9vcmRlcihCLCBhcGlfc2VxKQoKICAgIG1sYl8yID0gTXVsdGlMYWJlbEJpbmFyaXplcihzcGFyc2Vfb3V0cHV0PVRydWUsIGNsYXNzZXMgPSBhcGlfc2VxKQogICAgQl9tYXRyaXggPSBtbGIuZml0X3RyYW5zZm9ybShsaXN0KGFsaWduZWRfQi52YWx1ZXMoKSkpCiAgICBhbGlnbmVkX1AgPSBhbGlnbl9rZXlfb3JkZXIoUCwgYXBpX3NlcSkKICAgIFBfbWF0cml4ID0gbWxiLmZpdF90cmFuc2Zvcm0obGlzdChhbGlnbmVkX1AudmFsdWVzKCkpKQogICAgCiAgICByZXN1bHRfZGlyID0ganNvbi5sb2FkKG9wZW4oJy4vY29uZmlnL2Vudi5qc29uJykpWydvdXRwdXQtcGF0aCddCiAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocmVzdWx0X2Rpcik6IG9zLm1rZGlyKHJlc3VsdF9kaXIpCiAgICAgICAgCiAgICBwZC5EYXRhRnJhbWUoYXBpX3NlcSkudG9fY3N2KHJlc3VsdF9kaXIgKyAiL2FwaV9zZXEuY3N2IikKICAgIHBkLkRhdGFGcmFtZShYX3RyYWluKS50b19jc3YocmVzdWx0X2RpciArICIvWF90cmFpbi5jc3YiKQogICAgcGQuRGF0YUZyYW1lKFhfdGVzdCkudG9fY3N2KHJlc3VsdF9kaXIgKyAiL1hfdGVzdC5jc3YiKQogICAgcGQuRGF0YUZyYW1lKHlfdHJhaW4pLnRvX2NzdihyZXN1bHRfZGlyICsgIi95X3RyYWluLmNzdiIpCiAgICBwZC5EYXRhRnJhbWUoeV90ZXN0KS50b19jc3YocmVzdWx0X2RpciArICIveV90ZXN0LmNzdiIpCgogICAgc2NpcHkuc3BhcnNlLnNhdmVfbnB6KHJlc3VsdF9kaXIgKyAnL0EubnB6JywgQV9tYXRyaXgpCiAgICBzY2lweS5zcGFyc2Uuc2F2ZV9ucHoocmVzdWx0X2RpciArICcvQi5ucHonLCBCX21hdHJpeCkKICAgIHNjaXB5LnNwYXJzZS5zYXZlX25weihyZXN1bHRfZGlyICsgJy9QLm5weicsIFBfbWF0cml4KQogICAgCiAgICByZXR1cm4gWF90cmFpbiwgWF90ZXN0LCB5X3RyYWluLCB5X3Rlc3QKCmRlZiBnZW5lcmF0ZV9pZChzdGFydF9pbmRleCwgZGF0YV9saXN0LCBuYW1lX29mX2ZpbGUsIHJlc3VsdF9kaXIpOgogICAgIiIiCiAgICBnZW5lcmF0ZSB1bmlxdWUgaWQgZm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgbGlzdCBhbmQgd3JpdGUgaW50byB0eHQgZmlsZS4gQW5kIHRoZSBpbmRleCBzdGFydHMgZnJvbSB0aGUgc3BlY2lmaWVkCiAgICBzdGFydF9pbmRleC4KICAgICIiIgogICAgZGYgPSBwZC5EYXRhRnJhbWUoZGF0YV9saXN0KQogICAgZGYuaW5kZXggPSBsaXN0KHN0YXJ0X2luZGV4ICsgbnAuYXJyYXkoZGYuaW5kZXgpKQogICAgZGYudG9fY3N2KHJlc3VsdF9kaXIrIi8iK25hbWVfb2ZfZmlsZSArICIudHh0Iiwgc2VwID0gIiAiLCBpbmRleCA9IFRydWUsIGhlYWRlcj1Ob25lKQogICAgcmV0dXJuIGRmLmluZGV4Wy0xXQoKZGVmIG1hcHBpbmcobWF0cml4LCByb3dzLCBjb2x1bW5zLCBmaWxlX25hbWUpOgogICAgIiIiCiAgICBNYXAgdGhlIG1hdHJpeCBpbnRvIHRoZSBzYW1wbGUgdHh0IGZpbGUgZnJvbSBuZXRfZGJpcy56aXAKICAgICIiIgogICAgIyBHZXQgcm93IGFuZCBjb2wgaW5kZXhlcyBvZiBub24gemVybyBlbGVtZW50cyBpbiB0aGUgc3BhcnNlIG1hdHJpeAogICAgcm93X2NvbF9pbmRleGVzID0gbWF0cml4Lm5vbnplcm8oKQogICAgCiAgICB3aXRoIG9wZW4oZmlsZV9uYW1lICsgIi50eHQiLCAndycpIGFzIG15ZmlsZToKICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocm93X2NvbF9pbmRleGVzWzBdKSk6CiAgICAgICAgICAgIHJvd19udW0gPSByb3dfY29sX2luZGV4ZXNbMF1baV0KICAgICAgICAgICAgY29sX251bSA9IHJvd19jb2xfaW5kZXhlc1sxXVtpXQogICAgICAgICAgICBteWZpbGUud3JpdGUocm93c1tyb3dfbnVtXSsiICIrY29sdW1uc1tjb2xfbnVtXSsiXG4iKQogICAgbXlmaWxlLmNsb3NlKCkKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBYX3RyYWluLCBYX3Rlc3QsIHlfdHJhaW4sIHlfdGVzdCA9IGdldF9tYXRyaWNlcygyNSwyNSkKCiAgICByZXN1bHRfZGlyID0ganNvbi5sb2FkKG9wZW4oJy4vY29uZmlnL2Vudi5qc29uJykpWydvdXRwdXQtcGF0aCddCiAgICBYX3RyYWluID0gcGQucmVhZF9jc3YocmVzdWx0X2RpciArIi9YX3RyYWluLmNzdiIpCiAgICBYX3Rlc3QgPSBwZC5yZWFkX2NzdihyZXN1bHRfZGlyICsiL1hfdGVzdC5jc3YiKQogICAgeV90cmFpbiA9IHBkLnJlYWRfY3N2KHJlc3VsdF9kaXIgKyIveV90cmFpbi5jc3YiKQogICAgeV90ZXN0ID0gcGQucmVhZF9jc3YocmVzdWx0X2RpciArIi95X3Rlc3QuY3N2IikKICAgIEFfc3BhcnNlID0gc2NpcHkuc3BhcnNlLmxvYWRfbnB6KHJlc3VsdF9kaXIgKyAnL0EubnB6JykKICAgIEJfc3BhcnNlID0gc2NpcHkuc3BhcnNlLmxvYWRfbnB6KHJlc3VsdF9kaXIgKyAnL0IubnB6JykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgUF9zcGFyc2UgPSBzY2lweS5zcGFyc2UubG9hZF9ucHoocmVzdWx0X2RpciArICcvUC5ucHonKQogICAgYXBpX3NlcSA9IHBkLnJlYWRfY3N2KHJlc3VsdF9kaXIgKyIvYXBpX3NlcS5jc3YiKQoKICAgIGxhc3RfaW5kZXhfYXBwID0gZ2VuZXJhdGVfaWQoMCwgWF90cmFpbi5pbG9jWzosMV0udG9saXN0KCkrWF90ZXN0Lmlsb2NbOiwxXS50b2xpc3QoKSwgJ2lkX2FwcCcsIHJlc3VsdF9kaXIpCjx8ZmltX2VuZHw+"]
["99b30ddae98f3d0e748a8ff88628402f1a5580c4-2","99b30ddae98f3d0e748a8ff88628402f1a5580c4","PHxmaW1fcHJlZml4fD4KZnJvbSBzcmMuSGluRHJvaWQgaW1wb3J0IHVwZGF0ZV93aXRoX25ld19hcHAsIGFsaWduX2tleV9vcmRlciwgc2FtcGxlX21hbHdhcmVzCmltcG9ydCBnbG9iCmltcG9ydCByYW5kb20KZnJvbSBza2xlYXJuLm1vZGVsX3NlbGVjdGlvbiBpbXBvcnQgdHJhaW5fdGVzdF9zcGxpdApmcm9tIHNrbGVhcm4ucHJlcHJvY2Vzc2luZyBpbXBvcnQgTXVsdGlMYWJlbEJpbmFyaXplcgppbXBvcnQgb3MKaW1wb3J0IGpzb24KaW1wb3J0IHNjaXB5LnNwYXJzZQppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBudW1weSBhcyBucAoKZGVmIGdldF9tYXRyaWNlcyhudW1fbWFsd2FyZXMsIG51bV9iZW5pZ24pOgogICAgYmVuaWdud2FyZV9kaXJzID0gZ2xvYi5nbG9iKCIuL3NtYWxpX2ZpbGVzLyoiLCByZWN1cnNpdmUgPSBUcnVlKQogICAgbWFsd2FyZV9kaXJzID0gc2FtcGxlX21hbHdhcmVzKG51bV9tYWx3YXJlcykKICAgIGJlbmlnbndhcmVfZGlycyA9IHJhbmRvbS5zYW1wbGUoYmVuaWdud2FyZV9kaXJzLCBudW1fYmVuaWduKQogICAgWF9kYXRhID0gYmVuaWdud2FyZV9kaXJzICsgbWFsd2FyZV9kaXJzCiAgICAjIyAwIGluZGljYXRlIG5vdCBtYWx3YXJlIHdoaWxlIDEgaW5kaWNhdGUgbWFsd2FyZS4KICAgIHlfZGF0YSA9IFswXSpsZW4oYmVuaWdud2FyZV9kaXJzKStbMV0qbGVuKG1hbHdhcmVfZGlycykKICAgIAoKCiAgICBYX3RyYWluLCBYX3Rlc3QsIHlfdHJhaW4sIHlfdGVzdCA9IHRyYWluX3Rlc3Rfc3BsaXQoWF9kYXRhLCB5X2RhdGEsIHRlc3Rfc2l6ZT0wLjMzLCByYW5kb21fc3RhdGU9NDIpCiAgICAKICAgICMjIFRyYWluIE1hdHJpeCBQcmVwYXJhdGlvbgogICAgQSA9IGRpY3QoKQogICAgQiA9IGRpY3QoKQogICAgUCA9IGRpY3QoKQoKICAgIGkgPSAwCiAgICBmb3IgYXBwIGluIFhfdHJhaW46CiAgICAgICAgcHJpbnQoaSkKICAgICAgICB1cGRhdGVfd2l0aF9uZXdfYXBwKGFwcCwgQSwgQiwgUCkKICAgICAgICBpKz0xCgogICAgZm9yIGFwcCBpbiBYX3Rlc3Q6CiAgICAgICAgcHJpbnQoaSkKICAgICAgICB1cGRhdGVfd2l0aF9uZXdfYXBwKGFwcCwgQSwgQiwgUCkKICAgICAgICBpKz0xCiAgICAKICAgIGFwcF9zZXEgPSBsaXN0KEEua2V5cygpKQogICAgbWxiID0gTXVsdGlMYWJlbEJpbmFyaXplcihzcGFyc2Vfb3V0cHV0PVRydWUpCiAgICBBX21hdHJpeCA9IG1sYi5maXRfdHJhbnNmb3JtKGxpc3QoQS52YWx1ZXMoKSkpCiAgICBhcGlfc2VxID0gbWxiLmNsYXNzZXNfLnRvbGlzdCgpCiAgICAKICAgIGFsaWduZWRfQiA9IGFsaWduX2tleV9vcmRlcihCLCBhcGlfc2VxKQoKICAgIG1sYl8yID0gTXVsdGlMYWJlbEJpbmFyaXplcihzcGFyc2Vfb3V0cHV0PVRydWUsIGNsYXNzZXMgPSBhcGlfc2VxKQogICAgQl9tYXRyaXggPSBtbGIuZml0X3RyYW5zZm9ybShsaXN0KGFsaWduZWRfQi52YWx1ZXMoKSkpCiAgICBhbGlnbmVkX1AgPSBhbGlnbl9rZXlfb3JkZXIoUCwgYXBpX3NlcSkKICAgIFBfbWF0cml4ID0gbWxiLmZpdF90cmFuc2Zvcm0obGlzdChhbGlnbmVkX1AudmFsdWVzKCkpKQogICAgCiAgICByZXN1bHRfZGlyID0ganNvbi5sb2FkKG9wZW4oJy4vY29uZmlnL2Vudi5qc29uJykpWydvdXRwdXQtcGF0aCddCiAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocmVzdWx0X2Rpcik6IG9zLm1rZGlyKHJlc3VsdF9kaXIpCiAgICAgICAgCiAgICBwZC5EYXRhRnJhbWUoYXBpX3NlcSkudG9fY3N2KHJlc3VsdF9kaXIgKyAiL2FwaV9zZXEuY3N2IikKICAgIHBkLkRhdGFGcmFtZShYX3RyYWluKS50b19jc3YocmVzdWx0X2RpciArICIvWF90cmFpbi5jc3YiKQogICAgcGQuRGF0YUZyYW1lKFhfdGVzdCkudG9fY3N2KHJlc3VsdF9kaXIgKyAiL1hfdGVzdC5jc3YiKQogICAgcGQuRGF0YUZyYW1lKHlfdHJhaW4pLnRvX2NzdihyZXN1bHRfZGlyICsgIi95X3RyYWluLmNzdiIpCiAgICBwZC5EYXRhRnJhbWUoeV90ZXN0KS50b19jc3YocmVzdWx0X2RpciArICIveV90ZXN0LmNzdiIpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBzY2lweS5zcGFyc2Uuc2F2ZV9ucHoocmVzdWx0X2RpciArICcvQS5ucHonLCBBX21hdHJpeCkKICAgIHNjaXB5LnNwYXJzZS5zYXZlX25weihyZXN1bHRfZGlyICsgJy9CLm5weicsIEJfbWF0cml4KQogICAgc2NpcHkuc3BhcnNlLnNhdmVfbnB6KHJlc3VsdF9kaXIgKyAnL1AubnB6JywgUF9tYXRyaXgpCiAgICAKPHxmaW1fZW5kfD4="]
["17a5e9e03cd4f81aca52e79a3001ce7f6b89c90d-1","17a5e9e03cd4f81aca52e79a3001ce7f6b89c90d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRvdGVudgppbXBvcnQgaHlkcmEKZnJvbSBvbWVnYWNvbmYgaW1wb3J0IERpY3RDb25maWcKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBMb2FkIGVudmlyb25tZW50IHZhcmlhYmxlcyBmcm9tIGAuZW52YC4KZG90ZW52LmxvYWRfZG90ZW52KG92ZXJyaWRlPVRydWUpCgoKPHxmaW1fZW5kfD4="]
["17a5e9e03cd4f81aca52e79a3001ce7f6b89c90d-2","17a5e9e03cd4f81aca52e79a3001ce7f6b89c90d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRvdGVudgppbXBvcnQgaHlkcmEKZnJvbSBvbWVnYWNvbmYgaW1wb3J0IERpY3RDb25maWcKCiMgTG9hZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBgLmVudmAuCmRvdGVudi5sb2FkX2RvdGVudihvdmVycmlkZT1UcnVlKQoKCiMgTG9hZCBoeWRyYSBjb25maWdzIGFuZCBjYWxsIHRyYWluIG1ldGhvZC4KQGh5ZHJhLm1haW4oY29uZmlnX3BhdGg9ImNvbmZpZ3MvIiwgY29uZmlnX25hbWU9ImNvbmZpZy55YW1sIikKZGVmIG1haW4oY29uZmlnOiBEaWN0Q29uZmlnKSAtPiBOb25lOgoKICAgICMgSW1wb3J0cyBzaG91bGQgYmUgbmVzdGVkIHRvIG9wdGltaXplIGh5ZHJhIHRhYiBjb21wbGV0aW9uLgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBmcm9tIHNyYy50cmFpbiBpbXBvcnQgdHJhaW4KICAgIGZyb20gc3JjLnV0aWxzIGltcG9ydCB0ZW1wbGF0ZV91dGlscwoKICAgICMgU2V0dXAgdXRpbGl0aWVzCjx8ZmltX2VuZHw+"]
["d408462db005968dcf705b076c4e06895e7356dd-1","d408462db005968dcf705b076c4e06895e7356dd","PHxmaW1fcHJlZml4fD4KIiIic2FmZSBVUkwgQ29uZmlndXJhdGlvbgoKVGhlIGB1cmxwYXR0ZXJuc2AgbGlzdCByb3V0ZXMgVVJMcyB0byB2aWV3cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHNlZToKICAgIGh0dHBzOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi8yLjIvdG9waWNzL2h0dHAvdXJscy8KRXhhbXBsZXM6CkZ1bmN0aW9uIHZpZXdzCiAgICAxLiBBZGQgYW4gaW1wb3J0OiAgZnJvbSBteV9hcHAgaW1wb3J0IHZpZXdzCiAgICAyLiBBZGQgYSBVUkwgdG8gdXJscGF0dGVybnM6ICBwYXRoKCcnLCB2aWV3cy5ob21lLCBuYW1lPSdob21lJykKQ2xhc3MtYmFzZWQgdmlld3MKICAgIDEuIEFkZCBhbiBpbXBvcnQ6ICBmcm9tIG90aGVyX2FwcC52aWV3cyBpbXBvcnQgSG9tZQogICAgMi4gQWRkIGEgVVJMIHRvIHVybHBhdHRlcm5zOiAgcGF0aCgnJywgSG9tZS5hc192aWV3KCksIG5hbWU9J2hvbWUnKQpJbmNsdWRpbmcgYW5vdGhlciBVUkxjb25mCiAgICAxLiBJbXBvcnQgdGhlIGluY2x1ZGUoKSBmdW5jdGlvbjogZnJvbSBkamFuZ28udXJscyBpbXBvcnQgaW5jbHVkZSwgcGF0aAogICAgMi4gQWRkIGEgVVJMIHRvIHVybHBhdHRlcm5zOiAgcGF0aCgnYmxvZy8nLCBpbmNsdWRlKCdibG9nLnVybHMnKSkKIiIiCmZyb20gZGphbmdvLmNvbnRyaWIgaW1wb3J0IGFkbWluCmZyb20gZGphbmdvLnVybHMgaW1wb3J0IHBhdGgsIGluY2x1ZGUKCmZyb20gcmVzdF9mcmFtZXdvcmsgaW1wb3J0IHJvdXRlcnMKZnJvbSBwZW9wbGUuYXBpIGltcG9ydCBEcml2ZXJWaWV3U2V0LCBNb3RoZXJWaWV3U2V0LCBWaWxsYWdlc1ZpZXdTZXQsIEhlYWx0aENlbnRlcnNWaWV3U2V0LCBNaWR3aWZlVmlld1NldAoKZnJvbSByZXN0X2ZyYW1ld29yay5hdXRodG9rZW4gaW1wb3J0IHZpZXdzCmZyb20gZGphbmdvLnZpZXdzLmdlbmVyaWMgaW1wb3J0IFRlbXBsYXRlVmlldwpmcm9tIC4gaW1wb3J0IHZpZXcKCnJvdXRlciA9IHJvdXRlcnMuRGVmYXVsdFJvdXRlcigpCnJvdXRlci5yZWdpc3RlcignZHJpdmVycycsIERyaXZlclZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcignbW90aGVycycsIE1vdGhlclZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcignbWlkd2l2ZXMnLCBNaWR3aWZlVmlld1NldCkKPHxmaW1faG9sZXw+CiAgICBwYXRoKCdhZG1pbi8nLCBhZG1pbi5zaXRlLnVybHMpLAogICAgcGF0aCgnYXBpLycsIGluY2x1ZGUocm91dGVyLnVybHMpKSwKICAgIHBhdGgoJ2FwaS10b2tlbi1hdXRoLycsIHZpZXdzLm9idGFpbl9hdXRoX3Rva2VuKSwKICAgIHBhdGgoJ2FwaS92aWxsYWdlLzxpbnQ6aWQ+LycsIHZpZXcudmlsbGFnZSksCiAgICBwYXRoKCdhcGkvaGVhbHRoY2VudGVyLzxpbnQ6aWQ+LycsIHZpZXcuaGVhbHRoY2VudGVyKSwKICAgIHBhdGgoJ2FwaS9tb3RoZXIvPHN0cjppZD4vJywgdmlldy5tb3RoZXIpLAogICAgcGF0aCgnYXBpL3RvZ2dsZWRyaXZlcm9mZi88c3RyOmlkPi88aW50Om9uRHV0eUZsYWc+LycsIHZpZXcuZHJpdmVyT25PZmZEdXR5KSwKICAgIHBhdGgoJ2FwaS9kcml2ZXJvbmxpbmUvPHN0cjppZD4vPHN0cjpvbmxpbmVGbGFnPi8nLCB2aWV3LmRyaXZlck9ubGluZSksCiAgICBwYXRoKCdhcGkvcmVnaXN0ZXJtb3RoZXIvPHN0cjppZD4vJywgdmlldy5yZWdNb3RoZXIpLAogICAgcGF0aCgnJywgVGVtcGxhdGVWaWV3LmFzX3ZpZXcodGVtcGxhdGVfbmFtZT0iaW5kZXguaHRtbCIpKSwKXQo8fGZpbV9zdWZmaXh8Pgpyb3V0ZXIucmVnaXN0ZXIoJ3ZpbGxhZ2VzJywgVmlsbGFnZXNWaWV3U2V0KQpyb3V0ZXIucmVnaXN0ZXIoJ2hlYWx0aGNlbnRlcnMnLCBIZWFsdGhDZW50ZXJzVmlld1NldCkKCnVybHBhdHRlcm5zID0gWwo8fGZpbV9lbmR8Pg=="]
["c1f93e4df271b55538ca7d3e419a62948eace0db-1","c1f93e4df271b55538ca7d3e419a62948eace0db","PHxmaW1fcHJlZml4fD4KIiIiCiIiIgoKbG9hZCgiLy9sbHV2aWEvYmF6ZWwvZXhwYW5kX3RlbXBsYXRlOnJ1bGVzLmJ6bCIsCiAgICBfZXhwYW5kX3RlbXBsYXRlID0gImV4cGFuZF90ZW1wbGF0ZSIpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmV4cGFuZF90ZW1wbGF0ZSA9IF9leHBhbmRfdGVtcGxhdGUKPHxmaW1fZW5kfD4="]
["c1f93e4df271b55538ca7d3e419a62948eace0db-2","c1f93e4df271b55538ca7d3e419a62948eace0db","PHxmaW1fcHJlZml4fD4KIiIiCiIiIgoKbG9hZCgiLy9sbHV2aWEvYmF6ZWwvZXhwYW5kX3RlbXBsYXRlOnJ1bGVzLmJ6bCIsCiAgICBfZXhwYW5kX3RlbXBsYXRlID0gImV4cGFuZF90ZW1wbGF0ZSIpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmV4cGFuZF90ZW1wbGF0ZSA9IF9leHBhbmRfdGVtcGxhdGUKPHxmaW1fZW5kfD4="]
["c1f93e4df271b55538ca7d3e419a62948eace0db-3","c1f93e4df271b55538ca7d3e419a62948eace0db","PHxmaW1fcHJlZml4fD4KIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIiIiCgpsb2FkKCIvL2xsdXZpYS9iYXplbC9leHBhbmRfdGVtcGxhdGU6cnVsZXMuYnpsIiwKICAgIF9leHBhbmRfdGVtcGxhdGUgPSAiZXhwYW5kX3RlbXBsYXRlIikKPHxmaW1fZW5kfD4="]
["c1f93e4df271b55538ca7d3e419a62948eace0db-4","c1f93e4df271b55538ca7d3e419a62948eace0db","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIiIiCiIiIgoKbG9hZCgiLy9sbHV2aWEvYmF6ZWwvZXhwYW5kX3RlbXBsYXRlOnJ1bGVzLmJ6bCIsCjx8ZmltX2VuZHw+"]
["1545665f9d69aa60e3ddac498565e44e65cdf8d5-1","1545665f9d69aa60e3ddac498565e44e65cdf8d5","PHxmaW1fcHJlZml4fD4KY2xhc3MgQURTQmlidGV4QmFzZUV4Y2VwdGlvbihFeGNlcHRpb24pOgo8fGZpbV9ob2xlfD4KY2xhc3MgQURTQmlidGV4Q29uZmlnRXJyb3IoQURTQmlidGV4QmFzZUV4Y2VwdGlvbik6CiAgICBwYXNzCgpjbGFzcyBBRFNCaWJ0ZXhCaWJjb2RlTm90Rm91bmQoQURTQmlidGV4QmFzZUV4Y2VwdGlvbik6CiAgICBwYXNzCjx8ZmltX3N1ZmZpeHw+CiAgICBwYXNzCgoKPHxmaW1fZW5kfD4="]
["00fa66df0e58f8de0289e42687973991dc075936-1","00fa66df0e58f8de0289e42687973991dc075936","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCm5hbWVzID0gWwogICAgJ0FnYW5qdScsICdBZ2Fyb3UnLCAnQWdhc3NvdScsICdBZ2F5dScsICdBZ291ZScsICdBZ3dlJywgJ0FpZGEnLCAnV2VkbycsICdBaXphbicsICdBeWlkYScsICdXZWRkbycsICdBemFjY2EnLAogICAgJ0JhYmx1YXllJywgJ0JhZGVzc3knLCAnQmFrYScsICdCYXJvbicsICdDaW1ldGllcmUnLCAnQ2ltZXRpw6hyZScsICdMYScsICdDcm9peCcsICdTYW1lZGknLCAnU2F0dXJkYXknLCAnQmVuJywKICAgICdBbmdlJywgJ0JvbicsICdEaWV1JywgJ0JvbmRqZScsICdCb25keWUnLCAnQm9zc3UnLCAnRGFtYmFsbGEnLCAnRGFtYmFsbGFoJywgJ0RhbicsICdQZXRybycsICdEam8nLCAnRWxsZWd1YScsCiAgICAnRW56aWxpJywgJ0ZyZWRhJywgJ0dlJywgJ1JvdWdlJywgJ01hcGlhbmd1ZWgnLCAnVG9obycsICdFcnp1bGllJywgJ0RhbnRvcicsICdGcmV5ZGEnLCAnTWFwaWFuZ3VlJywgJ0V6aWxpJywKICAgICdEYW50bycsICdHZWRlJywgJ0doZWRlJywgJ0dyYW4nLCAnTWFpdHJlJywgJ01hw650cmUnLCAnTWV0JywgJ0dyYW5kJywgJ0JvaXMnLCAnR3JvcycsICdQb2ludCcsICdHdWVkZScsICdHdcOpZMOpJywKICAgICdJYmVqaScsICdJYm8nLCAnSW5sZScsICdKb3lib3knLCAnS2FuZ2EnLCAnS29uZ28nLCAnU2F2YW5uZScsICdTaXJlbmUnLCAnTGVnYmEoMiknLCAnTG9hJywgJ0xvY28nLCAnTG91cCcsICdHYXJvdScsCiAgICAnTHdhJywgJ01haXQnLCAnQ2FycmVmb3VyJywgJ01hbWFuJywgJ0JyaWdldHRlJywgJ0JyaWdpdHRlJywgJ01hcmFzc2EnLCAnTWF5YScsICdPZ291bicsICdCYWRhZ3JpcycsICdGZXInLCAnT2d1JywKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgJ09yaWNoYXMnLCAnT3Vnb3UnLCAnRmVyYXknLCAnUmFkYScsICdTaW1iaScsICdWb29kb28nLCAnVm9vZG91JywgJ1RlJywgJ05hbicsICdEaW8nLCAnWmFrYScsICdNZWRlJ10KPHxmaW1fZW5kfD4="]
["00fa66df0e58f8de0289e42687973991dc075936-2","00fa66df0e58f8de0289e42687973991dc075936","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCm5hbWVzID0gWwogICAgJ0FnYW5qdScsICdBZ2Fyb3UnLCAnQWdhc3NvdScsICdBZ2F5dScsICdBZ291ZScsICdBZ3dlJywgJ0FpZGEnLCAnV2VkbycsICdBaXphbicsICdBeWlkYScsICdXZWRkbycsICdBemFjY2EnLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAnQmFibHVheWUnLCAnQmFkZXNzeScsICdCYWthJywgJ0Jhcm9uJywgJ0NpbWV0aWVyZScsICdDaW1ldGnDqHJlJywgJ0xhJywgJ0Nyb2l4JywgJ1NhbWVkaScsICdTYXR1cmRheScsICdCZW4nLAogICAgJ0FuZ2UnLCAnQm9uJywgJ0RpZXUnLCAnQm9uZGplJywgJ0JvbmR5ZScsICdCb3NzdScsICdEYW1iYWxsYScsICdEYW1iYWxsYWgnLCAnRGFuJywgJ1BldHJvJywgJ0RqbycsICdFbGxlZ3VhJywKICAgICdFbnppbGknLCAnRnJlZGEnLCAnR2UnLCAnUm91Z2UnLCAnTWFwaWFuZ3VlaCcsICdUb2hvJywgJ0VyenVsaWUnLCAnRGFudG9yJywgJ0ZyZXlkYScsICdNYXBpYW5ndWUnLCAnRXppbGknLAogICAgJ0RhbnRvJywgJ0dlZGUnLCAnR2hlZGUnLCAnR3JhbicsICdNYWl0cmUnLCAnTWHDrnRyZScsICdNZXQnLCAnR3JhbmQnLCAnQm9pcycsICdHcm9zJywgJ1BvaW50JywgJ0d1ZWRlJywgJ0d1w6lkw6knLAo8fGZpbV9lbmR8Pg=="]
["e705356724a78b05d1a16b98f24d10658b258172-1","e705356724a78b05d1a16b98f24d10658b258172","PHxmaW1fcHJlZml4fD4KIiIiQ2FsY3VsYXRlIGRpZmZ1c2lvbiBjb2VmZmljaWVudHMgZm9yIG1ldGhhbmUgKENINCkvSDIgaW4gcG9yb3VzIG1lZGlhIiIiCgoKZGVmIG1haW4oKToKICAgIGZyb20gcG9yb3VzX21lZGlhLnBhcmFtZXRlcnMgaW1wb3J0IEZsdWlkTWl4dHVyZQogICAgdm9pZF9mcmFjdGlvbiwgZF9wb3JlLCB0b3J0dW9zaXR5ID0gMC4zNSwgMS5lLTgsIDEuNQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBuYW1lcyA9IFsnQ0g0JywgJ0gyJ10gICMgbXVzdCBtYXRjaCB3aGF0IGluIHBhcmFtZXRlciBmaWxlIQogICAgbW9sZWN1bGFyX3dlaWdodHMgPSBbMTIuMDExKzEuMDA4KjQsIDEuMDA4KjJdCiAgICBmcm9tIHJhd19kYXRhLnJlYWRfZGF0YSBpbXBvcnQgZ2V0X0xKX3BhcmFtcywgcmVhZF9jc3YKICAgIExKX2RhdGEgPSByZWFkX2NzdignLi4vLi4vcmF3X2RhdGEvTEpwYXJhbXMuY3N2JykKPHxmaW1fZW5kfD4="]
["e705356724a78b05d1a16b98f24d10658b258172-2","e705356724a78b05d1a16b98f24d10658b258172","PHxmaW1fcHJlZml4fD4KIiIiQ2FsY3VsYXRlIGRpZmZ1c2lvbiBjb2VmZmljaWVudHMgZm9yIG1ldGhhbmUgKENINCkvSDIgaW4gcG9yb3VzIG1lZGlhIiIiCgoKZGVmIG1haW4oKToKICAgIGZyb20gcG9yb3VzX21lZGlhLnBhcmFtZXRlcnMgaW1wb3J0IEZsdWlkTWl4dHVyZQogICAgdm9pZF9mcmFjdGlvbiwgZF9wb3JlLCB0b3J0dW9zaXR5ID0gMC4zNSwgMS5lLTgsIDEuNQogICAgbmFtZXMgPSBbJ0NINCcsICdIMiddICAjIG11c3QgbWF0Y2ggd2hhdCBpbiBwYXJhbWV0ZXIgZmlsZSEKICAgIG1vbGVjdWxhcl93ZWlnaHRzID0gWzEyLjAxMSsxLjAwOCo0LCAxLjAwOCoyXQogICAgZnJvbSByYXdfZGF0YS5yZWFkX2RhdGEgaW1wb3J0IGdldF9MSl9wYXJhbXMsIHJlYWRfY3N2CiAgICBMSl9kYXRhID0gcmVhZF9jc3YoJy4uLy4uL3Jhd19kYXRhL0xKcGFyYW1zLmNzdicpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHNpZ21hLCBlcHNpbG9uID0gZ2V0X0xKX3BhcmFtcyhuYW1lcywgTEpfZGF0YSkKICAgIGNscyA9IEZsdWlkTWl4dHVyZSgKICAgICAgICBuYW1lcywgbW9sZWN1bGFyX3dlaWdodHMsIHNpZ21hLCBlcHNpbG9uLCB2b2lkX2ZyYWN0aW9uLCBkX3BvcmUsIHRvcnR1b3NpdHkKICAgICkKPHxmaW1fZW5kfD4="]
["e705356724a78b05d1a16b98f24d10658b258172-3","e705356724a78b05d1a16b98f24d10658b258172","PHxmaW1fcHJlZml4fD4KIiIiQ2FsY3VsYXRlIGRpZmZ1c2lvbiBjb2VmZmljaWVudHMgZm9yIG1ldGhhbmUgKENINCkvSDIgaW4gcG9yb3VzIG1lZGlhIiIiCgoKZGVmIG1haW4oKToKICAgIGZyb20gcG9yb3VzX21lZGlhLnBhcmFtZXRlcnMgaW1wb3J0IEZsdWlkTWl4dHVyZQogICAgdm9pZF9mcmFjdGlvbiwgZF9wb3JlLCB0b3J0dW9zaXR5ID0gMC4zNSwgMS5lLTgsIDEuNQogICAgbmFtZXMgPSBbJ0NINCcsICdIMiddICAjIG11c3QgbWF0Y2ggd2hhdCBpbiBwYXJhbWV0ZXIgZmlsZSEKICAgIG1vbGVjdWxhcl93ZWlnaHRzID0gWzEyLjAxMSsxLjAwOCo0LCAxLjAwOCoyXQogICAgZnJvbSByYXdfZGF0YS5yZWFkX2RhdGEgaW1wb3J0IGdldF9MSl9wYXJhbXMsIHJlYWRfY3N2CiAgICBMSl9kYXRhID0gcmVhZF9jc3YoJy4uLy4uL3Jhd19kYXRhL0xKcGFyYW1zLmNzdicpCiAgICBzaWdtYSwgZXBzaWxvbiA9IGdldF9MSl9wYXJhbXMobmFtZXMsIExKX2RhdGEpCiAgICBjbHMgPSBGbHVpZE1peHR1cmUoCiAgICAgICAgbmFtZXMsIG1vbGVjdWxhcl93ZWlnaHRzLCBzaWdtYSwgZXBzaWxvbiwgdm9pZF9mcmFjdGlvbiwgZF9wb3JlLCB0b3J0dW9zaXR5CiAgICApCiAgICBjbHMud3JpdGVfcGFyYW1zKCdpbnB1dC5jc3YnKQogICAgY2xzLndyaXRlX2NhbGN1bGF0aW9ucygnb3V0cHV0LmNzdicsIDMwMC4sIDEwMTMyNS4pCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbWFpbigpCjx8ZmltX2VuZHw+"]
["e705356724a78b05d1a16b98f24d10658b258172-4","e705356724a78b05d1a16b98f24d10658b258172","PHxmaW1fcHJlZml4fD4KIiIiQ2FsY3VsYXRlIGRpZmZ1c2lvbiBjb2VmZmljaWVudHMgZm9yIG1ldGhhbmUgKENINCkvSDIgaW4gcG9yb3VzIG1lZGlhIiIiCgoKZGVmIG1haW4oKToKICAgIGZyb20gcG9yb3VzX21lZGlhLnBhcmFtZXRlcnMgaW1wb3J0IEZsdWlkTWl4dHVyZQo8fGZpbV9ob2xlfD4KICAgIExKX2RhdGEgPSByZWFkX2NzdignLi4vLi4vcmF3X2RhdGEvTEpwYXJhbXMuY3N2JykKICAgIHNpZ21hLCBlcHNpbG9uID0gZ2V0X0xKX3BhcmFtcyhuYW1lcywgTEpfZGF0YSkKICAgIGNscyA9IEZsdWlkTWl4dHVyZSgKICAgICAgICBuYW1lcywgbW9sZWN1bGFyX3dlaWdodHMsIHNpZ21hLCBlcHNpbG9uLCB2b2lkX2ZyYWN0aW9uLCBkX3BvcmUsIHRvcnR1b3NpdHkKICAgICkKICAgIGNscy53cml0ZV9wYXJhbXMoJ2lucHV0LmNzdicpCiAgICBjbHMud3JpdGVfY2FsY3VsYXRpb25zKCdvdXRwdXQuY3N2JywgMzAwLiwgMTAxMzI1LikKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICB2b2lkX2ZyYWN0aW9uLCBkX3BvcmUsIHRvcnR1b3NpdHkgPSAwLjM1LCAxLmUtOCwgMS41CiAgICBuYW1lcyA9IFsnQ0g0JywgJ0gyJ10gICMgbXVzdCBtYXRjaCB3aGF0IGluIHBhcmFtZXRlciBmaWxlIQogICAgbW9sZWN1bGFyX3dlaWdodHMgPSBbMTIuMDExKzEuMDA4KjQsIDEuMDA4KjJdCiAgICBmcm9tIHJhd19kYXRhLnJlYWRfZGF0YSBpbXBvcnQgZ2V0X0xKX3BhcmFtcywgcmVhZF9jc3YKPHxmaW1fZW5kfD4="]
["e705356724a78b05d1a16b98f24d10658b258172-5","e705356724a78b05d1a16b98f24d10658b258172","PHxmaW1fcHJlZml4fD4KIiIiQ2FsY3VsYXRlIGRpZmZ1c2lvbiBjb2VmZmljaWVudHMgZm9yIG1ldGhhbmUgKENINCkvSDIgaW4gcG9yb3VzIG1lZGlhIiIiCgoKZGVmIG1haW4oKToKICAgIGZyb20gcG9yb3VzX21lZGlhLnBhcmFtZXRlcnMgaW1wb3J0IEZsdWlkTWl4dHVyZQogICAgdm9pZF9mcmFjdGlvbiwgZF9wb3JlLCB0b3J0dW9zaXR5ID0gMC4zNSwgMS5lLTgsIDEuNQogICAgbmFtZXMgPSBbJ0NINCcsICdIMiddICAjIG11c3QgbWF0Y2ggd2hhdCBpbiBwYXJhbWV0ZXIgZmlsZSEKICAgIG1vbGVjdWxhcl93ZWlnaHRzID0gWzEyLjAxMSsxLjAwOCo0LCAxLjAwOCoyXQogICAgZnJvbSByYXdfZGF0YS5yZWFkX2RhdGEgaW1wb3J0IGdldF9MSl9wYXJhbXMsIHJlYWRfY3N2CiAgICBMSl9kYXRhID0gcmVhZF9jc3YoJy4uLy4uL3Jhd19kYXRhL0xKcGFyYW1zLmNzdicpCjx8ZmltX2hvbGV8PgogICAgY2xzLndyaXRlX3BhcmFtcygnaW5wdXQuY3N2JykKICAgIGNscy53cml0ZV9jYWxjdWxhdGlvbnMoJ291dHB1dC5jc3YnLCAzMDAuLCAxMDEzMjUuKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KICAgIHNpZ21hLCBlcHNpbG9uID0gZ2V0X0xKX3BhcmFtcyhuYW1lcywgTEpfZGF0YSkKICAgIGNscyA9IEZsdWlkTWl4dHVyZSgKICAgICAgICBuYW1lcywgbW9sZWN1bGFyX3dlaWdodHMsIHNpZ21hLCBlcHNpbG9uLCB2b2lkX2ZyYWN0aW9uLCBkX3BvcmUsIHRvcnR1b3NpdHkKICAgICkKPHxmaW1fZW5kfD4="]
["68c65bd75007dee0e4dcf47a16c0f9c549586f04-1","68c65bd75007dee0e4dcf47a16c0f9c549586f04","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCgpmcm9tIGZlZGxhYi51dGlscy5mdW5jdGlvbmFsIGltcG9ydCBldmFsdWF0ZQpmcm9tIGZlZGxhYi51dGlscyBpbXBvcnQgTG9nZ2VyLCBTZXJpYWxpemF0aW9uVG9vbCwgQWdncmVnYXRvcnMKZnJvbSBmZWRsYWIuY29yZS5zZXJ2ZXIuaGFuZGxlciBpbXBvcnQgU3luY1BhcmFtZXRlclNlcnZlckhhbmRsZXIKZnJvbSBmZWRsYWIuY29yZS5zZXJ2ZXIubWFuYWdlciBpbXBvcnQgU3luY2hyb25vdXNTZXJ2ZXJNYW5hZ2VyCmZyb20gZmVkbGFiLmNvcmUubmV0d29yayBpbXBvcnQgRGlzdE5ldHdvcmsKZnJvbSBzZXR0aW5nIGltcG9ydCBnZXRfbW9kZWwsIGdldF9kYXRhc2V0CmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2h2aXNpb24KZnJvbSB0b3JjaHZpc2lvbiBpbXBvcnQgdHJhbnNmb3Jtcwpmcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5CgpjbGFzcyBUZXN0SGFuZGxlcihTeW5jUGFyYW1ldGVyU2VydmVySGFuZGxlcik6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAgbW9kZWwsCiAgICAgICAgICAgICAgICAgZ2xvYmFsX3JvdW5kLAogICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRpbywKICAgICAgICAgICAgICAgICBjdWRhPUZhbHNlLAogICAgICAgICAgICAgICAgIGxvZ2dlcj1Ob25lKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKG1vZGVsLCBnbG9iYWxfcm91bmQsIHNhbXBsZV9yYXRpbywgY3VkYSwgbG9nZ2VyKQoKICAgICAgICB0ZXN0c2V0ID0gdG9yY2h2aXNpb24uZGF0YXNldHMuTU5JU1Qocm9vdD0nLi4vZGF0YXNldHMvbW5pc3QvJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaW49RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT10cmFuc2Zvcm1zLlRvVGVuc29yKCkpCgogICAgICAgIHNlbGYudGVzdGxvYWRlciA9IHRvcmNoLnV0aWxzLmRhdGEuRGF0YUxvYWRlcih0ZXN0c2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaF9zaXplPWludCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbih0ZXN0c2V0KSAvIDEwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcF9sYXN0PUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHVmZmxlPUZhbHNlKQoKICAgIGRlZiBfdXBkYXRlX2dsb2JhbF9tb2RlbChzZWxmLCBwYXlsb2FkKToKICAgIAogICAgICAgIHNlbGYuY2xpZW50X2J1ZmZlcl9jYWNoZS5hcHBlbmQoZGVlcGNvcHkocGF5bG9hZFswXSkpCgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgc2VyaWFsaXplZF9wYXJhbWV0ZXJzID0gQWdncmVnYXRvcnMuZmVkYXZnX2FnZ3JlZ2F0ZSgKICAgICAgICAgICAgICAgIG1vZGVsX3BhcmFtZXRlcnNfbGlzdCkKCiAgICAgICAgICAgIFNlcmlhbGl6YXRpb25Ub29sLmRlc2VyaWFsaXplX21vZGVsKHNlbGYuX21vZGVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkX3BhcmFtZXRlcnMpCgogICAgICAgICAgICBsb3NzLCBhY2MgPSBldmFsdWF0ZShzZWxmLl9tb2RlbCwgdG9yY2gubm4uQ3Jvc3NFbnRyb3B5TG9zcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3Rsb2FkZXIpCiAgICAgICAgICAgIHNlbGYuX0xPR0dFUi5pbmZvKAogICAgICAgICAgICAgICAgImNoZWNrIGNoZWNrIFNlcnZlciBldmFsdWF0ZSBsb3NzIHs6LjRmfSwgYWNjIHs6LjRmfSIuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgIGxvc3MsIGFjYykpCgogICAgICAgICAgICBzZWxmLnJvdW5kICs9IDEKCiAgICAgICAgICAgICMgcmVzZXQgY2FjaGUgY250CiAgICAgICAgICAgIHNlbGYuY2FjaGVfY250ID0gMAogICAgICAgICAgICBzZWxmLmNsaWVudF9idWZmZXJfY2FjaGUgPSBbXQoKICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J0ZMIHNlcnZlciBleGFtcGxlJykKCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWlwJywgdHlwZT1zdHIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXBvcnQnLCB0eXBlPXN0cikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0td29ybGRfc2l6ZScsIHR5cGU9aW50KQoKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcm91bmQnLCB0eXBlPWludCwgZGVmYXVsdD01KQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1kYXRhc2V0JywgdHlwZT1zdHIsIGRlZmF1bHQ9Im1uaXN0IikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZXRoZXJuZXQnLCB0eXBlPXN0ciwgZGVmYXVsdD1Ob25lKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zYW1wbGUnLCB0eXBlPWZsb2F0LCBkZWZhdWx0PTEpCgogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCiAgICBtb2RlbCA9IGdldF9tb2RlbChhcmdzKQogICAgTE9HR0VSID0gTG9nZ2VyKGxvZ19uYW1lPSJzZXJ2ZXIiLCBsb2dfZmlsZT0idGVzdC50eHQiKQogICAgaGFuZGxlciA9IFRlc3RIYW5kbGVyKG1vZGVsLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbF9yb3VuZD1hcmdzLnJvdW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlcj1MT0dHRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGlvPWFyZ3Muc2FtcGxlKQogICAgbmV0d29yayA9IERpc3ROZXR3b3JrKGFkZHJlc3M9KGFyZ3MuaXAsIGFyZ3MucG9ydCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgd29ybGRfc2l6ZT1hcmdzLndvcmxkX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuaz0wLAogICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVybmV0PWFyZ3MuZXRoZXJuZXQpCiAgICBtYW5hZ2VyXyA9IFN5bmNocm9ub3VzU2VydmVyTWFuYWdlcihoYW5kbGVyPWhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrPW5ldHdvcmssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXI9TE9HR0VSKQogICAgbWFuYWdlcl8ucnVuKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICBpZiBsZW4oc2VsZi5jbGllbnRfYnVmZmVyX2NhY2hlKSA9PSBzZWxmLmNsaWVudF9udW1fcGVyX3JvdW5kOgoKICAgICAgICAgICAgbW9kZWxfcGFyYW1ldGVyc19saXN0ID0gc2VsZi5jbGllbnRfYnVmZmVyX2NhY2hlCiAgICAgICAgICAgICMgdXNlIGFnZ3JlZ2F0b3IKPHxmaW1fZW5kfD4="]
["68c65bd75007dee0e4dcf47a16c0f9c549586f04-2","68c65bd75007dee0e4dcf47a16c0f9c549586f04","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCgpmcm9tIGZlZGxhYi51dGlscy5mdW5jdGlvbmFsIGltcG9ydCBldmFsdWF0ZQpmcm9tIGZlZGxhYi51dGlscyBpbXBvcnQgTG9nZ2VyLCBTZXJpYWxpemF0aW9uVG9vbCwgQWdncmVnYXRvcnMKZnJvbSBmZWRsYWIuY29yZS5zZXJ2ZXIuaGFuZGxlciBpbXBvcnQgU3luY1BhcmFtZXRlclNlcnZlckhhbmRsZXIKZnJvbSBmZWRsYWIuY29yZS5zZXJ2ZXIubWFuYWdlciBpbXBvcnQgU3luY2hyb25vdXNTZXJ2ZXJNYW5hZ2VyCmZyb20gZmVkbGFiLmNvcmUubmV0d29yayBpbXBvcnQgRGlzdE5ldHdvcmsKZnJvbSBzZXR0aW5nIGltcG9ydCBnZXRfbW9kZWwsIGdldF9kYXRhc2V0CmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2h2aXNpb24KZnJvbSB0b3JjaHZpc2lvbiBpbXBvcnQgdHJhbnNmb3Jtcwpmcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5CgpjbGFzcyBUZXN0SGFuZGxlcihTeW5jUGFyYW1ldGVyU2VydmVySGFuZGxlcik6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAgbW9kZWwsCiAgICAgICAgICAgICAgICAgZ2xvYmFsX3JvdW5kLAogICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRpbywKICAgICAgICAgICAgICAgICBjdWRhPUZhbHNlLAogICAgICAgICAgICAgICAgIGxvZ2dlcj1Ob25lKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKG1vZGVsLCBnbG9iYWxfcm91bmQsIHNhbXBsZV9yYXRpbywgY3VkYSwgbG9nZ2VyKQoKICAgICAgICB0ZXN0c2V0ID0gdG9yY2h2aXNpb24uZGF0YXNldHMuTU5JU1Qocm9vdD0nLi4vZGF0YXNldHMvbW5pc3QvJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaW49RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT10cmFuc2Zvcm1zLlRvVGVuc29yKCkpCgogICAgICAgIHNlbGYudGVzdGxvYWRlciA9IHRvcmNoLnV0aWxzLmRhdGEuRGF0YUxvYWRlcih0ZXN0c2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaF9zaXplPWludCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbih0ZXN0c2V0KSAvIDEwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcF9sYXN0PUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHVmZmxlPUZhbHNlKQoKICAgIGRlZiBfdXBkYXRlX2dsb2JhbF9tb2RlbChzZWxmLCBwYXlsb2FkKToKICAgIAogICAgICAgIHNlbGYuY2xpZW50X2J1ZmZlcl9jYWNoZS5hcHBlbmQoZGVlcGNvcHkocGF5bG9hZFswXSkpCgogICAgICAgIGlmIGxlbihzZWxmLmNsaWVudF9idWZmZXJfY2FjaGUpID09IHNlbGYuY2xpZW50X251bV9wZXJfcm91bmQ6CgogICAgICAgICAgICBtb2RlbF9wYXJhbWV0ZXJzX2xpc3QgPSBzZWxmLmNsaWVudF9idWZmZXJfY2FjaGUKICAgICAgICAgICAgIyB1c2UgYWdncmVnYXRvcgogICAgICAgICAgICBzZXJpYWxpemVkX3BhcmFtZXRlcnMgPSBBZ2dyZWdhdG9ycy5mZWRhdmdfYWdncmVnYXRlKAogICAgICAgICAgICAgICAgbW9kZWxfcGFyYW1ldGVyc19saXN0KQoKICAgICAgICAgICAgU2VyaWFsaXphdGlvblRvb2wuZGVzZXJpYWxpemVfbW9kZWwoc2VsZi5fbW9kZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRfcGFyYW1ldGVycykKCiAgICAgICAgICAgIGxvc3MsIGFjYyA9IGV2YWx1YXRlKHNlbGYuX21vZGVsLCB0b3JjaC5ubi5Dcm9zc0VudHJvcHlMb3NzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGVzdGxvYWRlcikKICAgICAgICAgICAgc2VsZi5fTE9HR0VSLmluZm8oCiAgICAgICAgICAgICAgICAiY2hlY2sgY2hlY2sgU2VydmVyIGV2YWx1YXRlIGxvc3MgezouNGZ9LCBhY2MgezouNGZ9Ii5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgbG9zcywgYWNjKSkKCiAgICAgICAgICAgIHNlbGYucm91bmQgKz0gMQoKICAgICAgICAgICAgIyByZXNldCBjYWNoZSBjbnQKICAgICAgICAgICAgc2VsZi5jYWNoZV9jbnQgPSAwCiAgICAgICAgICAgIHNlbGYuY2xpZW50X2J1ZmZlcl9jYWNoZSA9IFtdCgogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nRkwgc2VydmVyIGV4YW1wbGUnKQoKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0taXAnLCB0eXBlPXN0cikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcG9ydCcsIHR5cGU9c3RyKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS13b3JsZF9zaXplJywgdHlwZT1pbnQpCgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1yb3VuZCcsIHR5cGU9aW50LCBkZWZhdWx0PTUpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRhdGFzZXQnLCB0eXBlPXN0ciwgZGVmYXVsdD0ibW5pc3QiKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1ldGhlcm5ldCcsIHR5cGU9c3RyLCBkZWZhdWx0PU5vbmUpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXNhbXBsZScsIHR5cGU9ZmxvYXQsIGRlZmF1bHQ9MSkKCjx8ZmltX2hvbGV8PgogICAgaGFuZGxlciA9IFRlc3RIYW5kbGVyKG1vZGVsLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbF9yb3VuZD1hcmdzLnJvdW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlcj1MT0dHRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGlvPWFyZ3Muc2FtcGxlKQogICAgbmV0d29yayA9IERpc3ROZXR3b3JrKGFkZHJlc3M9KGFyZ3MuaXAsIGFyZ3MucG9ydCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgd29ybGRfc2l6ZT1hcmdzLndvcmxkX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuaz0wLAogICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVybmV0PWFyZ3MuZXRoZXJuZXQpCiAgICBtYW5hZ2VyXyA9IFN5bmNocm9ub3VzU2VydmVyTWFuYWdlcihoYW5kbGVyPWhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrPW5ldHdvcmssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXI9TE9HR0VSKQogICAgbWFuYWdlcl8ucnVuKCkKPHxmaW1fc3VmZml4fD4KICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCgogICAgbW9kZWwgPSBnZXRfbW9kZWwoYXJncykKICAgIExPR0dFUiA9IExvZ2dlcihsb2dfbmFtZT0ic2VydmVyIiwgbG9nX2ZpbGU9InRlc3QudHh0IikKPHxmaW1fZW5kfD4="]
["68c65bd75007dee0e4dcf47a16c0f9c549586f04-3","68c65bd75007dee0e4dcf47a16c0f9c549586f04","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCgpmcm9tIGZlZGxhYi51dGlscy5mdW5jdGlvbmFsIGltcG9ydCBldmFsdWF0ZQpmcm9tIGZlZGxhYi51dGlscyBpbXBvcnQgTG9nZ2VyLCBTZXJpYWxpemF0aW9uVG9vbCwgQWdncmVnYXRvcnMKZnJvbSBmZWRsYWIuY29yZS5zZXJ2ZXIuaGFuZGxlciBpbXBvcnQgU3luY1BhcmFtZXRlclNlcnZlckhhbmRsZXIKZnJvbSBmZWRsYWIuY29yZS5zZXJ2ZXIubWFuYWdlciBpbXBvcnQgU3luY2hyb25vdXNTZXJ2ZXJNYW5hZ2VyCmZyb20gZmVkbGFiLmNvcmUubmV0d29yayBpbXBvcnQgRGlzdE5ldHdvcmsKZnJvbSBzZXR0aW5nIGltcG9ydCBnZXRfbW9kZWwsIGdldF9kYXRhc2V0CmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2h2aXNpb24KZnJvbSB0b3JjaHZpc2lvbiBpbXBvcnQgdHJhbnNmb3Jtcwpmcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5CgpjbGFzcyBUZXN0SGFuZGxlcihTeW5jUGFyYW1ldGVyU2VydmVySGFuZGxlcik6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAgbW9kZWwsCiAgICAgICAgICAgICAgICAgZ2xvYmFsX3JvdW5kLAogICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRpbywKICAgICAgICAgICAgICAgICBjdWRhPUZhbHNlLAogICAgICAgICAgICAgICAgIGxvZ2dlcj1Ob25lKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKG1vZGVsLCBnbG9iYWxfcm91bmQsIHNhbXBsZV9yYXRpbywgY3VkYSwgbG9nZ2VyKQoKICAgICAgICB0ZXN0c2V0ID0gdG9yY2h2aXNpb24uZGF0YXNldHMuTU5JU1Qocm9vdD0nLi4vZGF0YXNldHMvbW5pc3QvJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaW49RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT10cmFuc2Zvcm1zLlRvVGVuc29yKCkpCgogICAgICAgIHNlbGYudGVzdGxvYWRlciA9IHRvcmNoLnV0aWxzLmRhdGEuRGF0YUxvYWRlcih0ZXN0c2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaF9zaXplPWludCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbih0ZXN0c2V0KSAvIDEwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcF9sYXN0PUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHVmZmxlPUZhbHNlKQoKICAgIGRlZiBfdXBkYXRlX2dsb2JhbF9tb2RlbChzZWxmLCBwYXlsb2FkKToKICAgIAogICAgICAgIHNlbGYuY2xpZW50X2J1ZmZlcl9jYWNoZS5hcHBlbmQoZGVlcGNvcHkocGF5bG9hZFswXSkpCgogICAgICAgIGlmIGxlbihzZWxmLmNsaWVudF9idWZmZXJfY2FjaGUpID09IHNlbGYuY2xpZW50X251bV9wZXJfcm91bmQ6CgogICAgICAgICAgICBtb2RlbF9wYXJhbWV0ZXJzX2xpc3QgPSBzZWxmLmNsaWVudF9idWZmZXJfY2FjaGUKICAgICAgICAgICAgIyB1c2UgYWdncmVnYXRvcgogICAgICAgICAgICBzZXJpYWxpemVkX3BhcmFtZXRlcnMgPSBBZ2dyZWdhdG9ycy5mZWRhdmdfYWdncmVnYXRlKAogICAgICAgICAgICAgICAgbW9kZWxfcGFyYW1ldGVyc19saXN0KQoKICAgICAgICAgICAgU2VyaWFsaXphdGlvblRvb2wuZGVzZXJpYWxpemVfbW9kZWwoc2VsZi5fbW9kZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRfcGFyYW1ldGVycykKCiAgICAgICAgICAgIGxvc3MsIGFjYyA9IGV2YWx1YXRlKHNlbGYuX21vZGVsLCB0b3JjaC5ubi5Dcm9zc0VudHJvcHlMb3NzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGVzdGxvYWRlcikKICAgICAgICAgICAgc2VsZi5fTE9HR0VSLmluZm8oCiAgICAgICAgICAgICAgICAiY2hlY2sgY2hlY2sgU2VydmVyIGV2YWx1YXRlIGxvc3MgezouNGZ9LCBhY2MgezouNGZ9Ii5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgbG9zcywgYWNjKSkKCiAgICAgICAgICAgIHNlbGYucm91bmQgKz0gMQoKICAgICAgICAgICAgIyByZXNldCBjYWNoZSBjbnQKICAgICAgICAgICAgc2VsZi5jYWNoZV9jbnQgPSAwCiAgICAgICAgICAgIHNlbGYuY2xpZW50X2J1ZmZlcl9jYWNoZSA9IFtdCgogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nRkwgc2VydmVyIGV4YW1wbGUnKQoKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0taXAnLCB0eXBlPXN0cikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcG9ydCcsIHR5cGU9c3RyKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS13b3JsZF9zaXplJywgdHlwZT1pbnQpCgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1yb3VuZCcsIHR5cGU9aW50LCBkZWZhdWx0PTUpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRhdGFzZXQnLCB0eXBlPXN0ciwgZGVmYXVsdD0ibW5pc3QiKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1ldGhlcm5ldCcsIHR5cGU9c3RyLCBkZWZhdWx0PU5vbmUpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXNhbXBsZScsIHR5cGU9ZmxvYXQsIGRlZmF1bHQ9MSkKCiAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQoKICAgIG1vZGVsID0gZ2V0X21vZGVsKGFyZ3MpCiAgICBMT0dHRVIgPSBMb2dnZXIobG9nX25hbWU9InNlcnZlciIsIGxvZ19maWxlPSJ0ZXN0LnR4dCIpCiAgICBoYW5kbGVyID0gVGVzdEhhbmRsZXIobW9kZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsX3JvdW5kPWFyZ3Mucm91bmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyPUxPR0dFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVfcmF0aW89YXJncy5zYW1wbGUpCiAgICBuZXR3b3JrID0gRGlzdE5ldHdvcmsoYWRkcmVzcz0oYXJncy5pcCwgYXJncy5wb3J0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JsZF9zaXplPWFyZ3Mud29ybGRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICByYW5rPTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJuZXQ9YXJncy5ldGhlcm5ldCkKICAgIG1hbmFnZXJfID0gU3luY2hyb25vdXNTZXJ2ZXJNYW5hZ2VyKGhhbmRsZXI9aGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcms9bmV0d29yaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlcj1MT0dHRVIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIG1hbmFnZXJfLnJ1bigpCjx8ZmltX2VuZHw+"]
["68c65bd75007dee0e4dcf47a16c0f9c549586f04-4","68c65bd75007dee0e4dcf47a16c0f9c549586f04","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCgpmcm9tIGZlZGxhYi51dGlscy5mdW5jdGlvbmFsIGltcG9ydCBldmFsdWF0ZQpmcm9tIGZlZGxhYi51dGlscyBpbXBvcnQgTG9nZ2VyLCBTZXJpYWxpemF0aW9uVG9vbCwgQWdncmVnYXRvcnMKZnJvbSBmZWRsYWIuY29yZS5zZXJ2ZXIuaGFuZGxlciBpbXBvcnQgU3luY1BhcmFtZXRlclNlcnZlckhhbmRsZXIKZnJvbSBmZWRsYWIuY29yZS5zZXJ2ZXIubWFuYWdlciBpbXBvcnQgU3luY2hyb25vdXNTZXJ2ZXJNYW5hZ2VyCmZyb20gZmVkbGFiLmNvcmUubmV0d29yayBpbXBvcnQgRGlzdE5ldHdvcmsKZnJvbSBzZXR0aW5nIGltcG9ydCBnZXRfbW9kZWwsIGdldF9kYXRhc2V0CmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2h2aXNpb24KZnJvbSB0b3JjaHZpc2lvbiBpbXBvcnQgdHJhbnNmb3Jtcwpmcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5CgpjbGFzcyBUZXN0SGFuZGxlcihTeW5jUGFyYW1ldGVyU2VydmVySGFuZGxlcik6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAgbW9kZWwsCiAgICAgICAgICAgICAgICAgZ2xvYmFsX3JvdW5kLAogICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRpbywKICAgICAgICAgICAgICAgICBjdWRhPUZhbHNlLAogICAgICAgICAgICAgICAgIGxvZ2dlcj1Ob25lKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKG1vZGVsLCBnbG9iYWxfcm91bmQsIHNhbXBsZV9yYXRpbywgY3VkYSwgbG9nZ2VyKQoKICAgICAgICB0ZXN0c2V0ID0gdG9yY2h2aXNpb24uZGF0YXNldHMuTU5JU1Qocm9vdD0nLi4vZGF0YXNldHMvbW5pc3QvJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaW49RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT10cmFuc2Zvcm1zLlRvVGVuc29yKCkpCgogICAgICAgIHNlbGYudGVzdGxvYWRlciA9IHRvcmNoLnV0aWxzLmRhdGEuRGF0YUxvYWRlcih0ZXN0c2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaF9zaXplPWludCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbih0ZXN0c2V0KSAvIDEwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcF9sYXN0PUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHVmZmxlPUZhbHNlKQoKICAgIGRlZiBfdXBkYXRlX2dsb2JhbF9tb2RlbChzZWxmLCBwYXlsb2FkKToKICAgIAogICAgICAgIHNlbGYuY2xpZW50X2J1ZmZlcl9jYWNoZS5hcHBlbmQoZGVlcGNvcHkocGF5bG9hZFswXSkpCgogICAgICAgIGlmIGxlbihzZWxmLmNsaWVudF9idWZmZXJfY2FjaGUpID09IHNlbGYuY2xpZW50X251bV9wZXJfcm91bmQ6CgogICAgICAgICAgICBtb2RlbF9wYXJhbWV0ZXJzX2xpc3QgPSBzZWxmLmNsaWVudF9idWZmZXJfY2FjaGUKICAgICAgICAgICAgIyB1c2UgYWdncmVnYXRvcgogICAgICAgICAgICBzZXJpYWxpemVkX3BhcmFtZXRlcnMgPSBBZ2dyZWdhdG9ycy5mZWRhdmdfYWdncmVnYXRlKAogICAgICAgICAgICAgICAgbW9kZWxfcGFyYW1ldGVyc19saXN0KQoKICAgICAgICAgICAgU2VyaWFsaXphdGlvblRvb2wuZGVzZXJpYWxpemVfbW9kZWwoc2VsZi5fbW9kZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRfcGFyYW1ldGVycykKCiAgICAgICAgICAgIGxvc3MsIGFjYyA9IGV2YWx1YXRlKHNlbGYuX21vZGVsLCB0b3JjaC5ubi5Dcm9zc0VudHJvcHlMb3NzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGVzdGxvYWRlcikKICAgICAgICAgICAgc2VsZi5fTE9HR0VSLmluZm8oCiAgICAgICAgICAgICAgICAiY2hlY2sgY2hlY2sgU2VydmVyIGV2YWx1YXRlIGxvc3MgezouNGZ9LCBhY2MgezouNGZ9Ii5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgbG9zcywgYWNjKSkKCiAgICAgICAgICAgIHNlbGYucm91bmQgKz0gMQoKICAgICAgICAgICAgIyByZXNldCBjYWNoZSBjbnQKICAgICAgICAgICAgc2VsZi5jYWNoZV9jbnQgPSAwCiAgICAgICAgICAgIHNlbGYuY2xpZW50X2J1ZmZlcl9jYWNoZSA9IFtdCgogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdGTCBzZXJ2ZXIgZXhhbXBsZScpCgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1pcCcsIHR5cGU9c3RyKQo8fGZpbV9lbmR8Pg=="]
["68c65bd75007dee0e4dcf47a16c0f9c549586f04-5","68c65bd75007dee0e4dcf47a16c0f9c549586f04","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCgpmcm9tIGZlZGxhYi51dGlscy5mdW5jdGlvbmFsIGltcG9ydCBldmFsdWF0ZQpmcm9tIGZlZGxhYi51dGlscyBpbXBvcnQgTG9nZ2VyLCBTZXJpYWxpemF0aW9uVG9vbCwgQWdncmVnYXRvcnMKZnJvbSBmZWRsYWIuY29yZS5zZXJ2ZXIuaGFuZGxlciBpbXBvcnQgU3luY1BhcmFtZXRlclNlcnZlckhhbmRsZXIKZnJvbSBmZWRsYWIuY29yZS5zZXJ2ZXIubWFuYWdlciBpbXBvcnQgU3luY2hyb25vdXNTZXJ2ZXJNYW5hZ2VyCmZyb20gZmVkbGFiLmNvcmUubmV0d29yayBpbXBvcnQgRGlzdE5ldHdvcmsKZnJvbSBzZXR0aW5nIGltcG9ydCBnZXRfbW9kZWwsIGdldF9kYXRhc2V0Cjx8ZmltX2hvbGV8PgoKY2xhc3MgVGVzdEhhbmRsZXIoU3luY1BhcmFtZXRlclNlcnZlckhhbmRsZXIpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICAgIG1vZGVsLAogICAgICAgICAgICAgICAgIGdsb2JhbF9yb3VuZCwKICAgICAgICAgICAgICAgICBzYW1wbGVfcmF0aW8sCiAgICAgICAgICAgICAgICAgY3VkYT1GYWxzZSwKICAgICAgICAgICAgICAgICBsb2dnZXI9Tm9uZSk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhtb2RlbCwgZ2xvYmFsX3JvdW5kLCBzYW1wbGVfcmF0aW8sIGN1ZGEsIGxvZ2dlcikKCiAgICAgICAgdGVzdHNldCA9IHRvcmNodmlzaW9uLmRhdGFzZXRzLk1OSVNUKHJvb3Q9Jy4uL2RhdGFzZXRzL21uaXN0LycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWluPUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZD1UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09dHJhbnNmb3Jtcy5Ub1RlbnNvcigpKQoKICAgICAgICBzZWxmLnRlc3Rsb2FkZXIgPSB0b3JjaC51dGlscy5kYXRhLkRhdGFMb2FkZXIodGVzdHNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2hfc2l6ZT1pbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4odGVzdHNldCkgLyAxMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BfbGFzdD1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZT1GYWxzZSkKCiAgICBkZWYgX3VwZGF0ZV9nbG9iYWxfbW9kZWwoc2VsZiwgcGF5bG9hZCk6CiAgICAKICAgICAgICBzZWxmLmNsaWVudF9idWZmZXJfY2FjaGUuYXBwZW5kKGRlZXBjb3B5KHBheWxvYWRbMF0pKQoKICAgICAgICBpZiBsZW4oc2VsZi5jbGllbnRfYnVmZmVyX2NhY2hlKSA9PSBzZWxmLmNsaWVudF9udW1fcGVyX3JvdW5kOgoKICAgICAgICAgICAgbW9kZWxfcGFyYW1ldGVyc19saXN0ID0gc2VsZi5jbGllbnRfYnVmZmVyX2NhY2hlCiAgICAgICAgICAgICMgdXNlIGFnZ3JlZ2F0b3IKICAgICAgICAgICAgc2VyaWFsaXplZF9wYXJhbWV0ZXJzID0gQWdncmVnYXRvcnMuZmVkYXZnX2FnZ3JlZ2F0ZSgKICAgICAgICAgICAgICAgIG1vZGVsX3BhcmFtZXRlcnNfbGlzdCkKCiAgICAgICAgICAgIFNlcmlhbGl6YXRpb25Ub29sLmRlc2VyaWFsaXplX21vZGVsKHNlbGYuX21vZGVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkX3BhcmFtZXRlcnMpCgogICAgICAgICAgICBsb3NzLCBhY2MgPSBldmFsdWF0ZShzZWxmLl9tb2RlbCwgdG9yY2gubm4uQ3Jvc3NFbnRyb3B5TG9zcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3Rsb2FkZXIpCiAgICAgICAgICAgIHNlbGYuX0xPR0dFUi5pbmZvKAogICAgICAgICAgICAgICAgImNoZWNrIGNoZWNrIFNlcnZlciBldmFsdWF0ZSBsb3NzIHs6LjRmfSwgYWNjIHs6LjRmfSIuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgIGxvc3MsIGFjYykpCgogICAgICAgICAgICBzZWxmLnJvdW5kICs9IDEKCiAgICAgICAgICAgICMgcmVzZXQgY2FjaGUgY250CiAgICAgICAgICAgIHNlbGYuY2FjaGVfY250ID0gMAogICAgICAgICAgICBzZWxmLmNsaWVudF9idWZmZXJfY2FjaGUgPSBbXQoKICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J0ZMIHNlcnZlciBleGFtcGxlJykKCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWlwJywgdHlwZT1zdHIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXBvcnQnLCB0eXBlPXN0cikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0td29ybGRfc2l6ZScsIHR5cGU9aW50KQoKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcm91bmQnLCB0eXBlPWludCwgZGVmYXVsdD01KQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1kYXRhc2V0JywgdHlwZT1zdHIsIGRlZmF1bHQ9Im1uaXN0IikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZXRoZXJuZXQnLCB0eXBlPXN0ciwgZGVmYXVsdD1Ob25lKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zYW1wbGUnLCB0eXBlPWZsb2F0LCBkZWZhdWx0PTEpCgogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCiAgICBtb2RlbCA9IGdldF9tb2RlbChhcmdzKQogICAgTE9HR0VSID0gTG9nZ2VyKGxvZ19uYW1lPSJzZXJ2ZXIiLCBsb2dfZmlsZT0idGVzdC50eHQiKQogICAgaGFuZGxlciA9IFRlc3RIYW5kbGVyKG1vZGVsLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbF9yb3VuZD1hcmdzLnJvdW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlcj1MT0dHRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGlvPWFyZ3Muc2FtcGxlKQogICAgbmV0d29yayA9IERpc3ROZXR3b3JrKGFkZHJlc3M9KGFyZ3MuaXAsIGFyZ3MucG9ydCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgd29ybGRfc2l6ZT1hcmdzLndvcmxkX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuaz0wLAogICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVybmV0PWFyZ3MuZXRoZXJuZXQpCiAgICBtYW5hZ2VyXyA9IFN5bmNocm9ub3VzU2VydmVyTWFuYWdlcihoYW5kbGVyPWhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrPW5ldHdvcmssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXI9TE9HR0VSKQogICAgbWFuYWdlcl8ucnVuKCkKPHxmaW1fc3VmZml4fD4KaW1wb3J0IHRvcmNoCmltcG9ydCB0b3JjaHZpc2lvbgpmcm9tIHRvcmNodmlzaW9uIGltcG9ydCB0cmFuc2Zvcm1zCmZyb20gY29weSBpbXBvcnQgZGVlcGNvcHkKPHxmaW1fZW5kfD4="]
["ec0791c5e8776e23a05561e1f0eded31fc434b8d-1","ec0791c5e8776e23a05561e1f0eded31fc434b8d","PHxmaW1fcHJlZml4fD4KZnJvbSAubWl4dHVyZSBpbXBvcnQgTWl4dHVyZU1vZGVsCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cl9fdmVyc2lvbl9fID0gJzAuMS4zJwpfX2F1dGhvcl9fID0gJ01hcmMgU2luZ2xldG9uJwo8fGZpbV9lbmR8Pg=="]
["ec0791c5e8776e23a05561e1f0eded31fc434b8d-2","ec0791c5e8776e23a05561e1f0eded31fc434b8d","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAubWl4dHVyZSBpbXBvcnQgTWl4dHVyZU1vZGVsCgpfX3ZlcnNpb25fXyA9ICcwLjEuMycKX19hdXRob3JfXyA9ICdNYXJjIFNpbmdsZXRvbicKPHxmaW1fZW5kfD4="]
["ec0791c5e8776e23a05561e1f0eded31fc434b8d-3","ec0791c5e8776e23a05561e1f0eded31fc434b8d","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAubWl4dHVyZSBpbXBvcnQgTWl4dHVyZU1vZGVsCgpfX3ZlcnNpb25fXyA9ICcwLjEuMycKX19hdXRob3JfXyA9ICdNYXJjIFNpbmdsZXRvbicKPHxmaW1fZW5kfD4="]
["418633961fe6eff1dc783392083d1be51a351caa-1","418633961fe6eff1dc783392083d1be51a351caa","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QsIFR1cGxlLCBVbmlvbgoKZnJvbSBzY2hhZmtvcGYuY2FyZF9kZWNrIGltcG9ydCBDYXJkRGVjawpmcm9tIHNjaGFma29wZi5nYW1lIGltcG9ydCBHYW1lCmZyb20gc2NoYWZrb3BmLmdhbWVfbW9kZXMgaW1wb3J0IE5PX0dBTUUKZnJvbSBzY2hhZmtvcGYuaGVscGVycyBpbXBvcnQgc29ydF9oYW5kCmZyb20gc2NoYWZrb3BmLnBsYXllcnMgaW1wb3J0IEhldXJpc3RpY3NQbGF5ZXIsIER1bW15UGxheWVyCmZyb20gc2NoYWZrb3BmLnB5Z2FtZV9ndWkuR2FtZVJlc3VsdCBpbXBvcnQgR2FtZVJlc3VsdApmcm9tIHNjaGFma29wZi50cmljayBpbXBvcnQgVHJpY2sKCgpjbGFzcyBTY2hhZmtvcGZHYW1lOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGxlYWRpbmdfcGxheWVyX2luZGV4KToKICAgICAgICBzZWxmLnBsYXllcnMgPSBbRHVtbXlQbGF5ZXIoKSwgSGV1cmlzdGljc1BsYXllcigpLCBIZXVyaXN0aWNzUGxheWVyKCksIEhldXJpc3RpY3NQbGF5ZXIoKV0KICAgICAgICBzZWxmLmdhbWVfc3RhdGUgPSBzZWxmLl9uZXdfZ2FtZV9zdGF0ZShsZWFkaW5nX3BsYXllcl9pbmRleCkKICAgICAgICBzZWxmLnBhdXNlZF9vbl9sYXN0X3RyaWNrID0gRmFsc2UKCiAgICBkZWYgaHVtYW5fcGxheWVyc190dXJuKHNlbGYpIC0+IGJvb2w6CiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsiY3VycmVudF9wbGF5ZXJfaW5kZXgiXSA9PSAwCgogICAgZGVmIG5vX2NhcmRzX2luX2N1cnJlbnRfdHJpY2soc2VsZikgLT4gYm9vbDoKICAgICAgICBjdXJyZW50X3RyaWNrID0gc2VsZi5nYW1lX3N0YXRlWyJjdXJyZW50X3RyaWNrIl0KICAgICAgICBpZiBjdXJyZW50X3RyaWNrIGlzIE5vbmU6CiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIGxlbihbYyBmb3IgYyBpbiBjdXJyZW50X3RyaWNrLmNhcmRzIGlmIGMgaXMgbm90IE5vbmVdKSA9PSAwCgogICAgZGVmIGdldF9wbGF5ZXJfaGFuZChzZWxmKSAtPiBMaXN0W1R1cGxlW2ludCwgaW50XV06CiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsicGxheWVyX2hhbmRzIl1bMF0KCiAgICBkZWYgZ2V0X21vZGVfcHJvcG9zYWxzKHNlbGYpIC0+IExpc3RbVHVwbGVbaW50LCBVbmlvbltpbnQsIE5vbmVdXV06CiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsibW9kZV9wcm9wb3NhbHMiXQoKICAgIGRlZiBnZXRfZGVjbGFyaW5nX3BsYXllcihzZWxmKSAtPiBVbmlvbltpbnQsIE5vbmVdOgogICAgICAgIHJldHVybiBzZWxmLmdhbWVfc3RhdGVbImRlY2xhcmluZ19wbGF5ZXIiXQoKICAgIGRlZiBnZXRfZ2FtZV9tb2RlKHNlbGYpIC0+IFR1cGxlW2ludCwgVW5pb25baW50LCBOb25lXV06CiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsiZ2FtZV9tb2RlIl0KCiAgICBkZWYgZ2V0X29wcG9uZW50X2hhbmRzKHNlbGYpIC0+IExpc3RbTGlzdFtUdXBsZVtpbnQsIGludF1dXToKICAgICAgICByZXR1cm4gc2VsZi5nYW1lX3N0YXRlWyJwbGF5ZXJfaGFuZHMiXVsxOjRdCgogICAgZGVmIGdldF9jdXJyZW50X3RyaWNrKHNlbGYpIC0+IExpc3RbVW5pb25bVHVwbGVbaW50LCBpbnRdLCBOb25lXV06CiAgICAgICAgY3VycmVudF90cmljazogVW5pb25bVHJpY2ssIE5vbmVdID0gc2VsZi5nYW1lX3N0YXRlWyJjdXJyZW50X3RyaWNrIl0KICAgICAgICBpZiBjdXJyZW50X3RyaWNrIGlzIG5vdCBOb25lOgogICAgICAgICAgICBpZiBzZWxmLnBhdXNlZF9vbl9sYXN0X3RyaWNrOgogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsidHJpY2tzIl1bLTFdLmNhcmRzCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudF90cmljay5jYXJkcwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBbXQoKICAgIGRlZiBhdF9sZWFzdF9vbmVfcHJldmlvdXNfdHJpY2soc2VsZikgLT4gYm9vbDoKICAgICAgICByZXR1cm4gbGVuKHNlbGYuZ2FtZV9zdGF0ZVsidHJpY2tzIl0pID4gMAoKICAgIGRlZiBwYXVzZShzZWxmKToKICAgICAgICBzZWxmLnBhdXNlZF9vbl9sYXN0X3RyaWNrID0gVHJ1ZQoKICAgIGRlZiB1bnBhdXNlKHNlbGYpOgogICAgICAgIHNlbGYucGF1c2VkX29uX2xhc3RfdHJpY2sgPSBGYWxzZQoKICAgIGRlZiBuZXh0X2h1bWFuX2JpZChzZWxmLCBuZXh0X2FjdGlvbik6CiAgICAgICAgcGxheWVycyA9IFtEdW1teVBsYXllcihmYXZvcml0ZV9tb2RlPW5leHRfYWN0aW9uKSwgSGV1cmlzdGljc1BsYXllcigpLCBIZXVyaXN0aWNzUGxheWVyKCksIEhldXJpc3RpY3NQbGF5ZXIoKV0KICAgICAgICBnYW1lID0gR2FtZShwbGF5ZXJzLCBzZWxmLmdhbWVfc3RhdGUpCiAgICAgICAgZ2FtZS5uZXh0X2FjdGlvbigpCiAgICAgICAgc2VsZi5nYW1lX3N0YXRlID0gZ2FtZS5nZXRfZ2FtZV9zdGF0ZSgpCiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZQoKICAgIGRlZiBuZXh0X2h1bWFuX2NhcmQoc2VsZiwgbmV4dF9hY3Rpb24pOgogICAgICAgIGlmIG5vdCBzZWxmLmdhbWVfc3RhdGVbImN1cnJlbnRfcGxheWVyX2luZGV4Il0gPT0gMDoKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm90IGh1bWFuIHBsYXllcnMgdHVybiIpCiAgICAgICAgcG9zc2libGVfY2FyZHMgPSBzZWxmLnBvc3NpYmxlX2NhcmRzKCkKICAgICAgICBpZiBuZXh0X2FjdGlvbiBpbiBwb3NzaWJsZV9jYXJkczoKICAgICAgICAgICAgcGxheWVycyA9IFtEdW1teVBsYXllcihmYXZvcml0ZV9jYXJkcz1bbmV4dF9hY3Rpb25dKSwgSGV1cmlzdGljc1BsYXllcigpLCBIZXVyaXN0aWNzUGxheWVyKCksCiAgICAgICAgICAgICAgICAgICAgICAgSGV1cmlzdGljc1BsYXllcigpXQogICAgICAgICAgICBnYW1lID0gR2FtZShwbGF5ZXJzLCBzZWxmLmdhbWVfc3RhdGUpCiAgICAgICAgICAgIGdhbWUubmV4dF9hY3Rpb24oKQogICAgICAgICAgICBzZWxmLmdhbWVfc3RhdGUgPSBnYW1lLmdldF9nYW1lX3N0YXRlKCkKICAgICAgICAgICAgaWYgc2VsZi5hdF9sZWFzdF9vbmVfcHJldmlvdXNfdHJpY2soKSBhbmQgc2VsZi5ub19jYXJkc19pbl9jdXJyZW50X3RyaWNrKCk6CiAgICAgICAgICAgICAgICBzZWxmLnBhdXNlKCkKICAgICAgICByZXR1cm4gc2VsZi5nYW1lX3N0YXRlCgogICAgZGVmIG5leHRfYWN0aW9uKHNlbGYpOgogICAgICAgIGdhbWUgPSBHYW1lKHNlbGYucGxheWVycywgc2VsZi5nYW1lX3N0YXRlKQogICAgICAgIGdhbWUubmV4dF9hY3Rpb24oKQogICAgICAgIHNlbGYuZ2FtZV9zdGF0ZSA9IGdhbWUuZ2V0X2dhbWVfc3RhdGUoKQogICAgICAgIGlmIHNlbGYuYXRfbGVhc3Rfb25lX3ByZXZpb3VzX3RyaWNrKCkgYW5kIHNlbGYubm9fY2FyZHNfaW5fY3VycmVudF90cmljaygpOgogICAgICAgICAgICBzZWxmLnBhdXNlKCkKICAgICAgICByZXR1cm4gc2VsZi5nYW1lX3N0YXRlCgogICAgZGVmIHBvc3NpYmxlX2JpZHMoc2VsZik6CiAgICAgICAgZ2FtZSA9IEdhbWUoCiAgICAgICAgICAgIFtEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpXSwgc2VsZi5nYW1lX3N0YXRlCiAgICAgICAgKQogICAgICAgIGhhbmQgPSBnYW1lLnBsYXllcmxpc3RbMF0uaGFuZAogICAgICAgIG1vZGVfdG9fYmVhdCA9IGdhbWUuYmlkZGluZ19nYW1lLm1vZGVfdG9fYmVhdAogICAgICAgIHBvc3NpYmxlX21vZGVzID0gbGlzdChnYW1lLmJpZGRpbmdfZ2FtZS5kZXRlcm1pbmVfcG9zc2libGVfZ2FtZV9tb2RlcyhoYW5kPWhhbmQsIG1vZGVfdG9fYmVhdD1tb2RlX3RvX2JlYXQpKQogICAgICAgIHBvc3NpYmxlX21vZGVzLnNvcnQoKQogICAgICAgIHJldHVybiBwb3NzaWJsZV9tb2Rlcwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIHBvc3NpYmxlX2NhcmRzKHNlbGYpOgogICAgICAgIGdhbWUgPSBHYW1lKAogICAgICAgICAgICBbRHVtbXlQbGF5ZXIoKSwgRHVtbXlQbGF5ZXIoKSwgRHVtbXlQbGF5ZXIoKSwgRHVtbXlQbGF5ZXIoKV0sIHNlbGYuZ2FtZV9zdGF0ZQo8fGZpbV9lbmR8Pg=="]
["418633961fe6eff1dc783392083d1be51a351caa-2","418633961fe6eff1dc783392083d1be51a351caa","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QsIFR1cGxlLCBVbmlvbgoKZnJvbSBzY2hhZmtvcGYuY2FyZF9kZWNrIGltcG9ydCBDYXJkRGVjawpmcm9tIHNjaGFma29wZi5nYW1lIGltcG9ydCBHYW1lCmZyb20gc2NoYWZrb3BmLmdhbWVfbW9kZXMgaW1wb3J0IE5PX0dBTUUKZnJvbSBzY2hhZmtvcGYuaGVscGVycyBpbXBvcnQgc29ydF9oYW5kCmZyb20gc2NoYWZrb3BmLnBsYXllcnMgaW1wb3J0IEhldXJpc3RpY3NQbGF5ZXIsIER1bW15UGxheWVyCmZyb20gc2NoYWZrb3BmLnB5Z2FtZV9ndWkuR2FtZVJlc3VsdCBpbXBvcnQgR2FtZVJlc3VsdApmcm9tIHNjaGFma29wZi50cmljayBpbXBvcnQgVHJpY2sKCgpjbGFzcyBTY2hhZmtvcGZHYW1lOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGxlYWRpbmdfcGxheWVyX2luZGV4KToKICAgICAgICBzZWxmLnBsYXllcnMgPSBbRHVtbXlQbGF5ZXIoKSwgSGV1cmlzdGljc1BsYXllcigpLCBIZXVyaXN0aWNzUGxheWVyKCksIEhldXJpc3RpY3NQbGF5ZXIoKV0KICAgICAgICBzZWxmLmdhbWVfc3RhdGUgPSBzZWxmLl9uZXdfZ2FtZV9zdGF0ZShsZWFkaW5nX3BsYXllcl9pbmRleCkKICAgICAgICBzZWxmLnBhdXNlZF9vbl9sYXN0X3RyaWNrID0gRmFsc2UKCiAgICBkZWYgaHVtYW5fcGxheWVyc190dXJuKHNlbGYpIC0+IGJvb2w6CiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsiY3VycmVudF9wbGF5ZXJfaW5kZXgiXSA9PSAwCgogICAgZGVmIG5vX2NhcmRzX2luX2N1cnJlbnRfdHJpY2soc2VsZikgLT4gYm9vbDoKICAgICAgICBjdXJyZW50X3RyaWNrID0gc2VsZi5nYW1lX3N0YXRlWyJjdXJyZW50X3RyaWNrIl0KICAgICAgICBpZiBjdXJyZW50X3RyaWNrIGlzIE5vbmU6CiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIGxlbihbYyBmb3IgYyBpbiBjdXJyZW50X3RyaWNrLmNhcmRzIGlmIGMgaXMgbm90IE5vbmVdKSA9PSAwCgogICAgZGVmIGdldF9wbGF5ZXJfaGFuZChzZWxmKSAtPiBMaXN0W1R1cGxlW2ludCwgaW50XV06CiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsicGxheWVyX2hhbmRzIl1bMF0KCiAgICBkZWYgZ2V0X21vZGVfcHJvcG9zYWxzKHNlbGYpIC0+IExpc3RbVHVwbGVbaW50LCBVbmlvbltpbnQsIE5vbmVdXV06CiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsibW9kZV9wcm9wb3NhbHMiXQoKICAgIGRlZiBnZXRfZGVjbGFyaW5nX3BsYXllcihzZWxmKSAtPiBVbmlvbltpbnQsIE5vbmVdOgogICAgICAgIHJldHVybiBzZWxmLmdhbWVfc3RhdGVbImRlY2xhcmluZ19wbGF5ZXIiXQoKICAgIGRlZiBnZXRfZ2FtZV9tb2RlKHNlbGYpIC0+IFR1cGxlW2ludCwgVW5pb25baW50LCBOb25lXV06CiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsiZ2FtZV9tb2RlIl0KCiAgICBkZWYgZ2V0X29wcG9uZW50X2hhbmRzKHNlbGYpIC0+IExpc3RbTGlzdFtUdXBsZVtpbnQsIGludF1dXToKICAgICAgICByZXR1cm4gc2VsZi5nYW1lX3N0YXRlWyJwbGF5ZXJfaGFuZHMiXVsxOjRdCgogICAgZGVmIGdldF9jdXJyZW50X3RyaWNrKHNlbGYpIC0+IExpc3RbVW5pb25bVHVwbGVbaW50LCBpbnRdLCBOb25lXV06CiAgICAgICAgY3VycmVudF90cmljazogVW5pb25bVHJpY2ssIE5vbmVdID0gc2VsZi5nYW1lX3N0YXRlWyJjdXJyZW50X3RyaWNrIl0KICAgICAgICBpZiBjdXJyZW50X3RyaWNrIGlzIG5vdCBOb25lOgogICAgICAgICAgICBpZiBzZWxmLnBhdXNlZF9vbl9sYXN0X3RyaWNrOgogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsidHJpY2tzIl1bLTFdLmNhcmRzCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudF90cmljay5jYXJkcwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBbXQoKICAgIGRlZiBhdF9sZWFzdF9vbmVfcHJldmlvdXNfdHJpY2soc2VsZikgLT4gYm9vbDoKICAgICAgICByZXR1cm4gbGVuKHNlbGYuZ2FtZV9zdGF0ZVsidHJpY2tzIl0pID4gMAoKICAgIGRlZiBwYXVzZShzZWxmKToKICAgICAgICBzZWxmLnBhdXNlZF9vbl9sYXN0X3RyaWNrID0gVHJ1ZQoKICAgIGRlZiB1bnBhdXNlKHNlbGYpOgogICAgICAgIHNlbGYucGF1c2VkX29uX2xhc3RfdHJpY2sgPSBGYWxzZQoKICAgIGRlZiBuZXh0X2h1bWFuX2JpZChzZWxmLCBuZXh0X2FjdGlvbik6CiAgICAgICAgcGxheWVycyA9IFtEdW1teVBsYXllcihmYXZvcml0ZV9tb2RlPW5leHRfYWN0aW9uKSwgSGV1cmlzdGljc1BsYXllcigpLCBIZXVyaXN0aWNzUGxheWVyKCksIEhldXJpc3RpY3NQbGF5ZXIoKV0KICAgICAgICBnYW1lID0gR2FtZShwbGF5ZXJzLCBzZWxmLmdhbWVfc3RhdGUpCiAgICAgICAgZ2FtZS5uZXh0X2FjdGlvbigpCiAgICAgICAgc2VsZi5nYW1lX3N0YXRlID0gZ2FtZS5nZXRfZ2FtZV9zdGF0ZSgpCiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZQoKICAgIGRlZiBuZXh0X2h1bWFuX2NhcmQoc2VsZiwgbmV4dF9hY3Rpb24pOgogICAgICAgIGlmIG5vdCBzZWxmLmdhbWVfc3RhdGVbImN1cnJlbnRfcGxheWVyX2luZGV4Il0gPT0gMDoKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm90IGh1bWFuIHBsYXllcnMgdHVybiIpCiAgICAgICAgcG9zc2libGVfY2FyZHMgPSBzZWxmLnBvc3NpYmxlX2NhcmRzKCkKICAgICAgICBpZiBuZXh0X2FjdGlvbiBpbiBwb3NzaWJsZV9jYXJkczoKICAgICAgICAgICAgcGxheWVycyA9IFtEdW1teVBsYXllcihmYXZvcml0ZV9jYXJkcz1bbmV4dF9hY3Rpb25dKSwgSGV1cmlzdGljc1BsYXllcigpLCBIZXVyaXN0aWNzUGxheWVyKCksCiAgICAgICAgICAgICAgICAgICAgICAgSGV1cmlzdGljc1BsYXllcigpXQogICAgICAgICAgICBnYW1lID0gR2FtZShwbGF5ZXJzLCBzZWxmLmdhbWVfc3RhdGUpCiAgICAgICAgICAgIGdhbWUubmV4dF9hY3Rpb24oKQogICAgICAgICAgICBzZWxmLmdhbWVfc3RhdGUgPSBnYW1lLmdldF9nYW1lX3N0YXRlKCkKICAgICAgICAgICAgaWYgc2VsZi5hdF9sZWFzdF9vbmVfcHJldmlvdXNfdHJpY2soKSBhbmQgc2VsZi5ub19jYXJkc19pbl9jdXJyZW50X3RyaWNrKCk6CiAgICAgICAgICAgICAgICBzZWxmLnBhdXNlKCkKICAgICAgICByZXR1cm4gc2VsZi5nYW1lX3N0YXRlCgogICAgZGVmIG5leHRfYWN0aW9uKHNlbGYpOgogICAgICAgIGdhbWUgPSBHYW1lKHNlbGYucGxheWVycywgc2VsZi5nYW1lX3N0YXRlKQogICAgICAgIGdhbWUubmV4dF9hY3Rpb24oKQogICAgICAgIHNlbGYuZ2FtZV9zdGF0ZSA9IGdhbWUuZ2V0X2dhbWVfc3RhdGUoKQogICAgICAgIGlmIHNlbGYuYXRfbGVhc3Rfb25lX3ByZXZpb3VzX3RyaWNrKCkgYW5kIHNlbGYubm9fY2FyZHNfaW5fY3VycmVudF90cmljaygpOgogICAgICAgICAgICBzZWxmLnBhdXNlKCkKICAgICAgICByZXR1cm4gc2VsZi5nYW1lX3N0YXRlCgogICAgZGVmIHBvc3NpYmxlX2JpZHMoc2VsZik6CiAgICAgICAgZ2FtZSA9IEdhbWUoCiAgICAgICAgICAgIFtEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpXSwgc2VsZi5nYW1lX3N0YXRlCiAgICAgICAgKQogICAgICAgIGhhbmQgPSBnYW1lLnBsYXllcmxpc3RbMF0uaGFuZAogICAgICAgIG1vZGVfdG9fYmVhdCA9IGdhbWUuYmlkZGluZ19nYW1lLm1vZGVfdG9fYmVhdAogICAgICAgIHBvc3NpYmxlX21vZGVzID0gbGlzdChnYW1lLmJpZGRpbmdfZ2FtZS5kZXRlcm1pbmVfcG9zc2libGVfZ2FtZV9tb2RlcyhoYW5kPWhhbmQsIG1vZGVfdG9fYmVhdD1tb2RlX3RvX2JlYXQpKQogICAgICAgIHBvc3NpYmxlX21vZGVzLnNvcnQoKQogICAgICAgIHJldHVybiBwb3NzaWJsZV9tb2RlcwoKICAgIGRlZiBwb3NzaWJsZV9jYXJkcyhzZWxmKToKICAgICAgICBnYW1lID0gR2FtZSgKICAgICAgICAgICAgW0R1bW15UGxheWVyKCksIER1bW15UGxheWVyKCksIER1bW15UGxheWVyKCksIER1bW15UGxheWVyKCldLCBzZWxmLmdhbWVfc3RhdGUKICAgICAgICApCiAgICAgICAgaGFuZCA9IGdhbWUucGxheWVybGlzdFswXS5oYW5kCiAgICAgICAgY3VycmVudF90cmljayA9IHNlbGYuZ2FtZV9zdGF0ZVsiY3VycmVudF90cmljayJdCiAgICAgICAgcmV0dXJuIGdhbWUudHJpY2tfZ2FtZS5wb3NzaWJsZV9jYXJkcyhjdXJyZW50X3RyaWNrLCBoYW5kKQoKICAgIGRlZiBiaWRkaW5nX2lzX2ZpbmlzaGVkKHNlbGYpOgogICAgICAgIHJldHVybiBHYW1lKAo8fGZpbV9ob2xlfD4KICAgICAgICApLmJpZGRpbmdfZ2FtZS5maW5pc2hlZCgpCgogICAgZGVmIGZpbmlzaGVkKHNlbGYpOgogICAgICAgIHJldHVybiBHYW1lKAogICAgICAgICAgICBbRHVtbXlQbGF5ZXIoKSwgRHVtbXlQbGF5ZXIoKSwgRHVtbXlQbGF5ZXIoKSwgRHVtbXlQbGF5ZXIoKV0sIHNlbGYuZ2FtZV9zdGF0ZQogICAgICAgICkuZmluaXNoZWQoKQoKICAgIGRlZiBnZXRfcmVzdWx0cyhzZWxmKSAtPiBHYW1lUmVzdWx0OgogICAgICAgIGdhbWUgPSBHYW1lKAogICAgICAgICAgICBbRHVtbXlQbGF5ZXIoKSwgRHVtbXlQbGF5ZXIoKSwgRHVtbXlQbGF5ZXIoKSwgRHVtbXlQbGF5ZXIoKV0sIHNlbGYuZ2FtZV9zdGF0ZQogICAgICAgICkKICAgICAgICBpZiBub3QgZ2FtZS5maW5pc2hlZCgpOgogICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIk5vIHJlc3VsdHMgeWV0IikKICAgICAgICBpZiBzZWxmLmdhbWVfc3RhdGVbImdhbWVfbW9kZSJdWzBdID09IE5PX0dBTUU6CiAgICAgICAgICAgIHJldHVybiBHYW1lUmVzdWx0KAogICAgICAgICAgICAgICAgcGF5b3V0cz0oMCwgMCwgMCwgMCksCiAgICAgICAgICAgICAgICB3aW5uZXJzPVtdLAogICAgICAgICAgICAgICAgZGVjbGFyaW5nX3BsYXllcj1Ob25lLAogICAgICAgICAgICAgICAgZ2FtZV9tb2RlPXNlbGYuZ2FtZV9zdGF0ZVsiZ2FtZV9tb2RlIl0sCiAgICAgICAgICAgICAgICBvZmZlbnNpdmVfcGxheWVycz1bXSwKICAgICAgICAgICAgICAgIG9mZmVuc2l2ZV9wb2ludHM9MAogICAgICAgICAgICApCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIEdhbWVSZXN1bHQoCiAgICAgICAgICAgICAgICBwYXlvdXRzPXR1cGxlKGdhbWUuZ2V0X3BheW91dHMoKSksCiAgICAgICAgICAgICAgICB3aW5uZXJzPWdhbWUuZGV0ZXJtaW5lX3dpbm5lcnMoKSwKICAgICAgICAgICAgICAgIGRlY2xhcmluZ19wbGF5ZXI9c2VsZi5nYW1lX3N0YXRlWyJkZWNsYXJpbmdfcGxheWVyIl0sCiAgICAgICAgICAgICAgICBnYW1lX21vZGU9c2VsZi5nYW1lX3N0YXRlWyJnYW1lX21vZGUiXSwKICAgICAgICAgICAgICAgIG9mZmVuc2l2ZV9wbGF5ZXJzPWdhbWUudHJpY2tfZ2FtZS5vZmZlbnNpdmVfcGxheWVycywKICAgICAgICAgICAgICAgIG9mZmVuc2l2ZV9wb2ludHM9Z2FtZS5zY29yZV9vZmZlbnNpdmVfcGxheWVycygpCiAgICAgICAgICAgICkKCiAgICBkZWYgX25ld19nYW1lX3N0YXRlKHNlbGYsIGxlYWRpbmdfcGxheWVyX2luZGV4KToKICAgICAgICBnYW1lX3N0YXRlID0gewogICAgICAgICAgICAncGxheWVyX2hhbmRzJzogW3NvcnRfaGFuZChoKSBmb3IgaCBpbiBzZWxmLl9yYW5kb21fcGxheWVyX2hhbmRzKCldLAogICAgICAgICAgICAnbGVhZGluZ19wbGF5ZXJfaW5kZXgnOiBsZWFkaW5nX3BsYXllcl9pbmRleCwKICAgICAgICAgICAgJ2N1cnJlbnRfcGxheWVyX2luZGV4JzogbGVhZGluZ19wbGF5ZXJfaW5kZXgsCiAgICAgICAgICAgICdtb2RlX3Byb3Bvc2Fscyc6IFtdLAogICAgICAgICAgICAnZ2FtZV9tb2RlJzogKE5PX0dBTUUsIE5vbmUpLAogICAgICAgICAgICAndHJ1bXBjYXJkcyc6IFtdLAogICAgICAgICAgICAnZGVjbGFyaW5nX3BsYXllcic6IE5vbmUsCiAgICAgICAgICAgICd0cmlja3MnOiBbXSwKICAgICAgICAgICAgJ2N1cnJlbnRfdHJpY2snOiBOb25lCiAgICAgICAgfQogICAgICAgIHJldHVybiBnYW1lX3N0YXRlCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIF9yYW5kb21fcGxheWVyX2hhbmRzKCk6CiAgICAgICAgcmV0dXJuIENhcmREZWNrKCkuc2h1ZmZsZV9hbmRfZGVhbF9oYW5kcygpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIFtEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpXSwgc2VsZi5nYW1lX3N0YXRlCjx8ZmltX2VuZHw+"]
["418633961fe6eff1dc783392083d1be51a351caa-3","418633961fe6eff1dc783392083d1be51a351caa","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QsIFR1cGxlLCBVbmlvbgoKPHxmaW1faG9sZXw+CmZyb20gc2NoYWZrb3BmLnBsYXllcnMgaW1wb3J0IEhldXJpc3RpY3NQbGF5ZXIsIER1bW15UGxheWVyCmZyb20gc2NoYWZrb3BmLnB5Z2FtZV9ndWkuR2FtZVJlc3VsdCBpbXBvcnQgR2FtZVJlc3VsdApmcm9tIHNjaGFma29wZi50cmljayBpbXBvcnQgVHJpY2sKCgpjbGFzcyBTY2hhZmtvcGZHYW1lOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGxlYWRpbmdfcGxheWVyX2luZGV4KToKICAgICAgICBzZWxmLnBsYXllcnMgPSBbRHVtbXlQbGF5ZXIoKSwgSGV1cmlzdGljc1BsYXllcigpLCBIZXVyaXN0aWNzUGxheWVyKCksIEhldXJpc3RpY3NQbGF5ZXIoKV0KICAgICAgICBzZWxmLmdhbWVfc3RhdGUgPSBzZWxmLl9uZXdfZ2FtZV9zdGF0ZShsZWFkaW5nX3BsYXllcl9pbmRleCkKICAgICAgICBzZWxmLnBhdXNlZF9vbl9sYXN0X3RyaWNrID0gRmFsc2UKCiAgICBkZWYgaHVtYW5fcGxheWVyc190dXJuKHNlbGYpIC0+IGJvb2w6CiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsiY3VycmVudF9wbGF5ZXJfaW5kZXgiXSA9PSAwCgogICAgZGVmIG5vX2NhcmRzX2luX2N1cnJlbnRfdHJpY2soc2VsZikgLT4gYm9vbDoKICAgICAgICBjdXJyZW50X3RyaWNrID0gc2VsZi5nYW1lX3N0YXRlWyJjdXJyZW50X3RyaWNrIl0KICAgICAgICBpZiBjdXJyZW50X3RyaWNrIGlzIE5vbmU6CiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIGxlbihbYyBmb3IgYyBpbiBjdXJyZW50X3RyaWNrLmNhcmRzIGlmIGMgaXMgbm90IE5vbmVdKSA9PSAwCgogICAgZGVmIGdldF9wbGF5ZXJfaGFuZChzZWxmKSAtPiBMaXN0W1R1cGxlW2ludCwgaW50XV06CiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsicGxheWVyX2hhbmRzIl1bMF0KCiAgICBkZWYgZ2V0X21vZGVfcHJvcG9zYWxzKHNlbGYpIC0+IExpc3RbVHVwbGVbaW50LCBVbmlvbltpbnQsIE5vbmVdXV06CiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsibW9kZV9wcm9wb3NhbHMiXQoKICAgIGRlZiBnZXRfZGVjbGFyaW5nX3BsYXllcihzZWxmKSAtPiBVbmlvbltpbnQsIE5vbmVdOgogICAgICAgIHJldHVybiBzZWxmLmdhbWVfc3RhdGVbImRlY2xhcmluZ19wbGF5ZXIiXQoKICAgIGRlZiBnZXRfZ2FtZV9tb2RlKHNlbGYpIC0+IFR1cGxlW2ludCwgVW5pb25baW50LCBOb25lXV06CiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsiZ2FtZV9tb2RlIl0KCiAgICBkZWYgZ2V0X29wcG9uZW50X2hhbmRzKHNlbGYpIC0+IExpc3RbTGlzdFtUdXBsZVtpbnQsIGludF1dXToKICAgICAgICByZXR1cm4gc2VsZi5nYW1lX3N0YXRlWyJwbGF5ZXJfaGFuZHMiXVsxOjRdCgogICAgZGVmIGdldF9jdXJyZW50X3RyaWNrKHNlbGYpIC0+IExpc3RbVW5pb25bVHVwbGVbaW50LCBpbnRdLCBOb25lXV06CiAgICAgICAgY3VycmVudF90cmljazogVW5pb25bVHJpY2ssIE5vbmVdID0gc2VsZi5nYW1lX3N0YXRlWyJjdXJyZW50X3RyaWNrIl0KICAgICAgICBpZiBjdXJyZW50X3RyaWNrIGlzIG5vdCBOb25lOgogICAgICAgICAgICBpZiBzZWxmLnBhdXNlZF9vbl9sYXN0X3RyaWNrOgogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsidHJpY2tzIl1bLTFdLmNhcmRzCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudF90cmljay5jYXJkcwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBbXQoKICAgIGRlZiBhdF9sZWFzdF9vbmVfcHJldmlvdXNfdHJpY2soc2VsZikgLT4gYm9vbDoKICAgICAgICByZXR1cm4gbGVuKHNlbGYuZ2FtZV9zdGF0ZVsidHJpY2tzIl0pID4gMAoKICAgIGRlZiBwYXVzZShzZWxmKToKICAgICAgICBzZWxmLnBhdXNlZF9vbl9sYXN0X3RyaWNrID0gVHJ1ZQoKICAgIGRlZiB1bnBhdXNlKHNlbGYpOgogICAgICAgIHNlbGYucGF1c2VkX29uX2xhc3RfdHJpY2sgPSBGYWxzZQoKICAgIGRlZiBuZXh0X2h1bWFuX2JpZChzZWxmLCBuZXh0X2FjdGlvbik6CiAgICAgICAgcGxheWVycyA9IFtEdW1teVBsYXllcihmYXZvcml0ZV9tb2RlPW5leHRfYWN0aW9uKSwgSGV1cmlzdGljc1BsYXllcigpLCBIZXVyaXN0aWNzUGxheWVyKCksIEhldXJpc3RpY3NQbGF5ZXIoKV0KICAgICAgICBnYW1lID0gR2FtZShwbGF5ZXJzLCBzZWxmLmdhbWVfc3RhdGUpCiAgICAgICAgZ2FtZS5uZXh0X2FjdGlvbigpCiAgICAgICAgc2VsZi5nYW1lX3N0YXRlID0gZ2FtZS5nZXRfZ2FtZV9zdGF0ZSgpCiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZQoKICAgIGRlZiBuZXh0X2h1bWFuX2NhcmQoc2VsZiwgbmV4dF9hY3Rpb24pOgogICAgICAgIGlmIG5vdCBzZWxmLmdhbWVfc3RhdGVbImN1cnJlbnRfcGxheWVyX2luZGV4Il0gPT0gMDoKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm90IGh1bWFuIHBsYXllcnMgdHVybiIpCiAgICAgICAgcG9zc2libGVfY2FyZHMgPSBzZWxmLnBvc3NpYmxlX2NhcmRzKCkKICAgICAgICBpZiBuZXh0X2FjdGlvbiBpbiBwb3NzaWJsZV9jYXJkczoKICAgICAgICAgICAgcGxheWVycyA9IFtEdW1teVBsYXllcihmYXZvcml0ZV9jYXJkcz1bbmV4dF9hY3Rpb25dKSwgSGV1cmlzdGljc1BsYXllcigpLCBIZXVyaXN0aWNzUGxheWVyKCksCiAgICAgICAgICAgICAgICAgICAgICAgSGV1cmlzdGljc1BsYXllcigpXQogICAgICAgICAgICBnYW1lID0gR2FtZShwbGF5ZXJzLCBzZWxmLmdhbWVfc3RhdGUpCiAgICAgICAgICAgIGdhbWUubmV4dF9hY3Rpb24oKQogICAgICAgICAgICBzZWxmLmdhbWVfc3RhdGUgPSBnYW1lLmdldF9nYW1lX3N0YXRlKCkKICAgICAgICAgICAgaWYgc2VsZi5hdF9sZWFzdF9vbmVfcHJldmlvdXNfdHJpY2soKSBhbmQgc2VsZi5ub19jYXJkc19pbl9jdXJyZW50X3RyaWNrKCk6CiAgICAgICAgICAgICAgICBzZWxmLnBhdXNlKCkKICAgICAgICByZXR1cm4gc2VsZi5nYW1lX3N0YXRlCgogICAgZGVmIG5leHRfYWN0aW9uKHNlbGYpOgogICAgICAgIGdhbWUgPSBHYW1lKHNlbGYucGxheWVycywgc2VsZi5nYW1lX3N0YXRlKQogICAgICAgIGdhbWUubmV4dF9hY3Rpb24oKQogICAgICAgIHNlbGYuZ2FtZV9zdGF0ZSA9IGdhbWUuZ2V0X2dhbWVfc3RhdGUoKQogICAgICAgIGlmIHNlbGYuYXRfbGVhc3Rfb25lX3ByZXZpb3VzX3RyaWNrKCkgYW5kIHNlbGYubm9fY2FyZHNfaW5fY3VycmVudF90cmljaygpOgogICAgICAgICAgICBzZWxmLnBhdXNlKCkKICAgICAgICByZXR1cm4gc2VsZi5nYW1lX3N0YXRlCgogICAgZGVmIHBvc3NpYmxlX2JpZHMoc2VsZik6CiAgICAgICAgZ2FtZSA9IEdhbWUoCiAgICAgICAgICAgIFtEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpXSwgc2VsZi5nYW1lX3N0YXRlCiAgICAgICAgKQogICAgICAgIGhhbmQgPSBnYW1lLnBsYXllcmxpc3RbMF0uaGFuZAogICAgICAgIG1vZGVfdG9fYmVhdCA9IGdhbWUuYmlkZGluZ19nYW1lLm1vZGVfdG9fYmVhdAogICAgICAgIHBvc3NpYmxlX21vZGVzID0gbGlzdChnYW1lLmJpZGRpbmdfZ2FtZS5kZXRlcm1pbmVfcG9zc2libGVfZ2FtZV9tb2RlcyhoYW5kPWhhbmQsIG1vZGVfdG9fYmVhdD1tb2RlX3RvX2JlYXQpKQogICAgICAgIHBvc3NpYmxlX21vZGVzLnNvcnQoKQogICAgICAgIHJldHVybiBwb3NzaWJsZV9tb2RlcwoKICAgIGRlZiBwb3NzaWJsZV9jYXJkcyhzZWxmKToKICAgICAgICBnYW1lID0gR2FtZSgKICAgICAgICAgICAgW0R1bW15UGxheWVyKCksIER1bW15UGxheWVyKCksIER1bW15UGxheWVyKCksIER1bW15UGxheWVyKCldLCBzZWxmLmdhbWVfc3RhdGUKICAgICAgICApCiAgICAgICAgaGFuZCA9IGdhbWUucGxheWVybGlzdFswXS5oYW5kCiAgICAgICAgY3VycmVudF90cmljayA9IHNlbGYuZ2FtZV9zdGF0ZVsiY3VycmVudF90cmljayJdCiAgICAgICAgcmV0dXJuIGdhbWUudHJpY2tfZ2FtZS5wb3NzaWJsZV9jYXJkcyhjdXJyZW50X3RyaWNrLCBoYW5kKQoKICAgIGRlZiBiaWRkaW5nX2lzX2ZpbmlzaGVkKHNlbGYpOgogICAgICAgIHJldHVybiBHYW1lKAogICAgICAgICAgICBbRHVtbXlQbGF5ZXIoKSwgRHVtbXlQbGF5ZXIoKSwgRHVtbXlQbGF5ZXIoKSwgRHVtbXlQbGF5ZXIoKV0sIHNlbGYuZ2FtZV9zdGF0ZQogICAgICAgICkuYmlkZGluZ19nYW1lLmZpbmlzaGVkKCkKCiAgICBkZWYgZmluaXNoZWQoc2VsZik6CiAgICAgICAgcmV0dXJuIEdhbWUoCiAgICAgICAgICAgIFtEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpXSwgc2VsZi5nYW1lX3N0YXRlCiAgICAgICAgKS5maW5pc2hlZCgpCgogICAgZGVmIGdldF9yZXN1bHRzKHNlbGYpIC0+IEdhbWVSZXN1bHQ6CiAgICAgICAgZ2FtZSA9IEdhbWUoCiAgICAgICAgICAgIFtEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpXSwgc2VsZi5nYW1lX3N0YXRlCiAgICAgICAgKQogICAgICAgIGlmIG5vdCBnYW1lLmZpbmlzaGVkKCk6CiAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiTm8gcmVzdWx0cyB5ZXQiKQogICAgICAgIGlmIHNlbGYuZ2FtZV9zdGF0ZVsiZ2FtZV9tb2RlIl1bMF0gPT0gTk9fR0FNRToKICAgICAgICAgICAgcmV0dXJuIEdhbWVSZXN1bHQoCiAgICAgICAgICAgICAgICBwYXlvdXRzPSgwLCAwLCAwLCAwKSwKICAgICAgICAgICAgICAgIHdpbm5lcnM9W10sCiAgICAgICAgICAgICAgICBkZWNsYXJpbmdfcGxheWVyPU5vbmUsCiAgICAgICAgICAgICAgICBnYW1lX21vZGU9c2VsZi5nYW1lX3N0YXRlWyJnYW1lX21vZGUiXSwKICAgICAgICAgICAgICAgIG9mZmVuc2l2ZV9wbGF5ZXJzPVtdLAogICAgICAgICAgICAgICAgb2ZmZW5zaXZlX3BvaW50cz0wCiAgICAgICAgICAgICkKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gR2FtZVJlc3VsdCgKICAgICAgICAgICAgICAgIHBheW91dHM9dHVwbGUoZ2FtZS5nZXRfcGF5b3V0cygpKSwKICAgICAgICAgICAgICAgIHdpbm5lcnM9Z2FtZS5kZXRlcm1pbmVfd2lubmVycygpLAogICAgICAgICAgICAgICAgZGVjbGFyaW5nX3BsYXllcj1zZWxmLmdhbWVfc3RhdGVbImRlY2xhcmluZ19wbGF5ZXIiXSwKICAgICAgICAgICAgICAgIGdhbWVfbW9kZT1zZWxmLmdhbWVfc3RhdGVbImdhbWVfbW9kZSJdLAogICAgICAgICAgICAgICAgb2ZmZW5zaXZlX3BsYXllcnM9Z2FtZS50cmlja19nYW1lLm9mZmVuc2l2ZV9wbGF5ZXJzLAogICAgICAgICAgICAgICAgb2ZmZW5zaXZlX3BvaW50cz1nYW1lLnNjb3JlX29mZmVuc2l2ZV9wbGF5ZXJzKCkKICAgICAgICAgICAgKQoKICAgIGRlZiBfbmV3X2dhbWVfc3RhdGUoc2VsZiwgbGVhZGluZ19wbGF5ZXJfaW5kZXgpOgogICAgICAgIGdhbWVfc3RhdGUgPSB7CiAgICAgICAgICAgICdwbGF5ZXJfaGFuZHMnOiBbc29ydF9oYW5kKGgpIGZvciBoIGluIHNlbGYuX3JhbmRvbV9wbGF5ZXJfaGFuZHMoKV0sCiAgICAgICAgICAgICdsZWFkaW5nX3BsYXllcl9pbmRleCc6IGxlYWRpbmdfcGxheWVyX2luZGV4LAogICAgICAgICAgICAnY3VycmVudF9wbGF5ZXJfaW5kZXgnOiBsZWFkaW5nX3BsYXllcl9pbmRleCwKICAgICAgICAgICAgJ21vZGVfcHJvcG9zYWxzJzogW10sCiAgICAgICAgICAgICdnYW1lX21vZGUnOiAoTk9fR0FNRSwgTm9uZSksCiAgICAgICAgICAgICd0cnVtcGNhcmRzJzogW10sCiAgICAgICAgICAgICdkZWNsYXJpbmdfcGxheWVyJzogTm9uZSwKICAgICAgICAgICAgJ3RyaWNrcyc6IFtdLAogICAgICAgICAgICAnY3VycmVudF90cmljayc6IE5vbmUKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGdhbWVfc3RhdGUKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgX3JhbmRvbV9wbGF5ZXJfaGFuZHMoKToKICAgICAgICByZXR1cm4gQ2FyZERlY2soKS5zaHVmZmxlX2FuZF9kZWFsX2hhbmRzKCkKPHxmaW1fc3VmZml4fD4KZnJvbSBzY2hhZmtvcGYuY2FyZF9kZWNrIGltcG9ydCBDYXJkRGVjawpmcm9tIHNjaGFma29wZi5nYW1lIGltcG9ydCBHYW1lCmZyb20gc2NoYWZrb3BmLmdhbWVfbW9kZXMgaW1wb3J0IE5PX0dBTUUKZnJvbSBzY2hhZmtvcGYuaGVscGVycyBpbXBvcnQgc29ydF9oYW5kCjx8ZmltX2VuZHw+"]
["418633961fe6eff1dc783392083d1be51a351caa-4","418633961fe6eff1dc783392083d1be51a351caa","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QsIFR1cGxlLCBVbmlvbgoKZnJvbSBzY2hhZmtvcGYuY2FyZF9kZWNrIGltcG9ydCBDYXJkRGVjawpmcm9tIHNjaGFma29wZi5nYW1lIGltcG9ydCBHYW1lCmZyb20gc2NoYWZrb3BmLmdhbWVfbW9kZXMgaW1wb3J0IE5PX0dBTUUKZnJvbSBzY2hhZmtvcGYuaGVscGVycyBpbXBvcnQgc29ydF9oYW5kCmZyb20gc2NoYWZrb3BmLnBsYXllcnMgaW1wb3J0IEhldXJpc3RpY3NQbGF5ZXIsIER1bW15UGxheWVyCmZyb20gc2NoYWZrb3BmLnB5Z2FtZV9ndWkuR2FtZVJlc3VsdCBpbXBvcnQgR2FtZVJlc3VsdApmcm9tIHNjaGFma29wZi50cmljayBpbXBvcnQgVHJpY2sKCgpjbGFzcyBTY2hhZmtvcGZHYW1lOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGxlYWRpbmdfcGxheWVyX2luZGV4KToKICAgICAgICBzZWxmLnBsYXllcnMgPSBbRHVtbXlQbGF5ZXIoKSwgSGV1cmlzdGljc1BsYXllcigpLCBIZXVyaXN0aWNzUGxheWVyKCksIEhldXJpc3RpY3NQbGF5ZXIoKV0KICAgICAgICBzZWxmLmdhbWVfc3RhdGUgPSBzZWxmLl9uZXdfZ2FtZV9zdGF0ZShsZWFkaW5nX3BsYXllcl9pbmRleCkKICAgICAgICBzZWxmLnBhdXNlZF9vbl9sYXN0X3RyaWNrID0gRmFsc2UKCiAgICBkZWYgaHVtYW5fcGxheWVyc190dXJuKHNlbGYpIC0+IGJvb2w6CiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsiY3VycmVudF9wbGF5ZXJfaW5kZXgiXSA9PSAwCgogICAgZGVmIG5vX2NhcmRzX2luX2N1cnJlbnRfdHJpY2soc2VsZikgLT4gYm9vbDoKICAgICAgICBjdXJyZW50X3RyaWNrID0gc2VsZi5nYW1lX3N0YXRlWyJjdXJyZW50X3RyaWNrIl0KICAgICAgICBpZiBjdXJyZW50X3RyaWNrIGlzIE5vbmU6CiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIGxlbihbYyBmb3IgYyBpbiBjdXJyZW50X3RyaWNrLmNhcmRzIGlmIGMgaXMgbm90IE5vbmVdKSA9PSAwCgogICAgZGVmIGdldF9wbGF5ZXJfaGFuZChzZWxmKSAtPiBMaXN0W1R1cGxlW2ludCwgaW50XV06CiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsicGxheWVyX2hhbmRzIl1bMF0KCiAgICBkZWYgZ2V0X21vZGVfcHJvcG9zYWxzKHNlbGYpIC0+IExpc3RbVHVwbGVbaW50LCBVbmlvbltpbnQsIE5vbmVdXV06CiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsibW9kZV9wcm9wb3NhbHMiXQoKICAgIGRlZiBnZXRfZGVjbGFyaW5nX3BsYXllcihzZWxmKSAtPiBVbmlvbltpbnQsIE5vbmVdOgogICAgICAgIHJldHVybiBzZWxmLmdhbWVfc3RhdGVbImRlY2xhcmluZ19wbGF5ZXIiXQoKICAgIGRlZiBnZXRfZ2FtZV9tb2RlKHNlbGYpIC0+IFR1cGxlW2ludCwgVW5pb25baW50LCBOb25lXV06CiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsiZ2FtZV9tb2RlIl0KCiAgICBkZWYgZ2V0X29wcG9uZW50X2hhbmRzKHNlbGYpIC0+IExpc3RbTGlzdFtUdXBsZVtpbnQsIGludF1dXToKICAgICAgICByZXR1cm4gc2VsZi5nYW1lX3N0YXRlWyJwbGF5ZXJfaGFuZHMiXVsxOjRdCgogICAgZGVmIGdldF9jdXJyZW50X3RyaWNrKHNlbGYpIC0+IExpc3RbVW5pb25bVHVwbGVbaW50LCBpbnRdLCBOb25lXV06CiAgICAgICAgY3VycmVudF90cmljazogVW5pb25bVHJpY2ssIE5vbmVdID0gc2VsZi5nYW1lX3N0YXRlWyJjdXJyZW50X3RyaWNrIl0KPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudF90cmljay5jYXJkcwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBbXQoKICAgIGRlZiBhdF9sZWFzdF9vbmVfcHJldmlvdXNfdHJpY2soc2VsZikgLT4gYm9vbDoKICAgICAgICByZXR1cm4gbGVuKHNlbGYuZ2FtZV9zdGF0ZVsidHJpY2tzIl0pID4gMAoKICAgIGRlZiBwYXVzZShzZWxmKToKICAgICAgICBzZWxmLnBhdXNlZF9vbl9sYXN0X3RyaWNrID0gVHJ1ZQoKICAgIGRlZiB1bnBhdXNlKHNlbGYpOgogICAgICAgIHNlbGYucGF1c2VkX29uX2xhc3RfdHJpY2sgPSBGYWxzZQoKICAgIGRlZiBuZXh0X2h1bWFuX2JpZChzZWxmLCBuZXh0X2FjdGlvbik6CiAgICAgICAgcGxheWVycyA9IFtEdW1teVBsYXllcihmYXZvcml0ZV9tb2RlPW5leHRfYWN0aW9uKSwgSGV1cmlzdGljc1BsYXllcigpLCBIZXVyaXN0aWNzUGxheWVyKCksIEhldXJpc3RpY3NQbGF5ZXIoKV0KICAgICAgICBnYW1lID0gR2FtZShwbGF5ZXJzLCBzZWxmLmdhbWVfc3RhdGUpCiAgICAgICAgZ2FtZS5uZXh0X2FjdGlvbigpCiAgICAgICAgc2VsZi5nYW1lX3N0YXRlID0gZ2FtZS5nZXRfZ2FtZV9zdGF0ZSgpCiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZQoKICAgIGRlZiBuZXh0X2h1bWFuX2NhcmQoc2VsZiwgbmV4dF9hY3Rpb24pOgogICAgICAgIGlmIG5vdCBzZWxmLmdhbWVfc3RhdGVbImN1cnJlbnRfcGxheWVyX2luZGV4Il0gPT0gMDoKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm90IGh1bWFuIHBsYXllcnMgdHVybiIpCiAgICAgICAgcG9zc2libGVfY2FyZHMgPSBzZWxmLnBvc3NpYmxlX2NhcmRzKCkKICAgICAgICBpZiBuZXh0X2FjdGlvbiBpbiBwb3NzaWJsZV9jYXJkczoKICAgICAgICAgICAgcGxheWVycyA9IFtEdW1teVBsYXllcihmYXZvcml0ZV9jYXJkcz1bbmV4dF9hY3Rpb25dKSwgSGV1cmlzdGljc1BsYXllcigpLCBIZXVyaXN0aWNzUGxheWVyKCksCiAgICAgICAgICAgICAgICAgICAgICAgSGV1cmlzdGljc1BsYXllcigpXQogICAgICAgICAgICBnYW1lID0gR2FtZShwbGF5ZXJzLCBzZWxmLmdhbWVfc3RhdGUpCiAgICAgICAgICAgIGdhbWUubmV4dF9hY3Rpb24oKQogICAgICAgICAgICBzZWxmLmdhbWVfc3RhdGUgPSBnYW1lLmdldF9nYW1lX3N0YXRlKCkKICAgICAgICAgICAgaWYgc2VsZi5hdF9sZWFzdF9vbmVfcHJldmlvdXNfdHJpY2soKSBhbmQgc2VsZi5ub19jYXJkc19pbl9jdXJyZW50X3RyaWNrKCk6CiAgICAgICAgICAgICAgICBzZWxmLnBhdXNlKCkKICAgICAgICByZXR1cm4gc2VsZi5nYW1lX3N0YXRlCgogICAgZGVmIG5leHRfYWN0aW9uKHNlbGYpOgogICAgICAgIGdhbWUgPSBHYW1lKHNlbGYucGxheWVycywgc2VsZi5nYW1lX3N0YXRlKQogICAgICAgIGdhbWUubmV4dF9hY3Rpb24oKQogICAgICAgIHNlbGYuZ2FtZV9zdGF0ZSA9IGdhbWUuZ2V0X2dhbWVfc3RhdGUoKQogICAgICAgIGlmIHNlbGYuYXRfbGVhc3Rfb25lX3ByZXZpb3VzX3RyaWNrKCkgYW5kIHNlbGYubm9fY2FyZHNfaW5fY3VycmVudF90cmljaygpOgogICAgICAgICAgICBzZWxmLnBhdXNlKCkKICAgICAgICByZXR1cm4gc2VsZi5nYW1lX3N0YXRlCgogICAgZGVmIHBvc3NpYmxlX2JpZHMoc2VsZik6CiAgICAgICAgZ2FtZSA9IEdhbWUoCiAgICAgICAgICAgIFtEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpXSwgc2VsZi5nYW1lX3N0YXRlCiAgICAgICAgKQogICAgICAgIGhhbmQgPSBnYW1lLnBsYXllcmxpc3RbMF0uaGFuZAogICAgICAgIG1vZGVfdG9fYmVhdCA9IGdhbWUuYmlkZGluZ19nYW1lLm1vZGVfdG9fYmVhdAogICAgICAgIHBvc3NpYmxlX21vZGVzID0gbGlzdChnYW1lLmJpZGRpbmdfZ2FtZS5kZXRlcm1pbmVfcG9zc2libGVfZ2FtZV9tb2RlcyhoYW5kPWhhbmQsIG1vZGVfdG9fYmVhdD1tb2RlX3RvX2JlYXQpKQogICAgICAgIHBvc3NpYmxlX21vZGVzLnNvcnQoKQogICAgICAgIHJldHVybiBwb3NzaWJsZV9tb2RlcwoKICAgIGRlZiBwb3NzaWJsZV9jYXJkcyhzZWxmKToKICAgICAgICBnYW1lID0gR2FtZSgKICAgICAgICAgICAgW0R1bW15UGxheWVyKCksIER1bW15UGxheWVyKCksIER1bW15UGxheWVyKCksIER1bW15UGxheWVyKCldLCBzZWxmLmdhbWVfc3RhdGUKICAgICAgICApCiAgICAgICAgaGFuZCA9IGdhbWUucGxheWVybGlzdFswXS5oYW5kCiAgICAgICAgY3VycmVudF90cmljayA9IHNlbGYuZ2FtZV9zdGF0ZVsiY3VycmVudF90cmljayJdCiAgICAgICAgcmV0dXJuIGdhbWUudHJpY2tfZ2FtZS5wb3NzaWJsZV9jYXJkcyhjdXJyZW50X3RyaWNrLCBoYW5kKQoKICAgIGRlZiBiaWRkaW5nX2lzX2ZpbmlzaGVkKHNlbGYpOgogICAgICAgIHJldHVybiBHYW1lKAogICAgICAgICAgICBbRHVtbXlQbGF5ZXIoKSwgRHVtbXlQbGF5ZXIoKSwgRHVtbXlQbGF5ZXIoKSwgRHVtbXlQbGF5ZXIoKV0sIHNlbGYuZ2FtZV9zdGF0ZQogICAgICAgICkuYmlkZGluZ19nYW1lLmZpbmlzaGVkKCkKCiAgICBkZWYgZmluaXNoZWQoc2VsZik6CiAgICAgICAgcmV0dXJuIEdhbWUoCiAgICAgICAgICAgIFtEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpXSwgc2VsZi5nYW1lX3N0YXRlCiAgICAgICAgKS5maW5pc2hlZCgpCgogICAgZGVmIGdldF9yZXN1bHRzKHNlbGYpIC0+IEdhbWVSZXN1bHQ6CiAgICAgICAgZ2FtZSA9IEdhbWUoCiAgICAgICAgICAgIFtEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpLCBEdW1teVBsYXllcigpXSwgc2VsZi5nYW1lX3N0YXRlCiAgICAgICAgKQogICAgICAgIGlmIG5vdCBnYW1lLmZpbmlzaGVkKCk6CiAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiTm8gcmVzdWx0cyB5ZXQiKQogICAgICAgIGlmIHNlbGYuZ2FtZV9zdGF0ZVsiZ2FtZV9tb2RlIl1bMF0gPT0gTk9fR0FNRToKICAgICAgICAgICAgcmV0dXJuIEdhbWVSZXN1bHQoCiAgICAgICAgICAgICAgICBwYXlvdXRzPSgwLCAwLCAwLCAwKSwKICAgICAgICAgICAgICAgIHdpbm5lcnM9W10sCiAgICAgICAgICAgICAgICBkZWNsYXJpbmdfcGxheWVyPU5vbmUsCiAgICAgICAgICAgICAgICBnYW1lX21vZGU9c2VsZi5nYW1lX3N0YXRlWyJnYW1lX21vZGUiXSwKICAgICAgICAgICAgICAgIG9mZmVuc2l2ZV9wbGF5ZXJzPVtdLAogICAgICAgICAgICAgICAgb2ZmZW5zaXZlX3BvaW50cz0wCiAgICAgICAgICAgICkKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gR2FtZVJlc3VsdCgKICAgICAgICAgICAgICAgIHBheW91dHM9dHVwbGUoZ2FtZS5nZXRfcGF5b3V0cygpKSwKICAgICAgICAgICAgICAgIHdpbm5lcnM9Z2FtZS5kZXRlcm1pbmVfd2lubmVycygpLAogICAgICAgICAgICAgICAgZGVjbGFyaW5nX3BsYXllcj1zZWxmLmdhbWVfc3RhdGVbImRlY2xhcmluZ19wbGF5ZXIiXSwKICAgICAgICAgICAgICAgIGdhbWVfbW9kZT1zZWxmLmdhbWVfc3RhdGVbImdhbWVfbW9kZSJdLAogICAgICAgICAgICAgICAgb2ZmZW5zaXZlX3BsYXllcnM9Z2FtZS50cmlja19nYW1lLm9mZmVuc2l2ZV9wbGF5ZXJzLAogICAgICAgICAgICAgICAgb2ZmZW5zaXZlX3BvaW50cz1nYW1lLnNjb3JlX29mZmVuc2l2ZV9wbGF5ZXJzKCkKICAgICAgICAgICAgKQoKICAgIGRlZiBfbmV3X2dhbWVfc3RhdGUoc2VsZiwgbGVhZGluZ19wbGF5ZXJfaW5kZXgpOgogICAgICAgIGdhbWVfc3RhdGUgPSB7CiAgICAgICAgICAgICdwbGF5ZXJfaGFuZHMnOiBbc29ydF9oYW5kKGgpIGZvciBoIGluIHNlbGYuX3JhbmRvbV9wbGF5ZXJfaGFuZHMoKV0sCiAgICAgICAgICAgICdsZWFkaW5nX3BsYXllcl9pbmRleCc6IGxlYWRpbmdfcGxheWVyX2luZGV4LAogICAgICAgICAgICAnY3VycmVudF9wbGF5ZXJfaW5kZXgnOiBsZWFkaW5nX3BsYXllcl9pbmRleCwKICAgICAgICAgICAgJ21vZGVfcHJvcG9zYWxzJzogW10sCiAgICAgICAgICAgICdnYW1lX21vZGUnOiAoTk9fR0FNRSwgTm9uZSksCiAgICAgICAgICAgICd0cnVtcGNhcmRzJzogW10sCiAgICAgICAgICAgICdkZWNsYXJpbmdfcGxheWVyJzogTm9uZSwKICAgICAgICAgICAgJ3RyaWNrcyc6IFtdLAogICAgICAgICAgICAnY3VycmVudF90cmljayc6IE5vbmUKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGdhbWVfc3RhdGUKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgX3JhbmRvbV9wbGF5ZXJfaGFuZHMoKToKICAgICAgICByZXR1cm4gQ2FyZERlY2soKS5zaHVmZmxlX2FuZF9kZWFsX2hhbmRzKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICBpZiBjdXJyZW50X3RyaWNrIGlzIG5vdCBOb25lOgogICAgICAgICAgICBpZiBzZWxmLnBhdXNlZF9vbl9sYXN0X3RyaWNrOgogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsidHJpY2tzIl1bLTFdLmNhcmRzCiAgICAgICAgICAgIGVsc2U6Cjx8ZmltX2VuZHw+"]
["418633961fe6eff1dc783392083d1be51a351caa-5","418633961fe6eff1dc783392083d1be51a351caa","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QsIFR1cGxlLCBVbmlvbgoKZnJvbSBzY2hhZmtvcGYuY2FyZF9kZWNrIGltcG9ydCBDYXJkRGVjawpmcm9tIHNjaGFma29wZi5nYW1lIGltcG9ydCBHYW1lCmZyb20gc2NoYWZrb3BmLmdhbWVfbW9kZXMgaW1wb3J0IE5PX0dBTUUKZnJvbSBzY2hhZmtvcGYuaGVscGVycyBpbXBvcnQgc29ydF9oYW5kCmZyb20gc2NoYWZrb3BmLnBsYXllcnMgaW1wb3J0IEhldXJpc3RpY3NQbGF5ZXIsIER1bW15UGxheWVyCmZyb20gc2NoYWZrb3BmLnB5Z2FtZV9ndWkuR2FtZVJlc3VsdCBpbXBvcnQgR2FtZVJlc3VsdApmcm9tIHNjaGFma29wZi50cmljayBpbXBvcnQgVHJpY2sKCgpjbGFzcyBTY2hhZmtvcGZHYW1lOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGxlYWRpbmdfcGxheWVyX2luZGV4KToKICAgICAgICBzZWxmLnBsYXllcnMgPSBbRHVtbXlQbGF5ZXIoKSwgSGV1cmlzdGljc1BsYXllcigpLCBIZXVyaXN0aWNzUGxheWVyKCksIEhldXJpc3RpY3NQbGF5ZXIoKV0KICAgICAgICBzZWxmLmdhbWVfc3RhdGUgPSBzZWxmLl9uZXdfZ2FtZV9zdGF0ZShsZWFkaW5nX3BsYXllcl9pbmRleCkKICAgICAgICBzZWxmLnBhdXNlZF9vbl9sYXN0X3RyaWNrID0gRmFsc2UKCiAgICBkZWYgaHVtYW5fcGxheWVyc190dXJuKHNlbGYpIC0+IGJvb2w6CiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsiY3VycmVudF9wbGF5ZXJfaW5kZXgiXSA9PSAwCgogICAgZGVmIG5vX2NhcmRzX2luX2N1cnJlbnRfdHJpY2soc2VsZikgLT4gYm9vbDoKICAgICAgICBjdXJyZW50X3RyaWNrID0gc2VsZi5nYW1lX3N0YXRlWyJjdXJyZW50X3RyaWNrIl0KICAgICAgICBpZiBjdXJyZW50X3RyaWNrIGlzIE5vbmU6CiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIGxlbihbYyBmb3IgYyBpbiBjdXJyZW50X3RyaWNrLmNhcmRzIGlmIGMgaXMgbm90IE5vbmVdKSA9PSAwCgogICAgZGVmIGdldF9wbGF5ZXJfaGFuZChzZWxmKSAtPiBMaXN0W1R1cGxlW2ludCwgaW50XV06CiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsicGxheWVyX2hhbmRzIl1bMF0KCiAgICBkZWYgZ2V0X21vZGVfcHJvcG9zYWxzKHNlbGYpIC0+IExpc3RbVHVwbGVbaW50LCBVbmlvbltpbnQsIE5vbmVdXV06CiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsibW9kZV9wcm9wb3NhbHMiXQoKICAgIGRlZiBnZXRfZGVjbGFyaW5nX3BsYXllcihzZWxmKSAtPiBVbmlvbltpbnQsIE5vbmVdOgogICAgICAgIHJldHVybiBzZWxmLmdhbWVfc3RhdGVbImRlY2xhcmluZ19wbGF5ZXIiXQoKICAgIGRlZiBnZXRfZ2FtZV9tb2RlKHNlbGYpIC0+IFR1cGxlW2ludCwgVW5pb25baW50LCBOb25lXV06CiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsiZ2FtZV9tb2RlIl0KCiAgICBkZWYgZ2V0X29wcG9uZW50X2hhbmRzKHNlbGYpIC0+IExpc3RbTGlzdFtUdXBsZVtpbnQsIGludF1dXToKICAgICAgICByZXR1cm4gc2VsZi5nYW1lX3N0YXRlWyJwbGF5ZXJfaGFuZHMiXVsxOjRdCgogICAgZGVmIGdldF9jdXJyZW50X3RyaWNrKHNlbGYpIC0+IExpc3RbVW5pb25bVHVwbGVbaW50LCBpbnRdLCBOb25lXV06CiAgICAgICAgY3VycmVudF90cmljazogVW5pb25bVHJpY2ssIE5vbmVdID0gc2VsZi5nYW1lX3N0YXRlWyJjdXJyZW50X3RyaWNrIl0KICAgICAgICBpZiBjdXJyZW50X3RyaWNrIGlzIG5vdCBOb25lOgogICAgICAgICAgICBpZiBzZWxmLnBhdXNlZF9vbl9sYXN0X3RyaWNrOgogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZVsidHJpY2tzIl1bLTFdLmNhcmRzCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudF90cmljay5jYXJkcwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBbXQoKICAgIGRlZiBhdF9sZWFzdF9vbmVfcHJldmlvdXNfdHJpY2soc2VsZikgLT4gYm9vbDoKICAgICAgICByZXR1cm4gbGVuKHNlbGYuZ2FtZV9zdGF0ZVsidHJpY2tzIl0pID4gMAoKICAgIGRlZiBwYXVzZShzZWxmKToKICAgICAgICBzZWxmLnBhdXNlZF9vbl9sYXN0X3RyaWNrID0gVHJ1ZQoKICAgIGRlZiB1bnBhdXNlKHNlbGYpOgogICAgICAgIHNlbGYucGF1c2VkX29uX2xhc3RfdHJpY2sgPSBGYWxzZQoKICAgIGRlZiBuZXh0X2h1bWFuX2JpZChzZWxmLCBuZXh0X2FjdGlvbik6CiAgICAgICAgcGxheWVycyA9IFtEdW1teVBsYXllcihmYXZvcml0ZV9tb2RlPW5leHRfYWN0aW9uKSwgSGV1cmlzdGljc1BsYXllcigpLCBIZXVyaXN0aWNzUGxheWVyKCksIEhldXJpc3RpY3NQbGF5ZXIoKV0KICAgICAgICBnYW1lID0gR2FtZShwbGF5ZXJzLCBzZWxmLmdhbWVfc3RhdGUpCiAgICAgICAgZ2FtZS5uZXh0X2FjdGlvbigpCiAgICAgICAgc2VsZi5nYW1lX3N0YXRlID0gZ2FtZS5nZXRfZ2FtZV9zdGF0ZSgpCiAgICAgICAgcmV0dXJuIHNlbGYuZ2FtZV9zdGF0ZQoKICAgIGRlZiBuZXh0X2h1bWFuX2NhcmQoc2VsZiwgbmV4dF9hY3Rpb24pOgogICAgICAgIGlmIG5vdCBzZWxmLmdhbWVfc3RhdGVbImN1cnJlbnRfcGxheWVyX2luZGV4Il0gPT0gMDoKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm90IGh1bWFuIHBsYXllcnMgdHVybiIpCiAgICAgICAgcG9zc2libGVfY2FyZHMgPSBzZWxmLnBvc3NpYmxlX2NhcmRzKCkKICAgICAgICBpZiBuZXh0X2FjdGlvbiBpbiBwb3NzaWJsZV9jYXJkczoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBwbGF5ZXJzID0gW0R1bW15UGxheWVyKGZhdm9yaXRlX2NhcmRzPVtuZXh0X2FjdGlvbl0pLCBIZXVyaXN0aWNzUGxheWVyKCksIEhldXJpc3RpY3NQbGF5ZXIoKSwKICAgICAgICAgICAgICAgICAgICAgICBIZXVyaXN0aWNzUGxheWVyKCldCiAgICAgICAgICAgIGdhbWUgPSBHYW1lKHBsYXllcnMsIHNlbGYuZ2FtZV9zdGF0ZSkKICAgICAgICAgICAgZ2FtZS5uZXh0X2FjdGlvbigpCjx8ZmltX2VuZHw+"]
["c16ed26dce537825a50a9bb7ea288c80e7778f17-1","c16ed26dce537825a50a9bb7ea288c80e7778f17","PHxmaW1fcHJlZml4fD4KIiIiVGVzdCBtb2R1bGUgZm9yIGZpcnN0IG5vbiByZXBlYXRpbmcgbnVtYmVyIG1vZHVsZS4iIiIKCmltcG9ydCBweXRlc3QKClRFU1RfQ0FTRVMgPSBbKCdhJywgJ2EnKSwKICAgICAgICAgICAgICAoJ3N0cmVzcycsICd0JyksCiAgICAgICAgICAgICAgKCdtb29ubWVuJywgJ2UnKSwKICAgICAgICAgICAgICAoJycsICcnKSwKICAgICAgICAgICAgICAoJ2FiYmEnLCAnJyksCiAgICAgICAgICAgICAgKCdhYScsICcnKSwKICAgICAgICAgICAgICAoJ34+PCN+PjwnLCAnIycpLAogICAgICAgICAgICAgICgnaGVsbG8gd29ybGQsIGVoPycsICd3JyksCiAgICAgICAgICAgICAgKCdzVHJlU1MnLCAnVCcpLAogICAgICAgICAgICAgICgnR28gaGFuZyBhIHNhbGFtaSwgSVwnbSBhIGxhc2FnbmEgaG9nIScsICcsJyksCiAgICAgICAgICAgICAgKCdUaGlzIGlzIHJlYWxseSBjb29sJywgJ1QnKSwKICAgICAgICAgICAgICAoJ21vb29vb28nLCAnbScpLAogICAgICAgICAgICAgICgnMTk5OScsICcxJyksCiAgICAgICAgICAgICAgKCdiZWViJywgJycpXQoKCkBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgnaW5wdXQsIG91dHB1dCcsIFRFU1RfQ0FTRVMpCmRlZiB0ZXN0X2ZpcnN0X25vbl9yZXBlYXRpbmdfbnVtYmVyKGlucHV0LCBvdXRwdXQpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAiIiJUZXN0IGZvciBmaXJzdCBub24gcmVwZWF0aW5nIG51bWJlciBmdW5jdGlvbi4iIiIKICAgIGZyb20gZmlyc3Rfbm9uX3JlcGVhdGluZ19udW1iZXIgaW1wb3J0IGZpcnN0X25vbl9yZXBlYXRpbmdfbGV0dGVyCiAgICBhc3NlcnQgZmlyc3Rfbm9uX3JlcGVhdGluZ19sZXR0ZXIoaW5wdXQpID09IG91dHB1dAo8fGZpbV9lbmR8Pg=="]
["c16ed26dce537825a50a9bb7ea288c80e7778f17-2","c16ed26dce537825a50a9bb7ea288c80e7778f17","PHxmaW1fcHJlZml4fD4KIiIiVGVzdCBtb2R1bGUgZm9yIGZpcnN0IG5vbiByZXBlYXRpbmcgbnVtYmVyIG1vZHVsZS4iIiIKCmltcG9ydCBweXRlc3QKClRFU1RfQ0FTRVMgPSBbKCdhJywgJ2EnKSwKICAgICAgICAgICAgICAoJ3N0cmVzcycsICd0JyksCiAgICAgICAgICAgICAgKCdtb29ubWVuJywgJ2UnKSwKICAgICAgICAgICAgICAoJycsICcnKSwKICAgICAgICAgICAgICAoJ2FiYmEnLCAnJyksCiAgICAgICAgICAgICAgKCdhYScsICcnKSwKICAgICAgICAgICAgICAoJ34+PCN+PjwnLCAnIycpLAogICAgICAgICAgICAgICgnaGVsbG8gd29ybGQsIGVoPycsICd3JyksCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAoJ3NUcmVTUycsICdUJyksCiAgICAgICAgICAgICAgKCdHbyBoYW5nIGEgc2FsYW1pLCBJXCdtIGEgbGFzYWduYSBob2chJywgJywnKSwKICAgICAgICAgICAgICAoJ1RoaXMgaXMgcmVhbGx5IGNvb2wnLCAnVCcpLAogICAgICAgICAgICAgICgnbW9vb29vbycsICdtJyksCjx8ZmltX2VuZHw+"]
["c16ed26dce537825a50a9bb7ea288c80e7778f17-3","c16ed26dce537825a50a9bb7ea288c80e7778f17","PHxmaW1fcHJlZml4fD4KIiIiVGVzdCBtb2R1bGUgZm9yIGZpcnN0IG5vbiByZXBlYXRpbmcgbnVtYmVyIG1vZHVsZS4iIiIKCmltcG9ydCBweXRlc3QKClRFU1RfQ0FTRVMgPSBbKCdhJywgJ2EnKSwKICAgICAgICAgICAgICAoJ3N0cmVzcycsICd0JyksCiAgICAgICAgICAgICAgKCdtb29ubWVuJywgJ2UnKSwKICAgICAgICAgICAgICAoJycsICcnKSwKICAgICAgICAgICAgICAoJ2FiYmEnLCAnJyksCiAgICAgICAgICAgICAgKCdhYScsICcnKSwKICAgICAgICAgICAgICAoJ34+PCN+PjwnLCAnIycpLAogICAgICAgICAgICAgICgnaGVsbG8gd29ybGQsIGVoPycsICd3JyksCiAgICAgICAgICAgICAgKCdzVHJlU1MnLCAnVCcpLAogICAgICAgICAgICAgICgnR28gaGFuZyBhIHNhbGFtaSwgSVwnbSBhIGxhc2FnbmEgaG9nIScsICcsJyksCiAgICAgICAgICAgICAgKCdUaGlzIGlzIHJlYWxseSBjb29sJywgJ1QnKSwKICAgICAgICAgICAgICAoJ21vb29vb28nLCAnbScpLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgKCcxOTk5JywgJzEnKSwKICAgICAgICAgICAgICAoJ2JlZWInLCAnJyldCgoKPHxmaW1fZW5kfD4="]
["41cd988bc54252275778d4044d08eddb1ae83179-1","41cd988bc54252275778d4044d08eddb1ae83179","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gc2V0dXB0b29scyBpbXBvcnQgc2V0dXAKClNUQVRJQ19KU19GSUxFUyA9IFsKICAgICJkYXRhY2xlYW4vc3RhdGljL21haW4uanMiLAogICAgImRhdGFjbGVhbi9zdGF0aWMvanF1ZXJ5LnRhYmxlc29ydGVyLm1pbi5qcyIsCiAgICAiZGF0YWNsZWFuL3N0YXRpYy9pb3NiYWRnZS5qcyIsCiAgICAiZGF0YWNsZWFuL3N0YXRpYy9tYWluLmNzcyIsCl0KCgpkZWYgcmVhZF9sb25nX2Rlc2NyaXB0aW9uKCk6CiAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJSRUFETUUucnN0IikpIGFzIGZwOgogICAgICAgIHJldHVybiBmcC5yZWFkKCkKCgpzZXR1cCgKICAgIG5hbWU9ImlweWRhdGFjbGVhbiIsCiAgICB2ZXJzaW9uPSIwLjIuMiIsCiAgICB1cmw9Imh0dHBzOi8vZ2l0aHViLmNvbS9mYWN1bHR5YWkvaXB5ZGF0YWNsZWFuIiwKICAgIGF1dGhvcj0iRmFjdWx0eSIsCiAgICBhdXRob3JfZW1haWw9Im9wZW5zb3VyY2VAZmFjdWx0eS5haSIsCiAgICBkZXNjcmlwdGlvbj0iSW50ZXJhY3RpdmUgY2xlYW5pbmcgZm9yIHBhbmRhcyBEYXRhRnJhbWVzIiwKICAgIGxpY2Vuc2U9IkFwYWNoZSAyLjAiLAogICAgbG9uZ19kZXNjcmlwdGlvbj1yZWFkX2xvbmdfZGVzY3JpcHRpb24oKSwKICAgIGRhdGFfZmlsZXM9Wygic2hhcmUvanVweXRlci9uYmV4dGVuc2lvbnMvaXB5ZGF0YWNsZWFuIiwgU1RBVElDX0pTX0ZJTEVTKV0sCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHBhY2thZ2VzPVsiZGF0YWNsZWFuIl0sCiAgICBpbnN0YWxsX3JlcXVpcmVzPVsKICAgICAgICAiZnV0dXJlIiwKICAgICAgICAiaXB5dGhvbiIsCjx8ZmltX2VuZHw+"]
["6ba90d8cdc8480d49e597915729e9d81dee5ee2c-1","6ba90d8cdc8480d49e597915729e9d81dee5ee2c","PHxmaW1fcHJlZml4fD4KZnJvbSBweWRhbnRpYyBpbXBvcnQgQmFzZU1vZGVsLCBGaWVsZCwgVVVJRDQKZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsCmZyb20gdXVpZCBpbXBvcnQgdXVpZDQKCmZyb20gYXBpLm1vZGVscyBpbXBvcnQgdHlwZV9zdHIsIHZhbGlkYXRvcnMKCgpjbGFzcyBFdmVudFN0YXR1c0Jhc2UoQmFzZU1vZGVsKToKICAgICIiIlJlcHJlc2VudHMgYSBzdGF0dXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBhbiBldmVudCAob3BlbiwgY2xvc2VkLCBldGMpLiIiIgoKICAgIGRlc2NyaXB0aW9uOiBPcHRpb25hbFt0eXBlX3N0cl0gPSBGaWVsZChkZXNjcmlwdGlvbj0iQW4gb3B0aW9uYWwgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGV2ZW50IHN0YXR1cyIpCgogICAgdmFsdWU6IHR5cGVfc3RyID0gRmllbGQoZGVzY3JpcHRpb249IlRoZSB2YWx1ZSBvZiB0aGUgZXZlbnQgc3RhdHVzIikKCgpjbGFzcyBFdmVudFN0YXR1c0NyZWF0ZShFdmVudFN0YXR1c0Jhc2UpOgogICAgdXVpZDogVVVJRDQgPSBGaWVsZChkZWZhdWx0X2ZhY3Rvcnk9dXVpZDQsIGRlc2NyaXB0aW9uPSJUaGUgVVVJRCBvZiB0aGUgZXZlbnQgc3RhdHVzIikKCgpjbGFzcyBFdmVudFN0YXR1c1JlYWQoRXZlbnRTdGF0dXNCYXNlKToKICAgIHV1aWQ6IFVVSUQ0ID0gRmllbGQoZGVzY3JpcHRpb249IlRoZSBVVUlEIG9mIHRoZSBldmVudCBzdGF0dXMiKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgY2xhc3MgQ29uZmlnOgogICAgICAgIG9ybV9tb2RlID0gVHJ1ZQoKCjx8ZmltX2VuZHw+"]
["6ba90d8cdc8480d49e597915729e9d81dee5ee2c-2","6ba90d8cdc8480d49e597915729e9d81dee5ee2c","PHxmaW1fcHJlZml4fD4KZnJvbSBweWRhbnRpYyBpbXBvcnQgQmFzZU1vZGVsLCBGaWVsZCwgVVVJRDQKZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsCmZyb20gdXVpZCBpbXBvcnQgdXVpZDQKCmZyb20gYXBpLm1vZGVscyBpbXBvcnQgdHlwZV9zdHIsIHZhbGlkYXRvcnMKCgpjbGFzcyBFdmVudFN0YXR1c0Jhc2UoQmFzZU1vZGVsKToKICAgICIiIlJlcHJlc2VudHMgYSBzdGF0dXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBhbiBldmVudCAob3BlbiwgY2xvc2VkLCBldGMpLiIiIgoKPHxmaW1faG9sZXw+CgpjbGFzcyBFdmVudFN0YXR1c0NyZWF0ZShFdmVudFN0YXR1c0Jhc2UpOgogICAgdXVpZDogVVVJRDQgPSBGaWVsZChkZWZhdWx0X2ZhY3Rvcnk9dXVpZDQsIGRlc2NyaXB0aW9uPSJUaGUgVVVJRCBvZiB0aGUgZXZlbnQgc3RhdHVzIikKCgpjbGFzcyBFdmVudFN0YXR1c1JlYWQoRXZlbnRTdGF0dXNCYXNlKToKICAgIHV1aWQ6IFVVSUQ0ID0gRmllbGQoZGVzY3JpcHRpb249IlRoZSBVVUlEIG9mIHRoZSBldmVudCBzdGF0dXMiKQoKICAgIGNsYXNzIENvbmZpZzoKICAgICAgICBvcm1fbW9kZSA9IFRydWUKCgpjbGFzcyBFdmVudFN0YXR1c1VwZGF0ZShFdmVudFN0YXR1c0Jhc2UpOgogICAgdmFsdWU6IE9wdGlvbmFsW3R5cGVfc3RyXSA9IEZpZWxkKGRlc2NyaXB0aW9uPSJUaGUgdmFsdWUgb2YgdGhlIGV2ZW50IHN0YXR1cyIpCgogICAgX3ByZXZlbnRfbm9uZTogY2xhc3NtZXRob2QgPSB2YWxpZGF0b3JzLnByZXZlbnRfbm9uZSgidmFsdWUiKQo8fGZpbV9zdWZmaXh8PgogICAgZGVzY3JpcHRpb246IE9wdGlvbmFsW3R5cGVfc3RyXSA9IEZpZWxkKGRlc2NyaXB0aW9uPSJBbiBvcHRpb25hbCBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXZlbnQgc3RhdHVzIikKCiAgICB2YWx1ZTogdHlwZV9zdHIgPSBGaWVsZChkZXNjcmlwdGlvbj0iVGhlIHZhbHVlIG9mIHRoZSBldmVudCBzdGF0dXMiKQoKPHxmaW1fZW5kfD4="]
["6ba90d8cdc8480d49e597915729e9d81dee5ee2c-3","6ba90d8cdc8480d49e597915729e9d81dee5ee2c","PHxmaW1fcHJlZml4fD4KZnJvbSBweWRhbnRpYyBpbXBvcnQgQmFzZU1vZGVsLCBGaWVsZCwgVVVJRDQKZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsCmZyb20gdXVpZCBpbXBvcnQgdXVpZDQKCmZyb20gYXBpLm1vZGVscyBpbXBvcnQgdHlwZV9zdHIsIHZhbGlkYXRvcnMKCgpjbGFzcyBFdmVudFN0YXR1c0Jhc2UoQmFzZU1vZGVsKToKICAgICIiIlJlcHJlc2VudHMgYSBzdGF0dXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBhbiBldmVudCAob3BlbiwgY2xvc2VkLCBldGMpLiIiIgoKICAgIGRlc2NyaXB0aW9uOiBPcHRpb25hbFt0eXBlX3N0cl0gPSBGaWVsZChkZXNjcmlwdGlvbj0iQW4gb3B0aW9uYWwgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGV2ZW50IHN0YXR1cyIpCjx8ZmltX2hvbGV8PgpjbGFzcyBFdmVudFN0YXR1c0NyZWF0ZShFdmVudFN0YXR1c0Jhc2UpOgogICAgdXVpZDogVVVJRDQgPSBGaWVsZChkZWZhdWx0X2ZhY3Rvcnk9dXVpZDQsIGRlc2NyaXB0aW9uPSJUaGUgVVVJRCBvZiB0aGUgZXZlbnQgc3RhdHVzIikKCgpjbGFzcyBFdmVudFN0YXR1c1JlYWQoRXZlbnRTdGF0dXNCYXNlKToKICAgIHV1aWQ6IFVVSUQ0ID0gRmllbGQoZGVzY3JpcHRpb249IlRoZSBVVUlEIG9mIHRoZSBldmVudCBzdGF0dXMiKQoKICAgIGNsYXNzIENvbmZpZzoKICAgICAgICBvcm1fbW9kZSA9IFRydWUKCgpjbGFzcyBFdmVudFN0YXR1c1VwZGF0ZShFdmVudFN0YXR1c0Jhc2UpOgogICAgdmFsdWU6IE9wdGlvbmFsW3R5cGVfc3RyXSA9IEZpZWxkKGRlc2NyaXB0aW9uPSJUaGUgdmFsdWUgb2YgdGhlIGV2ZW50IHN0YXR1cyIpCgogICAgX3ByZXZlbnRfbm9uZTogY2xhc3NtZXRob2QgPSB2YWxpZGF0b3JzLnByZXZlbnRfbm9uZSgidmFsdWUiKQo8fGZpbV9zdWZmaXh8PgoKICAgIHZhbHVlOiB0eXBlX3N0ciA9IEZpZWxkKGRlc2NyaXB0aW9uPSJUaGUgdmFsdWUgb2YgdGhlIGV2ZW50IHN0YXR1cyIpCgoKPHxmaW1fZW5kfD4="]
["6ba90d8cdc8480d49e597915729e9d81dee5ee2c-4","6ba90d8cdc8480d49e597915729e9d81dee5ee2c","PHxmaW1fcHJlZml4fD4KZnJvbSBweWRhbnRpYyBpbXBvcnQgQmFzZU1vZGVsLCBGaWVsZCwgVVVJRDQKZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsCmZyb20gdXVpZCBpbXBvcnQgdXVpZDQKCmZyb20gYXBpLm1vZGVscyBpbXBvcnQgdHlwZV9zdHIsIHZhbGlkYXRvcnMKCgpjbGFzcyBFdmVudFN0YXR1c0Jhc2UoQmFzZU1vZGVsKToKICAgICIiIlJlcHJlc2VudHMgYSBzdGF0dXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBhbiBldmVudCAob3BlbiwgY2xvc2VkLCBldGMpLiIiIgoKICAgIGRlc2NyaXB0aW9uOiBPcHRpb25hbFt0eXBlX3N0cl0gPSBGaWVsZChkZXNjcmlwdGlvbj0iQW4gb3B0aW9uYWwgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGV2ZW50IHN0YXR1cyIpCgogICAgdmFsdWU6IHR5cGVfc3RyID0gRmllbGQoZGVzY3JpcHRpb249IlRoZSB2YWx1ZSBvZiB0aGUgZXZlbnQgc3RhdHVzIikKCgpjbGFzcyBFdmVudFN0YXR1c0NyZWF0ZShFdmVudFN0YXR1c0Jhc2UpOgogICAgdXVpZDogVVVJRDQgPSBGaWVsZChkZWZhdWx0X2ZhY3Rvcnk9dXVpZDQsIGRlc2NyaXB0aW9uPSJUaGUgVVVJRCBvZiB0aGUgZXZlbnQgc3RhdHVzIikKCgpjbGFzcyBFdmVudFN0YXR1c1JlYWQoRXZlbnRTdGF0dXNCYXNlKToKICAgIHV1aWQ6IFVVSUQ0ID0gRmllbGQoZGVzY3JpcHRpb249IlRoZSBVVUlEIG9mIHRoZSBldmVudCBzdGF0dXMiKQoKICAgIGNsYXNzIENvbmZpZzoKICAgICAgICBvcm1fbW9kZSA9IFRydWUKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmNsYXNzIEV2ZW50U3RhdHVzVXBkYXRlKEV2ZW50U3RhdHVzQmFzZSk6CiAgICB2YWx1ZTogT3B0aW9uYWxbdHlwZV9zdHJdID0gRmllbGQoZGVzY3JpcHRpb249IlRoZSB2YWx1ZSBvZiB0aGUgZXZlbnQgc3RhdHVzIikKCjx8ZmltX2VuZHw+"]
["ec5590ba00da9d26725a16ccbe3bcd63602f7301-1","ec5590ba00da9d26725a16ccbe3bcd63602f7301","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMKIyBDb3B5cmlnaHQgMjAxMCBadXphIFNvZnR3YXJlIEZvdW5kYXRpb24KIwojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBUcmFuc2xhdGUgVG9vbGtpdC4KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKaW1wb3J0IG9zCmltcG9ydCBzaHV0aWwKaW1wb3J0IHRlbXBmaWxlCmZyb20gemlwZmlsZSBpbXBvcnQgWmlwRmlsZQoKZnJvbSB0cmFuc2xhdGUuc3RvcmFnZS5wcm9qc3RvcmUgaW1wb3J0ICoKCl9fYWxsX18gPSBbJ0J1bmRsZVByb2plY3RTdG9yZScsICdJbnZhbGlkQnVuZGxlRXJyb3InXQoKCmNsYXNzIEludmFsaWRCdW5kbGVFcnJvcihFeGNlcHRpb24pOgogICAgcGFzcwoKCmNsYXNzIEJ1bmRsZVByb2plY3RTdG9yZShQcm9qZWN0U3RvcmUpOgogICAgIiIiUmVwcmVzZW50cyBhIHRyYW5zbGF0ZSBwcm9qZWN0IGJ1bmRsZSAoemlwIGFyY2hpdmUpLiIiIgoKICAgICMgSU5JVElBTElaRVJTICMKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmbmFtZSk6CiAgICAgICAgc3VwZXIoQnVuZGxlUHJvamVjdFN0b3JlLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5fdGVtcGZpbGVzID0ge30KICAgICAgICBpZiBmbmFtZSBhbmQgb3MucGF0aC5pc2ZpbGUoZm5hbWUpOgogICAgICAgICAgICBzZWxmLmxvYWQoZm5hbWUpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi56aXAgPSBaaXBGaWxlKGZuYW1lLCAndycpCiAgICAgICAgICAgIHNlbGYuc2F2ZSgpCiAgICAgICAgICAgIHNlbGYuemlwLmNsb3NlKCkKICAgICAgICAgICAgc2VsZi56aXAgPSBaaXBGaWxlKGZuYW1lLCAnYScpCgogICAgIyBDTEFTUyBNRVRIT0RTICMKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGZyb21fcHJvamVjdChjbHMsIHByb2osIGZuYW1lPU5vbmUpOgogICAgICAgIGlmIGZuYW1lIGlzIE5vbmU6CiAgICAgICAgICAgIGZuYW1lID0gJ2J1bmRsZS56aXAnCgogICAgICAgIGJ1bmRsZSA9IEJ1bmRsZVByb2plY3RTdG9yZShmbmFtZSkKICAgICAgICBmb3IgZm4gaW4gcHJvai5zb3VyY2VmaWxlczoKICAgICAgICAgICAgYnVuZGxlLmFwcGVuZF9zb3VyY2VmaWxlKHByb2ouZ2V0X2ZpbGUoZm4pKQogICAgICAgIGZvciBmbiBpbiBwcm9qLnRyYW5zZmlsZXM6CiAgICAgICAgICAgIGJ1bmRsZS5hcHBlbmRfdHJhbnNmaWxlKHByb2ouZ2V0X2ZpbGUoZm4pKQogICAgICAgIGZvciBmbiBpbiBwcm9qLnRhcmdldGZpbGVzOgogICAgICAgICAgICBidW5kbGUuYXBwZW5kX3RhcmdldGZpbGUocHJvai5nZXRfZmlsZShmbikpCiAgICAgICAgYnVuZGxlLnNldHRpbmdzID0gcHJvai5zZXR0aW5ncy5jb3B5KCkKICAgICAgICBidW5kbGUuc2F2ZSgpCiAgICAgICAgcmV0dXJuIGJ1bmRsZQoKICAgICMgTUVUSE9EUyAjCiAgICBkZWYgYXBwZW5kX2ZpbGUoc2VsZiwgYWZpbGUsIGZuYW1lLCBmdHlwZT0ndHJhbnMnLCBkZWxldGVfb3JpZz1GYWxzZSk6CiAgICAgICAgIiIiQXBwZW5kIHRoZSBnaXZlbiBmaWxlIHRvIHRoZSBwcm9qZWN0IHdpdGggdGhlIGdpdmVuIGZpbGVuYW1lLCBtYXJrZWQKICAgICAgICAgICAgdG8gYmUgb2YgdHlwZSBgYGZ0eXBlYGAgKCdzcmMnLCAndHJhbnMnLCAndGd0JykuCgogICAgICAgICAgICA6cGFyYW0gZGVsZXRlX29yaWc6IElmIGBgVHJ1ZWBgLCBhcyBzZXQgYnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bWV0aDpgfnRyYW5zbGF0ZS5zdG9yYWdlLlByb2plY3QuY29udmVydF9mb3J3YXJkYCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYGFmaWxlYGAgaXMgZGVsZXRlZCBhZnRlciBhcHBlbmRpbmcsIGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGUuCgogICAgICAgICAgICAuLiBub3RlOjogRm9yIHRoaXMgaW1wbGVtZW50YXRpb24sIHRoZSBhcHBlbmRlZCBmaWxlIHdpbGwgYmUgZGVsZXRlZAogICAgICAgICAgICAgICAgICAgICAgZnJvbSBkaXNrIGlmIGBgZGVsZXRlX29yaWdgYCBpcyBgYFRydWVgYC4KICAgICAgICAgICAgIiIiCiAgICAgICAgaWYgZm5hbWUgYW5kIGZuYW1lIGluIHNlbGYuemlwLm5hbWVsaXN0KCk6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkZpbGUgYWxyZWFkeSBpbiBidW5kbGUgYXJjaGl2ZTogJXMiICUgKGZuYW1lKSkKICAgICAgICBpZiBub3QgZm5hbWUgYW5kIGlzaW5zdGFuY2UoYWZpbGUsIGJhc2VzdHJpbmcpIGFuZCBhZmlsZSBpbiBzZWxmLnppcC5uYW1lbGlzdCgpOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJGaWxlIGFscmVhZHkgaW4gYnVuZGxlIGFyY2hpdmU6ICVzIiAlIChhZmlsZSkpCgogICAgICAgIGFmaWxlLCBmbmFtZSA9IHN1cGVyKEJ1bmRsZVByb2plY3RTdG9yZSwgc2VsZikuYXBwZW5kX2ZpbGUoYWZpbGUsIGZuYW1lLCBmdHlwZSkKICAgICAgICBzZWxmLl96aXBfYWRkKGZuYW1lLCBhZmlsZSkKCiAgICAgICAgaWYgZGVsZXRlX29yaWcgYW5kIGhhc2F0dHIoYWZpbGUsICduYW1lJykgYW5kIGFmaWxlLm5hbWUgbm90IGluIHNlbGYuX3RlbXBmaWxlczoKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgb3MudW5saW5rKGFmaWxlLm5hbWUpCiAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICBwYXNzCgogICAgICAgIHJldHVybiBzZWxmLmdldF9maWxlKGZuYW1lKSwgZm5hbWUKCiAgICBkZWYgcmVtb3ZlX2ZpbGUoc2VsZiwgZm5hbWUsIGZ0eXBlPU5vbmUpOgogICAgICAgICIiIlJlbW92ZSB0aGUgZmlsZSB3aXRoIHRoZSBnaXZlbiBwcm9qZWN0IG5hbWUgZnJvbSB0aGUgcHJvamVjdC4iIiIKICAgICAgICBzdXBlcihCdW5kbGVQcm9qZWN0U3RvcmUsIHNlbGYpLnJlbW92ZV9maWxlKGZuYW1lLCBmdHlwZSkKICAgICAgICBzZWxmLl96aXBfZGVsZXRlKFtmbmFtZV0pCiAgICAgICAgdGVtcGZpbGVzID0gW3RtcGYgZm9yIHRtcGYsIHByamYgaW4gc2VsZi5fdGVtcGZpbGVzLml0ZXJpdGVtcygpIGlmIHByamYgPT0gZm5hbWVdCiAgICAgICAgaWYgdGVtcGZpbGVzOgogICAgICAgICAgICBmb3IgdG1wZiBpbiB0ZW1wZmlsZXM6CiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKHRtcGYpCiAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgIGRlbCBzZWxmLl90ZW1wZmlsZXNbdG1wZl0KCiAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgc3VwZXIoQnVuZGxlUHJvamVjdFN0b3JlLCBzZWxmKS5jbG9zZSgpCiAgICAgICAgc2VsZi5jbGVhbnVwKCkKICAgICAgICBzZWxmLnppcC5jbG9zZSgpCgogICAgZGVmIGNsZWFudXAoc2VsZik6CiAgICAgICAgIiIiQ2xlYW4gdXAgb3VyIG1lc3M6IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMuIiIiCiAgICAgICAgZm9yIHRlbXBmbmFtZSBpbiBzZWxmLl90ZW1wZmlsZXM6CiAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHRlbXBmbmFtZSk6CiAgICAgICAgICAgICAgICBvcy51bmxpbmsodGVtcGZuYW1lKQogICAgICAgIHNlbGYuX3RlbXBmaWxlcyA9IHt9CgogICAgZGVmIGdldF9maWxlKHNlbGYsIGZuYW1lKToKICAgICAgICAiIiJSZXRyaWV2ZSBhIHByb2plY3QgZmlsZSAoc291cmNlLCB0cmFuc2xhdGlvbiBvciB0YXJnZXQgZmlsZSkgZnJvbSB0aGUKICAgICAgICAgICAgcHJvamVjdCBhcmNoaXZlLiIiIgogICAgICAgIHJldGZpbGUgPSBOb25lCiAgICAgICAgaWYgZm5hbWUgaW4gc2VsZi5fZmlsZXMgb3IgZm5hbWUgaW4gc2VsZi56aXAubmFtZWxpc3QoKToKICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgZmlsZSBoYXMgbm90IGFscmVhZHkgYmVlbiBleHRyYWN0ZWQgdG8gYSB0ZW1wIGZpbGUKICAgICAgICAgICAgdGVtcGZuYW1lID0gW3RmbiBmb3IgdGZuIGluIHNlbGYuX3RlbXBmaWxlcyBpZiBzZWxmLl90ZW1wZmlsZXNbdGZuXSA9PSBmbmFtZV0KICAgICAgICAgICAgaWYgdGVtcGZuYW1lIGFuZCBvcy5wYXRoLmlzZmlsZSh0ZW1wZm5hbWVbMF0pOgogICAgICAgICAgICAgICAgdGVtcGZuYW1lID0gdGVtcGZuYW1lWzBdCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0ZW1wZm5hbWUgPSAnJwogICAgICAgICAgICBpZiBub3QgdGVtcGZuYW1lOgogICAgICAgICAgICAgICAgIyBFeHRyYWN0IHRoZSBmaWxlIHRvIGEgdGVtcG9yYXJ5IGZpbGUKICAgICAgICAgICAgICAgIHpmaWxlID0gc2VsZi56aXAub3BlbihmbmFtZSkKICAgICAgICAgICAgICAgIHRlbXBmbmFtZSA9IG9zLnBhdGguc3BsaXQoZm5hbWUpWy0xXQogICAgICAgICAgICAgICAgdGVtcGZkLCB0ZW1wZm5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKHN1ZmZpeD0nXycgKyB0ZW1wZm5hbWUpCiAgICAgICAgICAgICAgICBvcy5jbG9zZSh0ZW1wZmQpCiAgICAgICAgICAgICAgICBvcGVuKHRlbXBmbmFtZSwgJ3cnKS53cml0ZSh6ZmlsZS5yZWFkKCkpCiAgICAgICAgICAgIHJldGZpbGUgPSBvcGVuKHRlbXBmbmFtZSkKICAgICAgICAgICAgc2VsZi5fdGVtcGZpbGVzW3RlbXBmbmFtZV0gPSBmbmFtZQoKICAgICAgICBpZiBub3QgcmV0ZmlsZToKICAgICAgICAgICAgcmFpc2UgRmlsZU5vdEluUHJvamVjdEVycm9yKGZuYW1lKQogICAgICAgIHJldHVybiByZXRmaWxlCgogICAgZGVmIGdldF9wcm9qX2ZpbGVuYW1lKHNlbGYsIHJlYWxmbmFtZSk6CiAgICAgICAgIiIiVHJ5IGFuZCBmaW5kIGEgcHJvamVjdCBmaWxlIG5hbWUgZm9yIHRoZSBnaXZlbiByZWFsIGZpbGUgbmFtZS4iIiIKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZuYW1lID0gc3VwZXIoQnVuZGxlUHJvamVjdFN0b3JlLCBzZWxmKS5nZXRfcHJval9maWxlbmFtZShyZWFsZm5hbWUpCiAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIHZlOgogICAgICAgICAgICBmbmFtZSA9IE5vbmUKICAgICAgICBpZiBmbmFtZToKICAgICAgICAgICAgcmV0dXJuIGZuYW1lCiAgICAgICAgaWYgcmVhbGZuYW1lIGluIHNlbGYuX3RlbXBmaWxlczoKICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3RlbXBmaWxlc1tyZWFsZm5hbWVdCiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignUmVhbCBmaWxlIG5vdCBpbiBwcm9qZWN0IHN0b3JlOiAlcycgJSAocmVhbGZuYW1lKSkKCiAgICBkZWYgbG9hZChzZWxmLCB6aXBuYW1lKToKICAgICAgICAiIiJMb2FkIHRoZSBidW5kbGUgcHJvamVjdCBmcm9tIHRoZSB6aXAgZmlsZSBvZiB0aGUgZ2l2ZW4gbmFtZS4iIiIKICAgICAgICBzZWxmLnppcCA9IFppcEZpbGUoemlwbmFtZSwgbW9kZT0nYScpCiAgICAgICAgc2VsZi5fbG9hZF9zZXR0aW5ncygpCgogICAgICAgIGFwcGVuZF9zZWN0aW9uID0gewogICAgICAgICAgICAnc291cmNlcyc6IHNlbGYuX3NvdXJjZWZpbGVzLmFwcGVuZCwKICAgICAgICAgICAgJ3RhcmdldHMnOiBzZWxmLl90YXJnZXRmaWxlcy5hcHBlbmQsCiAgICAgICAgICAgICd0cmFuc2ZpbGVzJzogc2VsZi5fdHJhbnNmaWxlcy5hcHBlbmQsCiAgICAgICAgfQogICAgICAgIGZvciBzZWN0aW9uIGluICgnc291cmNlcycsICd0YXJnZXRzJywgJ3RyYW5zZmlsZXMnKToKICAgICAgICAgICAgaWYgc2VjdGlvbiBpbiBzZWxmLnNldHRpbmdzOgogICAgICAgICAgICAgICAgZm9yIGZuYW1lIGluIHNlbGYuc2V0dGluZ3Nbc2VjdGlvbl06CiAgICAgICAgICAgICAgICAgICAgYXBwZW5kX3NlY3Rpb25bc2VjdGlvbl0oZm5hbWUpCiAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZXNbZm5hbWVdID0gTm9uZQoKICAgIGRlZiBzYXZlKHNlbGYsIGZpbGVuYW1lPU5vbmUpOgogICAgICAgICIiIlNhdmUgYWxsIHByb2plY3QgZmlsZXMgdG8gdGhlIGJ1bmRsZSB6aXAgZmlsZS4iIiIKICAgICAgICBzZWxmLl91cGRhdGVfZnJvbV90ZW1wZmlsZXMoKQoKICAgICAgICBpZiBmaWxlbmFtZToKICAgICAgICAgICAgbmV3emlwID0gWmlwRmlsZShmaWxlbmFtZSwgJ3cnKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG5ld3ppcCA9IHNlbGYuX2NyZWF0ZV90ZW1wX3ppcGZpbGUoKQoKICAgICAgICAjIFdyaXRlIHByb2plY3QgZmlsZSBmb3IgdGhlIG5ldyB6aXAgYnVuZGxlCiAgICAgICAgbmV3emlwLndyaXRlc3RyKCdwcm9qZWN0Lnh0cCcsIHNlbGYuX2dlbmVyYXRlX3NldHRpbmdzKCkpCiAgICAgICAgIyBDb3B5IHByb2plY3QgZmlsZXMgZnJvbSBwcm9qZWN0IHRvIHRoZSBuZXcgemlwIGZpbGUKICAgICAgICBwcm9qZWN0X2ZpbGVzID0gc2VsZi5fc291cmNlZmlsZXMgKyBzZWxmLl90cmFuc2ZpbGVzICsgc2VsZi5fdGFyZ2V0ZmlsZXMKICAgICAgICBmb3IgZm5hbWUgaW4gcHJvamVjdF9maWxlczoKICAgICAgICAgICAgbmV3emlwLndyaXRlc3RyKGZuYW1lLCBzZWxmLmdldF9maWxlKGZuYW1lKS5yZWFkKCkpCiAgICAgICAgIyBDb3B5IGFueSBleHRyYSAobm9uLXByb2plY3QpIGZpbGVzIGZyb20gdGhlIGN1cnJlbnQgemlwCiAgICAgICAgZm9yIGZuYW1lIGluIHNlbGYuemlwLm5hbWVsaXN0KCk6CiAgICAgICAgICAgIGlmIGZuYW1lIGluIHByb2plY3RfZmlsZXMgb3IgZm5hbWUgPT0gJ3Byb2plY3QueHRwJzoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIG5ld3ppcC53cml0ZXN0cihmbmFtZSwgc2VsZi56aXAucmVhZChmbmFtZSkpCgogICAgICAgIHNlbGYuX3JlcGxhY2VfcHJvamVjdF96aXAobmV3emlwKQoKICAgIGRlZiB1cGRhdGVfZmlsZShzZWxmLCBwZm5hbWUsIGluZmlsZSk6CiAgICAgICAgIiIiVXBkYXRlcyB0aGUgZmlsZSB3aXRoIHRoZSBnaXZlbiBwcm9qZWN0IGZpbGUgbmFtZSB3aXRoIHRoZSBjb250ZW50cwogICAgICAgICAgICBvZiBgYGluZmlsZWBgLgoKICAgICAgICAgICAgOnJldHVybnM6IHRoZSByZXN1bHRzIGZyb20gOm1ldGg6YEJ1bmRsZVByb2pTdG9yZS5hcHBlbmRfZmlsZWAuIiIiCiAgICAgICAgaWYgcGZuYW1lIG5vdCBpbiBzZWxmLl9maWxlczoKICAgICAgICAgICAgcmFpc2UgRmlsZU5vdEluUHJvamVjdEVycm9yKHBmbmFtZSkKCiAgICAgICAgaWYgcGZuYW1lIG5vdCBpbiBzZWxmLnppcC5uYW1lbGlzdCgpOgogICAgICAgICAgICByZXR1cm4gc3VwZXIoQnVuZGxlUHJvamVjdFN0b3JlLCBzZWxmKS51cGRhdGVfZmlsZShwZm5hbWUsIGluZmlsZSkKCiAgICAgICAgc2VsZi5femlwX2RlbGV0ZShbcGZuYW1lXSkKICAgICAgICBzZWxmLl96aXBfYWRkKHBmbmFtZSwgaW5maWxlKQoKICAgIGRlZiBfbG9hZF9zZXR0aW5ncyhzZWxmKToKICAgICAgICAiIiJHcmFiIHRoZSBwcm9qZWN0Lnh0cCBmaWxlIGZyb20gdGhlIHppcCBmaWxlIGFuZCBsb2FkIGl0LiIiIgogICAgICAgIGlmICdwcm9qZWN0Lnh0cCcgbm90IGluIHNlbGYuemlwLm5hbWVsaXN0KCk6CiAgICAgICAgICAgIHJhaXNlIEludmFsaWRCdW5kbGVFcnJvcignTm90IGEgdHJhbnNsYXRlIHByb2plY3QgYnVuZGxlJykKICAgICAgICBzdXBlcihCdW5kbGVQcm9qZWN0U3RvcmUsIHNlbGYpLl9sb2FkX3NldHRpbmdzKHNlbGYuemlwLm9wZW4oJ3Byb2plY3QueHRwJykucmVhZCgpKQoKICAgIGRlZiBfY3JlYXRlX3RlbXBfemlwZmlsZShzZWxmKToKICAgICAgICAiIiJDcmVhdGUgYSBuZXcgemlwIGZpbGUgd2l0aCBhIHRlbXBvcmFyeSBmaWxlIG5hbWUgKHdpdGggbW9kZSAndycpLiIiIgogICAgICAgIG5ld3ppcGZkLCBuZXd6aXBmbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAocHJlZml4PSd0cmFuc2xhdGVfYnVuZGxlJywgc3VmZml4PScuemlwJykKICAgICAgICBvcy5jbG9zZShuZXd6aXBmZCkKICAgICAgICByZXR1cm4gWmlwRmlsZShuZXd6aXBmbmFtZSwgJ3cnKQoKICAgIGRlZiBfcmVwbGFjZV9wcm9qZWN0X3ppcChzZWxmLCB6ZmlsZSk6CiAgICAgICAgIiIiUmVwbGFjZSB0aGUgY3VycmVudGx5IHVzZWQgemlwIGZpbGUgKGBgc2VsZi56aXBgYCkgd2l0aCB0aGUgZ2l2ZW4gemlwCiAgICAgICAgICAgIGZpbGUuIEJhc2ljYWxseSwgYGBvcy5yZW5hbWUoemZpbGUuZmlsZW5hbWUsIHNlbGYuemlwLmZpbGVuYW1lKWBgLiIiIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgaWYgbm90IHpmaWxlLmZwLmNsb3NlZDoKICAgICAgICAgICAgemZpbGUuY2xvc2UoKQogICAgICAgIGlmIG5vdCBzZWxmLnppcC5mcC5jbG9zZWQ6CiAgICAgICAgICAgIHNlbGYuemlwLmNsb3NlKCkKPHxmaW1fZW5kfD4="]
["ec5590ba00da9d26725a16ccbe3bcd63602f7301-2","ec5590ba00da9d26725a16ccbe3bcd63602f7301","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMKIyBDb3B5cmlnaHQgMjAxMCBadXphIFNvZnR3YXJlIEZvdW5kYXRpb24KIwojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBUcmFuc2xhdGUgVG9vbGtpdC4KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKaW1wb3J0IG9zCmltcG9ydCBzaHV0aWwKaW1wb3J0IHRlbXBmaWxlCmZyb20gemlwZmlsZSBpbXBvcnQgWmlwRmlsZQoKZnJvbSB0cmFuc2xhdGUuc3RvcmFnZS5wcm9qc3RvcmUgaW1wb3J0ICoKCl9fYWxsX18gPSBbJ0J1bmRsZVByb2plY3RTdG9yZScsICdJbnZhbGlkQnVuZGxlRXJyb3InXQoKCmNsYXNzIEludmFsaWRCdW5kbGVFcnJvcihFeGNlcHRpb24pOgogICAgcGFzcwoKCmNsYXNzIEJ1bmRsZVByb2plY3RTdG9yZShQcm9qZWN0U3RvcmUpOgogICAgIiIiUmVwcmVzZW50cyBhIHRyYW5zbGF0ZSBwcm9qZWN0IGJ1bmRsZSAoemlwIGFyY2hpdmUpLiIiIgoKICAgICMgSU5JVElBTElaRVJTICMKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmbmFtZSk6CiAgICAgICAgc3VwZXIoQnVuZGxlUHJvamVjdFN0b3JlLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5fdGVtcGZpbGVzID0ge30KICAgICAgICBpZiBmbmFtZSBhbmQgb3MucGF0aC5pc2ZpbGUoZm5hbWUpOgogICAgICAgICAgICBzZWxmLmxvYWQoZm5hbWUpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi56aXAgPSBaaXBGaWxlKGZuYW1lLCAndycpCiAgICAgICAgICAgIHNlbGYuc2F2ZSgpCiAgICAgICAgICAgIHNlbGYuemlwLmNsb3NlKCkKICAgICAgICAgICAgc2VsZi56aXAgPSBaaXBGaWxlKGZuYW1lLCAnYScpCgogICAgIyBDTEFTUyBNRVRIT0RTICMKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGZyb21fcHJvamVjdChjbHMsIHByb2osIGZuYW1lPU5vbmUpOgogICAgICAgIGlmIGZuYW1lIGlzIE5vbmU6CiAgICAgICAgICAgIGZuYW1lID0gJ2J1bmRsZS56aXAnCgogICAgICAgIGJ1bmRsZSA9IEJ1bmRsZVByb2plY3RTdG9yZShmbmFtZSkKICAgICAgICBmb3IgZm4gaW4gcHJvai5zb3VyY2VmaWxlczoKICAgICAgICAgICAgYnVuZGxlLmFwcGVuZF9zb3VyY2VmaWxlKHByb2ouZ2V0X2ZpbGUoZm4pKQogICAgICAgIGZvciBmbiBpbiBwcm9qLnRyYW5zZmlsZXM6CiAgICAgICAgICAgIGJ1bmRsZS5hcHBlbmRfdHJhbnNmaWxlKHByb2ouZ2V0X2ZpbGUoZm4pKQogICAgICAgIGZvciBmbiBpbiBwcm9qLnRhcmdldGZpbGVzOgogICAgICAgICAgICBidW5kbGUuYXBwZW5kX3RhcmdldGZpbGUocHJvai5nZXRfZmlsZShmbikpCiAgICAgICAgYnVuZGxlLnNldHRpbmdzID0gcHJvai5zZXR0aW5ncy5jb3B5KCkKICAgICAgICBidW5kbGUuc2F2ZSgpCiAgICAgICAgcmV0dXJuIGJ1bmRsZQoKICAgICMgTUVUSE9EUyAjCiAgICBkZWYgYXBwZW5kX2ZpbGUoc2VsZiwgYWZpbGUsIGZuYW1lLCBmdHlwZT0ndHJhbnMnLCBkZWxldGVfb3JpZz1GYWxzZSk6CiAgICAgICAgIiIiQXBwZW5kIHRoZSBnaXZlbiBmaWxlIHRvIHRoZSBwcm9qZWN0IHdpdGggdGhlIGdpdmVuIGZpbGVuYW1lLCBtYXJrZWQKICAgICAgICAgICAgdG8gYmUgb2YgdHlwZSBgYGZ0eXBlYGAgKCdzcmMnLCAndHJhbnMnLCAndGd0JykuCgogICAgICAgICAgICA6cGFyYW0gZGVsZXRlX29yaWc6IElmIGBgVHJ1ZWBgLCBhcyBzZXQgYnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bWV0aDpgfnRyYW5zbGF0ZS5zdG9yYWdlLlByb2plY3QuY29udmVydF9mb3J3YXJkYCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYGFmaWxlYGAgaXMgZGVsZXRlZCBhZnRlciBhcHBlbmRpbmcsIGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGUuCgogICAgICAgICAgICAuLiBub3RlOjogRm9yIHRoaXMgaW1wbGVtZW50YXRpb24sIHRoZSBhcHBlbmRlZCBmaWxlIHdpbGwgYmUgZGVsZXRlZAogICAgICAgICAgICAgICAgICAgICAgZnJvbSBkaXNrIGlmIGBgZGVsZXRlX29yaWdgYCBpcyBgYFRydWVgYC4KICAgICAgICAgICAgIiIiCiAgICAgICAgaWYgZm5hbWUgYW5kIGZuYW1lIGluIHNlbGYuemlwLm5hbWVsaXN0KCk6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkZpbGUgYWxyZWFkeSBpbiBidW5kbGUgYXJjaGl2ZTogJXMiICUgKGZuYW1lKSkKICAgICAgICBpZiBub3QgZm5hbWUgYW5kIGlzaW5zdGFuY2UoYWZpbGUsIGJhc2VzdHJpbmcpIGFuZCBhZmlsZSBpbiBzZWxmLnppcC5uYW1lbGlzdCgpOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJGaWxlIGFscmVhZHkgaW4gYnVuZGxlIGFyY2hpdmU6ICVzIiAlIChhZmlsZSkpCgogICAgICAgIGFmaWxlLCBmbmFtZSA9IHN1cGVyKEJ1bmRsZVByb2plY3RTdG9yZSwgc2VsZikuYXBwZW5kX2ZpbGUoYWZpbGUsIGZuYW1lLCBmdHlwZSkKICAgICAgICBzZWxmLl96aXBfYWRkKGZuYW1lLCBhZmlsZSkKCiAgICAgICAgaWYgZGVsZXRlX29yaWcgYW5kIGhhc2F0dHIoYWZpbGUsICduYW1lJykgYW5kIGFmaWxlLm5hbWUgbm90IGluIHNlbGYuX3RlbXBmaWxlczoKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgb3MudW5saW5rKGFmaWxlLm5hbWUpCiAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICBwYXNzCgogICAgICAgIHJldHVybiBzZWxmLmdldF9maWxlKGZuYW1lKSwgZm5hbWUKCiAgICBkZWYgcmVtb3ZlX2ZpbGUoc2VsZiwgZm5hbWUsIGZ0eXBlPU5vbmUpOgogICAgICAgICIiIlJlbW92ZSB0aGUgZmlsZSB3aXRoIHRoZSBnaXZlbiBwcm9qZWN0IG5hbWUgZnJvbSB0aGUgcHJvamVjdC4iIiIKICAgICAgICBzdXBlcihCdW5kbGVQcm9qZWN0U3RvcmUsIHNlbGYpLnJlbW92ZV9maWxlKGZuYW1lLCBmdHlwZSkKICAgICAgICBzZWxmLl96aXBfZGVsZXRlKFtmbmFtZV0pCiAgICAgICAgdGVtcGZpbGVzID0gW3RtcGYgZm9yIHRtcGYsIHByamYgaW4gc2VsZi5fdGVtcGZpbGVzLml0ZXJpdGVtcygpIGlmIHByamYgPT0gZm5hbWVdCiAgICAgICAgaWYgdGVtcGZpbGVzOgogICAgICAgICAgICBmb3IgdG1wZiBpbiB0ZW1wZmlsZXM6CiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKHRtcGYpCiAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgIGRlbCBzZWxmLl90ZW1wZmlsZXNbdG1wZl0KCiAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgc3VwZXIoQnVuZGxlUHJvamVjdFN0b3JlLCBzZWxmKS5jbG9zZSgpCiAgICAgICAgc2VsZi5jbGVhbnVwKCkKICAgICAgICBzZWxmLnppcC5jbG9zZSgpCgogICAgZGVmIGNsZWFudXAoc2VsZik6CiAgICAgICAgIiIiQ2xlYW4gdXAgb3VyIG1lc3M6IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMuIiIiCiAgICAgICAgZm9yIHRlbXBmbmFtZSBpbiBzZWxmLl90ZW1wZmlsZXM6CiAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHRlbXBmbmFtZSk6CiAgICAgICAgICAgICAgICBvcy51bmxpbmsodGVtcGZuYW1lKQogICAgICAgIHNlbGYuX3RlbXBmaWxlcyA9IHt9CgogICAgZGVmIGdldF9maWxlKHNlbGYsIGZuYW1lKToKICAgICAgICAiIiJSZXRyaWV2ZSBhIHByb2plY3QgZmlsZSAoc291cmNlLCB0cmFuc2xhdGlvbiBvciB0YXJnZXQgZmlsZSkgZnJvbSB0aGUKICAgICAgICAgICAgcHJvamVjdCBhcmNoaXZlLiIiIgogICAgICAgIHJldGZpbGUgPSBOb25lCiAgICAgICAgaWYgZm5hbWUgaW4gc2VsZi5fZmlsZXMgb3IgZm5hbWUgaW4gc2VsZi56aXAubmFtZWxpc3QoKToKICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgZmlsZSBoYXMgbm90IGFscmVhZHkgYmVlbiBleHRyYWN0ZWQgdG8gYSB0ZW1wIGZpbGUKICAgICAgICAgICAgdGVtcGZuYW1lID0gW3RmbiBmb3IgdGZuIGluIHNlbGYuX3RlbXBmaWxlcyBpZiBzZWxmLl90ZW1wZmlsZXNbdGZuXSA9PSBmbmFtZV0KICAgICAgICAgICAgaWYgdGVtcGZuYW1lIGFuZCBvcy5wYXRoLmlzZmlsZSh0ZW1wZm5hbWVbMF0pOgogICAgICAgICAgICAgICAgdGVtcGZuYW1lID0gdGVtcGZuYW1lWzBdCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0ZW1wZm5hbWUgPSAnJwogICAgICAgICAgICBpZiBub3QgdGVtcGZuYW1lOgogICAgICAgICAgICAgICAgIyBFeHRyYWN0IHRoZSBmaWxlIHRvIGEgdGVtcG9yYXJ5IGZpbGUKICAgICAgICAgICAgICAgIHpmaWxlID0gc2VsZi56aXAub3BlbihmbmFtZSkKICAgICAgICAgICAgICAgIHRlbXBmbmFtZSA9IG9zLnBhdGguc3BsaXQoZm5hbWUpWy0xXQogICAgICAgICAgICAgICAgdGVtcGZkLCB0ZW1wZm5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKHN1ZmZpeD0nXycgKyB0ZW1wZm5hbWUpCiAgICAgICAgICAgICAgICBvcy5jbG9zZSh0ZW1wZmQpCiAgICAgICAgICAgICAgICBvcGVuKHRlbXBmbmFtZSwgJ3cnKS53cml0ZSh6ZmlsZS5yZWFkKCkpCiAgICAgICAgICAgIHJldGZpbGUgPSBvcGVuKHRlbXBmbmFtZSkKICAgICAgICAgICAgc2VsZi5fdGVtcGZpbGVzW3RlbXBmbmFtZV0gPSBmbmFtZQoKICAgICAgICBpZiBub3QgcmV0ZmlsZToKICAgICAgICAgICAgcmFpc2UgRmlsZU5vdEluUHJvamVjdEVycm9yKGZuYW1lKQogICAgICAgIHJldHVybiByZXRmaWxlCgogICAgZGVmIGdldF9wcm9qX2ZpbGVuYW1lKHNlbGYsIHJlYWxmbmFtZSk6CiAgICAgICAgIiIiVHJ5IGFuZCBmaW5kIGEgcHJvamVjdCBmaWxlIG5hbWUgZm9yIHRoZSBnaXZlbiByZWFsIGZpbGUgbmFtZS4iIiIKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZuYW1lID0gc3VwZXIoQnVuZGxlUHJvamVjdFN0b3JlLCBzZWxmKS5nZXRfcHJval9maWxlbmFtZShyZWFsZm5hbWUpCiAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIHZlOgogICAgICAgICAgICBmbmFtZSA9IE5vbmUKICAgICAgICBpZiBmbmFtZToKICAgICAgICAgICAgcmV0dXJuIGZuYW1lCiAgICAgICAgaWYgcmVhbGZuYW1lIGluIHNlbGYuX3RlbXBmaWxlczoKICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3RlbXBmaWxlc1tyZWFsZm5hbWVdCiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignUmVhbCBmaWxlIG5vdCBpbiBwcm9qZWN0IHN0b3JlOiAlcycgJSAocmVhbGZuYW1lKSkKCiAgICBkZWYgbG9hZChzZWxmLCB6aXBuYW1lKToKICAgICAgICAiIiJMb2FkIHRoZSBidW5kbGUgcHJvamVjdCBmcm9tIHRoZSB6aXAgZmlsZSBvZiB0aGUgZ2l2ZW4gbmFtZS4iIiIKICAgICAgICBzZWxmLnppcCA9IFppcEZpbGUoemlwbmFtZSwgbW9kZT0nYScpCiAgICAgICAgc2VsZi5fbG9hZF9zZXR0aW5ncygpCgogICAgICAgIGFwcGVuZF9zZWN0aW9uID0gewogICAgICAgICAgICAnc291cmNlcyc6IHNlbGYuX3NvdXJjZWZpbGVzLmFwcGVuZCwKICAgICAgICAgICAgJ3RhcmdldHMnOiBzZWxmLl90YXJnZXRmaWxlcy5hcHBlbmQsCiAgICAgICAgICAgICd0cmFuc2ZpbGVzJzogc2VsZi5fdHJhbnNmaWxlcy5hcHBlbmQsCiAgICAgICAgfQogICAgICAgIGZvciBzZWN0aW9uIGluICgnc291cmNlcycsICd0YXJnZXRzJywgJ3RyYW5zZmlsZXMnKToKICAgICAgICAgICAgaWYgc2VjdGlvbiBpbiBzZWxmLnNldHRpbmdzOgogICAgICAgICAgICAgICAgZm9yIGZuYW1lIGluIHNlbGYuc2V0dGluZ3Nbc2VjdGlvbl06CiAgICAgICAgICAgICAgICAgICAgYXBwZW5kX3NlY3Rpb25bc2VjdGlvbl0oZm5hbWUpCiAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZXNbZm5hbWVdID0gTm9uZQoKICAgIGRlZiBzYXZlKHNlbGYsIGZpbGVuYW1lPU5vbmUpOgogICAgICAgICIiIlNhdmUgYWxsIHByb2plY3QgZmlsZXMgdG8gdGhlIGJ1bmRsZSB6aXAgZmlsZS4iIiIKICAgICAgICBzZWxmLl91cGRhdGVfZnJvbV90ZW1wZmlsZXMoKQoKICAgICAgICBpZiBmaWxlbmFtZToKICAgICAgICAgICAgbmV3emlwID0gWmlwRmlsZShmaWxlbmFtZSwgJ3cnKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG5ld3ppcCA9IHNlbGYuX2NyZWF0ZV90ZW1wX3ppcGZpbGUoKQoKICAgICAgICAjIFdyaXRlIHByb2plY3QgZmlsZSBmb3IgdGhlIG5ldyB6aXAgYnVuZGxlCiAgICAgICAgbmV3emlwLndyaXRlc3RyKCdwcm9qZWN0Lnh0cCcsIHNlbGYuX2dlbmVyYXRlX3NldHRpbmdzKCkpCiAgICAgICAgIyBDb3B5IHByb2plY3QgZmlsZXMgZnJvbSBwcm9qZWN0IHRvIHRoZSBuZXcgemlwIGZpbGUKICAgICAgICBwcm9qZWN0X2ZpbGVzID0gc2VsZi5fc291cmNlZmlsZXMgKyBzZWxmLl90cmFuc2ZpbGVzICsgc2VsZi5fdGFyZ2V0ZmlsZXMKICAgICAgICBmb3IgZm5hbWUgaW4gcHJvamVjdF9maWxlczoKICAgICAgICAgICAgbmV3emlwLndyaXRlc3RyKGZuYW1lLCBzZWxmLmdldF9maWxlKGZuYW1lKS5yZWFkKCkpCiAgICAgICAgIyBDb3B5IGFueSBleHRyYSAobm9uLXByb2plY3QpIGZpbGVzIGZyb20gdGhlIGN1cnJlbnQgemlwCjx8ZmltX2hvbGV8PgoKICAgICAgICBzZWxmLl9yZXBsYWNlX3Byb2plY3RfemlwKG5ld3ppcCkKCiAgICBkZWYgdXBkYXRlX2ZpbGUoc2VsZiwgcGZuYW1lLCBpbmZpbGUpOgogICAgICAgICIiIlVwZGF0ZXMgdGhlIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gcHJvamVjdCBmaWxlIG5hbWUgd2l0aCB0aGUgY29udGVudHMKICAgICAgICAgICAgb2YgYGBpbmZpbGVgYC4KCiAgICAgICAgICAgIDpyZXR1cm5zOiB0aGUgcmVzdWx0cyBmcm9tIDptZXRoOmBCdW5kbGVQcm9qU3RvcmUuYXBwZW5kX2ZpbGVgLiIiIgogICAgICAgIGlmIHBmbmFtZSBub3QgaW4gc2VsZi5fZmlsZXM6CiAgICAgICAgICAgIHJhaXNlIEZpbGVOb3RJblByb2plY3RFcnJvcihwZm5hbWUpCgogICAgICAgIGlmIHBmbmFtZSBub3QgaW4gc2VsZi56aXAubmFtZWxpc3QoKToKICAgICAgICAgICAgcmV0dXJuIHN1cGVyKEJ1bmRsZVByb2plY3RTdG9yZSwgc2VsZikudXBkYXRlX2ZpbGUocGZuYW1lLCBpbmZpbGUpCgogICAgICAgIHNlbGYuX3ppcF9kZWxldGUoW3BmbmFtZV0pCiAgICAgICAgc2VsZi5femlwX2FkZChwZm5hbWUsIGluZmlsZSkKCiAgICBkZWYgX2xvYWRfc2V0dGluZ3Moc2VsZik6CiAgICAgICAgIiIiR3JhYiB0aGUgcHJvamVjdC54dHAgZmlsZSBmcm9tIHRoZSB6aXAgZmlsZSBhbmQgbG9hZCBpdC4iIiIKICAgICAgICBpZiAncHJvamVjdC54dHAnIG5vdCBpbiBzZWxmLnppcC5uYW1lbGlzdCgpOgogICAgICAgICAgICByYWlzZSBJbnZhbGlkQnVuZGxlRXJyb3IoJ05vdCBhIHRyYW5zbGF0ZSBwcm9qZWN0IGJ1bmRsZScpCiAgICAgICAgc3VwZXIoQnVuZGxlUHJvamVjdFN0b3JlLCBzZWxmKS5fbG9hZF9zZXR0aW5ncyhzZWxmLnppcC5vcGVuKCdwcm9qZWN0Lnh0cCcpLnJlYWQoKSkKCiAgICBkZWYgX2NyZWF0ZV90ZW1wX3ppcGZpbGUoc2VsZik6CiAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IHppcCBmaWxlIHdpdGggYSB0ZW1wb3JhcnkgZmlsZSBuYW1lICh3aXRoIG1vZGUgJ3cnKS4iIiIKICAgICAgICBuZXd6aXBmZCwgbmV3emlwZm5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKHByZWZpeD0ndHJhbnNsYXRlX2J1bmRsZScsIHN1ZmZpeD0nLnppcCcpCiAgICAgICAgb3MuY2xvc2UobmV3emlwZmQpCiAgICAgICAgcmV0dXJuIFppcEZpbGUobmV3emlwZm5hbWUsICd3JykKCiAgICBkZWYgX3JlcGxhY2VfcHJvamVjdF96aXAoc2VsZiwgemZpbGUpOgogICAgICAgICIiIlJlcGxhY2UgdGhlIGN1cnJlbnRseSB1c2VkIHppcCBmaWxlIChgYHNlbGYuemlwYGApIHdpdGggdGhlIGdpdmVuIHppcAogICAgICAgICAgICBmaWxlLiBCYXNpY2FsbHksIGBgb3MucmVuYW1lKHpmaWxlLmZpbGVuYW1lLCBzZWxmLnppcC5maWxlbmFtZSlgYC4iIiIKICAgICAgICBpZiBub3QgemZpbGUuZnAuY2xvc2VkOgogICAgICAgICAgICB6ZmlsZS5jbG9zZSgpCiAgICAgICAgaWYgbm90IHNlbGYuemlwLmZwLmNsb3NlZDoKICAgICAgICAgICAgc2VsZi56aXAuY2xvc2UoKQogICAgICAgIHNodXRpbC5tb3ZlKHpmaWxlLmZpbGVuYW1lLCBzZWxmLnppcC5maWxlbmFtZSkKICAgICAgICBzZWxmLnppcCA9IFppcEZpbGUoc2VsZi56aXAuZmlsZW5hbWUsIG1vZGU9J2EnKQoKICAgIGRlZiBfdXBkYXRlX2Zyb21fdGVtcGZpbGVzKHNlbGYpOgogICAgICAgICIiIlVwZGF0ZSBwcm9qZWN0IGZpbGVzIGZyb20gdGVtcG9yYXJ5IGZpbGVzLiIiIgogICAgICAgIGZvciB0ZW1wZm5hbWUgaW4gc2VsZi5fdGVtcGZpbGVzOgogICAgICAgICAgICB0bXAgPSBvcGVuKHRlbXBmbmFtZSkKICAgICAgICAgICAgc2VsZi51cGRhdGVfZmlsZShzZWxmLl90ZW1wZmlsZXNbdGVtcGZuYW1lXSwgdG1wKQogICAgICAgICAgICBpZiBub3QgdG1wLmNsb3NlZDoKICAgICAgICAgICAgICAgIHRtcC5jbG9zZSgpCgogICAgZGVmIF96aXBfYWRkKHNlbGYsIHBmbmFtZSwgaW5maWxlKToKICAgICAgICAiIiJBZGQgdGhlIGNvbnRlbnRzIG9mIGBgaW5maWxlYGAgdG8gdGhlIHppcCB3aXRoIGZpbGUgbmFtZSBgYHBmbmFtZWBgLiIiIgogICAgICAgIGlmIGhhc2F0dHIoaW5maWxlLCAnc2VlaycpOgogICAgICAgICAgICBpbmZpbGUuc2VlaygwKQogICAgICAgIHNlbGYuemlwLndyaXRlc3RyKHBmbmFtZSwgaW5maWxlLnJlYWQoKSkKICAgICAgICBzZWxmLl9maWxlc1twZm5hbWVdID0gTm9uZSAgIyBDbGVhciB0aGUgY2FjaGVkIGZpbGUgb2JqZWN0IHRvIGZvcmNlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZpbGUgdG8gYmUgcmVhZCBmcm9tIHRoZSB6aXAgZmlsZS4KCiAgICBkZWYgX3ppcF9kZWxldGUoc2VsZiwgZm5hbWVzKToKICAgICAgICAiIiJEZWxldGUgdGhlIGZpbGVzIHdpdGggdGhlIGdpdmVuIG5hbWVzIGZyb20gdGhlIHppcCBmaWxlIChgYHNlbGYuemlwYGApLiIiIgogICAgICAgICMgU2FuaXR5IGNoZWNraW5nCiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZm5hbWVzLCAobGlzdCwgdHVwbGUpKToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZm5hbWVzIG11c3QgYmUgbGlzdCBvciB0dXBsZTogJXMiICUgKGZuYW1lcykpCiAgICAgICAgaWYgbm90IHNlbGYuemlwOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJObyB6aXAgZmlsZSB0byB3b3JrIG9uIikKICAgICAgICB6aXBwZWRmaWxlcyA9IHNlbGYuemlwLm5hbWVsaXN0KCkKICAgICAgICBmb3IgZm4gaW4gZm5hbWVzOgogICAgICAgICAgICBpZiBmbiBub3QgaW4gemlwcGVkZmlsZXM6CiAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigiRmlsZSBub3QgaW4gemlwIGFyY2hpdmU6ICVzIiAlIChmbikpCgogICAgICAgIG5ld3ppcCA9IHNlbGYuX2NyZWF0ZV90ZW1wX3ppcGZpbGUoKQogICAgICAgIG5ld3ppcC53cml0ZXN0cigncHJvamVjdC54dHAnLCBzZWxmLl9nZW5lcmF0ZV9zZXR0aW5ncygpKQoKICAgICAgICBmb3IgZm5hbWUgaW4gemlwcGVkZmlsZXM6CiAgICAgICAgICAgICMgQ29weSBhbGwgZmlsZXMgZnJvbSBzZWxmLnppcCB0aGF0IGFyZSBub3QgcHJvamVjdC54dHAgKGFscmVhZHkKICAgICAgICAgICAgIyBpbiB0aGUgbmV3IHppcCBmaWxlKSBvciBpbiBmbmFtZXMgKHRoZXkgYXJlIHRvIGJlIHJlbW92ZWQsIGFmdGVyCiAgICAgICAgICAgICMgYWxsLgogICAgICAgICAgICBpZiBmbmFtZSBpbiBmbmFtZXMgb3IgZm5hbWUgPT0gJ3Byb2plY3QueHRwJzoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIG5ld3ppcC53cml0ZXN0cihmbmFtZSwgc2VsZi56aXAucmVhZChmbmFtZSkpCgogICAgICAgIHNlbGYuX3JlcGxhY2VfcHJvamVjdF96aXAobmV3emlwKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGZvciBmbmFtZSBpbiBzZWxmLnppcC5uYW1lbGlzdCgpOgogICAgICAgICAgICBpZiBmbmFtZSBpbiBwcm9qZWN0X2ZpbGVzIG9yIGZuYW1lID09ICdwcm9qZWN0Lnh0cCc6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBuZXd6aXAud3JpdGVzdHIoZm5hbWUsIHNlbGYuemlwLnJlYWQoZm5hbWUpKQo8fGZpbV9lbmR8Pg=="]
["ec5590ba00da9d26725a16ccbe3bcd63602f7301-3","ec5590ba00da9d26725a16ccbe3bcd63602f7301","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMKIyBDb3B5cmlnaHQgMjAxMCBadXphIFNvZnR3YXJlIEZvdW5kYXRpb24KIwojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBUcmFuc2xhdGUgVG9vbGtpdC4KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKaW1wb3J0IG9zCmltcG9ydCBzaHV0aWwKaW1wb3J0IHRlbXBmaWxlCmZyb20gemlwZmlsZSBpbXBvcnQgWmlwRmlsZQoKZnJvbSB0cmFuc2xhdGUuc3RvcmFnZS5wcm9qc3RvcmUgaW1wb3J0ICoKCl9fYWxsX18gPSBbJ0J1bmRsZVByb2plY3RTdG9yZScsICdJbnZhbGlkQnVuZGxlRXJyb3InXQoKCmNsYXNzIEludmFsaWRCdW5kbGVFcnJvcihFeGNlcHRpb24pOgogICAgcGFzcwoKCmNsYXNzIEJ1bmRsZVByb2plY3RTdG9yZShQcm9qZWN0U3RvcmUpOgogICAgIiIiUmVwcmVzZW50cyBhIHRyYW5zbGF0ZSBwcm9qZWN0IGJ1bmRsZSAoemlwIGFyY2hpdmUpLiIiIgoKICAgICMgSU5JVElBTElaRVJTICMKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmbmFtZSk6CiAgICAgICAgc3VwZXIoQnVuZGxlUHJvamVjdFN0b3JlLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5fdGVtcGZpbGVzID0ge30KICAgICAgICBpZiBmbmFtZSBhbmQgb3MucGF0aC5pc2ZpbGUoZm5hbWUpOgogICAgICAgICAgICBzZWxmLmxvYWQoZm5hbWUpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi56aXAgPSBaaXBGaWxlKGZuYW1lLCAndycpCiAgICAgICAgICAgIHNlbGYuc2F2ZSgpCiAgICAgICAgICAgIHNlbGYuemlwLmNsb3NlKCkKICAgICAgICAgICAgc2VsZi56aXAgPSBaaXBGaWxlKGZuYW1lLCAnYScpCgogICAgIyBDTEFTUyBNRVRIT0RTICMKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGZyb21fcHJvamVjdChjbHMsIHByb2osIGZuYW1lPU5vbmUpOgogICAgICAgIGlmIGZuYW1lIGlzIE5vbmU6CiAgICAgICAgICAgIGZuYW1lID0gJ2J1bmRsZS56aXAnCgogICAgICAgIGJ1bmRsZSA9IEJ1bmRsZVByb2plY3RTdG9yZShmbmFtZSkKICAgICAgICBmb3IgZm4gaW4gcHJvai5zb3VyY2VmaWxlczoKICAgICAgICAgICAgYnVuZGxlLmFwcGVuZF9zb3VyY2VmaWxlKHByb2ouZ2V0X2ZpbGUoZm4pKQogICAgICAgIGZvciBmbiBpbiBwcm9qLnRyYW5zZmlsZXM6CiAgICAgICAgICAgIGJ1bmRsZS5hcHBlbmRfdHJhbnNmaWxlKHByb2ouZ2V0X2ZpbGUoZm4pKQogICAgICAgIGZvciBmbiBpbiBwcm9qLnRhcmdldGZpbGVzOgogICAgICAgICAgICBidW5kbGUuYXBwZW5kX3RhcmdldGZpbGUocHJvai5nZXRfZmlsZShmbikpCiAgICAgICAgYnVuZGxlLnNldHRpbmdzID0gcHJvai5zZXR0aW5ncy5jb3B5KCkKICAgICAgICBidW5kbGUuc2F2ZSgpCiAgICAgICAgcmV0dXJuIGJ1bmRsZQoKICAgICMgTUVUSE9EUyAjCiAgICBkZWYgYXBwZW5kX2ZpbGUoc2VsZiwgYWZpbGUsIGZuYW1lLCBmdHlwZT0ndHJhbnMnLCBkZWxldGVfb3JpZz1GYWxzZSk6CiAgICAgICAgIiIiQXBwZW5kIHRoZSBnaXZlbiBmaWxlIHRvIHRoZSBwcm9qZWN0IHdpdGggdGhlIGdpdmVuIGZpbGVuYW1lLCBtYXJrZWQKICAgICAgICAgICAgdG8gYmUgb2YgdHlwZSBgYGZ0eXBlYGAgKCdzcmMnLCAndHJhbnMnLCAndGd0JykuCgogICAgICAgICAgICA6cGFyYW0gZGVsZXRlX29yaWc6IElmIGBgVHJ1ZWBgLCBhcyBzZXQgYnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bWV0aDpgfnRyYW5zbGF0ZS5zdG9yYWdlLlByb2plY3QuY29udmVydF9mb3J3YXJkYCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYGFmaWxlYGAgaXMgZGVsZXRlZCBhZnRlciBhcHBlbmRpbmcsIGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGUuCgogICAgICAgICAgICAuLiBub3RlOjogRm9yIHRoaXMgaW1wbGVtZW50YXRpb24sIHRoZSBhcHBlbmRlZCBmaWxlIHdpbGwgYmUgZGVsZXRlZAogICAgICAgICAgICAgICAgICAgICAgZnJvbSBkaXNrIGlmIGBgZGVsZXRlX29yaWdgYCBpcyBgYFRydWVgYC4KICAgICAgICAgICAgIiIiCiAgICAgICAgaWYgZm5hbWUgYW5kIGZuYW1lIGluIHNlbGYuemlwLm5hbWVsaXN0KCk6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkZpbGUgYWxyZWFkeSBpbiBidW5kbGUgYXJjaGl2ZTogJXMiICUgKGZuYW1lKSkKICAgICAgICBpZiBub3QgZm5hbWUgYW5kIGlzaW5zdGFuY2UoYWZpbGUsIGJhc2VzdHJpbmcpIGFuZCBhZmlsZSBpbiBzZWxmLnppcC5uYW1lbGlzdCgpOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJGaWxlIGFscmVhZHkgaW4gYnVuZGxlIGFyY2hpdmU6ICVzIiAlIChhZmlsZSkpCgogICAgICAgIGFmaWxlLCBmbmFtZSA9IHN1cGVyKEJ1bmRsZVByb2plY3RTdG9yZSwgc2VsZikuYXBwZW5kX2ZpbGUoYWZpbGUsIGZuYW1lLCBmdHlwZSkKICAgICAgICBzZWxmLl96aXBfYWRkKGZuYW1lLCBhZmlsZSkKCiAgICAgICAgaWYgZGVsZXRlX29yaWcgYW5kIGhhc2F0dHIoYWZpbGUsICduYW1lJykgYW5kIGFmaWxlLm5hbWUgbm90IGluIHNlbGYuX3RlbXBmaWxlczoKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgb3MudW5saW5rKGFmaWxlLm5hbWUpCiAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICBwYXNzCgogICAgICAgIHJldHVybiBzZWxmLmdldF9maWxlKGZuYW1lKSwgZm5hbWUKCiAgICBkZWYgcmVtb3ZlX2ZpbGUoc2VsZiwgZm5hbWUsIGZ0eXBlPU5vbmUpOgogICAgICAgICIiIlJlbW92ZSB0aGUgZmlsZSB3aXRoIHRoZSBnaXZlbiBwcm9qZWN0IG5hbWUgZnJvbSB0aGUgcHJvamVjdC4iIiIKICAgICAgICBzdXBlcihCdW5kbGVQcm9qZWN0U3RvcmUsIHNlbGYpLnJlbW92ZV9maWxlKGZuYW1lLCBmdHlwZSkKICAgICAgICBzZWxmLl96aXBfZGVsZXRlKFtmbmFtZV0pCiAgICAgICAgdGVtcGZpbGVzID0gW3RtcGYgZm9yIHRtcGYsIHByamYgaW4gc2VsZi5fdGVtcGZpbGVzLml0ZXJpdGVtcygpIGlmIHByamYgPT0gZm5hbWVdCiAgICAgICAgaWYgdGVtcGZpbGVzOgogICAgICAgICAgICBmb3IgdG1wZiBpbiB0ZW1wZmlsZXM6CiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKHRtcGYpCiAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgIGRlbCBzZWxmLl90ZW1wZmlsZXNbdG1wZl0KCiAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgc3VwZXIoQnVuZGxlUHJvamVjdFN0b3JlLCBzZWxmKS5jbG9zZSgpCiAgICAgICAgc2VsZi5jbGVhbnVwKCkKICAgICAgICBzZWxmLnppcC5jbG9zZSgpCgogICAgZGVmIGNsZWFudXAoc2VsZik6CiAgICAgICAgIiIiQ2xlYW4gdXAgb3VyIG1lc3M6IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMuIiIiCiAgICAgICAgZm9yIHRlbXBmbmFtZSBpbiBzZWxmLl90ZW1wZmlsZXM6CiAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHRlbXBmbmFtZSk6CiAgICAgICAgICAgICAgICBvcy51bmxpbmsodGVtcGZuYW1lKQogICAgICAgIHNlbGYuX3RlbXBmaWxlcyA9IHt9CgogICAgZGVmIGdldF9maWxlKHNlbGYsIGZuYW1lKToKICAgICAgICAiIiJSZXRyaWV2ZSBhIHByb2plY3QgZmlsZSAoc291cmNlLCB0cmFuc2xhdGlvbiBvciB0YXJnZXQgZmlsZSkgZnJvbSB0aGUKICAgICAgICAgICAgcHJvamVjdCBhcmNoaXZlLiIiIgogICAgICAgIHJldGZpbGUgPSBOb25lCiAgICAgICAgaWYgZm5hbWUgaW4gc2VsZi5fZmlsZXMgb3IgZm5hbWUgaW4gc2VsZi56aXAubmFtZWxpc3QoKToKICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgZmlsZSBoYXMgbm90IGFscmVhZHkgYmVlbiBleHRyYWN0ZWQgdG8gYSB0ZW1wIGZpbGUKICAgICAgICAgICAgdGVtcGZuYW1lID0gW3RmbiBmb3IgdGZuIGluIHNlbGYuX3RlbXBmaWxlcyBpZiBzZWxmLl90ZW1wZmlsZXNbdGZuXSA9PSBmbmFtZV0KICAgICAgICAgICAgaWYgdGVtcGZuYW1lIGFuZCBvcy5wYXRoLmlzZmlsZSh0ZW1wZm5hbWVbMF0pOgogICAgICAgICAgICAgICAgdGVtcGZuYW1lID0gdGVtcGZuYW1lWzBdCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0ZW1wZm5hbWUgPSAnJwogICAgICAgICAgICBpZiBub3QgdGVtcGZuYW1lOgogICAgICAgICAgICAgICAgIyBFeHRyYWN0IHRoZSBmaWxlIHRvIGEgdGVtcG9yYXJ5IGZpbGUKICAgICAgICAgICAgICAgIHpmaWxlID0gc2VsZi56aXAub3BlbihmbmFtZSkKICAgICAgICAgICAgICAgIHRlbXBmbmFtZSA9IG9zLnBhdGguc3BsaXQoZm5hbWUpWy0xXQogICAgICAgICAgICAgICAgdGVtcGZkLCB0ZW1wZm5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKHN1ZmZpeD0nXycgKyB0ZW1wZm5hbWUpCiAgICAgICAgICAgICAgICBvcy5jbG9zZSh0ZW1wZmQpCiAgICAgICAgICAgICAgICBvcGVuKHRlbXBmbmFtZSwgJ3cnKS53cml0ZSh6ZmlsZS5yZWFkKCkpCiAgICAgICAgICAgIHJldGZpbGUgPSBvcGVuKHRlbXBmbmFtZSkKICAgICAgICAgICAgc2VsZi5fdGVtcGZpbGVzW3RlbXBmbmFtZV0gPSBmbmFtZQoKICAgICAgICBpZiBub3QgcmV0ZmlsZToKICAgICAgICAgICAgcmFpc2UgRmlsZU5vdEluUHJvamVjdEVycm9yKGZuYW1lKQogICAgICAgIHJldHVybiByZXRmaWxlCgogICAgZGVmIGdldF9wcm9qX2ZpbGVuYW1lKHNlbGYsIHJlYWxmbmFtZSk6CiAgICAgICAgIiIiVHJ5IGFuZCBmaW5kIGEgcHJvamVjdCBmaWxlIG5hbWUgZm9yIHRoZSBnaXZlbiByZWFsIGZpbGUgbmFtZS4iIiIKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZuYW1lID0gc3VwZXIoQnVuZGxlUHJvamVjdFN0b3JlLCBzZWxmKS5nZXRfcHJval9maWxlbmFtZShyZWFsZm5hbWUpCiAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIHZlOgogICAgICAgICAgICBmbmFtZSA9IE5vbmUKICAgICAgICBpZiBmbmFtZToKICAgICAgICAgICAgcmV0dXJuIGZuYW1lCiAgICAgICAgaWYgcmVhbGZuYW1lIGluIHNlbGYuX3RlbXBmaWxlczoKICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3RlbXBmaWxlc1tyZWFsZm5hbWVdCiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignUmVhbCBmaWxlIG5vdCBpbiBwcm9qZWN0IHN0b3JlOiAlcycgJSAocmVhbGZuYW1lKSkKCiAgICBkZWYgbG9hZChzZWxmLCB6aXBuYW1lKToKICAgICAgICAiIiJMb2FkIHRoZSBidW5kbGUgcHJvamVjdCBmcm9tIHRoZSB6aXAgZmlsZSBvZiB0aGUgZ2l2ZW4gbmFtZS4iIiIKICAgICAgICBzZWxmLnppcCA9IFppcEZpbGUoemlwbmFtZSwgbW9kZT0nYScpCiAgICAgICAgc2VsZi5fbG9hZF9zZXR0aW5ncygpCgogICAgICAgIGFwcGVuZF9zZWN0aW9uID0gewogICAgICAgICAgICAnc291cmNlcyc6IHNlbGYuX3NvdXJjZWZpbGVzLmFwcGVuZCwKICAgICAgICAgICAgJ3RhcmdldHMnOiBzZWxmLl90YXJnZXRmaWxlcy5hcHBlbmQsCiAgICAgICAgICAgICd0cmFuc2ZpbGVzJzogc2VsZi5fdHJhbnNmaWxlcy5hcHBlbmQsCiAgICAgICAgfQogICAgICAgIGZvciBzZWN0aW9uIGluICgnc291cmNlcycsICd0YXJnZXRzJywgJ3RyYW5zZmlsZXMnKToKICAgICAgICAgICAgaWYgc2VjdGlvbiBpbiBzZWxmLnNldHRpbmdzOgogICAgICAgICAgICAgICAgZm9yIGZuYW1lIGluIHNlbGYuc2V0dGluZ3Nbc2VjdGlvbl06CiAgICAgICAgICAgICAgICAgICAgYXBwZW5kX3NlY3Rpb25bc2VjdGlvbl0oZm5hbWUpCiAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZXNbZm5hbWVdID0gTm9uZQoKICAgIGRlZiBzYXZlKHNlbGYsIGZpbGVuYW1lPU5vbmUpOgogICAgICAgICIiIlNhdmUgYWxsIHByb2plY3QgZmlsZXMgdG8gdGhlIGJ1bmRsZSB6aXAgZmlsZS4iIiIKICAgICAgICBzZWxmLl91cGRhdGVfZnJvbV90ZW1wZmlsZXMoKQoKICAgICAgICBpZiBmaWxlbmFtZToKICAgICAgICAgICAgbmV3emlwID0gWmlwRmlsZShmaWxlbmFtZSwgJ3cnKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG5ld3ppcCA9IHNlbGYuX2NyZWF0ZV90ZW1wX3ppcGZpbGUoKQoKICAgICAgICAjIFdyaXRlIHByb2plY3QgZmlsZSBmb3IgdGhlIG5ldyB6aXAgYnVuZGxlCiAgICAgICAgbmV3emlwLndyaXRlc3RyKCdwcm9qZWN0Lnh0cCcsIHNlbGYuX2dlbmVyYXRlX3NldHRpbmdzKCkpCiAgICAgICAgIyBDb3B5IHByb2plY3QgZmlsZXMgZnJvbSBwcm9qZWN0IHRvIHRoZSBuZXcgemlwIGZpbGUKICAgICAgICBwcm9qZWN0X2ZpbGVzID0gc2VsZi5fc291cmNlZmlsZXMgKyBzZWxmLl90cmFuc2ZpbGVzICsgc2VsZi5fdGFyZ2V0ZmlsZXMKICAgICAgICBmb3IgZm5hbWUgaW4gcHJvamVjdF9maWxlczoKICAgICAgICAgICAgbmV3emlwLndyaXRlc3RyKGZuYW1lLCBzZWxmLmdldF9maWxlKGZuYW1lKS5yZWFkKCkpCiAgICAgICAgIyBDb3B5IGFueSBleHRyYSAobm9uLXByb2plY3QpIGZpbGVzIGZyb20gdGhlIGN1cnJlbnQgemlwCiAgICAgICAgZm9yIGZuYW1lIGluIHNlbGYuemlwLm5hbWVsaXN0KCk6CiAgICAgICAgICAgIGlmIGZuYW1lIGluIHByb2plY3RfZmlsZXMgb3IgZm5hbWUgPT0gJ3Byb2plY3QueHRwJzoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIG5ld3ppcC53cml0ZXN0cihmbmFtZSwgc2VsZi56aXAucmVhZChmbmFtZSkpCgogICAgICAgIHNlbGYuX3JlcGxhY2VfcHJvamVjdF96aXAobmV3emlwKQoKICAgIGRlZiB1cGRhdGVfZmlsZShzZWxmLCBwZm5hbWUsIGluZmlsZSk6CiAgICAgICAgIiIiVXBkYXRlcyB0aGUgZmlsZSB3aXRoIHRoZSBnaXZlbiBwcm9qZWN0IGZpbGUgbmFtZSB3aXRoIHRoZSBjb250ZW50cwogICAgICAgICAgICBvZiBgYGluZmlsZWBgLgoKICAgICAgICAgICAgOnJldHVybnM6IHRoZSByZXN1bHRzIGZyb20gOm1ldGg6YEJ1bmRsZVByb2pTdG9yZS5hcHBlbmRfZmlsZWAuIiIiCiAgICAgICAgaWYgcGZuYW1lIG5vdCBpbiBzZWxmLl9maWxlczoKICAgICAgICAgICAgcmFpc2UgRmlsZU5vdEluUHJvamVjdEVycm9yKHBmbmFtZSkKCiAgICAgICAgaWYgcGZuYW1lIG5vdCBpbiBzZWxmLnppcC5uYW1lbGlzdCgpOgogICAgICAgICAgICByZXR1cm4gc3VwZXIoQnVuZGxlUHJvamVjdFN0b3JlLCBzZWxmKS51cGRhdGVfZmlsZShwZm5hbWUsIGluZmlsZSkKCiAgICAgICAgc2VsZi5femlwX2RlbGV0ZShbcGZuYW1lXSkKICAgICAgICBzZWxmLl96aXBfYWRkKHBmbmFtZSwgaW5maWxlKQoKICAgIGRlZiBfbG9hZF9zZXR0aW5ncyhzZWxmKToKICAgICAgICAiIiJHcmFiIHRoZSBwcm9qZWN0Lnh0cCBmaWxlIGZyb20gdGhlIHppcCBmaWxlIGFuZCBsb2FkIGl0LiIiIgogICAgICAgIGlmICdwcm9qZWN0Lnh0cCcgbm90IGluIHNlbGYuemlwLm5hbWVsaXN0KCk6CiAgICAgICAgICAgIHJhaXNlIEludmFsaWRCdW5kbGVFcnJvcignTm90IGEgdHJhbnNsYXRlIHByb2plY3QgYnVuZGxlJykKICAgICAgICBzdXBlcihCdW5kbGVQcm9qZWN0U3RvcmUsIHNlbGYpLl9sb2FkX3NldHRpbmdzKHNlbGYuemlwLm9wZW4oJ3Byb2plY3QueHRwJykucmVhZCgpKQoKICAgIGRlZiBfY3JlYXRlX3RlbXBfemlwZmlsZShzZWxmKToKICAgICAgICAiIiJDcmVhdGUgYSBuZXcgemlwIGZpbGUgd2l0aCBhIHRlbXBvcmFyeSBmaWxlIG5hbWUgKHdpdGggbW9kZSAndycpLiIiIgogICAgICAgIG5ld3ppcGZkLCBuZXd6aXBmbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAocHJlZml4PSd0cmFuc2xhdGVfYnVuZGxlJywgc3VmZml4PScuemlwJykKICAgICAgICBvcy5jbG9zZShuZXd6aXBmZCkKICAgICAgICByZXR1cm4gWmlwRmlsZShuZXd6aXBmbmFtZSwgJ3cnKQoKICAgIGRlZiBfcmVwbGFjZV9wcm9qZWN0X3ppcChzZWxmLCB6ZmlsZSk6CiAgICAgICAgIiIiUmVwbGFjZSB0aGUgY3VycmVudGx5IHVzZWQgemlwIGZpbGUgKGBgc2VsZi56aXBgYCkgd2l0aCB0aGUgZ2l2ZW4gemlwCiAgICAgICAgICAgIGZpbGUuIEJhc2ljYWxseSwgYGBvcy5yZW5hbWUoemZpbGUuZmlsZW5hbWUsIHNlbGYuemlwLmZpbGVuYW1lKWBgLiIiIgogICAgICAgIGlmIG5vdCB6ZmlsZS5mcC5jbG9zZWQ6CiAgICAgICAgICAgIHpmaWxlLmNsb3NlKCkKICAgICAgICBpZiBub3Qgc2VsZi56aXAuZnAuY2xvc2VkOgogICAgICAgICAgICBzZWxmLnppcC5jbG9zZSgpCiAgICAgICAgc2h1dGlsLm1vdmUoemZpbGUuZmlsZW5hbWUsIHNlbGYuemlwLmZpbGVuYW1lKQogICAgICAgIHNlbGYuemlwID0gWmlwRmlsZShzZWxmLnppcC5maWxlbmFtZSwgbW9kZT0nYScpCgogICAgZGVmIF91cGRhdGVfZnJvbV90ZW1wZmlsZXMoc2VsZik6CiAgICAgICAgIiIiVXBkYXRlIHByb2plY3QgZmlsZXMgZnJvbSB0ZW1wb3JhcnkgZmlsZXMuIiIiCiAgICAgICAgZm9yIHRlbXBmbmFtZSBpbiBzZWxmLl90ZW1wZmlsZXM6CiAgICAgICAgICAgIHRtcCA9IG9wZW4odGVtcGZuYW1lKQogICAgICAgICAgICBzZWxmLnVwZGF0ZV9maWxlKHNlbGYuX3RlbXBmaWxlc1t0ZW1wZm5hbWVdLCB0bXApCiAgICAgICAgICAgIGlmIG5vdCB0bXAuY2xvc2VkOgogICAgICAgICAgICAgICAgdG1wLmNsb3NlKCkKCiAgICBkZWYgX3ppcF9hZGQoc2VsZiwgcGZuYW1lLCBpbmZpbGUpOgogICAgICAgICIiIkFkZCB0aGUgY29udGVudHMgb2YgYGBpbmZpbGVgYCB0byB0aGUgemlwIHdpdGggZmlsZSBuYW1lIGBgcGZuYW1lYGAuIiIiCiAgICAgICAgaWYgaGFzYXR0cihpbmZpbGUsICdzZWVrJyk6CiAgICAgICAgICAgIGluZmlsZS5zZWVrKDApCiAgICAgICAgc2VsZi56aXAud3JpdGVzdHIocGZuYW1lLCBpbmZpbGUucmVhZCgpKQogICAgICAgIHNlbGYuX2ZpbGVzW3BmbmFtZV0gPSBOb25lICAjIENsZWFyIHRoZSBjYWNoZWQgZmlsZSBvYmplY3QgdG8gZm9yY2UgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmlsZSB0byBiZSByZWFkIGZyb20gdGhlIHppcCBmaWxlLgoKICAgIGRlZiBfemlwX2RlbGV0ZShzZWxmLCBmbmFtZXMpOgogICAgICAgICIiIkRlbGV0ZSB0aGUgZmlsZXMgd2l0aCB0aGUgZ2l2ZW4gbmFtZXMgZnJvbSB0aGUgemlwIGZpbGUgKGBgc2VsZi56aXBgYCkuIiIiCiAgICAgICAgIyBTYW5pdHkgY2hlY2tpbmcKICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShmbmFtZXMsIChsaXN0LCB0dXBsZSkpOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJmbmFtZXMgbXVzdCBiZSBsaXN0IG9yIHR1cGxlOiAlcyIgJSAoZm5hbWVzKSkKICAgICAgICBpZiBub3Qgc2VsZi56aXA6Cjx8ZmltX2hvbGV8PgogICAgICAgIHppcHBlZGZpbGVzID0gc2VsZi56aXAubmFtZWxpc3QoKQogICAgICAgIGZvciBmbiBpbiBmbmFtZXM6CiAgICAgICAgICAgIGlmIGZuIG5vdCBpbiB6aXBwZWRmaWxlczoKICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJGaWxlIG5vdCBpbiB6aXAgYXJjaGl2ZTogJXMiICUgKGZuKSkKCiAgICAgICAgbmV3emlwID0gc2VsZi5fY3JlYXRlX3RlbXBfemlwZmlsZSgpCiAgICAgICAgbmV3emlwLndyaXRlc3RyKCdwcm9qZWN0Lnh0cCcsIHNlbGYuX2dlbmVyYXRlX3NldHRpbmdzKCkpCgogICAgICAgIGZvciBmbmFtZSBpbiB6aXBwZWRmaWxlczoKICAgICAgICAgICAgIyBDb3B5IGFsbCBmaWxlcyBmcm9tIHNlbGYuemlwIHRoYXQgYXJlIG5vdCBwcm9qZWN0Lnh0cCAoYWxyZWFkeQogICAgICAgICAgICAjIGluIHRoZSBuZXcgemlwIGZpbGUpIG9yIGluIGZuYW1lcyAodGhleSBhcmUgdG8gYmUgcmVtb3ZlZCwgYWZ0ZXIKICAgICAgICAgICAgIyBhbGwuCiAgICAgICAgICAgIGlmIGZuYW1lIGluIGZuYW1lcyBvciBmbmFtZSA9PSAncHJvamVjdC54dHAnOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgbmV3emlwLndyaXRlc3RyKGZuYW1lLCBzZWxmLnppcC5yZWFkKGZuYW1lKSkKCiAgICAgICAgc2VsZi5fcmVwbGFjZV9wcm9qZWN0X3ppcChuZXd6aXApCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk5vIHppcCBmaWxlIHRvIHdvcmsgb24iKQo8fGZpbV9lbmR8Pg=="]
["ec5590ba00da9d26725a16ccbe3bcd63602f7301-4","ec5590ba00da9d26725a16ccbe3bcd63602f7301","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMKIyBDb3B5cmlnaHQgMjAxMCBadXphIFNvZnR3YXJlIEZvdW5kYXRpb24KIwojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBUcmFuc2xhdGUgVG9vbGtpdC4KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cjx8ZmltX2hvbGV8PgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMKIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCgppbXBvcnQgb3MKaW1wb3J0IHNodXRpbAppbXBvcnQgdGVtcGZpbGUKZnJvbSB6aXBmaWxlIGltcG9ydCBaaXBGaWxlCgpmcm9tIHRyYW5zbGF0ZS5zdG9yYWdlLnByb2pzdG9yZSBpbXBvcnQgKgoKX19hbGxfXyA9IFsnQnVuZGxlUHJvamVjdFN0b3JlJywgJ0ludmFsaWRCdW5kbGVFcnJvciddCgoKY2xhc3MgSW52YWxpZEJ1bmRsZUVycm9yKEV4Y2VwdGlvbik6CiAgICBwYXNzCgoKY2xhc3MgQnVuZGxlUHJvamVjdFN0b3JlKFByb2plY3RTdG9yZSk6CiAgICAiIiJSZXByZXNlbnRzIGEgdHJhbnNsYXRlIHByb2plY3QgYnVuZGxlICh6aXAgYXJjaGl2ZSkuIiIiCgogICAgIyBJTklUSUFMSVpFUlMgIwogICAgZGVmIF9faW5pdF9fKHNlbGYsIGZuYW1lKToKICAgICAgICBzdXBlcihCdW5kbGVQcm9qZWN0U3RvcmUsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLl90ZW1wZmlsZXMgPSB7fQogICAgICAgIGlmIGZuYW1lIGFuZCBvcy5wYXRoLmlzZmlsZShmbmFtZSk6CiAgICAgICAgICAgIHNlbGYubG9hZChmbmFtZSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLnppcCA9IFppcEZpbGUoZm5hbWUsICd3JykKICAgICAgICAgICAgc2VsZi5zYXZlKCkKICAgICAgICAgICAgc2VsZi56aXAuY2xvc2UoKQogICAgICAgICAgICBzZWxmLnppcCA9IFppcEZpbGUoZm5hbWUsICdhJykKCiAgICAjIENMQVNTIE1FVEhPRFMgIwogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgZnJvbV9wcm9qZWN0KGNscywgcHJvaiwgZm5hbWU9Tm9uZSk6CiAgICAgICAgaWYgZm5hbWUgaXMgTm9uZToKICAgICAgICAgICAgZm5hbWUgPSAnYnVuZGxlLnppcCcKCiAgICAgICAgYnVuZGxlID0gQnVuZGxlUHJvamVjdFN0b3JlKGZuYW1lKQogICAgICAgIGZvciBmbiBpbiBwcm9qLnNvdXJjZWZpbGVzOgogICAgICAgICAgICBidW5kbGUuYXBwZW5kX3NvdXJjZWZpbGUocHJvai5nZXRfZmlsZShmbikpCiAgICAgICAgZm9yIGZuIGluIHByb2oudHJhbnNmaWxlczoKICAgICAgICAgICAgYnVuZGxlLmFwcGVuZF90cmFuc2ZpbGUocHJvai5nZXRfZmlsZShmbikpCiAgICAgICAgZm9yIGZuIGluIHByb2oudGFyZ2V0ZmlsZXM6CiAgICAgICAgICAgIGJ1bmRsZS5hcHBlbmRfdGFyZ2V0ZmlsZShwcm9qLmdldF9maWxlKGZuKSkKICAgICAgICBidW5kbGUuc2V0dGluZ3MgPSBwcm9qLnNldHRpbmdzLmNvcHkoKQogICAgICAgIGJ1bmRsZS5zYXZlKCkKICAgICAgICByZXR1cm4gYnVuZGxlCgogICAgIyBNRVRIT0RTICMKICAgIGRlZiBhcHBlbmRfZmlsZShzZWxmLCBhZmlsZSwgZm5hbWUsIGZ0eXBlPSd0cmFucycsIGRlbGV0ZV9vcmlnPUZhbHNlKToKICAgICAgICAiIiJBcHBlbmQgdGhlIGdpdmVuIGZpbGUgdG8gdGhlIHByb2plY3Qgd2l0aCB0aGUgZ2l2ZW4gZmlsZW5hbWUsIG1hcmtlZAogICAgICAgICAgICB0byBiZSBvZiB0eXBlIGBgZnR5cGVgYCAoJ3NyYycsICd0cmFucycsICd0Z3QnKS4KCiAgICAgICAgICAgIDpwYXJhbSBkZWxldGVfb3JpZzogSWYgYGBUcnVlYGAsIGFzIHNldCBieQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDptZXRoOmB+dHJhbnNsYXRlLnN0b3JhZ2UuUHJvamVjdC5jb252ZXJ0X2ZvcndhcmRgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgYWZpbGVgYCBpcyBkZWxldGVkIGFmdGVyIGFwcGVuZGluZywgaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZS4KCiAgICAgICAgICAgIC4uIG5vdGU6OiBGb3IgdGhpcyBpbXBsZW1lbnRhdGlvbiwgdGhlIGFwcGVuZGVkIGZpbGUgd2lsbCBiZSBkZWxldGVkCiAgICAgICAgICAgICAgICAgICAgICBmcm9tIGRpc2sgaWYgYGBkZWxldGVfb3JpZ2BgIGlzIGBgVHJ1ZWBgLgogICAgICAgICAgICAiIiIKICAgICAgICBpZiBmbmFtZSBhbmQgZm5hbWUgaW4gc2VsZi56aXAubmFtZWxpc3QoKToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRmlsZSBhbHJlYWR5IGluIGJ1bmRsZSBhcmNoaXZlOiAlcyIgJSAoZm5hbWUpKQogICAgICAgIGlmIG5vdCBmbmFtZSBhbmQgaXNpbnN0YW5jZShhZmlsZSwgYmFzZXN0cmluZykgYW5kIGFmaWxlIGluIHNlbGYuemlwLm5hbWVsaXN0KCk6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkZpbGUgYWxyZWFkeSBpbiBidW5kbGUgYXJjaGl2ZTogJXMiICUgKGFmaWxlKSkKCiAgICAgICAgYWZpbGUsIGZuYW1lID0gc3VwZXIoQnVuZGxlUHJvamVjdFN0b3JlLCBzZWxmKS5hcHBlbmRfZmlsZShhZmlsZSwgZm5hbWUsIGZ0eXBlKQogICAgICAgIHNlbGYuX3ppcF9hZGQoZm5hbWUsIGFmaWxlKQoKICAgICAgICBpZiBkZWxldGVfb3JpZyBhbmQgaGFzYXR0cihhZmlsZSwgJ25hbWUnKSBhbmQgYWZpbGUubmFtZSBub3QgaW4gc2VsZi5fdGVtcGZpbGVzOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBvcy51bmxpbmsoYWZpbGUubmFtZSkKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgICAgIHBhc3MKCiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2ZpbGUoZm5hbWUpLCBmbmFtZQoKICAgIGRlZiByZW1vdmVfZmlsZShzZWxmLCBmbmFtZSwgZnR5cGU9Tm9uZSk6CiAgICAgICAgIiIiUmVtb3ZlIHRoZSBmaWxlIHdpdGggdGhlIGdpdmVuIHByb2plY3QgbmFtZSBmcm9tIHRoZSBwcm9qZWN0LiIiIgogICAgICAgIHN1cGVyKEJ1bmRsZVByb2plY3RTdG9yZSwgc2VsZikucmVtb3ZlX2ZpbGUoZm5hbWUsIGZ0eXBlKQogICAgICAgIHNlbGYuX3ppcF9kZWxldGUoW2ZuYW1lXSkKICAgICAgICB0ZW1wZmlsZXMgPSBbdG1wZiBmb3IgdG1wZiwgcHJqZiBpbiBzZWxmLl90ZW1wZmlsZXMuaXRlcml0ZW1zKCkgaWYgcHJqZiA9PSBmbmFtZV0KICAgICAgICBpZiB0ZW1wZmlsZXM6CiAgICAgICAgICAgIGZvciB0bXBmIGluIHRlbXBmaWxlczoKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsodG1wZikKICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgZGVsIHNlbGYuX3RlbXBmaWxlc1t0bXBmXQoKICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICBzdXBlcihCdW5kbGVQcm9qZWN0U3RvcmUsIHNlbGYpLmNsb3NlKCkKICAgICAgICBzZWxmLmNsZWFudXAoKQogICAgICAgIHNlbGYuemlwLmNsb3NlKCkKCiAgICBkZWYgY2xlYW51cChzZWxmKToKICAgICAgICAiIiJDbGVhbiB1cCBvdXIgbWVzczogcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcy4iIiIKICAgICAgICBmb3IgdGVtcGZuYW1lIGluIHNlbGYuX3RlbXBmaWxlczoKICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUodGVtcGZuYW1lKToKICAgICAgICAgICAgICAgIG9zLnVubGluayh0ZW1wZm5hbWUpCiAgICAgICAgc2VsZi5fdGVtcGZpbGVzID0ge30KCiAgICBkZWYgZ2V0X2ZpbGUoc2VsZiwgZm5hbWUpOgogICAgICAgICIiIlJldHJpZXZlIGEgcHJvamVjdCBmaWxlIChzb3VyY2UsIHRyYW5zbGF0aW9uIG9yIHRhcmdldCBmaWxlKSBmcm9tIHRoZQogICAgICAgICAgICBwcm9qZWN0IGFyY2hpdmUuIiIiCiAgICAgICAgcmV0ZmlsZSA9IE5vbmUKICAgICAgICBpZiBmbmFtZSBpbiBzZWxmLl9maWxlcyBvciBmbmFtZSBpbiBzZWxmLnppcC5uYW1lbGlzdCgpOgogICAgICAgICAgICAjIENoZWNrIGlmIHRoZSBmaWxlIGhhcyBub3QgYWxyZWFkeSBiZWVuIGV4dHJhY3RlZCB0byBhIHRlbXAgZmlsZQogICAgICAgICAgICB0ZW1wZm5hbWUgPSBbdGZuIGZvciB0Zm4gaW4gc2VsZi5fdGVtcGZpbGVzIGlmIHNlbGYuX3RlbXBmaWxlc1t0Zm5dID09IGZuYW1lXQogICAgICAgICAgICBpZiB0ZW1wZm5hbWUgYW5kIG9zLnBhdGguaXNmaWxlKHRlbXBmbmFtZVswXSk6CiAgICAgICAgICAgICAgICB0ZW1wZm5hbWUgPSB0ZW1wZm5hbWVbMF0KICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHRlbXBmbmFtZSA9ICcnCiAgICAgICAgICAgIGlmIG5vdCB0ZW1wZm5hbWU6CiAgICAgICAgICAgICAgICAjIEV4dHJhY3QgdGhlIGZpbGUgdG8gYSB0ZW1wb3JhcnkgZmlsZQogICAgICAgICAgICAgICAgemZpbGUgPSBzZWxmLnppcC5vcGVuKGZuYW1lKQogICAgICAgICAgICAgICAgdGVtcGZuYW1lID0gb3MucGF0aC5zcGxpdChmbmFtZSlbLTFdCiAgICAgICAgICAgICAgICB0ZW1wZmQsIHRlbXBmbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoc3VmZml4PSdfJyArIHRlbXBmbmFtZSkKICAgICAgICAgICAgICAgIG9zLmNsb3NlKHRlbXBmZCkKICAgICAgICAgICAgICAgIG9wZW4odGVtcGZuYW1lLCAndycpLndyaXRlKHpmaWxlLnJlYWQoKSkKICAgICAgICAgICAgcmV0ZmlsZSA9IG9wZW4odGVtcGZuYW1lKQogICAgICAgICAgICBzZWxmLl90ZW1wZmlsZXNbdGVtcGZuYW1lXSA9IGZuYW1lCgogICAgICAgIGlmIG5vdCByZXRmaWxlOgogICAgICAgICAgICByYWlzZSBGaWxlTm90SW5Qcm9qZWN0RXJyb3IoZm5hbWUpCiAgICAgICAgcmV0dXJuIHJldGZpbGUKCiAgICBkZWYgZ2V0X3Byb2pfZmlsZW5hbWUoc2VsZiwgcmVhbGZuYW1lKToKICAgICAgICAiIiJUcnkgYW5kIGZpbmQgYSBwcm9qZWN0IGZpbGUgbmFtZSBmb3IgdGhlIGdpdmVuIHJlYWwgZmlsZSBuYW1lLiIiIgogICAgICAgIHRyeToKICAgICAgICAgICAgZm5hbWUgPSBzdXBlcihCdW5kbGVQcm9qZWN0U3RvcmUsIHNlbGYpLmdldF9wcm9qX2ZpbGVuYW1lKHJlYWxmbmFtZSkKICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgdmU6CiAgICAgICAgICAgIGZuYW1lID0gTm9uZQogICAgICAgIGlmIGZuYW1lOgogICAgICAgICAgICByZXR1cm4gZm5hbWUKICAgICAgICBpZiByZWFsZm5hbWUgaW4gc2VsZi5fdGVtcGZpbGVzOgogICAgICAgICAgICByZXR1cm4gc2VsZi5fdGVtcGZpbGVzW3JlYWxmbmFtZV0KICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdSZWFsIGZpbGUgbm90IGluIHByb2plY3Qgc3RvcmU6ICVzJyAlIChyZWFsZm5hbWUpKQoKICAgIGRlZiBsb2FkKHNlbGYsIHppcG5hbWUpOgogICAgICAgICIiIkxvYWQgdGhlIGJ1bmRsZSBwcm9qZWN0IGZyb20gdGhlIHppcCBmaWxlIG9mIHRoZSBnaXZlbiBuYW1lLiIiIgogICAgICAgIHNlbGYuemlwID0gWmlwRmlsZSh6aXBuYW1lLCBtb2RlPSdhJykKICAgICAgICBzZWxmLl9sb2FkX3NldHRpbmdzKCkKCiAgICAgICAgYXBwZW5kX3NlY3Rpb24gPSB7CiAgICAgICAgICAgICdzb3VyY2VzJzogc2VsZi5fc291cmNlZmlsZXMuYXBwZW5kLAogICAgICAgICAgICAndGFyZ2V0cyc6IHNlbGYuX3RhcmdldGZpbGVzLmFwcGVuZCwKICAgICAgICAgICAgJ3RyYW5zZmlsZXMnOiBzZWxmLl90cmFuc2ZpbGVzLmFwcGVuZCwKICAgICAgICB9CiAgICAgICAgZm9yIHNlY3Rpb24gaW4gKCdzb3VyY2VzJywgJ3RhcmdldHMnLCAndHJhbnNmaWxlcycpOgogICAgICAgICAgICBpZiBzZWN0aW9uIGluIHNlbGYuc2V0dGluZ3M6CiAgICAgICAgICAgICAgICBmb3IgZm5hbWUgaW4gc2VsZi5zZXR0aW5nc1tzZWN0aW9uXToKICAgICAgICAgICAgICAgICAgICBhcHBlbmRfc2VjdGlvbltzZWN0aW9uXShmbmFtZSkKICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlc1tmbmFtZV0gPSBOb25lCgogICAgZGVmIHNhdmUoc2VsZiwgZmlsZW5hbWU9Tm9uZSk6CiAgICAgICAgIiIiU2F2ZSBhbGwgcHJvamVjdCBmaWxlcyB0byB0aGUgYnVuZGxlIHppcCBmaWxlLiIiIgogICAgICAgIHNlbGYuX3VwZGF0ZV9mcm9tX3RlbXBmaWxlcygpCgogICAgICAgIGlmIGZpbGVuYW1lOgogICAgICAgICAgICBuZXd6aXAgPSBaaXBGaWxlKGZpbGVuYW1lLCAndycpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgbmV3emlwID0gc2VsZi5fY3JlYXRlX3RlbXBfemlwZmlsZSgpCgogICAgICAgICMgV3JpdGUgcHJvamVjdCBmaWxlIGZvciB0aGUgbmV3IHppcCBidW5kbGUKICAgICAgICBuZXd6aXAud3JpdGVzdHIoJ3Byb2plY3QueHRwJywgc2VsZi5fZ2VuZXJhdGVfc2V0dGluZ3MoKSkKICAgICAgICAjIENvcHkgcHJvamVjdCBmaWxlcyBmcm9tIHByb2plY3QgdG8gdGhlIG5ldyB6aXAgZmlsZQogICAgICAgIHByb2plY3RfZmlsZXMgPSBzZWxmLl9zb3VyY2VmaWxlcyArIHNlbGYuX3RyYW5zZmlsZXMgKyBzZWxmLl90YXJnZXRmaWxlcwogICAgICAgIGZvciBmbmFtZSBpbiBwcm9qZWN0X2ZpbGVzOgogICAgICAgICAgICBuZXd6aXAud3JpdGVzdHIoZm5hbWUsIHNlbGYuZ2V0X2ZpbGUoZm5hbWUpLnJlYWQoKSkKICAgICAgICAjIENvcHkgYW55IGV4dHJhIChub24tcHJvamVjdCkgZmlsZXMgZnJvbSB0aGUgY3VycmVudCB6aXAKICAgICAgICBmb3IgZm5hbWUgaW4gc2VsZi56aXAubmFtZWxpc3QoKToKICAgICAgICAgICAgaWYgZm5hbWUgaW4gcHJvamVjdF9maWxlcyBvciBmbmFtZSA9PSAncHJvamVjdC54dHAnOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgbmV3emlwLndyaXRlc3RyKGZuYW1lLCBzZWxmLnppcC5yZWFkKGZuYW1lKSkKCiAgICAgICAgc2VsZi5fcmVwbGFjZV9wcm9qZWN0X3ppcChuZXd6aXApCgogICAgZGVmIHVwZGF0ZV9maWxlKHNlbGYsIHBmbmFtZSwgaW5maWxlKToKICAgICAgICAiIiJVcGRhdGVzIHRoZSBmaWxlIHdpdGggdGhlIGdpdmVuIHByb2plY3QgZmlsZSBuYW1lIHdpdGggdGhlIGNvbnRlbnRzCiAgICAgICAgICAgIG9mIGBgaW5maWxlYGAuCgogICAgICAgICAgICA6cmV0dXJuczogdGhlIHJlc3VsdHMgZnJvbSA6bWV0aDpgQnVuZGxlUHJvalN0b3JlLmFwcGVuZF9maWxlYC4iIiIKICAgICAgICBpZiBwZm5hbWUgbm90IGluIHNlbGYuX2ZpbGVzOgogICAgICAgICAgICByYWlzZSBGaWxlTm90SW5Qcm9qZWN0RXJyb3IocGZuYW1lKQoKICAgICAgICBpZiBwZm5hbWUgbm90IGluIHNlbGYuemlwLm5hbWVsaXN0KCk6CiAgICAgICAgICAgIHJldHVybiBzdXBlcihCdW5kbGVQcm9qZWN0U3RvcmUsIHNlbGYpLnVwZGF0ZV9maWxlKHBmbmFtZSwgaW5maWxlKQoKICAgICAgICBzZWxmLl96aXBfZGVsZXRlKFtwZm5hbWVdKQogICAgICAgIHNlbGYuX3ppcF9hZGQocGZuYW1lLCBpbmZpbGUpCgogICAgZGVmIF9sb2FkX3NldHRpbmdzKHNlbGYpOgogICAgICAgICIiIkdyYWIgdGhlIHByb2plY3QueHRwIGZpbGUgZnJvbSB0aGUgemlwIGZpbGUgYW5kIGxvYWQgaXQuIiIiCiAgICAgICAgaWYgJ3Byb2plY3QueHRwJyBub3QgaW4gc2VsZi56aXAubmFtZWxpc3QoKToKICAgICAgICAgICAgcmFpc2UgSW52YWxpZEJ1bmRsZUVycm9yKCdOb3QgYSB0cmFuc2xhdGUgcHJvamVjdCBidW5kbGUnKQogICAgICAgIHN1cGVyKEJ1bmRsZVByb2plY3RTdG9yZSwgc2VsZikuX2xvYWRfc2V0dGluZ3Moc2VsZi56aXAub3BlbigncHJvamVjdC54dHAnKS5yZWFkKCkpCgogICAgZGVmIF9jcmVhdGVfdGVtcF96aXBmaWxlKHNlbGYpOgogICAgICAgICIiIkNyZWF0ZSBhIG5ldyB6aXAgZmlsZSB3aXRoIGEgdGVtcG9yYXJ5IGZpbGUgbmFtZSAod2l0aCBtb2RlICd3JykuIiIiCiAgICAgICAgbmV3emlwZmQsIG5ld3ppcGZuYW1lID0gdGVtcGZpbGUubWtzdGVtcChwcmVmaXg9J3RyYW5zbGF0ZV9idW5kbGUnLCBzdWZmaXg9Jy56aXAnKQogICAgICAgIG9zLmNsb3NlKG5ld3ppcGZkKQogICAgICAgIHJldHVybiBaaXBGaWxlKG5ld3ppcGZuYW1lLCAndycpCgogICAgZGVmIF9yZXBsYWNlX3Byb2plY3RfemlwKHNlbGYsIHpmaWxlKToKICAgICAgICAiIiJSZXBsYWNlIHRoZSBjdXJyZW50bHkgdXNlZCB6aXAgZmlsZSAoYGBzZWxmLnppcGBgKSB3aXRoIHRoZSBnaXZlbiB6aXAKICAgICAgICAgICAgZmlsZS4gQmFzaWNhbGx5LCBgYG9zLnJlbmFtZSh6ZmlsZS5maWxlbmFtZSwgc2VsZi56aXAuZmlsZW5hbWUpYGAuIiIiCiAgICAgICAgaWYgbm90IHpmaWxlLmZwLmNsb3NlZDoKICAgICAgICAgICAgemZpbGUuY2xvc2UoKQogICAgICAgIGlmIG5vdCBzZWxmLnppcC5mcC5jbG9zZWQ6CiAgICAgICAgICAgIHNlbGYuemlwLmNsb3NlKCkKICAgICAgICBzaHV0aWwubW92ZSh6ZmlsZS5maWxlbmFtZSwgc2VsZi56aXAuZmlsZW5hbWUpCiAgICAgICAgc2VsZi56aXAgPSBaaXBGaWxlKHNlbGYuemlwLmZpbGVuYW1lLCBtb2RlPSdhJykKCiAgICBkZWYgX3VwZGF0ZV9mcm9tX3RlbXBmaWxlcyhzZWxmKToKICAgICAgICAiIiJVcGRhdGUgcHJvamVjdCBmaWxlcyBmcm9tIHRlbXBvcmFyeSBmaWxlcy4iIiIKICAgICAgICBmb3IgdGVtcGZuYW1lIGluIHNlbGYuX3RlbXBmaWxlczoKICAgICAgICAgICAgdG1wID0gb3Blbih0ZW1wZm5hbWUpCiAgICAgICAgICAgIHNlbGYudXBkYXRlX2ZpbGUoc2VsZi5fdGVtcGZpbGVzW3RlbXBmbmFtZV0sIHRtcCkKICAgICAgICAgICAgaWYgbm90IHRtcC5jbG9zZWQ6CiAgICAgICAgICAgICAgICB0bXAuY2xvc2UoKQoKICAgIGRlZiBfemlwX2FkZChzZWxmLCBwZm5hbWUsIGluZmlsZSk6CiAgICAgICAgIiIiQWRkIHRoZSBjb250ZW50cyBvZiBgYGluZmlsZWBgIHRvIHRoZSB6aXAgd2l0aCBmaWxlIG5hbWUgYGBwZm5hbWVgYC4iIiIKICAgICAgICBpZiBoYXNhdHRyKGluZmlsZSwgJ3NlZWsnKToKICAgICAgICAgICAgaW5maWxlLnNlZWsoMCkKICAgICAgICBzZWxmLnppcC53cml0ZXN0cihwZm5hbWUsIGluZmlsZS5yZWFkKCkpCiAgICAgICAgc2VsZi5fZmlsZXNbcGZuYW1lXSA9IE5vbmUgICMgQ2xlYXIgdGhlIGNhY2hlZCBmaWxlIG9iamVjdCB0byBmb3JjZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaWxlIHRvIGJlIHJlYWQgZnJvbSB0aGUgemlwIGZpbGUuCgogICAgZGVmIF96aXBfZGVsZXRlKHNlbGYsIGZuYW1lcyk6CiAgICAgICAgIiIiRGVsZXRlIHRoZSBmaWxlcyB3aXRoIHRoZSBnaXZlbiBuYW1lcyBmcm9tIHRoZSB6aXAgZmlsZSAoYGBzZWxmLnppcGBgKS4iIiIKICAgICAgICAjIFNhbml0eSBjaGVja2luZwogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGZuYW1lcywgKGxpc3QsIHR1cGxlKSk6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZuYW1lcyBtdXN0IGJlIGxpc3Qgb3IgdHVwbGU6ICVzIiAlIChmbmFtZXMpKQogICAgICAgIGlmIG5vdCBzZWxmLnppcDoKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm8gemlwIGZpbGUgdG8gd29yayBvbiIpCiAgICAgICAgemlwcGVkZmlsZXMgPSBzZWxmLnppcC5uYW1lbGlzdCgpCiAgICAgICAgZm9yIGZuIGluIGZuYW1lczoKICAgICAgICAgICAgaWYgZm4gbm90IGluIHppcHBlZGZpbGVzOgogICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoIkZpbGUgbm90IGluIHppcCBhcmNoaXZlOiAlcyIgJSAoZm4pKQoKICAgICAgICBuZXd6aXAgPSBzZWxmLl9jcmVhdGVfdGVtcF96aXBmaWxlKCkKICAgICAgICBuZXd6aXAud3JpdGVzdHIoJ3Byb2plY3QueHRwJywgc2VsZi5fZ2VuZXJhdGVfc2V0dGluZ3MoKSkKCiAgICAgICAgZm9yIGZuYW1lIGluIHppcHBlZGZpbGVzOgogICAgICAgICAgICAjIENvcHkgYWxsIGZpbGVzIGZyb20gc2VsZi56aXAgdGhhdCBhcmUgbm90IHByb2plY3QueHRwIChhbHJlYWR5CiAgICAgICAgICAgICMgaW4gdGhlIG5ldyB6aXAgZmlsZSkgb3IgaW4gZm5hbWVzICh0aGV5IGFyZSB0byBiZSByZW1vdmVkLCBhZnRlcgogICAgICAgICAgICAjIGFsbC4KICAgICAgICAgICAgaWYgZm5hbWUgaW4gZm5hbWVzIG9yIGZuYW1lID09ICdwcm9qZWN0Lnh0cCc6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBuZXd6aXAud3JpdGVzdHIoZm5hbWUsIHNlbGYuemlwLnJlYWQoZm5hbWUpKQoKICAgICAgICBzZWxmLl9yZXBsYWNlX3Byb2plY3RfemlwKG5ld3ppcCkKPHxmaW1fc3VmZml4fD4KIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwo8fGZpbV9lbmR8Pg=="]
["d43ffba1c1cb5f19368d3220fe29de71f653248b-1","d43ffba1c1cb5f19368d3220fe29de71f653248b","PHxmaW1fcHJlZml4fD4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkhISBEbyBub3QgY2hhbmdlIHRoaXMgbWFudWFsbHkhICAgICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICMKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKZnJvbSBweWRhbnRpYyBpbXBvcnQgRmllbGQKCmZyb20gLi5iYXNlX29iamVjdCBpbXBvcnQgQmFzZU9iamVjdAoKCmNsYXNzIEdldFN0aWNrZXJTZXQoQmFzZU9iamVjdCk6CiAgICAiIiIKICAgIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBzdGlja2VyIHNldCBieSBpdHMgaWRlbnRpZmllcgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAKICAgIDpwYXJhbSBzZXRfaWQ6IElkZW50aWZpZXIgb2YgdGhlIHN0aWNrZXIgc2V0CiAgICA6dHlwZSBzZXRfaWQ6IDpjbGFzczpgaW50YAogICAgCjx8ZmltX2VuZHw+"]
["d43ffba1c1cb5f19368d3220fe29de71f653248b-2","d43ffba1c1cb5f19368d3220fe29de71f653248b","PHxmaW1fcHJlZml4fD4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkhISBEbyBub3QgY2hhbmdlIHRoaXMgbWFudWFsbHkhICAgICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICMKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKZnJvbSBweWRhbnRpYyBpbXBvcnQgRmllbGQKCmZyb20gLi5iYXNlX29iamVjdCBpbXBvcnQgQmFzZU9iamVjdAoKCmNsYXNzIEdldFN0aWNrZXJTZXQoQmFzZU9iamVjdCk6CiAgICAiIiIKICAgIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBzdGlja2VyIHNldCBieSBpdHMgaWRlbnRpZmllcgogICAgCiAgICA6cGFyYW0gc2V0X2lkOiBJZGVudGlmaWVyIG9mIHRoZSBzdGlja2VyIHNldAogICAgOnR5cGUgc2V0X2lkOiA6Y2xhc3M6YGludGAKICAgIAogICAgIiIiCgogICAgSUQ6IHN0ciA9IEZpZWxkKCJnZXRTdGlja2VyU2V0IiwgYWxpYXM9IkB0eXBlIikKICAgIHNldF9pZDogaW50Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgcmVhZChxOiBkaWN0KSAtPiBHZXRTdGlja2VyU2V0OgogICAgICAgIHJldHVybiBHZXRTdGlja2VyU2V0LmNvbnN0cnVjdCgqKnEpCjx8ZmltX2VuZHw+"]
["d412c78df191e47ef242ca9b9fe069e1d4ff3a4b-1","d412c78df191e47ef242ca9b9fe069e1d4ff3a4b","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMS1wcmVzZW50LCBOaWtlLCBJbmMuCiMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIwojIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZS0yLjAgbGljZW5zZSBmb3VuZCBpbgojIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCgoKaW1wb3J0IG1vY2sKaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIGtub2Nrb2ZmLnV0aWxpdGllcy5wZXJpb2QgaW1wb3J0IGdlbmVyYXRlX3BlcmlvZHNfZnJvbV9pbnRlcnZhbHMKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKCgpjbGFzcyBUZXN0UGVyaW9kKHVuaXR0ZXN0LlRlc3RDYXNlKToKCiAgICBAbW9jay5wYXRjaCgia25vY2tvZmYudXRpbGl0aWVzLmRhdGUuaW50ZXJ2YWwubm93IiwKICAgICAgICAgICAgICAgIG1vY2suTWFnaWNNb2NrKHJldHVybl92YWx1ZT1kYXRldGltZSgyMDIwLCA1LCA0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0LCA1NywgMTYpKSkKICAgIGRlZiB0ZXN0X2dlbmVyYXRlX3BlcmlvZHMoc2VsZik6CiAgICAgICAgYWN0dWFsX3BlcmlvZHMgPSBnZW5lcmF0ZV9wZXJpb2RzX2Zyb21faW50ZXJ2YWxzKAogICAgICAgICAgICBib3BfaW50ZXJ2YWw9J1t0b2RheSAtU1UsICs1dykgfCB3JywKICAgICAgICAgICAgZW9wX2ludGVydmFsPSdbdG9kYXkgK1NBLCArNXcpIHwgdycsCiAgICAgICAgKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgIGV4cGVjdGVkX3BlcmlvZHMgPSBbCiAgICAgICAgICAgIChkYXRldGltZSgyMDIwLCA1LCAzKS5kYXRlKCksIGRhdGV0aW1lKDIwMjAsIDUsIDkpLmRhdGUoKSksCiAgICAgICAgICAgIChkYXRldGltZSgyMDIwLCA1LCAxMCkuZGF0ZSgpLCBkYXRldGltZSgyMDIwLCA1LCAxNikuZGF0ZSgpKSwKPHxmaW1fZW5kfD4="]
["2be844c047885ff240a5d49a9a5503476eaf4dc7-1","2be844c047885ff240a5d49a9a5503476eaf4dc7","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMgQFRpbWUgICAgOiAyMDE5LTA2LTEzIDE0OjUzCiMgQEF1dGhvciAgOiBsaXVwYW4KIyBAU2l0ZSAgICA6IAojIEBGaWxlICAgIDogZGVtbzQucHkKIyBAU29mdHdhcmU6IFB5Q2hhcm0KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IGNzdgoKd2l0aCBvcGVuKCdkYXRhLmNzdicsICd3JykgYXMgY3N2ZmlsZToKICAgIGZpZWxkbmFtZXMgPSBbJ2lkJywgJ25hbWUnLCAnYWdlJ10KPHxmaW1fZW5kfD4="]
["2be844c047885ff240a5d49a9a5503476eaf4dc7-2","2be844c047885ff240a5d49a9a5503476eaf4dc7","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMgQFRpbWUgICAgOiAyMDE5LTA2LTEzIDE0OjUzCiMgQEF1dGhvciAgOiBsaXVwYW4KIyBAU2l0ZSAgICA6IAojIEBGaWxlICAgIDogZGVtbzQucHkKIyBAU29mdHdhcmU6IFB5Q2hhcm0KCmltcG9ydCBjc3YKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4Kd2l0aCBvcGVuKCdkYXRhLmNzdicsICd3JykgYXMgY3N2ZmlsZToKICAgIGZpZWxkbmFtZXMgPSBbJ2lkJywgJ25hbWUnLCAnYWdlJ10KICAgIHdyaXRlciA9IGNzdi5EaWN0V3JpdGVyKGNzdmZpbGUsIGZpZWxkbmFtZXM9ZmllbGRuYW1lcykKICAgIHdyaXRlci53cml0ZWhlYWRlcigpCjx8ZmltX2VuZHw+"]
["2be844c047885ff240a5d49a9a5503476eaf4dc7-3","2be844c047885ff240a5d49a9a5503476eaf4dc7","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMgQFRpbWUgICAgOiAyMDE5LTA2LTEzIDE0OjUzCiMgQEF1dGhvciAgOiBsaXVwYW4KIyBAU2l0ZSAgICA6IAojIEBGaWxlICAgIDogZGVtbzQucHkKIyBAU29mdHdhcmU6IFB5Q2hhcm0KCmltcG9ydCBjc3YKPHxmaW1faG9sZXw+CiAgICB3cml0ZXIud3JpdGVoZWFkZXIoKQogICAgd3JpdGVyLndyaXRlcm93KHsnaWQnOiAnMTAwMDEnLCAnbmFtZSc6ICdNaWtlJywgJ2FnZSc6IDIwfSkKICAgIHdyaXRlci53cml0ZXJvdyh7J2lkJzogJzEwMDAyJywgJ25hbWUnOiAnQm9iJywgJ2FnZSc6IDIyfSkKICAgIHdyaXRlci53cml0ZXJvdyh7J2lkJzogJzEwMDAzJywgJ25hbWUnOiAnSm9yZGFuJywgJ2FnZSc6IDIxfSkKPHxmaW1fc3VmZml4fD4KCndpdGggb3BlbignZGF0YS5jc3YnLCAndycpIGFzIGNzdmZpbGU6CiAgICBmaWVsZG5hbWVzID0gWydpZCcsICduYW1lJywgJ2FnZSddCiAgICB3cml0ZXIgPSBjc3YuRGljdFdyaXRlcihjc3ZmaWxlLCBmaWVsZG5hbWVzPWZpZWxkbmFtZXMpCjx8ZmltX2VuZHw+"]
["2be844c047885ff240a5d49a9a5503476eaf4dc7-4","2be844c047885ff240a5d49a9a5503476eaf4dc7","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMgQFRpbWUgICAgOiAyMDE5LTA2LTEzIDE0OjUzCiMgQEF1dGhvciAgOiBsaXVwYW4KPHxmaW1faG9sZXw+CmltcG9ydCBjc3YKCndpdGggb3BlbignZGF0YS5jc3YnLCAndycpIGFzIGNzdmZpbGU6CiAgICBmaWVsZG5hbWVzID0gWydpZCcsICduYW1lJywgJ2FnZSddCiAgICB3cml0ZXIgPSBjc3YuRGljdFdyaXRlcihjc3ZmaWxlLCBmaWVsZG5hbWVzPWZpZWxkbmFtZXMpCiAgICB3cml0ZXIud3JpdGVoZWFkZXIoKQogICAgd3JpdGVyLndyaXRlcm93KHsnaWQnOiAnMTAwMDEnLCAnbmFtZSc6ICdNaWtlJywgJ2FnZSc6IDIwfSkKICAgIHdyaXRlci53cml0ZXJvdyh7J2lkJzogJzEwMDAyJywgJ25hbWUnOiAnQm9iJywgJ2FnZSc6IDIyfSkKICAgIHdyaXRlci53cml0ZXJvdyh7J2lkJzogJzEwMDAzJywgJ25hbWUnOiAnSm9yZGFuJywgJ2FnZSc6IDIxfSkKPHxmaW1fc3VmZml4fD4KIyBAU2l0ZSAgICA6IAojIEBGaWxlICAgIDogZGVtbzQucHkKIyBAU29mdHdhcmU6IFB5Q2hhcm0KCjx8ZmltX2VuZHw+"]
["82139fe1128b8a49f8a81ec958ae7cf1e623117a-1","82139fe1128b8a49f8a81ec958ae7cf1e623117a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgb3MsIHN5cwoKdHJ5OgogICAgZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cApleGNlcHQgSW1wb3J0RXJyb3I6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGZyb20gZGlzdHJpYnV0ZV9zZXR1cCBpbXBvcnQgdXNlX3NldHVwdG9vbHMKICAgIHVzZV9zZXR1cHRvb2xzKCkKICAgIGZyb20gc2V0dXB0b29scyBpbXBvcnQgc2V0dXAKCjx8ZmltX2VuZHw+"]
["82139fe1128b8a49f8a81ec958ae7cf1e623117a-2","82139fe1128b8a49f8a81ec958ae7cf1e623117a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgb3MsIHN5cwoKdHJ5OgogICAgZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cApleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBmcm9tIGRpc3RyaWJ1dGVfc2V0dXAgaW1wb3J0IHVzZV9zZXR1cHRvb2xzCiAgICB1c2Vfc2V0dXB0b29scygpCiAgICBmcm9tIHNldHVwdG9vbHMgaW1wb3J0IHNldHVwCgp3aXRoIG9wZW4oJ3JhZnQvdmVyc2lvbi50eHQnKSBhcyB2OgogICAgdmVyc2lvbiA9IHYucmVhZCgpLnN0cmlwKCkKCmNsYXNzaWZpZXJzID0gJycnCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KRGV2ZWxvcG1lbnQgU3RhdHVzIDo6IDEgLSBQbGFubmluZwpMaWNlbnNlIDo6IFB1YmxpYyBEb21haW4KUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNgpQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43Cjx8ZmltX2VuZHw+"]
["82139fe1128b8a49f8a81ec958ae7cf1e623117a-3","82139fe1128b8a49f8a81ec958ae7cf1e623117a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgb3MsIHN5cwoKPHxmaW1faG9sZXw+CiAgICB1c2Vfc2V0dXB0b29scygpCiAgICBmcm9tIHNldHVwdG9vbHMgaW1wb3J0IHNldHVwCgp3aXRoIG9wZW4oJ3JhZnQvdmVyc2lvbi50eHQnKSBhcyB2OgogICAgdmVyc2lvbiA9IHYucmVhZCgpLnN0cmlwKCkKCmNsYXNzaWZpZXJzID0gJycnCkRldmVsb3BtZW50IFN0YXR1cyA6OiAxIC0gUGxhbm5pbmcKTGljZW5zZSA6OiBQdWJsaWMgRG9tYWluClByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjYKUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNwpQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy4zClByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzLjQKJycnCgpzZXR1cChuYW1lPSdweS1yYWZ0JywKICAgICAgdmVyc2lvbj12ZXJzaW9uLAogICAgICBkZXNjcmlwdGlvbj0nVGhlIFJBRlQgQ29uc2Vuc3VzIEFsZ29yaXRobScsCiAgICAgIGF1dGhvcj0nVG9ieSBCdXJyZXNzJywKICAgICAgYXV0aG9yX2VtYWlsPSdrdXJpbkBkZWxldGUub3JnJywKICAgICAgY2xhc3NpZmllcnMgPSBmaWx0ZXIoTm9uZSwgY2xhc3NpZmllcnMuc3BsaXQoJ1xuJykpLAogICAgICBwYWNrYWdlX2RhdGE9eycnOiBbJ3ZlcnNpb24udHh0J119LAogICAgICBwYWNrYWdlcz1bJ3JhZnQnXSwKICAgICAgaW5zdGFsbF9yZXF1aXJlcz0oJ21zZ3BhY2stcHl0aG9uJykpCjx8ZmltX3N1ZmZpeHw+CnRyeToKICAgIGZyb20gc2V0dXB0b29scyBpbXBvcnQgc2V0dXAKZXhjZXB0IEltcG9ydEVycm9yOgogICAgZnJvbSBkaXN0cmlidXRlX3NldHVwIGltcG9ydCB1c2Vfc2V0dXB0b29scwo8fGZpbV9lbmR8Pg=="]
["154110802a7cd610e03c47151142ba7db14211af-1","154110802a7cd610e03c47151142ba7db14211af","PHxmaW1fcHJlZml4fD4KIyBUaGlzIGZpbGUgaXMgb25seSBpbnRlbmRlZCBmb3IgZGV2ZWxvcG1lbnQgcHVycG9zZXMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIGt1YmVmbG93Lmt1YmVmbG93LmNpIGltcG9ydCBiYXNlX3J1bm5lcgoKYmFzZV9ydW5uZXIubWFpbihjb21wb25lbnRfbmFtZT0ibm90ZWJvb2tfc2VydmVycy5ub3RlYm9va19zZXJ2ZXJfY29kZXNlcnZlcl9weXRob25fdGVzdHMiLAogICAgICAgICAgICAgICAgIHdvcmtmbG93X25hbWU9Im5iLWNvZGVzZXJ2ZXItcHl0aG9uLXRlc3RzIikKPHxmaW1fZW5kfD4="]
["2e1f94159926b875013b36aeb872b8e2dd2c6c1e-1","2e1f94159926b875013b36aeb872b8e2dd2c6c1e","PHxmaW1fcHJlZml4fD4KY2xhc3MgTW90b2NhKCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGN2LCBycG1fY3YsIGtnZm0sIHJwbV9rZ2ZtLCBrZyk6CiAgICAgICAgc2VsZi5fbW9kZWwgPSBtb2RlbAogICAgICAgIHNlbGYuX2N2ID0gY3YKICAgICAgICBzZWxmLl9ycG1fY3YgPSBycG1fY3YKICAgICAgICBzZWxmLl9rZ2ZtID0ga2dmbQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5fcnBtX2tnZm0gPSBycG1fa2dmbQogICAgICAgIHNlbGYuX2tnID0ga2cKCiAgICAgICAgIyB3ZWlnaHQvcG93ZXI6Cjx8ZmltX2VuZHw+"]
["2e1f94159926b875013b36aeb872b8e2dd2c6c1e-2","2e1f94159926b875013b36aeb872b8e2dd2c6c1e","PHxmaW1fcHJlZml4fD4KY2xhc3MgTW90b2NhKCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGN2LCBycG1fY3YsIGtnZm0sIHJwbV9rZ2ZtLCBrZyk6CiAgICAgICAgc2VsZi5fbW9kZWwgPSBtb2RlbAogICAgICAgIHNlbGYuX2N2ID0gY3YKICAgICAgICBzZWxmLl9ycG1fY3YgPSBycG1fY3YKICAgICAgICBzZWxmLl9rZ2ZtID0ga2dmbQogICAgICAgIHNlbGYuX3JwbV9rZ2ZtID0gcnBtX2tnZm0KICAgICAgICBzZWxmLl9rZyA9IGtnCgogICAgICAgICMgd2VpZ2h0L3Bvd2VyOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5fa2dfY3YgPSBzZWxmLl9rZyAvIHNlbGYuX2N2CgogICAgICAgICMgd2VpZ2h0L3Rvcms6CiAgICAgICAgIyB0b3JrKnJwbSByZXN1bHRzIGluIGEgbG93ZXIgcmF0aW8KPHxmaW1fZW5kfD4="]
["2e1f94159926b875013b36aeb872b8e2dd2c6c1e-3","2e1f94159926b875013b36aeb872b8e2dd2c6c1e","PHxmaW1fcHJlZml4fD4KY2xhc3MgTW90b2NhKCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGN2LCBycG1fY3YsIGtnZm0sIHJwbV9rZ2ZtLCBrZyk6CiAgICAgICAgc2VsZi5fbW9kZWwgPSBtb2RlbAogICAgICAgIHNlbGYuX2N2ID0gY3YKICAgICAgICBzZWxmLl9ycG1fY3YgPSBycG1fY3YKICAgICAgICBzZWxmLl9rZ2ZtID0ga2dmbQogICAgICAgIHNlbGYuX3JwbV9rZ2ZtID0gcnBtX2tnZm0KICAgICAgICBzZWxmLl9rZyA9IGtnCgogICAgICAgICMgd2VpZ2h0L3Bvd2VyOgogICAgICAgIHNlbGYuX2tnX2N2ID0gc2VsZi5fa2cgLyBzZWxmLl9jdgoKICAgICAgICAjIHdlaWdodC90b3JrOgo8fGZpbV9ob2xlfD4KICAgICAgICAjIGluZGV4MQogICAgICAgIHNlbGYuX2luZGV4ID0gc2VsZi5fa2dfY3YgKyBzZWxmLl9rZ19rZ2ZtCgoKY2xhc3MgR2FyYWdlKCk6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5fbW90b2NhcyA9IFtdCgogICAgZGVmIGFkZF9tb3RvY2Eoc2VsZiwgbW9kZWwsIGN2LCBycG1fY3YsIGtnZm0sIHJwbV9rZ2ZtLCBrZyk6CiAgICAgICAgc2VsZi5fbW90b2Nhcy5hcHBlbmQoTW90b2NhKG1vZGVsLCBjdiwgcnBtX2N2LCBrZ2ZtLCBycG1fa2dmbSwga2cpKQoKICAgIGRlZiByZW1vdmVfbW90b2NhKHNlbGYsIHBvc2l0aW9uKToKICAgICAgICBzZWxmLl9tb3RvY2FzLnBvcChwb3NpdGlvbikKPHxmaW1fc3VmZml4fD4KICAgICAgICAjIHRvcmsqcnBtIHJlc3VsdHMgaW4gYSBsb3dlciByYXRpbwogICAgICAgICMgdG9yay9ycG0gcmVzdWx0cyBpbiBoaWdoZXIgcmF0aW8KICAgICAgICBzZWxmLl9rZ19rZ2ZtID0gc2VsZi5fa2cgLyAoc2VsZi5fa2dmbSAvIHNlbGYuX3JwbV9rZ2ZtKQoKPHxmaW1fZW5kfD4="]
["8ae63f6c844f9a71fdf3f08289a9085ba56ce515-1","8ae63f6c844f9a71fdf3f08289a9085ba56ce515","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cyAKaW1wb3J0IG9zLnBhdGggI3VzZWQgdG8gY2hlY2sgaWYgZmlsZSBleGlzdHMKCmNsYXNzIE1hdHJpeDoKCiAgI3Rha2VzIGluIGEgZmlsZXBhdGggYW5kIGNyZWF0ZXMgdGhlIHNlbGYubWF0cml4IGZyb20gdGhlIHRleHQgZmlsZQogIGRlZiBfX2luaXRfXyhzZWxmLGZpbGVQYXRoKToKICAgIG1hdHJpeCA9IFtdCiAgICB3aGlsZSBub3Qgb3MucGF0aC5leGlzdHMoZmlsZVBhdGgpOgogICAgICBmaWxlUGF0aCA9IHJhd19pbnB1dCgiRmlsZSBEb2VzIG5vdCBleGlzdCwgUGxlYXNlIGVudGVyIGFnYWluOiAiKQogICAgZm9yIGxpbmUgaW4gb3BlbihmaWxlUGF0aCk6CiAgICAgIHRlbXAgPSBbXQogICAgICBmb3IgYyBpbiBsaW5lOgogICAgICAgIHRlbXAuYXBwZW5kKGMpCiAgICAgIG1hdHJpeC5hcHBlbmQodGVtcCkKICAgIHNlbGYubWF0cml4ID0gbWF0cml4CiAgICBzZWxmLmdldFBvaW50cygpCiAgICBzZWxmLnBhcmVudE1hcCA9IHt9ICN1c2VkIHRvIGhvbGQgcGFyZW50cyBhbmQgdGhlIG51bWJlciBvZiBzdGVwcyBmcm9tIHRoZSBzdGFydAogICAgc2VsZi5zUGF0aCA9IFtdICNob2xkcyB0aGUgc2hvcnRlc3QgcGF0aAogICAgc2VsZi5jb3VudFRpbWUgPSAwICNudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiB0aGUgZGZzCgoKICAjcHJpbnRzIHRoZSBtYXRyaXggZ2l2ZW4gdG8gaXQgb24gdGhlIHNjcmVlbgogIGRlZiBwcmludE1hdHJpeChzZWxmKToKICAgIGZvciBhcnJheSBpbiBzZWxmLm1hdHJpeDoKICAgICAgZm9yIGVsZW0gaW4gYXJyYXk6CiAgICAgICAgcHJpbnQgZWxlbSwKICAgICAgcHJpbnQKCgogICNnZXRzIHRoZSBzdGFydCBhbmQgZW5kIHBvaW50cyBmcm9tIHRoZSBtYXRyaXgsIGlmIHRoZXkgZG9uJ3QgZXhpc3QKICAjaWYgd2lsbCBleGl0IHRoZSBwcm9ncmFtCiAgZGVmIGdldFBvaW50cyhzZWxmKToKICAgIHNlbGYuc3RhcnQgPSAiJSIKICAgIHNlbGYuZW5kID0gIiUiCiAgICBmb3IgaW5kbSwgYXJyYXkgaW4gZW51bWVyYXRlKHNlbGYubWF0cml4KToKICAgICAgZm9yIGluZGEsIGVsZW0gaW4gZW51bWVyYXRlKGFycmF5KToKICAgICAgICBpZiBlbGVtID09ICJTIjoKICAgICAgICAgIHNlbGYuc3RhcnQgPSAoaW5kbSxpbmRhKQogICAgICAgICAgcHJpbnQgIlN0YXJ0ID0gIixzZWxmLnN0YXJ0CiAgICAgICAgaWYgZWxlbSA9PSAiRSI6CiAgICAgICAgICBzZWxmLmVuZCA9IChpbmRtLGluZGEpCiAgICAgICAgICBwcmludCAiRW5kID0gIixzZWxmLmVuZAoKICAgICNjaGVjayBpZiBzdGFydCBhbmQgZW5kIGV4aXN0cyBpbiB0aGUgbWF0cml4CiAgICBpZiBzZWxmLnN0YXJ0ID09ICIlIiBvciBzZWxmLmVuZCA9PSAiJSI6CiAgICAgIHByaW50ICJFaXRoZXIgU3RhcnQgb3IgRW5kIHdhcyBub3QgaW4gbWF6ZSIKICAgICAgc3lzLmV4aXQoKQoKCiAgI2RmcyB1c2luZyBhIHN0YWNrIHRvIGZpbmQgcGF0aHMKICBkZWYgZGZzKHNlbGYpOgogICAgI3NldCB1cCB0aGUgc3RhY2sgYW5kIGRmcwogICAgc3RhY2sgPSBbXQogICAgdmlzaXRlZCA9IFtdCiAgICBzdGFjay5hcHBlbmQoc2VsZi5zdGFydCkKICAgIHNlbGYucGFyZW50TWFwW3NlbGYuc3RhcnRdID0gWyJzdGFydCIsMF0KICAgIHdoaWxlIHN0YWNrOgogICAgICBwYXJlbnQgPSBzdGFjay5wb3AoKQogICAgICBpZiBwYXJlbnQgaW4gdmlzaXRlZDoKICAgICAgICBjb250aW51ZQogICAgICB2aXNpdGVkLmFwcGVuZChwYXJlbnQpCiAgICAgIGNoaWxkcmVuID0gc2VsZi5nZXRDaGlsZHJlbihwYXJlbnQpCiAgICAgIGZvciBjaGlsZCBpbiBjaGlsZHJlbjoKICAgICAgICBzdGFjay5hcHBlbmQoY2hpbGQpCiAgICAgICAgI2NoZWNrcyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgcGFyZW50IHRvIHJlcGxhY2UgaWYgc3RlcCBjb3VudCBpcyBsb3dlcgogICAgICAgIGlmIGNoaWxkIGluIHNlbGYucGFyZW50TWFwIGFuZCBzZWxmLnBhcmVudE1hcFtwYXJlbnRdWzFdKzEgPiBzZWxmLnBhcmVudE1hcFtjaGlsZF1bMV06CiAgICAgICAgICBjb250aW51ZQogICAgICAgIGVsc2U6CiAgICAgICAgICBzZWxmLnBhcmVudE1hcFtjaGlsZF0gPSBbcGFyZW50LHNlbGYucGFyZW50TWFwW3BhcmVudF1bMV0rMV0KICAgICAgICAgIHN0YWNrLmFwcGVuZChwYXJlbnQpCgogICAgc2VsZi5jb3VudFRpbWUgPSBzZWxmLmNvdW50VGltZSArIDEKICAgICNjaGVjayBpZiB0aGVyZSBpcyBubyBwYXRoIGZyb20gdGhlIHN0YXJ0IHRvIHRoZSBlbmQKICAgIGlmIHNlbGYuZW5kIG5vdCBpbiBzZWxmLnBhcmVudE1hcDoKICAgICAgcHJpbnQgIlRoZXJlIGlzIG5vdCBwYXRoIHRvIHRoZSBFbmQiCiAgICAgIHN5cy5leGl0KCkKICAgIHNlbGYucmV0dXJuUGF0aCgpCiAgICAjY2FsbCB0aGUgCiAgICBpZihzZWxmLmNvdW50VGltZSA8IDQpOgogICAgICBzZWxmLmRmcygpCiAgICAKCgoKICAjdXNlZCB0byBnZXQgdGhlIGNvbm5lY3QgY2hpbGRyZW4gb2YgdGhlIHBhcmVudCBwYXNzZWQgaW4KICAjdXNlZCB0cnkgc3RhdG1lbnRzIHRvIGNhdGNoIG91dCBvZiBpbmRleCBleGNlcHRpb25zIGFuZCB0cmVhdHMgdGhlbSBhcyB3YWxscwogIGRlZiBnZXRDaGlsZHJlbihzZWxmLHBhcmVudCk6CiAgICAjaGF2ZSB0aGUgZGlmZmVybnQgY29vcmRzIG9mIHRoZSBwYXJlbnQKICAgIGluZG0gPSBwYXJlbnRbMF0KICAgIGluZGEgPSBwYXJlbnRbMV0KICAgIGNoaWxkcmVuID0gW10KICAgIGZ1bmNMaXN0ID0gW10KCiAgICAgICNjaGVja3MgdG8gdGhlIHRvcCBvZiB0aGUgcGFyZW50CiAgICBkZWYgY2hlY2tUb3AoKTogCiAgICAgIHRyeToKICAgICAgICBpZiBzZWxmLm1hdHJpeFtpbmRtKzFdW2luZGFdID09ICIgIiBvciBzZWxmLm1hdHJpeFtpbmRtKzFdW2luZGFdID09ICJFIjoKICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgoaW5kbSsxLGluZGEpKQogICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICBwYXNzCgogICAgZGVmIGNoZWNrQm90dG9tKCk6CiAgICAgIHRyeToKICAgICAgICBpZiBzZWxmLm1hdHJpeFtpbmRtLTFdW2luZGFdID09ICIgIiBvciBzZWxmLm1hdHJpeFtpbmRtLTFdW2luZGFdID09ICJFIjoKICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgoaW5kbS0xLGluZGEpKQogICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICBwYXNzCiAgICAKICAgICNjaGVja3MgdG8gdGhlIGxlZnQgb2YgdGhlIHBhcmVudAogICAgZGVmIGNoZWNrTGVmdCgpOgogICAgICB0cnk6CiAgICAgICAgaWYgc2VsZi5tYXRyaXhbaW5kbV1baW5kYSsxXSA9PSAiICIgb3Igc2VsZi5tYXRyaXhbaW5kbV1baW5kYSsxXSA9PSAiRSI6CiAgICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKGluZG0saW5kYSsxKSkKICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgcGFzcwoKICAgICNjaGVja3MgdG8gdGhlIHJpZ2h0IG9mIHRoZSBwYXJlbnQKICAgIGRlZiBjaGVja1JpZ2h0KCk6CiAgICAgIHRyeToKICAgICAgICBpZiBzZWxmLm1hdHJpeFtpbmRtXVtpbmRhLTFdID09ICIgIiBvciBzZWxmLm1hdHJpeFtpbmRtXVtpbmRhLTFdID09ICJFIjoKICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgoaW5kbSxpbmRhLTEpKQogICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICBwYXNzCgogICAgI21ha2UgbGlzdHMgZm9yIHRoZSBkaWZmZXJudCBwb3NzaWJsZSBmdW5jIGNhbGwgb3JkZXJzCiAgICBmdW5jT3B0aW9uMSA9IFtjaGVja0JvdHRvbSxjaGVja1RvcCxjaGVja1JpZ2h0LGNoZWNrTGVmdF0gCiAgICBmdW5jT3B0aW9uMiA9ICBbY2hlY2tMZWZ0LGNoZWNrQm90dG9tLGNoZWNrVG9wLGNoZWNrUmlnaHRdCiAgICBmdW5jT3B0aW9uMyA9IFtjaGVja1JpZ2h0LGNoZWNrTGVmdCxjaGVja0JvdHRvbSxjaGVja1RvcF0KICAgIGZ1bmNPcHRpb240ID0gW2NoZWNrVG9wLGNoZWNrUmlnaHQsY2hlY2tMZWZ0LGNoZWNrQm90dG9tXQoKICAgICNjcmVhdGUgYSBtYXN0ZXIgbGlzdCBvZiBhbGwgZnVuY3Mgb3JkZXIgcG9zc2libGl0aWVzCiAgICBmdW5jTGlzdCA9IFtmdW5jT3B0aW9uMSxmdW5jT3B0aW9uMixmdW5jT3B0aW9uMyxmdW5jT3B0aW9uNF0KICAKICAgICNkZXBlbmRpbmcgb24gdGhlIGN5Y2xlLCBjYWxsIHRoZSBkaWZmZXJlbnQgZnVuYyBvcmRlcnMKICAgIGZvciBmIGluIGZ1bmNMaXN0W3NlbGYuY291bnRUaW1lXToKICAgICAgZigpCgogICAgI3JldHVybiB0aGUgY2hpbGRyZW4KICAgIHJldHVybiBjaGlsZHJlbgoKICAjcmV0dXJucyB0aGUgc2hvcnRzIHBhdGggZnJvbSB0aGUgZW5kCiAgZGVmIHJldHVyblBhdGgoc2VsZik6CiAgICBjdXJyID0gc2VsZi5lbmQKICAgIHRlbXAgPSBbXQogICAgd2hpbGUgY3VyciAhPSAic3RhcnQiOgogICAgICB0ZW1wLmFwcGVuZChjdXJyKQogICAgICBjdXJyID0gc2VsZi5wYXJlbnRNYXBbY3Vycl1bMF0KICAgIAogICAgI2lmIGZpcnN0IHRpbWUgdGhyb3VnaCBzZXQgc2hvcnRlc3QgcGF0aCB0byB0ZW1wCiAgICAjZWxzZSBjaGVjayBpZiB0ZW1wIGlzIHRoZSBzaG9ydGVzdCBwYXRoIGFuZCByZXBsYWNlCiAgICBpZihzZWxmLmNvdW50VGltZSA9PSAxKToKICAgICAgc2VsZi5zUGF0aCA9IHRlbXBbOl0KICAgIGVsaWYobGVuKHRlbXApIDwgbGVuKHNlbGYuc1BhdGgpKToKICAgICAgc2VsZi5zUGF0aCA9IHRlbXBbOl0KCgogICNwdXRzIHRoZSBwYXRocyBvbiB0aGUgbWF0cml4IHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIKICBkZWYgc2hvd1BhdGgoc2VsZik6CiAgICBwcmludCAiIgogICAgcHJpbnQgIlNob3J0ZXN0IHBhdGggc3RlcCBjb3VudCBpcyAiLGxlbihzZWxmLnNQYXRoKS0xCiAgICBmb3Igc3RlcHMgaW4gc2VsZi5zUGF0aDoKICAgICAgc2VsZi5tYXRyaXhbc3RlcHNbMF1dW3N0ZXBzWzFdXSA9IGJjb2xvcnMuT0tHUkVFTisiKyIrYmNvbG9ycy5FTkRDCiAgICBzZWxmLm1hdHJpeFtzZWxmLnN0YXJ0WzBdXVtzZWxmLnN0YXJ0WzFdXSA9ICJTIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBzZWxmLm1hdHJpeFtzZWxmLmVuZFswXV1bc2VsZi5lbmRbMV1dID0gIkUiCiAgICBzZWxmLnByaW50TWF0cml4KCkKCjx8ZmltX2VuZHw+"]
["8ae63f6c844f9a71fdf3f08289a9085ba56ce515-2","8ae63f6c844f9a71fdf3f08289a9085ba56ce515","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cyAKaW1wb3J0IG9zLnBhdGggI3VzZWQgdG8gY2hlY2sgaWYgZmlsZSBleGlzdHMKCmNsYXNzIE1hdHJpeDoKCiAgI3Rha2VzIGluIGEgZmlsZXBhdGggYW5kIGNyZWF0ZXMgdGhlIHNlbGYubWF0cml4IGZyb20gdGhlIHRleHQgZmlsZQogIGRlZiBfX2luaXRfXyhzZWxmLGZpbGVQYXRoKToKICAgIG1hdHJpeCA9IFtdCiAgICB3aGlsZSBub3Qgb3MucGF0aC5leGlzdHMoZmlsZVBhdGgpOgogICAgICBmaWxlUGF0aCA9IHJhd19pbnB1dCgiRmlsZSBEb2VzIG5vdCBleGlzdCwgUGxlYXNlIGVudGVyIGFnYWluOiAiKQogICAgZm9yIGxpbmUgaW4gb3BlbihmaWxlUGF0aCk6CiAgICAgIHRlbXAgPSBbXQogICAgICBmb3IgYyBpbiBsaW5lOgogICAgICAgIHRlbXAuYXBwZW5kKGMpCiAgICAgIG1hdHJpeC5hcHBlbmQodGVtcCkKICAgIHNlbGYubWF0cml4ID0gbWF0cml4CiAgICBzZWxmLmdldFBvaW50cygpCiAgICBzZWxmLnBhcmVudE1hcCA9IHt9ICN1c2VkIHRvIGhvbGQgcGFyZW50cyBhbmQgdGhlIG51bWJlciBvZiBzdGVwcyBmcm9tIHRoZSBzdGFydAogICAgc2VsZi5zUGF0aCA9IFtdICNob2xkcyB0aGUgc2hvcnRlc3QgcGF0aAogICAgc2VsZi5jb3VudFRpbWUgPSAwICNudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiB0aGUgZGZzCgoKICAjcHJpbnRzIHRoZSBtYXRyaXggZ2l2ZW4gdG8gaXQgb24gdGhlIHNjcmVlbgogIGRlZiBwcmludE1hdHJpeChzZWxmKToKICAgIGZvciBhcnJheSBpbiBzZWxmLm1hdHJpeDoKICAgICAgZm9yIGVsZW0gaW4gYXJyYXk6Cjx8ZmltX2hvbGV8PgogICAgICBwcmludAoKCiAgI2dldHMgdGhlIHN0YXJ0IGFuZCBlbmQgcG9pbnRzIGZyb20gdGhlIG1hdHJpeCwgaWYgdGhleSBkb24ndCBleGlzdAogICNpZiB3aWxsIGV4aXQgdGhlIHByb2dyYW0KICBkZWYgZ2V0UG9pbnRzKHNlbGYpOgogICAgc2VsZi5zdGFydCA9ICIlIgogICAgc2VsZi5lbmQgPSAiJSIKICAgIGZvciBpbmRtLCBhcnJheSBpbiBlbnVtZXJhdGUoc2VsZi5tYXRyaXgpOgogICAgICBmb3IgaW5kYSwgZWxlbSBpbiBlbnVtZXJhdGUoYXJyYXkpOgogICAgICAgIGlmIGVsZW0gPT0gIlMiOgogICAgICAgICAgc2VsZi5zdGFydCA9IChpbmRtLGluZGEpCiAgICAgICAgICBwcmludCAiU3RhcnQgPSAiLHNlbGYuc3RhcnQKICAgICAgICBpZiBlbGVtID09ICJFIjoKICAgICAgICAgIHNlbGYuZW5kID0gKGluZG0saW5kYSkKICAgICAgICAgIHByaW50ICJFbmQgPSAiLHNlbGYuZW5kCgogICAgI2NoZWNrIGlmIHN0YXJ0IGFuZCBlbmQgZXhpc3RzIGluIHRoZSBtYXRyaXgKICAgIGlmIHNlbGYuc3RhcnQgPT0gIiUiIG9yIHNlbGYuZW5kID09ICIlIjoKICAgICAgcHJpbnQgIkVpdGhlciBTdGFydCBvciBFbmQgd2FzIG5vdCBpbiBtYXplIgogICAgICBzeXMuZXhpdCgpCgoKICAjZGZzIHVzaW5nIGEgc3RhY2sgdG8gZmluZCBwYXRocwogIGRlZiBkZnMoc2VsZik6CiAgICAjc2V0IHVwIHRoZSBzdGFjayBhbmQgZGZzCiAgICBzdGFjayA9IFtdCiAgICB2aXNpdGVkID0gW10KICAgIHN0YWNrLmFwcGVuZChzZWxmLnN0YXJ0KQogICAgc2VsZi5wYXJlbnRNYXBbc2VsZi5zdGFydF0gPSBbInN0YXJ0IiwwXQogICAgd2hpbGUgc3RhY2s6CiAgICAgIHBhcmVudCA9IHN0YWNrLnBvcCgpCiAgICAgIGlmIHBhcmVudCBpbiB2aXNpdGVkOgogICAgICAgIGNvbnRpbnVlCiAgICAgIHZpc2l0ZWQuYXBwZW5kKHBhcmVudCkKICAgICAgY2hpbGRyZW4gPSBzZWxmLmdldENoaWxkcmVuKHBhcmVudCkKICAgICAgZm9yIGNoaWxkIGluIGNoaWxkcmVuOgogICAgICAgIHN0YWNrLmFwcGVuZChjaGlsZCkKICAgICAgICAjY2hlY2tzIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBwYXJlbnQgdG8gcmVwbGFjZSBpZiBzdGVwIGNvdW50IGlzIGxvd2VyCiAgICAgICAgaWYgY2hpbGQgaW4gc2VsZi5wYXJlbnRNYXAgYW5kIHNlbGYucGFyZW50TWFwW3BhcmVudF1bMV0rMSA+IHNlbGYucGFyZW50TWFwW2NoaWxkXVsxXToKICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZWxzZToKICAgICAgICAgIHNlbGYucGFyZW50TWFwW2NoaWxkXSA9IFtwYXJlbnQsc2VsZi5wYXJlbnRNYXBbcGFyZW50XVsxXSsxXQogICAgICAgICAgc3RhY2suYXBwZW5kKHBhcmVudCkKCiAgICBzZWxmLmNvdW50VGltZSA9IHNlbGYuY291bnRUaW1lICsgMQogICAgI2NoZWNrIGlmIHRoZXJlIGlzIG5vIHBhdGggZnJvbSB0aGUgc3RhcnQgdG8gdGhlIGVuZAogICAgaWYgc2VsZi5lbmQgbm90IGluIHNlbGYucGFyZW50TWFwOgogICAgICBwcmludCAiVGhlcmUgaXMgbm90IHBhdGggdG8gdGhlIEVuZCIKICAgICAgc3lzLmV4aXQoKQogICAgc2VsZi5yZXR1cm5QYXRoKCkKICAgICNjYWxsIHRoZSAKICAgIGlmKHNlbGYuY291bnRUaW1lIDwgNCk6CiAgICAgIHNlbGYuZGZzKCkKICAgIAoKCgogICN1c2VkIHRvIGdldCB0aGUgY29ubmVjdCBjaGlsZHJlbiBvZiB0aGUgcGFyZW50IHBhc3NlZCBpbgogICN1c2VkIHRyeSBzdGF0bWVudHMgdG8gY2F0Y2ggb3V0IG9mIGluZGV4IGV4Y2VwdGlvbnMgYW5kIHRyZWF0cyB0aGVtIGFzIHdhbGxzCiAgZGVmIGdldENoaWxkcmVuKHNlbGYscGFyZW50KToKICAgICNoYXZlIHRoZSBkaWZmZXJudCBjb29yZHMgb2YgdGhlIHBhcmVudAogICAgaW5kbSA9IHBhcmVudFswXQogICAgaW5kYSA9IHBhcmVudFsxXQogICAgY2hpbGRyZW4gPSBbXQogICAgZnVuY0xpc3QgPSBbXQoKICAgICAgI2NoZWNrcyB0byB0aGUgdG9wIG9mIHRoZSBwYXJlbnQKICAgIGRlZiBjaGVja1RvcCgpOiAKICAgICAgdHJ5OgogICAgICAgIGlmIHNlbGYubWF0cml4W2luZG0rMV1baW5kYV0gPT0gIiAiIG9yIHNlbGYubWF0cml4W2luZG0rMV1baW5kYV0gPT0gIkUiOgogICAgICAgICAgY2hpbGRyZW4uYXBwZW5kKChpbmRtKzEsaW5kYSkpCiAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgogICAgICAgIHBhc3MKCiAgICBkZWYgY2hlY2tCb3R0b20oKToKICAgICAgdHJ5OgogICAgICAgIGlmIHNlbGYubWF0cml4W2luZG0tMV1baW5kYV0gPT0gIiAiIG9yIHNlbGYubWF0cml4W2luZG0tMV1baW5kYV0gPT0gIkUiOgogICAgICAgICAgY2hpbGRyZW4uYXBwZW5kKChpbmRtLTEsaW5kYSkpCiAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgogICAgICAgIHBhc3MKICAgIAogICAgI2NoZWNrcyB0byB0aGUgbGVmdCBvZiB0aGUgcGFyZW50CiAgICBkZWYgY2hlY2tMZWZ0KCk6CiAgICAgIHRyeToKICAgICAgICBpZiBzZWxmLm1hdHJpeFtpbmRtXVtpbmRhKzFdID09ICIgIiBvciBzZWxmLm1hdHJpeFtpbmRtXVtpbmRhKzFdID09ICJFIjoKICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgoaW5kbSxpbmRhKzEpKQogICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICBwYXNzCgogICAgI2NoZWNrcyB0byB0aGUgcmlnaHQgb2YgdGhlIHBhcmVudAogICAgZGVmIGNoZWNrUmlnaHQoKToKICAgICAgdHJ5OgogICAgICAgIGlmIHNlbGYubWF0cml4W2luZG1dW2luZGEtMV0gPT0gIiAiIG9yIHNlbGYubWF0cml4W2luZG1dW2luZGEtMV0gPT0gIkUiOgogICAgICAgICAgY2hpbGRyZW4uYXBwZW5kKChpbmRtLGluZGEtMSkpCiAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgogICAgICAgIHBhc3MKCiAgICAjbWFrZSBsaXN0cyBmb3IgdGhlIGRpZmZlcm50IHBvc3NpYmxlIGZ1bmMgY2FsbCBvcmRlcnMKICAgIGZ1bmNPcHRpb24xID0gW2NoZWNrQm90dG9tLGNoZWNrVG9wLGNoZWNrUmlnaHQsY2hlY2tMZWZ0XSAKICAgIGZ1bmNPcHRpb24yID0gIFtjaGVja0xlZnQsY2hlY2tCb3R0b20sY2hlY2tUb3AsY2hlY2tSaWdodF0KICAgIGZ1bmNPcHRpb24zID0gW2NoZWNrUmlnaHQsY2hlY2tMZWZ0LGNoZWNrQm90dG9tLGNoZWNrVG9wXQogICAgZnVuY09wdGlvbjQgPSBbY2hlY2tUb3AsY2hlY2tSaWdodCxjaGVja0xlZnQsY2hlY2tCb3R0b21dCgogICAgI2NyZWF0ZSBhIG1hc3RlciBsaXN0IG9mIGFsbCBmdW5jcyBvcmRlciBwb3NzaWJsaXRpZXMKICAgIGZ1bmNMaXN0ID0gW2Z1bmNPcHRpb24xLGZ1bmNPcHRpb24yLGZ1bmNPcHRpb24zLGZ1bmNPcHRpb240XQogIAogICAgI2RlcGVuZGluZyBvbiB0aGUgY3ljbGUsIGNhbGwgdGhlIGRpZmZlcmVudCBmdW5jIG9yZGVycwogICAgZm9yIGYgaW4gZnVuY0xpc3Rbc2VsZi5jb3VudFRpbWVdOgogICAgICBmKCkKCiAgICAjcmV0dXJuIHRoZSBjaGlsZHJlbgogICAgcmV0dXJuIGNoaWxkcmVuCgogICNyZXR1cm5zIHRoZSBzaG9ydHMgcGF0aCBmcm9tIHRoZSBlbmQKICBkZWYgcmV0dXJuUGF0aChzZWxmKToKICAgIGN1cnIgPSBzZWxmLmVuZAogICAgdGVtcCA9IFtdCiAgICB3aGlsZSBjdXJyICE9ICJzdGFydCI6CiAgICAgIHRlbXAuYXBwZW5kKGN1cnIpCiAgICAgIGN1cnIgPSBzZWxmLnBhcmVudE1hcFtjdXJyXVswXQogICAgCiAgICAjaWYgZmlyc3QgdGltZSB0aHJvdWdoIHNldCBzaG9ydGVzdCBwYXRoIHRvIHRlbXAKICAgICNlbHNlIGNoZWNrIGlmIHRlbXAgaXMgdGhlIHNob3J0ZXN0IHBhdGggYW5kIHJlcGxhY2UKICAgIGlmKHNlbGYuY291bnRUaW1lID09IDEpOgogICAgICBzZWxmLnNQYXRoID0gdGVtcFs6XQogICAgZWxpZihsZW4odGVtcCkgPCBsZW4oc2VsZi5zUGF0aCkpOgogICAgICBzZWxmLnNQYXRoID0gdGVtcFs6XQoKCiAgI3B1dHMgdGhlIHBhdGhzIG9uIHRoZSBtYXRyaXggdG8gZGlzcGxheSB0byB0aGUgdXNlcgogIGRlZiBzaG93UGF0aChzZWxmKToKICAgIHByaW50ICIiCiAgICBwcmludCAiU2hvcnRlc3QgcGF0aCBzdGVwIGNvdW50IGlzICIsbGVuKHNlbGYuc1BhdGgpLTEKICAgIGZvciBzdGVwcyBpbiBzZWxmLnNQYXRoOgogICAgICBzZWxmLm1hdHJpeFtzdGVwc1swXV1bc3RlcHNbMV1dID0gYmNvbG9ycy5PS0dSRUVOKyIrIitiY29sb3JzLkVOREMKICAgIHNlbGYubWF0cml4W3NlbGYuc3RhcnRbMF1dW3NlbGYuc3RhcnRbMV1dID0gIlMiCiAgICBzZWxmLm1hdHJpeFtzZWxmLmVuZFswXV1bc2VsZi5lbmRbMV1dID0gIkUiCiAgICBzZWxmLnByaW50TWF0cml4KCkKCiNjbGFzcyB0byBoYW5kbGUgdGhlIGNvbG9ycwpjbGFzcyBiY29sb3JzOgogIEhFQURFUiA9ICdcMDMzWzk1bScKICBPS0JMVUUgPSAnXDAzM1s5NG0nCiAgT0tHUkVFTiA9ICdcMDMzWzkybScKICBXQVJOSU5HID0gJ1wwMzNbOTNtJwogIEZBSUwgPSAnXDAzM1s5MW0nCiAgRU5EQyA9ICdcMDMzWzBtJwo8fGZpbV9zdWZmaXh8PgogICAgICAgIHByaW50IGVsZW0sCjx8ZmltX2VuZHw+"]
["8ae63f6c844f9a71fdf3f08289a9085ba56ce515-3","8ae63f6c844f9a71fdf3f08289a9085ba56ce515","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cyAKaW1wb3J0IG9zLnBhdGggI3VzZWQgdG8gY2hlY2sgaWYgZmlsZSBleGlzdHMKCmNsYXNzIE1hdHJpeDoKCiAgI3Rha2VzIGluIGEgZmlsZXBhdGggYW5kIGNyZWF0ZXMgdGhlIHNlbGYubWF0cml4IGZyb20gdGhlIHRleHQgZmlsZQogIGRlZiBfX2luaXRfXyhzZWxmLGZpbGVQYXRoKToKICAgIG1hdHJpeCA9IFtdCiAgICB3aGlsZSBub3Qgb3MucGF0aC5leGlzdHMoZmlsZVBhdGgpOgogICAgICBmaWxlUGF0aCA9IHJhd19pbnB1dCgiRmlsZSBEb2VzIG5vdCBleGlzdCwgUGxlYXNlIGVudGVyIGFnYWluOiAiKQogICAgZm9yIGxpbmUgaW4gb3BlbihmaWxlUGF0aCk6CiAgICAgIHRlbXAgPSBbXQogICAgICBmb3IgYyBpbiBsaW5lOgogICAgICAgIHRlbXAuYXBwZW5kKGMpCiAgICAgIG1hdHJpeC5hcHBlbmQodGVtcCkKICAgIHNlbGYubWF0cml4ID0gbWF0cml4CiAgICBzZWxmLmdldFBvaW50cygpCiAgICBzZWxmLnBhcmVudE1hcCA9IHt9ICN1c2VkIHRvIGhvbGQgcGFyZW50cyBhbmQgdGhlIG51bWJlciBvZiBzdGVwcyBmcm9tIHRoZSBzdGFydAogICAgc2VsZi5zUGF0aCA9IFtdICNob2xkcyB0aGUgc2hvcnRlc3QgcGF0aAogICAgc2VsZi5jb3VudFRpbWUgPSAwICNudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiB0aGUgZGZzCgoKICAjcHJpbnRzIHRoZSBtYXRyaXggZ2l2ZW4gdG8gaXQgb24gdGhlIHNjcmVlbgogIGRlZiBwcmludE1hdHJpeChzZWxmKToKICAgIGZvciBhcnJheSBpbiBzZWxmLm1hdHJpeDoKICAgICAgZm9yIGVsZW0gaW4gYXJyYXk6CiAgICAgICAgcHJpbnQgZWxlbSwKICAgICAgcHJpbnQKCgogICNnZXRzIHRoZSBzdGFydCBhbmQgZW5kIHBvaW50cyBmcm9tIHRoZSBtYXRyaXgsIGlmIHRoZXkgZG9uJ3QgZXhpc3QKICAjaWYgd2lsbCBleGl0IHRoZSBwcm9ncmFtCiAgZGVmIGdldFBvaW50cyhzZWxmKToKICAgIHNlbGYuc3RhcnQgPSAiJSIKICAgIHNlbGYuZW5kID0gIiUiCiAgICBmb3IgaW5kbSwgYXJyYXkgaW4gZW51bWVyYXRlKHNlbGYubWF0cml4KToKICAgICAgZm9yIGluZGEsIGVsZW0gaW4gZW51bWVyYXRlKGFycmF5KToKICAgICAgICBpZiBlbGVtID09ICJTIjoKICAgICAgICAgIHNlbGYuc3RhcnQgPSAoaW5kbSxpbmRhKQogICAgICAgICAgcHJpbnQgIlN0YXJ0ID0gIixzZWxmLnN0YXJ0CiAgICAgICAgaWYgZWxlbSA9PSAiRSI6CiAgICAgICAgICBzZWxmLmVuZCA9IChpbmRtLGluZGEpCiAgICAgICAgICBwcmludCAiRW5kID0gIixzZWxmLmVuZAoKICAgICNjaGVjayBpZiBzdGFydCBhbmQgZW5kIGV4aXN0cyBpbiB0aGUgbWF0cml4CiAgICBpZiBzZWxmLnN0YXJ0ID09ICIlIiBvciBzZWxmLmVuZCA9PSAiJSI6CiAgICAgIHByaW50ICJFaXRoZXIgU3RhcnQgb3IgRW5kIHdhcyBub3QgaW4gbWF6ZSIKICAgICAgc3lzLmV4aXQoKQoKCiAgI2RmcyB1c2luZyBhIHN0YWNrIHRvIGZpbmQgcGF0aHMKICBkZWYgZGZzKHNlbGYpOgogICAgI3NldCB1cCB0aGUgc3RhY2sgYW5kIGRmcwogICAgc3RhY2sgPSBbXQogICAgdmlzaXRlZCA9IFtdCiAgICBzdGFjay5hcHBlbmQoc2VsZi5zdGFydCkKICAgIHNlbGYucGFyZW50TWFwW3NlbGYuc3RhcnRdID0gWyJzdGFydCIsMF0KICAgIHdoaWxlIHN0YWNrOgogICAgICBwYXJlbnQgPSBzdGFjay5wb3AoKQogICAgICBpZiBwYXJlbnQgaW4gdmlzaXRlZDoKICAgICAgICBjb250aW51ZQogICAgICB2aXNpdGVkLmFwcGVuZChwYXJlbnQpCiAgICAgIGNoaWxkcmVuID0gc2VsZi5nZXRDaGlsZHJlbihwYXJlbnQpCiAgICAgIGZvciBjaGlsZCBpbiBjaGlsZHJlbjoKICAgICAgICBzdGFjay5hcHBlbmQoY2hpbGQpCiAgICAgICAgI2NoZWNrcyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgcGFyZW50IHRvIHJlcGxhY2UgaWYgc3RlcCBjb3VudCBpcyBsb3dlcgogICAgICAgIGlmIGNoaWxkIGluIHNlbGYucGFyZW50TWFwIGFuZCBzZWxmLnBhcmVudE1hcFtwYXJlbnRdWzFdKzEgPiBzZWxmLnBhcmVudE1hcFtjaGlsZF1bMV06CiAgICAgICAgICBjb250aW51ZQogICAgICAgIGVsc2U6CiAgICAgICAgICBzZWxmLnBhcmVudE1hcFtjaGlsZF0gPSBbcGFyZW50LHNlbGYucGFyZW50TWFwW3BhcmVudF1bMV0rMV0KICAgICAgICAgIHN0YWNrLmFwcGVuZChwYXJlbnQpCgogICAgc2VsZi5jb3VudFRpbWUgPSBzZWxmLmNvdW50VGltZSArIDEKICAgICNjaGVjayBpZiB0aGVyZSBpcyBubyBwYXRoIGZyb20gdGhlIHN0YXJ0IHRvIHRoZSBlbmQKICAgIGlmIHNlbGYuZW5kIG5vdCBpbiBzZWxmLnBhcmVudE1hcDoKICAgICAgcHJpbnQgIlRoZXJlIGlzIG5vdCBwYXRoIHRvIHRoZSBFbmQiCiAgICAgIHN5cy5leGl0KCkKICAgIHNlbGYucmV0dXJuUGF0aCgpCiAgICAjY2FsbCB0aGUgCiAgICBpZihzZWxmLmNvdW50VGltZSA8IDQpOgogICAgICBzZWxmLmRmcygpCiAgICAKCgoKICAjdXNlZCB0byBnZXQgdGhlIGNvbm5lY3QgY2hpbGRyZW4gb2YgdGhlIHBhcmVudCBwYXNzZWQgaW4KICAjdXNlZCB0cnkgc3RhdG1lbnRzIHRvIGNhdGNoIG91dCBvZiBpbmRleCBleGNlcHRpb25zIGFuZCB0cmVhdHMgdGhlbSBhcyB3YWxscwogIGRlZiBnZXRDaGlsZHJlbihzZWxmLHBhcmVudCk6CiAgICAjaGF2ZSB0aGUgZGlmZmVybnQgY29vcmRzIG9mIHRoZSBwYXJlbnQKICAgIGluZG0gPSBwYXJlbnRbMF0KICAgIGluZGEgPSBwYXJlbnRbMV0KICAgIGNoaWxkcmVuID0gW10KICAgIGZ1bmNMaXN0ID0gW10KCiAgICAgICNjaGVja3MgdG8gdGhlIHRvcCBvZiB0aGUgcGFyZW50CiAgICBkZWYgY2hlY2tUb3AoKTogCiAgICAgIHRyeToKICAgICAgICBpZiBzZWxmLm1hdHJpeFtpbmRtKzFdW2luZGFdID09ICIgIiBvciBzZWxmLm1hdHJpeFtpbmRtKzFdW2luZGFdID09ICJFIjoKICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgoaW5kbSsxLGluZGEpKQogICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICBwYXNzCgogICAgZGVmIGNoZWNrQm90dG9tKCk6CiAgICAgIHRyeToKICAgICAgICBpZiBzZWxmLm1hdHJpeFtpbmRtLTFdW2luZGFdID09ICIgIiBvciBzZWxmLm1hdHJpeFtpbmRtLTFdW2luZGFdID09ICJFIjoKICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgoaW5kbS0xLGluZGEpKQogICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICBwYXNzCiAgICAKICAgICNjaGVja3MgdG8gdGhlIGxlZnQgb2YgdGhlIHBhcmVudAogICAgZGVmIGNoZWNrTGVmdCgpOgogICAgICB0cnk6CiAgICAgICAgaWYgc2VsZi5tYXRyaXhbaW5kbV1baW5kYSsxXSA9PSAiICIgb3Igc2VsZi5tYXRyaXhbaW5kbV1baW5kYSsxXSA9PSAiRSI6CiAgICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKGluZG0saW5kYSsxKSkKICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgcGFzcwoKICAgICNjaGVja3MgdG8gdGhlIHJpZ2h0IG9mIHRoZSBwYXJlbnQKICAgIGRlZiBjaGVja1JpZ2h0KCk6CiAgICAgIHRyeToKICAgICAgICBpZiBzZWxmLm1hdHJpeFtpbmRtXVtpbmRhLTFdID09ICIgIiBvciBzZWxmLm1hdHJpeFtpbmRtXVtpbmRhLTFdID09ICJFIjoKICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgoaW5kbSxpbmRhLTEpKQogICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICBwYXNzCgogICAgI21ha2UgbGlzdHMgZm9yIHRoZSBkaWZmZXJudCBwb3NzaWJsZSBmdW5jIGNhbGwgb3JkZXJzCiAgICBmdW5jT3B0aW9uMSA9IFtjaGVja0JvdHRvbSxjaGVja1RvcCxjaGVja1JpZ2h0LGNoZWNrTGVmdF0gCiAgICBmdW5jT3B0aW9uMiA9ICBbY2hlY2tMZWZ0LGNoZWNrQm90dG9tLGNoZWNrVG9wLGNoZWNrUmlnaHRdCiAgICBmdW5jT3B0aW9uMyA9IFtjaGVja1JpZ2h0LGNoZWNrTGVmdCxjaGVja0JvdHRvbSxjaGVja1RvcF0KICAgIGZ1bmNPcHRpb240ID0gW2NoZWNrVG9wLGNoZWNrUmlnaHQsY2hlY2tMZWZ0LGNoZWNrQm90dG9tXQoKICAgICNjcmVhdGUgYSBtYXN0ZXIgbGlzdCBvZiBhbGwgZnVuY3Mgb3JkZXIgcG9zc2libGl0aWVzCiAgICBmdW5jTGlzdCA9IFtmdW5jT3B0aW9uMSxmdW5jT3B0aW9uMixmdW5jT3B0aW9uMyxmdW5jT3B0aW9uNF0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogIAogICAgI2RlcGVuZGluZyBvbiB0aGUgY3ljbGUsIGNhbGwgdGhlIGRpZmZlcmVudCBmdW5jIG9yZGVycwogICAgZm9yIGYgaW4gZnVuY0xpc3Rbc2VsZi5jb3VudFRpbWVdOgogICAgICBmKCkKPHxmaW1fZW5kfD4="]
["8ae63f6c844f9a71fdf3f08289a9085ba56ce515-4","8ae63f6c844f9a71fdf3f08289a9085ba56ce515","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cyAKaW1wb3J0IG9zLnBhdGggI3VzZWQgdG8gY2hlY2sgaWYgZmlsZSBleGlzdHMKCmNsYXNzIE1hdHJpeDoKCiAgI3Rha2VzIGluIGEgZmlsZXBhdGggYW5kIGNyZWF0ZXMgdGhlIHNlbGYubWF0cml4IGZyb20gdGhlIHRleHQgZmlsZQogIGRlZiBfX2luaXRfXyhzZWxmLGZpbGVQYXRoKToKICAgIG1hdHJpeCA9IFtdCiAgICB3aGlsZSBub3Qgb3MucGF0aC5leGlzdHMoZmlsZVBhdGgpOgogICAgICBmaWxlUGF0aCA9IHJhd19pbnB1dCgiRmlsZSBEb2VzIG5vdCBleGlzdCwgUGxlYXNlIGVudGVyIGFnYWluOiAiKQogICAgZm9yIGxpbmUgaW4gb3BlbihmaWxlUGF0aCk6CiAgICAgIHRlbXAgPSBbXQogICAgICBmb3IgYyBpbiBsaW5lOgogICAgICAgIHRlbXAuYXBwZW5kKGMpCiAgICAgIG1hdHJpeC5hcHBlbmQodGVtcCkKICAgIHNlbGYubWF0cml4ID0gbWF0cml4CiAgICBzZWxmLmdldFBvaW50cygpCiAgICBzZWxmLnBhcmVudE1hcCA9IHt9ICN1c2VkIHRvIGhvbGQgcGFyZW50cyBhbmQgdGhlIG51bWJlciBvZiBzdGVwcyBmcm9tIHRoZSBzdGFydAogICAgc2VsZi5zUGF0aCA9IFtdICNob2xkcyB0aGUgc2hvcnRlc3QgcGF0aAogICAgc2VsZi5jb3VudFRpbWUgPSAwICNudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiB0aGUgZGZzCgoKICAjcHJpbnRzIHRoZSBtYXRyaXggZ2l2ZW4gdG8gaXQgb24gdGhlIHNjcmVlbgogIGRlZiBwcmludE1hdHJpeChzZWxmKToKICAgIGZvciBhcnJheSBpbiBzZWxmLm1hdHJpeDoKICAgICAgZm9yIGVsZW0gaW4gYXJyYXk6CiAgICAgICAgcHJpbnQgZWxlbSwKICAgICAgcHJpbnQKCgogICNnZXRzIHRoZSBzdGFydCBhbmQgZW5kIHBvaW50cyBmcm9tIHRoZSBtYXRyaXgsIGlmIHRoZXkgZG9uJ3QgZXhpc3QKICAjaWYgd2lsbCBleGl0IHRoZSBwcm9ncmFtCiAgZGVmIGdldFBvaW50cyhzZWxmKToKICAgIHNlbGYuc3RhcnQgPSAiJSIKICAgIHNlbGYuZW5kID0gIiUiCiAgICBmb3IgaW5kbSwgYXJyYXkgaW4gZW51bWVyYXRlKHNlbGYubWF0cml4KToKICAgICAgZm9yIGluZGEsIGVsZW0gaW4gZW51bWVyYXRlKGFycmF5KToKICAgICAgICBpZiBlbGVtID09ICJTIjoKICAgICAgICAgIHNlbGYuc3RhcnQgPSAoaW5kbSxpbmRhKQogICAgICAgICAgcHJpbnQgIlN0YXJ0ID0gIixzZWxmLnN0YXJ0CiAgICAgICAgaWYgZWxlbSA9PSAiRSI6CiAgICAgICAgICBzZWxmLmVuZCA9IChpbmRtLGluZGEpCiAgICAgICAgICBwcmludCAiRW5kID0gIixzZWxmLmVuZAoKICAgICNjaGVjayBpZiBzdGFydCBhbmQgZW5kIGV4aXN0cyBpbiB0aGUgbWF0cml4CiAgICBpZiBzZWxmLnN0YXJ0ID09ICIlIiBvciBzZWxmLmVuZCA9PSAiJSI6CiAgICAgIHByaW50ICJFaXRoZXIgU3RhcnQgb3IgRW5kIHdhcyBub3QgaW4gbWF6ZSIKICAgICAgc3lzLmV4aXQoKQoKCiAgI2RmcyB1c2luZyBhIHN0YWNrIHRvIGZpbmQgcGF0aHMKICBkZWYgZGZzKHNlbGYpOgogICAgI3NldCB1cCB0aGUgc3RhY2sgYW5kIGRmcwogICAgc3RhY2sgPSBbXQogICAgdmlzaXRlZCA9IFtdCiAgICBzdGFjay5hcHBlbmQoc2VsZi5zdGFydCkKICAgIHNlbGYucGFyZW50TWFwW3NlbGYuc3RhcnRdID0gWyJzdGFydCIsMF0KICAgIHdoaWxlIHN0YWNrOgogICAgICBwYXJlbnQgPSBzdGFjay5wb3AoKQogICAgICBpZiBwYXJlbnQgaW4gdmlzaXRlZDoKICAgICAgICBjb250aW51ZQogICAgICB2aXNpdGVkLmFwcGVuZChwYXJlbnQpCiAgICAgIGNoaWxkcmVuID0gc2VsZi5nZXRDaGlsZHJlbihwYXJlbnQpCiAgICAgIGZvciBjaGlsZCBpbiBjaGlsZHJlbjoKICAgICAgICBzdGFjay5hcHBlbmQoY2hpbGQpCiAgICAgICAgI2NoZWNrcyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgcGFyZW50IHRvIHJlcGxhY2UgaWYgc3RlcCBjb3VudCBpcyBsb3dlcgo8fGZpbV9ob2xlfD4KICAgICAgICAgIHN0YWNrLmFwcGVuZChwYXJlbnQpCgogICAgc2VsZi5jb3VudFRpbWUgPSBzZWxmLmNvdW50VGltZSArIDEKICAgICNjaGVjayBpZiB0aGVyZSBpcyBubyBwYXRoIGZyb20gdGhlIHN0YXJ0IHRvIHRoZSBlbmQKICAgIGlmIHNlbGYuZW5kIG5vdCBpbiBzZWxmLnBhcmVudE1hcDoKICAgICAgcHJpbnQgIlRoZXJlIGlzIG5vdCBwYXRoIHRvIHRoZSBFbmQiCiAgICAgIHN5cy5leGl0KCkKICAgIHNlbGYucmV0dXJuUGF0aCgpCiAgICAjY2FsbCB0aGUgCiAgICBpZihzZWxmLmNvdW50VGltZSA8IDQpOgogICAgICBzZWxmLmRmcygpCiAgICAKCgoKICAjdXNlZCB0byBnZXQgdGhlIGNvbm5lY3QgY2hpbGRyZW4gb2YgdGhlIHBhcmVudCBwYXNzZWQgaW4KICAjdXNlZCB0cnkgc3RhdG1lbnRzIHRvIGNhdGNoIG91dCBvZiBpbmRleCBleGNlcHRpb25zIGFuZCB0cmVhdHMgdGhlbSBhcyB3YWxscwogIGRlZiBnZXRDaGlsZHJlbihzZWxmLHBhcmVudCk6CiAgICAjaGF2ZSB0aGUgZGlmZmVybnQgY29vcmRzIG9mIHRoZSBwYXJlbnQKICAgIGluZG0gPSBwYXJlbnRbMF0KICAgIGluZGEgPSBwYXJlbnRbMV0KICAgIGNoaWxkcmVuID0gW10KICAgIGZ1bmNMaXN0ID0gW10KCiAgICAgICNjaGVja3MgdG8gdGhlIHRvcCBvZiB0aGUgcGFyZW50CiAgICBkZWYgY2hlY2tUb3AoKTogCiAgICAgIHRyeToKICAgICAgICBpZiBzZWxmLm1hdHJpeFtpbmRtKzFdW2luZGFdID09ICIgIiBvciBzZWxmLm1hdHJpeFtpbmRtKzFdW2luZGFdID09ICJFIjoKICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgoaW5kbSsxLGluZGEpKQogICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICBwYXNzCgogICAgZGVmIGNoZWNrQm90dG9tKCk6CiAgICAgIHRyeToKICAgICAgICBpZiBzZWxmLm1hdHJpeFtpbmRtLTFdW2luZGFdID09ICIgIiBvciBzZWxmLm1hdHJpeFtpbmRtLTFdW2luZGFdID09ICJFIjoKICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgoaW5kbS0xLGluZGEpKQogICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICBwYXNzCiAgICAKICAgICNjaGVja3MgdG8gdGhlIGxlZnQgb2YgdGhlIHBhcmVudAogICAgZGVmIGNoZWNrTGVmdCgpOgogICAgICB0cnk6CiAgICAgICAgaWYgc2VsZi5tYXRyaXhbaW5kbV1baW5kYSsxXSA9PSAiICIgb3Igc2VsZi5tYXRyaXhbaW5kbV1baW5kYSsxXSA9PSAiRSI6CiAgICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKGluZG0saW5kYSsxKSkKICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgcGFzcwoKICAgICNjaGVja3MgdG8gdGhlIHJpZ2h0IG9mIHRoZSBwYXJlbnQKICAgIGRlZiBjaGVja1JpZ2h0KCk6CiAgICAgIHRyeToKICAgICAgICBpZiBzZWxmLm1hdHJpeFtpbmRtXVtpbmRhLTFdID09ICIgIiBvciBzZWxmLm1hdHJpeFtpbmRtXVtpbmRhLTFdID09ICJFIjoKICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgoaW5kbSxpbmRhLTEpKQogICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICBwYXNzCgogICAgI21ha2UgbGlzdHMgZm9yIHRoZSBkaWZmZXJudCBwb3NzaWJsZSBmdW5jIGNhbGwgb3JkZXJzCiAgICBmdW5jT3B0aW9uMSA9IFtjaGVja0JvdHRvbSxjaGVja1RvcCxjaGVja1JpZ2h0LGNoZWNrTGVmdF0gCiAgICBmdW5jT3B0aW9uMiA9ICBbY2hlY2tMZWZ0LGNoZWNrQm90dG9tLGNoZWNrVG9wLGNoZWNrUmlnaHRdCiAgICBmdW5jT3B0aW9uMyA9IFtjaGVja1JpZ2h0LGNoZWNrTGVmdCxjaGVja0JvdHRvbSxjaGVja1RvcF0KICAgIGZ1bmNPcHRpb240ID0gW2NoZWNrVG9wLGNoZWNrUmlnaHQsY2hlY2tMZWZ0LGNoZWNrQm90dG9tXQoKICAgICNjcmVhdGUgYSBtYXN0ZXIgbGlzdCBvZiBhbGwgZnVuY3Mgb3JkZXIgcG9zc2libGl0aWVzCiAgICBmdW5jTGlzdCA9IFtmdW5jT3B0aW9uMSxmdW5jT3B0aW9uMixmdW5jT3B0aW9uMyxmdW5jT3B0aW9uNF0KICAKICAgICNkZXBlbmRpbmcgb24gdGhlIGN5Y2xlLCBjYWxsIHRoZSBkaWZmZXJlbnQgZnVuYyBvcmRlcnMKICAgIGZvciBmIGluIGZ1bmNMaXN0W3NlbGYuY291bnRUaW1lXToKICAgICAgZigpCgogICAgI3JldHVybiB0aGUgY2hpbGRyZW4KICAgIHJldHVybiBjaGlsZHJlbgoKICAjcmV0dXJucyB0aGUgc2hvcnRzIHBhdGggZnJvbSB0aGUgZW5kCiAgZGVmIHJldHVyblBhdGgoc2VsZik6CiAgICBjdXJyID0gc2VsZi5lbmQKICAgIHRlbXAgPSBbXQogICAgd2hpbGUgY3VyciAhPSAic3RhcnQiOgogICAgICB0ZW1wLmFwcGVuZChjdXJyKQogICAgICBjdXJyID0gc2VsZi5wYXJlbnRNYXBbY3Vycl1bMF0KICAgIAogICAgI2lmIGZpcnN0IHRpbWUgdGhyb3VnaCBzZXQgc2hvcnRlc3QgcGF0aCB0byB0ZW1wCiAgICAjZWxzZSBjaGVjayBpZiB0ZW1wIGlzIHRoZSBzaG9ydGVzdCBwYXRoIGFuZCByZXBsYWNlCiAgICBpZihzZWxmLmNvdW50VGltZSA9PSAxKToKICAgICAgc2VsZi5zUGF0aCA9IHRlbXBbOl0KICAgIGVsaWYobGVuKHRlbXApIDwgbGVuKHNlbGYuc1BhdGgpKToKICAgICAgc2VsZi5zUGF0aCA9IHRlbXBbOl0KCgogICNwdXRzIHRoZSBwYXRocyBvbiB0aGUgbWF0cml4IHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIKICBkZWYgc2hvd1BhdGgoc2VsZik6CiAgICBwcmludCAiIgogICAgcHJpbnQgIlNob3J0ZXN0IHBhdGggc3RlcCBjb3VudCBpcyAiLGxlbihzZWxmLnNQYXRoKS0xCiAgICBmb3Igc3RlcHMgaW4gc2VsZi5zUGF0aDoKICAgICAgc2VsZi5tYXRyaXhbc3RlcHNbMF1dW3N0ZXBzWzFdXSA9IGJjb2xvcnMuT0tHUkVFTisiKyIrYmNvbG9ycy5FTkRDCiAgICBzZWxmLm1hdHJpeFtzZWxmLnN0YXJ0WzBdXVtzZWxmLnN0YXJ0WzFdXSA9ICJTIgogICAgc2VsZi5tYXRyaXhbc2VsZi5lbmRbMF1dW3NlbGYuZW5kWzFdXSA9ICJFIgogICAgc2VsZi5wcmludE1hdHJpeCgpCgojY2xhc3MgdG8gaGFuZGxlIHRoZSBjb2xvcnMKY2xhc3MgYmNvbG9yczoKICBIRUFERVIgPSAnXDAzM1s5NW0nCiAgT0tCTFVFID0gJ1wwMzNbOTRtJwogIE9LR1JFRU4gPSAnXDAzM1s5Mm0nCiAgV0FSTklORyA9ICdcMDMzWzkzbScKICBGQUlMID0gJ1wwMzNbOTFtJwogIEVOREMgPSAnXDAzM1swbScKPHxmaW1fc3VmZml4fD4KICAgICAgICBpZiBjaGlsZCBpbiBzZWxmLnBhcmVudE1hcCBhbmQgc2VsZi5wYXJlbnRNYXBbcGFyZW50XVsxXSsxID4gc2VsZi5wYXJlbnRNYXBbY2hpbGRdWzFdOgogICAgICAgICAgY29udGludWUKICAgICAgICBlbHNlOgogICAgICAgICAgc2VsZi5wYXJlbnRNYXBbY2hpbGRdID0gW3BhcmVudCxzZWxmLnBhcmVudE1hcFtwYXJlbnRdWzFdKzFdCjx8ZmltX2VuZHw+"]
["8ae63f6c844f9a71fdf3f08289a9085ba56ce515-5","8ae63f6c844f9a71fdf3f08289a9085ba56ce515","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cyAKaW1wb3J0IG9zLnBhdGggI3VzZWQgdG8gY2hlY2sgaWYgZmlsZSBleGlzdHMKCmNsYXNzIE1hdHJpeDoKCiAgI3Rha2VzIGluIGEgZmlsZXBhdGggYW5kIGNyZWF0ZXMgdGhlIHNlbGYubWF0cml4IGZyb20gdGhlIHRleHQgZmlsZQogIGRlZiBfX2luaXRfXyhzZWxmLGZpbGVQYXRoKToKICAgIG1hdHJpeCA9IFtdCiAgICB3aGlsZSBub3Qgb3MucGF0aC5leGlzdHMoZmlsZVBhdGgpOgogICAgICBmaWxlUGF0aCA9IHJhd19pbnB1dCgiRmlsZSBEb2VzIG5vdCBleGlzdCwgUGxlYXNlIGVudGVyIGFnYWluOiAiKQogICAgZm9yIGxpbmUgaW4gb3BlbihmaWxlUGF0aCk6CiAgICAgIHRlbXAgPSBbXQogICAgICBmb3IgYyBpbiBsaW5lOgogICAgICAgIHRlbXAuYXBwZW5kKGMpCiAgICAgIG1hdHJpeC5hcHBlbmQodGVtcCkKICAgIHNlbGYubWF0cml4ID0gbWF0cml4CiAgICBzZWxmLmdldFBvaW50cygpCiAgICBzZWxmLnBhcmVudE1hcCA9IHt9ICN1c2VkIHRvIGhvbGQgcGFyZW50cyBhbmQgdGhlIG51bWJlciBvZiBzdGVwcyBmcm9tIHRoZSBzdGFydAogICAgc2VsZi5zUGF0aCA9IFtdICNob2xkcyB0aGUgc2hvcnRlc3QgcGF0aAogICAgc2VsZi5jb3VudFRpbWUgPSAwICNudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiB0aGUgZGZzCgoKICAjcHJpbnRzIHRoZSBtYXRyaXggZ2l2ZW4gdG8gaXQgb24gdGhlIHNjcmVlbgogIGRlZiBwcmludE1hdHJpeChzZWxmKToKICAgIGZvciBhcnJheSBpbiBzZWxmLm1hdHJpeDoKICAgICAgZm9yIGVsZW0gaW4gYXJyYXk6CiAgICAgICAgcHJpbnQgZWxlbSwKICAgICAgcHJpbnQKCgogICNnZXRzIHRoZSBzdGFydCBhbmQgZW5kIHBvaW50cyBmcm9tIHRoZSBtYXRyaXgsIGlmIHRoZXkgZG9uJ3QgZXhpc3QKICAjaWYgd2lsbCBleGl0IHRoZSBwcm9ncmFtCiAgZGVmIGdldFBvaW50cyhzZWxmKToKICAgIHNlbGYuc3RhcnQgPSAiJSIKICAgIHNlbGYuZW5kID0gIiUiCiAgICBmb3IgaW5kbSwgYXJyYXkgaW4gZW51bWVyYXRlKHNlbGYubWF0cml4KToKICAgICAgZm9yIGluZGEsIGVsZW0gaW4gZW51bWVyYXRlKGFycmF5KToKICAgICAgICBpZiBlbGVtID09ICJTIjoKICAgICAgICAgIHNlbGYuc3RhcnQgPSAoaW5kbSxpbmRhKQogICAgICAgICAgcHJpbnQgIlN0YXJ0ID0gIixzZWxmLnN0YXJ0CiAgICAgICAgaWYgZWxlbSA9PSAiRSI6CiAgICAgICAgICBzZWxmLmVuZCA9IChpbmRtLGluZGEpCiAgICAgICAgICBwcmludCAiRW5kID0gIixzZWxmLmVuZAoKICAgICNjaGVjayBpZiBzdGFydCBhbmQgZW5kIGV4aXN0cyBpbiB0aGUgbWF0cml4CiAgICBpZiBzZWxmLnN0YXJ0ID09ICIlIiBvciBzZWxmLmVuZCA9PSAiJSI6CiAgICAgIHByaW50ICJFaXRoZXIgU3RhcnQgb3IgRW5kIHdhcyBub3QgaW4gbWF6ZSIKICAgICAgc3lzLmV4aXQoKQoKCiAgI2RmcyB1c2luZyBhIHN0YWNrIHRvIGZpbmQgcGF0aHMKICBkZWYgZGZzKHNlbGYpOgogICAgI3NldCB1cCB0aGUgc3RhY2sgYW5kIGRmcwogICAgc3RhY2sgPSBbXQogICAgdmlzaXRlZCA9IFtdCiAgICBzdGFjay5hcHBlbmQoc2VsZi5zdGFydCkKICAgIHNlbGYucGFyZW50TWFwW3NlbGYuc3RhcnRdID0gWyJzdGFydCIsMF0KICAgIHdoaWxlIHN0YWNrOgogICAgICBwYXJlbnQgPSBzdGFjay5wb3AoKQogICAgICBpZiBwYXJlbnQgaW4gdmlzaXRlZDoKICAgICAgICBjb250aW51ZQogICAgICB2aXNpdGVkLmFwcGVuZChwYXJlbnQpCiAgICAgIGNoaWxkcmVuID0gc2VsZi5nZXRDaGlsZHJlbihwYXJlbnQpCiAgICAgIGZvciBjaGlsZCBpbiBjaGlsZHJlbjoKICAgICAgICBzdGFjay5hcHBlbmQoY2hpbGQpCiAgICAgICAgI2NoZWNrcyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgcGFyZW50IHRvIHJlcGxhY2UgaWYgc3RlcCBjb3VudCBpcyBsb3dlcgogICAgICAgIGlmIGNoaWxkIGluIHNlbGYucGFyZW50TWFwIGFuZCBzZWxmLnBhcmVudE1hcFtwYXJlbnRdWzFdKzEgPiBzZWxmLnBhcmVudE1hcFtjaGlsZF1bMV06CiAgICAgICAgICBjb250aW51ZQogICAgICAgIGVsc2U6CiAgICAgICAgICBzZWxmLnBhcmVudE1hcFtjaGlsZF0gPSBbcGFyZW50LHNlbGYucGFyZW50TWFwW3BhcmVudF1bMV0rMV0KICAgICAgICAgIHN0YWNrLmFwcGVuZChwYXJlbnQpCgogICAgc2VsZi5jb3VudFRpbWUgPSBzZWxmLmNvdW50VGltZSArIDEKICAgICNjaGVjayBpZiB0aGVyZSBpcyBubyBwYXRoIGZyb20gdGhlIHN0YXJ0IHRvIHRoZSBlbmQKICAgIGlmIHNlbGYuZW5kIG5vdCBpbiBzZWxmLnBhcmVudE1hcDoKICAgICAgcHJpbnQgIlRoZXJlIGlzIG5vdCBwYXRoIHRvIHRoZSBFbmQiCiAgICAgIHN5cy5leGl0KCkKICAgIHNlbGYucmV0dXJuUGF0aCgpCiAgICAjY2FsbCB0aGUgCiAgICBpZihzZWxmLmNvdW50VGltZSA8IDQpOgogICAgICBzZWxmLmRmcygpCiAgICAKCgoKICAjdXNlZCB0byBnZXQgdGhlIGNvbm5lY3QgY2hpbGRyZW4gb2YgdGhlIHBhcmVudCBwYXNzZWQgaW4KICAjdXNlZCB0cnkgc3RhdG1lbnRzIHRvIGNhdGNoIG91dCBvZiBpbmRleCBleGNlcHRpb25zIGFuZCB0cmVhdHMgdGhlbSBhcyB3YWxscwogIGRlZiBnZXRDaGlsZHJlbihzZWxmLHBhcmVudCk6CiAgICAjaGF2ZSB0aGUgZGlmZmVybnQgY29vcmRzIG9mIHRoZSBwYXJlbnQKICAgIGluZG0gPSBwYXJlbnRbMF0KICAgIGluZGEgPSBwYXJlbnRbMV0KICAgIGNoaWxkcmVuID0gW10KICAgIGZ1bmNMaXN0ID0gW10KCiAgICAgICNjaGVja3MgdG8gdGhlIHRvcCBvZiB0aGUgcGFyZW50CiAgICBkZWYgY2hlY2tUb3AoKTogCiAgICAgIHRyeToKICAgICAgICBpZiBzZWxmLm1hdHJpeFtpbmRtKzFdW2luZGFdID09ICIgIiBvciBzZWxmLm1hdHJpeFtpbmRtKzFdW2luZGFdID09ICJFIjoKICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgoaW5kbSsxLGluZGEpKQogICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICBwYXNzCgogICAgZGVmIGNoZWNrQm90dG9tKCk6CiAgICAgIHRyeToKICAgICAgICBpZiBzZWxmLm1hdHJpeFtpbmRtLTFdW2luZGFdID09ICIgIiBvciBzZWxmLm1hdHJpeFtpbmRtLTFdW2luZGFdID09ICJFIjoKICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgoaW5kbS0xLGluZGEpKQogICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICBwYXNzCiAgICAKICAgICNjaGVja3MgdG8gdGhlIGxlZnQgb2YgdGhlIHBhcmVudAogICAgZGVmIGNoZWNrTGVmdCgpOgogICAgICB0cnk6CiAgICAgICAgaWYgc2VsZi5tYXRyaXhbaW5kbV1baW5kYSsxXSA9PSAiICIgb3Igc2VsZi5tYXRyaXhbaW5kbV1baW5kYSsxXSA9PSAiRSI6CiAgICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKGluZG0saW5kYSsxKSkKICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgcGFzcwoKICAgICNjaGVja3MgdG8gdGhlIHJpZ2h0IG9mIHRoZSBwYXJlbnQKICAgIGRlZiBjaGVja1JpZ2h0KCk6CiAgICAgIHRyeToKICAgICAgICBpZiBzZWxmLm1hdHJpeFtpbmRtXVtpbmRhLTFdID09ICIgIiBvciBzZWxmLm1hdHJpeFtpbmRtXVtpbmRhLTFdID09ICJFIjoKICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgoaW5kbSxpbmRhLTEpKQogICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICBwYXNzCgogICAgI21ha2UgbGlzdHMgZm9yIHRoZSBkaWZmZXJudCBwb3NzaWJsZSBmdW5jIGNhbGwgb3JkZXJzCiAgICBmdW5jT3B0aW9uMSA9IFtjaGVja0JvdHRvbSxjaGVja1RvcCxjaGVja1JpZ2h0LGNoZWNrTGVmdF0gCiAgICBmdW5jT3B0aW9uMiA9ICBbY2hlY2tMZWZ0LGNoZWNrQm90dG9tLGNoZWNrVG9wLGNoZWNrUmlnaHRdCiAgICBmdW5jT3B0aW9uMyA9IFtjaGVja1JpZ2h0LGNoZWNrTGVmdCxjaGVja0JvdHRvbSxjaGVja1RvcF0KICAgIGZ1bmNPcHRpb240ID0gW2NoZWNrVG9wLGNoZWNrUmlnaHQsY2hlY2tMZWZ0LGNoZWNrQm90dG9tXQoKICAgICNjcmVhdGUgYSBtYXN0ZXIgbGlzdCBvZiBhbGwgZnVuY3Mgb3JkZXIgcG9zc2libGl0aWVzCiAgICBmdW5jTGlzdCA9IFtmdW5jT3B0aW9uMSxmdW5jT3B0aW9uMixmdW5jT3B0aW9uMyxmdW5jT3B0aW9uNF0KICAKICAgICNkZXBlbmRpbmcgb24gdGhlIGN5Y2xlLCBjYWxsIHRoZSBkaWZmZXJlbnQgZnVuYyBvcmRlcnMKICAgIGZvciBmIGluIGZ1bmNMaXN0W3NlbGYuY291bnRUaW1lXToKICAgICAgZigpCgogICAgI3JldHVybiB0aGUgY2hpbGRyZW4KICAgIHJldHVybiBjaGlsZHJlbgoKICAjcmV0dXJucyB0aGUgc2hvcnRzIHBhdGggZnJvbSB0aGUgZW5kCiAgZGVmIHJldHVyblBhdGgoc2VsZik6CiAgICBjdXJyID0gc2VsZi5lbmQKICAgIHRlbXAgPSBbXQogICAgd2hpbGUgY3VyciAhPSAic3RhcnQiOgogICAgICB0ZW1wLmFwcGVuZChjdXJyKQogICAgICBjdXJyID0gc2VsZi5wYXJlbnRNYXBbY3Vycl1bMF0KICAgIAogICAgI2lmIGZpcnN0IHRpbWUgdGhyb3VnaCBzZXQgc2hvcnRlc3QgcGF0aCB0byB0ZW1wCiAgICAjZWxzZSBjaGVjayBpZiB0ZW1wIGlzIHRoZSBzaG9ydGVzdCBwYXRoIGFuZCByZXBsYWNlCiAgICBpZihzZWxmLmNvdW50VGltZSA9PSAxKToKICAgICAgc2VsZi5zUGF0aCA9IHRlbXBbOl0KICAgIGVsaWYobGVuKHRlbXApIDwgbGVuKHNlbGYuc1BhdGgpKToKICAgICAgc2VsZi5zUGF0aCA9IHRlbXBbOl0KCgogICNwdXRzIHRoZSBwYXRocyBvbiB0aGUgbWF0cml4IHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIKICBkZWYgc2hvd1BhdGgoc2VsZik6CiAgICBwcmludCAiIgogICAgcHJpbnQgIlNob3J0ZXN0IHBhdGggc3RlcCBjb3VudCBpcyAiLGxlbihzZWxmLnNQYXRoKS0xCiAgICBmb3Igc3RlcHMgaW4gc2VsZi5zUGF0aDoKICAgICAgc2VsZi5tYXRyaXhbc3RlcHNbMF1dW3N0ZXBzWzFdXSA9IGJjb2xvcnMuT0tHUkVFTisiKyIrYmNvbG9ycy5FTkRDCiAgICBzZWxmLm1hdHJpeFtzZWxmLnN0YXJ0WzBdXVtzZWxmLnN0YXJ0WzFdXSA9ICJTIgogICAgc2VsZi5tYXRyaXhbc2VsZi5lbmRbMF1dW3NlbGYuZW5kWzFdXSA9ICJFIgo8fGZpbV9ob2xlfD4KI2NsYXNzIHRvIGhhbmRsZSB0aGUgY29sb3JzCmNsYXNzIGJjb2xvcnM6CiAgSEVBREVSID0gJ1wwMzNbOTVtJwogIE9LQkxVRSA9ICdcMDMzWzk0bScKICBPS0dSRUVOID0gJ1wwMzNbOTJtJwogIFdBUk5JTkcgPSAnXDAzM1s5M20nCiAgRkFJTCA9ICdcMDMzWzkxbScKICBFTkRDID0gJ1wwMzNbMG0nCjx8ZmltX3N1ZmZpeHw+CiAgICBzZWxmLnByaW50TWF0cml4KCkKCjx8ZmltX2VuZHw+"]
["a9b81faaf712020557c584b184f531bcec94d3a3-1","a9b81faaf712020557c584b184f531bcec94d3a3",{"$cut":{"chars":111988,"head":"PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiMgUmVzb3VyY2Ugb2JqZWN0IGNvZGUKIwojIENyZWF0ZWQgYnk6IFRoZSBSZXNvdXJjZSBDb21waWxlciBmb3IgUHlRdDUgKFF0IHY1LjE0LjEpCiMKIyBXQVJOSU5HISBBbGwgY2hhbmdlcyBtYWRlIGluIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3QhCgpmcm9tIFB5UXQ1IGltcG9ydCBRdENvcmUKCnF0X3Jlc291cmNlX2RhdGEgPSBiIlwKXHgwMFx4MDBceDM2XHg5ZFwKXHg4OVwKXHg1MFx4NGVceDQ3XHgwZFx4MGFceDFhXHgwYVx4MDBceDAwXHgwMFx4MGRceDQ5XHg0OFx4NDRceDUyXHgwMFwKXHgwMFx4MDFceGU5XHgwMFx4MDBceDAxXHhlOVx4MDhceDA2XHgwMFx4MDBceDAwXHhhNlx4Y2VceGM0XHg5N1wKXHgwMFx4MDBceDAxXHg4Mlx4NjlceDQzXHg0M1x4NTBceDQ5XHg0M1x4NDNceDIwXHg3MFx4NzJceDZmXHg2NlwKXHg2OVx4NmNceDY1XHgwMFx4MDBceDI4XHg5MVx4N2RceDkxXHgzOVx4NDhceDAzXHg0MVx4MTRceDg2XHgzZlwKXHgxM1x4NDVceGYxXHhjMFx4YzJceDE0XHgyMlx4MTZceDViXHhhOFx4OTVceDgyXHhhOFx4ODhceDU4XHg0OVwKXHgxNFx4NDVceDUwXHg5MFx4MThceGMxXHhhYlx4NzBceDc3XHg3M1x4NDJceDc2XHgwZFx4YmJceDExXHgxYlwKXHg0Ylx4YzFceDU2XHhiMFx4ZjBceDY4XHhiY1x4MGFceDFiXHg2Ylx4NmRceDJkXHg2Y1x4MDVceDQxXHhmMFwKXHgwMFx4YjFceGIyXHhiNFx4NTJceGI0XHg5MVx4YjBceGJlXHhkOVx4MDRceDEyXHhjNFx4MzhceDMwXHhjY1wKXHhjN1x4M2ZceGYzXHgzZlx4ZGVceGZiXHgwN1x4MDJceDQ3XHgxOVx4ZDNceDcyXHhhYlx4N2JceGMxXHhiMlwKXHg3M1x4NGVceDY0XHgyMlx4YWNceGNkXHgyZlx4MmNceDZhXHhiNVx4YWZceDA0XHg2OVx4MDBceDNhXHgxOFwKXHhkNlx4NGRceDM3XHgzYlx4M2RceDNiXHgxZVx4YTVceGUyXHhmYVx4YmFceGE3XHg0YVx4OWRceDc3XHgzZFwKXHhhYVx4NTZceGU1XHg3N1x4N2ZceGFlXHhhNlx4NThceGRjXHgzNVx4YTFceDRhXHgxM1x4MWVceDMxXHhiM1wKXHg0ZVx4NGVceDc4XHg0NVx4NzhceDcwXHgzZFx4OTdceDU1XHhiY1x4MjdceDFjXHgzMlx4NTNceDdhXHg0Y1wKXHhmOFx4NWNceGI4XHhkYlx4OTFceDA2XHg4NVx4MWZceDk1XHg2ZVx4MTRceGY4XHg0ZFx4NzFceGQyXHhlN1wKXHg4MFx4YWFceDE5XHg3Mlx4YTJceDkxXHg1MVx4ZTFceDkwXHhiMFx4OTZceDJjXHg2M1x4YTNceDhjXHhjZFwKXHg5NFx4NjNceDA5XHgwZlx4YThceDI5XHg2M1x4OTZceDJkXHhmNVx4MDNceGYzXHgwNVx4OGVceDI5XHhkZVwKXHg1MFx4NmNceDY1XHhkNlx4Y2NceDYyXHg5Zlx4NmFceGMyXHhjNlx4YjhceDNkXHgzN1x4ZWJceGE3XHgwMlwKXHhlZFx4NGNceDMwXHhjOVx4MzRceDMzXHg2OFx4MThceGFjXHg5MVx4MjZceDQzXHg4ZVx4MWVceDM5XHg2ZFwKXHg1MVx4NWNceDIyXHg3Mlx4MWZceGFlXHhlMFx4NmZceGYzXHhmZFx4MzNceGUyXHgzMlx4YzRceDk1XHhjNlwKXHgxNFx4YzdceDE4XHhhYlx4NThceGU4XHhiZVx4MWZceGY1XHgwN1x4YmZceGIzXHg3NVx4MTNceGZkXHg3ZFwKXHg4NVx4NGFceDhkXHg2MVx4YThceDc5XHhmMVx4YmNceDhmXHg0ZVx4YThceGRkXHg4MVx4ZmNceGI2XHhlN1wKXHg3ZFx4MWZceDdiXHg1ZVx4ZmVceDA0XHg4Mlx4Y2ZceDcwXHg2NVx4OTdceGZjXHhhYlx4NDdceDMwXHhmNFwKXHgyOVx4ZmFceDc2XHg0OVx4ZWJceDM4XHg4NFx4ZTZceDRkXHhiOFx4YjhceDJlXHg2OVx4YzZceDJlXHg1Y1wKXHg2ZVx4NDFceGViXHg1M1x4NTZceDc3XHg3NFx4NWZceDBhXHhjYVx4MGVceDI0XHgxMlx4ZjBceDdlXHgyNlwKXHhkZlx4YjRceDAwXHgyZFx4YjdceDUwXHhiZlx4NTRceGM4XHhhZFx4NzhceGNmXHhlOVx4MDNceDQ0XHgyNVwKXHhhYlx4YTlceDFiXHhkOFx4M2ZceDgwXHhhZVx4YTRceGQ0XHg1ZVx4YWVceDMwXHg3N1x4NWRceDc5XHg2ZVwKXHhmZlx4YmVceDI5XHhlNlx4ZjdceDAzXHg5N1x4OGVceDcyXHhiNlx4ODlceDIwXHhjYVx4MTNceDAwXHgwMFwKXHgwMFx4MDZceDYyXHg0Ylx4NDdceDQ0XHgwMFx4ZmZceDAwXHhmZlx4MDBceGZmXHhhMFx4YmRceGE3XHg5M1wKXHgwMFx4MDBceDAwXHgwOVx4NzBceDQ4XHg1OVx4NzNceDAwXHgwMFx4MGJceDEzXHgwMFx4MDBceDBiXHgxM1wKXHgwMVx4MDBceDlhXHg5Y1x4MThceDAwXHgwMFx4MDBceDA3XHg3NFx4NDlceDRkXHg0NVx4MDdceGU0XHgwM1wKXHgwYlx4MDBceDI4XHgzMFx4YWFceDI0XHg5MFx4ZTNceDAwXHgwMFx4MjBceDAwXHg0OVx4NDRceDQxXHg1NFwKXHg3OFx4ZGFceGVkXHhkZFx4NzlceDdjXHg1NFx4ZjVceGJkXHhmZlx4ZjFceGNmXHg5OVx4ODRceDFkXHg0M1wKXHg4Mlx4ZWNceDU5XHg4OFx4YzhceDJhXHhiYlx4MjBceDhhXHgyMlx4ODRceDJkXHg2NFx4OTlceDY0XHgyNlwKXHgwOVx4MzBceGI4XHg5NVx4YThceGRkXHg2Ylx4MWZceGM1XHhmNlx4ZDdceDQ3XHg3Zlx4NmRceDZmXHhhZlwKXHhmNFx4ZDdceDVmXHg3Ylx4MWZceGI3XHhkZVx4ZGVceDYyXHhlZlx4YWZceGFiXHhkN1x4MGFceDU3XHhhYlwKXHhhNlx4NzVceGM5XHhiZVx4MmZceDEzXHg1NFx4ZGNceDJiXHg1OFx4MzdceDE2XHgzNVx4YjhceDE0XHhlYlwKXHgxYVx4NWNceDBhXHgwOFx4Y2NceGY5XHhmZFx4MzFceDMzXHgzOFx4YzBceDBjXHg3M1x4NjZceGU2XHg2NFwKXHhlNlx4MmNceGFmXHhlN1x4ZTNceDQxXHg1OVx4MWFceDkzXHg5OVx4Y2ZceDM5XHg2N1x4ZGVceGRmXHhjZlwKXHg2N1x4Y2VceDk5XHgyM1x4MDJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBc"}}]
["a9b81faaf712020557c584b184f531bcec94d3a3-2","a9b81faaf712020557c584b184f531bcec94d3a3",{"$cut":{"chars":177000,"head":"PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiMgUmVzb3VyY2Ugb2JqZWN0IGNvZGUKIwojIENyZWF0ZWQgYnk6IFRoZSBSZXNvdXJjZSBDb21waWxlciBmb3IgUHlRdDUgKFF0IHY1LjE0LjEpCiMKIyBXQVJOSU5HISBBbGwgY2hhbmdlcyBtYWRlIGluIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3QhCgpmcm9tIFB5UXQ1IGltcG9ydCBRdENvcmUKCnF0X3Jlc291cmNlX2RhdGEgPSBiIlwKXHgwMFx4MDBceDM2XHg5ZFwKXHg4OVwKXHg1MFx4NGVceDQ3XHgwZFx4MGFceDFhXHgwYVx4MDBceDAwXHgwMFx4MGRceDQ5XHg0OFx4NDRceDUyXHgwMFwKXHgwMFx4MDFceGU5XHgwMFx4MDBceDAxXHhlOVx4MDhceDA2XHgwMFx4MDBceDAwXHhhNlx4Y2VceGM0XHg5N1wKXHgwMFx4MDBceDAxXHg4Mlx4NjlceDQzXHg0M1x4NTBceDQ5XHg0M1x4NDNceDIwXHg3MFx4NzJceDZmXHg2NlwKXHg2OVx4NmNceDY1XHgwMFx4MDBceDI4XHg5MVx4N2RceDkxXHgzOVx4NDhceDAzXHg0MVx4MTRceDg2XHgzZlwKXHgxM1x4NDVceGYxXHhjMFx4YzJceDE0XHgyMlx4MTZceDViXHhhOFx4OTVceDgyXHhhOFx4ODhceDU4XHg0OVwKXHgxNFx4NDVceDUwXHg5MFx4MThceGMxXHhhYlx4NzBceDc3XHg3M1x4NDJceDc2XHgwZFx4YmJceDExXHgxYlwKXHg0Ylx4YzFceDU2XHhiMFx4ZjBceDY4XHhiY1x4MGFceDFiXHg2Ylx4NmRceDJkXHg2Y1x4MDVceDQxXHhmMFwKXHgwMFx4YjFceGIyXHhiNFx4NTJceGI0XHg5MVx4YjBceGJlXHhkOVx4MDRceDEyXHhjNFx4MzhceDMwXHhjY1wKXHhjN1x4M2ZceGYzXHgzZlx4ZGVceGZiXHgwN1x4MDJceDQ3XHgxOVx4ZDNceDcyXHhhYlx4N2JceGMxXHhiMlwKXHg3M1x4NGVceDY0XHgyMlx4YWNceGNkXHgyZlx4MmNceDZhXHhiNVx4YWZceDA0XHg2OVx4MDBceDNhXHgxOFwKXHhkNlx4NGRceDM3XHgzYlx4M2RceDNiXHgxZVx4YTVceGUyXHhmYVx4YmFceGE3XHg0YVx4OWRceDc3XHgzZFwKXHhhYVx4NTZceGU1XHg3N1x4N2ZceGFlXHhhNlx4NThceGRjXHgzNVx4YTFceDRhXHgxM1x4MWVceDMxXHhiM1wKXHg0ZVx4NGVceDc4XHg0NVx4NzhceDcwXHgzZFx4OTdceDU1XHhiY1x4MjdceDFjXHgzMlx4NTNceDdhXHg0Y1wKXHhmOFx4NWNceGI4XHhkYlx4OTFceDA2XHg4NVx4MWZceDk1XHg2ZVx4MTRceGY4XHg0ZFx4NzFceGQyXHhlN1wKXHg4MFx4YWFceDE5XHg3Mlx4YTJceDkxXHg1MVx4ZTFceDkwXHhiMFx4OTZceDJjXHg2M1x4YTNceDhjXHhjZFwKXHg5NFx4NjNceDA5XHgwZlx4YThceDI5XHg2M1x4OTZceDJkXHhmNVx4MDNceGYzXHgwNVx4OGVceDI5XHhkZVwKXHg1MFx4NmNceDY1XHhkNlx4Y2NceDYyXHg5Zlx4NmFceGMyXHhjNlx4YjhceDNkXHgzN1x4ZWJceGE3XHgwMlwKXHhlZFx4NGNceDMwXHhjOVx4MzRceDMzXHg2OFx4MThceGFjXHg5MVx4MjZceDQzXHg4ZVx4MWVceDM5XHg2ZFwKXHg1MVx4NWNceDIyXHg3Mlx4MWZceGFlXHhlMFx4NmZceGYzXHhmZFx4MzNceGUyXHgzMlx4YzRceDk1XHhjNlwKXHgxNFx4YzdceDE4XHhhYlx4NThceGU4XHhiZVx4MWZceGY1XHgwN1x4YmZceGIzXHg3NVx4MTNceGZkXHg3ZFwKXHg4NVx4NGFceDhkXHg2MVx4YThceDc5XHhmMVx4YmNceDhmXHg0ZVx4YThceGRkXHg4MVx4ZmNceGI2XHhlN1wKXHg3ZFx4MWZceDdiXHg1ZVx4ZmVceDA0XHg4Mlx4Y2ZceDcwXHg2NVx4OTdceGZjXHhhYlx4NDdceDMwXHhmNFwKXHgyOVx4ZmFceDc2XHg0OVx4ZWJceDM4XHg4NFx4ZTZceDRkXHhiOFx4YjhceDJlXHg2OVx4YzZceDJlXHg1Y1wKXHg2ZVx4NDFceGViXHg1M1x4NTZceDc3XHg3NFx4NWZceDBhXHhjYVx4MGVceDI0XHgxMlx4ZjBceDdlXHgyNlwKXHhkZlx4YjRceDAwXHgyZFx4YjdceDUwXHhiZlx4NTRceGM4XHhhZFx4NzhceGNmXHhlOVx4MDNceDQ0XHgyNVwKXHhhYlx4YTlceDFiXHhkOFx4M2ZceDgwXHhhZVx4YTRceGQ0XHg1ZVx4YWVceDMwXHg3N1x4NWRceDc5XHg2ZVwKXHhmZlx4YmVceDI5XHhlNlx4ZjdceDAzXHg5N1x4OGVceDcyXHhiNlx4ODlceDIwXHhjYVx4MTNceDAwXHgwMFwKXHgwMFx4MDZceDYyXHg0Ylx4NDdceDQ0XHgwMFx4ZmZceDAwXHhmZlx4MDBceGZmXHhhMFx4YmRceGE3XHg5M1wKXHgwMFx4MDBceDAwXHgwOVx4NzBceDQ4XHg1OVx4NzNceDAwXHgwMFx4MGJceDEzXHgwMFx4MDBceDBiXHgxM1wKXHgwMVx4MDBceDlhXHg5Y1x4MThceDAwXHgwMFx4MDBceDA3XHg3NFx4NDlceDRkXHg0NVx4MDdceGU0XHgwM1wKXHgwYlx4MDBceDI4XHgzMFx4YWFceDI0XHg5MFx4ZTNceDAwXHgwMFx4MjBceDAwXHg0OVx4NDRceDQxXHg1NFwKXHg3OFx4ZGFceGVkXHhkZFx4NzlceDdjXHg1NFx4ZjVceGJkXHhmZlx4ZjFceGNmXHg5OVx4ODRceDFkXHg0M1wKXHg4Mlx4ZWNceDU5XHg4OFx4YzhceDJhXHhiYlx4MjBceDhhXHgyMlx4ODRceDJkXHg2NFx4OTlceDY0XHgyNlwKXHgwOVx4MzBceGI4XHg5NVx4YThceGRkXHg2Ylx4MWZceGM1XHhmNlx4ZDdceDQ3XHg3Zlx4NmRceDZmXHhhZlwKXHhmNFx4ZDdceDVmXHg3Ylx4MWZceGI3XHhkZVx4ZGVceDYyXHhlZlx4YWZceGFiXHhkN1x4MGFceDU3XHhhYlwKXHhhNlx4NzVceGM5XHhiZVx4MmZceDEzXHg1NFx4ZGNceDJiXHg1OFx4MzdceDE2XHgzNVx4YjhceDE0XHhlYlwKXHgxYVx4NWNceDBhXHgwOFx4Y2NceGY5XHhmZFx4MzFceDMzXHgzOFx4YzBceDBjXHg3M1x4NjZceGU2XHg2NFwKXHhlNlx4MmNceGFmXHhlN1x4ZTNceDQxXHg1OVx4MWFceDkzXHg5OVx4Y2ZceDM5XHg2N1x4ZGVceGRmXHhjZlwKXHg2N1x4Y2VceDk5XHgyM1x4MDJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBc"}}]
["a9b81faaf712020557c584b184f531bcec94d3a3-3","a9b81faaf712020557c584b184f531bcec94d3a3",{"$cut":{"chars":108732,"head":"PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiMgUmVzb3VyY2Ugb2JqZWN0IGNvZGUKIwojIENyZWF0ZWQgYnk6IFRoZSBSZXNvdXJjZSBDb21waWxlciBmb3IgUHlRdDUgKFF0IHY1LjE0LjEpCiMKIyBXQVJOSU5HISBBbGwgY2hhbmdlcyBtYWRlIGluIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3QhCgpmcm9tIFB5UXQ1IGltcG9ydCBRdENvcmUKCnF0X3Jlc291cmNlX2RhdGEgPSBiIlwKXHgwMFx4MDBceDM2XHg5ZFwKXHg4OVwKXHg1MFx4NGVceDQ3XHgwZFx4MGFceDFhXHgwYVx4MDBceDAwXHgwMFx4MGRceDQ5XHg0OFx4NDRceDUyXHgwMFwKXHgwMFx4MDFceGU5XHgwMFx4MDBceDAxXHhlOVx4MDhceDA2XHgwMFx4MDBceDAwXHhhNlx4Y2VceGM0XHg5N1wKXHgwMFx4MDBceDAxXHg4Mlx4NjlceDQzXHg0M1x4NTBceDQ5XHg0M1x4NDNceDIwXHg3MFx4NzJceDZmXHg2NlwKXHg2OVx4NmNceDY1XHgwMFx4MDBceDI4XHg5MVx4N2RceDkxXHgzOVx4NDhceDAzXHg0MVx4MTRceDg2XHgzZlwKXHgxM1x4NDVceGYxXHhjMFx4YzJceDE0XHgyMlx4MTZceDViXHhhOFx4OTVceDgyXHhhOFx4ODhceDU4XHg0OVwKXHgxNFx4NDVceDUwXHg5MFx4MThceGMxXHhhYlx4NzBceDc3XHg3M1x4NDJceDc2XHgwZFx4YmJceDExXHgxYlwKXHg0Ylx4YzFceDU2XHhiMFx4ZjBceDY4XHhiY1x4MGFceDFiXHg2Ylx4NmRceDJkXHg2Y1x4MDVceDQxXHhmMFwKXHgwMFx4YjFceGIyXHhiNFx4NTJceGI0XHg5MVx4YjBceGJlXHhkOVx4MDRceDEyXHhjNFx4MzhceDMwXHhjY1wKXHhjN1x4M2ZceGYzXHgzZlx4ZGVceGZiXHgwN1x4MDJceDQ3XHgxOVx4ZDNceDcyXHhhYlx4N2JceGMxXHhiMlwKXHg3M1x4NGVceDY0XHgyMlx4YWNceGNkXHgyZlx4MmNceDZhXHhiNVx4YWZceDA0XHg2OVx4MDBceDNhXHgxOFwKXHhkNlx4NGRceDM3XHgzYlx4M2RceDNiXHgxZVx4YTVceGUyXHhmYVx4YmFceGE3XHg0YVx4OWRceDc3XHgzZFwKXHhhYVx4NTZceGU1XHg3N1x4N2ZceGFlXHhhNlx4NThceGRjXHgzNVx4YTFceDRhXHgxM1x4MWVceDMxXHhiM1wKXHg0ZVx4NGVceDc4XHg0NVx4NzhceDcwXHgzZFx4OTdceDU1XHhiY1x4MjdceDFjXHgzMlx4NTNceDdhXHg0Y1wKXHhmOFx4NWNceGI4XHhkYlx4OTFceDA2XHg4NVx4MWZceDk1XHg2ZVx4MTRceGY4XHg0ZFx4NzFceGQyXHhlN1wKXHg4MFx4YWFceDE5XHg3Mlx4YTJceDkxXHg1MVx4ZTFceDkwXHhiMFx4OTZceDJjXHg2M1x4YTNceDhjXHhjZFwKXHg5NFx4NjNceDA5XHgwZlx4YThceDI5XHg2M1x4OTZceDJkXHhmNVx4MDNceGYzXHgwNVx4OGVceDI5XHhkZVwKXHg1MFx4NmNceDY1XHhkNlx4Y2NceDYyXHg5Zlx4NmFceGMyXHhjNlx4YjhceDNkXHgzN1x4ZWJceGE3XHgwMlwKXHhlZFx4NGNceDMwXHhjOVx4MzRceDMzXHg2OFx4MThceGFjXHg5MVx4MjZceDQzXHg4ZVx4MWVceDM5XHg2ZFwKXHg1MVx4NWNceDIyXHg3Mlx4MWZceGFlXHhlMFx4NmZceGYzXHhmZFx4MzNceGUyXHgzMlx4YzRceDk1XHhjNlwKXHgxNFx4YzdceDE4XHhhYlx4NThceGU4XHhiZVx4MWZceGY1XHgwN1x4YmZceGIzXHg3NVx4MTNceGZkXHg3ZFwKXHg4NVx4NGFceDhkXHg2MVx4YThceDc5XHhmMVx4YmNceDhmXHg0ZVx4YThceGRkXHg4MVx4ZmNceGI2XHhlN1wKXHg3ZFx4MWZceDdiXHg1ZVx4ZmVceDA0XHg4Mlx4Y2ZceDcwXHg2NVx4OTdceGZjXHhhYlx4NDdceDMwXHhmNFwKXHgyOVx4ZmFceDc2XHg0OVx4ZWJceDM4XHg4NFx4ZTZceDRkXHhiOFx4YjhceDJlXHg2OVx4YzZceDJlXHg1Y1wKXHg2ZVx4NDFceGViXHg1M1x4NTZceDc3XHg3NFx4NWZceDBhXHhjYVx4MGVceDI0XHgxMlx4ZjBceDdlXHgyNlwKXHhkZlx4YjRceDAwXHgyZFx4YjdceDUwXHhiZlx4NTRceGM4XHhhZFx4NzhceGNmXHhlOVx4MDNceDQ0XHgyNVwKXHhhYlx4YTlceDFiXHhkOFx4M2ZceDgwXHhhZVx4YTRceGQ0XHg1ZVx4YWVceDMwXHg3N1x4NWRceDc5XHg2ZVwKXHhmZlx4YmVceDI5XHhlNlx4ZjdceDAzXHg5N1x4OGVceDcyXHhiNlx4ODlceDIwXHhjYVx4MTNceDAwXHgwMFwKXHgwMFx4MDZceDYyXHg0Ylx4NDdceDQ0XHgwMFx4ZmZceDAwXHhmZlx4MDBceGZmXHhhMFx4YmRceGE3XHg5M1wKXHgwMFx4MDBceDAwXHgwOVx4NzBceDQ4XHg1OVx4NzNceDAwXHgwMFx4MGJceDEzXHgwMFx4MDBceDBiXHgxM1wKXHgwMVx4MDBceDlhXHg5Y1x4MThceDAwXHgwMFx4MDBceDA3XHg3NFx4NDlceDRkXHg0NVx4MDdceGU0XHgwM1wKXHgwYlx4MDBceDI4XHgzMFx4YWFceDI0XHg5MFx4ZTNceDAwXHgwMFx4MjBceDAwXHg0OVx4NDRceDQxXHg1NFwKXHg3OFx4ZGFceGVkXHhkZFx4NzlceDdjXHg1NFx4ZjVceGJkXHhmZlx4ZjFceGNmXHg5OVx4ODRceDFkXHg0M1wKXHg4Mlx4ZWNceDU5XHg4OFx4YzhceDJhXHhiYlx4MjBceDhhXHgyMlx4ODRceDJkXHg2NFx4OTlceDY0XHgyNlwKXHgwOVx4MzBceGI4XHg5NVx4YThceGRkXHg2Ylx4MWZceGM1XHhmNlx4ZDdceDQ3XHg3Zlx4NmRceDZmXHhhZlwKXHhmNFx4ZDdceDVmXHg3Ylx4MWZceGI3XHhkZVx4ZGVceDYyXHhlZlx4YWZceGFiXHhkN1x4MGFceDU3XHhhYlwKXHhhNlx4NzVceGM5XHhiZVx4MmZceDEzXHg1NFx4ZGNceDJiXHg1OFx4MzdceDE2XHgzNVx4YjhceDE0XHhlYlwKXHgxYVx4NWNceDBhXHgwOFx4Y2NceGY5XHhmZFx4MzFceDMzXHgzOFx4YzBceDBjXHg3M1x4NjZceGU2XHg2NFwKXHhlNlx4MmNceGFmXHhlN1x4ZTNceDQxXHg1OVx4MWFceDkzXHg5OVx4Y2ZceDM5XHg2N1x4ZGVceGRmXHhjZlwKXHg2N1x4Y2VceDk5XHgyM1x4MDJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBc"}}]
["a9b81faaf712020557c584b184f531bcec94d3a3-4","a9b81faaf712020557c584b184f531bcec94d3a3",{"$cut":{"chars":109964,"head":"PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiMgUmVzb3VyY2Ugb2JqZWN0IGNvZGUKIwojIENyZWF0ZWQgYnk6IFRoZSBSZXNvdXJjZSBDb21waWxlciBmb3IgUHlRdDUgKFF0IHY1LjE0LjEpCiMKIyBXQVJOSU5HISBBbGwgY2hhbmdlcyBtYWRlIGluIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3QhCgpmcm9tIFB5UXQ1IGltcG9ydCBRdENvcmUKCnF0X3Jlc291cmNlX2RhdGEgPSBiIlwKXHgwMFx4MDBceDM2XHg5ZFwKXHg4OVwKXHg1MFx4NGVceDQ3XHgwZFx4MGFceDFhXHgwYVx4MDBceDAwXHgwMFx4MGRceDQ5XHg0OFx4NDRceDUyXHgwMFwKXHgwMFx4MDFceGU5XHgwMFx4MDBceDAxXHhlOVx4MDhceDA2XHgwMFx4MDBceDAwXHhhNlx4Y2VceGM0XHg5N1wKXHgwMFx4MDBceDAxXHg4Mlx4NjlceDQzXHg0M1x4NTBceDQ5XHg0M1x4NDNceDIwXHg3MFx4NzJceDZmXHg2NlwKXHg2OVx4NmNceDY1XHgwMFx4MDBceDI4XHg5MVx4N2RceDkxXHgzOVx4NDhceDAzXHg0MVx4MTRceDg2XHgzZlwKXHgxM1x4NDVceGYxXHhjMFx4YzJceDE0XHgyMlx4MTZceDViXHhhOFx4OTVceDgyXHhhOFx4ODhceDU4XHg0OVwKXHgxNFx4NDVceDUwXHg5MFx4MThceGMxXHhhYlx4NzBceDc3XHg3M1x4NDJceDc2XHgwZFx4YmJceDExXHgxYlwKXHg0Ylx4YzFceDU2XHhiMFx4ZjBceDY4XHhiY1x4MGFceDFiXHg2Ylx4NmRceDJkXHg2Y1x4MDVceDQxXHhmMFwKXHgwMFx4YjFceGIyXHhiNFx4NTJceGI0XHg5MVx4YjBceGJlXHhkOVx4MDRceDEyXHhjNFx4MzhceDMwXHhjY1wKXHhjN1x4M2ZceGYzXHgzZlx4ZGVceGZiXHgwN1x4MDJceDQ3XHgxOVx4ZDNceDcyXHhhYlx4N2JceGMxXHhiMlwKXHg3M1x4NGVceDY0XHgyMlx4YWNceGNkXHgyZlx4MmNceDZhXHhiNVx4YWZceDA0XHg2OVx4MDBceDNhXHgxOFwKXHhkNlx4NGRceDM3XHgzYlx4M2RceDNiXHgxZVx4YTVceGUyXHhmYVx4YmFceGE3XHg0YVx4OWRceDc3XHgzZFwKXHhhYVx4NTZceGU1XHg3N1x4N2ZceGFlXHhhNlx4NThceGRjXHgzNVx4YTFceDRhXHgxM1x4MWVceDMxXHhiM1wKXHg0ZVx4NGVceDc4XHg0NVx4NzhceDcwXHgzZFx4OTdceDU1XHhiY1x4MjdceDFjXHgzMlx4NTNceDdhXHg0Y1wKXHhmOFx4NWNceGI4XHhkYlx4OTFceDA2XHg4NVx4MWZceDk1XHg2ZVx4MTRceGY4XHg0ZFx4NzFceGQyXHhlN1wKXHg4MFx4YWFceDE5XHg3Mlx4YTJceDkxXHg1MVx4ZTFceDkwXHhiMFx4OTZceDJjXHg2M1x4YTNceDhjXHhjZFwKXHg5NFx4NjNceDA5XHgwZlx4YThceDI5XHg2M1x4OTZceDJkXHhmNVx4MDNceGYzXHgwNVx4OGVceDI5XHhkZVwKXHg1MFx4NmNceDY1XHhkNlx4Y2NceDYyXHg5Zlx4NmFceGMyXHhjNlx4YjhceDNkXHgzN1x4ZWJceGE3XHgwMlwKXHhlZFx4NGNceDMwXHhjOVx4MzRceDMzXHg2OFx4MThceGFjXHg5MVx4MjZceDQzXHg4ZVx4MWVceDM5XHg2ZFwKXHg1MVx4NWNceDIyXHg3Mlx4MWZceGFlXHhlMFx4NmZceGYzXHhmZFx4MzNceGUyXHgzMlx4YzRceDk1XHhjNlwKXHgxNFx4YzdceDE4XHhhYlx4NThceGU4XHhiZVx4MWZceGY1XHgwN1x4YmZceGIzXHg3NVx4MTNceGZkXHg3ZFwKXHg4NVx4NGFceDhkXHg2MVx4YThceDc5XHhmMVx4YmNceDhmXHg0ZVx4YThceGRkXHg4MVx4ZmNceGI2XHhlN1wKXHg3ZFx4MWZceDdiXHg1ZVx4ZmVceDA0XHg4Mlx4Y2ZceDcwXHg2NVx4OTdceGZjXHhhYlx4NDdceDMwXHhmNFwKXHgyOVx4ZmFceDc2XHg0OVx4ZWJceDM4XHg4NFx4ZTZceDRkXHhiOFx4YjhceDJlXHg2OVx4YzZceDJlXHg1Y1wKXHg2ZVx4NDFceGViXHg1M1x4NTZceDc3XHg3NFx4NWZceDBhXHhjYVx4MGVceDI0XHgxMlx4ZjBceDdlXHgyNlwKXHhkZlx4YjRceDAwXHgyZFx4YjdceDUwXHhiZlx4NTRceGM4XHhhZFx4NzhceGNmXHhlOVx4MDNceDQ0XHgyNVwKXHhhYlx4YTlceDFiXHhkOFx4M2ZceDgwXHhhZVx4YTRceGQ0XHg1ZVx4YWVceDMwXHg3N1x4NWRceDc5XHg2ZVwKXHhmZlx4YmVceDI5XHhlNlx4ZjdceDAzXHg5N1x4OGVceDcyXHhiNlx4ODlceDIwXHhjYVx4MTNceDAwXHgwMFwKXHgwMFx4MDZceDYyXHg0Ylx4NDdceDQ0XHgwMFx4ZmZceDAwXHhmZlx4MDBceGZmXHhhMFx4YmRceGE3XHg5M1wKXHgwMFx4MDBceDAwXHgwOVx4NzBceDQ4XHg1OVx4NzNceDAwXHgwMFx4MGJceDEzXHgwMFx4MDBceDBiXHgxM1wKXHgwMVx4MDBceDlhXHg5Y1x4MThceDAwXHgwMFx4MDBceDA3XHg3NFx4NDlceDRkXHg0NVx4MDdceGU0XHgwM1wKXHgwYlx4MDBceDI4XHgzMFx4YWFceDI0XHg5MFx4ZTNceDAwXHgwMFx4MjBceDAwXHg0OVx4NDRceDQxXHg1NFwKXHg3OFx4ZGFceGVkXHhkZFx4NzlceDdjXHg1NFx4ZjVceGJkXHhmZlx4ZjFceGNmXHg5OVx4ODRceDFkXHg0M1wKXHg4Mlx4ZWNceDU5XHg4OFx4YzhceDJhXHhiYlx4MjBceDhhXHgyMlx4ODRceDJkXHg2NFx4OTlceDY0XHgyNlwKXHgwOVx4MzBceGI4XHg5NVx4YThceGRkXHg2Ylx4MWZceGM1XHhmNlx4ZDdceDQ3XHg3Zlx4NmRceDZmXHhhZlwKXHhmNFx4ZDdceDVmXHg3Ylx4MWZceGI3XHhkZVx4ZGVceDYyXHhlZlx4YWZceGFiXHhkN1x4MGFceDU3XHhhYlwKXHhhNlx4NzVceGM5XHhiZVx4MmZceDEzXHg1NFx4ZGNceDJiXHg1OFx4MzdceDE2XHgzNVx4YjhceDE0XHhlYlwKXHgxYVx4NWNceDBhXHgwOFx4Y2NceGY5XHhmZFx4MzFceDMzXHgzOFx4YzBceDBjXHg3M1x4NjZceGU2XHg2NFwKXHhlNlx4MmNceGFmXHhlN1x4ZTNceDQxXHg1OVx4MWFceDkzXHg5OVx4Y2ZceDM5XHg2N1x4ZGVceGRmXHhjZlwKXHg2N1x4Y2VceDk5XHgyM1x4MDJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBc"}}]
["ecf0697346f301ffb360e0beac2771a44f672f88-1","ecf0697346f301ffb360e0beac2771a44f672f88","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IGpzb24KCmZyb20gZGphbmdvLnVybHMgaW1wb3J0IHJldmVyc2UKCmZyb20gc2VhaHViLnRlc3RfdXRpbHMgaW1wb3J0IEJhc2VUZXN0Q2FzZQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpjbGFzcyBRdWVyeVppcFByb2dyZXNzVmlld1Rlc3QoQmFzZVRlc3RDYXNlKToKCiAgICBkZWYgX2dldF96aXBfdG9rZW4oc2VsZik6CiAgICAgICAgc2VsZi5sb2dpbl9hcyhzZWxmLnVzZXIpCjx8ZmltX2VuZHw+"]
["6b93c3f0efec2694c9b60d08d4fb9905a54bc3c1-1","6b93c3f0efec2694c9b60d08d4fb9905a54bc3c1","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMCwgQmF0dGVsbGUgRW5lcmd5IEFsbGlhbmNlLCBMTEMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojIEFMTCBSSUdIVFMgUkVTRVJWRUQKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gc2NpcHkuc3RhdHMgaW1wb3J0IGJldGEKZnJvbSBzY2lweS5pbnRlZ3JhdGUgaW1wb3J0IHF1YWQKPHxmaW1fZW5kfD4="]
["6b93c3f0efec2694c9b60d08d4fb9905a54bc3c1-2","6b93c3f0efec2694c9b60d08d4fb9905a54bc3c1","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMCwgQmF0dGVsbGUgRW5lcmd5IEFsbGlhbmNlLCBMTEMKIyBBTEwgUklHSFRTIFJFU0VSVkVECmltcG9ydCBudW1weSBhcyBucApmcm9tIHNjaXB5LnN0YXRzIGltcG9ydCBiZXRhCmZyb20gc2NpcHkuaW50ZWdyYXRlIGltcG9ydCBxdWFkCmltcG9ydCByYW5kb20KCmRlZiBSVUxtb2RlbChhLGIpOgogICMgYSA9IDIuMzEKICAjIGIgPSAwLjI2Nwo8fGZpbV9ob2xlfD4KICByZXR1cm4gdGltZQoKCmRlZiBydW4oc2VsZixJbnB1dCk6CiAgIyBsYW1iZGEodCkgPSBhICsgdCpiCiAgIyBpbnRwdXQ6IGFscGhhLCBiZXRhLCBUIChtYXggdGltZSkKICAjIG91dHB1dDogdCwgcAoKICBzZWxmLnBfUDEgPSBucC56ZXJvcyhJbnB1dFsndGltZSddLnNpemUpCgogIGZvciBpbmRleCx2YWx1ZSBpbiBucC5uZGVudW1lcmF0ZShJbnB1dFsndGltZSddKToKICAgICBzZWxmLnBfUDFbaW5kZXhbMF1dID0gYmV0YS5jZGYodmFsdWUvNzMwMCxJbnB1dFsnYWxwaGFfUDEnXSxJbnB1dFsnYmV0YV9QMSddKQo8fGZpbV9zdWZmaXh8PgogICMgaHR0cHM6Ly9kb2NzLnNjaXB5Lm9yZy9kb2Mvc2NpcHkvcmVmZXJlbmNlL2dlbmVyYXRlZC9zY2lweS5zdGF0cy5iZXRhLmh0bWwKCiAgcnZzID0gYmV0YS5ydnMoYSwgYikKICB0aW1lID0gNzMwMCAqIHJ2cwo8fGZpbV9lbmR8Pg=="]
["6b93c3f0efec2694c9b60d08d4fb9905a54bc3c1-3","6b93c3f0efec2694c9b60d08d4fb9905a54bc3c1","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMCwgQmF0dGVsbGUgRW5lcmd5IEFsbGlhbmNlLCBMTEMKIyBBTEwgUklHSFRTIFJFU0VSVkVECmltcG9ydCBudW1weSBhcyBucApmcm9tIHNjaXB5LnN0YXRzIGltcG9ydCBiZXRhCmZyb20gc2NpcHkuaW50ZWdyYXRlIGltcG9ydCBxdWFkCmltcG9ydCByYW5kb20KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIFJVTG1vZGVsKGEsYik6CiAgIyBhID0gMi4zMQogICMgYiA9IDAuMjY3CiAgIyBodHRwczovL2RvY3Muc2NpcHkub3JnL2RvYy9zY2lweS9yZWZlcmVuY2UvZ2VuZXJhdGVkL3NjaXB5LnN0YXRzLmJldGEuaHRtbAo8fGZpbV9lbmR8Pg=="]
["6b93c3f0efec2694c9b60d08d4fb9905a54bc3c1-4","6b93c3f0efec2694c9b60d08d4fb9905a54bc3c1","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMCwgQmF0dGVsbGUgRW5lcmd5IEFsbGlhbmNlLCBMTEMKIyBBTEwgUklHSFRTIFJFU0VSVkVECmltcG9ydCBudW1weSBhcyBucApmcm9tIHNjaXB5LnN0YXRzIGltcG9ydCBiZXRhCmZyb20gc2NpcHkuaW50ZWdyYXRlIGltcG9ydCBxdWFkCmltcG9ydCByYW5kb20KCmRlZiBSVUxtb2RlbChhLGIpOgogICMgYSA9IDIuMzEKICAjIGIgPSAwLjI2NwogICMgaHR0cHM6Ly9kb2NzLnNjaXB5Lm9yZy9kb2Mvc2NpcHkvcmVmZXJlbmNlL2dlbmVyYXRlZC9zY2lweS5zdGF0cy5iZXRhLmh0bWwKCiAgcnZzID0gYmV0YS5ydnMoYSwgYikKICB0aW1lID0gNzMwMCAqIHJ2cwogIHJldHVybiB0aW1lCgoKZGVmIHJ1bihzZWxmLElucHV0KToKICAjIGxhbWJkYSh0KSA9IGEgKyB0KmIKICAjIGludHB1dDogYWxwaGEsIGJldGEsIFQgKG1heCB0aW1lKQogICMgb3V0cHV0OiB0LCBwCgogIHNlbGYucF9QMSA9IG5wLnplcm9zKElucHV0Wyd0aW1lJ10uc2l6ZSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICBmb3IgaW5kZXgsdmFsdWUgaW4gbnAubmRlbnVtZXJhdGUoSW5wdXRbJ3RpbWUnXSk6CiAgICAgc2VsZi5wX1AxW2luZGV4WzBdXSA9IGJldGEuY2RmKHZhbHVlLzczMDAsSW5wdXRbJ2FscGhhX1AxJ10sSW5wdXRbJ2JldGFfUDEnXSkKPHxmaW1fZW5kfD4="]
["6b93c3f0efec2694c9b60d08d4fb9905a54bc3c1-5","6b93c3f0efec2694c9b60d08d4fb9905a54bc3c1","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMCwgQmF0dGVsbGUgRW5lcmd5IEFsbGlhbmNlLCBMTEMKIyBBTEwgUklHSFRTIFJFU0VSVkVECmltcG9ydCBudW1weSBhcyBucApmcm9tIHNjaXB5LnN0YXRzIGltcG9ydCBiZXRhCmZyb20gc2NpcHkuaW50ZWdyYXRlIGltcG9ydCBxdWFkCmltcG9ydCByYW5kb20KCmRlZiBSVUxtb2RlbChhLGIpOgogICMgYSA9IDIuMzEKICAjIGIgPSAwLjI2NwogICMgaHR0cHM6Ly9kb2NzLnNjaXB5Lm9yZy9kb2Mvc2NpcHkvcmVmZXJlbmNlL2dlbmVyYXRlZC9zY2lweS5zdGF0cy5iZXRhLmh0bWwKCiAgcnZzID0gYmV0YS5ydnMoYSwgYikKPHxmaW1faG9sZXw+CmRlZiBydW4oc2VsZixJbnB1dCk6CiAgIyBsYW1iZGEodCkgPSBhICsgdCpiCiAgIyBpbnRwdXQ6IGFscGhhLCBiZXRhLCBUIChtYXggdGltZSkKICAjIG91dHB1dDogdCwgcAoKICBzZWxmLnBfUDEgPSBucC56ZXJvcyhJbnB1dFsndGltZSddLnNpemUpCgogIGZvciBpbmRleCx2YWx1ZSBpbiBucC5uZGVudW1lcmF0ZShJbnB1dFsndGltZSddKToKICAgICBzZWxmLnBfUDFbaW5kZXhbMF1dID0gYmV0YS5jZGYodmFsdWUvNzMwMCxJbnB1dFsnYWxwaGFfUDEnXSxJbnB1dFsnYmV0YV9QMSddKQo8fGZpbV9zdWZmaXh8PgogIHRpbWUgPSA3MzAwICogcnZzCiAgcmV0dXJuIHRpbWUKCgo8fGZpbV9lbmR8Pg=="]
["e792b3859ca705331f0c5641cf79f42f03c204f6-1","e792b3859ca705331f0c5641cf79f42f03c204f6","PHxmaW1fcHJlZml4fD4KZGVmIHBhcnJvdF90cm91YmxlKHRhbGtpbmcsIGhvdXIpOgogIHRyb3VibGUgPSBGYWxzZQogIGlmIHRhbGtpbmcgaXMgVHJ1ZToKICAgIGlmIGhvdXIgPCA3OgogICAgICB0cm91YmxlID0gVHJ1ZQogICAgZWxpZiBob3VyID4gMjA6CiAgICAgIHRyb3VibGUgPSBUcnVlCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgcmV0dXJuIHRyb3VibGUKPHxmaW1fZW5kfD4="]
["e792b3859ca705331f0c5641cf79f42f03c204f6-2","e792b3859ca705331f0c5641cf79f42f03c204f6","PHxmaW1fcHJlZml4fD4KZGVmIHBhcnJvdF90cm91YmxlKHRhbGtpbmcsIGhvdXIpOgogIHRyb3VibGUgPSBGYWxzZQogIGlmIHRhbGtpbmcgaXMgVHJ1ZToKPHxmaW1faG9sZXw+CgogIHJldHVybiB0cm91YmxlCjx8ZmltX3N1ZmZpeHw+CiAgICBpZiBob3VyIDwgNzoKICAgICAgdHJvdWJsZSA9IFRydWUKICAgIGVsaWYgaG91ciA+IDIwOgogICAgICB0cm91YmxlID0gVHJ1ZQo8fGZpbV9lbmR8Pg=="]
["e792b3859ca705331f0c5641cf79f42f03c204f6-3","e792b3859ca705331f0c5641cf79f42f03c204f6","PHxmaW1fcHJlZml4fD4KZGVmIHBhcnJvdF90cm91YmxlKHRhbGtpbmcsIGhvdXIpOgogIHRyb3VibGUgPSBGYWxzZQogIGlmIHRhbGtpbmcgaXMgVHJ1ZToKICAgIGlmIGhvdXIgPCA3OgogICAgICB0cm91YmxlID0gVHJ1ZQogICAgZWxpZiBob3VyID4gMjA6CiAgICAgIHRyb3VibGUgPSBUcnVlCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgcmV0dXJuIHRyb3VibGUKPHxmaW1fZW5kfD4="]
["789c9a9e985f685cd13c3695df5323a77c591a29-1","789c9a9e985f685cd13c3695df5323a77c591a29","PHxmaW1fcHJlZml4fD4KZnJvbSB1dGlsc19jb2xsZWN0aW9uLnRpbWUgaW1wb3J0IHRpbWVpdF9kZWNvcmF0b3IsIEVhc3lUaW1lcgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gdXRpbHNfY29sbGVjdGlvbi5maWxlIGltcG9ydCBnZXRfZm9sZGVyX3NpemUKZnJvbSB1dGlsc19jb2xsZWN0aW9uLmpzb25lbmNvZGVyIGltcG9ydCB3cml0ZV9qc29uCgoKPHxmaW1fZW5kfD4="]
["789c9a9e985f685cd13c3695df5323a77c591a29-2","789c9a9e985f685cd13c3695df5323a77c591a29","PHxmaW1fcHJlZml4fD4KZnJvbSB1dGlsc19jb2xsZWN0aW9uLnRpbWUgaW1wb3J0IHRpbWVpdF9kZWNvcmF0b3IsIEVhc3lUaW1lcgpmcm9tIHV0aWxzX2NvbGxlY3Rpb24uZmlsZSBpbXBvcnQgZ2V0X2ZvbGRlcl9zaXplCmZyb20gdXRpbHNfY29sbGVjdGlvbi5qc29uZW5jb2RlciBpbXBvcnQgd3JpdGVfanNvbgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZGVmIGJyZWFrcG9pbnQoKToKICAgIGltcG9ydCBwZGIKICAgIHBkYi5zZXRfdHJhY2UoKQo8fGZpbV9lbmR8Pg=="]
["789c9a9e985f685cd13c3695df5323a77c591a29-3","789c9a9e985f685cd13c3695df5323a77c591a29","PHxmaW1fcHJlZml4fD4KZnJvbSB1dGlsc19jb2xsZWN0aW9uLnRpbWUgaW1wb3J0IHRpbWVpdF9kZWNvcmF0b3IsIEVhc3lUaW1lcgo8fGZpbV9ob2xlfD4KZGVmIGJyZWFrcG9pbnQoKToKICAgIGltcG9ydCBwZGIKICAgIHBkYi5zZXRfdHJhY2UoKQo8fGZpbV9zdWZmaXh8Pgpmcm9tIHV0aWxzX2NvbGxlY3Rpb24uZmlsZSBpbXBvcnQgZ2V0X2ZvbGRlcl9zaXplCmZyb20gdXRpbHNfY29sbGVjdGlvbi5qc29uZW5jb2RlciBpbXBvcnQgd3JpdGVfanNvbgoKCjx8ZmltX2VuZHw+"]
["789c9a9e985f685cd13c3695df5323a77c591a29-4","789c9a9e985f685cd13c3695df5323a77c591a29","PHxmaW1fcHJlZml4fD4KZnJvbSB1dGlsc19jb2xsZWN0aW9uLnRpbWUgaW1wb3J0IHRpbWVpdF9kZWNvcmF0b3IsIEVhc3lUaW1lcgpmcm9tIHV0aWxzX2NvbGxlY3Rpb24uZmlsZSBpbXBvcnQgZ2V0X2ZvbGRlcl9zaXplCmZyb20gdXRpbHNfY29sbGVjdGlvbi5qc29uZW5jb2RlciBpbXBvcnQgd3JpdGVfanNvbgoKCmRlZiBicmVha3BvaW50KCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGltcG9ydCBwZGIKICAgIHBkYi5zZXRfdHJhY2UoKQo8fGZpbV9lbmR8Pg=="]
["789c9a9e985f685cd13c3695df5323a77c591a29-5","789c9a9e985f685cd13c3695df5323a77c591a29","PHxmaW1fcHJlZml4fD4KZnJvbSB1dGlsc19jb2xsZWN0aW9uLnRpbWUgaW1wb3J0IHRpbWVpdF9kZWNvcmF0b3IsIEVhc3lUaW1lcgpmcm9tIHV0aWxzX2NvbGxlY3Rpb24uZmlsZSBpbXBvcnQgZ2V0X2ZvbGRlcl9zaXplCmZyb20gdXRpbHNfY29sbGVjdGlvbi5qc29uZW5jb2RlciBpbXBvcnQgd3JpdGVfanNvbgoKCmRlZiBicmVha3BvaW50KCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGltcG9ydCBwZGIKICAgIHBkYi5zZXRfdHJhY2UoKQo8fGZpbV9lbmR8Pg=="]
["00b47457a9c6c6f6582df3e6964340c887c3ab8b-1","00b47457a9c6c6f6582df3e6964340c887c3ab8b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgcmFuZG9tCgojIFN1YnN0aXR1dGUgYSBnaXZlbiBudWNsZW90aWRlIHdpdGggYW5vdGhlcgojIFBhcmFtZXRlcnM6IGJwIChzdHJpbmcpCiMgT3V0cHV0OiBuZXcgYmFzZXBhaXIgKHN0cmluZykKZGVmIHJlcGxhY2VfYmFzZXBhaXIoYnApOgogICAgbnVjbGVvdGlkZXMgPSBbJ0EnLCAnVCcsICdDJywgJ0cnXQogICAgaWYgYnAgaW4gbnVjbGVvdGlkZXM6CiAgICAgICAgbnVjbGVvdGlkZXMucmVtb3ZlKGJwKQogICAgICAgIHJldHVybiBudWNsZW90aWRlc1tyYW5kb20ucmFuZGludCgwLCAyKV0KICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIGJwCgojIFJhbmRvbWx5IHN3aXRjaCBudWNsZW90aWRlcyBpbiBhIHNlcXVlbmNlIHdpdGggc3RhdGVkIGZyZXF1ZW5jeQojIFBhcmFtZXRlcnM6IHNlcXVlbmNlIChzdHJpbmcpLCBzd2FwRnJlcSAoaW50KQojIE91dHB1dDogbmV3IHNlcXVlbmNlIChzdHJpbmcpCmRlZiBpbnNlcnRfc3dhcHMoc2VxdWVuY2UsIHN3YXBGcmVxKToKICAgIHNlcXVlbmNlID0gc2VxdWVuY2UudXBwZXIoKQogICAgc3dhcHMgPSBpbnQobGVuKHNlcXVlbmNlKSpzd2FwRnJlcSkKICAgIGluZGljZXMgPSByYW5kb20uc2FtcGxlKHJhbmdlKDAsIGxlbihzZXF1ZW5jZSkgLSAxKSwgc3dhcHMpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGZvciBpIGluIGluZGljZXM6CiAgICAgICAgbnVjbGVvdGlkZXMgPSBsaXN0KHNlcXVlbmNlKQogICAgICAgIG51Y2xlb3RpZGVzW2ldID0gcmVwbGFjZV9iYXNlcGFpcihudWNsZW90aWRlc1tpXSkKICAgICAgICBzZXF1ZW5jZSA9ICcnLmpvaW4obnVjbGVvdGlkZXMpCjx8ZmltX2VuZHw+"]
["00b47457a9c6c6f6582df3e6964340c887c3ab8b-2","00b47457a9c6c6f6582df3e6964340c887c3ab8b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCByYW5kb20KCiMgU3Vic3RpdHV0ZSBhIGdpdmVuIG51Y2xlb3RpZGUgd2l0aCBhbm90aGVyCiMgUGFyYW1ldGVyczogYnAgKHN0cmluZykKPHxmaW1fZW5kfD4="]
["6b50bb4ccaa4be0c6d53c9f2d2ed5199f61be390-1","6b50bb4ccaa4be0c6d53c9f2d2ed5199f61be390","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCiAgICB0ZXN0cy5jb25maWcudGVzdF9JZEdlbmVyYXRvcgogICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KICAgIAogICAgOmNvcHlyaWdodDogKGMpIERpZ2l0YWwgTGl2aW5nIFNvZnR3YXJlIENvcnAuIDIwMTUtMjAxNiwgc2VlIEFVVEhPUlMgZm9yIG1vcmUgZGV0YWlscy4KICAgIDpsaWNlbnNlOiBNSVQsIHNlZSBMSUNFTlNFIGZvciBtb3JlIGRldGFpbHMuCiIiIgoKaW1wb3J0IHB5dGVzdAoKZnJvbSBwaXBfc2VydmljZXNfcnVudGltZS5kYXRhIGltcG9ydCBJZEdlbmVyYXRvcgoKY2xhc3MgVGVzdElkR2VuZXJhdG9yOgoKICAgIGRlZiB0ZXN0X3Nob3J0KHNlbGYpOgogICAgICAgIGlkMSA9IElkR2VuZXJhdG9yLnNob3J0KCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGFzc2VydCBpZDEgIT0gTm9uZQogICAgICAgIGFzc2VydCBsZW4oaWQxKSA+PSA5CgogICAgICAgIGlkMiA9IElkR2VuZXJhdG9yLnNob3J0KCkKPHxmaW1fZW5kfD4="]
["6b50bb4ccaa4be0c6d53c9f2d2ed5199f61be390-2","6b50bb4ccaa4be0c6d53c9f2d2ed5199f61be390","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCiAgICB0ZXN0cy5jb25maWcudGVzdF9JZEdlbmVyYXRvcgogICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KICAgIAogICAgOmNvcHlyaWdodDogKGMpIERpZ2l0YWwgTGl2aW5nIFNvZnR3YXJlIENvcnAuIDIwMTUtMjAxNiwgc2VlIEFVVEhPUlMgZm9yIG1vcmUgZGV0YWlscy4KICAgIDpsaWNlbnNlOiBNSVQsIHNlZSBMSUNFTlNFIGZvciBtb3JlIGRldGFpbHMuCiIiIgoKaW1wb3J0IHB5dGVzdAoKZnJvbSBwaXBfc2VydmljZXNfcnVudGltZS5kYXRhIGltcG9ydCBJZEdlbmVyYXRvcgoKY2xhc3MgVGVzdElkR2VuZXJhdG9yOgoKPHxmaW1faG9sZXw+CgogICAgICAgIGlkMiA9IElkR2VuZXJhdG9yLnNob3J0KCkKICAgICAgICBhc3NlcnQgaWQyICE9IE5vbmUKICAgICAgICBhc3NlcnQgbGVuKGlkMikgPj0gOQogICAgICAgIGFzc2VydCBpZDEgIT0gaWQyCgogICAgZGVmIHRlc3RfdXVpZChzZWxmKToKICAgICAgICBpZDEgPSBJZEdlbmVyYXRvci51dWlkKCkKICAgICAgICBhc3NlcnQgaWQxICE9IE5vbmUKICAgICAgICBhc3NlcnQgbGVuKGlkMSkgPT0gMzIKCiAgICAgICAgaWQyID0gSWRHZW5lcmF0b3IudXVpZCgpCiAgICAgICAgYXNzZXJ0IGlkMiAhPSBOb25lCiAgICAgICAgYXNzZXJ0IGxlbihpZDIpID09IDMyCiAgICAgICAgYXNzZXJ0IGlkMSAhPSBpZDIKICAgICAgICAKPHxmaW1fc3VmZml4fD4KICAgIGRlZiB0ZXN0X3Nob3J0KHNlbGYpOgogICAgICAgIGlkMSA9IElkR2VuZXJhdG9yLnNob3J0KCkKICAgICAgICBhc3NlcnQgaWQxICE9IE5vbmUKICAgICAgICBhc3NlcnQgbGVuKGlkMSkgPj0gOQo8fGZpbV9lbmR8Pg=="]
["6b50bb4ccaa4be0c6d53c9f2d2ed5199f61be390-3","6b50bb4ccaa4be0c6d53c9f2d2ed5199f61be390","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCiAgICB0ZXN0cy5jb25maWcudGVzdF9JZEdlbmVyYXRvcgogICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KICAgIAogICAgOmNvcHlyaWdodDogKGMpIERpZ2l0YWwgTGl2aW5nIFNvZnR3YXJlIENvcnAuIDIwMTUtMjAxNiwgc2VlIEFVVEhPUlMgZm9yIG1vcmUgZGV0YWlscy4KICAgIDpsaWNlbnNlOiBNSVQsIHNlZSBMSUNFTlNFIGZvciBtb3JlIGRldGFpbHMuCiIiIgoKaW1wb3J0IHB5dGVzdAoKZnJvbSBwaXBfc2VydmljZXNfcnVudGltZS5kYXRhIGltcG9ydCBJZEdlbmVyYXRvcgoKY2xhc3MgVGVzdElkR2VuZXJhdG9yOgoKICAgIGRlZiB0ZXN0X3Nob3J0KHNlbGYpOgogICAgICAgIGlkMSA9IElkR2VuZXJhdG9yLnNob3J0KCkKICAgICAgICBhc3NlcnQgaWQxICE9IE5vbmUKICAgICAgICBhc3NlcnQgbGVuKGlkMSkgPj0gOQoKICAgICAgICBpZDIgPSBJZEdlbmVyYXRvci5zaG9ydCgpCiAgICAgICAgYXNzZXJ0IGlkMiAhPSBOb25lCiAgICAgICAgYXNzZXJ0IGxlbihpZDIpID49IDkKICAgICAgICBhc3NlcnQgaWQxICE9IGlkMgo8fGZpbV9ob2xlfD4KICAgICAgICBhc3NlcnQgbGVuKGlkMSkgPT0gMzIKCiAgICAgICAgaWQyID0gSWRHZW5lcmF0b3IudXVpZCgpCiAgICAgICAgYXNzZXJ0IGlkMiAhPSBOb25lCiAgICAgICAgYXNzZXJ0IGxlbihpZDIpID09IDMyCiAgICAgICAgYXNzZXJ0IGlkMSAhPSBpZDIKICAgICAgICAKPHxmaW1fc3VmZml4fD4KCiAgICBkZWYgdGVzdF91dWlkKHNlbGYpOgogICAgICAgIGlkMSA9IElkR2VuZXJhdG9yLnV1aWQoKQogICAgICAgIGFzc2VydCBpZDEgIT0gTm9uZQo8fGZpbV9lbmR8Pg=="]
["e7243a7c0a91ab085e57b8ef657589a2a5c125be-1","e7243a7c0a91ab085e57b8ef657589a2a5c125be","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKaW1wb3J0IHJlCmZyb20gY29weSBpbXBvcnQgZGVlcGNvcHkKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZQpmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKZnJvbSBzeXMgaW1wb3J0IGFyZ3YKZnJvbSB0eXBpbmcgaW1wb3J0IFR1cGxlLCBMaXN0LCBTZXQKaW1wb3J0IGl0ZXJ0b29scyBhcyBpdAoKCmRlZiBnY2QoYSwgYik6CiAgICAiIiJDb21wdXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiBhIGFuZCBiIiIiCiAgICB3aGlsZSBiID4gMDoKICAgICAgICBhLCBiID0gYiwgYSAlIGIKICAgIHJldHVybiBhCgoKZGVmIGxjbShhLCBiKToKICAgICIiIkNvbXB1dGUgdGhlIGxvd2VzdCBjb21tb24gbXVsdGlwbGUgb2YgYSBhbmQgYiIiIgogICAgcmV0dXJuIGEgKiBiIC8gZ2NkKGEsIGIpCgoKY2xhc3MgTW9vbihvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvc2l0aW9uOiBUdXBsZVtpbnQsIC4uLl0pOgogICAgICAgIHNlbGYucG9zaXRpb24gPSBsaXN0KHBvc2l0aW9uKQogICAgICAgIHNlbGYudmVsb2NpdHkgPSBsaXN0KDAgZm9yIF8gaW4gcmFuZ2Uoc2VsZi5kaW1lbnNpb25zKSkKCiAgICBAcHJvcGVydHkKICAgIGRlZiBkaW1lbnNpb25zKHNlbGYpIC0+IGludDoKICAgICAgICByZXR1cm4gbGVuKHNlbGYucG9zaXRpb24pCgogICAgQHByb3BlcnR5CiAgICBkZWYgZW5lcmd5KHNlbGYpIC0+IGludDoKICAgICAgICByZXR1cm4gc3VtKGFicyh2KSBmb3IgdiBpbiBzZWxmLnBvc2l0aW9uKSAqIHN1bShhYnModikgZm9yIHYgaW4gc2VsZi52ZWxvY2l0eSkKCiAgICBkZWYgdXBkYXRlX3ZlbG9jaXR5KHNlbGYsIG90aGVyOiBNb29uKSAtPiBOb25lOgogICAgICAgIGZvciBpZHggaW4gcmFuZ2Uoc2VsZi5kaW1lbnNpb25zKToKICAgICAgICAgICAgaWYgc2VsZi5wb3NpdGlvbltpZHhdIDwgb3RoZXIucG9zaXRpb25baWR4XToKICAgICAgICAgICAgICAgIHNlbGYudmVsb2NpdHlbaWR4XSArPSAxCiAgICAgICAgICAgIGVsaWYgc2VsZi5wb3NpdGlvbltpZHhdID4gb3RoZXIucG9zaXRpb25baWR4XToKICAgICAgICAgICAgICAgIHNlbGYudmVsb2NpdHlbaWR4XSAtPSAxCgogICAgZGVmIHVwZGF0ZV9wb3NpdGlvbihzZWxmKSAtPiBOb25lOgogICAgICAgIGZvciBpZHggaW4gcmFuZ2Uoc2VsZi5kaW1lbnNpb25zKToKICAgICAgICAgICAgc2VsZi5wb3NpdGlvbltpZHhdICs9IHNlbGYudmVsb2NpdHlbaWR4XQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiBmJ01vb24oe3NlbGYucG9zaXRpb259LHtzZWxmLnZlbG9jaXR5fSknCgogICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzdHIoc2VsZikKCiAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyOiBNb29uKSAtPiBib29sOgogICAgICAgIHJldHVybiBzZWxmLnBvc2l0aW9uID09IG90aGVyLnBvc2l0aW9uIGFuZCBzZWxmLnZlbG9jaXR5ID09IG90aGVyLnZlbG9jaXR5CgogICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICAgIHJldHVybiBoYXNoKHR1cGxlKHNlbGYucG9zaXRpb24gKyBzZWxmLnZlbG9jaXR5KSkKCgpkZWYgc2ltdWxhdGVfc3RlcChtb29uczogVHVwbGVbTW9vbl0sIHN0ZXBzOiBpbnQgPSAxKSAtPiBUdXBsZVtNb29uXToKICAgIG1vb25zID0gZGVlcGNvcHkobW9vbnMpCiAgICBmb3IgXyBpbiByYW5nZShzdGVwcyk6CiAgICAgICAgZm9yIGEsIGIgaW4gaXQucGVybXV0YXRpb25zKG1vb25zLCAyKToKICAgICAgICAgICAgYS51cGRhdGVfdmVsb2NpdHkoYikKICAgICAgICBmb3IgbW9vbiBpbiBtb29uczoKICAgICAgICAgICAgbW9vbi51cGRhdGVfcG9zaXRpb24oKQogICAgcmV0dXJuIHR1cGxlKG1vb25zKQoKCmRlZiBoYXNfY3ljbGVfYXQob25lOiBUdXBsZVtNb29uXSwgdHdvOiBUdXBsZVtNb29uXSwgaTogaW50KSAtPiBib29sOgogICAgcmV0dXJuIGFsbCgKICAgICAgICBhLnBvc2l0aW9uW2ldID09IGIucG9zaXRpb25baV0gYW5kIGEudmVsb2NpdHlbaV0gPT0gYi52ZWxvY2l0eVtpXQogICAgICAgIGZvciBhLCBiIGluIHppcChvbmUsIHR3bykKICAgICkKCgpkZWYgZmluZF9jeWNsZV9zdGVwcyhtb29uczogVHVwbGVbTW9vbl0pIC0+IGludDoKICAgIGluaXRpYWxfbW9vbnMgPSBkZWVwY29weShtb29ucykKICAgIGN5Y2xlcyA9IGxpc3QoLTEgZm9yIF8gaW4gcmFuZ2UobW9vbnNbMF0uZGltZW5zaW9ucykpCgogICAgc3RlcHMgPSAwCiAgICB3aGlsZSBub3QgYWxsKHYgIT0gLTEgZm9yIHYgaW4gY3ljbGVzKToKICAgICAgICBzdGVwcyArPSAxCgogICAgICAgIG1vb25zID0gc2ltdWxhdGVfc3RlcChtb29ucykKCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGN5Y2xlcykpOgogICAgICAgICAgICBpZiBjeWNsZXNbaV0gIT0gLTE6CiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgaWYgbm90IGhhc19jeWNsZV9hdChtb29ucywgaW5pdGlhbF9tb29ucywgaSk6CiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgY3ljbGVzW2ldID0gc3RlcHMKCiAgICByZXR1cm4gaW50KHJlZHVjZShsY20sIGN5Y2xlcykpCgoKZGVmIGZpbmRfY3ljbGVfc3RlcHNfYnlfYnJ1dGVfZm9yY2UobW9vbnM6IExpc3RbTW9vbl0pIC0+IGludDoKICAgIHNpbXVsYXRpb25zID0ge3R1cGxlKG1vb25zKX0KICAgIHN0ZXBzID0gMQogICAgd2hpbGUgKG1vb25zIDo9IHNpbXVsYXRlX3N0ZXAobW9vbnMpKSBub3QgaW4gc2ltdWxhdGlvbnM6CiAgICAgICAgc3RlcHMgKz0gMQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICByZXR1cm4gc3RlcHMKCgo8fGZpbV9lbmR8Pg=="]
["e7243a7c0a91ab085e57b8ef657589a2a5c125be-2","e7243a7c0a91ab085e57b8ef657589a2a5c125be","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKaW1wb3J0IHJlCmZyb20gY29weSBpbXBvcnQgZGVlcGNvcHkKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZQpmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKZnJvbSBzeXMgaW1wb3J0IGFyZ3YKZnJvbSB0eXBpbmcgaW1wb3J0IFR1cGxlLCBMaXN0LCBTZXQKaW1wb3J0IGl0ZXJ0b29scyBhcyBpdAoKCmRlZiBnY2QoYSwgYik6CiAgICAiIiJDb21wdXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiBhIGFuZCBiIiIiCiAgICB3aGlsZSBiID4gMDoKICAgICAgICBhLCBiID0gYiwgYSAlIGIKICAgIHJldHVybiBhCgoKZGVmIGxjbShhLCBiKToKICAgICIiIkNvbXB1dGUgdGhlIGxvd2VzdCBjb21tb24gbXVsdGlwbGUgb2YgYSBhbmQgYiIiIgogICAgcmV0dXJuIGEgKiBiIC8gZ2NkKGEsIGIpCgoKY2xhc3MgTW9vbihvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvc2l0aW9uOiBUdXBsZVtpbnQsIC4uLl0pOgogICAgICAgIHNlbGYucG9zaXRpb24gPSBsaXN0KHBvc2l0aW9uKQogICAgICAgIHNlbGYudmVsb2NpdHkgPSBsaXN0KDAgZm9yIF8gaW4gcmFuZ2Uoc2VsZi5kaW1lbnNpb25zKSkKCiAgICBAcHJvcGVydHkKICAgIGRlZiBkaW1lbnNpb25zKHNlbGYpIC0+IGludDoKICAgICAgICByZXR1cm4gbGVuKHNlbGYucG9zaXRpb24pCgogICAgQHByb3BlcnR5CiAgICBkZWYgZW5lcmd5KHNlbGYpIC0+IGludDoKICAgICAgICByZXR1cm4gc3VtKGFicyh2KSBmb3IgdiBpbiBzZWxmLnBvc2l0aW9uKSAqIHN1bShhYnModikgZm9yIHYgaW4gc2VsZi52ZWxvY2l0eSkKCiAgICBkZWYgdXBkYXRlX3ZlbG9jaXR5KHNlbGYsIG90aGVyOiBNb29uKSAtPiBOb25lOgogICAgICAgIGZvciBpZHggaW4gcmFuZ2Uoc2VsZi5kaW1lbnNpb25zKToKICAgICAgICAgICAgaWYgc2VsZi5wb3NpdGlvbltpZHhdIDwgb3RoZXIucG9zaXRpb25baWR4XToKICAgICAgICAgICAgICAgIHNlbGYudmVsb2NpdHlbaWR4XSArPSAxCiAgICAgICAgICAgIGVsaWYgc2VsZi5wb3NpdGlvbltpZHhdID4gb3RoZXIucG9zaXRpb25baWR4XToKICAgICAgICAgICAgICAgIHNlbGYudmVsb2NpdHlbaWR4XSAtPSAxCgogICAgZGVmIHVwZGF0ZV9wb3NpdGlvbihzZWxmKSAtPiBOb25lOgogICAgICAgIGZvciBpZHggaW4gcmFuZ2Uoc2VsZi5kaW1lbnNpb25zKToKICAgICAgICAgICAgc2VsZi5wb3NpdGlvbltpZHhdICs9IHNlbGYudmVsb2NpdHlbaWR4XQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiBmJ01vb24oe3NlbGYucG9zaXRpb259LHtzZWxmLnZlbG9jaXR5fSknCgogICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzdHIoc2VsZikKCiAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyOiBNb29uKSAtPiBib29sOgogICAgICAgIHJldHVybiBzZWxmLnBvc2l0aW9uID09IG90aGVyLnBvc2l0aW9uIGFuZCBzZWxmLnZlbG9jaXR5ID09IG90aGVyLnZlbG9jaXR5CgogICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICAgIHJldHVybiBoYXNoKHR1cGxlKHNlbGYucG9zaXRpb24gKyBzZWxmLnZlbG9jaXR5KSkKCgpkZWYgc2ltdWxhdGVfc3RlcChtb29uczogVHVwbGVbTW9vbl0sIHN0ZXBzOiBpbnQgPSAxKSAtPiBUdXBsZVtNb29uXToKICAgIG1vb25zID0gZGVlcGNvcHkobW9vbnMpCiAgICBmb3IgXyBpbiByYW5nZShzdGVwcyk6CiAgICAgICAgZm9yIGEsIGIgaW4gaXQucGVybXV0YXRpb25zKG1vb25zLCAyKToKICAgICAgICAgICAgYS51cGRhdGVfdmVsb2NpdHkoYikKICAgICAgICBmb3IgbW9vbiBpbiBtb29uczoKICAgICAgICAgICAgbW9vbi51cGRhdGVfcG9zaXRpb24oKQogICAgcmV0dXJuIHR1cGxlKG1vb25zKQoKCmRlZiBoYXNfY3ljbGVfYXQob25lOiBUdXBsZVtNb29uXSwgdHdvOiBUdXBsZVtNb29uXSwgaTogaW50KSAtPiBib29sOgogICAgcmV0dXJuIGFsbCgKICAgICAgICBhLnBvc2l0aW9uW2ldID09IGIucG9zaXRpb25baV0gYW5kIGEudmVsb2NpdHlbaV0gPT0gYi52ZWxvY2l0eVtpXQogICAgICAgIGZvciBhLCBiIGluIHppcChvbmUsIHR3bykKICAgICkKCgpkZWYgZmluZF9jeWNsZV9zdGVwcyhtb29uczogVHVwbGVbTW9vbl0pIC0+IGludDoKICAgIGluaXRpYWxfbW9vbnMgPSBkZWVwY29weShtb29ucykKICAgIGN5Y2xlcyA9IGxpc3QoLTEgZm9yIF8gaW4gcmFuZ2UobW9vbnNbMF0uZGltZW5zaW9ucykpCgogICAgc3RlcHMgPSAwCiAgICB3aGlsZSBub3QgYWxsKHYgIT0gLTEgZm9yIHYgaW4gY3ljbGVzKToKICAgICAgICBzdGVwcyArPSAxCgogICAgICAgIG1vb25zID0gc2ltdWxhdGVfc3RlcChtb29ucykKCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGN5Y2xlcykpOgogICAgICAgICAgICBpZiBjeWNsZXNbaV0gIT0gLTE6CiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgaWYgbm90IGhhc19jeWNsZV9hdChtb29ucywgaW5pdGlhbF9tb29ucywgaSk6CiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgY3ljbGVzW2ldID0gc3RlcHMKCiAgICByZXR1cm4gaW50KHJlZHVjZShsY20sIGN5Y2xlcykpCgoKZGVmIGZpbmRfY3ljbGVfc3RlcHNfYnlfYnJ1dGVfZm9yY2UobW9vbnM6IExpc3RbTW9vbl0pIC0+IGludDoKICAgIHNpbXVsYXRpb25zID0ge3R1cGxlKG1vb25zKX0KICAgIHN0ZXBzID0gMQogICAgd2hpbGUgKG1vb25zIDo9IHNpbXVsYXRlX3N0ZXAobW9vbnMpKSBub3QgaW4gc2ltdWxhdGlvbnM6CiAgICAgICAgc3RlcHMgKz0gMQogICAgcmV0dXJuIHN0ZXBzCgoKZGVmIG1haW4oKToKICAgIGZpbGVfcGF0aCA9IFBhdGgoYXJndlsxXSkKCiAgICBtb29ucyA9IGxpc3QoKQogICAgd2l0aCBmaWxlX3BhdGgub3BlbigpIGFzIGZpbGU6CiAgICAgICAgd2hpbGUgdGV4dCA6PSBmaWxlLnJlYWRsaW5lKCkuc3RyaXAoKToKICAgICAgICAgICAgbWF0Y2hlZCA9IHJlLm1hdGNoKHInPHg9KC0/XGQrKSwgeT0oLT9cZCspLCB6PSgtP1xkKyk+JywgdGV4dCkKICAgICAgICAgICAgcG9zaXRpb24gPSB0dXBsZShpbnQoZ3JvdXApIGZvciBncm91cCBpbiBtYXRjaGVkLmdyb3VwcygpKQogICAgICAgICAgICBtb29uID0gTW9vbihwb3NpdGlvbikKICAgICAgICAgICAgbW9vbnMuYXBwZW5kKG1vb24pCiAgICBtb29ucyA9IHR1cGxlKG1vb25zKQo8fGZpbV9ob2xlfD4KCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CgogICAgcmVzdWx0ID0gZmluZF9jeWNsZV9zdGVwcyhtb29ucykKICAgIHByaW50KHJlc3VsdCkKCjx8ZmltX2VuZHw+"]
["e7243a7c0a91ab085e57b8ef657589a2a5c125be-3","e7243a7c0a91ab085e57b8ef657589a2a5c125be","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKaW1wb3J0IHJlCmZyb20gY29weSBpbXBvcnQgZGVlcGNvcHkKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZQpmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKZnJvbSBzeXMgaW1wb3J0IGFyZ3YKZnJvbSB0eXBpbmcgaW1wb3J0IFR1cGxlLCBMaXN0LCBTZXQKaW1wb3J0IGl0ZXJ0b29scyBhcyBpdAoKCmRlZiBnY2QoYSwgYik6CiAgICAiIiJDb21wdXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiBhIGFuZCBiIiIiCiAgICB3aGlsZSBiID4gMDoKICAgICAgICBhLCBiID0gYiwgYSAlIGIKICAgIHJldHVybiBhCgoKZGVmIGxjbShhLCBiKToKICAgICIiIkNvbXB1dGUgdGhlIGxvd2VzdCBjb21tb24gbXVsdGlwbGUgb2YgYSBhbmQgYiIiIgogICAgcmV0dXJuIGEgKiBiIC8gZ2NkKGEsIGIpCgoKY2xhc3MgTW9vbihvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvc2l0aW9uOiBUdXBsZVtpbnQsIC4uLl0pOgogICAgICAgIHNlbGYucG9zaXRpb24gPSBsaXN0KHBvc2l0aW9uKQogICAgICAgIHNlbGYudmVsb2NpdHkgPSBsaXN0KDAgZm9yIF8gaW4gcmFuZ2Uoc2VsZi5kaW1lbnNpb25zKSkKCiAgICBAcHJvcGVydHkKICAgIGRlZiBkaW1lbnNpb25zKHNlbGYpIC0+IGludDoKICAgICAgICByZXR1cm4gbGVuKHNlbGYucG9zaXRpb24pCgogICAgQHByb3BlcnR5CiAgICBkZWYgZW5lcmd5KHNlbGYpIC0+IGludDoKICAgICAgICByZXR1cm4gc3VtKGFicyh2KSBmb3IgdiBpbiBzZWxmLnBvc2l0aW9uKSAqIHN1bShhYnModikgZm9yIHYgaW4gc2VsZi52ZWxvY2l0eSkKCiAgICBkZWYgdXBkYXRlX3ZlbG9jaXR5KHNlbGYsIG90aGVyOiBNb29uKSAtPiBOb25lOgogICAgICAgIGZvciBpZHggaW4gcmFuZ2Uoc2VsZi5kaW1lbnNpb25zKToKICAgICAgICAgICAgaWYgc2VsZi5wb3NpdGlvbltpZHhdIDwgb3RoZXIucG9zaXRpb25baWR4XToKICAgICAgICAgICAgICAgIHNlbGYudmVsb2NpdHlbaWR4XSArPSAxCiAgICAgICAgICAgIGVsaWYgc2VsZi5wb3NpdGlvbltpZHhdID4gb3RoZXIucG9zaXRpb25baWR4XToKICAgICAgICAgICAgICAgIHNlbGYudmVsb2NpdHlbaWR4XSAtPSAxCgogICAgZGVmIHVwZGF0ZV9wb3NpdGlvbihzZWxmKSAtPiBOb25lOgogICAgICAgIGZvciBpZHggaW4gcmFuZ2Uoc2VsZi5kaW1lbnNpb25zKToKICAgICAgICAgICAgc2VsZi5wb3NpdGlvbltpZHhdICs9IHNlbGYudmVsb2NpdHlbaWR4XQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiBmJ01vb24oe3NlbGYucG9zaXRpb259LHtzZWxmLnZlbG9jaXR5fSknCgogICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzdHIoc2VsZikKCiAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyOiBNb29uKSAtPiBib29sOgogICAgICAgIHJldHVybiBzZWxmLnBvc2l0aW9uID09IG90aGVyLnBvc2l0aW9uIGFuZCBzZWxmLnZlbG9jaXR5ID09IG90aGVyLnZlbG9jaXR5CgogICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICAgIHJldHVybiBoYXNoKHR1cGxlKHNlbGYucG9zaXRpb24gKyBzZWxmLnZlbG9jaXR5KSkKCgpkZWYgc2ltdWxhdGVfc3RlcChtb29uczogVHVwbGVbTW9vbl0sIHN0ZXBzOiBpbnQgPSAxKSAtPiBUdXBsZVtNb29uXToKICAgIG1vb25zID0gZGVlcGNvcHkobW9vbnMpCiAgICBmb3IgXyBpbiByYW5nZShzdGVwcyk6CiAgICAgICAgZm9yIGEsIGIgaW4gaXQucGVybXV0YXRpb25zKG1vb25zLCAyKToKICAgICAgICAgICAgYS51cGRhdGVfdmVsb2NpdHkoYikKICAgICAgICBmb3IgbW9vbiBpbiBtb29uczoKICAgICAgICAgICAgbW9vbi51cGRhdGVfcG9zaXRpb24oKQogICAgcmV0dXJuIHR1cGxlKG1vb25zKQoKCmRlZiBoYXNfY3ljbGVfYXQob25lOiBUdXBsZVtNb29uXSwgdHdvOiBUdXBsZVtNb29uXSwgaTogaW50KSAtPiBib29sOgogICAgcmV0dXJuIGFsbCgKICAgICAgICBhLnBvc2l0aW9uW2ldID09IGIucG9zaXRpb25baV0gYW5kIGEudmVsb2NpdHlbaV0gPT0gYi52ZWxvY2l0eVtpXQogICAgICAgIGZvciBhLCBiIGluIHppcChvbmUsIHR3bykKICAgICkKCgpkZWYgZmluZF9jeWNsZV9zdGVwcyhtb29uczogVHVwbGVbTW9vbl0pIC0+IGludDoKICAgIGluaXRpYWxfbW9vbnMgPSBkZWVwY29weShtb29ucykKICAgIGN5Y2xlcyA9IGxpc3QoLTEgZm9yIF8gaW4gcmFuZ2UobW9vbnNbMF0uZGltZW5zaW9ucykpCgogICAgc3RlcHMgPSAwCiAgICB3aGlsZSBub3QgYWxsKHYgIT0gLTEgZm9yIHYgaW4gY3ljbGVzKToKICAgICAgICBzdGVwcyArPSAxCgogICAgICAgIG1vb25zID0gc2ltdWxhdGVfc3RlcChtb29ucykKCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGN5Y2xlcykpOgogICAgICAgICAgICBpZiBjeWNsZXNbaV0gIT0gLTE6CiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgaWYgbm90IGhhc19jeWNsZV9hdChtb29ucywgaW5pdGlhbF9tb29ucywgaSk6CiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgY3ljbGVzW2ldID0gc3RlcHMKCiAgICByZXR1cm4gaW50KHJlZHVjZShsY20sIGN5Y2xlcykpCgoKZGVmIGZpbmRfY3ljbGVfc3RlcHNfYnlfYnJ1dGVfZm9yY2UobW9vbnM6IExpc3RbTW9vbl0pIC0+IGludDoKICAgIHNpbXVsYXRpb25zID0ge3R1cGxlKG1vb25zKX0KICAgIHN0ZXBzID0gMQogICAgd2hpbGUgKG1vb25zIDo9IHNpbXVsYXRlX3N0ZXAobW9vbnMpKSBub3QgaW4gc2ltdWxhdGlvbnM6CiAgICAgICAgc3RlcHMgKz0gMQogICAgcmV0dXJuIHN0ZXBzCgoKZGVmIG1haW4oKToKICAgIGZpbGVfcGF0aCA9IFBhdGgoYXJndlsxXSkKCiAgICBtb29ucyA9IGxpc3QoKQogICAgd2l0aCBmaWxlX3BhdGgub3BlbigpIGFzIGZpbGU6CiAgICAgICAgd2hpbGUgdGV4dCA6PSBmaWxlLnJlYWRsaW5lKCkuc3RyaXAoKToKICAgICAgICAgICAgbWF0Y2hlZCA9IHJlLm1hdGNoKHInPHg9KC0/XGQrKSwgeT0oLT9cZCspLCB6PSgtP1xkKyk+JywgdGV4dCkKICAgICAgICAgICAgcG9zaXRpb24gPSB0dXBsZShpbnQoZ3JvdXApIGZvciBncm91cCBpbiBtYXRjaGVkLmdyb3VwcygpKQogICAgICAgICAgICBtb29uID0gTW9vbihwb3NpdGlvbikKICAgICAgICAgICAgbW9vbnMuYXBwZW5kKG1vb24pCiAgICBtb29ucyA9IHR1cGxlKG1vb25zKQoKICAgIHJlc3VsdCA9IGZpbmRfY3ljbGVfc3RlcHMobW9vbnMpCiAgICBwcmludChyZXN1bHQpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKPHxmaW1fZW5kfD4="]
["e7243a7c0a91ab085e57b8ef657589a2a5c125be-4","e7243a7c0a91ab085e57b8ef657589a2a5c125be","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKaW1wb3J0IHJlCmZyb20gY29weSBpbXBvcnQgZGVlcGNvcHkKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZQpmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKZnJvbSBzeXMgaW1wb3J0IGFyZ3YKZnJvbSB0eXBpbmcgaW1wb3J0IFR1cGxlLCBMaXN0LCBTZXQKaW1wb3J0IGl0ZXJ0b29scyBhcyBpdAoKCmRlZiBnY2QoYSwgYik6CiAgICAiIiJDb21wdXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiBhIGFuZCBiIiIiCiAgICB3aGlsZSBiID4gMDoKICAgICAgICBhLCBiID0gYiwgYSAlIGIKICAgIHJldHVybiBhCgoKZGVmIGxjbShhLCBiKToKICAgICIiIkNvbXB1dGUgdGhlIGxvd2VzdCBjb21tb24gbXVsdGlwbGUgb2YgYSBhbmQgYiIiIgogICAgcmV0dXJuIGEgKiBiIC8gZ2NkKGEsIGIpCgoKY2xhc3MgTW9vbihvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvc2l0aW9uOiBUdXBsZVtpbnQsIC4uLl0pOgogICAgICAgIHNlbGYucG9zaXRpb24gPSBsaXN0KHBvc2l0aW9uKQogICAgICAgIHNlbGYudmVsb2NpdHkgPSBsaXN0KDAgZm9yIF8gaW4gcmFuZ2Uoc2VsZi5kaW1lbnNpb25zKSkKCiAgICBAcHJvcGVydHkKICAgIGRlZiBkaW1lbnNpb25zKHNlbGYpIC0+IGludDoKICAgICAgICByZXR1cm4gbGVuKHNlbGYucG9zaXRpb24pCgogICAgQHByb3BlcnR5CiAgICBkZWYgZW5lcmd5KHNlbGYpIC0+IGludDoKICAgICAgICByZXR1cm4gc3VtKGFicyh2KSBmb3IgdiBpbiBzZWxmLnBvc2l0aW9uKSAqIHN1bShhYnModikgZm9yIHYgaW4gc2VsZi52ZWxvY2l0eSkKCiAgICBkZWYgdXBkYXRlX3ZlbG9jaXR5KHNlbGYsIG90aGVyOiBNb29uKSAtPiBOb25lOgogICAgICAgIGZvciBpZHggaW4gcmFuZ2Uoc2VsZi5kaW1lbnNpb25zKToKICAgICAgICAgICAgaWYgc2VsZi5wb3NpdGlvbltpZHhdIDwgb3RoZXIucG9zaXRpb25baWR4XToKICAgICAgICAgICAgICAgIHNlbGYudmVsb2NpdHlbaWR4XSArPSAxCiAgICAgICAgICAgIGVsaWYgc2VsZi5wb3NpdGlvbltpZHhdID4gb3RoZXIucG9zaXRpb25baWR4XToKICAgICAgICAgICAgICAgIHNlbGYudmVsb2NpdHlbaWR4XSAtPSAxCgogICAgZGVmIHVwZGF0ZV9wb3NpdGlvbihzZWxmKSAtPiBOb25lOgogICAgICAgIGZvciBpZHggaW4gcmFuZ2Uoc2VsZi5kaW1lbnNpb25zKToKICAgICAgICAgICAgc2VsZi5wb3NpdGlvbltpZHhdICs9IHNlbGYudmVsb2NpdHlbaWR4XQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiBmJ01vb24oe3NlbGYucG9zaXRpb259LHtzZWxmLnZlbG9jaXR5fSknCgogICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzdHIoc2VsZikKCiAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyOiBNb29uKSAtPiBib29sOgogICAgICAgIHJldHVybiBzZWxmLnBvc2l0aW9uID09IG90aGVyLnBvc2l0aW9uIGFuZCBzZWxmLnZlbG9jaXR5ID09IG90aGVyLnZlbG9jaXR5Cgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAgICAgcmV0dXJuIGhhc2godHVwbGUoc2VsZi5wb3NpdGlvbiArIHNlbGYudmVsb2NpdHkpKQoKCjx8ZmltX2VuZHw+"]
["e7ab93a67be1d7b8a5571ce198ce201c21b5817e-1","e7ab93a67be1d7b8a5571ce198ce201c21b5817e","PHxmaW1fcHJlZml4fD4KZnJvbSAucGF0cmljaWEgaW1wb3J0IHRyaWUKZnJvbSAudW5pb25fZmluZCBpbXBvcnQgZGlzam9pbnRfc2V0cwpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAppbXBvcnQgYmlzZWN0CgpjbGFzcyBNdWx0aVRva2VuU2VhcmNoZXIob2JqZWN0KToKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmluZ19hcnIpOgogICAgI3VzZSBhIHRyaWUgdG8gbWFwIHdvcmRzIHRvIChyb3csIGNvbCkgcGFpcnMKICAgIHNlbGYudHJpZSA9IHRyaWUoKQogICAgZm9yIHJvd19pbmRleCwgcm93IGluIGVudW1lcmF0ZShzdHJpbmdfYXJyKToKICAgICAgd29yZF9wb3NfYXJyID0gc2VsZi5zcGxpdF9saW5lKHJvdykKICAgICAgZm9yIHdvcmQsIGNvbF9pbmRleCBpbiB3b3JkX3Bvc19hcnI6CiAgICAgICAgaWYgd29yZCBpbiBzZWxmLnRyaWU6CiAgICAgICAgICBzZWxmLnRyaWVbd29yZF0uYXBwZW5kKChyb3dfaW5kZXgsIGNvbF9pbmRleCkpCiAgICAgICAgZWxzZToKICAgICAgICAgIHNlbGYudHJpZVt3b3JkXT1bKHJvd19pbmRleCwgY29sX2luZGV4KV0KCiAgI3NwbGl0IG9uIHdoaXRlIHNwYWNlIGFuIHJldHVybiBpbmRleC4gaWdub3JlIHRyYWlsaW5nIHNwYWNlCiAgZGVmIHNwbGl0X2xpbmUoc2VsZiwgbGluZSk6CiAgICBzID0gMAogICAgYXJyID0gW10KICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCgogICAgZm9yIHQgaW4gcmFuZ2UobGVuKGxpbmUpKToKICAgICAgaWYgbGluZVt0XT09JyAnOgogICAgICAgIGFyci5hcHBlbmQoW2xpbmVbczp0XSxzXSkKICAgICAgICBzPXQrMSAKICAgIHQ9bGVuKGxpbmUpIAogICAgYXJyLmFwcGVuZChbbGluZVtzOnRdLHNdKQogICAgcmV0dXJuIGFycgoKICAjYXZlcmFnZSBlbmdsaXNoIHdvcmQgbGVuZ3RoIGlzIDUgY2hhcmFjdGVycwogIGRlZiBzZWFyY2goc2VsZiwgdG9rZW5fZ3JvdXAsIGNvbF93aW49MjAsIHJvd193aW49Miwgcm93X3BlbmFsdHk9NSk6CiAgICB0ZW1wX21hdGNoX3RhYmxlID0gZGVmYXVsdGRpY3QobGlzdCkKICAgIGFsbF92YWxpZF90b2tlbl9wb3MgPSBbXQoKICAgIGZvciB0b2tlbiBpbiB0b2tlbl9ncm91cDoKICAgICAgaWYgbm90IHNlbGYudHJpZS5pc1ByZWZpeCh0b2tlbik6CiAgICAgICAgY29udGludWUKICAgICAgZm9yIHZhbGlkIGluIHNlbGYudHJpZS5pdGVyKHRva2VuKToKICAgICAgICBMID0gbGVuKHRva2VuKQogICAgICAgIGZvciBwb3MgaW4gc2VsZi50cmllW3ZhbGlkXToKPHxmaW1faG9sZXw+CiAgICAjIHNvcnQgdGhlIG1hdGNoIHBvc2l0aW9ucwogICAgcm93X2tleXMgPSBzb3J0ZWQodGVtcF9tYXRjaF90YWJsZS5rZXlzKCkpCiAgICBtYXRjaF90YWJsZSA9IHt9CiAgICBmb3IgayBpbiByb3dfa2V5czoKICAgICAgbWF0Y2hfdGFibGVba10gPSBzb3J0ZWQodGVtcF9tYXRjaF90YWJsZVtrXSkKCiAgICAjZGV0ZXJtaW5lIGlmIDIgcG9zaXRpb24gYXJlIGNsb3NlCiAgICBkZWYgaXNfY2xvc2UoY2FuX3JvdywgY2FuX2NvbCwgY3VyX3JvdywgY3VyX2NvbCk6CiAgICAgIHJldHVybiAoY3VyX3Jvdy1jYW5fcm93KSpyb3dfcGVuYWx0eSsoY2FuX2NvbC1jdXJfY29sKSA8PSBjb2xfd2luCgogICAgbWF0Y2hfZWRnZXMgPSBbXQogICAgZm9yIGN1cl9yb3dfaW5kLCBjdXJfcm93IGluIGVudW1lcmF0ZShyb3dfa2V5cyk6CiAgICAgIGZvciBjdXJfY29sX2luZCwgY3VyX2NvbCBpbiBlbnVtZXJhdGUobWF0Y2hfdGFibGVbY3VyX3Jvd10pOiAjZmlyc3Qgcm93IGlzIHRoZSBzYW1lIHJvdwogICAgICAgIGZvciBjYW5fY29sIGluIG1hdGNoX3RhYmxlW2N1cl9yb3ddW2N1cl9jb2xfaW5kKzE6XToKCiAgICAgICAgICBwcmludCgiY2FuIixjYW5fY29sLCBjdXJfY29sKQogICAgICAgICAgaWYgKGNhbl9jb2wtY3VyX2NvbCkgPD0gY29sX3dpbjoKICAgICAgICAgICAgbWF0Y2hfZWRnZXMuYXBwZW5kKCAoKGN1cl9yb3csY3VyX2NvbCksKGN1cl9yb3csIGNhbl9jb2wpKSApCiAgICAgICAgICBlbHNlOiAjY3VyIGNvbCBpcyB0b28gZmFyIGF3YXkKICAgICAgICAgICAgYnJlYWsKCiAgICAgICAgZm9yIGNhbl9yb3cgaW4gcm93X2tleXNbY3VyX3Jvd19pbmQrMTpdOgogICAgICAgICAgaWYgKGNhbl9yb3ctY3VyX3Jvdykqcm93X3BlbmFsdHkgPiBjb2xfd2luOgogICAgICAgICAgICBicmVhawogICAgICAgICAgZm9yIGNhbl9jb2wgaW4gbWF0Y2hfdGFibGVbY2FuX3Jvd106CiAgICAgICAgICAgIGlmIChjYW5fcm93LWN1cl9yb3cpKnJvd19wZW5hbHR5KyhjYW5fY29sLWN1cl9jb2wpIDw9IGNvbF93aW46CiAgICAgICAgICAgICAgbWF0Y2hfZWRnZXMuYXBwZW5kKCAoKGN1cl9yb3csY3VyX2NvbCksKGNhbl9yb3csIGNhbl9jb2wpKSApCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAKICAgICNmaW5kIGNsdXN0ZXIgdXNpbmcgdW5pb24gZmluZAogICAgY2x1c3Rlcl9saXN0ID0gZGlzam9pbnRfc2V0cyhtYXRjaF9lZGdlcykKICAgIHJlc3VsdCA9IFtdCiAgICBmb3IgY2x1c3RlciBpbiBjbHVzdGVyX2xpc3Q6CiAgICAgIHJvdyA9IFtyIGZvciByLF8gaW4gY2x1c3Rlcl0KICAgICAgY29sID0gW2MgZm9yIF8sYyBpbiBjbHVzdGVyXQogICAgICB0b3Bfcm93LCB0b3BfY29sLCBidG1fcm93LCBidG1fY29sID0gbWluKHJvdyksIG1pbihjb2wpLCBtYXgocm93KSwgbWF4KGNvbCkKICAgICAgcmVzdWx0LmFwcGVuZChbbGVuKGNsdXN0ZXIpLCAodG9wX3JvdywgdG9wX2NvbCwgYnRtX3JvdywgYnRtX2NvbCldKQogICAgCiAgICByZXR1cm4gcmVzdWx0LCBhbGxfdmFsaWRfdG9rZW5fcG9zCgoKICBkZWYgcHJpbnRfcmVzdWx0KHNlbGYsIHRleHQsIHJlc3VsdCk6CiAgICBmb3IgcmVzIGluIHJlc3VsdDoKICAgICAgdHIsIHRjLCBiciwgYmMgPSByZXNbMV0KICAgICAgcHJpbnQocmVzWzBdLCdAIHBvc2l0aW9uICcsdHIsdGMsJ3RvJyxicixiYykKICAgICAgYmMrPTgKICAgICAgZm9yIHIgaW4gcmFuZ2UodHIsIGJyKzEpOgogICAgICAgIGxpbmUgPSB0ZXh0W3JdCiAgICAgICAgbWFza19saW5lID0gJyonKih0Yy0xKStsaW5lW3RjOmJjXSsnKicqKGxlbihsaW5lKS1iYykKICAgICAgICBwcmludChtYXNrX2xpbmUpCiAgICAgIHByaW50KCkKCiAgZGVmIHNlYXJjaF9hbmRfcHJpbnQoc2VsZiwgdGV4dCwgdG9rZW5fZ3JvdXApOgogICAgcmVzdWx0ID0gc2VsZi5zZWFyY2godG9rZW5fZ3JvdXApCiAgICBzZWxmLnByaW50X3Jlc3VsdCh0ZXh0LCByZXN1bHQpCgoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICB0ZW1wX21hdGNoX3RhYmxlW3Bvc1swXV0uYXBwZW5kKHBvc1sxXSkKICAgICAgICAgIGFsbF92YWxpZF90b2tlbl9wb3MuYXBwZW5kKFtwb3NbMF0sIHBvc1sxXSwgcG9zWzBdLCBwb3NbMV0rTF0pCiAgICAgICAgICAKCjx8ZmltX2VuZHw+"]
["c1efb72bc09b601aa278c0ad958f3014d736c8ac-1","c1efb72bc09b601aa278c0ad958f3014d736c8ac","PHxmaW1fcHJlZml4fD4KIwojIENvcHlyaWdodCAyMDIwIEFudG9pbmUgU2FubmVyCiMgICAgICAgICAgIDIwMTYsIDIwMjAgTGFycyBQYXN0ZXdrYQojCiMgIyMjIE1JVCBsaWNlbnNlCiMKIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CiMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAojIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwojIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiMKIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgojIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgojCiMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCiMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQojIFNPRlRXQVJFLgojCgoiIiIKSGVscGVyIHRvb2xzIGZvciBBZGhlc2lvbgoiIiIKCmltcG9ydCBtYXRoCgppbXBvcnQgQ29udGFjdE1lY2hhbmljcy5SZWZlcmVuY2VTb2x1dGlvbnMuSGVydHogYXMgSGVydHoKCgojIyMKCmRlZiByYWRpdXNfYW5kX3ByZXNzdXJlKE4sIFIsIEVzLCB3KToKICAgICIiIgogICAgR2l2ZW4gbm9ybWFsIGxvYWQsIHNwaGVyZSByYWRpdXMgYW5kIGNvbnRhY3QgbW9kdWx1cyBjb21wdXRlIGNvbnRhY3QgcmFkaXVzCiAgICBhbmQgcGVhayBwcmVzc3VyZS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBOIDogZmxvYXQKICAgICAgICBOb3JtYWwgZm9yY2UuCiAgICBSIDogZmxvYXQKICAgICAgICBTcGhlcmUgcmFkaXVzLgogICAgRXMgOiBmbG9hdAogICAgICAgIENvbnRhY3QgbW9kdWx1czogRXMgPSBFLygxLW51KioyKSB3aXRoIFlvdW5nJ3MgbW9kdWx1cyBFIGFuZCBQb2lzc29uCiAgICAgICAgbnVtYmVyIG51LgogICAgdyA6IGZsb2F0CiAgICAgICAgV29yayBvZiBhZGhlc2lvbi4KICAgICIiIgoKICAgIHJldHVybiBIZXJ0ei5yYWRpdXNfYW5kX3ByZXNzdXJlKE4gKyAyICogbWF0aC5waSAqIHcgKiBSLCBSLCBFcykKCgpkZWYgc3VyZmFjZV9zdHJlc3MociwgYSwgbnUpOgogICAgIiIiCiAgICBHaXZlbiBkaXN0YW5jZSBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIHNwaGVyZSwgY29udGFjdCByYWRpdXMgYW5kIFBvaXNzb24KICAgIG51bWJlciBjb250YWN0LCBjb21wdXRlIHRoZSBzdHJlc3MgYXQgdGhlIHN1cmZhY2UuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgciA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheSBvZiBkaXN0YW5jZSAoZnJvbSB0aGUgY2VudGVyIG9mIHRoZSBzcGhlcmUpLgogICAgYSA6IGZsb2F0CiAgICAgICAgQ29udGFjdCByYWRpdXMuCiAgICBudSA6IGZsb2F0CiAgICAgICAgUG9pc3NvbiBudW1iZXIuCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBweiA6IGFycmF5Cjx8ZmltX2VuZHw+"]
["c1efb72bc09b601aa278c0ad958f3014d736c8ac-2","c1efb72bc09b601aa278c0ad958f3014d736c8ac","PHxmaW1fcHJlZml4fD4KIwojIENvcHlyaWdodCAyMDIwIEFudG9pbmUgU2FubmVyCiMgICAgICAgICAgIDIwMTYsIDIwMjAgTGFycyBQYXN0ZXdrYQojCiMgIyMjIE1JVCBsaWNlbnNlCiMKIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CiMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAojIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwojIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiMKIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgojIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgojCiMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCiMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQojIFNPRlRXQVJFLgojCgoiIiIKSGVscGVyIHRvb2xzIGZvciBBZGhlc2lvbgoiIiIKCmltcG9ydCBtYXRoCgppbXBvcnQgQ29udGFjdE1lY2hhbmljcy5SZWZlcmVuY2VTb2x1dGlvbnMuSGVydHogYXMgSGVydHoKCgojIyMKCmRlZiByYWRpdXNfYW5kX3ByZXNzdXJlKE4sIFIsIEVzLCB3KToKICAgICIiIgogICAgR2l2ZW4gbm9ybWFsIGxvYWQsIHNwaGVyZSByYWRpdXMgYW5kIGNvbnRhY3QgbW9kdWx1cyBjb21wdXRlIGNvbnRhY3QgcmFkaXVzCiAgICBhbmQgcGVhayBwcmVzc3VyZS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBOIDogZmxvYXQKICAgICAgICBOb3JtYWwgZm9yY2UuCiAgICBSIDogZmxvYXQKICAgICAgICBTcGhlcmUgcmFkaXVzLgogICAgRXMgOiBmbG9hdAogICAgICAgIENvbnRhY3QgbW9kdWx1czogRXMgPSBFLygxLW51KioyKSB3aXRoIFlvdW5nJ3MgbW9kdWx1cyBFIGFuZCBQb2lzc29uCiAgICAgICAgbnVtYmVyIG51LgogICAgdyA6IGZsb2F0CiAgICAgICAgV29yayBvZiBhZGhlc2lvbi4KICAgICIiIgoKICAgIHJldHVybiBIZXJ0ei5yYWRpdXNfYW5kX3ByZXNzdXJlKE4gKyAyICogbWF0aC5waSAqIHcgKiBSLCBSLCBFcykKCgpkZWYgc3VyZmFjZV9zdHJlc3MociwgYSwgbnUpOgogICAgIiIiCiAgICBHaXZlbiBkaXN0YW5jZSBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIHNwaGVyZSwgY29udGFjdCByYWRpdXMgYW5kIFBvaXNzb24KICAgIG51bWJlciBjb250YWN0LCBjb21wdXRlIHRoZSBzdHJlc3MgYXQgdGhlIHN1cmZhY2UuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgciA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheSBvZiBkaXN0YW5jZSAoZnJvbSB0aGUgY2VudGVyIG9mIHRoZSBzcGhlcmUpLgogICAgYSA6IGZsb2F0CiAgICAgICAgQ29udGFjdCByYWRpdXMuCiAgICBudSA6IGZsb2F0CiAgICAgICAgUG9pc3NvbiBudW1iZXIuCgo8fGZpbV9ob2xlfD4KICAgIHNyIDogYXJyYXkKICAgICAgICBSYWRpYWwgc3RyZXNzLgogICAgc3RoZXRhIDogYXJyYXkKICAgICAgICBBemltdXRoYWwgc3RyZXNzLgogICAgIiIiCgogICAgcmV0dXJuIEhlcnR6LnN1cmZhY2Vfc3RyZXNzKHIsIGEsIG51KQoKCmRlZiBzdXJmYWNlX2Rpc3BsYWNlbWVudHMociwgYSk6CiAgICByZXR1cm4gSGVydHouc3VyZmFjZV9kaXNwbGFjZW1lbnRzKHIsIGEpCjx8ZmltX3N1ZmZpeHw+CiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBweiA6IGFycmF5CiAgICAgICAgQ29udGFjdCBwcmVzc3VyZS4KPHxmaW1fZW5kfD4="]
["c1efb72bc09b601aa278c0ad958f3014d736c8ac-3","c1efb72bc09b601aa278c0ad958f3014d736c8ac","PHxmaW1fcHJlZml4fD4KIwojIENvcHlyaWdodCAyMDIwIEFudG9pbmUgU2FubmVyCiMgICAgICAgICAgIDIwMTYsIDIwMjAgTGFycyBQYXN0ZXdrYQojCiMgIyMjIE1JVCBsaWNlbnNlCiMKIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CiMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAojIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwojIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiMKIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgojIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgojCiMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCiMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQojIFNPRlRXQVJFLgojCgoiIiIKSGVscGVyIHRvb2xzIGZvciBBZGhlc2lvbgoiIiIKCmltcG9ydCBtYXRoCgppbXBvcnQgQ29udGFjdE1lY2hhbmljcy5SZWZlcmVuY2VTb2x1dGlvbnMuSGVydHogYXMgSGVydHoKCgojIyMKCmRlZiByYWRpdXNfYW5kX3ByZXNzdXJlKE4sIFIsIEVzLCB3KToKICAgICIiIgogICAgR2l2ZW4gbm9ybWFsIGxvYWQsIHNwaGVyZSByYWRpdXMgYW5kIGNvbnRhY3QgbW9kdWx1cyBjb21wdXRlIGNvbnRhY3QgcmFkaXVzCiAgICBhbmQgcGVhayBwcmVzc3VyZS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBOIDogZmxvYXQKICAgICAgICBOb3JtYWwgZm9yY2UuCiAgICBSIDogZmxvYXQKICAgICAgICBTcGhlcmUgcmFkaXVzLgogICAgRXMgOiBmbG9hdAogICAgICAgIENvbnRhY3QgbW9kdWx1czogRXMgPSBFLygxLW51KioyKSB3aXRoIFlvdW5nJ3MgbW9kdWx1cyBFIGFuZCBQb2lzc29uCiAgICAgICAgbnVtYmVyIG51LgogICAgdyA6IGZsb2F0CiAgICAgICAgV29yayBvZiBhZGhlc2lvbi4KICAgICIiIgoKPHxmaW1faG9sZXw+CmRlZiBzdXJmYWNlX3N0cmVzcyhyLCBhLCBudSk6CiAgICAiIiIKICAgIEdpdmVuIGRpc3RhbmNlIGZyb20gdGhlIGNlbnRlciBvZiB0aGUgc3BoZXJlLCBjb250YWN0IHJhZGl1cyBhbmQgUG9pc3NvbgogICAgbnVtYmVyIGNvbnRhY3QsIGNvbXB1dGUgdGhlIHN0cmVzcyBhdCB0aGUgc3VyZmFjZS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICByIDogYXJyYXlfbGlrZQogICAgICAgIEFycmF5IG9mIGRpc3RhbmNlIChmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIHNwaGVyZSkuCiAgICBhIDogZmxvYXQKICAgICAgICBDb250YWN0IHJhZGl1cy4KICAgIG51IDogZmxvYXQKICAgICAgICBQb2lzc29uIG51bWJlci4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBweiA6IGFycmF5CiAgICAgICAgQ29udGFjdCBwcmVzc3VyZS4KICAgIHNyIDogYXJyYXkKICAgICAgICBSYWRpYWwgc3RyZXNzLgogICAgc3RoZXRhIDogYXJyYXkKICAgICAgICBBemltdXRoYWwgc3RyZXNzLgogICAgIiIiCgogICAgcmV0dXJuIEhlcnR6LnN1cmZhY2Vfc3RyZXNzKHIsIGEsIG51KQoKCmRlZiBzdXJmYWNlX2Rpc3BsYWNlbWVudHMociwgYSk6CiAgICByZXR1cm4gSGVydHouc3VyZmFjZV9kaXNwbGFjZW1lbnRzKHIsIGEpCjx8ZmltX3N1ZmZpeHw+CiAgICByZXR1cm4gSGVydHoucmFkaXVzX2FuZF9wcmVzc3VyZShOICsgMiAqIG1hdGgucGkgKiB3ICogUiwgUiwgRXMpCgoKPHxmaW1fZW5kfD4="]
["c1efb72bc09b601aa278c0ad958f3014d736c8ac-4","c1efb72bc09b601aa278c0ad958f3014d736c8ac","PHxmaW1fcHJlZml4fD4KIwojIENvcHlyaWdodCAyMDIwIEFudG9pbmUgU2FubmVyCiMgICAgICAgICAgIDIwMTYsIDIwMjAgTGFycyBQYXN0ZXdrYQojCiMgIyMjIE1JVCBsaWNlbnNlCiMKIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CiMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAojIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwojIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiMKIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgojIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgojCiMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCiMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQojIFNPRlRXQVJFLgojCgoiIiIKSGVscGVyIHRvb2xzIGZvciBBZGhlc2lvbgoiIiIKCmltcG9ydCBtYXRoCgppbXBvcnQgQ29udGFjdE1lY2hhbmljcy5SZWZlcmVuY2VTb2x1dGlvbnMuSGVydHogYXMgSGVydHoKCgojIyMKCmRlZiByYWRpdXNfYW5kX3ByZXNzdXJlKE4sIFIsIEVzLCB3KToKICAgICIiIgogICAgR2l2ZW4gbm9ybWFsIGxvYWQsIHNwaGVyZSByYWRpdXMgYW5kIGNvbnRhY3QgbW9kdWx1cyBjb21wdXRlIGNvbnRhY3QgcmFkaXVzCiAgICBhbmQgcGVhayBwcmVzc3VyZS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBOIDogZmxvYXQKICAgICAgICBOb3JtYWwgZm9yY2UuCiAgICBSIDogZmxvYXQKICAgICAgICBTcGhlcmUgcmFkaXVzLgogICAgRXMgOiBmbG9hdAogICAgICAgIENvbnRhY3QgbW9kdWx1czogRXMgPSBFLygxLW51KioyKSB3aXRoIFlvdW5nJ3MgbW9kdWx1cyBFIGFuZCBQb2lzc29uCiAgICAgICAgbnVtYmVyIG51LgogICAgdyA6IGZsb2F0CiAgICAgICAgV29yayBvZiBhZGhlc2lvbi4KICAgICIiIgoKICAgIHJldHVybiBIZXJ0ei5yYWRpdXNfYW5kX3ByZXNzdXJlKE4gKyAyICogbWF0aC5waSAqIHcgKiBSLCBSLCBFcykKCgpkZWYgc3VyZmFjZV9zdHJlc3MociwgYSwgbnUpOgogICAgIiIiCiAgICBHaXZlbiBkaXN0YW5jZSBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIHNwaGVyZSwgY29udGFjdCByYWRpdXMgYW5kIFBvaXNzb24KICAgIG51bWJlciBjb250YWN0LCBjb21wdXRlIHRoZSBzdHJlc3MgYXQgdGhlIHN1cmZhY2UuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgciA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheSBvZiBkaXN0YW5jZSAoZnJvbSB0aGUgY2VudGVyIG9mIHRoZSBzcGhlcmUpLgogICAgYSA6IGZsb2F0CiAgICAgICAgQ29udGFjdCByYWRpdXMuCiAgICBudSA6IGZsb2F0CiAgICAgICAgUG9pc3NvbiBudW1iZXIuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgcHogOiBhcnJheQogICAgICAgIENvbnRhY3QgcHJlc3N1cmUuCiAgICBzciA6IGFycmF5CiAgICAgICAgUmFkaWFsIHN0cmVzcy4KICAgIHN0aGV0YSA6IGFycmF5CiAgICAgICAgQXppbXV0aGFsIHN0cmVzcy4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgIiIiCgogICAgcmV0dXJuIEhlcnR6LnN1cmZhY2Vfc3RyZXNzKHIsIGEsIG51KQoKPHxmaW1fZW5kfD4="]
["4158ca1835d8f11e3ef4c5d9959f2b5e3dbf10bc-1","4158ca1835d8f11e3ef4c5d9959f2b5e3dbf10bc","PHxmaW1fcHJlZml4fD4KCiIiIgpoZWFkZXJz5pSv5oyB54m55a6a572R56uZ6aqM6K+BCiIiIgpoZWFkZXJzID0ge30KCnpoaWh1ID0gewogICAgImF1dGhvcml0eSI6ICJ3d3cuemhpaHUuY29tIiwKICAgICJtZXRob2QiOiAiR0VUIiwKICAgICJwYXRoIjogIi8iLAogICAgInNjaGVtZSI6ICJodHRwcyIsCiAgICAiYWNjZXB0IjogInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjgiLAogICAgImFjY2VwdC1lbmNvZGluZyI6ICJnemlwLCBkZWZsYXRlLCBiciIsCiAgICAiYWNjZXB0LWxhbmd1YWdlIjogInpoLUNOLHpoO3E9MC45IiwKPHxmaW1faG9sZXw+Cn0KCmhlYWRlcnNbImh0dHBzOi8vd3d3LnpoaWh1LmNvbSJdID0gemhpaHUKCgoKPHxmaW1fc3VmZml4fD4KICAgICJ1cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzIjogIjEiLAogICAgInVzZXItYWdlbnQiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV09XNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS82My4wLjMyMzkuMjYgU2FmYXJpLzUzNy4zNiIKPHxmaW1fZW5kfD4="]
["4135d4d239a3f7d68230fde5585ad7f6eeade437-1","4135d4d239a3f7d68230fde5585ad7f6eeade437","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuIFI0MjFBMDggaW1wb3J0IFI0MjFBMDgsIE1vZGJ1c0V4Y2VwdGlvbgoKX192ZXJzaW9uX18gPSAnMS4wLjEnClZFUlNJT04gPSBfX3ZlcnNpb25fXwo8fGZpbV9lbmR8Pg=="]
["e792eeb270ec9bf9db5a361b62958e3ca797fc53-1","e792eeb270ec9bf9db5a361b62958e3ca797fc53",{"$cut":{"chars":21060,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzb2NrZXQKaW1wb3J0IHRpbWUKaW1wb3J0IHBpY2tsZQppbXBvcnQgcHN1dGlsCmZyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCmZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQsIExvY2sKZnJvbSBuZXN0YS5zZXJ2ZXIuZGVmaW5lIGltcG9ydCBkZWZpbmUKZnJvbSBuZXN0YS5zZXJ2ZXIgaW1wb3J0IHNjaGVkdWxlCmZyb20gbmVzdGEuZXh0ZXJuYWwuZGFlbW9uIGltcG9ydCBEYWVtb24KZnJvbSBuZXN0YS50YXNrcy50YXNrcyBpbXBvcnQgZ2V0X3dvcmtlcgpmcm9tIG5lc3RhLnRhc2tzLm5vdGljZSBpbXBvcnQgZ2V0X25vdGljZQpmcm9tIG5lc3RhLnV0aWxzLnJhYmJpdG1xIGltcG9ydCBSYWJiaXRNUUNsaWVudApmcm9tIG5lc3RhLnV0aWxzLm15c3FsIGltcG9ydCBNeVNRTENsaWVudApmcm9tIG5lc3RhLnV0aWxzLmxvZyBpbXBvcnQgaW5pdF9sb2dnZXIKZnJvbSBuZXN0YS5jb25maWdzLnV0aWwgaW1wb3J0IHBhcnNlX2VudiwgcGFyc2VfY29uZmlnCgoKZGVmIHBhcnNlX2FyZ3VtZW50cygpOgogICAgcGFyc2VyID0gQXJndW1lbnRQYXJzZXIoIk5lc3RhIHNlcnZlciIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWRhZW1vbml6ZSIsICItZCIsIGRlc3Q9ImRhZW1vbml6ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Ym9vbCwgZGVmYXVsdD1UcnVlLCBoZWxwPSJkYWVtb25pemUgb3Igbm90IikKICAgIHJldHVybiBwYXJzZXIucGFyc2VfYXJncygpCgoKY2xhc3MgU2VydmVyKERhZW1vbik6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlncyk6CiAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoY29uZmlncywgZGljdCkKCiAgICAgICAgc2VsZi5fY29uZmdzID0gY29uZmlncwoKICAgICAgICBzZWxmLl9jb25maWdfY29tbW9uID0gY29uZmlnc1sic2VydmljZXMiXVsiY29tbW9uIl0KICAgICAgICBzZWxmLl9jb25maWdfc2VydmVyID0gY29uZmlnc1sic2VydmljZXMiXVsic2VydmVyIl0KCiAgICAgICAgbG9nZmlsZSA9IHNlbGYuX2NvbmZnc1sic2VydmljZXMiXVsic2VydmVyIl1bImxvZ2ZpbGUiXQogICAgICAgIHN1cGVyKCkuX19pbml0X18oCiAgICAgICAgICAgIHBpZGZpbGU9c2VsZi5fY29uZmdzWyJzZXJ2aWNlcyJdWyJzZXJ2ZXIiXVsicGlkZmlsZSJdLAogICAgICAgICAgICBzdGRvdXQ9bG9nZmlsZSwKICAgICAgICAgICAgc3RkZXJyPWxvZ2ZpbGUKICAgICAgICApCgogICAgICAgIHNlbGYuX2xvZ2dlciA9IGluaXRfbG9nZ2VyKAogICAgICAgICAgICBuYW1lPSJzZXJ2ZXIiLAogICAgICAgICAgICBsb2dmaWxlPWxvZ2ZpbGUsCiAgICAgICAgICAgIGxvZ2xldmVsPWNvbmZpZ3NbInNlcnZpY2VzIl1bInNlcnZlciJdWyJsb2dsZXZlbCJdCiAgICAgICAgKQoKICAgICAgICBzZWxmLl93b3JrZXIgPSBnZXRfd29ya2VyKCoqY29uZmlncykKICAgICAgICBzZWxmLl9ub3RpY2UgPSBnZXRfbm90aWNlKCoqY29uZmlncykKCiAgICAgICAgc2VsZi5faW50ZXJ2YWwgPSBzZWxmLl9jb25maWdfc2VydmVyWyJpbnRlcnZhbCJdCiAgICAgICAgc2VsZi5fc3RhdHVzID0gZGVmaW5lLlNUQVRVU19SVU5OSU5HIGlmIHNlbGYuX2NvbmZpZ19zZXJ2ZXJbCiAgICAgICAgICAgICJhdXRvX3N0YXJ0Il0gZWxzZSBkZWZpbmUuU1RBVFVTX1NUT1BQRUQKCiAgICAgICAgc2VsZi5fbXV0ZXggPSBMb2NrKCkKCiAgICBkZWYgX3J1bihzZWxmKToKICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygiU2VydmVyIGhhcyBiZWVuIHN0YXJ0ZWQiKQogICAgICAgIHNlbGYuX25vdGljZS5zZW5kX3Rhc2soCiAgICAgICAgICAgICJub3RpY2UiLAogICAgICAgICAgICBrd2FyZ3M9ewogICAgICAgICAgICAgICAgImxldmVsIjogIklORk8iLAogICAgICAgICAgICAgICAgIm1zZyI6ICJTZXJ2ZXIgaGFzIGJlZW4gc3RhcnRlZCIKICAgICAgICAgICAgfSkKICAgICAgICB0aHJlYWRzID0gW1RocmVhZCh0YXJnZXQ9c2VsZi5fd3JhcCwgYXJncz1bZnVuY10pCiAgICAgICAgICAgICAgICAgICBmb3IgZnVuYyBpbiBbc2VsZi5fY29tbXVuaWNhdGUsIHNlbGYuX3VwZGF0ZV9yZXN1bHRdXQoKICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgogICAgICAgICAgICB0LnN0YXJ0KCkKCiAgICAgICAgc2VsZi5fbWFpbigpCiAgICAgICAgIiIiCiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLl93cmFwKHNlbGYuX21haW4pCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBwcmludCAoZSkKICAgICAgICAiIiIKICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgogICAgICAgICAgICB0LmpvaW4oKQoKICAgICAgICBzZWxmLl9ub3RpY2Uuc2VuZF90YXNrKAogICAgICAgICAgICAibm90aWNlIiwgCiAgICAgICAgICAgIGt3YXJncz17CiAgICAgICAgICAgICAgICAibGV2ZWwiOiAiQ1JJVElDQUwiLAogICAgICAgICAgICAgICAgIm1zZyI6ICJTZXJ2ZXIgaGFzIGJlZW4gdGVybWluYXRlZCIKICAgICAgICAgICAgfSkKICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygiU2VydmVyIGhhcyBiZWVuIHRlcm1pbmF0ZWQiKQoKICAgIGRlZiBfc2V0X3N0YXR1cyhzZWxmLCBzdGF0dXMpOgogICAgICAgIHdpdGggc2VsZi5fbXV0ZXg6CiAgICAgICAgICAgIHNlbGYuX3N0YXR1cyA9IHN0YXR1cwoKICAgIGRlZiBfd3JhcChzZWxmLCBmdW5jLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHRyeToKICAgICAgICAgICAgZnVuYygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBzZWxmLl9zdGF0dXMgPSBkZWZpbmUuU1RBVFVTX1RFUk1JTkFURUQKICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmNyaXRpY2FsKGYiVW5leHBlY3RlZCBlcnJvciwgc3RhcnQgdG8gdGVybWluYXRlIDp7ZX0iKQogICAgICAgICAgICBzZWxmLl9ub3RpY2Uuc2VuZF90YXNrKAogICAgICAgICAgICAgICAgIm5vdGljZSIsCiAgICAgICAgICAgICAgICBrd2FyZ3M9ewogICAgICAgICAgICAgICAgICAgICJsZXZlbCI6ICJDUklUSUNBTCIsCiAgICAgICAgICAg"}}]
["e792eeb270ec9bf9db5a361b62958e3ca797fc53-2","e792eeb270ec9bf9db5a361b62958e3ca797fc53",{"$cut":{"chars":21060,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzb2NrZXQKaW1wb3J0IHRpbWUKaW1wb3J0IHBpY2tsZQppbXBvcnQgcHN1dGlsCmZyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCmZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQsIExvY2sKZnJvbSBuZXN0YS5zZXJ2ZXIuZGVmaW5lIGltcG9ydCBkZWZpbmUKZnJvbSBuZXN0YS5zZXJ2ZXIgaW1wb3J0IHNjaGVkdWxlCmZyb20gbmVzdGEuZXh0ZXJuYWwuZGFlbW9uIGltcG9ydCBEYWVtb24KZnJvbSBuZXN0YS50YXNrcy50YXNrcyBpbXBvcnQgZ2V0X3dvcmtlcgpmcm9tIG5lc3RhLnRhc2tzLm5vdGljZSBpbXBvcnQgZ2V0X25vdGljZQpmcm9tIG5lc3RhLnV0aWxzLnJhYmJpdG1xIGltcG9ydCBSYWJiaXRNUUNsaWVudApmcm9tIG5lc3RhLnV0aWxzLm15c3FsIGltcG9ydCBNeVNRTENsaWVudApmcm9tIG5lc3RhLnV0aWxzLmxvZyBpbXBvcnQgaW5pdF9sb2dnZXIKZnJvbSBuZXN0YS5jb25maWdzLnV0aWwgaW1wb3J0IHBhcnNlX2VudiwgcGFyc2VfY29uZmlnCgoKZGVmIHBhcnNlX2FyZ3VtZW50cygpOgogICAgcGFyc2VyID0gQXJndW1lbnRQYXJzZXIoIk5lc3RhIHNlcnZlciIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWRhZW1vbml6ZSIsICItZCIsIGRlc3Q9ImRhZW1vbml6ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Ym9vbCwgZGVmYXVsdD1UcnVlLCBoZWxwPSJkYWVtb25pemUgb3Igbm90IikKICAgIHJldHVybiBwYXJzZXIucGFyc2VfYXJncygpCgoKY2xhc3MgU2VydmVyKERhZW1vbik6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlncyk6CiAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoY29uZmlncywgZGljdCkKCiAgICAgICAgc2VsZi5fY29uZmdzID0gY29uZmlncwoKICAgICAgICBzZWxmLl9jb25maWdfY29tbW9uID0gY29uZmlnc1sic2VydmljZXMiXVsiY29tbW9uIl0KICAgICAgICBzZWxmLl9jb25maWdfc2VydmVyID0gY29uZmlnc1sic2VydmljZXMiXVsic2VydmVyIl0KCiAgICAgICAgbG9nZmlsZSA9IHNlbGYuX2NvbmZnc1sic2VydmljZXMiXVsic2VydmVyIl1bImxvZ2ZpbGUiXQogICAgICAgIHN1cGVyKCkuX19pbml0X18oCiAgICAgICAgICAgIHBpZGZpbGU9c2VsZi5fY29uZmdzWyJzZXJ2aWNlcyJdWyJzZXJ2ZXIiXVsicGlkZmlsZSJdLAogICAgICAgICAgICBzdGRvdXQ9bG9nZmlsZSwKICAgICAgICAgICAgc3RkZXJyPWxvZ2ZpbGUKICAgICAgICApCgogICAgICAgIHNlbGYuX2xvZ2dlciA9IGluaXRfbG9nZ2VyKAogICAgICAgICAgICBuYW1lPSJzZXJ2ZXIiLAogICAgICAgICAgICBsb2dmaWxlPWxvZ2ZpbGUsCiAgICAgICAgICAgIGxvZ2xldmVsPWNvbmZpZ3NbInNlcnZpY2VzIl1bInNlcnZlciJdWyJsb2dsZXZlbCJdCiAgICAgICAgKQoKICAgICAgICBzZWxmLl93b3JrZXIgPSBnZXRfd29ya2VyKCoqY29uZmlncykKICAgICAgICBzZWxmLl9ub3RpY2UgPSBnZXRfbm90aWNlKCoqY29uZmlncykKCiAgICAgICAgc2VsZi5faW50ZXJ2YWwgPSBzZWxmLl9jb25maWdfc2VydmVyWyJpbnRlcnZhbCJdCiAgICAgICAgc2VsZi5fc3RhdHVzID0gZGVmaW5lLlNUQVRVU19SVU5OSU5HIGlmIHNlbGYuX2NvbmZpZ19zZXJ2ZXJbCiAgICAgICAgICAgICJhdXRvX3N0YXJ0Il0gZWxzZSBkZWZpbmUuU1RBVFVTX1NUT1BQRUQKCiAgICAgICAgc2VsZi5fbXV0ZXggPSBMb2NrKCkKCiAgICBkZWYgX3J1bihzZWxmKToKICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygiU2VydmVyIGhhcyBiZWVuIHN0YXJ0ZWQiKQogICAgICAgIHNlbGYuX25vdGljZS5zZW5kX3Rhc2soCiAgICAgICAgICAgICJub3RpY2UiLAogICAgICAgICAgICBrd2FyZ3M9ewogICAgICAgICAgICAgICAgImxldmVsIjogIklORk8iLAogICAgICAgICAgICAgICAgIm1zZyI6ICJTZXJ2ZXIgaGFzIGJlZW4gc3RhcnRlZCIKICAgICAgICAgICAgfSkKICAgICAgICB0aHJlYWRzID0gW1RocmVhZCh0YXJnZXQ9c2VsZi5fd3JhcCwgYXJncz1bZnVuY10pCiAgICAgICAgICAgICAgICAgICBmb3IgZnVuYyBpbiBbc2VsZi5fY29tbXVuaWNhdGUsIHNlbGYuX3VwZGF0ZV9yZXN1bHRdXQoKICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgogICAgICAgICAgICB0LnN0YXJ0KCkKCiAgICAgICAgc2VsZi5fbWFpbigpCiAgICAgICAgIiIiCiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLl93cmFwKHNlbGYuX21haW4pCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBwcmludCAoZSkKICAgICAgICAiIiIKICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgogICAgICAgICAgICB0LmpvaW4oKQoKICAgICAgICBzZWxmLl9ub3RpY2Uuc2VuZF90YXNrKAogICAgICAgICAgICAibm90aWNlIiwgCiAgICAgICAgICAgIGt3YXJncz17CiAgICAgICAgICAgICAgICAibGV2ZWwiOiAiQ1JJVElDQUwiLAogICAgICAgICAgICAgICAgIm1zZyI6ICJTZXJ2ZXIgaGFzIGJlZW4gdGVybWluYXRlZCIKICAgICAgICAgICAgfSkKICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygiU2VydmVyIGhhcyBiZWVuIHRlcm1pbmF0ZWQiKQoKICAgIGRlZiBfc2V0X3N0YXR1cyhzZWxmLCBzdGF0dXMpOgogICAgICAgIHdpdGggc2VsZi5fbXV0ZXg6CiAgICAgICAgICAgIHNlbGYuX3N0YXR1cyA9IHN0YXR1cwoKICAgIGRlZiBfd3JhcChzZWxmLCBmdW5jLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHRyeToKICAgICAgICAgICAgZnVuYygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBzZWxmLl9zdGF0dXMgPSBkZWZpbmUuU1RBVFVTX1RFUk1JTkFURUQKICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmNyaXRpY2FsKGYiVW5leHBlY3RlZCBlcnJvciwgc3RhcnQgdG8gdGVybWluYXRlIDp7ZX0iKQogICAgICAgICAgICBzZWxmLl9ub3RpY2Uuc2VuZF90YXNrKAogICAgICAgICAgICAgICAgIm5vdGljZSIsCiAgICAgICAgICAgICAgICBrd2FyZ3M9ewogICAgICAgICAgICAgICAgICAgICJsZXZlbCI6ICJDUklUSUNBTCIsCiAgICAgICAgICAg"}}]
["e792eeb270ec9bf9db5a361b62958e3ca797fc53-3","e792eeb270ec9bf9db5a361b62958e3ca797fc53",{"$cut":{"chars":21060,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzb2NrZXQKaW1wb3J0IHRpbWUKaW1wb3J0IHBpY2tsZQppbXBvcnQgcHN1dGlsCmZyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCmZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQsIExvY2sKZnJvbSBuZXN0YS5zZXJ2ZXIuZGVmaW5lIGltcG9ydCBkZWZpbmUKZnJvbSBuZXN0YS5zZXJ2ZXIgaW1wb3J0IHNjaGVkdWxlCmZyb20gbmVzdGEuZXh0ZXJuYWwuZGFlbW9uIGltcG9ydCBEYWVtb24KZnJvbSBuZXN0YS50YXNrcy50YXNrcyBpbXBvcnQgZ2V0X3dvcmtlcgpmcm9tIG5lc3RhLnRhc2tzLm5vdGljZSBpbXBvcnQgZ2V0X25vdGljZQpmcm9tIG5lc3RhLnV0aWxzLnJhYmJpdG1xIGltcG9ydCBSYWJiaXRNUUNsaWVudApmcm9tIG5lc3RhLnV0aWxzLm15c3FsIGltcG9ydCBNeVNRTENsaWVudApmcm9tIG5lc3RhLnV0aWxzLmxvZyBpbXBvcnQgaW5pdF9sb2dnZXIKZnJvbSBuZXN0YS5jb25maWdzLnV0aWwgaW1wb3J0IHBhcnNlX2VudiwgcGFyc2VfY29uZmlnCgoKZGVmIHBhcnNlX2FyZ3VtZW50cygpOgogICAgcGFyc2VyID0gQXJndW1lbnRQYXJzZXIoIk5lc3RhIHNlcnZlciIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWRhZW1vbml6ZSIsICItZCIsIGRlc3Q9ImRhZW1vbml6ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Ym9vbCwgZGVmYXVsdD1UcnVlLCBoZWxwPSJkYWVtb25pemUgb3Igbm90IikKICAgIHJldHVybiBwYXJzZXIucGFyc2VfYXJncygpCgoKY2xhc3MgU2VydmVyKERhZW1vbik6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlncyk6CiAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoY29uZmlncywgZGljdCkKCiAgICAgICAgc2VsZi5fY29uZmdzID0gY29uZmlncwoKICAgICAgICBzZWxmLl9jb25maWdfY29tbW9uID0gY29uZmlnc1sic2VydmljZXMiXVsiY29tbW9uIl0KICAgICAgICBzZWxmLl9jb25maWdfc2VydmVyID0gY29uZmlnc1sic2VydmljZXMiXVsic2VydmVyIl0KCiAgICAgICAgbG9nZmlsZSA9IHNlbGYuX2NvbmZnc1sic2VydmljZXMiXVsic2VydmVyIl1bImxvZ2ZpbGUiXQogICAgICAgIHN1cGVyKCkuX19pbml0X18oCiAgICAgICAgICAgIHBpZGZpbGU9c2VsZi5fY29uZmdzWyJzZXJ2aWNlcyJdWyJzZXJ2ZXIiXVsicGlkZmlsZSJdLAogICAgICAgICAgICBzdGRvdXQ9bG9nZmlsZSwKICAgICAgICAgICAgc3RkZXJyPWxvZ2ZpbGUKICAgICAgICApCgogICAgICAgIHNlbGYuX2xvZ2dlciA9IGluaXRfbG9nZ2VyKAogICAgICAgICAgICBuYW1lPSJzZXJ2ZXIiLAogICAgICAgICAgICBsb2dmaWxlPWxvZ2ZpbGUsCiAgICAgICAgICAgIGxvZ2xldmVsPWNvbmZpZ3NbInNlcnZpY2VzIl1bInNlcnZlciJdWyJsb2dsZXZlbCJdCiAgICAgICAgKQoKICAgICAgICBzZWxmLl93b3JrZXIgPSBnZXRfd29ya2VyKCoqY29uZmlncykKICAgICAgICBzZWxmLl9ub3RpY2UgPSBnZXRfbm90aWNlKCoqY29uZmlncykKCiAgICAgICAgc2VsZi5faW50ZXJ2YWwgPSBzZWxmLl9jb25maWdfc2VydmVyWyJpbnRlcnZhbCJdCiAgICAgICAgc2VsZi5fc3RhdHVzID0gZGVmaW5lLlNUQVRVU19SVU5OSU5HIGlmIHNlbGYuX2NvbmZpZ19zZXJ2ZXJbCiAgICAgICAgICAgICJhdXRvX3N0YXJ0Il0gZWxzZSBkZWZpbmUuU1RBVFVTX1NUT1BQRUQKCiAgICAgICAgc2VsZi5fbXV0ZXggPSBMb2NrKCkKCiAgICBkZWYgX3J1bihzZWxmKToKICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygiU2VydmVyIGhhcyBiZWVuIHN0YXJ0ZWQiKQogICAgICAgIHNlbGYuX25vdGljZS5zZW5kX3Rhc2soCiAgICAgICAgICAgICJub3RpY2UiLAogICAgICAgICAgICBrd2FyZ3M9ewogICAgICAgICAgICAgICAgImxldmVsIjogIklORk8iLAogICAgICAgICAgICAgICAgIm1zZyI6ICJTZXJ2ZXIgaGFzIGJlZW4gc3RhcnRlZCIKICAgICAgICAgICAgfSkKICAgICAgICB0aHJlYWRzID0gW1RocmVhZCh0YXJnZXQ9c2VsZi5fd3JhcCwgYXJncz1bZnVuY10pCiAgICAgICAgICAgICAgICAgICBmb3IgZnVuYyBpbiBbc2VsZi5fY29tbXVuaWNhdGUsIHNlbGYuX3VwZGF0ZV9yZXN1bHRdXQoKICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgogICAgICAgICAgICB0LnN0YXJ0KCkKCiAgICAgICAgc2VsZi5fbWFpbigpCiAgICAgICAgIiIiCiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLl93cmFwKHNlbGYuX21haW4pCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBwcmludCAoZSkKICAgICAgICAiIiIKICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgogICAgICAgICAgICB0LmpvaW4oKQoKICAgICAgICBzZWxmLl9ub3RpY2Uuc2VuZF90YXNrKAogICAgICAgICAgICAibm90aWNlIiwgCiAgICAgICAgICAgIGt3YXJncz17CiAgICAgICAgICAgICAgICAibGV2ZWwiOiAiQ1JJVElDQUwiLAogICAgICAgICAgICAgICAgIm1zZyI6ICJTZXJ2ZXIgaGFzIGJlZW4gdGVybWluYXRlZCIKICAgICAgICAgICAgfSkKICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygiU2VydmVyIGhhcyBiZWVuIHRlcm1pbmF0ZWQiKQoKICAgIGRlZiBfc2V0X3N0YXR1cyhzZWxmLCBzdGF0dXMpOgogICAgICAgIHdpdGggc2VsZi5fbXV0ZXg6CiAgICAgICAgICAgIHNlbGYuX3N0YXR1cyA9IHN0YXR1cwoKICAgIGRlZiBfd3JhcChzZWxmLCBmdW5jLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHRyeToKICAgICAgICAgICAgZnVuYygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBzZWxmLl9zdGF0dXMgPSBkZWZpbmUuU1RBVFVTX1RFUk1JTkFURUQKICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmNyaXRpY2FsKGYiVW5leHBlY3RlZCBlcnJvciwgc3RhcnQgdG8gdGVybWluYXRlIDp7ZX0iKQogICAgICAgICAgICBzZWxmLl9ub3RpY2Uuc2VuZF90YXNrKAogICAgICAgICAgICAgICAgIm5vdGljZSIsCiAgICAgICAgICAgICAgICBrd2FyZ3M9ewogICAgICAgICAgICAgICAgICAgICJsZXZlbCI6ICJDUklUSUNBTCIsCiAgICAgICAgICAg"}}]
["c11c8edd8a0f3379a65c609b35b9e66421aeeeb9-1","c11c8edd8a0f3379a65c609b35b9e66421aeeeb9","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KciIiIkV4cG9ydHMgYSBtaW5pbWFsIFRGLUh1YiBtb2R1bGUgZm9yIEJFUlQgbW9kZWxzLgoKcHl0aG9uIGV4cG9ydF90b190Zmh1YiBcCiAgICAtLWJlcnRfZGlyZWN0b3J5PSRCRVJUX0RJUiBcCiAgICAtLWNoZWNrcG9pbnRfcGF0aD0kTU9ERUxfRElSIFwKICAgIC0tZXhwb3J0X3BhdGg9JEhVQl9ESVIgXAogICAgLS1sYXllcl9ub3JtIFwKICAgIC0tbnVtX3ZlY19xdWVyeT0ke05VTV9RVUVSWV9WRUN9IFwKICAgIC0tbnVtX3ZlY19wYXNzYWdlPSR7TlVNX0RPQ19WRUN9IFwKICAgIC0tcHJvamVjdGlvbl9zaXplPSR7UFJPSkVDVElPTl9TSVpFfQoKdGZodWIgcHVibGlzaC1tb2R1bGUgJEhVQl9ESVIvJE1PREVMX05BTUUuCiIiIgppbXBvcnQgb3MKCmZyb20gYWJzbCBpbXBvcnQgYXBwCmZyb20gYWJzbCBpbXBvcnQgZmxhZ3MKZnJvbSBiZXJ0IGltcG9ydCBtb2RlbGluZwpmcm9tIGxhbmd1YWdlLm11bHRpdmVjLm1vZGVscyBpbXBvcnQgcmFua2luZ19tb2RlbF9leHBlcmltZW50X2luYmF0Y2gKaW1wb3J0IHRlbnNvcmZsb3cuY29tcGF0LnYxIGFzIHRmCmltcG9ydCB0ZW5zb3JmbG93X2h1YiBhcyBodWIKCmZsYWdzLkRFRklORV9zdHJpbmcoCiAgICAiYmVydF9kaXJlY3RvcnkiLCBOb25lLAogICAgIlBhc3MgaW4gdGhlIGRpcmVjdG9yeSBmb3IgQkVSVF9MQVJHRS4gVGhlIGNvbmZpZyB3aWxsIGJlIHJlYWQgZnJvbSB0aGVyZSwgIgogICAgIndpdGggb3ZlcndyaXRlcyBmcm9tIHRoZSBjaGVja3BvaW50IG5hbWUuIikKCmZsYWdzLkRFRklORV9zdHJpbmcoCiAgICAiY2hlY2twb2ludF9wYXRoIiwgTm9uZSwKICAgICJlLmcuIHBhdGgvdG8vbXlfbW9kZWw7IHRoZSBsYXRlc3QgY2hlY2twb2ludCB3aWxsIGJlIHRha2VuIGZyb20gdGhlcmUuIikKCmZsYWdzLkRFRklORV9zdHJpbmcoCiAgICAiZXhwb3J0X3BhdGgiLCBOb25lLAogICAgIlBhdGggdG8gdGhlIG91dHB1dCBURi1IdWIgbW9kdWxlLiBUaGUgbW9kZWwgbmFtZSB3aWxsIGJlIGRlcml2ZWQgZnJvbSB0aGUgIgogICAgImNoZWNrcG9pbnQuIikKCkZMQUdTID0gZmxhZ3MuRkxBR1MKCgpkZWYgbW9kdWxlX2ZuKGlzX3RyYWluaW5nKToKICAiIiJNb2R1bGUgZnVuY3Rpb24uIiIiCiAgaW5wdXRfaWRzXzEgPSB0Zi5wbGFjZWhvbGRlcih0Zi5pbnQzMiwgW05vbmUsIE5vbmVdLCAiaW5wdXRfaWRzXzEiKQogIGlucHV0X21hc2tzXzEgPSB0Zi5wbGFjZWhvbGRlcih0Zi5pbnQzMiwgW05vbmUsIE5vbmVdLCAiaW5wdXRfbWFza3NfMSIpCiAgc2VnbWVudF9pZHNfMSA9IHRmLnBsYWNlaG9sZGVyKHRmLmludDMyLCBbTm9uZSwgTm9uZV0sICJzZWdtZW50X2lkc18xIikKCiAgaW5wdXRfaWRzXzIgPSB0Zi5wbGFjZWhvbGRlcih0Zi5pbnQzMiwgW05vbmUsIE5vbmVdLCAiaW5wdXRfaWRzXzIiKQogIGlucHV0X21hc2tzXzIgPSB0Zi5wbGFjZWhvbGRlcih0Zi5pbnQzMiwgW05vbmUsIE5vbmVdLCAiaW5wdXRfbWFza3NfMiIpCiAgc2VnbWVudF9pZHNfMiA9IHRmLnBsYWNlaG9sZGVyKHRmLmludDMyLCBbTm9uZSwgTm9uZV0sICJzZWdtZW50X2lkc18yIikKCiAgYmVydF9jb25maWcgPSBtb2RlbGluZy5CZXJ0Q29uZmlnLmZyb21fanNvbl9maWxlKAogICAgICBvcy5wYXRoLmpvaW4oRkxBR1MuYmVydF9kaXJlY3RvcnksICJiZXJ0X2NvbmZpZy5qc29uIikpCgogIG91dHB1dF9sYXllcl9xdWVyeSwgXyA9IFwKICAgICAgcmFua2luZ19tb2RlbF9leHBlcmltZW50X2luYmF0Y2guZW5jb2RlX2Jsb2NrKAogICAgICAgICAgYmVydF9jb25maWcsCiAgICAgICAgICBpbnB1dF9pZHNfMSwKICAgICAgICAgIGlucHV0X21hc2tzXzEsCiAgICAgICAgICBzZWdtZW50X2lkc18xLAogICAgICAgICAgRmFsc2UsCiAgICAgICAgICBGTEFHUy5udW1fdmVjX3F1ZXJ5LAogICAgICAgICAgaXNfdHJhaW5pbmcpCiAgb3V0cHV0X2xheWVyX3Bhc3NhZ2UsIF8gPSBcCiAgICAgIHJhbmtpbmdfbW9kZWxfZXhwZXJpbWVudF9pbmJhdGNoLmVuY29kZV9ibG9jaygKICAgICAgICAgIGJlcnRfY29uZmlnLAogICAgICAgICAgaW5wdXRfaWRzXzIsCiAgICAgICAgICBpbnB1dF9tYXNrc18yLAogICAgICAgICAgc2VnbWVudF9pZHNfMiwKICAgICAgICAgIEZhbHNlLAogICAgICAgICAgRkxBR1MubnVtX3ZlY19wYXNzYWdlLAogICAgICAgICAgaXNfdHJhaW5pbmcpCiAgdm9jYWJfZmlsZSA9IG9zLnBhdGguam9pbihGTEFHUy5iZXJ0X2RpcmVjdG9yeSwgInZvY2FiLnR4dCIpCiAgdm9jYWJfZmlsZSA9IHRmLmNvbnN0YW50KHZhbHVlPXZvY2FiX2ZpbGUsIGR0eXBlPXRmLnN0cmluZywgbmFtZT0idm9jYWJfZmlsZSIpCgogIHRmLmFkZF90b19jb2xsZWN0aW9uKHRmLkdyYXBoS2V5cy5BU1NFVF9GSUxFUEFUSFMsIHZvY2FiX2ZpbGUpCgogIGh1Yi5hZGRfc2lnbmF0dXJlKAogICAgICBuYW1lPSJxdWVyeV9vdXRwdXQiLAogICAgICBpbnB1dHM9ZGljdCgKICAgICAgICAgIGlucHV0X2lkcz1pbnB1dF9pZHNfMSwKICAgICAgICAgIGlucHV0X21hc2s9aW5wdXRfbWFza3NfMSwKICAgICAgICAgIHNlZ21lbnRfaWRzPXNlZ21lbnRfaWRzXzEpLAogICAgICBvdXRwdXRzPWRpY3Qob3V0cHV0X2xheWVyPW91dHB1dF9sYXllcl9xdWVyeSkpCgogIGh1Yi5hZGRfc2lnbmF0dXJlKAogICAgICBuYW1lPSJwYXNzYWdlX291dHB1dCIsCiAgICAgIGlucHV0cz1kaWN0KAogICAgICAgICAgaW5wdXRfaWRzPWlucHV0X2lkc18yLAogICAgICAgICAgaW5wdXRfbWFzaz1pbnB1dF9tYXNrc18yLAogICAgICAgICAgc2VnbWVudF9pZHM9c2VnbWVudF9pZHNfMiksCiAgICAgIG91dHB1dHM9ZGljdChvdXRwdXRfbGF5ZXI9b3V0cHV0X2xheWVyX3Bhc3NhZ2UpKQoKICBodWIuYWRkX3NpZ25hdHVyZSgKICAgICAgbmFtZT0idG9rZW5pemF0aW9uX2luZm8iLAogICAgICBpbnB1dHM9e30sCiAgICAgIG91dHB1dHM9ZGljdCh2b2NhYl9maWxlPXZvY2FiX2ZpbGUsIGRvX2xvd2VyX2Nhc2U9dGYuY29uc3RhbnQoVHJ1ZSkpKQoKCmRlZiBtYWluKF8pOgogIHRmLmxvZ2dpbmcuaW5mbygiUnVubmluZyBleHBvcnRfdG9fdGZodWIucHkiKQogIHRhZ3NfYW5kX2FyZ3MgPSBbXQogIGZvciBpc190cmFpbmluZyBpbiAoVHJ1ZSwgRmFsc2UpOgogICAgdGFncyA9IHNldCgpCiAgICBpZiBpc190cmFpbmluZzoKICAgICAgdGFncy5hZGQoInRyYWluIikKICAgIHRhZ3NfYW5kX2FyZ3MuYXBwZW5kKCh0YWdzLCBkaWN0KGlzX3RyYWluaW5nPWlzX3RyYWluaW5nKSkpCiAgc3BlYyA9IGh1Yi5jcmVhdGVfbW9kdWxlX3NwZWMobW9kdWxlX2ZuLCB0YWdzX2FuZF9hcmdzPXRhZ3NfYW5kX2FyZ3MpCgogIHRmLmxvZ2dpbmcuaW5mbygiVXNpbmcgY2hlY2twb2ludCB7fSIuZm9ybWF0KEZMQUdTLmNoZWNrcG9pbnRfcGF0aCkpCiAgdGYubG9nZ2luZy5pbmZvKCJFeHBvcnRpbmcgdG8ge30iLmZvcm1hdChGTEFHUy5leHBvcnRfcGF0aCkpCiAgc3BlYy5leHBvcnQoRkxBR1MuZXhwb3J0X3BhdGgsIGNoZWNrcG9pbnRfcGF0aD1GTEFHUy5jaGVja3BvaW50X3BhdGgpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICBmbGFncy5tYXJrX2ZsYWdfYXNfcmVxdWlyZWQoImJlcnRfZGlyZWN0b3J5IikKICBmbGFncy5tYXJrX2ZsYWdfYXNfcmVxdWlyZWQoImNoZWNrcG9pbnRfcGF0aCIpCiAgZmxhZ3MubWFya19mbGFnX2FzX3JlcXVpcmVkKCJleHBvcnRfcGF0aCIpCiAgYXBwLnJ1bihtYWluKQo8fGZpbV9zdWZmaXh8PgojIGNvZGluZz11dGYtOAojIENvcHlyaWdodCAyMDE4IFRoZSBHb29nbGUgQUkgTGFuZ3VhZ2UgVGVhbSBBdXRob3JzLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cjx8ZmltX2VuZHw+"]
["972a21b1f1e582dfb5870ac377d0136bba0a1574-1","972a21b1f1e582dfb5870ac377d0136bba0a1574","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QsIFR1cGxlCgppbXBvcnQgY29sb3JjZXQgYXMgY2MKCl9fYWxsX18gPSBbImNjX2NtYXBzIiwgImhleDJ1aW50OCJdCgoKY2NfY21hcHM6IExpc3Rbc3RyXSA9IHNvcnRlZChsaXN0KGNjLnBhbGV0dGUua2V5cygpKSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCmRlZiBoZXgydWludDgodjogc3RyKSAtPiBUdXBsZVtpbnQsIGludCwgaW50XToKICAgIGlmIHYuc3RhcnRzd2l0aCgiIyIpOgo8fGZpbV9lbmR8Pg=="]
["972a21b1f1e582dfb5870ac377d0136bba0a1574-2","972a21b1f1e582dfb5870ac377d0136bba0a1574","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QsIFR1cGxlCgppbXBvcnQgY29sb3JjZXQgYXMgY2MKCl9fYWxsX18gPSBbImNjX2NtYXBzIiwgImhleDJ1aW50OCJdCgoKY2NfY21hcHM6IExpc3Rbc3RyXSA9IHNvcnRlZChsaXN0KGNjLnBhbGV0dGUua2V5cygpKSkKCgpkZWYgaGV4MnVpbnQ4KHY6IHN0cikgLT4gVHVwbGVbaW50LCBpbnQsIGludF06CiAgICBpZiB2LnN0YXJ0c3dpdGgoIiMiKToKICAgICAgICB2ID0gdlsxOl0KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHIsIGcsIGIgPSB2WzA6Ml0sIHZbMjo0XSwgdls0OjZdCiAgICByLCBnLCBiID0gaW50KHIsIDE2KSwgaW50KGcsIDE2KSwgaW50KGIsIDE2KQogICAgcmV0dXJuIHIsIGcsIGIKPHxmaW1fZW5kfD4="]
["972a21b1f1e582dfb5870ac377d0136bba0a1574-3","972a21b1f1e582dfb5870ac377d0136bba0a1574","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QsIFR1cGxlCgppbXBvcnQgY29sb3JjZXQgYXMgY2MKCl9fYWxsX18gPSBbImNjX2NtYXBzIiwgImhleDJ1aW50OCJdCgoKY2NfY21hcHM6IExpc3Rbc3RyXSA9IHNvcnRlZChsaXN0KGNjLnBhbGV0dGUua2V5cygpKSkKCgpkZWYgaGV4MnVpbnQ4KHY6IHN0cikgLT4gVHVwbGVbaW50LCBpbnQsIGludF06CiAgICBpZiB2LnN0YXJ0c3dpdGgoIiMiKToKPHxmaW1faG9sZXw+CiAgICByLCBnLCBiID0gdlswOjJdLCB2WzI6NF0sIHZbNDo2XQogICAgciwgZywgYiA9IGludChyLCAxNiksIGludChnLCAxNiksIGludChiLCAxNikKICAgIHJldHVybiByLCBnLCBiCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgdiA9IHZbMTpdCgo8fGZpbV9lbmR8Pg=="]
["6bcb666842a2e901dce5b52c302dd4976c21bae3-1","6bcb666842a2e901dce5b52c302dd4976c21bae3","PHxmaW1fcHJlZml4fD4KY2xhc3MgTm9kZShvYmplY3QpOgogIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhID0gTm9uZSwgbmV4dCA9IE5vbmUpOgogICAgc2VsZi5kYXRhID0gZGF0YQogICAgc2VsZi5uZXh0ID0gbmV4dAoKbGlua2VkX2xpc3RfMCA9IE5vZGUoMCwgTm9kZSgxLCBOb2RlKDIsIE5vZGUoMywgTm9kZSg0LCBOb2RlKDUsIE5vZGUoNiwgTm9kZSg3LCBOb2RlKDgsIE5vZGUoOSkpKSkpKSkpKSkKCmRlZiByZXZlcnQoaGVhZCk6CiAgaWYgbm90IGhlYWQgb3Igbm90IGhlYWQubmV4dDoKICAgIHJldHVybiBoZWFkCgogIHByZV9ub2RlID0gTm9uZQo8fGZpbV9ob2xlfD4KICAgIGhlYWQubmV4dCA9IHByZV9ub2RlCiAgICBwcmVfbm9kZSA9IGhlYWQKICAgIGhlYWQgPSBuZXh0X25vZGUKCiAgcmV0dXJuIHByZV9ub2RlCgpkZWYgcmVjdXJzaXZlbHlfcmV2ZXJ0KGhlYWQpOgogIGlmIG5vdCBoZWFkIG9yIG5vdCBoZWFkLm5leHQ6CiAgICByZXR1cm4gaGVhZAoKICBuZXdfaGVhZCA9IHJlY3Vyc2l2ZWx5X3JldmVydChoZWFkLm5leHQpCgogIGhlYWQubmV4dC5uZXh0ID0gaGVhZAogIGhlYWQubmV4dCA9IE5vbmUKCiAgcmV0dXJuIG5ld19oZWFkCgpkZWYgcHJpbnRfbGlua2VkX2xpc3QoaGVhZCk6CiAgdG1wX25vZGUgPSBoZWFkCgogIHdoaWxlIHRtcF9ub2RlOgogICAgICBwcmludCB0bXBfbm9kZS5kYXRhCgogICAgICB0bXBfbm9kZSA9IHRtcF9ub2RlLm5leHQKCgoKcHJpbnRfbGlua2VkX2xpc3QobGlua2VkX2xpc3RfMCkKCnJldmVydGVkX2xpbmtlZF9saXN0XzAgPSByZXZlcnQobGlua2VkX2xpc3RfMCkKCnByaW50X2xpbmtlZF9saXN0KHJldmVydGVkX2xpbmtlZF9saXN0XzApCgpyZXZlcnRlZF9yZXZlcnRlZF9saW5rZWRfbGlzdF8wID0gcmVjdXJzaXZlbHlfcmV2ZXJ0KHJldmVydGVkX2xpbmtlZF9saXN0XzApCgpwcmludF9saW5rZWRfbGlzdChyZXZlcnRlZF9yZXZlcnRlZF9saW5rZWRfbGlzdF8wKQoKCjx8ZmltX3N1ZmZpeHw+CiAgbmV4dF9ub2RlID0gTm9uZQoKICB3aGlsZSBoZWFkOgogICAgbmV4dF9ub2RlID0gaGVhZC5uZXh0Cjx8ZmltX2VuZHw+"]
["c120593b859125fd6bb14d020e8fbbf73c9a7c58-1","c120593b859125fd6bb14d020e8fbbf73c9a7c58","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiIiIlNvbHZlIHRoZSBwdXp6bGUgZ2FtZSAiRHJpdmUgWWEgTnV0cyIKICAgIGh0dHBzOi8vd3d3LmFtYXpvbi5jb20vVmludGFnZS1NaWx0b24tQnJhZGxleS1Ecml2ZS1QdXp6bGUvZHAvQjAwSTg0SEw3MC8KPHxmaW1faG9sZXw+CgoKZGVmIG1haW4ocGFydGlhbD1GYWxzZSwgdmVyYm9zZT1GYWxzZSk6CiAgICAiIiJGaW5kIHRoZSBzb2x1dGlvbihzKSBhbmQgcHJpbnQgdG8gc3Rkb3V0LgoKICAgIEFyZ3M6CiAgICAgICAgcGFydGlhbDogKGJvb2wpIE9ubHkgZmluZCBwYXJ0aWFsIHNvbHV0aW9uIChzdGFydGluZyBwYWlycykuCiAgICAgICAgdmVyYm9zZTogKGJvb2wpIE1vcmUgcHJpbnRzLgoKICAgICIiIgogICAgIyBTb3J0ZWQgbGV4aWNvZ3JhcGhpY2FsbHkKICAgIGEgPSBOdXQoWzEsIDIsIDMsIDQsIDUsIDZdLCAnYScpCiAgICBiID0gTnV0KFsxLCAyLCA1LCA2LCAzLCA0XSwgJ2InKQogICAgYyA9IE51dChbMSwgMywgNSwgMiwgNCwgNl0sICdjJykKICAgIGQgPSBOdXQoWzEsIDMsIDUsIDQsIDIsIDZdLCAnZCcpCiAgICBlID0gTnV0KFsxLCA0LCAyLCAzLCA1LCA2XSwgJ2UnKQogICAgZiA9IE51dChbMSwgNSwgMywgMiwgNiwgNF0sICdmJykKICAgIGcgPSBOdXQoWzEsIDYsIDUsIDQsIDMsIDJdLCAnZycpCgogICAgYWxsX251dHNfbGlzdCA9IFthLCBiLCBjLCBkLCBlLCBmLCBnXQoKICAgIGlmIHBhcnRpYWw6CiAgICAgICAgcHJpbnRfcGFydGlhbF9zb2x1dGlvbnMoYWxsX251dHNfbGlzdCwgdmVyYm9zZSkKICAgIGVsc2U6CiAgICAgICAgcHJpbnRfZnVsbF9zb2x1dGlvbnMoYWxsX251dHNfbGlzdCwgdmVyYm9zZSkKCgpjbGFzcyBOdXQ6CiAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtYmVycywgbmFtZSk6CiAgICAgICAgIiIiV3JhcHBlciBmb3IgTnV0IG9iamVjdC4KCiAgICAgICAgQXJnczoKICAgICAgICAgICAgbnVtYmVyczogbGlzdChpbnQpIE51bWJlcnMgb24gdGhlIE51dCBpbiB3aWRkZXJzaGlucyAoY291bnRlci1jbG9ja3dpc2UpIGRpcmVjdGlvbiwKICAgICAgICAgICAgICAgIGUuZy4gIFsxLCAyLCAzLCA0LCA1LCA2XQoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBOdXQ6IENsYXNzIHdpdGggZWRnZXMgaW5mZXJyZWQgZnJvbSBsaXN0IG9mIG51bWJlcnMuCgogICAgICAgID4+PiBudXRfYSA9IE51dChbMSwgMiwgMywgNCwgNSwgNl0sICdhJykKICAgICAgICA+Pj4gbnV0X2EuZWRnZXNfbGlzdAogICAgICAgIFsoMSwgMiksICgyLCAzKSwgKDMsIDQpLCAoNCwgNSksICg1LCA2KSwgKDYsIDEpXQogICAgICAgID4+PiAoMSwgMikgaW4gbnV0X2EuZWRnZXNfc2V0CiAgICAgICAgVHJ1ZQogICAgICAgID4+PiAoMSwgMykgaW4gbnV0X2EuZWRnZXNfc2V0CiAgICAgICAgRmFsc2UKCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5udW1iZXJzID0gdHVwbGUobnVtYmVycykKICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgZWRnZXMgPSBbXQogICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihudW1iZXJzKSAtIDEpOgogICAgICAgICAgICBlZGdlcy5hcHBlbmQoKG51bWJlcnNbaV0sIG51bWJlcnNbaSArIDFdKSkKICAgICAgICBlZGdlcy5hcHBlbmQoKG51bWJlcnNbLTFdLCBudW1iZXJzWzBdKSkKICAgICAgICBzZWxmLmVkZ2VzX2xpc3QgPSBlZGdlcwogICAgICAgIHNlbGYuZWRnZXNfc2V0ID0gZnJvemVuc2V0KGVkZ2VzKQoKICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpdGVtKToKICAgICAgICBpZiBpdGVtID49IGxlbihzZWxmLm51bWJlcnMpOgogICAgICAgICAgICBvbGRfaXRlbSA9IGl0ZW0KICAgICAgICAgICAgaXRlbSA9IG9sZF9pdGVtICUgbGVuKHNlbGYubnVtYmVycykKICAgICAgICAgICAgIyBwcmludChmJz4+IFdhcm5pbmc6IGNvbnZlcnRpbmcgbG9va3VwIGluZGV4IHtvbGRfaXRlbX0gdG8ge2l0ZW19JykKICAgICAgICByZXR1cm4gc2VsZi5udW1iZXJzW2l0ZW1dCgogICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgcmV0dXJuIHNlbGYubmFtZSA+IG90aGVyLm5hbWUKCiAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKICAgICAgICByZXR1cm4gc2VsZi5uYW1lIDwgb3RoZXIubmFtZQoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5uYW1lCgoKZGVmIGdldF9vcGVuX2VkZ2VzKG51dF8xLCBpbmRleF8xLCBudXRfMiwgaW5kZXhfMik6CiAgICAiIiJTdXBwb3NlIHRoYXQgbnV0XzEgYW5kIG51dF8yIG1hdGNoIHVwIGF0IGluZGV4XzEgYW5kIGluZGV4XzI6IHJldHVybiBvcGVuIGVkZ2VzIG9uIGxlZnQgYW5kIHJpZ2h0LgoKICAgIEFyZ3M6CiAgICAgICAgbnV0XzE6IE51dAogICAgICAgIGluZGV4XzE6IGludAogICAgICAgIG51dF8yOiBOdXQKICAgICAgICBpbmRleF8yOiBpbnQKCiAgICBSZXR1cm5zOgogICAgICAgIHR1cGxlKHR1cGxlKGludCwgaW50KSwgdHVwbGUoaW50LCBpbnQpKSBMZWZ0IGVkZ2UsIFJpZ2h0IGVkZ2UuCgogICAgPj4+IGEgPSBOdXQoWzEsIDIsIDMsIDQsIDUsIDZdLCAnYScpCiAgICA+Pj4gYiA9IE51dChbMSwgMiwgNSwgNiwgMywgNF0sICdiJykKICAgID4+PiBjID0gTnV0KFsxLCAzLCA1LCAyLCA0LCA2XSwgJ2MnKQoKICAgID4+PiBnZXRfb3Blbl9lZGdlcyhhLCAwLCBiLCAwKQogICAgKCgyLCA2KSwgKDIsIDQpKQoKICAgID4+PiBnZXRfb3Blbl9lZGdlcyhhLCAwLCBjLCAwKQogICAgKCgzLCA2KSwgKDIsIDYpKQoKICAgID4+PiBnZXRfb3Blbl9lZGdlcyhhLCAxLCBjLCAzKQogICAgKCg0LCAxKSwgKDMsIDUpKQoKICAgICIiIgogICAgdmFsXzEgPSBudXRfMVtpbmRleF8xXQogICAgdmFsXzIgPSBudXRfMltpbmRleF8yXQogICAgaWYgdmFsXzEgIT0gdmFsXzI6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgZiJQaWVjZXMgZG8gbm90IG1hdGNoIHtudXRfMX1be2luZGV4XzF9XSwge251dF8yfVt7aW5kZXhfMn1dIikKCiAgICBsZWZ0X2VkZ2UgPSAobnV0XzJbaW5kZXhfMiArIDFdLCBudXRfMVtpbmRleF8xIC0gMV0pCiAgICByaWdodF9lZGdlID0gKG51dF8xW2luZGV4XzEgKyAxXSwgbnV0XzJbaW5kZXhfMiAtIDFdKQoKICAgIHJldHVybiBsZWZ0X2VkZ2UsIHJpZ2h0X2VkZ2UKCgpkZWYgdHJ5X2NlbnRlcihjZW50ZXJfbnV0LCBhbGxfbnV0cywgdmVyYm9zZT1UcnVlKToKICAgICIiIlBhcnRpYWwgc29sdXRpb24gZmluZGVyLCB0byBuYXJyb3cgZG93biB0byBwb3NzaWJsZSBjZW50ZXIgY2VudGVyIGFuZCBzZWNvbmQgbnV0cy4KCiAgICBBcmdzOgogICAgICAgIGNlbnRlcl9udXQ6IE51dAogICAgICAgIGFsbF9udXRzOiBsaXN0KE51dCkKICAgICAgICB2ZXJib3NlOiBQcmludCBlYWNoIG9wdGlvbiB0cmllZC4KCiAgICBSZXR1cm5zOgogICAgICAgIGxpc3QoTnV0LCBOdXQsIGxpc3QoTnV0KSwgbGlzdChOdXQpOiBMaXN0IG9mIHZhbGlkIGNvbWJpbmF0aW9ucyBvZgogICAgICAgICAgICBDZW50ZXIgcGllY2UsIFNlY29uZCBwaWVjZSwgcG9zc2libGUgTGVmdCBlZGdlcywgcG9zc2libGUgUmlnaHQgZWRnZXMuCgogICAgPj4+IGEgPSBOdXQoWzEsIDIsIDMsIDQsIDUsIDZdLCAnYScpCiAgICA+Pj4gYiA9IE51dChbMSwgMiwgNSwgNiwgMywgNF0sICdiJykKICAgID4+PiBjID0gTnV0KFsxLCAzLCA1LCAyLCA0LCA2XSwgJ2MnKQogICAgPj4+IGQgPSBOdXQoWzEsIDMsIDUsIDQsIDIsIDZdLCAnZCcpCiAgICA+Pj4gZSA9IE51dChbMSwgNCwgMiwgMywgNSwgNl0sICdlJykKICAgID4+PiBmID0gTnV0KFsxLCA1LCAzLCAyLCA2LCA0XSwgJ2YnKQogICAgPj4+IGcgPSBOdXQoWzEsIDYsIDUsIDQsIDMsIDJdLCAnZycpCiAgICA+Pj4gYWxsX251dHNfbGlzdCA9IFthLCBiLCBjLCBkLCBlLCBmLCBnXQogICAgPj4+IHRyeV9jZW50ZXIoYSwgYWxsX251dHNfbGlzdCwgdmVyYm9zZT1GYWxzZSkKICAgIFsoYSwgYiwgW2QsIGZdLCBbY10pLCAoYSwgZSwgW2NdLCBbZCwgZl0pLCAoYSwgZiwgW2IsIGVdLCBbY10pXQoKCiAgICAiIiIKICAgIHBvc3NpYmxlX3BhaXJzID0gW10KCiAgICAjIENoZWNrIGZvciBzZWNvbmQgbnV0IHZhbGlkaXR5CiAgICBmb3IgbiBpbiBhbGxfbnV0czoKICAgICAgICBpZiBuID09IGNlbnRlcl9udXQ6CiAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICMgTWF0Y2ggdXAgb24gdGhlICcxJ3MKICAgICAgICBsZWZ0X2VkZ2UsIHJpZ2h0X2VkZ2UgPSBnZXRfb3Blbl9lZGdlcygKICAgICAgICAgICAgY2VudGVyX251dCwgMCwgbiwgMCkKCiAgICAgICAgYXZhaWxhYmxlX251dHMgPSBzb3J0ZWQoc2V0KGFsbF9udXRzKSAtIHtjZW50ZXJfbnV0LCBufSkKCiAgICAgICAgbGVmdF9vcHRpb25zID0gW10KICAgICAgICByaWdodF9vcHRpb25zID0gW10KICAgICAgICBmb3IgbSBpbiBhdmFpbGFibGVfbnV0czoKICAgICAgICAgICAgaWYgbGVmdF9lZGdlIGluIG0uZWRnZXNfc2V0OgogICAgICAgICAgICAgICAgbGVmdF9vcHRpb25zLmFwcGVuZChtKQogICAgICAgICAgICBpZiByaWdodF9lZGdlIGluIG0uZWRnZXNfc2V0OgogICAgICAgICAgICAgICAgcmlnaHRfb3B0aW9ucy5hcHBlbmQobSkKCiAgICAgICAgbGVmdF9wb3NzaWJsZSA9IGJvb2wobGVmdF9vcHRpb25zKQogICAgICAgIHJpZ2h0X3Bvc3NpYmxlID0gYm9vbChyaWdodF9vcHRpb25zKQogICAgICAgIG92ZXJhbGxfcG9zc2libGUgPSBsZWZ0X3Bvc3NpYmxlIGFuZCByaWdodF9wb3NzaWJsZQoKICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICBwcmludChmJ3tjZW50ZXJfbnV0PX0sIE5leHQge24ubmFtZX0nKQogICAgICAgICAgICBwcmludChmJ3tsZWZ0X2VkZ2U9fSwge3JpZ2h0X2VkZ2U9fScpCiAgICAgICAgICAgIHByaW50KGYne2xlZnRfcG9zc2libGU9fSwge3JpZ2h0X3Bvc3NpYmxlPX0nKQogICAgICAgICAgICBwcmludChmJ092ZXJhbGwgcG9zc2libGU6IHtsZWZ0X3Bvc3NpYmxlIGFuZCByaWdodF9wb3NzaWJsZX0nKQogICAgICAgICAgICBwcmludCgnJykKICAgICAgICBpZiBvdmVyYWxsX3Bvc3NpYmxlOgogICAgICAgICAgICBwb3NzaWJsZV9wYWlycy5hcHBlbmQoKGNlbnRlcl9udXQsIG4sIGxlZnRfb3B0aW9ucywgcmlnaHRfb3B0aW9ucykpCgogICAgcmV0dXJuIHBvc3NpYmxlX3BhaXJzCgoKZGVmIHRyYWNlX3BhdGgoY2VudGVyX251dCwgc2Vjb25kX251dCwgY2VudGVyX2luZGV4LCBhdmFpbGFibGVfbnV0cywgc3RhY2s9W10sIHZlcmJvc2U9VHJ1ZSk6CiAgICAiIiJGdWxsIHNvbHV0aW9uIGZpbmRlci4KCiAgICBBcmdzOgogICAgICAgIGNlbnRlcl9udXQ6IE51dAogICAgICAgIHNlY29uZF9udXQ6IE51dAogICAgICAgIGNlbnRlcl9pbmRleDogaW50CiAgICAgICAgYXZhaWxhYmxlX251dHM6IHNldChOdXQpCiAgICAgICAgc3RhY2s6IGxpc3QoTnV0KSBwcmV2aW91cyBudXRzIHVzZWQgaW4gc2VxdWVuY2UgdGh1cyBmYXIuCiAgICAgICAgdmVyYm9zZTogKGJvb2wpIE1vcmUgcHJpbnRzLgoKICAgIFJldHVybnM6CiAgICAgICAgYm9vbDogVHJ1ZSBpZiBzb2x1dGlvbiBmb3VuZCwgZWxzZSBGYWxzZS4KICAgICAgICBsaXN0KE51dCk6IFNvbHV0aW9uIHNlcXVlbmNlIGlmIGZvdW5kLCBlbHNlIGVtcHR5IGxpc3QuCgogICAgIiIiCiAgICAjIFJlYWNoZWQgZW5kIG9mIHBhdGg7IHN1Y2Nlc3MhCiAgICBpZiBub3QgYXZhaWxhYmxlX251dHM6CiAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgcHJpbnQoJycpCiAgICAgICAgICAgIHByaW50KCcqKiogUmVhY2hlZCBlbmQgd2l0aCBzdWNjZXNzISEhISAqKionKQogICAgICAgICAgICBwcmludChzdGFjaykKICAgICAgICAgICAgcHJpbnQoJycpCiAgICAgICAgcmV0dXJuIFRydWUsIHN0YWNrCgogICAgY2VudGVyX3ZhbHVlID0gY2VudGVyX251dFtjZW50ZXJfaW5kZXhdCiAgICBzZWNvbmRfaW5kZXggPSBzZWNvbmRfbnV0Lm51bWJlcnMuaW5kZXgoY2VudGVyX3ZhbHVlKQoKICAgIGlmIHZlcmJvc2U6CiAgICAgICAgcHJpbnQoJycpCiAgICAgICAgcHJpbnQoZid7c3RhY2s9fScpCiAgICAgICAgcHJpbnQoZid7Y2VudGVyX251dD19LCB7c2Vjb25kX251dD19LicpCiAgICAgICAgcHJpbnQoZid7Y2VudGVyX2luZGV4PX0sIHtjZW50ZXJfdmFsdWU9fSwge3NlY29uZF9pbmRleD19JykKICAgICAgICBwcmludChmJ3thdmFpbGFibGVfbnV0cz19JykKCiAgICBsZWZ0X2VkZ2UsIHJpZ2h0X2VkZ2UgPSBnZXRfb3Blbl9lZGdlcygKICAgICAgICBjZW50ZXJfbnV0LCBjZW50ZXJfaW5kZXgsIHNlY29uZF9udXQsIHNlY29uZF9pbmRleCkKCiAgICBmb3IgcmlnaHRfbnV0IGluIGF2YWlsYWJsZV9udXRzOgogICAgICAgIGlmIHJpZ2h0X2VkZ2UgaW4gcmlnaHRfbnV0LmVkZ2VzX3NldDoKICAgICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgICAgIHByaW50KGYne3JpZ2h0X2VkZ2U9fSBmb3VuZCBmb3IgTnV0IHtyaWdodF9udXQ9fS4nKQogICAgICAgICAgICAgICAgcHJpbnQoZidSZWN1cnNpb24hJykKICAgICAgICAgICAgIyBTb3J0aW5nIGFkZHMgcnVubmluZyB0aW1lLCBidXQgZW5zdXJlcyBkZXRlcm1pbmlzdGljIG9yZGVyIG9mIGV4cGxvcmF0aW9uLgogICAgICAgICAgICBuZXdfYXZhaWxhYmxlX251dHMgPSBzb3J0ZWQoc2V0KGF2YWlsYWJsZV9udXRzKSAtIHtyaWdodF9udXR9KQogICAgICAgICAgICBzdGFjayA9IHN0YWNrICsgW3JpZ2h0X251dF0KICAgICAgICAgICAgIyBSZWN1cnNpb24hCiAgICAgICAgICAgIHJldHVybiB0cmFjZV9wYXRoKGNlbnRlcl9udXQsIHJpZ2h0X251dCwgY2VudGVyX2luZGV4ICsgMSwgbmV3X2F2YWlsYWJsZV9udXRzLCBzdGFjaz1zdGFjaywgdmVyYm9zZT12ZXJib3NlKQoKICAgIGlmIHZlcmJvc2U6CiAgICAgICAgcHJpbnQoZidObyBhdmFpbGFibGUgbnV0IGZvciB7cmlnaHRfZWRnZT19OyBObyBzb2x1dGlvbiBmb3VuZCBmb3Igc3RhY2shJykKICAgIHJldHVybiBGYWxzZSwgc3RhY2sKCgpkZWYgcHJpbnRfcGFydGlhbF9zb2x1dGlvbnMobnV0c19saXN0LCB2ZXJib3NlPUZhbHNlKToKICAgICIiIlByaW50IG9ubHkgcG9zc2libGUgc3RhcnRpbmcgcGFpcnMuCgogICAgQXJnczoKICAgICAgICBudXRzX2xpc3Q6IChsaXN0KE51dCkpIGxpc3Qgb2YgTnV0cyBpbiB0aGUgcHV6emxlLgogICAgICAgIHZlcmJvc2U6IChib29sKSBNb3JlIHByaW50cy4KCiAgICAiIiIKICAgIHBvc3NpYmxlX3N0YXJ0aW5nX3BhaXJzID0gW10KCiAgICBmb3IgY24gaW4gbnV0c19saXN0OgogICAgICAgIHBvc3NpYmxlX3N0YXJ0aW5nX3BhaXJzLmV4dGVuZCh0cnlfY2VudGVyKGNuLCBudXRzX2xpc3QsIHZlcmJvc2U9dmVyYm9zZSkpCgogICAgcHJpbnQoJycpCiAgICBwcmludChmJ0ZvdW5kIHtsZW4ocG9zc2libGVfc3RhcnRpbmdfcGFpcnMpfSBwb3NzaWJsZSBzdGFydGluZyBwYWlycy4nKQogICAgcHJpbnQoJ1Bvc3NpYmxlIHN0YXJ0aW5nIHBhcmlzOicpCiAgICBmb3IgcGFpciBpbiBwb3NzaWJsZV9zdGFydGluZ19wYWlyczoKICAgICAgICBwcmludChmJ1x0UGFpcjogKHtwYWlyWzBdLm5hbWV9LCB7cGFpclsxXS5uYW1lfSksIExlZnQ6IHtwYWlyWzJdfSwgUmlnaHQ6IHtwYWlyWzNdfScpCgoKZGVmIHByaW50X2Z1bGxfc29sdXRpb25zKG51dHNfbGlzdCwgdmVyYm9zZT1GYWxzZSk6CiAgICAiIiJQcmludCBmdWxsIHNvbHV0aW9ucy4KCiAgICBBcmdzOgogICAgICAgIG51dHNfbGlzdDogKGxpc3QoTnV0KSkgbGlzdCBvZiBOdXRzIGluIHRoZSBwdXp6bGUuCiAgICAgICAgdmVyYm9zZTogKGJvb2wpIE1vcmUgcHJpbnRzLgoKICAgICIiIgogICAgc29sdXRpb25zID0gW10KICAgIGZvciBjbiBpbiBudXRzX2xpc3Q6CiAgICAgICAgZm9yIHNuIGluIHNvcnRlZChzZXQobnV0c19saXN0KSAtIHtjbn0pOgogICAgICAgICAgICBzdGFydGluZ19zdGFjayA9IFtjbiwgc25dCiAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICBwcmludCgnJykKICAgICAgICAgICAgICAgIHByaW50KGYnVHJ5aW5nIHtzdGFydGluZ19zdGFjaz19JykKICAgICAgICAgICAgYXZhaWxhYmxlID0gc29ydGVkKHNldChudXRzX2xpc3QpIC0ge2NuLCBzbn0pCiAgICAgICAgICAgIGZvdW5kLCBzZXF1ZW5jZSA9IHRyYWNlX3BhdGgoY24sIHNuLCAwLCBhdmFpbGFibGUsIHN0YWNrPXN0YXJ0aW5nX3N0YWNrLCB2ZXJib3NlPXZlcmJvc2UpCiAgICAgICAgICAgIGlmIGZvdW5kOgogICAgICAgICAgICAgICAgc29sdXRpb25zLmFwcGVuZChzZXF1ZW5jZSkKCiAgICBwcmludCgnJykKICAgIHByaW50KCdGaW5hbCBzb2x1dGlvbnMgZm91bmQ6JykKICAgIGZvciBzIGluIHNvbHV0aW9uczoKICAgICAgICBwcmludChmJ1x0e3N9JykKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgYXJndW1lbnRfcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogICAgcGFyc2VyID0gYXJndW1lbnRfcGFyc2VyCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItcCIsICItLXBhcnRpYWwiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJPbmx5IHByaW50IHBhcnRpYWwgc29sdXRpb24gKHBvc3NpYmxlIHN0YXJ0aW5nIHBhaXJzKSIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItdiIsICItLXZlcmJvc2UiLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSJQcmludCB2ZXJib3NlIGRlYnVnIG1lc3NhZ2VzIikKICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCiAgICBtYWluKHBhcnRpYWw9YXJncy5wYXJ0aWFsLCB2ZXJib3NlPWFyZ3MudmVyYm9zZSkKPHxmaW1fc3VmZml4fD4KIiIiCiMgQXNzdW1lcyBweXRob24gMy44LjArCiMgU09MVVRJT046IFtkLCBmLCBhLCBjLCBnLCBiLCBlXQppbXBvcnQgYXJncGFyc2UKPHxmaW1fZW5kfD4="]
["c120593b859125fd6bb14d020e8fbbf73c9a7c58-2","c120593b859125fd6bb14d020e8fbbf73c9a7c58","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiIiIlNvbHZlIHRoZSBwdXp6bGUgZ2FtZSAiRHJpdmUgWWEgTnV0cyIKICAgIGh0dHBzOi8vd3d3LmFtYXpvbi5jb20vVmludGFnZS1NaWx0b24tQnJhZGxleS1Ecml2ZS1QdXp6bGUvZHAvQjAwSTg0SEw3MC8KIiIiCiMgQXNzdW1lcyBweXRob24gMy44LjArCiMgU09MVVRJT046IFtkLCBmLCBhLCBjLCBnLCBiLCBlXQppbXBvcnQgYXJncGFyc2UKCgpkZWYgbWFpbihwYXJ0aWFsPUZhbHNlLCB2ZXJib3NlPUZhbHNlKToKICAgICIiIkZpbmQgdGhlIHNvbHV0aW9uKHMpIGFuZCBwcmludCB0byBzdGRvdXQuCgogICAgQXJnczoKICAgICAgICBwYXJ0aWFsOiAoYm9vbCkgT25seSBmaW5kIHBhcnRpYWwgc29sdXRpb24gKHN0YXJ0aW5nIHBhaXJzKS4KICAgICAgICB2ZXJib3NlOiAoYm9vbCkgTW9yZSBwcmludHMuCgogICAgIiIiCiAgICAjIFNvcnRlZCBsZXhpY29ncmFwaGljYWxseQogICAgYSA9IE51dChbMSwgMiwgMywgNCwgNSwgNl0sICdhJykKICAgIGIgPSBOdXQoWzEsIDIsIDUsIDYsIDMsIDRdLCAnYicpCiAgICBjID0gTnV0KFsxLCAzLCA1LCAyLCA0LCA2XSwgJ2MnKQogICAgZCA9IE51dChbMSwgMywgNSwgNCwgMiwgNl0sICdkJykKICAgIGUgPSBOdXQoWzEsIDQsIDIsIDMsIDUsIDZdLCAnZScpCiAgICBmID0gTnV0KFsxLCA1LCAzLCAyLCA2LCA0XSwgJ2YnKQogICAgZyA9IE51dChbMSwgNiwgNSwgNCwgMywgMl0sICdnJykKCiAgICBhbGxfbnV0c19saXN0ID0gW2EsIGIsIGMsIGQsIGUsIGYsIGddCgogICAgaWYgcGFydGlhbDoKICAgICAgICBwcmludF9wYXJ0aWFsX3NvbHV0aW9ucyhhbGxfbnV0c19saXN0LCB2ZXJib3NlKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBlbHNlOgogICAgICAgIHByaW50X2Z1bGxfc29sdXRpb25zKGFsbF9udXRzX2xpc3QsIHZlcmJvc2UpCgoKPHxmaW1fZW5kfD4="]
["c120593b859125fd6bb14d020e8fbbf73c9a7c58-3","c120593b859125fd6bb14d020e8fbbf73c9a7c58","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiIiIlNvbHZlIHRoZSBwdXp6bGUgZ2FtZSAiRHJpdmUgWWEgTnV0cyIKICAgIGh0dHBzOi8vd3d3LmFtYXpvbi5jb20vVmludGFnZS1NaWx0b24tQnJhZGxleS1Ecml2ZS1QdXp6bGUvZHAvQjAwSTg0SEw3MC8KIiIiCiMgQXNzdW1lcyBweXRob24gMy44LjArCiMgU09MVVRJT046IFtkLCBmLCBhLCBjLCBnLCBiLCBlXQppbXBvcnQgYXJncGFyc2UKCgpkZWYgbWFpbihwYXJ0aWFsPUZhbHNlLCB2ZXJib3NlPUZhbHNlKToKICAgICIiIkZpbmQgdGhlIHNvbHV0aW9uKHMpIGFuZCBwcmludCB0byBzdGRvdXQuCgogICAgQXJnczoKICAgICAgICBwYXJ0aWFsOiAoYm9vbCkgT25seSBmaW5kIHBhcnRpYWwgc29sdXRpb24gKHN0YXJ0aW5nIHBhaXJzKS4KICAgICAgICB2ZXJib3NlOiAoYm9vbCkgTW9yZSBwcmludHMuCgogICAgIiIiCiAgICAjIFNvcnRlZCBsZXhpY29ncmFwaGljYWxseQogICAgYSA9IE51dChbMSwgMiwgMywgNCwgNSwgNl0sICdhJykKICAgIGIgPSBOdXQoWzEsIDIsIDUsIDYsIDMsIDRdLCAnYicpCiAgICBjID0gTnV0KFsxLCAzLCA1LCAyLCA0LCA2XSwgJ2MnKQogICAgZCA9IE51dChbMSwgMywgNSwgNCwgMiwgNl0sICdkJykKICAgIGUgPSBOdXQoWzEsIDQsIDIsIDMsIDUsIDZdLCAnZScpCiAgICBmID0gTnV0KFsxLCA1LCAzLCAyLCA2LCA0XSwgJ2YnKQogICAgZyA9IE51dChbMSwgNiwgNSwgNCwgMywgMl0sICdnJykKCiAgICBhbGxfbnV0c19saXN0ID0gW2EsIGIsIGMsIGQsIGUsIGYsIGddCgogICAgaWYgcGFydGlhbDoKICAgICAgICBwcmludF9wYXJ0aWFsX3NvbHV0aW9ucyhhbGxfbnV0c19saXN0LCB2ZXJib3NlKQogICAgZWxzZToKICAgICAgICBwcmludF9mdWxsX3NvbHV0aW9ucyhhbGxfbnV0c19saXN0LCB2ZXJib3NlKQoKCmNsYXNzIE51dDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBudW1iZXJzLCBuYW1lKToKICAgICAgICAiIiJXcmFwcGVyIGZvciBOdXQgb2JqZWN0LgoKICAgICAgICBBcmdzOgogICAgICAgICAgICBudW1iZXJzOiBsaXN0KGludCkgTnVtYmVycyBvbiB0aGUgTnV0IGluIHdpZGRlcnNoaW5zIChjb3VudGVyLWNsb2Nrd2lzZSkgZGlyZWN0aW9uLAogICAgICAgICAgICAgICAgZS5nLiAgWzEsIDIsIDMsIDQsIDUsIDZdCgogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIE51dDogQ2xhc3Mgd2l0aCBlZGdlcyBpbmZlcnJlZCBmcm9tIGxpc3Qgb2YgbnVtYmVycy4KCiAgICAgICAgPj4+IG51dF9hID0gTnV0KFsxLCAyLCAzLCA0LCA1LCA2XSwgJ2EnKQogICAgICAgID4+PiBudXRfYS5lZGdlc19saXN0CiAgICAgICAgWygxLCAyKSwgKDIsIDMpLCAoMywgNCksICg0LCA1KSwgKDUsIDYpLCAoNiwgMSldCiAgICAgICAgPj4+ICgxLCAyKSBpbiBudXRfYS5lZGdlc19zZXQKICAgICAgICBUcnVlCiAgICAgICAgPj4+ICgxLCAzKSBpbiBudXRfYS5lZGdlc19zZXQKICAgICAgICBGYWxzZQoKICAgICAgICAiIiIKICAgICAgICBzZWxmLm51bWJlcnMgPSB0dXBsZShudW1iZXJzKQogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICBlZGdlcyA9IFtdCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKG51bWJlcnMpIC0gMSk6CiAgICAgICAgICAgIGVkZ2VzLmFwcGVuZCgobnVtYmVyc1tpXSwgbnVtYmVyc1tpICsgMV0pKQogICAgICAgIGVkZ2VzLmFwcGVuZCgobnVtYmVyc1stMV0sIG51bWJlcnNbMF0pKQogICAgICAgIHNlbGYuZWRnZXNfbGlzdCA9IGVkZ2VzCiAgICAgICAgc2VsZi5lZGdlc19zZXQgPSBmcm96ZW5zZXQoZWRnZXMpCgogICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGl0ZW0pOgogICAgICAgIGlmIGl0ZW0gPj0gbGVuKHNlbGYubnVtYmVycyk6CiAgICAgICAgICAgIG9sZF9pdGVtID0gaXRlbQogICAgICAgICAgICBpdGVtID0gb2xkX2l0ZW0gJSBsZW4oc2VsZi5udW1iZXJzKQogICAgICAgICAgICAjIHByaW50KGYnPj4gV2FybmluZzogY29udmVydGluZyBsb29rdXAgaW5kZXgge29sZF9pdGVtfSB0byB7aXRlbX0nKQogICAgICAgIHJldHVybiBzZWxmLm51bWJlcnNbaXRlbV0KCiAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKICAgICAgICByZXR1cm4gc2VsZi5uYW1lID4gb3RoZXIubmFtZQoKICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgogICAgICAgIHJldHVybiBzZWxmLm5hbWUgPCBvdGhlci5uYW1lCgogICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLm5hbWUKCgpkZWYgZ2V0X29wZW5fZWRnZXMobnV0XzEsIGluZGV4XzEsIG51dF8yLCBpbmRleF8yKToKICAgICIiIlN1cHBvc2UgdGhhdCBudXRfMSBhbmQgbnV0XzIgbWF0Y2ggdXAgYXQgaW5kZXhfMSBhbmQgaW5kZXhfMjogcmV0dXJuIG9wZW4gZWRnZXMgb24gbGVmdCBhbmQgcmlnaHQuCgogICAgQXJnczoKICAgICAgICBudXRfMTogTnV0CiAgICAgICAgaW5kZXhfMTogaW50CiAgICAgICAgbnV0XzI6IE51dAogICAgICAgIGluZGV4XzI6IGludAoKICAgIFJldHVybnM6CiAgICAgICAgdHVwbGUodHVwbGUoaW50LCBpbnQpLCB0dXBsZShpbnQsIGludCkpIExlZnQgZWRnZSwgUmlnaHQgZWRnZS4KCiAgICA+Pj4gYSA9IE51dChbMSwgMiwgMywgNCwgNSwgNl0sICdhJykKICAgID4+PiBiID0gTnV0KFsxLCAyLCA1LCA2LCAzLCA0XSwgJ2InKQogICAgPj4+IGMgPSBOdXQoWzEsIDMsIDUsIDIsIDQsIDZdLCAnYycpCgogICAgPj4+IGdldF9vcGVuX2VkZ2VzKGEsIDAsIGIsIDApCiAgICAoKDIsIDYpLCAoMiwgNCkpCgogICAgPj4+IGdldF9vcGVuX2VkZ2VzKGEsIDAsIGMsIDApCiAgICAoKDMsIDYpLCAoMiwgNikpCgogICAgPj4+IGdldF9vcGVuX2VkZ2VzKGEsIDEsIGMsIDMpCiAgICAoKDQsIDEpLCAoMywgNSkpCgogICAgIiIiCiAgICB2YWxfMSA9IG51dF8xW2luZGV4XzFdCiAgICB2YWxfMiA9IG51dF8yW2luZGV4XzJdCiAgICBpZiB2YWxfMSAhPSB2YWxfMjoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICBmIlBpZWNlcyBkbyBub3QgbWF0Y2gge251dF8xfVt7aW5kZXhfMX1dLCB7bnV0XzJ9W3tpbmRleF8yfV0iKQoKICAgIGxlZnRfZWRnZSA9IChudXRfMltpbmRleF8yICsgMV0sIG51dF8xW2luZGV4XzEgLSAxXSkKICAgIHJpZ2h0X2VkZ2UgPSAobnV0XzFbaW5kZXhfMSArIDFdLCBudXRfMltpbmRleF8yIC0gMV0pCgogICAgcmV0dXJuIGxlZnRfZWRnZSwgcmlnaHRfZWRnZQoKCmRlZiB0cnlfY2VudGVyKGNlbnRlcl9udXQsIGFsbF9udXRzLCB2ZXJib3NlPVRydWUpOgogICAgIiIiUGFydGlhbCBzb2x1dGlvbiBmaW5kZXIsIHRvIG5hcnJvdyBkb3duIHRvIHBvc3NpYmxlIGNlbnRlciBjZW50ZXIgYW5kIHNlY29uZCBudXRzLgoKICAgIEFyZ3M6CiAgICAgICAgY2VudGVyX251dDogTnV0CiAgICAgICAgYWxsX251dHM6IGxpc3QoTnV0KQogICAgICAgIHZlcmJvc2U6IFByaW50IGVhY2ggb3B0aW9uIHRyaWVkLgoKICAgIFJldHVybnM6CiAgICAgICAgbGlzdChOdXQsIE51dCwgbGlzdChOdXQpLCBsaXN0KE51dCk6IExpc3Qgb2YgdmFsaWQgY29tYmluYXRpb25zIG9mCiAgICAgICAgICAgIENlbnRlciBwaWVjZSwgU2Vjb25kIHBpZWNlLCBwb3NzaWJsZSBMZWZ0IGVkZ2VzLCBwb3NzaWJsZSBSaWdodCBlZGdlcy4KCiAgICA+Pj4gYSA9IE51dChbMSwgMiwgMywgNCwgNSwgNl0sICdhJykKICAgID4+PiBiID0gTnV0KFsxLCAyLCA1LCA2LCAzLCA0XSwgJ2InKQogICAgPj4+IGMgPSBOdXQoWzEsIDMsIDUsIDIsIDQsIDZdLCAnYycpCiAgICA+Pj4gZCA9IE51dChbMSwgMywgNSwgNCwgMiwgNl0sICdkJykKICAgID4+PiBlID0gTnV0KFsxLCA0LCAyLCAzLCA1LCA2XSwgJ2UnKQogICAgPj4+IGYgPSBOdXQoWzEsIDUsIDMsIDIsIDYsIDRdLCAnZicpCiAgICA+Pj4gZyA9IE51dChbMSwgNiwgNSwgNCwgMywgMl0sICdnJykKICAgID4+PiBhbGxfbnV0c19saXN0ID0gW2EsIGIsIGMsIGQsIGUsIGYsIGddCiAgICA+Pj4gdHJ5X2NlbnRlcihhLCBhbGxfbnV0c19saXN0LCB2ZXJib3NlPUZhbHNlKQogICAgWyhhLCBiLCBbZCwgZl0sIFtjXSksIChhLCBlLCBbY10sIFtkLCBmXSksIChhLCBmLCBbYiwgZV0sIFtjXSldCgoKICAgICIiIgogICAgcG9zc2libGVfcGFpcnMgPSBbXQoKICAgICMgQ2hlY2sgZm9yIHNlY29uZCBudXQgdmFsaWRpdHkKICAgIGZvciBuIGluIGFsbF9udXRzOgogICAgICAgIGlmIG4gPT0gY2VudGVyX251dDoKICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgIyBNYXRjaCB1cCBvbiB0aGUgJzEncwogICAgICAgIGxlZnRfZWRnZSwgcmlnaHRfZWRnZSA9IGdldF9vcGVuX2VkZ2VzKAogICAgICAgICAgICBjZW50ZXJfbnV0LCAwLCBuLCAwKQoKICAgICAgICBhdmFpbGFibGVfbnV0cyA9IHNvcnRlZChzZXQoYWxsX251dHMpIC0ge2NlbnRlcl9udXQsIG59KQoKICAgICAgICBsZWZ0X29wdGlvbnMgPSBbXQogICAgICAgIHJpZ2h0X29wdGlvbnMgPSBbXQo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgIHJpZ2h0X29wdGlvbnMuYXBwZW5kKG0pCgogICAgICAgIGxlZnRfcG9zc2libGUgPSBib29sKGxlZnRfb3B0aW9ucykKICAgICAgICByaWdodF9wb3NzaWJsZSA9IGJvb2wocmlnaHRfb3B0aW9ucykKICAgICAgICBvdmVyYWxsX3Bvc3NpYmxlID0gbGVmdF9wb3NzaWJsZSBhbmQgcmlnaHRfcG9zc2libGUKCiAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgcHJpbnQoZid7Y2VudGVyX251dD19LCBOZXh0IHtuLm5hbWV9JykKICAgICAgICAgICAgcHJpbnQoZid7bGVmdF9lZGdlPX0sIHtyaWdodF9lZGdlPX0nKQogICAgICAgICAgICBwcmludChmJ3tsZWZ0X3Bvc3NpYmxlPX0sIHtyaWdodF9wb3NzaWJsZT19JykKICAgICAgICAgICAgcHJpbnQoZidPdmVyYWxsIHBvc3NpYmxlOiB7bGVmdF9wb3NzaWJsZSBhbmQgcmlnaHRfcG9zc2libGV9JykKICAgICAgICAgICAgcHJpbnQoJycpCiAgICAgICAgaWYgb3ZlcmFsbF9wb3NzaWJsZToKICAgICAgICAgICAgcG9zc2libGVfcGFpcnMuYXBwZW5kKChjZW50ZXJfbnV0LCBuLCBsZWZ0X29wdGlvbnMsIHJpZ2h0X29wdGlvbnMpKQoKICAgIHJldHVybiBwb3NzaWJsZV9wYWlycwoKCmRlZiB0cmFjZV9wYXRoKGNlbnRlcl9udXQsIHNlY29uZF9udXQsIGNlbnRlcl9pbmRleCwgYXZhaWxhYmxlX251dHMsIHN0YWNrPVtdLCB2ZXJib3NlPVRydWUpOgogICAgIiIiRnVsbCBzb2x1dGlvbiBmaW5kZXIuCgogICAgQXJnczoKICAgICAgICBjZW50ZXJfbnV0OiBOdXQKICAgICAgICBzZWNvbmRfbnV0OiBOdXQKICAgICAgICBjZW50ZXJfaW5kZXg6IGludAogICAgICAgIGF2YWlsYWJsZV9udXRzOiBzZXQoTnV0KQogICAgICAgIHN0YWNrOiBsaXN0KE51dCkgcHJldmlvdXMgbnV0cyB1c2VkIGluIHNlcXVlbmNlIHRodXMgZmFyLgogICAgICAgIHZlcmJvc2U6IChib29sKSBNb3JlIHByaW50cy4KCiAgICBSZXR1cm5zOgogICAgICAgIGJvb2w6IFRydWUgaWYgc29sdXRpb24gZm91bmQsIGVsc2UgRmFsc2UuCiAgICAgICAgbGlzdChOdXQpOiBTb2x1dGlvbiBzZXF1ZW5jZSBpZiBmb3VuZCwgZWxzZSBlbXB0eSBsaXN0LgoKICAgICIiIgogICAgIyBSZWFjaGVkIGVuZCBvZiBwYXRoOyBzdWNjZXNzIQogICAgaWYgbm90IGF2YWlsYWJsZV9udXRzOgogICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgIHByaW50KCcnKQogICAgICAgICAgICBwcmludCgnKioqIFJlYWNoZWQgZW5kIHdpdGggc3VjY2VzcyEhISEgKioqJykKICAgICAgICAgICAgcHJpbnQoc3RhY2spCiAgICAgICAgICAgIHByaW50KCcnKQogICAgICAgIHJldHVybiBUcnVlLCBzdGFjawoKICAgIGNlbnRlcl92YWx1ZSA9IGNlbnRlcl9udXRbY2VudGVyX2luZGV4XQogICAgc2Vjb25kX2luZGV4ID0gc2Vjb25kX251dC5udW1iZXJzLmluZGV4KGNlbnRlcl92YWx1ZSkKCiAgICBpZiB2ZXJib3NlOgogICAgICAgIHByaW50KCcnKQogICAgICAgIHByaW50KGYne3N0YWNrPX0nKQogICAgICAgIHByaW50KGYne2NlbnRlcl9udXQ9fSwge3NlY29uZF9udXQ9fS4nKQogICAgICAgIHByaW50KGYne2NlbnRlcl9pbmRleD19LCB7Y2VudGVyX3ZhbHVlPX0sIHtzZWNvbmRfaW5kZXg9fScpCiAgICAgICAgcHJpbnQoZid7YXZhaWxhYmxlX251dHM9fScpCgogICAgbGVmdF9lZGdlLCByaWdodF9lZGdlID0gZ2V0X29wZW5fZWRnZXMoCiAgICAgICAgY2VudGVyX251dCwgY2VudGVyX2luZGV4LCBzZWNvbmRfbnV0LCBzZWNvbmRfaW5kZXgpCgogICAgZm9yIHJpZ2h0X251dCBpbiBhdmFpbGFibGVfbnV0czoKICAgICAgICBpZiByaWdodF9lZGdlIGluIHJpZ2h0X251dC5lZGdlc19zZXQ6CiAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICBwcmludChmJ3tyaWdodF9lZGdlPX0gZm91bmQgZm9yIE51dCB7cmlnaHRfbnV0PX0uJykKICAgICAgICAgICAgICAgIHByaW50KGYnUmVjdXJzaW9uIScpCiAgICAgICAgICAgICMgU29ydGluZyBhZGRzIHJ1bm5pbmcgdGltZSwgYnV0IGVuc3VyZXMgZGV0ZXJtaW5pc3RpYyBvcmRlciBvZiBleHBsb3JhdGlvbi4KICAgICAgICAgICAgbmV3X2F2YWlsYWJsZV9udXRzID0gc29ydGVkKHNldChhdmFpbGFibGVfbnV0cykgLSB7cmlnaHRfbnV0fSkKICAgICAgICAgICAgc3RhY2sgPSBzdGFjayArIFtyaWdodF9udXRdCiAgICAgICAgICAgICMgUmVjdXJzaW9uIQogICAgICAgICAgICByZXR1cm4gdHJhY2VfcGF0aChjZW50ZXJfbnV0LCByaWdodF9udXQsIGNlbnRlcl9pbmRleCArIDEsIG5ld19hdmFpbGFibGVfbnV0cywgc3RhY2s9c3RhY2ssIHZlcmJvc2U9dmVyYm9zZSkKCiAgICBpZiB2ZXJib3NlOgogICAgICAgIHByaW50KGYnTm8gYXZhaWxhYmxlIG51dCBmb3Ige3JpZ2h0X2VkZ2U9fTsgTm8gc29sdXRpb24gZm91bmQgZm9yIHN0YWNrIScpCiAgICByZXR1cm4gRmFsc2UsIHN0YWNrCgoKZGVmIHByaW50X3BhcnRpYWxfc29sdXRpb25zKG51dHNfbGlzdCwgdmVyYm9zZT1GYWxzZSk6CiAgICAiIiJQcmludCBvbmx5IHBvc3NpYmxlIHN0YXJ0aW5nIHBhaXJzLgoKICAgIEFyZ3M6CiAgICAgICAgbnV0c19saXN0OiAobGlzdChOdXQpKSBsaXN0IG9mIE51dHMgaW4gdGhlIHB1enpsZS4KICAgICAgICB2ZXJib3NlOiAoYm9vbCkgTW9yZSBwcmludHMuCgogICAgIiIiCiAgICBwb3NzaWJsZV9zdGFydGluZ19wYWlycyA9IFtdCgogICAgZm9yIGNuIGluIG51dHNfbGlzdDoKICAgICAgICBwb3NzaWJsZV9zdGFydGluZ19wYWlycy5leHRlbmQodHJ5X2NlbnRlcihjbiwgbnV0c19saXN0LCB2ZXJib3NlPXZlcmJvc2UpKQoKICAgIHByaW50KCcnKQogICAgcHJpbnQoZidGb3VuZCB7bGVuKHBvc3NpYmxlX3N0YXJ0aW5nX3BhaXJzKX0gcG9zc2libGUgc3RhcnRpbmcgcGFpcnMuJykKICAgIHByaW50KCdQb3NzaWJsZSBzdGFydGluZyBwYXJpczonKQogICAgZm9yIHBhaXIgaW4gcG9zc2libGVfc3RhcnRpbmdfcGFpcnM6CiAgICAgICAgcHJpbnQoZidcdFBhaXI6ICh7cGFpclswXS5uYW1lfSwge3BhaXJbMV0ubmFtZX0pLCBMZWZ0OiB7cGFpclsyXX0sIFJpZ2h0OiB7cGFpclszXX0nKQoKCmRlZiBwcmludF9mdWxsX3NvbHV0aW9ucyhudXRzX2xpc3QsIHZlcmJvc2U9RmFsc2UpOgogICAgIiIiUHJpbnQgZnVsbCBzb2x1dGlvbnMuCgogICAgQXJnczoKICAgICAgICBudXRzX2xpc3Q6IChsaXN0KE51dCkpIGxpc3Qgb2YgTnV0cyBpbiB0aGUgcHV6emxlLgogICAgICAgIHZlcmJvc2U6IChib29sKSBNb3JlIHByaW50cy4KCiAgICAiIiIKICAgIHNvbHV0aW9ucyA9IFtdCiAgICBmb3IgY24gaW4gbnV0c19saXN0OgogICAgICAgIGZvciBzbiBpbiBzb3J0ZWQoc2V0KG51dHNfbGlzdCkgLSB7Y259KToKICAgICAgICAgICAgc3RhcnRpbmdfc3RhY2sgPSBbY24sIHNuXQogICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgcHJpbnQoJycpCiAgICAgICAgICAgICAgICBwcmludChmJ1RyeWluZyB7c3RhcnRpbmdfc3RhY2s9fScpCiAgICAgICAgICAgIGF2YWlsYWJsZSA9IHNvcnRlZChzZXQobnV0c19saXN0KSAtIHtjbiwgc259KQogICAgICAgICAgICBmb3VuZCwgc2VxdWVuY2UgPSB0cmFjZV9wYXRoKGNuLCBzbiwgMCwgYXZhaWxhYmxlLCBzdGFjaz1zdGFydGluZ19zdGFjaywgdmVyYm9zZT12ZXJib3NlKQogICAgICAgICAgICBpZiBmb3VuZDoKICAgICAgICAgICAgICAgIHNvbHV0aW9ucy5hcHBlbmQoc2VxdWVuY2UpCgogICAgcHJpbnQoJycpCiAgICBwcmludCgnRmluYWwgc29sdXRpb25zIGZvdW5kOicpCiAgICBmb3IgcyBpbiBzb2x1dGlvbnM6CiAgICAgICAgcHJpbnQoZidcdHtzfScpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGFyZ3VtZW50X3BhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgIHBhcnNlciA9IGFyZ3VtZW50X3BhcnNlcgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLXAiLCAiLS1wYXJ0aWFsIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iT25seSBwcmludCBwYXJ0aWFsIHNvbHV0aW9uIChwb3NzaWJsZSBzdGFydGluZyBwYWlycykiKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXYiLCAiLS12ZXJib3NlIiwgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0iUHJpbnQgdmVyYm9zZSBkZWJ1ZyBtZXNzYWdlcyIpCiAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogICAgbWFpbihwYXJ0aWFsPWFyZ3MucGFydGlhbCwgdmVyYm9zZT1hcmdzLnZlcmJvc2UpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZm9yIG0gaW4gYXZhaWxhYmxlX251dHM6CiAgICAgICAgICAgIGlmIGxlZnRfZWRnZSBpbiBtLmVkZ2VzX3NldDoKICAgICAgICAgICAgICAgIGxlZnRfb3B0aW9ucy5hcHBlbmQobSkKICAgICAgICAgICAgaWYgcmlnaHRfZWRnZSBpbiBtLmVkZ2VzX3NldDoKPHxmaW1fZW5kfD4="]
["c120593b859125fd6bb14d020e8fbbf73c9a7c58-4","c120593b859125fd6bb14d020e8fbbf73c9a7c58","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiIiIlNvbHZlIHRoZSBwdXp6bGUgZ2FtZSAiRHJpdmUgWWEgTnV0cyIKICAgIGh0dHBzOi8vd3d3LmFtYXpvbi5jb20vVmludGFnZS1NaWx0b24tQnJhZGxleS1Ecml2ZS1QdXp6bGUvZHAvQjAwSTg0SEw3MC8KIiIiCiMgQXNzdW1lcyBweXRob24gMy44LjArCiMgU09MVVRJT046IFtkLCBmLCBhLCBjLCBnLCBiLCBlXQppbXBvcnQgYXJncGFyc2UKCgpkZWYgbWFpbihwYXJ0aWFsPUZhbHNlLCB2ZXJib3NlPUZhbHNlKToKICAgICIiIkZpbmQgdGhlIHNvbHV0aW9uKHMpIGFuZCBwcmludCB0byBzdGRvdXQuCgogICAgQXJnczoKICAgICAgICBwYXJ0aWFsOiAoYm9vbCkgT25seSBmaW5kIHBhcnRpYWwgc29sdXRpb24gKHN0YXJ0aW5nIHBhaXJzKS4KICAgICAgICB2ZXJib3NlOiAoYm9vbCkgTW9yZSBwcmludHMuCgogICAgIiIiCiAgICAjIFNvcnRlZCBsZXhpY29ncmFwaGljYWxseQogICAgYSA9IE51dChbMSwgMiwgMywgNCwgNSwgNl0sICdhJykKICAgIGIgPSBOdXQoWzEsIDIsIDUsIDYsIDMsIDRdLCAnYicpCiAgICBjID0gTnV0KFsxLCAzLCA1LCAyLCA0LCA2XSwgJ2MnKQogICAgZCA9IE51dChbMSwgMywgNSwgNCwgMiwgNl0sICdkJykKICAgIGUgPSBOdXQoWzEsIDQsIDIsIDMsIDUsIDZdLCAnZScpCiAgICBmID0gTnV0KFsxLCA1LCAzLCAyLCA2LCA0XSwgJ2YnKQogICAgZyA9IE51dChbMSwgNiwgNSwgNCwgMywgMl0sICdnJykKCiAgICBhbGxfbnV0c19saXN0ID0gW2EsIGIsIGMsIGQsIGUsIGYsIGddCgogICAgaWYgcGFydGlhbDoKICAgICAgICBwcmludF9wYXJ0aWFsX3NvbHV0aW9ucyhhbGxfbnV0c19saXN0LCB2ZXJib3NlKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBlbHNlOgogICAgICAgIHByaW50X2Z1bGxfc29sdXRpb25zKGFsbF9udXRzX2xpc3QsIHZlcmJvc2UpCgoKPHxmaW1fZW5kfD4="]
["c120593b859125fd6bb14d020e8fbbf73c9a7c58-5","c120593b859125fd6bb14d020e8fbbf73c9a7c58","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiIiIlNvbHZlIHRoZSBwdXp6bGUgZ2FtZSAiRHJpdmUgWWEgTnV0cyIKICAgIGh0dHBzOi8vd3d3LmFtYXpvbi5jb20vVmludGFnZS1NaWx0b24tQnJhZGxleS1Ecml2ZS1QdXp6bGUvZHAvQjAwSTg0SEw3MC8KIiIiCiMgQXNzdW1lcyBweXRob24gMy44LjArCiMgU09MVVRJT046IFtkLCBmLCBhLCBjLCBnLCBiLCBlXQppbXBvcnQgYXJncGFyc2UKCgpkZWYgbWFpbihwYXJ0aWFsPUZhbHNlLCB2ZXJib3NlPUZhbHNlKToKICAgICIiIkZpbmQgdGhlIHNvbHV0aW9uKHMpIGFuZCBwcmludCB0byBzdGRvdXQuCgogICAgQXJnczoKICAgICAgICBwYXJ0aWFsOiAoYm9vbCkgT25seSBmaW5kIHBhcnRpYWwgc29sdXRpb24gKHN0YXJ0aW5nIHBhaXJzKS4KPHxmaW1faG9sZXw+CiAgICAiIiIKICAgICMgU29ydGVkIGxleGljb2dyYXBoaWNhbGx5CiAgICBhID0gTnV0KFsxLCAyLCAzLCA0LCA1LCA2XSwgJ2EnKQogICAgYiA9IE51dChbMSwgMiwgNSwgNiwgMywgNF0sICdiJykKICAgIGMgPSBOdXQoWzEsIDMsIDUsIDIsIDQsIDZdLCAnYycpCiAgICBkID0gTnV0KFsxLCAzLCA1LCA0LCAyLCA2XSwgJ2QnKQogICAgZSA9IE51dChbMSwgNCwgMiwgMywgNSwgNl0sICdlJykKICAgIGYgPSBOdXQoWzEsIDUsIDMsIDIsIDYsIDRdLCAnZicpCiAgICBnID0gTnV0KFsxLCA2LCA1LCA0LCAzLCAyXSwgJ2cnKQoKICAgIGFsbF9udXRzX2xpc3QgPSBbYSwgYiwgYywgZCwgZSwgZiwgZ10KCiAgICBpZiBwYXJ0aWFsOgogICAgICAgIHByaW50X3BhcnRpYWxfc29sdXRpb25zKGFsbF9udXRzX2xpc3QsIHZlcmJvc2UpCiAgICBlbHNlOgogICAgICAgIHByaW50X2Z1bGxfc29sdXRpb25zKGFsbF9udXRzX2xpc3QsIHZlcmJvc2UpCgoKY2xhc3MgTnV0OgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG51bWJlcnMsIG5hbWUpOgogICAgICAgICIiIldyYXBwZXIgZm9yIE51dCBvYmplY3QuCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIG51bWJlcnM6IGxpc3QoaW50KSBOdW1iZXJzIG9uIHRoZSBOdXQgaW4gd2lkZGVyc2hpbnMgKGNvdW50ZXItY2xvY2t3aXNlKSBkaXJlY3Rpb24sCiAgICAgICAgICAgICAgICBlLmcuICBbMSwgMiwgMywgNCwgNSwgNl0KCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgTnV0OiBDbGFzcyB3aXRoIGVkZ2VzIGluZmVycmVkIGZyb20gbGlzdCBvZiBudW1iZXJzLgoKICAgICAgICA+Pj4gbnV0X2EgPSBOdXQoWzEsIDIsIDMsIDQsIDUsIDZdLCAnYScpCiAgICAgICAgPj4+IG51dF9hLmVkZ2VzX2xpc3QKICAgICAgICBbKDEsIDIpLCAoMiwgMyksICgzLCA0KSwgKDQsIDUpLCAoNSwgNiksICg2LCAxKV0KICAgICAgICA+Pj4gKDEsIDIpIGluIG51dF9hLmVkZ2VzX3NldAogICAgICAgIFRydWUKICAgICAgICA+Pj4gKDEsIDMpIGluIG51dF9hLmVkZ2VzX3NldAogICAgICAgIEZhbHNlCgogICAgICAgICIiIgogICAgICAgIHNlbGYubnVtYmVycyA9IHR1cGxlKG51bWJlcnMpCiAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgIGVkZ2VzID0gW10KICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4obnVtYmVycykgLSAxKToKICAgICAgICAgICAgZWRnZXMuYXBwZW5kKChudW1iZXJzW2ldLCBudW1iZXJzW2kgKyAxXSkpCiAgICAgICAgZWRnZXMuYXBwZW5kKChudW1iZXJzWy0xXSwgbnVtYmVyc1swXSkpCiAgICAgICAgc2VsZi5lZGdlc19saXN0ID0gZWRnZXMKICAgICAgICBzZWxmLmVkZ2VzX3NldCA9IGZyb3plbnNldChlZGdlcykKCiAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaXRlbSk6CiAgICAgICAgaWYgaXRlbSA+PSBsZW4oc2VsZi5udW1iZXJzKToKICAgICAgICAgICAgb2xkX2l0ZW0gPSBpdGVtCiAgICAgICAgICAgIGl0ZW0gPSBvbGRfaXRlbSAlIGxlbihzZWxmLm51bWJlcnMpCiAgICAgICAgICAgICMgcHJpbnQoZic+PiBXYXJuaW5nOiBjb252ZXJ0aW5nIGxvb2t1cCBpbmRleCB7b2xkX2l0ZW19IHRvIHtpdGVtfScpCiAgICAgICAgcmV0dXJuIHNlbGYubnVtYmVyc1tpdGVtXQoKICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgogICAgICAgIHJldHVybiBzZWxmLm5hbWUgPiBvdGhlci5uYW1lCgogICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgcmV0dXJuIHNlbGYubmFtZSA8IG90aGVyLm5hbWUKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYubmFtZQoKCmRlZiBnZXRfb3Blbl9lZGdlcyhudXRfMSwgaW5kZXhfMSwgbnV0XzIsIGluZGV4XzIpOgogICAgIiIiU3VwcG9zZSB0aGF0IG51dF8xIGFuZCBudXRfMiBtYXRjaCB1cCBhdCBpbmRleF8xIGFuZCBpbmRleF8yOiByZXR1cm4gb3BlbiBlZGdlcyBvbiBsZWZ0IGFuZCByaWdodC4KCiAgICBBcmdzOgogICAgICAgIG51dF8xOiBOdXQKICAgICAgICBpbmRleF8xOiBpbnQKICAgICAgICBudXRfMjogTnV0CiAgICAgICAgaW5kZXhfMjogaW50CgogICAgUmV0dXJuczoKICAgICAgICB0dXBsZSh0dXBsZShpbnQsIGludCksIHR1cGxlKGludCwgaW50KSkgTGVmdCBlZGdlLCBSaWdodCBlZGdlLgoKICAgID4+PiBhID0gTnV0KFsxLCAyLCAzLCA0LCA1LCA2XSwgJ2EnKQogICAgPj4+IGIgPSBOdXQoWzEsIDIsIDUsIDYsIDMsIDRdLCAnYicpCiAgICA+Pj4gYyA9IE51dChbMSwgMywgNSwgMiwgNCwgNl0sICdjJykKCiAgICA+Pj4gZ2V0X29wZW5fZWRnZXMoYSwgMCwgYiwgMCkKICAgICgoMiwgNiksICgyLCA0KSkKCiAgICA+Pj4gZ2V0X29wZW5fZWRnZXMoYSwgMCwgYywgMCkKICAgICgoMywgNiksICgyLCA2KSkKCiAgICA+Pj4gZ2V0X29wZW5fZWRnZXMoYSwgMSwgYywgMykKICAgICgoNCwgMSksICgzLCA1KSkKCiAgICAiIiIKICAgIHZhbF8xID0gbnV0XzFbaW5kZXhfMV0KICAgIHZhbF8yID0gbnV0XzJbaW5kZXhfMl0KICAgIGlmIHZhbF8xICE9IHZhbF8yOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgIGYiUGllY2VzIGRvIG5vdCBtYXRjaCB7bnV0XzF9W3tpbmRleF8xfV0sIHtudXRfMn1be2luZGV4XzJ9XSIpCgogICAgbGVmdF9lZGdlID0gKG51dF8yW2luZGV4XzIgKyAxXSwgbnV0XzFbaW5kZXhfMSAtIDFdKQogICAgcmlnaHRfZWRnZSA9IChudXRfMVtpbmRleF8xICsgMV0sIG51dF8yW2luZGV4XzIgLSAxXSkKCiAgICByZXR1cm4gbGVmdF9lZGdlLCByaWdodF9lZGdlCgoKZGVmIHRyeV9jZW50ZXIoY2VudGVyX251dCwgYWxsX251dHMsIHZlcmJvc2U9VHJ1ZSk6CiAgICAiIiJQYXJ0aWFsIHNvbHV0aW9uIGZpbmRlciwgdG8gbmFycm93IGRvd24gdG8gcG9zc2libGUgY2VudGVyIGNlbnRlciBhbmQgc2Vjb25kIG51dHMuCgogICAgQXJnczoKICAgICAgICBjZW50ZXJfbnV0OiBOdXQKICAgICAgICBhbGxfbnV0czogbGlzdChOdXQpCiAgICAgICAgdmVyYm9zZTogUHJpbnQgZWFjaCBvcHRpb24gdHJpZWQuCgogICAgUmV0dXJuczoKICAgICAgICBsaXN0KE51dCwgTnV0LCBsaXN0KE51dCksIGxpc3QoTnV0KTogTGlzdCBvZiB2YWxpZCBjb21iaW5hdGlvbnMgb2YKICAgICAgICAgICAgQ2VudGVyIHBpZWNlLCBTZWNvbmQgcGllY2UsIHBvc3NpYmxlIExlZnQgZWRnZXMsIHBvc3NpYmxlIFJpZ2h0IGVkZ2VzLgoKICAgID4+PiBhID0gTnV0KFsxLCAyLCAzLCA0LCA1LCA2XSwgJ2EnKQogICAgPj4+IGIgPSBOdXQoWzEsIDIsIDUsIDYsIDMsIDRdLCAnYicpCiAgICA+Pj4gYyA9IE51dChbMSwgMywgNSwgMiwgNCwgNl0sICdjJykKICAgID4+PiBkID0gTnV0KFsxLCAzLCA1LCA0LCAyLCA2XSwgJ2QnKQogICAgPj4+IGUgPSBOdXQoWzEsIDQsIDIsIDMsIDUsIDZdLCAnZScpCiAgICA+Pj4gZiA9IE51dChbMSwgNSwgMywgMiwgNiwgNF0sICdmJykKICAgID4+PiBnID0gTnV0KFsxLCA2LCA1LCA0LCAzLCAyXSwgJ2cnKQogICAgPj4+IGFsbF9udXRzX2xpc3QgPSBbYSwgYiwgYywgZCwgZSwgZiwgZ10KICAgID4+PiB0cnlfY2VudGVyKGEsIGFsbF9udXRzX2xpc3QsIHZlcmJvc2U9RmFsc2UpCiAgICBbKGEsIGIsIFtkLCBmXSwgW2NdKSwgKGEsIGUsIFtjXSwgW2QsIGZdKSwgKGEsIGYsIFtiLCBlXSwgW2NdKV0KCgogICAgIiIiCiAgICBwb3NzaWJsZV9wYWlycyA9IFtdCgogICAgIyBDaGVjayBmb3Igc2Vjb25kIG51dCB2YWxpZGl0eQogICAgZm9yIG4gaW4gYWxsX251dHM6CiAgICAgICAgaWYgbiA9PSBjZW50ZXJfbnV0OgogICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAjIE1hdGNoIHVwIG9uIHRoZSAnMSdzCiAgICAgICAgbGVmdF9lZGdlLCByaWdodF9lZGdlID0gZ2V0X29wZW5fZWRnZXMoCiAgICAgICAgICAgIGNlbnRlcl9udXQsIDAsIG4sIDApCgogICAgICAgIGF2YWlsYWJsZV9udXRzID0gc29ydGVkKHNldChhbGxfbnV0cykgLSB7Y2VudGVyX251dCwgbn0pCgogICAgICAgIGxlZnRfb3B0aW9ucyA9IFtdCiAgICAgICAgcmlnaHRfb3B0aW9ucyA9IFtdCiAgICAgICAgZm9yIG0gaW4gYXZhaWxhYmxlX251dHM6CiAgICAgICAgICAgIGlmIGxlZnRfZWRnZSBpbiBtLmVkZ2VzX3NldDoKICAgICAgICAgICAgICAgIGxlZnRfb3B0aW9ucy5hcHBlbmQobSkKICAgICAgICAgICAgaWYgcmlnaHRfZWRnZSBpbiBtLmVkZ2VzX3NldDoKICAgICAgICAgICAgICAgIHJpZ2h0X29wdGlvbnMuYXBwZW5kKG0pCgogICAgICAgIGxlZnRfcG9zc2libGUgPSBib29sKGxlZnRfb3B0aW9ucykKICAgICAgICByaWdodF9wb3NzaWJsZSA9IGJvb2wocmlnaHRfb3B0aW9ucykKICAgICAgICBvdmVyYWxsX3Bvc3NpYmxlID0gbGVmdF9wb3NzaWJsZSBhbmQgcmlnaHRfcG9zc2libGUKCiAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgcHJpbnQoZid7Y2VudGVyX251dD19LCBOZXh0IHtuLm5hbWV9JykKICAgICAgICAgICAgcHJpbnQoZid7bGVmdF9lZGdlPX0sIHtyaWdodF9lZGdlPX0nKQogICAgICAgICAgICBwcmludChmJ3tsZWZ0X3Bvc3NpYmxlPX0sIHtyaWdodF9wb3NzaWJsZT19JykKICAgICAgICAgICAgcHJpbnQoZidPdmVyYWxsIHBvc3NpYmxlOiB7bGVmdF9wb3NzaWJsZSBhbmQgcmlnaHRfcG9zc2libGV9JykKICAgICAgICAgICAgcHJpbnQoJycpCiAgICAgICAgaWYgb3ZlcmFsbF9wb3NzaWJsZToKICAgICAgICAgICAgcG9zc2libGVfcGFpcnMuYXBwZW5kKChjZW50ZXJfbnV0LCBuLCBsZWZ0X29wdGlvbnMsIHJpZ2h0X29wdGlvbnMpKQoKICAgIHJldHVybiBwb3NzaWJsZV9wYWlycwoKCmRlZiB0cmFjZV9wYXRoKGNlbnRlcl9udXQsIHNlY29uZF9udXQsIGNlbnRlcl9pbmRleCwgYXZhaWxhYmxlX251dHMsIHN0YWNrPVtdLCB2ZXJib3NlPVRydWUpOgogICAgIiIiRnVsbCBzb2x1dGlvbiBmaW5kZXIuCgogICAgQXJnczoKICAgICAgICBjZW50ZXJfbnV0OiBOdXQKICAgICAgICBzZWNvbmRfbnV0OiBOdXQKICAgICAgICBjZW50ZXJfaW5kZXg6IGludAogICAgICAgIGF2YWlsYWJsZV9udXRzOiBzZXQoTnV0KQogICAgICAgIHN0YWNrOiBsaXN0KE51dCkgcHJldmlvdXMgbnV0cyB1c2VkIGluIHNlcXVlbmNlIHRodXMgZmFyLgogICAgICAgIHZlcmJvc2U6IChib29sKSBNb3JlIHByaW50cy4KCiAgICBSZXR1cm5zOgogICAgICAgIGJvb2w6IFRydWUgaWYgc29sdXRpb24gZm91bmQsIGVsc2UgRmFsc2UuCiAgICAgICAgbGlzdChOdXQpOiBTb2x1dGlvbiBzZXF1ZW5jZSBpZiBmb3VuZCwgZWxzZSBlbXB0eSBsaXN0LgoKICAgICIiIgogICAgIyBSZWFjaGVkIGVuZCBvZiBwYXRoOyBzdWNjZXNzIQogICAgaWYgbm90IGF2YWlsYWJsZV9udXRzOgogICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgIHByaW50KCcnKQogICAgICAgICAgICBwcmludCgnKioqIFJlYWNoZWQgZW5kIHdpdGggc3VjY2VzcyEhISEgKioqJykKICAgICAgICAgICAgcHJpbnQoc3RhY2spCiAgICAgICAgICAgIHByaW50KCcnKQogICAgICAgIHJldHVybiBUcnVlLCBzdGFjawoKICAgIGNlbnRlcl92YWx1ZSA9IGNlbnRlcl9udXRbY2VudGVyX2luZGV4XQogICAgc2Vjb25kX2luZGV4ID0gc2Vjb25kX251dC5udW1iZXJzLmluZGV4KGNlbnRlcl92YWx1ZSkKCiAgICBpZiB2ZXJib3NlOgogICAgICAgIHByaW50KCcnKQogICAgICAgIHByaW50KGYne3N0YWNrPX0nKQogICAgICAgIHByaW50KGYne2NlbnRlcl9udXQ9fSwge3NlY29uZF9udXQ9fS4nKQogICAgICAgIHByaW50KGYne2NlbnRlcl9pbmRleD19LCB7Y2VudGVyX3ZhbHVlPX0sIHtzZWNvbmRfaW5kZXg9fScpCiAgICAgICAgcHJpbnQoZid7YXZhaWxhYmxlX251dHM9fScpCgogICAgbGVmdF9lZGdlLCByaWdodF9lZGdlID0gZ2V0X29wZW5fZWRnZXMoCiAgICAgICAgY2VudGVyX251dCwgY2VudGVyX2luZGV4LCBzZWNvbmRfbnV0LCBzZWNvbmRfaW5kZXgpCgogICAgZm9yIHJpZ2h0X251dCBpbiBhdmFpbGFibGVfbnV0czoKICAgICAgICBpZiByaWdodF9lZGdlIGluIHJpZ2h0X251dC5lZGdlc19zZXQ6CiAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICBwcmludChmJ3tyaWdodF9lZGdlPX0gZm91bmQgZm9yIE51dCB7cmlnaHRfbnV0PX0uJykKICAgICAgICAgICAgICAgIHByaW50KGYnUmVjdXJzaW9uIScpCiAgICAgICAgICAgICMgU29ydGluZyBhZGRzIHJ1bm5pbmcgdGltZSwgYnV0IGVuc3VyZXMgZGV0ZXJtaW5pc3RpYyBvcmRlciBvZiBleHBsb3JhdGlvbi4KICAgICAgICAgICAgbmV3X2F2YWlsYWJsZV9udXRzID0gc29ydGVkKHNldChhdmFpbGFibGVfbnV0cykgLSB7cmlnaHRfbnV0fSkKICAgICAgICAgICAgc3RhY2sgPSBzdGFjayArIFtyaWdodF9udXRdCiAgICAgICAgICAgICMgUmVjdXJzaW9uIQogICAgICAgICAgICByZXR1cm4gdHJhY2VfcGF0aChjZW50ZXJfbnV0LCByaWdodF9udXQsIGNlbnRlcl9pbmRleCArIDEsIG5ld19hdmFpbGFibGVfbnV0cywgc3RhY2s9c3RhY2ssIHZlcmJvc2U9dmVyYm9zZSkKCiAgICBpZiB2ZXJib3NlOgogICAgICAgIHByaW50KGYnTm8gYXZhaWxhYmxlIG51dCBmb3Ige3JpZ2h0X2VkZ2U9fTsgTm8gc29sdXRpb24gZm91bmQgZm9yIHN0YWNrIScpCiAgICByZXR1cm4gRmFsc2UsIHN0YWNrCgoKZGVmIHByaW50X3BhcnRpYWxfc29sdXRpb25zKG51dHNfbGlzdCwgdmVyYm9zZT1GYWxzZSk6CiAgICAiIiJQcmludCBvbmx5IHBvc3NpYmxlIHN0YXJ0aW5nIHBhaXJzLgoKICAgIEFyZ3M6CiAgICAgICAgbnV0c19saXN0OiAobGlzdChOdXQpKSBsaXN0IG9mIE51dHMgaW4gdGhlIHB1enpsZS4KICAgICAgICB2ZXJib3NlOiAoYm9vbCkgTW9yZSBwcmludHMuCgogICAgIiIiCiAgICBwb3NzaWJsZV9zdGFydGluZ19wYWlycyA9IFtdCgogICAgZm9yIGNuIGluIG51dHNfbGlzdDoKICAgICAgICBwb3NzaWJsZV9zdGFydGluZ19wYWlycy5leHRlbmQodHJ5X2NlbnRlcihjbiwgbnV0c19saXN0LCB2ZXJib3NlPXZlcmJvc2UpKQoKICAgIHByaW50KCcnKQogICAgcHJpbnQoZidGb3VuZCB7bGVuKHBvc3NpYmxlX3N0YXJ0aW5nX3BhaXJzKX0gcG9zc2libGUgc3RhcnRpbmcgcGFpcnMuJykKICAgIHByaW50KCdQb3NzaWJsZSBzdGFydGluZyBwYXJpczonKQogICAgZm9yIHBhaXIgaW4gcG9zc2libGVfc3RhcnRpbmdfcGFpcnM6CiAgICAgICAgcHJpbnQoZidcdFBhaXI6ICh7cGFpclswXS5uYW1lfSwge3BhaXJbMV0ubmFtZX0pLCBMZWZ0OiB7cGFpclsyXX0sIFJpZ2h0OiB7cGFpclszXX0nKQoKCmRlZiBwcmludF9mdWxsX3NvbHV0aW9ucyhudXRzX2xpc3QsIHZlcmJvc2U9RmFsc2UpOgogICAgIiIiUHJpbnQgZnVsbCBzb2x1dGlvbnMuCgogICAgQXJnczoKICAgICAgICBudXRzX2xpc3Q6IChsaXN0KE51dCkpIGxpc3Qgb2YgTnV0cyBpbiB0aGUgcHV6emxlLgogICAgICAgIHZlcmJvc2U6IChib29sKSBNb3JlIHByaW50cy4KCiAgICAiIiIKICAgIHNvbHV0aW9ucyA9IFtdCiAgICBmb3IgY24gaW4gbnV0c19saXN0OgogICAgICAgIGZvciBzbiBpbiBzb3J0ZWQoc2V0KG51dHNfbGlzdCkgLSB7Y259KToKICAgICAgICAgICAgc3RhcnRpbmdfc3RhY2sgPSBbY24sIHNuXQogICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgcHJpbnQoJycpCiAgICAgICAgICAgICAgICBwcmludChmJ1RyeWluZyB7c3RhcnRpbmdfc3RhY2s9fScpCiAgICAgICAgICAgIGF2YWlsYWJsZSA9IHNvcnRlZChzZXQobnV0c19saXN0KSAtIHtjbiwgc259KQogICAgICAgICAgICBmb3VuZCwgc2VxdWVuY2UgPSB0cmFjZV9wYXRoKGNuLCBzbiwgMCwgYXZhaWxhYmxlLCBzdGFjaz1zdGFydGluZ19zdGFjaywgdmVyYm9zZT12ZXJib3NlKQogICAgICAgICAgICBpZiBmb3VuZDoKICAgICAgICAgICAgICAgIHNvbHV0aW9ucy5hcHBlbmQoc2VxdWVuY2UpCgogICAgcHJpbnQoJycpCiAgICBwcmludCgnRmluYWwgc29sdXRpb25zIGZvdW5kOicpCiAgICBmb3IgcyBpbiBzb2x1dGlvbnM6CiAgICAgICAgcHJpbnQoZidcdHtzfScpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGFyZ3VtZW50X3BhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgIHBhcnNlciA9IGFyZ3VtZW50X3BhcnNlcgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLXAiLCAiLS1wYXJ0aWFsIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iT25seSBwcmludCBwYXJ0aWFsIHNvbHV0aW9uIChwb3NzaWJsZSBzdGFydGluZyBwYWlycykiKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXYiLCAiLS12ZXJib3NlIiwgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0iUHJpbnQgdmVyYm9zZSBkZWJ1ZyBtZXNzYWdlcyIpCiAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogICAgbWFpbihwYXJ0aWFsPWFyZ3MucGFydGlhbCwgdmVyYm9zZT1hcmdzLnZlcmJvc2UpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgdmVyYm9zZTogKGJvb2wpIE1vcmUgcHJpbnRzLgoKPHxmaW1fZW5kfD4="]
["8af820052e367fa5582df9afc4c2280f1a0ca29f-1","8af820052e367fa5582df9afc4c2280f1a0ca29f","PHxmaW1fcHJlZml4fD4KZGVmIGV4cHJlc3Npb25zKG51bWJlcnMsIGN1cnJlbnRfcmVzdWx0PTAsIGV4cHJlc3Npb249JycpOgogICAgaWYgbm90IG51bWJlcnM6CiAgICAgICAgcmV0dXJuIFsoZXhwcmVzc2lvbiwgY3VycmVudF9yZXN1bHQpXQoKICAgIHJlc3VsdF9wbHVzID0gZXhwcmVzc2lvbnMoCiAgICAgICAgbnVtYmVyc1sxOl0sCiAgICAgICAgY3VycmVudF9yZXN1bHQgKyBudW1iZXJzWzBdLAogICAgICAgIGYne2V4cHJlc3Npb259K3tudW1iZXJzWzBdfScpCiAgICByZXN1bHRfbWludXMgPSBleHByZXNzaW9ucygKICAgICAgICBudW1iZXJzWzE6XSwKICAgICAgICBjdXJyZW50X3Jlc3VsdCAtIG51bWJlcnNbMF0sCiAgICAgICAgZid7ZXhwcmVzc2lvbn0te251bWJlcnNbMF19JykKICAgIHJldHVybiByZXN1bHRfcGx1cyArIHJlc3VsdF9taW51cwoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKaW5wdXRfbnVtYmVycyA9IFtpbnQoeCkgZm9yIHggaW4gaW5wdXQoKS5zcGxpdCgiLCIpXQpyZXN1bHQgPSBleHByZXNzaW9ucyhpbnB1dF9udW1iZXJzKQpbcHJpbnQoZid7ZXhwX3N0cn09e2V4cF9yZXN1bHR9JykgZm9yIChleHBfc3RyLCBleHBfcmVzdWx0KSBpbiByZXN1bHRdCjx8ZmltX2VuZHw+"]
["8af820052e367fa5582df9afc4c2280f1a0ca29f-2","8af820052e367fa5582df9afc4c2280f1a0ca29f","PHxmaW1fcHJlZml4fD4KZGVmIGV4cHJlc3Npb25zKG51bWJlcnMsIGN1cnJlbnRfcmVzdWx0PTAsIGV4cHJlc3Npb249JycpOgogICAgaWYgbm90IG51bWJlcnM6Cjx8ZmltX2hvbGV8PgogICAgcmVzdWx0X3BsdXMgPSBleHByZXNzaW9ucygKICAgICAgICBudW1iZXJzWzE6XSwKICAgICAgICBjdXJyZW50X3Jlc3VsdCArIG51bWJlcnNbMF0sCiAgICAgICAgZid7ZXhwcmVzc2lvbn0re251bWJlcnNbMF19JykKICAgIHJlc3VsdF9taW51cyA9IGV4cHJlc3Npb25zKAogICAgICAgIG51bWJlcnNbMTpdLAogICAgICAgIGN1cnJlbnRfcmVzdWx0IC0gbnVtYmVyc1swXSwKICAgICAgICBmJ3tleHByZXNzaW9ufS17bnVtYmVyc1swXX0nKQogICAgcmV0dXJuIHJlc3VsdF9wbHVzICsgcmVzdWx0X21pbnVzCgoKaW5wdXRfbnVtYmVycyA9IFtpbnQoeCkgZm9yIHggaW4gaW5wdXQoKS5zcGxpdCgiLCIpXQpyZXN1bHQgPSBleHByZXNzaW9ucyhpbnB1dF9udW1iZXJzKQpbcHJpbnQoZid7ZXhwX3N0cn09e2V4cF9yZXN1bHR9JykgZm9yIChleHBfc3RyLCBleHBfcmVzdWx0KSBpbiByZXN1bHRdCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcmV0dXJuIFsoZXhwcmVzc2lvbiwgY3VycmVudF9yZXN1bHQpXQoKPHxmaW1fZW5kfD4="]
["415ff53bf132d8c52a1aade989449e0785a3b5e9-1","415ff53bf132d8c52a1aade989449e0785a3b5e9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBzeXMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpzeXMucGF0aC5hcHBlbmQoJy4uJykgIyBhZGQgdGhlIHBhdGggdG8gdGhlIGZvbGRlciBjb250YWluaW5nIENHZnVuY3Rpb25zLnB5IGhlcmUKaW1wb3J0IENHZnVuY3Rpb25zIGFzIGNnCmltcG9ydCBweXZpc3RhIGFzIHB2Cgo8fGZpbV9lbmR8Pg=="]
["415ff53bf132d8c52a1aade989449e0785a3b5e9-2","415ff53bf132d8c52a1aade989449e0785a3b5e9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBzeXMKc3lzLnBhdGguYXBwZW5kKCcuLicpICMgYWRkIHRoZSBwYXRoIHRvIHRoZSBmb2xkZXIgY29udGFpbmluZyBDR2Z1bmN0aW9ucy5weSBoZXJlCmltcG9ydCBDR2Z1bmN0aW9ucyBhcyBjZwppbXBvcnQgcHl2aXN0YSBhcyBwdgoKIyBBQzogVGhpcyBleGFtcGxlIHNob3dzIGhvdyB0aGUgQ0dmdW5jdGlvbnMgY2FuIGJlIHVzZWQgdG8gY29tcHV0ZSB0aGUgaW50ZWdyYWwgb2YgdGhlIHRoZSBDRyB3ZWlnaHQgYWxvbmcgYSBicmFuY2ggdmVjdG9yCiMgQUM6IFRoZSBjb250YWN0IHN0cmVzcyB0ZW5zb3IgYXQgdGhlIENHIHBvaW50cyBhcmUgdGhlbiBjb21wdXRlZAoKIyBkZWZpbmUgc29tZSBmdW5jdGlvbnMgdG8gcmVhZCB0aGUgaW5wdXQgZmlsZXMgYW5kIGNyZWF0ZSB0aGUgQ0cgZ3JpZApkZWYgcmVhZGZpbGVzKHBhcnRpY2xlZmlsZSxjb250YWN0ZmlsZSk6ICMgcmVhZCBteSBpbnB1dCBmaWxlcwogICAgcGFydCA9IHB2LnJlYWQocGFydGljbGVmaWxlKSAjIGxvYWQgcGFydGljbGUgcHJvcGVydGllcyBhdCBjZW50ZXIgb2YgbWFzcwogICAgY29udCA9IHB2LnJlYWQoY29udGFjdGZpbGUpICMgbG9hZCBicmFuY2ggdmVjdG9yIGluZm9ybWF0aW9ucwogICAgdnAgPSBwYXJ0LmdldF9hcnJheSgnVmVsb2N5JykgIyByZWFkIHRoZSBwYXJ0aWNsZXMgdmVsb2NpdHkgdmVjdG9yCiAgICBwcG9zID0gcGFydC5wb2ludHMgIyByZWFkIGxvY2F0aW9uIG9mIHRoZSBjZW50ZXIgb2YgbWFzc2VzIG9mIHRoZSBwYXJ0aWNsZXMKICAgIGJ2cG9zID0gY29udC5wb2ludHMgIyByZWFkIGxvY2F0aW9uIGxpbWl0cyBvZiBlYWNoIGJyYW5jaCB2ZWN0b3IKICAgIGNmb3JjZSA9IGNvbnQuZ2V0X2FycmF5KCdGeCcpICMgcmVhZCB0aGUgYnJhbmNoIHZlY3RvciBmb3JjZXMKICAgIGNvbm5lY3Rpdml0eSA9IG5wLnJlc2hhcGUoY29udC5jZWxscywobGVuKGNmb3JjZSksMykpICMgcmVhZCB0aGUgY29ubmVjdGl2aXR5IG9mIHRoZSBicmFuY2ggdmVjdG9ycwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICByZXR1cm4gcHBvcywgYnZwb3MsIHZwLCBjZm9yY2UsIGNvbm5lY3Rpdml0eQoKCjx8ZmltX2VuZHw+"]
["415ff53bf132d8c52a1aade989449e0785a3b5e9-3","415ff53bf132d8c52a1aade989449e0785a3b5e9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBzeXMKc3lzLnBhdGguYXBwZW5kKCcuLicpICMgYWRkIHRoZSBwYXRoIHRvIHRoZSBmb2xkZXIgY29udGFpbmluZyBDR2Z1bmN0aW9ucy5weSBoZXJlCmltcG9ydCBDR2Z1bmN0aW9ucyBhcyBjZwppbXBvcnQgcHl2aXN0YSBhcyBwdgoKIyBBQzogVGhpcyBleGFtcGxlIHNob3dzIGhvdyB0aGUgQ0dmdW5jdGlvbnMgY2FuIGJlIHVzZWQgdG8gY29tcHV0ZSB0aGUgaW50ZWdyYWwgb2YgdGhlIHRoZSBDRyB3ZWlnaHQgYWxvbmcgYSBicmFuY2ggdmVjdG9yCiMgQUM6IFRoZSBjb250YWN0IHN0cmVzcyB0ZW5zb3IgYXQgdGhlIENHIHBvaW50cyBhcmUgdGhlbiBjb21wdXRlZAoKIyBkZWZpbmUgc29tZSBmdW5jdGlvbnMgdG8gcmVhZCB0aGUgaW5wdXQgZmlsZXMgYW5kIGNyZWF0ZSB0aGUgQ0cgZ3JpZApkZWYgcmVhZGZpbGVzKHBhcnRpY2xlZmlsZSxjb250YWN0ZmlsZSk6ICMgcmVhZCBteSBpbnB1dCBmaWxlcwogICAgcGFydCA9IHB2LnJlYWQocGFydGljbGVmaWxlKSAjIGxvYWQgcGFydGljbGUgcHJvcGVydGllcyBhdCBjZW50ZXIgb2YgbWFzcwogICAgY29udCA9IHB2LnJlYWQoY29udGFjdGZpbGUpICMgbG9hZCBicmFuY2ggdmVjdG9yIGluZm9ybWF0aW9ucwogICAgdnAgPSBwYXJ0LmdldF9hcnJheSgnVmVsb2N5JykgIyByZWFkIHRoZSBwYXJ0aWNsZXMgdmVsb2NpdHkgdmVjdG9yCiAgICBwcG9zID0gcGFydC5wb2ludHMgIyByZWFkIGxvY2F0aW9uIG9mIHRoZSBjZW50ZXIgb2YgbWFzc2VzIG9mIHRoZSBwYXJ0aWNsZXMKICAgIGJ2cG9zID0gY29udC5wb2ludHMgIyByZWFkIGxvY2F0aW9uIGxpbWl0cyBvZiBlYWNoIGJyYW5jaCB2ZWN0b3IKICAgIGNmb3JjZSA9IGNvbnQuZ2V0X2FycmF5KCdGeCcpICMgcmVhZCB0aGUgYnJhbmNoIHZlY3RvciBmb3JjZXMKICAgIGNvbm5lY3Rpdml0eSA9IG5wLnJlc2hhcGUoY29udC5jZWxscywobGVuKGNmb3JjZSksMykpICMgcmVhZCB0aGUgY29ubmVjdGl2aXR5IG9mIHRoZSBicmFuY2ggdmVjdG9ycwogICAgcmV0dXJuIHBwb3MsIGJ2cG9zLCB2cCwgY2ZvcmNlLCBjb25uZWN0aXZpdHkKCgpkZWYgZ2VuX0NHX2dyaWQoWG1pbixYbWF4LFltaW4sWW1heCxabWluLFptYXgsbngsbnksbnopOiAjIGdlbmVyYXRlIGEgcmVndWxhciBncmlkCiAgICB4PW5wLmxpbnNwYWNlKFhtaW4sWG1heCxueCkgI1ggY29vcmRpbmF0ZXMKICAgIHk9bnAubGluc3BhY2UoWW1pbixZbWF4LG55KSAjWSBjb29yZGluYXRlcwogICAgej1ucC5saW5zcGFjZShabWluLFptYXgsbnopICNaIGNvb3JkaW5hdGVzCiAgICB4eCx5eSx6eiA9IG5wLm1lc2hncmlkKHgseSx6LGluZGV4aW5nPSdpaicpCiAgICByZXR1cm4geHgseXksenoKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBwYXJhbWV0ZXJzCm54PTkgI25iIG9mICBDRyBjZWxsIGFsb25nIFgKbnk9OSAjbmIgb2YgQ0cgY2VsbCBhbG9uZyBZCm56PTkgI25iIG9nIENHIGNlbGwgYWxvbmcgMgp3ID0gMC4wMDEgIyBzaXplIG9mIHRoZSBDRyBzcGhlcmUKbnN0ZXAgPSAxMCAjIG51bWJlciBvZiB0aW1lIHN0ZXAgdG8gYmUgYWNjb3VudGVkIGZvcgoKCgoKCgoKZm9yIGkgaW4gcmFuZ2UobnN0ZXApOgogICAgcHJpbnQoJyMjIyMjIyMjIyMjIHN0ZXA6ICcsIGkrMSAsICcgIyMjIyMjIyMjIyMnLCBzZXAgPU5vbmUpCiAgICBuZiA9IGkrMQogICAgcHJpbnQoJ1JlYWQgZmlsZXMnKQogICAgIyBnZW5lcmF0ZSBwb3NpdGlvbiBvZiB0aGUgQ0cgcG9pbnRzIGFuZCBjb252ZXJ0IGl0IGluIGEgYXJyYXkgKG5iIG9mIENHIHBvaW50cywzKQogICAgeHgseXksenogPSBnZW5fQ0dfZ3JpZCgwLjAwMSwwLjAwOSwwLjAwMSwwLjAwOSwwLjAwMSwwLjAwOSxueCxueSxueikgCiAgICB4X2NnID0gbnAucmVzaGFwZSh4eCwobngqbnkqbnopKQogICAgeV9jZyA9IG5wLnJlc2hhcGUoeXksKG54Km55Km56KSkKICAgIHpfY2cgPSBucC5yZXNoYXBlKHp6LChueCpueSpueikpCiAgICBwb3NfY2c9bnAudHJhbnNwb3NlKFt4X2NnLHlfY2csel9jZ10pCgogICAgIyByZWFkIHRoZSBwYXJ0aWNsZSBhbmQgYnJhbmNoIHZlY3RvciBkYXRhCiAgICBwcG9zLCBidnBvcywgdnAsIGNmb3JjZSwgY29ubmVjdGl2aXR5ID0gcmVhZGZpbGVzKCJESVNQTEFZL3JpZ2lkc18lcy52dHUiICUgbmYsIkRJU1BMQVkvYnYuJXMudnR1IiAlIG5mKQoKICAgICNjb250YWN0IHBvaW50cyBhcnRpZmljaWFsbHkgY3JlYXRlZCBhdCB0aGUgbWlkZGxlIG9mIHRoZSBicmFuY2ggdmVjdG9ycyBoZXJlOgogICAgZmFrZV9jcHRzID0gbnAuemVyb3MoKGxlbihjb25uZWN0aXZpdHkpLDMpKQogICAgY2ZvcmNlX2JpcyA9IG5wLnplcm9zKChsZW4oY2ZvcmNlKSoyLDMpKQogICAgYnZfYmlzID0gbnAuemVyb3MoKGxlbihjZm9yY2UpKjIsMikpCiAgICBidl94eXogPSBucC56ZXJvcygobGVuKGNmb3JjZSkqMiwzKSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCiAgICAjIHNlcGFyYXRlIHRoZSBicmFuY2ggdmVjdG9yIGluIHR3bzogb25lIGZyb20gdGhlIGNvbnRhY3QgcG9pbnQgdG8gdGhlIGNlbnRlciBvZiBtYXNzIG9mIHRoZSAxIHBhcnRpY2xlIGludm9sdmVkIGluIHRoZSBjb250YWN0IGFuZCBhbm90aGVyIG9uZSBiZXR3ZWVuIHRoZSBjb250YWN0IHBvaW50IGFuZCB0aGUgbWFzcyBjZW50ZXIgb2YgdGhlIHNlY29uZCBwYXJ0aWNsZXMKICAgIGZvciBpIGluIHJhbmdlKGxlbihmYWtlX2NwdHMpKToKPHxmaW1fZW5kfD4="]
["415ff53bf132d8c52a1aade989449e0785a3b5e9-4","415ff53bf132d8c52a1aade989449e0785a3b5e9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBzeXMKc3lzLnBhdGguYXBwZW5kKCcuLicpICMgYWRkIHRoZSBwYXRoIHRvIHRoZSBmb2xkZXIgY29udGFpbmluZyBDR2Z1bmN0aW9ucy5weSBoZXJlCmltcG9ydCBDR2Z1bmN0aW9ucyBhcyBjZwppbXBvcnQgcHl2aXN0YSBhcyBwdgoKIyBBQzogVGhpcyBleGFtcGxlIHNob3dzIGhvdyB0aGUgQ0dmdW5jdGlvbnMgY2FuIGJlIHVzZWQgdG8gY29tcHV0ZSB0aGUgaW50ZWdyYWwgb2YgdGhlIHRoZSBDRyB3ZWlnaHQgYWxvbmcgYSBicmFuY2ggdmVjdG9yCiMgQUM6IFRoZSBjb250YWN0IHN0cmVzcyB0ZW5zb3IgYXQgdGhlIENHIHBvaW50cyBhcmUgdGhlbiBjb21wdXRlZAoKIyBkZWZpbmUgc29tZSBmdW5jdGlvbnMgdG8gcmVhZCB0aGUgaW5wdXQgZmlsZXMgYW5kIGNyZWF0ZSB0aGUgQ0cgZ3JpZApkZWYgcmVhZGZpbGVzKHBhcnRpY2xlZmlsZSxjb250YWN0ZmlsZSk6ICMgcmVhZCBteSBpbnB1dCBmaWxlcwogICAgcGFydCA9IHB2LnJlYWQocGFydGljbGVmaWxlKSAjIGxvYWQgcGFydGljbGUgcHJvcGVydGllcyBhdCBjZW50ZXIgb2YgbWFzcwogICAgY29udCA9IHB2LnJlYWQoY29udGFjdGZpbGUpICMgbG9hZCBicmFuY2ggdmVjdG9yIGluZm9ybWF0aW9ucwogICAgdnAgPSBwYXJ0LmdldF9hcnJheSgnVmVsb2N5JykgIyByZWFkIHRoZSBwYXJ0aWNsZXMgdmVsb2NpdHkgdmVjdG9yCiAgICBwcG9zID0gcGFydC5wb2ludHMgIyByZWFkIGxvY2F0aW9uIG9mIHRoZSBjZW50ZXIgb2YgbWFzc2VzIG9mIHRoZSBwYXJ0aWNsZXMKICAgIGJ2cG9zID0gY29udC5wb2ludHMgIyByZWFkIGxvY2F0aW9uIGxpbWl0cyBvZiBlYWNoIGJyYW5jaCB2ZWN0b3IKICAgIGNmb3JjZSA9IGNvbnQuZ2V0X2FycmF5KCdGeCcpICMgcmVhZCB0aGUgYnJhbmNoIHZlY3RvciBmb3JjZXMKICAgIGNvbm5lY3Rpdml0eSA9IG5wLnJlc2hhcGUoY29udC5jZWxscywobGVuKGNmb3JjZSksMykpICMgcmVhZCB0aGUgY29ubmVjdGl2aXR5IG9mIHRoZSBicmFuY2ggdmVjdG9ycwogICAgcmV0dXJuIHBwb3MsIGJ2cG9zLCB2cCwgY2ZvcmNlLCBjb25uZWN0aXZpdHkKCgpkZWYgZ2VuX0NHX2dyaWQoWG1pbixYbWF4LFltaW4sWW1heCxabWluLFptYXgsbngsbnksbnopOiAjIGdlbmVyYXRlIGEgcmVndWxhciBncmlkCiAgICB4PW5wLmxpbnNwYWNlKFhtaW4sWG1heCxueCkgI1ggY29vcmRpbmF0ZXMKICAgIHk9bnAubGluc3BhY2UoWW1pbixZbWF4LG55KSAjWSBjb29yZGluYXRlcwogICAgej1ucC5saW5zcGFjZShabWluLFptYXgsbnopICNaIGNvb3JkaW5hdGVzCiAgICB4eCx5eSx6eiA9IG5wLm1lc2hncmlkKHgseSx6LGluZGV4aW5nPSdpaicpCiAgICByZXR1cm4geHgseXksenoKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBwYXJhbWV0ZXJzCm54PTkgI25iIG9mICBDRyBjZWxsIGFsb25nIFgKbnk9OSAjbmIgb2YgQ0cgY2VsbCBhbG9uZyBZCm56PTkgI25iIG9nIENHIGNlbGwgYWxvbmcgMgp3ID0gMC4wMDEgIyBzaXplIG9mIHRoZSBDRyBzcGhlcmUKbnN0ZXAgPSAxMCAjIG51bWJlciBvZiB0aW1lIHN0ZXAgdG8gYmUgYWNjb3VudGVkIGZvcgoKCgoKCgoKZm9yIGkgaW4gcmFuZ2UobnN0ZXApOgogICAgcHJpbnQoJyMjIyMjIyMjIyMjIHN0ZXA6ICcsIGkrMSAsICcgIyMjIyMjIyMjIyMnLCBzZXAgPU5vbmUpCiAgICBuZiA9IGkrMQogICAgcHJpbnQoJ1JlYWQgZmlsZXMnKQogICAgIyBnZW5lcmF0ZSBwb3NpdGlvbiBvZiB0aGUgQ0cgcG9pbnRzIGFuZCBjb252ZXJ0IGl0IGluIGEgYXJyYXkgKG5iIG9mIENHIHBvaW50cywzKQogICAgeHgseXksenogPSBnZW5fQ0dfZ3JpZCgwLjAwMSwwLjAwOSwwLjAwMSwwLjAwOSwwLjAwMSwwLjAwOSxueCxueSxueikgCiAgICB4X2NnID0gbnAucmVzaGFwZSh4eCwobngqbnkqbnopKQogICAgeV9jZyA9IG5wLnJlc2hhcGUoeXksKG54Km55Km56KSkKICAgIHpfY2cgPSBucC5yZXNoYXBlKHp6LChueCpueSpueikpCiAgICBwb3NfY2c9bnAudHJhbnNwb3NlKFt4X2NnLHlfY2csel9jZ10pCgogICAgIyByZWFkIHRoZSBwYXJ0aWNsZSBhbmQgYnJhbmNoIHZlY3RvciBkYXRhCiAgICBwcG9zLCBidnBvcywgdnAsIGNmb3JjZSwgY29ubmVjdGl2aXR5ID0gcmVhZGZpbGVzKCJESVNQTEFZL3JpZ2lkc18lcy52dHUiICUgbmYsIkRJU1BMQVkvYnYuJXMudnR1IiAlIG5mKQoKICAgICNjb250YWN0IHBvaW50cyBhcnRpZmljaWFsbHkgY3JlYXRlZCBhdCB0aGUgbWlkZGxlIG9mIHRoZSBicmFuY2ggdmVjdG9ycyBoZXJlOgogICAgZmFrZV9jcHRzID0gbnAuemVyb3MoKGxlbihjb25uZWN0aXZpdHkpLDMpKQogICAgY2ZvcmNlX2JpcyA9IG5wLnplcm9zKChsZW4oY2ZvcmNlKSoyLDMpKQogICAgYnZfYmlzID0gbnAuemVyb3MoKGxlbihjZm9yY2UpKjIsMikpCiAgICBidl94eXogPSBucC56ZXJvcygobGVuKGNmb3JjZSkqMiwzKSkKCgogICAgIyBzZXBhcmF0ZSB0aGUgYnJhbmNoIHZlY3RvciBpbiB0d286IG9uZSBmcm9tIHRoZSBjb250YWN0IHBvaW50IHRvIHRoZSBjZW50ZXIgb2YgbWFzcyBvZiB0aGUgMSBwYXJ0aWNsZSBpbnZvbHZlZCBpbiB0aGUgY29udGFjdCBhbmQgYW5vdGhlciBvbmUgYmV0d2VlbiB0aGUgY29udGFjdCBwb2ludCBhbmQgdGhlIG1hc3MgY2VudGVyIG9mIHRoZSBzZWNvbmQgcGFydGljbGVzCiAgICBmb3IgaSBpbiByYW5nZShsZW4oZmFrZV9jcHRzKSk6CiAgICAgICAgZmFrZV9jcHRzW2ksOl0gPSAoYnZwb3NbY29ubmVjdGl2aXR5W2ksMV0sOl0rYnZwb3NbY29ubmVjdGl2aXR5W2ksMl0sOl0pLzIgI2Nvb3JkaW5hdGVzIG9mIHRoZSBjb250YWN0IHBvaW50cwogICAgICAgIGNmb3JjZV9iaXNbaSoyLDpdID0gY2ZvcmNlW2ldICNjb250YWN0IGZvcmNlIHBhcnRpY2xlIDEKICAgICAgICBjZm9yY2VfYmlzW2kqMisxLDpdID0gLWNmb3JjZVtpXSAjY29udGFjdCBmb3JjZSBwYXJ0aWNsZSAyCiAgICAgICAgYnZfYmlzW2kqMiwwXSA9IGkKICAgICAgICBidl9iaXNbaSoyLDFdID0gY29ubmVjdGl2aXR5W2ksMV0KICAgICAgICBidl9iaXNbaSoyKzEsMF0gPSBpCiAgICAgICAgYnZfYmlzW2kqMisxLDFdID0gY29ubmVjdGl2aXR5W2ksMl0KICAgICAgICBidl94eXpbaSoyLDpdID0gYnZwb3NbY29ubmVjdGl2aXR5W2ksMV0sOl0tZmFrZV9jcHRzW2ksOl0gI2Nvb3JkaW5hdGVzIG9mIHRoZSB2ZWN0b3IgYmV0d2VlbiB0aGUgY29udGFjdCBwb2ludCBhbmQgMXN0IHBhcnRpY2xlIG1hc3MgY2VudGVyCiAgICAgICAgYnZfeHl6W2kqMisxLDpdID0gYnZwb3NbY29ubmVjdGl2aXR5W2ksMl0sOl0tZmFrZV9jcHRzW2ksOl0gI2Nvb3JkaW5hdGVzIG9mIHRoZSB2ZWN0b3IgYmV0d2VlbiB0aGUgY29udGFjdCBwb2ludCBhbmQgMm5kIHBhcnRpY2xlIG1hc3MgY2VudGVyCgoKICAgIHZpc2liaWxpdHkgLCBXID0gY2cuQ29tcHV0ZV9DR192aXNpYmlsaXR5X3dlaWdodChwb3NfY2csZmFrZV9jcHRzLDIqdyx3LCdMdWN5JyxpbnRfdmVjPVRydWUsdmVjPWJ2X3h5eikKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICAjIGNvbXB1dGUgdGhlIG5vcm1hbCBvZiB0aGUgYnJhbmNoIHZlY3RvcnMKICAgIG5vcm1fYnYgPSBucC56ZXJvcygobGVuKGJ2X3h5eiksMykpCiAgICBmb3IgaSBpbiByYW5nZShsZW4oYnZfeHl6KSk6Cjx8ZmltX2VuZHw+"]
["6b52dcb30d687a2561aa6c4a1cf824ad36cadb96-1","6b52dcb30d687a2561aa6c4a1cf824ad36cadb96","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIHlhbWxsaW50LmNvbmZpZyBpbXBvcnQgWWFtbExpbnRDb25maWcKCmZyb20gdGVzdHMudXRpbHMgaW1wb3J0IExvZ2dpbmdUZXN0ZXIKZnJvbSB5YW1sZml4LmZvcm1hdHRpbmcgaW1wb3J0IHJlYWRfYW5kX2Zvcm1hdF90ZXh0CgoKY2xhc3MgTmV3TGluZUF0RW5kT2ZGaWxlUnVsZVRlc3QoTG9nZ2luZ1Rlc3Rlcik6CiAgICAiIiJuZXctbGluZS1hdC1lbmQtb2YtZmlsZSIiIgoKICAgIGRlZiB0ZXN0X25vX2NvbmZpZyhzZWxmKToKICAgICAgICBleHBlY3RlZCA9ICIiIi0tLQp0ZXN0OgogICBrZXk6IHZhbHVlCiAgIGxzdDoKICAgICAgLSBpdGVtMQogICBvYmo6CiAgICAgIHNvbWV0aGluZzogZWxzZQoiIiIKCiAgICAgICAgY29udGVudCA9ICIiIi0tLQp0ZXN0OgogICBrZXk6IHZhbHVlCiAgIGxzdDoKICAgICAgLSBpdGVtMQogICBvYmo6CiAgICAgIHNvbWV0aGluZzogZWxzZSIiIgogICAgICAgIG91dHB1dCA9IHJlYWRfYW5kX2Zvcm1hdF90ZXh0KGNvbnRlbnQpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgb3V0cHV0KQoKICAgIGRlZiB0ZXN0X2VuYWJsZWQoc2VsZik6CiAgICAgICAgY29uZmlnX2NvbnRlbnQgPSAoCiAgICAgICAgICAgICd7ImV4dGVuZHMiOiAiZGVmYXVsdCIsICJydWxlcyI6IHsibmV3LWxpbmUtYXQtZW5kLW9mLWZpbGUiOiAiZW5hYmxlIn19JwogICAgICAgICkKCiAgICAgICAgZXhwZWN0ZWQgPSAiIiItLS0KdGVzdDoKICBrZXk6IHZhbHVlCiAgbHN0OgogICAgLSBpdGVtMQoiIiIKCiAgICAgICAgY29udGVudCA9ICIiIi0tLQp0ZXN0OgogIGtleTogdmFsdWUKICBsc3Q6CiAgICAtIGl0ZW0xIiIiCiAgICAgICAgb3V0cHV0ID0gcmVhZF9hbmRfZm9ybWF0X3RleHQoY29udGVudCwgWWFtbExpbnRDb25maWcoY29udGVudD1jb25maWdfY29udGVudCkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgb3V0cHV0KQogICAgICAgIG91dHB1dCA9IHJlYWRfYW5kX2Zvcm1hdF90ZXh0KGNvbnRlbnQpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgb3V0cHV0KQoKICAgIGRlZiB0ZXN0X2Rpc2FibGVkKHNlbGYpOgogICAgICAgIGNvbmZpZ19jb250ZW50ID0gKAogICAgICAgICAgICAneyJleHRlbmRzIjogImRlZmF1bHQiLCAicnVsZXMiOiB7Im5ldy1saW5lLWF0LWVuZC1vZi1maWxlIjogImRpc2FibGUifX0nCiAgICAgICAgKQoKICAgICAgICBleHBlY3RlZCA9ICIiIi0tLQp0ZXN0OgogIGtleTogdmFsdWUKICBsc3Q6CiAgICAtIGl0ZW0xIiIiCgogICAgICAgIGNvbnRlbnQgPSAiIiItLS0KdGVzdDoKICBrZXk6IHZhbHVlCiAgbHN0OgogICAgLSBpdGVtMSIiIgogICAgICAgIG91dHB1dCA9IHJlYWRfYW5kX2Zvcm1hdF90ZXh0KGNvbnRlbnQsIFlhbWxMaW50Q29uZmlnKGNvbnRlbnQ9Y29uZmlnX2NvbnRlbnQpKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIG91dHB1dCkKCiAgICBkZWYgdGVzdF9kaXNhYmxlZF9wcmVzZW50KHNlbGYpOgogICAgICAgIGNvbmZpZ19jb250ZW50ID0gKAogICAgICAgICAgICAneyJleHRlbmRzIjogImRlZmF1bHQiLCAicnVsZXMiOiB7Im5ldy1saW5lLWF0LWVuZC1vZi1maWxlIjogImRpc2FibGUifX0nCiAgICAgICAgKQoKICAgICAgICBleHBlY3RlZCA9ICIiIi0tLQp0ZXN0OgogIGtleTogdmFsdWUKICBsc3Q6CiAgICAtIGl0ZW0xCiIiIgoKICAgICAgICBjb250ZW50ID0gIiIiLS0tCnRlc3Q6CiAga2V5OiB2YWx1ZQogIGxzdDoKICAgIC0gaXRlbTEKIiIiCiAgICAgICAgb3V0cHV0ID0gcmVhZF9hbmRfZm9ybWF0X3RleHQoY29udGVudCwgWWFtbExpbnRDb25maWcoY29udGVudD1jb25maWdfY29udGVudCkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgb3V0cHV0KQoKICAgIGRlZiB0ZXN0X2Rvc19kaXNhYmxlZChzZWxmKToKICAgICAgICBjb25maWdfY29udGVudCA9ICgKICAgICAgICAgICAgJ3siZXh0ZW5kcyI6ICJkZWZhdWx0IiwgJwogICAgICAgICAgICAnInJ1bGVzIjogeyJuZXctbGluZS1hdC1lbmQtb2YtZmlsZSI6ICJkaXNhYmxlIiwgIm5ldy1saW5lcyI6IHsidHlwZSI6ICJkb3MifX19JwogICAgICAgICkKCiAgICAgICAgZXhwZWN0ZWQgPSAiIiItLS1ccgp0ZXN0OlxyCiAga2V5OiB2YWx1ZVxyCiAgbHN0OlxyCiAgICAtIGl0ZW0xIiIiCgogICAgICAgIGNvbnRlbnQgPSAiIiItLS1ccgp0ZXN0OlxyCiAga2V5OiB2YWx1ZVxyCiAgbHN0OlxyCiAgICAtIGl0ZW0xIiIiCiAgICAgICAgb3V0cHV0ID0gcmVhZF9hbmRfZm9ybWF0X3RleHQoY29udGVudCwgWWFtbExpbnRDb25maWcoY29udGVudD1jb25maWdfY29udGVudCkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgb3V0cHV0KQoKICAgIGRlZiB0ZXN0X2Rvc19kaXNhYmxlZF9wcmVzZW50KHNlbGYpOgogICAgICAgIGNvbmZpZ19jb250ZW50ID0gKAogICAgICAgICAgICAneyJleHRlbmRzIjogImRlZmF1bHQiLCAnCiAgICAgICAgICAgICcicnVsZXMiOiB7Im5ldy1saW5lLWF0LWVuZC1vZi1maWxlIjogImRpc2FibGUiLCAibmV3LWxpbmVzIjogeyJ0eXBlIjogImRvcyJ9fX0nCiAgICAgICAgKQoKICAgICAgICBleHBlY3RlZCA9ICIiIi0tLVxyCnRlc3Q6XHIKICBrZXk6IHZhbHVlXHIKPHxmaW1faG9sZXw+CiIiIgoKICAgICAgICBjb250ZW50ID0gIiIiLS0tXHIKdGVzdDpccgogIGtleTogdmFsdWVccgogIGxzdDpccgogICAgLSBpdGVtMVxyCiIiIgogICAgICAgIG91dHB1dCA9IHJlYWRfYW5kX2Zvcm1hdF90ZXh0KGNvbnRlbnQsIFlhbWxMaW50Q29uZmlnKGNvbnRlbnQ9Y29uZmlnX2NvbnRlbnQpKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIG91dHB1dCkKCiAgICBkZWYgdGVzdF9kb3NfZW5hYmxlZChzZWxmKToKICAgICAgICBjb25maWdfY29udGVudCA9ICgKICAgICAgICAgICAgJ3siZXh0ZW5kcyI6ICJkZWZhdWx0IiwgJwogICAgICAgICAgICAnInJ1bGVzIjogeyJuZXctbGluZS1hdC1lbmQtb2YtZmlsZSI6ICJlbmFibGUiLCAibmV3LWxpbmVzIjogeyJ0eXBlIjogImRvcyJ9fX0nCiAgICAgICAgKQoKICAgICAgICBleHBlY3RlZCA9ICIiIi0tLVxyCnRlc3Q6XHIKICBrZXk6IHZhbHVlXHIKICBsc3Q6XHIKICAgIC0gaXRlbTFccgoiIiIKCiAgICAgICAgY29udGVudCA9ICIiIi0tLVxyCnRlc3Q6XHIKICBrZXk6IHZhbHVlXHIKICBsc3Q6XHIKICAgIC0gaXRlbTEiIiIKICAgICAgICBvdXRwdXQgPSByZWFkX2FuZF9mb3JtYXRfdGV4dChjb250ZW50LCBZYW1sTGludENvbmZpZyhjb250ZW50PWNvbmZpZ19jb250ZW50KSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBvdXRwdXQpCgogICAgZGVmIHRlc3RfdW5peF9kaXNhYmxlZChzZWxmKToKICAgICAgICBjb25maWdfY29udGVudCA9ICgKICAgICAgICAgICAgJ3siZXh0ZW5kcyI6ICJkZWZhdWx0IiwgJwogICAgICAgICAgICAnInJ1bGVzIjogeyJuZXctbGluZS1hdC1lbmQtb2YtZmlsZSI6ICJkaXNhYmxlIiwgIm5ldy1saW5lcyI6IHsidHlwZSI6ICJ1bml4In19fScKICAgICAgICApCgogICAgICAgIGV4cGVjdGVkID0gIiIiLS0tCnRlc3Q6CiAga2V5OiB2YWx1ZQogIGxzdDoKICAgIC0gaXRlbTEiIiIKCiAgICAgICAgY29udGVudCA9ICIiIi0tLQp0ZXN0OgogIGtleTogdmFsdWUKICBsc3Q6CiAgICAtIGl0ZW0xIiIiCiAgICAgICAgb3V0cHV0ID0gcmVhZF9hbmRfZm9ybWF0X3RleHQoY29udGVudCwgWWFtbExpbnRDb25maWcoY29udGVudD1jb25maWdfY29udGVudCkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgb3V0cHV0KQoKICAgIGRlZiB0ZXN0X3VuaXhfZGlzYWJsZWRfcHJlc2VudChzZWxmKToKICAgICAgICBjb25maWdfY29udGVudCA9ICgKICAgICAgICAgICAgJ3siZXh0ZW5kcyI6ICJkZWZhdWx0IiwgJwogICAgICAgICAgICAnInJ1bGVzIjogeyJuZXctbGluZS1hdC1lbmQtb2YtZmlsZSI6ICJkaXNhYmxlIiwgIm5ldy1saW5lcyI6IHsidHlwZSI6ICJ1bml4In19fScKICAgICAgICApCgogICAgICAgIGV4cGVjdGVkID0gIiIiLS0tCnRlc3Q6CiAga2V5OiB2YWx1ZQogIGxzdDoKICAgIC0gaXRlbTEKIiIiCgogICAgICAgIGNvbnRlbnQgPSAiIiItLS0KdGVzdDoKICBrZXk6IHZhbHVlCiAgbHN0OgogICAgLSBpdGVtMQoiIiIKICAgICAgICBvdXRwdXQgPSByZWFkX2FuZF9mb3JtYXRfdGV4dChjb250ZW50LCBZYW1sTGludENvbmZpZyhjb250ZW50PWNvbmZpZ19jb250ZW50KSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBvdXRwdXQpCgogICAgZGVmIHRlc3RfdW5peF9lbmFibGVkKHNlbGYpOgogICAgICAgIGNvbmZpZ19jb250ZW50ID0gKAogICAgICAgICAgICAneyJleHRlbmRzIjogImRlZmF1bHQiLCAnCiAgICAgICAgICAgICcicnVsZXMiOiB7Im5ldy1saW5lLWF0LWVuZC1vZi1maWxlIjogImVuYWJsZSIsICJuZXctbGluZXMiOiB7InR5cGUiOiAidW5peCJ9fX0nCiAgICAgICAgKQoKICAgICAgICBleHBlY3RlZCA9ICIiIi0tLQp0ZXN0OgogIGtleTogdmFsdWUKICBsc3Q6CiAgICAtIGl0ZW0xCiIiIgoKICAgICAgICBjb250ZW50ID0gIiIiLS0tCnRlc3Q6CiAga2V5OiB2YWx1ZQogIGxzdDoKICAgIC0gaXRlbTEiIiIKICAgICAgICBvdXRwdXQgPSByZWFkX2FuZF9mb3JtYXRfdGV4dChjb250ZW50LCBZYW1sTGludENvbmZpZyhjb250ZW50PWNvbmZpZ19jb250ZW50KSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBvdXRwdXQpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHVuaXR0ZXN0Lm1haW4oKQo8fGZpbV9zdWZmaXh8PgogIGxzdDpccgogICAgLSBpdGVtMVxyCjx8ZmltX2VuZHw+"]
["6b52dcb30d687a2561aa6c4a1cf824ad36cadb96-2","6b52dcb30d687a2561aa6c4a1cf824ad36cadb96","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIHlhbWxsaW50LmNvbmZpZyBpbXBvcnQgWWFtbExpbnRDb25maWcKCmZyb20gdGVzdHMudXRpbHMgaW1wb3J0IExvZ2dpbmdUZXN0ZXIKZnJvbSB5YW1sZml4LmZvcm1hdHRpbmcgaW1wb3J0IHJlYWRfYW5kX2Zvcm1hdF90ZXh0CgoKY2xhc3MgTmV3TGluZUF0RW5kT2ZGaWxlUnVsZVRlc3QoTG9nZ2luZ1Rlc3Rlcik6CiAgICAiIiJuZXctbGluZS1hdC1lbmQtb2YtZmlsZSIiIgoKICAgIGRlZiB0ZXN0X25vX2NvbmZpZyhzZWxmKToKICAgICAgICBleHBlY3RlZCA9ICIiIi0tLQp0ZXN0OgogICBrZXk6IHZhbHVlCiAgIGxzdDoKICAgICAgLSBpdGVtMQogICBvYmo6CiAgICAgIHNvbWV0aGluZzogZWxzZQoiIiIKCiAgICAgICAgY29udGVudCA9ICIiIi0tLQp0ZXN0OgogICBrZXk6IHZhbHVlCiAgIGxzdDoKICAgICAgLSBpdGVtMQogICBvYmo6CiAgICAgIHNvbWV0aGluZzogZWxzZSIiIgogICAgICAgIG91dHB1dCA9IHJlYWRfYW5kX2Zvcm1hdF90ZXh0KGNvbnRlbnQpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgb3V0cHV0KQoKICAgIGRlZiB0ZXN0X2VuYWJsZWQoc2VsZik6CiAgICAgICAgY29uZmlnX2NvbnRlbnQgPSAoCiAgICAgICAgICAgICd7ImV4dGVuZHMiOiAiZGVmYXVsdCIsICJydWxlcyI6IHsibmV3LWxpbmUtYXQtZW5kLW9mLWZpbGUiOiAiZW5hYmxlIn19JwogICAgICAgICkKCiAgICAgICAgZXhwZWN0ZWQgPSAiIiItLS0KdGVzdDoKICBrZXk6IHZhbHVlCiAgbHN0OgogICAgLSBpdGVtMQoiIiIKCiAgICAgICAgY29udGVudCA9ICIiIi0tLQp0ZXN0OgogIGtleTogdmFsdWUKICBsc3Q6CiAgICAtIGl0ZW0xIiIiCiAgICAgICAgb3V0cHV0ID0gcmVhZF9hbmRfZm9ybWF0X3RleHQoY29udGVudCwgWWFtbExpbnRDb25maWcoY29udGVudD1jb25maWdfY29udGVudCkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgb3V0cHV0KQogICAgICAgIG91dHB1dCA9IHJlYWRfYW5kX2Zvcm1hdF90ZXh0KGNvbnRlbnQpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgb3V0cHV0KQoKICAgIGRlZiB0ZXN0X2Rpc2FibGVkKHNlbGYpOgogICAgICAgIGNvbmZpZ19jb250ZW50ID0gKAogICAgICAgICAgICAneyJleHRlbmRzIjogImRlZmF1bHQiLCAicnVsZXMiOiB7Im5ldy1saW5lLWF0LWVuZC1vZi1maWxlIjogImRpc2FibGUifX0nCiAgICAgICAgKQoKICAgICAgICBleHBlY3RlZCA9ICIiIi0tLQp0ZXN0OgogIGtleTogdmFsdWUKICBsc3Q6CiAgICAtIGl0ZW0xIiIiCgogICAgICAgIGNvbnRlbnQgPSAiIiItLS0KdGVzdDoKICBrZXk6IHZhbHVlCiAgbHN0OgogICAgLSBpdGVtMSIiIgogICAgICAgIG91dHB1dCA9IHJlYWRfYW5kX2Zvcm1hdF90ZXh0KGNvbnRlbnQsIFlhbWxMaW50Q29uZmlnKGNvbnRlbnQ9Y29uZmlnX2NvbnRlbnQpKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIG91dHB1dCkKCiAgICBkZWYgdGVzdF9kaXNhYmxlZF9wcmVzZW50KHNlbGYpOgogICAgICAgIGNvbmZpZ19jb250ZW50ID0gKAogICAgICAgICAgICAneyJleHRlbmRzIjogImRlZmF1bHQiLCAicnVsZXMiOiB7Im5ldy1saW5lLWF0LWVuZC1vZi1maWxlIjogImRpc2FibGUifX0nCiAgICAgICAgKQoKICAgICAgICBleHBlY3RlZCA9ICIiIi0tLQp0ZXN0OgogIGtleTogdmFsdWUKICBsc3Q6CiAgICAtIGl0ZW0xCiIiIgoKICAgICAgICBjb250ZW50ID0gIiIiLS0tCnRlc3Q6CiAga2V5OiB2YWx1ZQogIGxzdDoKICAgIC0gaXRlbTEKIiIiCiAgICAgICAgb3V0cHV0ID0gcmVhZF9hbmRfZm9ybWF0X3RleHQoY29udGVudCwgWWFtbExpbnRDb25maWcoY29udGVudD1jb25maWdfY29udGVudCkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgb3V0cHV0KQoKICAgIGRlZiB0ZXN0X2Rvc19kaXNhYmxlZChzZWxmKToKICAgICAgICBjb25maWdfY29udGVudCA9ICgKICAgICAgICAgICAgJ3siZXh0ZW5kcyI6ICJkZWZhdWx0IiwgJwogICAgICAgICAgICAnInJ1bGVzIjogeyJuZXctbGluZS1hdC1lbmQtb2YtZmlsZSI6ICJkaXNhYmxlIiwgIm5ldy1saW5lcyI6IHsidHlwZSI6ICJkb3MifX19JwogICAgICAgICkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICAgICBleHBlY3RlZCA9ICIiIi0tLVxyCnRlc3Q6XHIKICBrZXk6IHZhbHVlXHIKPHxmaW1fZW5kfD4="]
["6b52dcb30d687a2561aa6c4a1cf824ad36cadb96-3","6b52dcb30d687a2561aa6c4a1cf824ad36cadb96","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIHlhbWxsaW50LmNvbmZpZyBpbXBvcnQgWWFtbExpbnRDb25maWcKCmZyb20gdGVzdHMudXRpbHMgaW1wb3J0IExvZ2dpbmdUZXN0ZXIKZnJvbSB5YW1sZml4LmZvcm1hdHRpbmcgaW1wb3J0IHJlYWRfYW5kX2Zvcm1hdF90ZXh0CgoKY2xhc3MgTmV3TGluZUF0RW5kT2ZGaWxlUnVsZVRlc3QoTG9nZ2luZ1Rlc3Rlcik6CiAgICAiIiJuZXctbGluZS1hdC1lbmQtb2YtZmlsZSIiIgoKICAgIGRlZiB0ZXN0X25vX2NvbmZpZyhzZWxmKToKICAgICAgICBleHBlY3RlZCA9ICIiIi0tLQp0ZXN0OgogICBrZXk6IHZhbHVlCiAgIGxzdDoKICAgICAgLSBpdGVtMQogICBvYmo6CiAgICAgIHNvbWV0aGluZzogZWxzZQoiIiIKCiAgICAgICAgY29udGVudCA9ICIiIi0tLQp0ZXN0OgogICBrZXk6IHZhbHVlCiAgIGxzdDoKICAgICAgLSBpdGVtMQogICBvYmo6CiAgICAgIHNvbWV0aGluZzogZWxzZSIiIgogICAgICAgIG91dHB1dCA9IHJlYWRfYW5kX2Zvcm1hdF90ZXh0KGNvbnRlbnQpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgb3V0cHV0KQoKICAgIGRlZiB0ZXN0X2VuYWJsZWQoc2VsZik6CiAgICAgICAgY29uZmlnX2NvbnRlbnQgPSAoCiAgICAgICAgICAgICd7ImV4dGVuZHMiOiAiZGVmYXVsdCIsICJydWxlcyI6IHsibmV3LWxpbmUtYXQtZW5kLW9mLWZpbGUiOiAiZW5hYmxlIn19JwogICAgICAgICkKCiAgICAgICAgZXhwZWN0ZWQgPSAiIiItLS0KdGVzdDoKICBrZXk6IHZhbHVlCiAgbHN0OgogICAgLSBpdGVtMQoiIiIKCiAgICAgICAgY29udGVudCA9ICIiIi0tLQp0ZXN0OgogIGtleTogdmFsdWUKICBsc3Q6CiAgICAtIGl0ZW0xIiIiCiAgICAgICAgb3V0cHV0ID0gcmVhZF9hbmRfZm9ybWF0X3RleHQoY29udGVudCwgWWFtbExpbnRDb25maWcoY29udGVudD1jb25maWdfY29udGVudCkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgb3V0cHV0KQogICAgICAgIG91dHB1dCA9IHJlYWRfYW5kX2Zvcm1hdF90ZXh0KGNvbnRlbnQpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgb3V0cHV0KQoKICAgIGRlZiB0ZXN0X2Rpc2FibGVkKHNlbGYpOgogICAgICAgIGNvbmZpZ19jb250ZW50ID0gKAogICAgICAgICAgICAneyJleHRlbmRzIjogImRlZmF1bHQiLCAicnVsZXMiOiB7Im5ldy1saW5lLWF0LWVuZC1vZi1maWxlIjogImRpc2FibGUifX0nCiAgICAgICAgKQoKICAgICAgICBleHBlY3RlZCA9ICIiIi0tLQp0ZXN0OgogIGtleTogdmFsdWUKICBsc3Q6CiAgICAtIGl0ZW0xIiIiCgogICAgICAgIGNvbnRlbnQgPSAiIiItLS0KdGVzdDoKICBrZXk6IHZhbHVlCiAgbHN0OgogICAgLSBpdGVtMSIiIgogICAgICAgIG91dHB1dCA9IHJlYWRfYW5kX2Zvcm1hdF90ZXh0KGNvbnRlbnQsIFlhbWxMaW50Q29uZmlnKGNvbnRlbnQ9Y29uZmlnX2NvbnRlbnQpKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIG91dHB1dCkKCiAgICBkZWYgdGVzdF9kaXNhYmxlZF9wcmVzZW50KHNlbGYpOgogICAgICAgIGNvbmZpZ19jb250ZW50ID0gKAogICAgICAgICAgICAneyJleHRlbmRzIjogImRlZmF1bHQiLCAicnVsZXMiOiB7Im5ldy1saW5lLWF0LWVuZC1vZi1maWxlIjogImRpc2FibGUifX0nCiAgICAgICAgKQoKICAgICAgICBleHBlY3RlZCA9ICIiIi0tLQp0ZXN0OgogIGtleTogdmFsdWUKICBsc3Q6CiAgICAtIGl0ZW0xCiIiIgoKICAgICAgICBjb250ZW50ID0gIiIiLS0tCnRlc3Q6CiAga2V5OiB2YWx1ZQogIGxzdDoKICAgIC0gaXRlbTEKIiIiCiAgICAgICAgb3V0cHV0ID0gcmVhZF9hbmRfZm9ybWF0X3RleHQoY29udGVudCwgWWFtbExpbnRDb25maWcoY29udGVudD1jb25maWdfY29udGVudCkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgb3V0cHV0KQoKICAgIGRlZiB0ZXN0X2Rvc19kaXNhYmxlZChzZWxmKToKICAgICAgICBjb25maWdfY29udGVudCA9ICgKICAgICAgICAgICAgJ3siZXh0ZW5kcyI6ICJkZWZhdWx0IiwgJwogICAgICAgICAgICAnInJ1bGVzIjogeyJuZXctbGluZS1hdC1lbmQtb2YtZmlsZSI6ICJkaXNhYmxlIiwgIm5ldy1saW5lcyI6IHsidHlwZSI6ICJkb3MifX19JwogICAgICAgICkKCiAgICAgICAgZXhwZWN0ZWQgPSAiIiItLS1ccgp0ZXN0OlxyCiAga2V5OiB2YWx1ZVxyCiAgbHN0OlxyCiAgICAtIGl0ZW0xIiIiCgogICAgICAgIGNvbnRlbnQgPSAiIiItLS1ccgp0ZXN0OlxyCiAga2V5OiB2YWx1ZVxyCiAgbHN0OlxyCiAgICAtIGl0ZW0xIiIiCiAgICAgICAgb3V0cHV0ID0gcmVhZF9hbmRfZm9ybWF0X3RleHQoY29udGVudCwgWWFtbExpbnRDb25maWcoY29udGVudD1jb25maWdfY29udGVudCkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgb3V0cHV0KQoKICAgIGRlZiB0ZXN0X2Rvc19kaXNhYmxlZF9wcmVzZW50KHNlbGYpOgogICAgICAgIGNvbmZpZ19jb250ZW50ID0gKAogICAgICAgICAgICAneyJleHRlbmRzIjogImRlZmF1bHQiLCAnCiAgICAgICAgICAgICcicnVsZXMiOiB7Im5ldy1saW5lLWF0LWVuZC1vZi1maWxlIjogImRpc2FibGUiLCAibmV3LWxpbmVzIjogeyJ0eXBlIjogImRvcyJ9fX0nCiAgICAgICAgKQoKICAgICAgICBleHBlY3RlZCA9ICIiIi0tLVxyCnRlc3Q6XHIKICBrZXk6IHZhbHVlXHIKICBsc3Q6XHIKICAgIC0gaXRlbTFccgoiIiIKCiAgICAgICAgY29udGVudCA9ICIiIi0tLVxyCnRlc3Q6XHIKICBrZXk6IHZhbHVlXHIKICBsc3Q6XHIKICAgIC0gaXRlbTFccgoiIiIKICAgICAgICBvdXRwdXQgPSByZWFkX2FuZF9mb3JtYXRfdGV4dChjb250ZW50LCBZYW1sTGludENvbmZpZyhjb250ZW50PWNvbmZpZ19jb250ZW50KSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBvdXRwdXQpCgogICAgZGVmIHRlc3RfZG9zX2VuYWJsZWQoc2VsZik6CiAgICAgICAgY29uZmlnX2NvbnRlbnQgPSAoCiAgICAgICAgICAgICd7ImV4dGVuZHMiOiAiZGVmYXVsdCIsICcKICAgICAgICAgICAgJyJydWxlcyI6IHsibmV3LWxpbmUtYXQtZW5kLW9mLWZpbGUiOiAiZW5hYmxlIiwgIm5ldy1saW5lcyI6IHsidHlwZSI6ICJkb3MifX19JwogICAgICAgICkKCiAgICAgICAgZXhwZWN0ZWQgPSAiIiItLS1ccgp0ZXN0OlxyCiAga2V5OiB2YWx1ZVxyCiAgbHN0OlxyCiAgICAtIGl0ZW0xXHIKIiIiCgogICAgICAgIGNvbnRlbnQgPSAiIiItLS1ccgp0ZXN0OlxyCiAga2V5OiB2YWx1ZVxyCiAgbHN0OlxyCiAgICAtIGl0ZW0xIiIiCiAgICAgICAgb3V0cHV0ID0gcmVhZF9hbmRfZm9ybWF0X3RleHQoY29udGVudCwgWWFtbExpbnRDb25maWcoY29udGVudD1jb25maWdfY29udGVudCkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgb3V0cHV0KQoKICAgIGRlZiB0ZXN0X3VuaXhfZGlzYWJsZWQoc2VsZik6CiAgICAgICAgY29uZmlnX2NvbnRlbnQgPSAoCiAgICAgICAgICAgICd7ImV4dGVuZHMiOiAiZGVmYXVsdCIsICcKICAgICAgICAgICAgJyJydWxlcyI6IHsibmV3LWxpbmUtYXQtZW5kLW9mLWZpbGUiOiAiZGlzYWJsZSIsICJuZXctbGluZXMiOiB7InR5cGUiOiAidW5peCJ9fX0nCiAgICAgICAgKQoKICAgICAgICBleHBlY3RlZCA9ICIiIi0tLQp0ZXN0OgogIGtleTogdmFsdWUKICBsc3Q6CiAgICAtIGl0ZW0xIiIiCgogICAgICAgIGNvbnRlbnQgPSAiIiItLS0KdGVzdDoKICBrZXk6IHZhbHVlCiAgbHN0OgogICAgLSBpdGVtMSIiIgogICAgICAgIG91dHB1dCA9IHJlYWRfYW5kX2Zvcm1hdF90ZXh0KGNvbnRlbnQsIFlhbWxMaW50Q29uZmlnKGNvbnRlbnQ9Y29uZmlnX2NvbnRlbnQpKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIG91dHB1dCkKCiAgICBkZWYgdGVzdF91bml4X2Rpc2FibGVkX3ByZXNlbnQoc2VsZik6CiAgICAgICAgY29uZmlnX2NvbnRlbnQgPSAoCiAgICAgICAgICAgICd7ImV4dGVuZHMiOiAiZGVmYXVsdCIsICcKICAgICAgICAgICAgJyJydWxlcyI6IHsibmV3LWxpbmUtYXQtZW5kLW9mLWZpbGUiOiAiZGlzYWJsZSIsICJuZXctbGluZXMiOiB7InR5cGUiOiAidW5peCJ9fX0nCiAgICAgICAgKQoKICAgICAgICBleHBlY3RlZCA9ICIiIi0tLQp0ZXN0OgogIGtleTogdmFsdWUKICBsc3Q6CiAgICAtIGl0ZW0xCiIiIgoKICAgICAgICBjb250ZW50ID0gIiIiLS0tCnRlc3Q6CiAga2V5OiB2YWx1ZQogIGxzdDoKICAgIC0gaXRlbTEKIiIiCiAgICAgICAgb3V0cHV0ID0gcmVhZF9hbmRfZm9ybWF0X3RleHQoY29udGVudCwgWWFtbExpbnRDb25maWcoY29udGVudD1jb25maWdfY29udGVudCkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgb3V0cHV0KQoKICAgIGRlZiB0ZXN0X3VuaXhfZW5hYmxlZChzZWxmKToKICAgICAgICBjb25maWdfY29udGVudCA9ICgKICAgICAgICAgICAgJ3siZXh0ZW5kcyI6ICJkZWZhdWx0IiwgJwogICAgICAgICAgICAnInJ1bGVzIjogeyJuZXctbGluZS1hdC1lbmQtb2YtZmlsZSI6ICJlbmFibGUiLCAibmV3LWxpbmVzIjogeyJ0eXBlIjogInVuaXgifX19JwogICAgICAgICkKCjx8ZmltX2hvbGV8Pgp0ZXN0OgogIGtleTogdmFsdWUKICBsc3Q6CiAgICAtIGl0ZW0xCiIiIgoKICAgICAgICBjb250ZW50ID0gIiIiLS0tCnRlc3Q6CiAga2V5OiB2YWx1ZQogIGxzdDoKICAgIC0gaXRlbTEiIiIKICAgICAgICBvdXRwdXQgPSByZWFkX2FuZF9mb3JtYXRfdGV4dChjb250ZW50LCBZYW1sTGludENvbmZpZyhjb250ZW50PWNvbmZpZ19jb250ZW50KSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBvdXRwdXQpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHVuaXR0ZXN0Lm1haW4oKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGV4cGVjdGVkID0gIiIiLS0tCjx8ZmltX2VuZHw+"]
["d4767c855eebac24ce268cdfa424ce3b8097d064-1","d4767c855eebac24ce268cdfa424ce3b8097d064","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgphbHR1cmEgPSBmbG9hdChpbnB1dCgnSW5mb3JtZSBhIGFsdHVyYSAobWV0cm9zKTonKSkKbGFyZ3VyYSA9IGZsb2F0KGlucHV0KCdJbmZvcm1lIGEgbGFyZ3VyYSBkYSBwYXJlZGUgKG1ldHJvcyk6JykpCgojcHJvY2Vzc2FtZW50byAoUHJvY2Vzc2FtZW50byBkZSBEYWRvcykKYXJlYTogZmxvYXQgPSBhbHR1cmEqbGFyZ3VyYQp0aW50YTogZmxvYXQgPSBhcmVhIC8gMgoKI3JldG9ybmFuZG8gbyBwcm9jZXNzYW1lbnRvIChTYcOtZGEgZGUgRGFkb3MKcHJpbnQoZidTdWEgcGFyZWRlIHRlbSBkaW1lbnPDo28gZGUge2xhcmd1cmE6LjJmfVh7YWx0dXJhOi4yZn0gZSBzdWEgw6FyZWEgbWVkZSB7YXJlYTouMmZ9bTIuJykKcHJpbnQoZidQYXJhIHBpbnRhciBhIHN1YSBwYXJlZGUgc2VyYSBuZWNlc3PDoXJpbyB7dGludGE6LjJmfUwgZGUgdGludGEuJykKPHxmaW1fc3VmZml4fD4KI0Zhw6dhIHVtIHByb2dyYW1hIHF1ZSBsZWlhIGEgbGFyZ3VyYSBlIGEgYWx0dXJhIGRlIHVtYSBwYXJlZGUgZW0gbWV0cm9zLCBjYWxjdWxlICBhIHN1YSDDoXJlYSBlIGEgcXVhbnRpZGFkZSBkZSB0aW50YQojIG5lY2Vzc8OhcmlhIHBhcmEgcGludMOhLWxhLCBzYWJlbmRvIHF1ZSBjYWRhIGxpdHJvIGRlIHRpbnRhLCBwaW50YSB1bWEgw6FyZWEgZGUgMm0uCgojZGVjbGFyYW5kbyBlIHJlY2ViZW5kbyBvcyBkYWRvcyAoRW50cmFkYSBkZSBEYWRvcykKPHxmaW1fZW5kfD4="]
["15637c2866a9978078780f8b5dce2aab0f17ae24-1","15637c2866a9978078780f8b5dce2aab0f17ae24","PHxmaW1fcHJlZml4fD4KemplZG5vY3pvbmFfcHJhd2ljYSA9IFsicGlzb3JncGwiLCAiUG9yb3p1bWllbmllX18iLCAiU29saWRhcm5hUEwiXQprb2FsaWNqYV9vYnl3YXRlbHNrYSA9IFsicGxhdGZvcm1hX29yZyIsICJOb3dvY3plc25hIiwgIlppZWxvbmkiLCAiaW5pY2phdHl3YVBMIl0Ka29uZmEgPSBbIktPTkZFREVSQUNKQV8iLCAiUnVjaE5hcm9kb3d5IiwgIlBhcnRpYV9LT1JXaU4iXQpwc2xfaV9rdWtpeiA9IFsibm93ZVBTTCIsICJLVUtJWjE1Il0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgprb2FsaWNqYV9sZXdpY293YSA9IFsiX19MZXdpY2EiLCAicGFydGlhcmF6ZW0iXQoKY29hbGl0aW9ucyA9IHsiemplZG5vY3pvbmFfcHJhd2ljYSI6IHpqZWRub2N6b25hX3ByYXdpY2EsCiAgICAgICAgICAgICAgImtvYWxpY2phX29ieXdhdGVsc2thIjoga29hbGljamFfb2J5d2F0ZWxza2EsCjx8ZmltX2VuZHw+"]
["15637c2866a9978078780f8b5dce2aab0f17ae24-2","15637c2866a9978078780f8b5dce2aab0f17ae24","PHxmaW1fcHJlZml4fD4KemplZG5vY3pvbmFfcHJhd2ljYSA9IFsicGlzb3JncGwiLCAiUG9yb3p1bWllbmllX18iLCAiU29saWRhcm5hUEwiXQprb2FsaWNqYV9vYnl3YXRlbHNrYSA9IFsicGxhdGZvcm1hX29yZyIsICJOb3dvY3plc25hIiwgIlppZWxvbmkiLCAiaW5pY2phdHl3YVBMIl0Ka29uZmEgPSBbIktPTkZFREVSQUNKQV8iLCAiUnVjaE5hcm9kb3d5IiwgIlBhcnRpYV9LT1JXaU4iXQo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAia29hbGljamFfb2J5d2F0ZWxza2EiOiBrb2FsaWNqYV9vYnl3YXRlbHNrYSwKICAgICAgICAgICAgICAia29uZmEiOiBrb25mYSwKICAgICAgICAgICAgICAicHNsX2lfa3VraXoiOiBwc2xfaV9rdWtpeiwKICAgICAgICAgICAgICAia29hbGljamFfbGV3aWNvd2EiOiBrb2FsaWNqYV9sZXdpY293YX0KPHxmaW1fc3VmZml4fD4KcHNsX2lfa3VraXogPSBbIm5vd2VQU0wiLCAiS1VLSVoxNSJdCmtvYWxpY2phX2xld2ljb3dhID0gWyJfX0xld2ljYSIsICJwYXJ0aWFyYXplbSJdCgpjb2FsaXRpb25zID0geyJ6amVkbm9jem9uYV9wcmF3aWNhIjogemplZG5vY3pvbmFfcHJhd2ljYSwKPHxmaW1fZW5kfD4="]
["ecbea35d5f97ae46be6e66ccebfe6fd9d5fef3d1-1","ecbea35d5f97ae46be6e66ccebfe6fd9d5fef3d1","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IGN2MgppbXBvcnQgdGVuc29yZmxvdyBhcyB0ZgoKZnJvbSB2aWRlb2Zsb3cuY29yZS5ub2RlIGltcG9ydCBQcm9jZXNzb3JOb2RlCmZyb20gLnRlbnNvcmZsb3dfdXRpbHMgaW1wb3J0IFRlbnNvcmZsb3dNb2RlbAo8fGZpbV9ob2xlfD4KICAgIGRhdGFfbGVuID0gbGVuKG91dCkKICAgIG51bV9iYXRjaGVzID0gaW50KGRhdGFfbGVuIC8gYmF0Y2hfc2l6ZSkKCiAgICBzLCBlID0gMCwgMAogICAgZm9yIGkgaW4gcmFuZ2UobnVtX2JhdGNoZXMpOgogICAgICAgIHMsIGUgPSBpICogYmF0Y2hfc2l6ZSwgKGkgKyAxKSAqIGJhdGNoX3NpemUKICAgICAgICBiYXRjaF9kYXRhX2RpY3QgPSB7azogdltzOmVdIGZvciBrLCB2IGluIGRhdGFfZGljdC5pdGVtcygpfQogICAgICAgIG91dFtzOmVdID0gZihiYXRjaF9kYXRhX2RpY3QpCiAgICBpZiBlIDwgbGVuKG91dCk6CiAgICAgICAgYmF0Y2hfZGF0YV9kaWN0ID0ge2s6IHZbZTpdIGZvciBrLCB2IGluIGRhdGFfZGljdC5pdGVtcygpfQogICAgICAgIG91dFtlOl0gPSBmKGJhdGNoX2RhdGFfZGljdCkKCmNsYXNzIEh1bWFuRW5jb2RlcihQcm9jZXNzb3JOb2RlKToKICAgICcnJwogICAgRW5jb2RlcyBhIGh1bWFuIGluIGEgYm91bmRpbmcgYm94IGludG8gYSBmZWF0dXJlIHZlY3RvciB0aGF0IAogICAgY2FuIGJlIHVzZWQgdG8gY29tcHV0ZSBzaW1pbGFyaXR5IG1ldHJpY3Mgb24gaXQuCgogICAgTW9kZWwgZnJvbSBwYXBlciBgYERlZXAgQ29zaW5lIE1ldHJpYyBMZWFybmluZyBmb3IgUGVyc29uIFJlLWlkZW50aWZpY2F0aW9uYGAgdHJhaW5lZAogICAgb24gdGhlIGBgTUFSU2BgIGRhdGFzZXQuCiAgICAKICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9ud29qa2UvY29zaW5lX21ldHJpY19sZWFybmluZwogICAgJycnCiAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aF90b19wYl9maWxlID0gTm9uZSwgYmF0Y2hfc2l6ZSA9IDMyLCBuYl90YXNrcyA9IDEsIGRldmljZV90eXBlID0gR1BVKToKICAgICAgICBzZWxmLl90ZW5zb3JmbG93X21vZGVsID0gTm9uZQogICAgICAgIHNlbGYuX3BhdGhfdG9fcGJfZmlsZSA9IHBhdGhfdG9fcGJfZmlsZQogICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBiYXRjaF9zaXplCiAgICAgICAgc3VwZXIoSHVtYW5FbmNvZGVyLCBzZWxmKS5fX2luaXRfXyhuYl90YXNrcyA9IG5iX3Rhc2tzLCBkZXZpY2VfdHlwZSA9IGRldmljZV90eXBlKQogICAgCiAgICBkZWYgb3BlbihzZWxmKToKICAgICAgICAnJycKICAgICAgICBDcmVhdGVzIHNlc3Npb24gd2l0aCB0ZW5zb3JmbG93IG1vZGVsCiAgICAgICAgJycnCiAgICAgICAgaWYgc2VsZi5kZXZpY2VfdHlwZSA9PSBDUFU6CiAgICAgICAgICAgIGRldmljZV9pZCA9ICdjcHUnCiAgICAgICAgZWxpZiBzZWxmLmRldmljZV90eXBlID09IEdQVToKICAgICAgICAgICAgZGV2aWNlX2lkID0gJ2dwdScKICAgICAgICBlbHNlOgogICAgICAgICAgICBkZXZpY2VfaWQgPSAnY3B1JwogICAgICAgIAogICAgICAgIGlmIHNlbGYuX3BhdGhfdG9fcGJfZmlsZSBpcyBOb25lOgogICAgICAgICAgICByZW1vdGVfdXJsID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS92aWRlb2Zsb3cvdmlkZW9mbG93LWNvbnRyaWIvcmVsZWFzZXMvZG93bmxvYWQvbW9kZWxzL2h1bWFuZW5jb2Rlcl9tYXJzXzEyOC5wYicKICAgICAgICAgICAgc2VsZi5fcGF0aF90b19wYl9maWxlID0gZ2V0X2ZpbGUoJ2h1bWFuX2VuY29kZXIucGInLCByZW1vdGVfdXJsKQogICAgICAgIAogICAgICAgIHdpdGggdGYuZGV2aWNlKGRldmljZV9pZCk6CiAgICAgICAgICAgIHNlbGYuX21vZGVsX2dyYXBoID0gdGYuR3JhcGgoKQogICAgICAgICAgICB3aXRoIHNlbGYuX21vZGVsX2dyYXBoLmFzX2RlZmF1bHQoKToKICAgICAgICAgICAgICAgIGdyYXBoX2RlZiA9IHRmLkdyYXBoRGVmKCkKICAgICAgICAgICAgICAgIHdpdGggdGYuZ2ZpbGUuR0ZpbGUoc2VsZi5fcGF0aF90b19wYl9maWxlLCAncmInKSBhcyBmaWQ6CiAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZF9ncmFwaCA9IGZpZC5yZWFkKCkKICAgICAgICAgICAgICAgICAgICBncmFwaF9kZWYuUGFyc2VGcm9tU3RyaW5nKHNlcmlhbGl6ZWRfZ3JhcGgpCiAgICAgICAgICAgICAgICAgICAgdGYuaW1wb3J0X2dyYXBoX2RlZihncmFwaF9kZWYsIG5hbWUgPSAnJykKICAgICAgICAgICAgICAgIAogICAgICAgIHNlbGYuX3Nlc3Npb24gPSB0Zi5TZXNzaW9uKGdyYXBoID0gc2VsZi5fbW9kZWxfZ3JhcGgpCiAgICAgICAgc2VsZi5faW5wdXRfdmFyID0gc2VsZi5fbW9kZWxfZ3JhcGguZ2V0X3RlbnNvcl9ieV9uYW1lKCdpbWFnZXM6MCcpCiAgICAgICAgc2VsZi5fb3V0cHV0X3ZhciA9IHNlbGYuX21vZGVsX2dyYXBoLmdldF90ZW5zb3JfYnlfbmFtZSgnZmVhdHVyZXM6MCcpCiAgICAgICAgc2VsZi5fZmVhdHVyZV9kaW0gPSBzZWxmLl9vdXRwdXRfdmFyLmdldF9zaGFwZSgpLmFzX2xpc3QoKVstMV0KICAgICAgICBzZWxmLl9pbWFnZV9zaGFwZSA9IHNlbGYuX2lucHV0X3Zhci5nZXRfc2hhcGUoKS5hc19saXN0KClbMTpdCiAgICAgICAgCiAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgJycnCiAgICAgICAgQ2xvc2VzIHRlbnNvcmZsb3cgbW9kZWwgc2Vzc2lvbgogICAgICAgICcnJwogICAgICAgIGlmIHNlbGYuX3Nlc3Npb246CiAgICAgICAgICAgIHNlbGYuX3Nlc3Npb24uY2xvc2UoKQoKICAgIGRlZiBwcm9jZXNzKHNlbGYsIGltX2JhdGNoKToKICAgICAgICAnJycKICAgICAgICAtIEFyZ3VtZW50czoKICAgICAgICAgICAgLSBpbV9iYXRjaDogbGlzdCBvZiBucC5hcnJheXM6IChoLCB3LCAzKQogICAgICAgIAogICAgICAgIC0gUmV0dXJuczoKICAgICAgICAgICAgLSBmZWF0dXJlX3ZlY3RvcjogKGJhdGNoLCBmKQogICAgICAgICcnJwogICAgICAgIGltX2JhdGNoID0gW2N2Mi5yZXNpemUoaW0sIChzZWxmLl9pbWFnZV9zaGFwZVsxXSwgc2VsZi5faW1hZ2Vfc2hhcGVbMF0pKSBmb3IgaW0gaW4gaW1fYmF0Y2hdCiAgICAgICAgb3V0ID0gbnAuemVyb3MoKGxlbihpbV9iYXRjaCksIHNlbGYuX2ZlYXR1cmVfZGltKSwgbnAuZmxvYXQzMikKICAgICAgICBfcnVuX2luX2JhdGNoZXMoCiAgICAgICAgICAgIGxhbWJkYSB4OiBzZWxmLl9zZXNzaW9uLnJ1bihzZWxmLl9vdXRwdXRfdmFyLCBmZWVkX2RpY3QgPSB4KSwKICAgICAgICAgICAge3NlbGYuX2lucHV0X3ZhcjogaW1fYmF0Y2h9LCAKICAgICAgICAgICAgb3V0LAogICAgICAgICAgICBzZWxmLl9iYXRjaF9zaXplCiAgICAgICAgKQogICAgICAgIHJldHVybiBvdXQKPHxmaW1fc3VmZml4fD4KZnJvbSB2aWRlb2Zsb3cudXRpbHMuZG93bmxvYWRlciBpbXBvcnQgZ2V0X2ZpbGUKZnJvbSB2aWRlb2Zsb3cuY29yZS5jb25zdGFudHMgaW1wb3J0IENQVSwgR1BVCgpkZWYgX3J1bl9pbl9iYXRjaGVzKGYsIGRhdGFfZGljdCwgb3V0LCBiYXRjaF9zaXplKToKPHxmaW1fZW5kfD4="]
["ecbea35d5f97ae46be6e66ccebfe6fd9d5fef3d1-2","ecbea35d5f97ae46be6e66ccebfe6fd9d5fef3d1","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IGN2MgppbXBvcnQgdGVuc29yZmxvdyBhcyB0ZgoKZnJvbSB2aWRlb2Zsb3cuY29yZS5ub2RlIGltcG9ydCBQcm9jZXNzb3JOb2RlCmZyb20gLnRlbnNvcmZsb3dfdXRpbHMgaW1wb3J0IFRlbnNvcmZsb3dNb2RlbAo8fGZpbV9ob2xlfD4KICAgIGRhdGFfbGVuID0gbGVuKG91dCkKICAgIG51bV9iYXRjaGVzID0gaW50KGRhdGFfbGVuIC8gYmF0Y2hfc2l6ZSkKCiAgICBzLCBlID0gMCwgMAogICAgZm9yIGkgaW4gcmFuZ2UobnVtX2JhdGNoZXMpOgogICAgICAgIHMsIGUgPSBpICogYmF0Y2hfc2l6ZSwgKGkgKyAxKSAqIGJhdGNoX3NpemUKICAgICAgICBiYXRjaF9kYXRhX2RpY3QgPSB7azogdltzOmVdIGZvciBrLCB2IGluIGRhdGFfZGljdC5pdGVtcygpfQogICAgICAgIG91dFtzOmVdID0gZihiYXRjaF9kYXRhX2RpY3QpCiAgICBpZiBlIDwgbGVuKG91dCk6CiAgICAgICAgYmF0Y2hfZGF0YV9kaWN0ID0ge2s6IHZbZTpdIGZvciBrLCB2IGluIGRhdGFfZGljdC5pdGVtcygpfQogICAgICAgIG91dFtlOl0gPSBmKGJhdGNoX2RhdGFfZGljdCkKCmNsYXNzIEh1bWFuRW5jb2RlcihQcm9jZXNzb3JOb2RlKToKICAgICcnJwogICAgRW5jb2RlcyBhIGh1bWFuIGluIGEgYm91bmRpbmcgYm94IGludG8gYSBmZWF0dXJlIHZlY3RvciB0aGF0IAogICAgY2FuIGJlIHVzZWQgdG8gY29tcHV0ZSBzaW1pbGFyaXR5IG1ldHJpY3Mgb24gaXQuCgogICAgTW9kZWwgZnJvbSBwYXBlciBgYERlZXAgQ29zaW5lIE1ldHJpYyBMZWFybmluZyBmb3IgUGVyc29uIFJlLWlkZW50aWZpY2F0aW9uYGAgdHJhaW5lZAogICAgb24gdGhlIGBgTUFSU2BgIGRhdGFzZXQuCiAgICAKICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9ud29qa2UvY29zaW5lX21ldHJpY19sZWFybmluZwogICAgJycnCiAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aF90b19wYl9maWxlID0gTm9uZSwgYmF0Y2hfc2l6ZSA9IDMyLCBuYl90YXNrcyA9IDEsIGRldmljZV90eXBlID0gR1BVKToKICAgICAgICBzZWxmLl90ZW5zb3JmbG93X21vZGVsID0gTm9uZQogICAgICAgIHNlbGYuX3BhdGhfdG9fcGJfZmlsZSA9IHBhdGhfdG9fcGJfZmlsZQogICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBiYXRjaF9zaXplCiAgICAgICAgc3VwZXIoSHVtYW5FbmNvZGVyLCBzZWxmKS5fX2luaXRfXyhuYl90YXNrcyA9IG5iX3Rhc2tzLCBkZXZpY2VfdHlwZSA9IGRldmljZV90eXBlKQogICAgCiAgICBkZWYgb3BlbihzZWxmKToKICAgICAgICAnJycKICAgICAgICBDcmVhdGVzIHNlc3Npb24gd2l0aCB0ZW5zb3JmbG93IG1vZGVsCiAgICAgICAgJycnCiAgICAgICAgaWYgc2VsZi5kZXZpY2VfdHlwZSA9PSBDUFU6CiAgICAgICAgICAgIGRldmljZV9pZCA9ICdjcHUnCiAgICAgICAgZWxpZiBzZWxmLmRldmljZV90eXBlID09IEdQVToKICAgICAgICAgICAgZGV2aWNlX2lkID0gJ2dwdScKICAgICAgICBlbHNlOgogICAgICAgICAgICBkZXZpY2VfaWQgPSAnY3B1JwogICAgICAgIAogICAgICAgIGlmIHNlbGYuX3BhdGhfdG9fcGJfZmlsZSBpcyBOb25lOgogICAgICAgICAgICByZW1vdGVfdXJsID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS92aWRlb2Zsb3cvdmlkZW9mbG93LWNvbnRyaWIvcmVsZWFzZXMvZG93bmxvYWQvbW9kZWxzL2h1bWFuZW5jb2Rlcl9tYXJzXzEyOC5wYicKICAgICAgICAgICAgc2VsZi5fcGF0aF90b19wYl9maWxlID0gZ2V0X2ZpbGUoJ2h1bWFuX2VuY29kZXIucGInLCByZW1vdGVfdXJsKQogICAgICAgIAogICAgICAgIHdpdGggdGYuZGV2aWNlKGRldmljZV9pZCk6CiAgICAgICAgICAgIHNlbGYuX21vZGVsX2dyYXBoID0gdGYuR3JhcGgoKQogICAgICAgICAgICB3aXRoIHNlbGYuX21vZGVsX2dyYXBoLmFzX2RlZmF1bHQoKToKICAgICAgICAgICAgICAgIGdyYXBoX2RlZiA9IHRmLkdyYXBoRGVmKCkKICAgICAgICAgICAgICAgIHdpdGggdGYuZ2ZpbGUuR0ZpbGUoc2VsZi5fcGF0aF90b19wYl9maWxlLCAncmInKSBhcyBmaWQ6CiAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZF9ncmFwaCA9IGZpZC5yZWFkKCkKICAgICAgICAgICAgICAgICAgICBncmFwaF9kZWYuUGFyc2VGcm9tU3RyaW5nKHNlcmlhbGl6ZWRfZ3JhcGgpCiAgICAgICAgICAgICAgICAgICAgdGYuaW1wb3J0X2dyYXBoX2RlZihncmFwaF9kZWYsIG5hbWUgPSAnJykKICAgICAgICAgICAgICAgIAogICAgICAgIHNlbGYuX3Nlc3Npb24gPSB0Zi5TZXNzaW9uKGdyYXBoID0gc2VsZi5fbW9kZWxfZ3JhcGgpCiAgICAgICAgc2VsZi5faW5wdXRfdmFyID0gc2VsZi5fbW9kZWxfZ3JhcGguZ2V0X3RlbnNvcl9ieV9uYW1lKCdpbWFnZXM6MCcpCiAgICAgICAgc2VsZi5fb3V0cHV0X3ZhciA9IHNlbGYuX21vZGVsX2dyYXBoLmdldF90ZW5zb3JfYnlfbmFtZSgnZmVhdHVyZXM6MCcpCiAgICAgICAgc2VsZi5fZmVhdHVyZV9kaW0gPSBzZWxmLl9vdXRwdXRfdmFyLmdldF9zaGFwZSgpLmFzX2xpc3QoKVstMV0KICAgICAgICBzZWxmLl9pbWFnZV9zaGFwZSA9IHNlbGYuX2lucHV0X3Zhci5nZXRfc2hhcGUoKS5hc19saXN0KClbMTpdCiAgICAgICAgCiAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgJycnCiAgICAgICAgQ2xvc2VzIHRlbnNvcmZsb3cgbW9kZWwgc2Vzc2lvbgogICAgICAgICcnJwogICAgICAgIGlmIHNlbGYuX3Nlc3Npb246CiAgICAgICAgICAgIHNlbGYuX3Nlc3Npb24uY2xvc2UoKQoKICAgIGRlZiBwcm9jZXNzKHNlbGYsIGltX2JhdGNoKToKICAgICAgICAnJycKICAgICAgICAtIEFyZ3VtZW50czoKICAgICAgICAgICAgLSBpbV9iYXRjaDogbGlzdCBvZiBucC5hcnJheXM6IChoLCB3LCAzKQogICAgICAgIAogICAgICAgIC0gUmV0dXJuczoKICAgICAgICAgICAgLSBmZWF0dXJlX3ZlY3RvcjogKGJhdGNoLCBmKQogICAgICAgICcnJwogICAgICAgIGltX2JhdGNoID0gW2N2Mi5yZXNpemUoaW0sIChzZWxmLl9pbWFnZV9zaGFwZVsxXSwgc2VsZi5faW1hZ2Vfc2hhcGVbMF0pKSBmb3IgaW0gaW4gaW1fYmF0Y2hdCiAgICAgICAgb3V0ID0gbnAuemVyb3MoKGxlbihpbV9iYXRjaCksIHNlbGYuX2ZlYXR1cmVfZGltKSwgbnAuZmxvYXQzMikKICAgICAgICBfcnVuX2luX2JhdGNoZXMoCiAgICAgICAgICAgIGxhbWJkYSB4OiBzZWxmLl9zZXNzaW9uLnJ1bihzZWxmLl9vdXRwdXRfdmFyLCBmZWVkX2RpY3QgPSB4KSwKICAgICAgICAgICAge3NlbGYuX2lucHV0X3ZhcjogaW1fYmF0Y2h9LCAKICAgICAgICAgICAgb3V0LAogICAgICAgICAgICBzZWxmLl9iYXRjaF9zaXplCiAgICAgICAgKQogICAgICAgIHJldHVybiBvdXQKPHxmaW1fc3VmZml4fD4KZnJvbSB2aWRlb2Zsb3cudXRpbHMuZG93bmxvYWRlciBpbXBvcnQgZ2V0X2ZpbGUKZnJvbSB2aWRlb2Zsb3cuY29yZS5jb25zdGFudHMgaW1wb3J0IENQVSwgR1BVCgpkZWYgX3J1bl9pbl9iYXRjaGVzKGYsIGRhdGFfZGljdCwgb3V0LCBiYXRjaF9zaXplKToKPHxmaW1fZW5kfD4="]
["ecbea35d5f97ae46be6e66ccebfe6fd9d5fef3d1-3","ecbea35d5f97ae46be6e66ccebfe6fd9d5fef3d1","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IGN2MgppbXBvcnQgdGVuc29yZmxvdyBhcyB0ZgoKZnJvbSB2aWRlb2Zsb3cuY29yZS5ub2RlIGltcG9ydCBQcm9jZXNzb3JOb2RlCmZyb20gLnRlbnNvcmZsb3dfdXRpbHMgaW1wb3J0IFRlbnNvcmZsb3dNb2RlbApmcm9tIHZpZGVvZmxvdy51dGlscy5kb3dubG9hZGVyIGltcG9ydCBnZXRfZmlsZQpmcm9tIHZpZGVvZmxvdy5jb3JlLmNvbnN0YW50cyBpbXBvcnQgQ1BVLCBHUFUKCmRlZiBfcnVuX2luX2JhdGNoZXMoZiwgZGF0YV9kaWN0LCBvdXQsIGJhdGNoX3NpemUpOgogICAgZGF0YV9sZW4gPSBsZW4ob3V0KQogICAgbnVtX2JhdGNoZXMgPSBpbnQoZGF0YV9sZW4gLyBiYXRjaF9zaXplKQoKICAgIHMsIGUgPSAwLCAwCiAgICBmb3IgaSBpbiByYW5nZShudW1fYmF0Y2hlcyk6CiAgICAgICAgcywgZSA9IGkgKiBiYXRjaF9zaXplLCAoaSArIDEpICogYmF0Y2hfc2l6ZQogICAgICAgIGJhdGNoX2RhdGFfZGljdCA9IHtrOiB2W3M6ZV0gZm9yIGssIHYgaW4gZGF0YV9kaWN0Lml0ZW1zKCl9CiAgICAgICAgb3V0W3M6ZV0gPSBmKGJhdGNoX2RhdGFfZGljdCkKICAgIGlmIGUgPCBsZW4ob3V0KToKICAgICAgICBiYXRjaF9kYXRhX2RpY3QgPSB7azogdltlOl0gZm9yIGssIHYgaW4gZGF0YV9kaWN0Lml0ZW1zKCl9CiAgICAgICAgb3V0W2U6XSA9IGYoYmF0Y2hfZGF0YV9kaWN0KQoKY2xhc3MgSHVtYW5FbmNvZGVyKFByb2Nlc3Nvck5vZGUpOgogICAgJycnCiAgICBFbmNvZGVzIGEgaHVtYW4gaW4gYSBib3VuZGluZyBib3ggaW50byBhIGZlYXR1cmUgdmVjdG9yIHRoYXQgCiAgICBjYW4gYmUgdXNlZCB0byBjb21wdXRlIHNpbWlsYXJpdHkgbWV0cmljcyBvbiBpdC4KCiAgICBNb2RlbCBmcm9tIHBhcGVyIGBgRGVlcCBDb3NpbmUgTWV0cmljIExlYXJuaW5nIGZvciBQZXJzb24gUmUtaWRlbnRpZmljYXRpb25gYCB0cmFpbmVkCiAgICBvbiB0aGUgYGBNQVJTYGAgZGF0YXNldC4KICAgIAogICAgaHR0cHM6Ly9naXRodWIuY29tL253b2prZS9jb3NpbmVfbWV0cmljX2xlYXJuaW5nCiAgICAnJycKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoX3RvX3BiX2ZpbGUgPSBOb25lLCBiYXRjaF9zaXplID0gMzIsIG5iX3Rhc2tzID0gMSwgZGV2aWNlX3R5cGUgPSBHUFUpOgogICAgICAgIHNlbGYuX3RlbnNvcmZsb3dfbW9kZWwgPSBOb25lCiAgICAgICAgc2VsZi5fcGF0aF90b19wYl9maWxlID0gcGF0aF90b19wYl9maWxlCiAgICAgICAgc2VsZi5fYmF0Y2hfc2l6ZSA9IGJhdGNoX3NpemUKICAgICAgICBzdXBlcihIdW1hbkVuY29kZXIsIHNlbGYpLl9faW5pdF9fKG5iX3Rhc2tzID0gbmJfdGFza3MsIGRldmljZV90eXBlID0gZGV2aWNlX3R5cGUpCiAgICAKICAgIGRlZiBvcGVuKHNlbGYpOgogICAgICAgICcnJwogICAgICAgIENyZWF0ZXMgc2Vzc2lvbiB3aXRoIHRlbnNvcmZsb3cgbW9kZWwKICAgICAgICAnJycKICAgICAgICBpZiBzZWxmLmRldmljZV90eXBlID09IENQVToKICAgICAgICAgICAgZGV2aWNlX2lkID0gJ2NwdScKICAgICAgICBlbGlmIHNlbGYuZGV2aWNlX3R5cGUgPT0gR1BVOgogICAgICAgICAgICBkZXZpY2VfaWQgPSAnZ3B1JwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGRldmljZV9pZCA9ICdjcHUnCiAgICAgICAgCiAgICAgICAgaWYgc2VsZi5fcGF0aF90b19wYl9maWxlIGlzIE5vbmU6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgcmVtb3RlX3VybCA9ICdodHRwczovL2dpdGh1Yi5jb20vdmlkZW9mbG93L3ZpZGVvZmxvdy1jb250cmliL3JlbGVhc2VzL2Rvd25sb2FkL21vZGVscy9odW1hbmVuY29kZXJfbWFyc18xMjgucGInCiAgICAgICAgICAgIHNlbGYuX3BhdGhfdG9fcGJfZmlsZSA9IGdldF9maWxlKCdodW1hbl9lbmNvZGVyLnBiJywgcmVtb3RlX3VybCkKICAgICAgICAKPHxmaW1fZW5kfD4="]
["ecbea35d5f97ae46be6e66ccebfe6fd9d5fef3d1-4","ecbea35d5f97ae46be6e66ccebfe6fd9d5fef3d1","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IGN2MgppbXBvcnQgdGVuc29yZmxvdyBhcyB0ZgoKZnJvbSB2aWRlb2Zsb3cuY29yZS5ub2RlIGltcG9ydCBQcm9jZXNzb3JOb2RlCmZyb20gLnRlbnNvcmZsb3dfdXRpbHMgaW1wb3J0IFRlbnNvcmZsb3dNb2RlbApmcm9tIHZpZGVvZmxvdy51dGlscy5kb3dubG9hZGVyIGltcG9ydCBnZXRfZmlsZQpmcm9tIHZpZGVvZmxvdy5jb3JlLmNvbnN0YW50cyBpbXBvcnQgQ1BVLCBHUFUKCmRlZiBfcnVuX2luX2JhdGNoZXMoZiwgZGF0YV9kaWN0LCBvdXQsIGJhdGNoX3NpemUpOgogICAgZGF0YV9sZW4gPSBsZW4ob3V0KQogICAgbnVtX2JhdGNoZXMgPSBpbnQoZGF0YV9sZW4gLyBiYXRjaF9zaXplKQoKICAgIHMsIGUgPSAwLCAwCiAgICBmb3IgaSBpbiByYW5nZShudW1fYmF0Y2hlcyk6CiAgICAgICAgcywgZSA9IGkgKiBiYXRjaF9zaXplLCAoaSArIDEpICogYmF0Y2hfc2l6ZQogICAgICAgIGJhdGNoX2RhdGFfZGljdCA9IHtrOiB2W3M6ZV0gZm9yIGssIHYgaW4gZGF0YV9kaWN0Lml0ZW1zKCl9CiAgICAgICAgb3V0W3M6ZV0gPSBmKGJhdGNoX2RhdGFfZGljdCkKICAgIGlmIGUgPCBsZW4ob3V0KToKICAgICAgICBiYXRjaF9kYXRhX2RpY3QgPSB7azogdltlOl0gZm9yIGssIHYgaW4gZGF0YV9kaWN0Lml0ZW1zKCl9CiAgICAgICAgb3V0W2U6XSA9IGYoYmF0Y2hfZGF0YV9kaWN0KQoKY2xhc3MgSHVtYW5FbmNvZGVyKFByb2Nlc3Nvck5vZGUpOgogICAgJycnCiAgICBFbmNvZGVzIGEgaHVtYW4gaW4gYSBib3VuZGluZyBib3ggaW50byBhIGZlYXR1cmUgdmVjdG9yIHRoYXQgCiAgICBjYW4gYmUgdXNlZCB0byBjb21wdXRlIHNpbWlsYXJpdHkgbWV0cmljcyBvbiBpdC4KCiAgICBNb2RlbCBmcm9tIHBhcGVyIGBgRGVlcCBDb3NpbmUgTWV0cmljIExlYXJuaW5nIGZvciBQZXJzb24gUmUtaWRlbnRpZmljYXRpb25gYCB0cmFpbmVkCiAgICBvbiB0aGUgYGBNQVJTYGAgZGF0YXNldC4KICAgIAogICAgaHR0cHM6Ly9naXRodWIuY29tL253b2prZS9jb3NpbmVfbWV0cmljX2xlYXJuaW5nCiAgICAnJycKPHxmaW1faG9sZXw+CiAgICAgICAgc3VwZXIoSHVtYW5FbmNvZGVyLCBzZWxmKS5fX2luaXRfXyhuYl90YXNrcyA9IG5iX3Rhc2tzLCBkZXZpY2VfdHlwZSA9IGRldmljZV90eXBlKQogICAgCiAgICBkZWYgb3BlbihzZWxmKToKICAgICAgICAnJycKICAgICAgICBDcmVhdGVzIHNlc3Npb24gd2l0aCB0ZW5zb3JmbG93IG1vZGVsCiAgICAgICAgJycnCiAgICAgICAgaWYgc2VsZi5kZXZpY2VfdHlwZSA9PSBDUFU6CiAgICAgICAgICAgIGRldmljZV9pZCA9ICdjcHUnCiAgICAgICAgZWxpZiBzZWxmLmRldmljZV90eXBlID09IEdQVToKICAgICAgICAgICAgZGV2aWNlX2lkID0gJ2dwdScKICAgICAgICBlbHNlOgogICAgICAgICAgICBkZXZpY2VfaWQgPSAnY3B1JwogICAgICAgIAogICAgICAgIGlmIHNlbGYuX3BhdGhfdG9fcGJfZmlsZSBpcyBOb25lOgogICAgICAgICAgICByZW1vdGVfdXJsID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS92aWRlb2Zsb3cvdmlkZW9mbG93LWNvbnRyaWIvcmVsZWFzZXMvZG93bmxvYWQvbW9kZWxzL2h1bWFuZW5jb2Rlcl9tYXJzXzEyOC5wYicKICAgICAgICAgICAgc2VsZi5fcGF0aF90b19wYl9maWxlID0gZ2V0X2ZpbGUoJ2h1bWFuX2VuY29kZXIucGInLCByZW1vdGVfdXJsKQogICAgICAgIAogICAgICAgIHdpdGggdGYuZGV2aWNlKGRldmljZV9pZCk6CiAgICAgICAgICAgIHNlbGYuX21vZGVsX2dyYXBoID0gdGYuR3JhcGgoKQogICAgICAgICAgICB3aXRoIHNlbGYuX21vZGVsX2dyYXBoLmFzX2RlZmF1bHQoKToKICAgICAgICAgICAgICAgIGdyYXBoX2RlZiA9IHRmLkdyYXBoRGVmKCkKICAgICAgICAgICAgICAgIHdpdGggdGYuZ2ZpbGUuR0ZpbGUoc2VsZi5fcGF0aF90b19wYl9maWxlLCAncmInKSBhcyBmaWQ6CiAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZF9ncmFwaCA9IGZpZC5yZWFkKCkKICAgICAgICAgICAgICAgICAgICBncmFwaF9kZWYuUGFyc2VGcm9tU3RyaW5nKHNlcmlhbGl6ZWRfZ3JhcGgpCiAgICAgICAgICAgICAgICAgICAgdGYuaW1wb3J0X2dyYXBoX2RlZihncmFwaF9kZWYsIG5hbWUgPSAnJykKICAgICAgICAgICAgICAgIAogICAgICAgIHNlbGYuX3Nlc3Npb24gPSB0Zi5TZXNzaW9uKGdyYXBoID0gc2VsZi5fbW9kZWxfZ3JhcGgpCiAgICAgICAgc2VsZi5faW5wdXRfdmFyID0gc2VsZi5fbW9kZWxfZ3JhcGguZ2V0X3RlbnNvcl9ieV9uYW1lKCdpbWFnZXM6MCcpCiAgICAgICAgc2VsZi5fb3V0cHV0X3ZhciA9IHNlbGYuX21vZGVsX2dyYXBoLmdldF90ZW5zb3JfYnlfbmFtZSgnZmVhdHVyZXM6MCcpCiAgICAgICAgc2VsZi5fZmVhdHVyZV9kaW0gPSBzZWxmLl9vdXRwdXRfdmFyLmdldF9zaGFwZSgpLmFzX2xpc3QoKVstMV0KICAgICAgICBzZWxmLl9pbWFnZV9zaGFwZSA9IHNlbGYuX2lucHV0X3Zhci5nZXRfc2hhcGUoKS5hc19saXN0KClbMTpdCiAgICAgICAgCiAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgJycnCiAgICAgICAgQ2xvc2VzIHRlbnNvcmZsb3cgbW9kZWwgc2Vzc2lvbgogICAgICAgICcnJwogICAgICAgIGlmIHNlbGYuX3Nlc3Npb246CiAgICAgICAgICAgIHNlbGYuX3Nlc3Npb24uY2xvc2UoKQoKICAgIGRlZiBwcm9jZXNzKHNlbGYsIGltX2JhdGNoKToKICAgICAgICAnJycKICAgICAgICAtIEFyZ3VtZW50czoKICAgICAgICAgICAgLSBpbV9iYXRjaDogbGlzdCBvZiBucC5hcnJheXM6IChoLCB3LCAzKQogICAgICAgIAogICAgICAgIC0gUmV0dXJuczoKICAgICAgICAgICAgLSBmZWF0dXJlX3ZlY3RvcjogKGJhdGNoLCBmKQogICAgICAgICcnJwogICAgICAgIGltX2JhdGNoID0gW2N2Mi5yZXNpemUoaW0sIChzZWxmLl9pbWFnZV9zaGFwZVsxXSwgc2VsZi5faW1hZ2Vfc2hhcGVbMF0pKSBmb3IgaW0gaW4gaW1fYmF0Y2hdCiAgICAgICAgb3V0ID0gbnAuemVyb3MoKGxlbihpbV9iYXRjaCksIHNlbGYuX2ZlYXR1cmVfZGltKSwgbnAuZmxvYXQzMikKICAgICAgICBfcnVuX2luX2JhdGNoZXMoCiAgICAgICAgICAgIGxhbWJkYSB4OiBzZWxmLl9zZXNzaW9uLnJ1bihzZWxmLl9vdXRwdXRfdmFyLCBmZWVkX2RpY3QgPSB4KSwKICAgICAgICAgICAge3NlbGYuX2lucHV0X3ZhcjogaW1fYmF0Y2h9LCAKICAgICAgICAgICAgb3V0LAogICAgICAgICAgICBzZWxmLl9iYXRjaF9zaXplCiAgICAgICAgKQogICAgICAgIHJldHVybiBvdXQKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoX3RvX3BiX2ZpbGUgPSBOb25lLCBiYXRjaF9zaXplID0gMzIsIG5iX3Rhc2tzID0gMSwgZGV2aWNlX3R5cGUgPSBHUFUpOgogICAgICAgIHNlbGYuX3RlbnNvcmZsb3dfbW9kZWwgPSBOb25lCiAgICAgICAgc2VsZi5fcGF0aF90b19wYl9maWxlID0gcGF0aF90b19wYl9maWxlCiAgICAgICAgc2VsZi5fYmF0Y2hfc2l6ZSA9IGJhdGNoX3NpemUKPHxmaW1fZW5kfD4="]
["ecbea35d5f97ae46be6e66ccebfe6fd9d5fef3d1-5","ecbea35d5f97ae46be6e66ccebfe6fd9d5fef3d1","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IGN2MgppbXBvcnQgdGVuc29yZmxvdyBhcyB0ZgoKZnJvbSB2aWRlb2Zsb3cuY29yZS5ub2RlIGltcG9ydCBQcm9jZXNzb3JOb2RlCmZyb20gLnRlbnNvcmZsb3dfdXRpbHMgaW1wb3J0IFRlbnNvcmZsb3dNb2RlbApmcm9tIHZpZGVvZmxvdy51dGlscy5kb3dubG9hZGVyIGltcG9ydCBnZXRfZmlsZQpmcm9tIHZpZGVvZmxvdy5jb3JlLmNvbnN0YW50cyBpbXBvcnQgQ1BVLCBHUFUKCmRlZiBfcnVuX2luX2JhdGNoZXMoZiwgZGF0YV9kaWN0LCBvdXQsIGJhdGNoX3NpemUpOgogICAgZGF0YV9sZW4gPSBsZW4ob3V0KQogICAgbnVtX2JhdGNoZXMgPSBpbnQoZGF0YV9sZW4gLyBiYXRjaF9zaXplKQoKICAgIHMsIGUgPSAwLCAwCjx8ZmltX2hvbGV8PgogICAgaWYgZSA8IGxlbihvdXQpOgogICAgICAgIGJhdGNoX2RhdGFfZGljdCA9IHtrOiB2W2U6XSBmb3IgaywgdiBpbiBkYXRhX2RpY3QuaXRlbXMoKX0KICAgICAgICBvdXRbZTpdID0gZihiYXRjaF9kYXRhX2RpY3QpCgpjbGFzcyBIdW1hbkVuY29kZXIoUHJvY2Vzc29yTm9kZSk6CiAgICAnJycKICAgIEVuY29kZXMgYSBodW1hbiBpbiBhIGJvdW5kaW5nIGJveCBpbnRvIGEgZmVhdHVyZSB2ZWN0b3IgdGhhdCAKICAgIGNhbiBiZSB1c2VkIHRvIGNvbXB1dGUgc2ltaWxhcml0eSBtZXRyaWNzIG9uIGl0LgoKICAgIE1vZGVsIGZyb20gcGFwZXIgYGBEZWVwIENvc2luZSBNZXRyaWMgTGVhcm5pbmcgZm9yIFBlcnNvbiBSZS1pZGVudGlmaWNhdGlvbmBgIHRyYWluZWQKICAgIG9uIHRoZSBgYE1BUlNgYCBkYXRhc2V0LgogICAgCiAgICBodHRwczovL2dpdGh1Yi5jb20vbndvamtlL2Nvc2luZV9tZXRyaWNfbGVhcm5pbmcKICAgICcnJwogICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGhfdG9fcGJfZmlsZSA9IE5vbmUsIGJhdGNoX3NpemUgPSAzMiwgbmJfdGFza3MgPSAxLCBkZXZpY2VfdHlwZSA9IEdQVSk6CiAgICAgICAgc2VsZi5fdGVuc29yZmxvd19tb2RlbCA9IE5vbmUKICAgICAgICBzZWxmLl9wYXRoX3RvX3BiX2ZpbGUgPSBwYXRoX3RvX3BiX2ZpbGUKICAgICAgICBzZWxmLl9iYXRjaF9zaXplID0gYmF0Y2hfc2l6ZQogICAgICAgIHN1cGVyKEh1bWFuRW5jb2Rlciwgc2VsZikuX19pbml0X18obmJfdGFza3MgPSBuYl90YXNrcywgZGV2aWNlX3R5cGUgPSBkZXZpY2VfdHlwZSkKICAgIAogICAgZGVmIG9wZW4oc2VsZik6CiAgICAgICAgJycnCiAgICAgICAgQ3JlYXRlcyBzZXNzaW9uIHdpdGggdGVuc29yZmxvdyBtb2RlbAogICAgICAgICcnJwogICAgICAgIGlmIHNlbGYuZGV2aWNlX3R5cGUgPT0gQ1BVOgogICAgICAgICAgICBkZXZpY2VfaWQgPSAnY3B1JwogICAgICAgIGVsaWYgc2VsZi5kZXZpY2VfdHlwZSA9PSBHUFU6CiAgICAgICAgICAgIGRldmljZV9pZCA9ICdncHUnCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZGV2aWNlX2lkID0gJ2NwdScKICAgICAgICAKICAgICAgICBpZiBzZWxmLl9wYXRoX3RvX3BiX2ZpbGUgaXMgTm9uZToKICAgICAgICAgICAgcmVtb3RlX3VybCA9ICdodHRwczovL2dpdGh1Yi5jb20vdmlkZW9mbG93L3ZpZGVvZmxvdy1jb250cmliL3JlbGVhc2VzL2Rvd25sb2FkL21vZGVscy9odW1hbmVuY29kZXJfbWFyc18xMjgucGInCiAgICAgICAgICAgIHNlbGYuX3BhdGhfdG9fcGJfZmlsZSA9IGdldF9maWxlKCdodW1hbl9lbmNvZGVyLnBiJywgcmVtb3RlX3VybCkKICAgICAgICAKICAgICAgICB3aXRoIHRmLmRldmljZShkZXZpY2VfaWQpOgogICAgICAgICAgICBzZWxmLl9tb2RlbF9ncmFwaCA9IHRmLkdyYXBoKCkKICAgICAgICAgICAgd2l0aCBzZWxmLl9tb2RlbF9ncmFwaC5hc19kZWZhdWx0KCk6CiAgICAgICAgICAgICAgICBncmFwaF9kZWYgPSB0Zi5HcmFwaERlZigpCiAgICAgICAgICAgICAgICB3aXRoIHRmLmdmaWxlLkdGaWxlKHNlbGYuX3BhdGhfdG9fcGJfZmlsZSwgJ3JiJykgYXMgZmlkOgogICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRfZ3JhcGggPSBmaWQucmVhZCgpCiAgICAgICAgICAgICAgICAgICAgZ3JhcGhfZGVmLlBhcnNlRnJvbVN0cmluZyhzZXJpYWxpemVkX2dyYXBoKQogICAgICAgICAgICAgICAgICAgIHRmLmltcG9ydF9ncmFwaF9kZWYoZ3JhcGhfZGVmLCBuYW1lID0gJycpCiAgICAgICAgICAgICAgICAKICAgICAgICBzZWxmLl9zZXNzaW9uID0gdGYuU2Vzc2lvbihncmFwaCA9IHNlbGYuX21vZGVsX2dyYXBoKQogICAgICAgIHNlbGYuX2lucHV0X3ZhciA9IHNlbGYuX21vZGVsX2dyYXBoLmdldF90ZW5zb3JfYnlfbmFtZSgnaW1hZ2VzOjAnKQogICAgICAgIHNlbGYuX291dHB1dF92YXIgPSBzZWxmLl9tb2RlbF9ncmFwaC5nZXRfdGVuc29yX2J5X25hbWUoJ2ZlYXR1cmVzOjAnKQogICAgICAgIHNlbGYuX2ZlYXR1cmVfZGltID0gc2VsZi5fb3V0cHV0X3Zhci5nZXRfc2hhcGUoKS5hc19saXN0KClbLTFdCiAgICAgICAgc2VsZi5faW1hZ2Vfc2hhcGUgPSBzZWxmLl9pbnB1dF92YXIuZ2V0X3NoYXBlKCkuYXNfbGlzdCgpWzE6XQogICAgICAgIAogICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICcnJwogICAgICAgIENsb3NlcyB0ZW5zb3JmbG93IG1vZGVsIHNlc3Npb24KICAgICAgICAnJycKICAgICAgICBpZiBzZWxmLl9zZXNzaW9uOgogICAgICAgICAgICBzZWxmLl9zZXNzaW9uLmNsb3NlKCkKCiAgICBkZWYgcHJvY2VzcyhzZWxmLCBpbV9iYXRjaCk6CiAgICAgICAgJycnCiAgICAgICAgLSBBcmd1bWVudHM6CiAgICAgICAgICAgIC0gaW1fYmF0Y2g6IGxpc3Qgb2YgbnAuYXJyYXlzOiAoaCwgdywgMykKICAgICAgICAKICAgICAgICAtIFJldHVybnM6CiAgICAgICAgICAgIC0gZmVhdHVyZV92ZWN0b3I6IChiYXRjaCwgZikKICAgICAgICAnJycKICAgICAgICBpbV9iYXRjaCA9IFtjdjIucmVzaXplKGltLCAoc2VsZi5faW1hZ2Vfc2hhcGVbMV0sIHNlbGYuX2ltYWdlX3NoYXBlWzBdKSkgZm9yIGltIGluIGltX2JhdGNoXQogICAgICAgIG91dCA9IG5wLnplcm9zKChsZW4oaW1fYmF0Y2gpLCBzZWxmLl9mZWF0dXJlX2RpbSksIG5wLmZsb2F0MzIpCiAgICAgICAgX3J1bl9pbl9iYXRjaGVzKAogICAgICAgICAgICBsYW1iZGEgeDogc2VsZi5fc2Vzc2lvbi5ydW4oc2VsZi5fb3V0cHV0X3ZhciwgZmVlZF9kaWN0ID0geCksCiAgICAgICAgICAgIHtzZWxmLl9pbnB1dF92YXI6IGltX2JhdGNofSwgCiAgICAgICAgICAgIG91dCwKICAgICAgICAgICAgc2VsZi5fYmF0Y2hfc2l6ZQogICAgICAgICkKICAgICAgICByZXR1cm4gb3V0Cjx8ZmltX3N1ZmZpeHw+CiAgICBmb3IgaSBpbiByYW5nZShudW1fYmF0Y2hlcyk6CiAgICAgICAgcywgZSA9IGkgKiBiYXRjaF9zaXplLCAoaSArIDEpICogYmF0Y2hfc2l6ZQogICAgICAgIGJhdGNoX2RhdGFfZGljdCA9IHtrOiB2W3M6ZV0gZm9yIGssIHYgaW4gZGF0YV9kaWN0Lml0ZW1zKCl9CiAgICAgICAgb3V0W3M6ZV0gPSBmKGJhdGNoX2RhdGFfZGljdCkKPHxmaW1fZW5kfD4="]
["68f6576b8b9c510778540f5167245f7ef2e1ecaf-1","68f6576b8b9c510778540f5167245f7ef2e1ecaf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGdjCmltcG9ydCByZXNvdXJjZQoKaW1wb3J0IHB5dGVzdAoKZnJvbSAubW9kZWxzIGltcG9ydCBNb2RlbFRlc3QgYXMgRGlydHlNaXhpbk1vZGVsCjx8ZmltX2hvbGV8PgpkZWYgdGVzdF9yc3NfdXNhZ2UoKToKICAgIERpcnR5TWl4aW5Nb2RlbCgpCiAgICBnYy5jb2xsZWN0KCkKICAgIHJzc18xID0gcmVzb3VyY2UuZ2V0cnVzYWdlKHJlc291cmNlLlJVU0FHRV9TRUxGKS5ydV9tYXhyc3MKICAgIGZvciBfIGluIHJhbmdlKDEwMDApOgogICAgICAgIERpcnR5TWl4aW5Nb2RlbCgpCiAgICBnYy5jb2xsZWN0KCkKICAgIHJzc18yID0gcmVzb3VyY2UuZ2V0cnVzYWdlKHJlc291cmNlLlJVU0FHRV9TRUxGKS5ydV9tYXhyc3MKICAgIGFzc2VydCByc3NfMiA9PSByc3NfMSwgJ1RoZXJlIGlzIGEgbWVtb3J5IGxlYWshJwo8fGZpbV9zdWZmaXh8PgoKcHl0ZXN0bWFyayA9IHB5dGVzdC5tYXJrLmRqYW5nb19kYgoKCjx8ZmltX2VuZHw+"]
["68f6576b8b9c510778540f5167245f7ef2e1ecaf-2","68f6576b8b9c510778540f5167245f7ef2e1ecaf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGdjCmltcG9ydCByZXNvdXJjZQoKaW1wb3J0IHB5dGVzdAoKZnJvbSAubW9kZWxzIGltcG9ydCBNb2RlbFRlc3QgYXMgRGlydHlNaXhpbk1vZGVsCgpweXRlc3RtYXJrID0gcHl0ZXN0Lm1hcmsuZGphbmdvX2RiCgoKZGVmIHRlc3RfcnNzX3VzYWdlKCk6CiAgICBEaXJ0eU1peGluTW9kZWwoKQogICAgZ2MuY29sbGVjdCgpCiAgICByc3NfMSA9IHJlc291cmNlLmdldHJ1c2FnZShyZXNvdXJjZS5SVVNBR0VfU0VMRikucnVfbWF4cnNzCiAgICBmb3IgXyBpbiByYW5nZSgxMDAwKToKICAgICAgICBEaXJ0eU1peGluTW9kZWwoKQogICAgZ2MuY29sbGVjdCgpCiAgICByc3NfMiA9IHJlc291cmNlLmdldHJ1c2FnZShyZXNvdXJjZS5SVVNBR0VfU0VMRikucnVfbWF4cnNzCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGFzc2VydCByc3NfMiA9PSByc3NfMSwgJ1RoZXJlIGlzIGEgbWVtb3J5IGxlYWshJwo8fGZpbV9lbmR8Pg=="]
["68f6576b8b9c510778540f5167245f7ef2e1ecaf-3","68f6576b8b9c510778540f5167245f7ef2e1ecaf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGdjCmltcG9ydCByZXNvdXJjZQoKPHxmaW1faG9sZXw+CnB5dGVzdG1hcmsgPSBweXRlc3QubWFyay5kamFuZ29fZGIKCgpkZWYgdGVzdF9yc3NfdXNhZ2UoKToKICAgIERpcnR5TWl4aW5Nb2RlbCgpCiAgICBnYy5jb2xsZWN0KCkKICAgIHJzc18xID0gcmVzb3VyY2UuZ2V0cnVzYWdlKHJlc291cmNlLlJVU0FHRV9TRUxGKS5ydV9tYXhyc3MKICAgIGZvciBfIGluIHJhbmdlKDEwMDApOgogICAgICAgIERpcnR5TWl4aW5Nb2RlbCgpCiAgICBnYy5jb2xsZWN0KCkKICAgIHJzc18yID0gcmVzb3VyY2UuZ2V0cnVzYWdlKHJlc291cmNlLlJVU0FHRV9TRUxGKS5ydV9tYXhyc3MKICAgIGFzc2VydCByc3NfMiA9PSByc3NfMSwgJ1RoZXJlIGlzIGEgbWVtb3J5IGxlYWshJwo8fGZpbV9zdWZmaXh8PgppbXBvcnQgcHl0ZXN0Cgpmcm9tIC5tb2RlbHMgaW1wb3J0IE1vZGVsVGVzdCBhcyBEaXJ0eU1peGluTW9kZWwKCjx8ZmltX2VuZHw+"]
["f922866904d5d2cb38dabbfe6aff9205fbd862ad-1","f922866904d5d2cb38dabbfe6aff9205fbd862ad","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KIwojIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQojIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KCmZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCgpmcm9tIC4ucGlwZWxpbmUgaW1wb3J0IFBpcGVsaW5lCjx8ZmltX2hvbGV8PgogICAgZGVmIHNldFVwKHNlbGYpIC0+IE5vbmU6CiAgICAgICAgc2VsZi53YXJuaW5nX2NvZGVfZmlsdGVyID0gV2FybmluZ0NvZGVGaWx0ZXIoezYwMDB9KQoKICAgIGRlZiB0ZXN0X2ZpbHRlcl9jb2RlcyhzZWxmKToKICAgICAgICBkaWN0X2VudHJpZXMgPSB7Imlzc3VlcyI6IFt7ImNvZGUiOiA2MDAwfSwgeyJjb2RlIjogNjAwMX0sIHsiY29kZSI6IDYwMDJ9XX0KICAgICAgICBvdXRwdXQsIF8gPSBQaXBlbGluZShbc2VsZi53YXJuaW5nX2NvZGVfZmlsdGVyXSkucnVuKGRpY3RfZW50cmllcykKCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3V0cHV0WyJpc3N1ZXMiXSksIDEpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXRbImlzc3VlcyJdWzBdLCB7ImNvZGUiOiA2MDAwfSkKPHxmaW1fc3VmZml4fD4KZnJvbSAuLndhcm5pbmdfY29kZV9maWx0ZXIgaW1wb3J0IFdhcm5pbmdDb2RlRmlsdGVyCgoKY2xhc3MgVGVzdFdhcm5pbmdDb2RlRmlsdGVyKFRlc3RDYXNlKToKPHxmaW1fZW5kfD4="]
["f922866904d5d2cb38dabbfe6aff9205fbd862ad-2","f922866904d5d2cb38dabbfe6aff9205fbd862ad","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KIwojIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQojIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KCmZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCjx8ZmltX2hvbGV8PgoKY2xhc3MgVGVzdFdhcm5pbmdDb2RlRmlsdGVyKFRlc3RDYXNlKToKICAgIGRlZiBzZXRVcChzZWxmKSAtPiBOb25lOgogICAgICAgIHNlbGYud2FybmluZ19jb2RlX2ZpbHRlciA9IFdhcm5pbmdDb2RlRmlsdGVyKHs2MDAwfSkKCiAgICBkZWYgdGVzdF9maWx0ZXJfY29kZXMoc2VsZik6CiAgICAgICAgZGljdF9lbnRyaWVzID0geyJpc3N1ZXMiOiBbeyJjb2RlIjogNjAwMH0sIHsiY29kZSI6IDYwMDF9LCB7ImNvZGUiOiA2MDAyfV19CiAgICAgICAgb3V0cHV0LCBfID0gUGlwZWxpbmUoW3NlbGYud2FybmluZ19jb2RlX2ZpbHRlcl0pLnJ1bihkaWN0X2VudHJpZXMpCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG91dHB1dFsiaXNzdWVzIl0pLCAxKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0WyJpc3N1ZXMiXVswXSwgeyJjb2RlIjogNjAwMH0pCjx8ZmltX3N1ZmZpeHw+Cgpmcm9tIC4ucGlwZWxpbmUgaW1wb3J0IFBpcGVsaW5lCmZyb20gLi53YXJuaW5nX2NvZGVfZmlsdGVyIGltcG9ydCBXYXJuaW5nQ29kZUZpbHRlcgoKPHxmaW1fZW5kfD4="]
["f922866904d5d2cb38dabbfe6aff9205fbd862ad-3","f922866904d5d2cb38dabbfe6aff9205fbd862ad","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KIwojIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQojIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KCmZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCgpmcm9tIC4ucGlwZWxpbmUgaW1wb3J0IFBpcGVsaW5lCmZyb20gLi53YXJuaW5nX2NvZGVfZmlsdGVyIGltcG9ydCBXYXJuaW5nQ29kZUZpbHRlcgoKCmNsYXNzIFRlc3RXYXJuaW5nQ29kZUZpbHRlcihUZXN0Q2FzZSk6CiAgICBkZWYgc2V0VXAoc2VsZikgLT4gTm9uZToKICAgICAgICBzZWxmLndhcm5pbmdfY29kZV9maWx0ZXIgPSBXYXJuaW5nQ29kZUZpbHRlcih7NjAwMH0pCgogICAgZGVmIHRlc3RfZmlsdGVyX2NvZGVzKHNlbGYpOgogICAgICAgIGRpY3RfZW50cmllcyA9IHsiaXNzdWVzIjogW3siY29kZSI6IDYwMDB9LCB7ImNvZGUiOiA2MDAxfSwgeyJjb2RlIjogNjAwMn1dfQogICAgICAgIG91dHB1dCwgXyA9IFBpcGVsaW5lKFtzZWxmLndhcm5pbmdfY29kZV9maWx0ZXJdKS5ydW4oZGljdF9lbnRyaWVzKQoKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvdXRwdXRbImlzc3VlcyJdKSwgMSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0WyJpc3N1ZXMiXVswXSwgeyJjb2RlIjogNjAwMH0pCjx8ZmltX2VuZHw+"]
["da27a170016e4ce7be62346bcc5d92f036c26a0b-1","da27a170016e4ce7be62346bcc5d92f036c26a0b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBwaWNrbGUKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBzeXMKb3MuZW52aXJvbi5zZXRkZWZhdWx0KCJESkFOR09fU0VUVElOR1NfTU9EVUxFIiwgIm1zMmxkYXZpei5zZXR0aW5ncyIpCgppbXBvcnQgZGphbmdvCmRqYW5nby5zZXR1cCgpCgpmcm9tIGJhc2ljdml6Lm1vZGVscyBpbXBvcnQgRXhwZXJpbWVudCwgVXNlckV4cGVyaW1lbnQsIFVzZXIKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Cgl1c2VybmFtZSA9IHN5cy5hcmd2WzFdCglleHBlcmltZW50bmFtZSA9IHN5cy5hcmd2WzJdCglwZXJtaXNzaW9uID0gc3lzLmFyZ3ZbM10KCglleHBlcmltZW50ID0gRXhwZXJpbWVudC5vYmplY3RzLmdldChuYW1lID0gZXhwZXJpbWVudG5hbWUpCgl1c2VyID0gVXNlci5vYmplY3RzLmZpbHRlcih1c2VybmFtZSA9IHVzZXJuYW1lKVswXQoKCXVlcyA9IFVzZXJFeHBlcmltZW50Lm9iamVjdHMuZmlsdGVyKHVzZXIgPSB1c2VyLGV4cGVyaW1lbnQgPSBleHBlcmltZW50KQoJaWYgbGVuKHVlcykgPT0gMDoKCQlVc2VyRXhwZXJpbWVudC5vYmplY3RzLmNyZWF0ZSh1c2VyID0gdXNlcixleHBlcmltZW50ID0gZXhwZXJpbWVudCxwZXJtaXNzaW9uID0gcGVybWlzc2lvbikKCWVsc2U6CgkJZm9yIGksdWUgaW4gZW51bWVyYXRlKHVlcyk6CgkJCWlmIGk9PTA6Cjx8ZmltX2hvbGV8PgoJCQllbHNlOgoJCQkJdWUuZGVsZXRlKCkKCgkKPHxmaW1fc3VmZml4fD4KCQkJCXVlLnBlcm1pc3Npb24gPSBwZXJtaXNzaW9uCgkJCQl1ZS5zYXZlKCkKPHxmaW1fZW5kfD4="]
["6bcf48b4935a1b173316b947bdfe692eb685e9ed-1","6bcf48b4935a1b173316b947bdfe692eb685e9ed","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCB1bml0dGVzdAoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KZnJvbSBudW1weS50ZXN0aW5nIGltcG9ydCBhc3NlcnRfYXJyYXlfYWxtb3N0X2VxdWFsLCBhc3NlcnRfYXJyYXlfbGVzcwpmcm9tIHRvcmNodmlzaW9uLmRhdGFzZXRzIGltcG9ydCBNTklTVApmcm9tIHRvcmNodmlzaW9uLnRyYW5zZm9ybXMgaW1wb3J0IFRvVGVuc29yLCBSZXNpemUsIE5vcm1hbGl6ZSwgQ29tcG9zZQoKZnJvbSBtaWdodHkubG9zcyBpbXBvcnQgKgpmcm9tIG1pZ2h0eS5tb2RlbHMgaW1wb3J0IE1MUCwgQXV0b2VuY29kZXJMaW5lYXIKZnJvbSBtaWdodHkubW9uaXRvci5hY2N1cmFjeSBpbXBvcnQgQWNjdXJhY3lFbWJlZGRpbmcKZnJvbSBtaWdodHkubW9uaXRvci5tb25pdG9yIGltcG9ydCBNb25pdG9yTGV2ZWwKZnJvbSBtaWdodHkubW9uaXRvci5tdXR1YWxfaW5mbyBpbXBvcnQgTXV0dWFsSW5mb05QRUVUCmZyb20gbWlnaHR5LnRyYWluZXIgaW1wb3J0ICoKZnJvbSBtaWdodHkudXRpbHMuY29tbW9uIGltcG9ydCBzZXRfc2VlZApmcm9tIG1pZ2h0eS51dGlscy5kYXRhIGltcG9ydCBEYXRhTG9hZGVyCgoKY2xhc3MgTU5JU1RfU2hvcnQoTU5JU1QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5kYXRhWzoxMDAwXQogICAgICAgIHNlbGYudGFyZ2V0cyA9IHNlbGYudGFyZ2V0c1s6MTAwMF0KCjx8ZmltX2hvbGV8PgogICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKICAgICAgICBvcy5lbnZpcm9uWydWSVNET01fU0VSVkVSJ10gPSAiaHR0cDovLzg1LjIxNy4xNzEuNTciCiAgICAgICAgb3MuZW52aXJvblsnVklTRE9NX1BPUlQnXSA9ICc4MDk2JwoKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBzZXRfc2VlZCgxKQogICAgICAgIHNlbGYubW9kZWwgPSBNTFAoMTk2LCA2NCwgMTApICAjIGlucHV0IDE0eDE0CiAgICAgICAgdHJhbnNmb3JtID0gQ29tcG9zZShbUmVzaXplKHNpemU9KDE0LCAxNCkpLCBUb1RlbnNvcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZShtZWFuPSgwLjEzMDcsKSwgc3RkPSgwLjMwODEsKSldKQogICAgICAgIHNlbGYuZGF0YV9sb2FkZXIgPSBEYXRhTG9hZGVyKE1OSVNUX1Nob3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoX3NpemU9MTI4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT10cmFuc2Zvcm0pCgogICAgICAgIHNlbGYub3B0aW1pemVyID0gdG9yY2gub3B0aW0uQWRhbSgKICAgICAgICAgICAgZmlsdGVyKGxhbWJkYSBwYXJhbTogcGFyYW0ucmVxdWlyZXNfZ3JhZCwgc2VsZi5tb2RlbC5wYXJhbWV0ZXJzKCkpLAogICAgICAgICAgICBscj0xZS0zLAogICAgICAgICAgICB3ZWlnaHRfZGVjYXk9MWUtNSkKICAgICAgICBzZWxmLnNjaGVkdWxlciA9IHRvcmNoLm9wdGltLmxyX3NjaGVkdWxlci5SZWR1Y2VMUk9uUGxhdGVhdSgKICAgICAgICAgICAgc2VsZi5vcHRpbWl6ZXIpCgogICAgZGVmIHRlc3RfVHJhaW5lckdyYWRfTXV0dWFsSW5mbyhzZWxmKToKICAgICAgICBzZXRfc2VlZCgyKQogICAgICAgIG1pX2hpc3RvcnkgPSBbXQoKICAgICAgICBjbGFzcyBNdXR1YWxJbmZvTlBFRVRfVGVzdChNdXR1YWxJbmZvTlBFRVQpOgogICAgICAgICAgICBkZWYgcGxvdChzZWxmX21pLCB2aXopOgogICAgICAgICAgICAgICAgbWlfaGlzdG9yeS5hcHBlbmQoc2VsZl9taS5pbmZvcm1hdGlvblsnbWxwLjInXSkKICAgICAgICAgICAgICAgIHN1cGVyKCkucGxvdCh2aXopCgogICAgICAgIGRhdGFfbG9hZGVyID0gRGF0YUxvYWRlcihNTklTVCwgZXZhbF9zaXplPTFfMDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09c2VsZi5kYXRhX2xvYWRlci50cmFuc2Zvcm0pCiAgICAgICAgdHJhaW5lciA9IFRyYWluZXJHcmFkKHNlbGYubW9kZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyaXRlcmlvbj1ubi5Dcm9zc0VudHJvcHlMb3NzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbG9hZGVyPWRhdGFfbG9hZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZXI9c2VsZi5vcHRpbWl6ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dHVhbF9pbmZvPU11dHVhbEluZm9OUEVFVF9UZXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9sb2FkZXI9ZGF0YV9sb2FkZXIsIHBjYV9zaXplPU5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZXI9c2VsZi5zY2hlZHVsZXIpCiAgICAgICAgdHJhaW5lci5lbnZfbmFtZSA9ICJweXRvcmNoLW1pZ2h0eSB0ZXN0cyIKICAgICAgICB0cmFpbmVyLm1vbml0b3IuYWR2YW5jZWRfbW9uaXRvcmluZyhsZXZlbD1Nb25pdG9yTGV2ZWwuRlVMTCkKICAgICAgICB0cmFpbmVyLnRpbWVyLmJhdGNoZXNfaW5fZXBvY2ggPSA1CiAgICAgICAgbG9zc19lcG9jaHMgPSB0cmFpbmVyLnRyYWluKG5fZXBvY2hzPTEsIG11dHVhbF9pbmZvX2xheWVycz0xKQogICAgICAgIGFzc2VydF9hcnJheV9hbG1vc3RfZXF1YWwobG9zc19lcG9jaHMsIFswLjM1XSwgZGVjaW1hbD0yKQogICAgICAgIG1pX2hpc3RvcnkgPSBucC52c3RhY2sobWlfaGlzdG9yeSkKICAgICAgICBhc3NlcnRfYXJyYXlfbGVzcygwLCBtaV9oaXN0b3J5KQogICAgICAgIHhfbGFzdCwgeV9sYXN0ID0gbWlfaGlzdG9yeVstMV0KCiAgICAgICAgIyBUaGUgbW9kZWwgaXMgd2VsbCB0cmFpbmVkLCBob3dldmVyIHRoZSBlc3RpbWF0ZSBzaXplIGlzIHNtYWxsLgogICAgICAgICMgSW4gdGhlb3J5LCBJKC47WSkgPD0gSSguO1gpIG11c3QgYmUgc2F0aXNmaWVkLgogICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcih5X2xhc3QsIDIuNSkKICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoeF9sYXN0LCAxLjMpCiAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoeF9sYXN0LCB5X2xhc3QpCgogICAgICAgIHRyYWluZXIuc2F2ZSgpCiAgICAgICAgdHJhaW5lci5yZXN0b3JlKCkKCiAgICBkZWYgdGVzdF9UcmFpbmVyRW1iZWRkaW5nKHNlbGYpOgogICAgICAgIG9zLmVudmlyb25bJ0NVREFfVklTSUJMRV9ERVZJQ0VTJ10gPSAnJwogICAgICAgIHNldF9zZWVkKDMpCiAgICAgICAgY3JpdGVyaW9uID0gVHJpcGxldExvc3NTYW1wbGVyKG5uLlRyaXBsZXRNYXJnaW5Mb3NzKCkpCiAgICAgICAgdHJhaW5lciA9IFRyYWluZXJFbWJlZGRpbmcoc2VsZi5tb2RlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcml0ZXJpb249Y3JpdGVyaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbG9hZGVyPXNlbGYuZGF0YV9sb2FkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemVyPXNlbGYub3B0aW1pemVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlcj1zZWxmLnNjaGVkdWxlcikKICAgICAgICB0cmFpbmVyLmVudl9uYW1lID0gInB5dG9yY2gtbWlnaHR5IHRlc3RzIgogICAgICAgIGxvc3NfZXBvY2hzID0gdHJhaW5lci50cmFpbihuX2Vwb2Nocz0xLCBtdXR1YWxfaW5mb19sYXllcnM9MCkKICAgICAgICBhc3NlcnRfYXJyYXlfYWxtb3N0X2VxdWFsKGxvc3NfZXBvY2hzLCBbMC41OF0sIGRlY2ltYWw9MSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWluZXIudGltZXIubl9lcG9jaHMsIDEpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFpbmVyLnRpbWVyLmVwb2NoLCAxKQoKICAgIGRlZiB0ZXN0X1RyYWluZXJFbWJlZGRpbmdfY2FjaGVkKHNlbGYpOgogICAgICAgIHNldF9zZWVkKDMpCiAgICAgICAgY3JpdGVyaW9uID0gVHJpcGxldExvc3NTYW1wbGVyKG5uLlRyaXBsZXRNYXJnaW5Mb3NzKCkpCiAgICAgICAgdHJhaW5lciA9IFRyYWluZXJFbWJlZGRpbmcoc2VsZi5tb2RlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcml0ZXJpb249Y3JpdGVyaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbG9hZGVyPXNlbGYuZGF0YV9sb2FkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemVyPXNlbGYub3B0aW1pemVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlcj1zZWxmLnNjaGVkdWxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2N1cmFjeV9tZWFzdXJlPUFjY3VyYWN5RW1iZWRkaW5nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZT1UcnVlKSkKICAgICAgICB0cmFpbmVyLmVudl9uYW1lID0gInB5dG9yY2gtbWlnaHR5IHRlc3RzIgogICAgICAgIHRyYWluZXIub3Blbl9tb25pdG9yKG9mZmxpbmU9VHJ1ZSkKCiAgICAgICAgIyBUcmlwbGV0TG9zcyBpcyBub3QgZGV0ZXJtaW5pc3RpYzsgZml4IHRoZSBzZWVkCiAgICAgICAgc2V0X3NlZWQoNCkKICAgICAgICBsb3NzX2NhY2hlZCA9IHRyYWluZXIuZnVsbF9mb3J3YXJkX3Bhc3ModHJhaW49VHJ1ZSkKICAgICAgICBhY2N1cmFjeV9jYWNoZWQgPSB0cmFpbmVyLnVwZGF0ZV9hY2N1cmFjeSh0cmFpbj1UcnVlKQoKICAgICAgICB0cmFpbmVyLmFjY3VyYWN5X21lYXN1cmUuY2FjaGUgPSBGYWxzZQogICAgICAgIHRyYWluZXIuYWNjdXJhY3lfbWVhc3VyZS5yZXNldCgpCgogICAgICAgIHNldF9zZWVkKDQpCiAgICAgICAgbG9zcyA9IHRyYWluZXIuZnVsbF9mb3J3YXJkX3Bhc3ModHJhaW49VHJ1ZSkKICAgICAgICBhY2N1cmFjeSA9IHRyYWluZXIudXBkYXRlX2FjY3VyYWN5KHRyYWluPVRydWUpCgogICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwobG9zc19jYWNoZWQuaXRlbSgpLCBsb3NzLml0ZW0oKSkKICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGFjY3VyYWN5X2NhY2hlZCwgYWNjdXJhY3kpCgogICAgZGVmIHRlc3RfVHJhaW5lckF1dG9lbmNvZGVyKHNlbGYpOgogICAgICAgIHNldF9zZWVkKDQpCiAgICAgICAgbW9kZWwgPSBBdXRvZW5jb2RlckxpbmVhcigxOTYsIDY0KQogICAgICAgIHRyYWluZXIgPSBUcmFpbmVyQXV0b2VuY29kZXIobW9kZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcml0ZXJpb249bm4uQkNFV2l0aExvZ2l0c0xvc3MoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbG9hZGVyPXNlbGYuZGF0YV9sb2FkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZXI9c2VsZi5vcHRpbWl6ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZXI9c2VsZi5zY2hlZHVsZXIpCiAgICAgICAgdHJhaW5lci5lbnZfbmFtZSA9ICJweXRvcmNoLW1pZ2h0eSB0ZXN0cyIKICAgICAgICBsb3NzX2Vwb2NocyA9IHRyYWluZXIudHJhaW4obl9lcG9jaHM9MSwgbXV0dWFsX2luZm9fbGF5ZXJzPTApCiAgICAgICAgYXNzZXJ0X2FycmF5X2FsbW9zdF9lcXVhbChsb3NzX2Vwb2NocywgWzAuNzA1XSwgZGVjaW1hbD0zKQoKICAgIGRlZiB0ZXN0X1RyYWluZXJBdXRvZW5jb2Rlcl9jYWNoZWQoc2VsZik6CiAgICAgICAgc2V0X3NlZWQoMykKICAgICAgICBtb2RlbCA9IEF1dG9lbmNvZGVyTGluZWFyKDE5NiwgNjQpCiAgICAgICAgdHJhaW5lciA9IFRyYWluZXJBdXRvZW5jb2Rlcihtb2RlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyaXRlcmlvbj1ubi5CQ0VXaXRoTG9naXRzTG9zcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9sb2FkZXI9c2VsZi5kYXRhX2xvYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGltaXplcj1zZWxmLm9wdGltaXplciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlcj1zZWxmLnNjaGVkdWxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY3VyYWN5X21lYXN1cmU9QWNjdXJhY3lFbWJlZGRpbmcoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGU9VHJ1ZSkpCiAgICAgICAgdHJhaW5lci5vcGVuX21vbml0b3Iob2ZmbGluZT1UcnVlKQoKICAgICAgICAjIFRyaXBsZXRMb3NzIGlzIG5vdCBkZXRlcm1pbmlzdGljOyBmaXggdGhlIHNlZWQKICAgICAgICBzZXRfc2VlZCg0KQogICAgICAgIGxvc3NfY2FjaGVkID0gdHJhaW5lci5mdWxsX2ZvcndhcmRfcGFzcyh0cmFpbj1UcnVlKQogICAgICAgIGFjY3VyYWN5X2NhY2hlZCA9IHRyYWluZXIudXBkYXRlX2FjY3VyYWN5KHRyYWluPVRydWUpCgogICAgICAgIHRyYWluZXIuYWNjdXJhY3lfbWVhc3VyZS5jYWNoZSA9IEZhbHNlCiAgICAgICAgdHJhaW5lci5hY2N1cmFjeV9tZWFzdXJlLnJlc2V0KCkKCiAgICAgICAgc2V0X3NlZWQoNCkKICAgICAgICBsb3NzID0gdHJhaW5lci5mdWxsX2ZvcndhcmRfcGFzcyh0cmFpbj1UcnVlKQogICAgICAgIGFjY3VyYWN5ID0gdHJhaW5lci51cGRhdGVfYWNjdXJhY3kodHJhaW49VHJ1ZSkKCiAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChsb3NzX2NhY2hlZC5pdGVtKCksIGxvc3MuaXRlbSgpKQogICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoYWNjdXJhY3lfY2FjaGVkLCBhY2N1cmFjeSkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdW5pdHRlc3QubWFpbigpCjx8ZmltX3N1ZmZpeHw+CgpjbGFzcyBUcmFpbmVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgoKICAgIEBjbGFzc21ldGhvZAo8fGZpbV9lbmR8Pg=="]
["6bcf48b4935a1b173316b947bdfe692eb685e9ed-2","6bcf48b4935a1b173316b947bdfe692eb685e9ed","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCB1bml0dGVzdAoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KZnJvbSBudW1weS50ZXN0aW5nIGltcG9ydCBhc3NlcnRfYXJyYXlfYWxtb3N0X2VxdWFsLCBhc3NlcnRfYXJyYXlfbGVzcwpmcm9tIHRvcmNodmlzaW9uLmRhdGFzZXRzIGltcG9ydCBNTklTVApmcm9tIHRvcmNodmlzaW9uLnRyYW5zZm9ybXMgaW1wb3J0IFRvVGVuc29yLCBSZXNpemUsIE5vcm1hbGl6ZSwgQ29tcG9zZQoKZnJvbSBtaWdodHkubG9zcyBpbXBvcnQgKgpmcm9tIG1pZ2h0eS5tb2RlbHMgaW1wb3J0IE1MUCwgQXV0b2VuY29kZXJMaW5lYXIKZnJvbSBtaWdodHkubW9uaXRvci5hY2N1cmFjeSBpbXBvcnQgQWNjdXJhY3lFbWJlZGRpbmcKZnJvbSBtaWdodHkubW9uaXRvci5tb25pdG9yIGltcG9ydCBNb25pdG9yTGV2ZWwKZnJvbSBtaWdodHkubW9uaXRvci5tdXR1YWxfaW5mbyBpbXBvcnQgTXV0dWFsSW5mb05QRUVUCmZyb20gbWlnaHR5LnRyYWluZXIgaW1wb3J0ICoKZnJvbSBtaWdodHkudXRpbHMuY29tbW9uIGltcG9ydCBzZXRfc2VlZApmcm9tIG1pZ2h0eS51dGlscy5kYXRhIGltcG9ydCBEYXRhTG9hZGVyCgoKY2xhc3MgTU5JU1RfU2hvcnQoTU5JU1QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5kYXRhWzoxMDAwXQogICAgICAgIHNlbGYudGFyZ2V0cyA9IHNlbGYudGFyZ2V0c1s6MTAwMF0KCgpjbGFzcyBUcmFpbmVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKICAgICAgICBvcy5lbnZpcm9uWydWSVNET01fU0VSVkVSJ10gPSAiaHR0cDovLzg1LjIxNy4xNzEuNTciCiAgICAgICAgb3MuZW52aXJvblsnVklTRE9NX1BPUlQnXSA9ICc4MDk2JwoKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBzZXRfc2VlZCgxKQogICAgICAgIHNlbGYubW9kZWwgPSBNTFAoMTk2LCA2NCwgMTApICAjIGlucHV0IDE0eDE0CiAgICAgICAgdHJhbnNmb3JtID0gQ29tcG9zZShbUmVzaXplKHNpemU9KDE0LCAxNCkpLCBUb1RlbnNvcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZShtZWFuPSgwLjEzMDcsKSwgc3RkPSgwLjMwODEsKSldKQogICAgICAgIHNlbGYuZGF0YV9sb2FkZXIgPSBEYXRhTG9hZGVyKE1OSVNUX1Nob3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoX3NpemU9MTI4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT10cmFuc2Zvcm0pCgogICAgICAgIHNlbGYub3B0aW1pemVyID0gdG9yY2gub3B0aW0uQWRhbSgKICAgICAgICAgICAgZmlsdGVyKGxhbWJkYSBwYXJhbTogcGFyYW0ucmVxdWlyZXNfZ3JhZCwgc2VsZi5tb2RlbC5wYXJhbWV0ZXJzKCkpLAogICAgICAgICAgICBscj0xZS0zLAogICAgICAgICAgICB3ZWlnaHRfZGVjYXk9MWUtNSkKICAgICAgICBzZWxmLnNjaGVkdWxlciA9IHRvcmNoLm9wdGltLmxyX3NjaGVkdWxlci5SZWR1Y2VMUk9uUGxhdGVhdSgKICAgICAgICAgICAgc2VsZi5vcHRpbWl6ZXIpCgogICAgZGVmIHRlc3RfVHJhaW5lckdyYWRfTXV0dWFsSW5mbyhzZWxmKToKICAgICAgICBzZXRfc2VlZCgyKQogICAgICAgIG1pX2hpc3RvcnkgPSBbXQoKICAgICAgICBjbGFzcyBNdXR1YWxJbmZvTlBFRVRfVGVzdChNdXR1YWxJbmZvTlBFRVQpOgogICAgICAgICAgICBkZWYgcGxvdChzZWxmX21pLCB2aXopOgogICAgICAgICAgICAgICAgbWlfaGlzdG9yeS5hcHBlbmQoc2VsZl9taS5pbmZvcm1hdGlvblsnbWxwLjInXSkKICAgICAgICAgICAgICAgIHN1cGVyKCkucGxvdCh2aXopCgogICAgICAgIGRhdGFfbG9hZGVyID0gRGF0YUxvYWRlcihNTklTVCwgZXZhbF9zaXplPTFfMDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09c2VsZi5kYXRhX2xvYWRlci50cmFuc2Zvcm0pCiAgICAgICAgdHJhaW5lciA9IFRyYWluZXJHcmFkKHNlbGYubW9kZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyaXRlcmlvbj1ubi5Dcm9zc0VudHJvcHlMb3NzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbG9hZGVyPWRhdGFfbG9hZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZXI9c2VsZi5vcHRpbWl6ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dHVhbF9pbmZvPU11dHVhbEluZm9OUEVFVF9UZXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9sb2FkZXI9ZGF0YV9sb2FkZXIsIHBjYV9zaXplPU5vbmUpLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlcj1zZWxmLnNjaGVkdWxlcikKPHxmaW1fZW5kfD4="]
["6bcf48b4935a1b173316b947bdfe692eb685e9ed-3","6bcf48b4935a1b173316b947bdfe692eb685e9ed","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCB1bml0dGVzdAoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KZnJvbSBudW1weS50ZXN0aW5nIGltcG9ydCBhc3NlcnRfYXJyYXlfYWxtb3N0X2VxdWFsLCBhc3NlcnRfYXJyYXlfbGVzcwpmcm9tIHRvcmNodmlzaW9uLmRhdGFzZXRzIGltcG9ydCBNTklTVApmcm9tIHRvcmNodmlzaW9uLnRyYW5zZm9ybXMgaW1wb3J0IFRvVGVuc29yLCBSZXNpemUsIE5vcm1hbGl6ZSwgQ29tcG9zZQoKZnJvbSBtaWdodHkubG9zcyBpbXBvcnQgKgpmcm9tIG1pZ2h0eS5tb2RlbHMgaW1wb3J0IE1MUCwgQXV0b2VuY29kZXJMaW5lYXIKZnJvbSBtaWdodHkubW9uaXRvci5hY2N1cmFjeSBpbXBvcnQgQWNjdXJhY3lFbWJlZGRpbmcKZnJvbSBtaWdodHkubW9uaXRvci5tb25pdG9yIGltcG9ydCBNb25pdG9yTGV2ZWwKZnJvbSBtaWdodHkubW9uaXRvci5tdXR1YWxfaW5mbyBpbXBvcnQgTXV0dWFsSW5mb05QRUVUCmZyb20gbWlnaHR5LnRyYWluZXIgaW1wb3J0ICoKZnJvbSBtaWdodHkudXRpbHMuY29tbW9uIGltcG9ydCBzZXRfc2VlZApmcm9tIG1pZ2h0eS51dGlscy5kYXRhIGltcG9ydCBEYXRhTG9hZGVyCgoKY2xhc3MgTU5JU1RfU2hvcnQoTU5JU1QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5kYXRhWzoxMDAwXQogICAgICAgIHNlbGYudGFyZ2V0cyA9IHNlbGYudGFyZ2V0c1s6MTAwMF0KCgpjbGFzcyBUcmFpbmVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKICAgICAgICBvcy5lbnZpcm9uWydWSVNET01fU0VSVkVSJ10gPSAiaHR0cDovLzg1LjIxNy4xNzEuNTciCiAgICAgICAgb3MuZW52aXJvblsnVklTRE9NX1BPUlQnXSA9ICc4MDk2JwoKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBzZXRfc2VlZCgxKQogICAgICAgIHNlbGYubW9kZWwgPSBNTFAoMTk2LCA2NCwgMTApICAjIGlucHV0IDE0eDE0CiAgICAgICAgdHJhbnNmb3JtID0gQ29tcG9zZShbUmVzaXplKHNpemU9KDE0LCAxNCkpLCBUb1RlbnNvcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZShtZWFuPSgwLjEzMDcsKSwgc3RkPSgwLjMwODEsKSldKQogICAgICAgIHNlbGYuZGF0YV9sb2FkZXIgPSBEYXRhTG9hZGVyKE1OSVNUX1Nob3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoX3NpemU9MTI4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT10cmFuc2Zvcm0pCgogICAgICAgIHNlbGYub3B0aW1pemVyID0gdG9yY2gub3B0aW0uQWRhbSgKICAgICAgICAgICAgZmlsdGVyKGxhbWJkYSBwYXJhbTogcGFyYW0ucmVxdWlyZXNfZ3JhZCwgc2VsZi5tb2RlbC5wYXJhbWV0ZXJzKCkpLAogICAgICAgICAgICBscj0xZS0zLAogICAgICAgICAgICB3ZWlnaHRfZGVjYXk9MWUtNSkKICAgICAgICBzZWxmLnNjaGVkdWxlciA9IHRvcmNoLm9wdGltLmxyX3NjaGVkdWxlci5SZWR1Y2VMUk9uUGxhdGVhdSgKICAgICAgICAgICAgc2VsZi5vcHRpbWl6ZXIpCgogICAgZGVmIHRlc3RfVHJhaW5lckdyYWRfTXV0dWFsSW5mbyhzZWxmKToKICAgICAgICBzZXRfc2VlZCgyKQogICAgICAgIG1pX2hpc3RvcnkgPSBbXQoKICAgICAgICBjbGFzcyBNdXR1YWxJbmZvTlBFRVRfVGVzdChNdXR1YWxJbmZvTlBFRVQpOgogICAgICAgICAgICBkZWYgcGxvdChzZWxmX21pLCB2aXopOgogICAgICAgICAgICAgICAgbWlfaGlzdG9yeS5hcHBlbmQoc2VsZl9taS5pbmZvcm1hdGlvblsnbWxwLjInXSkKICAgICAgICAgICAgICAgIHN1cGVyKCkucGxvdCh2aXopCgogICAgICAgIGRhdGFfbG9hZGVyID0gRGF0YUxvYWRlcihNTklTVCwgZXZhbF9zaXplPTFfMDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09c2VsZi5kYXRhX2xvYWRlci50cmFuc2Zvcm0pCiAgICAgICAgdHJhaW5lciA9IFRyYWluZXJHcmFkKHNlbGYubW9kZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyaXRlcmlvbj1ubi5Dcm9zc0VudHJvcHlMb3NzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbG9hZGVyPWRhdGFfbG9hZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZXI9c2VsZi5vcHRpbWl6ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dHVhbF9pbmZvPU11dHVhbEluZm9OUEVFVF9UZXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9sb2FkZXI9ZGF0YV9sb2FkZXIsIHBjYV9zaXplPU5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZXI9c2VsZi5zY2hlZHVsZXIpCiAgICAgICAgdHJhaW5lci5lbnZfbmFtZSA9ICJweXRvcmNoLW1pZ2h0eSB0ZXN0cyIKICAgICAgICB0cmFpbmVyLm1vbml0b3IuYWR2YW5jZWRfbW9uaXRvcmluZyhsZXZlbD1Nb25pdG9yTGV2ZWwuRlVMTCkKICAgICAgICB0cmFpbmVyLnRpbWVyLmJhdGNoZXNfaW5fZXBvY2ggPSA1CiAgICAgICAgbG9zc19lcG9jaHMgPSB0cmFpbmVyLnRyYWluKG5fZXBvY2hzPTEsIG11dHVhbF9pbmZvX2xheWVycz0xKQogICAgICAgIGFzc2VydF9hcnJheV9hbG1vc3RfZXF1YWwobG9zc19lcG9jaHMsIFswLjM1XSwgZGVjaW1hbD0yKQogICAgICAgIG1pX2hpc3RvcnkgPSBucC52c3RhY2sobWlfaGlzdG9yeSkKICAgICAgICBhc3NlcnRfYXJyYXlfbGVzcygwLCBtaV9oaXN0b3J5KQogICAgICAgIHhfbGFzdCwgeV9sYXN0ID0gbWlfaGlzdG9yeVstMV0KCiAgICAgICAgIyBUaGUgbW9kZWwgaXMgd2VsbCB0cmFpbmVkLCBob3dldmVyIHRoZSBlc3RpbWF0ZSBzaXplIGlzIHNtYWxsLgogICAgICAgICMgSW4gdGhlb3J5LCBJKC47WSkgPD0gSSguO1gpIG11c3QgYmUgc2F0aXNmaWVkLgogICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcih5X2xhc3QsIDIuNSkKICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoeF9sYXN0LCAxLjMpCiAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoeF9sYXN0LCB5X2xhc3QpCgogICAgICAgIHRyYWluZXIuc2F2ZSgpCiAgICAgICAgdHJhaW5lci5yZXN0b3JlKCkKCiAgICBkZWYgdGVzdF9UcmFpbmVyRW1iZWRkaW5nKHNlbGYpOgogICAgICAgIG9zLmVudmlyb25bJ0NVREFfVklTSUJMRV9ERVZJQ0VTJ10gPSAnJwogICAgICAgIHNldF9zZWVkKDMpCiAgICAgICAgY3JpdGVyaW9uID0gVHJpcGxldExvc3NTYW1wbGVyKG5uLlRyaXBsZXRNYXJnaW5Mb3NzKCkpCiAgICAgICAgdHJhaW5lciA9IFRyYWluZXJFbWJlZGRpbmcoc2VsZi5tb2RlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcml0ZXJpb249Y3JpdGVyaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbG9hZGVyPXNlbGYuZGF0YV9sb2FkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemVyPXNlbGYub3B0aW1pemVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlcj1zZWxmLnNjaGVkdWxlcikKICAgICAgICB0cmFpbmVyLmVudl9uYW1lID0gInB5dG9yY2gtbWlnaHR5IHRlc3RzIgogICAgICAgIGxvc3NfZXBvY2hzID0gdHJhaW5lci50cmFpbihuX2Vwb2Nocz0xLCBtdXR1YWxfaW5mb19sYXllcnM9MCkKICAgICAgICBhc3NlcnRfYXJyYXlfYWxtb3N0X2VxdWFsKGxvc3NfZXBvY2hzLCBbMC41OF0sIGRlY2ltYWw9MSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWluZXIudGltZXIubl9lcG9jaHMsIDEpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFpbmVyLnRpbWVyLmVwb2NoLCAxKQoKICAgIGRlZiB0ZXN0X1RyYWluZXJFbWJlZGRpbmdfY2FjaGVkKHNlbGYpOgogICAgICAgIHNldF9zZWVkKDMpCiAgICAgICAgY3JpdGVyaW9uID0gVHJpcGxldExvc3NTYW1wbGVyKG5uLlRyaXBsZXRNYXJnaW5Mb3NzKCkpCiAgICAgICAgdHJhaW5lciA9IFRyYWluZXJFbWJlZGRpbmcoc2VsZi5tb2RlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcml0ZXJpb249Y3JpdGVyaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbG9hZGVyPXNlbGYuZGF0YV9sb2FkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemVyPXNlbGYub3B0aW1pemVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlcj1zZWxmLnNjaGVkdWxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2N1cmFjeV9tZWFzdXJlPUFjY3VyYWN5RW1iZWRkaW5nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZT1UcnVlKSkKICAgICAgICB0cmFpbmVyLmVudl9uYW1lID0gInB5dG9yY2gtbWlnaHR5IHRlc3RzIgogICAgICAgIHRyYWluZXIub3Blbl9tb25pdG9yKG9mZmxpbmU9VHJ1ZSkKCiAgICAgICAgIyBUcmlwbGV0TG9zcyBpcyBub3QgZGV0ZXJtaW5pc3RpYzsgZml4IHRoZSBzZWVkCiAgICAgICAgc2V0X3NlZWQoNCkKICAgICAgICBsb3NzX2NhY2hlZCA9IHRyYWluZXIuZnVsbF9mb3J3YXJkX3Bhc3ModHJhaW49VHJ1ZSkKICAgICAgICBhY2N1cmFjeV9jYWNoZWQgPSB0cmFpbmVyLnVwZGF0ZV9hY2N1cmFjeSh0cmFpbj1UcnVlKQoKICAgICAgICB0cmFpbmVyLmFjY3VyYWN5X21lYXN1cmUuY2FjaGUgPSBGYWxzZQogICAgICAgIHRyYWluZXIuYWNjdXJhY3lfbWVhc3VyZS5yZXNldCgpCgogICAgICAgIHNldF9zZWVkKDQpCiAgICAgICAgbG9zcyA9IHRyYWluZXIuZnVsbF9mb3J3YXJkX3Bhc3ModHJhaW49VHJ1ZSkKICAgICAgICBhY2N1cmFjeSA9IHRyYWluZXIudXBkYXRlX2FjY3VyYWN5KHRyYWluPVRydWUpCjx8ZmltX2hvbGV8PgogICAgZGVmIHRlc3RfVHJhaW5lckF1dG9lbmNvZGVyKHNlbGYpOgogICAgICAgIHNldF9zZWVkKDQpCiAgICAgICAgbW9kZWwgPSBBdXRvZW5jb2RlckxpbmVhcigxOTYsIDY0KQogICAgICAgIHRyYWluZXIgPSBUcmFpbmVyQXV0b2VuY29kZXIobW9kZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcml0ZXJpb249bm4uQkNFV2l0aExvZ2l0c0xvc3MoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbG9hZGVyPXNlbGYuZGF0YV9sb2FkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZXI9c2VsZi5vcHRpbWl6ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZXI9c2VsZi5zY2hlZHVsZXIpCiAgICAgICAgdHJhaW5lci5lbnZfbmFtZSA9ICJweXRvcmNoLW1pZ2h0eSB0ZXN0cyIKICAgICAgICBsb3NzX2Vwb2NocyA9IHRyYWluZXIudHJhaW4obl9lcG9jaHM9MSwgbXV0dWFsX2luZm9fbGF5ZXJzPTApCiAgICAgICAgYXNzZXJ0X2FycmF5X2FsbW9zdF9lcXVhbChsb3NzX2Vwb2NocywgWzAuNzA1XSwgZGVjaW1hbD0zKQoKICAgIGRlZiB0ZXN0X1RyYWluZXJBdXRvZW5jb2Rlcl9jYWNoZWQoc2VsZik6CiAgICAgICAgc2V0X3NlZWQoMykKICAgICAgICBtb2RlbCA9IEF1dG9lbmNvZGVyTGluZWFyKDE5NiwgNjQpCiAgICAgICAgdHJhaW5lciA9IFRyYWluZXJBdXRvZW5jb2Rlcihtb2RlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyaXRlcmlvbj1ubi5CQ0VXaXRoTG9naXRzTG9zcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9sb2FkZXI9c2VsZi5kYXRhX2xvYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGltaXplcj1zZWxmLm9wdGltaXplciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlcj1zZWxmLnNjaGVkdWxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY3VyYWN5X21lYXN1cmU9QWNjdXJhY3lFbWJlZGRpbmcoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGU9VHJ1ZSkpCiAgICAgICAgdHJhaW5lci5vcGVuX21vbml0b3Iob2ZmbGluZT1UcnVlKQoKICAgICAgICAjIFRyaXBsZXRMb3NzIGlzIG5vdCBkZXRlcm1pbmlzdGljOyBmaXggdGhlIHNlZWQKICAgICAgICBzZXRfc2VlZCg0KQogICAgICAgIGxvc3NfY2FjaGVkID0gdHJhaW5lci5mdWxsX2ZvcndhcmRfcGFzcyh0cmFpbj1UcnVlKQogICAgICAgIGFjY3VyYWN5X2NhY2hlZCA9IHRyYWluZXIudXBkYXRlX2FjY3VyYWN5KHRyYWluPVRydWUpCgogICAgICAgIHRyYWluZXIuYWNjdXJhY3lfbWVhc3VyZS5jYWNoZSA9IEZhbHNlCiAgICAgICAgdHJhaW5lci5hY2N1cmFjeV9tZWFzdXJlLnJlc2V0KCkKCiAgICAgICAgc2V0X3NlZWQoNCkKICAgICAgICBsb3NzID0gdHJhaW5lci5mdWxsX2ZvcndhcmRfcGFzcyh0cmFpbj1UcnVlKQogICAgICAgIGFjY3VyYWN5ID0gdHJhaW5lci51cGRhdGVfYWNjdXJhY3kodHJhaW49VHJ1ZSkKCiAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChsb3NzX2NhY2hlZC5pdGVtKCksIGxvc3MuaXRlbSgpKQogICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoYWNjdXJhY3lfY2FjaGVkLCBhY2N1cmFjeSkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdW5pdHRlc3QubWFpbigpCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwobG9zc19jYWNoZWQuaXRlbSgpLCBsb3NzLml0ZW0oKSkKICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGFjY3VyYWN5X2NhY2hlZCwgYWNjdXJhY3kpCgo8fGZpbV9lbmR8Pg=="]
["6bcf48b4935a1b173316b947bdfe692eb685e9ed-4","6bcf48b4935a1b173316b947bdfe692eb685e9ed","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCB1bml0dGVzdAoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KZnJvbSBudW1weS50ZXN0aW5nIGltcG9ydCBhc3NlcnRfYXJyYXlfYWxtb3N0X2VxdWFsLCBhc3NlcnRfYXJyYXlfbGVzcwpmcm9tIHRvcmNodmlzaW9uLmRhdGFzZXRzIGltcG9ydCBNTklTVApmcm9tIHRvcmNodmlzaW9uLnRyYW5zZm9ybXMgaW1wb3J0IFRvVGVuc29yLCBSZXNpemUsIE5vcm1hbGl6ZSwgQ29tcG9zZQoKZnJvbSBtaWdodHkubG9zcyBpbXBvcnQgKgpmcm9tIG1pZ2h0eS5tb2RlbHMgaW1wb3J0IE1MUCwgQXV0b2VuY29kZXJMaW5lYXIKZnJvbSBtaWdodHkubW9uaXRvci5hY2N1cmFjeSBpbXBvcnQgQWNjdXJhY3lFbWJlZGRpbmcKZnJvbSBtaWdodHkubW9uaXRvci5tb25pdG9yIGltcG9ydCBNb25pdG9yTGV2ZWwKZnJvbSBtaWdodHkubW9uaXRvci5tdXR1YWxfaW5mbyBpbXBvcnQgTXV0dWFsSW5mb05QRUVUCmZyb20gbWlnaHR5LnRyYWluZXIgaW1wb3J0ICoKZnJvbSBtaWdodHkudXRpbHMuY29tbW9uIGltcG9ydCBzZXRfc2VlZApmcm9tIG1pZ2h0eS51dGlscy5kYXRhIGltcG9ydCBEYXRhTG9hZGVyCgoKY2xhc3MgTU5JU1RfU2hvcnQoTU5JU1QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5kYXRhWzoxMDAwXQogICAgICAgIHNlbGYudGFyZ2V0cyA9IHNlbGYudGFyZ2V0c1s6MTAwMF0KCgpjbGFzcyBUcmFpbmVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKICAgICAgICBvcy5lbnZpcm9uWydWSVNET01fU0VSVkVSJ10gPSAiaHR0cDovLzg1LjIxNy4xNzEuNTciCiAgICAgICAgb3MuZW52aXJvblsnVklTRE9NX1BPUlQnXSA9ICc4MDk2JwoKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBzZXRfc2VlZCgxKQogICAgICAgIHNlbGYubW9kZWwgPSBNTFAoMTk2LCA2NCwgMTApICAjIGlucHV0IDE0eDE0CiAgICAgICAgdHJhbnNmb3JtID0gQ29tcG9zZShbUmVzaXplKHNpemU9KDE0LCAxNCkpLCBUb1RlbnNvcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZShtZWFuPSgwLjEzMDcsKSwgc3RkPSgwLjMwODEsKSldKQogICAgICAgIHNlbGYuZGF0YV9sb2FkZXIgPSBEYXRhTG9hZGVyKE1OSVNUX1Nob3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoX3NpemU9MTI4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT10cmFuc2Zvcm0pCgogICAgICAgIHNlbGYub3B0aW1pemVyID0gdG9yY2gub3B0aW0uQWRhbSgKICAgICAgICAgICAgZmlsdGVyKGxhbWJkYSBwYXJhbTogcGFyYW0ucmVxdWlyZXNfZ3JhZCwgc2VsZi5tb2RlbC5wYXJhbWV0ZXJzKCkpLAogICAgICAgICAgICBscj0xZS0zLAogICAgICAgICAgICB3ZWlnaHRfZGVjYXk9MWUtNSkKICAgICAgICBzZWxmLnNjaGVkdWxlciA9IHRvcmNoLm9wdGltLmxyX3NjaGVkdWxlci5SZWR1Y2VMUk9uUGxhdGVhdSgKICAgICAgICAgICAgc2VsZi5vcHRpbWl6ZXIpCgogICAgZGVmIHRlc3RfVHJhaW5lckdyYWRfTXV0dWFsSW5mbyhzZWxmKToKICAgICAgICBzZXRfc2VlZCgyKQogICAgICAgIG1pX2hpc3RvcnkgPSBbXQoKPHxmaW1faG9sZXw+CgogICAgICAgIGRhdGFfbG9hZGVyID0gRGF0YUxvYWRlcihNTklTVCwgZXZhbF9zaXplPTFfMDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09c2VsZi5kYXRhX2xvYWRlci50cmFuc2Zvcm0pCiAgICAgICAgdHJhaW5lciA9IFRyYWluZXJHcmFkKHNlbGYubW9kZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyaXRlcmlvbj1ubi5Dcm9zc0VudHJvcHlMb3NzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbG9hZGVyPWRhdGFfbG9hZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZXI9c2VsZi5vcHRpbWl6ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dHVhbF9pbmZvPU11dHVhbEluZm9OUEVFVF9UZXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9sb2FkZXI9ZGF0YV9sb2FkZXIsIHBjYV9zaXplPU5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZXI9c2VsZi5zY2hlZHVsZXIpCiAgICAgICAgdHJhaW5lci5lbnZfbmFtZSA9ICJweXRvcmNoLW1pZ2h0eSB0ZXN0cyIKICAgICAgICB0cmFpbmVyLm1vbml0b3IuYWR2YW5jZWRfbW9uaXRvcmluZyhsZXZlbD1Nb25pdG9yTGV2ZWwuRlVMTCkKICAgICAgICB0cmFpbmVyLnRpbWVyLmJhdGNoZXNfaW5fZXBvY2ggPSA1CiAgICAgICAgbG9zc19lcG9jaHMgPSB0cmFpbmVyLnRyYWluKG5fZXBvY2hzPTEsIG11dHVhbF9pbmZvX2xheWVycz0xKQogICAgICAgIGFzc2VydF9hcnJheV9hbG1vc3RfZXF1YWwobG9zc19lcG9jaHMsIFswLjM1XSwgZGVjaW1hbD0yKQogICAgICAgIG1pX2hpc3RvcnkgPSBucC52c3RhY2sobWlfaGlzdG9yeSkKICAgICAgICBhc3NlcnRfYXJyYXlfbGVzcygwLCBtaV9oaXN0b3J5KQogICAgICAgIHhfbGFzdCwgeV9sYXN0ID0gbWlfaGlzdG9yeVstMV0KCiAgICAgICAgIyBUaGUgbW9kZWwgaXMgd2VsbCB0cmFpbmVkLCBob3dldmVyIHRoZSBlc3RpbWF0ZSBzaXplIGlzIHNtYWxsLgogICAgICAgICMgSW4gdGhlb3J5LCBJKC47WSkgPD0gSSguO1gpIG11c3QgYmUgc2F0aXNmaWVkLgogICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcih5X2xhc3QsIDIuNSkKICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoeF9sYXN0LCAxLjMpCiAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoeF9sYXN0LCB5X2xhc3QpCgogICAgICAgIHRyYWluZXIuc2F2ZSgpCiAgICAgICAgdHJhaW5lci5yZXN0b3JlKCkKCiAgICBkZWYgdGVzdF9UcmFpbmVyRW1iZWRkaW5nKHNlbGYpOgogICAgICAgIG9zLmVudmlyb25bJ0NVREFfVklTSUJMRV9ERVZJQ0VTJ10gPSAnJwogICAgICAgIHNldF9zZWVkKDMpCiAgICAgICAgY3JpdGVyaW9uID0gVHJpcGxldExvc3NTYW1wbGVyKG5uLlRyaXBsZXRNYXJnaW5Mb3NzKCkpCiAgICAgICAgdHJhaW5lciA9IFRyYWluZXJFbWJlZGRpbmcoc2VsZi5tb2RlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcml0ZXJpb249Y3JpdGVyaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbG9hZGVyPXNlbGYuZGF0YV9sb2FkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemVyPXNlbGYub3B0aW1pemVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlcj1zZWxmLnNjaGVkdWxlcikKICAgICAgICB0cmFpbmVyLmVudl9uYW1lID0gInB5dG9yY2gtbWlnaHR5IHRlc3RzIgogICAgICAgIGxvc3NfZXBvY2hzID0gdHJhaW5lci50cmFpbihuX2Vwb2Nocz0xLCBtdXR1YWxfaW5mb19sYXllcnM9MCkKICAgICAgICBhc3NlcnRfYXJyYXlfYWxtb3N0X2VxdWFsKGxvc3NfZXBvY2hzLCBbMC41OF0sIGRlY2ltYWw9MSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWluZXIudGltZXIubl9lcG9jaHMsIDEpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFpbmVyLnRpbWVyLmVwb2NoLCAxKQoKICAgIGRlZiB0ZXN0X1RyYWluZXJFbWJlZGRpbmdfY2FjaGVkKHNlbGYpOgogICAgICAgIHNldF9zZWVkKDMpCiAgICAgICAgY3JpdGVyaW9uID0gVHJpcGxldExvc3NTYW1wbGVyKG5uLlRyaXBsZXRNYXJnaW5Mb3NzKCkpCiAgICAgICAgdHJhaW5lciA9IFRyYWluZXJFbWJlZGRpbmcoc2VsZi5tb2RlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcml0ZXJpb249Y3JpdGVyaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbG9hZGVyPXNlbGYuZGF0YV9sb2FkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemVyPXNlbGYub3B0aW1pemVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlcj1zZWxmLnNjaGVkdWxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2N1cmFjeV9tZWFzdXJlPUFjY3VyYWN5RW1iZWRkaW5nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZT1UcnVlKSkKICAgICAgICB0cmFpbmVyLmVudl9uYW1lID0gInB5dG9yY2gtbWlnaHR5IHRlc3RzIgogICAgICAgIHRyYWluZXIub3Blbl9tb25pdG9yKG9mZmxpbmU9VHJ1ZSkKCiAgICAgICAgIyBUcmlwbGV0TG9zcyBpcyBub3QgZGV0ZXJtaW5pc3RpYzsgZml4IHRoZSBzZWVkCiAgICAgICAgc2V0X3NlZWQoNCkKICAgICAgICBsb3NzX2NhY2hlZCA9IHRyYWluZXIuZnVsbF9mb3J3YXJkX3Bhc3ModHJhaW49VHJ1ZSkKICAgICAgICBhY2N1cmFjeV9jYWNoZWQgPSB0cmFpbmVyLnVwZGF0ZV9hY2N1cmFjeSh0cmFpbj1UcnVlKQoKICAgICAgICB0cmFpbmVyLmFjY3VyYWN5X21lYXN1cmUuY2FjaGUgPSBGYWxzZQogICAgICAgIHRyYWluZXIuYWNjdXJhY3lfbWVhc3VyZS5yZXNldCgpCgogICAgICAgIHNldF9zZWVkKDQpCiAgICAgICAgbG9zcyA9IHRyYWluZXIuZnVsbF9mb3J3YXJkX3Bhc3ModHJhaW49VHJ1ZSkKICAgICAgICBhY2N1cmFjeSA9IHRyYWluZXIudXBkYXRlX2FjY3VyYWN5KHRyYWluPVRydWUpCgogICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwobG9zc19jYWNoZWQuaXRlbSgpLCBsb3NzLml0ZW0oKSkKICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGFjY3VyYWN5X2NhY2hlZCwgYWNjdXJhY3kpCgogICAgZGVmIHRlc3RfVHJhaW5lckF1dG9lbmNvZGVyKHNlbGYpOgogICAgICAgIHNldF9zZWVkKDQpCiAgICAgICAgbW9kZWwgPSBBdXRvZW5jb2RlckxpbmVhcigxOTYsIDY0KQogICAgICAgIHRyYWluZXIgPSBUcmFpbmVyQXV0b2VuY29kZXIobW9kZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcml0ZXJpb249bm4uQkNFV2l0aExvZ2l0c0xvc3MoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbG9hZGVyPXNlbGYuZGF0YV9sb2FkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZXI9c2VsZi5vcHRpbWl6ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZXI9c2VsZi5zY2hlZHVsZXIpCiAgICAgICAgdHJhaW5lci5lbnZfbmFtZSA9ICJweXRvcmNoLW1pZ2h0eSB0ZXN0cyIKICAgICAgICBsb3NzX2Vwb2NocyA9IHRyYWluZXIudHJhaW4obl9lcG9jaHM9MSwgbXV0dWFsX2luZm9fbGF5ZXJzPTApCiAgICAgICAgYXNzZXJ0X2FycmF5X2FsbW9zdF9lcXVhbChsb3NzX2Vwb2NocywgWzAuNzA1XSwgZGVjaW1hbD0zKQoKICAgIGRlZiB0ZXN0X1RyYWluZXJBdXRvZW5jb2Rlcl9jYWNoZWQoc2VsZik6CiAgICAgICAgc2V0X3NlZWQoMykKICAgICAgICBtb2RlbCA9IEF1dG9lbmNvZGVyTGluZWFyKDE5NiwgNjQpCiAgICAgICAgdHJhaW5lciA9IFRyYWluZXJBdXRvZW5jb2Rlcihtb2RlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyaXRlcmlvbj1ubi5CQ0VXaXRoTG9naXRzTG9zcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9sb2FkZXI9c2VsZi5kYXRhX2xvYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGltaXplcj1zZWxmLm9wdGltaXplciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlcj1zZWxmLnNjaGVkdWxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY3VyYWN5X21lYXN1cmU9QWNjdXJhY3lFbWJlZGRpbmcoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGU9VHJ1ZSkpCiAgICAgICAgdHJhaW5lci5vcGVuX21vbml0b3Iob2ZmbGluZT1UcnVlKQoKICAgICAgICAjIFRyaXBsZXRMb3NzIGlzIG5vdCBkZXRlcm1pbmlzdGljOyBmaXggdGhlIHNlZWQKICAgICAgICBzZXRfc2VlZCg0KQogICAgICAgIGxvc3NfY2FjaGVkID0gdHJhaW5lci5mdWxsX2ZvcndhcmRfcGFzcyh0cmFpbj1UcnVlKQogICAgICAgIGFjY3VyYWN5X2NhY2hlZCA9IHRyYWluZXIudXBkYXRlX2FjY3VyYWN5KHRyYWluPVRydWUpCgogICAgICAgIHRyYWluZXIuYWNjdXJhY3lfbWVhc3VyZS5jYWNoZSA9IEZhbHNlCiAgICAgICAgdHJhaW5lci5hY2N1cmFjeV9tZWFzdXJlLnJlc2V0KCkKCiAgICAgICAgc2V0X3NlZWQoNCkKICAgICAgICBsb3NzID0gdHJhaW5lci5mdWxsX2ZvcndhcmRfcGFzcyh0cmFpbj1UcnVlKQogICAgICAgIGFjY3VyYWN5ID0gdHJhaW5lci51cGRhdGVfYWNjdXJhY3kodHJhaW49VHJ1ZSkKCiAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChsb3NzX2NhY2hlZC5pdGVtKCksIGxvc3MuaXRlbSgpKQogICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoYWNjdXJhY3lfY2FjaGVkLCBhY2N1cmFjeSkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdW5pdHRlc3QubWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgY2xhc3MgTXV0dWFsSW5mb05QRUVUX1Rlc3QoTXV0dWFsSW5mb05QRUVUKToKICAgICAgICAgICAgZGVmIHBsb3Qoc2VsZl9taSwgdml6KToKICAgICAgICAgICAgICAgIG1pX2hpc3RvcnkuYXBwZW5kKHNlbGZfbWkuaW5mb3JtYXRpb25bJ21scC4yJ10pCiAgICAgICAgICAgICAgICBzdXBlcigpLnBsb3Qodml6KQo8fGZpbV9lbmR8Pg=="]
["6bcf48b4935a1b173316b947bdfe692eb685e9ed-5","6bcf48b4935a1b173316b947bdfe692eb685e9ed","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCB1bml0dGVzdAoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KZnJvbSBudW1weS50ZXN0aW5nIGltcG9ydCBhc3NlcnRfYXJyYXlfYWxtb3N0X2VxdWFsLCBhc3NlcnRfYXJyYXlfbGVzcwpmcm9tIHRvcmNodmlzaW9uLmRhdGFzZXRzIGltcG9ydCBNTklTVApmcm9tIHRvcmNodmlzaW9uLnRyYW5zZm9ybXMgaW1wb3J0IFRvVGVuc29yLCBSZXNpemUsIE5vcm1hbGl6ZSwgQ29tcG9zZQoKZnJvbSBtaWdodHkubG9zcyBpbXBvcnQgKgpmcm9tIG1pZ2h0eS5tb2RlbHMgaW1wb3J0IE1MUCwgQXV0b2VuY29kZXJMaW5lYXIKZnJvbSBtaWdodHkubW9uaXRvci5hY2N1cmFjeSBpbXBvcnQgQWNjdXJhY3lFbWJlZGRpbmcKZnJvbSBtaWdodHkubW9uaXRvci5tb25pdG9yIGltcG9ydCBNb25pdG9yTGV2ZWwKZnJvbSBtaWdodHkubW9uaXRvci5tdXR1YWxfaW5mbyBpbXBvcnQgTXV0dWFsSW5mb05QRUVUCmZyb20gbWlnaHR5LnRyYWluZXIgaW1wb3J0ICoKZnJvbSBtaWdodHkudXRpbHMuY29tbW9uIGltcG9ydCBzZXRfc2VlZApmcm9tIG1pZ2h0eS51dGlscy5kYXRhIGltcG9ydCBEYXRhTG9hZGVyCgoKY2xhc3MgTU5JU1RfU2hvcnQoTU5JU1QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5kYXRhWzoxMDAwXQogICAgICAgIHNlbGYudGFyZ2V0cyA9IHNlbGYudGFyZ2V0c1s6MTAwMF0KCgpjbGFzcyBUcmFpbmVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKICAgICAgICBvcy5lbnZpcm9uWydWSVNET01fU0VSVkVSJ10gPSAiaHR0cDovLzg1LjIxNy4xNzEuNTciCiAgICAgICAgb3MuZW52aXJvblsnVklTRE9NX1BPUlQnXSA9ICc4MDk2JwoKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBzZXRfc2VlZCgxKQogICAgICAgIHNlbGYubW9kZWwgPSBNTFAoMTk2LCA2NCwgMTApICAjIGlucHV0IDE0eDE0CiAgICAgICAgdHJhbnNmb3JtID0gQ29tcG9zZShbUmVzaXplKHNpemU9KDE0LCAxNCkpLCBUb1RlbnNvcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZShtZWFuPSgwLjEzMDcsKSwgc3RkPSgwLjMwODEsKSldKQogICAgICAgIHNlbGYuZGF0YV9sb2FkZXIgPSBEYXRhTG9hZGVyKE1OSVNUX1Nob3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoX3NpemU9MTI4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT10cmFuc2Zvcm0pCgogICAgICAgIHNlbGYub3B0aW1pemVyID0gdG9yY2gub3B0aW0uQWRhbSgKICAgICAgICAgICAgZmlsdGVyKGxhbWJkYSBwYXJhbTogcGFyYW0ucmVxdWlyZXNfZ3JhZCwgc2VsZi5tb2RlbC5wYXJhbWV0ZXJzKCkpLAogICAgICAgICAgICBscj0xZS0zLAogICAgICAgICAgICB3ZWlnaHRfZGVjYXk9MWUtNSkKICAgICAgICBzZWxmLnNjaGVkdWxlciA9IHRvcmNoLm9wdGltLmxyX3NjaGVkdWxlci5SZWR1Y2VMUk9uUGxhdGVhdSgKICAgICAgICAgICAgc2VsZi5vcHRpbWl6ZXIpCgogICAgZGVmIHRlc3RfVHJhaW5lckdyYWRfTXV0dWFsSW5mbyhzZWxmKToKICAgICAgICBzZXRfc2VlZCgyKQogICAgICAgIG1pX2hpc3RvcnkgPSBbXQoKICAgICAgICBjbGFzcyBNdXR1YWxJbmZvTlBFRVRfVGVzdChNdXR1YWxJbmZvTlBFRVQpOgogICAgICAgICAgICBkZWYgcGxvdChzZWxmX21pLCB2aXopOgogICAgICAgICAgICAgICAgbWlfaGlzdG9yeS5hcHBlbmQoc2VsZl9taS5pbmZvcm1hdGlvblsnbWxwLjInXSkKICAgICAgICAgICAgICAgIHN1cGVyKCkucGxvdCh2aXopCgogICAgICAgIGRhdGFfbG9hZGVyID0gRGF0YUxvYWRlcihNTklTVCwgZXZhbF9zaXplPTFfMDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09c2VsZi5kYXRhX2xvYWRlci50cmFuc2Zvcm0pCiAgICAgICAgdHJhaW5lciA9IFRyYWluZXJHcmFkKHNlbGYubW9kZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyaXRlcmlvbj1ubi5Dcm9zc0VudHJvcHlMb3NzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbG9hZGVyPWRhdGFfbG9hZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZXI9c2VsZi5vcHRpbWl6ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dHVhbF9pbmZvPU11dHVhbEluZm9OUEVFVF9UZXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9sb2FkZXI9ZGF0YV9sb2FkZXIsIHBjYV9zaXplPU5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZXI9c2VsZi5zY2hlZHVsZXIpCiAgICAgICAgdHJhaW5lci5lbnZfbmFtZSA9ICJweXRvcmNoLW1pZ2h0eSB0ZXN0cyIKICAgICAgICB0cmFpbmVyLm1vbml0b3IuYWR2YW5jZWRfbW9uaXRvcmluZyhsZXZlbD1Nb25pdG9yTGV2ZWwuRlVMTCkKICAgICAgICB0cmFpbmVyLnRpbWVyLmJhdGNoZXNfaW5fZXBvY2ggPSA1CiAgICAgICAgbG9zc19lcG9jaHMgPSB0cmFpbmVyLnRyYWluKG5fZXBvY2hzPTEsIG11dHVhbF9pbmZvX2xheWVycz0xKQogICAgICAgIGFzc2VydF9hcnJheV9hbG1vc3RfZXF1YWwobG9zc19lcG9jaHMsIFswLjM1XSwgZGVjaW1hbD0yKQogICAgICAgIG1pX2hpc3RvcnkgPSBucC52c3RhY2sobWlfaGlzdG9yeSkKICAgICAgICBhc3NlcnRfYXJyYXlfbGVzcygwLCBtaV9oaXN0b3J5KQogICAgICAgIHhfbGFzdCwgeV9sYXN0ID0gbWlfaGlzdG9yeVstMV0KCiAgICAgICAgIyBUaGUgbW9kZWwgaXMgd2VsbCB0cmFpbmVkLCBob3dldmVyIHRoZSBlc3RpbWF0ZSBzaXplIGlzIHNtYWxsLgogICAgICAgICMgSW4gdGhlb3J5LCBJKC47WSkgPD0gSSguO1gpIG11c3QgYmUgc2F0aXNmaWVkLgogICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcih5X2xhc3QsIDIuNSkKICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoeF9sYXN0LCAxLjMpCiAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoeF9sYXN0LCB5X2xhc3QpCgogICAgICAgIHRyYWluZXIuc2F2ZSgpCiAgICAgICAgdHJhaW5lci5yZXN0b3JlKCkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiB0ZXN0X1RyYWluZXJFbWJlZGRpbmcoc2VsZik6CiAgICAgICAgb3MuZW52aXJvblsnQ1VEQV9WSVNJQkxFX0RFVklDRVMnXSA9ICcnCiAgICAgICAgc2V0X3NlZWQoMykKICAgICAgICBjcml0ZXJpb24gPSBUcmlwbGV0TG9zc1NhbXBsZXIobm4uVHJpcGxldE1hcmdpbkxvc3MoKSkKPHxmaW1fZW5kfD4="]
["ec1abcadf39661561607f9705f48b8f0acd0443d-1","ec1abcadf39661561607f9705f48b8f0acd0443d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCmltcG9ydCB0aW1lCgoKZGVmIHRpbWVyKCk6CiAgICB0aW1lLnNsZWVwKDAuMzYpCgoKZGVmIGdldF9udW1lcmljX2lkKGlkLCB0b2tlbiwgdik6CiAgICBpZiBpZC5pc251bWVyaWMoKToKICAgICAgICByZXR1cm4gaWQKICAgIGVsc2U6CiAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3RzLnBvc3QoImh0dHBzOi8vYXBpLnZrLmNvbS9tZXRob2QvdXNlcnMuZ2V0IiwgZGF0YT17CiAgICAgICAgICAgICJ1c2VyX2lkcyI6IGlkLAogICAgICAgICAgICAiYWNjZXNzX3Rva2VuIjogdG9rZW4sCiAgICAgICAgICAgICJ2Ijogdn0pLmpzb24oKQogICAgICAgIGlmICJyZXNwb25zZSIgaW4gcmVxdWVzdDoKICAgICAgICAgICAgdGltZXIoKQogICAgICAgICAgICByZXR1cm4gcmVxdWVzdFsicmVzcG9uc2UiXVswXVsiaWQiXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGV4aXQoIkVSUk9SIENPREUgIiArIHN0cihyZXF1ZXN0WyJlcnJvciJdWyJlcnJvcl9jb2RlIl0pICsgIjogIiArIHJlcXVlc3RbImVycm9yIl1bImVycm9yX21zZyJdKQoKCmRlZiBkb2NzX2dldChpZCwgdG9rZW4sIHYpOgogICAgb2Zmc2V0ID0gMAogICAgcmVxdWVzdHNfYWxsID0gW10KICAgIHdoaWxlIFRydWU6CiAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3RzLnBvc3QoImh0dHBzOi8vYXBpLnZrLmNvbS9tZXRob2QvZG9jcy5nZXQiLCBkYXRhPXsKICAgICAgICAgICAgImNvdW50IjogMjAwMCwKICAgICAgICAgICAgIm9mZnNldCI6IG9mZnNldCwKICAgICAgICAgICAgIm93bmVyX2lkIjogaWQsCiAgICAgICAgICAgICJyZXR1cm5fdGFncyI6IDEsCiAgICAgICAgICAgICJhY2Nlc3NfdG9rZW4iOiB0b2tlbiwKICAgICAgICAgICAgInYiOiB2fSkuanNvbigpCiAgICAgICAgcHJpbnQocmVxdWVzdCkKICAgICAgICBpZiAicmVzcG9uc2UiIGluIHJlcXVlc3QgYW5kIGxlbihyZXF1ZXN0WyJyZXNwb25zZSJdWyJpdGVtcyJdKSA+IDA6CiAgICAgICAgICAgIGZvciBrIGluIHJlcXVlc3RbInJlc3BvbnNlIl1bIml0ZW1zIl06CiAgICAgICAgICAgICAgICByZXF1ZXN0c19hbGwuYXBwZW5kKGspCiAgICAgICAgICAgIG9mZnNldCArPSAxOTk5CiAgICAgICAgICAgIHRpbWVyKCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludChyZXF1ZXN0KQogICAgICAgICAgICB0aW1lcigpCiAgICAgICAgICAgIGJyZWFrCiAgICByZXR1cm4gcmVxdWVzdHNfYWxsCgoKZGVmIGZyaWVuZHNfZ2V0KGlkLCB0b2tlbiwgdik6CiAgICBvZmZzZXQgPSAwCiAgICByZXF1ZXN0c19hbGwgPSBbXQogICAgd2hpbGUgVHJ1ZToKICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdHMucG9zdCgiaHR0cHM6Ly9hcGkudmsuY29tL21ldGhvZC9mcmllbmRzLmdldCIsIGRhdGE9ewogICAgICAgICAgICAidXNlcl9pZCI6IGlkLAogICAgICAgICAgICAib3JkZXIiOiAibmFtZSIsCiAgICAgICAgICAgICJjb3VudCI6IDUwMDAsCiAgICAgICAgICAgICJvZmZzZXQiOiBvZmZzZXQsCiAgICAgICAgICAgICJmaWVsZHMiOiAidWlkLGZpcnN0X25hbWUsbGFzdF9uYW1lLGRlYWN0aXZhdGVkLHNleCxiZGF0ZSxjaXR5LGNvdW50cnksaG9tZV90b3duLCIKICAgICAgICAgICAgICAgICAgICAgICJwaG90b19tYXgscGhvdG9fbWF4X29yaWcsb25saW5lLGxpc3RzLHNjcmVlbl9uYW1lLCIKICAgICAgICAgICAgICAgICAgICAgICJkb21haW4saGFzX21vYmlsZSxjb250YWN0cyxzaXRlLGVkdWNhdGlvbix1bml2ZXJzaXRpZXMsc2Nob29scyxzdGF0dXMsbGFzdF9zZWVuLCIKICAgICAgICAgICAgICAgICAgICAgICJvY2N1cGF0aW9uLG5pY2tuYW1lLHJlbGF0aXZlcyxyZWxhdGlvbixwZXJzb25hbCxjb25uZWN0aW9ucyxleHBvcnRzLCIKICAgICAgICAgICAgICAgICAgICAgICJ3YWxsX2NvbW1lbnRzLGFjdGl2aXRpZXMsaW50ZXJlc3RzLG11c2ljLG1vdmllcyx0dixib29rcyxnYW1lcyxhYm91dCxxdW90ZXMiLAogICAgICAgICAgICAiYWNjZXNzX3Rva2VuIjogdG9rZW4sCiAgICAgICAgICAgICJ2Ijogdn0pLmpzb24oKQogICAgICAgIHByaW50KHJlcXVlc3QpCjx8ZmltX2hvbGV8PgogICAgICAgICAgICBvZmZzZXQgKz0gNTAwMAogICAgICAgICAgICB0aW1lcigpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQocmVxdWVzdCkKICAgICAgICAgICAgdGltZXIoKQogICAgICAgICAgICBicmVhawogICAgcmV0dXJuIHJlcXVlc3RzX2FsbAoKCmRlZiBnaWZ0c19nZXQoaWQsIHRva2VuLCB2KToKICAgIG9mZnNldCA9IDAKICAgIHJlcXVlc3RzX2FsbCA9IFtdCiAgICB3aGlsZSBUcnVlOgogICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0cy5wb3N0KCJodHRwczovL2FwaS52ay5jb20vbWV0aG9kL2dpZnRzLmdldCIsIGRhdGE9ewogICAgICAgICAgICAidXNlcl9pZCI6IGlkLAogICAgICAgICAgICAiY291bnQiOiAxMDAwLAogICAgICAgICAgICAib2Zmc2V0Ijogb2Zmc2V0LAogICAgICAgICAgICAiYWNjZXNzX3Rva2VuIjogdG9rZW4sCiAgICAgICAgICAgICJ2Ijogdn0pLmpzb24oKQogICAgICAgIHByaW50KHJlcXVlc3QpCiAgICAgICAgaWYgInJlc3BvbnNlIiBpbiByZXF1ZXN0IGFuZCBsZW4ocmVxdWVzdFsicmVzcG9uc2UiXVsiaXRlbXMiXSkgPiAwOgogICAgICAgICAgICBmb3IgayBpbiByZXF1ZXN0WyJyZXNwb25zZSJdWyJpdGVtcyJdOgogICAgICAgICAgICAgICAgIyBkZWwga1snZ2lmdF9oYXNoJ10KICAgICAgICAgICAgICAgIHJlcXVlc3RzX2FsbC5hcHBlbmQoaykKICAgICAgICAgICAgb2Zmc2V0ICs9IDEwMDAKICAgICAgICAgICAgdGltZXIoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50KHJlcXVlc3QpCiAgICAgICAgICAgIHRpbWVyKCkKICAgICAgICAgICAgYnJlYWsKICAgIHJldHVybiByZXF1ZXN0c19hbGwKCgpkZWYgbm90ZXNfZ2V0KGlkLCB0b2tlbiwgdik6CiAgICBvZmZzZXQgPSAwCiAgICByZXF1ZXN0c19hbGwgPSBbXQogICAgd2hpbGUgVHJ1ZToKICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdHMucG9zdCgiaHR0cHM6Ly9hcGkudmsuY29tL21ldGhvZC9ub3Rlcy5nZXQiLCBkYXRhPXsKICAgICAgICAgICAgInVzZXJfaWQiOiBpZCwKICAgICAgICAgICAgIm9mZnNldCI6IG9mZnNldCwKICAgICAgICAgICAgImNvdW50IjogMTAwLAogICAgICAgICAgICAic29ydCI6IDEsCiAgICAgICAgICAgICJhY2Nlc3NfdG9rZW4iOiB0b2tlbiwKICAgICAgICAgICAgInYiOiB2fSkuanNvbigpCiAgICAgICAgcHJpbnQocmVxdWVzdCkKICAgICAgICBpZiAicmVzcG9uc2UiIGluIHJlcXVlc3QgYW5kIGxlbihyZXF1ZXN0WyJyZXNwb25zZSJdWyJpdGVtcyJdKSA+IDA6CiAgICAgICAgICAgIHJlcXVlc3RzX2FsbC5hcHBlbmQocmVxdWVzdFsicmVzcG9uc2UiXSkKICAgICAgICAgICAgb2Zmc2V0ICs9IDEwMAogICAgICAgICAgICB0aW1lcigpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQocmVxdWVzdCkKICAgICAgICAgICAgdGltZXIoKQogICAgICAgICAgICBicmVhawogICAgcmV0dXJuIHJlcXVlc3RzX2FsbAoKCmRlZiBwaG90b3NfZ2V0X2FsbChpZCwgdG9rZW4sIHYpOgogICAgb2Zmc2V0ID0gMAogICAgcmVxdWVzdHNfYWxsID0gW10KICAgIHdoaWxlIFRydWU6CiAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3RzLnBvc3QoImh0dHBzOi8vYXBpLnZrLmNvbS9tZXRob2QvcGhvdG9zLmdldEFsbCIsIGRhdGE9ewogICAgICAgICAgICAib3duZXJfaWQiOiBpZCwKICAgICAgICAgICAgIm9mZnNldCI6IG9mZnNldCwKICAgICAgICAgICAgImNvdW50IjogMjAwLAogICAgICAgICAgICAicGhvdG9fc2l6ZXMiOiAxLAogICAgICAgICAgICAibm9fc2VydmljZV9hbGJ1bXMiOiAwLAogICAgICAgICAgICAiYWNjZXNzX3Rva2VuIjogdG9rZW4sCiAgICAgICAgICAgICJ2Ijogdn0pLmpzb24oKQogICAgICAgIHByaW50KHJlcXVlc3QpCiAgICAgICAgaWYgInJlc3BvbnNlIiBpbiByZXF1ZXN0IGFuZCBsZW4ocmVxdWVzdFsicmVzcG9uc2UiXVsiaXRlbXMiXSkgPiAwOgogICAgICAgICAgICByZXF1ZXN0c19hbGwuYXBwZW5kKHJlcXVlc3RbInJlc3BvbnNlIl0pCiAgICAgICAgICAgIG9mZnNldCArPSAyMDAKICAgICAgICAgICAgdGltZXIoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50KHJlcXVlc3QpCiAgICAgICAgICAgIHRpbWVyKCkKICAgICAgICAgICAgYnJlYWsKICAgIHJldHVybiByZXF1ZXN0c19hbGwKCgpkZWYgc3Rvcmllc19nZXQoaWQsIHRva2VuLCB2KToKICAgIHJlcXVlc3RzX2FsbCA9IFtdCiAgICB3aGlsZSBUcnVlOgogICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0cy5wb3N0KCJodHRwczovL2FwaS52ay5jb20vbWV0aG9kL3N0b3JpZXMuZ2V0IiwgZGF0YT17CiAgICAgICAgICAgICJvd25lcl9pZCI6IGlkLAogICAgICAgICAgICAiYWNjZXNzX3Rva2VuIjogdG9rZW4sCiAgICAgICAgICAgICJ2Ijogdn0pLmpzb24oKQogICAgICAgIHByaW50KHJlcXVlc3QpCiAgICAgICAgaWYgInJlc3BvbnNlIiBpbiByZXF1ZXN0IGFuZCBsZW4ocmVxdWVzdFsicmVzcG9uc2UiXVsiaXRlbXMiXSkgPiAwOgogICAgICAgICAgICByZXF1ZXN0c19hbGwuYXBwZW5kKHJlcXVlc3RbInJlc3BvbnNlIl0pCiAgICAgICAgICAgIHRpbWVyKCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludChyZXF1ZXN0KQogICAgICAgICAgICB0aW1lcigpCiAgICAgICAgICAgIGJyZWFrCiAgICByZXR1cm4gcmVxdWVzdHNfYWxsCgoKZGVmIHVzZXJzX2dldChpZCwgdG9rZW4sIHYpOgogICAgcmVxdWVzdCA9IHJlcXVlc3RzLnBvc3QoImh0dHBzOi8vYXBpLnZrLmNvbS9tZXRob2QvdXNlcnMuZ2V0IiwgZGF0YT17CiAgICAgICAgInVzZXJfaWRzIjogaWQsCiAgICAgICAgImZpZWxkcyI6ICJ1aWQsZmlyc3RfbmFtZSxjcm9wX3Bob3RvLGxhc3RfbmFtZSxkZWFjdGl2YXRlZCx2ZXJpZmllZCxzZXgsYmRhdGUsY2l0eSxjb3VudHJ5LGhvbWVfdG93biwiCiAgICAgICAgICAgICAgICAgICJwaG90b19tYXgscGhvdG9fbWF4X29yaWcsb25saW5lLGxpc3RzLGRvbWFpbixoYXNfbW9iaWxlLCIKICAgICAgICAgICAgICAgICAgImNvbnRhY3RzLHNpdGUsZWR1Y2F0aW9uLHVuaXZlcnNpdGllcyxzY2hvb2xzLHN0YXR1cyxsYXN0X3NlZW4sb2NjdXBhdGlvbiwiCiAgICAgICAgICAgICAgICAgICJuaWNrbmFtZSxyZWxhdGl2ZXMscmVsYXRpb24scGVyc29uYWwsY29ubmVjdGlvbnMsZXhwb3J0cyx3YWxsX2NvbW1lbnRzLGFjdGl2aXRpZXMsaW50ZXJlc3RzLG11c2ljLCIKICAgICAgICAgICAgICAgICAgIm1vdmllcyx0dixib29rcyxnYW1lcyxhYm91dCxxdW90ZXMsc2NyZWVuX25hbWUiLAogICAgICAgICJhY2Nlc3NfdG9rZW4iOiB0b2tlbiwKICAgICAgICAidiI6IHZ9KS5qc29uKCkKICAgIHByaW50KHJlcXVlc3QpCiAgICBpZiAicmVzcG9uc2UiIGluIHJlcXVlc3Q6CiAgICAgICAgdGltZXIoKQogICAgICAgIHJldHVybiByZXF1ZXN0WyJyZXNwb25zZSJdCgoKZGVmIHZpZGVvc19nZXQoaWQsIHRva2VuLCB2KToKICAgIG9mZnNldCA9IDAKICAgIHJlcXVlc3RzX2FsbCA9IFtdCiAgICB3aGlsZSBUcnVlOgogICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0cy5wb3N0KCJodHRwczovL2FwaS52ay5jb20vbWV0aG9kL3ZpZGVvLmdldCIsIGRhdGE9ewogICAgICAgICAgICAib3duZXJfaWQiOiBpZCwKICAgICAgICAgICAgImNvdW50IjogMjAwLAogICAgICAgICAgICAib2Zmc2V0Ijogb2Zmc2V0LAogICAgICAgICAgICAiYWNjZXNzX3Rva2VuIjogdG9rZW4sCiAgICAgICAgICAgICJ2Ijogdn0pLmpzb24oKQogICAgICAgIHByaW50KHJlcXVlc3QpCiAgICAgICAgaWYgInJlc3BvbnNlIiBpbiByZXF1ZXN0IGFuZCBsZW4ocmVxdWVzdFsicmVzcG9uc2UiXVsiaXRlbXMiXSkgPiAwOgogICAgICAgICAgICByZXF1ZXN0c19hbGwuYXBwZW5kKHJlcXVlc3RbInJlc3BvbnNlIl0pCiAgICAgICAgICAgIG9mZnNldCArPSAyMDAKICAgICAgICAgICAgdGltZXIoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50KHJlcXVlc3QpCiAgICAgICAgICAgIHRpbWVyKCkKICAgICAgICAgICAgYnJlYWsKICAgIHJldHVybiByZXF1ZXN0c19hbGwKCgpkZWYgZm9sbG93ZXJzX2dldChpZCwgdG9rZW4sIHYpOgogICAgb2Zmc2V0ID0gMAogICAgcmVxdWVzdHNfYWxsID0gW10KICAgIHdoaWxlIFRydWU6CiAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3RzLnBvc3QoImh0dHBzOi8vYXBpLnZrLmNvbS9tZXRob2QvdXNlcnMuZ2V0Rm9sbG93ZXJzIiwgZGF0YT17CiAgICAgICAgICAgICJ1c2VyX2lkIjogaWQsCiAgICAgICAgICAgICJvZmZzZXQiOiBvZmZzZXQsCiAgICAgICAgICAgICJjb3VudCI6IDEwMDAsCiAgICAgICAgICAgICJmaWVsZHMiOiAidWlkLGZpcnN0X25hbWUsbGFzdF9uYW1lLGRlYWN0aXZhdGVkLHZlcmlmaWVkLHNleCxiZGF0ZSxjaXR5LGNvdW50cnksaG9tZV90b3duLCIKICAgICAgICAgICAgICAgICAgICAgICJwaG90b19tYXgscGhvdG9fbWF4X29yaWcsb25saW5lLGxpc3RzLCIKICAgICAgICAgICAgICAgICAgICAgICJkb21haW4saGFzX21vYmlsZSxjb250YWN0cyxzaXRlLGVkdWNhdGlvbix1bml2ZXJzaXRpZXMsc2Nob29scyxzdGF0dXMsbGFzdF9zZWVuLCIKICAgICAgICAgICAgICAgICAgICAgICJvY2N1cGF0aW9uLG5pY2tuYW1lLHJlbGF0aXZlcyxyZWxhdGlvbixwZXJzb25hbCxjb25uZWN0aW9ucyxleHBvcnRzLCIKICAgICAgICAgICAgICAgICAgICAgICJ3YWxsX2NvbW1lbnRzLGFjdGl2aXRpZXMsaW50ZXJlc3RzLG11c2ljLG1vdmllcyx0dixib29rcyxnYW1lcyxhYm91dCxxdW90ZXMsIgogICAgICAgICAgICAgICAgICAgICAgInNjcmVlbl9uYW1lIiwKICAgICAgICAgICAgImFjY2Vzc190b2tlbiI6IHRva2VuLAogICAgICAgICAgICAidiI6IHZ9KS5qc29uKCkKICAgICAgICBwcmludChyZXF1ZXN0KQogICAgICAgIGlmICJyZXNwb25zZSIgaW4gcmVxdWVzdCBhbmQgbGVuKHJlcXVlc3RbInJlc3BvbnNlIl1bIml0ZW1zIl0pID4gMDoKICAgICAgICAgICAgcmVxdWVzdHNfYWxsLmFwcGVuZChyZXF1ZXN0WyJyZXNwb25zZSJdKQogICAgICAgICAgICBvZmZzZXQgKz0gMTAwMAogICAgICAgICAgICB0aW1lcigpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQocmVxdWVzdCkKICAgICAgICAgICAgdGltZXIoKQogICAgICAgICAgICBicmVhawogICAgcmV0dXJuIHJlcXVlc3RzX2FsbAoKCmRlZiBncm91cHNfZ2V0KGlkLCB0b2tlbiwgdik6CiAgICBvZmZzZXQgPSAwCiAgICByZXF1ZXN0c19hbGwgPSBbXQogICAgd2hpbGUgVHJ1ZToKICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdHMucG9zdCgiaHR0cHM6Ly9hcGkudmsuY29tL21ldGhvZC9ncm91cHMuZ2V0IiwgZGF0YT17CiAgICAgICAgICAgICJ1c2VyX2lkIjogaWQsCiAgICAgICAgICAgICJmaWVsZHMiOiAiaWQsbmFtZSxzY3JlZW5fbmFtZSxpc19jbG9zZWQsZGVhY3RpdmF0ZWQsaXNfYWRtaW4sYWRtaW5fbGV2ZWwsaXNfbWVtYmVyLCIKICAgICAgICAgICAgICAgICAgICAgICJwaG90b18yMDAsYWN0aXZpdHksY2FuX21lc3NhZ2UsIgogICAgICAgICAgICAgICAgICAgICAgImNpdHksY29udGFjdHMsY291bnRlcnMsY291bnRyeSwiCiAgICAgICAgICAgICAgICAgICAgICAiY292ZXIsZGVzY3JpcHRpb24sZml4ZWRfcG9zdCxtYWluX2FsYnVtX2lkLG1haW5fc2VjdGlvbixtYXJrZXQscGxhY2UsIgogICAgICAgICAgICAgICAgICAgICAgInB1YmxpY19kYXRlX2xhYmVsLHNpdGUsc3RhdHVzLHRyZW5kaW5nLHZlcmlmaWVkLHdpa2lfcGFnZSIsCiAgICAgICAgICAgICJvZmZzZXQiOiBvZmZzZXQsCiAgICAgICAgICAgICJjb3VudCI6IDEwMDAsCiAgICAgICAgICAgICJhY2Nlc3NfdG9rZW4iOiB0b2tlbiwKICAgICAgICAgICAgInYiOiB2fSkuanNvbigpCiAgICAgICAgcHJpbnQocmVxdWVzdCkKICAgICAgICBpZiAicmVzcG9uc2UiIGluIHJlcXVlc3QgYW5kIGxlbihyZXF1ZXN0WyJyZXNwb25zZSJdWyJpdGVtcyJdKSA+IDA6CiAgICAgICAgICAgIHJlcXVlc3RzX2FsbC5hcHBlbmQocmVxdWVzdFsicmVzcG9uc2UiXSkKICAgICAgICAgICAgb2Zmc2V0ICs9IDEwMDAKICAgICAgICAgICAgdGltZXIoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50KHJlcXVlc3QpCiAgICAgICAgICAgIHRpbWVyKCkKICAgICAgICAgICAgYnJlYWsKICAgIHJldHVybiByZXF1ZXN0c19hbGwKCgojIGRlZiBtZXNzYWdlc19nZXQodG9rZW4sIHYpOgojICAgICBjb3VudCA9IDAKIyAgICAgaWRzID0gIiIKIyAgICAgcmVxdWVzdHNfYWxsID0gW10KIyAgICAgd2hpbGUgVHJ1ZToKIyAgICAgICAgIGZvciBrIGluIHJhbmdlKGNvdW50LCAxMDAgKyBjb3VudCk6CiMgICAgICAgICAgICAgaWRzICs9IHN0cihrKSArICIsIgojICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3RzLnBvc3QoImh0dHBzOi8vYXBpLnZrLmNvbS9tZXRob2QvbWVzc2FnZXMuZ2V0QnlJZCIsIGRhdGE9ewojICAgICAgICAgICAgICJtZXNzYWdlX2lkcyI6IGlkcywKIyAgICAgICAgICAgICAiZmllbGRzIjogInVpZCxmaXJzdF9uYW1lLGxhc3RfbmFtZSxkZWFjdGl2YXRlZCx2ZXJpZmllZCxzZXgsYmRhdGUsY2l0eSxjb3VudHJ5LGhvbWVfdG93biwiCiMgICAgICAgICAgICAgICAgICAgICAgICJwaG90b19tYXgscGhvdG9fbWF4X29yaWcsb25saW5lLGxpc3RzLGRvbWFpbixoYXNfbW9iaWxlLCIKIyAgICAgICAgICAgICAgICAgICAgICAgImNvbnRhY3RzLHNpdGUsZWR1Y2F0aW9uLHVuaXZlcnNpdGllcyxzY2hvb2xzLHN0YXR1cyxsYXN0X3NlZW4sb2NjdXBhdGlvbiwiCiMgICAgICAgICAgICAgICAgICAgICAgICJuaWNrbmFtZSxyZWxhdGl2ZXMscmVsYXRpb24scGVyc29uYWwsY29ubmVjdGlvbnMsZXhwb3J0cyx3YWxsX2NvbW1lbnRzLGFjdGl2aXRpZXMsaW50ZXJlc3RzLG11c2ljLCIKIyAgICAgICAgICAgICAgICAgICAgICAgIm1vdmllcyx0dixib29rcyxnYW1lcyxhYm91dCxxdW90ZXMsIgojICAgICAgICAgICAgICAgICAgICAgICAic2NyZWVuX25hbWUiLAojICAgICAgICAgICAgICJhY2Nlc3NfdG9rZW4iOiB0b2tlbiwKIyAgICAgICAgICAgICAidiI6IHZ9KS5qc29uKCkKIyAgICAgICAgIHByaW50KHJlcXVlc3QpCiMgICAgICAgICBpZiAicmVzcG9uc2UiIGluIHJlcXVlc3QgYW5kIGxlbihyZXF1ZXN0WyJyZXNwb25zZSJdWyJpdGVtcyJdKSA+IDA6CiMgICAgICAgICAgICAgcmVxdWVzdHNfYWxsLmFwcGVuZChyZXF1ZXN0WyJyZXNwb25zZSJdKQojICAgICAgICAgICAgIGlkcyA9ICIiCiMgICAgICAgICAgICAgY291bnQgKz0gMTAwCiMgICAgICAgICAgICAgdGltZXIoKQojICAgICAgICAgZWxzZToKIyAgICAgICAgICAgICBwcmludChyZXF1ZXN0KQojICAgICAgICAgICAgIHRpbWVyKCkKIyAgICAgICAgICAgICBicmVhawojICAgICAgICAgcHJpbnQoaWRzKQojICAgICByZXR1cm4gcmVxdWVzdHNfYWxsCgoKZGVmIHdhbGxfZ2V0KGlkLCB0b2tlbiwgdik6CiAgICBvZmZzZXQgPSAwCiAgICByZXF1ZXN0c19hbGwgPSBbXQogICAgd2hpbGUgVHJ1ZToKICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdHMucG9zdCgiaHR0cHM6Ly9hcGkudmsuY29tL21ldGhvZC93YWxsLmdldCIsIGRhdGE9ewogICAgICAgICAgICAib3duZXJfaWQiOiBpZCwKICAgICAgICAgICAgIm9mZnNldCI6IG9mZnNldCwKICAgICAgICAgICAgImNvdW50IjogMTAwLAogICAgICAgICAgICAiZmlsdGVyIjogImFsbCIsCiAgICAgICAgICAgICJhY2Nlc3NfdG9rZW4iOiB0b2tlbiwKICAgICAgICAgICAgInYiOiB2fSkuanNvbigpCiAgICAgICAgcHJpbnQocmVxdWVzdCkKICAgICAgICBpZiAicmVzcG9uc2UiIGluIHJlcXVlc3QgYW5kIGxlbihyZXF1ZXN0WyJyZXNwb25zZSJdWyJpdGVtcyJdKSA+IDA6CiAgICAgICAgICAgIHJlcXVlc3RzX2FsbC5hcHBlbmQocmVxdWVzdFsicmVzcG9uc2UiXSkKICAgICAgICAgICAgb2Zmc2V0ICs9IDEwMAogICAgICAgICAgICB0aW1lcigpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQocmVxdWVzdCkKICAgICAgICAgICAgdGltZXIoKQogICAgICAgICAgICBicmVhawogICAgcmV0dXJuIHJlcXVlc3RzX2FsbAoKCmRlZiBtYXJrZXRfZ2V0KGlkLCB0b2tlbiwgdik6CiAgICBvZmZzZXQgPSAwCiAgICByZXF1ZXN0c19hbGwgPSBbXQogICAgd2hpbGUgVHJ1ZToKICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdHMucG9zdCgiaHR0cHM6Ly9hcGkudmsuY29tL21ldGhvZC9tYXJrZXQuZ2V0IiwgZGF0YT17CiAgICAgICAgICAgICJvd25lcl9pZCI6IGlkLAogICAgICAgICAgICAiY291bnQiOiAyMDAsCiAgICAgICAgICAgICJvZmZzZXQiOiBvZmZzZXQsCiAgICAgICAgICAgICJhY2Nlc3NfdG9rZW4iOiB0b2tlbiwKICAgICAgICAgICAgInYiOiB2fSkuanNvbigpCiAgICAgICAgcHJpbnQocmVxdWVzdCkKICAgICAgICBpZiAicmVzcG9uc2UiIGluIHJlcXVlc3QgYW5kIGxlbihyZXF1ZXN0WyJyZXNwb25zZSJdWyJpdGVtcyJdKSA+IDA6CiAgICAgICAgICAgIHJlcXVlc3RzX2FsbC5hcHBlbmQocmVxdWVzdFsicmVzcG9uc2UiXSkKICAgICAgICAgICAgb2Zmc2V0ICs9IDIwMAogICAgICAgICAgICB0aW1lcigpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQocmVxdWVzdCkKICAgICAgICAgICAgdGltZXIoKQogICAgICAgICAgICBicmVhawogICAgcmV0dXJuIHJlcXVlc3RzX2FsbAo8fGZpbV9zdWZmaXh8PgogICAgICAgIGlmICJyZXNwb25zZSIgaW4gcmVxdWVzdCBhbmQgbGVuKHJlcXVlc3RbInJlc3BvbnNlIl1bIml0ZW1zIl0pID4gMDoKICAgICAgICAgICAgZm9yIGsgaW4gcmVxdWVzdFsicmVzcG9uc2UiXVsiaXRlbXMiXToKICAgICAgICAgICAgICAgIGRlbCBrWyJ0cmFja19jb2RlIl0KICAgICAgICAgICAgICAgIHJlcXVlc3RzX2FsbC5hcHBlbmQoaykKPHxmaW1fZW5kfD4="]
["6b5c74559af081b7890d4c29fc1047a2c558f2cb-1","6b5c74559af081b7890d4c29fc1047a2c558f2cb",{"$cut":{"chars":18712,"head":"PHxmaW1fcHJlZml4fD4KIwo8fGZpbV9ob2xlfD4KIyBVc2luZyBQeXRob24gdmVyc2lvbiAzLjcuMyAoZGVmYXVsdCwgTWFyIDI3IDIwMTksIDA5OjIzOjE1KSAKIwpPY3RldFN0cmluZywgSW50ZWdlciwgT2JqZWN0SWRlbnRpZmllciA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiQVNOMSIsICJPY3RldFN0cmluZyIsICJJbnRlZ2VyIiwgIk9iamVjdElkZW50aWZpZXIiKQpOYW1lZFZhbHVlcywgPSBtaWJCdWlsZGVyLmltcG9ydFN5bWJvbHMoIkFTTjEtRU5VTUVSQVRJT04iLCAiTmFtZWRWYWx1ZXMiKQpWYWx1ZVNpemVDb25zdHJhaW50LCBTaW5nbGVWYWx1ZUNvbnN0cmFpbnQsIENvbnN0cmFpbnRzSW50ZXJzZWN0aW9uLCBWYWx1ZVJhbmdlQ29uc3RyYWludCwgQ29uc3RyYWludHNVbmlvbiA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiQVNOMS1SRUZJTkVNRU5UIiwgIlZhbHVlU2l6ZUNvbnN0cmFpbnQiLCAiU2luZ2xlVmFsdWVDb25zdHJhaW50IiwgIkNvbnN0cmFpbnRzSW50ZXJzZWN0aW9uIiwgIlZhbHVlUmFuZ2VDb25zdHJhaW50IiwgIkNvbnN0cmFpbnRzVW5pb24iKQpjeEF0bVBoeSwgPSBtaWJCdWlsZGVyLmltcG9ydFN5bWJvbHMoIkNYUHJvZHVjdC1TTUkiLCAiY3hBdG1QaHkiKQppZkluZGV4LCA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiSUYtTUlCIiwgImlmSW5kZXgiKQpNb2R1bGVDb21wbGlhbmNlLCBOb3RpZmljYXRpb25Hcm91cCA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiU05NUHYyLUNPTkYiLCAiTW9kdWxlQ29tcGxpYW5jZSIsICJOb3RpZmljYXRpb25Hcm91cCIpCk1vZHVsZUlkZW50aXR5LCBJcEFkZHJlc3MsIEdhdWdlMzIsIE1pYklkZW50aWZpZXIsIE9iamVjdElkZW50aXR5LCBOb3RpZmljYXRpb25UeXBlLCBNaWJTY2FsYXIsIE1pYlRhYmxlLCBNaWJUYWJsZVJvdywgTWliVGFibGVDb2x1bW4sIFRpbWVUaWNrcywgaXNvLCBCaXRzLCBDb3VudGVyNjQsIFVuc2lnbmVkMzIsIEludGVnZXIzMiwgQ291bnRlcjMyID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJTTk1QdjItU01JIiwgIk1vZHVsZUlkZW50aXR5IiwgIklwQWRkcmVzcyIsICJHYXVnZTMyIiwgIk1pYklkZW50aWZpZXIiLCAiT2JqZWN0SWRlbnRpdHkiLCAiTm90aWZpY2F0aW9uVHlwZSIsICJNaWJTY2FsYXIiLCAiTWliVGFibGUiLCAiTWliVGFibGVSb3ciLCAiTWliVGFibGVDb2x1bW4iLCAiVGltZVRpY2tzIiwgImlzbyIsICJCaXRzIiwgIkNvdW50ZXI2NCIsICJVbnNpZ25lZDMyIiwgIkludGVnZXIzMiIsICJDb3VudGVyMzIiKQpEaXNwbGF5U3RyaW5nLCBUZXh0dWFsQ29udmVudGlvbiA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiU05NUHYyLVRDIiwgIkRpc3BsYXlTdHJpbmciLCAiVGV4dHVhbENvbnZlbnRpb24iKQpjbGFzcyBTd2l0Y2goSW50ZWdlcjMyKToKICAgIHN1YnR5cGVTcGVjID0gSW50ZWdlcjMyLnN1YnR5cGVTcGVjICsgQ29uc3RyYWludHNVbmlvbihTaW5nbGVWYWx1ZUNvbnN0cmFpbnQoMSwgMikpCiAgICBuYW1lZFZhbHVlcyA9IE5hbWVkVmFsdWVzKCgiZGlzYWJsZWQiLCAxKSwgKCJlbmFibGVkIiwgMikpCgpjbGFzcyBFcnJvclN0YXRlKEludGVnZXIzMik6CiAgICBzdWJ0eXBlU3BlYyA9IEludGVnZXIzMi5zdWJ0eXBlU3BlYyArIENvbnN0cmFpbnRzVW5pb24oU2luZ2xlVmFsdWVDb25zdHJhaW50KDEsIDIpKQogICAgbmFtZWRWYWx1ZXMgPSBOYW1lZFZhbHVlcygoImVycm9yTm90RGV0ZWN0ZWQiLCAxKSwgKCJlcnJvckRldGVjdGVkIiwgMikpCgphdG1QaHlNaWJMZXZlbCA9IE1pYlNjYWxhcigoMSwgMywgNiwgMSwgNCwgMSwgNDk1LCAyLCAxLCA2LCA2MSwgMSksIEludGVnZXIzMigpKS5zZXRNYXhBY2Nlc3MoInJlYWRvbmx5IikKaWYgbWliQnVpbGRlci5sb2FkVGV4dHM6IGF0bVBoeU1pYkxldmVsLnNldFN0YXR1cygnbWFuZGF0b3J5JykKYXRtUGh5SW50ZXJmYWNlQ29uZlRhYmxlID0gTWliVGFibGUoKDEsIDMsIDYsIDEsIDQsIDEsIDQ5NSwgMiwgMSwgNiwgNjEsIDEwKSwgKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogYXRtUGh5SW50ZXJmYWNlQ29uZlRhYmxlLnNldFN0YXR1cygnbWFuZGF0b3J5JykKYXRtUGh5SW50ZXJmYWNlQ29uZkVudHJ5ID0gTWliVGFibGVSb3coKDEsIDMsIDYsIDEsIDQsIDEsIDQ5NSwgMiwgMSwgNiwgNjEsIDEwLCAxKSwgKS5zZXRJbmRleE5hbWVzKCgwLCAiSUYtTUlCIiwgImlmSW5kZXgiKSkKaWYgbWliQnVpbGRlci5sb2FkVGV4dHM6IGF0bVBoeUludGVyZmFjZUNvbmZFbnRyeS5zZXRTdGF0dXMoJ21hbmRhdG9yeScpCmF0bVBoeUNvbmZUeENsb2NraW5nID0gTWliVGFibGVDb2x1bW4oKDEsIDMsIDYsIDEsIDQsIDEsIDQ5NSwgMiwgMSwgNiwgNjEsIDEwLCAxLCAxKSwgSW50ZWdlcjMyKCkuc3VidHlwZShzdWJ0eXBlU3BlYz1Db25zdHJhaW50c1VuaW9uKFNpbmdsZVZhbHVlQ29uc3RyYWludCgxLCAyKSkpLmNsb25lKG5hbWVkVmFsdWVzPU5hbWVkVmFsdWVzKCgic3luY2hyb25pemVkIiwgMSksICgidW5zeW5jaHJvbml6ZWQiLCAyKSkpLmNsb25lKCdzeW5jaHJvbml6ZWQnKSkuc2V0TWF4QWNjZXNzKCJyZWFkd3JpdGUiKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogYXRtUGh5Q29uZlR4Q2xvY2tpbmcuc2V0U3RhdHVzKCdtYW5kYXRvcnknKQphdG1QaHlDb25mUnhMb29wYmFjayA9IE1pYlRhYmxlQ29sdW1uKCgxLCAzLCA2LCAxLCA0LCAxLCA0OTUsIDIsIDEsIDYsIDYxLCAxMCwgMSwgMiksIEludGVnZXIzMigpLnN1YnR5cGUoc3VidHlwZVNwZWM9Q29uc3RyYWludHNVbmlvbihTaW5nbGVWYWx1ZUNvbnN0cmFpbnQoMSwgMiwgMykpKS5jbG9uZShuYW1lZFZhbHVlcz1OYW1lZFZhbHVlcygoIm5vbmUiLCAxKSwgKCJsaW5lIiwgMiksICgiY2VsbCIsIDMpKSkuY2xvbmUoJ25vbmUnKSkuc2V0TWF4QWNjZXNzKCJyZWFkd3JpdGUiKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogYXRtUGh5Q29uZlJ4TG9vcGJhY2suc2V0U3RhdHVzKCdtYW5kYXRvcnknKQphdG1QaHlDb25mRnJhbWVGb3JtYXQgPSBNaWJUYWJsZUNvbHVtbigoMSwgMywgNiwgMSwgNCwgMSwgNDk1LCAyLCAxLCA2LCA2MSwgMTAs"}}]
["6b5c74559af081b7890d4c29fc1047a2c558f2cb-2","6b5c74559af081b7890d4c29fc1047a2c558f2cb",{"$cut":{"chars":18712,"head":"PHxmaW1fcHJlZml4fD4KIwojIFB5U05NUCBNSUIgbW9kdWxlIENYQXRtUGh5LU1JQiAoaHR0cDovL3NubXBsYWJzLmNvbS9weXNtaSkKIyBBU04uMSBzb3VyY2UgZmlsZTovLy9Vc2Vycy9kYXZ3YW5nNC9EZXYvbWlicy5zbm1wbGFicy5jb20vYXNuMS9DWEF0bVBoeS1NSUIKIyBQcm9kdWNlZCBieSBweXNtaS0wLjMuNCBhdCBNb24gQXByIDI5IDE4OjE2OjM1IDIwMTkKIyBPbiBob3N0IERBVldBTkc0LU0tMTQ3NSBwbGF0Zm9ybSBEYXJ3aW4gdmVyc2lvbiAxOC41LjAgYnkgdXNlciBkYXZ3YW5nNAojIFVzaW5nIFB5dGhvbiB2ZXJzaW9uIDMuNy4zIChkZWZhdWx0LCBNYXIgMjcgMjAxOSwgMDk6MjM6MTUpIAojCk9jdGV0U3RyaW5nLCBJbnRlZ2VyLCBPYmplY3RJZGVudGlmaWVyID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJBU04xIiwgIk9jdGV0U3RyaW5nIiwgIkludGVnZXIiLCAiT2JqZWN0SWRlbnRpZmllciIpCk5hbWVkVmFsdWVzLCA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiQVNOMS1FTlVNRVJBVElPTiIsICJOYW1lZFZhbHVlcyIpClZhbHVlU2l6ZUNvbnN0cmFpbnQsIFNpbmdsZVZhbHVlQ29uc3RyYWludCwgQ29uc3RyYWludHNJbnRlcnNlY3Rpb24sIFZhbHVlUmFuZ2VDb25zdHJhaW50LCBDb25zdHJhaW50c1VuaW9uID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJBU04xLVJFRklORU1FTlQiLCAiVmFsdWVTaXplQ29uc3RyYWludCIsICJTaW5nbGVWYWx1ZUNvbnN0cmFpbnQiLCAiQ29uc3RyYWludHNJbnRlcnNlY3Rpb24iLCAiVmFsdWVSYW5nZUNvbnN0cmFpbnQiLCAiQ29uc3RyYWludHNVbmlvbiIpCmN4QXRtUGh5LCA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiQ1hQcm9kdWN0LVNNSSIsICJjeEF0bVBoeSIpCmlmSW5kZXgsID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJJRi1NSUIiLCAiaWZJbmRleCIpCk1vZHVsZUNvbXBsaWFuY2UsIE5vdGlmaWNhdGlvbkdyb3VwID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJTTk1QdjItQ09ORiIsICJNb2R1bGVDb21wbGlhbmNlIiwgIk5vdGlmaWNhdGlvbkdyb3VwIikKTW9kdWxlSWRlbnRpdHksIElwQWRkcmVzcywgR2F1Z2UzMiwgTWliSWRlbnRpZmllciwgT2JqZWN0SWRlbnRpdHksIE5vdGlmaWNhdGlvblR5cGUsIE1pYlNjYWxhciwgTWliVGFibGUsIE1pYlRhYmxlUm93LCBNaWJUYWJsZUNvbHVtbiwgVGltZVRpY2tzLCBpc28sIEJpdHMsIENvdW50ZXI2NCwgVW5zaWduZWQzMiwgSW50ZWdlcjMyLCBDb3VudGVyMzIgPSBtaWJCdWlsZGVyLmltcG9ydFN5bWJvbHMoIlNOTVB2Mi1TTUkiLCAiTW9kdWxlSWRlbnRpdHkiLCAiSXBBZGRyZXNzIiwgIkdhdWdlMzIiLCAiTWliSWRlbnRpZmllciIsICJPYmplY3RJZGVudGl0eSIsICJOb3RpZmljYXRpb25UeXBlIiwgIk1pYlNjYWxhciIsICJNaWJUYWJsZSIsICJNaWJUYWJsZVJvdyIsICJNaWJUYWJsZUNvbHVtbiIsICJUaW1lVGlja3MiLCAiaXNvIiwgIkJpdHMiLCAiQ291bnRlcjY0IiwgIlVuc2lnbmVkMzIiLCAiSW50ZWdlcjMyIiwgIkNvdW50ZXIzMiIpCkRpc3BsYXlTdHJpbmcsIFRleHR1YWxDb252ZW50aW9uID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJTTk1QdjItVEMiLCAiRGlzcGxheVN0cmluZyIsICJUZXh0dWFsQ29udmVudGlvbiIpCmNsYXNzIFN3aXRjaChJbnRlZ2VyMzIpOgogICAgc3VidHlwZVNwZWMgPSBJbnRlZ2VyMzIuc3VidHlwZVNwZWMgKyBDb25zdHJhaW50c1VuaW9uKFNpbmdsZVZhbHVlQ29uc3RyYWludCgxLCAyKSkKICAgIG5hbWVkVmFsdWVzID0gTmFtZWRWYWx1ZXMoKCJkaXNhYmxlZCIsIDEpLCAoImVuYWJsZWQiLCAyKSkKCmNsYXNzIEVycm9yU3RhdGUoSW50ZWdlcjMyKToKICAgIHN1YnR5cGVTcGVjID0gSW50ZWdlcjMyLnN1YnR5cGVTcGVjICsgQ29uc3RyYWludHNVbmlvbihTaW5nbGVWYWx1ZUNvbnN0cmFpbnQoMSwgMikpCiAgICBuYW1lZFZhbHVlcyA9IE5hbWVkVmFsdWVzKCgiZXJyb3JOb3REZXRlY3RlZCIsIDEpLCAoImVycm9yRGV0ZWN0ZWQiLCAyKSkKCmF0bVBoeU1pYkxldmVsID0gTWliU2NhbGFyKCgxLCAzLCA2LCAxLCA0LCAxLCA0OTUsIDIsIDEsIDYsIDYxLCAxKSwgSW50ZWdlcjMyKCkpLnNldE1heEFjY2VzcygicmVhZG9ubHkiKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogYXRtUGh5TWliTGV2ZWwuc2V0U3RhdHVzKCdtYW5kYXRvcnknKQphdG1QaHlJbnRlcmZhY2VDb25mVGFibGUgPSBNaWJUYWJsZSgoMSwgMywgNiwgMSwgNCwgMSwgNDk1LCAyLCAxLCA2LCA2MSwgMTApLCApCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiBhdG1QaHlJbnRlcmZhY2VDb25mVGFibGUuc2V0U3RhdHVzKCdtYW5kYXRvcnknKQphdG1QaHlJbnRlcmZhY2VDb25mRW50cnkgPSBNaWJUYWJsZVJvdygoMSwgMywgNiwgMSwgNCwgMSwgNDk1LCAyLCAxLCA2LCA2MSwgMTAsIDEpLCApLnNldEluZGV4TmFtZXMoKDAsICJJRi1NSUIiLCAiaWZJbmRleCIpKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogYXRtUGh5SW50ZXJmYWNlQ29uZkVudHJ5LnNldFN0YXR1cygnbWFuZGF0b3J5JykKYXRtUGh5Q29uZlR4Q2xvY2tpbmcgPSBNaWJUYWJsZUNvbHVtbigoMSwgMywgNiwgMSwgNCwgMSwgNDk1LCAyLCAxLCA2LCA2MSwgMTAsIDEsIDEpLCBJbnRlZ2VyMzIoKS5zdWJ0eXBlKHN1YnR5cGVTcGVjPUNvbnN0cmFpbnRzVW5pb24oU2luZ2xlVmFsdWVDb25zdHJhaW50KDEsIDIpKSkuY2xvbmUobmFtZWRWYWx1ZXM9TmFtZWRWYWx1ZXMoKCJzeW5jaHJvbml6ZWQiLCAxKSwgKCJ1bnN5bmNocm9uaXplZCIsIDIpKSkuY2xvbmUoJ3N5bmNocm9uaXplZCcpKS5zZXRNYXhBY2Nlc3MoInJlYWR3cml0ZSIpCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiBhdG1QaHlDb25mVHhDbG9ja2luZy5zZXRTdGF0dXMoJ21hbmRhdG9yeScpCmF0bVBoeUNvbmZSeExvb3BiYWNrID0gTWliVGFibGVDb2x1bW4oKDEsIDMsIDYsIDEsIDQsIDEsIDQ5NSwgMiwgMSwgNiwgNjEsIDEwLCAxLCAyKSwgSW50ZWdlcjMyKCkuc3VidHlwZShzdWJ0eXBlU3BlYz1Db25zdHJhaW50c1VuaW9uKFNpbmdsZVZhbHVlQ29uc3RyYWludCgxLCAyLCAzKSkpLmNsb25l"}}]
["6b5c74559af081b7890d4c29fc1047a2c558f2cb-3","6b5c74559af081b7890d4c29fc1047a2c558f2cb",{"$cut":{"chars":18712,"head":"PHxmaW1fcHJlZml4fD4KIwojIFB5U05NUCBNSUIgbW9kdWxlIENYQXRtUGh5LU1JQiAoaHR0cDovL3NubXBsYWJzLmNvbS9weXNtaSkKIyBBU04uMSBzb3VyY2UgZmlsZTovLy9Vc2Vycy9kYXZ3YW5nNC9EZXYvbWlicy5zbm1wbGFicy5jb20vYXNuMS9DWEF0bVBoeS1NSUIKIyBQcm9kdWNlZCBieSBweXNtaS0wLjMuNCBhdCBNb24gQXByIDI5IDE4OjE2OjM1IDIwMTkKIyBPbiBob3N0IERBVldBTkc0LU0tMTQ3NSBwbGF0Zm9ybSBEYXJ3aW4gdmVyc2lvbiAxOC41LjAgYnkgdXNlciBkYXZ3YW5nNAojIFVzaW5nIFB5dGhvbiB2ZXJzaW9uIDMuNy4zIChkZWZhdWx0LCBNYXIgMjcgMjAxOSwgMDk6MjM6MTUpIAojCk9jdGV0U3RyaW5nLCBJbnRlZ2VyLCBPYmplY3RJZGVudGlmaWVyID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJBU04xIiwgIk9jdGV0U3RyaW5nIiwgIkludGVnZXIiLCAiT2JqZWN0SWRlbnRpZmllciIpCk5hbWVkVmFsdWVzLCA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiQVNOMS1FTlVNRVJBVElPTiIsICJOYW1lZFZhbHVlcyIpClZhbHVlU2l6ZUNvbnN0cmFpbnQsIFNpbmdsZVZhbHVlQ29uc3RyYWludCwgQ29uc3RyYWludHNJbnRlcnNlY3Rpb24sIFZhbHVlUmFuZ2VDb25zdHJhaW50LCBDb25zdHJhaW50c1VuaW9uID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJBU04xLVJFRklORU1FTlQiLCAiVmFsdWVTaXplQ29uc3RyYWludCIsICJTaW5nbGVWYWx1ZUNvbnN0cmFpbnQiLCAiQ29uc3RyYWludHNJbnRlcnNlY3Rpb24iLCAiVmFsdWVSYW5nZUNvbnN0cmFpbnQiLCAiQ29uc3RyYWludHNVbmlvbiIpCmN4QXRtUGh5LCA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiQ1hQcm9kdWN0LVNNSSIsICJjeEF0bVBoeSIpCmlmSW5kZXgsID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJJRi1NSUIiLCAiaWZJbmRleCIpCk1vZHVsZUNvbXBsaWFuY2UsIE5vdGlmaWNhdGlvbkdyb3VwID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJTTk1QdjItQ09ORiIsICJNb2R1bGVDb21wbGlhbmNlIiwgIk5vdGlmaWNhdGlvbkdyb3VwIikKTW9kdWxlSWRlbnRpdHksIElwQWRkcmVzcywgR2F1Z2UzMiwgTWliSWRlbnRpZmllciwgT2JqZWN0SWRlbnRpdHksIE5vdGlmaWNhdGlvblR5cGUsIE1pYlNjYWxhciwgTWliVGFibGUsIE1pYlRhYmxlUm93LCBNaWJUYWJsZUNvbHVtbiwgVGltZVRpY2tzLCBpc28sIEJpdHMsIENvdW50ZXI2NCwgVW5zaWduZWQzMiwgSW50ZWdlcjMyLCBDb3VudGVyMzIgPSBtaWJCdWlsZGVyLmltcG9ydFN5bWJvbHMoIlNOTVB2Mi1TTUkiLCAiTW9kdWxlSWRlbnRpdHkiLCAiSXBBZGRyZXNzIiwgIkdhdWdlMzIiLCAiTWliSWRlbnRpZmllciIsICJPYmplY3RJZGVudGl0eSIsICJOb3RpZmljYXRpb25UeXBlIiwgIk1pYlNjYWxhciIsICJNaWJUYWJsZSIsICJNaWJUYWJsZVJvdyIsICJNaWJUYWJsZUNvbHVtbiIsICJUaW1lVGlja3MiLCAiaXNvIiwgIkJpdHMiLCAiQ291bnRlcjY0IiwgIlVuc2lnbmVkMzIiLCAiSW50ZWdlcjMyIiwgIkNvdW50ZXIzMiIpCkRpc3BsYXlTdHJpbmcsIFRleHR1YWxDb252ZW50aW9uID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJTTk1QdjItVEMiLCAiRGlzcGxheVN0cmluZyIsICJUZXh0dWFsQ29udmVudGlvbiIpCmNsYXNzIFN3aXRjaChJbnRlZ2VyMzIpOgogICAgc3VidHlwZVNwZWMgPSBJbnRlZ2VyMzIuc3VidHlwZVNwZWMgKyBDb25zdHJhaW50c1VuaW9uKFNpbmdsZVZhbHVlQ29uc3RyYWludCgxLCAyKSkKICAgIG5hbWVkVmFsdWVzID0gTmFtZWRWYWx1ZXMoKCJkaXNhYmxlZCIsIDEpLCAoImVuYWJsZWQiLCAyKSkKCmNsYXNzIEVycm9yU3RhdGUoSW50ZWdlcjMyKToKICAgIHN1YnR5cGVTcGVjID0gSW50ZWdlcjMyLnN1YnR5cGVTcGVjICsgQ29uc3RyYWludHNVbmlvbihTaW5nbGVWYWx1ZUNvbnN0cmFpbnQoMSwgMikpCiAgICBuYW1lZFZhbHVlcyA9IE5hbWVkVmFsdWVzKCgiZXJyb3JOb3REZXRlY3RlZCIsIDEpLCAoImVycm9yRGV0ZWN0ZWQiLCAyKSkKCmF0bVBoeU1pYkxldmVsID0gTWliU2NhbGFyKCgxLCAzLCA2LCAxLCA0LCAxLCA0OTUsIDIsIDEsIDYsIDYxLCAxKSwgSW50ZWdlcjMyKCkpLnNldE1heEFjY2VzcygicmVhZG9ubHkiKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogYXRtUGh5TWliTGV2ZWwuc2V0U3RhdHVzKCdtYW5kYXRvcnknKQphdG1QaHlJbnRlcmZhY2VDb25mVGFibGUgPSBNaWJUYWJsZSgoMSwgMywgNiwgMSwgNCwgMSwgNDk1LCAyLCAxLCA2LCA2MSwgMTApLCApCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiBhdG1QaHlJbnRlcmZhY2VDb25mVGFibGUuc2V0U3RhdHVzKCdtYW5kYXRvcnknKQphdG1QaHlJbnRlcmZhY2VDb25mRW50cnkgPSBNaWJUYWJsZVJvdygoMSwgMywgNiwgMSwgNCwgMSwgNDk1LCAyLCAxLCA2LCA2MSwgMTAsIDEpLCApLnNldEluZGV4TmFtZXMoKDAsICJJRi1NSUIiLCAiaWZJbmRleCIpKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogYXRtUGh5SW50ZXJmYWNlQ29uZkVudHJ5LnNldFN0YXR1cygnbWFuZGF0b3J5JykKYXRtUGh5Q29uZlR4Q2xvY2tpbmcgPSBNaWJUYWJsZUNvbHVtbigoMSwgMywgNiwgMSwgNCwgMSwgNDk1LCAyLCAxLCA2LCA2MSwgMTAsIDEsIDEpLCBJbnRlZ2VyMzIoKS5zdWJ0eXBlKHN1YnR5cGVTcGVjPUNvbnN0cmFpbnRzVW5pb24oU2luZ2xlVmFsdWVDb25zdHJhaW50KDEsIDIpKSkuY2xvbmUobmFtZWRWYWx1ZXM9TmFtZWRWYWx1ZXMoKCJzeW5jaHJvbml6ZWQiLCAxKSwgKCJ1bnN5bmNocm9uaXplZCIsIDIpKSkuY2xvbmUoJ3N5bmNocm9uaXplZCcpKS5zZXRNYXhBY2Nlc3MoInJlYWR3cml0ZSIpCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiBhdG1QaHlDb25mVHhDbG9ja2luZy5zZXRTdGF0dXMoJ21hbmRhdG9yeScpCmF0bVBoeUNvbmZSeExvb3BiYWNrID0gTWliVGFibGVDb2x1bW4oKDEsIDMsIDYsIDEsIDQsIDEsIDQ5NSwgMiwgMSwgNiwgNjEsIDEwLCAxLCAyKSwgSW50ZWdlcjMyKCkuc3VidHlwZShzdWJ0eXBlU3BlYz1Db25zdHJhaW50c1VuaW9uKFNpbmdsZVZhbHVlQ29uc3RyYWludCgxLCAyLCAzKSkpLmNsb25l"}}]
["6b5c74559af081b7890d4c29fc1047a2c558f2cb-4","6b5c74559af081b7890d4c29fc1047a2c558f2cb",{"$cut":{"chars":18712,"head":"PHxmaW1fcHJlZml4fD4KIwojIFB5U05NUCBNSUIgbW9kdWxlIENYQXRtUGh5LU1JQiAoaHR0cDovL3NubXBsYWJzLmNvbS9weXNtaSkKIyBBU04uMSBzb3VyY2UgZmlsZTovLy9Vc2Vycy9kYXZ3YW5nNC9EZXYvbWlicy5zbm1wbGFicy5jb20vYXNuMS9DWEF0bVBoeS1NSUIKIyBQcm9kdWNlZCBieSBweXNtaS0wLjMuNCBhdCBNb24gQXByIDI5IDE4OjE2OjM1IDIwMTkKIyBPbiBob3N0IERBVldBTkc0LU0tMTQ3NSBwbGF0Zm9ybSBEYXJ3aW4gdmVyc2lvbiAxOC41LjAgYnkgdXNlciBkYXZ3YW5nNAojIFVzaW5nIFB5dGhvbiB2ZXJzaW9uIDMuNy4zIChkZWZhdWx0LCBNYXIgMjcgMjAxOSwgMDk6MjM6MTUpIAojCk9jdGV0U3RyaW5nLCBJbnRlZ2VyLCBPYmplY3RJZGVudGlmaWVyID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJBU04xIiwgIk9jdGV0U3RyaW5nIiwgIkludGVnZXIiLCAiT2JqZWN0SWRlbnRpZmllciIpCk5hbWVkVmFsdWVzLCA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiQVNOMS1FTlVNRVJBVElPTiIsICJOYW1lZFZhbHVlcyIpClZhbHVlU2l6ZUNvbnN0cmFpbnQsIFNpbmdsZVZhbHVlQ29uc3RyYWludCwgQ29uc3RyYWludHNJbnRlcnNlY3Rpb24sIFZhbHVlUmFuZ2VDb25zdHJhaW50LCBDb25zdHJhaW50c1VuaW9uID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJBU04xLVJFRklORU1FTlQiLCAiVmFsdWVTaXplQ29uc3RyYWludCIsICJTaW5nbGVWYWx1ZUNvbnN0cmFpbnQiLCAiQ29uc3RyYWludHNJbnRlcnNlY3Rpb24iLCAiVmFsdWVSYW5nZUNvbnN0cmFpbnQiLCAiQ29uc3RyYWludHNVbmlvbiIpCmN4QXRtUGh5LCA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiQ1hQcm9kdWN0LVNNSSIsICJjeEF0bVBoeSIpCmlmSW5kZXgsID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJJRi1NSUIiLCAiaWZJbmRleCIpCk1vZHVsZUNvbXBsaWFuY2UsIE5vdGlmaWNhdGlvbkdyb3VwID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJTTk1QdjItQ09ORiIsICJNb2R1bGVDb21wbGlhbmNlIiwgIk5vdGlmaWNhdGlvbkdyb3VwIikKTW9kdWxlSWRlbnRpdHksIElwQWRkcmVzcywgR2F1Z2UzMiwgTWliSWRlbnRpZmllciwgT2JqZWN0SWRlbnRpdHksIE5vdGlmaWNhdGlvblR5cGUsIE1pYlNjYWxhciwgTWliVGFibGUsIE1pYlRhYmxlUm93LCBNaWJUYWJsZUNvbHVtbiwgVGltZVRpY2tzLCBpc28sIEJpdHMsIENvdW50ZXI2NCwgVW5zaWduZWQzMiwgSW50ZWdlcjMyLCBDb3VudGVyMzIgPSBtaWJCdWlsZGVyLmltcG9ydFN5bWJvbHMoIlNOTVB2Mi1TTUkiLCAiTW9kdWxlSWRlbnRpdHkiLCAiSXBBZGRyZXNzIiwgIkdhdWdlMzIiLCAiTWliSWRlbnRpZmllciIsICJPYmplY3RJZGVudGl0eSIsICJOb3RpZmljYXRpb25UeXBlIiwgIk1pYlNjYWxhciIsICJNaWJUYWJsZSIsICJNaWJUYWJsZVJvdyIsICJNaWJUYWJsZUNvbHVtbiIsICJUaW1lVGlja3MiLCAiaXNvIiwgIkJpdHMiLCAiQ291bnRlcjY0IiwgIlVuc2lnbmVkMzIiLCAiSW50ZWdlcjMyIiwgIkNvdW50ZXIzMiIpCkRpc3BsYXlTdHJpbmcsIFRleHR1YWxDb252ZW50aW9uID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJTTk1QdjItVEMiLCAiRGlzcGxheVN0cmluZyIsICJUZXh0dWFsQ29udmVudGlvbiIpCmNsYXNzIFN3aXRjaChJbnRlZ2VyMzIpOgogICAgc3VidHlwZVNwZWMgPSBJbnRlZ2VyMzIuc3VidHlwZVNwZWMgKyBDb25zdHJhaW50c1VuaW9uKFNpbmdsZVZhbHVlQ29uc3RyYWludCgxLCAyKSkKICAgIG5hbWVkVmFsdWVzID0gTmFtZWRWYWx1ZXMoKCJkaXNhYmxlZCIsIDEpLCAoImVuYWJsZWQiLCAyKSkKCmNsYXNzIEVycm9yU3RhdGUoSW50ZWdlcjMyKToKICAgIHN1YnR5cGVTcGVjID0gSW50ZWdlcjMyLnN1YnR5cGVTcGVjICsgQ29uc3RyYWludHNVbmlvbihTaW5nbGVWYWx1ZUNvbnN0cmFpbnQoMSwgMikpCiAgICBuYW1lZFZhbHVlcyA9IE5hbWVkVmFsdWVzKCgiZXJyb3JOb3REZXRlY3RlZCIsIDEpLCAoImVycm9yRGV0ZWN0ZWQiLCAyKSkKCmF0bVBoeU1pYkxldmVsID0gTWliU2NhbGFyKCgxLCAzLCA2LCAxLCA0LCAxLCA0OTUsIDIsIDEsIDYsIDYxLCAxKSwgSW50ZWdlcjMyKCkpLnNldE1heEFjY2VzcygicmVhZG9ubHkiKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogYXRtUGh5TWliTGV2ZWwuc2V0U3RhdHVzKCdtYW5kYXRvcnknKQphdG1QaHlJbnRlcmZhY2VDb25mVGFibGUgPSBNaWJUYWJsZSgoMSwgMywgNiwgMSwgNCwgMSwgNDk1LCAyLCAxLCA2LCA2MSwgMTApLCApCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiBhdG1QaHlJbnRlcmZhY2VDb25mVGFibGUuc2V0U3RhdHVzKCdtYW5kYXRvcnknKQphdG1QaHlJbnRlcmZhY2VDb25mRW50cnkgPSBNaWJUYWJsZVJvdygoMSwgMywgNiwgMSwgNCwgMSwgNDk1LCAyLCAxLCA2LCA2MSwgMTAsIDEpLCApLnNldEluZGV4TmFtZXMoKDAsICJJRi1NSUIiLCAiaWZJbmRleCIpKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogYXRtUGh5SW50ZXJmYWNlQ29uZkVudHJ5LnNldFN0YXR1cygnbWFuZGF0b3J5JykKYXRtUGh5Q29uZlR4Q2xvY2tpbmcgPSBNaWJUYWJsZUNvbHVtbigoMSwgMywgNiwgMSwgNCwgMSwgNDk1LCAyLCAxLCA2LCA2MSwgMTAsIDEsIDEpLCBJbnRlZ2VyMzIoKS5zdWJ0eXBlKHN1YnR5cGVTcGVjPUNvbnN0cmFpbnRzVW5pb24oU2luZ2xlVmFsdWVDb25zdHJhaW50KDEsIDIpKSkuY2xvbmUobmFtZWRWYWx1ZXM9TmFtZWRWYWx1ZXMoKCJzeW5jaHJvbml6ZWQiLCAxKSwgKCJ1bnN5bmNocm9uaXplZCIsIDIpKSkuY2xvbmUoJ3N5bmNocm9uaXplZCcpKS5zZXRNYXhBY2Nlc3MoInJlYWR3cml0ZSIpCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiBhdG1QaHlDb25mVHhDbG9ja2luZy5zZXRTdGF0dXMoJ21hbmRhdG9yeScpCmF0bVBoeUNvbmZSeExvb3BiYWNrID0gTWliVGFibGVDb2x1bW4oKDEsIDMsIDYsIDEsIDQsIDEsIDQ5NSwgMiwgMSwgNiwgNjEsIDEwLCAxLCAyKSwgSW50ZWdlcjMyKCkuc3VidHlwZShzdWJ0eXBlU3BlYz1Db25zdHJhaW50c1VuaW9uKFNpbmdsZVZhbHVlQ29uc3RyYWludCgxLCAyLCAzKSkpLmNsb25l"}}]
["d4320b80a0a5251341f33ce3aefed7d2ef1d69b0-1","d4320b80a0a5251341f33ce3aefed7d2ef1d69b0","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgpmcm9tIHNldHVwdG9vbHMgaW1wb3J0IHNldHVwCgpzZXR1cChuYW1lPSJxdWFka2V5IiwKICAgICAgdmVyc2lvbj0iMC4wLjUiLAogICAgICBkZXNjcmlwdGlvbj0iUHl0aG9uIEltcGxlbWVudGF0aW9uIGZvciBHZW9zcGF0aWFsIFF1YWRrZXlzIiwKICAgICAgYXV0aG9yPSJCdWNrIEhlcm91eCIsCiAgICAgIHVybD0iaHR0cHM6Ly9naXRodWIuY29tL2J1Y2toZXJvdXgvUXVhZEtleSIsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgcGFja2FnZXM9WydxdWFka2V5J10KICAgICAgKQo8fGZpbV9lbmR8Pg=="]
["e7cdf1e2ad048bc657297d92454eb406b23da9b0-1","e7cdf1e2ad048bc657297d92454eb406b23da9b0","PHxmaW1fcHJlZml4fD4KIyAhL3Vzci9iaW4vcHl0aG9uMwoiIiIKRnVuY3Rpb25zIGZvciBoYW5kbGluZyBzb21lIGZpbGUgaW5wdXQgYW5kIG91dHB1dCBhbmQgcmVmb3JtYXR0aW5nIHRhc2tzIGluIEdPY2F0cy4KIiIiCmltcG9ydCBqc29uCmltcG9ydCBqc29ucGlja2xlCmltcG9ydCBzeXMKaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQgY3N2Cm1heEludCA9IHN5cy5tYXhzaXplCgp3aGlsZSBUcnVlOgogICAgIyBkZWNyZWFzZSB0aGUgbWF4SW50IHZhbHVlIGJ5IGZhY3RvciAxMAogICAgIyBhcyBsb25nIGFzIHRoZSBPdmVyZmxvd0Vycm9yIG9jY3Vycy4KCiAgICB0cnk6CiAgICAgICAgY3N2LmZpZWxkX3NpemVfbGltaXQobWF4SW50KQogICAgICAgIGJyZWFrCiAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKICAgICAgICBtYXhJbnQgPSBpbnQobWF4SW50LzEwKQoKCiMgVE9ETzogbW92ZSB0byB1c2luZyBKU09OIG5vdCBKc29uUGlja2xlIGFuZCB1c2Ugc29ydF9rZXlzPVRydWUgcGFyYW1ldGVyIHRvIHRlc3Qgb3V0cHV0cyBiZXR3ZWVuIHJ1bnMKZGVmIGpzb25fc2F2ZShvYmosIGZpbGVuYW1lKToKICAgICIiIlRha2VzIGEgUHl0aG9uIG9iamVjdCwgY29udmVydHMgaXQgaW50byBhIEpTT04gc2VyaWFsaXphYmxlIG9iamVjdCAoaWYgaXQgaXMgbm90IGFscmVhZHkpLCBhbmQgc2F2ZXMgaXQgdG8gYSBmaWxlCiAgICB0aGF0IGlzIHNwZWNpZmllZC4KCiAgICA6cGFyYW0gb2JqOiBBIFB5dGhvbiA6cHk6b2JqOmBvYmpgLgogICAgOnBhcmFtIGZpbGVfaGFuZGxlIGZpbGVuYW1lOiBBIHBhdGggdG8gb3V0cHV0IHRoZSByZXN1bHRpbmcgSlNPTiBmaWxlLgogICAgIiIiCiAgICBpZiB0eXBlKG9iaikgPT0gc3RyIG9yIHR5cGUob2JqKSA9PSBsaXN0OgogICAgICAgIGpzb25fb2JqID0gb2JqCiAgICBlbGlmIHR5cGUob2JqKSA9PSBkaWN0OgogICAgICAgIGpzb25fb2JqID0gZGljdCgpCiAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gb2JqLml0ZW1zKCk6CiAgICAgICAgICAgIGlmIHR5cGUodmFsdWUpID09IHN0ciBvciB0eXBlKHZhbHVlKSA9PSBsaXN0OgogICAgICAgICAgICAgICAgbmV3X3ZhbHVlID0gdmFsdWUKICAgICAgICAgICAgZWxpZiB0eXBlKHZhbHVlKSA9PSBzZXQ6CiAgICAgICAgICAgICAgICBuZXdfdmFsdWUgPSBbaXRlbSBmb3IgaXRlbSBpbiB2YWx1ZV0KICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRGF0YSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQhIikKICAgICAgICAgICAganNvbl9vYmpba2V5XSA9IG5ld192YWx1ZQogICAgZWxpZiB0eXBlKG9iaikgPT0gc2V0OgogICAgICAgIGpzb25fb2JqID0gW2l0ZW0gZm9yIGl0ZW0gaW4gb2JqXQogICAgZWxzZToKICAgICAgICByYWlzZSBFeGNlcHRpb24oIkRhdGEgdHlwZSBpcyBub3Qgc3VwcG9ydGVkISIpCiAgICB3aXRoIG9wZW4oZmlsZW5hbWUrIi5qc29uIiwgJ3cnKSBhcyBqc29uX2ZpbGU6CiAgICAgICAganNvbl90ZXh0ID0ganNvbi5kdW1wcyhqc29uX29iaiwgc29ydF9rZXlzPVRydWUpCiAgICAgICAganNvbl9maWxlLndyaXRlKGpzb25fdGV4dCkKCgpkZWYganNvbnBpY2tsZV9zYXZlKG9iaiwgZmlsZW5hbWUpOgogICAgIiIiVGFrZXMgYSBQeXRob24gb2JqZWN0LCBjb252ZXJ0cyBpdCBpbnRvIGEgSnNvblBpY2tsZSBzdHJpbmcsIGFuZCB3cml0ZXMgaXQgb3V0IHRvIGEgZmlsZS4KCiAgICA6cGFyYW0gb2JqOiBBIFB5dGhvbiA6cHk6b2JqOmBvYmpgCiAgICA6cGFyYW0gZmlsZV9oYW5kbGUgZmlsZW5hbWU6ICBBIHBhdGggdG8gb3V0cHV0IHRoZSByZXN1bHRpbmcgSnNvblBpY2tsZSBmaWxlLgogICAgIiIiCiAgICBmID0gb3BlbihmaWxlbmFtZSsiLmpzb25fcGlja2xlIiwgJ3cnKQogICAganNvbl9vYmogPSBqc29ucGlja2xlLmVuY29kZShvYmosIGtleXM9VHJ1ZSkgICMgVXNlX2pzb25waWNrbGU9VHJ1ZSB1c2VkIHRvIHByZXZlbnQganNvblBpY2tsZSBmcm9tIGVuY29kaW5nIGRpY3RrZXlzIHRvIHN0cmluZ3MuCiAgICBmLndyaXRlKGpzb25fb2JqKQogICAgZi5jbG9zZSgpCgoKZGVmIGpzb25waWNrbGVfbG9hZChmaWxlbmFtZSk6CiAgICAiIiJUYWtlcyBhIEpzb25QaWNrbGUgZmlsZSBhbmQgbG9hZHMgaW4gdGhlIEpzb25QaWNrbGUgb2JqZWN0IGludG8gYSBQeXRob24gb2JqZWN0LgoKICAgIDpwYXJhbSBmaWxlX2hhbmRsZSBmaWxlbmFtZTogQSBwYXRoIHRvIGEgSnNvblBpY2tsZSBmaWxlLgogICAgIiIiCiAgICBmID0gb3BlbihmaWxlbmFtZSkKPHxmaW1faG9sZXw+CgpkZWYgbGlzdF90b19maWxlKGZpbGVuYW1lLCBkYXRhKToKICAgICIiIk1ha2VzIGEgdGV4dCBkb2N1bWVudCBmcm9tIGEgOnB5Om9iajpgbGlzdGAgIG9mIGRhdGEsIHdpdGggZWFjaCBsaW5lIG9mIHRoZSBkb2N1bWVudCBiZWluZyBvbmUgaXRlbSBmcm9tIHRoZSBsaXN0CiAgICAgYW5kIG91dHB1dHMgdGhlIGRvY3VtZW50IGludG8gYSBmaWxlLgoKICAgICA6cGFyYW0gZmlsZV9oYW5kbGUgZmlsZW5hbWU6IEEgcGF0aCB0byB0aGUgb3V0cHV0IGZpbGUuCiAgICAgOnBhcmFtIGRhdGE6IEEgUHl0aG9uIDpweTpvYmo6YGxpc3RgLgogICAgICIiIgogICAgd2l0aCBvcGVuKGZpbGVuYW1lICsgIi50eHQiLCAnd3QnKSBhcyBvdXRfZmlsZToKICAgICAgICBmb3IgbGluZSBpbiBkYXRhOgogICAgICAgICAgICBvdXRfZmlsZS53cml0ZShzdHIobGluZSkgKyAnXG4nKQoKCiMgRnVuY3Rpb25zIGZvciBoYW5kbGluZyBHZW5lIEFubm90YXRpb24gRmlsZXMKZGVmIHdyaXRlX291dF9nYWYoZGF0YSwgZmlsZW5hbWUpOgogICAgIiIiV3JpdGVzIG91dCBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgR2VuZSBBbm5vdGF0aW9uIEZpbGUgKEdBRikgdG8gYSBmaWxlLgoKICAgIDpwYXJhbSBsaXN0IGRhdGE6IEEgOnB5Om9iajpgbGlzdGAgb2JqZWN0IHJlcHJlc2VudGluZyBhIEdBRi4gRWFjaCBpdGVtIGluIHRoZSBsaXN0IHJlcHJlc2VudHMgYSByb3cuCiAgICA6cGFyYW0gZmlsZV9oYW5kbGUgZmlsZW5hbWU6IEEgcGF0aCBhbmQgbmFtZSBmb3IgdGhlIEdBRi4KICAgICIiIgogICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAndycpIGFzIGdhZl9maWxlOgogICAgICAgIGdhZndyaXRlciA9IGNzdi53cml0ZXIoZ2FmX2ZpbGUsIGRlbGltaXRlcj0nXHQnKQogICAgICAgIGZvciBsaW5lIGluIGRhdGE6CiAgICAgICAgICAgIGdhZndyaXRlci53cml0ZXJvdyhbaXRlbSBmb3IgaXRlbSBpbiBsaW5lXSkKCgpkZWYgcGFyc2VfZ2FmKGZpbGVuYW1lKToKICAgICIiIkNvbnZlcnRzIGEgR2VuZSBBbm5vdGF0aW9uIEZpbGUgKEdBRikgaW50byBhIDpweTpvYmo6YGxpc3RgIG9iamVjdCB3aGVyZSBldmVyeSBpdGVtIGlzIGEgcm93IGZyb20gdGhlIEdBRi4KCiAgICA6cGFyYW0gZmlsZV9oYW5kbGUgZmlsZW5hbWU6IFNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBHQUYuCiAgICA6cmV0dXJuOiBBIGxpc3QgcmVwcmVzZW50aW5nIHRoZSBHQUYuCiAgICA6cnR5cGU6IDpweTpvYmo6YGxpc3RgCiAgICAiIiIKICAgIGNvbW1lbnRfbGluZSA9IHJlLmNvbXBpbGUoJ14hJykKICAgIGdhZl9hcnJheSA9IGxpc3QoKQogICAgd2l0aCBvcGVuKG9zLnBhdGgucmVhbHBhdGgoZmlsZW5hbWUpKSBhcyBnYWZfZmlsZToKICAgICAgICBmb3IgbGluZSBpbiBjc3YucmVhZGVyKGdhZl9maWxlLCBkZWxpbWl0ZXI9J1x0Jyk6CiAgICAgICAgICAgIGlmIG5vdCByZS5tYXRjaChjb21tZW50X2xpbmUsIHN0cihsaW5lWzBdKSk6CiAgICAgICAgICAgICAgICBnYWZfYXJyYXkuYXBwZW5kKGxpbmUpCiAgICByZXR1cm4gZ2FmX2FycmF5Cjx8ZmltX3N1ZmZpeHw+CiAgICBqc29uX3N0ciA9IGYucmVhZCgpCiAgICBvYmogPSBqc29ucGlja2xlLmRlY29kZShqc29uX3N0ciwga2V5cz1UcnVlKSAgIyBVc2VfanNvbnBpY2tsZT1UcnVlIHVzZWQgdG8gcHJldmVudCBqc29uUGlja2xlIGZyb20gZW5jb2RpbmcgZGljdGtleXMgdG8gc3RyaW5ncy4KICAgIHJldHVybiBvYmoKCjx8ZmltX2VuZHw+"]
["e7cdf1e2ad048bc657297d92454eb406b23da9b0-2","e7cdf1e2ad048bc657297d92454eb406b23da9b0","PHxmaW1fcHJlZml4fD4KIyAhL3Vzci9iaW4vcHl0aG9uMwoiIiIKRnVuY3Rpb25zIGZvciBoYW5kbGluZyBzb21lIGZpbGUgaW5wdXQgYW5kIG91dHB1dCBhbmQgcmVmb3JtYXR0aW5nIHRhc2tzIGluIEdPY2F0cy4KIiIiCmltcG9ydCBqc29uCmltcG9ydCBqc29ucGlja2xlCmltcG9ydCBzeXMKaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQgY3N2Cm1heEludCA9IHN5cy5tYXhzaXplCgp3aGlsZSBUcnVlOgogICAgIyBkZWNyZWFzZSB0aGUgbWF4SW50IHZhbHVlIGJ5IGZhY3RvciAxMAogICAgIyBhcyBsb25nIGFzIHRoZSBPdmVyZmxvd0Vycm9yIG9jY3Vycy4KCiAgICB0cnk6CiAgICAgICAgY3N2LmZpZWxkX3NpemVfbGltaXQobWF4SW50KQogICAgICAgIGJyZWFrCiAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKICAgICAgICBtYXhJbnQgPSBpbnQobWF4SW50LzEwKQoKCiMgVE9ETzogbW92ZSB0byB1c2luZyBKU09OIG5vdCBKc29uUGlja2xlIGFuZCB1c2Ugc29ydF9rZXlzPVRydWUgcGFyYW1ldGVyIHRvIHRlc3Qgb3V0cHV0cyBiZXR3ZWVuIHJ1bnMKZGVmIGpzb25fc2F2ZShvYmosIGZpbGVuYW1lKToKICAgICIiIlRha2VzIGEgUHl0aG9uIG9iamVjdCwgY29udmVydHMgaXQgaW50byBhIEpTT04gc2VyaWFsaXphYmxlIG9iamVjdCAoaWYgaXQgaXMgbm90IGFscmVhZHkpLCBhbmQgc2F2ZXMgaXQgdG8gYSBmaWxlCiAgICB0aGF0IGlzIHNwZWNpZmllZC4KCiAgICA6cGFyYW0gb2JqOiBBIFB5dGhvbiA6cHk6b2JqOmBvYmpgLgogICAgOnBhcmFtIGZpbGVfaGFuZGxlIGZpbGVuYW1lOiBBIHBhdGggdG8gb3V0cHV0IHRoZSByZXN1bHRpbmcgSlNPTiBmaWxlLgogICAgIiIiCiAgICBpZiB0eXBlKG9iaikgPT0gc3RyIG9yIHR5cGUob2JqKSA9PSBsaXN0OgogICAgICAgIGpzb25fb2JqID0gb2JqCiAgICBlbGlmIHR5cGUob2JqKSA9PSBkaWN0OgogICAgICAgIGpzb25fb2JqID0gZGljdCgpCiAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gb2JqLml0ZW1zKCk6CiAgICAgICAgICAgIGlmIHR5cGUodmFsdWUpID09IHN0ciBvciB0eXBlKHZhbHVlKSA9PSBsaXN0OgogICAgICAgICAgICAgICAgbmV3X3ZhbHVlID0gdmFsdWUKICAgICAgICAgICAgZWxpZiB0eXBlKHZhbHVlKSA9PSBzZXQ6CiAgICAgICAgICAgICAgICBuZXdfdmFsdWUgPSBbaXRlbSBmb3IgaXRlbSBpbiB2YWx1ZV0KICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRGF0YSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQhIikKICAgICAgICAgICAganNvbl9vYmpba2V5XSA9IG5ld192YWx1ZQogICAgZWxpZiB0eXBlKG9iaikgPT0gc2V0OgogICAgICAgIGpzb25fb2JqID0gW2l0ZW0gZm9yIGl0ZW0gaW4gb2JqXQogICAgZWxzZToKICAgICAgICByYWlzZSBFeGNlcHRpb24oIkRhdGEgdHlwZSBpcyBub3Qgc3VwcG9ydGVkISIpCiAgICB3aXRoIG9wZW4oZmlsZW5hbWUrIi5qc29uIiwgJ3cnKSBhcyBqc29uX2ZpbGU6CiAgICAgICAganNvbl90ZXh0ID0ganNvbi5kdW1wcyhqc29uX29iaiwgc29ydF9rZXlzPVRydWUpCiAgICAgICAganNvbl9maWxlLndyaXRlKGpzb25fdGV4dCkKCgpkZWYganNvbnBpY2tsZV9zYXZlKG9iaiwgZmlsZW5hbWUpOgogICAgIiIiVGFrZXMgYSBQeXRob24gb2JqZWN0LCBjb252ZXJ0cyBpdCBpbnRvIGEgSnNvblBpY2tsZSBzdHJpbmcsIGFuZCB3cml0ZXMgaXQgb3V0IHRvIGEgZmlsZS4KCiAgICA6cGFyYW0gb2JqOiBBIFB5dGhvbiA6cHk6b2JqOmBvYmpgCiAgICA6cGFyYW0gZmlsZV9oYW5kbGUgZmlsZW5hbWU6ICBBIHBhdGggdG8gb3V0cHV0IHRoZSByZXN1bHRpbmcgSnNvblBpY2tsZSBmaWxlLgogICAgIiIiCiAgICBmID0gb3BlbihmaWxlbmFtZSsiLmpzb25fcGlja2xlIiwgJ3cnKQogICAganNvbl9vYmogPSBqc29ucGlja2xlLmVuY29kZShvYmosIGtleXM9VHJ1ZSkgICMgVXNlX2pzb25waWNrbGU9VHJ1ZSB1c2VkIHRvIHByZXZlbnQganNvblBpY2tsZSBmcm9tIGVuY29kaW5nIGRpY3RrZXlzIHRvIHN0cmluZ3MuCiAgICBmLndyaXRlKGpzb25fb2JqKQogICAgZi5jbG9zZSgpCgoKZGVmIGpzb25waWNrbGVfbG9hZChmaWxlbmFtZSk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICIiIlRha2VzIGEgSnNvblBpY2tsZSBmaWxlIGFuZCBsb2FkcyBpbiB0aGUgSnNvblBpY2tsZSBvYmplY3QgaW50byBhIFB5dGhvbiBvYmplY3QuCgogICAgOnBhcmFtIGZpbGVfaGFuZGxlIGZpbGVuYW1lOiBBIHBhdGggdG8gYSBKc29uUGlja2xlIGZpbGUuCiAgICAiIiIKPHxmaW1fZW5kfD4="]
["e7cdf1e2ad048bc657297d92454eb406b23da9b0-3","e7cdf1e2ad048bc657297d92454eb406b23da9b0","PHxmaW1fcHJlZml4fD4KIyAhL3Vzci9iaW4vcHl0aG9uMwoiIiIKRnVuY3Rpb25zIGZvciBoYW5kbGluZyBzb21lIGZpbGUgaW5wdXQgYW5kIG91dHB1dCBhbmQgcmVmb3JtYXR0aW5nIHRhc2tzIGluIEdPY2F0cy4KIiIiCmltcG9ydCBqc29uCmltcG9ydCBqc29ucGlja2xlCmltcG9ydCBzeXMKaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQgY3N2Cm1heEludCA9IHN5cy5tYXhzaXplCgp3aGlsZSBUcnVlOgogICAgIyBkZWNyZWFzZSB0aGUgbWF4SW50IHZhbHVlIGJ5IGZhY3RvciAxMAogICAgIyBhcyBsb25nIGFzIHRoZSBPdmVyZmxvd0Vycm9yIG9jY3Vycy4KCiAgICB0cnk6CiAgICAgICAgY3N2LmZpZWxkX3NpemVfbGltaXQobWF4SW50KQogICAgICAgIGJyZWFrCiAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKICAgICAgICBtYXhJbnQgPSBpbnQobWF4SW50LzEwKQoKCiMgVE9ETzogbW92ZSB0byB1c2luZyBKU09OIG5vdCBKc29uUGlja2xlIGFuZCB1c2Ugc29ydF9rZXlzPVRydWUgcGFyYW1ldGVyIHRvIHRlc3Qgb3V0cHV0cyBiZXR3ZWVuIHJ1bnMKZGVmIGpzb25fc2F2ZShvYmosIGZpbGVuYW1lKToKICAgICIiIlRha2VzIGEgUHl0aG9uIG9iamVjdCwgY29udmVydHMgaXQgaW50byBhIEpTT04gc2VyaWFsaXphYmxlIG9iamVjdCAoaWYgaXQgaXMgbm90IGFscmVhZHkpLCBhbmQgc2F2ZXMgaXQgdG8gYSBmaWxlCiAgICB0aGF0IGlzIHNwZWNpZmllZC4KCiAgICA6cGFyYW0gb2JqOiBBIFB5dGhvbiA6cHk6b2JqOmBvYmpgLgogICAgOnBhcmFtIGZpbGVfaGFuZGxlIGZpbGVuYW1lOiBBIHBhdGggdG8gb3V0cHV0IHRoZSByZXN1bHRpbmcgSlNPTiBmaWxlLgogICAgIiIiCiAgICBpZiB0eXBlKG9iaikgPT0gc3RyIG9yIHR5cGUob2JqKSA9PSBsaXN0OgogICAgICAgIGpzb25fb2JqID0gb2JqCiAgICBlbGlmIHR5cGUob2JqKSA9PSBkaWN0OgogICAgICAgIGpzb25fb2JqID0gZGljdCgpCiAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gb2JqLml0ZW1zKCk6CiAgICAgICAgICAgIGlmIHR5cGUodmFsdWUpID09IHN0ciBvciB0eXBlKHZhbHVlKSA9PSBsaXN0OgogICAgICAgICAgICAgICAgbmV3X3ZhbHVlID0gdmFsdWUKICAgICAgICAgICAgZWxpZiB0eXBlKHZhbHVlKSA9PSBzZXQ6CiAgICAgICAgICAgICAgICBuZXdfdmFsdWUgPSBbaXRlbSBmb3IgaXRlbSBpbiB2YWx1ZV0KICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRGF0YSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQhIikKICAgICAgICAgICAganNvbl9vYmpba2V5XSA9IG5ld192YWx1ZQogICAgZWxpZiB0eXBlKG9iaikgPT0gc2V0OgogICAgICAgIGpzb25fb2JqID0gW2l0ZW0gZm9yIGl0ZW0gaW4gb2JqXQogICAgZWxzZToKICAgICAgICByYWlzZSBFeGNlcHRpb24oIkRhdGEgdHlwZSBpcyBub3Qgc3VwcG9ydGVkISIpCiAgICB3aXRoIG9wZW4oZmlsZW5hbWUrIi5qc29uIiwgJ3cnKSBhcyBqc29uX2ZpbGU6CiAgICAgICAganNvbl90ZXh0ID0ganNvbi5kdW1wcyhqc29uX29iaiwgc29ydF9rZXlzPVRydWUpCiAgICAgICAganNvbl9maWxlLndyaXRlKGpzb25fdGV4dCkKCgpkZWYganNvbnBpY2tsZV9zYXZlKG9iaiwgZmlsZW5hbWUpOgogICAgIiIiVGFrZXMgYSBQeXRob24gb2JqZWN0LCBjb252ZXJ0cyBpdCBpbnRvIGEgSnNvblBpY2tsZSBzdHJpbmcsIGFuZCB3cml0ZXMgaXQgb3V0IHRvIGEgZmlsZS4KCiAgICA6cGFyYW0gb2JqOiBBIFB5dGhvbiA6cHk6b2JqOmBvYmpgCiAgICA6cGFyYW0gZmlsZV9oYW5kbGUgZmlsZW5hbWU6ICBBIHBhdGggdG8gb3V0cHV0IHRoZSByZXN1bHRpbmcgSnNvblBpY2tsZSBmaWxlLgogICAgIiIiCiAgICBmID0gb3BlbihmaWxlbmFtZSsiLmpzb25fcGlja2xlIiwgJ3cnKQogICAganNvbl9vYmogPSBqc29ucGlja2xlLmVuY29kZShvYmosIGtleXM9VHJ1ZSkgICMgVXNlX2pzb25waWNrbGU9VHJ1ZSB1c2VkIHRvIHByZXZlbnQganNvblBpY2tsZSBmcm9tIGVuY29kaW5nIGRpY3RrZXlzIHRvIHN0cmluZ3MuCiAgICBmLndyaXRlKGpzb25fb2JqKQogICAgZi5jbG9zZSgpCgoKZGVmIGpzb25waWNrbGVfbG9hZChmaWxlbmFtZSk6CiAgICAiIiJUYWtlcyBhIEpzb25QaWNrbGUgZmlsZSBhbmQgbG9hZHMgaW4gdGhlIEpzb25QaWNrbGUgb2JqZWN0IGludG8gYSBQeXRob24gb2JqZWN0LgoKICAgIDpwYXJhbSBmaWxlX2hhbmRsZSBmaWxlbmFtZTogQSBwYXRoIHRvIGEgSnNvblBpY2tsZSBmaWxlLgo8fGZpbV9ob2xlfD4KICAgIHJldHVybiBvYmoKCgpkZWYgbGlzdF90b19maWxlKGZpbGVuYW1lLCBkYXRhKToKICAgICIiIk1ha2VzIGEgdGV4dCBkb2N1bWVudCBmcm9tIGEgOnB5Om9iajpgbGlzdGAgIG9mIGRhdGEsIHdpdGggZWFjaCBsaW5lIG9mIHRoZSBkb2N1bWVudCBiZWluZyBvbmUgaXRlbSBmcm9tIHRoZSBsaXN0CiAgICAgYW5kIG91dHB1dHMgdGhlIGRvY3VtZW50IGludG8gYSBmaWxlLgoKICAgICA6cGFyYW0gZmlsZV9oYW5kbGUgZmlsZW5hbWU6IEEgcGF0aCB0byB0aGUgb3V0cHV0IGZpbGUuCiAgICAgOnBhcmFtIGRhdGE6IEEgUHl0aG9uIDpweTpvYmo6YGxpc3RgLgogICAgICIiIgogICAgd2l0aCBvcGVuKGZpbGVuYW1lICsgIi50eHQiLCAnd3QnKSBhcyBvdXRfZmlsZToKICAgICAgICBmb3IgbGluZSBpbiBkYXRhOgogICAgICAgICAgICBvdXRfZmlsZS53cml0ZShzdHIobGluZSkgKyAnXG4nKQoKCiMgRnVuY3Rpb25zIGZvciBoYW5kbGluZyBHZW5lIEFubm90YXRpb24gRmlsZXMKZGVmIHdyaXRlX291dF9nYWYoZGF0YSwgZmlsZW5hbWUpOgogICAgIiIiV3JpdGVzIG91dCBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgR2VuZSBBbm5vdGF0aW9uIEZpbGUgKEdBRikgdG8gYSBmaWxlLgoKICAgIDpwYXJhbSBsaXN0IGRhdGE6IEEgOnB5Om9iajpgbGlzdGAgb2JqZWN0IHJlcHJlc2VudGluZyBhIEdBRi4gRWFjaCBpdGVtIGluIHRoZSBsaXN0IHJlcHJlc2VudHMgYSByb3cuCiAgICA6cGFyYW0gZmlsZV9oYW5kbGUgZmlsZW5hbWU6IEEgcGF0aCBhbmQgbmFtZSBmb3IgdGhlIEdBRi4KICAgICIiIgogICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAndycpIGFzIGdhZl9maWxlOgogICAgICAgIGdhZndyaXRlciA9IGNzdi53cml0ZXIoZ2FmX2ZpbGUsIGRlbGltaXRlcj0nXHQnKQogICAgICAgIGZvciBsaW5lIGluIGRhdGE6CiAgICAgICAgICAgIGdhZndyaXRlci53cml0ZXJvdyhbaXRlbSBmb3IgaXRlbSBpbiBsaW5lXSkKCgpkZWYgcGFyc2VfZ2FmKGZpbGVuYW1lKToKICAgICIiIkNvbnZlcnRzIGEgR2VuZSBBbm5vdGF0aW9uIEZpbGUgKEdBRikgaW50byBhIDpweTpvYmo6YGxpc3RgIG9iamVjdCB3aGVyZSBldmVyeSBpdGVtIGlzIGEgcm93IGZyb20gdGhlIEdBRi4KCiAgICA6cGFyYW0gZmlsZV9oYW5kbGUgZmlsZW5hbWU6IFNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBHQUYuCiAgICA6cmV0dXJuOiBBIGxpc3QgcmVwcmVzZW50aW5nIHRoZSBHQUYuCiAgICA6cnR5cGU6IDpweTpvYmo6YGxpc3RgCiAgICAiIiIKICAgIGNvbW1lbnRfbGluZSA9IHJlLmNvbXBpbGUoJ14hJykKICAgIGdhZl9hcnJheSA9IGxpc3QoKQogICAgd2l0aCBvcGVuKG9zLnBhdGgucmVhbHBhdGgoZmlsZW5hbWUpKSBhcyBnYWZfZmlsZToKICAgICAgICBmb3IgbGluZSBpbiBjc3YucmVhZGVyKGdhZl9maWxlLCBkZWxpbWl0ZXI9J1x0Jyk6CiAgICAgICAgICAgIGlmIG5vdCByZS5tYXRjaChjb21tZW50X2xpbmUsIHN0cihsaW5lWzBdKSk6CiAgICAgICAgICAgICAgICBnYWZfYXJyYXkuYXBwZW5kKGxpbmUpCiAgICByZXR1cm4gZ2FmX2FycmF5Cjx8ZmltX3N1ZmZpeHw+CiAgICAiIiIKICAgIGYgPSBvcGVuKGZpbGVuYW1lKQogICAganNvbl9zdHIgPSBmLnJlYWQoKQogICAgb2JqID0ganNvbnBpY2tsZS5kZWNvZGUoanNvbl9zdHIsIGtleXM9VHJ1ZSkgICMgVXNlX2pzb25waWNrbGU9VHJ1ZSB1c2VkIHRvIHByZXZlbnQganNvblBpY2tsZSBmcm9tIGVuY29kaW5nIGRpY3RrZXlzIHRvIHN0cmluZ3MuCjx8ZmltX2VuZHw+"]
["e7cdf1e2ad048bc657297d92454eb406b23da9b0-4","e7cdf1e2ad048bc657297d92454eb406b23da9b0","PHxmaW1fcHJlZml4fD4KIyAhL3Vzci9iaW4vcHl0aG9uMwoiIiIKRnVuY3Rpb25zIGZvciBoYW5kbGluZyBzb21lIGZpbGUgaW5wdXQgYW5kIG91dHB1dCBhbmQgcmVmb3JtYXR0aW5nIHRhc2tzIGluIEdPY2F0cy4KIiIiCmltcG9ydCBqc29uCmltcG9ydCBqc29ucGlja2xlCmltcG9ydCBzeXMKaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQgY3N2Cm1heEludCA9IHN5cy5tYXhzaXplCgp3aGlsZSBUcnVlOgogICAgIyBkZWNyZWFzZSB0aGUgbWF4SW50IHZhbHVlIGJ5IGZhY3RvciAxMAogICAgIyBhcyBsb25nIGFzIHRoZSBPdmVyZmxvd0Vycm9yIG9jY3Vycy4KCiAgICB0cnk6CiAgICAgICAgY3N2LmZpZWxkX3NpemVfbGltaXQobWF4SW50KQogICAgICAgIGJyZWFrCiAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKICAgICAgICBtYXhJbnQgPSBpbnQobWF4SW50LzEwKQoKCiMgVE9ETzogbW92ZSB0byB1c2luZyBKU09OIG5vdCBKc29uUGlja2xlIGFuZCB1c2Ugc29ydF9rZXlzPVRydWUgcGFyYW1ldGVyIHRvIHRlc3Qgb3V0cHV0cyBiZXR3ZWVuIHJ1bnMKZGVmIGpzb25fc2F2ZShvYmosIGZpbGVuYW1lKToKICAgICIiIlRha2VzIGEgUHl0aG9uIG9iamVjdCwgY29udmVydHMgaXQgaW50byBhIEpTT04gc2VyaWFsaXphYmxlIG9iamVjdCAoaWYgaXQgaXMgbm90IGFscmVhZHkpLCBhbmQgc2F2ZXMgaXQgdG8gYSBmaWxlCiAgICB0aGF0IGlzIHNwZWNpZmllZC4KCiAgICA6cGFyYW0gb2JqOiBBIFB5dGhvbiA6cHk6b2JqOmBvYmpgLgogICAgOnBhcmFtIGZpbGVfaGFuZGxlIGZpbGVuYW1lOiBBIHBhdGggdG8gb3V0cHV0IHRoZSByZXN1bHRpbmcgSlNPTiBmaWxlLgogICAgIiIiCiAgICBpZiB0eXBlKG9iaikgPT0gc3RyIG9yIHR5cGUob2JqKSA9PSBsaXN0OgogICAgICAgIGpzb25fb2JqID0gb2JqCiAgICBlbGlmIHR5cGUob2JqKSA9PSBkaWN0OgogICAgICAgIGpzb25fb2JqID0gZGljdCgpCiAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gb2JqLml0ZW1zKCk6CiAgICAgICAgICAgIGlmIHR5cGUodmFsdWUpID09IHN0ciBvciB0eXBlKHZhbHVlKSA9PSBsaXN0OgogICAgICAgICAgICAgICAgbmV3X3ZhbHVlID0gdmFsdWUKICAgICAgICAgICAgZWxpZiB0eXBlKHZhbHVlKSA9PSBzZXQ6CiAgICAgICAgICAgICAgICBuZXdfdmFsdWUgPSBbaXRlbSBmb3IgaXRlbSBpbiB2YWx1ZV0KICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRGF0YSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQhIikKICAgICAgICAgICAganNvbl9vYmpba2V5XSA9IG5ld192YWx1ZQogICAgZWxpZiB0eXBlKG9iaikgPT0gc2V0OgogICAgICAgIGpzb25fb2JqID0gW2l0ZW0gZm9yIGl0ZW0gaW4gb2JqXQogICAgZWxzZToKICAgICAgICByYWlzZSBFeGNlcHRpb24oIkRhdGEgdHlwZSBpcyBub3Qgc3VwcG9ydGVkISIpCiAgICB3aXRoIG9wZW4oZmlsZW5hbWUrIi5qc29uIiwgJ3cnKSBhcyBqc29uX2ZpbGU6CiAgICAgICAganNvbl90ZXh0ID0ganNvbi5kdW1wcyhqc29uX29iaiwgc29ydF9rZXlzPVRydWUpCiAgICAgICAganNvbl9maWxlLndyaXRlKGpzb25fdGV4dCkKCgpkZWYganNvbnBpY2tsZV9zYXZlKG9iaiwgZmlsZW5hbWUpOgogICAgIiIiVGFrZXMgYSBQeXRob24gb2JqZWN0LCBjb252ZXJ0cyBpdCBpbnRvIGEgSnNvblBpY2tsZSBzdHJpbmcsIGFuZCB3cml0ZXMgaXQgb3V0IHRvIGEgZmlsZS4KCiAgICA6cGFyYW0gb2JqOiBBIFB5dGhvbiA6cHk6b2JqOmBvYmpgCiAgICA6cGFyYW0gZmlsZV9oYW5kbGUgZmlsZW5hbWU6ICBBIHBhdGggdG8gb3V0cHV0IHRoZSByZXN1bHRpbmcgSnNvblBpY2tsZSBmaWxlLgogICAgIiIiCiAgICBmID0gb3BlbihmaWxlbmFtZSsiLmpzb25fcGlja2xlIiwgJ3cnKQogICAganNvbl9vYmogPSBqc29ucGlja2xlLmVuY29kZShvYmosIGtleXM9VHJ1ZSkgICMgVXNlX2pzb25waWNrbGU9VHJ1ZSB1c2VkIHRvIHByZXZlbnQganNvblBpY2tsZSBmcm9tIGVuY29kaW5nIGRpY3RrZXlzIHRvIHN0cmluZ3MuCiAgICBmLndyaXRlKGpzb25fb2JqKQogICAgZi5jbG9zZSgpCgoKZGVmIGpzb25waWNrbGVfbG9hZChmaWxlbmFtZSk6CiAgICAiIiJUYWtlcyBhIEpzb25QaWNrbGUgZmlsZSBhbmQgbG9hZHMgaW4gdGhlIEpzb25QaWNrbGUgb2JqZWN0IGludG8gYSBQeXRob24gb2JqZWN0LgoKICAgIDpwYXJhbSBmaWxlX2hhbmRsZSBmaWxlbmFtZTogQSBwYXRoIHRvIGEgSnNvblBpY2tsZSBmaWxlLgogICAgIiIiCiAgICBmID0gb3BlbihmaWxlbmFtZSkKICAgIGpzb25fc3RyID0gZi5yZWFkKCkKICAgIG9iaiA9IGpzb25waWNrbGUuZGVjb2RlKGpzb25fc3RyLCBrZXlzPVRydWUpICAjIFVzZV9qc29ucGlja2xlPVRydWUgdXNlZCB0byBwcmV2ZW50IGpzb25QaWNrbGUgZnJvbSBlbmNvZGluZyBkaWN0a2V5cyB0byBzdHJpbmdzLgogICAgcmV0dXJuIG9iagoKCmRlZiBsaXN0X3RvX2ZpbGUoZmlsZW5hbWUsIGRhdGEpOgogICAgIiIiTWFrZXMgYSB0ZXh0IGRvY3VtZW50IGZyb20gYSA6cHk6b2JqOmBsaXN0YCAgb2YgZGF0YSwgd2l0aCBlYWNoIGxpbmUgb2YgdGhlIGRvY3VtZW50IGJlaW5nIG9uZSBpdGVtIGZyb20gdGhlIGxpc3QKICAgICBhbmQgb3V0cHV0cyB0aGUgZG9jdW1lbnQgaW50byBhIGZpbGUuCgogICAgIDpwYXJhbSBmaWxlX2hhbmRsZSBmaWxlbmFtZTogQSBwYXRoIHRvIHRoZSBvdXRwdXQgZmlsZS4KICAgICA6cGFyYW0gZGF0YTogQSBQeXRob24gOnB5Om9iajpgbGlzdGAuCiAgICAgIiIiCiAgICB3aXRoIG9wZW4oZmlsZW5hbWUgKyAiLnR4dCIsICd3dCcpIGFzIG91dF9maWxlOgogICAgICAgIGZvciBsaW5lIGluIGRhdGE6CiAgICAgICAgICAgIG91dF9maWxlLndyaXRlKHN0cihsaW5lKSArICdcbicpCgoKIyBGdW5jdGlvbnMgZm9yIGhhbmRsaW5nIEdlbmUgQW5ub3RhdGlvbiBGaWxlcwpkZWYgd3JpdGVfb3V0X2dhZihkYXRhLCBmaWxlbmFtZSk6CiAgICAiIiJXcml0ZXMgb3V0IGFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBHZW5lIEFubm90YXRpb24gRmlsZSAoR0FGKSB0byBhIGZpbGUuCgo8fGZpbV9ob2xlfD4KICAgICAgICBnYWZ3cml0ZXIgPSBjc3Yud3JpdGVyKGdhZl9maWxlLCBkZWxpbWl0ZXI9J1x0JykKICAgICAgICBmb3IgbGluZSBpbiBkYXRhOgogICAgICAgICAgICBnYWZ3cml0ZXIud3JpdGVyb3coW2l0ZW0gZm9yIGl0ZW0gaW4gbGluZV0pCgoKZGVmIHBhcnNlX2dhZihmaWxlbmFtZSk6CiAgICAiIiJDb252ZXJ0cyBhIEdlbmUgQW5ub3RhdGlvbiBGaWxlIChHQUYpIGludG8gYSA6cHk6b2JqOmBsaXN0YCBvYmplY3Qgd2hlcmUgZXZlcnkgaXRlbSBpcyBhIHJvdyBmcm9tIHRoZSBHQUYuCgogICAgOnBhcmFtIGZpbGVfaGFuZGxlIGZpbGVuYW1lOiBTcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgR0FGLgogICAgOnJldHVybjogQSBsaXN0IHJlcHJlc2VudGluZyB0aGUgR0FGLgogICAgOnJ0eXBlOiA6cHk6b2JqOmBsaXN0YAogICAgIiIiCiAgICBjb21tZW50X2xpbmUgPSByZS5jb21waWxlKCdeIScpCiAgICBnYWZfYXJyYXkgPSBsaXN0KCkKICAgIHdpdGggb3Blbihvcy5wYXRoLnJlYWxwYXRoKGZpbGVuYW1lKSkgYXMgZ2FmX2ZpbGU6CiAgICAgICAgZm9yIGxpbmUgaW4gY3N2LnJlYWRlcihnYWZfZmlsZSwgZGVsaW1pdGVyPSdcdCcpOgogICAgICAgICAgICBpZiBub3QgcmUubWF0Y2goY29tbWVudF9saW5lLCBzdHIobGluZVswXSkpOgogICAgICAgICAgICAgICAgZ2FmX2FycmF5LmFwcGVuZChsaW5lKQogICAgcmV0dXJuIGdhZl9hcnJheQo8fGZpbV9zdWZmaXh8PgogICAgOnBhcmFtIGxpc3QgZGF0YTogQSA6cHk6b2JqOmBsaXN0YCBvYmplY3QgcmVwcmVzZW50aW5nIGEgR0FGLiBFYWNoIGl0ZW0gaW4gdGhlIGxpc3QgcmVwcmVzZW50cyBhIHJvdy4KICAgIDpwYXJhbSBmaWxlX2hhbmRsZSBmaWxlbmFtZTogQSBwYXRoIGFuZCBuYW1lIGZvciB0aGUgR0FGLgogICAgIiIiCiAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3JykgYXMgZ2FmX2ZpbGU6Cjx8ZmltX2VuZHw+"]
["e7cdf1e2ad048bc657297d92454eb406b23da9b0-5","e7cdf1e2ad048bc657297d92454eb406b23da9b0","PHxmaW1fcHJlZml4fD4KIyAhL3Vzci9iaW4vcHl0aG9uMwoiIiIKRnVuY3Rpb25zIGZvciBoYW5kbGluZyBzb21lIGZpbGUgaW5wdXQgYW5kIG91dHB1dCBhbmQgcmVmb3JtYXR0aW5nIHRhc2tzIGluIEdPY2F0cy4KIiIiCmltcG9ydCBqc29uCmltcG9ydCBqc29ucGlja2xlCmltcG9ydCBzeXMKaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQgY3N2Cm1heEludCA9IHN5cy5tYXhzaXplCgp3aGlsZSBUcnVlOgogICAgIyBkZWNyZWFzZSB0aGUgbWF4SW50IHZhbHVlIGJ5IGZhY3RvciAxMAogICAgIyBhcyBsb25nIGFzIHRoZSBPdmVyZmxvd0Vycm9yIG9jY3Vycy4KCiAgICB0cnk6CiAgICAgICAgY3N2LmZpZWxkX3NpemVfbGltaXQobWF4SW50KQogICAgICAgIGJyZWFrCiAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKICAgICAgICBtYXhJbnQgPSBpbnQobWF4SW50LzEwKQoKCiMgVE9ETzogbW92ZSB0byB1c2luZyBKU09OIG5vdCBKc29uUGlja2xlIGFuZCB1c2Ugc29ydF9rZXlzPVRydWUgcGFyYW1ldGVyIHRvIHRlc3Qgb3V0cHV0cyBiZXR3ZWVuIHJ1bnMKZGVmIGpzb25fc2F2ZShvYmosIGZpbGVuYW1lKToKICAgICIiIlRha2VzIGEgUHl0aG9uIG9iamVjdCwgY29udmVydHMgaXQgaW50byBhIEpTT04gc2VyaWFsaXphYmxlIG9iamVjdCAoaWYgaXQgaXMgbm90IGFscmVhZHkpLCBhbmQgc2F2ZXMgaXQgdG8gYSBmaWxlCiAgICB0aGF0IGlzIHNwZWNpZmllZC4KCiAgICA6cGFyYW0gb2JqOiBBIFB5dGhvbiA6cHk6b2JqOmBvYmpgLgogICAgOnBhcmFtIGZpbGVfaGFuZGxlIGZpbGVuYW1lOiBBIHBhdGggdG8gb3V0cHV0IHRoZSByZXN1bHRpbmcgSlNPTiBmaWxlLgogICAgIiIiCiAgICBpZiB0eXBlKG9iaikgPT0gc3RyIG9yIHR5cGUob2JqKSA9PSBsaXN0OgogICAgICAgIGpzb25fb2JqID0gb2JqCiAgICBlbGlmIHR5cGUob2JqKSA9PSBkaWN0OgogICAgICAgIGpzb25fb2JqID0gZGljdCgpCiAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gb2JqLml0ZW1zKCk6CiAgICAgICAgICAgIGlmIHR5cGUodmFsdWUpID09IHN0ciBvciB0eXBlKHZhbHVlKSA9PSBsaXN0OgogICAgICAgICAgICAgICAgbmV3X3ZhbHVlID0gdmFsdWUKICAgICAgICAgICAgZWxpZiB0eXBlKHZhbHVlKSA9PSBzZXQ6CiAgICAgICAgICAgICAgICBuZXdfdmFsdWUgPSBbaXRlbSBmb3IgaXRlbSBpbiB2YWx1ZV0KICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRGF0YSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQhIikKICAgICAgICAgICAganNvbl9vYmpba2V5XSA9IG5ld192YWx1ZQogICAgZWxpZiB0eXBlKG9iaikgPT0gc2V0OgogICAgICAgIGpzb25fb2JqID0gW2l0ZW0gZm9yIGl0ZW0gaW4gb2JqXQogICAgZWxzZToKICAgICAgICByYWlzZSBFeGNlcHRpb24oIkRhdGEgdHlwZSBpcyBub3Qgc3VwcG9ydGVkISIpCiAgICB3aXRoIG9wZW4oZmlsZW5hbWUrIi5qc29uIiwgJ3cnKSBhcyBqc29uX2ZpbGU6CiAgICAgICAganNvbl90ZXh0ID0ganNvbi5kdW1wcyhqc29uX29iaiwgc29ydF9rZXlzPVRydWUpCiAgICAgICAganNvbl9maWxlLndyaXRlKGpzb25fdGV4dCkKCgpkZWYganNvbnBpY2tsZV9zYXZlKG9iaiwgZmlsZW5hbWUpOgogICAgIiIiVGFrZXMgYSBQeXRob24gb2JqZWN0LCBjb252ZXJ0cyBpdCBpbnRvIGEgSnNvblBpY2tsZSBzdHJpbmcsIGFuZCB3cml0ZXMgaXQgb3V0IHRvIGEgZmlsZS4KCiAgICA6cGFyYW0gb2JqOiBBIFB5dGhvbiA6cHk6b2JqOmBvYmpgCiAgICA6cGFyYW0gZmlsZV9oYW5kbGUgZmlsZW5hbWU6ICBBIHBhdGggdG8gb3V0cHV0IHRoZSByZXN1bHRpbmcgSnNvblBpY2tsZSBmaWxlLgogICAgIiIiCiAgICBmID0gb3BlbihmaWxlbmFtZSsiLmpzb25fcGlja2xlIiwgJ3cnKQogICAganNvbl9vYmogPSBqc29ucGlja2xlLmVuY29kZShvYmosIGtleXM9VHJ1ZSkgICMgVXNlX2pzb25waWNrbGU9VHJ1ZSB1c2VkIHRvIHByZXZlbnQganNvblBpY2tsZSBmcm9tIGVuY29kaW5nIGRpY3RrZXlzIHRvIHN0cmluZ3MuCiAgICBmLndyaXRlKGpzb25fb2JqKQogICAgZi5jbG9zZSgpCgo8fGZpbV9ob2xlfD4KICAgIDpwYXJhbSBmaWxlX2hhbmRsZSBmaWxlbmFtZTogQSBwYXRoIHRvIGEgSnNvblBpY2tsZSBmaWxlLgogICAgIiIiCiAgICBmID0gb3BlbihmaWxlbmFtZSkKICAgIGpzb25fc3RyID0gZi5yZWFkKCkKICAgIG9iaiA9IGpzb25waWNrbGUuZGVjb2RlKGpzb25fc3RyLCBrZXlzPVRydWUpICAjIFVzZV9qc29ucGlja2xlPVRydWUgdXNlZCB0byBwcmV2ZW50IGpzb25QaWNrbGUgZnJvbSBlbmNvZGluZyBkaWN0a2V5cyB0byBzdHJpbmdzLgogICAgcmV0dXJuIG9iagoKCmRlZiBsaXN0X3RvX2ZpbGUoZmlsZW5hbWUsIGRhdGEpOgogICAgIiIiTWFrZXMgYSB0ZXh0IGRvY3VtZW50IGZyb20gYSA6cHk6b2JqOmBsaXN0YCAgb2YgZGF0YSwgd2l0aCBlYWNoIGxpbmUgb2YgdGhlIGRvY3VtZW50IGJlaW5nIG9uZSBpdGVtIGZyb20gdGhlIGxpc3QKICAgICBhbmQgb3V0cHV0cyB0aGUgZG9jdW1lbnQgaW50byBhIGZpbGUuCgogICAgIDpwYXJhbSBmaWxlX2hhbmRsZSBmaWxlbmFtZTogQSBwYXRoIHRvIHRoZSBvdXRwdXQgZmlsZS4KICAgICA6cGFyYW0gZGF0YTogQSBQeXRob24gOnB5Om9iajpgbGlzdGAuCiAgICAgIiIiCiAgICB3aXRoIG9wZW4oZmlsZW5hbWUgKyAiLnR4dCIsICd3dCcpIGFzIG91dF9maWxlOgogICAgICAgIGZvciBsaW5lIGluIGRhdGE6CiAgICAgICAgICAgIG91dF9maWxlLndyaXRlKHN0cihsaW5lKSArICdcbicpCgoKIyBGdW5jdGlvbnMgZm9yIGhhbmRsaW5nIEdlbmUgQW5ub3RhdGlvbiBGaWxlcwpkZWYgd3JpdGVfb3V0X2dhZihkYXRhLCBmaWxlbmFtZSk6CiAgICAiIiJXcml0ZXMgb3V0IGFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBHZW5lIEFubm90YXRpb24gRmlsZSAoR0FGKSB0byBhIGZpbGUuCgogICAgOnBhcmFtIGxpc3QgZGF0YTogQSA6cHk6b2JqOmBsaXN0YCBvYmplY3QgcmVwcmVzZW50aW5nIGEgR0FGLiBFYWNoIGl0ZW0gaW4gdGhlIGxpc3QgcmVwcmVzZW50cyBhIHJvdy4KICAgIDpwYXJhbSBmaWxlX2hhbmRsZSBmaWxlbmFtZTogQSBwYXRoIGFuZCBuYW1lIGZvciB0aGUgR0FGLgogICAgIiIiCiAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3JykgYXMgZ2FmX2ZpbGU6CiAgICAgICAgZ2Fmd3JpdGVyID0gY3N2LndyaXRlcihnYWZfZmlsZSwgZGVsaW1pdGVyPSdcdCcpCiAgICAgICAgZm9yIGxpbmUgaW4gZGF0YToKICAgICAgICAgICAgZ2Fmd3JpdGVyLndyaXRlcm93KFtpdGVtIGZvciBpdGVtIGluIGxpbmVdKQoKCmRlZiBwYXJzZV9nYWYoZmlsZW5hbWUpOgogICAgIiIiQ29udmVydHMgYSBHZW5lIEFubm90YXRpb24gRmlsZSAoR0FGKSBpbnRvIGEgOnB5Om9iajpgbGlzdGAgb2JqZWN0IHdoZXJlIGV2ZXJ5IGl0ZW0gaXMgYSByb3cgZnJvbSB0aGUgR0FGLgoKICAgIDpwYXJhbSBmaWxlX2hhbmRsZSBmaWxlbmFtZTogU3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIEdBRi4KICAgIDpyZXR1cm46IEEgbGlzdCByZXByZXNlbnRpbmcgdGhlIEdBRi4KICAgIDpydHlwZTogOnB5Om9iajpgbGlzdGAKICAgICIiIgogICAgY29tbWVudF9saW5lID0gcmUuY29tcGlsZSgnXiEnKQogICAgZ2FmX2FycmF5ID0gbGlzdCgpCiAgICB3aXRoIG9wZW4ob3MucGF0aC5yZWFscGF0aChmaWxlbmFtZSkpIGFzIGdhZl9maWxlOgogICAgICAgIGZvciBsaW5lIGluIGNzdi5yZWFkZXIoZ2FmX2ZpbGUsIGRlbGltaXRlcj0nXHQnKToKICAgICAgICAgICAgaWYgbm90IHJlLm1hdGNoKGNvbW1lbnRfbGluZSwgc3RyKGxpbmVbMF0pKToKICAgICAgICAgICAgICAgIGdhZl9hcnJheS5hcHBlbmQobGluZSkKICAgIHJldHVybiBnYWZfYXJyYXkKPHxmaW1fc3VmZml4fD4KCmRlZiBqc29ucGlja2xlX2xvYWQoZmlsZW5hbWUpOgogICAgIiIiVGFrZXMgYSBKc29uUGlja2xlIGZpbGUgYW5kIGxvYWRzIGluIHRoZSBKc29uUGlja2xlIG9iamVjdCBpbnRvIGEgUHl0aG9uIG9iamVjdC4KCjx8ZmltX2VuZHw+"]
["c140e8b1e900778586cd05690d5fce53cbbbfe84-1","c140e8b1e900778586cd05690d5fce53cbbbfe84","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwCgpzZXR1cChuYW1lPSd3ZWJ3b2wnLAogICAgICB2ZXJzaW9uPScxLjAtZGV2JywKICAgICAgYXV0aG9yPSJGcmVkIEhhdGZ1bGwiLAogICAgICBhdXRob3JfZW1haWw9IndlYndvbEBhZG1pcmFsZnJlZC5jb20iLAogICAgICBsaWNlbnNlPSJNSVQiLAogICAgICBzY3JpcHRzPVsnd2Vid29sLnB5J10sCiAgICAgIHVybD0iaHR0cHM6Ly9naXRodWIuY29tL2ZoYXRzL3dlYndvbCIsCiAgICAgIGRlc2NyaXB0aW9uPSJXZWItYmFzZWQgV09MIHBhY2tldCBnZW5lcmF0b3IiLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgIGxvbmdfZGVzY3JpcHRpb249b3BlbigiUkVBRE1FLm1kIikucmVhZCgpKQo8fGZpbV9lbmR8Pg=="]
["c140e8b1e900778586cd05690d5fce53cbbbfe84-2","c140e8b1e900778586cd05690d5fce53cbbbfe84","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwCgpzZXR1cChuYW1lPSd3ZWJ3b2wnLAogICAgICB2ZXJzaW9uPScxLjAtZGV2JywKICAgICAgYXV0aG9yPSJGcmVkIEhhdGZ1bGwiLAogICAgICBhdXRob3JfZW1haWw9IndlYndvbEBhZG1pcmFsZnJlZC5jb20iLAogICAgICBsaWNlbnNlPSJNSVQiLAogICAgICBzY3JpcHRzPVsnd2Vid29sLnB5J10sCiAgICAgIHVybD0iaHR0cHM6Ly9naXRodWIuY29tL2ZoYXRzL3dlYndvbCIsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgZGVzY3JpcHRpb249IldlYi1iYXNlZCBXT0wgcGFja2V0IGdlbmVyYXRvciIsCiAgICAgIGxvbmdfZGVzY3JpcHRpb249b3BlbigiUkVBRE1FLm1kIikucmVhZCgpKQo8fGZpbV9lbmR8Pg=="]
["c140e8b1e900778586cd05690d5fce53cbbbfe84-3","c140e8b1e900778586cd05690d5fce53cbbbfe84","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwCgpzZXR1cChuYW1lPSd3ZWJ3b2wnLAogICAgICB2ZXJzaW9uPScxLjAtZGV2JywKICAgICAgYXV0aG9yPSJGcmVkIEhhdGZ1bGwiLAogICAgICBhdXRob3JfZW1haWw9IndlYndvbEBhZG1pcmFsZnJlZC5jb20iLAogICAgICBsaWNlbnNlPSJNSVQiLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgIHNjcmlwdHM9Wyd3ZWJ3b2wucHknXSwKICAgICAgdXJsPSJodHRwczovL2dpdGh1Yi5jb20vZmhhdHMvd2Vid29sIiwKICAgICAgZGVzY3JpcHRpb249IldlYi1iYXNlZCBXT0wgcGFja2V0IGdlbmVyYXRvciIsCiAgICAgIGxvbmdfZGVzY3JpcHRpb249b3BlbigiUkVBRE1FLm1kIikucmVhZCgpKQo8fGZpbV9lbmR8Pg=="]
["c140e8b1e900778586cd05690d5fce53cbbbfe84-4","c140e8b1e900778586cd05690d5fce53cbbbfe84","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCnNldHVwKG5hbWU9J3dlYndvbCcsCiAgICAgIHZlcnNpb249JzEuMC1kZXYnLAogICAgICBhdXRob3I9IkZyZWQgSGF0ZnVsbCIsCjx8ZmltX2VuZHw+"]
["c140e8b1e900778586cd05690d5fce53cbbbfe84-5","c140e8b1e900778586cd05690d5fce53cbbbfe84","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgogICAgICB2ZXJzaW9uPScxLjAtZGV2JywKICAgICAgYXV0aG9yPSJGcmVkIEhhdGZ1bGwiLAogICAgICBhdXRob3JfZW1haWw9IndlYndvbEBhZG1pcmFsZnJlZC5jb20iLAogICAgICBsaWNlbnNlPSJNSVQiLAogICAgICBzY3JpcHRzPVsnd2Vid29sLnB5J10sCiAgICAgIHVybD0iaHR0cHM6Ly9naXRodWIuY29tL2ZoYXRzL3dlYndvbCIsCiAgICAgIGRlc2NyaXB0aW9uPSJXZWItYmFzZWQgV09MIHBhY2tldCBnZW5lcmF0b3IiLAogICAgICBsb25nX2Rlc2NyaXB0aW9uPW9wZW4oIlJFQURNRS5tZCIpLnJlYWQoKSkKPHxmaW1fc3VmZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwCgpzZXR1cChuYW1lPSd3ZWJ3b2wnLAo8fGZpbV9lbmR8Pg=="]
["2e4c71b49bf133adf0eb8925cfd08a51f5df220c-1","2e4c71b49bf133adf0eb8925cfd08a51f5df220c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKaW1wb3J0IGpzMnB5CmltcG9ydCByZXF1ZXN0cwpmcm9tIHB5cXVlcnkgaW1wb3J0IFB5UXVlcnkKCmZyb20gcHJveHlfbGlzdC51dGlsaXRpZXMgaW1wb3J0IHByb3h5X2lzX3ZhbGlkCgpkZWYgc3B5c19vbmUoKToKCiAgICBkZWYgZ2V0X3Byb3hpZXModXJsKToKCiAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5wb3N0KHVybCwgZGF0YSA9IHsKCiAgICAgICAgICAgICd4cHAnOiA1CiAgICAgICAgfSkKCiAgICAgICAgaHRtbCA9IFB5UXVlcnkocmVzcG9uc2UudGV4dCkKCiAgICAgICAganNfc2VjcmV0X2NvZGUgPSBodG1sKGh0bWwuZmluZCgnYm9keSBzY3JpcHQnKVsyXSkudGV4dCgpCgogICAgICAgIHByb3hpZXMsIHRyX2VsZW1lbnRzID0gW10sIFtodG1sKHRyX2VsZW1lbnQpIGZvciB0cl9lbGVtZW50IGluIGh0bWwuZmluZCgnLnNweTF4LCAuc3B5MXh4JyldCgogICAgICAgIGZvciB0cl9lbGVtZW50IGluIHRyX2VsZW1lbnRzWzE6XToKCiAgICAgICAgICAgIHRkX2VsZW1lbnRzID0gW2h0bWwodGRfZWxlbWVudCkgZm9yIHRkX2VsZW1lbnQgaW4gdHJfZWxlbWVudC5jaGlsZHJlbigndGQnKV0KCiAgICAgICAgICAgIHR5cGUgPSB0ZF9lbGVtZW50c1sxXS50ZXh0KCkuc3BsaXQoJ1xuJykKCiAgICAgICAgICAgIGlmIGxlbih0eXBlKSA+IDEgYW5kIHR5cGVbMV0gPT0gJ1MnOgoKICAgICAgICAgICAgICAgIHR5cGUgPSAnaHR0cHMnCgogICAgICAgICAgICBlbHNlOgoKICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlWzBdLmxvd2VyKCkKCiAgICAgICAgICAgIGpzX3BvcnRfY29kZSA9ICc7IGZ1bmN0aW9uIGEoKSB7cmV0dXJuIFwnXCclc30gYSgpJyAlIHRkX2VsZW1lbnRzWzBdLmZpbmQoJy5zcHkxNCBzY3JpcHQnKS50ZXh0KClbNDM6LTFdCgogICAgICAgICAgICBwb3J0ID0gc3RyKGpzMnB5LmV2YWxfanMoanNfc2VjcmV0X2NvZGUgKyBqc19wb3J0X2NvZGUpKQoKICAgICAgICAgICAgYW5vbnltaXR5X2RpY3QgPSB7CgogICAgICAgICAgICAgICAgJ05PQSc6ICd0cmFuc3BhcmVudCcsCiAgICAgICAgICAgICAgICAnQU5NJzogJ2Fub255bW91cycsCiAgICAgICAgICAgICAgICAnSElBJzogJ2VsaXRlJwogICAgICAgICAgICB9CgogICAgICAgICAgICBwcm94eSA9IHsKCiAgICAgICAgICAgICAgICAnaXAnOiB0ZF9lbGVtZW50c1swXS5maW5kKCcuc3B5MTQnKS5jb250ZW50cygpWzBdLAogICAgICAgICAgICAgICAgJ3BvcnQnOiBwb3J0LAoKICAgICAgICAgICAgICAgICd0eXBlJzogdHlwZSwKICAgICAgICAgICAgICAgICdhbm9ueW1pdHknOiBhbm9ueW1pdHlfZGljdFt0ZF9lbGVtZW50c1syXS50ZXh0KCldLAoKICAgICAgICAgICAgICAgICdjb3VudHJ5JzogdGRfZWxlbWVudHNbM10uY2hpbGRyZW4oJ2EnKS5hdHRyKCdocmVmJykuc3BsaXQoJy8nKVstMl0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgcHJveHlfaXNfdmFsaWQocHJveHkpOgoKICAgICAgICAgICAgICAgIHByb3hpZXMuYXBwZW5kKHByb3h5KQoKICAgICAgICByZXR1cm4gcHJveGllcwoKICAgIHByb3hpZXMsIHVybHMgPSBbXSwgWwoKICAgICAgICAnaHR0cDovL3NweXMub25lL2VuL2ZyZWUtcHJveHktbGlzdC8nLAogICAgICAgICdodHRwOi8vc3B5cy5vbmUvZW4vYW5vbnltb3VzLXByb3h5LWxpc3QvJywKICAgICAgICAnaHR0cDovL3NweXMub25lL2VuL2h0dHBzLXNzbC1wcm94eS8nLAogICAgICAgICdodHRwOi8vc3B5cy5vbmUvZW4vc29ja3MtcHJveHktbGlzdC8nLAogICAgICAgICdodHRwOi8vc3B5cy5vbmUvZW4vaHR0cC1wcm94eS1saXN0LycKICAgIF0KCjx8ZmltX2hvbGV8PgogICAgICAgIHRpbWUuc2xlZXAoMSkKCiAgICByZXR1cm4gcHJveGllcwo8fGZpbV9zdWZmaXh8PgogICAgZm9yIHVybCBpbiB1cmxzOgoKICAgICAgICBwcm94aWVzICs9IGdldF9wcm94aWVzKHVybCkKCjx8ZmltX2VuZHw+"]
["2e4c71b49bf133adf0eb8925cfd08a51f5df220c-2","2e4c71b49bf133adf0eb8925cfd08a51f5df220c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKaW1wb3J0IGpzMnB5CmltcG9ydCByZXF1ZXN0cwpmcm9tIHB5cXVlcnkgaW1wb3J0IFB5UXVlcnkKCmZyb20gcHJveHlfbGlzdC51dGlsaXRpZXMgaW1wb3J0IHByb3h5X2lzX3ZhbGlkCgpkZWYgc3B5c19vbmUoKToKCiAgICBkZWYgZ2V0X3Byb3hpZXModXJsKToKCiAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5wb3N0KHVybCwgZGF0YSA9IHsKCiAgICAgICAgICAgICd4cHAnOiA1CiAgICAgICAgfSkKCiAgICAgICAgaHRtbCA9IFB5UXVlcnkocmVzcG9uc2UudGV4dCkKCiAgICAgICAganNfc2VjcmV0X2NvZGUgPSBodG1sKGh0bWwuZmluZCgnYm9keSBzY3JpcHQnKVsyXSkudGV4dCgpCgogICAgICAgIHByb3hpZXMsIHRyX2VsZW1lbnRzID0gW10sIFtodG1sKHRyX2VsZW1lbnQpIGZvciB0cl9lbGVtZW50IGluIGh0bWwuZmluZCgnLnNweTF4LCAuc3B5MXh4JyldCgogICAgICAgIGZvciB0cl9lbGVtZW50IGluIHRyX2VsZW1lbnRzWzE6XToKCiAgICAgICAgICAgIHRkX2VsZW1lbnRzID0gW2h0bWwodGRfZWxlbWVudCkgZm9yIHRkX2VsZW1lbnQgaW4gdHJfZWxlbWVudC5jaGlsZHJlbigndGQnKV0KCiAgICAgICAgICAgIHR5cGUgPSB0ZF9lbGVtZW50c1sxXS50ZXh0KCkuc3BsaXQoJ1xuJykKCiAgICAgICAgICAgIGlmIGxlbih0eXBlKSA+IDEgYW5kIHR5cGVbMV0gPT0gJ1MnOgoKICAgICAgICAgICAgICAgIHR5cGUgPSAnaHR0cHMnCgogICAgICAgICAgICBlbHNlOgoKICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlWzBdLmxvd2VyKCkKCiAgICAgICAgICAgIGpzX3BvcnRfY29kZSA9ICc7IGZ1bmN0aW9uIGEoKSB7cmV0dXJuIFwnXCclc30gYSgpJyAlIHRkX2VsZW1lbnRzWzBdLmZpbmQoJy5zcHkxNCBzY3JpcHQnKS50ZXh0KClbNDM6LTFdCgogICAgICAgICAgICBwb3J0ID0gc3RyKGpzMnB5LmV2YWxfanMoanNfc2VjcmV0X2NvZGUgKyBqc19wb3J0X2NvZGUpKQoKICAgICAgICAgICAgYW5vbnltaXR5X2RpY3QgPSB7CgogICAgICAgICAgICAgICAgJ05PQSc6ICd0cmFuc3BhcmVudCcsCiAgICAgICAgICAgICAgICAnQU5NJzogJ2Fub255bW91cycsCiAgICAgICAgICAgICAgICAnSElBJzogJ2VsaXRlJwogICAgICAgICAgICB9CgogICAgICAgICAgICBwcm94eSA9IHsKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICAndHlwZSc6IHR5cGUsCiAgICAgICAgICAgICAgICAnYW5vbnltaXR5JzogYW5vbnltaXR5X2RpY3RbdGRfZWxlbWVudHNbMl0udGV4dCgpXSwKCiAgICAgICAgICAgICAgICAnY291bnRyeSc6IHRkX2VsZW1lbnRzWzNdLmNoaWxkcmVuKCdhJykuYXR0cignaHJlZicpLnNwbGl0KCcvJylbLTJdCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIHByb3h5X2lzX3ZhbGlkKHByb3h5KToKCiAgICAgICAgICAgICAgICBwcm94aWVzLmFwcGVuZChwcm94eSkKCiAgICAgICAgcmV0dXJuIHByb3hpZXMKCiAgICBwcm94aWVzLCB1cmxzID0gW10sIFsKCiAgICAgICAgJ2h0dHA6Ly9zcHlzLm9uZS9lbi9mcmVlLXByb3h5LWxpc3QvJywKICAgICAgICAnaHR0cDovL3NweXMub25lL2VuL2Fub255bW91cy1wcm94eS1saXN0LycsCiAgICAgICAgJ2h0dHA6Ly9zcHlzLm9uZS9lbi9odHRwcy1zc2wtcHJveHkvJywKICAgICAgICAnaHR0cDovL3NweXMub25lL2VuL3NvY2tzLXByb3h5LWxpc3QvJywKICAgICAgICAnaHR0cDovL3NweXMub25lL2VuL2h0dHAtcHJveHktbGlzdC8nCiAgICBdCgogICAgZm9yIHVybCBpbiB1cmxzOgoKICAgICAgICBwcm94aWVzICs9IGdldF9wcm94aWVzKHVybCkKCiAgICAgICAgdGltZS5zbGVlcCgxKQoKICAgIHJldHVybiBwcm94aWVzCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgICAgICAgICAgJ2lwJzogdGRfZWxlbWVudHNbMF0uZmluZCgnLnNweTE0JykuY29udGVudHMoKVswXSwKICAgICAgICAgICAgICAgICdwb3J0JzogcG9ydCwKCjx8ZmltX2VuZHw+"]
["2e4c71b49bf133adf0eb8925cfd08a51f5df220c-3","2e4c71b49bf133adf0eb8925cfd08a51f5df220c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKaW1wb3J0IGpzMnB5CmltcG9ydCByZXF1ZXN0cwpmcm9tIHB5cXVlcnkgaW1wb3J0IFB5UXVlcnkKCmZyb20gcHJveHlfbGlzdC51dGlsaXRpZXMgaW1wb3J0IHByb3h5X2lzX3ZhbGlkCgpkZWYgc3B5c19vbmUoKToKCiAgICBkZWYgZ2V0X3Byb3hpZXModXJsKToKCiAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5wb3N0KHVybCwgZGF0YSA9IHsKCiAgICAgICAgICAgICd4cHAnOiA1CiAgICAgICAgfSkKCiAgICAgICAgaHRtbCA9IFB5UXVlcnkocmVzcG9uc2UudGV4dCkKCiAgICAgICAganNfc2VjcmV0X2NvZGUgPSBodG1sKGh0bWwuZmluZCgnYm9keSBzY3JpcHQnKVsyXSkudGV4dCgpCgogICAgICAgIHByb3hpZXMsIHRyX2VsZW1lbnRzID0gW10sIFtodG1sKHRyX2VsZW1lbnQpIGZvciB0cl9lbGVtZW50IGluIGh0bWwuZmluZCgnLnNweTF4LCAuc3B5MXh4JyldCgogICAgICAgIGZvciB0cl9lbGVtZW50IGluIHRyX2VsZW1lbnRzWzE6XToKCiAgICAgICAgICAgIHRkX2VsZW1lbnRzID0gW2h0bWwodGRfZWxlbWVudCkgZm9yIHRkX2VsZW1lbnQgaW4gdHJfZWxlbWVudC5jaGlsZHJlbigndGQnKV0KCiAgICAgICAgICAgIHR5cGUgPSB0ZF9lbGVtZW50c1sxXS50ZXh0KCkuc3BsaXQoJ1xuJykKCiAgICAgICAgICAgIGlmIGxlbih0eXBlKSA+IDEgYW5kIHR5cGVbMV0gPT0gJ1MnOgoKICAgICAgICAgICAgICAgIHR5cGUgPSAnaHR0cHMnCgogICAgICAgICAgICBlbHNlOgoKICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlWzBdLmxvd2VyKCkKCiAgICAgICAgICAgIGpzX3BvcnRfY29kZSA9ICc7IGZ1bmN0aW9uIGEoKSB7cmV0dXJuIFwnXCclc30gYSgpJyAlIHRkX2VsZW1lbnRzWzBdLmZpbmQoJy5zcHkxNCBzY3JpcHQnKS50ZXh0KClbNDM6LTFdCgogICAgICAgICAgICBwb3J0ID0gc3RyKGpzMnB5LmV2YWxfanMoanNfc2VjcmV0X2NvZGUgKyBqc19wb3J0X2NvZGUpKQoKICAgICAgICAgICAgYW5vbnltaXR5X2RpY3QgPSB7CgogICAgICAgICAgICAgICAgJ05PQSc6ICd0cmFuc3BhcmVudCcsCiAgICAgICAgICAgICAgICAnQU5NJzogJ2Fub255bW91cycsCiAgICAgICAgICAgICAgICAnSElBJzogJ2VsaXRlJwogICAgICAgICAgICB9CgogICAgICAgICAgICBwcm94eSA9IHsKCiAgICAgICAgICAgICAgICAnaXAnOiB0ZF9lbGVtZW50c1swXS5maW5kKCcuc3B5MTQnKS5jb250ZW50cygpWzBdLAogICAgICAgICAgICAgICAgJ3BvcnQnOiBwb3J0LAoKICAgICAgICAgICAgICAgICd0eXBlJzogdHlwZSwKICAgICAgICAgICAgICAgICdhbm9ueW1pdHknOiBhbm9ueW1pdHlfZGljdFt0ZF9lbGVtZW50c1syXS50ZXh0KCldLAoKICAgICAgICAgICAgICAgICdjb3VudHJ5JzogdGRfZWxlbWVudHNbM10uY2hpbGRyZW4oJ2EnKS5hdHRyKCdocmVmJykuc3BsaXQoJy8nKVstMl0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgcHJveHlfaXNfdmFsaWQocHJveHkpOgo8fGZpbV9ob2xlfD4KCiAgICBwcm94aWVzLCB1cmxzID0gW10sIFsKCiAgICAgICAgJ2h0dHA6Ly9zcHlzLm9uZS9lbi9mcmVlLXByb3h5LWxpc3QvJywKICAgICAgICAnaHR0cDovL3NweXMub25lL2VuL2Fub255bW91cy1wcm94eS1saXN0LycsCiAgICAgICAgJ2h0dHA6Ly9zcHlzLm9uZS9lbi9odHRwcy1zc2wtcHJveHkvJywKICAgICAgICAnaHR0cDovL3NweXMub25lL2VuL3NvY2tzLXByb3h5LWxpc3QvJywKICAgICAgICAnaHR0cDovL3NweXMub25lL2VuL2h0dHAtcHJveHktbGlzdC8nCiAgICBdCgogICAgZm9yIHVybCBpbiB1cmxzOgoKICAgICAgICBwcm94aWVzICs9IGdldF9wcm94aWVzKHVybCkKCiAgICAgICAgdGltZS5zbGVlcCgxKQoKICAgIHJldHVybiBwcm94aWVzCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgICAgICAgICAgcHJveGllcy5hcHBlbmQocHJveHkpCgogICAgICAgIHJldHVybiBwcm94aWVzCjx8ZmltX2VuZHw+"]
["2e4c71b49bf133adf0eb8925cfd08a51f5df220c-4","2e4c71b49bf133adf0eb8925cfd08a51f5df220c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKaW1wb3J0IGpzMnB5CmltcG9ydCByZXF1ZXN0cwpmcm9tIHB5cXVlcnkgaW1wb3J0IFB5UXVlcnkKCmZyb20gcHJveHlfbGlzdC51dGlsaXRpZXMgaW1wb3J0IHByb3h5X2lzX3ZhbGlkCgpkZWYgc3B5c19vbmUoKToKCiAgICBkZWYgZ2V0X3Byb3hpZXModXJsKToKCiAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5wb3N0KHVybCwgZGF0YSA9IHsKCiAgICAgICAgICAgICd4cHAnOiA1CiAgICAgICAgfSkKCiAgICAgICAgaHRtbCA9IFB5UXVlcnkocmVzcG9uc2UudGV4dCkKCiAgICAgICAganNfc2VjcmV0X2NvZGUgPSBodG1sKGh0bWwuZmluZCgnYm9keSBzY3JpcHQnKVsyXSkudGV4dCgpCgogICAgICAgIHByb3hpZXMsIHRyX2VsZW1lbnRzID0gW10sIFtodG1sKHRyX2VsZW1lbnQpIGZvciB0cl9lbGVtZW50IGluIGh0bWwuZmluZCgnLnNweTF4LCAuc3B5MXh4JyldCgogICAgICAgIGZvciB0cl9lbGVtZW50IGluIHRyX2VsZW1lbnRzWzE6XToKCiAgICAgICAgICAgIHRkX2VsZW1lbnRzID0gW2h0bWwodGRfZWxlbWVudCkgZm9yIHRkX2VsZW1lbnQgaW4gdHJfZWxlbWVudC5jaGlsZHJlbigndGQnKV0KCiAgICAgICAgICAgIHR5cGUgPSB0ZF9lbGVtZW50c1sxXS50ZXh0KCkuc3BsaXQoJ1xuJykKCiAgICAgICAgICAgIGlmIGxlbih0eXBlKSA+IDEgYW5kIHR5cGVbMV0gPT0gJ1MnOgoKICAgICAgICAgICAgICAgIHR5cGUgPSAnaHR0cHMnCgogICAgICAgICAgICBlbHNlOgoKICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlWzBdLmxvd2VyKCkKCiAgICAgICAgICAgIGpzX3BvcnRfY29kZSA9ICc7IGZ1bmN0aW9uIGEoKSB7cmV0dXJuIFwnXCclc30gYSgpJyAlIHRkX2VsZW1lbnRzWzBdLmZpbmQoJy5zcHkxNCBzY3JpcHQnKS50ZXh0KClbNDM6LTFdCgogICAgICAgICAgICBwb3J0ID0gc3RyKGpzMnB5LmV2YWxfanMoanNfc2VjcmV0X2NvZGUgKyBqc19wb3J0X2NvZGUpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgICAgICBhbm9ueW1pdHlfZGljdCA9IHsKCiAgICAgICAgICAgICAgICAnTk9BJzogJ3RyYW5zcGFyZW50JywKPHxmaW1fZW5kfD4="]
["d470a1ef7ee9df9057f97d32b65fe29ecc521aa1-1","d470a1ef7ee9df9057f97d32b65fe29ecc521aa1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKaW1wb3J0IERGTDE2OEEKPHxmaW1faG9sZXw+CiAgICAgICAgU3VjY2Vzc0ZyZXNoPUZhbHNlCiAgICAgICAgcmV0dXJuIEZhbHNlCiAgICBUZW1wPURGTDE2OEEuSGFuZGxlUmVzcG9uc2UoREZMMTY4QS5SZXR1cm5TdHIpCiAgICBERkwxNjhBLlJldHVyblN0cj1UZW1wCiAgICBTdWNjZXNzRnJlc2g9VHJ1ZQogICAgcmV0dXJuIFRydWUgIApkZWYgZ2V0TGF0aXR1ZGUoKToKICAgIGdsb2JhbCBTdWNjZXNzRnJlc2gKICAgIGlmIG5vdCBTdWNjZXNzRnJlc2g6CiAgICAgICAgcmV0dXJuIEZhbHNlLDAuMAogICAgdGVtcD1ERkwxNjhBLlJldHVyblN0cls2OjhdICsgREZMMTY4QS5SZXR1cm5TdHJbNDo2XSArREZMMTY4QS5SZXR1cm5TdHJbMjo0XStERkwxNjhBLlJldHVyblN0clswOjJdCiAgICB0ZW1wPWludCh0ZW1wLDE2KSAKICAgIGlmIHRlbXA+MHhmYWZmZmZmZjoKICAgICAgICByZXR1cm4gRmFsc2UsMC4wCiAgICBMYXRpdHVkZT10ZW1wKjAuMDAwMDAwMS0yMTAuMAogICAgcmV0dXJuIFRydWUsIExhdGl0dWRlCmRlZiBnZXRMb25naXR1ZGUoKToKICAgIGdsb2JhbCBTdWNjZXNzRnJlc2gKICAgIGlmIG5vdCBTdWNjZXNzRnJlc2g6CiAgICAgICAgcmV0dXJuIEZhbHNlLDAuMAogICAgdGVtcD1ERkwxNjhBLlJldHVyblN0clsxNDoxNl0gKyBERkwxNjhBLlJldHVyblN0clsxMjoxNF0gK0RGTDE2OEEuUmV0dXJuU3RyWzEwOjEyXStERkwxNjhBLlJldHVyblN0cls4OjEwXQogICAgdGVtcD1pbnQodGVtcCwxNikgCiAgICBpZiB0ZW1wPjB4ZmFmZmZmZmY6CiAgICAgICAgcmV0dXJuIEZhbHNlLDAuMAogICAgTG9uZ2l0dWRlPXRlbXAqMC4wMDAwMDAxLTIxMC4wCiAgICByZXR1cm4gVHJ1ZSwgTG9uZ2l0dWRlICAgIAo8fGZpbV9zdWZmaXh8PgpTdWNjZXNzRnJlc2g9RmFsc2UKZGVmIHJlZnJlc2goKToKICAgIGdsb2JhbCBTdWNjZXNzRnJlc2gKICAgIGlmIG5vdCBERkwxNjhBLkRpZ2l0YWxDb21tYW5kKCdGRUYzJyk6Cjx8ZmltX2VuZHw+"]
["d470a1ef7ee9df9057f97d32b65fe29ecc521aa1-2","d470a1ef7ee9df9057f97d32b65fe29ecc521aa1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKPHxmaW1faG9sZXw+CiAgICBpZiBub3QgREZMMTY4QS5EaWdpdGFsQ29tbWFuZCgnRkVGMycpOgogICAgICAgIFN1Y2Nlc3NGcmVzaD1GYWxzZQogICAgICAgIHJldHVybiBGYWxzZQogICAgVGVtcD1ERkwxNjhBLkhhbmRsZVJlc3BvbnNlKERGTDE2OEEuUmV0dXJuU3RyKQogICAgREZMMTY4QS5SZXR1cm5TdHI9VGVtcAogICAgU3VjY2Vzc0ZyZXNoPVRydWUKICAgIHJldHVybiBUcnVlICAKZGVmIGdldExhdGl0dWRlKCk6CiAgICBnbG9iYWwgU3VjY2Vzc0ZyZXNoCiAgICBpZiBub3QgU3VjY2Vzc0ZyZXNoOgogICAgICAgIHJldHVybiBGYWxzZSwwLjAKICAgIHRlbXA9REZMMTY4QS5SZXR1cm5TdHJbNjo4XSArIERGTDE2OEEuUmV0dXJuU3RyWzQ6Nl0gK0RGTDE2OEEuUmV0dXJuU3RyWzI6NF0rREZMMTY4QS5SZXR1cm5TdHJbMDoyXQogICAgdGVtcD1pbnQodGVtcCwxNikgCiAgICBpZiB0ZW1wPjB4ZmFmZmZmZmY6CiAgICAgICAgcmV0dXJuIEZhbHNlLDAuMAogICAgTGF0aXR1ZGU9dGVtcCowLjAwMDAwMDEtMjEwLjAKICAgIHJldHVybiBUcnVlLCBMYXRpdHVkZQpkZWYgZ2V0TG9uZ2l0dWRlKCk6CiAgICBnbG9iYWwgU3VjY2Vzc0ZyZXNoCiAgICBpZiBub3QgU3VjY2Vzc0ZyZXNoOgogICAgICAgIHJldHVybiBGYWxzZSwwLjAKICAgIHRlbXA9REZMMTY4QS5SZXR1cm5TdHJbMTQ6MTZdICsgREZMMTY4QS5SZXR1cm5TdHJbMTI6MTRdICtERkwxNjhBLlJldHVyblN0clsxMDoxMl0rREZMMTY4QS5SZXR1cm5TdHJbODoxMF0KICAgIHRlbXA9aW50KHRlbXAsMTYpIAogICAgaWYgdGVtcD4weGZhZmZmZmZmOgogICAgICAgIHJldHVybiBGYWxzZSwwLjAKICAgIExvbmdpdHVkZT10ZW1wKjAuMDAwMDAwMS0yMTAuMAogICAgcmV0dXJuIFRydWUsIExvbmdpdHVkZSAgICAKPHxmaW1fc3VmZml4fD4KaW1wb3J0IERGTDE2OEEKU3VjY2Vzc0ZyZXNoPUZhbHNlCmRlZiByZWZyZXNoKCk6CiAgICBnbG9iYWwgU3VjY2Vzc0ZyZXNoCjx8ZmltX2VuZHw+"]
["d470a1ef7ee9df9057f97d32b65fe29ecc521aa1-3","d470a1ef7ee9df9057f97d32b65fe29ecc521aa1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKaW1wb3J0IERGTDE2OEEKU3VjY2Vzc0ZyZXNoPUZhbHNlCmRlZiByZWZyZXNoKCk6CiAgICBnbG9iYWwgU3VjY2Vzc0ZyZXNoCiAgICBpZiBub3QgREZMMTY4QS5EaWdpdGFsQ29tbWFuZCgnRkVGMycpOgogICAgICAgIFN1Y2Nlc3NGcmVzaD1GYWxzZQogICAgICAgIHJldHVybiBGYWxzZQogICAgVGVtcD1ERkwxNjhBLkhhbmRsZVJlc3BvbnNlKERGTDE2OEEuUmV0dXJuU3RyKQogICAgREZMMTY4QS5SZXR1cm5TdHI9VGVtcAogICAgU3VjY2Vzc0ZyZXNoPVRydWUKICAgIHJldHVybiBUcnVlICAKZGVmIGdldExhdGl0dWRlKCk6CiAgICBnbG9iYWwgU3VjY2Vzc0ZyZXNoCiAgICBpZiBub3QgU3VjY2Vzc0ZyZXNoOgogICAgICAgIHJldHVybiBGYWxzZSwwLjAKICAgIHRlbXA9REZMMTY4QS5SZXR1cm5TdHJbNjo4XSArIERGTDE2OEEuUmV0dXJuU3RyWzQ6Nl0gK0RGTDE2OEEuUmV0dXJuU3RyWzI6NF0rREZMMTY4QS5SZXR1cm5TdHJbMDoyXQogICAgdGVtcD1pbnQodGVtcCwxNikgCiAgICBpZiB0ZW1wPjB4ZmFmZmZmZmY6CiAgICAgICAgcmV0dXJuIEZhbHNlLDAuMAogICAgTGF0aXR1ZGU9dGVtcCowLjAwMDAwMDEtMjEwLjAKICAgIHJldHVybiBUcnVlLCBMYXRpdHVkZQpkZWYgZ2V0TG9uZ2l0dWRlKCk6Cjx8ZmltX2hvbGV8PgogICAgdGVtcD1pbnQodGVtcCwxNikgCiAgICBpZiB0ZW1wPjB4ZmFmZmZmZmY6CiAgICAgICAgcmV0dXJuIEZhbHNlLDAuMAogICAgTG9uZ2l0dWRlPXRlbXAqMC4wMDAwMDAxLTIxMC4wCiAgICByZXR1cm4gVHJ1ZSwgTG9uZ2l0dWRlICAgIAo8fGZpbV9zdWZmaXh8PgogICAgZ2xvYmFsIFN1Y2Nlc3NGcmVzaAogICAgaWYgbm90IFN1Y2Nlc3NGcmVzaDoKICAgICAgICByZXR1cm4gRmFsc2UsMC4wCiAgICB0ZW1wPURGTDE2OEEuUmV0dXJuU3RyWzE0OjE2XSArIERGTDE2OEEuUmV0dXJuU3RyWzEyOjE0XSArREZMMTY4QS5SZXR1cm5TdHJbMTA6MTJdK0RGTDE2OEEuUmV0dXJuU3RyWzg6MTBdCjx8ZmltX2VuZHw+"]
["d470a1ef7ee9df9057f97d32b65fe29ecc521aa1-4","d470a1ef7ee9df9057f97d32b65fe29ecc521aa1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKaW1wb3J0IERGTDE2OEEKU3VjY2Vzc0ZyZXNoPUZhbHNlCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIHJlZnJlc2goKToKICAgIGdsb2JhbCBTdWNjZXNzRnJlc2gKICAgIGlmIG5vdCBERkwxNjhBLkRpZ2l0YWxDb21tYW5kKCdGRUYzJyk6CiAgICAgICAgU3VjY2Vzc0ZyZXNoPUZhbHNlCjx8ZmltX2VuZHw+"]
["0064a8fd92f2d5c8127062ccc55fd51183d7212a-1","0064a8fd92f2d5c8127062ccc55fd51183d7212a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAoKcGx0LnhsYWJlbCgneCcpCnBsdC55bGFiZWwoJ3knKQpwbHQuc2NhdHRlcihbMywgLTMsIC0zLCAzXSwgWzMsIDMsIC0zLCAtM10pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcGx0LmFubm90YXRlKCdBJywgKDMsIDMpKQpwbHQuYW5ub3RhdGUoJ0InLCAoLTMsIDMpKQpwbHQuYW5ub3RhdGUoJ0MnLCAoLTMsIC0zKSkKcGx0LmFubm90YXRlKCdEJywgKDMsIC0zKSkKPHxmaW1fZW5kfD4="]
["0064a8fd92f2d5c8127062ccc55fd51183d7212a-2","0064a8fd92f2d5c8127062ccc55fd51183d7212a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAoKcGx0LnhsYWJlbCgneCcpCnBsdC55bGFiZWwoJ3knKQpwbHQuc2NhdHRlcihbMywgLTMsIC0zLCAzXSwgWzMsIDMsIC0zLCAtM10pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcGx0LmFubm90YXRlKCdBJywgKDMsIDMpKQpwbHQuYW5ub3RhdGUoJ0InLCAoLTMsIDMpKQpwbHQuYW5ub3RhdGUoJ0MnLCAoLTMsIC0zKSkKcGx0LmFubm90YXRlKCdEJywgKDMsIC0zKSkKPHxmaW1fZW5kfD4="]
["0064a8fd92f2d5c8127062ccc55fd51183d7212a-3","0064a8fd92f2d5c8127062ccc55fd51183d7212a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpwbHQueGxhYmVsKCd4JykKcGx0LnlsYWJlbCgneScpCnBsdC5zY2F0dGVyKFszLCAtMywgLTMsIDNdLCBbMywgMywgLTMsIC0zXSkKcGx0LmFubm90YXRlKCdBJywgKDMsIDMpKQo8fGZpbV9lbmR8Pg=="]
["0064a8fd92f2d5c8127062ccc55fd51183d7212a-4","0064a8fd92f2d5c8127062ccc55fd51183d7212a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAoKcGx0LnhsYWJlbCgneCcpCnBsdC55bGFiZWwoJ3knKQpwbHQuc2NhdHRlcihbMywgLTMsIC0zLCAzXSwgWzMsIDMsIC0zLCAtM10pCnBsdC5hbm5vdGF0ZSgnQScsICgzLCAzKSkKcGx0LmFubm90YXRlKCdCJywgKC0zLCAzKSkKcGx0LmFubm90YXRlKCdDJywgKC0zLCAtMykpCnBsdC5hbm5vdGF0ZSgnRCcsICgzLCAtMykpCnBsdC5ncmlkKCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpwbHQuYXhobGluZShsaW5ld2lkdGg9MikKcGx0LmF4dmxpbmUobGluZXdpZHRoPTIpCnBsdC5zaG93KCkKPHxmaW1fZW5kfD4="]
["99f5bc858d826afcb51d79b35b1da2dd8db43402-1","99f5bc858d826afcb51d79b35b1da2dd8db43402","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNldHVwdG9vbHMKCndpdGggb3BlbigiUkVBRE1FLm1kIiwgInIiKSBhcyBmaDoKCWxvbmdfZGVzY3JpcHRpb24gPSBmaC5yZWFkKCkKCnNldHVwdG9vbHMuc2V0dXAoCgluYW1lPSJCQklPUFkiLAoJdmVyc2lvbj0iMC4xLjQiLAoJYXV0aG9yPSJFcmljIE1vcnNlLCBKb3NodWEgS2V5LCBhbmQgTWFyayBZb2RlciIsCglhdXRob3JfZW1haWw9Im1vcnNlZUByb3NlLWh1bG1hbi5lZHUiLAoJZGVzY3JpcHRpb249IkZ1bGwgcHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIEJCSU8gZ3Bpb2QiLAoJbG9uZ19kZXNjcmlwdGlvbj1sb25nX2Rlc2NyaXB0aW9uLAoJbG9uZ19kZXNjcmlwdGlvbl9jb250ZW50X3R5cGU9InRleHQvbWFya2Rvd24iLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cgl1cmw9Imh0dHBzOi8vZ2l0aHViLmNvbS9FcmljTW9yc2UvRUNFNDM0LVByb2plY3QiLAoJcGFja2FnZXM9c2V0dXB0b29scy5maW5kX3BhY2thZ2VzKCksCgljbGFzc2lmaWVycz1bCgkJIlByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzIiwKPHxmaW1fZW5kfD4="]
["99f5bc858d826afcb51d79b35b1da2dd8db43402-2","99f5bc858d826afcb51d79b35b1da2dd8db43402","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNldHVwdG9vbHMKCndpdGggb3BlbigiUkVBRE1FLm1kIiwgInIiKSBhcyBmaDoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoJbG9uZ19kZXNjcmlwdGlvbiA9IGZoLnJlYWQoKQoKPHxmaW1fZW5kfD4="]
["99f5bc858d826afcb51d79b35b1da2dd8db43402-3","99f5bc858d826afcb51d79b35b1da2dd8db43402","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNldHVwdG9vbHMKCndpdGggb3BlbigiUkVBRE1FLm1kIiwgInIiKSBhcyBmaDoKCWxvbmdfZGVzY3JpcHRpb24gPSBmaC5yZWFkKCkKCnNldHVwdG9vbHMuc2V0dXAoCgluYW1lPSJCQklPUFkiLAoJdmVyc2lvbj0iMC4xLjQiLAoJYXV0aG9yPSJFcmljIE1vcnNlLCBKb3NodWEgS2V5LCBhbmQgTWFyayBZb2RlciIsCglhdXRob3JfZW1haWw9Im1vcnNlZUByb3NlLWh1bG1hbi5lZHUiLAoJZGVzY3JpcHRpb249IkZ1bGwgcHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIEJCSU8gZ3Bpb2QiLAoJbG9uZ19kZXNjcmlwdGlvbj1sb25nX2Rlc2NyaXB0aW9uLAo8fGZpbV9ob2xlfD4KCQkiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMiLAoJCSJPcGVyYXRpbmcgU3lzdGVtIDo6IE9TIEluZGVwZW5kZW50IiwKCV0sCglweXRob25fcmVxdWlyZXM9Jz49My42JywKKQo8fGZpbV9zdWZmaXh8PgoJbG9uZ19kZXNjcmlwdGlvbl9jb250ZW50X3R5cGU9InRleHQvbWFya2Rvd24iLAoJdXJsPSJodHRwczovL2dpdGh1Yi5jb20vRXJpY01vcnNlL0VDRTQzNC1Qcm9qZWN0IiwKCXBhY2thZ2VzPXNldHVwdG9vbHMuZmluZF9wYWNrYWdlcygpLAoJY2xhc3NpZmllcnM9Wwo8fGZpbV9lbmR8Pg=="]
["ec62c10c2347384ededcf5c97d89b5b0ddb3b74d-1","ec62c10c2347384ededcf5c97d89b5b0ddb3b74d","PHxmaW1fcHJlZml4fD4KIiIiUGFydGlhbCB1bmlxdWUgaW5kZXhlcwoKUmV2aXNpb24gSUQ6IDgyNzJiMzY3NTk3MQpSZXZpc2VzOiAKQ3JlYXRlIERhdGU6IDIwMTgtMDMtMDUgMTE6Mzc6NTUuOTk2MjAxCgoiIiIKCiMgcmV2aXNpb24gaWRlbnRpZmllcnMsIHVzZWQgYnkgQWxlbWJpYy4KcmV2aXNpb24gPSAiODI3MmIzNjc1OTcxIgpkb3duX3JldmlzaW9uID0gTm9uZQpicmFuY2hfbGFiZWxzID0gTm9uZQpkZXBlbmRzX29uID0gTm9uZQoKZnJvbSBhbGVtYmljIGltcG9ydCBvcAppbXBvcnQgc3FsYWxjaGVteSBhcyBzYQoKCmRlZiB1cGdyYWRlKCk6CiAgICAjIyMgY29tbWFuZHMgYXV0byBnZW5lcmF0ZWQgYnkgQWxlbWJpYyAtIHBsZWFzZSBhZGp1c3QhICMjIwogICAgb3AuY3JlYXRlX2luZGV4KAogICAgICAgICJpeF9hc3Nlc3NtZW50X2FsbGVsZWlkX3VuaXF1ZSIsCiAgICAgICAgImFsbGVsZWFzc2Vzc21lbnQiLAogICAgICAgIFsiYWxsZWxlX2lkIl0sCiAgICAgICAgdW5pcXVlPVRydWUsCiAgICAgICAgcG9zdGdyZXNxbF93aGVyZT1zYS50ZXh0KCJkYXRlX3N1cGVyY2VlZGVkIElTIE5VTEwiKSwKICAgICkKICAgIG9wLmNyZWF0ZV9pbmRleCgKICAgICAgICAiaXhfYWxsZWxlaW50ZXJwcmV0YXRpb25fYWxsZWxlaWRfb25nb2luZ191bmlxdWUiLAogICAgICAgICJhbGxlbGVpbnRlcnByZXRhdGlvbiIsCiAgICAgICAgWyJhbGxlbGVfaWQiXSwKICAgICAgICB1bmlxdWU9VHJ1ZSwKICAgICAgICBwb3N0Z3Jlc3FsX3doZXJlPXNhLnRleHQoInN0YXR1cyBJTiAoJ09uZ29pbmcnLCAnTm90IHN0YXJ0ZWQnKSIpLAogICAgKQogICAgb3AuY3JlYXRlX2luZGV4KAogICAgICAgICJpeF9hbGxlbGVyZXBvcnRfYWxsZWxlaWRfdW5pcXVlIiwKICAgICAgICAiYWxsZWxlcmVwb3J0IiwKICAgICAgICBbImFsbGVsZV9pZCJdLAogICAgICAgIHVuaXF1ZT1UcnVlLAogICAgICAgIHBvc3RncmVzcWxfd2hlcmU9c2EudGV4dCgiZGF0ZV9zdXBlcmNlZWRlZCBJUyBOVUxMIiksCiAgICApCiAgICBvcC5jcmVhdGVfaW5kZXgoCiAgICAgICAgIml4X2FuYWx5c2lzaW50ZXJwcmV0YXRpb25fYW5hbHlzaXNpZF9vbmdvaW5nX3VuaXF1ZSIsCiAgICAgICAgImFuYWx5c2lzaW50ZXJwcmV0YXRpb24iLAogICAgICAgIFsiYW5hbHlzaXNfaWQiXSwKICAgICAgICB1bmlxdWU9VHJ1ZSwKICAgICAgICBwb3N0Z3Jlc3FsX3doZXJlPXNhLnRleHQoInN0YXR1cyBJTiAoJ09uZ29pbmcnLCAnTm90IHN0YXJ0ZWQnKSIpLAogICAgKQogICAgb3AuY3JlYXRlX2luZGV4KAogICAgICAgICJpeF9hbm5vdGF0aW9uX3VuaXF1ZSIsCiAgICAgICAgImFubm90YXRpb24iLAogICAgICAgIFsiYWxsZWxlX2lkIl0sCiAgICAgICAgdW5pcXVlPVRydWUsCiAgICAgICAgcG9zdGdyZXNxbF93aGVyZT1zYS50ZXh0KCJkYXRlX3N1cGVyY2VlZGVkIElTIE5VTEwiKSwKICAgICkKPHxmaW1faG9sZXw+CiAgICAgICAgdW5pcXVlPVRydWUsCiAgICAgICAgcG9zdGdyZXNxbF93aGVyZT1zYS50ZXh0KCJkYXRlX3N1cGVyY2VlZGVkIElTIE5VTEwiKSwKICAgICkKICAgIG9wLmNyZWF0ZV9pbmRleCgKICAgICAgICAiaXhfcmVmZXJlbmNlYXNzZXNzbWVudF9hbGxlbGVpZF9yZWZlcmVuY2VpZF91bmlxdWUiLAogICAgICAgICJyZWZlcmVuY2Vhc3Nlc3NtZW50IiwKICAgICAgICBbImFsbGVsZV9pZCIsICJyZWZlcmVuY2VfaWQiXSwKICAgICAgICB1bmlxdWU9VHJ1ZSwKICAgICAgICBwb3N0Z3Jlc3FsX3doZXJlPXNhLnRleHQoImRhdGVfc3VwZXJjZWVkZWQgSVMgTlVMTCIpLAogICAgKQogICAgIyMjIGVuZCBBbGVtYmljIGNvbW1hbmRzICMjIwoKCmRlZiBkb3duZ3JhZGUoKToKICAgICMjIyBjb21tYW5kcyBhdXRvIGdlbmVyYXRlZCBieSBBbGVtYmljIC0gcGxlYXNlIGFkanVzdCEgIyMjCiAgICBvcC5kcm9wX2luZGV4KAogICAgICAgICJpeF9yZWZlcmVuY2Vhc3Nlc3NtZW50X2FsbGVsZWlkX3JlZmVyZW5jZWlkX3VuaXF1ZSIsIHRhYmxlX25hbWU9InJlZmVyZW5jZWFzc2Vzc21lbnQiCiAgICApCiAgICBvcC5kcm9wX2luZGV4KCJpeF9jdXN0b21hbm5vdGF0aW9uX3VuaXF1ZSIsIHRhYmxlX25hbWU9ImN1c3RvbWFubm90YXRpb24iKQogICAgb3AuZHJvcF9pbmRleCgiaXhfYW5ub3RhdGlvbl91bmlxdWUiLCB0YWJsZV9uYW1lPSJhbm5vdGF0aW9uIikKICAgIG9wLmRyb3BfaW5kZXgoCiAgICAgICAgIml4X2FuYWx5c2lzaW50ZXJwcmV0YXRpb25fYW5hbHlzaXNpZF9vbmdvaW5nX3VuaXF1ZSIsIHRhYmxlX25hbWU9ImFuYWx5c2lzaW50ZXJwcmV0YXRpb24iCiAgICApCiAgICBvcC5kcm9wX2luZGV4KCJpeF9hbGxlbGVyZXBvcnRfYWxsZWxlaWRfdW5pcXVlIiwgdGFibGVfbmFtZT0iYWxsZWxlcmVwb3J0IikKICAgIG9wLmRyb3BfaW5kZXgoCiAgICAgICAgIml4X2FsbGVsZWludGVycHJldGF0aW9uX2FsbGVsZWlkX29uZ29pbmdfdW5pcXVlIiwgdGFibGVfbmFtZT0iYWxsZWxlaW50ZXJwcmV0YXRpb24iCiAgICApCiAgICBvcC5kcm9wX2luZGV4KCJpeF9hc3Nlc3NtZW50X2FsbGVsZWlkX3VuaXF1ZSIsIHRhYmxlX25hbWU9ImFsbGVsZWFzc2Vzc21lbnQiKQogICAgIyMjIGVuZCBBbGVtYmljIGNvbW1hbmRzICMjIwo8fGZpbV9zdWZmaXh8PgogICAgb3AuY3JlYXRlX2luZGV4KAogICAgICAgICJpeF9jdXN0b21hbm5vdGF0aW9uX3VuaXF1ZSIsCiAgICAgICAgImN1c3RvbWFubm90YXRpb24iLAogICAgICAgIFsiYWxsZWxlX2lkIl0sCjx8ZmltX2VuZHw+"]
["ec62c10c2347384ededcf5c97d89b5b0ddb3b74d-2","ec62c10c2347384ededcf5c97d89b5b0ddb3b74d","PHxmaW1fcHJlZml4fD4KIiIiUGFydGlhbCB1bmlxdWUgaW5kZXhlcwoKUmV2aXNpb24gSUQ6IDgyNzJiMzY3NTk3MQpSZXZpc2VzOiAKQ3JlYXRlIERhdGU6IDIwMTgtMDMtMDUgMTE6Mzc6NTUuOTk2MjAxCgoiIiIKCiMgcmV2aXNpb24gaWRlbnRpZmllcnMsIHVzZWQgYnkgQWxlbWJpYy4KcmV2aXNpb24gPSAiODI3MmIzNjc1OTcxIgpkb3duX3JldmlzaW9uID0gTm9uZQpicmFuY2hfbGFiZWxzID0gTm9uZQpkZXBlbmRzX29uID0gTm9uZQo8fGZpbV9ob2xlfD4KCmRlZiB1cGdyYWRlKCk6CiAgICAjIyMgY29tbWFuZHMgYXV0byBnZW5lcmF0ZWQgYnkgQWxlbWJpYyAtIHBsZWFzZSBhZGp1c3QhICMjIwogICAgb3AuY3JlYXRlX2luZGV4KAogICAgICAgICJpeF9hc3Nlc3NtZW50X2FsbGVsZWlkX3VuaXF1ZSIsCiAgICAgICAgImFsbGVsZWFzc2Vzc21lbnQiLAogICAgICAgIFsiYWxsZWxlX2lkIl0sCiAgICAgICAgdW5pcXVlPVRydWUsCiAgICAgICAgcG9zdGdyZXNxbF93aGVyZT1zYS50ZXh0KCJkYXRlX3N1cGVyY2VlZGVkIElTIE5VTEwiKSwKICAgICkKICAgIG9wLmNyZWF0ZV9pbmRleCgKICAgICAgICAiaXhfYWxsZWxlaW50ZXJwcmV0YXRpb25fYWxsZWxlaWRfb25nb2luZ191bmlxdWUiLAogICAgICAgICJhbGxlbGVpbnRlcnByZXRhdGlvbiIsCiAgICAgICAgWyJhbGxlbGVfaWQiXSwKICAgICAgICB1bmlxdWU9VHJ1ZSwKICAgICAgICBwb3N0Z3Jlc3FsX3doZXJlPXNhLnRleHQoInN0YXR1cyBJTiAoJ09uZ29pbmcnLCAnTm90IHN0YXJ0ZWQnKSIpLAogICAgKQogICAgb3AuY3JlYXRlX2luZGV4KAogICAgICAgICJpeF9hbGxlbGVyZXBvcnRfYWxsZWxlaWRfdW5pcXVlIiwKICAgICAgICAiYWxsZWxlcmVwb3J0IiwKICAgICAgICBbImFsbGVsZV9pZCJdLAogICAgICAgIHVuaXF1ZT1UcnVlLAogICAgICAgIHBvc3RncmVzcWxfd2hlcmU9c2EudGV4dCgiZGF0ZV9zdXBlcmNlZWRlZCBJUyBOVUxMIiksCiAgICApCiAgICBvcC5jcmVhdGVfaW5kZXgoCiAgICAgICAgIml4X2FuYWx5c2lzaW50ZXJwcmV0YXRpb25fYW5hbHlzaXNpZF9vbmdvaW5nX3VuaXF1ZSIsCiAgICAgICAgImFuYWx5c2lzaW50ZXJwcmV0YXRpb24iLAogICAgICAgIFsiYW5hbHlzaXNfaWQiXSwKICAgICAgICB1bmlxdWU9VHJ1ZSwKICAgICAgICBwb3N0Z3Jlc3FsX3doZXJlPXNhLnRleHQoInN0YXR1cyBJTiAoJ09uZ29pbmcnLCAnTm90IHN0YXJ0ZWQnKSIpLAogICAgKQogICAgb3AuY3JlYXRlX2luZGV4KAogICAgICAgICJpeF9hbm5vdGF0aW9uX3VuaXF1ZSIsCiAgICAgICAgImFubm90YXRpb24iLAogICAgICAgIFsiYWxsZWxlX2lkIl0sCiAgICAgICAgdW5pcXVlPVRydWUsCiAgICAgICAgcG9zdGdyZXNxbF93aGVyZT1zYS50ZXh0KCJkYXRlX3N1cGVyY2VlZGVkIElTIE5VTEwiKSwKICAgICkKICAgIG9wLmNyZWF0ZV9pbmRleCgKICAgICAgICAiaXhfY3VzdG9tYW5ub3RhdGlvbl91bmlxdWUiLAogICAgICAgICJjdXN0b21hbm5vdGF0aW9uIiwKICAgICAgICBbImFsbGVsZV9pZCJdLAogICAgICAgIHVuaXF1ZT1UcnVlLAogICAgICAgIHBvc3RncmVzcWxfd2hlcmU9c2EudGV4dCgiZGF0ZV9zdXBlcmNlZWRlZCBJUyBOVUxMIiksCiAgICApCiAgICBvcC5jcmVhdGVfaW5kZXgoCiAgICAgICAgIml4X3JlZmVyZW5jZWFzc2Vzc21lbnRfYWxsZWxlaWRfcmVmZXJlbmNlaWRfdW5pcXVlIiwKICAgICAgICAicmVmZXJlbmNlYXNzZXNzbWVudCIsCiAgICAgICAgWyJhbGxlbGVfaWQiLCAicmVmZXJlbmNlX2lkIl0sCiAgICAgICAgdW5pcXVlPVRydWUsCiAgICAgICAgcG9zdGdyZXNxbF93aGVyZT1zYS50ZXh0KCJkYXRlX3N1cGVyY2VlZGVkIElTIE5VTEwiKSwKICAgICkKICAgICMjIyBlbmQgQWxlbWJpYyBjb21tYW5kcyAjIyMKCgpkZWYgZG93bmdyYWRlKCk6CiAgICAjIyMgY29tbWFuZHMgYXV0byBnZW5lcmF0ZWQgYnkgQWxlbWJpYyAtIHBsZWFzZSBhZGp1c3QhICMjIwogICAgb3AuZHJvcF9pbmRleCgKICAgICAgICAiaXhfcmVmZXJlbmNlYXNzZXNzbWVudF9hbGxlbGVpZF9yZWZlcmVuY2VpZF91bmlxdWUiLCB0YWJsZV9uYW1lPSJyZWZlcmVuY2Vhc3Nlc3NtZW50IgogICAgKQogICAgb3AuZHJvcF9pbmRleCgiaXhfY3VzdG9tYW5ub3RhdGlvbl91bmlxdWUiLCB0YWJsZV9uYW1lPSJjdXN0b21hbm5vdGF0aW9uIikKICAgIG9wLmRyb3BfaW5kZXgoIml4X2Fubm90YXRpb25fdW5pcXVlIiwgdGFibGVfbmFtZT0iYW5ub3RhdGlvbiIpCiAgICBvcC5kcm9wX2luZGV4KAogICAgICAgICJpeF9hbmFseXNpc2ludGVycHJldGF0aW9uX2FuYWx5c2lzaWRfb25nb2luZ191bmlxdWUiLCB0YWJsZV9uYW1lPSJhbmFseXNpc2ludGVycHJldGF0aW9uIgogICAgKQogICAgb3AuZHJvcF9pbmRleCgiaXhfYWxsZWxlcmVwb3J0X2FsbGVsZWlkX3VuaXF1ZSIsIHRhYmxlX25hbWU9ImFsbGVsZXJlcG9ydCIpCiAgICBvcC5kcm9wX2luZGV4KAogICAgICAgICJpeF9hbGxlbGVpbnRlcnByZXRhdGlvbl9hbGxlbGVpZF9vbmdvaW5nX3VuaXF1ZSIsIHRhYmxlX25hbWU9ImFsbGVsZWludGVycHJldGF0aW9uIgogICAgKQogICAgb3AuZHJvcF9pbmRleCgiaXhfYXNzZXNzbWVudF9hbGxlbGVpZF91bmlxdWUiLCB0YWJsZV9uYW1lPSJhbGxlbGVhc3Nlc3NtZW50IikKICAgICMjIyBlbmQgQWxlbWJpYyBjb21tYW5kcyAjIyMKPHxmaW1fc3VmZml4fD4KCmZyb20gYWxlbWJpYyBpbXBvcnQgb3AKaW1wb3J0IHNxbGFsY2hlbXkgYXMgc2EKCjx8ZmltX2VuZHw+"]
["ec62c10c2347384ededcf5c97d89b5b0ddb3b74d-3","ec62c10c2347384ededcf5c97d89b5b0ddb3b74d","PHxmaW1fcHJlZml4fD4KIiIiUGFydGlhbCB1bmlxdWUgaW5kZXhlcwoKUmV2aXNpb24gSUQ6IDgyNzJiMzY3NTk3MQpSZXZpc2VzOiAKQ3JlYXRlIERhdGU6IDIwMTgtMDMtMDUgMTE6Mzc6NTUuOTk2MjAxCgoiIiIKCiMgcmV2aXNpb24gaWRlbnRpZmllcnMsIHVzZWQgYnkgQWxlbWJpYy4KcmV2aXNpb24gPSAiODI3MmIzNjc1OTcxIgpkb3duX3JldmlzaW9uID0gTm9uZQpicmFuY2hfbGFiZWxzID0gTm9uZQpkZXBlbmRzX29uID0gTm9uZQoKZnJvbSBhbGVtYmljIGltcG9ydCBvcAppbXBvcnQgc3FsYWxjaGVteSBhcyBzYQoKCmRlZiB1cGdyYWRlKCk6CiAgICAjIyMgY29tbWFuZHMgYXV0byBnZW5lcmF0ZWQgYnkgQWxlbWJpYyAtIHBsZWFzZSBhZGp1c3QhICMjIwogICAgb3AuY3JlYXRlX2luZGV4KAogICAgICAgICJpeF9hc3Nlc3NtZW50X2FsbGVsZWlkX3VuaXF1ZSIsCiAgICAgICAgImFsbGVsZWFzc2Vzc21lbnQiLAogICAgICAgIFsiYWxsZWxlX2lkIl0sCiAgICAgICAgdW5pcXVlPVRydWUsCiAgICAgICAgcG9zdGdyZXNxbF93aGVyZT1zYS50ZXh0KCJkYXRlX3N1cGVyY2VlZGVkIElTIE5VTEwiKSwKICAgICkKICAgIG9wLmNyZWF0ZV9pbmRleCgKICAgICAgICAiaXhfYWxsZWxlaW50ZXJwcmV0YXRpb25fYWxsZWxlaWRfb25nb2luZ191bmlxdWUiLAogICAgICAgICJhbGxlbGVpbnRlcnByZXRhdGlvbiIsCiAgICAgICAgWyJhbGxlbGVfaWQiXSwKICAgICAgICB1bmlxdWU9VHJ1ZSwKICAgICAgICBwb3N0Z3Jlc3FsX3doZXJlPXNhLnRleHQoInN0YXR1cyBJTiAoJ09uZ29pbmcnLCAnTm90IHN0YXJ0ZWQnKSIpLAogICAgKQogICAgb3AuY3JlYXRlX2luZGV4KAogICAgICAgICJpeF9hbGxlbGVyZXBvcnRfYWxsZWxlaWRfdW5pcXVlIiwKICAgICAgICAiYWxsZWxlcmVwb3J0IiwKICAgICAgICBbImFsbGVsZV9pZCJdLAogICAgICAgIHVuaXF1ZT1UcnVlLAogICAgICAgIHBvc3RncmVzcWxfd2hlcmU9c2EudGV4dCgiZGF0ZV9zdXBlcmNlZWRlZCBJUyBOVUxMIiksCiAgICApCiAgICBvcC5jcmVhdGVfaW5kZXgoCiAgICAgICAgIml4X2FuYWx5c2lzaW50ZXJwcmV0YXRpb25fYW5hbHlzaXNpZF9vbmdvaW5nX3VuaXF1ZSIsCiAgICAgICAgImFuYWx5c2lzaW50ZXJwcmV0YXRpb24iLAogICAgICAgIFsiYW5hbHlzaXNfaWQiXSwKICAgICAgICB1bmlxdWU9VHJ1ZSwKICAgICAgICBwb3N0Z3Jlc3FsX3doZXJlPXNhLnRleHQoInN0YXR1cyBJTiAoJ09uZ29pbmcnLCAnTm90IHN0YXJ0ZWQnKSIpLAogICAgKQogICAgb3AuY3JlYXRlX2luZGV4KAogICAgICAgICJpeF9hbm5vdGF0aW9uX3VuaXF1ZSIsCiAgICAgICAgImFubm90YXRpb24iLAogICAgICAgIFsiYWxsZWxlX2lkIl0sCiAgICAgICAgdW5pcXVlPVRydWUsCiAgICAgICAgcG9zdGdyZXNxbF93aGVyZT1zYS50ZXh0KCJkYXRlX3N1cGVyY2VlZGVkIElTIE5VTEwiKSwKICAgICkKICAgIG9wLmNyZWF0ZV9pbmRleCgKICAgICAgICAiaXhfY3VzdG9tYW5ub3RhdGlvbl91bmlxdWUiLAogICAgICAgICJjdXN0b21hbm5vdGF0aW9uIiwKICAgICAgICBbImFsbGVsZV9pZCJdLAogICAgICAgIHVuaXF1ZT1UcnVlLAogICAgICAgIHBvc3RncmVzcWxfd2hlcmU9c2EudGV4dCgiZGF0ZV9zdXBlcmNlZWRlZCBJUyBOVUxMIiksCiAgICApCiAgICBvcC5jcmVhdGVfaW5kZXgoCiAgICAgICAgIml4X3JlZmVyZW5jZWFzc2Vzc21lbnRfYWxsZWxlaWRfcmVmZXJlbmNlaWRfdW5pcXVlIiwKICAgICAgICAicmVmZXJlbmNlYXNzZXNzbWVudCIsCiAgICAgICAgWyJhbGxlbGVfaWQiLCAicmVmZXJlbmNlX2lkIl0sCiAgICAgICAgdW5pcXVlPVRydWUsCiAgICAgICAgcG9zdGdyZXNxbF93aGVyZT1zYS50ZXh0KCJkYXRlX3N1cGVyY2VlZGVkIElTIE5VTEwiKSwKICAgICkKICAgICMjIyBlbmQgQWxlbWJpYyBjb21tYW5kcyAjIyMKCgpkZWYgZG93bmdyYWRlKCk6CiAgICAjIyMgY29tbWFuZHMgYXV0byBnZW5lcmF0ZWQgYnkgQWxlbWJpYyAtIHBsZWFzZSBhZGp1c3QhICMjIwogICAgb3AuZHJvcF9pbmRleCgKICAgICAgICAiaXhfcmVmZXJlbmNlYXNzZXNzbWVudF9hbGxlbGVpZF9yZWZlcmVuY2VpZF91bmlxdWUiLCB0YWJsZV9uYW1lPSJyZWZlcmVuY2Vhc3Nlc3NtZW50IgogICAgKQogICAgb3AuZHJvcF9pbmRleCgiaXhfY3VzdG9tYW5ub3RhdGlvbl91bmlxdWUiLCB0YWJsZV9uYW1lPSJjdXN0b21hbm5vdGF0aW9uIikKICAgIG9wLmRyb3BfaW5kZXgoIml4X2Fubm90YXRpb25fdW5pcXVlIiwgdGFibGVfbmFtZT0iYW5ub3RhdGlvbiIpCiAgICBvcC5kcm9wX2luZGV4KAogICAgICAgICJpeF9hbmFseXNpc2ludGVycHJldGF0aW9uX2FuYWx5c2lzaWRfb25nb2luZ191bmlxdWUiLCB0YWJsZV9uYW1lPSJhbmFseXNpc2ludGVycHJldGF0aW9uIgogICAgKQo8fGZpbV9ob2xlfD4KICAgIG9wLmRyb3BfaW5kZXgoIml4X2Fzc2Vzc21lbnRfYWxsZWxlaWRfdW5pcXVlIiwgdGFibGVfbmFtZT0iYWxsZWxlYXNzZXNzbWVudCIpCiAgICAjIyMgZW5kIEFsZW1iaWMgY29tbWFuZHMgIyMjCjx8ZmltX3N1ZmZpeHw+CiAgICBvcC5kcm9wX2luZGV4KCJpeF9hbGxlbGVyZXBvcnRfYWxsZWxlaWRfdW5pcXVlIiwgdGFibGVfbmFtZT0iYWxsZWxlcmVwb3J0IikKICAgIG9wLmRyb3BfaW5kZXgoCiAgICAgICAgIml4X2FsbGVsZWludGVycHJldGF0aW9uX2FsbGVsZWlkX29uZ29pbmdfdW5pcXVlIiwgdGFibGVfbmFtZT0iYWxsZWxlaW50ZXJwcmV0YXRpb24iCiAgICApCjx8ZmltX2VuZHw+"]
["ec62c10c2347384ededcf5c97d89b5b0ddb3b74d-4","ec62c10c2347384ededcf5c97d89b5b0ddb3b74d","PHxmaW1fcHJlZml4fD4KIiIiUGFydGlhbCB1bmlxdWUgaW5kZXhlcwoKUmV2aXNpb24gSUQ6IDgyNzJiMzY3NTk3MQpSZXZpc2VzOiAKQ3JlYXRlIERhdGU6IDIwMTgtMDMtMDUgMTE6Mzc6NTUuOTk2MjAxCgoiIiIKCiMgcmV2aXNpb24gaWRlbnRpZmllcnMsIHVzZWQgYnkgQWxlbWJpYy4KcmV2aXNpb24gPSAiODI3MmIzNjc1OTcxIgpkb3duX3JldmlzaW9uID0gTm9uZQpicmFuY2hfbGFiZWxzID0gTm9uZQpkZXBlbmRzX29uID0gTm9uZQoKZnJvbSBhbGVtYmljIGltcG9ydCBvcAppbXBvcnQgc3FsYWxjaGVteSBhcyBzYQoKCmRlZiB1cGdyYWRlKCk6CiAgICAjIyMgY29tbWFuZHMgYXV0byBnZW5lcmF0ZWQgYnkgQWxlbWJpYyAtIHBsZWFzZSBhZGp1c3QhICMjIwogICAgb3AuY3JlYXRlX2luZGV4KAogICAgICAgICJpeF9hc3Nlc3NtZW50X2FsbGVsZWlkX3VuaXF1ZSIsCiAgICAgICAgImFsbGVsZWFzc2Vzc21lbnQiLAogICAgICAgIFsiYWxsZWxlX2lkIl0sCiAgICAgICAgdW5pcXVlPVRydWUsCiAgICAgICAgcG9zdGdyZXNxbF93aGVyZT1zYS50ZXh0KCJkYXRlX3N1cGVyY2VlZGVkIElTIE5VTEwiKSwKPHxmaW1faG9sZXw+CiAgICAgICAgWyJhbGxlbGVfaWQiXSwKICAgICAgICB1bmlxdWU9VHJ1ZSwKICAgICAgICBwb3N0Z3Jlc3FsX3doZXJlPXNhLnRleHQoInN0YXR1cyBJTiAoJ09uZ29pbmcnLCAnTm90IHN0YXJ0ZWQnKSIpLAogICAgKQogICAgb3AuY3JlYXRlX2luZGV4KAogICAgICAgICJpeF9hbGxlbGVyZXBvcnRfYWxsZWxlaWRfdW5pcXVlIiwKICAgICAgICAiYWxsZWxlcmVwb3J0IiwKICAgICAgICBbImFsbGVsZV9pZCJdLAogICAgICAgIHVuaXF1ZT1UcnVlLAogICAgICAgIHBvc3RncmVzcWxfd2hlcmU9c2EudGV4dCgiZGF0ZV9zdXBlcmNlZWRlZCBJUyBOVUxMIiksCiAgICApCiAgICBvcC5jcmVhdGVfaW5kZXgoCiAgICAgICAgIml4X2FuYWx5c2lzaW50ZXJwcmV0YXRpb25fYW5hbHlzaXNpZF9vbmdvaW5nX3VuaXF1ZSIsCiAgICAgICAgImFuYWx5c2lzaW50ZXJwcmV0YXRpb24iLAogICAgICAgIFsiYW5hbHlzaXNfaWQiXSwKICAgICAgICB1bmlxdWU9VHJ1ZSwKICAgICAgICBwb3N0Z3Jlc3FsX3doZXJlPXNhLnRleHQoInN0YXR1cyBJTiAoJ09uZ29pbmcnLCAnTm90IHN0YXJ0ZWQnKSIpLAogICAgKQogICAgb3AuY3JlYXRlX2luZGV4KAogICAgICAgICJpeF9hbm5vdGF0aW9uX3VuaXF1ZSIsCiAgICAgICAgImFubm90YXRpb24iLAogICAgICAgIFsiYWxsZWxlX2lkIl0sCiAgICAgICAgdW5pcXVlPVRydWUsCiAgICAgICAgcG9zdGdyZXNxbF93aGVyZT1zYS50ZXh0KCJkYXRlX3N1cGVyY2VlZGVkIElTIE5VTEwiKSwKICAgICkKICAgIG9wLmNyZWF0ZV9pbmRleCgKICAgICAgICAiaXhfY3VzdG9tYW5ub3RhdGlvbl91bmlxdWUiLAogICAgICAgICJjdXN0b21hbm5vdGF0aW9uIiwKICAgICAgICBbImFsbGVsZV9pZCJdLAogICAgICAgIHVuaXF1ZT1UcnVlLAogICAgICAgIHBvc3RncmVzcWxfd2hlcmU9c2EudGV4dCgiZGF0ZV9zdXBlcmNlZWRlZCBJUyBOVUxMIiksCiAgICApCiAgICBvcC5jcmVhdGVfaW5kZXgoCiAgICAgICAgIml4X3JlZmVyZW5jZWFzc2Vzc21lbnRfYWxsZWxlaWRfcmVmZXJlbmNlaWRfdW5pcXVlIiwKICAgICAgICAicmVmZXJlbmNlYXNzZXNzbWVudCIsCiAgICAgICAgWyJhbGxlbGVfaWQiLCAicmVmZXJlbmNlX2lkIl0sCiAgICAgICAgdW5pcXVlPVRydWUsCiAgICAgICAgcG9zdGdyZXNxbF93aGVyZT1zYS50ZXh0KCJkYXRlX3N1cGVyY2VlZGVkIElTIE5VTEwiKSwKICAgICkKICAgICMjIyBlbmQgQWxlbWJpYyBjb21tYW5kcyAjIyMKCgpkZWYgZG93bmdyYWRlKCk6CiAgICAjIyMgY29tbWFuZHMgYXV0byBnZW5lcmF0ZWQgYnkgQWxlbWJpYyAtIHBsZWFzZSBhZGp1c3QhICMjIwogICAgb3AuZHJvcF9pbmRleCgKICAgICAgICAiaXhfcmVmZXJlbmNlYXNzZXNzbWVudF9hbGxlbGVpZF9yZWZlcmVuY2VpZF91bmlxdWUiLCB0YWJsZV9uYW1lPSJyZWZlcmVuY2Vhc3Nlc3NtZW50IgogICAgKQogICAgb3AuZHJvcF9pbmRleCgiaXhfY3VzdG9tYW5ub3RhdGlvbl91bmlxdWUiLCB0YWJsZV9uYW1lPSJjdXN0b21hbm5vdGF0aW9uIikKICAgIG9wLmRyb3BfaW5kZXgoIml4X2Fubm90YXRpb25fdW5pcXVlIiwgdGFibGVfbmFtZT0iYW5ub3RhdGlvbiIpCiAgICBvcC5kcm9wX2luZGV4KAogICAgICAgICJpeF9hbmFseXNpc2ludGVycHJldGF0aW9uX2FuYWx5c2lzaWRfb25nb2luZ191bmlxdWUiLCB0YWJsZV9uYW1lPSJhbmFseXNpc2ludGVycHJldGF0aW9uIgogICAgKQogICAgb3AuZHJvcF9pbmRleCgiaXhfYWxsZWxlcmVwb3J0X2FsbGVsZWlkX3VuaXF1ZSIsIHRhYmxlX25hbWU9ImFsbGVsZXJlcG9ydCIpCiAgICBvcC5kcm9wX2luZGV4KAogICAgICAgICJpeF9hbGxlbGVpbnRlcnByZXRhdGlvbl9hbGxlbGVpZF9vbmdvaW5nX3VuaXF1ZSIsIHRhYmxlX25hbWU9ImFsbGVsZWludGVycHJldGF0aW9uIgogICAgKQogICAgb3AuZHJvcF9pbmRleCgiaXhfYXNzZXNzbWVudF9hbGxlbGVpZF91bmlxdWUiLCB0YWJsZV9uYW1lPSJhbGxlbGVhc3Nlc3NtZW50IikKICAgICMjIyBlbmQgQWxlbWJpYyBjb21tYW5kcyAjIyMKPHxmaW1fc3VmZml4fD4KICAgICkKICAgIG9wLmNyZWF0ZV9pbmRleCgKICAgICAgICAiaXhfYWxsZWxlaW50ZXJwcmV0YXRpb25fYWxsZWxlaWRfb25nb2luZ191bmlxdWUiLAogICAgICAgICJhbGxlbGVpbnRlcnByZXRhdGlvbiIsCjx8ZmltX2VuZHw+"]
["c1004781a13218f0ac18ac6635fed09366072964-1","c1004781a13218f0ac18ac6635fed09366072964","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8Pgp0ZXh0Z2VuLnNhdmUoJ2pva2VzLmhkZjUnKQo8fGZpbV9zdWZmaXh8Pgpmcm9tIHRleHRnZW5ybm4gaW1wb3J0IHRleHRnZW5ybm4KCnRleHRnZW4gPSB0ZXh0Z2Vucm5uKCkKdGV4dGdlbi50cmFpbl9mcm9tX2ZpbGUoJ2pva2VzLnR4dCcsIG51bV9lcG9jaHM9NSkKPHxmaW1fZW5kfD4="]
["e5f4d5ca21d49106b3e5ca820305b5ad334477ea-1","e5f4d5ca21d49106b3e5ca820305b5ad334477ea","PHxmaW1fcHJlZml4fD4KY2xhc3MgSGVpZ2h0czoKCiAgICBkZWYgX19pbml0X18oc2VsZiwgaGVpZ2h0czogbGlzdFtsaXN0W2ludF1dKToKICAgICAgICBzZWxmLmhlaWdodHMgPSBoZWlnaHRzCiAgICAgICAgc2VsZi5yb3dfbGVuID0gbGVuKGhlaWdodHMpCiAgICAgICAgc2VsZi5jb2xfbGVuID0gbGVuKGhlaWdodHNbMF0pCgogICAgZGVmIGFkamFjZW50KHNlbGYsIHJvdywgY29sKSAtPiBpdGVyOgogICAgICAgIGlmIHJvdyA8IHNlbGYucm93X2xlbi0xOgogICAgICAgICAgICB5aWVsZCBzZWxmLmhlaWdodHNbcm93KzFdW2NvbF0sIChyb3crMSwgY29sKQogICAgICAgIGlmIHJvdyA+IDA6CiAgICAgICAgICAgIHlpZWxkIHNlbGYuaGVpZ2h0c1tyb3ctMV1bY29sXSwgKHJvdy0xLCBjb2wpCiAgICAgICAgaWYgY29sIDwgc2VsZi5jb2xfbGVuLTE6CiAgICAgICAgICAgIHlpZWxkIHNlbGYuaGVpZ2h0c1tyb3ddW2NvbCsxXSwgKHJvdywgY29sKzEpCiAgICAgICAgaWYgY29sID4gMDoKICAgICAgICAgICAgeWllbGQgc2VsZi5oZWlnaHRzW3Jvd11bY29sLTFdLCAocm93LCBjb2wtMSkKCiAgICBkZWYgZmluZF9sb3dlc3RfZnJvbShzZWxmLCByb3csIGNvbCwgZm91bmQ9Tm9uZSk6CiAgICAgICAgaWYgZm91bmQgaXMgTm9uZToKICAgICAgICAgICAgZm91bmQgPSBzZXQoKQogICAgICAgIGxvd2VzdCA9IHNlbGYuaGVpZ2h0c1tyb3ddW2NvbF0KICAgICAgICBmb3VuZC5hZGQoKGxvd2VzdCwgKHJvdywgY29sKSkpCiAgICAgICAgZm9yIHZhbCwgKHIsIGMpIGluIHNlbGYuYWRqYWNlbnQocm93LCBjb2wpOgogICAgICAgICAgICBpZiB2YWwgPD0gbG93ZXN0IGFuZCAodmFsLCAociwgYykpIG5vdCBpbiBmb3VuZDoKCiAgICAgICAgICAgICAgICBzZWxmLmZpbmRfbG93ZXN0X2Zyb20ociwgYywgZm91bmQpCgogICAgICAgICMgZmluZCBtaW4KICAgICAgICBmb3IgdmFsLCAociwgYykgaW4gZm91bmQ6CiAgICAgICAgICAgIGlmIHZhbCA8IGxvd2VzdDoKICAgICAgICAgICAgICAgIGxvd2VzdCA9IHZhbAogICAgICAgICAgICAgICAgcm93ID0gcgogICAgICAgICAgICAgICAgY29sID0gYwogICAgICAgIHJldHVybiBsb3dlc3QsIChyb3csIGNvbCkKCiAgICBkZWYgZmluZF9hbGxfaW5fYmFzaW4oc2VsZiwgdmFsLCByb3csIGNvbCwgZm91bmQ9Tm9uZSk6CiAgICAgICAgaWYgZm91bmQgaXMgTm9uZToKICAgICAgICAgICAgZm91bmQgPSBzZXQoKQogICAgICAgIGlmIChyb3csIGNvbCkgaW4gZm91bmQgb3IgdmFsID09IDk6CiAgICAgICAgICAgIHJldHVybiBmb3VuZAogICAgICAgIGZvdW5kLmFkZCgocm93LCBjb2wpKQoKICAgICAgICBmb3IgdiwgKHIsIGMpIGluIHNlbGYuYWRqYWNlbnQocm93LCBjb2wpOgogICAgICAgICAgICBpZiBzZWxmLmhlaWdodHNbcl1bY10gPD0gdmFsOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgc2VsZi5maW5kX2FsbF9pbl9iYXNpbih2LCByLCBjLCBmb3VuZCkKICAgICAgICByZXR1cm4gZm91bmQKCgpkZWYgcGFydF9hKGhlaWdodHM6IEhlaWdodHMpOgogICAgZm91bmQgPSBzZXQoKQogICAgZm9yIHJvdyBpbiByYW5nZShoZWlnaHRzLnJvd19sZW4pOgogICAgICAgIGZvciBjb2wgaW4gcmFuZ2UoaGVpZ2h0cy5jb2xfbGVuKToKICAgICAgICAgICAgcmVzID0gaGVpZ2h0cy5maW5kX2xvd2VzdF9mcm9tKHJvdywgY29sKQogICAgICAgICAgICBmb3VuZC5hZGQocmVzKQogICAgcmVzdWx0ID0gMAogICAgZm9yIHZhbCwgKF8sIF8pIGluIGZvdW5kOgogICAgICAgIHJlc3VsdCArPSB2YWwgKyAxCiAgICByZXR1cm4gcmVzdWx0CgoKZGVmIHBhcnRfYihoZWlnaHRzOiBIZWlnaHRzKToKICAgIGJhc2lucyA9IHNldCgpCiAgICBmb3Igcm93IGluIHJhbmdlKGhlaWdodHMucm93X2xlbik6CiAgICAgICAgZm9yIGNvbCBpbiByYW5nZShoZWlnaHRzLmNvbF9sZW4pOgogICAgICAgICAgICByZXMgPSBoZWlnaHRzLmZpbmRfbG93ZXN0X2Zyb20ocm93LCBjb2wpCiAgICAgICAgICAgIGJhc2lucy5hZGQocmVzKQogICAgY291bnRzID0gW10KICAgIGZvciAodiwgKHIsIGMpKSBpbiBiYXNpbnM6CiAgICAgICAgY291bnRzLmFwcGVuZChsZW4oaGVpZ2h0cy5maW5kX2FsbF9pbl9iYXNpbih2LCByLCBjKSkpCgogICAgYWNjID0gMQogICAgZm9yIGkgaW4gc29ydGVkKGNvdW50cylbLTM6XToKICAgICAgICBhY2MgKj0gaQogICAgcmV0dXJuIGFjYwoKCiMgZnJvbSBtaXNjLm1pc2NfZnVuY3MgaW1wb3J0IHByb2ZpbGVfZnVuYwojCiMgQHByb2ZpbGVfZnVuYwpkZWYgbWFpbihmaWxlKSAtPiB0dXBsZToKICAgIGhlaWdodHM6IGxpc3RbbGlzdFtpbnRdXSA9IFtdCiAgICB3aXRoIG9wZW4oZmlsZSkgYXMgZjoKICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICBsID0gbGluZS5yZW1vdmVzdWZmaXgoIlxuIikKICAgICAgICAgICAgaGVpZ2h0cy5hcHBlbmQoW2ludChudW0pIGZvciBudW0gaW4gbF0pCiAgICBoID0gSGVpZ2h0cyhoZWlnaHRzKQogICAgcmV0dXJuIHBhcnRfYShoKSwgcGFydF9iKGgpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGltcG9ydCB0aW1lCgogICAgc3RhcnRfdGltZSA9IHRpbWUucGVyZl9jb3VudGVyKCkKICAgIGZpbGVfcGF0aCA9ICIuLi9pbnB1dC50eHQiCiAgICBhLCBiID0gbWFpbihmaWxlX3BhdGgpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGVuZF90aW1lID0gdGltZS5wZXJmX2NvdW50ZXIoKQogICAgcHJpbnQoZiJSZXN1bHQgcGFydF9hOiB7YX0iKQogICAgcHJpbnQoZiJSZXN1bHQgcGFydF9iOiB7Yn0iKQogICAgcHJpbnQoZiJUaW1lOiB7KGVuZF90aW1lIC0gc3RhcnRfdGltZSk6NGZ9IHNlYyIpCjx8ZmltX2VuZHw+"]
["e5f4d5ca21d49106b3e5ca820305b5ad334477ea-2","e5f4d5ca21d49106b3e5ca820305b5ad334477ea","PHxmaW1fcHJlZml4fD4KY2xhc3MgSGVpZ2h0czoKCiAgICBkZWYgX19pbml0X18oc2VsZiwgaGVpZ2h0czogbGlzdFtsaXN0W2ludF1dKToKICAgICAgICBzZWxmLmhlaWdodHMgPSBoZWlnaHRzCiAgICAgICAgc2VsZi5yb3dfbGVuID0gbGVuKGhlaWdodHMpCiAgICAgICAgc2VsZi5jb2xfbGVuID0gbGVuKGhlaWdodHNbMF0pCgogICAgZGVmIGFkamFjZW50KHNlbGYsIHJvdywgY29sKSAtPiBpdGVyOgogICAgICAgIGlmIHJvdyA8IHNlbGYucm93X2xlbi0xOgogICAgICAgICAgICB5aWVsZCBzZWxmLmhlaWdodHNbcm93KzFdW2NvbF0sIChyb3crMSwgY29sKQogICAgICAgIGlmIHJvdyA+IDA6CiAgICAgICAgICAgIHlpZWxkIHNlbGYuaGVpZ2h0c1tyb3ctMV1bY29sXSwgKHJvdy0xLCBjb2wpCiAgICAgICAgaWYgY29sIDwgc2VsZi5jb2xfbGVuLTE6CiAgICAgICAgICAgIHlpZWxkIHNlbGYuaGVpZ2h0c1tyb3ddW2NvbCsxXSwgKHJvdywgY29sKzEpCiAgICAgICAgaWYgY29sID4gMDoKICAgICAgICAgICAgeWllbGQgc2VsZi5oZWlnaHRzW3Jvd11bY29sLTFdLCAocm93LCBjb2wtMSkKPHxmaW1faG9sZXw+CiAgICAgICAgbG93ZXN0ID0gc2VsZi5oZWlnaHRzW3Jvd11bY29sXQogICAgICAgIGZvdW5kLmFkZCgobG93ZXN0LCAocm93LCBjb2wpKSkKICAgICAgICBmb3IgdmFsLCAociwgYykgaW4gc2VsZi5hZGphY2VudChyb3csIGNvbCk6CiAgICAgICAgICAgIGlmIHZhbCA8PSBsb3dlc3QgYW5kICh2YWwsIChyLCBjKSkgbm90IGluIGZvdW5kOgoKICAgICAgICAgICAgICAgIHNlbGYuZmluZF9sb3dlc3RfZnJvbShyLCBjLCBmb3VuZCkKCiAgICAgICAgIyBmaW5kIG1pbgogICAgICAgIGZvciB2YWwsIChyLCBjKSBpbiBmb3VuZDoKICAgICAgICAgICAgaWYgdmFsIDwgbG93ZXN0OgogICAgICAgICAgICAgICAgbG93ZXN0ID0gdmFsCiAgICAgICAgICAgICAgICByb3cgPSByCiAgICAgICAgICAgICAgICBjb2wgPSBjCiAgICAgICAgcmV0dXJuIGxvd2VzdCwgKHJvdywgY29sKQoKICAgIGRlZiBmaW5kX2FsbF9pbl9iYXNpbihzZWxmLCB2YWwsIHJvdywgY29sLCBmb3VuZD1Ob25lKToKICAgICAgICBpZiBmb3VuZCBpcyBOb25lOgogICAgICAgICAgICBmb3VuZCA9IHNldCgpCiAgICAgICAgaWYgKHJvdywgY29sKSBpbiBmb3VuZCBvciB2YWwgPT0gOToKICAgICAgICAgICAgcmV0dXJuIGZvdW5kCiAgICAgICAgZm91bmQuYWRkKChyb3csIGNvbCkpCgogICAgICAgIGZvciB2LCAociwgYykgaW4gc2VsZi5hZGphY2VudChyb3csIGNvbCk6CiAgICAgICAgICAgIGlmIHNlbGYuaGVpZ2h0c1tyXVtjXSA8PSB2YWw6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBzZWxmLmZpbmRfYWxsX2luX2Jhc2luKHYsIHIsIGMsIGZvdW5kKQogICAgICAgIHJldHVybiBmb3VuZAoKCmRlZiBwYXJ0X2EoaGVpZ2h0czogSGVpZ2h0cyk6CiAgICBmb3VuZCA9IHNldCgpCiAgICBmb3Igcm93IGluIHJhbmdlKGhlaWdodHMucm93X2xlbik6CiAgICAgICAgZm9yIGNvbCBpbiByYW5nZShoZWlnaHRzLmNvbF9sZW4pOgogICAgICAgICAgICByZXMgPSBoZWlnaHRzLmZpbmRfbG93ZXN0X2Zyb20ocm93LCBjb2wpCiAgICAgICAgICAgIGZvdW5kLmFkZChyZXMpCiAgICByZXN1bHQgPSAwCiAgICBmb3IgdmFsLCAoXywgXykgaW4gZm91bmQ6CiAgICAgICAgcmVzdWx0ICs9IHZhbCArIDEKICAgIHJldHVybiByZXN1bHQKCgpkZWYgcGFydF9iKGhlaWdodHM6IEhlaWdodHMpOgogICAgYmFzaW5zID0gc2V0KCkKICAgIGZvciByb3cgaW4gcmFuZ2UoaGVpZ2h0cy5yb3dfbGVuKToKICAgICAgICBmb3IgY29sIGluIHJhbmdlKGhlaWdodHMuY29sX2xlbik6CiAgICAgICAgICAgIHJlcyA9IGhlaWdodHMuZmluZF9sb3dlc3RfZnJvbShyb3csIGNvbCkKICAgICAgICAgICAgYmFzaW5zLmFkZChyZXMpCiAgICBjb3VudHMgPSBbXQogICAgZm9yICh2LCAociwgYykpIGluIGJhc2luczoKICAgICAgICBjb3VudHMuYXBwZW5kKGxlbihoZWlnaHRzLmZpbmRfYWxsX2luX2Jhc2luKHYsIHIsIGMpKSkKCiAgICBhY2MgPSAxCiAgICBmb3IgaSBpbiBzb3J0ZWQoY291bnRzKVstMzpdOgogICAgICAgIGFjYyAqPSBpCiAgICByZXR1cm4gYWNjCgoKIyBmcm9tIG1pc2MubWlzY19mdW5jcyBpbXBvcnQgcHJvZmlsZV9mdW5jCiMKIyBAcHJvZmlsZV9mdW5jCmRlZiBtYWluKGZpbGUpIC0+IHR1cGxlOgogICAgaGVpZ2h0czogbGlzdFtsaXN0W2ludF1dID0gW10KICAgIHdpdGggb3BlbihmaWxlKSBhcyBmOgogICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgIGwgPSBsaW5lLnJlbW92ZXN1ZmZpeCgiXG4iKQogICAgICAgICAgICBoZWlnaHRzLmFwcGVuZChbaW50KG51bSkgZm9yIG51bSBpbiBsXSkKICAgIGggPSBIZWlnaHRzKGhlaWdodHMpCiAgICByZXR1cm4gcGFydF9hKGgpLCBwYXJ0X2IoaCkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgaW1wb3J0IHRpbWUKCiAgICBzdGFydF90aW1lID0gdGltZS5wZXJmX2NvdW50ZXIoKQogICAgZmlsZV9wYXRoID0gIi4uL2lucHV0LnR4dCIKICAgIGEsIGIgPSBtYWluKGZpbGVfcGF0aCkKICAgIGVuZF90aW1lID0gdGltZS5wZXJmX2NvdW50ZXIoKQogICAgcHJpbnQoZiJSZXN1bHQgcGFydF9hOiB7YX0iKQogICAgcHJpbnQoZiJSZXN1bHQgcGFydF9iOiB7Yn0iKQogICAgcHJpbnQoZiJUaW1lOiB7KGVuZF90aW1lIC0gc3RhcnRfdGltZSk6NGZ9IHNlYyIpCgo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiBmaW5kX2xvd2VzdF9mcm9tKHNlbGYsIHJvdywgY29sLCBmb3VuZD1Ob25lKToKICAgICAgICBpZiBmb3VuZCBpcyBOb25lOgogICAgICAgICAgICBmb3VuZCA9IHNldCgpCjx8ZmltX2VuZHw+"]
["e5f4d5ca21d49106b3e5ca820305b5ad334477ea-3","e5f4d5ca21d49106b3e5ca820305b5ad334477ea","PHxmaW1fcHJlZml4fD4KY2xhc3MgSGVpZ2h0czoKCiAgICBkZWYgX19pbml0X18oc2VsZiwgaGVpZ2h0czogbGlzdFtsaXN0W2ludF1dKToKICAgICAgICBzZWxmLmhlaWdodHMgPSBoZWlnaHRzCiAgICAgICAgc2VsZi5yb3dfbGVuID0gbGVuKGhlaWdodHMpCiAgICAgICAgc2VsZi5jb2xfbGVuID0gbGVuKGhlaWdodHNbMF0pCgogICAgZGVmIGFkamFjZW50KHNlbGYsIHJvdywgY29sKSAtPiBpdGVyOgogICAgICAgIGlmIHJvdyA8IHNlbGYucm93X2xlbi0xOgogICAgICAgICAgICB5aWVsZCBzZWxmLmhlaWdodHNbcm93KzFdW2NvbF0sIChyb3crMSwgY29sKQogICAgICAgIGlmIHJvdyA+IDA6CiAgICAgICAgICAgIHlpZWxkIHNlbGYuaGVpZ2h0c1tyb3ctMV1bY29sXSwgKHJvdy0xLCBjb2wpCiAgICAgICAgaWYgY29sIDwgc2VsZi5jb2xfbGVuLTE6CiAgICAgICAgICAgIHlpZWxkIHNlbGYuaGVpZ2h0c1tyb3ddW2NvbCsxXSwgKHJvdywgY29sKzEpCiAgICAgICAgaWYgY29sID4gMDoKICAgICAgICAgICAgeWllbGQgc2VsZi5oZWlnaHRzW3Jvd11bY29sLTFdLCAocm93LCBjb2wtMSkKCiAgICBkZWYgZmluZF9sb3dlc3RfZnJvbShzZWxmLCByb3csIGNvbCwgZm91bmQ9Tm9uZSk6CiAgICAgICAgaWYgZm91bmQgaXMgTm9uZToKICAgICAgICAgICAgZm91bmQgPSBzZXQoKQogICAgICAgIGxvd2VzdCA9IHNlbGYuaGVpZ2h0c1tyb3ddW2NvbF0KICAgICAgICBmb3VuZC5hZGQoKGxvd2VzdCwgKHJvdywgY29sKSkpCiAgICAgICAgZm9yIHZhbCwgKHIsIGMpIGluIHNlbGYuYWRqYWNlbnQocm93LCBjb2wpOgogICAgICAgICAgICBpZiB2YWwgPD0gbG93ZXN0IGFuZCAodmFsLCAociwgYykpIG5vdCBpbiBmb3VuZDoKCiAgICAgICAgICAgICAgICBzZWxmLmZpbmRfbG93ZXN0X2Zyb20ociwgYywgZm91bmQpCgogICAgICAgICMgZmluZCBtaW4KPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICBjb2wgPSBjCiAgICAgICAgcmV0dXJuIGxvd2VzdCwgKHJvdywgY29sKQoKICAgIGRlZiBmaW5kX2FsbF9pbl9iYXNpbihzZWxmLCB2YWwsIHJvdywgY29sLCBmb3VuZD1Ob25lKToKICAgICAgICBpZiBmb3VuZCBpcyBOb25lOgogICAgICAgICAgICBmb3VuZCA9IHNldCgpCiAgICAgICAgaWYgKHJvdywgY29sKSBpbiBmb3VuZCBvciB2YWwgPT0gOToKICAgICAgICAgICAgcmV0dXJuIGZvdW5kCiAgICAgICAgZm91bmQuYWRkKChyb3csIGNvbCkpCgogICAgICAgIGZvciB2LCAociwgYykgaW4gc2VsZi5hZGphY2VudChyb3csIGNvbCk6CiAgICAgICAgICAgIGlmIHNlbGYuaGVpZ2h0c1tyXVtjXSA8PSB2YWw6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBzZWxmLmZpbmRfYWxsX2luX2Jhc2luKHYsIHIsIGMsIGZvdW5kKQogICAgICAgIHJldHVybiBmb3VuZAoKCmRlZiBwYXJ0X2EoaGVpZ2h0czogSGVpZ2h0cyk6CiAgICBmb3VuZCA9IHNldCgpCiAgICBmb3Igcm93IGluIHJhbmdlKGhlaWdodHMucm93X2xlbik6CiAgICAgICAgZm9yIGNvbCBpbiByYW5nZShoZWlnaHRzLmNvbF9sZW4pOgogICAgICAgICAgICByZXMgPSBoZWlnaHRzLmZpbmRfbG93ZXN0X2Zyb20ocm93LCBjb2wpCiAgICAgICAgICAgIGZvdW5kLmFkZChyZXMpCiAgICByZXN1bHQgPSAwCiAgICBmb3IgdmFsLCAoXywgXykgaW4gZm91bmQ6CiAgICAgICAgcmVzdWx0ICs9IHZhbCArIDEKICAgIHJldHVybiByZXN1bHQKCgpkZWYgcGFydF9iKGhlaWdodHM6IEhlaWdodHMpOgogICAgYmFzaW5zID0gc2V0KCkKICAgIGZvciByb3cgaW4gcmFuZ2UoaGVpZ2h0cy5yb3dfbGVuKToKICAgICAgICBmb3IgY29sIGluIHJhbmdlKGhlaWdodHMuY29sX2xlbik6CiAgICAgICAgICAgIHJlcyA9IGhlaWdodHMuZmluZF9sb3dlc3RfZnJvbShyb3csIGNvbCkKICAgICAgICAgICAgYmFzaW5zLmFkZChyZXMpCiAgICBjb3VudHMgPSBbXQogICAgZm9yICh2LCAociwgYykpIGluIGJhc2luczoKICAgICAgICBjb3VudHMuYXBwZW5kKGxlbihoZWlnaHRzLmZpbmRfYWxsX2luX2Jhc2luKHYsIHIsIGMpKSkKCiAgICBhY2MgPSAxCiAgICBmb3IgaSBpbiBzb3J0ZWQoY291bnRzKVstMzpdOgogICAgICAgIGFjYyAqPSBpCiAgICByZXR1cm4gYWNjCgoKIyBmcm9tIG1pc2MubWlzY19mdW5jcyBpbXBvcnQgcHJvZmlsZV9mdW5jCiMKIyBAcHJvZmlsZV9mdW5jCmRlZiBtYWluKGZpbGUpIC0+IHR1cGxlOgogICAgaGVpZ2h0czogbGlzdFtsaXN0W2ludF1dID0gW10KICAgIHdpdGggb3BlbihmaWxlKSBhcyBmOgogICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgIGwgPSBsaW5lLnJlbW92ZXN1ZmZpeCgiXG4iKQogICAgICAgICAgICBoZWlnaHRzLmFwcGVuZChbaW50KG51bSkgZm9yIG51bSBpbiBsXSkKICAgIGggPSBIZWlnaHRzKGhlaWdodHMpCiAgICByZXR1cm4gcGFydF9hKGgpLCBwYXJ0X2IoaCkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgaW1wb3J0IHRpbWUKCiAgICBzdGFydF90aW1lID0gdGltZS5wZXJmX2NvdW50ZXIoKQogICAgZmlsZV9wYXRoID0gIi4uL2lucHV0LnR4dCIKICAgIGEsIGIgPSBtYWluKGZpbGVfcGF0aCkKICAgIGVuZF90aW1lID0gdGltZS5wZXJmX2NvdW50ZXIoKQogICAgcHJpbnQoZiJSZXN1bHQgcGFydF9hOiB7YX0iKQogICAgcHJpbnQoZiJSZXN1bHQgcGFydF9iOiB7Yn0iKQogICAgcHJpbnQoZiJUaW1lOiB7KGVuZF90aW1lIC0gc3RhcnRfdGltZSk6NGZ9IHNlYyIpCgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGZvciB2YWwsIChyLCBjKSBpbiBmb3VuZDoKICAgICAgICAgICAgaWYgdmFsIDwgbG93ZXN0OgogICAgICAgICAgICAgICAgbG93ZXN0ID0gdmFsCiAgICAgICAgICAgICAgICByb3cgPSByCjx8ZmltX2VuZHw+"]
["047ed3b7a20ec9d39edc9365300d598022e4d9f6-1","047ed3b7a20ec9d39edc9365300d598022e4d9f6",{"$cut":{"chars":16980,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgoiIiIKVGhlIFJlc291cmNlIEV4cGVydCBEcm9pZCBGZXRjaGVyLgoKUmVkRmV0Y2hlciBmZXRjaGVzIGEgc2luZ2xlIFVSSSBhbmQgYW5hbHlzZXMgdGhhdCByZXNwb25zZSBmb3IgY29tbW9uCnByb2JsZW1zIGFuZCBvdGhlciBpbnRlcmVzdGluZyBjaGFyYWN0ZXJpc3RpY3MuIEl0IG9ubHkgbWFrZXMgb25lIHJlcXVlc3QsCmJhc2VkIHVwb24gdGhlIHByb3ZpZGVkIGhlYWRlcnMuCiIiIgoKX19hdXRob3JfXyA9ICJNYXJrIE5vdHRpbmdoYW0gPG1ub3RAbW5vdC5uZXQ+IgpfX2NvcHlyaWdodF9fID0gIiIiXApDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMyBNYXJrIE5vdHRpbmdoYW0KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgpUSEUgU09GVFdBUkUuCiIiIgoKaW1wb3J0IGhhc2hsaWIKaW1wb3J0IG9zCmZyb20gb3MgaW1wb3J0IHBhdGgKZnJvbSByb2JvdHBhcnNlciBpbXBvcnQgUm9ib3RGaWxlUGFyc2VyCmZyb20gdXJscGFyc2UgaW1wb3J0IHVybHNwbGl0CgppbXBvcnQgdGhvcgppbXBvcnQgdGhvci5odHRwLmVycm9yIGFzIGh0dHBlcnIKCmZyb20gcmVkYm90IGltcG9ydCBfX3ZlcnNpb25fXwpmcm9tIHJlZGJvdC5jYWNoZV9maWxlIGltcG9ydCBDYWNoZUZpbGUKaW1wb3J0IHJlZGJvdC5zcGVhayBhcyBycwpmcm9tIHJlZGJvdC5zdGF0ZSBpbXBvcnQgUmVkU3RhdGUKZnJvbSByZWRib3QubWVzc2FnZSBpbXBvcnQgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZQpmcm9tIHJlZGJvdC5tZXNzYWdlLnN0YXR1cyBpbXBvcnQgU3RhdHVzQ2hlY2tlcgpmcm9tIHJlZGJvdC5tZXNzYWdlLmNhY2hlIGltcG9ydCBjaGVja0NhY2hpbmcKCgpVQV9TVFJJTkcgPSB1IlJFRC8lcyAoaHR0cDovL3JlZGJvdC5vcmcvKSIgJSBfX3ZlcnNpb25fXwoKY2xhc3MgUmVkSHR0cENsaWVudCh0aG9yLmh0dHAuSHR0cENsaWVudCk6CiAgICAiVGhvciBIdHRwQ2xpZW50IGZvciBSZWRGZXRjaGVyIgogICAgY29ubmVjdF90aW1lb3V0ID0gMTAKICAgIHJlYWRfdGltZW91dCA9IDE1CgoKY2xhc3MgUmVkRmV0Y2hlcihSZWRTdGF0ZSk6CiAgICAiIiIKICAgIEFic3RyYWN0IGNsYXNzIGZvciBhIGZldGNoZXIuCgogICAgRmV0Y2hlcyB0aGUgZ2l2ZW4gVVJJICh3aXRoIHRoZSBwcm92aWRlZCBtZXRob2QsIGhlYWRlcnMgYW5kIGJvZHkpIGFuZAogICAgY2FsbHM6CiAgICAgIC0gc3RhdHVzX2NiIGFzIGl0IHByb2dyZXNzZXMsIGFuZAogICAgICAtIGV2ZXJ5IGZ1bmN0aW9uIGluIHRoZSBib2R5X3Byb2NzIGxpc3Qgd2l0aCBlYWNoIGNodW5rIG9mIHRoZSBib2R5LCBhbmQKICAgICAgLSBkb25lX2NiIHdoZW4gYWxsIHRhc2tzIGFyZSBkb25lLgogICAgSWYgcHJvdmlkZWQsIHR5cGUgaW5kaWNhdGVzIHRoZSB0eXBlIG9mIHRoZSByZXF1ZXN0LCBhbmQgaXMgdXNlZCB0bwogICAgaGVscCBzZXQgbm90ZXMgYW5kIHN0YXR1c19jYiBhcHByb3ByaWF0ZWx5LgoKICAgIFRoZSBkb25lKCkgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSByZXNwb25zZSBpcyBkb25lLCBOT1Qgd2hlbiBhbGwKICAgIHRhc2tzIGFyZSBkb25lLiBJdCBjYW4gYWRkIHRhc2tzIGJ5IGNhbGxpbmcgYWRkX3Rhc2soKS4KCiAgICAiIiIKICAgIGNsaWVudCA9IFJlZEh0dHBDbGllbnQoKQogICAgcm9ib3RfZmlsZXMgPSB7fSAjIGNhY2hlIG9mIHJvYm90cy50eHQKICAgIHJvYm90X2NhY2hlX2RpciA9IE5vbmUKICAgIHJvYm90X2xvb2t1cHMgPSB7fQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpcmksIG1ldGhvZD0iR0VUIiwgcmVxX2hkcnM9Tm9uZSwgcmVxX2JvZHk9Tm9uZSwKICAgICAgICAgICAgICAgICBzdGF0dXNfY2I9Tm9uZSwgYm9keV9wcm9jcz1Ob25lLCBuYW1lPU5vbmUpOgogICAgICAgIFJlZFN0YXRlLl9faW5pdF9fKHNlbGYsIG5hbWUpCiAgICAgICAgc2VsZi5yZXF1ZXN0ID0gSHR0cFJlcXVlc3Qoc2VsZi5ub3Rlcywgc2VsZi5uYW1lKQogICAgICAgIHNlbGYucmVxdWVzdC5tZXRob2QgPSBtZXRob2QKICAgICAgICBzZWxmLnJlcXVlc3Quc2V0X2lyaShpcmkpCiAgICAgICAgc2VsZi5yZXF1ZXN0LmhlYWRlcnMgPSByZXFfaGRycyBv"}}]
["047ed3b7a20ec9d39edc9365300d598022e4d9f6-2","047ed3b7a20ec9d39edc9365300d598022e4d9f6","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgoiIiIKVGhlIFJlc291cmNlIEV4cGVydCBEcm9pZCBGZXRjaGVyLgoKUmVkRmV0Y2hlciBmZXRjaGVzIGEgc2luZ2xlIFVSSSBhbmQgYW5hbHlzZXMgdGhhdCByZXNwb25zZSBmb3IgY29tbW9uCnByb2JsZW1zIGFuZCBvdGhlciBpbnRlcmVzdGluZyBjaGFyYWN0ZXJpc3RpY3MuIEl0IG9ubHkgbWFrZXMgb25lIHJlcXVlc3QsCmJhc2VkIHVwb24gdGhlIHByb3ZpZGVkIGhlYWRlcnMuCiIiIgoKX19hdXRob3JfXyA9ICJNYXJrIE5vdHRpbmdoYW0gPG1ub3RAbW5vdC5uZXQ+IgpfX2NvcHlyaWdodF9fID0gIiIiXApDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMyBNYXJrIE5vdHRpbmdoYW0KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgpUSEUgU09GVFdBUkUuCiIiIgoKaW1wb3J0IGhhc2hsaWIKaW1wb3J0IG9zCmZyb20gb3MgaW1wb3J0IHBhdGgKZnJvbSByb2JvdHBhcnNlciBpbXBvcnQgUm9ib3RGaWxlUGFyc2VyCmZyb20gdXJscGFyc2UgaW1wb3J0IHVybHNwbGl0CgppbXBvcnQgdGhvcgppbXBvcnQgdGhvci5odHRwLmVycm9yIGFzIGh0dHBlcnIKCmZyb20gcmVkYm90IGltcG9ydCBfX3ZlcnNpb25fXwpmcm9tIHJlZGJvdC5jYWNoZV9maWxlIGltcG9ydCBDYWNoZUZpbGUKaW1wb3J0IHJlZGJvdC5zcGVhayBhcyBycwpmcm9tIHJlZGJvdC5zdGF0ZSBpbXBvcnQgUmVkU3RhdGUKZnJvbSByZWRib3QubWVzc2FnZSBpbXBvcnQgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZQpmcm9tIHJlZGJvdC5tZXNzYWdlLnN0YXR1cyBpbXBvcnQgU3RhdHVzQ2hlY2tlcgpmcm9tIHJlZGJvdC5tZXNzYWdlLmNhY2hlIGltcG9ydCBjaGVja0NhY2hpbmcKCgpVQV9TVFJJTkcgPSB1IlJFRC8lcyAoaHR0cDovL3JlZGJvdC5vcmcvKSIgJSBfX3ZlcnNpb25fXwoKY2xhc3MgUmVkSHR0cENsaWVudCh0aG9yLmh0dHAuSHR0cENsaWVudCk6CiAgICAiVGhvciBIdHRwQ2xpZW50IGZvciBSZWRGZXRjaGVyIgogICAgY29ubmVjdF90aW1lb3V0ID0gMTAKICAgIHJlYWRfdGltZW91dCA9IDE1CgoKY2xhc3MgUmVkRmV0Y2hlcihSZWRTdGF0ZSk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICIiIgogICAgQWJzdHJhY3QgY2xhc3MgZm9yIGEgZmV0Y2hlci4KCiAgICBGZXRjaGVzIHRoZSBnaXZlbiBVUkkgKHdpdGggdGhlIHByb3ZpZGVkIG1ldGhvZCwgaGVhZGVycyBhbmQgYm9keSkgYW5kCjx8ZmltX2VuZHw+"]
["047ed3b7a20ec9d39edc9365300d598022e4d9f6-3","047ed3b7a20ec9d39edc9365300d598022e4d9f6","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgoiIiIKVGhlIFJlc291cmNlIEV4cGVydCBEcm9pZCBGZXRjaGVyLgoKUmVkRmV0Y2hlciBmZXRjaGVzIGEgc2luZ2xlIFVSSSBhbmQgYW5hbHlzZXMgdGhhdCByZXNwb25zZSBmb3IgY29tbW9uCnByb2JsZW1zIGFuZCBvdGhlciBpbnRlcmVzdGluZyBjaGFyYWN0ZXJpc3RpY3MuIEl0IG9ubHkgbWFrZXMgb25lIHJlcXVlc3QsCmJhc2VkIHVwb24gdGhlIHByb3ZpZGVkIGhlYWRlcnMuCiIiIgoKX19hdXRob3JfXyA9ICJNYXJrIE5vdHRpbmdoYW0gPG1ub3RAbW5vdC5uZXQ+IgpfX2NvcHlyaWdodF9fID0gIiIiXApDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMyBNYXJrIE5vdHRpbmdoYW0KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCjx8ZmltX2VuZHw+"]
["047ed3b7a20ec9d39edc9365300d598022e4d9f6-4","047ed3b7a20ec9d39edc9365300d598022e4d9f6",{"$cut":{"chars":16980,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgoiIiIKVGhlIFJlc291cmNlIEV4cGVydCBEcm9pZCBGZXRjaGVyLgoKUmVkRmV0Y2hlciBmZXRjaGVzIGEgc2luZ2xlIFVSSSBhbmQgYW5hbHlzZXMgdGhhdCByZXNwb25zZSBmb3IgY29tbW9uCnByb2JsZW1zIGFuZCBvdGhlciBpbnRlcmVzdGluZyBjaGFyYWN0ZXJpc3RpY3MuIEl0IG9ubHkgbWFrZXMgb25lIHJlcXVlc3QsCmJhc2VkIHVwb24gdGhlIHByb3ZpZGVkIGhlYWRlcnMuCiIiIgoKX19hdXRob3JfXyA9ICJNYXJrIE5vdHRpbmdoYW0gPG1ub3RAbW5vdC5uZXQ+IgpfX2NvcHlyaWdodF9fID0gIiIiXApDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMyBNYXJrIE5vdHRpbmdoYW0KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgpUSEUgU09GVFdBUkUuCiIiIgoKaW1wb3J0IGhhc2hsaWIKaW1wb3J0IG9zCmZyb20gb3MgaW1wb3J0IHBhdGgKZnJvbSByb2JvdHBhcnNlciBpbXBvcnQgUm9ib3RGaWxlUGFyc2VyCmZyb20gdXJscGFyc2UgaW1wb3J0IHVybHNwbGl0CgppbXBvcnQgdGhvcgppbXBvcnQgdGhvci5odHRwLmVycm9yIGFzIGh0dHBlcnIKCmZyb20gcmVkYm90IGltcG9ydCBfX3ZlcnNpb25fXwpmcm9tIHJlZGJvdC5jYWNoZV9maWxlIGltcG9ydCBDYWNoZUZpbGUKaW1wb3J0IHJlZGJvdC5zcGVhayBhcyBycwpmcm9tIHJlZGJvdC5zdGF0ZSBpbXBvcnQgUmVkU3RhdGUKZnJvbSByZWRib3QubWVzc2FnZSBpbXBvcnQgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZQpmcm9tIHJlZGJvdC5tZXNzYWdlLnN0YXR1cyBpbXBvcnQgU3RhdHVzQ2hlY2tlcgpmcm9tIHJlZGJvdC5tZXNzYWdlLmNhY2hlIGltcG9ydCBjaGVja0NhY2hpbmcKCgpVQV9TVFJJTkcgPSB1IlJFRC8lcyAoaHR0cDovL3JlZGJvdC5vcmcvKSIgJSBfX3ZlcnNpb25fXwoKY2xhc3MgUmVkSHR0cENsaWVudCh0aG9yLmh0dHAuSHR0cENsaWVudCk6CiAgICAiVGhvciBIdHRwQ2xpZW50IGZvciBSZWRGZXRjaGVyIgogICAgY29ubmVjdF90aW1lb3V0ID0gMTAKICAgIHJlYWRfdGltZW91dCA9IDE1CgoKY2xhc3MgUmVkRmV0Y2hlcihSZWRTdGF0ZSk6CiAgICAiIiIKICAgIEFic3RyYWN0IGNsYXNzIGZvciBhIGZldGNoZXIuCgogICAgRmV0Y2hlcyB0aGUgZ2l2ZW4gVVJJICh3aXRoIHRoZSBwcm92aWRlZCBtZXRob2QsIGhlYWRlcnMgYW5kIGJvZHkpIGFuZAogICAgY2FsbHM6CiAgICAgIC0gc3RhdHVzX2NiIGFzIGl0IHByb2dyZXNzZXMsIGFuZAogICAgICAtIGV2ZXJ5IGZ1bmN0aW9uIGluIHRoZSBib2R5X3Byb2NzIGxpc3Qgd2l0aCBlYWNoIGNodW5rIG9mIHRoZSBib2R5LCBhbmQKICAgICAgLSBkb25lX2NiIHdoZW4gYWxsIHRhc2tzIGFyZSBkb25lLgogICAgSWYgcHJvdmlkZWQsIHR5cGUgaW5kaWNhdGVzIHRoZSB0eXBlIG9mIHRoZSByZXF1ZXN0LCBhbmQgaXMgdXNlZCB0bwogICAgaGVscCBzZXQgbm90ZXMgYW5kIHN0YXR1c19jYiBhcHByb3ByaWF0ZWx5LgoKICAgIFRoZSBkb25lKCkgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSByZXNwb25zZSBpcyBkb25lLCBOT1Qgd2hlbiBhbGwKICAgIHRhc2tzIGFyZSBkb25lLiBJdCBjYW4gYWRkIHRhc2tzIGJ5IGNhbGxpbmcgYWRkX3Rhc2soKS4KCiAgICAiIiIKICAgIGNsaWVudCA9IFJlZEh0dHBDbGllbnQoKQogICAgcm9ib3RfZmlsZXMgPSB7fSAjIGNhY2hlIG9mIHJvYm90cy50eHQKICAgIHJvYm90X2NhY2hlX2RpciA9IE5vbmUKICAgIHJvYm90X2xvb2t1cHMgPSB7fQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpcmksIG1ldGhvZD0iR0VUIiwgcmVxX2hkcnM9Tm9uZSwgcmVxX2JvZHk9Tm9uZSwKICAgICAgICAgICAgICAgICBzdGF0dXNfY2I9Tm9uZSwgYm9keV9wcm9jcz1Ob25lLCBuYW1lPU5vbmUpOgogICAgICAgIFJlZFN0YXRlLl9faW5pdF9fKHNlbGYsIG5hbWUpCiAgICAgICAgc2VsZi5yZXF1ZXN0ID0gSHR0cFJlcXVlc3Qoc2VsZi5ub3Rlcywgc2VsZi5uYW1lKQogICAgICAgIHNlbGYucmVxdWVzdC5tZXRob2QgPSBtZXRob2QKICAgICAgICBzZWxmLnJlcXVlc3Quc2V0X2lyaShpcmkpCiAgICAgICAgc2VsZi5yZXF1ZXN0LmhlYWRlcnMgPSByZXFfaGRycyBv"}}]
["047ed3b7a20ec9d39edc9365300d598022e4d9f6-5","047ed3b7a20ec9d39edc9365300d598022e4d9f6",{"$cut":{"chars":16980,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgoiIiIKVGhlIFJlc291cmNlIEV4cGVydCBEcm9pZCBGZXRjaGVyLgoKUmVkRmV0Y2hlciBmZXRjaGVzIGEgc2luZ2xlIFVSSSBhbmQgYW5hbHlzZXMgdGhhdCByZXNwb25zZSBmb3IgY29tbW9uCnByb2JsZW1zIGFuZCBvdGhlciBpbnRlcmVzdGluZyBjaGFyYWN0ZXJpc3RpY3MuIEl0IG9ubHkgbWFrZXMgb25lIHJlcXVlc3QsCmJhc2VkIHVwb24gdGhlIHByb3ZpZGVkIGhlYWRlcnMuCiIiIgoKX19hdXRob3JfXyA9ICJNYXJrIE5vdHRpbmdoYW0gPG1ub3RAbW5vdC5uZXQ+IgpfX2NvcHlyaWdodF9fID0gIiIiXApDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMyBNYXJrIE5vdHRpbmdoYW0KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgpUSEUgU09GVFdBUkUuCiIiIgoKaW1wb3J0IGhhc2hsaWIKaW1wb3J0IG9zCmZyb20gb3MgaW1wb3J0IHBhdGgKZnJvbSByb2JvdHBhcnNlciBpbXBvcnQgUm9ib3RGaWxlUGFyc2VyCmZyb20gdXJscGFyc2UgaW1wb3J0IHVybHNwbGl0CgppbXBvcnQgdGhvcgppbXBvcnQgdGhvci5odHRwLmVycm9yIGFzIGh0dHBlcnIKCmZyb20gcmVkYm90IGltcG9ydCBfX3ZlcnNpb25fXwpmcm9tIHJlZGJvdC5jYWNoZV9maWxlIGltcG9ydCBDYWNoZUZpbGUKaW1wb3J0IHJlZGJvdC5zcGVhayBhcyBycwpmcm9tIHJlZGJvdC5zdGF0ZSBpbXBvcnQgUmVkU3RhdGUKZnJvbSByZWRib3QubWVzc2FnZSBpbXBvcnQgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZQpmcm9tIHJlZGJvdC5tZXNzYWdlLnN0YXR1cyBpbXBvcnQgU3RhdHVzQ2hlY2tlcgpmcm9tIHJlZGJvdC5tZXNzYWdlLmNhY2hlIGltcG9ydCBjaGVja0NhY2hpbmcKCgpVQV9TVFJJTkcgPSB1IlJFRC8lcyAoaHR0cDovL3JlZGJvdC5vcmcvKSIgJSBfX3ZlcnNpb25fXwoKY2xhc3MgUmVkSHR0cENsaWVudCh0aG9yLmh0dHAuSHR0cENsaWVudCk6CiAgICAiVGhvciBIdHRwQ2xpZW50IGZvciBSZWRGZXRjaGVyIgogICAgY29ubmVjdF90aW1lb3V0ID0gMTAKICAgIHJlYWRfdGltZW91dCA9IDE1CgoKY2xhc3MgUmVkRmV0Y2hlcihSZWRTdGF0ZSk6CiAgICAiIiIKICAgIEFic3RyYWN0IGNsYXNzIGZvciBhIGZldGNoZXIuCgogICAgRmV0Y2hlcyB0aGUgZ2l2ZW4gVVJJICh3aXRoIHRoZSBwcm92aWRlZCBtZXRob2QsIGhlYWRlcnMgYW5kIGJvZHkpIGFuZAogICAgY2FsbHM6CiAgICAgIC0gc3RhdHVzX2NiIGFzIGl0IHByb2dyZXNzZXMsIGFuZAogICAgICAtIGV2ZXJ5IGZ1bmN0aW9uIGluIHRoZSBib2R5X3Byb2NzIGxpc3Qgd2l0aCBlYWNoIGNodW5rIG9mIHRoZSBib2R5LCBhbmQKICAgICAgLSBkb25lX2NiIHdoZW4gYWxsIHRhc2tzIGFyZSBkb25lLgogICAgSWYgcHJvdmlkZWQsIHR5cGUgaW5kaWNhdGVzIHRoZSB0eXBlIG9mIHRoZSByZXF1ZXN0LCBhbmQgaXMgdXNlZCB0bwogICAgaGVscCBzZXQgbm90ZXMgYW5kIHN0YXR1c19jYiBhcHByb3ByaWF0ZWx5LgoKICAgIFRoZSBkb25lKCkgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSByZXNwb25zZSBpcyBkb25lLCBOT1Qgd2hlbiBhbGwKICAgIHRhc2tzIGFyZSBkb25lLiBJdCBjYW4gYWRkIHRhc2tzIGJ5IGNhbGxpbmcgYWRkX3Rhc2soKS4KCiAgICAiIiIKICAgIGNsaWVudCA9IFJlZEh0dHBDbGllbnQoKQogICAgcm9ib3RfZmlsZXMgPSB7fSAjIGNhY2hlIG9mIHJvYm90cy50eHQKICAgIHJvYm90X2NhY2hlX2RpciA9IE5vbmUKICAgIHJvYm90X2xvb2t1cHMgPSB7fQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpcmksIG1ldGhvZD0iR0VUIiwgcmVxX2hkcnM9Tm9uZSwgcmVxX2JvZHk9Tm9uZSwKICAgICAgICAgICAgICAgICBzdGF0dXNfY2I9Tm9uZSwgYm9keV9wcm9jcz1Ob25lLCBuYW1lPU5vbmUpOgogICAgICAgIFJlZFN0YXRlLl9faW5pdF9fKHNlbGYsIG5hbWUpCiAgICAgICAgc2VsZi5yZXF1ZXN0ID0gSHR0cFJlcXVlc3Qoc2VsZi5ub3Rlcywgc2VsZi5uYW1lKQogICAgICAgIHNlbGYucmVxdWVzdC5tZXRob2QgPSBtZXRob2QKICAgICAgICBzZWxmLnJlcXVlc3Quc2V0X2lyaShpcmkpCiAgICAgICAgc2VsZi5yZXF1ZXN0LmhlYWRlcnMgPSByZXFfaGRycyBv"}}]
["b6e682af90f433281b60429ca78a2f421372ad00-1","b6e682af90f433281b60429ca78a2f421372ad00","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCgpFZGdlID0gbmFtZWR0dXBsZSgnRWRnZScsIFsndl9ubycsICd3J10pClZlcnRleF9EaXN0YW5jZSA9IG5hbWVkdHVwbGUoJ1ZlcnRleF9EaXN0YW5jZScsIFsncHJlZGVjZXNzb3InLCAnZGlzdCddKQoKY2xhc3MgRGlyZWN0ZWRfQWN5Y2xpY19HcmFwaDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2UsIHNpbmssIGVkZ2VzKToKICAgICAgICAKICAgICAgICBzZWxmLnZfbm9fbGFiZWxfZ2FwID0gc291cmNlICogKC0xKSAjdl9ubyBhcmUgMC1iYXNlZCBpbmRleCBidXQgaW5wdXQgbGFiZWxzIGNvdWxkIHN0YXJ0IGF0IGFueSBwb3NpdGlvbgogICAgICAgIHNlbGYudmVydGljZXNfY291bnQgPSBhYnMoc2luayAtIHNvdXJjZSkgKyAxCiAgICAgICAgc2VsZi5pc192YWxpZF9kYWcgPSBUcnVlCiAgICAgICAgc2VsZi5sb25nZXN0X3BhdGhfbGVuID0gMAogICAgICAgIHNlbGYubG9uZ2VzdF9wYXRoID0gW10KCiAgICAgICAgc2VsZi5idWlsZF9hZGphY2VuY3lfbGlzdChlZGdlcykKICAgICAgICAKICAgIGRlZiBidWlsZF9hZGphY2VuY3lfbGlzdChzZWxmLCBlZGdlcyk6CiAgICAgICAgCiAgICAgICAgc2VsZi5hZGphY2VuY3lfbGlzdCA9IFtbXSBmb3IgXyBpbiByYW5nZShzZWxmLnZlcnRpY2VzX2NvdW50KV0KCiAgICAgICAgc2VsZi5pc192YWxpZF9zb3VyY2UgPSBUcnVlCiAgICAgICAgc2VsZi5pc192YWxpZF9zaW5rID0gVHJ1ZQogICAgICAgIGZvciBlZGdlIGluIGVkZ2VzOgogICAgICAgICAgICB1ID0gaW50KGVkZ2Uuc3BsaXQoIi0+IilbMF0pICsgc2VsZi52X25vX2xhYmVsX2dhcAogICAgICAgICAgICB2ID0gaW50KGVkZ2Uuc3BsaXQoIi0+IilbMV0uc3BsaXQoIjoiKVswXSkgKyBzZWxmLnZfbm9fbGFiZWxfZ2FwCiAgICAgICAgICAgIHcgPSBpbnQoZWRnZS5zcGxpdCgiLT4iKVsxXS5zcGxpdCgiOiIpWzFdKQogICAgICAgICAgICAKICAgICAgICAgICAgc2VsZi5hZGphY2VuY3lfbGlzdFt1XS5hcHBlbmQoRWRnZSh2LCB3KSkKICAgICAgICAgICAgCiAgICAgICAgICAgIHNlbGYuaXNfdmFsaWRfc291cmNlICY9ICh2ICE9IDApCiAgICAgICAgCiAgICAgICAgc2VsZi5pc192YWxpZF9zb3VyY2UgJj0gKGxlbihlZGdlcykgPT0gMCBvciBsZW4oc2VsZi5hZGphY2VuY3lfbGlzdFswXSkgPiAwKQogICAgICAgIHNlbGYuaXNfdmFsaWRfc2luayA9IGxlbihzZWxmLmFkamFjZW5jeV9saXN0W3NlbGYudmVydGljZXNfY291bnQgLSAxXSkgPT0gMAogICAgICAgIAogICAgZGVmIGNoZWNrX2N5Y2tlX3ZlcnRleChzZWxmLCB1LCB2aXNpdGVkLCBjeWNsZSk6CiAgICAgICAgCiAgICAgICAgdmlzaXRlZFt1XSA9IFRydWUKICAgICAgICBjeWNsZVt1XSA9IFRydWUKICAgICAgICBmb3IgZWRnZSBpbiBzZWxmLmFkamFjZW5jeV9saXN0W3VdOgoKICAgICAgICAgICAgaWYgY3ljbGVbZWRnZS52X25vXToKICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgICAgIAogICAgICAgICAgICBpZiB2aXNpdGVkW2VkZ2Uudl9ub106CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgc2VsZi5jaGVja19jeWNrZV92ZXJ0ZXgoZWRnZS52X25vLCB2aXNpdGVkLCBjeWNsZSk6CiAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQoKICAgICAgICBjeWNsZVt1XSA9IEZhbHNlCgogICAgICAgIHJldHVybiBGYWxzZQoKICAgIGRlZiBjaGVja19kYWdfZGZzKHNlbGYpOgoKICAgICAgICB2aXNpdGVkID0gW0ZhbHNlIGZvciBfIGluIHJhbmdlKHNlbGYudmVydGljZXNfY291bnQpXSAKICAgICAgICBjeWNsZSAgPSBbRmFsc2UgZm9yIF8gaW4gcmFuZ2Uoc2VsZi52ZXJ0aWNlc19jb3VudCldIAogICAgICAgIAogICAgICAgIHNlbGYuaXNfdmFsaWRfZGFnID0gVHJ1ZQogICAgICAgIGZvciB2IGluIHJhbmdlKHNlbGYudmVydGljZXNfY291bnQpOgogICAgICAgICAgICBpZiBub3QgdmlzaXRlZFt2XToKICAgICAgICAgICAgICAgIGlmIHNlbGYuY2hlY2tfY3lja2VfdmVydGV4KHYsIHZpc2l0ZWQsIGN5Y2xlKToKICAgICAgICAgICAgICAgICAgICBzZWxmLmlzX3ZhbGlkX2RhZyA9IEZhbHNlCiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgIAogICAgZGVmIHNvcnRfdG9wb2xvZ2ljYWxseV92ZXJ0ZXgoc2VsZiwgdSwgdmlzaXRlZCwgdG9wb19zb3J0KToKICAgICAgICAKICAgICAgICB2aXNpdGVkW3VdID0gVHJ1ZQogICAgICAgIGZvciBlZGdlIGluIHNlbGYuYWRqYWNlbmN5X2xpc3RbdV06CiAgICAgICAgICAgIGlmIG5vdCB2aXNpdGVkW2VkZ2Uudl9ub106CiAgICAgICAgICAgICAgIHNlbGYuc29ydF90b3BvbG9naWNhbGx5X3ZlcnRleChlZGdlLnZfbm8sIHZpc2l0ZWQsIHRvcG9fc29ydCkKICAgICAgICAKICAgICAgICB0b3BvX3NvcnQuYXBwZW5kKHUpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBkZWYgc29ydF90b3BvbG9naWNhbGx5X2RmcyhzZWxmKToKICAgICAgICAgICAgICAgIAogICAgICAgIHZpc2l0ZWQgPSBbRmFsc2UgZm9yIF8gaW4gcmFuZ2Uoc2VsZi52ZXJ0aWNlc19jb3VudCldCjx8ZmltX2VuZHw+"]
["b6e682af90f433281b60429ca78a2f421372ad00-2","b6e682af90f433281b60429ca78a2f421372ad00","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCgpFZGdlID0gbmFtZWR0dXBsZSgnRWRnZScsIFsndl9ubycsICd3J10pClZlcnRleF9EaXN0YW5jZSA9IG5hbWVkdHVwbGUoJ1ZlcnRleF9EaXN0YW5jZScsIFsncHJlZGVjZXNzb3InLCAnZGlzdCddKQoKY2xhc3MgRGlyZWN0ZWRfQWN5Y2xpY19HcmFwaDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2UsIHNpbmssIGVkZ2VzKToKICAgICAgICAKICAgICAgICBzZWxmLnZfbm9fbGFiZWxfZ2FwID0gc291cmNlICogKC0xKSAjdl9ubyBhcmUgMC1iYXNlZCBpbmRleCBidXQgaW5wdXQgbGFiZWxzIGNvdWxkIHN0YXJ0IGF0IGFueSBwb3NpdGlvbgogICAgICAgIHNlbGYudmVydGljZXNfY291bnQgPSBhYnMoc2luayAtIHNvdXJjZSkgKyAxCiAgICAgICAgc2VsZi5pc192YWxpZF9kYWcgPSBUcnVlCiAgICAgICAgc2VsZi5sb25nZXN0X3BhdGhfbGVuID0gMAogICAgICAgIHNlbGYubG9uZ2VzdF9wYXRoID0gW10KCiAgICAgICAgc2VsZi5idWlsZF9hZGphY2VuY3lfbGlzdChlZGdlcykKICAgICAgICAKICAgIGRlZiBidWlsZF9hZGphY2VuY3lfbGlzdChzZWxmLCBlZGdlcyk6CiAgICAgICAgCiAgICAgICAgc2VsZi5hZGphY2VuY3lfbGlzdCA9IFtbXSBmb3IgXyBpbiByYW5nZShzZWxmLnZlcnRpY2VzX2NvdW50KV0KCiAgICAgICAgc2VsZi5pc192YWxpZF9zb3VyY2UgPSBUcnVlCiAgICAgICAgc2VsZi5pc192YWxpZF9zaW5rID0gVHJ1ZQogICAgICAgIGZvciBlZGdlIGluIGVkZ2VzOgogICAgICAgICAgICB1ID0gaW50KGVkZ2Uuc3BsaXQoIi0+IilbMF0pICsgc2VsZi52X25vX2xhYmVsX2dhcAogICAgICAgICAgICB2ID0gaW50KGVkZ2Uuc3BsaXQoIi0+IilbMV0uc3BsaXQoIjoiKVswXSkgKyBzZWxmLnZfbm9fbGFiZWxfZ2FwCiAgICAgICAgICAgIHcgPSBpbnQoZWRnZS5zcGxpdCgiLT4iKVsxXS5zcGxpdCgiOiIpWzFdKQogICAgICAgICAgICAKICAgICAgICAgICAgc2VsZi5hZGphY2VuY3lfbGlzdFt1XS5hcHBlbmQoRWRnZSh2LCB3KSkKICAgICAgICAgICAgCiAgICAgICAgICAgIHNlbGYuaXNfdmFsaWRfc291cmNlICY9ICh2ICE9IDApCiAgICAgICAgCiAgICAgICAgc2VsZi5pc192YWxpZF9zb3VyY2UgJj0gKGxlbihlZGdlcykgPT0gMCBvciBsZW4oc2VsZi5hZGphY2VuY3lfbGlzdFswXSkgPiAwKQogICAgICAgIHNlbGYuaXNfdmFsaWRfc2luayA9IGxlbihzZWxmLmFkamFjZW5jeV9saXN0W3NlbGYudmVydGljZXNfY291bnQgLSAxXSkgPT0gMAogICAgICAgIAogICAgZGVmIGNoZWNrX2N5Y2tlX3ZlcnRleChzZWxmLCB1LCB2aXNpdGVkLCBjeWNsZSk6CiAgICAgICAgCiAgICAgICAgdmlzaXRlZFt1XSA9IFRydWUKICAgICAgICBjeWNsZVt1XSA9IFRydWUKICAgICAgICBmb3IgZWRnZSBpbiBzZWxmLmFkamFjZW5jeV9saXN0W3VdOgoKICAgICAgICAgICAgaWYgY3ljbGVbZWRnZS52X25vXToKICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgICAgIAogICAgICAgICAgICBpZiB2aXNpdGVkW2VkZ2Uudl9ub106CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgc2VsZi5jaGVja19jeWNrZV92ZXJ0ZXgoZWRnZS52X25vLCB2aXNpdGVkLCBjeWNsZSk6CiAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQoKICAgICAgICBjeWNsZVt1XSA9IEZhbHNlCgogICAgICAgIHJldHVybiBGYWxzZQoKICAgIGRlZiBjaGVja19kYWdfZGZzKHNlbGYpOgoKICAgICAgICB2aXNpdGVkID0gW0ZhbHNlIGZvciBfIGluIHJhbmdlKHNlbGYudmVydGljZXNfY291bnQpXSAKICAgICAgICBjeWNsZSAgPSBbRmFsc2UgZm9yIF8gaW4gcmFuZ2Uoc2VsZi52ZXJ0aWNlc19jb3VudCldIAogICAgICAgIAogICAgICAgIHNlbGYuaXNfdmFsaWRfZGFnID0gVHJ1ZQogICAgICAgIGZvciB2IGluIHJhbmdlKHNlbGYudmVydGljZXNfY291bnQpOgogICAgICAgICAgICBpZiBub3QgdmlzaXRlZFt2XToKICAgICAgICAgICAgICAgIGlmIHNlbGYuY2hlY2tfY3lja2VfdmVydGV4KHYsIHZpc2l0ZWQsIGN5Y2xlKToKICAgICAgICAgICAgICAgICAgICBzZWxmLmlzX3ZhbGlkX2RhZyA9IEZhbHNlCiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgIAogICAgZGVmIHNvcnRfdG9wb2xvZ2ljYWxseV92ZXJ0ZXgoc2VsZiwgdSwgdmlzaXRlZCwgdG9wb19zb3J0KToKICAgICAgICAKICAgICAgICB2aXNpdGVkW3VdID0gVHJ1ZQogICAgICAgIGZvciBlZGdlIGluIHNlbGYuYWRqYWNlbmN5X2xpc3RbdV06CiAgICAgICAgICAgIGlmIG5vdCB2aXNpdGVkW2VkZ2Uudl9ub106CiAgICAgICAgICAgICAgIHNlbGYuc29ydF90b3BvbG9naWNhbGx5X3ZlcnRleChlZGdlLnZfbm8sIHZpc2l0ZWQsIHRvcG9fc29ydCkKICAgICAgICAKICAgICAgICB0b3BvX3NvcnQuYXBwZW5kKHUpCgogICAgZGVmIHNvcnRfdG9wb2xvZ2ljYWxseV9kZnMoc2VsZik6CiAgICAgICAgICAgICAgICAKICAgICAgICB2aXNpdGVkID0gW0ZhbHNlIGZvciBfIGluIHJhbmdlKHNlbGYudmVydGljZXNfY291bnQpXQogICAgICAgIHRvcG9fc29ydCA9IFtdCiAgICAgICAgZm9yIHUgaW4gcmFuZ2Uoc2VsZi52ZXJ0aWNlc19jb3VudCk6CiAgICAgICAgICAgIGlmIG5vdCB2aXNpdGVkW3VdOgogICAgICAgICAgICAgICAgc2VsZi5zb3J0X3RvcG9sb2dpY2FsbHlfdmVydGV4KHUsIHZpc2l0ZWQsIHRvcG9fc29ydCkKICAgICAgICAKICAgICAgICByZXR1cm4gdG9wb19zb3J0Wzo6LTFdCgogICAgZGVmIGxvbmdlc3RfcGF0aF9iYWNrdHJhY2soc2VsZiwgdSwgbWF4X2Rpc3RhbmNlKToKCiAgICAgICAgbG9uZ2VzdF9wYXRoID0gW10gICAgIAogICAgICAgIHdoaWxlIHUgIT0gLTE6CiAgICAgICAgICAgIGxvbmdlc3RfcGF0aC5hcHBlbmQoc3RyKHUgLSBzZWxmLnZfbm9fbGFiZWxfZ2FwKSkKICAgICAgICAgICAgdSA9IG1heF9kaXN0YW5jZVt1XS5wcmVkZWNlc3NvcgogICAgICAgIAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcmV0dXJuIGxvbmdlc3RfcGF0aFs6Oi0xXQoKPHxmaW1fZW5kfD4="]
["b6e682af90f433281b60429ca78a2f421372ad00-3","b6e682af90f433281b60429ca78a2f421372ad00","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCgpFZGdlID0gbmFtZWR0dXBsZSgnRWRnZScsIFsndl9ubycsICd3J10pClZlcnRleF9EaXN0YW5jZSA9IG5hbWVkdHVwbGUoJ1ZlcnRleF9EaXN0YW5jZScsIFsncHJlZGVjZXNzb3InLCAnZGlzdCddKQoKY2xhc3MgRGlyZWN0ZWRfQWN5Y2xpY19HcmFwaDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2UsIHNpbmssIGVkZ2VzKToKICAgICAgICAKICAgICAgICBzZWxmLnZfbm9fbGFiZWxfZ2FwID0gc291cmNlICogKC0xKSAjdl9ubyBhcmUgMC1iYXNlZCBpbmRleCBidXQgaW5wdXQgbGFiZWxzIGNvdWxkIHN0YXJ0IGF0IGFueSBwb3NpdGlvbgogICAgICAgIHNlbGYudmVydGljZXNfY291bnQgPSBhYnMoc2luayAtIHNvdXJjZSkgKyAxCiAgICAgICAgc2VsZi5pc192YWxpZF9kYWcgPSBUcnVlCiAgICAgICAgc2VsZi5sb25nZXN0X3BhdGhfbGVuID0gMAogICAgICAgIHNlbGYubG9uZ2VzdF9wYXRoID0gW10KCiAgICAgICAgc2VsZi5idWlsZF9hZGphY2VuY3lfbGlzdChlZGdlcykKICAgICAgICAKICAgIGRlZiBidWlsZF9hZGphY2VuY3lfbGlzdChzZWxmLCBlZGdlcyk6CiAgICAgICAgCiAgICAgICAgc2VsZi5hZGphY2VuY3lfbGlzdCA9IFtbXSBmb3IgXyBpbiByYW5nZShzZWxmLnZlcnRpY2VzX2NvdW50KV0KCiAgICAgICAgc2VsZi5pc192YWxpZF9zb3VyY2UgPSBUcnVlCiAgICAgICAgc2VsZi5pc192YWxpZF9zaW5rID0gVHJ1ZQogICAgICAgIGZvciBlZGdlIGluIGVkZ2VzOgogICAgICAgICAgICB1ID0gaW50KGVkZ2Uuc3BsaXQoIi0+IilbMF0pICsgc2VsZi52X25vX2xhYmVsX2dhcAogICAgICAgICAgICB2ID0gaW50KGVkZ2Uuc3BsaXQoIi0+IilbMV0uc3BsaXQoIjoiKVswXSkgKyBzZWxmLnZfbm9fbGFiZWxfZ2FwCiAgICAgICAgICAgIHcgPSBpbnQoZWRnZS5zcGxpdCgiLT4iKVsxXS5zcGxpdCgiOiIpWzFdKQogICAgICAgICAgICAKICAgICAgICAgICAgc2VsZi5hZGphY2VuY3lfbGlzdFt1XS5hcHBlbmQoRWRnZSh2LCB3KSkKICAgICAgICAgICAgCiAgICAgICAgICAgIHNlbGYuaXNfdmFsaWRfc291cmNlICY9ICh2ICE9IDApCiAgICAgICAgCiAgICAgICAgc2VsZi5pc192YWxpZF9zb3VyY2UgJj0gKGxlbihlZGdlcykgPT0gMCBvciBsZW4oc2VsZi5hZGphY2VuY3lfbGlzdFswXSkgPiAwKQogICAgICAgIHNlbGYuaXNfdmFsaWRfc2luayA9IGxlbihzZWxmLmFkamFjZW5jeV9saXN0W3NlbGYudmVydGljZXNfY291bnQgLSAxXSkgPT0gMAogICAgICAgIAogICAgZGVmIGNoZWNrX2N5Y2tlX3ZlcnRleChzZWxmLCB1LCB2aXNpdGVkLCBjeWNsZSk6CiAgICAgICAgCiAgICAgICAgdmlzaXRlZFt1XSA9IFRydWUKICAgICAgICBjeWNsZVt1XSA9IFRydWUKICAgICAgICBmb3IgZWRnZSBpbiBzZWxmLmFkamFjZW5jeV9saXN0W3VdOgoKICAgICAgICAgICAgaWYgY3ljbGVbZWRnZS52X25vXToKICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgICAgIAogICAgICAgICAgICBpZiB2aXNpdGVkW2VkZ2Uudl9ub106CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgc2VsZi5jaGVja19jeWNrZV92ZXJ0ZXgoZWRnZS52X25vLCB2aXNpdGVkLCBjeWNsZSk6CiAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQoKICAgICAgICBjeWNsZVt1XSA9IEZhbHNlCgogICAgICAgIHJldHVybiBGYWxzZQoKICAgIGRlZiBjaGVja19kYWdfZGZzKHNlbGYpOgoKICAgICAgICB2aXNpdGVkID0gW0ZhbHNlIGZvciBfIGluIHJhbmdlKHNlbGYudmVydGljZXNfY291bnQpXSAKICAgICAgICBjeWNsZSAgPSBbRmFsc2UgZm9yIF8gaW4gcmFuZ2Uoc2VsZi52ZXJ0aWNlc19jb3VudCldIAogICAgICAgIAogICAgICAgIHNlbGYuaXNfdmFsaWRfZGFnID0gVHJ1ZQogICAgICAgIGZvciB2IGluIHJhbmdlKHNlbGYudmVydGljZXNfY291bnQpOgogICAgICAgICAgICBpZiBub3QgdmlzaXRlZFt2XToKICAgICAgICAgICAgICAgIGlmIHNlbGYuY2hlY2tfY3lja2VfdmVydGV4KHYsIHZpc2l0ZWQsIGN5Y2xlKToKICAgICAgICAgICAgICAgICAgICBzZWxmLmlzX3ZhbGlkX2RhZyA9IEZhbHNlCiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgIAogICAgZGVmIHNvcnRfdG9wb2xvZ2ljYWxseV92ZXJ0ZXgoc2VsZiwgdSwgdmlzaXRlZCwgdG9wb19zb3J0KToKICAgICAgICAKICAgICAgICB2aXNpdGVkW3VdID0gVHJ1ZQogICAgICAgIGZvciBlZGdlIGluIHNlbGYuYWRqYWNlbmN5X2xpc3RbdV06CiAgICAgICAgICAgIGlmIG5vdCB2aXNpdGVkW2VkZ2Uudl9ub106CiAgICAgICAgICAgICAgIHNlbGYuc29ydF90b3BvbG9naWNhbGx5X3ZlcnRleChlZGdlLnZfbm8sIHZpc2l0ZWQsIHRvcG9fc29ydCkKICAgICAgICAKICAgICAgICB0b3BvX3NvcnQuYXBwZW5kKHUpCgogICAgZGVmIHNvcnRfdG9wb2xvZ2ljYWxseV9kZnMoc2VsZik6CiAgICAgICAgICAgICAgICAKICAgICAgICB2aXNpdGVkID0gW0ZhbHNlIGZvciBfIGluIHJhbmdlKHNlbGYudmVydGljZXNfY291bnQpXQogICAgICAgIHRvcG9fc29ydCA9IFtdCiAgICAgICAgZm9yIHUgaW4gcmFuZ2Uoc2VsZi52ZXJ0aWNlc19jb3VudCk6CiAgICAgICAgICAgIGlmIG5vdCB2aXNpdGVkW3VdOgogICAgICAgICAgICAgICAgc2VsZi5zb3J0X3RvcG9sb2dpY2FsbHlfdmVydGV4KHUsIHZpc2l0ZWQsIHRvcG9fc29ydCkKICAgICAgICAKICAgICAgICByZXR1cm4gdG9wb19zb3J0Wzo6LTFdCgogICAgZGVmIGxvbmdlc3RfcGF0aF9iYWNrdHJhY2soc2VsZiwgdSwgbWF4X2Rpc3RhbmNlKToKCiAgICAgICAgbG9uZ2VzdF9wYXRoID0gW10gICAgIAogICAgICAgIHdoaWxlIHUgIT0gLTE6CiAgICAgICAgICAgIGxvbmdlc3RfcGF0aC5hcHBlbmQoc3RyKHUgLSBzZWxmLnZfbm9fbGFiZWxfZ2FwKSkKICAgICAgICAgICAgdSA9IG1heF9kaXN0YW5jZVt1XS5wcmVkZWNlc3NvcgogICAgICAgIAogICAgICAgIHJldHVybiBsb25nZXN0X3BhdGhbOjotMV0KCiAgICBkZWYgY29tcHV0ZV9sb25nZXN0X3BhdGgoc2VsZik6CgogICAgICAgICMgVmFsaWRhdGlvbnM6CiAgICAgICAgIyAgRyBpcyBhIHZhbGlkIERBRzogaXQgaGFzIG5vIGN5Y2xlCiAgICAgICAgIyAgU291cmNlIGlzIGEgdmFsaWQgc291cmNlIHZlcnRleDogdGhlcmUgaXMgbm8gaW5jb21pbmcgZWRnZXMKICAgICAgICAjICBTaW5rIGlzIGEgdmFsaWQgc2luayB2ZXJ0ZXg6IHRoZXJlIGlzIG5vIG91dGdvaW5nIGVkZ2VzCiAgICAgICAgaWYgbm90IChzZWxmLmlzX3ZhbGlkX3NvdXJjZSBhbmQgc2VsZi5pc192YWxpZF9zaW5rKToKICAgICAgICAgICAgcmV0dXJuCjx8ZmltX2hvbGV8PgogICAgICAgIG1heF9kaXN0YW5jZSA9IFtWZXJ0ZXhfRGlzdGFuY2UoLTEsIC0gc3lzLm1heHNpemUgLSAxKSBmb3IgXyBpbiByYW5nZShzZWxmLnZlcnRpY2VzX2NvdW50KV0KICAgICAgICBtYXhfZGlzdGFuY2VbMF0gPSBWZXJ0ZXhfRGlzdGFuY2UoLTEsIDApCgogICAgICAgIHRvcG9fc29ydCA9IHNlbGYuc29ydF90b3BvbG9naWNhbGx5X2RmcygpCiAgICAgICAgZm9yIHUgaW4gdG9wb19zb3J0OgogICAgICAgICAgICBmb3IgZSBpbiBzZWxmLmFkamFjZW5jeV9saXN0W3VdOgogICAgICAgICAgICAgICAgdiA9IGUudl9ubwogICAgICAgICAgICAgICAgY2FuZGlkYXRlX2Rpc3RhbmNlID0gbWF4X2Rpc3RhbmNlW3VdLmRpc3QgKyBlLncKICAgICAgICAgICAgICAgIGlmIG1heF9kaXN0YW5jZVt2XS5kaXN0IDwgY2FuZGlkYXRlX2Rpc3RhbmNlOgogICAgICAgICAgICAgICAgICAgIG1heF9kaXN0YW5jZVt2XSA9IFZlcnRleF9EaXN0YW5jZSh1LCBjYW5kaWRhdGVfZGlzdGFuY2UpCiAgICAgICAgCiAgICAgICAgc2lua192ZXJ0ZXggPSBzZWxmLnZlcnRpY2VzX2NvdW50IC0gMQogICAgICAgIHNlbGYubG9uZ2VzdF9wYXRoX2xlbiA9IG1heF9kaXN0YW5jZVtzaW5rX3ZlcnRleF0uZGlzdAogICAgICAgIHNlbGYubG9uZ2VzdF9wYXRoID0gc2VsZi5sb25nZXN0X3BhdGhfYmFja3RyYWNrKHNpbmtfdmVydGV4LCBtYXhfZGlzdGFuY2UpCgogICAgZGVmIF9fcmVwcl9fKHNlbGYpOgoKICAgICAgICByZXR1cm4gZiJ7c2VsZi5sb25nZXN0X3BhdGhfbGVufSBcbiIgKyAnLT4nLmpvaW4oc2VsZi5sb25nZXN0X3BhdGgpCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgoKICAgIHNvdXJjZSA9IGludChzeXMuc3RkaW4ucmVhZGxpbmUoKS5zdHJpcCgpKQogICAgc2luayA9IGludChzeXMuc3RkaW4ucmVhZGxpbmUoKS5zdHJpcCgpKQogICAgZWRnZXMgPSBbbGluZS5zdHJpcCgpIGZvciBsaW5lIGluIHN5cy5zdGRpbl0KCiAgICBkYWcgPSBEaXJlY3RlZF9BY3ljbGljX0dyYXBoKHNvdXJjZSwgc2luaywgZWRnZXMpCiAgICBkYWcuY29tcHV0ZV9sb25nZXN0X3BhdGgoKQogICAgCiAgICBwcmludChkYWcpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5jaGVja19kYWdfZGZzKCkKICAgICAgICBpZiBub3Qgc2VsZi5pc192YWxpZF9kYWc6CiAgICAgICAgICAgIHJldHVybgoKPHxmaW1fZW5kfD4="]
["97b478830c679f02952bb28bd6a9e5960a9f164a-1","97b478830c679f02952bb28bd6a9e5960a9f164a","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IEdlbmVyYXRvcgpmcm9tIHBlcnNpc3RxdWV1ZSBpbXBvcnQgUXVldWUKCmZyb20gLnF1ZXVlIGltcG9ydCBRdWV1ZSBhcyBRdWV1ZUludGVyZmFjZQoKY2xhc3MgRmlsZVF1ZXVlKFF1ZXVlSW50ZXJmYWNlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoOiBzdHIpOgogICAgICAgIHNlbGYucXVldWUgPSBRdWV1ZShwYXRoLCBhdXRvc2F2ZT1UcnVlKQogICAgCiAgICBkZWYgaXNfZW1wdHkoc2VsZikgLT4gYm9vbDoKICAgICAgICByZXR1cm4gc2VsZi5xdWV1ZS5lbXB0eSgpCgo8fGZpbV9ob2xlfD4KICAgICAgICByZXR1cm4KCiAgICBkZWYgZW5xdWV1ZShzZWxmLCB2YWx1ZTogc3RyKToKICAgICAgICBzZWxmLnF1ZXVlLnB1dCh2YWx1ZSkKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBnZXRfaXRlbXMoc2VsZikgLT4gR2VuZXJhdG9yW3N0ciwgTm9uZSwgTm9uZV06CiAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNfZW1wdHkoKToKICAgICAgICAgICAgeWllbGQgc2VsZi5xdWV1ZS5nZXQoKQoKPHxmaW1fZW5kfD4="]
["97b478830c679f02952bb28bd6a9e5960a9f164a-2","97b478830c679f02952bb28bd6a9e5960a9f164a","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IEdlbmVyYXRvcgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gcGVyc2lzdHF1ZXVlIGltcG9ydCBRdWV1ZQoKZnJvbSAucXVldWUgaW1wb3J0IFF1ZXVlIGFzIFF1ZXVlSW50ZXJmYWNlCgo8fGZpbV9lbmR8Pg=="]
["97b478830c679f02952bb28bd6a9e5960a9f164a-3","97b478830c679f02952bb28bd6a9e5960a9f164a","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IEdlbmVyYXRvcgpmcm9tIHBlcnNpc3RxdWV1ZSBpbXBvcnQgUXVldWUKCmZyb20gLnF1ZXVlIGltcG9ydCBRdWV1ZSBhcyBRdWV1ZUludGVyZmFjZQoKY2xhc3MgRmlsZVF1ZXVlKFF1ZXVlSW50ZXJmYWNlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoOiBzdHIpOgogICAgICAgIHNlbGYucXVldWUgPSBRdWV1ZShwYXRoLCBhdXRvc2F2ZT1UcnVlKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAKICAgIGRlZiBpc19lbXB0eShzZWxmKSAtPiBib29sOgogICAgICAgIHJldHVybiBzZWxmLnF1ZXVlLmVtcHR5KCkKCjx8ZmltX2VuZHw+"]
["97b478830c679f02952bb28bd6a9e5960a9f164a-4","97b478830c679f02952bb28bd6a9e5960a9f164a","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IEdlbmVyYXRvcgpmcm9tIHBlcnNpc3RxdWV1ZSBpbXBvcnQgUXVldWUKCmZyb20gLnF1ZXVlIGltcG9ydCBRdWV1ZSBhcyBRdWV1ZUludGVyZmFjZQoKY2xhc3MgRmlsZVF1ZXVlKFF1ZXVlSW50ZXJmYWNlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoOiBzdHIpOgogICAgICAgIHNlbGYucXVldWUgPSBRdWV1ZShwYXRoLCBhdXRvc2F2ZT1UcnVlKQogICAgCiAgICBkZWYgaXNfZW1wdHkoc2VsZikgLT4gYm9vbDoKICAgICAgICByZXR1cm4gc2VsZi5xdWV1ZS5lbXB0eSgpCgogICAgZGVmIGdldF9pdGVtcyhzZWxmKSAtPiBHZW5lcmF0b3Jbc3RyLCBOb25lLCBOb25lXToKICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc19lbXB0eSgpOgogICAgICAgICAgICB5aWVsZCBzZWxmLnF1ZXVlLmdldCgpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgcmV0dXJuCgogICAgZGVmIGVucXVldWUoc2VsZiwgdmFsdWU6IHN0cik6Cjx8ZmltX2VuZHw+"]
["97b478830c679f02952bb28bd6a9e5960a9f164a-5","97b478830c679f02952bb28bd6a9e5960a9f164a","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IEdlbmVyYXRvcgpmcm9tIHBlcnNpc3RxdWV1ZSBpbXBvcnQgUXVldWUKCmZyb20gLnF1ZXVlIGltcG9ydCBRdWV1ZSBhcyBRdWV1ZUludGVyZmFjZQoKY2xhc3MgRmlsZVF1ZXVlKFF1ZXVlSW50ZXJmYWNlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoOiBzdHIpOgogICAgICAgIHNlbGYucXVldWUgPSBRdWV1ZShwYXRoLCBhdXRvc2F2ZT1UcnVlKQogICAgCiAgICBkZWYgaXNfZW1wdHkoc2VsZikgLT4gYm9vbDoKICAgICAgICByZXR1cm4gc2VsZi5xdWV1ZS5lbXB0eSgpCgogICAgZGVmIGdldF9pdGVtcyhzZWxmKSAtPiBHZW5lcmF0b3Jbc3RyLCBOb25lLCBOb25lXToKICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc19lbXB0eSgpOgogICAgICAgICAgICB5aWVsZCBzZWxmLnF1ZXVlLmdldCgpCgogICAgICAgIHJldHVybgoKICAgIGRlZiBlbnF1ZXVlKHNlbGYsIHZhbHVlOiBzdHIpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5xdWV1ZS5wdXQodmFsdWUpCjx8ZmltX2VuZHw+"]
["e7c3e794ad33754e5958c08b7ba74332cd004e1a-1","e7c3e794ad33754e5958c08b7ba74332cd004e1a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBoYXNobGliCmltcG9ydCBvcwppbXBvcnQgc3VicHJvY2Vzcwpmcm9tIHBwcmludCBpbXBvcnQgcHByaW50CgppbXBvcnQgdG9yY2gKaW1wb3J0IHlhbWwKZnJvbSBhZGRpY3QgaW1wb3J0IERpY3QKZnJvbSB0b3JjaCBpbXBvcnQgbm4KCmltcG9ydCB3YW5kYgpmcm9tIGRhdGFzZXQuaGVscGVyIGltcG9ydCBnZXRfZGF0YWxvYWRlcgpmcm9tIG1vZGVsLmhlbHBlciBpbXBvcnQgZ2V0X21vZGVsX2FuZF9sb3NzCmZyb20gdXRpbC51dGlscyBpbXBvcnQgQXZlcmFnZU1ldGVyLCBNb2RlbFNhdmVyLCBUaW1lcgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpkZWYgdGVzdChsb2FkZXIsIG1vZGVsLCBjcml0ZXJpb24sIGRldmljZSwgQ09ORklHKToKICAgIHRlc3RfdGltZXIgPSBUaW1lcigpCiAgICBtZXRyaWNzID0gW0F2ZXJhZ2VNZXRlcigiWEVMb3NzIiksIEF2ZXJhZ2VNZXRlcigiQWNjdXJhY3kgKCUpIildCjx8ZmltX2VuZHw+"]
["e7c3e794ad33754e5958c08b7ba74332cd004e1a-2","e7c3e794ad33754e5958c08b7ba74332cd004e1a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBoYXNobGliCmltcG9ydCBvcwppbXBvcnQgc3VicHJvY2Vzcwpmcm9tIHBwcmludCBpbXBvcnQgcHByaW50CgppbXBvcnQgdG9yY2gKaW1wb3J0IHlhbWwKZnJvbSBhZGRpY3QgaW1wb3J0IERpY3QKZnJvbSB0b3JjaCBpbXBvcnQgbm4KCmltcG9ydCB3YW5kYgpmcm9tIGRhdGFzZXQuaGVscGVyIGltcG9ydCBnZXRfZGF0YWxvYWRlcgpmcm9tIG1vZGVsLmhlbHBlciBpbXBvcnQgZ2V0X21vZGVsX2FuZF9sb3NzCmZyb20gdXRpbC51dGlscyBpbXBvcnQgQXZlcmFnZU1ldGVyLCBNb2RlbFNhdmVyLCBUaW1lcgoKZGVmIHRlc3QobG9hZGVyLCBtb2RlbCwgY3JpdGVyaW9uLCBkZXZpY2UsIENPTkZJRyk6CiAgICB0ZXN0X3RpbWVyID0gVGltZXIoKQogICAgbWV0cmljcyA9IFtBdmVyYWdlTWV0ZXIoIlhFTG9zcyIpLCBBdmVyYWdlTWV0ZXIoIkFjY3VyYWN5ICglKSIpXQogICAgZ2xvYmFsX21ldHJpY3MgPSBbQXZlcmFnZU1ldGVyKCJYRUxvc3MiKSwgQXZlcmFnZU1ldGVyKCJBY2N1cmFjeSAoJSkiKV0KICAgIG1vZGVsLmV2YWwoKQogICAgZm9yIGl0LCBkYXRhIGluIGVudW1lcmF0ZShsb2FkZXIpOgogICAgICAgIGNsaXAgPSBkYXRhWyJjbGlwIl0udG8oZGV2aWNlKQogICAgICAgIGxhYmVsID0gZGF0YVsibGFiZWwiXS50byhkZXZpY2UpCiAgICAgICAgaWYgaXQgPT0gMSBhbmQgdG9yY2guY3VkYS5pc19hdmFpbGFibGUoKToKICAgICAgICAgICAgc3VicHJvY2Vzcy5ydW4oWyJudmlkaWEtc21pIl0pCgogICAgICAgIHdpdGggdG9yY2gubm9fZ3JhZCgpOgogICAgICAgICAgICBvdXQgPSBtb2RlbChjbGlwKQogICAgICAgICAgICBsb3NzLCBsb3NzZGljdCA9IGNyaXRlcmlvbihvdXQsIGxhYmVsKQoKICAgICAgICBmb3IgbWV0cmljIGluIG1ldHJpY3M6CiAgICAgICAgICAgIG1ldHJpYy51cGRhdGUobG9zc2RpY3RbbWV0cmljLm5hbWVdKQogICAgICAgIGZvciBtZXRyaWMgaW4gZ2xvYmFsX21ldHJpY3M6CiAgICAgICAgICAgIG1ldHJpYy51cGRhdGUobG9zc2RpY3RbbWV0cmljLm5hbWVdKQogICAgICAgIGlmIGl0ICUgMTAgPT0gOToKICAgICAgICAgICAgbWV0cmljc3RyID0gIiB8ICIuam9pbihbZiJ0ZXN0IHttZXRyaWN9IiBmb3IgbWV0cmljIGluIG1ldHJpY3NdKQogICAgICAgICAgICBwcmludCgKICAgICAgICAgICAgICAgIGYidGVzdCB8IHt0ZXN0X3RpbWVyfSB8IGl0ZXIge2l0KzE6MDZkfS97bGVuKGxvYWRlcik6MDZkfSB8ICIKICAgICAgICAgICAgICAgIGYie21ldHJpY3N0cn0iLAogICAgICAgICAgICAgICAgZmx1c2g9VHJ1ZSwKICAgICAgICAgICAgKQogICAgICAgICAgICBmb3IgbWV0cmljIGluIG1ldHJpY3M6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIG1ldHJpYy5yZXNldCgpCjx8ZmltX2VuZHw+"]
["e7c3e794ad33754e5958c08b7ba74332cd004e1a-3","e7c3e794ad33754e5958c08b7ba74332cd004e1a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBoYXNobGliCmltcG9ydCBvcwppbXBvcnQgc3VicHJvY2Vzcwpmcm9tIHBwcmludCBpbXBvcnQgcHByaW50CgppbXBvcnQgdG9yY2gKaW1wb3J0IHlhbWwKZnJvbSBhZGRpY3QgaW1wb3J0IERpY3QKZnJvbSB0b3JjaCBpbXBvcnQgbm4KCmltcG9ydCB3YW5kYgpmcm9tIGRhdGFzZXQuaGVscGVyIGltcG9ydCBnZXRfZGF0YWxvYWRlcgpmcm9tIG1vZGVsLmhlbHBlciBpbXBvcnQgZ2V0X21vZGVsX2FuZF9sb3NzCmZyb20gdXRpbC51dGlscyBpbXBvcnQgQXZlcmFnZU1ldGVyLCBNb2RlbFNhdmVyLCBUaW1lcgoKZGVmIHRlc3QobG9hZGVyLCBtb2RlbCwgY3JpdGVyaW9uLCBkZXZpY2UsIENPTkZJRyk6CiAgICB0ZXN0X3RpbWVyID0gVGltZXIoKQogICAgbWV0cmljcyA9IFtBdmVyYWdlTWV0ZXIoIlhFTG9zcyIpLCBBdmVyYWdlTWV0ZXIoIkFjY3VyYWN5ICglKSIpXQogICAgZ2xvYmFsX21ldHJpY3MgPSBbQXZlcmFnZU1ldGVyKCJYRUxvc3MiKSwgQXZlcmFnZU1ldGVyKCJBY2N1cmFjeSAoJSkiKV0KICAgIG1vZGVsLmV2YWwoKQogICAgZm9yIGl0LCBkYXRhIGluIGVudW1lcmF0ZShsb2FkZXIpOgogICAgICAgIGNsaXAgPSBkYXRhWyJjbGlwIl0udG8oZGV2aWNlKQogICAgICAgIGxhYmVsID0gZGF0YVsibGFiZWwiXS50byhkZXZpY2UpCiAgICAgICAgaWYgaXQgPT0gMSBhbmQgdG9yY2guY3VkYS5pc19hdmFpbGFibGUoKToKICAgICAgICAgICAgc3VicHJvY2Vzcy5ydW4oWyJudmlkaWEtc21pIl0pCgogICAgICAgIHdpdGggdG9yY2gubm9fZ3JhZCgpOgogICAgICAgICAgICBvdXQgPSBtb2RlbChjbGlwKQogICAgICAgICAgICBsb3NzLCBsb3NzZGljdCA9IGNyaXRlcmlvbihvdXQsIGxhYmVsKQoKICAgICAgICBmb3IgbWV0cmljIGluIG1ldHJpY3M6CiAgICAgICAgICAgIG1ldHJpYy51cGRhdGUobG9zc2RpY3RbbWV0cmljLm5hbWVdKQogICAgICAgIGZvciBtZXRyaWMgaW4gZ2xvYmFsX21ldHJpY3M6CiAgICAgICAgICAgIG1ldHJpYy51cGRhdGUobG9zc2RpY3RbbWV0cmljLm5hbWVdKQogICAgICAgIGlmIGl0ICUgMTAgPT0gOToKICAgICAgICAgICAgbWV0cmljc3RyID0gIiB8ICIuam9pbihbZiJ0ZXN0IHttZXRyaWN9IiBmb3IgbWV0cmljIGluIG1ldHJpY3NdKQogICAgICAgICAgICBwcmludCgKICAgICAgICAgICAgICAgIGYidGVzdCB8IHt0ZXN0X3RpbWVyfSB8IGl0ZXIge2l0KzE6MDZkfS97bGVuKGxvYWRlcik6MDZkfSB8ICIKICAgICAgICAgICAgICAgIGYie21ldHJpY3N0cn0iLAogICAgICAgICAgICAgICAgZmx1c2g9VHJ1ZSwKICAgICAgICAgICAgKQogICAgICAgICAgICBmb3IgbWV0cmljIGluIG1ldHJpY3M6CiAgICAgICAgICAgICAgICBtZXRyaWMucmVzZXQoKQogICAgbWV0cmljID0gZ2xvYmFsX21ldHJpY3NbLTFdCiAgICBpZiBDT05GSUcudXNlX3dhbmRiOgogICAgICAgIHdhbmRiLmxvZyh7ZiJ0ZXN0IHttZXRyaWMubmFtZX0iOiBtZXRyaWMuYXZnfSwgY29tbWl0PUZhbHNlKQogICAgcmV0dXJuIG1ldHJpYy5hdmcKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgZ2xvYmFsX3RpbWVyID0gVGltZXIoKQoKICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tY29uZmlnIiwgdHlwZT1zdHIsIGRlZmF1bHQ9ImNmZy9kZWZhdWx0LnltbCIsIGhlbHA9InBhdGggdG8gY29uZmlndXJhdGlvbiB5bWwgZmlsZSIsCiAgICApCiAgICBvcHQgPSBwYXJzZXIucGFyc2VfYXJncygpCiAgICBwcmludChmImxvYWRpbmcgY29uZmlndXJhdGlvbiBmcm9tIHtvcHQuY29uZmlnfSIpCjx8ZmltX2hvbGV8PgogICAgQ09ORklHLm5ld19jb25maWdfbmFtZSA9IGYiZnRfe0NPTkZJRy5kYXRhc2V0fV97Q09ORklHLmNvbmZpZ19uYW1lfSIKCiAgICBpZGhhc2ggPSBoYXNobGliLnNoYTI1NihDT05GSUcubmV3X2NvbmZpZ19uYW1lLmVuY29kZSgpKS5oZXhkaWdlc3QoKQogICAgaWYgQ09ORklHLnVzZV93YW5kYjoKICAgICAgICB3YW5kYi5pbml0KAogICAgICAgICAgICBuYW1lPUNPTkZJRy5uZXdfY29uZmlnX25hbWUsCiAgICAgICAgICAgIGlkPWlkaGFzaCwKICAgICAgICAgICAgcmVzdW1lPWlkaGFzaCwKICAgICAgICAgICAgY29uZmlnPUNPTkZJRywKICAgICAgICAgICAgcHJvamVjdD1DT05GSUcucHJvamVjdF9uYW1lLAogICAgICAgICkKCiAgICAiIiIgIE1vZGVsIENvbXBvbmVudHMgICIiIgogICAgbW9kZWwsIGNyaXRlcmlvbiA9IGdldF9tb2RlbF9hbmRfbG9zcyhDT05GSUcsIGZpbmV0dW5lPVRydWUpCgogICAgIiIiICBMb2FkIGZyb20gQ2hlY2twb2ludCAgIiIiCiAgICBzYXZlciA9IE1vZGVsU2F2ZXIob3MucGF0aC5qb2luKENPTkZJRy5vdXRwYXRoLCBDT05GSUcubmV3X2NvbmZpZ19uYW1lKSkKICAgIHNhdmVyLmxvYWRfY2twdChtb2RlbCwgTm9uZSwgTm9uZSkKCiAgICAiIiIgIERldmljZXMgICIiIgogICAgZ3B1X2lkcyA9IGxpc3QobWFwKHN0ciwgQ09ORklHLmdwdV9pZHMpKQogICAgb3MuZW52aXJvblsiQ1VEQV9WSVNJQkxFX0RFVklDRVMiXSA9ICIsIi5qb2luKGdwdV9pZHMpCiAgICBpZiB0b3JjaC5jdWRhLmlzX2F2YWlsYWJsZSgpOgogICAgICAgIGRldmljZSA9IHRvcmNoLmRldmljZSgiY3VkYSIpCiAgICAgICAgcHJpbnQoInVzaW5nIEdQVSBudW1iZXJzIHt9Ii5mb3JtYXQoQ09ORklHLmdwdV9pZHMpKQogICAgZWxzZToKICAgICAgICBkZXZpY2UgPSB0b3JjaC5kZXZpY2UoImNwdSIpCiAgICAgICAgcHJpbnQoInVzaW5nIENQVSIpCiAgICBtb2RlbCA9IG1vZGVsLnRvKGRldmljZSkKICAgIGlmIHRvcmNoLmN1ZGEuZGV2aWNlX2NvdW50KCkgPiAxOgogICAgICAgIG1vZGVsID0gbm4uRGF0YVBhcmFsbGVsKG1vZGVsKQogICAgICAgIHN1YnByb2Nlc3MucnVuKFsibnZpZGlhLXNtaSJdKQoKICAgICIiIiAgRGF0YXNldCAgIiIiCiAgICBfLCB0ZXN0X2RsID0gZ2V0X2RhdGFsb2FkZXIoQ09ORklHKQoKICAgICIiIiAgVHJhaW5pbmcgTG9vcCAgIiIiCiAgICBwcmludChmImdsb2JhbCB0aW1lIHtnbG9iYWxfdGltZXJ9IHwgc3RhcnQgdGVzdCIpCiAgICB0ZXN0X2FjYyA9IHRlc3QodGVzdF9kbCwgbW9kZWwsIGNyaXRlcmlvbiwgZGV2aWNlLCBDT05GSUcpCiAgICBwcmludChmImdsb2JhbCB0aW1lIHtnbG9iYWxfdGltZXJ9IHwgdGVzdCBhY2N1cmFjeToge3Rlc3RfYWNjOi41Zn0lIikKPHxmaW1fc3VmZml4fD4KICAgIENPTkZJRyA9IERpY3QoeWFtbC5zYWZlX2xvYWQob3BlbihvcHQuY29uZmlnKSkpCiAgICBwcmludCgiQ09ORklHVVJBVElPTlM6IikKICAgIHBwcmludChDT05GSUcpCgo8fGZpbV9lbmR8Pg=="]
["e7c3e794ad33754e5958c08b7ba74332cd004e1a-4","e7c3e794ad33754e5958c08b7ba74332cd004e1a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBoYXNobGliCmltcG9ydCBvcwppbXBvcnQgc3VicHJvY2Vzcwpmcm9tIHBwcmludCBpbXBvcnQgcHByaW50CgppbXBvcnQgdG9yY2gKaW1wb3J0IHlhbWwKZnJvbSBhZGRpY3QgaW1wb3J0IERpY3QKZnJvbSB0b3JjaCBpbXBvcnQgbm4KCmltcG9ydCB3YW5kYgpmcm9tIGRhdGFzZXQuaGVscGVyIGltcG9ydCBnZXRfZGF0YWxvYWRlcgpmcm9tIG1vZGVsLmhlbHBlciBpbXBvcnQgZ2V0X21vZGVsX2FuZF9sb3NzCmZyb20gdXRpbC51dGlscyBpbXBvcnQgQXZlcmFnZU1ldGVyLCBNb2RlbFNhdmVyLCBUaW1lcgoKZGVmIHRlc3QobG9hZGVyLCBtb2RlbCwgY3JpdGVyaW9uLCBkZXZpY2UsIENPTkZJRyk6CiAgICB0ZXN0X3RpbWVyID0gVGltZXIoKQogICAgbWV0cmljcyA9IFtBdmVyYWdlTWV0ZXIoIlhFTG9zcyIpLCBBdmVyYWdlTWV0ZXIoIkFjY3VyYWN5ICglKSIpXQogICAgZ2xvYmFsX21ldHJpY3MgPSBbQXZlcmFnZU1ldGVyKCJYRUxvc3MiKSwgQXZlcmFnZU1ldGVyKCJBY2N1cmFjeSAoJSkiKV0KICAgIG1vZGVsLmV2YWwoKQogICAgZm9yIGl0LCBkYXRhIGluIGVudW1lcmF0ZShsb2FkZXIpOgogICAgICAgIGNsaXAgPSBkYXRhWyJjbGlwIl0udG8oZGV2aWNlKQogICAgICAgIGxhYmVsID0gZGF0YVsibGFiZWwiXS50byhkZXZpY2UpCiAgICAgICAgaWYgaXQgPT0gMSBhbmQgdG9yY2guY3VkYS5pc19hdmFpbGFibGUoKToKICAgICAgICAgICAgc3VicHJvY2Vzcy5ydW4oWyJudmlkaWEtc21pIl0pCgogICAgICAgIHdpdGggdG9yY2gubm9fZ3JhZCgpOgogICAgICAgICAgICBvdXQgPSBtb2RlbChjbGlwKQogICAgICAgICAgICBsb3NzLCBsb3NzZGljdCA9IGNyaXRlcmlvbihvdXQsIGxhYmVsKQoKICAgICAgICBmb3IgbWV0cmljIGluIG1ldHJpY3M6CiAgICAgICAgICAgIG1ldHJpYy51cGRhdGUobG9zc2RpY3RbbWV0cmljLm5hbWVdKQogICAgICAgIGZvciBtZXRyaWMgaW4gZ2xvYmFsX21ldHJpY3M6CiAgICAgICAgICAgIG1ldHJpYy51cGRhdGUobG9zc2RpY3RbbWV0cmljLm5hbWVdKQogICAgICAgIGlmIGl0ICUgMTAgPT0gOToKICAgICAgICAgICAgbWV0cmljc3RyID0gIiB8ICIuam9pbihbZiJ0ZXN0IHttZXRyaWN9IiBmb3IgbWV0cmljIGluIG1ldHJpY3NdKQogICAgICAgICAgICBwcmludCgKICAgICAgICAgICAgICAgIGYidGVzdCB8IHt0ZXN0X3RpbWVyfSB8IGl0ZXIge2l0KzE6MDZkfS97bGVuKGxvYWRlcik6MDZkfSB8ICIKICAgICAgICAgICAgICAgIGYie21ldHJpY3N0cn0iLAogICAgICAgICAgICAgICAgZmx1c2g9VHJ1ZSwKICAgICAgICAgICAgKQogICAgICAgICAgICBmb3IgbWV0cmljIGluIG1ldHJpY3M6CiAgICAgICAgICAgICAgICBtZXRyaWMucmVzZXQoKQogICAgbWV0cmljID0gZ2xvYmFsX21ldHJpY3NbLTFdCiAgICBpZiBDT05GSUcudXNlX3dhbmRiOgogICAgICAgIHdhbmRiLmxvZyh7ZiJ0ZXN0IHttZXRyaWMubmFtZX0iOiBtZXRyaWMuYXZnfSwgY29tbWl0PUZhbHNlKQogICAgcmV0dXJuIG1ldHJpYy5hdmcKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgZ2xvYmFsX3RpbWVyID0gVGltZXIoKQoKICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tY29uZmlnIiwgdHlwZT1zdHIsIGRlZmF1bHQ9ImNmZy9kZWZhdWx0LnltbCIsIGhlbHA9InBhdGggdG8gY29uZmlndXJhdGlvbiB5bWwgZmlsZSIsCiAgICApCiAgICBvcHQgPSBwYXJzZXIucGFyc2VfYXJncygpCiAgICBwcmludChmImxvYWRpbmcgY29uZmlndXJhdGlvbiBmcm9tIHtvcHQuY29uZmlnfSIpCiAgICBDT05GSUcgPSBEaWN0KHlhbWwuc2FmZV9sb2FkKG9wZW4ob3B0LmNvbmZpZykpKQo8fGZpbV9ob2xlfD4KCiAgICBpZGhhc2ggPSBoYXNobGliLnNoYTI1NihDT05GSUcubmV3X2NvbmZpZ19uYW1lLmVuY29kZSgpKS5oZXhkaWdlc3QoKQogICAgaWYgQ09ORklHLnVzZV93YW5kYjoKICAgICAgICB3YW5kYi5pbml0KAogICAgICAgICAgICBuYW1lPUNPTkZJRy5uZXdfY29uZmlnX25hbWUsCiAgICAgICAgICAgIGlkPWlkaGFzaCwKICAgICAgICAgICAgcmVzdW1lPWlkaGFzaCwKICAgICAgICAgICAgY29uZmlnPUNPTkZJRywKICAgICAgICAgICAgcHJvamVjdD1DT05GSUcucHJvamVjdF9uYW1lLAogICAgICAgICkKCiAgICAiIiIgIE1vZGVsIENvbXBvbmVudHMgICIiIgogICAgbW9kZWwsIGNyaXRlcmlvbiA9IGdldF9tb2RlbF9hbmRfbG9zcyhDT05GSUcsIGZpbmV0dW5lPVRydWUpCgogICAgIiIiICBMb2FkIGZyb20gQ2hlY2twb2ludCAgIiIiCiAgICBzYXZlciA9IE1vZGVsU2F2ZXIob3MucGF0aC5qb2luKENPTkZJRy5vdXRwYXRoLCBDT05GSUcubmV3X2NvbmZpZ19uYW1lKSkKICAgIHNhdmVyLmxvYWRfY2twdChtb2RlbCwgTm9uZSwgTm9uZSkKCiAgICAiIiIgIERldmljZXMgICIiIgogICAgZ3B1X2lkcyA9IGxpc3QobWFwKHN0ciwgQ09ORklHLmdwdV9pZHMpKQogICAgb3MuZW52aXJvblsiQ1VEQV9WSVNJQkxFX0RFVklDRVMiXSA9ICIsIi5qb2luKGdwdV9pZHMpCiAgICBpZiB0b3JjaC5jdWRhLmlzX2F2YWlsYWJsZSgpOgogICAgICAgIGRldmljZSA9IHRvcmNoLmRldmljZSgiY3VkYSIpCiAgICAgICAgcHJpbnQoInVzaW5nIEdQVSBudW1iZXJzIHt9Ii5mb3JtYXQoQ09ORklHLmdwdV9pZHMpKQogICAgZWxzZToKICAgICAgICBkZXZpY2UgPSB0b3JjaC5kZXZpY2UoImNwdSIpCiAgICAgICAgcHJpbnQoInVzaW5nIENQVSIpCiAgICBtb2RlbCA9IG1vZGVsLnRvKGRldmljZSkKICAgIGlmIHRvcmNoLmN1ZGEuZGV2aWNlX2NvdW50KCkgPiAxOgogICAgICAgIG1vZGVsID0gbm4uRGF0YVBhcmFsbGVsKG1vZGVsKQogICAgICAgIHN1YnByb2Nlc3MucnVuKFsibnZpZGlhLXNtaSJdKQoKICAgICIiIiAgRGF0YXNldCAgIiIiCiAgICBfLCB0ZXN0X2RsID0gZ2V0X2RhdGFsb2FkZXIoQ09ORklHKQoKICAgICIiIiAgVHJhaW5pbmcgTG9vcCAgIiIiCiAgICBwcmludChmImdsb2JhbCB0aW1lIHtnbG9iYWxfdGltZXJ9IHwgc3RhcnQgdGVzdCIpCiAgICB0ZXN0X2FjYyA9IHRlc3QodGVzdF9kbCwgbW9kZWwsIGNyaXRlcmlvbiwgZGV2aWNlLCBDT05GSUcpCiAgICBwcmludChmImdsb2JhbCB0aW1lIHtnbG9iYWxfdGltZXJ9IHwgdGVzdCBhY2N1cmFjeToge3Rlc3RfYWNjOi41Zn0lIikKPHxmaW1fc3VmZml4fD4KICAgIHByaW50KCJDT05GSUdVUkFUSU9OUzoiKQogICAgcHByaW50KENPTkZJRykKCiAgICBDT05GSUcubmV3X2NvbmZpZ19uYW1lID0gZiJmdF97Q09ORklHLmRhdGFzZXR9X3tDT05GSUcuY29uZmlnX25hbWV9Igo8fGZpbV9lbmR8Pg=="]
["e7c3e794ad33754e5958c08b7ba74332cd004e1a-5","e7c3e794ad33754e5958c08b7ba74332cd004e1a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBoYXNobGliCmltcG9ydCBvcwppbXBvcnQgc3VicHJvY2Vzcwpmcm9tIHBwcmludCBpbXBvcnQgcHByaW50CgppbXBvcnQgdG9yY2gKaW1wb3J0IHlhbWwKZnJvbSBhZGRpY3QgaW1wb3J0IERpY3QKZnJvbSB0b3JjaCBpbXBvcnQgbm4KCmltcG9ydCB3YW5kYgpmcm9tIGRhdGFzZXQuaGVscGVyIGltcG9ydCBnZXRfZGF0YWxvYWRlcgpmcm9tIG1vZGVsLmhlbHBlciBpbXBvcnQgZ2V0X21vZGVsX2FuZF9sb3NzCmZyb20gdXRpbC51dGlscyBpbXBvcnQgQXZlcmFnZU1ldGVyLCBNb2RlbFNhdmVyLCBUaW1lcgoKZGVmIHRlc3QobG9hZGVyLCBtb2RlbCwgY3JpdGVyaW9uLCBkZXZpY2UsIENPTkZJRyk6CiAgICB0ZXN0X3RpbWVyID0gVGltZXIoKQogICAgbWV0cmljcyA9IFtBdmVyYWdlTWV0ZXIoIlhFTG9zcyIpLCBBdmVyYWdlTWV0ZXIoIkFjY3VyYWN5ICglKSIpXQogICAgZ2xvYmFsX21ldHJpY3MgPSBbQXZlcmFnZU1ldGVyKCJYRUxvc3MiKSwgQXZlcmFnZU1ldGVyKCJBY2N1cmFjeSAoJSkiKV0KICAgIG1vZGVsLmV2YWwoKQogICAgZm9yIGl0LCBkYXRhIGluIGVudW1lcmF0ZShsb2FkZXIpOgogICAgICAgIGNsaXAgPSBkYXRhWyJjbGlwIl0udG8oZGV2aWNlKQogICAgICAgIGxhYmVsID0gZGF0YVsibGFiZWwiXS50byhkZXZpY2UpCiAgICAgICAgaWYgaXQgPT0gMSBhbmQgdG9yY2guY3VkYS5pc19hdmFpbGFibGUoKToKICAgICAgICAgICAgc3VicHJvY2Vzcy5ydW4oWyJudmlkaWEtc21pIl0pCgogICAgICAgIHdpdGggdG9yY2gubm9fZ3JhZCgpOgogICAgICAgICAgICBvdXQgPSBtb2RlbChjbGlwKQogICAgICAgICAgICBsb3NzLCBsb3NzZGljdCA9IGNyaXRlcmlvbihvdXQsIGxhYmVsKQoKICAgICAgICBmb3IgbWV0cmljIGluIG1ldHJpY3M6CiAgICAgICAgICAgIG1ldHJpYy51cGRhdGUobG9zc2RpY3RbbWV0cmljLm5hbWVdKQogICAgICAgIGZvciBtZXRyaWMgaW4gZ2xvYmFsX21ldHJpY3M6CiAgICAgICAgICAgIG1ldHJpYy51cGRhdGUobG9zc2RpY3RbbWV0cmljLm5hbWVdKQogICAgICAgIGlmIGl0ICUgMTAgPT0gOToKICAgICAgICAgICAgbWV0cmljc3RyID0gIiB8ICIuam9pbihbZiJ0ZXN0IHttZXRyaWN9IiBmb3IgbWV0cmljIGluIG1ldHJpY3NdKQogICAgICAgICAgICBwcmludCgKICAgICAgICAgICAgICAgIGYidGVzdCB8IHt0ZXN0X3RpbWVyfSB8IGl0ZXIge2l0KzE6MDZkfS97bGVuKGxvYWRlcik6MDZkfSB8ICIKICAgICAgICAgICAgICAgIGYie21ldHJpY3N0cn0iLAogICAgICAgICAgICAgICAgZmx1c2g9VHJ1ZSwKICAgICAgICAgICAgKQogICAgICAgICAgICBmb3IgbWV0cmljIGluIG1ldHJpY3M6CiAgICAgICAgICAgICAgICBtZXRyaWMucmVzZXQoKQogICAgbWV0cmljID0gZ2xvYmFsX21ldHJpY3NbLTFdCiAgICBpZiBDT05GSUcudXNlX3dhbmRiOgogICAgICAgIHdhbmRiLmxvZyh7ZiJ0ZXN0IHttZXRyaWMubmFtZX0iOiBtZXRyaWMuYXZnfSwgY29tbWl0PUZhbHNlKQogICAgcmV0dXJuIG1ldHJpYy5hdmcKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgZ2xvYmFsX3RpbWVyID0gVGltZXIoKQoKICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tY29uZmlnIiwgdHlwZT1zdHIsIGRlZmF1bHQ9ImNmZy9kZWZhdWx0LnltbCIsIGhlbHA9InBhdGggdG8gY29uZmlndXJhdGlvbiB5bWwgZmlsZSIsCiAgICApCiAgICBvcHQgPSBwYXJzZXIucGFyc2VfYXJncygpCiAgICBwcmludChmImxvYWRpbmcgY29uZmlndXJhdGlvbiBmcm9tIHtvcHQuY29uZmlnfSIpCiAgICBDT05GSUcgPSBEaWN0KHlhbWwuc2FmZV9sb2FkKG9wZW4ob3B0LmNvbmZpZykpKQogICAgcHJpbnQoIkNPTkZJR1VSQVRJT05TOiIpCiAgICBwcHJpbnQoQ09ORklHKQoKICAgIENPTkZJRy5uZXdfY29uZmlnX25hbWUgPSBmImZ0X3tDT05GSUcuZGF0YXNldH1fe0NPTkZJRy5jb25maWdfbmFtZX0iCgogICAgaWRoYXNoID0gaGFzaGxpYi5zaGEyNTYoQ09ORklHLm5ld19jb25maWdfbmFtZS5lbmNvZGUoKSkuaGV4ZGlnZXN0KCkKICAgIGlmIENPTkZJRy51c2Vfd2FuZGI6CiAgICAgICAgd2FuZGIuaW5pdCgKICAgICAgICAgICAgbmFtZT1DT05GSUcubmV3X2NvbmZpZ19uYW1lLAo8fGZpbV9ob2xlfD4KICAgICAgICApCgogICAgIiIiICBNb2RlbCBDb21wb25lbnRzICAiIiIKICAgIG1vZGVsLCBjcml0ZXJpb24gPSBnZXRfbW9kZWxfYW5kX2xvc3MoQ09ORklHLCBmaW5ldHVuZT1UcnVlKQoKICAgICIiIiAgTG9hZCBmcm9tIENoZWNrcG9pbnQgICIiIgogICAgc2F2ZXIgPSBNb2RlbFNhdmVyKG9zLnBhdGguam9pbihDT05GSUcub3V0cGF0aCwgQ09ORklHLm5ld19jb25maWdfbmFtZSkpCiAgICBzYXZlci5sb2FkX2NrcHQobW9kZWwsIE5vbmUsIE5vbmUpCgogICAgIiIiICBEZXZpY2VzICAiIiIKICAgIGdwdV9pZHMgPSBsaXN0KG1hcChzdHIsIENPTkZJRy5ncHVfaWRzKSkKICAgIG9zLmVudmlyb25bIkNVREFfVklTSUJMRV9ERVZJQ0VTIl0gPSAiLCIuam9pbihncHVfaWRzKQogICAgaWYgdG9yY2guY3VkYS5pc19hdmFpbGFibGUoKToKICAgICAgICBkZXZpY2UgPSB0b3JjaC5kZXZpY2UoImN1ZGEiKQogICAgICAgIHByaW50KCJ1c2luZyBHUFUgbnVtYmVycyB7fSIuZm9ybWF0KENPTkZJRy5ncHVfaWRzKSkKICAgIGVsc2U6CiAgICAgICAgZGV2aWNlID0gdG9yY2guZGV2aWNlKCJjcHUiKQogICAgICAgIHByaW50KCJ1c2luZyBDUFUiKQogICAgbW9kZWwgPSBtb2RlbC50byhkZXZpY2UpCiAgICBpZiB0b3JjaC5jdWRhLmRldmljZV9jb3VudCgpID4gMToKICAgICAgICBtb2RlbCA9IG5uLkRhdGFQYXJhbGxlbChtb2RlbCkKICAgICAgICBzdWJwcm9jZXNzLnJ1bihbIm52aWRpYS1zbWkiXSkKCiAgICAiIiIgIERhdGFzZXQgICIiIgogICAgXywgdGVzdF9kbCA9IGdldF9kYXRhbG9hZGVyKENPTkZJRykKCiAgICAiIiIgIFRyYWluaW5nIExvb3AgICIiIgogICAgcHJpbnQoZiJnbG9iYWwgdGltZSB7Z2xvYmFsX3RpbWVyfSB8IHN0YXJ0IHRlc3QiKQogICAgdGVzdF9hY2MgPSB0ZXN0KHRlc3RfZGwsIG1vZGVsLCBjcml0ZXJpb24sIGRldmljZSwgQ09ORklHKQogICAgcHJpbnQoZiJnbG9iYWwgdGltZSB7Z2xvYmFsX3RpbWVyfSB8IHRlc3QgYWNjdXJhY3k6IHt0ZXN0X2FjYzouNWZ9JSIpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGlkPWlkaGFzaCwKICAgICAgICAgICAgcmVzdW1lPWlkaGFzaCwKICAgICAgICAgICAgY29uZmlnPUNPTkZJRywKICAgICAgICAgICAgcHJvamVjdD1DT05GSUcucHJvamVjdF9uYW1lLAo8fGZpbV9lbmR8Pg=="]
["daa231eaa938e61e61429cabf2d973aae687a2a7-1","daa231eaa938e61e61429cabf2d973aae687a2a7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZApmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlLCB0aW1lZGVsdGEsIGRhdGV0aW1lCmZyb20gd3JpdGVUb0RCIGltcG9ydCBnZXRBbGxNYXhDb3VudCwgZ2V0QWxsSW5PdXRDb3VudAoKZGF0ZVRvU3RhcnQgPSBbMjAyMCw5LDE4XQpob3VycyA9IGxpc3QocmFuZ2UoNiwyNCkpCgpkZWYgcmVhZGFibGVUaW1lKCk6CiAgICBob3VyTGFiZWxzID0gW10KICAgIGZvciBpbmRleCwgaG91ciBpbiBlbnVtZXJhdGUoaG91cnMpOgogICAgICAgIGlmIGludChob3VyKSA8IDEyOgogICAgICAgICAgICB4ID0gc3RyKGhvdXIpICsnIEFNJwogICAgICAgIGlmIGludChob3VyKSA+IDEyOgogICAgICAgICAgICB4ID0gc3RyKGhvdXItMTIpICsnIFBNJwogICAgICAgIGlmIGludChob3VyKSA9PSAxMjoKICAgICAgICAgICAgeCA9IHN0cihob3VyKSArJyBQTScKICAgICAgICAKICAgICAgICBob3VyTGFiZWxzLmFwcGVuZCh4KQogICAgcmV0dXJuIGhvdXJMYWJlbHMKCmRlZiBkYXRlRnJvbVN0YXJ0KCk6CiAgICBzdGFydERhdGUgPSBkYXRlKGRhdGVUb1N0YXJ0WzBdLGRhdGVUb1N0YXJ0WzFdLGRhdGVUb1N0YXJ0WzJdKQogICAgZGF0ZXMgPSBbXQogICAgd2hpbGUgVHJ1ZToKICAgICAgICBkYXRlcy5hcHBlbmQoc3RhcnREYXRlKQogICAgICAgIHN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZSArIHRpbWVkZWx0YShkYXlzPTEpIAogICAgICAgIGlmIHN0YXJ0RGF0ZSA9PSBkYXRlLnRvZGF5KCk6CiAgICAgICAgICAgIGRhdGVzLmFwcGVuZChzdGFydERhdGUpCiAgICAgICAgICAgIGJyZWFrCiAgICByZXR1cm4gZGF0ZXMKCmRlZiBkYXRlRGF5cygpOgogICAgZGF0ZXMgPSBkYXRlRnJvbVN0YXJ0KCkKICAgIGdldERheSA9IFtdCjx8ZmltX2hvbGV8PgoKZGVmIGhlYXRtYXBEYXRhKGxpYik6CiAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlCiAgICBtYXhJbnNpZGVEYXRhID0gcGQuRGF0YUZyYW1lKCkKCiAgICByb3dzX2xpc3QgPSBbXQogICAgZm9yIGVhY2ggaW4gZ2V0QWxsTWF4Q291bnQoKToKICAgICAgICByb3dzX2xpc3QuYXBwZW5kKFtlYWNoLmxvY2F0aW9uLCBlYWNoLmRhdGUsIGVhY2guaG91ciwgZWFjaC5tYXhJbnNpZGUsIGVhY2gubWluSW5zaWRlXSkKCiAgICBtYXhJbnNpZGVEYXRhID0gcGQuRGF0YUZyYW1lKHJvd3NfbGlzdCkKICAgIG1heEluc2lkZURhdGEuY29sdW1ucyA9IFsnTG9jYXRpb24nLCdkYXRlJywnaG91cicsJ21heCcsJ21pbiddCgogICAgaWYgbGliID09ICJMS1MiOgogICAgICAgIGRhdGEgPSBtYXhJbnNpZGVEYXRhWyhtYXhJbnNpZGVEYXRhWydMb2NhdGlvbiddID09ICdMS1MnKV0KICAgIGlmIGxpYiA9PSAiS0dDIjoKICAgICAgICBkYXRhID0gbWF4SW5zaWRlRGF0YVsobWF4SW5zaWRlRGF0YVsnTG9jYXRpb24nXSA9PSAnS0dDJyldICAKCiAgICBkYXRlcyA9IGRhdGVGcm9tU3RhcnQoKQoKICAgIGhvdXJseU1heCA9IFtdCiAgICBmb3IgaG91ciBpbiBob3VyczoKICAgICAgICBkYXlIb3VycyA9IFtdCiAgICAgICAgZm9yIGRhdGUgaW4gZGF0ZXM6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIG1heCA9IGludChkYXRhWyhkYXRhWydkYXRlJ10gPT0gZGF0ZSkgJiAoZGF0YVsnaG91ciddID09IGhvdXIpXVsnbWF4J10pCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIGRheUhvdXJzLmFwcGVuZCgwKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgZGF5SG91cnMuYXBwZW5kKG1heCkgCiAgICAgICAgaG91cmx5TWF4LmFwcGVuZChkYXlIb3VycykgICAgICAgIAoKICAgCiAgICByZXR1cm4gaG91cmx5TWF4LGRhdGVEYXlzKCksIHJlYWRhYmxlVGltZSgpCgpkZWYgdGFibGVEYXRhKGxpYik6CiAgICByb3dzX2xpc3QgPSBbXQogICAgZm9yIGVhY2ggaW4gZ2V0QWxsTWF4Q291bnQoKToKICAgICAgICByb3dzX2xpc3QuYXBwZW5kKFtlYWNoLmxvY2F0aW9uLCBlYWNoLmRhdGUsIGVhY2guaG91ciwgZWFjaC5tYXhJbnNpZGUsIGVhY2gubWluSW5zaWRlXSkKCiAgICBtYXhJbnNpZGVEYXRhID0gcGQuRGF0YUZyYW1lKHJvd3NfbGlzdCkKICAgIG1heEluc2lkZURhdGEuY29sdW1ucyA9IFsnTG9jYXRpb24nLCdEYXRlJywnSG91cicsJ01heCcsJ01pbiddCgogICAgcm93c19saXN0ID0gW10KICAgIGZvciBlYWNoIGluIGdldEFsbEluT3V0Q291bnQoKToKICAgICAgICByb3dzX2xpc3QuYXBwZW5kKFtlYWNoLmRhdGUsIGVhY2guaG91ciwgZWFjaC5sb2NhdGlvbiwgZWFjaC5pbkNvdW50LCBlYWNoLm91dENvdW50XSkKCgogICAgaW5vdXREYXRhID0gcGQuRGF0YUZyYW1lKHJvd3NfbGlzdCkKICAgIGlub3V0RGF0YS5jb2x1bW5zID0gWydEYXRlJywnSG91cicsJ0xvY2F0aW9uJywnSW4nLCdPdXQnXQoKICAgIHJlc3VsdCA9IHBkLm1lcmdlKG1heEluc2lkZURhdGEsIGlub3V0RGF0YSkKICAgIHJlc3VsdCA9IHJlc3VsdFsocmVzdWx0WydMb2NhdGlvbiddID09IGxpYikgJiAocmVzdWx0WydEYXRlJ10gPj0gZGF0ZShkYXRlVG9TdGFydFswXSxkYXRlVG9TdGFydFsxXSxkYXRlVG9TdGFydFsyXSkpICYgKHJlc3VsdFsnSG91ciddID4gNSkgXQoKICAgIHJldHVybiByZXN1bHQgCgo8fGZpbV9zdWZmaXh8PgogICAgZm9yIGRhdGUgaW4gZGF0ZXM6CiAgICAgICAgZ2V0RGF5LmFwcGVuZChzdHIoZGF0ZS5zdHJmdGltZSgnJWQgJWIgJWEnKSkpCiAgICByZXR1cm4gZ2V0RGF5Cgo8fGZpbV9lbmR8Pg=="]
["daa231eaa938e61e61429cabf2d973aae687a2a7-2","daa231eaa938e61e61429cabf2d973aae687a2a7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZApmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlLCB0aW1lZGVsdGEsIGRhdGV0aW1lCmZyb20gd3JpdGVUb0RCIGltcG9ydCBnZXRBbGxNYXhDb3VudCwgZ2V0QWxsSW5PdXRDb3VudAoKZGF0ZVRvU3RhcnQgPSBbMjAyMCw5LDE4XQpob3VycyA9IGxpc3QocmFuZ2UoNiwyNCkpCgpkZWYgcmVhZGFibGVUaW1lKCk6CiAgICBob3VyTGFiZWxzID0gW10KICAgIGZvciBpbmRleCwgaG91ciBpbiBlbnVtZXJhdGUoaG91cnMpOgogICAgICAgIGlmIGludChob3VyKSA8IDEyOgogICAgICAgICAgICB4ID0gc3RyKGhvdXIpICsnIEFNJwogICAgICAgIGlmIGludChob3VyKSA+IDEyOgogICAgICAgICAgICB4ID0gc3RyKGhvdXItMTIpICsnIFBNJwogICAgICAgIGlmIGludChob3VyKSA9PSAxMjoKICAgICAgICAgICAgeCA9IHN0cihob3VyKSArJyBQTScKICAgICAgICAKICAgICAgICBob3VyTGFiZWxzLmFwcGVuZCh4KQogICAgcmV0dXJuIGhvdXJMYWJlbHMKCmRlZiBkYXRlRnJvbVN0YXJ0KCk6CiAgICBzdGFydERhdGUgPSBkYXRlKGRhdGVUb1N0YXJ0WzBdLGRhdGVUb1N0YXJ0WzFdLGRhdGVUb1N0YXJ0WzJdKQogICAgZGF0ZXMgPSBbXQogICAgd2hpbGUgVHJ1ZToKICAgICAgICBkYXRlcy5hcHBlbmQoc3RhcnREYXRlKQogICAgICAgIHN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZSArIHRpbWVkZWx0YShkYXlzPTEpIAogICAgICAgIGlmIHN0YXJ0RGF0ZSA9PSBkYXRlLnRvZGF5KCk6CiAgICAgICAgICAgIGRhdGVzLmFwcGVuZChzdGFydERhdGUpCiAgICAgICAgICAgIGJyZWFrCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHJldHVybiBkYXRlcwoKPHxmaW1fZW5kfD4="]
["daa231eaa938e61e61429cabf2d973aae687a2a7-3","daa231eaa938e61e61429cabf2d973aae687a2a7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZApmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlLCB0aW1lZGVsdGEsIGRhdGV0aW1lCmZyb20gd3JpdGVUb0RCIGltcG9ydCBnZXRBbGxNYXhDb3VudCwgZ2V0QWxsSW5PdXRDb3VudAoKZGF0ZVRvU3RhcnQgPSBbMjAyMCw5LDE4XQpob3VycyA9IGxpc3QocmFuZ2UoNiwyNCkpCgpkZWYgcmVhZGFibGVUaW1lKCk6CiAgICBob3VyTGFiZWxzID0gW10KICAgIGZvciBpbmRleCwgaG91ciBpbiBlbnVtZXJhdGUoaG91cnMpOgogICAgICAgIGlmIGludChob3VyKSA8IDEyOgogICAgICAgICAgICB4ID0gc3RyKGhvdXIpICsnIEFNJwogICAgICAgIGlmIGludChob3VyKSA+IDEyOgogICAgICAgICAgICB4ID0gc3RyKGhvdXItMTIpICsnIFBNJwogICAgICAgIGlmIGludChob3VyKSA9PSAxMjoKICAgICAgICAgICAgeCA9IHN0cihob3VyKSArJyBQTScKICAgICAgICAKICAgICAgICBob3VyTGFiZWxzLmFwcGVuZCh4KQogICAgcmV0dXJuIGhvdXJMYWJlbHMKCmRlZiBkYXRlRnJvbVN0YXJ0KCk6CiAgICBzdGFydERhdGUgPSBkYXRlKGRhdGVUb1N0YXJ0WzBdLGRhdGVUb1N0YXJ0WzFdLGRhdGVUb1N0YXJ0WzJdKQogICAgZGF0ZXMgPSBbXQogICAgd2hpbGUgVHJ1ZToKICAgICAgICBkYXRlcy5hcHBlbmQoc3RhcnREYXRlKQogICAgICAgIHN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZSArIHRpbWVkZWx0YShkYXlzPTEpIAo8fGZpbV9ob2xlfD4KICAgIHJldHVybiBkYXRlcwoKZGVmIGRhdGVEYXlzKCk6CiAgICBkYXRlcyA9IGRhdGVGcm9tU3RhcnQoKQogICAgZ2V0RGF5ID0gW10KICAgIGZvciBkYXRlIGluIGRhdGVzOgogICAgICAgIGdldERheS5hcHBlbmQoc3RyKGRhdGUuc3RyZnRpbWUoJyVkICViICVhJykpKQogICAgcmV0dXJuIGdldERheQoKCmRlZiBoZWF0bWFwRGF0YShsaWIpOgogICAgZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZQogICAgbWF4SW5zaWRlRGF0YSA9IHBkLkRhdGFGcmFtZSgpCgogICAgcm93c19saXN0ID0gW10KICAgIGZvciBlYWNoIGluIGdldEFsbE1heENvdW50KCk6CiAgICAgICAgcm93c19saXN0LmFwcGVuZChbZWFjaC5sb2NhdGlvbiwgZWFjaC5kYXRlLCBlYWNoLmhvdXIsIGVhY2gubWF4SW5zaWRlLCBlYWNoLm1pbkluc2lkZV0pCgogICAgbWF4SW5zaWRlRGF0YSA9IHBkLkRhdGFGcmFtZShyb3dzX2xpc3QpCiAgICBtYXhJbnNpZGVEYXRhLmNvbHVtbnMgPSBbJ0xvY2F0aW9uJywnZGF0ZScsJ2hvdXInLCdtYXgnLCdtaW4nXQoKICAgIGlmIGxpYiA9PSAiTEtTIjoKICAgICAgICBkYXRhID0gbWF4SW5zaWRlRGF0YVsobWF4SW5zaWRlRGF0YVsnTG9jYXRpb24nXSA9PSAnTEtTJyldCiAgICBpZiBsaWIgPT0gIktHQyI6CiAgICAgICAgZGF0YSA9IG1heEluc2lkZURhdGFbKG1heEluc2lkZURhdGFbJ0xvY2F0aW9uJ10gPT0gJ0tHQycpXSAgCgogICAgZGF0ZXMgPSBkYXRlRnJvbVN0YXJ0KCkKCiAgICBob3VybHlNYXggPSBbXQogICAgZm9yIGhvdXIgaW4gaG91cnM6CiAgICAgICAgZGF5SG91cnMgPSBbXQogICAgICAgIGZvciBkYXRlIGluIGRhdGVzOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBtYXggPSBpbnQoZGF0YVsoZGF0YVsnZGF0ZSddID09IGRhdGUpICYgKGRhdGFbJ2hvdXInXSA9PSBob3VyKV1bJ21heCddKQogICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICBkYXlIb3Vycy5hcHBlbmQoMCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGRheUhvdXJzLmFwcGVuZChtYXgpIAogICAgICAgIGhvdXJseU1heC5hcHBlbmQoZGF5SG91cnMpICAgICAgICAKCiAgIAogICAgcmV0dXJuIGhvdXJseU1heCxkYXRlRGF5cygpLCByZWFkYWJsZVRpbWUoKQoKZGVmIHRhYmxlRGF0YShsaWIpOgogICAgcm93c19saXN0ID0gW10KICAgIGZvciBlYWNoIGluIGdldEFsbE1heENvdW50KCk6CiAgICAgICAgcm93c19saXN0LmFwcGVuZChbZWFjaC5sb2NhdGlvbiwgZWFjaC5kYXRlLCBlYWNoLmhvdXIsIGVhY2gubWF4SW5zaWRlLCBlYWNoLm1pbkluc2lkZV0pCgogICAgbWF4SW5zaWRlRGF0YSA9IHBkLkRhdGFGcmFtZShyb3dzX2xpc3QpCiAgICBtYXhJbnNpZGVEYXRhLmNvbHVtbnMgPSBbJ0xvY2F0aW9uJywnRGF0ZScsJ0hvdXInLCdNYXgnLCdNaW4nXQoKICAgIHJvd3NfbGlzdCA9IFtdCiAgICBmb3IgZWFjaCBpbiBnZXRBbGxJbk91dENvdW50KCk6CiAgICAgICAgcm93c19saXN0LmFwcGVuZChbZWFjaC5kYXRlLCBlYWNoLmhvdXIsIGVhY2gubG9jYXRpb24sIGVhY2guaW5Db3VudCwgZWFjaC5vdXRDb3VudF0pCgoKICAgIGlub3V0RGF0YSA9IHBkLkRhdGFGcmFtZShyb3dzX2xpc3QpCiAgICBpbm91dERhdGEuY29sdW1ucyA9IFsnRGF0ZScsJ0hvdXInLCdMb2NhdGlvbicsJ0luJywnT3V0J10KCiAgICByZXN1bHQgPSBwZC5tZXJnZShtYXhJbnNpZGVEYXRhLCBpbm91dERhdGEpCiAgICByZXN1bHQgPSByZXN1bHRbKHJlc3VsdFsnTG9jYXRpb24nXSA9PSBsaWIpICYgKHJlc3VsdFsnRGF0ZSddID49IGRhdGUoZGF0ZVRvU3RhcnRbMF0sZGF0ZVRvU3RhcnRbMV0sZGF0ZVRvU3RhcnRbMl0pKSAmIChyZXN1bHRbJ0hvdXInXSA+IDUpIF0KCiAgICByZXR1cm4gcmVzdWx0IAoKPHxmaW1fc3VmZml4fD4KICAgICAgICBpZiBzdGFydERhdGUgPT0gZGF0ZS50b2RheSgpOgogICAgICAgICAgICBkYXRlcy5hcHBlbmQoc3RhcnREYXRlKQogICAgICAgICAgICBicmVhawo8fGZpbV9lbmR8Pg=="]
["daa231eaa938e61e61429cabf2d973aae687a2a7-4","daa231eaa938e61e61429cabf2d973aae687a2a7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZApmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlLCB0aW1lZGVsdGEsIGRhdGV0aW1lCmZyb20gd3JpdGVUb0RCIGltcG9ydCBnZXRBbGxNYXhDb3VudCwgZ2V0QWxsSW5PdXRDb3VudAoKZGF0ZVRvU3RhcnQgPSBbMjAyMCw5LDE4XQpob3VycyA9IGxpc3QocmFuZ2UoNiwyNCkpCgpkZWYgcmVhZGFibGVUaW1lKCk6CiAgICBob3VyTGFiZWxzID0gW10KICAgIGZvciBpbmRleCwgaG91ciBpbiBlbnVtZXJhdGUoaG91cnMpOgogICAgICAgIGlmIGludChob3VyKSA8IDEyOgogICAgICAgICAgICB4ID0gc3RyKGhvdXIpICsnIEFNJwogICAgICAgIGlmIGludChob3VyKSA+IDEyOgogICAgICAgICAgICB4ID0gc3RyKGhvdXItMTIpICsnIFBNJwogICAgICAgIGlmIGludChob3VyKSA9PSAxMjoKICAgICAgICAgICAgeCA9IHN0cihob3VyKSArJyBQTScKICAgICAgICAKICAgICAgICBob3VyTGFiZWxzLmFwcGVuZCh4KQogICAgcmV0dXJuIGhvdXJMYWJlbHMKCmRlZiBkYXRlRnJvbVN0YXJ0KCk6CiAgICBzdGFydERhdGUgPSBkYXRlKGRhdGVUb1N0YXJ0WzBdLGRhdGVUb1N0YXJ0WzFdLGRhdGVUb1N0YXJ0WzJdKQogICAgZGF0ZXMgPSBbXQogICAgd2hpbGUgVHJ1ZToKICAgICAgICBkYXRlcy5hcHBlbmQoc3RhcnREYXRlKQogICAgICAgIHN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZSArIHRpbWVkZWx0YShkYXlzPTEpIAogICAgICAgIGlmIHN0YXJ0RGF0ZSA9PSBkYXRlLnRvZGF5KCk6CiAgICAgICAgICAgIGRhdGVzLmFwcGVuZChzdGFydERhdGUpCiAgICAgICAgICAgIGJyZWFrCiAgICByZXR1cm4gZGF0ZXMKCmRlZiBkYXRlRGF5cygpOgogICAgZGF0ZXMgPSBkYXRlRnJvbVN0YXJ0KCkKICAgIGdldERheSA9IFtdCiAgICBmb3IgZGF0ZSBpbiBkYXRlczoKICAgICAgICBnZXREYXkuYXBwZW5kKHN0cihkYXRlLnN0cmZ0aW1lKCclZCAlYiAlYScpKSkKPHxmaW1faG9sZXw+CmRlZiBoZWF0bWFwRGF0YShsaWIpOgogICAgZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZQogICAgbWF4SW5zaWRlRGF0YSA9IHBkLkRhdGFGcmFtZSgpCgogICAgcm93c19saXN0ID0gW10KICAgIGZvciBlYWNoIGluIGdldEFsbE1heENvdW50KCk6CiAgICAgICAgcm93c19saXN0LmFwcGVuZChbZWFjaC5sb2NhdGlvbiwgZWFjaC5kYXRlLCBlYWNoLmhvdXIsIGVhY2gubWF4SW5zaWRlLCBlYWNoLm1pbkluc2lkZV0pCgogICAgbWF4SW5zaWRlRGF0YSA9IHBkLkRhdGFGcmFtZShyb3dzX2xpc3QpCiAgICBtYXhJbnNpZGVEYXRhLmNvbHVtbnMgPSBbJ0xvY2F0aW9uJywnZGF0ZScsJ2hvdXInLCdtYXgnLCdtaW4nXQoKICAgIGlmIGxpYiA9PSAiTEtTIjoKICAgICAgICBkYXRhID0gbWF4SW5zaWRlRGF0YVsobWF4SW5zaWRlRGF0YVsnTG9jYXRpb24nXSA9PSAnTEtTJyldCiAgICBpZiBsaWIgPT0gIktHQyI6CiAgICAgICAgZGF0YSA9IG1heEluc2lkZURhdGFbKG1heEluc2lkZURhdGFbJ0xvY2F0aW9uJ10gPT0gJ0tHQycpXSAgCgogICAgZGF0ZXMgPSBkYXRlRnJvbVN0YXJ0KCkKCiAgICBob3VybHlNYXggPSBbXQogICAgZm9yIGhvdXIgaW4gaG91cnM6CiAgICAgICAgZGF5SG91cnMgPSBbXQogICAgICAgIGZvciBkYXRlIGluIGRhdGVzOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBtYXggPSBpbnQoZGF0YVsoZGF0YVsnZGF0ZSddID09IGRhdGUpICYgKGRhdGFbJ2hvdXInXSA9PSBob3VyKV1bJ21heCddKQogICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICBkYXlIb3Vycy5hcHBlbmQoMCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGRheUhvdXJzLmFwcGVuZChtYXgpIAogICAgICAgIGhvdXJseU1heC5hcHBlbmQoZGF5SG91cnMpICAgICAgICAKCiAgIAogICAgcmV0dXJuIGhvdXJseU1heCxkYXRlRGF5cygpLCByZWFkYWJsZVRpbWUoKQoKZGVmIHRhYmxlRGF0YShsaWIpOgogICAgcm93c19saXN0ID0gW10KICAgIGZvciBlYWNoIGluIGdldEFsbE1heENvdW50KCk6CiAgICAgICAgcm93c19saXN0LmFwcGVuZChbZWFjaC5sb2NhdGlvbiwgZWFjaC5kYXRlLCBlYWNoLmhvdXIsIGVhY2gubWF4SW5zaWRlLCBlYWNoLm1pbkluc2lkZV0pCgogICAgbWF4SW5zaWRlRGF0YSA9IHBkLkRhdGFGcmFtZShyb3dzX2xpc3QpCiAgICBtYXhJbnNpZGVEYXRhLmNvbHVtbnMgPSBbJ0xvY2F0aW9uJywnRGF0ZScsJ0hvdXInLCdNYXgnLCdNaW4nXQoKICAgIHJvd3NfbGlzdCA9IFtdCiAgICBmb3IgZWFjaCBpbiBnZXRBbGxJbk91dENvdW50KCk6CiAgICAgICAgcm93c19saXN0LmFwcGVuZChbZWFjaC5kYXRlLCBlYWNoLmhvdXIsIGVhY2gubG9jYXRpb24sIGVhY2guaW5Db3VudCwgZWFjaC5vdXRDb3VudF0pCgoKICAgIGlub3V0RGF0YSA9IHBkLkRhdGFGcmFtZShyb3dzX2xpc3QpCiAgICBpbm91dERhdGEuY29sdW1ucyA9IFsnRGF0ZScsJ0hvdXInLCdMb2NhdGlvbicsJ0luJywnT3V0J10KCiAgICByZXN1bHQgPSBwZC5tZXJnZShtYXhJbnNpZGVEYXRhLCBpbm91dERhdGEpCiAgICByZXN1bHQgPSByZXN1bHRbKHJlc3VsdFsnTG9jYXRpb24nXSA9PSBsaWIpICYgKHJlc3VsdFsnRGF0ZSddID49IGRhdGUoZGF0ZVRvU3RhcnRbMF0sZGF0ZVRvU3RhcnRbMV0sZGF0ZVRvU3RhcnRbMl0pKSAmIChyZXN1bHRbJ0hvdXInXSA+IDUpIF0KCiAgICByZXR1cm4gcmVzdWx0IAoKPHxmaW1fc3VmZml4fD4KICAgIHJldHVybiBnZXREYXkKCgo8fGZpbV9lbmR8Pg=="]
["daa231eaa938e61e61429cabf2d973aae687a2a7-5","daa231eaa938e61e61429cabf2d973aae687a2a7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZApmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlLCB0aW1lZGVsdGEsIGRhdGV0aW1lCmZyb20gd3JpdGVUb0RCIGltcG9ydCBnZXRBbGxNYXhDb3VudCwgZ2V0QWxsSW5PdXRDb3VudAoKZGF0ZVRvU3RhcnQgPSBbMjAyMCw5LDE4XQpob3VycyA9IGxpc3QocmFuZ2UoNiwyNCkpCgpkZWYgcmVhZGFibGVUaW1lKCk6CiAgICBob3VyTGFiZWxzID0gW10KICAgIGZvciBpbmRleCwgaG91ciBpbiBlbnVtZXJhdGUoaG91cnMpOgogICAgICAgIGlmIGludChob3VyKSA8IDEyOgogICAgICAgICAgICB4ID0gc3RyKGhvdXIpICsnIEFNJwogICAgICAgIGlmIGludChob3VyKSA+IDEyOgogICAgICAgICAgICB4ID0gc3RyKGhvdXItMTIpICsnIFBNJwogICAgICAgIGlmIGludChob3VyKSA9PSAxMjoKICAgICAgICAgICAgeCA9IHN0cihob3VyKSArJyBQTScKICAgICAgICAKICAgICAgICBob3VyTGFiZWxzLmFwcGVuZCh4KQogICAgcmV0dXJuIGhvdXJMYWJlbHMKCmRlZiBkYXRlRnJvbVN0YXJ0KCk6CiAgICBzdGFydERhdGUgPSBkYXRlKGRhdGVUb1N0YXJ0WzBdLGRhdGVUb1N0YXJ0WzFdLGRhdGVUb1N0YXJ0WzJdKQogICAgZGF0ZXMgPSBbXQogICAgd2hpbGUgVHJ1ZToKICAgICAgICBkYXRlcy5hcHBlbmQoc3RhcnREYXRlKQogICAgICAgIHN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZSArIHRpbWVkZWx0YShkYXlzPTEpIAogICAgICAgIGlmIHN0YXJ0RGF0ZSA9PSBkYXRlLnRvZGF5KCk6CiAgICAgICAgICAgIGRhdGVzLmFwcGVuZChzdGFydERhdGUpCiAgICAgICAgICAgIGJyZWFrCiAgICByZXR1cm4gZGF0ZXMKCmRlZiBkYXRlRGF5cygpOgogICAgZGF0ZXMgPSBkYXRlRnJvbVN0YXJ0KCkKICAgIGdldERheSA9IFtdCiAgICBmb3IgZGF0ZSBpbiBkYXRlczoKICAgICAgICBnZXREYXkuYXBwZW5kKHN0cihkYXRlLnN0cmZ0aW1lKCclZCAlYiAlYScpKSkKICAgIHJldHVybiBnZXREYXkKCgpkZWYgaGVhdG1hcERhdGEobGliKToKICAgIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGUKICAgIG1heEluc2lkZURhdGEgPSBwZC5EYXRhRnJhbWUoKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcm93c19saXN0ID0gW10KICAgIGZvciBlYWNoIGluIGdldEFsbE1heENvdW50KCk6CiAgICAgICAgcm93c19saXN0LmFwcGVuZChbZWFjaC5sb2NhdGlvbiwgZWFjaC5kYXRlLCBlYWNoLmhvdXIsIGVhY2gubWF4SW5zaWRlLCBlYWNoLm1pbkluc2lkZV0pCgo8fGZpbV9lbmR8Pg=="]
["2e0a8f49cfa5e599ad0fd74bac7097b95356630b-1","2e0a8f49cfa5e599ad0fd74bac7097b95356630b","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXF1YWwuYW1pbm9fYWNpZCBpbXBvcnQgQW1pbm9BY2lkCmZyb20gc2VxdWFsLnNlcXVlbmNlIGltcG9ydCBTZXF1ZW5jZQpmcm9tIHNlcXVhbCBpbXBvcnQgcmVzb3VyY2VzCgoKZGVmIGNhbGN1bGF0ZV9tYXNzKHNlcSwgbWFzc19kaWN0PU5vbmUsIE5fdGVybWludXM9MCwgT190ZXJtaW51cz0wLCB3aXRoX3dhdGVyPVRydWUpOgogICAgbWFzcyA9IDAKICAgIGlmIHdpdGhfd2F0ZXI6CiAgICAgICAgbWFzcyArPSByZXNvdXJjZXMuSCoyICsgcmVzb3VyY2VzLk8KICAgIGZvciBpIGluIHNlcToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGlmIG5vdCBpLm1hc3M6CiAgICAgICAgICAgIGlmIG1hc3NfZGljdDoKICAgICAgICAgICAgICAgIGlmIGkudmFsdWUgaW4gbWFzc19kaWN0OgogICAgICAgICAgICAgICAgICAgIG1hc3MgKz0gbWFzc19kaWN0W2kudmFsdWVdCjx8ZmltX2VuZHw+"]
["2e0a8f49cfa5e599ad0fd74bac7097b95356630b-2","2e0a8f49cfa5e599ad0fd74bac7097b95356630b","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXF1YWwuYW1pbm9fYWNpZCBpbXBvcnQgQW1pbm9BY2lkCmZyb20gc2VxdWFsLnNlcXVlbmNlIGltcG9ydCBTZXF1ZW5jZQpmcm9tIHNlcXVhbCBpbXBvcnQgcmVzb3VyY2VzCgoKZGVmIGNhbGN1bGF0ZV9tYXNzKHNlcSwgbWFzc19kaWN0PU5vbmUsIE5fdGVybWludXM9MCwgT190ZXJtaW51cz0wLCB3aXRoX3dhdGVyPVRydWUpOgogICAgbWFzcyA9IDAKICAgIGlmIHdpdGhfd2F0ZXI6CiAgICAgICAgbWFzcyArPSByZXNvdXJjZXMuSCoyICsgcmVzb3VyY2VzLk8KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZm9yIGkgaW4gc2VxOgogICAgICAgIGlmIG5vdCBpLm1hc3M6CiAgICAgICAgICAgIGlmIG1hc3NfZGljdDoKICAgICAgICAgICAgICAgIGlmIGkudmFsdWUgaW4gbWFzc19kaWN0Ogo8fGZpbV9lbmR8Pg=="]
["2e0a8f49cfa5e599ad0fd74bac7097b95356630b-3","2e0a8f49cfa5e599ad0fd74bac7097b95356630b","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXF1YWwuYW1pbm9fYWNpZCBpbXBvcnQgQW1pbm9BY2lkCmZyb20gc2VxdWFsLnNlcXVlbmNlIGltcG9ydCBTZXF1ZW5jZQpmcm9tIHNlcXVhbCBpbXBvcnQgcmVzb3VyY2VzCgoKZGVmIGNhbGN1bGF0ZV9tYXNzKHNlcSwgbWFzc19kaWN0PU5vbmUsIE5fdGVybWludXM9MCwgT190ZXJtaW51cz0wLCB3aXRoX3dhdGVyPVRydWUpOgogICAgbWFzcyA9IDAKICAgIGlmIHdpdGhfd2F0ZXI6CiAgICAgICAgbWFzcyArPSByZXNvdXJjZXMuSCoyICsgcmVzb3VyY2VzLk8KICAgIGZvciBpIGluIHNlcToKICAgICAgICBpZiBub3QgaS5tYXNzOgogICAgICAgICAgICBpZiBtYXNzX2RpY3Q6CiAgICAgICAgICAgICAgICBpZiBpLnZhbHVlIGluIG1hc3NfZGljdDoKICAgICAgICAgICAgICAgICAgICBtYXNzICs9IG1hc3NfZGljdFtpLnZhbHVlXQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdCbG9jayB7fSBub3QgZm91bmQgaW4gbWFzc19kaWN0Jy5mb3JtYXQoaS52YWx1ZSkpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdCbG9jayB7fSBtYXNzIGlzIG5vdCBhdmFpbGFibGUgaW4gbWFzcyBhdHRyaWJ1dGUgYW5kIG5vIGFkZGl0aW9uYWwgbWFzc19kaWN0IHdhcyBzdXBwbGllZCcuZm9ybWF0KGkudmFsdWUpKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG1hc3MgKz0gaS5tYXNzCiAgICAgICAgaWYgaS5tb2RzOgogICAgICAgICAgICBmb3IgbSBpbiBpLm1vZHM6CiAgICAgICAgICAgICAgICBpZiBtLm1hc3MgIT0gMCBhbmQgbm90IG0ubWFzczoKICAgICAgICAgICAgICAgICAgICBpZiBtYXNzX2RpY3Q6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIG0udmFsdWUgaW4gbWFzc19kaWN0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzcyArPSBtYXNzX2RpY3RbbS52YWx1ZV0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Jsb2NrIHt9IG5vdCBmb3VuZCBpbiBtYXNzX2RpY3QnLmZvcm1hdChtLnZhbHVlKSkKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Jsb2NrIHt9IG1hc3MgaXMgbm90IGF2YWlsYWJsZSBpbiBtYXNzIGF0dHJpYnV0ZSBhbmQgbm8gYWRkaXRpb25hbCBtYXNzX2RpY3Qgd2FzIHN1cHBsaWVkJy5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS52YWx1ZSkpCjx8ZmltX2hvbGV8PgogICAgcmV0dXJuIG1hc3MgKyBOX3Rlcm1pbnVzICsgT190ZXJtaW51cwoKCgoKCgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBtYXNzICs9IG0ubWFzcwo8fGZpbV9lbmR8Pg=="]
["2e0a8f49cfa5e599ad0fd74bac7097b95356630b-4","2e0a8f49cfa5e599ad0fd74bac7097b95356630b","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXF1YWwuYW1pbm9fYWNpZCBpbXBvcnQgQW1pbm9BY2lkCmZyb20gc2VxdWFsLnNlcXVlbmNlIGltcG9ydCBTZXF1ZW5jZQpmcm9tIHNlcXVhbCBpbXBvcnQgcmVzb3VyY2VzCgoKZGVmIGNhbGN1bGF0ZV9tYXNzKHNlcSwgbWFzc19kaWN0PU5vbmUsIE5fdGVybWludXM9MCwgT190ZXJtaW51cz0wLCB3aXRoX3dhdGVyPVRydWUpOgogICAgbWFzcyA9IDAKICAgIGlmIHdpdGhfd2F0ZXI6CiAgICAgICAgbWFzcyArPSByZXNvdXJjZXMuSCoyICsgcmVzb3VyY2VzLk8KICAgIGZvciBpIGluIHNlcToKICAgICAgICBpZiBub3QgaS5tYXNzOgogICAgICAgICAgICBpZiBtYXNzX2RpY3Q6CiAgICAgICAgICAgICAgICBpZiBpLnZhbHVlIGluIG1hc3NfZGljdDoKICAgICAgICAgICAgICAgICAgICBtYXNzICs9IG1hc3NfZGljdFtpLnZhbHVlXQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdCbG9jayB7fSBub3QgZm91bmQgaW4gbWFzc19kaWN0Jy5mb3JtYXQoaS52YWx1ZSkpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdCbG9jayB7fSBtYXNzIGlzIG5vdCBhdmFpbGFibGUgaW4gbWFzcyBhdHRyaWJ1dGUgYW5kIG5vIGFkZGl0aW9uYWwgbWFzc19kaWN0IHdhcyBzdXBwbGllZCcuZm9ybWF0KGkudmFsdWUpKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG1hc3MgKz0gaS5tYXNzCiAgICAgICAgaWYgaS5tb2RzOgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3MgKz0gbWFzc19kaWN0W20udmFsdWVdCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdCbG9jayB7fSBub3QgZm91bmQgaW4gbWFzc19kaWN0Jy5mb3JtYXQobS52YWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCbG9jayB7fSBtYXNzIGlzIG5vdCBhdmFpbGFibGUgaW4gbWFzcyBhdHRyaWJ1dGUgYW5kIG5vIGFkZGl0aW9uYWwgbWFzc19kaWN0IHdhcyBzdXBwbGllZCcuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0udmFsdWUpKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBtYXNzICs9IG0ubWFzcwogICAgcmV0dXJuIG1hc3MgKyBOX3Rlcm1pbnVzICsgT190ZXJtaW51cwoKCgoKCgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBmb3IgbSBpbiBpLm1vZHM6CiAgICAgICAgICAgICAgICBpZiBtLm1hc3MgIT0gMCBhbmQgbm90IG0ubWFzczoKICAgICAgICAgICAgICAgICAgICBpZiBtYXNzX2RpY3Q6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIG0udmFsdWUgaW4gbWFzc19kaWN0Ogo8fGZpbV9lbmR8Pg=="]
["6b62f459f4715c41af8ff2c1171053ff621b44d4-1","6b62f459f4715c41af8ff2c1171053ff621b44d4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppbXBvcnQgb3MKCmltcG9ydCByZXF1ZXN0cwpmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdXJscGFyc2UsIHVybGpvaW4KPHxmaW1fZW5kfD4="]
["6b62f459f4715c41af8ff2c1171053ff621b44d4-2","6b62f459f4715c41af8ff2c1171053ff621b44d4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IG9zCgppbXBvcnQgcmVxdWVzdHMKZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybHBhcnNlLCB1cmxqb2luCgoKY2xhc3MgQXJjR0lTUkVTVEFQSVdyYXBwZXI6CgogICAgZGVmIF9faW5pdF9fKAogICAgICAgICAgICBzZWxmLAogICAgICAgICAgICBlbmRwb2ludD1Ob25lLAogICAgICAgICAgICBjcmVkZW50aWFscz1Ob25lLAogICAgICAgICAgICBwYXJhbXM9Tm9uZSwKICAgICAgICAgICAgb3V0cHV0X2Rpcj1Ob25lLAogICAgICAgICAgICBvdXRwdXRfYmFzZW5hbWU9Tm9uZSwKICAgICAgICAgICAgcmVzdWx0X2NhbGxiYWNrPU5vbmUpOgogICAgICAgIHNlbGYuZW5kcG9pbnQgPSBlbmRwb2ludAo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLnJlc3VsdF9jYWxsYmFjayA9IHJlc3VsdF9jYWxsYmFjawogICAgICAgIHNlbGYuY2FwYWJpbGl0aWVzID0ge30KICAgICAgICBzZWxmLnRvdGFsX3JlY29yZHMgPSAwCiAgICAgICAgc2VsZi5saW1pdCA9IDAKCiAgICBkZWYgc2V0dXAoc2VsZik6CiAgICAgICAgIyBjaGVjayBjYXBhYmlsaXRpZXMKICAgICAgICBwYXJhbXMgPSB7CiAgICAgICAgICAgICdmJzogJ2pzb24nCiAgICAgICAgfQogICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMuZ2V0KHNlbGYuZW5kcG9pbnQsIHBhcmFtcz1wYXJhbXMpCiAgICAgICAgc2VsZi5jYXBhYmlsaXRpZXMgPSByZXNwb25zZS5qc29uKCkKICAgICAgICBhZHZhbmNlZF9xdWVyeV9jYXBhYmlsaXRpZXMgPSBzZWxmLmNhcGFiaWxpdGllc1sKICAgICAgICAgICAgJ2FkdmFuY2VkUXVlcnlDYXBhYmlsaXRpZXMnXQoKICAgICAgICAjIGZpbmQgdG90YWwgcmVjb3JkcwogICAgICAgIGlmIGFkdmFuY2VkX3F1ZXJ5X2NhcGFiaWxpdGllcy5nZXQoJ3N1cHBvcnRzUGFnaW5hdGlvbicsIEZhbHNlKToKICAgICAgICAgICAgcGFyYW1zID0gewogICAgICAgICAgICAgICAgJ2YnOiAnanNvbicsCiAgICAgICAgICAgICAgICAnd2hlcmUnOiAnMSA9IDEnLAogICAgICAgICAgICAgICAgJ3JldHVybkNvdW50T25seSc6ICd0cnVlJwogICAgICAgICAgICB9CiAgICAgICAgICAgIHBhcmFtcy51cGRhdGUoc2VsZi5wYXJhbXMpCgogICAgICAgICAgICBxdWVyeV9lbmRwb2ludCA9IHVybGpvaW4oc2VsZi5lbmRwb2ludCwgJ3F1ZXJ5JykKICAgICAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5wb3N0KHF1ZXJ5X2VuZHBvaW50LCBkYXRhPXBhcmFtcykKICAgICAgICAgICAgcmVzdWx0ID0gcmVzcG9uc2UuanNvbigpCiAgICAgICAgICAgIHNlbGYudG90YWxfcmVjb3JkcyA9IHJlc3VsdFsnY291bnQnXQogICAgICAgICAgICBzZWxmLmxpbWl0ID0gc2VsZi5jYXBhYmlsaXRpZXNbJ21heFJlY29yZENvdW50J10KCiAgICBkZWYgX2ZldGNoKHNlbGYsIHBhcmFtcywgcGFnZSwgdG90YWxfcGFnZT1Ob25lKToKICAgICAgICAiIiJTaW5nbGUgcmVxdWVzdCBmZXRjaCIiIgogICAgICAgIHF1ZXJ5X2VuZHBvaW50ID0gdXJsam9pbihzZWxmLmVuZHBvaW50LCAncXVlcnknKQogICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMucG9zdChxdWVyeV9lbmRwb2ludCwgZGF0YT1wYXJhbXMpCiAgICAgICAgcmVzdWx0ID0gcmVzcG9uc2UuanNvbigpCgogICAgICAgIHRvdGFsX2RpZ2l0cyA9IGxlbihzdHIodG90YWxfcGFnZSkpCiAgICAgICAgaWYgc2VsZi5vdXRwdXRfZGlyIGFuZCBzZWxmLm91dHB1dF9iYXNlbmFtZToKICAgICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmpvaW4oCiAgICAgICAgICAgICAgICBzZWxmLm91dHB1dF9kaXIsIHNlbGYub3V0cHV0X2Jhc2VuYW1lKQogICAgICAgICAgICBmaWxlbmFtZSA9ICd7YmFzZW5hbWV9LntwYWdlfS5qc29uJy5mb3JtYXQoCiAgICAgICAgICAgICAgICBiYXNlbmFtZT1iYXNlbmFtZSwKICAgICAgICAgICAgICAgIHBhZ2U9c3RyKHBhZ2UpLnpmaWxsKHRvdGFsX2RpZ2l0cykpCiAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3cnKSBhcyBmOgogICAgICAgICAgICAgICAganNvbi5kdW1wKHJlc3VsdCwgZiwgaW5kZW50PTQsIHNvcnRfa2V5cz1UcnVlKQoKICAgICAgICBpZiBzZWxmLnJlc3VsdF9jYWxsYmFjazoKICAgICAgICAgICAgZXZlbnQgPSB7CiAgICAgICAgICAgICAgICAnb2JqJzogc2VsZiwKICAgICAgICAgICAgICAgICdwYXJhbXMnOiBwYXJhbXMsCiAgICAgICAgICAgICAgICAndXJsJzogc2VsZi5lbmRwb2ludCwKICAgICAgICAgICAgICAgICdwYWdlJzogcGFnZQogICAgICAgICAgICB9CiAgICAgICAgICAgIHNlbGYucmVzdWx0X2NhbGxiYWNrKHJlc3VsdCwgZXZlbnQpCgogICAgZGVmIGZldGNoKHNlbGYsIGZldGNoX2xpbWl0PU5vbmUsIGNvdW50X3Blcl9wYWdlPU5vbmUpOgogICAgICAgIHNlbGYuc2V0dXAoKQoKICAgICAgICBtaW5fcmVjb3JkcyA9IG1pbigKICAgICAgICAgICAgc2VsZi50b3RhbF9yZWNvcmRzLCBmZXRjaF9saW1pdCBvciBzZWxmLnRvdGFsX3JlY29yZHMpCiAgICAgICAgbGltaXQgPSBjb3VudF9wZXJfcGFnZSBvciBzZWxmLmxpbWl0CgogICAgICAgICMgaW4gY2FzZSByZXN1bHQgZXhjZWVkIG1heCByZWNvcmQgY291bnQKICAgICAgICBpZiBtaW5fcmVjb3JkcyA+IGxpbWl0OgogICAgICAgICAgICBudW1fcGFnZSA9IG1pbl9yZWNvcmRzIC8vIGxpbWl0CiAgICAgICAgICAgIG51bV9wYWdlICs9IDEgaWYgbWluX3JlY29yZHMgJSBsaW1pdCA+IDAgZWxzZSAwCgogICAgICAgICAgICBmb3IgcCBpbiByYW5nZShudW1fcGFnZSk6CiAgICAgICAgICAgICAgICBvZmZzZXQgPSBwICogbGltaXQKICAgICAgICAgICAgICAgIG5ld19wYXJhbXMgPSB7CiAgICAgICAgICAgICAgICAgICAgJ2YnOiAnanNvbicsCiAgICAgICAgICAgICAgICAgICAgJ291dEZpZWxkcyc6ICcqJywKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG5ld19wYXJhbXMudXBkYXRlKHNlbGYucGFyYW1zKQogICAgICAgICAgICAgICAgbmV3X3BhcmFtcy51cGRhdGUoewogICAgICAgICAgICAgICAgICAgICdyZXN1bHRSZWNvcmRDb3VudCc6IGxpbWl0LAogICAgICAgICAgICAgICAgICAgICdyZXN1bHRPZmZzZXQnOiBvZmZzZXQKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICBzZWxmLl9mZXRjaChuZXdfcGFyYW1zLCBwLCB0b3RhbF9wYWdlPW51bV9wYWdlKQoKICAgICAgICBlbHNlOgogICAgICAgICAgICBuZXdfcGFyYW1zID0ge30KICAgICAgICAgICAgbmV3X3BhcmFtcy51cGRhdGUoc2VsZi5wYXJhbXMpCiAgICAgICAgICAgIG5ld19wYXJhbXMudXBkYXRlKHsKICAgICAgICAgICAgICAgICdyZXN1bHRSZWNvcmRDb3VudCc6IGxpbWl0CiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIHNlbGYuX2ZldGNoKHNlbGYucGFyYW1zLCAwKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuY3JlZGVudGlhbHMgPSBjcmVkZW50aWFscwogICAgICAgIHNlbGYucGFyYW1zID0gcGFyYW1zCiAgICAgICAgc2VsZi5vdXRwdXRfZGlyID0gb3V0cHV0X2RpcgogICAgICAgIHNlbGYub3V0cHV0X2Jhc2VuYW1lID0gb3V0cHV0X2Jhc2VuYW1lCjx8ZmltX2VuZHw+"]
["6b9c949821e3b6c79fd874ce4ac84de48172b0e2-1","6b9c949821e3b6c79fd874ce4ac84de48172b0e2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgdGltZQppbXBvcnQgYWtzaGFyZSBhcyBhawppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcyBhcyBwZApmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHB5cGxvdCBhcyBwbHQKZnJvbSBtcGxfdG9vbGtpdHMuYXhlc19ncmlkMSBpbXBvcnQgaG9zdF9zdWJwbG90CmZyb20gbXBsX3Rvb2xraXRzIGltcG9ydCBheGlzYXJ0aXN0CmltcG9ydCBtYXRwbG90bGliLmRhdGVzIGFzIG1kYXRlcwpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBpZiBsZW4oc3lzLmFyZ3YpIDwgMiA6CiAgICAgICAgcHJpbnQoIuayoeacieaMh+WummlkIikKICAgICAgICBzeXMuZXhpdCgpCgogICAgIyBnZXQgZ2QgY291bnQKICAgIHN0b2NrX3poX2FfZ2Roc19kZXRhaWxfZW1fZGYgPSBhay5zdG9ja196aF9hX2dkaHNfZGV0YWlsX2VtKHN5bWJvbD1zeXMuYXJndlsxXSkKICAgICNzdG9ja196aF9hX2dkaHNfZGV0YWlsX2VtX2RmWyfogqHkuJzmiLfmlbDnu5/orqHmiKrmraLml6UnXSA9IHN0b2NrX3poX2FfZ2Roc19kZXRhaWxfZW1fZGZbJ+iCoeS4nOaIt+aVsOe7n+iuoeaIquatouaXpSddLmFwcGx5KGxhbWJkYSB4Onguc3RyZnRpbWUoJyVZLSVtLSVkJykpCiAgICBzdG9ja196aF9hX2dkaHNfZGV0YWlsX2VtX2RmWyfogqHkuJzmiLfmlbAt5pys5qyhJ109c3RvY2tfemhfYV9nZGhzX2RldGFpbF9lbV9kZlsn6IKh5Lic5oi35pWwLeacrOasoSddLmFwcGx5KGxhbWJkYSB4Oih4LzEwMDAwKSkKICAgIHN0b2NrX3poX2FfZ2Roc19kZXRhaWxfZW1fZGZbJ+aIt+Wdh+aMgeiCoeaVsOmHjyddPXN0b2NrX3poX2FfZ2Roc19kZXRhaWxfZW1fZGZbJ+aIt+Wdh+aMgeiCoeaVsOmHjyddLmFwcGx5KGxhbWJkYSB4Oih4LzEwMDAwKSkKICAgIHN0b2NrX3poX2FfZ2Roc19kZXRhaWxfZW1fZGYgPSBzdG9ja196aF9hX2dkaHNfZGV0YWlsX2VtX2RmLnJlaW5kZXgoaW5kZXg9c3RvY2tfemhfYV9nZGhzX2RldGFpbF9lbV9kZi5pbmRleFs6Oi0xXSkKICAgIHByaW50KHN0b2NrX3poX2FfZ2Roc19kZXRhaWxfZW1fZGYpCgogICAgIyBnZXQgaGlzdG9yeQogICAgc3RhcnRfZGF0ZSA9IHN0b2NrX3poX2FfZ2Roc19kZXRhaWxfZW1fZGZbJ+iCoeS4nOaIt+aVsOe7n+iuoeaIquatouaXpSddLmlsb2NbMF0KICAgIHN0YXJ0X2RhdGUgPSBzdGFydF9kYXRlLnN0cmZ0aW1lKCclWSVtJWQnKQogICAgcHJpbnQoc3RhcnRfZGF0ZSkKCiAgICBlbmRfZGF0ZSA9IHRpbWUuc3RyZnRpbWUoIiVZJW0lZCIsIHRpbWUubG9jYWx0aW1lKCkpCgogICAgcHJpbnQoZW5kX2RhdGUpCgogICAgc3RvY2tfemhfYV9oaXN0X2RmID0gYWsuc3RvY2tfemhfYV9oaXN0KHN5bWJvbD1zeXMuYXJndlsxXSwgcGVyaW9kPSJkYWlseSIsIHN0YXJ0X2RhdGU9c3RhcnRfZGF0ZSwgZW5kX2RhdGU9ZW5kX2RhdGUsIGFkanVzdD0icWZxIikKICAgIHByaW50KHN0b2NrX3poX2FfaGlzdF9kZikKCiAgICAnJycKICAgICMgZ2V0IGRhdGUgZm9yIEJRKOWto+W6puacgOWQjuS4gOS4quW3peS9nOaXpSkgICAgCiAgICBzdGFydF9kYXRlID0gInt9L3t9L3t9Ii5mb3JtYXQoc3RhcnRfZGF0ZVs2Ol0sc3RhcnRfZGF0ZVs0OjZdLHN0YXJ0X2RhdGVbOjRdKQogICAgZW5kX2RhdGUgPSB0aW1lLnN0cmZ0aW1lKCIlZC8lbS8lWSIsIHRpbWUubG9jYWx0aW1lKCkpCiAgICBjYWw9cGQuZGF0ZV9yYW5nZShzdGFydF9kYXRlLGVuZF9kYXRlLGZyZXE9J0JRJykKICAgIGNhbF9kZj1jYWwudG9fZnJhbWUoaW5kZXg9RmFsc2UsbmFtZT0nRGF0ZScpCiAgICBjYWxfZGZbJ0RhdGUnXT1jYWxfZGZbJ0RhdGUnXS5hcHBseShsYW1iZGEgeDogZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCh4KS5kYXRlKCkpCiAgICBwcmludChjYWxfZGZbJ0RhdGUnXSkKICAgICcnJwoKICAgICMg5a2j5bqm5pyA5ZCO5bel5L2c5pel55qEaGlzdG9yeQogICAgc3RvY2tfemhfYV9oaXN0X2RmWyfml6XmnJ8nXSA9IHN0b2NrX3poX2FfaGlzdF9kZlsn5pel5pyfJ10uYXBwbHkobGFtYmRhIHg6IGRhdGV0aW1lLnN0cnB0aW1lKHgsICclWS0lbS0lZCcpLmRhdGUoKSkKICAgICNzdG9ja196aF9hX2hpc3RfZGYgPSBzdG9ja196aF9hX2hpc3RfZGZbc3RvY2tfemhfYV9oaXN0X2RmWyfml6XmnJ8nXS5pc2luKGNhbF9kZlsnRGF0ZSddKV0KICAgIHByaW50KHN0b2NrX3poX2FfaGlzdF9kZikKCiAgICAKICAgICMgcGFpbnQKICAgIGZpZyA9IHBsdC5maWd1cmUoZmlnc2l6ZT0oMTQsNykpCiAgICBwbHQucmNQYXJhbXNbJ2ZvbnQuc2Fucy1zZXJpZiddPVsnU2ltSGVpJ10gI+aYvuekuuS4reaWh+agh+etvgogICAgcGx0LnJjUGFyYW1zWydheGVzLnVuaWNvZGVfbWludXMnXT1GYWxzZQoKICAgIGhvc3QgPSBob3N0X3N1YnBsb3QoMTExLGF4ZXNfY2xhc3M9YXhpc2FydGlzdC5BeGVzLGZpZ3VyZT1maWcpCgogICAgcGFyMSA9IGhvc3QudHdpbngoKQogICAgcGFyMiA9IGhvc3QudHdpbngoKQogICAgcGFyMyA9IGhvc3QudHdpbngoKQoKICAgIHBhcjIuYXhpc1sncmlnaHQnXSA9IHBhcjIubmV3X2ZpeGVkX2F4aXMobG9jPSJyaWdodCIsIG9mZnNldD0oNjAsMCkpCgogICAgcGFyMS5heGlzWyJyaWdodCJdLnRvZ2dsZShhbGw9VHJ1ZSkKICAgIHBhcjIuYXhpc1sicmlnaHQiXS50b2dnbGUoYWxsPVRydWUpCgoKICAgIHAxLCA9IGhvc3QucGxvdChzdG9ja196aF9hX2hpc3RfZGZbJ+aXpeacnyddLHN0b2NrX3poX2FfaGlzdF9kZlsn5pS255uYJ10sbGFiZWw9IuWOhuWPsuihjOaDhSIpCiAgICBwMiwgPSBwYXIxLnBsb3Qoc3RvY2tfemhfYV9nZGhzX2RldGFpbF9lbV9kZlsn6IKh5Lic5oi35pWw57uf6K6h5oiq5q2i5pelJ10sc3RvY2tfemhfYV9nZGhzX2RldGFpbF9lbV9kZlsn6IKh5Lic5oi35pWwLeacrOasoSddLGxhYmVsPSLogqHkuJzmiLfmlbAo5LiHKSIpCiAgICBwMywgPSBwYXIyLnBsb3Qoc3RvY2tfemhfYV9nZGhzX2RldGFpbF9lbV9kZlsn6IKh5Lic5oi35pWw57uf6K6h5oiq5q2i5pelJ10sc3RvY2tfemhfYV9nZGhzX2RldGFpbF9lbV9kZlsn5oi35Z2H5oyB6IKh5pWw6YePJ10sbGFiZWw9IuaIt+Wdh+aMgeiCoeaVsOmHjyjkuIcpIikKCiAgICAnJycKICAgIGhvc3Quc2V0X3hsaW0oMCwgMikKICAgIGhvc3Quc2V0X3lsaW0oMCwgMikKICAgIHBhcjEuc2V0X3lsaW0oMCwgNCkKICAgIHBhcjIuc2V0X3lsaW0oMSwgNjUpCiAgICAnJycKICAgIGhvc3Quc2V0X3hsYWJlbCgi5pel5pyfIikKICAgIGhvc3QueGF4aXMuc2V0X21ham9yX2xvY2F0b3IobWRhdGVzLk1vbnRoTG9jYXRvcihpbnRlcnZhbD0zKSkKICAgIGhvc3QuYXhpc1snYm90dG9tJ10ubWFqb3JfdGlja2xhYmVscy5zZXRfcm90YXRpb24oLTQ1KQoKICAgIGhvc3Quc2V0X3RpdGxlKHN5cy5hcmd2WzFdKyLooYzmg4XlkozogqHkuJzkv6Hmga8iKQogICAgaG9zdC5zZXRfeWxhYmVsKCLmlLbnm5giKQogICAgcGFyMS5zZXRfeWxhYmVsKCLogqHkuJzmiLfmlbAo5LiHKSIpCjx8ZmltX2hvbGV8PgogICAgcGFyMS5heGlzWyJyaWdodCJdLmxhYmVsLnNldF9jb2xvcihwMi5nZXRfY29sb3IoKSkKICAgIHBhcjIuYXhpc1sicmlnaHQiXS5sYWJlbC5zZXRfY29sb3IocDMuZ2V0X2NvbG9yKCkpCiAgICBwbHQuc2hvdygpCjx8ZmltX3N1ZmZpeHw+CiAgICBwYXIyLnNldF95bGFiZWwoIuaIt+Wdh+aMgeiCoeaVsOmHjyjkuIcpIikKCiAgICBob3N0LmxlZ2VuZCgpCiAgICBob3N0LmF4aXNbImxlZnQiXS5sYWJlbC5zZXRfY29sb3IocDEuZ2V0X2NvbG9yKCkpCjx8ZmltX2VuZHw+"]
["c19990da388ab5d63067b5e7bfc16d6f82f5e81b-1","c19990da388ab5d63067b5e7bfc16d6f82f5e81b","PHxmaW1fcHJlZml4fD4KZnJvbSBzY2VuYXJpb3MgaW1wb3J0ICoKCnNjZW5hcmlvID0gKAogICAgc2VuZF9zdGFuemEoIjxpcSB0eXBlPSdnZXQnIGlkPSdpZDEnIGZyb209J3tqaWRfb25lfS97cmVzb3VyY2Vfb25lfScgdG89JyNmb28le2lyY19zZXJ2ZXJfb25lfSc+PHF1ZXJ5IHhtbG5zPSdodHRwOi8vamFiYmVyLm9yZy9wcm90b2NvbC9tdWMjb3duZXInLz48L2lxPiIpLAogICAgZXhwZWN0X3N0YW56YSgiL2lxW0B0eXBlPSdyZXN1bHQnXS9tdWNfb3duZXI6cXVlcnkiLAogICAgICAgICAgICAgICAgICAiL2lxL211Y19vd25lcjpxdWVyeS9kYXRhZm9ybTp4W0B0eXBlPSdmb3JtJ10vZGF0YWZvcm06ZmllbGRbQHR5cGU9J3RleHQtc2luZ2xlJ11bQHZhcj0nZW5jb2RpbmdfaW4nXSIsCiAgICAgICAgICAgICAgICAgICIvaXEvbXVjX293bmVyOnF1ZXJ5L2RhdGFmb3JtOnhbQHR5cGU9J2Zvcm0nXS9kYXRhZm9ybTpmaWVsZFtAdHlwZT0ndGV4dC1zaW5nbGUnXVtAdmFyPSdlbmNvZGluZ19vdXQnXSIsCgogICAgICAgICAgICAgICAgICApLAogICAgc2VuZF9zdGFuemEoIjxpcSB0eXBlPSdzZXQnIGlkPSdpZDInIGZyb209J3tqaWRfb25lfS97cmVzb3VyY2Vfb25lfScgdG89JyNmb28le2lyY19zZXJ2ZXJfb25lfSc+IgogICAgICAgICAgICAgICAgIjxxdWVyeSB4bWxucz0naHR0cDovL2phYmJlci5vcmcvcHJvdG9jb2wvbXVjI293bmVyJz4iCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICI8eCB4bWxucz0namFiYmVyOng6ZGF0YScgdHlwZT0nc3VibWl0Jz4iCiAgICAgICAgICAgICAgICAiPGZpZWxkIHZhcj0ncG9ydHMnIC8+IgogICAgICAgICAgICAgICAgIjxmaWVsZCB2YXI9J2VuY29kaW5nX291dCc+PHZhbHVlPlVURi04PC92YWx1ZT48L2ZpZWxkPiIKICAgICAgICAgICAgICAgICI8ZmllbGQgdmFyPSdlbmNvZGluZ19pbic+PHZhbHVlPmxhdGluLTE8L3ZhbHVlPjwvZmllbGQ+Igo8fGZpbV9lbmR8Pg=="]
["c19990da388ab5d63067b5e7bfc16d6f82f5e81b-2","c19990da388ab5d63067b5e7bfc16d6f82f5e81b","PHxmaW1fcHJlZml4fD4KZnJvbSBzY2VuYXJpb3MgaW1wb3J0ICoKCnNjZW5hcmlvID0gKAogICAgc2VuZF9zdGFuemEoIjxpcSB0eXBlPSdnZXQnIGlkPSdpZDEnIGZyb209J3tqaWRfb25lfS97cmVzb3VyY2Vfb25lfScgdG89JyNmb28le2lyY19zZXJ2ZXJfb25lfSc+PHF1ZXJ5IHhtbG5zPSdodHRwOi8vamFiYmVyLm9yZy9wcm90b2NvbC9tdWMjb3duZXInLz48L2lxPiIpLAogICAgZXhwZWN0X3N0YW56YSgiL2lxW0B0eXBlPSdyZXN1bHQnXS9tdWNfb3duZXI6cXVlcnkiLAogICAgICAgICAgICAgICAgICAiL2lxL211Y19vd25lcjpxdWVyeS9kYXRhZm9ybTp4W0B0eXBlPSdmb3JtJ10vZGF0YWZvcm06ZmllbGRbQHR5cGU9J3RleHQtc2luZ2xlJ11bQHZhcj0nZW5jb2RpbmdfaW4nXSIsCiAgICAgICAgICAgICAgICAgICIvaXEvbXVjX293bmVyOnF1ZXJ5L2RhdGFmb3JtOnhbQHR5cGU9J2Zvcm0nXS9kYXRhZm9ybTpmaWVsZFtAdHlwZT0ndGV4dC1zaW5nbGUnXVtAdmFyPSdlbmNvZGluZ19vdXQnXSIsCgogICAgICAgICAgICAgICAgICApLAogICAgc2VuZF9zdGFuemEoIjxpcSB0eXBlPSdzZXQnIGlkPSdpZDInIGZyb209J3tqaWRfb25lfS97cmVzb3VyY2Vfb25lfScgdG89JyNmb28le2lyY19zZXJ2ZXJfb25lfSc+IgogICAgICAgICAgICAgICAgIjxxdWVyeSB4bWxucz0naHR0cDovL2phYmJlci5vcmcvcHJvdG9jb2wvbXVjI293bmVyJz4iCiAgICAgICAgICAgICAgICAiPHggeG1sbnM9J2phYmJlcjp4OmRhdGEnIHR5cGU9J3N1Ym1pdCc+IgogICAgICAgICAgICAgICAgIjxmaWVsZCB2YXI9J3BvcnRzJyAvPiIKICAgICAgICAgICAgICAgICI8ZmllbGQgdmFyPSdlbmNvZGluZ19vdXQnPjx2YWx1ZT5VVEYtODwvdmFsdWU+PC9maWVsZD4iCiAgICAgICAgICAgICAgICAiPGZpZWxkIHZhcj0nZW5jb2RpbmdfaW4nPjx2YWx1ZT5sYXRpbi0xPC92YWx1ZT48L2ZpZWxkPiIKICAgICAgICAgICAgICAgICI8L3g+PC9xdWVyeT48L2lxPiIpLAogICAgZXhwZWN0X3N0YW56YSgiL2lxW0B0eXBlPSdyZXN1bHQnXSIpLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBzZW5kX3N0YW56YSgiPGlxIHR5cGU9J3NldCcgaWQ9J2lkMycgZnJvbT0ne2ppZF9vbmV9L3tyZXNvdXJjZV9vbmV9JyB0bz0nI2ZvbyV7aXJjX3NlcnZlcl9vbmV9Jz48cXVlcnkgeG1sbnM9J2h0dHA6Ly9qYWJiZXIub3JnL3Byb3RvY29sL211YyNvd25lcic+ICAgIDx4IHhtbG5zPSdqYWJiZXI6eDpkYXRhJyB0eXBlPSdjYW5jZWwnLz48L3F1ZXJ5PjwvaXE+IiksCiAgICBleHBlY3Rfc3RhbnphKCIvaXFbQHR5cGU9J3Jlc3VsdCddIiksCjx8ZmltX2VuZHw+"]
["c19990da388ab5d63067b5e7bfc16d6f82f5e81b-3","c19990da388ab5d63067b5e7bfc16d6f82f5e81b","PHxmaW1fcHJlZml4fD4KZnJvbSBzY2VuYXJpb3MgaW1wb3J0ICoKCjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgICAiL2lxL211Y19vd25lcjpxdWVyeS9kYXRhZm9ybTp4W0B0eXBlPSdmb3JtJ10vZGF0YWZvcm06ZmllbGRbQHR5cGU9J3RleHQtc2luZ2xlJ11bQHZhcj0nZW5jb2Rpbmdfb3V0J10iLAoKICAgICAgICAgICAgICAgICAgKSwKICAgIHNlbmRfc3RhbnphKCI8aXEgdHlwZT0nc2V0JyBpZD0naWQyJyBmcm9tPSd7amlkX29uZX0ve3Jlc291cmNlX29uZX0nIHRvPScjZm9vJXtpcmNfc2VydmVyX29uZX0nPiIKICAgICAgICAgICAgICAgICI8cXVlcnkgeG1sbnM9J2h0dHA6Ly9qYWJiZXIub3JnL3Byb3RvY29sL211YyNvd25lcic+IgogICAgICAgICAgICAgICAgIjx4IHhtbG5zPSdqYWJiZXI6eDpkYXRhJyB0eXBlPSdzdWJtaXQnPiIKICAgICAgICAgICAgICAgICI8ZmllbGQgdmFyPSdwb3J0cycgLz4iCiAgICAgICAgICAgICAgICAiPGZpZWxkIHZhcj0nZW5jb2Rpbmdfb3V0Jz48dmFsdWU+VVRGLTg8L3ZhbHVlPjwvZmllbGQ+IgogICAgICAgICAgICAgICAgIjxmaWVsZCB2YXI9J2VuY29kaW5nX2luJz48dmFsdWU+bGF0aW4tMTwvdmFsdWU+PC9maWVsZD4iCiAgICAgICAgICAgICAgICAiPC94PjwvcXVlcnk+PC9pcT4iKSwKICAgIGV4cGVjdF9zdGFuemEoIi9pcVtAdHlwZT0ncmVzdWx0J10iKSwKICAgIHNlbmRfc3RhbnphKCI8aXEgdHlwZT0nc2V0JyBpZD0naWQzJyBmcm9tPSd7amlkX29uZX0ve3Jlc291cmNlX29uZX0nIHRvPScjZm9vJXtpcmNfc2VydmVyX29uZX0nPjxxdWVyeSB4bWxucz0naHR0cDovL2phYmJlci5vcmcvcHJvdG9jb2wvbXVjI293bmVyJz4gICAgPHggeG1sbnM9J2phYmJlcjp4OmRhdGEnIHR5cGU9J2NhbmNlbCcvPjwvcXVlcnk+PC9pcT4iKSwKICAgIGV4cGVjdF9zdGFuemEoIi9pcVtAdHlwZT0ncmVzdWx0J10iKSwKKQo8fGZpbV9zdWZmaXh8PgpzY2VuYXJpbyA9ICgKICAgIHNlbmRfc3RhbnphKCI8aXEgdHlwZT0nZ2V0JyBpZD0naWQxJyBmcm9tPSd7amlkX29uZX0ve3Jlc291cmNlX29uZX0nIHRvPScjZm9vJXtpcmNfc2VydmVyX29uZX0nPjxxdWVyeSB4bWxucz0naHR0cDovL2phYmJlci5vcmcvcHJvdG9jb2wvbXVjI293bmVyJy8+PC9pcT4iKSwKICAgIGV4cGVjdF9zdGFuemEoIi9pcVtAdHlwZT0ncmVzdWx0J10vbXVjX293bmVyOnF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgIi9pcS9tdWNfb3duZXI6cXVlcnkvZGF0YWZvcm06eFtAdHlwZT0nZm9ybSddL2RhdGFmb3JtOmZpZWxkW0B0eXBlPSd0ZXh0LXNpbmdsZSddW0B2YXI9J2VuY29kaW5nX2luJ10iLAo8fGZpbV9lbmR8Pg=="]
["c19990da388ab5d63067b5e7bfc16d6f82f5e81b-4","c19990da388ab5d63067b5e7bfc16d6f82f5e81b","PHxmaW1fcHJlZml4fD4KZnJvbSBzY2VuYXJpb3MgaW1wb3J0ICoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKc2NlbmFyaW8gPSAoCiAgICBzZW5kX3N0YW56YSgiPGlxIHR5cGU9J2dldCcgaWQ9J2lkMScgZnJvbT0ne2ppZF9vbmV9L3tyZXNvdXJjZV9vbmV9JyB0bz0nI2ZvbyV7aXJjX3NlcnZlcl9vbmV9Jz48cXVlcnkgeG1sbnM9J2h0dHA6Ly9qYWJiZXIub3JnL3Byb3RvY29sL211YyNvd25lcicvPjwvaXE+IiksCiAgICBleHBlY3Rfc3RhbnphKCIvaXFbQHR5cGU9J3Jlc3VsdCddL211Y19vd25lcjpxdWVyeSIsCjx8ZmltX2VuZHw+"]
["972b1002f8ca04f79ea0887316a7b738ccdbcb10-1","972b1002f8ca04f79ea0887316a7b738ccdbcb10","PHxmaW1fcHJlZml4fD4KZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKCmZyb20gc2NpcHkuc3RhdHMgaW1wb3J0IG5vcm0KCmZyb20gc2dsZF90ZXN0LmNvbnN0YW50cyBpbXBvcnQgU0lHTUFfeCwgU0lHTUFfMgoKZnJvbSBzZ2xkX3Rlc3QuZ3JhZGllbnRzX29mX2xpa2VsaWhvb2QgaW1wb3J0IG1hbnVhbF9ncmFkCgoKX19hdXRob3JfXyA9ICdrY3gnCgpmcm9tIGF1dG9ncmFkIGltcG9ydCBncmFkCmZyb20gbnVtcHkudGVzdGluZyBpbXBvcnQgYXNzZXJ0X2FsbW9zdF9lcXVhbApmcm9tIHNnbGRfdGVzdC5saWtlbGlob29kcyBpbXBvcnQgX2xvZ19saWsKaW1wb3J0IHNlYWJvcm4gYXMgc25zOwoKc25zLnNldChjb2xvcl9jb2Rlcz1UcnVlKQppbXBvcnQgYXV0b2dyYWQubnVtcHkgYXMgbnAgICMgVGhpbmx5LXdyYXBwZWQgdmVyc2lvbiBvZiBOdW1weQoKCgoKZGVmIHNjYWxhcl9sb2dfbGlrKHRoZXRhXzEsIHRoZXRhXzIsIHgpOgogICAgYXJnID0gKHggLSB0aGV0YV8xKQogICAgbGlrMSA9IDEuMCAvIG5wLnNxcnQoMiAqIFNJR01BX3ggKiogMiAqIG5wLnBpKSAqIG5wLmV4cCgtIG5wLmRvdChhcmcsIGFyZykgLyAoMiAqIFNJR01BX3ggKiogMikpCiAgICBhcmcgPSAoeCAtIHRoZXRhXzEgLSB0aGV0YV8yKQogICAgbGlrMiA9IDEuMCAvIG5wLnNxcnQoMiAqIFNJR01BX3ggKiogMiAqIG5wLnBpKSAqIG5wLmV4cCgtIG5wLmRvdChhcmcsIGFyZykgLyAoMiAqIFNJR01BX3ggKiogMikpCgogICAgcmV0dXJuIG5wLmxvZygwLjUgKiBsaWsxICsgMC41ICogbGlrMikKCgoKCmdyYWRfdGhlX2xvZ19kZW5zaXR5X3ggPSBncmFkKHNjYWxhcl9sb2dfbGlrLCAwKQpncmFkX3RoZV9sb2dfZGVuc2l0eV95ID0gZ3JhZChzY2FsYXJfbG9nX2xpaywgMSkKCgpkZWYgcHJpb3IybWFuKHRoZXRhXzIpOgogICAgcmV0dXJuIG5wLmxvZygxLjAvKFNJR01BXzIqbnAuc3FydCgyKm5wLnBpKSkgKiBucC5leHAoIC0gdGhldGFfMioqMi8oMipTSUdNQV8yKioyKSkpCgoKZGVmIHByaW9yMih0aGV0YV8yKToKICAgIHJldHVybiBucC5sb2cobm9ybS5wZGYodGhldGFfMiwwLCBTSUdNQV8yKSkKCmdyYWRfbG9nX3ByaW9yID0gZ3JhZChwcmlvcjJtYW4pCgoKZGVmIG1hbl9ncmFkX2xvZ19wcmlvcih0aGV0YTIpOgogICAgcmV0dXJuIC10aGV0YTIvU0lHTUFfMgoKY2xhc3MgVGVzdE1hbnVhbExpa2VsaWhvb2RzKFRlc3RDYXNlKToKCiAgICBkZWYgdGVzdF9wcmlvcihzZWxmKToKICAgICAgICBhc3NlcnRfYWxtb3N0X2VxdWFsKHByaW9yMm1hbigxLjIpLHByaW9yMigxLjIpKQoKICAgIGRlZiB0ZXN0X3ByaW9yX2dyYWQoc2VsZik6CiAgICAgICAgYXNzZXJ0X2FsbW9zdF9lcXVhbChtYW5fZ3JhZF9sb2dfcHJpb3IoMS4xKSxncmFkX2xvZ19wcmlvcigxLjEpKQoKICAgIGRlZiB0ZXN0X2xvZ19saWsoc2VsZik6CiAgICAgICAgYXNzZXJ0X2FsbW9zdF9lcXVhbChzY2FsYXJfbG9nX2xpaygxLjAsIDIuMCwgMy4wKSwgX2xvZ19saWsoMS4wLCAyLjAsIDMuMCkpCgogICAgZGVmIHRlc3RfbXlfYXV0b2dyYWRfY29kZShzZWxmKToKICAgICAgICBhc3NlcnRfYWxtb3N0X2VxdWFsKGdyYWRfdGhlX2xvZ19kZW5zaXR5X3goMS4sIDIuLCAzLiksIDAuMjY4OTQxLCBkZWNpbWFsPTQpCiAgICAgICAgYXNzZXJ0X2FsbW9zdF9lcXVhbChncmFkX3RoZV9sb2dfZGVuc2l0eV95KDEuLCAzLiwgMy4pLCAtMC4zMzk1ODksIGRlY2ltYWw9NCkKCgoKCiAgICBkZWYgdGVzdF9tYW51YWxfZ3JhZGllbnQoc2VsZik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBhc3NlcnRfYWxtb3N0X2VxdWFsKGdyYWRfdGhlX2xvZ19kZW5zaXR5X3goMS4sIDMuLCAzLiksIG1hbnVhbF9ncmFkKDEuLCAzLiwgMy4pWzBdKQogICAgICAgIGFzc2VydF9hbG1vc3RfZXF1YWwoZ3JhZF90aGVfbG9nX2RlbnNpdHlfeSgxLiwgMy4sIDMuKSwgbWFudWFsX2dyYWQoMS4sIDMuLCAzLilbMV0pCgo8fGZpbV9lbmR8Pg=="]
["972b1002f8ca04f79ea0887316a7b738ccdbcb10-2","972b1002f8ca04f79ea0887316a7b738ccdbcb10","PHxmaW1fcHJlZml4fD4KZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKCmZyb20gc2NpcHkuc3RhdHMgaW1wb3J0IG5vcm0KCmZyb20gc2dsZF90ZXN0LmNvbnN0YW50cyBpbXBvcnQgU0lHTUFfeCwgU0lHTUFfMgoKZnJvbSBzZ2xkX3Rlc3QuZ3JhZGllbnRzX29mX2xpa2VsaWhvb2QgaW1wb3J0IG1hbnVhbF9ncmFkCgoKX19hdXRob3JfXyA9ICdrY3gnCgpmcm9tIGF1dG9ncmFkIGltcG9ydCBncmFkCmZyb20gbnVtcHkudGVzdGluZyBpbXBvcnQgYXNzZXJ0X2FsbW9zdF9lcXVhbApmcm9tIHNnbGRfdGVzdC5saWtlbGlob29kcyBpbXBvcnQgX2xvZ19saWsKaW1wb3J0IHNlYWJvcm4gYXMgc25zOwoKc25zLnNldChjb2xvcl9jb2Rlcz1UcnVlKQppbXBvcnQgYXV0b2dyYWQubnVtcHkgYXMgbnAgICMgVGhpbmx5LXdyYXBwZWQgdmVyc2lvbiBvZiBOdW1weQoKCgo8fGZpbV9ob2xlfD4KICAgIGFyZyA9ICh4IC0gdGhldGFfMSAtIHRoZXRhXzIpCiAgICBsaWsyID0gMS4wIC8gbnAuc3FydCgyICogU0lHTUFfeCAqKiAyICogbnAucGkpICogbnAuZXhwKC0gbnAuZG90KGFyZywgYXJnKSAvICgyICogU0lHTUFfeCAqKiAyKSkKCiAgICByZXR1cm4gbnAubG9nKDAuNSAqIGxpazEgKyAwLjUgKiBsaWsyKQoKCgoKZ3JhZF90aGVfbG9nX2RlbnNpdHlfeCA9IGdyYWQoc2NhbGFyX2xvZ19saWssIDApCmdyYWRfdGhlX2xvZ19kZW5zaXR5X3kgPSBncmFkKHNjYWxhcl9sb2dfbGlrLCAxKQoKCmRlZiBwcmlvcjJtYW4odGhldGFfMik6CiAgICByZXR1cm4gbnAubG9nKDEuMC8oU0lHTUFfMipucC5zcXJ0KDIqbnAucGkpKSAqIG5wLmV4cCggLSB0aGV0YV8yKioyLygyKlNJR01BXzIqKjIpKSkKCgpkZWYgcHJpb3IyKHRoZXRhXzIpOgogICAgcmV0dXJuIG5wLmxvZyhub3JtLnBkZih0aGV0YV8yLDAsIFNJR01BXzIpKQoKZ3JhZF9sb2dfcHJpb3IgPSBncmFkKHByaW9yMm1hbikKCgpkZWYgbWFuX2dyYWRfbG9nX3ByaW9yKHRoZXRhMik6CiAgICByZXR1cm4gLXRoZXRhMi9TSUdNQV8yCgpjbGFzcyBUZXN0TWFudWFsTGlrZWxpaG9vZHMoVGVzdENhc2UpOgoKICAgIGRlZiB0ZXN0X3ByaW9yKHNlbGYpOgogICAgICAgIGFzc2VydF9hbG1vc3RfZXF1YWwocHJpb3IybWFuKDEuMikscHJpb3IyKDEuMikpCgogICAgZGVmIHRlc3RfcHJpb3JfZ3JhZChzZWxmKToKICAgICAgICBhc3NlcnRfYWxtb3N0X2VxdWFsKG1hbl9ncmFkX2xvZ19wcmlvcigxLjEpLGdyYWRfbG9nX3ByaW9yKDEuMSkpCgogICAgZGVmIHRlc3RfbG9nX2xpayhzZWxmKToKICAgICAgICBhc3NlcnRfYWxtb3N0X2VxdWFsKHNjYWxhcl9sb2dfbGlrKDEuMCwgMi4wLCAzLjApLCBfbG9nX2xpaygxLjAsIDIuMCwgMy4wKSkKCiAgICBkZWYgdGVzdF9teV9hdXRvZ3JhZF9jb2RlKHNlbGYpOgogICAgICAgIGFzc2VydF9hbG1vc3RfZXF1YWwoZ3JhZF90aGVfbG9nX2RlbnNpdHlfeCgxLiwgMi4sIDMuKSwgMC4yNjg5NDEsIGRlY2ltYWw9NCkKICAgICAgICBhc3NlcnRfYWxtb3N0X2VxdWFsKGdyYWRfdGhlX2xvZ19kZW5zaXR5X3koMS4sIDMuLCAzLiksIC0wLjMzOTU4OSwgZGVjaW1hbD00KQoKCgoKICAgIGRlZiB0ZXN0X21hbnVhbF9ncmFkaWVudChzZWxmKToKICAgICAgICBhc3NlcnRfYWxtb3N0X2VxdWFsKGdyYWRfdGhlX2xvZ19kZW5zaXR5X3goMS4sIDMuLCAzLiksIG1hbnVhbF9ncmFkKDEuLCAzLiwgMy4pWzBdKQogICAgICAgIGFzc2VydF9hbG1vc3RfZXF1YWwoZ3JhZF90aGVfbG9nX2RlbnNpdHlfeSgxLiwgMy4sIDMuKSwgbWFudWFsX2dyYWQoMS4sIDMuLCAzLilbMV0pCgogICAgZGVmIHRlc3RfdmVjdG9yX3ZlcnNpb24oc2VsZik6CiAgICAgICAgYXNzZXJ0X2FsbW9zdF9lcXVhbChtYW51YWxfZ3JhZCgxLiwgMy4sIG5wLmFycmF5KFsxLjAsIDMuMCwgNS4wXSkpWy0xXSwgbWFudWFsX2dyYWQoMS4sIDMuLCA1LikpCiAgICAgICAgYXNzZXJ0X2FsbW9zdF9lcXVhbChtYW51YWxfZ3JhZCgxLiwgMy4sIG5wLmFycmF5KFsxLjAsIDMuMCwgNS4wXSkpWzBdLCBtYW51YWxfZ3JhZCgxLiwgMy4sIDEuKSkKPHxmaW1fc3VmZml4fD4KCmRlZiBzY2FsYXJfbG9nX2xpayh0aGV0YV8xLCB0aGV0YV8yLCB4KToKICAgIGFyZyA9ICh4IC0gdGhldGFfMSkKICAgIGxpazEgPSAxLjAgLyBucC5zcXJ0KDIgKiBTSUdNQV94ICoqIDIgKiBucC5waSkgKiBucC5leHAoLSBucC5kb3QoYXJnLCBhcmcpIC8gKDIgKiBTSUdNQV94ICoqIDIpKQo8fGZpbV9lbmR8Pg=="]
["972b1002f8ca04f79ea0887316a7b738ccdbcb10-3","972b1002f8ca04f79ea0887316a7b738ccdbcb10","PHxmaW1fcHJlZml4fD4KZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKCmZyb20gc2NpcHkuc3RhdHMgaW1wb3J0IG5vcm0KCmZyb20gc2dsZF90ZXN0LmNvbnN0YW50cyBpbXBvcnQgU0lHTUFfeCwgU0lHTUFfMgo8fGZpbV9ob2xlfD4KX19hdXRob3JfXyA9ICdrY3gnCgpmcm9tIGF1dG9ncmFkIGltcG9ydCBncmFkCmZyb20gbnVtcHkudGVzdGluZyBpbXBvcnQgYXNzZXJ0X2FsbW9zdF9lcXVhbApmcm9tIHNnbGRfdGVzdC5saWtlbGlob29kcyBpbXBvcnQgX2xvZ19saWsKaW1wb3J0IHNlYWJvcm4gYXMgc25zOwoKc25zLnNldChjb2xvcl9jb2Rlcz1UcnVlKQppbXBvcnQgYXV0b2dyYWQubnVtcHkgYXMgbnAgICMgVGhpbmx5LXdyYXBwZWQgdmVyc2lvbiBvZiBOdW1weQoKCgoKZGVmIHNjYWxhcl9sb2dfbGlrKHRoZXRhXzEsIHRoZXRhXzIsIHgpOgogICAgYXJnID0gKHggLSB0aGV0YV8xKQogICAgbGlrMSA9IDEuMCAvIG5wLnNxcnQoMiAqIFNJR01BX3ggKiogMiAqIG5wLnBpKSAqIG5wLmV4cCgtIG5wLmRvdChhcmcsIGFyZykgLyAoMiAqIFNJR01BX3ggKiogMikpCiAgICBhcmcgPSAoeCAtIHRoZXRhXzEgLSB0aGV0YV8yKQogICAgbGlrMiA9IDEuMCAvIG5wLnNxcnQoMiAqIFNJR01BX3ggKiogMiAqIG5wLnBpKSAqIG5wLmV4cCgtIG5wLmRvdChhcmcsIGFyZykgLyAoMiAqIFNJR01BX3ggKiogMikpCgogICAgcmV0dXJuIG5wLmxvZygwLjUgKiBsaWsxICsgMC41ICogbGlrMikKCgoKCmdyYWRfdGhlX2xvZ19kZW5zaXR5X3ggPSBncmFkKHNjYWxhcl9sb2dfbGlrLCAwKQpncmFkX3RoZV9sb2dfZGVuc2l0eV95ID0gZ3JhZChzY2FsYXJfbG9nX2xpaywgMSkKCgpkZWYgcHJpb3IybWFuKHRoZXRhXzIpOgogICAgcmV0dXJuIG5wLmxvZygxLjAvKFNJR01BXzIqbnAuc3FydCgyKm5wLnBpKSkgKiBucC5leHAoIC0gdGhldGFfMioqMi8oMipTSUdNQV8yKioyKSkpCgoKZGVmIHByaW9yMih0aGV0YV8yKToKICAgIHJldHVybiBucC5sb2cobm9ybS5wZGYodGhldGFfMiwwLCBTSUdNQV8yKSkKCmdyYWRfbG9nX3ByaW9yID0gZ3JhZChwcmlvcjJtYW4pCgoKZGVmIG1hbl9ncmFkX2xvZ19wcmlvcih0aGV0YTIpOgogICAgcmV0dXJuIC10aGV0YTIvU0lHTUFfMgoKY2xhc3MgVGVzdE1hbnVhbExpa2VsaWhvb2RzKFRlc3RDYXNlKToKCiAgICBkZWYgdGVzdF9wcmlvcihzZWxmKToKICAgICAgICBhc3NlcnRfYWxtb3N0X2VxdWFsKHByaW9yMm1hbigxLjIpLHByaW9yMigxLjIpKQoKICAgIGRlZiB0ZXN0X3ByaW9yX2dyYWQoc2VsZik6CiAgICAgICAgYXNzZXJ0X2FsbW9zdF9lcXVhbChtYW5fZ3JhZF9sb2dfcHJpb3IoMS4xKSxncmFkX2xvZ19wcmlvcigxLjEpKQoKICAgIGRlZiB0ZXN0X2xvZ19saWsoc2VsZik6CiAgICAgICAgYXNzZXJ0X2FsbW9zdF9lcXVhbChzY2FsYXJfbG9nX2xpaygxLjAsIDIuMCwgMy4wKSwgX2xvZ19saWsoMS4wLCAyLjAsIDMuMCkpCgogICAgZGVmIHRlc3RfbXlfYXV0b2dyYWRfY29kZShzZWxmKToKICAgICAgICBhc3NlcnRfYWxtb3N0X2VxdWFsKGdyYWRfdGhlX2xvZ19kZW5zaXR5X3goMS4sIDIuLCAzLiksIDAuMjY4OTQxLCBkZWNpbWFsPTQpCiAgICAgICAgYXNzZXJ0X2FsbW9zdF9lcXVhbChncmFkX3RoZV9sb2dfZGVuc2l0eV95KDEuLCAzLiwgMy4pLCAtMC4zMzk1ODksIGRlY2ltYWw9NCkKCgoKCiAgICBkZWYgdGVzdF9tYW51YWxfZ3JhZGllbnQoc2VsZik6CiAgICAgICAgYXNzZXJ0X2FsbW9zdF9lcXVhbChncmFkX3RoZV9sb2dfZGVuc2l0eV94KDEuLCAzLiwgMy4pLCBtYW51YWxfZ3JhZCgxLiwgMy4sIDMuKVswXSkKICAgICAgICBhc3NlcnRfYWxtb3N0X2VxdWFsKGdyYWRfdGhlX2xvZ19kZW5zaXR5X3koMS4sIDMuLCAzLiksIG1hbnVhbF9ncmFkKDEuLCAzLiwgMy4pWzFdKQoKICAgIGRlZiB0ZXN0X3ZlY3Rvcl92ZXJzaW9uKHNlbGYpOgogICAgICAgIGFzc2VydF9hbG1vc3RfZXF1YWwobWFudWFsX2dyYWQoMS4sIDMuLCBucC5hcnJheShbMS4wLCAzLjAsIDUuMF0pKVstMV0sIG1hbnVhbF9ncmFkKDEuLCAzLiwgNS4pKQogICAgICAgIGFzc2VydF9hbG1vc3RfZXF1YWwobWFudWFsX2dyYWQoMS4sIDMuLCBucC5hcnJheShbMS4wLCAzLjAsIDUuMF0pKVswXSwgbWFudWFsX2dyYWQoMS4sIDMuLCAxLikpCjx8ZmltX3N1ZmZpeHw+Cgpmcm9tIHNnbGRfdGVzdC5ncmFkaWVudHNfb2ZfbGlrZWxpaG9vZCBpbXBvcnQgbWFudWFsX2dyYWQKCgo8fGZpbV9lbmR8Pg=="]
["972b1002f8ca04f79ea0887316a7b738ccdbcb10-4","972b1002f8ca04f79ea0887316a7b738ccdbcb10","PHxmaW1fcHJlZml4fD4KZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKCmZyb20gc2NpcHkuc3RhdHMgaW1wb3J0IG5vcm0KCmZyb20gc2dsZF90ZXN0LmNvbnN0YW50cyBpbXBvcnQgU0lHTUFfeCwgU0lHTUFfMgoKZnJvbSBzZ2xkX3Rlc3QuZ3JhZGllbnRzX29mX2xpa2VsaWhvb2QgaW1wb3J0IG1hbnVhbF9ncmFkCgoKX19hdXRob3JfXyA9ICdrY3gnCgpmcm9tIGF1dG9ncmFkIGltcG9ydCBncmFkCmZyb20gbnVtcHkudGVzdGluZyBpbXBvcnQgYXNzZXJ0X2FsbW9zdF9lcXVhbApmcm9tIHNnbGRfdGVzdC5saWtlbGlob29kcyBpbXBvcnQgX2xvZ19saWsKaW1wb3J0IHNlYWJvcm4gYXMgc25zOwoKc25zLnNldChjb2xvcl9jb2Rlcz1UcnVlKQppbXBvcnQgYXV0b2dyYWQubnVtcHkgYXMgbnAgICMgVGhpbmx5LXdyYXBwZWQgdmVyc2lvbiBvZiBOdW1weQoKCgoKZGVmIHNjYWxhcl9sb2dfbGlrKHRoZXRhXzEsIHRoZXRhXzIsIHgpOgogICAgYXJnID0gKHggLSB0aGV0YV8xKQogICAgbGlrMSA9IDEuMCAvIG5wLnNxcnQoMiAqIFNJR01BX3ggKiogMiAqIG5wLnBpKSAqIG5wLmV4cCgtIG5wLmRvdChhcmcsIGFyZykgLyAoMiAqIFNJR01BX3ggKiogMikpCiAgICBhcmcgPSAoeCAtIHRoZXRhXzEgLSB0aGV0YV8yKQogICAgbGlrMiA9IDEuMCAvIG5wLnNxcnQoMiAqIFNJR01BX3ggKiogMiAqIG5wLnBpKSAqIG5wLmV4cCgtIG5wLmRvdChhcmcsIGFyZykgLyAoMiAqIFNJR01BX3ggKiogMikpCgogICAgcmV0dXJuIG5wLmxvZygwLjUgKiBsaWsxICsgMC41ICogbGlrMikKCgoKCmdyYWRfdGhlX2xvZ19kZW5zaXR5X3ggPSBncmFkKHNjYWxhcl9sb2dfbGlrLCAwKQpncmFkX3RoZV9sb2dfZGVuc2l0eV95ID0gZ3JhZChzY2FsYXJfbG9nX2xpaywgMSkKCgpkZWYgcHJpb3IybWFuKHRoZXRhXzIpOgogICAgcmV0dXJuIG5wLmxvZygxLjAvKFNJR01BXzIqbnAuc3FydCgyKm5wLnBpKSkgKiBucC5leHAoIC0gdGhldGFfMioqMi8oMipTSUdNQV8yKioyKSkpCgoKZGVmIHByaW9yMih0aGV0YV8yKToKICAgIHJldHVybiBucC5sb2cobm9ybS5wZGYodGhldGFfMiwwLCBTSUdNQV8yKSkKCmdyYWRfbG9nX3ByaW9yID0gZ3JhZChwcmlvcjJtYW4pCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpkZWYgbWFuX2dyYWRfbG9nX3ByaW9yKHRoZXRhMik6CiAgICByZXR1cm4gLXRoZXRhMi9TSUdNQV8yCgo8fGZpbV9lbmR8Pg=="]
["972b1002f8ca04f79ea0887316a7b738ccdbcb10-5","972b1002f8ca04f79ea0887316a7b738ccdbcb10","PHxmaW1fcHJlZml4fD4KZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKCmZyb20gc2NpcHkuc3RhdHMgaW1wb3J0IG5vcm0KCmZyb20gc2dsZF90ZXN0LmNvbnN0YW50cyBpbXBvcnQgU0lHTUFfeCwgU0lHTUFfMgoKZnJvbSBzZ2xkX3Rlc3QuZ3JhZGllbnRzX29mX2xpa2VsaWhvb2QgaW1wb3J0IG1hbnVhbF9ncmFkCgoKX19hdXRob3JfXyA9ICdrY3gnCgpmcm9tIGF1dG9ncmFkIGltcG9ydCBncmFkCmZyb20gbnVtcHkudGVzdGluZyBpbXBvcnQgYXNzZXJ0X2FsbW9zdF9lcXVhbApmcm9tIHNnbGRfdGVzdC5saWtlbGlob29kcyBpbXBvcnQgX2xvZ19saWsKaW1wb3J0IHNlYWJvcm4gYXMgc25zOwoKc25zLnNldChjb2xvcl9jb2Rlcz1UcnVlKQppbXBvcnQgYXV0b2dyYWQubnVtcHkgYXMgbnAgICMgVGhpbmx5LXdyYXBwZWQgdmVyc2lvbiBvZiBOdW1weQoKCgoKZGVmIHNjYWxhcl9sb2dfbGlrKHRoZXRhXzEsIHRoZXRhXzIsIHgpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBhcmcgPSAoeCAtIHRoZXRhXzEpCiAgICBsaWsxID0gMS4wIC8gbnAuc3FydCgyICogU0lHTUFfeCAqKiAyICogbnAucGkpICogbnAuZXhwKC0gbnAuZG90KGFyZywgYXJnKSAvICgyICogU0lHTUFfeCAqKiAyKSkKICAgIGFyZyA9ICh4IC0gdGhldGFfMSAtIHRoZXRhXzIpCiAgICBsaWsyID0gMS4wIC8gbnAuc3FydCgyICogU0lHTUFfeCAqKiAyICogbnAucGkpICogbnAuZXhwKC0gbnAuZG90KGFyZywgYXJnKSAvICgyICogU0lHTUFfeCAqKiAyKSkKPHxmaW1fZW5kfD4="]
["bd91aa96db44a916ff379817e305ada11633dd11-1","bd91aa96db44a916ff379817e305ada11633dd11","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCjx8ZmltX2hvbGV8PgpDT05WRVJURURfV0VJR0hUU19PVVRfUEFUSCA9IHN5cy5hcmd2WzJdCgpzaW1zaWFtX3dlaWdodHMgPSB0b3JjaC5sb2FkKFNJTVNJQU1fV0VJR0hUU19QQVRILCBtYXBfbG9jYXRpb249J2NwdScpCgpzaW1zaWFtX3dlaWdodHMgPSB7CiAgICBrLnJlcGxhY2UoIm1vZHVsZS5lbmNvZGVyLiIsICJtb2RlbC4iKTogdgogICAgZm9yIGssIHYgaW4gc2ltc2lhbV93ZWlnaHRzWydzdGF0ZV9kaWN0J10uaXRlbXMoKQogICAgaWYgIm1vZHVsZS5lbmNvZGVyLiIgaW4gawp9CnRvcmNoLnNhdmUoc2ltc2lhbV93ZWlnaHRzLCBDT05WRVJURURfV0VJR0hUU19PVVRfUEFUSCkKPHxmaW1fc3VmZml4fD4KaW1wb3J0IHN5cwoKClNJTVNJQU1fV0VJR0hUU19QQVRIID0gc3lzLmFyZ3ZbMV0KPHxmaW1fZW5kfD4="]
["4132fae86a2da21007bbf954366fb1fcf64603bc-1","4132fae86a2da21007bbf954366fb1fcf64603bc","PHxmaW1fcHJlZml4fD4KZGVmIG1haW4oKToKICAgICMgVGhpcyBpcyBhIHNpbXBsZSBpbnRlZ2VyCiAgICB4ID0gMQoKICAgICMgSXRzIHZhbHVlIGNhbiB1c2VkIGFzIHBhcnQgb2YgZXhwcmVzc2lvbnMKICAgIGFzc2VydCB4ICsgMSA9PSAyCgogICAgIyBBbiBleHByZXNzaW9uIGNhbiBiZSBjaGFpbmVkIGluZGVmaW5pdGVseS4gVGhpcyBjb25jZXB0IG9mIGNoYWluaW5nCiAgICAjIGV4cHJlc3Npb25zIGlzIHBvd2VyZnVsIGJlY2F1c2UgaXQgYWxsb3dzIHVzIHRvIGNvbXBvc2Ugc2ltcGxlIHBpZWNlcwogICAgIyBvZiBjb2RlIGludG8gbGFyZ2VyIHBpZWNlcyBvZiBjb2RlIG92ZXIgdGltZQogICAgYXNzZXJ0IHggKiAyICogMiAqIDIgPT0gOAoKICAgICMgRGl2aXNpb24gaXMgYSBiaXQgdHJpY2t5IGluIFB5dGhvbiBiZWNhdXNlIGl0IHJldHVybnMgYSByZXN1bHQKICAgICMgb2YgdHlwZSAnZmxvYXQnIGJ5IGRlZmF1bHQKICAgIGFzc2VydCB4IC8gMiA9PSAwLjUKCiAgICAjIElmIGFuIGludGVnZXIgZGl2aXNpb24gaXMgZGVzaXJlZCwgdGhlbiBhbiBleHRyYSBzbGFzaCBtdXN0IGJlCiAgICAjIGFkZGVkIHRvIHRoZSBleHByZXNzaW9uCiAgICBhc3NlcnQgeCAvLyAyID09IDAKCiAgICAjIFBvd2VycyBvZiBhbiBpbnRlZ2VyIGNhbiBiZSBsZXZlcmFnZWQgdG9vLiBJZiBtb3JlIGZlYXR1cmVzIGFyZQogICAgIyBuZWVkZWQsIHRoZW4gbGV2ZXJhZ2UgdGhlIGJ1aWx0aW4gYG1hdGhgIGxpYnJhcnkgb3IgYSB0aGlyZC1wYXJ0eQogICAgIyBsaWJyYXJ5LiBPdGhlcndpc2UsIHdlIGhhdmUgdG8gYnVpbGQgb3VyIG93biBtYXRoIGxpYnJhcnkKICAgIGFzc2VydCB4ICogMiAqKiAzID09IDgKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBtYWluKCkKPHxmaW1fZW5kfD4="]
["4132fae86a2da21007bbf954366fb1fcf64603bc-2","4132fae86a2da21007bbf954366fb1fcf64603bc","PHxmaW1fcHJlZml4fD4KZGVmIG1haW4oKToKICAgICMgVGhpcyBpcyBhIHNpbXBsZSBpbnRlZ2VyCiAgICB4ID0gMQoKICAgICMgSXRzIHZhbHVlIGNhbiB1c2VkIGFzIHBhcnQgb2YgZXhwcmVzc2lvbnMKICAgIGFzc2VydCB4ICsgMSA9PSAyCgogICAgIyBBbiBleHByZXNzaW9uIGNhbiBiZSBjaGFpbmVkIGluZGVmaW5pdGVseS4gVGhpcyBjb25jZXB0IG9mIGNoYWluaW5nCiAgICAjIGV4cHJlc3Npb25zIGlzIHBvd2VyZnVsIGJlY2F1c2UgaXQgYWxsb3dzIHVzIHRvIGNvbXBvc2Ugc2ltcGxlIHBpZWNlcwogICAgIyBvZiBjb2RlIGludG8gbGFyZ2VyIHBpZWNlcyBvZiBjb2RlIG92ZXIgdGltZQogICAgYXNzZXJ0IHggKiAyICogMiAqIDIgPT0gOAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgIyBEaXZpc2lvbiBpcyBhIGJpdCB0cmlja3kgaW4gUHl0aG9uIGJlY2F1c2UgaXQgcmV0dXJucyBhIHJlc3VsdAogICAgIyBvZiB0eXBlICdmbG9hdCcgYnkgZGVmYXVsdAogICAgYXNzZXJ0IHggLyAyID09IDAuNQo8fGZpbV9lbmR8Pg=="]
["419534f7a34e941ec3dabb872ebfb5e5a035da47-1","419534f7a34e941ec3dabb872ebfb5e5a035da47","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGZpbGVpbnB1dAppbXBvcnQgaXRlcnRvb2xzCmltcG9ydCBzeXMKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQoKY2xhc3MgQ2hhcmFjdGVyOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGhwLCBtcCwgZG1nLCBhcm1vdXIpOgogICAgICAgICMgU3RhdHMKICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgc2VsZi5ocCA9IGhwCiAgICAgICAgc2VsZi5tcCA9IG1wCiAgICAgICAgc2VsZi5kbWcgPSBkbWcKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuYXJtb3VyID0gYXJtb3VyCgogICAgICAgICMgU3RhdHVzIEVmZmVjdHMKICAgICAgICBzZWxmLnNoaWVsZGVkID0gMAo8fGZpbV9lbmR8Pg=="]
["419534f7a34e941ec3dabb872ebfb5e5a035da47-2","419534f7a34e941ec3dabb872ebfb5e5a035da47","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGZpbGVpbnB1dAppbXBvcnQgaXRlcnRvb2xzCmltcG9ydCBzeXMKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQoKY2xhc3MgQ2hhcmFjdGVyOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGhwLCBtcCwgZG1nLCBhcm1vdXIpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIyBTdGF0cwogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICBzZWxmLmhwID0gaHAKICAgICAgICBzZWxmLm1wID0gbXAKPHxmaW1fZW5kfD4="]
["419534f7a34e941ec3dabb872ebfb5e5a035da47-3","419534f7a34e941ec3dabb872ebfb5e5a035da47","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGZpbGVpbnB1dAppbXBvcnQgaXRlcnRvb2xzCmltcG9ydCBzeXMKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQoKY2xhc3MgQ2hhcmFjdGVyOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGhwLCBtcCwgZG1nLCBhcm1vdXIpOgogICAgICAgICMgU3RhdHMKICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgc2VsZi5ocCA9IGhwCiAgICAgICAgc2VsZi5tcCA9IG1wCiAgICAgICAgc2VsZi5kbWcgPSBkbWcKICAgICAgICBzZWxmLmFybW91ciA9IGFybW91cgoKICAgICAgICAjIFN0YXR1cyBFZmZlY3RzCiAgICAgICAgc2VsZi5zaGllbGRlZCA9IDAKICAgICAgICBzZWxmLnBvaXNvbmVkID0gMAogICAgICAgIHNlbGYucmVjaGFyZ2luZyA9IDAKCiAgICBkZWYgcHJpbnRfcGxheWVyKHNlbGYpOgogICAgICAgIHByaW50ICd7fSBoYXMge30gaGl0IHBvaW50cywge30gbWFuYSwge30gYXJtb3VyJy5mb3JtYXQoc2VsZi5uYW1lLCBzZWxmLmhwLCBzZWxmLm1wLCBzZWxmLmFybW91cikKCiAgICBkZWYgcHJpbnRfYm9zcyhzZWxmKToKICAgICAgICBwcmludCAne30gaGFzIHt9IGhpdCBwb2ludHMnLmZvcm1hdChzZWxmLm5hbWUsIHNlbGYuaHApCgogICAgZGVmIHByb2Nlc3Nfc3RhdHVzKHNlbGYpOgogICAgICAgIGlmIHNlbGYuc2hpZWxkZWQ6CiAgICAgICAgICAgIHNlbGYuc2hpZWxkZWQgLT0gMQogICAgICAgICAgICBzZWxmLmFybW91ciA9IDcKICAgICAgICAgICAgIyBwcmludCAiU2hpZWxkJ3MgdGltZXIgaXMgbm93IHt9LiIuZm9ybWF0KHNlbGYuc2hpZWxkZWQpCiAgICAgICAgICAgIGlmIHNlbGYuc2hpZWxkZWQgPT0gMDoKICAgICAgICAgICAgICAgIHNlbGYuYXJtb3VyID0gMAogICAgICAgICAgICAgICAgIyBwcmludCAnU2hpZWxkIHdlYXJzIG9mZi4nCgogICAgICAgIGlmIHNlbGYucG9pc29uZWQ6Cjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIyBwcmludCAnUG9pc29uIGVmZmVjdHMgZXhwaXJlZC4nCgogICAgICAgIGlmIHNlbGYucmVjaGFyZ2luZzoKICAgICAgICAgICAgc2VsZi5yZWNoYXJnaW5nIC09IDEKICAgICAgICAgICAgc2VsZi5tcCArPSAxMDEKICAgICAgICAgICAgIyBwcmludCAnUmVjaGFyZ2UgcHJvdmlkZXMgMTAxIG1hbmE7IGl0cyB0aW1lciBpcyBub3cge30uJy5mb3JtYXQoc2VsZi5yZWNoYXJnaW5nKQogICAgICAgICAgICBpZiBzZWxmLnJlY2hhcmdpbmcgPT0gMDoKICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICMgcHJpbnQgJ1JlY2hhcmdlIHdlYXJzIG9mZi4nCgoKU3BlbGwgPSBuYW1lZHR1cGxlKCdTcGVsbCcsIFsnbmFtZScsICdjb3N0JywgJ2RtZycsICdoZWFsJywgJ2VmZmVjdCcsICdkdXJhdGlvbiddKQoKIyBNYWdpYyBNaXNzaWxlIGNvc3RzIDUzIG1hbmEuIEl0IGluc3RhbnRseSBkb2VzIDQgZGFtYWdlLgojIERyYWluIGNvc3RzIDczIG1hbmEuIEl0IGluc3RhbnRseSBkb2VzIDIgZGFtYWdlIGFuZCBoZWFscyB5b3UgZm9yIDIgaGl0IHBvaW50cy4KIyBTaGllbGQgY29zdHMgMTEzIG1hbmEuIEl0IHN0YXJ0cyBhbiBlZmZlY3QgdGhhdCBsYXN0cyBmb3IgNiB0dXJucy4gV2hpbGUgaXQgaXMgYWN0aXZlLCB5b3VyIGFybW9yIGlzIGluY3JlYXNlZCBieSA3LgojIFBvaXNvbiBjb3N0cyAxNzMgbWFuYS4gSXQgc3RhcnRzIGFuIGVmZmVjdCB0aGF0IGxhc3RzIGZvciA2IHR1cm5zLiBBdCB0aGUgc3RhcnQgb2YgZWFjaCB0dXJuIHdoaWxlIGl0IGlzIGFjdGl2ZSwgaXQgZGVhbHMgdGhlIGJvc3MgMyBkYW1hZ2UuCiMgUmVjaGFyZ2UgY29zdHMgMjI5IG1hbmEuIEl0IHN0YXJ0cyBhbiBlZmZlY3QgdGhhdCBsYXN0cyBmb3IgNSB0dXJucy4gQXQgdGhlIHN0YXJ0IG9mIGVhY2ggdHVybiB3aGlsZSBpdCBpcyBhY3RpdmUsIGl0IGdpdmVzIHlvdSAxMDEgbmV3IG1hbmEuClNQRUxMUyA9IFsKICAgIFNwZWxsKCdNaXNzbCcsICA1MywgNCwgMCwgICAgTm9uZSwgTm9uZSksCiAgICBTcGVsbCgnRHJhaW4nLCAgNzMsIDIsIDIsICAgIE5vbmUsIE5vbmUpLAogICAgU3BlbGwoJ1NoaWxkJywgMTEzLCAwLCAwLCAnc2hpZWxkZWQnLCA2KSwKICAgIFNwZWxsKCdQb2lzbicsIDE3MywgMCwgMCwgJ3BvaXNvbmVkJywgNiksCiAgICBTcGVsbCgnUmNocmcnLCAyMjksIDAsIDAsICdyZWNoYXJnZScsIDUpLApdCgoKZGVmIGJvc3NfZmlnaHQocGxheWVyLCBib3NzLCBzcGVsbF9vcmRlciwgaGFyZF9tb2RlPUZhbHNlKToKICAgIHNwZW50X21hbmEgPSAwCiAgICBlZmZlY3RzID0gW10KICAgICMgcHJpbnQgJywgJy5qb2luKHMubmFtZSBmb3IgcyBpbiBzcGVsbF9vcmRlcikKCiAgICBmb3Igc3BlbGwgaW4gc3BlbGxfb3JkZXI6CiAgICAgICAgaWYgaGFyZF9tb2RlOgogICAgICAgICAgICBwbGF5ZXIuaHAgLT0gMQogICAgICAgICAgICBpZiBwbGF5ZXIuaHAgPD0gMDoKICAgICAgICAgICAgICAgICMgcHJpbnQgJ1BsYXllciBkaWVkLiBHYW1lIG92ZXIuIDooJwogICAgICAgICAgICAgICAgcmV0dXJuIHN5cy5tYXhpbnQKCiAgICAgICAgIyBwcmludCAnLS0gUGxheWVyIFR1cm4gLS0nCiAgICAgICAgIyBwbGF5ZXIucHJpbnRfcGxheWVyKCkKICAgICAgICAjIGJvc3MucHJpbnRfYm9zcygpCgogICAgICAgIHBsYXllci5wcm9jZXNzX3N0YXR1cygpCiAgICAgICAgYm9zcy5wcm9jZXNzX3N0YXR1cygpCgoKICAgICAgICAjIFBpY2sgYSBzcGVsbCB0byB1c2UKICAgICAgICBpZiBzcGVsbC5jb3N0ID4gcGxheWVyLm1wOgogICAgICAgICAgICAjIHByaW50ICdOb3QgZW5vdWdoIG1hbmEgdG8gY2FzdC4nCiAgICAgICAgICAgIHJldHVybiBzeXMubWF4aW50CgogICAgICAgICMgRGlzYWxsb3cgcmVwZWF0ZWQgZWZmZWN0cwogICAgICAgIGlmIHNwZWxsLmVmZmVjdCA9PSAnc2hpZWxkZWQnIGFuZCBwbGF5ZXIuc2hpZWxkZWQ6CiAgICAgICAgICAgIHJldHVybiBzeXMubWF4aW50CiAgICAgICAgZWxpZiBzcGVsbC5lZmZlY3QgPT0gJ3BvaXNvbmVkJyBhbmQgYm9zcy5wb2lzb25lZDoKICAgICAgICAgICAgcmV0dXJuIHN5cy5tYXhpbnQKICAgICAgICBlbGlmIHNwZWxsLmVmZmVjdCA9PSAncmVjaGFyZ2UnIGFuZCBwbGF5ZXIucmVjaGFyZ2luZzoKICAgICAgICAgICAgcmV0dXJuIHN5cy5tYXhpbnQKCiAgICAgICAgIyBwcmludCAnPiBpS2V2aW5ZIGNhc3RlZCB7fSEnLmZvcm1hdChzcGVsbC5uYW1lKQogICAgICAgIHNwZW50X21hbmEgKz0gc3BlbGwuY29zdAogICAgICAgIHBsYXllci5tcCAtPSBzcGVsbC5jb3N0CiAgICAgICAgYm9zcy5ocCAtPSBzcGVsbC5kbWcKCgogICAgICAgIGlmIHNwZWxsLmhlYWw6CiAgICAgICAgICAgICMgcHJpbnQgJ2lLZXZpblkgaGVhbGVkIGZvciB7fSBoaXQgcG9pbnRzLicuZm9ybWF0KHNwZWxsLmhlYWwpCiAgICAgICAgICAgIHBsYXllci5ocCArPSBzcGVsbC5oZWFsCgogICAgICAgIGlmIHNwZWxsLmVmZmVjdCA9PSAnc2hpZWxkZWQnOgogICAgICAgICAgICBwbGF5ZXIuc2hpZWxkZWQgPSBzcGVsbC5kdXJhdGlvbgogICAgICAgIGVsaWYgc3BlbGwuZWZmZWN0ID09ICdwb2lzb25lZCc6CiAgICAgICAgICAgIGJvc3MucG9pc29uZWQgPSBzcGVsbC5kdXJhdGlvbgogICAgICAgIGVsaWYgc3BlbGwuZWZmZWN0ID09ICdyZWNoYXJnZSc6CiAgICAgICAgICAgIHBsYXllci5yZWNoYXJnaW5nID0gc3BlbGwuZHVyYXRpb24KCiAgICAgICAgaWYgYm9zcy5ocCA8PSAwOgogICAgICAgICAgICAjIHByaW50ICdCb3NzIGRpZWQuIFlvdSB3aW4hIDopJwogICAgICAgICAgICBwcmludCBzcGVudF9tYW5hLCAnQCcsICcgJy5qb2luKHMubmFtZSBmb3IgcyBpbiBzcGVsbF9vcmRlcikKICAgICAgICAgICAgcmV0dXJuIHNwZW50X21hbmEKCiAgICAgICAgIyBwcmludCAnLS0gQm9zcyBUdXJuIC0tJwogICAgICAgICMgcGxheWVyLnByaW50X3BsYXllcigpCiAgICAgICAgIyBib3NzLnByaW50X2Jvc3MoKQogICAgICAgIHBsYXllci5wcm9jZXNzX3N0YXR1cygpCiAgICAgICAgYm9zcy5wcm9jZXNzX3N0YXR1cygpCgogICAgICAgIGlmIGJvc3MuaHAgPD0gMDoKICAgICAgICAgICAgIyBwcmludCAnQm9zcyBkaWVkLiBZb3Ugd2luISA6KScKICAgICAgICAgICAgcHJpbnQgc3BlbnRfbWFuYSwgJ0AnLCAnICcuam9pbihzLm5hbWUgZm9yIHMgaW4gc3BlbGxfb3JkZXIpCiAgICAgICAgICAgIHJldHVybiBzcGVudF9tYW5hCgogICAgICAgICMgcHJpbnQgJz4gQm9zcyBhdHRhY2tzIGZvciB7fSBkYW1hZ2UhJy5mb3JtYXQobWF4KDEsIGJvc3MuZG1nIC0gcGxheWVyLmFybW91cikpCiAgICAgICAgcGxheWVyLmhwIC09IG1heCgxLCBib3NzLmRtZyAtIHBsYXllci5hcm1vdXIpCiAgICAgICAgaWYgcGxheWVyLmhwIDw9IDA6CiAgICAgICAgICAgICMgcHJpbnQgJ1BsYXllciBkaWVkLiBHYW1lIG92ZXIuIDooJwogICAgICAgICAgICByZXR1cm4gc3lzLm1heGludAoKICAgICAgICAjIHByaW50CgogICAgZWxzZToKICAgICAgICAjIEZpZ2h0IGRpZCBub3QgdGVybWluYXRlCiAgICAgICAgcmV0dXJuIHN5cy5tYXhpbnQKCiAgICByZXR1cm4gc3BlbnRfbWFuYQoKCiMgIyBIUCwgRGFtYWdlCiMgYm9zc19kYXRhID0gW10KCiMgZm9yIGxpbmUgaW4gZmlsZWlucHV0LmlucHV0KCk6CiMgICAgIGJvc3NfZGF0YS5hcHBlbmQoaW50KGxpbmUuc3BsaXQoJzogJylbMV0pKQoKIyBib3NzID0gQ2hhcmFjdGVyKCdCT1NTJywgMTMsIDAsIDgsIDApCiMgcGxheWVyID0gQ2hhcmFjdGVyKCdpS2V2aW5ZJywgMTAsIDI1MCwgMCwgMCkgICMgNTBIUCwgNTAwTVAKIyBib3NzX2ZpZ2h0KHBsYXllciwgYm9zcywgW1NQRUxMU1szXSwgU1BFTExTWzBdXSkKCiMgc3lzLmV4aXQoKQoKZGVmIHNpbXVsYXRlKGhhcmRfbW9kZSk6CiAgICBtb3N0X2VmZmljaWVudCA9IHN5cy5tYXhpbnQKCiAgICBmb3IgbiBpbiByYW5nZSg5LCAxMik6CiAgICAgICAgZm91bmQgPSBGYWxzZQogICAgICAgIGZvciBzbyBpbiBpdGVydG9vbHMucHJvZHVjdChTUEVMTFMsIHJlcGVhdD1uKToKICAgICAgICAgICAgaWYgc3VtKHMuY29zdCBmb3IgcyBpbiBzbykgPiBtb3N0X2VmZmljaWVudDoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICBib3NzID0gQ2hhcmFjdGVyKCdCT1NTJywgNTUsIDAsIDgsIDApICAjIDU1aHAsIDhkbWcgSU5QVVQKICAgICAgICAgICAgcGxheWVyID0gQ2hhcmFjdGVyKCdpS2V2aW5ZJywgNTAsIDUwMCwgMCwgMCkgICMgNTBIUCwgNTAwTVAKCiAgICAgICAgICAgICMgYm9zcyA9IENoYXJhY3RlcignQk9TUycsIDEzLCAwLCA4LCAwKQogICAgICAgICAgICAjIHBsYXllciA9IENoYXJhY3RlcignaUtldmluWScsIDEwLCAyNTAsIDAsIDApICAjIDUwSFAsIDUwME1QCiAgICAgICAgICAgIGEgPSBib3NzX2ZpZ2h0KHBsYXllciwgYm9zcywgc28sIGhhcmRfbW9kZSkKCiAgICAgICAgICAgIGlmIGEgPCBtb3N0X2VmZmljaWVudDoKICAgICAgICAgICAgICAgIG1vc3RfZWZmaWNpZW50ID0gYQogICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCgogICAgICAgIGlmIGZvdW5kOgogICAgICAgICAgICByZXR1cm4gbW9zdF9lZmZpY2llbnQKCnByaW50ICdNb3N0IGVmZmljaWVudCBNUCBvbiBlYXN5IG1vZGU6ICVpJyAlIHNpbXVsYXRlKGhhcmRfbW9kZT1GYWxzZSkKcHJpbnQgJ01vc3QgZWZmaWNpZW50IE1QIG9uIGhhcmQgbW9kZTogJWknICUgc2ltdWxhdGUoaGFyZF9tb2RlPVRydWUpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHNlbGYucG9pc29uZWQgLT0gMQogICAgICAgICAgICBzZWxmLmhwIC09IDMKICAgICAgICAgICAgIyBwcmludCAnUG9pc29uIGRlYWxzIDMgZGFtYWdlOyBpdHMgdGltZXIgaXMgbm93IHt9LicuZm9ybWF0KHNlbGYucG9pc29uZWQpCiAgICAgICAgICAgIGlmIHNlbGYucG9pc29uZWQgPT0gMDoKPHxmaW1fZW5kfD4="]
["419534f7a34e941ec3dabb872ebfb5e5a035da47-4","419534f7a34e941ec3dabb872ebfb5e5a035da47","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGZpbGVpbnB1dAppbXBvcnQgaXRlcnRvb2xzCmltcG9ydCBzeXMKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQoKY2xhc3MgQ2hhcmFjdGVyOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGhwLCBtcCwgZG1nLCBhcm1vdXIpOgogICAgICAgICMgU3RhdHMKICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgc2VsZi5ocCA9IGhwCiAgICAgICAgc2VsZi5tcCA9IG1wCiAgICAgICAgc2VsZi5kbWcgPSBkbWcKICAgICAgICBzZWxmLmFybW91ciA9IGFybW91cgoKICAgICAgICAjIFN0YXR1cyBFZmZlY3RzCiAgICAgICAgc2VsZi5zaGllbGRlZCA9IDAKICAgICAgICBzZWxmLnBvaXNvbmVkID0gMAogICAgICAgIHNlbGYucmVjaGFyZ2luZyA9IDAKCiAgICBkZWYgcHJpbnRfcGxheWVyKHNlbGYpOgogICAgICAgIHByaW50ICd7fSBoYXMge30gaGl0IHBvaW50cywge30gbWFuYSwge30gYXJtb3VyJy5mb3JtYXQoc2VsZi5uYW1lLCBzZWxmLmhwLCBzZWxmLm1wLCBzZWxmLmFybW91cikKCiAgICBkZWYgcHJpbnRfYm9zcyhzZWxmKToKICAgICAgICBwcmludCAne30gaGFzIHt9IGhpdCBwb2ludHMnLmZvcm1hdChzZWxmLm5hbWUsIHNlbGYuaHApCgogICAgZGVmIHByb2Nlc3Nfc3RhdHVzKHNlbGYpOgogICAgICAgIGlmIHNlbGYuc2hpZWxkZWQ6CiAgICAgICAgICAgIHNlbGYuc2hpZWxkZWQgLT0gMQogICAgICAgICAgICBzZWxmLmFybW91ciA9IDcKICAgICAgICAgICAgIyBwcmludCAiU2hpZWxkJ3MgdGltZXIgaXMgbm93IHt9LiIuZm9ybWF0KHNlbGYuc2hpZWxkZWQpCiAgICAgICAgICAgIGlmIHNlbGYuc2hpZWxkZWQgPT0gMDoKICAgICAgICAgICAgICAgIHNlbGYuYXJtb3VyID0gMAogICAgICAgICAgICAgICAgIyBwcmludCAnU2hpZWxkIHdlYXJzIG9mZi4nCgogICAgICAgIGlmIHNlbGYucG9pc29uZWQ6CiAgICAgICAgICAgIHNlbGYucG9pc29uZWQgLT0gMQogICAgICAgICAgICBzZWxmLmhwIC09IDMKICAgICAgICAgICAgIyBwcmludCAnUG9pc29uIGRlYWxzIDMgZGFtYWdlOyBpdHMgdGltZXIgaXMgbm93IHt9LicuZm9ybWF0KHNlbGYucG9pc29uZWQpCiAgICAgICAgICAgIGlmIHNlbGYucG9pc29uZWQgPT0gMDoKICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICMgcHJpbnQgJ1BvaXNvbiBlZmZlY3RzIGV4cGlyZWQuJwoKICAgICAgICBpZiBzZWxmLnJlY2hhcmdpbmc6CiAgICAgICAgICAgIHNlbGYucmVjaGFyZ2luZyAtPSAxCiAgICAgICAgICAgIHNlbGYubXAgKz0gMTAxCiAgICAgICAgICAgICMgcHJpbnQgJ1JlY2hhcmdlIHByb3ZpZGVzIDEwMSBtYW5hOyBpdHMgdGltZXIgaXMgbm93IHt9LicuZm9ybWF0KHNlbGYucmVjaGFyZ2luZykKICAgICAgICAgICAgaWYgc2VsZi5yZWNoYXJnaW5nID09IDA6CiAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAjIHByaW50ICdSZWNoYXJnZSB3ZWFycyBvZmYuJwoKClNwZWxsID0gbmFtZWR0dXBsZSgnU3BlbGwnLCBbJ25hbWUnLCAnY29zdCcsICdkbWcnLCAnaGVhbCcsICdlZmZlY3QnLCAnZHVyYXRpb24nXSkKCiMgTWFnaWMgTWlzc2lsZSBjb3N0cyA1MyBtYW5hLiBJdCBpbnN0YW50bHkgZG9lcyA0IGRhbWFnZS4KIyBEcmFpbiBjb3N0cyA3MyBtYW5hLiBJdCBpbnN0YW50bHkgZG9lcyAyIGRhbWFnZSBhbmQgaGVhbHMgeW91IGZvciAyIGhpdCBwb2ludHMuCiMgU2hpZWxkIGNvc3RzIDExMyBtYW5hLiBJdCBzdGFydHMgYW4gZWZmZWN0IHRoYXQgbGFzdHMgZm9yIDYgdHVybnMuIFdoaWxlIGl0IGlzIGFjdGl2ZSwgeW91ciBhcm1vciBpcyBpbmNyZWFzZWQgYnkgNy4KIyBQb2lzb24gY29zdHMgMTczIG1hbmEuIEl0IHN0YXJ0cyBhbiBlZmZlY3QgdGhhdCBsYXN0cyBmb3IgNiB0dXJucy4gQXQgdGhlIHN0YXJ0IG9mIGVhY2ggdHVybiB3aGlsZSBpdCBpcyBhY3RpdmUsIGl0IGRlYWxzIHRoZSBib3NzIDMgZGFtYWdlLgojIFJlY2hhcmdlIGNvc3RzIDIyOSBtYW5hLiBJdCBzdGFydHMgYW4gZWZmZWN0IHRoYXQgbGFzdHMgZm9yIDUgdHVybnMuIEF0IHRoZSBzdGFydCBvZiBlYWNoIHR1cm4gd2hpbGUgaXQgaXMgYWN0aXZlLCBpdCBnaXZlcyB5b3UgMTAxIG5ldyBtYW5hLgpTUEVMTFMgPSBbCiAgICBTcGVsbCgnTWlzc2wnLCAgNTMsIDQsIDAsICAgIE5vbmUsIE5vbmUpLAogICAgU3BlbGwoJ0RyYWluJywgIDczLCAyLCAyLCAgICBOb25lLCBOb25lKSwKICAgIFNwZWxsKCdTaGlsZCcsIDExMywgMCwgMCwgJ3NoaWVsZGVkJywgNiksCiAgICBTcGVsbCgnUG9pc24nLCAxNzMsIDAsIDAsICdwb2lzb25lZCcsIDYpLAogICAgU3BlbGwoJ1JjaHJnJywgMjI5LCAwLCAwLCAncmVjaGFyZ2UnLCA1KSwKXQoKCmRlZiBib3NzX2ZpZ2h0KHBsYXllciwgYm9zcywgc3BlbGxfb3JkZXIsIGhhcmRfbW9kZT1GYWxzZSk6CiAgICBzcGVudF9tYW5hID0gMAogICAgZWZmZWN0cyA9IFtdCiAgICAjIHByaW50ICcsICcuam9pbihzLm5hbWUgZm9yIHMgaW4gc3BlbGxfb3JkZXIpCgogICAgZm9yIHNwZWxsIGluIHNwZWxsX29yZGVyOgogICAgICAgIGlmIGhhcmRfbW9kZToKICAgICAgICAgICAgcGxheWVyLmhwIC09IDEKICAgICAgICAgICAgaWYgcGxheWVyLmhwIDw9IDA6CiAgICAgICAgICAgICAgICAjIHByaW50ICdQbGF5ZXIgZGllZC4gR2FtZSBvdmVyLiA6KCcKICAgICAgICAgICAgICAgIHJldHVybiBzeXMubWF4aW50CgogICAgICAgICMgcHJpbnQgJy0tIFBsYXllciBUdXJuIC0tJwogICAgICAgICMgcGxheWVyLnByaW50X3BsYXllcigpCiAgICAgICAgIyBib3NzLnByaW50X2Jvc3MoKQoKICAgICAgICBwbGF5ZXIucHJvY2Vzc19zdGF0dXMoKQogICAgICAgIGJvc3MucHJvY2Vzc19zdGF0dXMoKQoKCiAgICAgICAgIyBQaWNrIGEgc3BlbGwgdG8gdXNlCiAgICAgICAgaWYgc3BlbGwuY29zdCA+IHBsYXllci5tcDoKICAgICAgICAgICAgIyBwcmludCAnTm90IGVub3VnaCBtYW5hIHRvIGNhc3QuJwogICAgICAgICAgICByZXR1cm4gc3lzLm1heGludAoKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIHJldHVybiBzeXMubWF4aW50CiAgICAgICAgZWxpZiBzcGVsbC5lZmZlY3QgPT0gJ3JlY2hhcmdlJyBhbmQgcGxheWVyLnJlY2hhcmdpbmc6CiAgICAgICAgICAgIHJldHVybiBzeXMubWF4aW50CgogICAgICAgICMgcHJpbnQgJz4gaUtldmluWSBjYXN0ZWQge30hJy5mb3JtYXQoc3BlbGwubmFtZSkKICAgICAgICBzcGVudF9tYW5hICs9IHNwZWxsLmNvc3QKICAgICAgICBwbGF5ZXIubXAgLT0gc3BlbGwuY29zdAogICAgICAgIGJvc3MuaHAgLT0gc3BlbGwuZG1nCgoKICAgICAgICBpZiBzcGVsbC5oZWFsOgogICAgICAgICAgICAjIHByaW50ICdpS2V2aW5ZIGhlYWxlZCBmb3Ige30gaGl0IHBvaW50cy4nLmZvcm1hdChzcGVsbC5oZWFsKQogICAgICAgICAgICBwbGF5ZXIuaHAgKz0gc3BlbGwuaGVhbAoKICAgICAgICBpZiBzcGVsbC5lZmZlY3QgPT0gJ3NoaWVsZGVkJzoKICAgICAgICAgICAgcGxheWVyLnNoaWVsZGVkID0gc3BlbGwuZHVyYXRpb24KICAgICAgICBlbGlmIHNwZWxsLmVmZmVjdCA9PSAncG9pc29uZWQnOgogICAgICAgICAgICBib3NzLnBvaXNvbmVkID0gc3BlbGwuZHVyYXRpb24KICAgICAgICBlbGlmIHNwZWxsLmVmZmVjdCA9PSAncmVjaGFyZ2UnOgogICAgICAgICAgICBwbGF5ZXIucmVjaGFyZ2luZyA9IHNwZWxsLmR1cmF0aW9uCgogICAgICAgIGlmIGJvc3MuaHAgPD0gMDoKICAgICAgICAgICAgIyBwcmludCAnQm9zcyBkaWVkLiBZb3Ugd2luISA6KScKICAgICAgICAgICAgcHJpbnQgc3BlbnRfbWFuYSwgJ0AnLCAnICcuam9pbihzLm5hbWUgZm9yIHMgaW4gc3BlbGxfb3JkZXIpCiAgICAgICAgICAgIHJldHVybiBzcGVudF9tYW5hCgogICAgICAgICMgcHJpbnQgJy0tIEJvc3MgVHVybiAtLScKICAgICAgICAjIHBsYXllci5wcmludF9wbGF5ZXIoKQogICAgICAgICMgYm9zcy5wcmludF9ib3NzKCkKICAgICAgICBwbGF5ZXIucHJvY2Vzc19zdGF0dXMoKQogICAgICAgIGJvc3MucHJvY2Vzc19zdGF0dXMoKQoKICAgICAgICBpZiBib3NzLmhwIDw9IDA6CiAgICAgICAgICAgICMgcHJpbnQgJ0Jvc3MgZGllZC4gWW91IHdpbiEgOiknCiAgICAgICAgICAgIHByaW50IHNwZW50X21hbmEsICdAJywgJyAnLmpvaW4ocy5uYW1lIGZvciBzIGluIHNwZWxsX29yZGVyKQogICAgICAgICAgICByZXR1cm4gc3BlbnRfbWFuYQoKICAgICAgICAjIHByaW50ICc+IEJvc3MgYXR0YWNrcyBmb3Ige30gZGFtYWdlIScuZm9ybWF0KG1heCgxLCBib3NzLmRtZyAtIHBsYXllci5hcm1vdXIpKQogICAgICAgIHBsYXllci5ocCAtPSBtYXgoMSwgYm9zcy5kbWcgLSBwbGF5ZXIuYXJtb3VyKQogICAgICAgIGlmIHBsYXllci5ocCA8PSAwOgogICAgICAgICAgICAjIHByaW50ICdQbGF5ZXIgZGllZC4gR2FtZSBvdmVyLiA6KCcKICAgICAgICAgICAgcmV0dXJuIHN5cy5tYXhpbnQKCiAgICAgICAgIyBwcmludAoKICAgIGVsc2U6CiAgICAgICAgIyBGaWdodCBkaWQgbm90IHRlcm1pbmF0ZQogICAgICAgIHJldHVybiBzeXMubWF4aW50CgogICAgcmV0dXJuIHNwZW50X21hbmEKCgojICMgSFAsIERhbWFnZQojIGJvc3NfZGF0YSA9IFtdCgojIGZvciBsaW5lIGluIGZpbGVpbnB1dC5pbnB1dCgpOgojICAgICBib3NzX2RhdGEuYXBwZW5kKGludChsaW5lLnNwbGl0KCc6ICcpWzFdKSkKCiMgYm9zcyA9IENoYXJhY3RlcignQk9TUycsIDEzLCAwLCA4LCAwKQojIHBsYXllciA9IENoYXJhY3RlcignaUtldmluWScsIDEwLCAyNTAsIDAsIDApICAjIDUwSFAsIDUwME1QCiMgYm9zc19maWdodChwbGF5ZXIsIGJvc3MsIFtTUEVMTFNbM10sIFNQRUxMU1swXV0pCgojIHN5cy5leGl0KCkKCmRlZiBzaW11bGF0ZShoYXJkX21vZGUpOgogICAgbW9zdF9lZmZpY2llbnQgPSBzeXMubWF4aW50CgogICAgZm9yIG4gaW4gcmFuZ2UoOSwgMTIpOgogICAgICAgIGZvdW5kID0gRmFsc2UKICAgICAgICBmb3Igc28gaW4gaXRlcnRvb2xzLnByb2R1Y3QoU1BFTExTLCByZXBlYXQ9bik6CiAgICAgICAgICAgIGlmIHN1bShzLmNvc3QgZm9yIHMgaW4gc28pID4gbW9zdF9lZmZpY2llbnQ6CiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgYm9zcyA9IENoYXJhY3RlcignQk9TUycsIDU1LCAwLCA4LCAwKSAgIyA1NWhwLCA4ZG1nIElOUFVUCiAgICAgICAgICAgIHBsYXllciA9IENoYXJhY3RlcignaUtldmluWScsIDUwLCA1MDAsIDAsIDApICAjIDUwSFAsIDUwME1QCgogICAgICAgICAgICAjIGJvc3MgPSBDaGFyYWN0ZXIoJ0JPU1MnLCAxMywgMCwgOCwgMCkKICAgICAgICAgICAgIyBwbGF5ZXIgPSBDaGFyYWN0ZXIoJ2lLZXZpblknLCAxMCwgMjUwLCAwLCAwKSAgIyA1MEhQLCA1MDBNUAogICAgICAgICAgICBhID0gYm9zc19maWdodChwbGF5ZXIsIGJvc3MsIHNvLCBoYXJkX21vZGUpCgogICAgICAgICAgICBpZiBhIDwgbW9zdF9lZmZpY2llbnQ6CiAgICAgICAgICAgICAgICBtb3N0X2VmZmljaWVudCA9IGEKICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQoKICAgICAgICBpZiBmb3VuZDoKICAgICAgICAgICAgcmV0dXJuIG1vc3RfZWZmaWNpZW50CgpwcmludCAnTW9zdCBlZmZpY2llbnQgTVAgb24gZWFzeSBtb2RlOiAlaScgJSBzaW11bGF0ZShoYXJkX21vZGU9RmFsc2UpCnByaW50ICdNb3N0IGVmZmljaWVudCBNUCBvbiBoYXJkIG1vZGU6ICVpJyAlIHNpbXVsYXRlKGhhcmRfbW9kZT1UcnVlKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICMgRGlzYWxsb3cgcmVwZWF0ZWQgZWZmZWN0cwogICAgICAgIGlmIHNwZWxsLmVmZmVjdCA9PSAnc2hpZWxkZWQnIGFuZCBwbGF5ZXIuc2hpZWxkZWQ6CiAgICAgICAgICAgIHJldHVybiBzeXMubWF4aW50CiAgICAgICAgZWxpZiBzcGVsbC5lZmZlY3QgPT0gJ3BvaXNvbmVkJyBhbmQgYm9zcy5wb2lzb25lZDoKPHxmaW1fZW5kfD4="]
["6b70000481adf2e4dbb9013cb3b0cc35b4722480-1","6b70000481adf2e4dbb9013cb3b0cc35b4722480","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMiBvbiAyMDIxLTA1LTI5IDA4OjQ1Cgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucywgbW9kZWxzCmltcG9ydCBkamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCjx8ZmltX2hvbGV8PgogICAgXQoKICAgIG9wZXJhdGlvbnMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5SZW1vdmVGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0ndGFzaycsCiAgICAgICAgICAgIG5hbWU9J2ZpbGUnLAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5BZGRGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nZGVwYXJ0bWVudGZpbGUnLAogICAgICAgICAgICBuYW1lPSd0YXNrJywKICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkZvcmVpZ25LZXkoYmxhbms9VHJ1ZSwgbnVsbD1UcnVlLCBvbl9kZWxldGU9ZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbi5DQVNDQURFLCB0bz0ndGFza2VyLnRhc2snKSwKICAgICAgICApLAogICAgXQo8fGZpbV9zdWZmaXh8PgogICAgICAgICgndGFza2VyJywgJzAwMDhfYXV0b18yMDIxMDUyOV8wODQyJyksCjx8ZmltX2VuZHw+"]
["6b70000481adf2e4dbb9013cb3b0cc35b4722480-2","6b70000481adf2e4dbb9013cb3b0cc35b4722480","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMiBvbiAyMDIxLTA1LTI5IDA4OjQ1Cgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucywgbW9kZWxzCmltcG9ydCBkamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgKCd0YXNrZXInLCAnMDAwOF9hdXRvXzIwMjEwNTI5XzA4NDInKSwKICAgIF0KCiAgICBvcGVyYXRpb25zID0gWwogICAgICAgIG1pZ3JhdGlvbnMuUmVtb3ZlRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J3Rhc2snLAogICAgICAgICAgICBuYW1lPSdmaWxlJywKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQWRkRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J2RlcGFydG1lbnRmaWxlJywKICAgICAgICAgICAgbmFtZT0ndGFzaycsCjx8ZmltX2hvbGV8PgogICAgICAgICksCiAgICBdCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5Gb3JlaWduS2V5KGJsYW5rPVRydWUsIG51bGw9VHJ1ZSwgb25fZGVsZXRlPWRqYW5nby5kYi5tb2RlbHMuZGVsZXRpb24uQ0FTQ0FERSwgdG89J3Rhc2tlci50YXNrJyksCjx8ZmltX2VuZHw+"]
["a9f9f775ad1aac29826a1f0791a2f0bdaef892d5-1","a9f9f775ad1aac29826a1f0791a2f0bdaef892d5","PHxmaW1fcHJlZml4fD4KIyDCqSAyMDIwIE5va2lhCiMgTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLUNsYXVzZSBMaWNlbnNlLgojIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKIyAhL3Vzci9iaW4vZW52IHB5dGhvbjMKIyBjb2Rpbmc6IHV0Zi04CiMgQXV0aG9yOiDDiWxpZSBkZSBQYW5hZmlldSAgPGVsaWUuZGVfcGFuYWZpZXVAbm9raWEtYmVsbC1sYWJzLmNvbT4KCgppbXBvcnQgdW5pdHRlc3QKZnJvbSBmaXR0aW5nX3RleHRfZGlzdGFuY2UuZml0dGluZ19kaXN0YW5jZSBpbXBvcnQgKgpmcm9tIGZpdHRpbmdfdGV4dF9kaXN0YW5jZS5vcmFjbGVfY2xhaW0gaW1wb3J0IE9yYWNsZUNsYWltCgoKY2xhc3MgVGVzdEZpdHRpbmdEaXN0YW5jZSh1bml0dGVzdC5UZXN0Q2FzZSk6CgogICAgZGVmIHRlc3RfY2FsbChzZWxmKToKICAgICAgICBiYWcwID0gJ2FiYicKICAgICAgICBiYWcxID0gJ2FhJwogICAgICAgIGJhZzIgPSAnYmFhJwogICAgICAgIGJhZzMgPSAnYmJiJwogICAgICAgIGNvbGxlY3Rpb24gPSB7YmFnMCwgYmFnMSwgYmFnMiwgYmFnM30KICAgICAgICBkaXN0YW5jZSA9IEZpdHRpbmdEaXN0YW5jZShjb2xsZWN0aW9uKQogICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZGlzdGFuY2Uoe2JhZzAsIGJhZzF9LCB7YmFnMSwgYmFnMH0pLCAwLikKICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGRpc3RhbmNlKHtiYWcxfSwge2JhZzN9KSwgMS4pCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpc3RhbmNlKHtiYWcxfSwge2JhZzJ9KSA8IGRpc3RhbmNlKHtiYWcwfSwge2JhZzF9KSkKCiAgICBkZWYgdGVzdF9maXQoc2VsZik6CiAgICAgICAgYmFnMCA9ICdhYmInCiAgICAgICAgYmFnMSA9ICdhYScKICAgICAgICBiYWcyID0gJ2JhYScKICAgICAgICBiYWczID0gJ2JiYicKICAgICAgICBjb2xsZWN0aW9uID0ge2JhZzAsIGJhZzEsIGJhZzIsIGJhZzN9CiAgICAgICAgZGlzdGFuY2UgPSBGaXR0aW5nRGlzdGFuY2UoY29sbGVjdGlvbikKICAgICAgICBvbGRfd2VpZ2h0X2EgPSBkaXN0YW5jZS5nZXRfaXRlbV93ZWlnaHQoJ2EnKQogICAgICAgIGRpc3RhbmNlMDEgPSBkaXN0YW5jZSh7YmFnMH0sIHtiYWcxfSkKICAgICAgICB0YXJnZXRfaW50ZXJ2YWwgPSAoMC4sIGRpc3RhbmNlMDEgLyAyLikKICAgICAgICBkaXN0YW5jZS5maXQoW09yYWNsZUNsYWltKCh7YmFnMH0sIHtiYWcxfSksIHRhcmdldF9pbnRlcnZhbCldKQogICAgICAgIG5ld193ZWlnaHRfYSA9IGRpc3RhbmNlLmdldF9pdGVtX3dlaWdodCgnYScpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5ld193ZWlnaHRfYSA+IG9sZF93ZWlnaHRfYSkKCiAgICBkZWYgdGVzdF9leGNlcHRpb25fd2VpZ2h0X2Zyb21faXRlbShzZWxmKToKICAgICAgICBiYWcwID0gJ2FiJwogICAgICAgIGJhZzEgPSAnYWEnCiAgICAgICAgYmFnMiA9ICdiYWEnCiAgICAgICAgYmFnMyA9ICdiYmInCiAgICAgICAgY29sbGVjdGlvbiA9IHtiYWcwLCBiYWcxLCBiYWcyLCBiYWczfQogICAgICAgIGRpc3RhbmNlID0gRml0dGluZ0Rpc3RhbmNlKGNvbGxlY3Rpb24pCiAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGlzdGFuY2UuZ2V0X2l0ZW1fd2VpZ2h0LCAnYycpCgogICAgZGVmIHRlc3RfdGZpZGZfd2VpZ2h0cyhzZWxmKToKICAgICAgICBiYWcwID0gJ2FiJwogICAgICAgIGJhZzEgPSAnYScKICAgICAgICBiYWcyID0gJ2FhJwogICAgICAgIGJhZzMgPSAnYWFhJwogICAgICAgIGJhZzQgPSAnYmInCiAgICAgICAgY29sbGVjdGlvbiA9IHtiYWcwLCBiYWcxLCBiYWcyLCBiYWczLCBiYWc0fQogICAgICAgIGRpc3RhbmNlID0gRml0dGluZ0Rpc3RhbmNlKGNvbGxlY3Rpb24sIHRmaWRmPVRydWUpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpc3RhbmNlLmdldF9pdGVtX3dlaWdodCgnYScpIDwgZGlzdGFuY2UuZ2V0X2l0ZW1fd2VpZ2h0KCdiJykpCgogICAgZGVmIHRlc3Rfd2VpZ2h0X2Zyb21fYmFnKHNlbGYpOgogICAgICAgIGJhZzAgPSAnYWJ3d2Fmd2FmJwogICAgICAgIGJhZzEgPSAnYXdmZScKICAgICAgICBjb2xsZWN0aW9uID0ge2JhZzAsIGJhZzF9CiAgICAgICAgZGlzdGFuY2UgPSBGaXR0aW5nRGlzdGFuY2UoY29sbGVjdGlvbiwgdGZpZGY9VHJ1ZSkKICAgICAgICBzZWxmLmFzc2VydFRydWUoZGlzdGFuY2UuZ2V0X2JhZ193ZWlnaHQoYmFnMCkgPCBkaXN0YW5jZS5nZXRfYmFnX3dlaWdodChiYWcxKSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiB0ZXN0X2lucHV0X2RpY3Rpb25hcnlfYmFnKHNlbGYpOgogICAgICAgIGJhZ190b193ZWlnaHQgPSB7J2FhJzogMS4sICdhYic6IDIuLCAnYWJjJzogMy59CiAgICAgICAgZGlzdGFuY2UgPSBGaXR0aW5nRGlzdGFuY2UoYmFnX3RvX3dlaWdodCkKPHxmaW1fZW5kfD4="]
["a9f9f775ad1aac29826a1f0791a2f0bdaef892d5-2","a9f9f775ad1aac29826a1f0791a2f0bdaef892d5","PHxmaW1fcHJlZml4fD4KIyDCqSAyMDIwIE5va2lhCiMgTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLUNsYXVzZSBMaWNlbnNlLgojIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKIyAhL3Vzci9iaW4vZW52IHB5dGhvbjMKIyBjb2Rpbmc6IHV0Zi04CiMgQXV0aG9yOiDDiWxpZSBkZSBQYW5hZmlldSAgPGVsaWUuZGVfcGFuYWZpZXVAbm9raWEtYmVsbC1sYWJzLmNvbT4KCgppbXBvcnQgdW5pdHRlc3QKZnJvbSBmaXR0aW5nX3RleHRfZGlzdGFuY2UuZml0dGluZ19kaXN0YW5jZSBpbXBvcnQgKgpmcm9tIGZpdHRpbmdfdGV4dF9kaXN0YW5jZS5vcmFjbGVfY2xhaW0gaW1wb3J0IE9yYWNsZUNsYWltCgoKY2xhc3MgVGVzdEZpdHRpbmdEaXN0YW5jZSh1bml0dGVzdC5UZXN0Q2FzZSk6CgogICAgZGVmIHRlc3RfY2FsbChzZWxmKToKICAgICAgICBiYWcwID0gJ2FiYicKICAgICAgICBiYWcxID0gJ2FhJwogICAgICAgIGJhZzIgPSAnYmFhJwogICAgICAgIGJhZzMgPSAnYmJiJwogICAgICAgIGNvbGxlY3Rpb24gPSB7YmFnMCwgYmFnMSwgYmFnMiwgYmFnM30KICAgICAgICBkaXN0YW5jZSA9IEZpdHRpbmdEaXN0YW5jZShjb2xsZWN0aW9uKQogICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZGlzdGFuY2Uoe2JhZzAsIGJhZzF9LCB7YmFnMSwgYmFnMH0pLCAwLikKICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGRpc3RhbmNlKHtiYWcxfSwge2JhZzN9KSwgMS4pCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpc3RhbmNlKHtiYWcxfSwge2JhZzJ9KSA8IGRpc3RhbmNlKHtiYWcwfSwge2JhZzF9KSkKCiAgICBkZWYgdGVzdF9maXQoc2VsZik6CiAgICAgICAgYmFnMCA9ICdhYmInCiAgICAgICAgYmFnMSA9ICdhYScKICAgICAgICBiYWcyID0gJ2JhYScKICAgICAgICBiYWczID0gJ2JiYicKICAgICAgICBjb2xsZWN0aW9uID0ge2JhZzAsIGJhZzEsIGJhZzIsIGJhZzN9CiAgICAgICAgZGlzdGFuY2UgPSBGaXR0aW5nRGlzdGFuY2UoY29sbGVjdGlvbikKICAgICAgICBvbGRfd2VpZ2h0X2EgPSBkaXN0YW5jZS5nZXRfaXRlbV93ZWlnaHQoJ2EnKQogICAgICAgIGRpc3RhbmNlMDEgPSBkaXN0YW5jZSh7YmFnMH0sIHtiYWcxfSkKICAgICAgICB0YXJnZXRfaW50ZXJ2YWwgPSAoMC4sIGRpc3RhbmNlMDEgLyAyLikKICAgICAgICBkaXN0YW5jZS5maXQoW09yYWNsZUNsYWltKCh7YmFnMH0sIHtiYWcxfSksIHRhcmdldF9pbnRlcnZhbCldKQogICAgICAgIG5ld193ZWlnaHRfYSA9IGRpc3RhbmNlLmdldF9pdGVtX3dlaWdodCgnYScpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5ld193ZWlnaHRfYSA+IG9sZF93ZWlnaHRfYSkKCiAgICBkZWYgdGVzdF9leGNlcHRpb25fd2VpZ2h0X2Zyb21faXRlbShzZWxmKToKICAgICAgICBiYWcwID0gJ2FiJwogICAgICAgIGJhZzEgPSAnYWEnCiAgICAgICAgYmFnMiA9ICdiYWEnCiAgICAgICAgYmFnMyA9ICdiYmInCiAgICAgICAgY29sbGVjdGlvbiA9IHtiYWcwLCBiYWcxLCBiYWcyLCBiYWczfQogICAgICAgIGRpc3RhbmNlID0gRml0dGluZ0Rpc3RhbmNlKGNvbGxlY3Rpb24pCiAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGlzdGFuY2UuZ2V0X2l0ZW1fd2VpZ2h0LCAnYycpCgogICAgZGVmIHRlc3RfdGZpZGZfd2VpZ2h0cyhzZWxmKToKICAgICAgICBiYWcwID0gJ2FiJwogICAgICAgIGJhZzEgPSAnYScKICAgICAgICBiYWcyID0gJ2FhJwogICAgICAgIGJhZzMgPSAnYWFhJwogICAgICAgIGJhZzQgPSAnYmInCiAgICAgICAgY29sbGVjdGlvbiA9IHtiYWcwLCBiYWcxLCBiYWcyLCBiYWczLCBiYWc0fQogICAgICAgIGRpc3RhbmNlID0gRml0dGluZ0Rpc3RhbmNlKGNvbGxlY3Rpb24sIHRmaWRmPVRydWUpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpc3RhbmNlLmdldF9pdGVtX3dlaWdodCgnYScpIDwgZGlzdGFuY2UuZ2V0X2l0ZW1fd2VpZ2h0KCdiJykpCgogICAgZGVmIHRlc3Rfd2VpZ2h0X2Zyb21fYmFnKHNlbGYpOgogICAgICAgIGJhZzAgPSAnYWJ3d2Fmd2FmJwogICAgICAgIGJhZzEgPSAnYXdmZScKICAgICAgICBjb2xsZWN0aW9uID0ge2JhZzAsIGJhZzF9CiAgICAgICAgZGlzdGFuY2UgPSBGaXR0aW5nRGlzdGFuY2UoY29sbGVjdGlvbiwgdGZpZGY9VHJ1ZSkKICAgICAgICBzZWxmLmFzc2VydFRydWUoZGlzdGFuY2UuZ2V0X2JhZ193ZWlnaHQoYmFnMCkgPCBkaXN0YW5jZS5nZXRfYmFnX3dlaWdodChiYWcxKSkKCiAgICBkZWYgdGVzdF9pbnB1dF9kaWN0aW9uYXJ5X2JhZyhzZWxmKToKICAgICAgICBiYWdfdG9fd2VpZ2h0ID0geydhYSc6IDEuLCAnYWInOiAyLiwgJ2FiYyc6IDMufQogICAgICAgIGRpc3RhbmNlID0gRml0dGluZ0Rpc3RhbmNlKGJhZ190b193ZWlnaHQpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0YW5jZS5nZXRfYmFnX3dlaWdodCgnYWEnKSwgMS4pCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0YW5jZS5nZXRfYmFnX3dlaWdodCgnYWInKSwgMi4pCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0YW5jZS5nZXRfYmFnX3dlaWdodCgnYWJjJyksIDMuKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHVuaXR0ZXN0Lm1haW4oKQo8fGZpbV9lbmR8Pg=="]
["a9f9f775ad1aac29826a1f0791a2f0bdaef892d5-3","a9f9f775ad1aac29826a1f0791a2f0bdaef892d5","PHxmaW1fcHJlZml4fD4KIyDCqSAyMDIwIE5va2lhCiMgTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLUNsYXVzZSBMaWNlbnNlLgojIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKIyAhL3Vzci9iaW4vZW52IHB5dGhvbjMKIyBjb2Rpbmc6IHV0Zi04CiMgQXV0aG9yOiDDiWxpZSBkZSBQYW5hZmlldSAgPGVsaWUuZGVfcGFuYWZpZXVAbm9raWEtYmVsbC1sYWJzLmNvbT4KCgppbXBvcnQgdW5pdHRlc3QKZnJvbSBmaXR0aW5nX3RleHRfZGlzdGFuY2UuZml0dGluZ19kaXN0YW5jZSBpbXBvcnQgKgpmcm9tIGZpdHRpbmdfdGV4dF9kaXN0YW5jZS5vcmFjbGVfY2xhaW0gaW1wb3J0IE9yYWNsZUNsYWltCgoKY2xhc3MgVGVzdEZpdHRpbmdEaXN0YW5jZSh1bml0dGVzdC5UZXN0Q2FzZSk6CgogICAgZGVmIHRlc3RfY2FsbChzZWxmKToKICAgICAgICBiYWcwID0gJ2FiYicKICAgICAgICBiYWcxID0gJ2FhJwogICAgICAgIGJhZzIgPSAnYmFhJwogICAgICAgIGJhZzMgPSAnYmJiJwogICAgICAgIGNvbGxlY3Rpb24gPSB7YmFnMCwgYmFnMSwgYmFnMiwgYmFnM30KICAgICAgICBkaXN0YW5jZSA9IEZpdHRpbmdEaXN0YW5jZShjb2xsZWN0aW9uKQogICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZGlzdGFuY2Uoe2JhZzAsIGJhZzF9LCB7YmFnMSwgYmFnMH0pLCAwLikKICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGRpc3RhbmNlKHtiYWcxfSwge2JhZzN9KSwgMS4pCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpc3RhbmNlKHtiYWcxfSwge2JhZzJ9KSA8IGRpc3RhbmNlKHtiYWcwfSwge2JhZzF9KSkKCiAgICBkZWYgdGVzdF9maXQoc2VsZik6CiAgICAgICAgYmFnMCA9ICdhYmInCiAgICAgICAgYmFnMSA9ICdhYScKICAgICAgICBiYWcyID0gJ2JhYScKICAgICAgICBiYWczID0gJ2JiYicKICAgICAgICBjb2xsZWN0aW9uID0ge2JhZzAsIGJhZzEsIGJhZzIsIGJhZzN9CiAgICAgICAgZGlzdGFuY2UgPSBGaXR0aW5nRGlzdGFuY2UoY29sbGVjdGlvbikKICAgICAgICBvbGRfd2VpZ2h0X2EgPSBkaXN0YW5jZS5nZXRfaXRlbV93ZWlnaHQoJ2EnKQogICAgICAgIGRpc3RhbmNlMDEgPSBkaXN0YW5jZSh7YmFnMH0sIHtiYWcxfSkKICAgICAgICB0YXJnZXRfaW50ZXJ2YWwgPSAoMC4sIGRpc3RhbmNlMDEgLyAyLikKICAgICAgICBkaXN0YW5jZS5maXQoW09yYWNsZUNsYWltKCh7YmFnMH0sIHtiYWcxfSksIHRhcmdldF9pbnRlcnZhbCldKQogICAgICAgIG5ld193ZWlnaHRfYSA9IGRpc3RhbmNlLmdldF9pdGVtX3dlaWdodCgnYScpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5ld193ZWlnaHRfYSA+IG9sZF93ZWlnaHRfYSkKCiAgICBkZWYgdGVzdF9leGNlcHRpb25fd2VpZ2h0X2Zyb21faXRlbShzZWxmKToKICAgICAgICBiYWcwID0gJ2FiJwogICAgICAgIGJhZzEgPSAnYWEnCiAgICAgICAgYmFnMiA9ICdiYWEnCiAgICAgICAgYmFnMyA9ICdiYmInCiAgICAgICAgY29sbGVjdGlvbiA9IHtiYWcwLCBiYWcxLCBiYWcyLCBiYWczfQogICAgICAgIGRpc3RhbmNlID0gRml0dGluZ0Rpc3RhbmNlKGNvbGxlY3Rpb24pCiAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGlzdGFuY2UuZ2V0X2l0ZW1fd2VpZ2h0LCAnYycpCgogICAgZGVmIHRlc3RfdGZpZGZfd2VpZ2h0cyhzZWxmKToKICAgICAgICBiYWcwID0gJ2FiJwogICAgICAgIGJhZzEgPSAnYScKICAgICAgICBiYWcyID0gJ2FhJwogICAgICAgIGJhZzMgPSAnYWFhJwogICAgICAgIGJhZzQgPSAnYmInCiAgICAgICAgY29sbGVjdGlvbiA9IHtiYWcwLCBiYWcxLCBiYWcyLCBiYWczLCBiYWc0fQogICAgICAgIGRpc3RhbmNlID0gRml0dGluZ0Rpc3RhbmNlKGNvbGxlY3Rpb24sIHRmaWRmPVRydWUpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpc3RhbmNlLmdldF9pdGVtX3dlaWdodCgnYScpIDwgZGlzdGFuY2UuZ2V0X2l0ZW1fd2VpZ2h0KCdiJykpCgogICAgZGVmIHRlc3Rfd2VpZ2h0X2Zyb21fYmFnKHNlbGYpOgogICAgICAgIGJhZzAgPSAnYWJ3d2Fmd2FmJwogICAgICAgIGJhZzEgPSAnYXdmZScKICAgICAgICBjb2xsZWN0aW9uID0ge2JhZzAsIGJhZzF9CiAgICAgICAgZGlzdGFuY2UgPSBGaXR0aW5nRGlzdGFuY2UoY29sbGVjdGlvbiwgdGZpZGY9VHJ1ZSkKICAgICAgICBzZWxmLmFzc2VydFRydWUoZGlzdGFuY2UuZ2V0X2JhZ193ZWlnaHQoYmFnMCkgPCBkaXN0YW5jZS5nZXRfYmFnX3dlaWdodChiYWcxKSkKCiAgICBkZWYgdGVzdF9pbnB1dF9kaWN0aW9uYXJ5X2JhZyhzZWxmKToKICAgICAgICBiYWdfdG9fd2VpZ2h0ID0geydhYSc6IDEuLCAnYWInOiAyLiwgJ2FiYyc6IDMufQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZGlzdGFuY2UgPSBGaXR0aW5nRGlzdGFuY2UoYmFnX3RvX3dlaWdodCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3RhbmNlLmdldF9iYWdfd2VpZ2h0KCdhYScpLCAxLikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3RhbmNlLmdldF9iYWdfd2VpZ2h0KCdhYicpLCAyLikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3RhbmNlLmdldF9iYWdfd2VpZ2h0KCdhYmMnKSwgMy4pCjx8ZmltX2VuZHw+"]
["41627bd5c9f344e7fbaa5982a69a37cac4e7a203-1","41627bd5c9f344e7fbaa5982a69a37cac4e7a203","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJhbmRvbQoKY2xhc3MgUGxheUNyYWNrZXJCYXJyZWxHYW1lKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgcm93cyk6CiAgICAgICAgc2VsZi50cmlhbmdsZSA9IFtdCiAgICAgICAgc2VsZi5yb3dzID0gcm93cwogICAgICAgIHNlbGYudmFsaWRfbW92ZXMgPSBbXQogICAgICAgIHNlbGYubnVtYmVyX29mX3BlZ3MgPSAwCgoKICAgICAgICAjRmlyc3Qgd2Ugc2V0IHVwIHRoZSBkZWZhdWx0IGdhbWUuIExhdGVyIG9uLCBpdCBjYW4gYmUgY3VzdG9taXplZCB0byBpbmNyZWFzZSB0aGUgc2l6ZSBhbmQvb3IgdGhlIHN0YXJ0aW5nIG9wZW5pbmdzCiAgICAgICAgc2VsZi5jcmVhdGVfdHJpYW5nbGUoKQogICAgICAgIHNlbGYucmFuZG9tX3N0YXJ0aW5nX3Bvc2l0aW9uKCkKICAgICAgICBmb3Igcm93IGluIHNlbGYudHJpYW5nbGU6CiAgICAgICAgICAgIHByaW50KHJvdykKICAgICAgICAKICAgICAgICBzZWxmLmZpbmRfdmFsaWRfbW92ZXMoKQogICAgICAgIHdoaWxlIGxlbihzZWxmLnZhbGlkX21vdmVzKSBpcyBub3QgMDoKICAgICAgICAgICAgbW92ZV9udW0gPSByYW5kb20ucmFuZGludCgwLGxlbihzZWxmLnZhbGlkX21vdmVzKS0xKQogICAgICAgICAgICBzZWxmLm1ha2VfbW92ZShzZWxmLnZhbGlkX21vdmVzW21vdmVfbnVtXSkKICAgICAgICAgICAgc2VsZi5maW5kX3ZhbGlkX21vdmVzKCkKCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICBpZiBzZWxmLm51bWJlcl9vZl9wZWdzID09IDE6CiAgICAgICAgICAgICAgICBwcmludCgiR2FtZSBXT04hIikKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCgiR2FtZSBMb3N0ISA6KCIpCiAgICAgICAgICAgIHByaW50KCJGaW5hbCBCb2FyZDogXG4iKQogICAgICAgICAgICBmb3Igcm93IGluIHNlbGYudHJpYW5nbGU6Cjx8ZmltX2hvbGV8PgogICAgZGVmIGNyZWF0ZV90cmlhbmdsZShzZWxmKToKICAgICAgICBmb3Igcm93IGluIHJhbmdlKHNlbGYucm93cyk6CiAgICAgICAgICAgIHNlbGYudHJpYW5nbGUuYXBwZW5kKFtdKQogICAgICAgICAgICBmb3IgXyBpbiByYW5nZShyb3crMSk6CiAgICAgICAgICAgICAgICBzZWxmLnRyaWFuZ2xlW3Jvd10uYXBwZW5kKCdYJykKICAgIAogICAgZGVmIHJhbmRvbV9zdGFydGluZ19wb3NpdGlvbihzZWxmKToKICAgICAgICB5X2xvYyA9IHJhbmRvbS5yYW5kaW50KDAsc2VsZi5yb3dzLTEpCiAgICAgICAgeF9sb2MgPSByYW5kb20ucmFuZGludCgwLHlfbG9jKQogICAgICAgIHNlbGYudHJpYW5nbGVbeV9sb2NdW3hfbG9jXSA9ICdPJwoKCiAgICBkZWYgZmluZF92YWxpZF9tb3ZlcyhzZWxmKToKICAgICAgICBzZWxmLnZhbGlkX21vdmVzID0gW10KICAgICAgICBzZWxmLm51bWJlcl9vZl9wZWdzID0gMAogICAgICAgIGZvciByb3dfaW5kLCByb3cgaW4gZW51bWVyYXRlKHNlbGYudHJpYW5nbGUpOgogICAgICAgICAgICBmb3Igc3BhY2VfaW5kLCBzcGFjZSBpbiBlbnVtZXJhdGUocm93KToKICAgICAgICAgICAgICAgIGlmIHNwYWNlID09ICdPJzoKICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVfbW92ZV9sb2NhdGlvbnMgPSBzZWxmLmZpbmRfcG9zc2libGVfbG9jYXRpb25zKHJvd19pbmQsIHNwYWNlX2luZCkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19pZl9tb3ZlX3ZhbGlkKHBvc3NpYmxlX21vdmVfbG9jYXRpb25zLCByb3dfaW5kLCBzcGFjZV9pbmQpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHNlbGYubnVtYmVyX29mX3BlZ3MgKz0gMQoKCiAgICBkZWYgZmluZF9wb3NzaWJsZV9sb2NhdGlvbnMoc2VsZiwgcm93LCBzcGFjZSk6CiAgICAgICAgcG9zc2libGVfbW92ZV9mcm9tX2xvY2F0aW9ucyA9IFtdCiAgICAgICAgZm9yIHJvd19kaWZmIGluIHJhbmdlKC0yLDQsMik6CiAgICAgICAgICAgIGZvciBzcGFjZV9kaWZmIGluIHJhbmdlKC0yLDQsMik6CiAgICAgICAgICAgICAgICByb3dfY2hlY2sgPSByb3cgKyByb3dfZGlmZgogICAgICAgICAgICAgICAgc3BhY2VfY2hlY2sgPSBzcGFjZSArIHNwYWNlX2RpZmYKCiAgICAgICAgICAgICAgICAjQ2hlY2sgaWYgdmFsaWQgbW92ZSBhbmQgdmFsaWQgc3BhY2Ugb3RoZXJ3aXNlIG1vdmUgdG8gbmV4dCBwb3NzaWJsZSBzcGFjZQogICAgICAgICAgICAgICAgaWYgcm93X2RpZmYgKiAtMSA9PSBzcGFjZV9kaWZmIG9yIHJvd19jaGVjayA+IHNlbGYucm93cy0xIG9yIHNwYWNlX2NoZWNrID4gcm93X2NoZWNrIG9yIHNwYWNlX2NoZWNrID4gc2VsZi5yb3dzLTE6CiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIGlmIHJvd19jaGVjayA+PTAgYW5kIHNwYWNlX2NoZWNrID49MDoKICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZV9tb3ZlX2Zyb21fbG9jYXRpb25zLmFwcGVuZCh7J21vdmUgZnJvbSc6IFtyb3dfY2hlY2ssIHNwYWNlX2NoZWNrXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vdmUgb3Zlcic6IFtyb3cgKyAocm93X2RpZmYgLyAyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UgKyAoc3BhY2VfZGlmZiAvIDIpXX0pCgogICAgICAgIHJldHVybiBwb3NzaWJsZV9tb3ZlX2Zyb21fbG9jYXRpb25zCgogICAgZGVmIGNoZWNrX2lmX21vdmVfdmFsaWQoc2VsZiwgcG9zc2libGVfbW92ZXMsIHJvdywgc3BhY2UpOgogICAgICAgIGZvciBtb3ZlIGluIHBvc3NpYmxlX21vdmVzOgogICAgICAgICAgICBpZiBzZWxmLnRyaWFuZ2xlW21vdmVbJ21vdmUgZnJvbSddWzBdXVttb3ZlWydtb3ZlIGZyb20nXVsxXV0gPT0gJ1gnIGFuZCBcCiAgICAgICAgICAgICAgICBzZWxmLnRyaWFuZ2xlW21vdmVbJ21vdmUgb3ZlciddWzBdXVttb3ZlWydtb3ZlIG92ZXInXVsxXV0gPT0gJ1gnOgogICAgICAgICAgICAgICAgbW92ZVsnbW92ZSB0byddID0gIFtyb3csIHNwYWNlXQogICAgICAgICAgICAgICAgc2VsZi52YWxpZF9tb3Zlcy5hcHBlbmQobW92ZSkKCiAgICBkZWYgbWFrZV9tb3ZlKHNlbGYsIG1vdmVfZGljdCk6CiAgICAgICAgc2VsZi50cmlhbmdsZVttb3ZlX2RpY3RbJ21vdmUgdG8nXVswXV1bbW92ZV9kaWN0Wydtb3ZlIHRvJ11bMV1dID0gJ1gnCiAgICAgICAgc2VsZi50cmlhbmdsZVttb3ZlX2RpY3RbJ21vdmUgZnJvbSddWzBdXVttb3ZlX2RpY3RbJ21vdmUgZnJvbSddWzFdXSA9ICdPJwogICAgICAgIHNlbGYudHJpYW5nbGVbbW92ZV9kaWN0Wydtb3ZlIG92ZXInXVswXV1bbW92ZV9kaWN0Wydtb3ZlIG92ZXInXVsxXV0gPSAnTycKCgpQbGF5Q3JhY2tlckJhcnJlbEdhbWUoNSkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIHByaW50KHJvdykKCgo8fGZpbV9lbmR8Pg=="]
["41627bd5c9f344e7fbaa5982a69a37cac4e7a203-2","41627bd5c9f344e7fbaa5982a69a37cac4e7a203","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJhbmRvbQoKY2xhc3MgUGxheUNyYWNrZXJCYXJyZWxHYW1lKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgcm93cyk6CiAgICAgICAgc2VsZi50cmlhbmdsZSA9IFtdCiAgICAgICAgc2VsZi5yb3dzID0gcm93cwogICAgICAgIHNlbGYudmFsaWRfbW92ZXMgPSBbXQogICAgICAgIHNlbGYubnVtYmVyX29mX3BlZ3MgPSAwCgoKICAgICAgICAjRmlyc3Qgd2Ugc2V0IHVwIHRoZSBkZWZhdWx0IGdhbWUuIExhdGVyIG9uLCBpdCBjYW4gYmUgY3VzdG9taXplZCB0byBpbmNyZWFzZSB0aGUgc2l6ZSBhbmQvb3IgdGhlIHN0YXJ0aW5nIG9wZW5pbmdzCiAgICAgICAgc2VsZi5jcmVhdGVfdHJpYW5nbGUoKQogICAgICAgIHNlbGYucmFuZG9tX3N0YXJ0aW5nX3Bvc2l0aW9uKCkKICAgICAgICBmb3Igcm93IGluIHNlbGYudHJpYW5nbGU6CiAgICAgICAgICAgIHByaW50KHJvdykKICAgICAgICAKICAgICAgICBzZWxmLmZpbmRfdmFsaWRfbW92ZXMoKQogICAgICAgIHdoaWxlIGxlbihzZWxmLnZhbGlkX21vdmVzKSBpcyBub3QgMDoKICAgICAgICAgICAgbW92ZV9udW0gPSByYW5kb20ucmFuZGludCgwLGxlbihzZWxmLnZhbGlkX21vdmVzKS0xKQogICAgICAgICAgICBzZWxmLm1ha2VfbW92ZShzZWxmLnZhbGlkX21vdmVzW21vdmVfbnVtXSkKICAgICAgICAgICAgc2VsZi5maW5kX3ZhbGlkX21vdmVzKCkKCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICBpZiBzZWxmLm51bWJlcl9vZl9wZWdzID09IDE6CiAgICAgICAgICAgICAgICBwcmludCgiR2FtZSBXT04hIikKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCgiR2FtZSBMb3N0ISA6KCIpCiAgICAgICAgICAgIHByaW50KCJGaW5hbCBCb2FyZDogXG4iKQogICAgICAgICAgICBmb3Igcm93IGluIHNlbGYudHJpYW5nbGU6CiAgICAgICAgICAgICAgICBwcmludChyb3cpCgoKICAgIGRlZiBjcmVhdGVfdHJpYW5nbGUoc2VsZik6CiAgICAgICAgZm9yIHJvdyBpbiByYW5nZShzZWxmLnJvd3MpOgogICAgICAgICAgICBzZWxmLnRyaWFuZ2xlLmFwcGVuZChbXSkKICAgICAgICAgICAgZm9yIF8gaW4gcmFuZ2Uocm93KzEpOgogICAgICAgICAgICAgICAgc2VsZi50cmlhbmdsZVtyb3ddLmFwcGVuZCgnWCcpCiAgICAKICAgIGRlZiByYW5kb21fc3RhcnRpbmdfcG9zaXRpb24oc2VsZik6CiAgICAgICAgeV9sb2MgPSByYW5kb20ucmFuZGludCgwLHNlbGYucm93cy0xKQogICAgICAgIHhfbG9jID0gcmFuZG9tLnJhbmRpbnQoMCx5X2xvYykKICAgICAgICBzZWxmLnRyaWFuZ2xlW3lfbG9jXVt4X2xvY10gPSAnTycKCgogICAgZGVmIGZpbmRfdmFsaWRfbW92ZXMoc2VsZik6CiAgICAgICAgc2VsZi52YWxpZF9tb3ZlcyA9IFtdCiAgICAgICAgc2VsZi5udW1iZXJfb2ZfcGVncyA9IDAKICAgICAgICBmb3Igcm93X2luZCwgcm93IGluIGVudW1lcmF0ZShzZWxmLnRyaWFuZ2xlKToKICAgICAgICAgICAgZm9yIHNwYWNlX2luZCwgc3BhY2UgaW4gZW51bWVyYXRlKHJvdyk6CiAgICAgICAgICAgICAgICBpZiBzcGFjZSA9PSAnTyc6Cjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBzZWxmLm51bWJlcl9vZl9wZWdzICs9IDEKCgogICAgZGVmIGZpbmRfcG9zc2libGVfbG9jYXRpb25zKHNlbGYsIHJvdywgc3BhY2UpOgogICAgICAgIHBvc3NpYmxlX21vdmVfZnJvbV9sb2NhdGlvbnMgPSBbXQogICAgICAgIGZvciByb3dfZGlmZiBpbiByYW5nZSgtMiw0LDIpOgogICAgICAgICAgICBmb3Igc3BhY2VfZGlmZiBpbiByYW5nZSgtMiw0LDIpOgogICAgICAgICAgICAgICAgcm93X2NoZWNrID0gcm93ICsgcm93X2RpZmYKICAgICAgICAgICAgICAgIHNwYWNlX2NoZWNrID0gc3BhY2UgKyBzcGFjZV9kaWZmCgogICAgICAgICAgICAgICAgI0NoZWNrIGlmIHZhbGlkIG1vdmUgYW5kIHZhbGlkIHNwYWNlIG90aGVyd2lzZSBtb3ZlIHRvIG5leHQgcG9zc2libGUgc3BhY2UKICAgICAgICAgICAgICAgIGlmIHJvd19kaWZmICogLTEgPT0gc3BhY2VfZGlmZiBvciByb3dfY2hlY2sgPiBzZWxmLnJvd3MtMSBvciBzcGFjZV9jaGVjayA+IHJvd19jaGVjayBvciBzcGFjZV9jaGVjayA+IHNlbGYucm93cy0xOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBpZiByb3dfY2hlY2sgPj0wIGFuZCBzcGFjZV9jaGVjayA+PTA6CiAgICAgICAgICAgICAgICAgICAgcG9zc2libGVfbW92ZV9mcm9tX2xvY2F0aW9ucy5hcHBlbmQoeydtb3ZlIGZyb20nOiBbcm93X2NoZWNrLCBzcGFjZV9jaGVja10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb3ZlIG92ZXInOiBbcm93ICsgKHJvd19kaWZmIC8gMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlICsgKHNwYWNlX2RpZmYgLyAyKV19KQoKICAgICAgICByZXR1cm4gcG9zc2libGVfbW92ZV9mcm9tX2xvY2F0aW9ucwoKICAgIGRlZiBjaGVja19pZl9tb3ZlX3ZhbGlkKHNlbGYsIHBvc3NpYmxlX21vdmVzLCByb3csIHNwYWNlKToKICAgICAgICBmb3IgbW92ZSBpbiBwb3NzaWJsZV9tb3ZlczoKICAgICAgICAgICAgaWYgc2VsZi50cmlhbmdsZVttb3ZlWydtb3ZlIGZyb20nXVswXV1bbW92ZVsnbW92ZSBmcm9tJ11bMV1dID09ICdYJyBhbmQgXAogICAgICAgICAgICAgICAgc2VsZi50cmlhbmdsZVttb3ZlWydtb3ZlIG92ZXInXVswXV1bbW92ZVsnbW92ZSBvdmVyJ11bMV1dID09ICdYJzoKICAgICAgICAgICAgICAgIG1vdmVbJ21vdmUgdG8nXSA9ICBbcm93LCBzcGFjZV0KICAgICAgICAgICAgICAgIHNlbGYudmFsaWRfbW92ZXMuYXBwZW5kKG1vdmUpCgogICAgZGVmIG1ha2VfbW92ZShzZWxmLCBtb3ZlX2RpY3QpOgogICAgICAgIHNlbGYudHJpYW5nbGVbbW92ZV9kaWN0Wydtb3ZlIHRvJ11bMF1dW21vdmVfZGljdFsnbW92ZSB0byddWzFdXSA9ICdYJwogICAgICAgIHNlbGYudHJpYW5nbGVbbW92ZV9kaWN0Wydtb3ZlIGZyb20nXVswXV1bbW92ZV9kaWN0Wydtb3ZlIGZyb20nXVsxXV0gPSAnTycKICAgICAgICBzZWxmLnRyaWFuZ2xlW21vdmVfZGljdFsnbW92ZSBvdmVyJ11bMF1dW21vdmVfZGljdFsnbW92ZSBvdmVyJ11bMV1dID0gJ08nCgoKUGxheUNyYWNrZXJCYXJyZWxHYW1lKDUpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlX21vdmVfbG9jYXRpb25zID0gc2VsZi5maW5kX3Bvc3NpYmxlX2xvY2F0aW9ucyhyb3dfaW5kLCBzcGFjZV9pbmQpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfaWZfbW92ZV92YWxpZChwb3NzaWJsZV9tb3ZlX2xvY2F0aW9ucywgcm93X2luZCwgc3BhY2VfaW5kKQo8fGZpbV9lbmR8Pg=="]
["41627bd5c9f344e7fbaa5982a69a37cac4e7a203-3","41627bd5c9f344e7fbaa5982a69a37cac4e7a203","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJhbmRvbQoKY2xhc3MgUGxheUNyYWNrZXJCYXJyZWxHYW1lKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgcm93cyk6CiAgICAgICAgc2VsZi50cmlhbmdsZSA9IFtdCiAgICAgICAgc2VsZi5yb3dzID0gcm93cwogICAgICAgIHNlbGYudmFsaWRfbW92ZXMgPSBbXQogICAgICAgIHNlbGYubnVtYmVyX29mX3BlZ3MgPSAwCgoKICAgICAgICAjRmlyc3Qgd2Ugc2V0IHVwIHRoZSBkZWZhdWx0IGdhbWUuIExhdGVyIG9uLCBpdCBjYW4gYmUgY3VzdG9taXplZCB0byBpbmNyZWFzZSB0aGUgc2l6ZSBhbmQvb3IgdGhlIHN0YXJ0aW5nIG9wZW5pbmdzCiAgICAgICAgc2VsZi5jcmVhdGVfdHJpYW5nbGUoKQogICAgICAgIHNlbGYucmFuZG9tX3N0YXJ0aW5nX3Bvc2l0aW9uKCkKICAgICAgICBmb3Igcm93IGluIHNlbGYudHJpYW5nbGU6CiAgICAgICAgICAgIHByaW50KHJvdykKICAgICAgICAKICAgICAgICBzZWxmLmZpbmRfdmFsaWRfbW92ZXMoKQogICAgICAgIHdoaWxlIGxlbihzZWxmLnZhbGlkX21vdmVzKSBpcyBub3QgMDoKICAgICAgICAgICAgbW92ZV9udW0gPSByYW5kb20ucmFuZGludCgwLGxlbihzZWxmLnZhbGlkX21vdmVzKS0xKQogICAgICAgICAgICBzZWxmLm1ha2VfbW92ZShzZWxmLnZhbGlkX21vdmVzW21vdmVfbnVtXSkKICAgICAgICAgICAgc2VsZi5maW5kX3ZhbGlkX21vdmVzKCkKCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICBpZiBzZWxmLm51bWJlcl9vZl9wZWdzID09IDE6CiAgICAgICAgICAgICAgICBwcmludCgiR2FtZSBXT04hIikKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCgiR2FtZSBMb3N0ISA6KCIpCiAgICAgICAgICAgIHByaW50KCJGaW5hbCBCb2FyZDogXG4iKQogICAgICAgICAgICBmb3Igcm93IGluIHNlbGYudHJpYW5nbGU6CiAgICAgICAgICAgICAgICBwcmludChyb3cpCgoKICAgIGRlZiBjcmVhdGVfdHJpYW5nbGUoc2VsZik6CiAgICAgICAgZm9yIHJvdyBpbiByYW5nZShzZWxmLnJvd3MpOgogICAgICAgICAgICBzZWxmLnRyaWFuZ2xlLmFwcGVuZChbXSkKICAgICAgICAgICAgZm9yIF8gaW4gcmFuZ2Uocm93KzEpOgogICAgICAgICAgICAgICAgc2VsZi50cmlhbmdsZVtyb3ddLmFwcGVuZCgnWCcpCiAgICAKICAgIGRlZiByYW5kb21fc3RhcnRpbmdfcG9zaXRpb24oc2VsZik6CiAgICAgICAgeV9sb2MgPSByYW5kb20ucmFuZGludCgwLHNlbGYucm93cy0xKQogICAgICAgIHhfbG9jID0gcmFuZG9tLnJhbmRpbnQoMCx5X2xvYykKICAgICAgICBzZWxmLnRyaWFuZ2xlW3lfbG9jXVt4X2xvY10gPSAnTycKCgogICAgZGVmIGZpbmRfdmFsaWRfbW92ZXMoc2VsZik6CiAgICAgICAgc2VsZi52YWxpZF9tb3ZlcyA9IFtdCiAgICAgICAgc2VsZi5udW1iZXJfb2ZfcGVncyA9IDAKICAgICAgICBmb3Igcm93X2luZCwgcm93IGluIGVudW1lcmF0ZShzZWxmLnRyaWFuZ2xlKToKICAgICAgICAgICAgZm9yIHNwYWNlX2luZCwgc3BhY2UgaW4gZW51bWVyYXRlKHJvdyk6CiAgICAgICAgICAgICAgICBpZiBzcGFjZSA9PSAnTyc6CiAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlX21vdmVfbG9jYXRpb25zID0gc2VsZi5maW5kX3Bvc3NpYmxlX2xvY2F0aW9ucyhyb3dfaW5kLCBzcGFjZV9pbmQpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfaWZfbW92ZV92YWxpZChwb3NzaWJsZV9tb3ZlX2xvY2F0aW9ucywgcm93X2luZCwgc3BhY2VfaW5kKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBzZWxmLm51bWJlcl9vZl9wZWdzICs9IDEKCgogICAgZGVmIGZpbmRfcG9zc2libGVfbG9jYXRpb25zKHNlbGYsIHJvdywgc3BhY2UpOgogICAgICAgIHBvc3NpYmxlX21vdmVfZnJvbV9sb2NhdGlvbnMgPSBbXQogICAgICAgIGZvciByb3dfZGlmZiBpbiByYW5nZSgtMiw0LDIpOgogICAgICAgICAgICBmb3Igc3BhY2VfZGlmZiBpbiByYW5nZSgtMiw0LDIpOgogICAgICAgICAgICAgICAgcm93X2NoZWNrID0gcm93ICsgcm93X2RpZmYKICAgICAgICAgICAgICAgIHNwYWNlX2NoZWNrID0gc3BhY2UgKyBzcGFjZV9kaWZmCgogICAgICAgICAgICAgICAgI0NoZWNrIGlmIHZhbGlkIG1vdmUgYW5kIHZhbGlkIHNwYWNlIG90aGVyd2lzZSBtb3ZlIHRvIG5leHQgcG9zc2libGUgc3BhY2UKICAgICAgICAgICAgICAgIGlmIHJvd19kaWZmICogLTEgPT0gc3BhY2VfZGlmZiBvciByb3dfY2hlY2sgPiBzZWxmLnJvd3MtMSBvciBzcGFjZV9jaGVjayA+IHJvd19jaGVjayBvciBzcGFjZV9jaGVjayA+IHNlbGYucm93cy0xOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBpZiByb3dfY2hlY2sgPj0wIGFuZCBzcGFjZV9jaGVjayA+PTA6CiAgICAgICAgICAgICAgICAgICAgcG9zc2libGVfbW92ZV9mcm9tX2xvY2F0aW9ucy5hcHBlbmQoeydtb3ZlIGZyb20nOiBbcm93X2NoZWNrLCBzcGFjZV9jaGVja10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb3ZlIG92ZXInOiBbcm93ICsgKHJvd19kaWZmIC8gMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlICsgKHNwYWNlX2RpZmYgLyAyKV19KQoKICAgICAgICByZXR1cm4gcG9zc2libGVfbW92ZV9mcm9tX2xvY2F0aW9ucwoKICAgIGRlZiBjaGVja19pZl9tb3ZlX3ZhbGlkKHNlbGYsIHBvc3NpYmxlX21vdmVzLCByb3csIHNwYWNlKToKICAgICAgICBmb3IgbW92ZSBpbiBwb3NzaWJsZV9tb3ZlczoKICAgICAgICAgICAgaWYgc2VsZi50cmlhbmdsZVttb3ZlWydtb3ZlIGZyb20nXVswXV1bbW92ZVsnbW92ZSBmcm9tJ11bMV1dID09ICdYJyBhbmQgXAogICAgICAgICAgICAgICAgc2VsZi50cmlhbmdsZVttb3ZlWydtb3ZlIG92ZXInXVswXV1bbW92ZVsnbW92ZSBvdmVyJ11bMV1dID09ICdYJzoKICAgICAgICAgICAgICAgIG1vdmVbJ21vdmUgdG8nXSA9ICBbcm93LCBzcGFjZV0KICAgICAgICAgICAgICAgIHNlbGYudmFsaWRfbW92ZXMuYXBwZW5kKG1vdmUpCgogICAgZGVmIG1ha2VfbW92ZShzZWxmLCBtb3ZlX2RpY3QpOgo8fGZpbV9ob2xlfD4KClBsYXlDcmFja2VyQmFycmVsR2FtZSg1KQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYudHJpYW5nbGVbbW92ZV9kaWN0Wydtb3ZlIHRvJ11bMF1dW21vdmVfZGljdFsnbW92ZSB0byddWzFdXSA9ICdYJwogICAgICAgIHNlbGYudHJpYW5nbGVbbW92ZV9kaWN0Wydtb3ZlIGZyb20nXVswXV1bbW92ZV9kaWN0Wydtb3ZlIGZyb20nXVsxXV0gPSAnTycKICAgICAgICBzZWxmLnRyaWFuZ2xlW21vdmVfZGljdFsnbW92ZSBvdmVyJ11bMF1dW21vdmVfZGljdFsnbW92ZSBvdmVyJ11bMV1dID0gJ08nCgo8fGZpbV9lbmR8Pg=="]
["41627bd5c9f344e7fbaa5982a69a37cac4e7a203-4","41627bd5c9f344e7fbaa5982a69a37cac4e7a203","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJhbmRvbQoKY2xhc3MgUGxheUNyYWNrZXJCYXJyZWxHYW1lKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgcm93cyk6CiAgICAgICAgc2VsZi50cmlhbmdsZSA9IFtdCiAgICAgICAgc2VsZi5yb3dzID0gcm93cwogICAgICAgIHNlbGYudmFsaWRfbW92ZXMgPSBbXQogICAgICAgIHNlbGYubnVtYmVyX29mX3BlZ3MgPSAwCgoKICAgICAgICAjRmlyc3Qgd2Ugc2V0IHVwIHRoZSBkZWZhdWx0IGdhbWUuIExhdGVyIG9uLCBpdCBjYW4gYmUgY3VzdG9taXplZCB0byBpbmNyZWFzZSB0aGUgc2l6ZSBhbmQvb3IgdGhlIHN0YXJ0aW5nIG9wZW5pbmdzCiAgICAgICAgc2VsZi5jcmVhdGVfdHJpYW5nbGUoKQogICAgICAgIHNlbGYucmFuZG9tX3N0YXJ0aW5nX3Bvc2l0aW9uKCkKICAgICAgICBmb3Igcm93IGluIHNlbGYudHJpYW5nbGU6CiAgICAgICAgICAgIHByaW50KHJvdykKICAgICAgICAKICAgICAgICBzZWxmLmZpbmRfdmFsaWRfbW92ZXMoKQogICAgICAgIHdoaWxlIGxlbihzZWxmLnZhbGlkX21vdmVzKSBpcyBub3QgMDoKICAgICAgICAgICAgbW92ZV9udW0gPSByYW5kb20ucmFuZGludCgwLGxlbihzZWxmLnZhbGlkX21vdmVzKS0xKQogICAgICAgICAgICBzZWxmLm1ha2VfbW92ZShzZWxmLnZhbGlkX21vdmVzW21vdmVfbnVtXSkKPHxmaW1faG9sZXw+CiAgICAgICAgaWYgc2VsZi5udW1iZXJfb2ZfcGVncyA9PSAxOgogICAgICAgICAgICAgICAgcHJpbnQoIkdhbWUgV09OISIpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQoIkdhbWUgTG9zdCEgOigiKQogICAgICAgICAgICBwcmludCgiRmluYWwgQm9hcmQ6IFxuIikKICAgICAgICAgICAgZm9yIHJvdyBpbiBzZWxmLnRyaWFuZ2xlOgogICAgICAgICAgICAgICAgcHJpbnQocm93KQoKCiAgICBkZWYgY3JlYXRlX3RyaWFuZ2xlKHNlbGYpOgogICAgICAgIGZvciByb3cgaW4gcmFuZ2Uoc2VsZi5yb3dzKToKICAgICAgICAgICAgc2VsZi50cmlhbmdsZS5hcHBlbmQoW10pCiAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKHJvdysxKToKICAgICAgICAgICAgICAgIHNlbGYudHJpYW5nbGVbcm93XS5hcHBlbmQoJ1gnKQogICAgCiAgICBkZWYgcmFuZG9tX3N0YXJ0aW5nX3Bvc2l0aW9uKHNlbGYpOgogICAgICAgIHlfbG9jID0gcmFuZG9tLnJhbmRpbnQoMCxzZWxmLnJvd3MtMSkKICAgICAgICB4X2xvYyA9IHJhbmRvbS5yYW5kaW50KDAseV9sb2MpCiAgICAgICAgc2VsZi50cmlhbmdsZVt5X2xvY11beF9sb2NdID0gJ08nCgoKICAgIGRlZiBmaW5kX3ZhbGlkX21vdmVzKHNlbGYpOgogICAgICAgIHNlbGYudmFsaWRfbW92ZXMgPSBbXQogICAgICAgIHNlbGYubnVtYmVyX29mX3BlZ3MgPSAwCiAgICAgICAgZm9yIHJvd19pbmQsIHJvdyBpbiBlbnVtZXJhdGUoc2VsZi50cmlhbmdsZSk6CiAgICAgICAgICAgIGZvciBzcGFjZV9pbmQsIHNwYWNlIGluIGVudW1lcmF0ZShyb3cpOgogICAgICAgICAgICAgICAgaWYgc3BhY2UgPT0gJ08nOgogICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZV9tb3ZlX2xvY2F0aW9ucyA9IHNlbGYuZmluZF9wb3NzaWJsZV9sb2NhdGlvbnMocm93X2luZCwgc3BhY2VfaW5kKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2lmX21vdmVfdmFsaWQocG9zc2libGVfbW92ZV9sb2NhdGlvbnMsIHJvd19pbmQsIHNwYWNlX2luZCkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5udW1iZXJfb2ZfcGVncyArPSAxCgoKICAgIGRlZiBmaW5kX3Bvc3NpYmxlX2xvY2F0aW9ucyhzZWxmLCByb3csIHNwYWNlKToKICAgICAgICBwb3NzaWJsZV9tb3ZlX2Zyb21fbG9jYXRpb25zID0gW10KICAgICAgICBmb3Igcm93X2RpZmYgaW4gcmFuZ2UoLTIsNCwyKToKICAgICAgICAgICAgZm9yIHNwYWNlX2RpZmYgaW4gcmFuZ2UoLTIsNCwyKToKICAgICAgICAgICAgICAgIHJvd19jaGVjayA9IHJvdyArIHJvd19kaWZmCiAgICAgICAgICAgICAgICBzcGFjZV9jaGVjayA9IHNwYWNlICsgc3BhY2VfZGlmZgoKICAgICAgICAgICAgICAgICNDaGVjayBpZiB2YWxpZCBtb3ZlIGFuZCB2YWxpZCBzcGFjZSBvdGhlcndpc2UgbW92ZSB0byBuZXh0IHBvc3NpYmxlIHNwYWNlCiAgICAgICAgICAgICAgICBpZiByb3dfZGlmZiAqIC0xID09IHNwYWNlX2RpZmYgb3Igcm93X2NoZWNrID4gc2VsZi5yb3dzLTEgb3Igc3BhY2VfY2hlY2sgPiByb3dfY2hlY2sgb3Igc3BhY2VfY2hlY2sgPiBzZWxmLnJvd3MtMToKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgaWYgcm93X2NoZWNrID49MCBhbmQgc3BhY2VfY2hlY2sgPj0wOgogICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlX21vdmVfZnJvbV9sb2NhdGlvbnMuYXBwZW5kKHsnbW92ZSBmcm9tJzogW3Jvd19jaGVjaywgc3BhY2VfY2hlY2tdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbW92ZSBvdmVyJzogW3JvdyArIChyb3dfZGlmZiAvIDIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZSArIChzcGFjZV9kaWZmIC8gMildfSkKCiAgICAgICAgcmV0dXJuIHBvc3NpYmxlX21vdmVfZnJvbV9sb2NhdGlvbnMKCiAgICBkZWYgY2hlY2tfaWZfbW92ZV92YWxpZChzZWxmLCBwb3NzaWJsZV9tb3Zlcywgcm93LCBzcGFjZSk6CiAgICAgICAgZm9yIG1vdmUgaW4gcG9zc2libGVfbW92ZXM6CiAgICAgICAgICAgIGlmIHNlbGYudHJpYW5nbGVbbW92ZVsnbW92ZSBmcm9tJ11bMF1dW21vdmVbJ21vdmUgZnJvbSddWzFdXSA9PSAnWCcgYW5kIFwKICAgICAgICAgICAgICAgIHNlbGYudHJpYW5nbGVbbW92ZVsnbW92ZSBvdmVyJ11bMF1dW21vdmVbJ21vdmUgb3ZlciddWzFdXSA9PSAnWCc6CiAgICAgICAgICAgICAgICBtb3ZlWydtb3ZlIHRvJ10gPSAgW3Jvdywgc3BhY2VdCiAgICAgICAgICAgICAgICBzZWxmLnZhbGlkX21vdmVzLmFwcGVuZChtb3ZlKQoKICAgIGRlZiBtYWtlX21vdmUoc2VsZiwgbW92ZV9kaWN0KToKICAgICAgICBzZWxmLnRyaWFuZ2xlW21vdmVfZGljdFsnbW92ZSB0byddWzBdXVttb3ZlX2RpY3RbJ21vdmUgdG8nXVsxXV0gPSAnWCcKICAgICAgICBzZWxmLnRyaWFuZ2xlW21vdmVfZGljdFsnbW92ZSBmcm9tJ11bMF1dW21vdmVfZGljdFsnbW92ZSBmcm9tJ11bMV1dID0gJ08nCiAgICAgICAgc2VsZi50cmlhbmdsZVttb3ZlX2RpY3RbJ21vdmUgb3ZlciddWzBdXVttb3ZlX2RpY3RbJ21vdmUgb3ZlciddWzFdXSA9ICdPJwoKClBsYXlDcmFja2VyQmFycmVsR2FtZSg1KQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBzZWxmLmZpbmRfdmFsaWRfbW92ZXMoKQoKICAgICAgICAgICAgCiAgICAgICAgICAgIAo8fGZpbV9lbmR8Pg=="]
["41627bd5c9f344e7fbaa5982a69a37cac4e7a203-5","41627bd5c9f344e7fbaa5982a69a37cac4e7a203","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJhbmRvbQoKY2xhc3MgUGxheUNyYWNrZXJCYXJyZWxHYW1lKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgcm93cyk6CiAgICAgICAgc2VsZi50cmlhbmdsZSA9IFtdCiAgICAgICAgc2VsZi5yb3dzID0gcm93cwogICAgICAgIHNlbGYudmFsaWRfbW92ZXMgPSBbXQogICAgICAgIHNlbGYubnVtYmVyX29mX3BlZ3MgPSAwCgoKICAgICAgICAjRmlyc3Qgd2Ugc2V0IHVwIHRoZSBkZWZhdWx0IGdhbWUuIExhdGVyIG9uLCBpdCBjYW4gYmUgY3VzdG9taXplZCB0byBpbmNyZWFzZSB0aGUgc2l6ZSBhbmQvb3IgdGhlIHN0YXJ0aW5nIG9wZW5pbmdzCiAgICAgICAgc2VsZi5jcmVhdGVfdHJpYW5nbGUoKQogICAgICAgIHNlbGYucmFuZG9tX3N0YXJ0aW5nX3Bvc2l0aW9uKCkKICAgICAgICBmb3Igcm93IGluIHNlbGYudHJpYW5nbGU6CiAgICAgICAgICAgIHByaW50KHJvdykKICAgICAgICAKICAgICAgICBzZWxmLmZpbmRfdmFsaWRfbW92ZXMoKQogICAgICAgIHdoaWxlIGxlbihzZWxmLnZhbGlkX21vdmVzKSBpcyBub3QgMDoKICAgICAgICAgICAgbW92ZV9udW0gPSByYW5kb20ucmFuZGludCgwLGxlbihzZWxmLnZhbGlkX21vdmVzKS0xKQogICAgICAgICAgICBzZWxmLm1ha2VfbW92ZShzZWxmLnZhbGlkX21vdmVzW21vdmVfbnVtXSkKICAgICAgICAgICAgc2VsZi5maW5kX3ZhbGlkX21vdmVzKCkKCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICBpZiBzZWxmLm51bWJlcl9vZl9wZWdzID09IDE6CiAgICAgICAgICAgICAgICBwcmludCgiR2FtZSBXT04hIikKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCgiR2FtZSBMb3N0ISA6KCIpCiAgICAgICAgICAgIHByaW50KCJGaW5hbCBCb2FyZDogXG4iKQogICAgICAgICAgICBmb3Igcm93IGluIHNlbGYudHJpYW5nbGU6CiAgICAgICAgICAgICAgICBwcmludChyb3cpCgoKICAgIGRlZiBjcmVhdGVfdHJpYW5nbGUoc2VsZik6CiAgICAgICAgZm9yIHJvdyBpbiByYW5nZShzZWxmLnJvd3MpOgogICAgICAgICAgICBzZWxmLnRyaWFuZ2xlLmFwcGVuZChbXSkKICAgICAgICAgICAgZm9yIF8gaW4gcmFuZ2Uocm93KzEpOgogICAgICAgICAgICAgICAgc2VsZi50cmlhbmdsZVtyb3ddLmFwcGVuZCgnWCcpCiAgICAKICAgIGRlZiByYW5kb21fc3RhcnRpbmdfcG9zaXRpb24oc2VsZik6CiAgICAgICAgeV9sb2MgPSByYW5kb20ucmFuZGludCgwLHNlbGYucm93cy0xKQogICAgICAgIHhfbG9jID0gcmFuZG9tLnJhbmRpbnQoMCx5X2xvYykKICAgICAgICBzZWxmLnRyaWFuZ2xlW3lfbG9jXVt4X2xvY10gPSAnTycKCgogICAgZGVmIGZpbmRfdmFsaWRfbW92ZXMoc2VsZik6CiAgICAgICAgc2VsZi52YWxpZF9tb3ZlcyA9IFtdCiAgICAgICAgc2VsZi5udW1iZXJfb2ZfcGVncyA9IDAKICAgICAgICBmb3Igcm93X2luZCwgcm93IGluIGVudW1lcmF0ZShzZWxmLnRyaWFuZ2xlKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBmb3Igc3BhY2VfaW5kLCBzcGFjZSBpbiBlbnVtZXJhdGUocm93KToKICAgICAgICAgICAgICAgIGlmIHNwYWNlID09ICdPJzoKICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVfbW92ZV9sb2NhdGlvbnMgPSBzZWxmLmZpbmRfcG9zc2libGVfbG9jYXRpb25zKHJvd19pbmQsIHNwYWNlX2luZCkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19pZl9tb3ZlX3ZhbGlkKHBvc3NpYmxlX21vdmVfbG9jYXRpb25zLCByb3dfaW5kLCBzcGFjZV9pbmQpCjx8ZmltX2VuZHw+"]
["8219f63b37c2082b48899ead57b6f01e3f21d7d8-1","8219f63b37c2082b48899ead57b6f01e3f21d7d8","PHxmaW1fcHJlZml4fD4KZnJvbSBzYW1wbGUucGluZyBpbXBvcnQgcGluZyBhcyByZXNwb25kcwpmcm9tIHNhbXBsZS5zbGFjayBpbXBvcnQgKgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gZGF0YS5kYXRhIGltcG9ydCAqCgojIExvb3BzIHRocm91Z2ggYWxsIGhvc3RzIGZyb20gZGF0YS5weSBhbmQgc2VuZHMgYSBTbGFjayBub3RpZmljYXRpb24KIyBldmVyeSB0aW1lIGEgaG9zdCBkb2VzIG5vdCByZXNwb25kCjx8ZmltX2VuZHw+"]
["8219f63b37c2082b48899ead57b6f01e3f21d7d8-2","8219f63b37c2082b48899ead57b6f01e3f21d7d8","PHxmaW1fcHJlZml4fD4KZnJvbSBzYW1wbGUucGluZyBpbXBvcnQgcGluZyBhcyByZXNwb25kcwpmcm9tIHNhbXBsZS5zbGFjayBpbXBvcnQgKgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gZGF0YS5kYXRhIGltcG9ydCAqCgojIExvb3BzIHRocm91Z2ggYWxsIGhvc3RzIGZyb20gZGF0YS5weSBhbmQgc2VuZHMgYSBTbGFjayBub3RpZmljYXRpb24KIyBldmVyeSB0aW1lIGEgaG9zdCBkb2VzIG5vdCByZXNwb25kCjx8ZmltX2VuZHw+"]
["8219f63b37c2082b48899ead57b6f01e3f21d7d8-3","8219f63b37c2082b48899ead57b6f01e3f21d7d8","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgojIExvb3BzIHRocm91Z2ggYWxsIGhvc3RzIGZyb20gZGF0YS5weSBhbmQgc2VuZHMgYSBTbGFjayBub3RpZmljYXRpb24KIyBldmVyeSB0aW1lIGEgaG9zdCBkb2VzIG5vdCByZXNwb25kCmZvciBob3N0IGluIGhvc3RzOgogICAgaWYgbm90IHJlc3BvbmRzKGhvc3RbMV0pOgogICAgICAgIHNlbmRfc2xhY2tfbm90aWZpY2F0aW9uKHNsYWNrX3dlYmhvb2tfdXJsLCBzbGFja19tZXNzYWdlKGhvc3QpKQo8fGZpbV9zdWZmaXh8Pgpmcm9tIHNhbXBsZS5waW5nIGltcG9ydCBwaW5nIGFzIHJlc3BvbmRzCmZyb20gc2FtcGxlLnNsYWNrIGltcG9ydCAqCmZyb20gZGF0YS5kYXRhIGltcG9ydCAqCgo8fGZpbV9lbmR8Pg=="]
["8219f63b37c2082b48899ead57b6f01e3f21d7d8-4","8219f63b37c2082b48899ead57b6f01e3f21d7d8","PHxmaW1fcHJlZml4fD4KZnJvbSBzYW1wbGUucGluZyBpbXBvcnQgcGluZyBhcyByZXNwb25kcwpmcm9tIHNhbXBsZS5zbGFjayBpbXBvcnQgKgpmcm9tIGRhdGEuZGF0YSBpbXBvcnQgKgoKIyBMb29wcyB0aHJvdWdoIGFsbCBob3N0cyBmcm9tIGRhdGEucHkgYW5kIHNlbmRzIGEgU2xhY2sgbm90aWZpY2F0aW9uCiMgZXZlcnkgdGltZSBhIGhvc3QgZG9lcyBub3QgcmVzcG9uZApmb3IgaG9zdCBpbiBob3N0czoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgaWYgbm90IHJlc3BvbmRzKGhvc3RbMV0pOgogICAgICAgIHNlbmRfc2xhY2tfbm90aWZpY2F0aW9uKHNsYWNrX3dlYmhvb2tfdXJsLCBzbGFja19tZXNzYWdlKGhvc3QpKQo8fGZpbV9lbmR8Pg=="]
["8219f63b37c2082b48899ead57b6f01e3f21d7d8-5","8219f63b37c2082b48899ead57b6f01e3f21d7d8","PHxmaW1fcHJlZml4fD4KZnJvbSBzYW1wbGUucGluZyBpbXBvcnQgcGluZyBhcyByZXNwb25kcwpmcm9tIHNhbXBsZS5zbGFjayBpbXBvcnQgKgpmcm9tIGRhdGEuZGF0YSBpbXBvcnQgKgoKIyBMb29wcyB0aHJvdWdoIGFsbCBob3N0cyBmcm9tIGRhdGEucHkgYW5kIHNlbmRzIGEgU2xhY2sgbm90aWZpY2F0aW9uCiMgZXZlcnkgdGltZSBhIGhvc3QgZG9lcyBub3QgcmVzcG9uZAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZvciBob3N0IGluIGhvc3RzOgogICAgaWYgbm90IHJlc3BvbmRzKGhvc3RbMV0pOgogICAgICAgIHNlbmRfc2xhY2tfbm90aWZpY2F0aW9uKHNsYWNrX3dlYmhvb2tfdXJsLCBzbGFja19tZXNzYWdlKGhvc3QpKQo8fGZpbV9lbmR8Pg=="]
["2e00144a5004f67f83ef22b383fe23ff9f5defd0-1","2e00144a5004f67f83ef22b383fe23ff9f5defd0","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmYXVsdF9hcHBfY29uZmlnID0gJ21lbWJlcnNoaXAuYXBwcy5NZW1iZXJzaGlwQXBwQ29uZmlnJwo8fGZpbV9lbmR8Pg=="]
["2e00144a5004f67f83ef22b383fe23ff9f5defd0-2","2e00144a5004f67f83ef22b383fe23ff9f5defd0","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmYXVsdF9hcHBfY29uZmlnID0gJ21lbWJlcnNoaXAuYXBwcy5NZW1iZXJzaGlwQXBwQ29uZmlnJwo8fGZpbV9lbmR8Pg=="]
["2e00144a5004f67f83ef22b383fe23ff9f5defd0-3","2e00144a5004f67f83ef22b383fe23ff9f5defd0","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmYXVsdF9hcHBfY29uZmlnID0gJ21lbWJlcnNoaXAuYXBwcy5NZW1iZXJzaGlwQXBwQ29uZmlnJwo8fGZpbV9lbmR8Pg=="]
["2e00144a5004f67f83ef22b383fe23ff9f5defd0-4","2e00144a5004f67f83ef22b383fe23ff9f5defd0","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmYXVsdF9hcHBfY29uZmlnID0gJ21lbWJlcnNoaXAuYXBwcy5NZW1iZXJzaGlwQXBwQ29uZmlnJwo8fGZpbV9lbmR8Pg=="]
["2e00144a5004f67f83ef22b383fe23ff9f5defd0-5","2e00144a5004f67f83ef22b383fe23ff9f5defd0","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmYXVsdF9hcHBfY29uZmlnID0gJ21lbWJlcnNoaXAuYXBwcy5NZW1iZXJzaGlwQXBwQ29uZmlnJwo8fGZpbV9lbmR8Pg=="]
["da131e2e3880dff5ebfe6ac3f81b30b65cfb3ead-1","da131e2e3880dff5ebfe6ac3f81b30b65cfb3ead","PHxmaW1fcHJlZml4fD4KIyBJbXBvcnQgc3RhbmRhcmQgbGlicmFyaWVzCmltcG9ydCBvcwppbXBvcnQgcmUKaW1wb3J0IGdsb2IKCiMgSW1wb3J0IHRoaXJkIHBhcnR5IGxpYnJhcmllcwppbXBvcnQgcGFuZGFzIGFzIHBkCgoKIyBEZWZpbmUgYSBmdW5jdGlvbiB0aGF0IGlkZW50aWZpZXMgdGhlIGxpc3Qgb2YgaW5kaWNhdG9ycyBhbmQgZ2VuZXJhdGVzCiMgbmV3IGluZGljYXRvciBmaWxlcyBmb3IgZWFjaCBvZiB0aGVtCmRlZiByZXNldF9jc3ZzKCk6CiAgICAiIiIKICAgIFJlc2V0IHRoZSBjc3YgZmlsZXMgd2l0aCB0ZXN0IGRhdGEKICAgICIiIgogICAgIyBQZXJmb3JtIGNoZWNrcyB0byBtYWtlIHN1cmUgdGhlIGFyZ3VtZW50cyB3ZXJlIHBhc3NlZCBjb3JyZWN0bHkKICAgIGluZGljYXRvcnMgPSBnbG9iLmdsb2IoIi4uL2RhdGEvaW5kaWNhdG9yXyouY3N2IikKICAgIGlmIGxlbihpbmRpY2F0b3JzKSA9PSAwOgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiRGlkbid0IGZpbmQgYW55IGluZGljYXRvcnMgaW4gZGF0YSBkaXJlY3RvcnkiKQoKICAgICMgQ3JlYXRlIHRoZSB0ZXN0IGRhdGEgc2V0cwogICAgYmxhbmtfZGYgPSB7CiAgICAgICdZZWFyJzogWzIwMTUsIDIwMTUsIDIwMTUsIDIwMTYsIDIwMTYsIDIwMTZdLAogICAgICAnR3JvdXAnOiBbJ0EnLCAnQicsICcnLCAnQScsICdCJywgJyddLAogICAgICAnVmFsdWUnOiBbMSwgMywgMiwgMSwgMywgMl0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgfQogICAgYmxhbmtfZGYgPSBwZC5EYXRhRnJhbWUoCiAgICAgICAgYmxhbmtfZGYsIGNvbHVtbnM9WydZZWFyJywgJ0dyb3VwJywgJ1ZhbHVlJ10KICAgICkKPHxmaW1fZW5kfD4="]
["da131e2e3880dff5ebfe6ac3f81b30b65cfb3ead-2","da131e2e3880dff5ebfe6ac3f81b30b65cfb3ead","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBJbXBvcnQgc3RhbmRhcmQgbGlicmFyaWVzCmltcG9ydCBvcwppbXBvcnQgcmUKaW1wb3J0IGdsb2IKPHxmaW1fZW5kfD4="]
["da131e2e3880dff5ebfe6ac3f81b30b65cfb3ead-3","da131e2e3880dff5ebfe6ac3f81b30b65cfb3ead","PHxmaW1fcHJlZml4fD4KIyBJbXBvcnQgc3RhbmRhcmQgbGlicmFyaWVzCmltcG9ydCBvcwppbXBvcnQgcmUKaW1wb3J0IGdsb2IKCiMgSW1wb3J0IHRoaXJkIHBhcnR5IGxpYnJhcmllcwppbXBvcnQgcGFuZGFzIGFzIHBkCgoKIyBEZWZpbmUgYSBmdW5jdGlvbiB0aGF0IGlkZW50aWZpZXMgdGhlIGxpc3Qgb2YgaW5kaWNhdG9ycyBhbmQgZ2VuZXJhdGVzCiMgbmV3IGluZGljYXRvciBmaWxlcyBmb3IgZWFjaCBvZiB0aGVtCmRlZiByZXNldF9jc3ZzKCk6CiAgICAiIiIKICAgIFJlc2V0IHRoZSBjc3YgZmlsZXMgd2l0aCB0ZXN0IGRhdGEKICAgICIiIgogICAgIyBQZXJmb3JtIGNoZWNrcyB0byBtYWtlIHN1cmUgdGhlIGFyZ3VtZW50cyB3ZXJlIHBhc3NlZCBjb3JyZWN0bHkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgaW5kaWNhdG9ycyA9IGdsb2IuZ2xvYigiLi4vZGF0YS9pbmRpY2F0b3JfKi5jc3YiKQogICAgaWYgbGVuKGluZGljYXRvcnMpID09IDA6CiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJEaWRuJ3QgZmluZCBhbnkgaW5kaWNhdG9ycyBpbiBkYXRhIGRpcmVjdG9yeSIpCgo8fGZpbV9lbmR8Pg=="]
["6bb6095f74c17059abe421db2e1106a48f5d6b27-1","6bb6095f74c17059abe421db2e1106a48f5d6b27",{"$cut":{"chars":22072,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIE9yYW5nZS5kYXRhIGltcG9ydCBUYWJsZSwgRG9tYWluLCBDb250aW51b3VzVmFyaWFibGUsIERpc2NyZXRlVmFyaWFibGUKZnJvbSBPcmFuZ2UubW9kZWxsaW5nIGltcG9ydCBSYW5kb21Gb3Jlc3RMZWFybmVyLCBTR0RMZWFybmVyCmZyb20gT3JhbmdlLnByZXByb2Nlc3Muc2NvcmUgaW1wb3J0IFNjb3Jlcgpmcm9tIE9yYW5nZS5jbGFzc2lmaWNhdGlvbiBpbXBvcnQgTG9naXN0aWNSZWdyZXNzaW9uTGVhcm5lcgpmcm9tIE9yYW5nZS5yZWdyZXNzaW9uIGltcG9ydCBMaW5lYXJSZWdyZXNzaW9uTGVhcm5lcgpmcm9tIE9yYW5nZS5wcm9qZWN0aW9uIGltcG9ydCBQQ0EKZnJvbSBPcmFuZ2Uud2lkZ2V0cy5kYXRhLm93cmFuayBpbXBvcnQgT1dSYW5rLCBQcm9ibGVtVHlwZSwgQ0xTX1NDT1JFUywgUkVHX1NDT1JFUwpmcm9tIE9yYW5nZS53aWRnZXRzLnRlc3RzLmJhc2UgaW1wb3J0IFdpZGdldFRlc3QKCmZyb20gQW55UXQuUXRDb3JlIGltcG9ydCBRdCwgUUl0ZW1TZWxlY3Rpb24KZnJvbSBBbnlRdC5RdFdpZGdldHMgaW1wb3J0IFFDaGVja0JveAoKCmNsYXNzIFRlc3RPV1JhbmsoV2lkZ2V0VGVzdCk6CiAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgc2VsZi53aWRnZXQgPSBzZWxmLmNyZWF0ZV93aWRnZXQoT1dSYW5rKSAgIyB0eXBlOiBPV1JhbmsKICAgICAgICBzZWxmLmlyaXMgPSBUYWJsZSgiaXJpcyIpCiAgICAgICAgc2VsZi5ob3VzaW5nID0gVGFibGUoImhvdXNpbmciKQogICAgICAgIHNlbGYubG9nX3JlZyA9IExvZ2lzdGljUmVncmVzc2lvbkxlYXJuZXIoKQogICAgICAgIHNlbGYubGluX3JlZyA9IExpbmVhclJlZ3Jlc3Npb25MZWFybmVyKCkKICAgICAgICBzZWxmLnBjYSA9IFBDQSgpCgogICAgZGVmIF9nZXRfY2hlY2tib3goc2VsZiwgbWV0aG9kX3Nob3J0bmFtZSk6CiAgICAgICAgcmV0dXJuIHNlbGYud2lkZ2V0LmNvbnRyb2xBcmVhLmZpbmRDaGlsZChRQ2hlY2tCb3gsIG1ldGhvZF9zaG9ydG5hbWUpCgogICAgZGVmIHRlc3RfaW5wdXRfZGF0YShzZWxmKToKICAgICAgICAiIiJDaGVjayB3aWRnZXQncyBkYXRhIHdpdGggZGF0YSBvbiB0aGUgaW5wdXQiIiIKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LmRhdGEsIE5vbmUpCiAgICAgICAgc2VsZi5zZW5kX3NpZ25hbChzZWxmLndpZGdldC5JbnB1dHMuZGF0YSwgc2VsZi5pcmlzKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53aWRnZXQuZGF0YSwgc2VsZi5pcmlzKQoKICAgIGRlZiB0ZXN0X2lucHV0X2RhdGFfZGlzY29ubmVjdChzZWxmKToKICAgICAgICAiIiJDaGVjayB3aWRnZXQncyBkYXRhIGFmdGVyIGRpc2Nvbm5lY3RpbmcgZGF0YSBvbiB0aGUgaW5wdXQiIiIKICAgICAgICBzZWxmLnNlbmRfc2lnbmFsKHNlbGYud2lkZ2V0LklucHV0cy5kYXRhLCBzZWxmLmlyaXMpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndpZGdldC5kYXRhLCBzZWxmLmlyaXMpCiAgICAgICAgc2VsZi5zZW5kX3NpZ25hbChzZWxmLndpZGdldC5JbnB1dHMuZGF0YSwgTm9uZSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LmRhdGEsIE5vbmUpCgogICAgZGVmIHRlc3RfaW5wdXRfc2NvcmVyKHNlbGYpOgogICAgICAgICIiIkNoZWNrIHdpZGdldCdzIHNjb3JlciB3aXRoIHNjb3JlciBvbiB0aGUgaW5wdXQiIiIKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LnNjb3JlcnMsIHt9KQogICAgICAgIHNlbGYuc2VuZF9zaWduYWwoc2VsZi53aWRnZXQuSW5wdXRzLnNjb3Jlciwgc2VsZi5sb2dfcmVnLCAxKQogICAgICAgIHZhbHVlID0gc2VsZi53aWRnZXQuc2NvcmVyc1sxXQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2dfcmVnLCB2YWx1ZS5zY29yZXIpCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbHVlLnNjb3JlciwgU2NvcmVyKQoKICAgIGRlZiB0ZXN0X2lucHV0X3Njb3Jlcl9maXR0ZXIoc2VsZik6CiAgICAgICAgaGVhcnRfZGlzZWFzZSA9IFRhYmxlKCJoZWFydF9kaXNlYXNlIikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LnNjb3JlcnMsIHt9KQoKICAgICAgICBtb2RlbCA9IHNlbGYud2lkZ2V0LnJhbmtzTW9kZWwKCiAgICAgICAgZm9yIGZpdHRlciwgbmFtZSBpbiAoCiAgICAgICAgICAgIChSYW5kb21Gb3Jlc3RMZWFybmVyKCksICJyYW5kb20gZm9yZXN0IiksCiAgICAgICAgICAgIChTR0RMZWFybmVyKCksICJzZ2QiKSwKICAgICAgICApOgogICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmaXR0ZXI9Zml0dGVyKToKICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9zaWduYWwoIlNjb3JlciIsIGZpdHRlciwgMSkKCiAgICAgICAgICAgICAgICBmb3IgZGF0YSBpbiAoc2VsZi5ob3VzaW5nLCBoZWFydF9kaXNlYXNlKToKICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChkYXRhPWRhdGEubmFtZSk6CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9zaWduYWwoIkRhdGEiLCBkYXRhKQogICAgICAgICAgICAgICAgICAgICAgICBzY29yZXMgPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbC5kYXRhKG1vZGVsLmluZGV4KHJvdywgbW9kZWwuY29sdW1uQ291bnQoKSAtIDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHJvdyBpbiByYW5nZShtb2RlbC5yb3dDb3VudCgpKQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNjb3JlcyksIGxlbihkYXRhLmRvbWFpbi5hdHRyaWJ1dGVzKSkKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShucC5pc25hbihzY29yZXMpLmFueSgpKQoKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9jb2x1bW4gPSBtb2RlbC5oZWFkZXJEYXRhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWwuY29sdW1uQ291bnQoKSAtIDEsIFF0Lkhvcml6b250YWwKICAgICAgICAgICAgICAgICAgICAgICAgKS5sb3dlcigpCiAgICAgICAgICAgICAg"}}]
["6bb6095f74c17059abe421db2e1106a48f5d6b27-2","6bb6095f74c17059abe421db2e1106a48f5d6b27","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIE9yYW5nZS5kYXRhIGltcG9ydCBUYWJsZSwgRG9tYWluLCBDb250aW51b3VzVmFyaWFibGUsIERpc2NyZXRlVmFyaWFibGUKZnJvbSBPcmFuZ2UubW9kZWxsaW5nIGltcG9ydCBSYW5kb21Gb3Jlc3RMZWFybmVyLCBTR0RMZWFybmVyCmZyb20gT3JhbmdlLnByZXByb2Nlc3Muc2NvcmUgaW1wb3J0IFNjb3Jlcgpmcm9tIE9yYW5nZS5jbGFzc2lmaWNhdGlvbiBpbXBvcnQgTG9naXN0aWNSZWdyZXNzaW9uTGVhcm5lcgpmcm9tIE9yYW5nZS5yZWdyZXNzaW9uIGltcG9ydCBMaW5lYXJSZWdyZXNzaW9uTGVhcm5lcgpmcm9tIE9yYW5nZS5wcm9qZWN0aW9uIGltcG9ydCBQQ0EKZnJvbSBPcmFuZ2Uud2lkZ2V0cy5kYXRhLm93cmFuayBpbXBvcnQgT1dSYW5rLCBQcm9ibGVtVHlwZSwgQ0xTX1NDT1JFUywgUkVHX1NDT1JFUwpmcm9tIE9yYW5nZS53aWRnZXRzLnRlc3RzLmJhc2UgaW1wb3J0IFdpZGdldFRlc3QKCmZyb20gQW55UXQuUXRDb3JlIGltcG9ydCBRdCwgUUl0ZW1TZWxlY3Rpb24KZnJvbSBBbnlRdC5RdFdpZGdldHMgaW1wb3J0IFFDaGVja0JveAoKCmNsYXNzIFRlc3RPV1JhbmsoV2lkZ2V0VGVzdCk6CiAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgc2VsZi53aWRnZXQgPSBzZWxmLmNyZWF0ZV93aWRnZXQoT1dSYW5rKSAgIyB0eXBlOiBPV1JhbmsKICAgICAgICBzZWxmLmlyaXMgPSBUYWJsZSgiaXJpcyIpCiAgICAgICAgc2VsZi5ob3VzaW5nID0gVGFibGUoImhvdXNpbmciKQogICAgICAgIHNlbGYubG9nX3JlZyA9IExvZ2lzdGljUmVncmVzc2lvbkxlYXJuZXIoKQogICAgICAgIHNlbGYubGluX3JlZyA9IExpbmVhclJlZ3Jlc3Npb25MZWFybmVyKCkKICAgICAgICBzZWxmLnBjYSA9IFBDQSgpCgogICAgZGVmIF9nZXRfY2hlY2tib3goc2VsZiwgbWV0aG9kX3Nob3J0bmFtZSk6CiAgICAgICAgcmV0dXJuIHNlbGYud2lkZ2V0LmNvbnRyb2xBcmVhLmZpbmRDaGlsZChRQ2hlY2tCb3gsIG1ldGhvZF9zaG9ydG5hbWUpCgogICAgZGVmIHRlc3RfaW5wdXRfZGF0YShzZWxmKToKICAgICAgICAiIiJDaGVjayB3aWRnZXQncyBkYXRhIHdpdGggZGF0YSBvbiB0aGUgaW5wdXQiIiIKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LmRhdGEsIE5vbmUpCiAgICAgICAgc2VsZi5zZW5kX3NpZ25hbChzZWxmLndpZGdldC5JbnB1dHMuZGF0YSwgc2VsZi5pcmlzKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53aWRnZXQuZGF0YSwgc2VsZi5pcmlzKQoKICAgIGRlZiB0ZXN0X2lucHV0X2RhdGFfZGlzY29ubmVjdChzZWxmKToKICAgICAgICAiIiJDaGVjayB3aWRnZXQncyBkYXRhIGFmdGVyIGRpc2Nvbm5lY3RpbmcgZGF0YSBvbiB0aGUgaW5wdXQiIiIKICAgICAgICBzZWxmLnNlbmRfc2lnbmFsKHNlbGYud2lkZ2V0LklucHV0cy5kYXRhLCBzZWxmLmlyaXMpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndpZGdldC5kYXRhLCBzZWxmLmlyaXMpCiAgICAgICAgc2VsZi5zZW5kX3NpZ25hbChzZWxmLndpZGdldC5JbnB1dHMuZGF0YSwgTm9uZSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LmRhdGEsIE5vbmUpCgogICAgZGVmIHRlc3RfaW5wdXRfc2NvcmVyKHNlbGYpOgogICAgICAgICIiIkNoZWNrIHdpZGdldCdzIHNjb3JlciB3aXRoIHNjb3JlciBvbiB0aGUgaW5wdXQiIiIKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LnNjb3JlcnMsIHt9KQogICAgICAgIHNlbGYuc2VuZF9zaWduYWwoc2VsZi53aWRnZXQuSW5wdXRzLnNjb3Jlciwgc2VsZi5sb2dfcmVnLCAxKQogICAgICAgIHZhbHVlID0gc2VsZi53aWRnZXQuc2NvcmVyc1sxXQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2dfcmVnLCB2YWx1ZS5zY29yZXIpCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbHVlLnNjb3JlciwgU2NvcmVyKQoKICAgIGRlZiB0ZXN0X2lucHV0X3Njb3Jlcl9maXR0ZXIoc2VsZik6CiAgICAgICAgaGVhcnRfZGlzZWFzZSA9IFRhYmxlKCJoZWFydF9kaXNlYXNlIikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LnNjb3JlcnMsIHt9KQoKICAgICAgICBtb2RlbCA9IHNlbGYud2lkZ2V0LnJhbmtzTW9kZWwKCiAgICAgICAgZm9yIGZpdHRlciwgbmFtZSBpbiAoCiAgICAgICAgICAgIChSYW5kb21Gb3Jlc3RMZWFybmVyKCksICJyYW5kb20gZm9yZXN0IiksCiAgICAgICAgICAgIChTR0RMZWFybmVyKCksICJzZ2QiKSwKICAgICAgICApOgogICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmaXR0ZXI9Zml0dGVyKToKICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9zaWduYWwoIlNjb3JlciIsIGZpdHRlciwgMSkKCiAgICAgICAgICAgICAgICBmb3IgZGF0YSBpbiAoc2VsZi5ob3VzaW5nLCBoZWFydF9kaXNlYXNlKToKICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChkYXRhPWRhdGEubmFtZSk6CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9zaWduYWwoIkRhdGEiLCBkYXRhKQogICAgICAgICAgICAgICAgICAgICAgICBzY29yZXMgPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbC5kYXRhKG1vZGVsLmluZGV4KHJvdywgbW9kZWwuY29sdW1uQ291bnQoKSAtIDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHJvdyBpbiByYW5nZShtb2RlbC5yb3dDb3VudCgpKQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNjb3JlcyksIGxlbihkYXRhLmRvbWFpbi5hdHRyaWJ1dGVzKSkKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShucC5pc25hbihzY29yZXMpLmFueSgpKQoKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9jb2x1bW4gPSBtb2RlbC5oZWFkZXJEYXRhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWwuY29sdW1uQ291bnQoKSAtIDEsIFF0Lkhvcml6b250YWwKICAgICAgICAgICAgICAgICAgICAgICAgKS5sb3dlcigpCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgbGFzdF9jb2x1bW4pCgogICAgICAgICAgICAgICAgc2VsZi5zZW5kX3NpZ25hbCgiU2NvcmVyIiwgTm9uZSwgMSkKICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53aWRnZXQuc2NvcmVycywge30pCgogICAgZGVmIHRlc3RfaW5wdXRfc2NvcmVyX2Rpc2Nvbm5lY3Qoc2VsZik6CiAgICAgICAgIiIiQ2hlY2sgd2lkZ2V0J3Mgc2NvcmVyIGFmdGVyIGRpc2Nvbm5lY3Rpbmcgc2NvcmVyIG9uIHRoZSBpbnB1dCIiIgogICAgICAgIHNlbGYuc2VuZF9zaWduYWwoc2VsZi53aWRnZXQuSW5wdXRzLnNjb3Jlciwgc2VsZi5sb2dfcmVnLCAxKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYud2lkZ2V0LnNjb3JlcnMpLCAxKQogICAgICAgIHNlbGYuc2VuZF9zaWduYWwoc2VsZi53aWRnZXQuSW5wdXRzLnNjb3JlciwgTm9uZSwgMSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LnNjb3JlcnMsIHt9KQoKICAgIGRlZiB0ZXN0X291dHB1dF9kYXRhKHNlbGYpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIiIiQ2hlY2sgZGF0YSBvbiB0aGUgb3V0cHV0IGFmdGVyIGFwcGx5IiIiCiAgICAgICAgc2VsZi5zZW5kX3NpZ25hbChzZWxmLndpZGdldC5JbnB1dHMuZGF0YSwgc2VsZi5pcmlzKQogICAgICAgIG91dHB1dCA9IHNlbGYuZ2V0X291dHB1dChzZWxmLndpZGdldC5PdXRwdXRzLnJlZHVjZWRfZGF0YSkKICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob3V0cHV0LCBUYWJsZSkKPHxmaW1fZW5kfD4="]
["6bb6095f74c17059abe421db2e1106a48f5d6b27-3","6bb6095f74c17059abe421db2e1106a48f5d6b27","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIE9yYW5nZS5kYXRhIGltcG9ydCBUYWJsZSwgRG9tYWluLCBDb250aW51b3VzVmFyaWFibGUsIERpc2NyZXRlVmFyaWFibGUKZnJvbSBPcmFuZ2UubW9kZWxsaW5nIGltcG9ydCBSYW5kb21Gb3Jlc3RMZWFybmVyLCBTR0RMZWFybmVyCmZyb20gT3JhbmdlLnByZXByb2Nlc3Muc2NvcmUgaW1wb3J0IFNjb3Jlcgpmcm9tIE9yYW5nZS5jbGFzc2lmaWNhdGlvbiBpbXBvcnQgTG9naXN0aWNSZWdyZXNzaW9uTGVhcm5lcgpmcm9tIE9yYW5nZS5yZWdyZXNzaW9uIGltcG9ydCBMaW5lYXJSZWdyZXNzaW9uTGVhcm5lcgpmcm9tIE9yYW5nZS5wcm9qZWN0aW9uIGltcG9ydCBQQ0EKZnJvbSBPcmFuZ2Uud2lkZ2V0cy5kYXRhLm93cmFuayBpbXBvcnQgT1dSYW5rLCBQcm9ibGVtVHlwZSwgQ0xTX1NDT1JFUywgUkVHX1NDT1JFUwpmcm9tIE9yYW5nZS53aWRnZXRzLnRlc3RzLmJhc2UgaW1wb3J0IFdpZGdldFRlc3QKCmZyb20gQW55UXQuUXRDb3JlIGltcG9ydCBRdCwgUUl0ZW1TZWxlY3Rpb24KZnJvbSBBbnlRdC5RdFdpZGdldHMgaW1wb3J0IFFDaGVja0JveAoKCmNsYXNzIFRlc3RPV1JhbmsoV2lkZ2V0VGVzdCk6CiAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgc2VsZi53aWRnZXQgPSBzZWxmLmNyZWF0ZV93aWRnZXQoT1dSYW5rKSAgIyB0eXBlOiBPV1JhbmsKICAgICAgICBzZWxmLmlyaXMgPSBUYWJsZSgiaXJpcyIpCiAgICAgICAgc2VsZi5ob3VzaW5nID0gVGFibGUoImhvdXNpbmciKQogICAgICAgIHNlbGYubG9nX3JlZyA9IExvZ2lzdGljUmVncmVzc2lvbkxlYXJuZXIoKQogICAgICAgIHNlbGYubGluX3JlZyA9IExpbmVhclJlZ3Jlc3Npb25MZWFybmVyKCkKICAgICAgICBzZWxmLnBjYSA9IFBDQSgpCgogICAgZGVmIF9nZXRfY2hlY2tib3goc2VsZiwgbWV0aG9kX3Nob3J0bmFtZSk6CiAgICAgICAgcmV0dXJuIHNlbGYud2lkZ2V0LmNvbnRyb2xBcmVhLmZpbmRDaGlsZChRQ2hlY2tCb3gsIG1ldGhvZF9zaG9ydG5hbWUpCgogICAgZGVmIHRlc3RfaW5wdXRfZGF0YShzZWxmKToKICAgICAgICAiIiJDaGVjayB3aWRnZXQncyBkYXRhIHdpdGggZGF0YSBvbiB0aGUgaW5wdXQiIiIKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LmRhdGEsIE5vbmUpCiAgICAgICAgc2VsZi5zZW5kX3NpZ25hbChzZWxmLndpZGdldC5JbnB1dHMuZGF0YSwgc2VsZi5pcmlzKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53aWRnZXQuZGF0YSwgc2VsZi5pcmlzKQoKICAgIGRlZiB0ZXN0X2lucHV0X2RhdGFfZGlzY29ubmVjdChzZWxmKToKICAgICAgICAiIiJDaGVjayB3aWRnZXQncyBkYXRhIGFmdGVyIGRpc2Nvbm5lY3RpbmcgZGF0YSBvbiB0aGUgaW5wdXQiIiIKICAgICAgICBzZWxmLnNlbmRfc2lnbmFsKHNlbGYud2lkZ2V0LklucHV0cy5kYXRhLCBzZWxmLmlyaXMpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndpZGdldC5kYXRhLCBzZWxmLmlyaXMpCiAgICAgICAgc2VsZi5zZW5kX3NpZ25hbChzZWxmLndpZGdldC5JbnB1dHMuZGF0YSwgTm9uZSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LmRhdGEsIE5vbmUpCgogICAgZGVmIHRlc3RfaW5wdXRfc2NvcmVyKHNlbGYpOgogICAgICAgICIiIkNoZWNrIHdpZGdldCdzIHNjb3JlciB3aXRoIHNjb3JlciBvbiB0aGUgaW5wdXQiIiIKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LnNjb3JlcnMsIHt9KQogICAgICAgIHNlbGYuc2VuZF9zaWduYWwoc2VsZi53aWRnZXQuSW5wdXRzLnNjb3Jlciwgc2VsZi5sb2dfcmVnLCAxKQogICAgICAgIHZhbHVlID0gc2VsZi53aWRnZXQuc2NvcmVyc1sxXQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2dfcmVnLCB2YWx1ZS5zY29yZXIpCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbHVlLnNjb3JlciwgU2NvcmVyKQoKICAgIGRlZiB0ZXN0X2lucHV0X3Njb3Jlcl9maXR0ZXIoc2VsZik6CiAgICAgICAgaGVhcnRfZGlzZWFzZSA9IFRhYmxlKCJoZWFydF9kaXNlYXNlIikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LnNjb3JlcnMsIHt9KQoKICAgICAgICBtb2RlbCA9IHNlbGYud2lkZ2V0LnJhbmtzTW9kZWwKCiAgICAgICAgZm9yIGZpdHRlciwgbmFtZSBpbiAoCiAgICAgICAgICAgIChSYW5kb21Gb3Jlc3RMZWFybmVyKCksICJyYW5kb20gZm9yZXN0IiksCiAgICAgICAgICAgIChTR0RMZWFybmVyKCksICJzZ2QiKSwKICAgICAgICApOgogICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmaXR0ZXI9Zml0dGVyKToKICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9zaWduYWwoIlNjb3JlciIsIGZpdHRlciwgMSkKCiAgICAgICAgICAgICAgICBmb3IgZGF0YSBpbiAoc2VsZi5ob3VzaW5nLCBoZWFydF9kaXNlYXNlKToKICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChkYXRhPWRhdGEubmFtZSk6CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9zaWduYWwoIkRhdGEiLCBkYXRhKQogICAgICAgICAgICAgICAgICAgICAgICBzY29yZXMgPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbC5kYXRhKG1vZGVsLmluZGV4KHJvdywgbW9kZWwuY29sdW1uQ291bnQoKSAtIDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHJvdyBpbiByYW5nZShtb2RlbC5yb3dDb3VudCgpKQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNjb3JlcyksIGxlbihkYXRhLmRvbWFpbi5hdHRyaWJ1dGVzKSkKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShucC5pc25hbihzY29yZXMpLmFueSgpKQoKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9jb2x1bW4gPSBtb2RlbC5oZWFkZXJEYXRhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWwuY29sdW1uQ291bnQoKSAtIDEsIFF0Lkhvcml6b250YWwKICAgICAgICAgICAgICAgICAgICAgICAgKS5sb3dlcigpCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgbGFzdF9jb2x1bW4pCgogICAgICAgICAgICAgICAgc2VsZi5zZW5kX3NpZ25hbCgiU2NvcmVyIiwgTm9uZSwgMSkKICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53aWRnZXQuc2NvcmVycywge30pCgogICAgZGVmIHRlc3RfaW5wdXRfc2NvcmVyX2Rpc2Nvbm5lY3Qoc2VsZik6CiAgICAgICAgIiIiQ2hlY2sgd2lkZ2V0J3Mgc2NvcmVyIGFmdGVyIGRpc2Nvbm5lY3Rpbmcgc2NvcmVyIG9uIHRoZSBpbnB1dCIiIgogICAgICAgIHNlbGYuc2VuZF9zaWduYWwoc2VsZi53aWRnZXQuSW5wdXRzLnNjb3Jlciwgc2VsZi5sb2dfcmVnLCAxKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYud2lkZ2V0LnNjb3JlcnMpLCAxKQogICAgICAgIHNlbGYuc2VuZF9zaWduYWwoc2VsZi53aWRnZXQuSW5wdXRzLnNjb3JlciwgTm9uZSwgMSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LnNjb3JlcnMsIHt9KQoKICAgIGRlZiB0ZXN0X291dHB1dF9kYXRhKHNlbGYpOgogICAgICAgICIiIkNoZWNrIGRhdGEgb24gdGhlIG91dHB1dCBhZnRlciBhcHBseSIiIgogICAgICAgIHNlbGYuc2VuZF9zaWduYWwoc2VsZi53aWRnZXQuSW5wdXRzLmRhdGEsIHNlbGYuaXJpcykKICAgICAgICBvdXRwdXQgPSBzZWxmLmdldF9vdXRwdXQoc2VsZi53aWRnZXQuT3V0cHV0cy5yZWR1Y2VkX2RhdGEpCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG91dHB1dCwgVGFibGUpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3V0cHV0LlgpLCBsZW4oc2VsZi5pcmlzKSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5kb21haW4uY2xhc3NfdmFyLCBzZWxmLmlyaXMuZG9tYWluLmNsYXNzX3ZhcikKICAgICAgICBzZWxmLnNlbmRfc2lnbmFsKHNlbGYud2lkZ2V0LklucHV0cy5kYXRhLCBOb25lKQogICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuZ2V0X291dHB1dChzZWxmLndpZGdldC5PdXRwdXRzLnJlZHVjZWRfZGF0YSkpCgogICAgZGVmIHRlc3Rfb3V0cHV0X3Njb3JlcyhzZWxmKToKICAgICAgICAiIiJDaGVjayBzY29yZXMgb24gdGhlIG91dHB1dCBhZnRlciBhcHBseSIiIgogICAgICAgIHNlbGYuc2VuZF9zaWduYWwoc2VsZi53aWRnZXQuSW5wdXRzLmRhdGEsIHNlbGYuaXJpcykKICAgICAgICBvdXRwdXQgPSBzZWxmLmdldF9vdXRwdXQoc2VsZi53aWRnZXQuT3V0cHV0cy5zY29yZXMpCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG91dHB1dCwgVGFibGUpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuWC5zaGFwZSwgKGxlbihzZWxmLmlyaXMuZG9tYWluLmF0dHJpYnV0ZXMpLCAyKSkKICAgICAgICBzZWxmLnNlbmRfc2lnbmFsKHNlbGYud2lkZ2V0LklucHV0cy5kYXRhLCBOb25lKQogICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuZ2V0X291dHB1dChzZWxmLndpZGdldC5PdXRwdXRzLnNjb3JlcykpCgogICAgZGVmIHRlc3Rfb3V0cHV0X3Njb3Jlc193aXRoX3Njb3JlcihzZWxmKToKICAgICAgICAiIiJDaGVjayBzY29yZXMgb24gdGhlIG91dHB1dCBhZnRlciBhcHBseSB3aXRoIHNjb3JlciBvbiB0aGUgaW5wdXQiIiIKICAgICAgICBzZWxmLnNlbmRfc2lnbmFsKHNlbGYud2lkZ2V0LklucHV0cy5kYXRhLCBzZWxmLmlyaXMpCiAgICAgICAgc2VsZi5zZW5kX3NpZ25hbChzZWxmLndpZGdldC5JbnB1dHMuc2NvcmVyLCBzZWxmLmxvZ19yZWcsIDEpCiAgICAgICAgb3V0cHV0ID0gc2VsZi5nZXRfb3V0cHV0KHNlbGYud2lkZ2V0Lk91dHB1dHMuc2NvcmVzKQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvdXRwdXQsIFRhYmxlKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0Llguc2hhcGUsIChsZW4oc2VsZi5pcmlzLmRvbWFpbi5hdHRyaWJ1dGVzKSwgNSkpCgogICAgZGVmIHRlc3Rfc2NvcmluZ19tZXRob2RfcHJvYmxlbV90eXBlKHNlbGYpOgogICAgICAgICIiIkNoZWNrIHNjb3JpbmcgbWV0aG9kcyBjaGVjayBib3hlcyIiIgogICAgICAgIHNlbGYuc2VuZF9zaWduYWwoc2VsZi53aWRnZXQuSW5wdXRzLmRhdGEsIHNlbGYuaXJpcykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LnByb2JsZW1fdHlwZV9tb2RlLCBQcm9ibGVtVHlwZS5DTEFTU0lGSUNBVElPTikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBzZWxmLndpZGdldC5tZWFzdXJlc1N0YWNrLmN1cnJlbnRJbmRleCgpLCBQcm9ibGVtVHlwZS5DTEFTU0lGSUNBVElPTgogICAgICAgICkKCiAgICAgICAgc2VsZi5zZW5kX3NpZ25hbChzZWxmLndpZGdldC5JbnB1dHMuZGF0YSwgc2VsZi5ob3VzaW5nKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53aWRnZXQucHJvYmxlbV90eXBlX21vZGUsIFByb2JsZW1UeXBlLlJFR1JFU1NJT04pCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgc2VsZi53aWRnZXQubWVhc3VyZXNTdGFjay5jdXJyZW50SW5kZXgoKSwgUHJvYmxlbVR5cGUuUkVHUkVTU0lPTgogICAgICAgICkKCiAgICAgICAgZGF0YSA9IFRhYmxlLmZyb21fdGFibGUoRG9tYWluKHNlbGYuaXJpcy5kb21haW4udmFyaWFibGVzKSwgc2VsZi5pcmlzKQogICAgICAgIHNlbGYuc2VuZF9zaWduYWwoc2VsZi53aWRnZXQuSW5wdXRzLmRhdGEsIGRhdGEpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndpZGdldC5wcm9ibGVtX3R5cGVfbW9kZSwgUHJvYmxlbVR5cGUuVU5TVVBFUlZJU0VEKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIHNlbGYud2lkZ2V0Lm1lYXN1cmVzU3RhY2suY3VycmVudEluZGV4KCksIFByb2JsZW1UeXBlLlVOU1VQRVJWSVNFRAogICAgICAgICkKCiAgICBkZWYgdGVzdF9zY29yaW5nX21ldGhvZF9kZWZhdWx0cyhzZWxmKToKICAgICAgICAiIiJDaGVjayBkZWZhdWx0IHNjb3JpbmcgbWV0aG9kcyBhcmUgc2VsZWN0ZWQiIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuc2VuZF9zaWduYWwoc2VsZi53aWRnZXQuSW5wdXRzLmRhdGEsIE5vbmUpCiAgICAgICAgZm9yIG1ldGhvZCBpbiBDTFNfU0NPUkVTOgogICAgICAgICAgICBjaGVja2JveCA9IHNlbGYuX2dldF9jaGVja2JveChtZXRob2Quc2hvcnRuYW1lKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoZWNrYm94LmlzQ2hlY2tlZCgpLCBtZXRob2QuaXNfZGVmYXVsdCkKPHxmaW1fZW5kfD4="]
["6bb6095f74c17059abe421db2e1106a48f5d6b27-4","6bb6095f74c17059abe421db2e1106a48f5d6b27",{"$cut":{"chars":22656,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIE9yYW5nZS5kYXRhIGltcG9ydCBUYWJsZSwgRG9tYWluLCBDb250aW51b3VzVmFyaWFibGUsIERpc2NyZXRlVmFyaWFibGUKZnJvbSBPcmFuZ2UubW9kZWxsaW5nIGltcG9ydCBSYW5kb21Gb3Jlc3RMZWFybmVyLCBTR0RMZWFybmVyCmZyb20gT3JhbmdlLnByZXByb2Nlc3Muc2NvcmUgaW1wb3J0IFNjb3Jlcgpmcm9tIE9yYW5nZS5jbGFzc2lmaWNhdGlvbiBpbXBvcnQgTG9naXN0aWNSZWdyZXNzaW9uTGVhcm5lcgpmcm9tIE9yYW5nZS5yZWdyZXNzaW9uIGltcG9ydCBMaW5lYXJSZWdyZXNzaW9uTGVhcm5lcgpmcm9tIE9yYW5nZS5wcm9qZWN0aW9uIGltcG9ydCBQQ0EKZnJvbSBPcmFuZ2Uud2lkZ2V0cy5kYXRhLm93cmFuayBpbXBvcnQgT1dSYW5rLCBQcm9ibGVtVHlwZSwgQ0xTX1NDT1JFUywgUkVHX1NDT1JFUwpmcm9tIE9yYW5nZS53aWRnZXRzLnRlc3RzLmJhc2UgaW1wb3J0IFdpZGdldFRlc3QKCmZyb20gQW55UXQuUXRDb3JlIGltcG9ydCBRdCwgUUl0ZW1TZWxlY3Rpb24KZnJvbSBBbnlRdC5RdFdpZGdldHMgaW1wb3J0IFFDaGVja0JveAoKCmNsYXNzIFRlc3RPV1JhbmsoV2lkZ2V0VGVzdCk6CiAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgc2VsZi53aWRnZXQgPSBzZWxmLmNyZWF0ZV93aWRnZXQoT1dSYW5rKSAgIyB0eXBlOiBPV1JhbmsKICAgICAgICBzZWxmLmlyaXMgPSBUYWJsZSgiaXJpcyIpCiAgICAgICAgc2VsZi5ob3VzaW5nID0gVGFibGUoImhvdXNpbmciKQogICAgICAgIHNlbGYubG9nX3JlZyA9IExvZ2lzdGljUmVncmVzc2lvbkxlYXJuZXIoKQogICAgICAgIHNlbGYubGluX3JlZyA9IExpbmVhclJlZ3Jlc3Npb25MZWFybmVyKCkKICAgICAgICBzZWxmLnBjYSA9IFBDQSgpCgogICAgZGVmIF9nZXRfY2hlY2tib3goc2VsZiwgbWV0aG9kX3Nob3J0bmFtZSk6CiAgICAgICAgcmV0dXJuIHNlbGYud2lkZ2V0LmNvbnRyb2xBcmVhLmZpbmRDaGlsZChRQ2hlY2tCb3gsIG1ldGhvZF9zaG9ydG5hbWUpCgogICAgZGVmIHRlc3RfaW5wdXRfZGF0YShzZWxmKToKICAgICAgICAiIiJDaGVjayB3aWRnZXQncyBkYXRhIHdpdGggZGF0YSBvbiB0aGUgaW5wdXQiIiIKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LmRhdGEsIE5vbmUpCiAgICAgICAgc2VsZi5zZW5kX3NpZ25hbChzZWxmLndpZGdldC5JbnB1dHMuZGF0YSwgc2VsZi5pcmlzKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53aWRnZXQuZGF0YSwgc2VsZi5pcmlzKQoKICAgIGRlZiB0ZXN0X2lucHV0X2RhdGFfZGlzY29ubmVjdChzZWxmKToKICAgICAgICAiIiJDaGVjayB3aWRnZXQncyBkYXRhIGFmdGVyIGRpc2Nvbm5lY3RpbmcgZGF0YSBvbiB0aGUgaW5wdXQiIiIKICAgICAgICBzZWxmLnNlbmRfc2lnbmFsKHNlbGYud2lkZ2V0LklucHV0cy5kYXRhLCBzZWxmLmlyaXMpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndpZGdldC5kYXRhLCBzZWxmLmlyaXMpCiAgICAgICAgc2VsZi5zZW5kX3NpZ25hbChzZWxmLndpZGdldC5JbnB1dHMuZGF0YSwgTm9uZSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LmRhdGEsIE5vbmUpCgogICAgZGVmIHRlc3RfaW5wdXRfc2NvcmVyKHNlbGYpOgogICAgICAgICIiIkNoZWNrIHdpZGdldCdzIHNjb3JlciB3aXRoIHNjb3JlciBvbiB0aGUgaW5wdXQiIiIKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LnNjb3JlcnMsIHt9KQogICAgICAgIHNlbGYuc2VuZF9zaWduYWwoc2VsZi53aWRnZXQuSW5wdXRzLnNjb3Jlciwgc2VsZi5sb2dfcmVnLCAxKQogICAgICAgIHZhbHVlID0gc2VsZi53aWRnZXQuc2NvcmVyc1sxXQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2dfcmVnLCB2YWx1ZS5zY29yZXIpCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbHVlLnNjb3JlciwgU2NvcmVyKQoKICAgIGRlZiB0ZXN0X2lucHV0X3Njb3Jlcl9maXR0ZXIoc2VsZik6CiAgICAgICAgaGVhcnRfZGlzZWFzZSA9IFRhYmxlKCJoZWFydF9kaXNlYXNlIikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LnNjb3JlcnMsIHt9KQoKICAgICAgICBtb2RlbCA9IHNlbGYud2lkZ2V0LnJhbmtzTW9kZWwKCiAgICAgICAgZm9yIGZpdHRlciwgbmFtZSBpbiAoCiAgICAgICAgICAgIChSYW5kb21Gb3Jlc3RMZWFybmVyKCksICJyYW5kb20gZm9yZXN0IiksCiAgICAgICAgICAgIChTR0RMZWFybmVyKCksICJzZ2QiKSwKICAgICAgICApOgogICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmaXR0ZXI9Zml0dGVyKToKICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9zaWduYWwoIlNjb3JlciIsIGZpdHRlciwgMSkKCiAgICAgICAgICAgICAgICBmb3IgZGF0YSBpbiAoc2VsZi5ob3VzaW5nLCBoZWFydF9kaXNlYXNlKToKICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChkYXRhPWRhdGEubmFtZSk6CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9zaWduYWwoIkRhdGEiLCBkYXRhKQogICAgICAgICAgICAgICAgICAgICAgICBzY29yZXMgPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbC5kYXRhKG1vZGVsLmluZGV4KHJvdywgbW9kZWwuY29sdW1uQ291bnQoKSAtIDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHJvdyBpbiByYW5nZShtb2RlbC5yb3dDb3VudCgpKQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNjb3JlcyksIGxlbihkYXRhLmRvbWFpbi5hdHRyaWJ1dGVzKSkKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShucC5pc25hbihzY29yZXMpLmFueSgpKQoKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9jb2x1bW4gPSBtb2RlbC5oZWFkZXJEYXRhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWwuY29sdW1uQ291bnQoKSAtIDEsIFF0Lkhvcml6b250YWwKICAgICAgICAgICAgICAgICAgICAgICAgKS5sb3dlcigpCiAgICAgICAgICAgICAg"}}]
["c10ac8055c9e64150407ad28fbd84d04b490f543-1","c10ac8055c9e64150407ad28fbd84d04b490f543","PHxmaW1fcHJlZml4fD4KZnJvbSBza2xlYXJuLmZlYXR1cmVfc2VsZWN0aW9uIGltcG9ydCBWYXJpYW5jZVRocmVzaG9sZApmcm9tIG1pbmRlcl91dGlscy5tb2RlbHMudXRpbHMgaW1wb3J0IEZlYXR1cmVfc2VsZWN0b3IKCgpjbGFzcyBVbnN1cGVydmlzZWRfRmlsdGVyKEZlYXR1cmVfc2VsZWN0b3IpOgogICAgJycnCiAgICBUaGlzIGNsYXNzIHByb3ZpZGUgYSBzZXQgb2YgdW5zdXBlcnZpc2VkIGZlYXR1cmUgc2VsZWN0aW9uIG1ldGhvZHMuCgogICAgQ3VycmVudGx5LCBpdCBjb250YWluczoKICAgICAgICAtIFZhcmlhbmNlVGhyZXNob2xkCgogICAgYGBgRXhhbXBsZWBgYAogICAgYGBgCiAgICBmcm9tIG1pbmRlcl91dGlscy5tb2RlbHMuZmVhdHVyZV9zZWxlY3RvcnMudW5zdXBlcnZpc2VkLmZpbHRlciBpbXBvcnQgVW5zdXBlcnZpc2VkX0ZpbHRlcgoKICAgIHNlbGVjdG9yID0gVW5zdXBlcnZpc2VkX0ZpbHRlcihtb2RlbD0ndnQnKQogICAgIyBzaG93IHRoZSBhdmFpbGFibGUgbWV0aG9kczoKICAgIHNlbGVjdG9yLmdldF9pbmZvKHZlcmJvc2U9VHJ1ZSkKCiAgICAjIHRyYWluIHRoZSBzZWxlY3Rvci4gTm90ZSB0aGUgWCBpcyB0aGUgZGF0YSwgeSBpcyBOb25lIGFuZCB3aWxsIG5vdCBiZSB1c2VkCiAgICBzZWxlY3Rvci5maXQoWCwgeSkKCiAgICAjIGRvIHRoZSBzZWxlY3Rpb24KICAgIFggPSBzZWxlY3Rvci50cmFuc2Zvcm0oWCkKICAgIGBgYAogICAgJycnCjx8ZmltX2hvbGV8PgogICAgZGVmIG1ldGhvZHMoc2VsZik6CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgJ3Z0JzogJ1ZhcmlhbmNlVGhyZXNob2xkJywKICAgICAgICB9CgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHZ0KCk6CiAgICAgICAgcmV0dXJuIFZhcmlhbmNlVGhyZXNob2xkKCkKCiAgICBkZWYgX19uYW1lX18oc2VsZik6CiAgICAgICAgcmV0dXJuICdVbnN1cGVydmlzZWQgRmlsdGVyJywgc2VsZi5uYW1lCgogICAgZGVmIGZpdChzZWxmLCBYLCB5PU5vbmUpOgogICAgICAgIHJldHVybiBzZWxmLm1vZGVsLmZpdChYKQoKICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgWCk6CiAgICAgICAgcmV0dXJuIHNlbGYubW9kZWwudHJhbnNmb3JtKFgpCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWxfbmFtZT0ndnQnKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKG1vZGVsX25hbWUpCgogICAgQHByb3BlcnR5Cjx8ZmltX2VuZHw+"]
["c10ac8055c9e64150407ad28fbd84d04b490f543-2","c10ac8055c9e64150407ad28fbd84d04b490f543","PHxmaW1fcHJlZml4fD4KZnJvbSBza2xlYXJuLmZlYXR1cmVfc2VsZWN0aW9uIGltcG9ydCBWYXJpYW5jZVRocmVzaG9sZApmcm9tIG1pbmRlcl91dGlscy5tb2RlbHMudXRpbHMgaW1wb3J0IEZlYXR1cmVfc2VsZWN0b3IKCgpjbGFzcyBVbnN1cGVydmlzZWRfRmlsdGVyKEZlYXR1cmVfc2VsZWN0b3IpOgogICAgJycnCiAgICBUaGlzIGNsYXNzIHByb3ZpZGUgYSBzZXQgb2YgdW5zdXBlcnZpc2VkIGZlYXR1cmUgc2VsZWN0aW9uIG1ldGhvZHMuCgogICAgQ3VycmVudGx5LCBpdCBjb250YWluczoKICAgICAgICAtIFZhcmlhbmNlVGhyZXNob2xkCgogICAgYGBgRXhhbXBsZWBgYAogICAgYGBgCiAgICBmcm9tIG1pbmRlcl91dGlscy5tb2RlbHMuZmVhdHVyZV9zZWxlY3RvcnMudW5zdXBlcnZpc2VkLmZpbHRlciBpbXBvcnQgVW5zdXBlcnZpc2VkX0ZpbHRlcgoKICAgIHNlbGVjdG9yID0gVW5zdXBlcnZpc2VkX0ZpbHRlcihtb2RlbD0ndnQnKQogICAgIyBzaG93IHRoZSBhdmFpbGFibGUgbWV0aG9kczoKICAgIHNlbGVjdG9yLmdldF9pbmZvKHZlcmJvc2U9VHJ1ZSkKCiAgICAjIHRyYWluIHRoZSBzZWxlY3Rvci4gTm90ZSB0aGUgWCBpcyB0aGUgZGF0YSwgeSBpcyBOb25lIGFuZCB3aWxsIG5vdCBiZSB1c2VkCiAgICBzZWxlY3Rvci5maXQoWCwgeSkKCiAgICAjIGRvIHRoZSBzZWxlY3Rpb24KICAgIFggPSBzZWxlY3Rvci50cmFuc2Zvcm0oWCkKICAgIGBgYAogICAgJycnCiAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWxfbmFtZT0ndnQnKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKG1vZGVsX25hbWUpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBAcHJvcGVydHkKICAgIGRlZiBtZXRob2RzKHNlbGYpOgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICd2dCc6ICdWYXJpYW5jZVRocmVzaG9sZCcsCjx8ZmltX2VuZHw+"]
["c10ac8055c9e64150407ad28fbd84d04b490f543-3","c10ac8055c9e64150407ad28fbd84d04b490f543","PHxmaW1fcHJlZml4fD4KZnJvbSBza2xlYXJuLmZlYXR1cmVfc2VsZWN0aW9uIGltcG9ydCBWYXJpYW5jZVRocmVzaG9sZApmcm9tIG1pbmRlcl91dGlscy5tb2RlbHMudXRpbHMgaW1wb3J0IEZlYXR1cmVfc2VsZWN0b3IKCgpjbGFzcyBVbnN1cGVydmlzZWRfRmlsdGVyKEZlYXR1cmVfc2VsZWN0b3IpOgogICAgJycnCiAgICBUaGlzIGNsYXNzIHByb3ZpZGUgYSBzZXQgb2YgdW5zdXBlcnZpc2VkIGZlYXR1cmUgc2VsZWN0aW9uIG1ldGhvZHMuCgogICAgQ3VycmVudGx5LCBpdCBjb250YWluczoKICAgICAgICAtIFZhcmlhbmNlVGhyZXNob2xkCgogICAgYGBgRXhhbXBsZWBgYAogICAgYGBgCjx8ZmltX2hvbGV8PgogICAgc2VsZWN0b3IuZ2V0X2luZm8odmVyYm9zZT1UcnVlKQoKICAgICMgdHJhaW4gdGhlIHNlbGVjdG9yLiBOb3RlIHRoZSBYIGlzIHRoZSBkYXRhLCB5IGlzIE5vbmUgYW5kIHdpbGwgbm90IGJlIHVzZWQKICAgIHNlbGVjdG9yLmZpdChYLCB5KQoKICAgICMgZG8gdGhlIHNlbGVjdGlvbgogICAgWCA9IHNlbGVjdG9yLnRyYW5zZm9ybShYKQogICAgYGBgCiAgICAnJycKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbF9uYW1lPSd2dCcpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18obW9kZWxfbmFtZSkKCiAgICBAcHJvcGVydHkKICAgIGRlZiBtZXRob2RzKHNlbGYpOgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICd2dCc6ICdWYXJpYW5jZVRocmVzaG9sZCcsCiAgICAgICAgfQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiB2dCgpOgogICAgICAgIHJldHVybiBWYXJpYW5jZVRocmVzaG9sZCgpCgogICAgZGVmIF9fbmFtZV9fKHNlbGYpOgogICAgICAgIHJldHVybiAnVW5zdXBlcnZpc2VkIEZpbHRlcicsIHNlbGYubmFtZQoKICAgIGRlZiBmaXQoc2VsZiwgWCwgeT1Ob25lKToKICAgICAgICByZXR1cm4gc2VsZi5tb2RlbC5maXQoWCkKCiAgICBkZWYgdHJhbnNmb3JtKHNlbGYsIFgpOgogICAgICAgIHJldHVybiBzZWxmLm1vZGVsLnRyYW5zZm9ybShYKQo8fGZpbV9zdWZmaXh8PgogICAgZnJvbSBtaW5kZXJfdXRpbHMubW9kZWxzLmZlYXR1cmVfc2VsZWN0b3JzLnVuc3VwZXJ2aXNlZC5maWx0ZXIgaW1wb3J0IFVuc3VwZXJ2aXNlZF9GaWx0ZXIKCiAgICBzZWxlY3RvciA9IFVuc3VwZXJ2aXNlZF9GaWx0ZXIobW9kZWw9J3Z0JykKICAgICMgc2hvdyB0aGUgYXZhaWxhYmxlIG1ldGhvZHM6Cjx8ZmltX2VuZHw+"]
["2e258d7c753eac9b3e7f53c7d4925bb7a7cf1297-1","2e258d7c753eac9b3e7f53c7d4925bb7a7cf1297","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwojIHRyeSB0byBpbXBvcnQgZnJvbSBwcm9qZWN0IGZpcnN0CmZyb20gb3MucGF0aCBpbXBvcnQgZGlybmFtZQpzeXMucGF0aC5pbnNlcnQoMSwgZGlybmFtZShkaXJuYW1lKF9fZmlsZV9fKSkpCmZyb20gZ2ZmMyBpbXBvcnQgR2ZmMwoKIyBpbml0aWFsaXplIGEgR2ZmMyBvYmplY3QKZ2ZmID0gR2ZmMygpCiMgcGFyc2UgR0ZGMyBmaWxlIGFuZCBkbyBzeW50YXggY2hlY2tpbmcsIHRoaXMgcG9wdWxhdGVzIGdmZi5saW5lcyBhbmQgZ2ZmLmZlYXR1cmVzCiMgaWYgYW4gZW1iZWRkZWQgIyNGQVNUQSBkaXJlY3RpdmUgaXMgZm91bmQsIHBhcnNlIHRoZSBzZXF1ZW5jZXMgaW50byBnZmYuZmFzdGFfZW1iZWRkZWQKZ2ZmLnBhcnNlKCdhbm5vdGF0aW9ucy5nZmYnKQojIHBhcnNlIHRoZSBleHRlcm5hbCBGQVNUQSBmaWxlIGludG8gZ2ZmLmZhc3RhX2V4dGVybmFsCiNnZmYucGFyc2VfZmFzdGFfZXh0ZXJuYWwoJ2Fubm90YXRpb25zLmZhJykKPHxmaW1faG9sZXw+CiMgQ2FsY3VsYXRlcyB0aGUgY29ycmVjdCBwaGFzZSBhbmQgY2hlY2tzIGlmIGl0IG1hdGNoZXMgdGhlIGdpdmVuIHBoYXNlIGZvciBDRFMgZmVhdHVyZXMKZ2ZmLmNoZWNrX3BoYXNlKCkKPHxmaW1fc3VmZml4fD4KIyBDaGVjayBzZXFpZCwgYm91bmRzIGFuZCB0aGUgbnVtYmVyIG9mIE5zIGluIGVhY2ggZmVhdHVyZSB1c2luZyBvbmUgb3IgbW9yZSByZWZlcmVuY2Ugc291cmNlcwpnZmYuY2hlY2tfcmVmZXJlbmNlKGFsbG93ZWRfbnVtX29mX249MCwgZmVhdHVyZV90eXBlcz1bJ0NEUyddKQojIENoZWNrcyB3aGV0aGVyIGNoaWxkIGZlYXR1cmVzIGFyZSB3aXRoaW4gdGhlIGNvb3JkaW5hdGUgYm91bmRhcmllcyBvZiBwYXJlbnQgZmVhdHVyZXMKZ2ZmLmNoZWNrX3BhcmVudF9ib3VuZGFyeSgpCjx8ZmltX2VuZHw+"]
["2e258d7c753eac9b3e7f53c7d4925bb7a7cf1297-2","2e258d7c753eac9b3e7f53c7d4925bb7a7cf1297","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwojIHRyeSB0byBpbXBvcnQgZnJvbSBwcm9qZWN0IGZpcnN0CmZyb20gb3MucGF0aCBpbXBvcnQgZGlybmFtZQpzeXMucGF0aC5pbnNlcnQoMSwgZGlybmFtZShkaXJuYW1lKF9fZmlsZV9fKSkpCmZyb20gZ2ZmMyBpbXBvcnQgR2ZmMwoKIyBpbml0aWFsaXplIGEgR2ZmMyBvYmplY3QKPHxmaW1faG9sZXw+CiMgcGFyc2UgdGhlIGV4dGVybmFsIEZBU1RBIGZpbGUgaW50byBnZmYuZmFzdGFfZXh0ZXJuYWwKI2dmZi5wYXJzZV9mYXN0YV9leHRlcm5hbCgnYW5ub3RhdGlvbnMuZmEnKQojIENoZWNrIHNlcWlkLCBib3VuZHMgYW5kIHRoZSBudW1iZXIgb2YgTnMgaW4gZWFjaCBmZWF0dXJlIHVzaW5nIG9uZSBvciBtb3JlIHJlZmVyZW5jZSBzb3VyY2VzCmdmZi5jaGVja19yZWZlcmVuY2UoYWxsb3dlZF9udW1fb2Zfbj0wLCBmZWF0dXJlX3R5cGVzPVsnQ0RTJ10pCiMgQ2hlY2tzIHdoZXRoZXIgY2hpbGQgZmVhdHVyZXMgYXJlIHdpdGhpbiB0aGUgY29vcmRpbmF0ZSBib3VuZGFyaWVzIG9mIHBhcmVudCBmZWF0dXJlcwpnZmYuY2hlY2tfcGFyZW50X2JvdW5kYXJ5KCkKIyBDYWxjdWxhdGVzIHRoZSBjb3JyZWN0IHBoYXNlIGFuZCBjaGVja3MgaWYgaXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGhhc2UgZm9yIENEUyBmZWF0dXJlcwpnZmYuY2hlY2tfcGhhc2UoKQo8fGZpbV9zdWZmaXh8PgpnZmYgPSBHZmYzKCkKIyBwYXJzZSBHRkYzIGZpbGUgYW5kIGRvIHN5bnRheCBjaGVja2luZywgdGhpcyBwb3B1bGF0ZXMgZ2ZmLmxpbmVzIGFuZCBnZmYuZmVhdHVyZXMKIyBpZiBhbiBlbWJlZGRlZCAjI0ZBU1RBIGRpcmVjdGl2ZSBpcyBmb3VuZCwgcGFyc2UgdGhlIHNlcXVlbmNlcyBpbnRvIGdmZi5mYXN0YV9lbWJlZGRlZApnZmYucGFyc2UoJ2Fubm90YXRpb25zLmdmZicpCjx8ZmltX2VuZHw+"]
["2e258d7c753eac9b3e7f53c7d4925bb7a7cf1297-3","2e258d7c753eac9b3e7f53c7d4925bb7a7cf1297","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwojIHRyeSB0byBpbXBvcnQgZnJvbSBwcm9qZWN0IGZpcnN0CmZyb20gb3MucGF0aCBpbXBvcnQgZGlybmFtZQpzeXMucGF0aC5pbnNlcnQoMSwgZGlybmFtZShkaXJuYW1lKF9fZmlsZV9fKSkpCmZyb20gZ2ZmMyBpbXBvcnQgR2ZmMwoKIyBpbml0aWFsaXplIGEgR2ZmMyBvYmplY3QKZ2ZmID0gR2ZmMygpCiMgcGFyc2UgR0ZGMyBmaWxlIGFuZCBkbyBzeW50YXggY2hlY2tpbmcsIHRoaXMgcG9wdWxhdGVzIGdmZi5saW5lcyBhbmQgZ2ZmLmZlYXR1cmVzCiMgaWYgYW4gZW1iZWRkZWQgIyNGQVNUQSBkaXJlY3RpdmUgaXMgZm91bmQsIHBhcnNlIHRoZSBzZXF1ZW5jZXMgaW50byBnZmYuZmFzdGFfZW1iZWRkZWQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpnZmYucGFyc2UoJ2Fubm90YXRpb25zLmdmZicpCiMgcGFyc2UgdGhlIGV4dGVybmFsIEZBU1RBIGZpbGUgaW50byBnZmYuZmFzdGFfZXh0ZXJuYWwKI2dmZi5wYXJzZV9mYXN0YV9leHRlcm5hbCgnYW5ub3RhdGlvbnMuZmEnKQojIENoZWNrIHNlcWlkLCBib3VuZHMgYW5kIHRoZSBudW1iZXIgb2YgTnMgaW4gZWFjaCBmZWF0dXJlIHVzaW5nIG9uZSBvciBtb3JlIHJlZmVyZW5jZSBzb3VyY2VzCjx8ZmltX2VuZHw+"]
["00b6cf62ab9d73f0029337011057ceeeb61b01e1-1","00b6cf62ab9d73f0029337011057ceeeb61b01e1","PHxmaW1fcHJlZml4fD4KIyB2b3RpbmcvbW9kZWxzLnB5CmZyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKCmNsYXNzIENob2ljZShtb2RlbHMuTW9kZWwpOgogICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD00MCwgdW5pcXVlPVRydWUpCiAgICB2b3RlcyA9IG1vZGVscy5JbnRlZ2VyRmllbGQoZGVmYXVsdD0wKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojIE4uQi4gd2UgZG9uJ3QgdXNlIGEgVm90ZSBtb2RlbCBhcyB3ZWxsIGJlY2F1c2Ugd2hlbiBxdWVyeWluZyB0aGUgZGF0YWJhc2UsCiMgdGhpcyByZXF1aXJlcyBhIHF1ZXJ5IGludm9sdmluZyB0aGUgd2hvbGUgZGF0YWJhc2UgKGNyb3NzIENob2ljZVhWb3RlKQo8fGZpbV9lbmR8Pg=="]
["00b6cf62ab9d73f0029337011057ceeeb61b01e1-2","00b6cf62ab9d73f0029337011057ceeeb61b01e1","PHxmaW1fcHJlZml4fD4KIyB2b3RpbmcvbW9kZWxzLnB5CmZyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKCmNsYXNzIENob2ljZShtb2RlbHMuTW9kZWwpOgogICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD00MCwgdW5pcXVlPVRydWUpCiAgICB2b3RlcyA9IG1vZGVscy5JbnRlZ2VyRmllbGQoZGVmYXVsdD0wKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgojIE4uQi4gd2UgZG9uJ3QgdXNlIGEgVm90ZSBtb2RlbCBhcyB3ZWxsIGJlY2F1c2Ugd2hlbiBxdWVyeWluZyB0aGUgZGF0YWJhc2UsCiMgdGhpcyByZXF1aXJlcyBhIHF1ZXJ5IGludm9sdmluZyB0aGUgd2hvbGUgZGF0YWJhc2UgKGNyb3NzIENob2ljZVhWb3RlKQo8fGZpbV9lbmR8Pg=="]
["00b6cf62ab9d73f0029337011057ceeeb61b01e1-3","00b6cf62ab9d73f0029337011057ceeeb61b01e1","PHxmaW1fcHJlZml4fD4KIyB2b3RpbmcvbW9kZWxzLnB5CmZyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKCmNsYXNzIENob2ljZShtb2RlbHMuTW9kZWwpOgogICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD00MCwgdW5pcXVlPVRydWUpCiAgICB2b3RlcyA9IG1vZGVscy5JbnRlZ2VyRmllbGQoZGVmYXVsdD0wKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgojIE4uQi4gd2UgZG9uJ3QgdXNlIGEgVm90ZSBtb2RlbCBhcyB3ZWxsIGJlY2F1c2Ugd2hlbiBxdWVyeWluZyB0aGUgZGF0YWJhc2UsCiMgdGhpcyByZXF1aXJlcyBhIHF1ZXJ5IGludm9sdmluZyB0aGUgd2hvbGUgZGF0YWJhc2UgKGNyb3NzIENob2ljZVhWb3RlKQo8fGZpbV9lbmR8Pg=="]
["68cbb8179d1fef075fa51613c4a7f2e28dbf82c5-1","68cbb8179d1fef075fa51613c4a7f2e28dbf82c5","PHxmaW1fcHJlZml4fD4KZGVmIG1lcmdlKGFycjE6IGxpc3QsIGFycjI6IGxpc3QpIC0+IGxpc3Q6CiAgICAiIiJNZXJnZSB0d28gYXJyYXlzIGZvciBtZXJnZSBzb3J0CgogICAgQXJnczoKICAgICAgICBhcnIxIChsaXN0KTogdGhlIGZpcnN0IGFycmF5CiAgICAgICAgYXJyMiAobGlzdCk6IHRoZSBzZWNvbmQgYXJyYXkKCiAgICBSZXR1cm5zOgogICAgICAgIGxpc3Q6IHRoZSBtZXJnZWQgYXJyYXkKICAgICIiIgogICAgbWVyZ2VkID0gW10KCiAgICAjIENvbXBhcmUgZWxlbWVudHMgZm9yIGJvdGggYXJyYXlzCiAgICB3aGlsZSBhcnIxIGFuZCBhcnIyOgogICAgICAgIGlmIChhcnIxWzBdID4gYXJyMlswXSk6CiAgICAgICAgICAgIG1lcmdlZC5hcHBlbmQoYXJyMlswXSkKICAgICAgICAgICAgYXJyMi5wb3AoMCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBtZXJnZWQuYXBwZW5kKGFycjFbMF0pCiAgICAgICAgICAgIGFycjEucG9wKDApCiAgICAKICAgICMgRWl0aGVyIGFycjEgb3IgYXJyMiBpcyBlbXB0eSBub3cKICAgICMgRW1wdHkgYXJyMQogICAgd2hpbGUgYXJyMToKICAgICAgICBtZXJnZWQuYXBwZW5kKGFycjFbMF0pCiAgICAgICAgYXJyMS5wb3AoMCkKICAgIAogICAgIyBFbXB0eSBhcnIyCiAgICB3aGlsZSBhcnIyOgogICAgICAgIG1lcmdlZC5hcHBlbmQoYXJyMlswXSkKICAgICAgICBhcnIyLnBvcCgwKQogICAgCiAgICByZXR1cm4gbWVyZ2VkCjx8ZmltX2hvbGV8PgogICAgQXJnczoKICAgICAgICBhcnIgKGxpc3QpOiB0aGUgbGlzdCB0byBiZSBzb3J0ZWQKCiAgICBSZXR1cm5zOgogICAgICAgIGxpc3Q6IHRoZSBzb3J0ZWQgbGlzdAogICAgIiIiCiAgICBzaXplID0gbGVuKGFycikKCiAgICAjIEVuZCBjb25kaXRpb24gZm9yIHJlY3Vyc2lvbgogICAgaWYgKHNpemUgPT0gMSk6CiAgICAgICAgcmV0dXJuIGFycgoKICAgICMgR2V0IHRoZSBpbmRleCB0byBzcGxpdCB0aGUgYXJyYXkgaW4gaGFsZgogICAgaW5kZXggPSBzaXplIC8vIDIKCiAgICAjIEdldCB0aGUgdHdvIHNwbGl0IGFycmF5cwogICAgYXJyMSA9IGFycls6aW5kZXhdCiAgICBhcnIyID0gYXJyW2luZGV4Ol0KCiAgICAjIFJlY3Vyc2l2bHkgY2FsbCBtZXJnZSBzb3J0CiAgICBhcnIxID0gbWVyZ2Vfc29ydChhcnIxKQogICAgYXJyMiA9IG1lcmdlX3NvcnQoYXJyMikKCiAgICAjIE1lcmdlIHRoZSB0d28gYXJyYXlzIGJhY2sgdG9nZXRoZXIKICAgIHJldHVybiBtZXJnZShhcnIxLCBhcnIyKQo8fGZpbV9zdWZmaXh8PgoKZGVmIG1lcmdlX3NvcnQoYXJyOiBsaXN0KSAtPiBsaXN0OgogICAgIiIiU29ydCBhIGxpc3QgdXNpbmcgbWVyZ2Ugc29ydAoKPHxmaW1fZW5kfD4="]
["68cbb8179d1fef075fa51613c4a7f2e28dbf82c5-2","68cbb8179d1fef075fa51613c4a7f2e28dbf82c5","PHxmaW1fcHJlZml4fD4KZGVmIG1lcmdlKGFycjE6IGxpc3QsIGFycjI6IGxpc3QpIC0+IGxpc3Q6CiAgICAiIiJNZXJnZSB0d28gYXJyYXlzIGZvciBtZXJnZSBzb3J0CgogICAgQXJnczoKICAgICAgICBhcnIxIChsaXN0KTogdGhlIGZpcnN0IGFycmF5CiAgICAgICAgYXJyMiAobGlzdCk6IHRoZSBzZWNvbmQgYXJyYXkKCiAgICBSZXR1cm5zOgogICAgICAgIGxpc3Q6IHRoZSBtZXJnZWQgYXJyYXkKICAgICIiIgogICAgbWVyZ2VkID0gW10KCiAgICAjIENvbXBhcmUgZWxlbWVudHMgZm9yIGJvdGggYXJyYXlzCiAgICB3aGlsZSBhcnIxIGFuZCBhcnIyOgogICAgICAgIGlmIChhcnIxWzBdID4gYXJyMlswXSk6CiAgICAgICAgICAgIG1lcmdlZC5hcHBlbmQoYXJyMlswXSkKICAgICAgICAgICAgYXJyMi5wb3AoMCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBtZXJnZWQuYXBwZW5kKGFycjFbMF0pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgYXJyMS5wb3AoMCkKICAgIAo8fGZpbV9lbmR8Pg=="]
["6ba05abe53f8ca886298bbb90849f2fe23aaa586-1","6ba05abe53f8ca886298bbb90849f2fe23aaa586","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gbzJfcHJpY2VfaW5zcGVjdG9yIGltcG9ydCAoCiAgICBPMlByaWNlSW5zcGVjdG9yLAogICAgTzJQcmljZUluc3BlY3RvckV4Y2VwdGlvbgopCgpmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKaW1wb3J0IHVuaXR0ZXN0Cjx8ZmltX2hvbGV8PgogICAgICAgIHNlbGYucHJpY2VfaW5zcGVjdG9yID0gTzJQcmljZUluc3BlY3RvcigpCgogICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgIHNlbGYucHJpY2VfaW5zcGVjdG9yLmNsb3NlKCkKCiAgICBkZWYgdGVzdF9jaGVja19wcmljZShzZWxmKToKICAgICAgICBwcmljZSA9IHNlbGYucHJpY2VfaW5zcGVjdG9yLmNoZWNrX3ByaWNlX2ZvcignR2VybWFueScpCgogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHByaWNlKSwgRGVjaW1hbCkKCiAgICBkZWYgdGVzdF93cm9uZ19jb3VudHJ5KHNlbGYpOgogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTzJQcmljZUluc3BlY3RvckV4Y2VwdGlvbik6CiAgICAgICAgICAgIHNlbGYucHJpY2VfaW5zcGVjdG9yLmNoZWNrX3ByaWNlX2ZvcignTm90QUNvdW50cnknKQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHVuaXR0ZXN0Lm1haW4oKQo8fGZpbV9zdWZmaXh8PgoKCmNsYXNzIFRlc3RPMlByaWNlSW5zcGVjdG9yKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiBzZXRVcChzZWxmKToKPHxmaW1fZW5kfD4="]
["6ba05abe53f8ca886298bbb90849f2fe23aaa586-2","6ba05abe53f8ca886298bbb90849f2fe23aaa586","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gbzJfcHJpY2VfaW5zcGVjdG9yIGltcG9ydCAoCiAgICBPMlByaWNlSW5zcGVjdG9yLAogICAgTzJQcmljZUluc3BlY3RvckV4Y2VwdGlvbgopCgpmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKaW1wb3J0IHVuaXR0ZXN0CgoKY2xhc3MgVGVzdE8yUHJpY2VJbnNwZWN0b3IodW5pdHRlc3QuVGVzdENhc2UpOgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIHNlbGYucHJpY2VfaW5zcGVjdG9yID0gTzJQcmljZUluc3BlY3RvcigpCgogICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgIHNlbGYucHJpY2VfaW5zcGVjdG9yLmNsb3NlKCkKPHxmaW1faG9sZXw+CiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUocHJpY2UpLCBEZWNpbWFsKQoKICAgIGRlZiB0ZXN0X3dyb25nX2NvdW50cnkoc2VsZik6CiAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPMlByaWNlSW5zcGVjdG9yRXhjZXB0aW9uKToKICAgICAgICAgICAgc2VsZi5wcmljZV9pbnNwZWN0b3IuY2hlY2tfcHJpY2VfZm9yKCdOb3RBQ291bnRyeScpCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdW5pdHRlc3QubWFpbigpCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIHRlc3RfY2hlY2tfcHJpY2Uoc2VsZik6CiAgICAgICAgcHJpY2UgPSBzZWxmLnByaWNlX2luc3BlY3Rvci5jaGVja19wcmljZV9mb3IoJ0dlcm1hbnknKQoKPHxmaW1fZW5kfD4="]
["2e7506e9e9d3995cb3fe376f95e2163876aef0c9-1","2e7506e9e9d3995cb3fe376f95e2163876aef0c9","PHxmaW1fcHJlZml4fD4KZnJvbSBzb3J0aW5nX2FsZ29yaXRobXMubWVyZ2Vfc29ydCBpbXBvcnQgbWVyZ2Vfc29ydApmcm9tIGNvbGxlY3Rpb25zLmFiYyBpbXBvcnQgQ2FsbGFibGUKZnJvbSBjb2xvcmFtYSBpbXBvcnQgRm9yZSwgU3R5bGUKZnJvbSAuaGVscGVyX2Z1bmN0aW9ucyBpbXBvcnQgKgpmcm9tIHRpbWUgaW1wb3J0IHRpbWUKCgpkZWYgZ2V0X2NvbG9yKGZvdW5kOiBpbnQpIC0+IEZvcmU6CiAgICAiIiIKICAgICAgICAjIEdldCBDb2xvcgogICAgICAgIFJldHVybnMgUmVkIG9yIEdyZWVuIEZvcmVncm91bmQgY29sb3IgZGVwZW5kaW5nIG9uIGlmIHRoZSBpdGVtIHdhcyBmb3VuZCB3aXRoaW4gdGhlIGFycmF5LgogICAgICAgICMjIyBQYXJhbWV0ZXJzOgogICAgICAgIGBgYHB5CiAgICAgICAgZm91bmQ6IGludCAjIFJldHVybiB2YWx1ZSBmcm9tIGEgc2VhcmNoaW5nIGFsZ29yaXRobS4KICAgICAgICBgYGAKICAgICIiIgogICAgCiAgICBpZiBmb3VuZCA8PSAtMToKICAgICAgICByZXR1cm4gRm9yZS5SRUQKICAgIHJldHVybiBGb3JlLkdSRUVOCgoKZGVmIHNwZWVkX3Rlc3QobWV0aG9kOiBDYWxsYWJsZVtbbGlzdFthbnldLCBhbnldLCBpbnRdLCBzb3J0aW5nX21ldGhvZDogQ2FsbGFibGVbW2xpc3RbaW50XV0sIE5vbmVdID0gbWVyZ2Vfc29ydCwgbGVuZ3RoOiBpbnQgPSAxMDApIC0+IE5vbmU6CiAgICAiIiIKICAgICAgICAjIFNwZWVkIFRlc3QKICAgICAgICBUZXN0cyBhIHNlYXJjaGluZyBhbGdvcml0aG0ncyBzcGVlZCBieSBzZWFyY2hpbmcgdGhyb3VnaCBhbiBhcnJheSBvZiBzaXplIGBsZW5ndGhgLgogICAgICAgICMjIyBQYXJhbWV0ZXJzOgogICAgICAgIGBgYHB5CiAgICAgICAgYXJyYXk6IGxpc3RbYW55XSAjIEFycmF5IHRvIHNlYXJjaCwgd2lsbCBiZSBjcmVhdGVkIHVwb24gZnVuY3Rpb24gY2FsbCB3aXRoIGBjcmVhdGVfaW50ZWdlcl9hcnJheWAuCiAgICAgICAgbWV0aG9kOiBDYWxsYWJsZVtbbGlzdFthbnldLCBhbnldLCBpbnRdICMgU2VhcmNoaW5nIEFsZ29yaXRobSBtZXRob2QuCiAgICAgICAgc29ydGluZ19tZXRob2Q6IENhbGxhYmxlW1tsaXN0W2ludF1dLCBOb25lXSA9IG1lcmdlX3NvcnQgIyBNZXRob2QgZm9yIHNvcnRpbmcgdGhlIGFycmF5LCB1c2VkIHdoZW4gYSBTZWFyY2hpbmcgQWxnb3JpdGhtIHJlcXVpcmVzIHRoZSBhcnJheSB0byBiZSBzb3J0ZWQuCiAgICAgICAgbGVuZ3RoOiBpbnQgPSAxMDAgIyBEZXRlcm1pbmVzIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IHdoZW4gY3JlYXRlZC4KICAgICAgICBgYGAKICAgICIiIgogICAgCiAgICBpZiBsZW5ndGggPj0gNTAwMDAwMCBhbmQgbWV0aG9kLl9fbmFtZV9fIGluIFsiYmluYXJ5X3NlYXJjaCJdOgogICAgICAgICMgU2tpcCBmb3IgdGVzdHMgdGhhdCBuZWVkIGEgc29ydGluZyBhbGdvcml0aG0KICAgICAgICBwcmludChmIntTdHlsZS5ESU19U2tpcHBpbmcgVGVzdCBjYXVzZSBzcGVjaWZpZWQgc2VhcmNoaW5nIG9yIHNvcnRpbmcgYWxnb3JpdGhtIGlzIHRvbyBzbG93LntTdHlsZS5SRVNFVF9BTEx9IikKICAgICAgICByZXR1cm4KICAgIAogICAgcHJpbnQoZiJ7U3R5bGUuRElNfVNlYXJjaCBTcGVlZCBUZXN0e1N0eWxlLlJFU0VUX0FMTH0iKQogICAgCiAgICBhcnJheTogbGlzdFthbnldID0gWyAgXQogICAgUkFORF9NSU46IGludCA9IC0yNTAwMDAwCiAgICBSQU5EX01BWDogaW50ID0gMjUwMDAwMAogICAgCiAgICBjcmVhdGVfaW50ZWdlcl9hcnJheShhcnJheT1hcnJheSwgbGVuZ3RoPWxlbmd0aCwgcmFuZF9taW49UkFORF9NSU4sIHJhbmRfbWF4PVJBTkRfTUFYKQogICAgaWYgbWV0aG9kLl9fbmFtZV9fIGluIFsiYmluYXJ5X3NlYXJjaCJdOgogICAgICAgICMgU29ydCBBcnJheSBmb3Igc2VhcmNoIGFsZ29yaXRobXMgdGhhdCByZXF1aXJlIHNvcnRpbmcuCiAgICAgICAgcHJpbnQoZiJQcmUtU29ydGluZyBBcnJheSB3aXRoIHtGb3JlLkJMVUV9e1N0eWxlLkJSSUdIVH0ne2dldF9tZXRob2RfbmFtZShzb3J0aW5nX21ldGhvZCl9J3tGb3JlLlJFU0VUfXtTdHlsZS5SRVNFVF9BTEx9LiIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBiZWdpbl90aW1lOiBmbG9hdCA9IHRpbWUoKQogICAgICAgIHNvcnRpbmdfbWV0aG9kKGFycmF5KQogICAgICAgIGVuZF90aW1lOiBmbG9hdCA9IHRpbWUoKQogICAgICAgIHByaW50KGYie0ZvcmUuR1JFRU59U29ydGVkIEFycmF5IGluIHtlbmRfdGltZSAtIGJlZ2luX3RpbWV9c3tGb3JlLlJFU0VUfSIpCjx8ZmltX2VuZHw+"]
["2e7506e9e9d3995cb3fe376f95e2163876aef0c9-2","2e7506e9e9d3995cb3fe376f95e2163876aef0c9","PHxmaW1fcHJlZml4fD4KZnJvbSBzb3J0aW5nX2FsZ29yaXRobXMubWVyZ2Vfc29ydCBpbXBvcnQgbWVyZ2Vfc29ydApmcm9tIGNvbGxlY3Rpb25zLmFiYyBpbXBvcnQgQ2FsbGFibGUKZnJvbSBjb2xvcmFtYSBpbXBvcnQgRm9yZSwgU3R5bGUKZnJvbSAuaGVscGVyX2Z1bmN0aW9ucyBpbXBvcnQgKgpmcm9tIHRpbWUgaW1wb3J0IHRpbWUKCgpkZWYgZ2V0X2NvbG9yKGZvdW5kOiBpbnQpIC0+IEZvcmU6CiAgICAiIiIKICAgICAgICAjIEdldCBDb2xvcgogICAgICAgIFJldHVybnMgUmVkIG9yIEdyZWVuIEZvcmVncm91bmQgY29sb3IgZGVwZW5kaW5nIG9uIGlmIHRoZSBpdGVtIHdhcyBmb3VuZCB3aXRoaW4gdGhlIGFycmF5LgogICAgICAgICMjIyBQYXJhbWV0ZXJzOgogICAgICAgIGBgYHB5CiAgICAgICAgZm91bmQ6IGludCAjIFJldHVybiB2YWx1ZSBmcm9tIGEgc2VhcmNoaW5nIGFsZ29yaXRobS4KICAgICAgICBgYGAKICAgICIiIgogICAgCiAgICBpZiBmb3VuZCA8PSAtMToKICAgICAgICByZXR1cm4gRm9yZS5SRUQKICAgIHJldHVybiBGb3JlLkdSRUVOCgoKZGVmIHNwZWVkX3Rlc3QobWV0aG9kOiBDYWxsYWJsZVtbbGlzdFthbnldLCBhbnldLCBpbnRdLCBzb3J0aW5nX21ldGhvZDogQ2FsbGFibGVbW2xpc3RbaW50XV0sIE5vbmVdID0gbWVyZ2Vfc29ydCwgbGVuZ3RoOiBpbnQgPSAxMDApIC0+IE5vbmU6CiAgICAiIiIKICAgICAgICAjIFNwZWVkIFRlc3QKICAgICAgICBUZXN0cyBhIHNlYXJjaGluZyBhbGdvcml0aG0ncyBzcGVlZCBieSBzZWFyY2hpbmcgdGhyb3VnaCBhbiBhcnJheSBvZiBzaXplIGBsZW5ndGhgLgogICAgICAgICMjIyBQYXJhbWV0ZXJzOgogICAgICAgIGBgYHB5CiAgICAgICAgYXJyYXk6IGxpc3RbYW55XSAjIEFycmF5IHRvIHNlYXJjaCwgd2lsbCBiZSBjcmVhdGVkIHVwb24gZnVuY3Rpb24gY2FsbCB3aXRoIGBjcmVhdGVfaW50ZWdlcl9hcnJheWAuCiAgICAgICAgbWV0aG9kOiBDYWxsYWJsZVtbbGlzdFthbnldLCBhbnldLCBpbnRdICMgU2VhcmNoaW5nIEFsZ29yaXRobSBtZXRob2QuCiAgICAgICAgc29ydGluZ19tZXRob2Q6IENhbGxhYmxlW1tsaXN0W2ludF1dLCBOb25lXSA9IG1lcmdlX3NvcnQgIyBNZXRob2QgZm9yIHNvcnRpbmcgdGhlIGFycmF5LCB1c2VkIHdoZW4gYSBTZWFyY2hpbmcgQWxnb3JpdGhtIHJlcXVpcmVzIHRoZSBhcnJheSB0byBiZSBzb3J0ZWQuCiAgICAgICAgbGVuZ3RoOiBpbnQgPSAxMDAgIyBEZXRlcm1pbmVzIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IHdoZW4gY3JlYXRlZC4KICAgICAgICBgYGAKICAgICIiIgogICAgCiAgICBpZiBsZW5ndGggPj0gNTAwMDAwMCBhbmQgbWV0aG9kLl9fbmFtZV9fIGluIFsiYmluYXJ5X3NlYXJjaCJdOgogICAgICAgICMgU2tpcCBmb3IgdGVzdHMgdGhhdCBuZWVkIGEgc29ydGluZyBhbGdvcml0aG0KICAgICAgICBwcmludChmIntTdHlsZS5ESU19U2tpcHBpbmcgVGVzdCBjYXVzZSBzcGVjaWZpZWQgc2VhcmNoaW5nIG9yIHNvcnRpbmcgYWxnb3JpdGhtIGlzIHRvbyBzbG93LntTdHlsZS5SRVNFVF9BTEx9IikKICAgICAgICByZXR1cm4KICAgIAogICAgcHJpbnQoZiJ7U3R5bGUuRElNfVNlYXJjaCBTcGVlZCBUZXN0e1N0eWxlLlJFU0VUX0FMTH0iKQogICAgCiAgICBhcnJheTogbGlzdFthbnldID0gWyAgXQogICAgUkFORF9NSU46IGludCA9IC0yNTAwMDAwCiAgICBSQU5EX01BWDogaW50ID0gMjUwMDAwMAogICAgCiAgICBjcmVhdGVfaW50ZWdlcl9hcnJheShhcnJheT1hcnJheSwgbGVuZ3RoPWxlbmd0aCwgcmFuZF9taW49UkFORF9NSU4sIHJhbmRfbWF4PVJBTkRfTUFYKQogICAgaWYgbWV0aG9kLl9fbmFtZV9fIGluIFsiYmluYXJ5X3NlYXJjaCJdOgogICAgICAgICMgU29ydCBBcnJheSBmb3Igc2VhcmNoIGFsZ29yaXRobXMgdGhhdCByZXF1aXJlIHNvcnRpbmcuCiAgICAgICAgcHJpbnQoZiJQcmUtU29ydGluZyBBcnJheSB3aXRoIHtGb3JlLkJMVUV9e1N0eWxlLkJSSUdIVH0ne2dldF9tZXRob2RfbmFtZShzb3J0aW5nX21ldGhvZCl9J3tGb3JlLlJFU0VUfXtTdHlsZS5SRVNFVF9BTEx9LiIpCiAgICAgICAgYmVnaW5fdGltZTogZmxvYXQgPSB0aW1lKCkKICAgICAgICBzb3J0aW5nX21ldGhvZChhcnJheSkKICAgICAgICBlbmRfdGltZTogZmxvYXQgPSB0aW1lKCkKICAgICAgICBwcmludChmIntGb3JlLkdSRUVOfVNvcnRlZCBBcnJheSBpbiB7ZW5kX3RpbWUgLSBiZWdpbl90aW1lfXN7Rm9yZS5SRVNFVH0iKQogICAgCiAgICBwcmludChmIntGb3JlLllFTExPV31BcnJheSBMZW5ndGg6IHtTdHlsZS5CUklHSFR9J3tsZW4oYXJyYXkpfSd7U3R5bGUuTk9STUFMfS57Rm9yZS5SRVNFVH0iKQogICAgYmVnaW5fdGltZTogZmxvYXQgPSB0aW1lKCkKICAgIGZpbmRpbmc6IGludCA9IHJhbmRpbnQoYT1SQU5EX01JTiwgYj1SQU5EX01BWCkKICAgIGZvdW5kID0gbWV0aG9kKGFycmF5LCBmaW5kaW5nKQogICAgZW5kX3RpbWU6IGZsb2F0ID0gdGltZSgpCiAgICBwcmludChmIntnZXRfY29sb3IoZm91bmQ9Zm91bmQpfVNlYXJjaGVkIGZvciB7U3R5bGUuQlJJR0hUfSd7ZmluZGluZ30ne1N0eWxlLk5PUk1BTH0sIGZvdW5kIGF0IGluZGV4IHtTdHlsZS5CUklHSFR9J3tmb3VuZH0ne1N0eWxlLlJFU0VUX0FMTH17Rm9yZS5SRVNFVH0uIikKICAgIHByaW50KGYiVGltZSBFbGFwc2VkOiB7ZW5kX3RpbWUgLSBiZWdpbl90aW1lfXMiKQoKCmRlZiBhc3NlcnRfY29tcGFyZShtZXRob2Q6IENhbGxhYmxlW1tsaXN0W2FueV0sIGFueV0sIGludF0sIGFycmF5OiBsaXN0W2FueV0sIGZpbmRpbmc6IGFueSwgaWR4OiBpbnQpIC0+IE5vbmU6CiAgICAiIiIKICAgICAgICAjIEFzc2VydCBDb21wYXJlCiAgICAgICAgQ29tcGFyZXMgc2VhcmNoaW5nIGFsZ29yaXRobSBmaW5kaW5ncyB0byBzZWUgaWYgdGhleSBjb3JyZWN0bHkgZm91bmQgYW4gZWxlbWVudCB3aXRoaW4gdGhlIGdpdmVuIGFycmF5LgogICAgICAgICMjIyBQYXJhbWV0ZXJzOgogICAgICAgIGBgYHB5Cjx8ZmltX2hvbGV8PgogICAgICAgIGBgYAogICAgIiIiCiAgICAKICAgIGZvdW5kOiBpbnQgPSBtZXRob2QoYXJyYXksIGZpbmRpbmcpCiAgICBpZiBmb3VuZCA9PSBpZHggYW5kIGlkeCA9PSAtMTogIyBIYXMgYmVlbiBmb3VuZCBidXQgZG9lcyBub3QgZXhpc3QKICAgICAgICBwcmludChmIntGb3JlLkdSRUVOfUVsZW1lbnQge1N0eWxlLkJSSUdIVH0ne2ZpbmRpbmd9J3tTdHlsZS5OT1JNQUx9IGRvZXMgbm90IGV4aXN0IGluIHtTdHlsZS5CUklHSFR9J3tnZXRfYXJyYXlfYXNfc3RyKGFycmF5PWFycmF5KX0ne1N0eWxlLk5PUk1BTH0gYXQge1N0eWxlLkJSSUdIVH0ne2lkeH0ne1N0eWxlLlJFU0VUX0FMTH0uIikKICAgIGVsaWYgZm91bmQgPT0gaWR4OiAjIEhhcyBiZWVuIGZvdW5kCiAgICAgICAgcHJpbnQoZiJ7Rm9yZS5HUkVFTn1Gb3VuZCB7U3R5bGUuQlJJR0hUfSd7ZmluZGluZ30ne1N0eWxlLk5PUk1BTH0gaW4ge1N0eWxlLkJSSUdIVH0ne2dldF9hcnJheV9hc19zdHIoYXJyYXk9YXJyYXkpfSd7U3R5bGUuTk9STUFMfSBhdCBpbmRleCB7U3R5bGUuQlJJR0hUfSd7Zm91bmR9J3tTdHlsZS5SRVNFVF9BTEx9LiIpCiAgICBlbHNlOiAjIEhhcyBub3QgYmVlbiBmb3VuZCBhbmQgZG9lcyBleGlzdAogICAgICAgIHByaW50KGYie0ZvcmUuUkVEfURpZCBub3QgZmluZCB7U3R5bGUuQlJJR0hUfSd7ZmluZGluZ30ne1N0eWxlLk5PUk1BTH0gaW4ge1N0eWxlLkJSSUdIVH0ne2dldF9hcnJheV9hc19zdHIoYXJyYXk9YXJyYXkpfSd7U3R5bGUuTk9STUFMfSBhdCBpbmRleCB7U3R5bGUuQlJJR0hUfSd7aWR4fSd7U3R5bGUuUkVTRVRfQUxMfS4iKQoKZGVmIGFzc2VydGlvbl90ZXN0KG1ldGhvZDogQ2FsbGFibGVbW2xpc3RbYW55XSwgYW55XSwgaW50XSkgLT4gTm9uZToKICAgICIiIgogICAgICAgICMgQXNzZXJ0aW9uIFRlc3QKICAgICAgICBVc2VkIHRvIGVuc3VyZSB0aGF0IHRoZSBzZWFyY2hpbmcgbWV0aG9kIGlzIGZpbmRpbmcgdGhpbmdzIHByb3Blcmx5LCBvciBqdXN0IGZpbmRpbmcgdGhlbSBhdCBhbGwuCiAgICAgICAgIyMjIFBhcmFtZXRlcnM6CiAgICAgICAgYGBgcHkKICAgICAgICBtZXRob2Q6IENhbGxhYmxlW1tsaXN0W2FueV0sIGFueV0sIGludF0gIyBTZWFyY2hpbmcgQWxnb3JpdGhtIE1ldGhvZC4KICAgICAgICBgYGAKICAgICIiIgogICAgCiAgICAjIEFscmVhZHkgc29ydGVkIGZvciBhbGdvcml0aG1zIGxpa2UgQmluYXJ5IFNlYXJjaCAjCiAgICBhcnJheV9hLCBmaW5kaW5nX2EsIGlkeF9hID0gWyAwLCAxMywgMjMsIDIxNSwgNTMyLCA5MzJdLCA5MzIsIDUKICAgIGFycmF5X2IsIGZpbmRpbmdfYiwgaWR4X2IgPSBbIDE0LCAyOSwgNDUsIDQ2LCA2OCwgOTIsIDEzMiBdLCAyOSwgMQogICAgYXJyYXlfYywgZmluZGluZ19jLCBpZHhfYyA9IFsgMTIzLCA0NTYsIDU1NywgNTU5LCA2MTIsIDcyMiBdLCA2NjYsIC0xCiAgICBhcnJheV9kLCBmaW5kaW5nX2QsIGlkeF9kID0gWyAxMDAsIDExMCwgMTIwLCAxMzAsIDE0MCwgMTUwIF0sIDEzMCwgMwogICAgYXJyYXlfZSwgZmluZGluZ19lLCBpZHhfZSA9IFsgMSwgMiwgMywgMywgNSwgOSwgMTAsIDExLCAyNCwgMjkgXSwgMjksIDkKICAgIAogICAgcHJpbnQoZiJ7U3R5bGUuRElNfUFzc2VydGlvbiBUZXN0OntTdHlsZS5SRVNFVF9BTEx9IikKICAgIAogICAgYXNzZXJ0X2NvbXBhcmUobWV0aG9kPW1ldGhvZCwgYXJyYXk9YXJyYXlfYSwgZmluZGluZz1maW5kaW5nX2EsIGlkeD1pZHhfYSkKICAgIGFzc2VydF9jb21wYXJlKG1ldGhvZD1tZXRob2QsIGFycmF5PWFycmF5X2IsIGZpbmRpbmc9ZmluZGluZ19iLCBpZHg9aWR4X2IpCiAgICBhc3NlcnRfY29tcGFyZShtZXRob2Q9bWV0aG9kLCBhcnJheT1hcnJheV9jLCBmaW5kaW5nPWZpbmRpbmdfYywgaWR4PWlkeF9jKQogICAgYXNzZXJ0X2NvbXBhcmUobWV0aG9kPW1ldGhvZCwgYXJyYXk9YXJyYXlfZCwgZmluZGluZz1maW5kaW5nX2QsIGlkeD1pZHhfZCkKICAgIGFzc2VydF9jb21wYXJlKG1ldGhvZD1tZXRob2QsIGFycmF5PWFycmF5X2UsIGZpbmRpbmc9ZmluZGluZ19lLCBpZHg9aWR4X2UpCgoKZGVmIHJ1bl90ZXN0cyhtZXRob2Q6IENhbGxhYmxlW1tsaXN0W2FueV0sIGFueV0sIGludF0pIC0+IE5vbmU6CiAgICAiIiIKICAgICAgICAjIFJ1biBUZXN0cwogICAgICAgIFJ1bnMgdGVzdHMgdG8gZW5zdXJlIHRoZSBzZWFyY2hpbmcgYWxnb3JpdGhtIG1ldGhvZCBjYW4gcHJvcGVybHkgc2VhcmNoLCBpdCBhbHNvIHRlc3RzIHRoZWlyIHNwZWVkLgogICAgICAgICMjIyBQYXJhbWV0ZXJzOgogICAgICAgIGBgYHB5CiAgICAgICAgbWV0aG9kOiBDYWxsYWJsZVtbbGlzdFthbnldLCBhbnldLCBpbnRdICMgU2VhcmNoaW5nIEFsZ29yaXRobSBNZXRob2QuCiAgICAgICAgYGBgCiAgICAiIiIKICAgIAogICAgcHJpbnQoZiJ7U3R5bGUuQlJJR0hUfXtGb3JlLllFTExPV308PT09PT17Rm9yZS5DWUFOfXtnZXRfbWV0aG9kX25hbWUobWV0aG9kKX17Rm9yZS5ZRUxMT1d9PT09PT0+e0ZvcmUuUkVTRVR9e1N0eWxlLlJFU0VUX0FMTH0iKQogICAgCiAgICAjIFNwZWVkIFRlc3RzCiAgICBzcGVlZF90ZXN0KG1ldGhvZD1tZXRob2QsIGxlbmd0aD0xMDAwKQogICAgcHJpbnQoKQogICAgc3BlZWRfdGVzdChtZXRob2Q9bWV0aG9kLCBsZW5ndGg9MTAwMDApCiAgICBwcmludCgpCiAgICBzcGVlZF90ZXN0KG1ldGhvZD1tZXRob2QsIGxlbmd0aD0xMDAwMDApCiAgICBwcmludCgpCiAgICBzcGVlZF90ZXN0KG1ldGhvZD1tZXRob2QsIGxlbmd0aD01MDAwMDApCiAgICBwcmludCgpCiAgICBzcGVlZF90ZXN0KG1ldGhvZD1tZXRob2QsIGxlbmd0aD03NTAwMDApCiAgICBwcmludCgpCiAgICBzcGVlZF90ZXN0KG1ldGhvZD1tZXRob2QsIGxlbmd0aD0xMDAwMDAwKQogICAgcHJpbnQoKQogICAgc3BlZWRfdGVzdChtZXRob2Q9bWV0aG9kLCBsZW5ndGg9NTAwMDAwMCkKICAgIHByaW50KCkKICAgIHNwZWVkX3Rlc3QobWV0aG9kPW1ldGhvZCwgbGVuZ3RoPTEwMDAwMDAwKQogICAgcHJpbnQoKQogICAgCiAgICBhc3NlcnRpb25fdGVzdChtZXRob2Q9bWV0aG9kKQogICAgCiAgICBwcmludChmIntTdHlsZS5CUklHSFR9e0ZvcmUuWUVMTE9XfTw9PT09PT09PT09PntGb3JlLlJFU0VUfXtTdHlsZS5SRVNFVF9BTEx9IikKPHxmaW1fc3VmZml4fD4KICAgICAgICBtZXRob2Q6IENhbGxhYmxlW1tsaXN0W2FueV0sIGFueV0sIGludF0gIyBTZWFyY2hpbmcgQWxnb3JpdGhtIE1ldGhvZC4KICAgICAgICBhcnJheTogbGlzdFthbnldICMgQXJyYXkgdG8gYmUgdGVzdGVkLgogICAgICAgIGZpbmRpbmc6IGFueSAjIFdoYXQgd2Ugd2FudGVkIHRvIGZpbmQuCiAgICAgICAgaWR4OiBpbnQgIyBJbmRleCBvZiB3aGF0IHdlIHdhbnRlZCB0byBmaW5kLgo8fGZpbV9lbmR8Pg=="]
["2e7506e9e9d3995cb3fe376f95e2163876aef0c9-3","2e7506e9e9d3995cb3fe376f95e2163876aef0c9","PHxmaW1fcHJlZml4fD4KZnJvbSBzb3J0aW5nX2FsZ29yaXRobXMubWVyZ2Vfc29ydCBpbXBvcnQgbWVyZ2Vfc29ydApmcm9tIGNvbGxlY3Rpb25zLmFiYyBpbXBvcnQgQ2FsbGFibGUKZnJvbSBjb2xvcmFtYSBpbXBvcnQgRm9yZSwgU3R5bGUKZnJvbSAuaGVscGVyX2Z1bmN0aW9ucyBpbXBvcnQgKgpmcm9tIHRpbWUgaW1wb3J0IHRpbWUKCgpkZWYgZ2V0X2NvbG9yKGZvdW5kOiBpbnQpIC0+IEZvcmU6CiAgICAiIiIKICAgICAgICAjIEdldCBDb2xvcgogICAgICAgIFJldHVybnMgUmVkIG9yIEdyZWVuIEZvcmVncm91bmQgY29sb3IgZGVwZW5kaW5nIG9uIGlmIHRoZSBpdGVtIHdhcyBmb3VuZCB3aXRoaW4gdGhlIGFycmF5LgogICAgICAgICMjIyBQYXJhbWV0ZXJzOgogICAgICAgIGBgYHB5CiAgICAgICAgZm91bmQ6IGludCAjIFJldHVybiB2YWx1ZSBmcm9tIGEgc2VhcmNoaW5nIGFsZ29yaXRobS4KICAgICAgICBgYGAKICAgICIiIgogICAgCiAgICBpZiBmb3VuZCA8PSAtMToKICAgICAgICByZXR1cm4gRm9yZS5SRUQKICAgIHJldHVybiBGb3JlLkdSRUVOCgoKZGVmIHNwZWVkX3Rlc3QobWV0aG9kOiBDYWxsYWJsZVtbbGlzdFthbnldLCBhbnldLCBpbnRdLCBzb3J0aW5nX21ldGhvZDogQ2FsbGFibGVbW2xpc3RbaW50XV0sIE5vbmVdID0gbWVyZ2Vfc29ydCwgbGVuZ3RoOiBpbnQgPSAxMDApIC0+IE5vbmU6CiAgICAiIiIKICAgICAgICAjIFNwZWVkIFRlc3QKICAgICAgICBUZXN0cyBhIHNlYXJjaGluZyBhbGdvcml0aG0ncyBzcGVlZCBieSBzZWFyY2hpbmcgdGhyb3VnaCBhbiBhcnJheSBvZiBzaXplIGBsZW5ndGhgLgogICAgICAgICMjIyBQYXJhbWV0ZXJzOgogICAgICAgIGBgYHB5CiAgICAgICAgYXJyYXk6IGxpc3RbYW55XSAjIEFycmF5IHRvIHNlYXJjaCwgd2lsbCBiZSBjcmVhdGVkIHVwb24gZnVuY3Rpb24gY2FsbCB3aXRoIGBjcmVhdGVfaW50ZWdlcl9hcnJheWAuCiAgICAgICAgbWV0aG9kOiBDYWxsYWJsZVtbbGlzdFthbnldLCBhbnldLCBpbnRdICMgU2VhcmNoaW5nIEFsZ29yaXRobSBtZXRob2QuCiAgICAgICAgc29ydGluZ19tZXRob2Q6IENhbGxhYmxlW1tsaXN0W2ludF1dLCBOb25lXSA9IG1lcmdlX3NvcnQgIyBNZXRob2QgZm9yIHNvcnRpbmcgdGhlIGFycmF5LCB1c2VkIHdoZW4gYSBTZWFyY2hpbmcgQWxnb3JpdGhtIHJlcXVpcmVzIHRoZSBhcnJheSB0byBiZSBzb3J0ZWQuCiAgICAgICAgbGVuZ3RoOiBpbnQgPSAxMDAgIyBEZXRlcm1pbmVzIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IHdoZW4gY3JlYXRlZC4KICAgICAgICBgYGAKICAgICIiIgogICAgCiAgICBpZiBsZW5ndGggPj0gNTAwMDAwMCBhbmQgbWV0aG9kLl9fbmFtZV9fIGluIFsiYmluYXJ5X3NlYXJjaCJdOgogICAgICAgICMgU2tpcCBmb3IgdGVzdHMgdGhhdCBuZWVkIGEgc29ydGluZyBhbGdvcml0aG0KICAgICAgICBwcmludChmIntTdHlsZS5ESU19U2tpcHBpbmcgVGVzdCBjYXVzZSBzcGVjaWZpZWQgc2VhcmNoaW5nIG9yIHNvcnRpbmcgYWxnb3JpdGhtIGlzIHRvbyBzbG93LntTdHlsZS5SRVNFVF9BTEx9IikKICAgICAgICByZXR1cm4KICAgIAogICAgcHJpbnQoZiJ7U3R5bGUuRElNfVNlYXJjaCBTcGVlZCBUZXN0e1N0eWxlLlJFU0VUX0FMTH0iKQogICAgCiAgICBhcnJheTogbGlzdFthbnldID0gWyAgXQogICAgUkFORF9NSU46IGludCA9IC0yNTAwMDAwCiAgICBSQU5EX01BWDogaW50ID0gMjUwMDAwMAogICAgCiAgICBjcmVhdGVfaW50ZWdlcl9hcnJheShhcnJheT1hcnJheSwgbGVuZ3RoPWxlbmd0aCwgcmFuZF9taW49UkFORF9NSU4sIHJhbmRfbWF4PVJBTkRfTUFYKQogICAgaWYgbWV0aG9kLl9fbmFtZV9fIGluIFsiYmluYXJ5X3NlYXJjaCJdOgogICAgICAgICMgU29ydCBBcnJheSBmb3Igc2VhcmNoIGFsZ29yaXRobXMgdGhhdCByZXF1aXJlIHNvcnRpbmcuCiAgICAgICAgcHJpbnQoZiJQcmUtU29ydGluZyBBcnJheSB3aXRoIHtGb3JlLkJMVUV9e1N0eWxlLkJSSUdIVH0ne2dldF9tZXRob2RfbmFtZShzb3J0aW5nX21ldGhvZCl9J3tGb3JlLlJFU0VUfXtTdHlsZS5SRVNFVF9BTEx9LiIpCiAgICAgICAgYmVnaW5fdGltZTogZmxvYXQgPSB0aW1lKCkKICAgICAgICBzb3J0aW5nX21ldGhvZChhcnJheSkKICAgICAgICBlbmRfdGltZTogZmxvYXQgPSB0aW1lKCkKICAgICAgICBwcmludChmIntGb3JlLkdSRUVOfVNvcnRlZCBBcnJheSBpbiB7ZW5kX3RpbWUgLSBiZWdpbl90aW1lfXN7Rm9yZS5SRVNFVH0iKQogICAgCiAgICBwcmludChmIntGb3JlLllFTExPV31BcnJheSBMZW5ndGg6IHtTdHlsZS5CUklHSFR9J3tsZW4oYXJyYXkpfSd7U3R5bGUuTk9STUFMfS57Rm9yZS5SRVNFVH0iKQogICAgYmVnaW5fdGltZTogZmxvYXQgPSB0aW1lKCkKICAgIGZpbmRpbmc6IGludCA9IHJhbmRpbnQoYT1SQU5EX01JTiwgYj1SQU5EX01BWCkKICAgIGZvdW5kID0gbWV0aG9kKGFycmF5LCBmaW5kaW5nKQogICAgZW5kX3RpbWU6IGZsb2F0ID0gdGltZSgpCiAgICBwcmludChmIntnZXRfY29sb3IoZm91bmQ9Zm91bmQpfVNlYXJjaGVkIGZvciB7U3R5bGUuQlJJR0hUfSd7ZmluZGluZ30ne1N0eWxlLk5PUk1BTH0sIGZvdW5kIGF0IGluZGV4IHtTdHlsZS5CUklHSFR9J3tmb3VuZH0ne1N0eWxlLlJFU0VUX0FMTH17Rm9yZS5SRVNFVH0uIikKICAgIHByaW50KGYiVGltZSBFbGFwc2VkOiB7ZW5kX3RpbWUgLSBiZWdpbl90aW1lfXMiKQoKCmRlZiBhc3NlcnRfY29tcGFyZShtZXRob2Q6IENhbGxhYmxlW1tsaXN0W2FueV0sIGFueV0sIGludF0sIGFycmF5OiBsaXN0W2FueV0sIGZpbmRpbmc6IGFueSwgaWR4OiBpbnQpIC0+IE5vbmU6CiAgICAiIiIKICAgICAgICAjIEFzc2VydCBDb21wYXJlCiAgICAgICAgQ29tcGFyZXMgc2VhcmNoaW5nIGFsZ29yaXRobSBmaW5kaW5ncyB0byBzZWUgaWYgdGhleSBjb3JyZWN0bHkgZm91bmQgYW4gZWxlbWVudCB3aXRoaW4gdGhlIGdpdmVuIGFycmF5LgogICAgICAgICMjIyBQYXJhbWV0ZXJzOgogICAgICAgIGBgYHB5CiAgICAgICAgbWV0aG9kOiBDYWxsYWJsZVtbbGlzdFthbnldLCBhbnldLCBpbnRdICMgU2VhcmNoaW5nIEFsZ29yaXRobSBNZXRob2QuCiAgICAgICAgYXJyYXk6IGxpc3RbYW55XSAjIEFycmF5IHRvIGJlIHRlc3RlZC4KICAgICAgICBmaW5kaW5nOiBhbnkgIyBXaGF0IHdlIHdhbnRlZCB0byBmaW5kLgogICAgICAgIGlkeDogaW50ICMgSW5kZXggb2Ygd2hhdCB3ZSB3YW50ZWQgdG8gZmluZC4KICAgICAgICBgYGAKICAgICIiIgogICAgCiAgICBmb3VuZDogaW50ID0gbWV0aG9kKGFycmF5LCBmaW5kaW5nKQogICAgaWYgZm91bmQgPT0gaWR4IGFuZCBpZHggPT0gLTE6ICMgSGFzIGJlZW4gZm91bmQgYnV0IGRvZXMgbm90IGV4aXN0CiAgICAgICAgcHJpbnQoZiJ7Rm9yZS5HUkVFTn1FbGVtZW50IHtTdHlsZS5CUklHSFR9J3tmaW5kaW5nfSd7U3R5bGUuTk9STUFMfSBkb2VzIG5vdCBleGlzdCBpbiB7U3R5bGUuQlJJR0hUfSd7Z2V0X2FycmF5X2FzX3N0cihhcnJheT1hcnJheSl9J3tTdHlsZS5OT1JNQUx9IGF0IHtTdHlsZS5CUklHSFR9J3tpZHh9J3tTdHlsZS5SRVNFVF9BTEx9LiIpCiAgICBlbGlmIGZvdW5kID09IGlkeDogIyBIYXMgYmVlbiBmb3VuZAogICAgICAgIHByaW50KGYie0ZvcmUuR1JFRU59Rm91bmQge1N0eWxlLkJSSUdIVH0ne2ZpbmRpbmd9J3tTdHlsZS5OT1JNQUx9IGluIHtTdHlsZS5CUklHSFR9J3tnZXRfYXJyYXlfYXNfc3RyKGFycmF5PWFycmF5KX0ne1N0eWxlLk5PUk1BTH0gYXQgaW5kZXgge1N0eWxlLkJSSUdIVH0ne2ZvdW5kfSd7U3R5bGUuUkVTRVRfQUxMfS4iKQogICAgZWxzZTogIyBIYXMgbm90IGJlZW4gZm91bmQgYW5kIGRvZXMgZXhpc3QKICAgICAgICBwcmludChmIntGb3JlLlJFRH1EaWQgbm90IGZpbmQge1N0eWxlLkJSSUdIVH0ne2ZpbmRpbmd9J3tTdHlsZS5OT1JNQUx9IGluIHtTdHlsZS5CUklHSFR9J3tnZXRfYXJyYXlfYXNfc3RyKGFycmF5PWFycmF5KX0ne1N0eWxlLk5PUk1BTH0gYXQgaW5kZXgge1N0eWxlLkJSSUdIVH0ne2lkeH0ne1N0eWxlLlJFU0VUX0FMTH0uIikKCmRlZiBhc3NlcnRpb25fdGVzdChtZXRob2Q6IENhbGxhYmxlW1tsaXN0W2FueV0sIGFueV0sIGludF0pIC0+IE5vbmU6CiAgICAiIiIKICAgICAgICAjIEFzc2VydGlvbiBUZXN0CiAgICAgICAgVXNlZCB0byBlbnN1cmUgdGhhdCB0aGUgc2VhcmNoaW5nIG1ldGhvZCBpcyBmaW5kaW5nIHRoaW5ncyBwcm9wZXJseSwgb3IganVzdCBmaW5kaW5nIHRoZW0gYXQgYWxsLgogICAgICAgICMjIyBQYXJhbWV0ZXJzOgogICAgICAgIGBgYHB5CiAgICAgICAgbWV0aG9kOiBDYWxsYWJsZVtbbGlzdFthbnldLCBhbnldLCBpbnRdICMgU2VhcmNoaW5nIEFsZ29yaXRobSBNZXRob2QuCiAgICAgICAgYGBgCiAgICAiIiIKICAgIAogICAgIyBBbHJlYWR5IHNvcnRlZCBmb3IgYWxnb3JpdGhtcyBsaWtlIEJpbmFyeSBTZWFyY2ggIwogICAgYXJyYXlfYSwgZmluZGluZ19hLCBpZHhfYSA9IFsgMCwgMTMsIDIzLCAyMTUsIDUzMiwgOTMyXSwgOTMyLCA1CiAgICBhcnJheV9iLCBmaW5kaW5nX2IsIGlkeF9iID0gWyAxNCwgMjksIDQ1LCA0NiwgNjgsIDkyLCAxMzIgXSwgMjksIDEKICAgIGFycmF5X2MsIGZpbmRpbmdfYywgaWR4X2MgPSBbIDEyMywgNDU2LCA1NTcsIDU1OSwgNjEyLCA3MjIgXSwgNjY2LCAtMQogICAgYXJyYXlfZCwgZmluZGluZ19kLCBpZHhfZCA9IFsgMTAwLCAxMTAsIDEyMCwgMTMwLCAxNDAsIDE1MCBdLCAxMzAsIDMKICAgIGFycmF5X2UsIGZpbmRpbmdfZSwgaWR4X2UgPSBbIDEsIDIsIDMsIDMsIDUsIDksIDEwLCAxMSwgMjQsIDI5IF0sIDI5LCA5CiAgICAKICAgIHByaW50KGYie1N0eWxlLkRJTX1Bc3NlcnRpb24gVGVzdDp7U3R5bGUuUkVTRVRfQUxMfSIpCiAgICAKICAgIGFzc2VydF9jb21wYXJlKG1ldGhvZD1tZXRob2QsIGFycmF5PWFycmF5X2EsIGZpbmRpbmc9ZmluZGluZ19hLCBpZHg9aWR4X2EpCiAgICBhc3NlcnRfY29tcGFyZShtZXRob2Q9bWV0aG9kLCBhcnJheT1hcnJheV9iLCBmaW5kaW5nPWZpbmRpbmdfYiwgaWR4PWlkeF9iKQogICAgYXNzZXJ0X2NvbXBhcmUobWV0aG9kPW1ldGhvZCwgYXJyYXk9YXJyYXlfYywgZmluZGluZz1maW5kaW5nX2MsIGlkeD1pZHhfYykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgYXNzZXJ0X2NvbXBhcmUobWV0aG9kPW1ldGhvZCwgYXJyYXk9YXJyYXlfZCwgZmluZGluZz1maW5kaW5nX2QsIGlkeD1pZHhfZCkKICAgIGFzc2VydF9jb21wYXJlKG1ldGhvZD1tZXRob2QsIGFycmF5PWFycmF5X2UsIGZpbmRpbmc9ZmluZGluZ19lLCBpZHg9aWR4X2UpCgoKPHxmaW1fZW5kfD4="]
["d40137c0db6f88aeadf413b841db58c9d8c50c07-1","d40137c0db6f88aeadf413b841db58c9d8c50c07","PHxmaW1fcHJlZml4fD4KZnJvbSBzY2lweSBpbXBvcnQgb3B0aW1pemUKaW1wb3J0IHJhbmRvbQo8fGZpbV9ob2xlfD4KICAgICAgICBlbXB0eV92ZWMuYXBwZW5kKDApCiAgICBzaW11bGF0aW9uLmV4ZWN1dGUoZW1wdHlfdmVjLCBkZXNfZm9yd2FyZD1kZXNfZm9yd2FyZCwgZGVzX3JpZ2h0PWRlc19yaWdodCwgc3RlcHM9c3RlcHMpICMganVzdCB0byBmaW5kIHRoZSBudW1iZXJfb2Zfbm9pc2UKCiAgICBub2lzZV92ZWN0b3IgPSBbXQogICAgYm91bmRfdmVjdG9yID0gW10KICAgIGZvciBrIGluIHJhbmdlKDAsIHNpbXVsYXRpb24ubnVtYmVyX29mX25vaXNlICsgMSk6CiAgICAgICAgbm9pc2VfdmVjdG9yLmFwcGVuZCgwKQogICAgICAgIGJvdW5kX3ZlY3Rvci5hcHBlbmQoKC0xLCAxKSkKICAgIHJlc3VsdCA9IG9wdGltaXplLm1pbmltaXplKHNpbXVsYXRpb24uZXhlY3V0ZSwgbm9pc2VfdmVjdG9yLCBtZXRob2Q9IlBvd2VsbCIsIGFyZ3M9KGRlc19mb3J3YXJkLCBkZXNfcmlnaHQsIHN0ZXBzKSwgYm91bmRzPWJvdW5kX3ZlY3RvcikKICAgIHByaW50KHJlc3VsdCkKCgpkZWYgcmFuZG9tX3NpbShzaW11bGF0aW9uLCBkZXNfZm9yd2FyZCwgZGVzX3JpZ2h0LCBzdGVwcyk6CiAgICBlbXB0eV92ZWMgPSBbXQogICAgZm9yIGsgaW4gcmFuZ2UoMCwgMTAwMCk6CiAgICAgICAgZW1wdHlfdmVjLmFwcGVuZCgwKQogICAgc2ltdWxhdGlvbi5leGVjdXRlKGVtcHR5X3ZlYywgZGVzX2ZvcndhcmQ9ZGVzX2ZvcndhcmQsIGRlc19yaWdodD1kZXNfcmlnaHQsIHN0ZXBzPXN0ZXBzKSAjIGp1c3QgdG8gZmluZCB0aGUgbnVtYmVyX29mX25vaXNlCgogICAgYmVzdF9yZXN1bHQgPSAxMDAwCiAgICBiZXN0X3ZlYyA9IFtdCiAgICBmb3IgaiBpbiByYW5nZSgwLDIxMik6CiAgICAgICAgbm9pc2VfdmVjdG9yID0gW10KICAgICAgICBib3VuZF92ZWN0b3IgPSBbXQogICAgICAgIGZvciBrIGluIHJhbmdlKDAsIHNpbXVsYXRpb24ubnVtYmVyX29mX25vaXNlICsgMSk6CiAgICAgICAgICAgIG5vaXNlX3ZlY3Rvci5hcHBlbmQocmFuZG9tLnVuaWZvcm0oLTEsIDEpKQogICAgICAgICAgICBib3VuZF92ZWN0b3IuYXBwZW5kKCgtMSwgMSkpCiAgICAgICAgcmVzdWx0ID0gc2ltdWxhdGlvbi5leGVjdXRlKG5vaXNlX3ZlY3RvciwgZGVzX2ZvcndhcmQ9ZGVzX2ZvcndhcmQsIGRlc19yaWdodD1kZXNfcmlnaHQsIHN0ZXBzPXN0ZXBzKQogICAgICAgIGlmIHJlc3VsdCA8IGJlc3RfcmVzdWx0IDoKICAgICAgICAgICAgYmVzdF9yZXN1bHQgPSByZXN1bHQKICAgICAgICAgICAgYmVzdF92ZWMgPSBub2lzZV92ZWN0b3IKICAgIHByaW50KGJlc3RfcmVzdWx0LCBiZXN0X3ZlYykKPHxmaW1fc3VmZml4fD4KCmRlZiBwb3dlbGwoc2ltdWxhdGlvbiwgZGVzX2ZvcndhcmQsIGRlc19yaWdodCwgc3RlcHMpOgogICAgZW1wdHlfdmVjID0gW10KICAgIGZvciBrIGluIHJhbmdlKDAsIDEwMDApOgo8fGZpbV9lbmR8Pg=="]
["d40137c0db6f88aeadf413b841db58c9d8c50c07-2","d40137c0db6f88aeadf413b841db58c9d8c50c07","PHxmaW1fcHJlZml4fD4KZnJvbSBzY2lweSBpbXBvcnQgb3B0aW1pemUKaW1wb3J0IHJhbmRvbQoKZGVmIHBvd2VsbChzaW11bGF0aW9uLCBkZXNfZm9yd2FyZCwgZGVzX3JpZ2h0LCBzdGVwcyk6CiAgICBlbXB0eV92ZWMgPSBbXQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBmb3IgayBpbiByYW5nZSgwLCAxMDAwKToKICAgICAgICBlbXB0eV92ZWMuYXBwZW5kKDApCiAgICBzaW11bGF0aW9uLmV4ZWN1dGUoZW1wdHlfdmVjLCBkZXNfZm9yd2FyZD1kZXNfZm9yd2FyZCwgZGVzX3JpZ2h0PWRlc19yaWdodCwgc3RlcHM9c3RlcHMpICMganVzdCB0byBmaW5kIHRoZSBudW1iZXJfb2Zfbm9pc2UKCjx8ZmltX2VuZHw+"]
["4178ef70f8c34ab740793b5f59eedb9bcb77214d-1","4178ef70f8c34ab740793b5f59eedb9bcb77214d","PHxmaW1fcHJlZml4fD4KIiIiClJ1biBhY3RpdmUgbGVhcm5pbmcgYWJsYXRpb24gc3R1ZGllcyBvbiBJTUJEIG1vdmllIHNlbnRpbWVudCBjbGFzc2lmaWNhdGlvbi4KCnN0ZXAxOiB0cmFpbmluZyAodGhlbiBldmFsdWF0ZSBgY29tYmluZWQvdGVzdC50c3ZgKQpzdGVwMjogYWN0aXZlIGRhdGEgY29sbGVjdGlvbiAoMiBwb2xpY2llcykKICAgIGNob29zZSBmcm9tIGBjb250cmFzdGl2ZS9jb21iaW5lZC9wYWlyZWQvdHJhaW5fcGFpcmVkLnRzdmAKc3RlcDM6IHRyYWluaW5nICh1c2luZyBib3RoIHRoZSBuZWdhdGl2ZXMgJiBwb3NpdGl2ZXMpCiAgICBwb29sIG9yaWcvdHJhaW4udHN2IGFuZCBwYWlyZWQgKG5lZWQgdG8gcmVtb3ZlIGR1cGxpY2F0ZSkKICAgICh0aGVuIGV2YWx1YXRlIGFnYWluIGBjb21iaW5lZC90ZXN0LnRzdmApCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpAZm9ybWF0dGVyOm9mZgpweXRob24gLW0gY29udHJhc3RpdmUubWFpbiAtLW1vZGVsX25hbWVfb3JfcGF0aCAiYmVydC1iYXNlLXVuY2FzZWQiIC0tdGFza19uYW1lIHNzdC0yIC0tZGF0YV9kaXIgIi9ob21lL2x4dWVjaGVuX3N0YW5mb3JkX2VkdS9zb2Z0d2FyZS9zd2lzc2tuaWZlL2V4cGVyaW1lbnRzL2NvbnRyYXN0aXZlL2RhdGEvb3JpZyIgLS1vdXRwdXRfZGlyICIvbmxwL3Njci9seHVlY2hlbi9jb250cmFzdGl2ZS90ZXN0IgpAZm9ybWF0dGVyOm9uCjx8ZmltX2VuZHw+"]
["9745112a330c8b78c1689eabf70d1ced0f063ea4-1","9745112a330c8b78c1689eabf70d1ced0f063ea4","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCwgRGljdCwgQW55CgoKY2xhc3MgTm9kZToKCiAgICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICBrZXk6IHN0ciwKICAgICAgICAgICAgICAgICB2YWx1ZTogc3RyLAogICAgICAgICAgICAgICAgIHN0YXJ0OiBpbnQsCiAgICAgICAgICAgICAgICAgZW5kOiBpbnQgPSBOb25lLAogICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBMaXN0W05vZGVdID0gTm9uZSwKICAgICAgICAgICAgICAgICBwYXJlbnQ6IE5vZGUgPSBOb25lLAogICAgICAgICAgICAgICAgIGZpbGVuYW1lOiBzdHIgPSBOb25lKToKCiAgICAgICAgaWYgY2hpbGRyZW4gaXMgTm9uZToKICAgICAgICAgICAgY2hpbGRyZW4gPSBbXQoKPHxmaW1faG9sZXw+CiAgICAgICAgc2VsZi5zdGFydCA9IHN0YXJ0CiAgICAgICAgc2VsZi5lbmQgPSBlbmQgaWYgZW5kIGlzIG5vdCBOb25lIGVsc2Ugc3RhcnQKICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUgaWYgZmlsZW5hbWUgaXMgbm90IE5vbmUgZWxzZSAnJwoKICAgICAgICBpZiBsZW4oc2VsZi5jaGlsZHJlbikgPT0gMDoKICAgICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46CiAgICAgICAgICAgICAgICBjaGlsZC5wYXJlbnQgPSBzZWxmCgogICAgQHByb3BlcnR5CiAgICBkZWYgZGVwdGgoc2VsZik6CiAgICAgICAgaWYgbm90IHNlbGYucGFyZW50OgogICAgICAgICAgICByZXR1cm4gMAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcmVudC5kZXB0aCArIDEKCiAgICBkZWYgX19zdHJfXyhzZWxmKSAtPiBzdHI6CiAgICAgICAgcmVzdWx0OiBMaXN0W3N0cl0gPSBbZidOb2RlOiAoe3NlbGYua2V5fSwge3NlbGYudmFsdWV9KSB7InsifSddCiAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46CiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RyKGNoaWxkKSkKICAgICAgICByZXN1bHQuYXBwZW5kKCd9JykKICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHJlc3VsdCkKCgpjbGFzcyBSb290KE5vZGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAga2V5OiBzdHIsCiAgICAgICAgICAgICAgICAgdmFsdWU6IHN0ciwKICAgICAgICAgICAgICAgICBzdGFydDogaW50LAogICAgICAgICAgICAgICAgIGVuZDogaW50ID0gTm9uZSwKICAgICAgICAgICAgICAgICBjaGlsZHJlbjogTGlzdFtOb2RlXSA9IE5vbmUpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oa2V5LCB2YWx1ZSwgc3RhcnQsIGVuZCwgY2hpbGRyZW4pCgogICAgQHByb3BlcnR5CiAgICBkZWYgZGVwdGgoc2VsZik6CiAgICAgICAgcmV0dXJuIDAKCiAgICBkZWYgX19zdHJfXyhzZWxmKSAtPiBzdHI6CiAgICAgICAgcmVzdWx0ID0gW2YnUm9vdDogKHtzZWxmLmtleX0sIHtzZWxmLnZhbHVlfSkgeyJ7In0nXQogICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuOgogICAgICAgICAgICByZXN1bHQuYXBwZW5kKGYne2NoaWxkfScpCiAgICAgICAgcmVzdWx0LmFwcGVuZCgnfScpCiAgICAgICAgcmV0dXJuICdcbicuam9pbihyZXN1bHQpCgoKY2xhc3MgTGVhZihOb2RlKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICBrZXk6IHN0ciwKICAgICAgICAgICAgICAgICB2YWx1ZTogc3RyLAogICAgICAgICAgICAgICAgIHN0YXJ0OiBpbnQpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oa2V5LCB2YWx1ZSwgc3RhcnQpCgogICAgZGVmIF9fc3RyX18oc2VsZikgLT4gc3RyOgogICAgICAgIHJldHVybiBmJ0xlYWY6ICh7c2VsZi5rZXl9LCB7c2VsZi52YWx1ZX0pJwo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYua2V5ID0ga2V5CiAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCiAgICAgICAgc2VsZi5jaGlsZHJlbiA9IGNoaWxkcmVuCiAgICAgICAgc2VsZi5wYXJlbnQgPSBwYXJlbnQKPHxmaW1fZW5kfD4="]
["9745112a330c8b78c1689eabf70d1ced0f063ea4-2","9745112a330c8b78c1689eabf70d1ced0f063ea4","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCwgRGljdCwgQW55CgoKY2xhc3MgTm9kZToKCiAgICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICBrZXk6IHN0ciwKICAgICAgICAgICAgICAgICB2YWx1ZTogc3RyLAogICAgICAgICAgICAgICAgIHN0YXJ0OiBpbnQsCiAgICAgICAgICAgICAgICAgZW5kOiBpbnQgPSBOb25lLAogICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBMaXN0W05vZGVdID0gTm9uZSwKICAgICAgICAgICAgICAgICBwYXJlbnQ6IE5vZGUgPSBOb25lLAogICAgICAgICAgICAgICAgIGZpbGVuYW1lOiBzdHIgPSBOb25lKToKCiAgICAgICAgaWYgY2hpbGRyZW4gaXMgTm9uZToKICAgICAgICAgICAgY2hpbGRyZW4gPSBbXQoKICAgICAgICBzZWxmLmtleSA9IGtleQogICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQogICAgICAgIHNlbGYuY2hpbGRyZW4gPSBjaGlsZHJlbgogICAgICAgIHNlbGYucGFyZW50ID0gcGFyZW50CiAgICAgICAgc2VsZi5zdGFydCA9IHN0YXJ0CiAgICAgICAgc2VsZi5lbmQgPSBlbmQgaWYgZW5kIGlzIG5vdCBOb25lIGVsc2Ugc3RhcnQKICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUgaWYgZmlsZW5hbWUgaXMgbm90IE5vbmUgZWxzZSAnJwoKICAgICAgICBpZiBsZW4oc2VsZi5jaGlsZHJlbikgPT0gMDoKICAgICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46CiAgICAgICAgICAgICAgICBjaGlsZC5wYXJlbnQgPSBzZWxmCgogICAgQHByb3BlcnR5CiAgICBkZWYgZGVwdGgoc2VsZik6CiAgICAgICAgaWYgbm90IHNlbGYucGFyZW50OgogICAgICAgICAgICByZXR1cm4gMAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcmVudC5kZXB0aCArIDEKCiAgICBkZWYgX19zdHJfXyhzZWxmKSAtPiBzdHI6CiAgICAgICAgcmVzdWx0OiBMaXN0W3N0cl0gPSBbZidOb2RlOiAoe3NlbGYua2V5fSwge3NlbGYudmFsdWV9KSB7InsifSddCiAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46CiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RyKGNoaWxkKSkKICAgICAgICByZXN1bHQuYXBwZW5kKCd9JykKICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHJlc3VsdCkKCgpjbGFzcyBSb290KE5vZGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAga2V5OiBzdHIsCiAgICAgICAgICAgICAgICAgdmFsdWU6IHN0ciwKICAgICAgICAgICAgICAgICBzdGFydDogaW50LAogICAgICAgICAgICAgICAgIGVuZDogaW50ID0gTm9uZSwKICAgICAgICAgICAgICAgICBjaGlsZHJlbjogTGlzdFtOb2RlXSA9IE5vbmUpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oa2V5LCB2YWx1ZSwgc3RhcnQsIGVuZCwgY2hpbGRyZW4pCgogICAgQHByb3BlcnR5CiAgICBkZWYgZGVwdGgoc2VsZik6CiAgICAgICAgcmV0dXJuIDAKCiAgICBkZWYgX19zdHJfXyhzZWxmKSAtPiBzdHI6CiAgICAgICAgcmVzdWx0ID0gW2YnUm9vdDogKHtzZWxmLmtleX0sIHtzZWxmLnZhbHVlfSkgeyJ7In0nXQogICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuOgogICAgICAgICAgICByZXN1bHQuYXBwZW5kKGYne2NoaWxkfScpCiAgICAgICAgcmVzdWx0LmFwcGVuZCgnfScpCiAgICAgICAgcmV0dXJuICdcbicuam9pbihyZXN1bHQpCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpjbGFzcyBMZWFmKE5vZGUpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICAgIGtleTogc3RyLAo8fGZpbV9lbmR8Pg=="]
["9745112a330c8b78c1689eabf70d1ced0f063ea4-3","9745112a330c8b78c1689eabf70d1ced0f063ea4","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCwgRGljdCwgQW55CgoKY2xhc3MgTm9kZToKCiAgICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICBrZXk6IHN0ciwKICAgICAgICAgICAgICAgICB2YWx1ZTogc3RyLAogICAgICAgICAgICAgICAgIHN0YXJ0OiBpbnQsCiAgICAgICAgICAgICAgICAgZW5kOiBpbnQgPSBOb25lLAogICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBMaXN0W05vZGVdID0gTm9uZSwKICAgICAgICAgICAgICAgICBwYXJlbnQ6IE5vZGUgPSBOb25lLAogICAgICAgICAgICAgICAgIGZpbGVuYW1lOiBzdHIgPSBOb25lKToKCiAgICAgICAgaWYgY2hpbGRyZW4gaXMgTm9uZToKICAgICAgICAgICAgY2hpbGRyZW4gPSBbXQoKICAgICAgICBzZWxmLmtleSA9IGtleQogICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQogICAgICAgIHNlbGYuY2hpbGRyZW4gPSBjaGlsZHJlbgogICAgICAgIHNlbGYucGFyZW50ID0gcGFyZW50CiAgICAgICAgc2VsZi5zdGFydCA9IHN0YXJ0CiAgICAgICAgc2VsZi5lbmQgPSBlbmQgaWYgZW5kIGlzIG5vdCBOb25lIGVsc2Ugc3RhcnQKICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUgaWYgZmlsZW5hbWUgaXMgbm90IE5vbmUgZWxzZSAnJwoKICAgICAgICBpZiBsZW4oc2VsZi5jaGlsZHJlbikgPT0gMDoKICAgICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46CiAgICAgICAgICAgICAgICBjaGlsZC5wYXJlbnQgPSBzZWxmCgogICAgQHByb3BlcnR5CiAgICBkZWYgZGVwdGgoc2VsZik6CiAgICAgICAgaWYgbm90IHNlbGYucGFyZW50OgogICAgICAgICAgICByZXR1cm4gMAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcmVudC5kZXB0aCArIDEKCiAgICBkZWYgX19zdHJfXyhzZWxmKSAtPiBzdHI6CiAgICAgICAgcmVzdWx0OiBMaXN0W3N0cl0gPSBbZidOb2RlOiAoe3NlbGYua2V5fSwge3NlbGYudmFsdWV9KSB7InsifSddCiAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46CiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RyKGNoaWxkKSkKICAgICAgICByZXN1bHQuYXBwZW5kKCd9JykKICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHJlc3VsdCkKCgpjbGFzcyBSb290KE5vZGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAga2V5OiBzdHIsCiAgICAgICAgICAgICAgICAgdmFsdWU6IHN0ciwKICAgICAgICAgICAgICAgICBzdGFydDogaW50LAogICAgICAgICAgICAgICAgIGVuZDogaW50ID0gTm9uZSwKICAgICAgICAgICAgICAgICBjaGlsZHJlbjogTGlzdFtOb2RlXSA9IE5vbmUpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oa2V5LCB2YWx1ZSwgc3RhcnQsIGVuZCwgY2hpbGRyZW4pCgogICAgQHByb3BlcnR5CiAgICBkZWYgZGVwdGgoc2VsZik6CiAgICAgICAgcmV0dXJuIDAKCiAgICBkZWYgX19zdHJfXyhzZWxmKSAtPiBzdHI6CiAgICAgICAgcmVzdWx0ID0gW2YnUm9vdDogKHtzZWxmLmtleX0sIHtzZWxmLnZhbHVlfSkgeyJ7In0nXQogICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuOgogICAgICAgICAgICByZXN1bHQuYXBwZW5kKGYne2NoaWxkfScpCiAgICAgICAgcmVzdWx0LmFwcGVuZCgnfScpCiAgICAgICAgcmV0dXJuICdcbicuam9pbihyZXN1bHQpCgoKY2xhc3MgTGVhZihOb2RlKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICBrZXk6IHN0ciwKICAgICAgICAgICAgICAgICB2YWx1ZTogc3RyLAogICAgICAgICAgICAgICAgIHN0YXJ0OiBpbnQpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oa2V5LCB2YWx1ZSwgc3RhcnQpCgogICAgZGVmIF9fc3RyX18oc2VsZikgLT4gc3RyOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcmV0dXJuIGYnTGVhZjogKHtzZWxmLmtleX0sIHtzZWxmLnZhbHVlfSknCjx8ZmltX2VuZHw+"]
["9745112a330c8b78c1689eabf70d1ced0f063ea4-4","9745112a330c8b78c1689eabf70d1ced0f063ea4","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCwgRGljdCwgQW55CgoKY2xhc3MgTm9kZToKCiAgICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICBrZXk6IHN0ciwKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICAgcGFyZW50OiBOb2RlID0gTm9uZSwKICAgICAgICAgICAgICAgICBmaWxlbmFtZTogc3RyID0gTm9uZSk6CgogICAgICAgIGlmIGNoaWxkcmVuIGlzIE5vbmU6CiAgICAgICAgICAgIGNoaWxkcmVuID0gW10KCiAgICAgICAgc2VsZi5rZXkgPSBrZXkKICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKICAgICAgICBzZWxmLmNoaWxkcmVuID0gY2hpbGRyZW4KICAgICAgICBzZWxmLnBhcmVudCA9IHBhcmVudAogICAgICAgIHNlbGYuc3RhcnQgPSBzdGFydAogICAgICAgIHNlbGYuZW5kID0gZW5kIGlmIGVuZCBpcyBub3QgTm9uZSBlbHNlIHN0YXJ0CiAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lIGVsc2UgJycKCiAgICAgICAgaWYgbGVuKHNlbGYuY2hpbGRyZW4pID09IDA6CiAgICAgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuOgogICAgICAgICAgICAgICAgY2hpbGQucGFyZW50ID0gc2VsZgoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGRlcHRoKHNlbGYpOgogICAgICAgIGlmIG5vdCBzZWxmLnBhcmVudDoKICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJlbnQuZGVwdGggKyAxCgogICAgZGVmIF9fc3RyX18oc2VsZikgLT4gc3RyOgogICAgICAgIHJlc3VsdDogTGlzdFtzdHJdID0gW2YnTm9kZTogKHtzZWxmLmtleX0sIHtzZWxmLnZhbHVlfSkgeyJ7In0nXQogICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuOgogICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0cihjaGlsZCkpCiAgICAgICAgcmVzdWx0LmFwcGVuZCgnfScpCiAgICAgICAgcmV0dXJuICdcbicuam9pbihyZXN1bHQpCgoKY2xhc3MgUm9vdChOb2RlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICAgIGtleTogc3RyLAogICAgICAgICAgICAgICAgIHZhbHVlOiBzdHIsCiAgICAgICAgICAgICAgICAgc3RhcnQ6IGludCwKICAgICAgICAgICAgICAgICBlbmQ6IGludCA9IE5vbmUsCiAgICAgICAgICAgICAgICAgY2hpbGRyZW46IExpc3RbTm9kZV0gPSBOb25lKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKGtleSwgdmFsdWUsIHN0YXJ0LCBlbmQsIGNoaWxkcmVuKQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGRlcHRoKHNlbGYpOgogICAgICAgIHJldHVybiAwCgogICAgZGVmIF9fc3RyX18oc2VsZikgLT4gc3RyOgogICAgICAgIHJlc3VsdCA9IFtmJ1Jvb3Q6ICh7c2VsZi5rZXl9LCB7c2VsZi52YWx1ZX0pIHsieyJ9J10KICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbjoKICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChmJ3tjaGlsZH0nKQogICAgICAgIHJlc3VsdC5hcHBlbmQoJ30nKQogICAgICAgIHJldHVybiAnXG4nLmpvaW4ocmVzdWx0KQoKCmNsYXNzIExlYWYoTm9kZSk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAga2V5OiBzdHIsCiAgICAgICAgICAgICAgICAgdmFsdWU6IHN0ciwKICAgICAgICAgICAgICAgICBzdGFydDogaW50KToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKGtleSwgdmFsdWUsIHN0YXJ0KQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpIC0+IHN0cjoKICAgICAgICByZXR1cm4gZidMZWFmOiAoe3NlbGYua2V5fSwge3NlbGYudmFsdWV9KScKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICB2YWx1ZTogc3RyLAogICAgICAgICAgICAgICAgIHN0YXJ0OiBpbnQsCiAgICAgICAgICAgICAgICAgZW5kOiBpbnQgPSBOb25lLAogICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBMaXN0W05vZGVdID0gTm9uZSwKPHxmaW1fZW5kfD4="]
["2e39c1ccd8678a11956157faae054ec23e862233-1","2e39c1ccd8678a11956157faae054ec23e862233",{"$cut":{"chars":23292,"head":"PHxmaW1fcHJlZml4fD4KCiMgR3JvdXAgTWVtYmVyIAojIFlJUCBLQVIgRkFJICAKIyBUUDA2MDcxMSAKIyBORyBMSSBTSEVORyAgIAojIFRQMDYwNjEyCmltcG9ydCBkYXRldGltZQpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZWRlbHRhCgoKIyBGdW5jdGlvbiB0byBhbGxvdyByZWdpc3RlcmVkIGN1c3RvbWVyIHRvIHJlY292ZXIgdGhlaXIgYWNjb3VudApkZWYgYWNjb3VudFJlY292ZXJ5KCk6CiAgICBwcmludCgiV2VsY29tZSB0byBDYXIgUmVudGFsIE1hbmFnZW1lbnQgU3lzdGVtIChBY2NvdW50IFJlY292ZXJ5KVxuIi5jZW50ZXIoMTAwKSkKICAgICMgdXNlcklucHV0IHBob25lIG51bWJlcgogICAgc2VhcmNoQ29udGFjdCA9IGlucHV0KCJQbGVhc2UgZW50ZXIgcGhvbmUgbnVtYmVyOiIpCiAgICAjIE9wZW4gZmlsZSB0byByZWFkIGRhdGEKICAgIHdpdGggb3BlbigndXNlckRhdGFiYXNlLnR4dCcsICdyJykgYXMgZGF0YToKICAgICAgICAjIFJlYWQgZXZlcnkgbGluZXMgb2YgdGhlIGZpbGUgaW50byBhIGxpc3QKICAgICAgICB0ZW1wID0gZGF0YS5yZWFkbGluZXMoKQogICAgICAgICMgQ2hlY2sgZGF0YSBpbiBmaWxlIGZyb20gMCBpbmRleCB0byBsYXN0IGluZGV4CiAgICAgICAgZGF0YS5zZWVrKDApCiAgICAgICAgIyBMb29wIHRocm91Z2ggbGluZSBvZiBsaXN0CiAgICAgICAgZm9yIGxpbmUgaW4gdGVtcDoKICAgICAgICAgICAgIyBDaGVjayBpZiBzZWFyY2hjb250YWN0IGxlYXZlIGVtcHR5CiAgICAgICAgICAgIGlmIHNlYXJjaENvbnRhY3QgPT0gIiI6CiAgICAgICAgICAgICAgICBwcmludCgicGxlYXNlIGVudGVyIHNvbWV0aGluZyIpCiAgICAgICAgICAgICMgQ2hlY2sgaWYgc2VhcmNoQ29udGFjdCBpbiBsaXN0IAogICAgICAgICAgICBpZiBzZWFyY2hDb250YWN0IGluIGxpbmU6CiAgICAgICAgICAgICAgICBwcmludCgiLSIqMTA2KQogICAgICAgICAgICAgICAgcHJpbnQoIlRoaXMgaXMgeW91ciBhY2NvdW50IGNyZWRlbnRpYWxzIi5jZW50ZXIoMTAwKSkKICAgICAgICAgICAgICAgIHByaW50KCItIioxMDYpCiAgICAgICAgICAgICAgICBwcmludChsaW5lKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcHJpbnQoIlBsZWFzZSBlbnRlciBjb3JyZWN0IHBob25lIG51bWJlciIpCgoKIyBGdW5jdGlvbiB0byBkZWxldGUgYWNjb3VudCBvZiByZWdpc3RlcmVkIGN1c3RvbWVyCmRlZiBkaXNhYmxlVXNlckFjY291bnQoKToKICAgICMgdXNlcklucHV0IHBhc3N3b3JkCiAgICBwYXNzd29yZCA9IGlucHV0KCJQbGVhc2UgZW50ZXIgcGFzc3dvcmQgIDogIikKICAgIGRhdGFic2UgPSAndXNlckRhdGFiYXNlLnR4dCcKICAgICMgT3BlbiBmaWxlIHRvIHJlYWQgZGF0YQogICAgd2l0aCBvcGVuKGRhdGFic2UsICdyKycpIGFzIGRhdGE6CiAgICAgICAgIyBSZWFkIGV2ZXJ5IGxpbmVzIG9mIHRoZSBmaWxlIGludG8gYSBsaXN0CiAgICAgICAgdGVtcCA9IGRhdGEucmVhZGxpbmVzKCkKICAgICAgICAjIHNlYXJjaCBkYXRhIGluIGZpbGUgZnJvbSAwIGluZGV4IHRvIGxhc3QgaW5kZXgKICAgICAgICBkYXRhLnNlZWsoMCkKICAgICAgICAjIExvb3AgdGhyb3VnaCBsaW5lIG9mIGxpc3QKICAgICAgICBmb3IgbGluZSBpbiB0ZW1wOgogICAgICAgICAgICAjIENoZWNrIGlmIG5vdCBwYXNzd29yZCBpbiBsaXN0CiAgICAgICAgICAgIGlmIG5vdCBwYXNzd29yZCBpbiBsaW5lOgogICAgICAgICAgICAgICAgIyBXcml0ZSBsaW5lIGludG8gZmlsZXMKICAgICAgICAgICAgICAgIGRhdGEud3JpdGUobGluZSkKICAgICAgICAKICAgICAgICBkYXRhLnRydW5jYXRlKCkKICAgIHByaW50KCJBY2NvdW50IGhhcyBiZWVuIGRpc2JhbGUiKSAKCgojIEZ1bmN0aW9uIGZvciB1bnJlZ2lzdGVyZWQgdXNlciB0byByZWdpc3RlciAKZGVmIHVzZXJSZWdpc3RlcigpOgogICAgICAgIHByaW50KCJTaWduIHVwIikKICAgICAgICAjdXNlcklucHV0IHVzZXJuYW1lLCBwYXNzd29yZCwgZW1haWxhZGRyZXNzLCBhbmQgY29udGFjdE51bWJlcgogICAgICAgIHVzZXJuYW1lID0gc3RyKGlucHV0KCJQbGVhc2UgZW50ZXIgVXNlcm5hbWU6ICIpKQogICAgICAgIHBhc3N3b3JkID0gaW5wdXQoIlBsZWFzZSBlbnRlciBQYXNzd29yZDogIikKICAgICAgICBlbWFpbEFkZHJlc3MgPSBpbnB1dCgiUGxlYXNlIGVudGVyIEVtYWlsOiAiKQogICAgICAgIGNvbnRhY3ROdW1iZXIgPSBpbnB1dCgiUGxlYXNlIGVudGVyIGNvbnRhY3Q6ICIpCgogICAgICAgICNPcGVuIGZpbGUgdG8gYXBwZW5kIGRhdGEgb2YgdXNlcklucHV0CiAgICAgICAgb3BlbigndXNlckRhdGFiYXNlLnR4dCcsICdhJykuY2xvc2UoKQoKICAgICAgICAjT3BlbiBmaWxlIHRvIHJlYWQgZGF0YQogICAgICAgIHdpdGggb3BlbigidXNlckRhdGFiYXNlLnR4dCIsInIiKSBhcyB1c2VyQWNjb3VudERhdGE6CiAgICAgICAgICAgICNSZWFkIGV2ZXJ5IGxpbmVzIG9mIHRoZSBmaWxlIGludG8gYSBsaXN0CiAgICAgICAgICAgIGxpbmVzID0gdXNlckFjY291bnREYXRhLnJlYWRsaW5lcygpCiAgICAgICAgICAgICNMb29wIHRocm91Z2ggbGluZSBvZiBsaXN0CiAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgogICAgICAgICAgICAgICAgI1N0cmlwIHNwYWNlcyBhY3Jvc3MgbGluZSBhbmQgc3BsaXQgc3BhY2UgYmV0d2VlbiBsaW5lCiAgICAgICAgICAgICAgICByZWMgPSBsaW5lLnN0cmlwKCJcbiIpLnNwbGl0KCIgIikKICAgICAgICAgICAgICAgICNDaGVjayBpZiB1c2VybmFtZSBvciBwYXNzd29yZCBlcXVhbCB0byB0aGUgcmVjb3JkIG9mIHRoZSBmaWxlCiAgICAgICAgICAgICAgICBpZiAiVXNlcm5hbWU6Iit1c2VybmFtZSA9PSByZWNbMF0gb3IgIlBhc3N3b3JkOiIrcGFzc3dvcmQgPT0gcmVjWzFdOgogICAgICAgICAgICAgICAgICAgIHByaW50KCJhY2NvdW50IGV4aXN0ZWQiKQogICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWluKCkKICAgICAgICAgICAgICAgICNDaGVjayBpZiB1c2VybmFtZSBvciBwYXNzd29yZCBhcmUgbGVhdmluZyBlbXB0eQogICAgICAgICAgICAgICAgZWxpZiB1c2VybmFtZSAgPT0gIiIg"}}]
["2e39c1ccd8678a11956157faae054ec23e862233-2","2e39c1ccd8678a11956157faae054ec23e862233",{"$cut":{"chars":45888,"head":"PHxmaW1fcHJlZml4fD4KCiMgR3JvdXAgTWVtYmVyIAojIFlJUCBLQVIgRkFJICAKIyBUUDA2MDcxMSAKIyBORyBMSSBTSEVORyAgIAojIFRQMDYwNjEyCmltcG9ydCBkYXRldGltZQpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZWRlbHRhCgoKIyBGdW5jdGlvbiB0byBhbGxvdyByZWdpc3RlcmVkIGN1c3RvbWVyIHRvIHJlY292ZXIgdGhlaXIgYWNjb3VudApkZWYgYWNjb3VudFJlY292ZXJ5KCk6CiAgICBwcmludCgiV2VsY29tZSB0byBDYXIgUmVudGFsIE1hbmFnZW1lbnQgU3lzdGVtIChBY2NvdW50IFJlY292ZXJ5KVxuIi5jZW50ZXIoMTAwKSkKICAgICMgdXNlcklucHV0IHBob25lIG51bWJlcgogICAgc2VhcmNoQ29udGFjdCA9IGlucHV0KCJQbGVhc2UgZW50ZXIgcGhvbmUgbnVtYmVyOiIpCiAgICAjIE9wZW4gZmlsZSB0byByZWFkIGRhdGEKICAgIHdpdGggb3BlbigndXNlckRhdGFiYXNlLnR4dCcsICdyJykgYXMgZGF0YToKICAgICAgICAjIFJlYWQgZXZlcnkgbGluZXMgb2YgdGhlIGZpbGUgaW50byBhIGxpc3QKICAgICAgICB0ZW1wID0gZGF0YS5yZWFkbGluZXMoKQogICAgICAgICMgQ2hlY2sgZGF0YSBpbiBmaWxlIGZyb20gMCBpbmRleCB0byBsYXN0IGluZGV4CiAgICAgICAgZGF0YS5zZWVrKDApCiAgICAgICAgIyBMb29wIHRocm91Z2ggbGluZSBvZiBsaXN0CiAgICAgICAgZm9yIGxpbmUgaW4gdGVtcDoKICAgICAgICAgICAgIyBDaGVjayBpZiBzZWFyY2hjb250YWN0IGxlYXZlIGVtcHR5CiAgICAgICAgICAgIGlmIHNlYXJjaENvbnRhY3QgPT0gIiI6CiAgICAgICAgICAgICAgICBwcmludCgicGxlYXNlIGVudGVyIHNvbWV0aGluZyIpCiAgICAgICAgICAgICMgQ2hlY2sgaWYgc2VhcmNoQ29udGFjdCBpbiBsaXN0IAogICAgICAgICAgICBpZiBzZWFyY2hDb250YWN0IGluIGxpbmU6CiAgICAgICAgICAgICAgICBwcmludCgiLSIqMTA2KQogICAgICAgICAgICAgICAgcHJpbnQoIlRoaXMgaXMgeW91ciBhY2NvdW50IGNyZWRlbnRpYWxzIi5jZW50ZXIoMTAwKSkKICAgICAgICAgICAgICAgIHByaW50KCItIioxMDYpCiAgICAgICAgICAgICAgICBwcmludChsaW5lKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcHJpbnQoIlBsZWFzZSBlbnRlciBjb3JyZWN0IHBob25lIG51bWJlciIpCgoKIyBGdW5jdGlvbiB0byBkZWxldGUgYWNjb3VudCBvZiByZWdpc3RlcmVkIGN1c3RvbWVyCmRlZiBkaXNhYmxlVXNlckFjY291bnQoKToKICAgICMgdXNlcklucHV0IHBhc3N3b3JkCiAgICBwYXNzd29yZCA9IGlucHV0KCJQbGVhc2UgZW50ZXIgcGFzc3dvcmQgIDogIikKICAgIGRhdGFic2UgPSAndXNlckRhdGFiYXNlLnR4dCcKICAgICMgT3BlbiBmaWxlIHRvIHJlYWQgZGF0YQogICAgd2l0aCBvcGVuKGRhdGFic2UsICdyKycpIGFzIGRhdGE6CiAgICAgICAgIyBSZWFkIGV2ZXJ5IGxpbmVzIG9mIHRoZSBmaWxlIGludG8gYSBsaXN0CiAgICAgICAgdGVtcCA9IGRhdGEucmVhZGxpbmVzKCkKICAgICAgICAjIHNlYXJjaCBkYXRhIGluIGZpbGUgZnJvbSAwIGluZGV4IHRvIGxhc3QgaW5kZXgKICAgICAgICBkYXRhLnNlZWsoMCkKICAgICAgICAjIExvb3AgdGhyb3VnaCBsaW5lIG9mIGxpc3QKICAgICAgICBmb3IgbGluZSBpbiB0ZW1wOgogICAgICAgICAgICAjIENoZWNrIGlmIG5vdCBwYXNzd29yZCBpbiBsaXN0CiAgICAgICAgICAgIGlmIG5vdCBwYXNzd29yZCBpbiBsaW5lOgogICAgICAgICAgICAgICAgIyBXcml0ZSBsaW5lIGludG8gZmlsZXMKICAgICAgICAgICAgICAgIGRhdGEud3JpdGUobGluZSkKICAgICAgICAKICAgICAgICBkYXRhLnRydW5jYXRlKCkKICAgIHByaW50KCJBY2NvdW50IGhhcyBiZWVuIGRpc2JhbGUiKSAKCgojIEZ1bmN0aW9uIGZvciB1bnJlZ2lzdGVyZWQgdXNlciB0byByZWdpc3RlciAKZGVmIHVzZXJSZWdpc3RlcigpOgogICAgICAgIHByaW50KCJTaWduIHVwIikKICAgICAgICAjdXNlcklucHV0IHVzZXJuYW1lLCBwYXNzd29yZCwgZW1haWxhZGRyZXNzLCBhbmQgY29udGFjdE51bWJlcgogICAgICAgIHVzZXJuYW1lID0gc3RyKGlucHV0KCJQbGVhc2UgZW50ZXIgVXNlcm5hbWU6ICIpKQogICAgICAgIHBhc3N3b3JkID0gaW5wdXQoIlBsZWFzZSBlbnRlciBQYXNzd29yZDogIikKICAgICAgICBlbWFpbEFkZHJlc3MgPSBpbnB1dCgiUGxlYXNlIGVudGVyIEVtYWlsOiAiKQogICAgICAgIGNvbnRhY3ROdW1iZXIgPSBpbnB1dCgiUGxlYXNlIGVudGVyIGNvbnRhY3Q6ICIpCgogICAgICAgICNPcGVuIGZpbGUgdG8gYXBwZW5kIGRhdGEgb2YgdXNlcklucHV0CiAgICAgICAgb3BlbigndXNlckRhdGFiYXNlLnR4dCcsICdhJykuY2xvc2UoKQoKICAgICAgICAjT3BlbiBmaWxlIHRvIHJlYWQgZGF0YQogICAgICAgIHdpdGggb3BlbigidXNlckRhdGFiYXNlLnR4dCIsInIiKSBhcyB1c2VyQWNjb3VudERhdGE6CiAgICAgICAgICAgICNSZWFkIGV2ZXJ5IGxpbmVzIG9mIHRoZSBmaWxlIGludG8gYSBsaXN0CiAgICAgICAgICAgIGxpbmVzID0gdXNlckFjY291bnREYXRhLnJlYWRsaW5lcygpCiAgICAgICAgICAgICNMb29wIHRocm91Z2ggbGluZSBvZiBsaXN0CiAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgogICAgICAgICAgICAgICAgI1N0cmlwIHNwYWNlcyBhY3Jvc3MgbGluZSBhbmQgc3BsaXQgc3BhY2UgYmV0d2VlbiBsaW5lCiAgICAgICAgICAgICAgICByZWMgPSBsaW5lLnN0cmlwKCJcbiIpLnNwbGl0KCIgIikKICAgICAgICAgICAgICAgICNDaGVjayBpZiB1c2VybmFtZSBvciBwYXNzd29yZCBlcXVhbCB0byB0aGUgcmVjb3JkIG9mIHRoZSBmaWxlCiAgICAgICAgICAgICAgICBpZiAiVXNlcm5hbWU6Iit1c2VybmFtZSA9PSByZWNbMF0gb3IgIlBhc3N3b3JkOiIrcGFzc3dvcmQgPT0gcmVjWzFdOgogICAgICAgICAgICAgICAgICAgIHByaW50KCJhY2NvdW50IGV4aXN0ZWQiKQogICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWluKCkKICAgICAgICAgICAgICAgICNDaGVjayBpZiB1c2VybmFtZSBvciBwYXNzd29yZCBhcmUgbGVhdmluZyBlbXB0eQogICAgICAgICAgICAgICAgZWxpZiB1c2VybmFtZSAgPT0gIiIg"}}]
["2e458e937ccd9b50583a3c69e978b6f5bdb6fa74-1","2e458e937ccd9b50583a3c69e978b6f5bdb6fa74","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQoKaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIG1yZXN0aW1hdG9yIGltcG9ydCB1dGlsaXR5IGFzIHV0CmxvZyA9IHV0LmxvZwp0cWRtID0gdXQudHFkbQoKIyBzZXQgcHJlY2lzaW9uIG9mIHRlbXBvcmFyeSByZXN1bHRzIGZvciBudW1weSBhbmQgbnVtYmEKIyBmdHlwZSA9IG5wLmxvbmdkb3VibGUgIyB2ZXJ5IHNsb3csIG1heWJlIGZsb2F0NjQgaXMgZW5vdWdoCmZ0eXBlPW5wLmZsb2F0NjQKCnRyeToKICAgIGZyb20gbnVtYmEgaW1wb3J0IGppdCwgcHJhbmdlCiAgICAjIHJhaXNlIEltcG9ydEVycm9yCiAgICBsb2cuaW5mbygnVXNpbmcgbnVtYmEgZm9yIHBhcmFsbGVsaXphYmxlIGZ1bmN0aW9ucycpCgogICAgIyBpbXBsZW1lbnQgbmVlZGVkIHN1bSBmdW5jdGlvbnMgdG8gYmUgY29tcGlsZWQgYnkgbnVtYmE6CiAgICAjIHBhcmFsbGVsaXplIGhpZ2hlciBsZXZlbCBsb29wcywgZHVyaW5nIHNtIGFuZCB0cyBtZXRob2RzCiAgICBAaml0KG5vcHl0aG9uPVRydWUsIHBhcmFsbGVsPUZhbHNlLCBmYXN0bWF0aD1UcnVlLCBjYWNoZT1UcnVlKQogICAgZGVmIHN1bV8xZChhKToKICAgICAgICB0b3RhbCA9IGZ0eXBlKDApCiAgICAgICAgZm9yIGkgaW4gcHJhbmdlKGEuc2hhcGVbMF0pOgogICAgICAgICAgICB0b3RhbCArPSBmdHlwZShhW2ldKQogICAgICAgIHJldHVybiB0b3RhbAoKICAgIEBqaXQobm9weXRob249VHJ1ZSwgcGFyYWxsZWw9RmFsc2UsIGZhc3RtYXRoPVRydWUsIGNhY2hlPVRydWUpCiAgICBkZWYgc3VtXzJkKGEpOgogICAgICAgIHRvdGFsID0gZnR5cGUoMCkKICAgICAgICBmb3IgaSBpbiBwcmFuZ2UoYS5zaGFwZVswXSk6CiAgICAgICAgICAgIGZvciBqIGluIHByYW5nZShhLnNoYXBlWzFdKToKICAgICAgICAgICAgICAgIHRvdGFsICs9IGZ0eXBlKGFbaSxqXSkKICAgICAgICByZXR1cm4gdG90YWwKCiAgICBAaml0KG5vcHl0aG9uPVRydWUsIHBhcmFsbGVsPUZhbHNlLCBmYXN0bWF0aD1UcnVlLCBjYWNoZT1UcnVlKQogICAgZGVmIHN1bV8yZF9heDAoYSk6CiAgICAgICAgdG90YWwgPSBucC56ZXJvcygoYS5zaGFwZVsxXSksIGR0eXBlPWZ0eXBlKQogICAgICAgIGZvciBpIGluIHByYW5nZShhLnNoYXBlWzBdKToKICAgICAgICAgICAgZm9yIGogaW4gcHJhbmdlKGEuc2hhcGVbMV0pOgogICAgICAgICAgICAgICAgdG90YWxbal0gKz0gZnR5cGUoYVtpLGpdKQogICAgICAgIHJldHVybiB0b3RhbAoKICAgIEBqaXQobm9weXRob249VHJ1ZSwgcGFyYWxsZWw9RmFsc2UsIGZhc3RtYXRoPVRydWUsIGNhY2hlPVRydWUpCiAgICBkZWYgc3VtXzJkX2F4MShhKToKICAgICAgICB0b3RhbCA9IG5wLnplcm9zKChhLnNoYXBlWzBdKSwgZHR5cGU9ZnR5cGUpCiAgICAgICAgZm9yIGkgaW4gcHJhbmdlKGEuc2hhcGVbMF0pOgogICAgICAgICAgICBmb3IgaiBpbiBwcmFuZ2UoYS5zaGFwZVsxXSk6CiAgICAgICAgICAgICAgICB0b3RhbFtpXSArPSBmdHlwZShhW2ksal0pCiAgICAgICAgcmV0dXJuIHRvdGFsCgpleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBsb2cuaW5mbygnTnVtYmEgbm90IGF2YWlsYWJsZSwgc2tpcHBpbmcgcGFyYWxsZWxpemF0aW9uJykKICAgICMgcmVwbGFjZSBudW1iYSBmdW5jdGlvbnMgaWYgbnVtYmEgbm90IGF2YWlsYWJsZToKICAgICMgd2Ugb25seSB1c2Ugaml0IGFuZCBwcmFuZ2UKICAgICMgaGVscGVyIG5lZWRlZCBmb3IgZGVjb3JhdG9ycyB3aXRoIGt3YXJncwogICAgZGVmIHBhcmFtZXRyaXplZChkZWMpOgogICAgICAgIGRlZiBsYXllcigqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAgICBkZWYgcmVwbChmKToKICAgICAgICAgICAgICAgIHJldHVybiBkZWMoZiwgKmFyZ3MsICoqa3dhcmdzKQogICAgICAgICAgICByZXR1cm4gcmVwbAogICAgICAgIHJldHVybiBsYXllcgoKICAgIEBwYXJhbWV0cml6ZWQKICAgIGRlZiBqaXQoZnVuYywgKiprd2FyZ3MpOgogICAgICAgIHJldHVybiBmdW5jCgogICAgZGVmIHByYW5nZSgqYXJncyk6CiAgICAgICAgcmV0dXJuIHJhbmdlKCphcmdzKQoKICAgIGRlZiBzdW1fMWQoYSk6CiAgICAgICAgcmV0dXJuIG5wLnN1bShhLCBkdHlwZT1mdHlwZSkKCiAgICBkZWYgc3VtXzJkKGEpOgogICAgICAgIHJldHVybiBucC5zdW0oYSwgZHR5cGU9ZnR5cGUpCgogICAgZGVmIHN1bV8yZF9heDAoYSk6CiAgICAgICAgcmV0dXJuIG5wLnN1bShhLCBheGlzPTAsIGR0eXBlPWZ0eXBlKQoKICAgIGRlZiBzdW1fMmRfYXgxKGEpOgogICAgICAgIHJldHVybiBucC5zdW0oYSwgYXhpcz0xLCBkdHlwZT1mdHlwZSkKCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgQ29yZSByb3V0aW5lcyBmb3IgZGlmZmVybnQgY29lZmZpY2llbnQgbWV0aG9kcwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpAaml0KG5vcHl0aG9uPVRydWUsIHBhcmFsbGVsPVRydWUsIGZhc3RtYXRoPVRydWUsIGNhY2hlPVRydWUpCmRlZiBzbV9wcmVjb21wdXRlKGRhdGEsIHN0ZXBzLCBrbm93bm1lYW49Tm9uZSk6CiAgICAiIiIKICAgICAgICBQYXJ0IDEgb2YgdGhlID49IHYwLjEuNSBzdGF0aW9uYXJ5IG1lYW4gbWV0aG9kLgogICAgICAgIFdvcmtzIGZvciBtPjEKICAgICAgICBDb21wdXRlcyB0ZXJtcyB0aGF0IGFyZSByZXVzZWQgZHVyaW5nIGJvb3RzdHJhcHBpbmcuCiAgICAgICAgSWYga25vd25tZWFuIGlzIHByb3ZpZGVkLCB3ZSBza2lwIGVzdGltYXRpbmcgdGhlIG1lYW4gYWN0aXZpdHkuCiAgICAiIiIKCiAgICBudW1zdGVwcyAgPSBzdGVwcy5zaGFwZVswXQogICAgbnVtdHJpYWxzID0gZGF0YS5zaGFwZVswXQogICAgbnVtZWxzICAgID0gZGF0YS5zaGFwZVsxXQoKICAgICMgKHgtbXgpKHktbXkpID0geCp5ICsgbXgqbXkgLSBteSp4IC0gbXgqeQogICAgeF95ICAgPSBucC5lbXB0eShzaGFwZT0obnVtc3RlcHMsIG51bXRyaWFscykpCiAgICB4X3ggICA9IG5wLmVtcHR5KHNoYXBlPShudW1zdGVwcywgbnVtdHJpYWxzKSkKICAgIGlmIGtub3dubWVhbiBpcyBOb25lOgogICAgICAgIG14ICAgID0gbnAuZW1wdHkoc2hhcGU9KG51bXN0ZXBzLCBudW10cmlhbHMpKQogICAgICAgIG15ICAgID0gbnAuZW1wdHkoc2hhcGU9KG51bXN0ZXBzLCBudW10cmlhbHMpKQoKICAgICAgICAjIHByZWNvbXB1dGUgdGhpbmdzIHRoYXQgY2FuIGJlIHNlcGFyYXRlZCBieSB0cmlhbCBhbmQgawogICAgICAgIG1tICAgICA9IHN1bV8yZF9heDEoZGF0YVs6LCA6XSAgICkKICAgICAgICBtbV9zcXUgPSBzdW1fMmRfYXgxKGRhdGFbOiwgOl0qKjIpCgogICAgICAgIGZvciBpZHggaW4gcHJhbmdlKGxlbihzdGVwcykpOgogICAgICAgICAgICBrID0gc3RlcHNbaWR4XQogICAgICAgICAgICB4ID0gZGF0YVs6LCAwOi1rXQogICAgICAgICAgICB5ID0gZGF0YVs6LCBrOiAgXQogICAgICAgICAgICBsID0gZGF0YVs6LCAwOiBrXQogICAgICAgICAgICByID0gZGF0YVs6LC1rOiAgXQogICAgICAgICAgICB4X3lbaWR4XSA9ICAgICAgICAgICBzdW1fMmRfYXgxKHgqeSkgLyhudW1lbHMtaykKICAgICAgICAgICAgeF94W2lkeF0gPSAobW1fc3F1IC0gc3VtXzJkX2F4MShyKnIpKS8obnVtZWxzLWspCiAgICAgICAgICAgIG14IFtpZHhdID0gKG1tICAgICAtIHN1bV8yZF9heDEociAgKSkvKG51bWVscy1rKQogICAgICAgICAgICBteSBbaWR4XSA9IChtbSAgICAgLSBzdW1fMmRfYXgxKGwgICkpLyhudW1lbHMtaykKCiAgICBlbHNlOgogICAgICAgIG14ICAgID0gbnAub25lcyhzaGFwZT0obnVtc3RlcHMsIG51bXRyaWFscykpKmtub3dubWVhbgogICAgICAgIG15ICAgID0gbnAub25lcyhzaGFwZT0obnVtc3RlcHMsIG51bXRyaWFscykpKmtub3dubWVhbgoKICAgICAgICBtbV9zcXUgPSBzdW1fMmRfYXgxKGRhdGFbOiwgOl0qKjIpCgogICAgICAgIGZvciBpZHggaW4gcHJhbmdlKGxlbihzdGVwcykpOgogICAgICAgICAgICBrID0gc3RlcHNbaWR4XQogICAgICAgICAgICB4ID0gZGF0YVs6LCAwOi1rXQogICAgICAgICAgICB5ID0gZGF0YVs6LCBrOiAgXQogICAgICAgICAgICBsID0gZGF0YVs6LCAwOiBrXQogICAgICAgICAgICByID0gZGF0YVs6LC1rOiAgXQogICAgICAgICAgICB4X3lbaWR4XSA9ICAgICAgICAgICBzdW1fMmRfYXgxKHgqeSkgLyhudW1lbHMtaykKICAgICAgICAgICAgeF94W2lkeF0gPSAobW1fc3F1IC0gc3VtXzJkX2F4MShyKnIpKS8obnVtZWxzLWspCgogICAgcmV0dXJuIG14LCBteSwgeF95LCB4X3gKCkBqaXQobm9weXRob249VHJ1ZSwgcGFyYWxsZWw9VHJ1ZSwgZmFzdG1hdGg9VHJ1ZSwgY2FjaGU9VHJ1ZSkKZGVmIHNtX21ldGhvZChwcmVjb21wdXRlZCwgc3RlcHMsIGNob2ljZXMgPSBOb25lKToKICAgICIiIgogICAgICAgIFBhcnQgMiBvZiB0aGUgPj0gdjAuMS41IHN0YXRpb25hcnkgbWVhbiBtZXRob2QuCiAgICAgICAgV29ya3MgZm9yIG0+MQogICAgICAgIFJlbGllcyBvbiB0aGUgcmVzdWx0cyBmcm9tIHNtX3BlcmNvbXB1dGUuCiAgICAgICAgRnVuIGZhY3Q6IGBjaG9pY2VzID0gLi4uYCBpcyBlcXVpdmFsZW50IHRvIG5vdCBzcGVjaWZ5aW5nIHRoZSBpbmRleC4KICAgICIiIgogICAgbXgsIG15LCB4X3ksIHhfeCA9IHByZWNvbXB1dGVkCgogICAgaWYgY2hvaWNlcyBpcyBOb25lOgogICAgICAgIHhfeV8gPSB4X3lbOiwgOl0KICAgICAgICB4X3hfID0geF94WzosIDpdCiAgICAgICAgbXhfICA9IG14WzosIDpdCiAgICAgICAgbXlfICA9IG15WzosIDpdCiAgICBlbHNlOgogICAgICAgIHhfeV8gPSB4X3lbOiwgY2hvaWNlc10KICAgICAgICB4X3hfID0geF94WzosIGNob2ljZXNdCiAgICAgICAgbXhfICA9IG14WzosIGNob2ljZXNdCiAgICAgICAgbXlfICA9IG15WzosIGNob2ljZXNdCgogICAgcmVzICA9IG5wLnplcm9zKHNoYXBlPShsZW4oc3RlcHMpKSwgZHR5cGU9bnAuZmxvYXQ2NCkKICAgIG5vcm0gID0gbGVuKG14WzBdKQogICAgZm9yIGlkeCBpbiBwcmFuZ2UobGVuKHN0ZXBzKSk6CiAgICAgICAgbXhrICAgPSBzdW1fMWQobXhfW2lkeF0pL25vcm0KICAgICAgICBteWsgICA9IHN1bV8xZChteV9baWR4XSkvbm9ybQogICAgICAgIHlfbXhrID0gbXlfW2lkeF0qbXhrCiAgICAgICAgeF9teWsgPSBteF9baWR4XSpteWsKCiAgICAgICAgcmVzW2lkeF0gPSBcCiAgICAgICAgICAgIChzdW1fMWQoeF95X1tpZHhdIC0geF9teWsgLSB5X214aykvbm9ybSArIG14aypteWspIFwKICAgICAgICAgICAgLyAoc3VtXzFkKHhfeF9baWR4XS0yKm14X1tpZHhdKm14ayArIG14ayoqMikvbm9ybSkKCiAgICByZXR1cm4gcmVzCgpAaml0KG5vcHl0aG9uPVRydWUsIHBhcmFsbGVsPVRydWUsIGZhc3RtYXRoPVRydWUsIGNhY2hlPVRydWUpCmRlZiB0c19wcmVjb21wdXRlKGRhdGEsIHN0ZXBzLCBrbm93bm1lYW49Tm9uZSk6CiAgICAiIiIKICAgICAgICBQYXJ0IDEgb2YgdGhlIHRyaWFsc2VwYXJhdGVkIG1ldGhvZC4KICAgICAgICBDb250YWludHMgdGhlIGNvcmUgb2YgdGhlIG1ldGhvZC4KICAgICAgICBGb3IgdHMsIHByZWNvbXB1dGluZyBpcyBub3QgbmVlZGVkLCB0aGlzIGlzIG9ubHkgZm9yIGNvbnNpc3RlbmN5IHdpdGgKICAgICAgICBzbS4gSGVuY2UsIHRzX21ldGhvZCBvbmx5IGRvZXMgb25lIHJlZHVjdGlvbiBiYXNlZCBvbiB0aGUgYm9vdHN0cmFwCiAgICAgICAgdHJpYWwgY2hvaWNlcy4KICAgICAgICBBbHNvLCB0aGlzIGFsbG93cyB0byBpbXBsZW1lbnQga25vd25tZWFuLgogICAgIiIiCiAgICBOID0gZGF0YS5zaGFwZVswXQogICAgVCA9IGRhdGEuc2hhcGVbMV0KICAgIHJlcyA9IG5wLnplcm9zKHNoYXBlPShOLCBsZW4oc3RlcHMpKSwgZHR5cGU9bnAuZmxvYXQ2NCkKICAgIGlmIGtub3dubWVhbiBpcyBOb25lOgogICAgICAgIGZvciBpZHggaW4gcHJhbmdlKGxlbihzdGVwcykpOgogICAgICAgICAgICBrID0gc3RlcHNbaWR4XQogICAgICAgICAgICBmcm9udG1lYW4gPSBucC5lbXB0eSgoTiwxKSwgZnR5cGUpCiAgICAgICAgICAgIGJhY2ttZWFuICA9IG5wLmVtcHR5KChOLDEpLCBmdHlwZSkKICAgICAgICAgICAgZnJvbnRtZWFuWzosMF0gPSBzdW1fMmRfYXgxKCBkYXRhWzosICA6LWtdICAgICAgICAgICAgICApLyhULWspCiAgICAgICAgICAgIGZyb250dmFyICAgICAgID0gc3VtXzJkX2F4MSgoZGF0YVs6LCAgOi1rXS1mcm9udG1lYW4pKioyKS8oVC1rKQogICAgICAgICAgICBiYWNrbWVhbls6LDBdICA9IHN1bV8yZF9heDEoIGRhdGFbOiwgazogIF0gICAgICAgICAgICAgICkvKFQtaykKCiAgICAgICAgICAgIHJlc1s6LCBpZHhdID0gXAogICAgICAgICAgICAgICAgc3VtXzJkX2F4MSgoZGF0YVs6LCA6LWtdIC1mcm9udG1lYW4pKihkYXRhWzosIGs6XSAtYmFja21lYW4pKSBcCiAgICAgICAgICAgICAgICAvIGZyb250dmFyIC8gKFQtaykKICAgIGVsc2U6CiAgICAgICAgdGhlbWVhbiA9IG5wLm9uZXMoKE4sMSksIGZ0eXBlKSprbm93bm1lYW4KICAgICAgICBmb3IgaWR4IGluIHByYW5nZShsZW4oc3RlcHMpKToKICAgICAgICAgICAgayA9IHN0ZXBzW2lkeF0KICAgICAgICAgICAgZnJvbnR2YXIgPSBzdW1fMmRfYXgxKChkYXRhWzosICA6LWtdLXRoZW1lYW4pKioyKS8oVC1rKQoKICAgICAgICAgICAgcmVzWzosIGlkeF0gPSBcCiAgICAgICAgICAgICAgICBzdW1fMmRfYXgxKChkYXRhWzosIDota10gLXRoZW1lYW4pKihkYXRhWzosIGs6XSAtdGhlbWVhbikpXAogICAgICAgICAgICAgICAgLyBmcm9udHZhciAvIChULWspCgogICAgcmV0dXJuIHJlcwoKQGppdChub3B5dGhvbj1UcnVlLCBwYXJhbGxlbD1UcnVlLCBmYXN0bWF0aD1UcnVlLCBjYWNoZT1UcnVlKQpkZWYgdHNfbWV0aG9kKHByZWNvbXB1dGVkLCBzdGVwcywgY2hvaWNlcyA9IE5vbmUpOgogICAgIiIiCiAgICAgICAgU2VlIHRzX3ByZWNvbXB1dGUuCiAgICAiIiIKICAgIGlmIGNob2ljZXMgaXMgTm9uZToKICAgICAgICByZXMgPSBzdW1fMmRfYXgwKHByZWNvbXB1dGVkKS9wcmVjb21wdXRlZC5zaGFwZVswXQogICAgZWxzZToKICAgICAgICByZXMgPSBzdW1fMmRfYXgwKHByZWNvbXB1dGVkW2Nob2ljZXNdKS9wcmVjb21wdXRlZC5zaGFwZVswXQogICAgIyByZXMgPSBucC5tZWFuKHByZWNvbXB1dGVkW2Nob2ljZXNdLCBheGlzPTAsIGR0eXBlPWZ0eXBlKQogICAgcmV0dXJuIHJlcwoKZGVmIHNtX21ldGhvZF9uYWl2ZShkYXRhLCBzdGVwcyk6CiAgICAiIiIKICAgICAgICBOYXRpdmUgdmVyc2lvbiBvZiBzdGF0aW9uYXJ5IG1lYW4gbWV0aG9kLgogICAgICAgIE5vdCB1c2VkLCBza2lwcyBwcmVjb21wdXRpbmcuIFJlc3VsdHMgKnNob3VsZCogYmUgdGhlIHNhbWUgYXMgZnJvbQogICAgICAgIHNtX21ldGhvZCgpCiAgICAiIiIKICAgIG51bWVscyA9IGRhdGEuc2hhcGVbMV0KICAgIHJlcyAgICA9IG5wLnplcm9zKHNoYXBlPWxlbihzdGVwcyksIGR0eXBlPSdmbG9hdDY0JykKICAgIGZvciBpZHgsIGsgaW4gZW51bWVyYXRlKHN0ZXBzKToKICAgICAgICAjIGFuYWxvZ2VvdXMgdG8gdHJpYWwgc2VwYXJhdGVkCiAgICAgICAgZnJvbnRtZWFuID0gbnAubWVhbihkYXRhWzosICA6LWtdLCBrZWVwZGltcz1UcnVlLCBkdHlwZT1mdHlwZSkKICAgICAgICBmcm9udHZhciAgPSBucC52YXIoIGRhdGFbOiwgIDota10sIGRkb2Y9MSwgICAgICAgIGR0eXBlPWZ0eXBlKQogICAgICAgIGJhY2ttZWFuICA9IG5wLm1lYW4oZGF0YVs6LCBrOiAgXSwga2VlcGRpbXM9VHJ1ZSwgZHR5cGU9ZnR5cGUpCgogICAgICAgIHJlc1tpZHhdID0gXAogICAgICAgICAgICBucC5tZWFuKChkYXRhWzosICA6LWtdIC0gZnJvbnRtZWFuKSAqIFwKICAgICAgICAgICAgICAgICAgICAoZGF0YVs6LCBrOiAgXSAtIGJhY2ttZWFuICksIGR0eXBlPWZ0eXBlKSBcCiAgICAgICAgICAgICogKChudW1lbHMtaykvKG51bWVscy1rLTEpKSAvIGZyb250dmFyCgogICAgcmV0dXJuIHJlcwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIENvZWZmaWNpZW50IFJlc3VsdCBjbGFzcwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpjbGFzcyBDb2VmZmljaWVudFJlc3VsdChuYW1lZHR1cGxlKCdDb2VmZmljaWVudFJlc3VsdEJhc2UnLCBbCiAgICAnY29lZmZpY2llbnRzJywKICAgICdzdGVwcycsCiAgICAnZHQnLAogICAgJ2R0dW5pdCcsCiAgICAnbWV0aG9kJywKICAgICdzdGRlcnJzJywKICAgICd0cmlhbGFjdGl2aXRpZXMnLAogICAgJ3RyaWFsdmFyaWFuY2VzJywKICAgICd0cmlhbGxlbicsCiAgICAnYm9vdHN0cmFwY3JzJywKICAgICd0cmlhbGNycycsCiAgICAnZGVzYycsCiAgICAnZGVzY3JpcHRpb24nLAogICAgJ251bXRyaWFscycsCiAgICAnbnVtYm9vdCcsCiAgICAnbnVtc3RlcHMnXSkpOgogICAgIiIiCiAgICAgICAgUmVzdWx0IHJldHVybmVkIGJ5IGBjb2VmZmljaWVudHMoKWAuIFN1YmNsYXNzZWQgZnJvbQogICAgICAgIDpvYmo6YH5jb2xsZWN0aW9ucy5uYW1lZHR1cGxlYC4KCiAgICAgICAgQXR0cmlidXRlcyBhcmUgc2V0IHRvIGBOb25lYCBpZiB0aGUgc3BlY2lmaWVkIG1ldGhvZCBvciBpbnB1dAogICAgICAgIGRhdGEgZG8gbm90IHByb3ZpZGUgdGhlbS4gQWxsIGF0dHJpYnV0ZXMgb2YgdHlwZSA6b2JqOmB+bnVtcHkubmRhcnJheWAKICAgICAgICBhbmQgbGlzdHMgYXJlIG9uZS1kaW1lbnNpb25hbC4KCiAgICAgICAgQXR0cmlidXRlcwogICAgICAgIC0tLS0tLS0tLS0KICAgICAgICBjb2VmZmljaWVudHMgOiB+bnVtcHkubmRhcnJheQogICAgICAgICAgICBDb250YWlucyB0aGUgY29lZmZpY2llbnRzIDptYXRoOmByX2tgLCBoYXMgbGVuZ3RoCiAgICAgICAgICAgIGBudW1zdGVwc2AuIEFjY2VzcyB2aWEgYGAuY29lZmZpY2llbnRzW3N0ZXBdYGAKCiAgICAgICAgc3RlcHMgOiB+bnVtcHkubmRhcnJheQogICAgICAgICAgICBBcnJheSBvZiB0aGUgOm1hdGg6YGtgIHZhbHVlcyBtYXRjaGluZyBgY29lZmZpY2llbnRzYC4KCiAgICAgICAgZHQgOiBmbG9hdAogICAgICAgICAgICBUaGUgc2l6ZSBvZiBlYWNoIHN0ZXAgaW4gYGR0dW5pdHNgLiBEZWZhdWx0IGlzIDEuCgogICAgICAgIGR0dW5pdCA6IHN0cgogICAgICAgICAgICBVbml0cyBvZiBzdGVwIHNpemUuIERlZmF1bHQgaXMgYCdtcydgLgoKICAgICAgICBtZXRob2QgOiBzdHIgb3IgTm9uZQogICAgICAgICAgICBUaGUgbWV0aG9kIHRoYXQgd2FzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBjb2VmZmljaWVudHMKCiAgICAgICAgc3RkZXJycyA6IH5udW1weS5uZGFycmF5IG9yIE5vbmUKICAgICAgICAgICAgU3RhbmRhcmQgZXJyb3JzIG9mIHRoZSA6bWF0aDpgcl9rYC4KCiAgICAgICAgdHJpYWxhY3Rpdml0aWVzIDogfm51bXB5Lm5kYXJyYXkKICAgICAgICAgICAgTWVhbiBhY3Rpdml0eSBvZiBlYWNoIHRyaWFsIGluIHRoZSBwcm92aWRlZCBkYXRhLgogICAgICAgICAgICBUbyBnZXQgdGhlIGdsb2JhbCBtZWFuIGFjdGl2aXR5LCB1c2UgYGBucC5tZWFuKHRyaWFsYWN0aXZpdGllcylgYC4KICAgICAgICAgICAgSGFzIGxlbmdodCBgbnVtdHJpYWxzYAoKICAgICAgICBkZXNjcmlwdGlvbiA6IHN0cgogICAgICAgICAgICBEZXNjcmlwdGlvbiAob3IgbmFtZSkgb2YgdGhlIGRhdGEgc2V0LCBieSBkZWZhdWx0IGFsbCByZXN1bHRzIG9mCiAgICAgICAgICAgIGZ1bmN0aW9ucyB3b3JraW5nIHdpdGggdGhpcyBzZXQgaW5oZXJpdCBpdHMgZGVzY3JpcHRpb24gKGUuZy4gcGxvdAogICAgICAgICAgICBsZWdlbmRzKS4KCiAgICAgICAgbnVtdHJpYWxzIDogaW50LAogICAgICAgICAgICBOdW1iZXIgb2YgdHJpYWxzIHRoYXQgY29udHJpYnV0ZWQuCgogICAgICAgIG51bWJvb3QgOiBpbnQsCiAgICAgICAgICAgIE51bWJlciBvZiBib290c3RyYXAgcmVwbGljYXMgdGhhdCB3ZXJlIGNyZWF0ZWQuCgogICAgICAgIG51bXN0ZXBzIDogaW50LAogICAgICAgICAgICBOdW1iZXIgb2Ygc3RlcHMgaW4gYGNvZWZmaWNpZW50c2AsIGBzdGVwc2AgYW5kIGBzdGRlcnJzYC4KCiAgICAgICAgYm9vdHN0cmFwY3JzIDogbGlzdAogICAgICAgICAgICBMaXN0IGNvbnRhaW5pbmcgdGhlIGBudW1ib290YCA6b2JqOmBDb2VmZmljaWVudFJlc3VsdGAgaW5zdGFuY2VzCiAgICAgICAgICAgIHRoYXQgd2VyZSBjYWxjdWxhdGVkIGZyb20gdGhlIHJlc2FtcGxlZCBpbnB1dCBkYXRhLiBUaGUgTGlzdCBpcwogICAgICAgICAgICBlbXB0eSBpZiBib290c3RyYXBwaW5nIHdhcyBza2lwcGVkIChgbnVtYm9vdD0wYCkuCgogICAgICAgIHRyaWFsY3JzIDogbGlzdAogICAgICAgICAgICBMaXN0IG9mIHRoZSA6b2JqOmBDb2VmZmljaWVudFJlc3VsdGAgaW5zdGFuY2VzIGNhbGN1bGF0ZWQKICAgICAgICAgICAgZnJvbSBpbmRpdmlkdWFsIHRyaWFscy4gT25seSBoYXMgbGVuZ3RoIGBudW10cmlhbHNgIGlmIHRoZQogICAgICAgICAgICBgdHJpYWxzZXBhcmF0ZWRgIG1ldGhvZCB3YXMgdXNlZCwgb3RoZXJ3aXNlIGl0IGlzIGVtcHR5LgoKICAgICAgICBOb3RlCiAgICAgICAgLS0tLQogICAgICAgIEF0IHRoZSB0aW1lIG9mIHdyaXRpbmcsIDpvYmo6YH5udW1weS5uZGFycmF5YCBiZWhhdmVzIGEgYml0IHVuZXhwZWN0ZWQKICAgICAgICB3aGVuIGNyZWF0aW5nIGFycmF5cyB3aXRoIG9iamVjdHMgdGhhdCBhcmUgc2VxdWVuY2UgbGlrZSAoc3VjaCBhcwogICAgICAgIDpvYmo6YENvZWZmaWNpZW50UmVzdWx0YCBhbmQgOm9iajpgRml0UmVzdWx0YCksIGV2ZW4gd2hlbiBzcGVjaWZ5aW5nCiAgICAgICAgYGR0eXBlPW9iamVjdGAuCiAgICAgICAgTnVtcHkgY29udmVydHMgdGhlIG9iamVjdHMgaW50byBhbiBuZGltZW5zaW9uYWwgc3RydWN0dXJlIGluc3RlYWQKICAgICAgICBvZiBjcmVhdGluZyB0aGUgKHByb2JhYmx5IGRlc2lyZWQpIDFkLWFycmF5LiBUbyB3b3JrIGFyb3VuZCB0aGUgaXNzdWUsCiAgICAgICAgdXNlIGEgYGxpc3RgIG9yIG1hbnVhbGx5IGNyZWF0ZSB0aGUgYXJyYXkgd2l0aCBgZHR5cGU9b2JqZWN0YCBhbmQgYWRkCiAgICAgICAgdGhlIGVudHJpZXMgYWZ0ZXIgY3JlYXRpb24uCgogICAgICAgIEV4YW1wbGUKICAgICAgICAtLS0tLS0tCiAgICAgICAgLi4gY29kZS1ibG9jazo6IHB5dGhvbgoKICAgICAgICAgICAgaW1wb3J0IG51bXB5IGFzIG5wCiAgICAgICAgICAgIGltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKICAgICAgICAgICAgaW1wb3J0IG1yZXN0aW1hdG9yIGFzIG1yZQoKICAgICAgICAgICAgIyBicmFuY2hpbmcgcHJvY2VzcyB3aXRoIDE1IHRyaWFscwogICAgICAgICAgICBicCA9IG1yZS5zaW11bGF0ZV9icmFuY2hpbmcobT0wLjk5NSwgYT0xMCwgbnVtdHJpYWxzPTE1KQoKICAgICAgICAgICAgIyB0aGUgYnAgcmV0dXJucyBkYXRhIGFscmVhZHkgaW4gdGhlIHJpZ2h0IGZvcm1hdAogICAgICAgICAgICByayA9IG1yZS5jb2VmZmljaWVudHMoYnAsIG1ldGhvZD0ndHMnLCBkdHVuaXQ9J3N0ZXAnKQoKICAgICAgICAgICAgIyBmaXQKICAgICAgICAgICAgZnQgPSBtcmUuZml0KHJrKQoKICAgICAgICAgICAgIyBwbG90IGNvZWZmaWNpZW50cyBhbmQgdGhlIGF1dG9jb3JyZWxhdGlvbiBmaXQKICAgICAgICAgICAgbXJlLk91dHB1dEhhbmRsZXIoW3JrLCBmdF0pCiAgICAgICAgICAgIHBsdC5zaG93KCkKCiAgICAgICAgICAgICMgcHJpbnQgdGhlIGNvZWZmaWNpZW50cwogICAgICAgICAgICBwcmludChyay5jb2VmZmljaWVudHMpCgogICAgICAgICAgICAjIGdldCB0aGUgZG9jdW1lbnRhdGlvbgogICAgICAgICAgICBwcmludChoZWxwKHJrKSkKCiAgICAgICAgICAgICMgcmsgaXMgaW5oZXJpdGVkIGZyb20gbmFtZWR0dXBsZSB3aXRoIGFsbCB0aGUgYmVsbHMgYW5kIHdoaXN0bGVzCiAgICAgICAgICAgIHByaW50KHJrLl9maWVsZHMpCiAgICAgICAgLi4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgIiIiCgogICAgIyBwcm9oaWJpdCBhZGRpbmcgYXR0cmlidXRlcwogICAgX19zbG90c19fID0gKCkKPHxmaW1fZW5kfD4="]
["ec53d29dce9508818113b1041287e6e54494f49d-1","ec53d29dce9508818113b1041287e6e54494f49d","PHxmaW1fcHJlZml4fD4KIyB1c2UgY3N2IHRvIGxvYWQgdGhlIGNzdiBkYXRhIGZpbGUKaW1wb3J0IGNzdgppbXBvcnQgbnVtcHkgYXMgbnAKIyB1c2Ugb3Blbi1jdiB0byBsb2FkIGFuZCBwcm9jZXNzIHRoZSBpbWFnZXMKaW1wb3J0IGN2MgppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0Cgpmcm9tIGtlcmFzLm1vZGVscyBpbXBvcnQgU2VxdWVudGlhbApmcm9tIGtlcmFzLmxheWVycyBpbXBvcnQgTGFtYmRhLCBGbGF0dGVuLCBEZW5zZSwgQ3JvcHBpbmcyRCwgRHJvcG91dApmcm9tIGtlcmFzLmxheWVycyBpbXBvcnQgQ29udjJELCBNYXhQb29saW5nMkQKCmlucHV0X2RpciA9ICcuL2RhdGEvZHJpdmluZ19sb2cuY3N2JwppbnB1dF9zaGFwZSA9ICgxNjAsIDMyMCwgMykKCiMgSGVscCBGdW50aW9ucwpkZWYgcmFuZG9tX2ZsaXAoaW1hZ2UsIHN0ZWVyaW5nX2FuZ2xlKToKICAgICIiIgogICAgUmFuZG9tbHkgZmxpcHQgdGhlIGltYWdlIGxlZnQgPC0+IHJpZ2h0LCBhbmQgYWRqdXN0IHRoZSBzdGVlcmluZyBhbmdsZS4KICAgICIiIgogICAgaWYgbnAucmFuZG9tLnJhbmQoKSA8IDAuNToKICAgICAgICBpbWFnZSA9IGN2Mi5mbGlwKGltYWdlLCAxKQogICAgICAgIHN0ZWVyaW5nX2FuZ2xlID0gLXN0ZWVyaW5nX2FuZ2xlCiAgICByZXR1cm4gaW1hZ2UsIHN0ZWVyaW5nX2FuZ2xlCgpkZWYgcmFuZG9tX3RyYW5zbGF0ZShpbWFnZSwgc3RlZXJpbmdfYW5nbGUsIHJhbmdlX3gsIHJhbmdlX3kpOgogICAgIiIiCiAgICBSYW5kb21seSBzaGlmdCB0aGUgaW1hZ2UgdmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGx5ICh0cmFuc2xhdGlvbikuCiAgICAiIiIKICAgIHRyYW5zX3ggPSByYW5nZV94ICogKG5wLnJhbmRvbS5yYW5kKCkgLSAwLjUpCiAgICB0cmFuc195ID0gcmFuZ2VfeSAqIChucC5yYW5kb20ucmFuZCgpIC0gMC41KQogICAgc3RlZXJpbmdfYW5nbGUgKz0gdHJhbnNfeCAqIDAuMDAyCiAgICB0cmFuc19tID0gbnAuZmxvYXQzMihbWzEsIDAsIHRyYW5zX3hdLCBbMCwgMSwgdHJhbnNfeV1dKQogICAgaGVpZ2h0LCB3aWR0aCA9IGltYWdlLnNoYXBlWzoyXQogICAgaW1hZ2UgPSBjdjIud2FycEFmZmluZShpbWFnZSwgdHJhbnNfbSwgKHdpZHRoLCBoZWlnaHQpKQogICAgcmV0dXJuIGltYWdlLCBzdGVlcmluZ19hbmdsZQoKZGVmIHJhbmRvbV9icmlnaHRuZXNzKGltYWdlKToKICAgICIiIgogICAgUmFuZG9tbHkgYWRqdXN0IGJyaWdodG5lc3Mgb2YgdGhlIGltYWdlLgogICAgIiIiCiAgICAjIEhTViAoSHVlLCBTYXR1cmF0aW9uLCBWYWx1ZSkgaXMgYWxzbyBjYWxsZWQgSFNCICgnQicgZm9yIEJyaWdodG5lc3MpLgogICAgaHN2ID0gY3YyLmN2dENvbG9yKGltYWdlLCBjdjIuQ09MT1JfUkdCMkhTVikKICAgIHJhdGlvID0gMS4wICsgMC40ICogKG5wLnJhbmRvbS5yYW5kKCkgLSAwLjUpCiAgICBoc3ZbOiw6LDJdID0gIGhzdls6LDosMl0gKiByYXRpbwogICAgcmV0dXJuIGN2Mi5jdnRDb2xvcihoc3YsIGN2Mi5DT0xPUl9IU1YyUkdCKQoKCiMgTG9hZCBkYXRhIGFuZCBzcGxpdCBpbnRvIHRyYWluaW5nIGRhdGEgYW5kIHZhbGlkYXRpb24gZGF0YQpkZWYgbG9hZF9kYXRhKGlucHV0X2Rpcik6CgogICAgZGF0YV9saXN0ID0gW10KCiAgICB3aXRoIG9wZW4oaW5wdXRfZGlyLCAncicpIGFzIGY6CiAgICAgICAgZGF0YSA9IGNzdi5yZWFkZXIoZikKICAgICAgICBmb3IgbnVtLCBsaW5lIGluIGVudW1lcmF0ZShkYXRhKToKICAgICAgICAgICAgaWYobnVtIT0wKToKICAgICAgICAgICAgICAgIGRhdGFfbGlzdC5hcHBlbmQobGluZSkKCiAgICBpbWFnZXMgPSBbXQogICAgc3RlZXJpbmdfYW5nbGVzID0gW10KCiAgICBmb3Igc2FtcGxlIGluIGRhdGFfbGlzdDoKICAgICAgICBpbWFnZV9wYXRoID0gJy4vZGF0YS9JTUcvJyArIHNhbXBsZVswXS5zcGxpdCgnLycpWy0xXQogICAgICAgIGFuZ2xlID0gZmxvYXQoc2FtcGxlWzNdKQogICAgICAgIGNlbnRlciA9IGN2Mi5pbXJlYWQoaW1hZ2VfcGF0aCkKCiAgICAgICAgaW1hZ2VzLmFwcGVuZChjZW50ZXIpCiAgICAgICAgc3RlZXJpbmdfYW5nbGVzLmFwcGVuZChhbmdsZSkKCiAgICAnJycKICAgIGF1Z21lbnRlZF9pbWFnZXMgPSBbXQogICAgYXVnbWVudGVkX2FuZ2xlcyA9IFtdCiAgICAjIERhdGEgQXVnbWVudGF0aW9uCiAgICBmb3IgaW1hZ2UsIHN0ZWVyaW5nX2FuZ2xlIGluIHppcChpbWFnZXMsIHN0ZWVyaW5nX2FuZ2xlcyk6CiAgICAgICAgYXVnbWVudGVkX2ltYWdlcy5hcHBlbmQoaW1hZ2UpCiAgICAgICAgYXVnbWVudGVkX2FuZ2xlcy5hcHBlbmQoc3RlZXJpbmdfYW5nbGUpCiAgICAgICAgaW1hZ2UsIHN0ZWVyaW5nX2FuZ2xlID0gcmFuZG9tX2ZsaXAoaW1hZ2UsIHN0ZWVyaW5nX2FuZ2xlKQogICAgICAgIGltYWdlLCBzdGVlcmluZ19hbmdsZSA9IHJhbmRvbV90cmFuc2xhdGUoaW1hZ2UsIHN0ZWVyaW5nX2FuZ2xlLCByYW5nZV94PTEwMCwgcmFuZ2VfeT0xMCkKICAgICAgICBpbWFnZSA9IHJhbmRvbV9icmlnaHRuZXNzKGltYWdlKQogICAgICAgIGF1Z21lbnRlZF9pbWFnZXMuYXBwZW5kKGltYWdlKQogICAgICAgIGF1Z21lbnRlZF9hbmdsZXMuYXBwZW5kKHN0ZWVyaW5nX2FuZ2xlcykKICAgICcnJyAgICAKICAgIFhfdHJhaW4gPSBucC5hc2FycmF5KGltYWdlcykKICAgIHlfdHJhaW4gPSBucC5hc2FycmF5KHN0ZWVyaW5nX2FuZ2xlcykKCiAgICByZXR1cm4gWF90cmFpbiwgeV90cmFpbgoKCiMgRmlyc3QgbW9kZWwKZGVmIG1vZGVsKGlucHV0X3NoYXBlKToKCiAgICBtb2RlbCA9IFNlcXVlbnRpYWwoKQogICAgbW9kZWwuYWRkKExhbWJkYShsYW1iZGEgeDogeC8yNTUuMCAtIDAuNSwgaW5wdXRfc2hhcGU9aW5wdXRfc2hhcGUpKQogICAgbW9kZWwuYWRkKEZsYXR0ZW4oKSkKICAgIG1vZGVsLmFkZChEZW5zZSgxKSkKICAgIG1vZGVsLnN1bW1hcnkoKQogICAgCiAgICByZXR1cm4gbW9kZWwKCiMgTGVuZXQgbW9kZWwKZGVmIGxlbmV0KGlucHV0X3NoYXBlKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIG1vZGVsID0gU2VxdWVudGlhbCgpCgogICAgbW9kZWwuYWRkKExhbWJkYShsYW1iZGEgeDogeC8yNTUuMCAtIDAuNSwgaW5wdXRfc2hhcGU9aW5wdXRfc2hhcGUpKQo8fGZpbV9lbmR8Pg=="]
["41c1e74fc1b051bbe7c431f6f5ec0803df0aae91-1","41c1e74fc1b051bbe7c431f6f5ec0803df0aae91","PHxmaW1fcHJlZml4fD4KbmV3X2N1c3RvbWVyID0gewogICAgICAgICAgIm5hbWUiOiAiRGlzcGxheU5hbWUiLAogICAgICAgICAgICAic3RhdHVzIjogIkFjdGl2ZSIsCiAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRlc2NyaXB0aW9uIHN0cmluZyIsCiAgICAgICAgICAgICAgICAidmFsaWRGb3IiOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJzdGFydERhdGVUaW1lIjogIjIwMTMtMDYtMTlUMDQ6MDA6MDAuMFoiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuZERhdGVUaW1lIjogIjIwMTMtMDQtMTlUMjA6NDI6MjMuMFoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICJjdXN0b21lclJhbmsiOiAiMyIsCiAgICAgICAgICAgICAgICAgICAgInJlbGF0ZWRQYXJ0eSI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZCI6ICIxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHJlZiI6ICJodHRwOi8vc2VydmVybG9jYXRpb246cG9ydC9wYXJ0eU1hbmFnZW1lbnQvaW5kaXZpZHVhbC8xIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJvbGUiOiAiY3VzdG9tZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiSm9obiBEb2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAiY2hhcmFjdGVyaXN0aWMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIjogImNoYXJhY3RlcmlzdGljbmFtZTEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogImNoYXJhY3RlcmlzdGljdmFsdWUxIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiY2hhcmFjdGVyaXN0aWNuYW1lMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogImNoYXJhY3RlcmlzdGljdmFsdWUyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICJjb250YWN0TWVkaXVtIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiRW1haWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsaWRGb3IiOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGFydERhdGVUaW1lIjogIjIwMTMtMDQtMTlUMjA6NDI6MjMuMFoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZWRpdW0iOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbWFpbEFkZHJlc3MiOiAiYWJjQHRtZm9ydW0uY29tIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZWZlcnJlZCI6IFRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIlRlbGVwaG9uZU51bWJlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWxpZEZvciI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXJ0RGF0ZVRpbWUiOiAiMjAxMy0wNC0xOVQyMDo0MjoyMy4wWiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAo8fGZpbV9lbmR8Pg=="]
["41c1e74fc1b051bbe7c431f6f5ec0803df0aae91-2","41c1e74fc1b051bbe7c431f6f5ec0803df0aae91","PHxmaW1fcHJlZml4fD4KbmV3X2N1c3RvbWVyID0gewogICAgICAgICAgIm5hbWUiOiAiRGlzcGxheU5hbWUiLAogICAgICAgICAgICAic3RhdHVzIjogIkFjdGl2ZSIsCiAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRlc2NyaXB0aW9uIHN0cmluZyIsCiAgICAgICAgICAgICAgICAidmFsaWRGb3IiOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJzdGFydERhdGVUaW1lIjogIjIwMTMtMDYtMTlUMDQ6MDA6MDAuMFoiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuZERhdGVUaW1lIjogIjIwMTMtMDQtMTlUMjA6NDI6MjMuMFoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICJjdXN0b21lclJhbmsiOiAiMyIsCiAgICAgICAgICAgICAgICAgICAgInJlbGF0ZWRQYXJ0eSI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZCI6ICIxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHJlZiI6ICJodHRwOi8vc2VydmVybG9jYXRpb246cG9ydC9wYXJ0eU1hbmFnZW1lbnQvaW5kaXZpZHVhbC8xIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJvbGUiOiAiY3VzdG9tZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiSm9obiBEb2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAiY2hhcmFjdGVyaXN0aWMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIjogImNoYXJhY3RlcmlzdGljbmFtZTEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogImNoYXJhY3RlcmlzdGljdmFsdWUxIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiY2hhcmFjdGVyaXN0aWNuYW1lMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogImNoYXJhY3RlcmlzdGljdmFsdWUyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICJjb250YWN0TWVkaXVtIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiRW1haWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsaWRGb3IiOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGFydERhdGVUaW1lIjogIjIwMTMtMDQtMTlUMjA6NDI6MjMuMFoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZWRpdW0iOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbWFpbEFkZHJlc3MiOiAiYWJjQHRtZm9ydW0uY29tIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZWZlcnJlZCI6IFRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIlRlbGVwaG9uZU51bWJlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWxpZEZvciI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXJ0RGF0ZVRpbWUiOiAiMjAxMy0wNC0xOVQyMDo0MjoyMy4wWiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lZGl1bSI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiYnVzaW5lc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJudW1iZXIiOiAiKzQzNjY0MTIzNDU2NyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgICAgICAgICAgICJjdXN0b21lckFjY291bnQiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWQiIDogIjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHJlZiI6ICJodHRwOi8vc2VydmVybG9jYXRpb246cG9ydC9jdXN0b21lck1hbmFnZW1lbnQvY3VzdG9tZXJBY2NvdW50LzEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJDdXN0b21lckFjY291bnQxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkN1c3RvbWVyQWNjb3VudERlc2MxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXR1cyI6ICJBY3RpdmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWQiIDoiMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHJlZiI6ICJodHRwOi8vc2VydmVybG9jYXRpb246cG9ydC9jdXN0b21lck1hbmFnZW1lbnQvY3VzdG9tZXJBY2NvdW50LzIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQ3VzdG9tZXJBY2NvdW50MiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ3VzdG9tZXJBY2NvdW50RGVzYzIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXR1cyI6ICJBY3RpdmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3VzdG9tZXJDcmVkaXRQcm9maWxlIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjcmVkaXRQcm9maWxlRGF0ZSI6ICIyMDEzLTA0LTE5VDIwOjQyOjIzLjBaIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsaWRGb3IiOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXJ0RGF0ZVRpbWUiOiAiMjAxMy0wNC0xOVQyMDo0MjoyMy4wWiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kRGF0ZVRpbWUiOiAiMjAxMy0wNi0xOVQwNDowMDowMC4wWiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNyZWRpdFJpc2tSYXRpbmciOiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjcmVkaXRTY29yZSI6IDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjcmVkaXRQcm9maWxlRGF0ZSI6ICIyMDEzLTA0LTE5VDIwOjQyOjIzLjBaIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhcnREYXRlVGltZSI6ICIyMDEzLTA0LTE5VDIwOjQyOjIzLjBaIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kRGF0ZVRpbWUiOiAiMjAxMy0wNi0xOVQwNDowMDowMC4wWiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3JlZGl0Umlza1JhdGluZyI6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjcmVkaXRTY29yZSI6IDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXltZW50TWVhbiI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlkIiA6ICI0NSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHJlZiI6ICJodHRwOi8vc2VydmVybG9jYXRpb246cG9ydC9jdXN0b21lck1hbmFnZW1lbnQvcGF5bWVudE1lYW4vNDUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAibXkgZmF2b3VyaXRlIHBheW1lbnQgbWVhbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZCIgOiAiNjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJocmVmIjogImh0dHA6Ly9zZXJ2ZXJsb2NhdGlvbjpwb3J0L2N1c3RvbWVyTWFuYWdlbWVudC9wYXltZW50TWVhbi82NCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAibXkgY3JlZGl0IGNhcmQgcGF5bWVudCBtZWFuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKPHxmaW1fZW5kfD4="]
["d42bc4029662554bb7a142b695fd6a04c8711ab6-1","d42bc4029662554bb7a142b695fd6a04c8711ab6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBvcwppbXBvcnQgc3lzCmltcG9ydCBicHkKZmlsZXBhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKc3lzLnBhdGguaW5zZXJ0KDAsIGZpbGVwYXRoKQpjb3JlX3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKCIuLi9TcGF0UmVsIikKc3lzLnBhdGguaW5zZXJ0KDAsIGNvcmVfcGF0aCkKZnJvbSBnZW9tZXRyeV91dGlscyBpbXBvcnQgaXNfaW5fcG9seWdvbiwgZmluZF9jbG9zZXN0X3BvaW50X29mX3BvbHlnb24KCgpjbGFzcyBTdGFiaWxpemVyOgoJZGVmIF9faW5pdF9fKHNlbGYsIGJsb2NrX2xvY2F0aW9ucywgc2l6ZSk6CgkJc2VsZi5ibG9ja19sb2NhdGlvbnMgPSBibG9ja19sb2NhdGlvbnMKCQkjc29ydCBhY2NvcmRpbmcgdG8gdGhlIHotY29vcmRpbmF0ZQoJCXNlbGYuYmxvY2tfbG9jYXRpb25zLnNvcnQocmV2ZXJzZT1UcnVlLCBrZXk9bGFtYmRhIHg6IHhbMl0pCgoJCXNlbGYuYmxvY2tfc2l6ZSA9IHNpemUKCQlzZWxmLmRpc3RhbmNlcyA9IHt9CgkJc2VsZi5hZGphY2VudCA9IHt9CgkJc2VsZi5kaXN0YW5jZV9tYXRyaXggPSB7fQoJCXNlbGYuc3VwcG9ydF9oaWVyYXJjaHkgPSB7fQoJCXNlbGYubmVpZ2hib3JzID0ge30KCgoJCWZvciBibG9jayBpbiBzZWxmLmJsb2NrX2xvY2F0aW9uczoKCQkJI0ZpbGwtaW4gdGhlIG1hdHJpeCBvZiBwYWlyd2lzZSBibG9jayBkaXN0YW5jZXMKCQkJaWYgYmxvY2sgbm90IGluIHNlbGYuZGlzdGFuY2VfbWF0cml4OgoJCQkJc2VsZi5kaXN0YW5jZV9tYXRyaXhbYmxvY2tdID0ge30KCQkJZm9yIGJsIGluIHNlbGYuYmxvY2tfbG9jYXRpb25zOgoKCQkJCWRpc3QgPSBucC5saW5hbGcubm9ybShucC5hcnJheShibG9jaykgLSBucC5hcnJheShibCkpCgkJCQlpZiBibCBub3QgaW4gc2VsZi5kaXN0YW5jZV9tYXRyaXg6CgkJCQkJc2VsZi5kaXN0YW5jZV9tYXRyaXhbYmxdID0ge30KCgkJCQlzZWxmLmRpc3RhbmNlX21hdHJpeFtibG9ja11bYmxdID0gZGlzdAoJCQkJc2VsZi5kaXN0YW5jZV9tYXRyaXhbYmxdW2Jsb2NrXSA9IGRpc3QKCgkJCSNDb21wdXRlIHNvcnRlZCBkaXN0YW5jZXMgZm9yIGEgZ2l2ZW4gYmxvY2sKCQkJc2VsZi5kaXN0YW5jZXNbYmxvY2tdID0gWyhpZHgsIG5wLmxpbmFsZy5ub3JtKG5wLmFycmF5KGJsb2NrKSAtIG5wLmFycmF5KHNlbGYuYmxvY2tfbG9jYXRpb25zW2lkeF0pKSkgZm9yIGlkeCBpbiByYW5nZShsZW4oc2VsZi5ibG9ja19sb2NhdGlvbnMpKV0KCQkJc2VsZi5kaXN0YW5jZXNbYmxvY2tdLnNvcnQoa2V5PWxhbWJkYSB4OiB4WzFdKQoKCQkJI0ZpbGwtaW4gbmVpZ2hib3JzIChjbG9zZSBibG9ja3MpIGZvciBhIGdpdmVuIGJsb2NrCgkJCXNlbGYubmVpZ2hib3JzW2Jsb2NrXSA9IFtzZWxmLmJsb2NrX2xvY2F0aW9uc1tpdGVtWzBdXSBmb3IgaXRlbSBpbiBzZWxmLmRpc3RhbmNlc1tibG9ja10gaWYgaXRlbVsxXSA8PSAxLjUgKiBzaXplXQoKCQkjRm9yIHRlc3RpbmcvZGVidWdnaW5nCgkJI3NhID0gc2VsZi5zdXBwb3J0X2FyZWEoc2VsZi5ibG9ja19sb2NhdGlvbnNbMF0pCgkJI3ByaW50IChzYSkKCQkjcHJpbnQoc2VsZi5kaXJlY3Rfc3VwcG9ydGVycyhzZWxmLmJsb2NrX2xvY2F0aW9uc1swXSksIHNlbGYuc3VwcG9ydGVycyhzZWxmLmJsb2NrX2xvY2F0aW9uc1swXSksIHNlbGYuc3VwcG9ydGVlcyhzZWxmLmJsb2NrX2xvY2F0aW9uc1stMV0pKQoKCWRlZiBzdXBwb3J0X2FyZWEoc2VsZiwgYmxvY2tzKToKCQkiIiIKCQlDb21wdXRlcyByZWN0YW5ndWxhciBzdXBwb3J0IGFyZWEgZm9yIGEgZ2l2ZW4gYmxvY2suCgkJVGhlIHN1cHBvcnQgYXJlYSBpcyB0aGUgbWluaW1hbCByZWN0YW5nbGUgdGhhdCBlbmNpcmNsZXMgYWxsIGRpcmVjdCBzdXBwb3J0ZXJzLgoJCSIiIgoJCWRpcmVjdF9zdXBwb3J0ZXJzID0gW10KCQlpZiBub3QgaXNpbnN0YW5jZShibG9ja3NbMF0sIGxpc3QpIGFuZCBub3QgaXNpbnN0YW5jZShibG9ja3NbMF0sIHR1cGxlKToJCQkKCQkJZGlyZWN0X3N1cHBvcnRlcnMgPSBzZWxmLmRpcmVjdF9zdXBwb3J0ZXJzKGJsb2NrcykKCQllbHNlOgoJCQlmb3IgYmwgaW4gYmxvY2tzOgoJCQkJZGlyZWN0X3N1cHBvcnRlcnMgKz0gc2VsZi5kaXJlY3Rfc3VwcG9ydGVycyhibCkKCQkjcHJpbnQgKGRpcmVjdF9zdXBwb3J0ZXJzKQoJCXhfbWluID0gMWUxMAoJCXhfbWF4ID0gLTFlMTAKCQl5X21pbiA9IDFlMTAKCQl5X21heCA9IC0xZTEwCgkJZm9yIGJsIGluIGRpcmVjdF9zdXBwb3J0ZXJzOgo8fGZpbV9ob2xlfD4KCgkJcmV0dXJuIFt4X21pbiwgeF9tYXgsIHlfbWluLCB5X21heF0KCgoJZGVmIHN1cHBvcnRfcG9seShzZWxmLCBibG9jayk6CgkJc3VwX2FyZWEgPSBzZWxmLnN1cHBvcnRfYXJlYShibG9jaykKCQkjcHJpbnQgKGJsb2NrLCBzdXBfYXJlYSkKCQlyZXR1cm4gW1tzdXBfYXJlYVswXSwgc3VwX2FyZWFbMl0sIDBdLCBbc3VwX2FyZWFbMF0sIHN1cF9hcmVhWzNdLCAwXSwKCQkJCVtzdXBfYXJlYVsxXSwgc3VwX2FyZWFbM10sIDBdLCBbc3VwX2FyZWFbMV0sIHN1cF9hcmVhWzJdLCAwXV0KCglkZWYgY2hlY2tfc2hhZG93X292ZXJsYXAoc2VsZiwgYmwxLCBibDIpOgoJCSIiIgoJCUNoZWNrIHdoZXRoZXIgYmxvY2sgYmwyIGlzIGluIHRoZSBzaGFkb3cgb2YgdGhlIGJsb2NrIGJsMSwgaS5lLiwgb3ZlcmxhcHMgaXQgYmwxJ3MgcHJvamVjdGlvbiBvbnRvCgkJdGhlIHh5LXBsYW5lLgoJCVJldHVybnMgYSBib29sZWFuIHZhbHVlIHJlZmxlY3Rpbmcgd2hldGhlciB0aGUgb3ZlcmxhcCBvY2N1cnMuCgkJIiIiCgoJCSNJZiBibDIgaXMgaGlnaGVyIG9yIGF0IHRoZSBzYW1lIGhlaWdodCBhcyBibDEsIGl0IGNhbm5vdCBvdmVybGFwIHdpdGggaXRzIHNoYWRvdwoJCWlmIGJsMlsyXSA+PSBibDFbMl06CgkJCXJldHVybiBGYWxzZQoKCQl4X292ZXJsYXAgPSBGYWxzZQoJCXlfb3ZlcmxhcCA9IEZhbHNlCgkJI0NoZWNrcyBpZiB0aGVyZSBpcyBhbiBvdmVybGFwIGFsb25nIHRoZSB4LWF4aXMKCQlpZiBibDJbMF0gKyBzZWxmLmJsb2NrX3NpemUgPj0gYmwxWzBdIC0gc2VsZi5ibG9ja19zaXplIGFuZCBibDJbMF0gKyBzZWxmLmJsb2NrX3NpemUgPD0gYmwxWzBdICsgc2VsZi5ibG9ja19zaXplIFwKCQkJb3IgYmwyWzBdIC0gc2VsZi5ibG9ja19zaXplID49IGJsMVswXSAtIHNlbGYuYmxvY2tfc2l6ZSBhbmQgYmwyWzBdIC0gc2VsZi5ibG9ja19zaXplIDw9IGJsMVswXSArIHNlbGYuYmxvY2tfc2l6ZToKCQkJeF9vdmVybGFwID0gVHJ1ZQoKCQkjQ2hlY2tzIGlmIHRoZXJlIGlzIGFuIG92ZXJsYXAgYWxvbmcgdGhlIHktYXhpcwoJCWlmIGJsMlsxXSArIHNlbGYuYmxvY2tfc2l6ZSA+PSBibDFbMV0gLSBzZWxmLmJsb2NrX3NpemUgYW5kIGJsMlsxXSArIHNlbGYuYmxvY2tfc2l6ZSA8PSBibDFbMV0gKyBzZWxmLmJsb2NrX3NpemUgXAoJCQlvciBibDJbMV0gLSBzZWxmLmJsb2NrX3NpemUgPj0gYmwxWzFdIC0gc2VsZi5ibG9ja19zaXplIGFuZCBibDJbMV0gLSBzZWxmLmJsb2NrX3NpemUgPD0gYmwxWzFdICsgc2VsZi5ibG9ja19zaXplOgoJCQl5X292ZXJsYXAgPSBUcnVlCgoJCSNibDIgb3ZlcmxhcHMgdGhlIHNoYWRvdyBvZiBibDEgaWYgYW5kIG9ubHkgaWYgaXQgb3ZlcmxhcHMgaXQgYWxvbmcgYm90aCBheGVzCgkJcmV0dXJuIHhfb3ZlcmxhcCBhbmQgeV9vdmVybGFwCgoJZGVmIGNvbXB1dGVfc2hhZG93X292ZXJsYXAoc2VsZiwgYmxvY2ssIGNhbmRpZGF0ZXMpOgoJCSIiIgoJCUdpdmVuIGEgbGlzdCBvZiBjYW5kaWRhdGUgYmxvY2tzLCBmaW5kIGFsbCBjYW5kaWRhdGVzIHRoYXQgb3ZlcmxhcCB0aGUgc2hhZG93IG9mIHRoZSBnaXZlbiBibG9jay4KCQlSZXR1cm5zIHRoZSBzdWJsaXN0IG9mIGNhbmRpZGF0ZXMgdGhhdCBkbyBvdmVybGFwLgoJCSIiIgoJCSNwcmludCAoIlNIQURPVzogIiwgYmxvY2ssIGNhbmRpZGF0ZXMpCgkJcmV0X3ZhbCA9IFtdCgkJZm9yIGJsIGluIGNhbmRpZGF0ZXM6CgkJCSNwcmludCAoYmxvY2ssIGJsLCBzZWxmLmNoZWNrX3NoYWRvd19vdmVybGFwKGJsb2NrLCBibCkpCgkJCWlmIHNlbGYuY2hlY2tfc2hhZG93X292ZXJsYXAoYmxvY2ssIGJsKToKCQkJCXJldF92YWwuYXBwZW5kKGJsKQoKCQlyZXR1cm4gcmV0X3ZhbAoKCWRlZiBkaXJlY3Rfc3VwcG9ydGVycyhzZWxmLCBibG9jayk6CgkJIiIiCgkJRmluZHMgYWxsIHRoZSBkaXJlY3QgKHZlcnRpY2FsKSBzdXBwb3J0ZXJzIG9mIHRoZSBibG9jawoJCSIiIgoKCQkjU3VwcG9ydGVycyBtdXN0IG92ZXJsYXAgdGhlIHNoYWRvdyBhbmQgYmUgbmVpZ2hib3JzCgkJcmV0X3ZhbCA9IFtdCgkJaW5fdGhlX3NoYWRvdyA9IHNlbGYuY29tcHV0ZV9zaGFkb3dfb3ZlcmxhcChibG9jaywgc2VsZi5ibG9ja19sb2NhdGlvbnMpCgkJI3ByaW50IChibG9jaywgaW5fdGhlX3NoYWRvdykKCQlmb3IgYmwgaW4gaW5fdGhlX3NoYWRvdzoKCQkJaWYgYmwgaW4gc2VsZi5uZWlnaGJvcnNbYmxvY2tdOgoJCQkJcmV0X3ZhbC5hcHBlbmQoYmwpCgoJCXJldHVybiByZXRfdmFsCgoJZGVmIHN1cHBvcnRlcnMoc2VsZiwgYmxvY2spOgoJCXN1cHBvcnRlcnMgPSBbXQoJCXF1ZXVlID0gc2VsZi5kaXJlY3Rfc3VwcG9ydGVycyhibG9jaykKCQl3aGlsZSBsZW4ocXVldWUpID4gMDoKCQkJc3VwcCA9IHF1ZXVlLnBvcCgwKQoJCQlzdXBwb3J0ZXJzLmFwcGVuZChzdXBwKQoJCQlxdWV1ZSArPSBzZWxmLmRpcmVjdF9zdXBwb3J0ZXJzKHN1cHApCgoJCXJldHVybiBzdXBwb3J0ZXJzCgoJZGVmIHN1cHBvcnRlZXMoc2VsZiwgYmxvY2spOgoJCSIiIgoJCUZpbmRzIGFsbCB0aGUgc3VwcG9ydGVlcyBvZiB0aGUgYmxvY2suCgkJIiIiCgoJCSNJZiBBIGlzIGEgc3VwcG9ydGVlIG9mIEIsIHRoZW4gQiBpcyBhIHN1cHBvcnRlciBvZiBBCgkJcmV0X3ZhbCA9IFtdCgkJZm9yIGJsIGluIHNlbGYuYmxvY2tfbG9jYXRpb25zOgoJCQlpZiBibG9jayBpbiBzZWxmLnN1cHBvcnRlcnMoYmwpOgoJCQkJcmV0X3ZhbC5hcHBlbmQoYmwpCgoJCXJldHVybiByZXRfdmFsCgoJZGVmIHN0YWJpbGl6ZShzZWxmLCBibG9ja3M9Tm9uZSk6CgkJIiIiCgkJVGhlIG1haW4gbWV0aG9kIGZvciB0aGUgc3RhYmlsaXR5IGNoZWNraW5nL2VuZm9yY2luZyBhbGdvcml0aG0uCgkJIiIiCgkJaWYgYmxvY2tzIGlzIE5vbmU6CgkJCWJsb2NrcyA9IHNlbGYuYmxvY2tfbG9jYXRpb25zCgoKCQlmb3IgYmwgaW4gYmxvY2tzOgoJCQlaID0ge2JsfQoJCQlzdXBwb3J0ZXJzID0gc2VsZi5zdXBwb3J0ZXJzKGJsKQoJCQlzdXBwb3J0ZWVzID0gc2VsZi5zdXBwb3J0ZWVzKGJsKQoJCQlYID0ge2JsfS51bmlvbihzdXBwb3J0ZXJzLCBzdXBwb3J0ZWVzKQoKCQkJZm9yIHMgaW4gc3VwcG9ydGVlczoKCQkJCXN1cF9zZXQgPSBzZXQoc2VsZi5zdXBwb3J0ZXJzKHMpKQoJCQkJI3ByaW50IChzLCBzdXBfc2V0LCBYLCBaKQoJCQkJaWYgc3VwX3NldC5pc3N1YnNldChYKToKCQkJCQlaLmFkZChzKQkJCQoJCQl2cG1jID0gc2VsZi5WUE1DKFopCQkJCgkJCXN1cEIgPSBzZWxmLnN1cHBvcnRfcG9seShibCkKCQkJcHJpbnQgKCJibDogIiwgYmwpCgkJCXByaW50ICgiWjogIiwgWikKCQkJcHJpbnQgKCJWUE1DOiAiLCB2cG1jLCBzdXBCLCBzZWxmLmlzX1ZQTUNfaW5fc3VwKHZwbWMsIGJsKSkJCQkKCQkJaWYgbm90IHNlbGYuaXNfVlBNQ19pbl9zdXAodnBtYywgYmwpOgoJCQkJI3ByaW50ICh2cG1jLCBzdXBCKQoJCQkJcCA9IGZpbmRfY2xvc2VzdF9wb2ludF9vZl9wb2x5Z29uKHZwbWMsIHN1cEIpCgkJCQkjQSA9IHN1cEIKCQkJCXByaW50ICgicDogIiwgcCkKCQkJCXByaW50ICgiU1VQUDogIiwgc3VwcG9ydGVlcykKCQkJCXByaW50ICgpCgkJCQlmb3IgTiBpbiBzdXBwb3J0ZWVzOgoJCQkJCWlmIE4gbm90IGluIFogYW5kIHNlbGYub3ZlcmxhcHMoTiwgc3VwQik6CgkJCQkJCVouYWRkKE4pCgkJCQlzdXBaID0gc2VsZi5zdXBwb3J0X2FyZWEobGlzdChaKSkKCQkJCWlmIG5vdCBzZWxmLmlzX1ZQTUNfaW5fc3VwKHZwbWMsIHN1cFopOgoJCQkJCXZwbWMxID0gc2VsZi5WTVBDKFopCgkJCQkJcmV0dXJuIEZhbHNlCgkJcmV0dXJuIFRydWUKCglkZWYgb3ZlcmxhcHMoc2VsZiwgYmxvY2ssIGFyZWEpOiAgICAgICAgCgkJb3ZlcmxhcCA9IGlzX2luX3BvbHlnb24oYXJlYSwgKGJsb2NrWzBdIC0gc2VsZi5zaXplIC8gMiwgYmxvY2tbMV0gLSBzZWxmLnNpemUgLyAyLCAwKSkgb3IgXAoJCWlzX2luX3BvbHlnb24oYXJlYSwgKGJsb2NrWzBdIC0gc2VsZi5zaXplIC8gMiwgYmxvY2tbMV0gKyBzZWxmLnNpemUgLyAyLCAwKSkgb3IgXAoJCWlzX2luX3BvbHlnb24oYXJlYSwgKGJsb2NrWzBdICsgc2VsZi5zaXplIC8gMiwgYmxvY2tbMV0gLSBzZWxmLnNpemUgLyAyLCAwKSkgb3IgXAoJCWlzX2luX3BvbHlnb24oYXJlYSwgKGJsb2NrWzBdICsgc2VsZi5zaXplIC8gMiwgYmxvY2tbMV0gKyBzZWxmLnNpemUgLyAyLCAwKSkKCQlyZXR1cm4gb3ZlcmxhcAoKCWRlZiBWUE1DKHNlbGYsIGJsb2Nrcyk6CQkKCQl2cG1jID0gbnAuYXZlcmFnZShsaXN0KGJsb2NrcyksIGF4aXM9MCkKCQl2cG1jWzJdID0gMAoJCXJldHVybiB2cG1jCgoJZGVmIGlzX1ZQTUNfaW5fc3VwKHNlbGYsIFZQTUMsIGJsb2NrKToKCQlwb2x5ID0gc2VsZi5zdXBwb3J0X3BvbHkoYmxvY2spCgkJcmV0dXJuIGlzX2luX3BvbHlnb24ocG9seSwgVlBNQykKCglkZWYgaXNfbGV2ZWxfbmVpZ2hib3VyKHNlbGYsIGJsb2NrLCBuZWlnaGJvdXIpOgoJCSMgaWYgYmxvY2sgYW5kIG5laWdoYm91ciBhcmUgb24gc2FtZSBheGlzCgkJb25fc2FtZV9oZWlnaHQgPSBucC5hYnNvbHV0ZShibG9ja1syXSAtIG5laWdoYm91clsyXSkgPCAwLjEgKiBzZWxmLmJsb2NrX3NpemUKCQlwb2x5ID0gW1tibG9ja3NbMF0gKyBibG9ja19zaXplLzIsIGJsb2Nrc1sxXSArIGJsb2NrX3NpemUvMiwgYmxvY2tzWzJdIC0gYmxvY2tfc2l6ZS8yXSwKCQlbYmxvY2tzWzBdIC0gYmxvY2tfc2l6ZS8yLCBibG9ja3NbMV0gKyBibG9ja19zaXplLzIsIGJsb2Nrc1syXSAtIGJsb2NrX3NpemUvMl0sCgkJW2Jsb2Nrc1swXSArIGJsb2NrX3NpemUvMiwgYmxvY2tzWzFdIC0gYmxvY2tfc2l6ZS8yLCBibG9ja3NbMl0gLSBibG9ja19zaXplLzJdLAoJCVtibG9ja3NbMF0gLSBibG9ja19zaXplLzIsIGJsb2Nrc1sxXSAtIGJsb2NrX3NpemUvMiwgYmxvY2tzWzJdIC0gYmxvY2tfc2l6ZS8yXV0KCQlzdXBwID0gc2VsZi5zdXBwb3J0X2FyZWEoYmxvY2spCgkJCgkJYmxvY2tfc3VwcG9ydGVkID0gaXNfaW5fcG9seWdvbihwb2x5LCBzZWxmLlZQTUMoYmxvY2spKQoKCQlpZiBub3QgYmxvY2tfc3VwcG9ydGVkIGFuZCBvbl9zYW1lX2hlaWdodDoKCQkJIyBpZiBibG9jayBhbmQgbmVpZ2hib3VyIGFyZSB3aXRoaW4gOTAlIHRvIDExMCUgb2YgYmxvY2tfc2l6ZSBvZgoJCQkjIGVhY2ggb3RoZXIgaW4gdGhlIHggKG9yIHkgYXhpcyksIHdlIGNvbnNpZGVyIGl0IGEgbmVpZ2hib3VyCgkJCWlmIChucC5hYnNvbHV0ZShibG9ja1swXSAtIG5laWdoYm91clswXSkgPiAwLjkgKiBzZWxmLmJsb2NrX3NpemUKCQkJYW5kIG5wLmFic29sdXRlKGJsb2NrWzBdIC0gbmVpZ2hib3VyWzBdKSA8IDEuMSAqIHNlbGYuYmxvY2tfc2l6ZSkgb3IgXAoJCQkobnAuYWJzb2x1dGUoYmxvY2tbMV0gLSBuZWlnaGJvdXJbMV0pID4gMC45ICogc2VsZi5ibG9ja19zaXplCgkJCWFuZCBucC5hYnNvbHV0ZShibG9ja1sxXSAtIG5laWdoYm91clsxXSkgPCAxLjEgKiBzZWxmLmJsb2NrX3NpemUpOgoJCQkJcmV0dXJuIFRydWUKCQkJIyBlbGlmIChudW1weS5hYnNvbHV0ZShibG9ja1sxXSAtIG5laWdoYm91clsxXSkgPiAwLjkgKiBzZWxmLmJsb2NrX3NpemUKCQkJIyBhbmQgbnVtcHkuYWJzb2x1dGUoYmxvY2tbMV0gLSBuZWlnaGJvdXJbMV0pIDwgMS4xICogc2VsZi5ibG9ja19zaXplKToKCQkJIyAgICAgcmV0dXJuIFRydWUKCQlyZXR1cm4gRmFsc2UKCgkjIGRlZiBzdXBwb3J0ZWVzKHNlbGYsIGJsb2NrKToKCSMgIiIiCgkjIEZpbmRzIGFsbCB0aGUgc3VwcG9ydGVlcyBvZiB0aGUgYmxvY2suCgkjICIiIgoKCSMgI0lmIEEgaXMgYSBzdXBwb3J0ZWUgb2YgQiwgdGhlbiBCIGlzIGEgc3VwcG9ydGVyIG9mIEEKCSMgcmV0X3ZhbCA9IFtdCgkjIGZvciBibCBpbiBzZWxmLmJsb2NrX2xvY2F0aW9uczoKCSMgICAgIGlmIGJsb2NrIGluIHNlbGYuc3VwcG9ydGVycyhibCk6CgkjICAgICAgICAgcmV0X3ZhbC5hcHBlbmQoYmwpCgkjICAgICBlbHNlIGlmIGlzX25laWdoYm91cihibG9jaywgYmwpOgoJIyAgICAgICAgIHJldF92YWwuYXBwZW5kKGJsKQoKCSMgcmV0dXJuIHJldF92YWwKCm9iamVjdHMgPSBicHkuY29udGV4dC5zY2VuZS5vYmplY3RzCmJsb2NrcyA9IFt0dXBsZShvYmoubG9jYXRpb24pIGZvciBvYmogaW4gb2JqZWN0c10KcHJpbnQgKGJsb2NrcykKI3N0YWIgPSBTdGFiaWxpemVyKFsoMCwgMCwgMCksICgxLCAwLCAwKSwgKDAsIDAsIDEpLCAoMCwgMCwgMildLCAxKQpzdGFiID0gU3RhYmlsaXplcihibG9ja3MsIDEpCnByaW50IChzdGFiLnN0YWJpbGl6ZSgpKQo8fGZpbV9zdWZmaXh8PgoJCQl4X21pbiA9IG1pbih4X21pbiwgYmxbMF0gLSBzZWxmLmJsb2NrX3NpemUvMikKCQkJeF9tYXggPSBtYXgoeF9tYXgsIGJsWzBdICsgc2VsZi5ibG9ja19zaXplLzIpCgkJCXlfbWluID0gbWluKHlfbWluLCBibFsxXSAtIHNlbGYuYmxvY2tfc2l6ZS8yKQoJCQl5X21heCA9IG1heCh5X21heCwgYmxbMV0gKyBzZWxmLmJsb2NrX3NpemUvMikKPHxmaW1fZW5kfD4="]
["d42bc4029662554bb7a142b695fd6a04c8711ab6-2","d42bc4029662554bb7a142b695fd6a04c8711ab6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBvcwppbXBvcnQgc3lzCmltcG9ydCBicHkKZmlsZXBhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKc3lzLnBhdGguaW5zZXJ0KDAsIGZpbGVwYXRoKQpjb3JlX3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKCIuLi9TcGF0UmVsIikKc3lzLnBhdGguaW5zZXJ0KDAsIGNvcmVfcGF0aCkKZnJvbSBnZW9tZXRyeV91dGlscyBpbXBvcnQgaXNfaW5fcG9seWdvbiwgZmluZF9jbG9zZXN0X3BvaW50X29mX3BvbHlnb24KCgpjbGFzcyBTdGFiaWxpemVyOgoJZGVmIF9faW5pdF9fKHNlbGYsIGJsb2NrX2xvY2F0aW9ucywgc2l6ZSk6CgkJc2VsZi5ibG9ja19sb2NhdGlvbnMgPSBibG9ja19sb2NhdGlvbnMKCQkjc29ydCBhY2NvcmRpbmcgdG8gdGhlIHotY29vcmRpbmF0ZQoJCXNlbGYuYmxvY2tfbG9jYXRpb25zLnNvcnQocmV2ZXJzZT1UcnVlLCBrZXk9bGFtYmRhIHg6IHhbMl0pCgoJCXNlbGYuYmxvY2tfc2l6ZSA9IHNpemUKCQlzZWxmLmRpc3RhbmNlcyA9IHt9CgkJc2VsZi5hZGphY2VudCA9IHt9CgkJc2VsZi5kaXN0YW5jZV9tYXRyaXggPSB7fQoJCXNlbGYuc3VwcG9ydF9oaWVyYXJjaHkgPSB7fQoJCXNlbGYubmVpZ2hib3JzID0ge30KCgoJCWZvciBibG9jayBpbiBzZWxmLmJsb2NrX2xvY2F0aW9uczoKCQkJI0ZpbGwtaW4gdGhlIG1hdHJpeCBvZiBwYWlyd2lzZSBibG9jayBkaXN0YW5jZXMKCQkJaWYgYmxvY2sgbm90IGluIHNlbGYuZGlzdGFuY2VfbWF0cml4OgoJCQkJc2VsZi5kaXN0YW5jZV9tYXRyaXhbYmxvY2tdID0ge30KCQkJZm9yIGJsIGluIHNlbGYuYmxvY2tfbG9jYXRpb25zOgoKCQkJCWRpc3QgPSBucC5saW5hbGcubm9ybShucC5hcnJheShibG9jaykgLSBucC5hcnJheShibCkpCgkJCQlpZiBibCBub3QgaW4gc2VsZi5kaXN0YW5jZV9tYXRyaXg6CgkJCQkJc2VsZi5kaXN0YW5jZV9tYXRyaXhbYmxdID0ge30KCgkJCQlzZWxmLmRpc3RhbmNlX21hdHJpeFtibG9ja11bYmxdID0gZGlzdAoJCQkJc2VsZi5kaXN0YW5jZV9tYXRyaXhbYmxdW2Jsb2NrXSA9IGRpc3QKCgkJCSNDb21wdXRlIHNvcnRlZCBkaXN0YW5jZXMgZm9yIGEgZ2l2ZW4gYmxvY2sKCQkJc2VsZi5kaXN0YW5jZXNbYmxvY2tdID0gWyhpZHgsIG5wLmxpbmFsZy5ub3JtKG5wLmFycmF5KGJsb2NrKSAtIG5wLmFycmF5KHNlbGYuYmxvY2tfbG9jYXRpb25zW2lkeF0pKSkgZm9yIGlkeCBpbiByYW5nZShsZW4oc2VsZi5ibG9ja19sb2NhdGlvbnMpKV0KCQkJc2VsZi5kaXN0YW5jZXNbYmxvY2tdLnNvcnQoa2V5PWxhbWJkYSB4OiB4WzFdKQoKCQkJI0ZpbGwtaW4gbmVpZ2hib3JzIChjbG9zZSBibG9ja3MpIGZvciBhIGdpdmVuIGJsb2NrCgkJCXNlbGYubmVpZ2hib3JzW2Jsb2NrXSA9IFtzZWxmLmJsb2NrX2xvY2F0aW9uc1tpdGVtWzBdXSBmb3IgaXRlbSBpbiBzZWxmLmRpc3RhbmNlc1tibG9ja10gaWYgaXRlbVsxXSA8PSAxLjUgKiBzaXplXQoKCQkjRm9yIHRlc3RpbmcvZGVidWdnaW5nCgkJI3NhID0gc2VsZi5zdXBwb3J0X2FyZWEoc2VsZi5ibG9ja19sb2NhdGlvbnNbMF0pCgkJI3ByaW50IChzYSkKCQkjcHJpbnQoc2VsZi5kaXJlY3Rfc3VwcG9ydGVycyhzZWxmLmJsb2NrX2xvY2F0aW9uc1swXSksIHNlbGYuc3VwcG9ydGVycyhzZWxmLmJsb2NrX2xvY2F0aW9uc1swXSksIHNlbGYuc3VwcG9ydGVlcyhzZWxmLmJsb2NrX2xvY2F0aW9uc1stMV0pKQoKCWRlZiBzdXBwb3J0X2FyZWEoc2VsZiwgYmxvY2tzKToKCQkiIiIKCQlDb21wdXRlcyByZWN0YW5ndWxhciBzdXBwb3J0IGFyZWEgZm9yIGEgZ2l2ZW4gYmxvY2suCgkJVGhlIHN1cHBvcnQgYXJlYSBpcyB0aGUgbWluaW1hbCByZWN0YW5nbGUgdGhhdCBlbmNpcmNsZXMgYWxsIGRpcmVjdCBzdXBwb3J0ZXJzLgoJCSIiIgoJCWRpcmVjdF9zdXBwb3J0ZXJzID0gW10KCQlpZiBub3QgaXNpbnN0YW5jZShibG9ja3NbMF0sIGxpc3QpIGFuZCBub3QgaXNpbnN0YW5jZShibG9ja3NbMF0sIHR1cGxlKToJCQkKCQkJZGlyZWN0X3N1cHBvcnRlcnMgPSBzZWxmLmRpcmVjdF9zdXBwb3J0ZXJzKGJsb2NrcykKCQllbHNlOgoJCQlmb3IgYmwgaW4gYmxvY2tzOgoJCQkJZGlyZWN0X3N1cHBvcnRlcnMgKz0gc2VsZi5kaXJlY3Rfc3VwcG9ydGVycyhibCkKCQkjcHJpbnQgKGRpcmVjdF9zdXBwb3J0ZXJzKQoJCXhfbWluID0gMWUxMAoJCXhfbWF4ID0gLTFlMTAKCQl5X21pbiA9IDFlMTAKCQl5X21heCA9IC0xZTEwCgkJZm9yIGJsIGluIGRpcmVjdF9zdXBwb3J0ZXJzOgoJCQl4X21pbiA9IG1pbih4X21pbiwgYmxbMF0gLSBzZWxmLmJsb2NrX3NpemUvMikKCQkJeF9tYXggPSBtYXgoeF9tYXgsIGJsWzBdICsgc2VsZi5ibG9ja19zaXplLzIpCgkJCXlfbWluID0gbWluKHlfbWluLCBibFsxXSAtIHNlbGYuYmxvY2tfc2l6ZS8yKQoJCQl5X21heCA9IG1heCh5X21heCwgYmxbMV0gKyBzZWxmLmJsb2NrX3NpemUvMikKCgkJcmV0dXJuIFt4X21pbiwgeF9tYXgsIHlfbWluLCB5X21heF0KCgoJZGVmIHN1cHBvcnRfcG9seShzZWxmLCBibG9jayk6CgkJc3VwX2FyZWEgPSBzZWxmLnN1cHBvcnRfYXJlYShibG9jaykKCQkjcHJpbnQgKGJsb2NrLCBzdXBfYXJlYSkKCQlyZXR1cm4gW1tzdXBfYXJlYVswXSwgc3VwX2FyZWFbMl0sIDBdLCBbc3VwX2FyZWFbMF0sIHN1cF9hcmVhWzNdLCAwXSwKCQkJCVtzdXBfYXJlYVsxXSwgc3VwX2FyZWFbM10sIDBdLCBbc3VwX2FyZWFbMV0sIHN1cF9hcmVhWzJdLCAwXV0KCglkZWYgY2hlY2tfc2hhZG93X292ZXJsYXAoc2VsZiwgYmwxLCBibDIpOgoJCSIiIgoJCUNoZWNrIHdoZXRoZXIgYmxvY2sgYmwyIGlzIGluIHRoZSBzaGFkb3cgb2YgdGhlIGJsb2NrIGJsMSwgaS5lLiwgb3ZlcmxhcHMgaXQgYmwxJ3MgcHJvamVjdGlvbiBvbnRvCgkJdGhlIHh5LXBsYW5lLgoJCVJldHVybnMgYSBib29sZWFuIHZhbHVlIHJlZmxlY3Rpbmcgd2hldGhlciB0aGUgb3ZlcmxhcCBvY2N1cnMuCgkJIiIiCgoJCSNJZiBibDIgaXMgaGlnaGVyIG9yIGF0IHRoZSBzYW1lIGhlaWdodCBhcyBibDEsIGl0IGNhbm5vdCBvdmVybGFwIHdpdGggaXRzIHNoYWRvdwoJCWlmIGJsMlsyXSA+PSBibDFbMl06CgkJCXJldHVybiBGYWxzZQoKCQl4X292ZXJsYXAgPSBGYWxzZQoJCXlfb3ZlcmxhcCA9IEZhbHNlCgkJI0NoZWNrcyBpZiB0aGVyZSBpcyBhbiBvdmVybGFwIGFsb25nIHRoZSB4LWF4aXMKCQlpZiBibDJbMF0gKyBzZWxmLmJsb2NrX3NpemUgPj0gYmwxWzBdIC0gc2VsZi5ibG9ja19zaXplIGFuZCBibDJbMF0gKyBzZWxmLmJsb2NrX3NpemUgPD0gYmwxWzBdICsgc2VsZi5ibG9ja19zaXplIFwKCQkJb3IgYmwyWzBdIC0gc2VsZi5ibG9ja19zaXplID49IGJsMVswXSAtIHNlbGYuYmxvY2tfc2l6ZSBhbmQgYmwyWzBdIC0gc2VsZi5ibG9ja19zaXplIDw9IGJsMVswXSArIHNlbGYuYmxvY2tfc2l6ZToKCQkJeF9vdmVybGFwID0gVHJ1ZQoKCQkjQ2hlY2tzIGlmIHRoZXJlIGlzIGFuIG92ZXJsYXAgYWxvbmcgdGhlIHktYXhpcwoJCWlmIGJsMlsxXSArIHNlbGYuYmxvY2tfc2l6ZSA+PSBibDFbMV0gLSBzZWxmLmJsb2NrX3NpemUgYW5kIGJsMlsxXSArIHNlbGYuYmxvY2tfc2l6ZSA8PSBibDFbMV0gKyBzZWxmLmJsb2NrX3NpemUgXAoJCQlvciBibDJbMV0gLSBzZWxmLmJsb2NrX3NpemUgPj0gYmwxWzFdIC0gc2VsZi5ibG9ja19zaXplIGFuZCBibDJbMV0gLSBzZWxmLmJsb2NrX3NpemUgPD0gYmwxWzFdICsgc2VsZi5ibG9ja19zaXplOgoJCQl5X292ZXJsYXAgPSBUcnVlCgoJCSNibDIgb3ZlcmxhcHMgdGhlIHNoYWRvdyBvZiBibDEgaWYgYW5kIG9ubHkgaWYgaXQgb3ZlcmxhcHMgaXQgYWxvbmcgYm90aCBheGVzCgkJcmV0dXJuIHhfb3ZlcmxhcCBhbmQgeV9vdmVybGFwCgoJZGVmIGNvbXB1dGVfc2hhZG93X292ZXJsYXAoc2VsZiwgYmxvY2ssIGNhbmRpZGF0ZXMpOgoJCSIiIgoJCUdpdmVuIGEgbGlzdCBvZiBjYW5kaWRhdGUgYmxvY2tzLCBmaW5kIGFsbCBjYW5kaWRhdGVzIHRoYXQgb3ZlcmxhcCB0aGUgc2hhZG93IG9mIHRoZSBnaXZlbiBibG9jay4KCQlSZXR1cm5zIHRoZSBzdWJsaXN0IG9mIGNhbmRpZGF0ZXMgdGhhdCBkbyBvdmVybGFwLgoJCSIiIgoJCSNwcmludCAoIlNIQURPVzogIiwgYmxvY2ssIGNhbmRpZGF0ZXMpCgkJcmV0X3ZhbCA9IFtdCgkJZm9yIGJsIGluIGNhbmRpZGF0ZXM6CgkJCSNwcmludCAoYmxvY2ssIGJsLCBzZWxmLmNoZWNrX3NoYWRvd19vdmVybGFwKGJsb2NrLCBibCkpCgkJCWlmIHNlbGYuY2hlY2tfc2hhZG93X292ZXJsYXAoYmxvY2ssIGJsKToKCQkJCXJldF92YWwuYXBwZW5kKGJsKQoKCQlyZXR1cm4gcmV0X3ZhbAoKCWRlZiBkaXJlY3Rfc3VwcG9ydGVycyhzZWxmLCBibG9jayk6CgkJIiIiCgkJRmluZHMgYWxsIHRoZSBkaXJlY3QgKHZlcnRpY2FsKSBzdXBwb3J0ZXJzIG9mIHRoZSBibG9jawoJCSIiIgoKCQkjU3VwcG9ydGVycyBtdXN0IG92ZXJsYXAgdGhlIHNoYWRvdyBhbmQgYmUgbmVpZ2hib3JzCgkJcmV0X3ZhbCA9IFtdCgkJaW5fdGhlX3NoYWRvdyA9IHNlbGYuY29tcHV0ZV9zaGFkb3dfb3ZlcmxhcChibG9jaywgc2VsZi5ibG9ja19sb2NhdGlvbnMpCgkJI3ByaW50IChibG9jaywgaW5fdGhlX3NoYWRvdykKCQlmb3IgYmwgaW4gaW5fdGhlX3NoYWRvdzoKCQkJaWYgYmwgaW4gc2VsZi5uZWlnaGJvcnNbYmxvY2tdOgoJCQkJcmV0X3ZhbC5hcHBlbmQoYmwpCgoJCXJldHVybiByZXRfdmFsCgoJZGVmIHN1cHBvcnRlcnMoc2VsZiwgYmxvY2spOgoJCXN1cHBvcnRlcnMgPSBbXQoJCXF1ZXVlID0gc2VsZi5kaXJlY3Rfc3VwcG9ydGVycyhibG9jaykKCQl3aGlsZSBsZW4ocXVldWUpID4gMDoKCQkJc3VwcCA9IHF1ZXVlLnBvcCgwKQoJCQlzdXBwb3J0ZXJzLmFwcGVuZChzdXBwKQoJCQlxdWV1ZSArPSBzZWxmLmRpcmVjdF9zdXBwb3J0ZXJzKHN1cHApCgoJCXJldHVybiBzdXBwb3J0ZXJzCgoJZGVmIHN1cHBvcnRlZXMoc2VsZiwgYmxvY2spOgoJCSIiIgoJCUZpbmRzIGFsbCB0aGUgc3VwcG9ydGVlcyBvZiB0aGUgYmxvY2suCgkJIiIiCgoJCSNJZiBBIGlzIGEgc3VwcG9ydGVlIG9mIEIsIHRoZW4gQiBpcyBhIHN1cHBvcnRlciBvZiBBCgkJcmV0X3ZhbCA9IFtdCgkJZm9yIGJsIGluIHNlbGYuYmxvY2tfbG9jYXRpb25zOgoJCQlpZiBibG9jayBpbiBzZWxmLnN1cHBvcnRlcnMoYmwpOgoJCQkJcmV0X3ZhbC5hcHBlbmQoYmwpCgoJCXJldHVybiByZXRfdmFsCgoJZGVmIHN0YWJpbGl6ZShzZWxmLCBibG9ja3M9Tm9uZSk6CgkJIiIiCgkJVGhlIG1haW4gbWV0aG9kIGZvciB0aGUgc3RhYmlsaXR5IGNoZWNraW5nL2VuZm9yY2luZyBhbGdvcml0aG0uCgkJIiIiCgkJaWYgYmxvY2tzIGlzIE5vbmU6CgkJCWJsb2NrcyA9IHNlbGYuYmxvY2tfbG9jYXRpb25zCgoKCQlmb3IgYmwgaW4gYmxvY2tzOgoJCQlaID0ge2JsfQoJCQlzdXBwb3J0ZXJzID0gc2VsZi5zdXBwb3J0ZXJzKGJsKQoJCQlzdXBwb3J0ZWVzID0gc2VsZi5zdXBwb3J0ZWVzKGJsKQoJCQlYID0ge2JsfS51bmlvbihzdXBwb3J0ZXJzLCBzdXBwb3J0ZWVzKQoKCQkJZm9yIHMgaW4gc3VwcG9ydGVlczoKCQkJCXN1cF9zZXQgPSBzZXQoc2VsZi5zdXBwb3J0ZXJzKHMpKQoJCQkJI3ByaW50IChzLCBzdXBfc2V0LCBYLCBaKQoJCQkJaWYgc3VwX3NldC5pc3N1YnNldChYKToKCQkJCQlaLmFkZChzKQkJCQoJCQl2cG1jID0gc2VsZi5WUE1DKFopCQkJCgkJCXN1cEIgPSBzZWxmLnN1cHBvcnRfcG9seShibCkKCQkJcHJpbnQgKCJibDogIiwgYmwpCgkJCXByaW50ICgiWjogIiwgWikKCQkJcHJpbnQgKCJWUE1DOiAiLCB2cG1jLCBzdXBCLCBzZWxmLmlzX1ZQTUNfaW5fc3VwKHZwbWMsIGJsKSkJCQkKCQkJaWYgbm90IHNlbGYuaXNfVlBNQ19pbl9zdXAodnBtYywgYmwpOgoJCQkJI3ByaW50ICh2cG1jLCBzdXBCKQoJCQkJcCA9IGZpbmRfY2xvc2VzdF9wb2ludF9vZl9wb2x5Z29uKHZwbWMsIHN1cEIpCgkJCQkjQSA9IHN1cEIKCQkJCXByaW50ICgicDogIiwgcCkKPHxmaW1faG9sZXw+CgkJCQkJCVouYWRkKE4pCgkJCQlzdXBaID0gc2VsZi5zdXBwb3J0X2FyZWEobGlzdChaKSkKCQkJCWlmIG5vdCBzZWxmLmlzX1ZQTUNfaW5fc3VwKHZwbWMsIHN1cFopOgoJCQkJCXZwbWMxID0gc2VsZi5WTVBDKFopCgkJCQkJcmV0dXJuIEZhbHNlCgkJcmV0dXJuIFRydWUKCglkZWYgb3ZlcmxhcHMoc2VsZiwgYmxvY2ssIGFyZWEpOiAgICAgICAgCgkJb3ZlcmxhcCA9IGlzX2luX3BvbHlnb24oYXJlYSwgKGJsb2NrWzBdIC0gc2VsZi5zaXplIC8gMiwgYmxvY2tbMV0gLSBzZWxmLnNpemUgLyAyLCAwKSkgb3IgXAoJCWlzX2luX3BvbHlnb24oYXJlYSwgKGJsb2NrWzBdIC0gc2VsZi5zaXplIC8gMiwgYmxvY2tbMV0gKyBzZWxmLnNpemUgLyAyLCAwKSkgb3IgXAoJCWlzX2luX3BvbHlnb24oYXJlYSwgKGJsb2NrWzBdICsgc2VsZi5zaXplIC8gMiwgYmxvY2tbMV0gLSBzZWxmLnNpemUgLyAyLCAwKSkgb3IgXAoJCWlzX2luX3BvbHlnb24oYXJlYSwgKGJsb2NrWzBdICsgc2VsZi5zaXplIC8gMiwgYmxvY2tbMV0gKyBzZWxmLnNpemUgLyAyLCAwKSkKCQlyZXR1cm4gb3ZlcmxhcAoKCWRlZiBWUE1DKHNlbGYsIGJsb2Nrcyk6CQkKCQl2cG1jID0gbnAuYXZlcmFnZShsaXN0KGJsb2NrcyksIGF4aXM9MCkKCQl2cG1jWzJdID0gMAoJCXJldHVybiB2cG1jCgoJZGVmIGlzX1ZQTUNfaW5fc3VwKHNlbGYsIFZQTUMsIGJsb2NrKToKCQlwb2x5ID0gc2VsZi5zdXBwb3J0X3BvbHkoYmxvY2spCgkJcmV0dXJuIGlzX2luX3BvbHlnb24ocG9seSwgVlBNQykKCglkZWYgaXNfbGV2ZWxfbmVpZ2hib3VyKHNlbGYsIGJsb2NrLCBuZWlnaGJvdXIpOgoJCSMgaWYgYmxvY2sgYW5kIG5laWdoYm91ciBhcmUgb24gc2FtZSBheGlzCgkJb25fc2FtZV9oZWlnaHQgPSBucC5hYnNvbHV0ZShibG9ja1syXSAtIG5laWdoYm91clsyXSkgPCAwLjEgKiBzZWxmLmJsb2NrX3NpemUKCQlwb2x5ID0gW1tibG9ja3NbMF0gKyBibG9ja19zaXplLzIsIGJsb2Nrc1sxXSArIGJsb2NrX3NpemUvMiwgYmxvY2tzWzJdIC0gYmxvY2tfc2l6ZS8yXSwKCQlbYmxvY2tzWzBdIC0gYmxvY2tfc2l6ZS8yLCBibG9ja3NbMV0gKyBibG9ja19zaXplLzIsIGJsb2Nrc1syXSAtIGJsb2NrX3NpemUvMl0sCgkJW2Jsb2Nrc1swXSArIGJsb2NrX3NpemUvMiwgYmxvY2tzWzFdIC0gYmxvY2tfc2l6ZS8yLCBibG9ja3NbMl0gLSBibG9ja19zaXplLzJdLAoJCVtibG9ja3NbMF0gLSBibG9ja19zaXplLzIsIGJsb2Nrc1sxXSAtIGJsb2NrX3NpemUvMiwgYmxvY2tzWzJdIC0gYmxvY2tfc2l6ZS8yXV0KCQlzdXBwID0gc2VsZi5zdXBwb3J0X2FyZWEoYmxvY2spCgkJCgkJYmxvY2tfc3VwcG9ydGVkID0gaXNfaW5fcG9seWdvbihwb2x5LCBzZWxmLlZQTUMoYmxvY2spKQoKCQlpZiBub3QgYmxvY2tfc3VwcG9ydGVkIGFuZCBvbl9zYW1lX2hlaWdodDoKCQkJIyBpZiBibG9jayBhbmQgbmVpZ2hib3VyIGFyZSB3aXRoaW4gOTAlIHRvIDExMCUgb2YgYmxvY2tfc2l6ZSBvZgoJCQkjIGVhY2ggb3RoZXIgaW4gdGhlIHggKG9yIHkgYXhpcyksIHdlIGNvbnNpZGVyIGl0IGEgbmVpZ2hib3VyCgkJCWlmIChucC5hYnNvbHV0ZShibG9ja1swXSAtIG5laWdoYm91clswXSkgPiAwLjkgKiBzZWxmLmJsb2NrX3NpemUKCQkJYW5kIG5wLmFic29sdXRlKGJsb2NrWzBdIC0gbmVpZ2hib3VyWzBdKSA8IDEuMSAqIHNlbGYuYmxvY2tfc2l6ZSkgb3IgXAoJCQkobnAuYWJzb2x1dGUoYmxvY2tbMV0gLSBuZWlnaGJvdXJbMV0pID4gMC45ICogc2VsZi5ibG9ja19zaXplCgkJCWFuZCBucC5hYnNvbHV0ZShibG9ja1sxXSAtIG5laWdoYm91clsxXSkgPCAxLjEgKiBzZWxmLmJsb2NrX3NpemUpOgoJCQkJcmV0dXJuIFRydWUKCQkJIyBlbGlmIChudW1weS5hYnNvbHV0ZShibG9ja1sxXSAtIG5laWdoYm91clsxXSkgPiAwLjkgKiBzZWxmLmJsb2NrX3NpemUKCQkJIyBhbmQgbnVtcHkuYWJzb2x1dGUoYmxvY2tbMV0gLSBuZWlnaGJvdXJbMV0pIDwgMS4xICogc2VsZi5ibG9ja19zaXplKToKCQkJIyAgICAgcmV0dXJuIFRydWUKCQlyZXR1cm4gRmFsc2UKCgkjIGRlZiBzdXBwb3J0ZWVzKHNlbGYsIGJsb2NrKToKCSMgIiIiCgkjIEZpbmRzIGFsbCB0aGUgc3VwcG9ydGVlcyBvZiB0aGUgYmxvY2suCgkjICIiIgoKCSMgI0lmIEEgaXMgYSBzdXBwb3J0ZWUgb2YgQiwgdGhlbiBCIGlzIGEgc3VwcG9ydGVyIG9mIEEKCSMgcmV0X3ZhbCA9IFtdCgkjIGZvciBibCBpbiBzZWxmLmJsb2NrX2xvY2F0aW9uczoKCSMgICAgIGlmIGJsb2NrIGluIHNlbGYuc3VwcG9ydGVycyhibCk6CgkjICAgICAgICAgcmV0X3ZhbC5hcHBlbmQoYmwpCgkjICAgICBlbHNlIGlmIGlzX25laWdoYm91cihibG9jaywgYmwpOgoJIyAgICAgICAgIHJldF92YWwuYXBwZW5kKGJsKQoKCSMgcmV0dXJuIHJldF92YWwKCm9iamVjdHMgPSBicHkuY29udGV4dC5zY2VuZS5vYmplY3RzCmJsb2NrcyA9IFt0dXBsZShvYmoubG9jYXRpb24pIGZvciBvYmogaW4gb2JqZWN0c10KcHJpbnQgKGJsb2NrcykKI3N0YWIgPSBTdGFiaWxpemVyKFsoMCwgMCwgMCksICgxLCAwLCAwKSwgKDAsIDAsIDEpLCAoMCwgMCwgMildLCAxKQpzdGFiID0gU3RhYmlsaXplcihibG9ja3MsIDEpCnByaW50IChzdGFiLnN0YWJpbGl6ZSgpKQo8fGZpbV9zdWZmaXh8PgoJCQkJcHJpbnQgKCJTVVBQOiAiLCBzdXBwb3J0ZWVzKQoJCQkJcHJpbnQgKCkKCQkJCWZvciBOIGluIHN1cHBvcnRlZXM6CgkJCQkJaWYgTiBub3QgaW4gWiBhbmQgc2VsZi5vdmVybGFwcyhOLCBzdXBCKToKPHxmaW1fZW5kfD4="]
["d42bc4029662554bb7a142b695fd6a04c8711ab6-3","d42bc4029662554bb7a142b695fd6a04c8711ab6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBvcwppbXBvcnQgc3lzCmltcG9ydCBicHkKZmlsZXBhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKc3lzLnBhdGguaW5zZXJ0KDAsIGZpbGVwYXRoKQpjb3JlX3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKCIuLi9TcGF0UmVsIikKc3lzLnBhdGguaW5zZXJ0KDAsIGNvcmVfcGF0aCkKZnJvbSBnZW9tZXRyeV91dGlscyBpbXBvcnQgaXNfaW5fcG9seWdvbiwgZmluZF9jbG9zZXN0X3BvaW50X29mX3BvbHlnb24KCgpjbGFzcyBTdGFiaWxpemVyOgoJZGVmIF9faW5pdF9fKHNlbGYsIGJsb2NrX2xvY2F0aW9ucywgc2l6ZSk6CgkJc2VsZi5ibG9ja19sb2NhdGlvbnMgPSBibG9ja19sb2NhdGlvbnMKCQkjc29ydCBhY2NvcmRpbmcgdG8gdGhlIHotY29vcmRpbmF0ZQoJCXNlbGYuYmxvY2tfbG9jYXRpb25zLnNvcnQocmV2ZXJzZT1UcnVlLCBrZXk9bGFtYmRhIHg6IHhbMl0pCgoJCXNlbGYuYmxvY2tfc2l6ZSA9IHNpemUKCQlzZWxmLmRpc3RhbmNlcyA9IHt9CgkJc2VsZi5hZGphY2VudCA9IHt9CgkJc2VsZi5kaXN0YW5jZV9tYXRyaXggPSB7fQoJCXNlbGYuc3VwcG9ydF9oaWVyYXJjaHkgPSB7fQoJCXNlbGYubmVpZ2hib3JzID0ge30KCgoJCWZvciBibG9jayBpbiBzZWxmLmJsb2NrX2xvY2F0aW9uczoKCQkJI0ZpbGwtaW4gdGhlIG1hdHJpeCBvZiBwYWlyd2lzZSBibG9jayBkaXN0YW5jZXMKCQkJaWYgYmxvY2sgbm90IGluIHNlbGYuZGlzdGFuY2VfbWF0cml4OgoJCQkJc2VsZi5kaXN0YW5jZV9tYXRyaXhbYmxvY2tdID0ge30KCQkJZm9yIGJsIGluIHNlbGYuYmxvY2tfbG9jYXRpb25zOgoKCQkJCWRpc3QgPSBucC5saW5hbGcubm9ybShucC5hcnJheShibG9jaykgLSBucC5hcnJheShibCkpCgkJCQlpZiBibCBub3QgaW4gc2VsZi5kaXN0YW5jZV9tYXRyaXg6CgkJCQkJc2VsZi5kaXN0YW5jZV9tYXRyaXhbYmxdID0ge30KCgkJCQlzZWxmLmRpc3RhbmNlX21hdHJpeFtibG9ja11bYmxdID0gZGlzdAoJCQkJc2VsZi5kaXN0YW5jZV9tYXRyaXhbYmxdW2Jsb2NrXSA9IGRpc3QKCgkJCSNDb21wdXRlIHNvcnRlZCBkaXN0YW5jZXMgZm9yIGEgZ2l2ZW4gYmxvY2sKCQkJc2VsZi5kaXN0YW5jZXNbYmxvY2tdID0gWyhpZHgsIG5wLmxpbmFsZy5ub3JtKG5wLmFycmF5KGJsb2NrKSAtIG5wLmFycmF5KHNlbGYuYmxvY2tfbG9jYXRpb25zW2lkeF0pKSkgZm9yIGlkeCBpbiByYW5nZShsZW4oc2VsZi5ibG9ja19sb2NhdGlvbnMpKV0KCQkJc2VsZi5kaXN0YW5jZXNbYmxvY2tdLnNvcnQoa2V5PWxhbWJkYSB4OiB4WzFdKQoKCQkJI0ZpbGwtaW4gbmVpZ2hib3JzIChjbG9zZSBibG9ja3MpIGZvciBhIGdpdmVuIGJsb2NrCgkJCXNlbGYubmVpZ2hib3JzW2Jsb2NrXSA9IFtzZWxmLmJsb2NrX2xvY2F0aW9uc1tpdGVtWzBdXSBmb3IgaXRlbSBpbiBzZWxmLmRpc3RhbmNlc1tibG9ja10gaWYgaXRlbVsxXSA8PSAxLjUgKiBzaXplXQoKCQkjRm9yIHRlc3RpbmcvZGVidWdnaW5nCgkJI3NhID0gc2VsZi5zdXBwb3J0X2FyZWEoc2VsZi5ibG9ja19sb2NhdGlvbnNbMF0pCgkJI3ByaW50IChzYSkKCQkjcHJpbnQoc2VsZi5kaXJlY3Rfc3VwcG9ydGVycyhzZWxmLmJsb2NrX2xvY2F0aW9uc1swXSksIHNlbGYuc3VwcG9ydGVycyhzZWxmLmJsb2NrX2xvY2F0aW9uc1swXSksIHNlbGYuc3VwcG9ydGVlcyhzZWxmLmJsb2NrX2xvY2F0aW9uc1stMV0pKQoKCWRlZiBzdXBwb3J0X2FyZWEoc2VsZiwgYmxvY2tzKToKCQkiIiIKCQlDb21wdXRlcyByZWN0YW5ndWxhciBzdXBwb3J0IGFyZWEgZm9yIGEgZ2l2ZW4gYmxvY2suCgkJVGhlIHN1cHBvcnQgYXJlYSBpcyB0aGUgbWluaW1hbCByZWN0YW5nbGUgdGhhdCBlbmNpcmNsZXMgYWxsIGRpcmVjdCBzdXBwb3J0ZXJzLgoJCSIiIgoJCWRpcmVjdF9zdXBwb3J0ZXJzID0gW10KCQlpZiBub3QgaXNpbnN0YW5jZShibG9ja3NbMF0sIGxpc3QpIGFuZCBub3QgaXNpbnN0YW5jZShibG9ja3NbMF0sIHR1cGxlKToJCQkKCQkJZGlyZWN0X3N1cHBvcnRlcnMgPSBzZWxmLmRpcmVjdF9zdXBwb3J0ZXJzKGJsb2NrcykKCQllbHNlOgoJCQlmb3IgYmwgaW4gYmxvY2tzOgoJCQkJZGlyZWN0X3N1cHBvcnRlcnMgKz0gc2VsZi5kaXJlY3Rfc3VwcG9ydGVycyhibCkKCQkjcHJpbnQgKGRpcmVjdF9zdXBwb3J0ZXJzKQoJCXhfbWluID0gMWUxMAoJCXhfbWF4ID0gLTFlMTAKCQl5X21pbiA9IDFlMTAKCQl5X21heCA9IC0xZTEwCgkJZm9yIGJsIGluIGRpcmVjdF9zdXBwb3J0ZXJzOgoJCQl4X21pbiA9IG1pbih4X21pbiwgYmxbMF0gLSBzZWxmLmJsb2NrX3NpemUvMikKCQkJeF9tYXggPSBtYXgoeF9tYXgsIGJsWzBdICsgc2VsZi5ibG9ja19zaXplLzIpCgkJCXlfbWluID0gbWluKHlfbWluLCBibFsxXSAtIHNlbGYuYmxvY2tfc2l6ZS8yKQoJCQl5X21heCA9IG1heCh5X21heCwgYmxbMV0gKyBzZWxmLmJsb2NrX3NpemUvMikKCgkJcmV0dXJuIFt4X21pbiwgeF9tYXgsIHlfbWluLCB5X21heF0KCgoJZGVmIHN1cHBvcnRfcG9seShzZWxmLCBibG9jayk6CgkJc3VwX2FyZWEgPSBzZWxmLnN1cHBvcnRfYXJlYShibG9jaykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoJCSNwcmludCAoYmxvY2ssIHN1cF9hcmVhKQoJCXJldHVybiBbW3N1cF9hcmVhWzBdLCBzdXBfYXJlYVsyXSwgMF0sIFtzdXBfYXJlYVswXSwgc3VwX2FyZWFbM10sIDBdLAoJCQkJW3N1cF9hcmVhWzFdLCBzdXBfYXJlYVszXSwgMF0sIFtzdXBfYXJlYVsxXSwgc3VwX2FyZWFbMl0sIDBdXQoKPHxmaW1fZW5kfD4="]
["d42bc4029662554bb7a142b695fd6a04c8711ab6-4","d42bc4029662554bb7a142b695fd6a04c8711ab6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBvcwppbXBvcnQgc3lzCmltcG9ydCBicHkKZmlsZXBhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKc3lzLnBhdGguaW5zZXJ0KDAsIGZpbGVwYXRoKQpjb3JlX3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKCIuLi9TcGF0UmVsIikKc3lzLnBhdGguaW5zZXJ0KDAsIGNvcmVfcGF0aCkKZnJvbSBnZW9tZXRyeV91dGlscyBpbXBvcnQgaXNfaW5fcG9seWdvbiwgZmluZF9jbG9zZXN0X3BvaW50X29mX3BvbHlnb24KCgpjbGFzcyBTdGFiaWxpemVyOgoJZGVmIF9faW5pdF9fKHNlbGYsIGJsb2NrX2xvY2F0aW9ucywgc2l6ZSk6CgkJc2VsZi5ibG9ja19sb2NhdGlvbnMgPSBibG9ja19sb2NhdGlvbnMKCQkjc29ydCBhY2NvcmRpbmcgdG8gdGhlIHotY29vcmRpbmF0ZQoJCXNlbGYuYmxvY2tfbG9jYXRpb25zLnNvcnQocmV2ZXJzZT1UcnVlLCBrZXk9bGFtYmRhIHg6IHhbMl0pCgoJCXNlbGYuYmxvY2tfc2l6ZSA9IHNpemUKCQlzZWxmLmRpc3RhbmNlcyA9IHt9CgkJc2VsZi5hZGphY2VudCA9IHt9CgkJc2VsZi5kaXN0YW5jZV9tYXRyaXggPSB7fQoJCXNlbGYuc3VwcG9ydF9oaWVyYXJjaHkgPSB7fQoJCXNlbGYubmVpZ2hib3JzID0ge30KCgoJCWZvciBibG9jayBpbiBzZWxmLmJsb2NrX2xvY2F0aW9uczoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoJCQkjRmlsbC1pbiB0aGUgbWF0cml4IG9mIHBhaXJ3aXNlIGJsb2NrIGRpc3RhbmNlcwoJCQlpZiBibG9jayBub3QgaW4gc2VsZi5kaXN0YW5jZV9tYXRyaXg6CgkJCQlzZWxmLmRpc3RhbmNlX21hdHJpeFtibG9ja10gPSB7fQoJCQlmb3IgYmwgaW4gc2VsZi5ibG9ja19sb2NhdGlvbnM6Cjx8ZmltX2VuZHw+"]
["6bba9974802bcdca875f86333728f037f637b855-1","6bba9974802bcdca875f86333728f037f637b855","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gc2V0dXB0b29scyBpbXBvcnQgc2V0dXAsIGZpbmRfcGFja2FnZXMKClJFQURNRV9QQVRIID0gIlJFQURNRS5tZCIKTE9OR19ERVNDUklQVElPTiA9ICIiCgppZiBvcy5wYXRoLmV4aXN0cyhSRUFETUVfUEFUSCk6CiAgICB3aXRoIG9wZW4oUkVBRE1FX1BBVEgpIGFzIHJlYWRtZToKICAgICAgICBMT05HX0RFU0NSSVBUSU9OID0gcmVhZG1lLnJlYWQoKQoKCjx8ZmltX2hvbGV8PgogICAgYXV0aG9yX2VtYWlsPSJyb2dlcmlvc2FuNEBnbWFpbC5jb20iLAogICAgZGVzY3JpcHRpb249IkFwcCB0byB1c2UgZ2hvc3RzY3JpcHQgZmlsZSBjb252ZXJzaW9uIGNvbW1hbmRzIiwKICAgIGxvbmdfZGVzY3JpcHRpb249TE9OR19ERVNDUklQVElPTiwKICAgIGxvbmdfZGVzY3JpcHRpb25fY29udGVudF90eXBlPSd0ZXh0L21hcmtkb3duJywKICAgIGxpY2Vuc2U9IiIsCiAgICBrZXl3b3Jkcz0iIiwKICAgIHVybD0iaHR0cHM6Ly9naXRodWIuY29tL3JvZ2VyaW9zYW40L2dzX2NvbnZlcnQiLAogICAgcGFja2FnZXM9ZmluZF9wYWNrYWdlcygpLAogICAgcHl0aG9uX3JlcXVpcmVzPSc+PTMuNiwgPDQnLAogICAgY2xhc3NpZmllcnM9WwogICAgICAgICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMyIsCiAgICAgICAgIkxpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IFRoZSBVbmxpY2Vuc2UgKFVubGljZW5zZSkiLAogICAgICAgICJPcGVyYXRpbmcgU3lzdGVtIDo6IE9TIEluZGVwZW5kZW50IiwKICAgIF0sCikKPHxmaW1fc3VmZml4fD4Kc2V0dXAoCiAgICBuYW1lPSJnc19jb252ZXJ0IiwKICAgIHZlcnNpb249IjAuMC4xIiwKICAgIGF1dGhvcj0iUm9nZXJpbyBTYW50b3MiLAo8fGZpbV9lbmR8Pg=="]
["6bba9974802bcdca875f86333728f037f637b855-2","6bba9974802bcdca875f86333728f037f637b855","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gc2V0dXB0b29scyBpbXBvcnQgc2V0dXAsIGZpbmRfcGFja2FnZXMKClJFQURNRV9QQVRIID0gIlJFQURNRS5tZCIKTE9OR19ERVNDUklQVElPTiA9ICIiCgppZiBvcy5wYXRoLmV4aXN0cyhSRUFETUVfUEFUSCk6CiAgICB3aXRoIG9wZW4oUkVBRE1FX1BBVEgpIGFzIHJlYWRtZToKICAgICAgICBMT05HX0RFU0NSSVBUSU9OID0gcmVhZG1lLnJlYWQoKQoKPHxmaW1faG9sZXw+CiAgICBhdXRob3I9IlJvZ2VyaW8gU2FudG9zIiwKICAgIGF1dGhvcl9lbWFpbD0icm9nZXJpb3NhbjRAZ21haWwuY29tIiwKICAgIGRlc2NyaXB0aW9uPSJBcHAgdG8gdXNlIGdob3N0c2NyaXB0IGZpbGUgY29udmVyc2lvbiBjb21tYW5kcyIsCiAgICBsb25nX2Rlc2NyaXB0aW9uPUxPTkdfREVTQ1JJUFRJT04sCiAgICBsb25nX2Rlc2NyaXB0aW9uX2NvbnRlbnRfdHlwZT0ndGV4dC9tYXJrZG93bicsCiAgICBsaWNlbnNlPSIiLAogICAga2V5d29yZHM9IiIsCiAgICB1cmw9Imh0dHBzOi8vZ2l0aHViLmNvbS9yb2dlcmlvc2FuNC9nc19jb252ZXJ0IiwKICAgIHBhY2thZ2VzPWZpbmRfcGFja2FnZXMoKSwKICAgIHB5dGhvbl9yZXF1aXJlcz0nPj0zLjYsIDw0JywKICAgIGNsYXNzaWZpZXJzPVsKICAgICAgICAiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMiLAogICAgICAgICJMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBUaGUgVW5saWNlbnNlIChVbmxpY2Vuc2UpIiwKICAgICAgICAiT3BlcmF0aW5nIFN5c3RlbSA6OiBPUyBJbmRlcGVuZGVudCIsCiAgICBdLAopCjx8ZmltX3N1ZmZpeHw+CgpzZXR1cCgKICAgIG5hbWU9ImdzX2NvbnZlcnQiLAogICAgdmVyc2lvbj0iMC4wLjEiLAo8fGZpbV9lbmR8Pg=="]
["6bba9974802bcdca875f86333728f037f637b855-3","6bba9974802bcdca875f86333728f037f637b855","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gc2V0dXB0b29scyBpbXBvcnQgc2V0dXAsIGZpbmRfcGFja2FnZXMKClJFQURNRV9QQVRIID0gIlJFQURNRS5tZCIKTE9OR19ERVNDUklQVElPTiA9ICIiCgppZiBvcy5wYXRoLmV4aXN0cyhSRUFETUVfUEFUSCk6CiAgICB3aXRoIG9wZW4oUkVBRE1FX1BBVEgpIGFzIHJlYWRtZToKICAgICAgICBMT05HX0RFU0NSSVBUSU9OID0gcmVhZG1lLnJlYWQoKQoKCnNldHVwKAogICAgbmFtZT0iZ3NfY29udmVydCIsCiAgICB2ZXJzaW9uPSIwLjAuMSIsCiAgICBhdXRob3I9IlJvZ2VyaW8gU2FudG9zIiwKICAgIGF1dGhvcl9lbWFpbD0icm9nZXJpb3NhbjRAZ21haWwuY29tIiwKICAgIGRlc2NyaXB0aW9uPSJBcHAgdG8gdXNlIGdob3N0c2NyaXB0IGZpbGUgY29udmVyc2lvbiBjb21tYW5kcyIsCiAgICBsb25nX2Rlc2NyaXB0aW9uPUxPTkdfREVTQ1JJUFRJT04sCiAgICBsb25nX2Rlc2NyaXB0aW9uX2NvbnRlbnRfdHlwZT0ndGV4dC9tYXJrZG93bicsCiAgICBsaWNlbnNlPSIiLAogICAga2V5d29yZHM9IiIsCiAgICB1cmw9Imh0dHBzOi8vZ2l0aHViLmNvbS9yb2dlcmlvc2FuNC9nc19jb252ZXJ0IiwKICAgIHBhY2thZ2VzPWZpbmRfcGFja2FnZXMoKSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcHl0aG9uX3JlcXVpcmVzPSc+PTMuNiwgPDQnLAogICAgY2xhc3NpZmllcnM9WwogICAgICAgICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMyIsCiAgICAgICAgIkxpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IFRoZSBVbmxpY2Vuc2UgKFVubGljZW5zZSkiLAo8fGZpbV9lbmR8Pg=="]
["6bba9974802bcdca875f86333728f037f637b855-4","6bba9974802bcdca875f86333728f037f637b855","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gc2V0dXB0b29scyBpbXBvcnQgc2V0dXAsIGZpbmRfcGFja2FnZXMKClJFQURNRV9QQVRIID0gIlJFQURNRS5tZCIKTE9OR19ERVNDUklQVElPTiA9ICIiCgppZiBvcy5wYXRoLmV4aXN0cyhSRUFETUVfUEFUSCk6CiAgICB3aXRoIG9wZW4oUkVBRE1FX1BBVEgpIGFzIHJlYWRtZToKICAgICAgICBMT05HX0RFU0NSSVBUSU9OID0gcmVhZG1lLnJlYWQoKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKc2V0dXAoCiAgICBuYW1lPSJnc19jb252ZXJ0IiwKPHxmaW1fZW5kfD4="]
["c1b1f804dd901b0a830d59255a0aa853db6826da-1","c1b1f804dd901b0a830d59255a0aa853db6826da","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMiBvbiAyMDIxLTA0LTI4IDE1OjQ0Cgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucywgbW9kZWxzCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgKCdzY2hvb2xfbWFuYWdlbWVudF9hcHAnLCAnMDAxMl9kZWxldGVfdHJlcGx5JyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J3Rjb21tZW50JywKICAgICAgICAgICAgbmFtZT0nY3JlYXRlZF9vbicsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5EYXRlVGltZUZpZWxkKGF1dG9fbm93X2FkZD1UcnVlKSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICksCjx8ZmltX2VuZHw+"]
["c1b1db932f54eec3f5669b3112e34749b8c44af4-1","c1b1db932f54eec3f5669b3112e34749b8c44af4",{"$cut":{"chars":36756,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwpzeXMucGF0aC5hcHBlbmQoJ0M6XFxQcm9ncmFtIEZpbGVzXFxNaWNyby1NYW5hZ2VyLTIuMGJldGEnKQoKZnJvbSBzbWFydHNjb3BlLnNvdXJjZSBpbXBvcnQgcnVuCmZyb20gc21hcnRzY29wZS5zb3VyY2UgaW1wb3J0IHNjX3V0aWxzCmZyb20gc21hcnRzY29wZS5zb3VyY2UgaW1wb3J0IHBvc2l0aW9uIGFzIHBvcwppbXBvcnQgb3MKZnJvbSB0a2ludGVyIGltcG9ydCB0dGsKaW1wb3J0IHRraW50ZXIgYXMgdGsKZnJvbSB0a2ludGVyIGltcG9ydCBmaWxlZGlhbG9nCmltcG9ydCB0a2ludGVyLm1lc3NhZ2Vib3gKaW1wb3J0IGNzdgppbXBvcnQgY3YyCmltcG9ydCBQSUwuSW1hZ2UKaW1wb3J0IFBJTC5JbWFnZVRrCmZyb20gaW11dGlscy52aWRlbyBpbXBvcnQgVmlkZW9TdHJlYW0KZnJvbSBweXpiYXIgaW1wb3J0IHB5emJhcgppbXBvcnQgdGltZQppbXBvcnQgaW11dGlscwpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAppbXBvcnQgeWFtbAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRpZmZmaWxlIGFzIHRpZgoKCkJBUkNPREVfUEFUSCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pLCAnLi4vLi4vY29uZmlnL2JhcmNvZGVfZGF0YS8nKQpDT05GSUdfWUFNTF9QQVRIID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSksICcuLi8uLi9jb25maWcvZXhwZXJpbWVudF9jb25maWcueW1sJykKTEVEX1lBTUxfUEFUSCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pLCAnLi4vLi4vY29uZmlnL2xlZF9pbnRlbnNpdGllcy55bWwnKQoKIyBCQVJDT0RFX1BBVEggPSAnLi4vLi4vY29uZmlnL2JhcmNvZGVfZGF0YS8nCiMgQ09ORklHX1lBTUxfUEFUSCA9ICcuLi8uLi9jb25maWcvZXhwZXJpbWVudF9jb25maWcueW1sJwojIExFRF9ZQU1MX1BBVEggPSAnLi4vLi4vY29uZmlnL2xlZF9pbnRlbnNpdGllcy55bWwnCnZpZF9vcGVuID0gRmFsc2UKIyBzdGFnZV90b19waXhlbF9yYXRpbyA9IDAKIyBmaXJzdF9wb3NpdGlvbiA9IFstMSwgLTFdCgoKY2xhc3MgRW50cnk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWUsIGxhYmVsX3RleHQsIGRlZmF1bHQsIHJvdywgY29sPTApOgogICAgICAgIHNlbGYubGFiZWxfdGV4dCA9IGxhYmVsX3RleHQKICAgICAgICBzZWxmLmRlZmF1bHQgPSBkZWZhdWx0CiAgICAgICAgc2VsZi5mcmFtZSA9IGZyYW1lCiAgICAgICAgc2VsZi5lbnRyeSA9IHRrLlN0cmluZ1ZhcihzZWxmLmZyYW1lLCB2YWx1ZT1zZWxmLmRlZmF1bHQpCiAgICAgICAgc2VsZi5tYWtlX2xhYmVsKHJvdywgY29sKQogICAgICAgIHNlbGYubWFrZV9lbnRyeShyb3csIGNvbCsxKQoKICAgIGRlZiBtYWtlX2xhYmVsKHNlbGYsIHJvdywgY29sKToKICAgICAgICBzZWxmLmxhYmVsID0gdGsuTGFiZWwoc2VsZi5mcmFtZSwgdGV4dD1zZWxmLmxhYmVsX3RleHQpCiAgICAgICAgc2VsZi5sYWJlbC5ncmlkKHJvdz1yb3csIGNvbHVtbj1jb2wpCgogICAgZGVmIG1ha2VfZW50cnkoc2VsZiwgcm93LCBjb2wpOgogICAgICAgIHRrLkVudHJ5KHNlbGYuZnJhbWUsIHRleHR2YXJpYWJsZT1zZWxmLmVudHJ5KS5ncmlkKAogICAgICAgICAgICByb3c9cm93LCBjb2x1bW49Y29sLCBzdGlja3k9J0VXJykKCgpjbGFzcyBEcm9wRG93bihFbnRyeSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWUsIGxhYmVsX3RleHQsIGRlZmF1bHQsIG9wdGlvbnMsIHJvdywgY29sPTApOgogICAgICAgIHNlbGYubGFiZWxfdGV4dCA9IGxhYmVsX3RleHQKICAgICAgICBzZWxmLmRlZmF1bHQgPSBkZWZhdWx0CiAgICAgICAgc2VsZi5mcmFtZSA9IGZyYW1lCiAgICAgICAgc2VsZi5lbnRyeSA9IHRrLlN0cmluZ1ZhcihzZWxmLmZyYW1lLCB2YWx1ZT1zZWxmLmRlZmF1bHQpCiAgICAgICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucwogICAgICAgIHNlbGYubWFrZV9sYWJlbChyb3csIGNvbCkKICAgICAgICBzZWxmLm1ha2VfZHJvcGRvd24ocm93LCBjb2wrMSkKCiAgICBkZWYgbWFrZV9kcm9wZG93bihzZWxmLCByb3csIGNvbCk6CiAgICAgICAgdGsuT3B0aW9uTWVudShzZWxmLmZyYW1lLCBzZWxmLmVudHJ5LCAqCiAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wdGlvbnMpLmdyaWQocm93PXJvdywgY29sdW1uPWNvbCwgc3RpY2t5PSdFVycpCgoKY2xhc3MgTWFpbih0ay5GcmFtZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyKToKICAgICAgICBzZWxmLm1hc3RlciA9IG1hc3RlcgogICAgICAgIHRrLkZyYW1lLl9faW5pdF9fKHNlbGYsIHNlbGYubWFzdGVyKQogICAgICAgIHNlbGYubWFzdGVyLnRpdGxlKCJTbWFydCBTY29wZSIpCiAgICAgICAgc2VsZi5saXZlX2NsYXNzID0gTm9uZQoKICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICAgICAjIExheW91dCB0aGUgZnJhbWVzIGFuZCBub3RlYm9va3MKICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICAgICByb3dfY29sX2NvbmZpZyhzZWxmLm1hc3RlciwgNCwgNCkKCiAgICAgICAgc2VsZi5TaWRlYmFyID0gdGsuRnJhbWUoc2VsZi5tYXN0ZXIpCiAgICAgICAgc2VsZi5TaWRlYmFyLmdyaWQocm93PTAsIGNvbHVtbj0zLCByb3dzcGFuPTQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uc3Bhbj0xLCBzdGlja3k9dGsuVyt0ay5FK3RrLk4rdGsuUykKICAgICAgICByb3dfY29sX2NvbmZpZyhzZWxmLlNpZGViYXIsIDgsIDEpCiAgICAgICAgc2VsZi5CYXJjb2RlRnJhbWUgPSB0ay5GcmFtZSgKICAgICAgICAgICAgc2VsZi5TaWRlYmFyLCBoaWdobGlnaHRiYWNrZ3JvdW5kPSJibGFjayIsIGhpZ2hsaWdodGNvbG9yPSJibGFjayIsIGhpZ2hsaWdodHRoaWNrbmVzcz0xKQogICAgICAgIHNlbGYuQmFyY29kZUZyYW1lLmdyaWQocm93PTAsIGNvbHVtbj0wLCByb3dzcGFuPTQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlja3k9dGsuVyt0ay5FK3RrLk4r"}}]
["2e00a4033caeed6cea12b1275508ab48d24b0033-1","2e00a4033caeed6cea12b1275508ab48d24b0033","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgogICAgICAgIHdvcmRzID0gW10KICAgICAgICBmb3Igd29yZCBpbiB3b3JkRGljdDoKICAgICAgICAgICAgaWYgd29yZCA9PSBzWzpsZW4od29yZCldOgogICAgICAgICAgICAgICAgaWYgbGVuKHdvcmQpID09IGxlbihzKToKICAgICAgICAgICAgICAgICAgICB3b3Jkcy5hcHBlbmQod29yZCkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHdvcmRfYnJlYWsoc1tsZW4od29yZCk6XSkKICAgICAgICAgICAgICAgICAgICBmb3IgdCBpbiB0ZW1wOgogICAgICAgICAgICAgICAgICAgICAgICB3b3Jkcy5hcHBlbmQod29yZCArICcgJyArIHQpCiAgICAgICAgZHBbc10gPSB3b3JkcwogICAgICAgIHJldHVybiB3b3JkcwogICAgcmV0dXJuIHdvcmRfYnJlYWsocykKPHxmaW1fc3VmZml4fD4KZGVmIHdvcmRCcmVhayhzLCB3b3JkRGljdCk6CiAgICBkcCA9IHt9CiAgICBkZWYgd29yZF9icmVhayhzKToKICAgICAgICBpZiBzIGluIGRwOiByZXR1cm4gZHBbc10KPHxmaW1fZW5kfD4="]
["2e00a4033caeed6cea12b1275508ab48d24b0033-2","2e00a4033caeed6cea12b1275508ab48d24b0033","PHxmaW1fcHJlZml4fD4KZGVmIHdvcmRCcmVhayhzLCB3b3JkRGljdCk6CiAgICBkcCA9IHt9CiAgICBkZWYgd29yZF9icmVhayhzKToKICAgICAgICBpZiBzIGluIGRwOiByZXR1cm4gZHBbc10KICAgICAgICB3b3JkcyA9IFtdCiAgICAgICAgZm9yIHdvcmQgaW4gd29yZERpY3Q6CiAgICAgICAgICAgIGlmIHdvcmQgPT0gc1s6bGVuKHdvcmQpXToKICAgICAgICAgICAgICAgIGlmIGxlbih3b3JkKSA9PSBsZW4ocyk6CiAgICAgICAgICAgICAgICAgICAgd29yZHMuYXBwZW5kKHdvcmQpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHdvcmRfYnJlYWsoc1tsZW4od29yZCk6XSkKICAgICAgICAgICAgICAgICAgICBmb3IgdCBpbiB0ZW1wOgogICAgICAgICAgICAgICAgICAgICAgICB3b3Jkcy5hcHBlbmQod29yZCArICcgJyArIHQpCjx8ZmltX2VuZHw+"]
["2e00a4033caeed6cea12b1275508ab48d24b0033-3","2e00a4033caeed6cea12b1275508ab48d24b0033","PHxmaW1fcHJlZml4fD4KZGVmIHdvcmRCcmVhayhzLCB3b3JkRGljdCk6CiAgICBkcCA9IHt9CiAgICBkZWYgd29yZF9icmVhayhzKToKICAgICAgICBpZiBzIGluIGRwOiByZXR1cm4gZHBbc10KICAgICAgICB3b3JkcyA9IFtdCiAgICAgICAgZm9yIHdvcmQgaW4gd29yZERpY3Q6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgaWYgd29yZCA9PSBzWzpsZW4od29yZCldOgogICAgICAgICAgICAgICAgaWYgbGVuKHdvcmQpID09IGxlbihzKToKICAgICAgICAgICAgICAgICAgICB3b3Jkcy5hcHBlbmQod29yZCkKICAgICAgICAgICAgICAgIGVsc2U6Cjx8ZmltX2VuZHw+"]
["e7d900ec4f76cefbdde0479591415f0e0ebd7c8f-1","e7d900ec4f76cefbdde0479591415f0e0ebd7c8f","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzeXMKCmZyb20gUHlRdDUuUXRDb3JlIGltcG9ydCBRU2l6ZSwgUXQKZnJvbSBQeVF0NS5RdEd1aSBpbXBvcnQgUUljb24KZnJvbSBQeVF0NS5RdFdpZGdldHMgaW1wb3J0IFFNYWluV2luZG93LCBRQWN0aW9uLCBxQXBwLCBRQXBwbGljYXRpb24sIFFXaWRnZXQsIFFTaXplUG9saWN5LCBRTWVzc2FnZUJveAoKaW1wb3J0IHJlc291cmNlc19yYwpmcm9tIGdhbWUgaW1wb3J0IEdhbWUKZnJvbSBtYWluQnV0dG9uIGltcG9ydCBNYWluQnV0dG9uCmZyb20gc2V0dGluZ3MgaW1wb3J0IFNldHRpbmdzCmZyb20gc2V0dGluZ3NXaW5kb3cgaW1wb3J0IFNldHRpbmdzV2luZG93CmZyb20gY29ubmVjdGlvbldpbmRvdyBpbXBvcnQgQ29ubmVjdGlvbldpbmRvdwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKY2xhc3MgTWFpbihRTWFpbldpbmRvdyk6CiAgICAiIiIKPHxmaW1fZW5kfD4="]
["e7d900ec4f76cefbdde0479591415f0e0ebd7c8f-2","e7d900ec4f76cefbdde0479591415f0e0ebd7c8f","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzeXMKCmZyb20gUHlRdDUuUXRDb3JlIGltcG9ydCBRU2l6ZSwgUXQKZnJvbSBQeVF0NS5RdEd1aSBpbXBvcnQgUUljb24KZnJvbSBQeVF0NS5RdFdpZGdldHMgaW1wb3J0IFFNYWluV2luZG93LCBRQWN0aW9uLCBxQXBwLCBRQXBwbGljYXRpb24sIFFXaWRnZXQsIFFTaXplUG9saWN5LCBRTWVzc2FnZUJveAoKaW1wb3J0IHJlc291cmNlc19yYwpmcm9tIGdhbWUgaW1wb3J0IEdhbWUKZnJvbSBtYWluQnV0dG9uIGltcG9ydCBNYWluQnV0dG9uCmZyb20gc2V0dGluZ3MgaW1wb3J0IFNldHRpbmdzCmZyb20gc2V0dGluZ3NXaW5kb3cgaW1wb3J0IFNldHRpbmdzV2luZG93CmZyb20gY29ubmVjdGlvbldpbmRvdyBpbXBvcnQgQ29ubmVjdGlvbldpbmRvdwoKCmNsYXNzIE1haW4oUU1haW5XaW5kb3cpOgogICAgIiIiCiAgICBNYWluIFdpbmRvdyBvZiBwcm9ncmFtLiBcbgogICAgSW5oZXJpdHM6IDpjbGFzczpgUHlRdDUuUXRXaWRnZXRzLlFNYWluV2luZG93YAogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCgogICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZm9ybWF0PSclKGxldmVsbmFtZSlzOiUobWVzc2FnZSlzJywgbGV2ZWw9bG9nZ2luZy5ERUJVRykKICAgICAgICBsb2dnaW5nLmRlYnVnKCJJbml0aWFsaXphdGlvbi4uLiIpCgogICAgICAgIHNlbGYuc2V0dGluZ3MgPSBTZXR0aW5ncygpCiAgICAgICAgc2VsZi5nYW1lID0gR2FtZShzZWxmLCBzZWxmLnNldHRpbmdzKQogICAgICAgIHNlbGYuaW5pdF91aSgpCgogICAgICAgIGxvZ2dpbmcuaW5mbygiR2FtZSBSZWFkeSEiKQoKICAgIGRlZiBpbml0X3VpKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIEluaXRpYWxpemUgdXNlciBpbnRlcmZhY2UgaW4gTWFpbiBXaW5kb3cuIEludGVuZGVkIHRvIHVzZSBvbmx5IGluc2lkZSBjb25zdHJ1Y3Rvci4KICAgICAgICAiIiIKCiAgICAgICAgaWYgc2VsZi5zZXR0aW5ncy5hbHdheXNfb25fdG9wOgogICAgICAgICAgICBzZWxmLnNldFdpbmRvd0ZsYWdzKFF0LldpbmRvd1N0YXlzT25Ub3BIaW50KQoKICAgICAgICBzZWxmLnNldFdpbmRvd0ljb24oUUljb24oIjovZ3JhcGhpY3Mvc3RhcnQucG5nIikpCiAgICAgICAgc2VsZi5zZXRNaW5pbXVtU2l6ZSgzMDAsIDMwMCkKICAgICAgICBzZWxmLnNldFdpbmRvd1RpdGxlKCdEcmF1Z2h0cycpCgogICAgICAgICMgSW5pdGlhbGl6ZSBUb29sYmFyCiAgICAgICAgc2VsZi50b29sYmFyID0gc2VsZi5hZGRUb29sQmFyKCJCYXIiKQogICAgICAgIHNlbGYudG9vbGJhci5zZXRNb3ZhYmxlKEZhbHNlKQogICAgICAgIHNlbGYudG9vbGJhci5zZXRJY29uU2l6ZShRU2l6ZSgyOCwgMjgpKQoKICAgICAgICAjIFN1cnJlbmRlcgogICAgICAgIHNlbGYuc3VycmVuZGVyX2J1dHRvbiA9IFFBY3Rpb24oUUljb24oJzovZ3JhcGhpY3Mvc3VycmVuZGVyLnBuZycpLCAnU3VycmVuZGVyJywgc2VsZikKICAgICAgICBzZWxmLnN1cnJlbmRlcl9idXR0b24udHJpZ2dlcmVkLmNvbm5lY3Qoc2VsZi5zdXJyZW5kZXJfYnV0dG9uX2NsaWNrZWQpCiAgICAgICAgc2VsZi5zdXJyZW5kZXJfYnV0dG9uLnNldERpc2FibGVkKFRydWUpCiAgICAgICAgc2VsZi50b29sYmFyLmFkZEFjdGlvbihzZWxmLnN1cnJlbmRlcl9idXR0b24pCgogICAgICAgICMgTXVsdGlwbGF5ZXIKICAgICAgICBzZWxmLm11bHRpcGxheWVyX2J1dHRvbiA9IFFBY3Rpb24oUUljb24oJzovZ3JhcGhpY3MvaW50ZXJuZXQucG5nJyksICdNdWx0aXBsYXllcicsIHNlbGYpCiAgICAgICAgc2VsZi5tdWx0aXBsYXllcl9idXR0b24udHJpZ2dlcmVkLmNvbm5lY3Qoc2VsZi5lc3RhYmxpc2hfaW50ZXJuZXRfY29ubmVjdGlvbikKICAgICAgICBzZWxmLnRvb2xiYXIuYWRkQWN0aW9uKHNlbGYubXVsdGlwbGF5ZXJfYnV0dG9uKQoKICAgICAgICAjIEJsYW5rIFNwYWNlCiAgICAgICAgc3BhY2VyX3dpZGdldCA9IFFXaWRnZXQoc2VsZikKICAgICAgICBzcGFjZXJfd2lkZ2V0LnNldFNpemVQb2xpY3koUVNpemVQb2xpY3kuRXhwYW5kaW5nLCBRU2l6ZVBvbGljeS5QcmVmZXJyZWQpCiAgICAgICAgc2VsZi50b29sYmFyLmFkZFdpZGdldChzcGFjZXJfd2lkZ2V0KQoKICAgICAgICAjIE1haW4gQnV0dG9uCiAgICAgICAgc2VsZi5tYWluX2J1dHRvbiA9IE1haW5CdXR0b24oc2VsZikKICAgICAgICBzZWxmLm1haW5fYnV0dG9uLnRyaWdnZXJlZC5jb25uZWN0KHNlbGYubWFpbl9idXR0b25fY2xpY2tlZCkKICAgICAgICBzZWxmLnRvb2xiYXIuYWRkQWN0aW9uKHNlbGYubWFpbl9idXR0b24pCgogICAgICAgICMgQmxhbmsgU3BhY2UKICAgICAgICBzcGFjZXJfd2lkZ2V0MiA9IFFXaWRnZXQoc2VsZikKICAgICAgICBzcGFjZXJfd2lkZ2V0Mi5zZXRTaXplUG9saWN5KFFTaXplUG9saWN5LkV4cGFuZGluZywgUVNpemVQb2xpY3kuUHJlZmVycmVkKQogICAgICAgIHNlbGYudG9vbGJhci5hZGRXaWRnZXQoc3BhY2VyX3dpZGdldDIpCgogICAgICAgICMgT3B0aW9ucwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgb3B0aW9uc19hY3QgPSBRQWN0aW9uKFFJY29uKCc6L2dyYXBoaWNzL3NldHRpbmdzLnBuZycpLCAnT3B0aW9ucycsIHNlbGYpCiAgICAgICAgb3B0aW9uc19hY3Quc2V0U2hvcnRjdXQoJ0N0cmwrTycpCiAgICAgICAgb3B0aW9uc19hY3QudHJpZ2dlcmVkLmNvbm5lY3Qoc2VsZi5zaG93X3NldHRpbmdzX3dpbmRvdykKICAgICAgICBzZWxmLnRvb2xiYXIuYWRkQWN0aW9uKG9wdGlvbnNfYWN0KQo8fGZpbV9lbmR8Pg=="]
["e7d900ec4f76cefbdde0479591415f0e0ebd7c8f-3","e7d900ec4f76cefbdde0479591415f0e0ebd7c8f","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzeXMKCmZyb20gUHlRdDUuUXRDb3JlIGltcG9ydCBRU2l6ZSwgUXQKZnJvbSBQeVF0NS5RdEd1aSBpbXBvcnQgUUljb24KZnJvbSBQeVF0NS5RdFdpZGdldHMgaW1wb3J0IFFNYWluV2luZG93LCBRQWN0aW9uLCBxQXBwLCBRQXBwbGljYXRpb24sIFFXaWRnZXQsIFFTaXplUG9saWN5LCBRTWVzc2FnZUJveAoKaW1wb3J0IHJlc291cmNlc19yYwpmcm9tIGdhbWUgaW1wb3J0IEdhbWUKZnJvbSBtYWluQnV0dG9uIGltcG9ydCBNYWluQnV0dG9uCmZyb20gc2V0dGluZ3MgaW1wb3J0IFNldHRpbmdzCmZyb20gc2V0dGluZ3NXaW5kb3cgaW1wb3J0IFNldHRpbmdzV2luZG93CmZyb20gY29ubmVjdGlvbldpbmRvdyBpbXBvcnQgQ29ubmVjdGlvbldpbmRvdwoKCmNsYXNzIE1haW4oUU1haW5XaW5kb3cpOgogICAgIiIiCiAgICBNYWluIFdpbmRvdyBvZiBwcm9ncmFtLiBcbgogICAgSW5oZXJpdHM6IDpjbGFzczpgUHlRdDUuUXRXaWRnZXRzLlFNYWluV2luZG93YAogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCgogICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZm9ybWF0PSclKGxldmVsbmFtZSlzOiUobWVzc2FnZSlzJywgbGV2ZWw9bG9nZ2luZy5ERUJVRykKICAgICAgICBsb2dnaW5nLmRlYnVnKCJJbml0aWFsaXphdGlvbi4uLiIpCgogICAgICAgIHNlbGYuc2V0dGluZ3MgPSBTZXR0aW5ncygpCiAgICAgICAgc2VsZi5nYW1lID0gR2FtZShzZWxmLCBzZWxmLnNldHRpbmdzKQogICAgICAgIHNlbGYuaW5pdF91aSgpCgogICAgICAgIGxvZ2dpbmcuaW5mbygiR2FtZSBSZWFkeSEiKQoKICAgIGRlZiBpbml0X3VpKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIEluaXRpYWxpemUgdXNlciBpbnRlcmZhY2UgaW4gTWFpbiBXaW5kb3cuIEludGVuZGVkIHRvIHVzZSBvbmx5IGluc2lkZSBjb25zdHJ1Y3Rvci4KICAgICAgICAiIiIKCiAgICAgICAgaWYgc2VsZi5zZXR0aW5ncy5hbHdheXNfb25fdG9wOgogICAgICAgICAgICBzZWxmLnNldFdpbmRvd0ZsYWdzKFF0LldpbmRvd1N0YXlzT25Ub3BIaW50KQoKICAgICAgICBzZWxmLnNldFdpbmRvd0ljb24oUUljb24oIjovZ3JhcGhpY3Mvc3RhcnQucG5nIikpCiAgICAgICAgc2VsZi5zZXRNaW5pbXVtU2l6ZSgzMDAsIDMwMCkKICAgICAgICBzZWxmLnNldFdpbmRvd1RpdGxlKCdEcmF1Z2h0cycpCgogICAgICAgICMgSW5pdGlhbGl6ZSBUb29sYmFyCiAgICAgICAgc2VsZi50b29sYmFyID0gc2VsZi5hZGRUb29sQmFyKCJCYXIiKQogICAgICAgIHNlbGYudG9vbGJhci5zZXRNb3ZhYmxlKEZhbHNlKQogICAgICAgIHNlbGYudG9vbGJhci5zZXRJY29uU2l6ZShRU2l6ZSgyOCwgMjgpKQoKICAgICAgICAjIFN1cnJlbmRlcgogICAgICAgIHNlbGYuc3VycmVuZGVyX2J1dHRvbiA9IFFBY3Rpb24oUUljb24oJzovZ3JhcGhpY3Mvc3VycmVuZGVyLnBuZycpLCAnU3VycmVuZGVyJywgc2VsZikKICAgICAgICBzZWxmLnN1cnJlbmRlcl9idXR0b24udHJpZ2dlcmVkLmNvbm5lY3Qoc2VsZi5zdXJyZW5kZXJfYnV0dG9uX2NsaWNrZWQpCiAgICAgICAgc2VsZi5zdXJyZW5kZXJfYnV0dG9uLnNldERpc2FibGVkKFRydWUpCiAgICAgICAgc2VsZi50b29sYmFyLmFkZEFjdGlvbihzZWxmLnN1cnJlbmRlcl9idXR0b24pCgogICAgICAgICMgTXVsdGlwbGF5ZXIKICAgICAgICBzZWxmLm11bHRpcGxheWVyX2J1dHRvbiA9IFFBY3Rpb24oUUljb24oJzovZ3JhcGhpY3MvaW50ZXJuZXQucG5nJyksICdNdWx0aXBsYXllcicsIHNlbGYpCiAgICAgICAgc2VsZi5tdWx0aXBsYXllcl9idXR0b24udHJpZ2dlcmVkLmNvbm5lY3Qoc2VsZi5lc3RhYmxpc2hfaW50ZXJuZXRfY29ubmVjdGlvbikKICAgICAgICBzZWxmLnRvb2xiYXIuYWRkQWN0aW9uKHNlbGYubXVsdGlwbGF5ZXJfYnV0dG9uKQoKICAgICAgICAjIEJsYW5rIFNwYWNlCiAgICAgICAgc3BhY2VyX3dpZGdldCA9IFFXaWRnZXQoc2VsZikKICAgICAgICBzcGFjZXJfd2lkZ2V0LnNldFNpemVQb2xpY3koUVNpemVQb2xpY3kuRXhwYW5kaW5nLCBRU2l6ZVBvbGljeS5QcmVmZXJyZWQpCiAgICAgICAgc2VsZi50b29sYmFyLmFkZFdpZGdldChzcGFjZXJfd2lkZ2V0KQoKICAgICAgICAjIE1haW4gQnV0dG9uCiAgICAgICAgc2VsZi5tYWluX2J1dHRvbiA9IE1haW5CdXR0b24oc2VsZikKICAgICAgICBzZWxmLm1haW5fYnV0dG9uLnRyaWdnZXJlZC5jb25uZWN0KHNlbGYubWFpbl9idXR0b25fY2xpY2tlZCkKICAgICAgICBzZWxmLnRvb2xiYXIuYWRkQWN0aW9uKHNlbGYubWFpbl9idXR0b24pCgogICAgICAgICMgQmxhbmsgU3BhY2UKICAgICAgICBzcGFjZXJfd2lkZ2V0MiA9IFFXaWRnZXQoc2VsZikKICAgICAgICBzcGFjZXJfd2lkZ2V0Mi5zZXRTaXplUG9saWN5KFFTaXplUG9saWN5LkV4cGFuZGluZywgUVNpemVQb2xpY3kuUHJlZmVycmVkKQogICAgICAgIHNlbGYudG9vbGJhci5hZGRXaWRnZXQoc3BhY2VyX3dpZGdldDIpCgogICAgICAgICMgT3B0aW9ucwogICAgICAgIG9wdGlvbnNfYWN0ID0gUUFjdGlvbihRSWNvbignOi9ncmFwaGljcy9zZXR0aW5ncy5wbmcnKSwgJ09wdGlvbnMnLCBzZWxmKQogICAgICAgIG9wdGlvbnNfYWN0LnNldFNob3J0Y3V0KCdDdHJsK08nKQogICAgICAgIG9wdGlvbnNfYWN0LnRyaWdnZXJlZC5jb25uZWN0KHNlbGYuc2hvd19zZXR0aW5nc193aW5kb3cpCiAgICAgICAgc2VsZi50b29sYmFyLmFkZEFjdGlvbihvcHRpb25zX2FjdCkKCiAgICAgICAgIyBFeGl0IGdhbWUKICAgICAgICBleGl0X2FjdCA9IFFBY3Rpb24oUUljb24oJzovZ3JhcGhpY3MvZXhpdC5wbmcnKSwgJ0V4aXQnLCBzZWxmKQogICAgICAgIGV4aXRfYWN0LnNldFNob3J0Y3V0KCdDdHJsK1EnKQogICAgICAgIGV4aXRfYWN0LnRyaWdnZXJlZC5jb25uZWN0KHFBcHAucXVpdCkKCiAgICAgICAgc2VsZi50b29sYmFyLmFkZEFjdGlvbihleGl0X2FjdCkKCiAgICAjIG5vaW5zcGVjdGlvbiBQeVVudXNlZExvY2FsCiAgICBkZWYgcGFpbnRFdmVudChzZWxmLCBlKToKICAgICAgICAiIiIKICAgICAgICBPdmVyd3JpdGVzIG1ldGhvZCBmcm9tIDpjbGFzczpgUHlRdDUuUXRXaWRnZXRzLlFNYWluV2luZG93YAogICAgICAgICIiIgogICAgICAgIHNlbGYuZ2FtZS51cGRhdGVfZHJhd2luZygpCgogICAgZGVmIHNob3dfc2V0dGluZ3Nfd2luZG93KHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFNob3dzIFFXaWRnZXQgd2l0aCBzZXR0aW5ncyB3aW5kb3cgOmNsYXNzOmBzZXR0aW5nc1dpbmRvdy5TZXR0aW5nc1dpbmRvd2AKICAgICAgICBGdW5jdGlvbiBjYWxsZWQgb24gb3B0aW9uX2FjdCB0cmlnZ2VyIGV2ZW50LgogICAgICAgICIiIgogICAgICAgIHNlbGYuc2V0dGluZ3Nfd2luZG93ID0gU2V0dGluZ3NXaW5kb3coc2VsZi5zZXR0aW5ncyxtcCA9IHNlbGYuZ2FtZS5tdWx0aXBsYXllcikKCiAgICBkZWYgbWFpbl9idXR0b25fY2xpY2tlZChzZWxmKToKICAgICAgICAiIiIKICAgICAgICBTdGFydHMgZ2FtZS4KICAgICAgICBGdW5jdGlvbiBjYWxsZWQgb24gbWFpbl9idXR0b24gdHJpZ2dlciBldmVudC4KICAgICAgICBtYWluX2J1dHRvbiBpcyBpbiB0aGUgbWlkZGxlIG9mIHRvb2xiYXIuCiAgICAgICAgIiIiCiAgICAgICAgaWYgc2VsZi5nYW1lLnBpZWNlcyBpcyBOb25lOgogICAgICAgICAgICBzZWxmLmdhbWUuc3RhcnRfbWF0Y2goKQoKICAgIGRlZiBzdXJyZW5kZXJfYnV0dG9uX2NsaWNrZWQoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgU2hvd3MgOmNsYXNzOmBRTWVzc2FnZUJveGAgdG8gY2hlY2sgaWYgdXNlciBkaWRuJ3QgbWFrZSBtaXNjbGljay4KICAgICAgICBGdW5jdGlvbiBjYWxsZWQgb24gc3VycmVuZGVyX2J1dHRvbiB0cmlnZ2VyIGV2ZW50LgogICAgICAgICIiIgogICAgICAgIGlmIHNlbGYuZ2FtZS5tdWx0aXBsYXllcjoKICAgICAgICAgICAgc2VsZi5nYW1lLmNvbm5lY3Rpb24uc2VuZF9zcGVjaWFsX2FjdGlvbigic3VycmVuZGVyIikKICAgICAgICAgICAgc2VsZi5nYW1lLmVuZF9tYXRjaCgpCiAgICAgICAgICAgIHNlbGYuZ2FtZS5jb25uZWN0aW9uLmNsb3NlKCkKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgbXNnX2JveCA9IFFNZXNzYWdlQm94KCkKICAgICAgICBtc2dfYm94LnNldFdpbmRvd1RpdGxlKCJQbGF5ZXIgc3VycmVuZGVyZWQiKQogICAgICAgIG1zZ19ib3guc2V0VGV4dCgiRG8gWW91IHdhbnQgdG8gcGxheSBhZ2Fpbj8iKQogICAgICAgIG1zZ19ib3guc2V0U3RhbmRhcmRCdXR0b25zKFFNZXNzYWdlQm94LlllcyB8IFFNZXNzYWdlQm94Lk5vKQogICAgICAgIG1zZ19ib3guYnV0dG9uQ2xpY2tlZC5jb25uZWN0KHNlbGYuc3VycmVuZGVyX2J1dHRvbl9jbGlja2VkX2Fuc3dlcmVkKQogICAgICAgIG1zZ19ib3guZXhlY18oKQoKICAgIGRlZiBzdXJyZW5kZXJfYnV0dG9uX2NsaWNrZWRfYW5zd2VyZWQoc2VsZiwgaSk6CiAgICAgICAgIiIiCiAgICAgICAgU3VycmVuZGVycyB0aGUgZ2FtZS4KICAgICAgICBGdW5jdGlvbiBjYWxsZWQgZnJvbSBtc2dfYm94IGluc2lkZSA6ZnVuYzpgc3VycmVuZGVyX2J1dHRvbl9jbGlja2VkYAogICAgICAgICIiIgogICAgICAgIGlmIGkudGV4dCgpID09ICImWWVzIjoKICAgICAgICAgICAgc2VsZi5nYW1lLmVuZF9tYXRjaCgpCiAgICAgICAgICAgIHNlbGYuZ2FtZS5zdGFydF9tYXRjaCgpCiAgICAgICAgZWxpZiBpLnRleHQoKSA9PSAiJk5vIjoKICAgICAgICAgICAgc2VsZi5zdXJyZW5kZXJfYnV0dG9uLnNldERpc2FibGVkKFRydWUpCiAgICAgICAgICAgIHNlbGYuZ2FtZS5lbmRfbWF0Y2goKQoKICAgIGRlZiBlc3RhYmxpc2hfaW50ZXJuZXRfY29ubmVjdGlvbihzZWxmKToKICAgICAgICAiIiIKICAgICAgICBTaG93cyBRV2lkZ2V0IHdpdGggaG9zdC9jb25uZWN0IG9wdGlvbnMgOmNsYXNzOmBjb25uZWN0aW9uV2luZG93LkNvbm5lY3Rpb25XaW5kb3dgCiAgICAgICAgRnVuY3Rpb24gY2FsbGVkIG9uIG11bHRpcGxheWVyX2J1dHRvbiB0cmlnZ2VyIGV2ZW50LgogICAgICAgICIiIgogICAgICAgIHNlbGYuY29ubmVjdGlvbl93aW5kb3cgPSBDb25uZWN0aW9uV2luZG93KCkKICAgICAgICBzZWxmLmNvbm5lY3Rpb25fd2luZG93LmdvdF9jb25uZWN0aW9uLmNvbm5lY3Qoc2VsZi5jb25uZWN0aW9uX2VzdGFibGlzaGVkKQogICAgICAgIHNlbGYuY29ubmVjdGlvbl93aW5kb3cuZXhlYygpCgogICAgZGVmIGNvbm5lY3Rpb25fZXN0YWJsaXNoZWQoc2VsZik6CiAgICAgICAgIiIiCjx8ZmltX2hvbGV8PgogICAgICAgIHNlbGYuY29ubmVjdGlvbl93aW5kb3cuY29ubmVjdGlvbi5zZW5kX3NwZWNpYWxfYWN0aW9uKCJbc2V0dGluZ3NdIitzZWxmLnNldHRpbmdzLmpzb25fZHVtcF9mb3JfbXBfY29ubmVjdGlvbigpKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBhcHAgPSBRQXBwbGljYXRpb24oc3lzLmFyZ3YpCiAgICB3ID0gTWFpbigpCiAgICB3LnNob3coKQogICAgc3lzLmV4aXQoYXBwLmV4ZWNfKCkpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgU3RhcnRzIG11bHRpcGxheWVyIG1hdGNoIGFuZCBzZW5kcyBzZXR0aW5ncyBkdW1wIHRvIG90aGVyIHNpZGUuCiAgICAgICAgQ2FsbGVkIGFmdGVyIHN1Y2Nlc3NmdWwgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCBpbiA6Y2xhc3M6YGNvbm5lY3Rpb25XaW5kb3cuQ29ubmVjdGlvbldpbmRvd2AKICAgICAgICAiIiIKICAgICAgICBzZWxmLmdhbWUuc3RhcnRfbXVsdGlwbGF5ZXJfbWF0Y2goc2VsZi5jb25uZWN0aW9uX3dpbmRvdy5jb25uZWN0aW9uKQo8fGZpbV9lbmR8Pg=="]
["e7d900ec4f76cefbdde0479591415f0e0ebd7c8f-4","e7d900ec4f76cefbdde0479591415f0e0ebd7c8f","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzeXMKCmZyb20gUHlRdDUuUXRDb3JlIGltcG9ydCBRU2l6ZSwgUXQKZnJvbSBQeVF0NS5RdEd1aSBpbXBvcnQgUUljb24KZnJvbSBQeVF0NS5RdFdpZGdldHMgaW1wb3J0IFFNYWluV2luZG93LCBRQWN0aW9uLCBxQXBwLCBRQXBwbGljYXRpb24sIFFXaWRnZXQsIFFTaXplUG9saWN5LCBRTWVzc2FnZUJveAoKaW1wb3J0IHJlc291cmNlc19yYwpmcm9tIGdhbWUgaW1wb3J0IEdhbWUKZnJvbSBtYWluQnV0dG9uIGltcG9ydCBNYWluQnV0dG9uCmZyb20gc2V0dGluZ3MgaW1wb3J0IFNldHRpbmdzCmZyb20gc2V0dGluZ3NXaW5kb3cgaW1wb3J0IFNldHRpbmdzV2luZG93CmZyb20gY29ubmVjdGlvbldpbmRvdyBpbXBvcnQgQ29ubmVjdGlvbldpbmRvdwoKCmNsYXNzIE1haW4oUU1haW5XaW5kb3cpOgogICAgIiIiCiAgICBNYWluIFdpbmRvdyBvZiBwcm9ncmFtLiBcbgogICAgSW5oZXJpdHM6IDpjbGFzczpgUHlRdDUuUXRXaWRnZXRzLlFNYWluV2luZG93YAogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCgogICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZm9ybWF0PSclKGxldmVsbmFtZSlzOiUobWVzc2FnZSlzJywgbGV2ZWw9bG9nZ2luZy5ERUJVRykKICAgICAgICBsb2dnaW5nLmRlYnVnKCJJbml0aWFsaXphdGlvbi4uLiIpCgogICAgICAgIHNlbGYuc2V0dGluZ3MgPSBTZXR0aW5ncygpCiAgICAgICAgc2VsZi5nYW1lID0gR2FtZShzZWxmLCBzZWxmLnNldHRpbmdzKQogICAgICAgIHNlbGYuaW5pdF91aSgpCgogICAgICAgIGxvZ2dpbmcuaW5mbygiR2FtZSBSZWFkeSEiKQoKICAgIGRlZiBpbml0X3VpKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIEluaXRpYWxpemUgdXNlciBpbnRlcmZhY2UgaW4gTWFpbiBXaW5kb3cuIEludGVuZGVkIHRvIHVzZSBvbmx5IGluc2lkZSBjb25zdHJ1Y3Rvci4KICAgICAgICAiIiIKCiAgICAgICAgaWYgc2VsZi5zZXR0aW5ncy5hbHdheXNfb25fdG9wOgogICAgICAgICAgICBzZWxmLnNldFdpbmRvd0ZsYWdzKFF0LldpbmRvd1N0YXlzT25Ub3BIaW50KQoKICAgICAgICBzZWxmLnNldFdpbmRvd0ljb24oUUljb24oIjovZ3JhcGhpY3Mvc3RhcnQucG5nIikpCiAgICAgICAgc2VsZi5zZXRNaW5pbXVtU2l6ZSgzMDAsIDMwMCkKICAgICAgICBzZWxmLnNldFdpbmRvd1RpdGxlKCdEcmF1Z2h0cycpCgogICAgICAgICMgSW5pdGlhbGl6ZSBUb29sYmFyCiAgICAgICAgc2VsZi50b29sYmFyID0gc2VsZi5hZGRUb29sQmFyKCJCYXIiKQogICAgICAgIHNlbGYudG9vbGJhci5zZXRNb3ZhYmxlKEZhbHNlKQogICAgICAgIHNlbGYudG9vbGJhci5zZXRJY29uU2l6ZShRU2l6ZSgyOCwgMjgpKQoKICAgICAgICAjIFN1cnJlbmRlcgogICAgICAgIHNlbGYuc3VycmVuZGVyX2J1dHRvbiA9IFFBY3Rpb24oUUljb24oJzovZ3JhcGhpY3Mvc3VycmVuZGVyLnBuZycpLCAnU3VycmVuZGVyJywgc2VsZikKICAgICAgICBzZWxmLnN1cnJlbmRlcl9idXR0b24udHJpZ2dlcmVkLmNvbm5lY3Qoc2VsZi5zdXJyZW5kZXJfYnV0dG9uX2NsaWNrZWQpCiAgICAgICAgc2VsZi5zdXJyZW5kZXJfYnV0dG9uLnNldERpc2FibGVkKFRydWUpCiAgICAgICAgc2VsZi50b29sYmFyLmFkZEFjdGlvbihzZWxmLnN1cnJlbmRlcl9idXR0b24pCgogICAgICAgICMgTXVsdGlwbGF5ZXIKICAgICAgICBzZWxmLm11bHRpcGxheWVyX2J1dHRvbiA9IFFBY3Rpb24oUUljb24oJzovZ3JhcGhpY3MvaW50ZXJuZXQucG5nJyksICdNdWx0aXBsYXllcicsIHNlbGYpCiAgICAgICAgc2VsZi5tdWx0aXBsYXllcl9idXR0b24udHJpZ2dlcmVkLmNvbm5lY3Qoc2VsZi5lc3RhYmxpc2hfaW50ZXJuZXRfY29ubmVjdGlvbikKICAgICAgICBzZWxmLnRvb2xiYXIuYWRkQWN0aW9uKHNlbGYubXVsdGlwbGF5ZXJfYnV0dG9uKQoKICAgICAgICAjIEJsYW5rIFNwYWNlCiAgICAgICAgc3BhY2VyX3dpZGdldCA9IFFXaWRnZXQoc2VsZikKICAgICAgICBzcGFjZXJfd2lkZ2V0LnNldFNpemVQb2xpY3koUVNpemVQb2xpY3kuRXhwYW5kaW5nLCBRU2l6ZVBvbGljeS5QcmVmZXJyZWQpCiAgICAgICAgc2VsZi50b29sYmFyLmFkZFdpZGdldChzcGFjZXJfd2lkZ2V0KQoKICAgICAgICAjIE1haW4gQnV0dG9uCiAgICAgICAgc2VsZi5tYWluX2J1dHRvbiA9IE1haW5CdXR0b24oc2VsZikKICAgICAgICBzZWxmLm1haW5fYnV0dG9uLnRyaWdnZXJlZC5jb25uZWN0KHNlbGYubWFpbl9idXR0b25fY2xpY2tlZCkKICAgICAgICBzZWxmLnRvb2xiYXIuYWRkQWN0aW9uKHNlbGYubWFpbl9idXR0b24pCgogICAgICAgICMgQmxhbmsgU3BhY2UKICAgICAgICBzcGFjZXJfd2lkZ2V0MiA9IFFXaWRnZXQoc2VsZikKICAgICAgICBzcGFjZXJfd2lkZ2V0Mi5zZXRTaXplUG9saWN5KFFTaXplUG9saWN5LkV4cGFuZGluZywgUVNpemVQb2xpY3kuUHJlZmVycmVkKQogICAgICAgIHNlbGYudG9vbGJhci5hZGRXaWRnZXQoc3BhY2VyX3dpZGdldDIpCgogICAgICAgICMgT3B0aW9ucwogICAgICAgIG9wdGlvbnNfYWN0ID0gUUFjdGlvbihRSWNvbignOi9ncmFwaGljcy9zZXR0aW5ncy5wbmcnKSwgJ09wdGlvbnMnLCBzZWxmKQogICAgICAgIG9wdGlvbnNfYWN0LnNldFNob3J0Y3V0KCdDdHJsK08nKQogICAgICAgIG9wdGlvbnNfYWN0LnRyaWdnZXJlZC5jb25uZWN0KHNlbGYuc2hvd19zZXR0aW5nc193aW5kb3cpCiAgICAgICAgc2VsZi50b29sYmFyLmFkZEFjdGlvbihvcHRpb25zX2FjdCkKCiAgICAgICAgIyBFeGl0IGdhbWUKICAgICAgICBleGl0X2FjdCA9IFFBY3Rpb24oUUljb24oJzovZ3JhcGhpY3MvZXhpdC5wbmcnKSwgJ0V4aXQnLCBzZWxmKQogICAgICAgIGV4aXRfYWN0LnNldFNob3J0Y3V0KCdDdHJsK1EnKQo8fGZpbV9ob2xlfD4KICAgICMgbm9pbnNwZWN0aW9uIFB5VW51c2VkTG9jYWwKICAgIGRlZiBwYWludEV2ZW50KHNlbGYsIGUpOgogICAgICAgICIiIgogICAgICAgIE92ZXJ3cml0ZXMgbWV0aG9kIGZyb20gOmNsYXNzOmBQeVF0NS5RdFdpZGdldHMuUU1haW5XaW5kb3dgCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5nYW1lLnVwZGF0ZV9kcmF3aW5nKCkKCiAgICBkZWYgc2hvd19zZXR0aW5nc193aW5kb3coc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgU2hvd3MgUVdpZGdldCB3aXRoIHNldHRpbmdzIHdpbmRvdyA6Y2xhc3M6YHNldHRpbmdzV2luZG93LlNldHRpbmdzV2luZG93YAogICAgICAgIEZ1bmN0aW9uIGNhbGxlZCBvbiBvcHRpb25fYWN0IHRyaWdnZXIgZXZlbnQuCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5zZXR0aW5nc193aW5kb3cgPSBTZXR0aW5nc1dpbmRvdyhzZWxmLnNldHRpbmdzLG1wID0gc2VsZi5nYW1lLm11bHRpcGxheWVyKQoKICAgIGRlZiBtYWluX2J1dHRvbl9jbGlja2VkKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFN0YXJ0cyBnYW1lLgogICAgICAgIEZ1bmN0aW9uIGNhbGxlZCBvbiBtYWluX2J1dHRvbiB0cmlnZ2VyIGV2ZW50LgogICAgICAgIG1haW5fYnV0dG9uIGlzIGluIHRoZSBtaWRkbGUgb2YgdG9vbGJhci4KICAgICAgICAiIiIKICAgICAgICBpZiBzZWxmLmdhbWUucGllY2VzIGlzIE5vbmU6CiAgICAgICAgICAgIHNlbGYuZ2FtZS5zdGFydF9tYXRjaCgpCgogICAgZGVmIHN1cnJlbmRlcl9idXR0b25fY2xpY2tlZChzZWxmKToKICAgICAgICAiIiIKICAgICAgICBTaG93cyA6Y2xhc3M6YFFNZXNzYWdlQm94YCB0byBjaGVjayBpZiB1c2VyIGRpZG4ndCBtYWtlIG1pc2NsaWNrLgogICAgICAgIEZ1bmN0aW9uIGNhbGxlZCBvbiBzdXJyZW5kZXJfYnV0dG9uIHRyaWdnZXIgZXZlbnQuCiAgICAgICAgIiIiCiAgICAgICAgaWYgc2VsZi5nYW1lLm11bHRpcGxheWVyOgogICAgICAgICAgICBzZWxmLmdhbWUuY29ubmVjdGlvbi5zZW5kX3NwZWNpYWxfYWN0aW9uKCJzdXJyZW5kZXIiKQogICAgICAgICAgICBzZWxmLmdhbWUuZW5kX21hdGNoKCkKICAgICAgICAgICAgc2VsZi5nYW1lLmNvbm5lY3Rpb24uY2xvc2UoKQogICAgICAgICAgICByZXR1cm4KICAgICAgICBtc2dfYm94ID0gUU1lc3NhZ2VCb3goKQogICAgICAgIG1zZ19ib3guc2V0V2luZG93VGl0bGUoIlBsYXllciBzdXJyZW5kZXJlZCIpCiAgICAgICAgbXNnX2JveC5zZXRUZXh0KCJEbyBZb3Ugd2FudCB0byBwbGF5IGFnYWluPyIpCiAgICAgICAgbXNnX2JveC5zZXRTdGFuZGFyZEJ1dHRvbnMoUU1lc3NhZ2VCb3guWWVzIHwgUU1lc3NhZ2VCb3guTm8pCiAgICAgICAgbXNnX2JveC5idXR0b25DbGlja2VkLmNvbm5lY3Qoc2VsZi5zdXJyZW5kZXJfYnV0dG9uX2NsaWNrZWRfYW5zd2VyZWQpCiAgICAgICAgbXNnX2JveC5leGVjXygpCgogICAgZGVmIHN1cnJlbmRlcl9idXR0b25fY2xpY2tlZF9hbnN3ZXJlZChzZWxmLCBpKToKICAgICAgICAiIiIKICAgICAgICBTdXJyZW5kZXJzIHRoZSBnYW1lLgogICAgICAgIEZ1bmN0aW9uIGNhbGxlZCBmcm9tIG1zZ19ib3ggaW5zaWRlIDpmdW5jOmBzdXJyZW5kZXJfYnV0dG9uX2NsaWNrZWRgCiAgICAgICAgIiIiCiAgICAgICAgaWYgaS50ZXh0KCkgPT0gIiZZZXMiOgogICAgICAgICAgICBzZWxmLmdhbWUuZW5kX21hdGNoKCkKICAgICAgICAgICAgc2VsZi5nYW1lLnN0YXJ0X21hdGNoKCkKICAgICAgICBlbGlmIGkudGV4dCgpID09ICImTm8iOgogICAgICAgICAgICBzZWxmLnN1cnJlbmRlcl9idXR0b24uc2V0RGlzYWJsZWQoVHJ1ZSkKICAgICAgICAgICAgc2VsZi5nYW1lLmVuZF9tYXRjaCgpCgogICAgZGVmIGVzdGFibGlzaF9pbnRlcm5ldF9jb25uZWN0aW9uKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFNob3dzIFFXaWRnZXQgd2l0aCBob3N0L2Nvbm5lY3Qgb3B0aW9ucyA6Y2xhc3M6YGNvbm5lY3Rpb25XaW5kb3cuQ29ubmVjdGlvbldpbmRvd2AKICAgICAgICBGdW5jdGlvbiBjYWxsZWQgb24gbXVsdGlwbGF5ZXJfYnV0dG9uIHRyaWdnZXIgZXZlbnQuCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5jb25uZWN0aW9uX3dpbmRvdyA9IENvbm5lY3Rpb25XaW5kb3coKQogICAgICAgIHNlbGYuY29ubmVjdGlvbl93aW5kb3cuZ290X2Nvbm5lY3Rpb24uY29ubmVjdChzZWxmLmNvbm5lY3Rpb25fZXN0YWJsaXNoZWQpCiAgICAgICAgc2VsZi5jb25uZWN0aW9uX3dpbmRvdy5leGVjKCkKCiAgICBkZWYgY29ubmVjdGlvbl9lc3RhYmxpc2hlZChzZWxmKToKICAgICAgICAiIiIKICAgICAgICBTdGFydHMgbXVsdGlwbGF5ZXIgbWF0Y2ggYW5kIHNlbmRzIHNldHRpbmdzIGR1bXAgdG8gb3RoZXIgc2lkZS4KICAgICAgICBDYWxsZWQgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb25uZWN0aW9uIGVzdGFibGlzaGVkIGluIDpjbGFzczpgY29ubmVjdGlvbldpbmRvdy5Db25uZWN0aW9uV2luZG93YAogICAgICAgICIiIgogICAgICAgIHNlbGYuZ2FtZS5zdGFydF9tdWx0aXBsYXllcl9tYXRjaChzZWxmLmNvbm5lY3Rpb25fd2luZG93LmNvbm5lY3Rpb24pCiAgICAgICAgc2VsZi5jb25uZWN0aW9uX3dpbmRvdy5jb25uZWN0aW9uLnNlbmRfc3BlY2lhbF9hY3Rpb24oIltzZXR0aW5nc10iK3NlbGYuc2V0dGluZ3MuanNvbl9kdW1wX2Zvcl9tcF9jb25uZWN0aW9uKCkpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGFwcCA9IFFBcHBsaWNhdGlvbihzeXMuYXJndikKICAgIHcgPSBNYWluKCkKICAgIHcuc2hvdygpCiAgICBzeXMuZXhpdChhcHAuZXhlY18oKSkKPHxmaW1fc3VmZml4fD4KICAgICAgICBleGl0X2FjdC50cmlnZ2VyZWQuY29ubmVjdChxQXBwLnF1aXQpCgogICAgICAgIHNlbGYudG9vbGJhci5hZGRBY3Rpb24oZXhpdF9hY3QpCgo8fGZpbV9lbmR8Pg=="]
["e7d900ec4f76cefbdde0479591415f0e0ebd7c8f-5","e7d900ec4f76cefbdde0479591415f0e0ebd7c8f","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzeXMKCmZyb20gUHlRdDUuUXRDb3JlIGltcG9ydCBRU2l6ZSwgUXQKZnJvbSBQeVF0NS5RdEd1aSBpbXBvcnQgUUljb24KZnJvbSBQeVF0NS5RdFdpZGdldHMgaW1wb3J0IFFNYWluV2luZG93LCBRQWN0aW9uLCBxQXBwLCBRQXBwbGljYXRpb24sIFFXaWRnZXQsIFFTaXplUG9saWN5LCBRTWVzc2FnZUJveAoKaW1wb3J0IHJlc291cmNlc19yYwpmcm9tIGdhbWUgaW1wb3J0IEdhbWUKZnJvbSBtYWluQnV0dG9uIGltcG9ydCBNYWluQnV0dG9uCmZyb20gc2V0dGluZ3MgaW1wb3J0IFNldHRpbmdzCmZyb20gc2V0dGluZ3NXaW5kb3cgaW1wb3J0IFNldHRpbmdzV2luZG93CmZyb20gY29ubmVjdGlvbldpbmRvdyBpbXBvcnQgQ29ubmVjdGlvbldpbmRvdwoKCmNsYXNzIE1haW4oUU1haW5XaW5kb3cpOgogICAgIiIiCiAgICBNYWluIFdpbmRvdyBvZiBwcm9ncmFtLiBcbgogICAgSW5oZXJpdHM6IDpjbGFzczpgUHlRdDUuUXRXaWRnZXRzLlFNYWluV2luZG93YAogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCgogICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZm9ybWF0PSclKGxldmVsbmFtZSlzOiUobWVzc2FnZSlzJywgbGV2ZWw9bG9nZ2luZy5ERUJVRykKICAgICAgICBsb2dnaW5nLmRlYnVnKCJJbml0aWFsaXphdGlvbi4uLiIpCgogICAgICAgIHNlbGYuc2V0dGluZ3MgPSBTZXR0aW5ncygpCiAgICAgICAgc2VsZi5nYW1lID0gR2FtZShzZWxmLCBzZWxmLnNldHRpbmdzKQogICAgICAgIHNlbGYuaW5pdF91aSgpCgogICAgICAgIGxvZ2dpbmcuaW5mbygiR2FtZSBSZWFkeSEiKQoKICAgIGRlZiBpbml0X3VpKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIEluaXRpYWxpemUgdXNlciBpbnRlcmZhY2UgaW4gTWFpbiBXaW5kb3cuIEludGVuZGVkIHRvIHVzZSBvbmx5IGluc2lkZSBjb25zdHJ1Y3Rvci4KICAgICAgICAiIiIKCiAgICAgICAgaWYgc2VsZi5zZXR0aW5ncy5hbHdheXNfb25fdG9wOgogICAgICAgICAgICBzZWxmLnNldFdpbmRvd0ZsYWdzKFF0LldpbmRvd1N0YXlzT25Ub3BIaW50KQoKICAgICAgICBzZWxmLnNldFdpbmRvd0ljb24oUUljb24oIjovZ3JhcGhpY3Mvc3RhcnQucG5nIikpCiAgICAgICAgc2VsZi5zZXRNaW5pbXVtU2l6ZSgzMDAsIDMwMCkKICAgICAgICBzZWxmLnNldFdpbmRvd1RpdGxlKCdEcmF1Z2h0cycpCgogICAgICAgICMgSW5pdGlhbGl6ZSBUb29sYmFyCiAgICAgICAgc2VsZi50b29sYmFyID0gc2VsZi5hZGRUb29sQmFyKCJCYXIiKQogICAgICAgIHNlbGYudG9vbGJhci5zZXRNb3ZhYmxlKEZhbHNlKQogICAgICAgIHNlbGYudG9vbGJhci5zZXRJY29uU2l6ZShRU2l6ZSgyOCwgMjgpKQoKICAgICAgICAjIFN1cnJlbmRlcgogICAgICAgIHNlbGYuc3VycmVuZGVyX2J1dHRvbiA9IFFBY3Rpb24oUUljb24oJzovZ3JhcGhpY3Mvc3VycmVuZGVyLnBuZycpLCAnU3VycmVuZGVyJywgc2VsZikKICAgICAgICBzZWxmLnN1cnJlbmRlcl9idXR0b24udHJpZ2dlcmVkLmNvbm5lY3Qoc2VsZi5zdXJyZW5kZXJfYnV0dG9uX2NsaWNrZWQpCiAgICAgICAgc2VsZi5zdXJyZW5kZXJfYnV0dG9uLnNldERpc2FibGVkKFRydWUpCiAgICAgICAgc2VsZi50b29sYmFyLmFkZEFjdGlvbihzZWxmLnN1cnJlbmRlcl9idXR0b24pCgogICAgICAgICMgTXVsdGlwbGF5ZXIKICAgICAgICBzZWxmLm11bHRpcGxheWVyX2J1dHRvbiA9IFFBY3Rpb24oUUljb24oJzovZ3JhcGhpY3MvaW50ZXJuZXQucG5nJyksICdNdWx0aXBsYXllcicsIHNlbGYpCiAgICAgICAgc2VsZi5tdWx0aXBsYXllcl9idXR0b24udHJpZ2dlcmVkLmNvbm5lY3Qoc2VsZi5lc3RhYmxpc2hfaW50ZXJuZXRfY29ubmVjdGlvbikKICAgICAgICBzZWxmLnRvb2xiYXIuYWRkQWN0aW9uKHNlbGYubXVsdGlwbGF5ZXJfYnV0dG9uKQoKICAgICAgICAjIEJsYW5rIFNwYWNlCiAgICAgICAgc3BhY2VyX3dpZGdldCA9IFFXaWRnZXQoc2VsZikKICAgICAgICBzcGFjZXJfd2lkZ2V0LnNldFNpemVQb2xpY3koUVNpemVQb2xpY3kuRXhwYW5kaW5nLCBRU2l6ZVBvbGljeS5QcmVmZXJyZWQpCiAgICAgICAgc2VsZi50b29sYmFyLmFkZFdpZGdldChzcGFjZXJfd2lkZ2V0KQoKICAgICAgICAjIE1haW4gQnV0dG9uCiAgICAgICAgc2VsZi5tYWluX2J1dHRvbiA9IE1haW5CdXR0b24oc2VsZikKICAgICAgICBzZWxmLm1haW5fYnV0dG9uLnRyaWdnZXJlZC5jb25uZWN0KHNlbGYubWFpbl9idXR0b25fY2xpY2tlZCkKICAgICAgICBzZWxmLnRvb2xiYXIuYWRkQWN0aW9uKHNlbGYubWFpbl9idXR0b24pCgogICAgICAgICMgQmxhbmsgU3BhY2UKICAgICAgICBzcGFjZXJfd2lkZ2V0MiA9IFFXaWRnZXQoc2VsZikKICAgICAgICBzcGFjZXJfd2lkZ2V0Mi5zZXRTaXplUG9saWN5KFFTaXplUG9saWN5LkV4cGFuZGluZywgUVNpemVQb2xpY3kuUHJlZmVycmVkKQogICAgICAgIHNlbGYudG9vbGJhci5hZGRXaWRnZXQoc3BhY2VyX3dpZGdldDIpCgogICAgICAgICMgT3B0aW9ucwogICAgICAgIG9wdGlvbnNfYWN0ID0gUUFjdGlvbihRSWNvbignOi9ncmFwaGljcy9zZXR0aW5ncy5wbmcnKSwgJ09wdGlvbnMnLCBzZWxmKQogICAgICAgIG9wdGlvbnNfYWN0LnNldFNob3J0Y3V0KCdDdHJsK08nKQogICAgICAgIG9wdGlvbnNfYWN0LnRyaWdnZXJlZC5jb25uZWN0KHNlbGYuc2hvd19zZXR0aW5nc193aW5kb3cpCiAgICAgICAgc2VsZi50b29sYmFyLmFkZEFjdGlvbihvcHRpb25zX2FjdCkKCiAgICAgICAgIyBFeGl0IGdhbWUKICAgICAgICBleGl0X2FjdCA9IFFBY3Rpb24oUUljb24oJzovZ3JhcGhpY3MvZXhpdC5wbmcnKSwgJ0V4aXQnLCBzZWxmKQogICAgICAgIGV4aXRfYWN0LnNldFNob3J0Y3V0KCdDdHJsK1EnKQogICAgICAgIGV4aXRfYWN0LnRyaWdnZXJlZC5jb25uZWN0KHFBcHAucXVpdCkKCiAgICAgICAgc2VsZi50b29sYmFyLmFkZEFjdGlvbihleGl0X2FjdCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICMgbm9pbnNwZWN0aW9uIFB5VW51c2VkTG9jYWwKICAgIGRlZiBwYWludEV2ZW50KHNlbGYsIGUpOgogICAgICAgICIiIgo8fGZpbV9lbmR8Pg=="]
["16f986546d43d629cade4cbb6d32f9027934282e-1","16f986546d43d629cade4cbb6d32f9027934282e","PHxmaW1fcHJlZml4fD4KZnJvbSBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKaW1wb3J0IHJlcXVlc3RzCmltcG9ydCBjc3YKaW1wb3J0IHRpbWUKaW1wb3J0IGx4bWwKCiMgU0VUVElORyBXRUJTSVRFIFNPVVJDRQp1cmw9J2h0dHBzOi8vb2xkLnJlZGRpdC5jb20vci9kYXRhc2NpZW5jZS8nCgojIE1JTUlDIEJST1dTRVIgVklTSVQgVE8gQVZPSUQgQk9UIFJFU1BPTlNFIEJVVCBCUk9XU0VSIExJS0UgUkVTUE9OU0UKaGVhZGVycz17J1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAnfQoKIyBHRVRUSU5HIFJFU1BPTlNFIE9CSkVDVApwYWdlPXJlcXVlc3RzLmdldCh1cmwsIGhlYWRlcnM9aGVhZGVycykKCiMgQ1JFQVRJTkcgU1lOVEFYIFRSRUUgVE8gSEVMUCBGSU5EIFNQRUNJRklDIFRBR0VTIEJZIFNFQVJDSElORyBGT1IgQU5ZIENPTUJJTkFUSU9OIE9GIENMQVNTRVMsIElEUyBPUiBUQUcgTkFNRVMKc291cD1CZWF1dGlmdWxTb3VwKHBhZ2UudGV4dCwgJ2x4bWwnKQoKIyBTRVRUSU5HIENTViBGSUxFCmNzdl9maWxlPW9wZW4oJ3JlZGRpdF9jcmF3bGVyLmNzdicsICd3JykKY3N2X3dyaXRlcj1jc3Yud3JpdGVyKGNzdl9maWxlKQpjc3Zfd3JpdGVyLndyaXRlcm93KFsnY291bnRlcicsICd0aXRsZScsICdhdXRob3InLCAnbGlrZXMnLCAnY29tbWVudHMnXSkKCiMgRklORCBUQUdTIFdJVEggQ0xBU1MgSU5URVJFU1RFRCBJTgpkb21haW5zPXNvdXAuZmluZF9hbGwoJ3NwYW4nLCBjbGFzc189ImRvbWFpbiIpCgojIFBBU1NJTkcgTVVMVElQTEUgUEFSQU1FVEVSUwojIHNvdXAuZmluZF9hbGwoInNwYW4iLCB7ImNsYXNzIjogImRvbWFpbiIsICJoZWlnaHQiLCAiMTAwcHgifSkKCiMgU0tJUFBJTkcgVEFHUyBUSEFUIERPIE5PVCBNQVRDSCBJTlRFUkVTVCBUQUdTCmZvciBkb21haW4gaW4gZG9tYWluczoKICAgIGlmIGRvbWFpbiE9IihzZWxmLmRhdGFzY2llbmNlKSI6CiAgICAgICAgY29udGludWUKCiMgRklORElORyBQQVJFTlQgT0YgSU5URVJFU1QgQ0xBU1MgVVNJTkcgQkVBVVRJRlVMU09VUApmb3IgZG9tYWluIGluIHNvdXAuZmluZF9hbGwoInNwYW4iLCBjbGFzc189ImRvbWFpbiIpOgogICAgaWYgZG9tYWluIT0iKHNlbGYuZGF0YXNjaWVuY2UpIjoKICAgICAgICBjb250aW51ZQo8fGZpbV9ob2xlfD4KIyBTRUFSQ0hJTkcgRk9SIFRBR1MgV0lUSCBDT01CSU5BVElPTiBPRiBBVFRSSUJVVEVTCmF0dHJzPXsnY2xhc3MnOiAndGhpbmcnLCAnZGF0YS1kb21haW4nOiAnc2VsZi5kYXRhc2NpZW5jZSd9CgojIEVYVFJBQ1RJTkcgSU5GT1JNQVRJT04gRlJPTSBTT1VQCmZvciBwb3N0IGluIHNvdXAuZmluZF9hbGwoJ2RpdicsIGF0dHJzPWF0dHJzKToKICAgIHBvc3RzPXNvdXAuZmluZF9hbGwoJ2RpdicsIGF0dHJzPWF0dHJzKQogICAgdGl0bGU9cG9zdC5maW5kKCdwJywgY2xhc3NfPSJ0aXRsZSIpLnRleHQKICAgIGF1dGhvciA9IHBvc3QuZmluZCgnYScsIGNsYXNzXz0nYXV0aG9yJykudGV4dAogICAgY29tbWVudHMgPSBwb3N0LmZpbmQoJ2EnLCBjbGFzc189J2NvbW1lbnRzJykudGV4dAogICAgY29tbWVudHMgPSBwb3N0LmZpbmQoJ2EnLCBjbGFzc189J2NvbW1lbnRzJykudGV4dC5zcGxpdCgpWzBdCiAgICBpZiBjb21tZW50cyA9PSAiY29tbWVudCI6CiAgICAgICAgY29tbWVudHMgPSAwCiAgICBsaWtlcyA9IHBvc3QuZmluZCgiZGl2IiwgYXR0cnM9eyJjbGFzcyI6ICJzY29yZSBsaWtlcyJ9KS50ZXh0CiAgICBpZiBsaWtlcyA9PSAi4oCiIjoKICAgICAgICBsaWtlcyA9ICJOb25lIgogICAgICAgICAKIyBXUklUSU5HIFRPIENTViBGSUxFCmNvdW50ZXIgPSAxCmZvciBwb3N0IGluIHBvc3RzOgogICAgdGl0bGU9cG9zdC5maW5kKCdwJywgY2xhc3NfPSJ0aXRsZSIpLnRleHQKICAgIGF1dGhvciA9IHBvc3QuZmluZCgnYScsIGNsYXNzXz0nYXV0aG9yJykudGV4dAogICAgY29tbWVudHMgPSBwb3N0LmZpbmQoJ2EnLCBjbGFzc189J2NvbW1lbnRzJykudGV4dAogICAgY29tbWVudHMgPSBwb3N0LmZpbmQoJ2EnLCBjbGFzc189J2NvbW1lbnRzJykudGV4dC5zcGxpdCgpWzBdCiAgICBpZiBjb21tZW50cyA9PSAiY29tbWVudCI6CiAgICAgICAgY29tbWVudHMgPSAwCiAgICBsaWtlcyA9IHBvc3QuZmluZCgiZGl2IiwgYXR0cnM9eyJjbGFzcyI6ICJzY29yZSBsaWtlcyJ9KS50ZXh0CiAgICBpZiBsaWtlcyA9PSAi4oCiIjoKICAgICAgICBsaWtlcyA9ICJOb25lIgogICAgcG9zdF9saW5lID0gW2NvdW50ZXIsIHRpdGxlLCBhdXRob3IsIGxpa2VzLCBjb21tZW50c10KICAgIHdpdGggb3BlbigncmVkZGl0LmNzdicsICdhJykgYXMgZjoKICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGYpCiAgICAgICAgd3JpdGVyLndyaXRlcm93KHBvc3RfbGluZSkKCiAgICBjb3VudGVyICs9IDEKCiAgICAjIENTViBXUklURVIgMgogICAgY3N2X3dyaXRlci53cml0ZXJvdyhbY291bnRlciwgdGl0bGUsIGF1dGhvciwgbGlrZXMsIGNvbW1lbnRzXSkKY3N2X2ZpbGUuY2xvc2UoKQoKIyAjIFRPR0dMSU5HIEJFVFdFRU4gUEFHRVMKIyBjb3VudGVyID0gMQoKIyB3aGlsZSAoY291bnRlciA8PSAxMDApOgojICAgICBmb3IgcG9zdCBpbiBwb3N0czoKIyAgICAgICAgIHRpdGxlPXBvc3QuZmluZCgncCcsIGNsYXNzXz0idGl0bGUiKS50ZXh0CiMgICAgICAgICBhdXRob3IgPSBwb3N0LmZpbmQoJ2EnLCBjbGFzc189J2F1dGhvcicpLnRleHQKIyAgICAgICAgIGNvbW1lbnRzID0gcG9zdC5maW5kKCdhJywgY2xhc3NfPSdjb21tZW50cycpLnRleHQKIyAgICAgICAgIGNvbW1lbnRzID0gcG9zdC5maW5kKCdhJywgY2xhc3NfPSdjb21tZW50cycpLnRleHQuc3BsaXQoKVswXQojICAgICAgICAgaWYgY29tbWVudHMgPT0gImNvbW1lbnQiOgojICAgICAgICAgICAgIGNvbW1lbnRzID0gMAojICAgICAgICAgbGlrZXMgPSBwb3N0LmZpbmQoImRpdiIsIGF0dHJzPXsiY2xhc3MiOiAic2NvcmUgbGlrZXMifSkudGV4dAojICAgICAgICAgaWYgbGlrZXMgPT0gIuKAoiI6CiMgICAgICAgICAgICAgbGlrZXMgPSAiTm9uZSIKIyAgICAgICAgIHBvc3RfbGluZSA9IFtjb3VudGVyLCB0aXRsZSwgYXV0aG9yLCBsaWtlcywgY29tbWVudHNdCiMgICAgICAgICB3aXRoIG9wZW4oJ291dHB1dC5jc3YnLCAnYScpIGFzIGY6CiMgICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmKQojICAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhwb3N0X2xpbmUpCgojICAgICAgICAgbmV4dF9idXR0b24gPSBzb3VwLmZpbmQoInNwYW4iLCBjbGFzc189Im5leHQtYnV0dG9uIikKIyAgICAgICAgIG5leHRfcGFnZV9saW5rID0gbmV4dF9idXR0b24uZmluZCgiYSIpLmF0dHJzWydocmVmJ10KIyAgICAgICAgIHRpbWUuc2xlZXAoMikKIyAgICAgICAgIHBhZ2UgPSByZXF1ZXN0cy5nZXQobmV4dF9wYWdlX2xpbmssIGhlYWRlcnM9aGVhZGVycykKIyAgICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKHBhZ2UudGV4dCwgJ2x4bWwnKQoKCgo8fGZpbV9zdWZmaXh8PgogICAgcGFyZW50X2Rpdj1kb21haW4ucGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50CiAgICAjIFRIRVJFIEFSRSBGT1VSIExFVkVMUyBBQk9WRSBUSEUgQ0xBU1MgSU5URVJFU1RFRCBJTiBUSEUgRE9NIFNUUlVDVFVSRQogICAKCjx8ZmltX2VuZHw+"]
["16f986546d43d629cade4cbb6d32f9027934282e-2","16f986546d43d629cade4cbb6d32f9027934282e","PHxmaW1fcHJlZml4fD4KZnJvbSBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKaW1wb3J0IHJlcXVlc3RzCmltcG9ydCBjc3YKaW1wb3J0IHRpbWUKaW1wb3J0IGx4bWwKCiMgU0VUVElORyBXRUJTSVRFIFNPVVJDRQp1cmw9J2h0dHBzOi8vb2xkLnJlZGRpdC5jb20vci9kYXRhc2NpZW5jZS8nCgojIE1JTUlDIEJST1dTRVIgVklTSVQgVE8gQVZPSUQgQk9UIFJFU1BPTlNFIEJVVCBCUk9XU0VSIExJS0UgUkVTUE9OU0UKaGVhZGVycz17J1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAnfQoKIyBHRVRUSU5HIFJFU1BPTlNFIE9CSkVDVApwYWdlPXJlcXVlc3RzLmdldCh1cmwsIGhlYWRlcnM9aGVhZGVycykKCiMgQ1JFQVRJTkcgU1lOVEFYIFRSRUUgVE8gSEVMUCBGSU5EIFNQRUNJRklDIFRBR0VTIEJZIFNFQVJDSElORyBGT1IgQU5ZIENPTUJJTkFUSU9OIE9GIENMQVNTRVMsIElEUyBPUiBUQUcgTkFNRVMKc291cD1CZWF1dGlmdWxTb3VwKHBhZ2UudGV4dCwgJ2x4bWwnKQoKIyBTRVRUSU5HIENTViBGSUxFCmNzdl9maWxlPW9wZW4oJ3JlZGRpdF9jcmF3bGVyLmNzdicsICd3JykKY3N2X3dyaXRlcj1jc3Yud3JpdGVyKGNzdl9maWxlKQpjc3Zfd3JpdGVyLndyaXRlcm93KFsnY291bnRlcicsICd0aXRsZScsICdhdXRob3InLCAnbGlrZXMnLCAnY29tbWVudHMnXSkKCiMgRklORCBUQUdTIFdJVEggQ0xBU1MgSU5URVJFU1RFRCBJTgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRvbWFpbnM9c291cC5maW5kX2FsbCgnc3BhbicsIGNsYXNzXz0iZG9tYWluIikKCiMgUEFTU0lORyBNVUxUSVBMRSBQQVJBTUVURVJTCiMgc291cC5maW5kX2FsbCgic3BhbiIsIHsiY2xhc3MiOiAiZG9tYWluIiwgImhlaWdodCIsICIxMDBweCJ9KQo8fGZpbV9lbmR8Pg=="]
["16f986546d43d629cade4cbb6d32f9027934282e-3","16f986546d43d629cade4cbb6d32f9027934282e","PHxmaW1fcHJlZml4fD4KZnJvbSBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKaW1wb3J0IHJlcXVlc3RzCmltcG9ydCBjc3YKaW1wb3J0IHRpbWUKaW1wb3J0IGx4bWwKCiMgU0VUVElORyBXRUJTSVRFIFNPVVJDRQp1cmw9J2h0dHBzOi8vb2xkLnJlZGRpdC5jb20vci9kYXRhc2NpZW5jZS8nCgojIE1JTUlDIEJST1dTRVIgVklTSVQgVE8gQVZPSUQgQk9UIFJFU1BPTlNFIEJVVCBCUk9XU0VSIExJS0UgUkVTUE9OU0UKaGVhZGVycz17J1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAnfQoKIyBHRVRUSU5HIFJFU1BPTlNFIE9CSkVDVApwYWdlPXJlcXVlc3RzLmdldCh1cmwsIGhlYWRlcnM9aGVhZGVycykKCiMgQ1JFQVRJTkcgU1lOVEFYIFRSRUUgVE8gSEVMUCBGSU5EIFNQRUNJRklDIFRBR0VTIEJZIFNFQVJDSElORyBGT1IgQU5ZIENPTUJJTkFUSU9OIE9GIENMQVNTRVMsIElEUyBPUiBUQUcgTkFNRVMKc291cD1CZWF1dGlmdWxTb3VwKHBhZ2UudGV4dCwgJ2x4bWwnKQoKIyBTRVRUSU5HIENTViBGSUxFCmNzdl9maWxlPW9wZW4oJ3JlZGRpdF9jcmF3bGVyLmNzdicsICd3JykKY3N2X3dyaXRlcj1jc3Yud3JpdGVyKGNzdl9maWxlKQpjc3Zfd3JpdGVyLndyaXRlcm93KFsnY291bnRlcicsICd0aXRsZScsICdhdXRob3InLCAnbGlrZXMnLCAnY29tbWVudHMnXSkKCiMgRklORCBUQUdTIFdJVEggQ0xBU1MgSU5URVJFU1RFRCBJTgpkb21haW5zPXNvdXAuZmluZF9hbGwoJ3NwYW4nLCBjbGFzc189ImRvbWFpbiIpCgojIFBBU1NJTkcgTVVMVElQTEUgUEFSQU1FVEVSUwojIHNvdXAuZmluZF9hbGwoInNwYW4iLCB7ImNsYXNzIjogImRvbWFpbiIsICJoZWlnaHQiLCAiMTAwcHgifSkKCiMgU0tJUFBJTkcgVEFHUyBUSEFUIERPIE5PVCBNQVRDSCBJTlRFUkVTVCBUQUdTCmZvciBkb21haW4gaW4gZG9tYWluczoKICAgIGlmIGRvbWFpbiE9IihzZWxmLmRhdGFzY2llbmNlKSI6CiAgICAgICAgY29udGludWUKCiMgRklORElORyBQQVJFTlQgT0YgSU5URVJFU1QgQ0xBU1MgVVNJTkcgQkVBVVRJRlVMU09VUApmb3IgZG9tYWluIGluIHNvdXAuZmluZF9hbGwoInNwYW4iLCBjbGFzc189ImRvbWFpbiIpOgogICAgaWYgZG9tYWluIT0iKHNlbGYuZGF0YXNjaWVuY2UpIjoKICAgICAgICBjb250aW51ZQogICAgcGFyZW50X2Rpdj1kb21haW4ucGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50CiAgICAjIFRIRVJFIEFSRSBGT1VSIExFVkVMUyBBQk9WRSBUSEUgQ0xBU1MgSU5URVJFU1RFRCBJTiBUSEUgRE9NIFNUUlVDVFVSRQogICAKCiMgU0VBUkNISU5HIEZPUiBUQUdTIFdJVEggQ09NQklOQVRJT04gT0YgQVRUUklCVVRFUwphdHRycz17J2NsYXNzJzogJ3RoaW5nJywgJ2RhdGEtZG9tYWluJzogJ3NlbGYuZGF0YXNjaWVuY2UnfQoKIyBFWFRSQUNUSU5HIElORk9STUFUSU9OIEZST00gU09VUApmb3IgcG9zdCBpbiBzb3VwLmZpbmRfYWxsKCdkaXYnLCBhdHRycz1hdHRycyk6CiAgICBwb3N0cz1zb3VwLmZpbmRfYWxsKCdkaXYnLCBhdHRycz1hdHRycykKICAgIHRpdGxlPXBvc3QuZmluZCgncCcsIGNsYXNzXz0idGl0bGUiKS50ZXh0CiAgICBhdXRob3IgPSBwb3N0LmZpbmQoJ2EnLCBjbGFzc189J2F1dGhvcicpLnRleHQKICAgIGNvbW1lbnRzID0gcG9zdC5maW5kKCdhJywgY2xhc3NfPSdjb21tZW50cycpLnRleHQKICAgIGNvbW1lbnRzID0gcG9zdC5maW5kKCdhJywgY2xhc3NfPSdjb21tZW50cycpLnRleHQuc3BsaXQoKVswXQogICAgaWYgY29tbWVudHMgPT0gImNvbW1lbnQiOgogICAgICAgIGNvbW1lbnRzID0gMAogICAgbGlrZXMgPSBwb3N0LmZpbmQoImRpdiIsIGF0dHJzPXsiY2xhc3MiOiAic2NvcmUgbGlrZXMifSkudGV4dAogICAgaWYgbGlrZXMgPT0gIuKAoiI6CiAgICAgICAgbGlrZXMgPSAiTm9uZSIKICAgICAgICAgCiMgV1JJVElORyBUTyBDU1YgRklMRQpjb3VudGVyID0gMQpmb3IgcG9zdCBpbiBwb3N0czoKICAgIHRpdGxlPXBvc3QuZmluZCgncCcsIGNsYXNzXz0idGl0bGUiKS50ZXh0CiAgICBhdXRob3IgPSBwb3N0LmZpbmQoJ2EnLCBjbGFzc189J2F1dGhvcicpLnRleHQKICAgIGNvbW1lbnRzID0gcG9zdC5maW5kKCdhJywgY2xhc3NfPSdjb21tZW50cycpLnRleHQKICAgIGNvbW1lbnRzID0gcG9zdC5maW5kKCdhJywgY2xhc3NfPSdjb21tZW50cycpLnRleHQuc3BsaXQoKVswXQogICAgaWYgY29tbWVudHMgPT0gImNvbW1lbnQiOgo8fGZpbV9ob2xlfD4KICAgIGxpa2VzID0gcG9zdC5maW5kKCJkaXYiLCBhdHRycz17ImNsYXNzIjogInNjb3JlIGxpa2VzIn0pLnRleHQKICAgIGlmIGxpa2VzID09ICLigKIiOgogICAgICAgIGxpa2VzID0gIk5vbmUiCiAgICBwb3N0X2xpbmUgPSBbY291bnRlciwgdGl0bGUsIGF1dGhvciwgbGlrZXMsIGNvbW1lbnRzXQogICAgd2l0aCBvcGVuKCdyZWRkaXQuY3N2JywgJ2EnKSBhcyBmOgogICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZikKICAgICAgICB3cml0ZXIud3JpdGVyb3cocG9zdF9saW5lKQoKICAgIGNvdW50ZXIgKz0gMQoKICAgICMgQ1NWIFdSSVRFUiAyCiAgICBjc3Zfd3JpdGVyLndyaXRlcm93KFtjb3VudGVyLCB0aXRsZSwgYXV0aG9yLCBsaWtlcywgY29tbWVudHNdKQpjc3ZfZmlsZS5jbG9zZSgpCgojICMgVE9HR0xJTkcgQkVUV0VFTiBQQUdFUwojIGNvdW50ZXIgPSAxCgojIHdoaWxlIChjb3VudGVyIDw9IDEwMCk6CiMgICAgIGZvciBwb3N0IGluIHBvc3RzOgojICAgICAgICAgdGl0bGU9cG9zdC5maW5kKCdwJywgY2xhc3NfPSJ0aXRsZSIpLnRleHQKIyAgICAgICAgIGF1dGhvciA9IHBvc3QuZmluZCgnYScsIGNsYXNzXz0nYXV0aG9yJykudGV4dAojICAgICAgICAgY29tbWVudHMgPSBwb3N0LmZpbmQoJ2EnLCBjbGFzc189J2NvbW1lbnRzJykudGV4dAojICAgICAgICAgY29tbWVudHMgPSBwb3N0LmZpbmQoJ2EnLCBjbGFzc189J2NvbW1lbnRzJykudGV4dC5zcGxpdCgpWzBdCiMgICAgICAgICBpZiBjb21tZW50cyA9PSAiY29tbWVudCI6CiMgICAgICAgICAgICAgY29tbWVudHMgPSAwCiMgICAgICAgICBsaWtlcyA9IHBvc3QuZmluZCgiZGl2IiwgYXR0cnM9eyJjbGFzcyI6ICJzY29yZSBsaWtlcyJ9KS50ZXh0CiMgICAgICAgICBpZiBsaWtlcyA9PSAi4oCiIjoKIyAgICAgICAgICAgICBsaWtlcyA9ICJOb25lIgojICAgICAgICAgcG9zdF9saW5lID0gW2NvdW50ZXIsIHRpdGxlLCBhdXRob3IsIGxpa2VzLCBjb21tZW50c10KIyAgICAgICAgIHdpdGggb3Blbignb3V0cHV0LmNzdicsICdhJykgYXMgZjoKIyAgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGYpCiMgICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KHBvc3RfbGluZSkKCiMgICAgICAgICBuZXh0X2J1dHRvbiA9IHNvdXAuZmluZCgic3BhbiIsIGNsYXNzXz0ibmV4dC1idXR0b24iKQojICAgICAgICAgbmV4dF9wYWdlX2xpbmsgPSBuZXh0X2J1dHRvbi5maW5kKCJhIikuYXR0cnNbJ2hyZWYnXQojICAgICAgICAgdGltZS5zbGVlcCgyKQojICAgICAgICAgcGFnZSA9IHJlcXVlc3RzLmdldChuZXh0X3BhZ2VfbGluaywgaGVhZGVycz1oZWFkZXJzKQojICAgICAgICAgc291cCA9IEJlYXV0aWZ1bFNvdXAocGFnZS50ZXh0LCAnbHhtbCcpCgoKCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgY29tbWVudHMgPSAwCjx8ZmltX2VuZHw+"]
["1e682668a014cd3de8b1352e9cfc53c52e0f43e2-1","1e682668a014cd3de8b1352e9cfc53c52e0f43e2","PHxmaW1fcHJlZml4fD4KZnJvbSBjYWxlbmRhciBpbXBvcnQgdGltZWdtCmZyb20gZGF0ZXV0aWwucGFyc2VyIGltcG9ydCBwYXJzZQpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQppbXBvcnQgaW5mbGVjdAoKaW5mbGVjdGlvbl9lbmdpbmUgPSBpbmZsZWN0LmVuZ2luZSgpCgoKZGVmIGNyZWF0ZV90aW1lc3RhbXAoZGF0ZV9zdHIpOgogICAgdGltZXN0YW1wID0gcGFyc2UoZGF0ZV9zdHIpCiAgICB0aW1lc3RhbXAgPSB0aW1lZ20odGltZXN0YW1wLnRpbWV0dXBsZSgpKSAqIDEwMDAKICAgIHJldHVybiB0aW1lc3RhbXAKCgpkZWYgaW5mbGVjdChudW1iZXIpOgogICAgcmV0dXJuIGluZmxlY3Rpb25fZW5naW5lLm9yZGluYWwobnVtYmVyKQoKCmRlZiBodW1hbl9kYXRlKHRpbWVzdGFtcF9tcyk6CiAgICB0aW1lX3N0ciA9IGRhdGV0aW1lLmZyb210aW1lc3RhbXAodGltZXN0YW1wX21zIC8gMTAwMCkuc3RyZnRpbWUoJyV5LSVtLSVkICVIOiVNJykKICAgIHJldHVybiB0aW1lX3N0cgoKCmRlZiBpZChzdHJfdmFsdWUpOgogICAgcmV0dXJuICcnLmpvaW4oZSBmb3IgZSBpbiBzdHJfdmFsdWUgaWYgZS5pc2FsbnVtKCkpCgoKZGVmIGh1bWFuX2Zvcm1hdChudW0pOgogICAgaWYgbnVtIGlzIE5vbmU6CiAgICAgICAgcmV0dXJuICItIgoKICAgIGlmIGlzaW5zdGFuY2UobnVtLCBzdHIpOgogICAgICAgIG51bSA9IGZsb2F0KG51bSkKCiAgICBtYWduaXR1ZGUgPSAwCiAgICB3aGlsZSBhYnMobnVtKSA+PSAxMDAwOgogICAgICAgIG1hZ25pdHVkZSArPSAxCiAgICAgICAgbnVtIC89IDEwMDAuMAogICAgcmV0dXJuICclLjJmJXMnICUgKG51bSwgWycnLCAnSycsICdNJywgJ0InXVttYWduaXR1ZGVdKQoKCmRlZiBkZWNpbWFsX3ZhbHVlKG51bSk6CiAgICBpZiBudW0gaXMgTm9uZToKICAgICAgICByZXR1cm4gIi0iCgogICAgaWYgaXNpbnN0YW5jZShudW0sIHN0cik6CiAgICAgICAgbnVtID0gZmxvYXQobnVtKQoKICAgIHJldHVybiAiezouMmZ9Ii5mb3JtYXQobnVtKQoKCmRlZiBkb2xsYXJfdmFsdWUobnVtKToKICAgIGlmIG51bSBpcyBOb25lOgogICAgICAgIHJldHVybiAiLSIKCiAgICBpZiBpc2luc3RhbmNlKG51bSwgc3RyKToKICAgICAgICBudW0gPSBmbG9hdChudW0pCgogICAgcmV0dXJuICIkIiArICJ7OiwuMmZ9Ii5mb3JtYXQoYWJzKG51bSkpCgoKZGVmIHBlcmNlbnRfdmFsdWUobnVtKToKICAgIHJldHVybiAiezouMmZ9Ii5mb3JtYXQoYWJzKG51bSkpICsgIiUiCgoKZGVmIGRvbGxhcl9jaGFuZ2UobnVtKToKICAgIHJldHVybiAoIi0iIGlmIG51bSA8IDAgZWxzZSAiKyIpICsgZG9sbGFyX3ZhbHVlKG51bSkKCgpkZWYgcGVyY2VudF9jaGFuZ2UobnVtKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcmV0dXJuICgiLSIgaWYgbnVtIDwgMCBlbHNlICIrIikgKyBwZXJjZW50X3ZhbHVlKG51bSkKPHxmaW1fZW5kfD4="]
["1e682668a014cd3de8b1352e9cfc53c52e0f43e2-2","1e682668a014cd3de8b1352e9cfc53c52e0f43e2","PHxmaW1fcHJlZml4fD4KZnJvbSBjYWxlbmRhciBpbXBvcnQgdGltZWdtCmZyb20gZGF0ZXV0aWwucGFyc2VyIGltcG9ydCBwYXJzZQpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQppbXBvcnQgaW5mbGVjdAoKaW5mbGVjdGlvbl9lbmdpbmUgPSBpbmZsZWN0LmVuZ2luZSgpCgoKZGVmIGNyZWF0ZV90aW1lc3RhbXAoZGF0ZV9zdHIpOgogICAgdGltZXN0YW1wID0gcGFyc2UoZGF0ZV9zdHIpCiAgICB0aW1lc3RhbXAgPSB0aW1lZ20odGltZXN0YW1wLnRpbWV0dXBsZSgpKSAqIDEwMDAKICAgIHJldHVybiB0aW1lc3RhbXAKCgpkZWYgaW5mbGVjdChudW1iZXIpOgogICAgcmV0dXJuIGluZmxlY3Rpb25fZW5naW5lLm9yZGluYWwobnVtYmVyKQoKCmRlZiBodW1hbl9kYXRlKHRpbWVzdGFtcF9tcyk6CiAgICB0aW1lX3N0ciA9IGRhdGV0aW1lLmZyb210aW1lc3RhbXAodGltZXN0YW1wX21zIC8gMTAwMCkuc3RyZnRpbWUoJyV5LSVtLSVkICVIOiVNJykKICAgIHJldHVybiB0aW1lX3N0cgoKCmRlZiBpZChzdHJfdmFsdWUpOgogICAgcmV0dXJuICcnLmpvaW4oZSBmb3IgZSBpbiBzdHJfdmFsdWUgaWYgZS5pc2FsbnVtKCkpCgoKZGVmIGh1bWFuX2Zvcm1hdChudW0pOgogICAgaWYgbnVtIGlzIE5vbmU6CiAgICAgICAgcmV0dXJuICItIgoKICAgIGlmIGlzaW5zdGFuY2UobnVtLCBzdHIpOgogICAgICAgIG51bSA9IGZsb2F0KG51bSkKCiAgICBtYWduaXR1ZGUgPSAwCiAgICB3aGlsZSBhYnMobnVtKSA+PSAxMDAwOgogICAgICAgIG1hZ25pdHVkZSArPSAxCiAgICAgICAgbnVtIC89IDEwMDAuMAogICAgcmV0dXJuICclLjJmJXMnICUgKG51bSwgWycnLCAnSycsICdNJywgJ0InXVttYWduaXR1ZGVdKQoKCmRlZiBkZWNpbWFsX3ZhbHVlKG51bSk6CiAgICBpZiBudW0gaXMgTm9uZToKICAgICAgICByZXR1cm4gIi0iCgogICAgaWYgaXNpbnN0YW5jZShudW0sIHN0cik6CiAgICAgICAgbnVtID0gZmxvYXQobnVtKQoKICAgIHJldHVybiAiezouMmZ9Ii5mb3JtYXQobnVtKQoKCmRlZiBkb2xsYXJfdmFsdWUobnVtKToKICAgIGlmIG51bSBpcyBOb25lOgogICAgICAgIHJldHVybiAiLSIKCiAgICBpZiBpc2luc3RhbmNlKG51bSwgc3RyKToKICAgICAgICBudW0gPSBmbG9hdChudW0pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICByZXR1cm4gIiQiICsgIns6LC4yZn0iLmZvcm1hdChhYnMobnVtKSkKCgo8fGZpbV9lbmR8Pg=="]
["1e682668a014cd3de8b1352e9cfc53c52e0f43e2-3","1e682668a014cd3de8b1352e9cfc53c52e0f43e2","PHxmaW1fcHJlZml4fD4KZnJvbSBjYWxlbmRhciBpbXBvcnQgdGltZWdtCmZyb20gZGF0ZXV0aWwucGFyc2VyIGltcG9ydCBwYXJzZQpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQppbXBvcnQgaW5mbGVjdAoKaW5mbGVjdGlvbl9lbmdpbmUgPSBpbmZsZWN0LmVuZ2luZSgpCgoKZGVmIGNyZWF0ZV90aW1lc3RhbXAoZGF0ZV9zdHIpOgogICAgdGltZXN0YW1wID0gcGFyc2UoZGF0ZV9zdHIpCiAgICB0aW1lc3RhbXAgPSB0aW1lZ20odGltZXN0YW1wLnRpbWV0dXBsZSgpKSAqIDEwMDAKICAgIHJldHVybiB0aW1lc3RhbXAKPHxmaW1faG9sZXw+CgoKZGVmIGh1bWFuX2RhdGUodGltZXN0YW1wX21zKToKICAgIHRpbWVfc3RyID0gZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCh0aW1lc3RhbXBfbXMgLyAxMDAwKS5zdHJmdGltZSgnJXktJW0tJWQgJUg6JU0nKQogICAgcmV0dXJuIHRpbWVfc3RyCgoKZGVmIGlkKHN0cl92YWx1ZSk6CiAgICByZXR1cm4gJycuam9pbihlIGZvciBlIGluIHN0cl92YWx1ZSBpZiBlLmlzYWxudW0oKSkKCgpkZWYgaHVtYW5fZm9ybWF0KG51bSk6CiAgICBpZiBudW0gaXMgTm9uZToKICAgICAgICByZXR1cm4gIi0iCgogICAgaWYgaXNpbnN0YW5jZShudW0sIHN0cik6CiAgICAgICAgbnVtID0gZmxvYXQobnVtKQoKICAgIG1hZ25pdHVkZSA9IDAKICAgIHdoaWxlIGFicyhudW0pID49IDEwMDA6CiAgICAgICAgbWFnbml0dWRlICs9IDEKICAgICAgICBudW0gLz0gMTAwMC4wCiAgICByZXR1cm4gJyUuMmYlcycgJSAobnVtLCBbJycsICdLJywgJ00nLCAnQiddW21hZ25pdHVkZV0pCgoKZGVmIGRlY2ltYWxfdmFsdWUobnVtKToKICAgIGlmIG51bSBpcyBOb25lOgogICAgICAgIHJldHVybiAiLSIKCiAgICBpZiBpc2luc3RhbmNlKG51bSwgc3RyKToKICAgICAgICBudW0gPSBmbG9hdChudW0pCgogICAgcmV0dXJuICJ7Oi4yZn0iLmZvcm1hdChudW0pCgoKZGVmIGRvbGxhcl92YWx1ZShudW0pOgogICAgaWYgbnVtIGlzIE5vbmU6CiAgICAgICAgcmV0dXJuICItIgoKICAgIGlmIGlzaW5zdGFuY2UobnVtLCBzdHIpOgogICAgICAgIG51bSA9IGZsb2F0KG51bSkKCiAgICByZXR1cm4gIiQiICsgIns6LC4yZn0iLmZvcm1hdChhYnMobnVtKSkKCgpkZWYgcGVyY2VudF92YWx1ZShudW0pOgogICAgcmV0dXJuICJ7Oi4yZn0iLmZvcm1hdChhYnMobnVtKSkgKyAiJSIKCgpkZWYgZG9sbGFyX2NoYW5nZShudW0pOgogICAgcmV0dXJuICgiLSIgaWYgbnVtIDwgMCBlbHNlICIrIikgKyBkb2xsYXJfdmFsdWUobnVtKQoKCmRlZiBwZXJjZW50X2NoYW5nZShudW0pOgogICAgcmV0dXJuICgiLSIgaWYgbnVtIDwgMCBlbHNlICIrIikgKyBwZXJjZW50X3ZhbHVlKG51bSkKPHxmaW1fc3VmZml4fD4KCgpkZWYgaW5mbGVjdChudW1iZXIpOgogICAgcmV0dXJuIGluZmxlY3Rpb25fZW5naW5lLm9yZGluYWwobnVtYmVyKQo8fGZpbV9lbmR8Pg=="]
["1e682668a014cd3de8b1352e9cfc53c52e0f43e2-4","1e682668a014cd3de8b1352e9cfc53c52e0f43e2","PHxmaW1fcHJlZml4fD4KZnJvbSBjYWxlbmRhciBpbXBvcnQgdGltZWdtCmZyb20gZGF0ZXV0aWwucGFyc2VyIGltcG9ydCBwYXJzZQpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQppbXBvcnQgaW5mbGVjdAoKaW5mbGVjdGlvbl9lbmdpbmUgPSBpbmZsZWN0LmVuZ2luZSgpCgoKZGVmIGNyZWF0ZV90aW1lc3RhbXAoZGF0ZV9zdHIpOgogICAgdGltZXN0YW1wID0gcGFyc2UoZGF0ZV9zdHIpCiAgICB0aW1lc3RhbXAgPSB0aW1lZ20odGltZXN0YW1wLnRpbWV0dXBsZSgpKSAqIDEwMDAKICAgIHJldHVybiB0aW1lc3RhbXAKCgpkZWYgaW5mbGVjdChudW1iZXIpOgogICAgcmV0dXJuIGluZmxlY3Rpb25fZW5naW5lLm9yZGluYWwobnVtYmVyKQoKCmRlZiBodW1hbl9kYXRlKHRpbWVzdGFtcF9tcyk6CiAgICB0aW1lX3N0ciA9IGRhdGV0aW1lLmZyb210aW1lc3RhbXAodGltZXN0YW1wX21zIC8gMTAwMCkuc3RyZnRpbWUoJyV5LSVtLSVkICVIOiVNJykKICAgIHJldHVybiB0aW1lX3N0cgoKCmRlZiBpZChzdHJfdmFsdWUpOgogICAgcmV0dXJuICcnLmpvaW4oZSBmb3IgZSBpbiBzdHJfdmFsdWUgaWYgZS5pc2FsbnVtKCkpCgoKZGVmIGh1bWFuX2Zvcm1hdChudW0pOgogICAgaWYgbnVtIGlzIE5vbmU6CiAgICAgICAgcmV0dXJuICItIgoKICAgIGlmIGlzaW5zdGFuY2UobnVtLCBzdHIpOgogICAgICAgIG51bSA9IGZsb2F0KG51bSkKCiAgICBtYWduaXR1ZGUgPSAwCiAgICB3aGlsZSBhYnMobnVtKSA+PSAxMDAwOgogICAgICAgIG1hZ25pdHVkZSArPSAxCiAgICAgICAgbnVtIC89IDEwMDAuMAogICAgcmV0dXJuICclLjJmJXMnICUgKG51bSwgWycnLCAnSycsICdNJywgJ0InXVttYWduaXR1ZGVdKQoKCmRlZiBkZWNpbWFsX3ZhbHVlKG51bSk6CiAgICBpZiBudW0gaXMgTm9uZToKICAgICAgICByZXR1cm4gIi0iCgogICAgaWYgaXNpbnN0YW5jZShudW0sIHN0cik6CiAgICAgICAgbnVtID0gZmxvYXQobnVtKQoKICAgIHJldHVybiAiezouMmZ9Ii5mb3JtYXQobnVtKQo8fGZpbV9ob2xlfD4KICAgICAgICByZXR1cm4gIi0iCgogICAgaWYgaXNpbnN0YW5jZShudW0sIHN0cik6CiAgICAgICAgbnVtID0gZmxvYXQobnVtKQoKICAgIHJldHVybiAiJCIgKyAiezosLjJmfSIuZm9ybWF0KGFicyhudW0pKQoKCmRlZiBwZXJjZW50X3ZhbHVlKG51bSk6CiAgICByZXR1cm4gIns6LjJmfSIuZm9ybWF0KGFicyhudW0pKSArICIlIgoKCmRlZiBkb2xsYXJfY2hhbmdlKG51bSk6CiAgICByZXR1cm4gKCItIiBpZiBudW0gPCAwIGVsc2UgIisiKSArIGRvbGxhcl92YWx1ZShudW0pCgoKZGVmIHBlcmNlbnRfY2hhbmdlKG51bSk6CiAgICByZXR1cm4gKCItIiBpZiBudW0gPCAwIGVsc2UgIisiKSArIHBlcmNlbnRfdmFsdWUobnVtKQo8fGZpbV9zdWZmaXh8PgoKCmRlZiBkb2xsYXJfdmFsdWUobnVtKToKICAgIGlmIG51bSBpcyBOb25lOgo8fGZpbV9lbmR8Pg=="]
["1e682668a014cd3de8b1352e9cfc53c52e0f43e2-5","1e682668a014cd3de8b1352e9cfc53c52e0f43e2","PHxmaW1fcHJlZml4fD4KZnJvbSBjYWxlbmRhciBpbXBvcnQgdGltZWdtCmZyb20gZGF0ZXV0aWwucGFyc2VyIGltcG9ydCBwYXJzZQpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQppbXBvcnQgaW5mbGVjdAoKaW5mbGVjdGlvbl9lbmdpbmUgPSBpbmZsZWN0LmVuZ2luZSgpCgoKZGVmIGNyZWF0ZV90aW1lc3RhbXAoZGF0ZV9zdHIpOgogICAgdGltZXN0YW1wID0gcGFyc2UoZGF0ZV9zdHIpCiAgICB0aW1lc3RhbXAgPSB0aW1lZ20odGltZXN0YW1wLnRpbWV0dXBsZSgpKSAqIDEwMDAKICAgIHJldHVybiB0aW1lc3RhbXAKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmRlZiBpbmZsZWN0KG51bWJlcik6CiAgICByZXR1cm4gaW5mbGVjdGlvbl9lbmdpbmUub3JkaW5hbChudW1iZXIpCgo8fGZpbV9lbmR8Pg=="]
["d4837b31e5aa96a1f2fbb3ecdfb466c93f54b6e6-1","d4837b31e5aa96a1f2fbb3ecdfb466c93f54b6e6","PHxmaW1fcHJlZml4fD4KZnJvbSAuaWNkYXIgaW1wb3J0IElDREFSRGF0YXNldAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKX19hbGxfXyA9IFsKICAgICdJQ0RBUkRhdGFzZXQnCjx8ZmltX2VuZHw+"]
["d4837b31e5aa96a1f2fbb3ecdfb466c93f54b6e6-2","d4837b31e5aa96a1f2fbb3ecdfb466c93f54b6e6","PHxmaW1fcHJlZml4fD4KZnJvbSAuaWNkYXIgaW1wb3J0IElDREFSRGF0YXNldAo8fGZpbV9ob2xlfD4KXQo8fGZpbV9zdWZmaXh8PgoKCl9fYWxsX18gPSBbCiAgICAnSUNEQVJEYXRhc2V0Jwo8fGZpbV9lbmR8Pg=="]
["d4837b31e5aa96a1f2fbb3ecdfb466c93f54b6e6-3","d4837b31e5aa96a1f2fbb3ecdfb466c93f54b6e6","PHxmaW1fcHJlZml4fD4KZnJvbSAuaWNkYXIgaW1wb3J0IElDREFSRGF0YXNldAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKX19hbGxfXyA9IFsKICAgICdJQ0RBUkRhdGFzZXQnCjx8ZmltX2VuZHw+"]
["00a6c68f47b1420cf37ee836f3033d3b9dc9f79e-1","00a6c68f47b1420cf37ee836f3033d3b9dc9f79e","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzLCBtaWdyYXRpb25zCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgKCdjb3JlJywgJzAwMDJfYXV0b18yMDE1MDQzMF8xMzMyJyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkNyZWF0ZU1vZGVsKAogICAgICAgICAgICBuYW1lPSdBcnRpY2xlJywKICAgICAgICAgICAgZmllbGRzPVsKICAgICAgICAgICAgICAgICgncHVibGlzaGFibGVfcHRyJywgbW9kZWxzLk9uZVRvT25lRmllbGQocGFyZW50X2xpbms9VHJ1ZSwgYXV0b19jcmVhdGVkPVRydWUsIHByaW1hcnlfa2V5PVRydWUsIHNlcmlhbGl6ZT1GYWxzZSwgdG89J2NvcmUuUHVibGlzaGFibGUnKSksCiAgICAgICAgICAgICAgICAoJ2NvbnRlbnQnLCBtb2RlbHMuVGV4dEZpZWxkKGRlZmF1bHQ9YicnLCB2ZXJib3NlX25hbWU9J0NvbnRlbnQnKSksCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG9wdGlvbnM9ewogICAgICAgICAgICAgICAgJ3ZlcmJvc2VfbmFtZSc6ICdBcnRpY2xlJywKICAgICAgICAgICAgICAgICd2ZXJib3NlX25hbWVfcGx1cmFsJzogJ0FydGljbGVzJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYmFzZXM9KCdjb3JlLnB1Ymxpc2hhYmxlJywpLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgKSwKPHxmaW1fZW5kfD4="]
["00a6c68f47b1420cf37ee836f3033d3b9dc9f79e-2","00a6c68f47b1420cf37ee836f3033d3b9dc9f79e","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzLCBtaWdyYXRpb25zCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCjx8ZmltX2hvbGV8PgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkNyZWF0ZU1vZGVsKAogICAgICAgICAgICBuYW1lPSdBcnRpY2xlJywKICAgICAgICAgICAgZmllbGRzPVsKICAgICAgICAgICAgICAgICgncHVibGlzaGFibGVfcHRyJywgbW9kZWxzLk9uZVRvT25lRmllbGQocGFyZW50X2xpbms9VHJ1ZSwgYXV0b19jcmVhdGVkPVRydWUsIHByaW1hcnlfa2V5PVRydWUsIHNlcmlhbGl6ZT1GYWxzZSwgdG89J2NvcmUuUHVibGlzaGFibGUnKSksCiAgICAgICAgICAgICAgICAoJ2NvbnRlbnQnLCBtb2RlbHMuVGV4dEZpZWxkKGRlZmF1bHQ9YicnLCB2ZXJib3NlX25hbWU9J0NvbnRlbnQnKSksCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG9wdGlvbnM9ewogICAgICAgICAgICAgICAgJ3ZlcmJvc2VfbmFtZSc6ICdBcnRpY2xlJywKICAgICAgICAgICAgICAgICd2ZXJib3NlX25hbWVfcGx1cmFsJzogJ0FydGljbGVzJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYmFzZXM9KCdjb3JlLnB1Ymxpc2hhYmxlJywpLAogICAgICAgICksCiAgICBdCjx8ZmltX3N1ZmZpeHw+CiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgKCdjb3JlJywgJzAwMDJfYXV0b18yMDE1MDQzMF8xMzMyJyksCiAgICBdCgo8fGZpbV9lbmR8Pg=="]
["00a6c68f47b1420cf37ee836f3033d3b9dc9f79e-3","00a6c68f47b1420cf37ee836f3033d3b9dc9f79e","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzLCBtaWdyYXRpb25zCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgKCdjb3JlJywgJzAwMDJfYXV0b18yMDE1MDQzMF8xMzMyJyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkNyZWF0ZU1vZGVsKAogICAgICAgICAgICBuYW1lPSdBcnRpY2xlJywKICAgICAgICAgICAgZmllbGRzPVsKICAgICAgICAgICAgICAgICgncHVibGlzaGFibGVfcHRyJywgbW9kZWxzLk9uZVRvT25lRmllbGQocGFyZW50X2xpbms9VHJ1ZSwgYXV0b19jcmVhdGVkPVRydWUsIHByaW1hcnlfa2V5PVRydWUsIHNlcmlhbGl6ZT1GYWxzZSwgdG89J2NvcmUuUHVibGlzaGFibGUnKSksCiAgICAgICAgICAgICAgICAoJ2NvbnRlbnQnLCBtb2RlbHMuVGV4dEZpZWxkKGRlZmF1bHQ9YicnLCB2ZXJib3NlX25hbWU9J0NvbnRlbnQnKSksCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgXSwKICAgICAgICAgICAgb3B0aW9ucz17CiAgICAgICAgICAgICAgICAndmVyYm9zZV9uYW1lJzogJ0FydGljbGUnLAogICAgICAgICAgICAgICAgJ3ZlcmJvc2VfbmFtZV9wbHVyYWwnOiAnQXJ0aWNsZXMnLAo8fGZpbV9lbmR8Pg=="]
["173248370a6f9326ec044b89cad256ca10a37dec-1","173248370a6f9326ec044b89cad256ca10a37dec","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gUElMIGltcG9ydCBJbWFnZQppbXBvcnQgdG9yY2gKZnJvbSB0b3JjaC51dGlscyBpbXBvcnQgZGF0YQppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSB0b3JjaHZpc2lvbiBpbXBvcnQgdHJhbnNmb3JtcyBhcyBUCmltcG9ydCB0b3JjaHZpc2lvbgppbXBvcnQgY3YyCmltcG9ydCBzeXMKaW1wb3J0IHJhbmRvbQoKZGVmIGdyYXdfaGVhZF90YWlsKGRhdGEsIG1heF9oZWFkPTYzLCBtYXhfdGFpbD02Myk6CiAgICByZXR1cm4gZGF0YVtyYW5kb20ucmFuZGludCgwLCBtYXhfaGVhZCk6IGRhdGEuc2hhcGVbMF0gLSByYW5kb20ucmFuZGludCgwLCBtYXhfdGFpbCksIC4uLl0KCmRlZiBjdXRfb2ZmKGRhdGEsIG1heF9jdXQ9NjMqNCk6CiAgICBtYXhfY3V0ID0gbWF4KDEsIG1pbihkYXRhLnNoYXBlWzBdIC0gNjMqMywgbWF4X2N1dCkpCiAgICByZXR1cm4gZGF0YVs6IGRhdGEuc2hhcGVbMF0gLSByYW5kb20ucmFuZGludCgwLCBtYXhfY3V0KSwgLi4uXQoKZGVmIGF1Z21lbnQoZGF0YSk6CiAgICBpZiByYW5kb20ucmFuZG9tKCkgPCAwLjI6CiAgICAgICAgZGF0YSA9IGN1dF9vZmYoZGF0YSkKICAgIGlmIHJhbmRvbS5yYW5kb20oKSA8IDAuNDoKICAgICAgICBkYXRhID0gZ3Jhd19oZWFkX3RhaWwoZGF0YSkKICAgIHJldHVybiBkYXRhCgpjbGFzcyBEYXRhc2V0KGRhdGEuRGF0YXNldCk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3QsIGRhdGFfbGlzdF9maWxlLCBwaGFzZT0ndHJhaW4nLCBpbnB1dF9zaGFwZT0oNjMwLCA4MCksIG1wM2F1Z19yYXRpbz0wLjIsIG5weV9hdWc9VHJ1ZSk6CiAgICAgICAgc2VsZi5waGFzZSA9IHBoYXNlCiAgICAgICAgc2VsZi5pbnB1dF9zaGFwZSA9IGlucHV0X3NoYXBlCiAgICAgICAgc2VsZi5hdWdfcmF0aW8gPSBtcDNhdWdfcmF0aW8KICAgICAgICBzZWxmLm5weV9hdWcgPSBucHlfYXVnCgogICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZGF0YV9saXN0X2ZpbGUpLCAncicpIGFzIGZkOgogICAgICAgICAgICBpbWdzID0gZmQucmVhZGxpbmVzKCkKCiAgICAgICAgaW1ncyA9IFtvcy5wYXRoLmpvaW4ocm9vdCwgaW1nWzotMV0pIGZvciBpbWcgaW4gaW1nc10KICAgICAgICBpbWdzID0gbnAucmFuZG9tLnBlcm11dGF0aW9uKGltZ3MpCgogICAgICAgIHNlbGYuYXVncyA9IFtdCiAgICAgICAgc2VsZi5vcmdzID0gW10KCiAgICAgICAgZm9yIGZpbGUgaW4gaW1nczoKICAgICAgICAgICAgaWYgImF1ZyIgaW4gb3MucGF0aC5iYXNlbmFtZShmaWxlKToKICAgICAgICAgICAgICAgIHNlbGYuYXVncy5hcHBlbmQoZmlsZSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHNlbGYub3Jncy5hcHBlbmQoZmlsZSkKCgogICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKICAgICAgICBpZiBpbmRleCA+PSBsZW4oc2VsZi5vcmdzKToKICAgICAgICAgICAgc2FtcGxlID0gcmFuZG9tLmNob2ljZShzZWxmLmF1Z3MpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2FtcGxlID0gc2VsZi5vcmdzW2luZGV4XQogICAgICAgIAogICAgICAgIHNwbGl0cyA9IHNhbXBsZS5zcGxpdCgpCiAgICAgICAgbnB5X3BhdGggPSBzcGxpdHNbMF0KCiAgICAgICAgZGF0YSA9IG5wLmxvYWQobnB5X3BhdGgpCgogICAgICAgIGRhdGEgPSBkYXRhWzpzZWxmLmlucHV0X3NoYXBlWzBdLCAuLi5dCiAgICAgICAgCiAgICAgICAgaWYgc2VsZi5ucHlfYXVnOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGRhdGEgPSBhdWdtZW50KGRhdGEpCgo8fGZpbV9lbmR8Pg=="]
["173248370a6f9326ec044b89cad256ca10a37dec-2","173248370a6f9326ec044b89cad256ca10a37dec","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gUElMIGltcG9ydCBJbWFnZQppbXBvcnQgdG9yY2gKZnJvbSB0b3JjaC51dGlscyBpbXBvcnQgZGF0YQppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSB0b3JjaHZpc2lvbiBpbXBvcnQgdHJhbnNmb3JtcyBhcyBUCmltcG9ydCB0b3JjaHZpc2lvbgppbXBvcnQgY3YyCmltcG9ydCBzeXMKaW1wb3J0IHJhbmRvbQoKZGVmIGdyYXdfaGVhZF90YWlsKGRhdGEsIG1heF9oZWFkPTYzLCBtYXhfdGFpbD02Myk6CiAgICByZXR1cm4gZGF0YVtyYW5kb20ucmFuZGludCgwLCBtYXhfaGVhZCk6IGRhdGEuc2hhcGVbMF0gLSByYW5kb20ucmFuZGludCgwLCBtYXhfdGFpbCksIC4uLl0KCmRlZiBjdXRfb2ZmKGRhdGEsIG1heF9jdXQ9NjMqNCk6CiAgICBtYXhfY3V0ID0gbWF4KDEsIG1pbihkYXRhLnNoYXBlWzBdIC0gNjMqMywgbWF4X2N1dCkpCiAgICByZXR1cm4gZGF0YVs6IGRhdGEuc2hhcGVbMF0gLSByYW5kb20ucmFuZGludCgwLCBtYXhfY3V0KSwgLi4uXQoKZGVmIGF1Z21lbnQoZGF0YSk6CiAgICBpZiByYW5kb20ucmFuZG9tKCkgPCAwLjI6CiAgICAgICAgZGF0YSA9IGN1dF9vZmYoZGF0YSkKICAgIGlmIHJhbmRvbS5yYW5kb20oKSA8IDAuNDoKICAgICAgICBkYXRhID0gZ3Jhd19oZWFkX3RhaWwoZGF0YSkKICAgIHJldHVybiBkYXRhCjx8ZmltX2hvbGV8PgogICAgICAgIHNlbGYucGhhc2UgPSBwaGFzZQogICAgICAgIHNlbGYuaW5wdXRfc2hhcGUgPSBpbnB1dF9zaGFwZQogICAgICAgIHNlbGYuYXVnX3JhdGlvID0gbXAzYXVnX3JhdGlvCiAgICAgICAgc2VsZi5ucHlfYXVnID0gbnB5X2F1ZwoKICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGRhdGFfbGlzdF9maWxlKSwgJ3InKSBhcyBmZDoKICAgICAgICAgICAgaW1ncyA9IGZkLnJlYWRsaW5lcygpCgogICAgICAgIGltZ3MgPSBbb3MucGF0aC5qb2luKHJvb3QsIGltZ1s6LTFdKSBmb3IgaW1nIGluIGltZ3NdCiAgICAgICAgaW1ncyA9IG5wLnJhbmRvbS5wZXJtdXRhdGlvbihpbWdzKQoKICAgICAgICBzZWxmLmF1Z3MgPSBbXQogICAgICAgIHNlbGYub3JncyA9IFtdCgogICAgICAgIGZvciBmaWxlIGluIGltZ3M6CiAgICAgICAgICAgIGlmICJhdWciIGluIG9zLnBhdGguYmFzZW5hbWUoZmlsZSk6CiAgICAgICAgICAgICAgICBzZWxmLmF1Z3MuYXBwZW5kKGZpbGUpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBzZWxmLm9yZ3MuYXBwZW5kKGZpbGUpCgoKICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CiAgICAgICAgaWYgaW5kZXggPj0gbGVuKHNlbGYub3Jncyk6CiAgICAgICAgICAgIHNhbXBsZSA9IHJhbmRvbS5jaG9pY2Uoc2VsZi5hdWdzKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNhbXBsZSA9IHNlbGYub3Jnc1tpbmRleF0KICAgICAgICAKICAgICAgICBzcGxpdHMgPSBzYW1wbGUuc3BsaXQoKQogICAgICAgIG5weV9wYXRoID0gc3BsaXRzWzBdCgogICAgICAgIGRhdGEgPSBucC5sb2FkKG5weV9wYXRoKQoKICAgICAgICBkYXRhID0gZGF0YVs6c2VsZi5pbnB1dF9zaGFwZVswXSwgLi4uXQogICAgICAgIAogICAgICAgIGlmIHNlbGYubnB5X2F1ZzoKICAgICAgICAgICAgZGF0YSA9IGF1Z21lbnQoZGF0YSkKCiAgICAgICAgaWYgZGF0YS5zaGFwZVswXSA+PSBzZWxmLmlucHV0X3NoYXBlWzBdOgogICAgICAgICAgICByZXN1bHQgPSBkYXRhWzpzZWxmLmlucHV0X3NoYXBlWzBdLCA6XQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJlc3VsdCA9IG5wLnplcm9zKChzZWxmLmlucHV0X3NoYXBlWzBdLCBzZWxmLmlucHV0X3NoYXBlWzFdKSkKICAgICAgICAgICAgcmVzdWx0WzpkYXRhLnNoYXBlWzBdLCA6ZGF0YS5zaGFwZVsxXV0gPSBkYXRhCiAgICAgICAgbGFiZWwgPSBucC5pbnQzMihzcGxpdHNbMV0pCgogICAgICAgIGRhdGEgPSB0b3JjaC5mcm9tX251bXB5KHJlc3VsdCkudW5zcXVlZXplKDApCiAgICAgICAgcmV0dXJuIGRhdGEuZmxvYXQoKSwgbGFiZWwKCiAgICBkZWYgX19sZW5fXyhzZWxmKToKICAgICAgICByZXR1cm4gbGVuKHNlbGYub3JncykgKyBpbnQoc2VsZi5hdWdfcmF0aW8gKiBsZW4oc2VsZi5hdWdzKSkKPHxmaW1fc3VmZml4fD4KCmNsYXNzIERhdGFzZXQoZGF0YS5EYXRhc2V0KToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgcm9vdCwgZGF0YV9saXN0X2ZpbGUsIHBoYXNlPSd0cmFpbicsIGlucHV0X3NoYXBlPSg2MzAsIDgwKSwgbXAzYXVnX3JhdGlvPTAuMiwgbnB5X2F1Zz1UcnVlKToKPHxmaW1fZW5kfD4="]
["2e1f74d80db9d34c70e9fea8fc0864a11ea2375e-1","2e1f74d80db9d34c70e9fea8fc0864a11ea2375e","PHxmaW1fcHJlZml4fD4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IKIyBsaWNlbnNlIGluZm9ybWF0aW9uLgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiIiIk1vZHVsZSBkb2NzdHJpbmcuIiIiCmZyb20gdHlwaW5nIGltcG9ydCBJdGVyYWJsZSwgT3B0aW9uYWwsIFR1cGxlLCBVbmlvbgoKaW1wb3J0IHBhbmRhcyBhcyBwZApmcm9tIGJva2VoLm1vZGVscyBpbXBvcnQgTGF5b3V0RE9NCmZyb20gYm9rZWgucGxvdHRpbmcgaW1wb3J0IGZpZ3VyZQoKZnJvbSAuLl92ZXJzaW9uIGltcG9ydCBWRVJTSU9OCmZyb20gLi5jb21tb24uZXhjZXB0aW9ucyBpbXBvcnQgTXN0aWNweVVzZXJFcnJvcgpmcm9tIC4ubmJ0b29scy5wcm9jZXNzX3RyZWUgaW1wb3J0IGJ1aWxkX2FuZF9zaG93X3Byb2Nlc3NfdHJlZQpmcm9tIC4ubmJ0b29scy50aW1lbGluZSBpbXBvcnQgZGlzcGxheV90aW1lbGluZSwgZGlzcGxheV90aW1lbGluZV92YWx1ZXMKZnJvbSAuLm5idG9vbHMudGltZWxpbmVfZHVyYXRpb24gaW1wb3J0IGRpc3BsYXlfdGltZWxpbmVfZHVyYXRpb24KZnJvbSAuZW50aXR5X2dyYXBoX3Rvb2xzIGltcG9ydCBFbnRpdHlHcmFwaCwgcmVxX2FsZXJ0X2NvbHMsIHJlcV9pbmNfY29scwpmcm9tIC5tYXRyaXhfcGxvdCBpbXBvcnQgcGxvdF9tYXRyaXgKCl9fdmVyc2lvbl9fID0gVkVSU0lPTgpfX2F1dGhvcl9fID0gIklhbiBIZWxsZW4iCgoKQHBkLmFwaS5leHRlbnNpb25zLnJlZ2lzdGVyX2RhdGFmcmFtZV9hY2Nlc3NvcigibXBfcGxvdCIpCmNsYXNzIE1zdGljcHlQbG90QWNjZXNzb3I6CiAgICAiIiJQYW5kYXMgYXBpIGV4dGVuc2lvbiBmb3IgTVNUSUNQeSB2aXN1YWxpemF0aW9ucy4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgcGFuZGFzX29iaik6CiAgICAgICAgIiIiSW5zdGFudGlhdGUgcGFuZGFzIGV4dGVuc2lvbiBjbGFzcy4iIiIKICAgICAgICBzZWxmLl9kZiA9IHBhbmRhc19vYmoKCiAgICBkZWYgdGltZWxpbmUoc2VsZiwgKiprd2FyZ3MpIC0+IExheW91dERPTToKICAgICAgICAiIiIKICAgICAgICBEaXNwbGF5IGEgdGltZWxpbmUgb2YgZXZlbnRzLgoKICAgICAgICBQYXJhbWV0ZXJzCiAgICAgICAgLS0tLS0tLS0tLQogICAgICAgIHRpbWVfY29sdW1uIDogc3RyLCBvcHRpb25hbAogICAgICAgICAgICBOYW1lIG9mIHRoZSB0aW1lc3RhbXAgY29sdW1uCiAgICAgICAgICAgICh0aGUgZGVmYXVsdCBpcyAnVGltZUdlbmVyYXRlZCcpCiAgICAgICAgc291cmNlX2NvbHVtbnMgOiBsaXN0LCBvcHRpb25hbAogICAgICAgICAgICBMaXN0IG9mIGRlZmF1bHQgc291cmNlIGNvbHVtbnMgdG8gdXNlIGluIHRvb2x0aXBzCiAgICAgICAgICAgICh0aGUgZGVmYXVsdCBpcyBOb25lKQoKICAgICAgICBPdGhlciBQYXJhbWV0ZXJzCiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIHRpdGxlIDogc3RyLCBvcHRpb25hbAogICAgICAgICAgICBUaXRsZSB0byBkaXNwbGF5ICh0aGUgZGVmYXVsdCBpcyBOb25lKQogICAgICAgIGFsZXJ0IDogU2VjdXJpdHlBbGVydCwgb3B0aW9uYWwKICAgICAgICAgICAgQWRkIGEgcmVmZXJlbmNlIGxpbmUvbGFiZWwgdXNpbmcgdGhlIGFsZXJ0IHRpbWUgKHRoZSBkZWZhdWx0IGlzIE5vbmUpCiAgICAgICAgcmVmX2V2ZW50IDogQW55LCBvcHRpb25hbAogICAgICAgICAgICBBZGQgYSByZWZlcmVuY2UgbGluZS9sYWJlbCB1c2luZyB0aGUgYWxlcnQgdGltZSAodGhlIGRlZmF1bHQgaXMgTm9uZSkKICAgICAgICByZWZfdGltZSA6IGRhdGV0aW1lLCBvcHRpb25hbAogICAgICAgICAgICBBZGQgYSByZWZlcmVuY2UgbGluZS9sYWJlbCB1c2luZyBgcmVmX3RpbWVgICh0aGUgZGVmYXVsdCBpcyBOb25lKQogICAgICAgIGdyb3VwX2J5IDogc3RyCiAgICAgICAgICAgIFRoZSBjb2x1bW4gdG8gZ3JvdXAgdGltZWxpbmVzIG9uLgogICAgICAgIGxlZ2VuZDogc3RyLCBvcHRpb25hbAogICAgICAgICAgICAibGVmdCIsICJyaWdodCIsICJpbmxpbmUiIG9yICJub25lIgogICAgICAgICAgICAodGhlIGRlZmF1bHQgaXMgdG8gc2hvdyBhIGxlZ2VuZCB3aGVuIHBsb3R0aW5nIG11bHRpcGxlIHNlcmllcwogICAgICAgICAgICBhbmQgbm90IHRvIHNob3cgb25lIHdoZW4gcGxvdHRpbmcgYSBzaW5nbGUgc2VyaWVzKQogICAgICAgIHlheGlzIDogYm9vbCwgb3B0aW9uYWwKICAgICAgICAgICAgV2hldGhlciB0byBzaG93IHRoZSB5YXhpcyBhbmQgbGFiZWxzIChkZWZhdWx0IGlzIEZhbHNlKQogICAgICAgIHlncmlkIDogYm9vbCwgb3B0aW9uYWwKICAgICAgICAgICAgV2hldGhlciB0byBzaG93IHRoZSB5YXhpcyBncmlkIChkZWZhdWx0IGlzIEZhbHNlKQogICAgICAgIHhncmlkIDogYm9vbCwgb3B0aW9uYWwKICAgICAgICAgICAgV2hldGhlciB0byBzaG93IHRoZSB4YXhpcyBncmlkIChkZWZhdWx0IGlzIFRydWUpCiAgICAgICAgcmFuZ2VfdG9vbCA6IGJvb2wsIG9wdGlvbmFsCiAgICAgICAgICAgIFNob3cgdGhlIHRoZSByYW5nZSBzbGlkZXIgdG9vbCAoZGVmYXVsdCBpcyBUcnVlKQogICAgICAgIGhlaWdodCA6IGludCwgb3B0aW9uYWwKICAgICAgICAgICAgVGhlIGhlaWdodCBvZiB0aGUgcGxvdCBmaWd1cmUKICAgICAgICAgICAgKHRoZSBkZWZhdWx0IGlzIGF1dG8tY2FsY3VsYXRlZCBoZWlnaHQpCiAgICAgICAgd2lkdGggOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgICAgIFRoZSB3aWR0aCBvZiB0aGUgcGxvdCBmaWd1cmUgKHRoZSBkZWZhdWx0IGlzIDkwMCkKICAgICAgICBjb2xvciA6IHN0cgogICAgICAgICAgICBEZWZhdWx0IHNlcmllcyBjb2xvciAoZGVmYXVsdCBpcyAibmF2eSIpCiAgICAgICAgb3ZlcmxheV9kYXRhIDogcGQuRGF0YUZyYW1lOgogICAgICAgICAgICBBIHNlY29uZCBkYXRhZnJhbWUgdG8gcGxvdCBhcyBhIGRpZmZlcmVudCBzZXJpZXMuCiAgICAgICAgb3ZlcmxheV9jb2xvciA6IHN0cgogICAgICAgICAgICBPdmVybGF5IHNlcmllcyBjb2xvciAoZGVmYXVsdCBpcyAiZ3JlZW4iKQogICAgICAgIHJlZl9ldmVudHMgOiBwZC5EYXRhRnJhbWUsIG9wdGlvbmFsCiAgICAgICAgICAgIEFkZCByZWZlcmVuY2VzIGxpbmUvbGFiZWwgdXNpbmcgdGhlIGV2ZW50IHRpbWVzIGluIHRoZSBkYXRhZnJhbWUuCiAgICAgICAgICAgICh0aGUgZGVmYXVsdCBpcyBOb25lKQogICAgICAgIHJlZl90aW1lX2NvbCA6IHN0ciwgb3B0aW9uYWwKICAgICAgICAgICAgQWRkIHJlZmVyZW5jZXMgbGluZS9sYWJlbCB1c2luZyB0aGUgdGhpcyBjb2x1bW4gaW4gYHJlZl9ldmVudHNgCiAgICAgICAgICAgIGZvciB0aGUgdGltZSB2YWx1ZSAoeC1heGlzKS4KICAgICAgICAgICAgKHRoaXMgZGVmYXVsdHMgdGhlIHZhbHVlIG9mIHRoZSBgdGltZV9jb2x1bW5gIHBhcmFtZXRlciBvciAnVGltZUdlbmVyYXRlZCcKICAgICAgICAgICAgYHRpbWVfY29sdW1uYCBpcyBOb25lKQogICAgICAgIHJlZl9jb2wgOiBzdHIsIG9wdGlvbmFsCiAgICAgICAgICAgIFRoZSBjb2x1bW4gbmFtZSB0byB1c2UgZm9yIHRoZSBsYWJlbCBmcm9tIGByZWZfZXZlbnRzYAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICh0aGUgZGVmYXVsdCBpcyBOb25lKQo8fGZpbV9lbmR8Pg=="]
["2e1f74d80db9d34c70e9fea8fc0864a11ea2375e-2","2e1f74d80db9d34c70e9fea8fc0864a11ea2375e","PHxmaW1fcHJlZml4fD4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IKIyBsaWNlbnNlIGluZm9ybWF0aW9uLgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiIiIk1vZHVsZSBkb2NzdHJpbmcuIiIiCmZyb20gdHlwaW5nIGltcG9ydCBJdGVyYWJsZSwgT3B0aW9uYWwsIFR1cGxlLCBVbmlvbgoKaW1wb3J0IHBhbmRhcyBhcyBwZApmcm9tIGJva2VoLm1vZGVscyBpbXBvcnQgTGF5b3V0RE9NCmZyb20gYm9rZWgucGxvdHRpbmcgaW1wb3J0IGZpZ3VyZQoKZnJvbSAuLl92ZXJzaW9uIGltcG9ydCBWRVJTSU9OCmZyb20gLi5jb21tb24uZXhjZXB0aW9ucyBpbXBvcnQgTXN0aWNweVVzZXJFcnJvcgpmcm9tIC4ubmJ0b29scy5wcm9jZXNzX3RyZWUgaW1wb3J0IGJ1aWxkX2FuZF9zaG93X3Byb2Nlc3NfdHJlZQpmcm9tIC4ubmJ0b29scy50aW1lbGluZSBpbXBvcnQgZGlzcGxheV90aW1lbGluZSwgZGlzcGxheV90aW1lbGluZV92YWx1ZXMKZnJvbSAuLm5idG9vbHMudGltZWxpbmVfZHVyYXRpb24gaW1wb3J0IGRpc3BsYXlfdGltZWxpbmVfZHVyYXRpb24KZnJvbSAuZW50aXR5X2dyYXBoX3Rvb2xzIGltcG9ydCBFbnRpdHlHcmFwaCwgcmVxX2FsZXJ0X2NvbHMsIHJlcV9pbmNfY29scwpmcm9tIC5tYXRyaXhfcGxvdCBpbXBvcnQgcGxvdF9tYXRyaXgKCl9fdmVyc2lvbl9fID0gVkVSU0lPTgpfX2F1dGhvcl9fID0gIklhbiBIZWxsZW4iCgoKQHBkLmFwaS5leHRlbnNpb25zLnJlZ2lzdGVyX2RhdGFmcmFtZV9hY2Nlc3NvcigibXBfcGxvdCIpCmNsYXNzIE1zdGljcHlQbG90QWNjZXNzb3I6CiAgICAiIiJQYW5kYXMgYXBpIGV4dGVuc2lvbiBmb3IgTVNUSUNQeSB2aXN1YWxpemF0aW9ucy4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgcGFuZGFzX29iaik6CiAgICAgICAgIiIiSW5zdGFudGlhdGUgcGFuZGFzIGV4dGVuc2lvbiBjbGFzcy4iIiIKICAgICAgICBzZWxmLl9kZiA9IHBhbmRhc19vYmoKCiAgICBkZWYgdGltZWxpbmUoc2VsZiwgKiprd2FyZ3MpIC0+IExheW91dERPTToKICAgICAgICAiIiIKICAgICAgICBEaXNwbGF5IGEgdGltZWxpbmUgb2YgZXZlbnRzLgoKICAgICAgICBQYXJhbWV0ZXJzCiAgICAgICAgLS0tLS0tLS0tLQogICAgICAgIHRpbWVfY29sdW1uIDogc3RyLCBvcHRpb25hbAogICAgICAgICAgICBOYW1lIG9mIHRoZSB0aW1lc3RhbXAgY29sdW1uCiAgICAgICAgICAgICh0aGUgZGVmYXVsdCBpcyAnVGltZUdlbmVyYXRlZCcpCiAgICAgICAgc291cmNlX2NvbHVtbnMgOiBsaXN0LCBvcHRpb25hbAogICAgICAgICAgICBMaXN0IG9mIGRlZmF1bHQgc291cmNlIGNvbHVtbnMgdG8gdXNlIGluIHRvb2x0aXBzCiAgICAgICAgICAgICh0aGUgZGVmYXVsdCBpcyBOb25lKQoKICAgICAgICBPdGhlciBQYXJhbWV0ZXJzCiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIHRpdGxlIDogc3RyLCBvcHRpb25hbAogICAgICAgICAgICBUaXRsZSB0byBkaXNwbGF5ICh0aGUgZGVmYXVsdCBpcyBOb25lKQogICAgICAgIGFsZXJ0IDogU2VjdXJpdHlBbGVydCwgb3B0aW9uYWwKICAgICAgICAgICAgQWRkIGEgcmVmZXJlbmNlIGxpbmUvbGFiZWwgdXNpbmcgdGhlIGFsZXJ0IHRpbWUgKHRoZSBkZWZhdWx0IGlzIE5vbmUpCiAgICAgICAgcmVmX2V2ZW50IDogQW55LCBvcHRpb25hbAogICAgICAgICAgICBBZGQgYSByZWZlcmVuY2UgbGluZS9sYWJlbCB1c2luZyB0aGUgYWxlcnQgdGltZSAodGhlIGRlZmF1bHQgaXMgTm9uZSkKICAgICAgICByZWZfdGltZSA6IGRhdGV0aW1lLCBvcHRpb25hbAogICAgICAgICAgICBBZGQgYSByZWZlcmVuY2UgbGluZS9sYWJlbCB1c2luZyBgcmVmX3RpbWVgICh0aGUgZGVmYXVsdCBpcyBOb25lKQogICAgICAgIGdyb3VwX2J5IDogc3RyCiAgICAgICAgICAgIFRoZSBjb2x1bW4gdG8gZ3JvdXAgdGltZWxpbmVzIG9uLgogICAgICAgIGxlZ2VuZDogc3RyLCBvcHRpb25hbAogICAgICAgICAgICAibGVmdCIsICJyaWdodCIsICJpbmxpbmUiIG9yICJub25lIgogICAgICAgICAgICAodGhlIGRlZmF1bHQgaXMgdG8gc2hvdyBhIGxlZ2VuZCB3aGVuIHBsb3R0aW5nIG11bHRpcGxlIHNlcmllcwogICAgICAgICAgICBhbmQgbm90IHRvIHNob3cgb25lIHdoZW4gcGxvdHRpbmcgYSBzaW5nbGUgc2VyaWVzKQogICAgICAgIHlheGlzIDogYm9vbCwgb3B0aW9uYWwKICAgICAgICAgICAgV2hldGhlciB0byBzaG93IHRoZSB5YXhpcyBhbmQgbGFiZWxzIChkZWZhdWx0IGlzIEZhbHNlKQogICAgICAgIHlncmlkIDogYm9vbCwgb3B0aW9uYWwKICAgICAgICAgICAgV2hldGhlciB0byBzaG93IHRoZSB5YXhpcyBncmlkIChkZWZhdWx0IGlzIEZhbHNlKQogICAgICAgIHhncmlkIDogYm9vbCwgb3B0aW9uYWwKICAgICAgICAgICAgV2hldGhlciB0byBzaG93IHRoZSB4YXhpcyBncmlkIChkZWZhdWx0IGlzIFRydWUpCiAgICAgICAgcmFuZ2VfdG9vbCA6IGJvb2wsIG9wdGlvbmFsCiAgICAgICAgICAgIFNob3cgdGhlIHRoZSByYW5nZSBzbGlkZXIgdG9vbCAoZGVmYXVsdCBpcyBUcnVlKQogICAgICAgIGhlaWdodCA6IGludCwgb3B0aW9uYWwKICAgICAgICAgICAgVGhlIGhlaWdodCBvZiB0aGUgcGxvdCBmaWd1cmUKICAgICAgICAgICAgKHRoZSBkZWZhdWx0IGlzIGF1dG8tY2FsY3VsYXRlZCBoZWlnaHQpCiAgICAgICAgd2lkdGggOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgICAgIFRoZSB3aWR0aCBvZiB0aGUgcGxvdCBmaWd1cmUgKHRoZSBkZWZhdWx0IGlzIDkwMCkKICAgICAgICBjb2xvciA6IHN0cgogICAgICAgICAgICBEZWZhdWx0IHNlcmllcyBjb2xvciAoZGVmYXVsdCBpcyAibmF2eSIpCiAgICAgICAgb3ZlcmxheV9kYXRhIDogcGQuRGF0YUZyYW1lOgogICAgICAgICAgICBBIHNlY29uZCBkYXRhZnJhbWUgdG8gcGxvdCBhcyBhIGRpZmZlcmVudCBzZXJpZXMuCiAgICAgICAgb3ZlcmxheV9jb2xvciA6IHN0cgogICAgICAgICAgICBPdmVybGF5IHNlcmllcyBjb2xvciAoZGVmYXVsdCBpcyAiZ3JlZW4iKQogICAgICAgIHJlZl9ldmVudHMgOiBwZC5EYXRhRnJhbWUsIG9wdGlvbmFsCiAgICAgICAgICAgIEFkZCByZWZlcmVuY2VzIGxpbmUvbGFiZWwgdXNpbmcgdGhlIGV2ZW50IHRpbWVzIGluIHRoZSBkYXRhZnJhbWUuCiAgICAgICAgICAgICh0aGUgZGVmYXVsdCBpcyBOb25lKQogICAgICAgIHJlZl90aW1lX2NvbCA6IHN0ciwgb3B0aW9uYWwKICAgICAgICAgICAgQWRkIHJlZmVyZW5jZXMgbGluZS9sYWJlbCB1c2luZyB0aGUgdGhpcyBjb2x1bW4gaW4gYHJlZl9ldmVudHNgCiAgICAgICAgICAgIGZvciB0aGUgdGltZSB2YWx1ZSAoeC1heGlzKS4KICAgICAgICAgICAgKHRoaXMgZGVmYXVsdHMgdGhlIHZhbHVlIG9mIHRoZSBgdGltZV9jb2x1bW5gIHBhcmFtZXRlciBvciAnVGltZUdlbmVyYXRlZCcKICAgICAgICAgICAgYHRpbWVfY29sdW1uYCBpcyBOb25lKQogICAgICAgIHJlZl9jb2wgOiBzdHIsIG9wdGlvbmFsCiAgICAgICAgICAgIFRoZSBjb2x1bW4gbmFtZSB0byB1c2UgZm9yIHRoZSBsYWJlbCBmcm9tIGByZWZfZXZlbnRzYAogICAgICAgICAgICAodGhlIGRlZmF1bHQgaXMgTm9uZSkKICAgICAgICByZWZfdGltZXMgOiBMaXN0W1R1cGxlW2RhdGV0aW1lLCBzdHJdXSwgb3B0aW9uYWwKICAgICAgICAgICAgQWRkIG9uZSBvciBtb3JlIHJlZmVyZW5jZSBsaW5lL2xhYmVsIHVzaW5nICh0aGUgZGVmYXVsdCBpcyBOb25lKQoKICAgICAgICBSZXR1cm5zCiAgICAgICAgLS0tLS0tLQogICAgICAgIExheW91dERPTQogICAgICAgICAgICBUaGUgYm9rZWggcGxvdCBmaWd1cmUuCgogICAgICAgICIiIgogICAgICAgIHJldHVybiBkaXNwbGF5X3RpbWVsaW5lKGRhdGE9c2VsZi5fZGYsICoqa3dhcmdzKQoKICAgICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogICAgZGVmIHRpbWVsaW5lX3ZhbHVlcyhzZWxmLCB2YWx1ZV9jb2w6IHN0ciA9IE5vbmUsICoqa3dhcmdzKSAtPiBMYXlvdXRET006CiAgICAgICAgIiIiCiAgICAgICAgRGlzcGxheSBhIHRpbWVsaW5lIG9mIGV2ZW50cy4KCiAgICAgICAgUGFyYW1ldGVycwogICAgICAgIC0tLS0tLS0tLS0KICAgICAgICB0aW1lX2NvbHVtbiA6IHN0ciwgb3B0aW9uYWwKICAgICAgICAgICAgTmFtZSBvZiB0aGUgdGltZXN0YW1wIGNvbHVtbgogICAgICAgICAgICAodGhlIGRlZmF1bHQgaXMgJ1RpbWVHZW5lcmF0ZWQnKQogICAgICAgIHZhbHVlX2NvbCA6IHN0cgogICAgICAgICAgICBUaGUgY29sdW1uIG5hbWUgaG9sZGluZyB0aGUgdmFsdWUgdG8gcGxvdCB2ZXJ0aWNhbGx5CiAgICAgICAgc291cmNlX2NvbHVtbnMgOiBsaXN0LCBvcHRpb25hbAogICAgICAgICAgICBMaXN0IG9mIGRlZmF1bHQgc291cmNlIGNvbHVtbnMgdG8gdXNlIGluIHRvb2x0aXBzCiAgICAgICAgICAgICh0aGUgZGVmYXVsdCBpcyBOb25lKQoKICAgICAgICBPdGhlciBQYXJhbWV0ZXJzCiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIHggOiBzdHIsIG9wdGlvbmFsCiAgICAgICAgICAgIGFsaWFzIG9mIGB0aW1lX2NvbHVtbmAKICAgICAgICB5IDogc3RyLCBvcHRpb25hbAogICAgICAgICAgICBhbGlhcyBvZiBgdmFsdWVfY29sYAogICAgICAgIHRpdGxlIDogc3RyLCBvcHRpb25hbAogICAgICAgICAgICBUaXRsZSB0byBkaXNwbGF5ICh0aGUgZGVmYXVsdCBpcyBOb25lKQogICAgICAgIHJlZl9ldmVudCA6IEFueSwgb3B0aW9uYWwKICAgICAgICAgICAgQWRkIGEgcmVmZXJlbmNlIGxpbmUvbGFiZWwgdXNpbmcgdGhlIGFsZXJ0IHRpbWUgKHRoZSBkZWZhdWx0IGlzIE5vbmUpCiAgICAgICAgcmVmX3RpbWUgOiBkYXRldGltZSwgb3B0aW9uYWwKICAgICAgICAgICAgQWRkIGEgcmVmZXJlbmNlIGxpbmUvbGFiZWwgdXNpbmcgYHJlZl90aW1lYCAodGhlIGRlZmF1bHQgaXMgTm9uZSkKICAgICAgICByZWZfbGFiZWwgOiBzdHIsIG9wdGlvbmFsCiAgICAgICAgICAgIEEgbGFiZWwgZm9yIHRoZSBgcmVmX2V2ZW50YCBvciBgcmVmX3RpbWVgIHJlZmVyZW5jZSBpdGVtCiAgICAgICAgZ3JvdXBfYnkgOiBzdHIKICAgICAgICAgICAgKHdoZXJlIGBkYXRhYCBpcyBhIERhdGFGcmFtZSkKICAgICAgICAgICAgVGhlIGNvbHVtbiB0byBncm91cCB0aW1lbGluZXMgb24KICAgICAgICBsZWdlbmQ6IHN0ciwgb3B0aW9uYWwKICAgICAgICAgICAgImxlZnQiLCAicmlnaHQiLCAiaW5saW5lIiBvciAibm9uZSIKICAgICAgICAgICAgKHRoZSBkZWZhdWx0IGlzIHRvIHNob3cgYSBsZWdlbmQgd2hlbiBwbG90dGluZyBtdWx0aXBsZSBzZXJpZXMKICAgICAgICAgICAgYW5kIG5vdCB0byBzaG93IG9uZSB3aGVuIHBsb3R0aW5nIGEgc2luZ2xlIHNlcmllcykKICAgICAgICB5YXhpcyA6IGJvb2wsIG9wdGlvbmFsCiAgICAgICAgICAgIFdoZXRoZXIgdG8gc2hvdyB0aGUgeWF4aXMgYW5kIGxhYmVscwogICAgICAgIHJhbmdlX3Rvb2wgOiBib29sLCBvcHRpb25hbAogICAgICAgICAgICBTaG93IHRoZSB0aGUgcmFuZ2Ugc2xpZGVyIHRvb2wgKGRlZmF1bHQgaXMgVHJ1ZSkKICAgICAgICBoZWlnaHQgOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgICAgIFRoZSBoZWlnaHQgb2YgdGhlIHBsb3QgZmlndXJlCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgKHRoZSBkZWZhdWx0IGlzIGF1dG8tY2FsY3VsYXRlZCBoZWlnaHQpCjx8ZmltX2VuZHw+"]
["4182630d14a6db0f7e5e62adc4143dc26e062d58-1","4182630d14a6db0f7e5e62adc4143dc26e062d58","PHxmaW1fcHJlZml4fD4KZnJvbSBmb250UGFydHMuYmFzZS5lcnJvcnMgaW1wb3J0IEZvbnRQYXJ0c0Vycm9yCmZyb20gZm9udFBhcnRzLmJhc2UuZm9udCBpbXBvcnQgQmFzZUZvbnQKZnJvbSBmb250UGFydHMuYmFzZS5pbmZvIGltcG9ydCBCYXNlSW5mbwpmcm9tIGZvbnRQYXJ0cy5iYXNlLmdyb3VwcyBpbXBvcnQgQmFzZUdyb3Vwcwpmcm9tIGZvbnRQYXJ0cy5iYXNlLmtlcm5pbmcgaW1wb3J0IEJhc2VLZXJuaW5nCmZyb20gZm9udFBhcnRzLmJhc2UuZmVhdHVyZXMgaW1wb3J0IEJhc2VGZWF0dXJlcwpmcm9tIGZvbnRQYXJ0cy5iYXNlLmxpYiBpbXBvcnQgQmFzZUxpYgpmcm9tIGZvbnRQYXJ0cy5iYXNlLmxheWVyIGltcG9ydCBCYXNlTGF5ZXIKPHxmaW1faG9sZXw+CmZyb20gZm9udFBhcnRzLmJhc2UuYlBvaW50IGltcG9ydCBCYXNlQlBvaW50CmZyb20gZm9udFBhcnRzLmJhc2UuY29tcG9uZW50IGltcG9ydCBCYXNlQ29tcG9uZW50CmZyb20gZm9udFBhcnRzLmJhc2UuYW5jaG9yIGltcG9ydCBCYXNlQW5jaG9yCmZyb20gZm9udFBhcnRzLmJhc2UuZ3VpZGVsaW5lIGltcG9ydCBCYXNlR3VpZGVsaW5lCmZyb20gZm9udFBhcnRzLmJhc2UuaW1hZ2UgaW1wb3J0IEJhc2VJbWFnZQo8fGZpbV9zdWZmaXh8Pgpmcm9tIGZvbnRQYXJ0cy5iYXNlLmdseXBoIGltcG9ydCBCYXNlR2x5cGgKZnJvbSBmb250UGFydHMuYmFzZS5jb250b3VyIGltcG9ydCBCYXNlQ29udG91cgpmcm9tIGZvbnRQYXJ0cy5iYXNlLnBvaW50IGltcG9ydCBCYXNlUG9pbnQKZnJvbSBmb250UGFydHMuYmFzZS5zZWdtZW50IGltcG9ydCBCYXNlU2VnbWVudAo8fGZpbV9lbmR8Pg=="]
["4182630d14a6db0f7e5e62adc4143dc26e062d58-2","4182630d14a6db0f7e5e62adc4143dc26e062d58","PHxmaW1fcHJlZml4fD4KZnJvbSBmb250UGFydHMuYmFzZS5lcnJvcnMgaW1wb3J0IEZvbnRQYXJ0c0Vycm9yCmZyb20gZm9udFBhcnRzLmJhc2UuZm9udCBpbXBvcnQgQmFzZUZvbnQKZnJvbSBmb250UGFydHMuYmFzZS5pbmZvIGltcG9ydCBCYXNlSW5mbwpmcm9tIGZvbnRQYXJ0cy5iYXNlLmdyb3VwcyBpbXBvcnQgQmFzZUdyb3Vwcwpmcm9tIGZvbnRQYXJ0cy5iYXNlLmtlcm5pbmcgaW1wb3J0IEJhc2VLZXJuaW5nCmZyb20gZm9udFBhcnRzLmJhc2UuZmVhdHVyZXMgaW1wb3J0IEJhc2VGZWF0dXJlcwpmcm9tIGZvbnRQYXJ0cy5iYXNlLmxpYiBpbXBvcnQgQmFzZUxpYgpmcm9tIGZvbnRQYXJ0cy5iYXNlLmxheWVyIGltcG9ydCBCYXNlTGF5ZXIKZnJvbSBmb250UGFydHMuYmFzZS5nbHlwaCBpbXBvcnQgQmFzZUdseXBoCjx8ZmltX2hvbGV8Pgpmcm9tIGZvbnRQYXJ0cy5iYXNlLmNvbXBvbmVudCBpbXBvcnQgQmFzZUNvbXBvbmVudApmcm9tIGZvbnRQYXJ0cy5iYXNlLmFuY2hvciBpbXBvcnQgQmFzZUFuY2hvcgpmcm9tIGZvbnRQYXJ0cy5iYXNlLmd1aWRlbGluZSBpbXBvcnQgQmFzZUd1aWRlbGluZQpmcm9tIGZvbnRQYXJ0cy5iYXNlLmltYWdlIGltcG9ydCBCYXNlSW1hZ2UKPHxmaW1fc3VmZml4fD4KZnJvbSBmb250UGFydHMuYmFzZS5jb250b3VyIGltcG9ydCBCYXNlQ29udG91cgpmcm9tIGZvbnRQYXJ0cy5iYXNlLnBvaW50IGltcG9ydCBCYXNlUG9pbnQKZnJvbSBmb250UGFydHMuYmFzZS5zZWdtZW50IGltcG9ydCBCYXNlU2VnbWVudApmcm9tIGZvbnRQYXJ0cy5iYXNlLmJQb2ludCBpbXBvcnQgQmFzZUJQb2ludAo8fGZpbV9lbmR8Pg=="]
["4182630d14a6db0f7e5e62adc4143dc26e062d58-3","4182630d14a6db0f7e5e62adc4143dc26e062d58","PHxmaW1fcHJlZml4fD4KZnJvbSBmb250UGFydHMuYmFzZS5lcnJvcnMgaW1wb3J0IEZvbnRQYXJ0c0Vycm9yCmZyb20gZm9udFBhcnRzLmJhc2UuZm9udCBpbXBvcnQgQmFzZUZvbnQKZnJvbSBmb250UGFydHMuYmFzZS5pbmZvIGltcG9ydCBCYXNlSW5mbwpmcm9tIGZvbnRQYXJ0cy5iYXNlLmdyb3VwcyBpbXBvcnQgQmFzZUdyb3Vwcwpmcm9tIGZvbnRQYXJ0cy5iYXNlLmtlcm5pbmcgaW1wb3J0IEJhc2VLZXJuaW5nCmZyb20gZm9udFBhcnRzLmJhc2UuZmVhdHVyZXMgaW1wb3J0IEJhc2VGZWF0dXJlcwpmcm9tIGZvbnRQYXJ0cy5iYXNlLmxpYiBpbXBvcnQgQmFzZUxpYgpmcm9tIGZvbnRQYXJ0cy5iYXNlLmxheWVyIGltcG9ydCBCYXNlTGF5ZXIKZnJvbSBmb250UGFydHMuYmFzZS5nbHlwaCBpbXBvcnQgQmFzZUdseXBoCmZyb20gZm9udFBhcnRzLmJhc2UuY29udG91ciBpbXBvcnQgQmFzZUNvbnRvdXIKZnJvbSBmb250UGFydHMuYmFzZS5wb2ludCBpbXBvcnQgQmFzZVBvaW50CmZyb20gZm9udFBhcnRzLmJhc2Uuc2VnbWVudCBpbXBvcnQgQmFzZVNlZ21lbnQKZnJvbSBmb250UGFydHMuYmFzZS5iUG9pbnQgaW1wb3J0IEJhc2VCUG9pbnQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIGZvbnRQYXJ0cy5iYXNlLmNvbXBvbmVudCBpbXBvcnQgQmFzZUNvbXBvbmVudApmcm9tIGZvbnRQYXJ0cy5iYXNlLmFuY2hvciBpbXBvcnQgQmFzZUFuY2hvcgpmcm9tIGZvbnRQYXJ0cy5iYXNlLmd1aWRlbGluZSBpbXBvcnQgQmFzZUd1aWRlbGluZQpmcm9tIGZvbnRQYXJ0cy5iYXNlLmltYWdlIGltcG9ydCBCYXNlSW1hZ2UKPHxmaW1fZW5kfD4="]
["4182630d14a6db0f7e5e62adc4143dc26e062d58-4","4182630d14a6db0f7e5e62adc4143dc26e062d58","PHxmaW1fcHJlZml4fD4KZnJvbSBmb250UGFydHMuYmFzZS5lcnJvcnMgaW1wb3J0IEZvbnRQYXJ0c0Vycm9yCmZyb20gZm9udFBhcnRzLmJhc2UuZm9udCBpbXBvcnQgQmFzZUZvbnQKZnJvbSBmb250UGFydHMuYmFzZS5pbmZvIGltcG9ydCBCYXNlSW5mbwpmcm9tIGZvbnRQYXJ0cy5iYXNlLmdyb3VwcyBpbXBvcnQgQmFzZUdyb3Vwcwpmcm9tIGZvbnRQYXJ0cy5iYXNlLmtlcm5pbmcgaW1wb3J0IEJhc2VLZXJuaW5nCmZyb20gZm9udFBhcnRzLmJhc2UuZmVhdHVyZXMgaW1wb3J0IEJhc2VGZWF0dXJlcwpmcm9tIGZvbnRQYXJ0cy5iYXNlLmxpYiBpbXBvcnQgQmFzZUxpYgpmcm9tIGZvbnRQYXJ0cy5iYXNlLmxheWVyIGltcG9ydCBCYXNlTGF5ZXIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIGZvbnRQYXJ0cy5iYXNlLmdseXBoIGltcG9ydCBCYXNlR2x5cGgKZnJvbSBmb250UGFydHMuYmFzZS5jb250b3VyIGltcG9ydCBCYXNlQ29udG91cgpmcm9tIGZvbnRQYXJ0cy5iYXNlLnBvaW50IGltcG9ydCBCYXNlUG9pbnQKZnJvbSBmb250UGFydHMuYmFzZS5zZWdtZW50IGltcG9ydCBCYXNlU2VnbWVudAo8fGZpbV9lbmR8Pg=="]
["04b6948cbf93bbddf7a05a17b291658b66e2e1ab-1","04b6948cbf93bbddf7a05a17b291658b66e2e1ab","PHxmaW1fcHJlZml4fD4KJycnCjx8ZmltX2hvbGV8PgonJycKCmltcG9ydCBtYXRoCgppbXBvcnQgdG9yY2gKaW1wb3J0IHRvcmNoLm5uIGFzIG5uCmltcG9ydCB0b3JjaC5ubi5mdW5jdGlvbmFsIGFzIEYKZnJvbSB0b3JjaC5ubiBpbXBvcnQgaW5pdAoKZnJvbSBkb3duX3NhbXBsZSBpbXBvcnQgRG93bnNhbXBsZUEKCgpjbGFzcyBMMlBfQmFzaWNibG9ja19WMShubi5Nb2R1bGUpOgogICAgZXhwYW5zaW9uID0gMQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnBsYW5lcywgcGxhbmVzLCBzdHJpZGU9MSwgZG93bnNhbXBsZT1Ob25lKToKICAgICAgICBzdXBlcihMMlBfQmFzaWNibG9ja19WMSwgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYuYWRkX25vaXNlID0gRmFsc2UKCiAgICAgICAgc2VsZi5jb252X2EgPSBubi5Db252MmQoaW5wbGFuZXMsIHBsYW5lcywga2VybmVsX3NpemU9Mywgc3RyaWRlPXN0cmlkZSwgcGFkZGluZz0xLCBiaWFzPUZhbHNlKQogICAgICAgIHNlbGYuYm5fYSA9IG5uLkJhdGNoTm9ybTJkKHBsYW5lcykKCiAgICAgICAgc2VsZi5jb252X2IgPSBubi5Db252MmQocGxhbmVzLCBwbGFuZXMsIGtlcm5lbF9zaXplPTMsIHN0cmlkZT0xLCBwYWRkaW5nPTEsIGJpYXM9RmFsc2UpCiAgICAgICAgc2VsZi5ibl9iID0gbm4uQmF0Y2hOb3JtMmQocGxhbmVzKQoKICAgICAgICBzZWxmLmRvd25zYW1wbGUgPSBkb3duc2FtcGxlCgogICAgICAgIGlmIHBsYW5lcyA9PSAxNjoKICAgICAgICAgICAgc2VsZi5zaWdtYV9tYXAgPSBubi5QYXJhbWV0ZXIodG9yY2gub25lcygoMTYsIDMyLCAzMikpICogMC4yNSAsIHJlcXVpcmVzX2dyYWQ9VHJ1ZSkKICAgICAgICBlbGlmIHBsYW5lcyA9PSAzMjoKICAgICAgICAgICAgc2VsZi5zaWdtYV9tYXAgPSBubi5QYXJhbWV0ZXIodG9yY2gub25lcygoMzIsIDE2LCAxNikpICogMC4yNSwgcmVxdWlyZXNfZ3JhZD1UcnVlKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYuc2lnbWFfbWFwID0gbm4uUGFyYW1ldGVyKHRvcmNoLm9uZXMoKDY0LCA4LCA4KSkgKiAwLjI1LCByZXF1aXJlc19ncmFkPVRydWUpCgogICAgZGVmIHB1dF9ub2lzZShzZWxmLCBtb2RlID0gVHJ1ZSk6CiAgICAgICAgc2VsZi5hZGRfbm9pc2UgPSBtb2RlCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeCk6CiAgICAgICAgcmVzaWR1YWwgPSB4CiAgICAgICAgYmFzaWNibG9jayA9IEYucmVsdShzZWxmLmJuX2Eoc2VsZi5jb252X2EoeCkpKQoKICAgICAgICBiYXNpY2Jsb2NrID0gc2VsZi5jb252X2IoYmFzaWNibG9jaykKICAgICAgICBiYXNpY2Jsb2NrID0gc2VsZi5ibl9iKGJhc2ljYmxvY2spCgogICAgICAgIGlmIHNlbGYuZG93bnNhbXBsZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgcmVzaWR1YWwgPSBzZWxmLmRvd25zYW1wbGUoeCkKCiAgICAgICAgb3V0ID0gcmVzaWR1YWwgKyBiYXNpY2Jsb2NrCgogICAgICAgIGlmIHNlbGYuYWRkX25vaXNlOgogICAgICAgICAgICBzZWxmLm5vcm1hbF9ub2lzZSA9IHNlbGYuc2lnbWFfbWFwLmNsb25lKCkubm9ybWFsXygwLDEpCiAgICAgICAgICAgIHNlbGYucGVyZiA9IHNlbGYubm9ybWFsX25vaXNlICogc2VsZi5zaWdtYV9tYXAKICAgICAgICAgICAgc2VsZi5maW5hbF9ub2lzZSA9IHNlbGYucGVyZi5leHBhbmQob3V0LnNpemUoKSkKCiAgICAgICAgICAgIG91dCArPSBzZWxmLmZpbmFsX25vaXNlCiAgICAgICAgCiAgICAgICAgcmV0dXJuIEYucmVsdShvdXQsIGlucGxhY2U9VHJ1ZSkKCgpjbGFzcyBMMlBfUmVzTmV0X1YxKG5uLk1vZHVsZSk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGJsb2NrLCBkZXB0aCwgbnVtX2NsYXNzZXM9MTApOgoKICAgICAgICBzdXBlcihMMlBfUmVzTmV0X1YxLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgCiAgICAgICAgYXNzZXJ0IChkZXB0aCAtIDIpICUgNiA9PSAwLCAnKGRlcHRoIC0gMikgJSA2IHNob3VsZCBlcXVhbCB6ZXJvJwogICAgICAgIGxheWVyX2Jsb2NrcyA9IChkZXB0aCAtIDIpIC8vIDYKICAgICAgICBzZWxmLmFkZF9ub2lzZSA9IEZhbHNlCgogICAgICAgIHNlbGYubnVtX2NsYXNzZXMgPSBudW1fY2xhc3NlcwoKICAgICAgICBzZWxmLmNvbnZfMV8zeDMgPSBubi5Db252MmQoMywgMTYsIGtlcm5lbF9zaXplPTMsIHN0cmlkZT0xLCBwYWRkaW5nPTEsIGJpYXM9RmFsc2UpCiAgICAgICAgc2VsZi5ibl8xID0gbm4uQmF0Y2hOb3JtMmQoMTYpCgogICAgICAgIHNlbGYuY24xX3NpZ21hX21hcCA9IG5uLlBhcmFtZXRlcih0b3JjaC5vbmVzKCgxNiwgMzIsIDMyKSkgKiAwLjI1ICwgcmVxdWlyZXNfZ3JhZD1UcnVlKQoKICAgICAgICBzZWxmLmlucGxhbmVzID0gMTYKICAgICAgICBzZWxmLnN0YWdlXzEgPSBzZWxmLl9tYWtlX2xheWVyKGJsb2NrLCAxNiwgbGF5ZXJfYmxvY2tzLCAxKQogICAgICAgIHNlbGYuc3RhZ2VfMiA9IHNlbGYuX21ha2VfbGF5ZXIoYmxvY2ssIDMyLCBsYXllcl9ibG9ja3MsIDIpCiAgICAgICAgc2VsZi5zdGFnZV8zID0gc2VsZi5fbWFrZV9sYXllcihibG9jaywgNjQsIGxheWVyX2Jsb2NrcywgMikKICAgICAgICBzZWxmLmF2Z3Bvb2wgPSBubi5BdmdQb29sMmQoOCkKICAgICAgICBzZWxmLmNsYXNzaWZpZXIgPSBubi5MaW5lYXIoNjQqYmxvY2suZXhwYW5zaW9uLCBudW1fY2xhc3NlcykKCiAgICAgICAgZm9yIG0gaW4gc2VsZi5tb2R1bGVzKCk6CiAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobSwgbm4uQ29udjJkKToKICAgICAgICAgICAgICAgIG4gPSBtLmtlcm5lbF9zaXplWzBdICogbS5rZXJuZWxfc2l6ZVsxXSAqIG0ub3V0X2NoYW5uZWxzCiAgICAgICAgICAgICAgICBtLndlaWdodC5kYXRhLm5vcm1hbF8oMCwgbWF0aC5zcXJ0KDIuIC8gbikpCiAgICAgICAgICAgICAgICAjbS5iaWFzLmRhdGEuemVyb18oKQogICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UobSwgbm4uQmF0Y2hOb3JtMmQpOgogICAgICAgICAgICAgICAgbS53ZWlnaHQuZGF0YS5maWxsXygxKQogICAgICAgICAgICAgICAgbS5iaWFzLmRhdGEuemVyb18oKQogICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UobSwgbm4uTGluZWFyKToKICAgICAgICAgICAgICAgIGluaXQua2FpbWluZ19ub3JtYWwobS53ZWlnaHQpCiAgICAgICAgICAgICAgICBtLmJpYXMuZGF0YS56ZXJvXygpCgogICAgZGVmIHB1dF9ub2lzZShzZWxmLCBtb2RlID0gVHJ1ZSk6CiAgICAgICAgc2VsZi5hZGRfbm9pc2UgPSBtb2RlCgogICAgZGVmIF9tYWtlX2xheWVyKHNlbGYsIGJsb2NrLCBwbGFuZXMsIGJsb2Nrcywgc3RyaWRlPTEpOgogICAgICAgIGRvd25zYW1wbGUgPSBOb25lCiAgICAgICAgaWYgc3RyaWRlICE9IDEgb3Igc2VsZi5pbnBsYW5lcyAhPSBwbGFuZXMgKiBibG9jay5leHBhbnNpb246CiAgICAgICAgICAgIGRvd25zYW1wbGUgPSBEb3duc2FtcGxlQShzZWxmLmlucGxhbmVzLCBwbGFuZXMgKiBibG9jay5leHBhbnNpb24sIHN0cmlkZSkKCiAgICAgICAgbGF5ZXJzID0gW10KICAgICAgICBsYXllcnMuYXBwZW5kKGJsb2NrKHNlbGYuaW5wbGFuZXMsIHBsYW5lcywgc3RyaWRlLCBkb3duc2FtcGxlKSkKICAgICAgICBzZWxmLmlucGxhbmVzID0gcGxhbmVzICogYmxvY2suZXhwYW5zaW9uCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgYmxvY2tzKToKICAgICAgICAgICAgbGF5ZXJzLmFwcGVuZChibG9jayhzZWxmLmlucGxhbmVzLCBwbGFuZXMpKQoKICAgICAgICByZXR1cm4gbm4uU2VxdWVudGlhbCgqbGF5ZXJzKQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHgpOgogICAgICAgIHggPSBzZWxmLmNvbnZfMV8zeDMoeCkKICAgICAgICB4ID0gc2VsZi5ibl8xKHgpCiAgICAgICAgaWYgc2VsZi5hZGRfbm9pc2U6CiAgICAgICAgICAgIHNlbGYuY24xX25vcm1hbF9ub2lzZSA9IHRvcmNoLnJhbmRuX2xpa2Uoc2VsZi5jbjFfc2lnbWFfbWFwKQogICAgICAgICAgICBzZWxmLmNuMV9wZXJmID0gKHNlbGYuY24xX25vcm1hbF9ub2lzZSAqIHNlbGYuY24xX3NpZ21hX21hcCkuY3VkYSgwKQogICAgICAgICAgICBzZWxmLmNuMV9maW5hbF9ub2lzZSA9IHNlbGYuY24xX3BlcmYuZXhwYW5kKHguc2l6ZSgpKQogICAgICAgICAgICB4ICs9IHNlbGYuY24xX2ZpbmFsX25vaXNlCgogICAgICAgIHggPSBGLnJlbHUoeCwgaW5wbGFjZT1UcnVlKQogICAgICAgIHggPSBzZWxmLnN0YWdlXzEoeCkKICAgICAgICB4ID0gc2VsZi5zdGFnZV8yKHgpCiAgICAgICAgeCA9IHNlbGYuc3RhZ2VfMyh4KQogICAgICAgIHggPSBzZWxmLmF2Z3Bvb2woeCkKICAgICAgICB4ID0geC52aWV3KHguc2l6ZSgwKSwgLTEpCiAgICAgICAgcmV0dXJuIHNlbGYuY2xhc3NpZmllcih4KQoKIyAoZGVwdGggLSAyKSAlIDYgc2hvdWxkIGVxdWFsIDAKZGVmIGwycF9yZXNuZXRfdjEoZGVwdGggPSAyMCwgbnVtX2NsYXNzZXM9MTApOiAKICAgIG1vZGVsID0gTDJQX1Jlc05ldF9WMShMMlBfQmFzaWNibG9ja19WMSwgZGVwdGg9ZGVwdGgsIG51bV9jbGFzc2VzPW51bV9jbGFzc2VzKQogICAgcmV0dXJuIG1vZGVsCjx8ZmltX3N1ZmZpeHw+CiAgICByZXNuZXQgdmVyc2lvbiAxIGFyY2hpdGVjdHVyZQo8fGZpbV9lbmR8Pg=="]
["04b6948cbf93bbddf7a05a17b291658b66e2e1ab-2","04b6948cbf93bbddf7a05a17b291658b66e2e1ab","PHxmaW1fcHJlZml4fD4KJycnCiAgICByZXNuZXQgdmVyc2lvbiAxIGFyY2hpdGVjdHVyZQonJycKCmltcG9ydCBtYXRoCgppbXBvcnQgdG9yY2gKaW1wb3J0IHRvcmNoLm5uIGFzIG5uCmltcG9ydCB0b3JjaC5ubi5mdW5jdGlvbmFsIGFzIEYKZnJvbSB0b3JjaC5ubiBpbXBvcnQgaW5pdAoKZnJvbSBkb3duX3NhbXBsZSBpbXBvcnQgRG93bnNhbXBsZUEKCgpjbGFzcyBMMlBfQmFzaWNibG9ja19WMShubi5Nb2R1bGUpOgogICAgZXhwYW5zaW9uID0gMQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnBsYW5lcywgcGxhbmVzLCBzdHJpZGU9MSwgZG93bnNhbXBsZT1Ob25lKToKICAgICAgICBzdXBlcihMMlBfQmFzaWNibG9ja19WMSwgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYuYWRkX25vaXNlID0gRmFsc2UKCiAgICAgICAgc2VsZi5jb252X2EgPSBubi5Db252MmQoaW5wbGFuZXMsIHBsYW5lcywga2VybmVsX3NpemU9Mywgc3RyaWRlPXN0cmlkZSwgcGFkZGluZz0xLCBiaWFzPUZhbHNlKQogICAgICAgIHNlbGYuYm5fYSA9IG5uLkJhdGNoTm9ybTJkKHBsYW5lcykKCiAgICAgICAgc2VsZi5jb252X2IgPSBubi5Db252MmQocGxhbmVzLCBwbGFuZXMsIGtlcm5lbF9zaXplPTMsIHN0cmlkZT0xLCBwYWRkaW5nPTEsIGJpYXM9RmFsc2UpCiAgICAgICAgc2VsZi5ibl9iID0gbm4uQmF0Y2hOb3JtMmQocGxhbmVzKQoKICAgICAgICBzZWxmLmRvd25zYW1wbGUgPSBkb3duc2FtcGxlCgogICAgICAgIGlmIHBsYW5lcyA9PSAxNjoKICAgICAgICAgICAgc2VsZi5zaWdtYV9tYXAgPSBubi5QYXJhbWV0ZXIodG9yY2gub25lcygoMTYsIDMyLCAzMikpICogMC4yNSAsIHJlcXVpcmVzX2dyYWQ9VHJ1ZSkKICAgICAgICBlbGlmIHBsYW5lcyA9PSAzMjoKICAgICAgICAgICAgc2VsZi5zaWdtYV9tYXAgPSBubi5QYXJhbWV0ZXIodG9yY2gub25lcygoMzIsIDE2LCAxNikpICogMC4yNSwgcmVxdWlyZXNfZ3JhZD1UcnVlKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYuc2lnbWFfbWFwID0gbm4uUGFyYW1ldGVyKHRvcmNoLm9uZXMoKDY0LCA4LCA4KSkgKiAwLjI1LCByZXF1aXJlc19ncmFkPVRydWUpCgogICAgZGVmIHB1dF9ub2lzZShzZWxmLCBtb2RlID0gVHJ1ZSk6CiAgICAgICAgc2VsZi5hZGRfbm9pc2UgPSBtb2RlCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeCk6CiAgICAgICAgcmVzaWR1YWwgPSB4CiAgICAgICAgYmFzaWNibG9jayA9IEYucmVsdShzZWxmLmJuX2Eoc2VsZi5jb252X2EoeCkpKQoKICAgICAgICBiYXNpY2Jsb2NrID0gc2VsZi5jb252X2IoYmFzaWNibG9jaykKICAgICAgICBiYXNpY2Jsb2NrID0gc2VsZi5ibl9iKGJhc2ljYmxvY2spCgogICAgICAgIGlmIHNlbGYuZG93bnNhbXBsZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgcmVzaWR1YWwgPSBzZWxmLmRvd25zYW1wbGUoeCkKCiAgICAgICAgb3V0ID0gcmVzaWR1YWwgKyBiYXNpY2Jsb2NrCgogICAgICAgIGlmIHNlbGYuYWRkX25vaXNlOgogICAgICAgICAgICBzZWxmLm5vcm1hbF9ub2lzZSA9IHNlbGYuc2lnbWFfbWFwLmNsb25lKCkubm9ybWFsXygwLDEpCiAgICAgICAgICAgIHNlbGYucGVyZiA9IHNlbGYubm9ybWFsX25vaXNlICogc2VsZi5zaWdtYV9tYXAKICAgICAgICAgICAgc2VsZi5maW5hbF9ub2lzZSA9IHNlbGYucGVyZi5leHBhbmQob3V0LnNpemUoKSkKCiAgICAgICAgICAgIG91dCArPSBzZWxmLmZpbmFsX25vaXNlCiAgICAgICAgCiAgICAgICAgcmV0dXJuIEYucmVsdShvdXQsIGlucGxhY2U9VHJ1ZSkKCgpjbGFzcyBMMlBfUmVzTmV0X1YxKG5uLk1vZHVsZSk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGJsb2NrLCBkZXB0aCwgbnVtX2NsYXNzZXM9MTApOgoKICAgICAgICBzdXBlcihMMlBfUmVzTmV0X1YxLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgCiAgICAgICAgYXNzZXJ0IChkZXB0aCAtIDIpICUgNiA9PSAwLCAnKGRlcHRoIC0gMikgJSA2IHNob3VsZCBlcXVhbCB6ZXJvJwogICAgICAgIGxheWVyX2Jsb2NrcyA9IChkZXB0aCAtIDIpIC8vIDYKICAgICAgICBzZWxmLmFkZF9ub2lzZSA9IEZhbHNlCgogICAgICAgIHNlbGYubnVtX2NsYXNzZXMgPSBudW1fY2xhc3NlcwoKICAgICAgICBzZWxmLmNvbnZfMV8zeDMgPSBubi5Db252MmQoMywgMTYsIGtlcm5lbF9zaXplPTMsIHN0cmlkZT0xLCBwYWRkaW5nPTEsIGJpYXM9RmFsc2UpCiAgICAgICAgc2VsZi5ibl8xID0gbm4uQmF0Y2hOb3JtMmQoMTYpCgo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLnN0YWdlXzIgPSBzZWxmLl9tYWtlX2xheWVyKGJsb2NrLCAzMiwgbGF5ZXJfYmxvY2tzLCAyKQogICAgICAgIHNlbGYuc3RhZ2VfMyA9IHNlbGYuX21ha2VfbGF5ZXIoYmxvY2ssIDY0LCBsYXllcl9ibG9ja3MsIDIpCiAgICAgICAgc2VsZi5hdmdwb29sID0gbm4uQXZnUG9vbDJkKDgpCiAgICAgICAgc2VsZi5jbGFzc2lmaWVyID0gbm4uTGluZWFyKDY0KmJsb2NrLmV4cGFuc2lvbiwgbnVtX2NsYXNzZXMpCgogICAgICAgIGZvciBtIGluIHNlbGYubW9kdWxlcygpOgogICAgICAgICAgICBpZiBpc2luc3RhbmNlKG0sIG5uLkNvbnYyZCk6CiAgICAgICAgICAgICAgICBuID0gbS5rZXJuZWxfc2l6ZVswXSAqIG0ua2VybmVsX3NpemVbMV0gKiBtLm91dF9jaGFubmVscwogICAgICAgICAgICAgICAgbS53ZWlnaHQuZGF0YS5ub3JtYWxfKDAsIG1hdGguc3FydCgyLiAvIG4pKQogICAgICAgICAgICAgICAgI20uYmlhcy5kYXRhLnplcm9fKCkKICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG0sIG5uLkJhdGNoTm9ybTJkKToKICAgICAgICAgICAgICAgIG0ud2VpZ2h0LmRhdGEuZmlsbF8oMSkKICAgICAgICAgICAgICAgIG0uYmlhcy5kYXRhLnplcm9fKCkKICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG0sIG5uLkxpbmVhcik6CiAgICAgICAgICAgICAgICBpbml0LmthaW1pbmdfbm9ybWFsKG0ud2VpZ2h0KQogICAgICAgICAgICAgICAgbS5iaWFzLmRhdGEuemVyb18oKQoKICAgIGRlZiBwdXRfbm9pc2Uoc2VsZiwgbW9kZSA9IFRydWUpOgogICAgICAgIHNlbGYuYWRkX25vaXNlID0gbW9kZQoKICAgIGRlZiBfbWFrZV9sYXllcihzZWxmLCBibG9jaywgcGxhbmVzLCBibG9ja3MsIHN0cmlkZT0xKToKICAgICAgICBkb3duc2FtcGxlID0gTm9uZQogICAgICAgIGlmIHN0cmlkZSAhPSAxIG9yIHNlbGYuaW5wbGFuZXMgIT0gcGxhbmVzICogYmxvY2suZXhwYW5zaW9uOgogICAgICAgICAgICBkb3duc2FtcGxlID0gRG93bnNhbXBsZUEoc2VsZi5pbnBsYW5lcywgcGxhbmVzICogYmxvY2suZXhwYW5zaW9uLCBzdHJpZGUpCgogICAgICAgIGxheWVycyA9IFtdCiAgICAgICAgbGF5ZXJzLmFwcGVuZChibG9jayhzZWxmLmlucGxhbmVzLCBwbGFuZXMsIHN0cmlkZSwgZG93bnNhbXBsZSkpCiAgICAgICAgc2VsZi5pbnBsYW5lcyA9IHBsYW5lcyAqIGJsb2NrLmV4cGFuc2lvbgogICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGJsb2Nrcyk6CiAgICAgICAgICAgIGxheWVycy5hcHBlbmQoYmxvY2soc2VsZi5pbnBsYW5lcywgcGxhbmVzKSkKCiAgICAgICAgcmV0dXJuIG5uLlNlcXVlbnRpYWwoKmxheWVycykKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4KToKICAgICAgICB4ID0gc2VsZi5jb252XzFfM3gzKHgpCiAgICAgICAgeCA9IHNlbGYuYm5fMSh4KQogICAgICAgIGlmIHNlbGYuYWRkX25vaXNlOgogICAgICAgICAgICBzZWxmLmNuMV9ub3JtYWxfbm9pc2UgPSB0b3JjaC5yYW5kbl9saWtlKHNlbGYuY24xX3NpZ21hX21hcCkKICAgICAgICAgICAgc2VsZi5jbjFfcGVyZiA9IChzZWxmLmNuMV9ub3JtYWxfbm9pc2UgKiBzZWxmLmNuMV9zaWdtYV9tYXApLmN1ZGEoMCkKICAgICAgICAgICAgc2VsZi5jbjFfZmluYWxfbm9pc2UgPSBzZWxmLmNuMV9wZXJmLmV4cGFuZCh4LnNpemUoKSkKICAgICAgICAgICAgeCArPSBzZWxmLmNuMV9maW5hbF9ub2lzZQoKICAgICAgICB4ID0gRi5yZWx1KHgsIGlucGxhY2U9VHJ1ZSkKICAgICAgICB4ID0gc2VsZi5zdGFnZV8xKHgpCiAgICAgICAgeCA9IHNlbGYuc3RhZ2VfMih4KQogICAgICAgIHggPSBzZWxmLnN0YWdlXzMoeCkKICAgICAgICB4ID0gc2VsZi5hdmdwb29sKHgpCiAgICAgICAgeCA9IHgudmlldyh4LnNpemUoMCksIC0xKQogICAgICAgIHJldHVybiBzZWxmLmNsYXNzaWZpZXIoeCkKCiMgKGRlcHRoIC0gMikgJSA2IHNob3VsZCBlcXVhbCAwCmRlZiBsMnBfcmVzbmV0X3YxKGRlcHRoID0gMjAsIG51bV9jbGFzc2VzPTEwKTogCiAgICBtb2RlbCA9IEwyUF9SZXNOZXRfVjEoTDJQX0Jhc2ljYmxvY2tfVjEsIGRlcHRoPWRlcHRoLCBudW1fY2xhc3Nlcz1udW1fY2xhc3NlcykKICAgIHJldHVybiBtb2RlbAo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuY24xX3NpZ21hX21hcCA9IG5uLlBhcmFtZXRlcih0b3JjaC5vbmVzKCgxNiwgMzIsIDMyKSkgKiAwLjI1ICwgcmVxdWlyZXNfZ3JhZD1UcnVlKQoKICAgICAgICBzZWxmLmlucGxhbmVzID0gMTYKICAgICAgICBzZWxmLnN0YWdlXzEgPSBzZWxmLl9tYWtlX2xheWVyKGJsb2NrLCAxNiwgbGF5ZXJfYmxvY2tzLCAxKQo8fGZpbV9lbmR8Pg=="]
["04b6948cbf93bbddf7a05a17b291658b66e2e1ab-3","04b6948cbf93bbddf7a05a17b291658b66e2e1ab","PHxmaW1fcHJlZml4fD4KJycnCiAgICByZXNuZXQgdmVyc2lvbiAxIGFyY2hpdGVjdHVyZQonJycKCmltcG9ydCBtYXRoCgppbXBvcnQgdG9yY2gKaW1wb3J0IHRvcmNoLm5uIGFzIG5uCmltcG9ydCB0b3JjaC5ubi5mdW5jdGlvbmFsIGFzIEYKZnJvbSB0b3JjaC5ubiBpbXBvcnQgaW5pdAoKZnJvbSBkb3duX3NhbXBsZSBpbXBvcnQgRG93bnNhbXBsZUEKCgpjbGFzcyBMMlBfQmFzaWNibG9ja19WMShubi5Nb2R1bGUpOgogICAgZXhwYW5zaW9uID0gMQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnBsYW5lcywgcGxhbmVzLCBzdHJpZGU9MSwgZG93bnNhbXBsZT1Ob25lKToKICAgICAgICBzdXBlcihMMlBfQmFzaWNibG9ja19WMSwgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYuYWRkX25vaXNlID0gRmFsc2UKCiAgICAgICAgc2VsZi5jb252X2EgPSBubi5Db252MmQoaW5wbGFuZXMsIHBsYW5lcywga2VybmVsX3NpemU9Mywgc3RyaWRlPXN0cmlkZSwgcGFkZGluZz0xLCBiaWFzPUZhbHNlKQogICAgICAgIHNlbGYuYm5fYSA9IG5uLkJhdGNoTm9ybTJkKHBsYW5lcykKCiAgICAgICAgc2VsZi5jb252X2IgPSBubi5Db252MmQocGxhbmVzLCBwbGFuZXMsIGtlcm5lbF9zaXplPTMsIHN0cmlkZT0xLCBwYWRkaW5nPTEsIGJpYXM9RmFsc2UpCiAgICAgICAgc2VsZi5ibl9iID0gbm4uQmF0Y2hOb3JtMmQocGxhbmVzKQoKICAgICAgICBzZWxmLmRvd25zYW1wbGUgPSBkb3duc2FtcGxlCgogICAgICAgIGlmIHBsYW5lcyA9PSAxNjoKICAgICAgICAgICAgc2VsZi5zaWdtYV9tYXAgPSBubi5QYXJhbWV0ZXIodG9yY2gub25lcygoMTYsIDMyLCAzMikpICogMC4yNSAsIHJlcXVpcmVzX2dyYWQ9VHJ1ZSkKICAgICAgICBlbGlmIHBsYW5lcyA9PSAzMjoKICAgICAgICAgICAgc2VsZi5zaWdtYV9tYXAgPSBubi5QYXJhbWV0ZXIodG9yY2gub25lcygoMzIsIDE2LCAxNikpICogMC4yNSwgcmVxdWlyZXNfZ3JhZD1UcnVlKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYuc2lnbWFfbWFwID0gbm4uUGFyYW1ldGVyKHRvcmNoLm9uZXMoKDY0LCA4LCA4KSkgKiAwLjI1LCByZXF1aXJlc19ncmFkPVRydWUpCgogICAgZGVmIHB1dF9ub2lzZShzZWxmLCBtb2RlID0gVHJ1ZSk6CiAgICAgICAgc2VsZi5hZGRfbm9pc2UgPSBtb2RlCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeCk6CiAgICAgICAgcmVzaWR1YWwgPSB4CiAgICAgICAgYmFzaWNibG9jayA9IEYucmVsdShzZWxmLmJuX2Eoc2VsZi5jb252X2EoeCkpKQoKICAgICAgICBiYXNpY2Jsb2NrID0gc2VsZi5jb252X2IoYmFzaWNibG9jaykKICAgICAgICBiYXNpY2Jsb2NrID0gc2VsZi5ibl9iKGJhc2ljYmxvY2spCgogICAgICAgIGlmIHNlbGYuZG93bnNhbXBsZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgcmVzaWR1YWwgPSBzZWxmLmRvd25zYW1wbGUoeCkKCiAgICAgICAgb3V0ID0gcmVzaWR1YWwgKyBiYXNpY2Jsb2NrCgogICAgICAgIGlmIHNlbGYuYWRkX25vaXNlOgogICAgICAgICAgICBzZWxmLm5vcm1hbF9ub2lzZSA9IHNlbGYuc2lnbWFfbWFwLmNsb25lKCkubm9ybWFsXygwLDEpCiAgICAgICAgICAgIHNlbGYucGVyZiA9IHNlbGYubm9ybWFsX25vaXNlICogc2VsZi5zaWdtYV9tYXAKICAgICAgICAgICAgc2VsZi5maW5hbF9ub2lzZSA9IHNlbGYucGVyZi5leHBhbmQob3V0LnNpemUoKSkKCiAgICAgICAgICAgIG91dCArPSBzZWxmLmZpbmFsX25vaXNlCiAgICAgICAgCiAgICAgICAgcmV0dXJuIEYucmVsdShvdXQsIGlucGxhY2U9VHJ1ZSkKCgpjbGFzcyBMMlBfUmVzTmV0X1YxKG5uLk1vZHVsZSk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGJsb2NrLCBkZXB0aCwgbnVtX2NsYXNzZXM9MTApOgoKICAgICAgICBzdXBlcihMMlBfUmVzTmV0X1YxLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgCiAgICAgICAgYXNzZXJ0IChkZXB0aCAtIDIpICUgNiA9PSAwLCAnKGRlcHRoIC0gMikgJSA2IHNob3VsZCBlcXVhbCB6ZXJvJwogICAgICAgIGxheWVyX2Jsb2NrcyA9IChkZXB0aCAtIDIpIC8vIDYKICAgICAgICBzZWxmLmFkZF9ub2lzZSA9IEZhbHNlCgogICAgICAgIHNlbGYubnVtX2NsYXNzZXMgPSBudW1fY2xhc3NlcwoKICAgICAgICBzZWxmLmNvbnZfMV8zeDMgPSBubi5Db252MmQoMywgMTYsIGtlcm5lbF9zaXplPTMsIHN0cmlkZT0xLCBwYWRkaW5nPTEsIGJpYXM9RmFsc2UpCjx8ZmltX2hvbGV8PgogICAgICAgIHNlbGYuaW5wbGFuZXMgPSAxNgogICAgICAgIHNlbGYuc3RhZ2VfMSA9IHNlbGYuX21ha2VfbGF5ZXIoYmxvY2ssIDE2LCBsYXllcl9ibG9ja3MsIDEpCiAgICAgICAgc2VsZi5zdGFnZV8yID0gc2VsZi5fbWFrZV9sYXllcihibG9jaywgMzIsIGxheWVyX2Jsb2NrcywgMikKICAgICAgICBzZWxmLnN0YWdlXzMgPSBzZWxmLl9tYWtlX2xheWVyKGJsb2NrLCA2NCwgbGF5ZXJfYmxvY2tzLCAyKQogICAgICAgIHNlbGYuYXZncG9vbCA9IG5uLkF2Z1Bvb2wyZCg4KQogICAgICAgIHNlbGYuY2xhc3NpZmllciA9IG5uLkxpbmVhcig2NCpibG9jay5leHBhbnNpb24sIG51bV9jbGFzc2VzKQoKICAgICAgICBmb3IgbSBpbiBzZWxmLm1vZHVsZXMoKToKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtLCBubi5Db252MmQpOgogICAgICAgICAgICAgICAgbiA9IG0ua2VybmVsX3NpemVbMF0gKiBtLmtlcm5lbF9zaXplWzFdICogbS5vdXRfY2hhbm5lbHMKICAgICAgICAgICAgICAgIG0ud2VpZ2h0LmRhdGEubm9ybWFsXygwLCBtYXRoLnNxcnQoMi4gLyBuKSkKICAgICAgICAgICAgICAgICNtLmJpYXMuZGF0YS56ZXJvXygpCiAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShtLCBubi5CYXRjaE5vcm0yZCk6CiAgICAgICAgICAgICAgICBtLndlaWdodC5kYXRhLmZpbGxfKDEpCiAgICAgICAgICAgICAgICBtLmJpYXMuZGF0YS56ZXJvXygpCiAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShtLCBubi5MaW5lYXIpOgogICAgICAgICAgICAgICAgaW5pdC5rYWltaW5nX25vcm1hbChtLndlaWdodCkKICAgICAgICAgICAgICAgIG0uYmlhcy5kYXRhLnplcm9fKCkKCiAgICBkZWYgcHV0X25vaXNlKHNlbGYsIG1vZGUgPSBUcnVlKToKICAgICAgICBzZWxmLmFkZF9ub2lzZSA9IG1vZGUKCiAgICBkZWYgX21ha2VfbGF5ZXIoc2VsZiwgYmxvY2ssIHBsYW5lcywgYmxvY2tzLCBzdHJpZGU9MSk6CiAgICAgICAgZG93bnNhbXBsZSA9IE5vbmUKICAgICAgICBpZiBzdHJpZGUgIT0gMSBvciBzZWxmLmlucGxhbmVzICE9IHBsYW5lcyAqIGJsb2NrLmV4cGFuc2lvbjoKICAgICAgICAgICAgZG93bnNhbXBsZSA9IERvd25zYW1wbGVBKHNlbGYuaW5wbGFuZXMsIHBsYW5lcyAqIGJsb2NrLmV4cGFuc2lvbiwgc3RyaWRlKQoKICAgICAgICBsYXllcnMgPSBbXQogICAgICAgIGxheWVycy5hcHBlbmQoYmxvY2soc2VsZi5pbnBsYW5lcywgcGxhbmVzLCBzdHJpZGUsIGRvd25zYW1wbGUpKQogICAgICAgIHNlbGYuaW5wbGFuZXMgPSBwbGFuZXMgKiBibG9jay5leHBhbnNpb24KICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBibG9ja3MpOgogICAgICAgICAgICBsYXllcnMuYXBwZW5kKGJsb2NrKHNlbGYuaW5wbGFuZXMsIHBsYW5lcykpCgogICAgICAgIHJldHVybiBubi5TZXF1ZW50aWFsKCpsYXllcnMpCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeCk6CiAgICAgICAgeCA9IHNlbGYuY29udl8xXzN4Myh4KQogICAgICAgIHggPSBzZWxmLmJuXzEoeCkKICAgICAgICBpZiBzZWxmLmFkZF9ub2lzZToKICAgICAgICAgICAgc2VsZi5jbjFfbm9ybWFsX25vaXNlID0gdG9yY2gucmFuZG5fbGlrZShzZWxmLmNuMV9zaWdtYV9tYXApCiAgICAgICAgICAgIHNlbGYuY24xX3BlcmYgPSAoc2VsZi5jbjFfbm9ybWFsX25vaXNlICogc2VsZi5jbjFfc2lnbWFfbWFwKS5jdWRhKDApCiAgICAgICAgICAgIHNlbGYuY24xX2ZpbmFsX25vaXNlID0gc2VsZi5jbjFfcGVyZi5leHBhbmQoeC5zaXplKCkpCiAgICAgICAgICAgIHggKz0gc2VsZi5jbjFfZmluYWxfbm9pc2UKCiAgICAgICAgeCA9IEYucmVsdSh4LCBpbnBsYWNlPVRydWUpCiAgICAgICAgeCA9IHNlbGYuc3RhZ2VfMSh4KQogICAgICAgIHggPSBzZWxmLnN0YWdlXzIoeCkKICAgICAgICB4ID0gc2VsZi5zdGFnZV8zKHgpCiAgICAgICAgeCA9IHNlbGYuYXZncG9vbCh4KQogICAgICAgIHggPSB4LnZpZXcoeC5zaXplKDApLCAtMSkKICAgICAgICByZXR1cm4gc2VsZi5jbGFzc2lmaWVyKHgpCgojIChkZXB0aCAtIDIpICUgNiBzaG91bGQgZXF1YWwgMApkZWYgbDJwX3Jlc25ldF92MShkZXB0aCA9IDIwLCBudW1fY2xhc3Nlcz0xMCk6IAogICAgbW9kZWwgPSBMMlBfUmVzTmV0X1YxKEwyUF9CYXNpY2Jsb2NrX1YxLCBkZXB0aD1kZXB0aCwgbnVtX2NsYXNzZXM9bnVtX2NsYXNzZXMpCiAgICByZXR1cm4gbW9kZWwKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmJuXzEgPSBubi5CYXRjaE5vcm0yZCgxNikKCiAgICAgICAgc2VsZi5jbjFfc2lnbWFfbWFwID0gbm4uUGFyYW1ldGVyKHRvcmNoLm9uZXMoKDE2LCAzMiwgMzIpKSAqIDAuMjUgLCByZXF1aXJlc19ncmFkPVRydWUpCgo8fGZpbV9lbmR8Pg=="]
["e5815bd6030bb26de818f31b83b6209c3cc0dc34-1","e5815bd6030bb26de818f31b83b6209c3cc0dc34","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNtdHBsaWIKaW1wb3J0IHNvY2tzCgoKZGVmIHRyeV9wYXNzd29yZCh0YXJnZXQsIHBhc3N3b3JkLCBpcCwgcG9ydCwgR0xPQl9ISURFKSAtPiBOb25lOgogICAgcHJpbnQoIkZVTkMgdHJ5X3Bhc3N3b3JkIFNUQVJURUQiKQogICAgdHJ5OgogICAgICAgIHNvY2tzLnNldGRlZmF1bHRwcm94eShzb2Nrcy5TT0NLUzUsIGlwLCBwb3J0KQogICAgICAgIHNvY2tzLndyYXBtb2R1bGUoc210cGxpYikKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBwcmludChmIih0cnlfcGFzc3dvcmQ6c29ja3MpOiB7ZX0iKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgdHJ5OgogICAgICAgIHNlcnZlciA9IHNtdHBsaWIuU01UUF9TU0woJ3NtdHAuZ21haWwuY29tJywgNTg3KQogICAgICAgIHByaW50KCJTdGFydGluZyBUTFMuLi4iKQogICAgICAgIHNlcnZlci5zdGFydHRscygpCjx8ZmltX2VuZHw+"]
["e5815bd6030bb26de818f31b83b6209c3cc0dc34-2","e5815bd6030bb26de818f31b83b6209c3cc0dc34","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNtdHBsaWIKaW1wb3J0IHNvY2tzCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpkZWYgdHJ5X3Bhc3N3b3JkKHRhcmdldCwgcGFzc3dvcmQsIGlwLCBwb3J0LCBHTE9CX0hJREUpIC0+IE5vbmU6CiAgICBwcmludCgiRlVOQyB0cnlfcGFzc3dvcmQgU1RBUlRFRCIpCiAgICB0cnk6CiAgICAgICAgc29ja3Muc2V0ZGVmYXVsdHByb3h5KHNvY2tzLlNPQ0tTNSwgaXAsIHBvcnQpCjx8ZmltX2VuZHw+"]
["bdc2b86f045c1b41140ffcf245eed42203b28ba7-1","bdc2b86f045c1b41140ffcf245eed42203b28ba7","PHxmaW1fcHJlZml4fD4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IKIyBsaWNlbnNlIGluZm9ybWF0aW9uLgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpmcm9tIC5tYWluIGltcG9ydCBsb2FkX21vZGVsCmZyb20gLm1haW4gaW1wb3J0IHNhdmVfbW9kZWwKZnJvbSAubWFpbiBpbXBvcnQgc2F2ZV90ZXh0CmZyb20gLm1haW4gaW1wb3J0IHNldF9tb2RlbF92ZXJzaW9uCmZyb20gLm1haW4gaW1wb3J0IHNldF9tb2RlbF9kb21haW4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIC5tYWluIGltcG9ydCBzZXRfbW9kZWxfZG9jX3N0cmluZwpmcm9tIC52aXN1YWxpemUgaW1wb3J0IHZpc3VhbGl6ZV9tb2RlbAo8fGZpbV9lbmR8Pg=="]
["bdc2b86f045c1b41140ffcf245eed42203b28ba7-2","bdc2b86f045c1b41140ffcf245eed42203b28ba7","PHxmaW1fcHJlZml4fD4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCjx8ZmltX2hvbGV8Pgpmcm9tIC5tYWluIGltcG9ydCBsb2FkX21vZGVsCmZyb20gLm1haW4gaW1wb3J0IHNhdmVfbW9kZWwKZnJvbSAubWFpbiBpbXBvcnQgc2F2ZV90ZXh0CmZyb20gLm1haW4gaW1wb3J0IHNldF9tb2RlbF92ZXJzaW9uCmZyb20gLm1haW4gaW1wb3J0IHNldF9tb2RlbF9kb21haW4KZnJvbSAubWFpbiBpbXBvcnQgc2V0X21vZGVsX2RvY19zdHJpbmcKZnJvbSAudmlzdWFsaXplIGltcG9ydCB2aXN1YWxpemVfbW9kZWwKPHxmaW1fc3VmZml4fD4KIyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvcgojIGxpY2Vuc2UgaW5mb3JtYXRpb24uCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCjx8ZmltX2VuZHw+"]
["bdc2b86f045c1b41140ffcf245eed42203b28ba7-3","bdc2b86f045c1b41140ffcf245eed42203b28ba7","PHxmaW1fcHJlZml4fD4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IKIyBsaWNlbnNlIGluZm9ybWF0aW9uLgo8fGZpbV9ob2xlfD4KZnJvbSAubWFpbiBpbXBvcnQgc2F2ZV90ZXh0CmZyb20gLm1haW4gaW1wb3J0IHNldF9tb2RlbF92ZXJzaW9uCmZyb20gLm1haW4gaW1wb3J0IHNldF9tb2RlbF9kb21haW4KZnJvbSAubWFpbiBpbXBvcnQgc2V0X21vZGVsX2RvY19zdHJpbmcKZnJvbSAudmlzdWFsaXplIGltcG9ydCB2aXN1YWxpemVfbW9kZWwKPHxmaW1fc3VmZml4fD4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKZnJvbSAubWFpbiBpbXBvcnQgbG9hZF9tb2RlbApmcm9tIC5tYWluIGltcG9ydCBzYXZlX21vZGVsCjx8ZmltX2VuZHw+"]
["bdc2b86f045c1b41140ffcf245eed42203b28ba7-4","bdc2b86f045c1b41140ffcf245eed42203b28ba7","PHxmaW1fcHJlZml4fD4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IKIyBsaWNlbnNlIGluZm9ybWF0aW9uLgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpmcm9tIC5tYWluIGltcG9ydCBsb2FkX21vZGVsCmZyb20gLm1haW4gaW1wb3J0IHNhdmVfbW9kZWwKZnJvbSAubWFpbiBpbXBvcnQgc2F2ZV90ZXh0CmZyb20gLm1haW4gaW1wb3J0IHNldF9tb2RlbF92ZXJzaW9uCmZyb20gLm1haW4gaW1wb3J0IHNldF9tb2RlbF9kb21haW4KZnJvbSAubWFpbiBpbXBvcnQgc2V0X21vZGVsX2RvY19zdHJpbmcKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIC52aXN1YWxpemUgaW1wb3J0IHZpc3VhbGl6ZV9tb2RlbAo8fGZpbV9lbmR8Pg=="]
["bdc2b86f045c1b41140ffcf245eed42203b28ba7-5","bdc2b86f045c1b41140ffcf245eed42203b28ba7","PHxmaW1fcHJlZml4fD4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IKIyBsaWNlbnNlIGluZm9ybWF0aW9uLgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpmcm9tIC5tYWluIGltcG9ydCBsb2FkX21vZGVsCmZyb20gLm1haW4gaW1wb3J0IHNhdmVfbW9kZWwKZnJvbSAubWFpbiBpbXBvcnQgc2F2ZV90ZXh0CmZyb20gLm1haW4gaW1wb3J0IHNldF9tb2RlbF92ZXJzaW9uCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAubWFpbiBpbXBvcnQgc2V0X21vZGVsX2RvbWFpbgpmcm9tIC5tYWluIGltcG9ydCBzZXRfbW9kZWxfZG9jX3N0cmluZwpmcm9tIC52aXN1YWxpemUgaW1wb3J0IHZpc3VhbGl6ZV9tb2RlbAo8fGZpbV9lbmR8Pg=="]
["17a617ab63c2157aa8c163f641089b76dcbbde58-1","17a617ab63c2157aa8c163f641089b76dcbbde58","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0jIyMKIyBDb3B5cmlnaHQgKDIwMTgpIEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIyMjCgppbXBvcnQgbG9nZ2luZwoKIyBOYWdpb3Mgc2VydmljZSBzdGF0dXMgcGVybWl0dGVkIGFzIGZvbGxvd3M6IE9LID0gMCwgV2FybmluZyA9IDEsIENyaXRpY2FsID0gMiwgVW5rbm93biA9IDM7IAojIEZvciBwb3J0cywgc3RhdHVzIERJU0FCTEVEID0gV2FybmluZwojCnNlcnZpY2VTdGF0dXNNYXAgPSB7J09LJzowLCAnV0FSTklORyc6MSwgJ0NSSVRJQ0FMJzoyLCAnVU5LTk9XTic6MywgJ0RJU0FCTEVEJzoxfQoKIyBOYWdpb3Mgc3RhdHVzZXMgcGVybWl0dGVkIDogVVAgPSAwLCBET1dOID0gMSwgVU5SRUFDSEFCTEUgPSAyOyAKIyBNYXBwaW5nIEhvc3Qgc3RhdHVzZXMgZnJvbSBPbmV2aWV3IG9udG8gTmFnaW9zIGFzIGZvbGxvd3M6IAojIE9LIC0gVVAsIFdBUk5JTkcgPSBVUCwgQ1JJVElDQUwgPSBET1dOLCBVTktOT1dOID0gVU5SRUFDSEFCTEUsIERJU0FCTEVEID0gRE9XTi4KIwpub2RlU3RhdHVzTWFwID0geydPSyc6MCwgJ1dBUk5JTkcnOjAsICdDUklUSUNBTCc6MSwgJ1VOS05PV04nOjIsICdESVNBQkxFRCc6MX0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgRnVuY3Rpb24gdG8gYXBwZW5kIHRoZSBzZXJ2aWNlIHRhZyB0byB0aGUgZW5kIG9mIHNlcnZpY2UgbmFtZS4gCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkZWYgZ2V0X3JlcXVpcmVkX3NlcnZpY2VfbmFtZShzZXJ2aWNlX25hbWUsIHVyaSk6CgkKCXRlbXAgPSB1cmkuc3BsaXQoJy8nKQoJaWYgdGVtcDoKCQlpZCA9IHRlbXBbLTFdCgkJc2VydmljZV9uYW1lICs9ICdfJyArIHN0cihpZCkKCQlzZXJ2aWNlX25hbWUgPSBzZXJ2aWNlX25hbWUucmVwbGFjZSgiICIsICJfIikKCQlsb2dnaW5nLmluZm8oIlNlcnZpY2UgbmFtZSA6LSAiICsgc2VydmljZV9uYW1lKQoJZWxzZToKCQlsb2dnaW5nLmVycm9yKCdObyBzZXJ2aWNlIGlkOiBVUkkgLSAnICsgc3RyKHVyaSkpCgkJCQoJcmV0dXJuIHNlcnZpY2VfbmFtZQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgTWFwIG9uZXZpZXcgYWxlcnQgc3RhdHVzIG9mIHNlcnZpY2UgdG8gbmFnaW9zIHN0YXR1cwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGVmIG1hcF9zZXJ2aWNlX1N0YXR1cyhzdGF0dXMpOgoJCgkjIE5hZ2lvcyBzZXJ2aWNlIHN0YXR1cyA6IE9LID0gMCwgV2FybmluZyA9IDEsIENyaXRpY2FsID0gMiwgVW5rbm93biA9IDMKCSMgeydPSyc6MCwgJ1dBUk5JTkcnOjEsICdDUklUSUNBTCc6MiwgJ1VOS05PV04nOjN9CgkKCWlmIHN0YXR1cy51cHBlcigpIGluIHNlcnZpY2VTdGF0dXNNYXA6CgkJaWQgPSBzZXJ2aWNlU3RhdHVzTWFwW3N0YXR1cy51cHBlcigpXQoJZWxzZToKCQlsb2dnaW5nLmVycm9yKCJBbGVydCBzdGF0dXMgcmVjZWl2ZWQgOiIgKyBzdHIoc3RhdHVzKSArICIuIENhbm5vdCBmaW5kIHNlcnZpY2Ugc3RhdHVzLiBBc3NpZ25pbmcgdG8gdW5rbm93bi4iKQoJCWlkID0gMwoJCWxvZ2dpbmcuZXJyb3IoIkFsZXJ0IHN0YXR1cyByZWNlaXZlZCA6ICIgKyBzdHIoc3RhdHVzKSArICIuIE1hcHBlZCB0byBpZCA9ICVkIChVbmtub3duKSAiLCBpZCkKCQkKCXJldHVybiBpZAoKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIE1hcCBvbmV2aWV3IGFsZXJ0IHN0YXR1cyBvZiBub2RlIHRvIG5hZ2lvcyBzdGF0dXMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRlZiBtYXBfbm9kZV9zdGF0dXMoc3RhdHVzKToKCSMgTmFnaW9zIGhvc3Qgc3RhdHVzIC0geydPSyc6MCwgJ1dBUk5JTkcnOjAsICdDUklUSUNBTCc6MSwgJ1VOS05PV04nOjIsICdESVNBQkxFRCc6MX0KCQkKPHxmaW1faG9sZXw+CgkJbG9nZ2luZy5lcnJvcigiQ2Fubm90IGZpbmQgbm9kZSBzdGF0dXMgLSBSZWNlaXZlZCA6ICIgKyBzdHIoc3RhdHVzKSArICIuIE1hcHBlZCB0byBpZCA9ICVkIChVbnJlYWNoYWJsZSkgIiwgaWQpCgkKCXJldHVybiBpZAoJCgkKPHxmaW1fc3VmZml4fD4KCWlmIHN0YXR1cy51cHBlcigpIGluIG5vZGVTdGF0dXNNYXA6CgkJaWQgPSBub2RlU3RhdHVzTWFwW3N0YXR1c10KCWVsc2U6CgkJaWQgPSAyCjx8ZmltX2VuZHw+"]
["d4764e48aec7522bc1e1fa316e9162bf7995f21a-1","d4764e48aec7522bc1e1fa316e9162bf7995f21a","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCAoYWJzb2x1dGVfaW1wb3J0LCBkaXZpc2lvbiwgcHJpbnRfZnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGVfbGl0ZXJhbHMpCgpmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQoKPHxmaW1faG9sZXw+CmZyb20gLi4ubWFpbiBpbXBvcnQgbWFpbgpmcm9tIC4uLiBpbXBvcnQgbW9kZWwKCmZyb20gLi5zZXR0aW5ncyBpbXBvcnQgc2V0dGluZ3MKCgphcHAgPSBtYWluKHt9LCAqKnNldHRpbmdzKQoKCmRlZiBzZXR1cCgpOgogICAgbW9kZWwuQmFzZS5tZXRhZGF0YS5kcm9wX2FsbCgpCiAgICBtb2RlbC5CYXNlLm1ldGFkYXRhLmNyZWF0ZV9hbGwoKQoKICAgIHdpdGggdHJhbnNhY3Rpb24ubWFuYWdlcjoKICAgICAgICByb290X3VzZXIgPSBtb2RlbC5Vc2VyKAogICAgICAgICAgICBuYW1lPXUnQm90JywKICAgICAgICAgICAgZW1haWw9J3Jvb3RAd2FycHdvcmtzLmxvY2FsJywKICAgICAgICApCiAgICAgICAgcm9vdF91c2VyLnVwZGF0ZV9wYXNzd29yZCgncm9vdCcpCiAgICAgICAgbW9kZWwuU2Vzc2lvbi5hZGQocm9vdF91c2VyKQoKCmNsYXNzIEZ1bmN0aW9uYWxCYXNlKFRlc3RDYXNlKToKCiAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgc2VsZi5hcHAgPSBUZXN0QXBwKGFwcCkKCgpjbGFzcyBUZXN0U21va2UoRnVuY3Rpb25hbEJhc2UpOgoKICAgIGRlZiB0ZXN0X2luZGV4KHNlbGYpOgogICAgICAgIHNlbGYuYXBwLmdldCgnLycpCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCB0cmFuc2FjdGlvbgoKZnJvbSB3ZWJ0ZXN0IGltcG9ydCBUZXN0QXBwCgo8fGZpbV9lbmR8Pg=="]
["d4764e48aec7522bc1e1fa316e9162bf7995f21a-2","d4764e48aec7522bc1e1fa316e9162bf7995f21a","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCAoYWJzb2x1dGVfaW1wb3J0LCBkaXZpc2lvbiwgcHJpbnRfZnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGVfbGl0ZXJhbHMpCgpmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQoKaW1wb3J0IHRyYW5zYWN0aW9uCgpmcm9tIHdlYnRlc3QgaW1wb3J0IFRlc3RBcHAKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuLi5tYWluIGltcG9ydCBtYWluCmZyb20gLi4uIGltcG9ydCBtb2RlbAoKZnJvbSAuLnNldHRpbmdzIGltcG9ydCBzZXR0aW5ncwo8fGZpbV9lbmR8Pg=="]
["d4764e48aec7522bc1e1fa316e9162bf7995f21a-3","d4764e48aec7522bc1e1fa316e9162bf7995f21a","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCAoYWJzb2x1dGVfaW1wb3J0LCBkaXZpc2lvbiwgcHJpbnRfZnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGVfbGl0ZXJhbHMpCgpmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQoKPHxmaW1faG9sZXw+CmZyb20gLi4ubWFpbiBpbXBvcnQgbWFpbgpmcm9tIC4uLiBpbXBvcnQgbW9kZWwKCmZyb20gLi5zZXR0aW5ncyBpbXBvcnQgc2V0dGluZ3MKCgphcHAgPSBtYWluKHt9LCAqKnNldHRpbmdzKQoKCmRlZiBzZXR1cCgpOgogICAgbW9kZWwuQmFzZS5tZXRhZGF0YS5kcm9wX2FsbCgpCiAgICBtb2RlbC5CYXNlLm1ldGFkYXRhLmNyZWF0ZV9hbGwoKQoKICAgIHdpdGggdHJhbnNhY3Rpb24ubWFuYWdlcjoKICAgICAgICByb290X3VzZXIgPSBtb2RlbC5Vc2VyKAogICAgICAgICAgICBuYW1lPXUnQm90JywKICAgICAgICAgICAgZW1haWw9J3Jvb3RAd2FycHdvcmtzLmxvY2FsJywKICAgICAgICApCiAgICAgICAgcm9vdF91c2VyLnVwZGF0ZV9wYXNzd29yZCgncm9vdCcpCiAgICAgICAgbW9kZWwuU2Vzc2lvbi5hZGQocm9vdF91c2VyKQoKCmNsYXNzIEZ1bmN0aW9uYWxCYXNlKFRlc3RDYXNlKToKCiAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgc2VsZi5hcHAgPSBUZXN0QXBwKGFwcCkKCgpjbGFzcyBUZXN0U21va2UoRnVuY3Rpb25hbEJhc2UpOgoKICAgIGRlZiB0ZXN0X2luZGV4KHNlbGYpOgogICAgICAgIHNlbGYuYXBwLmdldCgnLycpCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCB0cmFuc2FjdGlvbgoKZnJvbSB3ZWJ0ZXN0IGltcG9ydCBUZXN0QXBwCgo8fGZpbV9lbmR8Pg=="]
["2e7997afc175b03625dc465f31a87e919ae9e22b-1","2e7997afc175b03625dc465f31a87e919ae9e22b","PHxmaW1fcHJlZml4fD4KIiIiRXhhbXBsZXMgZm9yIGV4YWN0Y292ZXIuIiIiCmZyb20gZXhhY3Rjb3Zlci5leGFjdGNvdmVyIGltcG9ydCBzb2x2ZQoKCiMgQmFzaWMgdXNhZ2UKdSA9IHsxLCAyLCAzLCA0LCA1LCA2LCA3fQpzID0gewogICAgJ0EnOiB7MSwgNCwgN30sCiAgICAnQic6IHsxLCA0fSwKICAgICdDJzogezQsIDUsIDd9LAogICAgJ0QnOiB7MywgNSwgNn0sCiAgICAnRSc6IHsyLCAzLCA2LCA3fSwKICAgICdGJzogezIsIDd9LAp9CnJlc3VsdCA9IHNvbHZlKHUsIHMpCnByaW50KHJlc3VsdCkKIyBbeydEJywgJ0YnLCAnQid9XQoKCiMgQW4gZXhhbXBsZSB3aXRoIG11bHRpcGxlIHNvbHV0aW9ucy4KdSA9IHsxLCAyLCAzLCA0LCA1LCA2LCA3fQpzID0gewogICAgJ0EnOiB7MSwgNCwgN30sCiAgICAnQic6IHsxLCA0fSwKICAgICdDJzogezQsIDUsIDd9LAogICAgJ0QnOiB7MywgNSwgNn0sCiAgICAnRSc6IHsyLCAzLCA2LCA3fSwKICAgICdGJzogezIsIDd9LAogICAgJ0cnOiB7MywgNSwgNn0sCn0KcmVzdWx0ID0gc29sdmUodSwgcykKcHJpbnQocmVzdWx0KQojIFt7J0QnLCAnRicsICdCJ30sIHsnRycsICdGJywgJ0InfV0KCgojIE5vIHNvbHV0aW9uCnUgPSB7MSwgMiwgMywgNCwgNSwgNiwgN30KcyA9IHsKICAgICdBJzogezEsIDQsIDd9LAogICAgJ0InOiB7MSwgNH0sCiAgICAnQyc6IHs0LCA1LCA3fSwKICAgICdEJzogezMsIDV9LAogICAgJ0UnOiB7MiwgMywgN30sCiAgICAnRic6IHsyLCA3fSwKfQpyZXN1bHQgPSBzb2x2ZSh1LCBzKQpwcmludChyZXN1bHQpCiMgW10KCgojIHVuaXZlcnNlX2NvbHVtbnMgYXMgYSBzdHJpbmcuCnUgPSAnMTIzNDU2NycKcyA9IHsKICAgICdBJzogeycxJywgJzQnLCAnNyd9LAogICAgJ0InOiB7JzEnLCAnNCd9LAogICAgJ0MnOiB7JzQnLCAnNScsICc3J30sCiAgICAnRCc6IHsnMycsICc1JywgJzYnfSwKICAgICdFJzogeycyJywgJzMnLCAnNicsICc3J30sCiAgICAnRic6IHsnMicsICc3J30sCiAgICAnRyc6IHsnMycsICc1JywgJzYnfSwKfQpyZXN1bHQgPSBzb2x2ZSh1LCBzKQpwcmludChyZXN1bHQpCiMgW3snRCcsICdGJywgJ0InfSwgeydHJywgJ0YnLCAnQid9XQoKCiMgQnkgZGVmYXVsdCwgdGhlIG9yZGVyIG9mIHRoZSByZXN1bHRzIGlzIG5vdCByYW5kb20uCnUgPSB7MSwgMiwgMywgNCwgNSwgNiwgN30KcyA9IHsKICAgICdBJzogezEsIDQsIDd9LAogICAgJ0InOiB7MSwgNH0sCiAgICAnQyc6IHs0LCA1LCA3fSwKICAgICdEJzogezMsIDUsIDZ9LAogICAgJ0UnOiB7MiwgMywgNiwgN30sCiAgICAnRic6IHsyLCA3fSwKICAgICdHJzogezMsIDUsIDZ9LAp9CnJlc3VsdCA9IHNvbHZlKHUsIHMsIGxpbWl0PTEpCnByaW50KHJlc3VsdCkKIyBbeydEJywgJ0YnLCAnQid9XQpyZXN1bHQgPSBzb2x2ZSh1LCBzLCBsaW1pdD0xKSAgIyBTb2x2aW5nIHRoZSBwcm9ibGVtIGFnYWluIHlpZWxkcyB0aGUgc2FtZSByZXN1bHQuCnByaW50KHJlc3VsdCkKIyBbeydEJywgJ0YnLCAnQid9XQojIFVzZSByYW5kb21pemU9VHJ1ZSB0byByYW5kb21pemUgdGhlIG9yZGVyLiBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgdG8gZ2V0IGEKIyByYW5kb20gc29sdXRpb24gZnJvbSBhIHByb2JsZW0gdGhhdCBoYXMgbXVsdGlwbGUgc29sdXRpb25zLgpmb3IgaSBpbiByYW5nZSgxMCk6CiAgICByZXN1bHQgPSBzb2x2ZSh1LCBzLCBsaW1pdD0xLCByYW5kb21pemU9VHJ1ZSkKICAgIHByaW50KHJlc3VsdCkKIyBbeydHJywgJ0YnLCAnQid9XQojIFt7J0cnLCAnRicsICdCJ31dCiMgW3snRCcsICdGJywgJ0InfV0KIyBbeydEJywgJ0YnLCAnQid9XQojIFt7J0QnLCAnRicsICdCJ31dCiMgW3snRCcsICdGJywgJ0InfV0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojIFt7J0cnLCAnRicsICdCJ31dCiMgW3snRCcsICdGJywgJ0InfV0KIyBbeydHJywgJ0YnLCAnQid9XQojIFt7J0cnLCAnRicsICdCJ31dCjx8ZmltX2VuZHw+"]
["2e7997afc175b03625dc465f31a87e919ae9e22b-2","2e7997afc175b03625dc465f31a87e919ae9e22b","PHxmaW1fcHJlZml4fD4KIiIiRXhhbXBsZXMgZm9yIGV4YWN0Y292ZXIuIiIiCmZyb20gZXhhY3Rjb3Zlci5leGFjdGNvdmVyIGltcG9ydCBzb2x2ZQoKCiMgQmFzaWMgdXNhZ2UKdSA9IHsxLCAyLCAzLCA0LCA1LCA2LCA3fQpzID0gewogICAgJ0EnOiB7MSwgNCwgN30sCiAgICAnQic6IHsxLCA0fSwKICAgICdDJzogezQsIDUsIDd9LAogICAgJ0QnOiB7MywgNSwgNn0sCiAgICAnRSc6IHsyLCAzLCA2LCA3fSwKICAgICdGJzogezIsIDd9LAp9CnJlc3VsdCA9IHNvbHZlKHUsIHMpCnByaW50KHJlc3VsdCkKIyBbeydEJywgJ0YnLCAnQid9XQoKCiMgQW4gZXhhbXBsZSB3aXRoIG11bHRpcGxlIHNvbHV0aW9ucy4KdSA9IHsxLCAyLCAzLCA0LCA1LCA2LCA3fQpzID0gewogICAgJ0EnOiB7MSwgNCwgN30sCiAgICAnQic6IHsxLCA0fSwKICAgICdDJzogezQsIDUsIDd9LAogICAgJ0QnOiB7MywgNSwgNn0sCiAgICAnRSc6IHsyLCAzLCA2LCA3fSwKICAgICdGJzogezIsIDd9LAogICAgJ0cnOiB7MywgNSwgNn0sCn0KcmVzdWx0ID0gc29sdmUodSwgcykKcHJpbnQocmVzdWx0KQojIFt7J0QnLCAnRicsICdCJ30sIHsnRycsICdGJywgJ0InfV0KCgojIE5vIHNvbHV0aW9uCnUgPSB7MSwgMiwgMywgNCwgNSwgNiwgN30KcyA9IHsKICAgICdBJzogezEsIDQsIDd9LAogICAgJ0InOiB7MSwgNH0sCiAgICAnQyc6IHs0LCA1LCA3fSwKICAgICdEJzogezMsIDV9LAogICAgJ0UnOiB7MiwgMywgN30sCiAgICAnRic6IHsyLCA3fSwKfQpyZXN1bHQgPSBzb2x2ZSh1LCBzKQpwcmludChyZXN1bHQpCiMgW10KCgojIHVuaXZlcnNlX2NvbHVtbnMgYXMgYSBzdHJpbmcuCnUgPSAnMTIzNDU2NycKcyA9IHsKICAgICdBJzogeycxJywgJzQnLCAnNyd9LAogICAgJ0InOiB7JzEnLCAnNCd9LAogICAgJ0MnOiB7JzQnLCAnNScsICc3J30sCiAgICAnRCc6IHsnMycsICc1JywgJzYnfSwKICAgICdFJzogeycyJywgJzMnLCAnNicsICc3J30sCiAgICAnRic6IHsnMicsICc3J30sCiAgICAnRyc6IHsnMycsICc1JywgJzYnfSwKfQpyZXN1bHQgPSBzb2x2ZSh1LCBzKQpwcmludChyZXN1bHQpCiMgW3snRCcsICdGJywgJ0InfSwgeydHJywgJ0YnLCAnQid9XQoKCiMgQnkgZGVmYXVsdCwgdGhlIG9yZGVyIG9mIHRoZSByZXN1bHRzIGlzIG5vdCByYW5kb20uCnUgPSB7MSwgMiwgMywgNCwgNSwgNiwgN30KcyA9IHsKICAgICdBJzogezEsIDQsIDd9LAogICAgJ0InOiB7MSwgNH0sCiAgICAnQyc6IHs0LCA1LCA3fSwKICAgICdEJzogezMsIDUsIDZ9LAogICAgJ0UnOiB7MiwgMywgNiwgN30sCiAgICAnRic6IHsyLCA3fSwKICAgICdHJzogezMsIDUsIDZ9LAp9CnJlc3VsdCA9IHNvbHZlKHUsIHMsIGxpbWl0PTEpCnByaW50KHJlc3VsdCkKIyBbeydEJywgJ0YnLCAnQid9XQpyZXN1bHQgPSBzb2x2ZSh1LCBzLCBsaW1pdD0xKSAgIyBTb2x2aW5nIHRoZSBwcm9ibGVtIGFnYWluIHlpZWxkcyB0aGUgc2FtZSByZXN1bHQuCnByaW50KHJlc3VsdCkKIyBbeydEJywgJ0YnLCAnQid9XQojIFVzZSByYW5kb21pemU9VHJ1ZSB0byByYW5kb21pemUgdGhlIG9yZGVyLiBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgdG8gZ2V0IGEKIyByYW5kb20gc29sdXRpb24gZnJvbSBhIHByb2JsZW0gdGhhdCBoYXMgbXVsdGlwbGUgc29sdXRpb25zLgpmb3IgaSBpbiByYW5nZSgxMCk6CiAgICByZXN1bHQgPSBzb2x2ZSh1LCBzLCBsaW1pdD0xLCByYW5kb21pemU9VHJ1ZSkKICAgIHByaW50KHJlc3VsdCkKIyBbeydHJywgJ0YnLCAnQid9XQojIFt7J0cnLCAnRicsICdCJ31dCiMgW3snRCcsICdGJywgJ0InfV0KIyBbeydEJywgJ0YnLCAnQid9XQojIFt7J0QnLCAnRicsICdCJ31dCiMgW3snRCcsICdGJywgJ0InfV0KIyBbeydHJywgJ0YnLCAnQid9XQojIFt7J0QnLCAnRicsICdCJ31dCiMgW3snRycsICdGJywgJ0InfV0KIyBbeydHJywgJ0YnLCAnQid9XQoKCiMgVXNlIHByZXNlZWQgdG8gcG9wdWxhdGUgYSBwYXJ0aWFsIHNvbHV0aW9uIHNldC4KIyBUaGlzIHByb2JsZW0gaGFzIGZvdXIgc29sdXRpb25zLgp1ID0gezEsIDIsIDMsIDQsIDUsIDYsIDd9CnMgPSB7CiAgICAnQSc6IHsxLCA0LCA3fSwKICAgICdCJzogezEsIDR9LAogICAgJ0MnOiB7NCwgNSwgN30sCiAgICAnRCc6IHszLCA1LCA2fSwKICAgICdFJzogezIsIDMsIDYsIDd9LAogICAgJ0YnOiB7MiwgN30sCiAgICAnRyc6IHszLCA1LCA2fSwKICAgICdIJzogezEsIDR9LAp9CnJlc3VsdCA9IHNvbHZlKHUsIHMsIHByZXNlZWQ9eydCJ30pICAjIFdoYXQgaXMgdGhlIHJlc3VsdCB3aGVuICdCJyBpcyBjaG9zZW4/CnByaW50KHJlc3VsdCkKIyBbeydEJywgJ0YnLCAnQid9LCB7J0cnLCAnRicsICdCJ31dCnJlc3VsdCA9IHNvbHZlKHUsIHMsIHByZXNlZWQ9eydEJ30pICAjIFdoYXQgaXMgdGhlIHJlc3VsdCB3aGVuICdEJyBpcyBjaG9zZW4/CnByaW50KHJlc3VsdCkKIyBbeydEJywgJ0YnLCAnQid9LCB7J0gnLCAnRCcsICdGJ31dCnJlc3VsdCA9IHNvbHZlKHUsIHMsIHByZXNlZWQ9eydCJywgJ0cnfSkgICMgV2hhdCBpcyB0aGUgcmVzdWx0IHdoZW4gJ0InIGFuZCAnRycgaXMgY2hvc2VuPwpwcmludChyZXN1bHQpCiMgW3snRycsICdGJywgJ0InfV0KcmVzdWx0ID0gc29sdmUodSwgcywgcHJlc2VlZD17J0EnfSkgICMgV2hhdCBpcyB0aGUgcmVzdWx0IHdoZW4gJ0EnIGlzIGNob3Nlbj8KcHJpbnQocmVzdWx0KQojIFtdCgoKIyBDb3VudCB0aGUgbnVtYmVyIG9mIHNvbHV0aW9ucwp1ID0gezEsIDIsIDMsIDQsIDUsIDYsIDd9CnMgPSB7CiAgICAnQSc6IHsxLCA0LCA3fSwKICAgICdCJzogezEsIDR9LAogICAgJ0MnOiB7NCwgNSwgN30sCiAgICAnRCc6IHszLCA1LCA2fSwKICAgICdFJzogezIsIDMsIDYsIDd9LAogICAgJ0YnOiB7MiwgN30sCiAgICAnRyc6IHszLCA1LCA2fSwKICAgICdIJzogezEsIDR9LAp9CnJlc3VsdCA9IHNvbHZlKHUsIHMsIGNvdW50PVRydWUpCnByaW50KHJlc3VsdCkKIyA0Cjx8ZmltX2hvbGV8Pgp1ID0gezEsIDIsIDMsIDQsIDUsIDYsIDd9CnMgPSB7CiAgICAnQSc6IHsxLCA0LCA3fSwKICAgICdCJzogezEsIDR9LAogICAgJ0MnOiB7NCwgNSwgN30sCiAgICAnRCc6IHszLCA1LCA2fSwKICAgICdFJzogezIsIDMsIDYsIDd9LAogICAgJ0YnOiB7MiwgN30sCiAgICAnRyc6IHszLCA1LCA2fSwKICAgICdIJzogezEsIDR9LAp9CnJlc3VsdCA9IHNvbHZlKHUsIHMsIGNvdW50PVRydWUsIGxpbWl0PTIpCnByaW50KHJlc3VsdCkKIyAyCjx8ZmltX3N1ZmZpeHw+CgoKIyBVc2UgbGltaXQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGEgY2VydGFpbiBudW1iZXIgb2Ygc29sdXRpb25zLgojIEluIHRoaXMgZXhhbXBsZSwgd2UgYXNrIGlmIHRoZXJlIGlzIGF0IGxlYXN0IHR3byBzb2x1dGlvbnMuCjx8ZmltX2VuZHw+"]
["2e7997afc175b03625dc465f31a87e919ae9e22b-3","2e7997afc175b03625dc465f31a87e919ae9e22b","PHxmaW1fcHJlZml4fD4KIiIiRXhhbXBsZXMgZm9yIGV4YWN0Y292ZXIuIiIiCmZyb20gZXhhY3Rjb3Zlci5leGFjdGNvdmVyIGltcG9ydCBzb2x2ZQoKCiMgQmFzaWMgdXNhZ2UKdSA9IHsxLCAyLCAzLCA0LCA1LCA2LCA3fQpzID0gewogICAgJ0EnOiB7MSwgNCwgN30sCiAgICAnQic6IHsxLCA0fSwKICAgICdDJzogezQsIDUsIDd9LAogICAgJ0QnOiB7MywgNSwgNn0sCiAgICAnRSc6IHsyLCAzLCA2LCA3fSwKICAgICdGJzogezIsIDd9LAp9CnJlc3VsdCA9IHNvbHZlKHUsIHMpCnByaW50KHJlc3VsdCkKIyBbeydEJywgJ0YnLCAnQid9XQoKCiMgQW4gZXhhbXBsZSB3aXRoIG11bHRpcGxlIHNvbHV0aW9ucy4KdSA9IHsxLCAyLCAzLCA0LCA1LCA2LCA3fQpzID0gewogICAgJ0EnOiB7MSwgNCwgN30sCiAgICAnQic6IHsxLCA0fSwKICAgICdDJzogezQsIDUsIDd9LAogICAgJ0QnOiB7MywgNSwgNn0sCiAgICAnRSc6IHsyLCAzLCA2LCA3fSwKICAgICdGJzogezIsIDd9LAogICAgJ0cnOiB7MywgNSwgNn0sCn0KcmVzdWx0ID0gc29sdmUodSwgcykKcHJpbnQocmVzdWx0KQojIFt7J0QnLCAnRicsICdCJ30sIHsnRycsICdGJywgJ0InfV0KCgojIE5vIHNvbHV0aW9uCnUgPSB7MSwgMiwgMywgNCwgNSwgNiwgN30KcyA9IHsKICAgICdBJzogezEsIDQsIDd9LAogICAgJ0InOiB7MSwgNH0sCiAgICAnQyc6IHs0LCA1LCA3fSwKICAgICdEJzogezMsIDV9LAogICAgJ0UnOiB7MiwgMywgN30sCiAgICAnRic6IHsyLCA3fSwKfQpyZXN1bHQgPSBzb2x2ZSh1LCBzKQpwcmludChyZXN1bHQpCiMgW10KCgojIHVuaXZlcnNlX2NvbHVtbnMgYXMgYSBzdHJpbmcuCnUgPSAnMTIzNDU2NycKcyA9IHsKICAgICdBJzogeycxJywgJzQnLCAnNyd9LAogICAgJ0InOiB7JzEnLCAnNCd9LAogICAgJ0MnOiB7JzQnLCAnNScsICc3J30sCiAgICAnRCc6IHsnMycsICc1JywgJzYnfSwKICAgICdFJzogeycyJywgJzMnLCAnNicsICc3J30sCiAgICAnRic6IHsnMicsICc3J30sCiAgICAnRyc6IHsnMycsICc1JywgJzYnfSwKfQpyZXN1bHQgPSBzb2x2ZSh1LCBzKQpwcmludChyZXN1bHQpCiMgW3snRCcsICdGJywgJ0InfSwgeydHJywgJ0YnLCAnQid9XQoKCiMgQnkgZGVmYXVsdCwgdGhlIG9yZGVyIG9mIHRoZSByZXN1bHRzIGlzIG5vdCByYW5kb20uCnUgPSB7MSwgMiwgMywgNCwgNSwgNiwgN30KcyA9IHsKPHxmaW1faG9sZXw+CiAgICAnRSc6IHsyLCAzLCA2LCA3fSwKICAgICdGJzogezIsIDd9LAogICAgJ0cnOiB7MywgNSwgNn0sCn0KcmVzdWx0ID0gc29sdmUodSwgcywgbGltaXQ9MSkKcHJpbnQocmVzdWx0KQojIFt7J0QnLCAnRicsICdCJ31dCnJlc3VsdCA9IHNvbHZlKHUsIHMsIGxpbWl0PTEpICAjIFNvbHZpbmcgdGhlIHByb2JsZW0gYWdhaW4geWllbGRzIHRoZSBzYW1lIHJlc3VsdC4KcHJpbnQocmVzdWx0KQojIFt7J0QnLCAnRicsICdCJ31dCiMgVXNlIHJhbmRvbWl6ZT1UcnVlIHRvIHJhbmRvbWl6ZSB0aGUgb3JkZXIuIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB0byBnZXQgYQojIHJhbmRvbSBzb2x1dGlvbiBmcm9tIGEgcHJvYmxlbSB0aGF0IGhhcyBtdWx0aXBsZSBzb2x1dGlvbnMuCmZvciBpIGluIHJhbmdlKDEwKToKICAgIHJlc3VsdCA9IHNvbHZlKHUsIHMsIGxpbWl0PTEsIHJhbmRvbWl6ZT1UcnVlKQogICAgcHJpbnQocmVzdWx0KQojIFt7J0cnLCAnRicsICdCJ31dCiMgW3snRycsICdGJywgJ0InfV0KIyBbeydEJywgJ0YnLCAnQid9XQojIFt7J0QnLCAnRicsICdCJ31dCiMgW3snRCcsICdGJywgJ0InfV0KIyBbeydEJywgJ0YnLCAnQid9XQojIFt7J0cnLCAnRicsICdCJ31dCiMgW3snRCcsICdGJywgJ0InfV0KIyBbeydHJywgJ0YnLCAnQid9XQojIFt7J0cnLCAnRicsICdCJ31dCgoKIyBVc2UgcHJlc2VlZCB0byBwb3B1bGF0ZSBhIHBhcnRpYWwgc29sdXRpb24gc2V0LgojIFRoaXMgcHJvYmxlbSBoYXMgZm91ciBzb2x1dGlvbnMuCnUgPSB7MSwgMiwgMywgNCwgNSwgNiwgN30KcyA9IHsKICAgICdBJzogezEsIDQsIDd9LAogICAgJ0InOiB7MSwgNH0sCiAgICAnQyc6IHs0LCA1LCA3fSwKICAgICdEJzogezMsIDUsIDZ9LAogICAgJ0UnOiB7MiwgMywgNiwgN30sCiAgICAnRic6IHsyLCA3fSwKICAgICdHJzogezMsIDUsIDZ9LAogICAgJ0gnOiB7MSwgNH0sCn0KcmVzdWx0ID0gc29sdmUodSwgcywgcHJlc2VlZD17J0InfSkgICMgV2hhdCBpcyB0aGUgcmVzdWx0IHdoZW4gJ0InIGlzIGNob3Nlbj8KcHJpbnQocmVzdWx0KQojIFt7J0QnLCAnRicsICdCJ30sIHsnRycsICdGJywgJ0InfV0KcmVzdWx0ID0gc29sdmUodSwgcywgcHJlc2VlZD17J0QnfSkgICMgV2hhdCBpcyB0aGUgcmVzdWx0IHdoZW4gJ0QnIGlzIGNob3Nlbj8KcHJpbnQocmVzdWx0KQojIFt7J0QnLCAnRicsICdCJ30sIHsnSCcsICdEJywgJ0YnfV0KcmVzdWx0ID0gc29sdmUodSwgcywgcHJlc2VlZD17J0InLCAnRyd9KSAgIyBXaGF0IGlzIHRoZSByZXN1bHQgd2hlbiAnQicgYW5kICdHJyBpcyBjaG9zZW4/CnByaW50KHJlc3VsdCkKIyBbeydHJywgJ0YnLCAnQid9XQpyZXN1bHQgPSBzb2x2ZSh1LCBzLCBwcmVzZWVkPXsnQSd9KSAgIyBXaGF0IGlzIHRoZSByZXN1bHQgd2hlbiAnQScgaXMgY2hvc2VuPwpwcmludChyZXN1bHQpCiMgW10KCgojIENvdW50IHRoZSBudW1iZXIgb2Ygc29sdXRpb25zCnUgPSB7MSwgMiwgMywgNCwgNSwgNiwgN30KcyA9IHsKICAgICdBJzogezEsIDQsIDd9LAogICAgJ0InOiB7MSwgNH0sCiAgICAnQyc6IHs0LCA1LCA3fSwKICAgICdEJzogezMsIDUsIDZ9LAogICAgJ0UnOiB7MiwgMywgNiwgN30sCiAgICAnRic6IHsyLCA3fSwKICAgICdHJzogezMsIDUsIDZ9LAogICAgJ0gnOiB7MSwgNH0sCn0KcmVzdWx0ID0gc29sdmUodSwgcywgY291bnQ9VHJ1ZSkKcHJpbnQocmVzdWx0KQojIDQKCgojIFVzZSBsaW1pdCB0byBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYSBjZXJ0YWluIG51bWJlciBvZiBzb2x1dGlvbnMuCiMgSW4gdGhpcyBleGFtcGxlLCB3ZSBhc2sgaWYgdGhlcmUgaXMgYXQgbGVhc3QgdHdvIHNvbHV0aW9ucy4KdSA9IHsxLCAyLCAzLCA0LCA1LCA2LCA3fQpzID0gewogICAgJ0EnOiB7MSwgNCwgN30sCiAgICAnQic6IHsxLCA0fSwKICAgICdDJzogezQsIDUsIDd9LAogICAgJ0QnOiB7MywgNSwgNn0sCiAgICAnRSc6IHsyLCAzLCA2LCA3fSwKICAgICdGJzogezIsIDd9LAogICAgJ0cnOiB7MywgNSwgNn0sCiAgICAnSCc6IHsxLCA0fSwKfQpyZXN1bHQgPSBzb2x2ZSh1LCBzLCBjb3VudD1UcnVlLCBsaW1pdD0yKQpwcmludChyZXN1bHQpCiMgMgo8fGZpbV9zdWZmaXh8PgogICAgJ0EnOiB7MSwgNCwgN30sCiAgICAnQic6IHsxLCA0fSwKICAgICdDJzogezQsIDUsIDd9LAogICAgJ0QnOiB7MywgNSwgNn0sCjx8ZmltX2VuZHw+"]
["e7d23fea684e2f56fd745b38645167214e17bf7f-1","e7d23fea684e2f56fd745b38645167214e17bf7f","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc6dXRmLTgKIyBleGFtcGxlIDA1OiBjeWNsaWNfZG91YmxlX2xpbmtlZF9saXN0LnB5CgpjbGFzcyBOb2RlKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsPU5vbmUpOgogICAgICAgIHNlbGYudmFsID0gdmFsCiAgICAgICAgc2VsZi5wcmV2ID0gTm9uZQogICAgICAgIHNlbGYubmV4dCA9IE5vbmUKCgpjbGFzcyBDeWNsaWNEb3VibGVMaW5rZWRMaXN0KG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT1Ob25lKToKICAgICAgICBzZWxmLm1heHNpemUgPSBtYXhzaXplCiAgICAgICAgbm9kZSA9IE5vZGUoKQogICAgICAgIG5vZGUucHJldiA9IG5vZGUKICAgICAgICBub2RlLm5leHQgPSBub2RlCiAgICAgICAgc2VsZi5yb290ID0gbm9kZQogICAgICAgIHNlbGYubGVuZ3RoID0gMAoKICAgIGRlZiBfX2xlbl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmxlbmd0aAoKICAgIGRlZiBoZWFkbm9kZShzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5yb290Lm5leHQKCiAgICBkZWYgdGFpbG5vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYucm9vdC5wcmV2CgogICAgZGVmIGl0ZXJfbm9kZShzZWxmKToKICAgICAgICBpZiBzZWxmLmxlbmd0aCA9PSAwOgogICAgICAgICAgICByZXR1cm4KICAgICAgICBjdXIgPSBzZWxmLmhlYWRub2RlKCkKICAgICAgICBmb3IgXyBpbiByYW5nZShzZWxmLmxlbmd0aCk6CiAgICAgICAgICAgIHlpZWxkIGN1cgogICAgICAgICAgICBjdXIgPSBjdXIubmV4dAoKICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICBmb3Igbm9kZSBpbiBzZWxmLml0ZXJfbm9kZSgpOgogICAgICAgICAgICB5aWVsZCBub2RlLnZhbAoKICAgIGRlZiBpdGVyX25vZGVfcmV2ZXJzZShzZWxmKToKICAgICAgICBpZiBzZWxmLmxlbmd0aCA9PSAwOgogICAgICAgICAgICByZXR1cm4KICAgICAgICBjdXIgPSBzZWxmLnRhaWxub2RlKCkKICAgICAgICBmb3IgXyBpbiByYW5nZShzZWxmLmxlbmd0aCk6CiAgICAgICAgICAgIHlpZWxkIGN1cgogICAgICAgICAgICBjdXIgPSBjdXIucHJldgoKICAgIGRlZiBlbXB0eShzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5yb290Lm5leHQgaXMgc2VsZi5yb290CgogICAgZGVmIGFwcGVuZChzZWxmLCB2YWwpOiAgIyBPKDEpCiAgICAgICAgaWYgc2VsZi5tYXhzaXplIGlzIG5vdCBOb25lIGFuZCBzZWxmLmxlbmd0aCA9PSBzZWxmLm1heHNpemU6CiAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRnVsbCIpCiAgICAgICAgbm9kZSA9IE5vZGUodmFsKQogICAgICAgIHRhaWxub2RlID0gc2VsZi50YWlsbm9kZSgpCiAgICAgICAgdGFpbG5vZGUubmV4dCA9IG5vZGUKICAgICAgICBub2RlLm5leHQgPSBzZWxmLnJvb3QKICAgICAgICBzZWxmLnJvb3QucHJldiA9IG5vZGUKICAgICAgICBub2RlLnByZXYgPSB0YWlsbm9kZQogICAgICAgIHNlbGYubGVuZ3RoICs9IDEKCiAgICBkZWYgYXBwZW5kbGVmdChzZWxmLCB2YWwpOiAgIyBPKDEpCiAgICAgICAgaWYgc2VsZi5tYXhzaXplIGlzIG5vdCBOb25lIGFuZCBzZWxmLmxlbmd0aCA9PSBzZWxmLm1heHNpemU6CiAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRnVsbCIpCiAgICAgICAgbm9kZSA9IE5vZGUodmFsKQogICAgICAgIGlmIHNlbGYubGVuZ3RoID09IDA6CiAgICAgICAgICAgIHNlbGYucm9vdC5uZXh0ID0gbm9kZQogICAgICAgICAgICBub2RlLm5leHQgPSBzZWxmLnJvb3QKICAgICAgICAgICAgc2VsZi5yb290LnByZXYgPSBub2RlCiAgICAgICAgICAgIG5vZGUucHJldiA9IHNlbGYucm9vdAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG5vZGUucHJldiA9IHNlbGYucm9vdAogICAgICAgICAgICBub2RlLm5leHQgPSBzZWxmLnJvb3QubmV4dAogICAgICAgICAgICBzZWxmLnJvb3QubmV4dC5wcmV2ID0gbm9kZQogICAgICAgICAgICBzZWxmLnJvb3QubmV4dCA9IG5vZGUKICAgICAgICBzZWxmLmxlbmd0aCArPSAxCgogICAgZGVmIHBvcChzZWxmKTogICMgTygxKQogICAgICAgIGlmIHNlbGYubGVuZ3RoID09IDA6CiAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigicG9wIGZvcm0gZW1weXQgQ3ljbGljIERvdWJsZSBMaW5rZWQgTGlzdCIpCjx8ZmltX2hvbGV8PgogICAgICAgIHNlbGYucm9vdC5wcmV2ID0gdG1wX3RhaWxub2RlCiAgICAgICAgZGVsIHRhaWxub2RlCiAgICAgICAgc2VsZi5sZW5ndGggLT0gMQogICAgICAgIHJldHVybiB2YWwKCiAgICBkZWYgcG9wbGVmdChzZWxmKTogICMgTygxKQogICAgICAgIGlmIHNlbGYubGVuZ3RoID09IDA6CiAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigicG9wIGZvcm0gZW1weXQgQ3ljbGljIERvdWJsZSBMaW5rZWQgTGlzdCIpCiAgICAgICAgaGVhZG5vZGUgPSBzZWxmLmhlYWRub2RlKCkKICAgICAgICB2YWwgPSBoZWFkbm9kZS52YWwKICAgICAgICBpZiBzZWxmLmxlbmd0aCA9PSAxOgogICAgICAgICAgICBzZWxmLnJvb3QubmV4dCA9IHNlbGYucm9vdAogICAgICAgICAgICBzZWxmLnJvb3QucHJldiA9IHNlbGYucm9vdAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYucm9vdC5uZXh0ID0gaGVhZG5vZGUubmV4dAogICAgICAgICAgICBoZWFkbm9kZS5uZXh0LnByZXYgPSBzZWxmLnJvb3QKICAgICAgICBkZWwgaGVhZG5vZGUKICAgICAgICBzZWxmLmxlbmd0aCAtPSAxCiAgICAgICAgcmV0dXJuIHZhbAoKICAgIGRlZiBmaW5kKHNlbGYsIHZhbCk6ICAjIE8obikKICAgICAgICBmb3IgaWR4LCBub2RlIGluIGVudW1lcmF0ZShzZWxmLml0ZXJfbm9kZSgpKToKICAgICAgICAgICAgaWYgbm9kZS52YWwgPT0gdmFsOgogICAgICAgICAgICAgICAgcmV0dXJuIGlkeAogICAgICAgIHJldHVybiAtMQoKICAgIGRlZiBpbnNlcnQoc2VsZiwgcG9zLCB2YWwpOiAgIyBPKG4pCiAgICAgICAgaWYgcG9zIDw9IDA6CiAgICAgICAgICAgIHNlbGYuYXBwZW5kbGVmdCh2YWwpCiAgICAgICAgZWxpZiBzZWxmLmxlbmd0aCAtIDEgPCBwb3M6CiAgICAgICAgICAgIHNlbGYuYXBwZW5kKHZhbCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBub2RlID0gTm9kZSh2YWwpCiAgICAgICAgICAgIHByZSA9IHNlbGYucm9vdAogICAgICAgICAgICBmb3IgXyBpbiByYW5nZShwb3MpOgogICAgICAgICAgICAgICAgcHJlID0gcHJlLm5leHQKICAgICAgICAgICAgbm9kZS5wcmV2ID0gcHJlCiAgICAgICAgICAgIG5vZGUubmV4dCA9IHByZS5uZXh0CiAgICAgICAgICAgIG5vZGUubmV4dC5wcmV2ID0gbm9kZQogICAgICAgICAgICBwcmUubmV4dCA9IG5vZGUKICAgICAgICAgICAgc2VsZi5sZW5ndGggKz0gMQoKICAgIGRlZiByZW1vdmUoc2VsZiwgbm9kZSk6ICAjIE8oMSksIG5vZGUgaXMgbm90IHZhbHVlCiAgICAgICAgaWYgbm9kZSBpcyBzZWxmLnJvb3Q6CiAgICAgICAgICAgIHJldHVybgogICAgICAgIG5vZGUucHJldi5uZXh0ID0gbm9kZS5uZXh0CiAgICAgICAgbm9kZS5uZXh0LnByZXYgPSBub2RlLnByZXYKICAgICAgICBzZWxmLmxlbmd0aCAtPSAxCiAgICAgICAgcmV0dXJuIG5vZGUKCiAgICBkZWYgY2xlYXIoc2VsZik6CiAgICAgICAgZm9yIG5vZGUgaW4gc2VsZi5pdGVyX25vZGUoKToKICAgICAgICAgICAgZGVsIG5vZGUKICAgICAgICBzZWxmLnJvb3QubmV4dCA9IHNlbGYucm9vdAogICAgICAgIHNlbGYucm9vdC5wcmV2ID0gc2VsZi5yb290CiAgICAgICAgc2VsZi5sZW5ndGggPSAwCgoKIyB1c2UgcHl0ZXN0CmNkbGwgPSBDeWNsaWNEb3VibGVMaW5rZWRMaXN0KCkKCgpjbGFzcyBUZXN0RG91YmxlTGlua2VkTGlzdChvYmplY3QpOgoKICAgIGRlZiB0ZXN0X2FwcGVuZChzZWxmKToKICAgICAgICBjZGxsLmFwcGVuZCgxKQogICAgICAgIGNkbGwuYXBwZW5kKDIpCiAgICAgICAgY2RsbC5hcHBlbmQoMykKICAgICAgICBhc3NlcnQgW25vZGUudmFsIGZvciBub2RlIGluIGNkbGwuaXRlcl9ub2RlKCldID09IFsxLCAyLCAzXQogICAgICAgIGFzc2VydCBbbm9kZS52YWwgZm9yIG5vZGUgaW4gY2RsbC5pdGVyX25vZGVfcmV2ZXJzZSgpXSA9PSBbMywgMiwgMV0KCiAgICBkZWYgdGVzdF9hcHBlbmRsZWZ0KHNlbGYpOgogICAgICAgIGNkbGwuYXBwZW5kbGVmdCgwKQogICAgICAgIGFzc2VydCBsaXN0KGNkbGwpID09IFswLCAxLCAyLCAzXQoKICAgIGRlZiB0ZXN0X2N5Y2xpYyhzZWxmKToKICAgICAgICBoZWFkbm9kZSA9IGNkbGwuaGVhZG5vZGUoKQogICAgICAgIHRhaWxub2RlID0gY2RsbC50YWlsbm9kZSgpCiAgICAgICAgYXNzZXJ0IGhlYWRub2RlLnByZXYucHJldiA9PSB0YWlsbm9kZQogICAgICAgIGFzc2VydCB0YWlsbm9kZS5uZXh0Lm5leHQgPT0gaGVhZG5vZGUKCiAgICBkZWYgdGVzdF9sZW4oc2VsZik6CiAgICAgICAgYXNzZXJ0IGxlbihjZGxsKSA9PSA0CgogICAgZGVmIHRlc3RfcG9wKHNlbGYpOgogICAgICAgIHRhaWxfdmFsID0gY2RsbC5wb3AoKQogICAgICAgIGFzc2VydCB0YWlsX3ZhbCA9PSAzCgogICAgZGVmIHRlc3RfcG9wbGVmdChzZWxmKToKICAgICAgICBoZWFkX3ZhbCA9IGNkbGwucG9wbGVmdCgpCiAgICAgICAgYXNzZXJ0IGhlYWRfdmFsID09IDAKCiAgICBkZWYgdGVzdF9maW5kKHNlbGYpOgogICAgICAgIGFzc2VydCBjZGxsLmZpbmQoMikgPT0gMQogICAgICAgIGFzc2VydCBjZGxsLmZpbmQoNCkgPT0gLTEKCiAgICBkZWYgdGVzdF9pbnNlcnQoc2VsZik6CiAgICAgICAgY2RsbC5pbnNlcnQoMSwgNSkKICAgICAgICBhc3NlcnQgW25vZGUudmFsIGZvciBub2RlIGluIGNkbGwuaXRlcl9ub2RlKCldID09IFsxLCA1LCAyXQoKICAgIGRlZiB0ZXN0X3JlbW92ZShzZWxmKToKICAgICAgICBoZWFkbm9kZSA9IGNkbGwucm9vdC5uZXh0CiAgICAgICAgbm9kZSA9IGNkbGwucmVtb3ZlKGhlYWRub2RlKQogICAgICAgIGFzc2VydCBub2RlLnZhbCA9PSAxCiAgICAgICAgYXNzZXJ0IFtub2RlLnZhbCBmb3Igbm9kZSBpbiBjZGxsLml0ZXJfbm9kZSgpXSA9PSBbNSwgMl0KCiAgICBkZWYgdGVzdF9jbGVhcl9hbmRfZW1wdHkoc2VsZik6CiAgICAgICAgY2RsbC5jbGVhcigpCiAgICAgICAgYXNzZXJ0IGNkbGwuZW1wdHkoKSBpcyBUcnVlCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgdGFpbG5vZGUgPSBzZWxmLnRhaWxub2RlKCkKICAgICAgICB2YWwgPSB0YWlsbm9kZS52YWwKICAgICAgICB0bXBfdGFpbG5vZGUgPSB0YWlsbm9kZS5wcmV2CiAgICAgICAgdG1wX3RhaWxub2RlLm5leHQgPSBzZWxmLnJvb3QKPHxmaW1fZW5kfD4="]
["e7d23fea684e2f56fd745b38645167214e17bf7f-2","e7d23fea684e2f56fd745b38645167214e17bf7f","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc6dXRmLTgKIyBleGFtcGxlIDA1OiBjeWNsaWNfZG91YmxlX2xpbmtlZF9saXN0LnB5CgpjbGFzcyBOb2RlKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsPU5vbmUpOgogICAgICAgIHNlbGYudmFsID0gdmFsCiAgICAgICAgc2VsZi5wcmV2ID0gTm9uZQogICAgICAgIHNlbGYubmV4dCA9IE5vbmUKCgpjbGFzcyBDeWNsaWNEb3VibGVMaW5rZWRMaXN0KG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT1Ob25lKToKICAgICAgICBzZWxmLm1heHNpemUgPSBtYXhzaXplCiAgICAgICAgbm9kZSA9IE5vZGUoKQogICAgICAgIG5vZGUucHJldiA9IG5vZGUKICAgICAgICBub2RlLm5leHQgPSBub2RlCiAgICAgICAgc2VsZi5yb290ID0gbm9kZQogICAgICAgIHNlbGYubGVuZ3RoID0gMAoKICAgIGRlZiBfX2xlbl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmxlbmd0aAoKICAgIGRlZiBoZWFkbm9kZShzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5yb290Lm5leHQKCiAgICBkZWYgdGFpbG5vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYucm9vdC5wcmV2CgogICAgZGVmIGl0ZXJfbm9kZShzZWxmKToKICAgICAgICBpZiBzZWxmLmxlbmd0aCA9PSAwOgogICAgICAgICAgICByZXR1cm4KICAgICAgICBjdXIgPSBzZWxmLmhlYWRub2RlKCkKICAgICAgICBmb3IgXyBpbiByYW5nZShzZWxmLmxlbmd0aCk6CiAgICAgICAgICAgIHlpZWxkIGN1cgogICAgICAgICAgICBjdXIgPSBjdXIubmV4dAoKICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICBmb3Igbm9kZSBpbiBzZWxmLml0ZXJfbm9kZSgpOgogICAgICAgICAgICB5aWVsZCBub2RlLnZhbAoKICAgIGRlZiBpdGVyX25vZGVfcmV2ZXJzZShzZWxmKToKICAgICAgICBpZiBzZWxmLmxlbmd0aCA9PSAwOgogICAgICAgICAgICByZXR1cm4KICAgICAgICBjdXIgPSBzZWxmLnRhaWxub2RlKCkKICAgICAgICBmb3IgXyBpbiByYW5nZShzZWxmLmxlbmd0aCk6CiAgICAgICAgICAgIHlpZWxkIGN1cgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGN1ciA9IGN1ci5wcmV2Cgo8fGZpbV9lbmR8Pg=="]
["e7d23fea684e2f56fd745b38645167214e17bf7f-3","e7d23fea684e2f56fd745b38645167214e17bf7f","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc6dXRmLTgKIyBleGFtcGxlIDA1OiBjeWNsaWNfZG91YmxlX2xpbmtlZF9saXN0LnB5CgpjbGFzcyBOb2RlKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsPU5vbmUpOgogICAgICAgIHNlbGYudmFsID0gdmFsCiAgICAgICAgc2VsZi5wcmV2ID0gTm9uZQogICAgICAgIHNlbGYubmV4dCA9IE5vbmUKCgpjbGFzcyBDeWNsaWNEb3VibGVMaW5rZWRMaXN0KG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT1Ob25lKToKICAgICAgICBzZWxmLm1heHNpemUgPSBtYXhzaXplCiAgICAgICAgbm9kZSA9IE5vZGUoKQogICAgICAgIG5vZGUucHJldiA9IG5vZGUKICAgICAgICBub2RlLm5leHQgPSBub2RlCiAgICAgICAgc2VsZi5yb290ID0gbm9kZQogICAgICAgIHNlbGYubGVuZ3RoID0gMAoKICAgIGRlZiBfX2xlbl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmxlbmd0aAoKICAgIGRlZiBoZWFkbm9kZShzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5yb290Lm5leHQKCiAgICBkZWYgdGFpbG5vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYucm9vdC5wcmV2CgogICAgZGVmIGl0ZXJfbm9kZShzZWxmKToKICAgICAgICBpZiBzZWxmLmxlbmd0aCA9PSAwOgogICAgICAgICAgICByZXR1cm4KICAgICAgICBjdXIgPSBzZWxmLmhlYWRub2RlKCkKICAgICAgICBmb3IgXyBpbiByYW5nZShzZWxmLmxlbmd0aCk6CiAgICAgICAgICAgIHlpZWxkIGN1cgogICAgICAgICAgICBjdXIgPSBjdXIubmV4dAoKICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICBmb3Igbm9kZSBpbiBzZWxmLml0ZXJfbm9kZSgpOgogICAgICAgICAgICB5aWVsZCBub2RlLnZhbAoKICAgIGRlZiBpdGVyX25vZGVfcmV2ZXJzZShzZWxmKToKICAgICAgICBpZiBzZWxmLmxlbmd0aCA9PSAwOgogICAgICAgICAgICByZXR1cm4KICAgICAgICBjdXIgPSBzZWxmLnRhaWxub2RlKCkKICAgICAgICBmb3IgXyBpbiByYW5nZShzZWxmLmxlbmd0aCk6CiAgICAgICAgICAgIHlpZWxkIGN1cgogICAgICAgICAgICBjdXIgPSBjdXIucHJldgoKICAgIGRlZiBlbXB0eShzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5yb290Lm5leHQgaXMgc2VsZi5yb290CgogICAgZGVmIGFwcGVuZChzZWxmLCB2YWwpOiAgIyBPKDEpCiAgICAgICAgaWYgc2VsZi5tYXhzaXplIGlzIG5vdCBOb25lIGFuZCBzZWxmLmxlbmd0aCA9PSBzZWxmLm1heHNpemU6CiAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRnVsbCIpCiAgICAgICAgbm9kZSA9IE5vZGUodmFsKQogICAgICAgIHRhaWxub2RlID0gc2VsZi50YWlsbm9kZSgpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICB0YWlsbm9kZS5uZXh0ID0gbm9kZQogICAgICAgIG5vZGUubmV4dCA9IHNlbGYucm9vdAogICAgICAgIHNlbGYucm9vdC5wcmV2ID0gbm9kZQogICAgICAgIG5vZGUucHJldiA9IHRhaWxub2RlCjx8ZmltX2VuZHw+"]
["e7d23fea684e2f56fd745b38645167214e17bf7f-4","e7d23fea684e2f56fd745b38645167214e17bf7f","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc6dXRmLTgKIyBleGFtcGxlIDA1OiBjeWNsaWNfZG91YmxlX2xpbmtlZF9saXN0LnB5CgpjbGFzcyBOb2RlKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsPU5vbmUpOgogICAgICAgIHNlbGYudmFsID0gdmFsCiAgICAgICAgc2VsZi5wcmV2ID0gTm9uZQogICAgICAgIHNlbGYubmV4dCA9IE5vbmUKCgpjbGFzcyBDeWNsaWNEb3VibGVMaW5rZWRMaXN0KG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT1Ob25lKToKICAgICAgICBzZWxmLm1heHNpemUgPSBtYXhzaXplCiAgICAgICAgbm9kZSA9IE5vZGUoKQogICAgICAgIG5vZGUucHJldiA9IG5vZGUKICAgICAgICBub2RlLm5leHQgPSBub2RlCiAgICAgICAgc2VsZi5yb290ID0gbm9kZQogICAgICAgIHNlbGYubGVuZ3RoID0gMAoKICAgIGRlZiBfX2xlbl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmxlbmd0aAoKICAgIGRlZiBoZWFkbm9kZShzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5yb290Lm5leHQKCiAgICBkZWYgdGFpbG5vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYucm9vdC5wcmV2CgogICAgZGVmIGl0ZXJfbm9kZShzZWxmKToKICAgICAgICBpZiBzZWxmLmxlbmd0aCA9PSAwOgogICAgICAgICAgICByZXR1cm4KICAgICAgICBjdXIgPSBzZWxmLmhlYWRub2RlKCkKICAgICAgICBmb3IgXyBpbiByYW5nZShzZWxmLmxlbmd0aCk6CiAgICAgICAgICAgIHlpZWxkIGN1cgogICAgICAgICAgICBjdXIgPSBjdXIubmV4dAoKICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICBmb3Igbm9kZSBpbiBzZWxmLml0ZXJfbm9kZSgpOgogICAgICAgICAgICB5aWVsZCBub2RlLnZhbAoKICAgIGRlZiBpdGVyX25vZGVfcmV2ZXJzZShzZWxmKToKICAgICAgICBpZiBzZWxmLmxlbmd0aCA9PSAwOgogICAgICAgICAgICByZXR1cm4KICAgICAgICBjdXIgPSBzZWxmLnRhaWxub2RlKCkKICAgICAgICBmb3IgXyBpbiByYW5nZShzZWxmLmxlbmd0aCk6CiAgICAgICAgICAgIHlpZWxkIGN1cgogICAgICAgICAgICBjdXIgPSBjdXIucHJldgoKICAgIGRlZiBlbXB0eShzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5yb290Lm5leHQgaXMgc2VsZi5yb290CgogICAgZGVmIGFwcGVuZChzZWxmLCB2YWwpOiAgIyBPKDEpCiAgICAgICAgaWYgc2VsZi5tYXhzaXplIGlzIG5vdCBOb25lIGFuZCBzZWxmLmxlbmd0aCA9PSBzZWxmLm1heHNpemU6CiAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRnVsbCIpCiAgICAgICAgbm9kZSA9IE5vZGUodmFsKQogICAgICAgIHRhaWxub2RlID0gc2VsZi50YWlsbm9kZSgpCiAgICAgICAgdGFpbG5vZGUubmV4dCA9IG5vZGUKICAgICAgICBub2RlLm5leHQgPSBzZWxmLnJvb3QKICAgICAgICBzZWxmLnJvb3QucHJldiA9IG5vZGUKICAgICAgICBub2RlLnByZXYgPSB0YWlsbm9kZQogICAgICAgIHNlbGYubGVuZ3RoICs9IDEKCiAgICBkZWYgYXBwZW5kbGVmdChzZWxmLCB2YWwpOiAgIyBPKDEpCiAgICAgICAgaWYgc2VsZi5tYXhzaXplIGlzIG5vdCBOb25lIGFuZCBzZWxmLmxlbmd0aCA9PSBzZWxmLm1heHNpemU6CiAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRnVsbCIpCiAgICAgICAgbm9kZSA9IE5vZGUodmFsKQogICAgICAgIGlmIHNlbGYubGVuZ3RoID09IDA6CiAgICAgICAgICAgIHNlbGYucm9vdC5uZXh0ID0gbm9kZQogICAgICAgICAgICBub2RlLm5leHQgPSBzZWxmLnJvb3QKICAgICAgICAgICAgc2VsZi5yb290LnByZXYgPSBub2RlCiAgICAgICAgICAgIG5vZGUucHJldiA9IHNlbGYucm9vdAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG5vZGUucHJldiA9IHNlbGYucm9vdAogICAgICAgICAgICBub2RlLm5leHQgPSBzZWxmLnJvb3QubmV4dAogICAgICAgICAgICBzZWxmLnJvb3QubmV4dC5wcmV2ID0gbm9kZQogICAgICAgICAgICBzZWxmLnJvb3QubmV4dCA9IG5vZGUKICAgICAgICBzZWxmLmxlbmd0aCArPSAxCjx8ZmltX2hvbGV8PgogICAgICAgIHRhaWxub2RlID0gc2VsZi50YWlsbm9kZSgpCiAgICAgICAgdmFsID0gdGFpbG5vZGUudmFsCiAgICAgICAgdG1wX3RhaWxub2RlID0gdGFpbG5vZGUucHJldgogICAgICAgIHRtcF90YWlsbm9kZS5uZXh0ID0gc2VsZi5yb290CiAgICAgICAgc2VsZi5yb290LnByZXYgPSB0bXBfdGFpbG5vZGUKICAgICAgICBkZWwgdGFpbG5vZGUKICAgICAgICBzZWxmLmxlbmd0aCAtPSAxCiAgICAgICAgcmV0dXJuIHZhbAoKICAgIGRlZiBwb3BsZWZ0KHNlbGYpOiAgIyBPKDEpCiAgICAgICAgaWYgc2VsZi5sZW5ndGggPT0gMDoKICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJwb3AgZm9ybSBlbXB5dCBDeWNsaWMgRG91YmxlIExpbmtlZCBMaXN0IikKICAgICAgICBoZWFkbm9kZSA9IHNlbGYuaGVhZG5vZGUoKQogICAgICAgIHZhbCA9IGhlYWRub2RlLnZhbAogICAgICAgIGlmIHNlbGYubGVuZ3RoID09IDE6CiAgICAgICAgICAgIHNlbGYucm9vdC5uZXh0ID0gc2VsZi5yb290CiAgICAgICAgICAgIHNlbGYucm9vdC5wcmV2ID0gc2VsZi5yb290CiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5yb290Lm5leHQgPSBoZWFkbm9kZS5uZXh0CiAgICAgICAgICAgIGhlYWRub2RlLm5leHQucHJldiA9IHNlbGYucm9vdAogICAgICAgIGRlbCBoZWFkbm9kZQogICAgICAgIHNlbGYubGVuZ3RoIC09IDEKICAgICAgICByZXR1cm4gdmFsCgogICAgZGVmIGZpbmQoc2VsZiwgdmFsKTogICMgTyhuKQogICAgICAgIGZvciBpZHgsIG5vZGUgaW4gZW51bWVyYXRlKHNlbGYuaXRlcl9ub2RlKCkpOgogICAgICAgICAgICBpZiBub2RlLnZhbCA9PSB2YWw6CiAgICAgICAgICAgICAgICByZXR1cm4gaWR4CiAgICAgICAgcmV0dXJuIC0xCgogICAgZGVmIGluc2VydChzZWxmLCBwb3MsIHZhbCk6ICAjIE8obikKICAgICAgICBpZiBwb3MgPD0gMDoKICAgICAgICAgICAgc2VsZi5hcHBlbmRsZWZ0KHZhbCkKICAgICAgICBlbGlmIHNlbGYubGVuZ3RoIC0gMSA8IHBvczoKICAgICAgICAgICAgc2VsZi5hcHBlbmQodmFsKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG5vZGUgPSBOb2RlKHZhbCkKICAgICAgICAgICAgcHJlID0gc2VsZi5yb290CiAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKHBvcyk6CiAgICAgICAgICAgICAgICBwcmUgPSBwcmUubmV4dAogICAgICAgICAgICBub2RlLnByZXYgPSBwcmUKICAgICAgICAgICAgbm9kZS5uZXh0ID0gcHJlLm5leHQKICAgICAgICAgICAgbm9kZS5uZXh0LnByZXYgPSBub2RlCiAgICAgICAgICAgIHByZS5uZXh0ID0gbm9kZQogICAgICAgICAgICBzZWxmLmxlbmd0aCArPSAxCgogICAgZGVmIHJlbW92ZShzZWxmLCBub2RlKTogICMgTygxKSwgbm9kZSBpcyBub3QgdmFsdWUKICAgICAgICBpZiBub2RlIGlzIHNlbGYucm9vdDoKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgbm9kZS5wcmV2Lm5leHQgPSBub2RlLm5leHQKICAgICAgICBub2RlLm5leHQucHJldiA9IG5vZGUucHJldgogICAgICAgIHNlbGYubGVuZ3RoIC09IDEKICAgICAgICByZXR1cm4gbm9kZQoKICAgIGRlZiBjbGVhcihzZWxmKToKICAgICAgICBmb3Igbm9kZSBpbiBzZWxmLml0ZXJfbm9kZSgpOgogICAgICAgICAgICBkZWwgbm9kZQogICAgICAgIHNlbGYucm9vdC5uZXh0ID0gc2VsZi5yb290CiAgICAgICAgc2VsZi5yb290LnByZXYgPSBzZWxmLnJvb3QKICAgICAgICBzZWxmLmxlbmd0aCA9IDAKCgojIHVzZSBweXRlc3QKY2RsbCA9IEN5Y2xpY0RvdWJsZUxpbmtlZExpc3QoKQoKCmNsYXNzIFRlc3REb3VibGVMaW5rZWRMaXN0KG9iamVjdCk6CgogICAgZGVmIHRlc3RfYXBwZW5kKHNlbGYpOgogICAgICAgIGNkbGwuYXBwZW5kKDEpCiAgICAgICAgY2RsbC5hcHBlbmQoMikKICAgICAgICBjZGxsLmFwcGVuZCgzKQogICAgICAgIGFzc2VydCBbbm9kZS52YWwgZm9yIG5vZGUgaW4gY2RsbC5pdGVyX25vZGUoKV0gPT0gWzEsIDIsIDNdCiAgICAgICAgYXNzZXJ0IFtub2RlLnZhbCBmb3Igbm9kZSBpbiBjZGxsLml0ZXJfbm9kZV9yZXZlcnNlKCldID09IFszLCAyLCAxXQoKICAgIGRlZiB0ZXN0X2FwcGVuZGxlZnQoc2VsZik6CiAgICAgICAgY2RsbC5hcHBlbmRsZWZ0KDApCiAgICAgICAgYXNzZXJ0IGxpc3QoY2RsbCkgPT0gWzAsIDEsIDIsIDNdCgogICAgZGVmIHRlc3RfY3ljbGljKHNlbGYpOgogICAgICAgIGhlYWRub2RlID0gY2RsbC5oZWFkbm9kZSgpCiAgICAgICAgdGFpbG5vZGUgPSBjZGxsLnRhaWxub2RlKCkKICAgICAgICBhc3NlcnQgaGVhZG5vZGUucHJldi5wcmV2ID09IHRhaWxub2RlCiAgICAgICAgYXNzZXJ0IHRhaWxub2RlLm5leHQubmV4dCA9PSBoZWFkbm9kZQoKICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKICAgICAgICBhc3NlcnQgbGVuKGNkbGwpID09IDQKCiAgICBkZWYgdGVzdF9wb3Aoc2VsZik6CiAgICAgICAgdGFpbF92YWwgPSBjZGxsLnBvcCgpCiAgICAgICAgYXNzZXJ0IHRhaWxfdmFsID09IDMKCiAgICBkZWYgdGVzdF9wb3BsZWZ0KHNlbGYpOgogICAgICAgIGhlYWRfdmFsID0gY2RsbC5wb3BsZWZ0KCkKICAgICAgICBhc3NlcnQgaGVhZF92YWwgPT0gMAoKICAgIGRlZiB0ZXN0X2ZpbmQoc2VsZik6CiAgICAgICAgYXNzZXJ0IGNkbGwuZmluZCgyKSA9PSAxCiAgICAgICAgYXNzZXJ0IGNkbGwuZmluZCg0KSA9PSAtMQoKICAgIGRlZiB0ZXN0X2luc2VydChzZWxmKToKICAgICAgICBjZGxsLmluc2VydCgxLCA1KQogICAgICAgIGFzc2VydCBbbm9kZS52YWwgZm9yIG5vZGUgaW4gY2RsbC5pdGVyX25vZGUoKV0gPT0gWzEsIDUsIDJdCgogICAgZGVmIHRlc3RfcmVtb3ZlKHNlbGYpOgogICAgICAgIGhlYWRub2RlID0gY2RsbC5yb290Lm5leHQKICAgICAgICBub2RlID0gY2RsbC5yZW1vdmUoaGVhZG5vZGUpCiAgICAgICAgYXNzZXJ0IG5vZGUudmFsID09IDEKICAgICAgICBhc3NlcnQgW25vZGUudmFsIGZvciBub2RlIGluIGNkbGwuaXRlcl9ub2RlKCldID09IFs1LCAyXQoKICAgIGRlZiB0ZXN0X2NsZWFyX2FuZF9lbXB0eShzZWxmKToKICAgICAgICBjZGxsLmNsZWFyKCkKICAgICAgICBhc3NlcnQgY2RsbC5lbXB0eSgpIGlzIFRydWUKPHxmaW1fc3VmZml4fD4KCiAgICBkZWYgcG9wKHNlbGYpOiAgIyBPKDEpCiAgICAgICAgaWYgc2VsZi5sZW5ndGggPT0gMDoKICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJwb3AgZm9ybSBlbXB5dCBDeWNsaWMgRG91YmxlIExpbmtlZCBMaXN0IikKPHxmaW1fZW5kfD4="]
["20901ae0819be2d9073874799f082d57420b69a7-1","20901ae0819be2d9073874799f082d57420b69a7","PHxmaW1fcHJlZml4fD4KIyAqLSBjb2Rpbmc6IHV0Zi04IC0qLQppbXBvcnQganNvbgppbXBvcnQgdG9yY2gKaW1wb3J0IHRvcmNoLm5uIGFzIG5uCmltcG9ydCB0b3JjaC5ubi5mdW5jdGlvbmFsIGFzIEYKZnJvbSB0b3JjaC5hdXRvZ3JhZCBpbXBvcnQgVmFyaWFibGUKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gbmV0X3V0aWxzIGltcG9ydCBydW5fbHN0bQppbXBvcnQgbG9nZ2luZwoKY2xhc3MgU2VxMlNRTFN1YlNlcVByZWRpY3Rvcihubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIE5fd29yZCwgTl9oLCBOX2RlcHRoLCBtYXhfY29sX251bSwgbWF4X3Rva19udW0sIGdwdSwgc3RhcnRfZW5kX2luZGljZXM9KDAsMSkpOgogICAgICAgIHN1cGVyKFNlcTJTUUxTdWJTZXFQcmVkaWN0b3IsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICBsb2dnaW5nLmluZm8oIlNlcTJTUUwgc3Vic2VxdWVuY2UgcHJlZGljdGlvbiIpCiAgICAgICAgc2VsZi5OX2ggPSBOX2gKICAgICAgICBzZWxmLm1heF90b2tfbnVtID0gNDAwCiAgICAgICAgc2VsZi5tYXhfY29sX251bSA9IG1heF9jb2xfbnVtCiAgICAgICAgc2VsZi5ncHUgPSBncHUKCiAgICAgICAgc2VsZi5lbmNfbHN0bSA9IG5uLkxTVE0oaW5wdXRfc2l6ZT1OX3dvcmQsIGhpZGRlbl9zaXplPU5faC8yLAogICAgICAgICAgICAgICAgbnVtX2xheWVycz1OX2RlcHRoLCBiYXRjaF9maXJzdD1UcnVlLAogICAgICAgICAgICAgICAgZHJvcG91dD0wLjMsIGJpZGlyZWN0aW9uYWw9VHJ1ZSkKICAgICAgICBzZWxmLmRlY19sc3RtID0gbm4uTFNUTShpbnB1dF9zaXplPXNlbGYubWF4X3Rva19udW0sCiAgICAgICAgICAgICAgICBoaWRkZW5fc2l6ZT1OX2gsIG51bV9sYXllcnM9Tl9kZXB0aCwKICAgICAgICAgICAgICAgIGJhdGNoX2ZpcnN0PVRydWUsIGRyb3BvdXQ9MC4zKQoKICAgICAgICBzZWxmLnNlcV9vdXRfZyA9IG5uLkxpbmVhcihOX2gsIE5faCkgIyBnb2xkIHN0YW5kYXJkCiAgICAgICAgc2VsZi5zZXFfb3V0X2ggPSBubi5MaW5lYXIoTl9oLCBOX2gpICMgZm9yIHRoZSBoaWRkZW4gc3RhdGVzCiAgICAgICAgc2VsZi5zZXFfb3V0ID0gbm4uU2VxdWVudGlhbChubi5UYW5oKCksIG5uLkxpbmVhcihOX2gsIDEpKSAjIGp1c3Qgb25lIFNFUVVFTkNFIHRoYXQgd2UgYXJlIHByZWRpY3RpbmcgLSBlYWNoIHdvcmQgaXMgb25lIENIT0lDRQoKICAgICAgICBzZWxmLnNvZnRtYXggPSBubi5Tb2Z0bWF4KCkgIyBnZXQgdGhlIHByb2JhYmlsaXR5IGRpc3RyaWJ1dGlvbgogICAgICAgIHNlbGYuc3RhcnRfZW5kX2luZGljZXMgPSBzdGFydF9lbmRfaW5kaWNlcwoKCiAgICBkZWYgZ2VuX2d0X2JhdGNoKHNlbGYsIHRva19zZXEsIGdlbl9pbnA9VHJ1ZSk6CiAgICAgICAgIyBJZiBnZW5faW5wOiBnZW5lcmF0ZSB0aGUgaW5wdXQgdG9rZW4gc2VxdWVuY2UgKHJlbW92aW5nIDxFTkQ+KQogICAgICAgICMgT3RoZXJ3aXNlOiBnZW5lcmF0ZSB0aGUgb3V0cHV0IHRva2VuIHNlcXVlbmNlIChyZW1vdmluZyA8QkVHPikKICAgICAgICAjIHByaW50ICgndG9rX3NlcScsIHRva19zZXEpCiAgICAgICAgbG9nZ2luZy5pbmZvKCdtZXRob2Qgc3Vic2VxdWVuY2VfcHJlZCBnZW5fZ3RfYmF0Y2gnKQogICAgICAgIEIgPSBsZW4odG9rX3NlcSkKICAgICAgICByZXRfbGVuID0gbnAuYXJyYXkoW2xlbihvbmVfdG9rX3NlcSktMSBmb3Igb25lX3Rva19zZXEgaW4gdG9rX3NlcV0pCiAgICAgICAgbWF4X2xlbiA9IG1heChyZXRfbGVuKQogICAgICAgIHJldF9hcnJheSA9IG5wLnplcm9zKChCLCBtYXhfbGVuLCBzZWxmLm1heF90b2tfbnVtKSwgZHR5cGU9bnAuZmxvYXQzMikKICAgICAgICBmb3IgYiwgb25lX3Rva19zZXEgaW4gZW51bWVyYXRlKHRva19zZXEpOgogICAgICAgICAgICAjIHByaW50KCdvbmVfdG9rX3NlcScsIG9uZV90b2tfc2VxKQogICAgICAgICAgICBvdXRfb25lX3Rva19zZXEgPSBvbmVfdG9rX3NlcVs6LTFdIGlmIGdlbl9pbnAgZWxzZSBvbmVfdG9rX3NlcVsxOl0KICAgICAgICAgICAgIyBsb2dnaW5nLndhcm5pbmcoJ2dlbmVyYXRlZF9ndF9zZWxfZGVjb2Rlcl9zZXEgezB9Jy5mb3JtYXQob3V0X29uZV90b2tfc2VxKSkKICAgICAgICAgICAgIyBwcmludCAoJ291dF9vbmVfdG9rX3NlcScsIG91dF9vbmVfdG9rX3NlcSkKICAgICAgICAgICAgZm9yIHQsIHRva19pZCBpbiBlbnVtZXJhdGUob3V0X29uZV90b2tfc2VxKToKICAgICAgICAgICAgICAgIHJldF9hcnJheVtiLCB0LCB0b2tfaWRdID0gMQogICAgICAgIHJldF9pbnAgPSB0b3JjaC5mcm9tX251bXB5KHJldF9hcnJheSkKICAgICAgICBpZiBzZWxmLmdwdToKICAgICAgICAgICAgcmV0X2lucCA9IHJldF9pbnAuY3VkYSgpCiAgICAgICAgcmV0X2lucF92YXIgPSBWYXJpYWJsZShyZXRfaW5wKSAjW0IsIG1heF9sZW4sIG1heF90b2tfbnVtXQogICAgICAgICMgcHJpbnQoJ3JldF9pbnBfdmFyJywgcmV0X2lucF92YXIpCiAgICAgICAgIyBwcmludCgncmV0X2lucF92YXIuc2l6ZSgpJywgcmV0X2lucF92YXIuc2l6ZSgpKQogICAgICAgIHJldHVybiByZXRfaW5wX3ZhciwgcmV0X2xlbgoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHhfZW1iX3ZhciwgeF9sZW4sIGNvbF9pbnBfdmFyLCBjb2xfbmFtZV9sZW4sIGNvbF9sZW4sCiAgICAgICAgICAgIGNvbF9udW0sIGd0X2luZGV4X3NlcT1Ob25lLCBndF9xdWVyeT1Ob25lLCByZWluZm9yY2U9Tm9uZSk6ICMgY2hlY2sgd2hhdCBpcyBndF9xdWVyeQogICAgICAgIGxvZ2dpbmcuaW5mbygnbWV0aG9kIHN1YnNlcXVlbmNlX3ByZWQgZm9yd2FyZCcpCiAgICAgICAgbWF4X3hfbGVuID0gbWF4KHhfbGVuKQogICAgICAgICMgcHJpbnQgKCdtYXhfeF9sZW4nLCBtYXhfeF9sZW4pCiAgICAgICAgQiA9IGxlbih4X2xlbikKCiAgICAgICAgaF9lbmMsIGhpZGRlbiA9IHJ1bl9sc3RtKHNlbGYuZW5jX2xzdG0sIHhfZW1iX3ZhciwgeF9sZW4pCiAgICAgICAgIyBwcmludCgnaF9lbmMuc2l6ZSgpJywgaF9lbmMuc2l6ZSgpKQogICAgICAgIAogICAgICAgIGRlY29kZXJfaGlkZGVuID0gdHVwbGUodG9yY2guY2F0KChoaWRbOjJdLCBoaWRbMjpdKSxkaW09MikgCiAgICAgICAgICAgICAgICBmb3IgaGlkIGluIGhpZGRlbikgCiAgICAgICAgIyBwcmludCgnZGVjb2Rlcl9oaWRkZW5bMF0uc2l6ZSgpJywgZGVjb2Rlcl9oaWRkZW5bMF0uc2l6ZSgpKQogICAgICAgICMgcHJpbnQoJ2RlY29kZXJfaGlkZGVuWzFdLnNpemUoKScsIGRlY29kZXJfaGlkZGVuWzFdLnNpemUoKSkKICAgICAgICBpZiBndF9pbmRleF9zZXEgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnZ29sZCBzZXF1ZW5jZSBwcm92aWRlZCcpCiAgICAgICAgICAgICMgbG9nZ2luZy5pbmZvKCdndF9zZWxfZ3RfaW5kZXhfc2VxIHswfScuZm9ybWF0KGd0X2luZGV4X3NlcSkpCiAgICAgICAgICAgIGd0X3Rva19zZXEsIGd0X3Rva19sZW4gPSBzZWxmLmdlbl9ndF9iYXRjaChndF9pbmRleF9zZXEsIGdlbl9pbnA9VHJ1ZSkgIyBnZXQgcmlkIG9mIDxTRUxFQ1Q+CiAgICAgICAgICAgICMgcHJpbnQoJ2d0X2luZGV4X3NlcScsIGd0X3Rva19zZXEpCiAgICAgICAgICAgICMgZ3RfdG9rX3NlcTogU0VMRUNUX2luZGV4IGFnZ19pbmRleCAsIGNvbF9pbmRleCAuLi4gbGFzdF9jb2xfaW5kZXgKICAgICAgICAgICAgIyBwcmludCgnZ3RfdG9rX3NlcS5zaXplKCknLCBndF90b2tfc2VxLnNpemUoKSkKICAgICAgICAgICAgIyBwcmludCAoJ2d0X3Rva19zZXEnLCBndF90b2tfc2VxKQogICAgICAgICAgICAjIHByaW50KCdndF90b2tfbGVuJywgZ3RfdG9rX2xlbikKICAgICAgICAgICAgIyBwcmludCgnZGVjb2Rlcl9oaWRkZW4nLCBkZWNvZGVyX2hpZGRlbikKICAgICAgICAgICAgZ19zLCBfID0gcnVuX2xzdG0oc2VsZi5kZWNfbHN0bSwgZ3RfdG9rX3NlcSwgZ3RfdG9rX2xlbiwgZGVjb2Rlcl9oaWRkZW4pCiAgICAgICAgICAgICMgbG9nZ2luZy5pbmZvKCdwcmVkX3NlbF9kZWNvZGVyX3NlcSB7MH0nLmZvcm1hdChnX3MpKQogICAgICAgICAgICAjIHByaW50KCdnX3Muc2l6ZSgpJywgZ19zLnNpemUoKSkKCiAgICAgICAgICAgIGhfZW5jX2V4cGFuZCA9IGhfZW5jLnVuc3F1ZWV6ZSgxKQogICAgICAgICAgICBnX3NfZXhwYW5kID0gZ19zLnVuc3F1ZWV6ZSgyKQoKICAgICAgICAgICAgc2VxX3Njb3JlID0gc2VsZi5zZXFfb3V0KCBzZWxmLnNlcV9vdXRfaChoX2VuY19leHBhbmQpICsKICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcV9vdXRfZyhnX3NfZXhwYW5kKSApLnNxdWVlemUoKQogICAgICAgICAgICBpZiBsZW4oc2VxX3Njb3JlLnNpemUoKSkgPT0gMjoKICAgICAgICAgICAgICAgIHNlcV9zY29yZSA9IHNlcV9zY29yZS51bnNxdWVlemUoMSkKICAgICAgICAgICAgICAgICMgbG9nZ2luZy5pbmZvKCduZXcgc2VxX3Njb3JlLnNpemUoKSB7MH0nLmZvcm1hdChzZXFfc2NvcmUuc2l6ZSgpKSkKICAgICAgICAgICAgIyBwcmludCgnc2VxX3Njb3JlLnNpemUoKScsIHNlcV9zY29yZS5zaXplKCkpCiAgICAgICAgICAgIGZvciBpZHgsIG51bSBpbiBlbnVtZXJhdGUoeF9sZW4pOgogICAgICAgICAgICAgICAgaWYgbnVtIDwgbWF4X3hfbGVuIGFuZCBsZW4oc2VxX3Njb3JlLnNpemUoKSkgPiAyOgogICAgICAgICAgICAgICAgICAgIHNlcV9zY29yZVtpZHgsIDosIG51bTpdID0gLTEwMCAjIG1ha2Ugc3VyZSB0aGUgcGFkZGVkIG51bWJlcnMgaGF2ZSB+MCBwcm9iYWIKICAgICAgICAgICAgICAgIGVsaWYgbnVtIDwgbWF4X3hfbGVuOgogICAgICAgICAgICAgICAgICAgICBzZXFfc2NvcmVbaWR4LCBudW06XSA9IC0xMDAKICAgICAgICBlbHNlOgogICAgICAgICAgICBsb2dnaW5nLmluZm8oJ2dvbGQgc2VxdWVuY2Ugbm90IHByb3ZpZGVkJykKICAgICAgICAgICAgaF9lbmNfZXhwYW5kID0gaF9lbmMudW5zcXVlZXplKDEpCiAgICAgICAgICAgIHNjb3JlcyA9IFtdCiAgICAgICAgICAgIGNob2ljZXMgPSBbXQogICAgICAgICAgICBkb25lX3NldCA9IHNldCgpCgogICAgICAgICAgICB0ID0gMAogICAgICAgICAgICBpbml0X2lucCA9IG5wLnplcm9zKChCLCAxLCBzZWxmLm1heF90b2tfbnVtKSwgZHR5cGU9bnAuZmxvYXQzMikgIyBpbml0aWFsaXplIGlucHV0IGJlY2F1c2Ugbm8gZ29sZGVuIHRvIHBhc3MgaW4KICAgICAgICAgICAgIyBwcmludCAoJ3NlbGYubWF4X3Rva19udW0nLCBzZWxmLm1heF90b2tfbnVtKQogICAgICAgICAgICBpbml0X2lucFs6LDAsc2VsZi5zdGFydF9lbmRfaW5kaWNlc1swXV0gPSAxICAgI1NldCB0aGUgU0VMRUNUIHRva2VuIC0gdGhpcyBuZWVkcyB0byBjaGFuZ2UgLSB3aWxsIG5lZWQgdG8gcGFzcyBpbiBhcyBhIHBhcmFtZXRlciB3aGVuIEkgZXh0ZW5kIGZvciBvdGhlciB0aGluZ3MKICAgICAgICAgICAgIyAyID0gaW5kZXggb2YgU0VMRUNUCiAgICAgICAgICAgICMgZmlyc3QgaW5wdXQKICAgICAgICAgICAgI1JOTiA8PT4gdXBkYXRlIGN1cl9pbnAgZWFjaCB0aW1lLCBwYXNzIGhpZGRlbiBhbmQgdXBkYXRlIGl0ISAKICAgICAgICAgICAgaWYgc2VsZi5ncHU6CiAgICAgICAgICAgICAgICBjdXJfaW5wID0gVmFyaWFibGUodG9yY2guZnJvbV9udW1weShpbml0X2lucCkuY3VkYSgpKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgY3VyX2lucCA9IFZhcmlhYmxlKHRvcmNoLmZyb21fbnVtcHkoaW5pdF9pbnApKSAKICAgICAgICAgICAgY3VyX2ggPSBkZWNvZGVyX2hpZGRlbgogICAgICAgICAgICB3aGlsZSBsZW4oZG9uZV9zZXQpIDwgQiBhbmQgdCA8IDEwMDoKICAgICAgICAgICAgICAgIGdfcywgY3VyX2ggPSBzZWxmLmRlY19sc3RtKGN1cl9pbnAsIGN1cl9oKQogICAgICAgICAgICAgICAgIyBwcmludCgnZ19zLnNpemUoKScsIGdfcy5zaXplKCkpCiAgICAgICAgICAgICAgICBnX3NfZXhwYW5kID0gZ19zLnVuc3F1ZWV6ZSgyKQoKICAgICAgICAgICAgICAgIGN1cl9zZXFfc2NvcmUgPSBzZWxmLnNlcV9vdXQoc2VsZi5zZXFfb3V0X2goaF9lbmNfZXhwYW5kKSArCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VxX291dF9nKGdfc19leHBhbmQpKS5zcXVlZXplKCkKICAgICAgICAgICAgICAgICMgcHJpbnQoJ2N1cl9zZXFfc2NvcmUuc2l6ZSgpJywgY3VyX3NlcV9zY29yZS5zaXplKCkpCiAgICAgICAgICAgICAgICBmb3IgYiwgbnVtIGluIGVudW1lcmF0ZSh4X2xlbik6CiAgICAgICAgICAgICAgICAgICAgaWYgbnVtIDwgbWF4X3hfbGVuOgogICAgICAgICAgICAgICAgICAgICAgICBjdXJfc2VxX3Njb3JlW2IsIG51bTpdID0gLTEwMAogICAgICAgICAgICAgICAgc2NvcmVzLmFwcGVuZChjdXJfc2VxX3Njb3JlKSAjIHNjb3JlIGZvciB0aGlzIHBhcnRpY3VsYXIgd29yZAoKICAgICAgICAgICAgICAgIGlmIG5vdCByZWluZm9yY2U6CiAgICAgICAgICAgICAgICAgICAgXywgYW5zX3Rva192YXIgPSBjdXJfc2VxX3Njb3JlLnZpZXcoQiwgbWF4X3hfbGVuKS5tYXgoMSkKICAgICAgICAgICAgICAgICAgICBhbnNfdG9rX3ZhciA9IGFuc190b2tfdmFyLnVuc3F1ZWV6ZSgxKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBhbnNfdG9rX3ZhciA9IHNlbGYuc29mdG1heChjdXJfc2VxX3Njb3JlKS5tdWx0aW5vbWlhbCgpICMgZ2V0IHRoZSBwcm9iYWJpbGl0eSBkaXN0cmlidXRpb24gZm9yIHRoZSBzY29yZXMKICAgICAgICAgICAgICAgICAgICBjaG9pY2VzLmFwcGVuZChhbnNfdG9rX3ZhcikgIyBsaXN0IG9mIHRoZSBkaWZmZXJlbnQgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9ucwogICAgICAgICAgICAgICAgYW5zX3RvayA9IGFuc190b2tfdmFyLmRhdGEuY3B1KCkKICAgICAgICAgICAgICAgIGlmIHNlbGYuZ3B1OiAgI1RvIG9uZS1ob3QKICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ2Fuc190b2suc2l6ZSgpOiB7MH0nLmZvcm1hdChhbnNfdG9rLnNpemUoKSkpCiAgICAgICAgICAgICAgICAgICAgY3VyX2lucCA9IFZhcmlhYmxlKHRvcmNoLnplcm9zKEIsIHNlbGYubWF4X3Rva19udW0pLnNjYXR0ZXJfKDEsIGFuc190b2ssIDEpLmN1ZGEoKSkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgY3VyX2lucCA9IFZhcmlhYmxlKHRvcmNoLnplcm9zKAogICAgICAgICAgICAgICAgICAgICAgICBCLCBzZWxmLm1heF90b2tfbnVtKS5zY2F0dGVyXygxLCBhbnNfdG9rLCAxKSkKICAgICAgICAgICAgICAgIGN1cl9pbnAgPSBjdXJfaW5wLnVuc3F1ZWV6ZSgxKQogICAgICAgICAgICAgICAgIyBwcmludCgnYW5zX3Rvay5zcXVlZXplKCknLCBhbnNfdG9rLnNxdWVlemUoKSkKICAgICAgICAgICAgICAgIGZvciBpZHgsIHRvayBpbiBlbnVtZXJhdGUoYW5zX3Rvay5zcXVlZXplKCkpOgogICAgICAgICAgICAgICAgICAgIGlmIHRvayA9PSBzZWxmLnN0YXJ0X2VuZF9pbmRpY2VzWzFdOiAgI0ZpbmQgdGhlIDxFTkQ+IHRva2VuCiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVfc2V0LmFkZChpZHgpICMgaW5kZXggb2YgdGhlIHRoZSA8RU5EPiB0b2tlbiBmb3IgdGhpcyBzZXF1ZW5jZSA9PiB0aGlzIG11Y2ggY2xvc2VyIHRvIGZpbmlzaGluZyEKICAgICAgICAgICAgICAgIHQgKz0gMQoKICAgICAgICAgICAgc2VxX3Njb3JlID0gdG9yY2guc3RhY2soc2NvcmVzLCAxKQogICAgICAgICAgICAjIGxvZ2dpbmcud2FybmluZygnc2VxX3Njb3JlLnNpemUoKSIgezB9Jy5mb3JtYXQoc2VxX3Njb3JlLnNpemUoKSkpCgogICAgICAgIGlmIHJlaW5mb3JjZToKICAgICAgICAgICAgcmV0dXJuIHNlcV9zY29yZSwgY2hvaWNlcwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBzZXFfc2NvcmUKCgogICAgIyBkZWYgZm9yd2FyZChzZWxmLCB4X2VtYl92YXIsIHhfbGVuLCBjb2xfaW5wX3ZhciwgY29sX25hbWVfbGVuLCBjb2xfbGVuLAogICAgIyAgICAgICAgIGNvbF9udW0sIGd0X3doZXJlLCBndF9xdWVyeSwgcmVpbmZvcmNlKToKICAgICMgICAgIG1heF94X2xlbiA9IG1heCh4X2xlbikKICAgICMgICAgIEIgPSBsZW4oeF9sZW4pCgogICAgIyAgICAgaF9lbmMsIGhpZGRlbiA9IHJ1bl9sc3RtKHNlbGYuZW5jX2xzdG0sIHhfZW1iX3ZhciwgeF9sZW4pCiAgICAjICAgICBkZWNvZGVyX2hpZGRlbiA9IHR1cGxlKHRvcmNoLmNhdCgoaGlkWzoyXSwgaGlkWzI6XSksZGltPTIpIAogICAgIyAgICAgICAgICAgICBmb3IgaGlkIGluIGhpZGRlbikKICAgICMgICAgIGlmIGd0X3doZXJlIGlzIG5vdCBOb25lOgogICAgIyAgICAgICAgIGd0X3Rva19zZXEsIGd0X3Rva19sZW4gPSBzZWxmLmdlbl9ndF9iYXRjaChndF93aGVyZSwgZ2VuX2lucD1UcnVlKQogICAgIyAgICAgICAgIGdfcywgXyA9IHJ1bl9sc3RtKHNlbGYuY29uZF9kZWNvZGVyLAogICAgIyAgICAgICAgICAgICAgICAgZ3RfdG9rX3NlcSwgZ3RfdG9rX2xlbiwgZGVjb2Rlcl9oaWRkZW4pCgogICAgIyAgICAgICAgIGhfZW5jX2V4cGFuZCA9IGhfZW5jLnVuc3F1ZWV6ZSgxKQogICAgIyAgICAgICAgIGdfc19leHBhbmQgPSBnX3MudW5zcXVlZXplKDIpCiAgICAjICAgICAgICAgIwogICAgIyAgICAgICAgIGNvbmRfc2NvcmUgPSBzZWxmLmNvbmRfb3V0KCBzZWxmLmNvbmRfb3V0X2goaF9lbmNfZXhwYW5kKSArCiAgICAjICAgICAgICAgICAgICAgICBzZWxmLmNvbmRfb3V0X2coZ19zX2V4cGFuZCkgKS5zcXVlZXplKCkKICAgICMgICAgICAgICBmb3IgaWR4LCBudW0gaW4gZW51bWVyYXRlKHhfbGVuKToKICAgICMgICAgICAgICAgICAgaWYgbnVtIDwgbWF4X3hfbGVuOgogICAgIyAgICAgICAgICAgICAgICAgY29uZF9zY29yZVtpZHgsIDosIG51bTpdID0gLTEwMAogICAgIyAgICAgZWxzZToKICAgICMgICAgICAgICBoX2VuY19leHBhbmQgPSBoX2VuYy51bnNxdWVlemUoMSkKICAgICMgICAgICAgICBzY29yZXMgPSBbXQogICAgIyAgICAgICAgIGNob2ljZXMgPSBbXQogICAgIyAgICAgICAgIGRvbmVfc2V0ID0gc2V0KCkKCiAgICAjICAgICAgICAgdCA9IDAKICAgICMgICAgICAgICBpbml0X2lucCA9IG5wLnplcm9zKChCLCAxLCBzZWxmLm1heF90b2tfbnVtKSwgZHR5cGU9bnAuZmxvYXQzMikKICAgICMgICAgICAgICBpbml0X2lucFs6LDAsN10gPSAxICAgI1NldCB0aGUgPEJFRz4gdG9rZW4gLSB0aGlzIG5lZWRzIHRvIGNoYW5nZQogICAgIyAgICAgICAgIGlmIHNlbGYuZ3B1Ogo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAjICAgICAgICAgICAgIGN1cl9pbnAgPSBWYXJpYWJsZSh0b3JjaC5mcm9tX251bXB5KGluaXRfaW5wKS5jdWRhKCkpCiAgICAjICAgICAgICAgZWxzZToKICAgICMgICAgICAgICAgICAgY3VyX2lucCA9IFZhcmlhYmxlKHRvcmNoLmZyb21fbnVtcHkoaW5pdF9pbnApKQogICAgIyAgICAgICAgIGN1cl9oID0gZGVjb2Rlcl9oaWRkZW4KPHxmaW1fZW5kfD4="]
["2e706cb28788e2d4f33efed622d40c885d389673-1","2e706cb28788e2d4f33efed622d40c885d389673","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCmltcG9ydCB0b3JjaC5ubiBhcyBubgoKY2xhc3MgSW5wdXRSTk4odG9yY2gubm4uTW9kdWxlKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgcm5uX2NlbGw9Tm9uZSwgaW5wdXRfZnVuPU5vbmUpOgogICAgICAgIHN1cGVyKElucHV0Uk5OLCBzZWxmKS5fX2luaXRfXygpCgogICAgICAgIHNlbGYucm5uX2NlbGwgPSBybm5fY2VsbAogICAgICAgIHNlbGYuaW5wdXRfZnVuID0gaW5wdXRfZnVuCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeCwgaHg9Tm9uZSk6CgogICAgICAgIGlmIHNlbGYuaW5wdXRfZnVuIGlzIG5vdCBOb25lOgogICAgICAgICAgICB4ID0gc2VsZi5pbnB1dF9mdW4uZm9yd2FyZCh4KQogICAgICAgIGlmIHNlbGYucm5uX2NlbGwgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHggPSBzZWxmLnJubl9jZWxsLmZvcndhcmQoeCkKICAgICAgICAgICAgaHggPSB4CgogICAgICAgIHJldHVybiB4LCBoeAoKY2xhc3MgQ29udk5vbmxpbmVhcihubi5Nb2R1bGUpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnB1dF9zaXplLCBmZWF0dXJlcywgY29udl9kaW0sIGtlcm5lbF9zaXplLCBkaWxhdGlvbiwgYmlhcywgbm9ubGluZWFyPSdyZWx1Jyk6CiAgICAgICAgc3VwZXIoQ29udk5vbmxpbmVhciwgc2VsZikuX19pbml0X18oKQoKICAgICAgICBzZWxmLmlucHV0X3NpemUgPSBpbnB1dF9zaXplCiAgICAgICAgc2VsZi5mZWF0dXJlcyA9IGZlYXR1cmVzCiAgICAgICAgc2VsZi5iaWFzID0gYmlhcwogICAgICAgIHNlbGYuY29udl9kaW0gPSBjb252X2RpbQogICAgICAgIHNlbGYuY29udl9jbGFzcyA9IHNlbGYuZGV0ZXJtaW5lX2NvbnZfY2xhc3MoY29udl9kaW0pCiAgICAgICAgaWYgbm9ubGluZWFyIGlzIG5vdCBOb25lIGFuZCBub25saW5lYXIudXBwZXIoKSA9PSAnUkVMVSc6CiAgICAgICAgICAgIHNlbGYubm9ubGluZWFyID0gdG9yY2gubm4uUmVMVSgpCiAgICAgICAgZWxpZiBub25saW5lYXIgaXMgTm9uZToKICAgICAgICAgICAgc2VsZi5ub25saW5lYXIgPSBsYW1iZGEgeDogeAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIFZhbHVlRXJyb3IoJ1BsZWFzZSBzcGVjaWZ5IGEgcHJvcGVyJykKCiAgICAgICAgc2VsZi5wYWRkaW5nID0gW3RvcmNoLm5uLlJlcGxpY2F0aW9uUGFkMWQoZGlsYXRpb24gKiAoa2VybmVsX3NpemUtMSkgLy8gMiksCiAgICAgICAgICAgICAgICAgICAgICAgIHRvcmNoLm5uLlJlcGxpY2F0aW9uUGFkMmQoZGlsYXRpb24gKiAoa2VybmVsX3NpemUtMSkgLy8gMiksCiAgICAgICAgICAgICAgICAgICAgICAgIHRvcmNoLm5uLlJlcGxpY2F0aW9uUGFkM2QoZGlsYXRpb24gKiAoa2VybmVsX3NpemUgLSAxKSAvLyAyKV1bY29udl9kaW0tMV0KICAgICAgICBzZWxmLmNvbnZfbGF5ZXIgPSAgc2VsZi5jb252X2NsYXNzKGluX2NoYW5uZWxzPWlucHV0X3NpemUsIG91dF9jaGFubmVscz1mZWF0dXJlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWxfc2l6ZT1rZXJuZWxfc2l6ZSwgcGFkZGluZz0wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpbGF0aW9uPWRpbGF0aW9uLCBiaWFzPWJpYXMpCgogICAgICAgIHNlbGYucmVzZXRfcGFyYW1ldGVycygpCgogICAgZGVmIHJlc2V0X3BhcmFtZXRlcnMoc2VsZik6CiAgICAgICAgdG9yY2gubm4uaW5pdC5rYWltaW5nX25vcm1hbF8oc2VsZi5jb252X2xheWVyLndlaWdodCwgbm9ubGluZWFyaXR5PSdyZWx1JykKCiAgICAgICAgaWYgc2VsZi5jb252X2xheWVyLmJpYXMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIG5uLmluaXQuemVyb3NfKHNlbGYuY29udl9sYXllci5iaWFzKQoKICAgIGRlZiBkZXRlcm1pbmVfY29udl9jbGFzcyhzZWxmLCBuX2RpbSk6CgogICAgICAgIGlmIG5fZGltIGlzIDE6CiAgICAgICAgICAgIHJldHVybiBubi5Db252MWQKICAgICAgICBlbGlmIG5fZGltIGlzIDI6CiAgICAgICAgICAgIHJldHVybiBubi5Db252MmQKICAgICAgICBlbGlmIG5fZGltIGlzIDM6CiAgICAgICAgICAgIHJldHVybiBubi5Db252M2QKICAgICAgICBlbHNlOgogICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yKCJObyBjb252b2x1dGlvbiBvZiB0aGlzIGRpbWVuc2lvbmFsaXR5IGltcGxlbWVudGVkIikKCiAgICBkZWYgZXh0cmFfcmVwcihzZWxmKToKICAgICAgICBzID0gJ3tpbnB1dF9zaXplfSwge2ZlYXR1cmVzfScKICAgICAgICBpZiAnYmlhcycgaW4gc2VsZi5fX2RpY3RfXyBhbmQgc2VsZi5iaWFzIGlzIG5vdCBUcnVlOgogICAgICAgICAgICBzICs9ICcsIGJpYXM9e2JpYXN9JwogICAgICAgIGlmICdub25saW5lYXInIGluIHNlbGYuX19kaWN0X18gYW5kIHNlbGYubm9ubGluZWFyICE9ICJ0YW5oIjoKICAgICAgICAgICAgcyArPSAnLCBub25saW5lYXJpdHk9e25vbmxpbmVhcn0nCiAgICAgICAgcmV0dXJuIHMuZm9ybWF0KCoqc2VsZi5fX2RpY3RfXykKCiAgICBkZWYgY2hlY2tfZm9yd2FyZF9pbnB1dChzZWxmLCBpbnB1dCk6CiAgICAgICAgaWYgaW5wdXQuc2l6ZSgxKSAhPSBzZWxmLmlucHV0X3NpemU6CiAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKICAgICAgICAgICAgICAgICJpbnB1dCBoYXMgaW5jb25zaXN0ZW50IGlucHV0X3NpemU6IGdvdCB7fSwgZXhwZWN0ZWQge30iLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICBpbnB1dC5zaXplKDEpLCBzZWxmLmlucHV0X3NpemUpKQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIGlucHV0KToKICAgICAgICByZXR1cm4gc2VsZi5ub25saW5lYXIoc2VsZi5jb252X2xheWVyKHNlbGYucGFkZGluZyhpbnB1dCkpKQoKCmNsYXNzIENvbnZSTk5DZWxsQmFzZShubi5Nb2R1bGUpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGlucHV0X3NpemUsIGhpZGRlbl9zaXplLCBudW1fY2h1bmtzLCBjb252X2RpbSwga2VybmVsX3NpemUsCiAgICAgICAgICAgICAgICBkaWxhdGlvbiwgYmlhcyk6CiAgICAgICAgc3VwZXIoQ29udlJOTkNlbGxCYXNlLCBzZWxmKS5fX2luaXRfXygpCjx8ZmltX2VuZHw+"]
["e71cd1255fa884951db5e4d608d7aa1629106fb0-1","e71cd1255fa884951db5e4d608d7aa1629106fb0","PHxmaW1fcHJlZml4fD4KZnJvbSBodHRwLnNlcnZlciBpbXBvcnQgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcgppbXBvcnQganNvbgppbXBvcnQgcmFuZG9tIGFzIHJhbmQKZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybHBhcnNlLCBwYXJzZV9xcwoKY2xhc3MgaGFuZGxlcihCYXNlSFRUUFJlcXVlc3RIYW5kbGVyKToKICAgIAogICAgZGVmIG5hbWVfZ2VuKHNlbGYsIGtleSk6CiAgICAgICAgICBrZXkgPSBrZXkubG93ZXIoKQogICAgICAgICAgaWYga2V5ID09ICdtYWxlJzoKICAgICAgICAgICAgZmlyc3RfbmFtZXMgPSAnYXBpL21hbGVfZmlyc3RfbmFtZXMudHh0JwogICAgICAgICAgZWxpZiBrZXkgPT0gJ2ZlbWFsZSc6CiAgICAgICAgICAgIGZpcnN0X25hbWVzID0gJ2FwaS9mZW1hbGVfZmlyc3RfbmFtZXMudHh0JwogICAgICAgICAgICAKICAgICAgICAgIGxhc3RfbmFtZXMgPSAnYXBpL2xhc3RfbmFtZXMudHh0JwoKICAgICAgICAgIGYgPSBvcGVuKHN0cihmaXJzdF9uYW1lcyksICJyIikKICAgICAgICAgIGZpcnN0X25hbWVzID0gZi5yZWFkKCkuc3BsaXQoKQoKICAgICAgICAgIGYgPSBvcGVuKHN0cihsYXN0X25hbWVzKSwgInIiKQogICAgICAgICAgbGFzdF9uYW1lcyA9IGYucmVhZCgpLnNwbGl0KCkKCiAgICAgICAgICBmaXJzdF9uYW1lc19zaXplID0gbGVuKGZpcnN0X25hbWVzKQogICAgICAgICAgbGFzdF9uYW1lc19zaXplID0gbGVuKGxhc3RfbmFtZXMpCiAgICAgICAgICBmaXJzdF9pbmRleCA9IHJhbmQucmFuZGludCgwLCBmaXJzdF9uYW1lc19zaXplKQogICAgICAgICAgbGFzdF9pbmRleCA9IHJhbmQucmFuZGludCgwLCBsYXN0X25hbWVzX3NpemUpCgogICAgICAgICAgbmFtZSA9IGZpcnN0X25hbWVzW2ZpcnN0X2luZGV4XSsiICIrbGFzdF9uYW1lc1tsYXN0X2luZGV4XQogICAgICAgICAgb3V0cHV0ID0ge2tleTpuYW1lfQoKICAgICAgICAgIGpzb25fdmFsdWUgPSBqc29uLmR1bXBzKG91dHB1dCwgZW5zdXJlX2FzY2lpID0gRmFsc2UpCiAgICAgICAgICByZXR1cm4ganNvbl92YWx1ZQogICAgCiAgICBkZWYgZG9fR0VUKHNlbGYpOgogICAgICAgIHMgPSBzZWxmLnBhdGgKICAgICAgICBnZW4gPSBwYXJzZV9xcyh1cmxwYXJzZShzKS5xdWVyeSlbJ2dlbmRlciddWzBdCiAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkKICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdDb250ZW50LXR5cGUnLCdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04JykKICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLCAnKicpCiAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCiAgICAgICAgb3V0cHV0ID0gc2VsZi5uYW1lX2dlbihnZW4pCiAgICAgICAganNvbl92YWx1ZSA9IGpzb24uZHVtcHMob3V0cHV0LCBlbnN1cmVfYXNjaWkgPSBGYWxzZSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJlc3VsdCA9IGpzb24ubG9hZHMoanNvbl92YWx1ZSkKICAgICAgICBzZWxmLndmaWxlLndyaXRlKHJlc3VsdC5lbmNvZGUoJ3V0ZjgnKSkKICAgICAgICByZXR1cm4KPHxmaW1fZW5kfD4="]
["e71cd1255fa884951db5e4d608d7aa1629106fb0-2","e71cd1255fa884951db5e4d608d7aa1629106fb0","PHxmaW1fcHJlZml4fD4KZnJvbSBodHRwLnNlcnZlciBpbXBvcnQgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcgppbXBvcnQganNvbgppbXBvcnQgcmFuZG9tIGFzIHJhbmQKZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybHBhcnNlLCBwYXJzZV9xcwoKY2xhc3MgaGFuZGxlcihCYXNlSFRUUFJlcXVlc3RIYW5kbGVyKToKICAgIAogICAgZGVmIG5hbWVfZ2VuKHNlbGYsIGtleSk6CiAgICAgICAgICBrZXkgPSBrZXkubG93ZXIoKQogICAgICAgICAgaWYga2V5ID09ICdtYWxlJzoKICAgICAgICAgICAgZmlyc3RfbmFtZXMgPSAnYXBpL21hbGVfZmlyc3RfbmFtZXMudHh0JwogICAgICAgICAgZWxpZiBrZXkgPT0gJ2ZlbWFsZSc6CiAgICAgICAgICAgIGZpcnN0X25hbWVzID0gJ2FwaS9mZW1hbGVfZmlyc3RfbmFtZXMudHh0JwogICAgICAgICAgICAKICAgICAgICAgIGxhc3RfbmFtZXMgPSAnYXBpL2xhc3RfbmFtZXMudHh0JwoKICAgICAgICAgIGYgPSBvcGVuKHN0cihmaXJzdF9uYW1lcyksICJyIikKICAgICAgICAgIGZpcnN0X25hbWVzID0gZi5yZWFkKCkuc3BsaXQoKQoKICAgICAgICAgIGYgPSBvcGVuKHN0cihsYXN0X25hbWVzKSwgInIiKQogICAgICAgICAgbGFzdF9uYW1lcyA9IGYucmVhZCgpLnNwbGl0KCkKCiAgICAgICAgICBmaXJzdF9uYW1lc19zaXplID0gbGVuKGZpcnN0X25hbWVzKQogICAgICAgICAgbGFzdF9uYW1lc19zaXplID0gbGVuKGxhc3RfbmFtZXMpCiAgICAgICAgICBmaXJzdF9pbmRleCA9IHJhbmQucmFuZGludCgwLCBmaXJzdF9uYW1lc19zaXplKQogICAgICAgICAgbGFzdF9pbmRleCA9IHJhbmQucmFuZGludCgwLCBsYXN0X25hbWVzX3NpemUpCgo8fGZpbV9ob2xlfD4KICAgICAgICAgIHJldHVybiBqc29uX3ZhbHVlCiAgICAKICAgIGRlZiBkb19HRVQoc2VsZik6CiAgICAgICAgcyA9IHNlbGYucGF0aAogICAgICAgIGdlbiA9IHBhcnNlX3FzKHVybHBhcnNlKHMpLnF1ZXJ5KVsnZ2VuZGVyJ11bMF0KICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQogICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtdHlwZScsJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnKQogICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsICcqJykKICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKICAgICAgICBvdXRwdXQgPSBzZWxmLm5hbWVfZ2VuKGdlbikKICAgICAgICBqc29uX3ZhbHVlID0ganNvbi5kdW1wcyhvdXRwdXQsIGVuc3VyZV9hc2NpaSA9IEZhbHNlKQogICAgICAgIHJlc3VsdCA9IGpzb24ubG9hZHMoanNvbl92YWx1ZSkKICAgICAgICBzZWxmLndmaWxlLndyaXRlKHJlc3VsdC5lbmNvZGUoJ3V0ZjgnKSkKICAgICAgICByZXR1cm4KPHxmaW1fc3VmZml4fD4KICAgICAgICAgIG5hbWUgPSBmaXJzdF9uYW1lc1tmaXJzdF9pbmRleF0rIiAiK2xhc3RfbmFtZXNbbGFzdF9pbmRleF0KICAgICAgICAgIG91dHB1dCA9IHtrZXk6bmFtZX0KCiAgICAgICAgICBqc29uX3ZhbHVlID0ganNvbi5kdW1wcyhvdXRwdXQsIGVuc3VyZV9hc2NpaSA9IEZhbHNlKQo8fGZpbV9lbmR8Pg=="]
["e71cd1255fa884951db5e4d608d7aa1629106fb0-3","e71cd1255fa884951db5e4d608d7aa1629106fb0","PHxmaW1fcHJlZml4fD4KZnJvbSBodHRwLnNlcnZlciBpbXBvcnQgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcgppbXBvcnQganNvbgppbXBvcnQgcmFuZG9tIGFzIHJhbmQKZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybHBhcnNlLCBwYXJzZV9xcwoKY2xhc3MgaGFuZGxlcihCYXNlSFRUUFJlcXVlc3RIYW5kbGVyKToKICAgIAogICAgZGVmIG5hbWVfZ2VuKHNlbGYsIGtleSk6CiAgICAgICAgICBrZXkgPSBrZXkubG93ZXIoKQogICAgICAgICAgaWYga2V5ID09ICdtYWxlJzoKICAgICAgICAgICAgZmlyc3RfbmFtZXMgPSAnYXBpL21hbGVfZmlyc3RfbmFtZXMudHh0JwogICAgICAgICAgZWxpZiBrZXkgPT0gJ2ZlbWFsZSc6CiAgICAgICAgICAgIGZpcnN0X25hbWVzID0gJ2FwaS9mZW1hbGVfZmlyc3RfbmFtZXMudHh0JwogICAgICAgICAgICAKICAgICAgICAgIGxhc3RfbmFtZXMgPSAnYXBpL2xhc3RfbmFtZXMudHh0JwoKICAgICAgICAgIGYgPSBvcGVuKHN0cihmaXJzdF9uYW1lcyksICJyIikKICAgICAgICAgIGZpcnN0X25hbWVzID0gZi5yZWFkKCkuc3BsaXQoKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgZiA9IG9wZW4oc3RyKGxhc3RfbmFtZXMpLCAiciIpCiAgICAgICAgICBsYXN0X25hbWVzID0gZi5yZWFkKCkuc3BsaXQoKQoKICAgICAgICAgIGZpcnN0X25hbWVzX3NpemUgPSBsZW4oZmlyc3RfbmFtZXMpCjx8ZmltX2VuZHw+"]
["e71cd1255fa884951db5e4d608d7aa1629106fb0-4","e71cd1255fa884951db5e4d608d7aa1629106fb0","PHxmaW1fcHJlZml4fD4KZnJvbSBodHRwLnNlcnZlciBpbXBvcnQgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcgppbXBvcnQganNvbgppbXBvcnQgcmFuZG9tIGFzIHJhbmQKZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybHBhcnNlLCBwYXJzZV9xcwoKY2xhc3MgaGFuZGxlcihCYXNlSFRUUFJlcXVlc3RIYW5kbGVyKToKICAgIAogICAgZGVmIG5hbWVfZ2VuKHNlbGYsIGtleSk6CiAgICAgICAgICBrZXkgPSBrZXkubG93ZXIoKQogICAgICAgICAgaWYga2V5ID09ICdtYWxlJzoKICAgICAgICAgICAgZmlyc3RfbmFtZXMgPSAnYXBpL21hbGVfZmlyc3RfbmFtZXMudHh0JwogICAgICAgICAgZWxpZiBrZXkgPT0gJ2ZlbWFsZSc6CiAgICAgICAgICAgIGZpcnN0X25hbWVzID0gJ2FwaS9mZW1hbGVfZmlyc3RfbmFtZXMudHh0JwogICAgICAgICAgICAKICAgICAgICAgIGxhc3RfbmFtZXMgPSAnYXBpL2xhc3RfbmFtZXMudHh0JwoKICAgICAgICAgIGYgPSBvcGVuKHN0cihmaXJzdF9uYW1lcyksICJyIikKICAgICAgICAgIGZpcnN0X25hbWVzID0gZi5yZWFkKCkuc3BsaXQoKQoKICAgICAgICAgIGYgPSBvcGVuKHN0cihsYXN0X25hbWVzKSwgInIiKQogICAgICAgICAgbGFzdF9uYW1lcyA9IGYucmVhZCgpLnNwbGl0KCkKCiAgICAgICAgICBmaXJzdF9uYW1lc19zaXplID0gbGVuKGZpcnN0X25hbWVzKQogICAgICAgICAgbGFzdF9uYW1lc19zaXplID0gbGVuKGxhc3RfbmFtZXMpCiAgICAgICAgICBmaXJzdF9pbmRleCA9IHJhbmQucmFuZGludCgwLCBmaXJzdF9uYW1lc19zaXplKQogICAgICAgICAgbGFzdF9pbmRleCA9IHJhbmQucmFuZGludCgwLCBsYXN0X25hbWVzX3NpemUpCgogICAgICAgICAgbmFtZSA9IGZpcnN0X25hbWVzW2ZpcnN0X2luZGV4XSsiICIrbGFzdF9uYW1lc1tsYXN0X2luZGV4XQogICAgICAgICAgb3V0cHV0ID0ge2tleTpuYW1lfQoKICAgICAgICAgIGpzb25fdmFsdWUgPSBqc29uLmR1bXBzKG91dHB1dCwgZW5zdXJlX2FzY2lpID0gRmFsc2UpCiAgICAgICAgICByZXR1cm4ganNvbl92YWx1ZQogICAgCiAgICBkZWYgZG9fR0VUKHNlbGYpOgogICAgICAgIHMgPSBzZWxmLnBhdGgKICAgICAgICBnZW4gPSBwYXJzZV9xcyh1cmxwYXJzZShzKS5xdWVyeSlbJ2dlbmRlciddWzBdCiAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkKICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdDb250ZW50LXR5cGUnLCdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04JykKICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLCAnKicpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKICAgICAgICBvdXRwdXQgPSBzZWxmLm5hbWVfZ2VuKGdlbikKICAgICAgICBqc29uX3ZhbHVlID0ganNvbi5kdW1wcyhvdXRwdXQsIGVuc3VyZV9hc2NpaSA9IEZhbHNlKQogICAgICAgIHJlc3VsdCA9IGpzb24ubG9hZHMoanNvbl92YWx1ZSkKPHxmaW1fZW5kfD4="]
["6bcffe48ebd4eeacf5cd371a264ba74bbc9fcf1b-1","6bcffe48ebd4eeacf5cd371a264ba74bbc9fcf1b","PHxmaW1fcHJlZml4fD4KZnJvbSBnZW5lbGFuZy5wYXJzaW5nIGltcG9ydCBQcm9jZXNzLCBCcmFuY2gsIE1hdGNoCmZyb20gZ2VuZWxhbmcubGV4aW5nIGltcG9ydCBUb2tlbkxpc3QKZnJvbSBnZW5lbGFuZy5yZXN1bHRzIGltcG9ydCBSZXN1bHQKCgpjbGFzcyBCbG9jKFByb2Nlc3MpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGxlZnQ6IHN0ciwgcmlnaHQ6IHN0ciwgKml0ZW1zKToKICAgICAgICBzZWxmLmxlZnQgPSBsZWZ0CiAgICAgICAgc2VsZi5yaWdodCA9IHJpZ2h0CiAgICAgICAgc2VsZi5pdGVtcyA9IGl0ZW1zCgogICAgICAgIHNlbGYucHJvY2VzcyA9IEJyYW5jaCgKICAgICAgICAgICAgTWF0Y2goc2VsZi5sZWZ0KSwKICAgICAgICAgICAgKnNlbGYuaXRlbXMsCiAgICAgICAgICAgIE1hdGNoKHNlbGYucmlnaHQpCiAgICAgICAgKQoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gZiJCbG9jKHtyZXByKHNlbGYubGVmdCl9LCB7cmVwcihzZWxmLnJpZ2h0KX0sICIgKyAiLCAiLmpvaW4obWFwKHJlcHIsIHNlbGYuaXRlbXMpKSArICIpIgoKICAgIGRlZiBidWlsZChzZWxmLCBwYXJzZXIsIHRva2VuczogVG9rZW5MaXN0LCBhdF9wb3NpdGlvbjogaW50KSAtPiBSZXN1bHQ6CiAgICAgICAgcmV0dXJuIHNlbGYucHJvY2Vzcy5idWlsZChwYXJzZXIsIHRva2VucywgYXRfcG9zaXRpb24pCgogICAgQGNsYXNzbWV0aG9kCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBhc3QycHkoY2xzLCBhc3Q6IGRpY3QsIHBhcnNlcjogY2FsbGFibGUpOgogICAgICAgIHJldHVybiBjbHMoYXN0WydsZWZ0J10sIGFzdFsncmlnaHQnXSwgKm1hcChwYXJzZXIsIGFzdFsnaXRlbXMnXSkpCjx8ZmltX2VuZHw+"]
["6bcffe48ebd4eeacf5cd371a264ba74bbc9fcf1b-2","6bcffe48ebd4eeacf5cd371a264ba74bbc9fcf1b","PHxmaW1fcHJlZml4fD4KZnJvbSBnZW5lbGFuZy5wYXJzaW5nIGltcG9ydCBQcm9jZXNzLCBCcmFuY2gsIE1hdGNoCmZyb20gZ2VuZWxhbmcubGV4aW5nIGltcG9ydCBUb2tlbkxpc3QKZnJvbSBnZW5lbGFuZy5yZXN1bHRzIGltcG9ydCBSZXN1bHQKCgpjbGFzcyBCbG9jKFByb2Nlc3MpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGxlZnQ6IHN0ciwgcmlnaHQ6IHN0ciwgKml0ZW1zKToKICAgICAgICBzZWxmLmxlZnQgPSBsZWZ0CiAgICAgICAgc2VsZi5yaWdodCA9IHJpZ2h0CiAgICAgICAgc2VsZi5pdGVtcyA9IGl0ZW1zCgogICAgICAgIHNlbGYucHJvY2VzcyA9IEJyYW5jaCgKICAgICAgICAgICAgTWF0Y2goc2VsZi5sZWZ0KSwKICAgICAgICAgICAgKnNlbGYuaXRlbXMsCiAgICAgICAgICAgIE1hdGNoKHNlbGYucmlnaHQpCiAgICAgICAgKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgIHJldHVybiBmIkJsb2Moe3JlcHIoc2VsZi5sZWZ0KX0sIHtyZXByKHNlbGYucmlnaHQpfSwgIiArICIsICIuam9pbihtYXAocmVwciwgc2VsZi5pdGVtcykpICsgIikiCgogICAgZGVmIGJ1aWxkKHNlbGYsIHBhcnNlciwgdG9rZW5zOiBUb2tlbkxpc3QsIGF0X3Bvc2l0aW9uOiBpbnQpIC0+IFJlc3VsdDoKPHxmaW1fZW5kfD4="]
["6bcffe48ebd4eeacf5cd371a264ba74bbc9fcf1b-3","6bcffe48ebd4eeacf5cd371a264ba74bbc9fcf1b","PHxmaW1fcHJlZml4fD4KZnJvbSBnZW5lbGFuZy5wYXJzaW5nIGltcG9ydCBQcm9jZXNzLCBCcmFuY2gsIE1hdGNoCmZyb20gZ2VuZWxhbmcubGV4aW5nIGltcG9ydCBUb2tlbkxpc3QKZnJvbSBnZW5lbGFuZy5yZXN1bHRzIGltcG9ydCBSZXN1bHQKCgpjbGFzcyBCbG9jKFByb2Nlc3MpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGxlZnQ6IHN0ciwgcmlnaHQ6IHN0ciwgKml0ZW1zKToKICAgICAgICBzZWxmLmxlZnQgPSBsZWZ0CiAgICAgICAgc2VsZi5yaWdodCA9IHJpZ2h0Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLml0ZW1zID0gaXRlbXMKCiAgICAgICAgc2VsZi5wcm9jZXNzID0gQnJhbmNoKAogICAgICAgICAgICBNYXRjaChzZWxmLmxlZnQpLAo8fGZpbV9lbmR8Pg=="]
["6bcffe48ebd4eeacf5cd371a264ba74bbc9fcf1b-4","6bcffe48ebd4eeacf5cd371a264ba74bbc9fcf1b","PHxmaW1fcHJlZml4fD4KZnJvbSBnZW5lbGFuZy5wYXJzaW5nIGltcG9ydCBQcm9jZXNzLCBCcmFuY2gsIE1hdGNoCmZyb20gZ2VuZWxhbmcubGV4aW5nIGltcG9ydCBUb2tlbkxpc3QKZnJvbSBnZW5lbGFuZy5yZXN1bHRzIGltcG9ydCBSZXN1bHQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCmNsYXNzIEJsb2MoUHJvY2Vzcyk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgbGVmdDogc3RyLCByaWdodDogc3RyLCAqaXRlbXMpOgo8fGZpbV9lbmR8Pg=="]
["6bcffe48ebd4eeacf5cd371a264ba74bbc9fcf1b-5","6bcffe48ebd4eeacf5cd371a264ba74bbc9fcf1b","PHxmaW1fcHJlZml4fD4KZnJvbSBnZW5lbGFuZy5wYXJzaW5nIGltcG9ydCBQcm9jZXNzLCBCcmFuY2gsIE1hdGNoCmZyb20gZ2VuZWxhbmcubGV4aW5nIGltcG9ydCBUb2tlbkxpc3QKZnJvbSBnZW5lbGFuZy5yZXN1bHRzIGltcG9ydCBSZXN1bHQKCgpjbGFzcyBCbG9jKFByb2Nlc3MpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGxlZnQ6IHN0ciwgcmlnaHQ6IHN0ciwgKml0ZW1zKToKICAgICAgICBzZWxmLmxlZnQgPSBsZWZ0CiAgICAgICAgc2VsZi5yaWdodCA9IHJpZ2h0CiAgICAgICAgc2VsZi5pdGVtcyA9IGl0ZW1zCgogICAgICAgIHNlbGYucHJvY2VzcyA9IEJyYW5jaCgKICAgICAgICAgICAgTWF0Y2goc2VsZi5sZWZ0KSwKICAgICAgICAgICAgKnNlbGYuaXRlbXMsCiAgICAgICAgICAgIE1hdGNoKHNlbGYucmlnaHQpCiAgICAgICAgKQoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gZiJCbG9jKHtyZXByKHNlbGYubGVmdCl9LCB7cmVwcihzZWxmLnJpZ2h0KX0sICIgKyAiLCAiLmpvaW4obWFwKHJlcHIsIHNlbGYuaXRlbXMpKSArICIpIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIGJ1aWxkKHNlbGYsIHBhcnNlciwgdG9rZW5zOiBUb2tlbkxpc3QsIGF0X3Bvc2l0aW9uOiBpbnQpIC0+IFJlc3VsdDoKICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzLmJ1aWxkKHBhcnNlciwgdG9rZW5zLCBhdF9wb3NpdGlvbikKCjx8ZmltX2VuZHw+"]
["e7d71ce9b550aa6e82c087629a0be3450265a85f-1","e7d71ce9b550aa6e82c087629a0be3450265a85f","PHxmaW1fcHJlZml4fD4KIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSVNJUyBJQkVYIGFwcGxpY2F0aW9uLgojIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IFNjaWVuY2UgJiBUZWNobm9sb2d5IEZhY2lsaXRpZXMgQ291bmNpbC4KIyBBbGwgcmlnaHRzIHJlc2VydmVkLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwuCiMgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiMgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4KIyBFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSEUgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSBWMS4wLCBUSEUgUFJPR1JBTQojIEFORCBBQ0NPTVBBTllJTkcgTUFURVJJQUxTIEFSRSBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMKIyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELiAgU2VlIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgZm9yIG1vcmUgZGV0YWlscy4KIwojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHlvdSBjYW4gb2J0YWluIGEgY29weSBmcm9tCiMgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCBvcgojIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9lY2xpcHNlLTEuMC5waHAKCmltcG9ydCB1bml0dGVzdApmcm9tIERhdGFiYXNlU2VydmVyLm1vY2tzLm1vY2tfcHJvY3NlcnZfdXRpbHMgaW1wb3J0IE1vY2tQcm9jU2VydldyYXBwZXIKZnJvbSBzZXJ2ZXJfY29tbW9uLmlvY19kYXRhIGltcG9ydCBJT0NEYXRhCmZyb20gc2VydmVyX2NvbW1vbi5tb2Nrcy5tb2NrX2lvY19kYXRhX3NvdXJjZSBpbXBvcnQgKE1vY2tJb2NEYXRhU291cmNlLCBISUdIX1BWX05BTUVTLCBNRURJVU1fUFZfTkFNRVMsIExPV19QVl9OQU1FUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFDSUxJVFlfUFZfTkFNRVMsIFNBTVBMRV9QVlMsIEJMX1BWUywgVVNFUl9QVlMpCgoKY2xhc3MgVGVzdElvY0RhdGFTZXF1ZW5jZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgc2VsZi5wcmVmaXggPSAiIgogICAgICAgIHNlbGYuaW9jX3NvdXJjZSA9IE1vY2tJb2NEYXRhU291cmNlKCkKICAgICAgICBzZWxmLnByb2Nfc2VydmVyID0gTW9ja1Byb2NTZXJ2V3JhcHBlcigpCiAgICAgICAgc2VsZi5pb2NfZGF0YSA9IElPQ0RhdGEoc2VsZi5pb2Nfc291cmNlLCBzZWxmLnByb2Nfc2VydmVyLCBzZWxmLnByZWZpeCkKCiAgICBkZWYgdGVzdF9pb2NzX2FyZV9yZXBvcnRlZF9hc19ub3RfcnVubmluZ19pZl9zdG9wcGVkKHNlbGYpOgogICAgICAgICMgQXJyYW5nZQogICAgICAgIHNlbGYucHJvY19zZXJ2ZXIuc3RvcF9pb2Moc2VsZi5wcmVmaXgsICJURVNUSU9DIikKCiAgICAgICAgIyBBY3Rpb24KICAgICAgICBzZWxmLmlvY19kYXRhLnVwZGF0ZV9pb2NzX3N0YXR1cygpCiAgICAgICAgaW9jcyA9IHNlbGYuaW9jX2RhdGEuZ2V0X2lvY3MoKQoKICAgICAgICAjIEFzc2VydAogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW9jc1siVEVTVElPQyJdWyJydW5uaW5nIl0sIEZhbHNlKQoKICAgIGRlZiB0ZXN0X2lvY3NfYXJlX3JlcG9ydGVkX2FzX3J1bm5pbmdfaWZfc2V0X3J1bm5pbmcoc2VsZik6CiAgICAgICAgIyBBcnJhbmdlCiAgICAgICAgc2VsZi5wcm9jX3NlcnZlci5zdGFydF9pb2Moc2VsZi5wcmVmaXgsICJURVNUSU9DIikKCiAgICAgICAgIyBBY3Rpb24KICAgICAgICBzZWxmLmlvY19kYXRhLnVwZGF0ZV9pb2NzX3N0YXR1cygpCiAgICAgICAgaW9jcyA9IHNlbGYuaW9jX2RhdGEuZ2V0X2lvY3MoKQoKICAgICAgICAjIEFzc2VydAogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW9jc1siVEVTVElPQyJdWyJydW5uaW5nIl0sIFRydWUpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpb2NzWyJTSU1QTEUxIl1bInJ1bm5pbmciXSwgRmFsc2UpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpb2NzWyJTSU1QTEUyIl1bInJ1bm5pbmciXSwgRmFsc2UpCgogICAgZGVmIHRlc3RfZ2V0X2ludGVyZXN0aW5nX3B2c19hbGwoc2VsZik6CiAgICAgICAgIyBHZXQgYWxsIFBWcwogICAgICAgIHB2cyA9IHNlbGYuaW9jX2RhdGEuZ2V0X2ludGVyZXN0aW5nX3B2cygpCgogICAgICAgIGFsbF9uYW1lcyA9IEhJR0hfUFZfTkFNRVMKICAgICAgICBhbGxfbmFtZXMuZXh0ZW5kKE1FRElVTV9QVl9OQU1FUykKICAgICAgICBhbGxfbmFtZXMuZXh0ZW5kKExPV19QVl9OQU1FUykKICAgICAgICBhbGxfbmFtZXMuZXh0ZW5kKEZBQ0lMSVRZX1BWX05BTUVTKQoKICAgICAgICAjIENoZWNrIGFsbCBwdnMgYXJlIGluIGFsbCBuYW1lcwogICAgICAgIGZvciBwdiBpbiBwdnM6CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwdlswXSBpbiBhbGxfbmFtZXMpCgogICAgZGVmIHRlc3RfZ2V0X2ludGVyZXN0aW5nX3B2c19oaWdoKHNlbGYpOgogICAgICAgIHB2cyA9IHNlbGYuaW9jX2RhdGEuZ2V0X2ludGVyZXN0aW5nX3B2cygiSElHSCIpCgogICAgICAgIGZvciBwdiBpbiBwdnM6CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwdlswXSBpbiBISUdIX1BWX05BTUVTKQoKICAgIGRlZiB0ZXN0X2dldF9pbnRlcmVzdGluZ19wdnNfbWVkaXVtKHNlbGYpOgogICAgICAgIHB2cyA9IHNlbGYuaW9jX2RhdGEuZ2V0X2ludGVyZXN0aW5nX3B2cygiTUVESVVNIikKCiAgICAgICAgZm9yIHB2IGluIHB2czoKICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHB2WzBdIGluIE1FRElVTV9QVl9OQU1FUykKCiAgICBkZWYgdGVzdF9XSEVOX2Fza2VkX2Zvcl9sb3dfVEhFTl9nZXRfbG93X2ludGVyZXN0aW5nX3B2cyhzZWxmKToKICAgICAgICBwdnMgPSBzZWxmLmlvY19kYXRhLmdldF9pbnRlcmVzdGluZ19wdnMoIkxPVyIpCgogICAgICAgIGZvciBwdiBpbiBwdnM6CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwdlswXSBpbiBMT1dfUFZfTkFNRVMpCgogICAgZGVmIHRlc3RfZ2V0X2ludGVyZXN0aW5nX3B2c19mYWNpbGl0eShzZWxmKToKICAgICAgICAjIEdldCBhbGwgUFZzCiAgICAgICAgcHZzID0gc2VsZi5pb2NfZGF0YS5nZXRfaW50ZXJlc3RpbmdfcHZzKCJGQUNJTElUWSIpCgogICAgICAgIGZvciBwdiBpbiBwdnM6CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwdlswXSBpbiBGQUNJTElUWV9QVl9OQU1FUykKCiAgICBkZWYgdGVzdF9nZXRfYWN0aXZlX3B2cyhzZWxmKToKICAgICAgICAjIEdldCBhbGwgQWN0aXZlIFBWcy4gTm90ZSB0aGF0IE1vY2tJT0NEYXRhU291cmNlIGdldF9hY3RpdmVfcHZzKCkgcmV0dXJucyB0aGUgY29udGVudHMgb2YgSElHSF9QVl9OQU1FUywgc28KICAgICAgICAjIHRoaXMgaXMgd2h5IHRoaXMgdGVzdCBjb21wYXJlcyBwdiBuYW1lcyB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGF0IGxpc3QuIEl0IGlzIG5vdCBiZWNhdXNlIGluIGdlbmVyYWwgYWN0aXZlCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAjIHB2cyBhcmUgdGhlIGhpZ2ggaW50ZXJlc3RpbmcgcHZzLgogICAgICAgIHB2cyA9IHNlbGYuaW9jX2RhdGEuZ2V0X2FjdGl2ZV9wdnMoKQogICAgICAgIGZvciBwdiBpbiBwdnM6CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwdiBpbiBISUdIX1BWX05BTUVTKQo8fGZpbV9lbmR8Pg=="]
["e7d71ce9b550aa6e82c087629a0be3450265a85f-2","e7d71ce9b550aa6e82c087629a0be3450265a85f","PHxmaW1fcHJlZml4fD4KIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSVNJUyBJQkVYIGFwcGxpY2F0aW9uLgojIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IFNjaWVuY2UgJiBUZWNobm9sb2d5IEZhY2lsaXRpZXMgQ291bmNpbC4KIyBBbGwgcmlnaHRzIHJlc2VydmVkLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwuCiMgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiMgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4KIyBFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSEUgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSBWMS4wLCBUSEUgUFJPR1JBTQojIEFORCBBQ0NPTVBBTllJTkcgTUFURVJJQUxTIEFSRSBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMKIyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELiAgU2VlIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgZm9yIG1vcmUgZGV0YWlscy4KIwojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHlvdSBjYW4gb2J0YWluIGEgY29weSBmcm9tCiMgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCBvcgojIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9lY2xpcHNlLTEuMC5waHAKCmltcG9ydCB1bml0dGVzdApmcm9tIERhdGFiYXNlU2VydmVyLm1vY2tzLm1vY2tfcHJvY3NlcnZfdXRpbHMgaW1wb3J0IE1vY2tQcm9jU2VydldyYXBwZXIKZnJvbSBzZXJ2ZXJfY29tbW9uLmlvY19kYXRhIGltcG9ydCBJT0NEYXRhCmZyb20gc2VydmVyX2NvbW1vbi5tb2Nrcy5tb2NrX2lvY19kYXRhX3NvdXJjZSBpbXBvcnQgKE1vY2tJb2NEYXRhU291cmNlLCBISUdIX1BWX05BTUVTLCBNRURJVU1fUFZfTkFNRVMsIExPV19QVl9OQU1FUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFDSUxJVFlfUFZfTkFNRVMsIFNBTVBMRV9QVlMsIEJMX1BWUywgVVNFUl9QVlMpCgoKY2xhc3MgVGVzdElvY0RhdGFTZXF1ZW5jZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgc2VsZi5wcmVmaXggPSAiIgogICAgICAgIHNlbGYuaW9jX3NvdXJjZSA9IE1vY2tJb2NEYXRhU291cmNlKCkKICAgICAgICBzZWxmLnByb2Nfc2VydmVyID0gTW9ja1Byb2NTZXJ2V3JhcHBlcigpCiAgICAgICAgc2VsZi5pb2NfZGF0YSA9IElPQ0RhdGEoc2VsZi5pb2Nfc291cmNlLCBzZWxmLnByb2Nfc2VydmVyLCBzZWxmLnByZWZpeCkKCiAgICBkZWYgdGVzdF9pb2NzX2FyZV9yZXBvcnRlZF9hc19ub3RfcnVubmluZ19pZl9zdG9wcGVkKHNlbGYpOgogICAgICAgICMgQXJyYW5nZQogICAgICAgIHNlbGYucHJvY19zZXJ2ZXIuc3RvcF9pb2Moc2VsZi5wcmVmaXgsICJURVNUSU9DIikKCiAgICAgICAgIyBBY3Rpb24KICAgICAgICBzZWxmLmlvY19kYXRhLnVwZGF0ZV9pb2NzX3N0YXR1cygpCiAgICAgICAgaW9jcyA9IHNlbGYuaW9jX2RhdGEuZ2V0X2lvY3MoKQoKICAgICAgICAjIEFzc2VydAogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW9jc1siVEVTVElPQyJdWyJydW5uaW5nIl0sIEZhbHNlKQoKICAgIGRlZiB0ZXN0X2lvY3NfYXJlX3JlcG9ydGVkX2FzX3J1bm5pbmdfaWZfc2V0X3J1bm5pbmcoc2VsZik6CiAgICAgICAgIyBBcnJhbmdlCiAgICAgICAgc2VsZi5wcm9jX3NlcnZlci5zdGFydF9pb2Moc2VsZi5wcmVmaXgsICJURVNUSU9DIikKCiAgICAgICAgIyBBY3Rpb24KICAgICAgICBzZWxmLmlvY19kYXRhLnVwZGF0ZV9pb2NzX3N0YXR1cygpCiAgICAgICAgaW9jcyA9IHNlbGYuaW9jX2RhdGEuZ2V0X2lvY3MoKQoKICAgICAgICAjIEFzc2VydAogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW9jc1siVEVTVElPQyJdWyJydW5uaW5nIl0sIFRydWUpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpb2NzWyJTSU1QTEUxIl1bInJ1bm5pbmciXSwgRmFsc2UpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpb2NzWyJTSU1QTEUyIl1bInJ1bm5pbmciXSwgRmFsc2UpCgogICAgZGVmIHRlc3RfZ2V0X2ludGVyZXN0aW5nX3B2c19hbGwoc2VsZik6CiAgICAgICAgIyBHZXQgYWxsIFBWcwogICAgICAgIHB2cyA9IHNlbGYuaW9jX2RhdGEuZ2V0X2ludGVyZXN0aW5nX3B2cygpCgogICAgICAgIGFsbF9uYW1lcyA9IEhJR0hfUFZfTkFNRVMKICAgICAgICBhbGxfbmFtZXMuZXh0ZW5kKE1FRElVTV9QVl9OQU1FUykKICAgICAgICBhbGxfbmFtZXMuZXh0ZW5kKExPV19QVl9OQU1FUykKICAgICAgICBhbGxfbmFtZXMuZXh0ZW5kKEZBQ0lMSVRZX1BWX05BTUVTKQoKICAgICAgICAjIENoZWNrIGFsbCBwdnMgYXJlIGluIGFsbCBuYW1lcwogICAgICAgIGZvciBwdiBpbiBwdnM6CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwdlswXSBpbiBhbGxfbmFtZXMpCgogICAgZGVmIHRlc3RfZ2V0X2ludGVyZXN0aW5nX3B2c19oaWdoKHNlbGYpOgogICAgICAgIHB2cyA9IHNlbGYuaW9jX2RhdGEuZ2V0X2ludGVyZXN0aW5nX3B2cygiSElHSCIpCgogICAgICAgIGZvciBwdiBpbiBwdnM6CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwdlswXSBpbiBISUdIX1BWX05BTUVTKQoKICAgIGRlZiB0ZXN0X2dldF9pbnRlcmVzdGluZ19wdnNfbWVkaXVtKHNlbGYpOgogICAgICAgIHB2cyA9IHNlbGYuaW9jX2RhdGEuZ2V0X2ludGVyZXN0aW5nX3B2cygiTUVESVVNIikKCiAgICAgICAgZm9yIHB2IGluIHB2czoKICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHB2WzBdIGluIE1FRElVTV9QVl9OQU1FUykKCiAgICBkZWYgdGVzdF9XSEVOX2Fza2VkX2Zvcl9sb3dfVEhFTl9nZXRfbG93X2ludGVyZXN0aW5nX3B2cyhzZWxmKToKICAgICAgICBwdnMgPSBzZWxmLmlvY19kYXRhLmdldF9pbnRlcmVzdGluZ19wdnMoIkxPVyIpCgogICAgICAgIGZvciBwdiBpbiBwdnM6CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwdlswXSBpbiBMT1dfUFZfTkFNRVMpCgogICAgZGVmIHRlc3RfZ2V0X2ludGVyZXN0aW5nX3B2c19mYWNpbGl0eShzZWxmKToKICAgICAgICAjIEdldCBhbGwgUFZzCiAgICAgICAgcHZzID0gc2VsZi5pb2NfZGF0YS5nZXRfaW50ZXJlc3RpbmdfcHZzKCJGQUNJTElUWSIpCgogICAgICAgIGZvciBwdiBpbiBwdnM6CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwdlswXSBpbiBGQUNJTElUWV9QVl9OQU1FUykKCiAgICBkZWYgdGVzdF9nZXRfYWN0aXZlX3B2cyhzZWxmKToKICAgICAgICAjIEdldCBhbGwgQWN0aXZlIFBWcy4gTm90ZSB0aGF0IE1vY2tJT0NEYXRhU291cmNlIGdldF9hY3RpdmVfcHZzKCkgcmV0dXJucyB0aGUgY29udGVudHMgb2YgSElHSF9QVl9OQU1FUywgc28KICAgICAgICAjIHRoaXMgaXMgd2h5IHRoaXMgdGVzdCBjb21wYXJlcyBwdiBuYW1lcyB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGF0IGxpc3QuIEl0IGlzIG5vdCBiZWNhdXNlIGluIGdlbmVyYWwgYWN0aXZlCiAgICAgICAgIyBwdnMgYXJlIHRoZSBoaWdoIGludGVyZXN0aW5nIHB2cy4KICAgICAgICBwdnMgPSBzZWxmLmlvY19kYXRhLmdldF9hY3RpdmVfcHZzKCkKICAgICAgICBmb3IgcHYgaW4gcHZzOgogICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocHYgaW4gSElHSF9QVl9OQU1FUykKCiAgICBkZWYgdGVzdF9nZXRfYmVhbWxpbmVfcGFycyhzZWxmKToKICAgICAgICBwYXJzID0gc2VsZi5pb2NfZGF0YS5nZXRfYmVhbWxpbmVfcGFycygpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGFycyksIGxlbihCTF9QVlMpKQogICAgICAgIGZvciBuIGluIEJMX1BWUzoKICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG4gaW4gcGFycykKCiAgICBkZWYgdGVzdF9nZXRfc2FtcGxlX3BhcnMoc2VsZik6CiAgICAgICAgcGFycyA9IHNlbGYuaW9jX2RhdGEuZ2V0X3NhbXBsZV9wYXJzKCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwYXJzKSwgbGVuKFNBTVBMRV9QVlMpKQogICAgICAgIGZvciBuIGluIFNBTVBMRV9QVlM6CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuIGluIHBhcnMpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgdGVzdF9nZXRfdXNlcl9wYXJzKHNlbGYpOgogICAgICAgIHBhcnMgPSBzZWxmLmlvY19kYXRhLmdldF91c2VyX3BhcnMoKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhcnMpLCBsZW4oVVNFUl9QVlMpKQogICAgICAgIGZvciBuIGluIFVTRVJfUFZTOgo8fGZpbV9lbmR8Pg=="]
["e7d71ce9b550aa6e82c087629a0be3450265a85f-3","e7d71ce9b550aa6e82c087629a0be3450265a85f","PHxmaW1fcHJlZml4fD4KIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSVNJUyBJQkVYIGFwcGxpY2F0aW9uLgojIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IFNjaWVuY2UgJiBUZWNobm9sb2d5IEZhY2lsaXRpZXMgQ291bmNpbC4KIyBBbGwgcmlnaHRzIHJlc2VydmVkLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwuCiMgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiMgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4KIyBFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSEUgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSBWMS4wLCBUSEUgUFJPR1JBTQojIEFORCBBQ0NPTVBBTllJTkcgTUFURVJJQUxTIEFSRSBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMKIyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELiAgU2VlIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgZm9yIG1vcmUgZGV0YWlscy4KIwojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHlvdSBjYW4gb2J0YWluIGEgY29weSBmcm9tCiMgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCBvcgojIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9lY2xpcHNlLTEuMC5waHAKCmltcG9ydCB1bml0dGVzdApmcm9tIERhdGFiYXNlU2VydmVyLm1vY2tzLm1vY2tfcHJvY3NlcnZfdXRpbHMgaW1wb3J0IE1vY2tQcm9jU2VydldyYXBwZXIKZnJvbSBzZXJ2ZXJfY29tbW9uLmlvY19kYXRhIGltcG9ydCBJT0NEYXRhCmZyb20gc2VydmVyX2NvbW1vbi5tb2Nrcy5tb2NrX2lvY19kYXRhX3NvdXJjZSBpbXBvcnQgKE1vY2tJb2NEYXRhU291cmNlLCBISUdIX1BWX05BTUVTLCBNRURJVU1fUFZfTkFNRVMsIExPV19QVl9OQU1FUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFDSUxJVFlfUFZfTkFNRVMsIFNBTVBMRV9QVlMsIEJMX1BWUywgVVNFUl9QVlMpCgoKY2xhc3MgVGVzdElvY0RhdGFTZXF1ZW5jZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgc2VsZi5wcmVmaXggPSAiIgogICAgICAgIHNlbGYuaW9jX3NvdXJjZSA9IE1vY2tJb2NEYXRhU291cmNlKCkKICAgICAgICBzZWxmLnByb2Nfc2VydmVyID0gTW9ja1Byb2NTZXJ2V3JhcHBlcigpCiAgICAgICAgc2VsZi5pb2NfZGF0YSA9IElPQ0RhdGEoc2VsZi5pb2Nfc291cmNlLCBzZWxmLnByb2Nfc2VydmVyLCBzZWxmLnByZWZpeCkKCiAgICBkZWYgdGVzdF9pb2NzX2FyZV9yZXBvcnRlZF9hc19ub3RfcnVubmluZ19pZl9zdG9wcGVkKHNlbGYpOgogICAgICAgICMgQXJyYW5nZQogICAgICAgIHNlbGYucHJvY19zZXJ2ZXIuc3RvcF9pb2Moc2VsZi5wcmVmaXgsICJURVNUSU9DIikKCiAgICAgICAgIyBBY3Rpb24KICAgICAgICBzZWxmLmlvY19kYXRhLnVwZGF0ZV9pb2NzX3N0YXR1cygpCiAgICAgICAgaW9jcyA9IHNlbGYuaW9jX2RhdGEuZ2V0X2lvY3MoKQoKICAgICAgICAjIEFzc2VydAogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW9jc1siVEVTVElPQyJdWyJydW5uaW5nIl0sIEZhbHNlKQoKICAgIGRlZiB0ZXN0X2lvY3NfYXJlX3JlcG9ydGVkX2FzX3J1bm5pbmdfaWZfc2V0X3J1bm5pbmcoc2VsZik6CiAgICAgICAgIyBBcnJhbmdlCiAgICAgICAgc2VsZi5wcm9jX3NlcnZlci5zdGFydF9pb2Moc2VsZi5wcmVmaXgsICJURVNUSU9DIikKCiAgICAgICAgIyBBY3Rpb24KICAgICAgICBzZWxmLmlvY19kYXRhLnVwZGF0ZV9pb2NzX3N0YXR1cygpCiAgICAgICAgaW9jcyA9IHNlbGYuaW9jX2RhdGEuZ2V0X2lvY3MoKQoKICAgICAgICAjIEFzc2VydAogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW9jc1siVEVTVElPQyJdWyJydW5uaW5nIl0sIFRydWUpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpb2NzWyJTSU1QTEUxIl1bInJ1bm5pbmciXSwgRmFsc2UpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpb2NzWyJTSU1QTEUyIl1bInJ1bm5pbmciXSwgRmFsc2UpCgogICAgZGVmIHRlc3RfZ2V0X2ludGVyZXN0aW5nX3B2c19hbGwoc2VsZik6CiAgICAgICAgIyBHZXQgYWxsIFBWcwogICAgICAgIHB2cyA9IHNlbGYuaW9jX2RhdGEuZ2V0X2ludGVyZXN0aW5nX3B2cygpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgYWxsX25hbWVzID0gSElHSF9QVl9OQU1FUwogICAgICAgIGFsbF9uYW1lcy5leHRlbmQoTUVESVVNX1BWX05BTUVTKQogICAgICAgIGFsbF9uYW1lcy5leHRlbmQoTE9XX1BWX05BTUVTKQogICAgICAgIGFsbF9uYW1lcy5leHRlbmQoRkFDSUxJVFlfUFZfTkFNRVMpCjx8ZmltX2VuZHw+"]
["82218740817a0a9782b31d4863492660e0956347-1","82218740817a0a9782b31d4863492660e0956347","PHxmaW1fcHJlZml4fD4KZGVmIGFjY3VtdWxhdGUoY29sbGVjdGlvbiwgb3BlcmF0aW9uKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcmV0dXJuIFtvcGVyYXRpb24oZWx0KSBmb3IgZWx0IGluIGNvbGxlY3Rpb25dCjx8ZmltX2VuZHw+"]
["82218740817a0a9782b31d4863492660e0956347-2","82218740817a0a9782b31d4863492660e0956347","PHxmaW1fcHJlZml4fD4KZGVmIGFjY3VtdWxhdGUoY29sbGVjdGlvbiwgb3BlcmF0aW9uKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcmV0dXJuIFtvcGVyYXRpb24oZWx0KSBmb3IgZWx0IGluIGNvbGxlY3Rpb25dCjx8ZmltX2VuZHw+"]
["82218740817a0a9782b31d4863492660e0956347-3","82218740817a0a9782b31d4863492660e0956347","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIGFjY3VtdWxhdGUoY29sbGVjdGlvbiwgb3BlcmF0aW9uKToKICAgIHJldHVybiBbb3BlcmF0aW9uKGVsdCkgZm9yIGVsdCBpbiBjb2xsZWN0aW9uXQo8fGZpbV9lbmR8Pg=="]
["00f104ac80f2232727325da242e045c2b2506413-1","00f104ac80f2232727325da242e045c2b2506413","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyAgQ29weXJpZ2h0IChjKSAyMDIxLiBEaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cgpmcm9tIHNjaXB5LmNvbnN0YW50cyBpbXBvcnQgcGh5c2ljYWxfY29uc3RhbnRzIGFzIHBjCmF1X3RvX2FuZ3N0cm9tID0gcGNbImF0b21pYyB1bml0IG9mIGxlbmd0aCJdWzBdICogMTAgKiogMTAgICMgPSAwLjUyOTE3NzIxMDkKPHxmaW1fZW5kfD4="]
["00f104ac80f2232727325da242e045c2b2506413-2","00f104ac80f2232727325da242e045c2b2506413","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyAgQ29weXJpZ2h0IChjKSAyMDIxLiBEaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cgpmcm9tIHNjaXB5LmNvbnN0YW50cyBpbXBvcnQgcGh5c2ljYWxfY29uc3RhbnRzIGFzIHBjCmF1X3RvX2FuZ3N0cm9tID0gcGNbImF0b21pYyB1bml0IG9mIGxlbmd0aCJdWzBdICogMTAgKiogMTAgICMgPSAwLjUyOTE3NzIxMDkKPHxmaW1fZW5kfD4="]
["416497cd448251af18f5d7b322fe6fff3a495f4a-1","416497cd448251af18f5d7b322fe6fff3a495f4a","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBnZW5lcmF0ZWQgYnkgYXBwY3JlYXRvcgpmcm9tIGRqYW5nby5jb250cmliIGltcG9ydCBhZG1pbgpmcm9tIC4gbW9kZWxzIGltcG9ydCAoCiAgICBIYXBhQmVsZWcsCjx8ZmltX2VuZHw+"]
["416497cd448251af18f5d7b322fe6fff3a495f4a-2","416497cd448251af18f5d7b322fe6fff3a495f4a","PHxmaW1fcHJlZml4fD4KIyBnZW5lcmF0ZWQgYnkgYXBwY3JlYXRvcgpmcm9tIGRqYW5nby5jb250cmliIGltcG9ydCBhZG1pbgpmcm9tIC4gbW9kZWxzIGltcG9ydCAoCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIEhhcGFCZWxlZywKICAgIEhhcGFQbGFjZU5hbWUKPHxmaW1fZW5kfD4="]
["2e37595f1240c85d7ca05c37268411517fdf75b0-1","2e37595f1240c85d7ca05c37268411517fdf75b0","PHxmaW1fcHJlZml4fD4KIyBmcm9tIEFuaW1hbHMuTWFtbWFscyBpbXBvcnQgTWFtbWFscwojIGZyb20gQW5pbWFscy5CaXJkcyBpbXBvcnQgQmlyZHMKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcHJpbnQoJ2ltcG9ydGVkIE1hbW1hbHMsIEJpcmRzJykKPHxmaW1fZW5kfD4="]
["2e37595f1240c85d7ca05c37268411517fdf75b0-2","2e37595f1240c85d7ca05c37268411517fdf75b0","PHxmaW1fcHJlZml4fD4KIyBmcm9tIEFuaW1hbHMuTWFtbWFscyBpbXBvcnQgTWFtbWFscwojIGZyb20gQW5pbWFscy5CaXJkcyBpbXBvcnQgQmlyZHMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKcHJpbnQoJ2ltcG9ydGVkIE1hbW1hbHMsIEJpcmRzJykKPHxmaW1fZW5kfD4="]
["99bf0454889d792a89a7567fcf8d9f8d3921ff93-1","99bf0454889d792a89a7567fcf8d9f8d3921ff93","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJhbmRvbQppbXBvcnQgdHVydGxlCnQgPSB0dXJ0bGUuUGVuKCkKZm9yIGkgaW4gcmFuZ2UgKDE1KToKICAgIGZvciBnIGluIHJhbmdlICgzKToKICAgICAgICB0LnBlbmNvbG9yKHJhbmRvbS5yYW5kb20oKSxyYW5kb20ucmFuZG9tKCkscmFuZG9tLnJhbmRvbSgpKQogICAgICAgIHQuZm9yd2FyZCg1MCkKICAgICAgICB0LmxlZnQoMzYwIC8gMykKICAgIHQubGVmdCgyNCkKdC51cCgpCnQubGVmdCg5MCkKdC5mb3J3YXJkKDc1KQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CnQuZG93bigpCmZvciBpIGluIHJhbmdlICgxNSk6CiAgICBmb3IgZyBpbiByYW5nZSAoMyk6CiAgICAgICAgdC5wZW5jb2xvcihyYW5kb20ucmFuZG9tKCkscmFuZG9tLnJhbmRvbSgpLHJhbmRvbS5yYW5kb20oKSkKPHxmaW1fZW5kfD4="]
["99bf0454889d792a89a7567fcf8d9f8d3921ff93-2","99bf0454889d792a89a7567fcf8d9f8d3921ff93","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJhbmRvbQppbXBvcnQgdHVydGxlCnQgPSB0dXJ0bGUuUGVuKCkKZm9yIGkgaW4gcmFuZ2UgKDE1KToKICAgIGZvciBnIGluIHJhbmdlICgzKToKPHxmaW1faG9sZXw+CiAgICB0LmxlZnQoMjQpCnQudXAoKQp0LmxlZnQoOTApCnQuZm9yd2FyZCg3NSkKdC5kb3duKCkKZm9yIGkgaW4gcmFuZ2UgKDE1KToKICAgIGZvciBnIGluIHJhbmdlICgzKToKICAgICAgICB0LnBlbmNvbG9yKHJhbmRvbS5yYW5kb20oKSxyYW5kb20ucmFuZG9tKCkscmFuZG9tLnJhbmRvbSgpKQogICAgICAgIHQuZm9yd2FyZCg1MCkKICAgICAgICB0LmxlZnQoMzYwIC8gMykKICAgIHQubGVmdCgyNCkKPHxmaW1fc3VmZml4fD4KICAgICAgICB0LnBlbmNvbG9yKHJhbmRvbS5yYW5kb20oKSxyYW5kb20ucmFuZG9tKCkscmFuZG9tLnJhbmRvbSgpKQogICAgICAgIHQuZm9yd2FyZCg1MCkKICAgICAgICB0LmxlZnQoMzYwIC8gMykKPHxmaW1fZW5kfD4="]
["99bf0454889d792a89a7567fcf8d9f8d3921ff93-3","99bf0454889d792a89a7567fcf8d9f8d3921ff93","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJhbmRvbQppbXBvcnQgdHVydGxlCnQgPSB0dXJ0bGUuUGVuKCkKZm9yIGkgaW4gcmFuZ2UgKDE1KToKICAgIGZvciBnIGluIHJhbmdlICgzKToKICAgICAgICB0LnBlbmNvbG9yKHJhbmRvbS5yYW5kb20oKSxyYW5kb20ucmFuZG9tKCkscmFuZG9tLnJhbmRvbSgpKQogICAgICAgIHQuZm9yd2FyZCg1MCkKICAgICAgICB0LmxlZnQoMzYwIC8gMykKICAgIHQubGVmdCgyNCkKdC51cCgpCnQubGVmdCg5MCkKdC5mb3J3YXJkKDc1KQp0LmRvd24oKQpmb3IgaSBpbiByYW5nZSAoMTUpOgogICAgZm9yIGcgaW4gcmFuZ2UgKDMpOgogICAgICAgIHQucGVuY29sb3IocmFuZG9tLnJhbmRvbSgpLHJhbmRvbS5yYW5kb20oKSxyYW5kb20ucmFuZG9tKCkpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICB0LmZvcndhcmQoNTApCiAgICAgICAgdC5sZWZ0KDM2MCAvIDMpCjx8ZmltX2VuZHw+"]
["99bf0454889d792a89a7567fcf8d9f8d3921ff93-4","99bf0454889d792a89a7567fcf8d9f8d3921ff93","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJhbmRvbQppbXBvcnQgdHVydGxlCnQgPSB0dXJ0bGUuUGVuKCkKZm9yIGkgaW4gcmFuZ2UgKDE1KToKICAgIGZvciBnIGluIHJhbmdlICgzKToKICAgICAgICB0LnBlbmNvbG9yKHJhbmRvbS5yYW5kb20oKSxyYW5kb20ucmFuZG9tKCkscmFuZG9tLnJhbmRvbSgpKQogICAgICAgIHQuZm9yd2FyZCg1MCkKICAgICAgICB0LmxlZnQoMzYwIC8gMykKICAgIHQubGVmdCgyNCkKdC51cCgpCnQubGVmdCg5MCkKdC5mb3J3YXJkKDc1KQp0LmRvd24oKQpmb3IgaSBpbiByYW5nZSAoMTUpOgogICAgZm9yIGcgaW4gcmFuZ2UgKDMpOgogICAgICAgIHQucGVuY29sb3IocmFuZG9tLnJhbmRvbSgpLHJhbmRvbS5yYW5kb20oKSxyYW5kb20ucmFuZG9tKCkpCiAgICAgICAgdC5mb3J3YXJkKDUwKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgdC5sZWZ0KDM2MCAvIDMpCjx8ZmltX2VuZHw+"]
["c1c410248a8a3d09c5324829fc73110af90d2fd1-1","c1c410248a8a3d09c5324829fc73110af90d2fd1","PHxmaW1fcHJlZml4fD4KZnJvbSBjb3JlLm1vZGVscyBpbXBvcnQgVXNlclJpZ2h0cywgVXNlclByZWZlcmVuY2VzLCBMb3QKZnJvbSBkamFuZ28uY29yZS5leGNlcHRpb25zIGltcG9ydCBQZXJtaXNzaW9uRGVuaWVkCmZyb20gZGphbmdvLnNob3J0Y3V0cyBpbXBvcnQgcmVuZGVyCgoKZGVmIGVucmljaF93aXRoX3VzZXJfZGV0YWlscyhmdW5jdGlvbik6CiAgICBkZWYgd3JhcChyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHVzZXJfcmlnaHRzID0gVXNlclJpZ2h0cy5vYmplY3RzLmZpbHRlcih1c2VyPXJlcXVlc3QudXNlcikKICAgICAgICB1c2VyX3ByZWZlcmVuY2VzLCBjcmVhdGVkID0gVXNlclByZWZlcmVuY2VzLm9iamVjdHMuZ2V0X29yX2NyZWF0ZSh1c2VyPXJlcXVlc3QudXNlcikKICAgICAgICBpZiB1c2VyX3ByZWZlcmVuY2VzLmRlZmF1bHRfZW50aXR5ID09IE5vbmU6CiAgICAgICAgICAgIGlmIGxlbih1c2VyX3JpZ2h0cykgPT0gMDoKICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgJ3B1YmxpYy9ibGFua191c2VyLmh0bWwnLCB7fSkKICAgICAgICAgICAgZGVmYXVsdF9yaWdodCA9IHVzZXJfcmlnaHRzWzBdCiAgICAgICAgICAgIHVzZXJfcHJlZmVyZW5jZXMuZGVmYXVsdF9lbnRpdHkgPSBkZWZhdWx0X3JpZ2h0LmVudGl0eQogICAgICAgICAgICB1c2VyX3ByZWZlcmVuY2VzLnNhdmUoKQogICAgICAgIGNvbnRleHQgPSB7fQogICAgICAgIGNvbnRleHRbJ3VzZXJfbmFtZSddID0gcmVxdWVzdC51c2VyLm5hbWUKICAgICAgICBjb250ZXh0WyduYl9lbnRpdGllcyddID0gbGVuKHVzZXJfcmlnaHRzKQogICAgICAgIGNvbnRleHRbJ2VudGl0aWVzJ10gPSBbdS5lbnRpdHkgZm9yIHUgaW4gdXNlcl9yaWdodHNdCiAgICAgICAgY29udGV4dFsndXNlcl9lbnRpdHknXSA9IHVzZXJfcHJlZmVyZW5jZXMuZGVmYXVsdF9lbnRpdHkKICAgICAgICBjb250ZXh0Wyd1c2VyX2VudGl0eV9uYW1lJ10gPSB1c2VyX3ByZWZlcmVuY2VzLmRlZmF1bHRfZW50aXR5Lm5hbWUKICAgICAgICBrd2FyZ3NbJ2NvbnRleHQnXSA9IGNvbnRleHQKICAgICAgICByZXR1cm4gZnVuY3Rpb24ocmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKQogICAgd3JhcC5fX2RvY19fID0gZnVuY3Rpb24uX19kb2NfXwogICAgd3JhcC5fX25hbWVfXyA9IGZ1bmN0aW9uLl9fbmFtZV9fCiAgICByZXR1cm4gd3JhcAoKZGVmIHJlc3RyaWN0X3RvX3Byb2R1Y2VycyhmdW5jdGlvbik6CiAgICBkZWYgd3JhcChyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIGNvbnRleHQgPSBrd2FyZ3NbJ2NvbnRleHQnXQogICAgICAgIGlmIGNvbnRleHRbJ3VzZXJfZW50aXR5J10uZW50aXR5X3R5cGUgIT0gJ1Byb2R1Y3RldXInOgogICAgICAgICAgICByYWlzZSBQZXJtaXNzaW9uRGVuaWVkCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHJlcXVlc3QsICphcmdzLCAqKmt3YXJncykKICAgIHdyYXAuX19kb2NfXyA9IGZ1bmN0aW9uLl9fZG9jX18KICAgIHdyYXAuX19uYW1lX18gPSBmdW5jdGlvbi5fX25hbWVfXwogICAgcmV0dXJuIHdyYXAKCgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgcmFpc2UgUGVybWlzc2lvbkRlbmllZAogICAgICAgIGNvbnRleHRbJ2FmZmlsaWF0ZWRfbG90cyddID0gTG90Lm9iamVjdHMuZmlsdGVyKGVhPWNvbnRleHRbJ3VzZXJfZW50aXR5J10sIGVhX2RlbGl2ZXJ5X2FjY2VwdGVkPUZhbHNlLCBzdGF0dXM9J1ZhbGlkYXRlZCcpCiAgICAgICAgY29udGV4dFsnbmJfYWZmaWxpYXRlZF9sb3RzJ10gPSBsZW4oY29udGV4dFsnYWZmaWxpYXRlZF9sb3RzJ10pCiAgICAgICAgY29udGV4dFsnbmJfY29udHJvbGVzX2RnZWMnXSA9IDAKICAgICAgICByZXR1cm4gZnVuY3Rpb24ocmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKQogICAgd3JhcC5fX2RvY19fID0gZnVuY3Rpb24uX19kb2NfXwogICAgd3JhcC5fX25hbWVfXyA9IGZ1bmN0aW9uLl9fbmFtZV9fCiAgICByZXR1cm4gd3JhcAoKCmRlZiByZXN0cmljdF90b19hZG1pbmlzdHJhdG9ycyhmdW5jdGlvbik6CiAgICBkZWYgd3JhcChyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIGNvbnRleHQgPSBrd2FyZ3NbJ2NvbnRleHQnXQogICAgICAgIGlmIGNvbnRleHRbJ3VzZXJfZW50aXR5J10uZW50aXR5X3R5cGUgIT0gJ0FkbWluaXN0cmF0aW9uJzoKICAgICAgICAgICAgcmFpc2UgUGVybWlzc2lvbkRlbmllZAogICAgICAgIHJldHVybiBmdW5jdGlvbihyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpCiAgICB3cmFwLl9fZG9jX18gPSBmdW5jdGlvbi5fX2RvY19fCiAgICB3cmFwLl9fbmFtZV9fID0gZnVuY3Rpb24uX19uYW1lX18KICAgIHJldHVybiB3cmFwCjx8ZmltX3N1ZmZpeHw+CmRlZiByZXN0cmljdF90b19vcGVyYXRvcnMoZnVuY3Rpb24pOgogICAgZGVmIHdyYXAocmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBjb250ZXh0ID0ga3dhcmdzWydjb250ZXh0J10KICAgICAgICBpZiBjb250ZXh0Wyd1c2VyX2VudGl0eSddLmVudGl0eV90eXBlICE9ICdPcMOpcmF0ZXVyJzoKPHxmaW1fZW5kfD4="]
["c1c410248a8a3d09c5324829fc73110af90d2fd1-2","c1c410248a8a3d09c5324829fc73110af90d2fd1","PHxmaW1fcHJlZml4fD4KZnJvbSBjb3JlLm1vZGVscyBpbXBvcnQgVXNlclJpZ2h0cywgVXNlclByZWZlcmVuY2VzLCBMb3QKZnJvbSBkamFuZ28uY29yZS5leGNlcHRpb25zIGltcG9ydCBQZXJtaXNzaW9uRGVuaWVkCmZyb20gZGphbmdvLnNob3J0Y3V0cyBpbXBvcnQgcmVuZGVyCgoKZGVmIGVucmljaF93aXRoX3VzZXJfZGV0YWlscyhmdW5jdGlvbik6CiAgICBkZWYgd3JhcChyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHVzZXJfcmlnaHRzID0gVXNlclJpZ2h0cy5vYmplY3RzLmZpbHRlcih1c2VyPXJlcXVlc3QudXNlcikKICAgICAgICB1c2VyX3ByZWZlcmVuY2VzLCBjcmVhdGVkID0gVXNlclByZWZlcmVuY2VzLm9iamVjdHMuZ2V0X29yX2NyZWF0ZSh1c2VyPXJlcXVlc3QudXNlcikKICAgICAgICBpZiB1c2VyX3ByZWZlcmVuY2VzLmRlZmF1bHRfZW50aXR5ID09IE5vbmU6CiAgICAgICAgICAgIGlmIGxlbih1c2VyX3JpZ2h0cykgPT0gMDoKICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgJ3B1YmxpYy9ibGFua191c2VyLmh0bWwnLCB7fSkKICAgICAgICAgICAgZGVmYXVsdF9yaWdodCA9IHVzZXJfcmlnaHRzWzBdCiAgICAgICAgICAgIHVzZXJfcHJlZmVyZW5jZXMuZGVmYXVsdF9lbnRpdHkgPSBkZWZhdWx0X3JpZ2h0LmVudGl0eQogICAgICAgICAgICB1c2VyX3ByZWZlcmVuY2VzLnNhdmUoKQogICAgICAgIGNvbnRleHQgPSB7fQogICAgICAgIGNvbnRleHRbJ3VzZXJfbmFtZSddID0gcmVxdWVzdC51c2VyLm5hbWUKICAgICAgICBjb250ZXh0WyduYl9lbnRpdGllcyddID0gbGVuKHVzZXJfcmlnaHRzKQogICAgICAgIGNvbnRleHRbJ2VudGl0aWVzJ10gPSBbdS5lbnRpdHkgZm9yIHUgaW4gdXNlcl9yaWdodHNdCiAgICAgICAgY29udGV4dFsndXNlcl9lbnRpdHknXSA9IHVzZXJfcHJlZmVyZW5jZXMuZGVmYXVsdF9lbnRpdHkKICAgICAgICBjb250ZXh0Wyd1c2VyX2VudGl0eV9uYW1lJ10gPSB1c2VyX3ByZWZlcmVuY2VzLmRlZmF1bHRfZW50aXR5Lm5hbWUKPHxmaW1faG9sZXw+CiAgICB3cmFwLl9fZG9jX18gPSBmdW5jdGlvbi5fX2RvY19fCiAgICB3cmFwLl9fbmFtZV9fID0gZnVuY3Rpb24uX19uYW1lX18KICAgIHJldHVybiB3cmFwCgpkZWYgcmVzdHJpY3RfdG9fcHJvZHVjZXJzKGZ1bmN0aW9uKToKICAgIGRlZiB3cmFwKHJlcXVlc3QsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgY29udGV4dCA9IGt3YXJnc1snY29udGV4dCddCiAgICAgICAgaWYgY29udGV4dFsndXNlcl9lbnRpdHknXS5lbnRpdHlfdHlwZSAhPSAnUHJvZHVjdGV1cic6CiAgICAgICAgICAgIHJhaXNlIFBlcm1pc3Npb25EZW5pZWQKICAgICAgICByZXR1cm4gZnVuY3Rpb24ocmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKQogICAgd3JhcC5fX2RvY19fID0gZnVuY3Rpb24uX19kb2NfXwogICAgd3JhcC5fX25hbWVfXyA9IGZ1bmN0aW9uLl9fbmFtZV9fCiAgICByZXR1cm4gd3JhcAoKCmRlZiByZXN0cmljdF90b19vcGVyYXRvcnMoZnVuY3Rpb24pOgogICAgZGVmIHdyYXAocmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBjb250ZXh0ID0ga3dhcmdzWydjb250ZXh0J10KICAgICAgICBpZiBjb250ZXh0Wyd1c2VyX2VudGl0eSddLmVudGl0eV90eXBlICE9ICdPcMOpcmF0ZXVyJzoKICAgICAgICAgICAgcmFpc2UgUGVybWlzc2lvbkRlbmllZAogICAgICAgIGNvbnRleHRbJ2FmZmlsaWF0ZWRfbG90cyddID0gTG90Lm9iamVjdHMuZmlsdGVyKGVhPWNvbnRleHRbJ3VzZXJfZW50aXR5J10sIGVhX2RlbGl2ZXJ5X2FjY2VwdGVkPUZhbHNlLCBzdGF0dXM9J1ZhbGlkYXRlZCcpCiAgICAgICAgY29udGV4dFsnbmJfYWZmaWxpYXRlZF9sb3RzJ10gPSBsZW4oY29udGV4dFsnYWZmaWxpYXRlZF9sb3RzJ10pCiAgICAgICAgY29udGV4dFsnbmJfY29udHJvbGVzX2RnZWMnXSA9IDAKICAgICAgICByZXR1cm4gZnVuY3Rpb24ocmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKQogICAgd3JhcC5fX2RvY19fID0gZnVuY3Rpb24uX19kb2NfXwogICAgd3JhcC5fX25hbWVfXyA9IGZ1bmN0aW9uLl9fbmFtZV9fCiAgICByZXR1cm4gd3JhcAoKCmRlZiByZXN0cmljdF90b19hZG1pbmlzdHJhdG9ycyhmdW5jdGlvbik6CiAgICBkZWYgd3JhcChyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIGNvbnRleHQgPSBrd2FyZ3NbJ2NvbnRleHQnXQogICAgICAgIGlmIGNvbnRleHRbJ3VzZXJfZW50aXR5J10uZW50aXR5X3R5cGUgIT0gJ0FkbWluaXN0cmF0aW9uJzoKICAgICAgICAgICAgcmFpc2UgUGVybWlzc2lvbkRlbmllZAogICAgICAgIHJldHVybiBmdW5jdGlvbihyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpCiAgICB3cmFwLl9fZG9jX18gPSBmdW5jdGlvbi5fX2RvY19fCiAgICB3cmFwLl9fbmFtZV9fID0gZnVuY3Rpb24uX19uYW1lX18KICAgIHJldHVybiB3cmFwCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAga3dhcmdzWydjb250ZXh0J10gPSBjb250ZXh0CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHJlcXVlc3QsICphcmdzLCAqKmt3YXJncykKPHxmaW1fZW5kfD4="]
["c1c410248a8a3d09c5324829fc73110af90d2fd1-3","c1c410248a8a3d09c5324829fc73110af90d2fd1","PHxmaW1fcHJlZml4fD4KZnJvbSBjb3JlLm1vZGVscyBpbXBvcnQgVXNlclJpZ2h0cywgVXNlclByZWZlcmVuY2VzLCBMb3QKZnJvbSBkamFuZ28uY29yZS5leGNlcHRpb25zIGltcG9ydCBQZXJtaXNzaW9uRGVuaWVkCmZyb20gZGphbmdvLnNob3J0Y3V0cyBpbXBvcnQgcmVuZGVyCgoKZGVmIGVucmljaF93aXRoX3VzZXJfZGV0YWlscyhmdW5jdGlvbik6CiAgICBkZWYgd3JhcChyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHVzZXJfcmlnaHRzID0gVXNlclJpZ2h0cy5vYmplY3RzLmZpbHRlcih1c2VyPXJlcXVlc3QudXNlcikKICAgICAgICB1c2VyX3ByZWZlcmVuY2VzLCBjcmVhdGVkID0gVXNlclByZWZlcmVuY2VzLm9iamVjdHMuZ2V0X29yX2NyZWF0ZSh1c2VyPXJlcXVlc3QudXNlcikKICAgICAgICBpZiB1c2VyX3ByZWZlcmVuY2VzLmRlZmF1bHRfZW50aXR5ID09IE5vbmU6CiAgICAgICAgICAgIGlmIGxlbih1c2VyX3JpZ2h0cykgPT0gMDoKICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgJ3B1YmxpYy9ibGFua191c2VyLmh0bWwnLCB7fSkKICAgICAgICAgICAgZGVmYXVsdF9yaWdodCA9IHVzZXJfcmlnaHRzWzBdCiAgICAgICAgICAgIHVzZXJfcHJlZmVyZW5jZXMuZGVmYXVsdF9lbnRpdHkgPSBkZWZhdWx0X3JpZ2h0LmVudGl0eQogICAgICAgICAgICB1c2VyX3ByZWZlcmVuY2VzLnNhdmUoKQogICAgICAgIGNvbnRleHQgPSB7fQogICAgICAgIGNvbnRleHRbJ3VzZXJfbmFtZSddID0gcmVxdWVzdC51c2VyLm5hbWUKICAgICAgICBjb250ZXh0WyduYl9lbnRpdGllcyddID0gbGVuKHVzZXJfcmlnaHRzKQogICAgICAgIGNvbnRleHRbJ2VudGl0aWVzJ10gPSBbdS5lbnRpdHkgZm9yIHUgaW4gdXNlcl9yaWdodHNdCiAgICAgICAgY29udGV4dFsndXNlcl9lbnRpdHknXSA9IHVzZXJfcHJlZmVyZW5jZXMuZGVmYXVsdF9lbnRpdHkKICAgICAgICBjb250ZXh0Wyd1c2VyX2VudGl0eV9uYW1lJ10gPSB1c2VyX3ByZWZlcmVuY2VzLmRlZmF1bHRfZW50aXR5Lm5hbWUKICAgICAgICBrd2FyZ3NbJ2NvbnRleHQnXSA9IGNvbnRleHQKICAgICAgICByZXR1cm4gZnVuY3Rpb24ocmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKQogICAgd3JhcC5fX2RvY19fID0gZnVuY3Rpb24uX19kb2NfXwogICAgd3JhcC5fX25hbWVfXyA9IGZ1bmN0aW9uLl9fbmFtZV9fCiAgICByZXR1cm4gd3JhcAoKZGVmIHJlc3RyaWN0X3RvX3Byb2R1Y2VycyhmdW5jdGlvbik6CiAgICBkZWYgd3JhcChyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIGNvbnRleHQgPSBrd2FyZ3NbJ2NvbnRleHQnXQogICAgICAgIGlmIGNvbnRleHRbJ3VzZXJfZW50aXR5J10uZW50aXR5X3R5cGUgIT0gJ1Byb2R1Y3RldXInOgogICAgICAgICAgICByYWlzZSBQZXJtaXNzaW9uRGVuaWVkCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHJlcXVlc3QsICphcmdzLCAqKmt3YXJncykKICAgIHdyYXAuX19kb2NfXyA9IGZ1bmN0aW9uLl9fZG9jX18KICAgIHdyYXAuX19uYW1lX18gPSBmdW5jdGlvbi5fX25hbWVfXwogICAgcmV0dXJuIHdyYXAKCgpkZWYgcmVzdHJpY3RfdG9fb3BlcmF0b3JzKGZ1bmN0aW9uKToKICAgIGRlZiB3cmFwKHJlcXVlc3QsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgY29udGV4dCA9IGt3YXJnc1snY29udGV4dCddCiAgICAgICAgaWYgY29udGV4dFsndXNlcl9lbnRpdHknXS5lbnRpdHlfdHlwZSAhPSAnT3DDqXJhdGV1cic6CiAgICAgICAgICAgIHJhaXNlIFBlcm1pc3Npb25EZW5pZWQKICAgICAgICBjb250ZXh0WydhZmZpbGlhdGVkX2xvdHMnXSA9IExvdC5vYmplY3RzLmZpbHRlcihlYT1jb250ZXh0Wyd1c2VyX2VudGl0eSddLCBlYV9kZWxpdmVyeV9hY2NlcHRlZD1GYWxzZSwgc3RhdHVzPSdWYWxpZGF0ZWQnKQogICAgICAgIGNvbnRleHRbJ25iX2FmZmlsaWF0ZWRfbG90cyddID0gbGVuKGNvbnRleHRbJ2FmZmlsaWF0ZWRfbG90cyddKQogICAgICAgIGNvbnRleHRbJ25iX2NvbnRyb2xlc19kZ2VjJ10gPSAwCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHJlcXVlc3QsICphcmdzLCAqKmt3YXJncykKICAgIHdyYXAuX19kb2NfXyA9IGZ1bmN0aW9uLl9fZG9jX18KICAgIHdyYXAuX19uYW1lX18gPSBmdW5jdGlvbi5fX25hbWVfXwogICAgcmV0dXJuIHdyYXAKCgpkZWYgcmVzdHJpY3RfdG9fYWRtaW5pc3RyYXRvcnMoZnVuY3Rpb24pOgogICAgZGVmIHdyYXAocmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBjb250ZXh0ID0ga3dhcmdzWydjb250ZXh0J10KICAgICAgICBpZiBjb250ZXh0Wyd1c2VyX2VudGl0eSddLmVudGl0eV90eXBlICE9ICdBZG1pbmlzdHJhdGlvbic6CiAgICAgICAgICAgIHJhaXNlIFBlcm1pc3Npb25EZW5pZWQKICAgICAgICByZXR1cm4gZnVuY3Rpb24ocmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKQogICAgd3JhcC5fX2RvY19fID0gZnVuY3Rpb24uX19kb2NfXwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICB3cmFwLl9fbmFtZV9fID0gZnVuY3Rpb24uX19uYW1lX18KICAgIHJldHVybiB3cmFwCjx8ZmltX2VuZHw+"]
["c1c410248a8a3d09c5324829fc73110af90d2fd1-4","c1c410248a8a3d09c5324829fc73110af90d2fd1","PHxmaW1fcHJlZml4fD4KZnJvbSBjb3JlLm1vZGVscyBpbXBvcnQgVXNlclJpZ2h0cywgVXNlclByZWZlcmVuY2VzLCBMb3QKZnJvbSBkamFuZ28uY29yZS5leGNlcHRpb25zIGltcG9ydCBQZXJtaXNzaW9uRGVuaWVkCmZyb20gZGphbmdvLnNob3J0Y3V0cyBpbXBvcnQgcmVuZGVyCgoKZGVmIGVucmljaF93aXRoX3VzZXJfZGV0YWlscyhmdW5jdGlvbik6CiAgICBkZWYgd3JhcChyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHVzZXJfcmlnaHRzID0gVXNlclJpZ2h0cy5vYmplY3RzLmZpbHRlcih1c2VyPXJlcXVlc3QudXNlcikKICAgICAgICB1c2VyX3ByZWZlcmVuY2VzLCBjcmVhdGVkID0gVXNlclByZWZlcmVuY2VzLm9iamVjdHMuZ2V0X29yX2NyZWF0ZSh1c2VyPXJlcXVlc3QudXNlcikKICAgICAgICBpZiB1c2VyX3ByZWZlcmVuY2VzLmRlZmF1bHRfZW50aXR5ID09IE5vbmU6CiAgICAgICAgICAgIGlmIGxlbih1c2VyX3JpZ2h0cykgPT0gMDoKICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgJ3B1YmxpYy9ibGFua191c2VyLmh0bWwnLCB7fSkKICAgICAgICAgICAgZGVmYXVsdF9yaWdodCA9IHVzZXJfcmlnaHRzWzBdCiAgICAgICAgICAgIHVzZXJfcHJlZmVyZW5jZXMuZGVmYXVsdF9lbnRpdHkgPSBkZWZhdWx0X3JpZ2h0LmVudGl0eQogICAgICAgICAgICB1c2VyX3ByZWZlcmVuY2VzLnNhdmUoKQogICAgICAgIGNvbnRleHQgPSB7fQogICAgICAgIGNvbnRleHRbJ3VzZXJfbmFtZSddID0gcmVxdWVzdC51c2VyLm5hbWUKPHxmaW1faG9sZXw+CiAgICAgICAga3dhcmdzWydjb250ZXh0J10gPSBjb250ZXh0CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHJlcXVlc3QsICphcmdzLCAqKmt3YXJncykKICAgIHdyYXAuX19kb2NfXyA9IGZ1bmN0aW9uLl9fZG9jX18KICAgIHdyYXAuX19uYW1lX18gPSBmdW5jdGlvbi5fX25hbWVfXwogICAgcmV0dXJuIHdyYXAKCmRlZiByZXN0cmljdF90b19wcm9kdWNlcnMoZnVuY3Rpb24pOgogICAgZGVmIHdyYXAocmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBjb250ZXh0ID0ga3dhcmdzWydjb250ZXh0J10KICAgICAgICBpZiBjb250ZXh0Wyd1c2VyX2VudGl0eSddLmVudGl0eV90eXBlICE9ICdQcm9kdWN0ZXVyJzoKICAgICAgICAgICAgcmFpc2UgUGVybWlzc2lvbkRlbmllZAogICAgICAgIHJldHVybiBmdW5jdGlvbihyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpCiAgICB3cmFwLl9fZG9jX18gPSBmdW5jdGlvbi5fX2RvY19fCiAgICB3cmFwLl9fbmFtZV9fID0gZnVuY3Rpb24uX19uYW1lX18KICAgIHJldHVybiB3cmFwCgoKZGVmIHJlc3RyaWN0X3RvX29wZXJhdG9ycyhmdW5jdGlvbik6CiAgICBkZWYgd3JhcChyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIGNvbnRleHQgPSBrd2FyZ3NbJ2NvbnRleHQnXQogICAgICAgIGlmIGNvbnRleHRbJ3VzZXJfZW50aXR5J10uZW50aXR5X3R5cGUgIT0gJ09ww6lyYXRldXInOgogICAgICAgICAgICByYWlzZSBQZXJtaXNzaW9uRGVuaWVkCiAgICAgICAgY29udGV4dFsnYWZmaWxpYXRlZF9sb3RzJ10gPSBMb3Qub2JqZWN0cy5maWx0ZXIoZWE9Y29udGV4dFsndXNlcl9lbnRpdHknXSwgZWFfZGVsaXZlcnlfYWNjZXB0ZWQ9RmFsc2UsIHN0YXR1cz0nVmFsaWRhdGVkJykKICAgICAgICBjb250ZXh0WyduYl9hZmZpbGlhdGVkX2xvdHMnXSA9IGxlbihjb250ZXh0WydhZmZpbGlhdGVkX2xvdHMnXSkKICAgICAgICBjb250ZXh0WyduYl9jb250cm9sZXNfZGdlYyddID0gMAogICAgICAgIHJldHVybiBmdW5jdGlvbihyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpCiAgICB3cmFwLl9fZG9jX18gPSBmdW5jdGlvbi5fX2RvY19fCiAgICB3cmFwLl9fbmFtZV9fID0gZnVuY3Rpb24uX19uYW1lX18KICAgIHJldHVybiB3cmFwCgoKZGVmIHJlc3RyaWN0X3RvX2FkbWluaXN0cmF0b3JzKGZ1bmN0aW9uKToKICAgIGRlZiB3cmFwKHJlcXVlc3QsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgY29udGV4dCA9IGt3YXJnc1snY29udGV4dCddCiAgICAgICAgaWYgY29udGV4dFsndXNlcl9lbnRpdHknXS5lbnRpdHlfdHlwZSAhPSAnQWRtaW5pc3RyYXRpb24nOgogICAgICAgICAgICByYWlzZSBQZXJtaXNzaW9uRGVuaWVkCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHJlcXVlc3QsICphcmdzLCAqKmt3YXJncykKICAgIHdyYXAuX19kb2NfXyA9IGZ1bmN0aW9uLl9fZG9jX18KICAgIHdyYXAuX19uYW1lX18gPSBmdW5jdGlvbi5fX25hbWVfXwogICAgcmV0dXJuIHdyYXAKPHxmaW1fc3VmZml4fD4KICAgICAgICBjb250ZXh0WyduYl9lbnRpdGllcyddID0gbGVuKHVzZXJfcmlnaHRzKQogICAgICAgIGNvbnRleHRbJ2VudGl0aWVzJ10gPSBbdS5lbnRpdHkgZm9yIHUgaW4gdXNlcl9yaWdodHNdCiAgICAgICAgY29udGV4dFsndXNlcl9lbnRpdHknXSA9IHVzZXJfcHJlZmVyZW5jZXMuZGVmYXVsdF9lbnRpdHkKICAgICAgICBjb250ZXh0Wyd1c2VyX2VudGl0eV9uYW1lJ10gPSB1c2VyX3ByZWZlcmVuY2VzLmRlZmF1bHRfZW50aXR5Lm5hbWUKPHxmaW1fZW5kfD4="]
["6b4ee4ce63f0047cf17426a31345c97b910dd74d-1","6b4ee4ce63f0047cf17426a31345c97b910dd74d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRlbWlzdG9tb2NrIGFzIGRlbWlzdG8KZnJvbSBDb21tb25TZXJ2ZXJQeXRob24gaW1wb3J0ICoKZnJvbSBDb21tb25TZXJ2ZXJVc2VyUHl0aG9uIGltcG9ydCAqCgphcmdzID0gZGljdChkZW1pc3RvLmFyZ3MoKSkKYXJnc1snaW5wdXRUZXh0J10gPSBhcmdzLmdldCgnZW1haWxTdWJqZWN0JywgJycpICsgJyAnICsgYXJncy5nZXQoJ2VtYWlsQm9keScsICcnKQpyZXMgPSBkZW1pc3RvLmV4ZWN1dGVDb21tYW5kKCdEQm90UHJlZGljdFRleHRMYWJlbCcsIGFyZ3MpCnJlcyA9IHJlc1stMV0KaWYgaXNfZXJyb3IocmVzKToKICAgIHJldHVybl9lcnJvcihnZXRfZXJyb3IocmVzKSkKb2xkX2NvbnRleHRfa2V5X3ByZWZpeCA9ICdEQm90UHJlZGljdFRleHRMYWJlbCcKbmV3X2NvbnRleHRfa2V5X3ByZWZpeCA9ICdEQm90UHJlZGljdFBoaXNoaW5nTGFiZWwnCmVjID0gcmVzLmdldCgnRW50cnlDb250ZXh0Jywge30pIG9yIHt9CmZvciBrZXkgaW4gZWM6CiAgICBpZiBrZXkuc3RhcnRzd2l0aChvbGRfY29udGV4dF9rZXlfcHJlZml4KToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIG5ld19rZXkgPSBuZXdfY29udGV4dF9rZXlfcHJlZml4ICsga2V5LmxzdHJpcChvbGRfY29udGV4dF9rZXlfcHJlZml4KQogICAgICAgIGVjW25ld19jb250ZXh0X2tleV9wcmVmaXhdID0gZWMucG9wKG9sZF9jb250ZXh0X2tleV9wcmVmaXgpCjx8ZmltX2VuZHw+"]
["6b4ee4ce63f0047cf17426a31345c97b910dd74d-2","6b4ee4ce63f0047cf17426a31345c97b910dd74d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRlbWlzdG9tb2NrIGFzIGRlbWlzdG8KZnJvbSBDb21tb25TZXJ2ZXJQeXRob24gaW1wb3J0ICoKZnJvbSBDb21tb25TZXJ2ZXJVc2VyUHl0aG9uIGltcG9ydCAqCgphcmdzID0gZGljdChkZW1pc3RvLmFyZ3MoKSkKYXJnc1snaW5wdXRUZXh0J10gPSBhcmdzLmdldCgnZW1haWxTdWJqZWN0JywgJycpICsgJyAnICsgYXJncy5nZXQoJ2VtYWlsQm9keScsICcnKQpyZXMgPSBkZW1pc3RvLmV4ZWN1dGVDb21tYW5kKCdEQm90UHJlZGljdFRleHRMYWJlbCcsIGFyZ3MpCnJlcyA9IHJlc1stMV0KaWYgaXNfZXJyb3IocmVzKToKICAgIHJldHVybl9lcnJvcihnZXRfZXJyb3IocmVzKSkKb2xkX2NvbnRleHRfa2V5X3ByZWZpeCA9ICdEQm90UHJlZGljdFRleHRMYWJlbCcKbmV3X2NvbnRleHRfa2V5X3ByZWZpeCA9ICdEQm90UHJlZGljdFBoaXNoaW5nTGFiZWwnCmVjID0gcmVzLmdldCgnRW50cnlDb250ZXh0Jywge30pIG9yIHt9CmZvciBrZXkgaW4gZWM6CiAgICBpZiBrZXkuc3RhcnRzd2l0aChvbGRfY29udGV4dF9rZXlfcHJlZml4KToKICAgICAgICBuZXdfa2V5ID0gbmV3X2NvbnRleHRfa2V5X3ByZWZpeCArIGtleS5sc3RyaXAob2xkX2NvbnRleHRfa2V5X3ByZWZpeCkKPHxmaW1faG9sZXw+CnJlc1snRW50cnlDb250ZXh0J10gPSBlYwpkZW1pc3RvLnJlc3VsdHMocmVzKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGVjW25ld19jb250ZXh0X2tleV9wcmVmaXhdID0gZWMucG9wKG9sZF9jb250ZXh0X2tleV9wcmVmaXgpCjx8ZmltX2VuZHw+"]
["6b4ee4ce63f0047cf17426a31345c97b910dd74d-3","6b4ee4ce63f0047cf17426a31345c97b910dd74d","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgphcmdzID0gZGljdChkZW1pc3RvLmFyZ3MoKSkKYXJnc1snaW5wdXRUZXh0J10gPSBhcmdzLmdldCgnZW1haWxTdWJqZWN0JywgJycpICsgJyAnICsgYXJncy5nZXQoJ2VtYWlsQm9keScsICcnKQpyZXMgPSBkZW1pc3RvLmV4ZWN1dGVDb21tYW5kKCdEQm90UHJlZGljdFRleHRMYWJlbCcsIGFyZ3MpCnJlcyA9IHJlc1stMV0KaWYgaXNfZXJyb3IocmVzKToKICAgIHJldHVybl9lcnJvcihnZXRfZXJyb3IocmVzKSkKb2xkX2NvbnRleHRfa2V5X3ByZWZpeCA9ICdEQm90UHJlZGljdFRleHRMYWJlbCcKbmV3X2NvbnRleHRfa2V5X3ByZWZpeCA9ICdEQm90UHJlZGljdFBoaXNoaW5nTGFiZWwnCmVjID0gcmVzLmdldCgnRW50cnlDb250ZXh0Jywge30pIG9yIHt9CmZvciBrZXkgaW4gZWM6CiAgICBpZiBrZXkuc3RhcnRzd2l0aChvbGRfY29udGV4dF9rZXlfcHJlZml4KToKICAgICAgICBuZXdfa2V5ID0gbmV3X2NvbnRleHRfa2V5X3ByZWZpeCArIGtleS5sc3RyaXAob2xkX2NvbnRleHRfa2V5X3ByZWZpeCkKICAgICAgICBlY1tuZXdfY29udGV4dF9rZXlfcHJlZml4XSA9IGVjLnBvcChvbGRfY29udGV4dF9rZXlfcHJlZml4KQpyZXNbJ0VudHJ5Q29udGV4dCddID0gZWMKZGVtaXN0by5yZXN1bHRzKHJlcykKPHxmaW1fc3VmZml4fD4KaW1wb3J0IGRlbWlzdG9tb2NrIGFzIGRlbWlzdG8KZnJvbSBDb21tb25TZXJ2ZXJQeXRob24gaW1wb3J0ICoKZnJvbSBDb21tb25TZXJ2ZXJVc2VyUHl0aG9uIGltcG9ydCAqCgo8fGZpbV9lbmR8Pg=="]
["c17ac0ec8d83a0eaa9c3f3baa60a84aea89fc2d5-1","c17ac0ec8d83a0eaa9c3f3baa60a84aea89fc2d5",{"$cut":{"chars":17724,"head":"PHxmaW1fcHJlZml4fD4KIiIiClRydW5jYXRlZCBMaW5lYXIgUmVncmVzc2lvbi4KIiIiCgppbXBvcnQgdG9yY2ggYXMgY2gKZnJvbSB0b3JjaCBpbXBvcnQgVGVuc29yCmltcG9ydCBjb3gKaW1wb3J0IHdhcm5pbmdzCmltcG9ydCBtYXRoCgpmcm9tIC5saW5lYXJfbW9kZWwgaW1wb3J0IFRydW5jYXRlZExpbmVhck1vZGVsCmZyb20gLnN0YXRzIGltcG9ydCBzdGF0cwpmcm9tIC4udHJhaW5lciBpbXBvcnQgVHJhaW5lcgpmcm9tIC4uZ3JhZCBpbXBvcnQgVHJ1bmNhdGVkTVNFLCBUcnVuY2F0ZWRVbmtub3duVmFyaWFuY2VNU0UKZnJvbSAuLnV0aWxzLmRhdGFzZXRzIGltcG9ydCBtYWtlX3RyYWluX2FuZF92YWwKZnJvbSAuLnV0aWxzLmhlbHBlcnMgaW1wb3J0IFBhcmFtZXRlcnMsIEJvdW5kcwpmcm9tIC4udXRpbHMuZGVmYXVsdHMgaW1wb3J0IGNoZWNrX2FuZF9maWxsX2FyZ3MsIFRSQUlORVJfREVGQVVMVFMsIERFTFBISV9ERUZBVUxUUywgVFJVTkNfUkVHX0RFRkFVTFRTCgoKY2xhc3MgVHJ1bmNhdGVkTGluZWFyUmVncmVzc2lvbihzdGF0cyk6CiAgICAiIiIKICAgIFRydW5jYXRlZCBsaW5lYXIgcmVncmVzc2lvbiBjbGFzcy4gU3VwcG9ydHMgdHJ1bmNhdGVkIGxpbmVhciByZWdyZXNzaW9uCiAgICB3aXRoIGtub3duIG5vaXNlLCB1bmtub3duIG5vaXNlLCBhbmQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIE1vZHVsZSB1c2VzIAogICAgZGVscGhpLnRyYWluZXIuVHJhaW5lciB0byB0cmFpbiB0cnVuY2F0ZWQgbGluZWFyIHJlZ3Jlc3Npb24gYnkgcGVyZm9ybWluZyAKICAgIHByb2plY3RlZCBzdG9jaGFzdGljIGdyYWRpZW50IGRlc2NlbnQgb24gdGhlIHRydW5jYXRlZCBwb3B1bGF0aW9uIGxvZyBsaWtlbGlob29kLiAKICAgIE1vZHVsZSByZXF1aXJlcyB0aGUgdXNlciB0byBzcGVjaWZ5IGFuIG9yYWNsZSBmcm9tIHRoZSBkZWxwaGkub3JhY2xlLm9yYWNsZSBjbGFzcywgCiAgICBhbmQgdGhlIHN1cnZpdmFsIHByb2JhYmlsaXR5LiAKICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICBhcmdzOiBQYXJhbWV0ZXJzLCAKICAgICAgICAgICAgICAgIHN0b3JlOiBjb3guc3RvcmUuU3RvcmU9Tm9uZSk6CiAgICAgICAgIiIiCiAgICAgICAgQXJnczogCiAgICAgICAgICAgIHBoaSAoZGVscGhpLm9yYWNsZS5vcmFjbGUpIDogb3JhY2xlIG9iamVjdCBmb3IgdHJ1bmNhdGVkIHJlZ3Jlc3Npb24gbW9kZWwgCiAgICAgICAgICAgIGFscGhhIChmbG9hdCkgOiBzdXJ2aXZhbCBwcm9iYWJpbGl0eSBmb3IgdHJ1bmNhdGVkIHJlZ3Jlc3Npb24gbW9kZWwKICAgICAgICAgICAgZml0X2ludGVyY2VwdCAoYm9vbCkgOiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBmaXQgYSBpbnRlcmNlcHQgb3Igbm90IAogICAgICAgICAgICB2YWwgKGludCkgOiBudW1iZXIgb2Ygc2FtcGxlcyB0byB1c2UgZm9yIHZhbGlkYXRpb24gc2V0IAogICAgICAgICAgICB0b2wgKGZsb2F0KSA6IGdyYWRpZW50IHRvbGVyYW5jZSB0aHJlc2hvbGQgCiAgICAgICAgICAgIHdvcmtlcnMgKGludCkgOiBudW1iZXIgb2Ygd29ya2VycyB0byBzcGF3biAKICAgICAgICAgICAgciAoZmxvYXQpIDogc2l6ZSBmb3IgcHJvamVjdGlvbiBzZXQgcmFkaXVzIAogICAgICAgICAgICByYXRlIChmbG9hdCk6IHJhdGUgYXQgd2hpY2ggdG8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIHByb2plY3Rpb24gc2V0LCB3aGVuIHByb2NlZHVyZSBkb2VzIG5vdCBjb252ZXJnZSAtIGlucHV0IGFzIGEgZGVjaW1hbCBwZXJjZW50YWdlCiAgICAgICAgICAgIG51bV9zYW1wbGVzIChpbnQpIDogbnVtYmVyIG9mIHNhbXBsZXMgdG8gc2FtcGxlIGluIGdyYWRpZW50IAogICAgICAgICAgICBiYXRjaF9zaXplIChpbnQpIDogYmF0Y2ggc2l6ZQogICAgICAgICAgICBsciAoZmxvYXQpIDogaW5pdGlhbCBsZWFybmluZyByYXRlIGZvciByZWdyZXNzaW9uIHdlaWdodCBwYXJhbWV0ZXJzIAogICAgICAgICAgICB2YXJfbHIgKGZsb2F0KSA6IGluaXRpYWwgbGVhcm5pbmcgcmF0ZSB0byB1c2UgZm9yIHZhcmlhbmNlIHBhcmFtZXRlciBpbiB0aGUgc2V0dGlnbiB3aGVyZSB0aGUgdmFyaWFuY2UgaXMgdW5rbm93biAKICAgICAgICAgICAgc3RlcF9sciAoaW50KSA6IG51bWJlciBvZiBncmFkaWVudCBzdGVwcyB0byB0YWtlIGJlZm9yZSBkZWNheWluZyBsZWFybmluZyByYXRlIGZvciBzdGVwIGxlYXJuaW5nIHJhdGUgCiAgICAgICAgICAgIGN1c3RvbV9scl9tdWx0aXBsaWVyIChzdHIpIDogImNvc2luZSIgKGNvc2luZSBhbm5lYWxpbmcpLCAiYWRhbSIgKGFkYW0gb3B0aW1pemVyKSAtIGRpZmZlcmVudCBsZWFybmluZyByYXRlIHNjaGVkdWxlcnMgYXZhaWxhYmxlCiAgICAgICAgICAgIGxyX2ludGVycG9sYXRpb24gKHN0cikgOiAibGluZWFyIiBsaW5lYXIgaW50ZXJwb2xhdGlvbgogICAgICAgICAgICBzdGVwX2xyX2dhbW1hIChmbG9hdCkgOiBhbW91bnQgdG8gZGVjYXkgbGVhcm5pbmcgcmF0ZSB3aGVuIHJ1bm5pbmcgc3RlcCBsZWFybmluZyByYXRlCiAgICAgICAgICAgIG1vbWVudHVtIChmbG9hdCkgOiBtb21lbnR1bSBmb3IgU0dEIG9wdGltaXplciAKICAgICAgICAgICAgZXBzIChmbG9hdCkgOiAgZXBzaWxvbiB2YWx1ZSBmb3IgZ3JhZGllbnQgdG8gcHJldmVudCB6ZXJvIGluIGRlbm9taW5hdG9yCiAgICAgICAgICAgIHN0b3JlIChjb3guc3RvcmUuU3RvcmUpIDogY294IHN0b3JlIG9iamVjdCBmb3IgbG9nZ2luZyAKICAgICAgICAiIiIKICAgICAgICBzdXBlcihUcnVuY2F0ZWRMaW5lYXJSZWdyZXNzaW9uKS5fX2luaXRfXygpCiAgICAgICAgIyBpbnN0YW5jZSB2YXJpYWJsZXMKICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShhcmdzLCBQYXJhbWV0ZXJzKSwgImFyZ3MgaXMgdHlwZToge30uIGV4cGVjdGluZyBhcmdzIHRvIGJlIHR5cGUgZGVscGhpLnV0aWxzLmhlbHBlcnMuUGFyYW1ldGVycyIKICAgICAgICBhc3NlcnQgc3RvcmUgaXMgTm9uZSBvciBpc2luc3RhbmNlKHN0b3JlLCBjb3guc3RvcmUuU3RvcmUpLCAic3RvcmUgaXMgdHlwZToge30uIGV4cGVjdGluZyBjb3guc3RvcmUuU3RvcmUuIi5mb3JtYXQodHlwZShz"}}]
["c17ac0ec8d83a0eaa9c3f3baa60a84aea89fc2d5-2","c17ac0ec8d83a0eaa9c3f3baa60a84aea89fc2d5","PHxmaW1fcHJlZml4fD4KIiIiClRydW5jYXRlZCBMaW5lYXIgUmVncmVzc2lvbi4KIiIiCgppbXBvcnQgdG9yY2ggYXMgY2gKZnJvbSB0b3JjaCBpbXBvcnQgVGVuc29yCmltcG9ydCBjb3gKaW1wb3J0IHdhcm5pbmdzCmltcG9ydCBtYXRoCgpmcm9tIC5saW5lYXJfbW9kZWwgaW1wb3J0IFRydW5jYXRlZExpbmVhck1vZGVsCmZyb20gLnN0YXRzIGltcG9ydCBzdGF0cwpmcm9tIC4udHJhaW5lciBpbXBvcnQgVHJhaW5lcgpmcm9tIC4uZ3JhZCBpbXBvcnQgVHJ1bmNhdGVkTVNFLCBUcnVuY2F0ZWRVbmtub3duVmFyaWFuY2VNU0UKZnJvbSAuLnV0aWxzLmRhdGFzZXRzIGltcG9ydCBtYWtlX3RyYWluX2FuZF92YWwKZnJvbSAuLnV0aWxzLmhlbHBlcnMgaW1wb3J0IFBhcmFtZXRlcnMsIEJvdW5kcwpmcm9tIC4udXRpbHMuZGVmYXVsdHMgaW1wb3J0IGNoZWNrX2FuZF9maWxsX2FyZ3MsIFRSQUlORVJfREVGQVVMVFMsIERFTFBISV9ERUZBVUxUUywgVFJVTkNfUkVHX0RFRkFVTFRTCgoKY2xhc3MgVHJ1bmNhdGVkTGluZWFyUmVncmVzc2lvbihzdGF0cyk6CiAgICAiIiIKICAgIFRydW5jYXRlZCBsaW5lYXIgcmVncmVzc2lvbiBjbGFzcy4gU3VwcG9ydHMgdHJ1bmNhdGVkIGxpbmVhciByZWdyZXNzaW9uCiAgICB3aXRoIGtub3duIG5vaXNlLCB1bmtub3duIG5vaXNlLCBhbmQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIE1vZHVsZSB1c2VzIAogICAgZGVscGhpLnRyYWluZXIuVHJhaW5lciB0byB0cmFpbiB0cnVuY2F0ZWQgbGluZWFyIHJlZ3Jlc3Npb24gYnkgcGVyZm9ybWluZyAKICAgIHByb2plY3RlZCBzdG9jaGFzdGljIGdyYWRpZW50IGRlc2NlbnQgb24gdGhlIHRydW5jYXRlZCBwb3B1bGF0aW9uIGxvZyBsaWtlbGlob29kLiAKICAgIE1vZHVsZSByZXF1aXJlcyB0aGUgdXNlciB0byBzcGVjaWZ5IGFuIG9yYWNsZSBmcm9tIHRoZSBkZWxwaGkub3JhY2xlLm9yYWNsZSBjbGFzcywgCiAgICBhbmQgdGhlIHN1cnZpdmFsIHByb2JhYmlsaXR5LiAKICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICBhcmdzOiBQYXJhbWV0ZXJzLCAKICAgICAgICAgICAgICAgIHN0b3JlOiBjb3guc3RvcmUuU3RvcmU9Tm9uZSk6CiAgICAgICAgIiIiCiAgICAgICAgQXJnczogCiAgICAgICAgICAgIHBoaSAoZGVscGhpLm9yYWNsZS5vcmFjbGUpIDogb3JhY2xlIG9iamVjdCBmb3IgdHJ1bmNhdGVkIHJlZ3Jlc3Npb24gbW9kZWwgCiAgICAgICAgICAgIGFscGhhIChmbG9hdCkgOiBzdXJ2aXZhbCBwcm9iYWJpbGl0eSBmb3IgdHJ1bmNhdGVkIHJlZ3Jlc3Npb24gbW9kZWwKICAgICAgICAgICAgZml0X2ludGVyY2VwdCAoYm9vbCkgOiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBmaXQgYSBpbnRlcmNlcHQgb3Igbm90IAogICAgICAgICAgICB2YWwgKGludCkgOiBudW1iZXIgb2Ygc2FtcGxlcyB0byB1c2UgZm9yIHZhbGlkYXRpb24gc2V0IAogICAgICAgICAgICB0b2wgKGZsb2F0KSA6IGdyYWRpZW50IHRvbGVyYW5jZSB0aHJlc2hvbGQgCiAgICAgICAgICAgIHdvcmtlcnMgKGludCkgOiBudW1iZXIgb2Ygd29ya2VycyB0byBzcGF3biAKICAgICAgICAgICAgciAoZmxvYXQpIDogc2l6ZSBmb3IgcHJvamVjdGlvbiBzZXQgcmFkaXVzIAogICAgICAgICAgICByYXRlIChmbG9hdCk6IHJhdGUgYXQgd2hpY2ggdG8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIHByb2plY3Rpb24gc2V0LCB3aGVuIHByb2NlZHVyZSBkb2VzIG5vdCBjb252ZXJnZSAtIGlucHV0IGFzIGEgZGVjaW1hbCBwZXJjZW50YWdlCiAgICAgICAgICAgIG51bV9zYW1wbGVzIChpbnQpIDogbnVtYmVyIG9mIHNhbXBsZXMgdG8gc2FtcGxlIGluIGdyYWRpZW50IAogICAgICAgICAgICBiYXRjaF9zaXplIChpbnQpIDogYmF0Y2ggc2l6ZQogICAgICAgICAgICBsciAoZmxvYXQpIDogaW5pdGlhbCBsZWFybmluZyByYXRlIGZvciByZWdyZXNzaW9uIHdlaWdodCBwYXJhbWV0ZXJzIAogICAgICAgICAgICB2YXJfbHIgKGZsb2F0KSA6IGluaXRpYWwgbGVhcm5pbmcgcmF0ZSB0byB1c2UgZm9yIHZhcmlhbmNlIHBhcmFtZXRlciBpbiB0aGUgc2V0dGlnbiB3aGVyZSB0aGUgdmFyaWFuY2UgaXMgdW5rbm93biAKICAgICAgICAgICAgc3RlcF9sciAoaW50KSA6IG51bWJlciBvZiBncmFkaWVudCBzdGVwcyB0byB0YWtlIGJlZm9yZSBkZWNheWluZyBsZWFybmluZyByYXRlIGZvciBzdGVwIGxlYXJuaW5nIHJhdGUgCiAgICAgICAgICAgIGN1c3RvbV9scl9tdWx0aXBsaWVyIChzdHIpIDogImNvc2luZSIgKGNvc2luZSBhbm5lYWxpbmcpLCAiYWRhbSIgKGFkYW0gb3B0aW1pemVyKSAtIGRpZmZlcmVudCBsZWFybmluZyByYXRlIHNjaGVkdWxlcnMgYXZhaWxhYmxlCiAgICAgICAgICAgIGxyX2ludGVycG9sYXRpb24gKHN0cikgOiAibGluZWFyIiBsaW5lYXIgaW50ZXJwb2xhdGlvbgogICAgICAgICAgICBzdGVwX2xyX2dhbW1hIChmbG9hdCkgOiBhbW91bnQgdG8gZGVjYXkgbGVhcm5pbmcgcmF0ZSB3aGVuIHJ1bm5pbmcgc3RlcCBsZWFybmluZyByYXRlCiAgICAgICAgICAgIG1vbWVudHVtIChmbG9hdCkgOiBtb21lbnR1bSBmb3IgU0dEIG9wdGltaXplciAKICAgICAgICAgICAgZXBzIChmbG9hdCkgOiAgZXBzaWxvbiB2YWx1ZSBmb3IgZ3JhZGllbnQgdG8gcHJldmVudCB6ZXJvIGluIGRlbm9taW5hdG9yCiAgICAgICAgICAgIHN0b3JlIChjb3guc3RvcmUuU3RvcmUpIDogY294IHN0b3JlIG9iamVjdCBmb3IgbG9nZ2luZyAKICAgICAgICAiIiIKICAgICAgICBzdXBlcihUcnVuY2F0ZWRMaW5lYXJSZWdyZXNzaW9uKS5fX2luaXRfXygpCiAgICAgICAgIyBpbnN0YW5jZSB2YXJpYWJsZXMKICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShhcmdzLCBQYXJhbWV0ZXJzKSwgImFyZ3MgaXMgdHlwZToge30uIGV4cGVjdGluZyBhcmdzIHRvIGJlIHR5cGUgZGVscGhpLnV0aWxzLmhlbHBlcnMuUGFyYW1ldGVycyIKICAgICAgICBhc3NlcnQgc3RvcmUgaXMgTm9uZSBvciBpc2luc3RhbmNlKHN0b3JlLCBjb3guc3RvcmUuU3RvcmUpLCAic3RvcmUgaXMgdHlwZToge30uIGV4cGVjdGluZyBjb3guc3RvcmUuU3RvcmUuIi5mb3JtYXQodHlwZShzdG9yZSkpCiAgICAgICAgc2VsZi5zdG9yZSA9IHN0b3JlIAogICAgICAgIHNlbGYudHJ1bmNfcmVnID0gTm9uZQogICAgICAgICMgYWxnb3JpdGhtIGh5cGVycGFyYW1ldGVycwogICAgICAgIFRSVU5DX1JFR19ERUZBVUxUUy51cGRhdGUoVFJBSU5FUl9ERUZBVUxUUykKICAgICAgICBUUlVOQ19SRUdfREVGQVVMVFMudXBkYXRlKERFTFBISV9ERUZBVUxUUykKICAgICAgICBzZWxmLmFyZ3MgPSBjaGVja19hbmRfZmlsbF9hcmdzKGFyZ3MsIFRSVU5DX1JFR19ERUZBVUxUUykKCiAgICBkZWYgZml0KHNlbGYsIFg6IFRlbnNvciwgeTogVGVuc29yKToKICAgICAgICAiIiIKICAgICAgICBUcmFpbiB0cnVuY2F0ZWQgbGluZWFyIHJlZ3Jlc3Npb24gbW9kZWwgYnkgcnVubmluZyBQU0dEIG9uIHRoZSB0cnVuY2F0ZWQgbmVnYXRpdmUgCiAgICAgICAgcG9wdWxhdGlvbiBsb2cgbGlrZWxpaG9vZC4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIEFyZ3M6IAogICAgICAgICAgICBYICh0b3JjaC5UZW5zb3IpOiBpbnB1dCBmZWF0dXJlIGNvdmFyaWF0ZXMgbnVtX3NhbXBsZXMgYnkgZGltcwogICAgICAgICAgICB5ICh0b3JjaC5UZW5zb3IpOiBkZXBlbmRlbnQgdmFyaWFibGUgcHJlZGljdGlvbnMgbnVtX3NhbXBsZXMgYnkgMQogICAgICAgICIiIgo8fGZpbV9lbmR8Pg=="]
["c17ac0ec8d83a0eaa9c3f3baa60a84aea89fc2d5-3","c17ac0ec8d83a0eaa9c3f3baa60a84aea89fc2d5",{"$cut":{"chars":17724,"head":"PHxmaW1fcHJlZml4fD4KIiIiClRydW5jYXRlZCBMaW5lYXIgUmVncmVzc2lvbi4KIiIiCgppbXBvcnQgdG9yY2ggYXMgY2gKZnJvbSB0b3JjaCBpbXBvcnQgVGVuc29yCmltcG9ydCBjb3gKaW1wb3J0IHdhcm5pbmdzCmltcG9ydCBtYXRoCgpmcm9tIC5saW5lYXJfbW9kZWwgaW1wb3J0IFRydW5jYXRlZExpbmVhck1vZGVsCmZyb20gLnN0YXRzIGltcG9ydCBzdGF0cwpmcm9tIC4udHJhaW5lciBpbXBvcnQgVHJhaW5lcgpmcm9tIC4uZ3JhZCBpbXBvcnQgVHJ1bmNhdGVkTVNFLCBUcnVuY2F0ZWRVbmtub3duVmFyaWFuY2VNU0UKZnJvbSAuLnV0aWxzLmRhdGFzZXRzIGltcG9ydCBtYWtlX3RyYWluX2FuZF92YWwKZnJvbSAuLnV0aWxzLmhlbHBlcnMgaW1wb3J0IFBhcmFtZXRlcnMsIEJvdW5kcwpmcm9tIC4udXRpbHMuZGVmYXVsdHMgaW1wb3J0IGNoZWNrX2FuZF9maWxsX2FyZ3MsIFRSQUlORVJfREVGQVVMVFMsIERFTFBISV9ERUZBVUxUUywgVFJVTkNfUkVHX0RFRkFVTFRTCgoKY2xhc3MgVHJ1bmNhdGVkTGluZWFyUmVncmVzc2lvbihzdGF0cyk6CiAgICAiIiIKICAgIFRydW5jYXRlZCBsaW5lYXIgcmVncmVzc2lvbiBjbGFzcy4gU3VwcG9ydHMgdHJ1bmNhdGVkIGxpbmVhciByZWdyZXNzaW9uCiAgICB3aXRoIGtub3duIG5vaXNlLCB1bmtub3duIG5vaXNlLCBhbmQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIE1vZHVsZSB1c2VzIAogICAgZGVscGhpLnRyYWluZXIuVHJhaW5lciB0byB0cmFpbiB0cnVuY2F0ZWQgbGluZWFyIHJlZ3Jlc3Npb24gYnkgcGVyZm9ybWluZyAKICAgIHByb2plY3RlZCBzdG9jaGFzdGljIGdyYWRpZW50IGRlc2NlbnQgb24gdGhlIHRydW5jYXRlZCBwb3B1bGF0aW9uIGxvZyBsaWtlbGlob29kLiAKICAgIE1vZHVsZSByZXF1aXJlcyB0aGUgdXNlciB0byBzcGVjaWZ5IGFuIG9yYWNsZSBmcm9tIHRoZSBkZWxwaGkub3JhY2xlLm9yYWNsZSBjbGFzcywgCiAgICBhbmQgdGhlIHN1cnZpdmFsIHByb2JhYmlsaXR5LiAKICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICBhcmdzOiBQYXJhbWV0ZXJzLCAKICAgICAgICAgICAgICAgIHN0b3JlOiBjb3guc3RvcmUuU3RvcmU9Tm9uZSk6CiAgICAgICAgIiIiCiAgICAgICAgQXJnczogCiAgICAgICAgICAgIHBoaSAoZGVscGhpLm9yYWNsZS5vcmFjbGUpIDogb3JhY2xlIG9iamVjdCBmb3IgdHJ1bmNhdGVkIHJlZ3Jlc3Npb24gbW9kZWwgCiAgICAgICAgICAgIGFscGhhIChmbG9hdCkgOiBzdXJ2aXZhbCBwcm9iYWJpbGl0eSBmb3IgdHJ1bmNhdGVkIHJlZ3Jlc3Npb24gbW9kZWwKICAgICAgICAgICAgZml0X2ludGVyY2VwdCAoYm9vbCkgOiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBmaXQgYSBpbnRlcmNlcHQgb3Igbm90IAogICAgICAgICAgICB2YWwgKGludCkgOiBudW1iZXIgb2Ygc2FtcGxlcyB0byB1c2UgZm9yIHZhbGlkYXRpb24gc2V0IAogICAgICAgICAgICB0b2wgKGZsb2F0KSA6IGdyYWRpZW50IHRvbGVyYW5jZSB0aHJlc2hvbGQgCiAgICAgICAgICAgIHdvcmtlcnMgKGludCkgOiBudW1iZXIgb2Ygd29ya2VycyB0byBzcGF3biAKICAgICAgICAgICAgciAoZmxvYXQpIDogc2l6ZSBmb3IgcHJvamVjdGlvbiBzZXQgcmFkaXVzIAogICAgICAgICAgICByYXRlIChmbG9hdCk6IHJhdGUgYXQgd2hpY2ggdG8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIHByb2plY3Rpb24gc2V0LCB3aGVuIHByb2NlZHVyZSBkb2VzIG5vdCBjb252ZXJnZSAtIGlucHV0IGFzIGEgZGVjaW1hbCBwZXJjZW50YWdlCiAgICAgICAgICAgIG51bV9zYW1wbGVzIChpbnQpIDogbnVtYmVyIG9mIHNhbXBsZXMgdG8gc2FtcGxlIGluIGdyYWRpZW50IAogICAgICAgICAgICBiYXRjaF9zaXplIChpbnQpIDogYmF0Y2ggc2l6ZQogICAgICAgICAgICBsciAoZmxvYXQpIDogaW5pdGlhbCBsZWFybmluZyByYXRlIGZvciByZWdyZXNzaW9uIHdlaWdodCBwYXJhbWV0ZXJzIAogICAgICAgICAgICB2YXJfbHIgKGZsb2F0KSA6IGluaXRpYWwgbGVhcm5pbmcgcmF0ZSB0byB1c2UgZm9yIHZhcmlhbmNlIHBhcmFtZXRlciBpbiB0aGUgc2V0dGlnbiB3aGVyZSB0aGUgdmFyaWFuY2UgaXMgdW5rbm93biAKICAgICAgICAgICAgc3RlcF9sciAoaW50KSA6IG51bWJlciBvZiBncmFkaWVudCBzdGVwcyB0byB0YWtlIGJlZm9yZSBkZWNheWluZyBsZWFybmluZyByYXRlIGZvciBzdGVwIGxlYXJuaW5nIHJhdGUgCiAgICAgICAgICAgIGN1c3RvbV9scl9tdWx0aXBsaWVyIChzdHIpIDogImNvc2luZSIgKGNvc2luZSBhbm5lYWxpbmcpLCAiYWRhbSIgKGFkYW0gb3B0aW1pemVyKSAtIGRpZmZlcmVudCBsZWFybmluZyByYXRlIHNjaGVkdWxlcnMgYXZhaWxhYmxlCiAgICAgICAgICAgIGxyX2ludGVycG9sYXRpb24gKHN0cikgOiAibGluZWFyIiBsaW5lYXIgaW50ZXJwb2xhdGlvbgogICAgICAgICAgICBzdGVwX2xyX2dhbW1hIChmbG9hdCkgOiBhbW91bnQgdG8gZGVjYXkgbGVhcm5pbmcgcmF0ZSB3aGVuIHJ1bm5pbmcgc3RlcCBsZWFybmluZyByYXRlCiAgICAgICAgICAgIG1vbWVudHVtIChmbG9hdCkgOiBtb21lbnR1bSBmb3IgU0dEIG9wdGltaXplciAKICAgICAgICAgICAgZXBzIChmbG9hdCkgOiAgZXBzaWxvbiB2YWx1ZSBmb3IgZ3JhZGllbnQgdG8gcHJldmVudCB6ZXJvIGluIGRlbm9taW5hdG9yCiAgICAgICAgICAgIHN0b3JlIChjb3guc3RvcmUuU3RvcmUpIDogY294IHN0b3JlIG9iamVjdCBmb3IgbG9nZ2luZyAKICAgICAgICAiIiIKICAgICAgICBzdXBlcihUcnVuY2F0ZWRMaW5lYXJSZWdyZXNzaW9uKS5fX2luaXRfXygpCiAgICAgICAgIyBpbnN0YW5jZSB2YXJpYWJsZXMKICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShhcmdzLCBQYXJhbWV0ZXJzKSwgImFyZ3MgaXMgdHlwZToge30uIGV4cGVjdGluZyBhcmdzIHRvIGJlIHR5cGUgZGVscGhpLnV0aWxzLmhlbHBlcnMuUGFyYW1ldGVycyIKICAgICAgICBhc3NlcnQgc3RvcmUgaXMgTm9uZSBvciBpc2luc3RhbmNlKHN0b3JlLCBjb3guc3RvcmUuU3RvcmUpLCAic3RvcmUgaXMgdHlwZToge30uIGV4cGVjdGluZyBjb3guc3RvcmUuU3RvcmUuIi5mb3JtYXQodHlwZShz"}}]
["2e29bd0934b60347dd5ddc7a5cf6090a66103ef8-1","2e29bd0934b60347dd5ddc7a5cf6090a66103ef8","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBweXRlc3QKCmZyb20gc2VudHJ5LnRlc3R1dGlscyBpbXBvcnQgUGVybWlzc2lvblRlc3RDYXNlLCBUZXN0Q2FzZQoKCmNsYXNzIE9yZ2FuaXphdGlvbkludGVncmF0aW9uU2V0dXBQZXJtaXNzaW9uVGVzdChQZXJtaXNzaW9uVGVzdENhc2UpOgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIHN1cGVyKE9yZ2FuaXphdGlvbkludGVncmF0aW9uU2V0dXBQZXJtaXNzaW9uVGVzdCwgc2VsZikuc2V0VXAoKQogICAgICAgIHNlbGYucGF0aCA9IHUiL29yZ2FuaXphdGlvbnMve30vaW50ZWdyYXRpb25zL2V4YW1wbGUvc2V0dXAvIi5mb3JtYXQoc2VsZi5vcmdhbml6YXRpb24uc2x1ZykKCiAgICAjIHRoaXMgY3VycmVudGx5IHJlZGlyZWN0cyB0aGUgdXNlcgogICAgQHB5dGVzdC5tYXJrLnhmYWlsCiAgICBkZWYgdGVzdF9tYW5hZ2VyX2Nhbl9sb2FkKHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0X3JvbGVfY2FuX2FjY2VzcyhzZWxmLnBhdGgsICJtYW5hZ2VyIikKCiAgICAjIHRoaXMgY3VycmVudGx5IHJlZGlyZWN0cyB0aGUgdXNlcgogICAgQHB5dGVzdC5tYXJrLnhmYWlsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiB0ZXN0X293bmVyX2Nhbl9sb2FkKHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0X293bmVyX2Nhbl9hY2Nlc3Moc2VsZi5wYXRoKQoKCjx8ZmltX2VuZHw+"]
["2e29bd0934b60347dd5ddc7a5cf6090a66103ef8-2","2e29bd0934b60347dd5ddc7a5cf6090a66103ef8","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBweXRlc3QKCmZyb20gc2VudHJ5LnRlc3R1dGlscyBpbXBvcnQgUGVybWlzc2lvblRlc3RDYXNlLCBUZXN0Q2FzZQoKCmNsYXNzIE9yZ2FuaXphdGlvbkludGVncmF0aW9uU2V0dXBQZXJtaXNzaW9uVGVzdChQZXJtaXNzaW9uVGVzdENhc2UpOgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIHN1cGVyKE9yZ2FuaXphdGlvbkludGVncmF0aW9uU2V0dXBQZXJtaXNzaW9uVGVzdCwgc2VsZikuc2V0VXAoKQogICAgICAgIHNlbGYucGF0aCA9IHUiL29yZ2FuaXphdGlvbnMve30vaW50ZWdyYXRpb25zL2V4YW1wbGUvc2V0dXAvIi5mb3JtYXQoc2VsZi5vcmdhbml6YXRpb24uc2x1ZykKCiAgICAjIHRoaXMgY3VycmVudGx5IHJlZGlyZWN0cyB0aGUgdXNlcgogICAgQHB5dGVzdC5tYXJrLnhmYWlsCiAgICBkZWYgdGVzdF9tYW5hZ2VyX2Nhbl9sb2FkKHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0X3JvbGVfY2FuX2FjY2VzcyhzZWxmLnBhdGgsICJtYW5hZ2VyIikKCiAgICAjIHRoaXMgY3VycmVudGx5IHJlZGlyZWN0cyB0aGUgdXNlcgogICAgQHB5dGVzdC5tYXJrLnhmYWlsCiAgICBkZWYgdGVzdF9vd25lcl9jYW5fbG9hZChzZWxmKToKICAgICAgICBzZWxmLmFzc2VydF9vd25lcl9jYW5fYWNjZXNzKHNlbGYucGF0aCkKCgpjbGFzcyBPcmdhbml6YXRpb25JbnRlZ3JhdGlvblNldHVwVGVzdChUZXN0Q2FzZSk6CiAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgc3VwZXIoT3JnYW5pemF0aW9uSW50ZWdyYXRpb25TZXR1cFRlc3QsIHNlbGYpLnNldFVwKCkKICAgICAgICBzZWxmLm9yZ2FuaXphdGlvbiA9IHNlbGYuY3JlYXRlX29yZ2FuaXphdGlvbihuYW1lPSJmb28iLCBvd25lcj1zZWxmLnVzZXIpCiAgICAgICAgc2VsZi5sb2dpbl9hcyhzZWxmLnVzZXIpCiAgICAgICAgc2VsZi5wYXRoID0gdSIvb3JnYW5pemF0aW9ucy97fS9pbnRlZ3JhdGlvbnMvZXhhbXBsZS9zZXR1cC8iLmZvcm1hdChzZWxmLm9yZ2FuaXphdGlvbi5zbHVnKQoKICAgIGRlZiB0ZXN0X2Jhc2ljX2Zsb3coc2VsZik6CiAgICAgICAgcmVzcCA9IHNlbGYuY2xpZW50LmdldChzZWxmLnBhdGgpCiAgICAgICAgYXNzZXJ0IHJlc3Auc3RhdHVzX2NvZGUgPT0gMjAwCgogICAgICAgIHJlc3AgPSBzZWxmLmNsaWVudC5wb3N0KHNlbGYucGF0aCwgZGF0YT17Im5hbWUiOiAibW9ydHkifSkKICAgICAgICBhc3NlcnQgcmVzcC5zdGF0dXNfY29kZSA9PSAyMDAKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICAgICAjIENoZWNrIHRoYXQgd2UncmUgYmluZGluZyB0aGUgc3RhdGUgYmFjayB0byB0aGUgb3BlbmluZyB3aW5kb3cKICAgICAgICAjIHRocm91Z2ggdGhlIGRpYWxvZydzIHdpbmRvdy5wb3N0TWVzc2FnZS4KICAgICAgICBhc3NlcnQgIm1vcnR5IiBpbiByZXNwLmNvbnRlbnQKPHxmaW1fZW5kfD4="]
["e77be684f5432f365157a32d65901f6b4382e36b-1","e77be684f5432f365157a32d65901f6b4382e36b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCgpmcm9tIGdsb2IgaW1wb3J0IGdsb2IKCmZyb20gY2NsaWIucGFyc2VyIGltcG9ydCBjY29wZW4KCmZyb20gc2dyX2FuYWx5c2lzLm1vZGVsX2hhbWlsdG9uaWFuX2ZyZXF1ZW5jaWVzIGltcG9ydCBcCiAgICAoZGlzdGFuY2UsIGJvbmRfYW5nbGUpCmZyb20gc2dyX2FuYWx5c2lzLmFuYWx5c2lzX3V0aWxzIGltcG9ydCBwYWRfbGVmdF96ZXJvcwoKCgpkZWYgcmVuYW1lX3N0ZXBfZmlsZXNfY2x5ZGUoZmlsZW5hbWVzKToKICAgIG1heGxlbiA9IDAKICAgIGZvciBvbGRmaWxlbmFtZSBpbiBmaWxlbmFtZXM6CiAgICAgICAgc3R1YiA9IG9zLnBhdGguYmFzZW5hbWUob2xkZmlsZW5hbWUpCiAgICAgICAgbmV3bGVuID0gbGVuKHN0dWJbNDotNF0pCiAgICAgICAgaWYgbmV3bGVuID4gbWF4bGVuOgogICAgICAgICAgICBtYXhsZW4gPSBuZXdsZW4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgbmV3ZmlsZW5hbWVzID0gW10KICAgIGZvciBvbGRmaWxlbmFtZSBpbiBmaWxlbmFtZXM6CiAgICAgICAgZGlyZWN0b3J5LCBiYXNlbmFtZSA9IG9zLnBhdGguc3BsaXQob2xkZmlsZW5hbWUpCiAgICAgICAgc3R1YiwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChiYXNlbmFtZSkKPHxmaW1fZW5kfD4="]
["e77be684f5432f365157a32d65901f6b4382e36b-2","e77be684f5432f365157a32d65901f6b4382e36b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCgpmcm9tIGdsb2IgaW1wb3J0IGdsb2IKCmZyb20gY2NsaWIucGFyc2VyIGltcG9ydCBjY29wZW4KCmZyb20gc2dyX2FuYWx5c2lzLm1vZGVsX2hhbWlsdG9uaWFuX2ZyZXF1ZW5jaWVzIGltcG9ydCBcCiAgICAoZGlzdGFuY2UsIGJvbmRfYW5nbGUpCmZyb20gc2dyX2FuYWx5c2lzLmFuYWx5c2lzX3V0aWxzIGltcG9ydCBwYWRfbGVmdF96ZXJvcwoKCgpkZWYgcmVuYW1lX3N0ZXBfZmlsZXNfY2x5ZGUoZmlsZW5hbWVzKToKICAgIG1heGxlbiA9IDAKICAgIGZvciBvbGRmaWxlbmFtZSBpbiBmaWxlbmFtZXM6CiAgICAgICAgc3R1YiA9IG9zLnBhdGguYmFzZW5hbWUob2xkZmlsZW5hbWUpCiAgICAgICAgbmV3bGVuID0gbGVuKHN0dWJbNDotNF0pCiAgICAgICAgaWYgbmV3bGVuID4gbWF4bGVuOgogICAgICAgICAgICBtYXhsZW4gPSBuZXdsZW4KICAgIG5ld2ZpbGVuYW1lcyA9IFtdCiAgICBmb3Igb2xkZmlsZW5hbWUgaW4gZmlsZW5hbWVzOgogICAgICAgIGRpcmVjdG9yeSwgYmFzZW5hbWUgPSBvcy5wYXRoLnNwbGl0KG9sZGZpbGVuYW1lKQogICAgICAgIHN0dWIsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoYmFzZW5hbWUpCiAgICAgICAgZmlsZW51bSA9IHBhZF9sZWZ0X3plcm9zKHN0dWJbNDpdLCBtYXhsZW4pCiAgICAgICAgbmV3ZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oZGlyZWN0b3J5LCAnc3RlcF97fXt9Jy5mb3JtYXQoZmlsZW51bSwgZXh0KSkKICAgICAgICBvcy5yZW5hbWUob2xkZmlsZW5hbWUsIG5ld2ZpbGVuYW1lKQogICAgICAgIHByaW50KG9sZGZpbGVuYW1lICsgJyAtPiAnICsgbmV3ZmlsZW5hbWUpCiAgICAgICAgbmV3ZmlsZW5hbWVzLmFwcGVuZChuZXdmaWxlbmFtZSkKICAgIHJldHVybiBuZXdmaWxlbmFtZXMKCgpkZWYgcmVuYW1lX3N0ZXBfZmlsZXNfZXJpYyhmaWxlbmFtZXMpOgogICAgbWF4bGVuID0gMAogICAgZm9yIG9sZGZpbGVuYW1lIGluIGZpbGVuYW1lczoKICAgICAgICBzdHViID0gb3MucGF0aC5iYXNlbmFtZShvbGRmaWxlbmFtZSkKICAgICAgICBuZXdsZW4gPSBsZW4oc3R1Yls1Oi00XSkKICAgICAgICBpZiBuZXdsZW4gPiBtYXhsZW46CiAgICAgICAgICAgIG1heGxlbiA9IG5ld2xlbgogICAgbmV3ZmlsZW5hbWVzID0gW10KICAgIGZvciBvbGRmaWxlbmFtZSBpbiBmaWxlbmFtZXM6CiAgICAgICAgZGlyZWN0b3J5LCBiYXNlbmFtZSA9IG9zLnBhdGguc3BsaXQob2xkZmlsZW5hbWUpCiAgICAgICAgc3R1YiwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChiYXNlbmFtZSkKICAgICAgICBmaWxlbnVtID0gcGFkX2xlZnRfemVyb3Moc3R1Yls1Ol0sIG1heGxlbikKICAgICAgICBuZXdmaWxlbmFtZSA9IG9zLnBhdGguam9pbihkaXJlY3RvcnksICdzdGVwX3t9e30nLmZvcm1hdChmaWxlbnVtLCBleHQpKQogICAgICAgICMgb3MucmVuYW1lKG9sZGZpbGVuYW1lLCBuZXdmaWxlbmFtZSkKICAgICAgICBwcmludChvbGRmaWxlbmFtZSArICcgLT4gJyArIG5ld2ZpbGVuYW1lKQogICAgICAgIG5ld2ZpbGVuYW1lcy5hcHBlbmQobmV3ZmlsZW5hbWUpCiAgICByZXR1cm4gbmV3ZmlsZW5hbWVzCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKCiAgICByb290X2RpcmVjdG9yeSA9ICIvaG9tZS9lcmljL0NoZW1pc3RyeS9jYWxjLnNnci9wYXBlcl8wMl9DRF9TQy9jbHlkZV9oaXN0b2dyYW0vZnJlcV9kdnJfbm9fYWxtb18wcW0vU25hcDEiCgogICAgIyBmaWxlbmFtZXMgPSBzb3J0ZWQoZ2xvYihvcy5wYXRoLmpvaW4ocm9vdF9kaXJlY3RvcnksICJzdGVwKiIpKSkKICAgICMgcmVuYW1lX3N0ZXBfZmlsZXNfZXJpYyhmaWxlbmFtZXMpCgogICAgZmlsZW5hbWVzID0gc29ydGVkKGdsb2Iob3MucGF0aC5qb2luKHJvb3RfZGlyZWN0b3J5LCAic3RlcF8qLm91dCIpKSkKCiAgICBmcmVxdWVuY2llcyA9IFtdCiAgICBpbnRlbnNpdGllcyA9IFtdCiAgICBnZW9tZXRyaWVzID0gW10KICAgIGdlb21ldHJ5X3BhcmFtcyA9IGRpY3QoKQogICAgZ2VvbWV0cnlfcGFyYW1zWydsMSddID0gW10KICAgIGdlb21ldHJ5X3BhcmFtc1snbDInXSA9IFtdCiAgICBnZW9tZXRyeV9wYXJhbXNbJ2wxMiddID0gW10KCiAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZW5hbWVzOgoKICAgICAgICBqb2IgPSBjY29wZW4oZmlsZW5hbWUpCiAgICAgICAgZGF0YSA9IGpvYi5wYXJzZSgpCgogICAgICAgIHZpYmZyZXFzID0gZGF0YS52aWJmcmVxcwogICAgICAgIHZpYmlycyA9IGRhdGEudmliaXJzCiAgICAgICAgZ2VvbWV0cnkgPSBkYXRhLmF0b21jb29yZHNbMF0KCiAgICAgICAgYXNzZXJ0IGxlbih2aWJmcmVxcykgPT0gbGVuKHZpYmlycykgPT0gMwoKICAgICAgICBmcmVxdWVuY2llcy5hcHBlbmQodmliZnJlcXMpCiAgICAgICAgaW50ZW5zaXRpZXMuYXBwZW5kKHZpYmlycykKICAgICAgICBnZW9tZXRyaWVzLmFwcGVuZChnZW9tZXRyeSkKCiAgICAgICAgQywgTzEsIE8yID0gMCwgMSwgMgoKICAgICAgICBkX0NfTzEgPSBkaXN0YW5jZShnZW9tZXRyeVtDXSwgZ2VvbWV0cnlbTzFdKQogICAgICAgIGRfQ19PMiA9IGRpc3RhbmNlKGdlb21ldHJ5W0NdLCBnZW9tZXRyeVtPMl0pCiAgICAgICAgZF9PMV9PMiA9IGRpc3RhbmNlKGdlb21ldHJ5W08xXSwgZ2VvbWV0cnlbTzJdKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGJvbmRfc3VtID0gZF9DX08xICsgZF9DX08yCiAgICAgICAgYm9uZF9kaWZmZXJlbmNlID0gYWJzKGRfQ19PMSAtIGRfQ19PMikKCiAgICAgICAgYW5nbGUgPSBib25kX2FuZ2xlKGdlb21ldHJ5W08xXSwgZ2VvbWV0cnlbQ10sIGdlb21ldHJ5W08yXSkKPHxmaW1fZW5kfD4="]
["e77be684f5432f365157a32d65901f6b4382e36b-3","e77be684f5432f365157a32d65901f6b4382e36b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCgpmcm9tIGdsb2IgaW1wb3J0IGdsb2IKCmZyb20gY2NsaWIucGFyc2VyIGltcG9ydCBjY29wZW4KCmZyb20gc2dyX2FuYWx5c2lzLm1vZGVsX2hhbWlsdG9uaWFuX2ZyZXF1ZW5jaWVzIGltcG9ydCBcCiAgICAoZGlzdGFuY2UsIGJvbmRfYW5nbGUpCmZyb20gc2dyX2FuYWx5c2lzLmFuYWx5c2lzX3V0aWxzIGltcG9ydCBwYWRfbGVmdF96ZXJvcwoKCgpkZWYgcmVuYW1lX3N0ZXBfZmlsZXNfY2x5ZGUoZmlsZW5hbWVzKToKICAgIG1heGxlbiA9IDAKICAgIGZvciBvbGRmaWxlbmFtZSBpbiBmaWxlbmFtZXM6CiAgICAgICAgc3R1YiA9IG9zLnBhdGguYmFzZW5hbWUob2xkZmlsZW5hbWUpCiAgICAgICAgbmV3bGVuID0gbGVuKHN0dWJbNDotNF0pCiAgICAgICAgaWYgbmV3bGVuID4gbWF4bGVuOgogICAgICAgICAgICBtYXhsZW4gPSBuZXdsZW4KICAgIG5ld2ZpbGVuYW1lcyA9IFtdCiAgICBmb3Igb2xkZmlsZW5hbWUgaW4gZmlsZW5hbWVzOgogICAgICAgIGRpcmVjdG9yeSwgYmFzZW5hbWUgPSBvcy5wYXRoLnNwbGl0KG9sZGZpbGVuYW1lKQogICAgICAgIHN0dWIsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoYmFzZW5hbWUpCiAgICAgICAgZmlsZW51bSA9IHBhZF9sZWZ0X3plcm9zKHN0dWJbNDpdLCBtYXhsZW4pCiAgICAgICAgbmV3ZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oZGlyZWN0b3J5LCAnc3RlcF97fXt9Jy5mb3JtYXQoZmlsZW51bSwgZXh0KSkKICAgICAgICBvcy5yZW5hbWUob2xkZmlsZW5hbWUsIG5ld2ZpbGVuYW1lKQogICAgICAgIHByaW50KG9sZGZpbGVuYW1lICsgJyAtPiAnICsgbmV3ZmlsZW5hbWUpCiAgICAgICAgbmV3ZmlsZW5hbWVzLmFwcGVuZChuZXdmaWxlbmFtZSkKICAgIHJldHVybiBuZXdmaWxlbmFtZXMKCgpkZWYgcmVuYW1lX3N0ZXBfZmlsZXNfZXJpYyhmaWxlbmFtZXMpOgogICAgbWF4bGVuID0gMAogICAgZm9yIG9sZGZpbGVuYW1lIGluIGZpbGVuYW1lczoKICAgICAgICBzdHViID0gb3MucGF0aC5iYXNlbmFtZShvbGRmaWxlbmFtZSkKICAgICAgICBuZXdsZW4gPSBsZW4oc3R1Yls1Oi00XSkKICAgICAgICBpZiBuZXdsZW4gPiBtYXhsZW46CiAgICAgICAgICAgIG1heGxlbiA9IG5ld2xlbgogICAgbmV3ZmlsZW5hbWVzID0gW10KICAgIGZvciBvbGRmaWxlbmFtZSBpbiBmaWxlbmFtZXM6CiAgICAgICAgZGlyZWN0b3J5LCBiYXNlbmFtZSA9IG9zLnBhdGguc3BsaXQob2xkZmlsZW5hbWUpCiAgICAgICAgc3R1YiwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChiYXNlbmFtZSkKICAgICAgICBmaWxlbnVtID0gcGFkX2xlZnRfemVyb3Moc3R1Yls1Ol0sIG1heGxlbikKICAgICAgICBuZXdmaWxlbmFtZSA9IG9zLnBhdGguam9pbihkaXJlY3RvcnksICdzdGVwX3t9e30nLmZvcm1hdChmaWxlbnVtLCBleHQpKQogICAgICAgICMgb3MucmVuYW1lKG9sZGZpbGVuYW1lLCBuZXdmaWxlbmFtZSkKICAgICAgICBwcmludChvbGRmaWxlbmFtZSArICcgLT4gJyArIG5ld2ZpbGVuYW1lKQogICAgICAgIG5ld2ZpbGVuYW1lcy5hcHBlbmQobmV3ZmlsZW5hbWUpCiAgICByZXR1cm4gbmV3ZmlsZW5hbWVzCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKCiAgICByb290X2RpcmVjdG9yeSA9ICIvaG9tZS9lcmljL0NoZW1pc3RyeS9jYWxjLnNnci9wYXBlcl8wMl9DRF9TQy9jbHlkZV9oaXN0b2dyYW0vZnJlcV9kdnJfbm9fYWxtb18wcW0vU25hcDEiCgogICAgIyBmaWxlbmFtZXMgPSBzb3J0ZWQoZ2xvYihvcy5wYXRoLmpvaW4ocm9vdF9kaXJlY3RvcnksICJzdGVwKiIpKSkKICAgICMgcmVuYW1lX3N0ZXBfZmlsZXNfZXJpYyhmaWxlbmFtZXMpCgogICAgZmlsZW5hbWVzID0gc29ydGVkKGdsb2Iob3MucGF0aC5qb2luKHJvb3RfZGlyZWN0b3J5LCAic3RlcF8qLm91dCIpKSkKCiAgICBmcmVxdWVuY2llcyA9IFtdCiAgICBpbnRlbnNpdGllcyA9IFtdCiAgICBnZW9tZXRyaWVzID0gW10KICAgIGdlb21ldHJ5X3BhcmFtcyA9IGRpY3QoKQogICAgZ2VvbWV0cnlfcGFyYW1zWydsMSddID0gW10KICAgIGdlb21ldHJ5X3BhcmFtc1snbDInXSA9IFtdCiAgICBnZW9tZXRyeV9wYXJhbXNbJ2wxMiddID0gW10KCiAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZW5hbWVzOgoKICAgICAgICBqb2IgPSBjY29wZW4oZmlsZW5hbWUpCiAgICAgICAgZGF0YSA9IGpvYi5wYXJzZSgpCgogICAgICAgIHZpYmZyZXFzID0gZGF0YS52aWJmcmVxcwogICAgICAgIHZpYmlycyA9IGRhdGEudmliaXJzCiAgICAgICAgZ2VvbWV0cnkgPSBkYXRhLmF0b21jb29yZHNbMF0KCiAgICAgICAgYXNzZXJ0IGxlbih2aWJmcmVxcykgPT0gbGVuKHZpYmlycykgPT0gMwoKICAgICAgICBmcmVxdWVuY2llcy5hcHBlbmQodmliZnJlcXMpCiAgICAgICAgaW50ZW5zaXRpZXMuYXBwZW5kKHZpYmlycykKICAgICAgICBnZW9tZXRyaWVzLmFwcGVuZChnZW9tZXRyeSkKCiAgICAgICAgQywgTzEsIE8yID0gMCwgMSwgMgoKICAgICAgICBkX0NfTzEgPSBkaXN0YW5jZShnZW9tZXRyeVtDXSwgZ2VvbWV0cnlbTzFdKQogICAgICAgIGRfQ19PMiA9IGRpc3RhbmNlKGdlb21ldHJ5W0NdLCBnZW9tZXRyeVtPMl0pCiAgICAgICAgZF9PMV9PMiA9IGRpc3RhbmNlKGdlb21ldHJ5W08xXSwgZ2VvbWV0cnlbTzJdKQoKICAgICAgICBib25kX3N1bSA9IGRfQ19PMSArIGRfQ19PMgogICAgICAgIGJvbmRfZGlmZmVyZW5jZSA9IGFicyhkX0NfTzEgLSBkX0NfTzIpCgogICAgICAgIGFuZ2xlID0gYm9uZF9hbmdsZShnZW9tZXRyeVtPMV0sIGdlb21ldHJ5W0NdLCBnZW9tZXRyeVtPMl0pCiAgICAgICAgdGhldGEgPSAxODAuMCAtIGFuZ2xlCgogICAgICAgIGwxID0gZF9DX08xCiAgICAgICAgbDIgPSBkX0NfTzIKICAgICAgICBvMTIgPSBkX08xX08yCiAgICAgICAgbDEyID0gYm9uZF9zdW0KICAgICAgICBkbCA9IGJvbmRfZGlmZmVyZW5jZQoKICAgICAgICBnZW9tZXRyeV9wYXJhbXNbJ2wxJ10uYXBwZW5kKGwxKQogICAgICAgIGdlb21ldHJ5X3BhcmFtc1snbDInXS5hcHBlbmQobDIpCiAgICAgICAgZ2VvbWV0cnlfcGFyYW1zWydsMTInXS5hcHBlbmQobDEyKQoKICAgIGltcG9ydCBtYXRwbG90bGliIGFzIG1wbAogICAgbXBsLnVzZSgiQWdnIikKICAgIGltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKCiAgICB0aWNrcyA9IGxpc3QocmFuZ2UoMSwgbGVuKGZyZXF1ZW5jaWVzKSArIDEpKQoKICAgIGZpZywgYXhfZiA9IHBsdC5zdWJwbG90cygpCgogICAgbGluZTEgPSBheF9mLnBsb3QoW2ZbMF0gZm9yIGYgaW4gZnJlcXVlbmNpZXNdLCBsaW5ld2lkdGg9MC41LCBsYWJlbD0nbW9kZSAxJykKICAgIGxpbmUyID0gYXhfZi5wbG90KFtmWzFdIGZvciBmIGluIGZyZXF1ZW5jaWVzXSwgbGluZXdpZHRoPTAuNSwgbGFiZWw9J21vZGUgMicpCiAgICBsaW5lMyA9IGF4X2YucGxvdChbZlsyXSBmb3IgZiBpbiBmcmVxdWVuY2llc10sIGxpbmV3aWR0aD0wLjUsIGxhYmVsPSdtb2RlIDMnKQoKICAgIGF4X2cgPSBheF9mLnR3aW54KCkKCiAgICBsaW5lNCA9IGF4X2cucGxvdChnZW9tZXRyeV9wYXJhbXNbJ2wxMiddLCBsaW5lc3R5bGU9JzonLCBjb2xvcj0nYmxhY2snLCBsYWJlbD0ndG90YWwgYm9uZCBsZW5ndGgnKQoKICAgIGF4X2Yuc2V0X3hsaW0oKG1pbih0aWNrcyksIG1heCh0aWNrcykpKQoKICAgIGF4X2Yuc2V0X3hsYWJlbCgnc3RlcCAjJykKICAgIGF4X2Yuc2V0X3lsYWJlbChyJ2ZyZXF1ZW5jeSAoY20kXnstMX0kKScpCiAgICBheF9nLnNldF95bGFiZWwocidib25kIGxlbmd0aCAoJFxBQSQpJykKCiAgICBsaW5lcyA9IGxpbmUxICsgbGluZTIgKyBsaW5lMyArIGxpbmU0CiAgICBsYWJlbHMgPSBbbGluZS5nZXRfbGFiZWwoKSBmb3IgbGluZSBpbiBsaW5lc10KICAgIGF4X2YubGVnZW5kKGxpbmVzLCBsYWJlbHMsCiAgICAgICAgICAgICAgICBsb2M9J2Jlc3QnLCBmYW5jeWJveD1UcnVlLCBmcmFtZWFscGhhPTAuNTAsIGZvbnRzaXplPSd4LXNtYWxsJykKCiAgICBmaWcuc2F2ZWZpZygnbW9kZXMucGRmJywgYmJveF9pbmNoZXM9J3RpZ2h0JykKCiAgICAjIGRlY29yYXRlLCBzb3J0LCB1bmRlY29yYXRlCiAgICBzb3J0ZWRfemlwID0gc29ydGVkKGxpc3QoemlwKGdlb21ldHJ5X3BhcmFtc1snbDEyJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5X3BhcmFtc1snbDEnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnlfcGFyYW1zWydsMiddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY2llcykpKQogICAgZ2VvbWV0cnlfcGFyYW1zWydsMTInXSA9IFtlWzBdIGZvciBlIGluIHNvcnRlZF96aXBdCiAgICBnZW9tZXRyeV9wYXJhbXNbJ2wxJ10gPSBbZVsxXSBmb3IgZSBpbiBzb3J0ZWRfemlwXQogICAgZ2VvbWV0cnlfcGFyYW1zWydsMiddID0gW2VbMl0gZm9yIGUgaW4gc29ydGVkX3ppcF0KICAgIGZyZXF1ZW5jaWVzID0gW2VbM10gZm9yIGUgaW4gc29ydGVkX3ppcF0KPHxmaW1faG9sZXw+CiAgICBsaW5lMiA9IGF4X2YucGxvdChbZlsxXSBmb3IgZiBpbiBmcmVxdWVuY2llc10sIGxpbmV3aWR0aD0wLjUsIGxhYmVsPSdtb2RlIDInKQogICAgbGluZTMgPSBheF9mLnBsb3QoW2ZbMl0gZm9yIGYgaW4gZnJlcXVlbmNpZXNdLCBsaW5ld2lkdGg9MC41LCBsYWJlbD0nbW9kZSAzJykKCiAgICBheF9nID0gYXhfZi50d2lueCgpCgogICAgbGluZTQgPSBheF9nLnBsb3QoZ2VvbWV0cnlfcGFyYW1zWydsMTInXSwgbGluZXN0eWxlPSc6JywgY29sb3I9J2JsYWNrJywgbGFiZWw9J3RvdGFsIGJvbmQgbGVuZ3RoJykKCiAgICBheF9mLnNldF94bGltKChtaW4odGlja3MpLCBtYXgodGlja3MpKSkKCiAgICBheF9mLnNldF94bGFiZWwoJ3N0ZXAgIycpCiAgICBheF9mLnNldF95bGFiZWwocidmcmVxdWVuY3kgKGNtJF57LTF9JCknKQogICAgYXhfZy5zZXRfeWxhYmVsKHInYm9uZCBsZW5ndGggKCRcQUEkKScpCgogICAgbGluZXMgPSBsaW5lMSArIGxpbmUyICsgbGluZTMgKyBsaW5lNAogICAgbGFiZWxzID0gW2xpbmUuZ2V0X2xhYmVsKCkgZm9yIGxpbmUgaW4gbGluZXNdCiAgICBheF9mLmxlZ2VuZChsaW5lcywgbGFiZWxzLAogICAgICAgICAgICAgICAgbG9jPSdiZXN0JywgZmFuY3lib3g9VHJ1ZSwgZnJhbWVhbHBoYT0wLjUwLCBmb250c2l6ZT0neC1zbWFsbCcpCgogICAgZmlnLnNhdmVmaWcoJ21vZGVzX3NvcnRlZC5wZGYnLCBiYm94X2luY2hlcz0ndGlnaHQnKQoKICAgICMgZGVjb3JhdGUsIHNvcnQsIHVuZGVjb3JhdGUKICAgICMgc29ydGVkX3ppcCA9IHNvcnRlZChsaXN0KHppcChnZW9tZXRyeV9wYXJhbXNbJ2wxJ10sCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnlfcGFyYW1zWydsMiddLAogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5X3BhcmFtc1snbDEyJ10sCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlcXVlbmNpZXMpKSkKICAgICMgZ2VvbWV0cnlfcGFyYW1zWydsMSddID0gW2VbMF0gZm9yIGUgaW4gc29ydGVkX3ppcF0KICAgICMgZ2VvbWV0cnlfcGFyYW1zWydsMiddID0gW2VbMV0gZm9yIGUgaW4gc29ydGVkX3ppcF0KICAgICMgZ2VvbWV0cnlfcGFyYW1zWydsMTInXSA9IFtlWzJdIGZvciBlIGluIHNvcnRlZF96aXBdCiAgICAjIGZyZXF1ZW5jaWVzID0gW2VbM10gZm9yIGUgaW4gc29ydGVkX3ppcF0KCiAgICAjIGZpZywgYXhfZiA9IHBsdC5zdWJwbG90cygpCgogICAgIyBsaW5lMSA9IGF4X2YucGxvdChbZlswXSBmb3IgZiBpbiBmcmVxdWVuY2llc10sIGxpbmV3aWR0aD0wLjUsIGxhYmVsPSdtb2RlIDEnKQogICAgIyBsaW5lMiA9IGF4X2YucGxvdChbZlsxXSBmb3IgZiBpbiBmcmVxdWVuY2llc10sIGxpbmV3aWR0aD0wLjUsIGxhYmVsPSdtb2RlIDInKQogICAgIyBsaW5lMyA9IGF4X2YucGxvdChbZlsyXSBmb3IgZiBpbiBmcmVxdWVuY2llc10sIGxpbmV3aWR0aD0wLjUsIGxhYmVsPSdtb2RlIDMnKQoKICAgICMgYXhfZyA9IGF4X2YudHdpbngoKQoKICAgICMgbGluZTQgPSBheF9nLnBsb3QoZ2VvbWV0cnlfcGFyYW1zWydsMSddLCBsaW5lc3R5bGU9JzonLCBjb2xvcj0nYmxhY2snLCBsYWJlbD0nQy1PIGxlbmd0aCAxJykKICAgICMgbGluZTUgPSBheF9nLnBsb3QoZ2VvbWV0cnlfcGFyYW1zWydsMiddLCBsaW5lc3R5bGU9JzonLCBjb2xvcj0nb3JhbmdlJywgbGFiZWw9J0MtTyBsZW5ndGggMicpCgogICAgIyBheF9mLnNldF94bGltKChtaW4odGlja3MpLCBtYXgodGlja3MpKSkKCiAgICAjIGF4X2Yuc2V0X3hsYWJlbCgnc3RlcCAjJykKICAgICMgYXhfZi5zZXRfeWxhYmVsKHInZnJlcXVlbmN5IChjbSReey0xfSQpJykKICAgICMgYXhfZy5zZXRfeWxhYmVsKHInYm9uZCBsZW5ndGggKCRcQUEkKScpCgogICAgIyBsaW5lcyA9IGxpbmUxICsgbGluZTIgKyBsaW5lMyArIGxpbmU0ICsgbGluZTUKICAgICMgbGFiZWxzID0gW2xpbmUuZ2V0X2xhYmVsKCkgZm9yIGxpbmUgaW4gbGluZXNdCiAgICAjIGF4X2YubGVnZW5kKGxpbmVzLCBsYWJlbHMsCiAgICAjICAgICAgICAgICAgIGxvYz0nYmVzdCcsIGZhbmN5Ym94PVRydWUsIGZyYW1lYWxwaGE9MC41MCwgZm9udHNpemU9J3gtc21hbGwnKQoKICAgICMgZmlnLnNhdmVmaWcoJ21vZGVzX3NvcnRlZDIucGRmJywgYmJveF9pbmNoZXM9J3RpZ2h0JykKPHxmaW1fc3VmZml4fD4KCiAgICBmaWcsIGF4X2YgPSBwbHQuc3VicGxvdHMoKQoKICAgIGxpbmUxID0gYXhfZi5wbG90KFtmWzBdIGZvciBmIGluIGZyZXF1ZW5jaWVzXSwgbGluZXdpZHRoPTAuNSwgbGFiZWw9J21vZGUgMScpCjx8ZmltX2VuZHw+"]
["e77be684f5432f365157a32d65901f6b4382e36b-4","e77be684f5432f365157a32d65901f6b4382e36b","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8Pgpmcm9tIGNjbGliLnBhcnNlciBpbXBvcnQgY2NvcGVuCgpmcm9tIHNncl9hbmFseXNpcy5tb2RlbF9oYW1pbHRvbmlhbl9mcmVxdWVuY2llcyBpbXBvcnQgXAogICAgKGRpc3RhbmNlLCBib25kX2FuZ2xlKQpmcm9tIHNncl9hbmFseXNpcy5hbmFseXNpc191dGlscyBpbXBvcnQgcGFkX2xlZnRfemVyb3MKCgoKZGVmIHJlbmFtZV9zdGVwX2ZpbGVzX2NseWRlKGZpbGVuYW1lcyk6CiAgICBtYXhsZW4gPSAwCiAgICBmb3Igb2xkZmlsZW5hbWUgaW4gZmlsZW5hbWVzOgogICAgICAgIHN0dWIgPSBvcy5wYXRoLmJhc2VuYW1lKG9sZGZpbGVuYW1lKQogICAgICAgIG5ld2xlbiA9IGxlbihzdHViWzQ6LTRdKQogICAgICAgIGlmIG5ld2xlbiA+IG1heGxlbjoKICAgICAgICAgICAgbWF4bGVuID0gbmV3bGVuCiAgICBuZXdmaWxlbmFtZXMgPSBbXQogICAgZm9yIG9sZGZpbGVuYW1lIGluIGZpbGVuYW1lczoKICAgICAgICBkaXJlY3RvcnksIGJhc2VuYW1lID0gb3MucGF0aC5zcGxpdChvbGRmaWxlbmFtZSkKICAgICAgICBzdHViLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGJhc2VuYW1lKQogICAgICAgIGZpbGVudW0gPSBwYWRfbGVmdF96ZXJvcyhzdHViWzQ6XSwgbWF4bGVuKQogICAgICAgIG5ld2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKGRpcmVjdG9yeSwgJ3N0ZXBfe317fScuZm9ybWF0KGZpbGVudW0sIGV4dCkpCiAgICAgICAgb3MucmVuYW1lKG9sZGZpbGVuYW1lLCBuZXdmaWxlbmFtZSkKICAgICAgICBwcmludChvbGRmaWxlbmFtZSArICcgLT4gJyArIG5ld2ZpbGVuYW1lKQogICAgICAgIG5ld2ZpbGVuYW1lcy5hcHBlbmQobmV3ZmlsZW5hbWUpCiAgICByZXR1cm4gbmV3ZmlsZW5hbWVzCgoKZGVmIHJlbmFtZV9zdGVwX2ZpbGVzX2VyaWMoZmlsZW5hbWVzKToKICAgIG1heGxlbiA9IDAKICAgIGZvciBvbGRmaWxlbmFtZSBpbiBmaWxlbmFtZXM6CiAgICAgICAgc3R1YiA9IG9zLnBhdGguYmFzZW5hbWUob2xkZmlsZW5hbWUpCiAgICAgICAgbmV3bGVuID0gbGVuKHN0dWJbNTotNF0pCiAgICAgICAgaWYgbmV3bGVuID4gbWF4bGVuOgogICAgICAgICAgICBtYXhsZW4gPSBuZXdsZW4KICAgIG5ld2ZpbGVuYW1lcyA9IFtdCiAgICBmb3Igb2xkZmlsZW5hbWUgaW4gZmlsZW5hbWVzOgogICAgICAgIGRpcmVjdG9yeSwgYmFzZW5hbWUgPSBvcy5wYXRoLnNwbGl0KG9sZGZpbGVuYW1lKQogICAgICAgIHN0dWIsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoYmFzZW5hbWUpCiAgICAgICAgZmlsZW51bSA9IHBhZF9sZWZ0X3plcm9zKHN0dWJbNTpdLCBtYXhsZW4pCiAgICAgICAgbmV3ZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oZGlyZWN0b3J5LCAnc3RlcF97fXt9Jy5mb3JtYXQoZmlsZW51bSwgZXh0KSkKICAgICAgICAjIG9zLnJlbmFtZShvbGRmaWxlbmFtZSwgbmV3ZmlsZW5hbWUpCiAgICAgICAgcHJpbnQob2xkZmlsZW5hbWUgKyAnIC0+ICcgKyBuZXdmaWxlbmFtZSkKICAgICAgICBuZXdmaWxlbmFtZXMuYXBwZW5kKG5ld2ZpbGVuYW1lKQogICAgcmV0dXJuIG5ld2ZpbGVuYW1lcwoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CgogICAgcm9vdF9kaXJlY3RvcnkgPSAiL2hvbWUvZXJpYy9DaGVtaXN0cnkvY2FsYy5zZ3IvcGFwZXJfMDJfQ0RfU0MvY2x5ZGVfaGlzdG9ncmFtL2ZyZXFfZHZyX25vX2FsbW9fMHFtL1NuYXAxIgoKICAgICMgZmlsZW5hbWVzID0gc29ydGVkKGdsb2Iob3MucGF0aC5qb2luKHJvb3RfZGlyZWN0b3J5LCAic3RlcCoiKSkpCiAgICAjIHJlbmFtZV9zdGVwX2ZpbGVzX2VyaWMoZmlsZW5hbWVzKQoKICAgIGZpbGVuYW1lcyA9IHNvcnRlZChnbG9iKG9zLnBhdGguam9pbihyb290X2RpcmVjdG9yeSwgInN0ZXBfKi5vdXQiKSkpCgogICAgZnJlcXVlbmNpZXMgPSBbXQogICAgaW50ZW5zaXRpZXMgPSBbXQogICAgZ2VvbWV0cmllcyA9IFtdCiAgICBnZW9tZXRyeV9wYXJhbXMgPSBkaWN0KCkKICAgIGdlb21ldHJ5X3BhcmFtc1snbDEnXSA9IFtdCiAgICBnZW9tZXRyeV9wYXJhbXNbJ2wyJ10gPSBbXQogICAgZ2VvbWV0cnlfcGFyYW1zWydsMTInXSA9IFtdCgogICAgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lczoKCiAgICAgICAgam9iID0gY2NvcGVuKGZpbGVuYW1lKQogICAgICAgIGRhdGEgPSBqb2IucGFyc2UoKQoKICAgICAgICB2aWJmcmVxcyA9IGRhdGEudmliZnJlcXMKICAgICAgICB2aWJpcnMgPSBkYXRhLnZpYmlycwogICAgICAgIGdlb21ldHJ5ID0gZGF0YS5hdG9tY29vcmRzWzBdCgogICAgICAgIGFzc2VydCBsZW4odmliZnJlcXMpID09IGxlbih2aWJpcnMpID09IDMKCiAgICAgICAgZnJlcXVlbmNpZXMuYXBwZW5kKHZpYmZyZXFzKQogICAgICAgIGludGVuc2l0aWVzLmFwcGVuZCh2aWJpcnMpCiAgICAgICAgZ2VvbWV0cmllcy5hcHBlbmQoZ2VvbWV0cnkpCgogICAgICAgIEMsIE8xLCBPMiA9IDAsIDEsIDIKCiAgICAgICAgZF9DX08xID0gZGlzdGFuY2UoZ2VvbWV0cnlbQ10sIGdlb21ldHJ5W08xXSkKICAgICAgICBkX0NfTzIgPSBkaXN0YW5jZShnZW9tZXRyeVtDXSwgZ2VvbWV0cnlbTzJdKQogICAgICAgIGRfTzFfTzIgPSBkaXN0YW5jZShnZW9tZXRyeVtPMV0sIGdlb21ldHJ5W08yXSkKCiAgICAgICAgYm9uZF9zdW0gPSBkX0NfTzEgKyBkX0NfTzIKICAgICAgICBib25kX2RpZmZlcmVuY2UgPSBhYnMoZF9DX08xIC0gZF9DX08yKQoKICAgICAgICBhbmdsZSA9IGJvbmRfYW5nbGUoZ2VvbWV0cnlbTzFdLCBnZW9tZXRyeVtDXSwgZ2VvbWV0cnlbTzJdKQogICAgICAgIHRoZXRhID0gMTgwLjAgLSBhbmdsZQoKICAgICAgICBsMSA9IGRfQ19PMQogICAgICAgIGwyID0gZF9DX08yCiAgICAgICAgbzEyID0gZF9PMV9PMgogICAgICAgIGwxMiA9IGJvbmRfc3VtCiAgICAgICAgZGwgPSBib25kX2RpZmZlcmVuY2UKCiAgICAgICAgZ2VvbWV0cnlfcGFyYW1zWydsMSddLmFwcGVuZChsMSkKICAgICAgICBnZW9tZXRyeV9wYXJhbXNbJ2wyJ10uYXBwZW5kKGwyKQogICAgICAgIGdlb21ldHJ5X3BhcmFtc1snbDEyJ10uYXBwZW5kKGwxMikKCiAgICBpbXBvcnQgbWF0cGxvdGxpYiBhcyBtcGwKICAgIG1wbC51c2UoIkFnZyIpCiAgICBpbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CgogICAgdGlja3MgPSBsaXN0KHJhbmdlKDEsIGxlbihmcmVxdWVuY2llcykgKyAxKSkKCiAgICBmaWcsIGF4X2YgPSBwbHQuc3VicGxvdHMoKQoKICAgIGxpbmUxID0gYXhfZi5wbG90KFtmWzBdIGZvciBmIGluIGZyZXF1ZW5jaWVzXSwgbGluZXdpZHRoPTAuNSwgbGFiZWw9J21vZGUgMScpCiAgICBsaW5lMiA9IGF4X2YucGxvdChbZlsxXSBmb3IgZiBpbiBmcmVxdWVuY2llc10sIGxpbmV3aWR0aD0wLjUsIGxhYmVsPSdtb2RlIDInKQogICAgbGluZTMgPSBheF9mLnBsb3QoW2ZbMl0gZm9yIGYgaW4gZnJlcXVlbmNpZXNdLCBsaW5ld2lkdGg9MC41LCBsYWJlbD0nbW9kZSAzJykKCiAgICBheF9nID0gYXhfZi50d2lueCgpCgogICAgbGluZTQgPSBheF9nLnBsb3QoZ2VvbWV0cnlfcGFyYW1zWydsMTInXSwgbGluZXN0eWxlPSc6JywgY29sb3I9J2JsYWNrJywgbGFiZWw9J3RvdGFsIGJvbmQgbGVuZ3RoJykKCiAgICBheF9mLnNldF94bGltKChtaW4odGlja3MpLCBtYXgodGlja3MpKSkKCiAgICBheF9mLnNldF94bGFiZWwoJ3N0ZXAgIycpCiAgICBheF9mLnNldF95bGFiZWwocidmcmVxdWVuY3kgKGNtJF57LTF9JCknKQogICAgYXhfZy5zZXRfeWxhYmVsKHInYm9uZCBsZW5ndGggKCRcQUEkKScpCgogICAgbGluZXMgPSBsaW5lMSArIGxpbmUyICsgbGluZTMgKyBsaW5lNAogICAgbGFiZWxzID0gW2xpbmUuZ2V0X2xhYmVsKCkgZm9yIGxpbmUgaW4gbGluZXNdCiAgICBheF9mLmxlZ2VuZChsaW5lcywgbGFiZWxzLAogICAgICAgICAgICAgICAgbG9jPSdiZXN0JywgZmFuY3lib3g9VHJ1ZSwgZnJhbWVhbHBoYT0wLjUwLCBmb250c2l6ZT0neC1zbWFsbCcpCgogICAgZmlnLnNhdmVmaWcoJ21vZGVzLnBkZicsIGJib3hfaW5jaGVzPSd0aWdodCcpCgogICAgIyBkZWNvcmF0ZSwgc29ydCwgdW5kZWNvcmF0ZQogICAgc29ydGVkX3ppcCA9IHNvcnRlZChsaXN0KHppcChnZW9tZXRyeV9wYXJhbXNbJ2wxMiddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeV9wYXJhbXNbJ2wxJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5X3BhcmFtc1snbDInXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlcXVlbmNpZXMpKSkKICAgIGdlb21ldHJ5X3BhcmFtc1snbDEyJ10gPSBbZVswXSBmb3IgZSBpbiBzb3J0ZWRfemlwXQogICAgZ2VvbWV0cnlfcGFyYW1zWydsMSddID0gW2VbMV0gZm9yIGUgaW4gc29ydGVkX3ppcF0KICAgIGdlb21ldHJ5X3BhcmFtc1snbDInXSA9IFtlWzJdIGZvciBlIGluIHNvcnRlZF96aXBdCiAgICBmcmVxdWVuY2llcyA9IFtlWzNdIGZvciBlIGluIHNvcnRlZF96aXBdCgogICAgZmlnLCBheF9mID0gcGx0LnN1YnBsb3RzKCkKCiAgICBsaW5lMSA9IGF4X2YucGxvdChbZlswXSBmb3IgZiBpbiBmcmVxdWVuY2llc10sIGxpbmV3aWR0aD0wLjUsIGxhYmVsPSdtb2RlIDEnKQogICAgbGluZTIgPSBheF9mLnBsb3QoW2ZbMV0gZm9yIGYgaW4gZnJlcXVlbmNpZXNdLCBsaW5ld2lkdGg9MC41LCBsYWJlbD0nbW9kZSAyJykKICAgIGxpbmUzID0gYXhfZi5wbG90KFtmWzJdIGZvciBmIGluIGZyZXF1ZW5jaWVzXSwgbGluZXdpZHRoPTAuNSwgbGFiZWw9J21vZGUgMycpCgogICAgYXhfZyA9IGF4X2YudHdpbngoKQoKICAgIGxpbmU0ID0gYXhfZy5wbG90KGdlb21ldHJ5X3BhcmFtc1snbDEyJ10sIGxpbmVzdHlsZT0nOicsIGNvbG9yPSdibGFjaycsIGxhYmVsPSd0b3RhbCBib25kIGxlbmd0aCcpCgogICAgYXhfZi5zZXRfeGxpbSgobWluKHRpY2tzKSwgbWF4KHRpY2tzKSkpCgogICAgYXhfZi5zZXRfeGxhYmVsKCdzdGVwICMnKQogICAgYXhfZi5zZXRfeWxhYmVsKHInZnJlcXVlbmN5IChjbSReey0xfSQpJykKICAgIGF4X2cuc2V0X3lsYWJlbChyJ2JvbmQgbGVuZ3RoICgkXEFBJCknKQoKICAgIGxpbmVzID0gbGluZTEgKyBsaW5lMiArIGxpbmUzICsgbGluZTQKICAgIGxhYmVscyA9IFtsaW5lLmdldF9sYWJlbCgpIGZvciBsaW5lIGluIGxpbmVzXQogICAgYXhfZi5sZWdlbmQobGluZXMsIGxhYmVscywKICAgICAgICAgICAgICAgIGxvYz0nYmVzdCcsIGZhbmN5Ym94PVRydWUsIGZyYW1lYWxwaGE9MC41MCwgZm9udHNpemU9J3gtc21hbGwnKQoKICAgIGZpZy5zYXZlZmlnKCdtb2Rlc19zb3J0ZWQucGRmJywgYmJveF9pbmNoZXM9J3RpZ2h0JykKCiAgICAjIGRlY29yYXRlLCBzb3J0LCB1bmRlY29yYXRlCiAgICAjIHNvcnRlZF96aXAgPSBzb3J0ZWQobGlzdCh6aXAoZ2VvbWV0cnlfcGFyYW1zWydsMSddLAogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5X3BhcmFtc1snbDInXSwKICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeV9wYXJhbXNbJ2wxMiddLAogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jaWVzKSkpCiAgICAjIGdlb21ldHJ5X3BhcmFtc1snbDEnXSA9IFtlWzBdIGZvciBlIGluIHNvcnRlZF96aXBdCiAgICAjIGdlb21ldHJ5X3BhcmFtc1snbDInXSA9IFtlWzFdIGZvciBlIGluIHNvcnRlZF96aXBdCiAgICAjIGdlb21ldHJ5X3BhcmFtc1snbDEyJ10gPSBbZVsyXSBmb3IgZSBpbiBzb3J0ZWRfemlwXQogICAgIyBmcmVxdWVuY2llcyA9IFtlWzNdIGZvciBlIGluIHNvcnRlZF96aXBdCgogICAgIyBmaWcsIGF4X2YgPSBwbHQuc3VicGxvdHMoKQoKICAgICMgbGluZTEgPSBheF9mLnBsb3QoW2ZbMF0gZm9yIGYgaW4gZnJlcXVlbmNpZXNdLCBsaW5ld2lkdGg9MC41LCBsYWJlbD0nbW9kZSAxJykKICAgICMgbGluZTIgPSBheF9mLnBsb3QoW2ZbMV0gZm9yIGYgaW4gZnJlcXVlbmNpZXNdLCBsaW5ld2lkdGg9MC41LCBsYWJlbD0nbW9kZSAyJykKICAgICMgbGluZTMgPSBheF9mLnBsb3QoW2ZbMl0gZm9yIGYgaW4gZnJlcXVlbmNpZXNdLCBsaW5ld2lkdGg9MC41LCBsYWJlbD0nbW9kZSAzJykKCiAgICAjIGF4X2cgPSBheF9mLnR3aW54KCkKCiAgICAjIGxpbmU0ID0gYXhfZy5wbG90KGdlb21ldHJ5X3BhcmFtc1snbDEnXSwgbGluZXN0eWxlPSc6JywgY29sb3I9J2JsYWNrJywgbGFiZWw9J0MtTyBsZW5ndGggMScpCiAgICAjIGxpbmU1ID0gYXhfZy5wbG90KGdlb21ldHJ5X3BhcmFtc1snbDInXSwgbGluZXN0eWxlPSc6JywgY29sb3I9J29yYW5nZScsIGxhYmVsPSdDLU8gbGVuZ3RoIDInKQoKICAgICMgYXhfZi5zZXRfeGxpbSgobWluKHRpY2tzKSwgbWF4KHRpY2tzKSkpCgogICAgIyBheF9mLnNldF94bGFiZWwoJ3N0ZXAgIycpCiAgICAjIGF4X2Yuc2V0X3lsYWJlbChyJ2ZyZXF1ZW5jeSAoY20kXnstMX0kKScpCiAgICAjIGF4X2cuc2V0X3lsYWJlbChyJ2JvbmQgbGVuZ3RoICgkXEFBJCknKQoKICAgICMgbGluZXMgPSBsaW5lMSArIGxpbmUyICsgbGluZTMgKyBsaW5lNCArIGxpbmU1CiAgICAjIGxhYmVscyA9IFtsaW5lLmdldF9sYWJlbCgpIGZvciBsaW5lIGluIGxpbmVzXQogICAgIyBheF9mLmxlZ2VuZChsaW5lcywgbGFiZWxzLAogICAgIyAgICAgICAgICAgICBsb2M9J2Jlc3QnLCBmYW5jeWJveD1UcnVlLCBmcmFtZWFscGhhPTAuNTAsIGZvbnRzaXplPSd4LXNtYWxsJykKCiAgICAjIGZpZy5zYXZlZmlnKCdtb2Rlc19zb3J0ZWQyLnBkZicsIGJib3hfaW5jaGVzPSd0aWdodCcpCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBvcwoKZnJvbSBnbG9iIGltcG9ydCBnbG9iCgo8fGZpbV9lbmR8Pg=="]
["ec2b3d758d95087958ffb3934148d96e0ab80f1b-1","ec2b3d758d95087958ffb3934148d96e0ab80f1b","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMS40IG9uIDIwMjEtMDMtMjYgMTI6NDEKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ1BNJywgJzAwMDZfYXV0b18yMDIxMDMxOF8xNzAwJyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J2NhcmRpbmZvJywKICAgICAgICAgICAgbmFtZT0nU3VtbWFyeScsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5DaGFyRmllbGQoYmxhbms9VHJ1ZSwgbWF4X2xlbmd0aD0zMDAsIG51bGw9VHJ1ZSksCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J3Byb2plY3QnLAogICAgICAgICAgICBuYW1lPSdCVScsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5DaGFyRmllbGQoYmxhbms9VHJ1ZSwgY2hvaWNlcz1bKCdEaWdpdGFsIEVuZXJneScsICdEaWdpdGFsIEVuZXJneScpLCAoJ0hvbWUgJiBEaXN0cmlidXRpb24nLCAnSG9tZSAmIERpc3RyaWJ1dGlvbicpLCAoJ0luZHVzdHJpYWwgJiBBdXRvbWF0aW9uJywgJ0luZHVzdHJpYWwgJiBBdXRvbWF0aW9uJyksICgnUFAnLCAnUG93ZXIgUHJvZHVjdHMnKSwgKCdQUycsICdQb3dlciBTeXN0ZW0gUHJpbWFyeScpLCAoJ1Bvd2VyIFN5c3RlbSBTZWNvbmRhcnknLCAnUG93ZXIgU3lzdGVtIFNlY29uZGFyeScpLCAoJ1NQJywgJ1NlY3VyZSBQb3dlcicpLCAoJ0FMTCcsICdBTEwnKSwgKCdOQScsICdOQScpXSwgbWF4X2xlbmd0aD0zMCwgbnVsbD1UcnVlKSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0ncHJvamVjdCcsCiAgICAgICAgICAgIG5hbWU9J0NsdXN0ZXInLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuQ2hhckZpZWxkKGJsYW5rPVRydWUsIGNob2ljZXM9WygnTVRTLU1UTycsICdNVFMtTVRPJyksICgnTVRPLUNUTycsICdNVE8tQ1RPJyksICgnTVRTLUNUTycsICdNVFMtQ1RPJyksICgnRVRPLU1WJywgJ0VUTy1NVicpLCAoJ05BJywgJ05BJyldLCBtYXhfbGVuZ3RoPTQwLCBudWxsPVRydWUpLAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdwcm9qZWN0JywKICAgICAgICAgICAgbmFtZT0nQ29tcGxleGl0eScsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5JbnRlZ2VyRmllbGQoYmxhbms9VHJ1ZSwgY2hvaWNlcz1bKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSldLCBudWxsPVRydWUpLAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdwcm9qZWN0JywKICAgICAgICAgICAgbmFtZT0nQ3VycmVudF9zdGF0dXMnLAo8fGZpbV9ob2xlfD4KICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0ncHJvamVjdCcsCiAgICAgICAgICAgIG5hbWU9J0xvYicsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5DaGFyRmllbGQoYmxhbms9VHJ1ZSwgY2hvaWNlcz1bKCdEQlBSRCcsICdEQlBSRCcpLCAoJ0RQRU5QJywgJ0RQRU5QJyksICgnRFBTT0wnLCAnRFBTT0wnKSwgKCdJREVVUicsICdJREVVUicpLCAoJ0lESE1JJywgJ0lESE1JJyksICgnSURNU1QnLCAnSURNU1QnKSwgKCdJRFNEUycsICdJRFNEUycpLCAoJ0lEU0lHJywgJ0lEU0lHJyksICgnSURWU0QnLCAnSURWU0QnKSwgKCdJRFdEQScsICdJRFdEQScpLCAoJ0lOTUNQJywgJ0lOTUNQJyksICgnSU5NVkUnLCAnSU5NVkUnKSwgKCdJTk1WUCcsICdJTk1WUCcpLCAoJ1BUQUNCJywgJ1BUQUNCJyksICgnUFRDQ0InLCAnUFRDQ0InKSwgKCdQVENUUicsICdQVENUUicpLCAoJ1BURVFQJywgJ1BURVFQJyksICgnUFRGREEnLCAnUFRGREEnKSwgKCdQVEZEQicsICdQVEZEQicpLCAoJ1BUTFRWQicsICdQVExUVkInKSwgKCdQVFNPTCcsICdQVFNPTCcpLCAoJ1BUV0RBJywgJ1BUV0RBJyksICgnU1AzUEgnLCAnU1AzUEgnKSwgKCdTUE1EQycsICdTUE1EQycpLCAoJ0hERkRCJywgJ0hERkRCJyksICgnQUxMJywgJ0FMTCcpLCAoJ05BJywgJ05BJyldLCBtYXhfbGVuZ3RoPTMwLCBudWxsPVRydWUpLAogICAgICAgICksCiAgICBdCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5DaGFyRmllbGQoYmxhbms9VHJ1ZSwgY2hvaWNlcz1bKCdPcGVuJywgJ09wZW4nKSwgKCdEbycsICdEbycpLCAoJ0lNUCcsICdJTVAnKSwgKCdQcm9kdWNlJywgJ1Byb2R1Y2UnKSwgKCdTZWxsJywgJ1NlbGwnKSwgKCdDbG9zZWQnLCAnQ2xvc2VkJyldLCBtYXhfbGVuZ3RoPTMwLCBudWxsPVRydWUpLAo8fGZpbV9lbmR8Pg=="]
["ec2b3d758d95087958ffb3934148d96e0ab80f1b-2","ec2b3d758d95087958ffb3934148d96e0ab80f1b","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMS40IG9uIDIwMjEtMDMtMjYgMTI6NDEKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ1BNJywgJzAwMDZfYXV0b18yMDIxMDMxOF8xNzAwJyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J2NhcmRpbmZvJywKICAgICAgICAgICAgbmFtZT0nU3VtbWFyeScsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkNoYXJGaWVsZChibGFuaz1UcnVlLCBtYXhfbGVuZ3RoPTMwMCwgbnVsbD1UcnVlKSwKPHxmaW1fZW5kfD4="]
["ec2b3d758d95087958ffb3934148d96e0ab80f1b-3","ec2b3d758d95087958ffb3934148d96e0ab80f1b","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMS40IG9uIDIwMjEtMDMtMjYgMTI6NDEKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ1BNJywgJzAwMDZfYXV0b18yMDIxMDMxOF8xNzAwJyksCiAgICBdCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBvcGVyYXRpb25zID0gWwogICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nY2FyZGluZm8nLAogICAgICAgICAgICBuYW1lPSdTdW1tYXJ5JywKPHxmaW1fZW5kfD4="]
["ec2b3d758d95087958ffb3934148d96e0ab80f1b-4","ec2b3d758d95087958ffb3934148d96e0ab80f1b","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMS40IG9uIDIwMjEtMDMtMjYgMTI6NDEKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVwZW5kZW5jaWVzID0gWwogICAgICAgICgnUE0nLCAnMDAwNl9hdXRvXzIwMjEwMzE4XzE3MDAnKSwKICAgIF0KCjx8ZmltX2VuZHw+"]
["ec2b3d758d95087958ffb3934148d96e0ab80f1b-5","ec2b3d758d95087958ffb3934148d96e0ab80f1b","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMS40IG9uIDIwMjEtMDMtMjYgMTI6NDEKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ1BNJywgJzAwMDZfYXV0b18yMDIxMDMxOF8xNzAwJyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J2NhcmRpbmZvJywKICAgICAgICAgICAgbmFtZT0nU3VtbWFyeScsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5DaGFyRmllbGQoYmxhbms9VHJ1ZSwgbWF4X2xlbmd0aD0zMDAsIG51bGw9VHJ1ZSksCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J3Byb2plY3QnLAogICAgICAgICAgICBuYW1lPSdCVScsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5DaGFyRmllbGQoYmxhbms9VHJ1ZSwgY2hvaWNlcz1bKCdEaWdpdGFsIEVuZXJneScsICdEaWdpdGFsIEVuZXJneScpLCAoJ0hvbWUgJiBEaXN0cmlidXRpb24nLCAnSG9tZSAmIERpc3RyaWJ1dGlvbicpLCAoJ0luZHVzdHJpYWwgJiBBdXRvbWF0aW9uJywgJ0luZHVzdHJpYWwgJiBBdXRvbWF0aW9uJyksICgnUFAnLCAnUG93ZXIgUHJvZHVjdHMnKSwgKCdQUycsICdQb3dlciBTeXN0ZW0gUHJpbWFyeScpLCAoJ1Bvd2VyIFN5c3RlbSBTZWNvbmRhcnknLCAnUG93ZXIgU3lzdGVtIFNlY29uZGFyeScpLCAoJ1NQJywgJ1NlY3VyZSBQb3dlcicpLCAoJ0FMTCcsICdBTEwnKSwgKCdOQScsICdOQScpXSwgbWF4X2xlbmd0aD0zMCwgbnVsbD1UcnVlKSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0ncHJvamVjdCcsCiAgICAgICAgICAgIG5hbWU9J0NsdXN0ZXInLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuQ2hhckZpZWxkKGJsYW5rPVRydWUsIGNob2ljZXM9WygnTVRTLU1UTycsICdNVFMtTVRPJyksICgnTVRPLUNUTycsICdNVE8tQ1RPJyksICgnTVRTLUNUTycsICdNVFMtQ1RPJyksICgnRVRPLU1WJywgJ0VUTy1NVicpLCAoJ05BJywgJ05BJyldLCBtYXhfbGVuZ3RoPTQwLCBudWxsPVRydWUpLAogICAgICAgICksCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J3Byb2plY3QnLAogICAgICAgICAgICBuYW1lPSdDb21wbGV4aXR5JywKICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkludGVnZXJGaWVsZChibGFuaz1UcnVlLCBjaG9pY2VzPVsoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1KV0sIG51bGw9VHJ1ZSksCjx8ZmltX2VuZHw+"]
["1589f063e07c7b47f9246f9a54d263fef2deb5f5-1","1589f063e07c7b47f9246f9a54d263fef2deb5f5","PHxmaW1fcHJlZml4fD4KZnJvbSB4bWwuZG9tLm1pbmlkb20gaW1wb3J0IERPTUltcGxlbWVudGF0aW9uCmZyb20geG1sLmRvbS5taW5pZG9tIGltcG9ydCBEb2N1bWVudApmcm9tIFJHVC5YTUwuU1ZHLnN2Z05vZGUgaW1wb3J0IFN2Z05vZGUKZnJvbSBSR1QuWE1MLlNWRy5nTm9kZSBpbXBvcnQgR05vZGUKZnJvbSBSR1QuWE1MLlNWRy5kZWZzTm9kZSBpbXBvcnQgRGVmc05vZGUKZnJvbSBSR1QuWE1MLlNWRy5kZXNjTm9kZSBpbXBvcnQgRGVzY05vZGUKZnJvbSBSR1QuWE1MLlNWRy50aXRsZU5vZGUgaW1wb3J0IFRpdGxlTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLnN5bWJvbE5vZGUgaW1wb3J0IFN5bWJvbE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5pbWFnZU5vZGUgaW1wb3J0IEltYWdlTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLnVzZU5vZGUgaW1wb3J0IFVzZU5vZGUKZnJvbSBSR1QuWE1MLlNWRy5zd2l0Y2hOb2RlIGltcG9ydCBTd2l0Y2hOb2RlCmZyb20gUkdULlhNTC5TVkcuc3R5bGVOb2RlIGltcG9ydCBTdHlsZU5vZGUKZnJvbSBSR1QuWE1MLlNWRy5wYXRoTm9kZSBpbXBvcnQgUGF0aE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5yZWN0Tm9kZSBpbXBvcnQgUmVjdE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5jaXJjbGVOb2RlIGltcG9ydCBDaXJjbGVOb2RlCmZyb20gUkdULlhNTC5TVkcuZWxsaXBzZU5vZGUgaW1wb3J0IEVsbGlwc2VOb2RlCmZyb20gUkdULlhNTC5TVkcubGluZU5vZGUgaW1wb3J0IExpbmVOb2RlCmZyb20gUkdULlhNTC5TVkcucG9seWxpbmVOb2RlIGltcG9ydCBQb2x5bGluZU5vZGUKZnJvbSBSR1QuWE1MLlNWRy5wb2x5Z29uTm9kZSBpbXBvcnQgUG9seWdvbk5vZGUKZnJvbSBSR1QuWE1MLlNWRy50ZXh0Tm9kZSBpbXBvcnQgVGV4dE5vZGUKZnJvbSBSR1QuWE1MLlNWRy50c3Bhbk5vZGUgaW1wb3J0IFRzcGFuTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLnRyZWZOb2RlIGltcG9ydCBUcmVmTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLnRleHRQYXRoTm9kZSBpbXBvcnQgVGV4dFBhdGhOb2RlCmZyb20gUkdULlhNTC5TVkcuYWx0R2x5cGhOb2RlIGltcG9ydCBBbHRHbHlwaE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5hbHRHbHlEZWZOb2RlIGltcG9ydCBBbHRHbHlwaERlZk5vZGUKZnJvbSBSR1QuWE1MLlNWRy5hbHRHbHlwaEl0ZW1Ob2RlIGltcG9ydCBBbHRHbHlwaEl0ZW1Ob2RlCmZyb20gUkdULlhNTC5TVkcuZ2x5cGhSZWZOb2RlIGltcG9ydCBHbHlwaFJlZk5vZGUKZnJvbSBSR1QuWE1MLlNWRy5tYXJrZXJOb2RlIGltcG9ydCBNYXJrZXJOb2RlCmZyb20gUkdULlhNTC5TVkcuY29sb3JQcm9maWxlTm9kZSBpbXBvcnQgQ29sb3JQcm9maWxlTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLmNsaXBQYXRoTm9kZSBpbXBvcnQgQ2xpcFBhdGhOb2RlCmZyb20gUkdULlhNTC5TVkcubWFza05vZGUgaW1wb3J0IE1hc2tOb2RlCmZyb20gUkdULlhNTC5TVkcuZmlsdGVyTm9kZSBpbXBvcnQgRmlsdGVyTm9kZQojZmlsdGVycwpmcm9tIFJHVC5YTUwuU1ZHLkZpbHRlcnMuZmVEaXN0YW50TGlnaHROb2RlIGltcG9ydCBGZURpc3RhbnRMaWdodE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5GaWx0ZXJzLmZlUG9pbnRMaWdodE5vZGUgaW1wb3J0IEZlUG9pbnRMaWdodE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5GaWx0ZXJzLmZlU3BvdExpZ2h0Tm9kZSBpbXBvcnQgRmVTcG90TGlnaHROb2RlCmZyb20gUkdULlhNTC5TVkcuRmlsdGVycy5mZUJsZW5kTm9kZSBpbXBvcnQgRmVCbGVuZE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5GaWx0ZXJzLmZlQ29sb3JNYXRyaXhOb2RlIGltcG9ydCBGZUNvbG9yTWF0cml4Tm9kZQpmcm9tIFJHVC5YTUwuU1ZHLkZpbHRlcnMuZmVDb21wb25lbnRUcmFuc2Zlck5vZGUgaW1wb3J0IEZlQ29tcG9uZW50VHJhbnNmZXJOb2RlCmZyb20gUkdULlhNTC5TVkcuRmlsdGVycy5mZUZ1bmNSTm9kZSBpbXBvcnQgRmVGdW5jUk5vZGUKZnJvbSBSR1QuWE1MLlNWRy5GaWx0ZXJzLmZlRnVuY0dOb2RlIGltcG9ydCBGZUZ1bmNHTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLkZpbHRlcnMuZmVGdW5jQU5vZGUgaW1wb3J0IEZlRnVuY0FOb2RlCmZyb20gUkdULlhNTC5TVkcuRmlsdGVycy5mZUZ1bmNCTm9kZSBpbXBvcnQgRmVGdW5jQk5vZGUKZnJvbSBSR1QuWE1MLlNWRy5GaWx0ZXJzLmZlQ29tcG9zaXRlTm9kZSBpbXBvcnQgRmVDb21wb3NpdGVOb2RlCmZyb20gUkdULlhNTC5TVkcuRmlsdGVycy5mZUNvbnZvbHZlTWF0cml4Tm9kZSBpbXBvcnQgRmVDb252b2x2ZU1hdHJpeE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5GaWx0ZXJzLmZlRGlmZnVzZUxpZ2h0aW5nTm9kZSBpbXBvcnQgRmVEaWZmdXNlTGlnaHRpbmdOb2RlCmZyb20gUkdULlhNTC5TVkcuRmlsdGVycy5mZURpc3BsYWNlbWVudE1hcE5vZGUgaW1wb3J0IEZlRGlzcGxhY2VtZW50TWFwTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLkZpbHRlcnMuZmVGbG9vZE5vZGUgaW1wb3J0IEZlRmxvb2ROb2RlCmZyb20gUkdULlhNTC5TVkcuRmlsdGVycy5mZUdhdXNzaWFuQmx1ck5vZGUgaW1wb3J0IEZlR2F1c3NpYW5CbHVyTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLkZpbHRlcnMuZmVJbWFnZU5vZGUgaW1wb3J0IEZlSW1hZ2VOb2RlCmZyb20gUkdULlhNTC5TVkcuRmlsdGVycy5mZU1lcmdlTm9kZSBpbXBvcnQgRmVNZXJnZU5vZGUKZnJvbSBSR1QuWE1MLlNWRy5GaWx0ZXJzLmZlTWVyZ2VOb2RlTm9kZSBpbXBvcnQgRmVNZXJnZU5vZGVOb2RlCmZyb20gUkdULlhNTC5TVkcuRmlsdGVycy5mZU1vcnBob2xvZ3lOb2RlIGltcG9ydCBGZU1vcnBob2xvZ3lOb2RlCmZyb20gUkdULlhNTC5TVkcuRmlsdGVycy5mZU9mZnNldE5vZGUgaW1wb3J0IEZlT2Zmc2V0Tm9kZQpmcm9tIFJHVC5YTUwuU1ZHLkZpbHRlcnMuZmVTcGVjdWxhckxpZ2h0aW5nTm9kZSBpbXBvcnQgRmVTcGVjdWxhckxpZ2h0aW5nTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLkZpbHRlcnMuZmVUaWxlTm9kZSBpbXBvcnQgRmVUaWxlTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLkZpbHRlcnMuZmVUdXJidWxlbmNlTm9kZSBpbXBvcnQgRmVUdXJidWxlbmNlTm9kZQojZmluaXNoIGZpbHRlcnMKZnJvbSBSR1QuWE1MLlNWRy5jdXJzb3JOb2RlIGltcG9ydCBDdXJzb3JOb2RlCmZyb20gUkdULlhNTC5TVkcuYU5vZGUgaW1wb3J0IEFOb2RlCmZyb20gUkdULlhNTC5TVkcudmlld05vZGUgaW1wb3J0IFZpZXdOb2RlCmZyb20gUkdULlhNTC5TVkcuc2NyaXB0Tm9kZSBpbXBvcnQgU2NyaXB0Tm9kZQojYW5pbWF0ZQpmcm9tIFJHVC5YTUwuU1ZHLkFuaW1hdGlvbi5hbmltYXRlTm9kZSBpbXBvcnQgQW5pbWF0ZU5vZGUKZnJvbSBSR1QuWE1MLlNWRy5BbmltYXRpb24uc2V0Tm9kZSBpbXBvcnQgU2V0Tm9kZQpmcm9tIFJHVC5YTUwuU1ZHLkFuaW1hdGlvbi5hbmltYXRlTW90aW9uTm9kZSBpbXBvcnQgQW5pbWF0ZU1vdGlvbk5vZGUKZnJvbSBSR1QuWE1MLlNWRy5BbmltYXRpb24ubXBhdGhOb2RlIGltcG9ydCBNcGF0aE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5BbmltYXRpb24uYW5pbWF0ZUNvbG9yTm9kZSBpbXBvcnQgQW5pbWF0ZUNvbG9yTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLkFuaW1hdGlvbi5hbmltYXRlVHJhbnNmb3JtTm9kZSBpbXBvcnQgQW5pbWF0ZVRyYW5zZm9ybU5vZGUKI2VuZCBhbmltYXRlCiNmb250CmZyb20gUkdULlhNTC5TVkcuZm9udE5vZGUgaW1wb3J0IEZvbnROb2RlCmZyb20gUkdULlhNTC5TVkcuZ2x5cGhOb2RlIGltcG9ydCBHbHlwaE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5taXNzaW5nR2x5cGhOb2RlIGltcG9ydCBNaXNzaW5nR2x5cGgKZnJvbSBSR1QuWE1MLlNWRy5oa2Vybk5vZGUgaW1wb3J0IEhrZXJuTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLnZrZXJuTm9kZSBpbXBvcnQgVmtlcm5Ob2RlCmZyb20gUkdULlhNTC5TVkcuZm9udEZhY2VOb2RlIGltcG9ydCBGb250RmFjZU5vZGUKZnJvbSBSR1QuWE1MLlNWRy5mb250RmFjZVNyY05vZGUgaW1wb3J0IEZvbnRGYWNlU3JjTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLmZvbnRGYWNlVXJpTm9kZSBpbXBvcnQgRm9udEZhY2VVcmlOb2RlCmZyb20gUkdULlhNTC5TVkcuZm9udEZhY2VGb3JtYXROb2RlIGltcG9ydCBGb250RmFjZUZvcm1hdE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5mb250RmFjZU5hbWVOb2RlIGltcG9ydCBGb250RmFjZU5hbWVOb2RlCiNlbmQgZm9udApmcm9tIFJHVC5YTUwuU1ZHLm1ldGFkYXRhTm9kZSBpbXBvcnQgTWV0YWRhdGFOb2RlCmZyb20gUkdULlhNTC5TVkcuZm9yZWlnbk9iamVjdE5vZGUgaW1wb3J0IEZvcmVpZ25PYmplY3ROb2RlCiNncmFkaWVudApmcm9tIFJHVC5YTUwuU1ZHLmxpbmVhckdyYWRpZW50Tm9kZSBpbXBvcnQgTGluZWFyR3JhZGllbnROb2RlCmZyb20gUkdULlhNTC5TVkcucmFkaWFsR3JhZGllbnROb2RlIGltcG9ydCBSYWRpYWxHcmFkaWVudE5vZGUKI2VuZCBncmFkaWVudApmcm9tIFJHVC5YTUwuU1ZHLnBhdHRlcm5Ob2RlIGltcG9ydCBQYXR0ZXJuTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLnN0b3BOb2RlIGltcG9ydCBTdG9wTm9kZQoKI2NsYXNzIGNvcGllZCBmcm9tIG1pbmlkb20KY2xhc3MgU3ZnRE9NSW1wbGVtZW50YXRpb24oRE9NSW1wbGVtZW50YXRpb24pOgogICAgZGVmIGNyZWF0ZVN2Z0RvY3VtZW50KHNlbGYpOgogICAgICAgICNuYW1lc3BhY2VVUkk9IE5vbmUKICAgICAgICBkb2N0eXBlID0gTm9uZQogICAgICAgICNxdWFsaWZpZWROYW1lPSAnc3ZnJwoKICAgICAgICBkb2MgPSBTdmdEb2N1bWVudCgpCgogICAgICAgIGVsZW1lbnQgPSBkb2MuY3JlYXRlU3ZnTm9kZSgpCiAgICAgICAgZG9jLmFwcGVuZENoaWxkKGVsZW1lbnQpCgogICAgICAgIGRvYy5kb2N0eXBlID0gZG9jdHlwZQogICAgICAgIGRvYy5pbXBsZW1lbnRhdGlvbiA9IHNlbGYKICAgICAgICByZXR1cm4gZG9jCgojY2xhc3MgY29waWVkIGZyb20gbWluaWRvbQpjbGFzcyBTdmdEb2N1bWVudChEb2N1bWVudCk6CiAgICBpbXBsZW1lbnRhdGlvbiA9IFN2Z0RPTUltcGxlbWVudGF0aW9uCgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIERvY3VtZW50Ll9faW5pdF9fKHNlbGYpCgogICAgZGVmIGNyZWF0ZVN2Z05vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIFN2Z05vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlR05vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIEdOb2RlKHNlbGYpCgogICAgZGVmIGNyZWF0ZURlZnNOb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBEZWZzTm9kZShzZWxmKQoKICAgIGRlZiBjcmVhdGVEZXNjTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gRGVzY05vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlVGl0bGVOb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBUaXRsZU5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlU3ltYm9sTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gU3ltYm9sTm9kZShzZWxmKQoKICAgIGRlZiBjcmVhdGVVc2VOb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBVc2VOb2RlKHNlbGYpCgogICAgZGVmIGNyZWF0ZUltYWdlTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gSW1hZ2VOb2RlKHNlbGYpCgogICAgZGVmIGNyZWF0ZVN3aXRjaE5vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIFN3aXRjaE5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlU3R5bGVOb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBTdHlsZU5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlUGF0aE5vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIFBhdGhOb2RlKHNlbGYpCgogICAgZGVmIGNyZWF0ZVJlY3ROb2RlKHNlbGYsIHg9Tm9uZSwgeT1Ob25lLCBoZWlnaHQ9Tm9uZSwgd2lkdGg9Tm9uZSk6CiAgICAgICAgcmV0dXJuIFJlY3ROb2RlKHNlbGYsIHgsIHksIGhlaWdodCwgd2lkdGgpCgogICAgZGVmIGNyZWF0ZUNpcmNsZU5vZGUoc2VsZiwgY3g9Tm9uZSwgY3k9Tm9uZSwgcj1Ob25lKToKICAgICAgICByZXR1cm4gQ2lyY2xlTm9kZShzZWxmLCBjeCwgY3ksIHIpCgogICAgZGVmIGNyZWF0ZUVsbGlwc2VOb2RlKHNlbGYsIHJ4PU5vbmUsIHJ5PU5vbmUpOgogICAgICAgIHJldHVybiBFbGxpcHNlTm9kZShzZWxmLCByeCwgcnkpCgogICAgZGVmIGNyZWF0ZUxpbmVOb2RlKHNlbGYsIHgxPU5vbmUsIHkxPU5vbmUsIHgyPU5vbmUsIHkyPU5vbmUpOgogICAgICAgIGxpbmVOb2RlID0gTGluZU5vZGUoc2VsZiwgeDEsIHkxLCB4MiwgeTIpCiAgICAgICAgcmV0dXJuIGxpbmVOb2RlCgogICAgZGVmIGNyZWF0ZVBvbHlsaW5lTm9kZShzZWxmLCBwb2ludHM9Tm9uZSk6CiAgICAgICAgcmV0dXJuIFBvbHlsaW5lTm9kZShzZWxmLCBwb2ludHMpCgogICAgZGVmIGNyZWF0ZVBvbHlnb25Ob2RlKHNlbGYsIHBvaW50cz1Ob25lKToKICAgICAgICByZXR1cm4gUG9seWdvbk5vZGUoc2VsZiwgcG9pbnRzKQoKICAgIGRlZiBjcmVhdGVTdmdUZXh0Tm9kZShzZWxmLCB4PU5vbmUsIHk9Tm9uZSwgdGV4dD1Ob25lKToKICAgICAgICByZXR1cm4gVGV4dE5vZGUoc2VsZiwgeCwgeSwgdGV4dCkKCiAgICBkZWYgY3JlYXRlVHNwYW5Ob2RlKHNlbGYsIHg9Tm9uZSwgeT1Ob25lKToKICAgICAgICByZXR1cm4gVHNwYW5Ob2RlKHNlbGYsIHgsIHkpCgogICAgZGVmIGNyZWF0ZVRyZWZOb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBUcmVmTm9kZShzZWxmKQoKICAgIGRlZiBjcmVhdGVUZXh0UGF0aE5vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIFRleHRQYXRoTm9kZShzZWxmKQoKICAgIGRlZiBjcmVhdGVBbHRHbHlwaE5vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIEFsdEdseXBoTm9kZShzZWxmKQoKICAgIGRlZiBjcmVhdGVBbHRHbHlwaERlZk5vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIEFsdEdseXBoRGVmTm9kZShzZWxmKQoKICAgIGRlZiBjcmVhdGVBbHRHbHlwaEl0ZW1Ob2RlKHNlbGYpOgogICAgICAgIHJldHVybiBBbHRHbHlwaEl0ZW1Ob2RlKHNlbGYpCgogICAgZGVmIGNyZWF0ZUdseXBoUmVmTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gR2x5cGhSZWZOb2RlKHNlbGYpCgogICAgZGVmIGNyZWF0ZU1hcmtlck5vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIE1hcmtlck5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlQ29sb3JQcm9maWxlTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gQ29sb3JQcm9maWxlTm9kZShzZWxmKQoKICAgIGRlZiBjcmVhdGVDbGlwUGF0aE5vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIENsaXBQYXRoTm9kZShzZWxmKQoKICAgIGRlZiBjcmVhdGVNYXNrTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gTWFza05vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlRmlsdGVyTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gRmlsdGVyTm9kZShzZWxmKQoKICAgICNmaWx0ZXJzCgogICAgZGVmIGNyZWF0ZUZlRGlzdGFudExpZ2h0Tm9kZShzZWxmLCBhemltdXRoPU5vbmUsIGVsZXZhdGlvbj1Ob25lKToKICAgICAgICByZXR1cm4gRmVEaXN0YW50TGlnaHROb2RlKHNlbGYsIGF6aW11dGgsIGVsZXZhdGlvbikKCiAgICBkZWYgY3JlYXRlRmVQb2ludExpZ2h0Tm9kZShzZWxmLCB4PU5vbmUsIHk9Tm9uZSwgej1Ob25lKToKICAgICAgICByZXR1cm4gRmVQb2ludExpZ2h0Tm9kZShzZWxmLCB4LCB5LCB6KQoKICAgIGRlZiBjcmVhdGVGZVNwb3RMaWdodE5vZGUoc2VsZiwgeD1Ob25lLCB5PU5vbmUsIHo9Tm9uZSwgc3BlY3VsYXJFeHBvbmVudD1Ob25lLCBsaW1pdGluZ0NvbmVBbmdsZT1Ob25lKToKICAgICAgICByZXR1cm4gRmVTcG90TGlnaHROb2RlKHNlbGYsIHgsIHksIHosIHNwZWN1bGFyRXhwb25lbnQsIGxpbWl0aW5nQ29uZUFuZ2xlKQoKICAgIGRlZiBjcmVhdGVGZUJsZW5kTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gRmVCbGVuZE5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlRmVDb2xvck1hdHJpeE5vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIEZlQ29sb3JNYXRyaXhOb2RlKHNlbGYpCgogICAgZGVmIGNyZWF0ZUZlQ29tcG9uZW50VHJhbnNmZXJOb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBGZUNvbXBvbmVudFRyYW5zZmVyTm9kZShzZWxmKQoKICAgIGRlZiBjcmVhdGVGZUZ1bmNSTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gRmVGdW5jUk5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlRmVGdW5jR05vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIEZlRnVuY0dOb2RlKHNlbGYpCgogICAgZGVmIGNyZWF0ZUZlRnVuY0Eoc2VsZik6CiAgICAgICAgcmV0dXJuIEZlRnVuY0FOb2RlKHNlbGYpCgogICAgZGVmIGNyZWF0ZUZlRnVuY0Ioc2VsZik6CiAgICAgICAgcmV0dXJuIEZlRnVuY0JOb2RlKHNlbGYpCgogICAgZGVmIGNyZWF0ZUZlQ29tcG9zaXRlTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gRmVDb21wb3NpdGVOb2RlKHNlbGYpCgogICAgZGVmIGNyZWF0ZXJGZUNvbnZvbHZlTWF0cml4Tm9kZShzZWxmKToKICAgICAgICByZXR1cm4gRmVDb252b2x2ZU1hdHJpeE5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlRmVEaWZmdXNlTGlnaHRpbmdOb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBGZURpZmZ1c2VMaWdodGluZ05vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlRmVEaXNwbGFjZW1lbnRNYXBOb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBGZURpc3BsYWNlbWVudE1hcE5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlRmVGbG9vZE5vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIEZlRmxvb2ROb2RlKHNlbGYpCgogICAgZGVmIGNyZWF0ZUZlR2F1c3NpYW5CbHVyTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gRmVHYXVzc2lhbkJsdXJOb2RlKHNlbGYpCgogICAgZGVmIGNyZWF0ZUZlSW1hZ2VOb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBGZUltYWdlTm9kZShzZWxmKQoKICAgIGRlZiBjcmVhdGVGZU1lcmdlTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gRmVNZXJnZU5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlRmVNZXJnZU5vZGVOb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBGZU1lcmdlTm9kZU5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlRmVNb3JwaG9sb2d5Tm9kZShzZWxmKToKICAgICAgICByZXR1cm4gRmVNb3JwaG9sb2d5Tm9kZShzZWxmKQoKICAgIGRlZiBjcmVhdGVGZU9mZnNldE5vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIEZlT2Zmc2V0Tm9kZShzZWxmKQoKICAgIGRlZiBjcmVhdGVGZVNwZWN1bGFyTGlnaHRpbmdOb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBGZVNwZWN1bGFyTGlnaHRpbmdOb2RlKHNlbGYpCgogICAgZGVmIGNyZWF0ZUZlVGlsZU5vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIEZlVGlsZU5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlRmVUdXJidWxlbmNlTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gRmVUdXJidWxlbmNlTm9kZShzZWxmKQoKICAgICNlbmQgZmlsdGVycwoKICAgIGRlZiBjcmVhdGVDdXJzb3JOb2RlKHNlbGYsIHg9Tm9uZSwgeT1Ob25lKToKICAgICAgICByZXR1cm4gQ3Vyc29yTm9kZShzZWxmLCB4LCB5KQoKICAgIGRlZiBjcmVhdGVBTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gQU5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlVmlld05vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIFZpZXdOb2RlKHNlbGYpCgogICAgZGVmIGNyZWF0ZVNjcmlwdE5vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIFNjcmlwdE5vZGUoc2VsZikKCiAgICAjYW5pbWF0ZQoKICAgIGRlZiBjcmVhdGVBbmltYXRlTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gQW5pbWF0ZU5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlU2V0Tm9kZShzZWxmKToKICAgICAgICByZXR1cm4gU2V0Tm9kZShzZWxmKQoKICAgIGRlZiBjcmVhdGVBbmltYXRlTW90aW9uTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gQW5pbWF0ZU1vdGlvbk5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlTVBhdGhOb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBNcGF0aE5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlQW5pbWF0ZUNvbG9yTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gQW5pbWF0ZUNvbG9yTm9kZShzZWxmKQoKICAgIGRlZiBjcmVhdGVBbmltYXRlVHJhbnNmb3JtTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gQW5pbWF0ZVRyYW5zZm9ybU5vZGUoc2VsZikKCiAgICAjZW5kIGFuaW1hdGUKCiAgICAjZm9udAoKICAgIGRlZiBjcmVhdGVGb250Tm9kZShzZWxmKToKICAgICAgICByZXR1cm4gRm9udE5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlR2x5cHRoTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gR2x5cGhOb2RlKHNlbGYpCgogICAgZGVmIGNyZWF0ZU1pc3NpbmdHbHlwdGhOb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBNaXNzaW5nR2x5cGgoc2VsZikKCiAgICBkZWYgY3JlYXRlSGtlcm5Ob2RlKHNlbGYpOgogICAgICAgIHJldHVybiBIa2Vybk5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlVmtlcm5Ob2RlKHNlbGYpOgogICAgICAgIHJldHVybiBWa2Vybk5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlRm9udEZhY2VOb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBGb250RmFjZU5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlRm9udEZhY2VTcmNOb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBGb250RmFjZVNyY05vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlRm9udEZhY2VVcmlOb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBGb250RmFjZVVyaU5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlRm9udEZhY2VGb3JtYXROb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBGb250RmFjZUZvcm1hdE5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlRm9udEZhY2VOYW1lTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gRm9udEZhY2VOYW1lTm9kZShzZWxmKQoKICAgICNlbmQgZm9udAoKICAgIGRlZiBjcmVhdGVNZXRhZGF0YU5vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIE1ldGFkYXRhTm9kZShzZWxmKQoKICAgIGRlZiBjcmVhdGVGb3JlaWduT2JqZWN0Tm9kZShzZWxmKToKICAgICAgICByZXR1cm4gRm9yZWlnbk9iamVjdE5vZGUoc2VsZikKCiAgICAjZ3JhZGllbnQKCiAgICBkZWYgY3JlYXRlTGluZWFyR3JhZGllbnROb2RlKHNlbGYsIHgxPU5vbmUsIHkxPU5vbmUsIHgyPU5vbmUsIHkyPU5vbmUpOgogICAgICAgIHJldHVybiBMaW5lYXJHcmFkaWVudE5vZGUoc2VsZiwgeDEsIHkxLCB4MiwgeTIpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgY3JlYXRlUmFkaWFsR3JhZGllbnROb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBSYWRpYWxHcmFkaWVudE5vZGUoc2VsZikKCiAgICAjZW5kIGdyYWRpZW50Cjx8ZmltX2VuZHw+"]
["1589f063e07c7b47f9246f9a54d263fef2deb5f5-2","1589f063e07c7b47f9246f9a54d263fef2deb5f5","PHxmaW1fcHJlZml4fD4KZnJvbSB4bWwuZG9tLm1pbmlkb20gaW1wb3J0IERPTUltcGxlbWVudGF0aW9uCmZyb20geG1sLmRvbS5taW5pZG9tIGltcG9ydCBEb2N1bWVudApmcm9tIFJHVC5YTUwuU1ZHLnN2Z05vZGUgaW1wb3J0IFN2Z05vZGUKZnJvbSBSR1QuWE1MLlNWRy5nTm9kZSBpbXBvcnQgR05vZGUKZnJvbSBSR1QuWE1MLlNWRy5kZWZzTm9kZSBpbXBvcnQgRGVmc05vZGUKZnJvbSBSR1QuWE1MLlNWRy5kZXNjTm9kZSBpbXBvcnQgRGVzY05vZGUKZnJvbSBSR1QuWE1MLlNWRy50aXRsZU5vZGUgaW1wb3J0IFRpdGxlTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLnN5bWJvbE5vZGUgaW1wb3J0IFN5bWJvbE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5pbWFnZU5vZGUgaW1wb3J0IEltYWdlTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLnVzZU5vZGUgaW1wb3J0IFVzZU5vZGUKZnJvbSBSR1QuWE1MLlNWRy5zd2l0Y2hOb2RlIGltcG9ydCBTd2l0Y2hOb2RlCmZyb20gUkdULlhNTC5TVkcuc3R5bGVOb2RlIGltcG9ydCBTdHlsZU5vZGUKZnJvbSBSR1QuWE1MLlNWRy5wYXRoTm9kZSBpbXBvcnQgUGF0aE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5yZWN0Tm9kZSBpbXBvcnQgUmVjdE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5jaXJjbGVOb2RlIGltcG9ydCBDaXJjbGVOb2RlCmZyb20gUkdULlhNTC5TVkcuZWxsaXBzZU5vZGUgaW1wb3J0IEVsbGlwc2VOb2RlCmZyb20gUkdULlhNTC5TVkcubGluZU5vZGUgaW1wb3J0IExpbmVOb2RlCmZyb20gUkdULlhNTC5TVkcucG9seWxpbmVOb2RlIGltcG9ydCBQb2x5bGluZU5vZGUKZnJvbSBSR1QuWE1MLlNWRy5wb2x5Z29uTm9kZSBpbXBvcnQgUG9seWdvbk5vZGUKZnJvbSBSR1QuWE1MLlNWRy50ZXh0Tm9kZSBpbXBvcnQgVGV4dE5vZGUKZnJvbSBSR1QuWE1MLlNWRy50c3Bhbk5vZGUgaW1wb3J0IFRzcGFuTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLnRyZWZOb2RlIGltcG9ydCBUcmVmTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLnRleHRQYXRoTm9kZSBpbXBvcnQgVGV4dFBhdGhOb2RlCmZyb20gUkdULlhNTC5TVkcuYWx0R2x5cGhOb2RlIGltcG9ydCBBbHRHbHlwaE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5hbHRHbHlEZWZOb2RlIGltcG9ydCBBbHRHbHlwaERlZk5vZGUKZnJvbSBSR1QuWE1MLlNWRy5hbHRHbHlwaEl0ZW1Ob2RlIGltcG9ydCBBbHRHbHlwaEl0ZW1Ob2RlCmZyb20gUkdULlhNTC5TVkcuZ2x5cGhSZWZOb2RlIGltcG9ydCBHbHlwaFJlZk5vZGUKZnJvbSBSR1QuWE1MLlNWRy5tYXJrZXJOb2RlIGltcG9ydCBNYXJrZXJOb2RlCmZyb20gUkdULlhNTC5TVkcuY29sb3JQcm9maWxlTm9kZSBpbXBvcnQgQ29sb3JQcm9maWxlTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLmNsaXBQYXRoTm9kZSBpbXBvcnQgQ2xpcFBhdGhOb2RlCmZyb20gUkdULlhNTC5TVkcubWFza05vZGUgaW1wb3J0IE1hc2tOb2RlCmZyb20gUkdULlhNTC5TVkcuZmlsdGVyTm9kZSBpbXBvcnQgRmlsdGVyTm9kZQojZmlsdGVycwpmcm9tIFJHVC5YTUwuU1ZHLkZpbHRlcnMuZmVEaXN0YW50TGlnaHROb2RlIGltcG9ydCBGZURpc3RhbnRMaWdodE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5GaWx0ZXJzLmZlUG9pbnRMaWdodE5vZGUgaW1wb3J0IEZlUG9pbnRMaWdodE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5GaWx0ZXJzLmZlU3BvdExpZ2h0Tm9kZSBpbXBvcnQgRmVTcG90TGlnaHROb2RlCmZyb20gUkdULlhNTC5TVkcuRmlsdGVycy5mZUJsZW5kTm9kZSBpbXBvcnQgRmVCbGVuZE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5GaWx0ZXJzLmZlQ29sb3JNYXRyaXhOb2RlIGltcG9ydCBGZUNvbG9yTWF0cml4Tm9kZQpmcm9tIFJHVC5YTUwuU1ZHLkZpbHRlcnMuZmVDb21wb25lbnRUcmFuc2Zlck5vZGUgaW1wb3J0IEZlQ29tcG9uZW50VHJhbnNmZXJOb2RlCmZyb20gUkdULlhNTC5TVkcuRmlsdGVycy5mZUZ1bmNSTm9kZSBpbXBvcnQgRmVGdW5jUk5vZGUKZnJvbSBSR1QuWE1MLlNWRy5GaWx0ZXJzLmZlRnVuY0dOb2RlIGltcG9ydCBGZUZ1bmNHTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLkZpbHRlcnMuZmVGdW5jQU5vZGUgaW1wb3J0IEZlRnVuY0FOb2RlCmZyb20gUkdULlhNTC5TVkcuRmlsdGVycy5mZUZ1bmNCTm9kZSBpbXBvcnQgRmVGdW5jQk5vZGUKZnJvbSBSR1QuWE1MLlNWRy5GaWx0ZXJzLmZlQ29tcG9zaXRlTm9kZSBpbXBvcnQgRmVDb21wb3NpdGVOb2RlCmZyb20gUkdULlhNTC5TVkcuRmlsdGVycy5mZUNvbnZvbHZlTWF0cml4Tm9kZSBpbXBvcnQgRmVDb252b2x2ZU1hdHJpeE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5GaWx0ZXJzLmZlRGlmZnVzZUxpZ2h0aW5nTm9kZSBpbXBvcnQgRmVEaWZmdXNlTGlnaHRpbmdOb2RlCmZyb20gUkdULlhNTC5TVkcuRmlsdGVycy5mZURpc3BsYWNlbWVudE1hcE5vZGUgaW1wb3J0IEZlRGlzcGxhY2VtZW50TWFwTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLkZpbHRlcnMuZmVGbG9vZE5vZGUgaW1wb3J0IEZlRmxvb2ROb2RlCmZyb20gUkdULlhNTC5TVkcuRmlsdGVycy5mZUdhdXNzaWFuQmx1ck5vZGUgaW1wb3J0IEZlR2F1c3NpYW5CbHVyTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLkZpbHRlcnMuZmVJbWFnZU5vZGUgaW1wb3J0IEZlSW1hZ2VOb2RlCmZyb20gUkdULlhNTC5TVkcuRmlsdGVycy5mZU1lcmdlTm9kZSBpbXBvcnQgRmVNZXJnZU5vZGUKZnJvbSBSR1QuWE1MLlNWRy5GaWx0ZXJzLmZlTWVyZ2VOb2RlTm9kZSBpbXBvcnQgRmVNZXJnZU5vZGVOb2RlCmZyb20gUkdULlhNTC5TVkcuRmlsdGVycy5mZU1vcnBob2xvZ3lOb2RlIGltcG9ydCBGZU1vcnBob2xvZ3lOb2RlCmZyb20gUkdULlhNTC5TVkcuRmlsdGVycy5mZU9mZnNldE5vZGUgaW1wb3J0IEZlT2Zmc2V0Tm9kZQpmcm9tIFJHVC5YTUwuU1ZHLkZpbHRlcnMuZmVTcGVjdWxhckxpZ2h0aW5nTm9kZSBpbXBvcnQgRmVTcGVjdWxhckxpZ2h0aW5nTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLkZpbHRlcnMuZmVUaWxlTm9kZSBpbXBvcnQgRmVUaWxlTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLkZpbHRlcnMuZmVUdXJidWxlbmNlTm9kZSBpbXBvcnQgRmVUdXJidWxlbmNlTm9kZQojZmluaXNoIGZpbHRlcnMKZnJvbSBSR1QuWE1MLlNWRy5jdXJzb3JOb2RlIGltcG9ydCBDdXJzb3JOb2RlCmZyb20gUkdULlhNTC5TVkcuYU5vZGUgaW1wb3J0IEFOb2RlCmZyb20gUkdULlhNTC5TVkcudmlld05vZGUgaW1wb3J0IFZpZXdOb2RlCmZyb20gUkdULlhNTC5TVkcuc2NyaXB0Tm9kZSBpbXBvcnQgU2NyaXB0Tm9kZQojYW5pbWF0ZQpmcm9tIFJHVC5YTUwuU1ZHLkFuaW1hdGlvbi5hbmltYXRlTm9kZSBpbXBvcnQgQW5pbWF0ZU5vZGUKZnJvbSBSR1QuWE1MLlNWRy5BbmltYXRpb24uc2V0Tm9kZSBpbXBvcnQgU2V0Tm9kZQpmcm9tIFJHVC5YTUwuU1ZHLkFuaW1hdGlvbi5hbmltYXRlTW90aW9uTm9kZSBpbXBvcnQgQW5pbWF0ZU1vdGlvbk5vZGUKZnJvbSBSR1QuWE1MLlNWRy5BbmltYXRpb24ubXBhdGhOb2RlIGltcG9ydCBNcGF0aE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5BbmltYXRpb24uYW5pbWF0ZUNvbG9yTm9kZSBpbXBvcnQgQW5pbWF0ZUNvbG9yTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLkFuaW1hdGlvbi5hbmltYXRlVHJhbnNmb3JtTm9kZSBpbXBvcnQgQW5pbWF0ZVRyYW5zZm9ybU5vZGUKI2VuZCBhbmltYXRlCiNmb250CmZyb20gUkdULlhNTC5TVkcuZm9udE5vZGUgaW1wb3J0IEZvbnROb2RlCmZyb20gUkdULlhNTC5TVkcuZ2x5cGhOb2RlIGltcG9ydCBHbHlwaE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5taXNzaW5nR2x5cGhOb2RlIGltcG9ydCBNaXNzaW5nR2x5cGgKZnJvbSBSR1QuWE1MLlNWRy5oa2Vybk5vZGUgaW1wb3J0IEhrZXJuTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLnZrZXJuTm9kZSBpbXBvcnQgVmtlcm5Ob2RlCmZyb20gUkdULlhNTC5TVkcuZm9udEZhY2VOb2RlIGltcG9ydCBGb250RmFjZU5vZGUKZnJvbSBSR1QuWE1MLlNWRy5mb250RmFjZVNyY05vZGUgaW1wb3J0IEZvbnRGYWNlU3JjTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLmZvbnRGYWNlVXJpTm9kZSBpbXBvcnQgRm9udEZhY2VVcmlOb2RlCmZyb20gUkdULlhNTC5TVkcuZm9udEZhY2VGb3JtYXROb2RlIGltcG9ydCBGb250RmFjZUZvcm1hdE5vZGUKZnJvbSBSR1QuWE1MLlNWRy5mb250RmFjZU5hbWVOb2RlIGltcG9ydCBGb250RmFjZU5hbWVOb2RlCiNlbmQgZm9udApmcm9tIFJHVC5YTUwuU1ZHLm1ldGFkYXRhTm9kZSBpbXBvcnQgTWV0YWRhdGFOb2RlCmZyb20gUkdULlhNTC5TVkcuZm9yZWlnbk9iamVjdE5vZGUgaW1wb3J0IEZvcmVpZ25PYmplY3ROb2RlCiNncmFkaWVudApmcm9tIFJHVC5YTUwuU1ZHLmxpbmVhckdyYWRpZW50Tm9kZSBpbXBvcnQgTGluZWFyR3JhZGllbnROb2RlCmZyb20gUkdULlhNTC5TVkcucmFkaWFsR3JhZGllbnROb2RlIGltcG9ydCBSYWRpYWxHcmFkaWVudE5vZGUKI2VuZCBncmFkaWVudApmcm9tIFJHVC5YTUwuU1ZHLnBhdHRlcm5Ob2RlIGltcG9ydCBQYXR0ZXJuTm9kZQpmcm9tIFJHVC5YTUwuU1ZHLnN0b3BOb2RlIGltcG9ydCBTdG9wTm9kZQoKI2NsYXNzIGNvcGllZCBmcm9tIG1pbmlkb20KY2xhc3MgU3ZnRE9NSW1wbGVtZW50YXRpb24oRE9NSW1wbGVtZW50YXRpb24pOgogICAgZGVmIGNyZWF0ZVN2Z0RvY3VtZW50KHNlbGYpOgogICAgICAgICNuYW1lc3BhY2VVUkk9IE5vbmUKICAgICAgICBkb2N0eXBlID0gTm9uZQogICAgICAgICNxdWFsaWZpZWROYW1lPSAnc3ZnJwoKICAgICAgICBkb2MgPSBTdmdEb2N1bWVudCgpCgogICAgICAgIGVsZW1lbnQgPSBkb2MuY3JlYXRlU3ZnTm9kZSgpCiAgICAgICAgZG9jLmFwcGVuZENoaWxkKGVsZW1lbnQpCgogICAgICAgIGRvYy5kb2N0eXBlID0gZG9jdHlwZQogICAgICAgIGRvYy5pbXBsZW1lbnRhdGlvbiA9IHNlbGYKICAgICAgICByZXR1cm4gZG9jCgojY2xhc3MgY29waWVkIGZyb20gbWluaWRvbQpjbGFzcyBTdmdEb2N1bWVudChEb2N1bWVudCk6CiAgICBpbXBsZW1lbnRhdGlvbiA9IFN2Z0RPTUltcGxlbWVudGF0aW9uCgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIERvY3VtZW50Ll9faW5pdF9fKHNlbGYpCgogICAgZGVmIGNyZWF0ZVN2Z05vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIFN2Z05vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlR05vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIEdOb2RlKHNlbGYpCgogICAgZGVmIGNyZWF0ZURlZnNOb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBEZWZzTm9kZShzZWxmKQoKICAgIGRlZiBjcmVhdGVEZXNjTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gRGVzY05vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlVGl0bGVOb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBUaXRsZU5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlU3ltYm9sTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gU3ltYm9sTm9kZShzZWxmKQoKICAgIGRlZiBjcmVhdGVVc2VOb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBVc2VOb2RlKHNlbGYpCgogICAgZGVmIGNyZWF0ZUltYWdlTm9kZShzZWxmKToKICAgICAgICByZXR1cm4gSW1hZ2VOb2RlKHNlbGYpCgogICAgZGVmIGNyZWF0ZVN3aXRjaE5vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIFN3aXRjaE5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlU3R5bGVOb2RlKHNlbGYpOgogICAgICAgIHJldHVybiBTdHlsZU5vZGUoc2VsZikKCiAgICBkZWYgY3JlYXRlUGF0aE5vZGUoc2VsZik6CiAgICAgICAgcmV0dXJuIFBhdGhOb2RlKHNlbGYpCgogICAgZGVmIGNyZWF0ZVJlY3ROb2RlKHNlbGYsIHg9Tm9uZSwgeT1Ob25lLCBoZWlnaHQ9Tm9uZSwgd2lkdGg9Tm9uZSk6CiAgICAgICAgcmV0dXJuIFJlY3ROb2RlKHNlbGYsIHgsIHksIGhlaWdodCwgd2lkdGgpCgogICAgZGVmIGNyZWF0ZUNpcmNsZU5vZGUoc2VsZiwgY3g9Tm9uZSwgY3k9Tm9uZSwgcj1Ob25lKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJldHVybiBDaXJjbGVOb2RlKHNlbGYsIGN4LCBjeSwgcikKCjx8ZmltX2VuZHw+"]
["dac3a7c6e1dc94d39ff4dfc39c19f1dc46b28806-1","dac3a7c6e1dc94d39ff4dfc39c19f1dc46b28806","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCBvcwpmcm9tIGNhcmQgaW1wb3J0IHljbWFrZXIKCgpjbGFzcyBUZXN0WXVnaW9oQ2FyZE1ha2VyKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiB0ZXN0X2NvbnN0cnVjdF9yZXF1ZXN0X3ZhbGlkX2FyZ3Moc2VsZik6CiAgICAgICAgZXhwZWN0ZWQgPSAnaHR0cHM6Ly93d3cueXVnaW9oY2FyZG1ha2VyLm5ldC95Y21ha2VyL2NyZWF0ZWNhcmQucGhwP25hbWU9JmNhcmR0eXBlPU1vbnN0ZXImdHJhcG1hZ2ljdHlwZT1RdWljay1QbGF5JnN1YnR5cGU9bm9ybWFsJmF0dHJpYnV0ZT1MaWdodCZsZXZlbD0xJyBcCiAgICAgICAgICAgICAgICAgICAnJnJhcml0eT1Db21tb24mcGljdHVyZT0mY2lyY3VsYXRpb249JnNldDE9JnNldDI9JnR5cGU9JmNhcmRkZXNjcmlwdGlvbj0mYXRrPSZkZWY9JmNyZWF0b3I9JnllYXI9MjAxOSZzZXJpYWw9JwogICAgICAgIHJlc3VsdCA9IHljbWFrZXIuY29uc3RydWN0X3JlcXVlc3QoY2FyZHR5cGU9J01vbnN0ZXInLCB0cmFwbWFnaWN0eXBlPSdRdWljay1QbGF5Jywgc3VidHlwZT0nbm9ybWFsJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZT0nTGlnaHQnLCBsZXZlbD0xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFyaXR5PSdDb21tb24nLCB5ZWFyPTIwMTkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgcmVzdWx0KQoKICAgIGRlZiB0ZXN0X2NvbnN0cnVjdF9yZXF1ZXN0X25vX2FyZ3Moc2VsZik6CiAgICAgICAgZXhwZWN0ZWQgPSAnaHR0cHM6Ly93d3cueXVnaW9oY2FyZG1ha2VyLm5ldC95Y21ha2VyL2NyZWF0ZWNhcmQucGhwP25hbWU9JmNhcmR0eXBlPSZ0cmFwbWFnaWN0eXBlPSZzdWJ0eXBlPSZhdHRyaWJ1dGU9JmxldmVsPScgXAogICAgICAgICAgICAgICAgICAgJyZyYXJpdHk9JnBpY3R1cmU9JmNpcmN1bGF0aW9uPSZzZXQxPSZzZXQyPSZ0eXBlPSZjYXJkZGVzY3JpcHRpb249JmF0az0mZGVmPSZjcmVhdG9yPSZ5ZWFyPSZzZXJpYWw9JwogICAgICAgIHJlc3VsdCA9IHljbWFrZXIuY29uc3RydWN0X3JlcXVlc3QoKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHJlc3VsdCkKCiAgICBkZWYgdGVzdF9kb3dubG9hZF9pbWFnZV92YWxpZF91cmwoc2VsZik6CiAgICAgICAgdXJsID0gJ2h0dHBzOi8vd3d3Lmdvb2dsZS5jb20vaW1hZ2VzL2JyYW5kaW5nL2dvb2dsZWxvZ28vMXgvZ29vZ2xlbG9nb19jb2xvcl8yNzJ4OTJkcC5wbmcnCiAgICAgICAgcGF0aCA9ICd0ZXN0LWltYWdlLnBuZycKPHxmaW1faG9sZXw+CiAgICBkZWYgdGVzdF9kb3dubG9hZF9pbWFnZV9pbnZhbGlkX3VybChzZWxmKToKICAgICAgICB1cmwgPSAnJwogICAgICAgIHBhdGggPSAndGVzdC1pbWFnZS5wbmcnCiAgICAgICAgeWNtYWtlci5kb3dubG9hZF9pbWFnZSh1cmwsIHBhdGgpCiAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmlzZmlsZShwYXRoKSkKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICB1bml0dGVzdC5tYWluKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICB5Y21ha2VyLmRvd25sb2FkX2ltYWdlKHVybCwgcGF0aCkKICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUocGF0aCkpCiAgICAgICAgb3MucmVtb3ZlKHBhdGgpCgo8fGZpbV9lbmR8Pg=="]
["d4489fa8b702fe650d35f7171d27ee288dbab06b-1","d4489fa8b702fe650d35f7171d27ee288dbab06b","PHxmaW1fcHJlZml4fD4KI05lc3RlZCBsb29wcwonJycKbnVtYmVyID0gaW50KGlucHV0KCJQbGVhc2UgZW50ZXIgYSBudW1iZXI6XG4iKSkKZm9yIGkgaW4gcmFuZ2UoMCxudW1iZXIrMSk6CiAgICBmb3IgeCBpbiByYW5nZSgwLGkpOgogICAgICAgIHByaW50KCIqIixlbmQ9IiIpCiAgICBwcmludCgpCicnJwojSW5wdXQgYW5kIGlmIHN0YXRlbWVudAoKPHxmaW1faG9sZXw+CmVsaWYgaG91c2UgPT0gMjoKICAgIHByaW50KCJXZWxjb21lIHRvIFNseXRoZXJpbiwgbmV3IHdpemFyZCEiKQplbGlmIGhvdXNlID09IDM6CiAgICBwcmludCgiV2VsY29tZSB0byBIdWZmbGVwdWZmLCBuZXcgd2l6YXJkISIpCmVsc2U6CiAgICAgcHJpbnQoIldlbGNvbWUgdG8gUmF2ZW5jbGF3LCBuZXcgd2l6YXJkISIpCjx8ZmltX3N1ZmZpeHw+CmhvdXNlID0gaW5wdXQoIlBsZWFzZSBlbnRlciB5b3VyIGZhdm9yaXRlIGhvdXNlKDEgPSBHcmlmZmluZG9yLCAyID0gU2x5dGhlcmluLCAzID0gSHVmZmxlcHVmZiBhbmQgNCA9IFJhdmVuY2xhdyk6XG4iKQoKaWYgaG91c2UgPT0gMToKICAgIHByaW50KCJXZWxjb21lIHRvIEdyaWZmaW5kb3IsIG5ldyB3aXphcmQhIikKPHxmaW1fZW5kfD4="]
["d4489fa8b702fe650d35f7171d27ee288dbab06b-2","d4489fa8b702fe650d35f7171d27ee288dbab06b","PHxmaW1fcHJlZml4fD4KI05lc3RlZCBsb29wcwonJycKbnVtYmVyID0gaW50KGlucHV0KCJQbGVhc2UgZW50ZXIgYSBudW1iZXI6XG4iKSkKZm9yIGkgaW4gcmFuZ2UoMCxudW1iZXIrMSk6CiAgICBmb3IgeCBpbiByYW5nZSgwLGkpOgogICAgICAgIHByaW50KCIqIixlbmQ9IiIpCiAgICBwcmludCgpCicnJwojSW5wdXQgYW5kIGlmIHN0YXRlbWVudAoKaG91c2UgPSBpbnB1dCgiUGxlYXNlIGVudGVyIHlvdXIgZmF2b3JpdGUgaG91c2UoMSA9IEdyaWZmaW5kb3IsIDIgPSBTbHl0aGVyaW4sIDMgPSBIdWZmbGVwdWZmIGFuZCA0ID0gUmF2ZW5jbGF3KTpcbiIpCgppZiBob3VzZSA9PSAxOgogICAgcHJpbnQoIldlbGNvbWUgdG8gR3JpZmZpbmRvciwgbmV3IHdpemFyZCEiKQplbGlmIGhvdXNlID09IDI6CiAgICBwcmludCgiV2VsY29tZSB0byBTbHl0aGVyaW4sIG5ldyB3aXphcmQhIikKZWxpZiBob3VzZSA9PSAzOgogICAgcHJpbnQoIldlbGNvbWUgdG8gSHVmZmxlcHVmZiwgbmV3IHdpemFyZCEiKQplbHNlOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgcHJpbnQoIldlbGNvbWUgdG8gUmF2ZW5jbGF3LCBuZXcgd2l6YXJkISIpCjx8ZmltX2VuZHw+"]
["d4489fa8b702fe650d35f7171d27ee288dbab06b-3","d4489fa8b702fe650d35f7171d27ee288dbab06b","PHxmaW1fcHJlZml4fD4KI05lc3RlZCBsb29wcwonJycKbnVtYmVyID0gaW50KGlucHV0KCJQbGVhc2UgZW50ZXIgYSBudW1iZXI6XG4iKSkKPHxmaW1faG9sZXw+CicnJwojSW5wdXQgYW5kIGlmIHN0YXRlbWVudAoKaG91c2UgPSBpbnB1dCgiUGxlYXNlIGVudGVyIHlvdXIgZmF2b3JpdGUgaG91c2UoMSA9IEdyaWZmaW5kb3IsIDIgPSBTbHl0aGVyaW4sIDMgPSBIdWZmbGVwdWZmIGFuZCA0ID0gUmF2ZW5jbGF3KTpcbiIpCgppZiBob3VzZSA9PSAxOgogICAgcHJpbnQoIldlbGNvbWUgdG8gR3JpZmZpbmRvciwgbmV3IHdpemFyZCEiKQplbGlmIGhvdXNlID09IDI6CiAgICBwcmludCgiV2VsY29tZSB0byBTbHl0aGVyaW4sIG5ldyB3aXphcmQhIikKZWxpZiBob3VzZSA9PSAzOgogICAgcHJpbnQoIldlbGNvbWUgdG8gSHVmZmxlcHVmZiwgbmV3IHdpemFyZCEiKQplbHNlOgogICAgIHByaW50KCJXZWxjb21lIHRvIFJhdmVuY2xhdywgbmV3IHdpemFyZCEiKQo8fGZpbV9zdWZmaXh8Pgpmb3IgaSBpbiByYW5nZSgwLG51bWJlcisxKToKICAgIGZvciB4IGluIHJhbmdlKDAsaSk6CiAgICAgICAgcHJpbnQoIioiLGVuZD0iIikKICAgIHByaW50KCkKPHxmaW1fZW5kfD4="]
["de031f89a2b7f0db9d64f531ab84f8cfa2d82bb6-1","de031f89a2b7f0db9d64f531ab84f8cfa2d82bb6","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgoiIiJiYXNlIG1vZHVsZSBmb3IgY2FsbGluZyBzaW1wbGVtZG0gYXBpIiIiCiNweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCgpmcm9tIGJ1aWx0aW5zIGltcG9ydCBzdHIKZnJvbSBidWlsdGlucyBpbXBvcnQgcmFuZ2UKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmltcG9ydCBqc29uCmltcG9ydCByZXF1ZXN0cwoKY2xhc3MgQXBpRXJyb3IoRXhjZXB0aW9uKToKICAgICIiIkNhdGNoIGZvciBBUEkgRXJyb3IiIiIKICAgIHBhc3MKCmNsYXNzIENvbm5lY3Rpb24ob2JqZWN0KTogI3B5bGludDogZGlzYWJsZT1vbGQtc3R5bGUtY2xhc3MsdG9vLWZldy1wdWJsaWMtbWV0aG9kcwogICAgIiIiY3JlYXRlIGNvbm5lY3Rpb24gd2l0aCBhcGkga2V5IiIiCiAgICBwcm94eURpY3QgPSBkaWN0KCkKCiAgICBkZWYgX19pbml0X18oc2VsZiwgYXBpX2tleSk6CiAgICAgICAgc2VsZi5hcGlfa2V5ID0gYXBpX2tleQoKICAgIGRlZiBfdXJsKHNlbGYsIHBhdGgpOiAjcHlsaW50OiBkaXNhYmxlPW5vLXNlbGYtdXNlCiAgICAgICAgIiIiYmFzZSBhcGkgdXJsIiIiCiAgICAgICAgcmV0dXJuICdodHRwczovL2Euc2ltcGxlbWRtLmNvbS9hcGkvdjEnICsgcGF0aAoKICAgIGRlZiBfZ2V0X2RhdGEoc2VsZiwgdXJsLCBwYXJhbXM9Tm9uZSk6CiAgICAgICAgIiIiR0VUIGNhbGwgdG8gU2ltcGxlTURNIEFQSSIiIgogICAgICAgIHN0YXJ0X2lkID0gMAogICAgICAgIGhhc19tb3JlID0gVHJ1ZQogICAgICAgIHJlc3BfZGF0YSA9IFtdCiAgICAgICAgYmFzZV91cmwgPSB1cmwKICAgICAgICB3aGlsZSBoYXNfbW9yZToKICAgICAgICAgICAgdXJsID0gYmFzZV91cmwgKyAiP2xpbWl0PTEwMCZzdGFydGluZ19hZnRlcj0iICsgc3RyKHN0YXJ0X2lkKQogICAgICAgICAgICByZXNwID0gcmVxdWVzdHMuZ2V0KHVybCwgcGFyYW1zLCBhdXRoPShzZWxmLmFwaV9rZXksICIiKSwgcHJveGllcz1zZWxmLnByb3h5RGljdCkKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIHJlc3BfZGF0YS5leHRlbmQoZGF0YSkKICAgICAgICAgICAgaGFzX21vcmUgPSByZXNwX2pzb24uZ2V0KCdoYXNfbW9yZScsIE5vbmUpCiAgICAgICAgICAgIGlmIGhhc19tb3JlOgogICAgICAgICAgICAgICAgc3RhcnRfaWQgPSBkYXRhWy0xXS5nZXQoJ2lkJykKICAgICAgICByZXR1cm4gcmVzcF9kYXRhCgogICAgZGVmIF9nZXRfeG1sKHNlbGYsIHVybCwgcGFyYW1zPU5vbmUpOgogICAgICAgICIiIkdFVCBjYWxsIHRvIFNpbXBsZU1ETSBBUEkiIiIKICAgICAgICByZXNwID0gcmVxdWVzdHMuZ2V0KHVybCwgcGFyYW1zLCBhdXRoPShzZWxmLmFwaV9rZXksICIiKSwgcHJveGllcz1zZWxmLnByb3h5RGljdCkKICAgICAgICByZXR1cm4gcmVzcC5jb250ZW50CgogICAgZGVmIF9wYXRjaF9kYXRhKHNlbGYsIHVybCwgZGF0YSwgZmlsZXM9Tm9uZSk6CiAgICAgICAgIiIiUEFUQ0ggY2FsbCB0byBTaW1wbGVNRE0gQVBJIiIiCiAgICAgICAgcmVzcCA9IHJlcXVlc3RzLnBhdGNoKHVybCwgZGF0YSwgYXV0aD0oc2VsZi5hcGlfa2V5LCAiIiksIFwKICAgICAgICAgICAgZmlsZXM9ZmlsZXMsIHByb3hpZXM9c2VsZi5wcm94eURpY3QpCiAgICAgICAgcmV0dXJuIHJlc3AKCiAgICBkZWYgX3Bvc3RfZGF0YShzZWxmLCB1cmwsIGRhdGEsIGZpbGVzPU5vbmUpOgogICAgICAgICIiIlBPU1QgY2FsbCB0byBTaW1wbGVNRE0gQVBJIiIiCiAgICAgICAgcmVzcCA9IHJlcXVlc3RzLnBvc3QodXJsLCBkYXRhLCBhdXRoPShzZWxmLmFwaV9rZXksICIiKSwgXAogICAgICAgICAgICBmaWxlcz1maWxlcywgcHJveGllcz1zZWxmLnByb3h5RGljdCkKICAgICAgICByZXR1cm4gcmVzcAoKICAgIGRlZiBfcHV0X2RhdGEoc2VsZiwgdXJsLCBkYXRhLCBmaWxlcz1Ob25lKToKICAgICAgICAiIiJQVVQgY2FsbCB0byBTaW1wbGVNRE0gQVBJIiIiCiAgICAgICAgcmVzcCA9IHJlcXVlc3RzLnB1dCh1cmwsIGRhdGEsIGF1dGg9KHNlbGYuYXBpX2tleSwgIiIpLCBcCiAgICAgICAgICAgIGZpbGVzPWZpbGVzLCBwcm94aWVzPXNlbGYucHJveHlEaWN0KQogICAgICAgIHJldHVybiByZXNwCgogICAgZGVmIF9kZWxldGVfZGF0YShzZWxmLCB1cmwpOgogICAgICAgICIiIkRFTEVURSBjYWxsIHRvIFNpbXBsZU1ETSBBUEkiIiIKICAgICAgICByZXR1cm4gcmVxdWVzdHMuZGVsZXRlKHVybCwgYXV0aD0oc2VsZi5hcGlfa2V5LCAiIiksIHByb3hpZXM9c2VsZi5wcm94eURpY3QpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGlmIG5vdCAyMDAgPD0gcmVzcC5zdGF0dXNfY29kZSA8PSAyMDc6CiAgICAgICAgICAgICAgICByYWlzZSBBcGlFcnJvcihmIkFQSSByZXR1cm5lZCBzdGF0dXMgY29kZSB7cmVzcC5zdGF0dXNfY29kZX0iKQogICAgICAgICAgICByZXNwX2pzb24gPSByZXNwLmpzb24oKQogICAgICAgICAgICBkYXRhID0gcmVzcF9qc29uWydkYXRhJ10KPHxmaW1fZW5kfD4="]
["2e409114ad4d6e8a8a12e1158a7da2a274142068-1","2e409114ad4d6e8a8a12e1158a7da2a274142068","PHxmaW1fcHJlZml4fD4KJycnCiBXcml0ZSBhIFB5dGhvbiBwcm9ncmFtIGZvciBiaW5hcnkgc2VhcmNoLgonJycKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKaW1wb3J0IG51bXB5CgoKPHxmaW1fZW5kfD4="]
["2e409114ad4d6e8a8a12e1158a7da2a274142068-2","2e409114ad4d6e8a8a12e1158a7da2a274142068","PHxmaW1fcHJlZml4fD4KJycnCiBXcml0ZSBhIFB5dGhvbiBwcm9ncmFtIGZvciBiaW5hcnkgc2VhcmNoLgonJycKCmltcG9ydCBudW1weQoKCmRlZiBCaW5hcnlfU2VhcmNoKG51bV9saXN0LCBsb3csIGhpZ2gsIFgpOgogICAgaWYgbG93IDw9IGhpZ2g6CiAgICAgICAgbWlkX2luZGV4ID0gKGxvdyArIGhpZ2gpIC8gMgogICAgICAgIGlmIFggPT0gbnVtX2xpc3RbbWlkX2luZGV4XToKICAgICAgICAgICAgcHJpbnQoIk9oISBUaGUgbnVtYmVyIGlzIGZvdW5kICEhISAiKQogICAgICAgICAgICBwcmludCgiIFRoZSBudW1iZXIgaXMgPSAlZCBhdCBpbmRleCA9ICVkIiAlIChYLCBtaWRfaW5kZXggKyAxKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiBYIDwgbnVtX2xpc3RbbWlkX2luZGV4XToKICAgICAgICAgICAgICAgIEJpbmFyeV9TZWFyY2gobnVtX2xpc3QsIGxvdywgbWlkX2luZGV4IC0gMSwgWCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIEJpbmFyeV9TZWFyY2gobnVtX2xpc3QsIG1pZF9pbmRleCArIDEsIGhpZ2gsIFgpCgogICAgZWxzZToKICAgICAgICBwcmludCAiIFNvcnJ5ICEhIG51bWJlciBYIGlzIG5vdCBpbiBsaXN0IC4uLiIKCgpwcmludCgiXHRDb2RlIGZvciAnQmluYXJ5IFNlYXJjaCchIikKIyBHZW5lcmF0ZSAxMCByYW5kb20gZWxlbWVudCBhbmQgc2VhcmNoIGZvciBhbiBlbGVtZW50IFgKZWxlbWVudF9saXN0ID0gbGlzdChudW1weS5yYW5kb20uY2hvaWNlKHJhbmdlKDEsIDUwMCksIDEwLCByZXBsYWNlPUZhbHNlKSkKcHJpbnQgIlJhbmRvbWx5IGdlbmVyYXRlZCBudW1iZXJzIGxpc3Q6ICIKcHJpbnQgZWxlbWVudF9saXN0ClggPSBpbnQoaW5wdXQoIkVudGVyIGFuIGVsZW1lbnQgdG8gc2VhcmNoIG92ZXIgbGlzdCA6ICIpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmVsZW1lbnRfbGlzdC5zb3J0KCkKcHJpbnQgIk9yZGVyZWQgZWxlbWVudHMgbGlzdDoiCnByaW50IGVsZW1lbnRfbGlzdApCaW5hcnlfU2VhcmNoKGVsZW1lbnRfbGlzdCwgMCwgbGVuKGVsZW1lbnRfbGlzdCkgLSAxLCBYKQo8fGZpbV9lbmR8Pg=="]
["2e409114ad4d6e8a8a12e1158a7da2a274142068-3","2e409114ad4d6e8a8a12e1158a7da2a274142068","PHxmaW1fcHJlZml4fD4KJycnCiBXcml0ZSBhIFB5dGhvbiBwcm9ncmFtIGZvciBiaW5hcnkgc2VhcmNoLgonJycKCmltcG9ydCBudW1weQoKCmRlZiBCaW5hcnlfU2VhcmNoKG51bV9saXN0LCBsb3csIGhpZ2gsIFgpOgogICAgaWYgbG93IDw9IGhpZ2g6CiAgICAgICAgbWlkX2luZGV4ID0gKGxvdyArIGhpZ2gpIC8gMgogICAgICAgIGlmIFggPT0gbnVtX2xpc3RbbWlkX2luZGV4XToKICAgICAgICAgICAgcHJpbnQoIk9oISBUaGUgbnVtYmVyIGlzIGZvdW5kICEhISAiKQogICAgICAgICAgICBwcmludCgiIFRoZSBudW1iZXIgaXMgPSAlZCBhdCBpbmRleCA9ICVkIiAlIChYLCBtaWRfaW5kZXggKyAxKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiBYIDwgbnVtX2xpc3RbbWlkX2luZGV4XToKICAgICAgICAgICAgICAgIEJpbmFyeV9TZWFyY2gobnVtX2xpc3QsIGxvdywgbWlkX2luZGV4IC0gMSwgWCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIEJpbmFyeV9TZWFyY2gobnVtX2xpc3QsIG1pZF9pbmRleCArIDEsIGhpZ2gsIFgpCgogICAgZWxzZToKICAgICAgICBwcmludCAiIFNvcnJ5ICEhIG51bWJlciBYIGlzIG5vdCBpbiBsaXN0IC4uLiIKCgpwcmludCgiXHRDb2RlIGZvciAnQmluYXJ5IFNlYXJjaCchIikKIyBHZW5lcmF0ZSAxMCByYW5kb20gZWxlbWVudCBhbmQgc2VhcmNoIGZvciBhbiBlbGVtZW50IFgKPHxmaW1faG9sZXw+CmVsZW1lbnRfbGlzdC5zb3J0KCkKcHJpbnQgIk9yZGVyZWQgZWxlbWVudHMgbGlzdDoiCnByaW50IGVsZW1lbnRfbGlzdApCaW5hcnlfU2VhcmNoKGVsZW1lbnRfbGlzdCwgMCwgbGVuKGVsZW1lbnRfbGlzdCkgLSAxLCBYKQo8fGZpbV9zdWZmaXh8PgplbGVtZW50X2xpc3QgPSBsaXN0KG51bXB5LnJhbmRvbS5jaG9pY2UocmFuZ2UoMSwgNTAwKSwgMTAsIHJlcGxhY2U9RmFsc2UpKQpwcmludCAiUmFuZG9tbHkgZ2VuZXJhdGVkIG51bWJlcnMgbGlzdDogIgpwcmludCBlbGVtZW50X2xpc3QKWCA9IGludChpbnB1dCgiRW50ZXIgYW4gZWxlbWVudCB0byBzZWFyY2ggb3ZlciBsaXN0IDogIikpCjx8ZmltX2VuZHw+"]
["dae99a20e126475d349c005dde8cacd2213d99cc-1","dae99a20e126475d349c005dde8cacd2213d99cc","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBzeXMKaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKCmZyb20gdGVuc29yZmxvdy5jb250cmliLnNsaW0ubmV0cyBpbXBvcnQgaW5jZXB0aW9uCnNsaW0gPSB0Zi5jb250cmliLnNsaW0KCndpdGggdGYuR3JhcGgoKS5hc19kZWZhdWx0KCkgYXMgZ3JhcGg6CiAgICBpbWFnZSA9IHRmLnBsYWNlaG9sZGVyKHRmLmZsb2F0MzIsIFsxLCAyOTksIDI5OSwgM10pCiAgICB3aXRoIHNsaW0uYXJnX3Njb3BlKGluY2VwdGlvbi5pbmNlcHRpb25fdjNfYXJnX3Njb3BlKCkpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgbG9naXRzLCBfID0gaW5jZXB0aW9uLmluY2VwdGlvbl92MyhpbWFnZSwgbnVtX2NsYXNzZXM9MTAwMSwgaXNfdHJhaW5pbmc9RmFsc2UpCgo8fGZpbV9lbmR8Pg=="]
["6b91c837a5c4e0f255d7a01c8318c2b65e7cc2a9-1","6b91c837a5c4e0f255d7a01c8318c2b65e7cc2a9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gc2NpcHkuaW50ZXJwb2xhdGUgaW1wb3J0IGludGVycDFkCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKZnJvbSBza2ltYWdlLnV0aWwgaW1wb3J0IHZpZXdfYXNfd2luZG93cwoKZnJvbSB0dG9vbHMgaW1wb3J0IGlvLCBjb25maWcsIHV0aWxzCgpwbHQuc3R5bGUudXNlKCdnZ3Bsb3QnKQoKIyBMb2FkIE9tbmkKb21uaSA9IGlvLmdldF9vbW5pX2RhdGEoKQpieiA9IG9tbmlbJ2J6X2dzbSddWzQwMDAwMDpdLnZhbHVlcwpMID0gMjQKTiA9IDMKcCA9IG5wLnJhbmRvbS5yYW5kbigoTCwgTikpCmFyciA9IHZpZXdfYXNfd2luZG93cyhieiwgKEwsKSwgKDEsKSkKbWFzayA9IG5wLmlzZmluaXRlKGFycikKZm9yIGogaW4gcmFuZ2UoTik6CiAgICBjID0gLjUgLyBucC5uYW52YXIoYXJyLCBheGlzPTEpCiAgICBjW35ucC5pc2Zpbml0ZShjKV0gPSAxMAogICAgZm9yIGkgaW4gcmFuZ2UoNDApOgogICAgICAgIHBiID0gbnAuYnJvYWRjYXN0X3RvKHBbTm9uZSwgOiwgal0sIGFyci5zaGFwZSkKICAgICAgICBhID0gbnAubmFuc3VtKGFyciAqIHBiLCBheGlzPTEpIC8gbnAuc3VtKChwYiAqIG1hc2spICoqIDIsIGF4aXM9MSkKICAgICAgICBsb3NzID0gbnAuc3VtKC0xIC8gKGMgKiBucC5uYW5zdW0oKGFbOiwgTm9uZV0gKiBwW05vbmUsIDosIGpdIC0gYXJyKSAqKiAyLCBheGlzPTEpICsgMSkpCiAgICAgICAgZ3JhZCA9IDIgKiBucC5uYW5zdW0oY1s6LCBOb25lXSAqIGFbOiwgTm9uZV0gKiAoYVs6LCBOb25lXSAqIHBbTm9uZSwgOiwgal0gLSBhcnIpIC8gKChjICogbnAubmFuc3VtKChhWzosIE5vbmVdICogcFtOb25lLCA6LCBqXSAtIGFycikgKiogMiwgYXhpcz0xKSArIDEpICoqIDIpWzosIE5vbmVdLCBheGlzPTApCiAgICAgICAgcCAtPSAuMSAqIGdyYWQKICAgICAgICBwcmludChsb3NzKQogICAgbSA9IDEgLyAoYyAqIG5wLm5hbnN1bSgoYVs6LCBOb25lXSAqIHBbTm9uZSwgOiwgal0gLSBhcnIpICoqIDIsIGF4aXM9MSkgKyAxKQogICAgcHJpbnQoKQoKCmZpZywgYXggPSBwbHQuc3VicGxvdHMoKQpheC5wbG90KHApCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CnBsdC5zaG93KCkKPHxmaW1fZW5kfD4="]
["6b91c837a5c4e0f255d7a01c8318c2b65e7cc2a9-2","6b91c837a5c4e0f255d7a01c8318c2b65e7cc2a9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gc2NpcHkuaW50ZXJwb2xhdGUgaW1wb3J0IGludGVycDFkCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKZnJvbSBza2ltYWdlLnV0aWwgaW1wb3J0IHZpZXdfYXNfd2luZG93cwoKZnJvbSB0dG9vbHMgaW1wb3J0IGlvLCBjb25maWcsIHV0aWxzCgpwbHQuc3R5bGUudXNlKCdnZ3Bsb3QnKQoKIyBMb2FkIE9tbmkKb21uaSA9IGlvLmdldF9vbW5pX2RhdGEoKQpieiA9IG9tbmlbJ2J6X2dzbSddWzQwMDAwMDpdLnZhbHVlcwpMID0gMjQKTiA9IDMKcCA9IG5wLnJhbmRvbS5yYW5kbigoTCwgTikpCmFyciA9IHZpZXdfYXNfd2luZG93cyhieiwgKEwsKSwgKDEsKSkKbWFzayA9IG5wLmlzZmluaXRlKGFycikKZm9yIGogaW4gcmFuZ2UoTik6CiAgICBjID0gLjUgLyBucC5uYW52YXIoYXJyLCBheGlzPTEpCiAgICBjW35ucC5pc2Zpbml0ZShjKV0gPSAxMAogICAgZm9yIGkgaW4gcmFuZ2UoNDApOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcGIgPSBucC5icm9hZGNhc3RfdG8ocFtOb25lLCA6LCBqXSwgYXJyLnNoYXBlKQogICAgICAgIGEgPSBucC5uYW5zdW0oYXJyICogcGIsIGF4aXM9MSkgLyBucC5zdW0oKHBiICogbWFzaykgKiogMiwgYXhpcz0xKQogICAgICAgIGxvc3MgPSBucC5zdW0oLTEgLyAoYyAqIG5wLm5hbnN1bSgoYVs6LCBOb25lXSAqIHBbTm9uZSwgOiwgal0gLSBhcnIpICoqIDIsIGF4aXM9MSkgKyAxKSkKICAgICAgICBncmFkID0gMiAqIG5wLm5hbnN1bShjWzosIE5vbmVdICogYVs6LCBOb25lXSAqIChhWzosIE5vbmVdICogcFtOb25lLCA6LCBqXSAtIGFycikgLyAoKGMgKiBucC5uYW5zdW0oKGFbOiwgTm9uZV0gKiBwW05vbmUsIDosIGpdIC0gYXJyKSAqKiAyLCBheGlzPTEpICsgMSkgKiogMilbOiwgTm9uZV0sIGF4aXM9MCkKPHxmaW1fZW5kfD4="]
["6b91c837a5c4e0f255d7a01c8318c2b65e7cc2a9-3","6b91c837a5c4e0f255d7a01c8318c2b65e7cc2a9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gc2NpcHkuaW50ZXJwb2xhdGUgaW1wb3J0IGludGVycDFkCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdApmcm9tIHNraW1hZ2UudXRpbCBpbXBvcnQgdmlld19hc193aW5kb3dzCgpmcm9tIHR0b29scyBpbXBvcnQgaW8sIGNvbmZpZywgdXRpbHMKPHxmaW1fZW5kfD4="]
["6b91c837a5c4e0f255d7a01c8318c2b65e7cc2a9-4","6b91c837a5c4e0f255d7a01c8318c2b65e7cc2a9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gc2NpcHkuaW50ZXJwb2xhdGUgaW1wb3J0IGludGVycDFkCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKZnJvbSBza2ltYWdlLnV0aWwgaW1wb3J0IHZpZXdfYXNfd2luZG93cwoKZnJvbSB0dG9vbHMgaW1wb3J0IGlvLCBjb25maWcsIHV0aWxzCgpwbHQuc3R5bGUudXNlKCdnZ3Bsb3QnKQoKIyBMb2FkIE9tbmkKb21uaSA9IGlvLmdldF9vbW5pX2RhdGEoKQpieiA9IG9tbmlbJ2J6X2dzbSddWzQwMDAwMDpdLnZhbHVlcwpMID0gMjQKTiA9IDMKcCA9IG5wLnJhbmRvbS5yYW5kbigoTCwgTikpCjx8ZmltX2hvbGV8PgogICAgY1t+bnAuaXNmaW5pdGUoYyldID0gMTAKICAgIGZvciBpIGluIHJhbmdlKDQwKToKICAgICAgICBwYiA9IG5wLmJyb2FkY2FzdF90byhwW05vbmUsIDosIGpdLCBhcnIuc2hhcGUpCiAgICAgICAgYSA9IG5wLm5hbnN1bShhcnIgKiBwYiwgYXhpcz0xKSAvIG5wLnN1bSgocGIgKiBtYXNrKSAqKiAyLCBheGlzPTEpCiAgICAgICAgbG9zcyA9IG5wLnN1bSgtMSAvIChjICogbnAubmFuc3VtKChhWzosIE5vbmVdICogcFtOb25lLCA6LCBqXSAtIGFycikgKiogMiwgYXhpcz0xKSArIDEpKQogICAgICAgIGdyYWQgPSAyICogbnAubmFuc3VtKGNbOiwgTm9uZV0gKiBhWzosIE5vbmVdICogKGFbOiwgTm9uZV0gKiBwW05vbmUsIDosIGpdIC0gYXJyKSAvICgoYyAqIG5wLm5hbnN1bSgoYVs6LCBOb25lXSAqIHBbTm9uZSwgOiwgal0gLSBhcnIpICoqIDIsIGF4aXM9MSkgKyAxKSAqKiAyKVs6LCBOb25lXSwgYXhpcz0wKQogICAgICAgIHAgLT0gLjEgKiBncmFkCiAgICAgICAgcHJpbnQobG9zcykKICAgIG0gPSAxIC8gKGMgKiBucC5uYW5zdW0oKGFbOiwgTm9uZV0gKiBwW05vbmUsIDosIGpdIC0gYXJyKSAqKiAyLCBheGlzPTEpICsgMSkKICAgIHByaW50KCkKCgpmaWcsIGF4ID0gcGx0LnN1YnBsb3RzKCkKYXgucGxvdChwKQoKcGx0LnNob3coKQo8fGZpbV9zdWZmaXh8PgphcnIgPSB2aWV3X2FzX3dpbmRvd3MoYnosIChMLCksICgxLCkpCm1hc2sgPSBucC5pc2Zpbml0ZShhcnIpCmZvciBqIGluIHJhbmdlKE4pOgogICAgYyA9IC41IC8gbnAubmFudmFyKGFyciwgYXhpcz0xKQo8fGZpbV9lbmR8Pg=="]
["178a52c571a43e702b586a42c49eaa75cf7e241f-1","178a52c571a43e702b586a42c49eaa75cf7e241f","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMKIyBBdXRob3I6IENoaW5tYXlhIFBhbmNob2xpIDxjaGlubWF5YXBhbmNob2xpMTNAZ21haWwuY29tPgojIENvcHlyaWdodCAoQykgMjAxNyBSYWRpbSBSZWh1cmVrIDxyYWRpbXJlaHVyZWtAc2V6bmFtLmN6PgojIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgTEdQTCB2Mi4xIC0gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRtbAoKIiIiClNjaWtpdCBsZWFybiBpbnRlcmZhY2UgZm9yIGdlbnNpbSBmb3IgZWFzeSB1c2Ugb2YgZ2Vuc2ltIHdpdGggc2Npa2l0LWxlYXJuCmZvbGxvd3Mgb24gc2Npa2l0IGxlYXJuIEFQSSBjb252ZW50aW9ucwoiIiIKCmltcG9ydCBudW1weSBhcyBucApmcm9tIHNjaXB5IGltcG9ydCBzcGFyc2UKZnJvbSBza2xlYXJuLmJhc2UgaW1wb3J0IFRyYW5zZm9ybWVyTWl4aW4sIEJhc2VFc3RpbWF0b3IKZnJvbSBza2xlYXJuLmV4Y2VwdGlvbnMgaW1wb3J0IE5vdEZpdHRlZEVycm9yCgpmcm9tIGdlbnNpbSBpbXBvcnQgbW9kZWxzCmZyb20gZ2Vuc2ltIGltcG9ydCBtYXR1dGlscwoKCmNsYXNzIExkYVRyYW5zZm9ybWVyKFRyYW5zZm9ybWVyTWl4aW4sIEJhc2VFc3RpbWF0b3IpOgogICAgIiIiCiAgICBCYXNlIExEQSBtb2R1bGUKICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBudW1fdG9waWNzPTEwMCwgaWQyd29yZD1Ob25lLCBjaHVua3NpemU9MjAwMCwgcGFzc2VzPTEsIHVwZGF0ZV9ldmVyeT0xLCBhbHBoYT0nc3ltbWV0cmljJywKICAgICAgICAgICAgICAgICBldGE9Tm9uZSwgZGVjYXk9MC41LCBvZmZzZXQ9MS4wLCBldmFsX2V2ZXJ5PTEwLCBpdGVyYXRpb25zPTUwLCBnYW1tYV90aHJlc2hvbGQ9MC4wMDEsCiAgICAgICAgICAgICAgICAgbWluaW11bV9wcm9iYWJpbGl0eT0wLjAxLCByYW5kb21fc3RhdGU9Tm9uZSwgc2NvcmVyPSdwZXJwbGV4aXR5JywgZHR5cGU9bnAuZmxvYXQzMik6CiAgICAgICAgIiIiCiAgICAgICAgU2tsZWFybiB3cmFwcGVyIGZvciBMREEgbW9kZWwuIFNlZSBnZW5zaW0ubW9kZWwuTGRhTW9kZWwgZm9yIHBhcmFtZXRlciBkZXRhaWxzLgoKICAgICAgICBgc2NvcmVyYCBzcGVjaWZpZXMgdGhlIG1ldHJpYyB1c2VkIGluIHRoZSBgc2NvcmVgIGZ1bmN0aW9uLgoKICAgICAgICBTZWUgYGdlbnNpbS5tb2RlbHMuTGRhTW9kZWxgIGNsYXNzIGZvciBkZXNjcmlwdGlvbiBvZiB0aGUgb3RoZXIgcGFyYW1ldGVycy4KICAgICAgICAiIiIKICAgICAgICBzZWxmLmdlbnNpbV9tb2RlbCA9IE5vbmUKICAgICAgICBzZWxmLm51bV90b3BpY3MgPSBudW1fdG9waWNzCiAgICAgICAgc2VsZi5pZDJ3b3JkID0gaWQyd29yZAogICAgICAgIHNlbGYuY2h1bmtzaXplID0gY2h1bmtzaXplCiAgICAgICAgc2VsZi5wYXNzZXMgPSBwYXNzZXMKICAgICAgICBzZWxmLnVwZGF0ZV9ldmVyeSA9IHVwZGF0ZV9ldmVyeQogICAgICAgIHNlbGYuYWxwaGEgPSBhbHBoYQogICAgICAgIHNlbGYuZXRhID0gZXRhCiAgICAgICAgc2VsZi5kZWNheSA9IGRlY2F5CiAgICAgICAgc2VsZi5vZmZzZXQgPSBvZmZzZXQKICAgICAgICBzZWxmLmV2YWxfZXZlcnkgPSBldmFsX2V2ZXJ5CiAgICAgICAgc2VsZi5pdGVyYXRpb25zID0gaXRlcmF0aW9ucwogICAgICAgIHNlbGYuZ2FtbWFfdGhyZXNob2xkID0gZ2FtbWFfdGhyZXNob2xkCiAgICAgICAgc2VsZi5taW5pbXVtX3Byb2JhYmlsaXR5ID0gbWluaW11bV9wcm9iYWJpbGl0eQogICAgICAgIHNlbGYucmFuZG9tX3N0YXRlID0gcmFuZG9tX3N0YXRlCiAgICAgICAgc2VsZi5zY29yZXIgPSBzY29yZXIKPHxmaW1faG9sZXw+CiAgICBkZWYgZml0KHNlbGYsIFgsIHk9Tm9uZSk6CiAgICAgICAgIiIiCiAgICAgICAgRml0IHRoZSBtb2RlbCBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIHRyYWluaW5nIGRhdGEuCiAgICAgICAgQ2FsbHMgZ2Vuc2ltLm1vZGVscy5MZGFNb2RlbAogICAgICAgICIiIgogICAgICAgIGlmIHNwYXJzZS5pc3NwYXJzZShYKToKICAgICAgICAgICAgY29ycHVzID0gbWF0dXRpbHMuU3BhcnNlMkNvcnB1cyhzcGFyc2U9WCwgZG9jdW1lbnRzX2NvbHVtbnM9RmFsc2UpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgY29ycHVzID0gWAoKICAgICAgICBzZWxmLmdlbnNpbV9tb2RlbCA9IG1vZGVscy5MZGFNb2RlbCgKICAgICAgICAgICAgY29ycHVzPWNvcnB1cywgbnVtX3RvcGljcz1zZWxmLm51bV90b3BpY3MsIGlkMndvcmQ9c2VsZi5pZDJ3b3JkLAogICAgICAgICAgICBjaHVua3NpemU9c2VsZi5jaHVua3NpemUsIHBhc3Nlcz1zZWxmLnBhc3NlcywgdXBkYXRlX2V2ZXJ5PXNlbGYudXBkYXRlX2V2ZXJ5LAogICAgICAgICAgICBhbHBoYT1zZWxmLmFscGhhLCBldGE9c2VsZi5ldGEsIGRlY2F5PXNlbGYuZGVjYXksIG9mZnNldD1zZWxmLm9mZnNldCwKICAgICAgICAgICAgZXZhbF9ldmVyeT1zZWxmLmV2YWxfZXZlcnksIGl0ZXJhdGlvbnM9c2VsZi5pdGVyYXRpb25zLAogICAgICAgICAgICBnYW1tYV90aHJlc2hvbGQ9c2VsZi5nYW1tYV90aHJlc2hvbGQsIG1pbmltdW1fcHJvYmFiaWxpdHk9c2VsZi5taW5pbXVtX3Byb2JhYmlsaXR5LAogICAgICAgICAgICByYW5kb21fc3RhdGU9c2VsZi5yYW5kb21fc3RhdGUsIGR0eXBlPXNlbGYuZHR5cGUKICAgICAgICApCiAgICAgICAgcmV0dXJuIHNlbGYKCiAgICBkZWYgdHJhbnNmb3JtKHNlbGYsIGRvY3MpOgogICAgICAgICIiIgogICAgICAgIFRha2VzIGEgbGlzdCBvZiBkb2N1bWVudHMgYXMgaW5wdXQgKCdkb2NzJykuCiAgICAgICAgUmV0dXJucyBhIG1hdHJpeCBvZiB0b3BpYyBkaXN0cmlidXRpb24gZm9yIHRoZSBnaXZlbiBkb2N1bWVudCBib3csIHdoZXJlIGFfaWoKICAgICAgICBpbmRpY2F0ZXMgKHRvcGljX2ksIHRvcGljX3Byb2JhYmlsaXR5X2opLgogICAgICAgIFRoZSBpbnB1dCBgZG9jc2Agc2hvdWxkIGJlIGluIEJPVyBmb3JtYXQgYW5kIGNhbiBiZSBhIGxpc3Qgb2YgZG9jdW1lbnRzIGxpa2UKICAgICAgICBbWyg0LCAxKSwgKDcsIDEpXSwKICAgICAgICBbKDksIDEpLCAoMTMsIDEpXSwgWygyLCAxKSwgKDYsIDEpXV0KICAgICAgICBvciBhIHNpbmdsZSBkb2N1bWVudCBsaWtlIDogWyg0LCAxKSwgKDcsIDEpXQogICAgICAgICIiIgogICAgICAgIGlmIHNlbGYuZ2Vuc2ltX21vZGVsIGlzIE5vbmU6CiAgICAgICAgICAgIHJhaXNlIE5vdEZpdHRlZEVycm9yKAogICAgICAgICAgICAgICAgIlRoaXMgbW9kZWwgaGFzIG5vdCBiZWVuIGZpdHRlZCB5ZXQuIENhbGwgJ2ZpdCcgd2l0aCBhcHByb3ByaWF0ZSBhcmd1bWVudHMgYmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLiIKICAgICAgICAgICAgKQoKICAgICAgICAjIFRoZSBpbnB1dCBhcyBhcnJheSBvZiBhcnJheQogICAgICAgIGlmIGlzaW5zdGFuY2UoZG9jc1swXSwgdHVwbGUpOgogICAgICAgICAgICBkb2NzID0gW2RvY3NdCiAgICAgICAgIyByZXR1cm5pbmcgZGVuc2UgcmVwcmVzZW50YXRpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBza2xlYXJuCiAgICAgICAgIyBidXQgd2Ugc2hvdWxkIGdvIGJhY2sgdG8gc3BhcnNlIHJlcHJlc2VudGF0aW9uIGluIHRoZSBmdXR1cmUKICAgICAgICBkaXN0cmlidXRpb24gPSBbbWF0dXRpbHMuc3BhcnNlMmZ1bGwoc2VsZi5nZW5zaW1fbW9kZWxbZG9jXSwgc2VsZi5udW1fdG9waWNzKSBmb3IgZG9jIGluIGRvY3NdCiAgICAgICAgcmV0dXJuIG5wLnJlc2hhcGUobnAuYXJyYXkoZGlzdHJpYnV0aW9uKSwgKGxlbihkb2NzKSwgc2VsZi5udW1fdG9waWNzKSkKCiAgICBkZWYgcGFydGlhbF9maXQoc2VsZiwgWCk6CiAgICAgICAgIiIiCiAgICAgICAgVHJhaW4gbW9kZWwgb3ZlciBYLgogICAgICAgIEJ5IGRlZmF1bHQsICdvbmxpbmUgKHNpbmdsZS1wYXNzKScgbW9kZSBpcyB1c2VkIGZvciB0cmFpbmluZyB0aGUgTERBIG1vZGVsLgogICAgICAgIENvbmZpZ3VyZSBgcGFzc2VzYCBhbmQgYHVwZGF0ZV9ldmVyeWAgcGFyYW1zIGF0IGluaXQgdG8gY2hvb3NlIHRoZSBtb2RlIGFtb25nIDoKCiAgICAgICAgICAgIC0gb25saW5lIChzaW5nbGUtcGFzcyk6IHVwZGF0ZV9ldmVyeSAhPSBOb25lIGFuZCBwYXNzZXMgPT0gMQogICAgICAgICAgICAtIG9ubGluZSAobXVsdGktcGFzcyk6IHVwZGF0ZV9ldmVyeSAhPSBOb25lIGFuZCBwYXNzZXMgPiAxCiAgICAgICAgICAgIC0gYmF0Y2g6IHVwZGF0ZV9ldmVyeSA9PSBOb25lCgogICAgICAgICIiIgogICAgICAgIGlmIHNwYXJzZS5pc3NwYXJzZShYKToKICAgICAgICAgICAgWCA9IG1hdHV0aWxzLlNwYXJzZTJDb3JwdXMoc3BhcnNlPVgsIGRvY3VtZW50c19jb2x1bW5zPUZhbHNlKQoKICAgICAgICBpZiBzZWxmLmdlbnNpbV9tb2RlbCBpcyBOb25lOgogICAgICAgICAgICBzZWxmLmdlbnNpbV9tb2RlbCA9IG1vZGVscy5MZGFNb2RlbCgKICAgICAgICAgICAgICAgIG51bV90b3BpY3M9c2VsZi5udW1fdG9waWNzLCBpZDJ3b3JkPXNlbGYuaWQyd29yZCwKICAgICAgICAgICAgICAgIGNodW5rc2l6ZT1zZWxmLmNodW5rc2l6ZSwgcGFzc2VzPXNlbGYucGFzc2VzLCB1cGRhdGVfZXZlcnk9c2VsZi51cGRhdGVfZXZlcnksCiAgICAgICAgICAgICAgICBhbHBoYT1zZWxmLmFscGhhLCBldGE9c2VsZi5ldGEsIGRlY2F5PXNlbGYuZGVjYXksIG9mZnNldD1zZWxmLm9mZnNldCwKICAgICAgICAgICAgICAgIGV2YWxfZXZlcnk9c2VsZi5ldmFsX2V2ZXJ5LCBpdGVyYXRpb25zPXNlbGYuaXRlcmF0aW9ucywgZ2FtbWFfdGhyZXNob2xkPXNlbGYuZ2FtbWFfdGhyZXNob2xkLAogICAgICAgICAgICAgICAgbWluaW11bV9wcm9iYWJpbGl0eT1zZWxmLm1pbmltdW1fcHJvYmFiaWxpdHksIHJhbmRvbV9zdGF0ZT1zZWxmLnJhbmRvbV9zdGF0ZSwKICAgICAgICAgICAgICAgIGR0eXBlPXNlbGYuZHR5cGUKICAgICAgICAgICAgKQoKICAgICAgICBzZWxmLmdlbnNpbV9tb2RlbC51cGRhdGUoY29ycHVzPVgpCiAgICAgICAgcmV0dXJuIHNlbGYKCiAgICBkZWYgc2NvcmUoc2VsZiwgWCwgeT1Ob25lKToKICAgICAgICAiIiIKICAgICAgICBDb21wdXRlIHNjb3JlIHJlZmxlY3RpbmcgaG93IHdlbGwgdGhlIG1vZGVsIGhhcyBmaXQgZm9yIHRoZSBpbnB1dCBkYXRhLgogICAgICAgICIiIgogICAgICAgIGlmIHNlbGYuc2NvcmVyID09ICdwZXJwbGV4aXR5JzoKICAgICAgICAgICAgY29ycHVzX3dvcmRzID0gc3VtKGNudCBmb3IgZG9jdW1lbnQgaW4gWCBmb3IgXywgY250IGluIGRvY3VtZW50KQogICAgICAgICAgICBzdWJzYW1wbGVfcmF0aW8gPSAxLjAKICAgICAgICAgICAgcGVyd29yZGJvdW5kID0gXAogICAgICAgICAgICAgICAgc2VsZi5nZW5zaW1fbW9kZWwuYm91bmQoWCwgc3Vic2FtcGxlX3JhdGlvPXN1YnNhbXBsZV9yYXRpbykgLyAoc3Vic2FtcGxlX3JhdGlvICogY29ycHVzX3dvcmRzKQogICAgICAgICAgICByZXR1cm4gLTEgKiBucC5leHAyKC1wZXJ3b3JkYm91bmQpICAjIHJldHVybmluZyAoLTEqcGVycGxleGl0eSkgdG8gc2VsZWN0IG1vZGVsIHdpdGggbWluaW11bSB2YWx1ZQogICAgICAgIGVsaWYgc2VsZi5zY29yZXIgPT0gJ3VfbWFzcyc6CiAgICAgICAgICAgIGdvb2RjbSA9IG1vZGVscy5Db2hlcmVuY2VNb2RlbChtb2RlbD1zZWxmLmdlbnNpbV9tb2RlbCwgY29ycHVzPVgsIGNvaGVyZW5jZT1zZWxmLnNjb3JlciwgdG9wbj0zKQogICAgICAgICAgICByZXR1cm4gZ29vZGNtLmdldF9jb2hlcmVuY2UoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgdmFsdWUgb2YgYHNjb3JlcmAgcGFyYW0gc3VwcGxpZWQiKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuZHR5cGUgPSBkdHlwZQoKPHxmaW1fZW5kfD4="]
["ec43630f37aec7fe755290d54aef5bbcfbfe781f-1","ec43630f37aec7fe755290d54aef5bbcfbfe781f","PHxmaW1fcHJlZml4fD4KIiIiClByb3ZpZGVzIGEgYmFzaWMgd3JhcHBlciBmb3IgdGhlIHpsaWIgbGlicmFyeS4KClRoaXMgdXNlcyBjdHlwZXMgdG8gbG9hZCB0aGUgemxpYiBkbGwgZnJvbSB0aGUgc3lzdGVtLgpJZiB0aGlzIGlzIHJ1biBvbiBhIFdpbmRvd3Mgc3lzdGVtIGFuZCBjdHlwZXMudXRpbC5maW5kKCkgY2FuIG5vdCBmaW5kIHpsaWJ3YXBpLmRsbCBpdCB3aWxsIGxvb2sgaW4gdGhlIGZvbGRlciB0aGlzCmNvZGUgaXMgc3RvcmVkIGluLgoiIiIKCiMgVE9ETyBpbmZsYXRlUmVzZXQvZGVmbGF0ZVJlc2V0IG1heSBzcGVlZCB1cCBbZGVdY29tcHJlc3Npb24KIyBUT0RPIGluZmxhdGVCYWNrIGF2b2lkcyBhIGNvcHkgZHVyaW5nIGRlY29tcHJlc3Npb24KCmltcG9ydCBjdHlwZXMgYXMgQwppbXBvcnQgcGxhdGZvcm0KZnJvbSBjdHlwZXMgaW1wb3J0IHV0aWwKCiMgU3BlY2lhbCB0aGFua3MgdG8gTWFyayBOb3R0aW5naGFtIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL21ub3QvMjQyNDU5CiMgYW5kIHRoZSB6bGliIGV4YW1wbGUgc291cmNlIGZvciByZWZlcmVuY2UgaW1wbGVtZW50YXRpb25zLgoKIyBDb25zdGFudHMgdGFrZW4gZnJvbSB6bGliLmgKTUFYX1dCSVRTID0gMTUKREVGQVVMVF9DT01QUkVTU0lPTl9MRVZFTCA9IDkKREVGQVVMVF9NRU1fTEVWRUwgPSA4ClpMSUJfVkVSU0lPTiA9IEMuY19jaGFyX3AoYiIxLjIuMyIpCgojIEFsbG93ZWQgZmx1c2ggdmFsdWVzOyBzZWUgZGVmbGF0ZSgpIGFuZCBpbmZsYXRlKCkKWl9OT19GTFVTSCA9IDAKWl9QQVJUSUFMX0ZMVVNIID0gMQpaX1NZTkNfRkxVU0ggPSAyClpfRlVMTF9GTFVTSCA9IDMKWl9GSU5JU0ggPSA0ClpfQkxPQ0sgPSA1Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KWl9UUkVFUyA9IDYKCiMgUmV0dXJuIGNvZGVzIGZvciB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMuIE5lZ2F0aXZlIHZhbHVlcwojIGFyZSBlcnJvcnMsIHBvc2l0aXZlIHZhbHVlcyBhcmUgdXNlZCBmb3Igc3BlY2lhbCBidXQgbm9ybWFsIGV2ZW50cy4KPHxmaW1fZW5kfD4="]
["ec43630f37aec7fe755290d54aef5bbcfbfe781f-2","ec43630f37aec7fe755290d54aef5bbcfbfe781f","PHxmaW1fcHJlZml4fD4KIiIiClByb3ZpZGVzIGEgYmFzaWMgd3JhcHBlciBmb3IgdGhlIHpsaWIgbGlicmFyeS4KClRoaXMgdXNlcyBjdHlwZXMgdG8gbG9hZCB0aGUgemxpYiBkbGwgZnJvbSB0aGUgc3lzdGVtLgpJZiB0aGlzIGlzIHJ1biBvbiBhIFdpbmRvd3Mgc3lzdGVtIGFuZCBjdHlwZXMudXRpbC5maW5kKCkgY2FuIG5vdCBmaW5kIHpsaWJ3YXBpLmRsbCBpdCB3aWxsIGxvb2sgaW4gdGhlIGZvbGRlciB0aGlzCmNvZGUgaXMgc3RvcmVkIGluLgoiIiIKCiMgVE9ETyBpbmZsYXRlUmVzZXQvZGVmbGF0ZVJlc2V0IG1heSBzcGVlZCB1cCBbZGVdY29tcHJlc3Npb24KIyBUT0RPIGluZmxhdGVCYWNrIGF2b2lkcyBhIGNvcHkgZHVyaW5nIGRlY29tcHJlc3Npb24KCmltcG9ydCBjdHlwZXMgYXMgQwppbXBvcnQgcGxhdGZvcm0KZnJvbSBjdHlwZXMgaW1wb3J0IHV0aWwKCiMgU3BlY2lhbCB0aGFua3MgdG8gTWFyayBOb3R0aW5naGFtIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL21ub3QvMjQyNDU5CiMgYW5kIHRoZSB6bGliIGV4YW1wbGUgc291cmNlIGZvciByZWZlcmVuY2UgaW1wbGVtZW50YXRpb25zLgoKIyBDb25zdGFudHMgdGFrZW4gZnJvbSB6bGliLmgKTUFYX1dCSVRTID0gMTUKREVGQVVMVF9DT01QUkVTU0lPTl9MRVZFTCA9IDkKREVGQVVMVF9NRU1fTEVWRUwgPSA4ClpMSUJfVkVSU0lPTiA9IEMuY19jaGFyX3AoYiIxLjIuMyIpCgojIEFsbG93ZWQgZmx1c2ggdmFsdWVzOyBzZWUgZGVmbGF0ZSgpIGFuZCBpbmZsYXRlKCkKWl9OT19GTFVTSCA9IDAKWl9QQVJUSUFMX0ZMVVNIID0gMQpaX1NZTkNfRkxVU0ggPSAyClpfRlVMTF9GTFVTSCA9IDMKWl9GSU5JU0ggPSA0ClpfQkxPQ0sgPSA1ClpfVFJFRVMgPSA2CgojIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZSB2YWx1ZXMKIyBhcmUgZXJyb3JzLCBwb3NpdGl2ZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIHNwZWNpYWwgYnV0IG5vcm1hbCBldmVudHMuClpfT0sgPSAwClpfU1RSRUFNX0VORCA9IDEKWl9ORUVEX0RJQ1QgPSAyClpfRVJSTk8gPSAtMQpaX1NUUkVBTV9FUlJPUiA9IC0yClpfREFUQV9FUlJPUiA9IC0zClpfTUVNX0VSUk9SID0gLTQKWl9CVUZfRVJST1IgPSAtNQpaX1ZFUlNJT05fRVJST1IgPSAtNgoKIyBjb21wcmVzc2lvbiBsZXZlbHMKWl9OT19DT01QUkVTU0lPTiA9IDAKWl9CRVNUX1NQRUVEID0gMQpaX0JFU1RfQ09NUFJFU1NJT04gPSA5ClpfREVGQVVMVF9DT01QUkVTU0lPTiA9IC0xCgojIGNvbXByZXNzaW9uIHN0cmF0ZWd5OyBzZWUgZGVmbGF0ZUluaXQyKCkKWl9GSUxURVJFRCA9IDEKWl9IVUZGTUFOX09OTFkgPSAyClpfUkxFID0gMwpaX0ZJWEVEID0gNApaX0RFRkFVTFRfU1RSQVRFR1kgPSAwCgojIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZGF0YV90eXBlIGZpZWxkIGZvciBkZWZsYXRlKCkKWl9CSU5BUlkgPSAwClpfVEVYVCA9IDEKWl9BU0NJSSA9IFpfVEVYVCAgIyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIDEuMi4yIGFuZCBlYXJsaWVyClpfVU5LTk9XTiA9IDIKCiMgVGhlIGRlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kICh0aGUgb25seSBvbmUgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbikKWl9ERUZMQVRFRCA9IDgKClpfTlVMTCA9IDAgICMgZm9yIGluaXRpYWxpemluZyB6YWxsb2MsIHpmcmVlLCBvcGFxdWUKCk5VTExfUFRSID0gQy5jYXN0KDAsIEMuUE9JTlRFUihDLmNfdWJ5dGUpKQoKaWYgcGxhdGZvcm0uc3lzdGVtKCkgPT0gJ1dpbmRvd3MnOgogICAgcGF0aCA9IHV0aWwuZmluZF9saWJyYXJ5KCJ6bGliMS5kbGwiKQogICAgaWYgbm90IHBhdGg6CiAgICAgICAgaW1wb3J0IG9zCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpLCAnemxpYndhcGkuZGxsJykKICAgIF96bGliID0gQy53aW5kbGwuTG9hZExpYnJhcnkocGF0aCkKZWxzZToKPHxmaW1fZW5kfD4="]
["ec43630f37aec7fe755290d54aef5bbcfbfe781f-3","ec43630f37aec7fe755290d54aef5bbcfbfe781f","PHxmaW1fcHJlZml4fD4KIiIiClByb3ZpZGVzIGEgYmFzaWMgd3JhcHBlciBmb3IgdGhlIHpsaWIgbGlicmFyeS4KClRoaXMgdXNlcyBjdHlwZXMgdG8gbG9hZCB0aGUgemxpYiBkbGwgZnJvbSB0aGUgc3lzdGVtLgpJZiB0aGlzIGlzIHJ1biBvbiBhIFdpbmRvd3Mgc3lzdGVtIGFuZCBjdHlwZXMudXRpbC5maW5kKCkgY2FuIG5vdCBmaW5kIHpsaWJ3YXBpLmRsbCBpdCB3aWxsIGxvb2sgaW4gdGhlIGZvbGRlciB0aGlzCmNvZGUgaXMgc3RvcmVkIGluLgoiIiIKCiMgVE9ETyBpbmZsYXRlUmVzZXQvZGVmbGF0ZVJlc2V0IG1heSBzcGVlZCB1cCBbZGVdY29tcHJlc3Npb24KIyBUT0RPIGluZmxhdGVCYWNrIGF2b2lkcyBhIGNvcHkgZHVyaW5nIGRlY29tcHJlc3Npb24KCmltcG9ydCBjdHlwZXMgYXMgQwppbXBvcnQgcGxhdGZvcm0KZnJvbSBjdHlwZXMgaW1wb3J0IHV0aWwKCiMgU3BlY2lhbCB0aGFua3MgdG8gTWFyayBOb3R0aW5naGFtIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL21ub3QvMjQyNDU5CiMgYW5kIHRoZSB6bGliIGV4YW1wbGUgc291cmNlIGZvciByZWZlcmVuY2UgaW1wbGVtZW50YXRpb25zLgoKIyBDb25zdGFudHMgdGFrZW4gZnJvbSB6bGliLmgKTUFYX1dCSVRTID0gMTUKREVGQVVMVF9DT01QUkVTU0lPTl9MRVZFTCA9IDkKREVGQVVMVF9NRU1fTEVWRUwgPSA4ClpMSUJfVkVSU0lPTiA9IEMuY19jaGFyX3AoYiIxLjIuMyIpCgojIEFsbG93ZWQgZmx1c2ggdmFsdWVzOyBzZWUgZGVmbGF0ZSgpIGFuZCBpbmZsYXRlKCkKWl9OT19GTFVTSCA9IDAKWl9QQVJUSUFMX0ZMVVNIID0gMQpaX1NZTkNfRkxVU0ggPSAyClpfRlVMTF9GTFVTSCA9IDMKWl9GSU5JU0ggPSA0ClpfQkxPQ0sgPSA1ClpfVFJFRVMgPSA2CgojIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZSB2YWx1ZXMKIyBhcmUgZXJyb3JzLCBwb3NpdGl2ZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIHNwZWNpYWwgYnV0IG5vcm1hbCBldmVudHMuClpfT0sgPSAwClpfU1RSRUFNX0VORCA9IDEKWl9ORUVEX0RJQ1QgPSAyClpfRVJSTk8gPSAtMQpaX1NUUkVBTV9FUlJPUiA9IC0yClpfREFUQV9FUlJPUiA9IC0zClpfTUVNX0VSUk9SID0gLTQKWl9CVUZfRVJST1IgPSAtNQpaX1ZFUlNJT05fRVJST1IgPSAtNgoKIyBjb21wcmVzc2lvbiBsZXZlbHMKWl9OT19DT01QUkVTU0lPTiA9IDAKWl9CRVNUX1NQRUVEID0gMQpaX0JFU1RfQ09NUFJFU1NJT04gPSA5ClpfREVGQVVMVF9DT01QUkVTU0lPTiA9IC0xCgojIGNvbXByZXNzaW9uIHN0cmF0ZWd5OyBzZWUgZGVmbGF0ZUluaXQyKCkKWl9GSUxURVJFRCA9IDEKWl9IVUZGTUFOX09OTFkgPSAyClpfUkxFID0gMwpaX0ZJWEVEID0gNApaX0RFRkFVTFRfU1RSQVRFR1kgPSAwCgojIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZGF0YV90eXBlIGZpZWxkIGZvciBkZWZsYXRlKCkKWl9CSU5BUlkgPSAwClpfVEVYVCA9IDEKWl9BU0NJSSA9IFpfVEVYVCAgIyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIDEuMi4yIGFuZCBlYXJsaWVyClpfVU5LTk9XTiA9IDIKCiMgVGhlIGRlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kICh0aGUgb25seSBvbmUgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbikKWl9ERUZMQVRFRCA9IDgKClpfTlVMTCA9IDAgICMgZm9yIGluaXRpYWxpemluZyB6YWxsb2MsIHpmcmVlLCBvcGFxdWUKCk5VTExfUFRSID0gQy5jYXN0KDAsIEMuUE9JTlRFUihDLmNfdWJ5dGUpKQoKaWYgcGxhdGZvcm0uc3lzdGVtKCkgPT0gJ1dpbmRvd3MnOgogICAgcGF0aCA9IHV0aWwuZmluZF9saWJyYXJ5KCJ6bGliMS5kbGwiKQogICAgaWYgbm90IHBhdGg6CiAgICAgICAgaW1wb3J0IG9zCgogICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKSwgJ3psaWJ3YXBpLmRsbCcpCiAgICBfemxpYiA9IEMud2luZGxsLkxvYWRMaWJyYXJ5KHBhdGgpCmVsc2U6CiAgICBfemxpYiA9IEMuY2RsbC5Mb2FkTGlicmFyeSh1dGlsLmZpbmRfbGlicmFyeSgieiIpKQoKIyBNYWtlIHJldHVybiB0eXBlcyBleHBsaWNpdApfemxpYi5pbmZsYXRlSW5pdDJfLnJlc3R5cGUgPSBDLmNfaW50Cl96bGliLmluZmxhdGUucmVzdHlwZSA9IEMuY19pbnQKX3psaWIuaW5mbGF0ZUVuZC5yZXN0eXBlID0gQy5jX2ludApfemxpYi5pbmZsYXRlU2V0RGljdGlvbmFyeS5yZXN0eXBlID0gQy5jX2ludApfemxpYi5kZWZsYXRlSW5pdDJfLnJlc3R5cGUgPSBDLmNfaW50Cl96bGliLmRlZmxhdGUucmVzdHlwZSA9IEMuY19pbnQKI196bGliLmRlZmxhdGVCb3VuZC5yZXN0eXBlID0gQy5jX2ludDE2Cl96bGliLmRlZmxhdGVFbmQucmVzdHlwZSA9IEMuY19pbnQKX3psaWIuZGVmbGF0ZVNldERpY3Rpb25hcnkucmVzdHlwZSA9IEMuY19pbnQKCgpjbGFzcyB6U3RhdGUoQy5TdHJ1Y3R1cmUpOgogICAgIiIiCiAgICBSZXByZXNlbnRzIHRoZSB6bGliIGludGVybmFsIHN0YXRlIG9iamVjdCB1c2VkIGR1cmluZyBpbmZsYXRlIGFuZCBkZWZsYXRlCiAgICA6aXZhciBuZXh0X2luOiBDLl9Qb2ludGVyICAgbmV4dCBpbnB1dCBieXRlCiAgICA6aXZhciBhdmFpbF9pbjogQy5jX3VpbnQgICAgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCBuZXh0X2luCiAgICA6aXZhciB0b3RhbF9pbjogQy5jX3Vsb25nICAgdG90YWwgbnVtYmVyIG9mIGlucHV0IGJ5dGVzIHJlYWQgc28gZmFyCiAgICA6aXZhciBuZXh0X291dDogQy5fUG9pbnRlciAgbmV4dCBvdXRwdXQgYnl0ZSB3aWxsIGdvIGhlcmUKICAgIDppdmFyIGF2YWlsX291dDogQy5jX3VpbnQgICByZW1haW5pbmcgZnJlZSBzcGFjZSBhdCBuZXh0X291dAogICAgOml2YXIgdG90YWxfb3V0OiBDLmNfdWxvbmcgIHRvdGFsIG51bWJlciBvZiBieXRlcyBvdXRwdXQgc28gZmFyCiAgICA6aXZhciBtc2c6IEMuY19jaGFyX3AgICAgICAgbGFzdCBlcnJvciBtZXNzYWdlLCBOVUxMIGlmIG5vIGVycm9yCiAgICA6aXZhciBzdGF0ZTogQy5jX3ZvaWRfcCAgICAgdXNlZCB0byBhbGxvY2F0ZSB0aGUgaW50ZXJuYWwgc3RhdGUKICAgIDppdmFyIHphbGxvYzogQy5jX3ZvaWRfcCAgICB1c2VkIHRvIGZyZWUgdGhlIGludGVybmFsIHN0YXRlCiAgICA6aXZhciB6ZnJlZTogQy5jX3ZvaWRfcCAgICAgcHJpdmF0ZSBkYXRhIG9iamVjdCBwYXNzZWQgdG8gemFsbG9jIGFuZCB6ZnJlZQogICAgOml2YXIgb3BhcXVlOiBDLmNfdm9pZF9wICAgIGJlc3QgZ3Vlc3MgYWJvdXQgdGhlIGRhdGEgdHlwZTogYmluYXJ5IG9yIHRleHQKICAgIDppdmFyIGRhdGFfdHlwZTogQy5jX2ludCAgICBmb3IgZGVmbGF0ZSwgb3IgdGhlIGRlY29kaW5nIHN0YXRlIGZvciBpbmZsYXRlCiAgICA6aXZhciBhZGxlcjogQy5jX3Vsb25nICAgICAgQWRsZXItMzIgb3IgQ1JDLTMyIHZhbHVlIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YQogICAgOml2YXIgcmVzZXJ2ZWQ6IEMuY191bG9uZyAgIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlCiAgICAiIiIKICAgIF9maWVsZHNfID0gWwogICAgICAgICgibmV4dF9pbiIsIEMuUE9JTlRFUihDLmNfdWJ5dGUpKSwKICAgICAgICAoImF2YWlsX2luIiwgQy5jX3VpbnQpLAogICAgICAgICgidG90YWxfaW4iLCBDLmNfdWxvbmcpLAogICAgICAgICgibmV4dF9vdXQiLCBDLlBPSU5URVIoQy5jX3VieXRlKSksCiAgICAgICAgKCJhdmFpbF9vdXQiLCBDLmNfdWludCksCiAgICAgICAgKCJ0b3RhbF9vdXQiLCBDLmNfdWxvbmcpLAogICAgICAgICgibXNnIiwgQy5jX2NoYXJfcCksCiAgICAgICAgKCJzdGF0ZSIsIEMuY192b2lkX3ApLAogICAgICAgICgiemFsbG9jIiwgQy5jX3ZvaWRfcCksCiAgICAgICAgKCJ6ZnJlZSIsIEMuY192b2lkX3ApLAogICAgICAgICgib3BhcXVlIiwgQy5jX3ZvaWRfcCksCiAgICAgICAgKCJkYXRhX3R5cGUiLCBDLmNfaW50KSwKICAgICAgICAoImFkbGVyIiwgQy5jX3Vsb25nKSwKICAgICAgICAoInJlc2VydmVkIiwgQy5jX3Vsb25nKSwKICAgIF0KCgpTSVpFT0ZfWlNUQVRFID0gQy5zaXplb2YoelN0YXRlKQoKCmRlZiByYXdfY29tcHJlc3Moc3JjPU5vbmUsIGRlc3Q9Tm9uZSwgbW9kZT1aX0ZJTklTSCwgc3RhdGU9Tm9uZSwgbGV2ZWw9REVGQVVMVF9DT01QUkVTU0lPTl9MRVZFTCwgd2JpdHM9TUFYX1dCSVRTLCBtZW1sZXZlbD1ERUZBVUxUX01FTV9MRVZFTCwKICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5PU5vbmUpIC0+IChpbnQsIHpTdGF0ZSk6CiAgICAiIiIKICAgIFdyYXBzIHpsaWIuZGVmbGF0ZSgpLgogICAgTWFuYWdlcyBjb21wcmVzc2lvbiBzdGF0ZSBhbmQgY29udmVyc2lvbiB0byBjdHlwZXMgY29tcGF0aWJsZSB0eXBlcy4KICAgIFNldCBzcmMgYW5kIGRlc3QgdG8gTm9uZSB0byBwcmVzZXJ2ZSB0aGVpciB2YWx1ZXMgYmV0d2VlbiBjYWxscy4KICAgIEZvciBleGFtcGxlLCBvbiB0aGUgaW5pdGlhbCBjYWxsIHNldCBzcmMgdG8gc29tZSBpbnB1dCBkYXRhIGFuZCBkZXN0IHRvIGFuIG91dHB1dCBidWZmZXIuCiAgICBPbiBzdWJzZXF1ZW50IGNhbGxzIHVudGlsIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGZ1bGwsIGxlYXZlIGRlc3Qgc2V0IHRvIE5vbmUgYW5kIHNyYyBhIG5ldyBidWZmZXIgb2YgZGF0YSB0byBjb21wcmVzcy4KICAgIDpwYXJhbSBzcmM6IERhdGEgYnVmZmVyIHRvIGNvbXByZXNzIG9yIE5vbmUuCiAgICA6cGFyYW0gZGVzdDogRGF0YSBidWZmZXIgZm9yIGNvbXByZXNzZWQgZGF0YSB0byBiZSB3cml0dGVuIHRvIG9yIE5vbmUuCiAgICA6cGFyYW0gbW9kZTogQ29tcHJlc3Npb24gZmx1c2ggbW9kZS4gVXNlIFpfTk9fRkxVU0gsIFpfUEFSVElBTF9GTFVTSCwgb3IgWl9GSU5JU0guIFNlZSB6bGliIGRvY3VtZW50YXRpb24gZm9yIGZ1bGwgZGVzY3JpcHRpb24uCiAgICA6cGFyYW0gc3RhdGU6IFN0YXRlIGluc3RhbmNlIHJldHVybmVkIGZyb20gcHJldmlvdXMgY2FsbCBvciBOb25lIG9uIGZpcnN0IGNhbGwuCiAgICA6cGFyYW0gbGV2ZWw6IHpsaWIgYWxnb3JpdGhtIGNvbXByZXNzaW9uIGxldmVsIGZyb20gMC05LiBEZWZhdWx0PTguIFBhc3MgLTEgZm9yIHpsaWIgZGVmYXVsdC4KICAgIDpwYXJhbSB3Yml0czogQ29tcHJlc3Npb24gd2luZG93IGJpdCBzaXplLiBEZWZhdWx0cyB0byBNQVhfV0JJVFMsIGRvIG5vdCBjaGFuZ2UgdW5sZXNzIHlvdSBSRUFMTFkga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCiAgICA6cGFyYW0gbWVtbGV2ZWw6IHpsaWIgbWVtb3J5IHVzYWdlIGxldmVsLiBTZWUgemxpYiBkb2N1bWVudGF0aW9uIGZvciBtb3JlLgogICAgOnBhcmFtIGRpY3Rpb25hcnk6IHpsaWIgY29tcHJlc3Npb24gYWxnb3JpdGgsIHNlZSB6bGliIGRvY3VtZW50YXRpb24gZm9yIG1vcmUuCiAgICA6cmV0dXJuOiBUdXBsZSBjb250YWluaW5nIChFcnJvciBjb2RlLCB6bGliIHN0YXRlIG9iamVjdCkKICAgICIiIgogICAgaWYgbm90IHN0YXRlIGFuZCAoc3JjIGlzIE5vbmUgb3IgZGVzdCBpcyBOb25lKToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJObyBpbml0aWFsaXNlZCBzdGF0ZS4gUHJvdmlkZSBzcmMgYW5kIGRlc3Qgb24gZmlyc3QgY2FsbC4iKQoKICAgIGlmIHN0YXRlOgogICAgICAgIGVyciA9IFpfT0sKICAgIGVsc2U6CiAgICAgICAgc3RhdGUgPSB6U3RhdGUoKQogICAgICAgIGVyciA9IFpfU1RSRUFNX0VSUk9SCgogICAgaWYgc3JjOgogICAgICAgIHN0YXRlLm5leHRfaW4gPSBDLmNhc3QoQy5wb2ludGVyKHNyYyksIEMuUE9JTlRFUihDLmNfdWJ5dGUpKQogICAgICAgIHN0YXRlLmF2YWlsX2luID0gbGVuKHNyYykKICAgIGVsaWYgc3JjID09IFpfTlVMTDoKICAgICAgICBzdGF0ZS5uZXh0X2luID0gTlVMTF9QVFIKICAgICAgICBzdGF0ZS5hdmFpbF9pbiA9IFpfTlVMTAoKICAgIGlmIGRlc3Q6CiAgICAgICAgc3RhdGUubmV4dF9vdXQgPSBDLmNhc3QoQy5wb2ludGVyKGRlc3QpLCBDLlBPSU5URVIoQy5jX3VieXRlKSkKICAgICAgICBzdGF0ZS5hdmFpbF9vdXQgPSBsZW4oZGVzdCkKCiAgICBpZiBlcnIgPT0gWl9TVFJFQU1fRVJST1I6CiAgICAgICAgZXJyID0gX3psaWIuZGVmbGF0ZUluaXQyXyhDLmJ5cmVmKHN0YXRlKSwgbGV2ZWwsIFpfREVGTEFURUQsIC13Yml0cywgbWVtbGV2ZWwsIFpfREVGQVVMVF9TVFJBVEVHWSwgWkxJQl9WRVJTSU9OLCBTSVpFT0ZfWlNUQVRFKQogICAgICAgIGlmIGVyciA9PSBaX09LIGFuZCBkaWN0aW9uYXJ5OgogICAgICAgICAgICBlcnIgPSBfemxpYi5kZWZsYXRlU2V0RGljdGlvbmFyeShDLmJ5cmVmKHN0YXRlKSwgQy5jYXN0KEMuY19jaGFyX3AoZGljdGlvbmFyeSksIEMuUE9JTlRFUihDLmNfdWJ5dGUpKSwgbGVuKGRpY3Rpb25hcnkpKQoKICAgIGlmIGVyciA9PSBaX09LOgogICAgICAgIGVyciA9IF96bGliLmRlZmxhdGUoQy5ieXJlZihzdGF0ZSksIG1vZGUpCgogICAgaWYgZXJyID09IFpfU1RSRUFNX0VORDoKICAgICAgICBhc3NlcnQgX3psaWIuZGVmbGF0ZUVuZChDLmJ5cmVmKHN0YXRlKSkgPT0gWl9PSwoKICAgIHJldHVybiBlcnIsIHN0YXRlCgoKZGVmIHJhd19kZWNvbXByZXNzKHNyYz1Ob25lLCBkZXN0PU5vbmUsIG1vZGU9Wl9GSU5JU0gsIHN0YXRlPU5vbmUsIHdiaXRzPU1BWF9XQklUUywgZGljdGlvbmFyeT1Ob25lKSAtPiAoaW50LCB6U3RhdGUpOgogICAgIiIiCiAgICBXcmFwcyB6bGliLmluZmxhdGUoKS4KICAgIE1hbmFnZXMgZGVjb21wcmVzc2lvbiBzdGF0ZSBhbmQgY29udmVyc2lvbiB0byBjdHlwZXMgY29tcGF0aWJsZSB0eXBlcy4KICAgIFNldCBzcmMgYW5kIGRlc3QgdG8gTm9uZSB0byBwcmVzZXJ2ZSB0aGVpciB2YWx1ZXMgYmV0d2VlbiBjYWxscy4KICAgIDpwYXJhbSBzcmM6IERhdGEgYnVmZmVyIHRvIGRlY29tcHJlc3Mgb3IgTm9uZS4KICAgIDpwYXJhbSBkZXN0OiBEYXRhIGJ1ZmZlciBmb3IgZGVjb21wcmVzc2VkIGRhdGEgdG8gYmUgd3JpdHRlbiB0byBvciBOb25lLgogICAgOnBhcmFtIG1vZGU6IERlY29tcHJlc3Npb24gZmx1c2ggbW9kZS4gVXNlIFpfTk9fRkxVU0gsIFpfUEFSVElBTF9GTFVTSCwgb3IgWl9GSU5JU0guIFNlZSB6bGliIGRvY3VtZW50YXRpb24gZm9yIGZ1bGwgZGVzY3JpcHRpb24uCiAgICA6cGFyYW0gc3RhdGU6IFN0YXRlIGluc3RhbmNlIHJldHVybmVkIGZyb20gcHJldmlvdXMgY2FsbCBvciBOb25lIG9uIGZpcnN0IGNhbGwuCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIDpwYXJhbSB3Yml0czogQ29tcHJlc3Npb24gd2luZG93IGJpdCBzaXplLiBEZWZhdWx0cyB0byBNQVhfV0JJVFMsIGRvIG5vdCBjaGFuZ2UgdW5sZXNzIHlvdSBSRUFMTFkga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCiAgICA6cGFyYW0gZGljdGlvbmFyeTogemxpYiBjb21wcmVzc2lvbiBhbGdvcml0aCwgc2VlIHpsaWIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZS4KICAgIDpyZXR1cm46IFR1cGxlIGNvbnRhaW5pbmcgKEVycm9yIGNvZGUsIHpsaWIgc3RhdGUgb2JqZWN0KQogICAgIiIiCjx8ZmltX2VuZHw+"]
["ec43630f37aec7fe755290d54aef5bbcfbfe781f-4","ec43630f37aec7fe755290d54aef5bbcfbfe781f","PHxmaW1fcHJlZml4fD4KIiIiClByb3ZpZGVzIGEgYmFzaWMgd3JhcHBlciBmb3IgdGhlIHpsaWIgbGlicmFyeS4KClRoaXMgdXNlcyBjdHlwZXMgdG8gbG9hZCB0aGUgemxpYiBkbGwgZnJvbSB0aGUgc3lzdGVtLgpJZiB0aGlzIGlzIHJ1biBvbiBhIFdpbmRvd3Mgc3lzdGVtIGFuZCBjdHlwZXMudXRpbC5maW5kKCkgY2FuIG5vdCBmaW5kIHpsaWJ3YXBpLmRsbCBpdCB3aWxsIGxvb2sgaW4gdGhlIGZvbGRlciB0aGlzCmNvZGUgaXMgc3RvcmVkIGluLgoiIiIKCiMgVE9ETyBpbmZsYXRlUmVzZXQvZGVmbGF0ZVJlc2V0IG1heSBzcGVlZCB1cCBbZGVdY29tcHJlc3Npb24KIyBUT0RPIGluZmxhdGVCYWNrIGF2b2lkcyBhIGNvcHkgZHVyaW5nIGRlY29tcHJlc3Npb24KCmltcG9ydCBjdHlwZXMgYXMgQwppbXBvcnQgcGxhdGZvcm0KZnJvbSBjdHlwZXMgaW1wb3J0IHV0aWwKCiMgU3BlY2lhbCB0aGFua3MgdG8gTWFyayBOb3R0aW5naGFtIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL21ub3QvMjQyNDU5CiMgYW5kIHRoZSB6bGliIGV4YW1wbGUgc291cmNlIGZvciByZWZlcmVuY2UgaW1wbGVtZW50YXRpb25zLgoKIyBDb25zdGFudHMgdGFrZW4gZnJvbSB6bGliLmgKTUFYX1dCSVRTID0gMTUKREVGQVVMVF9DT01QUkVTU0lPTl9MRVZFTCA9IDkKREVGQVVMVF9NRU1fTEVWRUwgPSA4ClpMSUJfVkVSU0lPTiA9IEMuY19jaGFyX3AoYiIxLjIuMyIpCgojIEFsbG93ZWQgZmx1c2ggdmFsdWVzOyBzZWUgZGVmbGF0ZSgpIGFuZCBpbmZsYXRlKCkKWl9OT19GTFVTSCA9IDAKWl9QQVJUSUFMX0ZMVVNIID0gMQpaX1NZTkNfRkxVU0ggPSAyClpfRlVMTF9GTFVTSCA9IDMKWl9GSU5JU0ggPSA0ClpfQkxPQ0sgPSA1ClpfVFJFRVMgPSA2CgojIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZSB2YWx1ZXMKIyBhcmUgZXJyb3JzLCBwb3NpdGl2ZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIHNwZWNpYWwgYnV0IG5vcm1hbCBldmVudHMuClpfT0sgPSAwClpfU1RSRUFNX0VORCA9IDEKWl9ORUVEX0RJQ1QgPSAyClpfRVJSTk8gPSAtMQpaX1NUUkVBTV9FUlJPUiA9IC0yClpfREFUQV9FUlJPUiA9IC0zClpfTUVNX0VSUk9SID0gLTQKWl9CVUZfRVJST1IgPSAtNQpaX1ZFUlNJT05fRVJST1IgPSAtNgoKIyBjb21wcmVzc2lvbiBsZXZlbHMKWl9OT19DT01QUkVTU0lPTiA9IDAKWl9CRVNUX1NQRUVEID0gMQpaX0JFU1RfQ09NUFJFU1NJT04gPSA5ClpfREVGQVVMVF9DT01QUkVTU0lPTiA9IC0xCgojIGNvbXByZXNzaW9uIHN0cmF0ZWd5OyBzZWUgZGVmbGF0ZUluaXQyKCkKWl9GSUxURVJFRCA9IDEKWl9IVUZGTUFOX09OTFkgPSAyClpfUkxFID0gMwpaX0ZJWEVEID0gNApaX0RFRkFVTFRfU1RSQVRFR1kgPSAwCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiMgUG9zc2libGUgdmFsdWVzIG9mIHRoZSBkYXRhX3R5cGUgZmllbGQgZm9yIGRlZmxhdGUoKQpaX0JJTkFSWSA9IDAKWl9URVhUID0gMQo8fGZpbV9lbmR8Pg=="]
["eca5f619c976d98f589c3a171872fbc7a4c0d47d-1","eca5f619c976d98f589c3a171872fbc7a4c0d47d","PHxmaW1fcHJlZml4fD4KZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBwYXRjaAoKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gaHlwb3RoZXNpcyBpbXBvcnQgZ2l2ZW4sIHN0cmF0ZWdpZXMgYXMgc3QKZnJvbSBwYXJhbWV0ZXJpemVkIGltcG9ydCBwYXJhbWV0ZXJpemVkCgpmcm9tIGFpdGtlbnMgaW1wb3J0IGFjY2VsZXJhdGUsIHNlY29uZF9kaWZmZXJlbmNlcwoKCmNsYXNzIFRlc3RBaXRrZW5zKFRlc3RDYXNlKToKICAgIEBnaXZlbigKICAgICAgICBzdC5mbG9hdHMobWluX3ZhbHVlPTEsIG1heF92YWx1ZT0xZTkpLAogICAgICAgIHN0LmZsb2F0cyhtaW5fdmFsdWU9LTEsIG1heF92YWx1ZT0xKS5maWx0ZXIoCiAgICAgICAgICAgIGxhbWJkYSBpbml0aWFsOiBhYnMoaW5pdGlhbCA+IDFlLTYpCiAgICAgICAgKSwKICAgICAgICBzdC5mbG9hdHMobWluX3ZhbHVlPTEsIG1heF92YWx1ZT0xZTQpLAogICAgKQogICAgZGVmIHRlc3RfZ2VvbWV0cmljX2RlY2F5KHNlbGYsIGxpbWl0LCBpbml0aWFsLCByYXRlKToKICAgICAgICAiIiJHZW9tZXRyaWNhbGx5IChleHBvbmVudGlhbGx5KSBjb252ZXJnaW5nIHNlcXVlbmNlcyBjb252ZXJnZQogICAgICAgIHdlbGwgd2hlbiBhY2NlbGVyYXRlZC4KICAgICAgICAiIiIKICAgICAgICAjIFRPRE8gdGhlIHJhbmdlcyBhcmUgYSBiaXQgdG9vIGNvbnNlcnZhdGl2ZSBhbmQgdGhlIHRvbGVyYW5jZXMKICAgICAgICAjIHZlcnkgaGlnaC4gVGhpcyBpcyB0byBtYWtlIHRoZSB0ZXN0cyBwYXNzICgjMiksIGJ1dCBpcyBpdAogICAgICAgICMgcG9zc2libGUgdG8gZ2V0IGJldHRlciBlc3RpbWF0ZXMgb24gdGhlIGVycm9yIGJvdW5kcz8KICAgICAgICBsc3QgPSBsaW1pdCArIGluaXRpYWwgKiBucC5leHAoLXJhdGUgKiBucC5hcnJheShyYW5nZSgxMikpKQogICAgICAgIGFjY2VsZXJhdGVkX2xzdCA9IGFjY2VsZXJhdGUobHN0KQogICAgICAgIG5wLnRlc3RpbmcuYXNzZXJ0X2FsbGNsb3NlKAogICAgICAgICAgICBhY2NlbGVyYXRlZF9sc3RbLTFdLCBbbGltaXRdLCBhdG9sPTEvcmF0ZSoqMgogICAgICAgICkKCiAgICBAZ2l2ZW4oc3QuZmxvYXRzKGFsbG93X2luZmluaXR5PUZhbHNlLCBhbGxvd19uYW49RmFsc2UpKQogICAgZGVmIHRlc3RfaGFuZGxlc19jb25zdGFudF9zZXF1ZW5jZShzZWxmLCB2YWwpOgogICAgICAgIGxzdCA9IFt2YWwsIHZhbCwgdmFsXQogICAgICAgIGFjY2VsZXJhdGVkX2xzdCA9IGFjY2VsZXJhdGUobHN0KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWNjZWxlcmF0ZWRfbHN0LCBbdmFsXSkKCiAgICBkZWYgdGVzdF9mb3J3YXJkX2RpZmZlcmVuY2VzKHNlbGYpOgo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChbMiwgMl0sIGxpc3QoZDJ4cykpCgogICAgZGVmIHRlc3RfY2VudHJhbF9kaWZmZXJlbmNlcyhzZWxmKToKICAgICAgICB4cyA9IFsxLCA0LCA5LCAxNl0KICAgICAgICB0eHMsIGR4cywgZDJ4cyA9IHNlY29uZF9kaWZmZXJlbmNlcyh4cywgZGlyZWN0aW9uPSdjZW50cmFsJykKICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChbNCwgOV0sIGxpc3QodHhzKSkKICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChbNCwgNl0sIGxpc3QoZHhzKSkKICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChbMiwgMl0sIGxpc3QoZDJ4cykpCgogICAgZGVmIHRlc3RfY2VudHJhbF9kaWZmZXJlbmNlc19oYXZlX2V4cGVjdGVkX2xlbmd0aHMoc2VsZik6CiAgICAgICAgeHMgPSBucC5yYW5kb20ucmFuZCg4KQogICAgICAgIGF4cyA9IGFjY2VsZXJhdGUoeHMsIGRpcmVjdGlvbj0nY2VudHJhbCcpCiAgICAgICAgc2VsZi5hc3NlcnRUdXBsZUVxdWFsKCg2LCksIGF4cy5zaGFwZSkKCiAgICBkZWYgdGVzdF9mb3J3YXJkX2RpZmZlcmVuY2VzX2hhdmVfZXhwZWN0ZWRfbGVuZ3RocyhzZWxmKToKICAgICAgICB4cyA9IG5wLnJhbmRvbS5yYW5kKDgpCiAgICAgICAgYXhzID0gYWNjZWxlcmF0ZSh4cywgZGlyZWN0aW9uPSdmb3J3YXJkJykKICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwoKDYsKSwgYXhzLnNoYXBlKQoKICAgIEBwYXRjaCgnYWl0a2Vucy5zZWNvbmRfZGlmZmVyZW5jZXMnKQogICAgZGVmIHRlc3RfZGVmYXVsdF9pc19mb3J3YXJkX2RpZmZlcmVuY2VzKHNlbGYsIG0pOgogICAgICAgIG0ucmV0dXJuX3ZhbHVlID0gKG5wLmFycmF5KFtdKSwgbnAuYXJyYXkoW10pLCBucC5hcnJheShbXSkpCiAgICAgICAgeHMgPSBucC5yYW5kb20ucmFuZCg4KQogICAgICAgIGF4cyA9IGFjY2VsZXJhdGUoeHMpICAjIG5vdCBzcGVjaWZ5aW5nIGRpcmVjdGlvbgogICAgICAgIG0uYXNzZXJ0X2NhbGxlZF9vbmNlKCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdmb3J3YXJkJywgbS5jYWxsX2FyZ3Mua3dhcmdzWydkaXJlY3Rpb24nXSkKCiAgICBAcGFyYW1ldGVyaXplZC5leHBhbmQoWygwLCksICgtMSwpLCAoMC41LCksICgxLiwpXSkKICAgIGRlZiB0ZXN0X3JlamVjdHNfaW52YWxpZF9pdGVyYXRpb25zKHNlbGYsIGl0KToKICAgICAgICB4cyA9IFswLCAwLCAwXQogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgYWNjZWxlcmF0ZSh4cywgaXRlcmF0aW9ucz1pdCkKCiAgICBkZWYgdGVzdF9tdWx0aXBsZV9pdGVyYXRpb25zKHNlbGYpOgogICAgICAgIHhzID0gWzEwMCwgNTAsIDIwLCAxMCwgNSwgMiwgMV0KICAgICAgICBhY2MxID0gYWNjZWxlcmF0ZSh4cykKICAgICAgICBucC50ZXN0aW5nLmFzc2VydF9hbGxjbG9zZShhY2MxLCBbLTI1LiwgNS4sIDAuLCAtMi41LCAwLjVdKQogICAgICAgIGFjYzIgPSBhY2NlbGVyYXRlKHhzLCBpdGVyYXRpb25zPTIpCiAgICAgICAgbnAudGVzdGluZy5hc3NlcnRfYWxsY2xvc2UoYWNjMiwgWyAwLjcxNDI4NTcxLCAtNS4sIC0xLjEzNjM2MzY0XSkKICAgICAgICBhY2MzID0gYWNjZWxlcmF0ZSh4cywgaXRlcmF0aW9ucz0zKQogICAgICAgIG5wLnRlc3RpbmcuYXNzZXJ0X2FsbGNsb3NlKGFjYzMsIFstMi42OTQ5MTUyNV0pCgogICAgQHBhcmFtZXRlcml6ZWQuZXhwYW5kKFsKICAgICAgICAoMCwgWzgsIDRdKSwKICAgICAgICAoMC41LCBbNCwgMl0pLAogICAgICAgICgxLCBbMCwgMF0pLAogICAgICAgICgyLCBbLTgsIC00XSkKICAgIF0pCiAgICBkZWYgdGVzdF9zdHJlbmd0aChzZWxmLCBzdHJlbmd0aCwgZXhwZWN0ZWQpOgogICAgICAgIHhzID0gWzgsIDQsIDIsIDFdCiAgICAgICAgYXhzID0gYWNjZWxlcmF0ZSh4cywgc3RyZW5ndGg9c3RyZW5ndGgpCiAgICAgICAgbnAudGVzdGluZy5hc3NlcnRfYWxsY2xvc2UoYXhzLCBleHBlY3RlZCkKPHxmaW1fc3VmZml4fD4KICAgICAgICB4cyA9IFsxLCA0LCA5LCAxNl0KICAgICAgICB0eHMsIGR4cywgZDJ4cyA9IHNlY29uZF9kaWZmZXJlbmNlcyh4cywgZGlyZWN0aW9uPSdmb3J3YXJkJykKICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChbMSwgNF0sIGxpc3QodHhzKSkKICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChbMywgNV0sIGxpc3QoZHhzKSkKPHxmaW1fZW5kfD4="]
["eca5f619c976d98f589c3a171872fbc7a4c0d47d-2","eca5f619c976d98f589c3a171872fbc7a4c0d47d","PHxmaW1fcHJlZml4fD4KZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBwYXRjaAoKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gaHlwb3RoZXNpcyBpbXBvcnQgZ2l2ZW4sIHN0cmF0ZWdpZXMgYXMgc3QKZnJvbSBwYXJhbWV0ZXJpemVkIGltcG9ydCBwYXJhbWV0ZXJpemVkCgpmcm9tIGFpdGtlbnMgaW1wb3J0IGFjY2VsZXJhdGUsIHNlY29uZF9kaWZmZXJlbmNlcwoKCmNsYXNzIFRlc3RBaXRrZW5zKFRlc3RDYXNlKToKICAgIEBnaXZlbigKICAgICAgICBzdC5mbG9hdHMobWluX3ZhbHVlPTEsIG1heF92YWx1ZT0xZTkpLAogICAgICAgIHN0LmZsb2F0cyhtaW5fdmFsdWU9LTEsIG1heF92YWx1ZT0xKS5maWx0ZXIoCiAgICAgICAgICAgIGxhbWJkYSBpbml0aWFsOiBhYnMoaW5pdGlhbCA+IDFlLTYpCiAgICAgICAgKSwKICAgICAgICBzdC5mbG9hdHMobWluX3ZhbHVlPTEsIG1heF92YWx1ZT0xZTQpLAogICAgKQogICAgZGVmIHRlc3RfZ2VvbWV0cmljX2RlY2F5KHNlbGYsIGxpbWl0LCBpbml0aWFsLCByYXRlKToKICAgICAgICAiIiJHZW9tZXRyaWNhbGx5IChleHBvbmVudGlhbGx5KSBjb252ZXJnaW5nIHNlcXVlbmNlcyBjb252ZXJnZQogICAgICAgIHdlbGwgd2hlbiBhY2NlbGVyYXRlZC4KICAgICAgICAiIiIKICAgICAgICAjIFRPRE8gdGhlIHJhbmdlcyBhcmUgYSBiaXQgdG9vIGNvbnNlcnZhdGl2ZSBhbmQgdGhlIHRvbGVyYW5jZXMKICAgICAgICAjIHZlcnkgaGlnaC4gVGhpcyBpcyB0byBtYWtlIHRoZSB0ZXN0cyBwYXNzICgjMiksIGJ1dCBpcyBpdAogICAgICAgICMgcG9zc2libGUgdG8gZ2V0IGJldHRlciBlc3RpbWF0ZXMgb24gdGhlIGVycm9yIGJvdW5kcz8KICAgICAgICBsc3QgPSBsaW1pdCArIGluaXRpYWwgKiBucC5leHAoLXJhdGUgKiBucC5hcnJheShyYW5nZSgxMikpKQogICAgICAgIGFjY2VsZXJhdGVkX2xzdCA9IGFjY2VsZXJhdGUobHN0KQogICAgICAgIG5wLnRlc3RpbmcuYXNzZXJ0X2FsbGNsb3NlKAogICAgICAgICAgICBhY2NlbGVyYXRlZF9sc3RbLTFdLCBbbGltaXRdLCBhdG9sPTEvcmF0ZSoqMgogICAgICAgICkKCiAgICBAZ2l2ZW4oc3QuZmxvYXRzKGFsbG93X2luZmluaXR5PUZhbHNlLCBhbGxvd19uYW49RmFsc2UpKQogICAgZGVmIHRlc3RfaGFuZGxlc19jb25zdGFudF9zZXF1ZW5jZShzZWxmLCB2YWwpOgogICAgICAgIGxzdCA9IFt2YWwsIHZhbCwgdmFsXQogICAgICAgIGFjY2VsZXJhdGVkX2xzdCA9IGFjY2VsZXJhdGUobHN0KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWNjZWxlcmF0ZWRfbHN0LCBbdmFsXSkKCiAgICBkZWYgdGVzdF9mb3J3YXJkX2RpZmZlcmVuY2VzKHNlbGYpOgogICAgICAgIHhzID0gWzEsIDQsIDksIDE2XQogICAgICAgIHR4cywgZHhzLCBkMnhzID0gc2Vjb25kX2RpZmZlcmVuY2VzKHhzLCBkaXJlY3Rpb249J2ZvcndhcmQnKQogICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKFsxLCA0XSwgbGlzdCh0eHMpKQogICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKFszLCA1XSwgbGlzdChkeHMpKQogICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKFsyLCAyXSwgbGlzdChkMnhzKSkKCiAgICBkZWYgdGVzdF9jZW50cmFsX2RpZmZlcmVuY2VzKHNlbGYpOgogICAgICAgIHhzID0gWzEsIDQsIDksIDE2XQogICAgICAgIHR4cywgZHhzLCBkMnhzID0gc2Vjb25kX2RpZmZlcmVuY2VzKHhzLCBkaXJlY3Rpb249J2NlbnRyYWwnKQogICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKFs0LCA5XSwgbGlzdCh0eHMpKQogICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKFs0LCA2XSwgbGlzdChkeHMpKQogICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKFsyLCAyXSwgbGlzdChkMnhzKSkKCiAgICBkZWYgdGVzdF9jZW50cmFsX2RpZmZlcmVuY2VzX2hhdmVfZXhwZWN0ZWRfbGVuZ3RocyhzZWxmKToKICAgICAgICB4cyA9IG5wLnJhbmRvbS5yYW5kKDgpCiAgICAgICAgYXhzID0gYWNjZWxlcmF0ZSh4cywgZGlyZWN0aW9uPSdjZW50cmFsJykKICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwoKDYsKSwgYXhzLnNoYXBlKQoKICAgIGRlZiB0ZXN0X2ZvcndhcmRfZGlmZmVyZW5jZXNfaGF2ZV9leHBlY3RlZF9sZW5ndGhzKHNlbGYpOgogICAgICAgIHhzID0gbnAucmFuZG9tLnJhbmQoOCkKICAgICAgICBheHMgPSBhY2NlbGVyYXRlKHhzLCBkaXJlY3Rpb249J2ZvcndhcmQnKQogICAgICAgIHNlbGYuYXNzZXJ0VHVwbGVFcXVhbCgoNiwpLCBheHMuc2hhcGUpCgogICAgQHBhdGNoKCdhaXRrZW5zLnNlY29uZF9kaWZmZXJlbmNlcycpCiAgICBkZWYgdGVzdF9kZWZhdWx0X2lzX2ZvcndhcmRfZGlmZmVyZW5jZXMoc2VsZiwgbSk6CiAgICAgICAgbS5yZXR1cm5fdmFsdWUgPSAobnAuYXJyYXkoW10pLCBucC5hcnJheShbXSksIG5wLmFycmF5KFtdKSkKICAgICAgICB4cyA9IG5wLnJhbmRvbS5yYW5kKDgpCiAgICAgICAgYXhzID0gYWNjZWxlcmF0ZSh4cykgICMgbm90IHNwZWNpZnlpbmcgZGlyZWN0aW9uCiAgICAgICAgbS5hc3NlcnRfY2FsbGVkX29uY2UoKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2ZvcndhcmQnLCBtLmNhbGxfYXJncy5rd2FyZ3NbJ2RpcmVjdGlvbiddKQoKICAgIEBwYXJhbWV0ZXJpemVkLmV4cGFuZChbKDAsKSwgKC0xLCksICgwLjUsKSwgKDEuLCldKQogICAgZGVmIHRlc3RfcmVqZWN0c19pbnZhbGlkX2l0ZXJhdGlvbnMoc2VsZiwgaXQpOgogICAgICAgIHhzID0gWzAsIDAsIDBdCiAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICBhY2NlbGVyYXRlKHhzLCBpdGVyYXRpb25zPWl0KQoKICAgIGRlZiB0ZXN0X211bHRpcGxlX2l0ZXJhdGlvbnMoc2VsZik6CiAgICAgICAgeHMgPSBbMTAwLCA1MCwgMjAsIDEwLCA1LCAyLCAxXQogICAgICAgIGFjYzEgPSBhY2NlbGVyYXRlKHhzKQogICAgICAgIG5wLnRlc3RpbmcuYXNzZXJ0X2FsbGNsb3NlKGFjYzEsIFstMjUuLCA1LiwgMC4sIC0yLjUsIDAuNV0pCiAgICAgICAgYWNjMiA9IGFjY2VsZXJhdGUoeHMsIGl0ZXJhdGlvbnM9MikKICAgICAgICBucC50ZXN0aW5nLmFzc2VydF9hbGxjbG9zZShhY2MyLCBbIDAuNzE0Mjg1NzEsIC01LiwgLTEuMTM2MzYzNjRdKQogICAgICAgIGFjYzMgPSBhY2NlbGVyYXRlKHhzLCBpdGVyYXRpb25zPTMpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBucC50ZXN0aW5nLmFzc2VydF9hbGxjbG9zZShhY2MzLCBbLTIuNjk0OTE1MjVdKQoKPHxmaW1fZW5kfD4="]
["eca5f619c976d98f589c3a171872fbc7a4c0d47d-3","eca5f619c976d98f589c3a171872fbc7a4c0d47d","PHxmaW1fcHJlZml4fD4KZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBwYXRjaAoKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gaHlwb3RoZXNpcyBpbXBvcnQgZ2l2ZW4sIHN0cmF0ZWdpZXMgYXMgc3QKZnJvbSBwYXJhbWV0ZXJpemVkIGltcG9ydCBwYXJhbWV0ZXJpemVkCgpmcm9tIGFpdGtlbnMgaW1wb3J0IGFjY2VsZXJhdGUsIHNlY29uZF9kaWZmZXJlbmNlcwoKCmNsYXNzIFRlc3RBaXRrZW5zKFRlc3RDYXNlKToKICAgIEBnaXZlbigKICAgICAgICBzdC5mbG9hdHMobWluX3ZhbHVlPTEsIG1heF92YWx1ZT0xZTkpLAogICAgICAgIHN0LmZsb2F0cyhtaW5fdmFsdWU9LTEsIG1heF92YWx1ZT0xKS5maWx0ZXIoCiAgICAgICAgICAgIGxhbWJkYSBpbml0aWFsOiBhYnMoaW5pdGlhbCA+IDFlLTYpCiAgICAgICAgKSwKICAgICAgICBzdC5mbG9hdHMobWluX3ZhbHVlPTEsIG1heF92YWx1ZT0xZTQpLAogICAgKQogICAgZGVmIHRlc3RfZ2VvbWV0cmljX2RlY2F5KHNlbGYsIGxpbWl0LCBpbml0aWFsLCByYXRlKToKICAgICAgICAiIiJHZW9tZXRyaWNhbGx5IChleHBvbmVudGlhbGx5KSBjb252ZXJnaW5nIHNlcXVlbmNlcyBjb252ZXJnZQogICAgICAgIHdlbGwgd2hlbiBhY2NlbGVyYXRlZC4KICAgICAgICAiIiIKICAgICAgICAjIFRPRE8gdGhlIHJhbmdlcyBhcmUgYSBiaXQgdG9vIGNvbnNlcnZhdGl2ZSBhbmQgdGhlIHRvbGVyYW5jZXMKICAgICAgICAjIHZlcnkgaGlnaC4gVGhpcyBpcyB0byBtYWtlIHRoZSB0ZXN0cyBwYXNzICgjMiksIGJ1dCBpcyBpdAogICAgICAgICMgcG9zc2libGUgdG8gZ2V0IGJldHRlciBlc3RpbWF0ZXMgb24gdGhlIGVycm9yIGJvdW5kcz8KICAgICAgICBsc3QgPSBsaW1pdCArIGluaXRpYWwgKiBucC5leHAoLXJhdGUgKiBucC5hcnJheShyYW5nZSgxMikpKQogICAgICAgIGFjY2VsZXJhdGVkX2xzdCA9IGFjY2VsZXJhdGUobHN0KQogICAgICAgIG5wLnRlc3RpbmcuYXNzZXJ0X2FsbGNsb3NlKAogICAgICAgICAgICBhY2NlbGVyYXRlZF9sc3RbLTFdLCBbbGltaXRdLCBhdG9sPTEvcmF0ZSoqMgogICAgICAgICkKCiAgICBAZ2l2ZW4oc3QuZmxvYXRzKGFsbG93X2luZmluaXR5PUZhbHNlLCBhbGxvd19uYW49RmFsc2UpKQogICAgZGVmIHRlc3RfaGFuZGxlc19jb25zdGFudF9zZXF1ZW5jZShzZWxmLCB2YWwpOgogICAgICAgIGxzdCA9IFt2YWwsIHZhbCwgdmFsXQogICAgICAgIGFjY2VsZXJhdGVkX2xzdCA9IGFjY2VsZXJhdGUobHN0KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWNjZWxlcmF0ZWRfbHN0LCBbdmFsXSkKCiAgICBkZWYgdGVzdF9mb3J3YXJkX2RpZmZlcmVuY2VzKHNlbGYpOgogICAgICAgIHhzID0gWzEsIDQsIDksIDE2XQogICAgICAgIHR4cywgZHhzLCBkMnhzID0gc2Vjb25kX2RpZmZlcmVuY2VzKHhzLCBkaXJlY3Rpb249J2ZvcndhcmQnKQogICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKFsxLCA0XSwgbGlzdCh0eHMpKQogICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKFszLCA1XSwgbGlzdChkeHMpKQogICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKFsyLCAyXSwgbGlzdChkMnhzKSkKCiAgICBkZWYgdGVzdF9jZW50cmFsX2RpZmZlcmVuY2VzKHNlbGYpOgogICAgICAgIHhzID0gWzEsIDQsIDksIDE2XQogICAgICAgIHR4cywgZHhzLCBkMnhzID0gc2Vjb25kX2RpZmZlcmVuY2VzKHhzLCBkaXJlY3Rpb249J2NlbnRyYWwnKQogICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKFs0LCA5XSwgbGlzdCh0eHMpKQogICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKFs0LCA2XSwgbGlzdChkeHMpKQogICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKFsyLCAyXSwgbGlzdChkMnhzKSkKCiAgICBkZWYgdGVzdF9jZW50cmFsX2RpZmZlcmVuY2VzX2hhdmVfZXhwZWN0ZWRfbGVuZ3RocyhzZWxmKToKICAgICAgICB4cyA9IG5wLnJhbmRvbS5yYW5kKDgpCiAgICAgICAgYXhzID0gYWNjZWxlcmF0ZSh4cywgZGlyZWN0aW9uPSdjZW50cmFsJykKICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwoKDYsKSwgYXhzLnNoYXBlKQoKICAgIGRlZiB0ZXN0X2ZvcndhcmRfZGlmZmVyZW5jZXNfaGF2ZV9leHBlY3RlZF9sZW5ndGhzKHNlbGYpOgogICAgICAgIHhzID0gbnAucmFuZG9tLnJhbmQoOCkKICAgICAgICBheHMgPSBhY2NlbGVyYXRlKHhzLCBkaXJlY3Rpb249J2ZvcndhcmQnKQogICAgICAgIHNlbGYuYXNzZXJ0VHVwbGVFcXVhbCgoNiwpLCBheHMuc2hhcGUpCgogICAgQHBhdGNoKCdhaXRrZW5zLnNlY29uZF9kaWZmZXJlbmNlcycpCiAgICBkZWYgdGVzdF9kZWZhdWx0X2lzX2ZvcndhcmRfZGlmZmVyZW5jZXMoc2VsZiwgbSk6CiAgICAgICAgbS5yZXR1cm5fdmFsdWUgPSAobnAuYXJyYXkoW10pLCBucC5hcnJheShbXSksIG5wLmFycmF5KFtdKSkKICAgICAgICB4cyA9IG5wLnJhbmRvbS5yYW5kKDgpCiAgICAgICAgYXhzID0gYWNjZWxlcmF0ZSh4cykgICMgbm90IHNwZWNpZnlpbmcgZGlyZWN0aW9uCiAgICAgICAgbS5hc3NlcnRfY2FsbGVkX29uY2UoKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2ZvcndhcmQnLCBtLmNhbGxfYXJncy5rd2FyZ3NbJ2RpcmVjdGlvbiddKQoKICAgIEBwYXJhbWV0ZXJpemVkLmV4cGFuZChbKDAsKSwgKC0xLCksICgwLjUsKSwgKDEuLCldKQogICAgZGVmIHRlc3RfcmVqZWN0c19pbnZhbGlkX2l0ZXJhdGlvbnMoc2VsZiwgaXQpOgogICAgICAgIHhzID0gWzAsIDAsIDBdCiAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICBhY2NlbGVyYXRlKHhzLCBpdGVyYXRpb25zPWl0KQoKICAgIGRlZiB0ZXN0X211bHRpcGxlX2l0ZXJhdGlvbnMoc2VsZik6CiAgICAgICAgeHMgPSBbMTAwLCA1MCwgMjAsIDEwLCA1LCAyLCAxXQogICAgICAgIGFjYzEgPSBhY2NlbGVyYXRlKHhzKQogICAgICAgIG5wLnRlc3RpbmcuYXNzZXJ0X2FsbGNsb3NlKGFjYzEsIFstMjUuLCA1LiwgMC4sIC0yLjUsIDAuNV0pCiAgICAgICAgYWNjMiA9IGFjY2VsZXJhdGUoeHMsIGl0ZXJhdGlvbnM9MikKICAgICAgICBucC50ZXN0aW5nLmFzc2VydF9hbGxjbG9zZShhY2MyLCBbIDAuNzE0Mjg1NzEsIC01LiwgLTEuMTM2MzYzNjRdKQogICAgICAgIGFjYzMgPSBhY2NlbGVyYXRlKHhzLCBpdGVyYXRpb25zPTMpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBucC50ZXN0aW5nLmFzc2VydF9hbGxjbG9zZShhY2MzLCBbLTIuNjk0OTE1MjVdKQoKPHxmaW1fZW5kfD4="]
["eca5f619c976d98f589c3a171872fbc7a4c0d47d-4","eca5f619c976d98f589c3a171872fbc7a4c0d47d","PHxmaW1fcHJlZml4fD4KZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBwYXRjaAoKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gaHlwb3RoZXNpcyBpbXBvcnQgZ2l2ZW4sIHN0cmF0ZWdpZXMgYXMgc3QKZnJvbSBwYXJhbWV0ZXJpemVkIGltcG9ydCBwYXJhbWV0ZXJpemVkCgpmcm9tIGFpdGtlbnMgaW1wb3J0IGFjY2VsZXJhdGUsIHNlY29uZF9kaWZmZXJlbmNlcwoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgVGVzdEFpdGtlbnMoVGVzdENhc2UpOgogICAgQGdpdmVuKAogICAgICAgIHN0LmZsb2F0cyhtaW5fdmFsdWU9MSwgbWF4X3ZhbHVlPTFlOSksCiAgICAgICAgc3QuZmxvYXRzKG1pbl92YWx1ZT0tMSwgbWF4X3ZhbHVlPTEpLmZpbHRlcigKPHxmaW1fZW5kfD4="]
["eca5f619c976d98f589c3a171872fbc7a4c0d47d-5","eca5f619c976d98f589c3a171872fbc7a4c0d47d","PHxmaW1fcHJlZml4fD4KZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBwYXRjaAoKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gaHlwb3RoZXNpcyBpbXBvcnQgZ2l2ZW4sIHN0cmF0ZWdpZXMgYXMgc3QKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIHBhcmFtZXRlcml6ZWQgaW1wb3J0IHBhcmFtZXRlcml6ZWQKCmZyb20gYWl0a2VucyBpbXBvcnQgYWNjZWxlcmF0ZSwgc2Vjb25kX2RpZmZlcmVuY2VzCgo8fGZpbV9lbmR8Pg=="]
["d45a61bc31a2ec91646d6adf307e20cf9c4016d7-1","d45a61bc31a2ec91646d6adf307e20cf9c4016d7","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiClRoaXMgaXMgcGFydCBvZiBXZWJTY291dCBzb2Z0d2FyZQpEb2NzIEVOOiBodHRwOi8vaGFjazRzZWMucHJvL3dpa2kvaW5kZXgucGhwL1dlYlNjb3V0X2VuCkRvY3MgUlU6IGh0dHA6Ly9oYWNrNHNlYy5wcm8vd2lraS9pbmRleC5waHAvV2ViU2NvdXQKTGljZW5zZTogTUlUCkNvcHlyaWdodCAoYykgQW50b24gS3V6bWluIDxodHRwOi8vYW50b24ta3V6bWluLnJ1PiAocnUpIDxodHRwOi8vYW50b24ta3V6bWluLnBybz4gKGVuKQoKQWJzdHJhY3QgbW9kdWxlIHBhcmFtcyBjbGFzcywgY29udGFpbnMgYWxsIHBvc3NpYmxlIHBhcmFtcyBkZXNjcmlwdGlvbgoiIiIKCmZyb20gY2xhc3Nlcy5rZXJuZWwuV1NPcHRpb24gaW1wb3J0IFdTT3B0aW9uCmZyb20gY2xhc3Nlcy5rZXJuZWwuV1NFeGNlcHRpb24gaW1wb3J0IFdTRXhjZXB0aW9uCmZyb20gY2xhc3Nlcy5SZWdpc3RyeSBpbXBvcnQgUmVnaXN0cnkKCgpjbGFzcyBBYnN0cmFjdE1vZHVsZVBhcmFtczoKICAgIG9wdGlvbnMgPSB7fQoKICAgIGFsbF9vcHRpb25zID0gewogICAgICAgICJ0ZXN0IjogV1NPcHRpb24oCiAgICAgICAgICAgICJ0ZXN0IiwKICAgICAgICAgICAgIlRlc3QgcnVuIHdpdGggcmVzdWx0cyBkdW1wIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tdGVzdCddCiAgICAgICAgKSwKICAgICAgICAiZm9sbG93LXJlZGlyZWN0cyI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZm9sbG93LXJlZGlyZWN0cyIsCiAgICAgICAgICAgICJGb2xsb3cgcmVkaXJlY3RzIGZyb20gc2VydmVyIHJlc3BvbnNlIiwKICAgICAgICAgICAgIjAiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWZvbGxvdy1yZWRpcmVjdHMnXQogICAgICAgICksCiAgICAgICAgInhtbC1yZXBvcnQiOiBXU09wdGlvbigKICAgICAgICAgICAgInhtbC1yZXBvcnQiLAogICAgICAgICAgICAiWE1MIHJlcG9ydCBmaWxlIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0teG1sLXJlcG9ydCddCiAgICAgICAgKSwKICAgICAgICAidGhyZWFkcyI6IFdTT3B0aW9uKAogICAgICAgICAgICAidGhyZWFkcyIsCiAgICAgICAgICAgICJUaHJlYWRzIGNvdW50LCBkZWZhdWx0IDEwIiwKICAgICAgICAgICAgaW50KFJlZ2lzdHJ5KCkuZ2V0KCdjb25maWcnKVsnbWFpbiddWydkZWZhdWx0X3RocmVhZHMnXSksCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tdGhyZWFkcyddCiAgICAgICAgKSwKICAgICAgICAidGVtcGxhdGUiOiBXU09wdGlvbigKICAgICAgICAgICAgInRlbXBsYXRlIiwKICAgICAgICAgICAgIlRlbXBsYXRlIGZvciBzY2FuICh7MH0gYXMgbWFyayBzeW1ib2wpIi5mb3JtYXQoUmVnaXN0cnkoKS5nZXQoJ2NvbmZpZycpWydtYWluJ11bJ3N0YW5kYXJ0X21zeW1ib2wnXSksCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBbJy0tdGVtcGxhdGUnXQogICAgICAgICksCiAgICAgICAgIm1zeW1ib2wiOiBXU09wdGlvbigKICAgICAgICAgICAgIm1zeW1ib2wiLAogICAgICAgICAgICAiU3ltYm9sIG9mIG1hc2sgcG9zaXRpb24gaW4gdGFyZ2V0IFVSTCAoZGVmYXVsdCB7MH0pIgogICAgICAgICAgICAgICAgLmZvcm1hdChSZWdpc3RyeSgpLmdldCgnY29uZmlnJylbJ21haW4nXVsnc3RhbmRhcnRfbXN5bWJvbCddKSwKICAgICAgICAgICAgUmVnaXN0cnkoKS5nZXQoJ2NvbmZpZycpWydtYWluJ11bJ3N0YW5kYXJ0X21zeW1ib2wnXSwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1tc3ltYm9sJ10KICAgICAgICApLAogICAgICAgICJtZXRob2QiOiBXU09wdGlvbigKICAgICAgICAgICAgIm1ldGhvZCIsCiAgICAgICAgICAgICJSZXF1ZXN0cyBtZXRob2QgKGRlZmF1bHQgLSBHRVQpIiwKICAgICAgICAgICAgIkdFVCIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tbWV0aG9kJ10KICAgICAgICApLAogICAgICAgICJicnV0ZWZvcmNlLW1ldGhvZCI6IFdTT3B0aW9uKAogICAgICAgICAgICAiYnJ1dGVmb3JjZS1tZXRob2QiLAogICAgICAgICAgICAiUmVxdWVzdHMgbWV0aG9kIChkZWZhdWx0IC0gUE9TVCkiLAogICAgICAgICAgICAiUE9TVCIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tYnJ1dGVmb3JjZS1tZXRob2QnXQogICAgICAgICksCiAgICAgICAgInBhcmFtcy1tZXRob2QiOiBXU09wdGlvbigKICAgICAgICAgICAgInBhcmFtcy1tZXRob2QiLAogICAgICAgICAgICAiUmVxdWVzdHMgbWV0aG9kIChkZWZhdWx0IC0gR0VUKSIsCiAgICAgICAgICAgICJHRVQiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXBhcmFtcy1tZXRob2QnXQogICAgICAgICksCiAgICAgICAgImRpY3QiOiBXU09wdGlvbigKICAgICAgICAgICAgImRpY3QiLAogICAgICAgICAgICAiRGljdGlvbmFyeSBmb3Igd29yayIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBbJy0tZGljdCddCiAgICAgICAgKSwKICAgICAgICAibWFzayI6IFdTT3B0aW9uKAogICAgICAgICAgICAibWFzayIsCiAgICAgICAgICAgICJNYXNrIGZvciB3b3JrIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIFRydWUsCiAgICAgICAgICAgIFsnLS1tYXNrJ10KICAgICAgICApLAogICAgICAgICJjb21iaW5lLXRlbXBsYXRlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJjb21iaW5lLXRlbXBsYXRlIiwKICAgICAgICAgICAgIlRlbXBsYXRlIGZvciBjb21iaW5lIiwKPHxmaW1faG9sZXw+CiAgICAgICAgKSwKICAgICAgICAiZm91bmQtcmUiOiBXU09wdGlvbigKICAgICAgICAgICAgImZvdW5kLXJlIiwKICAgICAgICAgICAgIlJlZ2V4IGZvciBkZXRlY3QgJ0ZvdW5kJyByZXNwb25zZSAoMjAwKSIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWZvdW5kLXJlJ10KICAgICAgICApLAogICAgICAgICJub3QtZm91bmQtcmUiOiBXU09wdGlvbigKICAgICAgICAgICAgIm5vdC1mb3VuZC1yZSIsCiAgICAgICAgICAgICJSZWdleCBmb3IgZGV0ZWN0ICdOb3QgZm91bmQnIHJlc3BvbnNlICg0MDQpIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tbm90LWZvdW5kLXJlJ10KICAgICAgICApLAogICAgICAgICJodHRwLW5vdC1mb3VuZC1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiaHR0cC1ub3QtZm91bmQtcmUiLAogICAgICAgICAgICAiUmVnZXggZm9yIGRldGVjdCAnTm90IGZvdW5kJyByZXNwb25zZSAoNDA0KSIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWh0dHAtbm90LWZvdW5kLXJlJ10KICAgICAgICApLAogICAgICAgICJub3QtZm91bmQtZXgiOiBXU09wdGlvbigKICAgICAgICAgICAgIm5vdC1mb3VuZC1leCIsCiAgICAgICAgICAgICJQaHJhc2UgZm9yIGRldGVjdCAnTm90IGZvdW5kJyBleGNlcHRpb24gKHBlcmNlaXZlZCBhcyA0MDQpIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tbm90LWZvdW5kLWV4J10KICAgICAgICApLAogICAgICAgICJub3QtZm91bmQtc2l6ZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAibm90LWZvdW5kLXNpemUiLAogICAgICAgICAgICAiU2l6ZSBpbiBieXRlcyBmb3IgZGV0ZWN0ICdOb3QgZm91bmQnIHJlc3BvbnNlICg0MDQpIiwKICAgICAgICAgICAgIi0xIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1ub3QtZm91bmQtc2l6ZSddCiAgICAgICAgKSwKICAgICAgICAibm90LWZvdW5kLWNvZGVzIjogV1NPcHRpb24oCiAgICAgICAgICAgICJub3QtZm91bmQtY29kZXMiLAogICAgICAgICAgICAiQ3VzdG9tIGNvZGVzIGZvciBkZXRlY3QgJ05vdCBmb3VuZCcgcmVzcG9uc2UgKDQwNCkiLAogICAgICAgICAgICAiNDA0IiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1ub3QtZm91bmQtY29kZXMnXQogICAgICAgICksCiAgICAgICAgImlnbm9yZS13b3Jkcy1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiaWdub3JlLXdvcmRzLXJlIiwKICAgICAgICAgICAgIlJlZ2V4IGZvciBpZ25vcmUgc29tZSB3b3JkcyBmcm9tIGRpY3Qgb3IgbWFzayIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWlnbm9yZS13b3Jkcy1yZSddCiAgICAgICAgKSwKICAgICAgICAicmV0ZXN0LWNvZGVzIjogV1NPcHRpb24oCiAgICAgICAgICAgICJyZXRlc3QtY29kZXMiLAogICAgICAgICAgICAiQ3VzdG9tIGNvZGVzIGZvciByZS10ZXN0IG9iamVjdCBhZnRlciA1IHNlYyIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXJldGVzdC1jb2RlcyddCiAgICAgICAgKSwKICAgICAgICAiZGVsYXkiOiBXU09wdGlvbigKICAgICAgICAgICAgImRlbGF5IiwKICAgICAgICAgICAgIkRlbGV5IGZvciBldmVyeSB0aHJlYWQgYmV0d2VlbiByZXF1ZXN0cyAoc2VjcykiLAogICAgICAgICAgICAiMCIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tZGVsYXknXQogICAgICAgICksCiAgICAgICAgInNlbGVuaXVtIjogV1NPcHRpb24oCiAgICAgICAgICAgICJzZWxlbml1bSIsCiAgICAgICAgICAgICJVc2UgU2VsZW5pdW0gZm9yIHNjYW5uaW5nIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tc2VsZW5pdW0nXQogICAgICAgICksCiAgICAgICAgImJyb3dzZXItd2FpdC1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiYnJvd3Nlci13YWl0LXJlIiwKICAgICAgICAgICAgIlJlZ0V4IGZvciBkZXRlY3QgbW9tZW50cyB3aGVuIHNlbGVuaXVtIGJyb3dzZXIgbmVlZCB3YWl0IChkZG9zIGNoZWNrLCBodW1hbiBhY3Rpb24gbmVlZCkiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1icm93c2VyLXdhaXQtcmUnXQogICAgICAgICksCiAgICAgICAgImJyb3dzZXItcmVjcmVhdGUtcmUiOiBXU09wdGlvbigKICAgICAgICAgICAgImJyb3dzZXItcmVjcmVhdGUtcmUiLAogICAgICAgICAgICAiUmVnZXggZm9yIHJlY3JlYXRlIGJyb3dzZXIgd2l0aCBuZXcgcHJveHkiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1icm93c2VyLXJlY3JlYXRlLXJlJ10KICAgICAgICApLAogICAgICAgICJwYXJ0cyI6IFdTT3B0aW9uKAogICAgICAgICAgICAicGFydHMiLAogICAgICAgICAgICAiSG93IG1hbnkgcGFydHMgd2lsbCBiZSBjcmVhdGUgZnJvbSBjdXJyZW50IHNvdXJjZSAoZGljdC9tYXNrKSIsCiAgICAgICAgICAgICIwIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1wYXJ0cyddCiAgICAgICAgKSwKICAgICAgICAicGFydCI6IFdTT3B0aW9uKAogICAgICAgICAgICAicGFydCIsCiAgICAgICAgICAgICJOdW1iZXIgb2YgcGFydCBmb3IgdXNlIGZyb20gLS1wYXJ0cyIsCiAgICAgICAgICAgICIwIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1wYXJ0J10KICAgICAgICApLAogICAgICAgICJwcm94aWVzIjogV1NPcHRpb24oCiAgICAgICAgICAgICJwcm94aWVzIiwKICAgICAgICAgICAgIkZpbGUgd2l0aCBsaXN0IG9mIHByb3hpZXMiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1wcm94aWVzJ10KICAgICAgICApLAogICAgICAgICJodHRwLXByb3hpZXMiOiBXU09wdGlvbigKICAgICAgICAgICAgImh0dHAtcHJveGllcyIsCiAgICAgICAgICAgICJGaWxlIHdpdGggbGlzdCBvZiBwcm94aWVzIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0taHR0cC1wcm94aWVzJ10KICAgICAgICApLAogICAgICAgICJoZWFkZXJzLWZpbGUiOiBXU09wdGlvbigKICAgICAgICAgICAgImhlYWRlcnMtZmlsZSIsCiAgICAgICAgICAgICJGaWxlIHdpdGggbGlzdCBvZiBIVFRQIGhlYWRlcnMiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1oZWFkZXJzLWZpbGUnXQogICAgICAgICksCiAgICAgICAgImRucy1wcm90b2NvbCI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZG5zLXByb3RvY29sIiwKICAgICAgICAgICAgIlRDUCBvciBVRFAgY29ubmVjdGlvbiB0byBETlMgc2VydmVyIChkZWZhdWx0IC0gYXV0bykiLAogICAgICAgICAgICAiYXV0byIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tZG5zLXByb3RvY29sJ10KICAgICAgICApLAogICAgICAgICJodHRwLXByb3RvY29sIjogV1NPcHRpb24oCiAgICAgICAgICAgICJodHRwLXByb3RvY29sIiwKICAgICAgICAgICAgIlByb3RvY29sIGh0dHAgb3IgaHR0cHMgKGRlZmF1bHQgLSBodHRwKSIsCiAgICAgICAgICAgICJodHRwIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1odHRwLXByb3RvY29sJ10KICAgICAgICApLAogICAgICAgICJyZXRlc3QtcmUiOiBXU09wdGlvbigKICAgICAgICAgICAgInJldGVzdC1yZSIsCiAgICAgICAgICAgICJSZWdFeCBpbiByZXNwb25zZSBmb3IgcmV0ZXN0IiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tcmV0ZXN0LXJlJ10KICAgICAgICApLAogICAgICAgICJodHRwLXJldGVzdC1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiaHR0cC1yZXRlc3QtcmUiLAogICAgICAgICAgICAiUmVnRXggZm9yIGNoZWNrIHJldGVzdCBpcyBuZWVkIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0taHR0cC1yZXRlc3QtcmUnXQogICAgICAgICksCiAgICAgICAgInpvbmUiOiBXU09wdGlvbigKICAgICAgICAgICAgInpvbmUiLAogICAgICAgICAgICAiWm9uZSBmb3IgY2hlY2sgKEEvQ05BTUUpIiwKICAgICAgICAgICAgIkEiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXpvbmUnXQogICAgICAgICksCiAgICAgICAgImlnbm9yZS1pcCI6IFdTT3B0aW9uKAogICAgICAgICAgICAiaWdub3JlLWlwIiwKICAgICAgICAgICAgIlRoaXMgSVAtYWRkcmVzcyBtdXN0IGJlIGlnbm9yZSBpbiBwb3NpdGl2ZSBkZXRlY3Rpb25zIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0taWdub3JlLWlwJ10KICAgICAgICApLAogICAgICAgICJvbmx5LW9uZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAib25seV9vbmUiLAogICAgICAgICAgICAib25seSBvbmUiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1vbmx5LW9uZSddCiAgICAgICAgKSwKICAgICAgICAidXJsIjogV1NPcHRpb24oCiAgICAgICAgICAgICJ1cmwiLAogICAgICAgICAgICAiVVJMIGZvciB3b3JrIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIFRydWUsCiAgICAgICAgICAgIFsnLS11cmwnXQogICAgICAgICksCiAgICAgICAgInVybHMtZmlsZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAidXJscy1maWxlIiwKICAgICAgICAgICAgIkZpbGUgd2l0aCBsaXN0IG9mIFVSTHMiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS11cmxzLWZpbGUnXQogICAgICAgICksCiAgICAgICAgImlnbm9yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiaWdub3JlIiwKICAgICAgICAgICAgImlnbm9yZSByZWdleHAiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1pZ25vcmUnXQogICAgICAgICksCiAgICAgICAgImhvc3QiOiBXU09wdGlvbigKICAgICAgICAgICAgImhvc3QiLAogICAgICAgICAgICAiVHJhZ2V0IGhvc3QgZm9yIHNjYW4iLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgVHJ1ZSwKICAgICAgICAgICAgWyctLWhvc3QnXQogICAgICAgICksCiAgICAgICAgImRucyI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZG5zIiwKICAgICAgICAgICAgIkROUyBzZXJ2ZXIgZm9yIGRvbWFpbnMgc2VhcmNoIiwKICAgICAgICAgICAgIjguOC44LjgiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWRucyddCiAgICAgICAgKSwKICAgICAgICAiZmFsc2UtcmUiOiBXU09wdGlvbigKICAgICAgICAgICAgImZhbHNlLXJlIiwKICAgICAgICAgICAgIlJlZ0V4IGZvciBkZXRlY3QgZmFsc2UgYW5zd2VyIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tZmFsc2UtcmUnXQogICAgICAgICksCiAgICAgICAgImZhbHNlLXNpemUiOiBXU09wdGlvbigKICAgICAgICAgICAgImZhbHNlLXNpemUiLAogICAgICAgICAgICAiUmVzcG9uc2Ugc2l6ZSBmb3IgZGV0ZWN0IGZhbHNlIGFuc3dlciAoYXV0aCBpcyB3cm9uZykiLAogICAgICAgICAgICBOb25lLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWZhbHNlLXNpemUnXQogICAgICAgICksCiAgICAgICAgInRydWUtcmUiOiBXU09wdGlvbigKICAgICAgICAgICAgInRydWUtcmUiLAogICAgICAgICAgICAiUmVnRXggZm9yIGRldGVjdCB0cnVlIGFuc3dlciAoYXV0aCBpcyBnb29kKSIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXRydWUtcmUnXQogICAgICAgICksCiAgICAgICAgInJlbG9hZC1mb3JtLXBhZ2UiOiBXU09wdGlvbigKICAgICAgICAgICAgInJlbG9hZC1mb3JtLXBhZ2UiLAogICAgICAgICAgICAiUmVsb2FkIHBhZ2Ugd2l0aCBmb3JtIGJlZm9yZSBldmVyeSBhdXRoIHJlcXVlc3QiLAogICAgICAgICAgICAiMCIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tcmVsb2FkLWZvcm0tcGFnZSddCiAgICAgICAgKSwKICAgICAgICAiY29uZi1zdHIiOiBXU09wdGlvbigKICAgICAgICAgICAgImNvbmYtc3RyIiwKICAgICAgICAgICAgIlN0cmluZyB3aXRoIGJydXRlciBjb25maWciLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1jb25mLXN0ciddCiAgICAgICAgKSwKICAgICAgICAiY29uZi1maWxlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJjb25mLWZpbGUiLAogICAgICAgICAgICAiRmlsZSB3aXRoIGJydXRlciBjb25maWcgKHNlbGVuaXVtKSIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWNvbmYtZmlsZSddCiAgICAgICAgKSwKICAgICAgICAiZmlyc3Qtc3RvcCI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZmlyc3Qtc3RvcCIsCiAgICAgICAgICAgICJTdG9wIGFmdGVyIGZpcnN0IHBhc3N3b3JkIGZvdW5kIiwKICAgICAgICAgICAgIjAiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWZpcnN0LXN0b3AnXQogICAgICAgICksCiAgICAgICAgImxvZ2luIjogV1NPcHRpb24oCiAgICAgICAgICAgICJsb2dpbiIsCiAgICAgICAgICAgICJUYXJnZXQgbG9naW4iLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgVHJ1ZSwKICAgICAgICAgICAgWyctLWxvZ2luJ10KICAgICAgICApLAogICAgICAgICJwYXNzLW1pbi1sZW4iOiBXU09wdGlvbigKICAgICAgICAgICAgInBhc3MtbWluLWxlbiIsCiAgICAgICAgICAgICJQYXNzd29yZCBtaW4gbGVuZ3RoIiwKICAgICAgICAgICAgIjAiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXBhc3MtbWluLWxlbiddCiAgICAgICAgKSwKICAgICAgICAicGFzcy1tYXgtbGVuIjogV1NPcHRpb24oCiAgICAgICAgICAgICJwYXNzLW1heC1sZW4iLAogICAgICAgICAgICAiUGFzc3dvcmQgbWF4IGxlbmd0aCIsCiAgICAgICAgICAgICIwIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1wYXNzLW1heC1sZW4nXQogICAgICAgICksCiAgICAgICAgImlwIjogV1NPcHRpb24oCiAgICAgICAgICAgICJpcCIsCiAgICAgICAgICAgICJUcmFnZXQgSVAiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgVHJ1ZSwKICAgICAgICAgICAgWyctLWlwJ10KICAgICAgICApLAogICAgICAgICJtYXgtcGFyYW1zLWxlbmd0aCI6IFdTT3B0aW9uKAogICAgICAgICAgICAibWF4LXBhcmFtcy1sZW5ndGgiLAogICAgICAgICAgICAiTWF4aW11bSBzdHJpbmcgb2YgcGFyYW1zIGxlbmd0aCIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBbJy0tbWF4LXBhcmFtcy1sZW5ndGgnXQogICAgICAgICksCiAgICAgICAgInZhbHVlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJ2YWx1ZSIsCiAgICAgICAgICAgICJWYWx1ZSBmb3IgcGFyYW1zLCBkZWZhdWx0IDEiLAogICAgICAgICAgICAiMSIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tdmFsdWUnXQogICAgICAgICksCiAgICAgICAgImRpc2NvdmVyeS1leHRzIjogV1NPcHRpb24oCiAgICAgICAgICAgICJkaXNjb3ZlcnktZXh0cyIsCiAgICAgICAgICAgICJFeHRzLCBjb21tYSBzZXBhcmF0ZWQsIGZvciBnZW5lcmF0ZSBkaXNjb3ZlcnkgZmlsZW5hbWVzIiwKICAgICAgICAgICAgInBocCxodG1sLGpzLGxvZyx0eHQsemlwLHRhcix0YXIuZ3osdGFyLmJ6Mixneix6aXAsN3oscmFyIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1kaXNjb3ZlcnktZXh0cyddCiAgICAgICAgKSwKICAgICAgICAidG9yIjogV1NPcHRpb24oCiAgICAgICAgICAgICJ0b3IiLAogICAgICAgICAgICAiVXNlIFRPUiIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXRvciddCiAgICAgICAgKSwKICAgIH0KCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5hZGRfb3B0aW9ucygKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ3RvcicsCiAgICAgICAgICAgICAgICAndGVzdCcsCiAgICAgICAgICAgICAgICAneG1sLXJlcG9ydCcsCiAgICAgICAgICAgICAgICAndGhyZWFkcycsCiAgICAgICAgICAgICAgICAncGFydHMnLAogICAgICAgICAgICAgICAgJ3BhcnQnLAogICAgICAgICAgICAgXQogICAgICAgICkKCiAgICBkZWYgZ2V0X29wdGlvbnMoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYub3B0aW9ucwoKICAgIGRlZiBhZGRfb3B0aW9ucyhzZWxmLCBuYW1lc19saXN0KToKICAgICAgICBmb3IgbmFtZSBpbiBuYW1lc19saXN0OgogICAgICAgICAgICBzZWxmLmFkZF9vcHRpb24obmFtZSkKCiAgICBkZWYgZGVsX29wdGlvbihzZWxmLCBuYW1lKToKICAgICAgICBkZWwgc2VsZi5vcHRpb25zW25hbWVdCgogICAgZGVmIGFkZF9vcHRpb24oc2VsZiwgaW50ZXJuYWxfbmFtZSwgZXh0ZXJuYWxfbmFtZT1Ob25lKToKICAgICAgICBpZiBpbnRlcm5hbF9uYW1lIG5vdCBpbiBzZWxmLmFsbF9vcHRpb25zOgogICAgICAgICAgICByYWlzZSBXU0V4Y2VwdGlvbigiT3B0aW9uICd7MH0nIG5vdCBleGlzdHMiLmZvcm1hdChpbnRlcm5hbF9uYW1lKSkKCiAgICAgICAgaWYgZXh0ZXJuYWxfbmFtZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgb3B0aW9uID0gc2VsZi5hbGxfb3B0aW9uc1tpbnRlcm5hbF9uYW1lXQogICAgICAgICAgICBvcHRpb24uZmxhZ3MgPSBbJy0tJyArIGV4dGVybmFsX25hbWVdCiAgICAgICAgICAgIHNlbGYub3B0aW9uc1tleHRlcm5hbF9uYW1lXSA9IG9wdGlvbgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYub3B0aW9uc1tpbnRlcm5hbF9uYW1lXSA9IHNlbGYuYWxsX29wdGlvbnNbaW50ZXJuYWxfbmFtZV0KPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIFRydWUsCiAgICAgICAgICAgIFsnLS1jb21iaW5lLXRlbXBsYXRlJ10KPHxmaW1fZW5kfD4="]
["d45a61bc31a2ec91646d6adf307e20cf9c4016d7-2","d45a61bc31a2ec91646d6adf307e20cf9c4016d7","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiClRoaXMgaXMgcGFydCBvZiBXZWJTY291dCBzb2Z0d2FyZQpEb2NzIEVOOiBodHRwOi8vaGFjazRzZWMucHJvL3dpa2kvaW5kZXgucGhwL1dlYlNjb3V0X2VuCkRvY3MgUlU6IGh0dHA6Ly9oYWNrNHNlYy5wcm8vd2lraS9pbmRleC5waHAvV2ViU2NvdXQKTGljZW5zZTogTUlUCkNvcHlyaWdodCAoYykgQW50b24gS3V6bWluIDxodHRwOi8vYW50b24ta3V6bWluLnJ1PiAocnUpIDxodHRwOi8vYW50b24ta3V6bWluLnBybz4gKGVuKQoKQWJzdHJhY3QgbW9kdWxlIHBhcmFtcyBjbGFzcywgY29udGFpbnMgYWxsIHBvc3NpYmxlIHBhcmFtcyBkZXNjcmlwdGlvbgoiIiIKCmZyb20gY2xhc3Nlcy5rZXJuZWwuV1NPcHRpb24gaW1wb3J0IFdTT3B0aW9uCmZyb20gY2xhc3Nlcy5rZXJuZWwuV1NFeGNlcHRpb24gaW1wb3J0IFdTRXhjZXB0aW9uCmZyb20gY2xhc3Nlcy5SZWdpc3RyeSBpbXBvcnQgUmVnaXN0cnkKCgpjbGFzcyBBYnN0cmFjdE1vZHVsZVBhcmFtczoKICAgIG9wdGlvbnMgPSB7fQoKICAgIGFsbF9vcHRpb25zID0gewogICAgICAgICJ0ZXN0IjogV1NPcHRpb24oCiAgICAgICAgICAgICJ0ZXN0IiwKICAgICAgICAgICAgIlRlc3QgcnVuIHdpdGggcmVzdWx0cyBkdW1wIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tdGVzdCddCiAgICAgICAgKSwKICAgICAgICAiZm9sbG93LXJlZGlyZWN0cyI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZm9sbG93LXJlZGlyZWN0cyIsCiAgICAgICAgICAgICJGb2xsb3cgcmVkaXJlY3RzIGZyb20gc2VydmVyIHJlc3BvbnNlIiwKICAgICAgICAgICAgIjAiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWZvbGxvdy1yZWRpcmVjdHMnXQogICAgICAgICksCiAgICAgICAgInhtbC1yZXBvcnQiOiBXU09wdGlvbigKICAgICAgICAgICAgInhtbC1yZXBvcnQiLAogICAgICAgICAgICAiWE1MIHJlcG9ydCBmaWxlIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0teG1sLXJlcG9ydCddCiAgICAgICAgKSwKICAgICAgICAidGhyZWFkcyI6IFdTT3B0aW9uKAogICAgICAgICAgICAidGhyZWFkcyIsCiAgICAgICAgICAgICJUaHJlYWRzIGNvdW50LCBkZWZhdWx0IDEwIiwKICAgICAgICAgICAgaW50KFJlZ2lzdHJ5KCkuZ2V0KCdjb25maWcnKVsnbWFpbiddWydkZWZhdWx0X3RocmVhZHMnXSksCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tdGhyZWFkcyddCiAgICAgICAgKSwKICAgICAgICAidGVtcGxhdGUiOiBXU09wdGlvbigKICAgICAgICAgICAgInRlbXBsYXRlIiwKICAgICAgICAgICAgIlRlbXBsYXRlIGZvciBzY2FuICh7MH0gYXMgbWFyayBzeW1ib2wpIi5mb3JtYXQoUmVnaXN0cnkoKS5nZXQoJ2NvbmZpZycpWydtYWluJ11bJ3N0YW5kYXJ0X21zeW1ib2wnXSksCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBbJy0tdGVtcGxhdGUnXQogICAgICAgICksCiAgICAgICAgIm1zeW1ib2wiOiBXU09wdGlvbigKICAgICAgICAgICAgIm1zeW1ib2wiLAogICAgICAgICAgICAiU3ltYm9sIG9mIG1hc2sgcG9zaXRpb24gaW4gdGFyZ2V0IFVSTCAoZGVmYXVsdCB7MH0pIgogICAgICAgICAgICAgICAgLmZvcm1hdChSZWdpc3RyeSgpLmdldCgnY29uZmlnJylbJ21haW4nXVsnc3RhbmRhcnRfbXN5bWJvbCddKSwKICAgICAgICAgICAgUmVnaXN0cnkoKS5nZXQoJ2NvbmZpZycpWydtYWluJ11bJ3N0YW5kYXJ0X21zeW1ib2wnXSwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1tc3ltYm9sJ10KICAgICAgICApLAogICAgICAgICJtZXRob2QiOiBXU09wdGlvbigKICAgICAgICAgICAgIm1ldGhvZCIsCiAgICAgICAgICAgICJSZXF1ZXN0cyBtZXRob2QgKGRlZmF1bHQgLSBHRVQpIiwKICAgICAgICAgICAgIkdFVCIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tbWV0aG9kJ10KICAgICAgICApLAogICAgICAgICJicnV0ZWZvcmNlLW1ldGhvZCI6IFdTT3B0aW9uKAogICAgICAgICAgICAiYnJ1dGVmb3JjZS1tZXRob2QiLAogICAgICAgICAgICAiUmVxdWVzdHMgbWV0aG9kIChkZWZhdWx0IC0gUE9TVCkiLAogICAgICAgICAgICAiUE9TVCIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tYnJ1dGVmb3JjZS1tZXRob2QnXQogICAgICAgICksCiAgICAgICAgInBhcmFtcy1tZXRob2QiOiBXU09wdGlvbigKICAgICAgICAgICAgInBhcmFtcy1tZXRob2QiLAogICAgICAgICAgICAiUmVxdWVzdHMgbWV0aG9kIChkZWZhdWx0IC0gR0VUKSIsCiAgICAgICAgICAgICJHRVQiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXBhcmFtcy1tZXRob2QnXQogICAgICAgICksCiAgICAgICAgImRpY3QiOiBXU09wdGlvbigKICAgICAgICAgICAgImRpY3QiLAogICAgICAgICAgICAiRGljdGlvbmFyeSBmb3Igd29yayIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBbJy0tZGljdCddCiAgICAgICAgKSwKICAgICAgICAibWFzayI6IFdTT3B0aW9uKAogICAgICAgICAgICAibWFzayIsCiAgICAgICAgICAgICJNYXNrIGZvciB3b3JrIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIFRydWUsCiAgICAgICAgICAgIFsnLS1tYXNrJ10KICAgICAgICApLAogICAgICAgICJjb21iaW5lLXRlbXBsYXRlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJjb21iaW5lLXRlbXBsYXRlIiwKICAgICAgICAgICAgIlRlbXBsYXRlIGZvciBjb21iaW5lIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIFRydWUsCiAgICAgICAgICAgIFsnLS1jb21iaW5lLXRlbXBsYXRlJ10KICAgICAgICApLAogICAgICAgICJmb3VuZC1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZm91bmQtcmUiLAogICAgICAgICAgICAiUmVnZXggZm9yIGRldGVjdCAnRm91bmQnIHJlc3BvbnNlICgyMDApIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tZm91bmQtcmUnXQogICAgICAgICksCiAgICAgICAgIm5vdC1mb3VuZC1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAibm90LWZvdW5kLXJlIiwKICAgICAgICAgICAgIlJlZ2V4IGZvciBkZXRlY3QgJ05vdCBmb3VuZCcgcmVzcG9uc2UgKDQwNCkiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1ub3QtZm91bmQtcmUnXQogICAgICAgICksCiAgICAgICAgImh0dHAtbm90LWZvdW5kLXJlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJodHRwLW5vdC1mb3VuZC1yZSIsCiAgICAgICAgICAgICJSZWdleCBmb3IgZGV0ZWN0ICdOb3QgZm91bmQnIHJlc3BvbnNlICg0MDQpIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0taHR0cC1ub3QtZm91bmQtcmUnXQogICAgICAgICksCiAgICAgICAgIm5vdC1mb3VuZC1leCI6IFdTT3B0aW9uKAogICAgICAgICAgICAibm90LWZvdW5kLWV4IiwKICAgICAgICAgICAgIlBocmFzZSBmb3IgZGV0ZWN0ICdOb3QgZm91bmQnIGV4Y2VwdGlvbiAocGVyY2VpdmVkIGFzIDQwNCkiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1ub3QtZm91bmQtZXgnXQogICAgICAgICksCiAgICAgICAgIm5vdC1mb3VuZC1zaXplIjogV1NPcHRpb24oCiAgICAgICAgICAgICJub3QtZm91bmQtc2l6ZSIsCiAgICAgICAgICAgICJTaXplIGluIGJ5dGVzIGZvciBkZXRlY3QgJ05vdCBmb3VuZCcgcmVzcG9uc2UgKDQwNCkiLAogICAgICAgICAgICAiLTEiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLW5vdC1mb3VuZC1zaXplJ10KICAgICAgICApLAogICAgICAgICJub3QtZm91bmQtY29kZXMiOiBXU09wdGlvbigKICAgICAgICAgICAgIm5vdC1mb3VuZC1jb2RlcyIsCiAgICAgICAgICAgICJDdXN0b20gY29kZXMgZm9yIGRldGVjdCAnTm90IGZvdW5kJyByZXNwb25zZSAoNDA0KSIsCiAgICAgICAgICAgICI0MDQiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLW5vdC1mb3VuZC1jb2RlcyddCiAgICAgICAgKSwKICAgICAgICAiaWdub3JlLXdvcmRzLXJlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJpZ25vcmUtd29yZHMtcmUiLAogICAgICAgICAgICAiUmVnZXggZm9yIGlnbm9yZSBzb21lIHdvcmRzIGZyb20gZGljdCBvciBtYXNrIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0taWdub3JlLXdvcmRzLXJlJ10KICAgICAgICApLAogICAgICAgICJyZXRlc3QtY29kZXMiOiBXU09wdGlvbigKICAgICAgICAgICAgInJldGVzdC1jb2RlcyIsCiAgICAgICAgICAgICJDdXN0b20gY29kZXMgZm9yIHJlLXRlc3Qgb2JqZWN0IGFmdGVyIDUgc2VjIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tcmV0ZXN0LWNvZGVzJ10KICAgICAgICApLAogICAgICAgICJkZWxheSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZGVsYXkiLAogICAgICAgICAgICAiRGVsZXkgZm9yIGV2ZXJ5IHRocmVhZCBiZXR3ZWVuIHJlcXVlc3RzIChzZWNzKSIsCiAgICAgICAgICAgICIwIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1kZWxheSddCiAgICAgICAgKSwKICAgICAgICAic2VsZW5pdW0iOiBXU09wdGlvbigKICAgICAgICAgICAgInNlbGVuaXVtIiwKICAgICAgICAgICAgIlVzZSBTZWxlbml1bSBmb3Igc2Nhbm5pbmciLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1zZWxlbml1bSddCiAgICAgICAgKSwKICAgICAgICAiYnJvd3Nlci13YWl0LXJlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJicm93c2VyLXdhaXQtcmUiLAogICAgICAgICAgICAiUmVnRXggZm9yIGRldGVjdCBtb21lbnRzIHdoZW4gc2VsZW5pdW0gYnJvd3NlciBuZWVkIHdhaXQgKGRkb3MgY2hlY2ssIGh1bWFuIGFjdGlvbiBuZWVkKSIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWJyb3dzZXItd2FpdC1yZSddCiAgICAgICAgKSwKICAgICAgICAiYnJvd3Nlci1yZWNyZWF0ZS1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiYnJvd3Nlci1yZWNyZWF0ZS1yZSIsCiAgICAgICAgICAgICJSZWdleCBmb3IgcmVjcmVhdGUgYnJvd3NlciB3aXRoIG5ldyBwcm94eSIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWJyb3dzZXItcmVjcmVhdGUtcmUnXQogICAgICAgICksCiAgICAgICAgInBhcnRzIjogV1NPcHRpb24oCiAgICAgICAgICAgICJwYXJ0cyIsCiAgICAgICAgICAgICJIb3cgbWFueSBwYXJ0cyB3aWxsIGJlIGNyZWF0ZSBmcm9tIGN1cnJlbnQgc291cmNlIChkaWN0L21hc2spIiwKICAgICAgICAgICAgIjAiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXBhcnRzJ10KICAgICAgICApLAogICAgICAgICJwYXJ0IjogV1NPcHRpb24oCiAgICAgICAgICAgICJwYXJ0IiwKICAgICAgICAgICAgIk51bWJlciBvZiBwYXJ0IGZvciB1c2UgZnJvbSAtLXBhcnRzIiwKICAgICAgICAgICAgIjAiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXBhcnQnXQogICAgICAgICksCiAgICAgICAgInByb3hpZXMiOiBXU09wdGlvbigKICAgICAgICAgICAgInByb3hpZXMiLAogICAgICAgICAgICAiRmlsZSB3aXRoIGxpc3Qgb2YgcHJveGllcyIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXByb3hpZXMnXQogICAgICAgICksCiAgICAgICAgImh0dHAtcHJveGllcyI6IFdTT3B0aW9uKAogICAgICAgICAgICAiaHR0cC1wcm94aWVzIiwKICAgICAgICAgICAgIkZpbGUgd2l0aCBsaXN0IG9mIHByb3hpZXMiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1odHRwLXByb3hpZXMnXQogICAgICAgICksCiAgICAgICAgImhlYWRlcnMtZmlsZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiaGVhZGVycy1maWxlIiwKICAgICAgICAgICAgIkZpbGUgd2l0aCBsaXN0IG9mIEhUVFAgaGVhZGVycyIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWhlYWRlcnMtZmlsZSddCiAgICAgICAgKSwKICAgICAgICAiZG5zLXByb3RvY29sIjogV1NPcHRpb24oCiAgICAgICAgICAgICJkbnMtcHJvdG9jb2wiLAogICAgICAgICAgICAiVENQIG9yIFVEUCBjb25uZWN0aW9uIHRvIEROUyBzZXJ2ZXIgKGRlZmF1bHQgLSBhdXRvKSIsCiAgICAgICAgICAgICJhdXRvIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1kbnMtcHJvdG9jb2wnXQogICAgICAgICksCiAgICAgICAgImh0dHAtcHJvdG9jb2wiOiBXU09wdGlvbigKICAgICAgICAgICAgImh0dHAtcHJvdG9jb2wiLAogICAgICAgICAgICAiUHJvdG9jb2wgaHR0cCBvciBodHRwcyAoZGVmYXVsdCAtIGh0dHApIiwKICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWh0dHAtcHJvdG9jb2wnXQogICAgICAgICksCiAgICAgICAgInJldGVzdC1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAicmV0ZXN0LXJlIiwKICAgICAgICAgICAgIlJlZ0V4IGluIHJlc3BvbnNlIGZvciByZXRlc3QiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1yZXRlc3QtcmUnXQogICAgICAgICksCiAgICAgICAgImh0dHAtcmV0ZXN0LXJlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJodHRwLXJldGVzdC1yZSIsCiAgICAgICAgICAgICJSZWdFeCBmb3IgY2hlY2sgcmV0ZXN0IGlzIG5lZWQiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1odHRwLXJldGVzdC1yZSddCiAgICAgICAgKSwKICAgICAgICAiem9uZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiem9uZSIsCiAgICAgICAgICAgICJab25lIGZvciBjaGVjayAoQS9DTkFNRSkiLAogICAgICAgICAgICAiQSIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tem9uZSddCiAgICAgICAgKSwKICAgICAgICAiaWdub3JlLWlwIjogV1NPcHRpb24oCiAgICAgICAgICAgICJpZ25vcmUtaXAiLAogICAgICAgICAgICAiVGhpcyBJUC1hZGRyZXNzIG11c3QgYmUgaWdub3JlIGluIHBvc2l0aXZlIGRldGVjdGlvbnMiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1pZ25vcmUtaXAnXQogICAgICAgICksCiAgICAgICAgIm9ubHktb25lIjogV1NPcHRpb24oCiAgICAgICAgICAgICJvbmx5X29uZSIsCiAgICAgICAgICAgICJvbmx5IG9uZSIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLW9ubHktb25lJ10KICAgICAgICApLAogICAgICAgICJ1cmwiOiBXU09wdGlvbigKICAgICAgICAgICAgInVybCIsCiAgICAgICAgICAgICJVUkwgZm9yIHdvcmsiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgVHJ1ZSwKICAgICAgICAgICAgWyctLXVybCddCiAgICAgICAgKSwKICAgICAgICAidXJscy1maWxlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJ1cmxzLWZpbGUiLAogICAgICAgICAgICAiRmlsZSB3aXRoIGxpc3Qgb2YgVVJMcyIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXVybHMtZmlsZSddCiAgICAgICAgKSwKICAgICAgICAiaWdub3JlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJpZ25vcmUiLAogICAgICAgICAgICAiaWdub3JlIHJlZ2V4cCIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWlnbm9yZSddCiAgICAgICAgKSwKICAgICAgICAiaG9zdCI6IFdTT3B0aW9uKAogICAgICAgICAgICAiaG9zdCIsCiAgICAgICAgICAgICJUcmFnZXQgaG9zdCBmb3Igc2NhbiIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBbJy0taG9zdCddCiAgICAgICAgKSwKICAgICAgICAiZG5zIjogV1NPcHRpb24oCiAgICAgICAgICAgICJkbnMiLAogICAgICAgICAgICAiRE5TIHNlcnZlciBmb3IgZG9tYWlucyBzZWFyY2giLAogICAgICAgICAgICAiOC44LjguOCIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tZG5zJ10KICAgICAgICApLAogICAgICAgICJmYWxzZS1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZmFsc2UtcmUiLAogICAgICAgICAgICAiUmVnRXggZm9yIGRldGVjdCBmYWxzZSBhbnN3ZXIiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1mYWxzZS1yZSddCiAgICAgICAgKSwKICAgICAgICAiZmFsc2Utc2l6ZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZmFsc2Utc2l6ZSIsCiAgICAgICAgICAgICJSZXNwb25zZSBzaXplIGZvciBkZXRlY3QgZmFsc2UgYW5zd2VyIChhdXRoIGlzIHdyb25nKSIsCiAgICAgICAgICAgIE5vbmUsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tZmFsc2Utc2l6ZSddCiAgICAgICAgKSwKICAgICAgICAidHJ1ZS1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAidHJ1ZS1yZSIsCiAgICAgICAgICAgICJSZWdFeCBmb3IgZGV0ZWN0IHRydWUgYW5zd2VyIChhdXRoIGlzIGdvb2QpIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tdHJ1ZS1yZSddCiAgICAgICAgKSwKICAgICAgICAicmVsb2FkLWZvcm0tcGFnZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAicmVsb2FkLWZvcm0tcGFnZSIsCiAgICAgICAgICAgICJSZWxvYWQgcGFnZSB3aXRoIGZvcm0gYmVmb3JlIGV2ZXJ5IGF1dGggcmVxdWVzdCIsCiAgICAgICAgICAgICIwIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1yZWxvYWQtZm9ybS1wYWdlJ10KICAgICAgICApLAogICAgICAgICJjb25mLXN0ciI6IFdTT3B0aW9uKAogICAgICAgICAgICAiY29uZi1zdHIiLAogICAgICAgICAgICAiU3RyaW5nIHdpdGggYnJ1dGVyIGNvbmZpZyIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWNvbmYtc3RyJ10KICAgICAgICApLAogICAgICAgICJjb25mLWZpbGUiOiBXU09wdGlvbigKICAgICAgICAgICAgImNvbmYtZmlsZSIsCiAgICAgICAgICAgICJGaWxlIHdpdGggYnJ1dGVyIGNvbmZpZyAoc2VsZW5pdW0pIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tY29uZi1maWxlJ10KICAgICAgICApLAogICAgICAgICJmaXJzdC1zdG9wIjogV1NPcHRpb24oCiAgICAgICAgICAgICJmaXJzdC1zdG9wIiwKICAgICAgICAgICAgIlN0b3AgYWZ0ZXIgZmlyc3QgcGFzc3dvcmQgZm91bmQiLAogICAgICAgICAgICAiMCIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tZmlyc3Qtc3RvcCddCiAgICAgICAgKSwKICAgICAgICAibG9naW4iOiBXU09wdGlvbigKICAgICAgICAgICAgImxvZ2luIiwKICAgICAgICAgICAgIlRhcmdldCBsb2dpbiIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBbJy0tbG9naW4nXQogICAgICAgICksCiAgICAgICAgInBhc3MtbWluLWxlbiI6IFdTT3B0aW9uKAogICAgICAgICAgICAicGFzcy1taW4tbGVuIiwKICAgICAgICAgICAgIlBhc3N3b3JkIG1pbiBsZW5ndGgiLAogICAgICAgICAgICAiMCIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tcGFzcy1taW4tbGVuJ10KICAgICAgICApLAogICAgICAgICJwYXNzLW1heC1sZW4iOiBXU09wdGlvbigKICAgICAgICAgICAgInBhc3MtbWF4LWxlbiIsCiAgICAgICAgICAgICJQYXNzd29yZCBtYXggbGVuZ3RoIiwKICAgICAgICAgICAgIjAiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXBhc3MtbWF4LWxlbiddCiAgICAgICAgKSwKICAgICAgICAiaXAiOiBXU09wdGlvbigKICAgICAgICAgICAgImlwIiwKICAgICAgICAgICAgIlRyYWdldCBJUCIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBbJy0taXAnXQogICAgICAgICksCiAgICAgICAgIm1heC1wYXJhbXMtbGVuZ3RoIjogV1NPcHRpb24oCiAgICAgICAgICAgICJtYXgtcGFyYW1zLWxlbmd0aCIsCiAgICAgICAgICAgICJNYXhpbXVtIHN0cmluZyBvZiBwYXJhbXMgbGVuZ3RoIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIFRydWUsCiAgICAgICAgICAgIFsnLS1tYXgtcGFyYW1zLWxlbmd0aCddCiAgICAgICAgKSwKICAgICAgICAidmFsdWUiOiBXU09wdGlvbigKICAgICAgICAgICAgInZhbHVlIiwKICAgICAgICAgICAgIlZhbHVlIGZvciBwYXJhbXMsIGRlZmF1bHQgMSIsCiAgICAgICAgICAgICIxIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS12YWx1ZSddCiAgICAgICAgKSwKICAgICAgICAiZGlzY292ZXJ5LWV4dHMiOiBXU09wdGlvbigKICAgICAgICAgICAgImRpc2NvdmVyeS1leHRzIiwKICAgICAgICAgICAgIkV4dHMsIGNvbW1hIHNlcGFyYXRlZCwgZm9yIGdlbmVyYXRlIGRpc2NvdmVyeSBmaWxlbmFtZXMiLAogICAgICAgICAgICAicGhwLGh0bWwsanMsbG9nLHR4dCx6aXAsdGFyLHRhci5neix0YXIuYnoyLGd6LHppcCw3eixyYXIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWRpc2NvdmVyeS1leHRzJ10KICAgICAgICApLAogICAgICAgICJ0b3IiOiBXU09wdGlvbigKICAgICAgICAgICAgInRvciIsCiAgICAgICAgICAgICJVc2UgVE9SIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tdG9yJ10KICAgICAgICApLAogICAgfQoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmFkZF9vcHRpb25zKAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAndG9yJywKICAgICAgICAgICAgICAgICd0ZXN0JywKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICBdCiAgICAgICAgKQoKICAgIGRlZiBnZXRfb3B0aW9ucyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5vcHRpb25zCgogICAgZGVmIGFkZF9vcHRpb25zKHNlbGYsIG5hbWVzX2xpc3QpOgogICAgICAgIGZvciBuYW1lIGluIG5hbWVzX2xpc3Q6CiAgICAgICAgICAgIHNlbGYuYWRkX29wdGlvbihuYW1lKQoKICAgIGRlZiBkZWxfb3B0aW9uKHNlbGYsIG5hbWUpOgogICAgICAgIGRlbCBzZWxmLm9wdGlvbnNbbmFtZV0KCiAgICBkZWYgYWRkX29wdGlvbihzZWxmLCBpbnRlcm5hbF9uYW1lLCBleHRlcm5hbF9uYW1lPU5vbmUpOgogICAgICAgIGlmIGludGVybmFsX25hbWUgbm90IGluIHNlbGYuYWxsX29wdGlvbnM6CiAgICAgICAgICAgIHJhaXNlIFdTRXhjZXB0aW9uKCJPcHRpb24gJ3swfScgbm90IGV4aXN0cyIuZm9ybWF0KGludGVybmFsX25hbWUpKQoKICAgICAgICBpZiBleHRlcm5hbF9uYW1lIGlzIG5vdCBOb25lOgogICAgICAgICAgICBvcHRpb24gPSBzZWxmLmFsbF9vcHRpb25zW2ludGVybmFsX25hbWVdCiAgICAgICAgICAgIG9wdGlvbi5mbGFncyA9IFsnLS0nICsgZXh0ZXJuYWxfbmFtZV0KICAgICAgICAgICAgc2VsZi5vcHRpb25zW2V4dGVybmFsX25hbWVdID0gb3B0aW9uCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5vcHRpb25zW2ludGVybmFsX25hbWVdID0gc2VsZi5hbGxfb3B0aW9uc1tpbnRlcm5hbF9uYW1lXQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgJ3htbC1yZXBvcnQnLAogICAgICAgICAgICAgICAgJ3RocmVhZHMnLAogICAgICAgICAgICAgICAgJ3BhcnRzJywKICAgICAgICAgICAgICAgICdwYXJ0JywKPHxmaW1fZW5kfD4="]
["d45a61bc31a2ec91646d6adf307e20cf9c4016d7-3","d45a61bc31a2ec91646d6adf307e20cf9c4016d7","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiClRoaXMgaXMgcGFydCBvZiBXZWJTY291dCBzb2Z0d2FyZQpEb2NzIEVOOiBodHRwOi8vaGFjazRzZWMucHJvL3dpa2kvaW5kZXgucGhwL1dlYlNjb3V0X2VuCkRvY3MgUlU6IGh0dHA6Ly9oYWNrNHNlYy5wcm8vd2lraS9pbmRleC5waHAvV2ViU2NvdXQKTGljZW5zZTogTUlUCkNvcHlyaWdodCAoYykgQW50b24gS3V6bWluIDxodHRwOi8vYW50b24ta3V6bWluLnJ1PiAocnUpIDxodHRwOi8vYW50b24ta3V6bWluLnBybz4gKGVuKQoKQWJzdHJhY3QgbW9kdWxlIHBhcmFtcyBjbGFzcywgY29udGFpbnMgYWxsIHBvc3NpYmxlIHBhcmFtcyBkZXNjcmlwdGlvbgoiIiIKCmZyb20gY2xhc3Nlcy5rZXJuZWwuV1NPcHRpb24gaW1wb3J0IFdTT3B0aW9uCmZyb20gY2xhc3Nlcy5rZXJuZWwuV1NFeGNlcHRpb24gaW1wb3J0IFdTRXhjZXB0aW9uCmZyb20gY2xhc3Nlcy5SZWdpc3RyeSBpbXBvcnQgUmVnaXN0cnkKCgpjbGFzcyBBYnN0cmFjdE1vZHVsZVBhcmFtczoKICAgIG9wdGlvbnMgPSB7fQoKICAgIGFsbF9vcHRpb25zID0gewogICAgICAgICJ0ZXN0IjogV1NPcHRpb24oCiAgICAgICAgICAgICJ0ZXN0IiwKICAgICAgICAgICAgIlRlc3QgcnVuIHdpdGggcmVzdWx0cyBkdW1wIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tdGVzdCddCiAgICAgICAgKSwKICAgICAgICAiZm9sbG93LXJlZGlyZWN0cyI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZm9sbG93LXJlZGlyZWN0cyIsCiAgICAgICAgICAgICJGb2xsb3cgcmVkaXJlY3RzIGZyb20gc2VydmVyIHJlc3BvbnNlIiwKICAgICAgICAgICAgIjAiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWZvbGxvdy1yZWRpcmVjdHMnXQogICAgICAgICksCiAgICAgICAgInhtbC1yZXBvcnQiOiBXU09wdGlvbigKICAgICAgICAgICAgInhtbC1yZXBvcnQiLAogICAgICAgICAgICAiWE1MIHJlcG9ydCBmaWxlIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0teG1sLXJlcG9ydCddCiAgICAgICAgKSwKICAgICAgICAidGhyZWFkcyI6IFdTT3B0aW9uKAogICAgICAgICAgICAidGhyZWFkcyIsCiAgICAgICAgICAgICJUaHJlYWRzIGNvdW50LCBkZWZhdWx0IDEwIiwKICAgICAgICAgICAgaW50KFJlZ2lzdHJ5KCkuZ2V0KCdjb25maWcnKVsnbWFpbiddWydkZWZhdWx0X3RocmVhZHMnXSksCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tdGhyZWFkcyddCiAgICAgICAgKSwKICAgICAgICAidGVtcGxhdGUiOiBXU09wdGlvbigKICAgICAgICAgICAgInRlbXBsYXRlIiwKICAgICAgICAgICAgIlRlbXBsYXRlIGZvciBzY2FuICh7MH0gYXMgbWFyayBzeW1ib2wpIi5mb3JtYXQoUmVnaXN0cnkoKS5nZXQoJ2NvbmZpZycpWydtYWluJ11bJ3N0YW5kYXJ0X21zeW1ib2wnXSksCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBbJy0tdGVtcGxhdGUnXQogICAgICAgICksCiAgICAgICAgIm1zeW1ib2wiOiBXU09wdGlvbigKICAgICAgICAgICAgIm1zeW1ib2wiLAogICAgICAgICAgICAiU3ltYm9sIG9mIG1hc2sgcG9zaXRpb24gaW4gdGFyZ2V0IFVSTCAoZGVmYXVsdCB7MH0pIgogICAgICAgICAgICAgICAgLmZvcm1hdChSZWdpc3RyeSgpLmdldCgnY29uZmlnJylbJ21haW4nXVsnc3RhbmRhcnRfbXN5bWJvbCddKSwKICAgICAgICAgICAgUmVnaXN0cnkoKS5nZXQoJ2NvbmZpZycpWydtYWluJ11bJ3N0YW5kYXJ0X21zeW1ib2wnXSwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1tc3ltYm9sJ10KICAgICAgICApLAogICAgICAgICJtZXRob2QiOiBXU09wdGlvbigKICAgICAgICAgICAgIm1ldGhvZCIsCiAgICAgICAgICAgICJSZXF1ZXN0cyBtZXRob2QgKGRlZmF1bHQgLSBHRVQpIiwKICAgICAgICAgICAgIkdFVCIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tbWV0aG9kJ10KICAgICAgICApLAogICAgICAgICJicnV0ZWZvcmNlLW1ldGhvZCI6IFdTT3B0aW9uKAogICAgICAgICAgICAiYnJ1dGVmb3JjZS1tZXRob2QiLAogICAgICAgICAgICAiUmVxdWVzdHMgbWV0aG9kIChkZWZhdWx0IC0gUE9TVCkiLAogICAgICAgICAgICAiUE9TVCIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tYnJ1dGVmb3JjZS1tZXRob2QnXQogICAgICAgICksCiAgICAgICAgInBhcmFtcy1tZXRob2QiOiBXU09wdGlvbigKICAgICAgICAgICAgInBhcmFtcy1tZXRob2QiLAogICAgICAgICAgICAiUmVxdWVzdHMgbWV0aG9kIChkZWZhdWx0IC0gR0VUKSIsCiAgICAgICAgICAgICJHRVQiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXBhcmFtcy1tZXRob2QnXQogICAgICAgICksCiAgICAgICAgImRpY3QiOiBXU09wdGlvbigKICAgICAgICAgICAgImRpY3QiLAogICAgICAgICAgICAiRGljdGlvbmFyeSBmb3Igd29yayIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBbJy0tZGljdCddCiAgICAgICAgKSwKICAgICAgICAibWFzayI6IFdTT3B0aW9uKAogICAgICAgICAgICAibWFzayIsCiAgICAgICAgICAgICJNYXNrIGZvciB3b3JrIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIFRydWUsCiAgICAgICAgICAgIFsnLS1tYXNrJ10KICAgICAgICApLAogICAgICAgICJjb21iaW5lLXRlbXBsYXRlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJjb21iaW5lLXRlbXBsYXRlIiwKICAgICAgICAgICAgIlRlbXBsYXRlIGZvciBjb21iaW5lIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIFRydWUsCiAgICAgICAgICAgIFsnLS1jb21iaW5lLXRlbXBsYXRlJ10KICAgICAgICApLAogICAgICAgICJmb3VuZC1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZm91bmQtcmUiLAogICAgICAgICAgICAiUmVnZXggZm9yIGRldGVjdCAnRm91bmQnIHJlc3BvbnNlICgyMDApIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tZm91bmQtcmUnXQogICAgICAgICksCiAgICAgICAgIm5vdC1mb3VuZC1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAibm90LWZvdW5kLXJlIiwKICAgICAgICAgICAgIlJlZ2V4IGZvciBkZXRlY3QgJ05vdCBmb3VuZCcgcmVzcG9uc2UgKDQwNCkiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1ub3QtZm91bmQtcmUnXQogICAgICAgICksCiAgICAgICAgImh0dHAtbm90LWZvdW5kLXJlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJodHRwLW5vdC1mb3VuZC1yZSIsCiAgICAgICAgICAgICJSZWdleCBmb3IgZGV0ZWN0ICdOb3QgZm91bmQnIHJlc3BvbnNlICg0MDQpIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0taHR0cC1ub3QtZm91bmQtcmUnXQogICAgICAgICksCiAgICAgICAgIm5vdC1mb3VuZC1leCI6IFdTT3B0aW9uKAogICAgICAgICAgICAibm90LWZvdW5kLWV4IiwKICAgICAgICAgICAgIlBocmFzZSBmb3IgZGV0ZWN0ICdOb3QgZm91bmQnIGV4Y2VwdGlvbiAocGVyY2VpdmVkIGFzIDQwNCkiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1ub3QtZm91bmQtZXgnXQogICAgICAgICksCiAgICAgICAgIm5vdC1mb3VuZC1zaXplIjogV1NPcHRpb24oCiAgICAgICAgICAgICJub3QtZm91bmQtc2l6ZSIsCiAgICAgICAgICAgICJTaXplIGluIGJ5dGVzIGZvciBkZXRlY3QgJ05vdCBmb3VuZCcgcmVzcG9uc2UgKDQwNCkiLAogICAgICAgICAgICAiLTEiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLW5vdC1mb3VuZC1zaXplJ10KICAgICAgICApLAogICAgICAgICJub3QtZm91bmQtY29kZXMiOiBXU09wdGlvbigKICAgICAgICAgICAgIm5vdC1mb3VuZC1jb2RlcyIsCiAgICAgICAgICAgICJDdXN0b20gY29kZXMgZm9yIGRldGVjdCAnTm90IGZvdW5kJyByZXNwb25zZSAoNDA0KSIsCiAgICAgICAgICAgICI0MDQiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLW5vdC1mb3VuZC1jb2RlcyddCiAgICAgICAgKSwKICAgICAgICAiaWdub3JlLXdvcmRzLXJlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJpZ25vcmUtd29yZHMtcmUiLAogICAgICAgICAgICAiUmVnZXggZm9yIGlnbm9yZSBzb21lIHdvcmRzIGZyb20gZGljdCBvciBtYXNrIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0taWdub3JlLXdvcmRzLXJlJ10KICAgICAgICApLAogICAgICAgICJyZXRlc3QtY29kZXMiOiBXU09wdGlvbigKICAgICAgICAgICAgInJldGVzdC1jb2RlcyIsCiAgICAgICAgICAgICJDdXN0b20gY29kZXMgZm9yIHJlLXRlc3Qgb2JqZWN0IGFmdGVyIDUgc2VjIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tcmV0ZXN0LWNvZGVzJ10KICAgICAgICApLAogICAgICAgICJkZWxheSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZGVsYXkiLAogICAgICAgICAgICAiRGVsZXkgZm9yIGV2ZXJ5IHRocmVhZCBiZXR3ZWVuIHJlcXVlc3RzIChzZWNzKSIsCiAgICAgICAgICAgICIwIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1kZWxheSddCiAgICAgICAgKSwKICAgICAgICAic2VsZW5pdW0iOiBXU09wdGlvbigKICAgICAgICAgICAgInNlbGVuaXVtIiwKICAgICAgICAgICAgIlVzZSBTZWxlbml1bSBmb3Igc2Nhbm5pbmciLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1zZWxlbml1bSddCiAgICAgICAgKSwKICAgICAgICAiYnJvd3Nlci13YWl0LXJlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJicm93c2VyLXdhaXQtcmUiLAogICAgICAgICAgICAiUmVnRXggZm9yIGRldGVjdCBtb21lbnRzIHdoZW4gc2VsZW5pdW0gYnJvd3NlciBuZWVkIHdhaXQgKGRkb3MgY2hlY2ssIGh1bWFuIGFjdGlvbiBuZWVkKSIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWJyb3dzZXItd2FpdC1yZSddCiAgICAgICAgKSwKICAgICAgICAiYnJvd3Nlci1yZWNyZWF0ZS1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiYnJvd3Nlci1yZWNyZWF0ZS1yZSIsCiAgICAgICAgICAgICJSZWdleCBmb3IgcmVjcmVhdGUgYnJvd3NlciB3aXRoIG5ldyBwcm94eSIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWJyb3dzZXItcmVjcmVhdGUtcmUnXQogICAgICAgICksCiAgICAgICAgInBhcnRzIjogV1NPcHRpb24oCiAgICAgICAgICAgICJwYXJ0cyIsCiAgICAgICAgICAgICJIb3cgbWFueSBwYXJ0cyB3aWxsIGJlIGNyZWF0ZSBmcm9tIGN1cnJlbnQgc291cmNlIChkaWN0L21hc2spIiwKICAgICAgICAgICAgIjAiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXBhcnRzJ10KICAgICAgICApLAogICAgICAgICJwYXJ0IjogV1NPcHRpb24oCiAgICAgICAgICAgICJwYXJ0IiwKICAgICAgICAgICAgIk51bWJlciBvZiBwYXJ0IGZvciB1c2UgZnJvbSAtLXBhcnRzIiwKICAgICAgICAgICAgIjAiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXBhcnQnXQogICAgICAgICksCiAgICAgICAgInByb3hpZXMiOiBXU09wdGlvbigKICAgICAgICAgICAgInByb3hpZXMiLAogICAgICAgICAgICAiRmlsZSB3aXRoIGxpc3Qgb2YgcHJveGllcyIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXByb3hpZXMnXQogICAgICAgICksCiAgICAgICAgImh0dHAtcHJveGllcyI6IFdTT3B0aW9uKAogICAgICAgICAgICAiaHR0cC1wcm94aWVzIiwKICAgICAgICAgICAgIkZpbGUgd2l0aCBsaXN0IG9mIHByb3hpZXMiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1odHRwLXByb3hpZXMnXQogICAgICAgICksCiAgICAgICAgImhlYWRlcnMtZmlsZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiaGVhZGVycy1maWxlIiwKICAgICAgICAgICAgIkZpbGUgd2l0aCBsaXN0IG9mIEhUVFAgaGVhZGVycyIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWhlYWRlcnMtZmlsZSddCiAgICAgICAgKSwKICAgICAgICAiZG5zLXByb3RvY29sIjogV1NPcHRpb24oCiAgICAgICAgICAgICJkbnMtcHJvdG9jb2wiLAogICAgICAgICAgICAiVENQIG9yIFVEUCBjb25uZWN0aW9uIHRvIEROUyBzZXJ2ZXIgKGRlZmF1bHQgLSBhdXRvKSIsCiAgICAgICAgICAgICJhdXRvIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1kbnMtcHJvdG9jb2wnXQogICAgICAgICksCiAgICAgICAgImh0dHAtcHJvdG9jb2wiOiBXU09wdGlvbigKICAgICAgICAgICAgImh0dHAtcHJvdG9jb2wiLAogICAgICAgICAgICAiUHJvdG9jb2wgaHR0cCBvciBodHRwcyAoZGVmYXVsdCAtIGh0dHApIiwKICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWh0dHAtcHJvdG9jb2wnXQogICAgICAgICksCiAgICAgICAgInJldGVzdC1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAicmV0ZXN0LXJlIiwKICAgICAgICAgICAgIlJlZ0V4IGluIHJlc3BvbnNlIGZvciByZXRlc3QiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1yZXRlc3QtcmUnXQogICAgICAgICksCiAgICAgICAgImh0dHAtcmV0ZXN0LXJlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJodHRwLXJldGVzdC1yZSIsCiAgICAgICAgICAgICJSZWdFeCBmb3IgY2hlY2sgcmV0ZXN0IGlzIG5lZWQiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1odHRwLXJldGVzdC1yZSddCiAgICAgICAgKSwKICAgICAgICAiem9uZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiem9uZSIsCiAgICAgICAgICAgICJab25lIGZvciBjaGVjayAoQS9DTkFNRSkiLAogICAgICAgICAgICAiQSIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tem9uZSddCiAgICAgICAgKSwKICAgICAgICAiaWdub3JlLWlwIjogV1NPcHRpb24oCiAgICAgICAgICAgICJpZ25vcmUtaXAiLAogICAgICAgICAgICAiVGhpcyBJUC1hZGRyZXNzIG11c3QgYmUgaWdub3JlIGluIHBvc2l0aXZlIGRldGVjdGlvbnMiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1pZ25vcmUtaXAnXQogICAgICAgICksCiAgICAgICAgIm9ubHktb25lIjogV1NPcHRpb24oCiAgICAgICAgICAgICJvbmx5X29uZSIsCiAgICAgICAgICAgICJvbmx5IG9uZSIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLW9ubHktb25lJ10KICAgICAgICApLAogICAgICAgICJ1cmwiOiBXU09wdGlvbigKICAgICAgICAgICAgInVybCIsCiAgICAgICAgICAgICJVUkwgZm9yIHdvcmsiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgVHJ1ZSwKICAgICAgICAgICAgWyctLXVybCddCiAgICAgICAgKSwKICAgICAgICAidXJscy1maWxlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJ1cmxzLWZpbGUiLAogICAgICAgICAgICAiRmlsZSB3aXRoIGxpc3Qgb2YgVVJMcyIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXVybHMtZmlsZSddCiAgICAgICAgKSwKICAgICAgICAiaWdub3JlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJpZ25vcmUiLAogICAgICAgICAgICAiaWdub3JlIHJlZ2V4cCIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWlnbm9yZSddCiAgICAgICAgKSwKICAgICAgICAiaG9zdCI6IFdTT3B0aW9uKAogICAgICAgICAgICAiaG9zdCIsCiAgICAgICAgICAgICJUcmFnZXQgaG9zdCBmb3Igc2NhbiIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBbJy0taG9zdCddCiAgICAgICAgKSwKICAgICAgICAiZG5zIjogV1NPcHRpb24oCiAgICAgICAgICAgICJkbnMiLAogICAgICAgICAgICAiRE5TIHNlcnZlciBmb3IgZG9tYWlucyBzZWFyY2giLAogICAgICAgICAgICAiOC44LjguOCIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tZG5zJ10KICAgICAgICApLAogICAgICAgICJmYWxzZS1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZmFsc2UtcmUiLAogICAgICAgICAgICAiUmVnRXggZm9yIGRldGVjdCBmYWxzZSBhbnN3ZXIiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1mYWxzZS1yZSddCiAgICAgICAgKSwKICAgICAgICAiZmFsc2Utc2l6ZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZmFsc2Utc2l6ZSIsCiAgICAgICAgICAgICJSZXNwb25zZSBzaXplIGZvciBkZXRlY3QgZmFsc2UgYW5zd2VyIChhdXRoIGlzIHdyb25nKSIsCiAgICAgICAgICAgIE5vbmUsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tZmFsc2Utc2l6ZSddCiAgICAgICAgKSwKICAgICAgICAidHJ1ZS1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAidHJ1ZS1yZSIsCiAgICAgICAgICAgICJSZWdFeCBmb3IgZGV0ZWN0IHRydWUgYW5zd2VyIChhdXRoIGlzIGdvb2QpIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tdHJ1ZS1yZSddCiAgICAgICAgKSwKICAgICAgICAicmVsb2FkLWZvcm0tcGFnZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAicmVsb2FkLWZvcm0tcGFnZSIsCiAgICAgICAgICAgICJSZWxvYWQgcGFnZSB3aXRoIGZvcm0gYmVmb3JlIGV2ZXJ5IGF1dGggcmVxdWVzdCIsCiAgICAgICAgICAgICIwIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1yZWxvYWQtZm9ybS1wYWdlJ10KICAgICAgICApLAogICAgICAgICJjb25mLXN0ciI6IFdTT3B0aW9uKAogICAgICAgICAgICAiY29uZi1zdHIiLAogICAgICAgICAgICAiU3RyaW5nIHdpdGggYnJ1dGVyIGNvbmZpZyIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWNvbmYtc3RyJ10KICAgICAgICApLAogICAgICAgICJjb25mLWZpbGUiOiBXU09wdGlvbigKICAgICAgICAgICAgImNvbmYtZmlsZSIsCiAgICAgICAgICAgICJGaWxlIHdpdGggYnJ1dGVyIGNvbmZpZyAoc2VsZW5pdW0pIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tY29uZi1maWxlJ10KICAgICAgICApLAogICAgICAgICJmaXJzdC1zdG9wIjogV1NPcHRpb24oCiAgICAgICAgICAgICJmaXJzdC1zdG9wIiwKICAgICAgICAgICAgIlN0b3AgYWZ0ZXIgZmlyc3QgcGFzc3dvcmQgZm91bmQiLAogICAgICAgICAgICAiMCIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tZmlyc3Qtc3RvcCddCiAgICAgICAgKSwKICAgICAgICAibG9naW4iOiBXU09wdGlvbigKICAgICAgICAgICAgImxvZ2luIiwKICAgICAgICAgICAgIlRhcmdldCBsb2dpbiIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBbJy0tbG9naW4nXQogICAgICAgICksCiAgICAgICAgInBhc3MtbWluLWxlbiI6IFdTT3B0aW9uKAogICAgICAgICAgICAicGFzcy1taW4tbGVuIiwKICAgICAgICAgICAgIlBhc3N3b3JkIG1pbiBsZW5ndGgiLAogICAgICAgICAgICAiMCIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tcGFzcy1taW4tbGVuJ10KICAgICAgICApLAogICAgICAgICJwYXNzLW1heC1sZW4iOiBXU09wdGlvbigKICAgICAgICAgICAgInBhc3MtbWF4LWxlbiIsCiAgICAgICAgICAgICJQYXNzd29yZCBtYXggbGVuZ3RoIiwKICAgICAgICAgICAgIjAiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXBhc3MtbWF4LWxlbiddCiAgICAgICAgKSwKICAgICAgICAiaXAiOiBXU09wdGlvbigKICAgICAgICAgICAgImlwIiwKICAgICAgICAgICAgIlRyYWdldCBJUCIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBbJy0taXAnXQogICAgICAgICksCiAgICAgICAgIm1heC1wYXJhbXMtbGVuZ3RoIjogV1NPcHRpb24oCiAgICAgICAgICAgICJtYXgtcGFyYW1zLWxlbmd0aCIsCiAgICAgICAgICAgICJNYXhpbXVtIHN0cmluZyBvZiBwYXJhbXMgbGVuZ3RoIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIFRydWUsCiAgICAgICAgICAgIFsnLS1tYXgtcGFyYW1zLWxlbmd0aCddCiAgICAgICAgKSwKICAgICAgICAidmFsdWUiOiBXU09wdGlvbigKICAgICAgICAgICAgInZhbHVlIiwKICAgICAgICAgICAgIlZhbHVlIGZvciBwYXJhbXMsIGRlZmF1bHQgMSIsCiAgICAgICAgICAgICIxIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS12YWx1ZSddCiAgICAgICAgKSwKICAgICAgICAiZGlzY292ZXJ5LWV4dHMiOiBXU09wdGlvbigKICAgICAgICAgICAgImRpc2NvdmVyeS1leHRzIiwKICAgICAgICAgICAgIkV4dHMsIGNvbW1hIHNlcGFyYXRlZCwgZm9yIGdlbmVyYXRlIGRpc2NvdmVyeSBmaWxlbmFtZXMiLAogICAgICAgICAgICAicGhwLGh0bWwsanMsbG9nLHR4dCx6aXAsdGFyLHRhci5neix0YXIuYnoyLGd6LHppcCw3eixyYXIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWRpc2NvdmVyeS1leHRzJ10KICAgICAgICApLAogICAgICAgICJ0b3IiOiBXU09wdGlvbigKICAgICAgICAgICAgInRvciIsCiAgICAgICAgICAgICJVc2UgVE9SIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tdG9yJ10KICAgICAgICApLAogICAgfQoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmFkZF9vcHRpb25zKAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAndG9yJywKICAgICAgICAgICAgICAgICd0ZXN0JywKICAgICAgICAgICAgICAgICd4bWwtcmVwb3J0JywKICAgICAgICAgICAgICAgICd0aHJlYWRzJywKICAgICAgICAgICAgICAgICdwYXJ0cycsCiAgICAgICAgICAgICAgICAncGFydCcsCiAgICAgICAgICAgICBdCiAgICAgICAgKQoKICAgIGRlZiBnZXRfb3B0aW9ucyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5vcHRpb25zCgogICAgZGVmIGFkZF9vcHRpb25zKHNlbGYsIG5hbWVzX2xpc3QpOgogICAgICAgIGZvciBuYW1lIGluIG5hbWVzX2xpc3Q6CiAgICAgICAgICAgIHNlbGYuYWRkX29wdGlvbihuYW1lKQoKICAgIGRlZiBkZWxfb3B0aW9uKHNlbGYsIG5hbWUpOgogICAgICAgIGRlbCBzZWxmLm9wdGlvbnNbbmFtZV0KCiAgICBkZWYgYWRkX29wdGlvbihzZWxmLCBpbnRlcm5hbF9uYW1lLCBleHRlcm5hbF9uYW1lPU5vbmUpOgogICAgICAgIGlmIGludGVybmFsX25hbWUgbm90IGluIHNlbGYuYWxsX29wdGlvbnM6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgcmFpc2UgV1NFeGNlcHRpb24oIk9wdGlvbiAnezB9JyBub3QgZXhpc3RzIi5mb3JtYXQoaW50ZXJuYWxfbmFtZSkpCgo8fGZpbV9lbmR8Pg=="]
["d45a61bc31a2ec91646d6adf307e20cf9c4016d7-4","d45a61bc31a2ec91646d6adf307e20cf9c4016d7","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiClRoaXMgaXMgcGFydCBvZiBXZWJTY291dCBzb2Z0d2FyZQpEb2NzIEVOOiBodHRwOi8vaGFjazRzZWMucHJvL3dpa2kvaW5kZXgucGhwL1dlYlNjb3V0X2VuCkRvY3MgUlU6IGh0dHA6Ly9oYWNrNHNlYy5wcm8vd2lraS9pbmRleC5waHAvV2ViU2NvdXQKTGljZW5zZTogTUlUCkNvcHlyaWdodCAoYykgQW50b24gS3V6bWluIDxodHRwOi8vYW50b24ta3V6bWluLnJ1PiAocnUpIDxodHRwOi8vYW50b24ta3V6bWluLnBybz4gKGVuKQoKQWJzdHJhY3QgbW9kdWxlIHBhcmFtcyBjbGFzcywgY29udGFpbnMgYWxsIHBvc3NpYmxlIHBhcmFtcyBkZXNjcmlwdGlvbgoiIiIKCmZyb20gY2xhc3Nlcy5rZXJuZWwuV1NPcHRpb24gaW1wb3J0IFdTT3B0aW9uCmZyb20gY2xhc3Nlcy5rZXJuZWwuV1NFeGNlcHRpb24gaW1wb3J0IFdTRXhjZXB0aW9uCmZyb20gY2xhc3Nlcy5SZWdpc3RyeSBpbXBvcnQgUmVnaXN0cnkKCgpjbGFzcyBBYnN0cmFjdE1vZHVsZVBhcmFtczoKICAgIG9wdGlvbnMgPSB7fQoKICAgIGFsbF9vcHRpb25zID0gewogICAgICAgICJ0ZXN0IjogV1NPcHRpb24oCiAgICAgICAgICAgICJ0ZXN0IiwKICAgICAgICAgICAgIlRlc3QgcnVuIHdpdGggcmVzdWx0cyBkdW1wIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tdGVzdCddCiAgICAgICAgKSwKICAgICAgICAiZm9sbG93LXJlZGlyZWN0cyI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZm9sbG93LXJlZGlyZWN0cyIsCiAgICAgICAgICAgICJGb2xsb3cgcmVkaXJlY3RzIGZyb20gc2VydmVyIHJlc3BvbnNlIiwKICAgICAgICAgICAgIjAiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWZvbGxvdy1yZWRpcmVjdHMnXQogICAgICAgICksCiAgICAgICAgInhtbC1yZXBvcnQiOiBXU09wdGlvbigKICAgICAgICAgICAgInhtbC1yZXBvcnQiLAogICAgICAgICAgICAiWE1MIHJlcG9ydCBmaWxlIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0teG1sLXJlcG9ydCddCiAgICAgICAgKSwKICAgICAgICAidGhyZWFkcyI6IFdTT3B0aW9uKAogICAgICAgICAgICAidGhyZWFkcyIsCiAgICAgICAgICAgICJUaHJlYWRzIGNvdW50LCBkZWZhdWx0IDEwIiwKICAgICAgICAgICAgaW50KFJlZ2lzdHJ5KCkuZ2V0KCdjb25maWcnKVsnbWFpbiddWydkZWZhdWx0X3RocmVhZHMnXSksCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tdGhyZWFkcyddCiAgICAgICAgKSwKICAgICAgICAidGVtcGxhdGUiOiBXU09wdGlvbigKICAgICAgICAgICAgInRlbXBsYXRlIiwKICAgICAgICAgICAgIlRlbXBsYXRlIGZvciBzY2FuICh7MH0gYXMgbWFyayBzeW1ib2wpIi5mb3JtYXQoUmVnaXN0cnkoKS5nZXQoJ2NvbmZpZycpWydtYWluJ11bJ3N0YW5kYXJ0X21zeW1ib2wnXSksCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBbJy0tdGVtcGxhdGUnXQogICAgICAgICksCiAgICAgICAgIm1zeW1ib2wiOiBXU09wdGlvbigKICAgICAgICAgICAgIm1zeW1ib2wiLAogICAgICAgICAgICAiU3ltYm9sIG9mIG1hc2sgcG9zaXRpb24gaW4gdGFyZ2V0IFVSTCAoZGVmYXVsdCB7MH0pIgogICAgICAgICAgICAgICAgLmZvcm1hdChSZWdpc3RyeSgpLmdldCgnY29uZmlnJylbJ21haW4nXVsnc3RhbmRhcnRfbXN5bWJvbCddKSwKICAgICAgICAgICAgUmVnaXN0cnkoKS5nZXQoJ2NvbmZpZycpWydtYWluJ11bJ3N0YW5kYXJ0X21zeW1ib2wnXSwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1tc3ltYm9sJ10KICAgICAgICApLAogICAgICAgICJtZXRob2QiOiBXU09wdGlvbigKICAgICAgICAgICAgIm1ldGhvZCIsCiAgICAgICAgICAgICJSZXF1ZXN0cyBtZXRob2QgKGRlZmF1bHQgLSBHRVQpIiwKICAgICAgICAgICAgIkdFVCIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tbWV0aG9kJ10KICAgICAgICApLAogICAgICAgICJicnV0ZWZvcmNlLW1ldGhvZCI6IFdTT3B0aW9uKAogICAgICAgICAgICAiYnJ1dGVmb3JjZS1tZXRob2QiLAogICAgICAgICAgICAiUmVxdWVzdHMgbWV0aG9kIChkZWZhdWx0IC0gUE9TVCkiLAogICAgICAgICAgICAiUE9TVCIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tYnJ1dGVmb3JjZS1tZXRob2QnXQogICAgICAgICksCiAgICAgICAgInBhcmFtcy1tZXRob2QiOiBXU09wdGlvbigKICAgICAgICAgICAgInBhcmFtcy1tZXRob2QiLAogICAgICAgICAgICAiUmVxdWVzdHMgbWV0aG9kIChkZWZhdWx0IC0gR0VUKSIsCiAgICAgICAgICAgICJHRVQiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXBhcmFtcy1tZXRob2QnXQogICAgICAgICksCiAgICAgICAgImRpY3QiOiBXU09wdGlvbigKICAgICAgICAgICAgImRpY3QiLAogICAgICAgICAgICAiRGljdGlvbmFyeSBmb3Igd29yayIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBbJy0tZGljdCddCiAgICAgICAgKSwKICAgICAgICAibWFzayI6IFdTT3B0aW9uKAogICAgICAgICAgICAibWFzayIsCiAgICAgICAgICAgICJNYXNrIGZvciB3b3JrIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIFRydWUsCiAgICAgICAgICAgIFsnLS1tYXNrJ10KICAgICAgICApLAogICAgICAgICJjb21iaW5lLXRlbXBsYXRlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJjb21iaW5lLXRlbXBsYXRlIiwKICAgICAgICAgICAgIlRlbXBsYXRlIGZvciBjb21iaW5lIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIFRydWUsCiAgICAgICAgICAgIFsnLS1jb21iaW5lLXRlbXBsYXRlJ10KICAgICAgICApLAogICAgICAgICJmb3VuZC1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZm91bmQtcmUiLAogICAgICAgICAgICAiUmVnZXggZm9yIGRldGVjdCAnRm91bmQnIHJlc3BvbnNlICgyMDApIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tZm91bmQtcmUnXQogICAgICAgICksCiAgICAgICAgIm5vdC1mb3VuZC1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAibm90LWZvdW5kLXJlIiwKICAgICAgICAgICAgIlJlZ2V4IGZvciBkZXRlY3QgJ05vdCBmb3VuZCcgcmVzcG9uc2UgKDQwNCkiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1ub3QtZm91bmQtcmUnXQogICAgICAgICksCiAgICAgICAgImh0dHAtbm90LWZvdW5kLXJlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJodHRwLW5vdC1mb3VuZC1yZSIsCiAgICAgICAgICAgICJSZWdleCBmb3IgZGV0ZWN0ICdOb3QgZm91bmQnIHJlc3BvbnNlICg0MDQpIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0taHR0cC1ub3QtZm91bmQtcmUnXQogICAgICAgICksCiAgICAgICAgIm5vdC1mb3VuZC1leCI6IFdTT3B0aW9uKAogICAgICAgICAgICAibm90LWZvdW5kLWV4IiwKICAgICAgICAgICAgIlBocmFzZSBmb3IgZGV0ZWN0ICdOb3QgZm91bmQnIGV4Y2VwdGlvbiAocGVyY2VpdmVkIGFzIDQwNCkiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1ub3QtZm91bmQtZXgnXQogICAgICAgICksCiAgICAgICAgIm5vdC1mb3VuZC1zaXplIjogV1NPcHRpb24oCiAgICAgICAgICAgICJub3QtZm91bmQtc2l6ZSIsCiAgICAgICAgICAgICJTaXplIGluIGJ5dGVzIGZvciBkZXRlY3QgJ05vdCBmb3VuZCcgcmVzcG9uc2UgKDQwNCkiLAogICAgICAgICAgICAiLTEiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLW5vdC1mb3VuZC1zaXplJ10KICAgICAgICApLAogICAgICAgICJub3QtZm91bmQtY29kZXMiOiBXU09wdGlvbigKICAgICAgICAgICAgIm5vdC1mb3VuZC1jb2RlcyIsCiAgICAgICAgICAgICJDdXN0b20gY29kZXMgZm9yIGRldGVjdCAnTm90IGZvdW5kJyByZXNwb25zZSAoNDA0KSIsCiAgICAgICAgICAgICI0MDQiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLW5vdC1mb3VuZC1jb2RlcyddCiAgICAgICAgKSwKICAgICAgICAiaWdub3JlLXdvcmRzLXJlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJpZ25vcmUtd29yZHMtcmUiLAogICAgICAgICAgICAiUmVnZXggZm9yIGlnbm9yZSBzb21lIHdvcmRzIGZyb20gZGljdCBvciBtYXNrIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0taWdub3JlLXdvcmRzLXJlJ10KICAgICAgICApLAogICAgICAgICJyZXRlc3QtY29kZXMiOiBXU09wdGlvbigKICAgICAgICAgICAgInJldGVzdC1jb2RlcyIsCiAgICAgICAgICAgICJDdXN0b20gY29kZXMgZm9yIHJlLXRlc3Qgb2JqZWN0IGFmdGVyIDUgc2VjIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tcmV0ZXN0LWNvZGVzJ10KICAgICAgICApLAogICAgICAgICJkZWxheSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZGVsYXkiLAogICAgICAgICAgICAiRGVsZXkgZm9yIGV2ZXJ5IHRocmVhZCBiZXR3ZWVuIHJlcXVlc3RzIChzZWNzKSIsCiAgICAgICAgICAgICIwIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1kZWxheSddCiAgICAgICAgKSwKICAgICAgICAic2VsZW5pdW0iOiBXU09wdGlvbigKICAgICAgICAgICAgInNlbGVuaXVtIiwKICAgICAgICAgICAgIlVzZSBTZWxlbml1bSBmb3Igc2Nhbm5pbmciLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1zZWxlbml1bSddCiAgICAgICAgKSwKICAgICAgICAiYnJvd3Nlci13YWl0LXJlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJicm93c2VyLXdhaXQtcmUiLAogICAgICAgICAgICAiUmVnRXggZm9yIGRldGVjdCBtb21lbnRzIHdoZW4gc2VsZW5pdW0gYnJvd3NlciBuZWVkIHdhaXQgKGRkb3MgY2hlY2ssIGh1bWFuIGFjdGlvbiBuZWVkKSIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWJyb3dzZXItd2FpdC1yZSddCiAgICAgICAgKSwKICAgICAgICAiYnJvd3Nlci1yZWNyZWF0ZS1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiYnJvd3Nlci1yZWNyZWF0ZS1yZSIsCiAgICAgICAgICAgICJSZWdleCBmb3IgcmVjcmVhdGUgYnJvd3NlciB3aXRoIG5ldyBwcm94eSIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWJyb3dzZXItcmVjcmVhdGUtcmUnXQogICAgICAgICksCiAgICAgICAgInBhcnRzIjogV1NPcHRpb24oCiAgICAgICAgICAgICJwYXJ0cyIsCiAgICAgICAgICAgICJIb3cgbWFueSBwYXJ0cyB3aWxsIGJlIGNyZWF0ZSBmcm9tIGN1cnJlbnQgc291cmNlIChkaWN0L21hc2spIiwKICAgICAgICAgICAgIjAiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXBhcnRzJ10KICAgICAgICApLAogICAgICAgICJwYXJ0IjogV1NPcHRpb24oCiAgICAgICAgICAgICJwYXJ0IiwKICAgICAgICAgICAgIk51bWJlciBvZiBwYXJ0IGZvciB1c2UgZnJvbSAtLXBhcnRzIiwKICAgICAgICAgICAgIjAiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXBhcnQnXQogICAgICAgICksCiAgICAgICAgInByb3hpZXMiOiBXU09wdGlvbigKICAgICAgICAgICAgInByb3hpZXMiLAogICAgICAgICAgICAiRmlsZSB3aXRoIGxpc3Qgb2YgcHJveGllcyIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXByb3hpZXMnXQogICAgICAgICksCiAgICAgICAgImh0dHAtcHJveGllcyI6IFdTT3B0aW9uKAogICAgICAgICAgICAiaHR0cC1wcm94aWVzIiwKICAgICAgICAgICAgIkZpbGUgd2l0aCBsaXN0IG9mIHByb3hpZXMiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1odHRwLXByb3hpZXMnXQogICAgICAgICksCiAgICAgICAgImhlYWRlcnMtZmlsZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiaGVhZGVycy1maWxlIiwKICAgICAgICAgICAgIkZpbGUgd2l0aCBsaXN0IG9mIEhUVFAgaGVhZGVycyIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWhlYWRlcnMtZmlsZSddCiAgICAgICAgKSwKICAgICAgICAiZG5zLXByb3RvY29sIjogV1NPcHRpb24oCiAgICAgICAgICAgICJkbnMtcHJvdG9jb2wiLAogICAgICAgICAgICAiVENQIG9yIFVEUCBjb25uZWN0aW9uIHRvIEROUyBzZXJ2ZXIgKGRlZmF1bHQgLSBhdXRvKSIsCiAgICAgICAgICAgICJhdXRvIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1kbnMtcHJvdG9jb2wnXQogICAgICAgICksCiAgICAgICAgImh0dHAtcHJvdG9jb2wiOiBXU09wdGlvbigKICAgICAgICAgICAgImh0dHAtcHJvdG9jb2wiLAogICAgICAgICAgICAiUHJvdG9jb2wgaHR0cCBvciBodHRwcyAoZGVmYXVsdCAtIGh0dHApIiwKICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWh0dHAtcHJvdG9jb2wnXQogICAgICAgICksCiAgICAgICAgInJldGVzdC1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAicmV0ZXN0LXJlIiwKICAgICAgICAgICAgIlJlZ0V4IGluIHJlc3BvbnNlIGZvciByZXRlc3QiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1yZXRlc3QtcmUnXQogICAgICAgICksCiAgICAgICAgImh0dHAtcmV0ZXN0LXJlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJodHRwLXJldGVzdC1yZSIsCiAgICAgICAgICAgICJSZWdFeCBmb3IgY2hlY2sgcmV0ZXN0IGlzIG5lZWQiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1odHRwLXJldGVzdC1yZSddCiAgICAgICAgKSwKICAgICAgICAiem9uZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiem9uZSIsCiAgICAgICAgICAgICJab25lIGZvciBjaGVjayAoQS9DTkFNRSkiLAogICAgICAgICAgICAiQSIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tem9uZSddCiAgICAgICAgKSwKICAgICAgICAiaWdub3JlLWlwIjogV1NPcHRpb24oCiAgICAgICAgICAgICJpZ25vcmUtaXAiLAogICAgICAgICAgICAiVGhpcyBJUC1hZGRyZXNzIG11c3QgYmUgaWdub3JlIGluIHBvc2l0aXZlIGRldGVjdGlvbnMiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1pZ25vcmUtaXAnXQogICAgICAgICksCiAgICAgICAgIm9ubHktb25lIjogV1NPcHRpb24oCiAgICAgICAgICAgICJvbmx5X29uZSIsCiAgICAgICAgICAgICJvbmx5IG9uZSIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLW9ubHktb25lJ10KICAgICAgICApLAogICAgICAgICJ1cmwiOiBXU09wdGlvbigKICAgICAgICAgICAgInVybCIsCiAgICAgICAgICAgICJVUkwgZm9yIHdvcmsiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgVHJ1ZSwKICAgICAgICAgICAgWyctLXVybCddCiAgICAgICAgKSwKICAgICAgICAidXJscy1maWxlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJ1cmxzLWZpbGUiLAogICAgICAgICAgICAiRmlsZSB3aXRoIGxpc3Qgb2YgVVJMcyIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXVybHMtZmlsZSddCiAgICAgICAgKSwKICAgICAgICAiaWdub3JlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJpZ25vcmUiLAogICAgICAgICAgICAiaWdub3JlIHJlZ2V4cCIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWlnbm9yZSddCiAgICAgICAgKSwKICAgICAgICAiaG9zdCI6IFdTT3B0aW9uKAogICAgICAgICAgICAiaG9zdCIsCiAgICAgICAgICAgICJUcmFnZXQgaG9zdCBmb3Igc2NhbiIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBbJy0taG9zdCddCiAgICAgICAgKSwKICAgICAgICAiZG5zIjogV1NPcHRpb24oCiAgICAgICAgICAgICJkbnMiLAogICAgICAgICAgICAiRE5TIHNlcnZlciBmb3IgZG9tYWlucyBzZWFyY2giLAogICAgICAgICAgICAiOC44LjguOCIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tZG5zJ10KICAgICAgICApLAogICAgICAgICJmYWxzZS1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZmFsc2UtcmUiLAogICAgICAgICAgICAiUmVnRXggZm9yIGRldGVjdCBmYWxzZSBhbnN3ZXIiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1mYWxzZS1yZSddCiAgICAgICAgKSwKICAgICAgICAiZmFsc2Utc2l6ZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZmFsc2Utc2l6ZSIsCiAgICAgICAgICAgICJSZXNwb25zZSBzaXplIGZvciBkZXRlY3QgZmFsc2UgYW5zd2VyIChhdXRoIGlzIHdyb25nKSIsCiAgICAgICAgICAgIE5vbmUsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tZmFsc2Utc2l6ZSddCiAgICAgICAgKSwKICAgICAgICAidHJ1ZS1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAidHJ1ZS1yZSIsCiAgICAgICAgICAgICJSZWdFeCBmb3IgZGV0ZWN0IHRydWUgYW5zd2VyIChhdXRoIGlzIGdvb2QpIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tdHJ1ZS1yZSddCiAgICAgICAgKSwKICAgICAgICAicmVsb2FkLWZvcm0tcGFnZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAicmVsb2FkLWZvcm0tcGFnZSIsCiAgICAgICAgICAgICJSZWxvYWQgcGFnZSB3aXRoIGZvcm0gYmVmb3JlIGV2ZXJ5IGF1dGggcmVxdWVzdCIsCiAgICAgICAgICAgICIwIiwKICAgICAgICAgICAgRmFsc2UsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgWyctLXJlbG9hZC1mb3JtLXBhZ2UnXQo8fGZpbV9lbmR8Pg=="]
["d45a61bc31a2ec91646d6adf307e20cf9c4016d7-5","d45a61bc31a2ec91646d6adf307e20cf9c4016d7","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiClRoaXMgaXMgcGFydCBvZiBXZWJTY291dCBzb2Z0d2FyZQpEb2NzIEVOOiBodHRwOi8vaGFjazRzZWMucHJvL3dpa2kvaW5kZXgucGhwL1dlYlNjb3V0X2VuCkRvY3MgUlU6IGh0dHA6Ly9oYWNrNHNlYy5wcm8vd2lraS9pbmRleC5waHAvV2ViU2NvdXQKTGljZW5zZTogTUlUCkNvcHlyaWdodCAoYykgQW50b24gS3V6bWluIDxodHRwOi8vYW50b24ta3V6bWluLnJ1PiAocnUpIDxodHRwOi8vYW50b24ta3V6bWluLnBybz4gKGVuKQoKQWJzdHJhY3QgbW9kdWxlIHBhcmFtcyBjbGFzcywgY29udGFpbnMgYWxsIHBvc3NpYmxlIHBhcmFtcyBkZXNjcmlwdGlvbgoiIiIKCmZyb20gY2xhc3Nlcy5rZXJuZWwuV1NPcHRpb24gaW1wb3J0IFdTT3B0aW9uCmZyb20gY2xhc3Nlcy5rZXJuZWwuV1NFeGNlcHRpb24gaW1wb3J0IFdTRXhjZXB0aW9uCmZyb20gY2xhc3Nlcy5SZWdpc3RyeSBpbXBvcnQgUmVnaXN0cnkKCgpjbGFzcyBBYnN0cmFjdE1vZHVsZVBhcmFtczoKICAgIG9wdGlvbnMgPSB7fQoKICAgIGFsbF9vcHRpb25zID0gewogICAgICAgICJ0ZXN0IjogV1NPcHRpb24oCiAgICAgICAgICAgICJ0ZXN0IiwKICAgICAgICAgICAgIlRlc3QgcnVuIHdpdGggcmVzdWx0cyBkdW1wIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tdGVzdCddCiAgICAgICAgKSwKICAgICAgICAiZm9sbG93LXJlZGlyZWN0cyI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZm9sbG93LXJlZGlyZWN0cyIsCiAgICAgICAgICAgICJGb2xsb3cgcmVkaXJlY3RzIGZyb20gc2VydmVyIHJlc3BvbnNlIiwKICAgICAgICAgICAgIjAiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWZvbGxvdy1yZWRpcmVjdHMnXQogICAgICAgICksCiAgICAgICAgInhtbC1yZXBvcnQiOiBXU09wdGlvbigKICAgICAgICAgICAgInhtbC1yZXBvcnQiLAogICAgICAgICAgICAiWE1MIHJlcG9ydCBmaWxlIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0teG1sLXJlcG9ydCddCiAgICAgICAgKSwKICAgICAgICAidGhyZWFkcyI6IFdTT3B0aW9uKAogICAgICAgICAgICAidGhyZWFkcyIsCiAgICAgICAgICAgICJUaHJlYWRzIGNvdW50LCBkZWZhdWx0IDEwIiwKICAgICAgICAgICAgaW50KFJlZ2lzdHJ5KCkuZ2V0KCdjb25maWcnKVsnbWFpbiddWydkZWZhdWx0X3RocmVhZHMnXSksCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tdGhyZWFkcyddCiAgICAgICAgKSwKICAgICAgICAidGVtcGxhdGUiOiBXU09wdGlvbigKICAgICAgICAgICAgInRlbXBsYXRlIiwKICAgICAgICAgICAgIlRlbXBsYXRlIGZvciBzY2FuICh7MH0gYXMgbWFyayBzeW1ib2wpIi5mb3JtYXQoUmVnaXN0cnkoKS5nZXQoJ2NvbmZpZycpWydtYWluJ11bJ3N0YW5kYXJ0X21zeW1ib2wnXSksCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBbJy0tdGVtcGxhdGUnXQogICAgICAgICksCiAgICAgICAgIm1zeW1ib2wiOiBXU09wdGlvbigKICAgICAgICAgICAgIm1zeW1ib2wiLAogICAgICAgICAgICAiU3ltYm9sIG9mIG1hc2sgcG9zaXRpb24gaW4gdGFyZ2V0IFVSTCAoZGVmYXVsdCB7MH0pIgogICAgICAgICAgICAgICAgLmZvcm1hdChSZWdpc3RyeSgpLmdldCgnY29uZmlnJylbJ21haW4nXVsnc3RhbmRhcnRfbXN5bWJvbCddKSwKICAgICAgICAgICAgUmVnaXN0cnkoKS5nZXQoJ2NvbmZpZycpWydtYWluJ11bJ3N0YW5kYXJ0X21zeW1ib2wnXSwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1tc3ltYm9sJ10KICAgICAgICApLAogICAgICAgICJtZXRob2QiOiBXU09wdGlvbigKICAgICAgICAgICAgIm1ldGhvZCIsCiAgICAgICAgICAgICJSZXF1ZXN0cyBtZXRob2QgKGRlZmF1bHQgLSBHRVQpIiwKICAgICAgICAgICAgIkdFVCIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tbWV0aG9kJ10KICAgICAgICApLAogICAgICAgICJicnV0ZWZvcmNlLW1ldGhvZCI6IFdTT3B0aW9uKAogICAgICAgICAgICAiYnJ1dGVmb3JjZS1tZXRob2QiLAogICAgICAgICAgICAiUmVxdWVzdHMgbWV0aG9kIChkZWZhdWx0IC0gUE9TVCkiLAogICAgICAgICAgICAiUE9TVCIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tYnJ1dGVmb3JjZS1tZXRob2QnXQogICAgICAgICksCiAgICAgICAgInBhcmFtcy1tZXRob2QiOiBXU09wdGlvbigKICAgICAgICAgICAgInBhcmFtcy1tZXRob2QiLAogICAgICAgICAgICAiUmVxdWVzdHMgbWV0aG9kIChkZWZhdWx0IC0gR0VUKSIsCiAgICAgICAgICAgICJHRVQiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXBhcmFtcy1tZXRob2QnXQogICAgICAgICksCiAgICAgICAgImRpY3QiOiBXU09wdGlvbigKICAgICAgICAgICAgImRpY3QiLAogICAgICAgICAgICAiRGljdGlvbmFyeSBmb3Igd29yayIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBbJy0tZGljdCddCiAgICAgICAgKSwKICAgICAgICAibWFzayI6IFdTT3B0aW9uKAogICAgICAgICAgICAibWFzayIsCiAgICAgICAgICAgICJNYXNrIGZvciB3b3JrIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIFRydWUsCiAgICAgICAgICAgIFsnLS1tYXNrJ10KICAgICAgICApLAogICAgICAgICJjb21iaW5lLXRlbXBsYXRlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJjb21iaW5lLXRlbXBsYXRlIiwKICAgICAgICAgICAgIlRlbXBsYXRlIGZvciBjb21iaW5lIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIFRydWUsCiAgICAgICAgICAgIFsnLS1jb21iaW5lLXRlbXBsYXRlJ10KICAgICAgICApLAogICAgICAgICJmb3VuZC1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZm91bmQtcmUiLAogICAgICAgICAgICAiUmVnZXggZm9yIGRldGVjdCAnRm91bmQnIHJlc3BvbnNlICgyMDApIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tZm91bmQtcmUnXQogICAgICAgICksCiAgICAgICAgIm5vdC1mb3VuZC1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAibm90LWZvdW5kLXJlIiwKICAgICAgICAgICAgIlJlZ2V4IGZvciBkZXRlY3QgJ05vdCBmb3VuZCcgcmVzcG9uc2UgKDQwNCkiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1ub3QtZm91bmQtcmUnXQogICAgICAgICksCiAgICAgICAgImh0dHAtbm90LWZvdW5kLXJlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJodHRwLW5vdC1mb3VuZC1yZSIsCiAgICAgICAgICAgICJSZWdleCBmb3IgZGV0ZWN0ICdOb3QgZm91bmQnIHJlc3BvbnNlICg0MDQpIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0taHR0cC1ub3QtZm91bmQtcmUnXQogICAgICAgICksCiAgICAgICAgIm5vdC1mb3VuZC1leCI6IFdTT3B0aW9uKAogICAgICAgICAgICAibm90LWZvdW5kLWV4IiwKICAgICAgICAgICAgIlBocmFzZSBmb3IgZGV0ZWN0ICdOb3QgZm91bmQnIGV4Y2VwdGlvbiAocGVyY2VpdmVkIGFzIDQwNCkiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1ub3QtZm91bmQtZXgnXQogICAgICAgICksCiAgICAgICAgIm5vdC1mb3VuZC1zaXplIjogV1NPcHRpb24oCiAgICAgICAgICAgICJub3QtZm91bmQtc2l6ZSIsCiAgICAgICAgICAgICJTaXplIGluIGJ5dGVzIGZvciBkZXRlY3QgJ05vdCBmb3VuZCcgcmVzcG9uc2UgKDQwNCkiLAogICAgICAgICAgICAiLTEiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLW5vdC1mb3VuZC1zaXplJ10KICAgICAgICApLAogICAgICAgICJub3QtZm91bmQtY29kZXMiOiBXU09wdGlvbigKICAgICAgICAgICAgIm5vdC1mb3VuZC1jb2RlcyIsCiAgICAgICAgICAgICJDdXN0b20gY29kZXMgZm9yIGRldGVjdCAnTm90IGZvdW5kJyByZXNwb25zZSAoNDA0KSIsCiAgICAgICAgICAgICI0MDQiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLW5vdC1mb3VuZC1jb2RlcyddCiAgICAgICAgKSwKICAgICAgICAiaWdub3JlLXdvcmRzLXJlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJpZ25vcmUtd29yZHMtcmUiLAogICAgICAgICAgICAiUmVnZXggZm9yIGlnbm9yZSBzb21lIHdvcmRzIGZyb20gZGljdCBvciBtYXNrIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0taWdub3JlLXdvcmRzLXJlJ10KICAgICAgICApLAogICAgICAgICJyZXRlc3QtY29kZXMiOiBXU09wdGlvbigKICAgICAgICAgICAgInJldGVzdC1jb2RlcyIsCiAgICAgICAgICAgICJDdXN0b20gY29kZXMgZm9yIHJlLXRlc3Qgb2JqZWN0IGFmdGVyIDUgc2VjIiwKICAgICAgICAgICAgIiIsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBbJy0tcmV0ZXN0LWNvZGVzJ10KICAgICAgICApLAogICAgICAgICJkZWxheSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiZGVsYXkiLAogICAgICAgICAgICAiRGVsZXkgZm9yIGV2ZXJ5IHRocmVhZCBiZXR3ZWVuIHJlcXVlc3RzIChzZWNzKSIsCiAgICAgICAgICAgICIwIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1kZWxheSddCiAgICAgICAgKSwKICAgICAgICAic2VsZW5pdW0iOiBXU09wdGlvbigKICAgICAgICAgICAgInNlbGVuaXVtIiwKICAgICAgICAgICAgIlVzZSBTZWxlbml1bSBmb3Igc2Nhbm5pbmciLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1zZWxlbml1bSddCiAgICAgICAgKSwKICAgICAgICAiYnJvd3Nlci13YWl0LXJlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJicm93c2VyLXdhaXQtcmUiLAogICAgICAgICAgICAiUmVnRXggZm9yIGRldGVjdCBtb21lbnRzIHdoZW4gc2VsZW5pdW0gYnJvd3NlciBuZWVkIHdhaXQgKGRkb3MgY2hlY2ssIGh1bWFuIGFjdGlvbiBuZWVkKSIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWJyb3dzZXItd2FpdC1yZSddCiAgICAgICAgKSwKICAgICAgICAiYnJvd3Nlci1yZWNyZWF0ZS1yZSI6IFdTT3B0aW9uKAogICAgICAgICAgICAiYnJvd3Nlci1yZWNyZWF0ZS1yZSIsCiAgICAgICAgICAgICJSZWdleCBmb3IgcmVjcmVhdGUgYnJvd3NlciB3aXRoIG5ldyBwcm94eSIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLWJyb3dzZXItcmVjcmVhdGUtcmUnXQogICAgICAgICksCiAgICAgICAgInBhcnRzIjogV1NPcHRpb24oCiAgICAgICAgICAgICJwYXJ0cyIsCiAgICAgICAgICAgICJIb3cgbWFueSBwYXJ0cyB3aWxsIGJlIGNyZWF0ZSBmcm9tIGN1cnJlbnQgc291cmNlIChkaWN0L21hc2spIiwKICAgICAgICAgICAgIjAiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXBhcnRzJ10KICAgICAgICApLAogICAgICAgICJwYXJ0IjogV1NPcHRpb24oCiAgICAgICAgICAgICJwYXJ0IiwKICAgICAgICAgICAgIk51bWJlciBvZiBwYXJ0IGZvciB1c2UgZnJvbSAtLXBhcnRzIiwKICAgICAgICAgICAgIjAiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXBhcnQnXQogICAgICAgICksCiAgICAgICAgInByb3hpZXMiOiBXU09wdGlvbigKICAgICAgICAgICAgInByb3hpZXMiLAogICAgICAgICAgICAiRmlsZSB3aXRoIGxpc3Qgb2YgcHJveGllcyIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgWyctLXByb3hpZXMnXQogICAgICAgICksCiAgICAgICAgImh0dHAtcHJveGllcyI6IFdTT3B0aW9uKAogICAgICAgICAgICAiaHR0cC1wcm94aWVzIiwKICAgICAgICAgICAgIkZpbGUgd2l0aCBsaXN0IG9mIHByb3hpZXMiLAogICAgICAgICAgICAiIiwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIFsnLS1odHRwLXByb3hpZXMnXQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgKSwKICAgICAgICAiaGVhZGVycy1maWxlIjogV1NPcHRpb24oCiAgICAgICAgICAgICJoZWFkZXJzLWZpbGUiLAogICAgICAgICAgICAiRmlsZSB3aXRoIGxpc3Qgb2YgSFRUUCBoZWFkZXJzIiwKPHxmaW1fZW5kfD4="]
["6bb673647086e0e39d2547d097daf26d69db0305-1","6bb673647086e0e39d2547d097daf26d69db0305","PHxmaW1fcHJlZml4fD4KIyBBYnN0cmFjdGluZyBsYXllciBmb3IgUmVwb3NpdG9yeSBjbGFzc2VzLiBSYXRoZXIgdGhhbiBkaXJlY3RseSBpbnRlcmZhY2Ugd2l0aAojIGEgZGF0YWJhc2UsIGFsbCBvcGVyYXRpb25zIGludGVyYWN0IHdpdGggdGhpcyBjbGFzcycgQ1JVRCBBUEkgbWV0aG9kcyB3aGljaAojIHRoZW1zZWx2ZXMgaW50ZXJhY3Qgd2l0aCBzb21lIGRhdGFiYXNlIGNvbm5lY3RvciBpbXBsZW1lbnRhdGlvbi4KY2xhc3MgUmVwb3NpdG9yeShvYmplY3QpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubmVjdG9yKToKICAgICAgICBzZWxmLmNvbm5lY3RvciA9IGNvbm5lY3RvcgogICAgCiAgICBkZWYgY3JlYXRlKHNlbGYsIHZhbHVlKToKPHxmaW1fZW5kfD4="]
["6bb673647086e0e39d2547d097daf26d69db0305-2","6bb673647086e0e39d2547d097daf26d69db0305","PHxmaW1fcHJlZml4fD4KIyBBYnN0cmFjdGluZyBsYXllciBmb3IgUmVwb3NpdG9yeSBjbGFzc2VzLiBSYXRoZXIgdGhhbiBkaXJlY3RseSBpbnRlcmZhY2Ugd2l0aAojIGEgZGF0YWJhc2UsIGFsbCBvcGVyYXRpb25zIGludGVyYWN0IHdpdGggdGhpcyBjbGFzcycgQ1JVRCBBUEkgbWV0aG9kcyB3aGljaAojIHRoZW1zZWx2ZXMgaW50ZXJhY3Qgd2l0aCBzb21lIGRhdGFiYXNlIGNvbm5lY3RvciBpbXBsZW1lbnRhdGlvbi4KY2xhc3MgUmVwb3NpdG9yeShvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm5lY3Rvcik6CiAgICAgICAgc2VsZi5jb25uZWN0b3IgPSBjb25uZWN0b3IKICAgIAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgY3JlYXRlKHNlbGYsIHZhbHVlKToKICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0b3IuY3JlYXRlKHZhbHVlKQoKICAgIGRlZiByZWFkKHNlbGYsIHNlbGVjdG9yKToKPHxmaW1fZW5kfD4="]
["6bb673647086e0e39d2547d097daf26d69db0305-3","6bb673647086e0e39d2547d097daf26d69db0305","PHxmaW1fcHJlZml4fD4KIyBBYnN0cmFjdGluZyBsYXllciBmb3IgUmVwb3NpdG9yeSBjbGFzc2VzLiBSYXRoZXIgdGhhbiBkaXJlY3RseSBpbnRlcmZhY2Ugd2l0aAojIGEgZGF0YWJhc2UsIGFsbCBvcGVyYXRpb25zIGludGVyYWN0IHdpdGggdGhpcyBjbGFzcycgQ1JVRCBBUEkgbWV0aG9kcyB3aGljaAojIHRoZW1zZWx2ZXMgaW50ZXJhY3Qgd2l0aCBzb21lIGRhdGFiYXNlIGNvbm5lY3RvciBpbXBsZW1lbnRhdGlvbi4KY2xhc3MgUmVwb3NpdG9yeShvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm5lY3Rvcik6CiAgICAgICAgc2VsZi5jb25uZWN0b3IgPSBjb25uZWN0b3IKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgCiAgICBkZWYgY3JlYXRlKHNlbGYsIHZhbHVlKToKICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0b3IuY3JlYXRlKHZhbHVlKQoKPHxmaW1fZW5kfD4="]
["2e0066d6de1d7dd056e872168f34b81b6fefdbc0-1","2e0066d6de1d7dd056e872168f34b81b6fefdbc0","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCmRlZiBjYWxjQ3JjKCBtc2cgKToKICAgICAgICAiVnlwb2NldCBjaGVja3N1bXUiCiAgICAgICAgY3JjID0gMDsKICAgICAgICBmb3IgbGV0dGVyIGluIG1zZzogICAgICMgRmlyc3QgRXhhbXBsZQogICAgICAgICAgIGNyYyA9IGNyYyBeIG9yZChsZXR0ZXIpCiAgICAgICAgY3JjID0gZm9ybWF0KGNyYywgJ1gnKQogICAgICAgIHJldHVybiBjcmM7CgpkZWYgbWFrZUNvbW1hbmQoIG1zZyApOgogICAgICAgICJWeXR2b3JlbmllIHZldHkiCiAgICAgICAgdmV0YSA9IG1zZysnKicrY2FsY0NyYyhtc2cpKydcbicKICAgICAgICBmaW5hbCA9IGInJCcrc3RyLmVuY29kZSh2ZXRhKQogICAgICAgIHJldHVybiBmaW5hbDsKCmltcG9ydCBzZXJpYWwKaW1wb3J0IHN5cwppbXBvcnQgZ2xvYgppbXBvcnQgYXJncGFyc2UKaW1wb3J0IG1hdGxhYi5lbmdpbmUKCgoKaWYgbGVuKHN5cy5hcmd2KSA9PSAxOgogICAgcHJpbnQoImdpdmUgbWUgYSBwYXRoIHRvIGNvbSIpCiAgICBzeXMuZXhpdCgpCgpwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tcG9ydCIpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tc29mdHdhcmUiKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWZpbGVOYW1lIikKYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKcG9ydCA9IGFyZ3MucG9ydApzb2Z0d2FyZSA9IGFyZ3Muc29mdHdhcmUKZmlsZU5hbWUgPSBhcmdzLmZpbGVOYW1lCnBvcnRzID0gZ2xvYi5nbG9iKCcvZGV2L3R0eVtBLVphLXpdKicpCgppZiBwb3J0IG5vdCBpbiBwb3J0czoKICAgIHN5cy5leGl0KDEpCgppZiAoc29mdHdhcmUgPT0gIm1hdGxhYiIpOgogICAgbWF0bGFiSW5zdGFuY2UgPSBtYXRsYWIuZW5naW5lLmNvbm5lY3RfbWF0bGFiKG1hdGxhYi5lbmdpbmUuZmluZF9tYXRsYWIoKVswXSkKICAgIG1hdGxhYkluc3RhbmNlLnNldF9wYXJhbShmaWxlTmFtZSwnU2ltdWxhdGlvbkNvbW1hbmQnLCdzdG9wJyxuYXJnb3V0PTApCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIG1hdGxhYkluc3RhbmNlLnF1aXQoKQo8fGZpbV9lbmR8Pg=="]
["2e0066d6de1d7dd056e872168f34b81b6fefdbc0-2","2e0066d6de1d7dd056e872168f34b81b6fefdbc0","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCmRlZiBjYWxjQ3JjKCBtc2cgKToKICAgICAgICAiVnlwb2NldCBjaGVja3N1bXUiCiAgICAgICAgY3JjID0gMDsKICAgICAgICBmb3IgbGV0dGVyIGluIG1zZzogICAgICMgRmlyc3QgRXhhbXBsZQogICAgICAgICAgIGNyYyA9IGNyYyBeIG9yZChsZXR0ZXIpCiAgICAgICAgY3JjID0gZm9ybWF0KGNyYywgJ1gnKQogICAgICAgIHJldHVybiBjcmM7CgpkZWYgbWFrZUNvbW1hbmQoIG1zZyApOgogICAgICAgICJWeXR2b3JlbmllIHZldHkiCiAgICAgICAgdmV0YSA9IG1zZysnKicrY2FsY0NyYyhtc2cpKydcbicKICAgICAgICBmaW5hbCA9IGInJCcrc3RyLmVuY29kZSh2ZXRhKQogICAgICAgIHJldHVybiBmaW5hbDsKCmltcG9ydCBzZXJpYWwKaW1wb3J0IHN5cwppbXBvcnQgZ2xvYgppbXBvcnQgYXJncGFyc2UKaW1wb3J0IG1hdGxhYi5lbmdpbmUKCgoKaWYgbGVuKHN5cy5hcmd2KSA9PSAxOgogICAgcHJpbnQoImdpdmUgbWUgYSBwYXRoIHRvIGNvbSIpCiAgICBzeXMuZXhpdCgpCgpwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tcG9ydCIpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tc29mdHdhcmUiKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWZpbGVOYW1lIikKYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKcG9ydCA9IGFyZ3MucG9ydApzb2Z0d2FyZSA9IGFyZ3Muc29mdHdhcmUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpmaWxlTmFtZSA9IGFyZ3MuZmlsZU5hbWUKcG9ydHMgPSBnbG9iLmdsb2IoJy9kZXYvdHR5W0EtWmEtel0qJykKCmlmIHBvcnQgbm90IGluIHBvcnRzOgo8fGZpbV9lbmR8Pg=="]
["2e0066d6de1d7dd056e872168f34b81b6fefdbc0-3","2e0066d6de1d7dd056e872168f34b81b6fefdbc0","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCmRlZiBjYWxjQ3JjKCBtc2cgKToKICAgICAgICAiVnlwb2NldCBjaGVja3N1bXUiCiAgICAgICAgY3JjID0gMDsKICAgICAgICBmb3IgbGV0dGVyIGluIG1zZzogICAgICMgRmlyc3QgRXhhbXBsZQogICAgICAgICAgIGNyYyA9IGNyYyBeIG9yZChsZXR0ZXIpCiAgICAgICAgY3JjID0gZm9ybWF0KGNyYywgJ1gnKQogICAgICAgIHJldHVybiBjcmM7CgpkZWYgbWFrZUNvbW1hbmQoIG1zZyApOgogICAgICAgICJWeXR2b3JlbmllIHZldHkiCiAgICAgICAgdmV0YSA9IG1zZysnKicrY2FsY0NyYyhtc2cpKydcbicKICAgICAgICBmaW5hbCA9IGInJCcrc3RyLmVuY29kZSh2ZXRhKQogICAgICAgIHJldHVybiBmaW5hbDsKCmltcG9ydCBzZXJpYWwKaW1wb3J0IHN5cwppbXBvcnQgZ2xvYgppbXBvcnQgYXJncGFyc2UKaW1wb3J0IG1hdGxhYi5lbmdpbmUKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgppZiBsZW4oc3lzLmFyZ3YpID09IDE6CiAgICBwcmludCgiZ2l2ZSBtZSBhIHBhdGggdG8gY29tIikKPHxmaW1fZW5kfD4="]
["2e0066d6de1d7dd056e872168f34b81b6fefdbc0-4","2e0066d6de1d7dd056e872168f34b81b6fefdbc0","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCmRlZiBjYWxjQ3JjKCBtc2cgKToKICAgICAgICAiVnlwb2NldCBjaGVja3N1bXUiCiAgICAgICAgY3JjID0gMDsKICAgICAgICBmb3IgbGV0dGVyIGluIG1zZzogICAgICMgRmlyc3QgRXhhbXBsZQogICAgICAgICAgIGNyYyA9IGNyYyBeIG9yZChsZXR0ZXIpCiAgICAgICAgY3JjID0gZm9ybWF0KGNyYywgJ1gnKQogICAgICAgIHJldHVybiBjcmM7CgpkZWYgbWFrZUNvbW1hbmQoIG1zZyApOgogICAgICAgICJWeXR2b3JlbmllIHZldHkiCiAgICAgICAgdmV0YSA9IG1zZysnKicrY2FsY0NyYyhtc2cpKydcbicKICAgICAgICBmaW5hbCA9IGInJCcrc3RyLmVuY29kZSh2ZXRhKQogICAgICAgIHJldHVybiBmaW5hbDsKCmltcG9ydCBzZXJpYWwKaW1wb3J0IHN5cwppbXBvcnQgZ2xvYgppbXBvcnQgYXJncGFyc2UKaW1wb3J0IG1hdGxhYi5lbmdpbmUKCgoKaWYgbGVuKHN5cy5hcmd2KSA9PSAxOgogICAgcHJpbnQoImdpdmUgbWUgYSBwYXRoIHRvIGNvbSIpCiAgICBzeXMuZXhpdCgpCgpwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tcG9ydCIpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tc29mdHdhcmUiKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWZpbGVOYW1lIikKYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKcG9ydCA9IGFyZ3MucG9ydApzb2Z0d2FyZSA9IGFyZ3Muc29mdHdhcmUKZmlsZU5hbWUgPSBhcmdzLmZpbGVOYW1lCnBvcnRzID0gZ2xvYi5nbG9iKCcvZGV2L3R0eVtBLVphLXpdKicpCgppZiBwb3J0IG5vdCBpbiBwb3J0czoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgc3lzLmV4aXQoMSkKCjx8ZmltX2VuZHw+"]
["6b640a63386846cf4107e242ee6e43b3af3bb3a2-1","6b640a63386846cf4107e242ee6e43b3af3bb3a2","PHxmaW1fcHJlZml4fD4KZnJvbSBhbWl0b29scy52YW1vcy5tYWNoaW5lLm9wY29kZXMgaW1wb3J0IG9wX2ptcAoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgTWFrZUZ1bmNzKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgbWVtKToKICAgICAgICBzZWxmLm1lbSA9IG1lbQoKPHxmaW1fZW5kfD4="]
["6b640a63386846cf4107e242ee6e43b3af3bb3a2-2","6b640a63386846cf4107e242ee6e43b3af3bb3a2","PHxmaW1fcHJlZml4fD4KZnJvbSBhbWl0b29scy52YW1vcy5tYWNoaW5lLm9wY29kZXMgaW1wb3J0IG9wX2ptcAo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLm1lbSA9IG1lbQoKICAgIGRlZiBtYWtlX2Z1bmN0aW9ucyhzZWxmLCBsaWJfYmFzZV9wdHIsIGZ1bmNfYXJyYXlfcHRyLCBkaXNwX2Jhc2VfcHRyPTApOgogICAgICAgICIiIkV4ZWMncyBNYWtlRnVuY3Rpb25zKCkgY2FsbAoKICAgICAgIHJldHVybnMgdGFibGUgc2l6ZSBpbiBieXRlcwogICAgIiIiCiAgICAgICAgc2l6ZSA9IDAKICAgICAgICBzcmNfcHRyID0gZnVuY19hcnJheV9wdHIKICAgICAgICBkc3RfcHRyID0gbGliX2Jhc2VfcHRyIC0gNgogICAgICAgIGlmIGRpc3BfYmFzZV9wdHIgIT0gMDoKICAgICAgICAgICAgIyB3b3JkIG9mZnNldCB0YWJsZQogICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2VsZi5tZW0ucjE2cyhzcmNfcHRyKQogICAgICAgICAgICAgICAgaWYgb2Zmc2V0ID09IC0xOgogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICBhZGRyID0gZGlzcF9iYXNlX3B0ciArIG9mZnNldAogICAgICAgICAgICAgICAgc2VsZi5tZW0udzE2KGRzdF9wdHIsIG9wX2ptcCkKICAgICAgICAgICAgICAgIHNlbGYubWVtLnczMihkc3RfcHRyICsgMiwgYWRkcikKICAgICAgICAgICAgICAgIHNpemUgKz0gNgogICAgICAgICAgICAgICAgc3JjX3B0ciArPSAyCiAgICAgICAgICAgICAgICBkc3RfcHRyIC09IDYKICAgICAgICBlbHNlOgogICAgICAgICAgICAjIHBvaW50ZXIgdGFibGUKICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgIGFkZHIgPSBzZWxmLm1lbS5yMzIoc3JjX3B0cikKICAgICAgICAgICAgICAgIGlmIGFkZHIgPT0gMHhGRkZGRkZGRjoKICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgc2VsZi5tZW0udzE2KGRzdF9wdHIsIG9wX2ptcCkKICAgICAgICAgICAgICAgIHNlbGYubWVtLnczMihkc3RfcHRyICsgMiwgYWRkcikKICAgICAgICAgICAgICAgIHNpemUgKz0gNgogICAgICAgICAgICAgICAgc3JjX3B0ciArPSA0CiAgICAgICAgICAgICAgICBkc3RfcHRyIC09IDYKICAgICAgICByZXR1cm4gc2l6ZQo8fGZpbV9zdWZmaXh8PgoKCmNsYXNzIE1ha2VGdW5jcyhvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lbSk6Cjx8ZmltX2VuZHw+"]
["bf4529e57e27ad9d15cf47575aff566c8d16d765-1","bf4529e57e27ad9d15cf47575aff566c8d16d765","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgZW5jb2Rpbmc6IHV0Zi04CiIiIgpAZmlsZTogbW9kaWZpZWRfY2FtX2NsYXlfbW9kZWwucHkKQHRpbWU6IDIwMTkvMTEvOSAyMTozNgo8fGZpbV9ob2xlfD4KIiIiCgppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBtYXRwbG90bGliIGltcG9ydCBweXBsb3QgYXMgcGx0CmltcG9ydCBvcwppbXBvcnQgbWF0aApmcm9tIE1DQ1V0aWwgaW1wb3J0IE1vZGlmaWVkQ2FtQ2xheSwgbG9hZGluZ1BhdGhSZWFkZXIKCgojIGluaXRpYXRpb24KIyBtYXRlcmlhbCBwcm9wZXJ0aWVzCicnJwpsOiB0aGUgc2xvcGUgb2YgdGhlIGUtbG5wIGxpbmUKazogdGhlIHNsb3BlIG9mIHRoZSB1bmxvYWQgZS1sbnAgbGluZQpOOiB0aGUgeSBjb29yZGluYXRlIG9mIHRoZSBuYXR1cmFsIGNvbnNvbGlkYXRpb24gbGluZSAoZS1sbnApCk06IHRoZSBxL3AgcmF0aW8gYXQgdGhlIGNyaXRpY2FsIHN0YXRlCnBvaXNuOiB0aGUgcG9pc24gcmF0aW8KJycnCgojIFtsLCBrLCBNLCBwb2lzbiwgTl0gPSBbMC4yLCAwLjA0LCAwLjk1LCAwLjE1LCAyLjVdCltsLCBrLCBNLCBwb2lzbiwgTl0gPSBbMC4wNzcsIDAuMDQsIDEuMiwgMC4zLCAxLjc4OF0KCiMgaW5pdGlhbCBzdGF0ZQpwYyA9IDIwMCAgIyBjb25zb2xpZGF0aW9uIHByZXNzdXJlIOWJjeacn+Wbuue7k+WOi+WKmwpwMCA9IDIwMS4gICMgY29uZmluaW5nIHByZXNzdXJlIOWbtOWOiwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIERlYnVnICYmIGJhc2VsaW5lCiMgbG9hZE1vZGUgPSAnZHJhaW5lZCcgICMgJ2RyYWluZWQnICd1bmRyYWluZWQnCiMgZHJpdmVyID0gTW9kaWZpZWRDYW1DbGF5KE49TiwgbGFtYmRhX2U9bCwgcGM9cGMsCiMgICAgICAgICAga2FwcGFfZT1rLCBwMD1wMCwgcG9pc249cG9pc24sIGxvYWRNb2RlPWxvYWRNb2RlLCBNPU0sIGRpbWVuc2lvbk51bT0yKQojIGRyaXZlci5mb3J3YXJkKCkKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBBcHBsaWNhdGlvbgpsb2FkUGF0aExpc3QgPSBsb2FkaW5nUGF0aFJlYWRlcigpCmxvYWRNb2RlID0gJ3JhbmRvbScKZm9yIGksIHBhdGggaW4gZW51bWVyYXRlKGxvYWRQYXRoTGlzdCk6CiAgICBkcml2ZXIgPSBNb2RpZmllZENhbUNsYXkoTj1OLCBsYW1iZGFfZT1sLCBwYz1wYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYXBwYV9lPWssIHAwPXAwLCBwb2lzbj1wb2lzbiwgbG9hZE1vZGU9bG9hZE1vZGUsIE09TSwgZGltZW5zaW9uTnVtPTIpCiAgICBkcml2ZXIuZm9yd2FyZChudW1JbmRleD1pLCBwYXRoPXBhdGgpCjx8ZmltX3N1ZmZpeHw+CkBlbWFpbDogZ3VhbnNoYW9oZW5nQHFxLmNvbQpAYXBwbGljYXRpb27vvJoKICAgICAgICAgICAgICAgICAxLuagueaNruS/ruato+WJkeahpeaooeWei+iuoeeul+W6lOWKm+W6lOWPmAogICAgICAgICAgICAgICAgIDIu5bi46KeE5LiJ6L20KGRyYWluZWQgJiB1bmRyYWluZWQpCjx8ZmltX2VuZHw+"]
["e771a1c57e62fff24afa42b3db5f8eab32a9c677-1","e771a1c57e62fff24afa42b3db5f8eab32a9c677",{"$cut":{"chars":21236,"head":"PHxmaW1fcHJlZml4fD4KIyMjCiMgQ29weXJpZ2h0IChjKSAyMDIxLCBudnogPGh0dHBzOi8vZ2l0aHViLmNvbS9lbnZlZXplZT4KIyBBbGwgcmlnaHRzIHJlc2VydmVkLgojCiMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CiMKIyAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAojICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KIyAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAojICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KIyAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgbm9yIHRoZSBuYW1lIG9mCiMgICAgIGNvbnRyaWJ1dG9ycyB0byB0aGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwojICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gY29uc2VudC4KIwojIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgojIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQojIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCiMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgojIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCiMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIyMjCmZyb20ganNvbiBpbXBvcnQgbG9hZHMsIEpTT05EZWNvZGVFcnJvcgpmcm9tIHJlIGltcG9ydCBmaW5kYWxsCjx8ZmltX2hvbGV8PgppbXBvcnQgc3VweWJvdC5pcmNtc2dzIGFzIGlyY21zZ3MKaW1wb3J0IHN1cHlib3QuY2FsbGJhY2tzIGFzIGNhbGxiYWNrcwppbXBvcnQgc3VweWJvdC5sb2cgYXMgbG9nCgojIExpc3Qgb2YgbGlzdHMgY29udGFpbmluZyB2YWxpZCBib29rIG5hbWVzIHRvIG1hdGNoIGFnYWluc3QuCkJvb2tzID0gWwogICAgIyAqIEluY2x1ZGUgYWx0ZXJuYXRlIHNob3J0IG5hbWVzIHRoYXQgYXJlbid0IHN0YXJ0c3dpdGgoKSBvZiBhY3R1YWwgbmFtZS4KICAgICMgISBMYXN0IGVudHJ5IG9mIHRoZSBsaXN0IHNob3VsZCBiZSB0aGUgb25lIHlvdSB3YW50IHRoZSBBUEkgdG8gdXNlLgogICAgWydBdCcsJ0FjdHMnXSwgWydBbW9zJ10sIFsnQmFydWNoJ10sIFsnQ2FudGljbGVzJ10sIFsnMUNocm9uaWNsZXMnXSwgCiAgICBbJzJDaHJvbmljbGVzJ10sIFsnQ29sb3NzaWFucyddLCBbJzFDb3JpbnRoaWFucyddLCBbJzJDb3JpbnRoaWFucyddLCAKICAgIFsnRG4nLCdEYW5pZWwnXSwgWydEdCcsJ0RldXRlcm9ub215J10sIFsnRWNjbGVzaWFzdGVzJ10sIFsnRXBoZXNpYW5zJ10sIAogICAgWydFc3RoZXInXSwgWydFeG9kdXMnXSwgWydFemVraWVsJ10sIFsnRXInLCdFenJhJ10sIFsnR2FsYXRpYW5zJ10sIAogICAgWydHbicsJ0dlbmVzaXMnXSwgWydIYicsJ0hhYmFra3VrJ10sIFsnSGcnLCdIYWdnYWknXSwgWydIb3NlYSddLCAKICAgIFsnSXNhaWFoJ10sIFsnSmFtZXMnXSwgWydKYicsJ0pvYiddLCBbJ0pkJywnSnVkZSddLCBbJ0plcmVtaWFoJ10sIAogICAgWydKZycsJ0p1ZGdlcyddLCBbJ0psJywnSm9lbCddLCBbJ0puJywnSm9obiddLCBbJzFKbicsJzFKb2huJ10sIAogICAgWycySm4nLCcySm9obiddLCBbJzNKbicsJzNKb2huJ10sIFsnSm9uYWgnXSwgWydKcycsJ0pvc2h1YSddLCBbJzFLaW5ncyddLCAKICAgIFsnMktpbmdzJ10sIFsnTG0nLCdMYW1lbnRhdGlvbnMnXSwgWydMdicsJ0xldml0aWN1cyddLCBbJ0xrJywnTHVrZSddLCAKICAgIFsnMU1hY2NhYmVlcyddLCBbJzJNYWNjYWJlZXMnXSwgWydNYWxhY2hpJ10sIFsnTWljYWgnXSwgWydNaycsJ01hcmsnXSwgCiAgICBbJ010JywnTWF0dGhldyddLCBbJ05haHVtJ10sIFsnTmVoZW1pYWgnXSwgWydOYicsJ05tJywnTnVtYmVycyddLCAKICAgIFsnT2JhZGlhaCddLCBbJzFQZXRlciddLCBbJzJQZXRlciddLCBbJ1BoaWxpcHBpYW5zJ10sIFsnUG0nLCdQaGlsZW1vbiddLCAKICAgIFsnUHYnLCdQcnYnLCdQcm92ZXJicyddLCBbJ1BzbScsJ1BzYWxtcyddLCBbJ1JlJywnUmV2ZWxhdGlvbiddLCBbJ1JvbWFucyddLCAKICAgIFsnUnRoJywnUnV0aCddLCBbJ1NpcmFjaCddLCBbJzFTbScsJzFTYW11ZWwnXSwgWycyU20nLCcyU2FtdWVsJ10sIAogICAgWydTb25nb2ZTb2xvbW9u"}}]
["e771a1c57e62fff24afa42b3db5f8eab32a9c677-2","e771a1c57e62fff24afa42b3db5f8eab32a9c677",{"$cut":{"chars":18908,"head":"PHxmaW1fcHJlZml4fD4KIyMjCiMgQ29weXJpZ2h0IChjKSAyMDIxLCBudnogPGh0dHBzOi8vZ2l0aHViLmNvbS9lbnZlZXplZT4KIyBBbGwgcmlnaHRzIHJlc2VydmVkLgojCiMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CiMKIyAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAojICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KIyAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAojICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KIyAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgbm9yIHRoZSBuYW1lIG9mCiMgICAgIGNvbnRyaWJ1dG9ycyB0byB0aGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwojICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gY29uc2VudC4KIwojIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgojIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQojIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCiMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgojIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCiMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIyMjCmZyb20ganNvbiBpbXBvcnQgbG9hZHMsIEpTT05EZWNvZGVFcnJvcgpmcm9tIHJlIGltcG9ydCBmaW5kYWxsCmZyb20gdXJsbGliLmVycm9yIGltcG9ydCBIVFRQRXJyb3IKZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgUmVxdWVzdCwgdXJsb3BlbgoKZnJvbSBzdXB5Ym90LmNvbW1hbmRzIGltcG9ydCAqCmltcG9ydCBzdXB5Ym90LmlyY21zZ3MgYXMgaXJjbXNncwppbXBvcnQgc3VweWJvdC5jYWxsYmFja3MgYXMgY2FsbGJhY2tzCmltcG9ydCBzdXB5Ym90LmxvZyBhcyBsb2cKCiMgTGlzdCBvZiBsaXN0cyBjb250YWluaW5nIHZhbGlkIGJvb2sgbmFtZXMgdG8gbWF0Y2ggYWdhaW5zdC4KQm9va3MgPSBbCiAgICAjICogSW5jbHVkZSBhbHRlcm5hdGUgc2hvcnQgbmFtZXMgdGhhdCBhcmVuJ3Qgc3RhcnRzd2l0aCgpIG9mIGFjdHVhbCBuYW1lLgogICAgIyAhIExhc3QgZW50cnkgb2YgdGhlIGxpc3Qgc2hvdWxkIGJlIHRoZSBvbmUgeW91IHdhbnQgdGhlIEFQSSB0byB1c2UuCiAgICBbJ0F0JywnQWN0cyddLCBbJ0Ftb3MnXSwgWydCYXJ1Y2gnXSwgWydDYW50aWNsZXMnXSwgWycxQ2hyb25pY2xlcyddLCAKICAgIFsnMkNocm9uaWNsZXMnXSwgWydDb2xvc3NpYW5zJ10sIFsnMUNvcmludGhpYW5zJ10sIFsnMkNvcmludGhpYW5zJ10sIAogICAgWydEbicsJ0RhbmllbCddLCBbJ0R0JywnRGV1dGVyb25vbXknXSwgWydFY2NsZXNpYXN0ZXMnXSwgWydFcGhlc2lhbnMnXSwgCiAgICBbJ0VzdGhlciddLCBbJ0V4b2R1cyddLCBbJ0V6ZWtpZWwnXSwgWydFcicsJ0V6cmEnXSwgWydHYWxhdGlhbnMnXSwgCiAgICBbJ0duJywnR2VuZXNpcyddLCBbJ0hiJywnSGFiYWtrdWsnXSwgWydIZycsJ0hhZ2dhaSddLCBbJ0hvc2VhJ10sIAogICAgWydJc2FpYWgnXSwgWydKYW1lcyddLCBbJ0piJywnSm9iJ10sIFsnSmQnLCdKdWRlJ10sIFsnSmVyZW1pYWgnXSwgCiAgICBbJ0pnJywnSnVkZ2VzJ10sIFsnSmwnLCdKb2VsJ10sIFsnSm4nLCdKb2huJ10sIFsnMUpuJywnMUpvaG4nXSwgCiAgICBbJzJKbicsJzJKb2huJ10sIFsnM0puJywnM0pvaG4nXSwgWydKb25haCddLCBbJ0pzJywnSm9zaHVhJ10sIFsnMUtpbmdzJ10sIAogICAgWycyS2luZ3MnXSwgWydMbScsJ0xhbWVudGF0aW9ucyddLCBbJ0x2JywnTGV2aXRpY3VzJ10sIFsnTGsnLCdMdWtlJ10sIAogICAgWycxTWFjY2FiZWVzJ10sIFsnMk1hY2NhYmVlcyddLCBbJ01hbGFjaGknXSwgWydNaWNhaCddLCBbJ01rJywnTWFyayddLCAKICAgIFsnTXQnLCdNYXR0aGV3J10sIFsnTmFodW0nXSwgWydOZWhlbWlhaCddLCBbJ05iJywnTm0nLCdOdW1iZXJzJ10sIAogICAgWydPYmFkaWFoJ10sIFsnMVBldGVyJ10sIFsnMlBldGVyJ10sIFsnUGhpbGlwcGlhbnMnXSwgWydQbScsJ1BoaWxlbW9uJ10sIAogICAgWydQdicsJ1BydicsJ1Byb3ZlcmJzJ10sIFsnUHNtJywnUHNhbG1zJ10sIFsnUmUnLCdSZXZlbGF0aW9uJ10sIFsnUm9t"}}]
["e771a1c57e62fff24afa42b3db5f8eab32a9c677-3","e771a1c57e62fff24afa42b3db5f8eab32a9c677",{"$cut":{"chars":21236,"head":"PHxmaW1fcHJlZml4fD4KIyMjCiMgQ29weXJpZ2h0IChjKSAyMDIxLCBudnogPGh0dHBzOi8vZ2l0aHViLmNvbS9lbnZlZXplZT4KIyBBbGwgcmlnaHRzIHJlc2VydmVkLgojCiMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CiMKIyAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAojICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KIyAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAojICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KIyAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgbm9yIHRoZSBuYW1lIG9mCiMgICAgIGNvbnRyaWJ1dG9ycyB0byB0aGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwojICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gY29uc2VudC4KPHxmaW1faG9sZXw+CiMgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQojIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgojIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwojIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCiMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQojIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgojIyMKZnJvbSBqc29uIGltcG9ydCBsb2FkcywgSlNPTkRlY29kZUVycm9yCmZyb20gcmUgaW1wb3J0IGZpbmRhbGwKZnJvbSB1cmxsaWIuZXJyb3IgaW1wb3J0IEhUVFBFcnJvcgpmcm9tIHVybGxpYi5yZXF1ZXN0IGltcG9ydCBSZXF1ZXN0LCB1cmxvcGVuCgpmcm9tIHN1cHlib3QuY29tbWFuZHMgaW1wb3J0ICoKaW1wb3J0IHN1cHlib3QuaXJjbXNncyBhcyBpcmNtc2dzCmltcG9ydCBzdXB5Ym90LmNhbGxiYWNrcyBhcyBjYWxsYmFja3MKaW1wb3J0IHN1cHlib3QubG9nIGFzIGxvZwoKIyBMaXN0IG9mIGxpc3RzIGNvbnRhaW5pbmcgdmFsaWQgYm9vayBuYW1lcyB0byBtYXRjaCBhZ2FpbnN0LgpCb29rcyA9IFsKICAgICMgKiBJbmNsdWRlIGFsdGVybmF0ZSBzaG9ydCBuYW1lcyB0aGF0IGFyZW4ndCBzdGFydHN3aXRoKCkgb2YgYWN0dWFsIG5hbWUuCiAgICAjICEgTGFzdCBlbnRyeSBvZiB0aGUgbGlzdCBzaG91bGQgYmUgdGhlIG9uZSB5b3Ugd2FudCB0aGUgQVBJIHRvIHVzZS4KICAgIFsnQXQnLCdBY3RzJ10sIFsnQW1vcyddLCBbJ0JhcnVjaCddLCBbJ0NhbnRpY2xlcyddLCBbJzFDaHJvbmljbGVzJ10sIAogICAgWycyQ2hyb25pY2xlcyddLCBbJ0NvbG9zc2lhbnMnXSwgWycxQ29yaW50aGlhbnMnXSwgWycyQ29yaW50aGlhbnMnXSwgCiAgICBbJ0RuJywnRGFuaWVsJ10sIFsnRHQnLCdEZXV0ZXJvbm9teSddLCBbJ0VjY2xlc2lhc3RlcyddLCBbJ0VwaGVzaWFucyddLCAKICAgIFsnRXN0aGVyJ10sIFsnRXhvZHVzJ10sIFsnRXpla2llbCddLCBbJ0VyJywnRXpyYSddLCBbJ0dhbGF0aWFucyddLCAKICAgIFsnR24nLCdHZW5lc2lzJ10sIFsnSGInLCdIYWJha2t1ayddLCBbJ0hnJywnSGFnZ2FpJ10sIFsnSG9zZWEnXSwgCiAgICBbJ0lzYWlhaCddLCBbJ0phbWVzJ10sIFsnSmInLCdKb2InXSwgWydKZCcsJ0p1ZGUnXSwgWydKZXJlbWlhaCddLCAKICAgIFsnSmcnLCdKdWRnZXMnXSwgWydKbCcsJ0pvZWwnXSwgWydKbicsJ0pvaG4nXSwgWycxSm4nLCcxSm9obiddLCAKICAgIFsnMkpuJywnMkpvaG4nXSwgWyczSm4nLCczSm9obiddLCBbJ0pvbmFoJ10sIFsnSnMnLCdKb3NodWEnXSwgWycxS2luZ3MnXSwgCiAgICBbJzJLaW5ncyddLCBbJ0xtJywnTGFtZW50YXRpb25zJ10sIFsnTHYnLCdMZXZpdGljdXMnXSwgWydMaycsJ0x1a2UnXSwgCiAgICBbJzFNYWNjYWJlZXMnXSwgWycyTWFjY2FiZWVzJ10sIFsnTWFsYWNoaSddLCBbJ01pY2FoJ10sIFsnTWsnLCdNYXJrJ10sIAogICAgWydNdCcsJ01hdHRoZXcnXSwgWydOYWh1bSddLCBbJ05laGVtaWFoJ10sIFsnTmInLCdObScsJ051bWJlcnMnXSwgCiAgICBbJ09iYWRpYWgnXSwgWycxUGV0ZXInXSwgWycyUGV0ZXInXSwgWydQaGlsaXBwaWFucyddLCBbJ1BtJywnUGhpbGVtb24nXSwgCiAgICBbJ1B2JywnUHJ2JywnUHJvdmVyYnMnXSwgWydQc20nLCdQc2FsbXMnXSwgWydSZScsJ1JldmVsYXRpb24nXSwgWydSb21hbnMnXSwgCiAgICBbJ1J0aCcsJ1J1dGgnXSwgWydTaXJhY2gnXSwgWycxU20nLCcxU2FtdWVsJ10sIFsnMlNtJywnMlNhbXVlbCddLCAKICAgIFsnU29uZ29mU29sb21vbiddLCBbJzFUaGVzc2Fsb25pYW5zJ10sIFsnMlRoZXNzYWxvbmlhbnMnXSwgCiAgICBbJzFUbScsJzFUaW1vdGh5J10sIFsnMlRtJywnMlRpbW90aHknXSwgWydUb2JpdCddLCBbJ1R0JywnVGl0dXMnXSwgCiAgICBb"}}]
["e771a1c57e62fff24afa42b3db5f8eab32a9c677-4","e771a1c57e62fff24afa42b3db5f8eab32a9c677",{"$cut":{"chars":21236,"head":"PHxmaW1fcHJlZml4fD4KIyMjCiMgQ29weXJpZ2h0IChjKSAyMDIxLCBudnogPGh0dHBzOi8vZ2l0aHViLmNvbS9lbnZlZXplZT4KIyBBbGwgcmlnaHRzIHJlc2VydmVkLgojCiMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CiMKIyAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAojICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KIyAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAojICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KIyAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgbm9yIHRoZSBuYW1lIG9mCiMgICAgIGNvbnRyaWJ1dG9ycyB0byB0aGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwojICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gY29uc2VudC4KIwojIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgojIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQojIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCiMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgojIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCiMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIyMjCmZyb20ganNvbiBpbXBvcnQgbG9hZHMsIEpTT05EZWNvZGVFcnJvcgpmcm9tIHJlIGltcG9ydCBmaW5kYWxsCmZyb20gdXJsbGliLmVycm9yIGltcG9ydCBIVFRQRXJyb3IKZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgUmVxdWVzdCwgdXJsb3BlbgoKZnJvbSBzdXB5Ym90LmNvbW1hbmRzIGltcG9ydCAqCmltcG9ydCBzdXB5Ym90LmlyY21zZ3MgYXMgaXJjbXNncwppbXBvcnQgc3VweWJvdC5jYWxsYmFja3MgYXMgY2FsbGJhY2tzCmltcG9ydCBzdXB5Ym90LmxvZyBhcyBsb2cKCiMgTGlzdCBvZiBsaXN0cyBjb250YWluaW5nIHZhbGlkIGJvb2sgbmFtZXMgdG8gbWF0Y2ggYWdhaW5zdC4KQm9va3MgPSBbCiAgICAjICogSW5jbHVkZSBhbHRlcm5hdGUgc2hvcnQgbmFtZXMgdGhhdCBhcmVuJ3Qgc3RhcnRzd2l0aCgpIG9mIGFjdHVhbCBuYW1lLgogICAgIyAhIExhc3QgZW50cnkgb2YgdGhlIGxpc3Qgc2hvdWxkIGJlIHRoZSBvbmUgeW91IHdhbnQgdGhlIEFQSSB0byB1c2UuCiAgICBbJ0F0JywnQWN0cyddLCBbJ0Ftb3MnXSwgWydCYXJ1Y2gnXSwgWydDYW50aWNsZXMnXSwgWycxQ2hyb25pY2xlcyddLCAKICAgIFsnMkNocm9uaWNsZXMnXSwgWydDb2xvc3NpYW5zJ10sIFsnMUNvcmludGhpYW5zJ10sIFsnMkNvcmludGhpYW5zJ10sIAogICAgWydEbicsJ0RhbmllbCddLCBbJ0R0JywnRGV1dGVyb25vbXknXSwgWydFY2NsZXNpYXN0ZXMnXSwgWydFcGhlc2lhbnMnXSwgCiAgICBbJ0VzdGhlciddLCBbJ0V4b2R1cyddLCBbJ0V6ZWtpZWwnXSwgWydFcicsJ0V6cmEnXSwgWydHYWxhdGlhbnMnXSwgCiAgICBbJ0duJywnR2VuZXNpcyddLCBbJ0hiJywnSGFiYWtrdWsnXSwgWydIZycsJ0hhZ2dhaSddLCBbJ0hvc2VhJ10sIAogICAgWydJc2FpYWgnXSwgWydKYW1lcyddLCBbJ0piJywnSm9iJ10sIFsnSmQnLCdKdWRlJ10sIFsnSmVyZW1pYWgnXSwgCiAgICBbJ0pnJywnSnVkZ2VzJ10sIFsnSmwnLCdKb2VsJ10sIFsnSm4nLCdKb2huJ10sIFsnMUpuJywnMUpvaG4nXSwgCiAgICBbJzJKbicsJzJKb2huJ10sIFsnM0puJywnM0pvaG4nXSwgWydKb25haCddLCBbJ0pzJywnSm9zaHVhJ10sIFsnMUtpbmdzJ10sIAogICAgWycyS2luZ3MnXSwgWydMbScsJ0xhbWVudGF0aW9ucyddLCBbJ0x2JywnTGV2aXRpY3VzJ10sIFsnTGsnLCdMdWtlJ10sIAogICAgWycxTWFjY2FiZWVzJ10sIFsnMk1hY2NhYmVlcyddLCBbJ01hbGFjaGknXSwgWydNaWNhaCddLCBbJ01rJywnTWFyayddLCAKICAgIFsnTXQnLCdNYXR0aGV3J10sIFsnTmFodW0nXSwgWydOZWhlbWlhaCddLCBbJ05iJywnTm0nLCdOdW1iZXJzJ10sIAogICAgWydPYmFkaWFoJ10sIFsnMVBldGVyJ10sIFsnMlBldGVyJ10sIFsnUGhpbGlwcGlhbnMnXSwgWydQbScsJ1BoaWxlbW9uJ10sIAogICAgWydQdicsJ1BydicsJ1Byb3ZlcmJzJ10sIFsnUHNtJywnUHNhbG1zJ10sIFsnUmUnLCdSZXZlbGF0aW9uJ10sIFsnUm9t"}}]
["2e5f9f6990c37dfeb6e667e4d2076f0b5b12c646-2","2e5f9f6990c37dfeb6e667e4d2076f0b5b12c646","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCBpdGVydG9vbHMKaW1wb3J0IHBpY2tsZQppbXBvcnQgcnB5MgppbXBvcnQgcnB5Mi5yaW50ZXJmYWNlIGFzIHJpbnRlcmZhY2UKaW1wb3J0IHN5cywgb3MsIHN1YnByb2Nlc3MsIHRpbWUsIHRlbXBmaWxlLCBzaWduYWwKCklTX1BZVEhPTjMgPSBzeXMudmVyc2lvbl9pbmZvWzBdID09IDMKCnJpbnRlcmZhY2UuaW5pdHIoKQoKCgoKZGVmIG9ubHlBUVVBb3JXaW5kb3dzKGZ1bmN0aW9uKToKICAgIGRlZiByZXMoc2VsZik6CiAgICAgICAgcGxhdGZvcm0gPSByaW50ZXJmYWNlLmJhc2VlbnYuZ2V0KCcuUGxhdGZvcm0nKQogICAgICAgIHBsYXRmb3JtX2d1aSA9IFtlIGZvciBpLCBlIGluIGVudW1lcmF0ZShwbGF0Zm9ybS5kb19zbG90KCduYW1lcycpKSBpZiBlID09ICdHVUknXVswXQogICAgICAgIHBsYXRmb3JtX29zdHlwZSA9IFtlIGZvciBpLCBlIGluIGVudW1lcmF0ZShwbGF0Zm9ybS5kb19zbG90KCduYW1lcycpKSBpZiBlID09ICdPUy50eXBlJ11bMF0KICAgICAgICBpZiAocGxhdGZvcm1fZ3VpICE9ICdBUVVBJykgYW5kIChwbGF0Zm9ybV9vc3R5cGUgIT0gJ3dpbmRvd3MnKToKICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEZhbHNlKSAjIGNhbm5vdCBiZSB0ZXN0ZWQgb3V0c2lkZSBHVUk9PUFRVUEgb3IgT1MudHlwZT09d2luZG93cwogICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZWxmKQoKY2xhc3MgQ3VzdG9tRXhjZXB0aW9uKEV4Y2VwdGlvbik6CiAgICBwYXNzCgpjbGFzcyBFbWJlZGRlZFJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CgoKICAgIGRlZiB0ZXN0Q29uc29sZVByaW50KHNlbGYpOgogICAgICAgIHRtcF9maWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkKICAgICAgICBzdGRvdXQgPSBzeXMuc3Rkb3V0CiAgICAgICAgc3lzLnN0ZG91dCA9IHRtcF9maWxlCiAgICAgICAgdHJ5OgogICAgICAgICAgICByaW50ZXJmYWNlLmNvbnNvbGVQcmludCgnaGFoYScpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHN0ZG91dAogICAgICAgICAgICByYWlzZSBlCiAgICAgICAgc3lzLnN0ZG91dCA9IHN0ZG91dAogICAgICAgIHRtcF9maWxlLmZsdXNoKCkKICAgICAgICB0bXBfZmlsZS5zZWVrKDApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaGFoYScsICcnLmpvaW4ocy5kZWNvZGUoKSBmb3IgcyBpbiB0bXBfZmlsZSkpCiAgICAgICAgdG1wX2ZpbGUuY2xvc2UoKQoKCiAgICBkZWYgdGVzdENhbGxFcnJvcldoZW5FbmRlZFIoc2VsZik6CiAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA9PSAyIGFuZCBzeXMudmVyc2lvbl9pbmZvWzFdIDwgNjoKICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEZhbHNlKSAjIGNhbm5vdCBiZSB0ZXN0ZWQgd2l0aCBQeXRob24gPCAyLjYKICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCiAgICAgICAgZGVmIGZvbyhxdWV1ZSk6CiAgICAgICAgICAgIGltcG9ydCBycHkyLnJpbnRlcmZhY2UgYXMgcmludGVyZmFjZQogICAgICAgICAgICByZGF0ZSA9IHJpbnRlcmZhY2UuYmFzZWVudlsnZGF0ZSddCiAgICAgICAgICAgIHJpbnRlcmZhY2UuZW5kcigxKQogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICB0bXAgPSByZGF0ZSgpCiAgICAgICAgICAgICAgICByZXMgPSAoRmFsc2UsIE5vbmUpCiAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IsIHJlOgogICAgICAgICAgICAgICAgcmVzID0gKFRydWUsIHJlKQogICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgogICAgICAgICAgICAgICAgcmVzID0gKEZhbHNlLCBlKQogICAgICAgICAgICBxdWV1ZS5wdXQocmVzKQogICAgICAgIHEgPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUoKQogICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQgPSBmb28sIGFyZ3MgPSAocSwpKQogICAgICAgIHAuc3RhcnQoKQogICAgICAgIHJlcyA9IHEuZ2V0KCkKICAgICAgICBwLmpvaW4oKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNbMF0pCgogICAgZGVmIHRlc3RTdHJfdHlwZWludChzZWxmKToKICAgICAgICB0ID0gcmludGVyZmFjZS5iYXNlZW52WydsZXR0ZXJzJ10KICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdTVFJTWFAnLCByaW50ZXJmYWNlLnN0cl90eXBlaW50KHQudHlwZW9mKSkKICAgICAgICB0ID0gcmludGVyZmFjZS5iYXNlZW52WydwaSddCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnUkVBTFNYUCcsIHJpbnRlcmZhY2Uuc3RyX3R5cGVpbnQodC50eXBlb2YpKQoKICAgIGRlZiB0ZXN0U3RyX3R5cGVpbnRfaW52YWxpZChzZWxmKToKICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhMb29rdXBFcnJvciwgcmludGVyZmFjZS5zdHJfdHlwZWludCwgOTkpCgogICAgZGVmIHRlc3RHZXRfaW5pdG9wdGlvbnMoc2VsZik6CiAgICAgICAgb3B0aW9ucyA9IHJpbnRlcmZhY2UuZ2V0X2luaXRvcHRpb25zKCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyaW50ZXJmYWNlLmluaXRvcHRpb25zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4ob3B0aW9ucykpCiAgICAgICAgZm9yIG8xLCBvMiBpbiBpdGVydG9vbHMuaXppcChyaW50ZXJmYWNlLmluaXRvcHRpb25zLCBvcHRpb25zKToKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvMSwgbzIpCiAgICAgICAgCiAgICBkZWYgdGVzdFNldF9pbml0b3B0aW9ucyhzZWxmKToKICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHJpbnRlcmZhY2Uuc2V0X2luaXRvcHRpb25zLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2FhJywgJy0tdmVyYm9zZScsICctLW5vLXNhdmUnKSkKCiAgICBkZWYgdGVzdFBhcnNlKHNlbGYpOgogICAgICAgIHhwID0gcmludGVyZmFjZS5wYXJzZSgiMiArIDMiKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmludGVyZmFjZS5FWFBSU1hQLCB4cC50eXBlb2YpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLjAsIHhwWzBdWzFdWzBdKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMy4wLCB4cFswXVsyXVswXSkKCiAgICBkZWYgdGVzdFBhcnNlVW5pY29kZShzZWxmKToKICAgICAgICB4cCA9IHJpbnRlcmZhY2UucGFyc2UodSciXHUyMWE3IicpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oeHApKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHhwWzBdKSkKCiAgICBkZWYgdGVzdFJ0ZXJuYWxpemUoc2VsZik6CiAgICAgICAgZGVmIGYoeCwgeSk6CiAgICAgICAgICAgIHJldHVybiB4WzBdK3lbMF0KICAgICAgICByZnVuID0gcmludGVyZmFjZS5ydGVybmFsaXplKGYpCiAgICAgICAgcmVzID0gcmZ1bigxLCAyKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgcmVzWzBdKQoKCiAgICBkZWYgdGVzdEV4dGVybmFsUHl0aG9uKHNlbGYpOgogICAgICAgIGRlZiBmKHgpOgogICAgICAgICAgICByZXR1cm4gMwoKICAgICAgICBycHlfZnVuID0gcmludGVyZmFjZS5TZXhwRXh0UHRyKGYsIHRhZyA9IHJpbnRlcmZhY2UucHl0aG9uX3R5cGVfdGFnKQogICAgICAgIF9weXRob24gPSByaW50ZXJmYWNlLlN0clNleHBWZWN0b3IoKCcuUHl0aG9uJywgKSkKICAgICAgICByZXMgPSByaW50ZXJmYWNlLmJhc2VlbnZbJy5FeHRlcm5hbCddKF9weXRob24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycHlfZnVuLCAxKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgcmVzWzBdKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHJlcykpCgogICAgZGVmIHRlc3RFeHRlcm5hbFB5dGhvbkZyb21FeHByZXNzaW9uKHNlbGYpOgogICAgICAgIHhwX25hbWUgPSByaW50ZXJmYWNlLlN0clNleHBWZWN0b3IoKCdleHByZXNzaW9uJywpKQogICAgICAgIHhwID0gcmludGVyZmFjZS5iYXNlZW52Wyd2ZWN0b3InXSh4cF9uYW1lLCAzKQogICAgICAgIAogICAgICAgIAoKICAgIGRlZiB0ZXN0UGFyc2VJbnZhbGlkU3RyaW5nKHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJpbnRlcmZhY2UucGFyc2UsIDMpCgogICAgZGVmIHRlc3RJbnRlcnJ1cHRSKHNlbGYpOgogICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPT0gMiBhbmQgc3lzLnZlcnNpb25faW5mb1sxXSA8IDY6CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGYWxzZSkgIyBUZXN0IHVuaXQgY3VycmVudGx5IHJlcXVpcmVzIFB5dGhvbiA+PSAyLjYKICAgICAgICBycHlfY29kZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShtb2RlID0gJ3cnLCBzdWZmaXggPSAnLnB5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgPSBGYWxzZSkKICAgICAgICBycHkyX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUocnB5Mi5fX3BhdGhfX1swXSkKICAgICAgICBpZiBJU19QWVRIT04zOgogICAgICAgICAgICBweWV4Y2VwdGlvbl9hcyA9ICcgYXMnCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHlleGNlcHRpb25fYXMgPSAnLCcKCiAgICAgICAgcnB5X2NvZGVfc3RyID0gIiIiCmltcG9ydCBzeXMKc3lzLnBhdGguaW5zZXJ0KDAsICclcycpCmltcG9ydCBycHkyLnJpbnRlcmZhY2UgYXMgcmkKCnJpLmluaXRyKCkKZGVmIGYoeCk6CiAgcGFzcwpyaS5zZXRfd3JpdGVjb25zb2xlKGYpCnJjb2RlID0gImkgPC0gMDsgIgpyY29kZSArPSAid2hpbGUoVFJVRSkgeyAiCnJjb2RlICs9ICJpIDwtIGkrMTsgIgpyY29kZSArPSAiU3lzLnNsZWVwKDAuMDEpOyAiCnJjb2RlICs9ICJ9Igp0cnk6CiAgcmkuYmFzZWVudlsnZXZhbCddKHJpLnBhcnNlKHJjb2RlKSkKZXhjZXB0IEV4Y2VwdGlvbiVzIGU6CiAgc3lzLmV4aXQoMCkKICAiIiIgJShycHkyX3BhdGgsIHB5ZXhjZXB0aW9uX2FzKQoKICAgICAgICBycHlfY29kZS53cml0ZShycHlfY29kZV9zdHIpCiAgICAgICAgcnB5X2NvZGUuY2xvc2UoKQogICAgICAgIGNoaWxkX3Byb2MgPSBzdWJwcm9jZXNzLlBvcGVuKCgncHl0aG9uJywgcnB5X2NvZGUubmFtZSkpCiAgICAgICAgdGltZS5zbGVlcCgxKSAgIyByZXF1aXJlZCBmb3IgdGhlIFNJR0lOVCB0byBmdW5jdGlvbgogICAgICAgICMgKGFwcGVhcnMgbGlrZSBhIGJ1ZyB3LyBzdWJwcm9jZXNzKQogICAgICAgICMgKHRoZSBleGFjdCBzbGVlcCB0aW1lIG1pZ3RoIGJlIG1hY2hpbmUgZGVwZW5kZW50IDooICkKICAgICAgICBjaGlsZF9wcm9jLnNlbmRfc2lnbmFsKHNpZ25hbC5TSUdJTlQpCiAgICAgICAgdGltZS5zbGVlcCgxKSAgIyByZXF1aXJlZCBmb3IgdGhlIFNJR0lOVCB0byBmdW5jdGlvbgogICAgICAgIHJldF9jb2RlID0gY2hpbGRfcHJvYy5wb2xsKCkKICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJldF9jb2RlIGlzIE5vbmUpICMgSW50ZXJydXB0aW9uIGZhaWxlZAoKCmNsYXNzIENhbGxiYWNrc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICByaW50ZXJmYWNlLnNldF93cml0ZWNvbnNvbGUocmludGVyZmFjZS5jb25zb2xlUHJpbnQpCiAgICAgICAgcmludGVyZmFjZS5zZXRfcmVhZGNvbnNvbGUocmludGVyZmFjZS5jb25zb2xlUmVhZCkKICAgICAgICByaW50ZXJmYWNlLnNldF9yZWFkY29uc29sZShyaW50ZXJmYWNlLmNvbnNvbGVGbHVzaCkKICAgICAgICByaW50ZXJmYWNlLnNldF9jaG9vc2VmaWxlKHJpbnRlcmZhY2UuY2hvb3NlRmlsZSkKICAgICAgICBzeXMubGFzdF92YWx1ZSA9IE5vbmUKCiAgICBkZWYgdGVzdFNldFdyaXRlQ29uc29sZShzZWxmKToKICAgICAgICBidWYgPSBbXQogICAgICAgIGRlZiBmKHgpOgogICAgICAgICAgICBidWYuYXBwZW5kKHgpCgogICAgICAgIHJpbnRlcmZhY2Uuc2V0X3dyaXRlY29uc29sZShmKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmludGVyZmFjZS5nZXRfd3JpdGVjb25zb2xlKCksIGYpCiAgICAgICAgY29kZSA9IHJpbnRlcmZhY2UuU2V4cFZlY3RvcihbIjMiLCBdLCByaW50ZXJmYWNlLlNUUlNYUCkKICAgICAgICByaW50ZXJmYWNlLmJhc2VlbnZbInByaW50Il0oY29kZSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdbMV0gIjMiXG4nLCBzdHIuam9pbignJywgYnVmKSkKCiAgICBkZWYgdGVzdFdyaXRlQ29uc29sZVdpdGhFcnJvcihzZWxmKToKICAgICAgICBkZWYgZih4KToKICAgICAgICAgICAgcmFpc2UgQ3VzdG9tRXhjZXB0aW9uKCJEb2Vzbid0IHdvcmsuIikKICAgICAgICByaW50ZXJmYWNlLnNldF93cml0ZWNvbnNvbGUoZikKCiAgICAgICAgdG1wX2ZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQogICAgICAgIHN0ZGVyciA9IHN5cy5zdGRlcnIKICAgICAgICBzeXMuc3RkZXJyID0gdG1wX2ZpbGUKICAgICAgICB0cnk6CiAgICAgICAgICAgIGNvZGUgPSByaW50ZXJmYWNlLlNleHBWZWN0b3IoWyIzIiwgXSwgcmludGVyZmFjZS5TVFJTWFApCiAgICAgICAgICAgIHJpbnRlcmZhY2UuYmFzZWVudlsicHJpbnQiXShjb2RlKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CiAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBzdGRlcnIKICAgICAgICAgICAgcmFpc2UgZQogICAgICAgIHN5cy5zdGRlcnIgPSBzdGRlcnIKICAgICAgICB0bXBfZmlsZS5mbHVzaCgpCiAgICAgICAgdG1wX2ZpbGUuc2VlaygwKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkRvZXNuJ3Qgd29yay4iLCBzdHIoc3lzLmxhc3RfdmFsdWUpKQogICAgICAgICNlcnJvcnN0cmluZyA9ICcnLmpvaW4odG1wX2ZpbGUucmVhZGxpbmVzKCkpCiAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZShlcnJvcnN0cmluZy5zdGFydHN3aXRoKCdUcmFjZWJhY2snKSkKICAgICAgICAjdG1wX2ZpbGUuY2xvc2UoKQoKICAgIEBvbmx5QVFVQW9yV2luZG93cwogICAgZGVmIHRlc3RTZXRGbHVzaENvbnNvbGUoc2VsZik6CiAgICAgICAgZmx1c2ggPSB7J2NvdW50JzogMH0KICAgICAgICBkZWYgZigpOgogICAgICAgICAgICBmbHVzaFsnY291bnQnXSA9IGZsdXNoWydjb3VudCddICsgMQoKICAgICAgICByaW50ZXJmYWNlLnNldF9mbHVzaGNvbnNvbGUoZikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJpbnRlcmZhY2UuZ2V0X2ZsdXNoY29uc29sZSgpLCBmKQogICAgICAgIHJpbnRlcmZhY2UuYmFzZWVudi5nZXQoImZsdXNoLmNvbnNvbGUiKSgpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmbHVzaFsnY291bnQnXSkKICAgICAgICByaW50ZXJmYWNlLnNldF93cml0ZWNvbnNvbGUocmludGVyZmFjZS5jb25zb2xlRmx1c2gpCgogICAgQG9ubHlBUVVBb3JXaW5kb3dzCiAgICBkZWYgdGVzdEZsdXNoQ29uc29sZVdpdGhFcnJvcihzZWxmKToKICAgICAgICBkZWYgZihwcm9tcHQpOgogICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkRvZXNuJ3Qgd29yay4iKQogICAgICAgIHJpbnRlcmZhY2Uuc2V0X2ZsdXNoY29uc29sZShmKQoKICAgICAgICB0bXBfZmlsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCiAgICAgICAgc3RkZXJyID0gc3lzLnN0ZGVycgogICAgICAgIHN5cy5zdGRlcnIgPSB0bXBfZmlsZQogICAgICAgIHRyeToKICAgICAgICAgICAgcmVzID0gcmludGVyZmFjZS5iYXNlZW52LmdldCgiZmx1c2guY29uc29sZSIpKCkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgogICAgICAgICAgICBzeXMuc3RkZXJyID0gc3RkZXJyCiAgICAgICAgICAgIHJhaXNlIGUKICAgICAgICBzeXMuc3RkZXJyID0gc3RkZXJyCiAgICAgICAgdG1wX2ZpbGUuZmx1c2goKQogICAgICAgIHRtcF9maWxlLnNlZWsoMCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJEb2Vzbid0IHdvcmsuIiwgc3RyKHN5cy5sYXN0X3ZhbHVlKSkKICAgICAgICAjZXJyb3JzdHJpbmcgPSAnJy5qb2luKHRtcF9maWxlLnJlYWRsaW5lcygpKQogICAgICAgICNzZWxmLmFzc2VydFRydWUoZXJyb3JzdHJpbmcuc3RhcnRzd2l0aCgnVHJhY2ViYWNrJykpCiAgICAgICAgI3RtcF9maWxlLmNsb3NlKCkKCiAgICBkZWYgdGVzdFNldFJlYWRDb25zb2xlKHNlbGYpOgogICAgICAgIHllcyA9ICJ5ZXNcbiIKICAgICAgICBkZWYgc2F5eWVzKHByb21wdCk6CiAgICAgICAgICAgIHJldHVybiB5ZXMKICAgICAgICByaW50ZXJmYWNlLnNldF9yZWFkY29uc29sZShzYXl5ZXMpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyaW50ZXJmYWNlLmdldF9yZWFkY29uc29sZSgpLCBzYXl5ZXMpCiAgICAgICAgcmVzID0gcmludGVyZmFjZS5iYXNlZW52WyJyZWFkbGluZSJdKCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHllcy5zdHJpcCgpLCByZXNbMF0pCiAgICAgICAgcmludGVyZmFjZS5zZXRfcmVhZGNvbnNvbGUocmludGVyZmFjZS5jb25zb2xlUmVhZCkKCiAgICBkZWYgdGVzdFJlYWRDb25zb2xlV2l0aEVycm9yKHNlbGYpOgogICAgICAgIGRlZiBmKHByb21wdCk6CiAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRG9lc24ndCB3b3JrLiIpCiAgICAgICAgcmludGVyZmFjZS5zZXRfcmVhZGNvbnNvbGUoZikKCiAgICAgICAgdG1wX2ZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQoKICAgICAgICBzdGRlcnIgPSBzeXMuc3RkZXJyCiAgICAgICAgc3lzLnN0ZGVyciA9IHRtcF9maWxlCiAgICAgICAgdHJ5OgogICAgICAgICAgICByZXMgPSByaW50ZXJmYWNlLmJhc2VlbnZbInJlYWRsaW5lIl0oKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKICAgICAgICAgICAgc3lzLnN0ZGVyciA9IHN0ZGVycgogICAgICAgICAgICByYWlzZSBlCiAgICAgICAgc3lzLnN0ZGVyciA9IHN0ZGVycgo8fGZpbV9lbmR8Pg=="]
["82163b88d6eecfb438157b5d52022457fd1bc747-2","82163b88d6eecfb438157b5d52022457fd1bc747",{"$cut":{"chars":41300,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgaXRlcnRvb2xzCmltcG9ydCBzeXMKaW1wb3J0IHRpbWVpdAoKIyBUaGFua3MgdG8gaHR0cDovL3d3dy5taXQuZWR1L35lY3ByaWNlLyBmb3IgdGhlIHdvcmxkbGlzdCEKIyBEb3dubG9hZGVkIGZyb206IGh0dHA6Ly93d3cubWl0LmVkdS9+ZWNwcmljZS93b3JkbGlzdC4xMDAwMAoKd29yZHMgPSAiIiJhCmFhCmFhYQphYXJvbgphYgphYmFuZG9uZWQKYWJjCmFiZXJkZWVuCmFiaWxpdGllcwphYmlsaXR5CmFibGUKYWJvcmlnaW5hbAphYm9ydGlvbgphYm91dAphYm92ZQphYnJhaGFtCmFicm9hZAphYnMKYWJzZW5jZQphYnNlbnQKYWJzb2x1dGUKYWJzb2x1dGVseQphYnNvcnB0aW9uCmFic3RyYWN0CmFic3RyYWN0cwphYnUKYWJ1c2UKYWMKYWNhZGVtaWMKYWNhZGVtaWNzCmFjYWRlbXkKYWNjCmFjY2VudAphY2NlcHQKYWNjZXB0YWJsZQphY2NlcHRhbmNlCmFjY2VwdGVkCmFjY2VwdGluZwphY2NlcHRzCmFjY2VzcwphY2Nlc3NlZAphY2Nlc3NpYmlsaXR5CmFjY2Vzc2libGUKYWNjZXNzaW5nCmFjY2Vzc29yaWVzCmFjY2Vzc29yeQphY2NpZGVudAphY2NpZGVudHMKYWNjb21tb2RhdGUKYWNjb21tb2RhdGlvbgphY2NvbW1vZGF0aW9ucwphY2NvbXBhbmllZAphY2NvbXBhbnlpbmcKYWNjb21wbGlzaAphY2NvbXBsaXNoZWQKYWNjb3JkYW5jZQphY2NvcmRpbmcKYWNjb3JkaW5nbHkKYWNjb3VudAphY2NvdW50YWJpbGl0eQphY2NvdW50aW5nCmFjY291bnRzCmFjY3JlZGl0YXRpb24KYWNjcmVkaXRlZAphY2N1cmFjeQphY2N1cmF0ZQphY2N1cmF0ZWx5CmFjY3VzZWQKYWNkYmVudGl0eQphY2UKYWNlcgphY2hpZXZlCmFjaGlldmVkCmFjaGlldmVtZW50CmFjaGlldmVtZW50cwphY2hpZXZpbmcKYWNpZAphY2lkcwphY2tub3dsZWRnZQphY2tub3dsZWRnZWQKYWNtCmFjbmUKYWNvdXN0aWMKYWNxdWlyZQphY3F1aXJlZAphY3F1aXNpdGlvbgphY3F1aXNpdGlvbnMKYWNyZQphY3JlcwphY3JvYmF0CmFjcm9zcwphY3J5bGljCmFjdAphY3RpbmcKYWN0aW9uCmFjdGlvbnMKYWN0aXZhdGVkCmFjdGl2YXRpb24KYWN0aXZlCmFjdGl2ZWx5CmFjdGl2aXN0cwphY3Rpdml0aWVzCmFjdGl2aXR5CmFjdG9yCmFjdG9ycwphY3RyZXNzCmFjdHMKYWN0dWFsCmFjdHVhbGx5CmFjdXRlCmFkCmFkYQphZGFtCmFkYW1zCmFkYXB0YXRpb24KYWRhcHRlZAphZGFwdGVyCmFkYXB0ZXJzCmFkYXB0aXZlCmFkYXB0b3IKYWRkCmFkZGVkCmFkZGljdGlvbgphZGRpbmcKYWRkaXRpb24KYWRkaXRpb25hbAphZGRpdGlvbmFsbHkKYWRkaXRpb25zCmFkZHJlc3MKYWRkcmVzc2VkCmFkZHJlc3NlcwphZGRyZXNzaW5nCmFkZHMKYWRlbGFpZGUKYWRlcXVhdGUKYWRpZGFzCmFkaXBleAphZGphY2VudAphZGp1c3QKYWRqdXN0YWJsZQphZGp1c3RlZAphZGp1c3RtZW50CmFkanVzdG1lbnRzCmFkbWluCmFkbWluaXN0ZXJlZAphZG1pbmlzdHJhdGlvbgphZG1pbmlzdHJhdGl2ZQphZG1pbmlzdHJhdG9yCmFkbWluaXN0cmF0b3JzCmFkbWlzc2lvbgphZG1pc3Npb25zCmFkbWl0CmFkbWl0dGVkCmFkb2JlCmFkb2xlc2NlbnQKYWRvcHQKYWRvcHRlZAphZG9wdGlvbgphZHJpYW4KYWRzCmFkc2wKYWR1bHQKYWR1bHRzCmFkdmFuY2UKYWR2YW5jZWQKYWR2YW5jZW1lbnQKYWR2YW5jZXMKYWR2YW50YWdlCmFkdmFudGFnZXMKYWR2ZW50dXJlCmFkdmVudHVyZXMKYWR2ZXJzZQphZHZlcnQKYWR2ZXJ0aXNlCmFkdmVydGlzZW1lbnQKYWR2ZXJ0aXNlbWVudHMKYWR2ZXJ0aXNlcgphZHZlcnRpc2VycwphZHZlcnRpc2luZwphZHZpY2UKYWR2aXNlCmFkdmlzZWQKYWR2aXNvcgphZHZpc29ycwphZHZpc29yeQphZHZvY2FjeQphZHZvY2F0ZQphZHdhcmUKYWUKYWVyaWFsCmFlcm9zcGFjZQphZgphZmZhaXIKYWZmYWlycwphZmZlY3QKYWZmZWN0ZWQKYWZmZWN0aW5nCmFmZmVjdHMKYWZmaWxpYXRlCmFmZmlsaWF0ZWQKYWZmaWxpYXRlcwphZmZpbGlhdGlvbgphZmZvcmQKYWZmb3JkYWJsZQphZmdoYW5pc3RhbgphZnJhaWQKYWZyaWNhCmFmcmljYW4KYWZ0ZXIKYWZ0ZXJub29uCmFmdGVyd2FyZHMKYWcKYWdhaW4KYWdhaW5zdAphZ2UKYWdlZAphZ2VuY2llcwphZ2VuY3kKYWdlbmRhCmFnZW50CmFnZW50cwphZ2VzCmFnZ3JlZ2F0ZQphZ2dyZXNzaXZlCmFnaW5nCmFnbwphZ3JlZQphZ3JlZWQKYWdyZWVtZW50CmFncmVlbWVudHMKYWdyZWVzCmFncmljdWx0dXJhbAphZ3JpY3VsdHVyZQphaAphaGVhZAphaQphaWQKYWlkcwphaW0KYWltZWQKYWltcwphaXIKYWlyY3JhZnQKYWlyZmFyZQphaXJsaW5lCmFpcmxpbmVzCmFpcnBsYW5lCmFpcnBvcnQKYWlycG9ydHMKYWoKYWsKYWthCmFsCmFsYQphbGFiYW1hCmFsYW4KYWxhcm0KYWxhc2thCmFsYmFuaWEKYWxiYW55CmFsYmVydAphbGJlcnRhCmFsYnVtCmFsYnVtcwphbGJ1cXVlcnF1ZQphbGNvaG9sCmFsZXJ0CmFsZXJ0cwphbGV4CmFsZXhhbmRlcgphbGV4YW5kcmlhCmFsZnJlZAphbGdlYnJhCmFsZ2VyaWEKYWxnb3JpdGhtCmFsZ29yaXRobXMKYWxpCmFsaWFzCmFsaWNlCmFsaWVuCmFsaWduCmFsaWdubWVudAphbGlrZQphbGl2ZQphbGwKYWxsYWgKYWxsYW4KYWxsZWdlZAphbGxlbgphbGxlcmd5CmFsbGlhbmNlCmFsbGllZAphbGxvY2F0ZWQKYWxsb2NhdGlvbgphbGxvdwphbGxvd2FuY2UKYWxsb3dlZAphbGxvd2luZwphbGxvd3MKYWxsb3kKYWxtb3N0CmFsb25lCmFsb25nCmFsb3QKYWxwaGEKYWxwaGFiZXRpY2FsCmFscGluZQphbHJlYWR5CmFsc28KYWx0CmFsdGVyCmFsdGVyZWQKYWx0ZXJuYXRlCmFsdGVybmF0aXZlCmFsdGVybmF0aXZlbHkKYWx0ZXJuYXRpdmVzCmFsdGhvdWdoCmFsdG8KYWx1bWluaXVtCmFsdW1pbnVtCmFsdW1uaQphbHdheXMKYW0KYW1hbmRhCmFtYXRldXIKYW1hemluZwphbWF6b24KYW1hem9uY29tCmFtYXpvbmNvdWsKYW1iYXNzYWRvcgphbWJlcgphbWJpZW4KYW1iaWVudAphbWQKYW1lbmQKYW1lbmRlZAphbWVuZG1lbnQKYW1lbmRtZW50cwphbWVuaXRpZXMKYW1lcmljYQphbWVyaWNhbgphbWVyaWNhbnMKYW1lcmljYXMKYW1pbm8KYW1vbmcKYW1vbmdzdAphbW91bnQKYW1vdW50cwphbXAK"}}]
["e7dce2aa976455aee646eadfd3c379c1c9f089da-3","e7dce2aa976455aee646eadfd3c379c1c9f089da","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMi4zIG9uIDIwMjEtMDYtMDYgMTI6MjUKCmltcG9ydCBkYXRldGltZQpmcm9tIGRqYW5nby5jb25mIGltcG9ydCBzZXR0aW5ncwpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucywgbW9kZWxzCmltcG9ydCBkamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5zd2FwcGFibGVfZGVwZW5kZW5jeShzZXR0aW5ncy5BVVRIX1VTRVJfTU9ERUwpLAogICAgICAgICgndXNlcl9wcm9maWwnLCAnMDAwMV9pbml0aWFsJyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFkZEZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdzcG9ydHByb2ZpbCcsCiAgICAgICAgICAgIG5hbWU9J3VzZXInLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuRm9yZWlnbktleShkZWZhdWx0PU5vbmUsIG9uX2RlbGV0ZT1kamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uLkNBU0NBREUsIHRvPXNldHRpbmdzLkFVVEhfVVNFUl9NT0RFTCksCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J3Nwb3J0cHJvZmlsJywKICAgICAgICAgICAgbmFtZT0nZmluYWxfb2JqZWN0aWZfZGF0ZScsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGF0ZXRpbWUuZGF0ZXRpbWUoMjAyMSwgNiwgNiwgMTQsIDI1LCAzNywgNzk3NDk3KSwgdmVyYm9zZV9uYW1lPSdGaW5hbCBvYmplY3RpZiBkYXRlJyksCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J3Nwb3J0cHJvZmlsJywKICAgICAgICAgICAgbmFtZT0nZmluYWxfb2JqZWN0aWZfZGVuaXYnLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQ9MCksCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCjx8ZmltX2hvbGV8PgogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdzcG9ydHByb2ZpbCcsCiAgICAgICAgICAgIG5hbWU9J2ZpbmFsX29iamVjdGlmX25hbWUnLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuQ2hhckZpZWxkKGRlZmF1bHQ9JycsIG1heF9sZW5ndGg9MjAwKSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nc3BvcnRwcm9maWwnLAogICAgICAgICAgICBuYW1lPSdzdHJhdmFfbGluaycsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5DaGFyRmllbGQoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD0yMDApLAogICAgICAgICksCiAgICBdCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIG1vZGVsX25hbWU9J3Nwb3J0cHJvZmlsJywKICAgICAgICAgICAgbmFtZT0nZmluYWxfb2JqZWN0aWZfa20nLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQ9MCksCjx8ZmltX2VuZHw+"]
["a9ccc438c30a50e324f47f4e46ab0ef636961981-4","a9ccc438c30a50e324f47f4e46ab0ef636961981","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmltcG9ydCByb3NweSAKJycnClB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBla2ZzbGFtIGZvciBtYXBwaW5nIG9mIHJhY2Vjb3Vyc2UgYW5kIGZvciBsb2NhbGl6aW5nIGEgcmFjZWNhci4gCgpBdXRob3I6IEphY2sgTWNSb2JiaWUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgonJycKCmltcG9ydCBudW1weSBhcyBucCAKCjx8ZmltX2VuZHw+"]
["2e79811ae45d7abb06ad2aa4a565dc79fffd9b07-2","2e79811ae45d7abb06ad2aa4a565dc79fffd9b07",{"$cut":{"chars":24392,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKaW1wb3J0IG9zCmltcG9ydCBzeXMKZnJvbSBjb3B5IGltcG9ydCBkZWVwY29weQoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHdhbmRiCmZyb20gbWV0cmljcy5hY2N1cmFjeSBpbXBvcnQgQWNjdXJhY3kKZnJvbSB0b3JjaC51dGlscy5kYXRhIGltcG9ydCBEYXRhTG9hZGVyCmZyb20gdG9yY2h2aXNpb24ubW9kZWxzIGltcG9ydCBkZW5zZW5ldCwgaW5jZXB0aW9uLCByZXNuZXQKZnJvbSB0b3JjaHZpc2lvbi50cmFuc2Zvcm1zIGltcG9ydCAoQ29sb3JKaXR0ZXIsIFJhbmRvbUNyb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhbmRvbUhvcml6b250YWxGbGlwLCBSZXNpemUpCmZyb20gdHFkbSBpbXBvcnQgdHFkbQoKZnJvbSBtb2RlbHMuYmFzZV9tb2RlbCBpbXBvcnQgQmFzZU1vZGVsCgoKY2xhc3MgQ2xhc3NpZmllcihCYXNlTW9kZWwpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAgbnVtX2NsYXNzZXMsCiAgICAgICAgICAgICAgICAgaW5fY2hhbm5lbHM9MywKICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmU9J3Jlc25ldDE4JywKICAgICAgICAgICAgICAgICBwcmV0cmFpbmVkPUZhbHNlLAogICAgICAgICAgICAgICAgIG5hbWU9J0NsYXNzaWZpZXInLAogICAgICAgICAgICAgICAgICphcmdzLAogICAgICAgICAgICAgICAgICoqa3dhcmdzKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKG5hbWUsICphcmdzLCAqKmt3YXJncykKICAgICAgICBzZWxmLm51bV9jbGFzc2VzID0gbnVtX2NsYXNzZXMKICAgICAgICBzZWxmLmluX2NoYW5uZWxzID0gaW5fY2hhbm5lbHMKICAgICAgICBzZWxmLnByZXRyYWluZWQgPSBwcmV0cmFpbmVkCiAgICAgICAgc2VsZi5tb2RlbCA9IHNlbGYuX2J1aWxkX21vZGVsKGFyY2hpdGVjdHVyZSwgcHJldHJhaW5lZCkKICAgICAgICBzZWxmLm1vZGVsLnRvKHNlbGYuZGV2aWNlKQogICAgICAgIHNlbGYuYXJjaGl0ZWN0dXJlID0gYXJjaGl0ZWN0dXJlCgogICAgICAgIHNlbGYudG8oc2VsZi5kZXZpY2UpCgogICAgZGVmIF9idWlsZF9tb2RlbChzZWxmLCBhcmNoaXRlY3R1cmUsIHByZXRyYWluZWQpOgogICAgICAgIGFyY2hpdGVjdHVyZSA9IGFyY2hpdGVjdHVyZS5sb3dlcigpLnJlcGxhY2UoJy0nLCAnJykuc3RyaXAoKQogICAgICAgIGlmICdyZXNuZXQnIGluIGFyY2hpdGVjdHVyZToKICAgICAgICAgICAgaWYgYXJjaGl0ZWN0dXJlID09ICdyZXNuZXQxOCc6CiAgICAgICAgICAgICAgICBtb2RlbCA9IHJlc25ldC5yZXNuZXQxOChwcmV0cmFpbmVkPXByZXRyYWluZWQpCiAgICAgICAgICAgIGVsaWYgYXJjaGl0ZWN0dXJlID09ICdyZXNuZXQzNCc6CiAgICAgICAgICAgICAgICBtb2RlbCA9IHJlc25ldC5yZXNuZXQzNChwcmV0cmFpbmVkPXByZXRyYWluZWQpCiAgICAgICAgICAgIGVsaWYgYXJjaGl0ZWN0dXJlID09ICdyZXNuZXQ1MCc6CiAgICAgICAgICAgICAgICBtb2RlbCA9IHJlc25ldC5yZXNuZXQ1MChwcmV0cmFpbmVkPXByZXRyYWluZWQpCiAgICAgICAgICAgIGVsaWYgYXJjaGl0ZWN0dXJlID09ICdyZXNuZXQxMDEnOgogICAgICAgICAgICAgICAgbW9kZWwgPSByZXNuZXQucmVzbmV0MTAxKHByZXRyYWluZWQ9cHJldHJhaW5lZCkKICAgICAgICAgICAgZWxpZiBhcmNoaXRlY3R1cmUgPT0gJ3Jlc25ldDE1Mic6CiAgICAgICAgICAgICAgICBtb2RlbCA9IHJlc25ldC5yZXNuZXQxNTIocHJldHJhaW5lZD1wcmV0cmFpbmVkKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgICAgICAgICAgIGYnTm8gUmF0aW9uYWxSZXNOZXQgd2l0aCB0aGUgbmFtZSB7YXJjaGl0ZWN0dXJlfSBhdmFpbGFibGUnCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICBpZiBzZWxmLm51bV9jbGFzc2VzICE9IG1vZGVsLmZjLm91dF9mZWF0dXJlczoKICAgICAgICAgICAgICAgICMgZXhjaGFuZ2UgdGhlIGxhc3QgbGF5ZXIgdG8gbWF0Y2ggdGhlIGRlc2lyZWQgbnVtYmVycyBvZiBjbGFzc2VzCiAgICAgICAgICAgICAgICBtb2RlbC5mYyA9IG5uLkxpbmVhcihtb2RlbC5mYy5pbl9mZWF0dXJlcywgc2VsZi5udW1fY2xhc3NlcykKCiAgICAgICAgICAgIHJldHVybiBtb2RlbAoKICAgICAgICBlbGlmICdyZXNuZXh0JyBpbiBhcmNoaXRlY3R1cmU6CiAgICAgICAgICAgIGlmIGFyY2hpdGVjdHVyZSA9PSAncmVzbmV4dDUwJzoKICAgICAgICAgICAgICAgIG1vZGVsID0gdG9yY2guaHViLmxvYWQoJ3B5dG9yY2gvdmlzaW9uOnYwLjYuMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXNuZXh0NTBfMzJ4NGQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV0cmFpbmVkPXByZXRyYWluZWQpCiAgICAgICAgICAgIGVsaWYgYXJjaGl0ZWN0dXJlID09ICdyZXNuZXh0MTAxJzoKICAgICAgICAgICAgICAgIG1vZGVsID0gdG9yY2guaHViLmxvYWQoJ3B5dG9yY2gvdmlzaW9uOnYwLjYuMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXNuZXh0MTAxXzMyeDhkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldHJhaW5lZD1wcmV0cmFpbmVkKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgICAgICAgICAgIGYnTm8gUmVzTmV4dCB3aXRoIHRoZSBuYW1lIHthcmNoaXRlY3R1cmV9IGF2YWlsYWJsZScpCgogICAgICAgICAgICBpZiBzZWxmLm51bV9jbGFzc2VzICE9IG1vZGVsLmZjLm91dF9mZWF0dXJlczoKICAgICAgICAgICAgICAgICMgZXhjaGFuZ2UgdGhlIGxhc3QgbGF5ZXIgdG8gbWF0Y2ggdGhlIGRlc2lyZWQgbnVtYmVycyBvZiBjbGFzc2VzCiAgICAgICAgICAgICAgICBtb2RlbC5mYyA9IG5uLkxpbmVhcihtb2RlbC5mYy5pbl9mZWF0dXJlcywgc2VsZi5udW1fY2xhc3NlcykKCiAgICAgICAgICAgIHJldHVybiBtb2RlbAoKICAgICAgICBlbGlmICdy"}}]
["ec44d6740ee1010a5631c77411a446d755a738a0-2","ec44d6740ee1010a5631c77411a446d755a738a0","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiBVVEYtOCAtKi0KCiMgRmlsZW5hbWUgOiAwNC1wYXNzd29yZC5weQojIGF1dGhvciBieSA6IO+8iOWtpuWRmElEKQoKIyDopoHngrnvvJrliJ3mraXnkIbop6PliJfooajvvIzkuobop6Plr4bnoIHnlJ/miJDnmoTmlrnlvI8KaW1wb3J0IHJhbmRvbQoKIyDnu4PkuaDkuIAKIyDpm4bkuK3mlbDlrZflnovlr4bnoIHnlJ/miJDmlrnlvI8KIyDlm5vkvY3mlbDlrZflr4bnoIEgUElOCnByaW50KCdcbi0tLWN1dHRpbmcgbGluZSAxLS0tJykKZm9yIGkgaW4gcmFuZ2UoMSwzKToKICAgICMgZm9yIGJvZHkgYmVnaW4gLS0tLQogICAgcGFzc3dvcmQgPSByYW5kb20ucmFuZGludCgwLDk5OTkpCiAgICBwcmludCAoJ1Bhc3N3b3JkIGlzIDogJTA0ZCcgJSAocGFzc3dvcmQpKQogICAgIyBmb3IgYm9keSBlbmQgLS0tLQoKIyDnu4PkuaDkuowKIyDpm4bkuK3mlbDlrZflnovlr4bnoIHnlJ/miJDmlrnlvI8KIyDlm5vkvY3mlbDlrZflr4bnoIEgUElOCnByaW50KCdcbi0tLWN1dHRpbmcgbGluZSAyLS0tJykKbnVtcyA9IFsnMCcsJzEnLCcyJywnMycsJzQnLCc1JywnNicsJzcnLCc4JywnOSddCnBhc3N3b3JkID0gW10KZm9yIGkgaW4gcmFuZ2UoMSw1KToKICAgICMgZm9yIGJvZHkgYmVnaW4gLS0tLQogICAgcGFzc3dvcmQuYXBwZW5kKHJhbmRvbS5jaG9pY2UobnVtcykpCiAgICAjIGRlYnVnCiAgICBwcmludCAoJ2RlYnVnIC0gUGFzc3dvcmQgbGlzdCBjaGFuZ2luZyA6ICVzJyAlIChwYXNzd29yZCkpCiAgICAjIGZvciBib2R5IGVuZCAtLS0tCiMgZGVidWcKcHJpbnQgKCdkZWJ1ZyAtIGxpc3Qgb2YgcGFzc3dvcmQgPSAlcycgJSAocGFzc3dvcmQpKQoKIyDpobrluo/lj5blh7rmiYDmnInmlbDlrZfnu4TmiJDmnIDnu4jlr4bnoIEKcHJpbnQgKCdQYXNzd29yZCBpcyA6ICcsIGVuZD0nJykKZm9yIGl0ZW0gaW4gcGFzc3dvcmQ6CiAgICBwcmludCAoJyVzJyAlIChpdGVtKSwgZW5kPScnKQoKIyDnu4PkuaDkuIkKIyDmt7flkIjlnovlr4bnoIHnlJ/miJDmlrnlvI8KIyDmlbDlrZcgKyDlpKflsI/lhpkgKyDnrKblj7cKcHJpbnQoJ1xuXG4tLS1jdXR0aW5nIGxpbmUgMy0tLScpCiMg5a6a5LmJ5omA5pyJ5Y+v55So55qE5a2X56ymCmNoYXIxID0gWycwJywnMScsJzInLCczJywnNCcsJzUnLCc2JywnNycsJzgnLCc5J10KY2hhcjIgPSBbJ2EnLCdiJywnYycsJ2QnLCdlJywnZicsJ2cnLCdoJywnaScsJ2onLCdrJywnbCcsJ20nLCduJywnbycsJ3AnLCdxJywncicsJ3MnLCd0JywndScsJ3YnLCd3JywneCcsJ3knLCd6J10KY2hhcjMgPSBbJ0EnLCdCJywnQycsJ0QnLCdFJywnRicsJ0cnLCdIJywnSScsJ0onLCdLJywnTCcsJ00nLCdOJywnTycsJ1AnLCdRJywnUicsJ1MnLCdUJywnVScsJ1YnLCdXJywnWCcsJ1knLCdaJ10KY2hhcjQgPSBbJ34nLCchJywnQCcsJyMnLCckJywnJScsJ14nLCcmJywnKicsJygnLCcpJywnXycsJysnLCctJywnPScsJ3snLCd9JywnWycsJ10nLCc6JywnIicsJzsnLCc8JywnPicsJz8nLCcsJywnLicsJy8nXQojIOWQiOW5tuWIsOS4gOS4quaJk+eahOWIl+ihqOS4reWOuwpjaGFyQWxsID0gY2hhcjEgKyBjaGFyMiArIGNoYXIzICsgY2hhcjQKI2RlYnVnCnByaW50KCdkZWJ1ZyAtIEFsbCB1c2FibGUgY2hhcnM6ICVzJyAlIChjaGFyQWxsKSkKCiMg5a6a5LmJ5a+G56CB55qE6ZW/5bqmCnB3ZExlbiA9IDgKCiMg5Yid5aeL5YyW5riF56m65pyA57uI5a+G56CBCnBhc3N3b3JkID0gW10KZm9yIGkgaW4gcmFuZ2UoMSxwd2RMZW4pOgogICAgIyBmb3IgYm9keSBiZWdpbiAtLS0tCiAgICBwYXNzd29yZC5hcHBlbmQocmFuZG9tLmNob2ljZShjaGFyQWxsKSkKICAgICMgZGVidWcKICAgIHByaW50ICgnZGVidWcgLSBQYXNzd29yZCBsaXN0IGNoYW5naW5nIDogJXMnICUgKHBhc3N3b3JkKSkKICAgICMgZm9yIGJvZHkgZW5kIC0tLS0KIyBkZWJ1ZwpwcmludCAoJ2RlYnVnIC0gbGlzdCBvZiBwYXNzd29yZCA9ICVzJyAlIChwYXNzd29yZCkpCgojIOmhuuW6j+WPluWHuuaJgOacieaVsOWtl+e7hOaIkOacgOe7iOWvhueggQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CnByaW50ICgnXG5QYXNzd29yZCBpcyA6ICcsIGVuZD0gJycpCmZvciBpdGVtIGluIHBhc3N3b3JkOgogICAgcHJpbnQgKCclcycgJSAoaXRlbSksIGVuZD0nJykKPHxmaW1fZW5kfD4="]
["415723d8ee83154d2230b998b47b1e289f981d58-2","415723d8ee83154d2230b998b47b1e289f981d58","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IHBhbmRhcyBhcyBwZAoKZnJvbSBzZXJpZXNfdGllbXBvX2FyLmhlbHBlcnMgaW1wb3J0IGZyZXFfaXNvX3RvX3BhbmRhcwpmcm9tIGRqYW5nb19kYXRhanNvbmFyLm1vZGVscyBpbXBvcnQgRmllbGQsIERpc3RyaWJ1dGlvbgoKZnJvbSBzZXJpZXNfdGllbXBvX2FyX2FwaS5saWJzLmRhdGFqc29uYXJfcmVwb3NpdG9yaWVzLnNlcmllc19yZXBvc2l0b3J5IGltcG9ydCBTZXJpZXNSZXBvc2l0b3J5CmZyb20gc2VyaWVzX3RpZW1wb19hcl9hcGkubGlicy5pbmRleGluZyBpbXBvcnQgY29uc3RhbnRzCgoKZGVmIGluaXRfZGYoZGlzdHJpYnV0aW9uOiBEaXN0cmlidXRpb24sIHRpbWVfaW5kZXg6IEZpZWxkKToKICAgICIiIkluaWNpYWxpemEgZWwgRGF0YUZyYW1lIGRlbCBDU1YgZGUgbGEgZGlzdHJpYnVjacOzbiBwYXNhZGEsCiAgICBzZXRlYW5kbyBlbCDDrW5kaWNlIGRlIHRpZW1wbyBjb3JyZWN0byB5IHZhbGlkYW5kbyBsYXMgY29sdW1uYXMKICAgIGRlbnRybyBkZSBsb3MgZGF0b3MKICAgICIiIgogICAgZGlzdHJpYnV0aW9uLnJlZnJlc2hfZnJvbV9kYigpICAjIFJlY2FyZ2EgbGEgZGlzdHJpYnVjacOzbiBzaSB5YSBmdWUgbGXDrWRhCiAgICBkZiA9IHJlYWRfZGlzdHJpYnV0aW9uX2Nzdl9hc19kZihkaXN0cmlidXRpb24sIHRpbWVfaW5kZXgpCiAgICBmaWVsZHMgPSBTZXJpZXNSZXBvc2l0b3J5LmdldF9wcmVzZW50X3NlcmllcyhkaXN0cmlidXRpb249ZGlzdHJpYnV0aW9uKQogICAgZHJvcF9udWxsX29yX21pc3NpbmdfZmllbGRzX2Zyb21fZGYoZGYsIFtmaWVsZC50aXRsZSBmb3IgZmllbGQgaW4gZmllbGRzXSkKCiAgICBkYXRhID0gZGYudmFsdWVzCiAgICBuZXdfaW5kZXggPSBnZW5lcmF0ZV9kZl90aW1lX2luZGV4KGRmLCB0aW1lX2luZGV4KQogICAgaWRlbnRpZmllcnMgPSBnZXRfZGlzdHJpYnV0aW9uX3Nlcmllc19pZGVudGlmZXJzKGRpc3RyaWJ1dGlvbiwgc2VyaWVzX3RpdGxlcz1kZi5jb2x1bW5zKQogICAgcmV0dXJuIHBkLkRhdGFGcmFtZShpbmRleD1uZXdfaW5kZXgsIGRhdGE9ZGF0YSwgY29sdW1ucz1pZGVudGlmaWVycykKCgpkZWYgcmVhZF9kaXN0cmlidXRpb25fY3N2X2FzX2RmKGRpc3RyaWJ1dGlvbjogRGlzdHJpYnV0aW9uLCB0aW1lX2luZGV4OiBGaWVsZCkgLT4gcGQuRGF0YUZyYW1lOgogICAgZGYgPSBwZC5yZWFkX2NzdihkaXN0cmlidXRpb24uZGF0YV9maWxlLAogICAgICAgICAgICAgICAgICAgICBwYXJzZV9kYXRlcz1bdGltZV9pbmRleC50aXRsZV0sCiAgICAgICAgICAgICAgICAgICAgIGluZGV4X2NvbD10aW1lX2luZGV4LnRpdGxlLAogICAgICAgICAgICAgICAgICAgICBmbG9hdF9wcmVjaXNpb249J2hpZ2gnKQogICAgcmV0dXJuIGRmCgoKZGVmIGRyb3BfbnVsbF9vcl9taXNzaW5nX2ZpZWxkc19mcm9tX2RmKGRmLCBmaWVsZF90aXRsZXMpOgogICAgZm9yIGNvbHVtbiBpbiBkZi5jb2x1bW5zOgogICAgICAgIGFsbF9udWxsID0gZGZbY29sdW1uXS5pc251bGwoKS5hbGwoKQogICAgICAgIGlmIGFsbF9udWxsIG9yIGNvbHVtbiBub3QgaW4gZmllbGRfdGl0bGVzOgogICAgICAgICAgICBkZi5kcm9wKGNvbHVtbiwgYXhpcz0nY29sdW1ucycsIGlucGxhY2U9VHJ1ZSkKCgpkZWYgZ2V0X2Rpc3RyaWJ1dGlvbl90aW1lX2luZGV4X3BlcmlvZGljaXR5KHRpbWVfaW5kZXg6IEZpZWxkKSAtPiBzdHI6CiAgICBwZXJpb2RpY2l0eSA9IGpzb24ubG9hZHModGltZV9pbmRleC5tZXRhZGF0YSlbY29uc3RhbnRzLlNQRUNJQUxfVFlQRV9ERVRBSUxdCiAgICByZXR1cm4gcGVyaW9kaWNpdHkKCgpkZWYgZ2VuZXJhdGVfZGZfdGltZV9pbmRleChkZjogcGQuRGF0YUZyYW1lLCB0aW1lX2luZGV4OiBGaWVsZCk6CiAgICBwZXJpb2RpY2l0eSA9IGdldF9kaXN0cmlidXRpb25fdGltZV9pbmRleF9wZXJpb2RpY2l0eSh0aW1lX2luZGV4KQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBmcmVxID0gZnJlcV9pc29fdG9fcGFuZGFzKHBlcmlvZGljaXR5KQogICAgbmV3X2luZGV4ID0gcGQuZGF0ZV9yYW5nZShkZi5pbmRleFswXSwgZGYuaW5kZXhbLTFdLCBmcmVxPWZyZXEpCgogICAgIyBDaGVxdWVvIGRlIHNlcmllcyBkZSBkw61hcyBow6FiaWxlcyAoYnVzaW5lc3MgZGF5cykKPHxmaW1fZW5kfD4="]
["2e1eff83e7f1ed9377d8fa2d9fd27f70e20480c3-4","2e1eff83e7f1ed9377d8fa2d9fd27f70e20480c3","PHxmaW1fcHJlZml4fD4KZnJvbSBmYWJfZGVwbG95IGltcG9ydCAqCgpDT01NT05fT1BUSU9OUyA9IGRpY3QoCiAgICBJTlNUQU5DRV9OQU1FID0gJ2JveC1kZW1vJywKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgTE9DQUxfQ09ORklHID0gJ2xvY2FsX3NldHRpbmdzLnB5JywKICAgIFZDUyA9ICdnaXQnLAogICAgU1VET19VU0VSID0gJ3dlYicsCiAgICBQSVBfUkVRVUlSRU1FTlRTX1BBVEggPSAnLicsCjx8ZmltX2VuZHw+"]
["68c9f1f4bc8f18fcff52eb0dc6d63d0f57ddf884-2","68c9f1f4bc8f18fcff52eb0dc6d63d0f57ddf884","PHxmaW1fcHJlZml4fD4KIiIiCkFic3RyYWN0IGNsYXNzIGZvciBkYXRhc2V0cy4gRGVmaW5lcyBhdHRyaWJ1dGVzIGFuZCBmdW5jdGlvbnMgdGhhdCBhbnkgZGF0YXNldCB1c2VkIGZvcgpzdXBlcnZpc2VkIGxlYXJuaW5nIHNob3VsZCBoYXZlLgoiIiIKCmZyb20gdHlwaW5nIGltcG9ydCBEaWN0CgppbXBvcnQgdG9yY2gKaW1wb3J0IHRvcmNoLm5uIGFzIG5uCgoKY2xhc3MgQmFzZURhdGFzZXQ6CiAgICAiIiIgQWJzdHJhY3QgY2xhc3MgZm9yIGRhdGFzZXRzLiAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZikgLT4gTm9uZToKICAgICAgICAiIiIKICAgICAgICBJbml0IGZ1bmN0aW9uIGZvciBCYXNlRGF0c2V0LiBJbml0aWFsaXplcyBhbGwgcmVxdWlyZWQgbWVtYmVycywgYnV0IHRvIG51bGwKICAgICAgICB2YWx1ZXMuIEFueSBzdWJjbGFzcyBvZiBCYXNlRGF0YXNldCBzaG91bGQgaW5pdGlhbGl6ZSB0aGVzZSB2YWx1ZXMgQUZURVIgY2FsbGluZwogICAgICAgIEJhc2VEYXRhc2V0Ll9faW5pdF9fKCkuIFRoaXMgZnVuY3Rpb24gbW9zdGx5IGp1c3QgZXhpc3RzIHRvIGRvY3VtZW50IHRoZQogICAgICAgIHJlcXVpcmVkIG1lbWJlcnMgdGhhdCBtdXN0IGJlIHBvcHVsYXRlZCBieSBhbnkgc3ViY2xhc3MuCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5pbnB1dF9zaXplID0gTm9uZQogICAgICAgIHNlbGYub3V0cHV0X3NpemUgPSBOb25lCiAgICAgICAgc2VsZi5sb3NzX2NscyA9IE5vbmUKICAgICAgICBzZWxmLmxvc3Nfa3dhcmdzID0ge30KICAgICAgICBzZWxmLmNyaXRlcmlvbl9rd2FyZ3MgPSB7InRyYWluIjoge30sICJldmFsIjoge319CiAgICAgICAgc2VsZi5leHRyYV9tZXRyaWNzID0ge30KCiAgICBkZWYgY29tcHV0ZV9tZXRyaWNzKAogICAgICAgIHNlbGYsCiAgICAgICAgb3V0cHV0czogdG9yY2guVGVuc29yLAogICAgICAgIGxhYmVsczogdG9yY2guVGVuc29yLAogICAgICAgIGNyaXRlcmlvbjogbm4uTW9kdWxlID0gTm9uZSwKICAgICAgICB0cmFpbjogYm9vbCA9IFRydWUsCiAgICApIC0+IERpY3Rbc3RyLCBmbG9hdF06CiAgICAgICAgIiIiCiAgICAgICAgQ29tcHV0ZSBtZXRyaWNzIGZyb20gYG91dHB1dHNgIGFuZCBgbGFiZWxzYCwgcmV0dXJuaW5nIGEgZGljdGlvbmFyeSB3aG9zZSBrZXlzCiAgICAgICAgYXJlIG1ldHJpYyBuYW1lcyBhbmQgd2hvc2UgdmFsdWVzIGFyZSBmbG9hdHMuIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgbWV0cmljcwogICAgICAgIGZyb20gdGhlIHN1YmNsYXNzIGRlZmluaXRpb24gc2hvdWxkIG1hdGNoIHRoZSBtZXRyaWNzIGxpc3RlZCBpbiBgZXh0cmFfbWV0cmljc2AuIAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIiIiCiAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgo8fGZpbV9lbmR8Pg=="]
["c1e7bfd5ec385a9255f3a01fe311fbea4090d844-1","c1e7bfd5ec385a9255f3a01fe311fbea4090d844","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiR2V0IHN1YnN0YW50aXZlIGNvbnRlbnQgaW4gdGV4dC4iIiIKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKZnJvbSB0eXBpbmcgaW1wb3J0IEl0ZXJhYmxlLCBMaXN0LCBVbmlvbgoKZnJvbSBtdWx0aXByb2Nlc3MgaW1wb3J0IFBvb2wsIGNwdV9jb3VudAoKZnJvbSBzbGFudC51dGlscyBpbXBvcnQgVkFMSURfV09SRF9DSEFSUywgYnVpbGRfbGlzdF9mcm9tX2ZpbGUsIGJ1aWxkX3RyaWVfZnJvbV93b3JkbGlzdCwgbG9jYWxfcGF0aAoKc3RvcF93b3JkcyA9IGJ1aWxkX2xpc3RfZnJvbV9maWxlKGxvY2FsX3BhdGgoInN0b3Bfd29yZHMudHh0IikpCgoKZGVmIHRvcF93b3Jkcyh0ZXh0OiBVbmlvbltzdHIsIEl0ZXJhYmxlW3N0cl1dLAogICAgICAgICAgICAgIGJsYWNrbGlzdDogSXRlcmFibGVbc3RyXSA9IHN0b3Bfd29yZHMsCiAgICAgICAgICAgICAgdG9wX246IGludCA9IDEwKSAtPiBVbmlvbltMaXN0W3N0cl0sIExpc3RbTGlzdFtzdHJdXV06CgkiIiJHZXQgdG9wIHdvcmRzIG9yIGxpc3Qgb2YgdGhlc2UgaW4gYSB0ZXh0IG9yIGxpc3Qgb2YgdGV4dHMsIGV4Y2x1ZGluZyBhIGRlZmluZWQgYmxhY2tsaXN0LgoKCUFyZ3M6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCQl0ZXh0IChzdHIgfCBMaXN0W3N0cl0pOiBUZXh0IHRvIHBhcnNlIG9yIGxpc3Qgb2YgdGV4dHMgdG8gcGFyc2UKCQlibGFja2xpc3QgKExpc3Rbc3RyXSk6IExpc3Qgb2Ygd29yZHMgdG8gaWdub3JlCgkJdG9wX24gKGludCk6IE51bWJlciBvZiB0b3Agd29yZHMgdG8gcmV0dXJuCgo8fGZpbV9lbmR8Pg=="]
["97751300c23960014d9164e2075c31500f22f894-2","97751300c23960014d9164e2075c31500f22f894","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBmcmFtZXdvcmsuZm9ybXMgaW1wb3J0IEZvcm0sIFRleHRGaWVsZCwgQm9vbGVhbkZpZWxkLCB2YWxpZGF0b3JzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgRm9ybXMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCmNsYXNzIE5ld05vZGVGb3JtKEZvcm0pOgogICAgdGl0bGUgPSBUZXh0RmllbGQoJ1RpdGxlJywgWwogICAgICAgIHZhbGlkYXRvcnMuUmVxdWlyZWQobWVzc2FnZT11J1RpdGxlIGlzIHJlcXVpcmVkJyksCiAgICAgICAgdmFsaWRhdG9ycy5MZW5ndGgobWluPTEsIG1lc3NhZ2U9dSdUaXRsZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgMSBjaGFyYWN0ZXIuJyksCiAgICAgICAgdmFsaWRhdG9ycy5MZW5ndGgobWF4PTIwMCwgbWVzc2FnZT11J1RpdGxlIG11c3QgY29udGFpbiBmZXdlciB0aGFuIDIwMCBjaGFyYWN0ZXJzLicpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIF0pCiAgICBkZXNjcmlwdGlvbiA9IFRleHRGaWVsZCgnRGVzY3JpcHRpb24nKQogICAgY2F0ZWdvcnkgPSBUZXh0RmllbGQoJ0NhdGVnb3J5JykKICAgIGluaGVyaXRfY29udHJpYnV0b3JzID0gQm9vbGVhbkZpZWxkKCdJbmhlcml0JykKPHxmaW1fZW5kfD4="]
["6beb81e29ab706bf10dec3c532c80db2a90b2281-2","6beb81e29ab706bf10dec3c532c80db2a90b2281","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKCgpkZWYgZHVtcF9lbmVyZ3lfY2FsKGFkYyk6CiAgICAiIiIKICAgIOi+k+WFpUFEQ+mHh+mbhueUteWOi+i/lOWbnuWJqeS9meeUtemHjwogICAg55S16YeP5LiO55S15Y6L5a+55bqU5YWz57O7ICDlkITkuKrpmLbmrrXkuYvlhoXnlKjnur/mgKflh73mlbDorqHnrpcgIOS4i+ihqOS4uuWunumqjOaVsOaNrgogICAg55S16YePICAgICDnlLXljosgICAgICA2U+eUteaxoCAgICAgQURD6YeH6ZuG5pWw5YC8CiAgICAxMDAlLS0tLTQuMjBWICAgICAyNS4yICAgICAgMzkwMAogICAgOTAlLS0tLS00LjA2ViAgICAgMjQuMzYgICAgIDM3NTUKICAgIDgwJS0tLS0tMy45OFYgICAgIDIzLjg4ICAgICAzNjYyCiAgICA3MCUtLS0tLTMuOTJWICAgICAyMy41MiAgICAgMzU2MQogICAgNjAlLS0tLS0zLjg3ViAgICAgMjMuMjIgICAgIDM1MzYKICAgIDUwJS0tLS0tMy44MlYgICAgIDIyLjkyICAgICAzNTM1CiAgICA0MCUtLS0tLTMuNzlW4payICAgIDIyLjc0ICAgICAzNTIwCiAgICAzMCUtLS0tLTMuNzdWICAgICAyMi42MiAgICAgMzQzMgogICAgMjAlLS0tLS0zLjc0ViAgICAgMjIuNDQgICAgIDM0NjEKICAgIDAlLS0tLS0zLjdWICAgICAgIDIyLjIgICAgICAzMzE4CiAgICAiIiIKICAgIGFkY19saXN0ID0gWzM5MDAsIDM3NTUsIDM2NjIsIDM1NjEsIDM1MzYsIDM1MjAsIDM0MzIsIDMzMThdCiAgICBjYXBfbGlzdCA9IFsxMDAsIDkwLCA4MCwgNzAsIDYwLCA0MCwgMjAsIDFdCiAgICAjIGZvciBpbmRleCwgYWRjX2l0ZW0gaW4gZW51bWVyYXRlKGFkY19saXN0KToKICAgICMgICAgIGlmIGluZGV4ID09IDA6CiAgICAjICAgICAgICAgaWYgYWRjID4gYWRjX2l0ZW06CiAgICAjICAgICAgICAgICAgIHJldHVybl9jYXAgPSBjYXBfbGlzdFtpbmRleF0KICAgICMgICAgICAgICAgICAgYnJlYWsKICAgICMgICAgIGVsaWYgaW5kZXggPT0gKGxlbihhZGNfbGlzdCkgLSAxKToKICAgICMgICAgICAgICBpZiBhZGMgPCBhZGNfaXRlbToKICAgICMgICAgICAgICAgICAgcmV0dXJuX2NhcCA9IGNhcF9saXN0W2luZGV4XQogICAgIyAgICAgICAgICAgICBicmVhawogICAgIyAgICAgZWxzZToKICAgICMgICAgICAgICBpZiBhZGNfbGlzdFtpbmRleCArIDFdIDwgYWRjIDwgYWRjX2xpc3RbaW5kZXhdOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAjICAgICAgICAgICAgIHJldHVybl9jYXAgPSBjYXBfbGlzdFtpbmRleCArIDFdICsgKGFkYyAtIGFkY19saXN0W2luZGV4ICsgMV0pIC8gKAogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICBhZGNfbGlzdFtpbmRleF0gLSBhZGNfbGlzdFtpbmRleCArIDFdKQogICAgaWYgYWRjX2xpc3RbMF0gPD0gYWRjOgogICAgICAgIHJldHVybl9jYXAgPSBjYXBfbGlzdFswXQo8fGZpbV9lbmR8Pg=="]
["44e83169bbf9f26acba52da44a828079d31cfff9-3","44e83169bbf9f26acba52da44a828079d31cfff9","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGVuY29kaW5nOiB1dGYtOCAtKi0KIyDlv6vpgJ/mjpLluo8KIiIiCiAgICBUb3BpYzogc2FtcGxlCiAgICBEZXNjIDog5b+r6YCf5o6S5bqPCiAgICAgICAg6YeH55So5YiG5rK75rOV5oCd5oOz77yaCiAgICAgICAg5YiG6Kej77yaIOWwhuaVsOe7hEFbcC4ucl3liJLliIbmiJDkuKTkuKoo5Lmf5Y+v6IO95piv56m6KeeahOWtkOaVsOe7hEFbcC4ucS0xXeWSjEFbcSsxLi5yXe+8jAogICAgICAgICAgICDkvb/lvpflt6bovrnmlbDnu4TkuK3nmoTlhYPntKDpg73lsI/kuo5BW3Bd77yM6ICM5Y+z6L655pWw57uE5YWD57Sg6YO95aSn5LqOQVtwXQogICAgICAgIOino+WGs++8miDpgJrov4fpgJLlvZLosIPnlKjlv6vpgJ/mjpLluo/vvIzlr7nlrZDmlbDnu4RBW3AuLnEtMV3lkoxBW3ErMS4ucl3ov5vooYzmjpLluo8KICAgICAgICDlkIjlubbvvJog5Y6f5Z2A5o6S5bqP77yM5LiN6ZyA6KaB5ZCI5bm277yM5pWw57uE5bey57uP5o6S5aW95bqP5LqGCgogICAgICAgIOW/q+mAn+aOkuW6j+eahOS8mOeCue+8mgogICAgICAgIOacgOWdj+aDheWGteS4i+aXtumXtOWkjeadguW6puS4uk8obl4yKe+8jOS9huaYr+acn+acm+aXtumXtOaYr08obmxnKG4pKe+8jAogICAgICAgIOiAjOS4lE8obmxnKG4pKemakOWQq+W4uOaVsOWboOWtkOmdnuW4uOeahOWwj++8jOiAjOS4lOi/mOaYr+WOn+WdgOaOkuW6j++8jAogICAgICAgIOaJgOS7peWunumZheS4reS9v+eUqOacgOWkmueahOaOkuW6j+eul+azleWwseaYr+W/q+mAn+aOkuW6jwoiIiIKZnJvbSByYW5kb20gaW1wb3J0IHJhbmRpbnQKX19hdXRob3JfXyA9ICdYaW9uZyBOZW5nJwoKCmRlZiBxdWlja1NvcnQoc2VxKToKICAgICMgX19xdWlja1N1YlNvcnQoc2VxLCAwLCBsZW4oc2VxKSAtIDEpCiAgICBfX3F1aWNrU3ViU29ydFRhaWwoc2VxLCAwLCBsZW4oc2VxKSAtIDEpCgoKZGVmIF9fcGFydGl0aW9uKEEsIHAsIHIpOgogICAgIiIi5YiG6Kej5a2Q5pWw57uEIiIiCiAgICB4ID0gQVtyXQogICAgaSA9IHAgLSAxCiAgICBmb3IgaiBpbiByYW5nZShwLCByKToKICAgICAgICBpZiBBW2pdIDw9IHg6CiAgICAgICAgICAgIGkgKz0gMQogICAgICAgICAgICBBW2ldLCBBW2pdID0gQVtqXSwgQVtpXQogICAgQVtpICsgMV0sIEFbcl0gPSBBW3JdLCBBW2kgKyAxXQogICAgcmV0dXJuIGkgKyAxCgoKZGVmIF9fcmFuZFBhcnRpdGlvbihBLCBwLCByKToKICAgICIiIuWIhuino+WtkOaVsOe7hO+8miDpmo/mnLrljJbniYjmnKwiIiIKICAgIHJpbnggPSByYW5kaW50KHAsIHIpICAjIOmaj+acuueahHBpdm90CiAgICBBW3JpbnhdLCBBW3JdID0gQVtyXSwgQVtyaW54XSAgIyDov5jmmK/lsIbov5nkuKpwaXZvdOaUvuWIsOacgOWQjgogICAgeCA9IEFbcl0KICAgIGkgPSBwIC0gMQogICAgZm9yIGogaW4gcmFuZ2UocCwgcik6CiAgICAgICAgaWYgQVtqXSA8PSB4OgogICAgICAgICAgICBpICs9IDEKICAgICAgICAgICAgQVtpXSwgQVtqXSA9IEFbal0sIEFbaV0KICAgIEFbaSArIDFdLCBBW3JdID0gQVtyXSwgQVtpICsgMV0KICAgIHJldHVybiBpICsgMQoKCmRlZiBfX3F1aWNrU3ViU29ydChzZXEsIHAsIHIpOgogICAgIiIi6YCS5b2S54mI5pys55qEIiIiCiAgICBpZiBwIDwgcjoKICAgICAgICBxID0gX19yYW5kUGFydGl0aW9uKHNlcSwgcCwgcikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIF9fcXVpY2tTdWJTb3J0KHNlcSwgcCwgcSAtIDEpCiAgICAgICAgX19xdWlja1N1YlNvcnQoc2VxLCBxICsgMSwgcikKCgo8fGZpbV9lbmR8Pg=="]
["6b7fbb3fbf095079425822523e93f3e4297f8826-2","6b7fbb3fbf095079425822523e93f3e4297f8826","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc6IHV0Zi04Cgo8fGZpbV9ob2xlfD4KY2xhc3MgU2tsUHREYXRFbnRyeShTdHJ1Y3QpOgogICAgU1RSVUNUX1NJWkUgPSAyCiAgICBpc19zZXRfYm9udXM6IGZ0LnVieXRlKCkKICAgIHVuazE6IGZ0LnVieXRlKCkKCgpjbGFzcyBTa2xQdERhdChTdHJ1Y3RGaWxlKToKICAgIEVudHJ5RmFjdG9yeSA9IFNrbFB0RGF0RW50cnkKICAgIE1BR0lDID0gMHgwMDVFCjx8ZmltX3N1ZmZpeHw+CmZyb20gbWh3X2FybW9yX2VkaXQgaW1wb3J0IGZ0eXBlcyBhcyBmdApmcm9tIG1od19hcm1vcl9lZGl0LmZ0eXBlcyBpbXBvcnQgU3RydWN0RmlsZSwgU3RydWN0CgoKPHxmaW1fZW5kfD4="]
["8207ac6968de324ecd24cbe43fd71835cf13b8a8-2","8207ac6968de324ecd24cbe43fd71835cf13b8a8","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwgZmluZF9wYWNrYWdlcwppbXBvcnQgcmUKaW1wb3J0IGlvCgpfX3ZlcnNpb25fXyA9IHJlLnNlYXJjaCgKICAgIHInX192ZXJzaW9uX19ccyo9XHMqW1wnIl0oW15cJyJdKilbXCciXScsCiAgICBpby5vcGVuKCdzdXJmcGxvdC9fX2luaXRfXy5weScsIGVuY29kaW5nPSd1dGZfOF9zaWcnKS5yZWFkKCkKICAgICkuZ3JvdXAoMSkKCnRlc3RfZGVwcyA9IFsKICAgICdweXRlc3QtY292JywKICAgICdweXRlc3QnCl0KCmV4dHJhcyA9IHsKICAgICd0ZXN0JzogdGVzdF9kZXBzLAp9Cgp3aXRoIG9wZW4oIlJFQURNRS5yc3QiLCAiciIsIGVuY29kaW5nPSJ1dGYtOCIpIGFzIGZoOgogICAgbG9uZ19kZXNjcmlwdGlvbiA9IGZoLnJlYWQoKQoKc2V0dXAoCiAgICBuYW1lPSdzdXJmcGxvdCcsCiAgICB2ZXJzaW9uPV9fdmVyc2lvbl9fLAogICAgcGFja2FnZXM9ZmluZF9wYWNrYWdlcyhleGNsdWRlPVsiKi50ZXN0cyIsICIqLnRlc3RzLioiLCAidGVzdHMuKiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0cyJdKSwKICAgIGxpY2Vuc2U9J0JTRC0zJywKICAgIGF1dGhvcj0nRGFuIEdhbGUnLAogICAgbWFpbnRhaW5lcl9lbWFpbD0iZC5nYWxlQHF1ZWVuc3UuY2EiLAogICAgZGVzY3JpcHRpb249KCJBIHBhY2thZ2UgZm9yIHB1YmxpY2F0aW9uLXJlYWR5IGJyYWluIHN1cmZhY2UgZmlndXJlcyIpLAogICAgbG9uZ19kZXNjcmlwdGlvbj1sb25nX2Rlc2NyaXB0aW9uLAogICAgbG9uZ19kZXNjcmlwdGlvbl9jb250ZW50X3R5cGU9J3RleHQveC1yc3QnLAogICAgdXJsPSdodHRwczovL3N1cmZwbG90LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC8nLAogICAgcHl0aG9uX3JlcXVpcmVzPSc+PTMuNy4wJywKICAgIGluc3RhbGxfcmVxdWlyZXM9WwogICAgICAgICAgICAnYnJhaW5zcGFjZT49MC4xLjEnLAogICAgICAgICAgICAnbWF0cGxvdGxpYj49My40LjInLAogICAgICAgICAgICAnbmliYWJlbCcsCiAgICAgICAgICAgICdudW1weT49MS4xNC4wJywKICAgICAgICAgICAgJ3NjaXB5Pj0wLjE3JywKICAgICAgICAgICAgJ3Z0az49OC4xLjAnCiAgICBdLAogICAgcGFja2FnZV9kYXRhPXsKICAgICAgICAnc3VyZnBsb3QnOiBbJ2RhdGEvKiddCiAgICB9LAogICAgaW5jbHVkZV9wYWNrYWdlX2RhdGE9VHJ1ZSwKICAgIHRlc3RzX3JlcXVpcmU9dGVzdF9kZXBzLAogICAgZXh0cmFzX3JlcXVpcmU9ZXh0cmFzLAogICAgc2V0dXBfcmVxdWlyZXM9WydweXRlc3QtcnVubmVyJ10sCiAgICBjbGFzc2lmaWVycz1bCiAgICAgICAgJ0RldmVsb3BtZW50IFN0YXR1cyA6OiAzIC0gQWxwaGEnLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzJywKICAgICAgICAnT3BlcmF0aW5nIFN5c3RlbSA6OiBPUyBJbmRlcGVuZGVudCcsCiAgICAgICAgJ0ludGVuZGVkIEF1ZGllbmNlIDo6IFNjaWVuY2UvUmVzZWFyY2gnLAogICAgICAgICdJbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzJywKPHxmaW1fZW5kfD4="]
["cf374c678822fa0cdabf91092c29df655b791be3-1","cf374c678822fa0cdabf91092c29df655b791be3","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gc2V0dXB0b29scyBpbXBvcnQgc2V0dXAsIGZpbmRfcGFja2FnZXMKCl9fdmVyc2lvbl9fID0gJzAuMC4xJwoKX19kb2NfXyA9ICdqYW5kYW4tY2xpIGFsbG93IHlvdSB2aXNpdCBqYW5kYW4ubmV0IHZpYSBjbGknCgpzZXR1cCgKICAgIG5hbWU9J2phbmRhbi1jbGknLAogICAgdmVyc2lvbj1fX3ZlcnNpb25fXywKICAgIHVybD0naHR0cHM6Ly9naXRodWIuY29tL2xvbnljYy9qYW5kYW4tcHknLAogICAgbGljZW5zZT0nTUlUJywKICAgIGF1dGhvcj0nbG9ueWNjJywKICAgIGF1dGhvcl9lbWFpbD0neGNjQDE2My5jb20nLAogICAgZGVzY3JpcHRpb249J2phbmRhbiBjbGknLAogICAgbG9uZ19kZXNjcmlwdGlvbj1fX2RvY19fLAogICAgaW5zdGFsbF9yZXF1aXJlcz1bCiAgICAgICAgJ2dyZXF1ZXN0cycsCiAgICAgICAgJ2JzNCcsCiAgICAgICAgJ2NsaWNrJywKICAgICAgICAndGFidWxhdGUnCiAgICBdLAogICAgcHl0aG9uX3JlcXVpcmVzPSc+PTMnLAo8fGZpbV9ob2xlfD4KICAgIGluY2x1ZGVfcGFja2FnZV9kYXRhPVRydWUsCiAgICBwbGF0Zm9ybXM9J2FueScsCiAgICBlbnRyeV9wb2ludHM9ewogICAgICAgICdjb25zb2xlX3NjcmlwdHMnOiBbCiAgICAgICAgICAgICdqYW5kYW4tcHkgPSBqYW5kYW5fY2xpLmNsaTpydW4nCiAgICAgICAgXQogICAgfSwKICAgIHBhY2thZ2VzPWZpbmRfcGFja2FnZXMoZXhjbHVkZT1bJ3Rlc3RzJywgJ3Rlc3RzLionXSksCiAgICBjbGFzc2lmaWVycz1bCiAgICAgICAgJ0Vudmlyb25tZW50IDo6IFdlYiBFbnZpcm9ubWVudCcsCiAgICAgICAgJ0ludGVuZGVkIEF1ZGllbmNlIDo6IERldmVsb3BlcnMnLAogICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNSVQgTGljZW5zZScsCiAgICAgICAgJ09wZXJhdGluZyBTeXN0ZW0gOjogT1MgSW5kZXBlbmRlbnQnLAogICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24nLAogICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy41JywKICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMuNicsCiAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzLjcnLAogICAgICAgICdUb3BpYyA6OiBUZXJtaW5hbHMnCiAgICBdCikKPHxmaW1fc3VmZml4fD4KICAgICN0ZXN0c19yZXF1aXJlID0gWydub3NlJ10sCiAgICAjdGVzdF9zdWl0ZSA9ICdub3NlLmNvbGxlY3RvcicsCiAgICAjcHlfbW9kdWxlcz1bJ2dyZXF1ZXN0cyddLAogICAgemlwX3NhZmU9RmFsc2UsCjx8ZmltX2VuZHw+"]
["2e22d4580545d1330a1643b8918923e873a0305e-4","2e22d4580545d1330a1643b8918923e873a0305e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gc2V0dXB0b29scyBpbXBvcnQgc2V0dXAsIGZpbmRfcGFja2FnZXMKCiMgUmVhZCBwYWNrYWdlIGluc3RhbGxhdGlvbiByZXF1aXJlbWVudHMgZnJvbSAncmVxdWlyZW1lbnRzLnR4dCcKZmlsZV9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKcmVxc19wYXRoID0gb3MucGF0aC5qb2luKGZpbGVfZGlyLCAicmVxdWlyZW1lbnRzLnR4dCIpCndpdGggb3BlbihyZXFzX3BhdGgpIGFzIGY6CiAgICByZXFzX3RleHQgPSBmLnJlYWQoKQogICAgcGFja2FnZV9yZXFzID0gWwogICAgICAgIGxpbmUgZm9yIGxpbmUgaW4gcmVxc190ZXh0LnNwbGl0KCJcbiIpIGlmIGxpbmUgYW5kIG5vdCBsaW5lLnN0cmlwKCkuc3RhcnRzd2l0aCgiIyIpCiAgICBdCgpzZXR1cCgKICAgIG5hbWU9InN1bW1lcl9weSIsCiAgICB2ZXJzaW9uPSIxLjEuMCIsCiAgICBwYWNrYWdlcz1maW5kX3BhY2thZ2VzKCIuIiksCjx8ZmltX2hvbGV8PgogICAgaW5zdGFsbF9yZXF1aXJlcz1wYWNrYWdlX3JlcXMsCiAgICBkZXNjcmlwdGlvbj0iR2VuZXJhbCBzdHJ1Y3R1cmUgZm9yIGNyZWF0aW5nIGVwaWRlbWlvbG9naWNhbCBtb2RlbHMgaW4gUHl0aG9uIiwKKQo8fGZpbV9zdWZmaXh8PgogICAgdXJsPSJodHRwczovL2dpdGh1Yi5jb20vanRyYXVlci9zdW1tZXJfcHkiLAogICAgbGljZW5zZT0iTUlUIiwKICAgIGF1dGhvcj0iSmFtZXMgVHJhdWVyIiwKICAgIGF1dGhvcl9lbWFpbD0iamFtZXMudHJhdWVyQG1vbmFzaC5lZHUiLAo8fGZpbV9lbmR8Pg=="]
["d470c9415dfe9cd1d3269ba50d26dbb8a3fcf60a-2","d470c9415dfe9cd1d3269ba50d26dbb8a3fcf60a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBsYXRmb3JtCmltcG9ydCBvcwppbXBvcnQgc3lzCmZyb20gYm94ZXMgaW1wb3J0IFBsYXllcgoKIiIiClJvb21zIG1haW4gbG9vcCB0aGF0IHJ1bnMgYW55IGxldmVsCiIiIgoKX19hdXRob3JfXyA9ICJEYW50ZSIKX192ZXJzaW9uX18gPSAiMC40LjEiCgoKZGVmIGNsZWFyX3NjcmVlbigpOgogICAgIiIiIENsZWFycyB0aGUgc2NyZWVuIHVzaW5nIHRoZSBjb3JyZWN0IG1ldGhvZCBmb3IgdGhlIHVzZXIncyBPUyAiIiIKICAgIGlmIHBsYXRmb3JtLnN5c3RlbSgpID09ICdXaW5kb3dzJzoKICAgICAgICBvcy5zeXN0ZW0oJ2NscycpCiAgICBlbHNlOgogICAgICAgIG9zLnN5c3RlbSgnY2xlYXInKQoKCmRlZiBwcmludF9jdXJyZW50X3Jvb20ocik6CiAgICAiIiIgUHJpbnRzIHRoZSBwbGF5ZXIncyBjdXJyZW50IHJvb20gZGVzY3JpcHRpb24sIGZvbGxvd2VkIGJ5IHRoZSBjb250ZW50cyBvZiBzYWlkIFJvb20sIHdpdGggcHJvcGVyIHNwYWNpbmcgIiIiCiAgICBwcmludChyLmRlc2NyaXB0aW9uKQogICAgcHJpbnQoKQogICAgcHJpbnQoJy09LScpCiAgICBwcmludCgpCgogICAgaWYgbGVuKHIuY29udGVudCkgPiAxOgogICAgICAgIHByaW50KCdIZXJlIEkgY2FuIHNlZS4uLicpCiAgICAgICAgZm9yIGEgaW4gci5jb250ZW50OgogICAgICAgICAgICBwcmludChhLm5hbWUpCiAgICBlbGlmIGxlbihyLmNvbnRlbnQpID09IDE6CiAgICAgICAgcHJpbnQoZidIZXJlIEkgc2VlIHtyLmNvbnRlbnRbMF0ubmFtZS5sb3dlcigpfS5cbicpCiAgICBlbHNlOgogICAgICAgIHByaW50KCkKCgpkZWYgcHJpbnRfdGFyZ2V0cyh0YXJnZXRzKToKICAgICIiIiBQcmludHMgdGhlIHBsYXllcidzIGN1cnJlbnQgcG9zc2libGUgYWN0aW9uIHRhcmdldHMsIGluY2x1ZGluZyBBY3RvcnMsIG1vdmVtZW50IHRvIG90aGVyIFJvb21zLAogICAgIGFuZCBpbnZlbnRvcnkgY2hlY2tpbmcgIiIiCiAgICBwcmludCgnQWN0aW9uczonKQogICAgZm9yIGsgaW4gdGFyZ2V0c1swXToKICAgICAgICBwcmludChmJ3trfSkge3RhcmdldHNbMF1ba119JykKICAgIHByaW50KCkKICAgIHByaW50KCdFeGl0czonKQogICAgZm9yIGsgaW4gdGFyZ2V0c1sxXToKICAgICAgICBwcmludChmJ3trfSkge3RhcmdldHNbMV1ba119JykKICAgIHByaW50KCkKCgpkZWYgYXNrX2Zvcl9jb21tYW5kKCk6CiAgICAiIiIgQXNrcyB0aGUgdXNlciB0byBwaWNrIGFuIGFjdGlvbiBvciBleGl0ICIiIgogICAgcmV0dXJuIGlucHV0KCdDaG9vc2UgeW91ciBhY3Rpb24gLyBleGl0OiAnKQoKCmRlZiBtYWluKCk6CiAgICAiIiIgTWFpbiBlbnRyeSBwb2ludCBvZiB0aGUgYXBwLCBydW5zIGxldmVsIHByb3ZpZGVkIGFzIGFyZ3VtZW50IGluIGEgbG9vcCB1bnRpbCB0aGUgcGxheWVyIHdpbnMgIiIiCiAgICB0cnk6CiAgICAgICAgbGV2ZWwgPSBfX2ltcG9ydF9fKHN5cy5hcmd2WzFdLnJlcGxhY2UoJy5weScsICcnKSkuTGV2ZWwoKQogICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgcHJpbnQoJ05vIGFyZ3VtZW50IHByb3ZpZGVkLCB1c2luZyBzYW1wbGUgbGV2ZWwnKQogICAgICAgIGlucHV0KCdQcmVzcyBlbnRlciB0byBjb250aW51ZS4uLicpCiAgICAgICAgbGV2ZWwgPSBfX2ltcG9ydF9fKCdkYW50ZXNfYWR2ZW50dXJlJykuTGV2ZWwoKQogICAgZXhjZXB0IE1vZHVsZU5vdEZvdW5kRXJyb3I6CiAgICAgICAgcHJpbnQoJ0xldmVsIG5vdCBmb3VuZCwgdXNpbmcgc2FtcGxlIGxldmVsJykKICAgICAgICBpbnB1dCgnUHJlc3MgZW50ZXIgdG8gY29udGludWUuLi4nKQogICAgICAgIGxldmVsID0gX19pbXBvcnRfXygnZGFudGVzX2FkdmVudHVyZScpLkxldmVsKCkKCiAgICBwbGF5ZXIgPSBQbGF5ZXIobGV2ZWwuc3RhcnQpCiAgICBjbGVhcl9zY3JlZW4oKQogICAgd2hpbGUgbm90IHBsYXllci53aW46CiAgICAgICAgciA9IHBsYXllci5sb2NhdGlvbgogICAgICAgIHRhcmdldHMgPSBwbGF5ZXIuYWN0aW9uc19hbmRfbW92ZXMKICAgICAgICBwcmludF9jdXJyZW50X3Jvb20ocikKICAgICAgICBwcmludF90YXJnZXRzKHRhcmdldHMpCgogICAgICAgIGNvbW1hbmQgPSBhc2tfZm9yX2NvbW1hbmQoKQoKICAgICAgICB3aGlsZSBjb21tYW5kIG5vdCBpbiB0YXJnZXRzWzBdIGFuZCBjb21tYW5kIG5vdCBpbiB0YXJnZXRzWzFdOgogICAgICAgICAgICBwcmludCgpCiAgICAgICAgICAgIHByaW50KCdJbnZhbGlkIGFjdGlvbiwgdHJ5IGFnYWluLicpCiAgICAgICAgICAgIGlucHV0KCdQcmVzcyBlbnRlciB0byBjb250aW51ZS4uLicpCiAgICAgICAgICAgIGNsZWFyX3NjcmVlbigpCiAgICAgICAgICAgIHByaW50X2N1cnJlbnRfcm9vbShyKQogICAgICAgICAgICBwcmludF90YXJnZXRzKHRhcmdldHMpCiAgICAgICAgICAgIGNvbW1hbmQgPSBhc2tfZm9yX2NvbW1hbmQoKQogICAgICAgIHByaW50KCkKICAgICAgICBwbGF5ZXIucGVyZm9ybV9hY3Rpb24oY29tbWFuZCkKPHxmaW1faG9sZXw+CiAgICBwcmludCgnWW91IHdpbiEnKQoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICIiIiBUaGlzIGlzIGV4ZWN1dGVkIHdoZW4gcnVuIGZyb20gdGhlIGNvbW1hbmQgbGluZSAiIiIKICAgIG1haW4oKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHByaW50KCkKICAgICAgICBpbnB1dCgnUHJlc3MgZW50ZXIgdG8gY29udGludWUuLi4nKQogICAgICAgIGNsZWFyX3NjcmVlbigpCjx8ZmltX2VuZHw+"]
["2e25365616e3665fa7c7805158931bf88edb665b-1","2e25365616e3665fa7c7805158931bf88edb665b","PHxmaW1fcHJlZml4fD4KZnJvbSBtYW5pbSBpbXBvcnQgKgppbXBvcnQgbnVtcHkgYXMgbnAKCmNsYXNzIFRlc3RPYmooVk1vYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsKiprd2FyZ3MpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgVk1vYmplY3QuX19pbml0X18oc2VsZiwqKmt3YXJncykgIAogICAgICAgIHggPSBucC5hcmFuZ2UoMCwgbnAucGkqNCwgMC4wMSkKICAgICAgICBwb2ludHMgPSBbbnAuYXJyYXkoW2ksbnAuc2luKGkpLDBdKSBmb3IgaSBpbiB4XQogICAgICAgIHNlbGYuc2V0X3BvaW50c19zbW9vdGhseShwb2ludHMpCjx8ZmltX2VuZHw+"]
["00c9ccbe5d11a9d50d953b0c35f926c0ebab68d2-4","00c9ccbe5d11a9d50d953b0c35f926c0ebab68d2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNtYXRoCm51bTEgPSBmbG9hdChpbnB1dCgiUGxlYXNlIGVudGVyIGEgbnVtYmVyOiAiKSkKbnVtMiA9IG51bTEgKiogMC41CnByaW50KCIlLjJmID0gJS4yZiAqICUuMmYiICUgKG51bTEsIG51bTIsIG51bTIpKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpudW0zID0gY21hdGguc3FydChudW0xKQpwcmludCgiJS4yZiA9ICUuMmYgKiAlLjJmIiAlIChudW0xLCBudW0zLnJlYWwsIG51bTMucmVhbCkpCjx8ZmltX2VuZHw+"]
["41557050ec371eb66f6531ebc42ac8f23e9ac025-1","41557050ec371eb66f6531ebc42ac8f23e9ac025","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgcmUKaW1wb3J0IHN0cmluZwpmcm9tIHJhbmRvbSBpbXBvcnQgc2VlZApmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZGludApmcm9tIHJhbmRvbSBpbXBvcnQgY2hvaWNlCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCgojIOOCueOCs+OCouaDheWgseioreWumgpjbGFzcyBzY29yaW5nOgogICAgIyBhZmZpbmUgZ2FwIHBlbmFsdHnjgpLkvb/nlKgKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXRjaCwgbWlzbWF0Y2gsIGdhcCwgZ2FwX2V4KToKICAgICAgICBzZWxmLm1hdGNoID0gbWF0Y2gKICAgICAgICBzZWxmLm1pc21hdGNoID0gbWlzbWF0Y2gKICAgICAgICBzZWxmLmdhcCA9IGdhcCAjIGdhcOmWi+Wni+ODmuODiuODq+ODhuOCo+ODvAogICAgICAgIHNlbGYuZ2FwX2V4ID0gZ2FwX2V4ICMgZ2Fw5Ly46ZW344Oa44OK44Or44OG44Kj44O8CgogICAgZGVmIG1hdGNoaW5nKHNlbGYsIHgsIHkpOgogICAgICAgICMgbWF0Y2jnorroqo0KICAgICAgICBpZiB4ID09IHk6CiAgICAgICAgICAgIHJldHVybiBzZWxmLm1hdGNoCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIHNlbGYubWlzbWF0Y2gKCmNsYXNzIG1hdHJpeDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4LCB5KToKICAgICAgICBzZWxmLnggPSBsZW4oeCkKICAgICAgICBzZWxmLnkgPSBsZW4oeSkKICAgIAogICAgZGVmIGdlbmVyYXRlKHNlbGYsIHgsIHkpOgogICAgICAgIHJldHVybiBbWzBdKih5KSBmb3IgaSBpbiByYW5nZSh4KV0KCmNsYXNzIHBhaXJpbmc6CiAgICBkZWYgX19pbml0X18oc2VsZix4LHkscGFyYW1zID0gc2NvcmluZygxLCAtMSwgLTIsIC0xKSk6CiAgICAgICAgc2VsZi54ID0geAogICAgICAgIHNlbGYueSA9IHkKICAgICAgICBzZWxmLmdhcCA9IHBhcmFtcy5nYXAKICAgICAgICBzZWxmLmdhcF9leCA9IHBhcmFtcy5nYXBfZXgKICAgICAgICBzZWxmLm1hdGNoaW5nID0gcGFyYW1zLm1hdGNoaW5nCgogICAgIyBhbGlnbWVudCDooYzliJfjga7kvZzmiJDjgahhZmZpbmUtc2NvcmXjga7oqIjnrpcKICAgIGRlZiBhbGlnbihzZWxmLHgseSk6IAogICAgICAgICMgWCwgWeOBr+OCouODqeOCpOODs+ODoeODs+ODiOOBruWvvuixoeOBq+OBquOCi+OCt+ODvOOCr+OCqOODs+OCuQogICAgICAgIG1hdCA9IG1hdHJpeCh4LHkpCiAgICAgICAgI3BhcmFtcyA9IHNjb3JpbmcoMSwgLTEsIC0yLCAtMSkgI+aMh+WumuOBleOCjOOBn+ODkeODqeODoeODvOOCv+ODvAoKICAgICAgICAjIGRpbWVuc2lvbnMKICAgICAgICBpX2RpbSA9IGxlbih4KSsxCiAgICAgICAgal9kaW0gPSBsZW4oeSkrMQoKICAgICAgICAjIERQ6KGM5YiX44Gu5L2c5oiQCiAgICAgICAgc2VsZi5NID0gbWF0LmdlbmVyYXRlKDErbGVuKHgpLDErbGVuKHkpKQogICAgICAgIHNlbGYuSXggPSBtYXQuZ2VuZXJhdGUoMStsZW4oeCksMStsZW4oeSkpCiAgICAgICAgc2VsZi5JeSA9IG1hdC5nZW5lcmF0ZSgxK2xlbih4KSwxK2xlbih5KSkKCiAgICAgICAgIyB0cmFjZWJhY2vooYzliJflvaLmiJAKICAgICAgICBzZWxmLk1fdHJhY2UgPSBtYXQuZ2VuZXJhdGUoMStsZW4oeCksMStsZW4oeSkpCiAgICAgICAgc2VsZi5JeF90cmFjZSA9IG1hdC5nZW5lcmF0ZSgxK2xlbih4KSwxK2xlbih5KSkKICAgICAgICBzZWxmLkl5X3RyYWNlID0gbWF0LmdlbmVyYXRlKDErbGVuKHgpLDErbGVuKHkpKQoKICAgICAgICAjIOeUn+aIkOOBleOCjOOBn+ihjOWIl+OBruWIneacn+WMliAgKGFmZmluZeODmeODvOOCueOCseODvOOCuSkKICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBpX2RpbSk6CiAgICAgICAgICAgIHNlbGYuTVtpXVswXSA9IHNlbGYuZ2FwICsgc2VsZi5nYXBfZXgqKGktMSkKICAgICAgICAgICAgc2VsZi5JeFtpXVswXSA9IC1mbG9hdCgnaW5mJykKICAgICAgICAgICAgc2VsZi5JeVtpXVswXSA9IC1mbG9hdCgnaW5mJykKICAgICAgICBmb3IgaiBpbiByYW5nZSgxLCBqX2RpbSk6CiAgICAgICAgICAgIHNlbGYuTVswXVtqXSA9IHNlbGYuZ2FwICsgc2VsZi5nYXBfZXgqKGotMSkKICAgICAgICAgICAgc2VsZi5JeFswXVtqXSA9IC1mbG9hdCgnaW5mJykKICAgICAgICAgICAgc2VsZi5JeVswXVtqXSA9IC1mbG9hdCgnaW5mJykKCiAgICAgICAgIyDnlJ/miJDjgZXjgozjgZ/ooYzliJfjgavlgKTjgpLlhaXlipsgKERQ44GodHJhY2ViYWNrKQogICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGlfZGltKToKICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoMSwgal9kaW0pOgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBzZWxmLkl4W2ldW2pdID0gbWF4KFtzZWxmLmdhcCArIHNlbGYuTVtpLTFdW2pdLCBzZWxmLmdhcF9leCArIHNlbGYuSXhbaS0xXVtqXV0pCiAgICAgICAgICAgICAgICBzZWxmLkl4X3RyYWNlW2ldW2pdID0gW3NlbGYuZ2FwICsgc2VsZi5NW2ktMV1bal0sIHNlbGYuZ2FwX2V4ICsgc2VsZi5JeFtpLTFdW2pdXS5pbmRleChzZWxmLkl4W2ldW2pdKQoKICAgICAgICAgICAgICAgIHNlbGYuSXlbaV1bal0gPSBtYXgoW3NlbGYuZ2FwICsgc2VsZi5NW2ldW2otMV0sIHNlbGYuZ2FwX2V4ICsgc2VsZi5JeVtpXVtqLTFdXSkKICAgICAgICAgICAgICAgIHNlbGYuSXlfdHJhY2VbaV1bal0gPSBbc2VsZi5nYXAgKyBzZWxmLk1baV1bai0xXSwgc2VsZi5nYXBfZXggKyBzZWxmLkl5W2ldW2otMV1dLmluZGV4KHNlbGYuSXlbaV1bal0pCgogICAgICAgICAgICAgICAgc2VsZi5NW2ldW2pdICA9IG1heChbc2VsZi5tYXRjaGluZyh4W2ktMV0sIHlbai0xXSkgKyBzZWxmLk1baS0xXVtqLTFdLCBzZWxmLkl4W2ldW2pdLCBzZWxmLkl5W2ldW2pdXSkKICAgICAgICAgICAgICAgIHNlbGYuTV90cmFjZVtpXVtqXSA9IFtzZWxmLm1hdGNoaW5nKHhbaS0xXSwgeVtqLTFdKSArIHNlbGYuTVtpLTFdW2otMV0sIHNlbGYuSXhbaV1bal0sIHNlbGYuSXlbaV1bal1dLmluZGV4KHNlbGYuTVtpXVtqXSkKICAgICAgICAgICAgICAgIAogICAgICAgIG1hdHJpeF9zY29yZSA9IFtzZWxmLkl4W2ldW2pdLCBzZWxmLkl5W2ldW2pdLCBzZWxmLk1baV1bal1dCiAgICAgICAgYWZfc2NvcmUgID0gbWF4KG1hdHJpeF9zY29yZSkKCiAgICAgICAgIyBiYWNrdHJhY2XnlKjjgrnjgrPjgqIgKHRyYWNlYmFja+OBrumWi+Wni+S9jee9ri0+YWZfc2NvcmUpCiAgICAgICAgc2VsZi5iYWNrdHJhY2UgPSBtYXRyaXhfc2NvcmUuaW5kZXgoYWZfc2NvcmUpCiAgICAgICAgCiAgICAgICAgcmV0dXJuIGFmX3Njb3JlCgogICAgZGVmIGJhY2t0cmFjaW5nKHNlbGYsIHgsIHkpOgogICAgICAgICMg5YWD44Guc2VxdWVuY2XjgYvjgonjgqLjg6njgqTjg7Pjg6Hjg7Pjg4jplovlp4sKICAgICAgICBnZW5feCwgZ2VuX3kgPSB4LCB5CgogICAgICAgIGksIGogPSBsZW4oeCksIGxlbih5KQoKICAgICAgICAjIGJhY2t0cmFjaW5n44GL44KJ5rGC44KB44Gf44Ki44Op44Kk44Oz44Oh44Oz44OI44Gu5L2c5oiQCiAgICAgICAgd2hpbGUgaT4wIGFuZCBqPjA6CiAgICAgICAgICAgIGlmIHNlbGYuYmFja3RyYWNlID09IDA6CiAgICAgICAgICAgICAgICBpZiBzZWxmLkl4X3RyYWNlW2ldW2pdID09IDA6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5iYWNrdHJhY2UgPSAyCiAgICAgICAgICAgICAgICBnZW5feSA9IGdlbl95WzpqXSArICdfJyArICBnZW5feVtqOl0KICAgICAgICAgICAgICAgIGkgLT0gMQogICAgICAgICAgICBlbGlmIHNlbGYuYmFja3RyYWNlID09IDE6CiAgICAgICAgICAgICAgICBpZiBzZWxmLkl5X3RyYWNlW2ldW2pdID09IDA6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5iYWNrdHJhY2UgPSAyCiAgICAgICAgICAgICAgICBnZW5feCA9IGdlbl94WzppXSArICdfJyArIGdlbl94W2k6XQogICAgICAgICAgICAgICAgaiAtPSAxCiAgICAgICAgICAgIGVsaWYgc2VsZi5iYWNrdHJhY2UgPT0gMjoKICAgICAgICAgICAgICAgIGlmIHNlbGYuTV90cmFjZVtpXVtqXSA9PSAxOgogICAgICAgICAgICAgICAgICAgIHNlbGYuYmFja3RyYWNlID0gMAogICAgICAgICAgICAgICAgZWxpZiBzZWxmLk1fdHJhY2VbaV1bal0gPT0gMjoKICAgICAgICAgICAgICAgICAgICBzZWxmLmJhY2t0cmFjZSA9IDEKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgaSAtPSAxCiAgICAgICAgICAgICAgICAgICAgaiAtPSAxCgogICAgICAgICMg5L2V44GL44GM5q6L44GV44KM44Gf44KJ5YiG44GC44Gj44Gf44KJLCDov73liqAKICAgICAgICBmb3IgbGVmdCBpbiByYW5nZShpKToKICAgICAgICAgICAgZ2VuX3kgPSBnZW5feVs6MF0gKyAnXycgKyBnZW5feVswOl0KICAgICAgICBmb3IgbGVmdCBpbiByYW5nZShqKToKICAgICAgICAgICAgZ2VuX3ggPSBnZW5feFs6MF0gKyAnXycgKyBnZW5feFswOl0KCiAgICAgICAgcmV0dXJuIFtnZW5feCwgZ2VuX3ldCgpjbGFzcyBkYXRhKCk6CiAgICAjIEZBU1RB5YWl5Yqb44Gu6Kej5p6QCiAgICBkZWYgcGFyc2VfZmEoc2VsZiwgaW5wdXQpOgogICAgICAgIHNlcV9sID0gIFtdCgogICAgICAgIGZvciBsaW5lIGluIGlucHV0OgogICAgICAgICAgICBpZiBsaW5lID09ICJcbiI6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQogICAgICAgICAgICAgICAgc2VxX2wuYXBwZW5kKGxpbmUpCiAgICAgICAgcmV0dXJuIHNlcV9sICMg5pyA5b6M44Guc2VxdWVuY2Xjga7jg4fjg7zjgr/jgpLlh7rlipsKICAgIAogICAgZGVmIEROQShzZWxmLCBsZW5ndGgpOgogICAgICAgICMg5byV5pWw44Gr5oyH5a6a44GV44KM44Gf6ZW344GV44GuRE5BIHNlcXVlbmNl44KS5L2c5oiQCiAgICAgICAgcmV0dXJuICcnLmpvaW4oY2hvaWNlKCdDR1RBJykgZm9yIF8gaW4gcmFuZ2UobGVuZ3RoKSkKPHxmaW1faG9sZXw+CgogICAgIyB3aXRoIG9wZW4oIm1hbl9vdXRwdXQudHh0IiwgInciKSBhcyBvdXQ6CiAgICAjICAgICBvdXQud3JpdGUoWF9zZXEpCiAgICAjICAgICBvdXQud3JpdGUoWV9zZXEpCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIyDliJ3mnJ/ljJYKICAgIGhlYWRlciA9IFtdCiAgICBzZXEgPSBbXQogICAgc2VlZChkYXRldGltZS5ub3coKSkgIyByYW5kb20KICAgIGxlbmd0aCA9IHJhbmRpbnQoMCwgMTAwKSAjIOWFpeWKm+mFjeWIl+OBruacgOWkp+mVtzEwMOOBvuOBp3JhbmRvbeOBq+mBuOaKngoKICAgICMgRkFTVEHjga7mqJnmupblhaXlipsKICAgIGluRmlsZSA9IHN5cy5hcmd2WzFdCgogICAgIyBkYXRh44Kv44Op44K544GnRE5B6YWN5YiX44Gu5L2c5oiQ44Go5Y+X44GR5Y+W44KKICjliY3lh6bnkIYpCiAgICBzZXFfZGF0YSA9IGRhdGEoKQoKICAgICMgcmFuZG9t44GnRE5BIHNlcXVlbmNl44GuRkHjg5XjgqHjgqTjg6vkvZzmiJAKICAgIHdpdGggb3BlbihpbkZpbGUsICJ3IikgYXMgZjoKICAgICAgICBmb3IgcyBpbiByYW5nZSgxMCk6CiAgICAgICAgICAgIGYud3JpdGUoc2VxX2RhdGEuRE5BKGxlbmd0aCkpCiAgICAgICAgICAgIGYud3JpdGUoIlxuXG4iKQoKICAgICMgRkHjg5XjgqHjgqTjg6vop6PmnpAKICAgIHdpdGggb3BlbihpbkZpbGUsICJyIikgYXMgZjoKICAgICAgICBmb3IgZWFjaF9zZXEgaW4gc2VxX2RhdGEucGFyc2VfZmEoZik6CiAgICAgICAgICAgIHNlcS5hcHBlbmQoZWFjaF9zZXEpICMgc2Vx44Gu44Oq44K544OICgogICAgIyDlhaXlipsgc2VxdWVuY2UKICAgIHgsIHkgPSBzZXFbcmFuZGludCgwLGxlbihzZXEpKV0sIHNlcVtyYW5kaW50KDAsbGVuKHNlcSkpXQogICAgcHJpbnQoIi0tLS0tLS0tLS0tLS0tLS3lhaXlipstLS0tLS0tLS0tLS0tLS0tIikKICAgIHByaW50KCJTZXF1ZW5jZTE6ICIsIHgsICJcbiIsICJTZXF1ZW5jZTI6ICIsICB5KQoKICAgICMgcGFpcmluZ+OCr+ODqeOCueOBrnNlcXVlbmNl44Kk44Oz44K544K/44Oz44K544KS5ZG844Gz5Ye644GX44Gm44CB44Ki44Op44Kk44Oz44Oh44Oz44OI5aeL44KB44KLCiAgICAjIHBhcmFtc+OBr+OCueOCs+OCouOBruODkeODqeODoeODvOOCv+ODvDogc2NvcmluZyhtYXRjaCwgbWlzbWF0Y2gsIGdhcF9zdGFydF9wZW5hbHR5LCBnYXBfZXh0ZW5kX3BlbmFsdHkpCiAgICBzZXF1ZW5jZSA9IHBhaXJpbmcoeCwgeSwgcGFyYW1zPXNjb3JpbmcoMSwgLTEsIC0yLCAtMSkpIAogICAgIyBhZmZpbmUg44Ki44Op44Kk44Oz44Oh44Oz44OI44K544Kz44KiCiAgICBhZl9zY29yZSA9IHNlcXVlbmNlLmFsaWduKHgseSkKICAgICMgYmFja3RyYWNpbmfjgYvjgonkvZzmiJDjgZXjgozjgZ/jgqLjg6njgqTjg7Pjg6Hjg7Pjg4gKICAgIFtyZXMxLCByZXMyXSA9IHNlcXVlbmNlLmJhY2t0cmFjaW5nKHgsIHkpCgogICAgIyDntZDmnpzlh7rlipsgKOikh+aVsOino+OBruOBhuOBoeS4gOOBpCkKICAgIHByaW50KCItLS0tLS0tLS0tLS0tLS0t57WQ5p6cLS0tLS0tLS0tLS0tLS0tLSIpCiAgICBwcmludCgiQWxpZ25tZW50IFNjb3JlOiAiLCBhZl9zY29yZSkKICAgIHByaW50KCJTZXF1ZW5jZTEgYWZ0ZXIgYWxpZ246ICIsIHJlczEpCiAgICBwcmludCgiU2VxdWVuY2UyIGFmdGVyIGFsaWduOiAiLCByZXMyKQo8fGZpbV9zdWZmaXh8PgoKCiAgICAjIFhfc2VxID0gc3RyKCJGaXJzdCBzZXE6ICIrIFggKyJcbiIpCiAgICAjIFlfc2VxID0gc3RyKCJTZWNvbmQgc2VxOiAiKyBZICsiXG5cbiIpCjx8ZmltX2VuZHw+"]
["dac5230270a54c726216be10c32f053ecb01b0f0-1","dac5230270a54c726216be10c32f053ecb01b0f0","PHxmaW1fcHJlZml4fD4KIiIiUGFja2FnZS1sZXZlbCBlbnRyeXBvaW50IiIiCgpmcm9tIC4gaW1wb3J0IF9fdmVyc2lvbl9fLCBjb21waWxlZFdpdGhPcGVuTVAsIGhhc19jbGlicywgaGRmNV9lbmFibGVkCmltcG9ydCBvcwppbXBvcnQgc3lzCgpkZWYgcHJpbnRfaW5mbygpOgogICAgIiIiRGlzcGxheXMgaW5mb3JtYXRpb24gb24gdGhlIGN1cnJlbnQgQU1JQ0kgaW5zdGFsbGF0aW9uLgoKICAgIFVzZWZ1bCBmb3IgdmVyaWZ5aW5nIHBhY2thZ2UgaW5zdGFsbGF0aW9uIG9mIHN1Ym1pdHRpbmcgYnVnIHJlcG9ydHMiIiIKICAgIGZlYXR1cmVzID0gW10KCiAgICBpZiBoYXNfY2xpYnM6CiAgICAgICAgZmVhdHVyZXMuYXBwZW5kKCJleHRlbnNpb25zIikKCiAgICBpZiBjb21waWxlZFdpdGhPcGVuTVAoKToKICAgICAgICBmZWF0dXJlcy5hcHBlbmQoIk9wZW5NUCIpCgo8fGZpbV9ob2xlfD4KCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBwcmludF9pbmZvKCkKPHxmaW1fc3VmZml4fD4KICAgIGlmIGhkZjVfZW5hYmxlZDoKICAgICAgICBmZWF0dXJlcy5hcHBlbmQoIkhERjUiKQoKICAgIHByaW50KGYiQU1JQ0kgKHtzeXMucGxhdGZvcm19KSB2ZXJzaW9uIHtfX3ZlcnNpb25fX30gKHsnLCcuam9pbihmZWF0dXJlcyl9KSIpCjx8ZmltX2VuZHw+"]
["0057ba364b2c2d0d3aaee96a2597fe1bd4f6008c-3","0057ba364b2c2d0d3aaee96a2597fe1bd4f6008c","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiClRlc3RzIGZvciB0aGUgc3Vycm9nYXRlZXNjYXBlIGNvZGVjCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQsIGRpdmlzaW9uLCB1bmljb2RlX2xpdGVyYWxzCmZyb20gZnV0dXJlLmJ1aWx0aW5zIGltcG9ydCAoYnl0ZXMsIGRpY3QsIGludCwgcmFuZ2UsIHJvdW5kLCBzdHIsIHN1cGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzY2lpLCBjaHIsIGhleCwgaW5wdXQsIG5leHQsIG9jdCwgb3BlbiwgcG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciwgbWFwLCB6aXApCmZyb20gZnV0dXJlLnV0aWxzLnN1cnJvZ2F0ZWVzY2FwZSBpbXBvcnQgcmVnaXN0ZXJfc3Vycm9nYXRlZXNjYXBlCmZyb20gZnV0dXJlLnRlc3RzLmJhc2UgaW1wb3J0IHVuaXR0ZXN0LCBleHBlY3RlZEZhaWx1cmVQWTI2LCBleHBlY3RlZEZhaWx1cmVQWTIKCgpjbGFzcyBUZXN0U3Vycm9nYXRlRXNjYXBlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICByZWdpc3Rlcl9zdXJyb2dhdGVlc2NhcGUoKQoKICAgIEBleHBlY3RlZEZhaWx1cmVQWTI2ICAgICMgUHl0aG9uIDIuNiBzdHIuZGVjb2RlKCkgdGFrZXMgbm8ga2V5d29yZCBhcmdzCiAgICBkZWYgdGVzdF9zdXJyb2dhdGVlc2NhcGUoc2VsZik6Cjx8ZmltX2hvbGV8PgogICAgICAgIHUgPSAnRnJvbTogZm9vQGJhci5jb21cblRvOiBiYXpcbk1pbWUtVmVyc2lvbjogMS4wXG5Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcbkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NFxuXG5jTU8yYzNSaGJBXHVkY2MzXHVkY2ExPVxuJwogICAgICAgIHMyID0gcy5kZWNvZGUoJ0FTQ0lJJywgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczIsIHUpCgogICAgZGVmIHRlc3RfZW5jb2RlX2FzY2lpX3N1cnJvZ2F0ZWVzY2FwZShzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUaGlzIGNyb3BzIHVwIGluIHRoZSBlbWFpbCBtb2R1bGUuIEl0IHdvdWxkIGJlIG5pY2UgaWYgaXQgd29ya2VkIC4uLgogICAgICAgICIiIgogICAgICAgIHBheWxvYWQgPSBzdHIodSdjTU8yYzNSaGJBXHVkY2MzXHVkY2ExPVxuJykKICAgICAgICBiID0gcGF5bG9hZC5lbmNvZGUoJ2FzY2lpJywgJ3N1cnJvZ2F0ZWVzY2FwZScpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiJ2NNTzJjM1JoYkFceGMzXHhhMT1cbicpCgogICAgQGV4cGVjdGVkRmFpbHVyZVBZMgogICAgZGVmIHRlc3RfZW5jb2RlX2FzY2lpX3N1cnJvZ2F0ZWVzY2FwZV9ub25fbmV3c3RyKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIEFzIGFib3ZlIGJ1dCB3aXRob3V0IGEgbmV3c3RyIG9iamVjdC4gRmFpbHMgb24gUHkyLgogICAgICAgICIiIgogICAgICAgIHBheWxvYWQgPSB1J2NNTzJjM1JoYkFcdWRjYzNcdWRjYTE9XG4nCiAgICAgICAgYiA9IHBheWxvYWQuZW5jb2RlKCdhc2NpaScsICdzdXJyb2dhdGVlc2NhcGUnKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYidjTU8yYzNSaGJBXHhjM1x4YTE9XG4nKQoKCmNsYXNzIFN1cnJvZ2F0ZUVzY2FwZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIiIiCiAgICBUaGVzZSB0ZXN0cyBhcmUgZnJvbSBQeXRob24gMy4zJ3MgdGVzdCBzdWl0ZQogICAgIiIiCiAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgcmVnaXN0ZXJfc3Vycm9nYXRlZXNjYXBlKCkKCiAgICBkZWYgdGVzdF91dGY4KHNlbGYpOgogICAgICAgICMgQmFkIGJ5dGUKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiZm9vXHg4MGJhciIuZGVjb2RlKCJ1dGYtOCIsICJzdXJyb2dhdGVlc2NhcGUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJmb29cdWRjODBiYXIiKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKCJmb29cdWRjODBiYXIiKS5lbmNvZGUoInV0Zi04IiwgInN1cnJvZ2F0ZWVzY2FwZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgYiJmb29ceDgwYmFyIikKICAgICAgICAjIGJhZC11dGYtOCBlbmNvZGVkIHN1cnJvZ2F0ZQogICAgICAgICMgc2VsZi5hc3NlcnRFcXVhbChiIlx4ZWRceGIwXHg4MCIuZGVjb2RlKCJ1dGYtOCIsICJzdXJyb2dhdGVlc2NhcGUiKSwKICAgICAgICAjICAgICAgICAgICAgICAgICAgIlx1ZGNlZFx1ZGNiMFx1ZGM4MCIpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoIlx1ZGNlZFx1ZGNiMFx1ZGM4MCIpLmVuY29kZSgidXRmLTgiLCAic3Vycm9nYXRlZXNjYXBlIiksCiAgICAgICAgICAgICAgICAgICAgICAgICBiIlx4ZWRceGIwXHg4MCIpCgogICAgZGVmIHRlc3RfYXNjaWkoc2VsZik6CiAgICAgICAgIyBiYWQgYnl0ZQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJmb29ceDgwYmFyIi5kZWNvZGUoImFzY2lpIiwgInN1cnJvZ2F0ZWVzY2FwZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgImZvb1x1ZGM4MGJhciIpCiAgICAgICAgIyBGYWlsczoKICAgICAgICAjIHNlbGYuYXNzZXJ0RXF1YWwoImZvb1x1ZGM4MGJhciIuZW5jb2RlKCJhc2NpaSIsICJzdXJyb2dhdGVlc2NhcGUiKSwKICAgICAgICAjICAgICAgICAgICAgICAgICAgYiJmb29ceDgwYmFyIikKCiAgICBAZXhwZWN0ZWRGYWlsdXJlUFkyCiAgICBkZWYgdGVzdF9jaGFybWFwKHNlbGYpOgogICAgICAgICMgYmFkIGJ5dGU6IFx4YTUgaXMgdW5tYXBwZWQgaW4gaXNvLTg4NTktMwogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJmb29ceGE1YmFyIi5kZWNvZGUoImlzby04ODU5LTMiLCAic3Vycm9nYXRlZXNjYXBlIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAiZm9vXHVkY2E1YmFyIikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJmb29cdWRjYTViYXIiLmVuY29kZSgiaXNvLTg4NTktMyIsICJzdXJyb2dhdGVlc2NhcGUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGIiZm9vXHhhNWJhciIpCgogICAgZGVmIHRlc3RfbGF0aW4xKHNlbGYpOgogICAgICAgICMgSXNzdWU2MzczCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiXHVkY2U0XHVkY2ViXHVkY2VmXHVkY2Y2XHVkY2ZjIi5lbmNvZGUoImxhdGluLTEiLCAic3Vycm9nYXRlZXNjYXBlIiksCiAgICAgICAgICAgICAgICAgICAgICAgICBiIlx4ZTRceGViXHhlZlx4ZjZceGZjIikKCiAgICAjIEZJWE1FOgogICAgQGV4cGVjdGVkRmFpbHVyZVBZMgogICAgZGVmIHRlc3RfZW5jb2Rpbmdfd29ya3Nfbm9ybWFsbHkoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCB0aGF0IGVuY29kaW5nIGludG8gdmFyaW91cyBlbmNvZGluZ3MgKHBhcnRpY3VsYXJseSB1dGYtMTYpCiAgICAgICAgc3RpbGwgd29ya3Mgd2l0aCB0aGUgc3Vycm9nYXRlZXNjYXBlIGVycm9yIGhhbmRsZXIgaW4gYWN0aW9uIC4uLgogICAgICAgICIiIgogICAgICAgIFRFU1RfVU5JQ09ERV9TVFIgPSB1J+KEnc61zrHiiIJAw5/Kn+KEriDimILihK/huafRgiDPhc634bivwqLimLrhuJPihK4nCiAgICAgICAgIyBUayBpY29uIGFzIGEgLmdpZjoKICAgICAgICBURVNUX0JZVEVfU1RSID0gYidHSUY4OWFceDBlXHgwMFx4MGJceDAwXHg4MFx4ZmZceDAwXHhmZlx4MDBceDAwXHhjMFx4YzBceGMwIVx4ZjlceDA0XHgwMVx4MDBceDAwXHgwMVx4MDAsXHgwMFx4MDBceDAwXHgwMFx4MGVceDAwXHgwYlx4MDBAXHgwMlx4MWZceDBjXHg4ZVx4MTBceGJiXHhjYW5ceDkwXHg5OVx4YWYmXHhkOFx4MWFceGNlXHg5YXJceDA2Rlx4ZDdceGYxXHg5MFx4YTFjXHg5ZVx4ZThceDg0XHg5OVx4ODlceDk3XHhhMkpceDAxXHgwMDtceDFhXHgxNFx4MDA7O1x4YmFcbkRceDE0XHgwMFx4MDA7OycKICAgICAgICAjIHMxID0gJ3F1w6lzdGlvbmFibGUnCiAgICAgICAgczEgPSBURVNUX1VOSUNPREVfU1RSCiAgICAgICAgYjEgPSBzMS5lbmNvZGUoJ3V0Zi04JykKICAgICAgICBiMiA9IHMxLmVuY29kZSgndXRmLTE2JykKICAgICAgICAjIGIzID0gczEuZW5jb2RlKCdsYXRpbi0xJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIxLCBzdHIoczEpLmVuY29kZSgndXRmLTgnLCAnc3Vycm9nYXRlZXNjYXBlJykpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiMiwgc3RyKHMxKS5lbmNvZGUoJ3V0Zi0xNicsICdzdXJyb2dhdGVlc2NhcGUnKSkKICAgICAgICAjIHNlbGYuYXNzZXJ0RXF1YWwoYjMsIHN0cihzMSkuZW5jb2RlKCdsYXRpbi0xJywgJ3N1cnJvZ2F0ZWVzY2FwZScpKQoKICAgICAgICBzMiA9ICfjgY3jgZ/jgarjgYTjga7jgojjgorjgY3jgozjgYTjgarmlrnjgYzjgYTjgYQnCiAgICAgICAgYjQgPSBzMi5lbmNvZGUoJ3V0Zi04JykKICAgICAgICBiNSA9IHMyLmVuY29kZSgndXRmLTE2JykKICAgICAgICBiNiA9IHMyLmVuY29kZSgnc2hpZnQtamlzJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGI0LCBzdHIoczIpLmVuY29kZSgndXRmLTgnLCAnc3Vycm9nYXRlZXNjYXBlJykpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiNSwgc3RyKHMyKS5lbmNvZGUoJ3V0Zi0xNicsICdzdXJyb2dhdGVlc2NhcGUnKSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGI2LCBzdHIoczIpLmVuY29kZSgnc2hpZnQtamlzJywgJ3N1cnJvZ2F0ZWVzY2FwZScpKQoKICAgIGRlZiB0ZXN0X2RlY29kaW5nX3dvcmtzX25vcm1hbGx5KHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRlc3QgdGhhdCBkZWNvZGluZyBpbnRvIHZhcmlvdXMgZW5jb2RpbmdzIChwYXJ0aWN1bGFybHkgdXRmLTE2KQogICAgICAgIHN0aWxsIHdvcmtzIHdpdGggdGhlIHN1cnJvZ2F0ZWVzY2FwZSBlcnJvciBoYW5kbGVyIGluIGFjdGlvbiAuLi4KICAgICAgICAiIiIKICAgICAgICBzMSA9ICdxdcOpc3Rpb25hYmxlJwogICAgICAgIGIxID0gczEuZW5jb2RlKCd1dGYtOCcpCiAgICAgICAgYjIgPSBzMS5lbmNvZGUoJ3V0Zi0xNicpCiAgICAgICAgYjMgPSBzMS5lbmNvZGUoJ2xhdGluLTEnKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczEsIGIxLmRlY29kZSgndXRmLTgnLCAnc3Vycm9nYXRlZXNjYXBlJykpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMSwgYjIuZGVjb2RlKCd1dGYtMTYnLCAnc3Vycm9nYXRlZXNjYXBlJykpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMSwgYjMuZGVjb2RlKCdsYXRpbi0xJywgJ3N1cnJvZ2F0ZWVzY2FwZScpKQoKICAgICAgICBzMiA9ICfmlocnCiAgICAgICAgYjQgPSBzMi5lbmNvZGUoJ3V0Zi04JykKICAgICAgICBiNSA9IHMyLmVuY29kZSgndXRmLTE2JykKICAgICAgICBiNiA9IHMyLmVuY29kZSgnc2hpZnQtamlzJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMyLCBiNC5kZWNvZGUoJ3V0Zi04JywgJ3N1cnJvZ2F0ZWVzY2FwZScpKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczIsIGI1LmRlY29kZSgndXRmLTE2JywgJ3N1cnJvZ2F0ZWVzY2FwZScpKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczIsIGI2LmRlY29kZSgnc2hpZnQtamlzJywgJ3N1cnJvZ2F0ZWVzY2FwZScpKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICB1bml0dGVzdC5tYWluKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICAiIiIKICAgICAgICBGcm9tIHRoZSBiYWNrcG9ydCBvZiB0aGUgZW1haWwgcGFja2FnZQogICAgICAgICIiIgogICAgICAgIHMgPSBiJ0Zyb206IGZvb0BiYXIuY29tXG5UbzogYmF6XG5NaW1lLVZlcnNpb246IDEuMFxuQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XG5Db250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjRcblxuY01PMmMzUmhiQVx4YzNceGExPVxuJwo8fGZpbV9lbmR8Pg=="]
["2113205152670e22df437c02aee59e7d022955c0-4","2113205152670e22df437c02aee59e7d022955c0","PHxmaW1fcHJlZml4fD4KIiIiIFRoaXMgc2NyaXB0IGV4dHJhY3RzIHRoZSB5ZWFycwogICAgY29tbW9uIHRvIGFsbCBkYXRhc2V0cy4gCiAgICBUaGUgY3N2IGZpbGUgQ09OU1VNUFRJT04gY29udGFpbnMgc29tZSBub24gCiAgICBpbXBvcnRhbnQgKGV4cGxhbmF0b3J5IHRleHQpIGVuZCByb3dzIAogICAgd2hpY2ggd291bGQgY3JlYXRlIHByb2JsZW1zLiBIZW5jZSB3ZSBjcmVhdGUgCiAgICBhIHRlbXBvcmFyeSBmaWxlIFRFTVBfQ09OU1VNUFRJT04gd2l0aAogICAgdGhlc2Ugcm93cyByZW1vdmVkLgoiIiIKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgY3N2CmltcG9ydCBmdW5jdG9vbHMKaW1wb3J0IGl0ZXJ0b29scyBhcyBpdAppbXBvcnQgb3MKIyBpbXBvcnQgY2xhc3Mgd2l0aCBmdWxsIHBhdGhzIHRvIGZpbGVzCmltcG9ydCBmaWxlX25hbWVzIGFzIGZuCgoKIyBwYXRoIG9mIGNzdiBmaWxlIHRvIHN0b3JlIHllYXJzIGNvbW1vbiB0byBhbGwgZGF0YXNldHMKQ09NTU9OX1lFQVJTID0gZm4uQ2xlYW5lZFBhdGhzLllFQVJTCiMgZ2V0IHBhdGhzIG9mIGluZGl2aWR1YWwgb3JpZ2luYWwgZmlsZXMKR0RQID0gZm4uT3JpZ2luYWxQYXRocy5HRFAKUE9MSVRJQ1MgPSBmbi5PcmlnaW5hbFBhdGhzLlBPTElUSUNTCkNPTlNVTVBUSU9OID0gZm4uT3JpZ2luYWxQYXRocy5DT05TVU1QVElPTgpDQVBBQ0lUWSA9IGZuLk9yaWdpbmFsUGF0aHMuQ0FQQUNJVFkKV0lORCA9IGZuLk9yaWdpbmFsUGF0aHMuV0lORAoKCmRlZiBleHRyYWN0X2NvbW1vbl95ZWFycyhGSUxFUyk6CiAgICAiIiJUaGlzIGZ1bmN0aW9uIGV4dHJhY3QgdGhlIHllYXJzIGNvbW1vbiB0byBhbGwgCiAgICAgICAgZGF0YSBzZXRzLiAKICAgICAgICBBcmd1bWVudHMgb2YgZnVjbnRpb24gYXJlIEZJTEVTIC0+IGxpc3Qgb2YgdHJpcGxlcwogICAgICAgIHdoZXJlIGVsZW1lbnRzIGFyZSBkYXRhIHNldCBmaWxlbmFtZSwgY29sdW1uL3Jvdy9oZWFkZXIKICAgICAgICBkZXBlbmRpbmcgd2hlcmUgdGhlIHllYXJzIHJlc2lkZSBpbiB0aGUgCiAgICAgICAgZGF0YSBzZXQgYW5kIGFuIGludGVnZXIgZm9yIHRoZSByZXNwZWN0aXZlIHJvdy9jb2x1bW4gCiAgICAgICAgcG9zaXRpb24gb2YgdGhlIHllYXIgdmFsdWVzOwogICAgIiIiCiAgICAjIHN0b3JlIHllYXJzIGZyb20gZWFjaCBkYXRhIHNldCBpbiBhIGxpc3QgCiAgICBjb21tb25feWVhcnMgPSBbXQogICAgIyByZXBlYXQgdGhlIGV4dHJhY3Rpb24gb2YgeWVhciB2YWx1ZXMgZm9yIGVhY2ggZGF0YSBzZXQKICAgIGZvciBpIGluIHJhbmdlKGxlbihGSUxFUykpOgogICAgICAgIHRyaXBsZSA9IEZJTEVTW2ldCiAgICAgICAgIyBpbXBvcnQgZmlsZSBpbnRvIHBkIGRhdGFmcmFtZQogICAgICAgIGRmX21peGVkX3llYXJzID0gcGQucmVhZF9jc3YodHJpcGxlWzBdKQogICAgICAgICMgY2hlY2sgd2hlcmUgdGhlIHllYXJzIGxpZSBpbiB0aGUgZGF0YWZyYW1lCiAgICAgICAgaWYgdHJpcGxlWzFdWzBdID09ICJjb2x1bW4iOgogICAgICAgICAgICAjIGdldCB0aGUgY29sdW1uIGluZGV4CiAgICAgICAgICAgIGNvbHVtbl9pbmRleCA9IHRyaXBsZVsxXVsxXQogICAgICAgICAgICAjIGdldCB0aGUgeWVhciB2YWx1ZXMgd2l0aCBubyByZXBldGl0aW9ucwogICAgICAgICAgICBtaXhlZF95ZWFycyA9IGRmX21peGVkX3llYXJzLmlsb2NbOiwgY29sdW1uX2luZGV4XQogICAgICAgICMgeWVhcnMgbGllIGluIG9uZSBvZiB0aGUgcm93cwogICAgICAgIGVsaWYgdHJpcGxlWzFdWzBdID09ICJyb3ciOgogICAgICAgICAgICAjIGdldCB0aGUgcm93IGluZGV4CiAgICAgICAgICAgIHJvd19pbmRleCA9IHRyaXBsZVsxXVsxXQogICAgICAgICAgICAjIGdldCB0aGUgeWVhcnMgd2l0aCBubyByZXBldGl0aW9ucwogICAgICAgICAgICBtaXhlZF95ZWFycyA9IGRmX21peGVkX3llYXJzLmlsb2Nbcm93X2luZGV4LCA6XQogICAgICAgICMgY291bnRyaWVzIGxpZSBpbiB0aGUgaGVhZGVyCiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyBnZXQgdGhlIHllYXIgdmFsdWVzIHdpdGggbm8gcmVwZXRpdGlvbnMKICAgICAgICAgICAgbWl4ZWRfeWVhcnMgPSBkZl9taXhlZF95ZWFycy5jb2x1bW5zLnZhbHVlcwogICAgICAgICMgbWl4ZWRfeWVhcnM6IHBhbmRhcyBvYmplY3QgdG8gbGlzdCB0eXBlCiAgICAgICAgbWl4ZWRfeWVhcnMgPSBsaXN0KG1peGVkX3llYXJzKQogICAgICAgICMgZmlsdGVyIG9ubHkgdGhlIHllYXJzIC0gc29tZSBlbGVtZW50cyBvZiB0aGUgbGlzdCBtYXkgYmUgc3RyaW5ncwogICAgICAgIHllYXJzID0gW10KICAgICAgICAjIGxvb3Agb3ZlciBlYWNoIGVsZW1lbnQgaW4gdGhlIGxpc3QKICAgICAgICBmb3IgZWxlbWVudCBpbiBtaXhlZF95ZWFyczoKICAgICAgICAgICAgIyB0cnkgdG8gY29udmVydCB0aGUgZWxlbWVudCB0byBhbiBpbnRlZ2VyIC0gc3RyaW5nIHdvdWxkIGZhaWwKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgeWVhciA9IGludChlbGVtZW50KQogICAgICAgICAgICAgICAgIyBpZiB0aGUgY29udmVyc2lvbiBpcyBzdWNjZXNzZnVsbCB0aGF0IGVsZW1lbnQgd2lsbCBiZSBhIHllYXIKICAgICAgICAgICAgICAgIHllYXJzLmFwcGVuZCh5ZWFyKQogICAgICAgICAgICAjIGlmIHRoZSBlbGVtZW50IGlzIGEgc3RyaW5nIHRoZSBpbnQgZnVuY3Rpb24gd291bGQgcmFpc2UgYSBWYWx1ZUVycm9yCiAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgIyBpZ25vcmUgdGhpcyBlbGVtZW50L3N0cmluZwogICAgICAgICAgICAgICAgcGFzcwogICAgICAgICMgbm93IGFwcGVuZCB0aGUgbGlzdCBvZiB5ZWFycywgdHlwZSA9IGludAogICAgICAgIGNvbW1vbl95ZWFycy5hcHBlbmQoc2V0KHllYXJzKSkKICAgICMgYWN0dWFsbHkgZXh0cmFjdCBjb21tb24geWVhcnMgYnkgc2VxdWVudGlhbCBpbnRlcnNlY3Rpb24KICAgIGNvbW1vbl95ZWFycyA9IGZ1bmN0b29scy5yZWR1Y2UoCiAgICAgICAgbGFtYmRhIEEsIEI6IEEuaW50ZXJzZWN0aW9uKEIpLCBjb21tb25feWVhcnMpCiAgICAjIHJldHVybiB5ZWFycyBjb21tb24gdG8gYWxsIGRhdGEgc2V0cyBpbiBhc2NlbmRpbmcgb3JkZXIKICAgIHJldHVybiBzb3J0ZWQoY29tbW9uX3llYXJzKQoKCiMgcmVtb3ZlIGxhc3Qgcm93cyBmcm9tIENPTlNVTVBUSU9OIGFzIGludGVyZmVyaW5nOwpURU1QX0NPTlNVTVBUSU9OID0gInRlbXBfY29uc3VtcHRpb24uY3N2IgojIGYgZm9yIGZpbGUgaW4gcmVhZCBtb2RlCndpdGggb3BlbihDT05TVU1QVElPTiwgJ3InKSBhcyByLCBvcGVuKFRFTVBfQ09OU1VNUFRJT04sICd3JykgYXMgdzoKICAgICMgcmVhZCBmaWxlIENPTlNVTVBUSU9OIGFuZCBhc3NpZ24gb2JqZWN0IHRvIGxpbmVzCiAgICBsaW5lcyA9IHIucmVhZGxpbmVzKCkKICAgICMgcmVtb3ZlIG5vbiBpbXBvcnRhbnQgbGluZXMKICAgIGxpbmVzID0gbGluZXNbOi0xMl0KICAgICMgd3JpdGUgdGhlIG1vZGlmaWVzIGZpbGUgdG8gYSB0ZW1wIGZpbGUKICAgIHdyaXRlciA9IGNzdi53cml0ZXIodywgZGVsaW1pdGVyPScsJykKICAgIHcud3JpdGUoInt9XG4iLmZvcm1hdCgnLCcuam9pbihsaW5lcykpKQojIGxpc3Qgb2YgdHJpcGxlczogKGZpbGUsIHllYXJzJyBsb2NhdGlvbiAsIHllYXJzX2luZGV4IHBvc2l0aW9uKQpGSUxFUyA9IFsoR0RQLCAoInJvdyIsIDEpKSwKICAgICAgICAgKFBPTElUSUNTLCAoImNvbHVtbiIsIDApKSwKICAgICAgICAgKFRFTVBfQ09OU1VNUFRJT04sICgicm93IiwgMSkpLAogICAgICAgICAoQ0FQQUNJVFksICgiaGVhZGVyIikpLAogICAgICAgICAoV0lORCwgKCJjb2x1bW4iLCAzKSkKICAgICAgICAgXQojIGNhbGwgZnVuY3Rpb24gdG8gZXh0cmFjdCBjb21tb24geWVhcnMgZnJvbSBhbGwgZGF0YXNldHMKY29tbW9uX3llYXJzID0gZXh0cmFjdF9jb21tb25feWVhcnMoRklMRVMpCiMgc3RvcmUgdGhlIGNvbW1vbiB5ZWFycyB0byBhIGNzdiBmaWxlIHJlYWR5IGZvciBhbmFseXNpcwp3aXRoIG9wZW4oQ09NTU9OX1lFQVJTLCAndycpIGFzIHk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICPCoHdyaXRlIHRvIGZpbGUgd2l0aCB3CiAgICB3ID0gY3N2LndyaXRlcih5LCBkZWxpbWl0ZXI9JywnKQogICAgIyBoZWFkZXIgbmFtZQogICAgdy53cml0ZXJvdyhbInllYXJzIl0pCjx8ZmltX2VuZHw+"]
["da7e55e9636ee5a6af80718e2044bac02f8abacc-1","da7e55e9636ee5a6af80718e2044bac02f8abacc","PHxmaW1fcHJlZml4fD4KCmZyb20gZGphbmdvLnVybHMgaW1wb3J0IHBhdGgsIHJlX3BhdGgKCmZyb20gLiBpbXBvcnQgdmlld3MKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKdXJscGF0dGVybnMgPSBbCiAgICBwYXRoKCIiLCB2aWV3cy5pbmRleCwgbmFtZT0iaW5kZXgiKSwKICAgIHBhdGgoImxvZ2luIiwgdmlld3MubG9naW5fdmlldywgbmFtZT0ibG9naW4iKSwKPHxmaW1fZW5kfD4="]
["de04b9baee7d077297fbf962b6842dd63fb2a5d5-1","de04b9baee7d077297fbf962b6842dd63fb2a5d5","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQo8fGZpbV9ob2xlfD4KIyAgIEhlbHBlciBmdW5jdGlvbnMgYW5kIGNsYXNzZXMKIwojICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCiMgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUKIyAgZm9sbG93aW5nIGRpc2NsYWltZXIuCiMKIyAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQojICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwojICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKIyAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgojCiMgIE5laXRoZXIgdGhlIG5hbWUgRXZhbmRybyBDb2FuIG5vciB0aGUgbmFtZXMgb2YgYW55CiMgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKIyAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCiMgIHBlcm1pc3Npb24uCiMKIyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKIyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCiMgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKCBhdAojICB5b3VyIG9wdGlvbiApIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKIyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCiMgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIwojICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCgp0cnk6CiAgICAjIFRvIHJ1biB0aGlzIGZpbGUsIHJ1biBvbiB0aGUgU3VibGltZSBUZXh0IGNvbnNvbGU6CiAgICAjIGltcG9ydCBpbXA7IGltcG9ydCBEZWJ1Z1Rvb2xzLnRlc3RzLnN0cmVhbV9oYW5kbGVyX21hbnVhbF90ZXN0czsgaW1wLnJlbG9hZCggRGVidWdUb29scy50ZXN0cy5zdHJlYW1faGFuZGxlcl9tYW51YWxfdGVzdHMgKQogICAgaW1wb3J0IHN1YmxpbWVfcGx1Z2luCgpleGNlcHQgKEltcG9ydEVycm9yKToKICAgIGltcG9ydCBvcwogICAgaW1wb3J0IHN5cwoKICAgIGRlZiBhc3NlcnRfcGF0aChtb2R1bGUpOgoKICAgICAgICBpZiBtb2R1bGUgbm90IGluIHN5cy5wYXRoOgogICAgICAgICAgICBzeXMucGF0aC5hcHBlbmQoIG1vZHVsZSApCgogICAgIyBJbXBvcnQgdGhlIGRlYnVnIHRvb2xzCiAgICBhc3NlcnRfcGF0aCggb3MucGF0aC5qb2luKCBvcy5wYXRoLmRpcm5hbWUoIG9zLnBhdGguZGlybmFtZSggb3MucGF0aC5kaXJuYW1lKCBvcy5wYXRoLnJlYWxwYXRoKCBfX2ZpbGVfXyApICkgKSApLCAnYWxsJyApICkKCgojIEltcG9ydCBhbmQgcmVsb2FkIHRoZSBkZWJ1Z2dlcgppbXBvcnQgaW1wCmltcG9ydCBkZWJ1Z190b29scy5sb2dnZXIKaW1wLnJlbG9hZCggZGVidWdfdG9vbHMubG9nZ2VyICkKCmZyb20gZGVidWdfdG9vbHMubG9nZ2VyIGltcG9ydCBnZXRMb2dnZXIKCmxvZyA9IGdldExvZ2dlciggMTI3LCBfX25hbWVfXywgZGF0ZT1UcnVlICkKCmxvZyggMSwgIkJpdHdpc2UiICkKbG9nKCA4LCAiQml0d2lzZSIgKQpsb2cud2FybiggIldhcm4iICkKbG9nLmluZm8oICJJbmZvIiApCmxvZy5kZWJ1ZyggIkRlYnVnIiApCgp0cnk6CiAgICByYWlzZSBFeGNlcHRpb24oICJUZXN0IEVycm9yIiApCmV4Y2VwdCBFeGNlcHRpb246CiAgICBsb2cuZXhjZXB0aW9uKCAiSSBhbSBjYXRjaGluZyB5b3UiICkKCmRlZiBmdW5jdGlvbl9uYW1lKCk6CiAgICBsb2coIDEsICJCaXR3aXNlIiApCiAgICBsb2coIDgsICJCaXR3aXNlIiApCiAgICBsb2cud2FybiggIldhcm4iICkKICAgIGxvZy5pbmZvKCAiSW5mbyIgKQogICAgbG9nLmRlYnVnKCAiRGVidWciICkKCiAgICB0cnk6CiAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCAiVGVzdCBFcnJvciIgKQogICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICBsb2cuZXhjZXB0aW9uKCAiSSBhbSBjYXRjaGluZyB5b3UiICkKCmxvZy5yZXNldCgpCmxvZy5zZXR1cCggZnVuY3Rpb249RmFsc2UsIGxldmVsPVRydWUgKQpsb2cubmV3bGluZSgpCmZ1bmN0aW9uX25hbWUoKQoKbG9nLnJlc2V0KCkKbG9nID0gZ2V0TG9nZ2VyKCBfX25hbWVfXywgMTI3ICkKbG9nLnNldHVwKCBkYXRlPVRydWUgKQpsb2cubmV3bGluZSgpCmZ1bmN0aW9uX25hbWUoKQoKbG9nLnJlc2V0KCkKbG9nID0gZ2V0TG9nZ2VyKCBfX25hbWVfXyApCmxvZy5zZXR1cCggZGF0ZT1UcnVlICkKbG9nLm5ld2xpbmUoKQpmdW5jdGlvbl9uYW1lKCkKCmxvZy5yZXNldCgpCmxvZyA9IGdldExvZ2dlciggMTI3LCBmdW5jdGlvbj1UcnVlICkKbG9nLnNldHVwKCkKbG9nLm5ld2xpbmUoKQpmdW5jdGlvbl9uYW1lKCkKCmxvZy5yZXNldCgpCmxvZyA9IGdldExvZ2dlcigpCmxvZy5zZXR1cCgpCmxvZy5uZXdsaW5lKCkKZnVuY3Rpb25fbmFtZSgpCgo8fGZpbV9zdWZmaXh8PgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTGljZW5zaW5nICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwojICAgQ29weXJpZ2h0IDIwMTggQCBFdmFuZHJvIENvYW4KPHxmaW1fZW5kfD4="]
["de04b9baee7d077297fbf962b6842dd63fb2a5d5-3","de04b9baee7d077297fbf962b6842dd63fb2a5d5","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTGljZW5zaW5nICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwojICAgQ29weXJpZ2h0IDIwMTggQCBFdmFuZHJvIENvYW4KIyAgIEhlbHBlciBmdW5jdGlvbnMgYW5kIGNsYXNzZXMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojCiMgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKIyAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZQojICBmb2xsb3dpbmcgZGlzY2xhaW1lci4KPHxmaW1fZW5kfD4="]
["bd6463a3319170e0b2d650ea5ae54ed7560709e2-2","bd6463a3319170e0b2d650ea5ae54ed7560709e2","PHxmaW1fcHJlZml4fD4KIyBUaGUgTWluaW9uIEdhbWUgaW4gUHl0aG9uOgoKZGVmIG1pbmlvbl9nYW1lKHN0cmluZyk6CiAgICBWb3dlbHMgPSBmcm96ZW5zZXQoJ0FFSU9VJykKICAgIEtldmluX3Njb3JlID0gMAogICAgU3R1YXJ0X3Njb3JlID0gMAogICAgZm9yIGkgaW4gcmFuZ2UobGVuKHMpKToKICAgICAgICBpZiBzW2ldIGluIFZvd2VsczoKICAgICAgICAgICAgS2V2aW5fc2NvcmUgKz0gKGxlbihzKS1pKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIFN0dWFydF9zY29yZSArPSAobGVuKHMpLWkpCgogICAgaWYgS2V2aW5fc2NvcmUgPiBTdHVhcnRfc2NvcmU6CiAgICAgICAgcHJpbnQoIktldmluIiwgS2V2aW5fc2NvcmUpCiAgICBlbGlmIFN0dWFydF9zY29yZSA+IEtldmluX3Njb3JlOgo8fGZpbV9ob2xlfD4KICAgIGVsc2U6CiAgICAgICAgcHJpbnQoIkRyYXciKQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHMgPSBpbnB1dCgpCiAgICBtaW5pb25fZ2FtZShzKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHByaW50KCJTdHVhcnQiLCBTdHVhcnRfc2NvcmUpCjx8ZmltX2VuZHw+"]
["6b785072520b5fa420339530b472e481c713b166-2","6b785072520b5fa420339530b472e481c713b166","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCgppbXBvcnQgbnVtcHkgYXMgbnAKCiMgTGVnYWwgTW92ZXMKTU9WRV9VUCAgICA9IDAKTU9WRV9ET1dOICA9IDEKTU9WRV9MRUZUICA9IDIKTU9WRV9SSUdIVCA9IDMKCiMgVHVybiByZXN1bHRzClRVUk5fT0sgICAgICAgID0gMApUVVJOX0lMTEVHQUwgICA9IDEKVFVSTl9HQU1FX09WRVIgPSAyCgpkZWYgcHJpbnRfYm9hcmQoYm9hcmQpOgogICAgIiIiCiAgICB0YWtlcyBhbiB1bnJvbGxlZCAoMSoxNikgMjA0OCBnYW1lIGJvYXJkCiAgICBhbmQgcHJpbnRzIGl0CiAgICAiIiIKICAgIHVucm9sbGVkX2JvYXJkID0gYm9hcmQucmVzaGFwZShbNCw0XSkKICAgIGZvciByb3cgaW4gdW5yb2xsZWRfYm9hcmQ6CiAgICAgICAgcHJpbnQoInwiICsgIi0tLS0tLXwiKjQpCiAgICAgICAgcm93X3N0cj0ifCB7Oj40ZH0gfCB7Oj40ZH0gfCB7Oj40ZH0gfCB7Oj40ZH0gfCIuZm9ybWF0KCpyb3cpLnJlcGxhY2UoIiAgIDAiLCAiICAgICIpCiAgICAgICAgcHJpbnQocm93X3N0cikKICAgIHByaW50KCJ8IiArICItLS0tLS18Iio0KQoKZGVmIGdlbl9ib2FyZCgpOgogICAgIiIiCiAgICBnZW5lcmF0ZXMgYSBnYW1lIGJvYXJkIChucCBhcnJheSB3aXRoIDE2IGVsZW1lbnRzKQogICAgYWxsIHNxdWFyZXMgYXJlIGVtcHR5KDApIGV4Y2VwdCB0d28gc3F1YXJlcwogICAgIiIiCiAgICBib2FyZCA9IG5wLnplcm9zKDE2LCBkdHlwZT1pbnQpCgogICAgIyByYW5kb21seSBhZGQgdHdvIHJhbmRvbSBzdHVmZgogICAgYm9hcmQgPSBpbnNlcnRfcmFuZG9tKGluc2VydF9yYW5kb20oYm9hcmQpKQoKICAgIHJldHVybiBib2FyZAoKZGVmIGlzX2JvYXJkX3ZhbGlkKGJvYXJkKToKICAgICIiIgogICAgcmV0dXJucyBGYWxzZSBpZiB0aGUgYm9hcmQgY29udGFpbnMgYW4gZWxlbWVudCB0aGF0IGlzCiAgICBuZWl0aGVyIGEgcG93ZXIgb2YgMiBub3IgMAoKICAgIHJldHVybnMgRmFsc2UgaWYgdGhlIGJvYXJkIGRvZXNuJ3QgY29uZm9ybSB0byByZXF1aXJlZAogICAgc2l6ZWQKICAgICIiIgoKICAgIGlmIGJvYXJkLnNoYXBlICE9ICgxNiwpOgogICAgICAgIHJldHVybiBGYWxzZQoKICAgIGZvciBlbGVtIGluIGJvYXJkOgogICAgICAgIGlmIGVsZW09PTA6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgaWYgMioqbnAuaW50KG5wLmxvZzIoZWxlbSkpICE9IGVsZW06CiAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgcmV0dXJuIFRydWUKCmRlZiBjYW5fY29sbGFwc2Uocm93KToKICAgICIiIgogICAgcmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiByb3cKICAgIGNhbiBiZSBjb2xsYXBzZWQgdG8gdGhlIGxlZnQKCiAgICBjYW4gYWxzbyBiZSBhIGNvbHVtbgogICAgIiIiCgogICAgZm9yIGEsYiBpbiB6aXAocm93WzE6XSwgcm93KToKICAgICAgICBpZiBhPT0wOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGlmIGI9PTAgb3IgYT09YjoKICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgIHJldHVybiBGYWxzZQoKZGVmIGNhbl9jb2xsYXBzZV9yKHJvdyk6CiAgICAiIiIKICAgIHNpbWlsYXIgdG8gY2FuX2NvbGxhcHNlLCBidXQKICAgIGluIHRoZSByZXZlcnNlZCBkaXJlY3Rpb24KICAgICIiIgogICAgcm93X3IgPSByb3dbOjotMV0KICAgIHJldHVybiBjYW5fY29sbGFwc2Uocm93X3IpCgpsbV9jYWNoZV9ib2FyZF9pZCA9IE5vbmUKbG1fY2FjaGVfcmVzdWx0ID0gTm9uZQpkZWYgbGVnYWxfbW92ZXMoYm9hcmQpOgogICAgIiIiCiAgICByZXR1cm5zIGEgbGlzdCBvZiBsZWdhbCBtb3ZlcwogICAgZm9yIHRoZSBnaXZlbiBib2FyZAogICAgIiIiCiAgICBnbG9iYWwgbG1fY2FjaGVfYm9hcmRfaWQsIGxtX2NhY2hlX3Jlc3VsdAogICAgCiAgICBpZiBsbV9jYWNoZV9ib2FyZF9pZD09aWQoYm9hcmQpOgogICAgICAgIHJldHVybiBsbV9jYWNoZV9yZXN1bHQKCiAgICBsbV9jYWNoZV9ib2FyZF9pZCA9IGlkKGJvYXJkKQoKICAgIGxtID0gW10KICAgIGJvYXJkX3Vucm9sbGVkID0gYm9hcmQucmVzaGFwZShbNCw0XSkKCiAgICBpZiBucC5hbnkobnAuYXBwbHlfYWxvbmdfYXhpcyhjYW5fY29sbGFwc2UsIDAsIGJvYXJkX3Vucm9sbGVkKSk6CiAgICAgICAgbG0uYXBwZW5kKE1PVkVfVVApCgogICAgaWYgbnAuYW55KG5wLmFwcGx5X2Fsb25nX2F4aXMoY2FuX2NvbGxhcHNlX3IsIDAsIGJvYXJkX3Vucm9sbGVkKSk6CiAgICAgICAgbG0uYXBwZW5kKE1PVkVfRE9XTikKCiAgICBpZiBucC5hbnkobnAuYXBwbHlfYWxvbmdfYXhpcyhjYW5fY29sbGFwc2UsIDEsIGJvYXJkX3Vucm9sbGVkKSk6CiAgICAgICAgbG0uYXBwZW5kKE1PVkVfTEVGVCkKCiAgICBpZiBucC5hbnkobnAuYXBwbHlfYWxvbmdfYXhpcyhjYW5fY29sbGFwc2VfciwgMSwgYm9hcmRfdW5yb2xsZWQpKToKICAgICAgICBsbS5hcHBlbmQoTU9WRV9SSUdIVCkKCiAgICBsbV9jYWNoZV9yZXN1bHQgPSBsbQoKICAgIHJldHVybiBsbQoKZGVmIGNvbGxhcHNlKGJvYXJkX3UpOgogICAgIiIiCiAgICB0YWtlcyBhIHJvdy9jb2x1bW4gb2YgdGhlIGJvYXJkCiAgICBhbmQgY29sbGFwc2VzIGl0IHRvIHRoZSBsZWZ0CiAgICAiIiIKICAgIGkgPSAxCiAgICBsaW1pdCA9IDAKICAgIHdoaWxlIGkgPCA0OgogICAgICAgIGlmIGJvYXJkX3VbaV09PTA6CiAgICAgICAgICAgIGkgKz0gMQogICAgICAgICAgICBjb250aW51ZQoKICAgICAgICB1cF9pbmRleCA9IGktMQogICAgICAgIGN1cnJfaW5kZXggPSBpCiAgICAgICAgd2hpbGUgdXBfaW5kZXg+PTAgYW5kIGJvYXJkX3VbdXBfaW5kZXhdPT0wOgogICAgICAgICAgICBib2FyZF91W3VwX2luZGV4XSA9IGJvYXJkX3VbY3Vycl9pbmRleF0KICAgICAgICAgICAgYm9hcmRfdVtjdXJyX2luZGV4XSA9IDAKICAgICAgICAgICAgdXBfaW5kZXggLT0gMQogICAgICAgICAgICBjdXJyX2luZGV4IC09IDEKCiAgICAgICAgaWYgdXBfaW5kZXggPj0gbGltaXQgYW5kIGJvYXJkX3VbdXBfaW5kZXhdPT1ib2FyZF91W2N1cnJfaW5kZXhdOgogICAgICAgICAgICBib2FyZF91W3VwX2luZGV4XSAqPSAyCiAgICAgICAgICAgIGJvYXJkX3VbY3Vycl9pbmRleF0gPSAwCiAgICAgICAgICAgIGxpbWl0ID0gY3Vycl9pbmRleAoKICAgICAgICBpICs9IDEKCiAgICByZXR1cm4gYm9hcmRfdQoKZGVmIGNvbGxhcHNlX3IoYm9hcmRfdSk6CiAgICAiIiIKICAgIGxpa2UgY29sbGFwc2UsIGJ1dCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uCiAgICBpZTogZm9sZHMgdG8gdGhlIHJpZ2h0CiAgICAiIiIKICAgIHJldl9ib2FyZF91ID0gYm9hcmRfdVs6Oi0xXQogICAgcmV0dXJuIGNvbGxhcHNlKHJldl9ib2FyZF91KVs6Oi0xXQoKZGVmIHBlcmZvcm1fdHVybihib2FyZF91LCBtb3ZlLCBpbnNfcmFuZG9tPVRydWUsIHNraXBfY2hlY2s9RmFsc2UpOgogICAgIiIiCiAgICBwZXJmb3JtIHRoZSBtb3ZlIGFuZCByZXR1cm4gYSBuZXcgYm9hcmQKICAgIGlmIGluc19yYW5kb209PUZhbHNlLCBhIG5ldyByYW5kb20gY2VsbAogICAgaXMgbm90IGFkZGVkLgogICAgIiIiCgogICAgaWYgbm90IHNraXBfY2hlY2s6CiAgICAgICAgaWYgbW92ZSBub3QgaW4gbGVnYWxfbW92ZXMoYm9hcmRfdSk6CiAgICAgICAgICAgIHJldHVybiBib2FyZF91LCBUVVJOX0lMTEVHQUwKCiAgICBib2FyZCA9IGJvYXJkX3UucmVzaGFwZShbNCw0XSkKCiAgICBpZiBtb3ZlPT1NT1ZFX1VQOgogICAgICAgIG5wLmFwcGx5X2Fsb25nX2F4aXMoY29sbGFwc2UsIDAsIGJvYXJkKQogICAgZWxpZiBtb3ZlPT1NT1ZFX0RPV046CiAgICAgICAgbnAuYXBwbHlfYWxvbmdfYXhpcyhjb2xsYXBzZV9yLCAwLCBib2FyZCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZWxpZiBtb3ZlPT1NT1ZFX0xFRlQ6CiAgICAgICAgbnAuYXBwbHlfYWxvbmdfYXhpcyhjb2xsYXBzZSwgMSwgYm9hcmQpCiAgICBlbGlmIG1vdmU9PU1PVkVfUklHSFQ6CiAgICAgICAgbnAuYXBwbHlfYWxvbmdfYXhpcyhjb2xsYXBzZV9yLCAxLCBib2FyZCkKPHxmaW1fZW5kfD4="]
["41befdd2b8172e836a21901790b2458be0de9d43-1","41befdd2b8172e836a21901790b2458be0de9d43","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udmlld3MuZ2VuZXJpYyBpbXBvcnQgTGlzdFZpZXcKZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLm1peGlucyBpbXBvcnQgTG9naW5SZXF1aXJlZE1peGluCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuIG1vZGVscyBpbXBvcnQgVGVzdAoKIyBDcmVhdGUgeW91ciB2aWV3cwoKPHxmaW1fZW5kfD4="]
["6bc82c3bdfbaee8e413c0dae22477803fe4eda9b-3","6bc82c3bdfbaee8e413c0dae22477803fe4eda9b","PHxmaW1fcHJlZml4fD4KIyBUYWkgU2FrdW1hIDx0YWkuc2FrdW1hQGdtYWlsLmNvbT4KaW1wb3J0IG9zCmltcG9ydCBzeXMKaW1wb3J0IHB5dGVzdAoKaGFzX25vX1JPT1QgPSBGYWxzZQp0cnk6CiAgICBpbXBvcnQgUk9PVApleGNlcHQgSW1wb3J0RXJyb3I6Cjx8ZmltX2hvbGV8PgppZiBub3QgaGFzX25vX1JPT1Q6CiAgICBmcm9tIGFscGhhdHdpcmwucm9vdHRyZWUgaW1wb3J0IEJFdmVudHMgYXMgRXZlbnRzCiAgICBmcm9tIGFscGhhdHdpcmwucm9vdHRyZWUgaW1wb3J0IEJyYW5jaAoKIyNfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198fApweXRlc3RtYXJrID0gcHl0ZXN0Lm1hcmsuc2tpcGlmKGhhc19ub19ST09ULCByZWFzb249ImhhcyBubyBST09UIikKCiMjX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffHwKQHB5dGVzdC5maXh0dXJlKCkKZGVmIGNoYWluKCk6CiAgICBpbnB1dF9maWxlX25hbWVzID0gWwogICAgICAgICdzYW1wbGVfY2hhaW5fMDEucm9vdCcsCiAgICAgICAgJ3NhbXBsZV9jaGFpbl8wMi5yb290JywKICAgICAgICAnc2FtcGxlX2NoYWluXzAzLnJvb3QnLAogICAgXQogICAgaW5wdXRfcGF0aHMgPSBbCiAgICAgICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSksICdkYXRhJywgbikKICAgICAgICBmb3IgbiBpbiBpbnB1dF9maWxlX25hbWVzCiAgICBdCiAgICB0cmVlX25hbWUgPSAndHJlZScKICAgIGNoYWluID0gUk9PVC5UQ2hhaW4odHJlZV9uYW1lKQogICAgZm9yIHAgaW4gaW5wdXRfcGF0aHM6CiAgICAgICAgY2hhaW4uQWRkKHApCiAgICB5aWVsZCBjaGFpbgoKQHB5dGVzdC5maXh0dXJlKCkKZGVmIGV2ZW50cyhjaGFpbik6CiAgICB5aWVsZCBFdmVudHMoY2hhaW4pCgpkZWYgdGVzdF9ldmVudChldmVudHMpOgoKICAgIGNvbnRlbnRfbGlzdCA9IFsKICAgICAgICAjIGZpbGUgMQogICAgICAgIFsxMCwgMjAsIDMwXSwKICAgICAgICBbMjQsIDVdLAoKICAgICAgICAjIGZpbGUgMgogICAgICAgIFszLCAxMF0sCiAgICAgICAgWzUsIDgsIDMyLCAxNSwgMl0sCiAgICAgICAgWzIyLCAxMV0sCgogICAgICAgICMgZmlsZSAzCiAgICAgICAgWzIsIDddLAogICAgICAgIFsxMCwgMTAwXSwKICAgIF0KCiAgICBmb3IgaSwgYyBpbiBlbnVtZXJhdGUoY29udGVudF9saXN0KToKICAgICAgICBldmVudCA9IGV2ZW50c1tpXQogICAgICAgIGFzc2VydCBsZW4oYykgPT0gZXZlbnQubnZhclswXQogICAgICAgIGFzc2VydCBjID09IGxpc3QoZXZlbnQudmFyKQoKIyNfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198fAo8fGZpbV9zdWZmaXh8PgogICAgaGFzX25vX1JPT1QgPSBUcnVlCgo8fGZpbV9lbmR8Pg=="]
["cf54f1e8205137790c7d277fce1259f7403f0995-5","cf54f1e8205137790c7d277fce1259f7403f0995","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgpjbGFzcyBDcmVkaXRMaXN0V2l0aERlZmF1bHRVc2VyVGVzdENhc2UoQ3JlZGl0TGlzdFRlc3RDYXNlKToKICAgIGRlZiB0ZXN0X2ZpbHRlcl9ieV9zdGF0dXNfY3JlZGl0X3BlbmRpbmdfYW5kX3ByaXNvbihzZWxmKToKICAgICAgICAiIiIKICAgICAgICBSZXR1cm5zIGF2YWlsYWJsZSBjcmVkaXRzIGF0dGFjaGVkIHRvIHRoZSBwYXNzZWQtaW4gcHJpc29uLgogICAgICAgICIiIgogICAgICAgIHNlbGYuX3Rlc3RfcmVzcG9uc2Vfd2l0aF9maWx0ZXJzKHsKICAgICAgICAgICAgJ3N0YXR1cyc6IENSRURJVF9TVEFUVVMuQ1JFRElUX1BFTkRJTkcsCiAgICAgICAgICAgICdwcmlzb24nOiBzZWxmLnByaXNvbnNbMF0ucGsKICAgICAgICB9KQoKICAgIGRlZiB0ZXN0X2ZpbHRlcl9ieV9zdGF0dXNfY3JlZGl0ZWRfcHJpc29uKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFJldHVybnMgY3JlZGl0ZWQgY3JlZGl0cyBhdHRhY2hlZCB0byB0aGUgcGFzc2VkLWluIHByaXNvbi4KICAgICAgICAiIiIKICAgICAgICBzZWxmLl90ZXN0X3Jlc3BvbnNlX3dpdGhfZmlsdGVycyh7CiAgICAgICAgICAgICdzdGF0dXMnOiBDUkVESVRfU1RBVFVTLkNSRURJVEVELAogICAgICAgICAgICAncHJpc29uJzogc2VsZi5wcmlzb25zWzBdLnBrCiAgICAgICAgfSkKPHxmaW1fc3VmZml4fD4KZnJvbSBjcmVkaXQuY29uc3RhbnRzIGltcG9ydCBDUkVESVRfU1RBVFVTCmZyb20gY3JlZGl0LnRlc3RzLnRlc3Rfdmlld3MudGVzdF9jcmVkaXRfbGlzdCBpbXBvcnQgQ3JlZGl0TGlzdFRlc3RDYXNlCgoKPHxmaW1fZW5kfD4="]
["2b1ccb8cf7c93eb94417ec2659771e92fd0d00d8-2","2b1ccb8cf7c93eb94417ec2659771e92fd0d00d8","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcGF0aAoKZnJvbSBldmVuZW1lbnQudmlld3MgaW1wb3J0IGV2ZW50X3ZpZXcsIGV2ZW50X2RldGFpbAo8fGZpbV9ob2xlfD4KICAgIHBhdGgoJ2V2ZW50X2RldGFpbC88c2x1ZzpzbHVnPi8nLCBldmVudF9kZXRhaWwsIG5hbWU9J2V2ZW50X2RldGFpbCcpLAogICAgcGF0aCgnZXZlbnRfZGV0YWlsLzxpbnQ6aWQ+LycsIGV2ZW50X2RldGFpbCwgbmFtZT0nZXZlbnRfZGV0YWlsX2lkJyksCl0KPHxmaW1fc3VmZml4fD4KCmFwcF9uYW1lID0gJ2V2ZW50Jwp1cmxwYXR0ZXJucyA9IFsKICAgIHBhdGgoJycsIGV2ZW50X3ZpZXcsIG5hbWU9J2V2ZW50JyksCjx8ZmltX2VuZHw+"]
["d8641824fc7a1b9a20c959a27048eae1309ef7a2-1","d8641824fc7a1b9a20c959a27048eae1309ef7a2","PHxmaW1fcHJlZml4fD4KIiIiClRISVMgU0NSSVBUIFNIT1dDQVNFUyBUSEUgVEhPVUdIVFMgR0VORVJBVEVEIEJZIFRIRSBCUkFJTiBBUyBBTiBPQkpFQ1QgSVMgSURFTlRJRklFRCBUSFJPVUdIIE9CSkVDVCBSRUNPR05JVElPTi4KVEhFUkUgQVJFIDIgVFlQRVMgT0YgVEhPVUdIVFM6CjQ6IEVOVElUWSBOT1ZFTFRZOiBBV0FSRU5FU1MgRk9SIFNVQkpFQ1RTIE9SIE9CSkVDVFMgVEhBVCBXRVJFIEtOT1dOIEFMUkVBRFkKNi4gT0JKRUNUIEdBUFM6IExFQVJOSU5HIE9QUE9SVFVOSVRJRVMgQVJPVU5EIE9CSkVDVFMgT0YgVEhFIFNUQVRFTUVOVAoiIiIKaW1wb3J0IGFyZ3BhcnNlCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gdGVtcGZpbGUgaW1wb3J0IFRlbXBvcmFyeURpcmVjdG9yeQoKZnJvbSB0cWRtIGltcG9ydCB0cWRtCgo8fGZpbV9lbmR8Pg=="]
["e735461f1acaf9bb1d664ef591c682a412732fa9-2","e735461f1acaf9bb1d664ef591c682a412732fa9","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQsIHByaW50X2Z1bmN0aW9uCgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCjx8ZmltX2hvbGV8PgoKCmNsYXNzIFBsYXRmb3JtRXh0ZXJuYWxJc3N1ZShNb2RlbCk6CiAgICBfX2NvcmVfXyA9IEZhbHNlCgogICAgZ3JvdXBfaWQgPSBCb3VuZGVkQmlnSW50ZWdlckZpZWxkKCkKICAgICMgZXh0ZXJuYWwgc2VydmljZSB0aGF0J3MgbGlua2VkIHRvIHRoZSBzZW50cnkgaXNzdWUKICAgIHNlcnZpY2VfdHlwZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD02NCkKICAgIGRpc3BsYXlfbmFtZSA9IG1vZGVscy5UZXh0RmllbGQoKQogICAgd2ViX3VybCA9IG1vZGVscy5VUkxGaWVsZCgpCiAgICBkYXRlX2FkZGVkID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoZGVmYXVsdD10aW1lem9uZS5ub3cpCgogICAgY2xhc3MgTWV0YToKICAgICAgICBhcHBfbGFiZWwgPSAic2VudHJ5IgogICAgICAgIGRiX3RhYmxlID0gInNlbnRyeV9wbGF0Zm9ybWV4dGVybmFsaXNzdWUiCiAgICAgICAgdW5pcXVlX3RvZ2V0aGVyID0gKCgiZ3JvdXBfaWQiLCAic2VydmljZV90eXBlIiksKQoKICAgIF9fcmVwcl9fID0gc2FuZV9yZXByKCJncm91cF9pZCIsICJzZXJ2aWNlX3R5cGUiLCAiZGlzcGxheV9uYW1lIiwgIndlYl91cmwiKQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGdldF9hbm5vdGF0aW9uc19mb3JfZ3JvdXBfbGlzdChjbHMsIGdyb3VwX2xpc3QpOgogICAgICAgIGV4dGVybmFsX2lzc3VlcyA9IGNscy5vYmplY3RzLmZpbHRlcihncm91cF9pZF9faW49W2dyb3VwLmlkIGZvciBncm91cCBpbiBncm91cF9saXN0XSkKCiAgICAgICAgIyBncm91cCBhbm5vdGF0aW9ucyBieSBncm91cCBpZAogICAgICAgIGFubm90YXRpb25zX2J5X2dyb3VwX2lkID0gZGVmYXVsdGRpY3QobGlzdCkKICAgICAgICBmb3IgZWkgaW4gZXh0ZXJuYWxfaXNzdWVzOgogICAgICAgICAgICBhbm5vdGF0aW9uID0gJzxhIGhyZWY9IiVzIj4lczwvYT4nICUgKGVpLndlYl91cmwsIGVpLmRpc3BsYXlfbmFtZSkKICAgICAgICAgICAgYW5ub3RhdGlvbnNfYnlfZ3JvdXBfaWRbZWkuZ3JvdXBfaWRdLmFwcGVuZChhbm5vdGF0aW9uKQoKICAgICAgICByZXR1cm4gYW5ub3RhdGlvbnNfYnlfZ3JvdXBfaWQKPHxmaW1fc3VmZml4fD4KZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0Cgpmcm9tIHNlbnRyeS5kYi5tb2RlbHMgaW1wb3J0IEJvdW5kZWRCaWdJbnRlZ2VyRmllbGQsIE1vZGVsLCBzYW5lX3JlcHIKPHxmaW1fZW5kfD4="]
["2e8a9e078488656420e85e87012584368e4dd05e-2","2e8a9e078488656420e85e87012584368e4dd05e","PHxmaW1fcHJlZml4fD4KY2xhc3MgU29sdXRpb246CiDCoCDCoGRlZiBpc0ludGVybGVhdmUoc2VsZiwgczE6IHN0ciwgczI6IHN0ciwgczM6IHN0cikgLT4gYm9vbDoKIMKgIMKgIMKgIMKgaWYgbm90IHMxIGFuZCBub3QgczIgYW5kIG5vdCBzMzoKIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIFRydWUKIMKgIMKgIMKgIMKgaWYgbGVuKHMzKT09MToKPHxmaW1faG9sZXw+CiDCoCDCoCDCoCDCoGlmIGxlbihzMykhPShsZW4oczEpK2xlbihzMikpOgogwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gRmFsc2UKIMKgIMKgIMKgIMKgZHBNZW1vPXNldCgpCiDCoCDCoCDCoCDCoGRlZiByZWN1cnNpb24oaW5kZXgxLGluZGV4MixpbmRleDMpOgogwqAgwqAgwqAgwqAgwqAgwqBpZiAoaW5kZXgxLGluZGV4MikgaW4gZHBNZW1vOgogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gRmFsc2UKIMKgIMKgIMKgIMKgIMKgIMKgaWYgaW5kZXgzPT1sZW4oczMpOgogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gVHJ1ZQogwqAgwqAgwqAgwqAgwqAgwqBpZiBpbmRleDE8bGVuKHMxKSBhbmQgaW5kZXgyPGxlbihzMik6CiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmIHMxW2luZGV4MV09PXMzW2luZGV4M10gYW5kIHMyW2luZGV4Ml09PXMzW2luZGV4M106CiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmIHJlY3Vyc2lvbihpbmRleDErMSxpbmRleDIsaW5kZXgzKzEpOgogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gVHJ1ZQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpZiByZWN1cnNpb24oaW5kZXgxLGluZGV4MisxLGluZGV4MysxKToKIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIFRydWUKIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZWxpZiBzMVtpbmRleDFdPT1zM1tpbmRleDNdOgogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpZiByZWN1cnNpb24oaW5kZXgxKzEsaW5kZXgyLGluZGV4MysxKToKIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIFRydWUKIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZWxpZiBzMltpbmRleDJdPT1zM1tpbmRleDNdOgogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpZiByZWN1cnNpb24oaW5kZXgxLGluZGV4MisxLGluZGV4MysxKToKIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIFRydWUKIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZWxzZToKIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIEZhbHNlCiDCoCDCoCDCoCDCoCDCoCDCoGVsaWYgaW5kZXgxPGxlbihzMSk6CiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmIHMxW2luZGV4MV09PXMzW2luZGV4M106CiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmIHJlY3Vyc2lvbihpbmRleDErMSxpbmRleDIsaW5kZXgzKzEpOgogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gVHJ1ZQogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBlbHNlOgogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gRmFsc2UKIMKgIMKgIMKgIMKgIMKgIMKgZWxpZiBpbmRleDI8bGVuKHMyKToKIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaWYgczJbaW5kZXgyXT09czNbaW5kZXgzXToKIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaWYgcmVjdXJzaW9uKGluZGV4MSxpbmRleDIrMSxpbmRleDMrMSk6CiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJldHVybiBUcnVlCiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGVsc2U6CiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJldHVybiBGYWxzZQogwqAgwqAgwqAgwqAgwqAgwqBkcE1lbW8uYWRkKChpbmRleDEsaW5kZXgyKSkKIMKgIMKgIMKgIMKgcmV0dXJuIHJlY3Vyc2lvbigwLDAsMCkKIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgCiDCoCDCoCDCoCDCoAo8fGZpbV9zdWZmaXh8PgogwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gczErczI9PXMzCjx8ZmltX2VuZHw+"]
["e7a03806efc9b65987a01cd1f1f6f935a3e40559-3","e7a03806efc9b65987a01cd1f1f6f935a3e40559","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZWxlY3RvciwgaW5kZXg9MCk6CiAgICAgICAgc2VsZi5zZWxlY3RvciA9IHNlbGVjdG9yCiAgICAgICAgc2VsZi5pbmRleCA9IGluZGV4CgogICAgZGVmIF9fY2FsbF9fKHNlbGYsIGRyaXZlcik6CiAgICAgICAgdHJ5OgogICAgICAgICAgICByZXR1cm4gZHJpdmVyLmZpbmRfZWxlbWVudHMoKnNlbGYuc2VsZWN0b3IpW3NlbGYuaW5kZXhdCiAgICAgICAgZXhjZXB0IChJbmRleEVycm9yLCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBUaW1lb3V0RXhjZXB0aW9uKToKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgoKY2xhc3MgZWxlbWVudHM6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlbGVjdG9yKToKICAgICAgICBzZWxmLnNlbGVjdG9yID0gc2VsZWN0b3IKCiAgICBkZWYgX19jYWxsX18oc2VsZiwgZHJpdmVyKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJldHVybiBkcml2ZXIuZmluZF9lbGVtZW50cygqc2VsZi5zZWxlY3RvcikKICAgICAgICBleGNlcHQgKEluZGV4RXJyb3IsIE5vU3VjaEVsZW1lbnRFeGNlcHRpb24sIFRpbWVvdXRFeGNlcHRpb24pOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCgpjbGFzcyBjbGlja2FibGU6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGVsZW1lbnQpOgogICAgICAgIHNlbGYuZWxlbWVudCA9IGVsZW1lbnQKCiAgICBkZWYgX19jYWxsX18oc2VsZiwgZHJpdmVyKToKICAgICAgICByZXR1cm4gc2VsZi5lbGVtZW50LmlzX2VuYWJsZWQoKSBhbmQgc2VsZi5lbGVtZW50LmlzX2Rpc3BsYXllZCgpCjx8ZmltX3N1ZmZpeHw+CmZyb20gc2VsZW5pdW0uY29tbW9uLmV4Y2VwdGlvbnMgaW1wb3J0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24sIFRpbWVvdXRFeGNlcHRpb24KCgpjbGFzcyBlbGVtZW50Ogo8fGZpbV9lbmR8Pg=="]
["d8e551d0618cadf58795ede3878cfb3f78fff5ae-1","d8e551d0618cadf58795ede3878cfb3f78fff5ae",{"$cut":{"chars":18356,"head":"PHxmaW1fcHJlZml4fD4KIiIiClB5dGhvbiBzY3JpcHQgdG8gcGxvdCByZXN1bHRzIG9mIHB5U0lUIHJ1bi4KClVzZQotLS0KCiAgICAgICAgcHl0aG9uIHZpc3VhbGl6ZS5weSA8ZGlyZWN0b3J5PgoKd2hlcmUgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSByZXN1bHRzIG9mIGEgcnVuLgoKIiIiCmltcG9ydCBvcwppbXBvcnQgc3lzCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgcmUKCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgbWF0cGxvdGxpYiBhcyBtcGwKbXBsLnVzZSgnQWdnJykKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdApmcm9tIHNjaXB5LmlvIGltcG9ydCBsb2FkbWF0CmZyb20gc2NpcHkgaW1wb3J0IHNpZ25hbAoKCiMgcGx0LnJjUGFyYW1zWyJmb250LnNpemUiXSA9ICcyMicKIyBwbHQucmNQYXJhbXNbJ2ZpZ3VyZS5maWdzaXplJ10gPSAyMCwxMAojIHBsdC5yY1BhcmFtc1snbGluZXMubGluZXdpZHRoJ10gPSA0CgoKCiMgIyBCdWlsZCBwYXRoIGZvciBzYXZpbmcgZmlndXJlcwojIFJvb3REaXIgPSAnJwojIFN1YkRpciA9IHN0cihzeXMuYXJndlsxXSkKIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBFeHBEaXIgPSBSb290RGlyICsgU3ViRGlyCgojIHRpbWVfc3RyID0gZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoJyVZJWIlZC0lSCVNJVMnKSAKIyBwYXRoX2ZpZyA9IChFeHBEaXIgKyAnL2ZpZ18nICsgdGltZV9zdHIpCiMgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGhfZmlnKToKIyAgICAgb3MubWFrZWRpcnMocGF0aF9maWcpCiAgICAKIyAjICAgRGVmaW5lIERvbWFpbgojIHBtbHggPSBQTUwoMC4xLCAxMDApCiMgcG1seiA9IFBNTCgwLjEsIDEwMCkKCiMgeF9jb25maWcgPSAoMC4xLCAxLjAsIHBtbHgsIHBtbHgpCiMgel9jb25maWcgPSAoMC4xLCAwLjgsIHBtbHosIHBtbHopCgojIGQgPSBSZWN0YW5ndWxhckRvbWFpbih4X2NvbmZpZywgel9jb25maWcpCgojIG0gPSBDYXJ0ZXNpYW5NZXNoKGQsIDkxLCA3MSkKCiMgIyAgIEdlbmVyYXRlIHRydWUgd2F2ZSBzcGVlZAojIEMsIEMwLCBtLCBkID0gaG9yaXpvbnRhbF9yZWZsZWN0b3IobSkKCiMgem1heCA9IGQuei5yYm91bmQKIyB4X2xlbmd0aCA9IGQueC5yYm91bmQKCiMgIyMjIyAKIyB0cmFuZ2UgPSAoMC4wLCAzLjApCgojICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIExvYWRpbmcgZGF0YSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEhlcmUgY2hhbmdlIG51bWJlciBvZiBpdGVyICQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkCiMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyB4MSA9IGxvYWRtYXQoRXhwRGlyICsgJy94XzEubWF0JykKIyB4MiA9IGxvYWRtYXQoRXhwRGlyICsgJy94XzUwLm1hdCcpCiMgeDMgPSBsb2FkbWF0KEV4cERpciArICcveF8xMDAubWF0JykKIyB4NCA9IGxvYWRtYXQoRXhwRGlyICsgJy94XzE1MC5tYXQnKQojIHg1ID0gbG9hZG1hdChFeHBEaXIgKyAnL3hfMjAwLm1hdCcpCiMgeDYgPSBsb2FkbWF0KEV4cERpciArICcveF8zMDAubWF0JykKCiMgdjEgPSBucC5yZXNoYXBlKHgxWydkYXRhJ10sbS5zaGFwZShhc19ncmlkPVRydWUpKS50cmFuc3Bvc2UoKQojIHYyID0gbnAucmVzaGFwZSh4MlsnZGF0YSddLG0uc2hhcGUoYXNfZ3JpZD1UcnVlKSkudHJhbnNwb3NlKCkKIyB2MyA9IG5wLnJlc2hhcGUoeDNbJ2RhdGEnXSxtLnNoYXBlKGFzX2dyaWQ9VHJ1ZSkpLnRyYW5zcG9zZSgpCiMgdjQgPSBucC5yZXNoYXBlKHg0WydkYXRhJ10sbS5zaGFwZShhc19ncmlkPVRydWUpKS50cmFuc3Bvc2UoKQojIHY1ID0gbnAucmVzaGFwZSh4NVsnZGF0YSddLG0uc2hhcGUoYXNfZ3JpZD1UcnVlKSkudHJhbnNwb3NlKCkKIyB2NiA9IG5wLnJlc2hhcGUoeDZbJ2RhdGEnXSxtLnNoYXBlKGFzX2dyaWQ9VHJ1ZSkpLnRyYW5zcG9zZSgpCgojICMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIG91dHB1dCA9IGxvYWRtYXQoRXhwRGlyICsgJy9vdXRwdXQubWF0JykKIyAiIiIgCiMgIyBvdXRwdXQgPSB7J2ludmVydGVkJzogbW9kZWwsCiMgIyAgICAgICAgICAgJ3RydWUnOiBDLnJlc2hhcGUobS5zaGFwZShhc19ncmlkPVRydWUpKS50cmFuc3Bvc2UoKSwKIyAjICAgICAgICAgICAnaW5pdGlhbCc6IEMwLnJlc2hhcGUobS5zaGFwZShhc19ncmlkPVRydWUpKS50cmFuc3Bvc2UoKSwKIyAjICAgICAgICAgICAnb2JqJzogb2JqX3ZhbHMsCiMgIyAgICAgICAgICAgJ2R0Jzogc29sdmVyLmR0LAojICMgICAgICAgICAgICd3YXZlZmllbGRfdHJ1ZSc6IHdhdmVmaWVsZF90cnVlLAojICMgICAgICAgICAgICd3YXZlZmllbGRfaW5pdGlhbCc6IHdhdmVmaWVsZF9pbml0aWFsLAojICMgICAgICAgICAgICd3YXZlZmllbGRfaW52ZXJ0ZWQnOiB3YXZlZmllbGRfaW52ZXJ0ZWQsCiMgIyAgICAgICAgICAgJ2dyYWRpZW50XzAnOiBncmFkaWVudF9pdGVyMSwKIyAjICAgICAgICAgICAnZ3JhZGllbnRfbWlkZGxlJzogZ3JhZGllbnRfaXRlcjIsCiMgIyAgICAgICAgICAgJ2dyYWRpZW50X2VuZCc6IGdyYWRpZW50X2l0ZXIzCiMgIyAgICAgICAgICAgfQojICIiIgojIG5zID0gaW50KG5wLnNoYXBlKG91dHB1dFsnd2F2ZWZpZWxkX3RydWUnXSlbMF0vMikKCiMgb2JqX3ZhbHMgPSBvdXRwdXRbJ29iaiddCiMgbW9kZWwgPSBvdXRwdXRbJ2ludmVydGVkJ10KIyB3YXZlZmllbGRfdHJ1ZSA9IG91dHB1dFsnd2F2ZWZpZWxkX3RydWUnXVtuc10KIyB3YXZlZmllbGRfaW5pdGlhbCA9IG91dHB1dFsnd2F2ZWZpZWxkX2luaXRpYWwnXVtuc10KIyB3YXZlZmllbGRfaW52ZXJ0ZWQgPSBvdXRwdXRbJ3dhdmVmaWVsZF9pbnZlcnRlZCddW25zXQojIGdyYWRpZW50X2l0ZXIxID0gb3V0cHV0WydncmFkaWVudF8wJ10KIyBncmFkaWVudF9pdGVyMiA9IG91"}}]
["e73f6a6ca88d08d4736536ae62494d2c391e371b-2","e73f6a6ca88d08d4736536ae62494d2c391e371b","PHxmaW1fcHJlZml4fD4KIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDE3IFNjb3R0IFNoYXdjcm9mdCwgd3JpdHRlbiBmb3IgQWRhZnJ1aXQgSW5kdXN0cmllcwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogVW5saWNlbnNlCgpmcm9tIGFkYWZydWl0X3NpbXBsZW1hdGggaW1wb3J0IG1hcF9yYW5nZSwgY29uc3RyYWluCjx8ZmltX2VuZHw+"]
["6b92e51614a2c55a0bf2696a876213bfe4310a68-2","6b92e51614a2c55a0bf2696a876213bfe4310a68","PHxmaW1fcHJlZml4fD4KIiIiVGhlIFB5V0VOTyBtb2R1bGUuIiIiCgpmcm9tIC4gaW1wb3J0IHBvaW50cwpmcm9tIC4gaW1wb3J0IGtlcm5lbHMKZnJvbSAuIGltcG9ydCBub251bmlmb3JtCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuIGltcG9ydCBzeW1ib2xpYwpmcm9tIC4gaW1wb3J0IHN5bWJvbHMKZnJvbSAuIGltcG9ydCB2ZXJzaW9uCmZyb20gLiBpbXBvcnQgd2Vubwo8fGZpbV9lbmR8Pg=="]
["2e5d1de98481814c21e4bef81b4ec8cb5b118709-3","2e5d1de98481814c21e4bef81b4ec8cb5b118709","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAppbXBvcnQgdmNyCmltcG9ydCBjb3B5CgppbXBvcnQgZ29jZAppbXBvcnQgZ29jZC5hcGkKCgpAcHl0ZXN0LmZpeHR1cmUKZGVmIHNlcnZlcigpOgogICAgcmV0dXJuIGdvY2QuU2VydmVyKCdodHRwOi8vMTkyLjE2OC45OS4xMDA6ODE1MycsIHVzZXI9J2JvdCcsIHBhc3N3b3JkPScxMjM0NTY3OCcpCgoKQHB5dGVzdC5maXh0dXJlCmRlZiBwaXBlbGluZV9qc29uKCk6CiAgICByZXR1cm4gewogICAgICAgICJsYWJlbF90ZW1wbGF0ZSI6ICIke0NPVU5UfSIsCiAgICAgICAgImVuYWJsZV9waXBlbGluZV9sb2NraW5nIjogRmFsc2UsCiAgICAgICAgIm5hbWUiOiAiUHlHb0NkIiwKICAgICAgICAidGVtcGxhdGUiOiBOb25lLAogICAgICAgICJwYXJhbWV0ZXJzIjogW10sCiAgICAgICAgImVudmlyb25tZW50X3ZhcmlhYmxlcyI6IFtdLAogICAgICAgICJtYXRlcmlhbHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAiYXR0cmlidXRlcyI6IHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9nYXF6aS9weS1nb2NkLmdpdCIsCiAgICAgICAgICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogTm9uZSwKICAgICAgICAgICAgICAgICAgICAiZmlsdGVyIjogTm9uZSwKICAgICAgICAgICAgICAgICAgICAibmFtZSI6IE5vbmUsCiAgICAgICAgICAgICAgICAgICAgImF1dG9fdXBkYXRlIjogVHJ1ZSwKICAgICAgICAgICAgICAgICAgICAiYnJhbmNoIjogIm1hc3RlciIsCiAgICAgICAgICAgICAgICAgICAgInN1Ym1vZHVsZV9mb2xkZXIiOiBOb25lLAogICAgICAgICAgICAgICAgICAgICJzaGFsbG93X2Nsb25lIjogVHJ1ZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhZ2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJkZWZhdWx0U3RhZ2UiLAogICAgICAgICAgICAgICAgImZldGNoX21hdGVyaWFscyI6IFRydWUsCiAgICAgICAgICAgICAgICAiY2xlYW5fd29ya2luZ19kaXJlY3RvcnkiOiBGYWxzZSwKICAgICAgICAgICAgICAgICJuZXZlcl9jbGVhbnVwX2FydGlmYWN0cyI6IEZhbHNlLAogICAgICAgICAgICAgICAgImFwcHJvdmFsIjogewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN1Y2Nlc3MiLAogICAgICAgICAgICAgICAgICAgICJhdXRob3JpemF0aW9uIjogewogICAgICAgICAgICAgICAgICAgICAgICAicm9sZXMiOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgInVzZXJzIjogW10KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImVudmlyb25tZW50X3ZhcmlhYmxlcyI6IFtdLAogICAgICAgICAgICAgICAgImpvYnMiOiBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJkZWZhdWx0Sm9iIiwKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICAgICAgICAgICJ0YXNrcyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJleGVjIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXR0cmlidXRlcyI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJ1bl9pZiI6IFtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib25fY2FuY2VsIjogTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAibWFrZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudHMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlLWNvbW1pdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvcmtpbmdfZGlyZWN0b3J5IjogTm9uZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgInRhYnMiOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgImFydGlmYWN0cyI6IFtdLAogICAgICAgICAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IE5vbmUKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJ0cmFja2luZ190b29sIjogTm9uZSwKICAgICAgICAidGltZXIiOiBOb25lCiAgICB9CgoKQHZjci51c2VfY2Fzc2V0dGUoJ3Rlc3RzL2ZpeHR1cmVzL2Nhc3NldHRlcy9hcGkvcGlwZWxpbmUtY29uZmlnL2dldC1zdWNjZXNzZnVsLnltbCcpCmRlZiB0ZXN0X2dldF9leGlzdGluZyhzZXJ2ZXIsIHBpcGVsaW5lX2pzb24pOgogICAgYXBpX2NvbmZpZyA9IGdvY2QuYXBpLlBpcGVsaW5lQ29uZmlnKHNlcnZlciwgIlB5R29DZCIpCgogICAgcmVzcG9uc2UgPSBhcGlfY29uZmlnLmdldCgpCgogICAgYXNzZXJ0IHJlc3BvbnNlLmlzX29rCiAgICBhc3NlcnQgcmVzcG9uc2UuZXRhZyBpcyBub3QgTm9uZQoKICAgIHJlc3BvbnNlX2JvZHkgPSBjb3B5LmNvcHkocmVzcG9uc2UuYm9keSkKICAgIGRlbCByZXNwb25zZV9ib2R5WyJfbGlua3MiXQogICAgYXNzZXJ0IHJlc3BvbnNlX2JvZHkgPT0gcGlwZWxpbmVfanNvbgoKCkB2Y3IudXNlX2Nhc3NldHRlKCd0ZXN0cy9maXh0dXJlcy9jYXNzZXR0ZXMvYXBpL3BpcGVsaW5lLWNvbmZpZy9nZXQtbWlzc2luZy55bWwnKQpkZWYgdGVzdF9nZXRfbWlzc2luZyhzZXJ2ZXIpOgogICAgYXBpX2NvbmZpZyA9IGdvY2QuYXBpLlBpcGVsaW5lQ29uZmlnKHNlcnZlciwgIk1pc3NpbmdQaXBlbGluZSIpCgogICAgcmVzcG9uc2UgPSBhcGlfY29uZmlnLmdldCgpCgogICAgYXNzZXJ0IG5vdCByZXNwb25zZS5pc19vawoKCkB2Y3IudXNlX2Nhc3NldHRlKCd0ZXN0cy9maXh0dXJlcy9jYXNzZXR0ZXMvYXBpL3BpcGVsaW5lLWNvbmZpZy9lZGl0LXN1Y2Nlc3NmdWwueW1sJykKZGVmIHRlc3RfZWRpdF9zdWNjZXNzZnVsKHNlcnZlciwgcGlwZWxpbmVfanNvbik6CiAgICBhcGlfY29uZmlnID0gZ29jZC5hcGkuUGlwZWxpbmVDb25maWcoc2VydmVyLCAiUHlHb0NkIikKICAgIGV0YWcgPSAnIjZiNjBhNzdkMjczMTJlM2EyMWJmZDU5MTYzZGIxZTQ4IicKICAgIHBpcGVsaW5lX2pzb25bIm1hdGVyaWFscyJdWzBdWwogICAgICAgICJhdHRyaWJ1dGVzIl1bInVybCJdID0gImh0dHBzOi8vZ2l0aHViLmNvbS9oZW5yaXF1ZWdlbWlnbmFuaS9weS1nb2NkLmdpdCIKCiAgICByZXNwb25zZSA9IGFwaV9jb25maWcuZWRpdChwaXBlbGluZV9qc29uLCBldGFnKQoKICAgIGFzc2VydCByZXNwb25zZS5pc19vawoKCkB2Y3IudXNlX2Nhc3NldHRlKCd0ZXN0cy9maXh0dXJlcy9jYXNzZXR0ZXMvYXBpL3BpcGVsaW5lLWNvbmZpZy9lZGl0LWVycm9yLnltbCcpCmRlZiB0ZXN0X2VkaXRfZXJyb3Ioc2VydmVyLCBwaXBlbGluZV9qc29uKToKICAgIGFwaV9jb25maWcgPSBnb2NkLmFwaS5QaXBlbGluZUNvbmZpZyhzZXJ2ZXIsICJQeUdvQ2QiKQogICAgZXRhZyA9ICdpbnZhbGlkIGV0YWcnCgogICAgcmVzcG9uc2UgPSBhcGlfY29uZmlnLmVkaXQocGlwZWxpbmVfanNvbiwgZXRhZykKCiAgICBhc3NlcnQgbm90IHJlc3BvbnNlLmlzX29rCgoKQHZjci51c2VfY2Fzc2V0dGUoJ3Rlc3RzL2ZpeHR1cmVzL2Nhc3NldHRlcy9hcGkvcGlwZWxpbmUtY29uZmlnL2NyZWF0ZS1zdWNjZXNzZnVsLnltbCcpCmRlZiB0ZXN0X2NyZWF0ZV9zdWNjZXNzZnVsKHNlcnZlciwgcGlwZWxpbmVfanNvbik6CiAgICBhcGlfY29uZmlnID0gZ29jZC5hcGkuUGlwZWxpbmVDb25maWcoc2VydmVyLCAiUHlHb0NkLUNvcHkiKQogICAgcGlwZWxpbmVfanNvblsibmFtZSJdID0gIlB5R29DZC1Db3B5IgogICAgcGlwZWxpbmVfanNvblsiZ3JvdXAiXSA9ICJUb29scyIKCiAgICByZXNwb25zZSA9IGFwaV9jb25maWcuY3JlYXRlKHBpcGVsaW5lX2pzb24pCgogICAgYXNzZXJ0IHJlc3BvbnNlLmlzX29rCgoKQHZjci51c2VfY2Fzc2V0dGUoJ3Rlc3RzL2ZpeHR1cmVzL2Nhc3NldHRlcy9hcGkvcGlwZWxpbmUtY29uZmlnL2NyZWF0ZS1lcnJvci55bWwnKQpkZWYgdGVzdF9jcmVhdGVfZXJyb3Ioc2VydmVyLCBwaXBlbGluZV9qc29uKToKICAgIGFwaV9jb25maWcgPSBnb2NkLmFwaS5QaXBlbGluZUNvbmZpZyhzZXJ2ZXIsICJQeUdvQ2QiKQogICAgcGlwZWxpbmVfanNvblsiZ3JvdXAiXSA9ICJUb29scyIKCiAgICByZXNwb25zZSA9IGFwaV9jb25maWcuY3JlYXRlKHBpcGVsaW5lX2pzb24pCgogICAgYXNzZXJ0IG5vdCByZXNwb25zZS5pc19vawo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgICAgICAicnVuX2luc3RhbmNlX2NvdW50IjogTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQiOiBOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAiZW52aXJvbm1lbnRfdmFyaWFibGVzIjogW10sCiAgICAgICAgICAgICAgICAgICAgICAgICJyZXNvdXJjZXMiOiBbXSwKPHxmaW1fZW5kfD4="]
["ec03a05e6067fe947641ae3f0d779545be2e8b9a-2","ec03a05e6067fe947641ae3f0d779545be2e8b9a","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiIlRlc3RzIGZvciBwb3B1bGF0aW9uIG9mIHRoZSBkYXRhYmFzZS4iIiIKCmZyb20gYmlvMmJlbF9leGNhcGUgaW1wb3J0IE1hbmFnZXIKZnJvbSBiaW8yYmVsX2V4Y2FwZS5tb2RlbHMgaW1wb3J0IFRhcmdldApmcm9tIHRlc3RzLmNhc2VzIGltcG9ydCBUZW1wb3JhcnlDYWNoZUNsYXNzTWl4aW4KCgpjbGFzcyBUZXN0UG9wdWxhdGUoVGVtcG9yYXJ5Q2FjaGVDbGFzc01peGluKToKICAgICIiIlRlc3QgcG9wdWxhdGlvbiBvZiB0aGUgZGF0YWJhc2UuIiIiCgogICAgbWFuYWdlcjogTWFuYWdlcgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIHRlc3RfY291bnRfY2hlbWljYWxzKHNlbGYpOgogICAgICAgICIiIlRlc3QgY291bnRpbmcgdGhlIGNoZW1pY2FscyBpbiB0aGUgZGF0YWJhc2UuIiIiCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzZWxmLm1hbmFnZXIuY291bnRfY2hlbWljYWxzKCkpCgo8fGZpbV9lbmR8Pg=="]
["cf5a687e4531acd5529c72d5e58252e8d1138aec-2","cf5a687e4531acd5529c72d5e58252e8d1138aec","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9wZW5weXhsCmZyb20gZm9ybXVsYSBpbXBvcnQgKgpmcm9tIHJhbmRkYXRhUyBpbXBvcnQgKgpmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZGludAoKZGVmIHdyaXRlKHNoZWV0LCBtb250aCwgZ2VuZGVyKToKICAgIGlmIG1vbnRoID09ICdzZXAnOgogICAgICAgIHN0b3AgPSAzNQogICAgZWxzZToKICAgICAgICBzdG9wID0gMzYKICAgIAogICAgZm9yIGkgaW4gcmFuZ2UoNSwgc3RvcCk6CiAgICAgICAgZm9vZChzaGVldCwgaSkKICAgICAgICB0cmF2ZWwoc2hlZXQsIGkpCiAgICAgICAgaWYgcmFuZGludCgwLCAxNSkgPT0gMDoKICAgICAgICAgICAgZWR1Y2F0aW9uKHNoZWV0LCBpKQogICAgICAgIGlmIHJhbmRpbnQoMCwgMjUpID09IDA6CiAgICAgICAgICAgIHBlcnNvbmFsKHNoZWV0LCBpLCBnZW5kZXIpCiAgICAgICAgaWYgcmFuZGludCgwLCAyNSkgPT0gMDoKICAgICAgICAgICAgZW50ZXJhaW5tZW50KHNoZWV0LCBpKQogICAgICAgIGlmIHJhbmRpbnQoMCwgMjUpID09IDA6CiAgICAgICAgICAgIG90aGVyKHNoZWV0LCBpKQoKCiMgRm9ybXVsYQpkZWYgc3VtbWFyeShzaGVldCk6CiAgICBleHBlbnNlKHNoZWV0KQogICAgcmVtYWluaW5nKHNoZWV0KQogICAgdG90YWwoc2hlZXQpCiAgICBvY3Rfc3VtbWFyeShzaGVldCkKCmN1c3RvbWVyX25hbWUgPSBpbnB1dCgiRW50ZXIgeW91ciBuYW1lICh3aXRob3V0IGFueSBzcGVjaWFsIGNoYXJhY3RlciBvciBzcGFjZSk6ICIpCmZpbGVfcGF0aCA9IGYiY3VzdG9tZXIve2N1c3RvbWVyX25hbWV9Lnhsc3giCgojIGdlbmRlcgpnZW5kZXIgPSAnJwp3aGlsZSAoZ2VuZGVyIG5vdCBpbiBbJ20nLCAnZiddKToKICAgIGdlbmRlciA9IGlucHV0KCdFbnRlciB5b3VyIGdlbmRlciAoTSlhbGUvKEYpZW1hbGU6ICcpLmxvd2VyKCkKCnByaW50KCd+fiBGaWxsIGFuIGludGVyZ2VyISEhJykKc2FsYXJ5ID0gaW50KGlucHV0KCdFbnRlciB5b3VyIHNhbGFyeTogJykpCnJlbnQgPSBpbnQoaW5wdXQoJ0VudGVyIHlvdXIgUmVudCBjb3N0OiAnKSkKbmV0ID0gaW50KGlucHV0KCdFbnRlciB5b3VyIGludGVybmV0IGNvc3Q6ICcpKQp1dGlsaXR5ID0gaW50KGlucHV0KCdFbnRlciB5b3VyIHV0aWxpdHkgY29zdCAod2F0ZXIvZWxlY3RyaWNpdHkgYmlsbHMpOiAnKSkKCiMgT3BlbiBmaWxlIGNoYW5nZSBhbGwgZm9tdWxhciB0byB2YWx1ZQp3YiA9IG9wZW5weXhsLmxvYWRfd29ya2Jvb2soJ3Byb3RvdHlwZS54bHN4JykKCiMgd3MgZm9yIFNlcHRlbWJlciBzaGVldAp3Yi5hY3RpdmUgPSAxCndzID0gd2IuYWN0aXZlCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgTW9jayBTZXAKd3NbJ0M1J10gPSBzYWxhcnkKd3JpdGUod3MsICdzZXAnLCBnZW5kZXIpCm1vbnRobHkod3MsIHJlbnQsIG5ldCwgdXRpbGl0eSkKPHxmaW1fZW5kfD4="]
["cf5a687e4531acd5529c72d5e58252e8d1138aec-4","cf5a687e4531acd5529c72d5e58252e8d1138aec","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9wZW5weXhsCmZyb20gZm9ybXVsYSBpbXBvcnQgKgpmcm9tIHJhbmRkYXRhUyBpbXBvcnQgKgpmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZGludAoKZGVmIHdyaXRlKHNoZWV0LCBtb250aCwgZ2VuZGVyKToKICAgIGlmIG1vbnRoID09ICdzZXAnOgogICAgICAgIHN0b3AgPSAzNQogICAgZWxzZToKICAgICAgICBzdG9wID0gMzYKICAgIAogICAgZm9yIGkgaW4gcmFuZ2UoNSwgc3RvcCk6CiAgICAgICAgZm9vZChzaGVldCwgaSkKICAgICAgICB0cmF2ZWwoc2hlZXQsIGkpCiAgICAgICAgaWYgcmFuZGludCgwLCAxNSkgPT0gMDoKICAgICAgICAgICAgZWR1Y2F0aW9uKHNoZWV0LCBpKQogICAgICAgIGlmIHJhbmRpbnQoMCwgMjUpID09IDA6CiAgICAgICAgICAgIHBlcnNvbmFsKHNoZWV0LCBpLCBnZW5kZXIpCiAgICAgICAgaWYgcmFuZGludCgwLCAyNSkgPT0gMDoKICAgICAgICAgICAgZW50ZXJhaW5tZW50KHNoZWV0LCBpKQogICAgICAgIGlmIHJhbmRpbnQoMCwgMjUpID09IDA6CiAgICAgICAgICAgIG90aGVyKHNoZWV0LCBpKQoKCiMgRm9ybXVsYQpkZWYgc3VtbWFyeShzaGVldCk6CiAgICBleHBlbnNlKHNoZWV0KQogICAgcmVtYWluaW5nKHNoZWV0KQogICAgdG90YWwoc2hlZXQpCiAgICBvY3Rfc3VtbWFyeShzaGVldCkKCmN1c3RvbWVyX25hbWUgPSBpbnB1dCgiRW50ZXIgeW91ciBuYW1lICh3aXRob3V0IGFueSBzcGVjaWFsIGNoYXJhY3RlciBvciBzcGFjZSk6ICIpCmZpbGVfcGF0aCA9IGYiY3VzdG9tZXIve2N1c3RvbWVyX25hbWV9Lnhsc3giCgojIGdlbmRlcgpnZW5kZXIgPSAnJwp3aGlsZSAoZ2VuZGVyIG5vdCBpbiBbJ20nLCAnZiddKToKICAgIGdlbmRlciA9IGlucHV0KCdFbnRlciB5b3VyIGdlbmRlciAoTSlhbGUvKEYpZW1hbGU6ICcpLmxvd2VyKCkKCnByaW50KCd+fiBGaWxsIGFuIGludGVyZ2VyISEhJykKc2FsYXJ5ID0gaW50KGlucHV0KCdFbnRlciB5b3VyIHNhbGFyeTogJykpCnJlbnQgPSBpbnQoaW5wdXQoJ0VudGVyIHlvdXIgUmVudCBjb3N0OiAnKSkKbmV0ID0gaW50KGlucHV0KCdFbnRlciB5b3VyIGludGVybmV0IGNvc3Q6ICcpKQp1dGlsaXR5ID0gaW50KGlucHV0KCdFbnRlciB5b3VyIHV0aWxpdHkgY29zdCAod2F0ZXIvZWxlY3RyaWNpdHkgYmlsbHMpOiAnKSkKCjx8ZmltX2hvbGV8Pgp3Yi5hY3RpdmUgPSAxCndzID0gd2IuYWN0aXZlCgojIE1vY2sgU2VwCndzWydDNSddID0gc2FsYXJ5CndyaXRlKHdzLCAnc2VwJywgZ2VuZGVyKQptb250aGx5KHdzLCByZW50LCBuZXQsIHV0aWxpdHkpCnN1bW1hcnkod3MpCnNlcF9zdW1tYXJ5KHdzKQoKIyBTYXZlIGZpbGUKd2Iuc2F2ZShmaWxlX3BhdGgpCgojIHdvIGZvciBPY3RvYmVyIHNoZWV0CndiYiA9IG9wZW5weXhsLmxvYWRfd29ya2Jvb2soZmlsZV9wYXRoKQp3YmIuYWN0aXZlID0gMgp3byA9IHdiYi5hY3RpdmUKCiMgTW9jayBPY3QKd29bJ0M1J10gPSBzYWxhcnkKd3JpdGUod28sICdvY3QnLCBnZW5kZXIpCm1vbnRobHkod28sIHJlbnQsIG5ldCwgdXRpbGl0eSkKc3VtbWFyeSh3bykKCiMgU2F2ZSBmaWxlCndiYi5zYXZlKGZpbGVfcGF0aCkKPHxmaW1fc3VmZml4fD4KIyBPcGVuIGZpbGUgY2hhbmdlIGFsbCBmb211bGFyIHRvIHZhbHVlCndiID0gb3BlbnB5eGwubG9hZF93b3JrYm9vaygncHJvdG90eXBlLnhsc3gnKQoKIyB3cyBmb3IgU2VwdGVtYmVyIHNoZWV0Cjx8ZmltX2VuZHw+"]
["2b309858663c56b3d7a2c400be8ae9c0a832c258-1","2b309858663c56b3d7a2c400be8ae9c0a832c258","PHxmaW1fcHJlZml4fD4KIyAtLS0KIyBqdXB5dGVyOgojICAganVweXRleHQ6CiMgICAgIGZvcm1hdHM6IGlweW5iLHB5OnBlcmNlbnQKIyAgICAgdGV4dF9yZXByZXNlbnRhdGlvbjoKIyAgICAgICBleHRlbnNpb246IC5weQojICAgICAgIGZvcm1hdF9uYW1lOiBwZXJjZW50CiMgICAgICAgZm9ybWF0X3ZlcnNpb246ICcxLjMnCiMgICAgICAganVweXRleHRfdmVyc2lvbjogMS42LjAKIyAgIGtlcm5lbHNwZWM6CiMgICAgIGRpc3BsYXlfbmFtZTogUHl0aG9uIDMKIyAgICAgbGFuZ3VhZ2U6IHB5dGhvbgojICAgICBuYW1lOiBweXRob24zCiMgLS0tCgojICUlIFttYXJrZG93bl0KIyAjIyBEZXZlbG9wIGB3bHRwL2N5Y2xlci5weWAKIyAoV0lQKSBydW4gYSB2ZWhpY2xlIGZyb20gdGhlIGg1ZGIsIHN0ZXAtYnktc3RlcC4KCiMgJSUKIyMgVG8gYXV0b3JlbG9hZCBjb2RlaW4gcHl0aG9uIGZpbGVzIGhlcmUuCiMgJWxvYWRfZXh0IGF1dG9yZWxvYWQKIyAlYXV0b3JlbG9hZCAyCgojIyBBdXRvLWZvcm1hdCBjZWxscyB0byBlYXNlIGRpZmZzLgojICVsb2FkX2V4dCBsYWJfYmxhY2sKCiMgJSUKIyMgSWYgeW91IGNoYW5nZSB0aGF0LCByZXN0YXJ0IGtlcm5lbCBhbmQgY2xlYXIgYWxsIG91dHBvdXRzIGJlZm9yZSBydW5uaW5nIGl0CiMgIyVtYXRwbG90bGliIHdpZGdldAojICVtYXRwbG90bGliIGlubGluZQoKIyAlJQpmcm9tIHR5cGluZyBpbXBvcnQgVW5pb24sIExpc3QsIENhbGxhYmxlLCBBbnksIFNlcXVlbmNlIGFzIFNlcQppbXBvcnQgaW8KaW1wb3J0IGl0ZXJ0b29scyBhcyBpdHQKaW1wb3J0IGxvZ2dpbmcKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoLCBQdXJlUG9zaXhQYXRoIGFzIFAKaW1wb3J0IHN5cwoKZnJvbSBjb2x1bW5pemUgaW1wb3J0IGNvbHVtbml6ZQppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcyBhcyBwZApmcm9tIHBhbmRhcyBpbXBvcnQgSERGU3RvcmUsIEluZGV4U2xpY2UgYXMgaWR4CmZyb20gcGFuZGFzLmNvcmUuZ2VuZXJpYyBpbXBvcnQgTkRGcmFtZQpmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHB5cGxvdCBhcyBwbHQKZnJvbSBwYW5kYWxvbmUubWFwcGluZ3MgaW1wb3J0IFBzdGVwCmltcG9ydCBxZ3JpZAoKaW1wb3J0IHdsdHAKZnJvbSB3bHRwIGltcG9ydCBlbmdpbmUKZnJvbSB3bHRwLmV4cGVyaW1lbnQgaW1wb3J0IEV4cGVyaW1lbnQKZnJvbSB3bHRwIGltcG9ydCBkYXRhbW9kZWwsIGlvIGFzIHdpbywgZW5naW5lLCBubWluZHJpdmUsIHZtYXgsIHZlaGljbGUsIGN5Y2xlcgoKIyMgQWRkIHRlc3RzLyBpbnRvIGBzeXMucGF0aGAgdG8gaW1wb3J0IGB2ZWhkYmAgbW9kdWxlLgojCnByb2pfZGlyID0gc3RyKFBhdGgod2x0cC5fX2ZpbGVfXykucGFyZW50c1sxXSAvICJ0ZXN0cyIpCmlmIHByb2pfZGlyIG5vdCBpbiBzeXMucGF0aDoKICAgIHN5cy5wYXRoLmluc2VydCgwLCBwcm9qX2RpcikKCmltcG9ydCB2ZWhkYgoKaWR4ID0gcGQuSW5kZXhTbGljZQpsb2cgPSBsb2dnaW5nLmdldExvZ2dlcigiVk1heC5pcHluYiIpCmxvZ2dpbmcuYmFzaWNDb25maWcoCiAgICBsZXZlbD1sb2dnaW5nLklORk8sCiAgICBmb3JtYXQ9IiUoYXNjdGltZSlzfCUobGV2ZWxuYW1lKTQuNHN8JShtb2R1bGUpczpbJShmdW5jTmFtZSlzXTpcbiAgKy0tPiAlKG1lc3NhZ2UpcyIsCiAgICBkYXRlZm10PSIlWS0lbS0lZCwlSDolTTolUyIsCikKCnBkLnNldF9vcHRpb24oImRpc3BsYXkubWF4X2NvbHVtbnMiLCA2NCkKCiMgJSUKaDUgPSAiVmVoRGF0YS9XbHRwR1MtbXNhY2Nlc3MuaDUiCmNhc2VubyA9IDEKcHJvcCwgd290LCBuMnZzID0gdmVoZGIubG9hZF92ZWhpY2xlX2FjY2RiKGg1LCBjYXNlbm8pCmFjY19jeWNsZSA9IHZlaGRiLmxvYWRfdmVoaWNsZV9ub2RlcyhoNSwgMSwgImN5Y2xlIikKCiMgJSUKcHJpbnQobGlzdChwcm9wLmluZGV4KSkKCiMgJSUKIyByZW5hbWVzID0gdmVoZGIuYWNjZGJfcmVuYW1lcygpCiMgcHJvcCA9IHByb3AucmVuYW1lKHJlbmFtZXMpCjx8ZmltX2hvbGV8PgojICUlCnByaW50KGxpc3QoYWNjX2N5Y2xlLmNvbHVtbnMpKQpwcmludChsaXN0KG1kbC5rZXlzKCkpKQoKIyAlJQpnd290cyA9IGVuZ2luZS5pbnRlcnBvbGF0ZV93b3Rfb25fdl9ncmlkKHdvdCwgbjJ2cykKZ3dvdHMgPSBlbmdpbmUuYXR0YWNoX3BfYXZhaWxfaW5fZ3dvdHMoZ3dvdHMsIGZfc2FmZXR5X21hcmdpbj0wLjEpCmd3b3RzWyJwX3Jlc2lzdCJdID0gdmVoaWNsZS5jYWxjX3BfcmVzaXN0KGd3b3RzLmluZGV4LCBtZGxbImYwIl0sIG1kbFsiZjEiXSwgbWRsWyJmMiJdKQoKIyAlJQpWID0gZGF0YW1vZGVsLmdldF9jbGFzc192X2N5Y2xlKDMpCgojICUlCmNiID0gY3ljbGVyLkN5Y2xlQnVpbGRlcihWKQpwbSA9IGN5Y2xlci5QaGFzZU1hcmtlcigpCgojICUlCndsdGNfcGFydHMgPSBkYXRhbW9kZWwuZ2V0X2NsYXNzX3BhcnRzX2xpbWl0cygzLCBlZGdlcz1UcnVlKQpjYi5jeWNsZSA9IHBtLmFkZF9jbGFzc19waGFzZV9tYXJrZXJzKGNiLmN5Y2xlLCB3bHRjX3BhcnRzKQoKIyAlJQpjYi5jeWNsZSA9IHBtLmFkZF90cmFuc2l0aW9uX21hcmtlcnMoY2IuY3ljbGUsIGNiLlYsIGNiLkEpCmNiLmN5Y2xlLnNlbGVjdF9kdHlwZXMoYm9vbCkuc3VtKCkKCiMgJSUKdF9jb2xkX2VuZCA9IDQ3MCAgIyBnYXAgZm9yIGFsbCBjbGFzc2VzCmZvciBlcnIgaW4gY2IudmFsaWRhdGVfbmltc190X2NvbGRfZW5kKHRfY29sZF9lbmQsIHdsdGNfcGFydHMpOgogICAgcmFpc2UgZXJyCgojICUlCmFjY19jeWNsZSA9IHZlaGRiLmxvYWRfdmVoaWNsZV9ub2RlcyhoNSwgY2FzZW5vLCAiY3ljbGUiKQpwcmludChsaXN0KGFjY19jeWNsZS5jb2x1bW5zKSkKCiMgJSUKIyMgSU5QVVRTIHRlc3Rpbmcgb2tfZmxhZ3MyIHNlbGVjdGlvbgojCmMgPSB3aW8ucHN0ZXBfZmFjdG9yeS5nZXQoKS5jeWNsZQoKbmcgPSA2Cm45NV9oaWdoID0gZW5naW5lLmNhbGNfbjk1KHdvdCwgbWRsWyJuX3JhdGVkIl0sIG1kbFsicF9yYXRlZCJdKVswXQp2X21heF9jeWNsZSA9IGNiLlYubWF4KCkKdm1heF9yZWMgPSB2bWF4LmNhbGNfdl9tYXgoZ3dvdHMpCmdfdm1heCA9IHZtYXhfcmVjLmdfdm1heApuMnZfdm1heCA9IG4ydnNbZ192bWF4IC0gMV0Kbl9tYXhfY3ljbGUgPSB2X21heF9jeWNsZSAqIG4ydl92bWF4Cm5fbWF4X2N5Y2xlID0gdl9tYXhfY3ljbGUgKiBuMnZfdm1heApubWlucyA9IG5taW5kcml2ZS5tZGxfMl9uX21pbl9kcml2ZXMoKiptZGwpCgojICUlCmNiLmFkZF93b3RzKGd3b3RzKQoKIyAlJQprciA9IDEuMDMKU00gPSAwLjEKY2IuY3ljbGVbInBfaW5lcnQiXSA9IHZlaGljbGUuY2FsY19pbmVydGlhbF9wb3dlcihjYi5WLCBjYi5BLCBwcm9wLnRlc3RfbWFzcywga3IpCmNiLmN5Y2xlWyJwX3JlcSJdID0gdmVoaWNsZS5jYWxjX3JlcXVpcmVkX3Bvd2VyKAogICAgY2IuY3ljbGVbInBfaW5lcnQiXSwgY2IuY3ljbGVbInBfcmVzaXN0Il0KKQpwX3JlbWFpbiA9IGN5Y2xlci5jYWxjX3BfcmVtYWluKGNiLmN5Y2xlWyJwX3JlcSJdLCBjYi5jeWNsZVsicF9hdmFpbCJdKQoKCiMgJSUKZGVmIGZsYWdfYWdncmVnYXRlcyhva19mbGFncyk6CiAgICB0cnVlcyA9IG9rX2ZsYWdzW29rX2ZsYWdzID49IDBdLnN1bSgpCiAgICBkZiA9IHBkLmNvbmNhdCgodHJ1ZXMsIG9rX2ZsYWdzLnN1bSgpIC0gdHJ1ZXMpLCBheGlzPTEpICAjIG5lZ2F0aXZlcyBhcmUgTkFOcwogICAgZGYuY29sdW1ucyA9ICgidHJ1ZXMiLCAiTkFOcyIpCiAgICByZXR1cm4gZGYKCgpva19mbGFncyA9IGNiLmNhbGNfaW5pdGlhbF9nZWFyX2ZsYWdzKAogICAgZ192bWF4PWdfdm1heCwgbjk1X2hpZ2g9bjk1X2hpZ2gsIG5fbWF4X2N5Y2xlPW5fbWF4X2N5Y2xlLCBubWlucz1ubWlucwopCmZsYWdfYWdncmVnYXRlcyhva19mbGFncykKCiMgJSUKb2tfZmxhZ3MgPSBjYi5jYWxjX2luaXRpYWxfZ2Vhcl9mbGFncygKICAgIGdfdm1heD1nX3ZtYXgsIG45NV9oaWdoPW45NV9oaWdoLCBuX21heF9jeWNsZT1uX21heF9jeWNsZSwgbm1pbnM9bm1pbnMKKQpmbGFnX2FnZ3JlZ2F0ZXMob2tfZmxhZ3MpCgojICUlCm9rX24gPSBjYi5jb21iaW5lX29rX25fZ2Vhcl9mbGFncyhva19mbGFncykKb2tfZmxhZ3MxID0gcGQuY29uY2F0KChva19mbGFncywgb2tfbiksIGF4aXM9MSkKb2tfZ2VhcnMgPSBjYi5kZXJyaXZlX29rX2dlYXJzKG9rX2ZsYWdzMSkKb2tfZ2VhcnMuc3VtKCkKCiMgJSUKb2tfbiA9IGNiLmNvbWJpbmVfb2tfbl9nZWFyX2ZsYWdzKG9rX2ZsYWdzKQpva19mbGFnczEgPSBwZC5jb25jYXQoKG9rX2ZsYWdzLCBva19uKSwgYXhpcz0xKQpva19nZWFycyA9IGNiLmRlcnJpdmVfb2tfZ2VhcnMob2tfZmxhZ3MxKQpva19nZWFycy5zdW0oKQoKIyAlJQpnX21pbiwgZ19tYXgwLCBfID0gY2IubWFrZV9nbWF4MChva19nZWFycykKY3ljbGUgPSBwZC5jb25jYXQoKGNiLmN5Y2xlLCBva19mbGFnczEsIG9rX2dlYXJzLCBnX21pbiwgZ19tYXgwKSwgYXhpcz0xKQoKIyAlJQpnX21heDAucGxvdCgpCmFjY19jeWNsZS5nX21heC5wbG90KCkKZ19tYXgwX2RpZmYgPSAoZ19tYXgwIC0gYWNjX2N5Y2xlLmdfbWF4KS5hYnMoKQpnX21heDBfZGlmZltnX21heDBfZGlmZiA9PSAwXSA9IG5wLk5BTgpkaXNwbGF5KAogICAgcGQuY29uY2F0KAogICAgICAgIChnX21heDAuZGVzY3JpYmUoKSwgYWNjX2N5Y2xlLmdfbWF4LmRlc2NyaWJlKCksIGdfbWF4MF9kaWZmLmRlc2NyaWJlKCkpLCBheGlzPTEKICAgICkKKQoKIyAlJQojIyBNb3N0IGRpZmZlcmVuY2VzIGFyZSBpbiBHMS0tPkcyIHNoaWZ0cwojICh3aGljaCBpcyBub3QgaW1wbGVtZW50ZWQgaW4gYGdfdm1heDBgKS4KZGlzcGxheShjeWNsZS5sb2NbfmdfbWF4MF9kaWZmLmlzbnVsbCgpICYgKGdfbWF4MF9kaWZmICE9IDApXSkKCiMgJSUKb2tfcCA9IGN5Y2xlci5jYWxjX29rX3BfcnVsZShwZC5jb25jYXQoKGN5Y2xlLCBwX3JlbWFpbiksIGF4aXM9MSksIGNiLmdpZHgpCm9rX3AKCiMgJSUKY2IuYWRkX2NvbHVtbnMocF9yZW1haW4sIG9rX2ZsYWdzMSwgb2tfZ2VhcnMsIGdfbWluLCBnX21heDApCgojICUlCmN5Y2xlci5maWxsX2luc3VmZmljaWVudF9wb3dlcihjYi5jeWNsZSkKCiMgJSUKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgTU9WRUQgdG8gY29tcGFyZS1ub3RlYm9vayEgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZnJvbSBpcHl3aWRnZXRzIGltcG9ydCBpbnRlcmFjdCwgaW50ZXJhY3RpdmUsIGZpeGVkLCBpbnRlcmFjdF9tYW51YWwsIHdpZGdldHMKCm1heF96b29tID0gNDguMAoKIyMgU2NhbGUgZWFjaCBmbGFnIGludG8gYSBkaWZmZXJlbnQgdmFsdWUsIHRvIHBsb3Qgc2VwYXJhdGVseSwgYW5kCiMgIHRvIHBsb3QgaW4gdGhlIHNhbWUgYXhpcyBhcyBWCiMgIChiYyB3aGVuIHBsb3R0aW5nIGZsYWdzIGluIGBzZWNvbmRhcnlfeWAsIGdyaWQgaXMgbm90IHdvcmtpbmcpCiMKbXVsID0gMgpmbGFnX2NvdW50ID0gb2tfZmxhZ3Muc2hhcGVbMV0KZ2Vhcl9jb3VudCA9IG9rX2dlYXJzLnNoYXBlWzFdCm9rX2ZsYWdzMiA9IG9rX2ZsYWdzLmNvcHkoKQpva19mbGFnczJbb2tfZmxhZ3MyIDwgMF0gPSBucC5OQU4gICMgUmVzdG9yZSBOQU5GTEFHIC0tPiBOQU4Kb2tfZmxhZ3MyID0gb2tfZmxhZ3MyICogKG5wLmFyYW5nZShmbGFnX2NvdW50KSArIDEpICogbXVsCm9rX2dlYXIyID0gb2tfZ2VhcnMgKiAobnAuYXJhbmdlKGdlYXJfY291bnQpICsgZmxhZ19jb3VudCArIDEpICogbXVsCgoKQGludGVyYWN0KAogICAgZ2Vhcj13aW8uR2Vhck11bHRpSW5kZXhlci5mcm9tX2RmKG9rX2ZsYWdzKVs6XSwKICAgIHpvb209KDEuMCwgbWF4X3pvb20sIDEuMCksCiAgICBwYW49KDAsIG1heF96b29tLCAxKSwKICAgIGRpc3BsYXlfaWQ9InBsb3QiLAopCmRlZiBwbG90X2dlYXIoZ2Vhcj0iZzIiLCB6b29tPTQ4LCBwYW49MTMuOCk6CiAgICBheCA9IE5vbmUKCiAgICBjbGVuID0gbGVuKGNiLmN5Y2xlKQogICAgdmlld2xlbiA9IGludChjbGVuIC8gem9vbSkKICAgIG9mZnNldCA9IGludChwYW4gKiAoY2xlbiAtIHZpZXdsZW4pIC8gbWF4X3pvb20pCiAgICBzY2FsZSA9IGlkeFtvZmZzZXQgOiBvZmZzZXQgKyB2aWV3bGVuXQoKICAgIGN5Y2xlID0gY2IuY3ljbGUubG9jW3NjYWxlXQogICAgb2tfZmxhZ3MgPSBva19mbGFnczIubG9jWzosIGlkeFs6LCBnZWFyXV0uaWxvY1tzY2FsZV0KICAgIG9rX2dlYXIgPSBva19nZWFyMi5sb2Nbc2NhbGVdCgogICAgYXggPSBjeWNsZVsiVl9jeWNsZSJdLnBsb3QubGluZShheD1heCwgbGluZXdpZHRoPTQsIGZpZ3NpemU9KDIwLCA4KSkKICAgIGF4ID0gb2tfZmxhZ3MucGxvdC5saW5lKGF4PWF4KQogICAgYXggPSBva19nZWFyLnBsb3QubGluZShheD1heCwgbGluZXdpZHRoPTMpCgogICAgYXguZ3JpZChUcnVlLCBheGlzPSJib3RoIiwgd2hpY2g9ImJvdGgiKQoKICAgICMjIElGIG9ubHkgaSBjb3VsZCBmaW5kIHF1aWNrbHkgaG93IHRvIGRpc3BsYXkgdGhlIGRmIEJFTE9XIHRoZSBwbG90Li4uCiAgICAjIGRpc3BsYXkoY3ljbGUsIGRpc3BsYXlfaWQ9J2dyaWQnKQoKCiMgJSUgW21hcmtkb3duXQojICMjIE11c2V1bQoKIyAlJQpmcm9tIHdsdHAuY3ljbGVzIGltcG9ydCBjeWNsZV9jaGVja3N1bXMKCmN5Y2xlX2NoZWNrc3VtcygpCgojICUlCmZyb20gd2x0cC5jeWNsZXMgaW1wb3J0IGN5Y2xlX3BoYXNlcwoKY3ljbGVfcGhhc2VzKCkKCiMgJSUKIyMgSXMgY2x1dGNoLXVuZGVmaW5lZCBvbmx5IHVzZWQgZm9yIGdlYXIgMT8KYWNjX2N5Y2xlLmxvY1sKICAgIGN5Y2xlci50aW1lbGVucyhhY2NfY3ljbGUuY2x1dGNoID09ICJ1bmRlZmluZWQiKSwgWyJ2IiwgImEiLCAiZ2VhciIsICJjbHV0Y2giXQpdCgojICUlCiMjIEFjY0RCOiBub3RlIHRoYXQgYWNjL2RlYy9jcnVpc2UgYXJlICJncmFkaWVudHMiLCB3aXRoIHRocmVzaG9sZCAwLjI3OC4KYWNjX2N5Y2xlLmxvY1s6MTAwLCBbImEyIiwgImFjYyIsICJjcnVpc2UiLCAiZGVjIl1dLmFzdHlwZShpbnQpLnBsb3QoKQphY2NfY3ljbGUubG9jWzoxMDAsICJ2Il0ucGxvdChzZWNvbmRhcnlfeT1UcnVlKQoKIyAlJQpjeWNsZSA9IHBkLkRhdGFGcmFtZSgKICAgIHsKICAgICAgICAidiI6IFswLCAwLCAzLCAzLCA1LCA4LCA4LCA4LCA2LCA0LCA1LCA2LCA2XSwKICAgICAgICAiYWNjZWwiOiBbMCwgMCwgMCwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMF0sCiAgICAgICAgImNydWlzZSI6IFswLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwXSwKICAgICAgICAiZGVjZWwiOiBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMCwgMCwgMF0sCiAgICAgICAgInVwIjogWzAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDFdLAogICAgICAgICJpbml0IjogWzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLAogICAgfQopCnBtID0gY3ljbGVyLlBoYXNlTWFya2VyKCkKCgpkZWYgcGhhc2UoY29uZCk6CiAgICByZXR1cm4gcG0uX2lkZW50aWZ5X2NvbnNlY3V0aXZlX3RydXRocygoY3ljbGUudiA+IDEpICYgY29uZCwgVHJ1ZSkuYXN0eXBlKGludCkKCgpBID0gKC1jeWNsZS52LmFzdHlwZShpbnQpKS5kaWZmKC0xKSAgIyBHVFIncyBhY2NlbGVyYXRpb24gZGVmaW5pdGlvbgphc3NlcnQgKHBoYXNlKEEgPiAwKSA9PSBjeWNsZS5hY2NlbCkuYWxsKCkKYXNzZXJ0IChwaGFzZShBID09IDApID09IGN5Y2xlLmNydWlzZSkuYWxsKCkKYXNzZXJ0IChwaGFzZShBIDwgMCkgPT0gY3ljbGUuZGVjZWwpLmFsbCgpCjx8ZmltX3N1ZmZpeHw+Cm1kbCA9IHZlaGRiLm1kbF9mcm9tX2FjY2RiKHByb3AsIHdvdCwgbjJ2cykKZGF0YW1vZGVsLnZhbGlkYXRlX21vZGVsKG1kbCwgYWRkaXRpb25hbF9wcm9wZXJ0aWVzPSJ0cnVlIikKd290ID0gbWRsWyJ3b3QiXQoKPHxmaW1fZW5kfD4="]
["6bff37b050dce139cfdf3afbc16e2b8020093b95-1","6bff37b050dce139cfdf3afbc16e2b8020093b95","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KQ09ORiA9IE5vbmUKPHxmaW1fZW5kfD4="]
["a9c2a0745ae42eba251b4c4ed1ead098556c17b8-1","a9c2a0745ae42eba251b4c4ed1ead098556c17b8","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgoKIyBDb3B5cmlnaHQgMjAyMCBUaGUgRGVmb2xkIEZvdW5kYXRpb24KIyBMaWNlbnNlZCB1bmRlciB0aGUgRGVmb2xkIExpY2Vuc2UgdmVyc2lvbiAxLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UKIyB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIwojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSwgdG9nZXRoZXIgd2l0aCBGQVFzIGF0CiMgaHR0cHM6Ly93d3cuZGVmb2xkLmNvbS9saWNlbnNlCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IKIyBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQojIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgo8fGZpbV9lbmR8Pg=="]
["41815a38f18fc34605ce23fb181960ae418bf3d0-3","41815a38f18fc34605ce23fb181960ae418bf3d0","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiIkNyeXB0byByZWxhdGVkIHV0aWxpdGllcy4iIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscwoKaW1wb3J0IGJhc2U2NAoKZnJvbSBjcnlwdG9ncmFwaHkuZmVybmV0IGltcG9ydCBGZXJuZXQKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLnV0aWxzLmNyeXB0byBpbXBvcnQgZ2V0X3JhbmRvbV9zdHJpbmcKZnJvbSBkamFuZ28udXRpbHMuZW5jb2RpbmcgaW1wb3J0IHNtYXJ0X2J5dGVzLCBzbWFydF90ZXh0CgoKZGVmIHJhbmRvbV9rZXkobGVuZ3RoPTE2KToKICAgICIiIkdlbmVyYXRlIGEgbmV3IGtleSB1c2VkIHRvIGVuY3J5cHQgdXNlciBwYXNzd29yZHMgaW4gc2Vzc2lvbiBzdG9yYWdlLiIiIgogICAgY2hhcnMgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IUAjJCVeJiooLV89KykiCiAgICByZXR1cm4gZ2V0X3JhbmRvbV9zdHJpbmcobGVuZ3RoLCBjaGFycykKCgpkZWYgX2dldF9mZXJuZXQoKToKICAgICIiIkNyZWF0ZSBhIEZlcm5ldCBpbnN0YW5jZS4iIiIKICAgIHNlY3JldF9rZXkgPSBiYXNlNjQudXJsc2FmZV9iNjRlbmNvZGUoc21hcnRfYnl0ZXMoc2V0dGluZ3MuU0VDUkVUX0tFWVs6MzJdKSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcmV0dXJuIEZlcm5ldChzZWNyZXRfa2V5KQoKCjx8ZmltX2VuZHw+"]
["d43a21d777ae7eee3f6ecf564915a1497517b3c6-3","d43a21d777ae7eee3f6ecf564915a1497517b3c6","PHxmaW1fcHJlZml4fD4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIEFVVE9NQVRJQ0FMTFkgR0VORVJBVEVEIEZJTEUgVE8gQkUgVVNFRCBCWSBXX0hPVEJPWAojCiMgTkFNRTogQmFrZSBDb3JuZXJQaW4KIyBDT0xPUjogIzRiNzIyNAojIFRFWFRDT0xPUjogI2ZmZmZmZgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgppbXBvcnQgbnVrZXNjcmlwdHMKCm5zID0gbnVrZS5zZWxlY3RlZE5vZGVzKCkKCm51a2VzY3JpcHRzLmNsZWFyX3NlbGVjdGlvbl9yZWN1cnNpdmUoKQpncmFkTWFnaWNzID0gW10KZm9yIG4gaW4gbnM6CiAgICBpZiBuLkNsYXNzKCkgPT0gIkNvcm5lclBpbjJEIjoKICAgICAgICBuLmtub2IoJ3NlbGVjdGVkJykuc2V0VmFsdWUoVHJ1ZSkKICAgIGVsc2U6CiAgICAgICAgZ3JhZE1hZ2ljcy5hcHBlbmQobikKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZm9yIG4gaW4gZ3JhZE1hZ2ljczoKICAgIG4ua25vYignYmFrZUNvcm5lclBpbicpLmV4ZWN1dGUoKQo8fGZpbV9lbmR8Pg=="]
["d84538b8e07326547fb152c2e731098843ef7b54-2","d84538b8e07326547fb152c2e731098843ef7b54","PHxmaW1fcHJlZml4fD4KIiIiVGVzdHMgZm9yIG1vdmluZ19hdmVyYWdlX29wdGltaXplci4iIiIKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgppbXBvcnQgb3MucGF0aAppbXBvcnQgdGVtcGZpbGUKaW1wb3J0IHNpeAppbXBvcnQgdGVuc29yZmxvdyBhcyB0ZgoKZnJvbSB0ZWZsYS5jb3JlLm9wdGltaXplciBpbXBvcnQgTW92aW5nQXZlcmFnZU9wdGltaXplcgoKCmNsYXNzIE1vdmluZ0F2ZXJhZ2VPcHRpbWl6ZXJUZXN0KHRmLnRlc3QuVGVzdENhc2UpOgoKICBkZWYgdGVzdFJ1bihzZWxmKToKICAgIGZvciBzZXF1ZW50aWFsX3VwZGF0ZSBpbiBbVHJ1ZSwgRmFsc2VdOgogICAgICBmb3IgZHR5cGUgaW4gW3RmLmhhbGYsIHRmLmZsb2F0MzIsIHRmLmZsb2F0NjRdOgogICAgICAgIHdpdGggc2VsZi50ZXN0X3Nlc3Npb24oKSBhcyBzZXNzOgogICAgICAgICAgb3JpZ192YWwwID0gWzEuMCwgMi4wXQogICAgICAgICAgb3JpZ192YWwxID0gWzMuMCwgNC4wXQogICAgICAgICAgdmFyMCA9IHRmLlZhcmlhYmxlKG9yaWdfdmFsMCwgbmFtZT0ndmFyMCcsIGR0eXBlPWR0eXBlKQogICAgICAgICAgdmFyMSA9IHRmLlZhcmlhYmxlKG9yaWdfdmFsMSwgbmFtZT0ndmFyMScsIGR0eXBlPWR0eXBlKQogICAgICAgICAgZ3JhZHMwID0gdGYuY29uc3RhbnQoWzAuMSwgMC4xXSwgZHR5cGU9ZHR5cGUpCiAgICAgICAgICBncmFkczEgPSB0Zi5jb25zdGFudChbMC4wMSwgMC4wMV0sIGR0eXBlPWR0eXBlKQoKICAgICAgICAgIG9wdCA9IE1vdmluZ0F2ZXJhZ2VPcHRpbWl6ZXIoCiAgICAgICAgICAgICAgdGYudHJhaW4uR3JhZGllbnREZXNjZW50T3B0aW1pemVyKGxlYXJuaW5nX3JhdGU9Mi4wKSwKICAgICAgICAgICAgICBhdmVyYWdlX2RlY2F5PTAuNSwKICAgICAgICAgICAgICBzZXF1ZW50aWFsX3VwZGF0ZT1zZXF1ZW50aWFsX3VwZGF0ZSkKICAgICAgICAgIHNhdmVfZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9b3MucGF0aC5qb2luKHNlbGYuZ2V0X3RlbXBfZGlyKCksICdydW5fMScpKQogICAgICAgICAgc2F2ZV9wYXRoID0gb3MucGF0aC5qb2luKHNhdmVfZGlyLCAnbW9kZWwnKQogICAgICAgICAgdXBkYXRlID0gb3B0LmFwcGx5X2dyYWRpZW50cyhsaXN0KHNpeC5tb3Zlcy56aXAoW2dyYWRzMCwgZ3JhZHMxXSwgW3ZhcjAsIHZhcjFdKSkpCiAgICAgICAgICB0cmFpbl9zYXZlciA9IG9wdC5zd2FwcGluZ19zYXZlcigpCiAgICAgICAgICBpbmZlcmVuY2Vfc2F2ZXIgPSB0Zi50cmFpbi5TYXZlcigpCiAgICAgICAgICB0Zi5nbG9iYWxfdmFyaWFibGVzX2luaXRpYWxpemVyKCkucnVuKCkKICAgICAgICAgICMgU3RlcCAxLgogICAgICAgICAgdXBkYXRlLnJ1bigpCiAgICAgICAgICB2YWwwID0gdmFyMC5ldmFsKCkKICAgICAgICAgIHZhbDEgPSB2YXIxLmV2YWwoKQogICAgICAgICAgc2VsZi5hc3NlcnRBbGxDbG9zZUFjY29yZGluZ1RvVHlwZShbMC44LCAxLjhdLCB2YXIwLmV2YWwoKSkKICAgICAgICAgIHNlbGYuYXNzZXJ0QWxsQ2xvc2VBY2NvcmRpbmdUb1R5cGUoWzIuOTgsIDMuOThdLCB2YXIxLmV2YWwoKSkKICAgICAgICAgICMgVGVzdCB0aGF0IHRoZSBzd2FwcGluZyBzYXZlciBzYXZlL3Jlc3RvcmUgb3BlcmF0aW9uIGlzIGlkZW50aXR5LgogICAgICAgICAgdHJhaW5fc2F2ZXIuc2F2ZShzZXNzLCBzYXZlX3BhdGgpCiAgICAgICAgICB0cmFpbl9zYXZlci5yZXN0b3JlKHNlc3MsIHNhdmVfcGF0aCkKICAgICAgICAgIHZhbDAgPSB2YXIwLmV2YWwoKQogICAgICAgICAgdmFsMSA9IHZhcjEuZXZhbCgpCiAgICAgICAgICBzZWxmLmFzc2VydEFsbENsb3NlQWNjb3JkaW5nVG9UeXBlKFswLjgsIDEuOF0sIHZhcjAuZXZhbCgpKQogICAgICAgICAgc2VsZi5hc3NlcnRBbGxDbG9zZUFjY29yZGluZ1RvVHlwZShbMi45OCwgMy45OF0sIHZhcjEuZXZhbCgpKQogICAgICAgICAgIyBJZiB1cGRhdGVzIGFyZSBwYXJhbGxlbCwgdGhpcyBpcyBub3QgYWx3YXlzIHRydWUgYWZ0ZXIgdGhlIDFzdCBzdGVwLgogICAgICAgICAgaWYgc2VxdWVudGlhbF91cGRhdGU6CiAgICAgICAgICAgICMgVGVzdCB0aGF0IHRoZSBub3JtYWwgc2F2ZXIgd2lsbCBoYXZlIHRoZSBhdmVyYWdlZCB2YXJpYWJsZXMuCiAgICAgICAgICAgICMgV2UgdGVzdCB0aGF0IHRoZSBhdmVyYWdlIHZhbHVlcyBhcmUgYmV0d2VlbiB0aGUgb3JpZ2luYWwgdmFsdWUKICAgICAgICAgICAgIyBhbmQgdGhlIG1vc3QgcmVjZW50IHZhcmlhYmxlIHZhbHVlcyAoc2luY2UgdGhleSBhcmUgYW4gYXZlcmFnZQogICAgICAgICAgICAjIG9mIHRoZSB0d28pLgogICAgICAgICAgICB2YWwwID0gdmFyMC5ldmFsKCkKICAgICAgICAgICAgdmFsMSA9IHZhcjEuZXZhbCgpCiAgICAgICAgICAgIHRyYWluX3NhdmVyLnNhdmUoc2Vzcywgc2F2ZV9wYXRoKQogICAgICAgICAgICBpbmZlcmVuY2Vfc2F2ZXIucmVzdG9yZShzZXNzLCBzYXZlX3BhdGgpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgYXZnX3ZhbDAgPSB2YXIwLmV2YWwoKQogICAgICAgICAgICBhdmdfdmFsMSA9IHZhcjEuZXZhbCgpCiAgICAgICAgICAgIGZvciBpIGluIHNpeC5tb3Zlcy5yYW5nZShsZW4odmFsMCkpOgogICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyh2YWwwW2ldLCBhdmdfdmFsMFtpXSkKPHxmaW1fZW5kfD4="]
["6bff250692da3fd978c85aa1e1e1532afc586e58-4","6bff250692da3fd978c85aa1e1e1532afc586e58","PHxmaW1fcHJlZml4fD4KJycnCkNyZWF0aW9uIG9mIHNldmVyYWwgYXV4aWxhcnkgcGxvdHMgdGhhdCBhcmVuJ3QgY3JlYXRlZCBkdXJpbmcgdGhlIG5vcm1hbCBleGVjdXRpb24Kb2YgdGhlIHBpcGVsaW5lIGZvciB0aGUgc2FrZSBvZiBleHBlZGllbmN5LiBIb3dldmVyLCB3ZSB0aGluayB0aGVzZSBwbG90cyBhcmUgdXNlZnVsLgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CicnJwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tSU1QT1JUUy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwppbXBvcnQgb3MKaW1wb3J0IG51bXB5IGFzIG5wCjx8ZmltX2VuZHw+"]
["8209a2f02bc4013cb0cced351bcb676a26c42a37-3","8209a2f02bc4013cb0cced351bcb676a26c42a37","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBsYXlzb3VuZAppbXBvcnQgc3BlZWNoX3JlY29nbml0aW9uIGFzIHNyCmltcG9ydCBweWF1ZGlvCmltcG9ydCBweXR0c3gzCmltcG9ydCBvcwoKZW5naW5lID0gcHl0dHN4My5pbml0KCkKdm9pY2VzID0gZW5naW5lLmdldFByb3BlcnR5KCd2b2ljZXMnKQplbmdpbmUuc2V0UHJvcGVydHkoJ3ZvaWNlJywgdm9pY2VzWy0yXS5pZCkKCgojIEZ1bsOnw6NvIHBhcmEgb3V2aXIgZSByZWNvbmhlY2VyIGEgZmFsYQpkZWYgb3V2aXJfbWljcm9mb25lKCk6CiAgICAjIEhhYmlsaXRhIG8gbWljcm9mb25lIGRvIHVzdcOhcmlvCiAgICBtaWNyb2ZvbmUgPSBzci5SZWNvZ25pemVyKCkKCiAgICAjIHVzYW5kbyBvIG1pY3JvZm9uZQogICAgd2l0aCBzci5NaWNyb3Bob25lKCkgYXMgc291cmNlOgogICAgICAgICMgQ2hhbWEgdW0gYWxnb3JpdG1vIGRlIHJlZHVjYW8gZGUgcnVpZG9zIG5vIHNvbQogICAgICAgIG1pY3JvZm9uZS5hZGp1c3RfZm9yX2FtYmllbnRfbm9pc2Uoc291cmNlKQoKICAgICAgICAjIEZyYXNlIHBhcmEgbyB1c3VhcmlvIGRpemVyIGFsZ28KICAgICAgICBwcmludCgiRGlnYSBhbGd1bWEgY29pc2E6ICIpCgogICAgICAgICMgQXJtYXplbmEgbyBxdWUgZm9pIGRpdG8gbnVtYSB2YXJpYXZlbAogICAgICAgIGF1ZGlvID0gbWljcm9mb25lLmxpc3Rlbihzb3VyY2UpCgogICAgdHJ5OgoKICAgICAgICAjIFBhc3NhIGEgdmFyacOhdmVsIHBhcmEgbyBhbGdvcml0bW8gcmVjb25oZWNlZG9yIGRlIHBhZHJvZXMKICAgICAgICBmcmFzZSA9IG1pY3JvZm9uZS5yZWNvZ25pemVfZ29vZ2xlKGF1ZGlvLCBsYW5ndWFnZT0ncHQtQlInKQoKICAgICAgICBpZiAnYm9hIG5vaXRlJyBpbiBmcmFzZToKICAgICAgICAgICAgZW5naW5lLnNheSgnQm9hIG5vaXRlJykKICAgICAgICAgICAgZW5naW5lLnJ1bkFuZFdhaXQoKQoKICAgICAgICBlbGlmICdib20gZGlhJyBpbiBmcmFzZToKICAgICAgICAgICAgZW5naW5lLnNheSgnQm9tIGRpYScpCiAgICAgICAgICAgIGVuZ2luZS5ydW5BbmRXYWl0KCkKCiAgICAgICAgZWxpZiAnYm9hIHRhcmRlJyBpbiBmcmFzZToKICAgICAgICAgICAgZW5naW5lLnNheSgnYm9hIHRhcmRlJykKICAgICAgICAgICAgZW5naW5lLnJ1bkFuZFdhaXQoKQogICAgICAgIGVsaWYgJ2pvZ2FyJyBpbiBmcmFzZToKCiAgICAgICAgICAgIGl0ZW5zID0gKCdwZWRyYScsICdwYXBlbCcsICd0ZXNvdXJhJykKICAgICAgICAgICAgY29tcHV0YWRvciA9IHJhbmRpbnQoMCwgMikKCiAgICAgICAgICAgIHByaW50KCdWYW1vcyBqb2dhciBKb2tlbnBvISEhJykKICAgICAgICAgICAgbWFxdWluYS5zYXkoJ1ZhbW9zIGpvZ2FyIEpPS8OKTlBPJykKICAgICAgICAgICAgc2xlZXAoMikKICAgICAgICAgICAgcHJpbnQoJy09LScgKiAxNSkKICAgICAgICAgICAgcHJpbnQoJycnRmHDp2Egc3VhIGpvZ2FkYSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMF0gUGVkcmEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxXSBQYXBlbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWzJdIHRlc291cmEnJycpCiAgICAgICAgICAgIG1hcXVpbmEuc2F5KCcnJ0Zhw6dhIHN1YSBqb2dhZGEhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWdhIDAgcGFyYSBwZWRyYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlnYSAxIHBhcmEgcGFwZWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpZ2EgMiBwYXJhIHRlc291cmEnJycpCiAgICAgICAgICAgIHByaW50KCctPS0nICogMTUpCiAgICAgICAgICAgIHNsZWVwKDIpCiAgICAgICAgICAgIGpvZ2Fkb3IgPSBpbnQoaW5wdXQoJ1F1YWwgYSBzdWEgam9nYWRhPyAnKSkKICAgICAgICAgICAgbWFxdWluYS5zYXkoJ1F1YWwgc3VhIGpvZ2FkYT8nKQoKICAgICAgICAgICAgZGVmIG91dmlyX21pYygpOgogICAgICAgICAgICAgICAgbWljcm9mb25lID0gc3IuUmVjb2duaXplcigpCgogICAgICAgICAgICAgICAgIyB1c2FuZG8gbyBtaWNyb2ZvbmUKICAgICAgICAgICAgICAgIHdpdGggc3IuTWljcm9waG9uZSgpIGFzIHNvdXJjZToKICAgICAgICAgICAgICAgICAgICAjIENoYW1hIHVtIGFsZ29yaXRtbyBkZSByZWR1Y2FvIGRlIHJ1aWRvcyBubyBzb20KICAgICAgICAgICAgICAgICAgICBtaWNyb2ZvbmUuYWRqdXN0X2Zvcl9hbWJpZW50X25vaXNlKHNvdXJjZSkKCiAgICAgICAgICAgICAgICAgICAgIyBGcmFzZSBwYXJhIG8gdXN1YXJpbyBkaXplciBhbGdvCiAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkRpZ2EgYWxndW1hIGNvaXNhOiAiKQoKICAgICAgICAgICAgICAgICAgICAjIEFybWF6ZW5hIG8gcXVlIGZvaSBkaXRvIG51bWEgdmFyaWF2ZWwKICAgICAgICAgICAgICAgICAgICBhdWRpbyA9IG1pY3JvZm9uZS5saXN0ZW4oc291cmNlKQoKICAgICAgICAgICAgICAgIHRyeToKCiAgICAgICAgICAgICAgICAgICAgIyBQYXNzYSBhIHZhcmnDoXZlbCBwYXJhIG8gYWxnb3JpdG1vIHJlY29uaGVjZWRvciBkZSBwYWRyb2VzCiAgICAgICAgICAgICAgICAgICAgZnJhc2UgPSBtaWNyb2ZvbmUucmVjb2duaXplX2dvb2dsZShhdWRpbywgbGFuZ3VhZ2U9J3B0LUJSJykKICAgICAgICAgICAgICAgICAgICBmcmFzZSA9IHN0cihmcmFzZSkKICAgICAgICAgICAgICAgICAgICBpZiAnMScgYW5kICcyJyBhbmQgJzMnIGluIGZyYXNlOgoKICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoMikKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ0pPJykKICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoMS4zKQogICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnS0VOJykKICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoMS4zKQogICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnUE8nKQogICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCgxLjMpCiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCctPS0nICogMTUpCiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGYnQ29tcHV0YWRvciBqb2dvdToge2l0ZW5zW2NvbXB1dGFkb3JdLnVwcGVyKCl9JykKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoZidKb2dhZG9yIGpvZ291OiB7aXRlbnNbZnJhc2VdLnVwcGVyKCl9JykKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJy09LScgKiAxNSkKICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoMSkKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ1BST0NFU1NBTkRPLi4uJykKICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoMykKICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29tcHV0YWRvciA9PSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgam9nYWRvciA9PSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdFTVBBVEUnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBqb2dhZG9yID09IDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ0pPR0FET1IgR0FOSE9VJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgam9nYWRvciA9PSAyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdDT01QVVRBRE9SIEdBTkhPVScpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdPUENBTyBFU0NPTEhJREEgSU5WQUxJREEnKQogICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGNvbXB1dGFkb3IgPT0gMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGpvZ2Fkb3IgPT0gMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnQ09NUFVUQURPUiBHQU5IT1UnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBqb2dhZG9yID09IDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ0VNUEFURScpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGpvZ2Fkb3IgPT0gMjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnSk9HQURPUiBHQU5IT1UnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnT1BDQU8gRVNDT0xISURBIElOVkFMSURBJykKICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBjb21wdXRhZG9yID09IDI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBqb2dhZG9yID09IDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ0pPR0FET1IgR0FOSE9VJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgam9nYWRvciA9PSAxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdDT01QVVRBRE9SIEdBTkhPVScpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGpvZ2Fkb3IgPT0gMjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnRU1QQVRFJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ09QQ0FPIEVTQ09MSElEQSBJTlZBTElEQScpCiAgICAjIFNlIG5hbyByZWNvbmhlY2V1IG8gcGFkcmFvIGRlIGZhbGEsIGV4aWJlIGEgbWVuc2FnZW0KICAgIGV4Y2VwdCBzci5Vbmtub3duVmFsdWVFcnJvcjoKICAgICAgICBwcmludCgiTsOjbyBlbnRlbmRpIikKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHJldHVybgoKPHxmaW1fZW5kfD4="]
["da7cfc10f74b0cc1a57d909c08b6ffedcf50b409-4","da7cfc10f74b0cc1a57d909c08b6ffedcf50b409","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIGNvZGluZzogdXRmLTgKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgoKCmRlZiBpc192YWxpZChzKToKPHxmaW1faG9sZXw+CiAgICAgICAgZnJlcVtjXSArPSAxCiAgICAgICAgaW52W2ZyZXFbY10tMV0gLT0gMQogICAgICAgIGlmIGludltmcmVxW2NdLTFdIDw9IDA6CiAgICAgICAgICAgIGRlbCBpbnZbZnJlcVtjXS0xXQogICAgICAgIGludltmcmVxW2NdXSArPSAxCgogICAgaWYgbGVuKGludikgPT0gMToKICAgICAgICByZXR1cm4gJ1lFUycKICAgIGVsaWYgbGVuKGludikgPiAyOgogICAgICAgIHJldHVybiAnTk8nCgogICAgeCA9IHNvcnRlZChpbnYubW9zdF9jb21tb24oMikpCiAgICBpZiB4WzBdID09ICgxLDEpOgogICAgICAgIHJldHVybiAnWUVTJwogICAgZWxpZiBhYnMoeFswXVswXS14WzFdWzBdKSA+IDE6CiAgICAgICAgcmV0dXJuICdOTycKICAgIGVsaWYgeFsxXVswXSA+IHhbMF1bMF0gYW5kIHhbMV1bMV0gPT0gMToKICAgICAgICByZXR1cm4gJ1lFUycKICAgIGVsc2U6CiAgICAgICAgcmV0dXJuICdOTycKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgcHJpbnQoaXNfdmFsaWQoaW5wdXQoKSkpCgo8fGZpbV9zdWZmaXh8PgogICAgZnJlcSA9IENvdW50ZXIoKQogICAgaW52ID0gQ291bnRlcigpCgogICAgZm9yIGMgaW4gczoKPHxmaW1fZW5kfD4="]
["c147a90f68c449200adfec057c8e5c15907750fd-2","c147a90f68c449200adfec057c8e5c15907750fd","PHxmaW1fcHJlZml4fD4KZGVmIGJ1YmJsZV9zb3J0KEEpOgogICAgbiA9IGxlbihBKQogICAgZm9yIGkgaW4gcmFuZ2Uobi0xLCAwLCAtMSk6CiAgICAgICAgZm9yIGogaW4gcmFuZ2UoaSk6Cjx8ZmltX2hvbGV8PgogICAgcmV0dXJuIEEKCnUgPSBbMSwyLDMsNCw1LDZdCnYgPSBbNiw1LDQsMywyLDFdCgpwcmludChidWJibGVfc29ydCh1KSkKcHJpbnQoYnViYmxlX3NvcnQodikpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGlmIEFbal0gPiBBW2orMV06CiAgICAgICAgICAgICAgICBBW2pdLCBBW2orMV0gPSBBW2orMV0sIEFbal0KPHxmaW1fZW5kfD4="]
["cf1815c994341cedbe5c96833c7d798417b2b6f3-1","cf1815c994341cedbe5c96833c7d798417b2b6f3","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBjb2Rpbmc6IHV0Zi04CiIiIk5EQXJyYXkgbmFtZXNwYWNlIHVzZWQgdG8gcmVnaXN0ZXIgY29udHJpYiBmdW5jdGlvbnMiIiIKPHxmaW1fZW5kfD4="]
["e7477eb5859463bcb3c5f0290e03b7f13af8d2b7-3","e7477eb5859463bcb3c5f0290e03b7f13af8d2b7","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKIyBCYXR0ZXJpZXMKaW1wb3J0IGpzb24KaW1wb3J0IHN5cwoKIyBMb2NhbAppbXBvcnQgbW9kZWwKCgpAbW9kZWwucG55LmRiX3Nlc3Npb24KZGVmIGFkZF91c2VyX3RvX3RlYW0odGVhbV9pZCwgdXNlcl9pZCk6CiAgICBUID0gbW9kZWwuVGVhbS5nZXQoaWQ9dGVhbV9pZCkKICAgIGlmIFQgaXMgTm9uZToKICAgICAgICBUID0gbW9kZWwuVGVhbShpZD10ZWFtX2lkKQogICAgVSA9IG1vZGVsLlVzZXIuZ2V0KGlkPXVzZXJfaWQsIHRlYW09VCkKICAgIGlmIFUgaXMgTm9uZToKICAgICAgICBVID0gbW9kZWwuVXNlcihpZD11c2VyX2lkLCB0ZWFtPVQpCiAgICBULnVzZXJzLmFkZChVKQoKCmRlZiBpbnRlcmZhY2UoaW5wYXRoKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgd2l0aCBvcGVuKGlucGF0aCkgYXMgZmQ6CiAgICAgICAgdGVhbXMgPSBqc29uLmxvYWQoZmQpCgogICAgZm9yIHQgaW4gdGVhbXM6Cjx8ZmltX2VuZHw+"]
["d4839e4fcb7cb6ee985977bbfe9ec8195054f023-1","d4839e4fcb7cb6ee985977bbfe9ec8195054f023","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgppbXBvcnQgb3MKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCmZyb20gcmFuZG9tIGltcG9ydCBzaHVmZmxlCmltcG9ydCB4bWwuZXRyZWUuRWxlbWVudFRyZWUgYXMgRVQKaW1wb3J0IHNodXRpbAppbXBvcnQgYXJncGFyc2UKCgpjbGFzcyBBdXRvWW9sbygpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcmVmaXgsIGNsYXNzX2ZpbGUsIHZvY19wYXRoLCBpbWdfcGF0aCwgdHJhaW5fcGVyY2VudGFnZT0wLjgpOgogICAgICAgIHNlbGYudHJhaW5fc2V0ID0gUGF0aCgiVHJhaW5TZXQtJXMiICUgcHJlZml4KQogICAgICAgIHNlbGYubG9jYWxfZGF0YSA9IHNlbGYudHJhaW5fc2V0LyJ5b2xvIgogICAgICAgIHNlbGYubG9jYWxfZXhjbHVkZSA9IHNlbGYudHJhaW5fc2V0LyJleGNsdWRlIgogICAgICAgIHNlbGYubG9jYWxfYW5ub3MgPSBzZWxmLnRyYWluX3NldC8idm9jIgo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLnBlcmNlbnRhZ2UgPSB0cmFpbl9wZXJjZW50YWdlCiAgICAgICAgaWYgbm90IHNlbGYudHJhaW5fc2V0LmV4aXN0cygpOgogICAgICAgICAgICBwcmludCgibWtkaXJzIiwgc2VsZi5sb2NhbF9kYXRhLAogICAgICAgICAgICAgICAgICBzZWxmLmxvY2FsX2V4Y2x1ZGUsIHNlbGYubG9jYWxfYW5ub3MpCiAgICAgICAgICAgIHNlbGYudHJhaW5fc2V0Lm1rZGlyKCkKICAgICAgICAgICAgc2VsZi5sb2NhbF9kYXRhLm1rZGlyKCkKICAgICAgICAgICAgc2VsZi5sb2NhbF9leGNsdWRlLm1rZGlyKCkKICAgICAgICAgICAgc2VsZi5sb2NhbF9hbm5vcy5ta2RpcigpCiAgICAgICAgICAgIHNlbGYubG9jYWxfYmFja3VwLm1rZGlyKCkKICAgICAgICBzZWxmLmxvYWRfY2xhc3NlcygpCgogICAgZGVmIGxvYWRfY2xhc3NlcyhzZWxmKToKICAgICAgICB3aXRoIG9wZW4oc2VsZi5jbGFzc19maWxlLCAiciIpIGFzIGY6CiAgICAgICAgICAgIHNlbGYuY2xhc3NlcyA9IGYucmVhZCgpLnNwbGl0KCJcbiIpCiAgICAgICAgc2h1dGlsLmNvcHkoc2VsZi5jbGFzc19maWxlLCBzZWxmLnRyYWluX3NldCkKICAgICAgICBzZWxmLmNsYXNzX2ZpbGUgPSBzZWxmLnRyYWluX3NldC9zZWxmLmNsYXNzX2ZpbGUubmFtZQoKICAgIGRlZiBjb25maWd1cmUoc2VsZik6CiAgICAgICAgZm9yIHggaW4gc2VsZi5pbWdfcGF0aC5pdGVyZGlyKCk6CiAgICAgICAgICAgIGltZ19kYXRhID0geAogICAgICAgICAgICB4bWxfZGF0YSA9IHNlbGYudm9jX3BhdGggLyB4LndpdGhfc3VmZml4KCIueG1sIikubmFtZQogICAgICAgICAgICBpZiBub3QgeG1sX2RhdGEuZXhpc3RzKCk6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICB4bWxfZl9zaXplID0geG1sX2RhdGEuc3RhdCgpLnN0X3NpemUKICAgICAgICAgICAgaWYgeG1sX2Zfc2l6ZSA+PSA1MDA6CiAgICAgICAgICAgICAgICBzaHV0aWwuY29weShpbWdfZGF0YSwgc2VsZi5sb2NhbF9kYXRhKQogICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkoeG1sX2RhdGEsIHNlbGYubG9jYWxfYW5ub3MpCiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBzaHV0aWwuY29weShpbWdfZGF0YSwgc2VsZi5sb2NhbF9leGNsdWRlKQogICAgICAgIGJhc2UgPSBzZWxmLmxvY2FsX2RhdGEKICAgICAgICBpbWdzID0gbGlzdChtYXAobGFtYmRhIHA6IHAucmVzb2x2ZSgpLmFzX3Bvc2l4KCksIGJhc2UuaXRlcmRpcigpKSkKICAgICAgICB0b3RhbCA9IGxlbihpbWdzKQogICAgICAgIHByaW50KCJ0b3RhbCBsYWJlbCBpbWFnZXM6IiwgdG90YWwpCiAgICAgICAgcHJpbnQoInNodWZmbGUgbGFiZWwgaW1ncyIpCiAgICAgICAgc2h1ZmZsZShpbWdzKQogICAgICAgIHNwbGl0X2luZGV4ID0gaW50KHRvdGFsKnNlbGYucGVyY2VudGFnZSkKICAgICAgICBwcmludCgidHJhaW4gbGFiZWwgaW1hZ2U6Iiwgc3BsaXRfaW5kZXgpCiAgICAgICAgcHJpbnQoInRlc3QgbGFiZWwgaW1hZ2U6IiwgdG90YWwtc3BsaXRfaW5kZXgpCiAgICAgICAgc2VsZi50cmFpbl90eHQgPSBzZWxmLnRyYWluX3NldC8idHJhaW4udHh0IgogICAgICAgIHNlbGYudHJhaW5fdGVzdF90eHQgPSBzZWxmLnRyYWluX3NldC8idHJhaW5fdGVzdC50eHQiCiAgICAgICAgd2l0aCBvcGVuKHNlbGYudHJhaW5fdHh0LCAndycpIGFzIGZ3LCBvcGVuKHNlbGYudHJhaW5fdGVzdF90eHQsICd3JykgYXMgZnQ6CiAgICAgICAgICAgIGZ3LndyaXRlKCJcbiIuam9pbihpbWdzWzpzcGxpdF9pbmRleF0pKQogICAgICAgICAgICBmdC53cml0ZSgiXG4iLmpvaW4oaW1nc1tzcGxpdF9pbmRleDpdKSkKCiAgICAgICAgZGVmIGNvbnZlcnQodHgpOgogICAgICAgICAgICBpbWFnZV9pZHMgPSBvcGVuKHR4KS5yZWFkKCkuc3RyaXAoKS5zcGxpdCgpCiAgICAgICAgICAgIGZvciBpbWFnZV9pZCBpbiBpbWFnZV9pZHM6CiAgICAgICAgICAgICAgICBzZWxmLmNvbnZlcnRfYW5ub3RhdGlvbihpbWFnZV9pZCkKICAgICAgICBjb252ZXJ0KHNlbGYudHJhaW5fdHh0KQogICAgICAgIGNvbnZlcnQoc2VsZi50cmFpbl90ZXN0X3R4dCkKCiAgICBkZWYgY29udmVydF9hbm5vdGF0aW9uKHNlbGYsIGltYWdlX2lkKToKICAgICAgICBkZWYgY29udmVydChzaXplLCBib3gpOgogICAgICAgICAgICBkdyA9IDEuLyhzaXplWzBdKQogICAgICAgICAgICBkaCA9IDEuLyhzaXplWzFdKQogICAgICAgICAgICB4ID0gKGJveFswXSArIGJveFsxXSkvMi4wIC0gMQogICAgICAgICAgICB5ID0gKGJveFsyXSArIGJveFszXSkvMi4wIC0gMQogICAgICAgICAgICB3ID0gYm94WzFdIC0gYm94WzBdCiAgICAgICAgICAgIGggPSBib3hbM10gLSBib3hbMl0KICAgICAgICAgICAgeCA9IHgqZHcKICAgICAgICAgICAgdyA9IHcqZHcKICAgICAgICAgICAgeSA9IHkqZGgKICAgICAgICAgICAgaCA9IGgqZGgKICAgICAgICAgICAgcmV0dXJuICh4LCB5LCB3LCBoKQogICAgICAgIGluX2ZpbGUgPSBvcGVuKHNlbGYubG9jYWxfYW5ub3MgLwogICAgICAgICAgICAgICAgICAgICAgIFBhdGgoaW1hZ2VfaWQpLndpdGhfc3VmZml4KCIueG1sIikubmFtZSkKICAgICAgICBvdXRfZmlsZSA9IG9wZW4oc2VsZi5sb2NhbF9kYXRhIC8KICAgICAgICAgICAgICAgICAgICAgICAgUGF0aChpbWFnZV9pZCkud2l0aF9zdWZmaXgoIi50eHQiKS5uYW1lLCAndycpCiAgICAgICAgdHJlZSA9IEVULnBhcnNlKGluX2ZpbGUpCiAgICAgICAgcm9vdCA9IHRyZWUuZ2V0cm9vdCgpCiAgICAgICAgc2l6ZSA9IHJvb3QuZmluZCgnc2l6ZScpCiAgICAgICAgdyA9IGludChzaXplLmZpbmQoJ3dpZHRoJykudGV4dCkKICAgICAgICBoID0gaW50KHNpemUuZmluZCgnaGVpZ2h0JykudGV4dCkKICAgICAgICBmb3Igb2JqIGluIHJvb3QuaXRlcignb2JqZWN0Jyk6CiAgICAgICAgICAgIGRpZmZpY3VsdCA9IG9iai5maW5kKCdkaWZmaWN1bHQnKS50ZXh0CiAgICAgICAgICAgIGNscyA9IG9iai5maW5kKCduYW1lJykudGV4dAogICAgICAgICAgICBpZiBjbHMgbm90IGluIHNlbGYuY2xhc3NlcyBvciBpbnQoZGlmZmljdWx0KSA9PSAxOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgY2xzX2lkID0gc2VsZi5jbGFzc2VzLmluZGV4KGNscykKICAgICAgICAgICAgeG1sYm94ID0gb2JqLmZpbmQoJ2JuZGJveCcpCiAgICAgICAgICAgIGIgPSAoZmxvYXQoeG1sYm94LmZpbmQoJ3htaW4nKS50ZXh0KSwgZmxvYXQoeG1sYm94LmZpbmQoJ3htYXgnKS50ZXh0KSwgZmxvYXQoCiAgICAgICAgICAgICAgICB4bWxib3guZmluZCgneW1pbicpLnRleHQpLCBmbG9hdCh4bWxib3guZmluZCgneW1heCcpLnRleHQpKQogICAgICAgICAgICBiYiA9IGNvbnZlcnQoKHcsIGgpLCBiKQogICAgICAgICAgICBvdXRfZmlsZS53cml0ZShzdHIoY2xzX2lkKSArICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIi5qb2luKFtzdHIoYSkgZm9yIGEgaW4gYmJdKSArICdcbicpCgogICAgZGVmIGNvbmZpZ3VyZV90ZW1wbGF0ZShzZWxmKToKICAgICAgICBjbGFzc19jb3VudCA9IGxlbihzZWxmLmNsYXNzZXMpCiAgICAgICAgd2l0aCBvcGVuKCJ0cmFpbi5kYXRhLnRlbXBsYXRlIiwgInIiKSBhcyBmOgogICAgICAgICAgICB0cmFpbl9kYXRhID0gZi5yZWFkKCkuZm9ybWF0KGNsYXNzZXM9Y2xhc3NfY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaW49c2VsZi50cmFpbl90eHQucmVzb2x2ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkPXNlbGYudHJhaW5fdGVzdF90eHQucmVzb2x2ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzPXNlbGYuY2xhc3NfZmlsZS5yZXNvbHZlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja3VwPXNlbGYubG9jYWxfYmFja3VwLnJlc29sdmUoKSkKICAgICAgICAgICAgd2l0aCAoc2VsZi50cmFpbl9zZXQvInRyYWluLmRhdGEiKS5vcGVuKG1vZGU9InciKSBhcyBmdDoKICAgICAgICAgICAgICAgIGZ0LndyaXRlKHRyYWluX2RhdGEpCiAgICAgICAgd2l0aCBvcGVuKCJ5b2xvdjMuY2ZnLnRlbXBsYXRlIiwgInIiKSBhcyBmOgogICAgICAgICAgICBjZmcgPSBmLnJlYWQoKS5mb3JtYXQoY2xhc3Nlcz1jbGFzc19jb3VudCwgZmlsdGVycz0oY2xhc3NfY291bnQrNSkqMykKICAgICAgICAgICAgd2l0aCAoc2VsZi50cmFpbl9zZXQvInlvbG92My5jZmciKS5vcGVuKG1vZGU9InciKSBhcyBmdDoKICAgICAgICAgICAgICAgIGZ0LndyaXRlKGNmZykKCgpkZWYgbWFpbigpOgogICAgIyBjb25zdHJ1Y3QgdGhlIGFyZ3VtZW50IHBhcnNlIGFuZCBwYXJzZSB0aGUgYXJndW1lbnRzCiAgICBhcCA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgIGFwLmFkZF9hcmd1bWVudCgiLW4iLCAiLS1uYW1lIiwgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICBoZWxwPSJuYW1lIG9mIHRyYWluc2V0IikKICAgIGFwLmFkZF9hcmd1bWVudCgiLWkiLCAiLS1pbWciLCByZXF1aXJlZD1UcnVlLAogICAgICAgICAgICAgICAgICAgIGhlbHA9InBhdGggdG8gaW1hZ2UiKQogICAgYXAuYWRkX2FyZ3VtZW50KCItdiIsICItLXZvYyIsIHJlcXVpcmVkPVRydWUsCiAgICAgICAgICAgICAgICAgICAgaGVscD0icGF0aCB0byB2b2MgIikKICAgIGFwLmFkZF9hcmd1bWVudCgiLWMiLCAiLS1jbHMiLCByZXF1aXJlZD1UcnVlLAogICAgICAgICAgICAgICAgICAgIGhlbHA9InBhdGggdG8gY2xhc3NlcyBmaWxlICIpCiAgICBhcC5hZGRfYXJndW1lbnQoIi1wIiwgIi0tcHJ0IiwgdHlwZT1mbG9hdCwgZGVmYXVsdD0wLjgsCiAgICAgICAgICAgICAgICAgICAgaGVscD0iaG93IG11Y2ggcGVyY2VudGFnZSBvZiBpbWFnZSB3aWxsIGJlIHVzZWQgdG8gdHJhaW4uIGUuZy4gaWYgeW91IGhhcyBsYWJlbGVkIDEwMCBpbWFnZXMgeW91IHdhbnQgdG8gdXNlIDgwIFwKICAgICAgICAgICAgICAgICAgICBmb3IgdHJhaW4gYW5kIDIwIGZvciB0ZXN0LHNvIHRoZSBwZXJjZW50YWdlIGlzIDAuOCIpCiAgICBhcmdzID0gdmFycyhhcC5wYXJzZV9hcmdzKCkpCgogICAgYXUgPSBBdXRvWW9sbyhwcmVmaXg9YXJnc1sibmFtZSJdLCBjbGFzc19maWxlPWFyZ3NbImNscyJdLCB2b2NfcGF0aD1hcmdzWyJ2b2MiXSwKICAgICAgICAgICAgICAgICAgaW1nX3BhdGg9YXJnc1siaW1nIl0sIHRyYWluX3BlcmNlbnRhZ2U9YXJnc1sicHJ0Il0pCiAgICBhdS5jb25maWd1cmUoKQogICAgYXUuY29uZmlndXJlX3RlbXBsYXRlKCkKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5sb2NhbF9iYWNrdXAgPSBzZWxmLnRyYWluX3NldC8iYmFja3VwIgogICAgICAgIHNlbGYudm9jX3BhdGggPSBQYXRoKHZvY19wYXRoKQogICAgICAgIHNlbGYuaW1nX3BhdGggPSBQYXRoKGltZ19wYXRoKQogICAgICAgIHNlbGYuY2xhc3NfZmlsZSA9IFBhdGgoY2xhc3NfZmlsZSkKPHxmaW1fZW5kfD4="]
["d84f4d8491835075342a3cc4796b735251cb76af-3","d84f4d8491835075342a3cc4796b735251cb76af","PHxmaW1fcHJlZml4fD4KZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgc2VyaWFsaXplcnMgCmZyb20gLm1vZGVscyBpbXBvcnQgUmVjaXBlCgpjbGFzcyBSZWNpcGVTZXJpYWxpemVyKHNlcmlhbGl6ZXJzLk1vZGVsU2VyaWFsaXplcik6CgogICAgY2xhc3MgTWV0YToKICAgICAgICBtb2RlbCA9IFJlY2lwZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZmllbGRzID0gWyd0aXRsZScsJ2luZ3JlZGllbnRzJywnbWV0aG9kJ10KICAgICAgICAKPHxmaW1fZW5kfD4="]
["2e5f300cd861705fb482b5ef928949f0d33fe9fd-1","2e5f300cd861705fb482b5ef928949f0d33fe9fd","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMS41IG9uIDIwMTktMDItMDEgMTE6MjUKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ2Zvcm1zJywgJzAwMDRfYXV0b18yMDE4MDcyN18xMjU2JyksCiAgICBdCjx8ZmltX2hvbGV8PgogICAgICAgICAgICBuYW1lPSdhbm9ueW1pemUnLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UsIHZlcmJvc2VfbmFtZT0nQW5vbnltaXplJyksCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkFkZEZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdmaWVsZCcsCiAgICAgICAgICAgIG5hbWU9J3VuaXF1ZScsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdD1GYWxzZSwgdmVyYm9zZV9uYW1lPSdVbmlxdWUnKSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nZm9ybScsCiAgICAgICAgICAgIG5hbWU9J3NsdWcnLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuU2x1Z0ZpZWxkKGVkaXRhYmxlPUZhbHNlLCBtYXhfbGVuZ3RoPTEwMCwgdW5pcXVlPVRydWUsIHZlcmJvc2VfbmFtZT0nU2x1ZycpLAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdmb3JtJywKICAgICAgICAgICAgbmFtZT0nc3RhdHVzJywKICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzPVsoMSwgJ2RyYWZ0JyksICgyLCAncHVibGlzaGVkJyksICgzLCAnYXJjaGl2ZWQnKV0sIGRlZmF1bHQ9MiwgdmVyYm9zZV9uYW1lPSdTdGF0dXMnKSwKICAgICAgICApLAogICAgXQo8fGZpbV9zdWZmaXh8PgoKICAgIG9wZXJhdGlvbnMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5BZGRGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nZmllbGQnLAo8fGZpbV9lbmR8Pg=="]
["5cea149b52edca0cba1312c35ba16fd04708e22c-1","5cea149b52edca0cba1312c35ba16fd04708e22c","PHxmaW1fcHJlZml4fD4KZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBNb2NrCgppbXBvcnQgcHl0ZXN0Cgpmcm9tIC4ubW9kZWxzIGltcG9ydCBDYXRlZ29yeQpmcm9tIC4udXRpbHMgaW1wb3J0IGdldF9jYXRlZ29yaWVzX3RyZWUsIGdldF9jYXRlZ29yeV9wYXRoCgoKQHB5dGVzdC5maXh0dXJlCmRlZiBjYXRlZ29yaWVzX3RyZWUocm9vdF9jYXRlZ29yeSwgZGVmYXVsdF9jYXRlZ29yeSk6CiAgICBDYXRlZ29yeShuYW1lPSJDYXRlZ29yeSBBIiwgc2x1Zz0iY2F0ZWdvcnktYSIpLmluc2VydF9hdCgKICAgICAgICByb290X2NhdGVnb3J5LCBwb3NpdGlvbj0ibGFzdC1jaGlsZCIsIHNhdmU9VHJ1ZQogICAgKQogICAgQ2F0ZWdvcnkobmFtZT0iQ2F0ZWdvcnkgRSIsIHNsdWc9ImNhdGVnb3J5LWUiKS5pbnNlcnRfYXQoCiAgICAgICAgcm9vdF9jYXRlZ29yeSwgcG9zaXRpb249Imxhc3QtY2hpbGQiLCBzYXZlPVRydWUKICAgICkKCiAgICBjYXRlZ29yeV9hID0gQ2F0ZWdvcnkub2JqZWN0cy5nZXQoc2x1Zz0iY2F0ZWdvcnktYSIpCgogICAgQ2F0ZWdvcnkobmFtZT0iQ2F0ZWdvcnkgQiIsIHNsdWc9ImNhdGVnb3J5LWIiKS5pbnNlcnRfYXQoCiAgICAgICAgY2F0ZWdvcnlfYSwgcG9zaXRpb249Imxhc3QtY2hpbGQiLCBzYXZlPVRydWUKICAgICkKCiAgICBjYXRlZ29yeV9iID0gQ2F0ZWdvcnkub2JqZWN0cy5nZXQoc2x1Zz0iY2F0ZWdvcnktYiIpCgogICAgY2F0ZWdvcnlfYyA9IENhdGVnb3J5KG5hbWU9IlN1YmNhdGVnb3J5IEMiLCBzbHVnPSJzdWJjYXRlZ29yeS1jIikuaW5zZXJ0X2F0KAogICAgICAgIGNhdGVnb3J5X2IsIHBvc2l0aW9uPSJsYXN0LWNoaWxkIiwgc2F2ZT1UcnVlCiAgICApCiAgICBjYXRlZ29yeV9kID0gQ2F0ZWdvcnkobmFtZT0iU3ViY2F0ZWdvcnkgRCIsIHNsdWc9InN1YmNhdGVnb3J5LWQiKS5pbnNlcnRfYXQoCiAgICAgICAgY2F0ZWdvcnlfYiwgcG9zaXRpb249Imxhc3QtY2hpbGQiLCBzYXZlPVRydWUKICAgICkKCiAgICBjYXRlZ29yeV9lID0gQ2F0ZWdvcnkub2JqZWN0cy5nZXQoc2x1Zz0iY2F0ZWdvcnktZSIpCiAgICBDYXRlZ29yeShuYW1lPSJTdWJjYXRlZ29yeSBGIiwgc2x1Zz0ic3ViY2F0ZWdvcnktZiIpLmluc2VydF9hdCgKICAgICAgICBjYXRlZ29yeV9lLCBwb3NpdGlvbj0ibGFzdC1jaGlsZCIsIHNhdmU9VHJ1ZQogICAgKQoKICAgIHJldHVybiB7CiAgICAgICAgInJvb3QiOiByb290X2NhdGVnb3J5LAogICAgICAgICJmaXJzdCI6IGRlZmF1bHRfY2F0ZWdvcnksCiAgICAgICAgImEiOiBDYXRlZ29yeS5vYmplY3RzLmdldChzbHVnPSJjYXRlZ29yeS1hIiksCiAgICAgICAgImIiOiBDYXRlZ29yeS5vYmplY3RzLmdldChzbHVnPSJjYXRlZ29yeS1iIiksCiAgICAgICAgImMiOiBDYXRlZ29yeS5vYmplY3RzLmdldChzbHVnPSJzdWJjYXRlZ29yeS1jIiksCiAgICAgICAgImQiOiBDYXRlZ29yeS5vYmplY3RzLmdldChzbHVnPSJzdWJjYXRlZ29yeS1kIiksCiAgICAgICAgImUiOiBDYXRlZ29yeS5vYmplY3RzLmdldChzbHVnPSJjYXRlZ29yeS1lIiksCiAgICAgICAgImYiOiBDYXRlZ29yeS5vYmplY3RzLmdldChzbHVnPSJzdWJjYXRlZ29yeS1mIiksCiAgICB9CgoKQHB5dGVzdC5maXh0dXJlCmRlZiBmdWxsX2FjY2Vzc191c2VyX2FjbChjYXRlZ29yaWVzX3RyZWUsIHVzZXJfYWNsKToKPHxmaW1faG9sZXw+CiAgICAgICAgY2F0ZWdvcmllc19hY2xbImNhdGVnb3JpZXMiXVtjYXRlZ29yeS5pZF0gPSB7ImNhbl9zZWUiOiAxLCAiY2FuX2Jyb3dzZSI6IDF9CiAgICB1c2VyX2FjbC51cGRhdGUoY2F0ZWdvcmllc19hY2wpCiAgICByZXR1cm4gdXNlcl9hY2wKCgpAcHl0ZXN0LmZpeHR1cmUKZGVmIHJlcXVlc3RfbW9jayh1c2VyLCBmdWxsX2FjY2Vzc191c2VyX2FjbCwgZHluYW1pY19zZXR0aW5ncyk6CiAgICByZXR1cm4gTW9jayhzZXR0aW5ncz1keW5hbWljX3NldHRpbmdzLCB1c2VyPXVzZXIsIHVzZXJfYWNsPWZ1bGxfYWNjZXNzX3VzZXJfYWNsKQoKCmRlZiB0ZXN0X3RyZWVfZ2V0dGVyX2RlZmF1bHRzX3RvX3JldHVybmluZ190b3BfbGV2ZWxfY2F0ZWdvcmllcygKICAgIHJlcXVlc3RfbW9jaywgY2F0ZWdvcmllc190cmVlCik6CiAgICBhc3NlcnQgZ2V0X2NhdGVnb3JpZXNfdHJlZShyZXF1ZXN0X21vY2spID09IFsKICAgICAgICBjYXRlZ29yaWVzX3RyZWVbImZpcnN0Il0sCiAgICAgICAgY2F0ZWdvcmllc190cmVlWyJhIl0sCiAgICAgICAgY2F0ZWdvcmllc190cmVlWyJlIl0sCiAgICBdCgoKZGVmIHRlc3RfdHJlZV9nZXR0ZXJfcmV0dXJuc19jYXRlZ29yeV9zdWJ0cmVlKHJlcXVlc3RfbW9jaywgY2F0ZWdvcmllc190cmVlKToKICAgIGFzc2VydCBnZXRfY2F0ZWdvcmllc190cmVlKHJlcXVlc3RfbW9jaywgY2F0ZWdvcmllc190cmVlWyJhIl0pID09IFsKICAgICAgICBjYXRlZ29yaWVzX3RyZWVbImIiXQogICAgXQoKCmRlZiB0ZXN0X3RyZWVfZ2V0dGVyX3JldHVybnNfZW1wdHlfbGlzdF9mb3JfbGVhZl9jYXRlZ29yeSgKICAgIHJlcXVlc3RfbW9jaywgY2F0ZWdvcmllc190cmVlCik6CiAgICBhc3NlcnQgZ2V0X2NhdGVnb3JpZXNfdHJlZShyZXF1ZXN0X21vY2ssIGNhdGVnb3JpZXNfdHJlZVsiZiJdKSA9PSBbXQoKCmRlZiB0ZXN0X3BhdGhfZ2V0dGVyX3JldHVybnNfcGF0aF90b19jYXRlZ29yeShyZXF1ZXN0X21vY2ssIGNhdGVnb3JpZXNfdHJlZSk6CiAgICBmb3Igbm9kZSBpbiBnZXRfY2F0ZWdvcmllc190cmVlKHJlcXVlc3RfbW9jayk6CiAgICAgICAgcGFyZW50X25vZGVzID0gbGVuKGdldF9jYXRlZ29yeV9wYXRoKG5vZGUpKQogICAgICAgIGFzc2VydCBwYXJlbnRfbm9kZXMgPT0gbm9kZS5sZXZlbAo8fGZpbV9zdWZmaXh8PgogICAgdXNlcl9hY2wgPSB1c2VyX2FjbC5jb3B5KCkKICAgIGNhdGVnb3JpZXNfYWNsID0geyJjYXRlZ29yaWVzIjoge30sICJ2aXNpYmxlX2NhdGVnb3JpZXMiOiBbXX0KICAgIGZvciBjYXRlZ29yeSBpbiBDYXRlZ29yeS5vYmplY3RzLmFsbF9jYXRlZ29yaWVzKCk6CiAgICAgICAgY2F0ZWdvcmllc19hY2xbInZpc2libGVfY2F0ZWdvcmllcyJdLmFwcGVuZChjYXRlZ29yeS5pZCkKPHxmaW1fZW5kfD4="]
["2b38ebe8cc3a42e9813b409360c739c8586df4f7-3","2b38ebe8cc3a42e9813b409360c739c8586df4f7","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc6IHV0Zi04CmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudC5iYXNlIGltcG9ydCBCYXNlQ29tbWFuZApmcm9tIGRqYW5nby5jb250cmliLmF1dGggaW1wb3J0IGdldF91c2VyX21vZGVsCmZyb20gZGphbmdvLmNvbnRyaWIuYXV0aC5tb2RlbHMgaW1wb3J0IEdyb3VwLCBQZXJtaXNzaW9uCgpBTExfUEVSTUlTU0lPTlMgPSAn5omA5pyJ5p2D6ZmQJwoKCmNsYXNzIENvbW1hbmQoQmFzZUNvbW1hbmQpOgogICAgZGVmIGhhbmRsZShzZWxmLCAqYXJncywgKipvcHRpb25zKToKICAgICAgICBncm91cCA9IHNlbGYuYnVpbGRfZ3JvdXBfYWxsKCkKICAgICAgICBzdGFmZiA9IHNlbGYuYnVpbGRfc3RhZmYoKQogICAgICAgIHNlbGYuYnVpbGRfcGVybWlzc2lvbihncm91cCwgc3RhZmYpCgogICAgZGVmIGJ1aWxkX2dyb3VwX2FsbChzZWxmKToKICAgICAgICBwcmludCgnMTogYnVpbGQgZ3JvdXAgZm9yIGFsbCBwZXJtaXNzaW9uJykKICAgICAgICBncm91cCA9IEdyb3VwLm9iamVjdHMuZmlyc3QoKQoKICAgICAgICBpZiBncm91cDoKICAgICAgICAgICAgZ3JvdXBfYWxsLCBjcmVhdGVkID0gR3JvdXAub2JqZWN0cy51cGRhdGVfb3JfY3JlYXRlKHBrPWdyb3VwLmlkLCBkZWZhdWx0cz1kaWN0KG5hbWU9QUxMX1BFUk1JU1NJT05TKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBncm91cF9hbGwgPSBHcm91cC5vYmplY3RzLmNyZWF0ZShuYW1lPUFMTF9QRVJNSVNTSU9OUykKCiAgICAgICAgYWxsX3Blcm1pc3Npb24gPSBzZXQoUGVybWlzc2lvbi5vYmplY3RzLmFsbCgpKQogICAgICAgIGdyb3VwX3Blcm1pc3Npb24gPSBzZXQoZ3JvdXBfYWxsLnBlcm1pc3Npb25zLmFsbCgpKQoKICAgICAgICBhZGQgPSBhbGxfcGVybWlzc2lvbiAtIGdyb3VwX3Blcm1pc3Npb24KICAgICAgICByZW1vdmUgPSBncm91cF9wZXJtaXNzaW9uIC0gYWxsX3Blcm1pc3Npb24KICAgICAgICBwcmludCgnYWRkOiAnLCBhZGQpCiAgICAgICAgcHJpbnQoJ3JlbW92ZTogJywgcmVtb3ZlKQoKICAgICAgICBncm91cF9hbGwucGVybWlzc2lvbnMucmVtb3ZlKCpyZW1vdmUpCiAgICAgICAgZ3JvdXBfYWxsLnBlcm1pc3Npb25zLmFkZCgqYWRkKQoKICAgICAgICByZXR1cm4gZ3JvdXBfYWxsCgogICAgZGVmIGJ1aWxkX3N0YWZmKHNlbGYpOgogICAgICAgIHByaW50KCIyOiBidWlsZCBzdXBlciAmIHN0YWZmICYgdXNlciIpCiAgICAgICAgZmlsdGVyX2t3YXJncyA9IHsKICAgICAgICAgICAgInBhc3N3b3JkIjogZ2V0YXR0cihzZXR0aW5ncywgJ0FETUlOX1BBU1NXT1JEJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKHNldHRpbmdzLCAnREVGQVVMVF9BRE1JTl9QQVNTV09SRCcsICcxMjM0NTYnKSksCiAgICAgICAgfQogICAgICAgIHVzZXJuYW1lID0gZ2V0YXR0cihzZXR0aW5ncywgJ0RFRkFVTFRfQURNSU5fVVNFUk5BTUUnLCAnYWRtaW4nKQogICAgICAgIHN0YWZmID0gc2VsZi5nZW5lcmF0ZV91c2VyKHVzZXJuYW1lPXVzZXJuYW1lLCBpc19zdGFmZj1UcnVlLCAqKmZpbHRlcl9rd2FyZ3MpCiAgICAgICAgcmV0dXJuIHN0YWZmCgogICAgZGVmIGJ1aWxkX3Blcm1pc3Npb24oc2VsZiwgZ3JvdXAsIGFkbWluKToKICAgICAgICBpZiBncm91cDoKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgZ3JvdXAgPSBHcm91cC5vYmplY3RzLmdldChuYW1lPUFMTF9QRVJNSVNTSU9OUykKICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIGlmIG5vdCBhZG1pbjoKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgYWRtaW4gPSBnZXRfdXNlcl9tb2RlbCgpLm9iamVjdHMuZ2V0KHVzZXJuYW1lPSdhZG1pbicpCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgIGFkbWluLmdyb3Vwcy5hZGQoZ3JvdXApCgo8fGZpbV9ob2xlfD4KICAgICAgICBwYXNzd29yZCA9IGt3YXJncy5wb3AoJ3Bhc3N3b3JkJywgJzEyMzEyMycpCgogICAgICAgIHRyeToKICAgICAgICAgICAgdXNlciA9IHVzZXJfbW9kZWwub2JqZWN0cy5nZXQodXNlcm5hbWU9dXNlcm5hbWUpCiAgICAgICAgZXhjZXB0IHVzZXJfbW9kZWwuRG9lc05vdEV4aXN0OgogICAgICAgICAgICB1c2VyID0gdXNlcl9tb2RlbC5vYmplY3RzLm1vZGVsKCoqa3dhcmdzKQogICAgICAgICAgICB1c2VyLnNldF9wYXNzd29yZChwYXNzd29yZCkKICAgICAgICAgICAgdXNlci5zYXZlKCkKICAgICAgICByZXR1cm4gdXNlcgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBnZW5lcmF0ZV91c2VyKHNlbGYsICoqa3dhcmdzKToKICAgICAgICB1c2VyX21vZGVsID0gZ2V0X3VzZXJfbW9kZWwoKQoKICAgICAgICB1c2VybmFtZSA9IGt3YXJncy5nZXQoJ3VzZXJuYW1lJykKPHxmaW1fZW5kfD4="]
["a9b61165b8093081bf63da2ffb7cc31d09c2e4e5-4","a9b61165b8093081bf63da2ffb7cc31d09c2e4e5","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCmltcG9ydCBzeXMKCnN5cy5zdGRlcnIud3JpdGUoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iKQpzeXMuc3RkZXJyLndyaXRlKCIgICAgICAgbHNkbnMgYnkgRmxvcmlhbiBCb2duZXIgQCBLYXBzY2ggQnVzaW5lc3NDb21cbiIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4Kc3lzLnN0ZGVyci53cml0ZSgiICAgICAgICAgICAgZmxvcmlhbi5ib2duZXJbYXRda2Fwc2NoW2RvdF1uZXRcblxuIikKc3lzLnN0ZGVyci53cml0ZSgibHNkbnMgcXVlcmllcyBhIEROUyBzZXJ2ZXIgZm9yIGFsbCBob3N0IG5hbWVzIHdpdGhpbiBhIFxuZ2l2ZW4gSVAgcmFuZ2UuIFRoZSByZXN1bHQgaXMgcHJpbnRlZCBhcyBhIGxpc3Qgb2YgY29tbWFcbnNlcGFyYXRlZCB2YWx1ZXMgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cbiIpCnN5cy5zdGRlcnIud3JpdGUoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG5cbiIpCgo8fGZpbV9lbmR8Pg=="]
["da19a90db05f408800a4cac3f3a9dad299751378-4","da19a90db05f408800a4cac3f3a9dad299751378","PHxmaW1fcHJlZml4fD4KIiIiVGhpcyBtb2R1bGUgY29udGFpbnMgdGhlIFByb2R1Y3QgY2xhc3MuIiIiCgppbXBvcnQgY2NhcGkKCmZyb20gLnByb2R1Y3RvcHRpb25zIGltcG9ydCBQcm9kdWN0T3B0aW9uLCBQcm9kdWN0T3B0aW9uVmFsdWUKZnJvbSAudmF0cmF0ZXMgaW1wb3J0IFZhdFJhdGVzCmZyb20gLndhcmVob3VzZSBpbXBvcnQgV2FyZWhvdXNlQmF5CgoKY2xhc3MgUHJvZHVjdDoKICAgICIiIlByb2R1Y3QgY2xhc3MgY29udGFpbmluZyBkYXRhIGFuZCBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggUHJvZHVjdHMuIiIiCgogICAgX29wdGlvbnMgPSBOb25lCiAgICBiYXlzID0gTm9uZQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKICAgICAgICAiIiIKICAgICAgICBDcmVhdGUgUHJvZHVjdCBvYmplY3QuCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIGRhdGE6IENsb3VkIENvbW1lcmNlIFByb2R1Y3QgSlNPTiBvYmplY3QuCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5qc29uID0gZGF0YQogICAgICAgIHNlbGYuaXNfY2hlY2tlZCA9IGRhdGFbImlzQ2hlY2tlZCJdCiAgICAgICAgc2VsZi5pc19saXN0ZWQgPSBkYXRhWyJpc0xpc3RlZCJdCiAgICAgICAgc2VsZi5zdXBwbGllcl9za3UgPSBkYXRhWyJTdXBwbGllclNLVSJdCiAgICAgICAgc2VsZi5pZCA9IGRhdGFbIklEIl0KICAgICAgICBzZWxmLm5hbWUgPSBkYXRhWyJOYW1lIl0KICAgICAgICBzZWxmLmZ1bGxfbmFtZSA9IGRhdGFbIkZ1bGxOYW1lIl0KICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGF0YVsiRGVzY3JpcHRpb24iXQogICAgICAgIHNlbGYuc2t1ID0gZGF0YVsiTWFudWZhY3R1cmVyU0tVIl0KICAgICAgICBzZWxmLmJhc2VfcHJpY2UgPSBkYXRhWyJCYXNlUHJpY2UiXQogICAgICAgIGlmIGludChkYXRhWyJWYXRSYXRlSUQiXSkgPT0gMDoKICAgICAgICAgICAgc2VsZi52YXRfcmF0ZV9pZCA9IE5vbmUKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLnZhdF9yYXRlX2lkID0gaW50KGRhdGFbIlZhdFJhdGVJRCJdKQogICAgICAgIGlmIHNlbGYudmF0X3JhdGVfaWQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHNlbGYudmF0X3JhdGUgPSBWYXRSYXRlcy5nZXRfdmF0X3JhdGVfYnlfaWQoc2VsZi52YXRfcmF0ZV9pZCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLnZhdF9yYXRlID0gTm9uZQogICAgICAgIHNlbGYuYmFyY29kZSA9IGRhdGFbIkJhcmNvZGUiXQogICAgICAgIHNlbGYucmFuZ2VfaWQgPSBkYXRhWyJSYW5nZUlEIl0KICAgICAgICBzZWxmLnJhbmdlX25hbWUgPSBkYXRhWyJSYW5nZU5hbWUiXQogICAgICAgIHNlbGYucHJlX29yZGVyID0gZGF0YVsiUHJlT3JkZXIiXQogICAgICAgIHNlbGYuZW5kX29mX2xpbmUgPSBkYXRhWyJFbmRPZkxpbmUiXQogICAgICAgIHNlbGYuc3RvY2tfbGV2ZWwgPSBkYXRhWyJTdG9ja0xldmVsIl0KICAgICAgICBzZWxmLnBzZXVkb19zdG9ja190eXBlID0gZGF0YVsiUHNldWRvU3RvY2tUeXBlIl0KICAgICAgICBzZWxmLnBzZXVkb19zdG9ja19sZXZlbCA9IGRhdGFbIlBzZXVkb1N0b2NrTGV2ZWwiXQogICAgICAgIHNlbGYuc3RhdHVzX2lkID0gZGF0YVsiU3RhdHVzSUQiXQogICAgICAgIHNlbGYucHJvZHVjdF90eXBlID0gZGF0YVsiUHJvZHVjdFR5cGUiXQogICAgICAgIHNlbGYubGVuZ3RoX21tID0gZGF0YVsiTGVuZ3RoTU0iXQogICAgICAgIHNlbGYud2lkdGhfbW0gPSBkYXRhWyJXaWR0aE1NIl0KICAgICAgICBzZWxmLmhlaWdodF9tbSA9IGRhdGFbIkhlaWdodE1NIl0KICAgICAgICBzZWxmLmxlbmd0aF9jbSA9IGRhdGFbIkxlbmd0aENNIl0KICAgICAgICBzZWxmLndpZHRoX2NtID0gZGF0YVsiV2lkdGhDTSJdCiAgICAgICAgc2VsZi5oZWlnaHRfY20gPSBkYXRhWyJIZWlnaHRDTSJdCiAgICAgICAgc2VsZi5sYXJnZV9sZXR0ZXJfY29tcGF0aWJsZSA9IGRhdGFbIkxhcmdlTGV0dGVyQ29tcGF0aWJsZSJdCiAgICAgICAgc2VsZi5leHRlcm5hbF9wcm9kdWN0X2lkID0gZGF0YVsiRXh0ZXJuYWxQcm9kdWN0SWQiXQogICAgICAgIHNlbGYuYWRkaXRpb25hbF9zaGlwcGluZ19sYWJlbCA9IGRhdGFbIkFkZGl0aW9uYWxTaGlwcGluZ0xhYmVsIl0KICAgICAgICBzZWxmLmRlZmF1bHRfaW1hZ2VfdXJsID0gZGF0YVsiZGVmYXVsdEltYWdlVXJsIl0KICAgICAgICBzZWxmLmRlbGl2ZXJ5X2xlYWRfdGltZSA9IGRhdGFbIkRlbGl2ZXJ5TGVhZFRpbWVEYXlzIl0KICAgICAgICBzZWxmLnByb2R1Y3RfdGVtcGxhdGVfaWQgPSBkYXRhWyJQcm9kdWN0VGVtcGxhdGVJZCJdCiAgICAgICAgc2VsZi5wcm9kdWN0X3RlbXBsYXRlX21vZGUgPSBkYXRhWyJQcm9kdWN0VGVtcGxhdGVNb2RlIl0KICAgICAgICBzZWxmLmFkZGl0aW9uYWxfYmFyY29kZXMgPSBkYXRhWyJBZGRpdGlvbmFsQmFyY29kZXMiXQogICAgICAgIHNlbGYud2VpZ2h0ID0gZGF0YVsiV2VpZ2h0R00iXQogICAgICAgIHNlbGYuaHNfY29kZSA9IGRhdGFbIkhTQ29kZSJdCiAgICAgICAgaWYgZGF0YVsiTG9jYXRpb25zIl0gaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHNlbGYuYmF5cyA9IFtXYXJlaG91c2VCYXkoYmF5KSBmb3IgYmF5IGluIGRhdGFbIkxvY2F0aW9ucyJdXQogICAgICAgIHNlbGYuZGltZW5zaW9ucyA9IGRhdGFbIkRpbWVuc2lvbnMiXQoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5mdWxsX25hbWUKCiAgICBkZWYgZ2V0X3NhbGVzX2NoYW5uZWxzKHNlbGYpOgogICAgICAgICIiIkdldCBTYWxlcyBDaGFubmVscyBmb3IgdGhpcyBQcm9kdWN0IFJhbmdlLiIiIgogICAgICAgIHJldHVybiBjY2FwaS5DQ0FQSS5nZXRfc2FsZXNfY2hhbm5lbHNfZm9yX3JhbmdlKHNlbGYucmFuZ2VfaWQpCgogICAgZGVmIGdldF9zYWxlc19jaGFubmVsX2lkcyhzZWxmKToKICAgICAgICAiIiJHZXQgSURzIG9mIFNhbGVzIENoYW5uZWxzIG9uIHdoaWNoIHRoaXMgUHJvZHVjdCBSYW5nZSBpcyBsaXN0ZWQuIiIiCiAgICAgICAgcmV0dXJuIFtjaGFubmVsLmlkIGZvciBjaGFubmVsIGluIHNlbGYuZ2V0X3NhbGVzX2NoYW5uZWxzKCldCgogICAgQHByb3BlcnR5CiAgICBkZWYgb3B0aW9ucyhzZWxmKToKICAgICAgICAiIiIKICAgICAgICBQcm9kdWN0IE9wdGlvbnMgZm9yIHRoaXMgUHJvZHVjdC4KCiAgICAgICAgY2NhcGkuY2Nfb2JqZWN0cy5Qcm9kdWN0T3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgUHJvZHVjdCBPcHRpb25zCiAgICAgICAgYXBwbGllZCB0byB0aGlzIFByb2R1Y3QuCiAgICAgICAgIiIiCiAgICAgICAgaWYgc2VsZi5fb3B0aW9ucyBpcyBOb25lOgogICAgICAgICAgICBzZWxmLl9vcHRpb25zID0gY2NhcGkuQ0NBUEkuZ2V0X29wdGlvbnNfZm9yX3Byb2R1Y3Qoc2VsZi5pZCkKICAgICAgICByZXR1cm4gc2VsZi5fb3B0aW9ucwoKICAgIGRlZiBnZXRfcmFuZ2Uoc2VsZik6CiAgICAgICAgIiIiUmV0dXJuIFByb2R1Y3RSYW5nZSBmb3IgUmFuZ2UgdG8gd2hpY2ggdGhpcyBQcm9kdWN0IGJlbG9uZ3MuIiIiCiAgICAgICAgcmV0dXJuIGNjYXBpLkNDQVBJLmdldF9yYW5nZShzZWxmLnJhbmdlX2lkKQoKICAgIGRlZiBzZXRfaHNfY29kZShzZWxmLCBoc19jb2RlKToKICAgICAgICAiIiJTZXQgdGhlIHByb2R1Y3QncyBIUyBDb2RlLiIiIgogICAgICAgIGNjYXBpLkNDQVBJLnNldF9oc19jb2RlKHByb2R1Y3RfSURzPVtzZWxmLmlkXSwgSFNfY29kZT1oc19jb2RlKQogICAgICAgIHNlbGYuaHNfY29kZSA9IGhzX2NvZGUKCiAgICBkZWYgc2V0X29wdGlvbl92YWx1ZShzZWxmLCBvcHRpb24sIHZhbHVlLCBjcmVhdGU9RmFsc2UpOgogICAgICAgICIiIgogICAgICAgIFNldCBWYWx1ZSBmb3IgUHJvZHVjdCBPcHRpb24gZm9yIHRoaXMgcHJvZHVjdC4KCiAgICAgICAgQXJnczoKICAgICAgICAgICAgb3B0aW9uOiBPcHRpb24gZm9yIHdoaWNoIHZhbHVlIHdpbGwgYmUgc2V0LiBDYW4gYmUgUHJvZHVjdE9wdGlvbiBvcgogICAgICAgICAgICAgICAgKHN0cikgb3B0aW9uIG5hbWUuCiAgICAgICAgICAgIHZhbHVlOiBWYWx1ZSB0byBzZXQuIENhbiBiZSBQcm9kdWN0T3B0aW9uVmFsdWUgb3IgKHN0cikgdmFsdWUuCgogICAgICAgIEt3YXJnczoKICAgICAgICAgICAgY3JlYXRlOiBJZiBUcnVlIFZhbHVlIHdpbGwgYmUgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgogICAgICAgICAgICAgICAgRGVmYXVsdDogRmFsc2UuCiAgICAgICAgIiIiCiAgICAgICAgaWYgaXNpbnN0YW5jZShvcHRpb24sIFByb2R1Y3RPcHRpb24pOgogICAgICAgICAgICBvcHRpb25faWQgPSBvcHRpb24uaWQKICAgICAgICBlbHNlOgogICAgICAgICAgICBvcHRpb24gPSBzZWxmLm9wdGlvbnNbb3B0aW9uXQogICAgICAgICAgICBvcHRpb25faWQgPSBvcHRpb24uaWQKICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBQcm9kdWN0T3B0aW9uVmFsdWUpOgogICAgICAgICAgICB2YWx1ZV9pZCA9IHZhbHVlLmlkCiAgICAgICAgZWxzZToKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgdmFsdWVfaWQgPSBvcHRpb25bdmFsdWVdLmlkCiAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgICAgIGlmIGNyZWF0ZSBpcyBUcnVlOgogICAgICAgICAgICAgICAgICAgIHZhbHVlX2lkID0gY2NhcGkuQ0NBUEkuY3JlYXRlX29wdGlvbl92YWx1ZShvcHRpb25faWQsIHZhbHVlKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlByb2R1Y3QgT3B0aW9uIFZhbHVlIGRvZXMgbm90IGV4aXN0LiIpCiAgICAgICAgY2NhcGkuQ0NBUEkuc2V0X3Byb2R1Y3Rfb3B0aW9uX3ZhbHVlKFtzZWxmLmlkXSwgb3B0aW9uX2lkLCB2YWx1ZV9pZCkKCiAgICBkZWYgc2V0X3Byb2R1Y3Rfc2NvcGUoCiAgICAgICAgc2VsZiwKICAgICAgICB3ZWlnaHQ9Tm9uZSwKICAgICAgICBoZWlnaHQ9Tm9uZSwKICAgICAgICBsZW5ndGg9Tm9uZSwKICAgICAgICB3aWR0aD1Ob25lLAogICAgICAgIGxhcmdlX2xldHRlcl9jb21wYXRpYmxlPU5vbmUsCiAgICAgICAgZXh0ZXJuYWxfaWQ9Tm9uZSwKICAgICk6CiAgICAgICAgIiIiCiAgICAgICAgU2V0IHNldmVyYWwgYXR0cmlidXRlcyBmb3IgUHJvZHVjdC4KCiAgICAgICAgU2V0cyB3ZWlnaHQsIGhlaWdodCwgbGVuZ3RoLCB3aWR0aCwgbGFyZ2UgbGV0dGVyIGNvbXBhdGliaWx0eSBhbmQKICAgICAgICBleHRlcm5hbCBJRC4KCiAgICAgICAgS3dhcmdzOgogICAgICAgICAgICB3ZWlnaHQ6IElmIG5vdCBOb25lIHNldHMgUHJvZHVjdCB3ZWlnaHQgaW4gZ3JhbXMuCiAgICAgICAgICAgIGhlaWdodDogSWYgbm90IE5vbmUgc2V0cyBQcm9kdWN0IGhlaWdodCBpbiBtbS4KICAgICAgICAgICAgbGVuZ3RoOiBJZiBub3QgTm9uZSBzZXRzIFByb2R1Y3QgbGVuZ2h0IGluIG1tLgogICAgICAgICAgICB3aWR0aDogSWYgbm90IE5vbmUgc2V0cyBQcm9kdWN0IHdpZHRoIGluIG1tLgogICAgICAgICAgICBsYXJnZV9sZXR0ZXJfY29tcGF0aWJsZTogSWYgbm90IE5vbmUgc2V0cyBQcm9kdWN0IGxhcmdlIGxldHRlcgogICAgICAgICAgICAgICAgY29tcGF0aWJpbGl0eS4KICAgICAgICAgICAgZXh0ZXJuYWxfaWQ6IElmIG5vdCBOb25lIHNldHMgRXh0ZXJuYWwgSUQgb2YgcHJvZHVjdC4KICAgICAgICAiIiIKICAgICAgICBpZiB3ZWlnaHQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHNlbGYud2VpZ2h0ID0gd2VpZ2h0CiAgICAgICAgaWYgaGVpZ2h0IGlzIG5vdCBOb25lOgogICAgICAgICAgICBzZWxmLmhlaWdodF9tbSA9IGhlaWdodAogICAgICAgIGlmIGxlbmd0aCBpcyBub3QgTm9uZToKICAgICAgICAgICAgc2VsZi5sZW5ndGhfbW0gPSBsZW5ndGgKICAgICAgICBpZiB3aWR0aCBpcyBub3QgTm9uZToKICAgICAgICAgICAgc2VsZi53aWR0aF9tbSA9IHdpZHRoCiAgICAgICAgaWYgbGFyZ2VfbGV0dGVyX2NvbXBhdGlibGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHNlbGYubGFyZ2VfbGV0dGVyX2NvbXBhdGlibGUgPSBsYXJnZV9sZXR0ZXJfY29tcGF0aWJsZQogICAgICAgIGlmIGV4dGVybmFsX2lkIGlzIG5vdCBOb25lOgogICAgICAgICAgICBzZWxmLmV4dGVybmFsX3Byb2R1Y3RfaWQgPSBleHRlcm5hbF9pZAogICAgICAgIHJldHVybiBjY2FwaS5DQ0FQSS5zZXRfcHJvZHVjdF9zY29wZSgKICAgICAgICAgICAgcHJvZHVjdF9pZD1zZWxmLmlkLAogICAgICAgICAgICB3ZWlnaHQ9c2VsZi53ZWlnaHQsCiAgICAgICAgICAgIGhlaWdodD1zZWxmLmhlaWdodF9tbSwKICAgICAgICAgICAgbGVuZ3RoPXNlbGYubGVuZ3RoX21tLAogICAgICAgICAgICB3aWR0aD1zZWxmLndpZHRoX21tLAogICAgICAgICAgICBsYXJnZV9sZXR0ZXJfY29tcGF0aWJsZT1zZWxmLmxhcmdlX2xldHRlcl9jb21wYXRpYmxlLAogICAgICAgICAgICBleHRlcm5hbF9pZD1zZWxmLmV4dGVybmFsX3Byb2R1Y3RfaWQsCiAgICAgICAgKQoKICAgIGRlZiBzZXRfd2VpZ2h0KHNlbGYsIHdlaWdodCk6CiAgICAgICAgIiIiU2V0IHdlaWdodCBmb3IgUHJvZHVjdCBpbiBncmFtcy4iIiIKICAgICAgICBzZWxmLnNldF9wcm9kdWN0X3Njb3BlKHdlaWdodD13ZWlnaHQpCgogICAgZGVmIHNldF9kaW1lbnNpb25zKHNlbGYsICosIGhlaWdodCwgbGVuZ3RoLCB3aWR0aCk6CiAgICAgICAgIiIiU2V0IGhlaWdodCwgbGVuZ2h0IGFuZCB3aWR0aCBvZiBQcm9kdWN0IGluIG1pbGltZXRlcnMuIiIiCiAgICAgICAgc2VsZi5zZXRfcHJvZHVjdF9zY29wZShoZWlnaHQ9aGVpZ2h0LCBsZW5ndGg9bGVuZ3RoLCB3aWR0aD13aWR0aCkKCiAgICBkZWYgc2V0X2xhcmdlX2xldHRlcl9jb21wYXRpYmxlKHNlbGYsIGNvbXBhdGlibGUpOgogICAgICAgICIiIlNldCB3ZWF0aGVyIHByb2R1Y3QgaXMgbGFyZ2UgbGV0dGVyIGNvbXBhdGlibGUuIiIiCiAgICAgICAgc2VsZi5zZXRfcHJvZHVjdF9zY29wZShsYXJnZV9sZXR0ZXJfY29tcGF0aWJsZT1jb21wYXRpYmxlKQoKICAgIGRlZiBzZXRfZXh0ZXJuYWxfaWQoc2VsZiwgZXh0ZXJuYWxfaWQpOgogICAgICAgICIiIlNldCBQcm9kdWN0IEV4dGVybmFsIElELiIiIgogICAgICAgIHNlbGYuc2V0X3Byb2R1Y3Rfc2NvcGUoZXh0ZXJuYWxfaWQ9ZXh0ZXJuYWxfaWQpCgogICAgZGVmIHNldF9iYXNlX3ByaWNlKHNlbGYsIHByaWNlKToKICAgICAgICAiIiJTZXQgUHJvZHVjdCBiYXNlIHByaWNlLiIiIgogICAgICAgIGNjYXBpLkNDQVBJLnNldF9wcm9kdWN0X2Jhc2VfcHJpY2UocHJvZHVjdF9pZD1zZWxmLmlkLCBwcmljZT1wcmljZSkKCiAgICBkZWYgc2V0X3ZhdF9yYXRlKHNlbGYsIHZhdF9yYXRlKToKICAgICAgICAiIiJTZXQgVkFUIHJhdGUgZm9yIHByb2R1Y3QuIiIiCiAgICAgICAgcmV0dXJuIGNjYXBpLkNDQVBJLnNldF9wcm9kdWN0X3ZhdF9yYXRlKAogICAgICAgICAgICBwcm9kdWN0X2lkcz1bc2VsZi5pZF0sIHZhdF9yYXRlPXZhdF9yYXRlCiAgICAgICAgKQoKICAgIGRlZiBzZXRfaGFuZGxpbmdfdGltZShzZWxmLCBoYW5kbGluZ190aW1lLCB1cGRhdGVfY2hhbm5lbHM9VHJ1ZSk6CiAgICAgICAgIiIiCiAgICAgICAgU2V0IGhhbmRsaW5nIHRpbWUgZm9yIHByb2R1Y3QuCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIGhhbmRsaW5nX3RpbWU6IE5ldyBoYW5kbGluZyB0aW1lLgoKICAgICAgICBLd2FyZ3M6CiAgICAgICAgICAgIHVwZGF0ZV9jaGFubmVsczogSWYgVHJ1ZSB3aWxsIHVwZGF0ZSBoYW5kbGluZyB0aW1lIG9uIGNoYW5uZWxzLgogICAgICAgICAgICAgICAgRGVmYXVsdDogVHJ1ZS4KICAgICAgICAiIiIKICAgICAgICBjY2FwaS5DQ0FQSS5zZXRfcHJvZHVjdF9oYW5kbGluZ190aW1lKAogICAgICAgICAgICBwcm9kdWN0X2lkPXNlbGYuaWQsCiAgICAgICAgICAgIGhhbmRsaW5nX3RpbWU9aGFuZGxpbmdfdGltZSwKICAgICAgICAgICAgdXBkYXRlX2NoYW5uZWxzPXVwZGF0ZV9jaGFubmVscywKICAgICAgICApCgogICAgZGVmIHNldF9zdG9ja19sZXZlbChzZWxmLCBuZXdfc3RvY2tfbGV2ZWwsIG9sZF9zdG9ja19sZXZlbD1Ob25lKToKICAgICAgICAiIiIKICAgICAgICBTZXQgc3RvY2sgbGV2ZWwgZm9yIHByb2R1Y3QuCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIG5ld19zdG9ja19sZXZlbDogTmV3IHN0b2NrIGxldmVsIGZvciBwcm9kdWN0LgoKICAgICAgICBLd2FyZ3M6CiAgICAgICAgICAgIG9sZF9zdG9ja19sZXZlbDogU3RvY2sgbGV2ZWwgYmVmb3JlIHVwZGF0ZS4gSWYgTm9uZQogICAgICAgICAgICAgICAgc2VsZi5zdG9ja19sZXZlbCB3aWxsIGJlIHVzZWQuIERlZmF1bHQ6IE5vbmUuCiAgICAgICAgIiIiCiAgICAgICAgaWYgb2xkX3N0b2NrX2xldmVsIGlzIE5vbmU6CiAgICAgICAgICAgIG9sZF9zdG9ja19sZXZlbCA9IHNlbGYuc3RvY2tfbGV2ZWwKICAgICAgICBjY2FwaS5DQ0FQSS51cGRhdGVfcHJvZHVjdF9zdG9ja19sZXZlbCgKICAgICAgICAgICAgcHJvZHVjdF9pZD1zZWxmLmlkLAogICAgICAgICAgICBuZXdfc3RvY2tfbGV2ZWw9bmV3X3N0b2NrX2xldmVsLAogICAgICAgICAgICBvbGRfc3RvY2tfbGV2ZWw9b2xkX3N0b2NrX2xldmVsLAogICAgICAgICkKCiAgICBkZWYgc2V0X25hbWUoc2VsZiwgbmFtZSk6CiAgICAgICAgIiIiU2V0IG5hbWUgb2YgUHJvZHVjdC4iIiIKICAgICAgICBjY2FwaS5DQ0FQSS5zZXRfcHJvZHVjdF9uYW1lKG5hbWU9bmFtZSwgcHJvZHVjdF9pZHM9W3NlbGYuaWRdKQogICAgICAgIHNhbGVzX2NoYW5uZWxzID0gc2VsZi5nZXRfc2FsZXNfY2hhbm5lbF9pZHMoKQogICAgICAgIGNjYXBpLkNDQVBJLnVwZGF0ZV9wcm9kdWN0X29uX3NhbGVzX2NoYW5uZWwoCiAgICAgICAgICAgIHJhbmdlX2lkPXNlbGYucmFuZ2VfaWQsCiAgICAgICAgICAgIHByb2R1Y3RfaWRzPVtzZWxmLmlkXSwKICAgICAgICAgICAgcmVxdWVzdF90eXBlPSJuYW1lIiwKICAgICAgICAgICAgdmFsdWVfMT1uYW1lLAogICAgICAgICAgICBjaGFubmVscz1zYWxlc19jaGFubmVscywKICAgICAgICApCgogICAgZGVmIHNldF9kZXNjcmlwdGlvbihzZWxmLCBkZXNjcmlwdGlvbik6CiAgICAgICAgIiIiU2V0IGRlc2NyaXB0aW9uIGZvciBQcm9kdWN0LiIiIgogICAgICAgIGNjYXBpLkNDQVBJLnNldF9wcm9kdWN0X2Rlc2NyaXB0aW9uKAogICAgICAgICAgICBwcm9kdWN0X2lkcz1bc2VsZi5pZF0sIGRlc2NyaXB0aW9uPWRlc2NyaXB0aW9uCiAgICAgICAgKQoKICAgIGRlZiBhZGRfYmF5KHNlbGYsIGJheSk6CiAgICAgICAgIiIiQWRkIHByb2R1Y3QgdG8gV2FyZWhvdXNlIEJheS4iIiIKICAgICAgICBpZiBpc2luc3RhbmNlKGJheSwgV2FyZWhvdXNlQmF5KToKICAgICAgICAgICAgYmF5X2lkID0gYmF5LmlkCiAgICAgICAgZWxzZToKICAgICAgICAgICAgYmF5X2lkID0gYmF5CiAgICAgICAgY2NhcGkuQ0NBUEkuYWRkX3dhcmVob3VzZV9iYXlfdG9fcHJvZHVjdChzZWxmLmlkLCBiYXlfaWQpCgogICAgZGVmIHJlbW92ZV9iYXkoc2VsZiwgYmF5KToKICAgICAgICAiIiJSZW1vdmUgcHJvZHVjdCBmcm9tIFdhcmVob3VzZSBCYXkuIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBpZiBpc2luc3RhbmNlKGJheSwgV2FyZWhvdXNlQmF5KToKICAgICAgICAgICAgYmF5X2lkID0gYmF5LmlkCiAgICAgICAgZWxzZToKICAgICAgICAgICAgYmF5X2lkID0gYmF5Cjx8ZmltX2VuZHw+"]
["99ff447d7776c8269576915772964e00b404c009-3","99ff447d7776c8269576915772964e00b404c009","PHxmaW1fcHJlZml4fD4KZnJvbSBhbnRscjQgaW1wb3J0ICoKZnJvbSAuZ2VuLkJhc2hMZXhlciBpbXBvcnQgQmFzaExleGVyCmZyb20gLmdlbi5CYXNoUGFyc2VyIGltcG9ydCBCYXNoUGFyc2VyCmZyb20gLkJhc2hBU1RWaXNpdG9yIGltcG9ydCBCYXNoQVNUVmlzaXRvcgoKCmRlZiByYXdfcGFyc2UobGluZSk6CiAgICBpbnB1dF9zdHJlYW0gPSBJbnB1dFN0cmVhbShsaW5lKQogICAgbGV4ZXIgPSBCYXNoTGV4ZXIoaW5wdXRfc3RyZWFtKQogICAgc3RyZWFtID0gQ29tbW9uVG9rZW5TdHJlYW0obGV4ZXIpCiAgICBwYXJzZXIgPSBCYXNoUGFyc2VyKHN0cmVhbSkKICAgIHRyZWUgPSBwYXJzZXIucGlwZWxpbmUoKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICByZXR1cm4gdHJlZQoKCjx8ZmltX2VuZHw+"]
["823aa5871001a4a418f9381e01c90aef5f66095e-4","823aa5871001a4a418f9381e01c90aef5f66095e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gLnV0aWxzIGltcG9ydCAqCgoKY2xhc3MgV29yZDJWZWM6CiAgICAiIiIKICAgIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBXb3JkMlZlYy4KCiAgICAjIEFyZ3VtZW50cwogICAgICAgIG1ldGhvZCA6IGBzdHJgCiAgICAgICAgICAgIGNob29zZSBtZXRob2QgZm9yIHdvcmQydmVjIChvcHRpb25zOiAnY2JvdycsICdza2lwZ3JhbScpCiAgICAgICAgICAgIFtkZWZhdWx0OiAnY2JvdyddCiAgICAgICAgd2luZG93X3NpemU6IGBpbnRlZ2VyYAogICAgICAgICAgICBzaXplIG9mIHdpbmRvdyBbZGVmYXVsdDogMV0KICAgICAgICBuX2hpZGRlbjogYGludGVnZXJgCiAgICAgICAgICAgIHNpemUgb2YgaGlkZGVuIGxheWVyIFtkZWZhdWx0OiAyXQogICAgICAgIG5fZXBvY2hzOiBgaW50ZWdlcmAKICAgICAgICAgICAgbnVtYmVyIG9mIGVwb2NocyBbZGVmYXVsdDogMV0KICAgICAgICBsZWFybmluZ19yYXRlOiBgZmxvYXRgIFtkZWZhdWx0OiAwLjFdCiAgICAgICAgY29ycHVzOiBgc3RyYAogICAgICAgICAgICBjb3JwdXMgdGV4dAogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kPSdjYm93Jywgd2luZG93X3NpemU9MSwgbl9oaWRkZW49Miwgbl9lcG9jaHM9MSwgY29ycHVzPScnLCBsZWFybmluZ19yYXRlPTAuMSk6CiAgICAgICAgc2VsZi53aW5kb3cgPSB3aW5kb3dfc2l6ZQogICAgICAgIHNlbGYuTiA9IG5faGlkZGVuCiAgICAgICAgc2VsZi5uX2Vwb2NocyA9IG5fZXBvY2hzCiAgICAgICAgc2VsZi5jb3JwdXMgPSBbY29ycHVzXQogICAgICAgIHNlbGYuZXRhID0gbGVhcm5pbmdfcmF0ZQogICAgICAgIGlmIG1ldGhvZCA9PSAnY2Jvdyc6CiAgICAgICAgICAgIHNlbGYubWV0aG9kID0gc2VsZi5jYm93CiAgICAgICAgZWxpZiBtZXRob2QgPT0gJ3NraXBncmFtJzoKICAgICAgICAgICAgc2VsZi5tZXRob2QgPSBzZWxmLnNraXBncmFtCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTWV0aG9kIG5vdCByZWNvZ25pemVkLiBBYm9ydGluZy4iKQoKICAgIGRlZiBjYm93KHNlbGYsIGNvbnRleHQsIGxhYmVsLCBXMSwgVzIsIGxvc3MpOgogICAgICAgICIiIgogICAgICAgIEltcGxlbWVudGF0aW9uIG9mIENvbnRpbnVvdXMtQmFnLW9mLVdvcmRzIFdvcmQyVmVjIG1vZGVsCiAgICAgICAgOnBhcmFtIGNvbnRleHQ6IGFsbCB0aGUgY29udGV4dCB3b3JkcyAodGhlc2UgcmVwcmVzZW50IHRoZSBpbnB1dHMpCiAgICAgICAgOnBhcmFtIGxhYmVsOiB0aGUgY2VudGVyIHdvcmQgKHRoaXMgcmVwcmVzZW50cyB0aGUgbGFiZWwpCiAgICAgICAgOnBhcmFtIFcxOiB3ZWlnaHRzIGZyb20gdGhlIGlucHV0IHRvIHRoZSBoaWRkZW4gbGF5ZXIKICAgICAgICA6cGFyYW0gVzI6IHdlaWdodHMgZnJvbSB0aGUgaGlkZGVuIHRvIHRoZSBvdXRwdXQgbGF5ZXIKICAgICAgICA6cGFyYW0gbG9zczogZmxvYXQgdGhhdCByZXByZXNlbnRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBsb3NzIGZ1bmN0aW9uCiAgICAgICAgOnJldHVybjogdXBkYXRlZCB3ZWlnaHRzIGFuZCBsb3NzCiAgICAgICAgIiIiCiAgICAgICAgIyBjb250ZXh0IGlzICd4JyBmcm9tIHRva2VuaXplciwgaXQgaXMgYSBjIHggViBtYXRyaXgKICAgICAgICAjIGxhYmVsIGlzICd5JyBmcm9tIHRva2VuaXplciwgaXQgaXMgYSAxIHggViBtYXRyaXgKICAgICAgICAKICAgICAgICB4ID0gbnAubWF0cml4KG5wLm1lYW4oY29udGV4dCwgYXhpcz0wKSkKICAgICAgICAKICAgICAgICAjIHggaXMgYSAxIHggViBtYXRyaXgKICAgICAgICAjIFcxIGlzIGEgVnhOIG1hdHJpeAogICAgICAgICMgaCBpcyBhIE4geCAxIG1hdHJpeAogICAgICAgIGggPSBucC5tYXRtdWwoVzEuVCwgeC5UKQogICAgICAgIAogICAgICAgICMgdSBpcyBhIFYgeCAxIG1hdHJpeAogICAgICAgIHUgPSBucC5tYXRtdWwoVzIuVCwgaCkKICAgICAgICAKICAgICAgICAjIFcyIGlzIGFuIE4geCBWIG1hdHJpeAogICAgICAgICMgeV9wcmVkIGlzIGEgViB4IDEgbWF0cml4CiAgICAgICAgeV9wcmVkID0gc29mdG1heCh1KQogICAgICAgICMgZSBpcyBhIFYgeCAxIG1hdHJpeAogICAgICAgIGUgPSAtbGFiZWwuVCArIHlfcHJlZAogICAgICAgICMgaCBpcyBOIHggMSBhbmQgZSBpcyBWIHggMSBzbyBkVzIgaXMgTiB4IFYKICAgICAgICBkVzIgPSBucC5vdXRlcihoLCBlKQogICAgICAgICMgeC5UIGlzIGEgViB4IDEgbWF0cml4LCBXMmUgaXMgYSBOeDEgc28gZFcxIHRoaXMgaXMgViB4IE4KICAgICAgICBkVzEgPSBucC5vdXRlcih4LlQsIG5wLm1hdG11bChXMiwgZSkpCgogICAgICAgIG5ld19XMSA9IFcxIC0gc2VsZi5ldGEgKiBkVzEKICAgICAgICBuZXdfVzIgPSBXMiAtIHNlbGYuZXRhICogZFcyCgogICAgICAgICMgbGFiZWwgaXMgYSAxeFYgbWF0cml4IHNvIGxhYmVsLlQgaXMgYSBWeDEgbWF0cml4CiAgICAgICAgbG9zcyArPSAtZmxvYXQodVtsYWJlbC5UID09IDFdKSArIG5wLmxvZyhucC5zdW0obnAuZXhwKHUpKSkKCiAgICAgICAgcmV0dXJuIG5ld19XMSwgbmV3X1cyLCBsb3NzCgogICAgZGVmIHNraXBncmFtKHNlbGYsIGNvbnRleHQsIHgsIFcxLCBXMiwgbG9zcyk6CiAgICAgICAgIiIiCiAgICAgICAgSW1wbGVtZW50YXRpb24gb2YgU2tpcC1HcmFtIFdvcmQyVmVjIG1vZGVsCiAgICAgICAgOnBhcmFtIGNvbnRleHQ6IGFsbCB0aGUgY29udGV4dCB3b3JkcyAodGhlc2UgcmVwcmVzZW50IHRoZSBsYWJlbHMpCiAgICAgICAgOnBhcmFtIHg6IHRoZSBjZW50ZXIgd29yZCAodGhpcyByZXByZXNlbnRzIHRoZSBpbnB1dCkKICAgICAgICA6cGFyYW0gVzE6IHdlaWdodHMgZnJvbSB0aGUgaW5wdXQgdG8gdGhlIGhpZGRlbiBsYXllcgogICAgICAgIDpwYXJhbSBXMjogd2VpZ2h0cyBmcm9tIHRoZSBoaWRkZW4gdG8gdGhlIG91dHB1dCBsYXllcgogICAgICAgIDpwYXJhbSBsb3NzOiBmbG9hdCB0aGF0IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGxvc3MgZnVuY3Rpb24KICAgICAgICA6cmV0dXJuOiB1cGRhdGVkIHdlaWdodHMgYW5kIGxvc3MKICAgICAgICAiIiIKICAgICAgICAjIGNvbnRleHQgaXMgIngiIGZyb20gdG9rZW5pemVyLCBpdCBpcyBhIGMgeCBWIG1hdHJpeAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIyAieCIgaXMgInkiIGZyb20gdG9rZW5pemVyLCBpdCBpcyBhIDEgeCBWIG1hdHJpeAogICAgICAgICMgVzEgaGFzIGRpbWVuc2lvbiBWIHggTiAoTj0gbnVtYmVyIG9mIGZlYXR1cmVzLCBWID0gdm9jYWIgc2l6ZSkKICAgICAgICAjIHggaGFzIGRpbWVuc2lvbiBWIHggMQogICAgICAgIGggPSBucC5tYXRtdWwoVzEuVCwgeC5UKQo8fGZpbV9lbmR8Pg=="]
["6bde1b59d2387a47512c14fe559c89eb03b93412-3","6bde1b59d2387a47512c14fe559c89eb03b93412","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zLHN5cwppbXBvcnQgcHlnYW1lCmZyb20gcHlnYW1lLmxvY2FscyBpbXBvcnQgKgppbXBvcnQgcmFuZG9tCgpkZWYgbG9hZF9pbWFnZShuYW1lLGNvbG9yX2tleT1Ob25lKToKCXRyeToKCQlpbWFnZT1weWdhbWUuaW1hZ2UubG9hZChuYW1lKQoJZXhjZXB0OgoJCXByaW50KCdDYW5ub3QgbG9hZCBpbWFnZTonLG5hbWUpCgkJc3lzLmV4aXQoKQoJaW1hZ2U9aW1hZ2UuY29udmVydCgpCglpZiBjb2xvcl9rZXkgaXMgbm90IE5vbmU6CgkJaWYgY29sb3Jfa2V5IGlzIC0xOgoJCQljb2xvcl9rZXk9IGltYWdlLmdldF9hdCgoMCwwKSkKCQlpbWFnZS5zZXRfY29sb3JrZXkoY29sb3Jfa2V5LFJMRUFDQ0VMKQoJcmV0dXJuIGltYWdlLGltYWdlLmdldF9yZWN0KCkKCmRlZiBsb2FkX3NvdW5kKG5hbWUpOgkKCXRyeToKCQlzb3VuZD1weWdhbWUubWl4ZXIuU291bmQobmFtZSkKCWV4Y2VwdDoKCQlwcmludCgnQ2Fubm90IGxvYWQgU291bmQ6JyxuYW1lKQoJcmV0dXJuIHNvdW5kCgkKZGVmIHVwZGF0ZV9hbGwobm8pOgoJY2FyLnVwZGF0ZShubykKCQoKY2xhc3MgQ2FyKHB5Z2FtZS5zcHJpdGUuU3ByaXRlKToKCglkZWYgX19pbml0X18oc2VsZik6CgkJc3VwZXIoQ2FyLHNlbGYpLl9faW5pdF9fKCkKCQlzZWxmLmltYWdlLHNlbGYucmVjdD1sb2FkX2ltYWdlKCdjYXIucG5nJywtMSkKCQlzZWxmLnJlY3QuY2VudGVyeD00MDEKCQlzZWxmLnJlY3QuY2VudGVyeT01MDYKCQoJZGVmIHVwZGF0ZShzZWxmLHN0YXRlKToKCQlpZiBzdGF0ZToKCQkJc2VsZi5yZWN0LmNlbnRlcngrPTgKCQllbHNlOgoJCQlzZWxmLnJlY3QuY2VudGVyeC09OAoJCWlmIHNlbGYucmVjdC5sZWZ0PDU0OgoJCQlzZWxmLnJlY3QubGVmdD01NAoJCWlmIHNlbGYucmVjdC5yaWdodD42ODA6CgkJCXNlbGYucmVjdC5yaWdodD02ODAKCQlsaXN0PXB5Z2FtZS5zcHJpdGUuc3ByaXRlY29sbGlkZShjYXIsb2JzdGFjbGVzLFRydWUpCgkJaWYgbGVuKGxpc3QpOgoJCQlzeXMuZXhpdCgpCgpjbGFzcyBPYnN0YWNsZShweWdhbWUuc3ByaXRlLlNwcml0ZSk6CgoJZGVmIF9faW5pdF9fKHNlbGYsbGFuZSx0eXBlKToKCQlzdXBlcihPYnN0YWNsZSxzZWxmKS5fX2luaXRfXygpCgkJc2VsZi5pbWFnZT1Ob25lCgkJc2VsZi5yZWN0PS0xMDAKCQlzZWxmLnR5cGU9dHlwZQoJCWlmIHR5cGUgaXMgMDoKCQkJc2VsZi5pbWFnZSxzZWxmLnJlY3Q9bG9hZF9pbWFnZSgnYmFycmllci5wbmcnLC0xKQoJCWlmIHR5cGUgaXMgMToKCQkJc2VsZi5pbWFnZSxzZWxmLnJlY3Q9bG9hZF9pbWFnZSgncG9saWNlX2Nhci5wbmcnLC0xKQoJCWlmIHR5cGUgaXMgMjoKCQkJc2VsZi5pbWFnZSxzZWxmLnJlY3Q9bG9hZF9pbWFnZSgncG90aG9sZS5wbmcnLC0xKQoJCWlmIHR5cGUgaXMgMzoKCQkJc2VsZi5pbWFnZSxzZWxmLnJlY3Q9bG9hZF9pbWFnZSgndGF4aS5qcGcnLC0xKQoJCWlmIHR5cGUgaXMgNDoKCQkJc2VsZi5pbWFnZSxzZWxmLnJlY3Q9bG9hZF9pbWFnZSgndHJ1Y2suanBnJywoMjU1LDI1NSwyNTUpKQoJCWlmIGxhbmUgaXMgMDoKCQkJc2VsZi5yZWN0LmNlbnRlcng9MTcyCgkJaWYgbGFuZSBpcyAxOgoJCQlzZWxmLnJlY3QuY2VudGVyeD0zMjcKCQlpZiBsYW5lIGlzIDI6CgkJCXNlbGYucmVjdC5jZW50ZXJ4PTQ4NwoJCWlmIGxhbmUgaXMgMzoKCQkJc2VsZi5yZWN0LmNlbnRlcng9NjQ1CgoJCXNlbGYucmVjdC5ib3R0b209MAoJCgkKCWRlZiB1cGRhdGUoc2VsZik6CgkJaWYgc2VsZi50eXBlIGlzIDA6CgkJCXNlbGYucmVjdC5jZW50ZXJ5Kz1zcGVlZAoJCWlmIHNlbGYudHlwZSBpcyAxOgoJCQlzZWxmLnJlY3QuY2VudGVyeSs9KHNwZWVkK3NwZWVkLzIpCgkJaWYgc2VsZi50eXBlIGlzIDI6CgkJCXNlbGYucmVjdC5jZW50ZXJ5Kz1zcGVlZAoJCWlmIHNlbGYudHlwZSBpcyAzOgoJCQlzZWxmLnJlY3QuY2VudGVyeSs9KHNwZWVkK3NwZWVkLzMpCgkJaWYgc2VsZi50eXBlIGlzIDQ6CgkJCXNlbGYucmVjdC5jZW50ZXJ5Kz0oc3BlZWQrc3BlZWQvNCkKCgkJCQkJCQkJCgkJCgoJCQkKCQkKY2xhc3MgVHJlZShweWdhbWUuc3ByaXRlLlNwcml0ZSk6CgoJZGVmIF9faW5pdF9fKHNlbGYsbm8sbm9zKToKCQlzdXBlcihUcmVlLHNlbGYpLl9faW5pdF9fKCkKCQlzZWxmLmltYWdlPU5vbmUKCQlzZWxmLnJlY3Q9Tm9uZQoJCWlmIG5vczoKCQkJaWYgbm86CgoJCQkJc2VsZi5pbWFnZSxzZWxmLnJlY3Q9bG9hZF9pbWFnZSgndHJlZS5qcGcnLC0xKQoJCQllbHNlOgoJCQkJc2VsZi5pbWFnZSxzZWxmLnJlY3Q9bG9hZF9pbWFnZSgndHJlZXRvcC5wbmcnLC0xKQoJCQoJCQlzZWxmLnJlY3QuY2VudGVyeD00NQoJCQlzZWxmLnJlY3QuY2VudGVyeT01MAoJCWVsc2U6CgkJCWlmIG5vOgoKCQkJCXNlbGYuaW1hZ2Usc2VsZi5yZWN0PWxvYWRfaW1hZ2UoJ3RyZWUuanBnJywtMSkKCQkJZWxzZToKCQkJCXNlbGYuaW1hZ2Usc2VsZi5yZWN0PWxvYWRfaW1hZ2UoJ3RyZWV0b3AucG5nJywtMSkKCQkKCQkJc2VsZi5yZWN0LmNlbnRlcng9Nzc2CgkJCXNlbGYucmVjdC5jZW50ZXJ5PTUwCgkJCglkZWYgdXBkYXRlKHNlbGYpOgoJCXNlbGYucmVjdC5jZW50ZXJ5Kz1zcGVlZAoJCQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpweWdhbWUuaW5pdCgpCgpzY3JlZW49cHlnYW1lLmRpc3BsYXkuc2V0X21vZGUoKDgzMCw2NTApKQo8fGZpbV9lbmR8Pg=="]
["824148be1615e3bc93887b637b8413843c7fad5c-1","824148be1615e3bc93887b637b8413843c7fad5c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNoZWNrb3V0X3NkawoKCmNsYXNzIFJlc3BvbnNlRFRPOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGt2cD1Ob25lLAogICAgICAgICAgICAgICAgIHJlYWRfb25seT1jaGVja291dF9zZGsuZGVmYXVsdF9yZXNwb25zZV9pbW11dGFibGUpOgogICAgICAgIGlmIGt2cCBpcyBub3QgTm9uZSBhbmQgbm90IGlzaW5zdGFuY2Uoa3ZwLCBkaWN0KToKICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdEaWN0aW9uYXJ5IGV4cGVjdGVkJykKCiAgICAgICAgIyBsb2FkIHRoZSBEVE8KICAgICAgICBzZWxmLl9yZWFkX29ubHkgPSBGYWxzZQogICAgICAgIHNlbGYuX2t2cCA9IHt9CiAgICAgICAgaWYga3ZwIGlzIG5vdCBOb25lOgogICAgICAgICAgICBmb3IgKGssIHYpIGluIGt2cC5pdGVtcygpOgogICAgICAgICAgICAgICAgIyBjYWxscyBfX3NldGl0ZW1fXyBmdXJ0aGVyIGJlbG93CiAgICAgICAgICAgICAgICBzZWxmW2tdID0gdgoKICAgICAgICAjIG1ha2UgdGhlIERUTyBpbW11dGFibGUgaWYgcmVxdWlyZWQKICAgICAgICBzZWxmLl9yZWFkX29ubHkgPSByZWFkX29ubHkKCiAgICAjIG9ubHkgY2FsbGVkIGZvciBhdHRyaWJ1dGVzIHdoaWNoIGFyZSBub3QgZGVjbGFyZWQgZGlyZWN0bHkKICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBrKToKICAgICAgICAjIHRoaXMgd2lsbCBpbiB0dXJuIGNhbGwgX19nZXRpdGVtX18KICAgICAgICAjIHdlIGNhdGNoIEtleUVycm9yIHRvIHJhaXNlIEF0dHJpYnV0ZUVycm9yCiAgICAgICAgIyB0aGlzIG1haW50YWlucyBleHBlY3RlZCBiZWhhdmlvdXIKICAgICAgICAjICAgd2hlbiB1c2VkIHdpdGggZ2V0YXR0cigpIGFuZCBoYXNhdHRyKCkKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJldHVybiBzZWxmW2tdCiAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcgoKICAgICMgS2V5RXJyb3IgaWYga2V5IGRvZXMgbm90IGV4aXN0CiAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgayk6CiAgICAgICAgcmV0dXJuIHNlbGYuX2t2cFtrXQoKICAgICMgc2FmZXIgb3B0aW9uIHdpdGggZmFsbGJhY2sgb3B0aW9uIChOb25lIGFzIGRlZmF1bHQpCiAgICBkZWYgZ2V0KHNlbGYsIGssIGQ9Tm9uZSk6CiAgICAgICAgcmV0dXJuIHNlbGYuX2t2cC5nZXQoaywgZCkKCiAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwgaywgdik6CiAgICAgICAgIyBhdm9pZGluZyBpbmZpbml0ZSBsb29wIGhlcmUKICAgICAgICAjIHByaXZhdGUgYXR0cmlidXRlcyBhcmUgcmVnaXN0ZXJlZCB2aWEgdGhlIHN1cGVyIGNsYXNzIChgb2JqZWN0YCkKICAgICAgICBpZiBrWzBdID09ICdfJzoKICAgICAgICAgICAgc3VwZXIoKS5fX3NldGF0dHJfXyhrLCB2KQogICAgICAgIGVsc2U6CiAgICAgICAgICAgICMgdGhpcyB3aWxsIGluIHR1cm4gY2FsbCBfX3NldGl0ZW1fXwogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBzZWxmW2tdID0gdgogICAgICAgICAgICBleGNlcHQgS2V5RXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoZXJyKQoKICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrLCB2KToKICAgICAgICBpZiBzZWxmLl9yZWFkX29ubHk6CiAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKAogICAgICAgICAgICAgICAgJ3t9IGlzIHJlYWQtb25seS4nLmZvcm1hdChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXykpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2LCBkaWN0KToKICAgICAgICAgICAgICAgIHNlbGYuX2t2cFtrXSA9IFJlc3BvbnNlRFRPKHYsIHNlbGYuX3JlYWRfb25seSkKICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHYsIGxpc3QpOgogICAgICAgICAgICAgICAgc2VsZi5fa3ZwW2tdID0gW1Jlc3BvbnNlRFRPKGl0ZW0sIHNlbGYuX3JlYWRfb25seSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiB2XQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgc2VsZi5fa3ZwW2tdID0gdgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9rdnApCjx8ZmltX2VuZHw+"]
["41f96739ff5c5f925e08ff9fcf38e30289f587e6-1","41f96739ff5c5f925e08ff9fcf38e30289f587e6","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IHNtdHBsaWIKZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBFbWFpbE1lc3NhZ2UKZnJvbSBlbWFpbC5oZWFkZXJyZWdpc3RyeSBpbXBvcnQgQWRkcmVzcwoKCmNsYXNzIE1haWxBY2NvdW50OgogICAgIiIiCiAgICBTdG9yZXMgc2V0dGluZ3MgZm9yIGFuIGVtYWlsIGFjY291bnQuCiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXIsICBwb3J0LCBsb2dpbiwgIHBhc3N3b3JkLCAgc2VuZGVyX2VtYWlsLCAgc2VuZGVyX25hbWUsICB1c2VfdGxzPUZhbHNlKToKICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlcgogICAgICAgIHNlbGYubG9naW4gPSBsb2dpbgogICAgICAgIHNlbGYucGFzc3dvcmQgPSBwYXNzd29yZAogICAgICAgIHNlbGYuc2VuZGVyX2VtYWlsID0gc2VuZGVyX2VtYWlsCiAgICAgICAgc2VsZi5zZW5kZXJfbmFtZSA9IHNlbmRlcl9uYW1lCiAgICAgICAgc2VsZi51c2VfdGxzID0gdXNlX3RscwogICAgICAgIAoKICAgIGRlZiBzZW5kX2VtYWlsKHNlbGYsIHJlY2lwaWVudF9lbWFpbCwgc3ViamVjdCwgYm9keSk6CiAgICAgICAgIiIiU2VuZHMgYW4gZW1haWwgdG8gYSBkZWZpbmVkIGFkZHJlc3MuICIiIgogICAgICAgIAogICAgICAgICMgcHJlcGFyZSBtZXNzYWdlCiAgICAgICAgbXNnID0gRW1haWxNZXNzYWdlKCkKICAgICAgICBtc2dbJ1N1YmplY3QnXSA9IHN1YmplY3QKICAgICAgICBtc2dbJ0Zyb20nXSA9IEFkZHJlc3Moc2VsZi5zZW5kZXJfZW1haWwpICNzZWxmLnNlbmRlcl9uYW1lLCBhZGRyX3NwZWM9CiAgICAgICAgbXNnWydUbyddID0gQWRkcmVzcyhzZWxmLnNlbmRlcl9uYW1lLCByZWNpcGllbnRfZW1haWwpCgogICAgICAgIG1zZy5zZXRfY29udGVudChib2R5KQoKICAgICAgICAnJycKICAgICAgICBtZXNzYWdlID0gTUlNRVRleHQoYm9keSkKICAgICAgICBtZXNzYWdlWyJTdWJqZWN0Il0gPSBzdWJqZWN0IAogICAgICAgIG1lc3NhZ2VbIkZyb20iXSA9IHNlbGYubWFpbAogICAgICAgIG1lc3NhZ2VbIlRvIl0gPSByZWNpcGllbnRfZW1haWwKICAgICAgICBtc2cgPSBtZXNzYWdlLmFzX3N0cmluZygpCiAgICAgICAgJycnCiAgICAgICAgCiAgICAgICAgc2VydmVyID0gc210cGxpYi5TTVRQKHNlbGYuc2VydmVyKQogICAgICAgIAogICAgICAgIGlmIHNlbGYudXNlX3RsczogIyBkZWxpYmVyYXRlbHkgc3RhcnRzIHRscyBpZiB1c2luZyBUTFMKICAgICAgICAgICAgc2VydmVyLmVobG8oKQogICAgICAgICAgICBzZXJ2ZXIuc3RhcnR0bHMoKQo8fGZpbV9ob2xlfD4KICAgICAgICBzZXJ2ZXIubG9naW4oc2VsZi5sb2dpbiwgc2VsZi5wYXNzd29yZCkgCiAgICAgICAgc2VydmVyLnNlbmRfbWVzc2FnZShtc2cpCiAgICAgICAgc2VydmVyLnF1aXQoKQogICAgICAgIHJldHVybgoKICAgICAgICAKICAgIGRlZiBzZW5kX2VtYWlsX2F0dGFjaChzZWxmLCByZWNpcGllbnRfZW1haWwsIHN1YmplY3QsIGJvZHksIGF0dGFjaG10LCBmaWxlbmFtZSk6CiAgICAgICAgIiIiU2VuZHMgYW4gZW1haWwgdG8gYSBkZWZpbmVkIGFkZHJlc3MuICIiIgogICAgICAgICMgcHJlcGFyZSBtZXNzYWdlCiAgICAgICAgbWVzc2FnZSA9IE1JTUVNdWx0aXBhcnQoKQogICAgICAgIG1lc3NhZ2VbIlN1YmplY3QiXSA9IHN1YmplY3QgCiAgICAgICAgbWVzc2FnZVsiRnJvbSJdID0gc2VsZi5zZW5kZXJfZW1haWwKICAgICAgICBtZXNzYWdlWyJUbyJdID0gcmVjaXBpZW50X2VtYWlsCiAgICAgICAgbWVzc2FnZS5wcmVhbWJsZSA9IGJvZHkKCiAgICAgICAgIyB0ZXh0CiAgICAgICAgbXNnID0gTUlNRVRleHQoYm9keSkKICAgICAgICBtc2cuYWRkX2hlYWRlcigndGV4dCcsICdwbGFpbicpCiAgICAgICAgbWVzc2FnZS5hdHRhY2gobXNnKQoKICAgICAgICAjIGF0dGFjaG1lbnQKICAgICAgICBmYiA9IG9wZW4oYXR0YWNobXQsICdyYicpCiAgICAgICAgbXNnID0gTUlNRUJhc2UoJ2FwcGxpY2F0aW9uJywgJ3BkZicpCiAgICAgICAgbXNnLnNldF9wYXlsb2FkKGZiLnJlYWQoKSkKICAgICAgICBmYi5jbG9zZSgpCiAgICAgICAgZW5jb2RlcnMuZW5jb2RlX2Jhc2U2NChtc2cpCiAgICAgICAgbXNnLmFkZF9oZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnYXR0YWNobWVudCcsIGZpbGVuYW1lPWZpbGVuYW1lKQogICAgICAgIG1lc3NhZ2UuYXR0YWNoKG1zZykKCiAgICAgICAgY29tcG9zZWQgPSBtZXNzYWdlLmFzX3N0cmluZygpCgogICAgICAgIHNlcnZlciA9IHNtdHBsaWIuU01UUChzZWxmLnNlcnZlcikKICAgICAgICBzZXJ2ZXIuc2V0X2RlYnVnbGV2ZWwoMSkKIAogICAgICAgIGlmIHNlbGYudXNlX3RsczogIyBkZWxpYmVyYXRlbHkgc3RhcnRzIHRscyBpZiB1c2luZyBUTFMKICAgICAgICAgICAgc2VydmVyLmVobG8oKQogICAgICAgICAgICBzZXJ2ZXIuc3RhcnR0bHMoKQogICAgICAgICAgICBzZXJ2ZXIuZWhsbygpCiAgICAgICAgICAgIAogICAgICAgIHNlcnZlci5sb2dpbihzZWxmLmxvZ2luLCBzZWxmLnBhc3N3b3JkKSAKICAgICAgICBzZXJ2ZXIuc2VuZG1haWwoc2VsZi5tYWlsLCByZWNpcGllbnRfZW1haWwsIGNvbXBvc2VkKQogICAgICAgIHNlcnZlci5xdWl0KCkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgc2VydmVyLmVobG8oKQogICAgICAgICAgICAKPHxmaW1fZW5kfD4="]
["998ebea020cffe8b80388ad3ffc160be5fdedf6b-2","998ebea020cffe8b80388ad3ffc160be5fdedf6b","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgppbXBvcnQgb3MKaW1wb3J0IHN5cwppbXBvcnQgc3VicHJvY2VzcwppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCBsb2dnaW5nCmZyb20gUXVldWUgaW1wb3J0IFF1ZXVlCmZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQKZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQb3BlbiwgUElQRQoKCmNsYXNzIFdvcmtlcihUaHJlYWQpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHF1ZXVlKToKICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZikKICAgICAgICBzZWxmLnF1ZXVlID0gcXVldWUKCiAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgIGRvbmUgPSBGYWxzZQogICAgICAgIHdoaWxlIG5vdCBkb25lOgogICAgICAgICAgICBpZiBzZWxmLnF1ZXVlLmVtcHR5KCk6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBpZCwgY21kLCBvdXRwdXRfZmlsZSA9IHNlbGYucXVldWUuZ2V0KCkKICAgICAgICAgICAgaG9zdG5hbWUgPSAiMTI4LjExMC4xNTQuMTczIgogICAgICAgICAgICBwb3J0ID0gNTIwMSArIGlkCjx8ZmltX2hvbGV8PgogICAgICAgICAgICMgd2l0aCBvcGVuKG91dHB1dF9maWxlLCAid2IiLCAwKSBhcyBvdXQ6CiAgICAgICAgICAgICMgICAgc3VicHJvY2Vzcy5Qb3BlbihbIi4vZ1Zpc29yLXRlc3QtY29tbWFuZC5zaCIsIHN0cihpZCldLCBzdGRvdXQ9b3V0LCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCiAgICAgICAgICAgICNjcHUvZmlvCiAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2FsbChbIi4vZ1Zpc29yLXRlc3QtY29tbWFuZC5zaCIsc3RyKGlkKV0pCiAgICAgICAgICAgICNwcmludChvdXRwdXQpCiAgICAgICAgICAgICNuZXQKICAgICAgICAgICAgI291dHB1dD0gc3VicHJvY2Vzcy5jYWxsKFsiLi9nVmlzb3ItdGVzdC1jb21tYW5kLnNoIiwgc3RyKGhvc3RuYW1lKSwgc3RyKHBvcnQpLCBzdHIoaWQpXSkKICAgICAgICAgICAgI3ByaW50IChvdXRwdXQpCiAgICAgICAgICAgICNzZXNzaW9uID0gc3VicHJvY2Vzcy5Qb3BlbihbIi4vZ1Zpc29yLXRlc3QtY29tbWFuZC5zaCIsIHN0cihpZCldLCBzdGRvdXQ9UElQRSwgc3RkZXJyPVBJUEUpCiAgICAgICAgICAgICAgICAjbmV0CiAgICAgICAgICAgICAgICAjc3VicHJvY2Vzcy5Qb3BlbihbIi4vZ1Zpc29yLXRlc3QtY29tbWFuZC5zaCIsIHN0cihob3N0bmFtZSksIHN0cihwb3J0KSwgc3RyKGlkKV0sIHN0ZG91dD1vdXQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKCiAgICAgICAgICAgIyBwcmludChvdXQpCiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIGRvbmUgPSBUcnVlCiAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICBzZWxmLnF1ZXVlLnRhc2tfZG9uZSgpCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdGhyZWFkcyA9IFtdCiAgICAjY29tbWFuZCA9ICJscyIKICAgIGNvbW1hbmQgPSAiZG9ja2VyIHJ1biAtLXJtIC12IC9yb290L1NlY3VyZS1TZXJ2ZXJsZXNzL2RvY2tlci90YXNrOi92YXIvdGFzayBsYW1iY2kvbGFtYmRhOnB5dGhvbjIuNyBpb19sYW1iZGFfZnVuY3Rpb24ubGFtYmRhX2hhbmRsZXIiCiAgICBvdXRwdXRfZmlsZSA9ICJndmlzb3ItdGVzdCIKICAgIHEgPSBRdWV1ZShtYXhzaXplPTApCiAgICAjc2V0IHRoZSB0b3RhbCB0aHJlYWQgbnVtYmVyCiAgICB0b3RhbF90aHJlYWQgPSBpbnQoc3lzLmFyZ3ZbMV0pCgogICAgZm9yIGkgaW4gcmFuZ2UodG90YWxfdGhyZWFkKToKICAgICAgICB0aHJlYWRzLmFwcGVuZChjb21tYW5kKQoKICAgICNwcmludCh0aHJlYWRzKQogICAgZm9yIGkgaW4gcmFuZ2UodG90YWxfdGhyZWFkKToKICAgICAgICB3b3JrZXIgPSBXb3JrZXIocSkKICAgICAgICB3b3JrZXIuZGFlbW9uID0gVHJ1ZSAgIyBzZXR0aW5nIHRocmVhZHMgYXMgImRhZW1vbiIgYWxsb3dzIG1haW4gcHJvZ3JhbSB0bwogICAgICAgICMgZXhpdCBldmVudHVhbGx5IGV2ZW4gaWYgdGhlc2UgZG9udCBmaW5pc2gKICAgICAgICAjIGNvcnJlY3RseS4KICAgICAgICB3b3JrZXIuc3RhcnQoKQogICAgICAgICN0aHJlYWRzLmFwcGVuZCh3b3JrZXIpCgogICAgY291bnQgPSAwCiAgICBmb3IgY21kIGluIHRocmVhZHM6CiAgICAgICAgcS5wdXQoKGNvdW50LCBjbWQsIG91dHB1dF9maWxlICsgc3RyKGNvdW50KSArICIudHh0IikpCiAgICAgICAgY291bnQgPSBjb3VudCArMQoKICAgICNmb3IgaSBpbiByYW5nZSh0b3RhbF90aHJlYWQpOgoKCiAgICAjd2FpdCB1bnRpbCB0aGUgcXVldWUgaGFzIGJlZW4gcHJvY2Vzc2VkCiAgICBxLmpvaW4oKQogICAKICAgIyBmb3Igd29ya2VyIGluIHRocmVhZHM6CiAgICAjICAgIHdvcmtlci5qb2luKCkKCiAgICBsb2dnaW5nLmluZm8oJ0RvbmUhJykKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgI3ByaW50KCIgY29tbWFuZCIsIGNtZCkKICAgICAgICAgICAgI3ByaW50KCdcbicpCiAgICAgICAgICAgICN3aXRoIG9wZW4ob3V0cHV0X2ZpbGUsICJ3YiIsIDApIGFzIG91dDoKICAgICAgICAgICAgcHJpbnQoImhlbGxvIikKPHxmaW1fZW5kfD4="]
["2e643a2c8b97cf80f3bcde90618843a8cd56ed53-3","2e643a2c8b97cf80f3bcde90618843a8cd56ed53","PHxmaW1fcHJlZml4fD4KCmZyb20gZGphbmdvLnRlc3QgaW1wb3J0IFRlc3RDYXNlCgpmcm9tIHNyYy5lbmNvZGluZy5jb21tb24gaW1wb3J0IGdldF9lbmNvZGVkX2xvZ3MKZnJvbSBzcmMuZW5jb2RpbmcubW9kZWxzIGltcG9ydCBWYWx1ZUVuY29kaW5ncwpmcm9tIHNyYy5leHBsYW5hdGlvbi5tb2RlbHMgaW1wb3J0IEV4cGxhbmF0aW9uLCBFeHBsYW5hdGlvblR5cGVzCmZyb20gc3JjLmV4cGxhbmF0aW9uLnJldHJhaW5fd3JhcHBlciBpbXBvcnQgcmFuZG9taXNlX2ZlYXR1cmVzLCBzYXZlX3JhbmRvbWlzZWRfc2V0LCBleHBsYWluCmZyb20gc3JjLmpvYnMubW9kZWxzIGltcG9ydCBKb2JUeXBlcwpmcm9tIHNyYy5qb2JzLnRhc2tzIGltcG9ydCBwcmVkaWN0aW9uX3Rhc2sKZnJvbSBzcmMubGFiZWxsaW5nLm1vZGVscyBpbXBvcnQgTGFiZWxUeXBlcwpmcm9tIHNyYy5wcmVkaWN0aXZlX21vZGVsLmNsYXNzaWZpY2F0aW9uLm1vZGVscyBpbXBvcnQgQ2xhc3NpZmljYXRpb25NZXRob2RzCmZyb20gc3JjLnByZWRpY3RpdmVfbW9kZWwubW9kZWxzIGltcG9ydCBQcmVkaWN0aXZlTW9kZWxzCmZyb20gc3JjLnNwbGl0Lm1vZGVscyBpbXBvcnQgU3BsaXRUeXBlcywgU3BsaXRPcmRlcmluZ01ldGhvZHMKZnJvbSBzcmMudXRpbHMudGVzdHNfdXRpbHMgaW1wb3J0IGNyZWF0ZV90ZXN0X2xvZywgY3JlYXRlX3Rlc3Rfc3BsaXQsIGNyZWF0ZV90ZXN0X2pvYiwgY3JlYXRlX3Rlc3RfcHJlZGljdGl2ZV9tb2RlbCwgXAogICAgY3JlYXRlX3Rlc3RfbGFiZWxsaW5nLCBjcmVhdGVfdGVzdF9lbmNvZGluZwoKCmNsYXNzIFRlc3RSZXRyYWluV3JhcHBlcihUZXN0Q2FzZSk6CiAgICAiIiJQcm9vZiBvZiBjb25jZXB0IHRlc3RzIiIiCgogICAgZGVmIHNldFVwKHNlbGYpIC0+IE5vbmU6CgogICAgICAgIHNwbGl0ID0gY3JlYXRlX3Rlc3Rfc3BsaXQoCiAgICAgICAgICAgIHNwbGl0X3R5cGU9U3BsaXRUeXBlcy5TUExJVF9ET1VCTEUudmFsdWUsCiAgICAgICAgICAgIHNwbGl0X29yZGVyaW5nX21ldGhvZD1TcGxpdE9yZGVyaW5nTWV0aG9kcy5TUExJVF9TRVFVRU5USUFMLnZhbHVlLAogICAgICAgICAgICB0ZXN0X3NpemU9MC4yLAogICAgICAgICAgICBvcmlnaW5hbF9sb2c9Tm9uZSwKICAgICAgICAgICAgdHJhaW5fbG9nPWNyZWF0ZV90ZXN0X2xvZygKICAgICAgICAgICAgICAgIGxvZ19uYW1lPSd0cmFpbl9leHBsYWluYWJpbGl0eS54ZXMnLAogICAgICAgICAgICAgICAgbG9nX3BhdGg9J2NhY2hlL2xvZ19jYWNoZS90ZXN0X2xvZ3MvdHJhaW5fZXhwbGFpbmFiaWxpdHkueGVzJwogICAgICAgICAgICApLAogICAgICAgICAgICB0ZXN0X2xvZz1jcmVhdGVfdGVzdF9sb2coCiAgICAgICAgICAgICAgICBsb2dfbmFtZT0ndGVzdF9leHBsYWluYWJpbGl0eS54ZXMnLAogICAgICAgICAgICAgICAgbG9nX3BhdGg9J2NhY2hlL2xvZ19jYWNoZS90ZXN0X2xvZ3MvdGVzdF9leHBsYWluYWJpbGl0eS54ZXMnCiAgICAgICAgICAgICkKICAgICAgICApCgogICAgICAgIHByZWRpY3RpdmVfbW9kZWwgPSBjcmVhdGVfdGVzdF9wcmVkaWN0aXZlX21vZGVsKAogICAgICAgICAgICBwcmVkaWN0aXZlX21vZGVsPVByZWRpY3RpdmVNb2RlbHMuQ0xBU1NJRklDQVRJT04udmFsdWUsCiAgICAgICAgICAgIHByZWRpY3Rpb25fbWV0aG9kPUNsYXNzaWZpY2F0aW9uTWV0aG9kcy5ERUNJU0lPTl9UUkVFLnZhbHVlCiAgICAgICAgKQoKICAgICAgICBzZWxmLmpvYiA9IGNyZWF0ZV90ZXN0X2pvYigKICAgICAgICAgICAgc3BsaXQ9c3BsaXQsCiAgICAgICAgICAgIGVuY29kaW5nPWNyZWF0ZV90ZXN0X2VuY29kaW5nKAogICAgICAgICAgICAgICAgcHJlZml4X2xlbmd0aD00LAogICAgICAgICAgICAgICAgcGFkZGluZz1UcnVlLAogICAgICAgICAgICAgICAgdmFsdWVfZW5jb2Rpbmc9VmFsdWVFbmNvZGluZ3MuU0lNUExFX0lOREVYLnZhbHVlCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGxhYmVsbGluZz1jcmVhdGVfdGVzdF9sYWJlbGxpbmcoCiAgICAgICAgICAgICAgICBsYWJlbF90eXBlPUxhYmVsVHlwZXMuQVRUUklCVVRFX1NUUklORy52YWx1ZSwKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZV9uYW1lPSdsYWJlbCcKICAgICAgICAgICAgKSwKICAgICAgICAgICAgY2x1c3RlcmluZz1Ob25lLAogICAgICAgICAgICBjcmVhdGVfbW9kZWxzPUZhbHNlLAogICAgICAgICAgICBwcmVkaWN0aXZlX21vZGVsPXByZWRpY3RpdmVfbW9kZWwsCiAgICAgICAgICAgIGpvYl90eXBlPUpvYlR5cGVzLlBSRURJQ1RJT04udmFsdWUsCiAgICAgICAgICAgIGh5cGVycGFyYW1ldGVyX29wdGltaXplcj1Ob25lLAogICAgICAgICAgICBpbmNyZW1lbnRhbF90cmFpbj1Ob25lCiAgICAgICAgKQoKICAgICAgICBwcmVkaWN0aW9uX3Rhc2soc2VsZi5qb2IuaWQsIGRvX3B1Ymxpc2hfcmVzdWx0PUZhbHNlKQogICAgICAgIHNlbGYuam9iLnJlZnJlc2hfZnJvbV9kYigpCgogICAgICAgIHNlbGYuZXhwID0gRXhwbGFuYXRpb24ub2JqZWN0cy5nZXRfb3JfY3JlYXRlKAogICAgICAgICAgICB0eXBlPUV4cGxhbmF0aW9uVHlwZXMuUkVUUkFJTi52YWx1ZSwKICAgICAgICAgICAgc3BsaXQ9c3BsaXQsCjx8ZmltX2hvbGV8PgogICAgICAgIClbMF0KICAgICAgICBzZWxmLnRyYWluaW5nX2RmX29sZCwgc2VsZi50ZXN0X2RmX29sZCA9IGdldF9lbmNvZGVkX2xvZ3Moc2VsZi5qb2IpCgogICAgZGVmIHRlc3RfcmFkb21pc2VfZmVhdHVyZXNfc2luZ2xlX2ZlYXR1cmUoc2VsZik6CiAgICAgICAgZXhwbGFuYXRpb25fdGFyZ2V0ID0gW1tbJ3ByZWZpeF8yJywgMV1dXQogICAgICAgIHRyYWluX2RmLCB0ZXN0X2RmID0gcmFuZG9taXNlX2ZlYXR1cmVzKHNlbGYudHJhaW5pbmdfZGZfb2xkLmNvcHkoKSwgc2VsZi50ZXN0X2RmX29sZC5jb3B5KCksIGV4cGxhbmF0aW9uX3RhcmdldCkKICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYWluX2RmLmVxdWFscyhzZWxmLnRyYWluaW5nX2RmX29sZCkpCiAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFpbl9kZlsncHJlZml4XzInXS5lcXVhbHMoc2VsZi50cmFpbmluZ19kZl9vbGRbJ3ByZWZpeF8yJ10pKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFpbl9kZi5kcm9wKFsncHJlZml4XzInXSwgMSkuZXF1YWxzKHNlbGYudHJhaW5pbmdfZGZfb2xkLmRyb3AoWydwcmVmaXhfMiddLCAxKSkpCiAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ZXN0X2RmLmVxdWFscyhzZWxmLnRlc3RfZGZfb2xkKSkKICAgICAgICAjIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0X2RmWydwcmVmaXhfMiddLmVxdWFscyhzZWxmLnRlc3RfZGZfb2xkWydwcmVmaXhfMiddKSkKICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdF9kZi5kcm9wKFsncHJlZml4XzInXSwgMSkuZXF1YWxzKHNlbGYudGVzdF9kZl9vbGQuZHJvcChbJ3ByZWZpeF8yJ10sIDEpKSkKCiAgICBkZWYgdGVzdF9yYWRvbWlzZV9mZWF0dXJlc19jb21wb3NlZF9mZWF0dXJlKHNlbGYpOgogICAgICAgIGV4cGxhbmF0aW9uX3RhcmdldCA9IFtbWydwcmVmaXhfMicsIDJdLCBbJ3ByZWZpeF8zJywgMV1dXQogICAgICAgIHRyYWluX2RmLCB0ZXN0X2RmID0gcmFuZG9taXNlX2ZlYXR1cmVzKHNlbGYudHJhaW5pbmdfZGZfb2xkLmNvcHkoKSwgc2VsZi50ZXN0X2RmX29sZC5jb3B5KCksIGV4cGxhbmF0aW9uX3RhcmdldCkKICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYWluX2RmLmVxdWFscyhzZWxmLnRyYWluaW5nX2RmX29sZCkpCiAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFpbl9kZlsncHJlZml4XzInXS5lcXVhbHMoc2VsZi50cmFpbmluZ19kZl9vbGRbJ3ByZWZpeF8yJ10pKQogICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhaW5fZGZbJ3ByZWZpeF8zJ10uZXF1YWxzKHNlbGYudHJhaW5pbmdfZGZfb2xkWydwcmVmaXhfMyddKSkKICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYWluX2RmLmRyb3AoWydwcmVmaXhfMiddLCAxKS5lcXVhbHMoc2VsZi50cmFpbmluZ19kZl9vbGQuZHJvcChbJ3ByZWZpeF8yJ10sIDEpKSkKICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYWluX2RmLmRyb3AoWydwcmVmaXhfMyddLCAxKS5lcXVhbHMoc2VsZi50cmFpbmluZ19kZl9vbGQuZHJvcChbJ3ByZWZpeF8zJ10sIDEpKSkKICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRlc3RfZGYuZXF1YWxzKHNlbGYudGVzdF9kZl9vbGQpKQogICAgICAgICMgc2VsZi5hc3NlcnRGYWxzZSh0ZXN0X2RmWydwcmVmaXhfMiddLmVxdWFscyhzZWxmLnRlc3RfZGZfb2xkWydwcmVmaXhfMiddKSkKICAgICAgICAjIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0X2RmWydwcmVmaXhfMyddLmVxdWFscyhzZWxmLnRlc3RfZGZfb2xkWydwcmVmaXhfMyddKSkKICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRlc3RfZGYuZHJvcChbJ3ByZWZpeF8yJ10sIDEpLmVxdWFscyhzZWxmLnRlc3RfZGZfb2xkLmRyb3AoWydwcmVmaXhfMiddLCAxKSkpCiAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ZXN0X2RmLmRyb3AoWydwcmVmaXhfMyddLCAxKS5lcXVhbHMoc2VsZi50ZXN0X2RmX29sZC5kcm9wKFsncHJlZml4XzMnXSwgMSkpKQoKICAgIGRlZiB0ZXN0X3JhZG9taXNlX2ZlYXR1cmVzX211bHRpcGxlX2ZlYXR1cmUoc2VsZik6CiAgICAgICAgZXhwbGFuYXRpb25fdGFyZ2V0ID0gW1tbJ3ByZWZpeF8xJywgMV0sIFsncHJlZml4XzInLCAyXV0sIFtbJ3ByZWZpeF8zJywgMV1dXQogICAgICAgIHRyYWluX2RmLCB0ZXN0X2RmID0gcmFuZG9taXNlX2ZlYXR1cmVzKHNlbGYudHJhaW5pbmdfZGZfb2xkLmNvcHkoKSwgc2VsZi50ZXN0X2RmX29sZC5jb3B5KCksIGV4cGxhbmF0aW9uX3RhcmdldCkKICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYWluX2RmLmVxdWFscyhzZWxmLnRyYWluaW5nX2RmX29sZCkpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyYWluX2RmWydwcmVmaXhfMSddLmVxdWFscyhzZWxmLnRyYWluaW5nX2RmX29sZFsncHJlZml4XzEnXSkpCiAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFpbl9kZlsncHJlZml4XzInXS5lcXVhbHMoc2VsZi50cmFpbmluZ19kZl9vbGRbJ3ByZWZpeF8yJ10pKQogICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhaW5fZGZbJ3ByZWZpeF8zJ10uZXF1YWxzKHNlbGYudHJhaW5pbmdfZGZfb2xkWydwcmVmaXhfMyddKSkKICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYWluX2RmLmRyb3AoWydwcmVmaXhfMSddLCAxKS5lcXVhbHMoc2VsZi50cmFpbmluZ19kZl9vbGQuZHJvcChbJ3ByZWZpeF8xJ10sIDEpKSkKICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYWluX2RmLmRyb3AoWydwcmVmaXhfMiddLCAxKS5lcXVhbHMoc2VsZi50cmFpbmluZ19kZl9vbGQuZHJvcChbJ3ByZWZpeF8yJ10sIDEpKSkKICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYWluX2RmLmRyb3AoWydwcmVmaXhfMyddLCAxKS5lcXVhbHMoc2VsZi50cmFpbmluZ19kZl9vbGQuZHJvcChbJ3ByZWZpeF8zJ10sIDEpKSkKICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRlc3RfZGYuZXF1YWxzKHNlbGYudGVzdF9kZl9vbGQpKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0X2RmWydwcmVmaXhfMSddLmVxdWFscyhzZWxmLnRlc3RfZGZfb2xkWydwcmVmaXhfMSddKSkKICAgICAgICAjIHNlbGYuYXNzZXJ0RmFsc2UodGVzdF9kZlsncHJlZml4XzInXS5lcXVhbHMoc2VsZi50ZXN0X2RmX29sZFsncHJlZml4XzInXSkpCiAgICAgICAgIyBzZWxmLmFzc2VydEZhbHNlKHRlc3RfZGZbJ3ByZWZpeF8zJ10uZXF1YWxzKHNlbGYudGVzdF9kZl9vbGRbJ3ByZWZpeF8zJ10pKQogICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGVzdF9kZi5kcm9wKFsncHJlZml4XzEnXSwgMSkuZXF1YWxzKHNlbGYudGVzdF9kZl9vbGQuZHJvcChbJ3ByZWZpeF8xJ10sIDEpKSkKICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRlc3RfZGYuZHJvcChbJ3ByZWZpeF8yJ10sIDEpLmVxdWFscyhzZWxmLnRlc3RfZGZfb2xkLmRyb3AoWydwcmVmaXhfMiddLCAxKSkpCiAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ZXN0X2RmLmRyb3AoWydwcmVmaXhfMyddLCAxKS5lcXVhbHMoc2VsZi50ZXN0X2RmX29sZC5kcm9wKFsncHJlZml4XzMnXSwgMSkpKQoKICAgIGRlZiB0ZXN0X3NhdmVfcmFuZG9taXNlZF9zZXQoc2VsZik6CiAgICAgICAgaW5pdGlhbF9zcGxpdF9vYmogPSBzZWxmLmpvYi5zcGxpdAogICAgICAgIG5ld19zcGxpdCA9IHNhdmVfcmFuZG9taXNlZF9zZXQoaW5pdGlhbF9zcGxpdF9vYmopCiAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpbml0aWFsX3NwbGl0X29iai50cmFpbl9sb2cubmFtZSwgbmV3X3NwbGl0LnRyYWluX2xvZy5uYW1lKQogICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaW5pdGlhbF9zcGxpdF9vYmoudGVzdF9sb2cubmFtZSwgbmV3X3NwbGl0LnRlc3RfbG9nLm5hbWUpCiAgICAgICAgIyBUT0RPCgogICAgZGVmIHRlc3RfZXhwbGFpbihzZWxmKToKICAgICAgICBpbml0aWFsX3Jlc3VsdCA9IHsKICAgICAgICAgICAgJ2YxX3Njb3JlJzogMC43Nzc3Nzc3Nzc3Nzc3Nzc3LAogICAgICAgICAgICAnYWNjdXJhY3knOiAwLjc1LAogICAgICAgICAgICAncHJlY2lzaW9uJzogMC44MzMzMzMzMzMzMzMzMzM0LAogICAgICAgICAgICAncmVjYWxsJzogMC44MzMzMzMzMzMzMzMzMzM0CiAgICAgICAgfQogICAgICAgIGV4cGxhbmF0aW9uX3RhcmdldCA9IFtbWydwcmVmaXhfMScsIDFdLCBbJ3ByZWZpeF8yJywgMV0sIFsncHJlZml4XzMnLCAxXSwgWydwcmVmaXhfNCcsIDFdXV0KICAgICAgICBleHBsYW5hdGlvbiA9IGV4cGxhaW4oc2VsZi5leHAsIHNlbGYudHJhaW5pbmdfZGZfb2xkLCBzZWxmLnRlc3RfZGZfb2xkLCBleHBsYW5hdGlvbl90YXJnZXQsIHByZWZpeF90YXJnZXQ9Tm9uZSkKICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KFtpbml0aWFsX3Jlc3VsdFtrZXldICE9IGV4cGxhbmF0aW9uWydSZXRyYWluIHJlc3VsdCddW2tleV0gZm9yIGtleSBpbiBpbml0aWFsX3Jlc3VsdF0pKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBwcmVkaWN0aXZlX21vZGVsPXByZWRpY3RpdmVfbW9kZWwsCiAgICAgICAgICAgIGpvYj1zZWxmLmpvYiwKICAgICAgICAgICAgcmVzdWx0cz17fQo8fGZpbV9lbmR8Pg=="]
["998c4356415c994a337f875fdf0e62e5272a76b8-1","998c4356415c994a337f875fdf0e62e5272a76b8","PHxmaW1fcHJlZml4fD4KIyBBdXRob3JzOiBLYXJsIE1hY01pbGxhbiA8a21hY21pbGxhbkBtZW50YWxyb290a2l0LmNvbT4KIwojIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0IAojIHNlZSBmaWxlICdDT1BZSU5HJyBmb3IgdXNlIGFuZCB3YXJyYW50eSBpbmZvcm1hdGlvbgojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgojIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvbmx5CiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo8fGZpbV9ob2xlfD4KIwoKdHJ5OiAKICAgIGltcG9ydCBnZXR0ZXh0CiAgICB0ID0gZ2V0dGV4dC50cmFuc2xhdGlvbiggJ3l1bWV4JyApCiAgICBfID0gdC5nZXR0ZXh0CmV4Y2VwdDoKICAgIGRlZiBfKHN0cik6CiAgICAgICAgcmV0dXJuIHN0cgo8fGZpbV9zdWZmaXh8PgojCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCjx8ZmltX2VuZHw+"]
["a9aad384c8f7d7624f8b6213cb5cbd5cbc6f1eef-3","a9aad384c8f7d7624f8b6213cb5cbd5cbc6f1eef","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzeXMKaW1wb3J0IHRpbWUKaW1wb3J0IHBsYXRmb3JtCgpkZWYgZ2V0X3ByaW1lczcobik6CgkiIiIKCXN0YW5kYXJkIG9wdGltaXplZCBzaWV2ZSBhbGdvcml0aG0gdG8gZ2V0IGEgbGlzdCBvZiBwcmltZSBudW1iZXJzCgktLS0gdGhpcyBpcyB0aGUgZnVuY3Rpb24gdG8gY29tcGFyZSB5b3VyIGZ1bmN0aW9ucyBhZ2FpbnN0ISAtLS0KCSIiIgoJaWYgbiA8IDI6CgkJcmV0dXJuIFtdCglpZiBuID09IDI6CgkJcmV0dXJuIFsyXQoJIyBkbyBvbmx5IG9kZCBudW1iZXJzIHN0YXJ0aW5nIGF0IDMKCWlmIHN5cy52ZXJzaW9uX2luZm8ubWFqb3IgPD0gMjoKCQlzID0gcmFuZ2UoMywgbiArIDEsIDIpCgllbHNlOiAgIyBQeXRob24gMwoJCXMgPSBsaXN0KHJhbmdlKDMsIG4gKyAxLCAyKSkKCSMgbioqMC41IHNpbXBsZXIgdGhhbiBtYXRoLnNxcihuKQoJbXJvb3QgPSBuICoqIDAuNQoJaGFsZiA9IGxlbihzKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CglpID0gMAoJbSA9IDMKCXdoaWxlIG0gPD0gbXJvb3Q6CgkJaWYgc1tpXToKPHxmaW1fZW5kfD4="]
["68fb907cb5b70e20020ace4d84388e02fcf2761e-4","68fb907cb5b70e20020ace4d84388e02fcf2761e","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBiaW5hc2NpaSBpbXBvcnQgYjJhX2hleApmcm9tIGxpYnMuY29uZmlnIGltcG9ydCBhbGlhcwoKCjx8ZmltX2VuZHw+"]
["9966fa55feb300f80ea9c8c3896e70aa595effa5-1","9966fa55feb300f80ea9c8c3896e70aa595effa5","PHxmaW1fcHJlZml4fD4KIyBodHRwczovL2FwcC5jb2Rlc2lnbmFsLmNvbS9hcmNhZGUvaW50cm8vbGV2ZWwtNC9aQ0Q3TlFuRUQ3MjRiSnRqTgppbXBvcnQgbWF0aAoKZGVmIGFkZEJvcmRlcihwaWN0dXJlKToKICAgICcnJwo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgICAgICAgICAgICAiKmFiYyoiLAogICAgICAgICAgICAgICAgICAgICAgICAgICIqZGVkKiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIioqKioqIl0KICAgICcnJwogICAgIyBUaGUgYm9yZGVycyBhZGQgYSBtYXJnaW4gb2YgdGhpY2tuZXNzIDEgc28gdG90YWwgMiBleHRyYSB1bml0cy4KICAgIHJvd3MsIGNvbHMgPSBsZW4ocGljdHVyZSkgKyAyLCBsZW4ocGljdHVyZVswXSkgKyAyCiAgICAjIFB1dCB0d28gZW1wdHkgbGluZXMgYXQgdG9wIGFuZCBib3R0b20gb2YgcGljdHVyZS4KICAgIHBpY3R1cmUuaW5zZXJ0KDAsICIiKQogICAgcGljdHVyZS5hcHBlbmQoIiIpCiAgICByZXMgPSBbXQogICAgIyBGb3IgZWFjaCByb3cuLi4KICAgIGZvciBpIGluIHJhbmdlKHJvd3MpOgogICAgICAgIGxpbmUgPSBwaWN0dXJlW2ldCiAgICAgICAgIyBBbW91bnQgb2YgIioiIHRvIGNvbXBsZXRlIHRoZSBleHBlY3RlZCB3aWR0aC4KICAgICAgICBsZWZ0ID0gIioiICogKG1hdGguZmxvb3IoKGNvbHMgLSBsZW4obGluZSkpLzIpKQogICAgICAgIHJpZ2h0ID0gIioiICogKG1hdGguY2VpbCgoY29scyAtIGxlbihsaW5lKSkvMikpCiAgICAgICAgbGluZSA9IGxlZnQgKyBsaW5lICsgcmlnaHQKICAgICAgICAjIEtlZXAgYXBwZW5kaW5nIHRvIHRoZSByZXN1bHRpbmcgcGljdHVyZS4KICAgICAgICByZXMuYXBwZW5kKGxpbmUpCgogICAgcmV0dXJuIHJlcwo8fGZpbV9zdWZmaXh8PgogICAgcGljdHVyZSA9IFsiYWJjIiwKICAgICAgICAgICAgICAgImRlZCJdCiAgICAgICAgICAgICAgIAogICAgYWRkQm9yZGVyKHBpY3R1cmUpID0gWyIqKioqKiIsCjx8ZmltX2VuZHw+"]
["d8496091673e16812406823b7186bea0e45a3ffa-3","d8496091673e16812406823b7186bea0e45a3ffa","PHxmaW1fcHJlZml4fD4KZnJvbSBDbGlja1JlYWN0aW9uLlJlYWN0aW9ucyBpbXBvcnQgU3V6dWtpTWl5YXVyYQpmcm9tIHRlc3RzIGltcG9ydCBUZXN0SGVscGVyCgoKY2xhc3MgU3V6dWtpTWl5YXVyYVRlc3QoVGVzdEhlbHBlci5SZWFjdGlvblRlc3RDYXNlKToKICAgIHJlYWN0YW50X25hbWVzID0gWyJib3JvbmF0ZSIsICJoYWxvZ2VuaWRlIl0KCjx8ZmltX2hvbGV8PgogICAgICAgIHJlYWN0YW50cyA9IFsKICAgICAgICAgICAgIyBUZXN0IHBoZW55bGhhbG9nZW5pZGVzIGFuZCBwaGVueWxib3JvbmljIGFjaWQKICAgICAgICAgICAgKCgiYzFjY2NjYzFCKE8pTyIsICJjMWNjY2NjMUNsIiksICJjMWNjY2NjMWMxY2NjY2MxIiksCiAgICAgICAgICAgICgoImMxY2NjY2MxQihPKU8iLCAiYzFjY2NjYzFCciIpLCAiYzFjY2NjYzFjMWNjY2NjMSIpLAogICAgICAgICAgICAoKCJjMWNjY2NjMUIoTylPIiwgImMxY2NjY2MxSSIpLCAiYzFjY2NjYzFjMWNjY2NjMSIpLAoKICAgICAgICAgICAgIyBDaGVjayBkaWZmZXJlbnQgZXN0ZXJzIGZvciB0aGUgYm9yb25pYyBhY2lkCiAgICAgICAgICAgICMgQlBpbgogICAgICAgICAgICAoKCJDQzEoQylDKEMpKEMpT0IoQzI9Q0M9Q0M9QzIpTzEiLCAiYzFjY2NjYzFDbCIpLCAiYzFjY2NjYzFjMWNjY2NjMSIpLAogICAgICAgICAgICAjIE1pZGEgKG9wZW4gZm9ybSkKICAgICAgICAgICAgKCgiQ04xQ0MoPU8pT0IoT0MoPU8pQzEpYzJjY2NjYzIiLCAiYzFjY2NjYzFDbCIpLCAiYzFjY2NjYzFjMWNjY2NjMSIpLAogICAgICAgICAgICAjIE1pZGEgKGNsb3NlZCBmb3JtKQogICAgICAgICAgICAoKCJDW04rXTEyQ0MoT1tCLV0oYzNjY2NjYzMpMU9DKEMyKT1PKT1PIiwgImMxY2NjY2MxQ2wiKSwgImMxY2NjY2MxYzFjY2NjYzEiKSwKCiAgICAgICAgICAgICMgQ2hlY2sgdHJpZmx1b3JvYm9yb25hdGVzCiAgICAgICAgICAgICgoIkZbQi1dKEYpKEYpQzE9Q0M9Q0M9QzEuW0srXSIsICJjMWNjY2NjMUNsIiksICJjMWNjY2NjMWMxY2NjY2MxIiksCiAgICAgICAgXQoKICAgICAgICBzZWxmLl90ZXN0X29uZV9wcm9kdWN0KHJlYWN0YW50cywgc2VsZi5yZWFjdGFudF9uYW1lcykKCiAgICAjIFRob3NlIHRlc3RzIHNob3VsZCBub3QgZ2l2ZSBhbnkgcHJvZHVjdC4KICAgIGRlZiB0ZXN0X25vX3Byb2R1Y3Qoc2VsZik6CiAgICAgICAgcmVhY3RhbnRzID0gWwogICAgICAgICAgICAjIEFyeWxmbHVvcmlkZXMgc2hvdWxkIG5vdCB3b3JrLgogICAgICAgICAgICAoImMxY2NjY2MxQihPKU8iLCAiYzFjY2NjYzFGIiksCiAgICAgICAgICAgICMgVGhpcyBzaG91bGQgYWxzbyBub3Qgd29yay4KICAgICAgICAgICAgKCJjMWNjY2NjMVAoTylPIiwgImMxY2NjY2MxQ2wiKSwKICAgICAgICBdCgogICAgICAgIHNlbGYuX3Rlc3Rfbm9fcHJvZHVjdChyZWFjdGFudHMsIHNlbGYucmVhY3RhbnRfbmFtZXMpCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgc2VsZi5zZXRfcmVhY3Rpb24oU3V6dWtpTWl5YXVyYSkKCiAgICBkZWYgdGVzdF9vbmVfcHJvZHVjdChzZWxmKToKPHxmaW1fZW5kfD4="]
["994fdefe0c8f731be4b419ab22f65586b60404e5-1","994fdefe0c8f731be4b419ab22f65586b60404e5","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IHRvcmNoCmltcG9ydCB0b3JjaC5ubiBhcyBubgppbXBvcnQgdG9yY2gub3B0aW0gYXMgb3B0aW0KaW1wb3J0IG1hdGgKCiNleHBlY3RzIGlucHV0IHRvIGJlIG9mIHNoYXBlIFtiYXRjaF9zaXplLCBzZXF1ZW5jZV9sZW5ndGgsIG51bV9mZWF0dXJlc10KY2xhc3MgR1JVTWFwcGluZyhubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGlucHV0X3NpemUsIGhpZGRlbl9zaXplLCBiYXRjaF9zaXplKToKICAgICAgICBzdXBlcihHUlVNYXBwaW5nLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5oaWRkZW5fc2l6ZSA9IGhpZGRlbl9zaXplCiAgICAgICAgc2VsZi5pbnB1dF9zaXplID0gaW5wdXRfc2l6ZQogICAgICAgIHNlbGYuYmF0Y2hfc2l6ZSA9IGJhdGNoX3NpemUKICAgICAgICBzZWxmLmhpZGRlbl9zdGF0ZSA9IHRvcmNoLnplcm9zKHNlbGYuaGlkZGVuX3NpemUpIAogICAgICAgIHNlbGYubWFwcGluZyA9IG5uLkdSVShpbnB1dF9zaXplLCBoaWRkZW5fc2l6ZSwgYmF0Y2hfZmlyc3Q9VHJ1ZSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4KToKICAgICAgICAjcHJpbnQoIkNhbGxpbmcgZm9yd2FyZCIpCiAgICAgICAgc2VsZi5pbml0X2hpZGRlbl9zdGF0ZSgpCjx8ZmltX2VuZHw+"]
["da2196fe892ece899445adafaaabf56da3ffabf7-1","da2196fe892ece899445adafaaabf56da3ffabf7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlbnNvcmxheWVyeCBhcyB0bHgKCmZyb20gZ2FtbWFnbC51dGlscyBpbXBvcnQgKAogICAgIyBhZGRfcmVtYWluaW5nX3NlbGZfbG9vcHMsCiAgICBhZGRfc2VsZl9sb29wcywKICAgIGNvbnRhaW5zX3NlbGZfbG9vcHMsCiAgICAjIGdldF9zZWxmX2xvb3BfYXR0ciwKICAgIHJlbW92ZV9zZWxmX2xvb3BzLAogICAgIyBzZWdyZWdhdGVfc2VsZl9sb29wcywKKQoKCmRlZiB0ZXN0X2NvbnRhaW5zX3NlbGZfbG9vcHMoKToKICAgIGVkZ2VfaW5kZXggPSB0bHguY29udmVydF90b190ZW5zb3IoW1swLCAxLCAwXSwgWzEsIDAsIDBdXSkKICAgIGFzc2VydCBjb250YWluc19zZWxmX2xvb3BzKGVkZ2VfaW5kZXgpCgogICAgZWRnZV9pbmRleCA9IHRseC5jb252ZXJ0X3RvX3RlbnNvcihbWzAsIDEsIDFdLCBbMSwgMCwgMl1dKQogICAgYXNzZXJ0IG5vdCBjb250YWluc19zZWxmX2xvb3BzKGVkZ2VfaW5kZXgpCgoKZGVmIHRlc3RfcmVtb3ZlX3NlbGZfbG9vcHMoKToKICAgIGVkZ2VfaW5kZXggPSB0bHguY29udmVydF90b190ZW5zb3IoW1swLCAxLCAwXSwgWzEsIDAsIDBdXSkKICAgIGVkZ2VfYXR0ciA9IFtbMSwgMl0sIFszLCA0XSwgWzUsIDZdXQogICAgZWRnZV9hdHRyID0gdGx4LmNvbnZlcnRfdG9fdGVuc29yKGVkZ2VfYXR0cikKCiAgICBlZGdlX2luZGV4LCBlZGdlX2F0dHIgPSByZW1vdmVfc2VsZl9sb29wcyhlZGdlX2luZGV4LCBlZGdlX2F0dHIpCiAgICBhc3NlcnQgdGx4LmNvbnZlcnRfdG9fbnVtcHkoZWRnZV9pbmRleCkudG9saXN0KCkgPT0gW1swLCAxXSwgWzEsIDBdXQogICAgYXNzZXJ0IHRseC5jb252ZXJ0X3RvX251bXB5KGVkZ2VfYXR0cikudG9saXN0KCkgPT0gW1sxLCAyXSwgWzMsIDRdXQoKIyB0ZXN0X3JlbW92ZV9zZWxmX2xvb3BzKCkKIwojIGRlZiB0ZXN0X3NlZ3JlZ2F0ZV9zZWxmX2xvb3BzKCk6CiMgICAgIGVkZ2VfaW5kZXggPSB0b3JjaC50ZW5zb3IoW1swLCAwLCAxXSwgWzAsIDEsIDBdXSkKIwojICAgICBvdXQgPSBzZWdyZWdhdGVfc2VsZl9sb29wcyhlZGdlX2luZGV4KQojICAgICBhc3NlcnQgb3V0WzBdLnRvbGlzdCgpID09IFtbMCwgMV0sIFsxLCAwXV0KIyAgICAgYXNzZXJ0IG91dFsxXSBpcyBOb25lCiMgICAgIGFzc2VydCBvdXRbMl0udG9saXN0KCkgPT0gW1swXSwgWzBdXQojICAgICBhc3NlcnQgb3V0WzNdIGlzIE5vbmUKPHxmaW1faG9sZXw+CiMgICAgIGFzc2VydCBvdXRbMV0udG9saXN0KCkgPT0gWzIsIDNdCiMgICAgIGFzc2VydCBvdXRbMl0udG9saXN0KCkgPT0gW1swXSwgWzBdXQojICAgICBhc3NlcnQgb3V0WzNdLnRvbGlzdCgpID09IFsxXQoKCmRlZiB0ZXN0X2FkZF9zZWxmX2xvb3BzKCk6CiAgICBlZGdlX2luZGV4ID0gdGx4LmNvbnZlcnRfdG9fdGVuc29yKFtbMCwgMSwgMF0sIFsxLCAwLCAwXV0pCiAgICBlZGdlX3dlaWdodCA9IHRseC5jb252ZXJ0X3RvX3RlbnNvcihbMC41LCAwLjUsIDAuNV0pCiAgICBlZGdlX2F0dHIgPSB0bHgub3BzLmNvbnN0YW50KHZhbHVlPTAuNSwgc2hhcGU9KDMsIDMpKQoKICAgIGV4cGVjdGVkID0gW1swLCAxLCAwLCAwLCAxXSwgWzEsIDAsIDAsIDAsIDFdXQogICAgYXNzZXJ0IHRseC5jb252ZXJ0X3RvX251bXB5KGFkZF9zZWxmX2xvb3BzKGVkZ2VfaW5kZXgpWzBdKS50b2xpc3QoKSA9PSBleHBlY3RlZAoKICAgIG91dCA9IGFkZF9zZWxmX2xvb3BzKGVkZ2VfaW5kZXgsIGVkZ2Vfd2VpZ2h0KQogICAgYXNzZXJ0IHRseC5jb252ZXJ0X3RvX251bXB5KG91dFswXSkudG9saXN0KCkgPT0gZXhwZWN0ZWQKICAgIGFzc2VydCB0bHguY29udmVydF90b19udW1weShvdXRbMV0pLnRvbGlzdCgpID09IFswLjUsIDAuNSwgMC41LCAxLiwgMS5dCgogICAgb3V0ID0gYWRkX3NlbGZfbG9vcHMoZWRnZV9pbmRleCwgZWRnZV93ZWlnaHQsIGZpbGxfdmFsdWU9Mi4pCiAgICBhc3NlcnQgdGx4LmNvbnZlcnRfdG9fbnVtcHkob3V0WzBdKS50b2xpc3QoKSA9PSBleHBlY3RlZAogICAgYXNzZXJ0IHRseC5jb252ZXJ0X3RvX251bXB5KG91dFsxXSkudG9saXN0KCkgPT0gWzAuNSwgMC41LCAwLjUsIDIuLCAyLl0KCiAgICBvdXQgPSBhZGRfc2VsZl9sb29wcyhlZGdlX2luZGV4LCBlZGdlX3dlaWdodCwgZmlsbF92YWx1ZT10bHguY29udmVydF90b190ZW5zb3IoWzIuXSkpCiAgICBhc3NlcnQgdGx4LmNvbnZlcnRfdG9fbnVtcHkob3V0WzBdKS50b2xpc3QoKSA9PSBleHBlY3RlZAogICAgYXNzZXJ0IHRseC5jb252ZXJ0X3RvX251bXB5KG91dFsxXSkudG9saXN0KCkgPT0gWzAuNSwgMC41LCAwLjUsIDIuLCAyLl0KICAgICMKICAgICMgb3V0ID0gYWRkX3NlbGZfbG9vcHMoZWRnZV9pbmRleCwgZWRnZV93ZWlnaHQsIGZpbGxfdmFsdWU9J2FkZCcpCiAgICAjIGFzc2VydCBvdXRbMF0udG9saXN0KCkgPT0gZXhwZWN0ZWQKICAgICMgYXNzZXJ0IG91dFsxXS50b2xpc3QoKSA9PSBbMC41LCAwLjUsIDAuNSwgMSwgMC41XQoKICAgIG91dCA9IGFkZF9zZWxmX2xvb3BzKGVkZ2VfaW5kZXgsIGVkZ2VfYXR0cikKICAgIGFzc2VydCB0bHguY29udmVydF90b19udW1weShvdXRbMF0pLnRvbGlzdCgpID09IGV4cGVjdGVkCiAgICBhc3NlcnQgdGx4LmNvbnZlcnRfdG9fbnVtcHkob3V0WzFdKS50b2xpc3QoKSA9PSBbWzAuNSwgMC41LCAwLjVdLCBbMC41LCAwLjUsIDAuNV0sIFswLjUsIDAuNSwgMC41XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLiwgMS4sIDEuXSwgWzEuLCAxLiwgMS5dXQoKICAgIG91dCA9IGFkZF9zZWxmX2xvb3BzKGVkZ2VfaW5kZXgsIGVkZ2VfYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxfdmFsdWU9dGx4LmNvbnZlcnRfdG9fdGVuc29yKFswLiwgMS4sIDAuXSkpCiAgICBhc3NlcnQgdGx4LmNvbnZlcnRfdG9fbnVtcHkob3V0WzBdKS50b2xpc3QoKSA9PSBleHBlY3RlZAogICAgYXNzZXJ0IHRseC5jb252ZXJ0X3RvX251bXB5KG91dFsxXSkudG9saXN0KCkgPT0gW1swLjUsIDAuNSwgMC41XSwgWzAuNSwgMC41LCAwLjVdLCBbMC41LCAwLjUsIDAuNV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMC4sIDEuLCAwLl0sIFswLiwgMS4sIDAuXV0KCiAgICAjIG91dCA9IGFkZF9zZWxmX2xvb3BzKGVkZ2VfaW5kZXgsIGVkZ2VfYXR0ciwgZmlsbF92YWx1ZT0nYWRkJykKICAgICMgYXNzZXJ0IG91dFswXS50b2xpc3QoKSA9PSBleHBlY3RlZAogICAgIyBhc3NlcnQgb3V0WzFdLnRvbGlzdCgpID09IFtbMS4sIDAuLCAwLl0sIFswLiwgMS4sIDAuXSwgWzAuLCAwLiwgMS5dLAogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMC4sIDEuLCAxLl0sIFsxLiwgMC4sIDAuXV0KCiAgICBlZGdlX2luZGV4ID0gdGx4LmNvbnZlcnRfdG9fdGVuc29yKFtbXSwgW11dKQogICAgZWRnZV93ZWlnaHQgPSB0bHguY29udmVydF90b190ZW5zb3IoW10sIGR0eXBlPXRseC5mbG9hdDMyKQogICAgb3V0ID0gYWRkX3NlbGZfbG9vcHMoZWRnZV9pbmRleCwgZWRnZV93ZWlnaHQsIG51bV9ub2Rlcz0xKQogICAgYXNzZXJ0IHRseC5jb252ZXJ0X3RvX251bXB5KG91dFswXSkudG9saXN0KCkgPT0gW1swXSwgWzBdXQogICAgYXNzZXJ0IHRseC5jb252ZXJ0X3RvX251bXB5KG91dFsxXSkudG9saXN0KCkgPT0gWzEuXQoKCiMKIyBkZWYgdGVzdF9hZGRfcmVtYWluaW5nX3NlbGZfbG9vcHMoKToKIyAgICAgZWRnZV9pbmRleCA9IHRvcmNoLnRlbnNvcihbWzAsIDEsIDBdLCBbMSwgMCwgMF1dKQojICAgICBlZGdlX3dlaWdodCA9IHRvcmNoLnRlbnNvcihbMC41LCAwLjUsIDAuNV0pCiMKIyAgICAgZWRnZV9pbmRleCwgZWRnZV93ZWlnaHQgPSBhZGRfcmVtYWluaW5nX3NlbGZfbG9vcHMoZWRnZV9pbmRleCwgZWRnZV93ZWlnaHQpCiMgICAgIGFzc2VydCBlZGdlX2luZGV4LnRvbGlzdCgpID09IFtbMCwgMSwgMCwgMV0sIFsxLCAwLCAwLCAxXV0KIyAgICAgYXNzZXJ0IGVkZ2Vfd2VpZ2h0LnRvbGlzdCgpID09IFswLjUsIDAuNSwgMC41LCAxXQojCiMKIyBkZWYgdGVzdF9hZGRfcmVtYWluaW5nX3NlbGZfbG9vcHNfd2l0aG91dF9pbml0aWFsX2xvb3BzKCk6CiMgICAgIGVkZ2VfaW5kZXggPSB0b3JjaC50ZW5zb3IoW1swLCAxXSwgWzEsIDBdXSkKIyAgICAgZWRnZV93ZWlnaHQgPSB0b3JjaC50ZW5zb3IoWzAuNSwgMC41XSkKIwojICAgICBlZGdlX2luZGV4LCBlZGdlX3dlaWdodCA9IGFkZF9yZW1haW5pbmdfc2VsZl9sb29wcyhlZGdlX2luZGV4LCBlZGdlX3dlaWdodCkKIyAgICAgYXNzZXJ0IGVkZ2VfaW5kZXgudG9saXN0KCkgPT0gW1swLCAxLCAwLCAxXSwgWzEsIDAsIDAsIDFdXQojICAgICBhc3NlcnQgZWRnZV93ZWlnaHQudG9saXN0KCkgPT0gWzAuNSwgMC41LCAxLCAxXQojCiMKIyBkZWYgdGVzdF9nZXRfc2VsZl9sb29wX2F0dHIoKToKIyAgICAgZWRnZV9pbmRleCA9IHRvcmNoLnRlbnNvcihbWzAsIDEsIDBdLCBbMSwgMCwgMF1dKQojICAgICBlZGdlX3dlaWdodCA9IHRvcmNoLnRlbnNvcihbMC4yLCAwLjMsIDAuNV0pCiMKIyAgICAgZnVsbF9sb29wX3dlaWdodCA9IGdldF9zZWxmX2xvb3BfYXR0cihlZGdlX2luZGV4LCBlZGdlX3dlaWdodCkKIyAgICAgYXNzZXJ0IGZ1bGxfbG9vcF93ZWlnaHQudG9saXN0KCkgPT0gWzAuNSwgMC4wXQojCiMgICAgIGZ1bGxfbG9vcF93ZWlnaHQgPSBnZXRfc2VsZl9sb29wX2F0dHIoZWRnZV9pbmRleCwgZWRnZV93ZWlnaHQsIG51bV9ub2Rlcz00KQojICAgICBhc3NlcnQgZnVsbF9sb29wX3dlaWdodC50b2xpc3QoKSA9PSBbMC41LCAwLjAsIDAuMCwgMC4wXQojCiMgICAgIGZ1bGxfbG9vcF93ZWlnaHQgPSBnZXRfc2VsZl9sb29wX2F0dHIoZWRnZV9pbmRleCkKIyAgICAgYXNzZXJ0IGZ1bGxfbG9vcF93ZWlnaHQudG9saXN0KCkgPT0gWzEuMCwgMC4wXQojCiMgICAgIGVkZ2VfYXR0ciA9IHRvcmNoLnRlbnNvcihbWzEuMCwgMC4wXSwgWzAuMCwgMS4wXSwgWzAuNSwgMS4wXV0pCiMgICAgIGZ1bGxfbG9vcF9hdHRyID0gZ2V0X3NlbGZfbG9vcF9hdHRyKGVkZ2VfaW5kZXgsIGVkZ2VfYXR0cikKIyAgICAgYXNzZXJ0IGZ1bGxfbG9vcF9hdHRyLnRvbGlzdCgpID09IFtbMC41LCAxLjBdLCBbMC4wLCAwLjBdXQo8fGZpbV9zdWZmaXh8PgojCiMgICAgIGVkZ2VfYXR0ciA9IHRvcmNoLnRlbnNvcihbMSwgMiwgM10pCiMgICAgIG91dCA9IHNlZ3JlZ2F0ZV9zZWxmX2xvb3BzKGVkZ2VfaW5kZXgsIGVkZ2VfYXR0cikKIyAgICAgYXNzZXJ0IG91dFswXS50b2xpc3QoKSA9PSBbWzAsIDFdLCBbMSwgMF1dCjx8ZmltX2VuZHw+"]
["515baae0f6bc3668df434ce2881755d1103cf619-1","515baae0f6bc3668df434ce2881755d1103cf619","PHxmaW1fcHJlZml4fD4KIyBBdXRvbWF0aWNhbGx5IGNhcHR1cmUgZnJhbWVzIHRvIHJlY29uc3RydWN0IHRoZSBvYmplY3QuCgojIEF1dGhvcjogSG9uZ3RhbyBXdQojIEluc3RpdHV0aW9uOiBKb2hucyBIb3BraW5zIFVuaXZlcnNpdHkKIyBEYXRlOiBKYW4gMTMsIDIwMjAKCmltcG9ydCBvcwppbXBvcnQgdGltZQoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBjdjIKaW1wb3J0IHJvc3B5Cgpmcm9tIHJvYm90IGltcG9ydCBSb2JvdApmcm9tIHJvc19jYW1lcmFfdHNkZl9mdXNpb24gaW1wb3J0IFJPU0NhbWVyYVRTREZGdXNpb24KCgpjbGFzcyBBdXRvQ2FwdHVyZShvYmplY3QpOgogICAgIiIiCiAgICBDbGFzcyB0byBhdXRvbWF0aWNhbGx5IGNhcHR1cmUgdGhlIHNjZW5lIGZvciByZWNvbnN0cnVjdGlvbgogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICBkYXRhX2ZvbGRlciwKICAgICAgICAgICAgICAgICBhY2MsCiAgICAgICAgICAgICAgICAgdmVsLAogICAgICAgICAgICAgICAgIGNhbTJlZV9maWxlLAogICAgICAgICAgICAgICAgIGF1dG9tYXRpYz1UcnVlLAogICAgICAgICAgICAgICAgIHRpbWVfaW50ZXJ2YWw9Tm9uZSk6CiAgICAgICAgc2VsZi5hdXRvbWF0aWMgPSBhdXRvbWF0aWMKICAgICAgICBpZiBub3Qgc2VsZi5hdXRvbWF0aWM6CiAgICAgICAgICAgIHNlbGYudGltZV9pbnRlcnZhbCA9IHRpbWVfaW50ZXJ2YWwgICMgdGltZSBpbnRlcnZhbCBiZXR3ZWVuIGVhY2ggY2FwdHVyZQoKICAgICAgICBzZWxmLmRhdGFfZm9sZGVyID0gZGF0YV9mb2xkZXIgICMgZGF0YSBmb2xkZXIgZm9yIHNhdmluZyB0aGUgZGF0YQogICAgICAgIHNlbGYuY2FtID0gUk9TQ2FtZXJhVFNERkZ1c2lvbihhdXRvbWF0aWM9c2VsZi5hdXRvbWF0aWMpCiAgICAgICAgcm9zcHkuaW5pdF9ub2RlKCdyb3NfY2FtZXJhX3RzZGZfZnVzaW9uJywgYW5vbnltb3VzPUZhbHNlKQoKICAgICAgICBzZWxmLmFjYyA9IGFjYwogICAgICAgIHNlbGYudmVsID0gdmVsCgogICAgICAgIHNlbGYucm9ib3QgPSBSb2JvdChhY2M9c2VsZi5hY2MsIHZlbD1zZWxmLnZlbCwgZ3JpcHBlcl9vbj1GYWxzZSkKCiAgICAgICAgIyBXYWl0IGEgYml0CiAgICAgICAgdGltZS5zbGVlcCg1KQoKICAgICAgICAjIGNhbWVyYSBpbiBlZSBmcmFtZQogICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oY2FtMmVlX2ZpbGUpLCAncicpIGFzIGZpbGVfcm9ib3Q6CiAgICAgICAgICAgIGNhbTJlZV9zdHIgPSBmaWxlX3JvYm90LnJlYWRsaW5lKCkuc3BsaXQoJyAnKQogICAgICAgICAgICBjYW0yZWUgPSBbZmxvYXQoeCkgZm9yIHggaW4gY2FtMmVlX3N0ciBpZiB4IGlzIG5vdCAnJ10KICAgICAgICAgICAgYXNzZXJ0IGxlbihjYW0yZWUpID09IDE2CiAgICAgICAgICAgIHNlbGYuY2FtMmVlID0gbnAucmVzaGFwZShucC5hcnJheShjYW0yZWUpLCAoNCwgNCkpCgogICAgICAgICMgUm9ib3Qgam9pbnQgZm9yIGVhY2ggdmlldyAoMjQgdmlld3MpCiAgICAgICAgIyBSaWdodCBSb2JvdAogICAgICAgIHNlbGYucm9iX2pvaW50c192aWV3ID0gWwogICAgICAgICAgICAjIEZyb250IHRvIGJhY2sKICAgICAgICAgICAgKDEuMzI3MDc4ODE5Mjc0OTAyMywgLTAuNTg3MTMxODAyMjM1NzM4NiwgMC41NjM1MTU2NjMxNDY5NzI3LAogICAgICAgICAgICAgLTAuOTc1NDgxMzM1MzE2NzkzMywgLTEuNzEyODY4NTE1NjQ1MTYyNCwgLTAuOTk4MzYwOTM1ODQxNjk1NiksCiAgICAgICAgICAgICgxLjMyNjc0MzI0NTEyNDgxNywgLTAuNzY2NjA4MDYzMzc0NjU0NiwgMC41NTA3NjU5OTEyMTA5Mzc1LAogICAgICAgICAgICAgLTEuMTAwMDc4ODg0NzU1MjY5OCwgLTEuNjE2OTE4Mzg4OTk3MjEzMiwgLTAuODY4OTg0MDQ3NTY2NTQ5MSksCiAgICAgICAgICAgICgxLjMzNjAxOTAzOTE1NDA1MjcsIC0wLjk0Njk2MTIyODA0NzUwNjIsIDAuNTQ2ODk1OTgwODM0OTYwOSwKICAgICAgICAgICAgIC0wLjkzNzc5NDAzMzY4MTA1MTEsIC0xLjYxNzA4NjIzNTY3NjkwMDcsIC0wLjk0NzY2MjY1NTUwNzIyMyksCiAgICAgICAgICAgICgxLjMzNTk3MTExNzAxOTY1MzMsIC0xLjEwOTE5NzQ0MTczMTU4ODIsIDAuNTQzMjQxMDI0MDE3MzM0LAogICAgICAgICAgICAgLTEuMTE4NDU2MTg4ODMyNDE4MywgLTEuNjE3MDUwNDcyODkwMDM1NSwgLTAuOTQ3NjE0NDk0OTU0MjQ0NCksCiAgICAgICAgICAgICgxLjMwOTc4NTk2MjEwNDc5NzQsIC0xLjMyNTk0NzEwOTg1MjkyNiwgMC41NDE3OTE0MzkwNTYzOTY1LAogICAgICAgICAgICAgLTEuMjA5OTEzNTU1Nzc1Nzc3NiwgLTEuNjE3MDg2MjM1Njc2OTAwNywgLTAuOTQ3NTkwNjUzMDk2MzM0MyksCiAgICAgICAgICAgICgxLjMwNjM0NjQxNjQ3MzM4ODcsIC0xLjUzMTc5OTYxODM5Nzg0OCwgMC41NDAyMDk3NzAyMDI2MzY3LAogICAgICAgICAgICAgLTEuMjExNDg0MjU3Mzc0ODk4NywgLTEuNjI3NTM2MTIxOTk4OTIyMiwgLTAuOTQyODIxODA0Njc3MTQ0OCksCiAgICAgICAgICAgICgxLjMwNjI3NDUzMzI3MTc4OTYsIC0xLjg4NjU4NDU4MzkxMjk4NDcsIDAuNTM5ODYyMTU1OTE0MzA2NiwKICAgICAgICAgICAgIC0xLjMwMDc1MDU1NzU3NjMxNDcsIC0xLjYyNzU3MTg4NDc4NTc4NzQsIC0wLjk0MjgzMzcyNTYwNjA5OTkpLAogICAgICAgICAgICAoMS4zMDY1NTAxNDUxNDkyMzEsIC0yLjMwMzAzNzQ2ODU4NzA1NywgMC41Mzk3NDI0Njk3ODc1OTc3LAogICAgICAgICAgICAgLTEuMzAwNjE4NDczNjgzNDkyNSwgLTEuNzg4OTQ5NzkxNTg1MTAzOCwgLTAuOTQxMzU5ODIxOTUwMDk0KSwKICAgICAgICAgICAgKDEuMzA4Mjc1OTM4MDM0MDU3NiwgLTIuNjYzODE0MzY5ODMyMTc0LCAwLjUzOTY5NDc4NjA3MTc3NzMsCiAgICAgICAgICAgICAtMS4yMTgwODk0MDU2OTAzMjg0LCAtMS43ODI0MDIzNDA1NjU4MTY3LCAtMC45NDEzMDAyMTczMDUzMTg3KSwKICAgICAgICAgICAgKDEuMzA0NDc2OTc2Mzk0NjUzMywgLTIuOTk5Nzc0MjgxMTc4NjA5NywgMC41Mzg5MTU2MzQxNTUyNzM0LAogICAgICAgICAgICAgLTEuMjE4MTQ5NDg3MTcyMjYyLCAtMS41NzcxOTA3MDExNjE1MTk4LCAtMC43MjM3MzYxMTEzMTc3Njk4KSwKCiAgICAgICAgICAgICMgUmlnaHQKICAgICAgICAgICAgKDAuMTYzNTk2Mjg3MzY5NzI4MSwgLTMuMDAwMTgxOTc2OTQ4ODczMywgMC41Mzg4OTE3OTIyOTczNjMzLAogICAgICAgICAgICAgLTEuMjE4MzI5MjU0NzgwOTA0NiwgLTEuMjE2NzM1NjY0OTk4MTg5NywgLTAuNzIzNzQ4MDMyMjQ2NzI0OSksCiAgICAgICAgICAgICgtMC4xMTkyMTkxMjgyODU1NDMyNiwgLTMuMDM1NTM4MDIxNzE4MTYwNSwgMC4zOTY1NjQ0ODM2NDI1NzgxLAogICAgICAgICAgICAgLTAuOTg4MTAzNjkxNzMxNTg4MiwgLTEuMjE2NzIzNzQ0MDY5MjM0NywgLTAuNzIzODIwMDM0NjU3NjEzNiksCiAgICAgICAgICAgICgtMC4yMTk4NzQyMDcxNzM0ODI3MiwgLTIuNjgxOTYzNzQ1NzQ3NzAxNSwgMC40MDA0NTkyODk1NTA3ODEyNSwKICAgICAgICAgICAgIC0wLjkzOTExMjQ4ODQyMzQ4MjcsIC0xLjIxNjcxMTgyMzE0MDI3OTYsIC0wLjcyMzgzMTk1NTU4NjU2ODcpLAogICAgICAgICAgICAoLTAuMTU1NzgzMDAxNTc2NTU4OSwgLTIuMzUzOTM5MzU4Mzg4MDgyMywgMC4zMjE5MTE4MTE4Mjg2MTMzLAogICAgICAgICAgICAgLTAuODc1NzE1MDgwODkxNzQ0NCwgLTEuMzQ3MjYxMjUzOTg3NDQ3NiwgLTAuODA3NjkwOTIyNDEzOTYxMiksCgogICAgICAgICAgICAjIExlZnQKICAgICAgICAgICAgKDMuMjczNjM0NjcyMTY0OTE3LCAtMy4xNDgyOTg1NjU1NDE0MDI2LCAwLjMwNzY5NzI5NjE0MjU3ODEsCiAgICAgICAgICAgICAtMC44NzI1MjY0NzA4MTQ4NDAxLCAtMi4wNjMwNjU4MzA4NjEyMjcsIC0wLjkwMDk2NTk5MjYwNDM5MDkpLAogICAgICAgICAgICAoMi44Njk1OTc5MTE4MzQ3MTcsIC0yLjk1OTk1ODg1NTMwNTgwNywgMC4zOTk1NDg1MzA1Nzg2MTMzLAogICAgICAgICAgICAgLTAuODcyMTkwMzAwNjE4MzA2OSwgLTEuOTgyODQ3MDM4ODk5NTU3LCAtMC45MDA5Nzc5MTM1MzMzNDYpLAogICAgICAgICAgICAoMy40NDU5NDQwNzA4MTYwNCwgLTIuNzIzNTAwMDc2OTI0NDU5MywgMC4zMjI0MjY3OTU5NTk0NzI2NiwKICAgICAgICAgICAgIC0wLjg3MjA0Njc3MjYzMzY4NzgsIC0yLjA3Njc5NjgzMzY2ODg0NCwgLTAuOTAwOTY1OTkyNjA0MzkwOSksCiAgICAgICAgICAgICgzLjUzNTAxNDE1MjUyNjg1NTUsIC0yLjQ1Mjk5NTYwMjI4NDU2NjcsIDAuMzIyNTc1MDkyMzE1NjczODMsCiAgICAgICAgICAgICAtMC44Nzc0ODc5NjE0NDU5NDM3LCAtMi4xODcyNjE4ODM0MTI0OTY0LCAtMC44NDg5Nzc4Njc3NTY5Nzg4KSwKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICgxLjMwOTc4NTk2MjEwNDc5NzQsIC0xLjMyNTk0NzEwOTg1MjkyNiwgMC41NDE3OTE0MzkwNTYzOTY1LAogICAgICAgICAgICAgLTEuMjA5OTEzNTU1Nzc1Nzc3NiwgLTEuNjE3MDg2MjM1Njc2OTAwNywgLTAuOTQ3NTkwNjUzMDk2MzM0MyksCiAgICAgICAgICAgICgwLjgzNjc5NTUwODg2MTU0MTcsIC0xLjg5OTM5Mzg2MDQ5Mzc5NTIsIDEuMjg4NzAxNTM0MjcxMjQwMiwKICAgICAgICAgICAgIC0xLjY0MDgwNDU5Mjc2MzA4MjMsIC0xLjA5MTUzMTEwMTg1NzMyMDYsIC0xLjMxMTcxNjg1ODU0MDY3MDIpLAogICAgICAgICAgICAoMS4zMDQ0NzY5NzYzOTQ2NTMzLCAtMi45OTk3NzQyODExNzg2MDk3LCAwLjUzODkxNTYzNDE1NTI3MzQsCiAgICAgICAgICAgICAtMS4yMTgxNDk0ODcxNzIyNjIsIC0xLjU3NzE5MDcwMTE2MTUxOTgsIC0wLjcyMzczNjExMTMxNzc2OTgpLAoKICAgICAgICAgICAgIyBSaWdodAogICAgICAgICAgICAoLTAuMDUyNDA2NjEzMDI2NzU0MiwgLTMuMDA1NDQ0ODI4NjYzOTYxMiwgMC4zMDc0MjE2ODQyNjUxMzY3LAogICAgICAgICAgICAgLTAuNjA1MTQ3NjYzNzQ2OTY5LCAtMS4yODg5OTAzMjI3NDM1NTEsIC0wLjcyMzg5MjAzNzA2ODUwMjIpLAoKICAgICAgICAgICAgIyBMZWZ0CiAgICAgICAgICAgICgyLjM4OTc4NjcyMDI3NTg3OSwgLTMuMTM3MDI4MDQyNDcwMTEzNiwgMC4zOTc0MDMyNDAyMDM4NTc0LAogICAgICAgICAgICAgLTAuNzgyMTk3MzAwNTg3Nzg5NCwgLTEuOTg0MTc1NTA3MjIyMzEwOCwgLTAuOTAwOTMwMjI5ODE3NTI1NyksCiAgICAgICAgXQoKICAgIGRlZiBzYXZlX2ZyYW1lKHNlbGYsIGlkeCk6CiAgICAgICAgcHJpbnQoJ1N0YXJ0IENhcHR1cmluZyB0aGUgZnJhbWUuLi4nKQoKICAgICAgICByZ2JfZmlsZV9uYW1lID0gJ2ZyYW1lLXs6MDZkfS5jb2xvci5wbmcnLmZvcm1hdChpZHggKyAxNTApCiAgICAgICAgZGVwdGhfZmlsZV9uYW1lID0gJ2ZyYW1lLXs6MDZkfS5kZXB0aC5wbmcnLmZvcm1hdChpZHggKyAxNTApCiAgICAgICAgcG9zZV9maWxlX25hbWUgPSAnZnJhbWUtezowNmR9LnBvc2UudHh0Jy5mb3JtYXQoaWR4ICsgMTUwKQoKICAgICAgICBpZiBub3Qgc2VsZi5hdXRvbWF0aWM6CiAgICAgICAgICAgIHJnYl9pbWcsIGRlcHRoX2ltZywgY2FtZXJhX3Bvc2UgPSBzZWxmLmNhbS5nZXRfZnJhbWUoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJnYl9pbWcsIGRlcHRoX2ltZywgXyA9IHNlbGYuY2FtLmdldF9mcmFtZSgpCiAgICAgICAgICAgIHJvYm90X3Bvc2UgPSBzZWxmLnJvYm90LmdldF9wb3NlKCkKICAgICAgICAgICAgY2FtZXJhX3Bvc2UgPSBucC5tYXRtdWwocm9ib3RfcG9zZSwgc2VsZi5jYW0yZWUpCgogICAgICAgIHNhdmVfc3VjY2VzcyA9IEZhbHNlCgogICAgICAgIGlmIHJnYl9pbWcgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICMgU2F2ZSByZ2IgaW1hZ2UKICAgICAgICAgICAgY3YyLmltd3JpdGUob3MucGF0aC5qb2luKHNlbGYuZGF0YV9mb2xkZXIsIHJnYl9maWxlX25hbWUpLCByZ2JfaW1nKQogICAgICAgICAgICAjIFNhdmUgZGVwdGggaW1hZ2UKICAgICAgICAgICAgY3YyLmltd3JpdGUob3MucGF0aC5qb2luKHNlbGYuZGF0YV9mb2xkZXIsIGRlcHRoX2ZpbGVfbmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoX2ltZykKCiAgICAgICAgICAgICMgU2F2ZSBwb3NlIHR4dCBmaWxlCiAgICAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLmRhdGFfZm9sZGVyLCBwb3NlX2ZpbGVfbmFtZSksICd3JykKICAgICAgICAgICAgZm9yIGxpbmUgaW4gY2FtZXJhX3Bvc2U6CiAgICAgICAgICAgICAgICB3cml0ZUxpbmUgPSBzdHIobGluZVswXSkgKyAnICcgKyBzdHIobGluZVsxXSkgKyAnICcgKyBzdHIoCiAgICAgICAgICAgICAgICAgICAgbGluZVsyXSkgKyAnICcgKyBzdHIobGluZVszXSkgKyAnXG4nCiAgICAgICAgICAgICAgICBmLndyaXRlKHdyaXRlTGluZSkKCiAgICAgICAgICAgIGYuY2xvc2UoKQoKICAgICAgICAgICAgcHJpbnQoJ0ZpbmlzaCBudW1iZXIge30gZnJhbWUhJy5mb3JtYXQoaWR4KSkKICAgICAgICAgICAgc2F2ZV9zdWNjZXNzID0gVHJ1ZQoKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCgKICAgICAgICAgICAgICAgICdOb3RoaW5nIGlzIHNhdmVkISBUaGVyZSBpcyBtaXNzaW5nIGRhdGEgZnJvbSByZ2JfaW1nLCBkZXB0aF9pbWcsIG9yIGNhbWVyYV9wb3NlIScKICAgICAgICAgICAgKQogICAgICAgICAgICBwcmludCgnUGxlYXNlIGNoZWNrIScpCgogICAgZGVmIGNvbGxlY3RfZGF0YShzZWxmKToKICAgICAgICBmb3IgaWR4LCByb2Jfam9pbnQgaW4gZW51bWVyYXRlKHNlbGYucm9iX2pvaW50c192aWV3KToKICAgICAgICAgICAgc2VsZi5yb2JvdC5tb3ZlX3RvX2pvaW50KHJvYl9qb2ludCkKICAgICAgICAgICAgc2VsZi5zYXZlX2ZyYW1lKGlkeCkKCiAgICAgICAgc2VsZi5yb2JvdC5nb19ob21lKCkKICAgICAgICBzZWxmLnJvYm90LmRpc2Nvbm5lY3QoKQo8fGZpbV9zdWZmaXh8PgoKICAgICAgICAgICAgIyBGcm9udCB0byBiYWNrCiAgICAgICAgICAgICgxLjMzNjAxOTAzOTE1NDA1MjcsIC0wLjk0Njk2MTIyODA0NzUwNjIsIDAuNTQ2ODk1OTgwODM0OTYwOSwKICAgICAgICAgICAgIC0wLjkzNzc5NDAzMzY4MTA1MTEsIC0xLjYxNzA4NjIzNTY3NjkwMDcsIC0wLjk0NzY2MjY1NTUwNzIyMyksCjx8ZmltX2VuZHw+"]
["41f515dd0b84aafb0de34245c47a6c2c8df94929-3","41f515dd0b84aafb0de34245c47a6c2c8df94929","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJhbmRvbQoKZGVmIHJ1bigpOgogICAgcHJpbnQoIkFkaXZpbmEgZWwgbnVtZXJvIikKPHxmaW1faG9sZXw+CiAgICAgICAgaW50ZW50b3MgPSBpbnRlbnRvcyAtIDEKICAgICAgICBudW1lcm8gPSBpbnQoaW5wdXQoIkluZ3Jlc2UgdW4gbnVtZXJvOiAiKSkKICAgICAgICBpZiAobnVtZXJvID4gbnVtZXJvX2dlbmVyYWRvKToKICAgICAgICAgICAgcHJpbnQoIkVsIG51bWVybyBlcyBtZW5vciEiKQogICAgICAgIGVsaWYgKG51bWVybyA8IG51bWVyb19nZW5lcmFkbyk6CiAgICAgICAgICAgIHByaW50KCJFbCBudW1lcm8gZXMgbWF5b3IhIikKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCAoIkdhbmFzdGUhIikKICAgICAgICAgICAgYnJlYWsKICAgIGlmIChpbnRlbnRvcyA9PSAwKToKICAgICAgICBwcmludCAoIlRlIHF1ZWRhc3RlIHNpbiBpbnRlbnRvcyIpCiAgICAgICAgcHJpbnQgKCJFbCBudW1lcm8gZXJhICIgKyBzdHIobnVtZXJvX2dlbmVyYWRvKSkKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBydW4oKQo8fGZpbV9zdWZmaXh8PgogICAgbnVtZXJvX2dlbmVyYWRvID0gcmFuZG9tLnJhbmRpbnQoMSwxMDApCiAgICBudW1lcm8gPSAwCiAgICBpbnRlbnRvcyA9IDUKICAgIHdoaWxlICgobnVtZXJvICE9IG51bWVyb19nZW5lcmFkbykgYW5kIGludGVudG9zID4gMCk6Cjx8ZmltX2VuZHw+"]
["0098e8fb70e30467eba0f515b4b917629babfecd-2","0098e8fb70e30467eba0f515b4b917629babfecd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQgYm90bzMKaW1wb3J0IGRlY2ltYWwKaW1wb3J0IGRhdGV0aW1lCmZyb20gY29tbW9uIGltcG9ydCBEZWNpbWFsRW5jb2RlciwgZ2V0X2VuZ2luZXMsIHVwZGF0ZV9lbmdpbmVfc3RhdHVzLCBkZWxldGVfZW5naW5lLCBzZW5kX3Nxc19tZXNzYWdlLCBsaXN0X3Rhc2tzLCBkZXNjcmliZV90YXNrcwpmcm9tIGJvdG9jb3JlLmV4Y2VwdGlvbnMgaW1wb3J0IENsaWVudEVycm9yCmZyb20gYm90bzMuZHluYW1vZGIuY29uZGl0aW9ucyBpbXBvcnQgS2V5LCBBdHRyCgpsb2dnaW5nLmJhc2ljQ29uZmlnKGZvcm1hdD0nJShsZXZlbG5hbWUpczogJShhc2N0aW1lKXM6ICUobWVzc2FnZSlzJykKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQpsb2dnZXIuc2V0TGV2ZWwob3MuZW52aXJvblsnTE9HR0lOR19MRVZFTCddKQoKCmR5bmFtb2RiX3Jlc291cmNlID0gYm90bzMucmVzb3VyY2UoJ2R5bmFtb2RiJykKZHluYW1vZGJfY2xpZW50ID0gYm90bzMuY2xpZW50KCdkeW5hbW9kYicpCnNxc19jbGllbnQgPSBib3RvMy5jbGllbnQoJ3NxcycpCnByaWNpbmdfY2xpZW50ID0gYm90bzMuY2xpZW50KCdwcmljaW5nJywgcmVnaW9uX25hbWU9J3VzLWVhc3QtMScpCgoKZGVmIHJlc3BvbnNlKGJvZHksIHN0YXR1c19jb2RlKToKICAgIHJlc3BvbnNlID0gewogICAgICAgICdzdGF0dXNDb2RlJzogc3RyKHN0YXR1c19jb2RlKSwKICAgICAgICAnYm9keSc6IGpzb24uZHVtcHMoYm9keSwgY2xzPURlY2ltYWxFbmNvZGVyLCBkZWZhdWx0PXN0ciksCiAgICAgICAgJ2hlYWRlcnMnOiB7CiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nOiAnKicKICAgICAgICB9LAogICAgfQogICAgbG9nZ2VyLmluZm8oanNvbi5kdW1wcyhyZXNwb25zZSkpCiAgICByZXR1cm4gcmVzcG9uc2UKCgpkZWYgd3JpdGVfZW5naW5lX3RvX3RhYmxlKGVuZ2luZTogc3RyLCBkZXNjcmlwdGlvbjogc3RyLCBib2R5PU5vbmUpOgogICAgdHJ5OgogICAgICAgIGlmIGVuZ2luZSA9PSAnbG9jdXN0JyBhbmQgYm9keSAhPSBOb25lOgogICAgICAgICAgICBkeW5hbW9kYl9jbGllbnQucHV0X2l0ZW0oVGFibGVOYW1lPW9zLmVudmlyb25bJ0VOR0lORV9ERVBMT1lNRU5UU19EWU5BTU9EQl9UQUJMRSddLCBJdGVtPXsKICAgICAgICAgICAgICAgICdlbmdpbmVfdHlwZSc6IHsKICAgICAgICAgICAgICAgICAgICAnUyc6IGVuZ2luZSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiB7CiAgICAgICAgICAgICAgICAgICAgJ1MnOiBkZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnc3RhcnRlZCc6IHsKICAgICAgICAgICAgICAgICAgICAnUyc6IGRhdGV0aW1lLmRhdGV0aW1lLnV0Y25vdygpLmlzb2Zvcm1hdCgpLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdudW1NYXN0ZXJOb2Rlcyc6IHsKICAgICAgICAgICAgICAgICAgICAnTic6IHN0cihib2R5WydudW1NYXN0ZXJOb2RlcyddKSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnbWFzdGVyTm9kZVZjcHUnOiB7CiAgICAgICAgICAgICAgICAgICAgJ04nOiBzdHIoYm9keVsnbWFzdGVyTm9kZVZjcHUnXSksCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ21hc3Rlck5vZGVNZW1vcnknOiB7CiAgICAgICAgICAgICAgICAgICAgJ04nOiBzdHIoYm9keVsnbWFzdGVyTm9kZU1lbW9yeSddKSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnbnVtU2xhdmVOb2Rlcyc6IHsKICAgICAgICAgICAgICAgICAgICAnTic6IHN0cihib2R5WydudW1TbGF2ZU5vZGVzJ10pLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdzbGF2ZU5vZGVWY3B1JzogewogICAgICAgICAgICAgICAgICAgICdOJzogc3RyKGJvZHlbJ3NsYXZlTm9kZVZjcHUnXSksCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ3NsYXZlTm9kZU1lbW9yeSc6IHsKICAgICAgICAgICAgICAgICAgICAnTic6IHN0cihib2R5WydzbGF2ZU5vZGVNZW1vcnknXSksCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ2xvY3VzdEZpbGVOYW1lJzogewogICAgICAgICAgICAgICAgICAgICdTJzogc3RyKGJvZHlbJ2xvY3VzdEZpbGVOYW1lJ10pLAogICAgICAgICAgICAgICAgfSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgJ2N1c3RvbUxvY3VzdEZpbGUnOiB7CiAgICAgICAgICAgICAgICAgICAgJ0JPT0wnOiBib2R5WydjdXN0b21Mb2N1c3RGaWxlJ10sCiAgICAgICAgICAgICAgICB9LAo8fGZpbV9lbmR8Pg=="]
["6b7c6ee9a99d001f54e2cca0b1fe279dc222c837-1","6b7c6ee9a99d001f54e2cca0b1fe279dc222c837","PHxmaW1fcHJlZml4fD4KZnJvbSBhc3NldC5tb2RlbHMgaW1wb3J0IEhvc3QsIEhvc3RHcm91cApmcm9tIHJlc3RfZnJhbWV3b3JrIGltcG9ydCBzZXJpYWxpemVycwpmcm9tIGludmVudG9yeS5tb2RlbHMgaW1wb3J0IEludmVudG9yeQoKCmNsYXNzIEhvc3RTZXJpYWxpemVyKHNlcmlhbGl6ZXJzLk1vZGVsU2VyaWFsaXplcik6CiAgICBzdGF0dXNfaCA9IHNlcmlhbGl6ZXJzLkNoYXJGaWVsZChzb3VyY2U9J2dldF9zdGF0dXNfZGlzcGxheScpCiAgICBpZGxlX2ggPSBzZXJpYWxpemVycy5DaGFyRmllbGQoc291cmNlPSdnZXRfaWRsZV9kaXNwbGF5JykKICAgIGludmVudG9yeSA9IHNlcmlhbGl6ZXJzLlByaW1hcnlLZXlSZWxhdGVkRmllbGQoYWxsb3dfbnVsbD1UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeXNldD1JbnZlbnRvcnkub2JqZWN0cy5hbGwoKSkKICAgIGludmVudG9yeV9oID0gc2VyaWFsaXplcnMuU3RyaW5nUmVsYXRlZEZpZWxkKHNvdXJjZT0naW52ZW50b3J5JykKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIG1vZGVsID0gSG9zdAogICAgICAgIGV4Y2x1ZGUgPSAoJ3NhbHRfcmF3JywpCiAgICAgICAgcmVhZF9vbmx5X2ZpZWxkcyA9ICgnbWluaW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRlX2NyZWF0ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGVfdXBkYXRlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaG9zdF9uYW1lJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYWNoaW5lX2lkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYW51ZmFjdHVyZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlcmlhbG51bWJlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3Njb2RlbmFtZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3NyZWxlYXNlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjcHVfbW9kZWwnLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlza3MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lbV90b3RhbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3dhcF90b3RhbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnVtX2NwdXMnLAo8fGZpbV9lbmR8Pg=="]
["996b2afb75198aafa0c23633e69da89c9975c86c-4","996b2afb75198aafa0c23633e69da89c9975c86c","PHxmaW1fcHJlZml4fD4KIiIiCkNsYXNzaWZpY2F0aW9uLWJhc2VkIGd5bSBlbnZpcm9ubWVudApJdCBpcyBiYXNlZCBvbiAKaHR0cHM6Ly9naXRodWIuY29tL2RlZXBtaW5kL25ldXJhbF90ZXN0YmVkL2Jsb2IvbWFzdGVyL25ldXJhbF90ZXN0YmVkL2dlbmVyYXRpdmUvY2xhc3NpZmljYXRpb25fZW52bGlrZWxpaG9vZC5weQoiIiIKCmltcG9ydCBqYXgubnVtcHkgYXMgam5wCgppbXBvcnQgY2hleAoKZnJvbSBqYXggaW1wb3J0IGppdAoKaW1wb3J0IGhhaWt1IGFzIGhrCgpmcm9tIGd5bSBpbXBvcnQgRW52LCBzcGFjZXMKZnJvbSB0eXBpbmcgaW1wb3J0IENhbGxhYmxlLCBBbnkKCmZyb20ganNsLmd5bV9lbnZzLmVudnMuYmFzZSBpbXBvcnQgc2FtcGxlX2dhdXNzaWFuX2Nsc19kYXRhLCBjYXRlZ29yaWNhbF9sb2dfbGlrZWxpaG9vZAoKY2xhc3MgQ2xhc3NpZmljYXRpb25FbnYoRW52KToKCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgYXBwbHlfZm46IENhbGxhYmxlLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgeF90cmFpbl9nZW5lcmF0b3I6IENhbGxhYmxlLAogICAgICAgICAgICAgIHhfdGVzdF9nZW5lcmF0b3I6IENhbGxhYmxlLAogICAgICAgICAgICAgIHByaW9yX2tub3dsZWRnZTogQW55LAogICAgICAgICAgICAgIHRyYWluX2JhdGNoX3NpemU6IGludCwKPHxmaW1fZW5kfD4="]
["ec2c43f0d25d445f7dcd95967a6c353b6ee60e1d-1","ec2c43f0d25d445f7dcd95967a6c353b6ee60e1d","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IENhbGxhYmxlLCBMaXN0LCBEaWN0LCBUdXBsZSwgVW5pb24sIE5hbWVkVHVwbGUKPHxmaW1faG9sZXw+ClBhcmFtcyA9IERpY3Rbc3RyLCBvYmplY3RdClN0YXRlID0gRGljdFtzdHIsIG9iamVjdF0KU2lnbmFsID0gRGljdFtzdHIsIG9iamVjdF0KSGlzdG9yeSA9IExpc3RbTGlzdFtTdGF0ZV1dClN1YnN0ZXAgPSBpbnQKVmFyaWFibGVVcGRhdGUgPSBUdXBsZVtzdHIsIG9iamVjdF0KClBvbGljeSA9IENhbGxhYmxlW1tQYXJhbXMsIFN1YnN0ZXAsIEhpc3RvcnksIFN0YXRlXSwgU2lnbmFsXQpTdGF0ZVVwZGF0ZSA9IENhbGxhYmxlW1tQYXJhbXMsIFN1YnN0ZXAsIEhpc3RvcnksIFN0YXRlLCBTaWduYWxdLCBWYXJpYWJsZVVwZGF0ZV0KClN0YXRlVXBkYXRlQmxvY2sgPSBEaWN0W3N0ciwgb2JqZWN0XQpUaW1lc3RlcEJsb2NrID0gTGlzdFtTdGF0ZVVwZGF0ZUJsb2NrXQoKY2xhc3MgSW5pdGlhbFZhbHVlKE5hbWVkVHVwbGUpOgogICAgdmFsdWU6IG9iamVjdAogICAgdHlwZTogdHlwZQoKCmNsYXNzIFBhcmFtKE5hbWVkVHVwbGUpOgogICAgdmFsdWU6IG9iamVjdAogICAgdHlwZTogdHlwZQoKCmNsYXNzIFBhcmFtU3dlZXAoTmFtZWRUdXBsZSk6CiAgICB2YWx1ZTogVHVwbGVbb2JqZWN0XQogICAgdHlwZTogdHlwZQoKCkluaXRpYWxTdGF0ZSA9IERpY3Rbc3RyLCBJbml0aWFsVmFsdWVdClN5c3RlbVBhcmFtZXRlcnMgPSBEaWN0W3N0ciwgVW5pb25bUGFyYW0sIFBhcmFtU3dlZXBdXQo8fGZpbV9zdWZmaXh8PgoKU3RhdGVWYXJpYWJsZSA9IG9iamVjdApQYXJhbWV0ZXIgPSBUdXBsZVtvYmplY3RdCgo8fGZpbV9lbmR8Pg=="]
["68cbf7e54510d9823a4d2d6c853975b0fbbae494-1","68cbf7e54510d9823a4d2d6c853975b0fbbae494","PHxmaW1fcHJlZml4fD4KZnJvbSB0ZW5zb3JmbG93LnB5dGhvbi5rZXJhcyBpbXBvcnQgbGF5ZXJzCmZyb20gdGVuc29yZmxvdy5weXRob24ua2VyYXMgaW1wb3J0IG1vZGVscwpmcm9tIHRlbnNvcmZsb3cua2VyYXMub3B0aW1pemVycyBpbXBvcnQgQWRhbQo8fGZpbV9ob2xlfD4KCgoKPHxmaW1fc3VmZml4fD4KZnJvbSB0ZW5zb3JmbG93IGltcG9ydCBrZXJhcwppbXBvcnQgbnVtcHkgYXMgbnAKQklUUyA9IDYKT1BTX0JJVFMgPSA0Cjx8ZmltX2VuZHw+"]
["5aab857869201602f5b1d9dc070750cb329fced6-4","5aab857869201602f5b1d9dc070750cb329fced6","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiJDb252ZXJ0IGRhdGEgaW4gYW4gYXRyYW0gc3FsaXRlIGRhdGFiYXNlIGludG8gZmFzdGEgZmlsZXMuIiIiCgppbXBvcnQgc3lzCmZyb20gb3MucGF0aCBpbXBvcnQgZXhpc3RzLCBzcGxpdGV4dAppbXBvcnQgYXJncGFyc2UKaW1wb3J0IHRleHR3cmFwCmltcG9ydCBsaWIuZGIgYXMgZGIKaW1wb3J0IGxpYi5ibGFzdCBhcyBibGFzdAppbXBvcnQgbGliLnV0aWwgYXMgdXRpbAoKCmRlZiBjcmVhdGVfZmFzdGFfZmlsZXMoYXJncyk6CiAgICAiIiJDb252ZXJ0IGRhdGEgaW4gYW4gYXRyYW0gc3FsaXRlIGRhdGFiYXNlIGludG8gZmFzdGEgZmlsZXMuIiIiCiAgICBpZiBub3QgZXhpc3RzKGRiLmdldF9kYl9uYW1lKGFyZ3NbJ2JsYXN0X2RiJ10pKToKICAgICAgICBzeXMuZXhpdCgnQ291bGQgbm90IGZpbmQgdGhlIGRhdGFiYXNlLicpCgogICAgd2l0aCBkYi5jb25uZWN0KGFyZ3NbJ2JsYXN0X2RiJ10sIGNoZWNrX3ZlcnNpb249VHJ1ZSkgYXMgY3huOgogICAgICAgIHRyeToKICAgICAgICAgICAgZmlsZXMgPSBvcGVuX2Zhc3RhX2ZpbGVzKGFyZ3MsIGN4bikKCiAgICAgICAgICAgIGZvciByZWMgaW4gZGIuZ2V0X2FsbF9zZXF1ZW5jZXMoY3huKToKICAgICAgICAgICAgICAgIHV0aWwud3JpdGVfZmFzdGFfcmVjb3JkKGZpbGVzW3JlY1sxXV0sIHJlY1swXSwgcmVjWzJdLCByZWNbMV0pCgogICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgIGNsb3NlX2Zhc3RhX2ZpbGVzKGZpbGVzKQoKCmRlZiBvcGVuX2Zhc3RhX2ZpbGVzKGFyZ3MsIGN4bik6CiAgICAiIiJPcGVuIG9uZSBmYXN0YSBmaWxlIGZvciBlYWNoIHNlcXVlbmNlIGVuZC4iIiIKICAgIGZpbGVzID0ge30KICAgIGZvciBlbmQgaW4gW2VbMF0gZm9yIGUgaW4gZGIuZ2V0X3NlcXVlbmNlX2VuZHMoY3huKV06CiAgICAgICAgbmFtZSA9ICd7fXt9Lnt9Jy5mb3JtYXQoYXJnc1snZmFzdGFfcm9vdCddLCBlbmQsIGFyZ3NbJ2Zhc3RhX2V4dCddKQogICAgICAgIGZpbGVzW2VuZF0gPSBvcGVuKG5hbWUsICd3JykKICAgIHJldHVybiBmaWxlcwoKCmRlZiBjbG9zZV9mYXN0YV9maWxlcyhmaWxlcyk6CiAgICAiIiJDbG9zZSBhbGwgZmFzdGEgZmlsZXMuIiIiCiAgICBmb3IgZmlsZSBpbiBmaWxlcy52YWx1ZXMoKToKICAgICAgICBmaWxlLmNsb3NlKCkKCgpkZWYgcGFyc2VfY29tbWFuZF9saW5lKCk6CiAgICAiIiJQcm9jZXNzIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuIiIiCiAgICBkZXNjcmlwdGlvbiA9ICIiIgogICAgICAgIFRoaXMgd2lsbCByZWFkIHRocm91Z2ggdGhlIGFUUkFNIFNRTGl0ZSBkYXRhYmFzZSBhbmQgY3JlYXRlIGZhc3RhCiAgICAgICAgZmlsZXMuIE9uZSBmb3IgZWFjaCBlbmQuIFNvIGVuZCAxIHdpbGwgYmUgbmFtZWQgPGZpbGUtbmFtZT4xLmZhc3RhCjx8ZmltX2hvbGV8PgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCiAgICAgICAgZnJvbWZpbGVfcHJlZml4X2NoYXJzPSdAJywKICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyLAogICAgICAgIGRlc2NyaXB0aW9uPXRleHR3cmFwLmRlZGVudChkZXNjcmlwdGlvbikpCgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS12ZXJzaW9uJywgYWN0aW9uPSd2ZXJzaW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbj0nJShwcm9nKXMge30nLmZvcm1hdChkYi5BVFJBTV9WRVJTSU9OKSkKCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYicsICctLWJsYXN0LWRiJywgJy0tc3JhJywgJy0tZGInLCAnLS1kYXRhYmFzZScsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVRydWUsIG1ldGF2YXI9J0RCJywKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iIiJUaGlzIG5lZWRzIHRvIG1hdGNoIHRoZSBEQiBwcmVmaXggeW91CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50ZXJlZCBmb3IgYXRyYW1fcHJlcHJvY2Vzc29yLnB5LiIiIikKCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZicsICctLWZhc3RhJywgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iIiJXaGF0IHRvIG5hbWUgdGhlIG91dHB1dCBmYXN0YSBmaWxlcyB3aXRob3V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIGVuZCBpbmRpY2F0b3IuIiIiKQoKICAgIGFyZ3MgPSB2YXJzKHBhcnNlci5wYXJzZV9hcmdzKCkpCgogICAgYXJnc1snYmxhc3RfZGInXSA9IGJsYXN0LnRvdWNodXBfYmxhc3RfZGJfbmFtZXMoW2FyZ3NbJ2JsYXN0X2RiJ11dKVswXQoKICAgIChhcmdzWydmYXN0YV9yb290J10sIGFyZ3NbJ2Zhc3RhX2V4dCddKSA9IHNwbGl0ZXh0KGFyZ3NbJ2Zhc3RhJ10pCiAgICBhcmdzWydmYXN0YV9leHQnXSA9IGFyZ3NbJ2Zhc3RhX2V4dCddIGlmIGFyZ3NbJ2Zhc3RhX2V4dCddIGVsc2UgJ2Zhc3RhJwoKICAgIHJldHVybiBhcmdzCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIEFSR1MgPSBwYXJzZV9jb21tYW5kX2xpbmUoKQogICAgY3JlYXRlX2Zhc3RhX2ZpbGVzKEFSR1MpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZXRjLiBJZiB0aGVyZSBpcyBubyBlbmQgaW4gdGhlIERCIChpLmUuIHRoZSBEQiB3YXMgYnVpbHQgd2l0aCB0aGUKICAgICAgICAtLXNpbmdsZS1lbmRzIG9wdGlvbikgdGhlbiB0aGUgZmlsZSBuYW1lIHdpbGwgYmUgPGZpbGUtbmFtZT4uZmFzdGEuCiAgICAgICAgIiIiCjx8ZmltX2VuZHw+"]
["d8a2791e48371c75511213bd3c1cbd0fa5439cf2-1","d8a2791e48371c75511213bd3c1cbd0fa5439cf2","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgonY29tcHV0ZSBtZXRyaWNzIGZvciBWVyB0ZXN0IGZpbGUgYW5kIFZXIHByZWRpY3Rpb25zIGZpbGUnCgppbXBvcnQgc3lzCmltcG9ydCBudW1weSBhcyBucApmcm9tIHNrbGVhcm4ubWV0cmljcyBpbXBvcnQgY29uZnVzaW9uX21hdHJpeApmcm9tIHNrbGVhcm4ubWV0cmljcyBpbXBvcnQgcm9jX2F1Y19zY29yZSBhcyBBVUMKZnJvbSBzY2lweS5zcGVjaWFsIGltcG9ydCBleHBpdCBhcyBzaWdtb2lkCjx8ZmltX2hvbGV8Pgp0cnk6CglrID0gaW50KCBzeXMuYXJndlszXSApCmV4Y2VwdCBJbmRleEVycm9yOgoJayA9IDIwMDAwCgojIGxvYWQgYW5kIHByZXBhcmUgcHJlZGljdGlvbnMKCnByaW50ICJsb2FkaW5nIHAuLi4iCgpwID0gbnAubG9hZHR4dCggcF9maWxlICkKCnlfcHJlZGljdGVkID0gbnAub25lcygoIHAuc2hhcGVbMF0gKSkKeV9wcmVkaWN0ZWRbc2lnbW9pZCggcFs6LDBdICkgPCAwLjVdID0gLTEKCiMgc29ydCBieSBwcmVkaWN0aW9uIGFuZCByZXZlcnNlCmkgPSBucC5hcmdzb3J0KCBwWzosMF0gKVs6Oi0xXQoKIyBpZHMgb2YgbW9zdCBjZXJ0YWluIHByZWRpY3Rpb25zCnBfaWRzID0gcFtpLDFdLmFzdHlwZShpbnQpWzprXQoKIyBsb2FkIHBvc2l0aXZlIGV4YW1wbGVzIGZyb20gdGVzdAoKcHJpbnQgImxvYWRpbmcgeS4uLiIKCnkgPSBucC5sb2FkdHh0KCB5X2ZpbGUsIHVzZWNvbHM9IFswLCAyXSwgY29udmVydGVycyA9IHsgMjogbGFtYmRhIHg6IHguc3BsaXQoICd8JyApWzBdIH0gKQp5X3RydWUgPSB5WzosMF0KcG9zX2lkcyA9IHlbeVs6LDBdID09IDFdWzosMV0uYXN0eXBlKCBpbnQgKQoKIyBjYWxjdWxhdGUgcHJlY2lzaW9uCgpwcmludCAiY2FsY3VsYXRpbmcgQVBAe30uLi4iLmZvcm1hdCggayApCgojIHRoaXMgc25pcHBldCBpcyBmcm9tIEthZ2dsZSBjb2RlCmNvdW50UmVsZXZhbnRzID0gMApsaXN0T2ZQcmVjaXNpb25zID0gbGlzdCgpCmZvciBpLCBwX2lkIGluIGVudW1lcmF0ZShwX2lkcyk6CgljdXJyZW50ayA9IGkgKyAxLjAKCWlmIHBfaWQgaW4gcG9zX2lkczoKCQljb3VudFJlbGV2YW50cyArPSAxCglwcmVjaXNpb25BdEsgPSBjb3VudFJlbGV2YW50cyAvIGN1cnJlbnRrIAoJbGlzdE9mUHJlY2lzaW9ucy5hcHBlbmQocHJlY2lzaW9uQXRLKQoKcHJpbnQgc3VtKCBsaXN0T2ZQcmVjaXNpb25zICkgLyBrIAoKcHJpbnQKcHJpbnQgImNvbmZ1c2lvbiBtYXRyaXg6IgpwcmludCBjb25mdXNpb25fbWF0cml4KCB5X3RydWUsIHlfcHJlZGljdGVkICkKCnByaW50CnByaW50ICJBVUM6IiwgQVVDKCB5X3RydWUsIHBbOiwwXSApCgoKPHxmaW1fc3VmZml4fD4KCnlfZmlsZSA9IHN5cy5hcmd2WzFdCnBfZmlsZSA9IHN5cy5hcmd2WzJdCgo8fGZpbV9lbmR8Pg=="]
["5cf33107010f907b0d401ced5478dad4eda4e125-1","5cf33107010f907b0d401ced5478dad4eda4e125","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMC43IG9uIDIwMjAtMDYtMjMgMjE6NTgKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmltcG9ydCBkamFuZ28uY29udHJpYi5hdXRoLm1vZGVscwpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucywgbW9kZWxzCmltcG9ydCBkamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBpbml0aWFsID0gVHJ1ZQoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ2F1dGgnLCAnMDAxMV91cGRhdGVfcHJveHlfcGVybWlzc2lvbnMnKSwKICAgIF0KCiAgICBvcGVyYXRpb25zID0gWwogICAgICAgIG1pZ3JhdGlvbnMuQ3JlYXRlTW9kZWwoCiAgICAgICAgICAgIG5hbWU9J1RvcGljJywKICAgICAgICAgICAgZmllbGRzPVsKICAgICAgICAgICAgICAgICgnaWQnLCBtb2RlbHMuQXV0b0ZpZWxkKGF1dG9fY3JlYXRlZD1UcnVlLCBwcmltYXJ5X2tleT1UcnVlLCBzZXJpYWxpemU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nSUQnKSksCjx8ZmltX2hvbGV8PgogICAgICAgICAgICBdLAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5DcmVhdGVNb2RlbCgKICAgICAgICAgICAgbmFtZT0nU3R1ZGVudCcsCiAgICAgICAgICAgIGZpZWxkcz1bCiAgICAgICAgICAgICAgICAoJ3VzZXJfcHRyJywgbW9kZWxzLk9uZVRvT25lRmllbGQoYXV0b19jcmVhdGVkPVRydWUsIG9uX2RlbGV0ZT1kamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uLkNBU0NBREUsIHBhcmVudF9saW5rPVRydWUsIHByaW1hcnlfa2V5PVRydWUsIHNlcmlhbGl6ZT1GYWxzZSwgdG89c2V0dGluZ3MuQVVUSF9VU0VSX01PREVMKSksCiAgICAgICAgICAgICAgICAoJ3NjaG9vbCcsIG1vZGVscy5DaGFyRmllbGQoYmxhbms9VHJ1ZSwgbWF4X2xlbmd0aD01MCwgbnVsbD1UcnVlKSksCiAgICAgICAgICAgICAgICAoJ2NpdHknLCBtb2RlbHMuQ2hhckZpZWxkKGNob2ljZXM9WygnV1MnLCAnV2luZHNvcicpLCAoJ0NHJywgJ0NhbGdlcnknKSwgKCdNUicsICdNb250cmVhbCcpLCAoJ1ZDJywgJ1ZhbmNvdXZlcicpXSwgZGVmYXVsdD0nV1MnLCBtYXhfbGVuZ3RoPTIpKSwKICAgICAgICAgICAgICAgICgnaW50ZXJlc3RlZF9pbicsIG1vZGVscy5NYW55VG9NYW55RmllbGQodG89J215YXBwLlRvcGljJykpLAogICAgICAgICAgICBdLAogICAgICAgICAgICBvcHRpb25zPXsKICAgICAgICAgICAgICAgICd2ZXJib3NlX25hbWUnOiAndXNlcicsCiAgICAgICAgICAgICAgICAndmVyYm9zZV9uYW1lX3BsdXJhbCc6ICd1c2VycycsCiAgICAgICAgICAgICAgICAnYWJzdHJhY3QnOiBGYWxzZSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYmFzZXM9KCdhdXRoLnVzZXInLCksCiAgICAgICAgICAgIG1hbmFnZXJzPVsKICAgICAgICAgICAgICAgICgnb2JqZWN0cycsIGRqYW5nby5jb250cmliLmF1dGgubW9kZWxzLlVzZXJNYW5hZ2VyKCkpLAogICAgICAgICAgICBdLAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5DcmVhdGVNb2RlbCgKICAgICAgICAgICAgbmFtZT0nQ291cnNlJywKICAgICAgICAgICAgZmllbGRzPVsKICAgICAgICAgICAgICAgICgnaWQnLCBtb2RlbHMuQXV0b0ZpZWxkKGF1dG9fY3JlYXRlZD1UcnVlLCBwcmltYXJ5X2tleT1UcnVlLCBzZXJpYWxpemU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nSUQnKSksCiAgICAgICAgICAgICAgICAoJ25hbWUnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjAwKSksCiAgICAgICAgICAgICAgICAoJ3ByaWNlJywgbW9kZWxzLkRlY2ltYWxGaWVsZChkZWNpbWFsX3BsYWNlcz0yLCBtYXhfZGlnaXRzPTEwKSksCiAgICAgICAgICAgICAgICAoJ2Zvcl9ldmVyeW9uZScsIG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdD1UcnVlKSksCiAgICAgICAgICAgICAgICAoJ2Rlc2NyaXB0aW9uJywgbW9kZWxzLlRleHRGaWVsZChibGFuaz1UcnVlLCBtYXhfbGVuZ3RoPTMwMCwgbnVsbD1UcnVlKSksCiAgICAgICAgICAgICAgICAoJ3RvcGljJywgbW9kZWxzLkZvcmVpZ25LZXkob25fZGVsZXRlPWRqYW5nby5kYi5tb2RlbHMuZGVsZXRpb24uQ0FTQ0FERSwgcmVsYXRlZF9uYW1lPSdjb3Vyc2VzJywgdG89J215YXBwLlRvcGljJykpLAogICAgICAgICAgICBdLAogICAgICAgICksCiAgICBdCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAoJ25hbWUnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjAwKSksCjx8ZmltX2VuZHw+"]
["d432bc2076a13cd562f87df1bb27e9a4091ebfa3-2","d432bc2076a13cd562f87df1bb27e9a4091ebfa3","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAxNSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cjx8ZmltX2hvbGV8PgojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUy1JUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKIiIiTWVzc2FnZXMgdXNlZCBpbiBjb21tb24uIiIiCgpfX2F1dGhvcl9fID0gWwogICAgJ2pvaG5jb3hAZ29vZ2xlLmNvbSAoSm9obiBDb3gpJywKXQoKClNJVEVfU0VUVElOR1NfQ0FDSEVfVEVNUExBVEVTID0gIiIiCklmICJUcnVlIiwgSmluamEyIGNhbiBjYWNoZSBieXRlY29kZSBvZiBjb21waWxlZCB0ZW1wbGF0ZXMgaW4tcHJvY2Vzcy4gRHVyaW5nCmNvdXJzZSBkZXZlbG9wbWVudCB5b3Ugc2hvdWxkIHR1cm4gdGhpcyBzZXR0aW5nIHRvICJGYWxzZSIgc28geW91IGNhbiBzZWUgeW91cgpjaGFuZ2VzIGluc3RhbnRhbmVvdXNseS4gT3RoZXJ3aXNlLCBrZWVwIHRoaXMgc2V0dGluZyBhdCAiVHJ1ZSIgdG8gbWF4aW1pemUKcGVyZm9ybWFuY2UuCiIiIgoKU0lURV9TRVRUSU5HU19EWU5BTUlDX1RBR1MgPSAiIiIKSWYgIlRydWUiLCBsZXNzb24gY29udGVudCBjYW4gdXNlIGN1c3RvbSBIVE1MIHRhZ3Mgc3VjaCBhcyA8Z2NiLXlvdXR1YmUKdmlkZW9pZD0iLi4uIj4uIElmIHRoaXMgc2V0dGluZyBpcyBlbmFibGVkLCBzb21lIGxlZ2FjeSBjb250ZW50IG1heSBiZSByZW5kZXJlZApkaWZmZXJlbnRseS4KIiIiCgpTSVRFX1NFVFRJTkdTX0VOQ1JZUFRJT05fU0VDUkVUID0gIiIiClNwZWNpZnkgdGV4dCB1c2VkIHRvIGVuY3J5cHQgbWVzc2FnZXMuIFlvdSBjYW4gc2V0IHRoaXMgdG8gYW55IHRleHQgYXQgYWxsLCBidXQKdGhlIHZhbHVlIG11c3QgYmUgZXhhY3RseSA0OCBjaGFyYWN0ZXJzIGxvbmcuIElmIHlvdSBjaGFuZ2UgdGhpcyB2YWx1ZSwgdGhlCnNlcnZlciB3aWxsIGJlIHVuYWJsZSB0byB1bmRlcnN0YW5kIGl0ZW1zIGVuY3J5cHRlZCB1bmRlciB0aGUgb2xkIGtleS4KIiIiCgpTSVRFX1NFVFRJTkdTX1hTUkZfU0VDUkVUID0gIiIiClNwZWNpZnkgdGhlIHRleHQgdXNlZCB0byBlbmNyeXB0IHRva2Vucywgd2hpY2ggaGVscCBwcmV2ZW50IGNyb3NzLXNpdGUgcmVxdWVzdApmb3JnZXJ5IChYU1JGKS4gWW91IGNhbiBzZXQgdGhlIHZhbHVlIHRvIGFueSBhbHBoYW51bWVyaWMgdGV4dCwgcHJlZmVyYWJseSB1c2luZwoxNi02NCBjaGFyYWN0ZXJzLiBPbmNlIHlvdSBjaGFuZ2UgdGhpcyB2YWx1ZSwgdGhlIHNlcnZlciByZWplY3RzIGFsbCBzdWJzZXF1ZW50CnJlcXVlc3RzIGlzc3VlZCB1c2luZyBhbiBvbGQgdmFsdWUgZm9yIHRoaXMgdmFyaWFibGUuCiIiIgo8fGZpbV9zdWZmaXh8PgojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCjx8ZmltX2VuZHw+"]
["2b33687024c6481385a8a69e775acc14231ce3cb-2","2b33687024c6481385a8a69e775acc14231ce3cb","PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCiMgc2VxVXRpbHMucHkgLSBDb21tb24gZnVuY3Rpb25zIGZvciBpbnRlcmFjdGluZyB3aXRoIHNlcXVlbmNlcwojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICAjCiMgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgICMKIyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAgIwojICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAgIwojICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICAjCiMgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgICMKIyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgICMKIyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgICAgIwojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmltcG9ydCBzeXMKaW1wb3J0IGd6aXAKaW1wb3J0IGxvZ2dpbmcKCm51Y2xlb3RpZGVfYmFzZXMgPSB7J2EnLCAnYycsICdnJywgJ3QnfQppbnNlcnRpb25fYmFzZXMgPSB7Jy0nLCAnLid9CgoKZGVmIGlzTnVjbGVvdGlkZShzZXFfZmlsZSwgcmVxX3BlcmM9MC45LCBtYXhfc2Vxc190b19yZWFkPTEwKToKICAgICIiIkNoZWNrIGlmIGEgZmlsZSBjb250YWlucyBzZXF1ZW5jZXMgaW4gbnVjbGVvdGlkZSBzcGFjZS4KCiAgICBUaGUgY2hlY2sgaXMgcGVyZm9ybWVkIGJ5IGxvb2tpbmcgZm9yIHRoZSBjaGFyYWN0ZXJzIGluCiAgICB7YSxjLGcsdCxuLC4sLX0gYW5kIGNvbmZpcm1pbmcgdGhhdCB0aGVzZSBjb21wcmlzZSB0aGUKICAgIG1ham9yaXR5IG9mIGEgc2VxdWVuY2VzLiBBIHNldCBudW1iZXIgb2Ygc2VxdWVuY2VzIGFyZQogICAgcmVhZCBhbmQgdGhlIGZpbGUgYXNzdW1lZCB0byBiZSBub3QgYmUgaW4gbnVjbGVvdGlkZSBzcGFjZQogICAgaWYgbm9uZSBvZiB0aGVzZSBzZXF1ZW5jZXMgYXJlIGNvbXByaXNlZCBwcmltYXJpbHkgb2YgdGhlCiAgICBkZWZpbmVkIG51Y2xlb3RpZGUgc2V0LgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHNlcV9maWxlIDogc3RyCiAgICAgICAgTmFtZSBvZiBmYXN0YS9xIGZpbGUgdG8gcmVhZC4KICAgIHJlcV9wZXJjIDogZmxvYXQKICAgICAgICBQZXJjZW50YWdlIG9mIGJhc2VzIGluIHthLGMsZyx0LG4sLiwtfSBiZWZvcmUKICAgICAgICBkZWNsYXJpbmcgdGhlIHNlcXVlbmNlcyBhcyBiZWluZyBpbiBudWNsZW90aWRlCiAgICAgICAgc3BhY2UuCiAgICBtYXhfc2Vxc190b19yZWFkIDogaW50CiAgICAgICAgTWF4aW11bSBzZXF1ZW5jZXMgdG8gcmVhZCBiZWZvcmUgZGVjbGFyaW5nCiAgICAgICAgc2VxdWVuY2UgZmlsZSB0byBub3QgYmUgaW4gbnVjbGVvdGlkZSBzcGFjZS4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBib29sZWFuCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBUcnVlIGlzIHNlcXVlbmNlcyBhcmUgaW4gbnVjbGVvdGlkZSBzcGFjZSwgb3IgZmlsZQogICAgICAgIGNvbnRhaW5zIG5vIHNlcXVlbmNlcy4KPHxmaW1fZW5kfD4="]
["2b3130646858cec1fa6b9299894231c4916166f0-5","2b3130646858cec1fa6b9299894231c4916166f0","PHxmaW1fcHJlZml4fD4KIiIiClJ1bnMgYSBNb250ZSBDYXJsbyBTaW11bGF0aW9uIHRvIGdlbmVyYXRlIGFuIGltYWdlCmNsb3NlIHRvIGEgZ2l2ZW4gdGFyZ2V0LgoiIiIKaW1wb3J0IHJhbmRvbQppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBQSUwgaW1wb3J0IEltYWdlCmZyb20gbWF0cGxvdGxpYiBpbXBvcnQgcHlwbG90IGFzIHBsdAoKCiMgcHV0IHlvdXIgb3duIGltYWdlIGhlcmUKSU5QVVRfRklMRSA9ICJiYnRvci5qcGciCk9VVFBVVF9GSUxFID0gIm1vbnRlX2NhcmxvLnBuZyIKT1VUUFVUX1NJWkUgPSA5NjAsIDY0MAoKIyBwbGF5IHdpdGggdGhlc2UKSVRFUkFUSU9OUyA9IDQwMDAKTUlOVyA9IDUwCk1BWFcgPSAyMDAKCgpkZWYgbG9hZF90YXJnZXRfaW1hZ2UoZm4sIHNpemUpOgogICAgIiIicmV0dXJucyB0aGUgaW1hZ2UgYXMgYSBOdW1QeSBhcnJheSIiIgogICAgdGFyZ2V0ID0gSW1hZ2Uub3BlbihmbikKICAgIHRhcmdldCA9IHRhcmdldC5jb252ZXJ0KCdSR0InKQogICAgcHJpbnQoZiJyZWFkIHRhcmdldCBpbWFnZSB3aXRoIHNpemUge3RhcmdldC5zaXplfSIpCiAgICB0YXJnZXQgPSB0YXJnZXQucmVzaXplKHNpemUpCiAgICByZXR1cm4gbnAuYXJyYXkodGFyZ2V0LCBkdHlwZT1ucC5pbnQxNikKCmRlZiBnZXRfcmFuZG9tX3JlY3QoVCk6CiAgICAiIiJSZXR1cm5zIGEgcmFuZG9tIHJlY3RhbmdsZSIiIgogICAgeGNlbnRlciA9IHJhbmRvbS5yYW5kaW50KDAsIFQuc2hhcGVbMV0pCiAgICB5Y2VudGVyID0gcmFuZG9tLnJhbmRpbnQoMCwgVC5zaGFwZVswXSkKICAgIHcgPSByYW5kb20ucmFuZGludChNSU5XLCBNQVhXKQogICAgaCA9IHJhbmRvbS5yYW5kaW50KE1JTlcsIE1BWFcpCiAgICBjb2xvciA9IFtyYW5kb20ucmFuZGludCgwLCAyNTUpIGZvciBpIGluIHJhbmdlKDMpXQogICAgeCA9IG1heCgwLCB4Y2VudGVyIC0gdyAvLyAyKQogICAgeSA9IG1heCgwLCB5Y2VudGVyIC0gaCAvLyAyKQogICAgcmV0dXJuIHgsIHksIHcsIGgsIGNvbG9yCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRlZiBnZXRfZGlzdGFuY2UoYSwgYik6CiAgICAiIiJ0aGUgJ2VuZXJneSBmdW5jdGlvbicgb2YgdGhlIHNpbXVsYXRpb24iIiIKICAgIHJldHVybiBucC5hYnMoYSAtIGIpLnN1bSgpCgo8fGZpbV9lbmR8Pg=="]
["510268b6313ebde9b255cebf1b7c3caa76ffcd29-3","510268b6313ebde9b255cebf1b7c3caa76ffcd29","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KCmZyb20gbHVwdXNfdG9fbXF0dC5NUVRUIGltcG9ydCBNUVRUCmZyb20gLiBpbXBvcnQgQWxhcm1TZW5zb3IKCgpjbGFzcyBEb29yV2luZG93U2Vuc29yKEFsYXJtU2Vuc29yLkFsYXJtU2Vuc29yKToKICAgICIiIkNsYXNzIHJlcHJlc2VudGluZyBhIGRvb3Ivd2luZG93IHN3aXRjaC4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSwgcGFuZWwpOgogICAgICAgIHNlbGYuX29wZW5DbG9zZSA9IGludChkYXRhLmdldCgnb3BlbkNsb3NlJykpICAjIEJpbmFyeSBzZW5zb3JzIG9ubHkKCiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhkYXRhLCBwYW5lbCkKCiAgICBkZWYgcmVnaXN0ZXJEZXZpY2Uoc2VsZik6CiAgICAgICAgbXF0dCA9IE1RVFQuZ2V0SW5zdGFuY2UoKQogICAgICAgIG1zZ19jb25maWcgPSBqc29uLmR1bXBzKHsKICAgICAgICAgICAgIm5hbWUiOiBzZWxmLm5hbWUsCiAgICAgICAgICAgICJ1bmlxdWVfaWQiOiBzZWxmLl9pZCwKICAgICAgICAgICAgImF2YWlsYWJpbGl0eV90b3BpYyI6IHNlbGYuX3BhbmVsLmRldmljZV9uYW1lICsgIi9hdmFpbGFiaWxpdHkiLAogICAgICAgICAgICAic3RhdGVfdG9waWMiOiBmJ3tzZWxmLl9wYW5lbC5kZXZpY2VfbmFtZX0ve3NlbGYuX2lkfS9zdGF0ZScsCiAgICAgICAgICAgICJkZXZpY2UiOiB7CiAgICAgICAgICAgICAgICAiaWRlbnRpZmllcnMiOiBzZWxmLl9zaWQsCiAgICAgICAgICAgICAgICAibWFudWZhY3R1cmVyIjogc2VsZi5fcGFuZWwubWFudWZhY3R1cmVyLAogICAgICAgICAgICAgICAgIm5hbWUiOiBzZWxmLm5hbWUsCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgKQogICAgICAgIG1xdHQucHVibGlzaF9tZXNzYWdlKGYnaG9tZWFzc2lzdGFudC9iaW5hcnlfc2Vuc29yL3tzZWxmLl9pZH0vY29uZmlnJywgbXNnX2NvbmZpZykKICAgICAgICBzZWxmLnNlbmRVcGRhdGUoKQoKICAgIGRlZiB1cGRhdGVGcm9tRGF0YShzZWxmLCBkYXRhKToKICAgICAgICBuZXdPcGVuQ2xvc2UgPSBpbnQoZGF0YS5nZXQoJ29wZW5DbG9zZScpKQoKICAgICAgICB1cGRhdGVkID0gc3VwZXIoKS51cGRhdGVGcm9tRGF0YShkYXRhKQoKICAgICAgICBpZiBzZWxmLl9vcGVuQ2xvc2UgIT0gbmV3T3BlbkNsb3NlOgogICAgICAgICAgICB1cGRhdGVkID0gVHJ1ZQoKICAgICAgICBzZWxmLl9vcGVuQ2xvc2UgPSBuZXdPcGVuQ2xvc2UgICMgQmluYXJ5IHNlbnNvcnMgb25seQoKICAgICAgICByZXR1cm4gdXBkYXRlZAoKICAgIGRlZiBzZW5kVXBkYXRlKHNlbGYpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgbXF0dCA9IE1RVFQuZ2V0SW5zdGFuY2UoKQogICAgICAgIG1xdHQucHVibGlzaF9tZXNzYWdlKGYne3NlbGYuX3BhbmVsLmRldmljZV9uYW1lfS97c2VsZi5faWR9L3N0YXRlJywgKCdPRkYnLCAnT04nKVtzZWxmLl9vcGVuQ2xvc2VdKQo8fGZpbV9lbmR8Pg=="]
["d84a51a3ce1b830134d8be764a0719afee5cd346-3","d84a51a3ce1b830134d8be764a0719afee5cd346","PHxmaW1fcHJlZml4fD4KY2xhc3MgU29sdXRpb246CiAgICAiIiIKICAgIEBwYXJhbSBBIDogQSBzdHJpbmcgaW5jbHVkZXMgVXBwZXIgQ2FzZSBsZXR0ZXJzCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIEBwYXJhbSBCIDogQSBzdHJpbmcgaW5jbHVkZXMgVXBwZXIgQ2FzZSBsZXR0ZXJzCiAgICBAcmV0dXJuIDogIGlmIHN0cmluZyBBIGNvbnRhaW5zIGFsbCBvZiB0aGUgY2hhcmFjdGVycyBpbiBCIHJldHVybiBUcnVlIGVsc2UgcmV0dXJuIEZhbHNlCiAgICAiIiIKICAgIGRlZiBjb21wYXJlU3RyaW5ncyhzZWxmLCBBLCBCKToKPHxmaW1fZW5kfD4="]
["997721093cf001f0d03cec3f79bf1978f4c1a962-2","997721093cf001f0d03cec3f79bf1978f4c1a962","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIwojIENvcHlyaWdodCAyMDEwIFRvYmlhcyBSb2TDpGJlbAojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoiIiJVbml0IHRlc3RzIGZvciB0aGUgcHl1cmxmZXRjaCBsaWJyYXJ5LiIiIgoKaW1wb3J0IEJhc2VIVFRQU2VydmVyCmltcG9ydCBTaW1wbGVIVFRQU2VydmVyCmltcG9ydCBjZ2kKaW1wb3J0IGh0dHBsaWIKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHRocmVhZGluZwppbXBvcnQgdGltZQppbXBvcnQgdW5pdHRlc3QKCkxPR19GT1JNQVQgPSAnJShsZXZlbG5hbWUpLThzICUoYXNjdGltZSlzICUoZmlsZW5hbWUpczolKGxpbmVubylzXSAlKG1lc3NhZ2UpcycKCgpjbGFzcyBTdG9wcGFibGVIdHRwUmVxdWVzdEhhbmRsZXIoU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgogICAgIiIiSFRUUCByZXF1ZXN0IGhhbmRsZXIgd2l0aCBRVUlUIHN0b3BwaW5nIHRoZSBzZXJ2ZXIuIiIiCgogICAgZGVmIGRvX0dFVChzZWxmKToKICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQogICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L3BsYWluIikKICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LUxlbmd0aCIsIDEwKQogICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQogICAgICAgIHNlbGYucmVxdWVzdC5zZW5kKCJweXVybGZldGNoIikKCiAgICBkZWYgZG9fUFVUKHNlbGYpOgogICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCiAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCgogICAgZGVmIGRvX0RFTEVURShzZWxmKToKICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQogICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQoKICAgIGRlZiBkb19QT1NUKHNlbGYpOgogICAgICAgIGxlbmd0aCA9IGludChzZWxmLmhlYWRlcnMuZ2V0aGVhZGVyKCJDb250ZW50LUxlbmd0aCIpIG9yIDApCiAgICAgICAgZGF0YSA9IHNlbGYucmZpbGUucmVhZChsZW5ndGgpCiAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkKICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LVR5cGUiLCAidGV4dC9wbGFpbiIpCiAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC1MZW5ndGgiLCBsZW5ndGgpCiAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigKICAgICAgICAgICAgIlgtQ3VzdG9tLUhlYWRlciIsCiAgICAgICAgICAgIHNlbGYuaGVhZGVycy5nZXRoZWFkZXIoIlgtQ3VzdG9tLUhlYWRlciIpKQogICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQogICAgICAgIHNlbGYucmVxdWVzdC5zZW5kKGRhdGEpCgogICAgZGVmIGRvX1FVSVQoc2VsZik6CiAgICAgICAgIiIiU2VuZHMgMjAwIE9LIHJlc3BvbnNlLCBhbmQgc2V0cyBzZXJ2ZXIuc3RvcCB0byBUcnVlLiIiIgoKICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQogICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQogICAgICAgIHNlbGYuc2VydmVyLnN0b3AgPSBUcnVlCgogICAgZGVmIGxvZ19yZXF1ZXN0KHNlbGYsICphcmdzKToKICAgICAgICAiIiJTdXBwcmVzcyBhbnkgbG9nIG1lc3NhZ2VzIGZvciB0ZXN0aW5nLiIiIgoKCmNsYXNzIFN0b3BwYWJsZUh0dHBTZXJ2ZXIoQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlcik6CiAgICAiIiJIVFRQIHNlcnZlciB0aGF0IHJlYWN0cyB0byBzZWxmLnN0b3AgZmxhZy4iIiIKCiAgICBkZWYgc2VydmVfZm9yZXZlcihzZWxmKToKICAgICAgICAiIiJIYW5kbGVzIG9uZSByZXF1ZXN0IGF0IGEgdGltZSB1bnRpbCBzdG9wcGVkLiIiIgoKICAgICAgICBzZWxmLnN0b3AgPSBGYWxzZQogICAgICAgIHdoaWxlIG5vdCBzZWxmLnN0b3A6CiAgICAgICAgICAgIHNlbGYuaGFuZGxlX3JlcXVlc3QoKQoKCmRlZiBzdG9wX3NlcnZlcihwb3J0KToKICAgICIiIlNlbmQgUVVJVCByZXF1ZXN0IHRvIEhUVFAgc2VydmVyIHJ1bm5pbmcgb24gbG9jYWxob3N0Ojxwb3J0Pi4iIiIKCiAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbigibG9jYWxob3N0OiVkIiAlIHBvcnQpCiAgICBjb25uLnJlcXVlc3QoIlFVSVQiLCAiLyIpCiAgICBjb25uLmdldHJlc3BvbnNlKCkKICAgIGNvbm4uY2xvc2UoKQoKCmNsYXNzIFRlc3RVcmxGZXRjaCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAiIiJUZXN0IGNhc2UgZm9yIHB5dXJsZmV0Y2guIiIiCgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICIiIlNldHVwIHRlc3QgZW52aXJvbm1lbnQuIiIiCgogICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZm9ybWF0PUxPR19GT1JNQVQsIGxldmVsPWxvZ2dpbmcuSU5GTykKCiAgICBkZWYgdGVzdF9pbXBvcnQoc2VsZik6CiAgICAgICAgIiIiSW1wb3J0aW5nIHRoZSBweXVybGZldGNoIG1vZHVsZS4iIiIKCiAgICAgICAgaW1wb3J0IHB5dXJsZmV0Y2gKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdtb2R1bGUnLCB0eXBlKHB5dXJsZmV0Y2gpLl9fbmFtZV9fKQoKICAgIGRlZiB0ZXN0X3BhY2soc2VsZik6CiAgICAgICAgIiIiUGFja2luZyBkYXRhLiIiIgoKICAgICAgICBmcm9tIHB5dXJsZmV0Y2gudXJsZmV0Y2ggaW1wb3J0IHBhY2sKCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgwM2ZvbycsIHBhY2soMywgJ2ZvbycpKQoKICAgIGRlZiB0ZXN0X2NvbW1hbmQoc2VsZik6CiAgICAgICAgIiIiVGVzdGluZyB0aGUgY29tbWFuZCBtZXRob2QuIiIiCgogICAgICAgIGZyb20gcHl1cmxmZXRjaC51cmxmZXRjaCBpbXBvcnQgY29tbWFuZAoKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdmb28nLCBjb21tYW5kKCdmb28nKSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAzZm9vdGVzdCcsIGNvbW1hbmQoJ2ZvbycsICd0ZXN0JykpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgwM2Zvb1x4MDR0ZXN0YmFyJywgY29tbWFuZCgnZm9vJywgJ3Rlc3QnLCAnYmFyJykpCgogICAgZGVmIHRlc3RfaGVhZGVycyhzZWxmKToKICAgICAgICAiIiJFbmNvZGVzL2RlY29kZXMgSFRUUCBoZWFkZXJzLiIiIgoKICAgICAgICBoZWFkZXJzID0geydDb250ZW50LVR5cGUnOiAndGV4dC9wbGFpbicsICdYLUN1c3RvbS1IZWFkZXInOiAnZm9vYmFyJ30KCiAgICAgICAgZnJvbSBweXVybGZldGNoLnVybGZldGNoIGltcG9ydCBlbmNvZGVfaGVhZGVycywgZGVjb2RlX2hlYWRlcnMKCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpblxuWC1DdXN0b20tSGVhZGVyOiBmb29iYXInLAogICAgICAgICAgICBlbmNvZGVfaGVhZGVycyhoZWFkZXJzKSkKCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgeydDb250ZW50LVR5cGUnOiAndGV4dC9wbGFpbicsICdYLUN1c3RvbS1IZWFkZXInOiAnZm9vYmFyJ30sCiAgICAgICAgICAgIGRlY29kZV9oZWFkZXJzKGVuY29kZV9oZWFkZXJzKGhlYWRlcnMpKSkKCiAgICBkZWYgdGVzdF9lcnJvcihzZWxmKToKICAgICAgICAiIiJUZXN0cyBlcnJvciBoYW5kbGluZy4iIiIKCiAgICAgICAgZnJvbSBweXVybGZldGNoLnVybGZldGNoIGltcG9ydCBEb3dubG9hZEVycm9yLCBVUkxGZXRjaENsaWVudAoKICAgICAgICBjbGllbnQgPSBVUkxGZXRjaENsaWVudCgpCgogICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAogICAgICAgICAgICBEb3dubG9hZEVycm9yLAogICAgICAgICAgICBjbGllbnQuc3RhcnRfZmV0Y2gsICJodHRwOi8vZXhhbXBsZS5jb20iLCBtZXRob2Q9InVua25vd25fbWV0aG9kIikKCiAgICBkZWYgdGVzdF9mZXRjaChzZWxmKToKICAgICAgICAiIiJUZXN0aW5nIHRoZSBsb3ctbGV2ZWwgVVJMIEZldGNoIENsaWVudCBBUEkuIiIiCgogICAgICAgIGZyb20gcHl1cmxmZXRjaC51cmxmZXRjaCBpbXBvcnQgRG93bmxvYWRFcnJvciwgVVJMRmV0Y2hDbGllbnQKCiAgICAgICAgIyBJbnN0YW50aWF0aW5nIHRoZSBjbGllbnQKICAgICAgICBjbGllbnQgPSBVUkxGZXRjaENsaWVudCgpCgogICAgICAgICMgSW5pdGlhdGluZyBmZXRjaGVzCiAgICAgICAgZmV0Y2hlcyA9ICgKICAgICAgICAgICAgY2xpZW50LnN0YXJ0X2ZldGNoKCJodHRwOi8vd3d3LmVybGFuZy5vcmciKSwKICAgICAgICAgICAgY2xpZW50LnN0YXJ0X2ZldGNoKCJodHRwOi8vbG9jYWxob3N0OjE2MzUiKSwgIyBTaG91bGRuJ3QgZXhpc3QKICAgICAgICAgICAgY2xpZW50LnN0YXJ0X2ZldGNoKCJodHRwOi8vd3d3LnB5dGhvbi5vcmciKSwKICAgICAgICApCgogICAgICAgICMgRG9pbmcgc29tZSBoZWF2eSBzdHVmZgogICAgICAgIHRpbWUuc2xlZXAoMikKCiAgICAgICAgIyBHZXR0aW5nIHRoZSByZXN1bHRzCiAgICAgICAgZGF0YSA9IFtdCgogICAgICAgIGZvciBmaWQgaW4gZmV0Y2hlczoKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoY2xpZW50LmdldF9yZXN1bHQoZmlkKSkKICAgICAgICAgICAgZXhjZXB0IERvd25sb2FkRXJyb3IsIGU6CiAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZChlKQoKICAgICAgICBjbGllbnQuY2xvc2UoKQoKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIFtpc2luc3RhbmNlKHMsIHR1cGxlKSBmb3IgcyBpbiBkYXRhXS5jb3VudChUcnVlKSkKCiAgICBkZWYgdGVzdF9mZXRjaF9ub3dhaXQoc2VsZik6CiAgICAgICAgIiIiVGVzdGluZyB0aGUgbG93LWxldmVsIFVSTCBGZXRjaCBDbGllbnQgQVBJLiIiIgoKICAgICAgICBmcm9tIHB5dXJsZmV0Y2gudXJsZmV0Y2ggaW1wb3J0IERvd25sb2FkRXJyb3IsIFVSTEZldGNoQ2xpZW50CgogICAgICAgICMgSW5zdGFudGlhdGluZyB0aGUgY2xpZW50CiAgICAgICAgY2xpZW50ID0gVVJMRmV0Y2hDbGllbnQoKQoKICAgICAgICAjIEluaXRpYXRpbmcgZmV0Y2hlcwogICAgICAgIGZldGNoZXMgPSAoCiAgICAgICAgICAgIGNsaWVudC5zdGFydF9mZXRjaCgiaHR0cDovL3d3dy5lcmxhbmcub3JnIiksCiAgICAgICAgICAgIGNsaWVudC5zdGFydF9mZXRjaCgiaHR0cDovL2xvY2FsaG9zdDoxNjM1IiksICMgU2hvdWxkbid0IGV4aXN0CiAgICAgICAgICAgIGNsaWVudC5zdGFydF9mZXRjaCgiaHR0cDovL3d3dy5weXRob24ub3JnIiksCiAgICAgICAgKQoKICAgICAgICAjIERvaW5nIHNvbWUgaGVhdnkgc3R1ZmYKICAgICAgICB0aW1lLnNsZWVwKDIpCgogICAgICAgICMgR2V0dGluZyB0aGUgcmVzdWx0cwogICAgICAgIGRhdGEgPSBbXQoKICAgICAgICBmb3IgZmlkIGluIGZldGNoZXM6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKGNsaWVudC5nZXRfcmVzdWx0KGZpZCwgbm93YWl0PVRydWUpKQogICAgICAgICAgICBleGNlcHQgRG93bmxvYWRFcnJvciwgZToKICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKGUpCgogICAgICAgIGNsaWVudC5jbG9zZSgpCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgbGVuKGRhdGEpKQoKICAgIGRlZiB0ZXN0X3Bvc3Qoc2VsZik6CiAgICAgICAgIiIiUE9TVGluZyBkYXRhIHdpdGggdGhlIGxvdy1sZXZlbCBVUkwgRmV0Y2ggQ2xpZW50IEFQSS4iIiIKCiAgICAgICAgZnJvbSBweXVybGZldGNoLnVybGZldGNoIGltcG9ydCBEb3dubG9hZEVycm9yLCBVUkxGZXRjaENsaWVudAoKICAgICAgICAjIFNldHRpbmcgdXAgYSB0ZXN0IEhUVFAgc2VydmVyCiAgICAgICAgc2VydmVyID0gU3RvcHBhYmxlSHR0cFNlcnZlcigKICAgICAgICAgICAgKCdsb2NhbGhvc3QnLCA5ODc2KSwgU3RvcHBhYmxlSHR0cFJlcXVlc3RIYW5kbGVyKQogICAgICAgIHNlcnZlcl90aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZXJ2ZXIuc2VydmVfZm9yZXZlcikKICAgICAgICBzZXJ2ZXJfdGhyZWFkLnNldERhZW1vbihUcnVlKQogICAgICAgIHNlcnZlcl90aHJlYWQuc3RhcnQoKQoKICAgICAgICAjIEluc3RhbnRpYXRpbmcgdGhlIGNsaWVudAogICAgICAgIGNsaWVudCA9IFVSTEZldGNoQ2xpZW50KCkKCiAgICAgICAgIyBXZSBtYWtlIGEgUE9TVCByZXF1ZXN0IHdpdGggcGF5bG9hZCBhbmQgYSBjdXN0b20gaGVhZGVyCiAgICAgICAgZmlkID0gY2xpZW50LnN0YXJ0X2ZldGNoKAogICAgICAgICAgICAiaHR0cDovL2xvY2FsaG9zdDo5ODc2IiwKICAgICAgICAgICAgcGF5bG9hZD11IlRyw6hzIGJpZW4iLmVuY29kZSgidXRmLTgiKSwKICAgICAgICAgICAgbWV0aG9kPSJQT1NUIiwKICAgICAgICAgICAgaGVhZGVycz17J1gtQ3VzdG9tLUhlYWRlcic6ICd2YWx1ZSd9KQoKICAgICAgICBjb2RlLCBib2R5LCBoZWFkZXJzID0gY2xpZW50LmdldF9yZXN1bHQoZmlkKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjAwLCBjb2RlKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJUcsOocyBiaWVuIiwgYm9keS5kZWNvZGUoInV0Zi04IikpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxMCwgaW50KGhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10pKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3ZhbHVlJywgaGVhZGVyc1sneC1jdXN0b20taGVhZGVyJ10pCgogICAgICAgICMgU3RvcCB0aGUgdGVzdCBIVFRQIHNlcnZlcgogICAgICAgIHN0b3Bfc2VydmVyKDk4NzYpCgogICAgZGVmIHRlc3RfaGVhZChzZWxmKToKICAgICAgICAiIiJUZXN0cyBhIEhFQUQgcmVxdWVzdC4iIiIKICAgICAgIAogICAgICAgIGZyb20gcHl1cmxmZXRjaC51cmxmZXRjaCBpbXBvcnQgRG93bmxvYWRFcnJvciwgVVJMRmV0Y2hDbGllbnQKCiAgICAgICAgY2xpZW50ID0gVVJMRmV0Y2hDbGllbnQoKQoKICAgICAgICBmaWQgPSBjbGllbnQuc3RhcnRfZmV0Y2goCiAgICAgICAgICAgICJodHRwOi8vd3d3LmVybGFuZy5vcmcvaW1hZ2VzL2Jhbm5lci5qcGciLAogICAgICAgICAgICBtZXRob2Q9ImhlYWQiLCBoZWFkZXJzPXsiVXNlci1BZ2VudCI6ICJweXVybGZldGNoLzAuMS4wIn0pCgo8fGZpbV9ob2xlfD4KICAgICAgICBjb2RlLCBib2R5LCBoZWFkZXJzID0gY2xpZW50LmdldF9yZXN1bHQoZmlkKQoKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIwMCwgY29kZSkKICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGJvZHkpIGlzIDApCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdpbWFnZS9wbmcnLCBoZWFkZXJzWydjb250ZW50LXR5cGUnXSkKCiAgICBkZWYgdGVzdF9wdXRfZGVsZXRlKHNlbGYpOgogICAgICAgICIiIlRlc3RzIFBVVCBhbmQgREVMRVRFLiIiIgoKICAgICAgICBmcm9tIHB5dXJsZmV0Y2gudXJsZmV0Y2ggaW1wb3J0IERvd25sb2FkRXJyb3IsIFVSTEZldGNoQ2xpZW50CgogICAgICAgICMgU2V0dGluZyB1cCBhIHRlc3QgSFRUUCBzZXJ2ZXIKICAgICAgICBzZXJ2ZXIgPSBTdG9wcGFibGVIdHRwU2VydmVyKAogICAgICAgICAgICAoJ2xvY2FsaG9zdCcsIDk4NzYpLCBTdG9wcGFibGVIdHRwUmVxdWVzdEhhbmRsZXIpCiAgICAgICAgc2VydmVyX3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlcnZlci5zZXJ2ZV9mb3JldmVyKQogICAgICAgIHNlcnZlcl90aHJlYWQuc2V0RGFlbW9uKFRydWUpCiAgICAgICAgc2VydmVyX3RocmVhZC5zdGFydCgpCgogICAgICAgICMgSW5zdGFudGlhdGluZyB0aGUgY2xpZW50CiAgICAgICAgY2xpZW50ID0gVVJMRmV0Y2hDbGllbnQoKQoKICAgICAgICAjIFdlIG1ha2UgYSBQVVQgcmVxdWVzdCB3aXRoIHNvbWUgcGF5bG9hZAogICAgICAgIGZpZCA9IGNsaWVudC5zdGFydF9mZXRjaCgKICAgICAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6OTg3NiIsIHBheWxvYWQ9ImZvb2JhciIsIG1ldGhvZD0iUFVUIikKCiAgICAgICAgY29kZSwgYm9keSwgaGVhZGVycyA9IGNsaWVudC5nZXRfcmVzdWx0KGZpZCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIwMCwgY29kZSkKCiAgICAgICAgIyBXZSBtYWtlIGEgREVMRVRFIHJlcXVlc3QKICAgICAgICBmaWQgPSBjbGllbnQuc3RhcnRfZmV0Y2goCiAgICAgICAgICAgICJodHRwOi8vbG9jYWxob3N0Ojk4NzYiLCBtZXRob2Q9IkRFTEVURSIpCgogICAgICAgIGNvZGUsIGJvZHksIGhlYWRlcnMgPSBjbGllbnQuZ2V0X3Jlc3VsdChmaWQpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyMDAsIGNvZGUpCgogICAgICAgICMgU3RvcCB0aGUgdGVzdCBIVFRQIHNlcnZlcgogICAgICAgIHN0b3Bfc2VydmVyKDk4NzYpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgY2xpZW50LmNsb3NlKCkKCiAgICAgICAgY2xpZW50ID0gVVJMRmV0Y2hDbGllbnQoKQoKPHxmaW1fZW5kfD4="]
["68b91f113ab0084fbf10b26641a4d6719cae1212-4","68b91f113ab0084fbf10b26641a4d6719cae1212","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmZyb20gZGphbmdvLnV0aWxzLnRyYW5zbGF0aW9uIGltcG9ydCB1Z2V0dGV4dF9sYXp5IGFzIF8KCmZyb20gY29tbW9uLmFwaSBpbXBvcnQgcmVnaXN0ZXJfbGlua3MsIHJlZ2lzdGVyX21lbnUKCmZyb20gLm1vZGVscyBpbXBvcnQgU3RhdGUsIFBlcnNvbiwgSXRlbSwgSXRlbUdyb3VwCgpzdGF0ZV9saXN0ID0geyd0ZXh0JzogXygnQXNzZXRzIHN0YXRlcycpLCAndmlldyc6ICdzdGF0ZV9saXN0JywgJ2ZhbWZhbSc6ICdlcnJvcl9nbyd9CnN0YXRlX2NyZWF0ZSA9IHsndGV4dCc6IF8oJ0NyZWF0ZSBuZXcgYXNzZXQgc3RhdGUnKSwgJ3ZpZXcnOiAnc3RhdGVfY3JlYXRlJywgJ2ZhbWZhbSc6ICdlcnJvcl9hZGQnfQpzdGF0ZV9lZGl0ID0geyd0ZXh0JzogXyh1J0VkaXQgYXNzZXQgc3RhdGUnKSwgJ3ZpZXcnOiAnc3RhdGVfdXBkYXRlJywgJ2FyZ3MnOiAnb2JqZWN0LmlkJywgJ2ZhbWZhbSc6ICdlcnJvcid9CnN0YXRlX2RlbGV0ZSA9IHsndGV4dCc6IF8odSdEZWxldGUgYXNzZXQgc3RhdGUnKSwgJ3ZpZXcnOiAnc3RhdGVfZGVsZXRlJywgJ2FyZ3MnOiAnb2JqZWN0LmlkJywgJ2ZhbWZhbSc6ICdlcnJvcl9kZWxldGUnfQoKdmlzdGFfYXJxdWl0ZWN0b3MgPSB7J3RleHQnOiBfKCdBcnF1aXRlY3RvcycpLCAndmlldyc6ICdhcnF1aXRlY3RvX2xpc3QnLCAnZmFtZmFtJzogJ3VzZXJfZ28nfQp2aXN0YV9hbmFsaXN0YXM9IHsndGV4dCc6IF8oJ0FuYWxpc3RhcycpLCAndmlldyc6ICdhbmFsaXN0YV9saXN0JywgJ2ZhbWZhbSc6ICd1c2VyX2dyYXknfQp2aXN0YV9hc2Vzb3Jlcz0geyd0ZXh0JzogXygnQXNlc29yZXMnKSwgJ3ZpZXcnOiAnYXNlc29yZXNfbGlzdCcsICdmYW1mYW0nOiAndXNlcl9ncmVlbid9CgoKcGVyc29uX2xpc3QgPSB7J3RleHQnOiBfKCdWaWV3IGFsbCBwZW9wbGUnKSwgJ3ZpZXcnOiAncGVyc29uX2xpc3QnLCAnZmFtZmFtJzogJ3VzZXJfZ28nfQpwZXJzb25fY3JlYXRlID0geyd0ZXh0JzogXygnQ3JlYXRlIG5ldyBwZXJzb24nKSwgJ3ZpZXcnOiAncGVyc29uX2NyZWF0ZScsICdmYW1mYW0nOiAndXNlcl9hZGQnfQpwZXJzb25fdXBkYXRlID0geyd0ZXh0JzogXyh1J0VkaXQnKSwgJ3ZpZXcnOiAncGVyc29uX3VwZGF0ZScsICdhcmdzJzogJ29iamVjdC5pZCcsICdmYW1mYW0nOiAndXNlcl9lZGl0J30KcGVyc29uX2RlbGV0ZSA9IHsndGV4dCc6IF8odSdEZWxldGUnKSwgJ3ZpZXcnOiAncGVyc29uX2RlbGV0ZScsICdhcmdzJzogJ29iamVjdC5pZCcsICdmYW1mYW0nOiAndXNlcl9kZWxldGUnfQpwZXJzb25fcGhvdG9zID0geyd0ZXh0JzogXyh1J0FkZCAvIHJlbW92ZSBwaG90b3MnKSwgJ3ZpZXcnOiAncGVyc29uX3Bob3RvcycsICdhcmdzJzogJ29iamVjdC5pZCcsICdmYW1mYW0nOiAncGljdHVyZV9lZGl0J30KcGVyc29uX2Fzc2lnbl9pdGVtID0geyd0ZXh0JzogXyh1J0Fzc2lnbiBhc3NldHMnKSwgJ3ZpZXcnOiAncGVyc29uX2Fzc2lnbl9pdGVtJywgJ2FyZ3MnOiAnb2JqZWN0LmlkJywgJ2ZhbWZhbSc6ICdjb21wdXRlcl9nbyd9Cgphc3NldF9saXN0ID0geyd0ZXh0JzogXygnaG9sYScpLCAndmlldyc6ICdpdGVtX2xpc3QxJywgJ2ZhbWZhbSc6ICdjb21wdXRlcid9CmFzc2V0X2NyZWF0ZSA9IHsndGV4dCc6IF8oJ0NyZWF0ZSBuZXcgYXNzZXQnKSwgJ3ZpZXcnOiAnaXRlbV9jcmVhdGUnLCAnZmFtZmFtJzogJ2NvbXB1dGVyX2FkZCd9CmFzc2V0X29ycGhhbl9saXN0ID0geyd0ZXh0JzogXygnT3JwaGFuIGFzc2V0cycpLCAndmlldyc6ICdpdGVtX29ycGhhbnNfbGlzdCd9CmFzc2V0X2VkaXQgPSB7J3RleHQnOiBfKHUnRWRpdCcpLCAndmlldyc6ICdpdGVtX3VwZGF0ZScsICdhcmdzJzogJ29iamVjdC5pZCcsICdmYW1mYW0nOiAnY29tcHV0ZXJfZWRpdCd9CmFzc2V0X2RlbGV0ZSA9IHsndGV4dCc6IF8odSdEZWxldGUnKSwgJ3ZpZXcnOiAnaXRlbV9kZWxldGUnLCAnYXJncyc6ICdvYmplY3QuaWQnLCAnZmFtZmFtJzogJ2NvbXB1dGVyX2RlbGV0ZSd9CmFzc2V0X3Bob3RvcyA9IHsndGV4dCc6IF8odSdBZGQgLyByZW1vdmUgcGhvdG9zJyksICd2aWV3JzogJ2l0ZW1fcGhvdG9zJywgJ2FyZ3MnOiAnb2JqZWN0LmlkJywgJ2ZhbWZhbSc6ICdwaWN0dXJlX2VkaXQnfQphc3NldF9hc3NpZ25fcGVyc29uID0geyd0ZXh0JzogXyh1J0Fzc2lnbiBwZW9wbGUnKSwgJ3ZpZXcnOiAnaXRlbV9hc3NpZ25fcGVyc29uJywgJ2FyZ3MnOiAnb2JqZWN0LmlkJywgJ2ZhbWZhbSc6ICd1c2VyX2dvJ30KYXNzZXRfdGVtcGxhdGUgPSB7J3RleHQnOiBfKHUnVGVtcGxhdGUnKSwgJ3ZpZXcnOiAndGVtcGxhdGVfdmlldycsICdhcmdzJzogJ29iamVjdC5pdGVtX3RlbXBsYXRlLmlkJywgJ2ZhbWZhbSc6ICdwYWdlX2dvJ30KCmdyb3VwX2xpc3QgPSB7J3RleHQnOiBfKHUnVmlldyBhbGwgaXRlbSBncm91cHMnKSwgJ3ZpZXcnOiAnZ3JvdXBfbGlzdCcsICdmYW1mYW0nOiAnY2hhcnRfcGllJ30KZ3JvdXBfY3JlYXRlID0geyd0ZXh0JzogXyh1J0NyZWF0ZSBpdGVtIGdyb3VwJyksICd2aWV3JzogJ2dyb3VwX2NyZWF0ZScsICdmYW1mYW0nOiAnY2hhcnRfcGllX2FkZCd9Cmdyb3VwX3VwZGF0ZSA9IHsndGV4dCc6IF8odSdFZGl0JyksICd2aWV3JzogJ2dyb3VwX3VwZGF0ZScsICdhcmdzJzogJ29iamVjdC5pZCcsICdmYW1mYW0nOiAnY2hhcnRfcGllX2VkaXQnfQpncm91cF9kZWxldGUgPSB7J3RleHQnOiBfKHUnRGVsZXRlJyksICd2aWV3JzogJ2dyb3VwX2RlbGV0ZScsICdhcmdzJzogJ29iamVjdC5pZCcsICdmYW1mYW0nOiAnY2hhcnRfcGllX2RlbGV0ZSd9CgpzdGF0ZV9maWx0ZXIgPSB7J25hbWUnOiAnc3RhdGUnLCAndGl0bGUnOiBfKHUnU3RhdGUnKSwgJ3F1ZXJ5c2V0JzogU3RhdGUub2JqZWN0cy5hbGwoKSwgJ2Rlc3RpbmF0aW9uJzogJ2l0ZW1zdGF0ZSd9CgpyZWdpc3Rlcl9saW5rcyhbJ2l0ZW1fbGlzdCcsICdpdGVtX3ZpZXcnLCAnaXRlbV9jcmVhdGUnLCAnaXRlbV9vcnBoYW5zX2xpc3QnLCAnaXRlbV91cGRhdGUnLCAnaXRlbV9kZWxldGUnLCAnaXRlbV9waG90b3MnLCAnaXRlbV9hc3NpZ25fcGVyc29uJywgJ3RlbXBsYXRlX2l0ZW1zX2xpc3QnXSwgW2Fzc2V0X2NyZWF0ZV0sIG1lbnVfbmFtZT0nc2lkZWJhcicpCnJlZ2lzdGVyX2xpbmtzKEl0ZW0sIFthc3NldF9lZGl0LCBhc3NldF9kZWxldGUsIGFzc2V0X3Bob3RvcywgYXNzZXRfYXNzaWduX3BlcnNvbiwgYXNzZXRfdGVtcGxhdGVdKQoKcmVnaXN0ZXJfbGlua3MoWydwZXJzb25fbGlzdCcsICdwZXJzb25fY3JlYXRlJywgJ3BlcnNvbl92aWV3JywgJ3BlcnNvbl91cGRhdGUnLCAncGVyc29uX2RlbGV0ZScsICdwZXJzb25fcGhvdG9zJywgJ3BlcnNvbl9hc3NpZ25faXRlbSddLCBbcGVyc29uX2NyZWF0ZV0sIG1lbnVfbmFtZT0nc2lkZWJhcicpCnJlZ2lzdGVyX2xpbmtzKFBlcnNvbiwgW3BlcnNvbl91cGRhdGUsIHBlcnNvbl9kZWxldGUsIHBlcnNvbl9waG90b3MsIHBlcnNvbl9hc3NpZ25faXRlbV0pCgpyZWdpc3Rlcl9saW5rcyhbJ2dyb3VwX2xpc3QnLCAnZ3JvdXBfdmlldycsICdncm91cF9jcmVhdGUnLCAnZ3JvdXBfdXBkYXRlJywgJ2dyb3VwX2RlbGV0ZSddLCBbZ3JvdXBfY3JlYXRlXSwgbWVudV9uYW1lPSdzaWRlYmFyJykKPHxmaW1faG9sZXw+CgpyZWdpc3Rlcl9tZW51KFsKICAgIHsndGV4dCc6IF8oJ2Fzc2V0cycpLCAndmlldyc6ICdpdGVtX2xpc3QxJywgJ2xpbmtzJzogWwogICAgICAgIGFzc2V0X2xpc3QsIGFzc2V0X29ycGhhbl9saXN0LCBncm91cF9saXN0LCBwZXJzb25fbGlzdAogICAgXSwgJ2ZhbWZhbSc6ICdjb21wdXRlcicsICdwb3NpdGlvbic6IDJ9LApdKQpyZWdpc3Rlcl9tZW51KFsKICAgIHsndGV4dCc6IF8oJ0ludGVncmFudGVzJyksICd2aWV3JzogJ2FycXVpdGVjdG9fbGlzdCcsICdsaW5rcyc6IFsKICAgICAgICB2aXN0YV9hcnF1aXRlY3RvcywgdmlzdGFfYW5hbGlzdGFzLCB2aXN0YV9hc2Vzb3JlcwogICAgXSwgJ2ZhbWZhbSc6ICdncm91cF9lZGl0JywgJ3Bvc2l0aW9uJzogOX0sCl0pCgo8fGZpbV9zdWZmaXh8PgpyZWdpc3Rlcl9saW5rcyhJdGVtR3JvdXAsIFtncm91cF91cGRhdGUsIGdyb3VwX2RlbGV0ZV0pCgpyZWdpc3Rlcl9saW5rcyhbJ3N0YXRlX2xpc3QnLCAnc3RhdGVfY3JlYXRlJywgJ3N0YXRlX3VwZGF0ZScsICdzdGF0ZV9kZWxldGUnXSwgW3N0YXRlX2NyZWF0ZV0sIG1lbnVfbmFtZT0nc2lkZWJhcicpCnJlZ2lzdGVyX2xpbmtzKFN0YXRlLCBbc3RhdGVfZWRpdCwgc3RhdGVfZGVsZXRlXSkKPHxmaW1fZW5kfD4="]
["cf40f81a87b8ee1891c1a65ce0c315e559e15f08-1","cf40f81a87b8ee1891c1a65ce0c315e559e15f08","PHxmaW1fcHJlZml4fD4KLnRhYmxlCi5jb2RlCnN1bToKbW92ICQwLCAjMAptb3YgJDEsICMxCm1vdiAkMiwgOQphZGQgJDMsICQwLCAkMQpyZXR1cm4gJDMKdGVzdDoKbW92ICQ0LCAjMAptb3YgJDUsICMxCm1vdiAkNiwgMTAuMDAwMDAwCmludHRvZmwgJDUsICQ1Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4Kc3ViICQ3LCAkNiwgJDUKcmV0dXJuICQ3Cm1haW46CnBhcmFtIDEKPHxmaW1fZW5kfD4="]
["5afcf9a036f7d6f87ba08a055233a98f6bb761f2-1","5afcf9a036f7d6f87ba08a055233a98f6bb761f2","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc6IHV0Zi04CiMKIyBDb3B5cmlnaHQgMjAxNCBUaGUgT3BwaWEgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXIKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMtSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiIiIlRlc3RzIGZvciBydWxlIG9iamVjdHMuIiIiCgppbXBvcnQgaW5zcGVjdAppbXBvcnQgb3MKaW1wb3J0IHBrZ3V0aWwKCmZyb20gY29yZS5kb21haW4gaW1wb3J0IHJ1bGVfZG9tYWluCmZyb20gY29yZS50ZXN0cyBpbXBvcnQgdGVzdF91dGlscwpmcm9tIGV4dGVuc2lvbnMub2JqZWN0cy5tb2RlbHMgaW1wb3J0IG9iamVjdHMKaW1wb3J0IGZlY29uZgoKCkVYUEVDVEVEX1RPVEFMX05VTUJFUl9PRl9SVUxFUyA9IDQ3CgoKY2xhc3MgRmFrZVJ1bGUocnVsZV9kb21haW4uUnVsZSk6CiAgICBzdWJqZWN0X3R5cGUgPSBvYmplY3RzLlJlYWwKICAgIGRlc2NyaXB0aW9uID0gJ2lzIGJldHdlZW4ge3t4fFJlYWx9fSBhbmQge3t5fFVuaWNvZGVTdHJpbmd9fScKCiAgICBkZWYgX2V2YWx1YXRlKHNlbGYsIHN1YmplY3QpOgogICAgICAgIHJldHVybiBzdWJqZWN0ID09IHNlbGYueAoKCmNsYXNzIFJ1bGVTZXJ2aWNlc1VuaXRUZXN0cyh0ZXN0X3V0aWxzLkdlbmVyaWNUZXN0QmFzZSk6CiAgICAiIiJUZXN0cyBmb3IgcnVsZSBzZXJ2aWNlcy4iIiIKCiAgICBkZWYgdGVzdF9nZXRfcnVsZXNfZm9yX29ial90eXBlKHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIGxlbihydWxlX2RvbWFpbi5nZXRfcnVsZXNfZm9yX29ial90eXBlKCdOb25uZWdhdGl2ZUludCcpKSwgMSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBsZW4ocnVsZV9kb21haW4uZ2V0X3J1bGVzX2Zvcl9vYmpfdHlwZSgnUmVhbCcpKSwgNykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBsZW4ocnVsZV9kb21haW4uZ2V0X3J1bGVzX2Zvcl9vYmpfdHlwZSgnTnVsbCcpKSwgMCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAo8fGZpbV9ob2xlfD4KY2xhc3MgUnVsZURvbWFpblVuaXRUZXN0cyh0ZXN0X3V0aWxzLkdlbmVyaWNUZXN0QmFzZSk6CiAgICAiIiJUZXN0cyBmb3IgcnVsZXMuIiIiCgogICAgZGVmIHRlc3RfcnVsZV9pbml0aWFsaXphdGlvbihzZWxmKToKICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICBGYWtlUnVsZSgpCiAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgRmFrZVJ1bGUoMSwgJ3Rvb19tYW55X2FyZ3MnLCAzKQogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgIEZha2VSdWxlKCdub3RfYV9udW1iZXInLCAnYScpCiAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgRmFrZVJ1bGUoJ3dyb25nX29yZGVyJywgMSkKCiAgICAgICAgZmFrZV9ydWxlID0gRmFrZVJ1bGUoMiwgJ2EnKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmYWtlX3J1bGUueCwgMikKICAgICAgICBzZWxmLmFzc2VydFRydWUoZmFrZV9ydWxlLnksICdhJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBmYWtlX3J1bGUucGFyYW1zLAogICAgICAgICAgICBbKCd4Jywgb2JqZWN0cy5SZWFsKSwgKCd5Jywgb2JqZWN0cy5Vbmljb2RlU3RyaW5nKV0KICAgICAgICApCgoKY2xhc3MgUnVsZURhdGFVbml0VGVzdHModGVzdF91dGlscy5HZW5lcmljVGVzdEJhc2UpOgogICAgIiIiVGVzdHMgZm9yIHRoZSBhY3R1YWwgcnVsZXMgaW4gZXh0ZW5zaW9ucy8uIiIiCgogICAgZGVmIHRlc3RfdGhhdF9hbGxfcnVsZXNfaGF2ZV9vYmplY3RfZWRpdG9yX3RlbXBsYXRlcyhzZWxmKToKICAgICAgICBydWxlX2RpciA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgZmVjb25mLlJVTEVTX0RJUikKCiAgICAgICAgbnVtX3J1bGVzID0gMAoKICAgICAgICBmb3IgbG9hZGVyLCBuYW1lLCBfIGluIHBrZ3V0aWwuaXRlcl9tb2R1bGVzKHBhdGg9W3J1bGVfZGlyXSk6CiAgICAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJ190ZXN0Jykgb3IgbmFtZSA9PSAnYmFzZSc6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIuZmluZF9tb2R1bGUobmFtZSkubG9hZF9tb2R1bGUobmFtZSkKICAgICAgICAgICAgZm9yIG5hbWUsIGNsYXp6IGluIGluc3BlY3QuZ2V0bWVtYmVycyhtb2R1bGUsIGluc3BlY3QuaXNjbGFzcyk6CiAgICAgICAgICAgICAgICBudW1fcnVsZXMgKz0gMQogICAgICAgICAgICAgICAgcGFyYW1fbGlzdCA9IHJ1bGVfZG9tYWluLmdldF9wYXJhbV9saXN0KGNsYXp6LmRlc2NyaXB0aW9uKQoKICAgICAgICAgICAgICAgIGZvciAoXywgcGFyYW1fb2JqX3R5cGUpIGluIHBhcmFtX2xpc3Q6CiAgICAgICAgICAgICAgICAgICAgIyBUT0RPKHNsbCk6IEdldCByaWQgb2YgdGhlc2Ugc3BlY2lhbCBjYXNlcy4KICAgICAgICAgICAgICAgICAgICBpZiBwYXJhbV9vYmpfdHlwZS5fX25hbWVfXyBpbiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTm9ubmVnYXRpdmVJbnQnLCAnTGlzdE9mR3JhcGgnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0xpc3RPZkNvZGVFdmFsdWF0aW9uJywgJ0xpc3RPZkNvb3JkVHdvRGltJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTZXRPZk5vcm1hbGl6ZWRTdHJpbmcnXToKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV9vYmpfdHlwZS5oYXNfZWRpdG9yX2pzX3RlbXBsYXRlKCksCiAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nKCVzKScgJSBjbGF6ei5kZXNjcmlwdGlvbikKCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChFWFBFQ1RFRF9UT1RBTF9OVU1CRVJfT0ZfUlVMRVMsIG51bV9ydWxlcykKCiAgICBkZWYgdGVzdF90aGF0X2FsbF9ydWxlX2lucHV0X2ZpZWxkc19oYXZlX2RlZmF1bHRfdmFsdWVzKHNlbGYpOgogICAgICAgIHJ1bGVfZGlyID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBmZWNvbmYuUlVMRVNfRElSKQoKICAgICAgICBudW1fcnVsZXMgPSAwCgogICAgICAgIGZvciBsb2FkZXIsIG5hbWUsIF8gaW4gcGtndXRpbC5pdGVyX21vZHVsZXMocGF0aD1bcnVsZV9kaXJdKToKICAgICAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgnX3Rlc3QnKSBvciBuYW1lID09ICdiYXNlJzoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5maW5kX21vZHVsZShuYW1lKS5sb2FkX21vZHVsZShuYW1lKQogICAgICAgICAgICBmb3IgbmFtZSwgY2xhenogaW4gaW5zcGVjdC5nZXRtZW1iZXJzKG1vZHVsZSwgaW5zcGVjdC5pc2NsYXNzKToKICAgICAgICAgICAgICAgIG51bV9ydWxlcyArPSAxCiAgICAgICAgICAgICAgICBwYXJhbV9saXN0ID0gcnVsZV9kb21haW4uZ2V0X3BhcmFtX2xpc3QoY2xhenouZGVzY3JpcHRpb24pCgogICAgICAgICAgICAgICAgZm9yIChfLCBwYXJhbV9vYmpfdHlwZSkgaW4gcGFyYW1fbGlzdDoKICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSgKICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fb2JqX3R5cGUuZGVmYXVsdF92YWx1ZSwgbXNnPSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdObyBkZWZhdWx0IHZhbHVlIHNwZWNpZmllZCBmb3Igb2JqZWN0IGNsYXNzICVzLicgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fb2JqX3R5cGUuX19uYW1lX18pKQoKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEVYUEVDVEVEX1RPVEFMX05VTUJFUl9PRl9SVUxFUywgbnVtX3J1bGVzKQoKICAgIGRlZiB0ZXN0X2dldF9kZWZhdWx0X29iamVjdF92YWx1ZXNfZnVuY3Rpb24oc2VsZik6CiAgICAgICAgcnVsZV9kaXIgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIGZlY29uZi5SVUxFU19ESVIpCgogICAgICAgIGV4cGVjdGVkX3Jlc3VsdCA9IHt9CiAgICAgICAgZm9yIGxvYWRlciwgbmFtZSwgXyBpbiBwa2d1dGlsLml0ZXJfbW9kdWxlcyhwYXRoPVtydWxlX2Rpcl0pOgogICAgICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKCdfdGVzdCcpIG9yIG5hbWUgPT0gJ2Jhc2UnOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgbW9kdWxlID0gbG9hZGVyLmZpbmRfbW9kdWxlKG5hbWUpLmxvYWRfbW9kdWxlKG5hbWUpCiAgICAgICAgICAgIGZvciBuYW1lLCBjbGF6eiBpbiBpbnNwZWN0LmdldG1lbWJlcnMobW9kdWxlLCBpbnNwZWN0LmlzY2xhc3MpOgogICAgICAgICAgICAgICAgcGFyYW1fbGlzdCA9IHJ1bGVfZG9tYWluLmdldF9wYXJhbV9saXN0KGNsYXp6LmRlc2NyaXB0aW9uKQoKICAgICAgICAgICAgICAgIGZvciAoXywgcGFyYW1fb2JqX3R5cGUpIGluIHBhcmFtX2xpc3Q6CiAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcmVzdWx0W3BhcmFtX29ial90eXBlLl9fbmFtZV9fXSA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fb2JqX3R5cGUuZGVmYXVsdF92YWx1ZSkKCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgZXhwZWN0ZWRfcmVzdWx0LCBydWxlX2RvbWFpbi5nZXRfZGVmYXVsdF9vYmplY3RfdmFsdWVzKCkpCgoKY2xhc3MgUnVsZUZ1bmN0aW9uVW5pdFRlc3RzKHRlc3RfdXRpbHMuR2VuZXJpY1Rlc3RCYXNlKToKICAgICIiIlRlc3QgZm9yIGZ1bmN0aW9ucyBpbnZvbHZpbmcgcnVsZXMuIiIiCgogICAgZGVmIHRlc3RfZ2V0X2Rlc2NyaXB0aW9uX3N0cmluZ3NfZm9yX29ial90eXBlKHNlbGYpOgogICAgICAgIHJ1bGVfZGVzY3JpcHRpb25zID0gcnVsZV9kb21haW4uZ2V0X2Rlc2NyaXB0aW9uX3N0cmluZ3NfZm9yX29ial90eXBlKAogICAgICAgICAgICAnUmVhbCcpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydWxlX2Rlc2NyaXB0aW9ucywgewogICAgICAgICAgICAnRXF1YWxzJzogJ2lzIGVxdWFsIHRvIHt7eHxSZWFsfX0nLAogICAgICAgICAgICAnSXNMZXNzVGhhbic6ICdpcyBsZXNzIHRoYW4ge3t4fFJlYWx9fScsCiAgICAgICAgICAgICdJc0dyZWF0ZXJUaGFuJzogJ2lzIGdyZWF0ZXIgdGhhbiB7e3h8UmVhbH19JywKICAgICAgICAgICAgJ0lzTGVzc1RoYW5PckVxdWFsVG8nOiAnaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHt7eHxSZWFsfX0nLAogICAgICAgICAgICAnSXNHcmVhdGVyVGhhbk9yRXF1YWxUbyc6ICdpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8ge3t4fFJlYWx9fScsCiAgICAgICAgICAgICdJc0luY2x1c2l2ZWx5QmV0d2Vlbic6ICgKICAgICAgICAgICAgICAgICdpcyBiZXR3ZWVuIHt7YXxSZWFsfX0gYW5kIHt7YnxSZWFsfX0sIGluY2x1c2l2ZScpLAogICAgICAgICAgICAnSXNXaXRoaW5Ub2xlcmFuY2UnOiAnaXMgd2l0aGluIHt7dG9sfFJlYWx9fSBvZiB7e3h8UmVhbH19JwogICAgICAgIH0pCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGxlbihydWxlX2RvbWFpbi5nZXRfcnVsZXNfZm9yX29ial90eXBlKCdGYWtlT2JqVHlwZScpKSwgMCkKCgo8fGZpbV9lbmR8Pg=="]
["99ce83457a348b110b1b42132b7a93ad124fc4ee-1","99ce83457a348b110b1b42132b7a93ad124fc4ee","PHxmaW1fcHJlZml4fD4KcHJpbnQoJz09PT09PT09PURFU0FGSU8yNT09PT09PT09PScpCm5vbWUgPSBzdHIoaW5wdXQocHJpbnQoJ1F1YWwgc2V1IG5vbWUgY29tcGxldG8/ICcpKSkuc3RyaXAoKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CnByaW50KCdTZXUgbm9tZSB0ZW0gc2lsdmE/IHt9Jy5mb3JtYXQoJ1NJTFZBJyBpbiBub21lLmxvd2VyKCkpKQo8fGZpbV9lbmR8Pg=="]
["e594a80de8b29ed4c73ccf45c6ae5a5356ec9bbd-2","e594a80de8b29ed4c73ccf45c6ae5a5356ec9bbd","PHxmaW1fcHJlZml4fD4KCmRlZiBjYXBfdGV4dCh0ZXh0KToKCScnJwoJSW5wdXQgc3RyaW5nCglPdXRwdXQgY2FwaXRhbGlzZWQgc3RyaW5nCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICBPbmx5IGZpcnN0IGxldHRlciBvZiBzdHJpbmcgaXMgbWFkZSB1cHBlcmNhc2UsIGFsbCBvdGhlciBsZXR0ZXJzIGFyZSBtYWRlIGxvd2VyIGNhc2UKPHxmaW1fZW5kfD4="]
["2e19385e7137f1d7456bcbd8d82e0cbf29a31111-2","2e19385e7137f1d7456bcbd8d82e0cbf29a31111","PHxmaW1fcHJlZml4fD4KZnJvbSBhYmMgaW1wb3J0IEFCQywgYWJzdHJhY3RtZXRob2QKCmZyb20gLmNyZWRlbnRpYWxzIGltcG9ydCBDcmVkZW50aWFsCgoKY2xhc3MgQWJzdHJhY3RTdG9yYWdlQmFja2VuZChBQkMpOgogICAgQGFic3RyYWN0bWV0aG9kCiAgICBkZWYgZ2V0X2NyZWRlbnRpYWwoc2VsZiwgdXNlcm5hbWUpIC0+IENyZWRlbnRpYWw6CiAgICAgICAgIiIiCgogICAgICAgIDpwYXJhbSB1c2VybmFtZToKICAgICAgICA6cmV0dXJuOgogICAgICAgICIiIgoKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIHNhdmVfY3JlZGVudGlhbChzZWxmLCB1c2VybmFtZSwgY3JlZGVudGlhbCwgKip1c2VyX2V4dHJhKToKICAgICAgICAiIiIKCiAgICAgICAgOnBhcmFtIHVzZXJuYW1lOgogICAgICAgIDpwYXJhbSBjcmVkZW50aWFsOgogICAgICAgIDpwYXJhbSB1c2VyX2V4dHJhOgogICAgICAgIDpyZXR1cm46CiAgICAgICAgIiIiCgogICAgQGFic3RyYWN0bWV0aG9kCiAgICBkZWYgc2F2ZV9jaGFsbGVuZ2Uoc2VsZiwgdXNlcm5hbWUsIGNoYWxsZW5nZSwgY2hhbGxlbmdlX3R5cGUpOgogICAgICAgICIiIgoKICAgICAgICA6cGFyYW0gdXNlcm5hbWU6CiAgICAgICAgOnBhcmFtIGNoYWxsZW5nZToKICAgICAgICA6cGFyYW0gY2hhbGxlbmdlX3R5cGU6CiAgICAgICAgOnJldHVybjoKICAgICAgICAiIiIKCiAgICBAYWJzdHJhY3RtZXRob2QKICAgIGRlZiBnZXRfY2hhbGxlbmdlKHNlbGYsIHVzZXJuYW1lLCBjaGFsbGVuZ2VfdHlwZSkgLT4gc3RyOgogICAgICAgICIiIgoKICAgICAgICA6cGFyYW0gdXNlcm5hbWU6CiAgICAgICAgOnBhcmFtIGNoYWxsZW5nZV90eXBlOgogICAgICAgIDpyZXR1cm46CiAgICAgICAgIiIiCgoKY2xhc3MgRHluYW1vQmFja2VuZChBYnN0cmFjdFN0b3JhZ2VCYWNrZW5kKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBpbXBvcnQgcHluYW1vZGIubW9kZWxzLCBweW5hbW9kYi5hdHRyaWJ1dGVzCgogICAgICAgIGNsYXNzIFVzZXJNb2RlbChweW5hbW9kYi5tb2RlbHMuTW9kZWwpOgogICAgICAgICAgICBjbGFzcyBNZXRhOgogICAgICAgICAgICAgICAgdGFibGVfbmFtZSA9ICJweXdhcnAtdXNlcnMiCiAgICAgICAgICAgIGVtYWlsID0gcHluYW1vZGIuYXR0cmlidXRlcy5Vbmljb2RlQXR0cmlidXRlKGhhc2hfa2V5PVRydWUpCiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbl9jaGFsbGVuZ2UgPSBweW5hbW9kYi5hdHRyaWJ1dGVzLkJpbmFyeUF0dHJpYnV0ZShudWxsPVRydWUpCiAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uX2NoYWxsZW5nZSA9IHB5bmFtb2RiLmF0dHJpYnV0ZXMuQmluYXJ5QXR0cmlidXRlKG51bGw9VHJ1ZSkKICAgICAgICAgICAgY3JlZGVudGlhbF9pZCA9IHB5bmFtb2RiLmF0dHJpYnV0ZXMuQmluYXJ5QXR0cmlidXRlKG51bGw9VHJ1ZSkKICAgICAgICAgICAgY3JlZGVudGlhbF9wdWJsaWNfa2V5ID0gcHluYW1vZGIuYXR0cmlidXRlcy5CaW5hcnlBdHRyaWJ1dGUobnVsbD1UcnVlKQogICAgICAgIHNlbGYuVXNlck1vZGVsID0gVXNlck1vZGVsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLlVzZXJNb2RlbC5jcmVhdGVfdGFibGUocmVhZF9jYXBhY2l0eV91bml0cz0xLCB3cml0ZV9jYXBhY2l0eV91bml0cz0xLCB3YWl0PVRydWUpCgo8fGZpbV9lbmR8Pg=="]
["5ae56b966a48c8228b7d2839b6108516cb4dce7a-4","5ae56b966a48c8228b7d2839b6108516cb4dce7a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm5uLmZ1bmN0aW9uYWwgYXMgRgoKZnJvbSBsaWIuYmFja2JvbmVzLnBsYWlubmV0IGltcG9ydCBQbGFpbk5ldApmcm9tIGxpYi5iYWNrYm9uZXMuc2VuZXQgaW1wb3J0IHNlbmV0MThfcGF0Y2huZXQgYXMgc2VuZXQKZnJvbSBsaWIuYmFja2JvbmVzLnJlc25ldCBpbXBvcnQgcmVzbmV0MThfcGF0Y2huZXQgYXMgcmVzbmV0CmZyb20gbGliLmJhY2tib25lcy5yZXNuZXh0IGltcG9ydCByZXNuZXh0X3BhdGNobmV0XzEgYXMgcmVzbmV4dApmcm9tIGxpYi5oZWxwZXJzLmZwb2ludG5ldF9oZWxwZXIgaW1wb3J0IHBhcnNlX291dHB1dHMKZnJvbSBsaWIuZXh0ZW5zaW9ucy5tYXNrX2dsb2JhbF9wb29saW5nIGltcG9ydCBtYXNrX2dsb2JhbF9tYXhfcG9vbGluZ18yZApmcm9tIGxpYi5leHRlbnNpb25zLm1hc2tfZ2xvYmFsX3Bvb2xpbmcgaW1wb3J0IG1hc2tfZ2xvYmFsX2F2Z19wb29saW5nXzJkCmZyb20gbGliLmhlbHBlcnMubWlzY19oZWxwZXIgaW1wb3J0IGluaXRfd2VpZ2h0cwoKCmNsYXNzIFBhdGNoTmV0X1BDVChubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNmZywgbnVtX2hlYWRpbmdfYmluLCBudW1fc2l6ZV9jbHVzdGVyLCBtZWFuX3NpemVfYXJyKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLmNmZyA9IGNmZwogICAgICAgIHNlbGYubnVtX2hlYWRpbmdfYmluID0gbnVtX2hlYWRpbmdfYmluCiAgICAgICAgc2VsZi5udW1fc2l6ZV9jbHVzdGVyID0gbnVtX3NpemVfY2x1c3RlcgogICAgICAgIHNlbGYubWVhbl9zaXplX2FyciA9IG1lYW5fc2l6ZV9hcnIKCiAgICAgICAgIyBjZW50ZXIgZXN0aW1hdGlvbiBtb2R1bGUKICAgICAgICBzZWxmLmNlbnRlcl9yZWdfYmFja2JvbmUxID0gUGxhaW5OZXQoaW5wdXRfY2hhbm5lbHM9MywgbGF5ZXJfY2ZnPVsxMjgsIDEyOCwgMjU2XSwga2VybmFsX3NpemU9MSxkaWxhdGVkPWNmZ1snZGlsYXRlZCddKQogICAgICAgIHNlbGYuY2VudGVyX3JlZ19oZWFkMSA9IG5uLlNlcXVlbnRpYWwobm4uTGluZWFyKDI1OSwgMjU2KSwgbm4uQmF0Y2hOb3JtMWQoMjU2KSwgbm4uUmVMVShpbnBsYWNlPVRydWUpLCBubi5Ecm9wb3V0KDAuNSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5uLkxpbmVhcigyNTYsIDEyOCksIG5uLkJhdGNoTm9ybTFkKDEyOCksIG5uLlJlTFUoaW5wbGFjZT1UcnVlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm4uTGluZWFyKDEyOCwgMykpCiAgICAgICAgc2VsZi5jZW50ZXJfcmVnX3VuMSA9IG5uLlNlcXVlbnRpYWwobm4uTGluZWFyKDI1OSwgMjU2KSwgbm4uQmF0Y2hOb3JtMWQoMjU2KSwgbm4uUmVMVShpbnBsYWNlPVRydWUpLCBubi5Ecm9wb3V0KDAuNSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5uLkxpbmVhcigyNTYsIDEyOCksIG5uLkJhdGNoTm9ybTFkKDEyOCksIG5uLlJlTFUoaW5wbGFjZT1UcnVlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm4uTGluZWFyKDEyOCwgMSkpCgogICAgICAgIHNlbGYuY2VudGVyX3JlZ19iYWNrYm9uZTIgPSBQbGFpbk5ldChpbnB1dF9jaGFubmVscz0zLCBsYXllcl9jZmc9WzEyOCwgMTI4LCAyNTZdLCBrZXJuYWxfc2l6ZT0xLGRpbGF0ZWQ9Y2ZnWydkaWxhdGVkJ10pCiAgICAgICAgc2VsZi5jZW50ZXJfcmVnX2hlYWQyID0gbm4uU2VxdWVudGlhbChubi5MaW5lYXIoMjU5LCAyNTYpLCBubi5CYXRjaE5vcm0xZCgyNTYpLCBubi5SZUxVKGlucGxhY2U9VHJ1ZSksIG5uLkRyb3BvdXQoMC41KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm4uTGluZWFyKDI1NiwgMTI4KSwgbm4uQmF0Y2hOb3JtMWQoMTI4KSwgbm4uUmVMVShpbnBsYWNlPVRydWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubi5MaW5lYXIoMTI4LCAzKSkKICAgICAgICBzZWxmLmNlbnRlcl9yZWdfdW4yID0gbm4uU2VxdWVudGlhbChubi5MaW5lYXIoMjU5LCAyNTYpLCBubi5CYXRjaE5vcm0xZCgyNTYpLCBubi5SZUxVKGlucGxhY2U9VHJ1ZSksIG5uLkRyb3BvdXQoMC41KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm4uTGluZWFyKDI1NiwgMTI4KSwgbm4uQmF0Y2hOb3JtMWQoMTI4KSwgbm4uUmVMVShpbnBsYWNlPVRydWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubi5MaW5lYXIoMTI4LCAxKSkKCiAgICAgICAgc2VsZi5jZW50ZXJfcmVnX2JhY2tib25lMyA9IFBsYWluTmV0KGlucHV0X2NoYW5uZWxzPTMsIGxheWVyX2NmZz1bMTI4LCAxMjgsIDI1Nl0sIGtlcm5hbF9zaXplPTEsZGlsYXRlZD1jZmdbJ2RpbGF0ZWQnXSkKICAgICAgICBzZWxmLmNlbnRlcl9yZWdfaGVhZDMgPSBubi5TZXF1ZW50aWFsKG5uLkxpbmVhcigyNTksIDI1NiksIG5uLkJhdGNoTm9ybTFkKDI1NiksIG5uLlJlTFUoaW5wbGFjZT1UcnVlKSwgbm4uRHJvcG91dCgwLjUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubi5MaW5lYXIoMjU2LCAxMjgpLCBubi5CYXRjaE5vcm0xZCgxMjgpLCBubi5SZUxVKGlucGxhY2U9VHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5uLkxpbmVhcigxMjgsIDMpKQogICAgICAgIHNlbGYuY2VudGVyX3JlZ191bjMgPSBubi5TZXF1ZW50aWFsKG5uLkxpbmVhcigyNTksIDI1NiksIG5uLkJhdGNoTm9ybTFkKDI1NiksIG5uLlJlTFUoaW5wbGFjZT1UcnVlKSwgbm4uRHJvcG91dCgwLjUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubi5MaW5lYXIoMjU2LCAxMjgpLCBubi5CYXRjaE5vcm0xZCgxMjgpLCBubi5SZUxVKGlucGxhY2U9VHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5uLkxpbmVhcigxMjgsIDEpKQogICAgICAgIHNlbGYuZmVhdF9yZWcgPSBubi5TZXF1ZW50aWFsKG5uLkNvbnYyZCg2NCwgNjQsIGtlcm5lbF9zaXplPTEsIHN0cmlkZT00KSwgbm4uQmF0Y2hOb3JtMmQoNjQpLCBubi5SZUxVKGlucGxhY2U9VHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm4uQ29udjJkKDY0LCA2NCwga2VybmVsX3NpemU9MSwgc3RyaWRlPTQpLCBubi5CYXRjaE5vcm0yZCg2NCksIG5uLlJlTFUoaW5wbGFjZT1UcnVlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubi5Db252MmQoNjQsIDY0LCBrZXJuZWxfc2l6ZT0xKSkKICAgICAgICAjIGJveCBlc3RpYW10aW9uIG1vZHVsZQogICAgICAgIGFzc2VydCBjZmdbJ2JhY2tib25lJ10gaW4gWydwbGFpbm5ldCcsICdyZXNuZXQnLCAncmVzbmV4dCcsICdzZW5ldCddCiAgICAgICAgaWYgY2ZnWydiYWNrYm9uZSddID09ICdwbGFpbm5ldCc6CiAgICAgICAgICAgIHNlbGYuYm94X2VzdF9iYWNrYm9uZSA9IFBsYWluTmV0KGlucHV0X2NoYW5uZWxzPTMsIGxheWVyX2NmZz1bMTI4LCAxMjgsIDI1NiwgNTEyXSwga2VybmFsX3NpemU9MywgcGFkZGluZz0xKQogICAgICAgIGlmIGNmZ1snYmFja2JvbmUnXSA9PSAncmVzbmV0JzoKICAgICAgICAgICAgc2VsZi5ib3hfZXN0X2JhY2tib25lID0gcmVzbmV0KCkKICAgICAgICBpZiBjZmdbJ2JhY2tib25lJ10gPT0gJ3NlbmV0JzoKICAgICAgICAgICAgc2VsZi5ib3hfZXN0X2JhY2tib25lID0gc2VuZXQoKQogICAgICAgIGlmIGNmZ1snYmFja2JvbmUnXSA9PSAncmVzbmV4dCc6CiAgICAgICAgICAgIHNlbGYuYm94X2VzdF9iYWNrYm9uZSA9IHJlc25leHQoKQoKICAgICAgICBzZWxmLmJveF9lc3RfaGVhZDEgPSBubi5TZXF1ZW50aWFsKG5uLkxpbmVhcig1MTUrNjQsIDUxMiksIG5uLkJhdGNoTm9ybTFkKDUxMiksIG5uLlJlTFUoaW5wbGFjZT1UcnVlKSwgbm4uRHJvcG91dCgwLjUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubi5MaW5lYXIoNTEyLCAyNTYpLCBubi5CYXRjaE5vcm0xZCgyNTYpLCBubi5SZUxVKGlucGxhY2U9VHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5uLkxpbmVhcigyNTYsIDMgKyBzZWxmLm51bV9oZWFkaW5nX2JpbioyICsgc2VsZi5udW1fc2l6ZV9jbHVzdGVyKjQpKQogICAgICAgIHNlbGYuYm94X2VzdF9oZWFkMiA9IG5uLlNlcXVlbnRpYWwobm4uTGluZWFyKDUxNSs2NCwgNTEyKSwgbm4uQmF0Y2hOb3JtMWQoNTEyKSwgbm4uUmVMVShpbnBsYWNlPVRydWUpLCBubi5Ecm9wb3V0KDAuNSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5uLkxpbmVhcig1MTIsIDI1NiksIG5uLkJhdGNoTm9ybTFkKDI1NiksIG5uLlJlTFUoaW5wbGFjZT1UcnVlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm4uTGluZWFyKDI1NiwgMyArIHNlbGYubnVtX2hlYWRpbmdfYmluKjIgKyBzZWxmLm51bV9zaXplX2NsdXN0ZXIqNCkpCiAgICAgICAgc2VsZi5ib3hfZXN0X2hlYWQzID0gbm4uU2VxdWVudGlhbChubi5MaW5lYXIoNTE1KzY0LCA1MTIpLCBubi5CYXRjaE5vcm0xZCg1MTIpLCBubi5SZUxVKGlucGxhY2U9VHJ1ZSksIG5uLkRyb3BvdXQoMC41KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm4uTGluZWFyKDUxMiwgMjU2KSwgbm4uQmF0Y2hOb3JtMWQoMjU2KSwgbm4uUmVMVShpbnBsYWNlPVRydWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubi5MaW5lYXIoMjU2LCAzICsgc2VsZi5udW1faGVhZGluZ19iaW4qMiArIHNlbGYubnVtX3NpemVfY2x1c3Rlcio0KSkKCgogICAgICAgIGluaXRfd2VpZ2h0cyhzZWxmLCBzZWxmLmNmZ1snaW5pdCddKQoKCiAgICBkZWYgZm9yd2FyZChzZWxmLCBwYXRjaCwgb25lX2hvdF92ZWMsIHJnYl9mZWF0KToKICAgICAgICBvdXRwdXRfZGljdCA9IHt9CgogICAgICAgICMgZ2V0IFtoLCB3XSBvZiBpbnB1dCBwYXRjaCAgW2ZvciBnbG9iYWwgcG9vbGluZ10KICAgICAgICBfLCBfLCBoLCB3ID0gcGF0Y2guc2hhcGUKCiAgICAgICAgIyBtYXNrIGdlbmVyYXRpb24KICAgICAgICBkZXB0aF9tYXAgPSBwYXRjaFs6LCAyLCA6LCA6XQogICAgICAgIHRocmVzaG9sZCA9IGRlcHRoX21hcC5tZWFuKC0xKS5tZWFuKC0xKSArIHNlbGYuY2ZnWyd0aHJlc2hvbGRfb2Zmc2V0J10KICAgICAgICB0aHJlc2hvbGQgPSB0aHJlc2hvbGQudW5zcXVlZXplKC0xKS51bnNxdWVlemUoLTEpLnJlcGVhdCgxLCBoLCB3KQogICAgICAgIHplcm9zLCBvbmVzID0gdG9yY2guemVyb3NfbGlrZShkZXB0aF9tYXApLCB0b3JjaC5vbmVzX2xpa2UoZGVwdGhfbWFwKQogICAgICAgIG1hc2sgPSB0b3JjaC53aGVyZShkZXB0aF9tYXAgPCB0aHJlc2hvbGQsIG9uZXMsIHplcm9zKQogICAgICAgIG1hc2tfeHl6X21lYW4gPSBtYXNrX2dsb2JhbF9hdmdfcG9vbGluZ18yZChwYXRjaCwgbWFzaykKICAgICAgICBwYXRjaCA9IHBhdGNoIC0gbWFza194eXpfbWVhbgogICAgICAgIG1hc2tfeHl6X21lYW4gPSBtYXNrX3h5el9tZWFuLnNxdWVlemUoLTEpLnNxdWVlemUoLTEpCgogICAgICAgICMgY2VudGVyIHJlZ3Jlc3NvcjEKICAgICAgICBjZW50ZXJfcmVnX2ZlYXR1cmVzMSA9IG1hc2tfZ2xvYmFsX21heF9wb29saW5nXzJkKHNlbGYuY2VudGVyX3JlZ19iYWNrYm9uZTEocGF0Y2gpLCBtYXNrKQogICAgICAgIGNlbnRlcl9yZWdfZmVhdHVyZXMxID0gdG9yY2guY2F0KFtjZW50ZXJfcmVnX2ZlYXR1cmVzMS52aWV3KC0xLCAyNTYpLCBvbmVfaG90X3ZlY10sIC0xKSAgIyBhZGQgb25lIGhvdCB2ZWMKICAgICAgICBjZW50ZXJfdG5ldDEgPSBzZWxmLmNlbnRlcl9yZWdfaGVhZDEoY2VudGVyX3JlZ19mZWF0dXJlczEpCiAgICAgICAgc3RhZ2UxX2NlbnRlcjEgPSBjZW50ZXJfdG5ldDEgKyBtYXNrX3h5el9tZWFuICAjIEJ4MwogICAgICAgIG91dHB1dF9kaWN0WydzdGFnZTFfY2VudGVyMSddID0gc3RhZ2UxX2NlbnRlcjEKICAgICAgICBjZW50ZXIxX3VuID0gc2VsZi5jZW50ZXJfcmVnX3VuMShjZW50ZXJfcmVnX2ZlYXR1cmVzMSkKICAgICAgICBvdXRwdXRfZGljdFsnc3RhZ2UxX2NlbnRlcjFfdW4nXSA9IEYuc2lnbW9pZChjZW50ZXIxX3VuKQoKICAgICAgICAjIGNlbnRlciByZWdyZXNzb3IxCiAgICAgICAgcGF0Y2ggPSBwYXRjaCAtIGNlbnRlcl90bmV0MS51bnNxdWVlemUoLTEpLnVuc3F1ZWV6ZSgtMSkKCiAgICAgICAgY2VudGVyX3JlZ19mZWF0dXJlczIgPSBtYXNrX2dsb2JhbF9tYXhfcG9vbGluZ18yZChzZWxmLmNlbnRlcl9yZWdfYmFja2JvbmUyKHBhdGNoKSwgbWFzaykKICAgICAgICBjZW50ZXJfcmVnX2ZlYXR1cmVzMiA9IHRvcmNoLmNhdChbY2VudGVyX3JlZ19mZWF0dXJlczIudmlldygtMSwgMjU2KSwgb25lX2hvdF92ZWNdLCAtMSkgICMgYWRkIG9uZSBob3QgdmVjCiAgICAgICAgY2VudGVyX3RuZXQyID0gc2VsZi5jZW50ZXJfcmVnX2hlYWQyKGNlbnRlcl9yZWdfZmVhdHVyZXMyKQogICAgICAgIHN0YWdlMV9jZW50ZXIyID0gc3RhZ2UxX2NlbnRlcjEgKyBjZW50ZXJfdG5ldDIgICMgQngzCiAgICAgICAgb3V0cHV0X2RpY3RbJ3N0YWdlMV9jZW50ZXIyJ10gPSBzdGFnZTFfY2VudGVyMgogICAgICAgIGNlbnRlcjJfdW4gPSBzZWxmLmNlbnRlcl9yZWdfdW4yKGNlbnRlcl9yZWdfZmVhdHVyZXMyKQogICAgICAgIG91dHB1dF9kaWN0WydzdGFnZTFfY2VudGVyMl91biddID0gRi5zaWdtb2lkKGNlbnRlcjJfdW4pCgogICAgICAgICMgY2VudGVyIHJlZ3Jlc3NvcjEKICAgICAgICBwYXRjaCA9IHBhdGNoIC0gY2VudGVyX3RuZXQyLnVuc3F1ZWV6ZSgtMSkudW5zcXVlZXplKC0xKQoKICAgICAgICBjZW50ZXJfcmVnX2ZlYXR1cmVzMyA9IG1hc2tfZ2xvYmFsX21heF9wb29saW5nXzJkKHNlbGYuY2VudGVyX3JlZ19iYWNrYm9uZTMocGF0Y2gpLCBtYXNrKQogICAgICAgIGNlbnRlcl9yZWdfZmVhdHVyZXMzID0gdG9yY2guY2F0KFtjZW50ZXJfcmVnX2ZlYXR1cmVzMy52aWV3KC0xLCAyNTYpLCBvbmVfaG90X3ZlY10sIC0xKSAgIyBhZGQgb25lIGhvdCB2ZWMKICAgICAgICBjZW50ZXJfdG5ldDMgPSBzZWxmLmNlbnRlcl9yZWdfaGVhZDMoY2VudGVyX3JlZ19mZWF0dXJlczMpCiAgICAgICAgc3RhZ2UxX2NlbnRlcjMgPSBzdGFnZTFfY2VudGVyMiArIGNlbnRlcl90bmV0MyAgIyBCeDMKICAgICAgICBvdXRwdXRfZGljdFsnc3RhZ2UxX2NlbnRlciddID0gc3RhZ2UxX2NlbnRlcjMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGNlbnRlcjNfdW4gPSBzZWxmLmNlbnRlcl9yZWdfdW4zKGNlbnRlcl9yZWdfZmVhdHVyZXMzKQogICAgICAgIG91dHB1dF9kaWN0WydzdGFnZTFfY2VudGVyX3VuJ10gPSBGLnNpZ21vaWQoY2VudGVyM191bikKCiAgICAgICAgIyBnZXQgcGF0Y2ggaW4gb2JqZWN0IGNvb3JkaW5hdGUKPHxmaW1fZW5kfD4="]
["41d24171f67cd23cf57365bd8b6c6e5e8ca2e243-2","41d24171f67cd23cf57365bd8b6c6e5e8ca2e243","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBza2xlYXJuIGltcG9ydCBwcmVwcm9jZXNzaW5nCgoKZGVmIG1pc3NpbmdfdmFsdWVfaGFuZGxpbmcoZGF0YSwgbWV0aG9kPSdkcm9wJyk6CiAgICBkYXRhID0gcGQuRGF0YUZyYW1lKGRhdGEpCiAgICAjIGlmIGFueSBOYU4gaW4gYSByb3csIGRyb3AgdGhlIHJvdwogICAgaWYgbWV0aG9kID09ICdkcm9wJzoKICAgICAgICBkYXRhLmRyb3BuYShheGlzPTAsIGhvdz0nYW55JywgaW5wbGFjZT1UcnVlKQogICAgIyBmaWxsIGEgTmFOIHdpdGggdGhlIHZhbHVlIG9mIHByaW9yIHJvdyBvZiB0aGUgc2FtZSBjb2x1bW4KICAgIGVsaWYgbWV0aG9kID09ICJmZmlsbCI6CiAgICAgICAgZGF0YS5maWxsbmEobWV0aG9kPSdmZmlsbCcsIGlucGxhY2U9VHJ1ZSkKICAgICMgZmlsbCBhIE5hTiB3aXRoIHRoZSB2YWx1ZSBvZiBuZXh0IHJvdyBvZiB0aGUgc2FtZSBjb2x1bW4KICAgIGVsaWYgbWV0aG9kID09ICdiZmlsbCc6CiAgICAgICAgZGF0YS5maWxsbmEobWV0aG9kPSdiZmlsbCcsIGlucGxhY2U9VHJ1ZSkKICAgIGVsc2U6CiAgICAgICAgIyBmaWxsIE5hTnMgd2l0aCB0aGUgYXZlcmFnZSB2YWx1ZSBvZiB0aGlzIGNvbHVtbgogICAgICAgIGRhdGEuZmlsbG5hKGRhdGEubWVhbigpLCBpbnBsYWNlPVRydWUpCiAgICByZXR1cm4gZGF0YQoKCmRlZiBzY2FsaW5nKGRhdGEsIG1ldGhvZD0nbWlubWF4Jyk6CiAgICBkYXRhID0gbnAuYXJyYXkoZGF0YSkKICAgICMgdHJhbnNmb3JtIGRhdGEgdG8gY2VudGVyZWQgYW5kIHdpdGggc2FtZSBzY2FsZQogICAgIyBtaW5tYXggdHJhbnNmb3JtIGl0IHRvIHJhbmdlWy0xLDFdCiAgICBpZiBtZXRob2QgPT0gJ21pbm1heCc6CiAgICAgICAgcHJpbnQoIi0tLS0tLS0tLVNoYXBlIGlzICIsIGRhdGEuc2hhcGUpCiAgICAgICAgaWYobnAuaXNpbmYoZGF0YSkuYW55KCkpOiAgICAgICAgICAgIAogICAgICAgICAgICBwcmludCgiSU5GIFZBTFMiKQoKICAgICAgICBpZihucC5pc25hbihkYXRhKS5hbnkoKSk6CiAgICAgICAgICAgIHByaW50KCJOQU4gVkFMUyIpCiAgICAgICAgZGF0YSA9IHByZXByb2Nlc3NpbmcubWlubWF4X3NjYWxlKGRhdGEsIGZlYXR1cmVfcmFuZ2U9KDAsIDEpKQogICAgIyBub3JtYWxpemUgdHJhbnNmb3JtIGl0IHRvIG5vcm1hbCBkaXN0cmlidXRpb24KICAgIGVsaWYgbWV0aG9kID09ICdub3JtYWxpemUnOgogICAgICAgIGRhdGFbOiwgMDotMV0gPSBwcmVwcm9jZXNzaW5nLm5vcm1hbGl6ZShkYXRhWzosIDA6LTFdKQogICAgIyBzY2FsZSB0cmFuc2Zvcm0gaXQgdG8gemVybyBtZWFucyBhbmQgdW5pdCBzdGQKICAgIGVsc2U6CiAgICAgICAgZGF0YVs6LCAwOi0xXSA9IHByZXByb2Nlc3Npbmcuc2NhbGUoZGF0YVs6LCAwOi0xXSkKICAgIHJldHVybiBkYXRhCgoKZGVmIHByZXByb2Nlc3MoZGF0YSwgbmFfbWV0aG9kPSdkcm9wJywgc2NhbGVfbWV0aG9kPSdtaW5tYXgnLCB0ZXN0X3JhdGlvPU5vbmUpOgogICAgIyBjb25jbHVkZSBtaXNzaW5nIHZhbHVlIGhhbmRsaW5nIGFuZCBzY2FsZQogICAgZGF0YT1kYXRhLnJlcGxhY2UoW25wLmluZiwgLW5wLmluZl0sIG5wLm5hbikKICAgIGRhdGEgPSBzY2FsaW5nKG1pc3NpbmdfdmFsdWVfaGFuZGxpbmcoZGF0YSwgbmFfbWV0aG9kKSwgc2NhbGVfbWV0aG9kKQogICAgaWYgdGVzdF9yYXRpbyBpcyBOb25lOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgWCA9IGRhdGFbOiwgMDotMV0KICAgICAgICBZID0gZGF0YVs6LCAtMV0KICAgICAgICByZXR1cm4gWCwgWQo8fGZpbV9lbmR8Pg=="]
["5aa3088afe87d9d813e3ec7a1ef52aa7f9986c85-1","5aa3088afe87d9d813e3ec7a1ef52aa7f9986c85",{"$cut":{"chars":33464,"head":"PHxmaW1fcHJlZml4fD4KIiIiCk1hc2sgUi1DTk4gZm9yIE9iamVjdF9SUEUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiIiIgoKaW1wb3J0IG9zCmltcG9ydCBzeXMKaW1wb3J0IGpzb24KaW1wb3J0IGRhdGV0aW1lCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgc2tpbWFnZS5kcmF3CmltcG9ydCBnbG9iCgppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBtYXRwbG90bGliLmltYWdlIGFzIG1waW1nCgppbXBvcnQgcmFuZG9tCgppbXBvcnQgY3YyCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgIENSRgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmltcG9ydCBweWRlbnNlY3JmLmRlbnNlY3JmIGFzIGRjcmYKZnJvbSBweWRlbnNlY3JmLnV0aWxzIGltcG9ydCB1bmFyeV9mcm9tX2xhYmVscywgY3JlYXRlX3BhaXJ3aXNlX2JpbGF0ZXJhbCwgY3JlYXRlX3BhaXJ3aXNlX2dhdXNzaWFuCgpST09UX0RJUiA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKCBfX2ZpbGVfXyApLCAnLi4vLi4nKSkKcHJpbnQoIlJPT1RfRElSOiAiLCBST09UX0RJUikKCiMgUGF0aCB0byB0cmFpbmVkIHdlaWdodHMgZmlsZQpERUZBVUxUX0xPR1NfRElSID0gb3MucGF0aC5qb2luKFJPT1RfRElSLCAibG9ncyIpCgppbXBvcnQgYXJncGFyc2UKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgIFBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdHZXQgU3RhdHMgZnJvbSBJbWFnZSBEYXRhc2V0JykKCnBhcnNlci5hZGRfYXJndW1lbnQoJy0tZGV0ZWN0JywgcmVxdWlyZWQ9RmFsc2UsIGRlZmF1bHQ9J3JnYicsCiAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0iVHJhaW4gUkdCIG9yIFJHQitEIikKCnBhcnNlci5hZGRfYXJndW1lbnQoJy0tZGF0YXNldCcsIHJlcXVpcmVkPUZhbHNlLCBkZWZhdWx0PScvZGF0YS9Ba2VhdmVueS9EYXRhc2V0cy9wYXJ0LWFmZm9yZGFuY2VfY29tYmluZWQvcmVhbC8nLAogICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9Ii9wYXRoL3RvL0FmZm9yZGFuY2UvZGF0YXNldC8iKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRhdGFzZXRfdHlwZScsIHJlcXVpcmVkPUZhbHNlLCBkZWZhdWx0PSdzY2lzc29yc18yMGsnLAogICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9J3JlYWwgb3Igc3luJykKcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1kYXRhc2V0X3NwbGl0JywgcmVxdWlyZWQ9RmFsc2UsIGRlZmF1bHQ9J3Rlc3QnLAogICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9J3Rlc3Qgb3IgdmFsJykKCnBhcnNlci5hZGRfYXJndW1lbnQoJy0td2VpZ2h0cycsIHJlcXVpcmVkPUZhbHNlLAogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Jy9ob21lL2FrZWF2ZW55L2NhdGtpbl93cy9zcmMvb2JqZWN0LXJwZS1hay9NYXNrX1JDTk4vbG9ncy9hZmZvcmRhbmNlMjAyMDA5MjhUMjA1My9tYXNrX3Jjbm5fYWZmb3JkYW5jZV8wMDEyLmg1JywKICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSIvcGF0aC90by93ZWlnaHRzLmg1IG9yICdjb2NvJyIpCnBhcnNlci5hZGRfYXJndW1lbnQoJy0tbG9ncycsIHJlcXVpcmVkPUZhbHNlLAogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9REVGQVVMVF9MT0dTX0RJUiwKICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSIvcGF0aC90by9sb2dzLyBvciBMb2dzIGFuZCBjaGVja3BvaW50cyBkaXJlY3RvcnkgKGRlZmF1bHQ9bG9ncy8pIikKCnBhcnNlci5hZGRfYXJndW1lbnQoJy0tcG9zdF9wcm9jZXNzJywgcmVxdWlyZWQ9RmFsc2UsIGRlZmF1bHQ9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICB0eXBlPWJvb2wsCiAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0ndXNlIENSRnMnKQoKcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zaG93X3Bsb3RzJywgcmVxdWlyZWQ9RmFsc2UsIGRlZmF1bHQ9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICB0eXBlPWJvb2wsCiAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0nc2hvdyBwbG90cyBmcm9tIG1hdHBsb3RsaWInKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXNhdmVfb3V0cHV0JywgcmVxdWlyZWQ9RmFsc2UsIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgdHlwZT1ib29sLAogICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9J3NhdmUgdGVybWluYWwgb3V0cHV0IHRvIHRleHQgZmlsZScpCgphcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQoKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgIyMjIGNyb3AgIyMjCiMgIyBNQVhfR1RfSU5TVEFOQ0VTXyA9IDMKIyAjIERFVEVDVElPTl9NQVhfSU5TVEFOQ0VTXyA9IDMwCiMgIyBERVRFQ1RJT05fTUlOX0NPTkZJREVOQ0VfID0gMC41CiMgIyBSUE5fQU5DSE9SX1NDQUxFU18gPSAoMTYsIDMyLCA2NCwgMTI4LCAyNTYpCiMgIyBJTUFHRV9SRVNJWkVfTU9ERV8gPSAiY3JvcCIKIyAjIElNQUdFX01JTl9ESU1fID0gNDQ4CiMgIyBJTUFHRV9NQVhfRElNXyA9IDQ0OAojICMjIyBzcWF1cmUgIyMjCiMgTUFYX0dUX0lOU1RBTkNFU18gPSAzCiMgREVURUNUSU9OX01BWF9JTlNUQU5DRVNfID0gMzAKIyBERVRFQ1RJT05fTUlOX0NPTkZJREVOQ0VfID0gMC41CiMgUlBOX0FOQ0hPUl9TQ0FMRVNfID0gKDE2LCAzMiwgNjQsIDEyOCwgMjU2KQojIElNQUdFX1JFU0laRV9NT0RFXyA9ICJzcXVhcmUiCiMgSU1BR0VfTUlOX0RJTV8gPSA2NDAKIyBJTUFHRV9NQVhfRElNXyA9IDY0MAojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyMjIyMj"}}]
["99da786e478d634b938738847bb7fc01ac6bd275-1","99da786e478d634b938738847bb7fc01ac6bd275","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cywgb3MKZnJvbSBGbG9rQWxnb3JpdGhtTG9jYWwgaW1wb3J0IEZsb2tEYXRhRnJhbWUsIEZsb2tBbGdvcml0aG1Mb2NhbAppbXBvcnQganNvbiwgcmUKaW1wb3J0IHhtbC5ldHJlZS5jRWxlbWVudFRyZWUgYXMgRVQKaW1wb3J0IHBhbmRhcyBhcyBwZAoKCmNsYXNzIEJhdGNoX1RleHRTeW1ib2xGaWx0ZXIoRmxva0FsZ29yaXRobUxvY2FsKToKICAgIGRlZiBydW4oc2VsZiwgaW5wdXREYXRhU2V0cywgcGFyYW1zKToKICAgICAgICB0ZXh0X2RpY3QgPSBpbnB1dERhdGFTZXRzLmdldCgwKQogICAgICAgIGNsZWFuX3RhZyA9IHJlLmNvbXBpbGUocic8W14+XSs+JywgcmUuUykKICAgICAgICBjbGVhbl9zeW1ib2wgPSByZS5jb21waWxlKCJbK1wuXCFcL18sJCVeKigrXCJcJyldK3xbK+KAlOKAlCgpP+OAkOOAkeKAnOKAne+8ge+8jO+8m++8mjs644CC77yf44CBfkAj77+lJeKApuKApiYq77yI77yJXSsiKQogICAgICAgIGZvciB0ZXh0X25hbWUsIHRleHQgaW4gdGV4dF9kaWN0Lml0ZW1zKCk6CiAgICAgICAgICAgIHRleHQgPSByZS5zdWIoY2xlYW5fdGFnLCAnJywgdGV4dCkKICAgICAgICAgICAgdGV4dCA9IHJlLnN1YihjbGVhbl9zeW1ib2wsICcgJywgdGV4dCkKICAgICAgICAgICAgdGV4dF9kaWN0W3RleHRfbmFtZV0gPSB0ZXh0CiAgICAgICAgcmVzdWx0ID0gRmxva0RhdGFGcmFtZSgpCiAgICAgICAgcmVzdWx0LmFkZERGKHRleHRfZGljdCkKICAgICAgICByZXR1cm4gcmVzdWx0CgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIGFsbF9pbmZvID0ganNvbi5sb2FkcyhzeXMuYXJndlsxXSkKICAgICMgZiA9IG9wZW4oInRlc3QuanNvbiIsIGVuY29kaW5nPSd1dGYtOCcpCiAgICAjIGFsbF9pbmZvID0ganNvbi5sb2FkKGYpCiAgICAjIGFsbF9pbmZvID0gewogICAgIyAgICAgImlucHV0IjogWyJkYXRhL2VuZ2xpc2gudHh0Il0sCiAgICAjICAgICAiaW5wdXRGb3JtYXQiOlsidHh0Il0sCiAgICAjICAgICAiaW5wdXRMb2NhdGlvbiI6IFsibG9jYWxfZnMiXSwKICAgICMgICAgICJvdXRwdXQiOiBbImRhdGEvZW5nbGlzaF9maWx0ZXIudHh0Il0sCiAgICAjICAgICAib3V0cHV0Rm9ybWF0IjogWyJ0eHQiXSwKICAgICMgICAgICJvdXRwdXRMb2NhdGlvbiI6WyJsb2NhbF9mcyJdLAogICAgIyAgICAgInBhcmFtZXRlcnMiOiB7fQogICAgIyB9CiAgICBwYXJhbXMgPSBhbGxfaW5mb1sicGFyYW1ldGVycyJdCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGlucHV0UGF0aHMgPSBhbGxfaW5mb1siaW5wdXQiXQogICAgaW5wdXRUeXBlcyA9IGFsbF9pbmZvWyJpbnB1dEZvcm1hdCJdCiAgICBpbnB1dExvY2F0aW9uID0gYWxsX2luZm9bImlucHV0TG9jYXRpb24iXQogICAgb3V0cHV0UGF0aHMgPSBhbGxfaW5mb1sib3V0cHV0Il0KPHxmaW1fZW5kfD4="]
["5a98fd6280aec4b75711092a5c9c7ae75d02cfd2-4","5a98fd6280aec4b75711092a5c9c7ae75d02cfd2","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IGZsYXNrLCBmbGFzay52aWV3cwppbXBvcnQgb3MKCmNsYXNzIE1haW4oZmxhc2sudmlld3MuTWV0aG9kVmlldyk6Cjx8ZmltX2VuZHw+"]
["cf2331f9917844d677d171969ab9d5986b849183-3","cf2331f9917844d677d171969ab9d5986b849183","PHxmaW1fcHJlZml4fD4KIiIiSW1hZ2VOZXQgd29ya2xvYWQgaW1wbGVtZW50ZWQgaW4gSmF4LgoKcHl0aG9uMyBzdWJtaXNzaW9uX3J1bm5lci5weSBcCiAgICAtLXdvcmtsb2FkPWltYWdlbmV0X2pheCBcCiAgICAtLXN1Ym1pc3Npb25fcGF0aD13b3JrbG9hZHMvaW1hZ2VuZXQvaW1hZ2VuZXRfamF4L3N1Ym1pc3Npb24ucHkgXAogICAgLS1udW1fdHVuaW5nX3RyaWFscz0xCiIiIgppbXBvcnQgZnVuY3Rvb2xzCmZyb20gdHlwaW5nIGltcG9ydCBUdXBsZQppbXBvcnQgb3B0YXgKCmltcG9ydCB0ZW5zb3JmbG93IGFzIHRmCiMgSGlkZSBhbnkgR1BVcyBmb3JtIFRlbnNvckZsb3cuIE90aGVyd2lzZSBURiBtaWdodCByZXNlcnZlIG1lbW9yeSBhbmQgbWFrZSBpdAojIHVuYXZhaWxhYmxlIHRvIEpBWC4KdGYuY29uZmlnLmV4cGVyaW1lbnRhbC5zZXRfdmlzaWJsZV9kZXZpY2VzKFtdLCAnR1BVJykKaW1wb3J0IHRlbnNvcmZsb3dfZGF0YXNldHMgYXMgdGZkcwoKaW1wb3J0IGpheAppbXBvcnQgamF4Lm51bXB5IGFzIGpucAppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBqYXggaW1wb3J0IGxheApmcm9tIGZsYXggaW1wb3J0IGpheF91dGlscwoKaW1wb3J0IHNwZWMKaW1wb3J0IHJhbmRvbV91dGlscyBhcyBwcm5nCmZyb20gLiBpbXBvcnQgaW5wdXRfcGlwZWxpbmUKZnJvbSAuIGltcG9ydCBtb2RlbHMKCgoKY2xhc3MgSW1hZ2VuZXRXb3JrbG9hZChzcGVjLldvcmtsb2FkKToKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBzZWxmLl9ldmFsX2RzID0gTm9uZQogICAgc2VsZi5fcGFyYW1fc2hhcGVzID0gTm9uZQogICAgc2VsZi5lcG9jaF9tZXRyaWNzID0gW10KICAgICMgc2VsZi5tb2RlbF9uYW1lID0gJ1Jlc05ldDUwJwogICAgIyBzZWxmLmRhdGFzZXQgPSAnaW1hZ2VuZXQyMDEyOjUuKi4qJwogICAgIyBzZWxmLm51bV9jbGFzc2VzID0gMTAwMAogICAgIyBGb3IgZmFzdGVyIGRldmVsb3BtZW50IHRlc3RpbmcsIHVuY29tbWVudCB0aGUgbGluZXMgYmVsb3cKICAgIHNlbGYubW9kZWxfbmFtZSA9ICdfUmVzTmV0MScKICAgIHNlbGYuZGF0YXNldCA9ICdpbWFnZW5ldHRlJwogICAgc2VsZi5udW1fY2xhc3NlcyA9IDEwCgogIGRlZiBoYXNfcmVhY2hlZF9nb2FsKHNlbGYsIGV2YWxfcmVzdWx0OiBmbG9hdCkgLT4gYm9vbDoKICAgIHJldHVybiBldmFsX3Jlc3VsdFsnYWNjdXJhY3knXSA+IHNlbGYudGFyZ2V0X3ZhbHVlCgogIEBwcm9wZXJ0eQogIGRlZiB0YXJnZXRfdmFsdWUoc2VsZik6CiAgICByZXR1cm4gMC43NgoKICBAcHJvcGVydHkKICBkZWYgbG9zc190eXBlKHNlbGYpOgogICAgcmV0dXJuIHNwZWMuTG9zc1R5cGUuU09GVE1BWF9DUk9TU19FTlRST1BZCgogIEBwcm9wZXJ0eQogIGRlZiB0cmFpbl9tZWFuKHNlbGYpOgogICAgcmV0dXJuIFswLjQ4NSAqIDI1NSwgMC40NTYgKiAyNTUsIDAuNDA2ICogMjU1XQoKICBAcHJvcGVydHkKICBkZWYgdHJhaW5fc3RkZGV2KHNlbGYpOgogICAgcmV0dXJuIFswLjIyOSAqIDI1NSwgMC4yMjQgKiAyNTUsIDAuMjI1ICogMjU1XQoKICBkZWYgbW9kZWxfcGFyYW1zX3R5cGVzKHNlbGYpOgogICAgcGFzcwoKICBAcHJvcGVydHkKICBkZWYgbnVtX3RyYWluX2V4YW1wbGVzKHNlbGYpOgogICAgaWYgJ2ltYWdlbmV0MjAxMicgaW4gc2VsZi5kYXRhc2V0OgogICAgICByZXR1cm4gMTI3MTE2NwogICAgaWYgJ2ltYWdlbmV0dGUnID09IHNlbGYuZGF0YXNldDoKICAgICAgcmV0dXJuIDk0NjkKCiAgQHByb3BlcnR5CiAgZGVmIG51bV9ldmFsX2V4YW1wbGVzKHNlbGYpOgogICAgaWYgJ2ltYWdlbmV0MjAxMicgaW4gc2VsZi5kYXRhc2V0OgogICAgICByZXR1cm4gMTAwMDAwCiAgICBpZiAnaW1hZ2VuZXR0ZScgPT0gc2VsZi5kYXRhc2V0OgogICAgICByZXR1cm4gMzkyNQoKICBAcHJvcGVydHkKICBkZWYgbWF4X2FsbG93ZWRfcnVudGltZV9zZWMoc2VsZik6CiAgICBpZiAnaW1hZ2VuZXQyMDEyJyBpbiBzZWxmLmRhdGFzZXQ6CiAgICAgIHJldHVybiAxMTE2MDAgIyAzMSBob3VycwogICAgaWYgJ2ltYWdlbmV0dGUnID09IHNlbGYuZGF0YXNldDoKICAgICAgcmV0dXJuIDM2MDAgIyA2MCBtaW51dGVzCgogIEBwcm9wZXJ0eQogIGRlZiBldmFsX3BlcmlvZF90aW1lX3NlYyhzZWxmKToKICAgIGlmICdpbWFnZW5ldDIwMTInIGluIHNlbGYuZGF0YXNldDoKICAgICAgcmV0dXJuIDYwMDAgIyAxMDAgbWlucwogICAgaWYgJ2ltYWdlbmV0dGUnID09IHNlbGYuZGF0YXNldDoKICAgICAgcmV0dXJuIDMwICMgMzAgc2Vjb25kcwoKICAjIFJldHVybiB3aGV0aGVyIG9yIG5vdCBhIGtleSBpbiBzcGVjLlBhcmFtZXRlckNvbnRhaW5lciBpcyB0aGUgb3V0cHV0IGxheWVyCiAgIyBwYXJhbWV0ZXJzLgogIGRlZiBpc19vdXRwdXRfcGFyYW1zKHNlbGYsIHBhcmFtX2tleTogc3BlYy5QYXJhbWV0ZXJLZXkpIC0+IGJvb2w6CiAgICBwYXNzCgogIGRlZiBfYnVpbGRfZGF0YXNldChzZWxmLAogICAgICBkYXRhX3JuZzogc3BlYy5SYW5kb21TdGF0ZSwKICAgICAgc3BsaXQ6IHN0ciwKICAgICAgZGF0YV9kaXI6IHN0ciwKICAgICAgYmF0Y2hfc2l6ZSk6CiAgICBpZiBiYXRjaF9zaXplICUgamF4LmRldmljZV9jb3VudCgpID4gMDoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignQmF0Y2ggc2l6ZSBtdXN0IGJlIGRpdmlzaWJsZSBieSB0aGUgbnVtYmVyIG9mIGRldmljZXMnKQogICAgZHNfYnVpbGRlciA9IHRmZHMuYnVpbGRlcihzZWxmLmRhdGFzZXQpCiAgICBkc19idWlsZGVyLmRvd25sb2FkX2FuZF9wcmVwYXJlKCkKICAgIGRzID0gaW5wdXRfcGlwZWxpbmUuY3JlYXRlX2lucHV0X2l0ZXIoCiAgICAgIGRzX2J1aWxkZXIsCiAgICAgIGJhdGNoX3NpemUsCiAgICAgIHNlbGYudHJhaW5fbWVhbiwKICAgICAgc2VsZi50cmFpbl9zdGRkZXYsCiAgICAgIHRyYWluPVRydWUsCiAgICAgIGNhY2hlPUZhbHNlKQogICAgcmV0dXJuIGRzCgogIGRlZiBidWlsZF9pbnB1dF9xdWV1ZSgKICAgICAgc2VsZiwKICAgICAgZGF0YV9ybmc6IHNwZWMuUmFuZG9tU3RhdGUsCiAgICAgIHNwbGl0OiBzdHIsCiAgICAgIGRhdGFfZGlyOiBzdHIsCiAgICAgIGJhdGNoX3NpemU6IGludCk6CiAgICByZXR1cm4gaXRlcihzZWxmLl9idWlsZF9kYXRhc2V0KGRhdGFfcm5nLCBzcGxpdCwgZGF0YV9kaXIsIGJhdGNoX3NpemUpKQoKICBkZWYgc3luY19iYXRjaF9zdGF0cyhzZWxmLCBtb2RlbF9zdGF0ZSk6CiAgICAiIiJTeW5jIHRoZSBiYXRjaCBzdGF0aXN0aWNzIGFjcm9zcyByZXBsaWNhcy4iIiIKICAgICMgQW4gYXhpc19uYW1lIGlzIHBhc3NlZCB0byBwbWFwIHdoaWNoIGNhbiB0aGVuIGJlIHVzZWQgYnkgcG1lYW4uCiAgICAjIEluIHRoaXMgY2FzZSBlYWNoIGRldmljZSBoYXMgaXRzIG93biB2ZXJzaW9uIG9mIHRoZSBiYXRjaCBzdGF0aXN0aWNzIGFuZAogICAgIyB3ZSBhdmVyYWdlIHRoZW0uCiAgICBhdmdfZm4gPSBqYXgucG1hcChsYW1iZGEgeDogbGF4LnBtZWFuKHgsICd4JyksICd4JykKICAgIG5ld19tb2RlbF9zdGF0ZSA9IG1vZGVsX3N0YXRlLmNvcHkoewogICAgICAnYmF0Y2hfc3RhdHMnOiBhdmdfZm4obW9kZWxfc3RhdGVbJ2JhdGNoX3N0YXRzJ10pfSkKICAgIHJldHVybiBuZXdfbW9kZWxfc3RhdGUKCiAgQHByb3BlcnR5CiAgZGVmIHBhcmFtX3NoYXBlcyhzZWxmKToKICAgIGlmIHNlbGYuX3BhcmFtX3NoYXBlcyBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdUaGlzIHNob3VsZCBub3QgaGFwcGVuLCB3b3JrbG9hZC5pbml0X21vZGVsX2ZuKCkgJwogICAgICAgICAgICAgICAgICAgICAgICdzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSB3b3JrbG9hZC5wYXJhbV9zaGFwZXMhJykKICAgIHJldHVybiBzZWxmLl9wYXJhbV9zaGFwZXMKCiAgZGVmIGluaXRpYWxpemVkKHNlbGYsIGtleSwgbW9kZWwpOgogICAgaW5wdXRfc2hhcGUgPSAoMSwgMjI0LCAyMjQsIDMpCiAgICB2YXJpYWJsZXMgPSBqYXguaml0KG1vZGVsLmluaXQpKHsncGFyYW1zJzoga2V5fSwgam5wLm9uZXMoaW5wdXRfc2hhcGUsIG1vZGVsLmR0eXBlKSkKICAgIG1vZGVsX3N0YXRlLCBwYXJhbXMgPSB2YXJpYWJsZXMucG9wKCdwYXJhbXMnKQogICAgcmV0dXJuIHBhcmFtcywgbW9kZWxfc3RhdGUKCiAgX0luaXRTdGF0ZSA9IFR1cGxlW3NwZWMuUGFyYW1ldGVyQ29udGFpbmVyLCBzcGVjLk1vZGVsQXV4aWxpYXJ5U3RhdGVdCiAgZGVmIGluaXRfbW9kZWxfZm4oCiAgICAgIHNlbGYsCiAgICAgIHJuZzogc3BlYy5SYW5kb21TdGF0ZSkgLT4gX0luaXRTdGF0ZToKICAgIG1vZGVsX2NscyA9IGdldGF0dHIobW9kZWxzLCBzZWxmLm1vZGVsX25hbWUpCiAgICBtb2RlbCA9IG1vZGVsX2NscyhudW1fY2xhc3Nlcz1zZWxmLm51bV9jbGFzc2VzLAogICAgICAgICAgICAgICAgICAgICAgZHR5cGU9am5wLmZsb2F0MzIpCiAgICBzZWxmLl9tb2RlbCA9IG1vZGVsCiAgICBwYXJhbXMsIG1vZGVsX3N0YXRlID0gc2VsZi5pbml0aWFsaXplZChybmcsIG1vZGVsKQogICAgc2VsZi5fcGFyYW1fc2hhcGVzID0gamF4LnRyZWVfbWFwKAogICAgICBsYW1iZGEgeDogc3BlYy5TaGFwZVR1cGxlKHguc2hhcGUpLAogICAgICBwYXJhbXMpCiAgICBtb2RlbF9zdGF0ZSA9IGpheF91dGlscy5yZXBsaWNhdGUobW9kZWxfc3RhdGUpCiAgICBwYXJhbXMgPSBqYXhfdXRpbHMucmVwbGljYXRlKHBhcmFtcykKICAgIHJldHVybiBwYXJhbXMsIG1vZGVsX3N0YXRlCgogICAgIyBLZWVwIHRoaXMgc2VwYXJhdGUgZnJvbSB0aGUgbG9zcyBmdW5jdGlvbiBpbiBvcmRlciB0byBzdXBwb3J0IG9wdGltaXplcnMKICAjIHRoYXQgdXNlIHRoZSBsb2dpdHMuCiAgZGVmIG91dHB1dF9hY3RpdmF0aW9uX2ZuKAogICAgICBzZWxmLAogICAgICBsb2dpdHNfYmF0Y2g6IHNwZWMuVGVuc29yLAogICAgICBsb3NzX3R5cGU6IHNwZWMuTG9zc1R5cGUpIC0+IHNwZWMuVGVuc29yOgogICAgIiIiUmV0dXJuIHRoZSBmaW5hbCBhY3RpdmF0aW9ucyBvZiB0aGUgbW9kZWwuIiIiCiAgICBwYXNzCgogIEBmdW5jdG9vbHMucGFydGlhbCgKICBqYXgucG1hcCwKICBheGlzX25hbWU9J2JhdGNoJywKICBpbl9heGVzPShOb25lLCAwLCAwLCAwLCBOb25lKSwKICBzdGF0aWNfYnJvYWRjYXN0ZWRfYXJnbnVtcz0oMCwpKQogIGRlZiBldmFsX21vZGVsX2ZuKHNlbGYsIHBhcmFtcywgYmF0Y2gsIHN0YXRlLCBybmcpOgogICAgbG9naXRzLCBfID0gc2VsZi5tb2RlbF9mbigKICAgICAgcGFyYW1zLAogICAgICBiYXRjaCwKICAgICAgc3RhdGUsCiAgICAgIHNwZWMuRm9yd2FyZFBhc3NNb2RlLkVWQUwsCiAgICAgIHJuZywKICAgICAgdXBkYXRlX2JhdGNoX25vcm09RmFsc2UpCiAgICByZXR1cm4gc2VsZi5jb21wdXRlX21ldHJpY3MobG9naXRzLCBiYXRjaFsnbGFiZWwnXSkKCiAgZGVmIG1vZGVsX2ZuKAogICAgICBzZWxmLAogICAgICBwYXJhbXM6IHNwZWMuUGFyYW1ldGVyQ29udGFpbmVyLAogICAgICBpbnB1dF9iYXRjaDogc3BlYy5UZW5zb3IsCiAgICAgIG1vZGVsX3N0YXRlOiBzcGVjLk1vZGVsQXV4aWxpYXJ5U3RhdGUsCiAgICAgIG1vZGU6IHNwZWMuRm9yd2FyZFBhc3NNb2RlLAogICAgICBybmc6IHNwZWMuUmFuZG9tU3RhdGUsCiAgICAgIHVwZGF0ZV9iYXRjaF9ub3JtOiBib29sKSAtPiBUdXBsZVtzcGVjLlRlbnNvciwgc3BlYy5Nb2RlbEF1eGlsaWFyeVN0YXRlXToKICAgIHZhcmlhYmxlcyA9IHsncGFyYW1zJzogcGFyYW1zLCAqKm1vZGVsX3N0YXRlfQogICAgdHJhaW4gPSBtb2RlID09IHNwZWMuRm9yd2FyZFBhc3NNb2RlLlRSQUlOCiAgICBpZiB1cGRhdGVfYmF0Y2hfbm9ybToKICAgICAgbG9naXRzLCBuZXdfbW9kZWxfc3RhdGUgPSBzZWxmLl9tb2RlbC5hcHBseSgKICAgICAgICB2YXJpYWJsZXMsCiAgICAgICAgamF4Lm51bXB5LnNxdWVlemUoaW5wdXRfYmF0Y2hbJ2ltYWdlJ10pLAogICAgICAgIHRyYWluPXRyYWluLAogICAgICAgIG11dGFibGU9WydiYXRjaF9zdGF0cyddKQogICAgICByZXR1cm4gbG9naXRzLCBuZXdfbW9kZWxfc3RhdGUKICAgIGVsc2U6CiAgICAgIGxvZ2l0cyA9IHNlbGYuX21vZGVsLmFwcGx5KAogICAgICAgIHZhcmlhYmxlcywKICAgICAgICBqYXgubnVtcHkuc3F1ZWV6ZShpbnB1dF9iYXRjaFsnaW1hZ2UnXSksCiAgICAgICAgdHJhaW49dHJhaW4sCiAgICAgICAgbXV0YWJsZT1GYWxzZSkKICAgICAgcmV0dXJuIGxvZ2l0cywgTm9uZQoKICAjIERvZXMgTk9UIGFwcGx5IHJlZ3VsYXJpemF0aW9uLCB3aGljaCBpcyBsZWZ0IHRvIHRoZSBzdWJtaXR0ZXIgdG8gZG8gaW4KICAjIGB1cGRhdGVfcGFyYW1zYC4KICBkZWYgbG9zc19mbigKICAgICAgc2VsZiwKICAgICAgbGFiZWxfYmF0Y2g6IHNwZWMuVGVuc29yLAogICAgICBsb2dpdHNfYmF0Y2g6IHNwZWMuVGVuc29yKSAtPiBzcGVjLlRlbnNvcjogICMgZGlmZmVyZW50aWFibGUKICAgICIiIkNyb3NzIEVudHJvcHkgTG9zcyIiIgogICAgb25lX2hvdF9sYWJlbHMgPSBqYXgubm4ub25lX2hvdChsYWJlbF9iYXRjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fY2xhc3Nlcz1zZWxmLm51bV9jbGFzc2VzKQogICAgeGVudHJvcHkgPSBvcHRheC5zb2Z0bWF4X2Nyb3NzX2VudHJvcHkobG9naXRzPWxvZ2l0c19iYXRjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscz1vbmVfaG90X2xhYmVscykKICAgIHJldHVybiBqbnAubWVhbih4ZW50cm9weSkKCiAgZGVmIGNvbXB1dGVfbWV0cmljcyhzZWxmLCBsb2dpdHMsIGxhYmVscyk6CiAgICBsb3NzID0gc2VsZi5sb3NzX2ZuKGxhYmVscywgbG9naXRzKQogICAgYWNjdXJhY3kgPSBqbnAubWVhbihqbnAuYXJnbWF4KGxvZ2l0cywgLTEpID09IGxhYmVscykKICAgIG1ldHJpY3MgPSB7CiAgICAgICdsb3NzJzogbG9zcywKICAgICAgJ2FjY3VyYWN5JzogYWNjdXJhY3ksCiAgICB9CiAgICBtZXRyaWNzID0gbGF4LnBtZWFuKG1ldHJpY3MsIGF4aXNfbmFtZT0nYmF0Y2gnKQogICAgcmV0dXJuIG1ldHJpY3MKPHxmaW1faG9sZXw+CiAgICAgIG1vZGVsX3N0YXRlOiBzcGVjLk1vZGVsQXV4aWxpYXJ5U3RhdGUsCiAgICAgIHJuZzogc3BlYy5SYW5kb21TdGF0ZSwKICAgICAgZGF0YV9kaXI6IHN0cik6CiAgICAiIiJSdW4gYSBmdWxsIGV2YWx1YXRpb24gb2YgdGhlIG1vZGVsLiIiIgogICAgIyBzeW5jIGJhdGNoIHN0YXRpc3RpY3MgYWNyb3NzIHJlcGxpY2FzCiAgICBtb2RlbF9zdGF0ZSA9IHNlbGYuc3luY19iYXRjaF9zdGF0cyhtb2RlbF9zdGF0ZSkKCiAgICBldmFsX21ldHJpY3MgPSBbXQogICAgZGF0YV9ybmcsIG1vZGVsX3JuZyA9IHBybmcuc3BsaXQocm5nLCAyKQogICAgZXZhbF9iYXRjaF9zaXplID0gMjAwCiAgICBudW1fYmF0Y2hlcyA9IHNlbGYubnVtX2V2YWxfZXhhbXBsZXMgLy8gZXZhbF9iYXRjaF9zaXplCiAgICBpZiBzZWxmLl9ldmFsX2RzIGlzIE5vbmU6CiAgICAgIHNlbGYuX2V2YWxfZHMgPSBzZWxmLl9idWlsZF9kYXRhc2V0KAogICAgICAgIGRhdGFfcm5nLCBzcGxpdD0ndGVzdCcsIGJhdGNoX3NpemU9ZXZhbF9iYXRjaF9zaXplLCBkYXRhX2Rpcj1kYXRhX2RpcikKICAgIGV2YWxfaXRlciA9IGl0ZXIoc2VsZi5fZXZhbF9kcykKICAgIHRvdGFsX2FjY3VyYWN5ID0gMC4KICAgIGZvciBpZHggaW4gcmFuZ2UobnVtX2JhdGNoZXMpOgogICAgICBiYXRjaCA9IG5leHQoZXZhbF9pdGVyKQogICAgICBzeW5jZWRfbWV0cmljcyA9IHNlbGYuZXZhbF9tb2RlbF9mbihwYXJhbXMsIGJhdGNoLCBtb2RlbF9zdGF0ZSwgcm5nKQogICAgICBldmFsX21ldHJpY3MuYXBwZW5kKHN5bmNlZF9tZXRyaWNzKQogICAgICB0b3RhbF9hY2N1cmFjeSArPSBqbnAubWVhbihzeW5jZWRfbWV0cmljc1snYWNjdXJhY3knXSkKCiAgICBldmFsX21ldHJpY3MgPSBqYXguZGV2aWNlX2dldChqYXgudHJlZV9tYXAobGFtYmRhIHg6IHhbMF0sIGV2YWxfbWV0cmljcykpCiAgICBldmFsX21ldHJpY3MgPSBqYXgudHJlZV9tdWx0aW1hcChsYW1iZGEgKng6IG5wLnN0YWNrKHgpLCAqZXZhbF9tZXRyaWNzKQogICAgc3VtbWFyeSA9IGpheC50cmVlX21hcChsYW1iZGEgeDogeC5tZWFuKCksIGV2YWxfbWV0cmljcykKICAgIHJldHVybiBzdW1tYXJ5CgoKPHxmaW1fc3VmZml4fD4KCiAgZGVmIGV2YWxfbW9kZWwoCiAgICAgIHNlbGYsCiAgICAgIHBhcmFtczogc3BlYy5QYXJhbWV0ZXJDb250YWluZXIsCjx8ZmltX2VuZHw+"]
["00fc5dd4e8e732f6a80bed3b3f002c414a79958b-1","00fc5dd4e8e732f6a80bed3b3f002c414a79958b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNlY29uZF9oYW5kX3NvbmdzX3dyYXBwZXIgYXMgcwpmcm9tIG5vc2UudG9vbHMgaW1wb3J0IGFzc2VydF9lcXVhbCwgYXNzZXJ0X3JhaXNlcyNAVW5yZXNvbHZlZEltcG9ydAoKPHxmaW1faG9sZXw+CgpkZWYgdGVzdFNoc0xhYmVsKCk6CiAgICB3aXRoIGFzc2VydF9yYWlzZXMoSW52YWxpZExpc3QpOgogICAgICAgIHMuU2hzTGFiZWwuZ2V0X2Zyb21fcmVzb3VyY2VfaWQoMTIzKQogICAgYXNzZXJ0X2VxdWFsKHMuU2hzTGFiZWwuZ2V0X2Zyb21fcmVzb3VyY2VfaWQoMTI1KS5uYW1lLCB1Ikdsb2JlIikKCmRlZiB0ZXN0U2hzUGVyZm9ybWFuY2UoKToKICAgIGFzc2VydF9lcXVhbChzLlNoc1BlcmZvcm1hbmNlLmdldF9mcm9tX3Jlc291cmNlX2lkKDEyMykudGl0bGUsIHUiSSdtIFdhaXRpbmcgZm9yIHRoZSBNYW4iKQoKZGVmIHRlc3RTaHNSZWxlYXNlKCk6CiAgICBhc3NlcnRfZXF1YWwocy5TaHNSZWxlYXNlLmdldF9mcm9tX3Jlc291cmNlX2lkKDEyMykudGl0bGUsIHUiRmlmdGggRGltZW5zaW9uIikKCmRlZiB0ZXN0U2hzV29yaygpOgogICAgYXNzZXJ0X2VxdWFsKHMuU2hzV29yay5nZXRfZnJvbV9yZXNvdXJjZV9pZCgxMDAwKS50aXRsZSwgdSJPaCwgbWUiKQo8fGZpbV9zdWZmaXh8Pgpmcm9tIHZvbHVwdHVvdXMgaW1wb3J0IEludmFsaWRMaXN0CgpkZWYgdGVzdFNoc0FydGlzdCgpOgogICAgYXNzZXJ0X2VxdWFsKHMuU2hzQXJ0aXN0LmdldF9mcm9tX3Jlc291cmNlX2lkKDEwMDApLmNvbW1vbk5hbWUsIHUiTGl0dGxlIFJpY2hhcmQiKQo8fGZpbV9lbmR8Pg=="]
["5ac3c46cce24b711e0ef15485622bad039d57439-1","5ac3c46cce24b711e0ef15485622bad039d57439",{"$cut":{"chars":37992,"head":"PHxmaW1fcHJlZml4fD4KIiIiTW9kdWxlIGZvciBhZHZhbmNlZCBqc29uIG9wZXJhdGlvbnMuIiIiCgppbXBvcnQgY29weQppbXBvcnQganNvbgppbXBvcnQgcmUKCmZyb20gcmJrY2xpLmNvcmUuaGFuZGxlcnMgaW1wb3J0IEFwaVRhcmdldFRvb2xzCgp0cnk6CiAgICBpbXBvcnQgcmJrY2xpLmNvcmUuaGFuZGxlcnMuY2FsbGJhY2sKZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgcHJpbnQoZSkKCmZyb20gcmJrY2xpLmJhc2UuZXNzZW50aWFscyBpbXBvcnQgRG90RGljdCwgUmJrY2xpRXhjZXB0aW9uCmZyb20gcmJrY2xpLmJhc2UuanNvcHMgaW1wb3J0IER5bmFUYWJsZSwgTWFwUmVzcG9uc2VEb2MKZnJvbSByYmtjbGkuYmFzZS5qc29wcyBpbXBvcnQgTWFwU2VsZWN0LCBQcmV0dHlQcmludAppbXBvcnQgcmJrY2xpLmJhc2UuaHRtbF90YWJsZSBhcyBodG1sX3RhYmxlCgoKY2xhc3MgSnNvbkVkaXRvcigpOgogICAgIiIiU2VsZWN0IHNwZWNpZmljIGtleXMgYW5kIG9yIGZpbHRlciB0aGUgdmFsdWVzIGRlc2lyZWQuIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGpzb25fZGF0YSwgZmllbGRzX21vZGVsLCByYmtjbGlfbG9nZ2VyLCByZXE9JycpOgogICAgICAgICIiIkluaXRpYWxpemUganNvbiBzZWxlY3Rpb24uIiIiCiAgICAgICAgIyBJbml0aWFsaXplIHZhciBmb3IgZmllbGRzIHJlcXVlc3RlZC4KICAgICAgICBzZWxmLnJlcSA9IHJlcQogICAgICAgIHNlbGYuZmluYWxfZmllbGRzX29yZGVyID0gW10KICAgICAgICBzZWxmLnJia2NsaV9sb2dnZXIgPSByYmtjbGlfbG9nZ2VyCgogICAgICAgICMgVmFsaWRhdGUganNvbiBkYXRhIHByb3ZpZGVkCiAgICAgICAgc2VsZi5qc29uX2RhdGEgPSBzZWxmLl92YWxpZGF0ZV9qc29uKGpzb25fZGF0YSkKCiAgICAgICAgIyBJZiB0aGVyZSBpcyBhIGRhdGEga2V5IGJ5IGRlZmF1bHQgd2UgZ2V0IGl0cyBjb250ZW50CiAgICAgICAgIyMgRklYIE1pZ2h0IHdhbnQgdG8gYWRkIGEgY29uZmlndXJhdGlvbiB0byBjaG9pY2UgZm9yIGRldGF1bHQKICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuanNvbl9kYXRhLCBkaWN0KToKICAgICAgICAgICAgaWYgJ2RhdGEnIGluIHNlbGYuanNvbl9kYXRhLmtleXMoKToKICAgICAgICAgICAgICAgIHNlbGYuanNvbl9kYXRhID0gc2VsZi5qc29uX2RhdGFbJ2RhdGEnXQoKCiAgICAgICAgc2VsZi5maWVsZHNfbW9kZWwgPSBzZWxmLl92YWxpZGF0ZV9qc29uKGZpZWxkc19tb2RlbCwgdHlwZV89J21vZGVsJykKCiAgICAgICAgIyBDb252ZXJ0IGZpZWxkc19tb2RlbCBpbnRvIG1ldGFkYXRhX21hcCBpZiBwcm92aWRlZC4KICAgICAgICBzZWxmLm1vZGVsX21hcCgpCgogICAgZGVmIF92YWxpZGF0ZV9qc29uKHNlbGYsIGpzb25fZGF0YSwgdHlwZV89J2RhdGEnKToKICAgICAgICAiIiJWYWxpZGF0ZSB0aGF0IGRhdGEgaXMganNvbiwgaWYgbm90IHJldHVybiBlbXB0eS4iIiIKICAgICAgICAjIFRlc3QgcHJvdmlkZWQgZGF0YSB0eXBlLgogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb25fZGF0YSwgZGljdCkgYW5kIG5vdCBpc2luc3RhbmNlKGpzb25fZGF0YSwgbGlzdCk6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIGpzb25fZGF0YSA9IGpzb24ubG9hZHMoanNvbl9kYXRhKQogICAgICAgICAgICBleGNlcHQganNvbi5kZWNvZGVyLkpTT05EZWNvZGVFcnJvcjoKICAgICAgICAgICAgICAgICMgSWYgbm90IGFibGUgdG8ganNvbiBsb2FkIHRoZSBkYXRhLCB0aGVuIGF0dHJpYnV0ZSBlbXB0eS4KICAgICAgICAgICAgICAgIGpzb25fZGF0YSA9IHt9CgogICAgICAgICAgICAjIElmIGRhdGEgaXMgZW1wdHkgdGhlbiByYWlzZSBleGNlcHRpb24uCiAgICAgICAgICAgIGlmIChqc29uX2RhdGEgPT0ge30gb3IganNvbl9kYXRhID09IFtdIGFuZCB0eXBlXyAhPSAnbW9kZWwnKToKICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignSnNvbiBkYXRhIGNhbiBub3QgYmUgZW1wdHknKQoKICAgICAgICByZXR1cm4ganNvbl9kYXRhCgogICAgZGVmIG1vZGVsX21hcChzZWxmKToKICAgICAgICAiIiJHZW5lcmF0ZSBtYXAgZnJvbSBqc29uIG1vZGVsIHRvIGFsbG93IHZlcmlmaWNhdGlvbi4iIiIKICAgICAgICAjIEdldCBhIG1hcCBmcm9tIHRoZSBqc29uIHByb3ZpZGVkLgogICAgICAgIHRhYmxlX29yZGVyID0gW10KICAgICAgICBpZiBzZWxmLmZpZWxkc19tb2RlbCA9PSB7fSBvciBzZWxmLmZpZWxkc19tb2RlbCA9PSBbXToKICAgICAgICAgICAganNvbl9pdGVyID0gTWFwU2VsZWN0KGRlZmluaXRpb25zPVtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbl9kYXRhPXNlbGYuanNvbl9kYXRhKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHR3b19odW5kcmVkID0gc2VsZi5maWVsZHNfbW9kZWxbJ2RvYyddWydyZXNwb25zZXMnXVsnMjAwJ10KICAgICAgICAgICAgc2NoZW1hID0gdHdvX2h1bmRyZWRbJ3NjaGVtYSddCiAgICAgICAgICAgIGlmICd0YWJsZV9vcmRlcicgaW4gdHdvX2h1bmRyZWQua2V5cygpOgogICAgICAgICAgICAgICAgdGFibGVfb3JkZXIgPSB0d29faHVuZHJlZFsndGFibGVfb3JkZXInXQoKICAgICAgICAgICAgaWYgc2NoZW1hID09IHt9OgogICAgICAgICAgICAgICAganNvbl9pdGVyID0gTWFwU2VsZWN0KGRlZmluaXRpb25zPVtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb25fZGF0YT1zZWxmLmpzb25fZGF0YSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGpzb25faXRlciA9IE1hcFJlc3BvbnNlRG9jKGpzb25fZGF0YT1zZWxmLmZpZWxkc19tb2RlbCkKCiAgICAgICAgc2VsZi5qc29uX21hcCA9IGpzb25faXRlci5tYXBpdCgpCiAgICAgICAgc2VsZi5qc29uX21hcC50YWJsZV9vcmRlciA9IHRhYmxlX29yZGVyCgogICAgICAgIHJldHVybiBzZWxmLmpzb25fbWFwCgogICAgZGVmIG5ld19tb2RlbChzZWxmLCBqc29uX2RhdGEsIGZpZWxkc19tb2RlbD1bXSk6CiAgICAgICAgIiIiT3ZlcndyaXRlIG1vZGVsIGZvciB2ZXJpZmljYXRpb24uIiIiCiAgICAgICAgc2VsZi5qc29uX2RhdGEgPSBqc29uX2Rh"}}]
["41fd9969d652d61a3a63ce9f1e013e9b916d0057-1","41fd9969d652d61a3a63ce9f1e013e9b916d0057","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdApmcm9tIGZhc3RhcGkgaW1wb3J0IFJlcXVlc3QsIFJlc3BvbnNlCmZyb20gc3RhcmxldHRlLnRlc3RjbGllbnQgaW1wb3J0IFRlc3RDbGllbnQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZnJvbSBxdWV0ei5hdXRoZW50aWNhdGlvbi5iYXNlIGltcG9ydCBCYXNlQXV0aGVudGljYXRpb25IYW5kbGVycywgQmFzZUF1dGhlbnRpY2F0b3IKCgo8fGZpbV9lbmR8Pg=="]
["6bb247d1158dcae42adec636a287c9842ea7f69e-2","6bb247d1158dcae42adec636a287c9842ea7f69e",{"$cut":{"chars":17848,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoKIiIiClRoZSBjbGFzcyBjbGFzcyBFeG9BY3Rpb25zIG1hbmFnZXMgYWN0aW9ucyBsaWtlIGRvd25sb2FkaW5nCmEgZmlsZSBvciBwYWdlIGNvbnRlbnQuCgpTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9SdWVkaWdlclZvaWd0L2V4b3NrZWxldG9uCihjKSAyMDE5LTIwMjEgUsO8ZGlnZXIgVm9pZ3Q6ClJlbGVhc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSAyLjAKIiIiCiMgc3RhbmRhcmQgbGlicmFyeToKaW1wb3J0IGxvZ2dpbmcKZnJvbSB0eXBpbmcgaW1wb3J0IEZpbmFsLCBMaXRlcmFsCgppbXBvcnQgcHlteXNxbAppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IHVybGxpYjMgICMgdHlwZTogaWdub3JlCmltcG9ydCB1c2VycHJvdmlkZWQKCmZyb20gZXhvc2tlbGV0b24gaW1wb3J0IGRhdGFiYXNlX2Nvbm5lY3Rpb24KZnJvbSBleG9za2VsZXRvbiBpbXBvcnQgZXJyb3JfbWFuYWdlcgpmcm9tIGV4b3NrZWxldG9uIGltcG9ydCBleG9fdXJsCmZyb20gZXhvc2tlbGV0b24gaW1wb3J0IGZpbGVfbWFuYWdlcgpmcm9tIGV4b3NrZWxldG9uIGltcG9ydCBoZWxwZXJzCmZyb20gZXhvc2tlbGV0b24gaW1wb3J0IHJlbW90ZV9jb250cm9sX2Nocm9tZQpmcm9tIGV4b3NrZWxldG9uIGltcG9ydCBzdGF0aXN0aWNzX21hbmFnZXIKZnJvbSBleG9za2VsZXRvbiBpbXBvcnQgdGltZV9tYW5hZ2VyCgoKY2xhc3MgR2V0T2JqZWN0QmFzZUNsYXNzOgogICAgIkJhc2UgY2xhc3MgdG8gZ2V0IG9iamVjdHMuIgogICAgIyBweWxpbnQ6IGRpc2FibGU9dG9vLW1hbnktaW5zdGFuY2UtYXR0cmlidXRlcwogICAgIyBweWxpbnQ6IGRpc2FibGU9dG9vLW1hbnktYXJndW1lbnRzCgogICAgIyBIVFRQIHJlc3BvbnNlIGNvZGVzIGhhdmUgdG8gYmUgaGFuZGVsZWQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHdoZXRoZXIKICAgICMgdGhleSBzaWduYWwgYSBwZXJtYW5lbnQgb3IgdGVtcG9yYXJ5IGVycm9yLiBUaGUgZm9sbG93aW5nIGxpc3RzIGluY2x1ZGUKICAgICMgc29tZSBub24tc3RhbmRhcmQgY29kZXMuIFNlZToKICAgICMgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGlzdF9vZl9IVFRQX3N0YXR1c19jb2RlcwogICAgSFRUUF9QRVJNQU5FTlRfRVJST1JTOiBGaW5hbCA9ICg0MDAsIDQwMSwgNDAyLCA0MDMsIDQwNCwgNDA1LCA0MDYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwNywgNDEwLCA0NTEsIDUwMSkKICAgICMgNDI5IChSYXRlIExpbWl0KSBpcyBoYW5kZWxlZCBzZXBhcmF0ZWx5OgogICAgSFRUUF9URU1QX0VSUk9SUzogRmluYWwgPSAoNDA4LCA1MDAsIDUwMiwgNTAzLCA1MDQsIDUwOSwgNTI5LCA1OTgpCgogICAgZGVmIF9faW5pdF9fKAogICAgICAgICAgICBzZWxmLAogICAgICAgICAgICBvYmplY3RzOiBkaWN0LAogICAgICAgICAgICBxdWV1ZV9pZDogc3RyLAogICAgICAgICAgICB1cmw6IGV4b191cmwuRXhvVXJsLAogICAgICAgICAgICBwcmV0dGlmeV9odG1sOiBib29sID0gRmFsc2UpOgogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHF1ZXVlX2lkLCBzdHIpOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdUaGUgcXVldWVfaWQgbXVzdCBiZSBhIHN0cmluZy4nKQogICAgICAgIGlmIG5vdCB1cmw6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ01pc3NpbmcgcGFyYW1ldGVyIHVybCcpCiAgICAgICAgc2VsZi5kYl9jb25uZWN0aW9uID0gb2JqZWN0c1snZGJfY29ubmVjdGlvbiddCiAgICAgICAgc2VsZi5jdXI6IHB5bXlzcWwuY3Vyc29ycy5DdXJzb3IgPSBzZWxmLmRiX2Nvbm5lY3Rpb24uZ2V0X2N1cnNvcigpCiAgICAgICAgc2VsZi5zdGF0cyA9IG9iamVjdHNbJ3N0YXRzX21hbmFnZXJfb2JqZWN0J10KICAgICAgICBzZWxmLmZpbGUgPSBvYmplY3RzWydmaWxlX21hbmFnZXJfb2JqZWN0J10KICAgICAgICBzZWxmLnRpbWUgPSBvYmplY3RzWyd0aW1lX21hbmFnZXJfb2JqZWN0J10KICAgICAgICBzZWxmLmVycm9yaGFuZGxpbmcgPSBvYmplY3RzWydjcmF3bGluZ19lcnJvcl9tYW5hZ2VyX29iamVjdCddCiAgICAgICAgc2VsZi51c2VyX2FnZW50ID0gb2JqZWN0c1sndXNlcl9hZ2VudCddCiAgICAgICAgc2VsZi5jb25uZWN0aW9uX3RpbWVvdXQgPSBvYmplY3RzWydjb25uZWN0aW9uX3RpbWVvdXQnXQogICAgICAgIHNlbGYucXVldWVfaWQgPSBxdWV1ZV9pZAogICAgICAgIHNlbGYudXJsID0gdXJsCiAgICAgICAgc2VsZi5wcmV0dGlmeV9odG1sID0gcHJldHRpZnlfaHRtbAoKICAgICAgICBzZWxmLm1pbWVfdHlwZTogc3RyID0gJycKCiAgICAgICAgc2VsZi5nZXRfdGhlX29iamVjdCgpCgogICAgZGVmIGdldF90aGVfb2JqZWN0KHNlbGYpIC0+IE5vbmU6CiAgICAgICAgIkdldCB0aGUgb2JqZWN0IGFuZCBoYW5kbGUgZXhjZXB0aW9ucyB0aGF0IG1pZ2h0IG9jY3VyIgogICAgICAgIHRyeToKICAgICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmhhbmRsZV9hY3Rpb24oKQogICAgICAgICAgICBzdGF0dXNfY29kZSA9IHJlc3BvbnNlLnN0YXR1c19jb2RlCgogICAgICAgICAgICBpZiBzdGF0dXNfY29kZSA9PSAyMDA6CiAgICAgICAgICAgICAgICBjb250ZW50X3R5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykKICAgICAgICAgICAgICAgIGlmIGNvbnRlbnRfdHlwZToKICAgICAgICAgICAgICAgICAgICBzZWxmLm1pbWVfdHlwZSA9IChjb250ZW50X3R5cGUpLnNwbGl0KCc7JylbMF0KICAgICAgICAgICAgICAgIHNlbGYuc3RvcmVfcmVzdWx0KHJlc3BvbnNlKQogICAgICAgICAgICBlbGlmIHN0YXR1c19jb2RlIGluIHNlbGYuSFRUUF9QRVJNQU5FTlRfRVJST1JTOgogICAgICAgICAgICAgICAgc2VsZi5lcnJvcmhhbmRsaW5nLm1hcmtfcGVybWFuZW50X2Vycm9yKHNlbGYucXVldWVfaWQsIHN0YXR1c19jb2RlKQogICAgICAgICAgICAgICAgc2VsZi5zdGF0cy5sb2dfcGVybWFuZW50X2Vycm9yKHNlbGYudXJsKQogICAgICAgICAgICBlbGlmIHN0YXR1c19jb2RlID09IDQyOToKICAgICAgICAgICAg"}}]
["5ab760d1eb3af67e4d2aff003b70258d93b0a229-1","5ab760d1eb3af67e4d2aff003b70258d93b0a229","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCmltcG9ydCB0b3JjaC5ubiBhcyBubgpmcm9tIHRyYW5zZm9ybWVyIGltcG9ydCBFbmNvZGVyLCBFbmNvZGVyTGF5ZXIsIE11bHRpSGVhZGVkQXR0ZW50aW9uCgo8fGZpbV9ob2xlfD4KICAgIGxheWVyID0gRW5jb2RlckxheWVyKDQsIE11bHRpSGVhZGVkQXR0ZW50aW9uKDIsIDQpLCBubi5MaW5lYXIoNCw0KSwgMCkKICAgIGUgPSBFbmNvZGVyKGxheWVyLCA2KQoKICAgIGlucHV0ID0gdG9yY2guVGVuc29yKFtbLjEsLTEsMiwyXSwgWzAsMSwtMSwwXV0pLnVuc3F1ZWV6ZSgwKQogICAgZXhwZWN0ZWQgPSB0b3JjaC5UZW5zb3IoW1stMC45MTc2LCAxLjM3ODksIDAuMDQzNSwgLTAuNTA0N10sIFswLjkzMTMsIDAuNjgwNSwgLTEuMjM2MywgLTAuMzc1Nl1dKS51bnNxdWVlemUoMCkKCiAgICBvdXRwdXQgPSBlKGlucHV0LCBtYXNrPU5vbmUpCiAgICBhc3NlcnQgZXhwZWN0ZWQuYWxsY2xvc2Uob3V0cHV0LCBhdG9sPTAuMDAwMSwgcnRvbD0wLjAwMDEpCjx8ZmltX3N1ZmZpeHw+CiMgVGhpcyB0ZXN0IHNpbXBseSBkZW1vbnN0cmF0ZXMgaG93IHRvIHVzZSB0aGlzIGxheWVyLgpkZWYgdGVzdF9lbmNvZGVyKCk6CiAgICB0b3JjaC5tYW51YWxfc2VlZCgwKQoKPHxmaW1fZW5kfD4="]
["51d7f55c1cfbc08cdf36733c7cad7089a221dd73-4","51d7f55c1cfbc08cdf36733c7cad7089a221dd73","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAxMSBHb29nbGUgSW5jLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KZnJvbSAuIGltcG9ydCAqCgpfYnJlYWtwb2ludF9pZF9jb3VudGVyID0gMQoKY2xhc3MgQnJlYWtwb2ludChvYmplY3QpOgogIGRlZiBfX2luaXRfXyhzZWxmLGxvY2F0aW9uKToKICAgIGdsb2JhbCBfYnJlYWtwb2ludF9pZF9jb3VudGVyCiAgICBzZWxmLl9pZCA9IF9icmVha3BvaW50X2lkX2NvdW50ZXIKICAgIF9icmVha3BvaW50X2lkX2NvdW50ZXIgKz0gMQoKICAgICMgc2V0IHVwIHJlYXNvbmFibGUgdmFsdWVzCiAgICBzZWxmLl9vbl9oaXQgPSBFdmVudCgpCiAgICBzZWxmLl9kZWJ1Z2dlciA9IE5vbmUKICAgIHNlbGYuX2xvY2F0aW9uID0gbG9jYXRpb24gIyBtaWdodCBiZSBudWxsCiAgICBzZWxmLl9lbmFibGVkID0gVHJ1ZSAjIHdoZXRoZXIgdGhlIGJyZWFrcG9pbnQgaXMgZW5hYmxlZAogICAgc2VsZi5fYmFja2VuZF9icmVha3BvaW50cyA9IHt9ICMgdGhlIGJhY2tlbmRzIG9uIHdoaWNoIHRoaXMgYnJlYWtwb2ludCBpcyBjdXJyZW50bHkgZXN0YWJsaXNoZWQKICAgIHNlbGYuX2FjdHVhbF9sb2NhdGlvbl9saXN0ID0gTm9uZSAjIHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgZGVidWdnZXIgYWN0dWFsbHkgcGxhY2VkIHRoZSBia3B0CiAgICBzZWxmLl9lcnJvciA9ICIiCgogICAgc2VsZi5fdXBkYXRlKCkKCiAgQHByb3BlcnR5CiAgZGVmIGlkKHNlbGYpOgogICAgIiIiSUQgb2YgdGhlIGJyZWFrcG9pbnQuIiIiCiAgICByZXR1cm4gc2VsZi5faWQKCiAgQHByb3BlcnR5CiAgZGVmIGxvY2F0aW9uKHNlbGYpOgogICAgIiIiU2V0cyB0aGUgbG9jYXRpb24gb2YgdGhlIGJyZWFrcG9pbnQuIE5vdGUsIHRoaXMgaXMgdGhlIHJlcXVlc3RlZCBsb2NhdGlvbiwgbm90IHRoZSBhY3R1YWwgbG9jYXRpb24uIiIiCiAgICByZXR1cm4gc2VsZi5fbG9jYXRpb24KICBAbG9jYXRpb24uc2V0dGVyCiAgZGVmIGxvY2F0aW9uKHNlbGYsbG9jYXRpb24pOgogICAgIiIiU2V0cyB0aGUgbG9jYXRpb24gb2YgdGhlIGJyZWFrcG9pbnQuIiIiCiAgICBzZWxmLl9sb2NhdGlvbiA9IGxvY2F0aW9uCiAgICBzZWxmLl9lbmFibGVkID0gVHJ1ZSAjIHR1cm4gdGhlIGJyZWFrcG9pbnQgIm9uIiBpZiBpdCB3YXMgb2ZmLi4uLgogICAgaWYgc2VsZi5fZGVidWdnZXI6CiAgICAgIHNlbGYuX2RlYnVnZ2VyLl9vbl9icmVha3BvaW50X25lZWRzX3VwZGF0ZShzZWxmKQoKCiAgQHByb3BlcnR5CiAgZGVmIGVuYWJsZWQoc2VsZik6CiAgICAiIiJFbmFibGVkIHN0YXRlIG9mIHRoZSBicmVha3BvaW50IiIiCiAgICByZXR1cm4gc2VsZi5fZW5hYmxlZAogIEBlbmFibGVkLnNldHRlcgogIGRlZiBlbmFibGVkKHNlbGYsZW4pOgogICAgc2VsZi5fZW5hYmxlZCA9IGVuCiAgICBpZiBzZWxmLnZhbGlkIGFuZCBzZWxmLl9lbmFibGVkOgogICAgICBmb3IgYmFja2VuZCBpbiBzZWxmLl9iYWNrZW5kX2JyZWFrcG9pbnRzOgogICAgICAgIGJwID0gc2VsZi5fYmFja2VuZF9icmVha3BvaW50c1tiYWNrZW5kXQogICAgICAgIGJhY2tlbmQuZW5hYmxlX2JyZWFrcG9pbnQoc2VsZixicC5pZCkKICAgIGVsaWYgc2VsZi52YWxpZCBhbmQgbm90IHNlbGYuX2VuYWJsZWQ6CiAgICAgIGZvciBiYWNrZW5kIGluIHNlbGYuX2JhY2tlbmRfYnJlYWtwb2ludHM6CiAgICAgICAgYnAgPSBzZWxmLl9iYWNrZW5kX2JyZWFrcG9pbnRzW2JhY2tlbmRdCiAgICAgICAgYmFja2VuZC5kaXNhYmxlX2JyZWFrcG9pbnQoc2VsZixicC5pZCkKCiAgQHByb3BlcnR5CiAgZGVmIGFsbF92YWxpZChzZWxmKToKICAgICIiIldoZXRoZXIgdGhlIGJyZWFrcG9pbnQgaXMgdmFsaWQuIElmIGludmFsaWQsIGNoZWNrIGVycm9yIGZvciB3aHkuIiIiCiAgICB2YWxpZCA9IFRydWUKICAgIGZvciBiYWNrZW5kIGluIHNlbGYuX2JhY2tlbmRfYnJlYWtwb2ludHM6CiAgICAgIGJwID0gc2VsZi5fYmFja2VuZF9icmVha3BvaW50c1tiYWNrZW5kXQogICAgICB2YWxpZCAmPSBicC52YWxpZAogICAgcmV0dXJuIHZhbGlkCgogIEBwcm9wZXJ0eQogIGRlZiBzb21lX3ZhbGlkKHNlbGYpOgogICAgIiIiV2hldGhlciB0aGUgYnJlYWtwb2ludCBpcyB2YWxpZC4gSWYgaW52YWxpZCwgY2hlY2sgZXJyb3IgZm9yIHdoeS4iIiIKICAgIHNvbWVfdmFsaWQgPSBGYWxzZQogICAgZm9yIGJhY2tlbmQgaW4gc2VsZi5fYmFja2VuZF9icmVha3BvaW50czoKICAgICAgYnAgPSBzZWxmLl9iYWNrZW5kX2JyZWFrcG9pbnRzW2JhY2tlbmRdCiAgICAgIHNvbWVfdmFsaWQgfD0gYnAudmFsaWQKICAgIHJldHVybiBzb21lX3ZhbGlkCgogIEBwcm9wZXJ0eQogIGRlZiBlcnJvcihzZWxmKToKPHxmaW1faG9sZXw+CiAgICAgIGlmIGJwLnZhbGlkPT1GYWxzZToKICAgICAgICBlcnJvcnMuYWRkKGJwLmVycm9yKQogICAgcmV0dXJuICJcbiIuam9pbihsaXN0KGVycm9ycykpCgogICIiIkFjdHVhbCBsb2NhdGlvbiBsaXN0IiIiCiAgQHByb3BlcnR5CiAgZGVmIGFjdHVhbF9sb2NhdGlvbl9saXN0KHNlbGYpOgogICAgbG9jcyA9IHNldCgpCiAgICBmb3IgYmFja2VuZCBpbiBzZWxmLl9iYWNrZW5kX2JyZWFrcG9pbnRzOgogICAgICBicCA9IHNlbGYuX2JhY2tlbmRfYnJlYWtwb2ludHNbYmFja2VuZF0KICAgICAgaWYgYnAudmFsaWQgPT0gRmFsc2U6CiAgICAgICAgY29udGludWUKICAgICAgZm9yIGwgaW4gYnAubG9jYXRpb25fbGlzdDoKICAgICAgICBsb2NzLmFkZChsKQogICAgcmV0dXJuIGxpc3QobG9jcykKCiAgQHByb3BlcnR5CiAgZGVmIG9uX2hpdChzZWxmKToKICAgICIiIkhpdCB1dGlsLkV2ZW50IGZpcmVkIHdoZW4gdGhlIGRlYnVnZ2VyIHN0b3BzIG9uIHRoaXMgYnJlYWtwb2ludC4iIiIKICAgIHJldHVybiBzZWxmLl9vbl9oaXQKCiAgIyBJbm5hcmRzCiAgZGVmIF9nZXRfZGVidWdnZXIoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fZGVidWdnZXIKICBkZWYgX3NldF9kZWJ1Z2dlcihzZWxmLHZhbCk6CiAgICBpZiBzZWxmLl9kZWJ1Z2dlciBhbmQgdmFsOgogICAgICByYWlzZSBFeGNlcHRpb24oIkNhbid0IHNldCBkZWJ1Z2dlci4gQWxyZWFkeSBib3VuZCB0byBvbmUhIFlvdSBwcm9iYWJseSBhZGRlZCB0aGlzIGJyZWFrcG9pbnQgYWxyZWFkeS4iKQogICAgc2VsZi5fZGVsZXRlX2N1cl9icmVha3BvaW50X2lmX25lZWRlZCgpCiAgICBzZWxmLl9kZWJ1Z2dlciA9IHZhbAogICAgc2VsZi5fdXBkYXRlKCkKCiAgZGVmIF9kZWxldGVfY3VyX2JyZWFrcG9pbnRfaWZfbmVlZGVkKHNlbGYpOgogICAgZm9yIGJhY2tlbmQgaW4gc2VsZi5fYmFja2VuZF9icmVha3BvaW50czoKICAgICAgYnAgPSBzZWxmLl9iYWNrZW5kX2JyZWFrcG9pbnRzW2JhY2tlbmRdCiAgICAgIGlmIGJwLnZhbGlkOgogICAgICAgIGJhY2tlbmQuZGVsZXRlX2JyZWFrcG9pbnQoYnAuaWQpCiAgICAgIHNlbGYuX3ZhbGlkID0gRmFsc2UKICAgIHNlbGYuX2JhY2tlbmRfYnJlYWtwb2ludHMuY2xlYXIoKQoKICBkZWYgX3VwZGF0ZShzZWxmKToKICAgICMgZWFybHkgb3V0IGlmIHdlJ3JlIG5vdCBhdHRhY2hlZAogICAgaWYgbm90IHNlbGYuX2RlYnVnZ2VyOgogICAgICByZXR1cm4KCiAgICAjIGRlbGV0ZSBvbGQgYnJlYWtwb2ludAogICAgc2VsZi5fZGVsZXRlX2N1cl9icmVha3BvaW50X2lmX25lZWRlZCgpCgogICAgIyBpc3N1ZSBicmVhayBjb21tYW5kCiAgICBsb2NhdGlvbiA9IHNlbGYuX2xvY2F0aW9uCiAgICBmb3IgYmFja2VuZCBpbiBzZWxmLl9kZWJ1Z2dlci5fYmFja2VuZHM6CiAgICAgIHRyeToKICAgICAgICByZXNwID0gYmFja2VuZC5uZXdfYnJlYWtwb2ludChsb2NhdGlvbiwgbGFtYmRhOiBzZWxmLl9kZWJ1Z2dlci5fb25fYmFja2VuZF9icmVha3BvaW50X2hpdChiYWNrZW5kLHNlbGYpKQogICAgICAgIGJwID0gRHluT2JqZWN0KCkKICAgICAgICBicC5pZCA9IHJlc3AuaWQKICAgICAgICBicC52YWxpZCA9IFRydWUKICAgICAgICBicC5sb2NhdGlvbl9saXN0ID0gcmVzcC5sb2NhdGlvbl9saXN0CiAgICAgICAgaWYgc2VsZi5fZW5hYmxlZCA9PSBGYWxzZTogIyB0aGV5IGdldCBjcmVhdGVkICdlbmFibGVkJwogICAgICAgICAgYmFja2VuZC5kaXNhYmxlX2JyZWFrcG9pbnQoc2VsZixicC5pZCkKICAgICAgICBzZWxmLl9iYWNrZW5kX2JyZWFrcG9pbnRzW2JhY2tlbmRdID0gYnAKCiAgICAgIGV4Y2VwdCBEZWJ1Z2dlckV4Y2VwdGlvbixlOgogICAgICAgIGxvZzEoIkVycm9yIGNyZWF0aW5nIGJyZWFrcG9pbnQgJXMgb24gJXM6ICVzIiwgbG9jYXRpb24sIGJhY2tlbmQsIGUubWVzc2FnZSkKICAgICAgICBicCA9IER5bk9iamVjdCgpCiAgICAgICAgYnAudmFsaWQgPSBGYWxzZQogICAgICAgIGJwLmVycm9yID0gZS5tZXNzYWdlCiAgICAgICAgc2VsZi5fYmFja2VuZF9icmVha3BvaW50c1tiYWNrZW5kXSA9IGJwCgogICAgIyBsZXQgZGVidWdnZXIga25vdyBvZiBjaGFuZ2UKICAgIGlmIHNlbGYuX2RlYnVnZ2VyOgogICAgICBzZWxmLl9kZWJ1Z2dlci5fb25fYnJlYWtwb2ludF9jaGFuZ2VkKHNlbGYpCjx8ZmltX3N1ZmZpeHw+CiAgICAiIiJHZXQgYW55IGVycm9ycyBjcmVhdGluZyB0aGUgYnJlYWtwb2ludCIiIgogICAgZXJyb3JzID0gc2V0KCkKICAgIGZvciBiYWNrZW5kIGluIHNlbGYuX2JhY2tlbmRfYnJlYWtwb2ludHM6CiAgICAgIGJwID0gc2VsZi5fYmFja2VuZF9icmVha3BvaW50c1tiYWNrZW5kXQo8fGZpbV9lbmR8Pg=="]
["cfbe18598089fcb828bfb044a7284ed1ab8bd870-3","cfbe18598089fcb828bfb044a7284ed1ab8bd870","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIFNlbmQoZGF0YSk6CiAgICBwcmludChkYXRhKQo8fGZpbV9lbmR8Pg=="]
["41c0b7ddfde80e26a97af0462191aeaf00870845-5","41c0b7ddfde80e26a97af0462191aeaf00870845","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzdHJpbmcKaW1wb3J0IHN1YnByb2Nlc3MKCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmZyb20gc3BhbmRleCBpbXBvcnQgVGFibGVMb2FkZXIsIFRhYmxlRnJhbWUKZnJvbSBzcGFuZGV4LmlvIGltcG9ydCBkZl90b19kYgppbXBvcnQgdXJiYW5zaW0uc2ltLnNpbXVsYXRpb24gYXMgc2ltCgppbXBvcnQgdXRpbHMKCgpsb2FkZXIgPSBUYWJsZUxvYWRlcigpCnN0YWdpbmcgPSBsb2FkZXIudGFibGVzLnN0YWdpbmcKCgojIyBBc3N1bXB0aW9ucy4KCgojIFVzZSBjb2RlcyB3ZXJlIGNsYXNzaWZpZWQgbWFudWFsbHkgYmVjYXVzZSB0aGUgYXNzZXNzb3IgY2xhc3NpZmljYXRpb25zCiMgYXJlIG1lYW50IGZvciBwcm9wZXJ0eSB0YXggcHVycG9zZXMuIFRoZXNlIGNsYXNzaWZpY2F0aW9ucyBzaG91bGQgYmUKIyByZXZpZXdlZCBhbmQgcmV2aXNlZC4KcmVzX2NvZGVzID0geydzaW5nbGUnOiBbJzAxJywgJzUxJywgJzUyJywgJzUzJ10sCiAgICAgICAgICAgICAnbXVsdGknOiBbc3RyaW5nLnpmaWxsKGksIDIpIGZvciBpIGluCiAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UoMiwgNikgKyByYW5nZSg3LCAxMCkgKyByYW5nZSg4OSwgOTkpXSwKICAgICAgICAgICAgICdtaXhlZCc6IFtdfQpleGVtcHRfY29kZXMgPSBbXQoKCiMjIFJlZ2lzdGVyIGlucHV0IHRhYmxlcy4KCgp0ZiA9IFRhYmxlRnJhbWUoc3RhZ2luZy5wYXJjZWxzX3NtdCwgaW5kZXhfY29sPSdhcG4nKQpzaW0uYWRkX3RhYmxlKCdwYXJjZWxzX2luJywgdGYsIGNvcHlfY29sPUZhbHNlKQoKCkBzaW0udGFibGUoY2FjaGU9VHJ1ZSkKZGVmIHJvbGwoKToKICAgIG1kYiA9IGxvYWRlci5nZXRfcGF0aCgKICAgICAgICAnYnVpbHQvcGFyY2VsLzIwMTAvc210L1Byb3BlcnR5IENoYXJhY3RlcmlzdGljcy9BU1NFU1NPUl9ST0xMLm1kYicKICAgICkKICAgIGNzdiA9IG9zLnBhdGguc3BsaXRleHQobWRiKVswXSArICcuY3N2JwoKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhjc3YpOgogICAgICAgIHdpdGggb3Blbihjc3YsICd3JykgYXMgZjoKICAgICAgICAgICAgIyBFeHBvcnQgb2YgTVMgQWNjZXNzIGRhdGFiYXNlIHJlcXVpcmVzIG1kYnRvb2xzLgogICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWydtZGItZXhwb3J0JywgbWRiLCAnMjAwOV9ST0xMJ10sIHN0ZG91dD1mKQoKICAgIGRmID0gcGQucmVhZF9jc3YoY3N2LCBkdHlwZT17J0FQTic6IHN0cn0sIGxvd19tZW1vcnk9RmFsc2UpCgogICAgIyBEZWR1cGxpY2F0ZSBieSB0YWtpbmcgdGhlIGxhc3QgcmVjb3JkLCBzb3J0ZWQgYnkgc2VxdWVuY2UgSUQgKCJTRVEiKS4KICAgICMgQWx0ZXJuYXRpdmVseSwgY291bGQgc29ydCBieSBkYXRlICgiRE9SIikgZm9yIHNpbWlsYXIgcmVzdWx0cy4KICAgIGRmLnNvcnQoJ1NFUScsIGFzY2VuZGluZz1UcnVlLCBpbnBsYWNlPVRydWUpCiAgICBkZi5kcm9wX2R1cGxpY2F0ZXMoJ0FQTicsIHRha2VfbGFzdD1UcnVlLCBpbnBsYWNlPVRydWUpCgogICAgZGYuc2V0X2luZGV4KCdBUE4nLCBpbnBsYWNlPVRydWUpCiAgICBhc3NlcnQgZGYuaW5kZXguaXNfdW5pcXVlCiAgICBhc3NlcnQgbm90IGRmLmluZGV4Lmhhc25hbnMoKQogICAgcmV0dXJuIGRmCgoKQHNpbS50YWJsZShjYWNoZT1UcnVlKQpkZWYgc2l0dXMoKToKICAgIGNzdiA9IGxvYWRlci5nZXRfcGF0aCgKICAgICAgICAnYnVpbHQvcGFyY2VsLzIwMTAvc210L1Byb3BlcnR5IENoYXJhY3RlcmlzdGljcy9TSVRVU19TTlBTSFQuY3N2JwogICAgKQogICAgZGYgPSBwZC5yZWFkX2Nzdihjc3YsIGR0eXBlPXsnQVBOJzogc3RyfSwgbG93X21lbW9yeT1GYWxzZSkKICAgIGRmID0gZGZbZGYuQVBOLm5vdG51bGwoKV0KICAgIGRmLnNldF9pbmRleCgnQVBOJywgaW5wbGFjZT1UcnVlKQogICAgYXNzZXJ0IGRmLmluZGV4LmlzX3VuaXF1ZQogICAgYXNzZXJ0IG5vdCBkZi5pbmRleC5oYXNuYW5zKCkKICAgIHJldHVybiBkZgoKCiMjIFJlZ2lzdGVyIG91dHB1dCB0YWJsZS4KCgpAc2ltLnRhYmxlKGNhY2hlPVRydWUpCmRlZiBwYXJjZWxzX291dChwYXJjZWxzX2luKToKICAgIGluZGV4ID0gcGQuU2VyaWVzKHBhcmNlbHNfaW4uaW5kZXgpLmRyb3BuYSgpLnVuaXF1ZSgpCiAgICBkZiA9IHBkLkRhdGFGcmFtZShpbmRleD1pbmRleCkKICAgIGRmLmluZGV4Lm5hbWUgPSAnYXBuJwogICAgcmV0dXJuIGRmCgoKIyMgUmVnaXN0ZXIgb3V0cHV0IGNvbHVtbnMuCgoKb3V0ID0gc2ltLmNvbHVtbigncGFyY2Vsc19vdXQnLCBjYWNoZT1UcnVlKQoKCkBvdXQKZGVmIGNvdW50eV9pZCgpOgogICAgcmV0dXJuICcwODEnCgoKQG91dApkZWYgcGFyY2VsX2lkX2xvY2FsKCk6CiAgICBwYXNzCgoKQG91dApkZWYgbGFuZF91c2VfdHlwZV9pZChjb2RlPSdzaXR1cy5VU0VfQ09ERScpOgogICAgcmV0dXJuIGNvZGUKCgpAb3V0CmRlZiByZXNfdHlwZShsYW5kX3VzZV90eXBlX2lkPSdwYXJjZWxzX291dC5sYW5kX3VzZV90eXBlX2lkJyk6CiAgICByZXR1cm4gdXRpbHMuZ2V0X3Jlc190eXBlKGxhbmRfdXNlX3R5cGVfaWQsIHJlc19jb2RlcykKCgpAb3V0CmRlZiBsYW5kX3ZhbHVlKHZhbHVlPSdyb2xsLkFTU0xBTkQnKToKICAgICMgQWx0ZXJuYXRlIGlucHV0czoKICAgICMgLSAiVEVNUExBTkQiCiAgICByZXR1cm4gdmFsdWUKCgpAb3V0CmRlZiBpbXByb3ZlbWVudF92YWx1ZSh2YWx1ZT0ncm9sbC5BU1NJTVBTJyk6CiAgICAjIEFsdGVybmF0ZSBpbnB1dHM6CiAgICAjIC0gIlRFTVBJTVBTIgogICAgcmV0dXJuIHZhbHVlCgoKQG91dApkZWYgeWVhcl9hc3Nlc3NlZChkYXRlPSdyb2xsLkRPUicpOgogICAgIyBBc3N1bWVkIHRoYXQgIkRPUiIgcmVwcmVzZW50cyBkYXRlIG9mIHJlY29yZCBvciBzaW1pbGFyLgogICAgZGF0ZS5yZXBsYWNlKDAsIG5wLm5hbiwgaW5wbGFjZT1UcnVlKQogICAgcmV0dXJuIGRhdGUuZmxvb3JkaXYoMTAwMDApCgoKQG91dApkZWYgeWVhcl9idWlsdCgpOgogICAgcmV0dXJuIG5wLm5hbgoKCkBvdXQKZGVmIGJ1aWxkaW5nX3NxZnQoKToKICAgICMgV29ya2Fyb3VuZCBzaW5jZSBucC5uYW4gd291bGQgcmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gaW5qZWN0aW5nIGJlbG93LgogICAgcmV0dXJuIHBkLlNlcmllcygpCgoKQG91dApkZWYgbm9uX3Jlc2lkZW50aWFsX3NxZnQoYnVpbGRpbmdfc3FmdD0ncGFyY2Vsc19vdXQuYnVpbGRpbmdfc3FmdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICByZXNfdHlwZT0ncGFyY2Vsc19vdXQucmVzX3R5cGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgcmVzaWRlbnRpYWxfdW5pdHM9J3BhcmNlbHNfb3V0LnJlc2lkZW50aWFsX3VuaXRzJyk6CiAgICByZXR1cm4gdXRpbHMuZ2V0X25vbnJlc2lkZW50aWFsX3NxZnQoYnVpbGRpbmdfc3FmdCwgcmVzX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzaWRlbnRpYWxfdW5pdHMpCgoKQG91dApkZWYgcmVzaWRlbnRpYWxfdW5pdHMocmVzX3R5cGU9J3BhcmNlbHNfb3V0LnJlc190eXBlJyk6CiAgICByZXR1cm4gdXRpbHMuZ2V0X3Jlc2lkZW50aWFsX3VuaXRzKHRvdF91bml0cz1wZC5TZXJpZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzX3R5cGU9cmVzX3R5cGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApAb3V0CmRlZiBjb25kb19pZGVudGlmaWVyKCk6CiAgICBjb2RlID0gJyAnCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHJldHVybiBjb2RlCgoKPHxmaW1fZW5kfD4="]
["972e362706cd18d9b61e155bdc328fdb8c1347ea-5","972e362706cd18d9b61e155bdc328fdb8c1347ea","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc9dXRmLTgKaW1wb3J0IG9zLCBqc29uCmZyb20gZG90ZW52IGltcG9ydCBkb3RlbnZfdmFsdWVzCgpmcm9tIGZsYXNrIGltcG9ydCBGbGFzaywganNvbmlmeQpmcm9tIGZsYXNrX2NvcnMgaW1wb3J0IENPUlMsIGNyb3NzX29yaWdpbgoKZnJvbSBzcmMuYmx1ZXByaW50cy51c2VyYmx1ZXByaW50IGltcG9ydCB1c2VyX2JsdWVwcmludApmcm9tIHNyYy5ibHVlcHJpbnRzLnRhc2tibHVlcHJpbnQgaW1wb3J0IHRhc2tfYmx1ZXByaW50CmZyb20gc3JjLmJsdWVwcmludHMudG9kb2JsdWVwcmludCBpbXBvcnQgdG9kb19ibHVlcHJpbnQKCmZyb20gc3JjLmNvbnRyb2xsZXJzLnVzZXJjb250cm9sbGVyIGltcG9ydCBVc2VyQ29udHJvbGxlcgpmcm9tIHNyYy5jb250cm9sbGVycy50YXNrY29udHJvbGxlciBpbXBvcnQgVGFza0NvbnRyb2xsZXIKZnJvbSBzcmMudXRpbC5kYW9zIGltcG9ydCBnZXREYW8KCgphcHAgPSBGbGFzaygndG9kb2FwcCcpCgojIGNvbmZpZ3VyZSBDT1JTIGZvciBjcm9zcy1vcmlnaW4gcmVzb3VyY2Ugc2hhcmluZyAoYmV0d2VlbiB0aGUgZnJvbnRlbmQgYW5kIGJhY2tlbmQpCmNvcnMgPSBDT1JTKGFwcCkKYXBwLmNvbmZpZ1snQ09SU19IRUFERVJTJ10gPSAnQ29udGVudC1UeXBlJwoKIyByZWdpc3RlciBibHVlcHJpbnRzCmFwcC5yZWdpc3Rlcl9ibHVlcHJpbnQoYmx1ZXByaW50PXVzZXJfYmx1ZXByaW50LCB1cmxfcHJlZml4PScvdXNlcnMnKQphcHAucmVnaXN0ZXJfYmx1ZXByaW50KGJsdWVwcmludD10YXNrX2JsdWVwcmludCwgdXJsX3ByZWZpeD0nL3Rhc2tzJykKYXBwLnJlZ2lzdGVyX2JsdWVwcmludChibHVlcHJpbnQ9dG9kb19ibHVlcHJpbnQsIHVybF9wcmVmaXg9Jy90b2RvcycpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgojIHNpbXBsZSBoZWFydGJlYXQgbWV0aG9kIHRvIGNoZWNrIGlmIHRoZSBzZXJ2ZXIgaXMgcnVubmluZwpAYXBwLnJvdXRlKCcvJykKPHxmaW1fZW5kfD4="]
["cf96314d531b59384f6e99c2dfbdea6fd2fa98b8-1","cf96314d531b59384f6e99c2dfbdea6fd2fa98b8","PHxmaW1fcHJlZml4fD4KIyBtYWluLnB5CgppbXBvcnQgbnVtcHkgYXMgbnAKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0Cgpmcm9tIG1hdHBsb3RsaWIucGF0Y2hlcyBpbXBvcnQgUmVjdGFuZ2xlCgo8fGZpbV9lbmR8Pg=="]
["d883927c0951873764c175df1f46d6dc5db18f52-2","d883927c0951873764c175df1f46d6dc5db18f52","PHxmaW1fcHJlZml4fD4KIyBTaWdtb2lkIFJlZ3Jlc3Npb24gZXhhbXBsZQpmcm9tIGFwcHMuZHJsLmNocEEwMS5lMDMuc2lnbW9pZF9yZWdyZXNzaW9uX2VuZ2luZSBpbXBvcnQgU2lnbW9pZFJlZ3Jlc3Npb25FbmdpbmUKPHxmaW1faG9sZXw+CgogICAgZGVmIHN0YXJ0dXAoc2VsZiwgYXJncz17fSk6CiAgICAgICAgcHJpbnQoJ1NpZ21vaWQgUmVncmVzc2lvbiBFeGFtcGxlJykKICAgICAgICBlbmdpbmUgPSBTaWdtb2lkUmVncmVzc2lvbkVuZ2luZSgpCiAgICAgICAgZW5naW5lLmV4cCgpCjx8ZmltX3N1ZmZpeHw+CgpjbGFzcyBDaHBBMDFFMDNNYWluKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5uYW1lID0gJycKPHxmaW1fZW5kfD4="]
["992df5e59beec9574c1227819b639912cd433bf7-2","992df5e59beec9574c1227819b639912cd433bf7","PHxmaW1fcHJlZml4fD4KIyBweWxpbnQ6IHNraXAtZmlsZQppbXBvcnQgbG9nZ2luZwppbXBvcnQgcHByaW50CmltcG9ydCByZQoKIiIiClRoaXMgY2xhc3MgZGVmaW5lcyBhIHNpbXBsZSB0b2tlbiwgc3RvcmluZzoKICAqIFRoZSB0b2tlbiB0eXBlIChlLmcuOiBOdW1iZXIsIHdvcmQsIGV0YykKICAqIFRoZSB0b2tlbiB2YWx1ZSAodGhlIGFjdHVhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24pCiIiIgpjbGFzcyBUb2tlbjoKICBkZWYgX19pbml0X18oc2VsZiwgdG9rZW5fdHlwZTogc3RyLCB0b2tlbl92YWx1ZTogc3RyKToKICAgIHNlbGYudHlwZSA9IHRva2VuX3R5cGUKICAgIHNlbGYudmFsdWUgPSB0b2tlbl92YWx1ZQoKICBkZWYgX19zdHJfXyhzZWxmKSAtPiBzdHI6CiAgICByZXR1cm4gcHByaW50LnBmb3JtYXQoeyd0eXBlJzogc2VsZi50eXBlLCAndmFsdWUnOiBzZWxmLnZhbHVlfSwgaW5kZW50PTIpCgogIGRlZiBfX3JlcHJfXyhzZWxmKSAtPiBzdHI6CiAgICByZXR1cm4gc2VsZi5fX3N0cl9fKCkKCgoiIiIKVGhlIERlcGVuZGVuY3lUb2tlbml6ZXIgY2xhc3MgaG9sZHMgYSBudW1iZXIgb2YgbWV0aG9kcyB3aGljaCBoZWxwIHRva2VuaXplCnB5dGhvbiBkZXBlbmRlbmNpZXMgYXMgZm91bmQgdmlhIGEgcHlwaSBxdWVyeS4gVGhpcyBpcyBtZWFudCB0byBiZSBpbml0aWFsaXplZAp3aXRoIHRoZSBkZXBlbmRlbmN5IHJhdyBzdHJpbmcsIGFuZCBtZXRob2RzIHNob3VsZCBiZSBjYWxsZWQgYmFzZWQgb24gZXhwZWN0ZWQKaW5wdXRzLiBTdG9yZWQgaGVyZSBpczoKICAqIFRoZSBUb2tlbiBsaXN0IGZvciB0aGUgcmF3IGlucHV0IHN0cmluZy4KIiIiCmNsYXNzIERlcGVuZGVuY3lUb2tlbml6ZXI6CiAgIiIiCiAgIEV4cGVjdGVkIGFzIGZvbGxvd3MgKGhlcmUgW10gZGVub3RlcyBvcHRpb25hbCwgYW5kICQgZGVub3RlcyB2YXJpYWJsZSwgIiIKICAgZGVub3RlcyBkZXNjcmlwdGlvbik6CiAgICAgJG5hbWUgWyR2ZXJzaW9uX3JhbmdlXSBbJG1ldGFkYXRhXQogICBXaGVyZSBuYW1lIGlzOgogICAgICJhIHN0cmluZyBzdGFydGluZyB3aXRoIGEgY2hhcmFjdGVyIgogICBXaGVyZSB2ZXJzaW9uX3JhbmdlIGlzOgogICAgICgkY29tcGFyYXRvciR2ZXJzaW9uWywkY29tcGFyYXRvciR2ZXJzaW9uKV0KICAgV2hlcmUgY29tcGFyYXRvciBpczoKICAgICAiYW55IG9mID09LCAhPSwgPD0sID49LCA8LCA+IgogICBXaGVyZSB2ZXJzaW9uIGlzOgogICAgICInRGVmaW5lZCcgYnkgUEVQIDQ0MCAodGhvdWdoIG1vc3QgZG8gbm90IGNvbXBseSkiCiAgIFdoZXJlIG1ldGFkYXRhIGlzOgogICAgIDsgWyhdICRrZXlfdmFsdWUgWyRtb3JlXVspXSBbJG1vcmVdCiAgIFdoZXJlIGtleV92YWx1ZSBpczoKICAgICAka2V5ICRjb21wYXJhdG9yICR2YWx1ZQogICBXaGVyZSBrZXkgaXM6CiAgICAgJG5hbWUKICAgV2hlcmUgdmFsdWUgaXM6CiAgICAgImFueSBvZiAkbmFtZSBvciAkdmVyc2lvbiIKICAgV2hlcmUgbW9yZSBpczoKICAgICBhbmQgWyhdICRrZXlfdmFsdWUgWyRtb3JlXSBbKV0gWyRtb3JlXQogICIiIgogICMgVE9LRU5TCiAgVkVSU0lPTl9UT0tFTiA9ICdWRVJTSU9OJwogIE5BTUVfVE9LRU4gPSAnTkFNRScKICBDT01QQVJBVE9SX1RPS0VOID0gJ0NPTVBBUkFUT1InCiAgTUVUQURBVEFfU0VQQVJBVE9SX1RPS0VOID0gJ01FVEFEQVRBX1NFUEFSQVRPUicKICBTVFJJTkdfVE9LRU4gPSAnU1RSSU5HJwogIFZFUlNJT05fU1RBUlRfVE9LRU4gPSAnVkVSU0lPTl9TVEFSVCcKICBWRVJTSU9OX0VORF9UT0tFTiA9ICdWRVJTSU9OX0VORCcKICBWRVJTSU9OX1NFUEFSQVRPUl9UT0tFTiA9ICdWRVJTSU9OX1NFUEFSQVRPUicKCgogIGRlZiBfX2luaXRfXyhzZWxmLCByYXdfcmVxdWlyZW1lbnRfc3RyaW5nOiBzdHIpOgogICAgc2VsZi50b2tlbnMgPSBzZWxmLl90b2tlbml6ZV9yZXF1aXJlbWVudF9tZXRhZGF0YV9zdHJpbmcocmF3X3JlcXVpcmVtZW50X3N0cmluZykKICAgIGxvZ2dpbmcuZGVidWcoIlRva2Vuczoge30iLmZvcm1hdChzZWxmLnRva2VucykpCgogIGRlZiBpc190b2tlbl90eXBlKHNlbGYsIGV4cGVjdGVkX3R5cGU6IHN0cik6CiAgICAiIiJXaGV0aGVyIHRoZSBuZXh0IHRva2VuIGlzIG9mIHRoZSBleHBlY3RlZCB0eXBlLiIiIgogICAgaWYgbm90IHNlbGYuaGFzX25leHQoKToKICAgICAgcmV0dXJuIEZhbHNlCiAgICByZXR1cm4gZXhwZWN0ZWRfdHlwZSA9PSBzZWxmLnBlZWtfbmV4dF90b2tlbigpLnR5cGUKCiAgZGVmIGdldF9uZXh0X3Rva2VuKHNlbGYpIC0+IFRva2VuOgogICAgIiIiUmV0cmlldmVzIHRoZSBuZXh0IHRva2VuIGVmZmVjdGl2ZWx5IHBvcHBpbmcgaXQgZnJvbSB0aGUgbGlzdC4iIiIKICAgIHRva2VuID0gc2VsZi50b2tlbnMucG9wKDApCiAgICByZXR1cm4gdG9rZW4KCiAgZGVmIHBlZWtfbmV4dF90b2tlbihzZWxmKSAtPiBUb2tlbjoKICAgICIiIlJldHJpZXZlcyB0aGUgbmV4dCB0b2tlbiB3aXRob3V0IHJlbW92aW5nIGl0IGZyb20gdGhlIGxpc3QuIiIiCiAgICBpZiBub3Qgc2VsZi5oYXNfbmV4dCgpOgogICAgICByZXR1cm4gTm9uZQogICAgcmV0dXJuIHNlbGYudG9rZW5zWzBdCgogIGRlZiBoYXNfbmV4dChzZWxmKSAtPiBib29sOgogICAgIiIiV2hldGhlciB0aGVyZSBpcyBhbm90aGVyIHRva2VuIGxlZnQgdG8gcHJvY2Vzcy4iIiIKICAgIHJldHVybiBsZW4oc2VsZi50b2tlbnMpICE9IDAKCiAgZGVmIGRyb3BfbmV4dChzZWxmKSAtPiBOb25lOgogICAgIiIiUmVtb3ZlcyB0aGUgbmV4dCB0b2tlbiBmcm9tIHRoZSBsaXN0LiIiIgogICAgc2VsZi50b2tlbnMucG9wKDApCgogIGRlZiBkcm9wX25leHRfaWZfdHlwZShzZWxmLCBleHBlY3RlZF90eXBlOiBzdHIpIC0+IE5vbmU6CiAgICAiIiJSZW1vdmVzIHRoZSBuZXh0IHRva2VuIGZyb20gdGhlIGxpc3QgaWYgaXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gdHlwZS4iIiIKICAgIGlmIHNlbGYuaXNfdG9rZW5fdHlwZShleHBlY3RlZF90eXBlKToKICAgICAgc2VsZi5kcm9wX25leHQoKQoKICBkZWYgcGFyc2VfdG9rZW5fdHlwZShzZWxmLCBleHBlY3RlZF90eXBlOiBzdHIpIC0+IHN0cjoKICAgICIiIlJldHVybnMgdGhlIG5leHQgdG9rZW4gdmFsdWUgaWYgb2YgZXhwZWN0ZWRfdHlwZSwgZWxzZSB0aHJvdyBFcnJvci4iIiIKICAgIHRva2VuID0gc2VsZi5nZXRfbmV4dF90b2tlbigpCiAgICBpZiB0b2tlbi50eXBlICE9IGV4cGVjdGVkX3R5cGU6CiAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICJUb2tlbiBNaXNtYXRjaDogRXhwZWN0ZWQ6IHt9LCBpbnN0ZWFkIGdvdDoge30oe30pIi5mb3JtYXQoCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICBleHBlY3RlZF90eXBlLAogICAgICAgICAgICAgIHRva2VuLnZhbHVlLAogICAgICAgICAgICAgIHRva2VuLnR5cGUpKQo8fGZpbV9lbmR8Pg=="]
["cf3393718f438f744e325070b012cf55d99b1955-1","cf3393718f438f744e325070b012cf55d99b1955","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KR1VJTEQgPSAiMTg4NjYxNzM4MTcyODQxOTg1IgpTRVBPUkFUT1IgPSAiXG4+ICIKeCA9IDczOTM1NDEyODYyMjU1MTEyMQo8fGZpbV9lbmR8Pg=="]
["d426033502493677480e1e5c4831e188d357b5fe-1","d426033502493677480e1e5c4831e188d357b5fe","PHxmaW1fcHJlZml4fD4KZnJvbSBTZWFyY2hlci5tZXRob2RzIGltcG9ydCBtZXRob2RzCiMgZnJvbSBtZXRob2RzIGltcG9ydCBtZXRob2RzCgoKZGVmIHNlYXJjaChxdWVyeSwgbGltaXQpOgogICAgIyBicmVha3BvaW50KCkKICAgIHNwb3RpcHlfb2JqID0gbWV0aG9kcy5nZXRfc3BvdGlmeV90b2tlbigpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHJlc3VsdHMgPSBzcG90aXB5X29iai5zZWFyY2gocT1xdWVyeSwgbGltaXQ9bGltaXQpCiAgICAjIGJyZWFrcG9pbnQoKQogICAgcmVzdWx0c19kZiA9IG1ldGhvZHMuZ2V0X3Byb3Blcl9kYXRhZnJhbWUocmVzdWx0cykKICAgIHJldHVybiByZXN1bHRzX2RmLnRvX2RpY3QoKQo8fGZpbV9lbmR8Pg=="]
["a40abbf3c4a269dc7941104063991cc177d8bdf0-1","a40abbf3c4a269dc7941104063991cc177d8bdf0","PHxmaW1fcHJlZml4fD4KZnJvbSBib2EzLmJvYTMgaW1wb3J0IEJvYTMKZnJvbSBib2EzLmV4Y2VwdGlvbiBpbXBvcnQgQ29tcGlsZXJFcnJvcgpmcm9tIGJvYTMubmVvLmNyeXB0b2dyYXBoeSBpbXBvcnQgaGFzaDE2MApmcm9tIGJvYTMubmVvLnZtLm9wY29kZS5PcGNvZGUgaW1wb3J0IE9wY29kZQpmcm9tIGJvYTMubmVvLnZtLnR5cGUuSW50ZWdlciBpbXBvcnQgSW50ZWdlcgpmcm9tIGJvYTNfdGVzdC50ZXN0cy5ib2FfdGVzdCBpbXBvcnQgQm9hVGVzdApmcm9tIGJvYTNfdGVzdC50ZXN0cy50ZXN0X2NsYXNzZXMuVGVzdEV4ZWN1dGlvbkV4Y2VwdGlvbiBpbXBvcnQgVGVzdEV4ZWN1dGlvbkV4Y2VwdGlvbgpmcm9tIGJvYTNfdGVzdC50ZXN0cy50ZXN0X2NsYXNzZXMudGVzdGVuZ2luZSBpbXBvcnQgVGVzdEVuZ2luZQoKCmNsYXNzIFRlc3RJbXBvcnQoQm9hVGVzdCk6CgogICAgZGVmYXVsdF9mb2xkZXI6IHN0ciA9ICd0ZXN0X3NjL2ltcG9ydF90ZXN0JwoKICAgIGRlZiB0ZXN0X2ltcG9ydF90eXBpbmcoc2VsZik6CiAgICAgICAgZXhwZWN0ZWRfb3V0cHV0ID0gKAogICAgICAgICAgICBPcGNvZGUuSU5JVFNMT1QgICAgICMgZnVuY3Rpb24gc2lnbmF0dXJlCiAgICAgICAgICAgICsgYidceDAxJwogICAgICAgICAgICArIGInXHgwMCcKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICArIE9wY29kZS5ORVdBUlJBWTAKICAgICAgICAgICAgKyBPcGNvZGUuU1RMT0MwCiAgICAgICAgICAgICsgT3Bjb2RlLlJFVCAgICAgICAgIyByZXR1cm4KPHxmaW1fZW5kfD4="]
["994e5bfc7007ff0bc8933cb3e21253a64851a3f5-1","994e5bfc7007ff0bc8933cb3e21253a64851a3f5","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgU29sdXRpb246CiAgICBkZWYgcm9iKHNlbGYsIG51bXM6IExpc3RbaW50XSkgLT4gaW50OiAgICAgICAKICAgICAgICBpZiBub3QgbnVtczoKICAgICAgICAgICAgcmV0dXJuIDAKPHxmaW1fZW5kfD4="]
["cf3b0e1b81b47ada7f1d0040da54a4fb7caeb932-1","cf3b0e1b81b47ada7f1d0040da54a4fb7caeb932","PHxmaW1fcHJlZml4fD4KZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHVwZGF0ZV93cmFwcGVyCmZyb20gdXJsbGliLnBhcnNlIGltcG9ydCBxdW90ZSBhcyB1cmxxdW90ZQpmcm9tIGRqYW5nby51dGlscy50cmFuc2xhdGlvbiBpbXBvcnQgZ2V0dGV4dCBhcyBfCmZyb20gZGphbmdvLnV0aWxzLmh0bWwgaW1wb3J0IGZvcm1hdF9odG1sCmZyb20gZGphbmdvLmNvbnRyaWIgaW1wb3J0IGFkbWluCmZyb20gZGphbmdvLnVybHMgaW1wb3J0IHBhdGgsIHJldmVyc2UKZnJvbSBkamFuZ28uc2hvcnRjdXRzIGltcG9ydCByZWRpcmVjdApmcm9tIGRqYW5nby5jb250cmliIGltcG9ydCBtZXNzYWdlcwpmcm9tIGFsbGJ5bXlzZWxmLm1vZGVscyBpbXBvcnQgU0lOR0xFVE9OX1BLCmZyb20gYWxsYnlteXNlbGYucGF0aF91dGlscyBpbXBvcnQgZ2V0X3BhdGhfbmFtZQoKY2xhc3MgU2luZ2xldG9uQmFzZU1vZGVsQWRtaW4oYWRtaW4uTW9kZWxBZG1pbik6CiAgICAiIiIKICAgIEFkbWluIG1vZGVsIGZvciBzdWJjbGFzc2VzIG9mIFNpbmdsZXRvbkJhc2VNb2RlbC4gU3ViY2xhc3MgdGhpcyBtb2RlbAogICAgdG8gcHJvdmlkZSBjdXN0b20gZnVuY3Rpb25hbGl0eSB0byBjb250cm9sIGhvdyBzdWJjbGFzc2VzIG9mCiAgICBTaW5nbGV0b25CYXNlTW9kZWwgYXJlIG9wZXJhdGVkIHVwb24gdmlhIHRoZSBhZG1pbiBpbnRlcmZhY2UuCgogICAgU3VwZXJjbGFzcwogICAgLS0tLS0tLS0tLQogICAgYWRtaW4uTW9kZWxBZG1pbgoKICAgICIiIgoKPHxmaW1faG9sZXw+CiAgICAgICAgIiIiCiAgICAgICAgU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSByZWdpc3RlcmVkIG1vZGVsIGlzIGFibGUgdG8gYmUgYWRkZWQgb3IKICAgICAgICBub3QuCgogICAgICAgIFJldHVybnMKICAgICAgICAtLS0tLS0tCiAgICAgICAgYm9vbAogICAgICAgICAgICAnVHJ1ZScgaWYgdGhlIG1vZGVsIGV4aXN0cywgJ0ZhbHNlJyBvdGhlcndpc2UuCiAgICAgICAgICAgIAogICAgICAgICIiIgoKICAgICAgICByZXR1cm4gbm90IHNlbGYubW9kZWwuZXhpc3RzKCkKICAgIAogICAgZGVmIGhhc19kZWxldGVfcGVybWlzc2lvbihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICIiIgogICAgICAgIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0aGUgcmVnaXN0ZXJlZCBtb2RlbCBpcyBhYmxlIHRvIGJlIGRlbGV0ZWQgb3IKICAgICAgICBub3QuCgogICAgICAgIFJldHVybnMKICAgICAgICAtLS0tLS0tCiAgICAgICAgYm9vbAogICAgICAgICAgICAnVHJ1ZScgaWYgdGhlIG1vZGVsIGlzIGFibGUgdG8gYmUgZGVsZXRlZCwgJ0ZhbHNlJyBvdGhlcndpc2UuIEJ5CiAgICAgICAgICAgIGRlZmF1bHQsICdGYWxzZScgaXMgcmV0dXJuZWQgYXMgc2luZ2xldG9uIG9iamVjdHMgc2hvdWxkIG5vdCwgaW4KICAgICAgICAgICAgbW9zdCBjYXNlcywgYmUgZGVsZXRlZC4KCiAgICAgICAgIiIiCgogICAgICAgIHJldHVybiBGYWxzZQoKICAgIGRlZiBpc19kZWZhdWx0X2F2YWlsYWJsZShzZWxmKToKICAgICAgICAiIiIKICAgICAgICBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlZ2lzdGVyZWQgbW9kZWwgaXMgY3JlYXRlZAogICAgICAgIGJ5IGRlZmF1bHQgaW4gdGhlIGFkbWluIGludGVyZmFjZS4KCiAgICAgICAgUmV0dXJucwogICAgICAgIC0tLS0tLS0KICAgICAgICBib29sCiAgICAgICAgICAgICdUcnVlJyBpZiBhbiBpbnN0YW5jZSBhbmQgY3JlYXRlZCBieSBkZWZhdWx0LCAnRmFsc2UnIG90aGVyd2lzZS4gQnkKICAgICAgICAgICAgZGVmYXVsdCwgJ0ZhbHNlJyBpcyByZXR1cm5lZC4KCiAgICAgICAgIiIiCgogICAgICAgIHJldHVybiBGYWxzZQogICAgCiAgICBkZWYgZ2V0X3VybHMoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgQWRtaW5pc3RyYXRpb24gVVJMcyBmb3IgdGhlIHJlZ2lzdGVyZWQgbW9kZWwuIEhlcmUsIHRoZSBjaGFuZ2UgdmlldyBpcwogICAgICAgIG1hcHBlZCB0byAnJywgd2hpY2ggZWZmZWN0aXZlbHkgc2tpcHMgdGhlIGNoYW5nZSBsaXN0IHBhZ2UuIFRoZQogICAgICAgIGhpc3RvcnkgdmlldyBpcyBtYXBwZWQgdG8gJ2hpc3RvcnkvJy4gQm90aCBvZiB0aGVzZSBVUkwgbWFwcGluZ3MKICAgICAgICBlbGltaW5hdGUgdGhlIG9iamVjdCdzIGlkIGZyb20gdGhlIFVSTCBhcyBhIHNpbmdsZXRvbiBpcyBvbmx5CiAgICAgICAgZXZlciBnb2luZyB0byBoYXZlIG9uZSBpbnN0YW5lIGluIGV4aXN0ZW5jZS4gCgogICAgICAgIFJldHVybnMKICAgICAgICAtLS0tLS0tCiAgICAgICAgbGlzdCBvZiBkamFuZ28udXJscy5yZXNvbHZlci5VUkxQYXR0ZXJuCiAgICAgICAgICAgIEN1c3RvbSBjaGFuZ2UgdmlldyBhbmQgaGlzdG9yeSB2aWV3IG1hcHBpbmdzIHByZXBlbmRlZCB0byB0aGUKICAgICAgICAgICAgZGVmYXVsdCBVUkxzIGNvbWluZyBmcm9tICdhZG1pbi5Nb2RlbEFkbWluJy4KCiAgICAgICAgIiIiCgogICAgICAgIGRlZiB3cmFwKHZpZXcpOgogICAgICAgICAgICBkZWYgd3JhcHBlcigqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAgICAgICAgIyBzZW5kIGFyZ3VtZW50cyB0byB3cmFwcGVkIHZpZXcKICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmFkbWluX3NpdGUuYWRtaW5fdmlldyh2aWV3KSgqYXJncywgKiprd2FyZ3MpCiAgICAgICAgICAgIHdyYXBwZXIubW9kZWxfYWRtaW4gPSBzZWxmCiAgICAgICAgICAgIHJldHVybiB1cGRhdGVfd3JhcHBlcih3cmFwcGVyLCB2aWV3KQogICAgICAgIAogICAgICAgIGlmIHNlbGYuaXNfZGVmYXVsdF9hdmFpbGFibGUoKSBhbmQgbm90IHNlbGYubW9kZWwuZXhpc3RzKCk6CiAgICAgICAgICAgICMgZ2V0IG9yIGNyZWF0ZSBzaW5nbGV0b24gaWYgaXQgc2hvdWxkIGJlIGF2YWlsYWJsZSBieSBkZWZhdWx0CiAgICAgICAgICAgIHNlbGYubW9kZWwuZ2V0KCkKCiAgICAgICAgc2luZ2xldG9uX3VybHMgPSBbCiAgICAgICAgICAgIHBhdGgoCiAgICAgICAgICAgICAgICAjIHNraXBzIG9iamVjdCBsaXN0IHZpZXcgYW5kIGRpcmVjdHMgY2hhbmdlIHZpZXcKICAgICAgICAgICAgICAgICMgaHR0cDovLzEyNy4wLjAuMTo4MDAwL2FwcG5hbWUvbW9kZWwKICAgICAgICAgICAgICAgIHJvdXRlID0gJycsCiAgICAgICAgICAgICAgICB2aWV3ID0gd3JhcChzZWxmLmNoYW5nZV92aWV3KSwKICAgICAgICAgICAgICAgIGt3YXJncyA9IHsnb2JqZWN0X2lkJzogc3RyKFNJTkdMRVRPTl9QSyl9LAogICAgICAgICAgICAgICAgbmFtZSA9IGdldF9wYXRoX25hbWUoc2VsZi5tb2RlbCwgJ2NoYW5nZScpLAogICAgICAgICAgICApLAogICAgICAgICAgICBwYXRoKAogICAgICAgICAgICAgICAgIyBoaXN0b3J5IHVybCAtIG5vIG5lZWQgZm9yIG9iamVjdCBpZCBpbiB1cmwKICAgICAgICAgICAgICAgICMgaHR0cDovLzEyNy4wLjAuMTo4MDAwL2FwcG5hbWUvbW9kZWwvaGlzdG9yeQogICAgICAgICAgICAgICAgcm91dGUgPSAnaGlzdG9yeS8nLAogICAgICAgICAgICAgICAgdmlldyA9IHdyYXAoc2VsZi5oaXN0b3J5X3ZpZXcpLAogICAgICAgICAgICAgICAga3dhcmdzID0geydvYmplY3RfaWQnOiBzdHIoU0lOR0xFVE9OX1BLKX0sCiAgICAgICAgICAgICAgICBuYW1lID0gZ2V0X3BhdGhfbmFtZShzZWxmLm1vZGVsLCAnaGlzdG9yeScpLAogICAgICAgICAgICApLAogICAgICAgIF0KCiAgICAgICAgdXJscyA9IHN1cGVyKCkuZ2V0X3VybHMoKQogICAgICAgIHJldHVybiBzaW5nbGV0b25fdXJscyArIHVybHMKCiAgICBkZWYgY2hhbmdlX3ZpZXcoc2VsZiwgcmVxdWVzdCwgb2JqZWN0X2lkLCBmb3JtX3VybD0nJywgZXh0cmFfY29udGV4dD1Ob25lKToKICAgICAgICAiIiIKICAgICAgICBDYWxsZWQgYWZ0ZXIgdGhlIGFkbWluaXN0cmF0b3IgY2hhbmdlcyB0aGUgcmVnaXN0ZXJlZCBtb2RlbC4gSWYgdGhlCiAgICAgICAgbW9kZWwgZG9lcyBub3QgZXhpc3QsICdTaW5nbGV0b25CYXNlTW9kZWxBZG1pbi5hZGRfdmlldycgaXMgY2FsbGVkIGZyb20KICAgICAgICB0aHMgbWV0aG9kIGluc3RlYWQuCgogICAgICAgIFBhcmFtZXRlcnMKICAgICAgICAtLS0tLS0tLS0tCiAgICAgICAgcmVxdWVzdCA6IGRqYW5nby5jb3JlLmhhbmRsZXJzLndzZ2kuV1NHSVJlcXVlc3QKICAgICAgICAgICAgVGhlIGluY29taW5nIGNoYW5nZSByZXF1ZXN0LgogICAgICAgIG9iaiA6IFNpbmdsZXRvbkJhc2VNb2RlbCAoc3ViY2xhc3MpCiAgICAgICAgICAgIFRoZSBvYmVqY3QgdGhhdCB0aGUgdmlldyBpcyBiZWluZyByZW5kZXJlZCBmb3IuCgogICAgICAgIFJldHVybnMKICAgICAgICAtLS0tLS0tCiAgICAgICAgU2luZ2xldG9uQmFzZU1vZGVsQWRtaW4uYWRkX3ZpZXcoKQogICAgICAgICAgICBJZiB0aGUgbW9kZWwgZG9lcyBub3QgZXhpc3QuCiAgICAgICAgZGphbmdvLmNvbnRyaWIuYWRtaW4ub3B0aW9ucy5Nb2RlbEFkbWluLmNoYW5nZV92aWV3KCkKICAgICAgICAgICAgSWYgdGhlIG1vZGVsIGV4aXN0cy4KCiAgICAgICAgIiIiCgogICAgICAgIGlmIG5vdCBzZWxmLm1vZGVsLmV4aXN0cygpOgogICAgICAgICAgICByZXR1cm4gc2VsZi5hZGRfdmlldyhyZXF1ZXN0LCBmb3JtX3VybCwgZXh0cmFfY29udGV4dCkKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5jaGFuZ2VfdmlldyhyZXF1ZXN0LCBvYmplY3RfaWQsIGZvcm1fdXJsLCBleHRyYV9jb250ZXh0KQoKICAgIGRlZiByZXNwb25zZV9jaGFuZ2Uoc2VsZiwgcmVxdWVzdCwgb2JqKToKICAgICAgICAiIiIKICAgICAgICBDYWxsZWQgYWZ0ZXIgdGhlIGFkbWluaXN0cmF0b3IgY2hhbmdlcyB0aGUgcmVnaXN0ZXJlZCBtb2RlbC4KCiAgICAgICAgUGFyYW1ldGVycwogICAgICAgIC0tLS0tLS0tLS0KICAgICAgICByZXF1ZXN0IDogZGphbmdvLmNvcmUuaGFuZGxlcnMud3NnaS5XU0dJUmVxdWVzdAogICAgICAgICAgICBUaGUgaW5jb21pbmcgY2hhbmdlIHJlcXVlc3QuCiAgICAgICAgb2JqIDogU2luZ2xldG9uQmFzZU1vZGVsIChzdWJjbGFzcykKICAgICAgICAgICAgVGhlIG9iamVjdCBiZWluZyBjaGFuZ2VkLgoKICAgICAgICBSZXR1cm5zCiAgICAgICAgLS0tLS0tLQogICAgICAgIFNpbmdsZXRvbkJhc2VNb2RlbEFkbWluLl9zYXZlX3Jlc3BvbnNlKCkKICAgICAgICAgICAgSWYgdGhlIHNhdmUgdHlwZSBpcyAnX3NhdmUnLgoKICAgICAgICBkamFuZ28uY29udHJpYi5hZG1pbi5vcHRpb25zLk1vZGVsQWRtaW4ucmVzcG9uc2VfYWRkKCkKICAgICAgICAgICAgSWYgdGhlIHNhdmUgdHlwZSBpcyBhbnl0aGluZyBidXQgJ19zYXZlJy4KCiAgICAgICAgIiIiCgogICAgICAgIGlmICdfc2F2ZScgaW4gcmVxdWVzdC5QT1NUOgogICAgICAgICAgICBvcHRzID0gc2VsZi5tb2RlbC5fbWV0YQogICAgICAgICAgICAjIHJlc3VsdCBvZiBvYmouX19zdHJfXyB3aWxsIGJlIHBsYWNlZCBpbnRvIG1lc3NhZ2UKICAgICAgICAgICAgbXNnX2RpY3QgPSB7CiAgICAgICAgICAgICAgICAnb2JqJzogZm9ybWF0X2h0bWwoJzxhIGhyZWY9Int9Ij57fTwvYT4nLCB1cmxxdW90ZShyZXF1ZXN0LnBhdGgpLCBzdHIob2JqKSkKICAgICAgICAgICAgfQogICAgICAgICAgICBtc2cgPSBmb3JtYXRfaHRtbCgKICAgICAgICAgICAgICAgIF8oJ3tvYmp9IHdhcyBjaGFuZ2VkIHN1Y2Nlc3NmdWxseS4nKSwKICAgICAgICAgICAgICAgICoqbXNnX2RpY3QKICAgICAgICAgICAgKQogICAgICAgICAgICByZXR1cm4gc2VsZi5fc2F2ZV9yZXNwb25zZShyZXF1ZXN0LCBvYmosIG1zZykKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5yZXNwb25zZV9jaGFuZ2UocmVxdWVzdCwgb2JqKQoKICAgIGRlZiByZXNwb25zZV9hZGQoc2VsZiwgcmVxdWVzdCwgb2JqLCBwb3N0X3VybF9jb250aW51ZT1Ob25lKToKICAgICAgICAiIiIKICAgICAgICBEZXRlcm1pbmVzIHRoZSByZXNwb25zZSB0eXBlIG9mIHRoZSBhZGQgdmlldyBzdGFnZS4KCiAgICAgICAgUGFyYW1ldGVycwogICAgICAgIC0tLS0tLS0tLS0KICAgICAgICByZXF1ZXN0IDogZGphbmdvLmNvcmUuaGFuZGxlcnMud3NnaS5XU0dJUmVxdWVzdAogICAgICAgICAgICBJbmNvbWluZyBhZGQgcmVxdWVzdC4KICAgICAgICBvYmogOiBTaW5nbGV0b25CYXNlTW9kZWwgKHN1YmNsYXNzKQogICAgICAgICAgICBPYmplY3QgYmVpbmcgYWRkZWQuCiAgICAgICAgcG9zdF91cmxfY29udGludWUgOiBkamFuZ28udXJscy5yZXNvbHZlcnMuVVJMUmVzb2x2ZXIKICAgICAgICAgICAgVVJMIHRvIHJlZGlyZWN0IHRvLgoKICAgICAgICBSZXR1cm5zCiAgICAgICAgLS0tLS0tLQogICAgICAgIFNpbmdsZXRvbkJhc2VNb2RlbEFkbWluLl9zYXZlX3Jlc3BvbnNlKCkKICAgICAgICAgICAgSWYgdGhlIHNhdmUgdHlwZSBpcyAnX3NhdmUnLgogICAgICAgICAgICAKICAgICAgICBkamFuZ28uY29udHJpYi5hZG1pbi5vcHRpb25zLk1vZGVsQWRtaW4ucmVzcG9uc2VfYWRkKCkKICAgICAgICAgICAgSWYgdGhlIHNhdmUgdHlwZSBpcyBhbnl0aGluZyBidXQgJ19zYXZlJy4KCiAgICAgICAgIiIiCgogICAgICAgIGlmICdfc2F2ZScgaW4gcmVxdWVzdC5QT1NUOgogICAgICAgICAgICBvcHRzID0gc2VsZi5tb2RlbC5fbWV0YQogICAgICAgICAgICAjIG9iai5fX3N0cl9fKCkgd2lsbCBiZSBwbGFjZWQgaW50byBtZXNzYWdlCiAgICAgICAgICAgIG1zZ19kaWN0ID0gewogICAgICAgICAgICAgICAgJ29iaic6IGZvcm1hdF9odG1sKCc8YSBocmVmPSJ7fSI+e308L2E+JywgdXJscXVvdGUocmVxdWVzdC5wYXRoKSwgb2JqKQogICAgICAgICAgICB9CiAgICAgICAgICAgIG1zZyA9IGZvcm1hdF9odG1sKAogICAgICAgICAgICAgICAgXygne29ian0gd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseS4nKSwKICAgICAgICAgICAgICAgICoqbXNnX2RpY3QKICAgICAgICAgICAgKQogICAgICAgICAgICByZXR1cm4gc2VsZi5fc2F2ZV9yZXNwb25zZShyZXF1ZXN0LCBvYmosIG1zZykKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5yZXNwb25zZV9hZGQocmVxdWVzdCwgb2JqLCBwb3N0X3VybF9jb250aW51ZSkKCiAgICBkZWYgX3NhdmVfcmVzcG9uc2Uoc2VsZiwgcmVxdWVzdCwgb2JqLCBtc2cpOgogICAgICAgICIiIgogICAgICAgIFJlc3BvbnNpYmxlIGZvciBkaXNwbGF5aW5nIGEgc3VjY2VzcyBtZXNzYWdlIHRvIHRoZSB1c2VyIGFuZCByZWRpcmVjdGluZwogICAgICAgIHRoZW0gdG8gdGhlIGFkbWluIGluZGV4IHBhZ2UgYWZ0ZXIgYWRkaW5nIG9yIGNoYW5naW5nIHRoZSByZWdpc3RlcmVkCiAgICAgICAgbW9kZWwuCgogICAgICAgIFJldHVybnMKICAgICAgICAtLS0tLS0tCiAgICAgICAgZGphbmdvLmh0dHAuSHR0cFJlc3BvbmUKICAgICAgICAgICAgVGhlIGFkbWluIGluZGV4IHBhZ2UsIHJldHVybmVkIHZpYSAnZGphbmdvLnNob3J0Y3V0cy5yZWRpcmVjdCcKCiAgICAgICAgIiIiCgogICAgICAgIHNlbGYubWVzc2FnZV91c2VyKHJlcXVlc3QsIG1zZywgbWVzc2FnZXMuU1VDQ0VTUykKICAgICAgICByZWRpcmVjdF91cmwgPSByZXZlcnNlKCdhZG1pbjppbmRleCcpCiAgICAgICAgcmV0dXJuIHJlZGlyZWN0KHJlZGlyZWN0X3VybCkKPHxmaW1fc3VmZml4fD4KICAgIGNoYW5nZV9mb3JtX3RlbXBsYXRlID0gJ2FkbWluL3NpbmdsZXRvbl9jaGFuZ2VfZm9ybS5odG1sJwogICAgb2JqZWN0X2hpc3RvcnlfdGVtcGxhdGUgPSAnYWRtaW4vc2luZ2xldG9uX29iamVjdF9oaXN0b3J5Lmh0bWwnCgogICAgZGVmIGhhc19hZGRfcGVybWlzc2lvbihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgo8fGZpbV9lbmR8Pg=="]
["5145396272184c5cb86ef003b69560fcd1e703a8-1","5145396272184c5cb86ef003b69560fcd1e703a8","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKZnJvbSBwd24gaW1wb3J0ICoKPHxmaW1faG9sZXw+Cgpjb250ZXh0LnRlcm1pbmFsID0gWyJ0bXV4IiwgInNwbGl0dyIsICItdiJdCgppZiBhcmdzLlJFTU9URToKICAgIGlvID0gcmVtb3RlKCIxOTMuNTcuMTU5LjI3IiwgNjI3NTApCmVsaWYgYXJncy5TVFJBQ0U6CiAgICBpbyA9IHByb2Nlc3MoWyJzdHJhY2UiLCAiLW8iICwidHJhY2UudHh0IiwgdGhlX2JpbmFyeV0pCmVsc2U6CiAgICBpbyA9IHByb2Nlc3ModGhlX2JpbmFyeSkKCmlmIGFyZ3MuR0RCOgogICAgZ2RiLmF0dGFjaChpbywgZiIiIgogICAgICAgIGZpbGUge3RoZV9iaW5hcnl9CiAgICAgICAgY29udGludWUKICAgICIiIikKCmNsYXNzIENvbnN0OgogICAgb3B0X2xpc3QgPSAxCiAgICBvcHRfYWN0ID0gMgogICAgb3B0X2J1eV9hbmltYWwgPSAzCiAgICBvcHRfYnV5X3RyYW5zbGF0b3IgPSA0CgogICAgcGlnX21heF9hZ2UgPSAxOAogICAgY293X21heF9hZ2UgPSAyMAoKZGVmIGluZGV4KGlkeCk6CiAgICBpby5zZW5kbGluZWFmdGVyKCI+ICIsIHN0cihpZHgpKQptZW51ID0gaW5kZXgKCmRlZiBhY3RfaW5kZXgoaWR4KToKICAgIGlvLnNlbmRsaW5lYWZ0ZXIoImFuaW1hbD8gIiwgc3RyKGlkeCkpCgpkZWYgbGlzdF9hbmltYWxzKCk6CiAgICBtZW51KENvbnN0Lm9wdF9saXN0KQoKZGVmIF9zZXRfbmFtZShuYW1lKToKICAgIGFzc2VydCBsZW4obmFtZSkgPD0gMHg0MAogICAgaW8uc2VuZGxpbmVhZnRlcigiYW5pbWFsPyAiLCBuYW1lKQoKZGVmIGJ1eV9waWcobmFtZSk6CiAgICBtZW51KENvbnN0Lm9wdF9idXlfYW5pbWFsKQogICAgbWVudSgxKQogICAgX3NldF9uYW1lKG5hbWUpCgpkZWYgYnV5X2NvdyhuYW1lKToKICAgIG1lbnUoQ29uc3Qub3B0X2J1eV9hbmltYWwpCiAgICBtZW51KDIpCiAgICBfc2V0X25hbWUobmFtZSkKCmRlZiBzZWxsX2FuaW1hbChpZHgpOgogICAgbWVudShDb25zdC5vcHRfYWN0KQogICAgYWN0X2luZGV4KGlkeCkKICAgIG1lbnUoMSkKCmRlZiByZW5hbWVfYW5pbWFsKGlkeCwgbmFtZSk6CiAgICBtZW51KENvbnN0Lm9wdF9hY3QpCiAgICBhY3RfaW5kZXgoaWR4KQogICAgbWVudSgzKQogICAgX3NldF9uYW1lKG5hbWUpCgpkZWYgYnV5X3RyYW5zbGF0b3IoKToKICAgIG1lbnUoQ29uc3Qub3B0X2J1eV90cmFuc2xhdG9yKQoKZGVmIHRyYW5zbGF0ZShpZHgpOgogICAgbWVudShDb25zdC5vcHRfYWN0KQogICAgYWN0X2luZGV4KGlkeCkKICAgIGluZGV4KDQpCgpkZWYgZmFrZV9waWdfb3ZlcmZsb3coYWdlPTAsIGh1bmdlcj0wLCB0eXBlXz1iInBpZyIpOgogICAgZGF0YSA9IGIiIgogICAgZGF0YSArPSBiIkEiKjB4MTAKICAgIGRhdGEgKz0gcDMyKDApCiAgICBkYXRhICs9IHA2NCgwKQogICAgZGF0YSArPSBwNjQoMHg0MSkKICAgIGRhdGEgKz0gcDY0KDB4NDA0ZDc4KSAgIyBBbmltYWwgdnRhYmxlCiAgICBkYXRhICs9IHR5cGVfLmxqdXN0KDB4MTAsIGIiXHgwMCIpCiAgICBkYXRhICs9IHA4KDApCiAgICBkYXRhICs9IHA4KENvbnN0LnBpZ19tYXhfYWdlKQogICAgZGF0YSArPSBwOChodW5nZXIpCiAgICBkYXRhICs9IHA4KGFnZSkKCiAgICBhc3NlcnQgbm90IGFueSh4ID09IDB4YSBmb3IgeCBpbiBkYXRhKQogICAgcmV0dXJuIGRhdGEKCiMgT3ZlcmZsb3cgZnJvbSBwaWcgQSBpbnRvIHRoZSBtZXRhZGF0YSBvZiBwaWcgQiwgb3ZlcndyaXRpbmcgdGhlIGFnZSBmaWVsZAojIHBpZyBCIHRvIG1heF9hZ2UgLyAyLCBzbyB3ZSBjYW4gc2VsbCBpdCBmb3IgYSBuaWNlIHByb2ZpdC4KZm9yIGkgaW4gcmFuZ2UoMyk6CiAgICBidXlfcGlnKCJBIioweDEwKQogICAgYnV5X3BpZygiQiIqMHgxMCkKICAgIGZha2VfcGlnID0gZmFrZV9waWdfb3ZlcmZsb3coYWdlPUNvbnN0LnBpZ19tYXhfYWdlIC8vIDIgLSAxKQogICAgcmVuYW1lX2FuaW1hbCgwLCBmYWtlX3BpZykKICAgIHNlbGxfYW5pbWFsKDEpCiAgICBzZWxsX2FuaW1hbCgwKQoKIyBXZSBub3cgaGF2ZSBlbm91Z2ggdG8gYnV5IHRoZSB0cmFuc2xhdG9yLCB3aGljaCBhbGxvd3MgdXMgdG8gZXhwbG9pdCBhIHNoZWxsCiMgaW5qZWN0aW9uIHZ1bG5lcmFiaWxpdHkgY29udHJvbGxhYmxlIGJ5IGEgZm9yZ2VkIHR5cGUgZmllbGQgaW4gYW4gQW5pbWFsLgpidXlfdHJhbnNsYXRvcigpCgojIENvcnJ1cHQgYW4gQW5pbWFsJ3MgdHlwZSBmaWVsZC4KYnV5X3BpZygiQSIqMHgxMCkKYnV5X3BpZygiQiIqMHgxMCkKZmFrZV9waWcgPSBmYWtlX3BpZ19vdmVyZmxvdyh0eXBlXz1iImZsYWciKQpyZW5hbWVfYW5pbWFsKDAsIGZha2VfcGlnKQoKIyBUcmlnZ2VyIHNoZWxsIGluamVjdGlvbi4KdHJhbnNsYXRlKDEpCgppby5pbnRlcmFjdGl2ZSgpCjx8ZmltX3N1ZmZpeHw+Cgp0aGVfYmluYXJ5ID0gIi4vb29wIgpjb250ZXh0LmJpbmFyeSA9IHRoZV9iaW5hcnkKZWxmID0gY29udGV4dC5iaW5hcnkKPHxmaW1fZW5kfD4="]
["a9ed4ab97d7295f8c94e366e50d9f4aa74fa8671-1","a9ed4ab97d7295f8c94e366e50d9f4aa74fa8671","PHxmaW1fcHJlZml4fD4KZnJvbSB0cHJpbnQgaW1wb3J0IHRwcmludAppbXBvcnQgYW5kcm9pZAppbXBvcnQgc29ja2V0CmZyb20gX3NvY2tldCBpbXBvcnQgU0hVVF9SRFdSCgpjbGFzcyBBbmRyb2lkUHJveHkoYW5kcm9pZC5BbmRyb2lkKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyPU5vbmUpOgogICAgICAgIGFuZHJvaWQuQW5kcm9pZC5fX2luaXRfXyhzZWxmLCBhZGRyKQoKICAgIGRlZiBjYWxsKHNlbGYsIHJlcXVlc3QpOgogICAgICAgIHNlbGYuY29ubi5zZW5kYWxsKHJlcXVlc3QpCiAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNvbm4ucmVjdigxMDI0MCkKICAgICAgICBzZWxmLmlkICs9IDEKICAgICAgICByZXR1cm4gcmVzcG9uc2UKCmRyb2lkID0gQW5kcm9pZFByb3h5KCkKCnRwcmludCgiSGFuZHNoYWtlIGlzICVzIiAlIChhbmRyb2lkLkhBTkRTSEFLRSkpCnRwcmludCgiU2VydmVyIGhvc3QgaXMgJXMiICUgKGFuZHJvaWQuSE9TVCkpCnRwcmludCgiU2VydmVyIHBvcnQgaXMgJXMiICUgKGFuZHJvaWQuUE9SVCkpCgphZGRyID0gKCIiLCA5OTk5KQoKc2VydmVyU29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKc2VydmVyU29jay5iaW5kKGFkZHIpCnNlcnZlclNvY2subGlzdGVuKDEpCgo8fGZpbV9ob2xlfD4KCiAgICB3aGlsZSBUcnVlOgogICAgICAgIHJlcXVlc3QgPSBzb2NrLnJlY3YoMTAyNDApCiAgICAgICAgdHByaW50KHJlcXVlc3QpCiAgICAgICAgaWYgbm90IHJlcXVlc3Q6IGJyZWFrCiAgICAgICAgcmVzcG9uc2UgPSBkcm9pZC5jYWxsKHJlcXVlc3QpCiAgICAgICAgdHByaW50KHJlc3BvbnNlKQogICAgICAgIHNvY2suc2VuZGFsbChyZXNwb25zZSkKCiAgICB0cHJpbnQoImNsb3NlIHRoZSBzb2NrZXQiKQogICAgc29jay5zaHV0ZG93bihTSFVUX1JEV1IpCiAgICBzb2NrLmNsb3NlKCkKCnNlcnZlclNvY2suc2h1dGRvd24oU0hVVF9SRFdSKQpzZXJ2ZXJTb2NrLmNsb3NlKCkKPHxmaW1fc3VmZml4fD4Kd2hpbGUgVHJ1ZToKICAgIHRwcmludCgiQ29ubmVjdGlvbiB3YWl0aW5nIGF0ICVzIiAlIChzZXJ2ZXJTb2NrKSkKICAgIHNvY2ssIGFkZHIgPSBzZXJ2ZXJTb2NrLmFjY2VwdCgpCiAgICB0cHJpbnQoIkNvbm5lY3Rpb24gYWNjZXB0ZWQgJXMiICUgKHNvY2spKQo8fGZpbV9lbmR8Pg=="]
["41d5ee2260ea3ce9e09a6c08973e2bef1837453f-4","41d5ee2260ea3ce9e09a6c08973e2bef1837453f","PHxmaW1fcHJlZml4fD4KIiIiClVuaXQgbWVtYmVyc2hpcCByZWxhdGVkIEFQSSBlbmRwb2ludHMuCiIiIgpmcm9tIGRqYW5nby5odHRwIGltcG9ydCBIdHRwNDA0Cgpmcm9tIHJlc3RfZnJhbWV3b3JrIGltcG9ydCB2aWV3c2V0cwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gcmVzdF9mcmFtZXdvcmsucGVybWlzc2lvbnMgaW1wb3J0IElzQXV0aGVudGljYXRlZApmcm9tIHJlc3RfZnJhbWV3b3JrLnJlc3BvbnNlIGltcG9ydCBSZXNwb25zZQoKZnJvbSAuLiBpbXBvcnQgbW9kZWxzCjx8ZmltX2VuZHw+"]
["511acf8c6991c70a50e04d09e1828c115dc412a3-2","511acf8c6991c70a50e04d09e1828c115dc412a3","PHxmaW1fcHJlZml4fD4KIyDtlZjtgqQg7YyA7JeQIOqwgOyehe2VmOuptCDsnKDri4jtj7wg65K366m07JeQIOydtOumhOydtCDtkZzsi5zrkKnri4jri6QsIAojIOq3uOugh+yngOunjCDsnKDri4jtj7zsnYAg7J2066aE7J2YIOuqqOuToCDquIDsnpDrpbwg64u07J2E66eM7YG8IOy2qeu2hO2eiCDtgazsp4Ag7JWK7J2EIOyImOuPhCDsnojsirXri4jri6QuCiMg7IKs7Jqp7J6Q7JeQ6rKMIOydtOumhOydhCDrrLvsirXri4jri6QuCiMg7IKs7Jqp7J6Q7JeQ6rKMIOyEseydhCDsnoXroKUg67Cb7Iq164uI64ukLgoKIyDsnbTrpoTsnbQgPCAxMCDsnbTqs6Ag7ISx7J20IDwgMTAg7J24IOqyveyasAojICAg7Jyg64uI7Y+87JeQIOyEseqzvCDsnbTrpoTsnYQg7J247IeECiMg7J2066aE7J20ID49IDEwIOydtOqzoCDshLHsnbQgPCAxMCDsnbgg6rK97JqwCiMgICDsnbTrpoTsnZgg7LKrIOydtOuLiOyFnOqzvCDshLEg7KCE7LK066W8IOyduOyHhO2VqeuLiOuLpC4KPHxmaW1faG9sZXw+CgojIOuLpOydjCDsnbTrpoTsnYQg7YWM7Iqk7Yq47ZWp64uI64ukLgojIOydtOumhCA6IFN1c2FuICDshLEgOiBJYmFjaAojIOqysOqzvCA6IFN1c2FuIEliYWNoCiMg7J2066aEIDogU3VzYW4gIOyEsSA6IFJlYWxseUxvbmdMYXN0TmFtZQojIOqysOqzvCA6IFN1c2FuIFIuCiMg7J2066aEIDogUmVhbGx5TG9uZ0ZpcnN0TmFtZSAg7ISxIDogSWJhY2gKIyDqsrDqs7wgOiBSLiBJYmFjaAojIOydtOumhCA6IFJlYWxseUxvbmdGaXJzdE5hbWUgIOyEsSA6IFJlYWxseUxvbmdMYXN0TmFtZQojIOqysOqzvCA6IFJlYWxseUxvbmdMYXN0TmFtZQo8fGZpbV9zdWZmaXh8PgojIOydtOumhOydtCA8IDEwIOydtOqzoCDshLHsnbQgPj0gMTAg7J24IOqyveyasAojICAg7KCE7LK0IOydtOumhOqzvCDshLHsnZgg7LKrIOydtOuLiOyFnOydhCDsnbjsh4Ttlanri4jri6QuCiMg7J2066aE7J20ID49IDEwIOydtOqzoCDshLHsnbQgPj0gMTAg7J24IOqyveyasAojICAg7ISx66eMIOyduOyHhO2VqeuLiOuLpC4KPHxmaW1fZW5kfD4="]
["5aa29d1765b27c21415ed695d9cf9c5923454fd1-3","5aa29d1765b27c21415ed695d9cf9c5923454fd1",{"$cut":{"chars":18512,"head":"PHxmaW1fcHJlZml4fD4KIyBpbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IG9zCmltcG9ydCBzdWJwcm9jZXNzCmZyb20gc2hsZXggaW1wb3J0IHF1b3RlLCBzcGxpdAoKZnJvbSBpbnZva2UgaW1wb3J0IHJ1biBhcyBsb2NhbApmcm9tIGludm9rZS5leGNlcHRpb25zIGltcG9ydCBFeGl0CmZyb20gaW52b2tlLnRhc2tzIGltcG9ydCB0YXNrCgojIFByb2Nlc3MgLmVudiBmaWxlCmlmIG9zLnBhdGguZXhpc3RzKCIuZW52Iik6CiAgICB3aXRoIG9wZW4oIi5lbnYiLCAiciIpIGFzIGY6CiAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCIjIik6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICB2YXIsIHZhbHVlID0gbGluZS5zdHJpcCgpLnNwbGl0KCI9IiwgMSkKICAgICAgICAgICAgb3MuZW52aXJvbi5zZXRkZWZhdWx0KHZhciwgdmFsdWUpCgpGUk9OVEVORCA9IG9zLmdldGVudigiRlJPTlRFTkQiLCAiZG9ja2VyIikKClBST0pFQ1RfRElSID0gIi9hcHAiCgpQUk9EVUNUSU9OX0FQUF9JTlNUQU5DRSA9ICJiZWlzLWRybi1hbHBoYSIKU1RBR0lOR19BUFBfSU5TVEFOQ0UgPSAiYmVpcy1kcm4tYWxwaGEiCgpMT0NBTF9NRURJQV9GT0xERVIgPSAibWVkaWEiCkxPQ0FMX0lNQUdFU19GT0xERVIgPSAibWVkaWEvb3JpZ2luYWxfaW1hZ2VzIgpMT0NBTF9EQVRBQkFTRV9OQU1FID0gUFJPSkVDVF9OQU1FID0gImRybmFscGhhIgpMT0NBTF9EQVRBQkFTRV9VU0VSTkFNRSA9ICJkcm5hbHBoYSIKCgojIyMjIyMjIyMjIyMKIyBQcm9kdWN0aW9uCiMjIyMjIyMjIyMjIwoKCmRlZiBkZXhlYyhjbWQsIHNlcnZpY2U9IndlYiIpOgogICAgcmV0dXJuIGxvY2FsKAogICAgICAgICJkb2NrZXItY29tcG9zZSBleGVjIC1UIHt9IGJhc2ggLWMge30iLmZvcm1hdChxdW90ZShzZXJ2aWNlKSwgcXVvdGUoY21kKSksCiAgICApCgoKZGVmIHN1ZGV4ZWMoY21kLCBzZXJ2aWNlPSJ3ZWIiKToKICAgIHJldHVybiBsb2NhbCgKICAgICAgICAiZG9ja2VyLWNvbXBvc2UgZXhlYyAtLXVzZXI9cm9vdCAtVCB7fSBiYXNoIC1jIHt9Ii5mb3JtYXQoCiAgICAgICAgICAgIHF1b3RlKHNlcnZpY2UpLCBxdW90ZShjbWQpCiAgICAgICAgKSwKICAgICkKCgpAdGFzawpkZWYgYnVpbGQoYyk6CiAgICAiIiIKICAgIEJ1aWxkIHRoZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCAoY2FsbCB0aGlzIGZpcnN0KQogICAgIiIiCiAgICBncm91cCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiaWQiLCAiLWduIl0sIGVuY29kaW5nPSJ1dGYtOCIpLnN0cmlwKCkKICAgIGxvY2FsKCJta2RpciAtcCBtZWRpYSBkYXRhYmFzZV9kdW1wcyIpCiAgICBsb2NhbCgiY2hvd24gLVIgJFVTRVI6e30gbWVkaWEgZGF0YWJhc2VfZHVtcHMiLmZvcm1hdChncm91cCkpCiAgICBsb2NhbCgiY2htb2QgLVIgNzc1IG1lZGlhIGRhdGFiYXNlX2R1bXBzIikKICAgIGlmIEZST05URU5EID09ICJsb2NhbCI6CiAgICAgICAgbG9jYWwoImRvY2tlci1jb21wb3NlIHVwIC1kIC0tYnVpbGQgd2ViIikKICAgIGVsc2U6CiAgICAgICAgbG9jYWwoImRvY2tlci1jb21wb3NlIHVwIC1kIC0tYnVpbGQgd2ViIGZyb250ZW5kIikKICAgICAgICBkZXhlYygibnBtIGNpIiwgc2VydmljZT0iZnJvbnRlbmQiKQogICAgbG9jYWwoImRvY2tlci1jb21wb3NlIHN0b3AiKQogICAgcHJpbnQoIlByb2plY3QgYnVpbHQ6IG5vdyBydW4gJ2ZhYiBzdGFydCciKQoKCkB0YXNrCmRlZiBzdGFydChjKToKICAgICIiIgogICAgU3RhcnQgdGhlIGRldmVsb3BtZW50IGVudmlyb25tZW50CiAgICAiIiIKICAgIGlmIEZST05URU5EID09ICJsb2NhbCI6CiAgICAgICAgbG9jYWwoImRvY2tlci1jb21wb3NlIHVwIC1kIHdlYiIpCiAgICBlbHNlOgogICAgICAgIGxvY2FsKCJkb2NrZXItY29tcG9zZSB1cCAtZCB3ZWIgZnJvbnRlbmQiKQoKICAgIHByaW50KAogICAgICAgICJVc2UgYGZhYiBzaGAgdG8gZW50ZXIgdGhlIHdlYiBjb250YWluZXIgYW5kIHJ1biBgLi9tYW5hZ2UucHkgcnVuc2VydmVyIDA6ODAwMGAiCiAgICApCiAgICBpZiBGUk9OVEVORCAhPSAibG9jYWwiOgogICAgICAgIHByaW50KCJVc2UgYGZhYiBucG0gc3RhcnRgIHRvIHJ1biB0aGUgZnJvbnQtZW5kIHRvb2xpbmciKQoKCkB0YXNrCmRlZiBzdG9wKGMpOgogICAgIiIiCiAgICBTdG9wIHRoZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudAogICAgIiIiCiAgICBsb2NhbCgiZG9ja2VyLWNvbXBvc2Ugc3RvcCIpCgoKQHRhc2sKZGVmIHJlc3RhcnQoYyk6CiAgICAiIiIKICAgIFJlc3RhcnQgdGhlIGRldmVsb3BtZW50IGVudmlyb25tZW50CiAgICAiIiIKICAgIHN0b3AoYykKICAgIHN0YXJ0KGMpCgoKQHRhc2sKZGVmIGRlc3Ryb3koYyk6CiAgICAiIiIKICAgIERlc3Ryb3kgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgY29udGFpbmVycyAoZGF0YWJhc2Ugd2lsbCBsb3N0ISkKICAgICIiIgogICAgbG9jYWwoImRvY2tlci1jb21wb3NlIGRvd24iKQoKCkB0YXNrCmRlZiBzaChjKToKICAgICIiIgogICAgUnVuIGJhc2ggaW4gdGhlIGxvY2FsIHdlYiBjb250YWluZXIKICAgICIiIgogICAgc3VicHJvY2Vzcy5ydW4oWyJkb2NrZXItY29tcG9zZSIsICJleGVjIiwgIndlYiIsICJiYXNoIl0pCgoKQHRhc2sKZGVmIHNoX3Jvb3QoYyk6CiAgICAiIiIKICAgIFJ1biBiYXNoIGFzIHJvb3QgaW4gdGhlIGxvY2FsIHdlYiBjb250YWluZXIKICAgICIiIgogICAgc3VicHJvY2Vzcy5ydW4oWyJkb2NrZXItY29tcG9zZSIsICJleGVjIiwgIi0tdXNlcj1yb290IiwgIndlYiIsICJiYXNoIl0pCgoKQHRhc2sKZGVmIG5wbShjLCBjb21tYW5kLCBkYWVtb25pc2U9RmFsc2UpOgogICAgIiIiCiAgICBSdW4gbnBtIGluIHRoZSBmcm9udGVuZCBjb250YWluZXIgRS5HIGZhYiBucG0gJ3Rlc3QnCiAgICAiIiIKICAgIGV4ZWNfYXJncyA9IFtdCiAgICBpZiBkYWVtb25pc2U6CiAgICAgICAgZXhlY19hcmdzLmFwcGVuZCgiLWQiKQogICAgc3VicHJvY2Vzcy5ydW4oCiAgICAgICAgWyJkb2NrZXItY29tcG9zZSIsICJleGVjIl0gKyBleGVjX2FyZ3MgKyBbImZyb250ZW5kIiwgIm5wbSJd"}}]
["cfb0853e0bbc848bd5e002920e244a4556cecd00-3","cfb0853e0bbc848bd5e002920e244a4556cecd00","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KYSwgYiwgYyA9IG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkKaWYgYStiID49IGM6CiAgICBhbnMgPSAnWWVzJwplbHNlOgo8fGZpbV9lbmR8Pg=="]
["9981701ba1d3685f6d3cdccc795dab4ab4b062e1-1","9981701ba1d3685f6d3cdccc795dab4ab4b062e1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBkb2NrZXIKaW1wb3J0IHNodXRpbAoKaW1wb3J0IHpldHVwdG9vbHMKZnJvbSByZWVxdWlyZW1lbnRzIGltcG9ydCBSZXF1aXJlbWVudAoKUkVRVUlSRU1FTlRTID0gWwogICAgUmVxdWlyZW1lbnQoImRvY2tlciIsIFsiZG9ja2VyIiwgIi12Il0pLAogICAgUmVxdWlyZW1lbnQoInJlcHJlcHJvIiwgWyJyZXByZXBybyIsICItLXZlcnNpb24iXSksCiAgICBSZXF1aXJlbWVudCgiZ3BnIiwgWyJncGciLCAiLS12ZXJzaW9uIl0pLAogICAgUmVxdWlyZW1lbnQoIkdpdEh1YiBDTEkiLCBbImdoIiwgIi0tdmVyc2lvbiJdKQpdCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZvciByZXF1aXJlbWVudCBpbiBSRVFVSVJFTUVOVFM6CiAgICByZXF1aXJlbWVudC5jaGVjaygpCgoKPHxmaW1fZW5kfD4="]
["6b9ebdf27a2f5992106e16cf4f3757862dfe265f-3","6b9ebdf27a2f5992106e16cf4f3757862dfe265f","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBDcmVhdGVkIGJ5IE1lY2hBdml2CiMgS2luZXNpcyBJbnRyb2R1Y3Rpb24KIyBNYXAgSUQgOjogMzMxMDAyMzAwCiMgU2Nob29sIGZvciB0aGUgR2lmdGVkICA6OiAyLTEgQ2xhc3Nyb29tCjx8ZmltX2VuZHw+"]
["976eefb4e499f6f2ec13d318d3f9547c4a6411f4-2","976eefb4e499f6f2ec13d318d3f9547c4a6411f4","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uc2hvcnRjdXRzIGltcG9ydCByZW5kZXIKZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgdmlld3NldHMKZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgKGdlbmVyaWNzLHBlcm1pc3Npb25zLHJlbmRlcmVycywpCgpmcm9tIGNvbW1vbmluZm8ucGVybWlzc2lvbnMgaW1wb3J0IElzT3duZXJPclJlYWRPbmx5LEN1c3RvbURqYW5nb01vZGVsUGVybWlzc2lvbnMKCmZyb20gLm1vZGVscyBpbXBvcnQgU3RnSGVhbHRoRmFjaWxpdHkKZnJvbSBpbmRpY2F0b3JzLm1vZGVscyBpbXBvcnQgRmFjdERhdGFJbmRpY2F0b3IKZnJvbSAud2l6YXJkIGltcG9ydCBEYXRhV2l6YXJkRmFjaWxpdHlTZXJpYWxpemVyCmZyb20gLndpemFyZCBpbXBvcnQgRGF0YVdpemFyZEZhY2lsaXR5U2VyaWFsaXplcgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgU3RnSGVhbHRoRmFjaWxpdHlWaWV3U2V0KHZpZXdzZXRzLk1vZGVsVmlld1NldCk6CiAgICBxdWVyeXNldCA9IFN0Z0hlYWx0aEZhY2lsaXR5Lm9iamVjdHMuYWxsKCkKICAgIHNlcmlhbGl6ZXJfY2xhc3MgPSBTdGdIZWFsdGhGYWNpbGl0eVNlcmlhbGl6ZXIKPHxmaW1fZW5kfD4="]
["5af35fe1ff739e15b6ae5f0f340084c5838b5b87-1","5af35fe1ff739e15b6ae5f0f340084c5838b5b87","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMC4xMCBvbiAyMDIxLTAyLTE3IDA2OjQ0Cgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucywgbW9kZWxzCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCjx8ZmltX2hvbGV8PgogICAgXQoKICAgIG9wZXJhdGlvbnMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdhZGRyZXNzJywKICAgICAgICAgICAgbmFtZT0ncG9zdF9jb2RlJywKICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUsIHZlcmJvc2VfbmFtZT0nUG9zdCBjb2RlJyksCiAgICAgICAgKSwKICAgIF0KPHxmaW1fc3VmZml4fD4KICAgICAgICAoJ2FwcGxpY2F0aW9ucycsICcwMDE5X2FwcGxpY2F0aW9uX2FwcGxpY2FudF90eXBlJyksCjx8ZmltX2VuZHw+"]
["3219cca4071bd70f25b5797af93e8d7fc7db1b5d-1","3219cca4071bd70f25b5797af93e8d7fc7db1b5d","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gLmVudmlyb25tZW50IGltcG9ydCBFbnZpcm9ubWVudCwgRW52aXJvbm1lbnREaWZmICAjIG5vcWE6IEY0MDEKZnJvbSAudmVyc2lvbiBpbXBvcnQgX192ZXJzaW9uX18gICMgbm9xYTogRjQwMQo8fGZpbV9lbmR8Pg=="]
["3219cca4071bd70f25b5797af93e8d7fc7db1b5d-4","3219cca4071bd70f25b5797af93e8d7fc7db1b5d","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gLmVudmlyb25tZW50IGltcG9ydCBFbnZpcm9ubWVudCwgRW52aXJvbm1lbnREaWZmICAjIG5vcWE6IEY0MDEKZnJvbSAudmVyc2lvbiBpbXBvcnQgX192ZXJzaW9uX18gICMgbm9xYTogRjQwMQoKX19hdXRob3JfXyA9ICIiIkplZmZyZXkgTWNMYXJ0eSIiIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cl9fZW1haWxfXyA9ICdqZWZmcmV5Lm1jbGFydHlAZ21haWwuY29tJwo8fGZpbV9lbmR8Pg=="]
["d8a9c2251631c9b59e6ef4e09bf81e4fe06fc445-4","d8a9c2251631c9b59e6ef4e09bf81e4fe06fc445","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCmZyb20gZGphbmdvLnV0aWxzLnRyYW5zbGF0aW9uIGltcG9ydCBnZXR0ZXh0X2xhenkgYXMgXwoKZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgc2VyaWFsaXplcnMKZnJvbSByZXN0X2ZyYW1ld29yay5leGNlcHRpb25zIGltcG9ydCBWYWxpZGF0aW9uRXJyb3IKCmZyb20gZ2dvbmdzdWwubWVtYmVyLm1vZGVscyBpbXBvcnQgTWVtYmVyCmZyb20gZ2dvbmdzdWwubWVtYmVyLnNlcmlhbGl6ZXJzIGltcG9ydCBNZW1iZXJTZXJpYWxpemVyCmZyb20gZ2dvbmdzdWwucGFydG5lci5tb2RlbHMgaW1wb3J0IFBhcnRuZXIKZnJvbSBnZ29uZ3N1bC5wYXJ0bmVyLnNlcmlhbGl6ZXJzIGltcG9ydCBQYXJ0bmVyU2hvcnRJbmZvU2VyaWFsaXplcgpmcm9tIGdnb25nc3VsLnZpc2l0YXRpb24ubW9kZWxzIGltcG9ydCBWaXNpdGF0aW9uCgoKY2xhc3MgVmlzaXRhdGlvblNlcmlhbGl6ZXIoc2VyaWFsaXplcnMuTW9kZWxTZXJpYWxpemVyKToKICAgIGNlcnRfbnVtID0gc2VyaWFsaXplcnMuQ2hhckZpZWxkKAogICAgICAgIHJlcXVpcmVkPVRydWUsIGFsbG93X251bGw9RmFsc2UsIG1heF9sZW5ndGg9MTAsIHdyaXRlX29ubHk9VHJ1ZQogICAgKQoKICAgIGRlZiB2YWxpZGF0ZShzZWxmLCBhdHRyczogZGljdCk6CiAgICAgICAgYXR0cnNbIm1lbWJlciJdID0gc2VsZi5jb250ZXh0WyJyZXF1ZXN0Il0udXNlcgo8fGZpbV9ob2xlfD4KICAgICAgICBpZiBub3QgcGFydG5lci5pc19hY3RpdmU6CiAgICAgICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcihfKCLtmZzshLHtmZQg65CY7KeAIOyViuydgCDsl4XssrTsnoXri4jri6QuIikpCgogICAgICAgIGNlcnRfbnVtID0gYXR0cnNbImNlcnRfbnVtIl0KICAgICAgICBpZiBwYXJ0bmVyLmNlcnRfbnVtICE9IGNlcnRfbnVtOgogICAgICAgICAgICByYWlzZSBWYWxpZGF0aW9uRXJyb3IoXygi7J247Kad67KI7Zi46rCAIOydvOy5mO2VmOyngCDslYrsirXri4jri6QuIikpCiAgICAgICAgZGVsIGF0dHJzWyJjZXJ0X251bSJdCgogICAgICAgICMg7ZWcIOyXheyytOuKlCDtlZjro6jsl5Ag7ZWc67KI66eMIOyduOymnSDtlaAg7IiYIOyeiOydjAogICAgICAgIHRvZGF5X2RhdGV0aW1lID0gdGltZXpvbmUubm93KCkucmVwbGFjZSgKICAgICAgICAgICAgaG91cj0wLCBtaW51dGU9MCwgc2Vjb25kPTAsIG1pY3Jvc2Vjb25kPTAKICAgICAgICApCiAgICAgICAgaWYgbWVtYmVyLnZpc2l0YXRpb25zLmZpbHRlcigKICAgICAgICAgICAgcGFydG5lcj1wYXJ0bmVyLCBjcmVhdGVkX29uX19ndD10b2RheV9kYXRldGltZQogICAgICAgICkuZXhpc3RzKCk6CiAgICAgICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcihfKCLsmKTripgg7J2066+4IOuwqeusuO2VnCDsl4XssrTsnoXri4jri6QuIikpCgogICAgICAgIHJldHVybiBhdHRycwoKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgbW9kZWwgPSBWaXNpdGF0aW9uCiAgICAgICAgZmllbGRzID0gWyJpZCIsICJwYXJ0bmVyIiwgIm1lbWJlciIsICJjZXJ0X251bSJdCiAgICAgICAgZXh0cmFfa3dhcmdzID0gewogICAgICAgICAgICAicGFydG5lciI6IHsicmVxdWlyZWQiOiBUcnVlLCAiYWxsb3dfbnVsbCI6IEZhbHNlfSwKICAgICAgICAgICAgIm1lbWJlciI6IHsicmVxdWlyZWQiOiBUcnVlLCAiYWxsb3dfbnVsbCI6IEZhbHNlLCAid3JpdGVfb25seSI6IFRydWV9LAogICAgICAgIH0KCgpjbGFzcyBWaXNpdGF0aW9uSW5mb1NlcmlhbGl6ZXIoc2VyaWFsaXplcnMuTW9kZWxTZXJpYWxpemVyKToKICAgIG1lbWJlciA9IE1lbWJlclNlcmlhbGl6ZXIocmVhZF9vbmx5PVRydWUpCiAgICBwYXJ0bmVyID0gUGFydG5lclNob3J0SW5mb1NlcmlhbGl6ZXIocmVhZF9vbmx5PVRydWUpCgogICAgY2xhc3MgTWV0YToKICAgICAgICBtb2RlbCA9IFZpc2l0YXRpb24KICAgICAgICBmaWVsZHMgPSBbImlkIiwgIm1lbWJlciIsICJwYXJ0bmVyIiwgImlzX3Jldmlld2VkIiwgImNyZWF0ZWRfb24iXQo8fGZpbV9zdWZmaXh8PgogICAgICAgIG1lbWJlcjogTWVtYmVyID0gYXR0cnNbIm1lbWJlciJdCgogICAgICAgICMgcGFydG5lciBwYXNzd29yZCB2YWxpZGF0aW9uCiAgICAgICAgcGFydG5lcjogUGFydG5lciA9IGF0dHJzWyJwYXJ0bmVyIl0KPHxmaW1fZW5kfD4="]
["41d58c42088694852a946ebc4daab8204e6b6957-1","41d58c42088694852a946ebc4daab8204e6b6957","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2xvY2FsL2Jpbi9weXRob24zCjx8ZmltX2hvbGV8PgogICAgJycnIAogICAgTWV0aG9kIHJldHVybmluZyBhIHN0cmluZyBzYXlpbmcgaGVsbG8gdG8gCiAgICB0aGUgbmFtZSBwcm92aWRlZCBhcyBwYXJhbWV0ZXIuCiAgICBBcmc6CiAgICAgICAgZnJpZW5kX25hbWUgOiBOYW1lIHRvIHNheSBoZWxsbyB0by4KICAgIFJldHVybjoKICAgICAgICBTdHJpbmcgc2F5aW5nIDogSGVsbG8gZnJpZW5kX25hbWUuCiAgICAnJycKICAgIHJldHVybiAiSGVsbG8sIHt9ISIuZm9ybWF0KGZyaWVuZF9uYW1lKQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHByaW50KCJ7fSIuZm9ybWF0KGhlbGxvKCJCcnVubyIpKSkKICAgIHByaW50KCJ7fSIuZm9ybWF0KGhlbGxvKCIiKSkpCjx8ZmltX3N1ZmZpeHw+CgojIG5vaW5zcGVjdGlvbiBQeVVudXNlZExvY2FsCiMgZnJpZW5kX25hbWUgPSB1bmljb2RlIHN0cmluZwpkZWYgaGVsbG8oZnJpZW5kX25hbWUpOgo8fGZpbV9lbmR8Pg=="]
["d8ad0007c2a851d6f26fa935d6cfd4d3a2c531db-2","d8ad0007c2a851d6f26fa935d6cfd4d3a2c531db","PHxmaW1fcHJlZml4fD4KIyAoYykgMjAxOSBPcGVuIFJpc2sgKGh0dHBzOi8vd3d3Lm9wZW5yaXNrbWFuYWdlbWVudC5jb20pCiMKIyBUaGlzIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSAyLjAgbGljZW5zZSBhIGNvcHkgb2Ygd2hpY2ggaXMgaW5jbHVkZWQKIyBpbiB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgY291cnNlLiBUaGlzIGlzIG5vdHdpdGhzdGFuZGluZyBhbnkgbGljZW5zZXMgb2YKIyB0aGlyZC1wYXJ0eSBzb2Z0d2FyZSBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbi4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4KIyBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyCiMgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsCiMgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgc2VhYm9ybiBhcyBzbnMKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAoKIyBMb2FkIHRoZSBkYXRhIGZyb20gaGRmIGZpbGUKZGYgPSBwZC5yZWFkX2hkZignZ2VybWFuX2NyZWRpdC5oNScsICdkZicpCgojIHNlbGVjdCB0aGUgbnVtZXJpY2FsIHZhcmlhYmxlcwpudW1fZGYgPSBkZi5zZWxlY3RfZHR5cGVzKGluY2x1ZGU9J2ludDY0JykKbnVtX2xpc3QgPSBsaXN0KG51bV9kZi5jb2x1bW5zKQpwcmludChudW1fbGlzdCkKCiMgcGxvdCBoaXN0b2dyYW1zIGluIHRocmVlIGNvbHVtbnMKcm93X2NvdW50ID0gMSArIGludChsZW4obnVtX2xpc3QpIC8gMykKZiwgYXhlcyA9IHBsdC5zdWJwbG90cyhyb3dfY291bnQsIDMsIGZpZ3NpemU9KDcsIDcpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZvciBhdHRyIGluIG51bV9saXN0OgogICAgaSA9IG51bV9saXN0LmluZGV4KGF0dHIpCiAgICBheF9jb2wgPSBpICUgMwogICAgIyBpZiBheF9jb2wgPT0gMDoKPHxmaW1fZW5kfD4="]
["51aaea23f990cb72437fc06a8272ec20854432e4-3","51aaea23f990cb72437fc06a8272ec20854432e4","PHxmaW1fcHJlZml4fD4KIyBnaXRTY3JhcGVyLnB5CiMgR2l0SHViIFNjcmFwaW5nIFRvb2wKIyBXcml0dGVuIGJ5OiBEaXZha2FyIExha2hlcmEKIyBUZWFtIEJhYmFZYWdhIChOSVQgVXR0YXJha2hhbmQpCgpmcm9tIGJzNCBpbXBvcnQgQmVhdXRpZnVsU291cAppbXBvcnQgcmVxdWVzdHMKY2xhc3MgZ2l0U2NyYXBlcigpOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYubmFtZT0iIgogICAgICAgIHNlbGYuaHRtbD0iIgogICAgICAgIHNlbGYucmVwb3M9W10KICAgICAgICBzZWxmLnN0YXR1cz0wCgogICAgZGVmIGxvYWRQcm9maWxlKHNlbGYsbGluayk6CiAgICAgICAgcHJpbnQoIkdpdFNjcmFwZXIgU3RhcnRpbmcuLi4iKQogICAgICAgIHNlbGYubmFtZT1saW5rCiAgICAgICAgcmF3X3BhZ2U9cmVxdWVzdHMuZ2V0KGxpbmspOwogICAgICAgIHJhd19yZXA9cmVxdWVzdHMuZ2V0KGxpbmsrIj90YWI9cmVwb3NpdG9yaWVzIikKICAgICAgICBpZihyYXdfcGFnZS5zdGF0dXNfY29kZSE9MjAwIG9yIHJhd19yZXAuc3RhdHVzX2NvZGUgIT0yMDApOgogICAgICAgICAgICBwcmludCgiR2l0U2NyYXBlcjogUmVxdWVzdCBGYWlsZWQuLiBHb3QgIitzdHIocmF3X3BhZ2Uuc3RhdHVzX2NvZGUpKQogICAgICAgICAgICBzZWxmLnN0YXR1cz1yYXdfcGFnZS5zdGF0dXNfY29kZQogICAgICAgICAgICByZXR1cm4gc2VsZi5zdGF0dXMKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLmh0bWw9QmVhdXRpZnVsU291cChyYXdfcGFnZS5jb250ZW50LCdodG1sLnBhcnNlcicpCiAgICAgICAgICAgIHJlcFN0YXJ0PUJlYXV0aWZ1bFNvdXAocmF3X3JlcC5jb250ZW50LCdodG1sLnBhcnNlcicpCiAgICAgICAgICAgIHRlbXA9cmVwU3RhcnQuZmluZCgiZGl2IixhdHRycz17J2NsYXNzJzoncGFnaW5hdGUtY29udGFpbmVyJ30pCiAgICAgICAgICAgIGlmIHRlbXAgPT0gTm9uZSA6CiAgICAgICAgICAgICAgICBzZWxmLnJlcG9zKz1bcmVwU3RhcnRdCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwcmludCgiRmV0Y2hpbmcgUmVwbyBQYWdlcy4uIikKICAgICAgICAgICAgICAgIHNlbGYucmVwb3MrPVtyZXBTdGFydF0KICAgICAgICAgICAgICAgIGFhPTAKICAgICAgICAgICAgICAgIGZsYWc9MAogICAgICAgICAgICAgICAgdXA9MAogICAgICAgICAgICAgICAgd2hpbGUoMSk6CiAgICAgICAgICAgICAgICAgICAgdGVtcDI9dGVtcC5maW5kX2FsbCgiYSIsYXR0cnM9eydjbGFzcyc6J2J0biBidG4tb3V0bGluZSBCdG5Hcm91cC1pdGVtJ30pCiAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gdGVtcDI6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGkuZ2V0X3RleHQoKT09Ik5leHQiIGFuZCBpWydocmVmJ10gIT0gIiIpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWE9aVsnaHJlZiddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZz0xCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChhYSkKICAgICAgICAgICAgICAgICAgICBpZiBmbGFnPT0wOgogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBmbGFnPTAKICAgICAgICAgICAgICAgICAgICByYXdfcmVwPXJlcXVlc3RzLmdldChhYSkKICAgICAgICAgICAgICAgICAgICByZXBTdGFydD1CZWF1dGlmdWxTb3VwKHJhd19yZXAuY29udGVudCwnaHRtbC5wYXJzZXInKQogICAgICAgICAgICAgICAgICAgIHRlbXA9cmVwU3RhcnQuZmluZCgiZGl2IixhdHRycz17J2NsYXNzJzoncGFnaW5hdGUtY29udGFpbmVyJ30pCiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXBvcys9W3JlcFN0YXJ0XQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcHJpbnQoIlJlcG8gUGFnZSBGZXRjaCBEb25lLi5Hb3QgIitzdHIobGVuKHNlbGYucmVwb3MpKSkKICAgICAgICBwcmludCgiR2l0U2NyYXBlcjogTG9hZCBDb21wbGV0ZS4uIikKICAgIAo8fGZpbV9lbmR8Pg=="]
["2e4146c1097ffa914d4f4c9615516b6e75531784-2","2e4146c1097ffa914d4f4c9615516b6e75531784","PHxmaW1fcHJlZml4fD4KIyByYW5rIGFsbCBzdGF0aW9ucyBiYXNlZCBvbiByaXNrIGxldmVsCgppbXBvcnQgbWF0cGxvdGxpYi5kYXRlcwoKaW1wb3J0IGRhdGV0aW1lCmZyb20gZmxvb2RzeXN0ZW0uc3RhdGlvbmRhdGEgaW1wb3J0IGJ1aWxkX3N0YXRpb25fbGlzdCwgdXBkYXRlX3dhdGVyX2xldmVscwpmcm9tIGZsb29kc3lzdGVtLmFuYWx5c2lzIGltcG9ydCBwcmVkaWN0X2Z1dHVyZV9sZXZlbApmcm9tIGZsb29kc3lzdGVtLmRhdGFmZXRjaGVyIGltcG9ydCBmZXRjaF9tZWFzdXJlX2xldmVscwoKc3RhdGlvbnMgPSBidWlsZF9zdGF0aW9uX2xpc3QoKQp1cGRhdGVfd2F0ZXJfbGV2ZWxzKHN0YXRpb25zKQoKCmRlZiByaXNrX2xldmVsKHN0YXRpb24pOgogICAgdHJ5OgogICAgICAgIGRhdGVzLCBsZXZlbHMgPSBmZXRjaF9tZWFzdXJlX2xldmVscygKICAgICAgICAgICAgc3RhdGlvbi5tZWFzdXJlX2lkLCBkdD1kYXRldGltZS50aW1lZGVsdGEoZGF5cz0zKQogICAgICAgICkKICAgICAgICBsZXZlbF90b21tb3JvdyA9IHByZWRpY3RfZnV0dXJlX2xldmVsKGRhdGVzLCBsZXZlbHMpWzFdCiAgICAgICAgcmVhbHRpdmVfbGV2ZWxfdG9tbW9yb3cgPSAobGV2ZWxfdG9tbW9yb3cgLSBzdGF0aW9uLnR5cGljYWxfcmFuZ2VbMF0pIC8gKAogICAgICAgICAgICBzdGF0aW9uLnR5cGljYWxfcmFuZ2VbMV0gLSBzdGF0aW9uLnR5cGljYWxfcmFuZ2VbMF0KICAgICAgICApCiAgICBleGNlcHQ6CiAgICAgICAgcHJpbnQoInNvbWV0aGluZyBoYXBwZW5lZCIpCiAgICAgICAgcmVhbHRpdmVfbGV2ZWxfdG9tbW9yb3cgPSAxCgogICAgY3VycmVudF93YXRlcl9sZXZlbCA9IHN0YXRpb24ucmVsYXRpdmVfd2F0ZXJfbGV2ZWwoKSBvciAxCjx8ZmltX2hvbGV8PgogICAgIyBpZiBleHRyYXBlcmxhdGVkIHdpbGwgZmxvb2Qgd2l0aGluIHRpbWUgWCBtYWtlIHNldmVyZQogICAgZWxpZiByZWFsdGl2ZV9sZXZlbF90b21tb3JvdyA+IDEuOToKICAgICAgICByZXR1cm4gIlNldmVyZSIKICAgICMgaWYgZXh0cmFwb2xhdGVkIHdpbGwgZmxvb2Qgd2l0aGluIHRpbWUgWSBtYWtlIGhpZ2gKICAgIGVsaWYgcmVhbHRpdmVfbGV2ZWxfdG9tbW9yb3cgPiAxLjU6CiAgICAgICAgcmV0dXJuICJIaWdoIgogICAgZWxpZiBjdXJyZW50X3dhdGVyX2xldmVsID4gMS42OgogICAgICAgIHJldHVybiAiSGlnaCIKICAgIGVsaWYgY3VycmVudF93YXRlcl9sZXZlbCA+IDEuNDoKICAgICAgICByZXR1cm4gIk1vZGVyYXRlIgogICAgZWxzZToKICAgICAgICByZXR1cm4gIkxvdyIKCgpmb3Igc3RhdGlvbiBpbiBzdGF0aW9uczoKICAgIHByaW50KCJSaXNrIExldmVsIGZvciIsIHN0YXRpb24ubmFtZSwgImlzIiwgcmlza19sZXZlbChzdGF0aW9uKSkKPHxmaW1fc3VmZml4fD4KCiAgICAjIGlmIGFscmVhZHkgZmxvb2RlZCwgZWcgd2F0ZXIgbGV2ZWwgbW9yZSB0aGUgZG91YmxlIHR5cGljYWwsIHJhbmsgc2V2ZXJlCiAgICBpZiBjdXJyZW50X3dhdGVyX2xldmVsID4gMjoKICAgICAgICByZXR1cm4gIlNldmVyZSIKPHxmaW1fZW5kfD4="]
["da9228e61242572969f33f13830f39528a90df68-3","da9228e61242572969f33f13830f39528a90df68","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBmaW5kIGEgY2VpbGluZyB2YWx1ZSBmb3IgeCAtIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIG5vdCBsZXNzIHRoYW4geCAtIHdlIGNhbGwgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIGZyb20gdGhlIG1hdGggbW9kdWxlOiBtYXRoLmNlaWwoeCkuCiMgVGhlIHN5bnRheCBmb3IgY2FsbGluZyBmdW5jdGlvbnMgZnJvbSBtb2R1bGVzIGlzIGFsd2F5cyB0aGUgc2FtZTogbW9kdWxlX25hbWUuZnVuY3Rpb25fbmFtZShhcmd1bWVudF8xLCBhcmd1bWVudF8yLCAuLi4pCgojZmluZCB0aGUgY2VpbGluZyB2YWx1ZSBvZiBhIGdpdmVuIG51bWJlcgo8fGZpbV9lbmR8Pg=="]
["c1534a9e6b65c219611ddda23671aafd4cab5684-1","c1534a9e6b65c219611ddda23671aafd4cab5684","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmNvbnRyaWIuYXV0aCBpbXBvcnQgZ2V0X3VzZXJfbW9kZWwKZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLmRlY29yYXRvcnMgaW1wb3J0IGxvZ2luX3JlcXVpcmVkCiMgZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLnRva2VucyBpbXBvcnQgUGFzc3dvcmRSZXNldFRva2VuR2VuZXJhdG9yCmZyb20gZGphbmdvLmNvcmUubWFpbCBpbXBvcnQgc2VuZF9tYWlsCmZyb20gZGphbmdvLnNob3J0Y3V0cyBpbXBvcnQgZ2V0X29iamVjdF9vcl80MDQsIHJlZGlyZWN0LCByZW5kZXIKZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcmV2ZXJzZV9sYXp5CmZyb20gZGphbmdvLnZpZXdzLmdlbmVyaWMgaW1wb3J0IENyZWF0ZVZpZXcKCmZyb20gYXBwcy51c2Vycy5mb3JtcyBpbXBvcnQgQ3JlYXRpb25Gb3JtLCBGb3JtVXNlcnNFZGl0CgojINC90LDRgdGC0YDQsNC40LLQsNC10Lwg0LvQvtCz0LjRgNC+0LLQsNC90LjQtSDQsiDQv9GA0LjQu9C+0LbQtdC90LjQuCBVc2Vycwp1c2Vyc19sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiVXNlcnMiKQp1c2Vyc19sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQpmaCA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoZmlsZW5hbWU9InVzZXJzLmxvZyIsIG1vZGU9IncrIikKZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyUoYXNjdGltZSlzIC0gJShuYW1lKXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMnKQpmaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQp1c2Vyc19sb2dnZXIuYWRkSGFuZGxlcihmaCkKClVzZXIgPSBnZXRfdXNlcl9tb2RlbCgpCgoKY2xhc3MgU2lnblVwKENyZWF0ZVZpZXcpOgogICAgdGVtcGxhdGVfbmFtZSA9ICd1c2Vycy9yZWcuaHRtbCcKICAgIGZvcm1fY2xhc3MgPSBDcmVhdGlvbkZvcm0KICAgIHN1Y2Nlc3NfdXJsID0gcmV2ZXJzZV9sYXp5KAogICAgICAgICJsb2dpbiIpCgogICAgZGVmIGZvcm1fdmFsaWQoc2VsZiwgZm9ybSk6CiAgICAgICAgIiIiSWYgdGhlIGZvcm0gaXMgdmFsaWQsIHNhdmUgdGhlIGFzc29jaWF0ZWQgbW9kZWwuIiIiCiAgICAgICAgc2VsZi5vYmplY3QgPSBmb3JtLnNhdmUoKQogICAgICAgICMgY29uZmlybWF0aW9uX2NvZGUgPSBQYXNzd29yZFJlc2V0VG9rZW5HZW5lcmF0b3IoKQogICAgICAgIHRyeToKICAgICAgICAgICAgc2VuZF9tYWlsKAogICAgICAgICAgICAgICAgZifQktGLINC30LDRgNC10LPQuNGB0YLRgNC40YDQvtCy0LDQu9C40YHRjCDQvdCwINGB0LDQudGC0LUge3NldHRpbmdzLlNJVEVfTkFNRX0nLAogICAgICAgICAgICAgICAgJ9Cf0L7Qt9C00YDQsNCy0LvRj9C10LwsINCS0LDQvCDQvtGC0LrRgNGL0YLRiyDRgNC10YHRg9GA0YHRiyDQtNC70Y8g0LfQsNGA0LXQs9C40YHRgtGA0LjRgNC+0LLQsNC90L3Ri9GFJwogICAgICAgICAgICAgICAgJyDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuS4gJywKICAgICAgICAgICAgICAgIHNldHRpbmdzLkVNQUlMX0hPU1RfVVNFUiwKICAgICAgICAgICAgICAgIFtzZWxmLm9iamVjdC5lbWFpbF0sCiAgICAgICAgICAgICAgICBmYWlsX3NpbGVudGx5PUZhbHNlLAogICAgICAgICAgICApCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICB1c2Vyc19sb2dnZXIuZXJyb3IoJ9Cg0LXQs9C40YHRgtGA0LDRhtC40Y8g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPIHVzZXJuYW1lOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmJ3tzZWxmLm9iamVjdC51c2VybmFtZX0uJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ9Ce0YjQuNCx0LrQsCDQvtGC0L/RgNCw0LLQutC4INC/0LjRgdGM0LzQsCDQvdCwINCw0LTRgNC10YE6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYne3NlbGYub2JqZWN0LmVtYWlsfSB7ZS5hcmdzWy0xXX0nKQogICAgICAgIHJldHVybiBzdXBlcigpLmZvcm1fdmFsaWQoZm9ybSkKCgpAbG9naW5fcmVxdWlyZWQKZGVmIHVzZXJzX2FkbWluKHJlcXVlc3QpOgogICAgY291bnQgPSBVc2VyLm9iamVjdHMuYWxsKCkKICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgJ3VzZXJzL3VzZXJzX2FkbWluLmh0bWwnLAogICAgICAgICAgICAgICAgICB7J2NvdW50JzogY291bnR9CiAgICAgICAgICAgICAgICAgICkKCgpAbG9naW5fcmVxdWlyZWQKZGVmIHVzZXJzX2FkbWluX2VkaXQocmVxdWVzdCwgdXNlcl9pZCk6CiAgICBpZiBub3QgcmVxdWVzdC51c2VyLmlzX3N0YWZmOgogICAgICAgIHJldHVybiByZWRpcmVjdCgnaW5kZXgnKQogICAgdXNlciA9IGdldF9vYmplY3Rfb3JfNDA0KFVzZXIsIHBrPXVzZXJfaWQpCiAgICBmb3JtID0gRm9ybVVzZXJzRWRpdChyZXF1ZXN0LlBPU1Qgb3IgTm9uZSwgaW5zdGFuY2U9dXNlcikKICAgIGlmIG5vdCBmb3JtLmlzX3ZhbGlkKCk6CiAgICAgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCAndXNlcnMvdXNlcnNfYWRtaW5fZWRpdC5odG1sJywKICAgICAgICAgICAgICAgICAgICAgIHsndXNlcic6IHVzZXIsICdmb3JtJzogZm9ybX0KICAgICAgICAgICAgICAgICAgICAgICkKICAgIHVzZXIgPSBmb3JtLnNhdmUoKQoKICAgIHJldHVybiByZWRpcmVjdCgndXNlcnM6dXNlcnNfYWRtaW4nKQoKPHxmaW1faG9sZXw+CiAgICAgICAgcmV0dXJuIHJlZGlyZWN0KCdyZWNpcGVzOmluZGV4JykKICAgIHVzZXIgPSBnZXRfb2JqZWN0X29yXzQwNChVc2VyLCBwaz11c2VyX2lkKQogICAgdXNlci5kZWxldGUoKQogICAgcmV0dXJuIHJlZGlyZWN0KCd1c2Vyczp1c2Vyc19hZG1pbicpCgoKZGVmIHBhZ2Vfbm90X2ZvdW5kKHJlcXVlc3QsIGV4Y2VwdGlvbik6CiAgICBjb250ZXh0ID0geyJwYXRoIjogcmVxdWVzdC5wYXRoLAogICAgICAgICAgICAgICAidGl0bGUiOiAi0J7RiNC40LHQutCwIDQwNCIsCiAgICAgICAgICAgICAgICJ0ZXh0IjogItCi0LDQutC+0Lkg0YHRgtGA0LDQvdC40YbRiyDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCIn0KICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgIm1pc2MvNDA0Lmh0bWwiLAogICAgICAgICAgICAgICAgICBjb250ZXh0LCBzdGF0dXM9NDA0KQoKCmRlZiBzZXJ2ZXJfZXJyb3IocmVxdWVzdCk6CiAgICBjb250ZXh0ID0geyJ0aXRsZSI6ICLQntGI0LjQsdC60LAgNTAwIiwKICAgICAgICAgICAgICAgInRleHQiOiAoItCS0Ysg0LfQsNGI0LvQuCDQvdCwINGB0LXQutGA0LXRgtC90YPRjiDRgdGC0YDQsNC90LjRhtGDINGB0LDQudGC0LAsICIKICAgICAgICAgICAgICAgICAgICAgICAgItC90LAg0L3QtdC1INC/0L7Qv9Cw0LTQsNGO0YIg0LzQtdC90LXQtSAwLjAxJSDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuS4gIgogICAgICAgICAgICAgICAgICAgICAgICAi0JzRiyDQv9C+0LTRg9C80LDQtdC8LCDRh9GC0L4g0YEg0Y3RgtC40Lwg0YHQtNC10LvQsNGC0YwgOykiKX0KICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgIm1pc2MvNTAwLmh0bWwiLCBjb250ZXh0LCBzdGF0dXM9NTAwKQo8fGZpbV9zdWZmaXh8PgoKQGxvZ2luX3JlcXVpcmVkCmRlZiB1c2Vyc19hZG1pbl9kZWxldGUocmVxdWVzdCwgdXNlcl9pZCk6CiAgICBpZiBub3QgcmVxdWVzdC51c2VyLmlzX2FkbWluOgo8fGZpbV9lbmR8Pg=="]
["2e1d4ecd662435f2abc5ca71c6b7c2453e3e2771-1","2e1d4ecd662435f2abc5ca71c6b7c2453e3e2771","PHxmaW1fcHJlZml4fD4KZnJvbSBubWlnZW4gaW1wb3J0ICoKZnJvbSBubWlnZW4uaGRsLmRzbCBpbXBvcnQgX01vZHVsZUJ1aWxkZXJTdWJtb2R1bGVzCmZyb20gbm1pZ2VuLnNpbSBpbXBvcnQgU2ltdWxhdG9yLCBTZXR0bGUKZnJvbSAudHlwZXMuY29tcGxleCBpbXBvcnQgQ29tcGxleCwgQ29tcGxleENvbnN0CmZyb20gLnR5cGVzLmZpeGVkX3BvaW50IGltcG9ydCBRCmZyb20gLnV0aWwgaW1wb3J0IHZhcmlhYmxlX3JvdGF0ZV9sZWZ0CmltcG9ydCBjbWF0aAppbXBvcnQgbWF0aAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHVuaXR0ZXN0CgoKY2xhc3MgRkZUKEVsYWJvcmF0YWJsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZmZ0X3NpemUsIHNhbXBsZV9zaGFwZSk6CiAgICAgICAgc2VsZi5mZnRfc2l6ZSA9IGZmdF9zaXplCiAgICAgICAgbGV2ZWxzID0gbWF0aC5sb2cyKGZmdF9zaXplKQogICAgICAgIGFzc2VydCBsZXZlbHMuaXNfaW50ZWdlcigpCiAgICAgICAgc2VsZi5sZXZlbF9jb3VudCA9IGludChsZXZlbHMpCiAgICAgICAgc2VsZi5idXR0ZXJmbHlfY291bnQgPSBpbnQoZmZ0X3NpemUgLyAyKQoKICAgICAgICBzZWxmLnNhbXBsZV9zaGFwZSA9IHNhbXBsZV9zaGFwZQogICAgICAgIHNlbGYuaW50ZXJuYWxfc2hhcGUgPSBRKHNhbXBsZV9zaGFwZS5pbnRlZ2VyX2JpdHMgKyBzZWxmLmxldmVsX2NvdW50LCBzYW1wbGVfc2hhcGUuZnJhY3Rpb25fYml0cykKICAgICAgICBzZWxmLnR3aWRkbGVfZmFjdG9yX3NoYXBlID0gUSgxLCBsZW4oc2VsZi5pbnRlcm5hbF9zaGFwZSktMSkKCiAgICAgICAgc2VsZi5tZW0gPSBNZW1vcnkod2lkdGg9bGVuKENvbXBsZXgoc2hhcGU9c2VsZi5pbnRlcm5hbF9zaGFwZSkudmFsdWUoKSksIGRlcHRoPWZmdF9zaXplKQogICAgICAgIHNlbGYucmVhZF9hZGRyID0gU2lnbmFsKHJhbmdlKGZmdF9zaXplKSkKICAgICAgICBzZWxmLnJlYWRfZGF0YSA9IFNpZ25hbChzZWxmLm1lbS53aWR0aCkKCiAgICAgICAgc2VsZi5zdGFydCA9IFNpZ25hbCgpCiAgICAgICAgc2VsZi5kb25lID0gU2lnbmFsKCkKCiAgICAgICAgc2VsZi5fYWRkcl9nZW4gPSBBZGRyZXNzR2VuZXJhdG9yKHNlbGYubGV2ZWxfY291bnQsIHNlbGYuYnV0dGVyZmx5X2NvdW50KQogICAgICAgIHNlbGYuX2J1dHRlcmZseSA9IEJ1dHRlcmZseShzZWxmLmludGVybmFsX3NoYXBlLCBzZWxmLnR3aWRkbGVfZmFjdG9yX3NoYXBlKQoKICAgIGRlZiBlbGFib3JhdGUoc2VsZiwgcGxhdGZvcm0pOgogICAgICAgIG0gPSBNb2R1bGUoKQoKICAgICAgICBuZXh0X2FkZHJlc3MgPSBTaWduYWwoKQogICAgICAgIHJlc2V0ID0gU2lnbmFsKCkKCiAgICAgICAgbS5zdWJtb2R1bGVzLmFkZHJfZ2VuID0gUmVzZXRJbnNlcnRlcihyZXNldCkoCiAgICAgICAgICAgIEVuYWJsZUluc2VydGVyKG5leHRfYWRkcmVzcykoCiAgICAgICAgICAgICAgICBzZWxmLl9hZGRyX2dlbgogICAgICAgICAgICApCiAgICAgICAgKQoKICAgICAgICBtLnN1Ym1vZHVsZXMuYnV0dGVyZmx5ID0gc2VsZi5fYnV0dGVyZmx5CiAgICAgICAgbS5zdWJtb2R1bGVzLnR3aWRkbGVfZmFjdG9ycyA9IHR3aWRkbGVfZmFjdG9ycyA9IFR3aWRkbGVGYWN0b3JzKHNlbGYuZmZ0X3NpemUsIHNlbGYudHdpZGRsZV9mYWN0b3Jfc2hhcGUpCgogICAgICAgIG0uc3VibW9kdWxlcy5yZWFkX2EgPSByZWFkX2EgPSBzZWxmLm1lbS5yZWFkX3BvcnQodHJhbnNwYXJlbnQ9RmFsc2UpCiAgICAgICAgbS5zdWJtb2R1bGVzLnJlYWRfYiA9IHJlYWRfYiA9IHNlbGYubWVtLnJlYWRfcG9ydCh0cmFuc3BhcmVudD1GYWxzZSkKICAgICAgICBtLnN1Ym1vZHVsZXMud3JpdGVfYSA9IHdyaXRlX2EgPSBzZWxmLm1lbS53cml0ZV9wb3J0KCkKICAgICAgICBtLnN1Ym1vZHVsZXMud3JpdGVfYiA9IHdyaXRlX2IgPSBzZWxmLm1lbS53cml0ZV9wb3J0KCkKICAgICAgICBtLmQuY29tYiArPSBbCiAgICAgICAgICAgICMgQWRkcmVzc2VzCiAgICAgICAgICAgIHJlYWRfYS5hZGRyLmVxKE11eChzZWxmLmRvbmUsIHNlbGYucmVhZF9hZGRyLCBzZWxmLl9hZGRyX2dlbi5hZGRyX2EpKSwKICAgICAgICAgICAgcmVhZF9iLmFkZHIuZXEoc2VsZi5fYWRkcl9nZW4uYWRkcl9iKSwKICAgICAgICAgICAgd3JpdGVfYS5hZGRyLmVxKHNlbGYuX2FkZHJfZ2VuLmFkZHJfYSksCiAgICAgICAgICAgIHdyaXRlX2IuYWRkci5lcShzZWxmLl9hZGRyX2dlbi5hZGRyX2IpLAogICAgICAgICAgICB0d2lkZGxlX2ZhY3RvcnMuYWRkci5lcShzZWxmLl9hZGRyX2dlbi5hZGRyX3R3aWRkbGUpLAoKICAgICAgICAgICAgIyBEYXRhIHJlYWRzCiAgICAgICAgICAgIHNlbGYuX2J1dHRlcmZseS5pbl9hLnZhbHVlKCkuZXEocmVhZF9hLmRhdGEpLAogICAgICAgICAgICBzZWxmLl9idXR0ZXJmbHkuaW5fYi52YWx1ZSgpLmVxKHJlYWRfYi5kYXRhKSwKICAgICAgICAgICAgc2VsZi5fYnV0dGVyZmx5LnR3aWRkbGVfZmFjdG9yLmVxKHR3aWRkbGVfZmFjdG9ycy5vdXQpLAogICAgICAgICAgICBzZWxmLnJlYWRfZGF0YS5lcShyZWFkX2EuZGF0YSksCgogICAgICAgICAgICAjIERhdGEgd3JpdGVzCiAgICAgICAgICAgIHdyaXRlX2EuZGF0YS5lcShzZWxmLl9idXR0ZXJmbHkub3V0X2EudmFsdWUoKSksCiAgICAgICAgICAgIHdyaXRlX2IuZGF0YS5lcShzZWxmLl9idXR0ZXJmbHkub3V0X2IudmFsdWUoKSksCiAgICAgICAgXQogICAgICAgIHdpdGggbS5GU00oKSBhcyBmc206CiAgICAgICAgICAgIHdpdGggbS5TdGF0ZSgiSURMRSIpOgogICAgICAgICAgICAgICAgbS5kLmNvbWIgKz0gWwogICAgICAgICAgICAgICAgICAgIHJlc2V0LmVxKDEpLAogICAgICAgICAgICAgICAgICAgIHNlbGYuZG9uZS5lcSgxKSwKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgIHdpdGggbS5JZihzZWxmLnN0YXJ0KToKICAgICAgICAgICAgICAgICAgICBtLm5leHQgPSAiUkVBRCIKCiAgICAgICAgICAgIHdpdGggbS5TdGF0ZSgiUkVBRCIpOgogICAgICAgICAgICAgICAgbS5kLmNvbWIgKz0gWwogICAgICAgICAgICAgICAgICAgIHJlYWRfYS5lbi5lcSgxKSwKICAgICAgICAgICAgICAgICAgICByZWFkX2IuZW4uZXEoMSksCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICBtLm5leHQgPSAiV0FJVCIKICAgICAgICAgICAgICAgIHdpdGggbS5JZihzZWxmLl9hZGRyX2dlbi5kb25lKToKICAgICAgICAgICAgICAgICAgICBtLm5leHQgPSAiSURMRSIKCiAgICAgICAgICAgIHdpdGggbS5TdGF0ZSgiV0FJVCIpOgogICAgICAgICAgICAgICAgbS5uZXh0ID0gIldSSVRFIgoKICAgICAgICAgICAgd2l0aCBtLlN0YXRlKCJXUklURSIpOgogICAgICAgICAgICAgICAgbS5kLmNvbWIgKz0gWwogICAgICAgICAgICAgICAgICAgIHdyaXRlX2EuZW4uZXEoMSksCiAgICAgICAgICAgICAgICAgICAgd3JpdGVfYi5lbi5lcSgxKSwKICAgICAgICAgICAgICAgICAgICBuZXh0X2FkZHJlc3MuZXEoMSksCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICBtLm5leHQgPSAiUkVBRCIKCgogICAgICAgIHJldHVybiBtCgoKY2xhc3MgQWRkcmVzc0dlbmVyYXRvcihFbGFib3JhdGFibGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGxldmVsX2NvdW50LCBidXR0ZXJmbHlfY291bnQpOgogICAgICAgIHNlbGYubGV2ZWxfY291bnQgPSBsZXZlbF9jb3VudAogICAgICAgIHNlbGYuYnV0dGVyZmx5X2NvdW50ID0gYnV0dGVyZmx5X2NvdW50CgogICAgICAgIHNlbGYuZG9uZSAgICAgICAgID0gU2lnbmFsKCkKICAgICAgICBzZWxmLmFkZHJfYSAgICAgICA9IFNpZ25hbChyYW5nZShidXR0ZXJmbHlfY291bnQqMikpCiAgICAgICAgc2VsZi5hZGRyX2IgICAgICAgPSBTaWduYWwocmFuZ2UoYnV0dGVyZmx5X2NvdW50KjIpKQogICAgICAgIHNlbGYuYWRkcl90d2lkZGxlID0gU2lnbmFsKHJhbmdlKGJ1dHRlcmZseV9jb3VudCkpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgZWxhYm9yYXRlKHNlbGYsIHBsYXRmb3JtKToKICAgICAgICBtID0gTW9kdWxlKCkKCiAgICAgICAgbGV2ZWwgICAgICAgID0gU2lnbmFsKHJhbmdlKHNlbGYubGV2ZWxfY291bnQpKQo8fGZpbV9lbmR8Pg=="]
["5196fcfa75961b3566d6560348721ec580c8b584-1","5196fcfa75961b3566d6560348721ec580c8b584","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuIGltcG9ydCB1bnN1cGVydmlzZWQKPHxmaW1fZW5kfD4="]
["cf744de059d8f3bf7dccfd233afefc33183af3e4-4","cf744de059d8f3bf7dccfd233afefc33183af3e4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgcmVxdWVzdHMKCiMgbmVlZCB0byBpbnN0YWxsIHZpYSBwaXAKaW1wb3J0IGhqc29uCgonJydMb29rcyBsaWtlJycnCicnJ3sgcHVsbF9udW1iZXI6IDI2LAogICAgY29uZmxpY3RQcnM6CiAgICAgICAgWyB7IG51bWJlcjogMjUsCiAgICAgICAgICAgIGZpbGVzOiBbICcuZ2l0aHViL3dvcmtmbG93cy90ZXN0ZmlsZScgXSwKPHxmaW1faG9sZXw+CiAgICAgICAgeyBudW1iZXI6IDI0LAogICAgICAgICAgICBmaWxlczogWyAnLmdpdGh1Yi93b3JrZmxvd3MvdGVzdGZpbGUnIF0sCiAgICAgICAgICAgIGNvbmZsaWN0czogWyAnLmdpdGh1Yi93b3JrZmxvd3MvdGVzdGZpbGUnIF0gfSBdIH0nJycKCmRlZiBtYWluKCk6CiAgICBpbnB1dCA9IHN5cy5hcmd2WzFdCiAgICBwcmludChpbnB1dCkKICAgIGpfaW5wdXQgPSBoanNvbi5sb2FkcyhpbnB1dCkKICAgIHByaW50KGpfaW5wdXQpCgoKICAgIG91cl9wcl9udW0gPSBqX2lucHV0WydwdWxsX251bWJlciddCiAgICBvdXJfcHJfbGFiZWwgPSBnZXRfbGFiZWwob3VyX3ByX251bSkKICAgIGNvbmZsaWN0UHJzID0gal9pbnB1dFsnY29uZmxpY3RQcnMnXQoKICAgIGdvb2QgPSBbXQogICAgYmFkID0gW10KCiAgICBmb3IgY29uZmxpY3QgaW4gY29uZmxpY3RQcnM6CiAgICAgICAgdGhpc19wcl9udW0gPSBjb25mbGljdFsnbnVtYmVyJ10KICAgICAgICBwcmludCh0aGlzX3ByX251bSkKCiAgICAgICAgciA9IHJlcXVlc3RzLmdldChmJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZGFzaHBheS9kYXNoL3B1bGxzL3t0aGlzX3ByX251bX0nKQogICAgICAgIHByaW50KHIuanNvbigpWydoZWFkJ11bJ2xhYmVsJ10pCgogICAgICAgIG1lcmdhYmxlX3N0YXRlID0gci5qc29uKClbJ21lcmdlYWJsZV9zdGF0ZSddCiAgICAgICAgaWYgbWVyZ2FibGVfc3RhdGUgPT0gImRpcnR5IjoKICAgICAgICAgICAgcHJpbnQoZid7dGhpc19wcl9udW19IG5lZWRzIHJlYmFzZS4gU2tpcHBpbmcgY29uZmxpY3QgY2hlY2snKQogICAgICAgICAgICBjb250aW51ZQoKICAgICAgICByID0gcmVxdWVzdHMuZ2V0KGYnaHR0cHM6Ly9naXRodWIuY29tL2Rhc2hwYXkvZGFzaC9icmFuY2hlcy9wcmVfbWVyZ2VhYmxlL3tvdXJfcHJfbGFiZWx9Li4ue2dldF9sYWJlbCh0aGlzX3ByX251bSl9JykKICAgICAgICBpZiAiVGhlc2UgYnJhbmNoZXMgY2FuIGJlIGF1dG9tYXRpY2FsbHkgbWVyZ2VkLiIgaW4gci50ZXh0OgogICAgICAgICAgICBnb29kLmFwcGVuZCh0aGlzX3ByX251bSkKICAgICAgICBlbGlmICJDYW7igJl0IGF1dG9tYXRpY2FsbHkgbWVyZ2UiIGluIHIudGV4dDoKICAgICAgICAgICAgYmFkLmFwcGVuZCh0aGlzX3ByX251bSkKICAgICAgICBlbHNlOgogICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIm5vdCBtZXJnZWFibGUgb3IgdW5tZXJnYWJsZSEiKQoKICAgIHByaW50KCJOb3QgY29uZmxpY3RpbmcgUFJzOiAiLCBnb29kKQoKICAgIHByaW50KCJDb25mbGljdGluZyBQUnM6ICIsIGJhZCkKICAgIGlmIGxlbihiYWQpID4gMDoKICAgICAgICBzeXMuZXhpdCgxKQoKCgpkZWYgZ2V0X2xhYmVsKHByX251bSk6CiAgICByZXR1cm4gcmVxdWVzdHMuZ2V0KGYnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9kYXNocGF5L2Rhc2gvcHVsbHMve3ByX251bX0nKS5qc29uKClbJ2hlYWQnXVsnbGFiZWwnXQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgY29uZmxpY3RzOiBbICcuZ2l0aHViL3dvcmtmbG93cy90ZXN0ZmlsZScgXSB9Cjx8ZmltX2VuZHw+"]
["51f82cd217bc91afb4823ae5a328f2e97943c6db-4","51f82cd217bc91afb4823ae5a328f2e97943c6db","PHxmaW1fcHJlZml4fD4KCgojIERlZmluaWVyZW4gZWluZXIgWsOkaGwtVmFyaWFibGUgbWl0IGRlbSBXZXJ0IDkKemFlaGxfdmFyaWFibGUgPSA5Cjx8ZmltX2hvbGV8PgogICAgICAgIHByaW50KCIgIiwgZW5kID0iICIpCiAgICAjIEhvY2h6w6RobGVuIGRlciBXZXJ0ZQogICAgZm9yIHdlcnRlIGluIHJhbmdlKDEsIHplaWxlbisxKToKICAgICAgICBwcmludCh3ZXJ0ZSwgZW5kPSAiICIpCiAgICAjIFJ1bnRlcnrDpGhsZW4gZGVyIFdlcnRlCiAgICBmb3Igd2VydGUgaW4gcmFuZ2UoemVpbGVuLTEsIDAsIC0xKToKICAgICAgICBwcmludCh3ZXJ0ZSwgZW5kID0gIiAiKQogICAgcHJpbnQoKQo8fGZpbV9zdWZmaXh8PgoKZm9yIHplaWxlbiBpbiByYW5nZSgxLCB6YWVobF92YXJpYWJsZSsxKToKICAgICMgRWluZsO8Z2VuIGRlciBMZWVyemVpY2hlbgogICAgZm9yIGxlZXJ6ZWljaGVuIGluIHJhbmdlKHphZWhsX3ZhcmlhYmxlLXplaWxlbisxKToKPHxmaW1fZW5kfD4="]
["850cb468147082e0b44afdf42f1c80b2728eb2df-3","850cb468147082e0b44afdf42f1c80b2728eb2df","PHxmaW1fcHJlZml4fD4KIiIiQ29uZmlnIGZsb3cgZm9yIHRoZSBCaXR2YXZvIGludGVncmF0aW9uLiIiIgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFubm90YXRpb25zCgppbXBvcnQgbG9nZ2luZwpmcm9tIHR5cGluZyBpbXBvcnQgQW55Cgpmcm9tIGJpdHZhdm8uQml0dmF2b0NsaWVudCBpbXBvcnQgQml0dmF2b0NsaWVudApmcm9tIGJpdHZhdm8uQml0dmF2b0V4Y2VwdGlvbnMgaW1wb3J0IEJpdHZhdm9FeGNlcHRpb24KaW1wb3J0IHZvbHVwdHVvdXMgYXMgdm9sCgpmcm9tIGhvbWVhc3Npc3RhbnQuY29uZmlnX2VudHJpZXMgaW1wb3J0IENvbmZpZ0Zsb3csIE9wdGlvbnNGbG93CmZyb20gaG9tZWFzc2lzdGFudC5jb25zdCBpbXBvcnQgQ09ORl9BUElfS0VZCmZyb20gaG9tZWFzc2lzdGFudC5jb3JlIGltcG9ydCBIb21lQXNzaXN0YW50LCBjYWxsYmFjawpmcm9tIGhvbWVhc3Npc3RhbnQuZGF0YV9lbnRyeV9mbG93IGltcG9ydCBGbG93UmVzdWx0CmZyb20gaG9tZWFzc2lzdGFudC5oZWxwZXJzIGltcG9ydCBjb25maWdfdmFsaWRhdGlvbiBhcyBjdgpmcm9tIGhvbWVhc3Npc3RhbnQuaGVscGVycy50eXBpbmcgaW1wb3J0IENvbmZpZ1R5cGUKCmZyb20gLmNvbnN0IGltcG9ydCBDT05GX0FQSV9TRUNSRVQsIENPTkZfTUFSS0VUUywgQ09ORl9TSE9XX0VNUFRZX0FTU0VUUywgRE9NQUlOCmZyb20gLmVycm9ycyBpbXBvcnQgSW52YWxpZEF1dGgsIEludmFsaWRSZXNwb25zZQoKX0xPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKREFUQV9TQ0hFTUEgPSB2b2wuU2NoZW1hKAogICAgewogICAgICAgIHZvbC5SZXF1aXJlZChDT05GX0FQSV9LRVkpOiBzdHIsCiAgICAgICAgdm9sLlJlcXVpcmVkKENPTkZfQVBJX1NFQ1JFVCk6IHN0ciwKICAgIH0KKQoKCmRlZiBfbWFya2V0c19zY2hlbWEobWFya2V0czogbGlzdCB8IE5vbmUpIC0+IGRpY3Rbc3RyLCBBbnldOgogICAgIiIiTWFya2V0cyBzZWxlY3Rpb24gc2NoZW1hLiIiIgogICAgbWFya2V0c19kaWN0ID0ge30KCiAgICBpZiBtYXJrZXRzOgogICAgICAgIG1hcmtldHNfZGljdCA9IHtuYW1lOiBuYW1lIGZvciBuYW1lIGluIG1hcmtldHN9CgogICAgcmV0dXJuIHZvbC5TY2hlbWEoe3ZvbC5SZXF1aXJlZChDT05GX01BUktFVFMpOiBjdi5tdWx0aV9zZWxlY3QobWFya2V0c19kaWN0KX0pCgoKYXN5bmMgZGVmIHZhbGlkYXRlX2lucHV0KGhhc3M6IEhvbWVBc3Npc3RhbnQsIGRhdGE6IGRpY3QpIC0+IGRpY3Rbc3RyLCBBbnldOgogICAgIiIiR2V0IG1hcmtldHMgYW5kIGJhbGFuY2UgZGF0YS4iIiIKCiAgICBtYXJrZXRzX2xpc3QgPSBbXQogICAgYmFsYW5jZXNfbGlzdCA9IFtdCgogICAgYXBpX2tleSA9IGRhdGFbQ09ORl9BUElfS0VZXQogICAgYXBpX3NlY3JldCA9IGRhdGFbQ09ORl9BUElfU0VDUkVUXQoKICAgIHRyeToKICAgICAgICBjbGllbnQgPSBCaXR2YXZvQ2xpZW50KGFwaV9rZXksIGFwaV9zZWNyZXQpCgogICAgICAgIG1hcmtldHMgPSBhd2FpdCBjbGllbnQuZ2V0X3ByaWNlX3RpY2tlcigpCiAgICAgICAgZm9yIG1hcmtldCBpbiBtYXJrZXRzOgogICAgICAgICAgICBtYXJrZXRzX2xpc3QuYXBwZW5kKG1hcmtldFsibWFya2V0Il0pCiAgICAgICAgbWFya2V0c19saXN0LnNvcnQoKQoKICAgICAgICBiYWxhbmNlcyA9IGF3YWl0IGNsaWVudC5nZXRfYmFsYW5jZSgpCiAgICAgICAgZm9yIGJhbGFuY2UgaW4gYmFsYW5jZXM6CiAgICAgICAgICAgIGJhbGFuY2VzX2xpc3QuYXBwZW5kKGJhbGFuY2VbInN5bWJvbCJdKQogICAgICAgIGJhbGFuY2VzX2xpc3Quc29ydCgpCiAgICBleGNlcHQgQml0dmF2b0V4Y2VwdGlvbiBhcyBlcnJvcjoKICAgICAgICBpZiBzdHIoZXJyb3Iuc3RhdHVzX2NvZGUpID09ICI0MDMiOgogICAgICAgICAgICByYWlzZSBJbnZhbGlkQXV0aCBmcm9tIGVycm9yCiAgICAgICAgcmFpc2UgSW52YWxpZFJlc3BvbnNlIGZyb20gZXJyb3IKICAgIGZpbmFsbHk6CiAgICAgICAgYXdhaXQgY2xpZW50LmNsb3NlKCkKCiAgICByZXR1cm4geyJtYXJrZXRzIjogbWFya2V0c19saXN0LCAiYmFsYW5jZXMiOiBiYWxhbmNlc19saXN0fQoKCmNsYXNzIEJpdHZhdm9Db25maWdGbG93KENvbmZpZ0Zsb3csIGRvbWFpbj1ET01BSU4pOgogICAgIiIiSGFuZGxlIGEgY29uZmlnIGZsb3cgZm9yIEJpdHZhdm8uIiIiCgogICAgVkVSU0lPTiA9IDEKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIiIiSW5pdGlhbGl6ZSB0aGUgQml0dmF2byBjb25maWcgZmxvdy4iIiIKICAgICAgICBzZWxmLmJpdHZhdm9fY29uZmlnID0ge30KICAgICAgICBzZWxmLm1hcmtldHMgPSBOb25lCiAgICAgICAgc2VsZi5iYWxhbmNlcyA9IE5vbmUKCiAgICBAc3RhdGljbWV0aG9kCiAgICBAY2FsbGJhY2sKICAgIGRlZiBhc3luY19nZXRfb3B0aW9uc19mbG93KGNvbmZpZ19lbnRyeSk6CiAgICAgICAgIiIiR2V0IHRoZSBvcHRpb25zIGZsb3cgZm9yIHRoaXMgaGFuZGxlci4iIiIKICAgICAgICByZXR1cm4gQml0dmF2b09wdGlvbnNGbG93SGFuZGxlcihjb25maWdfZW50cnkpCgogICAgYXN5bmMgZGVmIGFzeW5jX3N0ZXBfdXNlcihzZWxmLCB1c2VyX2lucHV0OiBDb25maWdUeXBlIHwgTm9uZSA9IE5vbmUpIC0+IEZsb3dSZXN1bHQ6CiAgICAgICAgIiIiSGFuZGxlIGEgZmxvdyBpbml0aWF0ZWQgYnkgdGhlIHVzZXIuIiIiCiAgICAgICAgaWYgc2VsZi5fYXN5bmNfY3VycmVudF9lbnRyaWVzKCk6CiAgICAgICAgICAgIHJldHVybiBzZWxmLmFzeW5jX2Fib3J0KHJlYXNvbj0ic2luZ2xlX2luc3RhbmNlX2FsbG93ZWQiKQoKICAgICAgICBlcnJvcnMgPSB7fQoKICAgICAgICBpZiB1c2VyX2lucHV0IGlzIG5vdCBOb25lOgogICAgICAgICAgICBpbmZvLCBlcnJvcnMgPSBhd2FpdCBzZWxmLl9hc3luY192YWxpZGF0ZV9vcl9lcnJvcih1c2VyX2lucHV0KQoKICAgICAgICAgICAgaWYgbm90IGVycm9yczoKICAgICAgICAgICAgICAgIHNlbGYuYml0dmF2b19jb25maWcudXBkYXRlKHVzZXJfaW5wdXQpCiAgICAgICAgICAgICAgICBzZWxmLm1hcmtldHMgPSBpbmZvWyJtYXJrZXRzIl0KCiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgc2VsZi5hc3luY19zdGVwX21hcmtldHMoKQoKICAgICAgICByZXR1cm4gc2VsZi5hc3luY19zaG93X2Zvcm0oCiAgICAgICAgICAgIHN0ZXBfaWQ9InVzZXIiLCBkYXRhX3NjaGVtYT1EQVRBX1NDSEVNQSwgZXJyb3JzPWVycm9ycwogICAgICAgICkKCiAgICBhc3luYyBkZWYgYXN5bmNfc3RlcF9tYXJrZXRzKHNlbGYsIHVzZXJfaW5wdXQ6IGRpY3QgfCBOb25lID0gTm9uZSkgLT4gRmxvd1Jlc3VsdDoKICAgICAgICAiIiJIYW5kbGUgdGhlIHBpY2tpbmcgb2YgdGhlIG1hcmtldHMuIiIiCjx8ZmltX2hvbGV8PgogICAgICAgICAgICBpbmZvLCBlcnJvcnMgPSBhd2FpdCBzZWxmLl9hc3luY192YWxpZGF0ZV9vcl9lcnJvcihzZWxmLmJpdHZhdm9fY29uZmlnKQoKICAgICAgICAgICAgdGl0bGUgPSAiTWFya2V0czogIiArICIsICIuam9pbihzZWxmLmJpdHZhdm9fY29uZmlnW0NPTkZfTUFSS0VUU10pCgogICAgICAgICAgICBpZiBub3QgZXJyb3JzOgogICAgICAgICAgICAgICAgc2VsZi5iYWxhbmNlcyA9IGluZm9bImJhbGFuY2VzIl0KICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmFzeW5jX2NyZWF0ZV9lbnRyeSh0aXRsZT10aXRsZSwgZGF0YT1zZWxmLmJpdHZhdm9fY29uZmlnKQoKICAgICAgICByZXR1cm4gc2VsZi5hc3luY19zaG93X2Zvcm0oCiAgICAgICAgICAgIHN0ZXBfaWQ9Im1hcmtldHMiLAogICAgICAgICAgICBkYXRhX3NjaGVtYT1fbWFya2V0c19zY2hlbWEoc2VsZi5tYXJrZXRzKSwKICAgICAgICAgICAgZXJyb3JzPWVycm9ycywKICAgICAgICApCgogICAgYXN5bmMgZGVmIF9hc3luY192YWxpZGF0ZV9vcl9lcnJvcihzZWxmLCBjb25maWcpOgogICAgICAgIGVycm9ycyA9IHt9CiAgICAgICAgaW5mbyA9IHt9CgogICAgICAgIHRyeToKICAgICAgICAgICAgaW5mbyA9IGF3YWl0IHZhbGlkYXRlX2lucHV0KHNlbGYuaGFzcywgY29uZmlnKQogICAgICAgIGV4Y2VwdCBJbnZhbGlkQXV0aDoKICAgICAgICAgICAgZXJyb3JzWyJiYXNlIl0gPSAiaW52YWxpZF9hdXRoIgogICAgICAgIGV4Y2VwdCBFeGNlcHRpb246ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgICAgICAgX0xPR0dFUi5leGNlcHRpb24oIlVuZXhwZWN0ZWQgZXhjZXB0aW9uIikKICAgICAgICAgICAgZXJyb3JzWyJiYXNlIl0gPSAidW5rbm93biIKCiAgICAgICAgcmV0dXJuIGluZm8sIGVycm9ycwoKCmNsYXNzIEJpdHZhdm9PcHRpb25zRmxvd0hhbmRsZXIoT3B0aW9uc0Zsb3cpOgogICAgIiIiSGFuZGxlIEJpdHZhdm8gb3B0aW9ucy4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnX2VudHJ5KToKICAgICAgICAiIiJJbml0aWFsaXplIG9wdGlvbnMgZmxvdy4iIiIKICAgICAgICBzZWxmLmNvbmZpZ19lbnRyeSA9IGNvbmZpZ19lbnRyeQoKICAgIGFzeW5jIGRlZiBhc3luY19zdGVwX2luaXQoc2VsZiwgdXNlcl9pbnB1dDogQ29uZmlnVHlwZSB8IE5vbmUgPSBOb25lKToKICAgICAgICAiIiJNYW5hZ2UgQml0dmF2byBvcHRpb25zLiIiIgogICAgICAgIGlmIHVzZXJfaW5wdXQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHJldHVybiBzZWxmLmFzeW5jX2NyZWF0ZV9lbnRyeSh0aXRsZT0iIiwgZGF0YT11c2VyX2lucHV0KQoKICAgICAgICBvcHRpb25zID0gewogICAgICAgICAgICB2b2wuT3B0aW9uYWwoCiAgICAgICAgICAgICAgICBDT05GX1NIT1dfRU1QVFlfQVNTRVRTLAogICAgICAgICAgICAgICAgZGVmYXVsdD1zZWxmLmNvbmZpZ19lbnRyeS5vcHRpb25zLmdldChDT05GX1NIT1dfRU1QVFlfQVNTRVRTLCBUcnVlKSwKICAgICAgICAgICAgKTogYm9vbCwKICAgICAgICB9CgogICAgICAgIHJldHVybiBzZWxmLmFzeW5jX3Nob3dfZm9ybShzdGVwX2lkPSJpbml0IiwgZGF0YV9zY2hlbWE9dm9sLlNjaGVtYShvcHRpb25zKSkKPHxmaW1fc3VmZml4fD4KICAgICAgICBlcnJvcnMgPSB7fQoKICAgICAgICBpZiB1c2VyX2lucHV0IGlzIG5vdCBOb25lOgogICAgICAgICAgICBzZWxmLmJpdHZhdm9fY29uZmlnLnVwZGF0ZSh1c2VyX2lucHV0KQo8fGZpbV9lbmR8Pg=="]
["2b0bd72c92fb594ba680dc07febaa2cbc3ae027a-1","2b0bd72c92fb594ba680dc07febaa2cbc3ae027a","PHxmaW1fcHJlZml4fD4KIyBpbXBvcnQgY29kZWNhZGVteWxpYjMKaW1wb3J0IGNvZGVjYWRlbXlsaWIzCmltcG9ydCBudW1weSBhcyBucApmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHB5cGxvdCBhcyBwbHQKCiMgbG9hZCBpbiBkYXRhCmluX2Jsb29tID0gbnAubG9hZHR4dChvcGVuKCJpbi1ibG9vbS5jc3YiKSwgZGVsaW1pdGVyPSIsIikKZmxpZ2h0cyA9IG5wLmxvYWR0eHQob3BlbigiZmxpZ2h0cy5jc3YiKSwgZGVsaW1pdGVyPSIsIikKCiMgUGxvdCB0aGUgaGlzdG9ncmFtcwpwbHQuZmlndXJlKDEpCnBsdC5zdWJwbG90KDIxMSkKcGx0Lmhpc3QoZmxpZ2h0cyxyYW5nZT0oMCwzNjUpLGJpbnM9MzY1KQpwbHQueGxhYmVsKCdob3VycycpCnBsdC55bGFiZWwoJ2NvdW50JykKPHxmaW1faG9sZXw+CnByaW50LnlsYWJlbCgnQmxvb20nKQpwcmludC54bGFiZWwoJ1llYXInKQpwbHQuc2hvdygpCjx8ZmltX3N1ZmZpeHw+CnBsdC50aXRsZSgnRnJlcXVlbmN5JykKcGx0LnN1YnBsb3QoMjEyKQpwbHQuaGlzdChpbl9ibG9vbSxyYW5nZT0oMCwzNjUpLGJpbnM9MzY1KQpwbHQudGl0bGUoJ0Zsb3dlciBhbmQgZmxpZ2h0IGRhdGEnKQo8fGZpbV9lbmR8Pg=="]
["51ad532b560f0c51d33b4837015b592ab8f1dd6e-1","51ad532b560f0c51d33b4837015b592ab8f1dd6e","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyA9ICJBbGV4IEJhcmFub3YiCgpmcm9tIGluZXF1YWxpdGllcyBpbXBvcnQgY2hlcm5pa292IGFzIGMKZnJvbSBwZXJtdXRhdGlvbnMgaW1wb3J0ICoKaW1wb3J0IG51bXB5IGFzIG5wCgoKZGVmIGZpbmRfbWluaW11bShnb2FsX2Z1bmMsCiAgICAgICAgICAgICAgICAgY29uc3RyYWludHNfc3lzdGVtLAogICAgICAgICAgICAgICAgIGNvbWJpbmF0b3JpYWxfc2V0LAogICAgICAgICAgICAgICAgIGFkZF9jb25zdHJhaW50cz1UcnVlLAogICAgICAgICAgICAgICAgIHNlcmllc19jb3VudD0zLAogICAgICAgICAgICAgICAgIGV4cGVyaW1lbnRzX3Blcl9zZXJpZXM9NSwKICAgICAgICAgICAgICAgICBxdWlldD1UcnVlKToKICAgICIiIgogICAgR2V0cyB0aGUgbWluaW11bSBvZiB0aGUgbGluZWFyIGZ1bmN0aW9uIHdpdGggbGluZWFyIGNvbnN0cmFpbnRzCiAgICBvbiB0aGUgY29tYmluYXRvcmlhbCBzZXQKCiAgICBSZXR1cm5zOgogICAgICAgIC0gKHBvaW50IGFuZCBmdW5jdGlvbiB2YWx1ZSkKICAgICIiIgoKICAgICMgZGVmaW5lIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBnb2FsIGZ1bmN0aW9uIHZhbHVlCiAgICBmID0gbGFtYmRhIHg6IHN1bShpICogaiBmb3IgaSwgaiBpbiB6aXAoZ29hbF9mdW5jLCB4KSkKCiAgICAjIGNvcHlpbmcgdGhlIGNvbnN0cmFpbnRzIHN5c3RlbSB0byBtb2RpZnkgaXQgdGhlbgogICAgY29waWVkX3N5c3RlbSA9IGxpc3QoY29uc3RyYWludHNfc3lzdGVtKQoKICAgIGlmIGFkZF9jb25zdHJhaW50czoKICAgICAgICBpZiBub3QgcXVpZXQ6CiAgICAgICAgICAgIHByaW50ICJBZGRkaW5nIGFkZGl0aW9uYWwgY29uc3RyYWludHMgdG8gdGhlIGNvbnN0cmFpbnRzIHN5c3RlbSIKICAgICAgICBjb3BpZWRfc3lzdGVtID0gYWRkX2FkZGl0aW9uYWxfY29uc3RyYWludHMoY29waWVkX3N5c3RlbSwgY29tYmluYXRvcmlhbF9zZXQuZ2VuZXJhdGlvbl9lbGVtZW50cykKCiAgICBpZiBub3QgcXVpZXQ6CiAgICAgICAgcHJpbnQgIkNvbnN0cmFpbnRzIHN5c3RlbSBpczogXG4iLCBucC5hcnJheShjb3BpZWRfc3lzdGVtKQoKICAgIHNvbHZlciA9IGMuSW5lcXVhbGl0aWVzU29sdmVyKCkKICAgIGJlc3RfZnVuY192YWx1ZSA9IE5vbmUKICAgIGJlc3RfcG9pbnQgPSBOb25lCiAgICBsYXN0X3N5c3RlbV9pbmRleCA9IGxlbihjb3BpZWRfc3lzdGVtKQogICAgY29uc3Rfd2FzX2luc2VydGVkID0gRmFsc2UKCiAgICAjIHN0YXJ0aW5nIHNlcmllcyBvZiBleHBlcmltZW50cwogICAgZm9yIHNlcmllc19udW1iZXIgaW4geHJhbmdlKHNlcmllc19jb3VudCk6CiAgICAgICAgaWYgbm90IHF1aWV0OgogICAgICAgICAgICBwcmludCAiLS0tPiBTdGFydGluZyBzZXJpZXMgIyIsIHNlcmllc19udW1iZXIKCiAgICAgICAgIyBzdG9yZSB0aGUgdmFsaWQgcG9pbnRzIGluIHRoZSBkaWN0CiAgICAgICAgZXhwZXJpbWVudF92YWxpZF9wb2ludHMgPSBkaWN0KCkKICAgICAgICBmb3IgZXhwZXJpbWVudF9udW1iZXIgaW4geHJhbmdlKGV4cGVyaW1lbnRzX3Blcl9zZXJpZXMpOgogICAgICAgICAgICBpZiBub3QgcXVpZXQ6CiAgICAgICAgICAgICAgICBwcmludCAiU3RhcnRpbmcgZXhwZXJpbWVudCAjIiwgZXhwZXJpbWVudF9udW1iZXIKCiAgICAgICAgICAgICMgZ2V0dGluZyBzb21lIHNvbHV0aW9uIG9mIHRoZSBzeXN0ZW0KICAgICAgICAgICAgcyA9IHNvbHZlci5nZXRfc29sdXRpb24oY29waWVkX3N5c3RlbSkKICAgICAgICAgICAgaWYgbm90IHF1aWV0OgogICAgICAgICAgICAgICAgcHJpbnQgIkdlbmVyYXRlZCBuZXcgcG9pbnQgd2l0aGluIHRoZSBzZWFyY2ggYXJlYTogIiwgcwoKICAgICAgICAgICAgIyBnZXQgdGhlIG5lYXJlc3QgcG9pbnQgb2YgdGhlIHNldAogICAgICAgICAgICBuZWFyZXN0X3NldF9wb2ludCA9IGNvbWJpbmF0b3JpYWxfc2V0LmZpbmRfbmVhcmVzdF9zZXRfcG9pbnQocykKICAgICAgICAgICAgaWYgbm90IHF1aWV0OgogICAgICAgICAgICAgICAgcHJpbnQgIlRoZSBuZWFyZXN0IGNvbWJpbmF0b3JpYWwgc2V0IHBvaW50IGlzOiAiLCBuZWFyZXN0X3NldF9wb2ludAoKICAgICAgICAgICAgIyBjaGVjayB3aGV0aGVyIHRoZSBzZXQgcG9pbnQgaXMgdmFsaWQKICAgICAgICAgICAgaWYgaXNfc29sdXRpb24oY29waWVkX3N5c3RlbSwgbmVhcmVzdF9zZXRfcG9pbnQpOgogICAgICAgICAgICAgICAgZnVuY192YWx1ZSA9IGYobmVhcmVzdF9zZXRfcG9pbnQpCiAgICAgICAgICAgICAgICBleHBlcmltZW50X3ZhbGlkX3BvaW50c1tmdW5jX3ZhbHVlXSA9IG5lYXJlc3Rfc2V0X3BvaW50CiAgICAgICAgICAgICAgICBpZiBub3QgcXVpZXQ6CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkZvdW5kIHBvaW50IGlzIHZhbGlkLiBHb2FsIGZ1bmN0aW9uIHZhbHVlIGluIHRoaXMgcG9pbnQgaXM6ICIsIGZ1bmNfdmFsdWUKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGlmIG5vdCBxdWlldDoKICAgICAgICAgICAgICAgICAgICBwcmludCAiVGhlIG5lYXJlc3Qgc2V0IHBvaW50IGlzIG5vdCB2YWxpZCIKCiAgICAgICAgIyBzYXZlIHRoaXMgcG9pbnQKICAgICAgICBpZiBsZW4oZXhwZXJpbWVudF92YWxpZF9wb2ludHMpOgogICAgICAgICAgICBjdXJyZW50X21pbiA9IG1pbihleHBlcmltZW50X3ZhbGlkX3BvaW50cykKICAgICAgICAgICAgaWYgYmVzdF9mdW5jX3ZhbHVlIGlzIE5vbmUgb3IgY3VycmVudF9taW4gPCBiZXN0X2Z1bmNfdmFsdWU6CiAgICAgICAgICAgICAgICBiZXN0X2Z1bmNfdmFsdWUgPSBtaW4oZXhwZXJpbWVudF92YWxpZF9wb2ludHMpCiAgICAgICAgICAgICAgICBiZXN0X3BvaW50ID0gZXhwZXJpbWVudF92YWxpZF9wb2ludHNbYmVzdF9mdW5jX3ZhbHVlXQoKICAgICAgICAgICAgaWYgbm90IHF1aWV0OgogICAgICAgICAgICAgICAgcHJpbnQgIkN1cnJlbnQgYmVzdCBwb2ludCB7MH0gd2l0aCBmdW5jdGlvbiB2YWx1ZSA9IHsxfSIuZm9ybWF0KGJlc3RfcG9pbnQsIGJlc3RfZnVuY192YWx1ZSkKCiAgICAgICAgICAgICMgYWRkIHRoZSBhZGl0aW9uYWwgY29uc3RyYWludCB0byBzaHJpbmsgdGhlIHNlYXJjaCBhcmVhLgogICAgICAgICAgICBpZiBub3QgcXVpZXQ6CiAgICAgICAgICAgICAgICBwcmludCAiQWRkZWQgYWRkaXRpb25hbCBjb25zdHJhaW50czogezB9IDw9IHsxfSIuZm9ybWF0KGdvYWxfZnVuYywgYmVzdF9mdW5jX3ZhbHVlKQoKICAgICAgICAgICAgaWYgbm90IGNvbnN0X3dhc19pbnNlcnRlZDoKICAgICAgICAgICAgICAgIGNvcGllZF9zeXN0ZW0uYXBwZW5kKGdvYWxfZnVuYyArICgtMSAqIGJlc3RfZnVuY192YWx1ZSwpKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgY29waWVkX3N5c3RlbS5pbnNlcnQobGFzdF9zeXN0ZW1faW5kZXgsIGdvYWxfZnVuYyArICgtMSAqIGJlc3RfZnVuY192YWx1ZSwpKQoKICAgIHJldHVybiBiZXN0X3BvaW50LCBiZXN0X2Z1bmNfdmFsdWUKCgpkZWYgYWRkX2FkZGl0aW9uYWxfY29uc3RyYWludHMoc3lzdGVtLCBjb2VmcywgYWRkX2xlc3NfdGhlbl96ZXJvPUZhbHNlLCBhZGRfc2ltcGxleD1UcnVlKToKICAgICIiIgogICAgQWRkcyBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzIHRvIHRoZSBjb25zdHJhaW50cyBzeXN0ZW0uCiAgICBGaXJzdCBhZGRzIHRoZSBjb25zdHJhaW50cyBvZiB0eXBlOiAteF9pIDw9IDAKICAgIElmIGFkZF9zaW1wbGV4IHBhcmFtZXRlciBpcyBUcnVlIHRoYW4gYWRkIGFsc28gY29uc3RyYWludHMgdG8gYm91bmRzIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhlCiAgICBjb21iaW5hdG9yaWFsIHNldCB3aXRoIHRoZSBzaW1wbGV4LgoKICAgIEFyZ3VtZW50czoKICAgICAgICBzeXN0ZW0gLS0gdGhlIG1hdHJpeCB0aGF0IHJlcHJlc2VudHMgdGhlIGNvbnN0cmFpbnQgc3lzdGVtCiAgICAgICAgY29lZnMgLS0gdGhlIGFycmF5IG9mIGNvZWZmaWNpZW50cyB0aGF0IHdpbGwgYmUgdXNlZCB0byBhZGQgbmV3IGNvbnN0cmFpbnRzCiAgICAgICAgYWRkX2xlc3NfdGhlbl96ZXJvIC0tIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBjb25zdHJhaW50cyBvZiB0eXBlOiAteF9pIDw9IDAgc2hvdWxkIGJlIGFkZGVkIChkZWZhdWx0IC0gVHJ1ZSkKICAgICAgICBhZGRfc2ltcGxleCAtLSBzcGVjaWZpZXMgd2hldGhlciB0aGUgc2ltcGxleCBjb25zdHJhaW50cyBzaG91bGQgYmUgYWRkZWQgKGRlZmF1bHQgLSBUcnVlKQogICAgIiIiCgogICAgY29uc3RyYWludHNfc3lzdGVtID0gbnAuYXJyYXkoc3lzdGVtKQogICAgY29uc3RyYWludF9jb2VmcyA9IG5wLmFycmF5KGNvZWZzKQogICAgdmFyX2NvdW50ID0gY29uc3RyYWludHNfc3lzdGVtLnNoYXBlWzFdCgogICAgaWYgYWRkX2xlc3NfdGhlbl96ZXJvOgogICAgICAgICMgYWRkIGNvbmRpdGlvbmFsIGNvbnN0cmFpbnRzIHRoYXQgYWxsIHZhcmlhYmxlcyBhcmUgbGVzcyBvciBlcXVhbCB0aGFuIHplcm8KICAgICAgICBsZWZ0X3BhcnQgPSAtMSAqIG5wLmV5ZSh2YXJfY291bnQgLSAxKQogICAgICAgIHJpZ2h0X3BhcnQgPSBucC56ZXJvcyhbdmFyX2NvdW50IC0gMSwgMV0pCiAgICAgICAgcG9zaXRpdmVfdmFyaWFibGVzX2NvbnN0cyA9IG5wLmhzdGFjaygobGVmdF9wYXJ0LCByaWdodF9wYXJ0KSkKICAgICAgICBjb25zdHJhaW50c19zeXN0ZW0gPSBucC52c3RhY2soKGNvbnN0cmFpbnRzX3N5c3RlbSwgcG9zaXRpdmVfdmFyaWFibGVzX2NvbnN0cykpCgogICAgaWYgYWRkX3NpbXBsZXg6CiAgICAgICAgbGVmdF9wYXJ0ID0gbnAuZXllKHZhcl9jb3VudCAtIDEpCiAgICAgICAgbWluID0gY29uc3RyYWludF9jb2Vmcy5taW4oKQogICAgICAgIHN1bSA9IGNvbnN0cmFpbnRfY29lZnMuc3VtKCkKICAgICAgICByaWdodF9wYXJ0MSA9IG1pbiAqIG5wLm9uZXMoW3Zhcl9jb3VudCAtIDEsIDFdKQoKICAgICAgICAjIGZpcnN0IGFkZCBjb25zdHJhaW50cyBvZiB0eXBlOiB4X2kgPj0gbWluCiAgICAgICAgdHlwZTEgPSBucC5oc3RhY2soKC0xICogbGVmdF9wYXJ0LCByaWdodF9wYXJ0MSkpCgogICAgICAgICMgZmlyc3QgYWRkIGNvbnN0cmFpbnRzIG9mIHR5cGU6IHN1bSh4X2kpIDw9IHN1bQogICAgICAgIHR5cGUyID0gbnAuaHN0YWNrKChucC5vbmVzKHZhcl9jb3VudCAtIDEpLCAtMSpzdW0pKQogICAgICAgIGNvbnN0cmFpbnRzX3N5c3RlbSA9IG5wLnZzdGFjaygoY29uc3RyYWludHNfc3lzdGVtLCB0eXBlMSkpCiAgICAgICAgY29uc3RyYWludHNfc3lzdGVtID0gbnAudnN0YWNrKChjb25zdHJhaW50c19zeXN0ZW0sIHR5cGUyKSkKCiAgICByZXR1cm4gY29uc3RyYWludHNfc3lzdGVtLnRvbGlzdCgpCgoKZGVmIGZpbmRfbWluaW11bV93aXRoX2V4aGF1c3RpdmVfc2VhcmNoKGdvYWxfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmF0b3JpYWxfc2V0KToKICAgICIiIgogICAgR2V0cyB0aGUgc29sdXRpb24gYnkgaXRlcmF0aW5nIGFsbCB0aGUgZWxlbWVudHMgaW4gdGhlIHNldAoKICAgIFJldHJ1bnMgcGFpciBvZiBjb21iaW5hdG9yaWFsIGVsZW1lbnQgYW5kIG1pbmltYWwgZnVuY3Rpb24gdmFsdWUKICAgICIiIgoKICAgICNjYWxjdWFsdGUgZ29hbCBmdW5jdGlvbnMgZm9yIGFsbCB0aGUgZWxlbWVudHMKICAgIHZhbGlkX3ZhbHVlcyA9IG1hcChsYW1iZGEgZTogKGUsIHN1bShpICogaiBmb3IgaSwgaiBpbiB6aXAoZ29hbF9mdW5jLCBlKSkpIGlmIGlzX3NvbHV0aW9uKHN5c3RlbSwgZSkgZWxzZSBOb25lLCBjb21iaW5hdG9yaWFsX3NldCkKCiAgICAjIHJlbW92ZSBhbGwgdGhlIE5vbmUKICAgIHZhbGlkX3ZhbHVlcyA9IGZpbHRlcihsYW1iZGEgeDogeCAhPSBOb25lLCB2YWxpZF92YWx1ZXMpCgogICAgIyBnZXQgbWluaW1hbCB2YWx1ZQogICAgcmV0dXJuIG1pbih2YWxpZF92YWx1ZXMsIGtleT1sYW1iZGEgeDogeFsxXSkKCgpkZWYgaXNfc29sdXRpb24oc3lzdGVtLCBwb2ludCk6CiAgICAiIiIKICAgIENoZWNrcyB3aGV0aGVyIHRoZSBwb2ludCBpcyB0aGUgc29sdXRpb24gZm9yIGEgZ2l2ZW4gY29uc3RyYWludHMgc3lzdGVtLgogICAgIiIiCiAgICBhID0gbnAuYXJyYXkoc3lzdGVtKQoKICAgICMgZ2V0IHRoZSBsZWZ0IHBhcnQKICAgIGxlZnQgPSBhWzosIDotMV0gKiBwb2ludAogICAgbGVmdCA9IHN1bShsZWZ0LlQpCgogICAgIyBnZXQgdGhlIHJpZ2h0IHBhcnQKICAgIHJpZ2h0ID0gKC0xKSAqIGFbOiwgLTFdCiAgICByZXR1cm4gbnAuYWxsKGxlZnQgPD0gcmlnaHQpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHMgPSBbWzEsIC0yLCAzLCAwXSwgWy00LCAxLCAxLCAyXV0KICAgIGZ1bmMgPSAoLTEsIDEsIDIpCiAgICBwc2V0ID0gUGVybXV0YXRpb25TZXQoKDEsIDIsIDMpKQogICAgcG9pbnQsIGZ1bmNfdmFsdWUgPSBmaW5kX21pbmltdW1fd2l0aF9leGhhdXN0aXZlX3NlYXJjaChmdW5jLCBzLCBwc2V0KQogICAgcHJpbnQgIlBvaW50IGFuZCBtaW4gZnVjIHZhbHVlIGZvdW5kIHVzaW5nIGV4aGF1c3RpdmUgc2VhcmNoOiAiLCAocG9pbnQsIGZ1bmNfdmFsdWUpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBwb2ludDIsIGZ1bmNfdmFsdWUyID0gZmluZF9taW5pbXVtKGZ1bmMsIHMsIHBzZXQsIHF1aWV0PUZhbHNlKQogICAgcHJpbnQgIlBvaW50IGFuZCBtaW4gZnVjIHZhbHVlIGZvdW5kIHVzaW5nIHJhbmRvbSBzZWFyY2g6ICIsIChwb2ludDIsIGZ1bmNfdmFsdWUyKQo8fGZpbV9lbmR8Pg=="]
["5af197817fa3c1996b6498477b046301efebd56b-2","5af197817fa3c1996b6498477b046301efebd56b","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc9dXRmLTgKIyBDb3B5cmlnaHQgMjAxOCBUaGUgR29vZ2xlIEFJIExhbmd1YWdlIFRlYW0gQXV0aG9ycy4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIiIiUnVuIEJFUlQgb24gU1F1QUQgMS4xIGFuZCBTUXVBRCAyLjAuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCBjb2xsZWN0aW9ucwppbXBvcnQganNvbgppbXBvcnQgbWF0aAppbXBvcnQgb3MKaW1wb3J0IHJhbmRvbQppbXBvcnQgbW9kZWxpbmcKaW1wb3J0IHNpeAppbXBvcnQgc2h1dGlsCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgdGVuc29yZmxvdyBhcyB0Zgpmcm9tIHRlbnNvcmZsb3cucHl0aG9uLmZyYW1ld29yayBpbXBvcnQgZ3JhcGhfdXRpbAoKCmZsYWdzID0gdGYuZmxhZ3MKRkxBR1MgPSBmbGFncy5GTEFHUwoKIyBwYXJhbWV0ZXJzCmZsYWdzLkRFRklORV9zdHJpbmcoCiAgICAiYmVydF9jb25maWdfZmlsZSIsICdtb2RlbHMvYmVydF9jb25maWcuanNvbicsCiAgICAiVGhlIGNvbmZpZyBqc29uIGZpbGUgY29ycmVzcG9uZGluZyB0byB0aGUgcHJlLXRyYWluZWQgQkVSVCBtb2RlbC4gIgogICAgIlRoaXMgc3BlY2lmaWVzIHRoZSBtb2RlbCBhcmNoaXRlY3R1cmUuIikKCmZsYWdzLkRFRklORV9zdHJpbmcoInZvY2FiX2ZpbGUiLCAnbW9kZWxzL3ZvY2FiLnR4dCcsCiAgICAgICAgICAgICAgICAgICAgIlRoZSB2b2NhYnVsYXJ5IGZpbGUgdGhhdCB0aGUgQkVSVCBtb2RlbCB3YXMgdHJhaW5lZCBvbi4iKQoKZmxhZ3MuREVGSU5FX3N0cmluZygKICAgICJvdXRwdXRfZGlyIiwgJ3NhdmVkX21vZGVsJywKICAgICJUaGUgb3V0cHV0IGRpcmVjdG9yeSB3aGVyZSB0aGUgbW9kZWwgY2hlY2twb2ludHMgd2lsbCBiZSB3cml0dGVuLiIpCgpmbGFncy5ERUZJTkVfaW50ZWdlcigKICAgICJtYXhfc2VxX2xlbmd0aCIsIDM4NCwKICAgICJUaGUgbWF4aW11bSB0b3RhbCBpbnB1dCBzZXF1ZW5jZSBsZW5ndGggYWZ0ZXIgV29yZFBpZWNlIHRva2VuaXphdGlvbi4gIgogICAgIlNlcXVlbmNlcyBsb25nZXIgdGhhbiB0aGlzIHdpbGwgYmUgdHJ1bmNhdGVkLCBhbmQgc2VxdWVuY2VzIHNob3J0ZXIgIgogICAgInRoYW4gdGhpcyB3aWxsIGJlIHBhZGRlZC4iKQoKZmxhZ3MuREVGSU5FX2Jvb2woImRvX3ByZWRpY3QiLCBUcnVlLCAiV2hldGhlciB0byBydW4gZXZhbCBvbiB0aGUgZGV2IHNldC4iKQoKZmxhZ3MuREVGSU5FX2ludGVnZXIoImJhdGNoX3NpemUiLCA4LAogICAgICAgICAgICAgICAgICAgICAiVG90YWwgYmF0Y2ggc2l6ZSBmb3IgcHJlZGljdGlvbnMuIikKCmZsYWdzLkRFRklORV9ib29sKCJmcm96ZW5fcGIiLCBGYWxzZSwgIldoZXRoZXIgc2F2ZSB3aXRoIGZyb3plbl9wYiBvciBTYXZlZE1vZGVsIikKCmZsYWdzLkRFRklORV9ib29sKAogICAgInZlcmJvc2VfbG9nZ2luZyIsIEZhbHNlLAogICAgIklmIHRydWUsIGFsbCBvZiB0aGUgd2FybmluZ3MgcmVsYXRlZCB0byBkYXRhIHByb2Nlc3Npbmcgd2lsbCBiZSBwcmludGVkLiAiCiAgICAiQSBudW1iZXIgb2Ygd2FybmluZ3MgYXJlIGV4cGVjdGVkIGZvciBhIG5vcm1hbCBTUXVBRCBldmFsdWF0aW9uLiIpCgpmbGFncy5ERUZJTkVfYm9vbCgKICAgICJ2ZXJzaW9uXzJfd2l0aF9uZWdhdGl2ZSIsIEZhbHNlLAogICAgIklmIHRydWUsIHRoZSBTUXVBRCBleGFtcGxlcyBjb250YWluIHNvbWUgdGhhdCBkbyBub3QgaGF2ZSBhbiBhbnN3ZXIuIikKCgpkZWYgY3JlYXRlX21vZGVsKGJlcnRfY29uZmlnLCBpc190cmFpbmluZywgaW5wdXRfaWRzLCBpbnB1dF9tYXNrLCBzZWdtZW50X2lkcywKICAgICAgICAgICAgICAgICB1c2Vfb25lX2hvdF9lbWJlZGRpbmdzKToKICAiIiJDcmVhdGVzIGEgY2xhc3NpZmljYXRpb24gbW9kZWwuIiIiCiAgbW9kZWwgPSBtb2RlbGluZy5CZXJ0TW9kZWwoCjx8ZmltX2hvbGV8PgogICAgICB0b2tlbl90eXBlX2lkcz1zZWdtZW50X2lkcywKICAgICAgdXNlX29uZV9ob3RfZW1iZWRkaW5ncz11c2Vfb25lX2hvdF9lbWJlZGRpbmdzKQoKICBmaW5hbF9oaWRkZW4gPSBtb2RlbC5nZXRfc2VxdWVuY2Vfb3V0cHV0KCkKCiAgZmluYWxfaGlkZGVuX3NoYXBlID0gbW9kZWxpbmcuZ2V0X3NoYXBlX2xpc3QoZmluYWxfaGlkZGVuLCBleHBlY3RlZF9yYW5rPTMpCiAgYmF0Y2hfc2l6ZSA9IGZpbmFsX2hpZGRlbl9zaGFwZVswXQogIHNlcV9sZW5ndGggPSBmaW5hbF9oaWRkZW5fc2hhcGVbMV0KICBoaWRkZW5fc2l6ZSA9IGZpbmFsX2hpZGRlbl9zaGFwZVsyXQoKICBvdXRwdXRfd2VpZ2h0cyA9IHRmLmdldF92YXJpYWJsZSgKICAgICAgImNscy9zcXVhZC9vdXRwdXRfd2VpZ2h0cyIsIFsyLCBoaWRkZW5fc2l6ZV0sCiAgICAgIGluaXRpYWxpemVyPXRmLnRydW5jYXRlZF9ub3JtYWxfaW5pdGlhbGl6ZXIoc3RkZGV2PTAuMDIpKQoKICBvdXRwdXRfYmlhcyA9IHRmLmdldF92YXJpYWJsZSgKICAgICAgImNscy9zcXVhZC9vdXRwdXRfYmlhcyIsIFsyXSwgaW5pdGlhbGl6ZXI9dGYuemVyb3NfaW5pdGlhbGl6ZXIoKSkKCiAgZmluYWxfaGlkZGVuX21hdHJpeCA9IHRmLnJlc2hhcGUoZmluYWxfaGlkZGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiYXRjaF9zaXplICogc2VxX2xlbmd0aCwgaGlkZGVuX3NpemVdKQogIGxvZ2l0cyA9IHRmLm1hdG11bChmaW5hbF9oaWRkZW5fbWF0cml4LCBvdXRwdXRfd2VpZ2h0cywgdHJhbnNwb3NlX2I9VHJ1ZSkKICBsb2dpdHMgPSB0Zi5ubi5iaWFzX2FkZChsb2dpdHMsIG91dHB1dF9iaWFzKQoKICBsb2dpdHMgPSB0Zi5yZXNoYXBlKGxvZ2l0cywgW2JhdGNoX3NpemUsIHNlcV9sZW5ndGgsIDJdKQogIGxvZ2l0cyA9IHRmLnRyYW5zcG9zZShsb2dpdHMsIFsyLCAwLCAxXSwgbmFtZT0nbG9naXRzJykKCiAgcmV0dXJuIGxvZ2l0cwoKCmRlZiBtb2RlbF9mbl9idWlsZGVyKGJlcnRfY29uZmlnLCB1c2Vfb25lX2hvdF9lbWJlZGRpbmdzLCBwbGFjZWhvbGRlcnMpOgogIGlucHV0X2lkcyA9IHBsYWNlaG9sZGVyc1siaW5wdXRfaWRzIl0KICBpbnB1dF9tYXNrID0gcGxhY2Vob2xkZXJzWyJpbnB1dF9tYXNrIl0KICBzZWdtZW50X2lkcyA9IHBsYWNlaG9sZGVyc1sic2VnbWVudF9pZHMiXQoKICBsb2dpdHMgPSBjcmVhdGVfbW9kZWwoCiAgICAgIGJlcnRfY29uZmlnPWJlcnRfY29uZmlnLAogICAgICBpc190cmFpbmluZz1GYWxzZSwKICAgICAgaW5wdXRfaWRzPWlucHV0X2lkcywKICAgICAgaW5wdXRfbWFzaz1pbnB1dF9tYXNrLAogICAgICBzZWdtZW50X2lkcz1zZWdtZW50X2lkcywKICAgICAgdXNlX29uZV9ob3RfZW1iZWRkaW5ncz11c2Vfb25lX2hvdF9lbWJlZGRpbmdzKQoKICByZXR1cm4gbG9naXRzCgoKCmRlZiBnZXRfZmVlZF9kaWN0KHBsYWNlaG9sZGVycywgc2hhcGUpOgogICIiIkNyZWF0ZXMgYW4gYGlucHV0X2ZuYCBjbG9zdXJlIHRvIGJlIHBhc3NlZCB0byBUUFVFc3RpbWF0b3IuIiIiCiAgbnAucmFuZG9tLnNlZWQoMTIzNDUpCgogIGZlZWRfZGljdCA9IHt9CiAgZmVlZF9kaWN0W3BsYWNlaG9sZGVyc1snaW5wdXRfaWRzJ11dID0gbnAucmFuZG9tLnJhbmRpbnQoMCwgMzA1MjIsIHNoYXBlLCBkdHlwZT1ucC5pbnQzMikKICBmZWVkX2RpY3RbcGxhY2Vob2xkZXJzWydpbnB1dF9tYXNrJ11dID0gbnAucmFuZG9tLnJhbmRpbnQoMCwgMiwgc2hhcGUsIGR0eXBlPW5wLmludDMyKQogIGZlZWRfZGljdFtwbGFjZWhvbGRlcnNbJ3NlZ21lbnRfaWRzJ11dID0gbnAucmFuZG9tLnJhbmRpbnQoMCwgMiwgc2hhcGUsIGR0eXBlPW5wLmludDMyKQoKICByZXR1cm4gZmVlZF9kaWN0CgoKZGVmIG1haW4oKToKICBpZiBvcy5wYXRoLmV4aXN0cyhGTEFHUy5vdXRwdXRfZGlyKToKICAgIHNodXRpbC5ybXRyZWUoRkxBR1Mub3V0cHV0X2RpcikKICB0Zi5nZmlsZS5NYWtlRGlycyhGTEFHUy5vdXRwdXRfZGlyKQoKICB0Zi5sb2dnaW5nLnNldF92ZXJib3NpdHkodGYubG9nZ2luZy5JTkZPKQoKICBiZXJ0X2NvbmZpZyA9IG1vZGVsaW5nLkJlcnRDb25maWcuZnJvbV9qc29uX2ZpbGUoRkxBR1MuYmVydF9jb25maWdfZmlsZSkKCiAgZ3JhcGggPSB0Zi5nZXRfZGVmYXVsdF9ncmFwaCgpCgogIHBsYWNlaG9sZGVycyA9IHt9CiAgc2hhcGUgPSAoRkxBR1MuYmF0Y2hfc2l6ZSwgRkxBR1MubWF4X3NlcV9sZW5ndGgpCiAgd2l0aCBncmFwaC5hc19kZWZhdWx0KCk6CiAgICBwbGFjZWhvbGRlcnNbImlucHV0X2lkcyJdID0gdGYucGxhY2Vob2xkZXIodGYuaW50MzIsIHNoYXBlLCBuYW1lPSdpbnB1dF9pZHMnKQogICAgcGxhY2Vob2xkZXJzWyJpbnB1dF9tYXNrIl0gPSB0Zi5wbGFjZWhvbGRlcih0Zi5pbnQzMiwgc2hhcGUsIG5hbWU9J2lucHV0X21hc2snKQogICAgcGxhY2Vob2xkZXJzWyJzZWdtZW50X2lkcyJdID0gdGYucGxhY2Vob2xkZXIodGYuaW50MzIsIHNoYXBlLCBuYW1lPSdzZWdtZW50X2lkcycpCiAgICBsb2dpdHMgPSBtb2RlbF9mbl9idWlsZGVyKAogICAgICAgIGJlcnRfY29uZmlnPWJlcnRfY29uZmlnLAogICAgICAgIHVzZV9vbmVfaG90X2VtYmVkZGluZ3M9RmFsc2UsCiAgICAgICAgcGxhY2Vob2xkZXJzPXBsYWNlaG9sZGVycykKCiAgZmVlZF9kaWN0ID0gZ2V0X2ZlZWRfZGljdChwbGFjZWhvbGRlcnMsIHNoYXBlKQogIHdpdGggdGYuU2Vzc2lvbihncmFwaD1ncmFwaCkgYXMgc2VzczoKICAgIHNlc3MucnVuKHRmLmdsb2JhbF92YXJpYWJsZXNfaW5pdGlhbGl6ZXIoKSkKICAgIG91dHB1dCA9IHNlc3MucnVuKGxvZ2l0cywgZmVlZF9kaWN0KQogICAgcHJpbnQob3V0cHV0LnNoYXBlKQoKICAgIGlmIEZMQUdTLmZyb3plbl9wYjoKICAgICAgZ3JhcGhfZGVmID0gZ3JhcGhfdXRpbC5jb252ZXJ0X3ZhcmlhYmxlc190b19jb25zdGFudHMoc2Vzcywgc2Vzcy5ncmFwaF9kZWYsIFsnbG9naXRzJ10pCiAgICAgIHdpdGggdGYuZ2ZpbGUuRmFzdEdGaWxlKEZMQUdTLm91dHB1dF9kaXIgKyAnL2JlcnRfYmFzZS5wYicsIG1vZGU9J3diJykgYXMgZjoKICAgICAgICBmLndyaXRlKGdyYXBoX2RlZi5TZXJpYWxpemVUb1N0cmluZygpKQogICAgZWxzZToKICAgICAgcHJpbnQoIkV4cG9ydGluZyBtb2RlbCB0byAiLCBGTEFHUy5vdXRwdXRfZGlyKQogICAgICBidWlsZGVyID0gdGYuc2F2ZWRfbW9kZWwuYnVpbGRlci5TYXZlZE1vZGVsQnVpbGRlcihGTEFHUy5vdXRwdXRfZGlyKQoKICAgICAgaWRzICA9IHRmLnNhdmVkX21vZGVsLnV0aWxzLmJ1aWxkX3RlbnNvcl9pbmZvKHBsYWNlaG9sZGVyc1siaW5wdXRfaWRzIl0pCiAgICAgIG1hc2sgPSB0Zi5zYXZlZF9tb2RlbC51dGlscy5idWlsZF90ZW5zb3JfaW5mbyhwbGFjZWhvbGRlcnNbImlucHV0X21hc2siXSkKICAgICAgc2VnICA9IHRmLnNhdmVkX21vZGVsLnV0aWxzLmJ1aWxkX3RlbnNvcl9pbmZvKHBsYWNlaG9sZGVyc1sic2VnbWVudF9pZHMiXSkKCiAgICAgIHN0YXJ0ID0gdGYuc2F2ZWRfbW9kZWwudXRpbHMuYnVpbGRfdGVuc29yX2luZm8obG9naXRzKQoKICAgICAgcHJlZGljdGlvbl9zaWduYXR1cmUgPSAoCiAgICAgICAgICB0Zi5zYXZlZF9tb2RlbC5zaWduYXR1cmVfZGVmX3V0aWxzLmJ1aWxkX3NpZ25hdHVyZV9kZWYoCiAgICAgICAgICAgICAgaW5wdXRzPXsnaW5wdXRfaWRzJzogaWRzLCAnaW5wdXRfbWFzayc6IG1hc2ssICdzZWdtZW50X2lkcyc6IHNlZ30sCiAgICAgICAgICAgICAgb3V0cHV0cz17J2xvZ2l0cyc6IHN0YXJ0fSwKICAgICAgICAgICAgICBtZXRob2RfbmFtZT10Zi5zYXZlZF9tb2RlbC5zaWduYXR1cmVfY29uc3RhbnRzCiAgICAgICAgICAgICAgLlBSRURJQ1RfTUVUSE9EX05BTUUpKQoKICAgICAgYnVpbGRlci5hZGRfbWV0YV9ncmFwaF9hbmRfdmFyaWFibGVzKAogICAgICAgICAgc2VzcywgW3RmLnNhdmVkX21vZGVsLnRhZ19jb25zdGFudHMuU0VSVklOR10sCiAgICAgICAgICBzaWduYXR1cmVfZGVmX21hcD17CiAgICAgICAgICAgICAgJ2JlcnRfYmFzZSc6CiAgICAgICAgICAgICAgICAgIHByZWRpY3Rpb25fc2lnbmF0dXJlLAogICAgICAgICAgICAgIHRmLnNhdmVkX21vZGVsLnNpZ25hdHVyZV9jb25zdGFudHMKICAgICAgICAgICAgICAuREVGQVVMVF9TRVJWSU5HX1NJR05BVFVSRV9ERUZfS0VZOgogICAgICAgICAgICAgICAgICBwcmVkaWN0aW9uX3NpZ25hdHVyZSwKICAgICAgICAgIH0sCiAgICAgICAgICBtYWluX29wPXRmLnRhYmxlc19pbml0aWFsaXplcigpLAogICAgICAgICAgc3RyaXBfZGVmYXVsdF9hdHRycz1UcnVlKQogICAgICBidWlsZGVyLnNhdmUoKQoKICAgICAgcHJpbnQoJ0RvbmUgZXhwb3J0aW5nIScpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICBmbGFncy5tYXJrX2ZsYWdfYXNfcmVxdWlyZWQoInZvY2FiX2ZpbGUiKQogIGZsYWdzLm1hcmtfZmxhZ19hc19yZXF1aXJlZCgiYmVydF9jb25maWdfZmlsZSIpCiAgZmxhZ3MubWFya19mbGFnX2FzX3JlcXVpcmVkKCJvdXRwdXRfZGlyIikKICBtYWluKCkKPHxmaW1fc3VmZml4fD4KICAgICAgY29uZmlnPWJlcnRfY29uZmlnLAogICAgICBpc190cmFpbmluZz1pc190cmFpbmluZywKICAgICAgaW5wdXRfaWRzPWlucHV0X2lkcywKICAgICAgaW5wdXRfbWFzaz1pbnB1dF9tYXNrLAo8fGZpbV9lbmR8Pg=="]
["850ebb36dfa10bd2eccd92c495d0178e8af54bb1-4","850ebb36dfa10bd2eccd92c495d0178e8af54bb1","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTAKCmltcG9ydCBib3RvMwppbXBvcnQgdGltZQppbXBvcnQgYW1hem9uLmlvbi5zaW1wbGVpb24gYXMgaW9uCmZyb20gYW1hem9uLmlvbi5qc29uX2VuY29kZXIgaW1wb3J0IElvblRvSlNPTkVuY29kZXIKaW1wb3J0IGpzb24KaW1wb3J0IGJhc2U2NAppbXBvcnQgbG9nZ2luZwppbXBvcnQgb3MKZnJvbSBhd3Nfa2luZXNpc19hZ2cuZGVhZ2dyZWdhdG9yIGltcG9ydCBkZWFnZ3JlZ2F0ZV9yZWNvcmRzCmZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbAoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQpsb2dnZXIuc2V0TGV2ZWwob3MuZ2V0ZW52KCdMT0dfTEVWRUwnKSkKCnNlc3Npb24gPSBib3RvMy5TZXNzaW9uKCkKUUxEQl9UQUJMRV9OQU1FID0gb3MuZ2V0ZW52KGtleT0nUUxEQl9UQUJMRV9OQU1FJykKZHluYW1vZGIgPSBib3RvMy5yZXNvdXJjZSgnZHluYW1vZGInKQpEREJfVEFCTEVfTkFNRSA9IG9zLmdldGVudihrZXk9J0REQl9UQUJMRV9OQU1FJykKdGFibGUgPSBkeW5hbW9kYi5UYWJsZShEREJfVEFCTEVfTkFNRSkKRVhQSVJFX0FGVEVSX0RBWVMgPSBvcy5nZXRlbnYoa2V5PSdFWFBJUkVfQUZURVJfREFZUycsIGRlZmF1bHQ9Tm9uZSkKVFRMX0FUVFJJQlVURSA9IG9zLmdldGVudihrZXk9J1RUTF9BVFRSSUJVVEUnLCBkZWZhdWx0PU5vbmUpCgpSRVZJU0lPTl9ERVRBSUxTX1JFQ09SRF9UWVBFID0gIlJFVklTSU9OX0RFVEFJTFMiCgoKZGVmIGZpbHRlcmVkX3JlY29yZHNfZ2VuZXJhdG9yKGtpbmVzaXNfZGVhZ2dyZWdhdGVfcmVjb3JkcywgdGFibGVfbmFtZXM9Tm9uZSk6CiAgICBmb3IgcmVjb3JkIGluIGtpbmVzaXNfZGVhZ2dyZWdhdGVfcmVjb3JkczoKICAgICAgICAjIEtpbmVzaXMgZGF0YSBpbiBQeXRob24gTGFtYmRhcyBpcyBiYXNlNjQgZW5jb2RlZAogICAgICAgIHBheWxvYWQgPSBiYXNlNjQuYjY0ZGVjb2RlKHJlY29yZFsna2luZXNpcyddWydkYXRhJ10pCiAgICAgICAgIyBwYXlsb2FkIGlzIHRoZSBhY3R1YWwgaW9uIGJpbmFyeSByZWNvcmQgcHVibGlzaGVkIGJ5IFFMREIgdG8gdGhlIHN0cmVhbQogICAgICAgIGlvbl9yZWNvcmQgPSBpb24ubG9hZHMocGF5bG9hZCkKICAgICAgICBsb2dnZXIuaW5mbyhmIklvbiByZWNvcmQ6IHtpb24uZHVtcHMoaW9uX3JlY29yZCwgYmluYXJ5PUZhbHNlKX0iKQoKICAgICAgICBpZiAoInJlY29yZFR5cGUiIGluIGlvbl9yZWNvcmQpIGFuZCAoaW9uX3JlY29yZFsicmVjb3JkVHlwZSJdID09IFJFVklTSU9OX0RFVEFJTFNfUkVDT1JEX1RZUEUpOgogICAgICAgICAgICB0YWJsZV9pbmZvID0gZ2V0X3RhYmxlX2luZm9fZnJvbV9yZXZpc2lvbl9yZWNvcmQoaW9uX3JlY29yZCkKCiAgICAgICAgICAgIGlmIG5vdCB0YWJsZV9uYW1lcyBvciAodGFibGVfaW5mbyBhbmQgKHRhYmxlX2luZm9bInRhYmxlTmFtZSJdIGluIHRhYmxlX25hbWVzKSk6CiAgICAgICAgICAgICAgICByZXZpc2lvbl9kYXRhLCByZXZpc2lvbl9tZXRhZGF0YSA9IGdldF9kYXRhX21ldGRhdGFfZnJvbV9yZXZpc2lvbl9yZWNvcmQoaW9uX3JlY29yZCkKCiAgICAgICAgICAgICAgICB5aWVsZCB7InRhYmxlX2luZm8iOiB0YWJsZV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICJyZXZpc2lvbl9kYXRhIjogcmV2aXNpb25fZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAicmV2aXNpb25fbWV0YWRhdGEiOiByZXZpc2lvbl9tZXRhZGF0YX0KCgpkZWYgZ2V0X2RhdGFfbWV0ZGF0YV9mcm9tX3JldmlzaW9uX3JlY29yZChyZXZpc2lvbl9yZWNvcmQpOgogICAgIiIiCiAgICBSZXRyaWV2ZXMgdGhlIGRhdGEgYmxvY2sgZnJvbSByZXZpc2lvbiBSZXZpc2lvbiBSZWNvcmQKICAgIFBhcmFtZXRlcnM6CiAgICAgICByZXZpc2lvbl9yZWNvcmQgKHN0cmluZyk6IFRoZSBpb24gcmVwcmVzZW50YXRpb24gb2YgUmV2aXNpb24gcmVjb3JkIGZyb20gUUxEQiBTdHJlYW1zCiAgICAiIiIKCiAgICByZXZpc2lvbl9kYXRhID0gTm9uZQogICAgcmV2aXNpb25fbWV0YWRhdGEgPSBOb25lCgogICAgaWYgKCJwYXlsb2FkIiBpbiByZXZpc2lvbl9yZWNvcmQpIGFuZCAoInJldmlzaW9uIiBpbiByZXZpc2lvbl9yZWNvcmRbInBheWxvYWQiXSk6CiAgICAgICAgaWYgImRhdGEiIGluIHJldmlzaW9uX3JlY29yZFsicGF5bG9hZCJdWyJyZXZpc2lvbiJdOgogICAgICAgICAgICByZXZpc2lvbl9kYXRhID0gcmV2aXNpb25fcmVjb3JkWyJwYXlsb2FkIl1bInJldmlzaW9uIl1bImRhdGEiXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldmlzaW9uX2RhdGEgPSBOb25lCiAgICAgICAgaWYgIm1ldGFkYXRhIiBpbiByZXZpc2lvbl9yZWNvcmRbInBheWxvYWQiXVsicmV2aXNpb24iXToKICAgICAgICAgICAgcmV2aXNpb25fbWV0YWRhdGEgPSByZXZpc2lvbl9yZWNvcmRbInBheWxvYWQiXVsicmV2aXNpb24iXVsibWV0YWRhdGEiXQoKICAgIHJldHVybiBbcmV2aXNpb25fZGF0YSwgcmV2aXNpb25fbWV0YWRhdGFdCgoKZGVmIGdldF90YWJsZV9pbmZvX2Zyb21fcmV2aXNpb25fcmVjb3JkKHJldmlzaW9uX3JlY29yZCk6CiAgICAiIiIKICAgIFJldHJpZXZlcyB0aGUgdGFibGUgaW5mb3JtYXRpb24gYmxvY2sgZnJvbSByZXZpc2lvbiBSZXZpc2lvbiBSZWNvcmQKICAgIFRhYmxlIGluZm9ybWF0aW9uIGNvbnRhaW5zIHRoZSB0YWJsZSBuYW1lIGFuZCB0YWJsZSBpZAogICAgUGFyYW1ldGVyczoKICAgICAgIHJldmlzaW9uX3JlY29yZCAoc3RyaW5nKTogVGhlIGlvbiByZXByZXNlbnRhdGlvbiBvZiBSZXZpc2lvbiByZWNvcmQgZnJvbSBRTERCIFN0cmVhbXMKICAgICIiIgoKICAgIGlmICgicGF5bG9hZCIgaW4gcmV2aXNpb25fcmVjb3JkKSBhbmQgInRhYmxlSW5mbyIgaW4gcmV2aXNpb25fcmVjb3JkWyJwYXlsb2FkIl06CiAgICAgICAgcmV0dXJuIHJldmlzaW9uX3JlY29yZFsicGF5bG9hZCJdWyJ0YWJsZUluZm8iXQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKZGVmIGRheXNfdG9fc2Vjb25kcyAoZGF5cyk6CiAgICByZXR1cm4gaW50KGRheXMpICogMjQgKiA2MCAqIDYwCjx8ZmltX2VuZHw+"]
["5ce15c7c08e7e547994c510bbc9ddbfc7b6fa395-5","5ce15c7c08e7e547994c510bbc9ddbfc7b6fa395","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKZGVmIGhhbW1pbmdXZWlnaHQoc2VsZiwgbjogaW50KSAtPiBpbnQ6CiAgICByZXN1bHQgPSAwCgogICAgd2hpbGUgbiAhPSAwOgogICAgICAgIHJlc3VsdCArPSAxCiAgICAgICAgbiAmPSAobi0xKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcmV0dXJuIHJlc3VsdAo8fGZpbV9lbmR8Pg=="]
["cf96a2772915a601a81b5dfce5a8f18293d1d6f3-2","cf96a2772915a601a81b5dfce5a8f18293d1d6f3","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cAoKc2V0dXAobmFtZT0nbGZzcl9icmVha2VyJywKICAgICAgdmVyc2lvbj0nMC4yJywKICAgICAgZGVzY3JpcHRpb249J0EgTEZTUiBhdXRvbWF0aWMgcmV2ZXJzZSBlbmdpbmVlcmluZyB0b29sJywKICAgICAgdXJsPSdodHRwOi8vZ2l0aHViLmNvbS92Ym91c3Nvbi9sZnNyX2JyZWFrZXInLAogICAgICBhdXRob3I9J1ZhbGVudGluIEJPVVNTT04nLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgIGF1dGhvcl9lbWFpbD0ndmFsZW50aW5AYm91c3Nvbi5jb20nLAogICAgICBsaWNlbnNlPSdNSVQnLAogICAgICBwYWNrYWdlcz1bJ2xmc3JfYnJlYWtlciddLAogICAgICB6aXBfc2FmZT1GYWxzZSkKPHxmaW1fZW5kfD4="]
["cf1179a7ccf08ecf1a5478b902bd6d3ddd942303-1","cf1179a7ccf08ecf1a5478b902bd6d3ddd942303","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBUbyBiZSBjb250aW51ZWQKPHxmaW1fZW5kfD4="]
["41add671dfa6e093de8b9372cfb70e3b4bccfc45-1","41add671dfa6e093de8b9372cfb70e3b4bccfc45","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmZyb20gZGF0YWJhc2VfZGVzaWduLnNvbmF0YV90YWJsZV9zcGVjcyBpbXBvcnQgRXhwbwpmcm9tIGRhdGFiYXNlX2Rlc2lnbi5zb25hdGFfdmlld19zcGVjcyBpbXBvcnQgRXhwb3NpdGlvblJlY2FwaXR1bGF0aW9uCmZyb20gZ2VuZXJhbF91dGlscy5zcWxfdXRpbHMgaW1wb3J0ICoKCndpdGggTG9jYWxob3N0Q3Vyc29yKCkgYXMgY3VyOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAjIHByaW50KGdldF9jb2x1bW5fbmFtZXMoRXhwb3NpdGlvbi5zY2hlbWFfdGFibGUoKSwgY3VyKSkKICAgIHByaW50KEV4cG9zaXRpb25SZWNhcGl0dWxhdGlvbi5jcmVhdGVfdmlld19zcWwoY3VyKS5hc19zdHJpbmcoY3VyKSkKPHxmaW1fZW5kfD4="]
["ec2482dc6f11933a7c3671645427f43ec8439942-1","ec2482dc6f11933a7c3671645427f43ec8439942",{"$cut":{"chars":21388,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwpmcm9tIFB5U2lkZTIgaW1wb3J0IFF0Q29yZSwgUXRHdWkKZnJvbSBQeVNpZGUyLlF0V2lkZ2V0cyBpbXBvcnQgUUFwcGxpY2F0aW9uLCBRTWFpbldpbmRvdywgUUdyaWRMYXlvdXQsIFFXaWRnZXQsIFFDaGVja0JveCwgUUxheW91dCwgUURpYWxvZywgUUxhYmVsLCBRUHVzaEJ1dHRvbiwgUVZCb3hMYXlvdXQKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBweXF0Z3JhcGggYXMgcGcKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgdXRpbHMKCgpjbGFzcyBleHRyYWN0UGVha3NEaWFsb2coUURpYWxvZyk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzdXBlcihleHRyYWN0UGVha3NEaWFsb2csIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKICAgICAgICAKICAgICAgICBzZWxmLnBlYWtzU2NyYXBlZCA9IEZhbHNlCiAgICAgICAgc2VsZi5zbWFsbCA9IDMKICAgICAgICBzZWxmLmZhaWx1cmVzX251bGxlZCA9IEZhbHNlCiAgICAgICAgc2VsZi5ydW5kb3duVGhyZXNob2xkID0gMC41ICAgICAjIHRvIGFzc2VzcyB3aGV0aGVyIHJlc3BvbnNlcyBhcmUgcnVubmluZyBkb3duIChieSBmYWN0b3IgMiBvciBtb3JlKQogICAgICAgIHNlbGYubWFrZURpYWxvZygpCiAgICAKICAgIGRlZiBtYWtlRGlhbG9nKHNlbGYpOgogICAgICAgICIiIkNyZWF0ZSB0aGUgY29udHJvbHMgZm9yIHRoZSBkaWFsb2ciIiIKICAgICAgICAKICAgICAgICBzZWxmLnNldFdpbmRvd1RpdGxlKCJFeHRyYWN0IHBlYWtzIGFjY29yZGluZyB0byByZWZlcmVuY2UgcGF0dGVybiIpCiAgICAgICAgbGF5b3V0ID0gUUdyaWRMYXlvdXQoKQogICAgICAgIHcgPSBRV2lkZ2V0KCkKICAgICAgICB3LnNldExheW91dChsYXlvdXQpCiAgICAgICAgCiAgICAgICAgc2VsZi5yZXNpemUoNTAwLDQwMCkKICAgICAgICB2Ym94ID0gUVZCb3hMYXlvdXQoKQogICAgICAgIHZib3guYWRkV2lkZ2V0KHcpCiAgICAgICAgc2VsZi5zZXRMYXlvdXQodmJveCkKICAgICAgICAKICAgICAgICBzZWxmLk5fUk9JX2xhYmVsID0gUUxhYmVsKCdFeHRyYWN0aW5nIHBlYWtzJykKICAgICAgICAKICAgICAgICAKICAgICAgICAjd2lsbCBiZSBhbHRlcmVkIGFzIHNvb24gYXMgZGF0YSBsb2FkcwogICAgICAgIHNlbGYuc2tpcFJCID0gUUNoZWNrQm94KCdTa2lwIFJPSXMgd2l0aCBTTlIgbGVzcyB0aGFuJykKICAgICAgICBzZWxmLnNraXBSQi5zZXRDaGVja2VkKEZhbHNlKQogICAgICAgIHNlbGYuc2tpcFJCLnNldExheW91dERpcmVjdGlvbihRdENvcmUuUXQuTGVmdFRvUmlnaHQpCiAgICAgICAgc2VsZi5za2lwUkIuc3RhdGVDaGFuZ2VkLmNvbm5lY3Qoc2VsZi5tYXNrTG93U05SKQogICAgICAgIAogICAgICAgIHNlbGYuc2tpcFNCID0gcGcuU3BpbkJveCh2YWx1ZT0zLCBzdGVwPS4yLCBib3VuZHM9WzEsIDEwXSwgZGVsYXk9MCkKICAgICAgICBzZWxmLnNraXBTQi5zZXRGaXhlZFNpemUoNjAsIDI1KQogICAgICAgIHNlbGYuc2tpcFNCLnZhbHVlQ2hhbmdlZC5jb25uZWN0KHNlbGYubWFza0xvd1NOUikKICAgICAgICAKICAgICAgICBwc3JfbGFiZWwgPSBRTGFiZWwoJ1NlYXJjaCByYW5nZSBhcm91bmQgcGVhayAoZGF0YSBwb2ludHMpJykKICAgICAgICBzZWxmLnBzclNCID0gcGcuU3BpbkJveCh2YWx1ZT0zLCBzdGVwPTIsIGJvdW5kcz1bMSwgN10sIGRlbGF5PTAsIGludD1UcnVlKQogICAgICAgIHNlbGYucHNyU0Iuc2V0Rml4ZWRTaXplKDYwLCAyNSkKICAgICAgICAKICAgICAgICAjd2lsbCBiZSBhbHRlcmVkIGFzIHNvb24gYXMgZGF0YSBsb2FkcwogICAgICAgIHNlbGYubm9pc2VSQiA9IFFDaGVja0JveCgnVHJlYXQgcGVha3MgYXMgZmFpbHVyZXMgd2hlbiA8IFNEIHgnKQogICAgICAgIHNlbGYubm9pc2VSQi5zZXRDaGVja2VkKEZhbHNlKQogICAgICAgIHNlbGYubm9pc2VSQi5zZXRMYXlvdXREaXJlY3Rpb24oUXRDb3JlLlF0LkxlZnRUb1JpZ2h0KQogICAgICAgIHNlbGYubm9pc2VSQi5zdGF0ZUNoYW5nZWQuY29ubmVjdChzZWxmLnNldEZhaWx1cmVzKQogICAgICAgIHNlbGYubm9pc2VSQi5zZXREaXNhYmxlZChUcnVlKQogICAgICAgIAoKICAgICAgICBzZWxmLm5vaXNlU0IgPSBwZy5TcGluQm94KHZhbHVlPTEuNSwgc3RlcD0uMSwgYm91bmRzPVsuMiwgMTBdLCBkZWxheT0wKQogICAgICAgIHNlbGYubm9pc2VTQi5zZXRGaXhlZFNpemUoNjAsIDI1KQogICAgICAgIHNlbGYubm9pc2VTQi52YWx1ZUNoYW5nZWQuY29ubmVjdChzZWxmLnNldEZhaWx1cmVzKQogICAgICAgIHNlbGYubm9pc2VTQi5zZXREaXNhYmxlZChUcnVlKQogICAgICAgICAgICAgICAgCiAgICAgICAgc2VsZi5wZWFrc0xhYmVsID0gUUxhYmVsKCdObyBwZWFrcyBzZXQgdG8gYmUgZmFpbHVyZXMuJykKICAgICAgICAKPHxmaW1faG9sZXw+CiAgICAgICAgc2VsZi5nZXRSdW5kb3duQnRuLmNsaWNrZWQuY29ubmVjdChzZWxmLmdldFJ1bmRvd24pCiAgICAgICAgc2VsZi5nZXRSdW5kb3duQnRuLnNldERpc2FibGVkKFRydWUpCiAgICAgICAgCiAgICAgICAgX2NhbmNlbEJ0biA9IFFQdXNoQnV0dG9uKCdDYW5jZWwnKQogICAgICAgIF9jYW5jZWxCdG4uY2xpY2tlZC5jb25uZWN0KHNlbGYucmVqZWN0KQogICAgICAgIAogICAgICAgIHNlbGYuYWNjZXB0QnRuID0gUVB1c2hCdXR0b24oJ0FjY2VwdCBhbmQgUmV0dXJuJykKICAgICAgICBzZWxmLmFjY2VwdEJ0bi5jbGlja2VkLmNvbm5lY3Qoc2VsZi5wcmVwYXJlQWNjZXB0KQogICAgICAgIHNlbGYuYWNjZXB0QnRuLnNldERpc2FibGVkKFRydWUpCiAgICAgICAgCiAgICAgICAgbGF5b3V0LmFkZFdpZGdldChzZWxmLk5fUk9JX2xhYmVsLCAwLCAwLCAxLCAyKQogICAgICAgIAogICAgICAgIGxheW91dC5hZGRXaWRnZXQoc2VsZi5za2lwUkIsIDEsIDAsIDEsIDMpCiAgICAgICAgbGF5b3V0LmFkZFdpZGdldChzZWxmLnNraXBTQiwgMSwgMiwgMSwgMSkKICAgICAgICAKICAgICAgICBsYXlvdXQuYWRkV2lkZ2V0KHBzcl9sYWJlbCwgIDIsIDAsIDEsIDIpCiAgICAgICAgbGF5b3V0LmFkZFdpZGdldChzZWxmLnBzclNCLCByb3c9Miwg"}}]
["e73cc5b6fdc049b0f5b6098cf1e0447abb3b2e1f-1","e73cc5b6fdc049b0f5b6098cf1e0447abb3b2e1f","PHxmaW1fcHJlZml4fD4KcGFyYW0gPSBkaWN0KAoJdXNlQUlvbj1UcnVlLAoJdmVyYm9zZT1GYWxzZSwKCWNoYXJnZVByZVhsaW5rSW9ucz1bMSwgM10sCgljaGFyZ2VQb3N0WGxpbmtJb25zPVsyLCA1XSwKCWJhc2VwZWFraW50ID0gMTAwLjAsCglkeW5hbWljcmFuZ2UgPSAwLjAwMSwKCW1pc3NlZHNpdGVzID0gMiwKCW1pbmxlbmd0aCA9IDQsCgltYXhsZW5ndGggPSA1MSwKCW1vZFJlcyA9ICcnLAoJbW9kTWFzcyA9IDAuMCwKCWxpbmtlcm1hc3MgPSAxMzYuMTAwMDUsCgltczF0b2wgPSBkaWN0KG1lYXN1cmU9J3BwbScsIHZhbD01KSwKCW1zMnRvbCA9IGRpY3QobWVhc3VyZT0nZGEnLCB2YWw9MC4wMSksCgltaW5teiA9IDIwMCwKCW1heG16ID0gMjAwMCwKCW1vZGUgPSAnY29uc2VydmF0aXZlJywKCXBhdHRlcm5zdHJpbmcgPSAnXltBQ0RFRkdISUtMTU5QUVJTVFZXWV0qS1tBQ0RFRkdISUtMTU5QUVJTVFZXWV0rJCcsCglmaXhlZE1vZCA9IFtdLAoJbmV1dHJhbGxvc3M9ZGljdCgKCQloMm9Mb3NzPWRpY3QoCgkJCW1hc3M9LTE4LjAxMDU2NSwgCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCQkJYWE9c2V0KCdBQ0RFRkdISUtMTU5QUVJTVFZXWScpKSwKPHxmaW1fZW5kfD4="]
["e7399b81d9c823796320283f1692e8ead3542863-1","e7399b81d9c823796320283f1692e8ead3542863","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgogICAgYWRhdGFfY2xvbm90eXBlLAogICAgYWRhdGFfZGl2ZXJzaXR5LAogICAgYWRhdGFfdmRqLAogICAgYWRhdGFfY2xvbm90eXBlX25ldHdvcmssCikKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgcHl0ZXN0CgoKZGVmIHRlc3RfY2xvbmFsX2V4cGFuc2lvbihhZGF0YV9jbG9ub3R5cGUpOgogICAgcCA9IHBsLmNsb25hbF9leHBhbnNpb24oYWRhdGFfY2xvbm90eXBlLCBncm91cGJ5PSJncm91cCIpCiAgICBhc3NlcnQgaXNpbnN0YW5jZShwLCBwbHQuQXhlcykKCiAgICBwID0gcGwuY2xvbmFsX2V4cGFuc2lvbigKICAgICAgICBhZGF0YV9jbG9ub3R5cGUsIGdyb3VwYnk9Imdyb3VwIiwgc2hvd19ub25leHBhbmRlZD1GYWxzZSwgdml6dHlwZT0iYmFyaCIKICAgICkKICAgIGFzc2VydCBpc2luc3RhbmNlKHAsIHBsdC5BeGVzKQoKCmRlZiB0ZXN0X2FscGhhX2RpdmVyc2l0eShhZGF0YV9kaXZlcnNpdHkpOgogICAgcCA9IHBsLmFscGhhX2RpdmVyc2l0eShhZGF0YV9kaXZlcnNpdHksIGdyb3VwYnk9Imdyb3VwIiwgdGFyZ2V0X2NvbD0iY2xvbm90eXBlXyIpCiAgICBhc3NlcnQgaXNpbnN0YW5jZShwLCBwbHQuQXhlcykKCgpkZWYgdGVzdF9ncm91cF9hYnVuZGFuY2UoYWRhdGFfY2xvbm90eXBlKToKICAgIHAgPSBwbC5ncm91cF9hYnVuZGFuY2UoYWRhdGFfY2xvbm90eXBlLCBncm91cGJ5PSJjbG9ub3R5cGUiLCB0YXJnZXRfY29sPSJncm91cCIpCiAgICBhc3NlcnQgaXNpbnN0YW5jZShwLCBwbHQuQXhlcykKCgpkZWYgdGVzdF9zcGVjdHJhdHlwZShhZGF0YV90cmEpOgogICAgcCA9IHBsLnNwZWN0cmF0eXBlKGFkYXRhX3RyYSwgY29sb3I9InNhbXBsZSIpCiAgICBhc3NlcnQgaXNpbnN0YW5jZShwLCBwbHQuQXhlcykKCgpkZWYgdGVzdF9yZXBlcnRvaXJlX292ZXJsYXAoYWRhdGFfdHJhKToKICAgIHAgPSBwbC5yZXBlcnRvaXJlX292ZXJsYXAoYWRhdGFfdHJhLCBncm91cGJ5PSJzYW1wbGUiLCBkZW5kcm9fb25seT1UcnVlKQogICAgYXNzZXJ0IGlzaW5zdGFuY2UocCwgcGx0LkF4ZXMpCgoKZGVmIHRlc3RfY2xvbm90eXBlX2ltYmFsYW5jZShhZGF0YV90cmEpOgogICAgcCA9IHBsLmNsb25vdHlwZV9pbWJhbGFuY2UoCiAgICAgICAgYWRhdGFfdHJhLAogICAgICAgIHJlcGxpY2F0ZV9jb2w9InNhbXBsZSIsCiAgICAgICAgZ3JvdXBieT0iY2hhaW5fcGFpcmluZyIsCiAgICAgICAgY2FzZV9sYWJlbD0iU2luZ2xlIHBhaXIiLAogICAgICAgIHBsb3RfdHlwZT0idm9sY2FubyIsCiAgICApCiAgICBhc3NlcnQgaXNpbnN0YW5jZShwLCBwbHQuQXhlcykKCgpAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoImZ1bGxfY29tYmluYXRpb24iLCBbVHJ1ZSwgRmFsc2VdKQpkZWYgdGVzdF92ZGpfdXNhZ2UoYWRhdGFfdmRqLCBmdWxsX2NvbWJpbmF0aW9uKToKICAgIHAgPSBwbC52ZGpfdXNhZ2UoCiAgICAgICAgYWRhdGFfdmRqLCBub3JtYWxpemVfdG89InNhbXBsZSIsIGZ1bGxfY29tYmluYXRpb249ZnVsbF9jb21iaW5hdGlvbgogICAgKQogICAgYXNzZXJ0IGlzaW5zdGFuY2UocCwgcGx0LkF4ZXMpCgoKZGVmIHRlc3RfY2xvbm90eXBlX25ldHdvcmsoYWRhdGFfY2xvbm90eXBlX25ldHdvcmspOgogICAgcCA9IHBsLmNsb25vdHlwZV9uZXR3b3JrKGFkYXRhX2Nsb25vdHlwZV9uZXR3b3JrKQogICAgYXNzZXJ0IGlzaW5zdGFuY2UocFswXSwgcGx0LkF4ZXMpCjx8ZmltX3N1ZmZpeHw+CiMgcHlsYW1hOmlnbm9yZT1XMDYxMSxXMDQwNApmcm9tIHNjaXJweSBpbXBvcnQgcGwKZnJvbSAuZml4dHVyZXMgaW1wb3J0ICgKICAgIGFkYXRhX3RyYSwKPHxmaW1fZW5kfD4="]
["d876d5a9bd689d389549a5044ea84d95beff9d4c-1","d876d5a9bd689d389549a5044ea84d95beff9d4c","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8Pgpmcm9tIGx4bWwgaW1wb3J0IGh0bWwKCgpVUkwgPSAnaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy9yZXNvdXJjZXMvd29ybGQtbGVhZGVycy0xL2luZGV4Lmh0bWwnCgoKZGVmIHNjcmFwZV9jb3VudHJ5KGRhdGEpOgogICAgcmVzID0gcmVxdWVzdHMuZ2V0KGRhdGFbJ3VybCddKQogICAgZG9jID0gaHRtbC5mcm9tc3RyaW5nKHJlcy5jb250ZW50KQogICAgZGF0YVsnbGFzdF91cGRhdGUnXSA9IGRvYy5maW5kdGV4dCgnLi8vc3BhbltAaWQ9Imxhc3RVcGRhdGVEYXRlIl0nKQogICAgaWYgZGF0YVsnbGFzdF91cGRhdGUnXToKICAgICAgICBkYXRhWydsYXN0X3VwZGF0ZSddID0gZGF0YVsnbGFzdF91cGRhdGUnXS5zdHJpcCgpCiAgICBvdXRwdXQgPSBkb2MuZmluZCgnLi8vZGl2W0BpZD0iY291bnRyeU91dHB1dCJdJykKICAgIGlmIG91dHB1dCBpcyBOb25lOgogICAgICAgIHJldHVybgogICAgY29tcG9uZW50ID0gTm9uZQogICAgZXhpc3RpbmcgPSBzZXQoKQogICAgZm9yIHJvdyBpbiBvdXRwdXQuZmluZGFsbCgnLi8vdHInKToKICAgICAgICBuZXh0X2NvbXAgPSByb3cuZmluZHRleHQoJy4vdGRbQGNsYXNzPSJjb21wb25lbnROYW1lIl0vc3Ryb25nJykKICAgICAgICBpZiBuZXh0X2NvbXAgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIGNvbXBvbmVudCA9IG5leHRfY29tcAogICAgICAgICAgICBjb250aW51ZQogICAgICAgIHRpdGxlID0gcm93LmZpbmQoJy4vL3NwYW5bQGNsYXNzPSJ0aXRsZSJdJykKICAgICAgICBpZiB0aXRsZSBpcyBOb25lOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIHRpdGxlID0gdGl0bGUudGV4dF9jb250ZW50KCkuc3RyaXAoKQogICAgICAgIG5hbWUgPSByb3cuZmluZCgnLi8vc3BhbltAY2xhc3M9ImNvc19uYW1lIl0nKQogICAgICAgIGlmIG5hbWUgaXMgTm9uZToKICAgICAgICAgICAgY29udGludWUKICAgICAgICBuYW1lID0gbmFtZS50ZXh0X2NvbnRlbnQoKS5zdHJpcCgpCiAgICAgICAga2V5ID0gKHRpdGxlLCBuYW1lKQogICAgICAgIGlmIGtleSBpbiBleGlzdGluZzoKICAgICAgICAgICAgY29udGludWUKICAgICAgICBleGlzdGluZy5hZGQoa2V5KQogICAgICAgIHJvdyA9IHsKICAgICAgICAgICAgJ3RpdGxlJzogdGl0bGUsCiAgICAgICAgICAgICdjb21wb25lbnQnOiBjb21wb25lbnQsCiAgICAgICAgICAgICduYW1lJzogbmFtZQogICAgICAgIH0KICAgICAgICByb3cudXBkYXRlKGRhdGEpCiAgICAgICAgeWllbGQgcm93CgoKZGVmIHNjcmFwZShvdXRfcGF0aCk6CiAgICByZXMgPSByZXF1ZXN0cy5nZXQoVVJMKQogICAgZG9jID0gaHRtbC5mcm9tc3RyaW5nKHJlcy5jb250ZW50KQoKICAgIGxlYWRlcnMgPSBbXQogICAgZm9yIGxpbmsgaW4gZG9jLmZpbmRhbGwoJy4vL2RpdltAaWQ9ImNvc0FscGhhTGlzdCJdLy9hJyk6CiAgICAgICAgdXJsID0gdXJsam9pbihVUkwsIGxpbmsuZ2V0KCdocmVmJykpCiAgICAgICAgcHJpbnQgJ1NjcmFwaW5nJywgdXJsCiAgICAgICAgbGVhZGVycy5leHRlbmQoc2NyYXBlX2NvdW50cnkoewogICAgICAgICAgICAndXJsJzogdXJsLAogICAgICAgICAgICAnY291bnRyeSc6IGxpbmsudGV4dAogICAgICAgIH0pKQoKICAgIHdpdGggb3BlbihvdXRfcGF0aCwgJ3cnKSBhcyBmaDoKICAgICAgICBqc29uLmR1bXAoeydsZWFkZXJzJzogbGVhZGVyc30sIGZoLCBpbmRlbnQ9MikKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgb3V0X3BhdGggPSBzeXMuYXJndlsxXQogICAgc2NyYXBlKG91dF9wYXRoKQo8fGZpbV9zdWZmaXh8PgppbXBvcnQgc3lzCmltcG9ydCByZXF1ZXN0cwppbXBvcnQganNvbgpmcm9tIHVybHBhcnNlIGltcG9ydCB1cmxqb2luCjx8ZmltX2VuZHw+"]
["5c8d51f6d2990ca0653fe31ed496d47d3ec6db6f-3","5c8d51f6d2990ca0653fe31ed496d47d3ec6db6f","PHxmaW1fcHJlZml4fD4KZnJvbSBVZG9uUGllIGltcG9ydCBVbml0eUVuZ2luZQpmcm9tIFVkb25QaWUuVW5kZWZpbmVkIGltcG9ydCAqCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpjbGFzcyBTcHJpdGVTb3J0UG9pbnQ6CiAgICBkZWYgX19uZXdfXyhjbHMsIGFyZzE9Tm9uZSk6CiAgICAgICAgJycnCiAgICAgICAgOnJldHVybnM6IFNwcml0ZVNvcnRQb2ludAo8fGZpbV9lbmR8Pg=="]
["7a95c0f0b3d1520e1a160cc2f793ac61b4533269-1","7a95c0f0b3d1520e1a160cc2f793ac61b4533269","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weWh0b24KaW1wb3J0IHN5cwppbXBvcnQgYXJncGFyc2UKCgpwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iIikKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1ncHUiLG1ldGF2YXI9JycsdHlwZT1pbnQsZGVmYXVsdD0nMCcsaGVscD0idXNlIGdwdSBmbGFnIDB8MSIpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMjI21vZGVsX3BhcmFtZXRlcgoKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1lbmNvZGVyX2Ryb3BvdXQiLG1ldGF2YXI9JycsdHlwZT1mbG9hdCxkZWZhdWx0PScwLjMnLGhlbHA9ImVuY29kZXIgZHJvcG91dCAiKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWVuY29kZXJfbGF5ZXJzIixtZXRhdmFyPScnLHR5cGU9aW50LGRlZmF1bHQ9JzQnLGhlbHA9ImVuY29kZXIgZHJvcG91dCAiKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWVuY29kZXJfZG1vZGVsIixtZXRhdmFyPScnLHR5cGU9aW50LGRlZmF1bHQ9JzI1NicsaGVscD0iZW5jb2Rlcl9kbW9kZWwiKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWVuY29kZXJfaGVhZHMiLG1ldGF2YXI9JycsdHlwZT1pbnQsZGVmYXVsdD0nNCcsaGVscD0iZW5jb2Rlcl9oZWFkcyIpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tZW5jb2Rlcl9kaW5uZXIiLG1ldGF2YXI9JycsdHlwZT1pbnQsZGVmYXVsdD0nMTAyNCcsaGVscD0iZW5jb2Rlcl9kaW5uZXIiKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWVuY29kZXJfZmZfZHJvcG91dCIsbWV0YXZhcj0nJyx0eXBlPWZsb2F0LGRlZmF1bHQ9JzAuMycsaGVscD0iZW5jb2Rlcl9mZl9kcm9wb3V0ICIpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tcGVfbWF4X2xlbiIsbWV0YXZhcj0nJyx0eXBlPWludCxkZWZhdWx0PSc1MDAwJyxoZWxwPSJwZV9tYXhfbGVuIikKCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tZGVjX2VtYmRfdmVjX3NpemUiLG1ldGF2YXI9JycsdHlwZT1pbnQsZGVmYXVsdD0nMjU2JyxoZWxwPSJkZWNfZW1iZF92ZWNfc2l6ZSIpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tZGVjb2Rlcl9kbW9kZWwiLG1ldGF2YXI9JycsdHlwZT1pbnQsZGVmYXVsdD0nMjU2JyxoZWxwPSJkZWNvZGVyX2Rtb2RlbCIpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tZGVjb2Rlcl9oZWFkcyIsbWV0YXZhcj0nJyx0eXBlPWludCxkZWZhdWx0PSc0JyxoZWxwPSJkZWNvZGVyX2hlYWRzIikKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1kZWNvZGVyX2Rpbm5lciIsbWV0YXZhcj0nJyx0eXBlPWludCxkZWZhdWx0PScxMDI0JyxoZWxwPSJkZWNvZGVyX2Rpbm5lciIpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tZGVjb2Rlcl9kcm9wb3V0IixtZXRhdmFyPScnLHR5cGU9ZmxvYXQsZGVmYXVsdD0nMC4xJyxoZWxwPSJkZWNvZGVyX2Ryb3BvdXQgIikKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1kZWNvZGVyX2ZmX2Ryb3BvdXQiLG1ldGF2YXI9JycsdHlwZT1mbG9hdCxkZWZhdWx0PScwLjMnLGhlbHA9ImRlY29kZXJfZmZfZHJvcG91dCAiKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWRlY29kZXJfbGF5ZXJzIixtZXRhdmFyPScnLHR5cGU9aW50LGRlZmF1bHQ9JzQnLGhlbHA9ImRlY29kZXJfbGF5ZXJzICIpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tdGllX2RlY19lbWJfd2VpZ2h0cyIsbWV0YXZhcj0nJyx0eXBlPWludCxkZWZhdWx0PTAsaGVscD0idGllX2RlY19lbWJfd2VpZ2h0cyIpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0td2FybXVwX3N0ZXBzIixtZXRhdmFyPScnLHR5cGU9aW50LGRlZmF1bHQ9MjUwMDAsaGVscD0id2FybXVwX3N0ZXBzIikKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1uZXBvY2hzIixtZXRhdmFyPScnLHR5cGU9aW50LGRlZmF1bHQ9JzEwMCcsaGVscD0iTm8gb2YgZXBvY2hzIikKCgpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLXN0ZXBfbnVtIixtZXRhdmFyPScnLHR5cGU9aW50LGRlZmF1bHQ9MSxoZWxwPSJzdGVwX251bSIpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tbGVhcm5pbmdfcmF0ZSIsbWV0YXZhcj0nJyx0eXBlPWZsb2F0LGRlZmF1bHQ9JzAuMDAwMycsaGVscD0iVmFsdWUgb2YgbGVhcm5pbmdfcmF0ZSAiKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWxyX3NjYWxlIixtZXRhdmFyPScnLHR5cGU9ZmxvYXQsZGVmYXVsdD0nMScsaGVscD0iVmFsdWUgb2YgbHJfc2NhbGUgIikKCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tY2xpcF9ncmFkX25vcm0iLG1ldGF2YXI9JycsdHlwZT1mbG9hdCxkZWZhdWx0PScwJyxoZWxwPSJWYWx1ZSBvZiBjbGlwX2dyYWRfbm9ybSAiKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWFjY21fZ3JhZCIsbWV0YXZhcj0nJyx0eXBlPWZsb2F0LGRlZmF1bHQ9JzInLGhlbHA9IlZhbHVlIG9mIGdyYWRpZW50IGFjY3VtaWxhdGlvbiwgd29ya2Fyb3VuZCBhZ2FpbnN0IHVzaW5nIGxhcmdlciBiYXRjaCBzaXplICIpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tbmV3X2JvYl9kZWNheSIsbWV0YXZhcj0nJyx0eXBlPWludCxkZWZhdWx0PScwJyxoZWxwPSJWYWx1ZSBvZiBuZXdfYm9iX2RlY2F5ICIpCgojIyMjI0xvc3MgZnVuY3Rpb24gcGFyYW1ldGVycwpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWxhYmVsX3Ntb290aGluZyIsbWV0YXZhcj0nJyx0eXBlPWZsb2F0LGRlZmF1bHQ9JzAuMScsaGVscD0ibGFiZWxfc21vb3RoaW5nIGZsb2F0IHZhbHVlIDAuMSIpCgojIyMjVHJhaW5pbmcgc2NoZWR1bGUgcGFyYW1ldGVycyAKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1ub19vZl9jaGVja3BvaW50cyIsbWV0YXZhcj0nJyx0eXBlPWludCxkZWZhdWx0PScyJyxoZWxwPSJGbGFnIG9mIG5vX29mX2NoZWNrcG9pbnRzICIpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tdHJfZGlzcCIsbWV0YXZhcj0nJyx0eXBlPWludCxkZWZhdWx0PScxMDAnLGhlbHA9IlZhbHVlIG9mIHRyX2Rpc3AgIikKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS12bF9kaXNwIixtZXRhdmFyPScnLHR5cGU9aW50LGRlZmF1bHQ9JzEwJyxoZWxwPSJWYWx1ZSBvZiB2bF9kaXNwICIpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tbm9pc2VfaW5qX3JhdGlvIixtZXRhdmFyPScnLHR5cGU9ZmxvYXQsZGVmYXVsdD0nMC4xJyxoZWxwPSJWYWx1ZSBvZiBub2lzZV9pbmpfcmF0aW8gIikKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS13ZWlnaHRfbm9pc2VfZmxhZyIsbWV0YXZhcj0nJyx0eXBlPXN0cixkZWZhdWx0PTAsaGVscD0iVHxGIEZsYWcgZm9yIHdlaWdodCBub2lzZSBpbmplY3Rpb24iKQoKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1lYXJseV9zdG9wcGluZyIsbWV0YXZhcj0nJyx0eXBlPWludCxkZWZhdWx0PTAsaGVscD0iVmFsdWUgb2YgZWFybHlfc3RvcHBpbmcgIikKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1lYXJseV9zdG9wcGluZ19jaGVja3BvaW50cyIsbWV0YXZhcj0nJyx0eXBlPWludCxkZWZhdWx0PTUsaGVscD0iVmFsdWUgb2YgZWFybHlfc3RvcHBpbmdfY2hlY2twb2ludHMgIikKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1lYXJseV9zdG9wcGluZ19wYXRpZW5jZSIsbWV0YXZhcj0nJyx0eXBlPWludCxkZWZhdWx0PTUsaGVscD0iVmFsdWUgb2YgZWFybHlfc3RvcHBpbmdfcGF0aWVuY2UgIikKCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tcmVkdWNlX2xlYXJuaW5nX3JhdGVfZmxhZyIsbWV0YXZhcj0nJyx0eXBlPWludCxkZWZhdWx0PTAsaGVscD0icmVkdWNlX2xlYXJuaW5nX3JhdGVfZmxhZyBUcnVlfEZhbHNlIikKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1scl9yZWR1dF9zdF90aCIsbWV0YXZhcj0nJyx0eXBlPWludCxkZWZhdWx0PTMsaGVscD0iVmFsdWUgb2YgbHJfcmVkdXRfc3RfdGggYWZ0ZXIgdGhpcyBlcG9jaHMgdGhlIGxzIHJlZHVjdGlvbiBnZXRzIGFwcGxpZWQiKQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojIyMjYmFjdGNoaW5nIHBhcmFtZWVycwpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLW1vZGVsX2RpciIsbWV0YXZhcj0nJyx0eXBlPXN0cixkZWZhdWx0PSdtb2RlbHMvRGVmYXVsdF9mb2xkZXInLGhlbHA9Im1vZGVsX2RpciIpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tYmF0Y2hfc2l6ZSIsbWV0YXZhcj0nJyx0eXBlPWludCxkZWZhdWx0PScxMCcsaGVscD0iYmF0Y2hfc2l6ZSIpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tbWF4X2JhdGNoX2xhYmVsX2xlbiIsbWV0YXZhcj0nJyx0eXBlPWludCxkZWZhdWx0PSc1MDAwJyxoZWxwPSJtYXhfYmF0Y2hfbGFiZWxfbGVuIikKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1tYXhfYmF0Y2hfbGVuIixtZXRhdmFyPScnLHR5cGU9aW50LGRlZmF1bHQ9JzIwMDAnLGhlbHA9Im1heF9iYXRjaF9sZW4iKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLXZhbF9iYXRjaF9zaXplIixtZXRhdmFyPScnLHR5cGU9aW50LGRlZmF1bHQ9JzIwMDAnLGhlbHA9InZhbF9iYXRjaF9zaXplIikKCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tdmFsaWRhdGVfaW50ZXJ2YWwiLG1ldGF2YXI9JycsdHlwZT1pbnQsZGVmYXVsdD0nMjAwJyxoZWxwPSJzdGVwcyIpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tbWF4X3RyYWluX2V4YW1wbGVzIixtZXRhdmFyPScnLHR5cGU9aW50LGRlZmF1bHQ9JzIwMCcsaGVscD0ic3RlcHMiKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLW1heF92YWxfZXhhbXBsZXMiLG1ldGF2YXI9JycsdHlwZT1pbnQsZGVmYXVsdD0nMTUwJyxoZWxwPSJzdGVwcyIpCgpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLW1heF9mZWF0X2xlbiIsbWV0YXZhcj0nJyx0eXBlPWludCxkZWZhdWx0PScyMDAwJyxoZWxwPSJtYXhfc2VxX2xlbiB0aGUgZGF0YWxvYWRlciBkb2VzIG5vdCByZWFkIHRoZSBzZXF1ZW5jZXMgbG9uZ2VyIHRoYXQgdGhlIG1heF9mZWF0X2xlbiwgZm9yIG1lbW9yeSBhbmQgc29tZSB0aW1lcyB0byByZW1vdmUgdmVyeSBsb25nIHNlbnQgZm9yIExTVE0iKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLW1heF9sYWJlbF9sZW4iLG1ldGF2YXI9JycsdHlwZT1pbnQsZGVmYXVsdD0nMjAwJyxoZWxwPSJtYXhfbGFiZXNfbGVuIHRoZSBkYXRhbG9hZGVyIGRvZXMgbm90IHJlYWQgdGhlIHNlcXVlbmNlcyBsb25nZXIgdGhhdCB0aGUgbWF4X2xhYmVsX2xlbiwgZm9yIG1lbW9yeSBhbmQgc29tZSB0aW1lcyB0byByZW1vdmUgdmVyeSBsb25nIHNlbnQgZm9yIExTVE0iKQoKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1taW5fd29yZHMiLG1ldGF2YXI9JycsdHlwZT1pbnQsZGVmYXVsdD0nMycsaGVscD0iIikKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1tYXhfd29yZHMiLG1ldGF2YXI9JycsdHlwZT1pbnQsZGVmYXVsdD0nNjAnLGhlbHA9IiIpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tbWluX2xlbl9yYXRpbyIsbWV0YXZhcj0nJyx0eXBlPWZsb2F0LGRlZmF1bHQ9JzEuNScsaGVscD0iIikKCgoKIyMjcGxvdCB0aGUgZmlndXJlcwpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLXBsb3RfZmlnX3ZhbGlkYXRpb24iLG1ldGF2YXI9JycsdHlwZT1pbnQsZGVmYXVsdD0wLGhlbHA9IlRydWV8RmFsc2UgTm90IHlldCBpbXBsZW1lbnRkIikKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1wbG90X2ZpZ190cmFpbmluZyIsbWV0YXZhcj0nJyx0eXBlPWludCxkZWZhdWx0PTAsaGVscD0iVHJ1ZXxGYWxzZSBOb3QgeWV0IGltcGxlbWVudGQiKQoKCgojKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMjIyNwYXRocyBhbmQgdG9rZW5pemVycwoKCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tZGF0YV9kaXIiLG1ldGF2YXI9JycsdHlwZT1zdHIsZGVmYXVsdD0nL21udC9tYXR5bGRhMy92eWRhbmEvSE9XMl9FWFAvTVRfVHJhbnNmb3JtZXIvbW9kZWxzL0RlZmF1bHRfZm9sZGVyJyxoZWxwPSIiKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLXNyY190ZXh0X2ZpbGUiLG1ldGF2YXI9JycsdHlwZT1zdHIsZGVmYXVsdD0nL21udC9tYXR5bGRhMy92eWRhbmEvSE9XMl9FWFAvTVRfVHJhbnNmb3JtZXIvVG9rZW5pemVycy9mdWxsX3RleHRfaWQuZW4nLGhlbHA9IiIpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tdGd0X3RleHRfZmlsZSIsbWV0YXZhcj0nJyx0eXBlPXN0cixkZWZhdWx0PScvbW50L21hdHlsZGEzL3Z5ZGFuYS9IT1cyX0VYUC9NVF9UcmFuc2Zvcm1lci9Ub2tlbml6ZXJzL2Z1bGxfdGV4dF9pZC5wdCcsaGVscD0iIikKCgoKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS10cmFpbl9wYXRoIixtZXRhdmFyPScnLHR5cGU9c3RyLGRlZmF1bHQ9Jy9tbnQvbWF0eWxkYTMvdnlkYW5hL2JlbmNobWFya2luZ19kYXRhc2V0cy9UaW1pdC9zY3BfZmlsZXMvdHJhaW4vJyxoZWxwPSJtb2RlbF9kaXIiKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWRldl9wYXRoIixtZXRhdmFyPScnLHR5cGU9c3RyLGRlZmF1bHQ9Jy9tbnQvbWF0eWxkYTMvdnlkYW5hL2JlbmNobWFya2luZ19kYXRhc2V0cy9UaW1pdC9zY3BfZmlsZXMvZGV2LycsaGVscD0ibW9kZWxfZGlyIikKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS10ZXN0X3BhdGgiLG1ldGF2YXI9JycsdHlwZT1zdHIsZGVmYXVsdD0nL21udC9tYXR5bGRhMy92eWRhbmEvYmVuY2htYXJraW5nX2RhdGFzZXRzL1RpbWl0L3NjcF9maWxlcy90ZXN0LycsaGVscD0ibW9kZWxfZGlyIikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMjI0FTUiB0b2tlbml6ZXJzCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tU3JjX21vZGVsX3BhdGgiLG1ldGF2YXI9JycsdHlwZT1zdHIsZGVmYXVsdD0nL21udC9tYXR5bGRhMy92eWRhbmEvYmVuY2htYXJraW5nX2RhdGFzZXRzL1RpbWl0L21vZGVscy9UaW1pdF9QSFNFUV8xMDAvVGltaXRfUEhTRVFfXzEwMF9fd29yZC5tb2RlbCcsaGVscD0ibW9kZWxfZGlyIikKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1UZ3RfbW9kZWxfcGF0aCIsbWV0YXZhcj0nJyx0eXBlPXN0cixkZWZhdWx0PScvbW50L21hdHlsZGEzL3Z5ZGFuYS9iZW5jaG1hcmtpbmdfZGF0YXNldHMvVGltaXQvbW9kZWxzL1RpbWl0X1BIU0VRXzEwMC9UaW1pdF9QSFNFUV9fMTAwX193b3JkLm1vZGVsJyxoZWxwPSJtb2RlbF9kaXIiKQo8fGZpbV9lbmR8Pg=="]
["d8faadbed72d62985f22c743e2a99542678fc387-1","d8faadbed72d62985f22c743e2a99542678fc387","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNvbXBhcwoKZnJvbSBjb21wYXMuZ2VvbWV0cnkgaW1wb3J0IFBvaW50LCBWZWN0b3IsIEZyYW1lCmZyb20gY29tcGFzLmdlb21ldHJ5IGltcG9ydCBCb3gKZnJvbSBjb21wYXMuZ2VvbWV0cnkgaW1wb3J0IFRyYW5zZm9ybWF0aW9uCgpmcm9tIGNvbXBhcy5kYXRhc3RydWN0dXJlcyBpbXBvcnQgTWVzaAoKCmRlZiB0ZXN0X2pzb25fbmF0aXZlKCk6CiAgICBiZWZvcmUgPSBbW10sICgpLCB7fSwgJycsIDEsIDEuMCwgVHJ1ZSwgTm9uZV0KICAgIGFmdGVyID0gY29tcGFzLmpzb25fbG9hZHMoY29tcGFzLmpzb25fZHVtcHMoYmVmb3JlKSkKICAgIGFzc2VydCBhZnRlciA9PSBbW10sIFtdLCB7fSwgJycsIDEsIDEuMCwgVHJ1ZSwgTm9uZV0KCgppZiBub3QgY29tcGFzLklQWToKICAgIGltcG9ydCBudW1weSBhcyBucAoKICAgIGRlZiB0ZXN0X2pzb25fbnVtcHkoKToKICAgICAgICBiZWZvcmUgPSBbbnAuYXJyYXkoWzEsIDIsIDNdKSwgbnAuYXJyYXkoWzEuMCwgMi4wLCAzLjBdKSwgbnAuZmxvYXQ2NCgxLjApLCBucC5pbnQzMigxKV0KICAgICAgICBhZnRlciA9IGNvbXBhcy5qc29uX2xvYWRzKGNvbXBhcy5qc29uX2R1bXBzKGJlZm9yZSkpCiAgICAgICAgYXNzZXJ0IGFmdGVyID09IFtbMSwgMiwgM10sIFsxLjAsIDIuMCwgMy4wXSwgMS4wLCAxXQoKCmRlZiB0ZXN0X2pzb25fcHJpbWl0aXZlKCk6CiAgICBiZWZvcmUgPSBQb2ludCgwLCAwLCAwKQogICAgYWZ0ZXIgPSBjb21wYXMuanNvbl9sb2Fkcyhjb21wYXMuanNvbl9kdW1wcyhiZWZvcmUpKQogICAgYXNzZXJ0IGJlZm9yZS5kdHlwZSA9PSBhZnRlci5kdHlwZQogICAgYXNzZXJ0IGFsbChhID09IGIgZm9yIGEsIGIgaW4gemlwKGJlZm9yZSwgYWZ0ZXIpKQoKCmRlZiB0ZXN0X2pzb25fc2hhcGUoKToKICAgIGJlZm9yZSA9IEJveChGcmFtZShQb2ludCgwLCAwLCAwKSwgVmVjdG9yKDEsIDAsIDApLCBWZWN0b3IoMCwgMSwgMCkpLCAxLCAxLCAxKQogICAgYWZ0ZXIgPSBjb21wYXMuanNvbl9sb2Fkcyhjb21wYXMuanNvbl9kdW1wcyhiZWZvcmUpKQogICAgYXNzZXJ0IGJlZm9yZS5kdHlwZSA9PSBhZnRlci5kdHlwZQogICAgYXNzZXJ0IGFsbChhID09IGIgZm9yIGEsIGIgaW4gemlwKGJlZm9yZS52ZXJ0aWNlcywgYWZ0ZXIudmVydGljZXMpKQoKCmRlZiB0ZXN0X2pzb25feGZvcm0oKToKICAgIGJlZm9yZSA9IFRyYW5zZm9ybWF0aW9uLmZyb21fZnJhbWVfdG9fZnJhbWUoRnJhbWUud29ybGRYWSgpLCBGcmFtZS53b3JsZFhZKCkpCiAgICBhZnRlciA9IGNvbXBhcy5qc29uX2xvYWRzKGNvbXBhcy5qc29uX2R1bXBzKGJlZm9yZSkpCiAgICBhc3NlcnQgYmVmb3JlLmR0eXBlID09IGFmdGVyLmR0eXBlCiAgICBhc3NlcnQgYWxsKGEgPT0gYiBmb3IgYSwgYiBpbiB6aXAoYmVmb3JlLCBhZnRlcikpCgoKZGVmIHRlc3RfanNvbl9tZXNoKCk6CiAgICBiZWZvcmUgPSBNZXNoLmZyb21fdmVydGljZXNfYW5kX2ZhY2VzKFtbMCwgMCwgMF0sIFsxLCAwLCAwXSwgWzEsIDEsIDBdLCBbMCwgMSwgMF1dLCBbWzAsIDEsIDIsIDNdXSkKPHxmaW1faG9sZXw+CiAgICBhc3NlcnQgYWxsKGJlZm9yZS5oYXNfZmFjZShmYWNlKSBmb3IgZmFjZSBpbiBhZnRlci5mYWNlcygpKQogICAgYXNzZXJ0IGFsbChhZnRlci5oYXNfZmFjZShmYWNlKSBmb3IgZmFjZSBpbiBiZWZvcmUuZmFjZXMoKSkKICAgIGFzc2VydCBhbGwoYmVmb3JlLmhhc19lZGdlKGVkZ2UpIGZvciBlZGdlIGluIGFmdGVyLmVkZ2VzKCkpCiAgICBhc3NlcnQgYWxsKGFmdGVyLmhhc19lZGdlKGVkZ2UpIGZvciBlZGdlIGluIGJlZm9yZS5lZGdlcygpKQogICAgYXNzZXJ0IGFsbChiZWZvcmUuZmFjZV92ZXJ0aWNlcyhhKSA9PSBhZnRlci5mYWNlX3ZlcnRpY2VzKGIpIGZvciBhLCBiIGluIHppcChiZWZvcmUuZmFjZXMoKSwgYWZ0ZXIuZmFjZXMoKSkpCjx8ZmltX3N1ZmZpeHw+CiAgICBhZnRlciA9IGNvbXBhcy5qc29uX2xvYWRzKGNvbXBhcy5qc29uX2R1bXBzKGJlZm9yZSkpCiAgICBhc3NlcnQgYmVmb3JlLmR0eXBlID09IGFmdGVyLmR0eXBlCiAgICBhc3NlcnQgYWxsKGJlZm9yZS5oYXNfdmVydGV4KHZlcnRleCkgZm9yIHZlcnRleCBpbiBhZnRlci52ZXJ0aWNlcygpKQogICAgYXNzZXJ0IGFsbChhZnRlci5oYXNfdmVydGV4KHZlcnRleCkgZm9yIHZlcnRleCBpbiBiZWZvcmUudmVydGljZXMoKSkKPHxmaW1fZW5kfD4="]
["8fad19d46b56ace9ecf323da2ff698c6be7c75d4-2","8fad19d46b56ace9ecf323da2ff698c6be7c75d4","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiMgVGhpcmQgcGFydHkgaW1wb3J0cwpmcm9tIHF0cHkuUXRXaWRnZXRzIGltcG9ydCBRVkJveExheW91dCwgUVdpZGdldApmcm9tIHNweWRlci5hcGkudHJhbnNsYXRpb25zIGltcG9ydCBnZXRfdHJhbnNsYXRpb24KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIHNweWRlci5hcGkud2lkZ2V0cy5zdGF0dXMgaW1wb3J0IFN0YXR1c0JhcldpZGdldApmcm9tIFFTY3JlZW5DYXN0IGltcG9ydCBTY3JlZW5DYXN0VG9vbEJ1dHRvbgoKIyBMb2NhbGl6YXRpb24KPHxmaW1fZW5kfD4="]
["516ee763f8947b073e81167f0659f6df4217bd9d-4","516ee763f8947b073e81167f0659f6df4217bd9d","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAubW9kZWwgaW1wb3J0IFRlc3ROZXQsIEVmZk5ldFJlZ3Jlc3NvciwgbG9hZF9tb2RlbCwgZ2V0X21vZGVsX2NsYXNzCmZyb20gLmJhc2UgaW1wb3J0IGxvYWRfZGxfbW9kZWwsIGxvYWRfcHNvX21vZGVsCjx8ZmltX2VuZHw+"]
["cf2308cb6ec1f3912c57600a504c3037f29cea2f-3","cf2308cb6ec1f3912c57600a504c3037f29cea2f","PHxmaW1fcHJlZml4fD4KZnJvbSBweW5wdXQgaW1wb3J0IGtleWJvYXJkCmltcG9ydCBjbGlwYm9hcmQKaW1wb3J0IHB5dHRzeDMKCiMgVGhlIGtleSBjb21iaW5hdGlvbiB0byBjaGVjawpDT01CSU5BVElPTlMgPSBbCiAgICB7a2V5Ym9hcmQuS2V5LmN0cmwsIGtleWJvYXJkLktleUNvZGUoY2hhcj0ncycpLCBrZXlib2FyZC5LZXlDb2RlKGNoYXI9J3QnKX0sCiAgICB7a2V5Ym9hcmQuS2V5LmN0cmwsIGtleWJvYXJkLktleUNvZGUoY2hhcj0nUycpLCBrZXlib2FyZC5LZXlDb2RlKGNoYXI9J1QnKX0KXQoKIyBUaGUgY3VycmVudGx5IGFjdGl2ZSBtb2RpZmllcnMKZW5naW5lID0gcHl0dHN4My5pbml0KCkKY3VycmVudCA9IHNldCgpCmNvbnQgPSBrZXlib2FyZC5Db250cm9sbGVyKCkKCmRlZiBleGVjdXRlKCk6CiAgICBwcmludCgiZnVuY3Rpb24gYWN0aXZhdGVkISIpCiAgICBjb250LnByZXNzKGtleWJvYXJkLktleS5jdHJsKQogICAgY29udC5wcmVzcyhrZXlib2FyZC5LZXlDb2RlKGNoYXI9J2MnKSkKICAgIHRpbWUuc2xlZXAoMC4yNSkKPHxmaW1faG9sZXw+CiAgICBlbmdpbmUuc2F5KGNvbnRlbnQpCgoKZGVmIG9uX3ByZXNzKGtleSk6CiAgICBpZiBhbnkoW2tleSBpbiBDT01CTyBmb3IgQ09NQk8gaW4gQ09NQklOQVRJT05TXSk6CiAgICAgICAgY3VycmVudC5hZGQoa2V5KQogICAgICAgIGlmIGFueShhbGwoayBpbiBjdXJyZW50IGZvciBrIGluIENPTUJPKSBmb3IgQ09NQk8gaW4gQ09NQklOQVRJT05TKToKICAgICAgICAgICAgY3VycmVudC5hZGQoaykKICAgICAgICAgICAgaWYgYW55KGFsbChrIGluIGN1cnJlbnQgZm9yIGsgaW4gQ09NQk8pIGZvciBDT01CTyBpbiBDT01CSU5BVElPTlMpOgogICAgICAgICAgICAgICAgZXhlY3V0ZSgpCiAgICAKICAgIGVsc2U6CiAgICAgICAgcHJpbnQoInlvdSBkaWRuJ3QgdHlwZWQgaXQgd3JpdGUiKQoKZGVmIG9uX3JlbGVhc2Uoa2V5KToKICAgIGlmIGFueShba2V5IGluIENPTUJPIGZvciBDT01CTyBpbiBDT01CSU5BVElPTlNdKToKICAgICAgICBjdXJyZW50LnJlbW92ZShrZXkpCgp3aXRoIGtleWJvYXJkLkxpc3RlbmVyKG9uX3ByZXNzPW9uX3ByZXNzLCBvbl9yZWxlYXNlPW9uX3JlbGVhc2UpIGFzIGxpc3RlbmVyOgogICAgbGlzdGVuZXIuam9pbigpCjx8ZmltX3N1ZmZpeHw+CiAgICBjb250LnJlbGVhc2Uoa2V5Ym9hcmQuS2V5LmN0cmwpCiAgICBjb250LnJlbGVhc2Uoa2V5Ym9hcmQuS2V5Q29kZShjaGFyPSdjJykpCiAgICBlbmdpbmUucnVuQW5kV2FpdCgpCiAgICBjb250ZW50ID0gY2xpcGJvYXJkLnBhc3RlKCkKPHxmaW1fZW5kfD4="]
["5cc05e2e8c981603c7cc88ae2c8499e9308d6ed7-3","5cc05e2e8c981603c7cc88ae2c8499e9308d6ed7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAoKZnJvbSBkYXRhX2xvYWRlci5kb21haW4gaW1wb3J0IFVuaXREYXRhTG9hZGVyRXJyb3IKZnJvbSBkYXRhX2xvYWRlci5jb21wb25lbnQubG9hZF9kZW1hbmQgaW1wb3J0IExvYWREZW1hbmREYXRhTG9hZGVyCmZyb20gc2hhcmVkLnRpbWVzZXJpZXMgaW1wb3J0IFNpbXVsYXRpb25UaW1lU2VyaWVzCgoKY2xhc3MgVGVzdExvYWREZW1hbmREYXRhTG9hZGVyOgogICAgZGVmIHRlc3RfZ2V0X2RhdGEoc2VsZik6CiAgICAgICAgdGltZXN0YW1wcyA9IGxpc3QocmFuZ2UoMCwgNjAwLCA2MCkpCiAgICAgICAgdmFsdWVzID0gbGlzdChyYW5nZSgwLCAtNjAsIC02KSkKICAgICAgICBkZW1hbmRfdGltZV9zZXJpZXMgPSBTaW11bGF0aW9uVGltZVNlcmllcyh0aW1lc3RhbXBzPXRpbWVzdGFtcHMsIHZhbHVlcz12YWx1ZXMpCiAgICAgICAgbG9hZF9kZW1hbmRfbG9hZGVyID0gTG9hZERlbWFuZERhdGFMb2FkZXIoMTAsIGRlbWFuZF90aW1lX3NlcmllcykKCiAgICAgICAgZGF0YSA9IGxvYWRfZGVtYW5kX2xvYWRlci5nZXRfZGF0YSg1NDApCiAgICAgICAgYXNzZXJ0IGRhdGEgPT0gLTU0CgogICAgZGVmIHRlc3RfZ2V0X2RhdGFfdW5rbm93bl90aW1lc3RhbXAoc2VsZiwgY2FwbG9nKToKICAgICAgICB0aW1lc3RhbXBzID0gbGlzdChyYW5nZSgwLCA2MDAsIDYwKSkKICAgICAgICB2YWx1ZXMgPSBsaXN0KHJhbmdlKDAsIC02MCwgLTYpKQogICAgICAgIGRlbWFuZF90aW1lX3NlcmllcyA9IFNpbXVsYXRpb25UaW1lU2VyaWVzKHRpbWVzdGFtcHM9dGltZXN0YW1wcywgdmFsdWVzPXZhbHVlcykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGxvYWRfZGVtYW5kX2xvYWRlciA9IExvYWREZW1hbmREYXRhTG9hZGVyKDEwLCBkZW1hbmRfdGltZV9zZXJpZXMpCgogICAgICAgIGxvYWRfZGVtYW5kX2xvYWRlci5nZXRfZGF0YSg2MDAwKQogICAgICAgIGFzc2VydCBjYXBsb2cucmVjb3Jkc1swXS5tZXNzYWdlID09ICdjYW5ub3QgZ2V0IHRoZSBkYXRhIGF0IHRoZSB0aW1lc3RhbXAnCjx8ZmltX2VuZHw+"]
["cfc1bea899035c041e6ce6c53eb31e62b2dedd8d-1","cfc1bea899035c041e6ce6c53eb31e62b2dedd8d","PHxmaW1fcHJlZml4fD4KIyEvYmluL2VudiBweXRob24zCgppbXBvcnQganNvbgppbXBvcnQgZmxpY2tyYXBpCgpDT05GSUdGSUxFPSJjb25maWcuanNvbiIKCmRlZiBhdXRoZW50aWNhdGUoKToKICAgIHdpdGggb3BlbihDT05GSUdGSUxFLCAiciIpIGFzIGNvbmZpZ2ZkOgo8fGZpbV9ob2xlfD4KICAgIGZsaWNrciA9IGZsaWNrcmFwaS5GbGlja3JBUEkoY29uZmlnWyJhcGlrZXkiXSwgY29uZmlnWyJzZWNyZXQiXSwgZm9ybWF0PSdwYXJzZWQtanNvbicpCgogICAgIyBPbmx5IGRvIHRoaXMgaWYgd2UgZG9uJ3QgaGF2ZSBhIHZhbGlkIHRva2VuIGFscmVhZHkKICAgIGlmIG5vdCBmbGlja3IudG9rZW5fdmFsaWQocGVybXM9J3dyaXRlJyk6CgogICAgICAgICMgR2V0IGEgcmVxdWVzdCB0b2tlbgogICAgICAgIGZsaWNrci5nZXRfcmVxdWVzdF90b2tlbihvYXV0aF9jYWxsYmFjaz0nb29iJykKCiAgICAgICAgIyBPcGVuIGEgYnJvd3NlciBhdCB0aGUgYXV0aGVudGljYXRpb24gVVJMLiBEbyB0aGlzIGhvd2V2ZXIKICAgICAgICAjIHlvdSB3YW50LCBhcyBsb25nIGFzIHRoZSB1c2VyIHZpc2l0cyB0aGF0IFVSTC4KICAgICAgICBhdXRob3JpemVfdXJsID0gZmxpY2tyLmF1dGhfdXJsKHBlcm1zPSd3cml0ZScpCiAgICAgICAgcHJpbnQoIkF1dGhvcml6YXRpb24gVVJMOiB7fSIuZm9ybWF0KGF1dGhvcml6ZV91cmwpKQoKICAgICAgICAjIEdldCB0aGUgdmVyaWZpZXIgY29kZSBmcm9tIHRoZSB1c2VyLiBEbyB0aGlzIGhvd2V2ZXIgeW91CiAgICAgICAgIyB3YW50LCBhcyBsb25nIGFzIHRoZSB1c2VyIGdpdmVzIHRoZSBhcHBsaWNhdGlvbiB0aGUgY29kZS4KICAgICAgICB2ZXJpZmllciA9IHN0cihpbnB1dCgnVmVyaWZpZXIgY29kZTogJykpCgogICAgICAgICMgVHJhZGUgdGhlIHJlcXVlc3QgdG9rZW4gZm9yIGFuIGFjY2VzcyB0b2tlbgogICAgICAgIGZsaWNrci5nZXRfYWNjZXNzX3Rva2VuKHZlcmlmaWVyKQoKICAgICAgICAKICAgIHJldHVybiBmbGlja3IKPHxmaW1fc3VmZml4fD4KICAgICAgICBjb25maWcgPSBqc29uLmxvYWQoY29uZmlnZmQpCgo8fGZpbV9lbmR8Pg=="]
["8fedb74e0cc77af31daa3409c2ab7718ff9817b2-3","8fedb74e0cc77af31daa3409c2ab7718ff9817b2","PHxmaW1fcHJlZml4fD4KZnJvbSBjb250ZXh0bGliIGltcG9ydCBjbG9zaW5nCmltcG9ydCBmdW5jdG9vbHMKaW1wb3J0IHBhdGhsaWIKaW1wb3J0IHNodXRpbAoKZnJvbSAuY29uZmlnIGltcG9ydCBibG9nX2NvbmZpZyBhcyBjb25maWcKZnJvbSAuY29uc3RhbnRzIGltcG9ydCAqICAjIG5vcWEKZnJvbSAuIGltcG9ydCBqaW5qYQpmcm9tIC4gaW1wb3J0IHV0aWwKCgpkZWYgY3JlYXRlX291dHB1dF9zdHJ1Y3R1cmUoCiAgICAgICAgYmFzZT1jb25maWcuT1VUUFVUX0RJUiwKICAgICAgICBzY3JpcHQ9Y29uZmlnLlNDUklQVF9ESVIsCiAgICAgICAgY3NzPWNvbmZpZy5TVFlMRV9ESVIsCiAgICAgICAgaW1nPWNvbmZpZy5JTUFHRV9ESVIpOgogICAgIiIiCiAgICBDcmVhdGUgYWxsIHRoZSBvdXRwdXQgZGlyZWN0b3JpZXMgbmVlZGVkCiAgICBmb3IgdGhlIGJsb2cgYW5kIGNvcGllcyBvdmVyIGFueSBzdGF0aWMgZmlsZXMuCgogICAgV0FSTklORzogVGhpcyB3aWxsIHVubGluayBhbGwgZGlyZWN0b3JpZXMgaWYKICAgIHRoZXkgY3VycmVudGx5IGV4aXN0cy4KICAgICIiIgoKICAgIHNodXRpbC5ybXRyZWUoc3RyKGJhc2UpLCBpZ25vcmVfZXJyb3JzPVRydWUpCiAgICBiYXNlID0gcGF0aGxpYi5QYXRoKGJhc2UpCiAgICBiYXNlLm1rZGlyKCkKCiAgICBvdXRwdXRfc3RhdGljID0gYmFzZS5qb2lucGF0aChTVEFUSUMpCiAgICBvdXRwdXRfc3RhdGljLm1rZGlyKCkKCiAgICBvdXRwdXRfY3NzID0gb3V0cHV0X3N0YXRpYy5qb2lucGF0aChTVFlMRSkKICAgIHNodXRpbC5jb3B5dHJlZShzdHIoY3NzKSwgc3RyKG91dHB1dF9jc3MpKQoKICAgIG91dHB1dF9zY3JpcHQgPSBvdXRwdXRfc3RhdGljLmpvaW5wYXRoKFNDUklQVCkKICAgIHNodXRpbC5jb3B5dHJlZShzdHIoc2NyaXB0KSwgc3RyKG91dHB1dF9zY3JpcHQpKQoKICAgIG91dHB1dF9pbWcgPSBvdXRwdXRfc3RhdGljLmpvaW5wYXRoKElNQUdFKQogICAgc2h1dGlsLmNvcHl0cmVlKHN0cihpbWcpLCBzdHIob3V0cHV0X2ltZykpCgoKY2xhc3MgX1JlbmRlcmVyOgogICAgIiIiCiAgICBHZW5lcmljIHJlbmRlcmVyIGNsYXNzLiBNYWludGFpbnMgYSBjbGFzcyBtYXBwaW5nCiAgICBvZiB0eXBlcyB0byB0ZW1wbGF0ZXMuCiAgICAiIiIKICAgIF90ZW1wbGF0ZXMgPSB7fQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZW1wbGF0ZV93cml0ZXIpOgogICAgICAgIHNlbGYuX3RlbXBsYXRlX3dyaXRlciA9IHRlbXBsYXRlX3dyaXRlcgoKICAgIGRlZiByZWdpc3Rlcl90ZW1wbGF0ZShzZWxmLCB0eXBlXywgdGVtcGxhdGUpOgogICAgICAgICIiIgogICAgICAgIFJlZ2lzdGVyIGEgdGVtcGxhdGUgZm9yIGFuIG9iamVjdCB0eXBlLgogICAgICAgICIiIgogICAgICAgIHNlbGYuX3RlbXBsYXRlc1t0eXBlX10gPSB0ZW1wbGF0ZQoKICAgIGRlZiBfZmluZF90ZW1wbGF0ZShzZWxmLCBjb250ZW50KToKICAgICAgICAiIiIKICAgICAgICBGaW5kIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGdpdmVuIGNvbnRlbnQuCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuX3RlbXBsYXRlc1t0eXBlKGNvbnRlbnQpXQoKICAgIGRlZiByZW5kZXIoc2VsZiwgcGF0aCwgY29udGVudCk6CiAgICAgICAgIiIiCiAgICAgICAgUmVuZGVyIHRoZSBnaXZlbiBjb250ZXh0IGF0IHBhdGguCiAgICAgICAgIiIiCiAgICAgICAgdGVtcGxhdGUgPSBzZWxmLl9maW5kX3RlbXBsYXRlKGNvbnRlbnQpCgogICAgICAgIHdpdGggY2xvc2luZyhzZWxmLl9nZXRfZmgocGF0aCkpIGFzIGZoOgogICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZV93cml0ZXIodGVtcGxhdGUsIGNvbnRlbnQsIGZoKQoKICAgIGRlZiBfZ2V0X2ZoKHNlbGYsIHBhdGgpOgogICAgICAgICIiIgogICAgICAgIFJldHVybiBhIGZpbGUgaGFuZGxlIGZvciB0aGUgZ2l2ZW4gcGF0aCwgZW5zdXJpbmcKICAgICAgICBpdHMgZGlyZWN0b3JpZXMgYXJlIGNyZWF0ZWQuCiAgICAgICAgIiIiCiAgICAgICAgZmlsZV8gPSBQYXRoKHBhdGgpCiAgICAgICAgZmlsZV8ucGFyZW50Lm1rZGlyKHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSkKICAgICAgICByZXR1cm4gZmlsZV8ub3BlbigndycpCgoKY2xhc3MgUmVuZGVyZXI6CiAgICAiIiIKICAgIENyZWF0ZXMgdGhlIGFjdHVhbCB0ZW1wbGF0ZSBmaWxlcyBvbiBkaXNrLgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKAogICAgICAgICAgICBzZWxmLAogICAgICAgICAgICBibG9nLAo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLmJsb2cgPSBibG9nCiAgICAgICAgc2VsZi5wb3N0c19wZXJfcGFnZSA9IHBvc3RzX3Blcl9wYWdlCiAgICAgICAgc2VsZi5vdXRwdXRfZGlyID0gb3V0cHV0X2RpcgogICAgICAgIHNlbGYudGVtcGxhdGVfZW52ID0gdGVtcGxhdGVfZW52CiAgICAgICAgc2VsZi50ZW1wbGF0ZV9lbnYuZ2xvYmFscy51cGRhdGUoc2VsZi50ZW1wbGF0ZV9lbnZfZ2xvYmFscykKCiAgICBAcHJvcGVydHkKICAgIGRlZiB0ZW1wbGF0ZV9lbnZfZ2xvYmFscyhzZWxmKToKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAnY2F0ZWdvcnlfbWVudSc6IHNlbGYuX2NyZWF0ZV9jYXRlZ29yeV9tZW51LAogICAgICAgICAgICAncGFnZV9tZW51Jzogc2VsZi5fY3JlYXRlX3BhZ2VfbWVudSwKICAgICAgICAgICAgJ3NpdGVfdXJsJzogY29uZmlnLkJBU0VfVVJMLAogICAgICAgICAgICAnc2l0ZV9kZXNjcmlwdGlvbic6IHNlbGYuYmxvZy5kZXNjcmlwdGlvbiwKICAgICAgICAgICAgJ3NpdGVfdGl0bGUnOiBzZWxmLmJsb2cudGl0bGUsCiAgICAgICAgICAgICdQT1NUJzogUE9TVCwKICAgICAgICAgICAgJ1BBR0UnOiBQQUdFLAogICAgICAgICAgICAnQ0FURUdPUlknOiBDQVRFR09SWSwKICAgICAgICAgICAgJ1RBRyc6IFRBRywKICAgICAgICAgICAgJ1NUQVRJQyc6IFNUQVRJQywKICAgICAgICAgICAgJ1NUWUxFJzogU1RZTEUsCiAgICAgICAgICAgICdleGNlcnB0JzogdXRpbC5nZW5lcmF0ZV9leGNlcnB0LAogICAgICAgICAgICAnbWFrZV9zaXRlX3VybCc6IGZ1bmN0b29scy5wYXJ0aWFsKHV0aWwubWFrZV91cmwsIGNvbmZpZy5CQVNFX1VSTCksCiAgICAgICAgfQoKICAgIGRlZiByZW5kZXJfdG9fZmlsZXMoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgQ3JlYXRlIGEgZGVwbG95YWJsZSBibG9nIG9mIHN0YXRpYyBodG1sIHBhZ2VzLgogICAgICAgICIiIgogICAgICAgIGNyZWF0ZV9vdXRwdXRfc3RydWN0dXJlKCkKICAgICAgICBzZWxmLl9jcmVhdGVfcG9zdF9wYWdlcygpCiAgICAgICAgc2VsZi5fY3JlYXRlX3BhZ2VfcGFnZXMoKQogICAgICAgIHNlbGYuX2NyZWF0ZV90YWdfcGFnZXMoKQogICAgICAgIHNlbGYuX2NyZWF0ZV9jYXRlZ29yeV9wYWdlcygpCgogICAgZGVmIF9jcmVhdGVfcG9zdF9saXN0KHNlbGYsIHBvc3RzLCBzZWN0aW9ucz0oKSk6CiAgICAgICAgIiIiCiAgICAgICAgQ3JlYXRlcyBhIHN0cmVhbSBvZiBibG9nIHBvc3Qgc25pcHBldHMuCiAgICAgICAgIiIiCiAgICAgICAgdGVtcGxhdGUgPSBzZWxmLnRlbXBsYXRlX2Vudi5nZXRfdGVtcGxhdGUoJ3Bvc3RfbGlzdC5odG1sJykKICAgICAgICBwYWdlciA9IHV0aWwuUGFnZXIocG9zdHMsIHNlbGYucG9zdHNfcGVyX3BhZ2UpCgogICAgICAgIGZvciBpbmRleCBpbiByYW5nZShwYWdlci5wYWdlX2NvdW50KToKICAgICAgICAgICAgY29udGV4dCA9IHBhZ2VyLnBhZ2VfY29udGV4dChpbmRleCkKICAgICAgICAgICAgdGVtcGxhdGVfc3RyZWFtID0gdGVtcGxhdGUuc3RyZWFtKAogICAgICAgICAgICAgICAgY29udGV4dD1jb250ZXh0LAogICAgICAgICAgICAgICAgc2VjdGlvbnM9c2VjdGlvbnMpCgogICAgICAgICAgICBvdXRwdXRfZmlsZSA9IHNlbGYub3V0cHV0X2Rpci5qb2lucGF0aCgKICAgICAgICAgICAgICAgICpzZWN0aW9ucywgY29udGV4dFsnZmlsZV9uYW1lJ10pCiAgICAgICAgICAgIG91dHB1dF9maWxlLnBhcmVudC5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpCgogICAgICAgICAgICB3aXRoIG91dHB1dF9maWxlLm9wZW4oJ3cnKSBhcyBmaDoKICAgICAgICAgICAgICAgIHRlbXBsYXRlX3N0cmVhbS5kdW1wKGZoKQoKICAgIGRlZiBfY3JlYXRlX3Bvc3RfcGFnZShzZWxmLCBwb3N0KToKICAgICAgICAiIiIKICAgICAgICBXcml0ZSBhIHJlbmRlcmVkIGJsb2cgcG9zdCB0ZW1wbGF0ZS4KICAgICAgICAiIiIKICAgICAgICB0ZW1wbGF0ZSA9IHNlbGYudGVtcGxhdGVfZW52LmdldF90ZW1wbGF0ZSgncG9zdC5odG1sJykKICAgICAgICB0ZW1wbGF0ZV9zdHJlYW0gPSB0ZW1wbGF0ZS5zdHJlYW0ocG9zdD1wb3N0KQogICAgICAgIG91dHB1dF9maWxlID0gc2VsZi5vdXRwdXRfZGlyLmpvaW5wYXRoKFBPU1QsIHBvc3RbJ3NsdWcnXSkKICAgICAgICBpZiBub3Qgb3V0cHV0X2ZpbGUucGFyZW50LmV4aXN0cygpOgogICAgICAgICAgICBvdXRwdXRfZmlsZS5wYXJlbnQubWtkaXIocGFyZW50cz1UcnVlKQogICAgICAgIHdpdGggb3V0cHV0X2ZpbGUub3BlbigndycpIGFzIGZoOgogICAgICAgICAgICB0ZW1wbGF0ZV9zdHJlYW0uZHVtcChmaCkKCiAgICBkZWYgX2NyZWF0ZV9wYWdlX3BhZ2Uoc2VsZiwgcGFnZSk6CiAgICAgICAgIiIiCiAgICAgICAgV3JpdGUgYSByZW5kZXJlZCBwYWdlLgogICAgICAgICIiIgogICAgICAgIHRlbXBsYXRlID0gc2VsZi50ZW1wbGF0ZV9lbnYuZ2V0X3RlbXBsYXRlKCdwYWdlLmh0bWwnKQogICAgICAgIHRlbXBsYXRlX3N0cmVhbSA9IHRlbXBsYXRlLnN0cmVhbShwYWdlPXBhZ2UpCiAgICAgICAgb3V0cHV0X2ZpbGUgPSBzZWxmLm91dHB1dF9kaXIuam9pbnBhdGgoUEFHRSwgcGFnZVsnc2x1ZyddKQogICAgICAgIGlmIG5vdCBvdXRwdXRfZmlsZS5wYXJlbnQuZXhpc3RzKCk6CiAgICAgICAgICAgIG91dHB1dF9maWxlLnBhcmVudC5ta2RpcihwYXJlbnRzPVRydWUpCiAgICAgICAgd2l0aCBvdXRwdXRfZmlsZS5vcGVuKCd3JykgYXMgZmg6CiAgICAgICAgICAgIHRlbXBsYXRlX3N0cmVhbS5kdW1wKGZoKQoKICAgIGRlZiBfY3JlYXRlX3BhZ2VfbWVudShzZWxmKToKICAgICAgICAiIiIKICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIHR3byB0dXBsZXMgY29udGFpbmluZyB0aGUgcGFnZV9tZW51IGl0ZW0KICAgICAgICBhbmQgc2x1ZyBmb3IgdGhlIHBhZ2UuCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIGxpc3Qoc29ydGVkKFsKICAgICAgICAgICAgKHBhZ2VbJ21lbnVfbmFtZSddLCBwYWdlWydzbHVnJ10pCiAgICAgICAgICAgIGZvciBwYWdlIGluIHNlbGYuYmxvZy5wYWdlc10sCiAgICAgICAgICAgIGtleT1sYW1iZGEgcGFnZTogU09SVF9PUkRFUi5maW5kKHBhZ2VbMF1bMF0ubG93ZXIoKSkpKQoKICAgIGRlZiBfY3JlYXRlX3Bvc3RfcGFnZXMoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgQ3JlYXRlIHRoZSBibG9nIHBvc3QgcGFnZXMuCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5fY3JlYXRlX3Bvc3RfbGlzdChzZWxmLmJsb2cucG9zdHMpCiAgICAgICAgZm9yIHBvc3QgaW4gc2VsZi5ibG9nLnBvc3RzOgogICAgICAgICAgICBzZWxmLl9jcmVhdGVfcG9zdF9wYWdlKHBvc3QpCgogICAgZGVmIF9jcmVhdGVfcGFnZV9wYWdlcyhzZWxmKToKICAgICAgICAiIiIKICAgICAgICBDcmVhdGUgdGhlIHN0YXRpYyBwYWdlcy4KICAgICAgICAiIiIKICAgICAgICBmb3IgcGFnZSBpbiBzZWxmLmJsb2cucGFnZXM6CiAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9wYWdlX3BhZ2UocGFnZSkKCiAgICBkZWYgX2NyZWF0ZV9jYXRlZ29yeV9wYWdlcyhzZWxmKToKICAgICAgICAiIiIKICAgICAgICBDcmVhdGUgdGhlIGNhdGVnb3J5IHBhZ2VzLgogICAgICAgICIiIgogICAgICAgIGZvciBjYXRlZ29yeSBpbiBzZWxmLmJsb2cuY2F0ZWdvcmllczoKICAgICAgICAgICAgcG9zdHMgPSBbCiAgICAgICAgICAgICAgICBwb3N0CiAgICAgICAgICAgICAgICBmb3IgcG9zdCBpbiBzZWxmLmJsb2cucG9zdHMKICAgICAgICAgICAgICAgIGlmIGNhdGVnb3J5IGluIHBvc3RbJ2NhdGVnb3JpZXMnXV0KICAgICAgICAgICAgc2VsZi5fY3JlYXRlX3Bvc3RfbGlzdCgKICAgICAgICAgICAgICAgIHBvc3RzLAogICAgICAgICAgICAgICAgc2VjdGlvbnM9W0NBVEVHT1JZLCBjYXRlZ29yeS5yZXBsYWNlKCcgJywgJy0nKV0pCgogICAgZGVmIF9jcmVhdGVfdGFnX3BhZ2VzKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIENyZWF0ZSB0aGUgdGFnIHBhZ2VzLgogICAgICAgICIiIgogICAgICAgIGZvciB0YWcgaW4gc2VsZi5ibG9nLnRhZ3M6CiAgICAgICAgICAgIHBvc3RzID0gWwogICAgICAgICAgICAgICAgcG9zdAogICAgICAgICAgICAgICAgZm9yIHBvc3QgaW4gc2VsZi5ibG9nLnBvc3RzCiAgICAgICAgICAgICAgICBpZiB0YWcgaW4gcG9zdFsndGFncyddXQogICAgICAgICAgICBzZWxmLl9jcmVhdGVfcG9zdF9saXN0KAogICAgICAgICAgICAgICAgcG9zdHMsCiAgICAgICAgICAgICAgICBzZWN0aW9ucz1bVEFHLCB0YWcucmVwbGFjZSgnICcsICctJyldKQoKICAgIGRlZiBfY3JlYXRlX2NhdGVnb3J5X21lbnUoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgQ3JlYXRlIHRoZSBjYXRlZ29yeSBsaXN0LgogICAgICAgICIiIgogICAgICAgICMgU29ydCBjYXRlZ29yaWVzIGFscGhhYmV0aWNhbGx5LgogICAgICAgIGNhdGVnb3JpZXMgPSBzb3J0ZWQoCiAgICAgICAgICAgIHNlbGYuYmxvZy5jYXRlZ29yaWVzLmtleXMoKSwKICAgICAgICAgICAga2V5PWxhbWJkYSBrOiBTT1JUX09SREVSLmZpbmQoa1swXS5sb3dlcigpKSkKICAgICAgICByZXR1cm4gY2F0ZWdvcmllcwoKICAgIGRlZiBfY3JlYXRlX2F0b21fZmVlZChzZWxmKToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgcG9zdHNfcGVyX3BhZ2U9Y29uZmlnLlBPU1RTX1BFUl9QQUdFLAogICAgICAgICAgICBvdXRwdXRfZGlyPWNvbmZpZy5PVVRQVVRfRElSLAogICAgICAgICAgICB0ZW1wbGF0ZV9lbnY9amluamEuZW52KToKCjx8ZmltX2VuZHw+"]
["5ab21590c6f1459063443b556d1a017509123971-1","5ab21590c6f1459063443b556d1a017509123971","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCmltcG9ydCBqc29uCgo8fGZpbV9ob2xlfD4KCmRhdGEgPSB7CiAgICAnbmFtZSc6ICdBZ2FpbiBhbm90aGVyIGNvb2wgcmVwbyAyJwp9CgoKcmVzcG9uc2UgPSByZXF1ZXN0cy5yZXF1ZXN0KCdQT1NUJywgJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlci9yZXBvcycsIGhlYWRlcnM9aGVhZGVycywgZGF0YT1qc29uLmR1bXBzKGRhdGEpKQoKcHJpbnQocmVzcG9uc2UuanNvbigpKQo8fGZpbV9zdWZmaXh8PgpoZWFkZXJzID0gewogICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyIGdocF91dG51UU1iVXkwT2hXbFI2UnVJaUNhWmx1WWRoUXgxSWcxcUQnLAogICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJwp9Cjx8ZmltX2VuZHw+"]
["2e2ffe0bae655369b415b93e10f64b1a608bcd38-2","2e2ffe0bae655369b415b93e10f64b1a608bcd38","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgaW5fcGxhY2UKaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQgc3lzCgpmcm9tIGdpdCBpbXBvcnQgUmVwbwpmcm9tIHVybGxpYi5lcnJvciBpbXBvcnQgVVJMRXJyb3IKZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgdXJsb3BlbgoKX19hdXRob3JfXyA9ICJtNGpyMCIKX19jb3B5cmlnaHRfXyA9ICJtNGpyMCIKX19jcmVkaXRzX18gPSBbIm00anIwIl0KX19saWNlbnNlX18gPSAiTUlUIgpfX3ZlcnNpb25fXyA9ICIwLjEiCl9fbWFpbnRhaW5lcl9fID0gIm00anIwIgoKCmNsYXNzIEFkcEVuaGFuY2VkVXBkYXRlcjoKICAgIFZFUlNJT05fTEFCRUxfQkVUQSA9ICJiZXRhIgogICAgVkVSU0lPTl9MQUJFTF9SRUxFQVNFID0gInJlbGVhc2UiCgogICAgVkVSU0lPTl9CUkFOQ0hfREVWID0gIm1hc3RlciIKICAgIFZFUlNJT05fQlJBTkNIX0JFVEEgPSAiYmV0YSIKICAgIFZFUlNJT05fQlJBTkNIX1JFTEVBU0UgPSAicmVsZWFzZSIKCiAgICBVUERBVEVfU0NSSVBUX1BBVEggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKCiAgICBBRFBfU0NSSVBUX1BBVEggPSAie3NjcmlwdF9wYXRofS8uLi9zcmMvYWRwX2VuaGFuY2VkLnVzZXIuanMiLmZvcm1hdCgKICAgICAgICBzY3JpcHRfcGF0aD1VUERBVEVfU0NSSVBUX1BBVEgsCiAgICApCgogICAgUkVQT19QQVRIID0gIntzY3JpcHRfcGF0aH0vLi4iLmZvcm1hdCgKICAgICAgICBzY3JpcHRfcGF0aD1VUERBVEVfU0NSSVBUX1BBVEgsCiAgICApCgogICAgQURQX1NDUklQVF9WRVJTSU9OX1JFR0VYID0gcmUuY29tcGlsZSgKICAgICAgICAiLipAdmVyc2lvblxzKyhbMC05XSsoXC5bMC05XSspKykiLCByZS5JR05PUkVDQVNFCiAgICApCgogICAgQURQX0RPV05MT0FEX1VSTF9SRUdFWCA9IHJlLmNvbXBpbGUoCiAgICAgICAgIi4qQGRvd25sb2FkVVJMXHMraHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL200anIwL2FkcC1lbmhhbmNlZC8uKz8vc3JjL2FkcF9lbmhhbmNlZC51c2VyLmpzIiwKICAgICAgICByZS5JR05PUkVDQVNFLAogICAgKQoKICAgIEFEUF9VUERBVEVfVVJMX1JFR0VYID0gcmUuY29tcGlsZSgKICAgICAgICAiLipAdXBkYXRlVVJMXHMraHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL200anIwL2FkcC1lbmhhbmNlZC8uKz8vc3JjL2FkcF9lbmhhbmNlZC51c2VyLmpzIiwKICAgICAgICByZS5JR05PUkVDQVNFLAogICAgKQoKICAgIEJFVEFfVkVSU0lPTl9SRUdFWCA9IHJlLmNvbXBpbGUoIl5bMC05XSsoPzpcLlswLTldKyl7Mn0iLCByZS5JR05PUkVDQVNFKQogICAgUkVMRUFTRV9WRVJTSU9OX1JFR0VYID0gcmUuY29tcGlsZSgiXlswLTldK1wuWzAtOV0rIiwgcmUuSUdOT1JFQ0FTRSkKICAgIFZFUlNJT05fUkVHRVggPSByZS5jb21waWxlKCJeWzAtOV0rKFwuWzAtOV0rKSskIiwgcmUuSUdOT1JFQ0FTRSkKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiB1cGRhdGUoY2xzLCBidWlsZCwgdmVyc2lvbj1Ob25lLCBpc19zaWxlbnQ9RmFsc2UpOgogICAgICAgIHJlcG8gPSBSZXBvKGNscy5SRVBPX1BBVEgpCiAgICAgICAgZ2l0X2RpZmZfb2JqID0gcmVwby5pbmRleC5kaWZmKE5vbmUpCgogICAgICAgIGlmIGdpdF9kaWZmX29iajoKICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiBBYm9ydGluZy4iKQoKICAgICAgICBnaXRfZGlmZl9vYmogPSByZXBvLmluZGV4LmRpZmYoIkhFQUQiKQoKICAgICAgICBpZiBnaXRfZGlmZl9vYmo6CiAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiWW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMuIEFib3J0aW5nLiIpCgogICAgICAgIGlmIHJlcG8uYWN0aXZlX2JyYW5jaC5uYW1lICE9IGNscy5WRVJTSU9OX0JSQU5DSF9ERVY6CiAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICJUaGUgY3VycmVudCBicmFuY2ggaXMgbm90IHtyZXF1aXJlZF9icmFuY2h9LiBBYm9ydGluZy4iLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICByZXF1aXJlZF9icmFuY2g9Y2xzLlZFUlNJT05fQlJBTkNIX0RFViwKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKQoKICAgICAgICByZXBvLnJlbW90ZXMub3JpZ2luLmZldGNoKCkKICAgICAgICBjb21taXRzX2JlaGluZCA9IHJlcG8uaXRlcl9jb21taXRzKCJtYXN0ZXIuLm9yaWdpbi9tYXN0ZXIiKQoKICAgICAgICBmb3IgY29tbWl0IGluIGNvbW1pdHNfYmVoaW5kOgogICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIllvdSBoYXZlIGNvbW1pdHMgYmVoaW5kLiBBYm9ydGluZy4iKQoKICAgICAgICBjb21taXRzX2FoZWFkID0gcmVwby5pdGVyX2NvbW1pdHMoIm9yaWdpbi9tYXN0ZXIuLm1hc3RlciIpCgogICAgICAgIGZvciBjb21taXQgaW4gY29tbWl0c19haGVhZDoKICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJZb3UgaGF2ZSBjb21taXRzIGFoZWFkLiBBYm9ydGluZy4iKQoKICAgICAgICBpZiBidWlsZCA9PSBjbHMuVkVSU0lPTl9MQUJFTF9CRVRBOgogICAgICAgICAgICB0YXJnZXRfYnJhbmNoID0gY2xzLlZFUlNJT05fQlJBTkNIX0JFVEEKICAgICAgICBlbGlmIGJ1aWxkID09IGNscy5WRVJTSU9OX0xBQkVMX1JFTEVBU0U6CiAgICAgICAgICAgIHRhcmdldF9icmFuY2ggPSBjbHMuVkVSU0lPTl9CUkFOQ0hfUkVMRUFTRQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICJJbnZhbGlkIGJ1aWxkOiB7YnVpbGR9Ii5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgYnVpbGQ9YnVpbGQsCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICkKCiAgICAgICAgaWYgdmVyc2lvbiBpcyBOb25lOgogICAgICAgICAgICB3aXRoIG9wZW4oY2xzLkFEUF9TQ1JJUFRfUEFUSCkgYXMgZmlsZToKICAgICAgICAgICAgICAgIGxpbmUgPSBmaWxlLnJlYWRsaW5lKCkKCiAgICAgICAgICAgICAgICB3aGlsZSBsaW5lIGFuZCB2ZXJzaW9uIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgbGluZSA9IGZpbGUucmVhZGxpbmUoKQoKICAgICAgICAgICAgICAgICAgICBpZiBsaW5lIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGNscy5BRFBfU0NSSVBUX1ZFUlNJT05fUkVHRVgubWF0Y2gobGluZSkKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1hdGNoIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IG1hdGNoWzFdCgogICAgICAgICAgICBpZiB2ZXJzaW9uIGlzIE5vbmU6CiAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBmaW5kIHRoZSBidWlsZCBpbiB7cGF0aH0iLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1jbHMuQURQX1NDUklQVF9QQVRILAogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgIHZlcnNpb24gPSBjbHMuX19nZXRfYnVpbGRfdmVyc2lvbihidWlsZCwgdmVyc2lvbikKCiAgICAgICAgaWYgdmVyc2lvbiBpcyBOb25lIG9yIGNscy5WRVJTSU9OX1JFR0VYLm1hdGNoKHZlcnNpb24pIGlzIE5vbmU6CiAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICJJbnZhbGlkIHZlcnNpb246IHt2ZXJzaW9ufSIuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgIHZlcnNpb249dmVyc2lvbiwKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKQoKICAgICAgICB0YXJnZXRfdXJsID0gImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tNGpyMC9hZHAtZW5oYW5jZWQve2JyYW5jaH0vc3JjL2FkcF9lbmhhbmNlZC51c2VyLmpzIi5mb3JtYXQoCiAgICAgICAgICAgIGJyYW5jaD10YXJnZXRfYnJhbmNoLAogICAgICAgICkKCiAgICAgICAgY3VycmVudF92ZXJzaW9uID0gTm9uZQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGN1cnJlbnRfc2NyaXB0ID0gdXJsb3Blbih0YXJnZXRfdXJsKQoKICAgICAgICAgICAgZm9yIGxpbmUgaW4gY3VycmVudF9zY3JpcHQ6CiAgICAgICAgICAgICAgICBtYXRjaCA9IGNscy5BRFBfU0NSSVBUX1ZFUlNJT05fUkVHRVgubWF0Y2gobGluZS5kZWNvZGUoInV0Zi04IikpCgogICAgICAgICAgICAgICAgaWYgbWF0Y2ggaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgY3VycmVudF92ZXJzaW9uID0gbWF0Y2hbMV0KICAgICAgICAgICAgICAgICAgICBicmVhawo8fGZpbV9ob2xlfD4KICAgICAgICBpZiBjdXJyZW50X3ZlcnNpb24gaXMgTm9uZToKICAgICAgICAgICAgY3VycmVudF92ZXJzaW9uID0gIltubyBwcmV2aW91cyB2ZXJzaW9uXSAoaXMgR2l0SHViIGRvd24/KSIKCiAgICAgICAgcHJpbnQoCiAgICAgICAgICAgICJWZXJzaW9uIHVwZGF0ZSBpcyB7Y3VycmVudF92ZXJzaW9ufSAtPiB7dmVyc2lvbn0uIi5mb3JtYXQoCiAgICAgICAgICAgICAgICB2ZXJzaW9uPXZlcnNpb24sCiAgICAgICAgICAgICAgICBjdXJyZW50X3ZlcnNpb249Y3VycmVudF92ZXJzaW9uLAogICAgICAgICAgICApCiAgICAgICAgKQoKICAgICAgICBpZiBub3QgaXNfc2lsZW50IGFuZCBub3QgY2xzLl9fYXNrX2NvbmZpcm1hdGlvbigiQ29udGludWU/Iik6CiAgICAgICAgICAgIHJldHVybgoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHRhcmdldF9oZWFkID0gcmVwby5oZWFkc1t0YXJnZXRfYnJhbmNoXQogICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgogICAgICAgICAgICB0YXJnZXRfaGVhZCA9IE5vbmUKCiAgICAgICAgaWYgdGFyZ2V0X2hlYWQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIGlmIG5vdCBpc19zaWxlbnQgYW5kIG5vdCBjbHMuX19hc2tfY29uZmlybWF0aW9uKAogICAgICAgICAgICAgICAgIkxvY2FsIGJyYW5jaCB7YnJhbmNofSB3aWxsIGJlIGRlbGV0ZWQuIENvbnRpbnVlPyIuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgIGJyYW5jaD10YXJnZXRfYnJhbmNoLAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICApOgogICAgICAgICAgICAgICAgcmV0dXJuCgogICAgICAgICAgICBwcmludCgKICAgICAgICAgICAgICAgICJEZWxldGluZyBsb2NhbCBicmFuY2gge2JyYW5jaH0uLi4iLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICBicmFuY2g9dGFyZ2V0X2JyYW5jaCwKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKQoKICAgICAgICAgICAgcmVwby5kZWxldGVfaGVhZCgKICAgICAgICAgICAgICAgIHRhcmdldF9icmFuY2gsCiAgICAgICAgICAgICAgICBmb3JjZT1UcnVlLAogICAgICAgICAgICApCgogICAgICAgIHJlcG8uY3JlYXRlX2hlYWQodGFyZ2V0X2JyYW5jaCwgcmVwby5yZWZzW2Nscy5WRVJTSU9OX0JSQU5DSF9ERVZdKQogICAgICAgIHJlcG8uaGVhZHNbdGFyZ2V0X2JyYW5jaF0uY2hlY2tvdXQoKQogICAgICAgIHByaW50KCJVcGRhdGluZyBzY3JpcHQgZmlsZS4uLiIpCgogICAgICAgIHdpdGggaW5fcGxhY2UuSW5QbGFjZShjbHMuQURQX1NDUklQVF9QQVRIKSBhcyBmaWxlOgogICAgICAgICAgICBpc192ZXJzaW9uX3VwZGF0ZWQgPSBGYWxzZQogICAgICAgICAgICBpc19kb3dubG9hZF91cmxfdXBkYXRlZCA9IEZhbHNlCiAgICAgICAgICAgIGlzX3VwZGF0ZV91cmxfdXBkYXRlZCA9IEZhbHNlCgogICAgICAgICAgICBmb3IgbGluZSBpbiBmaWxlOgogICAgICAgICAgICAgICAgaWYgbm90IGlzX3ZlcnNpb25fdXBkYXRlZDoKICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGNscy5BRFBfU0NSSVBUX1ZFUlNJT05fUkVHRVgubWF0Y2gobGluZSkKCiAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2ggaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJSZXBsYWNpbmcgdmVyc2lvbi4uLiIpCgogICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gIi8vIEB2ZXJzaW9uICAgICAge3ZlcnNpb259XG4iLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb249dmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVyc2lvbl91cGRhdGVkID0gVHJ1ZQoKICAgICAgICAgICAgICAgIGlmIG5vdCBpc19kb3dubG9hZF91cmxfdXBkYXRlZDoKICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGNscy5BRFBfRE9XTkxPQURfVVJMX1JFR0VYLm1hdGNoKGxpbmUpCgogICAgICAgICAgICAgICAgICAgIGlmIG1hdGNoIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiUmVwbGFjaW5nIGRvd25sb2FkIFVSTC4uLiIpCgogICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gIi8vIEBkb3dubG9hZFVSTCAge3VybH1cbiIuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsPXRhcmdldF91cmwsCiAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICAgICAgICAgIGlzX2Rvd25sb2FkX3VybF91cGRhdGVkID0gVHJ1ZQoKICAgICAgICAgICAgICAgIGlmIG5vdCBpc191cGRhdGVfdXJsX3VwZGF0ZWQ6CiAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBjbHMuQURQX1VQREFURV9VUkxfUkVHRVgubWF0Y2gobGluZSkKCiAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2ggaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJSZXBsYWNpbmcgdXBkYXRlIFVSTC4uLiIpCgogICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gIi8vIEB1cGRhdGVVUkwgICAge3VybH1cbiIuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsPXRhcmdldF91cmwsCiAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICAgICAgICAgIGlzX3VwZGF0ZV91cmxfdXBkYXRlZCA9IFRydWUKCiAgICAgICAgICAgICAgICBmaWxlLndyaXRlKGxpbmUpCgogICAgICAgIHJlcG8uZ2l0LmFkZCh1cGRhdGU9VHJ1ZSkKCiAgICAgICAgcmVwby5pbmRleC5jb21taXQoCiAgICAgICAgICAgICJVcGRhdGUge2J1aWxkfSBidWlsZCB0byB2ZXJzaW9uIHt2ZXJzaW9ufSIuZm9ybWF0KAogICAgICAgICAgICAgICAgYnVpbGQ9YnVpbGQsCiAgICAgICAgICAgICAgICB2ZXJzaW9uPXZlcnNpb24sCiAgICAgICAgICAgICkKICAgICAgICApCgogICAgICAgIHJlcG8uZ2l0LnB1c2goIi0tc2V0LXVwc3RyZWFtIiwgIm9yaWdpbiIsIHRhcmdldF9icmFuY2gsIGZvcmNlPVRydWUpCiAgICAgICAgcmVwby5naXQucHVzaChmb3JjZT1UcnVlKQogICAgICAgIHJlcG8uaGVhZHNbY2xzLlZFUlNJT05fQlJBTkNIX0RFVl0uY2hlY2tvdXQoKQoKICAgICAgICBwcmludCgKICAgICAgICAgICAgIkRlbGV0aW5nIGxvY2FsIGJyYW5jaCB7YnJhbmNofS4uLiIuZm9ybWF0KAogICAgICAgICAgICAgICAgYnJhbmNoPXRhcmdldF9icmFuY2gsCiAgICAgICAgICAgICkKICAgICAgICApCgogICAgICAgIHJlcG8uZGVsZXRlX2hlYWQoCiAgICAgICAgICAgIHRhcmdldF9icmFuY2gsCiAgICAgICAgICAgIGZvcmNlPVRydWUsCiAgICAgICAgKQoKICAgICAgICBwcmludCgiRG9uZSEiKQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIF9fZ2V0X2J1aWxkX3ZlcnNpb24oY2xzLCBidWlsZCwgdmVyc2lvbik6CiAgICAgICAgaWYgYnVpbGQgPT0gY2xzLlZFUlNJT05fTEFCRUxfQkVUQToKICAgICAgICAgICAgcmV0dXJuIGNscy5CRVRBX1ZFUlNJT05fUkVHRVgubWF0Y2godmVyc2lvbilbMF0KICAgICAgICBlbGlmIGJ1aWxkID09IGNscy5WRVJTSU9OX0xBQkVMX1JFTEVBU0U6CiAgICAgICAgICAgIHJldHVybiBjbHMuUkVMRUFTRV9WRVJTSU9OX1JFR0VYLm1hdGNoKHZlcnNpb24pWzBdCgogICAgICAgIHJhaXNlIEV4Y2VwdGlvbigKICAgICAgICAgICAgIlVua25vd24gYnVpbGQ6IHtidWlsZH0iLmZvcm1hdCgKICAgICAgICAgICAgICAgIGJ1aWxkPWJ1aWxkLAogICAgICAgICAgICApCiAgICAgICAgKQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIF9fYXNrX2NvbmZpcm1hdGlvbihjbHMsIHF1ZXN0aW9uKToKICAgICAgICByZXBseSA9ICgKICAgICAgICAgICAgc3RyKAogICAgICAgICAgICAgICAgaW5wdXQoCiAgICAgICAgICAgICAgICAgICAgIntxdWVzdGlvbn0gKHkvbik6ICIuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbj1xdWVzdGlvbiwKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICkKICAgICAgICAgICAgLmxvd2VyKCkKICAgICAgICAgICAgLnN0cmlwKCkKICAgICAgICApCgogICAgICAgIGlmIHJlcGx5IGluIFsKICAgICAgICAgICAgInkiLAogICAgICAgICAgICAieWVzIiwKICAgICAgICAgICAgInllYWgiLAogICAgICAgIF06CiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZWxpZiByZXBseSBpbiBbCiAgICAgICAgICAgICJuIiwKICAgICAgICAgICAgIm5vIiwKICAgICAgICAgICAgIm5vcGUiLAogICAgICAgICAgICAibm9wZS5hdmkiLAogICAgICAgIF06CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgICAgICByZXR1cm4gY2xzLl9fYXNrX2NvbmZpcm1hdGlvbihxdWVzdGlvbikKCgpkZWYgbWFpbigpOgogICAgdHJ5OgogICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSJVcGRhdGUgQURQIEVuaGFuY2VkIikKCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAgICAgIi1iIiwKICAgICAgICAgICAgIi0tYnVpbGQiLAogICAgICAgICAgICBoZWxwPSJzcGVjaWZ5IHRoZSBidWlsZCB0byB1cGRhdGUiLAogICAgICAgICAgICBjaG9pY2VzPVsKICAgICAgICAgICAgICAgIEFkcEVuaGFuY2VkVXBkYXRlci5WRVJTSU9OX0xBQkVMX0JFVEEsCiAgICAgICAgICAgICAgICBBZHBFbmhhbmNlZFVwZGF0ZXIuVkVSU0lPTl9MQUJFTF9SRUxFQVNFLAogICAgICAgICAgICBdLAogICAgICAgICAgICByZXF1aXJlZD1UcnVlLAogICAgICAgICkKCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAgICAgIi12IiwKICAgICAgICAgICAgIi0tdmVyc2lvbiIsCiAgICAgICAgICAgIGhlbHA9InNwZWNpZnkgdGhlIHZlcnNpb24gdG8gc2V0IChvcHRpb25hbCkiLAogICAgICAgICAgICByZXF1aXJlZD1GYWxzZSwKICAgICAgICApCgogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgICAgICItcyIsCiAgICAgICAgICAgICItLXNpbGVudCIsCiAgICAgICAgICAgIGhlbHA9IndoZXRoZXIgdG8gYnlwYXNzIGNvbmZpcm1hdGlvbnMgb3Igbm90IChvcHRpb25hbCkiLAogICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAogICAgICAgICAgICByZXF1aXJlZD1GYWxzZSwKICAgICAgICApCgogICAgICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCiAgICAgICAgQWRwRW5oYW5jZWRVcGRhdGVyLnVwZGF0ZShhcmdzLmJ1aWxkLCBhcmdzLnZlcnNpb24sIGFyZ3Muc2lsZW50KQoKICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdCBhcyBlcnJvcjoKICAgICAgICBwcmludCgiXG5BYm9ydGluZy4iKQoKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyb3I6CiAgICAgICAgcHJpbnQoCiAgICAgICAgICAgICJBbiBlcnJvciBvY2N1cnJlZDoge2Vycm9yfVxuQWJvcnRpbmcuIi5mb3JtYXQoCiAgICAgICAgICAgICAgICBlcnJvcj1lcnJvciwKICAgICAgICAgICAgKQogICAgICAgICkKCiAgICAgICAgc3lzLmV4aXQoMSkKCiAgICBzeXMuZXhpdCgwKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgZXhjZXB0IFVSTEVycm9yOgogICAgICAgICAgICBwYXNzCgo8fGZpbV9lbmR8Pg=="]
["417ea0b6bdcedec59ca9d6d668b80fc09a23ab2b-1","417ea0b6bdcedec59ca9d6d668b80fc09a23ab2b","PHxmaW1fcHJlZml4fD4KZnJvbSBzaWduYWxmbG93Z3JhcGhlci5ndWkuc3ltcHlfZXhwcmVzc2lvbl92YWxpZGF0b3IgaW1wb3J0IFwKICAgIFN5bXB5RXhwcmVzc2lvblZhbGlkYXRvcgpmcm9tIHNpZ25hbGZsb3dncmFwaGVyLmd1aS5tYXNvbl93aW5kb3cgaW1wb3J0IE1hc29uV2luZG93CmZyb20gc2lnbmFsZmxvd2dyYXBoZXIuZ3VpLmdyYXBoX2ZpZWxkIGltcG9ydCBHcmFwaEZpZWxkCmZyb20gc2lnbmFsZmxvd2dyYXBoZXIubW9kZWwubW9kZWwgaW1wb3J0IFwKICAgIE1vZGVsLCBDdXJ2ZWRCcmFuY2gsIExhYmVsQ2hhbmdlZFRleHRFdmVudCwgUG9zaXRpb25lZE5vZGUKZnJvbSBzaWduYWxmbG93Z3JhcGhlci5jb250cm9sbGVycy5tYWluX2NvbnRyb2xsZXIgaW1wb3J0IE1haW5Db250cm9sbGVyCmZyb20gc2lnbmFsZmxvd2dyYXBoZXIuY29udHJvbGxlcnMub3BlcmF0aW9uX2NvbnRyb2xsZXIgaW1wb3J0IFwKICAgIE9wZXJhdGlvbkNvbnRyb2xsZXIKZnJvbSBzaWduYWxmbG93Z3JhcGhlci5jb250cm9sbGVycy5pb19jb250cm9sbGVyIGltcG9ydCBJT0NvbnRyb2xsZXIKZnJvbSBzaWduYWxmbG93Z3JhcGhlci5ndWkuY29uZGl0aW9uYWxfYWN0aW9ucy5zZWxlY3Rpb25fY29uZGl0aW9uIFwKICAgIGltcG9ydCBTcGVjaWZpY051bUJyYW5jaGVzU2VsZWN0ZWQsIFNwZWNpZmljTnVtTm9kZXNTZWxlY3RlZCwgXAogICAgTWF4TnVtTm9kZXNTZWxlY3RlZCwgU3Vic2VxdWVudEJyYW5jaGVzU2VsZWN0ZWQsIFwKICAgIE1pbk51bU5vZGVzT3JCcmFuY2hlc1NlbGVjdGVkLCBUd29QYXJhbGxlbEJyYW5jaGVzU2VsZWN0ZWQsIFwKICAgIEJyYW5jaElzU2VsZkxvb3AsIE1pbk51bU5vZGVzU2VsZWN0ZWQsIFBhdGhIYXNJbmRlcGVuZGVudFN0YXJ0VmFyLCBcCiAgICBBbGxOb2Rlc1NjYWxhYmxlLCBTZWxlY3RlZEJyYW5jaGVzV2VpZ2h0ZWQsIEJyYW5jaGVzTmV4dFRvTm9kZXNXZWlnaHRlZCwgXAogICAgTmVpZ2hib3VyQnJhbmNoZXNXZWlnaHRlZCwgTm9kZXNIYXZlTm9TZWxmTG9vcHMsIFwKICAgIEFsbEJyYW5jaGVzV2VpZ2h0ZWQsIE1pZGRsZU5vZGVIYXNOdW1CcmFuY2hlcwpmcm9tIHNpZ25hbGZsb3dncmFwaGVyLmd1aS5jb25kaXRpb25hbF9hY3Rpb25zLmNvbmRpdGlvbmFsX2FjdGlvbiBcCiAgICBpbXBvcnQgQ29uZGl0aW9uYWxRTGluZUVkaXQsIENvbmRpdGlvbmFsUVB1c2hCdXR0b24KZnJvbSBQeVF0NSBpbXBvcnQgdWljCmZyb20gUHlRdDUuUXQgaW1wb3J0IFwKICAgIFFGaWxlRGlhbG9nLCBRTWVzc2FnZUJveCwgUVdpZGdldCwgUUNvcmVBcHBsaWNhdGlvbiwgXAogICAgUUxpbmVFZGl0LCBRSW5wdXREaWFsb2csIFF0LCBRS2V5RXZlbnQKZnJvbSBQeVF0NS5RdEd1aSBpbXBvcnQgUVZhbGlkYXRvcgpmcm9tIFB5UXQ1IGltcG9ydCBRdENvcmUKaW1wb3J0IGxvZ2dpbmcKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgpjcmVhdG9yX2ZpbGUgPSAic2lnbmFsZmxvd2dyYXBoZXIvZ3VpL3NpZGVfd2lkZ2V0LnVpIgpzaWRlX3dpZGdldF91aSwgeCA9IHVpYy5sb2FkVWlUeXBlKGNyZWF0b3JfZmlsZSkKCgpjbGFzcyBTaWRlV2lkZ2V0KFFXaWRnZXQsIHNpZGVfd2lkZ2V0X3VpKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBncmFwaF9maWVsZDogR3JhcGhGaWVsZCwKICAgICAgICAgICAgICAgICBtYWluX2NvbnRyb2xsZXI6IE1haW5Db250cm9sbGVyLAogICAgICAgICAgICAgICAgIG9wZXJhdGlvbl9jb250cm9sbGVyOiBPcGVyYXRpb25Db250cm9sbGVyLAogICAgICAgICAgICAgICAgIGlvX2NvbnRyb2xsZXI6IElPQ29udHJvbGxlciwKICAgICAgICAgICAgICAgICBtb2RlbDogTW9kZWwpOgogICAgICAgIHN1cGVyKFNpZGVXaWRnZXQsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLl9fZ3JhcGhfZmllbGQgPSBncmFwaF9maWVsZAogICAgICAgIHNlbGYuX19tYWluX2NvbnRyb2xsZXIgPSBtYWluX2NvbnRyb2xsZXIKICAgICAgICBzZWxmLl9fb3BlcmF0aW9uX2NvbnRyb2xsZXIgPSBvcGVyYXRpb25fY29udHJvbGxlcgogICAgICAgIHNlbGYuX19pb19jb250cm9sbGVyID0gaW9fY29udHJvbGxlcgogICAgICAgIHNlbGYuX19tb2RlbCA9IG1vZGVsCiAgICAgICAgc2VsZi5fX2dyYXBoX2ZpZWxkLnNlbGVjdGlvbi5vYnNlcnZlKAogICAgICAgICAgICBzZWxmLl9faGFuZGxlX3NlbGVjdGlvbl9jaGFuZ2UpCiAgICAgICAgc2VsZi5fX21vZGVsLm9ic2VydmUoc2VsZi5fX2hhbmRsZV9tb2RlbF9jaGFuZ2UpCiAgICAgICAgc2VsZi5zZXR1cFVpKHNlbGYpCgogICAgICAgIHNlbGYuX19jb25kaXRpb25hbF9hY3Rpb25zID0gW10KCiAgICAgICAgIyBTZXR1cCB2YWxpZGF0b3JzCiAgICAgICAgbm9kZV9uYW1lX3ZhbGlkYXRvciA9IFN5bXB5RXhwcmVzc2lvblZhbGlkYXRvcigpCiAgICAgICAgYnJhbmNoX3dlaWdodF92YWxpZGF0b3IgPSBTeW1weUV4cHJlc3Npb25WYWxpZGF0b3IoKQogICAgICAgIHNlbGYubm9kZV9uYW1lLnNldFZhbGlkYXRvcihub2RlX25hbWVfdmFsaWRhdG9yKQogICAgICAgIHNlbGYuYnJhbmNoX3dlaWdodC5zZXRWYWxpZGF0b3IoYnJhbmNoX3dlaWdodF92YWxpZGF0b3IpCgogICAgICAgICMgU2V0IG1ldGhvZCBmb3IgdmFsaWRhdGlvbiBpbmRpY2F0aW9uIHdpdGggY29sb3IKICAgICAgICBub2RlX25hbWVfdmFsaWRhdG9yLnZhbGlkYXRpb25DaGFuZ2VkLmNvbm5lY3QoCiAgICAgICAgICAgIGxhbWJkYSBzdGF0ZTogc2VsZi5fX3NldF90ZXh0X2VkaXRfY29sb3Ioc3RhdGUsIHNlbGYubm9kZV9uYW1lKSkKICAgICAgICBicmFuY2hfd2VpZ2h0X3ZhbGlkYXRvci52YWxpZGF0aW9uQ2hhbmdlZC5jb25uZWN0KAogICAgICAgICAgICBsYW1iZGEgc3RhdGU6CiAgICAgICAgICAgICAgICBzZWxmLl9fc2V0X3RleHRfZWRpdF9jb2xvcihzdGF0ZSwgc2VsZi5icmFuY2hfd2VpZ2h0KSkKCiAgICAgICAgZGVmIGxhYmVsX2V2ZW50X2hhbmRsZXIoc2VsLCBldmVudCk6CiAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIExhYmVsQ2hhbmdlZFRleHRFdmVudCkgYW5kIFwKICAgICAgICAgICAgICAgbGVuKHNlbCkgPiAwIGFuZCBzZWxbMF0gaXMgZXZlbnQubGFiZWxlZF9vYmo6CiAgICAgICAgICAgICAgICAjIFNldCB2YWx1ZSBhbmQgY3Vyc29yCiAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LmxhYmVsZWRfb2JqLCBQb3NpdGlvbmVkTm9kZSk6CiAgICAgICAgICAgICAgICAgICAgcG9zID0gc2VsZi5ub2RlX25hbWUuY3Vyc29yUG9zaXRpb24oKQogICAgICAgICAgICAgICAgICAgIHNlbGYubm9kZV9uYW1lLnNldFRleHQoZXZlbnQubmV3X3RleHQpCiAgICAgICAgICAgICAgICAgICAgc2VsZi5ub2RlX25hbWUuc2V0Q3Vyc29yUG9zaXRpb24ocG9zKQogICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LmxhYmVsZWRfb2JqLCBDdXJ2ZWRCcmFuY2gpOgogICAgICAgICAgICAgICAgICAgIHBvcyA9IHNlbGYuYnJhbmNoX3dlaWdodC5jdXJzb3JQb3NpdGlvbigpCiAgICAgICAgICAgICAgICAgICAgc2VsZi5icmFuY2hfd2VpZ2h0LnNldFRleHQoZXZlbnQubmV3X3RleHQpCiAgICAgICAgICAgICAgICAgICAgc2VsZi5icmFuY2hfd2VpZ2h0LnNldEN1cnNvclBvc2l0aW9uKHBvcykKCiAgICAgICAgc2VsZi5fX2NvbmRpdGlvbmFsX2FjdGlvbnMuYXBwZW5kKENvbmRpdGlvbmFsUUxpbmVFZGl0KAogICAgICAgICAgICBbU3BlY2lmaWNOdW1Ob2Rlc1NlbGVjdGVkKDEpXSwKICAgICAgICAgICAgc2VsZi5ub2RlX25hbWUsCiAgICAgICAgICAgIGxhbWJkYSBzZWwsIHRleHQ6CiAgICAgICAgICAgIHNlbGYuX19tYWluX2NvbnRyb2xsZXIuc2V0X25vZGVfbmFtZShzZWxbMF0sIHRleHQpLAogICAgICAgICAgICBsYW1iZGEgc2VsOiBzZWxmLm5vZGVfbmFtZS5zZXRUZXh0KHNlbFswXS5uYW1lKSwKICAgICAgICAgICAgbGFiZWxfZXZlbnRfaGFuZGxlcikpCgogICAgICAgIHNlbGYubm9kZV9uYW1lLmluc3RhbGxFdmVudEZpbHRlcihzZWxmKQoKICAgICAgICBzZWxmLl9fY29uZGl0aW9uYWxfYWN0aW9ucy5hcHBlbmQoQ29uZGl0aW9uYWxRUHVzaEJ1dHRvbigKICAgICAgICAgICAgW01pbk51bU5vZGVzT3JCcmFuY2hlc1NlbGVjdGVkKDEpXSwKICAgICAgICAgICAgc2VsZi5idG5fcmVtb3ZlX25vZGVzX2FuZF9icmFuY2hlcywKICAgICAgICAgICAgbGFtYmRhIHNlbCwgKmFyZ3M6CiAgICAgICAgICAgICAgICBzZWxmLl9fbWFpbl9jb250cm9sbGVyLnJlbW92ZV9ub2Rlc19hbmRfYnJhbmNoZXMoc2VsKQogICAgICAgICkpCgogICAgICAgIHNlbGYuX19jb25kaXRpb25hbF9hY3Rpb25zLmFwcGVuZChDb25kaXRpb25hbFFQdXNoQnV0dG9uKAogICAgICAgICAgICBbTWluTnVtTm9kZXNTZWxlY3RlZCgxKSwgTWF4TnVtTm9kZXNTZWxlY3RlZCgyKV0sCiAgICAgICAgICAgIHNlbGYuYnRuX2luc2VydF9icmFuY2gsCiAgICAgICAgICAgIGxhbWJkYSBzZWwsICphcmdzOiAoCiAgICAgICAgICAgICAgICBzZWxmLl9fbWFpbl9jb250cm9sbGVyLmNyZWF0ZV9icmFuY2hfYXV0b19wb3Moc2VsWzBdLCBzZWxbMV0pCiAgICAgICAgICAgICAgICBpZiBsZW4oc2VsKSA9PSAyIGVsc2UKICAgICAgICAgICAgICAgIHNlbGYuX19tYWluX2NvbnRyb2xsZXIuY3JlYXRlX3NlbGZfbG9vcChzZWxbMF0pKQogICAgICAgICkpCgogICAgICAgIHNlbGYuX19jb25kaXRpb25hbF9hY3Rpb25zLmFwcGVuZChDb25kaXRpb25hbFFMaW5lRWRpdCgKICAgICAgICAgICAgW1NwZWNpZmljTnVtQnJhbmNoZXNTZWxlY3RlZCgxKV0sCiAgICAgICAgICAgIHNlbGYuYnJhbmNoX3dlaWdodCwKICAgICAgICAgICAgbGFtYmRhIHNlbCwgdGV4dDogc2VsZi5fX21haW5fY29udHJvbGxlci5zZXRfYnJhbmNoX3dlaWdodCgKICAgICAgICAgICAgICAgIHNlbFswXSwgdGV4dCksCiAgICAgICAgICAgIGxhbWJkYSBzZWw6IHNlbGYuYnJhbmNoX3dlaWdodC5zZXRUZXh0KHNlbFswXS53ZWlnaHQpLAogICAgICAgICAgICBsYWJlbF9ldmVudF9oYW5kbGVyCiAgICAgICAgKSkKCiAgICAgICAgc2VsZi5icmFuY2hfd2VpZ2h0Lmluc3RhbGxFdmVudEZpbHRlcihzZWxmKQoKICAgICAgICBzZWxmLl9fY29uZGl0aW9uYWxfYWN0aW9ucy5hcHBlbmQoQ29uZGl0aW9uYWxRUHVzaEJ1dHRvbigKICAgICAgICAgICAgW1NwZWNpZmljTnVtTm9kZXNTZWxlY3RlZCgyKSwKICAgICAgICAgICAgIEFsbEJyYW5jaGVzV2VpZ2h0ZWQoKV0sCiAgICAgICAgICAgIHNlbGYuYnRuX2dlbmVyYXRlX21hc29uLAogICAgICAgICAgICBzZWxmLl9fc2hvd19tYXNvbgogICAgICAgICkpCgogICAgICAgIGRlZiBzYXZlX3Rpa3ooc2VsLCAqYXJncyk6CiAgICAgICAgICAgIGRpYWxvZyA9IFFGaWxlRGlhbG9nKCkKICAgICAgICAgICAgZGlhbG9nLnNldERlZmF1bHRTdWZmaXgoIi50ZXgiKQogICAgICAgICAgICByZXN1bHQgPSBkaWFsb2cuZ2V0U2F2ZUZpbGVOYW1lKAogICAgICAgICAgICAgICAgc2VsZiwKICAgICAgICAgICAgICAgIFFDb3JlQXBwbGljYXRpb24udHJhbnNsYXRlKCJzaWRlX3dpZGdldCIsICJTYXZlIFRpa1ogT3V0cHV0IiksCiAgICAgICAgICAgICAgICBmaWx0ZXI9IkxhVGV4ICgqLnRleCkiKQogICAgICAgICAgICBpZiByZXN1bHRbMF06CiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2lvX2NvbnRyb2xsZXIuZ2VuZXJhdGVfdGlreihyZXN1bHRbMF0pCiAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oIkV4Y2VwdGlvbiB3aGlsZSBzYXZpbmcgdGlreiIpCiAgICAgICAgICAgICAgICAgICAgYm94ID0gUU1lc3NhZ2VCb3goKQogICAgICAgICAgICAgICAgICAgIGJveC5jcml0aWNhbCgKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgUUNvcmVBcHBsaWNhdGlvbi50cmFuc2xhdGUoInNpZGVfd2lkZ2V0IiwgIkVycm9yIiksCiAgICAgICAgICAgICAgICAgICAgICAgIFFDb3JlQXBwbGljYXRpb24udHJhbnNsYXRlKCJzaWRlX3dpZGdldCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciB3aGlsZSB3cml0aW5nICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpa3ogZmlsZS4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VlIGxvZyBmb3IgZGV0YWlscy4iKSkKCiAgICAgICAgc2VsZi5fX2NvbmRpdGlvbmFsX2FjdGlvbnMuYXBwZW5kKENvbmRpdGlvbmFsUVB1c2hCdXR0b24oCiAgICAgICAgICAgIFtdLAogICAgICAgICAgICBzZWxmLmJ0bl9nZW5lcmF0ZV90aWt6LAogICAgICAgICAgICBzYXZlX3Rpa3oKICAgICAgICApKQoKICAgICAgICBzZWxmLl9fY29uZGl0aW9uYWxfYWN0aW9ucy5hcHBlbmQoQ29uZGl0aW9uYWxRUHVzaEJ1dHRvbigKICAgICAgICAgICAgW1NwZWNpZmljTnVtQnJhbmNoZXNTZWxlY3RlZCgyKSwKICAgICAgICAgICAgIFN1YnNlcXVlbnRCcmFuY2hlc1NlbGVjdGVkKCksCiAgICAgICAgICAgICBNaWRkbGVOb2RlSGFzTnVtQnJhbmNoZXMoMiksCiAgICAgICAgICAgICBTZWxlY3RlZEJyYW5jaGVzV2VpZ2h0ZWQoKV0sCiAgICAgICAgICAgIHNlbGYuYnRuX2NoYWluaW5nX3J1bGUsCiAgICAgICAgICAgIGxhbWJkYSBzZWwsICphcmdzOgogICAgICAgICAgICAgICAgc2VsZi5fX29wZXJhdGlvbl9jb250cm9sbGVyLmNoYWluX2JyYW5jaGVzKHNlbFswXSwgc2VsWzFdKQogICAgICAgICkpCgogICAgICAgIHNlbGYuX19jb25kaXRpb25hbF9hY3Rpb25zLmFwcGVuZChDb25kaXRpb25hbFFQdXNoQnV0dG9uKAogICAgICAgICAgICBbVHdvUGFyYWxsZWxCcmFuY2hlc1NlbGVjdGVkKCksCiAgICAgICAgICAgICBTZWxlY3RlZEJyYW5jaGVzV2VpZ2h0ZWQoKV0sCiAgICAgICAgICAgIHNlbGYuYnRuX2NvbWJpbmVfcGFyYWxsZWwsCiAgICAgICAgICAgIGxhbWJkYSBzZWwsICphcmdzOgogICAgICAgICAgICAgICAgc2VsZi5fX29wZXJhdGlvbl9jb250cm9sbGVyLmNvbWJpbmVfcGFyYWxsZWwoc2VsWzBdLCBzZWxbMV0pCiAgICAgICAgKSkKCiAgICAgICAgc2VsZi5fX2NvbmRpdGlvbmFsX2FjdGlvbnMuYXBwZW5kKENvbmRpdGlvbmFsUVB1c2hCdXR0b24oCiAgICAgICAgICAgIFtdLAogICAgICAgICAgICBzZWxmLmJ0bl9ncmFwaF90cmFuc3Bvc2l0aW9uLAogICAgICAgICAgICBsYW1iZGEgc2VsLCAqYXJnczogc2VsZi5fX29wZXJhdGlvbl9jb250cm9sbGVyLnRyYW5zcG9zZSgpCiAgICAgICAgKSkKCiAgICAgICAgc2VsZi5fX2NvbmRpdGlvbmFsX2FjdGlvbnMuYXBwZW5kKENvbmRpdGlvbmFsUVB1c2hCdXR0b24oCiAgICAgICAgICAgIFtTcGVjaWZpY051bU5vZGVzU2VsZWN0ZWQoMSksCiAgICAgICAgICAgICBOb2Rlc0hhdmVOb1NlbGZMb29wcygpLAogICAgICAgICAgICAgQnJhbmNoZXNOZXh0VG9Ob2Rlc1dlaWdodGVkKCldLAogICAgICAgICAgICBzZWxmLmJ0bl9lbGltaW5hdGVfbm9kZSwKICAgICAgICAgICAgbGFtYmRhIHNlbCwgKmFyZ3M6CiAgICAgICAgICAgICAgICBzZWxmLl9fb3BlcmF0aW9uX2NvbnRyb2xsZXIuZWxpbWluYXRlX25vZGUoc2VsWzBdKQogICAgICAgICkpCgogICAgICAgIHNlbGYuX19jb25kaXRpb25hbF9hY3Rpb25zLmFwcGVuZChDb25kaXRpb25hbFFQdXNoQnV0dG9uKAogICAgICAgICAgICBbU3BlY2lmaWNOdW1CcmFuY2hlc1NlbGVjdGVkKDEpLAogICAgICAgICAgICAgU2VsZWN0ZWRCcmFuY2hlc1dlaWdodGVkKCksCiAgICAgICAgICAgICBCcmFuY2hJc1NlbGZMb29wKCldLAogICAgICAgICAgICBzZWxmLmJ0bl9lbGltaW5hdGVfc2VsZl9sb29wLAogICAgICAgICAgICBsYW1iZGEgc2VsLCAqYXJnczoKICAgICAgICAgICAgICAgIHNlbGYuX19vcGVyYXRpb25fY29udHJvbGxlci5lbGltaW5hdGVfc2VsZl9sb29wKHNlbFswXSkKICAgICAgICApKQoKICAgICAgICBzZWxmLl9fY29uZGl0aW9uYWxfYWN0aW9ucy5hcHBlbmQoQ29uZGl0aW9uYWxRUHVzaEJ1dHRvbigKICAgICAgICAgICAgW1BhdGhIYXNJbmRlcGVuZGVudFN0YXJ0VmFyKCksCiAgICAgICAgICAgICBTdWJzZXF1ZW50QnJhbmNoZXNTZWxlY3RlZCgpLAogICAgICAgICAgICAgTmVpZ2hib3VyQnJhbmNoZXNXZWlnaHRlZCgpLAogICAgICAgICAgICAgU2VsZWN0ZWRCcmFuY2hlc1dlaWdodGVkKCldLAogICAgICAgICAgICBzZWxmLmJ0bl9pbnZlcnRfcGF0aCwKICAgICAgICAgICAgbGFtYmRhIHNlbCwgKmFyZ3M6IHNlbGYuX19vcGVyYXRpb25fY29udHJvbGxlci5pbnZlcnRfcGF0aChzZWwpCiAgICAgICAgKSkKCiAgICAgICAgZGVmIHNjYWxlX3BhdGgoc2VsLCAqYXJncyk6CiAgICAgICAgICAgIGRpYWxvZyA9IFFJbnB1dERpYWxvZygpCiAgICAgICAgICAgIHRleHQsIG9rID0gZGlhbG9nLmdldFRleHQoCiAgICAgICAgICAgICAgICBzZWxmLAogICAgICAgICAgICAgICAgUUNvcmVBcHBsaWNhdGlvbi50cmFuc2xhdGUoInNpZGVfd2lkZ2V0IiwgIlNjYWxlIGZhY3RvciIpLAogICAgICAgICAgICAgICAgUUNvcmVBcHBsaWNhdGlvbi50cmFuc2xhdGUoInNpZGVfd2lkZ2V0IiwgIlNjYWxlIGZhY3RvciIpKQogICAgICAgICAgICBpZiAob2spOgogICAgICAgICAgICAgICAgc2VsZi5fX29wZXJhdGlvbl9jb250cm9sbGVyLnNjYWxlX3BhdGgoc2VsLCB0ZXh0KQoKICAgICAgICBzZWxmLl9fY29uZGl0aW9uYWxfYWN0aW9ucy5hcHBlbmQoQ29uZGl0aW9uYWxRUHVzaEJ1dHRvbigKICAgICAgICAgICAgW01pbk51bU5vZGVzU2VsZWN0ZWQoMSksIEFsbE5vZGVzU2NhbGFibGUoKSwKICAgICAgICAgICAgIEJyYW5jaGVzTmV4dFRvTm9kZXNXZWlnaHRlZCgpXSwKICAgICAgICAgICAgc2VsZi5idG5fc2NhbGVfcGF0aCwKICAgICAgICAgICAgc2NhbGVfcGF0aAogICAgICAgICkpCgogICAgZGVmIGV2ZW50RmlsdGVyKHNlbGYsIHRhcmdldCwgZXZlbnQpOgogICAgICAgICMgU3RvcCBwcm9jZXNzaW5nIG9mIGV2ZW50IGlmIEN0cmwgKyBaIG9yCiAgICAgICAgIyBDdHJsICsgWSBpcyBwcmVzc2VkIHRvIGFsbG93IHVuZG8gLyByZW9kCiAgICAgICAgIyB3aGVuIHRleHRib3ggaXMgc2VsZWN0ZWQKICAgICAgICBpZiAoaXNpbnN0YW5jZShldmVudCwgUUtleUV2ZW50KSk6CiAgICAgICAgICAgIGlmICgoZXZlbnQubW9kaWZpZXJzKCkgPT0gUXQuQ29udHJvbE1vZGlmaWVyKQogICAgICAgICAgICAgICAgYW5kICgoZXZlbnQua2V5KCkgPT0gUXQuS2V5X1opCiAgICAgICAgICAgICAgICAgICAgIG9yIChldmVudC5rZXkoKSA9PSBRdC5LZXlfWSkpKToKICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCgogICAgICAgIHJldHVybiBzdXBlcigpLmV2ZW50RmlsdGVyKHRhcmdldCwgZXZlbnQpCgogICAgZGVmIF9fc2V0X3RleHRfZWRpdF9jb2xvcihzZWxmLCBzdGF0ZSwgc2VuZGVyOiBRTGluZUVkaXQpOgogICAgICAgIGlmIHN0YXRlID09IFFWYWxpZGF0b3IuQWNjZXB0YWJsZToKICAgICAgICAgICAgY29sb3IgPSAnI2M0ZGY5YicgICMgZ3JlZW4KICAgICAgICBlbHNlOgogICAgICAgICAgICBjb2xvciA9IFF0Q29yZS5RdC5CYWNrZ3JvdW5kUm9sZQoKICAgICAgICBzZW5kZXIuc2V0U3R5bGVTaGVldCgnUUxpbmVFZGl0IHsgYmFja2dyb3VuZC1jb2xvcjogJXMgfScgJSBjb2xvcikKCiAgICBkZWYgX19zaG93X21hc29uKHNlbGYsIHNlbCwgdGV4dCk6CiAgICAgICAgIyBHZW5lcmF0ZSBtYXNvbiByZXN1bHQKICAgICAgICBtYXNvbl9yZXN1bHQgPSBzZWxmLl9faW9fY29udHJvbGxlci5nZW5lcmF0ZV9tYXNvbigKICAgICAgICAgICAgc2VsZi5fX21vZGVsLmdyYXBoLAogICAgICAgICAgICBzZWxbMF0sCiAgICAgICAgICAgIHNlbFsxXQogICAgICAgICkKCjx8ZmltX2hvbGV8PgoKICAgIGRlZiBfX2hhbmRsZV9zZWxlY3Rpb25fY2hhbmdlKHNlbGYsIG9sZF9zZWxlY3Rpb24sIG5ld19zZWxlY3Rpb24pOgogICAgICAgIGZvciBhY3Rpb24gaW4gc2VsZi5fX2NvbmRpdGlvbmFsX2FjdGlvbnM6CiAgICAgICAgICAgIGFjdGlvbi51cGRhdGVfc2VsZWN0aW9uKG5ld19zZWxlY3Rpb24pCgogICAgZGVmIF9faGFuZGxlX21vZGVsX2NoYW5nZShzZWxmLCBldmVudCk6CiAgICAgICAgbm9kZV9wb3MgPSBzZWxmLm5vZGVfbmFtZS5jdXJzb3JQb3NpdGlvbigpCiAgICAgICAgYnJhbmNoX3dlaWdodF9wb3MgPSBzZWxmLmJyYW5jaF93ZWlnaHQuY3Vyc29yUG9zaXRpb24oKQogICAgICAgIGZvciBhY3Rpb24gaW4gc2VsZi5fX2NvbmRpdGlvbmFsX2FjdGlvbnM6CiAgICAgICAgICAgIGFjdGlvbi5oYW5kbGVfbW9kZWxfY2hhbmdlKGV2ZW50KQogICAgICAgIHNlbGYubm9kZV9uYW1lLnNldEN1cnNvclBvc2l0aW9uKG5vZGVfcG9zKQogICAgICAgIHNlbGYuYnJhbmNoX3dlaWdodC5zZXRDdXJzb3JQb3NpdGlvbihicmFuY2hfd2VpZ2h0X3BvcykKPHxmaW1fc3VmZml4fD4KICAgICAgICAjIFBhc3MgY29udGVudCBhbmQgb3BlbiB3aW5kb3cKICAgICAgICB3aW5kb3cgPSBNYXNvbldpbmRvdygpCiAgICAgICAgd2luZG93LnNldF9jb250ZW50KG1hc29uX3Jlc3VsdCkKICAgICAgICB3aW5kb3cuZXhlY18oKSAgIyBXYWl0IHVudGlsIHdpbmRvdyBpcyBjbG9zZWQKPHxmaW1fZW5kfD4="]
["cf9ebbfe30697f4fc222167c39b9f55ffc859f03-1","cf9ebbfe30697f4fc222167c39b9f55ffc859f03","PHxmaW1fcHJlZml4fD4KIiIiCldyaXRlIGFuIGFsZ29yaXRobSB0aGF0IHdpbGwgaWRlbnRpZnkgdmFsaWQgSVB2NCBhZGRyZXNzZXMgaW4gZG90LWRlY2ltYWwgZm9ybWF0LgpJUHMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdmFsaWQgaWYgdGhleSBjb25zaXN0IG9mIGZvdXIgb2N0ZXRzLCB3aXRoIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSwgaW5jbHVzaXZlLgoKSW5wdXQgdG8gdGhlIGZ1bmN0aW9uIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBzaW5nbGUgc3RyaW5nLgoKRXhhbXBsZXMKVmFsaWQgaW5wdXRzOgoKMS4yLjMuNAo8fGZpbV9ob2xlfD4KMS4yLjMuNC41CjEyMy40NTYuNzguOTAKMTIzLjA0NS4wNjcuMDg5CiIiIgppbXBvcnQgcmUKCgpkZWYgaXNfdmFsaWRfaXAoaXA6IHN0cikgLT4gYm9vbDoKICAgICIiIkNoZWNrcyBpZiBpcCBhZGRyZXNzIGlzIHZhbGlkCgogICAgRXhhbXBsZXM6CiAgICAgICAgPj4+IGFzc2VydCBpc192YWxpZF9pcCgnMTIuMjU1LjU2LjEnKQogICAgICAgID4+PiBhc3NlcnQgbm90IGlzX3ZhbGlkX2lwKCcxLjEuMScpCiAgICAiIiIKICAgIG9jdGV0cyA9IGlwLnNwbGl0KCIuIikKICAgIGlmIG5vdCBvY3RldHMgb3IgbGVuKG9jdGV0cykgIT0gNDoKICAgICAgICByZXR1cm4gRmFsc2UKICAgIHJldHVybiBhbGwobWFwKGxhbWJkYSBvY3RldDogb2N0ZXQgaW4gbWFwKHN0ciwgcmFuZ2UoMjU2KSksIG9jdGV0cykpCgoKZGVmIGlzX3ZhbGlkX2lwX3JlKGlwOiBzdHIpIC0+IGJvb2w6CiAgICAiIiJDaGVja3MgaWYgaXAgYWRkcmVzcyBpcyB2YWxpZAoKICAgIEV4YW1wbGVzOgogICAgICAgID4+PiBhc3NlcnQgaXNfdmFsaWRfaXAoJzEyLjI1NS41Ni4xJykKICAgICAgICA+Pj4gYXNzZXJ0IG5vdCBpc192YWxpZF9pcCgnMS4xLjEnKQogICAgIiIiCiAgICByZXR1cm4gYm9vbChyZS5jb21waWxlKHIiWzAtMjU2XVwuWzAtMjU2XVwuWzAtMjU2XVwuWzAtMjU2XSIpLnNlYXJjaChpcCkpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHByaW50KGlzX3ZhbGlkX2lwKCIxMi4yNTUuNTYuMSIpKQogICAgcHJpbnQoaXNfdmFsaWRfaXBfcmUoIjEyLjI1NS41Ni4xIikpCjx8ZmltX3N1ZmZpeHw+CjEyMy40NS42Ny44OQpJbnZhbGlkIGlucHV0czoKCjEuMi4zCjx8ZmltX2VuZHw+"]
["8feed8d284e4021db133b4fb7f347d3f64556a19-2","8feed8d284e4021db133b4fb7f347d3f64556a19","PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCmltcG9ydCBjYWxlbmRhcgpmcm9tIGVudW0gaW1wb3J0IEludEVudW0KCmltcG9ydCB0aW1leAoKZnJvbSBzcWxhbGNoZW15IGltcG9ydCBldmVudApmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IGFuZF8sIG9yXwpmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IGxpdGVyYWxfY29sdW1uCmZyb20gc3FsYWxjaGVteSBpbXBvcnQgQ29sdW1uLCBUYWJsZSwgRm9yZWlnbktleSwgSW5kZXgsIFVuaXF1ZUNvbnN0cmFpbnQKZnJvbSBzcWxhbGNoZW15IGltcG9ydCBGbG9hdCwgQm9vbGVhbiwgVGV4dCwgRGF0ZVRpbWUsIEludGVnZXIsIFN0cmluZwpmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IGNhc3QsIG51bGwsIGNhc2UKZnJvbSBzcWxhbGNoZW15Lm9ybS5pbnRlcmZhY2VzIGltcG9ydCBQcm9wQ29tcGFyYXRvcgpmcm9tIHNxbGFsY2hlbXkuZXh0Lmh5YnJpZCBpbXBvcnQgaHlicmlkX3Byb3BlcnR5CmZyb20gc3FsYWxjaGVteS5kaWFsZWN0cy5teXNxbCBpbXBvcnQgREVDSU1BTApmcm9tIHNxbGFsY2hlbXkuZXh0LmRlY2xhcmF0aXZlIGltcG9ydCBkZWNsYXJhdGl2ZV9iYXNlCmZyb20gc3FsYWxjaGVteS5leHQuYXNzb2NpYXRpb25wcm94eSBpbXBvcnQgYXNzb2NpYXRpb25fcHJveHkKZnJvbSBzcWxhbGNoZW15Lm9ybSBpbXBvcnQgY29tcG9zaXRlCmZyb20gc3FsYWxjaGVteS5vcm0gaW1wb3J0IGJhY2tyZWYKZnJvbSBzcWxhbGNoZW15Lm9ybSBpbXBvcnQgcmVsYXRpb25zaGlwCmZyb20gc3FsYWxjaGVteS5vcm0uY29sbGVjdGlvbnMgaW1wb3J0IGF0dHJpYnV0ZV9tYXBwZWRfY29sbGVjdGlvbgpmcm9tIHNxbGFsY2hlbXkudHlwZXMgaW1wb3J0IFR5cGVEZWNvcmF0b3IsIERBVEVUSU1FCgoKY2xhc3MgRGF0YXR5cGUoSW50RW51bSk6CiAgICBub25lID0gMAogICAgc3RyaW5nID0gMQogICAgaW50ID0gMgogICAgZmxvYXQgPSAzCiAgICBkYXRldGltZSA9IDQKICAgIHRpbWVyYW5nZSA9IDUKCgpjbGFzcyBTdHJlYW1TdGF0ZShJbnRFbnVtKToKICAgIGFjdGl2ZSA9IDEKICAgIGZpcmluZyA9IDIKICAgIGV4cGlyaW5nID0gMwogICAgZXJyb3IgPSA0CiAgICBleHBpcmVfZXJyb3IgPSA1CiAgICBjb21wbGV0ZWQgPSA2CiAgICByZXRyeV9maXJlID0gNwogICAgcmV0cnlfZXhwaXJlID0gOAoKCmNsYXNzIERCRXhjZXB0aW9uKEV4Y2VwdGlvbik6CiAgICBwYXNzCgoKY2xhc3MgSW52YWxpZFRyYWl0VHlwZShEQkV4Y2VwdGlvbik6CiAgICBwYXNzCgoKZGVmIGR0X3RvX2RlY2ltYWwoZHQpOgogICAgdF9zZWMgPSBjYWxlbmRhci50aW1lZ20oZHQudXRjdGltZXR1cGxlKCkpICsgKGR0Lm1pY3Jvc2Vjb25kLzFlNikKICAgIHJldHVybiBEZWNpbWFsKCIlLjZmIiAlIHRfc2VjKQoKCmRlZiBkZWNpbWFsX3RvX2R0KGRlY2ltYWxfdGltZXN0YW1wKToKICAgIHJldHVybiBkYXRldGltZS51dGNmcm9tdGltZXN0YW1wKGZsb2F0KGRlY2ltYWxfdGltZXN0YW1wKSkKCgpjbGFzcyBQcmVjaXNlVGltZXN0YW1wKFR5cGVEZWNvcmF0b3IpOgogICAgIiIiUmVwcmVzZW50cyBhIHRpbWVzdGFtcCBwcmVjaXNlIHRvIHRoZSBtaWNyb3NlY29uZC4iIiIKCiAgICBpbXBsID0gREFURVRJTUUKCiAgICBkZWYgbG9hZF9kaWFsZWN0X2ltcGwoc2VsZiwgZGlhbGVjdCk6CiAgICAgICAgaWYgZGlhbGVjdC5uYW1lID09ICdteXNxbCc6CiAgICAgICAgICAgIHJldHVybiBkaWFsZWN0LnR5cGVfZGVzY3JpcHRvcihERUNJTUFMKHByZWNpc2lvbj0yMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGU9NiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkZWNpbWFsPVRydWUpKQogICAgICAgIHJldHVybiBkaWFsZWN0LnR5cGVfZGVzY3JpcHRvcihEQVRFVElNRSgpKQoKICAgIGRlZiBwcm9jZXNzX2JpbmRfcGFyYW0oc2VsZiwgdmFsdWUsIGRpYWxlY3QpOgogICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CiAgICAgICAgICAgIHJldHVybiB2YWx1ZQogICAgICAgIGVsaWYgZGlhbGVjdC5uYW1lID09ICdteXNxbCc6CiAgICAgICAgICAgIHJldHVybiBkdF90b19kZWNpbWFsKHZhbHVlKQogICAgICAgIHJldHVybiB2YWx1ZQoKICAgIGRlZiBwcm9jZXNzX3Jlc3VsdF92YWx1ZShzZWxmLCB2YWx1ZSwgZGlhbGVjdCk6CiAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKICAgICAgICAgICAgcmV0dXJuIHZhbHVlCiAgICAgICAgZWxpZiBkaWFsZWN0Lm5hbWUgPT0gJ215c3FsJzoKICAgICAgICAgICAgcmV0dXJuIGRlY2ltYWxfdG9fZHQodmFsdWUpCiAgICAgICAgcmV0dXJuIHZhbHVlCgoKY2xhc3MgREJUaW1lUmFuZ2Uob2JqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBiZWdpbiwgZW5kKToKICAgICAgICBzZWxmLmJlZ2luID0gYmVnaW4KICAgICAgICBzZWxmLmVuZCA9IGVuZAoKICAgIGRlZiBfX2NvbXBvc2l0ZV92YWx1ZXNfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5iZWdpbiwgc2VsZi5lbmQKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgcmV0dXJuICJEQlRpbWVSYW5nZShiZWdpbj0lciwgZW5kPSVyKSIgJSAoc2VsZi5iZWdpbiwgc2VsZi5lbmQpCgogICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uob3RoZXIsIERCVGltZVJhbmdlKSBhbmQgXAogICAgICAgICAgICBvdGhlci5iZWdpbiA9PSBzZWxmLmJlZ2luIGFuZCBcCiAgICAgICAgICAgIG90aGVyLmVuZCA9PSBzZWxmLmVuZAoKICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgICAgIHJldHVybiBub3Qgc2VsZi5fX2VxX18ob3RoZXIpCgoKY2xhc3MgUHJveGllZERpY3RNaXhpbihvYmplY3QpOgogICAgIiIiQWRkcyBvYmpbbmFtZV0gYWNjZXNzIHRvIGEgbWFwcGVkIGNsYXNzLgoKICAgIFRoaXMgY2xhc3MgYmFzaWNhbGx5IHByb3hpZXMgZGljdGlvbmFyeSBhY2Nlc3MgdG8gYW4gYXR0cmlidXRlCiAgICBjYWxsZWQgYGBfcHJveGllZGBgLiAgVGhlIGNsYXNzIHdoaWNoIGluaGVyaXRzIHRoaXMgY2xhc3MKICAgIHNob3VsZCBoYXZlIGFuIGF0dHJpYnV0ZSBjYWxsZWQgYGBfcHJveGllZGBgIHdoaWNoIHBvaW50cyB0byBhIGRpY3Rpb25hcnkuCgogICAgIiIiCgogICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9wcm94aWVkKQoKICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICByZXR1cm4gaXRlcihzZWxmLl9wcm94aWVkKQoKICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBuYW1lKToKICAgICAgICByZXR1cm4gc2VsZi5fcHJveGllZFtuYW1lXQoKICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgbmFtZSk6CiAgICAgICAgcmV0dXJuIG5hbWUgaW4gc2VsZi5fcHJveGllZAoKICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBuYW1lLCB2YWx1ZSk6CiAgICAgICAgc2VsZi5fcHJveGllZFtuYW1lXSA9IHZhbHVlCgogICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIG5hbWUpOgogICAgICAgIGRlbCBzZWxmLl9wcm94aWVkW25hbWVdCgoKY2xhc3MgUG9seW1vcnBoaWNWZXJ0aWNhbFByb3BlcnR5KG9iamVjdCk6CiAgICAiIiJBIG5hbWUvdmFsdWUgcGFpciB3aXRoIHBvbHltb3JwaGljIHZhbHVlIHN0b3JhZ2UuIiIiCgogICAgQVRUUklCVVRFX01BUCA9IHtEYXRhdHlwZS5ub25lOiBOb25lfQogICAgUFlfVFlQRV9NQVAgPSB7dW5pY29kZTogRGF0YXR5cGUuc3RyaW5nLAogICAgICAgICAgICAgICAgICAgaW50OiBEYXRhdHlwZS5pbnQsCiAgICAgICAgICAgICAgICAgICBmbG9hdDogRGF0YXR5cGUuZmxvYXQsCiAgICAgICAgICAgICAgICAgICBkYXRldGltZTogRGF0YXR5cGUuZGF0ZXRpbWUsCiAgICAgICAgICAgICAgICAgICBEQlRpbWVSYW5nZTogRGF0YXR5cGUudGltZXJhbmdlfQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB2YWx1ZT1Ob25lKToKICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgZ2V0X3R5cGVfdmFsdWUoY2xzLCB2YWx1ZSk6CiAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKICAgICAgICAgICAgcmV0dXJuIERhdGF0eXBlLm5vbmUsIE5vbmUKICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZGVjb2RlKCd1dGY4JywgJ2lnbm9yZScpCjx8ZmltX2VuZHw+"]
["99b685fa36410ab6a1a28796c29bf506531d1099-1","99b685fa36410ab6a1a28796c29bf506531d1099","PHxmaW1fcHJlZml4fD4KZnJvbSBhc2NpaW1hdGljcy5zY3JlZW4gaW1wb3J0IFNjcmVlbgpmcm9tIHJhbmRvbSBpbXBvcnQgc2h1ZmZsZQpmcm9tIG1hdGggaW1wb3J0IGZsb29yCgpmcm9tIGNhcmRzIGltcG9ydCAqCgpSRUQgPSBTY3JlZW4uQ09MT1VSX1JFRApCTEFDSyA9IFNjcmVlbi5DT0xPVVJfQkxBQ0sKV0hJVEUgPSBTY3JlZW4uQ09MT1VSX1dISVRFCkdSRUVOID0gU2NyZWVuLkNPTE9VUl9HUkVFTgoKS0VZX01BUCA9IHtvcmQoJ2EnKTogKDEsIDApLAogICAgICAgICAgIG9yZCgncycpOiAoMSwgMSksCiAgICAgICAgICAgb3JkKCdkJyk6ICgxLCAyKSwKICAgICAgICAgICBvcmQoJ2YnKTogKDEsIDMpLAogICAgICAgICAgIG9yZCgnaicpOiAoMSwgNCksCiAgICAgICAgICAgb3JkKCdrJyk6ICgxLCA1KSwKICAgICAgICAgICBvcmQoJ2wnKTogKDEsIDYpLAogICAgICAgICAgIG9yZCgnOycpOiAoMSwgNyksCiAgICAgICAgICAgb3JkKCdxJyk6ICgwLCAwKSwKICAgICAgICAgICBvcmQoJ3cnKTogKDAsIDEpLAogICAgICAgICAgIG9yZCgnZScpOiAoMCwgMiksCiAgICAgICAgICAgb3JkKCdyJyk6ICgwLCAzKSwKICAgICAgICAgICBvcmQoJ3UnKTogKDAsIDQpLAogICAgICAgICAgIG9yZCgnaScpOiAoMCwgNSksCiAgICAgICAgICAgb3JkKCdvJyk6ICgwLCA2KSwKICAgICAgICAgICBvcmQoJ3AnKTogKDAsIDcpfQoKc2VsZWN0ZWQgPSBOb25lCgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgMCwgcm93LCAKICAgICAgICAgICAgY29sb3VyPUdSRUVOLCBiZz1CTEFDSykKCgpkZWYgcHJpbnRfZGl2aWRlcihzY3JlZW4sIHJvdywgY29sKToKICAgIHNjcmVlbi5wcmludF9hdCgKICAgICAgICAnfCcsIGNvbCwgcm93LAogICAgICAgIGNvbG91cj1HUkVFTiwgYmc9QkxBQ0spCgoKZGVmIHByaW50X2NhcmQoc2NyZWVuLCBjYXJkLCByb3csIGNvbCk6CiAgICBpZiBjYXJkIGlzIG5vdCBOb25lOgogICAgICAgIHNjcmVlbi5wcmludF9hdCgKICAgICAgICAgICAgc3RyKGNhcmQpLAogICAgICAgICAgICBjb2wgKyAxLCByb3csCiAgICAgICAgICAgIGNvbG91cj1nZXRfY29sb3IoY2FyZCksIGJnPUJMQUNLKQogICAgZWxzZToKICAgICAgICBzY3JlZW4ucHJpbnRfYXQoCiAgICAgICAgICAgICAgICAnICAgJywKICAgICAgICAgICAgICAgIGNvbCArIDEsIHJvdywKICAgICAgICAgICAgICAgIGNvbG91cj1XSElURSwgYmc9QkxBQ0spCgoKZGVmIGdldF9jb2xvcihjYXJkKToKICAgIHJldHVybiBSRUQgaWYgY2FyZC5jb2xvciA9PSAncmVkJyBlbHNlIFdISVRFCgoKZGVmIGhhbmRsZV9tb3ZlKGJvYXJkLCBwb3NpdGlvbik6CiAgICBnbG9iYWwgc2VsZWN0ZWQKICAgIGlmIHNlbGVjdGVkIGlzIG5vdCBOb25lOgogICAgICAgIGlmIHBvc2l0aW9uWzBdID09IDA6CiAgICAgICAgICAgIGJvYXJkLm1vdmUoc2VsZWN0ZWRbMF0sIHNlbGVjdGVkWzFdLCBwb3NpdGlvblswXSwgcG9zaXRpb25bMV0pCiAgICAgICAgZWxzZToKICAgICAgICAgICAgYm9hcmQubW92ZShzZWxlY3RlZFswXSwgc2VsZWN0ZWRbMV0sIGJvYXJkLmZpcnN0X2VtcHR5X3Jvdyhwb3NpdGlvblsxXSksIHBvc2l0aW9uWzFdKQogICAgICAgIHNlbGVjdGVkID0gTm9uZQogICAgZWxzZToKICAgICAgICBpZiBib2FyZC5pc19mcmVlY2VsbChwb3NpdGlvblswXSwgcG9zaXRpb25bMV0pOgogICAgICAgICAgICBzZWxlY3RlZCA9IHBvc2l0aW9uCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZWN0ZWQgPSAoYm9hcmQubGFzdF9yb3dfd2l0aF9jYXJkKHBvc2l0aW9uWzFdKSwgcG9zaXRpb25bMV0pCgoKZGVmIGRpc3BsYXkoc2NyZWVuKToKICAgIHdoaWxlIFRydWU6CiAgICAgICAgcHJpbnRfaG9yaXpvbnRhbF9kaXZpZGVyKHNjcmVlbiwgMCkKCiAgICAgICAgZm9yIGNvbCBpbiByYW5nZSg4KToKICAgICAgICAgICAgcHJpbnRfY2FyZChzY3JlZW4sIG1hdHJpeC5jYXJkX2F0KDAsIGNvbCksIDEsIGNvbCAqIDQpCiAgICAgICAgICAgIHByaW50X2RpdmlkZXIoc2NyZWVuLCAxLCBjb2wgKiA0KQoKICAgICAgICBwcmludF9ob3Jpem9udGFsX2RpdmlkZXIoc2NyZWVuLCAyKQoKCiAgICAgICAgZm9yIHJvdyBpbiByYW5nZSgxLDIwKToKICAgICAgICAgICAgZm9yIGNvbCBpbiByYW5nZSg4KToKICAgICAgICAgICAgICAgIHByaW50X2NhcmQoc2NyZWVuLCBtYXRyaXguY2FyZF9hdChyb3csIGNvbCksIHJvdyArIDIsIGNvbCAqIDQpCiAgICAgICAgICAgICAgICBwcmludF9kaXZpZGVyKHNjcmVlbiwgcm93ICsgMiwgY29sICogNCkKICAgICAgICAgICAgcHJpbnRfZGl2aWRlcihzY3JlZW4sIHJvdyArIDIsIDggKiA0KQoKICAgICAgICBpZiBzZWxlY3RlZCBpcyBub3QgTm9uZToKICAgICAgICAgICAgaWYgc2VsZWN0ZWRbMF0gPT0gMDoKICAgICAgICAgICAgICAgIHJvdyA9IDEKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJvdyA9IHNlbGVjdGVkWzBdICsgMgogICAgICAgICAgICBzY3JlZW4ucHJpbnRfYXQoJyAgICcsIHNlbGVjdGVkWzFdICogNCArIDEsIHJvdywgY29sb3VyPUJMQUNLLCBiZz1XSElURSkKCiAgICAgICAgcHJpbnRfZGl2aWRlcihzY3JlZW4sIDEsIDggKiA0KQoKICAgICAgICBwcmludF9ob3Jpem9udGFsX2RpdmlkZXIoc2NyZWVuLCAyMikKCiAgICAgICAgZXYgPSBzY3JlZW4uZ2V0X2tleSgpCgogICAgICAgIGlmIGV2IGluIEtFWV9NQVA6CiAgICAgICAgICAgIGhhbmRsZV9tb3ZlKG1hdHJpeCwgS0VZX01BUFtldl0pCgogICAgICAgIHNjcmVlbi5yZWZyZXNoKCkKCiAgICAgICAgICAgICAgICAgICAgICAgIAppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbWF0cml4ID0gRnJlZUNlbGxCb2FyZCgpCiAgICBTY3JlZW4ud3JhcHBlcihkaXNwbGF5KQo8fGZpbV9zdWZmaXh8PgoKZGVmIHByaW50X2hvcml6b250YWxfZGl2aWRlcihzY3JlZW4sIHJvdyk6CiAgICBzY3JlZW4ucHJpbnRfYXQoCiAgICAgICAgICAgICcrLS0tJyAqIDggKyAnKycsCjx8ZmltX2VuZHw+"]
["cf6f8b765fe8cdb68df2e10b66a4d539c5644e2f-2","cf6f8b765fe8cdb68df2e10b66a4d539c5644e2f","PHxmaW1fcHJlZml4fD4KIyBlbmNvZGluZz11dGYtOAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpfX2FsbF9fID0gWyJub2V4Y2VwdCJdCgpmcm9tIC5ub2V4Y2VwdCBpbXBvcnQgbm9leGNlcHQKPHxmaW1fZW5kfD4="]
["6bb15ef2dadb2740b641e85b359da9cb97263469-1","6bb15ef2dadb2740b641e85b359da9cb97263469","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcmV2ZXJzZQpmcm9tIGRqYW5nby52aWV3cyBpbXBvcnQgZ2VuZXJpYyBhcyB2aWV3cwoKZnJvbSB0ZXN0aW5nX2RlbW9zLndlYi5tb2RlbHMgaW1wb3J0IFByb2ZpbGUKCgpjbGFzcyBQcm9maWxlQ3JlYXRlVmlldyh2aWV3cy5DcmVhdGVWaWV3KToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgbW9kZWwgPSBQcm9maWxlCiAgICBmaWVsZHMgPSAnX19hbGxfXycKICAgIHRlbXBsYXRlX25hbWUgPSAncHJvZmlsZS9jcmVhdGUuaHRtbCcKCjx8ZmltX2VuZHw+"]
["510de3b0e22b29359cdfcf5cdbad7840bedbcb03-2","510de3b0e22b29359cdfcf5cdbad7840bedbcb03","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNzdgppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IG9zCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcmFuZG9tCmltcG9ydCBtYXRoCgppbXBvcnQgcHByaW50Cgpmcm9tIGh0bS5iaW5kaW5ncy5zZHIgaW1wb3J0IFNEUiwgTWV0cmljcwpmcm9tIGh0bS5lbmNvZGVycy5yZHNlIGltcG9ydCBSRFNFLCBSRFNFX1BhcmFtZXRlcnMKZnJvbSBodG0uZW5jb2RlcnMuZGF0ZSBpbXBvcnQgRGF0ZUVuY29kZXIKZnJvbSBodG0uYmluZGluZ3MuYWxnb3JpdGhtcyBpbXBvcnQgU3BhdGlhbFBvb2xlcgpmcm9tIGh0bS5iaW5kaW5ncy5hbGdvcml0aG1zIGltcG9ydCBUZW1wb3JhbE1lbW9yeQpmcm9tIGh0bS5hbGdvcml0aG1zLmFub21hbHlfbGlrZWxpaG9vZCBpbXBvcnQgQW5vbWFseUxpa2VsaWhvb2QgI0ZJWE1FIHVzZSBUTS5hbm9tYWx5IGluc3RlYWQsIGJ1dCBpdCBnaXZlcyB3b3JzZSByZXN1bHRzIHRoYW4gdGhlIHB5LkFub21hbHlMaWtlbGlob29kIG5vdwpmcm9tIGh0bS5iaW5kaW5ncy5hbGdvcml0aG1zIGltcG9ydCBQcmVkaWN0b3IKCmltcG9ydCBzeXMKCl9FWEFNUExFX0RJUiA9IG9zLnBhdGguYWJzcGF0aCgnJykKX0lOUFVUX0ZJTEVfUEFUSCA9IG9zLnBhdGguam9pbihfRVhBTVBMRV9ESVIsIHN5cy5hcmd2WzFdKQoKIyBjb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vaHRtLWNvbW11bml0eS9odG0uY29yZS9ibG9iL21hc3Rlci9weS9odG0vZXhhbXBsZXMvaG90Z3ltLnB5IGFuZCBtb2RpZmllZAojIGkgZ3Vlc3MgbGljZW5zZSB3aWxsIGJlIHRoZSBzYW1lCgpwYXJhbWV0ZXJzID0gewogICMgdGhlcmUgYXJlIDIgKDMpIGVuY29kZXJzOiAidmFsdWUiIChSRFNFKSAmICJ0aW1lIiAoRGF0ZVRpbWUgd2Vla2VuZCwgdGltZU9mRGF5KQogJ2VuYyc6IHsKICAgICAgInZhbHVlIiA6CiAgICAgICAgIHsncmVzb2x1dGlvbic6IDAuODgsICdzaXplJzogODAwLCAnc3BhcnNpdHknOiAwLjAyfSwKICAgICAgInRpbWUiOiAKICAgICAgICAgeyd0aW1lT2ZEYXknOiAoMzAsIDEpLCAnd2Vla2VuZCc6IDIxfQogfSwKICdwcmVkaWN0b3InOiB7J3NkcmNfYWxwaGEnOiAwLjF9LAogJ3NwJzogeydib29zdFN0cmVuZ3RoJzogMy4wLAogICAgICAgICdjb2x1bW5Db3VudCc6IDIzOCwKICAgICAgICAnbG9jYWxBcmVhRGVuc2l0eSc6IDAuMDYzOTU2MDQzOTU2MDQzOTYsCiAgICAgICAgJ3BvdGVudGlhbFBjdCc6IDAuOTUsCiAgICAgICAgJ3N5blBlcm1BY3RpdmVJbmMnOiAwLjA0LAogICAgICAgICdzeW5QZXJtQ29ubmVjdGVkJzogMC4xMzk5OTk5OTk5OTk5OTk5OSwKICAgICAgICAnc3luUGVybUluYWN0aXZlRGVjJzogMC4wNn0sCiAndG0nOiB7J2FjdGl2YXRpb25UaHJlc2hvbGQnOiAxNywKICAgICAgICAnY2VsbHNQZXJDb2x1bW4nOiAyMCwKICAgICAgICAnaW5pdGlhbFBlcm0nOiAwLjExLAogICAgICAgICdtYXhTZWdtZW50c1BlckNlbGwnOiAxMjgsCiAgICAgICAgJ21heFN5bmFwc2VzUGVyU2VnbWVudCc6IDY0LAogICAgICAgICdtaW5UaHJlc2hvbGQnOiAxMCwKICAgICAgICAnbmV3U3luYXBzZUNvdW50JzogMTI4LAogICAgICAgICdwZXJtYW5lbmNlRGVjJzogMC4xLAogICAgICAgICdwZXJtYW5lbmNlSW5jJzogMC4xfSwKICdhbm9tYWx5JzogewogICAnbGlrZWxpaG9vZCc6IAogICAgICAgeyMnbGVhcm5pbmdQZXJpb2QnOiBpbnQobWF0aC5mbG9vcihzZWxmLnByb2JhdGlvbmFyeVBlcmlvZCAvIDIuMCkpLAogICAgICAgICMncHJvYmF0aW9uYXJ5UGVyaW9kJzogc2VsZi5wcm9iYXRpb25hcnlQZXJpb2QtZGVmYXVsdF9wYXJhbWV0ZXJzWyJhbm9tYWx5Il1bImxpa2VsaWhvb2QiXVsibGVhcm5pbmdQZXJpb2QiXSwKICAgICAgICAncHJvYmF0aW9uYXJ5UGN0JzogMC4xLAogICAgICAgICdyZWVzdGltYXRpb25QZXJpb2QnOiAxMDB9ICNUaGVzZSBzZXR0aW5ncyBhcmUgY29waWVkIGZyb20gTkFCCiB9Cn0KCiMgUmVhZCB0aGUgaW5wdXQgZmlsZS4KcmVjb3JkcyA9IFtdCndpdGggb3BlbihfSU5QVVRfRklMRV9QQVRILCAiciIpIGFzIGZpbjoKICByZWFkZXIgPSBjc3YucmVhZGVyKGZpbikKICBoZWFkZXJzID0gbmV4dChyZWFkZXIpCiAgZm9yIHJlY29yZCBpbiByZWFkZXI6CiAgICByZWNvcmRzLmFwcGVuZChyZWNvcmQpCgp4X2cgPSBbXQp5X2cgPSBbXQpmb3IgciBpbiByZWNvcmRzOgogICAgeF9nLmFwcGVuZChkYXRldGltZS5kYXRldGltZS5zdHJwdGltZShyWzBdLCAiJVktJW0tJWQgJUg6JU06JVMiKSkKICAgIHlfZy5hcHBlbmQoZmxvYXQoclsxXSkpCgpwcmludCgicnVubmluZy4uLi4iKQoKIyBNYWtlIHRoZSBFbmNvZGVycy4gIFRoZXNlIHdpbGwgY29udmVydCBpbnB1dCBkYXRhIGludG8gYmluYXJ5IHJlcHJlc2VudGF0aW9ucy4KZGF0ZUVuY29kZXIgPSBEYXRlRW5jb2Rlcih0aW1lT2ZEYXk9IHBhcmFtZXRlcnNbImVuYyJdWyJ0aW1lIl1bInRpbWVPZkRheSJdLCAKICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWVrZW5kICA9IHBhcmFtZXRlcnNbImVuYyJdWyJ0aW1lIl1bIndlZWtlbmQiXSkgCgpzY2FsYXJFbmNvZGVyUGFyYW1zICAgICAgICAgICAgPSBSRFNFX1BhcmFtZXRlcnMoKQpzY2FsYXJFbmNvZGVyUGFyYW1zLnNpemUgICAgICAgPSBwYXJhbWV0ZXJzWyJlbmMiXVsidmFsdWUiXVsic2l6ZSJdCnNjYWxhckVuY29kZXJQYXJhbXMuc3BhcnNpdHkgICA9IHBhcmFtZXRlcnNbImVuYyJdWyJ2YWx1ZSJdWyJzcGFyc2l0eSJdCnNjYWxhckVuY29kZXJQYXJhbXMucmVzb2x1dGlvbiA9IHBhcmFtZXRlcnNbImVuYyJdWyJ2YWx1ZSJdWyJyZXNvbHV0aW9uIl0Kc2NhbGFyRW5jb2RlciA9IFJEU0UoIHNjYWxhckVuY29kZXJQYXJhbXMgKQplbmNvZGluZ1dpZHRoID0gKGRhdGVFbmNvZGVyLnNpemUgKyBzY2FsYXJFbmNvZGVyLnNpemUpCmVuY19pbmZvID0gTWV0cmljcyggW2VuY29kaW5nV2lkdGhdLCA5OTk5OTk5OTkgKQoKIyBNYWtlIHRoZSBIVE0uICBTcGF0aWFsUG9vbGVyICYgVGVtcG9yYWxNZW1vcnkgJiBhc3NvY2lhdGVkIHRvb2xzLgpzcFBhcmFtcyA9IHBhcmFtZXRlcnNbInNwIl0Kc3AgPSBTcGF0aWFsUG9vbGVyKAogIGlucHV0RGltZW5zaW9ucyAgICAgICAgICAgID0gKGVuY29kaW5nV2lkdGgsKSwKICBjb2x1bW5EaW1lbnNpb25zICAgICAgICAgICA9IChzcFBhcmFtc1siY29sdW1uQ291bnQiXSwpLAogIHBvdGVudGlhbFBjdCAgICAgICAgICAgICAgID0gc3BQYXJhbXNbInBvdGVudGlhbFBjdCJdLAogIHBvdGVudGlhbFJhZGl1cyAgICAgICAgICAgID0gZW5jb2RpbmdXaWR0aCwKICBnbG9iYWxJbmhpYml0aW9uICAgICAgICAgICA9IFRydWUsCiAgbG9jYWxBcmVhRGVuc2l0eSAgICAgICAgICAgPSBzcFBhcmFtc1sibG9jYWxBcmVhRGVuc2l0eSJdLAogIHN5blBlcm1JbmFjdGl2ZURlYyAgICAgICAgID0gc3BQYXJhbXNbInN5blBlcm1JbmFjdGl2ZURlYyJdLAogIHN5blBlcm1BY3RpdmVJbmMgICAgICAgICAgID0gc3BQYXJhbXNbInN5blBlcm1BY3RpdmVJbmMiXSwKICBzeW5QZXJtQ29ubmVjdGVkICAgICAgICAgICA9IHNwUGFyYW1zWyJzeW5QZXJtQ29ubmVjdGVkIl0sCiAgYm9vc3RTdHJlbmd0aCAgICAgICAgICAgICAgPSBzcFBhcmFtc1siYm9vc3RTdHJlbmd0aCJdLAogIHdyYXBBcm91bmQgICAgICAgICAgICAgICAgID0gVHJ1ZQopCnNwX2luZm8gPSBNZXRyaWNzKCBzcC5nZXRDb2x1bW5EaW1lbnNpb25zKCksIDk5OTk5OTk5OSApCgp0bVBhcmFtcyA9IHBhcmFtZXRlcnNbInRtIl0KdG0gPSBUZW1wb3JhbE1lbW9yeSgKICBjb2x1bW5EaW1lbnNpb25zICAgICAgICAgID0gKHNwUGFyYW1zWyJjb2x1bW5Db3VudCJdLCksCiAgY2VsbHNQZXJDb2x1bW4gICAgICAgICAgICA9IHRtUGFyYW1zWyJjZWxsc1BlckNvbHVtbiJdLAogIGFjdGl2YXRpb25UaHJlc2hvbGQgICAgICAgPSB0bVBhcmFtc1siYWN0aXZhdGlvblRocmVzaG9sZCJdLAogIGluaXRpYWxQZXJtYW5lbmNlICAgICAgICAgPSB0bVBhcmFtc1siaW5pdGlhbFBlcm0iXSwKICBjb25uZWN0ZWRQZXJtYW5lbmNlICAgICAgID0gc3BQYXJhbXNbInN5blBlcm1Db25uZWN0ZWQiXSwKICBtaW5UaHJlc2hvbGQgICAgICAgICAgICAgID0gdG1QYXJhbXNbIm1pblRocmVzaG9sZCJdLAogIG1heE5ld1N5bmFwc2VDb3VudCAgICAgICAgPSB0bVBhcmFtc1sibmV3U3luYXBzZUNvdW50Il0sCiAgcGVybWFuZW5jZUluY3JlbWVudCAgICAgICA9IHRtUGFyYW1zWyJwZXJtYW5lbmNlSW5jIl0sCiAgcGVybWFuZW5jZURlY3JlbWVudCAgICAgICA9IHRtUGFyYW1zWyJwZXJtYW5lbmNlRGVjIl0sCiAgcHJlZGljdGVkU2VnbWVudERlY3JlbWVudCA9IDAuMCwKICBtYXhTZWdtZW50c1BlckNlbGwgICAgICAgID0gdG1QYXJhbXNbIm1heFNlZ21lbnRzUGVyQ2VsbCJdLAogIG1heFN5bmFwc2VzUGVyU2VnbWVudCAgICAgPSB0bVBhcmFtc1sibWF4U3luYXBzZXNQZXJTZWdtZW50Il0KKQp0bV9pbmZvID0gTWV0cmljcyggW3RtLm51bWJlck9mQ2VsbHMoKV0sIDk5OTk5OTk5OSApCgojIHNldHVwIGxpa2VsaWhvb2QsIHRoZXNlIHNldHRpbmdzIGFyZSB1c2VkIGluIE5BQgphblBhcmFtcyA9IHBhcmFtZXRlcnNbImFub21hbHkiXVsibGlrZWxpaG9vZCJdCnByb2JhdGlvbmFyeVBlcmlvZCA9IGludChtYXRoLmZsb29yKGZsb2F0KGFuUGFyYW1zWyJwcm9iYXRpb25hcnlQY3QiXSkqbGVuKHJlY29yZHMpKSkKbGVhcm5pbmdQZXJpb2QgICAgID0gaW50KG1hdGguZmxvb3IocHJvYmF0aW9uYXJ5UGVyaW9kIC8gMi4wKSkKYW5vbWFseV9oaXN0b3J5ID0gQW5vbWFseUxpa2VsaWhvb2QobGVhcm5pbmdQZXJpb2Q9IGxlYXJuaW5nUGVyaW9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RpbWF0aW9uU2FtcGxlcz0gcHJvYmF0aW9uYXJ5UGVyaW9kIC0gbGVhcm5pbmdQZXJpb2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZXN0aW1hdGlvblBlcmlvZD0gYW5QYXJhbXNbInJlZXN0aW1hdGlvblBlcmlvZCJdKQoKcHJlZGljdG9yID0gUHJlZGljdG9yKCBzdGVwcz1bMSwgOTBdLCBhbHBoYT1wYXJhbWV0ZXJzWyJwcmVkaWN0b3IiXVsnc2RyY19hbHBoYSddICkKCiMgUmVzb2x1dGlvbiBpcyBob3cgYWNjdXJhdGUgdGhlIHByZWRpY3Rpb24gc2hvdWxkIGJlIHRvIHNvbWUgZG9sbGFyIGFtb3VudAojIHJlc29sdXRpb24gMTAwMCBtZWFucyB0aGUgcHJlZGljdGlvbiB3aWxsIG9ubHkgYmUgYWNjdXJhdGUgd2l0aGluIDEwMDAKIyBUaGF0IGlzIGZpbmUgZm9yIGJpdGNvaW4sIGJ1dCB0aGUgZ3JhcGggd2lsbCBiZSBicm9rZW4gaWYgaXQgaXMgc29tZXRoaW5nIGxpa2UgZG9nZWNvaW4sCiMgd2hpY2ggaXMgd29ydGggdW5kZXIgMSBjZW50CiMgUHJlZGljdG9yIHJlc29sdXRpb24gbmVlZHMgdG8gbWF0Y2ggZGF0YSBzY2FsZSwgb3IgZWxzZSBpdCB3aWxsIHRha2UgYSBsb25nIHRpbWUgdG8gcHJvY2Vzcy4KCiNTaG91bGQgYmUgYmFzZWQgb24gZGF0YSBmbHVjdHVhdGlvbiByYW5nZSBJIHRoaW5rCnJlc29sdXRpb25zX2Nob2ljZXMgPSB7CiAgICAxMDogWzEwMDAwLCA5OTk5OTk5OTk5OTldLCAjIG1heCBiZXR3ZWVuIDEwMDAwIC0gaW5maW5pdHkKICAgIDE6IFsxMDAwLCAxMDAwMF0sCiAgICAwLjE6IFsxMDAsIDEwMDBdLAogICAgMC4wMTogWzAsIDEwXQp9CnByZWRpY3Rvcl9yZXNvbHV0aW9uID0gMTAKZm9yIHJlcyBpbiByZXNvbHV0aW9uc19jaG9pY2VzOgogICAgcHJpY2VfcmFuZ2UgPSByZXNvbHV0aW9uc19jaG9pY2VzW3Jlc10KICAgIGlmIG1heCh5X2cpID49IHByaWNlX3JhbmdlWzBdIGFuZCBtYXgoeV9nKSA8PSBwcmljZV9yYW5nZVsxXToKICAgICAgICBwcmVkaWN0b3JfcmVzb2x1dGlvbiA9IHJlcwoKcHJpbnQoInByZWRpY3Rvcl9yZXNvbHV0aW9uIikKcHJpbnQocHJlZGljdG9yX3Jlc29sdXRpb24pCgojIEl0ZXJhdGUgdGhyb3VnaCBldmVyeSBkYXR1bSBpbiB0aGUgZGF0YXNldCwgcmVjb3JkIHRoZSBpbnB1dHMgJiBvdXRwdXRzLgppbnB1dHMgICAgICA9IFtdCmFub21hbHkgICAgID0gW10KYW5vbWFseVByb2IgPSBbXQpwcmVkaWN0aW9ucyA9IHsxOiBbXSwgOTA6IFtdfQpmb3IgY291bnQsIHJlY29yZCBpbiBlbnVtZXJhdGUocmVjb3Jkcyk6CgogICMgQ29udmVydCBkYXRlIHN0cmluZyBpbnRvIFB5dGhvbiBkYXRlIG9iamVjdC4KICBkYXRlU3RyaW5nID0gZGF0ZXRpbWUuZGF0ZXRpbWUuc3RycHRpbWUocmVjb3JkWzBdLCAiJVktJW0tJWQgJUg6JU06JVMiKQogICMgQ29udmVydCBkYXRhIHZhbHVlIHN0cmluZyBpbnRvIGZsb2F0LgogIGNvbnN1bXB0aW9uID0gZmxvYXQocmVjb3JkWzFdKQogIGlucHV0cy5hcHBlbmQoIGNvbnN1bXB0aW9uICkKCiAgIyBDYWxsIHRoZSBlbmNvZGVycyB0byBjcmVhdGUgYml0IHJlcHJlc2VudGF0aW9ucyBmb3IgZWFjaCB2YWx1ZS4gIFRoZXNlIGFyZSBTRFIgb2JqZWN0cy4KICBkYXRlQml0cyAgICAgICAgPSBkYXRlRW5jb2Rlci5lbmNvZGUoZGF0ZVN0cmluZykKICBjb25zdW1wdGlvbkJpdHMgPSBzY2FsYXJFbmNvZGVyLmVuY29kZShjb25zdW1wdGlvbikKCiAgIyBDb25jYXRlbmF0ZSBhbGwgdGhlc2UgZW5jb2RpbmdzIGludG8gb25lIGxhcmdlIGVuY29kaW5nIGZvciBTcGF0aWFsIFBvb2xpbmcuCiAgZW5jb2RpbmcgPSBTRFIoIGVuY29kaW5nV2lkdGggKS5jb25jYXRlbmF0ZShbY29uc3VtcHRpb25CaXRzLCBkYXRlQml0c10pCiAgZW5jX2luZm8uYWRkRGF0YSggZW5jb2RpbmcgKQoKICAjIENyZWF0ZSBhbiBTRFIgdG8gcmVwcmVzZW50IGFjdGl2ZSBjb2x1bW5zLCBUaGlzIHdpbGwgYmUgcG9wdWxhdGVkIGJ5IHRoZQogICMgY29tcHV0ZSBtZXRob2QgYmVsb3cuIEl0IG11c3QgaGF2ZSB0aGUgc2FtZSBkaW1lbnNpb25zIGFzIHRoZSBTcGF0aWFsIFBvb2xlci4KICBhY3RpdmVDb2x1bW5zID0gU0RSKCBzcC5nZXRDb2x1bW5EaW1lbnNpb25zKCkgKQoKICAjIEV4ZWN1dGUgU3BhdGlhbCBQb29saW5nIGFsZ29yaXRobSBvdmVyIGlucHV0IHNwYWNlLgogIHNwLmNvbXB1dGUoZW5jb2RpbmcsIFRydWUsIGFjdGl2ZUNvbHVtbnMpCiAgc3BfaW5mby5hZGREYXRhKCBhY3RpdmVDb2x1bW5zICkKCiAgIyBFeGVjdXRlIFRlbXBvcmFsIE1lbW9yeSBhbGdvcml0aG0gb3ZlciBhY3RpdmUgbWluaS1jb2x1bW5zLgogIHRtLmNvbXB1dGUoYWN0aXZlQ29sdW1ucywgbGVhcm49VHJ1ZSkKICB0bV9pbmZvLmFkZERhdGEoIHRtLmdldEFjdGl2ZUNlbGxzKCkuZmxhdHRlbigpICkKCiAgIyBQcmVkaWN0IHdoYXQgd2lsbCBoYXBwZW4sIGFuZCB0aGVuIHRyYWluIHRoZSBwcmVkaWN0b3IgYmFzZWQgb24gd2hhdCBqdXN0IGhhcHBlbmVkLgogIHBkZiA9IHByZWRpY3Rvci5pbmZlciggdG0uZ2V0QWN0aXZlQ2VsbHMoKSApCiAgZm9yIG4gaW4gKDEsIDkwKToKICAgIGlmIHBkZltuXToKICAgICAgcHJlZGljdGlvbnNbbl0uYXBwZW5kKCBucC5hcmdtYXgoIHBkZltuXSApICogcHJlZGljdG9yX3Jlc29sdXRpb24gKQogICAgZWxzZToKICAgICAgcHJlZGljdGlvbnNbbl0uYXBwZW5kKGZsb2F0KCduYW4nKSkKCiAgYW5vbWFseUxpa2VsaWhvb2QgPSBhbm9tYWx5X2hpc3RvcnkuYW5vbWFseVByb2JhYmlsaXR5KCBjb25zdW1wdGlvbiwgdG0uYW5vbWFseSApCiAgYW5vbWFseS5hcHBlbmQoIHRtLmFub21hbHkgKQogIGFub21hbHlQcm9iLmFwcGVuZCggYW5vbWFseUxpa2VsaWhvb2QgKQoKICBwcmVkaWN0b3IubGVhcm4oY291bnQsIHRtLmdldEFjdGl2ZUNlbGxzKCksIGludChjb25zdW1wdGlvbiAvIHByZWRpY3Rvcl9yZXNvbHV0aW9uKSkKCgojIFByaW50IGluZm9ybWF0aW9uICYgc3RhdGlzdGljcyBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIEhUTS4KcHJpbnQoIkVuY29kZWQgSW5wdXQiLCBlbmNfaW5mbykKcHJpbnQoIiIpCnByaW50KCJTcGF0aWFsIFBvb2xlciBNaW5pLUNvbHVtbnMiLCBzcF9pbmZvKQpwcmludChzdHIoc3ApKQpwcmludCgiIikKcHJpbnQoIlRlbXBvcmFsIE1lbW9yeSBDZWxscyIsIHRtX2luZm8pCnByaW50KHN0cih0bSkpCnByaW50KCIiKQoKIyBTaGlmdCB0aGUgcHJlZGljdGlvbnMgc28gdGhhdCB0aGV5IGFyZSBhbGlnbmVkIHdpdGggdGhlIGlucHV0IHRoZXkgcHJlZGljdC4KZm9yIG5fc3RlcHMsIHByZWRfbGlzdCBpbiBwcmVkaWN0aW9ucy5pdGVtcygpOgogIGZvciB4IGluIHJhbmdlKG5fc3RlcHMpOgogICAgICBwcmVkX2xpc3QuaW5zZXJ0KDAsIGZsb2F0KCduYW4nKSkKICAgICAgcHJlZF9saXN0LnBvcCgpCgoiIiIKCiMgQ2FsY3VsYXRlIHRoZSBwcmVkaWN0aXZlIGFjY3VyYWN5LCBSb290LU1lYW4tU3F1YXJlZAphY2N1cmFjeSAgICAgICAgID0gezE6IDAsIDkwOiAwfQphY2N1cmFjeV9zYW1wbGVzID0gezE6IDAsIDkwOiAwfQoKZm9yIGlkeCwgaW5wIGluIGVudW1lcmF0ZShpbnB1dHMpOgogIGZvciBuIGluIHByZWRpY3Rpb25zOiAjIEZvciBlYWNoIFtOXXVtYmVyIG9mIHRpbWUgc3RlcHMgYWhlYWQgd2hpY2ggd2FzIHByZWRpY3RlZC4KICAgIHZhbCA9IHByZWRpY3Rpb25zW25dWyBpZHggXQogICAgaWYgbm90IG1hdGguaXNuYW4odmFsKToKICAgICAgYWNjdXJhY3lbbl0gKz0gKGlucCAtIHZhbCkgKiogMgogICAgICBhY2N1cmFjeV9zYW1wbGVzW25dICs9IDEKZm9yIG4gaW4gc29ydGVkKHByZWRpY3Rpb25zKToKICBhY2N1cmFjeVtuXSA9IChhY2N1cmFjeVtuXSAvIGFjY3VyYWN5X3NhbXBsZXNbbl0pICoqIC41ICMgdGhpcyBsaW5lIHdhcyBjYXVzaW5nIGl0IHRvIGNyYXNoIGR1ZSB0byAwIGRpdiwgZHVubm8gd2hhdCdzIGdvaW5nIG9uLCBkb24ndCBuZWVkIGl0IGNvbW1lbnRlZCBpdCBvdXQKICBwcmludCgiUHJlZGljdGl2ZSBFcnJvciAoUk1TKSIsIG4sICJzdGVwcyBhaGVhZDoiLCBhY2N1cmFjeVtuXSkKPHxmaW1faG9sZXw+CiIiIgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgoKI3ByaW50KHJlY29yZHMpCmdvYWxfbGVuID0gbGVuKHJlY29yZHMpICsgMTQKd2hpbGUgbGVuKHJlY29yZHMpIDwgZ29hbF9sZW46CiAgcmVjb3JkID0gcmVjb3Jkc1stMV0KCiAgIyBDb252ZXJ0IGRhdGUgc3RyaW5nIGludG8gUHl0aG9uIGRhdGUgb2JqZWN0LgogIGRhdGVTdHJpbmcgPSBkYXRldGltZS5kYXRldGltZS5zdHJwdGltZShyZWNvcmRbMF0sICIlWS0lbS0lZCAlSDolTTolUyIpCiAgZGF0ZVN0cmluZ1BsdXNPbmUgPSAoZGF0ZXRpbWUuZGF0ZXRpbWUuc3RycHRpbWUocmVjb3JkWzBdLCAiJVktJW0tJWQgJUg6JU06JVMiKStkYXRldGltZS50aW1lZGVsdGEoZGF5cz0xKSkKICBkYXRlU3RyaW5nUGx1c09uZSA9IGRhdGVTdHJpbmdQbHVzT25lLnN0cmZ0aW1lKCIlWS0lbS0lZCAlSDolTTolUyIpCiAgIyBDb252ZXJ0IGRhdGEgdmFsdWUgc3RyaW5nIGludG8gZmxvYXQuCiAgY29uc3VtcHRpb24gPSBmbG9hdChyZWNvcmRbMV0pCiAgI2lucHV0cy5hcHBlbmQoIGNvbnN1bXB0aW9uICkKCiAgIyBDYWxsIHRoZSBlbmNvZGVycyB0byBjcmVhdGUgYml0IHJlcHJlc2VudGF0aW9ucyBmb3IgZWFjaCB2YWx1ZS4gIFRoZXNlIGFyZSBTRFIgb2JqZWN0cy4KICBkYXRlQml0cyAgICAgICAgPSBkYXRlRW5jb2Rlci5lbmNvZGUoZGF0ZVN0cmluZykKICBjb25zdW1wdGlvbkJpdHMgPSBzY2FsYXJFbmNvZGVyLmVuY29kZShjb25zdW1wdGlvbikKCiAgIyBDb25jYXRlbmF0ZSBhbGwgdGhlc2UgZW5jb2RpbmdzIGludG8gb25lIGxhcmdlIGVuY29kaW5nIGZvciBTcGF0aWFsIFBvb2xpbmcuCiAgZW5jb2RpbmcgPSBTRFIoIGVuY29kaW5nV2lkdGggKS5jb25jYXRlbmF0ZShbY29uc3VtcHRpb25CaXRzLCBkYXRlQml0c10pCiAgZW5jX2luZm8uYWRkRGF0YSggZW5jb2RpbmcgKQoKICAjIENyZWF0ZSBhbiBTRFIgdG8gcmVwcmVzZW50IGFjdGl2ZSBjb2x1bW5zLCBUaGlzIHdpbGwgYmUgcG9wdWxhdGVkIGJ5IHRoZQogICMgY29tcHV0ZSBtZXRob2QgYmVsb3cuIEl0IG11c3QgaGF2ZSB0aGUgc2FtZSBkaW1lbnNpb25zIGFzIHRoZSBTcGF0aWFsIFBvb2xlci4KICBhY3RpdmVDb2x1bW5zID0gU0RSKCBzcC5nZXRDb2x1bW5EaW1lbnNpb25zKCkgKQoKICAjIEV4ZWN1dGUgU3BhdGlhbCBQb29saW5nIGFsZ29yaXRobSBvdmVyIGlucHV0IHNwYWNlLgogIHNwLmNvbXB1dGUoZW5jb2RpbmcsIFRydWUsIGFjdGl2ZUNvbHVtbnMpCiAgc3BfaW5mby5hZGREYXRhKCBhY3RpdmVDb2x1bW5zICkKCiAgIyBFeGVjdXRlIFRlbXBvcmFsIE1lbW9yeSBhbGdvcml0aG0gb3ZlciBhY3RpdmUgbWluaS1jb2x1bW5zLgogIHRtLmNvbXB1dGUoYWN0aXZlQ29sdW1ucywgbGVhcm49RmFsc2UpCiAgdG1faW5mby5hZGREYXRhKCB0bS5nZXRBY3RpdmVDZWxscygpLmZsYXR0ZW4oKSApCgogICMgUHJlZGljdCB3aGF0IHdpbGwgaGFwcGVuLCBhbmQgdGhlbiBhZGQgdG8gcmVjb3JkcyBmb3IgbmV4dCBwcmVkaWN0aW9uCiAgcGRmID0gcHJlZGljdG9yLmluZmVyKCB0bS5nZXRBY3RpdmVDZWxscygpICkKICAjZm9yIG4gaW4gKDEpOiMsIDUpOgogIGlmIHBkZlsxXToKICAgICNwcmVkaWN0aW9uc1tuXS5hcHBlbmQoIG5wLmFyZ21heCggcGRmW25dICkgKiBwcmVkaWN0b3JfcmVzb2x1dGlvbiApCiAgICByZWNvcmRzLmFwcGVuZChbZGF0ZVN0cmluZ1BsdXNPbmUsIG5wLmFyZ21heCggcGRmWzFdICkgKiBwcmVkaWN0b3JfcmVzb2x1dGlvbl0pCiAgZWxzZToKICAgIHJlY29yZHMuYXBwZW5kKFtkYXRlU3RyaW5nUGx1c09uZSwgcmVjb3Jkc1stMV1bMV1dKQogICAgI3ByZWRpY3Rpb25zW25dLmFwcGVuZChmbG9hdCgnbmFuJykpCgppbXBvcnQgc3lzCgpjc3YgPSAiaSxkcyx5XG4iCmZvciBpIGluIHJhbmdlKGxlbihyZWNvcmRzKSk6CiAgICBjc3YgKz0gIl8sIiArICIsIi5qb2luKG1hcChzdHIsIHJlY29yZHNbaV0pKQogICAgY3N2ICs9ICJcbiIKCmYgPSBvcGVuKCIuL3ByZWRpY3Rpb25zLWNhY2hlLyIrc3lzLmFyZ3ZbMV0sICJ3IikKZi53cml0ZShjc3YpCmYuY2xvc2UoKQo8fGZpbV9zdWZmaXh8PgoKIyBTaG93IGluZm8gYWJvdXQgdGhlIGFub21hbHkgKG1lYW4gJiBzdGQpCnByaW50KCJBbm9tYWx5IE1lYW4iLCBucC5tZWFuKGFub21hbHkpKQpwcmludCgiQW5vbWFseSBTdGQgIiwgbnAuc3RkKGFub21hbHkpKQo8fGZpbV9lbmR8Pg=="]
["bdaedf4bfb8c0169f9f5609fee98428ad460759a-3","bdaedf4bfb8c0169f9f5609fee98428ad460759a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBweXRlc3QKZnJvbSBpY3RkZXBsb3kgaW1wb3J0IFNpbXVsYXRvciBhcyBTaW0KCgpAcHl0ZXN0LmZpeHR1cmUoKQpkZWYgZml4X2NyZWF0ZSgpOgogICAgIiIiCiAgICBGaXh0dXJlIGZvciB0ZXN0aW5nIHB1cnBvc2UgY3JlYXRpbmcgYSByZWFkeS10by1ydW4gc2ltcGxlIGNvLXNpbXVsYXRpb24KCiAgICA6cmV0dXJuOiBpY3RkZXBsb3kuU2ltdWxhdG9yKCkgd2l0aCBtZXRhLCBtb2RlbHMsIG5vZGVzLCBsaW5rcywgZ3JvdXBzLCBzZXF1ZW5jZSBhbmQgc3RlcHMgaW1wbGVtZW50ZWQKICAgICIiIgogICAgc2ltID0gU2ltKCkKCiAgICBzaW0uZWRpdC5hZGRfbWV0YShuYW1lPSJCYXNlTWV0YSIsIHNldF9hdHRycz1bImEiXSwgZ2V0X2F0dHJzPVsiYiJdKQoKICAgIHNpbS5lZGl0LmFkZF9tb2RlbCgKICAgICAgICBuYW1lPSJCYXNlTW9kZWwiLAogICAgICAgIG1ldGE9IkJhc2VNZXRhIiwKICAgICAgICBpbWFnZT0iaW50ZWdyY2l0eS9pY3Qtc2ltcGxlIiwKICAgICAgICB3cmFwcGVyPW9zLnBhdGguam9pbigidGVzdHMiLCAid3JhcHBlcnMiLCAiYmFzZV93cmFwLnB5IiksCiAgICAgICAgY29tbWFuZD1Ob25lLAogICAgICAgIGZpbGVzPVsKICAgICAgICAgICAgb3MucGF0aC5qb2luKCJ0ZXN0cyIsICJmaWxlc190b19hZGQiLCAiZW1wdHlfZmlsZV9mb3JfdGVzdGluZ19wdXJwb3NlLnR4dCIpCiAgICAgICAgXSwKICAgICkKCiAgICBzaW0uZWRpdC5hZGRfbm9kZSgKICAgICAgICBuYW1lPSJCYXNlMCIsIG1vZGVsPSJCYXNlTW9kZWwiLCBpbml0X3ZhbHVlcz17ImMiOiAwLjV9LCBpc19maXJzdD1UcnVlCiAgICApCgogICAgc2ltLmVkaXQuYWRkX25vZGUobmFtZT0iQmFzZTEiLCBtb2RlbD0iQmFzZU1vZGVsIiwgaW5pdF92YWx1ZXM9eyJjIjogMC4yNX0pCgogICAgc2ltLmVkaXQuYWRkX2xpbmsoZ2V0X25vZGU9IkJhc2UwIiwgZ2V0X2F0dHI9ImIiLCBzZXRfbm9kZT0iQmFzZTEiLCBzZXRfYXR0cj0iYSIpCiAgICBzaW0uZWRpdC5hZGRfbGluayhnZXRfbm9kZT0iQmFzZTEiLCBnZXRfYXR0cj0iYiIsIHNldF9ub2RlPSJCYXNlMCIsIHNldF9hdHRyPSJhIikKCiAgICBncnAwID0gc2ltLmNyZWF0ZV9ncm91cCgiQmFzZTAiKQogICAgZ3JwMSA9IHNpbS5jcmVhdGVfZ3JvdXAoIkJhc2UxIikKCiAgICBzaW0uY3JlYXRlX3NlcXVlbmNlKGdycDAsIGdycDEpCiAgICBzaW0uY3JlYXRlX3N0ZXBzKFs2MF0gKiAxMCkKCiAgICByZXR1cm4gc2ltCgoKQHB5dGVzdC5maXh0dXJlKCkKZGVmIGZpeF92b2x1bWUoKToKICAgICIiIgogICAgRml4dHVyZSBmb3IgdGVzdGluZyBwdXJwb3NlIGJhc2VkIG9uIGZpeF9jcmVhdGUoKSBjcmVhdGluZyB0aGUgbG9jYWwgdGVtcG9yYXJ5IGZvbGRlciB0byBiZSBtb3VudGVkIGludG8gY29udGFpbmVycwoKICAgIDpyZXR1cm46IGljdGRlcGxveS5TaW11bGF0b3IoKSB3aXRoIGxvY2FsIGZvbGRlcnMgY3JlYXRlZCBmb3IgZWFjaCBub2RlCiAgICAiIiIKICAgIHNpbSA9IGZpeF9jcmVhdGUoKQoKICAgIGZvciBub2RlX25hbWUsIG5vZGUgaW4gc2ltLmVkaXQubm9kZXMuaXRlcnJvd3MoKToKICAgICAgICBzaW0uZGVwbG95LmNyZWF0ZV92b2x1bWUoCiAgICAgICAgICAgIG5vZGVfbmFtZSwgbm9kZVsiaW5pdF92YWx1ZXMiXSwgbm9kZVsid3JhcHBlciJdLCAqbm9kZVsiZmlsZXMiXQogICAgICAgICkKCiAgICByZXR1cm4gc2ltCgoKPHxmaW1faG9sZXw+CgogICAgOnJldHVybjogaWN0ZGVwbG95LlNpbXVsYXRvcigpIHdpdGggc2ltdWxhdGlvbiBydW5uaW5nIGFuZCBhdXhpbGlhcnkgbm9kZXMsIG9yY2hlc3RyYXRvciwgYW5kIHNpbXVsYXRpb24gbm9kZXMgbG9ncwogICAgIiIiCiAgICBzaW0gPSBmaXhfY3JlYXRlKCkKCiAgICBsb2dzX2F1eCA9IHNpbS5kZXBsb3lfYXV4KCkKICAgIGxvZ3Nfb3JjID0gc2ltLmRlcGxveV9vcmNoZXN0cmF0b3Ioc2VydmVyPW9zLnBhdGguam9pbigidGVzdHMiLCAic2VydmVyLnB5IikpCiAgICBsb2dzID0gc2ltLmRlcGxveV9ub2RlcygpCgogICAgcmV0dXJuIHNpbSwgbG9nc19hdXgsIGxvZ3Nfb3JjLCBsb2dzCjx8ZmltX3N1ZmZpeHw+CkBweXRlc3QuZml4dHVyZSgpCmRlZiBmaXhfZGVwbG95KCk6CiAgICAiIiIKICAgIEZpeHR1cmUgZm9yIHRlc3RpbmcgcHVycG9zZSBiYXNlZCBvbiBmaXhfY3JlYXRlKCkgZGVwbG95aW5nIGFsbCBub2RlcyBhbmQgc3RhcnRpbmcgc2ltdWxhdGlvbgo8fGZpbV9lbmR8Pg=="]
["a402af1480bf74192fe0a6ef68880d063fd0b975-5","a402af1480bf74192fe0a6ef68880d063fd0b975","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKCnJlZ2lzdGVycyA9IFtpIGZvciBpIGluIHJhbmdlKDMyKV0KCgpkZWYgc3AoKToKICAgIHJldHVybiAzMgoKCmRlZiBmcCgpOgogICAgcmV0dXJuIDMzCgoKZGVmIGFsbG9jYXRlKG51bSk6CiAgICByZXQgPSBbXQogICAgZm9yIGogaW4gcmFuZ2UobnVtKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJldC5hcHBlbmQocmVnaXN0ZXJzLnBvcCgpKQogICAgICAgIGV4Y2VwdCBJbmRleEVycm9yIGFzIGU6CiAgICAgICAgICAgIHByaW50ICdFcnJvciBvY2N1cnMgZHVyaW5nIGFsbG9jYXRpbmcgcmVnaXN0ZXJzLicKICAgICAgICAgICAgcHJpbnQgZQogICAgICAgICAgICBzeXMuZXhpdCgxKQogICAgcmV0dXJuIHJldAoKCmRlZiBmcmVlKHJlZ3MpOgogICAgZm9yIGogaW4gcmVnczoKPHxmaW1faG9sZXw+CiAgICAgICAgcmVnaXN0ZXJzLmFwcGVuZChqKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGlmIGogaW4gcmVnaXN0ZXJzOgogICAgICAgICAgICBwcmludCAnRXJyb3Igb2NjdXJzIGR1cmluZyBmcmVlaW5nIHJlZ2lzdGVycy5cbicgXAogICAgICAgICAgICAgICAgICAnVGhlIHNhbWUgcmVnaXN0ZXIgaXMgYWxyZWFkeSBmcmVlZC5cbicKICAgICAgICAgICAgc3lzLmV4aXQoMSkKPHxmaW1fZW5kfD4="]
["cff9e6aafe2310723715a32c0e64897b5f211096-4","cff9e6aafe2310723715a32c0e64897b5f211096","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuY21ha2UgaW1wb3J0IENNYWtlQ29uYW5GaWxlCjx8ZmltX2VuZHw+"]
["51ac2a7cf45f4db0b0f9824786d679e57345d28f-3","51ac2a7cf45f4db0b0f9824786d679e57345d28f","PHxmaW1fcHJlZml4fD4KIiIiRmluZCBhIHNwZWNpZmljIGRldmljZSwgcmVzdG9yZSBjcmVkZW50aWFscyBhbmQgY29ubmVjdC4KCkNhbGwgc2NyaXB0IGxpa2UgdGhpczoKCiAgICBweXRob24gY29ubmVjdF93aXRoX2NyZWRlbnRpYWxzLnB5IDAKClRoaXMgY29ubmVjdCB0byB0aGUgZmlyc3QgZGV2aWNlIGluIERFVklDRVMgKGluZGV4IDApLiBJZiB5b3UgYWRkCmFub3RoZXIgZGV2aWNlLCB1c2UgMSBpbnN0ZWFkIG9mIDAgYW5kIHNvIG9uLiBZb3UgY2FuIGVhc2lseQpsb29rIHVwIGJhc2VkIG9uIG5hbWUgYXMgd2VsbCAobm90IGRlbW9uc3RyYXRlZCBoZXJlKS4KIiIiCgo8fGZpbV9ob2xlfD4KZnJvbSBweWF0di5jb25zdCBpbXBvcnQgUHJvdG9jb2wKCkxPT1AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKCiMgVGhpcyBjYW4gYmUgc3RvcmVkIGluIGEgZmlsZSBmb3IgaW5zdGFuY2UKREVWSUNFUyA9IFsKICAgIHsKICAgICAgICAibmFtZSI6ICJMaXZpbmcgUm9vbSIsCiAgICAgICAgImlkZW50aWZpZXJzIjogeyJhYWJiY2NkZGVlZmYiLCAiMTIzNDU2Nzg5In0sCiAgICAgICAgImNyZWRlbnRpYWxzIjogewogICAgICAgICAgICBQcm90b2NvbC5BaXJQbGF5OiAiYWJjZGVmIiwKICAgICAgICAgICAgUHJvdG9jb2wuQ29tcGFuaW9uOiAiZm9vYmFyIiwKICAgICAgICAgICAgUHJvdG9jb2wuUkFPUDogIjEyMzQ1NiIsCiAgICAgICAgfSwKICAgIH0sCiAgICAjIEFkZCBtb3JlIGRldmljZXMgaGVyZQpdCgoKYXN5bmMgZGVmIHByaW50X3doYXRfaXNfcGxheWluZyhkZXZpY2UsIGxvb3ApOgogICAgIiIiRmluZCBhIGRldmljZSBhbmQgcHJpbnQgd2hhdCBpcyBwbGF5aW5nLiIiIgogICAgcHJpbnQoZiJEaXNjb3ZlcmluZyB7ZGV2aWNlWyduYW1lJ119IG9uIG5ldHdvcmsuLi4iKQogICAgY29uZnMgPSBhd2FpdCBweWF0di5zY2FuKGxvb3AsIGlkZW50aWZpZXI9ZGV2aWNlWyJpZGVudGlmaWVycyJdKQoKICAgIGlmIG5vdCBjb25mczoKICAgICAgICBwcmludCgiRGV2aWNlIGNvdWxkIG5vdCBiZSBmb3VuZCIsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICByZXR1cm4KCiAgICBjb25mID0gY29uZnNbMF0KICAgIGZvciBwcm90b2NvbCwgY3JlZGVudGlhbHMgaW4gZGV2aWNlWyJjcmVkZW50aWFscyJdLml0ZW1zKCk6CiAgICAgICAgY29uZi5zZXRfY3JlZGVudGlhbHMocHJvdG9jb2wsIGNyZWRlbnRpYWxzKQoKICAgIHByaW50KGYiQ29ubmVjdGluZyB0byB7Y29uZi5hZGRyZXNzfSIpCiAgICBhdHYgPSBhd2FpdCBweWF0di5jb25uZWN0KGNvbmYsIGxvb3ApCgogICAgdHJ5OgogICAgICAgIHBsYXlpbmcgPSBhd2FpdCBhdHYubWV0YWRhdGEucGxheWluZygpCiAgICAgICAgcHJpbnQoIkN1cnJlbnRseSBwbGF5aW5nOiIpCiAgICAgICAgcHJpbnQocGxheWluZykKICAgIGZpbmFsbHk6CiAgICAgICAgYXdhaXQgYXN5bmNpby5nYXRoZXIoKmF0di5jbG9zZSgpKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBMT09QLnJ1bl91bnRpbF9jb21wbGV0ZShwcmludF93aGF0X2lzX3BsYXlpbmcoREVWSUNFU1tpbnQoc3lzLmFyZ3ZbMV0pXSwgTE9PUCkpCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBhc3luY2lvCmltcG9ydCBzeXMKCmltcG9ydCBweWF0dgo8fGZpbV9lbmR8Pg=="]
["8ffdc5d287597edb1849dd932df75b1e3ccc0999-3","8ffdc5d287597edb1849dd932df75b1e3ccc0999","PHxmaW1fcHJlZml4fD4KZnJvbSBpbnNpZ2h0cy5wYXJzZXJzIGltcG9ydCBTa2lwRXhjZXB0aW9uLCBzdWJzY3JpcHRpb25fbWFuYWdlcl9yZWxlYXNlCmZyb20gaW5zaWdodHMucGFyc2Vycy5zdWJzY3JpcHRpb25fbWFuYWdlcl9yZWxlYXNlIGltcG9ydCBTdWJzY3JpcHRpb25NYW5hZ2VyUmVsZWFzZVNob3cKZnJvbSBpbnNpZ2h0cy50ZXN0cyBpbXBvcnQgY29udGV4dF93cmFwCmltcG9ydCBweXRlc3QKaW1wb3J0IGRvY3Rlc3QKCklOUFVUX05PUk1BTF8xID0gIiIiClJlbGVhc2U6IDcuMgoiIiIuc3RyaXAoKQoKSU5QVVRfTk9STUFMXzIgPSAiIiIKUmVsZWFzZTogNlNlcnZlcgoiIiIuc3RyaXAoKQoKSU5QVVRfTk9STUFMXzMgPSAiIiIKUmVsZWFzZTogOAoiIiIuc3RyaXAoKQoKSU5QVVRfTk9UX1NFVCA9ICIiIgpSZWxlYXNlIG5vdCBzZXQKIiIiLnN0cmlwKCkKCklOUFVUX05HXzEgPSAiIiIKWFlDClJlbGVhc2Ugbm90IHNldAoiIiIuc3RyaXAoKQoKSU5QVVRfTkdfMiA9ICIiIgpSZWxlYXNlOiA3LngKIiIiLnN0cmlwKCkKCklOUFVUX05HXzMgPSAiIiIKUmVsZWFzZTogNy54IERVTU1ZCiIiIi5zdHJpcCgpCgpJTlBVVF9OR180ID0gIiIiClJlbGVhc2U6IDd4CiIiIi5zdHJpcCgpCgoKZGVmIHRlc3Rfc3Vic2NyaXB0aW9uX21hbmFnZXJfcmVsZWFzZV9zaG93X29rKCk6CiAgICByZXQgPSBTdWJzY3JpcHRpb25NYW5hZ2VyUmVsZWFzZVNob3coY29udGV4dF93cmFwKElOUFVUX05PUk1BTF8xKSkKICAgIGFzc2VydCByZXQuc2V0ID09ICc3LjInCiAgICBhc3NlcnQgcmV0Lm1ham9yID09IDcKICAgIGFzc2VydCByZXQubWlub3IgPT0gMgoKICAgIHJldCA9IFN1YnNjcmlwdGlvbk1hbmFnZXJSZWxlYXNlU2hvdyhjb250ZXh0X3dyYXAoSU5QVVRfTk9STUFMXzIpKQogICAgYXNzZXJ0IHJldC5zZXQgPT0gJzZTZXJ2ZXInCiAgICBhc3NlcnQgcmV0Lm1ham9yID09IDYKICAgIGFzc2VydCByZXQubWlub3IgaXMgTm9uZQoKICAgIHJldCA9IFN1YnNjcmlwdGlvbk1hbmFnZXJSZWxlYXNlU2hvdyhjb250ZXh0X3dyYXAoSU5QVVRfTk9STUFMXzMpKQogICAgYXNzZXJ0IHJldC5zZXQgPT0gJzgnCiAgICBhc3NlcnQgcmV0Lm1ham9yID09IDgKICAgIGFzc2VydCByZXQubWlub3IgaXMgTm9uZQoKCmRlZiB0ZXN0X3N1YnNjcmlwdGlvbl9tYW5hZ2VyX3JlbGVhc2Vfc2hvd19ub3Rfc2V0KCk6CiAgICByZXQgPSBTdWJzY3JpcHRpb25NYW5hZ2VyUmVsZWFzZVNob3coY29udGV4dF93cmFwKElOUFVUX05PVF9TRVQpKQogICAgYXNzZXJ0IHJldC5zZXQgaXMgTm9uZQogICAgYXNzZXJ0IHJldC5tYWpvciBpcyBOb25lCiAgICBhc3NlcnQgcmV0Lm1pbm9yIGlzIE5vbmUKCgpkZWYgdGVzdF9zdWJzY3JpcHRpb25fbWFuYWdlcl9yZWxlYXNlX3Nob3dfbmcoKToKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhTa2lwRXhjZXB0aW9uKSBhcyBlX2luZm86CiAgICAgICAgU3Vic2NyaXB0aW9uTWFuYWdlclJlbGVhc2VTaG93KGNvbnRleHRfd3JhcChJTlBVVF9OR18xKSkKICAgIGFzc2VydCAiQ29udGVudCB0YWtlcyBhdCBtb3N0IDEgbGluZSAoMiBnaXZlbikuIiBpbiBzdHIoZV9pbmZvLnZhbHVlKQoKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhTa2lwRXhjZXB0aW9uKSBhcyBlX2luZm86CiAgICAgICAgU3Vic2NyaXB0aW9uTWFuYWdlclJlbGVhc2VTaG93KGNvbnRleHRfd3JhcChJTlBVVF9OR18yKSkKICAgIGFzc2VydCAiSW5jb3JyZWN0IGNvbnRlbnQ6IFJlbGVhc2U6IDcueCIgaW4gc3RyKGVfaW5mby52YWx1ZSkKCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoU2tpcEV4Y2VwdGlvbikgYXMgZV9pbmZvOgogICAgICAgIFN1YnNjcmlwdGlvbk1hbmFnZXJSZWxlYXNlU2hvdyhjb250ZXh0X3dyYXAoSU5QVVRfTkdfMykpCiAgICBhc3NlcnQgIkluY29ycmVjdCBjb250ZW50OiBSZWxlYXNlOiA3LnggRFVNTVkiIGluIHN0cihlX2luZm8udmFsdWUpCgogICAgd2l0aCBweXRlc3QucmFpc2VzKFNraXBFeGNlcHRpb24pIGFzIGVfaW5mbzoKICAgICAgICBTdWJzY3JpcHRpb25NYW5hZ2VyUmVsZWFzZVNob3coY29udGV4dF93cmFwKElOUFVUX05HXzQpKQogICAgYXNzZXJ0ICJJbmNvcnJlY3QgY29udGVudDogUmVsZWFzZTogN3giIGluIHN0cihlX2luZm8udmFsdWUpCgoKZGVmIHRlc3RfZG9jX2V4YW1wbGVzKCk6CiAgICBlbnYgPSB7CiAgICAgICAgICAgICdyaHNtX3JlbCc6CiAgICAgICAgICAgIFN1YnNjcmlwdGlvbk1hbmFnZXJSZWxlYXNlU2hvdyhjb250ZXh0X3dyYXAoSU5QVVRfTk9STUFMXzEpKSwKICAgICAgICAgIH0KICAgIGZhaWxlZCwgdG90YWwgPSBkb2N0ZXN0LnRlc3Rtb2Qoc3Vic2NyaXB0aW9uX21hbmFnZXJfcmVsZWFzZSwgZ2xvYnM9ZW52KQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBhc3NlcnQgZmFpbGVkID09IDAKPHxmaW1fZW5kfD4="]
["d465d52ea8075505fbec18fafe1b93d410901f7e-3","d465d52ea8075505fbec18fafe1b93d410901f7e","PHxmaW1fcHJlZml4fD4KIyDlrrblm73moqboh6rliqjmi77lj5bph5HluIHjgIHoh6rliqjlrozmiJDov5DotKcKIyDmoLjlv4Plt6XkvZzmqKHlnZcKIyBBdXRob3I6IEx1UmVuSmlhc1dvcmxkIChodHRwczovL2dpdGh1Yi5jb20vTHVSZW5KaWFzV29ybGQpIDxsb2xpQGx1cmVuamlhLmluPgojIERlcGVuZGVuY3k6IGFkYihTaGVsbCkKCmZyb20gdXRpbHMgaW1wb3J0ICoKaW1wb3J0IHRpbWUKaW1wb3J0IHRraW50ZXIKaW1wb3J0IHRraW50ZXIubWVzc2FnZWJveApmcm9tIHRraW50ZXIgaW1wb3J0IHR0awpmcm9tIFBJTCBpbXBvcnQgSW1hZ2UsIEltYWdlVGsKCgpjbGFzcyBXb3JrOgoJIyDmiKrlm77mlofku7bkvY3nva4KCV9fc25hcHNob3RfZmlsZSA9ICIiCgoJIyDlvZPliY3miZPngrnmqKHlvI8KCV9fY3VycmVudF9tb2RlID0gImhvbWUiCgoJIyDmmK/lkKblrozmiJDphY3nva4KCV9fY29uZmlnX3N0YXR1cyA9IEZhbHNlCgoJIyDlu7rnrZHnianlnZDmoIfngrkKCV9faG9tZV9zcG90ID0gW1stMSwtMV0sIFstMSwtMV0sIFstMSwtMV0sCgkJCQkgICBbLTEsLTFdLCBbLTEsLTFdLCBbLTEsLTFdLAoJCQkJICAgWy0xLC0xXSwgWy0xLC0xXSwgWy0xLC0xXV0KCSMg5YiX6L2m5Z2Q5qCH54K5CglfX3RyYWluX3Nwb3QgPSBbWy0xLC0xXSwgWy0xLC0xXSwgWy0xLC0xXV0KCgkjIOWcqOWbvueJh+S4iuWinuWKoOaMh+ekuuWZqAoJX19pbmRpY2F0b3JfZ3JvdXAgPSBbTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZV0KCgkjIOa4heepuuS4tOaXtuebruW9lQoJZGVmIF9fZW1wdHlfZGlyKHNlbGYpOgoJCSMg5riF56m65Li05pe255uu5b2VCgkJdHJ5OgoJCQlyZW1vdmVfZGlyKCIuL3RtcCIpCgkJCW9zLm1rZGlyKCIuL3RtcCIsIG1vZGU9MG83NTUpCgkJZXhjZXB0IEV4Y2VwdGlvbjoKCQkJcmFpc2UgUGVybWlzc2lvbkVycm9yKCLmuIXnqbrkuLTml7bnm67lvZXov4fnqIvkuK3lh7rnjrDplJnor68iKQoKCSMg5oiq5Zu+CglkZWYgX19zbmFwc2hvdChzZWxmKToKCQlvdXQsIGVyciwgZXhjZXB0aW9uID0gZXhlY19jb21tYW5kKCJhZGIgc2hlbGwgc2NyZWVuY2FwIC1wIC9zZGNhcmQvdGVzdC5wbmciKQoJCWlmIGV4Y2VwdGlvbiBpcyBOb25lOgoJCQlwcmludCgi57uI56uv5oiq5Zu+5oiQ5Yqf77yM5a2Y5YKo5LqO57uI56uvL3NkY2FyZC90ZXN0LnBuZyIpCgkJCWZpbGVfbmFtZSA9ICJzbmFwc2hvdHt9LnBuZyIuZm9ybWF0KHN0cihpbnQodGltZS50aW1lKCkpKSkKCQkJb3V0LCBlcnIsIGV4Y2VwdGlvbiA9IGV4ZWNfY29tbWFuZCgiYWRiIHB1bGwgL3NkY2FyZC90ZXN0LnBuZyB0bXAve30iLmZvcm1hdChmaWxlX25hbWUpKQoJCQlpZiBleGNlcHRpb24gaXMgTm9uZToKCQkJCXByaW50KCLmiKrlm77mi7fotJ3miJDlip/vvIzlrZjlgqjkuo7mnKzmnLrlvZPliY3nm67lvZV0bXAve30iLmZvcm1hdChmaWxlX25hbWUpKQoJCQkJcmV0dXJuIGZpbGVfbmFtZQoJCQllbHNlOgoJCQkJcmFpc2UgT1NFcnJvcigi5ou36LSd5oiq5Zu+5ZG95Luk5omn6KGM5aSx6LSlIikKCQllbHNlOgoJCQlyYWlzZSBPU0Vycm9yKCLnu4jnq6/miKrlm77lkb3ku6TmiafooYzlpLHotKUiKQoKCSMg5pi+56S656qX5L2TCglkZWYgX19zaG93X2ZyYW1lKHNlbGYpOgoJCWZyYW1lID0gdGtpbnRlci5UaygpCgoJCWZyYW1lLnRpdGxlKCLpgInmi6nlhbPplK7ngrkiKQoJCWZyYW1lLmdlb21ldHJ5KCI0ODB4ODAwKzQwMCsxMDAiKQoJCWZyYW1lLnJlc2l6YWJsZSh3aWR0aD1GYWxzZSwgaGVpZ2h0PUZhbHNlKQoJCWZyYW1lLmNvbmZpZ3VyZShiZz0iI2VjZWNlYyIpCgkJZnJhbWUuYXR0cmlidXRlcygnLXRvcG1vc3QnLCAxKQoJCWZyYW1lLnVwZGF0ZSgpCgkJZnJhbWUuYXR0cmlidXRlcygnLXRvcG1vc3QnLCAwKQoKCQkjIOaPkOekuuaWh+acrAoJCWxhYmVsID0gdGtpbnRlci5MYWJlbCgKCQkJZnJhbWUsCgkJCXRleHQ9Iuivt+eCueWHu+WbvuS4reeahOaJgOacieW7uuetkeeJqSIsCgkJCWZnPSJibGFjayIsCgkJCWJnPSIjZWNlY2VjIiwKCQkJZm9udD0oIum7keS9kyIsIDE0KSwKCQkJd2lkdGg9NDAwLAoJCQloZWlnaHQ9MSwKCQkJanVzdGlmeT0iY2VudGVyIiwKCQkJYW5jaG9yPSJjZW50ZXIiLAoJCSkKCQlsYWJlbC5wYWNrKCkKCgkJIyDlm77niYfmoYYKCQlpbWcgPSBJbWFnZS5vcGVuKCJ0bXAve30iLmZvcm1hdChzZWxmLl9fc25hcHNob3RfZmlsZSkpCgkJZnJhbWUudXBkYXRlKCkKCQlpbWdfcmVzaXplZCA9IHJlc2l6ZV9pbWFnZShmcmFtZS53aW5mb193aWR0aCgpLCBmcmFtZS53aW5mb19oZWlnaHQoKSAtIGxhYmVsLndpbmZvX2hlaWdodCgpIC0gNDAsIGltZykKCQlvcmlnX2ltYWdlID0gSW1hZ2VUay5QaG90b0ltYWdlKGltZykKCQlpbWFnZSA9IEltYWdlVGsuUGhvdG9JbWFnZShpbWdfcmVzaXplZCkKCgkJaW1hZ2VfbGFiZWwgPSB0a2ludGVyLkxhYmVsKAoJCQlmcmFtZSwKCQkJd2lkdGg9ZnJhbWUud2luZm9fd2lkdGgoKSwKCQkJaW1hZ2U9aW1hZ2UsCgkJCWJnPSIjZWNlY2VjIiwKCQkJY3Vyc29yPSJkb3QiCgkJKQoJCWltYWdlX2xhYmVsLnBhY2soZXhwYW5kPVRydWUpCgoJCSMg5Zu+54mH54K55Ye75LqL5Lu2CgkJZGVmIGltYWdlX2NsaWNrKGV2ZW50KToKCQkJZGVmIGFkZF9pbWFnZV9sYWJlbCh4LCB5LCBvcmlnX2ltYWdlX3gsIG9yaWdfaW1hZ2VfeSk6CgkJCQlpZiBzZWxmLl9faW5kaWNhdG9yX2dyb3VwWy0xXSBpcyBOb25lOgoJCQkJCWluZGV4ID0gc2VsZi5fX2luZGljYXRvcl9ncm91cC5pbmRleChOb25lKQoKCQkJCQl0cmlnZ2VyX3N1Ym1pdF9zdGF0dXMoaW5kZXgpCgoJCQkJCXNlbGYuX19pbmRpY2F0b3JfZ3JvdXBbaW5kZXhdID0gdHRrLkJ1dHRvbigKCQkJCQkJaW1hZ2VfbGFiZWwsCgkJCQkJCXRleHQ9aW5kZXggKyAxLAoJCQkJCQl3aWR0aD0xCgkJCQkJKQoKCQkJCQlzZWxmLl9faW5kaWNhdG9yX2dyb3VwW2luZGV4XS51cGRhdGUoKQoKCQkJCQlzZWxmLl9faW5kaWNhdG9yX2dyb3VwW2luZGV4XS5wbGFjZSgKCQkJCQkJcmVseD0oeCAvIGltYWdlX2xhYmVsLndpbmZvX3dpZHRoKCkpLAoJCQkJCQlyZWx5PSh5IC8gaW1hZ2VfbGFiZWwud2luZm9faGVpZ2h0KCkpCgkJCQkJKQoJCQkJCWlmIHNlbGYuX19jdXJyZW50X21vZGUgPT0gImhvbWUiOgoJCQkJCQlzZWxmLl9faG9tZV9zcG90W2luZGV4XSA9IFtvcmlnX2ltYWdlX3gsIG9yaWdfaW1hZ2VfeV0KCQkJCQllbGlmIHNlbGYuX19jdXJyZW50X21vZGUgPT0gInRyYWluIjoKCQkJCQkJc2VsZi5fX3RyYWluX3Nwb3RbaW5kZXhdID0gW29yaWdfaW1hZ2VfeCwgb3JpZ19pbWFnZV95XQoKCQkJCWVsc2U6CgkJCQkJdGtpbnRlci5tZXNzYWdlYm94LnNob3d3YXJuaW5nKCLml6Dms5Xnu6fnu63miZPngrkiLCAi5L2g5bey57uP5omT5ruh5LqGe33kuKrngrnvvIzlpoLmnpzmnInmiZPplJnnmoTngrnvvIzor7fnm7TmjqXngrnlh7vph43nva7jgIIiLmZvcm1hdChzdHIobGVuKHNlbGYuX19pbmRpY2F0b3JfZ3JvdXApKSkpCgoJCQkjIOS6i+S7tueCueWHu+WdkOaghwoJCQljbGlja194ID0gZXZlbnQueAoJCQljbGlja195ID0gZXZlbnQueQoJCQkjIOe8qeaUvuWQjueahOWbvueJh+mVv+WuvQoJCQlpbWFnZV93aWR0aCA9IGltYWdlLndpZHRoKCkKCQkJaW1hZ2VfaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0KCkKCQkJIyBMYWJlbOWuueWZqOeahOmVv+WuvQoJCQlyZWFsX3dpZHRoID0gaW1hZ2VfbGFiZWwud2luZm9fd2lkdGgoKQoJCQlyZWFsX2hlaWdodCA9IGltYWdlX2xhYmVsLndpbmZvX2hlaWdodCgpCgkJCSMg5Zu+54mH5pys5p2l55qE6ZW/5a69CgkJCW9yaWdfaW1hZ2Vfd2lkdGggPSBvcmlnX2ltYWdlLndpZHRoKCkKCQkJb3JpZ19pbWFnZV9oZWlnaHQgPSBvcmlnX2ltYWdlLmhlaWdodCgpCgkJCWltYWdlX3ggPSBjbGlja194IC0gKChyZWFsX3dpZHRoIC0gaW1hZ2Vfd2lkdGgpIC8gMikKCQkJaW1hZ2VfeSA9IGNsaWNrX3kgLSAoKHJlYWxfaGVpZ2h0IC0gaW1hZ2VfaGVpZ2h0KSAvIDIpCgkJCW9yaWdfaW1hZ2VfeCA9IHJvdW5kKGltYWdlX3ggKiAob3JpZ19pbWFnZV93aWR0aCAvIGltYWdlX3dpZHRoKSwgMikKCQkJb3JpZ19pbWFnZV95ID0gcm91bmQoaW1hZ2VfeSAqIChvcmlnX2ltYWdlX2hlaWdodCAvIGltYWdlX2hlaWdodCksIDIpCgkJCWFkZF9pbWFnZV9sYWJlbChjbGlja194LCBjbGlja195LCBvcmlnX2ltYWdlX3gsIG9yaWdfaW1hZ2VfeSkKCgkJZGVmIHJlc2V0X2ltYWdlX2xhYmVsKCk6CgkJCWZvciBlYWNoIGluIHNlbGYuX19pbmRpY2F0b3JfZ3JvdXA6CgkJCQlpZiBlYWNoIGlzIG5vdCBOb25lOgoJCQkJCWVhY2gucGxhY2VfZm9yZ2V0KCkKCgkJCXNlbGYuX19ob21lX3Nwb3QgPSBbWy0xLCAtMV1dICogbGVuKHNlbGYuX19ob21lX3Nwb3QpCgkJCXNlbGYuX19pbmRpY2F0b3JfZ3JvdXAgPSBbTm9uZV0gKiBsZW4oc2VsZi5fX2luZGljYXRvcl9ncm91cCkKCgkJZGVmIHJlY2FwX2ltYWdlKCk6CgkJCWdsb2JhbCBpbWcsIGltZ19yZXNpemVkLCBvcmlnX2ltYWdlLCBpbWFnZQoJCQlzZWxmLl9fc25hcHNob3RfZmlsZSA9IHNlbGYuX19zbmFwc2hvdCgpCgoJCQlpbWcgPSBJbWFnZS5vcGVuKCJ0bXAve30iLmZvcm1hdChzZWxmLl9fc25hcHNob3RfZmlsZSkpCgkJCWltZ19yZXNpemVkID0gcmVzaXplX2ltYWdlKGZyYW1lLndpbmZvX3dpZHRoKCksIGZyYW1lLndpbmZvX2hlaWdodCgpIC0gbGFiZWwud2luZm9faGVpZ2h0KCkgLSA0MCwgaW1nKQoJCQlvcmlnX2ltYWdlID0gSW1hZ2VUay5QaG90b0ltYWdlKGltZykKCQkJaW1hZ2UgPSBJbWFnZVRrLlBob3RvSW1hZ2UoaW1nX3Jlc2l6ZWQpCgoJCQlpbWFnZV9sYWJlbFsiaW1hZ2UiXSA9IGltYWdlCgoJCWltYWdlX2xhYmVsLmJpbmQoIjxCdXR0b24tMT4iLCBpbWFnZV9jbGljaykKCgkJIyDmjInpkq7lrrnlmagKCQlidXR0b25fY29udGFpbmVyID0gdGtpbnRlci5GcmFtZSgKCQkJd2lkdGg9ZnJhbWUud2luZm9fd2lkdGgoKSwKCQkJaGVpZ2h0PTQwLAoJCQliZz0iI2VjZWNlYyIKCQkpCgkJYnV0dG9uX2NvbnRhaW5lci5wYWNrKCkKCgkJcGFkZGluZ18xID0gdGtpbnRlci5GcmFtZSgKCQkJYnV0dG9uX2NvbnRhaW5lciwKCQkJd2lkdGg9ZnJhbWUud2luZm9fd2lkdGgoKSwKCQkJaGVpZ2h0PTUsCgkJCWJnPSIjZWNlY2VjIgoJCSkKCQlwYWRkaW5nXzEuZ3JpZChyb3c9MCwgY29sdW1uc3Bhbj0zKQoKCQkjIOmHjee9ruaMiemSrgoJCWJ1dHRvbl9yZXNldCA9IHR0ay5CdXR0b24oCgkJCWJ1dHRvbl9jb250YWluZXIsCgkJCXRleHQ9IumHjee9riIsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCQkJd2lkdGg9MTIsCgkJCWNvbW1hbmQ9cmVzZXRfaW1hZ2VfbGFiZWwKPHxmaW1fZW5kfD4="]
["8f5371e09f7c177a011063bac1e6647d79ee120c-4","8f5371e09f7c177a011063bac1e6647d79ee120c","PHxmaW1fcHJlZml4fD4KIiIiU3BlY2lmeSB0aGUgam9icyB0byBydW4gdmlhIGNvbmZpZyBmaWxlLgoKQmlub21pYWwgYnJpZGdlIGJhbmRpdCBleHBlcmltZW50IHdpdGggY29ycmVsYXRlZCBlZGdlcy4KU2VlIEZpZ3VyZSA4IGh0dHBzOi8vYXJ4aXYub3JnL3BkZi8xNzA3LjAyMDM4LnBkZgoiIiIKCmltcG9ydCBjb2xsZWN0aW9ucwppbXBvcnQgZnVuY3Rvb2xzCgpmcm9tIGJhc2UuY29uZmlnX2xpYiBpbXBvcnQgQ29uZmlnCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBiYXNlLmV4cGVyaW1lbnQgaW1wb3J0IEV4cGVyaW1lbnROb0FjdGlvbgpmcm9tIGdyYXBoLmFnZW50X2NvcnJlbGF0ZWQgaW1wb3J0IENvcnJlbGF0ZWRCQlRTCmZyb20gZ3JhcGguYWdlbnRfaW5kZXAgaW1wb3J0IEluZGVwZW5kZW50QkJUUwpmcm9tIGdyYXBoLmVudl9ncmFwaF9iYW5kaXQgaW1wb3J0IENvcnJlbGF0ZWRCaW5vbWlhbEJyaWRnZQo8fGZpbV9lbmR8Pg=="]
["7a996611512d9650e4972187d8bc2664ecd1bbb6-1","7a996611512d9650e4972187d8bc2664ecd1bbb6","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKCgpkZWYgZ2xvYmFsX3NldHRpbmdzKHJlcXVlc3QpOgogICAgcmV0dXJuIHsKPHxmaW1faG9sZXw+CiAgICB9Cjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgJ0NPTkZFUkVOQ0VfWUVBUic6IHNldHRpbmdzLkNPTkZFUkVOQ0VfWUVBUiwKPHxmaW1fZW5kfD4="]
["5166a11aa04643730c7f40e74485a666f9139e34-4","5166a11aa04643730c7f40e74485a666f9139e34","PHxmaW1fcHJlZml4fD4KZnJvbSBtYXRoIGltcG9ydCBoeXBvdAoKY2xhc3MgVmV0b3I6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHg9MCwgeT0wKToKICAgICAgICBzZWxmLnggPSB4CiAgICAgICAgc2VsZi55ID0geQoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gJ1ZldG9yKCVyLCAlciknICUgKHNlbGYueCwgc2VsZi55KQoKICAgIGRlZiBfX2Fic19fKHNlbGYpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcmV0dXJuIGh5cG90KHNlbGYueCwgc2VsZi55KQoKPHxmaW1fZW5kfD4="]
["8903a2a5d6c26855765311b112a003e26d656345-1","8903a2a5d6c26855765311b112a003e26d656345","PHxmaW1fcHJlZml4fD4KZnJvbSBzaHV0aXRfbW9kdWxlIGltcG9ydCBTaHV0SXRNb2R1bGUKCmNsYXNzIHRlc3QxMShTaHV0SXRNb2R1bGUpOgoKCWRlZiBidWlsZChzZWxmLCBzaHV0aXQpOgoKCQkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJCSMgTk9OLUxJTkUtT1JJRU5URUQgVEVTVFMKCQkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJCSMgc2ltcGxlIGluc2VydCAKCQlzaHV0aXQuc2VuZCgnY2F0ID4gL3RtcC9hIDw8PCAiYSInKQoJCXNodXRpdC5pbnNlcnRfdGV4dCgnJycKYgpjCmQnJycsJy90bXAvYScsJ2EnLGxpbmVfb3JpZW50ZWQ9RmFsc2UpCgkJcmVzID0gc2h1dGl0LnNlbmRfYW5kX2dldF9vdXRwdXQoJ21kNXN1bSAvdG1wL2EnKQoJCWlmIHJlcyAhPSAnNDdlY2UyZTQ5ZTVjMDMzMzY3N2ZjMzRlMDQ0ZDgyNTcgIC90bXAvYSc6CgkJCXNodXRpdC5mYWlsKCd0ZXN0MTEuMSBmYWlsZWQ6ICcgKyByZXMpICMgcHJhZ21hOiBubyBjb3ZlcgoKCQkjIHNpbXBsZSBpbnNlcnQgd2l0aCByZWdleHAKCQlzaHV0aXQuc2VuZCgnY2F0ID4gL3RtcC9hIDw8PCAiYWJjZGUiJykKCQlzaHV0aXQuaW5zZXJ0X3RleHQoJycnCmIKYwpkJycnLCcvdG1wL2EnLCdiLmQnLGxpbmVfb3JpZW50ZWQ9RmFsc2UpCgkJaWYgc2h1dGl0LnNlbmRfYW5kX2dldF9vdXRwdXQoJ21kNXN1bSAvdG1wL2EnKSAhPSAnZjAxM2Q1ZDYzOGI3NzBkMTY2YmU2YTlkMWY1ODJiNzMgIC90bXAvYSc6CgkJCXNodXRpdC5mYWlsKCd0ZXN0MTEuMiBmYWlsZWQnKSAjIHByYWdtYTogbm8gY292ZXIKCgoJCSMgSW5zZXJ0IHRvIG5vbi1leGlzdGVudCBsaW5lLgoJCXNodXRpdC5zZW5kKCdjYXQgPiAvdG1wL2EgPDw8ICJhIicpCgkJaWYgc2h1dGl0Lmluc2VydF90ZXh0KCcnJwpiCmMKZAplJycnLCcvdG1wL2EnLCdeYXNmYXNmYSQnLGxpbmVfb3JpZW50ZWQ9RmFsc2UpICE9IE5vbmU6CgkJCXNodXRpdC5mYWlsKCd0ZXN0MTEuMyBmYWlsZWQnKSAjIHByYWdtYTogbm8gY292ZXIKCgoJCSMgSW5zZXJ0IHRleHQgYmVmb3JlCgkJc2h1dGl0LnNlbmRfZmlsZSgnL3RtcC9hJywiIiJhCmQiIiIpCgkJc2h1dGl0Lmluc2VydF90ZXh0KCcnJ2IKYwonJycsJy90bXAvYScsJ2QnLGJlZm9yZT1UcnVlLGxpbmVfb3JpZW50ZWQ9RmFsc2UpCgkJaWYgc2h1dGl0LnNlbmRfYW5kX2dldF9vdXRwdXQoJ21kNXN1bSAvdG1wL2EnKSAhPSAnYWVkZWI5ZjdkZGY3NmY0NTc0N2ZlNWY3ZjZkMjExZGQgIC90bXAvYSc6CgkJCXNodXRpdC5mYWlsKCd0ZXN0MTEuNCBmYWlsZWQnKSAjIHByYWdtYTogbm8gY292ZXIKCgkJIyBzaW1wbGUgaW5zZXJ0IHRvIGVuZAoJCXNodXRpdC5zZW5kKCdjYXQgPiAvdG1wL2EgPDw8ICJhIicpCgkJc2h1dGl0Lmluc2VydF90ZXh0KCcnJ2IKYwpkCicnJywnL3RtcC9hJyxsaW5lX29yaWVudGVkPUZhbHNlKQoJCWlmIHNodXRpdC5zZW5kX2FuZF9nZXRfb3V0cHV0KCdtZDVzdW0gL3RtcC9hJykgIT0gJzQ3ZWNlMmU0OWU1YzAzMzM2NzdmYzM0ZTA0NGQ4MjU3ICAvdG1wL2EnOgoJCQlzaHV0aXQuZmFpbCgndGVzdDExLjUgZmFpbGVkJykgIyBwcmFnbWE6IG5vIGNvdmVyCgoJCSMgc2ltcGxlIHJlcGxhY2UKCQlzaHV0aXQuc2VuZCgnY2F0ID4gL3RtcC8xMS42IDw8PCAiYSInKQoJCXNodXRpdC5yZXBsYWNlX3RleHQoJycnYgpjCmQKJycnLCcvdG1wLzExLjYnLCdeYSQnLGxpbmVfb3JpZW50ZWQ9RmFsc2UpCgkJaWYgc2h1dGl0LnNlbmRfYW5kX2dldF9vdXRwdXQoJ21kNXN1bSAvdG1wLzExLjYnKSAhPSAnNGUzOTJjMTA1MDhmOTExYjgxMTBiNWVlNWYzZTVjNzYgIC90bXAvMTEuNic6CgkJCXNodXRpdC5mYWlsKCd0ZXN0MTEuNiBmYWlsZWQnKSAjIHByYWdtYTogbm8gY292ZXIKCgkJIyBzaW1wbGUgcmVwbGFjZSB3aXRoIG5vbi1tYXRjaGluZyBwYXR0ZXJuCgkJc2h1dGl0LnNlbmQoJ2NhdCA+IC90bXAvMTEuNyA8PDwgImEiJykKCQlzaHV0aXQucmVwbGFjZV90ZXh0KCcnJ2IKYwpkCicnJywnL3RtcC8xMS43Jywnd2lsbG5vdG1hdGNoJyxsaW5lX29yaWVudGVkPUZhbHNlKQoJCWlmIHNodXRpdC5zZW5kX2FuZF9nZXRfb3V0cHV0KCdtZDVzdW0gL3RtcC8xMS43JykgIT0gJzQ3ZWNlMmU0OWU1YzAzMzM2NzdmYzM0ZTA0NGQ4MjU3ICAvdG1wLzExLjcnOgoJCQlzaHV0aXQuZmFpbCgndGVzdDExLjcgZmFpbGVkJykgIyBwcmFnbWE6IG5vIGNvdmVyCgoJCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgkJIyBMSU5FIE9SSUVOVEVEIFRFU1RTCgkJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCQkjIHNpbXBsZSBpbnNlcnQgCgkJc2h1dGl0LnNlbmQoJ2NhdCA+IC90bXAvYSA8PDwgImEiJykKCQlzaHV0aXQuaW5zZXJ0X3RleHQoJycnYgpjCmQnJycsJy90bXAvYScsJ2EnKQoJCWlmIHNodXRpdC5zZW5kX2FuZF9nZXRfb3V0cHV0KCdtZDVzdW0gL3RtcC9hJykgIT0gJzQ3ZWNlMmU0OWU1YzAzMzM2NzdmYzM0ZTA0NGQ4MjU3ICAvdG1wL2EnOgoJCQlzaHV0aXQuZmFpbCgndGVzdDExLjEuMSBmYWlsZWQnKSAjIHByYWdtYTogbm8gY292ZXIKCgkJIyBzaW1wbGUgaW5zZXJ0IHdpdGggcmVnZXhwCgkJc2h1dGl0LnNlbmQoJ2NhdCA+IC90bXAvYSA8PDwgImFiY2RlIicpCgkJc2h1dGl0Lmluc2VydF90ZXh0KCcnJ2IKYwpkJycnLCcvdG1wL2EnLCdiLmQnKQoJCWlmIHNodXRpdC5zZW5kX2FuZF9nZXRfb3V0cHV0KCdtZDVzdW0gL3RtcC9hJykgIT0gJ2ZkNTUwNTc2NDA3MGVlMzE4ZDA4YjVjYTAzYjQ2MDc1ICAvdG1wL2EnOgoJCQlzaHV0aXQuZmFpbCgndGVzdDExLjEuMiBmYWlsZWQnKSAjIHByYWdtYTogbm8gY292ZXIKCgoJCSMgSW5zZXJ0IHRvIG5vbi1leGlzdGVudCBsaW5lLgoJCXNodXRpdC5zZW5kKCdjYXQgPiAvdG1wL2EgPDw8ICJhIicpCgkJaWYgc2h1dGl0Lmluc2VydF90ZXh0KCcnJ2IKYwpkCmUnJycsJy90bXAvYScsJ15hc2Zhc2ZhJCcpICE9IE5vbmU6CgkJCXNodXRpdC5mYWlsKCd0ZXN0MTEuNC4yIGZhaWxlZCcpICMgcHJhZ21hOiBubyBjb3ZlcgoKCgkJIyBJbnNlcnQgdGV4dCBiZWZvcmUKCQlzaHV0aXQuc2VuZF9maWxlKCcvdG1wL2EnLCIiImEKZCIiIikKCQlzaHV0aXQuaW5zZXJ0X3RleHQoJycnYgpjJycnLCcvdG1wL2EnLCdeZCQnLGJlZm9yZT1UcnVlKQoJCWlmIHNodXRpdC5zZW5kX2FuZF9nZXRfb3V0cHV0KCdtZDVzdW0gL3RtcC9hJykgIT0gJ2FlZGViOWY3ZGRmNzZmNDU3NDdmZTVmN2Y2ZDIxMWRkICAvdG1wL2EnOgoJCQlzaHV0aXQuZmFpbCgndGVzdDExLjUuMiBmYWlsZWQnKSAjIHByYWdtYTogbm8gY292ZXIKCgkJIyBzaW1wbGUgaW5zZXJ0IHRvIGVuZAoJCXNodXRpdC5zZW5kKCdjYXQgPiAvdG1wL2EgPDw8ICJhIicpCgkJc2h1dGl0Lmluc2VydF90ZXh0KCcnJ2IKYwpkJycnLCcvdG1wL2EnKQoJCWlmIHNodXRpdC5zZW5kX2FuZF9nZXRfb3V0cHV0KCdtZDVzdW0gL3RtcC9hJykgIT0gJzQ3ZWNlMmU0OWU1YzAzMzM2NzdmYzM0ZTA0NGQ4MjU3ICAvdG1wL2EnOgoJCQlzaHV0aXQuZmFpbCgndGVzdDExLjYuMiBmYWlsZWQnKSAjIHByYWdtYTogbm8gY292ZXIKCgkJIyBzaW1wbGUgcmVwbGFjZQoJCXNodXRpdC5zZW5kKCdjYXQgPiAvdG1wLzExLjcgPDw8ICJhIicpCgkJc2h1dGl0LnJlcGxhY2VfdGV4dCgnJydiCmMKZCcnJywnL3RtcC8xMS43JywnXmEkJykKCQlpZiBzaHV0aXQuc2VuZF9hbmRfZ2V0X291dHB1dCgnbWQ1c3VtIC90bXAvYScpICE9ICc0N2VjZTJlNDllNWMwMzMzNjc3ZmMzNGUwNDRkODI1NyAgL3RtcC9hJzoKCQkJc2h1dGl0LmZhaWwoJ3Rlc3QxMS43LjIgZmFpbGVkJykgIyBwcmFnbWE6IG5vIGNvdmVyCgoJCSMgc2ltcGxlIHJlcGxhY2Ugd2l0aCBub24tbWF0Y2hpbmcgcGF0dGVybgoJCXNodXRpdC5zZW5kKCdjYXQgPiAvdG1wLzExLjggPDw8ICJhIicpCgkJc2h1dGl0LnJlcGxhY2VfdGV4dCgnJydiCmMKZCcnJywnL3RtcC8xMS44Jywnd2lsbG5vdG1hdGNoJykKCQlpZiBzaHV0aXQuc2VuZF9hbmRfZ2V0X291dHB1dCgnbWQ1c3VtIC90bXAvMTEuOCcpICE9ICc0N2VjZTJlNDllNWMwMzMzNjc3ZmMzNGUwNDRkODI1NyAgL3RtcC8xMS44JzoKCQkJc2h1dGl0LmZhaWwoJ3Rlc3QxMS44LjIgZmFpbGVkJykgIyBwcmFnbWE6IG5vIGNvdmVyCgoKCQkjIGRvdWJsZSBzZW5kCgkJc2h1dGl0LnNlbmQoJycnY2F0ID4gL3RtcC8xMS45IDw8IEVORAphIGxpbmUKYW5vdGhlciBsaW5lCkVORCcnJykKCQlzaHV0aXQucmVwbGFjZV90ZXh0KCdhIG5ldyBsaW5lJywnL3RtcC8xMS45JywnbmV3JykKCQlzaHV0aXQucmVwbGFjZV90ZXh0KCdhIG5ldyBsaW5lJywnL3RtcC8xMS45JywnbmV3JykKCQlpZiBzaHV0aXQuc2VuZF9hbmRfZ2V0X291dHB1dCgnbWQ1c3VtIC90bXAvMTEuOScpICE9ICdhOWNhY2EzMTMxZGI0M2Y2ZWRiMjQxYzg5OGQxYmE2OSAgL3RtcC8xMS45JzoKCQkJc2h1dGl0LmZhaWwoJ3Rlc3QxMS45LjIgZmFpbGVkJykgIyBwcmFnbWE6IG5vIGNvdmVyCgoJCSMgcmVwbGFjZSAoYXBwZW5kKSwgcmVwbGFjZSwgaW5zZXJ0LCByZXBsYWNlLCBkZWxldGUKCQlzaHV0aXQuc2VuZCgnJydjYXQgPiAvdG1wLzExLjEwIDw8IEVORAphIGxpbmUKYW5vdGhlciBsaW5lCkVORCcnJykKCQlzaHV0aXQucmVwbGFjZV90ZXh0KCdhIG5ldyBsaW5lJywnL3RtcC8xMS4xMCcsJ25ldycpCgkJc2h1dGl0LnJlcGxhY2VfdGV4dCgnYSBuZXcgbGluZScsJy90bXAvMTEuMTAnLCduZXcnKQoJCXNodXRpdC5pbnNlcnRfdGV4dCgneWV0IGFub3RoZXIgbGluZScsJy90bXAvMTEuMTAnKQoJCXNodXRpdC5yZXBsYWNlX3RleHQoJ2EgbmV3IGxpbmUnLCcvdG1wLzExLjEwJywnbmV3JykKCQlzaHV0aXQuZGVsZXRlX3RleHQoJ3lldCBhbm90aGVyIGxpbmUnLCcvdG1wLzExLjEwJykKCQlpZiBzaHV0aXQuc2VuZF9hbmRfZ2V0X291dHB1dCgnbWQ1c3VtIC90bXAvMTEuMTAnKSAhPSAnYTljYWNhMzEzMWRiNDNmNmVkYjI0MWM4OThkMWJhNjkgIC90bXAvMTEuMTAnOgoJCQlzaHV0aXQuZmFpbCgndGVzdDExLjEwLjIgZmFpbGVkJykgIyBwcmFnbWE6IG5vIGNvdmVyCgoJCSMgZXZlcnl0aGluZyB3ZSBjYW4gdGhpbmsgb2YKCQlzaHV0aXQuc2VuZCgnJydjYXQgPiAvdG1wLzExLjExIDw8IEVORApmaXJzdCBsaW5lCnNlY29uZCBsaW5lCmZvdXJ0aCBsaW5lCkVORCcnJykKCQlzaHV0aXQuaW5zZXJ0X3RleHQoJ3RoaXJkIGxpbmUnLCcvdG1wLzExLjExJywnXnNlYycpCgkJc2h1dGl0Lmluc2VydF90ZXh0KCd0aGlyZCBsaW5lJywnL3RtcC8xMS4xMScsJ3NlY29uZCBsaW5lJykKCQlzaHV0aXQuaW5zZXJ0X3RleHQoJ2ZpZnRoIGxpbmUnLCcvdG1wLzExLjExJywnZm91cnRoIGxpbmUnKQoJCWlmIHNodXRpdC5zZW5kX2FuZF9nZXRfb3V0cHV0KCdtZDVzdW0gL3RtcC8xMS4xMScpICE9ICczNTM4ZDA0YjExMjI1ZWUzNDI2Nzc2Nzg2MWM3ZTYwYyAgL3RtcC8xMS4xMSc6CgkJCXNodXRpdC5mYWlsKCd0ZXN0MTEuMTEuMi4xIGZhaWxlZCcpICMgcHJhZ21hOiBubyBjb3ZlcgoJCXNodXRpdC5yZXBsYWNlX3RleHQoJ2ZpZnRoIGxpbmUnLCcvdG1wLzExLjExJywnXmZpZicpCgkJaWYgc2h1dGl0LnNlbmRfYW5kX2dldF9vdXRwdXQoJ21kNXN1bSAvdG1wLzExLjExJykgIT0gJzM1MzhkMDRiMTEyMjVlZTM0MjY3NzY3ODYxYzdlNjBjICAvdG1wLzExLjExJzoKCQkJc2h1dGl0LmZhaWwoJ3Rlc3QxMS4xMS4yLjIgZmFpbGVkJykgIyBwcmFnbWE6IG5vIGNvdmVyCgkJc2h1dGl0LnJlcGxhY2VfdGV4dCgndGhpcmQgbGluZScsJy90bXAvMTEuMTEnLCdedGhpJykKCQlpZiBzaHV0aXQuc2VuZF9hbmRfZ2V0X291dHB1dCgnbWQ1c3VtIC90bXAvMTEuMTEnKSAhPSAnMzUzOGQwNGIxMTIyNWVlMzQyNjc3Njc4NjFjN2U2MGMgIC90bXAvMTEuMTEnOgoJCQlzaHV0aXQuZmFpbCgndGVzdDExLjExLjIuMyBmYWlsZWQnKSAjIHByYWdtYTogbm8gY292ZXIKCgoJCXNodXRpdC5zZW5kKCcnJ2NhdCA+IC90bXAvMTEuMTIgPDwgRU5ECiRudW1faW5zdGFuY2VzPTEKRU5EJycnKQoJCXNodXRpdC5yZXBsYWNlX3RleHQoJyRudW1faW5zdGFuY2VzPTMnLCcvdG1wLzExLjEyJywnbnVtX2luc3RhbmNlcycpCgkJaWYgc2h1dGl0LnNlbmRfYW5kX2dldF9vdXRwdXQoJ21kNXN1bSAvdG1wLzExLjEyJykgIT0gJ2RjODZkZWI1ZDMxMmYzM2JmM2NkYjJhMWM5NWMyYzgyICAvdG1wLzExLjEyJzoKCQkJc2h1dGl0LmZhaWwoJ3Rlc3QgMTEuMTIgZmFpbGVkJykgIyBwcmFnbWE6IG5vIGNvdmVyCgoKCQkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJCSMgTVVMVElMSU5FUwoJCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgkJZmlsZV90ZXh0ID0gJycnQSBmaWxlIHdpdGgKc29tZSB0ZXh0IGluLgpJdCdzIG5vdCB2ZXJ5IGludGVyZXN0aW5nLApeYnV0IGhhcyBzb21lIGludGVyZXN0aW5nIGxpbmVzJAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgphbmQgbGluZXMgd2l0aCBub3RoaW5nIGluIGl0LAogICAgCmp1c3Qgc3BhY2VzLCBhbmQganVzdCB0YWJzCiAgICAgICAgICAgICAgIAo8fGZpbV9lbmR8Pg=="]
["8f9e55dfe53108ebe43cf2f7d1ecc218b57336e1-4","8f9e55dfe53108ebe43cf2f7d1ecc218b57336e1",{"$cut":{"chars":18348,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIKQ3JlYXRlZCBvbiBGcmkgT2N0IDI1IDE5OjEwOjEzIDIwMTkKCkBhdXRob3I6IGNoaWFyYQoiIiIKCmltcG9ydCBvcwppbXBvcnQgbnVtcHkgYXMgbnAgIyBzY2llbnRpZmljIGNhbGN1bGF0aW9uCmltcG9ydCBwYW5kYXMgYXMgcGQgIyBkYXRhIGFuYWx5c2lzCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQgIyBkYXRhIHBsb3QKI2ltcG9ydCBtYXRwbG90bGliCiNmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSxkYXRlICMgZGF0ZSBvYmplY3RzCmltcG9ydCBzZWFib3JuIGFzIHNucyAjIGRhdGEgcGxvdCAKIyBpbXBvcnQgc3RhdHNtb2RlbHMuYXBpIGFzIHNtCiNpbXBvcnQgbmV0d29ya3ggYXMgbngKZnJvbSBza2xlYXJuLmVuc2VtYmxlIGltcG9ydCBSYW5kb21Gb3Jlc3RSZWdyZXNzb3IKCiMgU2V0IHdvcmtpbmcgcGF0aHMKbWFpblBhdGg9Ii9ob21lL2NoaWFyYS9rYWdnbGUvMUNfUFlwcm9qZWN0L3NjcmlwdHMvIgpvcy5jaGRpcihtYWluUGF0aCkKCiNmcm9tIG15X2Z1bmN0aW9uc18xYyBpbXBvcnQgbXlfcHJlcGFyZVRyYWluCmltcG9ydCBteV9mdW5jdGlvbnNfMWMgYXMgY3QKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmZpbGVQYXRoPSIvaG9tZS9jaGlhcmEva2FnZ2xlLzFDX1BZcHJvamVjdC9kYXRhL2NvbXBldGl0aXZlLWRhdGEtc2NpZW5jZS1wcmVkaWN0LWZ1dHVyZS1zYWxlcy8iKyJzYWxlc190cmFpbl92Mi5jc3YiCmRhdGE9cGQucmVhZF9jc3YoZmlsZVBhdGgsIGluZGV4X2NvbD1GYWxzZSkgCmRhdGEuaGVhZCg1KQpkYXRhLnNoYXBlCmRhdGEudGFpbCg1KQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTE9BRCBEQVRBIFRSQUlOCmZpbGVQYXRoPSJ3b3JraW5nX2RhdGEvIisiMUNfc21hbGxfdHJhaW5pbmcuY3N2IgpkYXRhPXBkLnJlYWRfY3N2KGZpbGVQYXRoLCBpbmRleF9jb2w9RmFsc2UpIApkYXRhPWRhdGEuZHJvcCgiVW5uYW1lZDogMCIsYXhpcz0xKQpkYXRhLmtleXMoKQpkYXRhLmhlYWQoKQpkYXRhVHJhaW49Y3QubXlfcHJlcGFyZVRyYWluKGRhdGEpICM5MjE0MDAgcm93cyB4IDkgY29sdW1ucwpkYXRhVHJhaW4ua2V5cygpCiNbImRhdGVfYmxvY2tfbnVtIiwiaXRlbV9pZCIsInNob3BfaWQiLCJpdGVtX2ZyZXEiLCJzaG9wX2ZyZXEiLAojICJjYXRlZ29yeV9mcmVxIiwgIm1vbnRoIiwiaXRlbV9wcmljZSIsIm1vbnRoX2NudCJdCmRhdGFUcmFpbi5yZXNldF9pbmRleCgpCmRhdGFUcmFpbi5pbG9jWzEwOjIwLDA6NV0KZGF0YVRyYWluLnBsb3Qoc3VicGxvdHM9VHJ1ZSkKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIENIRUNLUy9TVU1NQVJJRVMKIyMgaXMgdGhlIGl0ZW0gcHJpY2UgZml4ZWQgYW1vbmcgc2hvcHM/IG92ZXIgbW9udGhzPwojIHByaWNlIGlzIG5vdCBmaXhlZCBhbW9uZyBzaG9wcwojIHByaWNlIGlzIG5vdCBmaXhlZCBhbW9uZyBtb250aHMKCmRhdGFQcmljZVhTaG9wPWRhdGFUcmFpblt7ImRhdGVfYmxvY2tfbnVtIiwiaXRlbV9pZCIsInNob3BfaWQiLCJpdGVtX3ByaWNlIn1dCmRhdGFQcmljZVhTaG9wLmhlYWQoKQpkYXRhUHJpY2VYU2hvcC5zaGFwZQpkYXRhSXRlbVhTaG9wX3ByaWNlPXBkLnBpdm90X3RhYmxlKGRhdGFQcmljZVhTaG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PVsiZGF0ZV9ibG9ja19udW0iLCJpdGVtX2lkIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPSJpdGVtX3ByaWNlIixjb2x1bW5zPVsic2hvcF9pZCJdKQpkYXRhSXRlbVhTaG9wX3ByaWNlICNbMTM1NDUxIHJvd3MgeCA1NSBjb2x1bW5zXQpkYXRhSXRlbVhTaG9wX3ByaWNlLmtleXMoKQpkYXRhSXRlbVhTaG9wX3ByaWNlLmluZGV4CmRhdGFJdGVtWFNob3BfcHJpY2UubG9jWygzMywzMyldIAojIGFsbCBzaG9wcyBwcmljZWQgaXRlbSAzMyAxOTksIGJ1dCBzaG9wIDQ5IHByaWNlZCBpdCAxNTkKZGF0YUl0ZW1YU2hvcF9wcmljZS5sb2NbKDEyLDMzKV0KCgojIHdoaWNoIGl0ZW1zIGFyZSBjb25zaXN0ZW50L3ByZXNlbnQgYW1vbmcgc2hvcHM/IG92ZXIgbW9udGhzPwozMy0xMisxICMgMjIgbW9udGhzCm5hbl9pbmRpY2VzPWRhdGFJdGVtWFNob3BfcHJpY2UuaXNudWxsKCkKI2RhdGFJdGVtWFNob3BfY291bnQ9cGQucGl2b3RfdGFibGUobmFuX2luZGljZXMsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PSJpdGVtX2lkIixjb2x1bW5zPVsiIl0KZGF0YUl0ZW1YU2hvcF9jb3VudD1uYW5faW5kaWNlcy5ncm91cGJ5KCJpdGVtX2lkIikuc3VtKCkgI292ZXIgbW9udGhzCmRhdGFJdGVtWFNob3BfY291bnQubWF4KGF4aXM9MSkuaWR4bWF4KCkKICNpdGVtIDMwIG9jY3VycyAyMiB0aW1lcyBpbiBhdCBsZWFzdCAxIHNob3AKZGF0YUl0ZW1YU2hvcF9jb3VudC5tYXgoYXhpcz0xKS5tYXgoKQpkYXRhSXRlbVhTaG9wX2NvdW50Lm1heChheGlzPTEpLmlkeG1pbigpIAojI2l0ZW0gMCBvY2N1cnMgMSB0aW1lcyBpbiBhdCBsZWFzdCAxIHNob3AKZGF0YUl0ZW1YU2hvcF9jb3VudC5tYXgoYXhpcz0xKS5taW4oKQppdGVtUHJlc2VuY2U9ZGF0YUl0ZW1YU2hvcF9jb3VudC5zdW0oYXhpcz0xKS81NSAKI3N0YWJpbGl0eSBvZiBpdGVtIHByZXNlbmNlIG9uIGF2ZXJhZ2UKCml0ZW1QcmVzZW5jZS5wbG90KGtpbmQ9Imhpc3QiLGJpbnM9MjIsZmlnc2l6ZT0oMTAsNSksCiAgICAgICAgICAgICAgICAgIHRpdGxlPSJOdW1iZXIgb2YgaXRlbSBvY2N1cnJlbmNlcyBpbiAyMiBtb250aCBwZXJpb2QiKSAjc29ydF92YWx1ZXMoYXNjZW5kaW5nPUZhbHNlKS4KIyBtb3N0IGl0ZW1zIGFwcGVhciBvbmx5IG9uY2UKc25zLnNldChyYz17J2ZpZ3VyZS5maWdzaXplJzooMTAsMTIpfSkKZmlnLCBheCA9IHBsdC5z"}}]
["5ce70a2429467ac78cad07533541f15fe98bf627-1","5ce70a2429467ac78cad07533541f15fe98bf627","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzeXMKCmZyb20gc3BhY3kuZW4gaW1wb3J0IEVuZ2xpc2gKCiNJTlNUQU5USUFURSBTUEFDWSBQQVJTRVIKbmxwID0gRW5nbGlzaCgpCgpkZWYgdG9rZW5fcHJvY2VzcyhmaWxlX2luKToKCSNfZG9jID0gbmxwKHVuaWNvZGUoZmlsZV9pbiwgZW5jb2Rpbmc9InV0Zi04IikpCglfZG9jID0gbmxwKGZpbGVfaW4pCglyZXR1cm4gX2RvYwoKZGVmIHNlbnRfcHJvY2VzcyhmaWxlX2luKToKCSNfZG9jID0gbmxwKHVuaWNvZGUoZmlsZV9pbiwgZW5jb2Rpbmc9InV0Zi04IikpCglfZG9jID0gbmxwKGZpbGVfaW4pCglfc2VudHMgPSBfZG9jLnNlbnRzCglyZXR1cm4gX3NlbnRzCgpkZWYgcG9zX3Byb2Nlc3MoZmlsZV9pbik6CglfcG9zX3RhZ2dlZCA9IFtdCgkjX2RvYyA9IG5scCh1bmljb2RlKGZpbGVfaW4sIGVuY29kaW5nPSJ1dGYtOCIpKQoJX2RvYyA9IG5scChmaWxlX2luKQojCV9kb2MgPSBfZG9jLmRlY29kZSgidXRmLTgiKQojCV9kb2MgPSBfZG9jLmVuY29kZSgiYXNjaWkiLCAiaWdub3JlIikKCWZvciB0b2tlbiBpbiBfZG9jOgoJCXRva2VuX3BvcyA9ICd7fS97fScuZm9ybWF0KHRva2VuLm9ydGhfLmVuY29kZSgiYXNjaWkiLCAiaWdub3JlIiksIHRva2VuLnBvc18pCgkJX3Bvc190YWdnZWQuYXBwZW5kKHRva2VuX3BvcykKCXJldHVybiBfcG9zX3RhZ2dlZAoKZGVmIGxlbW1hX3Byb2Nlc3MoZmlsZV9pbik6CglfbGVtbWFzID0gW10KCSNfZG9jID0gbmxwKHVuaWNvZGUoZmlsZV9pbiwgZW5jb2Rpbmc9InV0Zi04IikpCglfZG9jID0gbmxwKGZpbGVfaW4pCglmb3IgdG9rZW4gaW4gX2RvYzoKCQl0b2tlbl9sZW1tYSA9ICd7fS97fS97fScuZm9ybWF0KHRva2VuLm9ydGhfLmVuY29kZSgiYXNjaWkiLCAiaWdub3JlIiksIHRva2VuLmxlbW1hXy5lbmNvZGUoImFzY2lpIiwgImlnbm9yZSIpLCB0b2tlbi5wb3NfKQoJCV9sZW1tYXMuYXBwZW5kKHRva2VuX2xlbW1hKQoJcmV0dXJuIF9sZW1tYXMKCmRlZiBuZXJfcHJvY2VzcyhmaWxlX2luKToKCV9uZXJfdGFnZ2VkID0gW10KCV9kb2MgPSBubHAoZmlsZV9pbikKCSNfZG9jID0gbmxwKHVuaWNvZGUoZmlsZV9pbiwgZW5jb2Rpbmc9InV0Zi04IikpCglmb3IgdG9rZW4gaW4gX2RvYzoKCQlpZiB0b2tlbi5lbnRfdHlwZV8gIT0gIiI6CgkJCXRva2VuX25lciA9ICd7fS97fS97fS97fScuZm9ybWF0KHRva2VuLm9ydGhfLmVuY29kZSgnYXNjaWknLCAnaWdub3JlJyksIHRva2VuLmxlbW1hXy5lbmNvZGUoImFzY2lpIiwgImlnbm9yZSIpLCB0b2tlbi5wb3NfLCAnXycpCgkJZWxzZToKCQkJdG9rZW5fbmVyID0gJ3t9L3t9L3t9L3t9Jy5mb3JtYXQodG9rZW4ub3J0aF8uZW5jb2RlKCdhc2NpaScsICdpZ25vcmUnKSwgdG9rZW4ubGVtbWFfLmVuY29kZSgiYXNjaWkiLCAiaWdub3JlIiksIHRva2VuLnBvc18sIHRva2VuLmVudF90eXBlXykKCQlfbmVyX3RhZ2dlZC5hcHBlbmQodG9rZW5fbmVyKQoJcmV0dXJuIF9uZXJfdGFnZ2VkCgpkZWYgbWFpbigpOgoJZG9jID0gW10KCXNlbnRzID0gW10KCXBvc190YWdnZWQgPSBbXQoJbGVtbWFzID0gW10KCW5lcl90YWdnZWQgPSBbXQoKCWZpbGUgPSAnJwoJI1JlYWQgZmlsZSB3aXRob3V0IGxpbmUgYnJlYWtzCgl3aXRoIG9wZW4oc3lzLmFyZ3ZbMV0sICdyJykgYXMgX2ZpbGU6CgkJZmlsZSA9IF9maWxlLnJlYWQoKS5yZXBsYWNlKCdcbicsICcgJykKCQoJZmlsZSA9IHVuaWNvZGUoZmlsZSwgZW5jb2Rpbmc9InV0Zi04IikKCglpZiBmaWxlID09ICcnOgoJCXByaW50ICdGaWxlIG5vdCByZWFkIHByb3Blcmx5JwoJCXN5cy5leGl0KCkKCglpZiBzeXMuYXJndlstMV0gPT0gJ3Rva2VuaXplJzoKCQlkb2MgPSB0b2tlbl9wcm9jZXNzKGZpbGUpCgkJZm9yIHRva2VuIGluIGRvYzoKCQkJcHJpbnQgdG9rZW4KCgllbGlmIHN5cy5hcmd2Wy0xXSA9PSAnc2VudF9zcGxpdCc6CgkJc2VudHMgPSBzZW50X3Byb2Nlc3MoZmlsZSkKCQlmb3Igc2VudCBpbiBzZW50czoKCQkJcHJpbnQgc2VudAoKCWVsaWYgc3lzLmFyZ3ZbLTFdID09ICdwb3NfdGFnJzoKCQlwb3NfdGFnZ2VkID0gcG9zX3Byb2Nlc3MoZmlsZSkKCQlmb3IgcG9zIGluIHBvc190YWdnZWQ6CgkJCXByaW50IHBvcyAKCgllbGlmIHN5cy5hcmd2Wy0xXSA9PSAnbGVtbWF0aXplJzoKCQlsZW1tYXMgPSBsZW1tYV9wcm9jZXNzKGZpbGUpCgkJZm9yIGxlbW1hIGluIGxlbW1hczoKCQkJcHJpbnQgbGVtbWEKCgllbGlmIHN5cy5hcmd2Wy0xXSA9PSAnbmVyX3RhZyc6CgkJbmVyX3RhZ2dlZCA9IG5lcl9wcm9jZXNzKGZpbGUpCgkJZm9yIG5lciBpbiBuZXJfdGFnZ2VkOgoJCQlwcmludCBuZXIKCiNCRUdJTiBQUkVQUk9DRVNTSU5HIEVYRUNVVElPTgptYWluKCkKCiNUTyBLRUVQIExJTkUgQlJFQUtTCiN3aXRoIG9wZW4oJy9Vc2Vycy9zdGMxNTYzL3Byb2dyYW1taW5nL3Jlc2VhcmNoL3Rlc3QtY2FzZXMvX3Jhdy9sZW1tYUNhc2UtdjYudHh0JywgJ3InKSBhcyBmOgojCXN0ckluPWYucmVhZCgpOwojCWZvciBsaW5lIGluIGY6CiMJCXRva2VuU2VudHMgPSBubHAodW5pY29kZShsaW5lLGVuY29kaW5nPSJ1dGYtOCIpKQojCQlmb3Igc3BhbiBpbiB0b2tlblNlbnRzLnNlbnRzOgojCQkJc2VudCA9ICcnLmpvaW4odG9rZW5TZW50c1tpXS5zdHJpbmcgZm9yIGkgaW4gcmFuZ2Uoc3Bhbi5zdGFydCwgc3Bhbi5lbmQpKS5zdHJpcCgpCiMJCQlzZW50cy5hcHBlbmQoc2VudCkKCiNzcGFjeSBwYXJzZXIgY3JlYXRlcyB0b2tlbnMgb2JqZWN0cyB3aXRoIGNhbGxhYmxlIG1ldGhvZHMgdGhhdCByZXR1cm4gbmxwIGNvbXBvbmVudCByZXN1bHRzCiN0b2tlbnMgPSBubHAodW5pY29kZShzdHJJbixlbmNvZGluZz0idXRmLTgiKSkKCiNTZW50cyBwcm9wZXJ0eSByZXR1cm5zIHNwYW5zCiNTcGFucyBoYXZlIGluZGljZXMgaW50byBvcmlnaW5hbCBzdHJpbmcKI3doZXJlIGVhY2ggaW5kZXggdmFsdWUgcmV0dXJucyBhIHRva2VuCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KI1NFTlRFTkNFIFNQTElUVElORwojZm9yIHNwYW4gaW4gdG9rZW5zLnNlbnRzOgojI2dvIGZyb20gdGhlIHN0YXJ0IHRvIHRoZSBlbmQgb2YgdGhlIHNwYW4sIHJldHVybmluZyBlYWNoIHRva2VuIGluIHRoZSBzZW50ZW5jZQojI2NvbWJpbmUgZWFjaCB0b2tlbiB1c2luZyBqb2luKCkKPHxmaW1fZW5kfD4="]
["8f1adfec269fe898b1b8c5de95b45e212c9ca2ee-2","8f1adfec269fe898b1b8c5de95b45e212c9ca2ee","PHxmaW1fcHJlZml4fD4KZnJvbSBzdGlibml0ZSBpbXBvcnQgY29uc3RhbnRzLCBjb3JlX3R5cGVzCmltcG9ydCBpbXBvcnRsaWIudXRpbCBhcyBtb2R1bGVfbG9hZGVyCmltcG9ydCBpbnNwZWN0CmltcG9ydCBzeXMKaW1wb3J0IG9zCgoKY2xhc3MgRmlsZVR5cGU6CiAgICAiIiJUaGlzIGlzIGEgY2xhc3MgdGhhdCByZXByZXNlbnRzIGEgcHl0aG9uIGZpbGUgb3IgYSBsZWFmIGluIGEgdHJlZSBhbmQgY29udGFpbnMgY2xhc3NlcyBhbmQgZnVuY3Rpb25zIG9mIHRoZSBzYW1lCiAgICBweXRob24gZmlsZS4KCiAgICA6cGFyYW0gbmFtZTogTmFtZSBvZiB0aGUgZmlsZQogICAgOnR5cGUgbmFtZTogc3RyaW5nCiAgICA6cGFyYW0gY2xhc3NlczogQ2xhc3NlcyBpbiB0aGUgZmlsZQogICAgOnR5cGUgY2xhc3NlczogbGlzdCBvZiBzdGlibml0ZS5jb3JlX3R5cGVzLkNsYXNzVHlwZQogICAgOnBhcmFtIGZ1bmN0aW9uczogRnVuY3Rpb25zIGluIHRoZSBmaWxlCiAgICA6dHlwZSBmdW5jdGlvbnM6IGxpc3Qgb2Ygc3RpYm5pdGUuY29yZV90eXBlcy5GdW5jdGlvblR5cGUKICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGNsYXNzZXMsIGZ1bmN0aW9ucyk6CiAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgIHNlbGYuY2xhc3NlcyA9IGNsYXNzZXMKICAgICAgICBzZWxmLmZ1bmN0aW9ucyA9IGZ1bmN0aW9ucwogICAgICAgIHNlbGYuZm9sZGVycyA9IE5vbmUKCgpjbGFzcyBGb2xkZXJUeXBlOgogICAgIiIiVGhpcyBpcyBhIGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIGZvbGRlciBvciBhIG5vZGUgaW4gYSB0cmVlIGFuZCBjb250YWlucyBvdGhlciBmaWxlcyBvciBmb2xkZXIgaW4gaXQuCgogICAgOnBhcmFtIG5hbWU6IE5hbWUgb2YgdGhlIGZpbGUKICAgIDp0eXBlIG5hbWU6IHN0cmluZwogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CiAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgIHNlbGYuZm9sZGVycyA9IHt9CiAgICAgICAgc2VsZi5maWxlcyA9IHt9CgogICAgZGVmIGdldF9lbGVtZW50KHNlbGYsIG5hbWUpOgogICAgICAgICIiIlJldHVybnMgdGhlIGZpbGUvZm9sZGVyIHdpdGggdGhlIGdpdmVuIG5hbWUgaWYgdGhpcyBmb2xkZXIgY29udGFpbnMgaXQuCgogICAgICAgIDpwYXJhbSBuYW1lOiBOYW1lIG9mIHRoZSBmaWxlL2ZvbGRlcgogICAgICAgIDp0eXBlIG5hbWU6IHN0cmluZwogICAgICAgIDpyZXR1cm46IFRoZSBmaWxlL2ZvbGRlciB3aXRoIHRoZSBnaXZlbiBuYW1lCiAgICAgICAgOnJ0eXBlOiBzdGlibml0ZS5maWxlX29wZXJhdGlvbnMuRmlsZVR5cGUgb3Igc3RpYm5pdGUuZmlsZV9vcGVyYXRpb25zLkZvbGRlclR5cGUgb3IgTm9uZQogICAgICAgICIiIgogICAgICAgIGlmIG5hbWUgaW4gc2VsZi5mb2xkZXJzOgogICAgICAgICAgICByZXR1cm4gc2VsZi5mb2xkZXJzW25hbWVdCiAgICAgICAgZWxpZiBuYW1lIGluIHNlbGYuZmlsZXM6CiAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbGVzW25hbWVdCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIE5vbmUKCiAgICBkZWYgYWRkX2ZvbGRlcihzZWxmLCBmb2xkZXIpOgogICAgICAgICIiIkFwcGVuZHMgdGhlIGdpdmVuIGZvbGRlciB0byBpdHMgZm9sZGVyIGxpc3QuCgogICAgICAgIDpwYXJhbSBmb2xkZXI6IEZvbGRlciB0aGF0IGlzIGdvaW5nIHRvIGJlIGFkZGVkCiAgICAgICAgOnR5cGUgZm9sZGVyOiBzdGlibml0ZS5maWxlX29wZXJhdGlvbnMuRm9sZGVyVHlwZQogICAgICAgICIiIgogICAgICAgIHNlbGYuZm9sZGVyc1tmb2xkZXIubmFtZV0gPSBmb2xkZXIKCiAgICBkZWYgYWRkX2ZpbGUoc2VsZiwgZmlsZSk6CiAgICAgICAgIiIiQXBwZW5kcyB0aGUgZ2l2ZW4gZmlsZSB0byBpdHMgZmlsZSBsaXN0LgoKICAgICAgICA6cGFyYW0gZmlsZTogRmlsZSB0aGF0IGlzIGdvaW5nIHRvIGJlIGFkZGVkCiAgICAgICAgOnR5cGUgZmlsZTogc3RpYm5pdGUuZmlsZV9vcGVyYXRpb25zLkZpbGVUeXBlCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5maWxlc1tmaWxlLm5hbWVdID0gZmlsZQoKCmRlZiBpbXBvcnRfbW9kdWxlKG1vZHVsZV9uYW1lLCBtb2R1bGVfcGF0aCk6CiAgICAiIiJJbXBvcnQgdGhlIGdpdmVuIG1vZHVsZSBhbmQgcmV0dXJucyBhbiBvYmplY3Qgb2YgaXQuCgogICAgOnBhcmFtIG1vZHVsZV9uYW1lOiBOYW1lIG9mIHRoZSBtb2R1bGUgdGhhdCBpcyBnb2luZyB0byBiZSBpbXBvcnRlZAogICAgOnR5cGUgbW9kdWxlX25hbWU6IHN0cmluZwogICAgOnBhcmFtIG1vZHVsZV9wYXRoOiBQYXRoIG9mIHRoZSBtb2R1bGUgdGhhdCBpcyBnb2luZyB0byBiZSBpbXBvcnRlZAogICAgOnR5cGUgbW9kdWxlX3BhdGg6IHN0cmluZwogICAgOnJldHVybjogQSBsaXZlIG9iamVjdCBvZiB0aGUgaW1wb3J0ZWQgbW9kdWxlCiAgICA6cnR5cGU6IG9iamVjdAogICAgIiIiCiAgICBzcGVjID0gbW9kdWxlX2xvYWRlci5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihtb2R1bGVfbmFtZSwgbW9kdWxlX3BhdGgpCiAgICBtb2R1bGUgPSBtb2R1bGVfbG9hZGVyLm1vZHVsZV9mcm9tX3NwZWMoc3BlYykKICAgIHN5cy5tb2R1bGVzW21vZHVsZV9uYW1lXSA9IG1vZHVsZQogICAgc3BlYy5sb2FkZXIuZXhlY19tb2R1bGUobW9kdWxlKQogICAgcmV0dXJuIG1vZHVsZQoKCmRlZiBpc19pZ25vcmVkKG5hbWUsIGlnbm9yZWRfZmlsZV9jaGVja2VyKToKICAgICIiIkNoZWNrcyBpZiB0aGUgZ2l2ZW4gcGF0aCBpcyBpZ25vcmVkIG9yIG5vdC4KCiAgICA6cGFyYW0gbmFtZTogZmlsZSBvciBmb2xkZXIgbmFtZQogICAgOnR5cGUgbmFtZTogc3RyaW5nCiAgICA6cGFyYW0gaWdub3JlZF9maWxlX2NoZWNrZXI6IGNoZWNrZXIgb2JqZWN0IGZvciBjaGVja2luZyBpZ25vcmVkIHBhdGhzCiAgICA6dHlwZSBpZ25vcmVkX2ZpbGVfY2hlY2tlcjogaWdpdHRpZ2l0dC5JZ25vcmVQYXJzZXIKICAgIDpyZXR1cm46IGhhcyBhIGlnbm9yZWQgcHJlZml4LCBuYW1lIG9yIG5vdAogICAgOnJ0eXBlOiBib29sCiAgICAiIiIKICAgICMgaWYgaWdub3JlZF9maWxlX2NoZWNrZXIubWF0Y2gobmFtZSk6CiAgICAjICAgICBwcmludChmIntuYW1lfSBpcyBpZ25vcmVkLiIpCiAgICByZXR1cm4gaWdub3JlZF9maWxlX2NoZWNrZXIubWF0Y2gobmFtZSkKCgpjbGFzcyBGaWxlT3BlcmF0aW9uczoKICAgICIiIk1haW4gY2xhc3MgZm9yIEZpbGUgT3BlcmF0aW9ucwoKICAgIDpwYXJhbSBwYWNrYWdlX3BhdGg6IHBhdGggb2YgdGhlIHNvdXJjZSBwYWNrYWdlCiAgICA6dHlwZSBwYWNrYWdlX3BhdGg6IHN0cmluZwogICAgOnBhcmFtIGRvY3VtZW50YXRpb25fcGF0aDogcGF0aCBvZiB0aGUgZG9jdW1lbnRhdGlvbiB3aWxsIGJlIGNyZWF0ZQogICAgOnR5cGUgZG9jdW1lbnRhdGlvbl9wYXRoOiBzdHJpbmcKICAgIDpwYXJhbSBkb2N1bWVudGF0aW9uX25hbWU6IG5hbWUgb2YgdGhlIGRvY3VtZW50YXRpb24gd2lsbCBiZSBjcmVhdGUKICAgIDp0eXBlIGRvY3VtZW50YXRpb25fbmFtZTogc3RyaW5nCiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYWNrYWdlX3BhdGgsIGRvY3VtZW50YXRpb25fcGF0aCwgZG9jdW1lbnRhdGlvbl9uYW1lKToKICAgICAgICBzZWxmLnBhY2thZ2VfcGF0aCA9IHBhY2thZ2VfcGF0aAogICAgICAgIHNlbGYuZG9jdW1lbnRhdGlvbl9wYXRoID0gZG9jdW1lbnRhdGlvbl9wYXRoCiAgICAgICAgc2VsZi5kb2N1bWVudGF0aW9uX25hbWUgPSBkb2N1bWVudGF0aW9uX25hbWUKCiAgICBkZWYgcmVhZF9maWxlX3N0cnVjdHVyZShzZWxmKToKICAgICAgICAiIiJSZWFkcyB0aGUgd2hvbGUgcGFja2FnZSBhbmQgaXRzIHN1YnBhY2thZ2VzIGFuZCByZXR1cm5zIGEgZmlsZSBzdHJ1Y3R1cmUuCgogICAgICAgIDpyZXR1cm46IGEgZmlsZSBzdHJ1Y3R1cmUgb2YgdGhlIHNvdXJjZSBwYWNrYWdlCiAgICAgICAgOnJ0eXBlOiBzdGlibml0ZS5maWxlX29wZXJhdGlvbnMuRm9sZGVyVHlwZQogICAgICAgICIiIgogICAgICAgICMgUmVhZHMgc3RpYm5pdGUtaWdub3JlIGZpbGUgYW5kIGNyZWF0ZXMgaWdub3JlZF9maWxlX2NoZWNrZXIgb2JqZWN0IHdpdGggZ2l2ZW4gcGF0dGVybnMKICAgICAgICBpbXBvcnQgaWdpdHRpZ2l0dAogICAgICAgIGlnbm9yZWRfZmlsZV9jaGVja2VyID0gaWdpdHRpZ2l0dC5JZ25vcmVQYXJzZXIoKQogICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLnBhY2thZ2VfcGF0aCwgIi5zdGlibml0ZS1pZ25vcmUiKSk6CiAgICAgICAgICAgIGlnbm9yZWRfZmlsZV9jaGVja2VyLnBhcnNlX3J1bGVfZmlsZXMoYmFzZV9kaXI9c2VsZi5wYWNrYWdlX3BhdGgsIGZpbGVuYW1lPSIuc3RpYm5pdGUtaWdub3JlIikKICAgICAgICAjIFRoaXMgcnVsZSBoZWxwcyB0byBpZ25vcmUgaGlkZGVuIGZpbGVzCiAgICAgICAgaWdub3JlZF9maWxlX2NoZWNrZXIuYWRkX3J1bGUoYmFzZV9wYXRoPXNlbGYucGFja2FnZV9wYXRoLCBwYXR0ZXJuPSIuKiIpCgogICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCAgc2VsZi5wYWNrYWdlX3BhdGgpCgogICAgICAgIHJldHVybiBidWlsZF9maWxlX3RyZWUoc2VsZi5wYWNrYWdlX3BhdGgsIHNlbGYuZG9jdW1lbnRhdGlvbl9wYXRoLCBpZ25vcmVkX2ZpbGVfY2hlY2tlcikKCiAgICBkZWYgd3JpdGVfZmlsZV9zdHJ1Y3R1cmUoc2VsZiwgZmlsZV9zdHJ1Y3R1cmUpOgogICAgICAgICIiIldyaXRlcyB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgd2hvbGUgZmlsZSBzdHJ1Y3R1cmUgYW5kIHNvbWUgb3RoZXIgbmVjZXNzYXJ5IGZpbGVzIHRvIHJ1biBta2RvY3Mgc3VjaCBhcwogICAgICAgIGluZGV4IHBhZ2UgYW5kIHlhbWwgZmlsZS4KCiAgICAgICAgOnBhcmFtIGZpbGVfc3RydWN0dXJlOiB0aGUgcm9vdCBvZiB0aGUgZmlsZSBzdHJ1Y3R1cmUgdGhhdCBpcyBnb2luZyB0byBiZSB3cml0dGVuCiAgICAgICAgOnR5cGUgZmlsZV9zdHJ1Y3R1cmU6IHN0aWJuaXRlLmZpbGVfb3BlcmF0aW9ucy5Gb2xkZXJUeXBlCiAgICAgICAgIiIiCiAgICAgICAgIyBGaXJzdGx5LCBjcmVhdGVzIGRvY3VtZW50YXRpb24gcGF0aCBpZiBub3QgZXhpc3RzCiAgICAgICAgZG9jdW1lbnRhdGlvbl9wYXRoX3BhcmVudCA9IHNlbGYuZG9jdW1lbnRhdGlvbl9wYXRoCiAgICAgICAgc2VsZi5kb2N1bWVudGF0aW9uX3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5hYnNwYXRoKHNlbGYuZG9jdW1lbnRhdGlvbl9wYXRoKSwgImRvY3MiKQogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmRvY3VtZW50YXRpb25fcGF0aCk6CiAgICAgICAgICAgIG9zLm1rZGlyKHNlbGYuZG9jdW1lbnRhdGlvbl9wYXRoKQoKICAgICAgICBjdXJyZW50X3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kb2N1bWVudGF0aW9uX3BhdGgsIGZpbGVfc3RydWN0dXJlLm5hbWUpCiAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGN1cnJlbnRfcGF0aCk6CiAgICAgICAgICAgIG9zLm1rZGlyKGN1cnJlbnRfcGF0aCkKCiAgICAgICAgIyBGaWxlIHdyaXRpbmcgc2VjdGlvbgogICAgICAgIHRvYyA9IHdyaXRlX2ZpbGVfdHJlZShmaWxlX3N0cnVjdHVyZSwgY3VycmVudF9wYXRoLCBzZWxmLmRvY3VtZW50YXRpb25fcGF0aCwgIiIsIDEpCgogICAgICAgICMgQ3JlYXRlcyB5bWwgZmlsZSB3aGljaCBpcyBjb25maWcgZmlsZSBmb3IgbWtkb2NzCiAgICAgICAgeW1sX3BhdGggPSBvcy5wYXRoLmpvaW4oZG9jdW1lbnRhdGlvbl9wYXRoX3BhcmVudCwgIm1rZG9jcy55bWwiKQogICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZSh5bWxfcGF0aCk6CiAgICAgICAgICAgIGNyZWF0ZV95YW1sX2ZpbGUoc2VsZi5kb2N1bWVudGF0aW9uX25hbWUsIHltbF9wYXRoLCB0b2MpCgogICAgICAgICMgQ3JlYXRlcyBpbmRleCBmaWxlIHdoaWNoIGlzIHRoZSBtYWluIHBhZ2Ugb2YgdGhlIGRvY3VtZW50YXRpb24KICAgICAgICBpbmRleF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuZG9jdW1lbnRhdGlvbl9wYXRoLCAnaW5kZXgubWQnKQogICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShpbmRleF9wYXRoKToKICAgICAgICAgICAgY3JlYXRlX2luZGV4X2ZpbGUoc2VsZi5kb2N1bWVudGF0aW9uX25hbWUsIGluZGV4X3BhdGgsIHNlbGYucGFja2FnZV9wYXRoKQoKCmRlZiBidWlsZF9maWxlX3RyZWUocGFja2FnZV9wYXRoLCBkb2N1bWVudGF0aW9uX3BhdGgsIGlnbm9yZWRfZmlsZV9jaGVja2VyKToKICAgICIiIlJlY3Vyc2l2ZWx5IHJlYWRzIGFuZCBidWlsZHMgdGhlIGZpbGUgc3RydWN0dXJlLgoKICAgIDpwYXJhbSBwYWNrYWdlX3BhdGg6IHRoZSBzb3VyY2UgcGF0aCB0aGF0IGlzIGdvaW5nIHRvIGJlIHJlYWQKICAgIDp0eXBlIHBhY2thZ2VfcGF0aDogc3RyaW5nCiAgICA6cGFyYW0gZG9jdW1lbnRhdGlvbl9wYXRoOiB0aGUgcGF0aCBvZiB0aGUgZm9sZGVyIHRoYXQgaXMgZ29pbmcgdG8gY29udGFpbiBvdXRwdXRzCiAgICA6dHlwZSBwYWNrYWdlX3BhdGg6IHN0cmluZwogICAgOnBhcmFtIGlnbm9yZWRfZmlsZV9jaGVja2VyOiBjaGVja2VyIG9iamVjdCBmb3IgY2hlY2tpbmcgaWdub3JlZCBwYXRocwogICAgOnR5cGUgaWdub3JlZF9maWxlX2NoZWNrZXI6IGlnaXR0aWdpdHQuSWdub3JlUGFyc2VyCiAgICA6cmV0dXJuOiB0aGUgcm9vdCBvZiBhIGZpbGUgdHJlZQogICAgOnJ0eXBlOiBzdGlibml0ZS5maWxlX29wZXJhdGlvbnMuRm9sZGVyVHlwZQogICAgIiIiCiAgICAjIFRyYXZlcnNlcyBnaXZlbiBwYWNrYWdlIHBhdGggcmVjdXJzaXZlbHkgYW5kIGNyZWF0ZXMgRm9sZGVyIGFuZCBGaWxlIFRyZWUgc3RydWN0dXJlIHdpdGggaXQKICAgIGZvciBwYXRoLCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBhY2thZ2VfcGF0aCk6CiAgICAgICAgY3VycmVudF9ub2RlID0gRm9sZGVyVHlwZShwYXRoLnNwbGl0KG9zLnNlcClbLTFdKQogICAgICAgIGZvciBkaXJlY3RvcnkgaW4gZGlyczoKICAgICAgICAgICAgIyBDaGVja3MgdGhlIGRpcmVjdG9yeSB3aGV0aGVyIGlnbm9yZWQgZGlyZWN0b3J5IG9yIG5vdCBpbiBzdGlibml0ZS1pZ25vcmUgZmlsZQogICAgICAgICAgICBpZiBub3QgaXNfaWdub3JlZChvcy5wYXRoLmpvaW4ocGF0aCwgZGlyZWN0b3J5LCAiIiksIGlnbm9yZWRfZmlsZV9jaGVja2VyKToKICAgICAgICAgICAgICAgIG5vZGVfY2FuZGlkYXRlID0gYnVpbGRfZmlsZV90cmVlKG9zLnBhdGguam9pbihwYXRoLCBkaXJlY3RvcnkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRhdGlvbl9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlZF9maWxlX2NoZWNrZXIpCiAgICAgICAgICAgICAgICBpZiBub2RlX2NhbmRpZGF0ZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICBjdXJyZW50X25vZGUuYWRkX2ZvbGRlcihub2RlX2NhbmRpZGF0ZSkKCiAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CiAgICAgICAgICAgICMgQ2hlY2tzIHRoZSBmaWxlIHdoZXRoZXIgaWdub3JlZCBkaXJlY3Rvcnkgb3Igbm90IGluIHN0aWJuaXRlLWlnbm9yZSBmaWxlCiAgICAgICAgICAgIGlmIG5vdCBpc19pZ25vcmVkKG9zLnBhdGguam9pbihwYXRoLCBmaWxlKSwgaWdub3JlZF9maWxlX2NoZWNrZXIpIGFuZCBmaWxlLnNwbGl0KCcuJylbLTFdID09ICJweSI6CiAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfbW9kdWxlKGZpbGUuc3BsaXQoJy4nKVswXSwgb3MucGF0aC5qb2luKHBhdGgsIGZpbGUpKQoKICAgICAgICAgICAgICAgIGNsYXNzZXMgPSBbCiAgICAgICAgICAgICAgICAgICAgY29yZV90eXBlcy5DbGFzc1R5cGUob2JqKQogICAgICAgICAgICAgICAgICAgIGZvciBuYW1lLCBvYmogaW4gaW5zcGVjdC5nZXRtZW1iZXJzKG1vZHVsZSwgaW5zcGVjdC5pc2NsYXNzKQogICAgICAgICAgICAgICAgICAgIGlmIG9iai5fX21vZHVsZV9fID09IG1vZHVsZS5fX25hbWVfXwogICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgZnVuY3Rpb25zID0gWwogICAgICAgICAgICAgICAgICAgIGNvcmVfdHlwZXMuRnVuY3Rpb25UeXBlKG9iaikKICAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSwgb2JqIGluIGluc3BlY3QuZ2V0bWVtYmVycyhtb2R1bGUsIGluc3BlY3QuaXNmdW5jdGlvbikKICAgICAgICAgICAgICAgICAgICBpZiBvYmouX19tb2R1bGVfXyA9PSBtb2R1bGUuX19uYW1lX18KICAgICAgICAgICAgICAgIF0KCiAgICAgICAgICAgICAgICBjdXJyZW50X25vZGUuYWRkX2ZpbGUoRmlsZVR5cGUoZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnM9ZnVuY3Rpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXM9Y2xhc3NlcykpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgaWYgbGVuKGN1cnJlbnRfbm9kZS5mb2xkZXJzKSA9PSAwIGFuZCBsZW4oY3VycmVudF9ub2RlLmZpbGVzKSA9PSAwOgogICAgICAgICAgICByZXR1cm4gTm9uZQoKICAgICAgICByZXR1cm4gY3VycmVudF9ub2RlCjx8ZmltX2VuZHw+"]
["5cba8d7a7260afdd2d265ef4fd8f4611f136162f-3","5cba8d7a7260afdd2d265ef4fd8f4611f136162f","PHxmaW1fcHJlZml4fD4KZnJvbSBvcGVuYmlvbGluay5ncmFwaF9jcmVhdGlvbi5tZXRhZGF0YV9pbmZpbGUuaW5maWxlTWV0YWRhdGEgaW1wb3J0IEluZmlsZU1ldGFkYXRhCmZyb20gb3BlbmJpb2xpbmsuZ3JhcGhfY3JlYXRpb24udHlwZXMuaW5maWxlVHlwZSBpbXBvcnQgSW5maWxlVHlwZQoKCmNsYXNzIEluTWV0YU1hcE9udG9IcG9BbHRpZChJbmZpbGVNZXRhZGF0YSk6CgogICAgQ1NWX05BTUUgPSAiREJfT05UT19tYXBwaW5nX0hQT19hbHRfaWQuY3N2IgogICAgVVNFX0NPTFMgPSBbJ0lEJywgJ0FMVF9JRCddCiAgICBTT1VSQ0VfQ09MID0gMQo8fGZpbV9ob2xlfD4KCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhjc3ZfbmFtZT1Jbk1ldGFNYXBPbnRvSHBvQWx0aWQuQ1NWX05BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2xzPXNlbGYuVVNFX0NPTFMsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZpbGVUeXBlPUluTWV0YU1hcE9udG9IcG9BbHRpZC5JTkZJTEVfVFlQRSkKPHxmaW1fc3VmZml4fD4KICAgIFRBUkdFVF9DT0wgPSAwCiAgICBNQVBQSU5HX1NFUCA9ICc7JyAgIyAnOycgc2VwIGlzIGNyZWF0ZWQgd2hpbGUgcGFyc2luZwogICAgSU5GSUxFX1RZUEUgPSBJbmZpbGVUeXBlLklOX01BUF9PTlRPX0hQT19BTFRfSUQKCjx8ZmltX2VuZHw+"]
["c1ec3451ec70ce07b29a2d06114f08c61a37ab6c-4","c1ec3451ec70ce07b29a2d06114f08c61a37ab6c","PHxmaW1fcHJlZml4fD4KIyBpbnN0YWxsZWQKaW1wb3J0IHBzeWNvcGcyCmZyb20gcHN5Y29wZzIgaW1wb3J0IGV4dHJhcwoKCmNsYXNzIFBvc3RncmVzQ2xpZW50KG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdDogc3RyLCBkYl9uYW1lOiBzdHIgPSAiIiwgdXNlcjogc3RyID0gIiIsIHBhc3N3b3JkOiBzdHIgPSAiIiwgcG9ydDogaW50ID0gNTQzMik6CiAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gc2VsZi5jb25uZWN0KGhvc3QsIGRiX25hbWUsIHVzZXIsIHBhc3N3b3JkLCBwb3J0KQogICAgICAgIHNlbGYuY3Vyc29yID0gc2VsZi5jb25uZWN0aW9uLmN1cnNvcigKICAgICAgICAgICAgY3Vyc29yX2ZhY3Rvcnk9ZXh0cmFzLk5hbWVkVHVwbGVDdXJzb3IpCgogICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZgoKICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiKToKICAgICAgICBzZWxmLmNvbW1pdCgpCiAgICAgICAgc2VsZi5jbG9zZSgpCgogICAgZGVmIGNvbm5lY3Qoc2VsZiwgaG9zdDogc3RyLCBkYl9uYW1lOiBzdHIsIHVzZXI6IHN0ciwgcGFzc3dvcmQ6IHN0ciwgcG9ydDogaW50KToKICAgICAgICB0cnk6CiAgICAgICAgICAgIGlmIHVzZXIgYW5kIHBhc3N3b3JkOgogICAgICAgICAgICAgICAgcmV0dXJuIHBzeWNvcGcyLmNvbm5lY3QoCiAgICAgICAgICAgICAgICAgICAgZiJob3N0PXtob3N0fSBkYm5hbWU9e2RiX25hbWV9IHVzZXI9e3VzZXJ9IHBhc3N3b3JkPXtwYXNzd29yZH0gcG9ydD17cG9ydH0iCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICByZXR1cm4gcHN5Y29wZzIuY29ubmVjdChob3N0LCBzc2xtb2RlPSJyZXF1aXJlIikKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgIHJhaXNlIGUKCiAgICBkZWYgY29tbWl0KHNlbGYpOgogICAgICAgIHRyeToKICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uLmNvbW1pdCgpCjx8ZmltX2hvbGV8PgogICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgIHNlbGYuY3Vyc29yLmNsb3NlKCkKICAgICAgICBzZWxmLmNvbm5lY3Rpb24uY2xvc2UoKQoKICAgIGRlZiBxdWVyeShzZWxmLCBxdWVyeTogc3RyLCB2YWx1ZXM6IHR1cGxlID0gKCkpIC0+IE5vbmU6CiAgICAgICAgc2VsZi5jdXJzb3IuZXhlY3V0ZShxdWVyeSwgdmFsdWVzKQoKICAgIGRlZiBmaW5kX2FsbChzZWxmLCBxdWVyeTogc3RyLCB2YWx1ZXM6IHR1cGxlID0gKCkpIC0+IGxpc3Q6CiAgICAgICAgc2VsZi5jdXJzb3IuZXhlY3V0ZShxdWVyeSwgdmFsdWVzKQogICAgICAgIHJldHVybiBzZWxmLmN1cnNvci5mZXRjaGFsbCgpCgogICAgZGVmIGZpbmRfb25lKHNlbGYsIHF1ZXJ5OiBzdHIsIHZhbHVlczogdHVwbGUgPSAoKSkgLT4gb2JqZWN0OgogICAgICAgIHNlbGYuY3Vyc29yLmV4ZWN1dGUocXVlcnksIHZhbHVlcykKICAgICAgICByZXR1cm4gc2VsZi5jdXJzb3IuZmV0Y2hvbmUoKQoKICAgIGRlZiBmaW5kX21hbnkoc2VsZiwgcXVlcnk6IHN0ciwgdmFsdWVzOiB0dXBsZSgpLCBsaW1pdDogaW50ID0gMjUpIC0+IGxpc3Q6CiAgICAgICAgc2VsZi5jdXJzb3IuZXhlY3V0ZShxdWVyeSwgdmFsdWVzKQogICAgICAgIHJldHVybiBzZWxmLmN1cnNvci5mZXRjaG1hbnkobGltaXQpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICByYWlzZSBlCgo8fGZpbV9lbmR8Pg=="]
["56fdb5f2f44aee99e3b327aca085d3ff8d25be3c-4","56fdb5f2f44aee99e3b327aca085d3ff8d25be3c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCgpmcm9tIGJzNCBpbXBvcnQgQmVhdXRpZnVsU291cApmcm9tIGRqYW5nby5jb250cmliLmF1dGggaW1wb3J0IGdldF91c2VyX21vZGVsCgpTVVBQT1JURURfVEFHUyA9ICgiaDEiLCAiaDIiLCAiaDMiLCAiaDQiLCAiaDUiLCAiaDYiLCAiZGl2IiwgInAiKQpVU0VSTkFNRV9SRSA9IHJlLmNvbXBpbGUociJAWzAtOWEtel0rIiwgcmUuSUdOT1JFQ0FTRSkKTUVOVElPTlNfTElNSVQgPSAyNAoKCmRlZiBhZGRfbWVudGlvbnMocmVxdWVzdCwgcmVzdWx0KToKICAgIGlmICJAIiBub3QgaW4gcmVzdWx0WyJwYXJzZWRfdGV4dCJdOgogICAgICAgIHJldHVybgoKICAgIG1lbnRpb25zX2RpY3QgPSB7fQoKICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKHJlc3VsdFsicGFyc2VkX3RleHQiXSwgImh0bWw1bGliIikKCiAgICBlbGVtZW50cyA9IFtdCiAgICBmb3IgdGFnbmFtZSBpbiBTVVBQT1JURURfVEFHUzoKICAgICAgICBpZiB0YWduYW1lIGluIHJlc3VsdFsicGFyc2VkX3RleHQiXToKICAgICAgICAgICAgZWxlbWVudHMgKz0gc291cC5maW5kX2FsbCh0YWduYW1lKQogICAgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6CiAgICAgICAgYWRkX21lbnRpb25zX3RvX2VsZW1lbnQocmVxdWVzdCwgZWxlbWVudCwgbWVudGlvbnNfZGljdCkKCiAgICByZXN1bHRbInBhcnNlZF90ZXh0Il0gPSBzdHIoc291cC5ib2R5KVs2Oi03XS5zdHJpcCgpCiAgICByZXN1bHRbIm1lbnRpb25zIl0gPSBsaXN0KGZpbHRlcihib29sLCBtZW50aW9uc19kaWN0LnZhbHVlcygpKSkKCgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgIGFkZF9tZW50aW9uc190b19lbGVtZW50KHJlcXVlc3QsIGl0ZW0sIG1lbnRpb25zX2RpY3QpCiAgICAgICAgZWxpZiAiQCIgaW4gaXRlbS5zdHJpbmc6CiAgICAgICAgICAgIHBhcnNlX3N0cmluZyhyZXF1ZXN0LCBpdGVtLCBtZW50aW9uc19kaWN0KQoKCmRlZiBwYXJzZV9zdHJpbmcocmVxdWVzdCwgZWxlbWVudCwgbWVudGlvbnNfZGljdCk6CiAgICBVc2VyID0gZ2V0X3VzZXJfbW9kZWwoKQoKICAgIGRlZiByZXBsYWNlX21lbnRpb25zKG1hdGNob2JqKToKICAgICAgICBpZiBsZW4obWVudGlvbnNfZGljdCkgPj0gTUVOVElPTlNfTElNSVQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaG9iai5ncm91cCgwKQoKICAgICAgICB1c2VybmFtZSA9IG1hdGNob2JqLmdyb3VwKDApWzE6XS5zdHJpcCgpLmxvd2VyKCkKCiAgICAgICAgaWYgdXNlcm5hbWUgbm90IGluIG1lbnRpb25zX2RpY3Q6CiAgICAgICAgICAgIGlmIHVzZXJuYW1lID09IHJlcXVlc3QudXNlci5zbHVnOgogICAgICAgICAgICAgICAgbWVudGlvbnNfZGljdFt1c2VybmFtZV0gPSByZXF1ZXN0LnVzZXIKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICBtZW50aW9uc19kaWN0W3VzZXJuYW1lXSA9IFVzZXIub2JqZWN0cy5nZXQoc2x1Zz11c2VybmFtZSkKICAgICAgICAgICAgICAgIGV4Y2VwdCBVc2VyLkRvZXNOb3RFeGlzdDoKICAgICAgICAgICAgICAgICAgICBtZW50aW9uc19kaWN0W3VzZXJuYW1lXSA9IE5vbmUKCiAgICAgICAgaWYgbWVudGlvbnNfZGljdFt1c2VybmFtZV06CiAgICAgICAgICAgIHVzZXIgPSBtZW50aW9uc19kaWN0W3VzZXJuYW1lXQogICAgICAgICAgICByZXR1cm4gJzxhIGhyZWY9IiVzIj5AJXM8L2E+JyAlICh1c2VyLmdldF9hYnNvbHV0ZV91cmwoKSwgdXNlci51c2VybmFtZSkKCiAgICAgICAgIyB3ZSd2ZSBmYWlsZWQgdG8gcmVzb2x2ZSB1c2VyIGZvciB1c2VybmFtZQogICAgICAgIHJldHVybiBtYXRjaG9iai5ncm91cCgwKQoKICAgIHJlcGxhY2VkX3N0cmluZyA9IFVTRVJOQU1FX1JFLnN1YihyZXBsYWNlX21lbnRpb25zLCBlbGVtZW50LnN0cmluZykKICAgIGVsZW1lbnQucmVwbGFjZV93aXRoKEJlYXV0aWZ1bFNvdXAocmVwbGFjZWRfc3RyaW5nLCAiaHRtbC5wYXJzZXIiKSkKPHxmaW1fc3VmZml4fD4KZGVmIGFkZF9tZW50aW9uc190b19lbGVtZW50KHJlcXVlc3QsIGVsZW1lbnQsIG1lbnRpb25zX2RpY3QpOgogICAgZm9yIGl0ZW0gaW4gZWxlbWVudC5jb250ZW50czoKICAgICAgICBpZiBpdGVtLm5hbWU6CiAgICAgICAgICAgIGlmIGl0ZW0ubmFtZSAhPSAiYSI6Cjx8ZmltX2VuZHw+"]
["7100bd378c23f2648f5160e0dafc72dc4324cbf9-4","7100bd378c23f2648f5160e0dafc72dc4324cbf9","PHxmaW1fcHJlZml4fD4KZnJvbSAucHNtc19wcmVwcm9jZXNzb3IgaW1wb3J0IFBTTXNQcmVwcm9jZXNzb3IKZnJvbSAucHNtc19uZXR3b3JrX2dlbmVyYXRvciBpbXBvcnQgUFNNc05ldHdvcmtHZW5lcmF0b3IKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIC5wc21zX25ldHdvcmtfc3BsaXR0ZXIgaW1wb3J0IFBTTXNOZXR3b3JrU3BsaXR0ZXIKZnJvbSAucHJvY2Vzc2VkX3BzbXMgaW1wb3J0IFByb2Nlc3NlZFBTTXMKPHxmaW1fZW5kfD4="]
["56aa095c7715544f49cd16de1dd9734f00a76c1b-3","56aa095c7715544f49cd16de1dd9734f00a76c1b","PHxmaW1fcHJlZml4fD4KIyRJZCQKCmZyb20gYm9va3MubW9kZWwuUGFnZUNvbnRleHQgaW1wb3J0IFBhZ2VDb250ZXh0CgpjbGFzcyBDb250YWN0TGlzdDoKICAgICIiIlRoaXMgY2xhc3MgaXMgdXNlZCB0byBjcmVhdGUgYW4gb2JqZWN0IGZvciBjb250YWN0IGxpc3QuIiIiCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIiIiIEluaXRpYWxpemUgY29udGFjdHMgbGlzdCBhbmQgcGFnZSBjb250ZXh0LiIiIgogICAgICAgIHNlbGYuY29udGFjdHMgPSBbXQogICAgICAgIHNlbGYucGFnZV9jb250ZXh0ID0gUGFnZUNvbnRleHQoKQoKICAgIGRlZiBzZXRfY29udGFjdHMoc2VsZiwgY29udGFjdCk6CiAgICAgICAgIiIiSW5zZXJ0IGNvbnRhY3Qgb2JqZWN0IHRvIGNvbnRhY3RzIGxpc3QuCiAgICAgICAgCiAgICAgICAgQXJnczoKICAgICAgICAgICAgY29udGFjdChpbnN0YW5jZSk6IENvbnRhY3Qgb2JqZWN0LgogICAKICAgICAgICAiIiIKICAgICAgICBzZWxmLmNvbnRhY3RzLmFwcGVuZChjb250YWN0KQoKICAgIGRlZiBnZXRfY29udGFjdHMoc2VsZik6CiAgICAgICAgIiIiR2V0IGNvbnRhY3RzIGxpc3QuCiAgICAgICAgCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgbGlzdDogTGlzdCBvZiBjb250YWN0cyBvYmplY3QuCiAgICAgICAgCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuY29udGFjdHMKIAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgaW5zdGFuY2U6IFBhZ2VfY29udGV4dCBvYmplY3QuCiAgICAgICAgCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5wYWdlX2NvbnRleHQgPSBwYWdlX2NvbnRleHQKICAgICAKICAgIGRlZiBnZXRfcGFnZV9jb250ZXh0KHNlbGYpOgogICAgICAgICIiIkdldCBwYWdlIGNvbnRleHQuCiAgICAgICAgCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgaW5zdGFuY2U6IFBhZ2UgY29udGV4dCBvYmplY3QuCiAgICAgICAKICAgICAgICAiIiIKICAgICAgICByZXR1cm4gc2VsZi5wYWdlX2NvbnRleHQKCgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIHNldF9wYWdlX2NvbnRleHQoc2VsZiwgcGFnZV9jb250ZXh0KToKICAgICAgICAiIiJTZXQgcGFnZSBjb250ZXh0LgogICAgICAgIAogICAgICAgIEFyZ3M6Cjx8ZmltX2VuZHw+"]
["d8bac95f576cd0ec7edbb070baa338ad89a68dd1-3","d8bac95f576cd0ec7edbb070baa338ad89a68dd1","PHxmaW1fcHJlZml4fD4KZnJvbSBmYXN0YXBpIGltcG9ydCBGYXN0QVBJCmZyb20gYmFja2VuZC5kZXRlY3QgaW1wb3J0IHJvdXRlcgpmcm9tIGJhY2tlbmQud2Vic29ja2V0IGltcG9ydCBzb2NrZXRfZ3JvdXAKPHxmaW1faG9sZXw+CgojIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiMgICAgIHV2aWNvcm4ucnVuKGFwcD0ibWFpbjphcHAiLCBob3N0PSIxMjcuMC4wLjEiLCBwb3J0PTgwODAsIHJlbG9hZD1UcnVlLCBkZWJ1Zz1UcnVlKQo8fGZpbV9zdWZmaXh8PgoKYXBwID0gRmFzdEFQSSgpCmFwcC5pbmNsdWRlX3JvdXRlcihyb3V0ZXIpCmFwcC5pbmNsdWRlX3JvdXRlcihzb2NrZXRfZ3JvdXApCjx8ZmltX2VuZHw+"]
["7a77ad6148971f01f5f8212c4a8b017959faa229-1","7a77ad6148971f01f5f8212c4a8b017959faa229","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgQ29udHJpYnV0b3JzIHRvIHRoZSBBbXVuZHNlbiBwcm9qZWN0Lgo8fGZpbV9ob2xlfD4KCmZyb20gYW11bmRzZW5fYXBwbGljYXRpb24uYmFzZS5iYXNlX2lzc3VlX3RyYWNrZXJfY2xpZW50IGltcG9ydCBCYXNlSXNzdWVUcmFja2VyQ2xpZW50CgoKYXBwID0gZmxhc2suRmxhc2soX19uYW1lX18pCmFwcC5jb25maWcuZnJvbV9vYmplY3QoJ2FtdW5kc2VuX2FwcGxpY2F0aW9uLmNvbmZpZy5UZXN0Q29uZmlnJykKCgpjbGFzcyBJc3N1ZVRyYWNrZXJDbGllbnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKCiAgICBkZWYgdGVzdF9hYnN0cmFjdF9jbGFzc19tZXRob2RzKHNlbGYpIC0+IE5vbmU6CiAgICAgICAgYWJzdHJhY3RfbWV0aG9kc19zZXQgPSB7CiAgICAgICAgICAgICdfX2luaXRfXycsCiAgICAgICAgICAgICdjcmVhdGVfaXNzdWUnLAogICAgICAgICAgICAnZ2V0X2lzc3VlcycKICAgICAgICB9CiAgICAgICAgIyBVc2UgZ2V0YXR0ciB0byBwcmV2ZW50IG15cHkgd2FybmluZwogICAgICAgIGNsc19hYnN0cmN0X21ldGhvZHMgPSBnZXRhdHRyKEJhc2VJc3N1ZVRyYWNrZXJDbGllbnQsICdfX2Fic3RyYWN0bWV0aG9kc19fJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjbHNfYWJzdHJjdF9tZXRob2RzLCBhYnN0cmFjdF9tZXRob2RzX3NldCkKPHxmaW1fc3VmZml4fD4KIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAoKaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCBmbGFzawo8fGZpbV9lbmR8Pg=="]
["cfda777a4b3f8108186665ed7ab6dd75655b32c4-3","cfda777a4b3f8108186665ed7ab6dd75655b32c4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBweXNhbQppbXBvcnQgc3lzCmltcG9ydCBjc3YKaW1wb3J0IG9zCgpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoKY2xhc3MgVmFyaWFudDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250aWcsIHBvcywgcmVmLCBhbHQpOgogICAgICAgIHNlbGYuY29udGlnID0gY29udGlnCiAgICAgICAgc2VsZi5wb3MgPSBwb3MKICAgICAgICBzZWxmLnJlZiA9IHJlZgogICAgICAgIHNlbGYuYWx0ID0gYWx0CiAgICAKICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICAgICByZXR1cm4gaGFzaCggKHNlbGYuY29udGlnLCBzZWxmLnBvcywgc2VsZi5yZWYsIHNlbGYuYWx0KSApCiAgICAKICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgIHJldHVybiBzZWxmLmNvbnRpZyA9PSBvdGhlci5jb250aWcgYW5kIFwKICAgICAgICAgICAgICAgc2VsZi5wb3MgPT0gb3RoZXIucG9zIGFuZCBcCiAgICAgICAgICAgICAgIHNlbGYucmVmID09IG90aGVyLnJlZiBhbmQgXAogICAgICAgICAgICAgICBzZWxmLmFsdCA9PSBvdGhlci5hbHQKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYudG9fc3RyaW5nKCkKCiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi50b19zdHJpbmcoKQoKICAgIGRlZiB0b19zdHJpbmcoc2VsZik6CiAgICAgICAgcmV0dXJuIHN0cihzZWxmLnBvcykgKyAiOiIgKyBzZWxmLnJlZiArICI+IiArIHNlbGYuYWx0CgoKZGVmIGNvbnRhbV9mcmFjKGEsIGIpOgogICAgdCA9IGEgKyBiCiAgICBjID0gMAogICAgaWYgdCA+IDA6CiAgICAgICAgYyA9IGIgLyB0CiAgICByZXR1cm4gYwoKZGVmIGNvdW50X2FsbGVsZXMoYWxsZWxlX2EsIGFsbGVsZV9iLCBvYnNlcnZhdGlvbnMpOgogICAgYSA9IDAKICAgIGIgPSAwCgogICAgZm9yIG8gaW4gb2JzZXJ2YXRpb25zOgogICAgICAgIGlmIG8uYmFzZSA9PSBhbGxlbGVfYToKICAgICAgICAgICAgYSArPSAxCiAgICAgICAgZWxpZiBvLmJhc2UgPT0gYWxsZWxlX2I6CiAgICAgICAgICAgIGIgKz0gMQogICAgcmV0dXJuIChhLCBiKQoKIyBwcm9jZXNzIGFuIGZwaWxldXAudHN2IGZpbGUgaW50byBhIGRpY3Rpb25hcnkKIyBvZiBvYnNlcnZlZCByZWFkIGNvdW50cyBmb3IgZWFjaCB2YXJpYW50IGluIHRoZSB1bmlvbgpkZWYgY291bnRfdmFyaWFudF9zdXBwb3J0X2Zyb21fZnBpbGV1cChmcGlsZXVwX2ZpbGUsIHZhcmlhbnRzKToKICAgIG91dCA9IGRpY3QoKQogICAgdmFyaWFudHNfYnlfcG9zaXRpb24gPSBkZWZhdWx0ZGljdChsaXN0KQoKICAgIGZvciB2IGluIHZhcmlhbnRzOgogICAgICAgIHZhcmlhbnRzX2J5X3Bvc2l0aW9uW3YucG9zXS5hcHBlbmQodikKCiAgICB3aXRoIG9wZW4oZnBpbGV1cF9maWxlKSBhcyBmOgogICAgICAgIHJlYWRlciA9IGNzdi5EaWN0UmVhZGVyKGYsIGRlbGltaXRlcj0iXHQiKQogICAgICAgIGZvciByZWNvcmQgaW4gcmVhZGVyOgogICAgICAgICAgICBwID0gaW50KHJlY29yZFsncG9zaXRpb24nXSkKICAgICAgICAgICAgaWYgcCBub3QgaW4gdmFyaWFudHNfYnlfcG9zaXRpb246CiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgZm9yIHZhciBpbiB2YXJpYW50c19ieV9wb3NpdGlvbltwXToKICAgICAgICAgICAgICAgIGtleV9hID0gImNvdW50XyIgKyB2YXIucmVmCiAgICAgICAgICAgICAgICBrZXlfYiA9ICJjb3VudF8iICsgdmFyLmFsdAogICAgICAgICAgICAgICAgKGNvdW50X2EsIGNvdW50X2IpID0gKGludChyZWNvcmRba2V5X2FdKSwgaW50KHJlY29yZFtrZXlfYl0pKQogICAgICAgICAgICAgICAgb3V0W3Zhcl0gPSB7IHZhci5yZWY6Y291bnRfYSwgdmFyLmFsdDpjb3VudF9iIH0KICAgIHJldHVybiBvdXQKCiMgaWYgdGhlIHNhbXBsZSBoYXMgYW4gZW50cnkgZm9yIHRoZSBpbnB1dCB2YXIsIHJldHVybiB0aGUgY29uc2Vuc3VzIGFsbGVsZQojIG90aGVyd2lzZSByZXR1cm4gcmVmZXJlbmNlCmRlZiBhc3NpZ25fYWxsZWxlKHZhciwgc2FtcGxlLCB2YXJpYW50cyk6CiAgICBpZiB2YXIgaW4gdmFyaWFudHNbc2FtcGxlXToKICAgICAgICByZXR1cm4gdmFyaWFudHNbc2FtcGxlXVt2YXJdCiAgICBlbHNlOgogICAgICAgIHJldHVybiB2YXIucmVmCgojIGNoZWNrIGEgcGFpciBvZiBzYW1wbGVzIGZvciBldmlkZW5jZSBvZiBjb250YW1pbmF0aW9uL21peHR1cmVzCmRlZiBjYWxjdWxhdGUoc2FtcGxlX2EsIHNhbXBsZV9iLCB2YXJpYW50cywgY291bnRzKToKCiAgICB1bmlvbiA9IGRpY3QoKQogICAgZm9yIHYgaW4gdmFyaWFudHNbc2FtcGxlX2FdOgogICAgICAgIHVuaW9uW3ZdID0gMQogICAgZm9yIHYgaW4gdmFyaWFudHNbc2FtcGxlX2JdOgogICAgICAgIHVuaW9uW3ZdID0gMQoKICAgICMgb3V0cHV0IHN0YXRzCiAgICB0b3RhbF9jb3VudF9hID0gMAogICAgdG90YWxfY291bnRfYiA9IDAKICAgIGNvbnRhbWluYXRlZF92YXJpYW50cyA9IDAKICAgIHBlcl9zaXRlX291dCA9IGxpc3QoKQogICAgbnVtX3ZhcmlhbnRzID0gMAogICAgYWxsZWxlc19ieV9wb3NpdGlvbiA9IGRpY3QoKQogICAgZm9yIHZhciBpbiB1bmlvbjoKICAgICAgICAjIGFzc2lnbiBhbGxlbGVzIHRvIGVhY2ggc2FtcGxlCiAgICAgICAgYWxsZWxlX2IgPSBhc3NpZ25fYWxsZWxlKHZhciwgc2FtcGxlX2IsIHZhcmlhbnRzKQogICAgICAgIGFsbGVsZV9hID0gYXNzaWduX2FsbGVsZSh2YXIsIHNhbXBsZV9hLCB2YXJpYW50cykKCiAgICAgICAgIyBpZiBCIGhhcyBhbiBJVVBBQyBjb2RlIGl0IGlzIGltcG9zc2libGUgdG8gcmVzb2x2ZSAtIHNraXAgdGhpcyBwb3NpdGlvbgogICAgICAgIGlmIGFsbGVsZV9iIG5vdCBpbiAiQUNHVCI6CiAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICMgaWYgQSBpcyBhbiBJVVBBQyBjb2RlLCByZXNvbHZlIHRvIHRoZSBub24tQiBhbGxlbGUKICAgICAgICBhbGxlbGVfYSA9IHJlc29sdmVfaXVwYWMoYWxsZWxlX2EsIGFsbGVsZV9iKQoKICAgICAgICAjIHNraXAgbm9uLWluZm9ybWF0aXZlIHBvc2l0aW9ucwogICAgICAgIGlmIGFsbGVsZV9hID09IGFsbGVsZV9iOgogICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAjIHNraXAgdGhlIHNhbXBsZSBpZiBpdCBpc24ndCBpbiBjb3VudHMKICAgICAgICBpZiBzYW1wbGVfYSBub3QgaW4gY291bnRzOgogICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAjIHNraXAgcG9zaXRpb25zIHdpdGhvdXQgYW55IGRlcHRoCiAgICAgICAgaWYgdmFyIG5vdCBpbiBjb3VudHNbc2FtcGxlX2FdOgogICAgICAgICAgICBjb250aW51ZQoKICAgICAgICBjID0gY291bnRzW3NhbXBsZV9hXVt2YXJdCiAgICAgICAgIyBsb29rIHVwIGNvdW50cyBmb3IgYSBhbmQgYiBhbGxlbGUsIGNoZWNrIGRlcHRoCiAgICAgICAgKGNvdW50X2EsIGNvdW50X2IpID0gKGNbYWxsZWxlX2FdLCBjW2FsbGVsZV9iXSkKCiAgICAgICAgaWYgY291bnRfYSArIGNvdW50X2IgPCBhcmdzLm1pbl9kZXB0aDoKICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgIyBpbmZvcm1hdGl2ZSB2YXJpYW50LCBjb3VudCBpdAogICAgICAgIG51bV92YXJpYW50cyArPSAxCgogICAgICAgICMgY2FsY3VsYXRlIG1peHR1cmUgcHJvcG9ydGlvbgogICAgICAgIHZhcl9jZiA9IGNvbnRhbV9mcmFjKGNvdW50X2EsIGNvdW50X2IpCiAgICAgICAgaWYgdmFyX2NmID4gYXJncy50aHJlc2hvbGQ6CiAgICAgICAgICAgIGNvbnRhbWluYXRlZF92YXJpYW50cyArPSAxCiAgICAgICAgI3ByaW50KHZhci5wb3MsIGFsbGVsZV9hLCBjb3VudF9hLCBhbGxlbGVfYiwgY291bnRfYiwgdmFyX2NmKQoKICAgICAgICBwZXJfc2l0ZV9vdXQuYXBwZW5kKHN0cih2YXIpICsgIjoiICsgIiUuM2YiICUgKHZhcl9jZikpCiAgICAgICAgdG90YWxfY291bnRfYSArPSBjb3VudF9hCiAgICAgICAgdG90YWxfY291bnRfYiArPSBjb3VudF9iCgogICAgIyBvdXRwdXQgaWYgc3VmZmljaWVudCBldmlkZW5jZSBvZiBtaXh0dXJlCiAgICBjZiA9IGNvbnRhbV9mcmFjKHRvdGFsX2NvdW50X2EsIHRvdGFsX2NvdW50X2IpCiAgICBpZiAobnVtX3ZhcmlhbnRzID49IGFyZ3MubWluX3ZhcmlhbnRzIGFuZCBjb250YW1pbmF0ZWRfdmFyaWFudHMgPj0gbnVtX3ZhcmlhbnRzIC0gMikgb3IgYXJncy5zaG93X2FsbDoKICAgICAgICBzaXRlX3N0ciA9ICIsIi5qb2luKHBlcl9zaXRlX291dCkKICAgICAgICBwcmludCgiXHQiLmpvaW4oW3N0cih4KSBmb3IgeCBpbiBbc2FtcGxlX2EsIHNhbXBsZV9iLCBudW1fdmFyaWFudHMsIGNvbnRhbWluYXRlZF92YXJpYW50cywgdG90YWxfY291bnRfYSwgdG90YWxfY291bnRfYiwgIiUuM2YiICUgKGNmKSwgc2l0ZV9zdHJdXSkpCgojIGxvYWQgdmFyaWFudHMgZnJvbSB0aGUgaXZhciB2YXJpYW50cy50c3YgZmlsZQpkZWYgbG9hZF9pdmFyX3ZhcmlhbnRzKHZhcmlhbnRzX2ZuKToKICAgIG91dCA9IGxpc3QoKQogICAgdmFsaWRfYWx0cyA9IHsgIkEiLCAiQyIsICJHIiwgIlQiIH0KCiAgICB3aXRoIG9wZW4odmFyaWFudHNfZm4pIGFzIGZoOgogICAgICAgIHJlYWRlciA9IGNzdi5EaWN0UmVhZGVyKGZoLCBkZWxpbWl0ZXI9J1x0JykKICAgICAgICBmb3Igcm93IGluIHJlYWRlcjoKICAgICAgICAgICAgYWx0ID0gcm93WydBTFQnXQogICAgICAgICAgICBpZiBhbHQgbm90IGluIHZhbGlkX2FsdHMgb3Igcm93WydQQVNTJ10gPT0gIkZBTFNFIiBvciBmbG9hdChyb3dbJ0FMVF9GUkVRJ10pIDwgYXJncy5taW5fYWxsZWxlX2ZyZXF1ZW5jeToKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIHYgPSBWYXJpYW50KHJvd1snUkVHSU9OJ10sIGludChyb3dbJ1BPUyddKSwgcm93WydSRUYnXSwgcm93WydBTFQnXSkKICAgICAgICAgICAgb3V0LmFwcGVuZCh2KQogICAgcmV0dXJuIG91dAoKaXVwYWNfbWFwID0geyAiTSI6IFsiQSIsICJDIl0sCiAgICAgICAgICAgICAgIlIiOiBbIkEiLCAiRyJdLAogICAgICAgICAgICAgICJXIjogWyJBIiwgIlQiXSwKICAgICAgICAgICAgICAiUyI6IFsiQyIsICJHIl0sCiAgICAgICAgICAgICAgIlkiOiBbIkMiLCAiVCJdLAogICAgICAgICAgICAgICJLIjogWyJHIiwgIlQiXSB9CgojIGdpdmVuIGFuIElVUEFDIGNvZGUgKGxpa2UgWSkgYW5kIGEgZml4ZWQgb3RoZXIgYmFzZSAobGlrZSBDKSByZXR1cm4gdGhlIG90aGVyIGJhc2UgKFQpCmRlZiByZXNvbHZlX2l1cGFjKGNvZGUsIGZpeGVkX2Jhc2UpOgogICAgaWYgY29kZSBpbiBbIkEiLCAiQyIsICJHIiwgIlQiXToKICAgICAgICByZXR1cm4gY29kZSAjIG5vdCBhbWJpZ3VvdXMKICAgIGlmIGNvZGUgaW4gaXVwYWNfbWFwOgogICAgICAgIChhLCBiKSA9IGl1cGFjX21hcFtjb2RlXQogICAgICAgIHByaW50KCIlc1x0JXMiICUgKCBzdHIoYSksc3RyKGIpICkpCiAgICAgICAgaWYgYSA9PSBmaXhlZF9iYXNlOgogICAgICAgICAgICByZXR1cm4gYgogICAgICAgIGVsaWYgYiA9PSBmaXhlZF9iYXNlOgogICAgICAgICAgICByZXR1cm4gYQogICAgICAgIGVsc2U6CiAgICAgICAgICAgICMgYXNzZXJ0KEZhbHNlKQogICAgICAgICAgICByZXR1cm4gTm9uZQogICAgZWxzZToKICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICMgdHJpYWxsZWxpYwogICAgICAgICMgYXNzZXJ0KEZhbHNlKQoKIyBsb2FkIG9ic2VydmVkIHZhcmlhbnRzIGZyb20gdGhlIG91dHB1dCBvZiBhbGlnbjJhbGxlbGVzLnB5CmRlZiBsb2FkX21zYV9hbGxlbGVzKGFsbGVsZXNfZm4pOgogICAgb3V0ID0gZGljdCgpCiAgICB3aXRoIG9wZW4oYWxsZWxlc19mbikgYXMgZmg6CiAgICAgICAgcmVhZGVyID0gY3N2LkRpY3RSZWFkZXIoZmgsIGRlbGltaXRlcj0nXHQnKQogICAgICAgIGZvciByb3cgaW4gcmVhZGVyOgogICAgICAgICAgICBzYW1wbGUgPSByb3dbJ25hbWUnXS5yZXBsYWNlKCJDb25zZW5zdXNfIiwgIiIpCiAgICAgICAgICAgIGlmIHNhbXBsZSBub3QgaW4gb3V0OgogICAgICAgICAgICAgICAgb3V0W3NhbXBsZV0gPSBkaWN0KCkKICAgICAgICAgICAgcmEgPSByb3dbJ3JlZl9hbGxlbGUnXQogICAgICAgICAgICBjYSA9IHJvd1snYWx0X2FsbGVsZSddICMgY29uc2Vuc3VzIGFsbGVsZSwgY2FuIGJlIGFtYmlndW91cwogICAgICAgICAgICAKICAgICAgICAgICAgIyBpZ25vcmUgTnMgYW5kIHNpbmdsZXRvbnMKICAgICAgICAgICAgaWYgY2EgPT0gIk4iIG9yIGludChyb3dbJ3NhbXBsZXNfd2l0aF9hbGxlbGUnXSkgPT0gMToKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGFhID0gcmVzb2x2ZV9pdXBhYyhjYSwgcmEpCiAgICAgICAgICAgICMgTU9ESUZJRUQhISEgQ2hlY2sgaWYgYWEgcmV0dXJucyBOb25lIGVpdGhlciB0cmlhbGVsaWMgb3IgYmlhbGxlbGljIGJ1dCBSRUYgaXMgbm90IGluIElVUEFDCiAgICAgICAgICAgIGlmIGFhIGlzIE5vbmUgOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICBwcmludChyb3csIGZpbGUgPSBzeXMuc3RkZXJyICkKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIAo8fGZpbV9lbmR8Pg=="]
["992078592570d900c075f3798dc879c993c65b10-1","992078592570d900c075f3798dc879c993c65b10","PHxmaW1fcHJlZml4fD4KIwojIENvcHlyaWdodCAoYykgMjAxNS0yMDIxIFVuaXZlcnNpdHkgb2YgQW50d2VycCwgQWxveHkgTlYuCiMKPHxmaW1faG9sZXw+CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgojIGF1dGhvcjogQ2hyaXN0b3BoZSBWRyA8Y29udGFjdEBjaHJpc3RvcGhlLnZnPgojIGFic3RyYWN0IGJhc2UtY2xhc3MgZm9yIG9wZXJhdGlvbnMKCmZyb20gYWJjIGltcG9ydCBBQkNNZXRhCgpmcm9tIGQ3YS5zdXBwb3J0LnNjaGVtYSBpbXBvcnQgVmFsaWRhdGFibGUKCmNsYXNzIE9wZXJhdGlvbihWYWxpZGF0YWJsZSk6CiAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKCiAgZGVmIF9faW5pdF9fKHNlbGYsIG9wZXJhbmQ9Tm9uZSk6CiAgICBpZiBzZWxmLm9wZXJhbmRfY2xhc3MgaXMgTm9uZSBhbmQgb3BlcmFuZCBpcyBub3QgTm9uZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigiezB9IGRvZXNuJ3QgcmVxdWlyZSBhbiBvcGVyYW5kLiIuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwogICAgICAgICAgICAgICAgICAgICAgKSkKICAgIGlmIChvcGVyYW5kIGlzIE5vbmUgYW5kIHNlbGYub3BlcmFuZF9jbGFzcyBpcyBub3QgTm9uZSkgb3IgXAogICAgICAgKG9wZXJhbmQgaXMgbm90IE5vbmUgYW5kIG5vdCBpc2luc3RhbmNlKG9wZXJhbmQsIHNlbGYub3BlcmFuZF9jbGFzcykpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCJ7MH0gcmVxdWlyZXMgYSB7MX0gb3BlcmFuZCIuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGVyYW5kX2NsYXNzLl9fbmFtZV9fCiAgICAgICAgICAgICAgICAgICAgICApKQogICAgc2VsZi5vcGVyYW5kID0gb3BlcmFuZAoKICBkZWYgX19pdGVyX18oc2VsZik6CiAgICBpZiBzZWxmLm9wZXJhbmQ6CiAgICAgIGZvciBieXRlIGluIHNlbGYub3BlcmFuZDogeWllbGQgYnl0ZQoKICBkZWYgX19zdHJfXyhzZWxmKToKICAgIHMgPSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwogICAgcyArPSAiOiAiICsgc3RyKHNlbGYub3BlcmFuZCkKICAgIHJldHVybiBzCjx8ZmltX3N1ZmZpeHw+CiMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlkN2EuCiMgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9TdWItSW9UL3B5ZDdhIGZvciBmdXJ0aGVyIGluZm8uCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKPHxmaW1fZW5kfD4="]
["8f195333f3a4694a42e270c44172089c53bd7f28-3","8f195333f3a4694a42e270c44172089c53bd7f28","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIiIiCkNvbnN0YW50IFNwaGVyZSBFeGFtcGxlCj09PT09PT09PT09PT09PT09PT09PT09Cgo8fGZpbV9lbmR8Pg=="]
["8f59d58da3baa086ea79604b79374c1ab729e275-1","8f59d58da3baa086ea79604b79374c1ab729e275","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpkZWYgYXJyYXlfc3VtX3RvX29uZShhcnJheTogbGlzdCk6CiAgICAiIiIKICAgIEFkanVzdCBhIGxpc3Qgb2YgdmFsdWVzIHNvIHRoYXQgaWYgd2Ugc3VtIHRoaXMgbGlzdCB0aGUgcmVzdWx0IGlzIG9uZS4KCjx8ZmltX2VuZHw+"]
["8f59d58da3baa086ea79604b79374c1ab729e275-5","8f59d58da3baa086ea79604b79374c1ab729e275","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgogICAgIiIiCiAgICBBZGp1c3QgYSBsaXN0IG9mIHZhbHVlcyBzbyB0aGF0IGlmIHdlIHN1bSB0aGlzIGxpc3QgdGhlIHJlc3VsdCBpcyBvbmUuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgYXJyYXkgOiBsaXN0CiAgICAgICAgbGlzdCBvZiB2YWx1ZXMgdG8gYWRqdXN0CgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgbnVtcHkuYXJyYXkKICAgICAgICBOdW1iZXIgYXJyYXkgd2hpY2ggc3VtIHRvIG9uZQogICAgIiIiCiAgICByZXR1cm4gbnAuYXJyYXkoYXJyYXkpIC8gbnAuYXJyYXkoYXJyYXkpLnN1bShrZWVwZGltcz0xKQo8fGZpbV9zdWZmaXh8PgppbXBvcnQgbnVtcHkgYXMgbnAKCgpkZWYgYXJyYXlfc3VtX3RvX29uZShhcnJheTogbGlzdCk6Cjx8ZmltX2VuZHw+"]
["7ab97824c5cc52516f6a06eccd1a4e73e76cee17-1","7ab97824c5cc52516f6a06eccd1a4e73e76cee17","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc9dXRmLTgKIyBDb3B5cmlnaHQgMjAyMiBUaGUgR29vZ2xlIFJlc2VhcmNoIEF1dGhvcnMuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgoiIiJQcm9jZWR1cmUgY2xvbmluZyB3aXRoIEJGUy4iIiIKCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgdGVuc29yZmxvdyBhcyB0Zgpmcm9tIHByb2NlZHVyZV9jbG9uaW5nIGltcG9ydCB1dGlscwoKCmNsYXNzIEJlaGF2aW9yYWxDbG9uaW5nQkZTKHRmLmtlcmFzLk1vZGVsKToKICAiIiJCQyB3aXRoIG5ldXJhbCBuZXRzLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgbWF6ZV9zaXplLAogICAgICAgICAgICAgICBudW1fYWN0aW9ucz00LAogICAgICAgICAgICAgICBlbmNvZGVyX3NpemU9J2RlZmF1bHQnLAogICAgICAgICAgICAgICBhdWdtZW50PUZhbHNlLAogICAgICAgICAgICAgICBlbmNvZGVfZGltPTI1NiwKICAgICAgICAgICAgICAgbGVhcm5pbmdfcmF0ZT0xZS0zKToKICAgIHN1cGVyKCkuX19pbml0X18oKQoKICAgIHNlbGYuX21hemVfc2l6ZSA9IG1hemVfc2l6ZQogICAgc2VsZi5fbnVtX2FjdGlvbnMgPSBudW1fYWN0aW9ucwogICAgc2VsZi5fZW5jb2RlX2RpbSA9IGVuY29kZV9kaW0KICAgIHNlbGYuX2F1Z21lbnQgPSBhdWdtZW50CgogICAgaWYgZW5jb2Rlcl9zaXplID09ICdkZWZhdWx0JzoKICAgICAga2VybmVsX3NpemVzID0gKDMsKSAqIDUKICAgICAgc3RyaWRlX3NpemVzID0gKDEsKSAqIDUKICAgICAgcG9vbF9zaXplcyA9IE5vbmUKICAgICAgbnVtX2ZpbHRlcnMgPSAoZW5jb2RlX2RpbSAvIDIsKSAqIDIgKyAoZW5jb2RlX2RpbSwpICogMiArICgKICAgICAgICAgIHNlbGYuX251bV9hY3Rpb25zICsgMSwpCiAgICBlbHNlOgogICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogICAgc2VsZi5fZW5jb2RlciA9IHV0aWxzLmNyZWF0ZV9jb252KAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgW3NlbGYuX21hemVfc2l6ZSwgc2VsZi5fbWF6ZV9zaXplLCA4XSwgICMgKHdhbGw7IGdvYWw7IGxvYzsgYSkKICAgICAgICBrZXJuZWxfc2l6ZXM9a2VybmVsX3NpemVzLAogICAgICAgIHN0cmlkZV9zaXplcz1zdHJpZGVfc2l6ZXMsCiAgICAgICAgcG9vbF9zaXplcz1wb29sX3NpemVzLAo8fGZpbV9lbmR8Pg=="]
["99a8a3bb51911647ed73a4653b8b05aba3ee51f5-2","99a8a3bb51911647ed73a4653b8b05aba3ee51f5","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gc2NpcHkgaW1wb3J0IHNpZ25hbAoKCmRlZiBkYXRhX3F1YWxpdHlfY2hlY2soYXJyYXkpOgogICAgIiIiCiAgICBDaGVjayB3aGV0aGVyIHRoZSBpbnB1dCBzaWduYWwgY29udGFpbnMgTmFOLCBwcmludCByZWxldmFudCBpbmZvcm1hdGlvbgogICAgaW5wdXQ6CiAgICAgICAgYXJyYXk6IG51bXB5IGFycmF5LiBUaGUgdGVtcG9yYWwgc2lnbmFsIHdpdGggMWQgb3Igd2l0aCBtdWx0aXBsZSBkaW1lbnNpb25zCiAgICByZXR1cm46CiAgICAgICAgTm9uZSBvciBkaWN0LiBEaWN0IHN0b3JlcyBpbmRpY2F0b3Igb2YgTmFuL0Fibm9ybWFsIHZhbHVlcy4KICAgICAgICAgICAgSWYgdGhlcmUgaXMgbm8gTmFOIGluIHNpZ25hbCwgcmV0dXJuIE5vbmUsIGVsc2UgcmV0dXJuIHRoZSBpbmRleCB3aGVyZSBOYU4gb2NjdXJzCiAgICAiIiIKICAgIHByaW50KCIqKiogRGF0YSBRdWFsaXR5IENoZWNrICoqKiIpCgogICAgZGVmIGNoZWNrX25hbihhcnJheSk6CiAgICAgICAgcmV0dXJuIG5wLmlzbmFuKGFycmF5KS5hbnkoKQoKICAgIGRlZiBjaGVja19hYm5vcm1hbChhcnJheSk6CiAgICAgICAgIiIiCiAgICAgICAgVG9kbzogRGVmaW5lIHdoYXQga2luZHMgb2YgRUVHIGRhdGEgYXJlIGFibm9ybWFsIGluIHNvbWUga2luZHM/CiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIE5vbmUKCiAgICBpZiBub3QgY2hlY2tfbmFuKGFycmF5KSBhbmQgY2hlY2tfYWJub3JtYWwoYXJyYXkpOgogICAgICAgIHByaW50KCIqKiogRGF0YSBRdWFsaXR5IENoZWNrIFBhc3NlZCAqKioiKQogICAgICAgIHJldHVybiBOb25lCiAgICBlbHNlOgogICAgICAgICMgcmV0dXJuIGZvcm1hdDogdHVwbGUoYXJyYXkoW2EsYixjLC4uLl0pLCBhcnJheShbaixrLGwsLi4uXSksIC4uLikKICAgICAgICAjIEVhY2ggZWxlbWVudCBpbiB0dXBsZSBpbmRpY2F0ZXMgdGhlIGluZGV4IGxpc3QKICAgICAgICBkaWN0ID0ge30KICAgICAgICBpZiBjaGVja19uYW4oYXJyYXkpOgogICAgICAgICAgICBwcmludCgiTmFuIFZhbHVlcyBhcHBlYXIgaW4gZGF0YSIpCiAgICAgICAgICAgIHByaW50KCJUaGUgcGVyY2VudGFnZSBvZiBOYW4gVmFsdWVzIGlzIHt2YWx9JSIpLmZvcm1hdCh2YWw9c3VtKG5wLmlzbmFuKGFycmF5KSkgLyBhcnJheS5zaGFwZVswXSkKICAgICAgICAgICAgcHJpbnQoIlRoZSBsb2NhdGlvbiBpcyBhdCB7dHVwbGV9IikuZm9ybWF0KHR1cGxlPW5wLndoZXJlKG5wLmlzbmFuKGFycmF5KSkpCiAgICAgICAgICAgIGRpY3RbIm5hbiJdID0gbnAud2hlcmUobnAuaXNuYW4oYXJyYXkpKQogICAgICAgIGlmIGNoZWNrX2Fibm9ybWFsKGFycmF5KToKICAgICAgICAgICAgI1RvZG86IGFkZCBhYm5vcm1hbCB2YWx1ZXMnIGxvY2F0aW9ucyB0byBkaWN0LgogICAgICAgICAgICBwYXNzCiAgICAgICAgcmV0dXJuIGRpY3QKCgpkZWYgc2F2Z29sKGFycmF5LCB3aW5kb3dfc2l6ZT01LCBwb2x5b3JkZXI9Mik6CiAgICAiIiIKICAgIEFwcGx5IHRoZSBTYXZpdHpreS1Hb2xheSBmaWtsdGVyIHRvIHNtb290aCBzaWduYWxzLgogICAgV2Ugc3VwcG9ydCBib3RoIDFkIGFycmF5IGlucHV0IGFuZCBERUVHIHN0YW5kYXJkIGlucHV0IChwLG0sZSkuCiAgICBGb3IgdGhlIGxhdGVyIGZvcm1hdCwgd2UgY2FsY3VsYXRlIERFIG9uIGRpbSAiZSIgYW5kIHJldHVybiBhIChwLG0pIG51bXB5IGFycmF5LgoKICAgIElucHV0CiAgICAtLS0tLS0tCiAgICBhcnJheTogbnVtcHkgYXJyYXkgb3IgbGlzdAogICAgd2luZG93X3NpemU6IGludAogICAgICAgIHRoZSBsZW5ndGggb2YgdGhlIGZpbHRlciB3aW5kb3cgKGkuZS4sIHRoZSBudW1iZXIgb2YgY29lZmZpY2llbnRzKS4KICAgICAgICB3aW5kb3dfbGVuZ3RoYCBtdXN0IGJlIGEgcG9zaXRpdmUgb2RkIGludGVnZXIuCiAgICAgICAgZGVmYXVsdCBpcyA1LgogICAgcG9seW9yZGVyIDogaW50CiAgICAgICAgdGhlIG9yZGVyIG9mIHRoZSBwb2x5bm9taWFsIHVzZWQgdG8gZml0IHRoZSBzYW1wbGVzLgogICAgICAgIHBvbHlvcmRlciBtdXN0IGJlIGxlc3MgdGhhbiB3aW5kb3dfbGVuZ3RoLgogICAgICAgIGRlZmF1bHQgaXMgMi4KCiAgICBSZXR1cm4KICAgIC0tLS0tLS0KICAgIHkgOm5kYXJyYXkKICAgICAgICBzYW1lIHNoYXBlIGFzIHguCiAgICAgICAgVGhlIGZpbHRlcmVkIGRhdGEuCiAgICAiIiIKICAgIGRlZiBjcmVhdGVfeChzaXplLCByYW5rKToKICAgICAgICAjIGNyZWF0IHdlaWdodGluZyBjb2VmZmljaWVudHMKICAgICAgICB4ID0gW10KICAgICAgICBmb3IgaSBpbiByYW5nZSgyICogc2l6ZSArIDEpOgogICAgICAgICAgICBtID0gaSAtIHNpemUKICAgICAgICAgICAgcm93ID0gW20gKiogaiBmb3IgaiBpbiByYW5nZShyYW5rKV0KICAgICAgICAgICAgeC5hcHBlbmQocm93KQogICAgICAgIHggPSBucC5tYXQoeCkKICAgICAgICByZXR1cm4geAoKICAgIGRlZiBTRyhhcnJheSwgd2luZG93X3NpemUsIHBvbHlvcmRlcik6CiAgICAgICAgaWYgd2luZG93X3NpemUgJSAyICE9IDE6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIndpbmRvd19zaXplIG11c3QgYmUgb2RkIikKICAgICAgICBpZiBwb2x5b3JkZXIgPj0gd2luZG93X3NpemU6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInBvbHlvcmRlciBtdXN0IGJlIGxlc3MgdGhhbiB3aW5kb3dfbGVuZ3RoZCIpCgogICAgICAgIG0gPSBpbnQoKHdpbmRvd19zaXplIC0gMSkgLyAyKQogICAgICAgIG9kYXRhID0gbnAuYXJyYXkoYXJyYXkpLnRvbGlzdCgpCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobSk6CiAgICAgICAgICAgIG9kYXRhLmluc2VydCgwLCBvZGF0YVswXSkKICAgICAgICAgICAgb2RhdGEuaW5zZXJ0KGxlbihvZGF0YSksIG9kYXRhW2xlbihvZGF0YSkgLSAxXSkKCiAgICAgICAgIyBjcmVhdCBYIG1hdHJpeAogICAgICAgIHggPSBjcmVhdGVfeChtLCBwb2x5b3JkZXIpCiAgICAgICAgIyBjYWxjdWxhdGUgdGhlIHdlaWdodGluZyBjb2VmZmljaWVudHMKICAgICAgICBiID0gKHggKiAoeC5UICogeCkuSSkgKiB4LlQKICAgICAgICBhMCA9IGJbbV0KICAgICAgICBhMCA9IGEwLlQKICAgICAgICAjIGNhbGN1bGF0ZSB0aGUgZmlsdGVyZWQgc2lnbmFsCiAgICAgICAgZmlsdGVyZWRfc2lnbmFsID0gW10KICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oYXJyYXkpKToKICAgICAgICAgICAgeSA9IFtvZGF0YVtpICsgal0gZm9yIGogaW4gcmFuZ2Uod2luZG93X3NpemUpXQogICAgICAgICAgICB5MSA9IG5wLm1hdCh5KSAqIGEwCiAgICAgICAgICAgIHkxID0gZmxvYXQoeTEpCiAgICAgICAgICAgIGZpbHRlcmVkX3NpZ25hbC5hcHBlbmQoeTEpCiAgICAgICAgcmV0dXJuIG5wLmFycmF5KGZpbHRlcmVkX3NpZ25hbCkKICAgIGlmIGxlbihucC5hcnJheShhcnJheSkuc2hhcGUpID09IDE6CiAgICAgICAgcmV0dXJuIFNHKGFycmF5LCB3aW5kb3dfc2l6ZSwgcG9seW9yZGVyKQogICAgZWxzZToKICAgICAgICByZXR1cm4gbnAuYXBwbHlfYWxvbmdfYXhpcyhTRywgYXhpcz0tMSwgYXJyPWFycmF5LCB3aW5kb3dfc2l6ZT13aW5kb3dfc2l6ZSwgcG9seW9yZGVyPXBvbHlvcmRlcikKCgpkZWYgZmlsdGVyKGFycmF5LCBuYW1lPSJkZWx0YSIsIG9yZGVyPTUpOgogICAgIiIiCjx8ZmltX2hvbGV8PgogICAgICAgIG9yZGVyOiBpbnQuIFRoZSBvcmRlciBvZiBCdXR0ZXJ3b3J0aCBmaWx0ZXIuIERlZmF1bHQgaXMgNQogICAgcmV0dXJuOgogICAgICAgIHRzOiBudW1weSBhcnJheS4gRmlsdGVyZWQgc2lnbmFsIGluIHRlbXBvcmFsIGRvbWFpbgogICAgIiIiCiAgICBpZiBuYW1lID09ICJkZWx0YSI6CiAgICAgICAgYmFuZCA9IFsxLDNdCiAgICBlbGlmIG5hbWUgPT0gInRoZXRhIjoKICAgICAgICBiYW5kID0gWzQsN10KICAgIGVsaWYgbmFtZSA9PSAiYWxwaGEiOgogICAgICAgIGJhbmQgPSBbOCwxM10KICAgIGVsaWYgbmFtZSA9PSAiYmV0YSI6CiAgICAgICAgYmFuZCA9IFsxNCwzMF0KICAgIGVsaWYgbmFtZSA9PSAiZ2FtbWEiOgogICAgICAgIGJhbmQgPSBbMzEsNTBdCiAgICBlbHNlOgogICAgICAgIHJhaXNlKEV4Y2VwdGlvbigiSW52YWxpZCBmaWx0ZXIgbmFtZSEiKSkKICAgIHNvcyA9IHNpZ25hbC5idXR0ZXIob3JkZXIsIGJhbmQsICdicCcsIGZzPTEwMDAsIG91dHB1dD0nc29zJykKICAgIHRzID0gc2lnbmFsLnNvc2ZpbHQoc29zLCBhcnJheSkKICAgIHJldHVybiB0cwoKCmRlZiBiYW5kKGFycmF5KToKICAgICIiIgogICAgRmlsdGVyIHRlbXBvcmFsIHNpZ25hbCBieSBhbGwgdGhlIDUgZmlsdGVycyBjb21tb25seSB1c2VkIGluIEVFRyBhbmFseXNpcwogICAgaW5wdXQ6CiAgICAgICAgc2lnbmFsOiBudW1weSBhcnJheS4gVGhlIGlucHV0IHRlbXBvcmFsIHNpZ25hbC4gMWQgb3Igd2l0aCBtdWx0aXBsZSBkaW1lbnNpb25zCiAgICByZXR1cm4KICAgICAgICB0c19kaWN0OiBkaWN0aW9uYXJ5LiBLZXlzIGFyZSBmaWx0ZXIgbmFtZSBhbmQgdmFsdWVzIGFyZSBmaWx0ZXJlZCBzaWduYWwgaW4gdGVtcG9yYWwgZG9tYWluLgogICAgIiIiCiAgICB0c19kaWN0ID0ge30KICAgIGlmIGxlbihhcnJheS5zaGFwZSkgPCAyOgogICAgICAgIGZvciBuYW1lIGluIFsiZGVsdGEiLCJ0aGV0YSIsImFscGhhIiwiYmV0YSIsImdhbW1hIl06CiAgICAgICAgICAgIHRzX2RpY3RbbmFtZV0gPSBmaWx0ZXIoYXJyYXkpCiAgICBlbHNlOgogICAgICAgIGZvciBuYW1lIGluIFsiZGVsdGEiLCJ0aGV0YSIsImFscGhhIiwiYmV0YSIsImdhbW1hIl06CiAgICAgICAgICAgIHRzX2RpY3RbbmFtZV0gPSBucC5hcHBseV9hbG9uZ19heGlzKGZpbHRlciwgLTEsIGFycmF5LCBuYW1lKQogICAgcmV0dXJuIHRzX2RpY3QKCgpkZWYgc2VnbWVudChhcnJheSwgbGVuZ3RoPTEwLCBvdmVybGFwPTEsIGxhYmVsPU5vbmUpOgogICAgIiIiCiAgICBHZW5lcmF0ZSB0aGUgc2lnbmFsIHNlZ21lbnRzIHRvIGF1Z21lbnQgc2FtcGxlIHNpemUuCiAgICBpbnB1dDoKICAgICAgICBhcnJheTogbnVtcHkgYXJyYXkuIFRoZSBpbnB1dCB0ZW1wb3JhbCBzaWduYWwuIDFkIG9yIHdpdGggbXVsdGlwbGUgZGltZW5zaW9ucwogICAgICAgIGxlbmd0aDogaW50LiBUaGUgbGVuZ3RoIG9mIHNlZ21lbnRzLiBEZWZhdWx0IGlzIDEwLCB3aGljaCBtZWFucyBlYWNoIHNpZ25hbCBzZWdtZW50IGNvbnRhaW5zIDEwIGRhdGEgcG9pbnRzLgogICAgICAgIG92ZXJsYXA6IGludC4gVGhlIG92ZXJsYXAgbGVuZ3RoIGJldHdlZW4gbmVpZ2hib3Jpbmcgc2VnbWVudHMuIERlZmF1bHQgaXMgMS4KICAgICAgICBsYWJlbDogbnVtcHkgYXJyYXkuIElmIGxhYmVsIGlzIG5vdCBOb25lLCBkdXBsaWNhdGUgbGFiZWxzIGFjY29yZGluZyB0byB0aGUgZGF0YQogICAgcmV0dXJuOgogICAgICAgIHNlZ21lbnRlZF9hcnJheTogbnVtcHkgYXJyYXkgd2l0aCBzaGFwZSAocCxtLHMsZSkgb3IgKHMsZSksIGRlcGVuZGluZyBvbiB0aGUgaW5wdXQuIHMgaXMgdGhlIG51bWJlciBvZiBzZWdtZW50cy4KICAgICAgICBkdXBsaWNhdGVkX2xhYmVsczogbnVtcHkgYXJyYXkgd2l0aCBzaGFwZSAocCxtLHMsZSkgb3IgKHMsZSkuIElmIGlucHV0IGxhYmVsIGlzIE5vbmUgZG8gbm90IHJldHVybi4KICAgICIiIgogICAgaWYgbGVuKGFycmF5LnNoYXBlKSA8IDI6CiAgICAgICAgc2VnbWVudGVkX2FycmF5ID0gW2FycmF5W2k6aStsZW5ndGhdIGZvciBpIGluIHJhbmdlKDAsIGxlbihhcnJheSksIGxlbmd0aC1vdmVybGFwKV0KICAgICAgICBpZiBsZW4oc2VnbWVudGVkX2FycmF5Wy0xXSkgIT0gbGVuZ3RoOgogICAgICAgICAgICBzZWdtZW50ZWRfYXJyYXkgPSBzZWdtZW50ZWRfYXJyYXlbOi0xXQogICAgICAgIGlmIGxhYmVsIGlzIE5vbmU6CiAgICAgICAgICAgIHJldHVybiBucC5hcnJheShzZWdtZW50ZWRfYXJyYXkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIG5wLmFycmF5KHNlZ21lbnRlZF9hcnJheSksIG5wLmV4cGFuZF9kaW1zKGxhYmVsLCAwKS5yZXBlYXQobGVuKHNlZ21lbnRlZF9hcnJheSksIGF4aXM9MCkKICAgIGVsc2U6CiAgICAgICAgc2VnbWVudGVkX2FycmF5ID0gW2FycmF5WzosOixpOmkrbGVuZ3RoXSBmb3IgaSBpbiByYW5nZSgwLCBhcnJheS5zaGFwZVstMV0sIGxlbmd0aC1vdmVybGFwKV0KICAgICAgICBpZiBzZWdtZW50ZWRfYXJyYXlbLTFdLnNoYXBlWy0xXSAhPSBsZW5ndGg6CiAgICAgICAgICAgIHNlZ21lbnRlZF9hcnJheSA9IHNlZ21lbnRlZF9hcnJheVs6LTFdCiAgICAgICAgaWYgbGFiZWwgaXMgTm9uZToKICAgICAgICAgICAgcmV0dXJuIG5wLmFycmF5KHNlZ21lbnRlZF9hcnJheSkudHJhbnNwb3NlKDEsMiwwLDMpICAgIyB0cmFuc3Bvc2UgbnVtcHkgYXJyYXkgdG8gbWFrZSAocCxtLHMsZSkgZm9ybWF0CiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIG5wLmFycmF5KHNlZ21lbnRlZF9hcnJheSkudHJhbnNwb3NlKDEsMiwwLDMpLCBucC5leHBhbmRfZGltcyhsYWJlbCwgLTIpLnJlcGVhdChzZWdtZW50ZWRfYXJyYXkuc2hhcGVbLTJdLCBheGlzPS0yKQoKCmRlZiBzYW1wbGluZyhhcnJheSwgaW50ZXJ2YWw9MSwgb2Zmc2V0PTApOgogICAgIiIiCiAgICBEb3duLXNhbXBsZSB0aGUgaW5wdXQgc2lnbmFsIHdpdGggY2VydGFpbiBpbnRlcnZhbC4KICAgIGlucHV0OgogICAgICAgIGFycmF5OiBudW1weSBhcnJheS4gVGhlIGlucHV0IHRlbXBvcmFsIHNpZ25hbC4gMWQgb3Igd2l0aCBtdWx0aXBsZSBkaW1lbnNpb25zCiAgICAgICAgaW50ZXJ2YWw6IGludC4gVGhlIGludGVydmFsIHRvIHNhbXBsZSBFRUcgc2lnbmFsLiBEZWZhdWx0IGlzIDEsIHdoaWNoIG1lYW5zIE5PIGRvd24tc2FtcGxpbmcgaXMgYXBwbGllZAogICAgICAgIG9mZnNldDogaW50LiBTYW1wbGluZyBzdGFydHMgZnJvbSAib2Zmc2V0LXRoIiBkYXRhIHBvaW50CiAgICByZXR1cm46CiAgICAgICAgc2FtcGxlZF9hcnJheTogbnVtcHkgYXJyYXkuIERvd24tc2FtcGxlZCBzaWduYWwKICAgICIiIgogICAgaWYgbGVuKGFycmF5LnNoYXBlKSA8IDI6CiAgICAgICAgcmV0dXJuIGFycmF5W29mZnNldDo6aW50ZXJ2YWxdCiAgICBlbHNlOgogICAgICAgIHJldHVybiBhcnJheVs6LCA6LCBvZmZzZXQ6OmludGVydmFsXQo8fGZpbV9zdWZmaXh8PgogICAgQSBiYW5kLXBhc3MgZmlsdGVyIHRvIHN1cHByZXNzIHNpZ25hbCBvdXQgb2YgZnJlcXVlbmN5IGJhbmQKICAgIGlucHV0OgogICAgICAgIGFycmF5OiBudW1weSBhcnJheS4gVGhlIGlucHV0IHRlbXBvcmFsIHNpZ25hbCB3aXRoIDFkCiAgICAgICAgbmFtZTogc3RyLiBTcGVjaWZ5IHRoZSBmaWx0ZXIgdHlwZSBjb21tb25seSB1c2VkIGluIEVFRyBhbmFseXNpcy4gKGRlbHRhLCB0aGV0YSwgYWxwaGEsIGJldGEsIGdhbW1hKQo8fGZpbV9lbmR8Pg=="]
["414ec82f16460a49c21ff4126e93cfddcc0ea759-2","414ec82f16460a49c21ff4126e93cfddcc0ea759","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRpc2NvcmQgCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lLCB0aW1lem9uZQppbXBvcnQgb3MKCmFzeW5jIGRlZiBzZW5kX2hlbHBfbWVzc2FnZShjaGFubmVsKToKICAgIGVtYmVkID0gZGlzY29yZC5FbWJlZCh0aXRsZT0iQXJjaGl2ZXIgSGVscCIpCiAgICBlbWJlZC5jb2xvciA9IGRpc2NvcmQuQ29sb3VyLmRhcmtfYmx1ZSgpCiAgICBlbWJlZC5kZXNjcmlwdGlvbiA9ICIiIkkgY2FuIGhhbmRsZSBhcmNoaXZpbmcgY2hhbm5lbHMgYW5kIGNhdGVnb3JpZXMhCiAgICBDb21tYW5kczoKYGBgIWFyY2hpdmUgY2F0ZWdvcnkgW25hbWVdIC0tIEFyY2hpdmVzIGFuIGVudGlyZSBjYXRlZ29yeQohYXJjaGl2ZSBjaGFubmVsIHtjYXRlZ29yeS99W25hbWVdIC0tIEFyY2hpdmVzIGFuIGVudGlyZSBjaGFubmVsCiFhcmNoaXZlIGFsbCAtLSBBcmNoaXZlcyBhbGwgY2hhbm5lbHMgYnkgY2F0ZWdvcnlgYGAiIiIKICAgIGF3YWl0IGNoYW5uZWwuc2VuZChlbWJlZD1lbWJlZCkKCmFzeW5jIGRlZiBhcmNoaXZlX2NhdGVnb3J5KGNhdGVnb3J5X25hbWUsIGNoYW5uZWwpOgogICAgY2F0ZWdvcmllcyA9IGNoYW5uZWwuZ3VpbGQuY2F0ZWdvcmllcwogICAgbWF0Y2hpbmdfY2F0ZWdvcmllcyA9IGxpc3QoZmlsdGVyKGxhbWJkYSB4OiB4Lm5hbWUubG93ZXIoKSA9PSBjYXRlZ29yeV9uYW1lLmxvd2VyKCksIGNhdGVnb3JpZXMpKQoKICAgIGlmIGxlbihtYXRjaGluZ19jYXRlZ29yaWVzKSA9PSAwOgogICAgICAgIGF3YWl0IGNoYW5uZWwuc2VuZCgnTm8gTWF0Y2hpbmcgQ2F0ZWdvcmllcycpCiAgICAgICAgcmV0dXJuCiAgICAKICAgIGZvciBtYXRjaGluZyBpbiBtYXRjaGluZ19jYXRlZ29yaWVzOgogICAgICAgIGF3YWl0IGNoYW5uZWwuc2VuZChmJ1x0Kip7bWF0Y2hpbmcubmFtZX0qKicpCiAgICAgICAgYXdhaXQgY2hhbm5lbC5zZW5kKGYnQXJjaGl2aW5nIHtsZW4obWF0Y2hpbmcuY2hhbm5lbHMpfSBjaGFubmVscycpCiAgICAgICAgZm9yIGksIGNoaWxkX2NoYW5uZWwgaW4gZW51bWVyYXRlKG1hdGNoaW5nLmNoYW5uZWxzKToKICAgICAgICAgICAgYXdhaXQgY2hhbm5lbC5zZW5kKGYnKHtpKzF9L3tsZW4obWF0Y2hpbmcuY2hhbm5lbHMpfSkgQXJjaGl2aW5nICp7Y2hpbGRfY2hhbm5lbC5uYW1lfSonKQogICAgICAgICAgICBhd2FpdCBhcmNoaXZlX2NoYW5uZWwoY2hpbGRfY2hhbm5lbCkKCmRlZiBwYXJzZV9jaGFubmVsX25hbWUoaW5wdXRfbWVzc2FnZSk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHRva2VucyA9IGlucHV0X21lc3NhZ2Uuc3BsaXQoJy8nKQogICAgaWYgbGVuKHRva2VucykgPiAxOgogICAgICAgIHJldHVybiB0b2tlbnNbMV0sIHRva2Vuc1swXQogICAgZWxzZToKPHxmaW1fZW5kfD4="]
["5aea2c01c2f65ee8299f7a6d261e5b9bbdda23aa-1","5aea2c01c2f65ee8299f7a6d261e5b9bbdda23aa","PHxmaW1fcHJlZml4fD4KJycnCk1vZHVsZSBmb3IgdGhlIG1hbmFnZW1lbnQgb2YgTWFjT1Mgc3lzdGVtcyB0aGF0IHVzZSBsYXVuY2hkL2xhdW5jaGN0bAoKOmRlcGVuZHM6ICAgLSBwbGlzdGxpYiBQeXRob24gbW9kdWxlCicnJwoKIyBJbXBvcnQgcHl0aG9uIGxpYnMKaW1wb3J0IHBsaXN0bGliCgoKZGVmIF9fdmlydHVhbF9fKCk6CiAgICAnJycKICAgIE9ubHkgd29yayBvbiBNYWNPUwogICAgJycnCiAgICBpZiBfX2dyYWluc19fWydvcyddID09ICdNYWNPUyc6CiAgICAgICAgcmV0dXJuICdzZXJ2aWNlJwogICAgcmV0dXJuIEZhbHNlCgoKZGVmIGdldF9hbGwoKToKICAgICcnJwogICAgUmV0dXJuIGFsbCBpbnN0YWxsZWQgc2VydmljZXMKCiAgICBDTEkgRXhhbXBsZTo6CgogICAgICAgIHNhbHQgJyonIHNlcnZpY2UuZ2V0X2FsbAogICAgJycnCiAgICBjbWQgPSAnbGF1bmNoY3RsIGxpc3QnCjx8ZmltX2hvbGV8PgogICAgXQoKICAgIHJldHVybiBzb3J0ZWQoW2xpbmUuc3BsaXQoIlx0IilbMl0gZm9yIGxpbmUgaW4gc2VydmljZV9saW5lc10pCgoKZGVmIGdldF9sYXVuY2hjdGxfZGF0YShqb2JfbGFiZWwsIHJ1bmFzPU5vbmUpOgogICAgY21kID0gJ2xhdW5jaGN0bCBsaXN0IC14IHswfScuZm9ybWF0KGpvYl9sYWJlbCkKCiAgICBsYXVuY2hjdGxfeG1sID0gX19zYWx0X19bJ2NtZC5ydW5fYWxsJ10oY21kLCBydW5hcz1ydW5hcylbJ3N0ZGVyciddCgogICAgcmV0dXJuIGRpY3QocGxpc3RsaWIucmVhZFBsaXN0RnJvbVN0cmluZyhsYXVuY2hjdGxfeG1sKSkKCgpkZWYgc3RhdHVzKGpvYl9sYWJlbCwgcnVuYXM9Tm9uZSk6CiAgICAnJycKICAgIFJldHVybiB0aGUgc3RhdHVzIGZvciBhIHNlcnZpY2UsIHJldHVybnMgYSBib29sIHdoZXRoZXIgdGhlIHNlcnZpY2UgaXMKICAgIHJ1bm5pbmcuCgogICAgQ0xJIEV4YW1wbGU6OgoKICAgICAgICBzYWx0ICcqJyBzZXJ2aWNlLnN0YXR1cyA8c2VydmljZSBuYW1lPgogICAgJycnCiAgICBsYXVuY2hjdGxfZGF0YSA9IGdldF9sYXVuY2hjdGxfZGF0YShqb2JfbGFiZWwsIHJ1bmFzPXJ1bmFzKQoKICAgIHJldHVybiAnUElEJyBpbiBsYXVuY2hjdGxfZGF0YQoKCmRlZiBzdG9wKGpvYl9sYWJlbCwgcnVuYXM9Tm9uZSk6CiAgICAnJycKICAgIFN0b3AgdGhlIHNwZWNpZmllZCBzZXJ2aWNlCgogICAgQ0xJIEV4YW1wbGU6OgoKICAgICAgICBzYWx0ICcqJyBzZXJ2aWNlLnN0b3AgPHNlcnZpY2UgbmFtZT4KICAgICcnJwogICAgY21kID0gJ2xhdW5jaGN0bCBzdG9wIHswfScuZm9ybWF0KGpvYl9sYWJlbCkKCiAgICByZXR1cm4gX19zYWx0X19bJ2NtZC5ydW4nXShjbWQsIHJ1bmFzPXJ1bmFzKQoKCmRlZiBzdGFydChqb2JfbGFiZWwsIHJ1bmFzPU5vbmUpOgogICAgJycnCiAgICBTdGFydCB0aGUgc3BlY2lmaWVkIHNlcnZpY2UKCiAgICBDTEkgRXhhbXBsZTo6CgogICAgICAgIHNhbHQgJyonIHNlcnZpY2Uuc3RhcnQgPHNlcnZpY2UgbmFtZT4KICAgICcnJwogICAgY21kID0gJ2xhdW5jaGN0bCBzdGFydCB7MH0nLmZvcm1hdChqb2JfbGFiZWwsIHJ1bmFzPXJ1bmFzKQoKICAgIHJldHVybiBfX3NhbHRfX1snY21kLnJ1biddKGNtZCwgcnVuYXM9cnVuYXMpCgoKZGVmIHJlc3RhcnQoam9iX2xhYmVsLCBydW5hcz1Ob25lKToKICAgICcnJwogICAgUmVzdGFydCB0aGUgbmFtZWQgc2VydmljZQoKICAgIENMSSBFeGFtcGxlOjoKCiAgICAgICAgc2FsdCAnKicgc2VydmljZS5yZXN0YXJ0IDxzZXJ2aWNlIG5hbWU+CiAgICAnJycKICAgIHN0b3Aoam9iX2xhYmVsLCBydW5hcz1ydW5hcykKICAgIHJldHVybiBzdGFydChqb2JfbGFiZWwsIHJ1bmFzPXJ1bmFzKQo8fGZpbV9zdWZmaXh8PgoKICAgIHNlcnZpY2VfbGluZXMgPSBbCiAgICAgICAgbGluZSBmb3IgbGluZSBpbiBfX3NhbHRfX1snY21kLnJ1biddKGNtZCkuc3BsaXRsaW5lcygpCiAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aCgnUElEJykKPHxmaW1fZW5kfD4="]
["c1118781d873c8b13401b69dae94160fd2592930-4","c1118781d873c8b13401b69dae94160fd2592930","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCB0aW1lCgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRvcmNoCmltcG9ydCB1dGlscwpmcm9tIGhvbGRlciBpbXBvcnQgSG9sZGVyCmZyb20gdG9yY2gudXRpbHMudGVuc29yYm9hcmQgaW1wb3J0IFN1bW1hcnlXcml0ZXIKCnBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tZGV2aWNlIiwgdHlwZT1zdHIsIGRlZmF1bHQ9ImN1ZGE6MCIpCnBhcnNlci5hZGRfYXJndW1lbnQoJy0tZGF0YScsIHR5cGU9c3RyLCBkZWZhdWx0PSdQRU1TLUQ0JywgaGVscD0nZGF0YXNldCcpCnBhcnNlci5hZGRfYXJndW1lbnQoJy0tYmF0Y2hfc2l6ZScsIHR5cGU9aW50LCBkZWZhdWx0PTMyLCBoZWxwPSdiYXRjaCBzaXplJykKcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1lcG9jaHMnLCB0eXBlPWludCwgZGVmYXVsdD01MDAsIGhlbHA9J3RyYWluaW5nIGVwb2NoJykKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1zZWVkIiwgdHlwZT1pbnQsIGRlZmF1bHQ9NTIwLCBoZWxwPSdyYW5kb20gc2VlZCcpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tY2xpcCIsIHR5cGU9ZmxvYXQsIGRlZmF1bHQ9NS4sIGhlbHA9J2dyYWRpZW50IGNsaXAnKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWxyIiwgdHlwZT1mbG9hdCwgZGVmYXVsdD0wLjAwMSwgaGVscD0nbGVhcm5pbmcgcmF0ZScpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tZHJvcG91dCIsIHR5cGU9ZmxvYXQsIGRlZmF1bHQ9MC4yLCBoZWxwPSdkcm9wb3V0IHJhdGUnKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXdlaWdodF9kZWNheScsIHR5cGU9ZmxvYXQsIGRlZmF1bHQ9MC4wMDAwMSwgaGVscD0nd2VpZ2h0IGRlY2F5IHJhdGUnKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWNvbW1lbnQiLCB0eXBlPXN0ciwgZGVmYXVsdD0iUEVNUy1ENCIsCiAgICAgICAgICAgICAgICAgICAgaGVscD0nd2hldGhlciByZWNvcmRpbmcnKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLXJlY29yZGluZyIsIHR5cGU9Ym9vbCwgZGVmYXVsdD1UcnVlLCBoZWxwPSd3aGV0aGVyIHJlY29yZGluZycpCgpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLW51bV9oZWFkcyIsIHR5cGU9aW50LCBkZWZhdWx0PTgsIGhlbHA9J2hlYWRzIChHQVQpJykKcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1oaWRkZW5fZGltJywgdHlwZT1pbnQsIGRlZmF1bHQ9MTI4LCBoZWxwPSdoaWRkZW4gZGltZW5zaW9uJykKcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1vdXRfZGltJywgdHlwZT1pbnQsIGRlZmF1bHQ9MSwgaGVscD0nb3V0cHV0IGRpbWVuc2lvbicpCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tc2VxX2luIiwgdHlwZT1pbnQsIGRlZmF1bHQ9MTIsIGhlbHA9J2hpc3RvcmljYWwgbGVuZ3RoJykKcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1zZXFfb3V0IiwgdHlwZT1pbnQsIGRlZmF1bHQ9MTIsIGhlbHA9J3ByZWRpY3Rpb24gbGVuZ3RoJykKCnBhcnNlci5hZGRfYXJndW1lbnQoIi0tc3RfbGF5ZXIiLCB0eXBlPWludCwgZGVmYXVsdD0yLCBoZWxwPSdwcmVkaWN0aW9uIGxlbmd0aCcpCgpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLXNwYXRpYWxfZmFjdG9yIiwgdHlwZT1mbG9hdCwgZGVmYXVsdD01KQoKYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCmlmIGFyZ3MuZGF0YSA9PSAiUEVNUy1ENCI6CiAgICBhcmdzLmRhdGFfZmlsZSA9ICIuL2RhdGEvUEVNUy1ENCIKICAgIGFyZ3MuYWRqX2RhdGEgPSAiLi9kYXRhL3NlbnNvcl9ncmFwaC9kaXN0YW5jZV9wZW1zZDQuY3N2IgogICAgYXJncy5udW1fbm9kZSA9IDMwNwogICAgYXJncy5pbl9kaW0gPSAxCiAgICBhcmdzLnRhc2sgPSAiZmxvdyIKCgplbGlmIGFyZ3MuZGF0YSA9PSAiUEVNUy1EOCI6CiAgICBhcmdzLmRhdGFfZmlsZSA9ICIuL2RhdGEvUEVNUy1EOCIKICAgIGFyZ3MuYWRqX2RhdGEgPSAiLi9kYXRhL3NlbnNvcl9ncmFwaC9kaXN0YW5jZV9wZW1zZDguY3N2IgogICAgYXJncy5udW1fbm9kZSA9IDE3MAogICAgYXJncy5pbl9kaW0gPSAxCiAgICBhcmdzLnRhc2sgPSAiZmxvdyIKCmlmIGFyZ3MucmVjb3JkaW5nOgogICAgdXRpbHMucmVjb3JkX2luZm8oc3RyKGFyZ3MpLCAiLi9yZWNvcmRzLyIgKyBhcmdzLmNvbW1lbnQpCiAgICB1dGlscy5yZWNvcmRfaW5mbygiLS0tIiwKICAgICAgICAgICAgICAgICAgICAgICIuL3JlY29yZHMvIiArIGFyZ3MuY29tbWVudCkKICAgIHN3ID0gU3VtbWFyeVdyaXRlcihjb21tZW50PWFyZ3MuY29tbWVudCkKCnRvcmNoLm1hbnVhbF9zZWVkKGFyZ3Muc2VlZCkKPHxmaW1faG9sZXw+CmRlZiBtYWluKCk6CiAgICBkYXRhbG9hZGVyID0gdXRpbHMubG9hZF9kYXRhc2V0KGFyZ3MuZGF0YV9maWxlLCBhcmdzLmJhdGNoX3NpemUsIGFyZ3MuYmF0Y2hfc2l6ZSwgYXJncy5iYXRjaF9zaXplKQogICAgYXJncy5zY2FsZXIgPSBkYXRhbG9hZGVyWydzY2FsZXInXQoKICAgIHByaW50KHN0cihhcmdzKSkKICAgIGVuZ2luZSA9IEhvbGRlcihhcmdzKQogICAgcHJpbnQoInN0YXJ0IHRyYWluaW5nLi4uIikKCiAgICBoaXNfbG9zcyA9IFtdCiAgICB2YWxfdGltZSA9IFtdCiAgICB0cmFpbl90aW1lID0gW10KCiAgICBmb3IgZXBvY2hfbnVtIGluIHJhbmdlKGFyZ3MuZXBvY2hzICsgMSk6CiAgICAgICAgdHJhaW5fbG9zcyA9IFtdCiAgICAgICAgdHJhaW5fbWFwZSA9IFtdCiAgICAgICAgdHJhaW5fcm1zZSA9IFtdCiAgICAgICAgdDEgPSB0aW1lLnRpbWUoKQogICAgICAgIGRhdGFsb2FkZXJbJ3RyYWluX2xvYWRlciddLnNodWZmbGUoKQogICAgICAgIGZvciBpdGVyLCAoeCwgeSkgaW4gZW51bWVyYXRlKGRhdGFsb2FkZXJbInRyYWluX2xvYWRlciJdLmdldF9pdGVyYXRvcigpKToKICAgICAgICAgICAgdHJhaW5YID0gdG9yY2guVGVuc29yKHgpLnRvKGFyZ3MuZGV2aWNlKQogICAgICAgICAgICB0cmFpbnkgPSB0b3JjaC5UZW5zb3IoeSkudG8oYXJncy5kZXZpY2UpCgogICAgICAgICAgICBtZXRyaWNzID0gZW5naW5lLnRyYWluKHRyYWluWCwgdHJhaW55KQogICAgICAgICAgICB0cmFpbl9sb3NzLmFwcGVuZChtZXRyaWNzWzBdKQogICAgICAgICAgICB0cmFpbl9tYXBlLmFwcGVuZChtZXRyaWNzWzFdKQogICAgICAgICAgICB0cmFpbl9ybXNlLmFwcGVuZChtZXRyaWNzWzJdKQogICAgICAgICAgICBpZiBpdGVyICUgMjAwID09IDA6CiAgICAgICAgICAgICAgICBsb2cgPSAnSXRlcjogezowM2R9LCBUcmFpbiBMb3NzOiB7Oi40Zn0sIFRyYWluIE1BUEU6IHs6LjRmfSwgVHJhaW4gUk1TRTogezouNGZ9JwogICAgICAgICAgICAgICAgcHJpbnQobG9nLmZvcm1hdChpdGVyLCB0cmFpbl9sb3NzWy0xXSwgdHJhaW5fbWFwZVstMV0sIHRyYWluX3Jtc2VbLTFdKSwgZmx1c2g9VHJ1ZSkKICAgICAgICAgICAgICAgIGlmIGFyZ3MucmVjb3JkaW5nOgogICAgICAgICAgICAgICAgICAgIHV0aWxzLnJlY29yZF9pbmZvKGxvZy5mb3JtYXQoaXRlciwgdHJhaW5fbG9zc1stMV0sIHRyYWluX21hcGVbLTFdLCB0cmFpbl9ybXNlWy0xXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4vcmVjb3Jkcy8iICsgYXJncy5jb21tZW50KQoKICAgICAgICB0MiA9IHRpbWUudGltZSgpCiAgICAgICAgdHJhaW5fdGltZS5hcHBlbmQodDIgLSB0MSkKICAgICAgICB2YWxpZF9sb3NzID0gW10KICAgICAgICB2YWxpZF9tYXBlID0gW10KICAgICAgICB2YWxpZF9ybXNlID0gW10KCiAgICAgICAgcHJpbnQoImV2YWwuLi4iKQogICAgICAgIHMxID0gdGltZS50aW1lKCkKICAgICAgICBmb3IgaXRlciwgKHgsIHkpIGluIGVudW1lcmF0ZShkYXRhbG9hZGVyWyd0ZXN0X2xvYWRlciddLmdldF9pdGVyYXRvcigpKToKICAgICAgICAgICAgdmFseCA9IHRvcmNoLlRlbnNvcih4KS50byhhcmdzLmRldmljZSkKICAgICAgICAgICAgdmFseSA9IHRvcmNoLlRlbnNvcih5KS50byhhcmdzLmRldmljZSkKICAgICAgICAgICAgbWV0cmljcyA9IGVuZ2luZS5ldmFsKHZhbHgsIHZhbHkpCiAgICAgICAgICAgIHZhbGlkX2xvc3MuYXBwZW5kKG1ldHJpY3NbMF0pCiAgICAgICAgICAgIHZhbGlkX21hcGUuYXBwZW5kKG1ldHJpY3NbMV0pCiAgICAgICAgICAgIHZhbGlkX3Jtc2UuYXBwZW5kKG1ldHJpY3NbMl0pCgogICAgICAgIHMyID0gdGltZS50aW1lKCkKICAgICAgICBsb2cgPSAnRXBvY2g6IHs6MDNkfSwgSW5mZXJlbmNlIFRpbWU6IHs6LjRmfSBzZWNzJwogICAgICAgIHByaW50KGxvZy5mb3JtYXQoZXBvY2hfbnVtLCAoczIgLSBzMSkpKQogICAgICAgIHZhbF90aW1lLmFwcGVuZChzMiAtIHMxKQogICAgICAgIHRyYWluX2xvc3MgPSBucC5tZWFuKHRyYWluX2xvc3MpCiAgICAgICAgdHJhaW5fbWFwZSA9IG5wLm1lYW4odHJhaW5fbWFwZSkKICAgICAgICB0cmFpbl9ybXNlID0gbnAubWVhbih0cmFpbl9ybXNlKQoKICAgICAgICB2YWxpZF9sb3NzID0gbnAubWVhbih2YWxpZF9sb3NzKQogICAgICAgIHZhbGlkX21hcGUgPSBucC5tZWFuKHZhbGlkX21hcGUpCiAgICAgICAgdmFsaWRfcm1zZSA9IG5wLm1lYW4odmFsaWRfcm1zZSkKCiAgICAgICAgaWYgYXJncy5yZWNvcmRpbmc6CiAgICAgICAgICAgIHN3LmFkZF9zY2FsYXIoJ0xvc3MvdHJhaW4nLCB0cmFpbl9sb3NzLCBnbG9iYWxfc3RlcD1lcG9jaF9udW0pCiAgICAgICAgICAgIHN3LmFkZF9zY2FsYXIoJ0xvc3MvdmFsaWQnLCB2YWxpZF9sb3NzLCBnbG9iYWxfc3RlcD1lcG9jaF9udW0pCiAgICAgICAgICAgIHN3LmFkZF9zY2FsYXIoJ01BUEUvdHJhaW4nLCB0cmFpbl9tYXBlLCBnbG9iYWxfc3RlcD1lcG9jaF9udW0pCiAgICAgICAgICAgIHN3LmFkZF9zY2FsYXIoJ01BUEUvdmFsaWQnLCB2YWxpZF9tYXBlLCBnbG9iYWxfc3RlcD1lcG9jaF9udW0pCiAgICAgICAgICAgIHN3LmFkZF9zY2FsYXIoJ1JNU0UvdHJhaW4nLCB0cmFpbl9ybXNlLCBnbG9iYWxfc3RlcD1lcG9jaF9udW0pCiAgICAgICAgICAgIHN3LmFkZF9zY2FsYXIoJ1JNU0UvdmFsaWQnLCB2YWxpZF9ybXNlLCBnbG9iYWxfc3RlcD1lcG9jaF9udW0pCiAgICAgICAgbG9nID0gJ0Vwb2NoOiB7OjAzZH0sIFRyYWluIExvc3M6IHs6LjRmfSAsVHJhaW4gTUFQRTogezouNGZ9LCBUcmFpbiBSTVNFOiB7Oi40Zn0sICcgXAogICAgICAgICAgICAgICdWYWxpZCBMb3NzOiB7Oi40Zn0sICBWYWxpZCBNQVBFOiB7Oi40Zn0sIFZhbGlkIFJNU0U6IHs6LjRmfSwgVHJhaW5pbmcgVGltZTogezouNGZ9L2Vwb2NoJwogICAgICAgIHByaW50KGxvZy5mb3JtYXQoZXBvY2hfbnVtLCB0cmFpbl9sb3NzLCB0cmFpbl9tYXBlLCB0cmFpbl9ybXNlLCB2YWxpZF9sb3NzLAogICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRfbWFwZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkX3Jtc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAodDIgLSB0MSkpLAogICAgICAgICAgICAgIGZsdXNoPVRydWUpCgogICAgcHJpbnQoIkF2ZXJhZ2UgVHJhaW5pbmcgVGltZTogezouNGZ9IHNlY3MvZXBvY2giLmZvcm1hdChucC5tZWFuKHRyYWluX3RpbWUpKSkKICAgIHByaW50KCJBdmVyYWdlIEluZmVyZW5jZSBUaW1lOiB7Oi40Zn0gc2VjcyIuZm9ybWF0KG5wLm1lYW4odmFsX3RpbWUpKSkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdDEgPSB0aW1lLnRpbWUoKQogICAgbWFpbigpCiAgICB0MiA9IHRpbWUudGltZSgpCiAgICBwcmludCgiVG90YWwgdGltZSBzcGVudDogezouNGZ9Ii5mb3JtYXQodDIgLSB0MSkpCjx8ZmltX3N1ZmZpeHw+Cm5wLnJhbmRvbS5zZWVkKGFyZ3Muc2VlZCkKYXJncy5kZXZpY2UgPSB0b3JjaC5kZXZpY2UoYXJncy5kZXZpY2UpCgoKPHxmaW1fZW5kfD4="]
["ec23d7534c4b657223e0ecca3fa302fe0a83faf9-5","ec23d7534c4b657223e0ecca3fa302fe0a83faf9","PHxmaW1fcHJlZml4fD4KZGVmIGZpbmRfZmFjdG9yaWFsKG51bWJlcik6CiAgICByZXN1bHQgPSAxCiAgICBmb3IgeCBpbiByYW5nZSgxLCBudW1iZXIgKyAxKToKICAgICAgICByZXN1bHQgKj0geAo8fGZpbV9ob2xlfD4Kd2hpbGUgVHJ1ZToKICAgIG51bSA9IGlucHV0KCdFbnRlciBhIG51bWJlciB0byBmaW5kIHRoZSBmYWN0b3JpYWwgb2Y6ICcpCiAgICB0cnk6CiAgICAgICAgbnVtID0gaW50KG51bSkKICAgICAgICBpZiBudW0gPCAwOgogICAgICAgICAgICBwcmludCgnUGxlYXNlIGVudGVyIGEgcG9zaXRpdmUgaW50ZWdlci4nKQogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGJyZWFrCiAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICBwcmludCgnUGxlYXNlIGVudGVyIGEgcG9zaXRpdmUgaW50ZWdlci4nKQogICAgICAgIGNvbnRpbnVlCgpwcmludCgnVGhlIGZhY3RvcmlhbCBvZiBpcyAnICsgZmluZF9mYWN0b3JpYWwobnVtKSkKPHxmaW1fc3VmZml4fD4KICAgIHJldHVybiBzdHIocmVzdWx0KQoKPHxmaW1fZW5kfD4="]
["5ad1425b4a6cae8f6bb8b46961b0577eeae45a8e-2","5ad1425b4a6cae8f6bb8b46961b0577eeae45a8e","PHxmaW1fcHJlZml4fD4KZnJvbSBsZWV0Y29kZS5ncmFwaHFsLnF1ZXN0aW9uX2ZpZWxkcyBpbXBvcnQgUXVlc3Rpb25GaWVsZHMsIENvZGVTbmlwcGV0cwpmcm9tIGxlZXRjb2RlLmdyYXBocWwucmVxdWVzdCBpbXBvcnQgUmVxdWVzdAppbXBvcnQganNvbgppbXBvcnQgcmVxdWVzdHMKCiMgdGl0bGVfc2x1ZyA9ICJzaG9ydGVzdC13b3JkLWRpc3RhbmNlIiAgIyBQYWlkLW9ubHkgcXVlc3Rpb24KdGl0bGVfc2x1ZyA9ICJ0d28tc3VtIiAgIyBGcmVlIHF1ZXN0aW9uCgpncmFwaHFsX3JlcXVlc3QgPSBSZXF1ZXN0KHRpdGxlX3NsdWcsIGZpZWxkcz1bCiAgICBRdWVzdGlvbkZpZWxkcy5xdWVzdGlvbklkLAogICAgUXVlc3Rpb25GaWVsZHMucXVlc3Rpb25Gcm9udGVuZElkLAogICAgUXVlc3Rpb25GaWVsZHMudGl0bGUsCiAgICBRdWVzdGlvbkZpZWxkcy50aXRsZVNsdWcsCiAgICBRdWVzdGlvbkZpZWxkcy5pc1BhaWRPbmx5LAogICAgUXVlc3Rpb25GaWVsZHMuY29udGVudCwKICAgIENvZGVTbmlwcGV0cyhmaWVsZHM9WwogICAgICAgIENvZGVTbmlwcGV0cy5GaWVsZC5sYW5nLAogICAgICAgIENvZGVTbmlwcGV0cy5GaWVsZC5sYW5nU2x1ZywKICAgICAgICBDb2RlU25pcHBldHMuRmllbGQuY29kZQogICAgXSkKXSkKCnF1ZXJ5X3RleHQgPSBncmFwaHFsX3JlcXVlc3Quc2VyaWFsaXplKCkKcXVlcnlfanNvbiA9IGpzb24ubG9hZHMocXVlcnlfdGV4dCkKcHJpbnQoanNvbi5kdW1wcyhxdWVyeV9qc29uKSkKCmRlc2NyaXB0aW9uX3VybCA9IGYiaHR0cHM6Ly9sZWV0Y29kZS5jb20vcHJvYmxlbXMve3RpdGxlX3NsdWd9L2Rlc2NyaXB0aW9uIgpyID0gcmVxdWVzdHMuZ2V0KGRlc2NyaXB0aW9uX3VybCkKaWYgci5zdGF0dXNfY29kZSA9PSAyMDA6CiAgICBjc3JmX3Rva2VuX2tleSA9ICdjc3JmdG9rZW4nCiAgICBjc3JmX3Rva2VuID0gTm9uZQogICAgY29va2llcyA9IGRpY3QoKQogICAgaWYgY3NyZl90b2tlbl9rZXkgaW4gci5jb29raWVzOgogICAgICAgIGNzcmZfdG9rZW4gPSByLmNvb2tpZXNbY3NyZl90b2tlbl9rZXldCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBjb29raWVzW2NzcmZfdG9rZW5fa2V5XSA9IGNzcmZfdG9rZW4KPHxmaW1fZW5kfD4="]
["5ae61f4864d567ba48f8a9ad384721f85e67f9e5-4","5ae61f4864d567ba48f8a9ad384721f85e67f9e5",{"$cut":{"chars":22716,"head":"PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc6IHV0Zi04CiIiIgogICAgQ2lzY28gSW50ZXJzaWdodAoKICAgIENpc2NvIEludGVyc2lnaHQgaXMgYSBtYW5hZ2VtZW50IHBsYXRmb3JtIGRlbGl2ZXJlZCBhcyBhIHNlcnZpY2Ugd2l0aCBlbWJlZGRlZCBhbmFseXRpY3MgZm9yIHlvdXIgQ2lzY28gYW5kIDNyZCBwYXJ0eSBJVCBpbmZyYXN0cnVjdHVyZS4gVGhpcyBwbGF0Zm9ybSBvZmZlcnMgYW4gaW50ZWxsaWdlbnQgbGV2ZWwgb2YgbWFuYWdlbWVudCB0aGF0IGVuYWJsZXMgSVQgb3JnYW5pemF0aW9ucyB0byBhbmFseXplLCBzaW1wbGlmeSwgYW5kIGF1dG9tYXRlIHRoZWlyIGVudmlyb25tZW50cyBpbiBtb3JlIGFkdmFuY2VkIHdheXMgdGhhbiB0aGUgcHJpb3IgZ2VuZXJhdGlvbnMgb2YgdG9vbHMuIENpc2NvIEludGVyc2lnaHQgcHJvdmlkZXMgYW4gaW50ZWdyYXRlZCBhbmQgaW50dWl0aXZlIG1hbmFnZW1lbnQgZXhwZXJpZW5jZSBmb3IgcmVzb3VyY2VzIGluIHRoZSB0cmFkaXRpb25hbCBkYXRhIGNlbnRlciBhcyB3ZWxsIGFzIGF0IHRoZSBlZGdlLiBXaXRoIGZsZXhpYmxlIGRlcGxveW1lbnQgb3B0aW9ucyB0byBhZGRyZXNzIGNvbXBsZXggc2VjdXJpdHkgbmVlZHMsIGdldHRpbmcgc3RhcnRlZCB3aXRoIEludGVyc2lnaHQgaXMgcXVpY2sgYW5kIGVhc3kuIENpc2NvIEludGVyc2lnaHQgaGFzIGRlZXAgaW50ZWdyYXRpb24gd2l0aCBDaXNjbyBVQ1MgYW5kIEh5cGVyRmxleCBzeXN0ZW1zIGFsbG93aW5nIGZvciByZW1vdGUgZGVwbG95bWVudCwgY29uZmlndXJhdGlvbiwgYW5kIG9uZ29pbmcgbWFpbnRlbmFuY2UuIFRoZSBtb2RlbC1iYXNlZCBkZXBsb3ltZW50IHdvcmtzIGZvciBhIHNpbmdsZSBzeXN0ZW0gaW4gYSByZW1vdGUgbG9jYXRpb24gb3IgaHVuZHJlZHMgb2Ygc3lzdGVtcyBpbiBhIGRhdGEgY2VudGVyIGFuZCBlbmFibGVzIHJhcGlkLCBzdGFuZGFyZGl6ZWQgY29uZmlndXJhdGlvbiBhbmQgZGVwbG95bWVudC4gSXQgYWxzbyBzdHJlYW1saW5lcyBtYWludGFpbmluZyB0aG9zZSBzeXN0ZW1zIHdoZXRoZXIgeW91IGFyZSB3b3JraW5nIHdpdGggc21hbGwgb3IgdmVyeSBsYXJnZSBjb25maWd1cmF0aW9ucy4gICAjIG5vcWE6IEU1MDEKCiAgICBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4wLjktMTI5NQogICAgQ29udGFjdDogaW50ZXJzaWdodEBjaXNjby5jb20KICAgIEdlbmVyYXRlZCBieTogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoCiIiIgoKaW1wb3J0IHBwcmludAppbXBvcnQgcmUgICMgbm9xYTogRjQwMQoKaW1wb3J0IHNpeAoKZnJvbSBpbnRlcnNpZ2h0LmNvbmZpZ3VyYXRpb24gaW1wb3J0IENvbmZpZ3VyYXRpb24KCgpjbGFzcyBIeXBlcmZsZXhBbGFybUFsbE9mKG9iamVjdCk6CiAgICAiIiJOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yLgogICAgUmVmOiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gKCiAgICBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuCiAgICAiIiIKICAgICIiIgogICAgQXR0cmlidXRlczoKICAgICAgb3BlbmFwaV90eXBlcyAoZGljdCk6IFRoZSBrZXkgaXMgYXR0cmlidXRlIG5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgdmFsdWUgaXMgYXR0cmlidXRlIHR5cGUuCiAgICAgIGF0dHJpYnV0ZV9tYXAgKGRpY3QpOiBUaGUga2V5IGlzIGF0dHJpYnV0ZSBuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHZhbHVlIGlzIGpzb24ga2V5IGluIGRlZmluaXRpb24uCiAgICAiIiIKICAgIG9wZW5hcGlfdHlwZXMgPSB7CiAgICAgICAgJ2Fja25vd2xlZGdlZCc6ICdib29sJywKICAgICAgICAnYWNrbm93bGVkZ2VkX2J5JzogJ3N0cicsCiAgICAgICAgJ2Fja25vd2xlZGdlZF90aW1lJzogJ2ludCcsCiAgICAgICAgJ2Fja25vd2xlZGdlZF90aW1lX2FzX3V0Yyc6ICdzdHInLAogICAgICAgICdkZXNjcmlwdGlvbic6ICdzdHInLAogICAgICAgICdlbnRpdHlfZGF0YSc6ICdzdHInLAogICAgICAgICdlbnRpdHlfbmFtZSc6ICdzdHInLAogICAgICAgICdlbnRpdHlfdHlwZSc6ICdzdHInLAogICAgICAgICdlbnRpdHlfdXVfaWQnOiAnc3RyJywKICAgICAgICAnbWVzc2FnZSc6ICdzdHInLAogICAgICAgICduYW1lJzogJ3N0cicsCiAgICAgICAgJ3N0YXR1cyc6ICdzdHInLAogICAgICAgICd0cmlnZ2VyZWRfdGltZSc6ICdpbnQnLAogICAgICAgICd0cmlnZ2VyZWRfdGltZV9hc191dGMnOiAnc3RyJywKICAgICAgICAndXVpZCc6ICdzdHInLAogICAgICAgICdjbHVzdGVyJzogJ0h5cGVyZmxleENsdXN0ZXInCiAgICB9CgogICAgYXR0cmlidXRlX21hcCA9IHsKICAgICAgICAnYWNrbm93bGVkZ2VkJzogJ0Fja25vd2xlZGdlZCcsCiAgICAgICAgJ2Fja25vd2xlZGdlZF9ieSc6ICdBY2tub3dsZWRnZWRCeScsCiAgICAgICAgJ2Fja25vd2xlZGdlZF90aW1lJzogJ0Fja25vd2xlZGdlZFRpbWUnLAogICAgICAgICdhY2tub3dsZWRnZWRfdGltZV9hc191dGMnOiAnQWNrbm93bGVkZ2VkVGltZUFzVXRjJywKICAgICAgICAnZGVzY3JpcHRpb24nOiAnRGVzY3JpcHRpb24nLAogICAgICAgICdlbnRpdHlfZGF0YSc6ICdFbnRpdHlEYXRhJywKICAgICAgICAnZW50aXR5X25hbWUnOiAnRW50aXR5TmFtZScsCiAgICAgICAgJ2VudGl0eV90eXBlJzogJ0VudGl0eVR5cGUnLAogICAgICAgICdlbnRpdHlfdXVfaWQnOiAnRW50aXR5VXVJZCcsCiAgICAgICAgJ21lc3NhZ2UnOiAnTWVzc2FnZScsCiAgICAgICAgJ25hbWUnOiAnTmFtZScsCiAgICAgICAgJ3N0YXR1cyc6ICdTdGF0dXMnLAogICAgICAgICd0cmlnZ2VyZWRfdGltZSc6ICdUcmlnZ2VyZWRUaW1lJywKICAgICAgICAndHJpZ2dlcmVkX3RpbWVfYXNfdXRjJzogJ1RyaWdnZXJlZFRpbWVBc1V0YycsCiAgICAgICAgJ3V1aWQnOiAnVXVpZCcsCiAgICAgICAgJ2NsdXN0ZXInOiAnQ2x1c3RlcicKICAgIH0KCiAgICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICBhY2tub3dsZWRnZWQ9Tm9uZSwKICAgICAgICAgICAgICAgICBhY2tub3dsZWRn"}}]
["6be802e6d8874315cd2db1d14cff98934a39b2d3-1","6be802e6d8874315cd2db1d14cff98934a39b2d3","PHxmaW1fcHJlZml4fD4KZnJvbSAuIGltcG9ydCBzbGlkZXIKCgpjbGFzcyBQcm9ncmVzc1ZpZXcoc2xpZGVyLlNsaWRlclZpZXcpOgogICAgIiIiQSBwcm9ncmVzcyBiYXIuIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lKToKICAgICAgICBzbGlkZXIuU2xpZGVyVmlldy5fX2luaXRfXyhzZWxmLCBmcmFtZSwgc2xpZGVyLkhPUklaT05UQUwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wLCAxLjAsIHNob3dfdGh1bWI9RmFsc2UpCiAgICAgICAgc2VsZi5lbmFibGVkID0gRmFsc2UKICAgICAgICBzZWxmLnByb2dyZXNzID0gMAoKICAgIEBwcm9wZXJ0eQo8fGZpbV9ob2xlfD4KICAgIEBwcm9ncmVzcy5zZXR0ZXIKICAgIGRlZiBwcm9ncmVzcyhzZWxmLCB2YWx1ZSk6CiAgICAgICAgYXNzZXJ0IDAuMCA8PSB2YWx1ZSA8PSAxLjAKICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBwcm9ncmVzcyhzZWxmKToKICAgICAgICAiIiJwcm9ncmVzcyBpcyBpbiB0aGUgcmFuZ2UgWzAsIDFdIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlCgo8fGZpbV9lbmR8Pg=="]
["99e9b87f4df8a3e93346c872b672dc99fe44f528-1","99e9b87f4df8a3e93346c872b672dc99fe44f528","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uc2hvcnRjdXRzIGltcG9ydCByZW5kZXIsIHJlZGlyZWN0CmZyb20gcmFuZG9tIGltcG9ydCByYW5kaW50CmZyb20gLmZvcm1zIGltcG9ydCBTaG9ydFVybEZvcm0KZnJvbSAubW9kZWxzIGltcG9ydCBVcmxMaXN0CgoKIyBDcmVhdGUgeW91ciB2aWV3cyBoZXJlLgoKZGVmIGhvbWUocmVxdWVzdCk6CiAgICBjb250ZXh0ID0ge30KICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICdQT1NUJzoKICAgICAgICBmb3JtID0gU2hvcnRVcmxGb3JtKHJlcXVlc3QuUE9TVCkKICAgICAgICBpZiBub3QgZm9ybS5pc192YWxpZCgpOgogICAgICAgICAgICBjb250ZXh0ID0gewogICAgICAgICAgICAgICAgJ2Vycm9ycyc6IGZvcm0uZXJyb3JzLnZhbHVlcygpLAogICAgICAgICAgICB9CiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2hvcnRfdXJsID0gcmFuZGludCgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5KQogICAgICAgICAgICB3aGlsZSBVcmxMaXN0Lm9iamVjdHMuZmlsdGVyKFNob3J0ZW5lZFVybD1zaG9ydF91cmwpLmNvdW50KCkgIT0gMDoKICAgICAgICAgICAgICAgIHNob3J0X3VybCA9IHJhbmRpbnQoMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCwgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSkKICAgICAgICAgICAgVXJsTGlzdC5vYmplY3RzLmNyZWF0ZShPcmlnaW5hbFVybD1yZXF1ZXN0LlBPU1RbJ3VybCddLCBTaG9ydGVuZWRVcmw9c2hvcnRfdXJsKQogICAgICAgICAgICBjb250ZXh0ID0gewogICAgICAgICAgICAgICAgJ2Vycm9ycyc6IGZvcm0uZXJyb3JzLnZhbHVlcygpLAogICAgICAgICAgICAgICAgJ1Nob3J0VVJMJzogc2hvcnRfdXJsLAogICAgICAgICAgICB9CiAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICJzaG9ydGVuZXIvaG9tZS5odG1sIiwgY29udGV4dCkKCgpkZWYgdXJsX3JlZGlyZWN0KHJlcXVlc3QsIGlkKToKICAgIGlmIFVybExpc3Qub2JqZWN0cy5maWx0ZXIoU2hvcnRlbmVkVXJsPWlkKS5jb3VudCgpICE9IDA6CiAgICAgICAgZm91bmRfdXJsID0gVXJsTGlzdC5vYmplY3RzLmZpbHRlcihTaG9ydGVuZWRVcmw9aWQpLmZpcnN0KCkKPHxmaW1faG9sZXw+CiAgICBlbHNlOgogICAgICAgIGNvbnRleHQgPSB7CiAgICAgICAgICAgICdOb3RGb3VuZCc6ICJJJ20gc29ycnkgYnV0IHdlIGRpZG4ndCBoYXZlIHRoaXMgVVJMIGluIG91ciBkYXRhYmFzZS4iLAogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICJzaG9ydGVuZXIvbm90Rm91bmQuaHRtbCIsIGNvbnRleHQsIHN0YXR1cz00MDQpCgoKPHxmaW1fc3VmZml4fD4KICAgICAgICByZXR1cm4gcmVkaXJlY3QoZm91bmRfdXJsLk9yaWdpbmFsVXJsKQo8fGZpbV9lbmR8Pg=="]
["64f9552e6d00db6556c66dbcb4a2530a5cb18a1f-1","64f9552e6d00db6556c66dbcb4a2530a5cb18a1f","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgc2FsdC5jbGllbnQKCmNsaWVudCA9IHNhbHQuY2xpZW50LkxvY2FsQ2xpZW50KCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZGVmIHRlc3RfdXBkYXRlX3JlYWxtcygpOgogICAgcmV0ID0gY2xpZW50LmNtZCgndGVzdC5taW5pb24nLCAnbmV4dXMzX3JlYWxtcy51cGRhdGUnLCBbWydOZXh1c0F1dGhlbnRpY2F0aW5nUmVhbG0nLCdOZXh1c0F1dGhvcml6aW5nUmVhbG0nLCdEb2NrZXJUb2tlbiddXSkKICAgIHByaW50KHJldCkKPHxmaW1fZW5kfD4="]
["56aef953d145fa483aac32416c20e9171de82e6b-3","56aef953d145fa483aac32416c20e9171de82e6b","PHxmaW1fcHJlZml4fD4KIyBodHRwczovL2xlZXRjb2RlLmNvbS9wcm9ibGVtcy9zZWFyY2gtaW4tYS1iaW5hcnktc2VhcmNoLXRyZWUvZGVzY3JpcHRpb24vCiMKIyBhbGdvcml0aG1zCiMgRWFzeSAoNjEuNTklKQojIFRvdGFsIEFjY2VwdGVkOiAgICAxNC4xawojIFRvdGFsIFN1Ym1pc3Npb25zOiAyMi45awojIGJlYXRzIDQwLjU5JSBvZiBweXRob24gc3VibWlzc2lvbnMKCgojIERlZmluaXRpb24gZm9yIGEgYmluYXJ5IHRyZWUgbm9kZS4KIyBjbGFzcyBUcmVlTm9kZShvYmplY3QpOgojICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CiMgICAgICAgICBzZWxmLnZhbCA9IHgKPHxmaW1faG9sZXw+CiAgICBkZWYgc2VhcmNoQlNUKHNlbGYsIHJvb3QsIHZhbCk6CiAgICAgICAgIiIiCiAgICAgICAgOnR5cGUgcm9vdDogVHJlZU5vZGUKICAgICAgICA6dHlwZSB2YWw6IGludAogICAgICAgIDpydHlwZTogVHJlZU5vZGUKICAgICAgICAiIiIKICAgICAgICB3aGlsZSByb290OgogICAgICAgICAgICBpZiByb290LnZhbCA9PSB2YWw6CiAgICAgICAgICAgICAgICByZXR1cm4gcm9vdAogICAgICAgICAgICBlbGlmIHJvb3QudmFsIDwgdmFsOgogICAgICAgICAgICAgICAgcm9vdCA9IHJvb3QucmlnaHQKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJvb3QgPSByb290LmxlZnQKCiAgICAgICAgcmV0dXJuIE5vbmUKPHxmaW1fc3VmZml4fD4KIyAgICAgICAgIHNlbGYubGVmdCA9IE5vbmUKIyAgICAgICAgIHNlbGYucmlnaHQgPSBOb25lCgpjbGFzcyBTb2x1dGlvbihvYmplY3QpOgo8fGZpbV9lbmR8Pg=="]
["cf67ebd0b1b9e5cdf7c2695dc16908b4ce5c6b62-2","cf67ebd0b1b9e5cdf7c2695dc16908b4ce5c6b62","PHxmaW1fcHJlZml4fD4KIyBUaGUgZGlzdGFuY2UgdG8gdGhlIGNsb3Nlc3Qgc3RhdGlvbgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRpc3RfZWlmZmVsLm1pbigpCjx8ZmltX2VuZHw+"]
["713626289ef32b847b2bae89223efc750c5d54bc-2","713626289ef32b847b2bae89223efc750c5d54bc","PHxmaW1fcHJlZml4fD4KZnJvbSBhdXRvcmVjb24ucGx1Z2lucyBpbXBvcnQgU2VydmljZVNjYW4KCmNsYXNzIExvb2t1cFNJRChTZXJ2aWNlU2Nhbik6CgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXN1cGVyKCkuX19pbml0X18oKQo8fGZpbV9ob2xlfD4KCWRlZiBjb25maWd1cmUoc2VsZik6CgkJc2VsZi5tYXRjaF9zZXJ2aWNlKCd0Y3AnLCA0NDUsICdebWljcm9zb2Z0XC1kcycpCgoJZGVmIG1hbnVhbChzZWxmLCBzZXJ2aWNlLCBwbHVnaW5fd2FzX3J1bik6CgkJc2VydmljZS5hZGRfbWFudWFsX2NvbW1hbmQoJ0xvb2t1cCBTSURzJywgWwoJCQknbG9va3Vwc2lkLnB5IFt1c2VybmFtZV06W3Bhc3N3b3JkXUB7YWRkcmVzc30nCgkJXSkKPHxmaW1fc3VmZml4fD4KCQlzZWxmLm5hbWUgPSAnbG9va3Vwc2lkJwoJCXNlbGYudGFncyA9IFsnZGVmYXVsdCcsICdzYWZlJywgJ2FjdGl2ZS1kaXJlY3RvcnknXQoKPHxmaW1fZW5kfD4="]
["cf98d33400162677a47131e69cd18fa82fe11df4-3","cf98d33400162677a47131e69cd18fa82fe11df4","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgY2xpY2sKCmZyb20gLnN0YXR1cyBpbXBvcnQgYmVuY2htYXJrX3N0YXR1cwoKCkBjbGljay5ncm91cCgpCkBjbGljay52ZXJzaW9uX29wdGlvbigpCmRlZiBjbGkoKToKICAgIHBhc3MKCgp0cnk6CiAgICBmcm9tIHJlcHJvYmVuY2guY29yZS5zZXJ2ZXIgaW1wb3J0IGNsaSBhcyBzZXJ2ZXJfY2xpCgogICAgY2xpLmFkZF9jb21tYW5kKHNlcnZlcl9jbGkpCiAgICBjbGkuYWRkX2NvbW1hbmQoYmVuY2htYXJrX3N0YXR1cykKZXhjZXB0IEltcG9ydEVycm9yOgogICAgcGFzcwoKdHJ5OgogICAgZnJvbSByZXByb2JlbmNoLmNvcmUud29ya2VyIGltcG9ydCBjbGkgYXMgd29ya2VyX2NsaQoKICAgIGNsaS5hZGRfY29tbWFuZCh3b3JrZXJfY2xpKQpleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBwYXNzCgp0cnk6CiAgICBmcm9tIHJlcHJvYmVuY2gubWFuYWdlcnMgaW1wb3J0IGNsaSBhcyBtYW5hZ2VyX2NsaQoKICAgIGNsaS5hZGRfY29tbWFuZChtYW5hZ2VyX2NsaSkKZXhjZXB0IEltcG9ydEVycm9yOgogICAgcGFzcwoKdHJ5OgogICAgZnJvbSByZXByb2JlbmNoLmNvcmUuYW5hbHl6ZXIgaW1wb3J0IGNsaSBhcyBhbmFseXplcl9jbGkKCiAgICBjbGkuYWRkX2NvbW1hbmQoYW5hbHl6ZXJfY2xpKQpleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBwYXNzCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgY2xpKCkKPHxmaW1fZW5kfD4="]
["41e70a3bc2a631272a01685ca348c24c4b0ce83b-3","41e70a3bc2a631272a01685ca348c24c4b0ce83b",{"$cut":{"chars":21572,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBsb2dnaW5nCmltcG9ydCBkYXRldGltZSBhcyBkdAppbXBvcnQgb3MKaW1wb3J0IHN5cwppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgb3MKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAoKZnJvbSBtYXRwbG90bGliLm9mZnNldGJveCBpbXBvcnQgQW5jaG9yZWRUZXh0CmZyb20gc2NpcHkgaW1wb3J0IHN0YXRzCgppbXBvcnQgcHl0aG9uX2NvbW1vbiBhcyBkcmlweQoKCmRlZiBtYWluKGNzdl9wYXRoLCBvdXRwdXRfZm9sZGVyLCBmaWRfbGlzdD0nJywgYmluX21pbj0wLCBiaW5fbWF4PTUsCiAgICAgICAgIGJpbl9zaXplPTAuMjUsIHN0YXJ0X2R0PU5vbmUsIGVuZF9kdD1Ob25lLCBwbG90cz0nYWxsJyk6CgogICAgIiIiQ3JlYXRlIFN1bW1hcnkgSGlzdG9ncmFtIFBsb3RzIGZyb20gcHltZXRyaWMgem9uYWwgY3N2IG91dHB1dCBmaWxlcwogICAgQXJnczoKICAgICAgICBjc3ZfcGF0aCAoc3RyKTogem9uYWwgc3RhdHMgZmlsZSBwYXRoCiAgICAgICAgb3V0cHV0X2ZvbGRlciAoc3RyKTogRm9sZGVyIHBhdGggd2hlcmUgZmlsZXMgd2lsbCBiZSBzYXZlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCguLi5weW1ldHJpYy9zdW1tYXJ5X2hpc3RvZ3JhbXMpCiAgICAgICAgZmlkX2xpc3QgKGxpc3QpOiBsaXN0IG9yIHJhbmdlIG9mIEZJRHMgdG8gc2tpcAogICAgICAgIGJpbl9taW4gKGludCk6IEhpc3RvZ3JhbSBNaW5pbXVtIChkZWZhdWx0OiAwKQogICAgICAgIGJpbl9tYXggKGludCk6IEhpc3RvZ3JhbSBNYXggKGRlZmF1bHQ6IDUpCiAgICAgICAgYmluX3NpemUgKGludCk6IEhpc3RvZ3JhbSBiaW4gc2l6ZSAoZGVmYXVsdDogMC4yNSkKICAgICAgICBzdGFydF9kdCA6IGRhdGV0aW1lIChzdGFydCBkYXRlOyBvcHRpb25hbCkKICAgICAgICBlbmRfZHQgOiBkYXRldGltZSAoZW5kIGRhdGU7IG9wdGlvbmFsKQogICAgICAgIHBsb3RzIChzdHIpOiBPdXRwdXQgcGxvdCBvcHRpb25zOiBhbGwsIGFjcmVhZ2UsIG9yIGZpZWxkIChkZWZhdWx0OiBhbGwpCiAgICBSZXR1cm5zOgogICAgICAgIE5vbmUKICAgICIiIgogICAgbG9nZ2luZy5pbmZvKCdcblJlYWRpbmcgaW5wdXQgY3N2IGZpbGU6IHt9Jy5mb3JtYXQoY3N2X3BhdGgpKQoKICAgICMgQ2hlY2sgaWYgY3N2IGZpbGUgZXhpc3QKICAgIGlmIG5vdCBjc3ZfcGF0aDoKICAgICAgICBsb2dnaW5nLmVycm9yKAogICAgICAgICAgICAnRVJST1I6IGNzdiBmaWxlIGRvZXMgbm90IGV4aXN0JykKICAgICAgICBzeXMuZXhpdCgpCiAgICAjIEF0dGVtcHQgdG8gcmVhZCBjc3ZfZmlsZQogICAgdHJ5OgogICAgICAgIGlucHV0X2RmID0gcGQucmVhZF9jc3YoY3N2X3BhdGgsIHNlcD0nLCcpCiAgICBleGNlcHQ6CiAgICAgICAgbG9nZ2luZy5lcnJvcignRXJyb3IgcmVhZGluZyBmaWxlLiBDaGVjayBjc3YgcGF0aC4nKQogICAgICAgIHN5cy5leGl0KCkKCiAgICAjIENyZWF0ZSBPdXRwdXQgRm9sZGVyIGlmIGl0IGRvZXNuJ3QgZXhpc3QKICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKG91dHB1dF9mb2xkZXIpOgogICAgICAgIG9zLm1ha2VkaXJzKG91dHB1dF9mb2xkZXIpCgogICAgIyBGaWx0ZXIgRklEcyBiYXNlZCBvbiBmaWRfbGlzdCAoZGVmYXVsdCBbXSkKICAgIGZpZF9za2lwbGlzdCA9IFtdCiAgICBpZiBmaWRfbGlzdDoKICAgICAgICBmaWRfc2tpcGxpc3QgPSBzb3J0ZWQobGlzdChkcmlweS5wYXJzZV9pbnRfc2V0KGZpZF9saXN0KSkpCiAgICAgICAgbG9nZ2luZy5pbmZvKCdTa2lwcGluZyBGSURzOiB7fScuZm9ybWF0KGZpZF9za2lwbGlzdCkpCiAgICAgICAgaW5wdXRfZGYgPSBpbnB1dF9kZlt+aW5wdXRfZGZbJ0ZJRCddLmlzaW4oZmlkX3NraXBsaXN0KV0KCiAgICBpZiAoc3RhcnRfZHQgYW5kIG5vdCBlbmRfZHQpIG9yIChlbmRfZHQgYW5kIG5vdCBzdGFydF9kdCk6CiAgICAgICAgbG9nZ2luZy5lcnJvcignXG5QbGVhc2UgU3BlY2lmeSBCb3RoIFN0YXJ0IGFuZCBFbmQgRGF0ZTonCiAgICAgICAgICAgICAgICAgICAgICAnXG5TdGFydCBEYXRlOiB7fScKICAgICAgICAgICAgICAgICAgICAgICdcbkVuZCBEYXRlOiB7fScuZm9ybWF0KHN0YXJ0X2R0LCBlbmRfZHQpKQogICAgICAgIHN5cy5leGl0KCkKCiAgICBpZiAoc3RhcnRfZHQgYW5kIGVuZF9kdCkgYW5kIChlbmRfZHQgPCBzdGFydF9kdCk6CiAgICAgICAgbG9nZ2luZy5lcnJvcignRW5kIGRhdGUgY2Fubm90IGJlIGJlZm9yZSBzdGFydCBkYXRlLicKICAgICAgICAgICAgICAgICAgICAgICcgRXhpdGluZy4nKQogICAgICAgIHN5cy5leGl0KCkKCiAgICAjIEZpbHRlciBkYXRhc2V0IGlmIHN0YXJ0IGFuZCBlbmQgZGF0ZXMgYXJlIHNwZWNpZmllZAogICAgaWYgc3RhcnRfZHQgYW5kIGVuZF9kdDoKICAgICAgICBpZiAnREFURScgaW4gaW5wdXRfZGYuY29sdW1uczoKICAgICAgICAgICAgaW5wdXRfZGZbJ0RBVEUnXSA9IHBkLnRvX2RhdGV0aW1lKGlucHV0X2RmWydEQVRFJ10pCiAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnXG5GaWx0ZXJpbmcgQnkgRGF0ZS4gU3RhcnQ6IHs6JVktJW0tJWR9LCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAnRW5kOiB7OiVZLSVtLSVkfScuZm9ybWF0KHN0YXJ0X2R0LCBlbmRfZHQpKQogICAgICAgICAgICBpbnB1dF9kZiA9IGlucHV0X2RmWyhpbnB1dF9kZlsnREFURSddID49IHN0YXJ0X2R0KSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0X2RmWydEQVRFJ10gPD0gZW5kX2R0KV0KICAgICAgICAgICAgaWYgaW5wdXRfZGYuZW1wdHk6CiAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCdEYXRlIEZpbHRlciBSZW1vdmVkIEFsbCBEYXRhLiBFeGl0aW5nLicpCiAgICAgICAgICAgICAgICBzeXMuZXhpdCgpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgbG9nZ2luZy5lcnJvcignQ2Fubm90IEFwcGx5IEN1c3RvbSBEYXRlIFJhbmdlIE9uIE1vbnRobHkgT1IgQW5udWFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgRGF0YXNldHMuIFxuVXNlIERhaWx5IE91dHB1dC4gRXhpdGlu"}}]
["7a590aa25ce4ea3f8a58ccf941305bd5d925a8d2-1","7a590aa25ce4ea3f8a58ccf941305bd5d925a8d2","PHxmaW1fcHJlZml4fD4KIiIiClBST0QgRU5WSVJPTk1FTlQgU0VUVElOR1MKIiIiCgpmcm9tIC5zZXR0aW5nc19jb21tb24gaW1wb3J0ICogICMgSU1QT1JUIENPTU1PTiBTRVRUSU5HUwoKQUxMT1dFRF9IT1NUUyA9IFsnZnBsbWFuYWdlci5oZXJva3VhcHAuY29tJ10gIyBbJ2FyY2FuZS1hbmNob3JhZ2UtMTUwNDkuaGVyb2t1YXBwLmNvbSddICAjIHByb2QKCiMgQVdTIFMzIGJ1Y2tldCBjcmVkZW50aWFscwpBV1NfU1RPUkFHRV9CVUNLRVRfTkFNRSA9IG9zLmVudmlyb24uZ2V0KCdBV1NfQlVDS0VUX05BTUUnKQpBV1NfUzNfUkVHSU9OX05BTUUgPSBvcy5lbnZpcm9uLmdldCgnQVdTX0JVQ0tFVF9SRUdJT04nKQpBV1NfQUNDRVNTX0tFWV9JRCA9IG9zLmVudmlyb24uZ2V0KCdBV1NfQlVDS0VUX0FDQ0VTU19LRVlfSUQnKQpBV1NfU0VDUkVUX0FDQ0VTU19LRVkgPSBvcy5lbnZpcm9uLmdldCgnQVdTX0JVQ0tFVF9TRUNSRVRfQUNDRVNTX0tFWScpIAoKIyBBV1MgUzMgYnVja2V0IHNldHRpbmdzCkFXU19TM19DVVNUT01fRE9NQUlOID0gJyVzLnMzLmFtYXpvbmF3cy5jb20nICUgQVdTX1NUT1JBR0VfQlVDS0VUX05BTUUKPHxmaW1faG9sZXw+CkRFRkFVTFRfRklMRV9TVE9SQUdFID0gJ2N1c3RvbV9zdG9yYWdlcy5NZWRpYVN0b3JhZ2UnCgojIFByb2R1Y3Rpb24gRGF0YWJhc2UKREFUQUJBU0VTID0gewogICAgJ2RlZmF1bHQnOiB7CiAgICAgICAgJ0VOR0lORSc6ICdkamFuZ28uZGIuYmFja2VuZHMucG9zdGdyZXNxbCcsCiAgICAgICAgJ05BTUUnOiBvcy5lbnZpcm9uLmdldCgnUFJPRF9EQl9OQU1FJyksCiAgICAgICAgJ1VTRVInOiBvcy5lbnZpcm9uLmdldCgnUFJPRF9EQl9VU0VSJyksCiAgICAgICAgJ1BBU1NXT1JEJzogb3MuZW52aXJvbi5nZXQoJ1BST0RfREJfUEFTU1dPUkQnKSwKICAgICAgICAnSE9TVCc6IG9zLmVudmlyb24uZ2V0KCdQUk9EX0RCX0hPU1QnKSwKICAgICAgICAnUE9SVCc6IDU0MzIsCiAgICB9Cn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgIyBzZWN1cml0eSB0aXBzIGZyb20gaHR0cHM6Ly9yZXZlcnNlcHl0aG9uLm5ldC9sYWIvZGphbmdvLXdlYi1zZWN1cml0eS1jaGVja2xpc3QtZGVwbG95bWVudC8KU0VDVVJFX0hTVFNfU0VDT05EUyA9IDE4NzY4MDAwICAjIH42IG1vbnRocwpTRUNVUkVfSFNUU19JTkNMVURFX1NVQkRPTUFJTlMgPSBUcnVlClNFQ1VSRV9IU1RTX1BSRUxPQUQgPSBUcnVlCgpTRUNVUkVfQlJPV1NFUl9YU1NfRklMVEVSID0gVHJ1ZQpTRUNVUkVfQ09OVEVOVF9UWVBFX05PU05JRkYgPSBUcnVlCgpTRUNVUkVfU1NMX1JFRElSRUNUID0gVHJ1ZQoKQ1NSRl9DT09LSUVfU0VDVVJFID0gVHJ1ZSAjdG8gYXZvaWQgdHJhbnNtaXR0aW5nIHRoZSBDU1JGIGNvb2tpZSBvdmVyIEhUVFAgYWNjaWRlbnRhbGx5LgpTRVNTSU9OX0NPT0tJRV9TRUNVUkUgPSBUcnVlICN0byBhdm9pZCB0cmFuc21pdHRpbmcgdGhlIHNlc3Npb24gY29va2llIG92ZXIgSFRUUCBhY2NpZGVudGFsbHkuCgpYX0ZSQU1FX09QVElPTlMgPSAnREVOWScKPHxmaW1fc3VmZml4fD4KQVdTX0RFRkFVTFRfQUNMID0gTm9uZQpTVEFUSUNGSUxFU19MT0NBVElPTiA9ICdzdGF0aWMnClNUQVRJQ0ZJTEVTX1NUT1JBR0UgPSAnY3VzdG9tX3N0b3JhZ2VzLlN0YXRpY1N0b3JhZ2UnCk1FRElBRklMRVNfTE9DQVRJT04gPSAnbWVkaWEnCjx8ZmltX2VuZHw+"]
["cfc91670c319ddf6f72aecf84462f1a3000566d3-1","cfc91670c319ddf6f72aecf84462f1a3000566d3","PHxmaW1fcHJlZml4fD4KZGVmIGJ1YmJsZV9zb3J0KGE6IGxpc3QpOgogICAgbiA9IGxlbihhKQogICAgZm9yIF8gaW4gcmFuZ2Uobik6CiAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobi0xKToKICAgICAgICAgICAgaWYgYVtpXSA+IGFbaSsxXToKICAgICAgICAgICAgICAgIGFbaV0sIGFbaSsxXSA9IGFbaSsxXSwgYVtpXSAjIOOCueODr+ODg+ODlwo8fGZpbV9ob2xlfD4KbCA9IFsxMjgsNiwxLDIyLDIsLTEyLDM0LDI5MywyMDgsMTQsNyw2NywtMTIzLDUsMTY2LDQzXQoKcHJpbnQoYnViYmxlX3NvcnQobCkpCjx8ZmltX3N1ZmZpeHw+CiAgICByZXR1cm4gYQoKPHxmaW1fZW5kfD4="]
["8ffe257833975087a05e931a9a684301f155b854-3","8ffe257833975087a05e931a9a684301f155b854","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIyMgLSotIGNvZGluZzogdXRmLTggLSotCgpmcm9tIG5zY2wuZGF0YXNldHMgaW1wb3J0IGdldF9hdmFpbGFibGVfZGF0YXNldHMsIGluaXRpYWxpemVfZGF0YXNldCwgZ2V0X2RhdGFzZXRfYnVpbGRlcgpmcm9tIGNsZXZyZXIuZGF0YXNldF9jbGV2cmVyIGltcG9ydCBidWlsZF9jbGV2cmVyX2RhdGFzZXQgIApmcm9tIG9wdHMgaW1wb3J0IGxvYWRfcGFyYW1fcGFyc2VyIAoKYXJncyA9IGxvYWRfcGFyYW1fcGFyc2VyKCkKaW5pdGlhbGl6ZV9kYXRhc2V0KGFyZ3MuZGF0YXNldCwgYXJncy52ZXJzaW9uKQojIHRyYWluX2RhdGFzZXQgPSBidWlsZF9jbGV2cmVyX2RhdGFzZXQoYXJncywgJ3RyYWluJykKIyB0cmFpbl9kYXRhbG9hZGVyID0gdHJhaW5fZGF0YXNldC5tYWtlX2RhdGFsb2FkZXIoYXJncy5iYXRjaF9zaXplLCBzaHVmZmxlPUZhbHNlLCBkcm9wX2xhc3Q9VHJ1ZSwgbnJfd29ya2Vycz1hcmdzLmRhdGFfd29ya2VycykKCiMgcHJpbnQoIkRhdGFzZXQgVHJhaW4gbGVuID0ge30iLmZvcm1hdChsZW4odHJhaW5fZGF0YXNldCkpKQojIHRyYWluX2l0ZXIgPSBpdGVyKHRyYWluX2RhdGFsb2FkZXIpCiMgY3VyX2l0ZXIgPSAwCiMgd2hpbGUgVHJ1ZToKIyAgICAgdHJ5OgojICAgICAgICAgZmVlZF9kaWN0ID0gbmV4dCh0cmFpbl9pdGVyKQojICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjogCiMgICAgICAgICBicmVhawojICAgICBleGNlcHQ6CiMgICAgICAgICBwcmludCgiRmFpbGVkIHRvIGxvYWQgaXRlbSB7fSIuZm9ybWF0KGN1cl9pdGVyKSkKPHxmaW1faG9sZXw+CkZhaWxlZCB0byBsb2FkIGl0ZW0gMjE0NgpGYWlsZWQgdG8gbG9hZCBpdGVtIDIyODAKRmFpbGVkIHRvIGxvYWQgaXRlbSAyNTI3CkZhaWxlZCB0byBsb2FkIGl0ZW0gMjc2OApGYWlsZWQgdG8gbG9hZCBpdGVtIDI5NTUKIiIiCgp0cmFpbl9kYXRhc2V0ID0gYnVpbGRfY2xldnJlcl9kYXRhc2V0KGFyZ3MsICd2YWxpZGF0aW9uJykKdHJhaW5fZGF0YWxvYWRlciA9IHRyYWluX2RhdGFzZXQubWFrZV9kYXRhbG9hZGVyKGFyZ3MuYmF0Y2hfc2l6ZSwgc2h1ZmZsZT1GYWxzZSwgZHJvcF9sYXN0PVRydWUsIG5yX3dvcmtlcnM9YXJncy5kYXRhX3dvcmtlcnMpCgpwcmludCgiRGF0YXNldCBWYWwgbGVuID0ge30iLmZvcm1hdChsZW4odHJhaW5fZGF0YXNldCkpKQp0cmFpbl9pdGVyID0gaXRlcih0cmFpbl9kYXRhbG9hZGVyKQpjdXJfaXRlciA9IDAKd2hpbGUgVHJ1ZToKICAgIHRyeToKICAgICAgICBmZWVkX2RpY3QgPSBuZXh0KHRyYWluX2l0ZXIpCiAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjogCiAgICAgICAgYnJlYWsKICAgIGV4Y2VwdDoKICAgICAgICBwcmludCgiRmFpbGVkIHRvIGxvYWQgaXRlbSB7fSIuZm9ybWF0KGN1cl9pdGVyKSkKICAgIGN1cl9pdGVyICs9IDEKICAgICAgICAKCnRyYWluX2RhdGFzZXQgPSBidWlsZF9jbGV2cmVyX2RhdGFzZXQoYXJncywgJ3Rlc3QnKQp0cmFpbl9kYXRhbG9hZGVyID0gdHJhaW5fZGF0YXNldC5tYWtlX2RhdGFsb2FkZXIoYXJncy5iYXRjaF9zaXplLCBzaHVmZmxlPUZhbHNlLCBkcm9wX2xhc3Q9VHJ1ZSwgbnJfd29ya2Vycz1hcmdzLmRhdGFfd29ya2VycykKCnByaW50KCJEYXRhc2V0IFRlc3QgbGVuID0ge30iLmZvcm1hdChsZW4odHJhaW5fZGF0YXNldCkpKQp0cmFpbl9pdGVyID0gaXRlcih0cmFpbl9kYXRhbG9hZGVyKQpjdXJfaXRlciA9IDAKd2hpbGUgVHJ1ZToKICAgIHRyeToKICAgICAgICBmZWVkX2RpY3QgPSBuZXh0KHRyYWluX2l0ZXIpCiAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjogCiAgICAgICAgYnJlYWsKICAgIGV4Y2VwdDoKICAgICAgICBwcmludCgiRmFpbGVkIHRvIGxvYWQgaXRlbSB7fSIuZm9ybWF0KGN1cl9pdGVyKSkKICAgIGN1cl9pdGVyICs9IDEKICAgICAgICAKPHxmaW1fc3VmZml4fD4KIyAgICAgY3VyX2l0ZXIgKz0gMQogICAgICAgIAoiIiIKRmFpbGVkIHRvIGxvYWQgaXRlbSA5OTEKPHxmaW1fZW5kfD4="]
["a4461155e52dc57316611f3bfb117abfd23475c7-2","a4461155e52dc57316611f3bfb117abfd23475c7",{"$cut":{"chars":24820,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMKIyBDb3B5cmlnaHQgKGMpIDIwMTkgT3B0aWNrcyBUZWFtLiBBbGwgUmlnaHRzIFJlc2VydmVkLgojCiMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgT3B0aWNrcwojIChzZWUgaHR0cHM6Ly9iaXRidWNrZXQub3JnL3NpbW9uY2JseXRoL29wdGlja3MpLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gIAojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICAKIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiIKCmR2LnB5Cj09PT09PQoKCk5vbi1hbGlnbmVkIGRldmlhdGlvbiBjaGVja2luZwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCjo6CgogICAgdHAoKSB7IHRib29sZWFuLTtQUk9YWUxWPTE4IHRib29sZWFuLXByb3h5LWlwICQqIDsgfQoKICAgIGFiLnJwb3N0X2R2IG1heGR2bWF4OiAwLjAyMjgzIG1heGR2OiAwLjAyMjgzICAgICAgICAwICAwLjAyMjgzICBza2lwOlNDIEFCIFJFCiAgICAgIGlkeCAgICAgICAgbXNnIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsIDogICAgbGN1MSAgICAgbGN1MiAgOiAgICAgICBuaXRlbSAgICAgbmVsZW0vICAgIG5kaXNjOiBmZGlzYyAgbXgvbW4vYXYgICAgICAgIG14LyAgICAgICBtbi8gICAgICBhdmcgIGVwczplcHMgICAgCiAgICAgMDAwMCAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgIFRPIEJUIEJUIFNBIDogICAgODc5NCAgICAgODc5NCAgOiAgICAgICAgNzcxMCAgICAxMjMzNjAvICAgICAgIDE3OiAwLjAwMCAgbXgvbW4vYXYgICAwLjAyMjgzLyAgICAgICAgMC8xLjcwNWUtMDYgIGVwczowLjAwMDIgICAgCiAgICAgMDAwMSAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgIFRPIEJSIFNBIDogICAgIDU4MCAgICAgIDYxNyAgOiAgICAgICAgICAzMyAgICAgICAzOTYvICAgICAgICAwOiAwLjAwMCAgbXgvbW4vYXYgICAgICAgICAwLyAgICAgICAgMC8gICAgICAgIDAgIGVwczowLjAwMDIgICAgCiAgICAgMDAwMiAgICAgICAgICAgIDogICAgICAgICAgICAgICAgIFRPIEJUIEJSIEJUIFNBIDogICAgIDU2MSAgICAgIDUyNyAgOiAgICAgICAgICAyNyAgICAgICA1NDAvICAgICAgICAxOiAwLjAwMiAgbXgvbW4vYXYgICAwLjAyMjgzLyAgICAgICAgMC80LjIyN2UtMDUgIGVwczowLjAwMDIgICAgCiAgICBhYi5ycG9sX2R2IG1heGR2bWF4OiAgICAgICAwIG1heGR2OiAgICAgICAwICAgICAgICAwICAgICAgICAwICBza2lwOlNDIEFCIFJFCiAgICAgIGlkeCAgICAgICAgbXNnIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsIDogICAgbGN1MSAgICAgbGN1MiAgOiAgICAgICBuaXRlbSAgICAgbmVsZW0vICAgIG5kaXNjOiBmZGlzYyAgbXgvbW4vYXYgICAgICAgIG14LyAgICAgICBtbi8gICAgICBhdmcgIGVwczplcHMgICAgCiAgICAgMDAwMCAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgIFRPIEJUIEJUIFNBIDogICAgODc5NCAgICAgODc5NCAgOiAgICAgICAgNzcxMCAgICAgOTI1MjAvICAgICAgICAwOiAwLjAwMCAgbXgvbW4vYXYgICAgICAgICAwLyAgICAgICAgMC8gICAgICAgIDAgIGVwczowLjAwMDIgICAgCiAgICAgMDAwMSAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgIFRPIEJSIFNBIDogICAgIDU4MCAgICAgIDYxNyAgOiAgICAgICAgICAzMyAgICAgICAyOTcvICAgICAgICAwOiAwLjAwMCAgbXgvbW4vYXYgICAgICAgICAwLyAgICAgICAgMC8gICAgICAgIDAgIGVwczowLjAwMDIgICAgCiAgICAgMDAwMiAgICAgICAgICAgIDogICAgICAgICAgICAgICAgIFRPIEJUIEJSIEJUIFNBIDogICAgIDU2MSAgICAgIDUyNyAgOiAgICAgICAgICAyNyAgICAgICA0MDUvICAgICAgICAwOiAwLjAwMCAgbXgvbW4vYXYgICAgICAgICAwLyAgICAgICAgMC8gICAgICAgIDAgIGVwczowLjAwMDIgICAgCiAgICBhYi5veF9kdiBtYXhkdm1heDogMC4wMDIzOCBtYXhkdjowLjAwMDEyMjEgICAgICAgIDAgIDAuMDAyMzggIHNraXA6U0MgQUIgUkUKICAgICAgaWR4ICAgICAgICBtc2cgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWwgOiAgICBsY3UxICAgICBsY3UyICA6ICAgICAgIG5pdGVtICAgICBuZWxlbS8gICAgbmRpc2M6IGZkaXNjICBteC9tbi9hdiAgICAgICAgbXgvICAgICAgIG1uLyAgICAgIGF2ZyAgZXBzOmVwcyAgICAKICAgICAwMDAwICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgVE8gQlQgQlQgU0EgOiAgICA4Nzk0ICAgICA4Nzk0ICA6ICAgICAgICA3NzEwICAgICA5MjUyMC8gICAgICAgIDA6IDAuMDAwICBteC9tbi9hdiAwLjAwMDEyMjEvICAgICAgICAwLzMuNjUyZS0wNiAgZXBzOjAuMDAwMiAgICAKICAgICAwMDAxICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgVE8gQlIgU0EgOiAgICAgNTgwICAgICAgNjE3ICA6ICAgICAgICAgIDMzICAgICAgIDM5Ni8gICAgICAgIDA6IDAuMDAwICBteC9tbi9hdiAgICAgICAgIDAvICAgICAgICAwLyAgICAgICAgMCAgZXBzOjAuMDAwMiAgICAKICAgICAwMDAyICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgVE8gQlQgQlIgQlQgU0EgOiAgICAgNTYxICAgICAgNTI3ICA6"}}]
["a47e4d42d220e77e3967d5f4b6d358495633ff67-1","a47e4d42d220e77e3967d5f4b6d358495633ff67","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGt3YW50CmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBwaWNrbGUKZnJvbSBuYW5vd2lyZS5uYW5vd2lyZSBpbXBvcnQgTmFub3dpcmUKZnJvbSBzaW11bGF0ZS51cGRhdGVfY3N2IGltcG9ydCB1cGRhdGVfY3N2CmZyb20gc2ltdWxhdGUuZ2V0X3BhcmFtZXRlcnMgaW1wb3J0IGdldF9zY3JhdGNoLCBnZXRfeW1sCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgb3MKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgeWFtbAoKCmRlZiBzYXZlX21vZGVsX2ZpZ3VyZShuYW5vd2lyZSwgc3VmZml4LCBkYXRhX2ZvbGRlcik6CiAgICBmaWcgPSBwbHQuZmlndXJlKCkKICAgIGZpZy5zdXB0aXRsZSgiTW9kZWwgZ3JpZCwgYW5kIG5hbm9tYWduZXQgZmllbGRzIikKICAgIGF4X21vZGVsID0gZmlnLmFkZF9zdWJwbG90KDMsIDEsIDEpCiAgICBheF9tb2RlbC5heGlzKCJlcXVhbCIpCiAgICBheF94ID0gZmlnLmFkZF9zdWJwbG90KDMsIDEsIDIpCiAgICBheF95ID0gZmlnLmFkZF9zdWJwbG90KDMsIDEsIDMpCiAgICBuYW5vd2lyZS5wbG90KGF4X21vZGVsLCBheF94LCBheF95KQogICAgYXhfbW9kZWwuc2V0X3lsYWJlbChyIkxlbmd0aCAoJFxBQSQpIikKICAgIGF4X3guc2V0X3lsYWJlbChyIiRNX3gkIikKICAgIGF4X3kuc2V0X3lsYWJlbChyIiRNX3kkIikKICAgIGF4X3kuc2V0X3hsYWJlbChyIkxlbmd0aCAoJFxBQSQpIikKICAgIHhsaW0gPSBmaWcuZ2NhKCkuZmlndXJlLmF4ZXNbMF0uZGF0YUxpbS5pbnRlcnZhbHgKICAgIHBsdC54bGltKHhsaW0pCiAgICBwbHQuc2F2ZWZpZyhkYXRhX2ZvbGRlciArICIvbW9kZWxmaWcvIiArIHN1ZmZpeCArICIucG5nIikKICAgIHBsdC5jbG9zZSgpCgoKZGVmIHNwZWN0cnVtKHNwZWN0cnVtX2RhdGEsIHN1ZmZpeCwgZGF0YV9mb2xkZXIpOgogICAgcGlja2xlLmR1bXAoCiAgICAgICAgc3BlY3RydW1fZGF0YSwgb3BlbihkYXRhX2ZvbGRlciArICIvc3BlYy9zcGVjXyIgKyBzdWZmaXggKyAiLmRhdCIsICJ3YiIpCiAgICApCgogICAgZmlnID0gcGx0LmZpZ3VyZSgpCiAgICBwbHQucmNQYXJhbXNbImZpZ3VyZS5maWdzaXplIl0gPSAoNywgNSkKICAgIGF4ID0gZmlnLmdjYSgpCiAgICBheC5wbG90KHNwZWN0cnVtX2RhdGFbIkIiXSwgc3BlY3RydW1fZGF0YVsiRSJdKQogICAgYXguc2V0X3hsYWJlbCgiWmVlbWFuIEZpZWxkIFN0cmVuZ3RoIChUKSIpCiAgICBheC5zZXRfeWxhYmVsKCJFbmVyZ2llcyAoZVYpIikKICAgIHBsdC50aWNrbGFiZWxfZm9ybWF0KGF4aXM9ImJvdGgiLCBzdHlsZT0ic2NpIiwgc2NpbGltaXRzPSgwLCAwKSkKICAgIGZpZy5zYXZlZmlnKGRhdGFfZm9sZGVyICsgIi9maWctc3BlY3RydW0vbW9kZWwiICsgc3VmZml4ICsgIi5wbmciKQogICAgcGx0LmNsb3NlKGZpZykKICAgIHJldHVybiBzcGVjdHJ1bV9kYXRhWyJDcml0QiJdCgoKZGVmIG1hZ25ldGl6YXRpb25fc3BlY3RydW0oc3BlY3RydW1fZGF0YSwgc3VmZml4LCBkYXRhX2ZvbGRlcik6CiAgICBwaWNrbGUuZHVtcCgKICAgICAgICBzcGVjdHJ1bV9kYXRhLCBvcGVuKGRhdGFfZm9sZGVyICsgIi9zcGVjL3NwZWNfIiArIHN1ZmZpeCArICIuZGF0IiwgIndiIikKICAgICkKCiAgICBmaWcgPSBwbHQuZmlndXJlKCkKICAgIHBsdC5yY1BhcmFtc1siZmlndXJlLmZpZ3NpemUiXSA9ICg3LCA1KQogICAgYXggPSBmaWcuZ2NhKCkKICAgIGF4LnBsb3Qoc3BlY3RydW1fZGF0YVsiTSJdLCBzcGVjdHJ1bV9kYXRhWyJFIl0pCiAgICBheC5zZXRfeGxhYmVsKCJNYWduZXRpemF0aW9uIChUKSIpCiAgICBheC5zZXRfeWxhYmVsKCJFbmVyZ2llcyAoZVYpIikKICAgIHBsdC50aWNrbGFiZWxfZm9ybWF0KGF4aXM9ImJvdGgiLCBzdHlsZT0ic2NpIiwgc2NpbGltaXRzPSgwLCAwKSkKICAgIGZpZy5zYXZlZmlnKGRhdGFfZm9sZGVyICsgIi9maWctc3BlY3RydW0vbW9kZWwiICsgc3VmZml4ICsgIi5wbmciKQogICAgcGx0LmNsb3NlKGZpZykKICAgIHJldHVybiBzcGVjdHJ1bV9kYXRhWyJDcml0TSJdCgoKZGVmIGNvbmR1Y3RhbmNlKGNvbmR1Y3RhbmNlX2RhdGEsIHN1ZmZpeCwgZGF0YV9mb2xkZXIpOgogICAgcGlja2xlLmR1bXAoCiAgICAgICAgY29uZHVjdGFuY2VfZGF0YSwgb3BlbihkYXRhX2ZvbGRlciArICIvY29uZC9jb25kXyIgKyBzdWZmaXggKyAiLmRhdCIsICJ3YiIpCiAgICApCgogICAgZmlnID0gcGx0LmZpZ3VyZSgpCiAgICBwbHQucmNQYXJhbXNbImZpZ3VyZS5maWdzaXplIl0gPSAoOCwgNSkKICAgIGF4ID0gZmlnLmdjYSgpCiAgICBjb250b3VyID0gYXguY29udG91cmYoCiAgICAgICAgY29uZHVjdGFuY2VfZGF0YVsiQiJdLAogICAgICAgIGNvbmR1Y3RhbmNlX2RhdGFbIkJpYXNWIl0sCiAgICAgICAgY29uZHVjdGFuY2VfZGF0YVsiQ29uZCJdLAogICAgICAgIDEwMCwKICAgICAgICBjbWFwPSJ2aXJpZGlzIiwKICAgICkKICAgIGF4LnNldF94bGFiZWwoIlplZW1hbiBGaWVsZCBTdHJlbmd0aCAoVCkiKQogICAgYXguc2V0X3lsYWJlbCgiQmlhcyAoVikiKQogICAgY2JhciA9IHBsdC5jb2xvcmJhcihjb250b3VyKQogICAgY2Jhci5heC5zZXRfeWxhYmVsKCJDb25kdWN0YW5jZSBbZV4yL2hdIikKICAgIHBsdC50aWNrbGFiZWxfZm9ybWF0KGF4aXM9ImJvdGgiLCBzdHlsZT0ic2NpIiwgc2NpbGltaXRzPSgwLCAwKSkKICAgIGZpZy5zYXZlZmlnKGRhdGFfZm9sZGVyICsgIi9maWctY29uZHVjdGFuY2UvbW9kZWwiICsgc3VmZml4ICsgIi5wbmciKQogICAgcGx0LmNsb3NlKGZpZykKICAgIHJldHVybiBjb25kdWN0YW5jZV9kYXRhWyJDcml0QiJdCgoKZGVmIGluZGl2aWR1YWxfY29uZHVjdGFuY2UoZGF0YSwgc3VmZml4LCBkYXRhX2ZvbGRlciwgaW5kZXhfc2xpY2U9MzApOgogICAgcGx0LnJjUGFyYW1zWyJmaWd1cmUuZmlnc2l6ZSJdID0gKDcsIDUpCgogICAgY29uZCA9IG5wLnRyYW5zcG9zZShkYXRhWyJDb25kIl0pCiAgICBmaWcgPSBwbHQuZmlndXJlKCkKICAgIGF4ID0gZmlnLmdjYSgpCiAgICBheC5wbG90KGRhdGFbIkJpYXNWIl0sIGNvbmRbaW5kZXhfc2xpY2VdKQogICAgYXguc2V0X3hsYWJlbCgiQmlhcyAoVikiKQogICAgYXguc2V0X3lsYWJlbCgiQ29uZHVjdGFuY2UgW2VeMi9oXSIpCiAgICBwbHQudGlja2xhYmVsX2Zvcm1hdChheGlzPSJib3RoIiwgc3R5bGU9InNjaSIsIHNjaWxpbWl0cz0oMCwgMCkpCiAgICBmaWcuc2F2ZWZpZyhkYXRhX2ZvbGRlciArICIvZmlnLWluZC1jb25kdWN0YW5jZS9tb2RlbCIgKyBzdWZmaXggKyAiLnBuZyIpCiAgICBwbHQuY2xvc2UoZmlnKQoKCmRlZiBzaW11bGF0aW9uX3NpbmdsZSgKICAgIHBhcmFtcywgcm93LCBkYXRlPSJuby1kYXRlIiwgc2NyYXRjaD0iLi9TY3JhdGNoLyIsIHNpbXVsYXRlX2NvbmR1Y3RhbmNlPVRydWUKKToKCiAgICBkYXRhX3N1ZmZpeCA9ICJzaW11bGF0aW9ue30iLmZvcm1hdChyb3cpCgogICAgbmFub3dpcmUgPSBOYW5vd2lyZShwYXJhbXMpCgogICAgZGF0YV9mb2xkZXIgPSBzY3JhdGNoICsgZGF0ZQoKICAgIHNhdmVfbW9kZWxfZmlndXJlKG5hbm93aXJlLCBkYXRhX3N1ZmZpeCwgZGF0YV9mb2xkZXIpCgogICAgIyBHZW5lcmF0ZSBkYXRhIG9mIHNwZWN0cnVtIGFuZCBjb25kdWN0YW5jZS4gVGhpcyB0YWtlcyB0aW1lCiAgICB0ID0gbmFub3dpcmUucGFyYW1ldGVyc1sndCddCiAgICBlbmVyZ2llcyA9IG5wLmFyYW5nZSgtMC4xMjAgKiB0LCAwLjEyMCAqIHQsIDAuMDAxICogdCkKICAgICMgR2VuZXJhdGUgc3BlY3RydW0gZGF0YSBhbmQgZmlndXJlCiAgICBzcGVjdHJ1bV9kYXRhID0gbmFub3dpcmUubWFnbmV0aXphdGlvbl9zcGVjdHJ1bShtX3ZhbHVlcz1ucC5saW5zcGFjZSgwLCBwYXJhbXNbIm1fbWF4Il0sIDgxKSkKICAgIHNwZWN0cnVtX2NyaXRpY2FsX2ZpZWxkID0gbWFnbmV0aXphdGlvbl9zcGVjdHJ1bShzcGVjdHJ1bV9kYXRhLCBkYXRhX3N1ZmZpeCwgZGF0YV9mb2xkZXIpCgogICAgaWYgc2ltdWxhdGVfY29uZHVjdGFuY2U6CiAgICAgICAgIyBHZW5lcmF0ZSBjb25kdWN0YW5jZSBkYXRhIGFuZCBmaWd1cmUKICAgICAgICBjb25kdWN0YW5jZV9kYXRhID0gbmFub3dpcmUuY29uZHVjdGFuY2VzKAogICAgICAgICAgICBiVmFsdWVzPW5wLmxpbnNwYWNlKDAsIHBhcmFtc1siYl9tYXgiXSwgODEpLCBlbmVyZ2llcz1lbmVyZ2llcwogICAgICAgICkKICAgICAgICBjb25kdWN0YW5jZV9jcml0aWNhbF9maWVsZCA9IGNvbmR1Y3RhbmNlKAogICAgICAgICAgICBjb25kdWN0YW5jZV9kYXRhLCBkYXRhX3N1ZmZpeCwgZGF0YV9mb2xkZXIKICAgICAgICApCgogICAgICAgICMgU2F2ZSBmaWd1cmUgb2YgdGhlIGNvbmR1Y3RhbmNlIGF0IGEgZ2l2ZW4gZmllbGQuCiAgICAgICAgaW5kaXZpZHVhbF9jb25kdWN0YW5jZShjb25kdWN0YW5jZV9kYXRhLCBkYXRhX3N1ZmZpeCwgZGF0YV9mb2xkZXIpCgogICAgICAgICMgRmlsZW5hbWVzIG9mIHRoZSBzYXZlZCBkYXRhIGFuZCBmaWd1cmVzLgogICAgICAgIGNvbmR1Y3RhbmNlX2RhdGFfZmlsZW5hbWUgPSBkYXRhX2ZvbGRlciArICIvY29uZC9jb25kXyIgKyBkYXRhX3N1ZmZpeCArICIuZGF0IgogICAgICAgIHNwZWN0cnVtX2RhdGFfZmlsZW5hbWUgPSBkYXRhX2ZvbGRlciArICIvc3BlYy9zcGVjXyIgKyBkYXRhX3N1ZmZpeCArICIuZGF0IgogICAgICAgIGNvbmR1Y3RhbmNlX2ZpZ3VyZV9maWxlbmFtZSA9ICgKICAgICAgICAgICAgZGF0YV9mb2xkZXIgKyAiL2ZpZy1jb25kdWN0YW5jZS9tb2RlbCIgKyBkYXRhX3N1ZmZpeCArICIucG5nIgogICAgICAgICkKICAgICAgICBzcGVjdHJ1bV9maWd1cmVfZmlsZW5hbWUgPSAoCiAgICAgICAgICAgIGRhdGFfZm9sZGVyICsgIi9maWctc3BlY3RydW0vbW9kZWwiICsgZGF0YV9zdWZmaXggKyAiLnBuZyIKICAgICAgICApCiAgICAgICAgaW5kaXZpZHVhbF9jb25kdWN0YW5jZV9maWd1cmVfZmlsZW5hbWUgPSAoCiAgICAgICAgICAgIGRhdGFfZm9sZGVyICsgIi9maWctaW5kLWNvbmR1Y3RhbmNlL21vZGVsIiArIGRhdGFfc3VmZml4ICsgIi5wbmciCiAgICAgICAgKQogICAgZWxzZToKICAgICAgICBjb25kdWN0YW5jZV9jcml0aWNhbF9maWVsZCA9ICJub3Qgc2ltdWxhdGVkIgogICAgICAgIGNvbmR1Y3RhbmNlX2RhdGFfZmlsZW5hbWUgPSAibm90IHNpbXVsYXRlZCIKICAgICAgICBzcGVjdHJ1bV9kYXRhX2ZpbGVuYW1lID0gZGF0YV9mb2xkZXIgKyAiL3NwZWMvc3BlY18iICsgZGF0YV9zdWZmaXggKyAiLmRhdCIKICAgICAgICBjb25kdWN0YW5jZV9maWd1cmVfZmlsZW5hbWUgPSAibm90IHNpbXVsYXRlZCIKICAgICAgICBzcGVjdHJ1bV9maWd1cmVfZmlsZW5hbWUgPSAoCiAgICAgICAgICAgIGRhdGFfZm9sZGVyICsgIi9maWctc3BlY3RydW0vbW9kZWwiICsgZGF0YV9zdWZmaXggKyAiLnBuZyIKICAgICAgICApCiAgICAgICAgaW5kaXZpZHVhbF9jb25kdWN0YW5jZV9maWd1cmVfZmlsZW5hbWUgPSAibm90IHNpbXVsYXRlZCIKCiAgICBwYXJhbXMudXBkYXRlKAogICAgICAgIHsKICAgICAgICAgICAgInNwZWN0cnVtX2NyaXRpY2FsX2ZpZWxkIjogc3BlY3RydW1fY3JpdGljYWxfZmllbGQsCiAgICAgICAgICAgICJjb25kdWN0YW5jZV9jcml0aWNhbF9maWVsZCI6IGNvbmR1Y3RhbmNlX2NyaXRpY2FsX2ZpZWxkLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICJjb25kdWN0YW5jZV9kYXRhX2ZpbGVuYW1lIjogY29uZHVjdGFuY2VfZGF0YV9maWxlbmFtZSwKICAgICAgICAgICAgInNwZWN0cnVtX2RhdGFfZmlsZW5hbWUiOiBzcGVjdHJ1bV9kYXRhX2ZpbGVuYW1lLAogICAgICAgICAgICAiY29uZHVjdGFuY2VfZmlndXJlX2ZpbGVuYW1lIjogY29uZHVjdGFuY2VfZmlndXJlX2ZpbGVuYW1lLAogICAgICAgICAgICAic3BlY3RydW1fZmlndXJlX2ZpbGVuYW1lIjogc3BlY3RydW1fZmlndXJlX2ZpbGVuYW1lLAo8fGZpbV9lbmR8Pg=="]
["cf43d4d851e02f4d55e2f2a33afec39fec5a43c1-1","cf43d4d851e02f4d55e2f2a33afec39fec5a43c1","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgZW5jb2Rpbmc6IHV0Zi04CgoiIiIKVGVzdHMgZGlmZmVyZW50IHdoaXRlLXNwYWNlIGhhbmRsaW5nLgoiIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZnJvbSBpbnNjcmlwdGlzIGltcG9ydCBnZXRfdGV4dApmcm9tIGluc2NyaXB0aXMuY3NzX3Byb2ZpbGVzIGltcG9ydCBDU1NfUFJPRklMRVMKZnJvbSBpbnNjcmlwdGlzLm1vZGVsLmNvbmZpZyBpbXBvcnQgUGFyc2VyQ29uZmlnCjx8ZmltX2VuZHw+"]
["8f6ee84f2d7cb3b458cdb4149968205de5720015-1","8f6ee84f2d7cb3b458cdb4149968205de5720015","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBnZW91dGlscy5nZW9yYXN0ZXIucmFzdGVyIGltcG9ydCBSYXN0ZXIsIFJhc3RlclR5cGUgICMgbm9xYQoKX19hbGxfXyA9IFsiUmFzdGVyVHlwZSIsICJSYXN0ZXIiXQo8fGZpbV9lbmR8Pg=="]
["7a6d514f20b2566d04a2a66850034fce633ff1e6-1","7a6d514f20b2566d04a2a66850034fce633ff1e6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdApmcm9tIGNvbnRyb2xsZXIuazhzX3Jlc291cmNlcyBpbXBvcnQgZ2V0X2NoaWxkcmVuX3NwZWNzCmltcG9ydCBsb2dnaW5nCgoKQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJwdmNfZW5hYmxlZCIsIFtUcnVlLCBGYWxzZV0pCkBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgic2l6ZSIsIFsiMUciLCAiMTBHIl0pCkBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgic3RvcmFnZV9jbGFzcyIsIFsic3RhbmRhcmQiXSkKZGVmIHRlc3Rfc3RvcmFnZShzdG9yYWdlX2NsYXNzLCBzaXplLCBwdmNfZW5hYmxlZCwgdmFsaWRfc3BlYyk6CiAgICBzdG9yYWdlID0gewogICAgICAgICJzaXplIjogc2l6ZSwKICAgICAgICAicHZjIjogewogICAgICAgICAgICAiZW5hYmxlZCI6IHB2Y19lbmFibGVkLAogICAgICAgICAgICAic3RvcmFnZUNsYXNzTmFtZSI6IHN0b3JhZ2VfY2xhc3MsCiAgICAgICAgICAgICJtb3VudFBhdGgiOiAiL2hvbWUvam92eWFuL3dvcmsvIiwKICAgICAgICB9LAogICAgfQogICAgc3BlYyA9IHZhbGlkX3NwZWMoc3RvcmFnZT1zdG9yYWdlKQogICAgbmFtZSA9ICJ0ZXN0IgogICAgbWFuaWZlc3QgPSBnZXRfY2hpbGRyZW5fc3BlY3MobmFtZSwgc3BlYywgbG9nZ2luZykKICAgIHZvbHVtZXMgPSBtYW5pZmVzdFsic3RhdGVmdWxzZXQiXVsic3BlYyJdWyJ0ZW1wbGF0ZSJdWyJzcGVjIl1bInZvbHVtZXMiXQogICAgdm9sdW1lX21vdW50cyA9IG1hbmlmZXN0WyJzdGF0ZWZ1bHNldCJdWyJzcGVjIl1bInRlbXBsYXRlIl1bInNwZWMiXVsiY29udGFpbmVycyJdWwogICAgICAgIDAKICAgIF1bInZvbHVtZU1vdW50cyJdCiAgICBpZiBwdmNfZW5hYmxlZDoKICAgICAgICBhc3NlcnQgeyJuYW1lIjogIndvcmtzcGFjZSIsICJlbXB0eURpciI6IHsic2l6ZUxpbWl0Ijogc2l6ZX19IG5vdCBpbiB2b2x1bWVzCiAgICAgICAgYXNzZXJ0ICJwdmMiIGluIG1hbmlmZXN0LmtleXMoKQogICAgICAgIGFzc2VydCBtYW5pZmVzdFsicHZjIl0gPT0gewogICAgICAgICAgICAia2luZCI6ICJQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0iLAogICAgICAgICAgICAiYXBpVmVyc2lvbiI6ICJ2MSIsCiAgICAgICAgICAgICJtZXRhZGF0YSI6IHsibmFtZSI6IG5hbWV9LAogICAgICAgICAgICAic3BlYyI6IHsKICAgICAgICAgICAgICAgICJhY2Nlc3NNb2RlcyI6IFsiUmVhZFdyaXRlT25jZSJdLAogICAgICAgICAgICAgICAgInJlc291cmNlcyI6IHsicmVxdWVzdHMiOiB7InN0b3JhZ2UiOiBzaXplfX0sCiAgICAgICAgICAgICAgICAic3RvcmFnZUNsYXNzTmFtZSI6IHN0b3JhZ2VfY2xhc3MsCiAgICAgICAgICAgIH0sCiAgICAgICAgfQogICAgICAgIGFzc2VydCB7CiAgICAgICAgICAgICJuYW1lIjogIndvcmtzcGFjZSIsCiAgICAgICAgICAgICJwZXJzaXN0ZW50Vm9sdW1lQ2xhaW0iOiB7ImNsYWltTmFtZSI6IG5hbWV9LAogICAgICAgIH0gaW4gdm9sdW1lcwogICAgZWxzZToKICAgICAgICBhc3NlcnQgeyJuYW1lIjogIndvcmtzcGFjZSIsICJlbXB0eURpciI6IHsic2l6ZUxpbWl0Ijogc2l6ZX19IGluIHZvbHVtZXMKICAgICAgICBhc3NlcnQgInB2YyIgbm90IGluIG1hbmlmZXN0LmtleXMoKQogICAgYXNzZXJ0IHsKICAgICAgICAibmFtZSI6ICJ3b3Jrc3BhY2UiLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIm1vdW50UGF0aCI6ICIvaG9tZS9qb3Z5YW4vd29yay8iLAo8fGZpbV9lbmR8Pg=="]
["5cafd81d98326e17a5f5f341722367754ee75410-1","5cafd81d98326e17a5f5f341722367754ee75410","PHxmaW1fcHJlZml4fD4KJycnQSBiYXNlIGNsYXNzIGZvciBhbGwgb2Ygb3VyIGNvbW1vbiB0ZXN0cycnJwoKaW1wb3J0IHJlZGlzCmltcG9ydCB1bml0dGVzdAoKPHxmaW1faG9sZXw+CgpjbGFzcyBUZXN0UWxlc3ModW5pdHRlc3QuVGVzdENhc2UpOgogICAgJycnQmFzZSBjbGFzcyBmb3IgYWxsIG9mIG91ciB0ZXN0cycnJwogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgogICAgICAgIHFsZXNzLmxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkNSSVRJQ0FMKQogICAgICAgIGNscy5yZWRpcyA9IHJlZGlzLlJlZGlzKCkKICAgICAgICAjIENsZWFyIHRoZSBzY3JpcHQgY2FjaGUsIGFuZCBudWtlIGV2ZXJ5dGhpbmcKICAgICAgICBjbHMucmVkaXMuZXhlY3V0ZV9jb21tYW5kKCdzY3JpcHQnLCAnZmx1c2gnKQoKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBhc3NlcnQobGVuKHNlbGYucmVkaXMua2V5cygnKicpKSA9PSAwKQogICAgICAgICMgVGhlIHFsZXNzIGNsaWVudCB3ZSdyZSB1c2luZwogICAgICAgIHNlbGYuY2xpZW50ID0gcWxlc3MuQ2xpZW50KCkKICAgICAgICBzZWxmLndvcmtlciA9IHFsZXNzLkNsaWVudCgpCiAgICAgICAgc2VsZi53b3JrZXIud29ya2VyX25hbWUgPSAnd29ya2VyJwoKICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAjIEVuc3VyZSB0aGF0IHdlIGxlYXZlIG5vIGtleXMgYmVoaW5kLCBhbmQgdGhhdCB3ZSd2ZSB1bmZyb3plbiB0aW1lCiAgICAgICAgc2VsZi5yZWRpcy5mbHVzaGRiKCkKPHxmaW1fc3VmZml4fD4KIyBRbGVzcyBzdHVmZgppbXBvcnQgcWxlc3MKaW1wb3J0IGxvZ2dpbmcKCjx8ZmltX2VuZHw+"]
["cfd7c89b14cab575ff41b1c45628430c8fd4a54d-3","cfd7c89b14cab575ff41b1c45628430c8fd4a54d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5bmFwc2UuZXhjIGFzIHNfZXhjCmltcG9ydCBzeW5hcHNlLnRlc3RzLnV0aWxzIGFzIHNfdGVzdAoKY2xhc3MgTWFjcm9UZXN0KHNfdGVzdC5TeW5UZXN0KToKCiAgICBhc3luYyBkZWYgdGVzdF9zdG9ybWxpYl9tYWNybyhzZWxmKToKCiAgICAgICAgYXN5bmMgd2l0aCBzZWxmLmdldFRlc3RDb3JlKCkgYXMgY29yZToKCiAgICAgICAgICAgIHZpc2kgPSBhd2FpdCBjb3JlLmF1dGguYWRkVXNlcigndmlzaScpCiAgICAgICAgICAgIGFzdmlzaSA9IHsndXNlcic6IHZpc2kuaWRlbn0KCiAgICAgICAgICAgIGF3YWl0IGNvcmUubm9kZXMoJ1sgaW5ldDppcHY0PTEuMi4zLjQgXScpCgogICAgICAgICAgICBhd2FpdCBjb3JlLmNhbGxTdG9ybSgnbWFjcm8uc2V0IGhlaGUgJHsgaW5ldDppcHY0IH0nKQogICAgICAgICAgICBhd2FpdCBjb3JlLmNhbGxTdG9ybSgnbWFjcm8uc2V0IGhvaG8gIisjZm9vIicpCgogICAgICAgICAgICBtc2dzID0gYXdhaXQgY29yZS5zdG9ybWxpc3QoJ21hY3JvLmxpc3QnKQoKICAgICAgICAgICAgc2VsZi5zdG9ybUlzSW5QcmludCgnaGVoZScsIG1zZ3MpCiAgICAgICAgICAgIHNlbGYuc3Rvcm1Jc0luUHJpbnQoJ2hvaG8nLCBtc2dzKQogICAgICAgICAgICBzZWxmLnN0b3JtSXNJblByaW50KCdyb290JywgbXNncykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBzZWxmLnN0b3JtSXNJblByaW50KCcyIG1hY3JvcyBmb3VuZCcsIG1zZ3MpCgogICAgICAgICAgICBub2RlcyA9IGF3YWl0IGNvcmUubm9kZXMoJ21hY3JvLmV4ZWMgaGVoZScsIG9wdHM9YXN2aXNpKQogICAgICAgICAgICBzZWxmLmVxKG5vZGVzWzBdLm5kZWYsICgnaW5ldDppcHY0JywgMHgwMTAyMDMwNCkpCjx8ZmltX2VuZHw+"]
["64f0bcc2b7df3a2833e44adbaf902a210ec10341-2","64f0bcc2b7df3a2833e44adbaf902a210ec10341","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gdXRpbF9ncmFwaCBpbXBvcnQgKgoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGdldF9yb2J1c3RuZXNzKCcuL2RhdGEvZ3JhcGgvZ3JhcGguZGF0JywgJy4vZGF0YS9ncmFwaC9yb2J1c3RuZXNzX0xTQ0MuY3N2JywgJy4vZGF0YS9ncmFwaC9yb2J1c3RuZXNzX0xXQ0MuY3N2JykKPHxmaW1fZW5kfD4="]
["517bb095e95b5d04de1596152b4a299387f74cd8-2","517bb095e95b5d04de1596152b4a299387f74cd8","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KCmZyb20gdXRpbHMudGltZWRfZGljdCBpbXBvcnQgVGltZWREaWN0CmZyb20gdXRpbHMuZXJyb3JfY29udGV4dF9oYW5kbGVyX21peGluIGltcG9ydCBFcnJvckhhbmRsZXJDb250ZXh0TWl4aW4KZnJvbSBtZXNzYWdlX3B1dHRlci5iYWxhbmNlcl9ub2RlX3B1dHRlciBpbXBvcnQgKAogICAgU3RhdGlzdGljVGFza1B1dHRlciwgQmFsYW5jZWRUYXNrUHV0dGVyCikKZnJvbSBtZXNzYWdlX2FjY2VwdGVycy5iYWxhbmNlcl9ub2RlX2FjY2VwdGVyIGltcG9ydCAoCiAgICBTdGF0aXN0aWNBY2NlcHRlciwgVGFza0FjY2VwdGVyLCBQaW5nQWNjZXB0ZXIsIERvbmVUYXNrQWNjZXB0ZXIKKQpmcm9tIGFsZ29yaXRobV9nZXR0ZXJzLmFsZ29yaXRobV9nZXR0ZXIgaW1wb3J0IEFsZ29yaXRobUdldHRlcgpmcm9tIGJhbGFuY2VyX25vZGUuYmxvY2tzLnRhc2tfYmFsYW5jZXIgaW1wb3J0IFRhc2tCYWxhbmNlcgpmcm9tIGxvZ3MgaW1wb3J0IGdldF9sb2dnZXIKZnJvbSB0eXBpbmcgaW1wb3J0IE5vUmV0dXJuCmltcG9ydCB0aHJlYWRpbmcKaW1wb3J0IHRpbWUKCgpsb2dnZXIgPSBnZXRfbG9nZ2VyKF9fbmFtZV9fKQoKCmNsYXNzIEJhbGFuY2VyKEVycm9ySGFuZGxlckNvbnRleHRNaXhpbik6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc3VwZXIoQmFsYW5jZXIsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLmF2YWlsYWJsZV9ub2RlcyA9IFRpbWVkRGljdCgxMjApCiAgICAgICAgc2VsZi5wZW5kaW5nX3Rhc2tzID0ge30KCiAgICAgICAgc2VsZi5waW5ncyA9IFBpbmdBY2NlcHRlcigpCiAgICAgICAgc2VsZi5zdGF0aXN0aWMgPSBTdGF0aXN0aWNBY2NlcHRlcigpCiAgICAgICAgc2VsZi50YXNrcyA9IFRhc2tBY2NlcHRlcigpCiAgICAgICAgc2VsZi5kb25lX3Rhc2tzID0gRG9uZVRhc2tBY2NlcHRlcigpCiAgICAgICAgc2VsZi5hbGdvcml0aG1fZ2V0dGVyID0gQWxnb3JpdGhtR2V0dGVyKCkKICAgICAgICBzZWxmLmJhbGFuY2VkX3Rhc2tfcHV0dGVyID0gQmFsYW5jZWRUYXNrUHV0dGVyKCkKCiAgICAgICAgcGluZ3MgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLnJ1bl9waW5nc19sb2dpYykKICAgICAgICBzdGF0aXN0aWNzID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5ydW5fc3RhdGlzdGljc19sb2dpYykKICAgICAgICB0YXNrcyA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYucnVuX3Rhc2tfYWNjZXB0X2xvZ2ljKQogICAgICAgIGRvbmVfdGFza3MgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLnJ1bl9kb25lX3Rhc2tfYWNjZXB0X2xvZ2ljKQoKICAgICAgICBwaW5ncy5zdGFydCgpCiAgICAgICAgc3RhdGlzdGljcy5zdGFydCgpCiAgICAgICAgdGFza3Muc3RhcnQoKQogICAgICAgIGRvbmVfdGFza3Muc3RhcnQoKQoKICAgICAgICBwaW5ncy5qb2luKCkKICAgICAgICBzdGF0aXN0aWNzLmpvaW4oKQogICAgICAgIHRhc2tzLmpvaW4oKQogICAgICAgIGRvbmVfdGFza3Muam9pbigpCgogICAgZGVmIHJ1bl9waW5nc19sb2dpYyhzZWxmKSAtPiBOb1JldHVybjoKICAgICAgICB3aGlsZSBub3Qgc2VsZi5zdG9wX2V2ZW50LmlzX3NldCgpOgogICAgICAgICAgICB3aXRoIHNlbGYuZXJyb3JfaGFuZGxlcl9jb250ZXh0KCk6CiAgICAgICAgICAgICAgICBwaW5nOiBkaWN0CiAgICAgICAgICAgICAgICBfLCBwaW5nID0gc2VsZi5waW5ncy5nZXRfdGFzaygpCiAgICAgICAgICAgICAgICBzZWxmLmF2YWlsYWJsZV9ub2Rlc1twaW5nWydub2RlX25hbWUnXV0gPSBwaW5nCiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhmJ2dvdCBwaW5nIHtwaW5nfScpCiAgICAgICAgICAgICAgICBpZiBwaW5nWydzdGF0dXMnXSA9PSAncXVpdCc6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5hdmFpbGFibGVfbm9kZXMucG9wKHBpbmdbJ25vZGVfbmFtZSddKQoKICAgIGRlZiBoYW5kbGVfc3lzdGVtX3N0YXRpc3RpY3Moc2VsZiwgc3RhdGlzdGljc19yZXF1ZXN0KToKICAgICAgICByZXN1bHQgPSB7ImtleSI6ICIifQogICAgICAgIGlmIHN0YXRpc3RpY3NfcmVxdWVzdFsna2V5J10gPT0gImRvbmVfcGVyY2VudCI6CiAgICAgICAgICAgIHRhc2tfaWQgPSBzdGF0aXN0aWNzX3JlcXVlc3RbJ2lkJ10KICAgICAgICAgICAgcGVuZGluZ190YXNrID0gc2VsZi5wZW5kaW5nX3Rhc2tzLmdldCh0YXNrX2lkLCB7J3RvdGFsX251bWJlcl9vZl90YXNrcyc6IDAsICdudW1iZXJfb2ZfdGFza3MnOiAwfSkKICAgICAgICAgICAgdG90YWxfbnVtYmVyX29mX3Rhc2tzID0gcGVuZGluZ190YXNrWyJ0b3RhbF9udW1iZXJfb2ZfdGFza3MiXQogICAgICAgICAgICBudW1iZXJfb2ZfdGFza3MgPSBwZW5kaW5nX3Rhc2tbIm51bWJlcl9vZl90YXNrcyJdCiAgICAgICAgICAgIHJlc3VsdFsna2V5J10gPSBqc29uLmR1bXBzKHsKICAgICAgICAgICAgICAgICJ0b3RhbF9udW1iZXJfb2ZfdGFza3MiOiB0b3RhbF9udW1iZXJfb2ZfdGFza3MsCiAgICAgICAgICAgICAgICAibnVtYmVyX29mX3Rhc2tzIjogbnVtYmVyX29mX3Rhc2tzLAogICAgICAgICAgICAgICAgInBlcmNlbnQiOiAxMDAgaWYgbnVtYmVyX29mX3Rhc2tzID09IDAgb3IgdG90YWxfbnVtYmVyX29mX3Rhc2tzID09IDAKICAgICAgICAgICAgICAgIGVsc2UgKHRvdGFsX251bWJlcl9vZl90YXNrcyAtIG51bWJlcl9vZl90YXNrcykgLyB0b3RhbF9udW1iZXJfb2ZfdGFza3MKICAgICAgICAgICAgfSkKCiAgICAgICAgZWxpZiBzdGF0aXN0aWNzX3JlcXVlc3RbJ2tleSddID09ICdhdmFpbGFibGVfbm9kZXMnOgogICAgICAgICAgICBub2RlcyA9IFtdCiAgICAgICAgICAgIGZvciBub2RlIGluIHNlbGYuYXZhaWxhYmxlX25vZGVzLnZhbHVlcygpOgogICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG5vZGVbJ25vZGVfbmFtZSddKQogICAgICAgICAgICByZXN1bHRbJ2tleSddID0ganNvbi5kdW1wcyh7J2F2YWlsYWJsZV9ub2Rlcyc6IG5vZGVzfSkKICAgICAgICByZXR1cm4gcmVzdWx0CgogICAgZGVmIGhhbmRsZV91c2VyX3N0YXRpc3RpY3Moc2VsZiwgc3RhdGlzdGljc19yZXF1ZXN0KToKICAgICAgICBwcm9taXNlcyA9IFtdCiAgICAgICAgbm9kZV9zdGF0aXN0aWMgPSBbXQoKICAgICAgICBmb3Igbm9kZSBpbiBzZWxmLmF2YWlsYWJsZV9ub2Rlcy52YWx1ZXMoKToKICAgICAgICAgICAgcHJvbWlzZXMuYXBwZW5kKFN0YXRpc3RpY1Rhc2tQdXR0ZXIobm9kZVsnbm9kZV9uYW1lJ10pKQoKICAgICAgICBmb3IgcHJvbWlzZSBpbiBwcm9taXNlczoKICAgICAgICAgICAgcHJvbWlzZS5wdXRfdGFzayhzdGF0aXN0aWNzX3JlcXVlc3QpCgogICAgICAgIGZvciBwcm9taXNlIGluIHByb21pc2VzOgogICAgICAgICAgICBub2RlX3N0YXRpc3RpYy5hcHBlbmQocHJvbWlzZS5yZXR1cm5fcmVzcG9uc2UoKSkKCiAgICAgICAgbm9kZV9zdGF0aXN0aWMuYXBwZW5kKAogICAgICAgICAgICBzZWxmLnBlbmRpbmdfdGFza3MuZ2V0KAogICAgICAgICAgICAgICAgc3RhdGlzdGljc19yZXF1ZXN0WydpZCddLCB7J3N0YXRpc3RpYyc6IHsnc3BsaXR0ZXInOiBOb25lfX0KICAgICAgICAgICAgKVsnc3RhdGlzdGljJ10KICAgICAgICApCgogICAgICAgIG1lcmdlZF9zdGF0aXN0aWMgPSBzZWxmLm1lcmdlX3N0YXRpc3RpYyhub2RlX3N0YXRpc3RpYykKCiAgICAgICAgcmV0dXJuIG1lcmdlZF9zdGF0aXN0aWMKCiAgICBkZWYgcnVuX3N0YXRpc3RpY3NfbG9naWMoc2VsZikgLT4gTm9SZXR1cm46CiAgICAgICAgd2hpbGUgbm90IHNlbGYuc3RvcF9ldmVudC5pc19zZXQoKToKICAgICAgICAgICAgd2l0aCBzZWxmLmVycm9yX2hhbmRsZXJfY29udGV4dCgpOgogICAgICAgICAgICAgICAgcmV0dXJuX2FkZHJlc3MsIHN0YXRpc3RpY3NfcmVxdWVzdCA9IHNlbGYuc3RhdGlzdGljLmdldF90YXNrKCkKICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGYnZ290IHN0YXRpc3RpYyByZXF1ZXN0IHtzdGF0aXN0aWNzX3JlcXVlc3R9JykKICAgICAgICAgICAgICAgIGlmIHN0YXRpc3RpY3NfcmVxdWVzdFsnc3lzdGVtJ106CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5oYW5kbGVfc3lzdGVtX3N0YXRpc3RpY3Moc3RhdGlzdGljc19yZXF1ZXN0KQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmhhbmRsZV91c2VyX3N0YXRpc3RpY3Moc3RhdGlzdGljc19yZXF1ZXN0KQoKICAgICAgICAgICAgICAgIHNlbGYuc3RhdGlzdGljLnJlc3BvbmRfdG9fdGFzayhyZXR1cm5fYWRkcmVzcywgcmVzdWx0KQoKICAgIGRlZiBtZXJnZV9zdGF0aXN0aWMoc2VsZiwgbm9kZV9zdGF0aXN0aWMpOgogICAgICAgIG1lcmdlZF9zdGF0aXN0aWMgPSBbXQogICAgICAgIHJlc3VsdCA9IHsna2V5JzogJyd9CiAgICAgICAgZm9yIHN0YXRpc3RpYyBpbiBub2RlX3N0YXRpc3RpYzoKICAgICAgICAgICAgbWVyZ2VkX3N0YXRpc3RpYy5hcHBlbmQoc3RhdGlzdGljKQogICAgICAgIHJlc3VsdFsna2V5J10gPSBqc29uLmR1bXBzKHsKICAgICAgICAgICAgJ21lcmdlZF9zdGF0aXN0aWMnOiBtZXJnZWRfc3RhdGlzdGljCiAgICAgICAgfSkKICAgICAgICByZXR1cm4gcmVzdWx0CgogICAgZGVmIHJ1bl90YXNrX2FjY2VwdF9sb2dpYyhzZWxmKSAtPiBOb1JldHVybjoKICAgICAgICB3aGlsZSBub3Qgc2VsZi5zdG9wX2V2ZW50LmlzX3NldCgpOgogICAgICAgICAgICB3aXRoIHNlbGYuZXJyb3JfaGFuZGxlcl9jb250ZXh0KCk6CiAgICAgICAgICAgICAgICBfLCB0YXNrID0gc2VsZi50YXNrcy5nZXRfdGFzaygpCiAgICAgICAgICAgICAgICB0YXNrOiBkaWN0CiAgICAgICAgICAgICAgICBzZWxmLnBlbmRpbmdfdGFza3NbdGFza1snaWQnXV0gPSB0YXNrCiAgICAgICAgICAgICAgICBiYWxhbmNlciA9IHNlbGYuYWxnb3JpdGhtX2dldHRlci5nZXRfYmFsYW5jZXIoCiAgICAgICAgICAgICAgICAgICAgdGFza1siZGF0YVNldCJdWydkYXRhU3BsaXR0ZXInXVsnZmlsZU5hbWUnXSwgdGFza1siZGF0YVNldCJdWydkYXRhU3BsaXR0ZXInXS5nZXQoJ2ZpbGUnKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgXywgcmVzdWx0ID0gVGFza0JhbGFuY2VyLmJhbGFuY2VfdGFzayh0YXNrLCBiYWxhbmNlcikKICAgICAgICAgICAgICAgIHRhc2tbJ3RvdGFsX251bWJlcl9vZl90YXNrcyddID0gdGFza1snbnVtYmVyX29mX3Rhc2tzJ10gPSBsZW4ocmVzdWx0KQogICAgICAgICAgICAgICAgdGFza1sndGltZV9zdGFydCddID0gdGltZS50aW1lKCkKCiAgICAgICAgICAgICAgICBmb3Igc3BsaXR0ZWRfdGFzayBpbiByZXN1bHQ6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5iYWxhbmNlZF90YXNrX3B1dHRlci5wdXRfdGFzayhzcGxpdHRlZF90YXNrKQoKICAgIGRlZiBydW5fZG9uZV90YXNrX2FjY2VwdF9sb2dpYyhzZWxmKToKICAgICAgICB3aGlsZSBub3Qgc2VsZi5zdG9wX2V2ZW50LmlzX3NldCgpOgogICAgICAgICAgICB3aXRoIHNlbGYuZXJyb3JfaGFuZGxlcl9jb250ZXh0KCk6CiAgICAgICAgICAgICAgICBjYWxsX2luZm8sIGRvbmVfdGFzayA9IHNlbGYuZG9uZV90YXNrcy5nZXRfdGFzaygpCiAgICAgICAgICAgICAgICBkb25lX3Rhc2s6IGRpY3QKICAgICAgICAgICAgICAgIHNlbGYuZG9uZV90YXNrcy5yZXNwb25kX3RvX3Rhc2soY2FsbF9pbmZvLCB7J3N0YXR1cyc6ICdvayd9KQogICAgICAgICAgICAgICAgaWYgZG9uZV90YXNrWydpZCddIGluIHNlbGYucGVuZGluZ190YXNrczoKICAgICAgICAgICAgICAgICAgICBzZWxmLnBlbmRpbmdfdGFza3NbZG9uZV90YXNrWydpZCddXVsnbnVtYmVyX29mX3Rhc2tzJ10gLT0gMQogICAgICAgICAgICAgICAgICAgIGlmIHNlbGYucGVuZGluZ190YXNrc1tkb25lX3Rhc2tbJ2lkJ11dWydudW1iZXJfb2ZfdGFza3MnXSA9PSAwOgogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWQnOiBkb25lX3Rhc2tbJ2lkJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJzogJ29rJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aW1lU3BlbnQnOiBzdHIodGltZS50aW1lKCkgLSBzZWxmLnBlbmRpbmdfdGFza3NbZG9uZV90YXNrWydpZCddXVsndGltZV9zdGFydCddKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ29rJwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGYncmVzdWx0ID0ge3Jlc3VsdH0nKQogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBlbmRpbmdfdGFza3MucG9wKGRvbmVfdGFza1snaWQnXSkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YXNrcy5yZXNwb25kX3RvX3Rhc2soTm9uZSwgcmVzdWx0KQo8fGZpbV9lbmR8Pg=="]
["bd9ca05ab1ac93ca958dd7a254d8b6fd2df43fde-4","bd9ca05ab1ac93ca958dd7a254d8b6fd2df43fde","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMKIyAgICAgIERWUi1TY2FuOiBWaWRlbyBNb3Rpb24gRXZlbnQgRGV0ZWN0aW9uICYgRXh0cmFjdGlvbiBUb29sCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgICAgICAgWyAgU2l0ZTogaHR0cHM6Ly9naXRodWIuY29tL0JyZWFrdGhyb3VnaC9EVlItU2Nhbi8gICBdCiMgICAgICAgWyAgRG9jdW1lbnRhdGlvbjogaHR0cDovL2R2ci1zY2FuLnJlYWR0aGVkb2NzLm9yZy8gICBdCiMKPHxmaW1fZW5kfD4="]
["8fda3f5ab4bcd9ea9580cece1161d9bc4d63b873-1","8fda3f5ab4bcd9ea9580cece1161d9bc4d63b873","PHxmaW1fcHJlZml4fD4KIiIiRG9jMlZlYyBNb2RlbC4gVGhlIHBhY2thZ2UgcHJvdmlkZXMgZml0LCB0cmFuc2Zvcm0gYW5kIHByZXBvY2Vzc2luZyBzZXJ2aWNlcyIiIgoKaW1wb3J0IGxvZ2dpbmcKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIGdlbnNpbS5tb2RlbHMuZG9jMnZlYyBpbXBvcnQgRG9jMlZlYyBhcyBEb2MyVmVjR2Vuc2ltLCBUYWdnZWREb2N1bWVudApmcm9tIHRleHRfbW9kZWxzLnV0aWxzIGltcG9ydCBzZXR1cF9sb2dnaW5nLCB0b2tlbml6ZQoKY2xhc3MgRG9jMlZlYyhvYmplY3QpOgo8fGZpbV9lbmR8Pg=="]
["cfc0c52255c6f93d925be5c304755af82b491ab5-3","cfc0c52255c6f93d925be5c304755af82b491ab5","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCgpmcm9tIHRvcmNoX2V1bGVyIGltcG9ydCBIZXVuLCBldWxlcgpmcm9tIHRvcmNoLm9wdGltIGltcG9ydCBBZGFtCmZyb20gbWF0cGxvdGxpYiBpbXBvcnQgcHlwbG90IGFzIHBsdAoKYmV0YSA9IHRvcmNoLnRlbnNvcigxLiwgcmVxdWlyZXNfZ3JhZD1UcnVlKQoKZGVmIGYodCx4KToKICAgIHJldHVybiBiZXRhICogeAoKZGVmIGYyKHQseCk6CiAgICByZXR1cm4gMy4gKiB4CgpkZWYgb21lZ2EodCk6CiAgICByZXR1cm4gdG9yY2gudGVuc29yKFtbMS5dXSkKPHxmaW1faG9sZXw+CnRhcmdldCA9IHRvcmNoLmV4cCgzKnRfZ3JpZCkKdGFyZ2V0XzIgPSBIZXVuKGYyLCBvbWVnYSwgdF9ncmlkKQoKZmlnID0gcGx0LmZpZ3VyZSgpCnBsdC5wbG90KHRfZ3JpZCwgdGFyZ2V0LCBjb2xvcj0iciIpCnBsdC5wbG90KHRfZ3JpZCwgdGFyZ2V0XzIsIGNvbG9yPSJiIikKcGx0LnNob3coKQojIGV4aXQoKQoKb3B0aW1pemVyID0gQWRhbShbYmV0YV0pCmZvciBlcG9jaCBpbiByYW5nZSgxLCBuX2Vwb2NocysxKToKICAgIHNvbCA9IEhldW4oZiwgb21lZ2EsIHRfZ3JpZCkKICAgIGxvc3MgPSB0b3JjaC5tZWFuKDAuNSAqIHRvcmNoLmFicyhzb2xbOiwwXSAtIHRhcmdldCkpCiAgICBvcHRpbWl6ZXIuemVyb19ncmFkKCkKICAgIGxvc3MuYmFja3dhcmQoKQogICAgb3B0aW1pemVyLnN0ZXAoKQogICAgaWYgZXBvY2ggJSAxMDAgPT0gMDoKICAgICAgICBmaWcgPSBwbHQuZmlndXJlKCkKICAgICAgICBwbHQucGxvdCh0X2dyaWQsIHNvbFs6LDBdLmRldGFjaCgpLm51bXB5KCkpCiAgICAgICAgcGx0LnRpdGxlKGYiJFxcYmV0YSQgPT0ge2JldGF9IikKICAgICAgICBmaWcuc2hvdygpCiAgICAgICAgcHJpbnQoYmV0YSkKICAgICAgICBwcmludChsb3NzKQoKCgoKPHxmaW1fc3VmZml4fD4KCm5fZXBvY2hzID0gMTAwMDAwCnRfZ3JpZCA9IHRvcmNoLmxpbnNwYWNlKDAsIDMsIDEwMCkKCjx8ZmltX2VuZHw+"]
["a4769c545f32fe6efdf4c80ea092d4770335e24f-3","a4769c545f32fe6efdf4c80ea092d4770335e24f",{"$cut":{"chars":18356,"head":"PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCkBhdXRob3I6IEFuYSBTaWx2YQoiIiIKaW1wb3J0IG51bXB5IGFzIG5wCmRlZiBfYXV4WmluaWNpYXIoTWJ1cywgZGF0YV9kaWZ1c2UsIGRhdGFfYnVzLCBTYik6CiAgICBidXMgPSBNYnVzLnRidXMKICAgIG5QID0gTWJ1cy5uUAogICAgblEgPSBNYnVzLm5RCiAgICBidXNQID0gTWJ1cy5tYnVzUAogICAgYnVzUSA9IE1idXMubWJ1c1EKICAgIG56Y2VudCA9IE1idXMubnoKICAgIHpkaWYgPSBucC56ZXJvcyhbbnpjZW50LCAzXSkKICAgIHpjZW50ID0gbnAuemVyb3MoW256Y2VudCwgMV0pCiAgICBhdXhkZWx0YSA9IG5wLnplcm9zKFtuemNlbnQsIDNdKQogICAgdGV4dFAgPSAiIgogICAgdGV4dFEgPSAiIgogICAgZm9yIGkgaW4gcmFuZ2UoYnVzKToKICAgICAgICBmb3IgaiBpbiByYW5nZShuUCk6CiAgICAgICAgICAgIGlmKGJ1c1BbMCwgal0gPT0gZGF0YV9kaWZ1c2VbaSwgMF0pOgogICAgICAgICAgICAgICAgYXV4MSA9IG5wLm1hdHJpeChbZGF0YV9kaWZ1c2VbaSwgMV0sIGRhdGFfZGlmdXNlW2ksIDJdLCBkYXRhX2RpZnVzZVtpLCAzXV0pCiAgICAgICAgICAgICAgICBhdXgyID0gbnAubWF0cml4KFtkYXRhX2RpZnVzZVtpLCA5XSwgZGF0YV9kaWZ1c2VbaSwgOF0sIGRhdGFfZGlmdXNlW2ksIDddXSkKICAgICAgICAgICAgICAgIHBhdXggPSBucC5zdWJ0cmFjdChhdXgxLCBhdXgyKS9TYgogICAgICAgICAgICAgICAgemRpZltqLCA6XSA9IHBhdXgKICAgICAgICAgICAgICAgIHRleHRQID0gdGV4dFArIl9QIitzdHIoaW50KGJ1c1BbMCwgal0pKQogICAgICAgICAgICBpZihidXNQWzAsIGpdID09IGRhdGFfYnVzW2ksIDBdKToKICAgICAgICAgICAgICAgIHpjZW50W2osIDBdID0gZGF0YV9idXNbaSwgOV0KICAgICAgICBmb3IgaiBpbiByYW5nZShuUSk6CiAgICAgICAgICAgIGlmKGJ1c1FbMCwgal0gPT0gZGF0YV9kaWZ1c2VbaSwgMF0pOgogICAgICAgICAgICAgICAgYXV4MSA9IG5wLm1hdHJpeChbZGF0YV9kaWZ1c2VbaSwgNF0sIGRhdGFfZGlmdXNlW2ksIDVdLCBkYXRhX2RpZnVzZVtpLCA2XV0pCiAgICAgICAgICAgICAgICBhdXgyID0gbnAubWF0cml4KFtkYXRhX2RpZnVzZVtpLCAxMl0sIGRhdGFfZGlmdXNlW2ksIDExXSwgZGF0YV9kaWZ1c2VbaSwgMTBdXSkKICAgICAgICAgICAgICAgIHFhdXggPSBucC5zdWJ0cmFjdChhdXgxLCBhdXgyKS9TYgogICAgICAgICAgICAgICAgemRpZltqK25QLCA6XSA9IHFhdXgKICAgICAgICAgICAgICAgIHRleHRRID0gdGV4dFErIl9RIiArIHN0cihpbnQoYnVzUVswLCBqXSkpCiAgICAgICAgICAgIGlmKGJ1c1FbMCwgal0gPT0gZGF0YV9idXNbaSwgMF0pOgogICAgICAgICAgICAgICAgemNlbnRbaituUCwgMF0gPSBkYXRhX2J1c1tpLCAxMF0KICAgIGZvciBpIGluIHJhbmdlKG56Y2VudCk6CiAgICAgICAgYXV4ZGVsdGFbaSwgOl0gPSB6ZGlmW2ksIDpdIC0gemNlbnRbaSwgMF0KICAgIHRleHRaID0gIlJvd3MiICsgdGV4dFAgKyB0ZXh0UQogICAgY2xhc3MgX0NaZGlmOgogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtemNlbnQsIG16ZGlmLCBtZGVsdGF6LCB0eHR6KToKICAgICAgICAgICAgc2VsZi5temNlbnQgPSBtemNlbnQKICAgICAgICAgICAgc2VsZi5temRpZiA9IG16ZGlmCiAgICAgICAgICAgIHNlbGYubWRlbHRheiA9IG1kZWx0YXoKICAgICAgICAgICAgc2VsZi50eHR6ID0gdHh0egogICAgY2F1eHpkaWYgPSBfQ1pkaWYoemNlbnQsIHpkaWYsIGF1eGRlbHRhLCB0ZXh0WikKICAgIHJldHVybiBjYXV4emRpZgoKZGVmIF9hdXhEZWx0YVgoZGF0YV9KYWNvYiwgZGVsdGFaLCBuemNlbnQpOgogICAgamFjb2JfaW52ID0gbnAubGluYWxnLmludigoZGF0YV9KYWNvYikpCiAgICBqYWNvYl9pbnZfcG9zID0gbnAuemVyb3MoW256Y2VudCwgbnpjZW50XSkKICAgIGphY29iX2ludl9uZWcgPSBucC56ZXJvcyhbbnpjZW50LCBuemNlbnRdKQogICAgZm9yIGkgaW4gcmFuZ2UobnpjZW50KToKICAgICAgICBmb3IgaiBpbiByYW5nZShuemNlbnQpOgogICAgICAgICAgICBpZiAoamFjb2JfaW52W2ksIGpdIDwgMCk6CiAgICAgICAgICAgICAgICBqYWNvYl9pbnZfbmVnW2ksIGpdID0gamFjb2JfaW52W2ksIGpdCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBqYWNvYl9pbnZfcG9zW2ksIGpdID0gamFjb2JfaW52W2ksIGpdCiAgICBkZWx0YXptaW4gPSBucC56ZXJvcyhbbnpjZW50LCAxXSkKICAgIGRlbHRhem1heCA9IG5wLnplcm9zKFtuemNlbnQsIDFdKQogICAgZGVsdGF6Y2VudCA9IG5wLnplcm9zKFtuemNlbnQsIDFdKQogICAgZm9yIGsgaW4gcmFuZ2UobnpjZW50KToKICAgICAgICBkZWx0YXptaW5baywgMF0gPSBkZWx0YVpbaywgMF0KICAgICAgICBkZWx0YXpjZW50W2ssIDBdID0gZGVsdGFaW2ssIDFdCiAgICAgICAgZGVsdGF6bWF4W2ssIDBdID0gZGVsdGFaW2ssIDJdCiAgICBkZWx0YXhtaW4gPSBucC5tYXRtdWwoamFjb2JfaW52X25lZywgZGVsdGF6bWF4KSArIG5wLm1hdG11bChqYWNvYl9pbnZfcG9zLCBkZWx0YXptaW4pCiAgICBkZWx0YXhjZW50ID0gbnAubWF0bXVsKGphY29iX2ludl9uZWcsIGRlbHRhemNlbnQpICsgbnAubWF0bXVsKGphY29iX2ludl9wb3MsIGRlbHRhemNlbnQpCiAgICBkZWx0YXhtYXggPSBucC5tYXRtdWwoamFjb2JfaW52X25lZywgZGVsdGF6bWluKSArIG5wLm1hdG11bChqYWNvYl9pbnZfcG9zLCBkZWx0YXptYXgpCiAgICBkZWx0YXggPSBucC5jb25jYXRlbmF0ZSgoZGVsdGF4bWluLCBkZWx0YXhjZW50LCBkZWx0YXhtYXgpLCBheGlzPTEpCiAgICBjbGFzcyBfRGVsdGF4OgogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZGVsdGF4LCBtamFjb2JpbnYsIG1kem1pbiwgbWR6Y2VudCwgbWR6bWF4KToKICAgICAgICAgICAgc2VsZi5tZGVsdGF4ID0gbWRlbHRheAogICAgICAgICAgICBzZWxmLm1qYWNvYmludiA9IG1qYWNvYmludgogICAgICAgICAgICBzZWxmLm1kem1pbiA9IG1kem1pbgogICAgICAgICAgICBzZWxmLm1kemNlbnQgPSBtZHpjZW50CiAgICAgICAgICAgIHNlbGYubWR6bWF4ID0g"}}]
["85678244b31961b39018712a232b21080d8680c5-2","85678244b31961b39018712a232b21080d8680c5","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKaW1wb3J0IHN1YnByb2Nlc3MKCgpkZWYgZGVidWcoKToKICAgIHBoeV9ncHUgPSB0Zi5jb25maWcuZXhwZXJpbWVudGFsLmxpc3RfcGh5c2ljYWxfZGV2aWNlcygnR1BVJykKICAgIGxvZ19ncHUgPSB0Zi5jb25maWcuZXhwZXJpbWVudGFsLmxpc3RfbG9naWNhbF9kZXZpY2VzKCdHUFUnKQogICAgbHNwY2kgPSBzdWJwcm9jZXNzLnJ1bihbJ2xzcGNpJywgJy12bm5uJ10sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCiAgICBsc3BjaSA9IHN1YnByb2Nlc3MucnVuKFsnZ3JlcCcsICctaScsICJudmlkaWEiXSwgaW5wdXQ9bHNwY2kuc3Rkb3V0LCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQoKICAgIHByaW50KCJcblxuXG4iKQogICAgcHJpbnQoIlBoeXNpY2FsIEdQVSBkZXZpY2VzOiIpCiAgICBwcmludChwaHlfZ3B1KQoKICAgIHByaW50KCJcblxuTG9naWNhbCBHUFUgZGV2aWNlczoiKQogICAgcHJpbnQobG9nX2dwdSkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHByaW50KCJcblxubHNwY2kgLXZubm4gfCBncmVwIC1pICdudmlkaWEnOiIpCiAgICBwcmludChsc3BjaS5zdGRvdXQuZGVjb2RlKCd1dGYtOCcpKQoKCjx8ZmltX2VuZHw+"]
["8533eff564254bb0b62c3de9e3bb4fc9e77c4fc0-1","8533eff564254bb0b62c3de9e3bb4fc9e77c4fc0","PHxmaW1fcHJlZml4fD4KZnJvbSBzbmlwc19ubHVfbWV0cmljcyBpbXBvcnQgRW5naW5lCgoKZGVmIGR1bW15X3BhcnNpbmdfcmVzdWx0KHRleHQsIGludGVudF9uYW1lPU5vbmUpOgogICAgcmV0dXJuIHsKICAgICAgICAiaW5wdXQiOiB0ZXh0LAogICAgICAgICJpbnRlbnQiOiB7ImludGVudE5hbWUiOiBpbnRlbnRfbmFtZSwgInByb2JhYmlsaXR5IjogMC41fSwKICAgICAgICAic2xvdHMiOiBbXSwKICAgIH0KCgpjbGFzcyBNb2NrRW5naW5lKEVuZ2luZSk6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5maXR0ZWQgPSBGYWxzZQoKICAgIGRlZiBmaXQoc2VsZiwgZGF0YXNldCk6CiAgICAgICAgc2VsZi5maXR0ZWQgPSBUcnVlCgogICAgZGVmIHBhcnNlKHNlbGYsIHRleHQpOgogICAgICAgIHJldHVybiBkdW1teV9wYXJzaW5nX3Jlc3VsdCh0ZXh0KQoKCmNsYXNzIEtleVdvcmRNYXRjaGluZ0VuZ2luZShFbmdpbmUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYuZml0dGVkID0gRmFsc2UKICAgICAgICBzZWxmLmludGVudHNfbGlzdCA9IFtdCgogICAgZGVmIGZpdChzZWxmLCBkYXRhc2V0KToKICAgICAgICBzZWxmLmZpdHRlZCA9IFRydWUKICAgICAgICBzZWxmLmludGVudHNfbGlzdCA9IHNvcnRlZChkYXRhc2V0WyJpbnRlbnRzIl0pCgogICAgZGVmIHBhcnNlKHNlbGYsIHRleHQsIGludGVudHNfZmlsdGVyPU5vbmUpOgogICAgICAgIGludGVudCA9IE5vbmUKICAgICAgICBmb3IgaW50ZW50X25hbWUgaW4gc2VsZi5pbnRlbnRzX2xpc3Q6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgaWYgaW50ZW50X25hbWUgaW4gdGV4dDoKICAgICAgICAgICAgICAgIGludGVudCA9IGludGVudF9uYW1lCiAgICAgICAgICAgICAgICBicmVhawo8fGZpbV9lbmR8Pg=="]
["cfab51e6e5281b3a141be404bf211a9aabaabb74-2","cfab51e6e5281b3a141be404bf211a9aabaabb74","PHxmaW1fcHJlZml4fD4KY2xhc3MgT2RkTnVtYmVycyhvYmplY3QpOgogICAgIkFuIGl0ZXJhYmxlIG9iamVjdC4iCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heGltdW0pOgogICAgICAgIHNlbGYubWF4aW11bSA9IG1heGltdW0KCiAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIE9kZEl0ZXJhdG9yKHNlbGYpCgpjbGFzcyBFdmVuTnVtYmVycyhvYmplY3QpOgogICAgIkFuIGl0ZXJhYmxlIG9iamVjdC4iCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heGltdW0pOgogICAgICAgIHNlbGYubWF4aW11bSA9IG1heGltdW0KCiAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIEV2ZW5JdGVyYXRvcihzZWxmKQoKY2xhc3MgRmlibm9jY2lOdW1iZXJzKG9iamVjdCk6CiAgICAiQW4gaXRlcmFibGUgb2JqZWN0LiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4aW11bSk6CiAgICAgICAgc2VsZi5tYXhpbXVtID0gbWF4aW11bQoKICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICByZXR1cm4gRmlibm9jY2lJdGVyYXRvcihzZWxmKQoKCgpjbGFzcyBPZGRJdGVyYXRvcihvYmplY3QpOgogICAgIkFuIGl0ZXJhdG9yLiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGFpbmVyKToKICAgICAgICBzZWxmLmNvbnRhaW5lciA9IGNvbnRhaW5lcgogICAgICAgIHNlbGYubiA9IC0xCgogICAgZGVmIF9fbmV4dF9fKHNlbGYpOgogICAgICAgIHNlbGYubiArPSAyCiAgICAgICAgaWYgc2VsZi5uID4gc2VsZi5jb250YWluZXIubWF4aW11bToKICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgogICAgICAgIHJldHVybiBzZWxmLm4KCiAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYKCmNsYXNzIEV2ZW5JdGVyYXRvcihvYmplY3QpOgogICAgIkFuIGl0ZXJhdG9yLiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGFpbmVyKToKICAgICAgICBzZWxmLmNvbnRhaW5lciA9IGNvbnRhaW5lcgogICAgICAgIHNlbGYubiA9IDAKCiAgICBkZWYgX19uZXh0X18oc2VsZik6CiAgICAgICAgc2VsZi5uICs9IDIKICAgICAgICBpZiBzZWxmLm4gPiBzZWxmLmNvbnRhaW5lci5tYXhpbXVtOgogICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCiAgICAgICAgcmV0dXJuIHNlbGYubgoKICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZgoKY2xhc3MgRmlibm9jY2lJdGVyYXRvcihvYmplY3QpOgogICAgIkFuIGl0ZXJhdG9yLiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGFpbmVyKToKICAgICAgICBzZWxmLmNvbnRhaW5lciA9IGNvbnRhaW5lcgogICAgICAgIHNlbGYuYSA9IDAKICAgICAgICBzZWxmLmIgPSAxCgogICAgZGVmIF9fbmV4dF9fKHNlbGYpOgogICAgICAgIHNlbGYuYSAsc2VsZi5iID0gc2VsZi5iLHNlbGYuYSArIHNlbGYuYgogICAgICAgIGlmIHNlbGYuYSA+IHNlbGYuY29udGFpbmVyLm1heGltdW0gb3Igc2VsZi5iID4gc2VsZi5jb250YWluZXIubWF4aW11bToKICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgogICAgICAgIHJldHVybiBzZWxmLmIKCiAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYKCmRlZiBzcGFuaXNoX2NvdW50X3RvKGNvdW50KToKCSIiIiBCdWlsdCBpbiBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbiIiIgoKCW51bWJlcnNfaW5fU3BhbmlzaCA9IFsidW5vLCBkb3MsIHRyZXMsIGN1YXRybywgY2luY28sIHNlaXMsIHNpZXRlLCBvY2hvLCBudWV2ZSwgZGlleiJdCgoJI2J1aWx0LWluIGl0ZXJhdG9yCgkjQ3JlYXRlcyBhIHR1cGxlIHN1Y2ggYXMgKDEsICJ1bm8iKQoJaXRlcmF0b3IgPSB6aXAocmFuZ2UoY291bnQpLCBudW1iZXJzX2luX1NwYW5pc2gpCgkKCSNJdGVyYXRlIHRocm91Z2ggb3VyIGl0ZXJhYmxlIGxpc3QKCSNFeHRyYWN0IHRoZSBTcGFuaXNoIG51bWJlcnMKCSNQdXQgdGhlbSBpbiBhIGdlbmVyYXRvciBjYWxsZWQgbnVtYmVyCglmb3IgcG9zaXRpb24sIG51bWJlciBpbiBpdGVyYXRvcjoKCQkKCQkjUmV0dXJucyBhICdnZW5lcmF0b3InIGNvbnRhaW5pbmcgbnVtYmVycyBpbiBTcGFuaXNoCgkJeWllbGQgbnVtYmVyIAoKbnVtYmVycyA9IE9kZE51bWJlcnMoMTIpCmV2ZW4gPSBFdmVuTnVtYmVycygxNikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpmaWIgPSBGaWJub2NjaU51bWJlcnMoNDApCgoKcHJpbnQoIkZpYm5vY2NpIEl0ZXJhdG9yICA6IixsaXN0KGZpYikpCjx8ZmltX2VuZHw+"]
["2e5f04884783f17e6cb884ef7422c53225dd54c8-1","2e5f04884783f17e6cb884ef7422c53225dd54c8","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKZnJvbSBzY2lweS5zaWduYWwgaW1wb3J0IHNhdmdvbF9maWx0ZXIsIGZpbmRfcGVha3MKaW1wb3J0IHdhcm5pbmdzCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aCwgUG9zaXhQYXRoCgoKY2xhc3MgRGF0YXNldDoKICAgICIiIkNyZWF0ZXMgYW4gb2JqZWN0IGEgZGF0YXNldCBjb25zaXN0aW5nIG9mIGZlYXR1cmVzIHggYW5kIHRhcmdldHMgeS4KCiAgICA6cGFyYW0geDogRmVhdHVyZXMKICAgIDp0eXBlIHg6IG5kYXJyYXkKICAgIDpwYXJhbSB5OiBUYXJnZXRzCiAgICA6dHlwZSB5OiBuZGFycmF5CiAgICAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgeSk6CiAgICAgICAgaWYgbm90IGxlbih4KSA9PSBsZW4oeSk6CiAgICAgICAgICAgIHJhaXNlIElucHV0RXJyb3IoJ0xlbmd0aCBvZiBpbnB1dHMgeCBhbmQgeSBtdXN0IGJlIHRoZSBzYW1lJykKCiAgICAgICAgc2VsZi54ID0geAogICAgICAgIHNlbGYueSA9IHkKCiAgICAgICAgc2VsZi5zbW9vdGhlZCA9IEZhbHNlCiAgICAgICAgc2VsZi5tYXhpbXVtX2ZvdW5kID0gRmFsc2UKCiAgICAgICAgcmV0dXJuCgogICAgZGVmIF9fY2FsbF9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLngsIHNlbGYueQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBzYXZnb2woeSwgd2luZG93X2xlbmd0aCwgcG9seW9yZGVyPTMpOgogICAgICAgICIiIlNtb290aHMgZGF0YSB1c2luZyBTYXZpdHpreS1Hb2xheSBmaWx0ZXJpbmcuCgogICAgICAgIDpwYXJhbSB3aW5kb3c6IE51bWJlciBvZiBkYXRhIHBvaW50cyB0byBzbW9vdGggb3Zlci4KICAgICAgICA6dHlwZSB3aW5kb3c6IGludAogICAgICAgIDpwYXJhbSBwb2x5b3JkZXI6IERlZ3JlZSBvZiBzbW9vdGhpbmcgcG9seW5vbWlhbC4gRGVmYXVsdHMgdG8gMy4KICAgICAgICA6dHlwZSBwb2x5b3JkZXI6IGludAogICAgICAgICIiIgoKICAgICAgICBpZiB3aW5kb3dfbGVuZ3RoICUgMiA9PSAwOgogICAgICAgICAgICB3YXJuaW5ncy53YXJuKAogICAgICAgICAgICAgICAgJ1BhcmFtZXRlciB3aW5kb3dfbGVuZ3RoIG11c3QgYmUgb2RkLiBJbmNyZWFzZWQgd2luZG93IGJ5IDEuJykKICAgICAgICAgICAgd2luZG93ICs9IDEKICAgICAgICAjIER1bW15IGluIGNhc2UgeSA9IHNlbGYueQogICAgICAgIHluZXcgPSB5CgogICAgICAgIGlmIGxlbih5LnNoYXBlKSA+IDE6CiAgICAgICAgICAgICMgU21vb3RoIG92ZXIgbXVsdGlwbGUgZGF0YQogICAgICAgICAgICBmb3IgaSwgZGF0YSBpbiBlbnVtZXJhdGUoeSk6CiAgICAgICAgICAgICAgICB5bmV3W2ldID0gc2F2Z29sX2ZpbHRlcihkYXRhLCB3aW5kb3dfbGVuZ3RoLCBwb2x5b3JkZXIpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgeW5ldyA9IHNhdmdvbF9maWx0ZXIoeSwgd2luZG93X2xlbmd0aCwgcG9seW9yZGVyKQoKICAgICAgICByZXR1cm4geW5ldwoKICAgIGRlZiBmaW5kX21heGltdW0oc2VsZiwgeSwgKiprd2FyZ3MpOgogICAgICAgICIiIkZpbmRzIHRoZSBtYXhpbXVtIG9mIGEgeSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgZm9yIHguCiAgICAgICAgQ2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgbWF4aW11bSBvZiBsb2FkaW5nIGN1cnZlcy4KCiAgICAgICAgOnBhcmFtIHk6IERhdGEgdG8gZmluZCB0aGUgbWF4aW11bSBvZi4KICAgICAgICA6dHlwZSB5OiBuZGFycmF5CiAgICAgICAgIiIiCgogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHksIG5wLm5kYXJyYXkpOgogICAgICAgICAgICB5ID0gbnAuYXNhcnJheSh5KQoKICAgICAgICBpZiAnZGlzdGFuY2UnIGluIGt3YXJnczoKICAgICAgICAgICAgZGlzdGFuY2UgPSBrd2FyZ3NbJ2Rpc3RhbmNlJ10KICAgICAgICBlbHNlOgogICAgICAgICAgICBkaXN0YW5jZSA9IDUwMAoKICAgICAgICBpZiAncHJvbWluZW5jZScgaW4ga3dhcmdzOgogICAgICAgICAgICBwcm9taW5lbmNlID0ga3dhcmdzWydwcm9taW5lbmNlJ10KICAgICAgICBlbHNlOgogICAgICAgICAgICBwcm9taW5lbmNlID0gMC4wMjUKCiAgICAgICAgaWYgJ2hlaWdodCcgaW4ga3dhcmdzOgogICAgICAgICAgICBoZWlnaHQgPSBrd2FyZ3NbJ2hlaWdodCddCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaGVpZ2h0X2ZsYWcgPSBUcnVlCgogICAgICAgIGlmIGxlbihzZWxmLnkuc2hhcGUpID4gMToKICAgICAgICAgICAgeW1heCA9IG5wLnplcm9zKGxlbih5KSkKICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHkpKToKICAgICAgICAgICAgICAgIGlmIGhlaWdodF9mbGFnOgogICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IDAuNSAqIHlbaSwgbnAuYXJnbWF4KHlbaV0pXQogICAgICAgICAgICAgICAgYXJnbWF4ID0gZmluZF9wZWFrcyh5W2ldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZT1kaXN0YW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PWhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWluZW5jZT1wcm9taW5lbmNlKVswXVswXQogICAgICAgICAgICAgICAgeW1heFtpXSA9IHlbaSwgYXJnbWF4XQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGlmIGhlaWdodF9mbGFnOgogICAgICAgICAgICAgICAgaGVpZ2h0ID0gMC41ICogeVtucC5hcmdtYXgoeSldCiAgICAgICAgICAgIGFyZ21heCA9IGZpbmRfcGVha3MoeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZT1kaXN0YW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pbmVuY2U9cHJvbWluZW5jZSlbMF1bMF0KICAgICAgICAgICAgeW1heCA9IHlbYXJnbWF4XQoKICAgICAgICBzZWxmLm1heGltdW1fZm91bmQgPSBUcnVlCgogICAgICAgIHJldHVybiB5bWF4CgogICAgZGVmIGdldF9kYXRhKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLngsIHNlbGYueQoKICAgIGRlZiBnZXRfeW1heChzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi55bWF4CgogICAgZGVmIHVwZGF0ZV95KHNlbGYsIHkpOgogICAgICAgICIiIkNhbiBiZSB1c2VkIHRvIHVwZGF0ZSBzZWxmLnkgd2l0aCB0aGUgc21vb3RoZWQgdmFsdWVzLgoKICAgICAgICA6cGFyYW0geTogVGFyZ2V0IGRhdGEKICAgICAgICA6dHlwZSB5OiBuZGFycmF5CiAgICAgICAgIiIiCiAgICAgICAgc2VsZi55ID0geQoKICAgICAgICByZXR1cm4KCiAgICBkZWYgc21vb3RoX3koc2VsZiwgeSwgc21vb3RoaW5nPSdzYXZnb2wnLCAqKmt3YXJncyk6CiAgICAgICAgIiIiU21vb3RocyBkYXRhIGJ5IGEgZ2l2ZW4gc21vb3RoaW5nIG1ldGhvZC4KCiAgICAgICAgOnBhcmFtIHNtb290aGluZzogRGVmaW5lcyB0aGUgbWV0aG9kIGZvciBzbW9vdGhpbmcuIENhbiBiZSBzZXQgdG8gTm9uZS4KICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byAnc2F2Z29sJyBmb3IgU2F2aXR6a3ktR29sYXkgZmlsdGVyaW5nLgogICAgICAgIDp0eXBlIHNtb290aGluZzogc3RyCiAgICAgICAgOnBhcmFtIGt3YXJnczogQXJndW1lbnRzIGZvciBzbW9vdGhpbmcgZnVuY3Rpb24uIEUuZy4gd2luZG93IGFuZAogICAgICAgICAgICAgICAgICAgICAgIHBvbHlub21pYWwgb3JkZXIgZm9yIFNhdml0emt5LUdvbGF5IGZpbHRlci4KCiAgICAgICAgIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgc21vb3RoZXJzID0geydzYXZnb2wnOiBzZWxmLnNhdmdvbH0KCiAgICAgICAgd2luZG93X2xlbmd0aCA9IGt3YXJnc1snd2luZG93X2xlbmd0aCddCjx8ZmltX2VuZHw+"]
["99d612817aabc96d0125d545c392ccaeeb2c0c3a-1","99d612817aabc96d0125d545c392ccaeeb2c0c3a",{"$cut":{"chars":24892,"head":"PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMSwgVGV4YXMgSW5zdHJ1bWVudHMKIyBBbGwgUmlnaHRzIFJlc2VydmVkLgojCiMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CiMKIyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwojICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiMKIyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKIyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KIyAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgojCiMgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCiMgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQojICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KIwojIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgojIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCiMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgojIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCiMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQojIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCgppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBqYWlfYmVuY2htYXJrIGltcG9ydCBjb25zdGFudHMsIHV0aWxzLCBkYXRhc2V0cywgcHJlcHJvY2Vzcywgc2Vzc2lvbnMsIHBvc3Rwcm9jZXNzLCBtZXRyaWNzCgoKZGVmIGdldF9jb25maWdzKHNldHRpbmdzLCB3b3JrX2Rpcik6CiAgICAjIGdldCB0aGUgc2Vzc2lvbnMgdHlwZXMgdG8gdXNlIGZvciBlYWNoIG1vZGVsIHR5cGUKICAgIG9ubnhfc2Vzc2lvbl90eXBlID0gc2V0dGluZ3MuZ2V0X3Nlc3Npb25fdHlwZShjb25zdGFudHMuTU9ERUxfVFlQRV9PTk5YKQogICAgdGZsaXRlX3Nlc3Npb25fdHlwZSA9IHNldHRpbmdzLmdldF9zZXNzaW9uX3R5cGUoY29uc3RhbnRzLk1PREVMX1RZUEVfVEZMSVRFKQogICAgbXhuZXRfc2Vzc2lvbl90eXBlID0gc2V0dGluZ3MuZ2V0X3Nlc3Npb25fdHlwZShjb25zdGFudHMuTU9ERUxfVFlQRV9NWE5FVCkKCiAgICBwcmVwcm9jX3RyYW5zZm9ybXMgPSBwcmVwcm9jZXNzLlByZVByb2Nlc3NUcmFuc2Zvcm1zKHNldHRpbmdzKQogICAgcG9zdHByb2NfdHJhbnNmb3JtcyA9IHBvc3Rwcm9jZXNzLlBvc3RQcm9jZXNzVHJhbnNmb3JtcyhzZXR0aW5ncykKCiAgICAjIGZvciB0ZmxpdGUgbW9kZWxzIG9kIHBvc3QgcHJvYyBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgaW4gcnVudGltZV9vcHRpb25zCiAgICAjIGZvciBvbm54IG9kIG1vZGVscywgb2QgcG9zdCBwcm9jIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBpbiB0aGUgcHJvdG90eHQKICAgICMgdXNlIGEgbGFyZ2UgdG9wX2ssIGtlZXBfdG9wX2sgYW5kIGxvdyBjb25maWRlbmNlX3RocmVzaG9sZCBmb3IgYWNjdXJhY3kgbWVhc3VyZW1lbnQKICAgIHJ1bnRpbWVfb3B0aW9uc190ZmxpdGVfbnAyID0gc2V0dGluZ3MuZ2V0X3J1bnRpbWVfb3B0aW9ucyhjb25zdGFudHMuTU9ERUxfVFlQRV9URkxJVEUsIGlzX3FhdD1GYWxzZSwKICAgICAgICBydW50aW1lX29wdGlvbnM9eydvYmplY3RfZGV0ZWN0aW9uOmNvbmZpZGVuY2VfdGhyZXNob2xkJzogc2V0dGluZ3MuZGV0ZWN0aW9uX3RociwKICAgICAgICAgICAgICAgICAgICAgICAgICdvYmplY3RfZGV0ZWN0aW9uOm5tc190aHJlc2hvbGQnOiAwLjQ1LAogICAgICAgICAgICAgICAgICAgICAgICAgJ29iamVjdF9kZXRlY3Rpb246dG9wX2snOiAyMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAjJ29iamVjdF9kZXRlY3Rpb246a2VlcF90b3Bfayc6IDEwMAogICAgICAgICAgICAgICAgICAgICAgICAgfSkKCiAgICAjIGNvbmZpZ3MgZm9yIGVhY2ggbW9kZWwgcGlwZWxpbmUKICAgIGNvbW1vbl9jZmcgPSB7CiAgICAgICAgJ3Rhc2tfdHlwZSc6ICdkZXRlY3Rpb24nLAogICAgICAgICdjYWxpYnJhdGlvbl9kYXRhc2V0Jzogc2V0dGluZ3MuZGF0YXNldF9jYWNoZVsnY29jbyddWydjYWxpYnJhdGlvbl9kYXRhc2V0J10sCiAgICAgICAgJ2lucHV0X2RhdGFzZXQnOiBzZXR0aW5ncy5kYXRhc2V0X2NhY2hlWydjb2NvJ11bJ2lucHV0X2RhdGFzZXQnXSwKICAgIH0KCiAgICBjb21t"}}]
["8f2e50d3e194aae076561ab38c6c58c7b6f6eacd-1","8f2e50d3e194aae076561ab38c6c58c7b6f6eacd","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KIyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuCgpmcm9tIC50b3BvbG9neSBpbXBvcnQgVG9wb2xvZ3kKCmRlZiBodWJfYW5kX3Nwb2tlKG51bV9ub2Rlcyk6CiAgICBsaW5rcyA9IFtbMCBpZiB4PT15IGVsc2UgMSBmb3IgeSBpbiByYW5nZShudW1fbm9kZXMpXSBmb3IgeCBpbiByYW5nZShudW1fbm9kZXMpXQogICAgc3dpdGNoZXMgPSBbXQogICAgZm9yIG5vZGUgaW4gcmFuZ2UobnVtX25vZGVzKToKICAgICAgICBvdGhlcnMgPSBbb3RoZXIgZm9yIG90aGVyIGluIHJhbmdlKG51bV9ub2RlcykgaWYgb3RoZXIgIT0gbm9kZV0KICAgICAgICBzd2l0Y2hlcy5hcHBlbmQoKFtub2RlXSxvdGhlcnMsMSxmJ25vZGVfe25vZGV9X291dCcpKQogICAgICAgIHN3aXRjaGVzLmFwcGVuZCgob3RoZXJzLFtub2RlXSwxLGYnbm9kZV97bm9kZX1faW4nKSkKICAgIHJldHVybiBUb3BvbG9neShmJ0h1YkFuZFNwb2tlKG49e251bV9ub2Rlc30pJywgbGlua3MsIHN3aXRjaGVzKQoKZGVmIGZ1bGx5X2Nvbm5lY3RlZChudW1fbm9kZXMpOgogICAgbGlua3MgPSBbXQogICAgZm9yIGkgaW4gcmFuZ2UobnVtX25vZGVzKToKICAgICAgICByb3cgPSBbMV0gKiBudW1fbm9kZXMKICAgICAgICByb3dbaV0gPSAwCiAgICAgICAgbGlua3MuYXBwZW5kKHJvdykKICAgIHJldHVybiBUb3BvbG9neShmJ0Z1bGx5Q29ubmVjdGVkKG49e251bV9ub2Rlc30pJywgbGlua3MpCgpkZWYgcmluZyhudW1fbm9kZXMpOgogICAgbGlua3MgPSBbXQogICAgZm9yIGkgaW4gcmFuZ2UobnVtX25vZGVzKToKICAgICAgICByb3cgPSBbMF0gKiBudW1fbm9kZXMKICAgICAgICByb3dbKGkrMSkgJSBudW1fbm9kZXNdID0gMQogICAgICAgIHJvd1soaS0xKSAlIG51bV9ub2Rlc10gPSAxCiAgICAgICAgbGlua3MuYXBwZW5kKHJvdykKICAgIHJldHVybiBUb3BvbG9neShmJ1Jpbmcobj17bnVtX25vZGVzfSknLCBsaW5rcykKCmRlZiBsaW5lKG51bV9ub2Rlcyk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGxpbmtzID0gW10KICAgIGZvciBpIGluIHJhbmdlKG51bV9ub2Rlcyk6CiAgICAgICAgcm93ID0gWzBdICogbnVtX25vZGVzCiAgICAgICAgaWYgaSAtIDEgPj0gMDoKPHxmaW1fZW5kfD4="]
["8f79ae1494f03f2658c483948f5b3828de4dffb3-3","8f79ae1494f03f2658c483948f5b3828de4dffb3","PHxmaW1fcHJlZml4fD4KJycnCkEgc2ltcGxlIHByb2dyYW0gZm9yIEJlbmphbWluaS1Ib2NoYmVyZyBjb3JyZWN0aW9uCgpVc2FnZSA6CiAgJCBweXRob24gYmgucHkgW2lucHV0X2ZpbGVdCgpJbnB1dCBmb3JtYXQgOgonaW5wdXRfZmlsZScgaW5jbHVkZXMgdGFiLWxpbWl0ZWQgc3RyaW5ncyBhbmQgcC12YWx1ZXMgaW4gYSBmb3JtYXQgYmVsb3c6CgogIFtzdHJpbmcgMV1bdGFiXVtwLXZhbHVlIDFdCiAgW3N0cmluZyAyXVt0YWJdW3AtdmFsdWUgMl0KICAgIC4KICAgIC4KICAgIC4KICBbc3RyaW5nIG1dW3RhYl1bcC12YWx1ZSBtXQoKT3V0cHV0IGZvcm1hdCA6CgogIFtzdHJpbmcgMV1bdGFiXVtwLXZhbHVlIDFdW3RhYl1bQkgtY29ycmVjdGVkIHEtdmFsdWUgMV0KICBbc3RyaW5nIDJdW3RhYl1bcC12YWx1ZSAyXVt0YWJdW0JILWNvcnJlY3RlZCBxLXZhbHVlIDJdCiAgICAuCiAgICAuCiAgICAuCiAgW3N0cmluZyBtXVt0YWJdW3AtdmFsdWUgbV1bdGFiXVtCSC1jb3JyZWN0ZWQgcS12YWx1ZSBtXQonJycKCmltcG9ydCBzeXMKPHxmaW1faG9sZXw+CgogICAgYU5hbWUyUFF2YWx1ZUxpc3REaWMgPSB7fQoKICAgIGYgPSBvcGVuKCBhRmlsZU5hbWUgKQogICAgYUxpbmVMaXN0ID0gZi5yZWFkbGluZXMoKQogICAgZi5jbG9zZSgpCgogICAgZm9yIGFMaW5lIGluIGFMaW5lTGlzdDoKICAgICAgICBhVG9rZW5MaXN0ID0gYUxpbmVbOi0xXS5zcGxpdCgiXHQiKQoKICAgICAgICBhTmFtZSA9IGFUb2tlbkxpc3RbMF0KICAgICAgICBhUHZhbHVlID0gZmxvYXQoIGFUb2tlbkxpc3RbMV0gKQogICAgICAgIGFRcHJpbWUgPSAnLScKICAgICAgICBhUXZhbHVlID0gJy0nCiAgICAgICAgCiAgICAgICAgYU5hbWUyUFF2YWx1ZUxpc3REaWNbIGFOYW1lIF0gPSBbIGFQdmFsdWUgLCBhUXByaW1lLCBhUXZhbHVlIF0KCiAgICByZXR1cm4gYU5hbWUyUFF2YWx1ZUxpc3REaWMKCgpkZWYgY2FsY1FwcmltZSggYU5hbWUyUFF2YWx1ZUxpc3REaWMgKToKICAgIGkgPSAxCiAgICBtID0gbGVuKCBhTmFtZTJQUXZhbHVlTGlzdERpYyApCgogICAgZm9yIGFLZXksIGFWYWx1ZSBpbiBzb3J0ZWQoIGFOYW1lMlBRdmFsdWVMaXN0RGljLml0ZW1zKCksIGtleT1sYW1iZGEgeDp4WzFdWzBdICkgOgogICAgICAgIGFQdmFsdWUgPSBhTmFtZTJQUXZhbHVlTGlzdERpY1sgYUtleSBdWyAwIF0KICAgICAgICBhUXByaW1lID0gbSAqIGFQdmFsdWUgLyBpCiAgICAgICAgYU5hbWUyUFF2YWx1ZUxpc3REaWNbIGFLZXkgXVsgMSBdID0gYVFwcmltZQogICAgICAgIGkgKz0gMQoKICAgIHJldHVybiBhTmFtZTJQUXZhbHVlTGlzdERpYwoKCmRlZiBjYWxjUXZhbHVlKCBhTmFtZTJQUXZhbHVlTGlzdERpYyApOiAKICAgIG0gPSBsZW4oIGFOYW1lMlBRdmFsdWVMaXN0RGljICkKCiAgICBpID0gbQogICAgZm9yIGFLZXksIGFWYWx1ZSBpbiBzb3J0ZWQoIGFOYW1lMlBRdmFsdWVMaXN0RGljLml0ZW1zKCksIGtleT1sYW1iZGEgeDp4WzFdWzBdLCByZXZlcnNlPVRydWUgKSA6CiAgICAgICAgaWYgaSA9PSBtIDoKICAgICAgICAgICAgYVF2YWx1ZSA9IGFOYW1lMlBRdmFsdWVMaXN0RGljWyBhS2V5IF1bIDEgXQogICAgICAgIGVsc2UgOgogICAgICAgICAgICBhUXByaW1lID0gYU5hbWUyUFF2YWx1ZUxpc3REaWNbIGFLZXkgXVsgMSBdCiAgICAgICAgICAgIGFRdmFsdWUgPSBtaW4oIGFRcHJpbWUgLCBhUXZhbHVlICkKCiAgICAgICAgYU5hbWUyUFF2YWx1ZUxpc3REaWNbIGFLZXkgXVsgMiBdID0gYVF2YWx1ZQogICAgICAgICAgICAKICAgICAgICBpIC09IDEKCiAgICByZXR1cm4gYU5hbWUyUFF2YWx1ZUxpc3REaWMgCgoKZGVmIG1haW4oIGFGaWxlTmFtZSApOgogICAgYU5hbWUyUFF2YWx1ZUxpc3REaWMgPSBsb2FkUHZhbHVlKCBhRmlsZU5hbWUgKQogICAgYU5hbWUyUFF2YWx1ZUxpc3REaWMgPSBjYWxjUXByaW1lKCBhTmFtZTJQUXZhbHVlTGlzdERpYyApCiAgICBhTmFtZTJQUXZhbHVlTGlzdERpYyA9IGNhbGNRdmFsdWUoIGFOYW1lMlBRdmFsdWVMaXN0RGljICkKCiAgICBmb3IgYU5hbWUgaW4gYU5hbWUyUFF2YWx1ZUxpc3REaWMua2V5cygpOgogICAgICAgIFsgYVB2YWx1ZSAsIGFRcHJpbWUsIGFRdmFsdWUgXSA9IGFOYW1lMlBRdmFsdWVMaXN0RGljWyBhTmFtZSBdCiAgICAgICAgcHJpbnQoICJcdCIuam9pbiggbWFwKHN0ciwgWyBhTmFtZSwgYVB2YWx1ZSAsIGFRdmFsdWUgXSkgKSApCgptYWluKCBhRmlsZU5hbWUgKQo8fGZpbV9zdWZmaXh8PgoKYUZpbGVOYW1lID0gc3lzLmFyZ3ZbMV0KCmRlZiBsb2FkUHZhbHVlKCBhRmlsZU5hbWUgKToKPHxmaW1fZW5kfD4="]
["8f95a0b452d8bb9fc3e07b4621ee14a118f1a800-3","8f95a0b452d8bb9fc3e07b4621ee14a118f1a800",{"$cut":{"chars":20528,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zLCBzeXMsIHJlLCB0aW1lCmltcG9ydCB1cmxsaWIsIHVybGxpYjIKZnJvbSBCZWF1dGlmdWxTb3VwIGltcG9ydCBCZWF1dGlmdWxTb3VwCiNpbXBvcnQgYmVhdXRpZnVsc291cDQKaW1wb3J0IGd6aXAKZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KaW1wb3J0IE15U1FMZGIKaW1wb3J0IHNpbXBsZWpzb24gYXMganNvbgppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgcHltb25nbwojZnJvbSBjYXNzYW5kcmEuY2x1c3RlciBpbXBvcnQgQ2x1c3RlcgppbXBvcnQgY29uZi5jb25maWcgYXMgY29uZmlnCmZyb20gY3J5cHRvY3VycnkuY3J5cHRvX3NldHRpbmdzIGltcG9ydCAqCmZyb20gcmVxdWVzdHMgaW1wb3J0IFJlcXVlc3QsIFNlc3Npb24KZnJvbSByZXF1ZXN0cy5leGNlcHRpb25zIGltcG9ydCBDb25uZWN0aW9uRXJyb3IsIFRpbWVvdXQsIFRvb01hbnlSZWRpcmVjdHMKCnNsZWVwdGltZSA9IGNvbmZpZy5TTEVFUFRJTUUKCmNsYXNzIE5vUmVkaXJlY3RIYW5kbGVyKHVybGxpYjIuSFRUUFJlZGlyZWN0SGFuZGxlcik6CiAgICBkZWYgaHR0cF9lcnJvcl8zMDIoc2VsZiwgcmVxLCBmcCwgY29kZSwgbXNnLCBoZWFkZXJzKToKICAgICAgICBpbmZvdXJsID0gdXJsbGliLmFkZGluZm91cmwoZnAsIGhlYWRlcnMsIHJlcS5nZXRfZnVsbF91cmwoKSkKICAgICAgICBpbmZvdXJsLnN0YXR1cyA9IGNvZGUKICAgICAgICBpbmZvdXJsLmNvZGUgPSBjb2RlCiAgICAgICAgcmV0dXJuIGluZm91cmwKCiAgICBodHRwX2Vycm9yXzMwMCA9IGh0dHBfZXJyb3JfMzAyCiAgICBodHRwX2Vycm9yXzMwMSA9IGh0dHBfZXJyb3JfMzAyCiAgICBodHRwX2Vycm9yXzMwMyA9IGh0dHBfZXJyb3JfMzAyCiAgICBodHRwX2Vycm9yXzMwNyA9IGh0dHBfZXJyb3JfMzAyIAoKCmRlZiBkZWNvZGVHemlwcGVkQ29udGVudChlbmNvZGVkX2NvbnRlbnQpOgogICAgcmVzcG9uc2Vfc3RyZWFtID0gU3RyaW5nSU8oZW5jb2RlZF9jb250ZW50KQogICAgZGVjb2RlZF9jb250ZW50ID0gIiIKICAgIHRyeToKICAgICAgICBnemlwcGVyID0gZ3ppcC5HemlwRmlsZShmaWxlb2JqPXJlc3BvbnNlX3N0cmVhbSkKICAgICAgICBkZWNvZGVkX2NvbnRlbnQgPSBnemlwcGVyLnJlYWQoKQogICAgZXhjZXB0OiAjIE1heWJlIHRoaXMgaXNuJ3QgZ3ppcHBlZCBjb250ZW50IGFmdGVyIGFsbC4uLi4KICAgICAgICBkZWNvZGVkX2NvbnRlbnQgPSBlbmNvZGVkX2NvbnRlbnQKICAgIHJldHVybihkZWNvZGVkX2NvbnRlbnQpCgoKZGVmIGdldG1vbmdvY2xpZW50KCk6CiAgICBjbGllbnQgPSBweW1vbmdvLk1vbmdvQ2xpZW50KHBvcnQ9Y29uZmlnLk1PTkdPX1BPUlQpCgoKZGVmIHNjcmFwZUZyb21JbnZlc3QoKToKICAgIHVybCA9ICJodHRwczovL3d3dy5pbnZlc3RpbmcuY29tL2NyeXB0by8iCiAgICBvcGVuZXIgPSB1cmxsaWIyLmJ1aWxkX29wZW5lcih1cmxsaWIyLkhUVFBIYW5kbGVyKCksIHVybGxpYjIuSFRUUFNIYW5kbGVyKCksIE5vUmVkaXJlY3RIYW5kbGVyKCkpCiAgICBodHRwX2hlYWRlcnMgPSB7ICdVc2VyLUFnZW50JyA6IHInTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXT1c2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzI3LjAuMTQ1My4xMTAgU2FmYXJpLzUzNy4zNicsICAnQWNjZXB0JyA6ICd0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSwqLyo7cT0wLjgnLCAnQWNjZXB0LUxhbmd1YWdlJyA6ICdlbi1VUyxlbjtxPTAuOCcsICdBY2NlcHQtRW5jb2RpbmcnIDogJ2d6aXAsZGVmbGF0ZSxzZGNoJywgJ0Nvbm5lY3Rpb24nIDogJ2tlZXAtYWxpdmUnLCAnSG9zdCcgOiAnd3d3LmludmVzdGluZy5jb20nLCAnUmVmZXJlcicgOiAnaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbScgfQogICAgaW52ZXN0aW5nX3JlcXVlc3QgPSB1cmxsaWIyLlJlcXVlc3QodXJsLCBOb25lLCBodHRwX2hlYWRlcnMpCiAgICBpbnZlc3RpbmdfcmVzcG9uc2UgPSBOb25lCiAgICB0cnk6CiAgICAgICAgaW52ZXN0aW5nX3Jlc3BvbnNlID0gb3BlbmVyLm9wZW4oaW52ZXN0aW5nX3JlcXVlc3QpCiAgICBleGNlcHQ6CiAgICAgICAgcHJpbnQgIkNvdWxkIG5vdCBnZXQgdGhlIHJhdyBjcnlwdG9jdXJyZW5jeSBkYXRhIC0gRXJyb3I6ICVzXG4iJXN5cy5leGNfaW5mbygpWzFdLl9fc3RyX18oKQogICAgICAgIHJldHVybiBGYWxzZQogICAgaWYgbm90IGludmVzdGluZ19yZXNwb25zZToKICAgICAgICBwcmludCAiQ291bGQgbm90IHJldHJpZXZlIHJlc3BvbnNlIGZyb20gdGhlIHJlcXVlc3QgdG8gaHR0cHM6Ly93d3cuaW52ZXN0aW5nLmNvbS9jcnlwdG8vIgogICAgICAgIHJldHVybiBGYWxzZQogICAgaW52ZXN0aW5nX2RhdGFfZW5jID0gaW52ZXN0aW5nX3Jlc3BvbnNlLnJlYWQoKQogICAgaW52ZXN0aW5nX2RhdGEgPSBkZWNvZGVHemlwcGVkQ29udGVudChpbnZlc3RpbmdfZGF0YV9lbmMpCiAgICAjcHJpbnQgaW52ZXN0aW5nX2RhdGEKICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKGludmVzdGluZ19kYXRhKQogICAgZGF0YXRkcyA9IHNvdXAuZmluZEFsbCgidGQiLCB7J2NsYXNzJyA6ICdmbGFnJ30pCiAgICBtb25nb2Nvbm4gPSBweW1vbmdvLk1vbmdvQ2xpZW50KCJtb25nb2RiOi8vJXM6JXNAbG9jYWxob3N0OiVzL2NyeXB0b2N1cnJlbmN5IiUoY29uZmlnLk1PTkdPX1VTRVIsIGNvbmZpZy5NT05HT19QQVNTV0QsIGNvbmZpZy5NT05HT19QT1JUKSkKICAgIGRiID0gbW9uZ29jb25uLmNyeXB0b2N1cnJlbmN5CiAgICBmb3IgdGQgaW4gZGF0YXRkczoKICAgICAgICBjdXJybmFtZXRkID0gdGQuZmluZE5leHQoJ3RkJykKICAgICAgICBjdXJybmFtZSA9IGN1cnJuYW1ldGRbJ3RpdGxlJ10KICAgICAgICBjdXJybmFtZXRkID0gY3Vycm5hbWV0ZC5maW5kTmV4dCgndGQnKQogICAgICAgIGN1cnJzeW1ib2wgPSBjdXJybmFtZXRkWyd0aXRsZSddCiAgICAgICAgY3Vycm5hbWV0ZCA9IGN1cnJuYW1ldGQuZmluZE5leHQoJ3RkJykKICAgICAgICBjdXJycHJpY2UgPSBjdXJybmFtZXRkLmdldFRleHQo"}}]
["2e1070448f3f89034701e5ad1c542a3dfbaa610c-3","2e1070448f3f89034701e5ad1c542a3dfbaa610c","PHxmaW1fcHJlZml4fD4KIiIiIE1vZHVsZSB0byBhY2Nlc3MgdGhlIEpvYnMgZW5kcG9pbnRzICIiIgojIHB5bGludDogZGlzYWJsZT10b28tbWFueS1saW5lcyx0b28tbWFueS1sb2NhbHMsdG9vLW1hbnktcHVibGljLW1ldGhvZHMsdG9vLWZldy1wdWJsaWMtbWV0aG9kcwoKZnJvbSB0eXBpbmcgaW1wb3J0IEFueSwgRGljdCwgTGlzdCwgT3B0aW9uYWwsIFVuaW9uCgpmcm9tIHB5ZGFudGljIGltcG9ydCBCYXNlTW9kZWwKCmZyb20gLi4ubW9kZWxzIGltcG9ydCBDcmVhdGVKb2JKc29uQm9keSwgSm9iLCBTdGF0dXNPSwpmcm9tIC4uYmFzZSBpbXBvcnQgQXBpQmFzZUNsYXNzCgoKY2xhc3MgSm9ic0FwaShBcGlCYXNlQ2xhc3MpOgogICAgIiIiRW5kcG9pbnRzIHJlbGF0ZWQgdG8gdmFyaW91cyBiYWNrZ3JvdW5kIGpvYnMgdGhhdCBjYW4gYmUgcnVuIGJ5IHRoZQogICAgc2VydmVyIG9yIHNlcGFyYXRlbHkgYnkgam9iIHNlcnZlcnMuIiIiCgogICAgYXN5bmMgZGVmIGdldF9qb2JzKAogICAgICAgIHNlbGYsCiAgICAgICAgKiwKICAgICAgICBwYWdlOiBPcHRpb25hbFtpbnRdID0gMCwKICAgICAgICBwZXJfcGFnZTogT3B0aW9uYWxbaW50XSA9IDYwLAogICAgKSAtPiBMaXN0W0pvYl06CiAgICAgICAgIiIiR2V0IHRoZSBqb2JzLgoKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIE11c3QgaGF2ZSBgbWFuYWdlX2pvYnNgIHBlcm1pc3Npb24uCiAgICAgICAgTWluaW11bSBTZXJ2ZXIgVmVyc2lvbjoKICAgICAgICAgICAgNC4xCgogICAgICAgIEFwaSBSZWZlcmVuY2U6CiAgICAgICAgICAgIGBHZXRKb2JzIDxodHRwczovL2FwaS5tYXR0ZXJtb3N0LmNvbS8jb3BlcmF0aW9uL0dldEpvYnM+YF8KICAgICAgICAiIiIKCiAgICAgICAgdXJsID0gIi9qb2JzIgogICAgICAgIHBhcmFtczogRGljdFtzdHIsIEFueV0gPSB7CiAgICAgICAgICAgICJwYWdlIjogcGFnZSwKICAgICAgICAgICAgInBlcl9wYWdlIjogcGVyX3BhZ2UsCiAgICAgICAgfQogICAgICAgIHBhcmFtcyA9IHtrOiB2IGZvciBrLCB2IGluIHBhcmFtcy5pdGVtcygpIGlmIHYgaXMgbm90IE5vbmV9CgogICAgICAgIHJlcXVlc3Rfa3dhcmdzID0gewogICAgICAgICAgICAidXJsIjogdXJsLAogICAgICAgICAgICAicGFyYW1zIjogcGFyYW1zLAogICAgICAgIH0KICAgICAgICAjIHB5bGludDogZGlzYWJsZS1uZXh0PXByb3RlY3RlZC1hY2Nlc3MKICAgICAgICBhc3luYyB3aXRoIHNlbGYuY2xpZW50Ll9nZXRfaHR0cHhfY2xpZW50KCkgYXMgaHR0cHhfY2xpZW50OgogICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IGh0dHB4X2NsaWVudC5nZXQoCiAgICAgICAgICAgICAgICAqKnJlcXVlc3Rfa3dhcmdzLAogICAgICAgICAgICApCgogICAgICAgIGlmIHNlbGYuc2tpcF9yZXNwb25zZV9wYXJzaW5nOgogICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UKCiAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgPT0gMjAwOgogICAgICAgICAgICByZXNwb25zZTIwMCA9IFtdCiAgICAgICAgICAgIF9yZXNwb25zZTIwMCA9IHJlc3BvbnNlLmpzb24oKQogICAgICAgICAgICBmb3IgcmVzcG9uc2UyMDBfaXRlbV9kYXRhIGluIF9yZXNwb25zZTIwMDoKICAgICAgICAgICAgICAgIHJlc3BvbnNlMjAwX2l0ZW0gPSBKb2IucGFyc2Vfb2JqKHJlc3BvbnNlMjAwX2l0ZW1fZGF0YSkKCiAgICAgICAgICAgICAgICByZXNwb25zZTIwMC5hcHBlbmQocmVzcG9uc2UyMDBfaXRlbSkKCiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTIwMAogICAgICAgIHJldHVybiByZXNwb25zZQoKICAgIGFzeW5jIGRlZiBjcmVhdGVfam9iKAogICAgICAgIHNlbGYsCiAgICAgICAgKiwKICAgICAgICBqc29uX2JvZHk6IFVuaW9uW0NyZWF0ZUpvYkpzb25Cb2R5LCBEaWN0XSwKICAgICkgLT4gSm9iOgogICAgICAgICIiIkNyZWF0ZSBhIG5ldyBqb2IuCgogICAgICAgIENyZWF0ZSBhIG5ldyBqb2IuCgogICAgICAgIFBlcm1pc3Npb25zOgogICAgICAgICAgICBNdXN0IGhhdmUgYG1hbmFnZV9qb2JzYCBwZXJtaXNzaW9uLgogICAgICAgIE1pbmltdW0gU2VydmVyIFZlcnNpb246CiAgICAgICAgICAgIDQuMQoKICAgICAgICBBcGkgUmVmZXJlbmNlOgogICAgICAgICAgICBgQ3JlYXRlSm9iIDxodHRwczovL2FwaS5tYXR0ZXJtb3N0LmNvbS8jb3BlcmF0aW9uL0NyZWF0ZUpvYj5gXwogICAgICAgICIiIgoKICAgICAgICB1cmwgPSAiL2pvYnMiCgogICAgICAgIGlmIGlzaW5zdGFuY2UoanNvbl9ib2R5LCBCYXNlTW9kZWwpOgogICAgICAgICAgICBqc29uX2pzb25fYm9keSA9IGpzb25fYm9keS5kaWN0KGV4Y2x1ZGVfdW5zZXQ9VHJ1ZSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBqc29uX2pzb25fYm9keSA9IGpzb25fYm9keQoKICAgICAgICByZXF1ZXN0X2t3YXJncyA9IHsKICAgICAgICAgICAgInVybCI6IHVybCwKICAgICAgICAgICAgImpzb24iOiBqc29uX2pzb25fYm9keSwKICAgICAgICB9CiAgICAgICAgIyBweWxpbnQ6IGRpc2FibGUtbmV4dD1wcm90ZWN0ZWQtYWNjZXNzCiAgICAgICAgYXN5bmMgd2l0aCBzZWxmLmNsaWVudC5fZ2V0X2h0dHB4X2NsaWVudCgpIGFzIGh0dHB4X2NsaWVudDoKICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBodHRweF9jbGllbnQucG9zdCgKICAgICAgICAgICAgICAgICoqcmVxdWVzdF9rd2FyZ3MsCiAgICAgICAgICAgICkKCiAgICAgICAgaWYgc2VsZi5za2lwX3Jlc3BvbnNlX3BhcnNpbmc6CiAgICAgICAgICAgIHJldHVybiByZXNwb25zZQoKICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSA9PSAyMDE6CiAgICAgICAgICAgIHJlc3BvbnNlMjAxID0gSm9iLnBhcnNlX29iaihyZXNwb25zZS5qc29uKCkpCgogICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UyMDEKICAgICAgICByZXR1cm4gcmVzcG9uc2UKCiAgICBhc3luYyBkZWYgZ2V0X2pvYigKICAgICAgICBzZWxmLAogICAgICAgIGpvYl9pZDogc3RyLAogICAgKSAtPiBKb2I6CiAgICAgICAgIiIiR2V0IGEgam9iLgoKICAgICAgICBHZXRzIGEgc2luZ2xlIGpvYi4KCiAgICAgICAgUGVybWlzc2lvbnM6CiAgICAgICAgICAgIE11c3QgaGF2ZSBgbWFuYWdlX2pvYnNgIHBlcm1pc3Npb24uCiAgICAgICAgTWluaW11bSBTZXJ2ZXIgVmVyc2lvbjoKICAgICAgICAgICAgNC4xCgogICAgICAgIEFwaSBSZWZlcmVuY2U6CiAgICAgICAgICAgIGBHZXRKb2IgPGh0dHBzOi8vYXBpLm1hdHRlcm1vc3QuY29tLyNvcGVyYXRpb24vR2V0Sm9iPmBfCiAgICAgICAgIiIiCgogICAgICAgIHVybCA9IGYiL2pvYnMve2pvYl9pZH0iCgogICAgICAgIHJlcXVlc3Rfa3dhcmdzID0gewogICAgICAgICAgICAidXJsIjogdXJsLAogICAgICAgIH0KICAgICAgICAjIHB5bGludDogZGlzYWJsZS1uZXh0PXByb3RlY3RlZC1hY2Nlc3MKICAgICAgICBhc3luYyB3aXRoIHNlbGYuY2xpZW50Ll9nZXRfaHR0cHhfY2xpZW50KCkgYXMgaHR0cHhfY2xpZW50OgogICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IGh0dHB4X2NsaWVudC5nZXQoCiAgICAgICAgICAgICAgICAqKnJlcXVlc3Rfa3dhcmdzLAogICAgICAgICAgICApCgogICAgICAgIGlmIHNlbGYuc2tpcF9yZXNwb25zZV9wYXJzaW5nOgogICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UKCiAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgPT0gMjAwOgogICAgICAgICAgICByZXNwb25zZTIwMCA9IEpvYi5wYXJzZV9vYmoocmVzcG9uc2UuanNvbigpKQoKICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlMjAwCiAgICAgICAgcmV0dXJuIHJlc3BvbnNlCgogICAgYXN5bmMgZGVmIGRvd25sb2FkX2pvYigKICAgICAgICBzZWxmLAogICAgICAgIGpvYl9pZDogc3RyLAogICAgKSAtPiBOb25lOgogICAgICAgICIiIkRvd25sb2FkIHRoZSByZXN1bHRzIG9mIGEgam9iLgoKICAgICAgICBEb3dubG9hZCB0aGUgcmVzdWx0IG9mIGEgc2luZ2xlIGpvYi4KCiAgICAgICAgUGVybWlzc2lvbnM6CiAgICAgICAgICAgIE11c3QgaGF2ZSBgbWFuYWdlX2pvYnNgIHBlcm1pc3Npb24uCiAgICAgICAgTWluaW11bSBTZXJ2ZXIgVmVyc2lvbjoKICAgICAgICAgICAgNS4yOAoKICAgICAgICBBcGkgUmVmZXJlbmNlOgogICAgICAgICAgICBgRG93bmxvYWRKb2IgPGh0dHBzOi8vYXBpLm1hdHRlcm1vc3QuY29tLyNvcGVyYXRpb24vRG93bmxvYWRKb2I+YF8KICAgICAgICAiIiIKCiAgICAgICAgdXJsID0gZiIvam9icy97am9iX2lkfS9kb3dubG9hZCIKCiAgICAgICAgcmVxdWVzdF9rd2FyZ3MgPSB7CiAgICAgICAgICAgICJ1cmwiOiB1cmwsCiAgICAgICAgfQogICAgICAgICMgcHlsaW50OiBkaXNhYmxlLW5leHQ9cHJvdGVjdGVkLWFjY2VzcwogICAgICAgIGFzeW5jIHdpdGggc2VsZi5jbGllbnQuX2dldF9odHRweF9jbGllbnQoKSBhcyBodHRweF9jbGllbnQ6CiAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cHhfY2xpZW50LmdldCgKICAgICAgICAgICAgICAgICoqcmVxdWVzdF9rd2FyZ3MsCiAgICAgICAgICAgICkKCiAgICAgICAgaWYgc2VsZi5za2lwX3Jlc3BvbnNlX3BhcnNpbmc6CiAgICAgICAgICAgIHJldHVybiByZXNwb25zZQoKICAgICAgICByZXR1cm4gcmVzcG9uc2UKCiAgICBhc3luYyBkZWYgY2FuY2VsX2pvYigKICAgICAgICBzZWxmLAogICAgICAgIGpvYl9pZDogc3RyLAogICAgKSAtPiBTdGF0dXNPSzoKICAgICAgICAiIiJDYW5jZWwgYSBqb2IuCgogICAgICAgIENhbmNlbCBhIGpvYi4KCiAgICAgICAgUGVybWlzc2lvbnM6CiAgICAgICAgICAgIE11c3QgaGF2ZSBgbWFuYWdlX2pvYnNgIHBlcm1pc3Npb24uCiAgICAgICAgTWluaW11bSBTZXJ2ZXIgVmVyc2lvbjoKICAgICAgICAgICAgNC4xCgogICAgICAgIEFwaSBSZWZlcmVuY2U6CiAgICAgICAgICAgIGBDYW5jZWxKb2IgPGh0dHBzOi8vYXBpLm1hdHRlcm1vc3QuY29tLyNvcGVyYXRpb24vQ2FuY2VsSm9iPmBfCiAgICAgICAgIiIiCgogICAgICAgIHVybCA9IGYiL2pvYnMve2pvYl9pZH0vY2FuY2VsIgoKICAgICAgICByZXF1ZXN0X2t3YXJncyA9IHsKICAgICAgICAgICAgInVybCI6IHVybCwKICAgICAgICB9CiAgICAgICAgIyBweWxpbnQ6IGRpc2FibGUtbmV4dD1wcm90ZWN0ZWQtYWNjZXNzCiAgICAgICAgYXN5bmMgd2l0aCBzZWxmLmNsaWVudC5fZ2V0X2h0dHB4X2NsaWVudCgpIGFzIGh0dHB4X2NsaWVudDoKICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBodHRweF9jbGllbnQucG9zdCgKICAgICAgICAgICAgICAgICoqcmVxdWVzdF9rd2FyZ3MsCiAgICAgICAgICAgICkKCiAgICAgICAgaWYgc2VsZi5za2lwX3Jlc3BvbnNlX3BhcnNpbmc6CiAgICAgICAgICAgIHJldHVybiByZXNwb25zZQoKICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSA9PSAyMDA6CiAgICAgICAgICAgIHJlc3BvbnNlMjAwID0gU3RhdHVzT0sucGFyc2Vfb2JqKHJlc3BvbnNlLmpzb24oKSkKCiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTIwMAogICAgICAgIHJldHVybiByZXNwb25zZQoKICAgIGFzeW5jIGRlZiBnZXRfam9ic19ieV90eXBlKAogICAgICAgIHNlbGYsCiAgICAgICAgdHlwZTogc3RyLAogICAgICAgICosCiAgICAgICAgcGFnZTogT3B0aW9uYWxbaW50XSA9IDAsCiAgICAgICAgcGVyX3BhZ2U6IE9wdGlvbmFsW2ludF0gPSA2MCwKICAgICkgLT4gTGlzdFtKb2JdOgogICAgICAgICIiIkdldCB0aGUgam9icyBvZiB0aGUgZ2l2ZW4gdHlwZS4KCiAgICAgICAgR2V0IGEgcGFnZSBvZiBqb2JzIG9mIHRoZSBnaXZlbiB0eXBlLiBVc2UgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gbW9kaWZ5CiAgICAgICAgdGhlIGJlaGF2aW91ciBvZiB0aGlzIGVuZHBvaW50LgoKICAgICAgICBQZXJtaXNzaW9uczoKICAgICAgICAgICAgTXVzdCBoYXZlIGBtYW5hZ2Vfam9ic2AgcGVybWlzc2lvbi4KICAgICAgICBNaW5pbXVtIFNlcnZlciBWZXJzaW9uOgogICAgICAgICAgICA0LjEKCiAgICAgICAgQXBpIFJlZmVyZW5jZToKICAgICAgICAgICAgYEdldEpvYnNCeVR5cGUgPGh0dHBzOi8vYXBpLm1hdHRlcm1vc3QuY29tLyNvcGVyYXRpb24vR2V0Sm9ic0J5VHlwZT5gXwogICAgICAgICIiIgoKICAgICAgICB1cmwgPSBmIi9qb2JzL3R5cGUve3R5cGV9IgogICAgICAgIHBhcmFtczogRGljdFtzdHIsIEFueV0gPSB7CiAgICAgICAgICAgICJwYWdlIjogcGFnZSwKICAgICAgICAgICAgInBlcl9wYWdlIjogcGVyX3BhZ2UsCiAgICAgICAgfQogICAgICAgIHBhcmFtcyA9IHtrOiB2IGZvciBrLCB2IGluIHBhcmFtcy5pdGVtcygpIGlmIHYgaXMgbm90IE5vbmV9CgogICAgICAgIHJlcXVlc3Rfa3dhcmdzID0gewogICAgICAgICAgICAidXJsIjogdXJsLAogICAgICAgICAgICAicGFyYW1zIjogcGFyYW1zLAogICAgICAgIH0KICAgICAgICAjIHB5bGludDogZGlzYWJsZS1uZXh0PXByb3RlY3RlZC1hY2Nlc3MKICAgICAgICBhc3luYyB3aXRoIHNlbGYuY2xpZW50Ll9nZXRfaHR0cHhfY2xpZW50KCkgYXMgaHR0cHhfY2xpZW50OgogICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IGh0dHB4X2NsaWVudC5nZXQoCiAgICAgICAgICAgICAgICAqKnJlcXVlc3Rfa3dhcmdzLAogICAgICAgICAgICApCgogICAgICAgIGlmIHNlbGYuc2tpcF9yZXNwb25zZV9wYXJzaW5nOgogICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UKCiAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgPT0gMjAwOgogICAgICAgICAgICByZXNwb25zZTIwMCA9IFtdCiAgICAgICAgICAgIF9yZXNwb25zZTIwMCA9IHJlc3BvbnNlLmpzb24oKQogICAgICAgICAgICBmb3IgcmVzcG9uc2UyMDBfaXRlbV9kYXRhIGluIF9yZXNwb25zZTIwMDoKICAgICAgICAgICAgICAgIHJlc3BvbnNlMjAwX2l0ZW0gPSBKb2IucGFyc2Vfb2JqKHJlc3BvbnNlMjAwX2l0ZW1fZGF0YSkKCiAgICAgICAgICAgICAgICByZXNwb25zZTIwMC5hcHBlbmQocmVzcG9uc2UyMDBfaXRlbSkKCiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTIwMAogICAgICAgIHJldHVybiByZXNwb25zZQo8fGZpbV9zdWZmaXh8PgogICAgICAgIEdldCBhIHBhZ2Ugb2Ygam9icy4gVXNlIHRoZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIG1vZGlmeSB0aGUgYmVoYXZpb3VyIG9mCiAgICAgICAgdGhpcyBlbmRwb2ludC4KCiAgICAgICAgUGVybWlzc2lvbnM6Cjx8ZmltX2VuZHw+"]
["74c5623a442d6bf377f0c44a562460663de189e0-2","74c5623a442d6bf377f0c44a562460663de189e0","PHxmaW1fcHJlZml4fD4KI25hbWUgPSBpbnB1dCgiTW9pIGJhbiBuaGFwIHRlbjogIikKI3ByaW50KCJ0ZW4gY3VhIGJhbiBsYTogIituYW1lKQoKaW1wb3J0IG51bXB5Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBudW1weSBpbXBvcnQgKgpmcm9tIG9wZXJhdG9yIGltcG9ydCBhZGQKZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluCmZyb20gaXRlcnRvb2xzIGltcG9ydCBjeWNsZSwgaXNsaWNlCjx8ZmltX2VuZHw+"]
["8f6a113a0da7f10910ef93db244fc6c8cbd7fd9f-3","8f6a113a0da7f10910ef93db244fc6c8cbd7fd9f","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAxNCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiIiIkV4Y2VwdGlvbnMgcmFpc2VkIGJ5IHRoZSBkZXBsb3ltZW50IGhlbHBlciBsaWJyYXJ5LiIiIgoKCgoKY2xhc3MgQ29uZmlnRXJyb3IoRXhjZXB0aW9uKToKICAiIiJUb3AgbGV2ZWwgZXhjZXB0aW9uIGZvciBhbGwgRGVwbG95IGVycm9ycy4iIiIKICBwYXNzCgoKY2xhc3MgRGVwbG95RW1wdHlDb25maWdFcnJvcihDb25maWdFcnJvcik6CiAgIiIiRWl0aGVyIGNvbmZpZyBmaWxlIG5vdCBmb3VuZCwgb3IgZW1wdHkgY29uZmlnIGZpbGUuIiIiCiAgcGFzcwoKCmNsYXNzIEJhZFN0YXRpY1JlZmVyZW5jZUVycm9yKENvbmZpZ0Vycm9yKToKICAiIiJDb3VsZCBub3QgcmVzb2x2ZSB0aGUgc3RhdGljIHJlZmVyZW5jZSBhdCBwYXJzZSB0aW1lLiIiIgogIHBhc3MKCgpjbGFzcyBJbnZhbGlkUGRFcnJvcihDb25maWdFcnJvcik6CiAgIiIiVGhlIFBEIG5hbWUgb3Igc3BlY3MgYXJlIGludmFsaWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4iIiIKICBwYXNzCgoKY2xhc3MgSW52YWxpZFZtTmFtZUVycm9yKENvbmZpZ0Vycm9yKToKICAiIiJUaGUgbm9kZSBuYW1lcyBhcmUgbm90IHZhbGlkIFZNIG5hbWVzLiIiIgogIHBhc3MKCgpjbGFzcyBOb0NsdXN0ZXJTZWN0aW9uSW5Db25maWdFcnJvcihDb25maWdFcnJvcik6CiAgIiIiTm8gY2x1c3RlciBzZWN0aW9uIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4iIiIKICBwYXNzCgoKY2xhc3MgTm9DbHVzdGVyVHlwZUluQ29uZmlnRXJyb3IoQ29uZmlnRXJyb3IpOgogICIiIk5vIGNsdXN0ZXIgdHlwZSB3YXMgc3BlY2lmaWVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuIiIiCiAgcGFzcwoKCmNsYXNzIE5vU2V0dXBNb2R1bGVzSW5Db25maWdFcnJvcihDb25maWdFcnJvcik6CiAgIiIiTm8gc2V0dXAgbW9kdWxlIGxpc3Qgd2FzIHNwZWNpZmllZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLiIiIgogIHBhc3MKCgpjbGFzcyBOb1Byb2plY3RJbkNvbmZpZ0Vycm9yKENvbmZpZ0Vycm9yKToKICAiIiJObyBwcm9qZWN0IHNwZWNpZmllZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLiIiIgogIHBhc3MKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCmNsYXNzIE5vWm9uZUluQ29uZmlnRXJyb3IoQ29uZmlnRXJyb3IpOgogICIiIk5vIHpvbmUgc3BlY2lmaWVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuIiIiCjx8ZmltX2VuZHw+"]
["9996f7d84a330199bdd71df8ff1153e5b8d8de66-3","9996f7d84a330199bdd71df8ff1153e5b8d8de66","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5cXBhbmRhIGFzIHEKaW1wb3J0IG51bXB5IGFzIG5wCgpkZWYgcGFyaXR5X2NoZWNrX2NpcmN1aXQocXViaXRfbGlzdCk6CiAgICB2cWM9cS5WYXJpYXRpb25hbFF1YW50dW1DaXJjdWl0KCkKICAgIGZvciBpIGluIHJhbmdlKGxlbihxdWJpdF9saXN0KS0xKToKICAgICAgICB2cWMuaW5zZXJ0KHEuVmFyaWF0aW9uYWxRdWFudHVtR2F0ZV9DTk9UKHF1Yml0X2xpc3RbaV0scXViaXRfbGlzdFtsZW4ocXViaXRfbGlzdCktMV0pKQogICAgcmV0dXJuIHZxYwoKZGVmIHNpbXVsYXRlWlRlcm1fVlFDKHF1Yml0X2xpc3QsY29lZix0aW1lKToKICAgIHZxYz1xLlZhcmlhdGlvbmFsUXVhbnR1bUNpcmN1aXQoKQogICAgaWYgMD09bGVuKHF1Yml0X2xpc3QpOgogICAgICAgIHJldHVybiB2cWMKICAgIGVsaWYgMT09bGVuKHF1Yml0X2xpc3QpOgogICAgICAgIHZxYy5pbnNlcnQocS5WYXJpYXRpb25hbFF1YW50dW1HYXRlX1JaKHF1Yml0X2xpc3RbMF0sIC1jb2VmICogdGltZSoyKSkKICAgIGVsc2U6CiAgICAgICAgdnFjLmluc2VydChwYXJpdHlfY2hlY2tfY2lyY3VpdChxdWJpdF9saXN0KSlcCiAgICAgICAgICAgLmluc2VydChxLlZhcmlhdGlvbmFsUXVhbnR1bUdhdGVfUloocXViaXRfbGlzdFtsZW4ocXViaXRfbGlzdCktMV0sIC1jb2VmICogdGltZSoyKSlcCiAgICAgICAgICAgLmluc2VydChwYXJpdHlfY2hlY2tfY2lyY3VpdChxdWJpdF9saXN0KSkKICAgIHJldHVybiB2cWMKCmRlZiBzaW11bGF0ZVBhdWxpWkhhbWlsdG9uaWFuX1ZRQyhxdWJpdF9saXN0LEhhbWlsdG9uaWFuLHRpbWUpOgogICAgdnFjPXEuVmFyaWF0aW9uYWxRdWFudHVtQ2lyY3VpdCgpCiAgICBmb3IgaSBpbiByYW5nZShsZW4oSGFtaWx0b25pYW4pKToKICAgICAgICB0bXBfdmVjPVtdCiAgICAgICAgaXRlbT1IYW1pbHRvbmlhbltpXQogICAgICAgIG1hcD1pdGVtWzBdCiAgICAgICAgZm9yIGl0ZXIgaW4gbWFwOgogICAgICAgICAgICBpZiAnWichPW1hcFtpdGVyXToKICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgdG1wX3ZlYy5hcHBlbmQocXViaXRfbGlzdFtpdGVyXSkKICAgICAgICBpZiAwIT1sZW4odG1wX3ZlYyk6CiAgICAgICAgICAgIHZxYy5pbnNlcnQoc2ltdWxhdGVaVGVybV9WUUMocXViaXRfbGlzdD10bXBfdmVjLGNvZWY9aXRlbVsxXSx0aW1lPXRpbWUpKQogICAgcmV0dXJuIHZxYwoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIAogICAgbWFjaGluZT1xLmluaXRfcXVhbnR1bV9tYWNoaW5lKHEuUU1hY2hpbmVUeXBlLkNQVV9TSU5HTEVfVEhSRUFEKQogICAKICAgIEgxID0gcS5QYXVsaU9wZXJhdG9yKHsnWjAgWjQnOjAuNzMsJ1owIFo1JzowLjMzLCdaMCBaNic6MC41LCdaMSBaNCc6MC42OSwKICAgICdaMSBaNSc6MC4zNiwnWjIgWjUnOjAuODgsJ1oyIFo2JzowLjU4LCdaMyBaNSc6MC42NywnWjMgWjYnOjAuNDN9KQogICAgcWxpc3Q9bWFjaGluZS5xQWxsb2NfbWFueShIMS5nZXRNYXhJbmRleCgpKQoKICAgIHN0ZXA9MgogICAgZ2FtbWEgPSBxLnZhcihucC5vbmVzKChzdGVwLDEpLCBkdHlwZSA9ICdmbG9hdDY0JykqKDAuMDEpKQogICAgYmV0YSA9IHEudmFyKG5wLm9uZXMoKHN0ZXAsMSksIGR0eXBlID0gJ2Zsb2F0NjQnKSowLjAxKQoKICAgICMgdnFjMj1xLlZhcmlhdGlvbmFsUXVhbnR1bUNpcmN1aXQoKQogICAgIyB2cWMyLmluc2VydChxLlJYKHFsaXN0WzBdLDMuMTQxNSkpLmluc2VydChxLlZhcmlhdGlvbmFsUXVhbnR1bUdhdGVfUlgocWxpc3RbMV0sZ2FtbWFbMF0pKS5pbnNlcnQocS5SWChxbGlzdFsyXSwzLjE0MTUpKS5pbnNlcnQocS5SWChxbGlzdFszXSwzLjE0MTUpKQogICAgIyBsb3NzMj1xLnFvcCh2cWMyLCBIMSwgbWFjaGluZSwgcWxpc3QpICAKICAgICMgcHJpbnQocS5ldmFsKGxvc3MyLFRydWUpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgdnFjPXEuVmFyaWF0aW9uYWxRdWFudHVtQ2lyY3VpdCgpCiAgICBmb3IgaSBpbiBxbGlzdDoKICAgICAgICB2cWMuaW5zZXJ0KHEuVmFyaWF0aW9uYWxRdWFudHVtR2F0ZV9IKGkpKQo8fGZpbV9lbmR8Pg=="]
["a484c28076a4fe36be91f3b21afdee08f26bc10c-1","a484c28076a4fe36be91f3b21afdee08f26bc10c","PHxmaW1fcHJlZml4fD4KZnJvbSBjb2xhbmRlciBpbXBvcnQgTGVuZ3RoCmZyb20gY29sYW5kZXIgaW1wb3J0IEludGVnZXIKZnJvbSBjb2xhbmRlciBpbXBvcnQgT25lT2YKZnJvbSBjb2xhbmRlciBpbXBvcnQgU2NoZW1hCmZyb20gY29sYW5kZXIgaW1wb3J0IFNjaGVtYU5vZGUKZnJvbSBjb2xhbmRlciBpbXBvcnQgU3RyaW5nCmZyb20gY29sYW5kZXIgaW1wb3J0IERlY2ltYWwKZnJvbSBjb2xhbmRlciBpbXBvcnQgQm9vbGVhbgpmcm9tIGJhY2tlbmQuYXBpX3NjaGVtYXMgaW1wb3J0IFJlY2lwaWVudAoKCmNsYXNzIERlbGV0ZUludml0YXRpb25TY2hlbWEoU2NoZW1hKToKICAgIGludml0ZV9pZCA9IFNjaGVtYU5vZGUoU3RyaW5nKCksIHZhbGlkYXRvcj1MZW5ndGgobWF4PTEwMCkpCgoKY2xhc3MgRXhpc3RpbmdJbnZpdGF0aW9uc1NjaGVtYShTY2hlbWEpOgogICAgc3RhdHVzID0gU2NoZW1hTm9kZSgKICAgICAgICBTdHJpbmcoKSwKICAgICAgICBtaXNzaW5nPU5vbmUsCiAgICAgICAgdmFsaWRhdG9yPU9uZU9mKFsncGVuZGluZycsICdkZWxldGVkJywgJ2FjY2VwdGVkJ10pKQoKCmNsYXNzIEludml0ZVNjaGVtYShTY2hlbWEpOgogICAgcmVjaXBpZW50ID0gU2NoZW1hTm9kZShSZWNpcGllbnQoKSkKCjx8ZmltX2hvbGV8PgogICAgdHJhbnNmZXJfaWQgPSBTY2hlbWFOb2RlKFN0cmluZygpKQoKY2xhc3MgY2hhbmdlQ29kZUV4cGlyYXRpb25TY2hlbWEoU2NoZW1hKToKICAgIHRyYW5zZmVyX2lkID0gU2NoZW1hTm9kZShTdHJpbmcoKSkKICAgIGNvZGUgPSBTY2hlbWFOb2RlKFN0cmluZygpKQogICAgc2Vjb25kcyA9IFNjaGVtYU5vZGUoSW50ZWdlcigpKQogICAgCmNsYXNzIHVwZGF0ZUludmFsaWRDb2RlQ291bnRTY2hlbWEoU2NoZW1hKToKICAgIGludmFsaWRfcmVzdWx0ID0gU2NoZW1hTm9kZShCb29sZWFuKCkpCjx8ZmltX3N1ZmZpeHw+CmNsYXNzIEFjY2VwdENvZGVTY2hlbWEoU2NoZW1hKToKICAgIGNvZGUgPSBTY2hlbWFOb2RlKFN0cmluZygpKQoKY2xhc3MgUmV0cmFjdFNjaGVtYShTY2hlbWEpOgo8fGZpbV9lbmR8Pg=="]
["f118ccabc1590fafd46597417d515ca47d5137f5-1","f118ccabc1590fafd46597417d515ca47d5137f5","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIC5fcGFyYW1fZ3JpZCBpbXBvcnQgUGFyYW1HcmlkCmZyb20gLl9wYXJhbWV0ZXJfc2VhcmNoIGltcG9ydCBQYXJhbWV0ZXJTZWFyY2gKZnJvbSAuX3N0YWduYXRpb25fc3RvcHBpbmdfdGFzayBpbXBvcnQgU3RhZ25hdGlvblN0b3BwaW5nVGFzawoKZnJvbSBuaWFweS5hbGdvcml0aG1zLmJhc2ljIGltcG9ydCBGaXJlZmx5QWxnb3JpdGhtLCBCYXRBbGdvcml0aG0sIEdyZXlXb2xmT3B0aW1pemVyCmZyb20gbmlhcHkuYWxnb3JpdGhtcy5tb2RpZmllZCBpbXBvcnQgSHlicmlkQmF0QWxnb3JpdGhtLCBIeWJyaWRTZWxmQWRhcHRpdmVCYXRBbGdvcml0aG0KCmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24uX3NlYXJjaCBpbXBvcnQgQmFzZVNlYXJjaENWCgpTVVBQT1JURURfQUxHT1JJVEhNUyA9IFsnZmEnLCAnZ3dvJywgJ2JhJywgJ2hiYScsICdoc2FiYSddCgoKY2xhc3MgTmF0dXJlSW5zcGlyZWRTZWFyY2hDVihCYXNlU2VhcmNoQ1YpOgogICAgZGVmIF9ydW5fc2VhcmNoKHNlbGYsIGV2YWx1YXRlX2NhbmRpZGF0ZXMpOgoKICAgICAgICBzZWxmLl9fcGFyYW1fZ3JpZCA9IFBhcmFtR3JpZChzZWxmLnBhcmFtX2dyaWQpCiAgICAgICAgc2VsZi5fX2FsZ29yaXRobSA9IHNlbGYuX19nZXRfYWxnb3JpdGhtKHNlbGYuYWxnb3JpdGhtLCBzZWxmLnBvcHVsYXRpb25fc2l6ZSwgc2VsZi5yYW5kb21fc3RhdGUpCiAgICAgICAgc2VsZi5fX3ByaW50X3J1bl9zZWFyY2hfbG9nKCkKICAgICAgICBwcm9ibGVtID0gUGFyYW1ldGVyU2VhcmNoKGV2YWx1YXRlX2NhbmRpZGF0ZXMsIHNlbGYuX19wYXJhbV9ncmlkKQoKICAgICAgICBzZWxmLm9wdGltaXphdGlvbl9sb2dzXyA9IFtdCgogICAgICAgIGZvciBpIGluIHJhbmdlKDEsIHNlbGYucnVucyArIDEpOgogICAgICAgICAgICBkZWYgaXRlcmF0aW9uX2ZpbmlzaGVkX2NhbGxiYWNrKGl0ZXJhdGlvbiwgc3RhZ25hdGlvbl9nZW5fY291bnQpOgogICAgICAgICAgICAgICAgc3RhZ25hdGlvbiA9IGYnIHwgU3RhZ25hdGlvbiB7c3RhZ25hdGlvbl9nZW5fY291bnR9JwoKICAgICAgICAgICAgICAgIGlmIHNlbGYubWF4X3N0YWduYXRpbmdfZ2VuID4gMToKICAgICAgICAgICAgICAgICAgICBzdGFnbmF0aW9uID0gZid7c3RhZ25hdGlvbn0ve3NlbGYubWF4X3N0YWduYXRpbmdfZ2VufScKCiAgICAgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2UgPiAxOgogICAgICAgICAgICAgICAgICAgIHByaW50KGYnUnVuIHtpfS97c2VsZi5ydW5zfSwgSXRlcmF0aW9uIHtpdGVyYXRpb259L3tzZWxmLm1heF9uX2dlbn17c3RhZ25hdGlvbn0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgZicgfCBUaGVyZSB3ZXJlIHtwcm9ibGVtLmV2YWx1YXRpb25fY291bnR9IGNhbmRpZGF0ZXMgdHJhaW5lZCB1bnRpbCBub3cnKQoKICAgICAgICAgICAgdGFzayA9IFN0YWduYXRpb25TdG9wcGluZ1Rhc2soCiAgICAgICAgICAgICAgICBtYXhfaXRlcnM9c2VsZi5tYXhfbl9nZW4sCiAgICAgICAgICAgICAgICBtYXhfc3RhZ25hdGluZ19nZW49c2VsZi5tYXhfc3RhZ25hdGluZ19nZW4sCiAgICAgICAgICAgICAgICBwcm9ibGVtPXByb2JsZW0sCiAgICAgICAgICAgICAgICBpdGVyYXRpb25fZmluaXNoZWRfY2FsbGJhY2s9aXRlcmF0aW9uX2ZpbmlzaGVkX2NhbGxiYWNrCiAgICAgICAgICAgICkKCiAgICAgICAgICAgIHNlbGYuX19hbGdvcml0aG0ucnVuKHRhc2s9dGFzaykKCiAgICAgICAgICAgIGlmIHNlbGYuX19hbGdvcml0aG0uZXhjZXB0aW9uOgogICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5fX2FsZ29yaXRobS5leGNlcHRpb24KCiAgICAgICAgICAgICMgaW52ZXJ0IHNjb3JlcyBpbiB0aGUgb3B0aW1pemF0aW9uIGxvZ3MKICAgICAgICAgICAgc2VsZi5vcHRpbWl6YXRpb25fbG9nc18uYXBwZW5kKFsobG9nWzBdLCBsb2dbMV0gKiAtMSkgZm9yIGxvZyBpbiB0YXNrLm9wdGltaXphdGlvbl9sb2dzX10pCgogICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2UgPiAwOgogICAgICAgICAgICAgICAgcHJpbnQoZidSdW4ge2l9L3tzZWxmLnJ1bnN9IGZpbmlzaGVkJykKCiAgICAgICAgY2FuZGlkYXRlcyA9IHByb2JsZW0uZXZhbHVhdGlvbl9jb3VudAoKICAgICAgICBpZiBzZWxmLmN2IGlzIE5vbmU6CiAgICAgICAgICAgIHByaW50KGYnT3B0aW1pemF0aW9uIGZpbmlzaGVkLCB7Y2FuZGlkYXRlc30gY2FuZGlkYXRlcyB3ZXJlIGZpdHRlZCcpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZml0cyA9IGNhbmRpZGF0ZXMgKiBzZWxmLmN2CiAgICAgICAgICAgIHByaW50KGYnT3B0aW1pemF0aW9uIGZpbmlzaGVkLCB7Y2FuZGlkYXRlc30gY2FuZGlkYXRlcyB3ZXJlIGZpdHRlZCAodG90YWxsaW5nIHtmaXRzfSBmaXRzKScpCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGVzdGltYXRvciwgcGFyYW1fZ3JpZCwgYWxnb3JpdGhtPSdoYmEnLCBwb3B1bGF0aW9uX3NpemU9NTAsIG1heF9uX2dlbj0xMDAsIHJ1bnM9MywKICAgICAgICAgICAgICAgICBtYXhfc3RhZ25hdGluZ19nZW49MjAsIHNjb3Jpbmc9Tm9uZSwgbl9qb2JzPU5vbmUsIHJlZml0PVRydWUsIGN2PU5vbmUsIHZlcmJvc2U9MCwKICAgICAgICAgICAgICAgICByYW5kb21fc3RhdGU9Tm9uZSwKICAgICAgICAgICAgICAgICBwcmVfZGlzcGF0Y2g9JzIqbl9qb2JzJywgZXJyb3Jfc2NvcmU9bnAubmFuLCByZXR1cm5fdHJhaW5fc2NvcmU9VHJ1ZSk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhlc3RpbWF0b3IsIHNjb3Jpbmc9c2NvcmluZywgbl9qb2JzPW5fam9icywgcmVmaXQ9cmVmaXQsIGN2PWN2LCBwcmVfZGlzcGF0Y2g9cHJlX2Rpc3BhdGNoLAogICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jfc2NvcmU9ZXJyb3Jfc2NvcmUsIHJldHVybl90cmFpbl9zY29yZT1yZXR1cm5fdHJhaW5fc2NvcmUpCgogICAgICAgIHNlbGYuYWxnb3JpdGhtID0gYWxnb3JpdGhtCiAgICAgICAgc2VsZi5jdiA9IGN2CiAgICAgICAgc2VsZi5tYXhfbl9nZW4gPSBtYXhfbl9nZW4KICAgICAgICBzZWxmLm1heF9zdGFnbmF0aW5nX2dlbiA9IG1heF9zdGFnbmF0aW5nX2dlbgogICAgICAgIHNlbGYucGFyYW1fZ3JpZCA9IHBhcmFtX2dyaWQKICAgICAgICBzZWxmLnBvcHVsYXRpb25fc2l6ZSA9IHBvcHVsYXRpb25fc2l6ZQogICAgICAgIHNlbGYucmFuZG9tX3N0YXRlID0gcmFuZG9tX3N0YXRlCiAgICAgICAgc2VsZi5ydW5zID0gcnVucwogICAgICAgIHNlbGYudmVyYm9zZSA9IHZlcmJvc2UKCiAgICAgICAgc2VsZi5vcHRpbWl6YXRpb25fbG9nc18gPSBOb25lCgogICAgZGVmIF9fcHJpbnRfcnVuX3NlYXJjaF9sb2coc2VsZik6CiAgICAgICAgY2FuZGlkYXRlcyA9IHNlbGYuX19wYXJhbV9ncmlkLmdldF9udW1iZXJfb2ZfY2FuZGlkYXRlcygpCgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgcHJpbnQoZidGaXR0aW5nIGF0IG1vc3Qge2NhbmRpZGF0ZXN9IGNhbmRpZGF0ZXMnKQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBfX2dldF9hbGdvcml0aG0oYWxnb3JpdGhtLCBwb3B1bGF0aW9uX3NpemUsIHJhbmRvbV9zdGF0ZSk6CiAgICAgICAgaWYgaXNpbnN0YW5jZShhbGdvcml0aG0sIHN0cik6CiAgICAgICAgICAgIGlmIGFsZ29yaXRobSBub3QgaW4gU1VQUE9SVEVEX0FMR09SSVRITVM6CiAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGYnInthbGdvcml0aG19IiBpcyBub3QgaW4gc3VwcG9ydGVkIGFsZ29yaXRobXM6IHsiLCAiLmpvaW4oU1VQUE9SVEVEX0FMR09SSVRITVMpfScpCgogICAgICAgICAgICBhbGdvcml0aG1fb2JqID0gTm9uZQoKICAgICAgICAgICAgaWYgYWxnb3JpdGhtID09ICdmYSc6CiAgICAgICAgICAgICAgICBhbGdvcml0aG1fb2JqID0gRmlyZWZseUFsZ29yaXRobShzZWVkPXJhbmRvbV9zdGF0ZSkKICAgICAgICAgICAgICAgIGFsZ29yaXRobV9vYmouc2V0X3BhcmFtZXRlcnMoYWxwaGE9MSwgYmV0YW1pbj0xLCBnYW1tYT0yKQogICAgICAgICAgICBlbGlmIGFsZ29yaXRobSA9PSAnYmEnOgogICAgICAgICAgICAgICAgYWxnb3JpdGhtX29iaiA9IEJhdEFsZ29yaXRobShzZWVkPXJhbmRvbV9zdGF0ZSkKICAgICAgICAgICAgICAgIGFsZ29yaXRobV9vYmouc2V0X3BhcmFtZXRlcnMoQT0wLjksIHI9MC4xLCBRbWluPTAuMCwgUW1heD0yLjApCiAgICAgICAgICAgIGVsaWYgYWxnb3JpdGhtID09ICdoYmEnOgogICAgICAgICAgICAgICAgYWxnb3JpdGhtX29iaiA9IEh5YnJpZEJhdEFsZ29yaXRobShzZWVkPXJhbmRvbV9zdGF0ZSkKICAgICAgICAgICAgICAgIGFsZ29yaXRobV9vYmouc2V0X3BhcmFtZXRlcnMoQT0wLjksIHI9MC4xLCBRbWluPTAuMCwgUW1heD0yLjApCiAgICAgICAgICAgIGVsaWYgYWxnb3JpdGhtID09ICdoc2FiYSc6CiAgICAgICAgICAgICAgICBhbGdvcml0aG1fb2JqID0gSHlicmlkU2VsZkFkYXB0aXZlQmF0QWxnb3JpdGhtKHNlZWQ9cmFuZG9tX3N0YXRlKQogICAgICAgICAgICAgICAgYWxnb3JpdGhtX29iai5zZXRfcGFyYW1ldGVycyhBPTAuOSwgcj0wLjEsIFFtaW49MC4wLCBRbWF4PTIuMCkKICAgICAgICAgICAgZWxpZiBhbGdvcml0aG0gPT0gJ2d3byc6CiAgICAgICAgICAgICAgICBhbGdvcml0aG1fb2JqID0gR3JleVdvbGZPcHRpbWl6ZXIoc2VlZD1yYW5kb21fc3RhdGUpCgogICAgICAgICAgICBhbGdvcml0aG1fb2JqLnNldF9wYXJhbWV0ZXJzKE5QPXBvcHVsYXRpb25fc2l6ZSkKCiAgICAgICAgICAgIHJldHVybiBhbGdvcml0aG1fb2JqCgogICAgICAgIHJldHVybiBhbGdvcml0aG0KPHxmaW1fc3VmZml4fD4KICAgICAgICBpZiBzZWxmLmN2IGlzIG5vdCBOb25lOgogICAgICAgICAgICBwcmludChmJ0ZpdHRpbmcge3NlbGYuY3Z9IGZvbGRzIGZvciBzb21lIG9mIHRoZSB7Y2FuZGlkYXRlc30gY2FuZGlkYXRlcywgJwogICAgICAgICAgICAgICAgICBmJ3doaWNoIG1pZ2h0IHRvdGFsIGluIHtjYW5kaWRhdGVzICogc2VsZi5jdn0gZml0cycpCiAgICAgICAgZWxzZToKPHxmaW1fZW5kfD4="]
["a48be217af21c18df89b0e43883276239b368404-1","a48be217af21c18df89b0e43883276239b368404","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCkNyZWF0ZWQgb24gU2F0IEp1biAyMyAyMDoyMjoyMiAyMDE5CgpAYXV0aG9yOiBBc3Rlci10aGUtTWVkLVN0dQoKQWx3YXlzIGJlbGlldmUgc29tZXRoaW5nIHBhd3NvbWUgaXMgYWJvdXQgdG8gaGFwcGVu8J+QvvCfkL4KIiIiCgppbXBvcnQgcmVxdWVzdHMsIHJlZ2V4LCBqc29uCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGUsIHRpbWVkZWx0YSAgIywgZGF0ZXRpbWUKZnJvbSBnZXRjaCBpbXBvcnQgcGF1c2UKIyBFeGNlbCDnmoTkuaDmg68KIyBmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgcXVvdGUgYXMgZW5jb2RldXJsCiMg6LKM5Ly855So5LiN5LiK5ZieCgpzZXNzaW9uID0gcmVxdWVzdHMuU2Vzc2lvbigpCgpoZWFkZXJzID0gewogICAgJ1VzZXItQWdlbnQnOgogICAgJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQ7IHJ2OjY3LjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvNjcuMCcsCiAgICAnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRwUmVxdWVzdCcsCiAgICAnQ29ubmVjdGlvbic6ICdrZWVwLWFsaXZlJywKfQoKCmRlZiBHZXRFdmFsdWF0aW9uSW5mbyhjb29raWVzLCBoZWFkZXJzLCBkYXRlKToKCiAgICBkYXRhID0gewogICAgICAgICdra3JxJzogZGF0ZSwKICAgICAgICAncGFnZSc6ICcxJywKICAgICAgICAncm93cyc6ICc2MCcsCiAgICAgICAgJ3NvcnQnOiAna2NtYycsCiAgICAgICAgJ29yZGVyJzogJ2FzYycKICAgIH0KCiAgICByZXNwb25zZSA9IHNlc3Npb24ucG9zdCgKICAgICAgICAnaHR0cDovL3poancuc211LmVkdS5jbi94c3dqa3R4eCFnZXREYXRhTGlzdC5hY3Rpb24nLAogICAgICAgIGhlYWRlcnM9aGVhZGVycywKICAgICAgICBjb29raWVzPWNvb2tpZXMsCiAgICAgICAgZGF0YT1kYXRhKS5qc29uKCkKICAgIGlmIHJlc3BvbnNlLmdldCgidG90YWwiKSA+IDA6CiAgICAgICAgIyDpnIDopoHliZTpmaTlt7Lnu4/or4TmlZnnmoTor77nqIvvvIx6dCDkuLogMCDljbPlt7Lor4TmlZkKICAgICAgICAjIOS5n+aYr+S4gOS4quaIkeS4jeeGn+aCieeahOaTjeS9nAogICAgICAgICMg5Y+C6ICD77yaIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzMxMDY4MTYyL3JlbW92aW5nLWEtZGljdGlvbmFyeS1mcm9tLWEtbGlzdC1vZi1kaWN0aW9uYXJpZXMtaW4tcHl0aG9uCiAgICAgICAgIyDku6Xlj4ogWzpd77yM5Y2z5YiH54mH5pON5L2cCiAgICAgICAgIyDlj4LogIPvvJogaHR0cHM6Ly93d3cucnVub29iLmNvbS9weXRob24vcHl0aG9uLWxpc3RzLmh0bWwKICAgICAgICAjIOS7peWPiu+8miBodHRwczovL3d3dy5jbmJsb2dzLmNvbS9pZmFudGFzdGljL3AvMzgxMTE0NS5odG1sCiAgICAgICAgcmVzcG9uc2VfanNvbiA9IHJlc3BvbnNlLmdldCgicm93cyIpCiAgICAgICAgIyByZXR1cm4gcmVzcG9uc2VfanNvbgogICAgICAgICMg6L+Z6YeM55qE5YaZ5rOV5Y+C6ICD77yaIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEyMzU2MTgvcHl0aG9uLXJlbW92ZS1kaWN0aW9uYXJ5LWZyb20tbGlzdAogICAgICAgIHJlc3BvbnNlX2pzb25bOl0gPSBbZCBmb3IgZCBpbiByZXNwb25zZV9qc29uIGlmIGQuZ2V0KCd6dCcpICE9ICIwIl0KICAgICAgICBpZiByZXNwb25zZV9qc29uID09IFtdOgogICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiByZXNwb25zZV9qc29uCiAgICBlbHNlOgogICAgICAgIHJldHVybiBOb25lCgoKZGVmIEdldFF1ZXN0aW9uSW5mbyhjb29raWVzLCBoZWFkZXJzLCBwYXJhbXMpOgoKICAgICMg5q2j5bi45oOF5Ya15LiL55qEIHBhcmFtcwogICAgIyBwYXJhbXMgPSAoCiAgICAjICAgICAoJ2p4aGptYycsICclMjV1NUI5RSUyNXU5QThDJyksCiAgICAjICAgICAoJ2p4aGpkbScsIFsnMDInLCAnMDInXSksCiAgICAjICAgICAoJ2tjbWMnLCAnJTI1dTY3M0ElMjV1ODBGRCUyNXU1QjlFJTI1dTlBOEMlMjV1NUI2NiUyNXU0RTAwJyksCiAgICAjICAgICAoJ2tjZG0nLCAnMTAzNDEwJyksCiAgICAjICAgICAoJ2tjcndkbScsICcxMDM0NjI1JyksCiAgICAjICAgICAoJ2Rna3NkbScsICcxNDUzNzc0JyksCiAgICAjICAgICAoJ3hueHFkbScsICcyMDE4MDInKSwKICAgICMgICAgICgndGVhZG0nLCAnMDUxMDIyJyksCiAgICAjICAgICAoJ3RlYXhtJywgJyUyNXU2NkZFJTI1dTVENTgnKSwKICAgICMgICAgICgndGVhYmgnLCAnMDUxMDIyJyksCiAgICAjICAgICAoJ2tjcHRkbScsICcxNDE3MScpLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAjICkKCiAgICBxdWVzdGlvbl9wYXJhbXMgPSB7CiAgICAgICAgJ2p4aGptYyc6IHBhcmFtc1snanhoam1jJ10sCjx8ZmltX2VuZHw+"]
["85ada5919622790ea7948d0c2009e5194a82a1dd-4","85ada5919622790ea7948d0c2009e5194a82a1dd","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgpyZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0KCdHRVQnLCdodHRwczovL2Jvb2tzYnlwdHlhZGFuYS5oZXJva3VhcHAuY29tL2Jvb2tzJykKZGF0YSA9IHJlcXVlc3QuZGF0YQoKcHJpbnQocmVxdWVzdC5zdGF0dXMpCgppZiBsZW4oZGF0YSkgPiAwOgogICAgYm9va19kaWN0ID0gZGljdCgpCiAgICBib29rcyA9IGpzb24ubG9hZHMoZGF0YS5kZWNvZGUoJ3V0Zi04JykpCiAgICBmb3IgYm9vayBpbiBib29rczoKICAgICAgICBib29rX2RpY3RbYm9va1snYm9va19uYW1lJ11dPSBib29rWydhdXRob3JfbmFtZSddCiAgICBwcmludChib29rX2RpY3QpCmVsc2U6CiAgICBwcmludCgnbm8gZGF0YSByZWNlaXZlZC4nKQo8fGZpbV9zdWZmaXh8PgppbXBvcnQganNvbgppbXBvcnQgdXJsbGliMwoKaHR0cCA9IHVybGxpYjMuUG9vbE1hbmFnZXIoKQo8fGZpbV9lbmR8Pg=="]
["2d16a313fce7b9cdfecfd36af3eb152529837d77-3","2d16a313fce7b9cdfecfd36af3eb152529837d77",{"$cut":{"chars":16852,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNzdgppbXBvcnQgc3lzCmltcG9ydCBudW1weSBhcyBucAoKZnJvbSBweXRob25hYm0gaW1wb3J0IFNpbXVsYXRpb24sIGNvbW1hbmRsaW5lX3BhcmFtLCByZWNvcmRfdGltZQoKZnJvbSBza2xlYXJuIGltcG9ydCBsaW5lYXJfbW9kZWwKZnJvbSBza2xlYXJuLm1ldHJpY3MgaW1wb3J0IHIyX3Njb3JlCgoKCmNsYXNzIEdvTFNpbXVsYXRpb24oU2ltdWxhdGlvbik6CiAgICAiIiIgVGhpcyBjbGFzcyBpbmhlcml0cyB0aGUgU2ltdWxhdGlvbiBjbGFzcyBhbGxvd2luZyBpdCB0byBydW4gYQogICAgICAgIHNpbXVsYXRpb24gd2l0aCB0aGUgcHJvcGVyIGZ1bmN0aW9uYWxpdHkuCiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAjIGluaXRpYWxpemUgdGhlIFNpbXVsYXRpb24gb2JqZWN0CiAgICAgICAgU2ltdWxhdGlvbi5fX2luaXRfXyhzZWxmKQoKICAgICAgICAjIHJlYWQgcGFyYW1ldGVycyBmcm9tIFlBTUwgZmlsZSBhbmQgYWRkIHRoZW0gdG8gaW5zdGFuY2UgdmFyaWFibGVzCiAgICAgICAgc2VsZi55YW1sX3BhcmFtZXRlcnMoInRlbXBsYXRlc1xcZ2VuZXJhbC55YW1sIikKCiAgICAgICAgIyBnZXQgdGhlIGZvbGxvd2luZyBmcm9tIHRoZSBjb21tYW5kbGluZQogICAgICAgIHNlbGYuc2VhcmNoX3JhZGl1cyA9IGNvbW1hbmRsaW5lX3BhcmFtKCItciIsIGludCkKICAgICAgICBzZWxmLmtpbGxfYmVsb3cgPSBjb21tYW5kbGluZV9wYXJhbSgiLWtiIiwgaW50KQogICAgICAgIHNlbGYua2lsbF9hYm92ZSA9IGNvbW1hbmRsaW5lX3BhcmFtKCIta2EiLCBpbnQpCiAgICAgICAgc2VsZi5udW1fdG9fc3RhcnQgPSBjb21tYW5kbGluZV9wYXJhbSgiLWMiLCBpbnQpCiAgICAgICAgc2VsZi5tb3ZlX3ZhbHVlID0gY29tbWFuZGxpbmVfcGFyYW0oIi1tb3ZlIiwgZmxvYXQpCiAgICAgICAgc2VsZi5oYXRjaF9sb3dlciA9IGNvbW1hbmRsaW5lX3BhcmFtKCItaGwiLCBpbnQpCiAgICAgICAgc2VsZi5oYXRjaF91cHBlciA9IGNvbW1hbmRsaW5lX3BhcmFtKCItaHUiLCBpbnQpCgogICAgICAgICMgVGhlIGZvbGxvd2luZyBhcnJheSBob2xkcyB0aGUgcG9wdWxhdGlvbiBuIGF0IGVhY2ggdGltZSBzdGVwCiAgICAgICAgc2VsZi5yZWdfcG9wID0gbnAuemVyb3MoMCwgZHR5cGU9aW50KQoKICAgIGRlZiBzZXR1cChzZWxmKToKICAgICAgICAiIiIgT3ZlcnJpZGVzIHRoZSBzZXR1cCgpIG1ldGhvZCBmcm9tIHRoZSBTaW11bGF0aW9uIGNsYXNzLgogICAgICAgICIiIgogICAgICAgICMgYWRkIGFnZW50cyB0byB0aGUgc2ltdWxhdGlvbgogICAgICAgIHNlbGYuYWRkX2FnZW50cyhzZWxmLm51bV90b19zdGFydCkKCiAgICAgICAgIyBjcmVhdGUgdGhlIGZvbGxvd2luZyBhZ2VudCBhcnJheXMgd2l0aCBpbml0aWFsIGNvbmRpdGlvbnMuCiAgICAgICAgc2VsZi5pbmRpY2F0ZV9hcnJheXMoImxvY2F0aW9ucyIsICJyYWRpaSIsICJjb2xvcnMiKQogICAgICAgIHNlbGYubG9jYXRpb25zID0gbnAucmFuZG9tLnJhbmQoc2VsZi5udW1iZXJfYWdlbnRzLCAzKSAqIHNlbGYuc2l6ZQogICAgICAgIHNlbGYucmFkaWkgPSBzZWxmLmFnZW50X2FycmF5KGluaXRpYWw9bGFtYmRhOiAwLjUpCiAgICAgICAgc2VsZi5jb2xvcnMgPSBucC5mdWxsKChzZWxmLm51bWJlcl9hZ2VudHMsIDMpLCBucC5hcnJheShbMjU1LCAyNTUsIDI1NV0pLCBkdHlwZT1pbnQpCgogICAgICAgICMgY3JlYXRlIGdyYXBoIGZvciBob2xkaW5nIGFnZW50IG5laWdoYm9ycwogICAgICAgIHNlbGYuaW5kaWNhdGVfZ3JhcGhzKCJuZWlnaGJvcl9ncmFwaCIpCiAgICAgICAgc2VsZi5uZWlnaGJvcl9ncmFwaCA9IHNlbGYuYWdlbnRfZ3JhcGgoKQoKICAgICAgICAjIHJlY29yZCBpbml0aWFsIHZhbHVlcwogICAgICAgIHNlbGYuc3RlcF92YWx1ZXMoYXJyYXlzPVsibG9jYXRpb25zIl0pCiAgICAgICAgc2VsZi5hZ2VudF9jb3VudCgpCgogICAgZGVmIHN0ZXAoc2VsZik6CiAgICAgICAgIiIiIE92ZXJyaWRlcyB0aGUgc3RlcCgpIG1ldGhvZCBmcm9tIHRoZSBTaW11bGF0aW9uIGNsYXNzLgogICAgICAgICIiIgogICAgICAgICMgZ2V0IGFsbCBuZWlnaGJvcnMgd2l0aGluIHJhZGl1cyBvZiAyCiAgICAgICAgc2VsZi5nZXRfbmVpZ2hib3JzKHNlbGYubmVpZ2hib3JfZ3JhcGgsIHNlbGYuc2VhcmNoX3JhZGl1cykKCiAgICAgICAgIyBjYWxsIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyB0aGF0IHVwZGF0ZSBhZ2VudCB2YWx1ZXMKICAgICAgICBzZWxmLnVwZGF0ZSgpCiAgICAgICAgc2VsZi5yZXByb2R1Y2UoKQogICAgICAgIHNlbGYubW92ZSgpCgogICAgICAgICMgYWRkL3JlbW92ZSBhZ2VudHMgZnJvbSB0aGUgc2ltdWxhdGlvbgogICAgICAgIHNlbGYudXBkYXRlX3BvcHVsYXRpb25zKCkKCiAgICAgICAgIyBzYXZlIG11bHRpcGxlIGZvcm1zIG9mIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzaW11bGF0aW9uIGF0IHRoZSBjdXJyZW50IHN0ZXAKICAgICAgICBzZWxmLnN0ZXBfdmFsdWVzKGFycmF5cz1bImxvY2F0aW9ucyJdKQogICAgICAgIHNlbGYuYWdlbnRfY291bnQoKQogICAgICAgICMgc2VsZi5zdGVwX2ltYWdlKCkKICAgICAgICAjIHNlbGYudGVtcCgpCiAgICAgICAgIyBzZWxmLmRhdGEoKQoKICAgIGRlZiBlbmQoc2VsZik6CiAgICAgICAgIiIiIE92ZXJyaWRlcyB0aGUgZGVmYXVsdCBlbmQgbWV0aG9kIGluIHRoZSBTaW11bGF0aW9uIGNsYXNzLgogICAgICAgICIiIgogICAgICAgICMgbWFrZSBhIHZpZGVvIGZyb20gYWxsIG9mIHRoZSBzdGVwIGltYWdlcwogICAgICAgICMgc2VsZi5jcmVhdGVfdmlkZW8oKQoKICAgICAgICAjIGlmIGFsbCBvZiB0aGUgYWdlbnRzIGRpZCBub3QgZGllIGFmdGVyIHRoZSBmaXJzdCBzdGVwLCBwZXJmb3JtcyBsaW5lYXIgcmVncmVzc2lvbgogICAgICAgIGlmIHNlbGYucmVnX3BvcC5zaGFwZVswXSA+IDE6CiAgICAgICAgICAgIHNlbGYucmVncmVzc2lvbigpCgo8fGZpbV9ob2xlfD4KICAgICAgICAjIGRldGVybWluZSB3aGljaCBhZ2VudHMgYXJlIGJlaW5nIHJlbW92ZWQKICAgICAgICBmb3IgaW5kZXggaW4gcmFuZ2Uoc2VsZi5udW1iZXJfYWdlbnRz"}}]
["74e1ea9ab8eb889d6129df6fc031e1f75b9f5a37-3","74e1ea9ab8eb889d6129df6fc031e1f75b9f5a37","PHxmaW1fcHJlZml4fD4KZnJvbSBlbnVtIGltcG9ydCBFbnVtCmZyb20gYWJjIGltcG9ydCBBQkMsIGFic3RyYWN0bWV0aG9kCgppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBzY2lweS5zcGF0aWFsIGltcG9ydCBjS0RUcmVlCgpDb25zdHJhaW50VmFsdWVUeXBlID0gRW51bSgiQ29uc3RyYWludFZhbHVlVHlwZSIsICJNSU4gTUFYIikKCmNsYXNzIENvbnN0cmFpbnQoQUJDKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWVfdHlwZTogc3RyID0gJ21pbicsIHJhdGU6IGZsb2F0ID0gMC4xKToKCiAgICAgICAgIyBUT0RPOiBQdXQgcmF0ZSBpbiBhIG1peGluID8KICAgICAgICBzZWxmLl9yYXRlID0gcmF0ZQoKICAgICAgICAjIHB5bGludDogZGlzYWJsZT1XMTExNgogICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWVfdHlwZSwgQ29uc3RyYWludFZhbHVlVHlwZSk6CiAgICAgICAgICAgIHNlbGYuX3ZhbF90eXBlID0gdmFsdWVfdHlwZQogICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZV90eXBlLCBzdHIpOgogICAgICAgICAgICBzZWxmLl92YWxfdHlwZSA9IENvbnN0cmFpbnRWYWx1ZVR5cGVbdmFsdWVfdHlwZS51cHBlcigpXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgaW5wdXQgZm9yIHZhbHVlIHR5cGUhIikKCgogICAgQHByb3BlcnR5CiAgICBkZWYgdHlwZShzZWxmKToKICAgICAgICByZXR1cm4gdHlwZShzZWxmKQoKCiAgICBAcHJvcGVydHkKICAgIGRlZiB2YWx1ZV90eXBlKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl92YWxfdHlwZQoKICAgIEBwcm9wZXJ0eQo8fGZpbV9ob2xlfD4KICAgICAgICBhbmQgZXZhbHVhdGUgd2V0aGVyIGl0IHNhdGlzZmllcyB0aGUgY29uc3RyYWludAogICAgICAgIGZ1bmN0aW9uJ3MgbmVlZHMgdG8gcmVjZWl2ZSB2YWx1ZXMgdG8gY2hlY2sgYXMgZmlyc3QgYXJndW1lbnQKICAgICAgICAnJycKCiAgICAgICAgIyBweWxpbnQ6IGRpc2FibGU9UjE3MDUKICAgICAgICBpZiBzZWxmLnZhbHVlX3R5cGUgPT0gQ29uc3RyYWludFZhbHVlVHlwZS5NSU46CiAgICAgICAgICAgIHJldHVybiBucC5ncmVhdGVyCiAgICAgICAgZWxpZiBzZWxmLnZhbHVlX3R5cGUgPT0gQ29uc3RyYWludFZhbHVlVHlwZS5NQVg6CiAgICAgICAgICAgIHJldHVybiBucC5sZXNzCgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgdmFsdWUgdHlwZSBmb3IgY29uc3RyYWludCEiKQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIHJhdGVfc2lnbihzZWxmKToKICAgICAgICAjIFRPRE86IFB1dCB0aGlzIG1ldGhvZCBpbiBhIG1peGluCgogICAgICAgICcnJwogICAgICAgIEJhc2VkIG9uIHRoZSB2YWx1ZS10eXBlIG9mIHRoZSBjb25zdHJhaW50cywgcmV0dXJuIGEgc2lnbgogICAgICAgIGluZGljYXRpbmcgd2hldGhlciByYXRlIGlzIGZvciBleHBhbnNpb24gb3IgY29udHJhY3Rpb24gb2YKICAgICAgICBzaXplIG91dHNpZGUgY2FsY3VsYXRlZCB6b25lCiAgICAgICAgJycnCgogICAgICAgICMgcHlsaW50OiBkaXNhYmxlPVIxNzA1CiAgICAgICAgaWYgc2VsZi52YWx1ZV90eXBlID09IENvbnN0cmFpbnRWYWx1ZVR5cGUuTUlOOgogICAgICAgICAgICByZXR1cm4gLTEKICAgICAgICBlbGlmIHNlbGYudmFsdWVfdHlwZSA9PSBDb25zdHJhaW50VmFsdWVUeXBlLk1BWDoKICAgICAgICAgICAgcmV0dXJuICsxCgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgdmFsdWUgdHlwZSBmb3IgY29uc3RyYWludCEiKQoKCiAgICBAYWJzdHJhY3RtZXRob2QKICAgIGRlZiBhcHBseShzZWxmKToKICAgICAgICBwYXNzCgoKICAgIGRlZiBfYXBwbHlfcmF0ZShzZWxmLCByZWZfdmFsdWVzLCB2YWx1ZXMsIGxvY2F0aW9ucywgbWFzayk6CgogICAgICAgIGlmIG5vdCBucC5hbnkobWFzayk6CiAgICAgICAgICAgIHJldHVybiB2YWx1ZXMgIyBUT0RPOiBDT1BZPwoKICAgICAgICBuZXdfdmFsdWVzID0gdmFsdWVzLmNvcHkoKS5yYXZlbCgpCiAgICAgICAgYm91bmRfdmFsdWVzID0gcmVmX3ZhbHVlcy5jb3B5KCkucmF2ZWwoKQogICAgICAgIGNvb3JkcyA9IGxvY2F0aW9ucy5yZXNoYXBlKC0xLCAyKQoKICAgICAgICBpZiBzZWxmLl9yYXRlIGlzIE5vbmU6CiAgICAgICAgICAgIHJldHVybiB2YWx1ZXMgIyBUT0RPOiBDT1BZPwoKICAgICAgICBpZiBsZW4oY29vcmRzKSAhPSBsZW4obmV3X3ZhbHVlcyk6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICAgICAiTnVtYmVyIG9mIGxvY2F0aW9ucyBhbmQgdmFsdWVzIgogICAgICAgICAgICAgICAgKyBmIiBkb24ndCBtYXRjaDoge2xlbihjb29yZHMpfSB2cyB7bGVuKG5ld192YWx1ZXMpfSIpCgogICAgICAgIG1hc2tfciA9IG1hc2suY29weSgpLnJhdmVsKCkKICAgICAgICBub21hc2tfciA9IG5wLmxvZ2ljYWxfbm90KG1hc2tfcikKCiAgICAgICAgcG9pbnRzID0gY29vcmRzW21hc2tfcl0KICAgICAgICB4eSA9IGNvb3Jkc1tub21hc2tfcl0KCiAgICAgICAgdHJlZSA9IGNLRFRyZWUocG9pbnRzKQogICAgICAgIG5lYXJfZGlzdHMsIG5laWdoYm9ycyA9IHRyZWUucXVlcnkoeHkpCiAgICAgICAgdGVtcF92YWx1ZXMgPSBuZXdfdmFsdWVzW21hc2tfcl1bbmVpZ2hib3JzXSAqICgKICAgICAgICAgICAgICAgIDEgKyBuZWFyX2Rpc3RzICogc2VsZi5fcmF0ZSAqIHNlbGYucmF0ZV9zaWduKQoKICAgICAgICAjIE5PVEU6IE5vIGJvdW5kcyBhcmUgYXBwbGllZCBmb3IgcmF0ZQogICAgICAgIG1hc2syID0gbnAubG9naWNhbF9ub3Qoc2VsZi5zYXRpc2ZpZXMoCiAgICAgICAgICAgICAgICAgICAgIG5ld192YWx1ZXNbbm9tYXNrX3JdLCB0ZW1wX3ZhbHVlcykpCiAgICAgICAgIyBEb3VibGUgaW5kZXhpbmcgY29waWVzLCB3ZSB3YW50IHRvIG1vZGlmeSAibmV3X3ZhbHVlcyIKICAgICAgICB0ZW1wX3ZhbHVlc18yID0gbmV3X3ZhbHVlc1tub21hc2tfcl0KICAgICAgICB0ZW1wX3ZhbHVlc18yW21hc2syXSA9IHRlbXBfdmFsdWVzW21hc2syXQogICAgICAgIG5ld192YWx1ZXNbbm9tYXNrX3JdID0gdGVtcF92YWx1ZXNfMgoKICAgICAgICBuZXdfdmFsdWVzID0gbmV3X3ZhbHVlcy5yZXNoYXBlKHZhbHVlcy5zaGFwZSkKICAgICAgICByZXR1cm4gIG5ld192YWx1ZXMKCgojIFRPRE86CmNsYXNzIEJvdW5kTWl4aW46CiAgICBwYXNzCgoKY2xhc3MgUmF0ZU1peGluOgogICAgcGFzcwoKCgoKY2xhc3MgVG9wb0NvbnN0Q29uc3RyYWludChDb25zdHJhaW50KToKCiAgICBkZWYgX19pbml0X18oCiAgICAgICAgICAgIHNlbGYsCiAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICB1cHBlcl9ib3VuZD1ucC5pbmYsCiAgICAgICAgICAgIGxvd2VyX2JvdW5kPS1ucC5pbmYsCiAgICAgICAgICAgIHZhbHVlX3R5cGU6IHN0ciA9ICdtaW4nLAogICAgICAgICAgICByYXRlPU5vbmUpOgoKICAgICAgICBzdXBlcigpLl9faW5pdF9fKHZhbHVlX3R5cGUsIHJhdGUpCgogICAgICAgIHNlbGYuX2xiID0gbG93ZXJfYm91bmQKICAgICAgICBzZWxmLl91YiA9IHVwcGVyX2JvdW5kCgogICAgICAgIHNlbGYuX3ZhbCA9IHZhbHVlCgoKICAgIEBwcm9wZXJ0eQogICAgZGVmIHZhbHVlKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl92YWwKCgoKCiAgICBAcHJvcGVydHkKICAgIGRlZiB0b3BvX2JvdW5kcyhzZWxmKToKCiAgICAgICAgcmV0dXJuIHNlbGYuX2xiLCBzZWxmLl91YgoKCiAgICBkZWYgYXBwbHkoc2VsZiwgcmVmX3ZhbHVlcywgb2xkX3ZhbHVlcywgbG9jYXRpb25zPU5vbmUpOgoKICAgICAgICBsb3dlcl9ib3VuZCwgdXBwZXJfYm91bmQgPSBzZWxmLnRvcG9fYm91bmRzCgogICAgICAgIG5ld192YWx1ZXMgPSBvbGRfdmFsdWVzLmNvcHkoKQoKICAgICAgICBtYXNrID0gKChyZWZfdmFsdWVzID4gbG93ZXJfYm91bmQpICYKICAgICAgICAgICAgICAgIChyZWZfdmFsdWVzIDwgdXBwZXJfYm91bmQpICYKICAgICAgICAgICAgICAgIChucC5sb2dpY2FsX25vdChzZWxmLnNhdGlzZmllcyhuZXdfdmFsdWVzLCBzZWxmLnZhbHVlKSkpKQogICAgICAgIG5ld192YWx1ZXNbbWFza10gPSBzZWxmLnZhbHVlCgogICAgICAgIG5ld192YWx1ZXMgPSBzZWxmLl9hcHBseV9yYXRlKHJlZl92YWx1ZXMsIG5ld192YWx1ZXMsIGxvY2F0aW9ucywgbWFzaykKCiAgICAgICAgcmV0dXJuIG5ld192YWx1ZXMKCgoKY2xhc3MgVG9wb0Z1bmNDb25zdHJhaW50KENvbnN0cmFpbnQpOgoKICAgIGRlZiBfX2luaXRfXygKICAgICAgICAgICAgc2VsZiwKICAgICAgICAgICAgZnVuY3Rpb249bGFtYmRhIGk6IGkgLyAyLjAsCiAgICAgICAgICAgIHVwcGVyX2JvdW5kPW5wLmluZiwKICAgICAgICAgICAgbG93ZXJfYm91bmQ9LW5wLmluZiwKICAgICAgICAgICAgdmFsdWVfdHlwZTogc3RyID0gJ21pbicsCiAgICAgICAgICAgIHJhdGU9Tm9uZSk6CgogICAgICAgIHN1cGVyKCkuX19pbml0X18odmFsdWVfdHlwZSwgcmF0ZSkKCiAgICAgICAgc2VsZi5fbGIgPSBsb3dlcl9ib3VuZAogICAgICAgIHNlbGYuX3ViID0gdXBwZXJfYm91bmQKCiAgICAgICAgc2VsZi5fZnVuYyA9IGxhbWJkYSBpOiBpIC8gMi4wCiAgICAgICAgaWYgY2FsbGFibGUoZnVuY3Rpb24pOgogICAgICAgICAgICBzZWxmLl9mdW5jID0gZnVuY3Rpb24KCgogICAgQHByb3BlcnR5CiAgICBkZWYgdG9wb19ib3VuZHMoc2VsZik6CgogICAgICAgIHJldHVybiBzZWxmLl9sYiwgc2VsZi5fdWIKCgogICAgZGVmIGFwcGx5KHNlbGYsIHJlZl92YWx1ZXMsIG9sZF92YWx1ZXMsIGxvY2F0aW9ucz1Ob25lKToKCiAgICAgICAgbG93ZXJfYm91bmQsIHVwcGVyX2JvdW5kID0gc2VsZi50b3BvX2JvdW5kcwoKICAgICAgICBuZXdfdmFsdWVzID0gb2xkX3ZhbHVlcy5jb3B5KCkKICAgICAgICB0ZW1wX3ZhbHVlcyA9IHNlbGYuX2Z1bmMocmVmX3ZhbHVlcykKCiAgICAgICAgbWFzayA9ICgocmVmX3ZhbHVlcyA+IGxvd2VyX2JvdW5kKSAmCiAgICAgICAgICAgICAgICAocmVmX3ZhbHVlcyA8IHVwcGVyX2JvdW5kKSAmCiAgICAgICAgICAgICAgICAobnAubG9naWNhbF9ub3Qoc2VsZi5zYXRpc2ZpZXMobmV3X3ZhbHVlcywgdGVtcF92YWx1ZXMpKSkpCiAgICAgICAgbmV3X3ZhbHVlc1ttYXNrXSA9IHRlbXBfdmFsdWVzW21hc2tdCgogICAgICAgIG5ld192YWx1ZXMgPSBzZWxmLl9hcHBseV9yYXRlKHJlZl92YWx1ZXMsIG5ld192YWx1ZXMsIGxvY2F0aW9ucywgbWFzaykKCiAgICAgICAgcmV0dXJuIG5ld192YWx1ZXMKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBzYXRpc2ZpZXMoc2VsZik6CgogICAgICAgICcnJwogICAgICAgIFRoZSBmdW5jdGlvbiB0byBjb21wYXJlIGEgdmFsdWUgd2l0aCB0aGUgY29uc3RyYWludCB2YWx1ZQo8fGZpbV9lbmR8Pg=="]
["71140827b64f672808c8c77d8a82a6e6a5d96ca1-4","71140827b64f672808c8c77d8a82a6e6a5d96ca1","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29uZi51cmxzIGltcG9ydCB1cmwsIGluY2x1ZGUKPHxmaW1faG9sZXw+CnVybHBhdHRlcm5zID0gWwogICAgdXJsKCdeY2FzdFZvdGUvKD9QPGNhbmRpZGF0ZUlkPlx3KykvJCcsIHZpZXdzLmNhc3ROZXdWb3RlLCBuYW1lPSdjYXN0TmV3Vm90ZScpLAogICAgdXJsKCdeYXBpLycsIGluY2x1ZGUoJ25ldHdvcmsuYXBpLnVybHMnKSwgbmFtZT0nYXBpJyksCgpdCjx8ZmltX3N1ZmZpeHw+CmZyb20gLiBpbXBvcnQgdmlld3MKCmFwcF9uYW1lID0gJ25ldHdvcmsnCgo8fGZpbV9lbmR8Pg=="]
["a498a475ef94c8ae2c89867c31016851495f7aee-1","a498a475ef94c8ae2c89867c31016851495f7aee","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGdsb2IKCmRlZiBleGVjdXRlX2ZpbGVzKGYsIHZlcnNpb24pOgogICAgZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQSVBFLCBDYWxsZWRQcm9jZXNzRXJyb3IsIGNoZWNrX2NhbGwsIFBvcGVuLCBUaW1lb3V0RXhwaXJlZAoKICAgICMgcHl0aG9uIGZpbGVfbmFtZS5weQogICAgIyBSc2NyaXB0IGZpbGVfbmFtZS5SCgogICAgIyBjcmVhdGVzIG5ldyBzdWJwcm9jZXNzIHRvIGV4ZWN1dGUgUiBmaWxlIGFzOiAiUnNjcmlwdCBmaWxlbmFtZS5SIgogICAgcDMgPSBQb3BlbihbZicvb3B0L2NvbmRhL2VudnMvdmVudi17dmVyc2lvbn0vYmluL1JzY3JpcHQnLCBmXSwgXAogICAgICAgIHN0ZG91dD1QSVBFLCBzdGRlcnI9UElQRSwgY3dkPSIvdXNyL3dvcmtkaXIvcHJvamVjdC8iKQogICAgcmVzID0gIiIKCiAgICB0cnk6CiAgICAgICAgIyB0aW1lIGxpbWl0IGZvciBleGVjdXRpb24gaXMgb25lIGhvdXIKICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHAzLmNvbW11bmljYXRlKHRpbWVvdXQ9MzYwMCkKCiAgICAgICAgIyBpZiBzdWJwcm9jZXNzIGlzIG5vdCBzdWNjZXNzZnVsLCBpdCByZXR1cm5zIHRoZSBlcnJvcjoKICAgICAgICBpZiBwMy5yZXR1cm5jb2RlICE9IDA6CiAgICAgICAgICAgIHJlcyA9IHN0ZGVyci5zcGxpdGxpbmVzKClbLTU6LTFdCiAgICAgICAgICAgIHJlcyA9IGInICcuam9pbihyZXMpCiAgICAgICAgICAgIHJlc19zdHIgPSByZXMuZGVjb2RlKCJ1dGYtOCIpIGlmIHR5cGUocmVzKSBpcyBieXRlcyBlbHNlIHJlcwogICAgICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgICAgcmV0ID1yZS5maW5kYWxsKHInKD86RXJyb3IpLionLCByZXNfc3RyKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgICMgZWxzZSByZXR1cm5zIHN1Y2Nlc3MKICAgICAgICAgICAgcmV0ID0gInN1Y2Nlc3MiCiAgICAjIG9yIHRpbWUgbGltaXQgZXhjZWVkZWQKICAgIGV4Y2VwdCBUaW1lb3V0RXhwaXJlZDoKICAgICAgICBwMy5raWxsKCkKICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHAzLmNvbW11bmljYXRlKCkKICAgICAgICByZXQgPSAidGltZSBsaW1pdCBleGNlZWRlZCIKPHxmaW1faG9sZXw+CmRlZiBtYWluKCk6CgogICAgIyAxc3Qgc3RlcDogY29sbGVjdCBhbGwgZmlsZXMKICAgIGxpc3Rfb2Zfcl9maWxlcyA9IGdsb2IuZ2xvYigiKi5SIikKICAgIGxpc3Rfb2Zfcl9maWxlcy5leHRlbmQoZ2xvYi5nbG9iKCcqLnInKSkKCgogICAgIyAybmQgc3RlcDogZXhlY3V0ZXMgZmlsZXMKICAgIGZvciBmIGluIGxpc3Rfb2Zfcl9maWxlczoKICAgICAgICByZXMgPSBleGVjdXRlX2ZpbGVzKGYpCiAgICAgICAgcHJpbnQoZidGSUxFTkFNRToge2Yuc3RyaXAoKX1cblJFU1VMVDoge3Jlc30nKQoKICAgICMgM3JkIHN0ZXA6IHNlbmQgcmVzdWx0cyB0byB0aGUgZm9ybQogICAgIyBmb3IgYSxiIGluIHJlc3VsdHM6CiAgICAjICAgICBzb2NrZXRJTy5wcmludChhLCBiKQoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW4oKQo8fGZpbV9zdWZmaXh8PgoKICAgIHJldHVybiByZXQKCgo8fGZpbV9lbmR8Pg=="]
["2d10f387a8b1412278dbd9b5d32dd47a78d9434d-2","2d10f387a8b1412278dbd9b5d32dd47a78d9434d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJhbmRvbQpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCmZyb20gZW51bSBpbXBvcnQgSW50RW51bQpmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKZnJvbSB0eXBpbmcgaW1wb3J0IFNlcXVlbmNlLCBVbmlvbgoKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gUElMIGltcG9ydCBJbWFnZQoKZnJvbSBtYXRoX3V0aWxzIGltcG9ydCBWZWMyLCBWZWMzLCBhcHBseV93ZWlnaHRzCmZyb20gdGlueV9yZW5kZXJlci5iaXRtYXAgaW1wb3J0IEJpdG1hcApmcm9tIHRpbnlfcmVuZGVyZXIubW9kZWwgaW1wb3J0IE1vZGVsCgpDb2xvciA9IG5hbWVkdHVwbGUoIkNvbG9yIiwgInIgZyBiIGEiKQoKCmNsYXNzIENvbG9yczoKICAgIFdoaXRlID0gQ29sb3IoMjU1LCAyNTUsIDI1NSwgMjU1KQogICAgUmVkID0gQ29sb3IoMjU1LCAwLCAwLCAyNTUpCiAgICBHcmVlbiA9IENvbG9yKDAsIDI1NSwgMCwgMjU1KQogICAgQmx1ZSA9IENvbG9yKDAsIDAsIDI1NSwgMjU1KQoKCmNsYXNzIExpZ2h0aW5nTW9kZShJbnRFbnVtKToKICAgICIiIgogICAgTGlnaHRpbmcgbW9kZSBmb3IgYFRpbnlSZW5kZXJlcmAKICAgICIiIgoKICAgIFNtb290aCA9IDAKICAgIEZsYXQgPSAxCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgZ2V0X2NhcHRpb24oY2xzLCBpbmRleCk6CiAgICAgICAgY2FwdGlvbnMgPSB7CiAgICAgICAgICAgIGNscy5TbW9vdGg6ICJTbW9vdGgiLAogICAgICAgICAgICBjbHMuRmxhdDogIkZsYXQiLAogICAgICAgIH0KICAgICAgICByZXR1cm4gY2FwdGlvbnNbaW5kZXhdCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgZ2V0X2NhcHRpb25zKGNscyk6CiAgICAgICAgcmV0dXJuIFtMaWdodGluZ01vZGUuZ2V0X2NhcHRpb24oaSkgZm9yIGkgaW4gTGlnaHRpbmdNb2RlXQoKCmNsYXNzIFJlbmRlcmluZ01vZGUoSW50RW51bSk6CiAgICAiIiIKICAgIFBvc3NpYmxlIHJlbmRlcmluZyBtb2RlcyBmb3IgYFRpbnlSZW5kZXJlcmAKICAgICIiIgoKICAgIFdpcmVmcmFtZSA9IDAKICAgIFJhbmRvbUNvbG9ycyA9IDEKICAgIFRleHR1cml6ZWQgPSAyCiAgICBMaWdodE9ubHkgPSAzCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgZ2V0X2NhcHRpb24oY2xzLCBpbmRleCk6CiAgICAgICAgY2FwdGlvbnMgPSB7CiAgICAgICAgICAgIGNscy5XaXJlZnJhbWU6ICJXaXJlZnJhbWUiLAogICAgICAgICAgICBjbHMuUmFuZG9tQ29sb3JzOiAiUmFuZG9tIGNvbG9yIiwKICAgICAgICAgICAgY2xzLlRleHR1cml6ZWQ6ICJUZXh0dXJpemVkIiwKICAgICAgICAgICAgY2xzLkxpZ2h0T25seTogIkxpZ2h0IG9ubHkiLAogICAgICAgIH0KICAgICAgICByZXR1cm4gY2FwdGlvbnNbaW5kZXhdCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgZ2V0X2NhcHRpb25zKGNscyk6CiAgICAgICAgcmV0dXJuIFtSZW5kZXJpbmdNb2RlLmdldF9jYXB0aW9uKGkpIGZvciBpIGluIFJlbmRlcmluZ01vZGVdCgoKY2xhc3MgVGlueVJlbmRlcmVyOgogICAgIiIiCiAgICBNeSBvd24gdmVyc2lvbiBvZiB0aGUgb3JpZ2luYWwgVGlueSBSZW5kZXJlcjoKICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9zc2xveS90aW55cmVuZGVyZXIvd2lraQogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGJpbmRfdGV4dHVyZT1UcnVlKToKICAgICAgICAiIiIKICAgICAgICA6cGFyYW0gYmluZF90ZXh0dXJlOgogICAgICAgICAgICBJZiBgVHJ1ZWAsIGBUaW55UmVuZGVyZXJgIHdpbGwgY3JlYXRlIGEgYHRpbnlfcmVuZGVyZXIuYml0bWFwLkJpdG1hcGAgaW5zdGFuY2UKICAgICAgICAgICAgYmluZGluZyBhbnkgcmVuZGVyZWQgaW1hZ2UgdG8gYW4gT3BlbkdMIHRleHR1cmUuIFRoaXMgY2FuIGJlIGRpc2FibGVkIGZvciB0ZXN0cwogICAgICAgICAgICBzbyB0aGV5IGRvbid0IG5lZWQgdG8gaW5pdGlhbGl6ZSBhbiBPcGVuR0wgY29udGV4dC4KICAgICAgICAiIiIKICAgICAgICBzZWxmLl9oZWlnaHQgPSA4MDAKICAgICAgICBzZWxmLl93aWR0aCA9IDgwMAogICAgICAgIHNlbGYuX2RlcHRoID0gODAwCgogICAgICAgIHNlbGYuX3NjYWxlX3ggPSAxLjAKICAgICAgICBzZWxmLl9zY2FsZV95ID0gMS4wCiAgICAgICAgc2VsZi5fc2NhbGVfeiA9IDEuMAoKICAgICAgICBzZWxmLl9pbWFnZSA9IG5wLnplcm9zKChzZWxmLl9oZWlnaHQsIHNlbGYuX3dpZHRoLCAzKSwgbnAudWludDgpCiAgICAgICAgc2VsZi5fel9idWZmZXIgPSBucC5mdWxsKChzZWxmLl9oZWlnaHQsIHNlbGYuX3dpZHRoLCAxKSwgbnAuaW5mKQogICAgICAgIHNlbGYuX2NhbWVyYV9wb3N0aW9uID0gVmVjMygwLCAwLCAtMSkKICAgICAgICBzZWxmLl9tb2RlbCA9IE5vbmUKICAgICAgICBzZWxmLnNldF9zY2FsZSgwLjQ1LCAwLjQ1LCAwLjQ1KQoKICAgICAgICBzZWxmLl9yZW5kZXJfbW9kZSA9IE5vbmUKICAgICAgICBzZWxmLl9saWdodF9tb2RlID0gTm9uZQogICAgICAgIHNlbGYuX2JpbmRfdGV4dHVyZSA9IGJpbmRfdGV4dHVyZQogICAgICAgIHNlbGYuX2JpdG1hcCA9IEJpdG1hcChzZWxmLmdldF9pbWFnZSgpKSBpZiBiaW5kX3RleHR1cmUgZWxzZSBOb25lCiAgICAgICAgc2VsZi5fdGV4dHVyZV9pbWFnZSA9IE5vbmUKCiAgICBkZWYgc2V0dXBfbW9kZWwoc2VsZiwgbW9kZWxfZmlsZW5hbWU6IFVuaW9uW3N0ciwgUGF0aF0sIHRleHR1cmVfZmlsZW5hbWU6IFVuaW9uW3N0ciwgUGF0aF0pOgogICAgICAgICIiIgogICAgICAgIERlZmluZXMgYSBtb2RlbCAoLm9iaikgYW5kIHRleHR1cmUgZm9yIHRoaXMgYFRpbnlSZW5kZXJlcmAuCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5sb2FkX21vZGVsKFBhdGgobW9kZWxfZmlsZW5hbWUpKQogICAgICAgIHNlbGYuX3RleHR1cmVfaW1hZ2UgPSBucC5mbGlwdWQoSW1hZ2Uub3Blbih0ZXh0dXJlX2ZpbGVuYW1lKSlbLi4uLCA6Oi0xXQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGJpdG1hcChzZWxmKSAtPiBCaXRtYXA6CiAgICAgICAgcmV0dXJuIHNlbGYuX2JpdG1hcAoKICAgIGRlZiByZW5kZXIoc2VsZiwgcmVuZGVyX21vZGU6IFJlbmRlcmluZ01vZGUsIGxpZ2h0X21vZGU6IExpZ2h0aW5nTW9kZSk6CiAgICAgICAgc2VsZi5jbGVhcigpCgogICAgICAgIHNlbGYuX3JlbmRlcl9tb2RlID0gcmVuZGVyX21vZGUKICAgICAgICBzZWxmLl9saWdodF9tb2RlID0gbGlnaHRfbW9kZQogICAgICAgIHNlbGYuX3Jhc3Rlcml6ZSgpCiAgICAgICAgaWYgc2VsZi5fYmluZF90ZXh0dXJlOgogICAgICAgICAgICBzZWxmLl9iaXRtYXAuYmluZF90ZXh0dXJlKHBpeGVscz1zZWxmLmdldF9pbWFnZSgpKQoKICAgIGRlZiBjbGVhcihzZWxmKToKICAgICAgICBzZWxmLl9pbWFnZSA9IG5wLnplcm9zKChzZWxmLl9oZWlnaHQsIHNlbGYuX3dpZHRoLCAzKSwgbnAudWludDgpCiAgICAgICAgc2VsZi5fel9idWZmZXIgPSBucC5mdWxsKChzZWxmLl9oZWlnaHQsIHNlbGYuX3dpZHRoLCAxKSwgbnAuaW5mKQoKICAgIGRlZiBzZXRfc2NhbGUoc2VsZiwgeCwgeSwgeik6CiAgICAgICAgc2VsZi5fc2NhbGVfeCA9IHgKICAgICAgICBzZWxmLl9zY2FsZV95ID0geQogICAgICAgIHNlbGYuX3NjYWxlX3ogPSB6CgogICAgZGVmIGxvYWRfbW9kZWwoc2VsZiwgZmlsZW5hbWUpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5fbW9kZWwgPSBNb2RlbCgpCiAgICAgICAgc2VsZi5fbW9kZWwubG9hZF9mcm9tX29iaihmaWxlbmFtZSkKCjx8ZmltX2VuZHw+"]
["710937f294f4f88b4682e43fe090b1aefa6183d9-1","710937f294f4f88b4682e43fe090b1aefa6183d9","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiClRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIOiTnemyuOaZuuS6kShCbHVlS2luZykgYXZhaWxhYmxlLgpDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVApVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uCmFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoiIiIKCmZyb20gY29tbW9uLm15bWFrbyBpbXBvcnQgcmVuZGVyX21ha29fY29udGV4dCxyZW5kZXJfanNvbgpmcm9tIGhvbWVfYXBwbGljYXRpb24ubW9kZWxzIGltcG9ydCBTdHVkZW50aW5mbwpmcm9tIGNvbW1vbi5sb2cgaW1wb3J0IGxvZ2dlcgoKCmRlZiBob21lKHJlcXVlc3QpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAiIiIKICAgIOmmlumhtQogICAgIiIiCiAgICByZXR1cm4gcmVuZGVyX21ha29fY29udGV4dChyZXF1ZXN0LCAnL2hvbWVfYXBwbGljYXRpb24vaG9tZS5odG1sJykKPHxmaW1fZW5kfD4="]
["99fa6f20f55874ff7932615893ec8658e0d4cd23-2","99fa6f20f55874ff7932615893ec8658e0d4cd23","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IGg1cHkKaW1wb3J0IHNjaXB5CmZyb20gUElMIGltcG9ydCBJbWFnZQpmcm9tIHNjaXB5IGltcG9ydCBuZGltYWdlCmZyb20gbHJfdXRpbHMgaW1wb3J0IGxvYWRfZGF0YXNldAoKZGVmIHNpZ21vaWQoeik6CiAgICBzID0gMSAvICgxICsgbnAuZXhwKC16KSkKICAgIHJldHVybiBzCgoKCmNsYXNzIE5ldXJhbE5ldF9vbmU6Cgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgX19pbml0X18oc2VsZiwgaW5wdXQsIG91dHB1dCwgaGlkZGVuLCBub2Rlcyk6CiAgICAgICAgdyA9IG5wLnplcm9lcyhzaGFwZT0oaW5wdXQsIDEpKQoKICAgICAgICBmb3IgaSBpbiByYW5nZShoaWRkZW4pCjx8ZmltX2VuZHw+"]
["68c41104f1db591c886f6d08271fa276bc503864-2","68c41104f1db591c886f6d08271fa276bc503864","PHxmaW1fcHJlZml4fD4KY2xhc3MgQ29uZmlnSW5zdGFudGlhdGVFcnJvcihSdW50aW1lRXJyb3IpOgogICAgLi4uCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgpjbGFzcyBQbGFjZWhvbGRlclZhcmlhYmxlRXJyb3IoVmFsdWVFcnJvcik6CiAgICAuLi4KPHxmaW1fZW5kfD4="]
["f109ff62f471568eaa9605beb7e2ec95fb553225-1","f109ff62f471568eaa9605beb7e2ec95fb553225","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmltcG9ydCByZQpmcm9tIGpzb24gaW1wb3J0IGR1bXBzCmltcG9ydCBzZXJpYWwKaW1wb3J0IHN5cwppbXBvcnQgdGltZQoKaW1wb3J0IHBhaG8ubXF0dC5jbGllbnQgYXMgbXF0dAoKUFJVU0FfQkFVRFJBVEUgPSAxMTUyMDAKCiMgJ1Q6MjYuMSAvMC4wIEI6MjUuNiAvMC4wIFQwOjI2LjEgLzAuMCBAOjAgQkA6MCBQOjI3LjMgQTozMy44JyA8LSBleGFtcGxlIGxpbmUKUEFUVEVSTl9TVEFSVCA9IHJlLmNvbXBpbGUocicuKnN0YXJ0XG4nKQpQQVRURVJOX0VORCA9IHJlLmNvbXBpbGUocicuKklOVDRcbicpCgpQQVRURVJOX1RFTVBfQUNUSVZFID0gcmUuY29tcGlsZShyJ1Q6KD9QPGV4dHJ1ZGVyX2FjdHVhbD5cZCtcLlxkKykgLyg/UDxleHRydWRlcl90YXJnZXQ+XGQrXC5cZCspIEI6KD9QPGJlZF9hY3R1YWw+XGQrXC5cZCspIC8oP1A8YmVkX3RhcmdldD5cZCtcLlxkKykgVDA6KFxkK1wuXGQrKSAvKFxkK1wuXGQrKSBAOig/UDxob3RlbmRfcG93ZXI+XGQrKSBCQDooP1A8YmVkX3Bvd2VyPlxkKykgUDooP1A8cGluZGE+XGQrXC5cZCspIEE6KD9QPGFtYmllbnQ+XGQrXC5cZCspJykKCiMgJ1Q6MjA2LjY1IEU6MCBCOjU5LjQnIDwtIGV4YW1wbGUgbGluZQpQQVRURVJOX1RFTVBfSURMRSA9IHJlLmNvbXBpbGUocidUOig/UDxleHRydWRlcl9hY3R1YWw+XGQrXC5cZCspIEU6KD9QPGU+XGQrKSBCOig/UDxiZWRfYWN0dWFsPlxkK1wuXGQrKScpCgojICdOT1JNQUwgTU9ERTogUGVyY2VudCBkb25lOiA5MzsgcHJpbnQgdGltZSByZW1haW5pbmcgaW4gbWluczogMjsgQ2hhbmdlIGluIG1pbnM6IC0xJyA8LSBleGFtcGxlIGxpbmUKUEFUVEVSTl9QUk9HUkVTUyA9IHJlLmNvbXBpbGUocidcdysgTU9ERTogUGVyY2VudCBkb25lOiAoP1A8cGVyY2VudF9kb25lPlxkKyk7IHByaW50IHRpbWUgcmVtYWluaW5nIGluIG1pbnM6ICg/UDxtaW5zX3JlbWFpbmluZz5cZCspOyBDaGFuZ2UgaW4gbWluczogKD9QPGNoYW5nZV9pbl9taW5zPi0/XGQrKScpCgpQQVRURVJOX1RPUElDUyA9IHsKICAgIFBBVFRFUk5fVEVNUF9BQ1RJVkU6ICd0ZW1wJywKICAgIFBBVFRFUk5fVEVNUF9JRExFOiAndGVtcF9pZGxlJywKICAgIFBBVFRFUk5fUFJPR1JFU1M6ICdwcm9ncmVzcycsCn0KCgpkZWYgbWFpbigpOgogICAgaW1wb3J0IGFyZ3BhcnNlCgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCiAgICAgICAgZGVzY3JpcHRpb249J0xvZyB0ZW1wZXJhdHVyZSBkYXRhIGZyb20gdGhlIFVTQiBwb3J0IG9mIGEgUHJ1c2EgcHJpbnRlciB0byBhbiBNUVRUIHNlcnZlci4nLAogICAgICAgIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5Bcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlcgogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zZXJpYWxfcG9ydCcsIGhlbHA9J1BhdGggdG8gdGhlIHNlcmlhbCBwb3J0IGRldmljZS4nLCBkZWZhdWx0PScvZGV2L3R0eUFDTTAnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS10b3BpYycsIGhlbHA9J1RvcGljIGZvciB0aGUgTVFUVCBtZXNzYWdlLicsIGRlZmF1bHQ9J3BydXNhJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY2xpZW50X2lkJywgaGVscD0nRGlzdGluY3QgY2xpZW50IElEIGZvciB0aGUgTVFUVCBjb25uZWN0aW9uLicsIGRlZmF1bHQ9J3BydXNhMm1xdHQnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1jaGVja19pbnRlcnZhbCcsIGhlbHA9J0ludGVydmFsIGluIHNlY29uZHMgZm9yIGNoZWNraW5nIHRoZSB0ZW1wZXJhdHVyZXMuJywgdHlwZT1pbnQsIGRlZmF1bHQ9NSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbXF0dF9hZGRyZXNzJywgaGVscD0nQWRkcmVzcyBmb3IgdGhlIE1RVFQgY29ubmVjdGlvbi4nLCBkZWZhdWx0PSdsb2NhbGhvc3QnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1tcXR0X3BvcnQnLCBoZWxwPSdQb3J0IGZvciB0aGUgTVFUVCBjb25uZWN0aW9uLicsIHR5cGU9aW50LCBkZWZhdWx0PTE4ODMpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW1xdHRfdXNlcm5hbWUnLCBoZWxwPSdVc2VyIG5hbWUgZm9yIHRoZSBNUVRUIGNvbm5lY3Rpb24uJywgZGVmYXVsdD1Ob25lKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1tcXR0X3Bhc3N3b3JkJywgaGVscD0nUGFzc3dvcmQgbmFtZSBmb3IgdGhlIE1RVFQgY29ubmVjdGlvbi4nLCBkZWZhdWx0PU5vbmUpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRpc2NyZXRlX3RvcGljcycsIGhlbHA9J1Bvc3Qgc2Vuc29yIGRhdGEgdG8gZGlzY3JldGUgdG9waWNzIGluc3RlYWQgb2Ygb25lIEpTT04gcGF5bG9hZC4nLCB0eXBlPWJvb2wsIGRlZmF1bHQ9RmFsc2UpCgogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCiAgICBwcmludChmJ1xuXHRTZXJpYWw6IHthcmdzLnNlcmlhbF9wb3J0fSAtPiBNUVRUOiB7YXJncy5jbGllbnRfaWR9QHthcmdzLm1xdHRfYWRkcmVzc306e2FyZ3MubXF0dF9wb3J0fS97YXJncy50b3BpY31cbicpCgogICAgc2VyID0gTm9uZSAgIyBnbG9iYWwgdG8gbWFpbgoKICAgIGRlZiBwYXJzZUxpbmUobGluZSwgbXF0dF9jbGllbnQpOgogICAgICAgIHBhdHRlcm5fZm91bmQgPSBGYWxzZQogICAgICAgIGZvciBwYXR0ZXJuIGluIChQQVRURVJOX1RFTVBfQUNUSVZFLCBQQVRURVJOX1RFTVBfSURMRSwgUEFUVEVSTl9QUk9HUkVTUyk6CgogICAgICAgICAgICByZXMgPSBwYXR0ZXJuLm1hdGNoKGxpbmUpCgogICAgICAgICAgICBpZiByZXM6CiAgICAgICAgICAgICAgICBwYXR0ZXJuX2ZvdW5kID0gVHJ1ZQogICAgICAgICAgICAgICAgaWYgYXJncy5kaXNjcmV0ZV90b3BpY3M6CiAgICAgICAgICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHJlcy5ncm91cGRpY3QoKS5pdGVtcygpOgogICAgICAgICAgICAgICAgICAgICAgICBtcXR0X2NsaWVudC5wdWJsaXNoKGYne2FyZ3MudG9waWN9L3tQQVRURVJOX1RPUElDU1twYXR0ZXJuXX0ve25hbWV9JywgdmFsdWUpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIG1xdHRfY2xpZW50LnB1Ymxpc2goZid7YXJncy50b3BpY30ve1BBVFRFUk5fVE9QSUNTW3BhdHRlcm5dfScsIGR1bXBzKHJlcy5ncm91cGRpY3QoKSkpCiAgICAgICAgICAgICAgICAgICAgcHJpbnQoJy4nLCBlbmQ9JycpCiAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCgogICAgICAgICAgICAgICAgbXF0dF9jbGllbnQubG9vcF9zdGFydCgpCgogICAgICAgIGlmIG5vdCBwYXR0ZXJuX2ZvdW5kOgogICAgICAgICAgICBwcmludChmJz4ge2xpbmUuc3RyaXAoKX0nKQoKICAgICMgc2VuZCBwYXlsb2FkIGFzIEdDT0RFIHRvIHRoZSBwcmludGVyIHdoZW4gc29tZXRoaW5nIGFycml2ZXMgb24gdG9waWMvZ2NvZGUKICAgIGRlZiBvbl9tZXNzYWdlKGNsaWVudCwgb2JqLCBtc2cpOgogICAgICAgIGdjb2RlID0gZiJ7bXNnLnBheWxvYWQuZGVjb2RlKCd1dGYtOCcpfVxuIgogICAgICAgIHByaW50KGYnXG48IHtnY29kZX0nKQogICAgICAgIHRyeToKICAgICAgICAgICAgc2VyLndyaXRlKGJ5dGVhcnJheShnY29kZSwgJ3V0Zi04JykpCiAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICBwYXNzICAjIGNhbiBoYXBwZW4gd2hlbiB0aGVyZSdzIGEgcmV0YWluZWQgbWVzc2FnZSBiZWZvcmUgdGhlIHNlcmlhbCBjb25uZWN0aW9uIHdhcyBvcGVuZWQKCiAgICBtcXR0X2NsaWVudCA9IG1xdHQuQ2xpZW50KGFyZ3MuY2xpZW50X2lkKQoKICAgIGlmIGFyZ3MubXF0dF91c2VybmFtZToKICAgICAgICBtcXR0X2NsaWVudC51c2VybmFtZV9wd19zZXQoYXJncy5tcXR0X3VzZXJuYW1lLCBhcmdzLm1xdHRfcGFzc3dvcmQpCiAgICBtcXR0X2NsaWVudC5vbl9tZXNzYWdlID0gb25fbWVzc2FnZQogICAgbXF0dF9jbGllbnQuY29ubmVjdChhcmdzLm1xdHRfYWRkcmVzcywgYXJncy5tcXR0X3BvcnQpCiAgICBtcXR0X2NsaWVudC5zdWJzY3JpYmUoZid7YXJncy50b3BpY30vZ2NvZGUnLCAwKQogICAgbXF0dF9jbGllbnQubG9vcF9zdGFydCgpCgogICAgIyB0cnkgdG8gY29ubmVjdCB0byB0aGUgTVFUVCBzZXJ2ZXIKICAgIGZvciBpIGluIHJhbmdlKDMwKTogICMgdHJ5IGZvciAzIHNlY29uZHMKICAgICAgICBpZiBtcXR0X2NsaWVudC5pc19jb25uZWN0ZWQoKToKICAgICAgICAgICAgYnJlYWsKICAgICAgICBwcmludCgnLicsIGVuZD0nJykKICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICB0aW1lLnNsZWVwKDAuMSkKCiAgICBpZiBub3QgbXF0dF9jbGllbnQuaXNfY29ubmVjdGVkKCk6CiAgICAgICAgc3lzLmV4aXQoZidcbkNvdWxkIG5vdCBjb25uZWN0IHRvIHRoZSBNUVRUIHNlcnZlciBhdCB7YXJncy5tcXR0X2FkZHJlc3N9OnthcmdzLm1xdHRfcG9ydH0sIHBsZWFzZSBjaGVjayB5b3VyIHBhcmFtZXRlcnMuJykKCiAgICB3aGlsZSBUcnVlOgogICAgICAgIHRyeToKICAgICAgICAgICAgd2l0aCBzZXJpYWwuU2VyaWFsKGFyZ3Muc2VyaWFsX3BvcnQsIFBSVVNBX0JBVURSQVRFLCB0aW1lb3V0PTUpIGFzIHNlcjogICMgdGltZW91dCBpcyBoZXJlIHNvIHRoZSBNUVRUIGxvb3AgZ2V0J3MgY2FsbGVkIHdoZW4gbm8gc2VyaWFsIGRhdGEgaXMgd2FpdGluZwogICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICAgICBtcXR0X2NsaWVudC5sb29wX3N0YXJ0KCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgIGxpbmUgPSBzZXIucmVhZGxpbmUoKS5kZWNvZGUoJ3V0Zi04JykKICAgICAgICAgICAgICAgICAgICBpZihsaW5lID09ICcnKToKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgICMgdGltZW91dCBwcm9kdWNlcyBlbXB0eSBsaW5lcwogICAgICAgICAgICAgICAgICAgIGlmIFBBVFRFUk5fU1RBUlQubWF0Y2gobGluZSk6ICAjIHRoZSBwcmludGVyIGRvZXMgbm90IHJlY29nbmlzZSBjb21tYW5kcyBiZWZvcmUgdGhhdCBsaW5lCjx8ZmltX2VuZHw+"]
["419149dac032d82e308b4f63be77f5b85791fed9-3","419149dac032d82e308b4f63be77f5b85791fed9","PHxmaW1fcHJlZml4fD4KIyEvYmluL3B5dGhvbjMKIyBhdXRob3I6IEphbiBIeWJzCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgc3lzCgpmcm9tIGxvZ3VydSBpbXBvcnQgbG9nZ2VyCmZyb20gZW52IGltcG9ydCBFbnYKCmxvZ2dlci5jb25maWd1cmUoaGFuZGxlcnM9WwogICAgZGljdChzaW5rPXN5cy5zdGRvdXQpLAogICAgZGljdChzaW5rPUVudi5sb2dfZmlsZSwgY29sb3JpemU9VHJ1ZSkKXSkKCgojIGFwcC5ydW4oZGVidWc9YXJncy5kZWJ1ZywgaG9zdD1hcmdzLmhvc3QsIHBvcnQ9YXJncy5wb3J0KQoKIyBmcm9tIGdldmVudHdlYnNvY2tldCBpbXBvcnQgV2ViU29ja2V0U2VydmVyCiMgIyBmcm9tIGdldmVudC5weXdzZ2kgaW1wb3J0IFdTR0lTZXJ2ZXIKIyBodHRwX3NlcnZlciA9IFdlYlNvY2tldFNlcnZlcigoJycsIDUwMDApLCBhcHApCiMgaHR0cF9zZXJ2ZXIuc2VydmVfZm9yZXZlcigpCgoKZGVmIGNyZWF0ZV9hcHAoKToKICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1oZWxwJywgYWN0aW9uPSdoZWxwJywgZGVmYXVsdD1hcmdwYXJzZS5TVVBQUkVTUywKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD1hcmdwYXJzZS5fKCdzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0JykpCgogICAgZmxhc2tfc2VydmVyID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnZmxhc2sgc2VydmVyJykKICAgIGZsYXNrX3NlcnZlci5hZGRfYXJndW1lbnQoJy1wJywgJy0tcG9ydCcsIHR5cGU9aW50LCBkZWZhdWx0PTUwMDApCiAgICBmbGFza19zZXJ2ZXIuYWRkX2FyZ3VtZW50KCctaCcsICctLWhvc3QnLCB0eXBlPXN0ciwgZGVmYXVsdD0nMC4wLjAuMCcpCiAgICBmbGFza19zZXJ2ZXIuYWRkX2FyZ3VtZW50KCctZCcsICctLWRlYnVnJywgYWN0aW9uPSdzdG9yZV90cnVlJykKICAgIGZsYXNrX3NlcnZlci5hZGRfYXJndW1lbnQoJy12JywgJy0tdmVyYm9zZScsIGFjdGlvbj0nc3RvcmVfZmFsc2UnKQogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCiAgICBpZiBhcmdzLnZlcmJvc2U6CiAgICAgICAgIyBkbyBub3QgZmlsdGVyIGxvZ2dlcgogICAgICAgIHBhc3MKICAgIGVsc2U6CiAgICAgICAgaW1wb3J0IGxvZ2dpbmcKCiAgICAgICAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3dlcmt6ZXVnJykKICAgICAgICBsb2cuc2V0TGV2ZWwobG9nZ2luZy5FUlJPUikKCiAgICBmcm9tIHd3dyBpbXBvcnQgYXBwCiAgICBmcm9tIHd3dyBpbXBvcnQgYXV0aAogICAgZnJvbSB3d3cgaW1wb3J0IGluZGV4CiAgICBmcm9tIHd3dyBpbXBvcnQgY291cnNlCiAgICBmcm9tIHd3dyBpbXBvcnQgc29ja2V0cwogICAgZnJvbSB3d3cgaW1wb3J0IHV0aWxzX3d3dwoKICAgIGxvZ2dlci5pbmZvKCdSdW5uaW5nIGF1dG9tYXRlIHZlcnNpb24ge30nLCBFbnYudmVyc2lvbikKICAgIGxvZ2dlci5pbmZvKCdMaXN0ZW5pbmcgb24ge2hvc3R9Ontwb3J0fSAoZGVidWc9e2RlYnVnfSknLCAqKnZhcnMoYXJncykpCiAgICBpbmZvID0gJ1xuJy5qb2luKFsnezo+MjBzfTogezpzfScuZm9ybWF0KGssIHN0cih2KSkgZm9yIGssIHYgaW4gRW52LmluZm8oKV0pCiAgICBsb2dnZXIuaW5mbygnQ29uZmlndXJhdGlvbiBpbiBlbnYucHk6XG57fScsIGluZm8pCgogICAgcmV0dXJuIGFwcAoKCjx8ZmltX2hvbGV8PgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgYXBwID0gY3JlYXRlX2FwcCgpCiAgICBmcm9tIGdldmVudHdlYnNvY2tldCBpbXBvcnQgV2ViU29ja2V0U2VydmVyCgogICAgIyBmcm9tIGdldmVudC5weXdzZ2kgaW1wb3J0IFdTR0lTZXJ2ZXIKICAgIGh0dHBfc2VydmVyID0gV2ViU29ja2V0U2VydmVyKCgnJywgNTAwMCksIGFwcCkKICAgIGh0dHBfc2VydmVyLnNlcnZlX2ZvcmV2ZXIoKQoKCgojIGFwcC5ydW4oZGVidWc9YXJncy5kZWJ1ZywgaG9zdD1hcmdzLmhvc3QsIHBvcnQ9YXJncy5wb3J0KQojCgoKCiMKIwojIGltcG9ydCBqc29uCiMgaW1wb3J0IHBhdGhsaWIKIyBmcm9tIGZsYXNrIGltcG9ydCBGbGFzaywgc2VuZF9maWxlCiMgZnJvbSBQSUwgaW1wb3J0IEltYWdlLCBJbWFnZURyYXcsIEltYWdlRm9udAojIGltcG9ydCB1cmxsaWIucmVxdWVzdAojCiMKIyBwcm94eSA9IHVybGxpYi5yZXF1ZXN0LlByb3h5SGFuZGxlcih7fSkKIyBvcGVuZXIgPSB1cmxsaWIucmVxdWVzdC5idWlsZF9vcGVuZXIocHJveHkpCiMgb3BlbmVyLmFkZGhlYWRlcnMgPSBbCiMgICAgICgnVXNlci1BZ2VudCcsCiMgICAgICAnTW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTJfNCkgQXBwbGVXZWJLaXQvNjAzLjEuMzAgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzEwLjEgU2FmYXJpLzYwMy4xLjMwJwojICAgICAgKQojIF0KIyB1cmxsaWIucmVxdWVzdC5pbnN0YWxsX29wZW5lcihvcGVuZXIpCiMKIwojCiMKIwojIGFwcCA9IEZsYXNrKF9fbmFtZV9fKQojIGplbmtpbnNfdXJsID0gJ2h0dHA6Ly9jaWZsb3cubnRpLnR1bC5jejo4MDgwJwojIHVybCA9ICdodHRwczovL2ltZy5zaGllbGRzLmlvL2plbmtpbnMvcy9odHRwL2NpZmxvdy5udGkudHVsLmN6OjgwODAvRmxvdzEyM2QtY2kycnVubmVyLWRlYnVnLW11bHRpam9iLnBuZz9zdHlsZT1mbGF0LXNxdWFyZSZsYWJlbD1kZWJ1ZycKIyAjIHVybCA9ICdodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL21pbmlmaWVkJTIwc2l6ZS02LjY1JTIwa0ItaW5mb3JtYXRpb25hbC5wbmcnCiMKIwojIGRlZiBzZXJ2ZV9waWxfaW1hZ2UocGlsX2ltZyk6CiMgICAgIGltZ19pbyA9IGlvLkJ5dGVzSU8oKQojICAgICBwaWxfaW1nLnNhdmUoaW1nX2lvLCAnUE5HJykKIyAgICAgaW1nX2lvLnNlZWsoMCkKIyAgICAgcmV0dXJuIHNlbmRfZmlsZShpbWdfaW8sIG1pbWV0eXBlPSdpbWFnZS9wbmcnLCBjYWNoZV90aW1lb3V0PTYwKQojCiMKIyBAYXBwLnJvdXRlKCcvcmVsZWFzZScpCiMgZGVmIHN0YXR1cygpOgojICAgICBmLCBoID0gdXJsbGliLnJlcXVlc3QudXJscmV0cmlldmUodXJsKQojICAgICBwYXRoID0gcGF0aGxpYi5QYXRoKGYpCiMgICAgIHByaW50KGYsIGgpCiMgICAgIGltZyA9IEltYWdlLm9wZW4ocGF0aCkKIyAgICAgcGF0aC51bmxpbmsoKQojCiMgICAgIHJldHVybiBzZXJ2ZV9waWxfaW1hZ2UoaW1nKQojCiMKIyBAYXBwLnJvdXRlKCcvZGVidWcnKQojIGRlZiBqc29uX3N0YXR1cygpOgojICAgICBqb2JfbmFtZSA9ICdGbG93MTIzZC1jaTJydW5uZXItZGVidWctbXVsdGlqb2InCiMgICAgIGpvYl9uYW1lID0gJ3Rlc3QnCiMgICAgIGZ1bGxfdXJsID0gJ3tqZW5raW5zX3VybH0vam9iL3tqb2JfbmFtZX0vbGFzdEJ1aWxkL2FwaS9qc29uJy5mb3JtYXQoCiMgICAgICAgICBqZW5raW5zX3VybD1qZW5raW5zX3VybCwKIyAgICAgICAgIGpvYl9uYW1lPWpvYl9uYW1lCiMgICAgICkKIyAgICAgZnVsbF91cmwgPSAne2plbmtpbnNfdXJsfS9qb2Ive2pvYl9uYW1lfS9hcGkvanNvbj90cmVlPWJ1aWxkc1tudW1iZXIsc3RhdHVzLHRpbWVzdGFtcCxpZCxyZXN1bHRdJy5mb3JtYXQoCiMgICAgICAgICBqZW5raW5zX3VybD1qZW5raW5zX3VybCwKIyAgICAgICAgIGpvYl9uYW1lPWpvYl9uYW1lCiMgICAgICkKIwojICAgICBwcmludChmdWxsX3VybCkKIyAgICAgd2l0aCB1cmxsaWIucmVxdWVzdC51cmxvcGVuKGZ1bGxfdXJsKSBhcyB1cmw6CiMgICAgICAgICBkYXRhID0ganNvbi5sb2Fkcyh1cmwucmVhZCgpLmRlY29kZSgpKQojICAgICAgICAgcHJpbnQoZGF0YSkKIyAgICAgICAgIGJ1aWxkaW5nID0gZGF0YVsnYnVpbGRpbmcnXQojICAgICAgICAgcmVzdWx0ID0gZGF0YVsncmVzdWx0J10KIyAgICAgICAgIHByaW50KGJ1aWxkaW5nLCByZXN1bHQpCiMKIyAgICAgcmV0dXJuIGZ1bGxfdXJsCiMKIwojIGZvbnRzID0gJy9ob21lL2phbi1oeWJzL3Byb2plY3RzL2F1dG9tYXRlL3d3dy9mb250cycKIyB1YnVudHUgPSBJbWFnZUZvbnQudHJ1ZXR5cGUoc3RyKHBhdGhsaWIuUGF0aChmb250cykuam9pbnBhdGgoJ1VidW50dS1CLnR0ZicpKSwgc2l6ZT0xMikKIyB1YnVudHVfc21hbGwgPSB1YnVudHUuZm9udF92YXJpYW50KHNpemU9MTApCiMgVywgSCA9IDUwMCwgMjAKIyBmaWxscyA9IGRpY3QoCiMgICAgIFJVTk5JTkc9JyM5OTk5OTknLAojICAgICBTVUNDRVNTPScjNzY5ZTAwJywKIyAgICAgRkFJTFVSRT0nI2NhNTQzZScsCiMgICAgIFVOU1RBQkxFPScjYWQ4YjE0JywKIyAgICAgVU5LTk9XTj0nIzk5OTk5OScsCiMgICAgIEFCT1JURUQ9JyM5OTk5OTknLAojICkKIwojCiMgZGVmIGRyYXdfdGV4dChkcmF3OiBJbWFnZURyYXcsIHRleHQsIHgsIHksIGZpbGw9Tm9uZSwgcGFkZGluZz01LCBmb250PXVidW50dSk6CiMgICAgIHcsIGggPSBkcmF3LnRleHRzaXplKHRleHQsIGZvbnQ9Zm9udCkKIyAgICAgd21pZCwgaG1pZCA9IChXIC0gdykgLyAyLCAoSCAtIGgpIC8gMgojICAgICBpZiB5ID09ICdtJzoKIyAgICAgICAgIHkgPSBobWlkIC0gMQojICAgICBpZiB4ID09ICdtJzoKIyAgICAgICAgIHggPSB3bWlkCiMKIyAgICAgaWYgZmlsbDoKIyAgICAgICAgIGRyYXcucmVjdGFuZ2xlKFsKIyAgICAgICAgICAgICAoeCwgMCksCiMgICAgICAgICAgICAgKHggKyB3ICsgcGFkZGluZyoyLCBIKQojICAgICAgICAgXSwgZmlsbD1maWxsKQojCiMgICAgIGRyYXcudGV4dCgoeCtwYWRkaW5nLCB5KSwgdGV4dCwgZmlsbD0id2hpdGUiLCBmb250PWZvbnQpCiMgICAgIHJldHVybiB4ICsgdyArIHBhZGRpbmcqMiwgeStoCiMKIwojIGRlZiBsb2FkX2xhc3Rfc3RhdHVzZXMoam9iX25hbWUpOgojICAgICAjIGZ1bGxfdXJsID0gJ3tqZW5raW5zX3VybH0vam9iL3tqb2JfbmFtZX0vYXBpL2pzb24/dHJlZT1idWlsZHNbbnVtYmVyLHN0YXR1cyx0aW1lc3RhbXAsaWQscmVzdWx0XScuZm9ybWF0KAojICAgICBmdWxsX3VybCA9ICd7amVua2luc191cmx9L2pvYi97am9iX25hbWV9L2FwaS9qc29uP3RyZWU9YnVpbGRzW2lkLHJlc3VsdF0nLmZvcm1hdCgKIyAgICAgICAgIGplbmtpbnNfdXJsPWplbmtpbnNfdXJsLAojICAgICAgICAgam9iX25hbWU9am9iX25hbWUKIyAgICAgKQojCiMgICAgIHdpdGggdXJsbGliLnJlcXVlc3QudXJsb3BlbihmdWxsX3VybCkgYXMgdXJsOgojICAgICAgICAgZGF0YSA9IGpzb24ubG9hZHModXJsLnJlYWQoKS5kZWNvZGUoKSkKIyAgICAgICAgIGZvciBidWlsZCBpbiBkYXRhWydidWlsZHMnXToKIyAgICAgICAgICAgICByZXN1bHQgPSBidWlsZFsncmVzdWx0J10KIyAgICAgICAgICAgICB5aWVsZCAocmVzdWx0IG9yICdSVU5OSU5HJywgYnVpbGRbJ2lkJ10pCiMKIwojIEBhcHAucm91dGUoJy9zdGF0dXMvPHN0cmluZzp0ZXh0Pi88c3RyaW5nOmpvYl9uYW1lPicpCiMgQGFwcC5yb3V0ZSgnL3N0YXR1cy88c3RyaW5nOnRleHQ+LzxzdHJpbmc6am9iX25hbWU+LzxpbnQ6bGltaXQ+JykKIyBkZWYgZm9vKHRleHQsIGpvYl9uYW1lLCBsaW1pdD01KToKIyAgICAgaW1nID0gSW1hZ2UubmV3KCdSR0JBJywgc2l6ZT0oVywgSCksIGNvbG9yPSd3aGl0ZScpCiMgICAgIGRyYXcgPSBJbWFnZURyYXcuRHJhdyhpbWcpCiMKIyAgICAgeCwgeSA9IGRyYXdfdGV4dChkcmF3LCB0ZXh0LCAwLCAnbScsIGZpbGw9JyM1NTU1NTUnKQojCiMgICAgIHN0YXR1c2VzID0gbGlzdChsb2FkX2xhc3Rfc3RhdHVzZXMoam9iX25hbWUpKVs6bGltaXRdWzo6LTFdCiMgICAgIGZvciBzdGF0dXMsIG51bWJlciBpbiBzdGF0dXNlczoKIyAgICAgICAgIGZpbGwgPSBmaWxscy5nZXQoc3RhdHVzLCBmaWxsc1snVU5LTk9XTiddKQojICAgICAgICAgcHJpbnQoc3RhdHVzLCBudW1iZXIsIGZpbGwpCiMgICAgICAgICB4LCB5ID0gZHJhd190ZXh0KGRyYXcsICcjJXMnICUgbnVtYmVyLCB4KzIsICdtJywgZmlsbD1maWxsLCBmb250PXVidW50dV9zbWFsbCwgcGFkZGluZz0zKQojICAgICBpbWcgPSBpbWcuY3JvcCgoMCwgMCwgeCsxLCBIKSkKIyAgICAgcmV0dXJuIHNlcnZlX3BpbF9pbWFnZShpbWcpCiMKIwojCiMKIwojIGZyb20gZmxhc2sgaW1wb3J0IEZsYXNrCiMgZnJvbSB3d3cuYnVpbGRfc3RhdHVzIGltcG9ydCBibHVlcHJpbnQKIyBhcHAgPSBGbGFzayhfX25hbWVfXykKIyBhcHAucmVnaXN0ZXJfYmx1ZXByaW50KGJsdWVwcmludCwgdXJsX3ByZWZpeD0nL3N0YXR1cy8nKQojIGFwcC5ydW4oaG9zdD0nMC4wLjAuMCcsIGRlYnVnPVRydWUpCgojIGltcG9ydCBQSUwuSW1hZ2VTaG93CiMgZnJvbSBQSUwgaW1wb3J0IEltYWdlLCBJbWFnZURyYXcKIwojIGZyb20gd3d3LmJ1aWxkX3N0YXR1cyBpbXBvcnQgU3RhdHVzU2hpZWxkCiMgUElMLkltYWdlU2hvdy5yZWdpc3RlcihQSUwuSW1hZ2VTaG93LkVvZ1ZpZXdlciwgLTEpCiMKIyBzdGF0dXMgPSBTdGF0dXNTaGllbGQoKQojIGltID0gc3RhdHVzLmdlbmVyYXRlX2ltYWdlX2Zyb21fc3RhdHVzZXMoJ2Zvby1iYXItYmFyLWJhcicsIFsoJ1NVQ0NFU1MnLCAnIzEnKSwgKCdGQUlMVVJFJywgJyMyJyldKQojIGltLnNob3coY29tbWFuZD0nZW9nJykKPHxmaW1fc3VmZml4fD4KZGVmIHdzZ2koKmFyZ3MsICoqa3dhcmdzKToKICAgIHJldHVybiBjcmVhdGVfYXBwKCkoKmFyZ3MsICoqa3dhcmdzKQoKCjx8ZmltX2VuZHw+"]
["cfb60121a309de80f1c263588cdb13df2dcb6a20-1","cfb60121a309de80f1c263588cdb13df2dcb6a20","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgbWFrZS1BV1MtQ0YtcGFyYW1zLXNrZWxldG9uLnB5CiMgCiMgYnkgU3RlZmFuIFd1ZW5zY2ggMjAxNi0yMDE3CiMgCiMgSW5wdXQ6IEFXUyBDbG91ZEZvcm1hdGlvbiBKU09OIG9yIFlBTUwgdGVtcGxhdGUgb24gU1RESU4uCiMgICBUeXBpY2FsbHkgdGhpcyBtZWFucyBwaXBlIHRoZSBKU09OL1lBTUwgdG8gdGhpcyBzY3JpcHQsIHN1Y2ggYXMgJ2NhdCcgYSBsb2NhbCBmaWxlCiMgICBvciAiY3VybCAtcyIgYW4gQW1hem9uIHNhbXBsZSwgb3IgImF3cyBzMyBjcCIgdG8gJy0nLCBvciBzaW1pbGFyLgojIAojIE91dHB1dDogSlNPTiBza2VsZXRvbiBvZiBDbG91ZEZvcm1hdGlvbiBQYXJhbWV0ZXJzIGZpbGUuCiMgICBBV1MgQ2xvdWRGb3JtYXRpb24gKHN0aWxsKSBkb2VzIG5vdCBzdXBwb3J0IHBhcmFtZXRlcnMgZmlsZXMgaW4gWUFNTCwKIyAgIHNvIHRoaXMgc2NyaXB0IHdpbGwgb25seSBvdXRwdXQgSlNPTiAtIG5vIG1hdHRlciB3aGF0IHRoZSBpbnB1dCBpcy4KIyAKIyBQdXJwb3NlOiBJZiB5b3Ugd2FudCB0byBnZW5lcmF0ZSBhIENsb3VkRm9ybWF0aW9uIFN0YWNrIGZyb20gYSBDRiB0ZW1wbGF0ZSBhbmQgYSBzZXBhcmF0ZQojICAgSlNPTiBmaWxlIGZvciBQYXJhbWV0ZXJzLCB0aGlzIHdpbGwgZ2VuZXJhdGUgdGhlIGZyYW1ld29yayBvZiB0aGUgcmVxdWlyZWQgUGFyYW1ldGVycyBpbgojICAgYSBKU09OIGZpbGUgd2hpY2ggeW91IGNhbiBzaW1wbHkgZWRpdCB0byBmaWxsIGluIGVhY2ggUGFyYW1ldGVyVmFsdWUuIFRoaXMgbWFrZXMgaXQKIyAgIHJlYWxseSBlYXN5IHRvIHN0YW5kIHVwIGEgQ0Ygc3RhY2ssIGJlY2F1c2UgdGhlIG91dHB1dCBmcm9tIHRoaXMgc2NyaXB0IHNob3dzIHlvdQojICAgZXhhY3RseSB3aGF0IGVhY2ggUGFyYW1ldGVyIFR5cGUgbXVzdCBiZSwgdGhlIGFsbG93ZWQgdmFsdWVzLCB0aGUgZGVmYXVsdCwgZXRjLgojIAojIAojIEFkZGl0aW9uYWwgUmVhZGluZzoKIyAgIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vYmxvZ3MvZGV2b3BzL3Bhc3NpbmctcGFyYW1ldGVycy10by1jbG91ZGZvcm1hdGlvbi1zdGFja3Mtd2l0aC10aGUtYXdzLWNsaS1hbmQtcG93ZXJzaGVsbC8KIyAKIyAKIyBUbyBEbzogQWRkIGZpbGUgaW5wdXQvb3V0cHV0IGluc3RlYWQgb2YganVzdCBzdGRpbi9zdGRvdXQKIyAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgCiMgRXhhbXBsZToKIyAgIFRoaXMgdXNlcyBhbiBvbmxpbmUgc2FtcGxlIEFtYXpvbiBDRiBKU09OIFRlbXBsYXRlLiBJdCBpcyByZXRyaWV2ZWQgdmlhIGN1cmwgYW5kIHByb2Nlc3NlZCBieSB0aGlzIHNjcmlwdC4KIyAgIE5vdGUgaG93IGVhY2ggIlBhcmFtZXRlclZhbHVlIiBjb250YWlucyAiUkVQTEFDRSBUSElTIFdJVEg6IiBhbmQgdGhlICJUeXBlIiwgYSBsaXN0IG9mIGFueSAiQWxsb3dlZFZhbHVlcyIsIGFuZAojICAgdGhlICJEZXNjcmlwdGlvbiIgZnJvbSB0aGUgdGVtcGxhdGUhISAoQ29vbCwgZWg/KQojIAojICUgY3VybCAtcyBodHRwczovL3MzLmFtYXpvbmF3cy5jb20vY2xvdWRmb3JtYXRpb24tdGVtcGxhdGVzLXVzLWVhc3QtMS9MQU1QX1NpbmdsZV9JbnN0YW5jZS50ZW1wbGF0ZSB8IG1ha2UtQVdTLUNGLXBhcmFtcy1za2VsZXRvbi5weQojIAojIFsKIyAgICAgewojICAgICAgICAgIlBhcmFtZXRlcktleSI6ICJEQk5hbWUiLCAKIyAgICAgICAgICJQYXJhbWV0ZXJWYWx1ZSI6ICJSRVBMQUNFIFRISVMgV0lUSDogU3RyaW5nIC0gTXlTUUwgZGF0YWJhc2UgbmFtZSIKIyAgICAgfSwgCiMgICAgIHsKIyAgICAgICAgICJQYXJhbWV0ZXJLZXkiOiAiREJQYXNzd29yZCIsIAojICAgICAgICAgIlBhcmFtZXRlclZhbHVlIjogIlJFUExBQ0UgVEhJUyBXSVRIOiBTdHJpbmcgLSBQYXNzd29yZCBmb3IgTXlTUUwgZGF0YWJhc2UgYWNjZXNzIgojICAgICB9LCAKIyAgICAgewojICAgICAgICAgIlBhcmFtZXRlcktleSI6ICJEQlJvb3RQYXNzd29yZCIsIAojICAgICAgICAgIlBhcmFtZXRlclZhbHVlIjogIlJFUExBQ0UgVEhJUyBXSVRIOiBTdHJpbmcgLSBSb290IHBhc3N3b3JkIGZvciBNeVNRTCIKIyAgICAgfSwgCiMgICAgIHsKIyAgICAgICAgICJQYXJhbWV0ZXJLZXkiOiAiREJVc2VyIiwgCiMgICAgICAgICAiUGFyYW1ldGVyVmFsdWUiOiAiUkVQTEFDRSBUSElTIFdJVEg6IFN0cmluZyAtIFVzZXJuYW1lIGZvciBNeVNRTCBkYXRhYmFzZSBhY2Nlc3MiCiMgICAgIH0sIAojICAgICB7CiMgICAgICAgICAiUGFyYW1ldGVyS2V5IjogIkluc3RhbmNlVHlwZSIsIAojICAgICAgICAgIlBhcmFtZXRlclZhbHVlIjogIlJFUExBQ0UgVEhJUyBXSVRIOiBTdHJpbmcgLSBBbGxvd2VkOlt0MS5taWNybywgdDIubmFubywgdDIubWljcm8sIHQyLnNtYWxsLCB0Mi5tZWRpdW0sIHQyLmxhcmdlLCBtMS5zbWFsbCwgbTEubWVkaXVtLCBtMS5sYXJnZSwgbTEueGxhcmdlLCBtMi54bGFyZ2UsIG0yLjJ4bGFyZ2UsIG0yLjR4bGFyZ2UsIG0zLm1lZGl1bSwgbTMubGFyZ2UsIG0zLnhsYXJnZSwgbTMuMnhsYXJnZSwgbTQubGFyZ2UsIG00LnhsYXJnZSwgbTQuMnhsYXJnZSwgbTQuNHhsYXJnZSwgbTQuMTB4bGFyZ2UsIGMxLm1lZGl1bSwgYzEueGxhcmdlLCBjMy5sYXJnZSwgYzMueGxhcmdlLCBjMy4yeGxhcmdlLCBjMy40eGxhcmdlLCBjMy44eGxhcmdlLCBjNC5sYXJnZSwgYzQueGxhcmdlLCBjNC4yeGxhcmdlLCBjNC40eGxhcmdlLCBjNC44eGxhcmdlLCBnMi4yeGxhcmdlLCBnMi44eGxhcmdlLCByMy5sYXJnZSwgcjMueGxhcmdlLCByMy4yeGxhcmdlLCByMy40eGxhcmdlLCByMy44eGxhcmdlLCBpMi54bGFyZ2UsIGkyLjJ4bGFyZ2UsIGkyLjR4bGFyZ2UsIGkyLjh4bGFyZ2UsIGQyLnhsYXJnZSwgZDIuMnhsYXJnZSwgZDIuNHhsYXJnZSwgZDIuOHhsYXJnZSwgaGkxLjR4bGFyZ2UsIGhzMS44eGxhcmdlLCBjcjEuOHhsYXJnZSwgY2MyLjh4bGFyZ2UsIGNnMS40eGxhcmdlXSAtIFdlYlNlcnZlciBFQzIgaW5zdGFuY2UgdHlwZSIKIyAgICAgfSwgCiMgICAgIHsKIyAgICAgICAgICJQYXJhbWV0ZXJLZXkiOiAiS2V5TmFtZSIsIAojICAgICAgICAgIlBhcmFtZXRlclZhbHVlIjogIlJFUExBQ0UgVEhJUyBXSVRIOiBBV1M6OkVDMjo6S2V5UGFpcjo6S2V5TmFtZSAtIE5hbWUgb2YgYW4gZXhpc3RpbmcgRUMyIEtleVBhaXIgdG8gZW5hYmxlIFNTSCBhY2Nlc3MgdG8gdGhlIGluc3RhbmNlIgojICAgICB9LCAKIyAgICAgewojICAgICAgICAgIlBhcmFtZXRlcktleSI6ICJTU0hMb2NhdGlvbiIsIAojICAgICAgICAgIlBhcmFtZXRlclZhbHVlIjogIlJFUExBQ0UgVEhJUyBXSVRIOiBTdHJpbmcgLSAgVGhlIElQIGFkZHJlc3MgcmFuZ2UgdGhhdCBjYW4gYmUgdXNlZCB0byBTU0ggdG8gdGhlIEVDMiBpbnN0YW5jZXMiCiMgICAgIH0KIyBdIAojIAojIAojIElmIHlvdSB3ZXJlIHRvIHNhdmUgdGhlIG91dHB1dCBvZiB0aGUgYWJvdmUgZXhhbXBsZSB0byBhIGZpbGUgbmFtZWQgImV4YW1wbGUtcGFyYW1zLmpzb24iIChhbmQgcHV0IGluCiMgICB2YWxpZCBQYXJhbWV0ZXJWYWx1ZSBlbnRyaWVzKSB0aGVuIHlvdSBjb3VsZDoKIyAKIyAlIGF3cyBjbG91ZGZvcm1hdGlvbiBjcmVhdGUtc3RhY2sgLS1zdGFjay1uYW1lIG15LXRlc3Qtc3RhY2sgLS10ZW1wbGF0ZS1ib2R5IGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9jbG91ZGZvcm1hdGlvbi10ZW1wbGF0ZXMtdXMtZWFzdC0xL0xBTVBfU2luZ2xlX0luc3RhbmNlLnRlbXBsYXRlIC0tcGFyYW1ldGVycyBmaWxlOi8vZXhhbXBsZS1wYXJhbXMuanNvbgojIAojIFNlZSBob3cgZWFzeSB0aGF0IGlzPyBXaXRoIHRoaXMgc2NyaXB0IHlvdSBjYW4gc3RhcnQgdXAgYSBjb21wbGV4IENsb3VkRm9ybWF0aW9uIHN0YWNrIGVhc2lseSwKIyBiZWNhdXNlIGVhY2ggcGFyYW1ldGVyIHRvIHRoZSBzdGFjayBpcyBkZXNjcmliZWQgaW4gZGV0YWlsIGluIHRoZSBvdXRwdXQgb2YgdGhpcyBzY3JpcHQuCiMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgppbXBvcnQgc3lzLCBqc29uLCB5YW1sLCBzZWxlY3QsIGxvZ2dpbmcKCmlmIG5vdCBzZWxlY3Quc2VsZWN0KCBbIHN5cy5zdGRpbiwgXSwgW10sIFtdLCA1IClbIDAgXToJCSMgQ2hlY2sgZm9yIGRhdGEsIHdhaXRpbmcgNSBzZWMuIG1heAoJcHJpbnQoICJFcnJvcjogVGhpcyBwcm9ncmFtIGV4cGVjdHMgYSBDbG91ZEZvcm1hdGlvbiBKU09OIG9yIFlBTUwgVGVtcGxhdGUgb24gU1RESU4uIChGb3IgZXhhbXBsZSwgdmlhIGEgcGlwZS4pIiApCglzeXMuZXhpdCggMSApCgpwYXJhbWV0ZXJzID0gW10Kb3V0cHV0X2pzb24gPSBbXQppc19qc29uID0gRmFsc2UKaXNfeWFtbCA9IEZhbHNlCgoKIyBEbyB3ZSBnZXQgZGF0YSBpbiBTVERJTj8KdHJ5OgoJaW5wdXRfc3RkaW4gPSBzeXMuc3RkaW4ucmVhZCgpCmV4Y2VwdDoKCXByaW50KCAiRXJyb3I6IFRoaXMgcHJvZ3JhbSBleHBlY3RzIGEgQ2xvdWRGb3JtYXRpb24gSlNPTiBvciBZQU1MIFRlbXBsYXRlIG9uIFNURElOLiAoRm9yIGV4YW1wbGUsIHZpYSBhIHBpcGUuKSIgKQoJc3lzLmV4aXQoIDEgKQo8fGZpbV9ob2xlfD4KCWlucHV0X2xvYWRlZCA9IGpzb24ubG9hZHMoIGlucHV0X3N0ZGluICkKCWlzX2pzb24gPSBUcnVlCmV4Y2VwdCBFeGNlcHRpb246Cglsb2dnaW5nLmRlYnVnKCAiSW5wdXQgaXMgbm90IEpTT04uIiApCgoKIyBJcyBpdCBZQU1MPyBOT1RFOiB1c2luZyAic2FmZV9sb2FkKCkiIHdoaWNoIGlzIGEgYmVzdCBwcmFjdGljZSEKaWYgbm90IGlzX2pzb246Cgl0cnk6CgkJaW5wdXRfbG9hZGVkID0geWFtbC5zYWZlX2xvYWQoIGlucHV0X3N0ZGluICkKCQlpc195YW1sID0gVHJ1ZQoJZXhjZXB0IEV4Y2VwdGlvbjoKCQlsb2dnaW5nLmRlYnVnKCAiSW5wdXQgaXMgbm90IFlBTUwuIiApCgppZiBub3QgaXNfanNvbiBhbmQgbm90IGlzX3lhbWw6CglwcmludCggIkVycm9yOiBUaGlzIHByb2dyYW0gZXhwZWN0cyBhIENsb3VkRm9ybWF0aW9uIEpTT04gb3IgWUFNTCBUZW1wbGF0ZSBvbiBTVERJTi4gKEZvciBleGFtcGxlLCB2aWEgYSBwaXBlLikiICkKCXN5cy5leGl0KCAxICkKCnRyeToKCWlucHV0X3BhcmFtZXRlcnMgPSBpbnB1dF9sb2FkZWRbICdQYXJhbWV0ZXJzJyBdCmV4Y2VwdDoKCXByaW50KCAnRXJyb3I6IERpZCBub3QgZmluZCBhICJQYXJhbWV0ZXJzJyArICggJyI6JywgJzoiJyApWyBpc195YW1sIF0gKyAnIHNlY3Rpb24gaW4gdGhlICcgKyAoICdKU09OJywgJ1lBTUwnIClbIGlzX3lhbWwgXSArICcgaW5wdXQhJyApCglwcmludCggJ01ha2Ugc3VyZSB5b3UgYXJlIHNlbmRpbmcgYSBDbG91ZEZvcm1hdGlvbiBUZW1wbGF0ZSBpbnRvIHRoaXMgc2NyaXB0LiBJZiB5b3UgYXJlLCBjaGVjayB5b3VyICcgKyAoICdKU09OJywgJ1lBTUwnIClbIGlzX3lhbWwgXSArICcgc3ludGF4LicgKQoJcHJpbnQoICJJZiB5b3VyIENGIFRlbXBsYXRlIGRvZXNuJ3QgaGF2ZSBQYXJhbWV0ZXJzLCB0aGVuIHlvdSBkb24ndCBuZWVkIHRvIHVzZSB0aGlzIHNjcmlwdCEiICkKCXN5cy5leGl0KCAxICkKCgpwYXJhbWV0ZXJzID0gbGlzdCggaW5wdXRfcGFyYW1ldGVycyApCnBhcmFtZXRlcnMuc29ydCgpCgpmb3IgcGFyYW1ldGVyIGluIHBhcmFtZXRlcnM6Cgl0aGlzX3BhcmFtID0ge30KCXRoaXNfcGFyYW1bICdQYXJhbWV0ZXJLZXknIF0gPSBwYXJhbWV0ZXIKCgl0aGlzX3BhcmFtZXRlcnZhbHVlX2xpc3QgPSBbXQoJdGhpc19wYXJhbWV0ZXJ2YWx1ZV9saXN0LmFwcGVuZCggIlJFUExBQ0UgVEhJUyBXSVRIOiAiICkJIyBXZSB3aWxsIGJlIGFwcGVuZGluZyB0byB0aGlzIHN0cmluZyB3aXRoIHRoZSBhZGRpdGlvbmFsIHN0dWZmIGJlbG93CgoJaWYgJ1R5cGUnIGluIGlucHV0X3BhcmFtZXRlcnNbIHBhcmFtZXRlciBdOgoJCXRoaXNfcGFyYW1ldGVydmFsdWVfbGlzdC5hcHBlbmQoIHN0ciggaW5wdXRfcGFyYW1ldGVyc1sgcGFyYW1ldGVyIF1bICdUeXBlJyBdICkgKyAiIC0gIiApCgoJaWYgJ0RlZmF1bHQnIGluIGlucHV0X3BhcmFtZXRlcnNbIHBhcmFtZXRlciBdOgoJCXRoaXNfcGFyYW1ldGVydmFsdWVfbGlzdC5hcHBlbmQoICdEZWZhdWx0OlwnJyArIHN0ciggaW5wdXRfcGFyYW1ldGVyc1sgcGFyYW1ldGVyIF1bICdEZWZhdWx0JyBdICkgKyAiXCcgLSAiICkKCglpZiAnQWxsb3dlZFZhbHVlcycgaW4gaW5wdXRfcGFyYW1ldGVyc1sgcGFyYW1ldGVyIF06CgkJdGhpc19wYXJhbWV0ZXJ2YWx1ZV9saXN0LmFwcGVuZCggJ0FsbG93ZWQ6WycgKyAnLCAnLmpvaW4oIHN0ciggeCApIGZvciB4IGluIGlucHV0X3BhcmFtZXRlcnNbIHBhcmFtZXRlciBdWyAnQWxsb3dlZFZhbHVlcycgXSApICsgJ10gLSAnICkKCglpZiAnRGVzY3JpcHRpb24nIGluIGlucHV0X3BhcmFtZXRlcnNbIHBhcmFtZXRlciBdOgoJCXRoaXNfcGFyYW1ldGVydmFsdWVfbGlzdC5hcHBlbmQoIHN0ciggaW5wdXRfcGFyYW1ldGVyc1sgcGFyYW1ldGVyIF1bICdEZXNjcmlwdGlvbicgXSApICkKCgl0aGlzX3BhcmFtWyAnUGFyYW1ldGVyVmFsdWUnIF0gPSAnJy5qb2luKCB0aGlzX3BhcmFtZXRlcnZhbHVlX2xpc3QgKQoJb3V0cHV0X2pzb24uYXBwZW5kKCB0aGlzX3BhcmFtICkKCnByaW50KCBqc29uLmR1bXBzKCBvdXRwdXRfanNvbiwgc29ydF9rZXlzID0gVHJ1ZSwgaW5kZW50ID0gNCApICkKPHxmaW1fc3VmZml4fD4KCgojIElzIGl0IEpTT04/IElmIG5vdCwgbW92ZSBvbi4KdHJ5Ogo8fGZpbV9lbmR8Pg=="]
["5cc14974433255f03f8aa89cab2954ea14391157-1","5cc14974433255f03f8aa89cab2954ea14391157","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdApmcm9tIGtlcmFzX2NvbnRyaWIudXRpbHMudGVzdF91dGlscyBpbXBvcnQgbGF5ZXJfdGVzdApmcm9tIGtlcmFzX2NvbnRyaWIubGF5ZXJzIGltcG9ydCBhZHZhbmNlZF9hY3RpdmF0aW9ucwoKCmRlZiB0ZXN0X3BlbHUoKToKICAgIGxheWVyX3Rlc3QoYWR2YW5jZWRfYWN0aXZhdGlvbnMuUEVMVSwga3dhcmdzPXt9LAogICAgICAgICAgICAgICBpbnB1dF9zaGFwZT0oMiwgMywgNCkpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpkZWYgdGVzdF9wZWx1X3NoYXJlKCk6CiAgICBsYXllcl90ZXN0KGFkdmFuY2VkX2FjdGl2YXRpb25zLlBFTFUsIGt3YXJncz17J3NoYXJlZF9heGVzJzogMX0sCiAgICAgICAgICAgICAgIGlucHV0X3NoYXBlPSgyLCAzLCA0KSkKPHxmaW1fZW5kfD4="]
["74672d3dba585bab15955ecd9ad3743acc3c7e08-4","74672d3dba585bab15955ecd9ad3743acc3c7e08","PHxmaW1fcHJlZml4fD4KCmltcG9ydCB0aHJlYWRpbmcKaW1wb3J0IGxvZ2dpbmcgYXMgbG9nCmltcG9ydCBvcwppbXBvcnQgcGxhdGZvcm0KZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMgaW1wb3J0IFByb2Nlc3NQb29sRXhlY3V0b3IKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCmZyb20gc2h1dGlsIGltcG9ydCBjb3B5ZmlsZSwgcm10cmVlCmZyb20gc3VicHJvY2VzcyBpbXBvcnQgREVWTlVMTCwgU1RET1VULCBjaGVja19vdXRwdXQKZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKCmZyb20gdW5pcGFja2VyLmNvcmUgaW1wb3J0IFNhbXBsZSwgVW5wYWNrZXJFbmdpbmUsIFNpbXBsZUNsaWVudApmcm9tIHVuaXBhY2tlci51bnBhY2tlcnMgaW1wb3J0IEF1dG9tYXRpY0RlZmF1bHRVbnBhY2tlciwgZ2V0X3VucGFja2VyCgpmcm9tIGp2ZC5yZXNvdXJjZXMgaW1wb3J0IFJlc291cmNlQWJzdHJhY3QsIHJlcXVpcmUKZnJvbSBqdmQudXRpbHMgaW1wb3J0IEpWU2FtcGxlLCBnZXRfZmlsZV90eXBlLCBncmVwX2V4dCwgcmVkaXJlY3Rfc3RkLCBjaGVja19vdXRwdXRfY3R4CmltcG9ydCB0aW1lCmltcG9ydCB0cmFjZWJhY2sKCgpjbGFzcyBVbnBhY2tlcjoKICAgIHByaW9yaXR5ID0gMTAKICAgIHRpbWVvdXQgPSAzICogNjAKCiAgICBkZWYgdW5wYWNrX2lmX2FwcGxpY2FibGUoCiAgICAgICAgICAgIHNlbGYsIHNhbXBsZTogSlZTYW1wbGUsIGlucGxhY2U9VHJ1ZSkgLT4gTGlzdFtKVlNhbXBsZV06CiAgICAgICAgcGFzcwoKCmNsYXNzIFA3emlwKFJlc291cmNlQWJzdHJhY3QsIFVucGFja2VyKToKICAgIHRpbWVvdXQgPSBOb25lICAjIGlnbm9yZSB0aW1lb3V0IGZvciBhcmNoaXZlIGZpbGUKICAgIHByaW9yaXR5ID0gMAogICAgc3VwcG9ydGVkID0gKAogICAgICAgICc3eicsICc3LXppcCcsICdhY2UnLCAnYWRmJywgJ2FsemlwJywgJ2FwZScsICdhcicsICdhcmMnLCAnYXJqJywKICAgICAgICAnYnppcDInLCAnY2FiJywgJ2NobScsICdjb21wcmVzcycsICdjcGlvJywgJ2RlYicsICdkbXMnLAogICAgICAgICdmbGFjJywgJ2d6aXAnLCAnaXNvJywgJ2xyemlwJywgJ2x6aCcsICdsemlwJywgJ2x6bWEnLCAnbHpvcCcsCiAgICAgICAgJ3JwbScsICdyemlwJywgJ3NoYXInLCAnc2huJywgJ3ZoZCcsICd4eicsCiAgICAgICAgJ3ppcCcsICd6b28nLCAnenBhcScsCiAgICAgICAgJ2d6dGFyJywgJ3JhcicKICAgICkKCiAgICBkZWYgY2hlY2tfc3VwcG9ydGVkX2FyY2hpdmUoc2VsZiwgZmlsZV90eXBlKToKICAgICAgICBmb3IgcyBpbiBzZWxmLnN1cHBvcnRlZDoKICAgICAgICAgICAgaWYgZmlsZV90eXBlLmxvd2VyKCkuc3RhcnRzd2l0aChzKToKICAgICAgICAgICAgICAgIHJldHVybiBzCiAgICAgICAgcmV0dXJuIE5vbmUKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5saW51eCA9ICdodHRwczovL2dpdGh1Yi5jb20vamluZmVpaGFuNTcvcDd6aXAvcmVsZWFzZXMvZG93bmxvYWQvdjE3LjAzL2xpbnV4LXA3emlwLnppcCcKICAgICAgICBzZWxmLmRlZmF1bHQgPSAnaHR0cHM6Ly93d3cuNy16aXAub3JnL2EvN3phOTIwLnppcCcKICAgICAgICBzZWxmLmRhcndpbiA9ICdodHRwczovL2dpdGh1Yi5jb20vamluZmVpaGFuNTcvcDd6aXAvcmVsZWFzZXMvZG93bmxvYWQvdjE3LjAzL21hY29zLXA3emlwLnppcCcKICAgICAgICBzZWxmLndpbmRvd3MgPSAnaHR0cHM6Ly93d3cuNy16aXAub3JnL2EvN3oxOTAwLXg2NC5leGUnCiAgICAgICAgc2VsZi5jaGVja191cGRhdGUgPSBGYWxzZQogICAgICAgIHNlbGYud2l0aF9wZXJtaXNzaW9uID0gVHJ1ZQogICAgICAgIHNlbGYudW5wYWNrID0gVHJ1ZQogICAgICAgIHNlbGYueDd6ID0gTm9uZQoKICAgIGRlZiBnZXQoc2VsZik6CiAgICAgICAgX3N5cyA9IHBsYXRmb3JtLnN5c3RlbSgpLmxvd2VyKCkKICAgICAgICB1cmwgPSBnZXRhdHRyKHNlbGYsIF9zeXMpCiAgICAgICAgdXJsID0gc2VsZi5kZWZhdWx0IGlmIG5vdCB1cmwgZWxzZSB1cmwKICAgICAgICBpZiBfc3lzID09ICd3aW5kb3dzJzoKICAgICAgICAgICAgd2luX2V4ZSA9IHNlbGYuX2Rvd25sb2FkKAogICAgICAgICAgICAgICAgc2VsZi53aW5kb3dzLCBzaG93X3Byb2dyZXNzPVRydWUsCiAgICAgICAgICAgICAgICB1bnBhY2tfaWZfbmVlZGVkPUZhbHNlKQogICAgICAgICAgICBkZWZfZXhlID0gc2VsZi5fZG93bmxvYWQoCiAgICAgICAgICAgICAgICBzZWxmLmRlZmF1bHQsIHNob3dfcHJvZ3Jlc3M9VHJ1ZSwKICAgICAgICAgICAgICAgIHVucGFja19pZl9uZWVkZWQ9VHJ1ZSkKICAgICAgICAgICAgdW5wYWNrZWQgPSB3aW5fZXhlICsgJ191bnBhY2tlZCcKICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHVucGFja2VkKToKICAgICAgICAgICAgICAgIGNoZWNrX291dHB1dChbCiAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGRlZl9leGUsICc3emEnKSwgJ3gnLCB3aW5fZXhlLCAnLW8nICsKICAgICAgICAgICAgICAgICAgICB1bnBhY2tlZAogICAgICAgICAgICAgICAgXSwgc3RkZXJyPVNURE9VVCkKICAgICAgICAgICAgYmluYXJ5ID0gdW5wYWNrZWQKICAgICAgICBlbHNlOgogICAgICAgICAgICBiaW5hcnkgPSBzZWxmLl9kb3dubG9hZCgKICAgICAgICAgICAgICAgIHVybCwgc2hvd19wcm9ncmVzcz1UcnVlLAogICAgICAgICAgICAgICAgdW5wYWNrX2lmX25lZWRlZD1UcnVlKQoKICAgICAgICBjbWQgPSB7J3dpbmRvd3MnOiBbb3MucGF0aC5qb2luKGJpbmFyeSwgJzd6JyksICd4J10sCiAgICAgICAgICAgICAgICdsaW51eCc6IFtvcy5wYXRoLmpvaW4oYmluYXJ5LCAgJzd6JyksICd4J10sCiAgICAgICAgICAgICAgICdkYXJ3aW4nOiBbb3MucGF0aC5qb2luKGJpbmFyeSwgICc3eicpLCAneCddCiAgICAgICAgICAgICAgIH1bcGxhdGZvcm0uc3lzdGVtKCkubG93ZXIoKV0KCiAgICAgICAgcmV0dXJuIGNtZAoKICAgIGRlZiB1bnBhY2tfaWZfYXBwbGljYWJsZSgKICAgICAgICAgICAgc2VsZiwgc2FtcGxlOiBKVlNhbXBsZSwgaW5wbGFjZT1UcnVlKToKICAgICAgICBwYWNrZXIgPSBzZWxmLmNoZWNrX3N1cHBvcnRlZF9hcmNoaXZlKHNhbXBsZS5maWxlX3R5cGUpCiAgICAgICAgaWYgcGFja2VyOiAgIyBhbmQgcGFja2VyIG5vdCBpbiBzYW1wbGUucGFja2VyczoKICAgICAgICAgICAgaWYgbm90IHNlbGYueDd6OgogICAgICAgICAgICAgICAgc2VsZi54N3ogPSByZXF1aXJlKCdwN3ppcCcpCiAgICAgICAgICAgIHVucGFja19kaXIgPSBzYW1wbGUuZmlsZSArICdfdW5wYWNrJwogICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModW5wYWNrX2Rpcik6CiAgICAgICAgICAgICAgICBjbWQgPSBbKnNlbGYueDd6LCBzYW1wbGUuZmlsZSwgJy1vJyArIHVucGFja19kaXJdCiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgd2l0aCBjaGVja19vdXRwdXRfY3R4KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kLCB0aW1lb3V0PXNlbGYudGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPURFVk5VTEwpIGFzIG91dF9saW5lczoKICAgICAgICAgICAgICAgICAgICAgICAgb3V0X2xpbmVzID0gb3V0X2xpbmVzLmRlY29kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc2NpaScsICdpZ25vcmUnKS5zcGxpdGxpbmVzKCkKICAgICAgICAgICAgICAgIGV4Y2VwdDoKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIHNhbXBsZS5hZGRfcGFja2VyKHBhY2tlcikKICAgICAgICAgICAgZmlsZXM6IExpc3RbUGF0aF0gPSBsaXN0KFBhdGgodW5wYWNrX2Rpcikucmdsb2IoIiouKiIpKQogICAgICAgICAgICBmaWxlcyA9IFtzdHIoZikgZm9yIGYgaW4gZmlsZXMgaWYgZi5pc19maWxlKCldCiAgICAgICAgICAgIGlmIGlucGxhY2U6CiAgICAgICAgICAgICAgICBmaWxlcyA9IFtmIGZvciBmIGluIGZpbGVzIGlmIHN0cihmKS5sb3dlcigpLmVuZHN3aXRoKCgnLmV4ZScsICcuZGxsJywgJy5wZGYnKSldCiAgICAgICAgICAgICAgICBpZiBsZW4oZmlsZXMpICE9IDE6CiAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHModW5wYWNrX2Rpcik6CiAgICAgICAgICAgICAgICAgICAgICAgIHJtdHJlZSh1bnBhY2tfZGlyLCBUcnVlKQogICAgICAgICAgICAgICAgICAgIHJldHVybiBbc2FtcGxlXQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBzYW1wbGUucmVwbGFjZShmaWxlc1swXSkKICAgICAgICAgICAgICAgICAgICBybXRyZWUodW5wYWNrX2RpciwgVHJ1ZSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3NhbXBsZV0KICAgICAgICAgICAgc2FtcGxlcyA9IFtKVlNhbXBsZShmKSBmb3IgZiBpbiBmaWxlc10KICAgICAgICAgICAgZm9yIHMgaW4gc2FtcGxlczoKICAgICAgICAgICAgICAgIHMuc2F2ZSgpCiAgICAgICAgICAgIHJldHVybiBzYW1wbGVzCiAgICAgICAgcmV0dXJuIFtzYW1wbGVdCgoKY2xhc3MgVW5UYXIoUDd6aXApOgogICAgcHJpb3JpdHkgPSAxCiAgICBzdXBwb3J0ZWQgPSAoJ3RhcicsKQoKCmNsYXNzIFVQWChSZXNvdXJjZUFic3RyYWN0LCBVbnBhY2tlcik6CiAgICBwcmlvcml0eSA9IDEwCgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYubGludXggPSAnaHR0cHM6Ly9naXRodWIuY29tL3VweC91cHgvcmVsZWFzZXMvZG93bmxvYWQvdjMuOTYvdXB4LTMuOTYtYW1kNjRfbGludXgudGFyLnh6JwogICAgICAgIHNlbGYuZGVmYXVsdCA9IHNlbGYubGludXgKICAgICAgICBzZWxmLndpbmRvd3MgPSAnaHR0cHM6Ly9naXRodWIuY29tL3VweC91cHgvcmVsZWFzZXMvZG93bmxvYWQvdjMuOTYvdXB4LTMuOTYtd2luNjQuemlwJwogICAgICAgIHNlbGYuY2hlY2tfdXBkYXRlID0gRmFsc2UKICAgICAgICBzZWxmLnVucGFjayA9IFRydWUKICAgICAgICBzZWxmLnVweF9jID0gTm9uZQoKICAgIGRlZiBnZXQoc2VsZik6CiAgICAgICAgdXB4X2RpciA9IHN1cGVyKCkuZ2V0KCkKICAgICAgICByZXR1cm4geyd3aW5kb3dzJzogb3MucGF0aC5qb2luKHVweF9kaXIsICd1cHgtMy45Ni13aW42NCcsICd1cHgnKSwKICAgICAgICAgICAgICAgICdsaW51eCc6IG9zLnBhdGguam9pbih1cHhfZGlyLCAndXB4LTMuOTYtYW1kNjRfbGludXgnLCAndXB4JyksCiAgICAgICAgICAgICAgICAjICAgICdkYXJ3aW4nOiBbb3MucGF0aC5qb2luKHVweF9kaXIsICAndXB4JyksICd4J10KICAgICAgICAgICAgICAgIH1bcGxhdGZvcm0uc3lzdGVtKCkubG93ZXIoKV0KCiAgICBkZWYgY2hlY2tfdXB4KHNlbGYsIGZpbGUpOgogICAgICAgIGlmIG5vdCBzZWxmLnVweF9jOgogICAgICAgICAgICBzZWxmLnVweF9jID0gcmVxdWlyZSgndXB4JykKICAgICAgICAjIHVweF90ZXN0ID0gY2hlY2tfb3V0cHV0KFtzZWxmLnVweF9jLCAnLXQnLCBmaWxlXSwgc3RkZXJyPVNURE9VVCkKICAgICAgICAjIHJldHVybiBiJ1tPS10nIGluIHVweF90ZXN0CiAgICAgICAgd2l0aCBjaGVja19vdXRwdXRfY3R4KAogICAgICAgICAgICAgICAgW3NlbGYudXB4X2MsICctdCcsIGZpbGVdLCB0aW1lb3V0PXNlbGYudGltZW91dCkgYXMgdXB4X3Rlc3Q6CiAgICAgICAgICAgIHJldHVybiBiJ1tPS10nIGluIHVweF90ZXN0CgogICAgZGVmIHVucGFja19pZl9hcHBsaWNhYmxlKAogICAgICAgICAgICBzZWxmLCBzYW1wbGU6IEpWU2FtcGxlLCBpbnBsYWNlPVRydWUpOgogICAgICAgIHRyeToKICAgICAgICAgICAgaWYgJ3VweCcgbm90IGluIHNhbXBsZS5wYWNrZXJzIGFuZCBzZWxmLmNoZWNrX3VweChzYW1wbGUuZmlsZSk6CiAgICAgICAgICAgICAgICAjIGRlc3QgPSBzdHIoUGF0aChmaWxlKS53aXRoX3N1ZmZpeCgnJykpICsgJ191cHguYmluJwogICAgICAgICAgICAgICAgZGVzdCA9IHNhbXBsZS5maWxlICsgJ191cHgnCiAgICAgICAgICAgICAgICAjIHVweF9hY3Rpb24gPSBjaGVja19vdXRwdXQoCiAgICAgICAgICAgICAgICAjICAgICBbc2VsZi51cHhfYywgJy1kJywgJy1vJywgZGVzdCwgc2FtcGxlLmZpbGVdLCBzdGRlcnI9U1RET1VUKQogICAgICAgICAgICAgICAgd2l0aCBjaGVja19vdXRwdXRfY3R4KAogICAgICAgICAgICAgICAgICAgICAgICBbc2VsZi51cHhfYywgJy1kJywgJy1vJywgZGVzdCwgc2FtcGxlLmZpbGVdLAogICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PXNlbGYudGltZW91dCkgYXMgdXB4X2FjdGlvbjoKICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkZXN0KSBhbmQgYidVbnBhY2tlZCAxIGZpbGUnIGluIHVweF9hY3Rpb246CiAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZS5hZGRfcGFja2VyKCd1cHgnKQogICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGUucmVwbGFjZShkZXN0KQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3NhbXBsZV0KICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgIHJldHVybiBbc2FtcGxlXQogICAgICAgIHJldHVybiBbc2FtcGxlXQoKCmNsYXNzIFVuaVBhY2tlcihVbnBhY2tlcik6CgogICAgcHJpb3JpdHkgPSAxMQoKICAgIGRlZiB1bnBhY2tfaWZfYXBwbGljYWJsZSgKICAgICAgICAgICAgc2VsZiwgc2FtcGxlOiBKVlNhbXBsZSwgaW5wbGFjZT1UcnVlKToKICAgICAgICBkZXN0ID0gc2FtcGxlLmZpbGUgKyAnX3VuaXBhY2tlcl8nCiAgICAgICAgdW5pX3NhbXBsZSA9IE5vbmUKICAgICAgICBpZiBub3Qgc2FtcGxlLmZpbGVfdHlwZS5sb3dlcigpLnN0YXJ0c3dpdGgoJ3BlJyk6CiAgICAgICAgICAgIHJldHVybiBbc2FtcGxlXQogICAgICAgIHRyeToKICAgICAgICAgICAgd2l0aCByZWRpcmVjdF9zdGQoKToKICAgICAgICAgICAgICAgIHVuaV9zYW1wbGUgPSBTYW1wbGUoCiAgICAgICAgICAgICAgICAgICAgc2FtcGxlLmZpbGUsIFRydWUpCiAgICAgICAgICAgICAgICB1bnBhY2tlciA9IHVuaV9zYW1wbGUudW5wYWNrZXIuX19jbGFzc19fLl9fbmFtZV9fLmxvd2VyKCkucmVwbGFjZSgKICAgICAgICAgICAgICAgICAgICAndW5wYWNrZXInLCAnJykKICAgICAgICAgICAgZGVzdCA9IGRlc3QgKyB1bnBhY2tlcgogICAgICAgICAgICBpZiBub3QgJ2RlZmF1bHQnIGluIHVucGFja2VyIGFuZCBub3QgdW5wYWNrZXIgaW4gc2FtcGxlLnBhY2tlcnM6CiAgICAgICAgICAgICAgICBjbWQgPSBbJ3B5dGhvbicsICctbScsICd1bmlwYWNrZXIuc2hlbGwnLAogICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZS5maWxlLCAnLWQnLCBkZXN0XQogICAgICAgICAgICAgICAgd2l0aCBjaGVja19vdXRwdXRfY3R4KGNtZCwgdGltZW91dD1zZWxmLnRpbWVvdXQpIGFzIHVuaV9sb2c6CiAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZGVzdCk6CiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzID0gb3MubGlzdGRpcihkZXN0KQogICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oZmlsZXMpID09IDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGUucmVwbGFjZShvcy5wYXRoLmpvaW4oZGVzdCwgZmlsZXNbMF0pKQogICAgICAgICAgICAgICAgICAgICAgICBybXRyZWUoZGVzdCkKICAgICAgICAgICAgICAgICAgICBzYW1wbGUuYWRkX3BhY2tlcih1bnBhY2tlcikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3NhbXBsZV0KICAgICAgICAgICAgICAgICAgICAjIGRlc3QgPSBzdHIoUGF0aChmaWxlKS53aXRoX3N1ZmZpeCgnJykpICsgJ191cHguYmluJwogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCiAgICAgICAgICAgIHByaW50KHN0cihlKSkKICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZGVzdCk6CiAgICAgICAgICAgICAgICBybXRyZWUoZGVzdCkKICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAjIGlmIHVuaV9zYW1wbGU6CiAgICAgICAgICAgICMgICAgIHRtcF9maWxlID0gdW5pX3NhbXBsZS51bnBhY2tlci5kdW1wZXIuYnJva2VuaW1wb3J0X2R1bXBfZmlsZQogICAgICAgICAgICAjICAgICBpZiBvcy5wYXRoLmV4aXN0cyh0bXBfZmlsZSk6CiAgICAgICAgICAgICMgICAgICAgICBvcy5yZW1vdmUodG1wX2ZpbGUpCiAgICAgICAgICAgIHBhc3MKCiAgICAgICAgcmV0dXJuIFtzYW1wbGVdCgoKYWxsX3VucGFja2VycyA9IHNvcnRlZCgKICAgIFtjKCkgZm9yIGMgaW4gVW5wYWNrZXIuX19zdWJjbGFzc2VzX18oKV0sIGtleT1sYW1iZGEgeDogeC5wcmlvcml0eSkKCgpkZWYgdW5wYWNrX3NhbXBsZShzYW1wbGU6IEpWU2FtcGxlLCBpbnBsYWNlPVRydWUpOgogICAgc2FtcGxlcyA9IFtzYW1wbGVdCiAgICBmb3IgdXAgaW4gYWxsX3VucGFja2VyczoKICAgICAgICB1cDogVW5wYWNrZXIKICAgICAgICBuZXdfc2FtcGxlcyA9IFtdCgogICAgICAgIGZvciBzIGluIHNhbXBsZXM6CiAgICAgICAgICAgIHIgPSB1cC51bnBhY2tfaWZfYXBwbGljYWJsZShzLCBpbnBsYWNlPWlucGxhY2UpCiAgICAgICAgICAgIG5ld19zYW1wbGVzLmV4dGVuZChyKQogICAgICAgIHNhbXBsZXMgPSBuZXdfc2FtcGxlcwogICAgcmV0dXJuIHNhbXBsZXMKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh1bnBhY2tfZGlyKToKICAgICAgICAgICAgICAgICAgICAgICAgcm10cmVlKHVucGFja19kaXIsIFRydWUpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtzYW1wbGVdCjx8ZmltX2VuZHw+"]
["56f971ba81d08a3b806da2cffb7262128d71e246-1","56f971ba81d08a3b806da2cffb7262128d71e246","PHxmaW1fcHJlZml4fD4KZnJvbSBSb2JvdCBpbXBvcnQgUm9ib3QKaW1wb3J0IHN5cywgcHlnYW1lCmNsYXNzIFJvYm90cyhSb2JvdCk6CiAgICAjSW5pY2lhbGl6YW1vcyBlbCBhcnJlZ2xvIGRlIGRlc3Rpb25vcwogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYucm9ib3RzID0gW10KICAgICAgICBzZWxmLnJvYm90ID0gUm9ib3QoKQoKICAgICNGdW5jdWluIHBhcmEgYWdyZWdhciBkZXN0aW9ub3MKICAgIGRlZiBhZGRfcm9ib3Qoc2VsZixSb2JvdCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLnJvYm90cy5hcHBlbmQoUm9ib3QpCjx8ZmltX2VuZHw+"]
["7a40a67a69fe6a04adc6bf4cf29624e761099006-1","7a40a67a69fe6a04adc6bf4cf29624e761099006","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0cmltZXNoCmltcG9ydCBweXJlbmRlcgpmcm9tIHB5cmVuZGVyLmNvbnN0YW50cyBpbXBvcnQgUmVuZGVyRmxhZ3MKZnJvbSBweXJlbmRlci5saWdodCBpbXBvcnQgRGlyZWN0aW9uYWxMaWdodApmcm9tIHB5cmVuZGVyLm5vZGUgaW1wb3J0IE5vZGUKaW1wb3J0IGN2Mgpmcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5CgppbXBvcnQgb3MKb3MuZW52aXJvblsiUFlPUEVOR0xfUExBVEZPUk0iXSA9ICJlZ2wiCgoKZGVmIGdldF9tZXNoKHZlcnRzLCBmYWNlcyk6CiAgICB2ZXJ0X2NvbG9ycyA9IG5wLnRpbGUoWzEyOCwgMTI4LCAxMjhdLCAodmVydHMuc2hhcGVbMF0sIDEpKQogICAgbWVzaCA9IHRyaW1lc2guVHJpbWVzaCgKICAgICAgICB2ZXJ0aWNlcz12ZXJ0cywKICAgICAgICBmYWNlcz1mYWNlcywKICAgICAgICB2ZXJ0ZXhfY29sb3JzPXZlcnRfY29sb3JzLAogICAgICAgIHByb2Nlc3M9RmFsc2UKICAgICkKICAgIHJldHVybiBtZXNoCgoKZGVmIGdldF9jdWJlKHBzLCBzPTAuMTUpOgogICAgZGlmZnMgPSBucC5hcnJheShbCiAgICAgICAgWy0xLCAtMSwgLTEsIC0xLCAxLCAxLCAxLCAxXSwKICAgICAgICBbLTEsIC0xLCAxLCAxLCAtMSwgLTEsIDEsIDFdLAogICAgICAgIFstMSwgMSwgLTEsIDEsIC0xLCAxLCAtMSwgMV0KICAgIF0sIGR0eXBlPW5wLmZsb2F0MzIpICogcwoKICAgIHBzID0gcHMucmVzaGFwZSgtMSwgMykKICAgIHJlc3VsdCA9IFtdCiAgICBmb3IgcCBpbiBwczoKICAgICAgICByZXN1bHQuYXBwZW5kKChkaWZmcyArIHAucmVzaGFwZSgzLCAtMSkpLlQpCjx8ZmltX2hvbGV8PgpkZWYgZ2V0X2Jib3gocG9pbnRzKToKICAgIGxlZnQgPSBucC5taW4ocG9pbnRzWzosIDBdKQogICAgcmlnaHQgPSBucC5tYXgocG9pbnRzWzosIDBdKQogICAgdG9wID0gbnAubWluKHBvaW50c1s6LCAxXSkKICAgIGJvdHRvbSA9IG5wLm1heChwb2ludHNbOiwgMV0pCiAgICBoID0gYm90dG9tIC0gdG9wCiAgICB3ID0gcmlnaHQgLSBsZWZ0CiAgICBpZiBoID4gdzoKICAgICAgICBjeCA9IChsZWZ0ICsgcmlnaHQpIC8gMgogICAgICAgIGxlZnQgPSBjeCAtIGggLyAyCiAgICAgICAgcmlnaHQgPSBsZWZ0ICsgaAogICAgZWxzZToKICAgICAgICBjeSA9IChib3R0b20gKyB0b3ApIC8gMgogICAgICAgIHRvcCA9IGN5IC0gdyAvIDIKICAgICAgICBib3R0b20gPSB0b3AgKyB3CiAgICByZXR1cm4gbGVmdCwgdG9wLCByaWdodCwgYm90dG9tCgoKY2xhc3MgUHlyZW5kZXJlcjoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpc19zaGFkaW5nPVRydWUsIGRfbGlnaHQ9My4sIHNjYWxlPU5vbmUpOgogICAgICAgIHNlbGYuaXNfc2hhZGluZyA9IGlzX3NoYWRpbmcKICAgICAgICBzZWxmLmxpZ2h0ID0gKC4zLCAuMywgLjMpIGlmIHNlbGYuaXNfc2hhZGluZyBlbHNlICgxLiwgMS4sIDEuKQoKICAgICAgICBzZWxmLnNjZW5lID0gcHlyZW5kZXIuU2NlbmUoYmdfY29sb3I9WzI1NSwgMjU1LCAyNTVdLCBhbWJpZW50X2xpZ2h0PXNlbGYubGlnaHQpCgogICAgICAgIHNlbGYuc2l6ZSA9IE5vbmUKICAgICAgICBzZWxmLnZpZXdlciA9IE5vbmUKCiAgICAgICAgc2VsZi5UID0gTm9uZQogICAgICAgIHNlbGYuS19ub19zY2FsZSA9IE5vbmUKICAgICAgICBzZWxmLksgPSBOb25lCiAgICAgICAgc2VsZi5jYW1lcmEgPSBOb25lCiAgICAgICAgc2VsZi5jYW1lcmFfbm9kZSA9IE5vbmUKCiAgICAgICAgc2VsZi5kX2xpZ2h0ID0gZF9saWdodAogICAgICAgIHNlbGYubGlnaHRfbm9kZXMgPSBOb25lCgogICAgICAgIHNlbGYuc2NhbGUgPSBzY2FsZQoKICAgIGRlZiBhZGRfcmF5bW9uZF9saWdodChzZWxmLCBzPTEsIGQ9MC4yNSwgVD1ucC5leWUoNCkpOgogICAgICAgIHRoZXRhcyA9IG5wLnBpICogbnAuYXJyYXkoWzEuMCAvIDYuMCwgMS4wIC8gNi4wLCAxLjAgLyA2LjBdKQogICAgICAgIHBoaXMgPSBucC5waSAqIG5wLmFycmF5KFswLjAsIDIuMCAvIDMuMCwgNC4wIC8gMy4wXSkKICAgICAgICBub2RlcyA9IFtdCiAgICAgICAgZm9yIHBoaSwgdGhldGEgaW4gemlwKHBoaXMsIHRoZXRhcyk6CiAgICAgICAgICAgIHhwID0gcyAqIG5wLnNpbih0aGV0YSkgKiBucC5jb3MocGhpKQogICAgICAgICAgICB5cCA9IHMgKiBucC5zaW4odGhldGEpICogbnAuc2luKHBoaSkKICAgICAgICAgICAgenAgPSBzICogbnAuY29zKHRoZXRhKQoKICAgICAgICAgICAgeiA9IG5wLmFycmF5KFt4cCwgeXAsIHpwXSkKICAgICAgICAgICAgeiA9IHogLyBucC5saW5hbGcubm9ybSh6KQogICAgICAgICAgICB4ID0gbnAuYXJyYXkoWy16WzFdLCB6WzBdLCAwLjBdKQogICAgICAgICAgICBpZiBucC5saW5hbGcubm9ybSh4KSA9PSAwOgogICAgICAgICAgICAgICAgeCA9IG5wLmFycmF5KFsxLjAsIDAuMCwgMC4wXSkKICAgICAgICAgICAgeCA9IHggLyBucC5saW5hbGcubm9ybSh4KQogICAgICAgICAgICB5ID0gbnAuY3Jvc3MoeiwgeCkKCiAgICAgICAgICAgIG1hdHJpeCA9IG5wLmV5ZSg0KQogICAgICAgICAgICBtYXRyaXhbOjMsIDozXSA9IG5wLmNfW3gsIHksIHpdCgogICAgICAgICAgICBUbCA9IG5wLmNvcHkoVCkKCiAgICAgICAgICAgIG1hdHJpeCA9IG1hdHJpeCBAIFRsCgogICAgICAgICAgICBub2Rlcy5hcHBlbmQoTm9kZSgKICAgICAgICAgICAgICAgIGxpZ2h0PURpcmVjdGlvbmFsTGlnaHQoY29sb3I9bnAub25lcygzKSwgaW50ZW5zaXR5PTEuMCAvIGQpLAogICAgICAgICAgICAgICAgbWF0cml4PW1hdHJpeAogICAgICAgICAgICApKQogICAgICAgIHJldHVybiBub2RlcwoKICAgIGRlZiB1c2VfcmF5bW9uZF9saWdodGluZyhzZWxmLCBpbnRlbnNpdHk9NS4wLCBkPTMuMCwgVD1ucC5leWUoNCkpOgogICAgICAgIGlmIHNlbGYubGlnaHRfbm9kZXMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIGZvciBuIGluIHNlbGYubGlnaHRfbm9kZXM6CiAgICAgICAgICAgICAgICBzZWxmLnNjZW5lLnJlbW92ZV9ub2RlKG4pCgogICAgICAgIHNlbGYubGlnaHRfbm9kZXMgPSBzZWxmLmFkZF9yYXltb25kX2xpZ2h0KFQ9VCkKICAgICAgICBmb3IgbiBpbiBzZWxmLmxpZ2h0X25vZGVzOgogICAgICAgICAgICBuLmxpZ2h0LmludGVuc2l0eSA9IGludGVuc2l0eSAvIGQKICAgICAgICAgICAgc2VsZi5zY2VuZS5hZGRfbm9kZShuKQoKICAgIGRlZiBzZXRfaW50cmluc2ljcyhzZWxmLCBzaXplLCBLLCBzY2FsZT1Ob25lLCB6bmVhcj0wLjEsIHpmYXI9MTAsIHJ2ZWM9Tm9uZSk6CiAgICAgICAgc2VsZi5LX25vX3NjYWxlID0gZGVlcGNvcHkoSykKICAgICAgICBzZWxmLksgPSBkZWVwY29weShLKQogICAgICAgIGlmIHNjYWxlIGlzIG5vdCBOb25lOgogICAgICAgICAgICBzZWxmLktbOjJdICo9IHNjYWxlCiAgICAgICAgc2VsZi5jYW1lcmEgPSBweXJlbmRlci5JbnRyaW5zaWNzQ2FtZXJhKAogICAgICAgICAgICBmeD1zZWxmLktbMCwgMF0sIGZ5PXNlbGYuS1sxLCAxXSwKICAgICAgICAgICAgY3g9c2VsZi5LWzAsIDJdLCBjeT1zZWxmLktbMSwgMl0sCiAgICAgICAgICAgIHpuZWFyPXpuZWFyLCB6ZmFyPXpmYXIKICAgICAgICApCiAgICAgICAgaWYgc2VsZi5jYW1lcmFfbm9kZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgc2VsZi5zY2VuZS5yZW1vdmVfbm9kZShzZWxmLmNhbWVyYV9ub2RlKQogICAgICAgIHNlbGYuVCA9IG5wLmV5ZSg0KQogICAgICAgIGlmIHJ2ZWMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHJvdG10eCA9IGN2Mi5Sb2RyaWd1ZXMobnAuYXJyYXkocnZlYykpWzBdCiAgICAgICAgICAgIHNlbGYuVFs6MywgOjNdID0gcm90bXR4CiAgICAgICAgc2VsZi5jYW1lcmFfbm9kZSA9IHNlbGYuc2NlbmUuYWRkKHNlbGYuY2FtZXJhLCBwb3NlPXNlbGYuVCwgbmFtZT0ncGMtY2FtZXJhJykKCiAgICAgICAgc2VsZi5zaXplID0gZGVlcGNvcHkoc2l6ZSkKICAgICAgICBpZiBzY2FsZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgZm9yIGsgaW4gc2VsZi5zaXplOgogICAgICAgICAgICAgICAgc2VsZi5zaXplW2tdICo9IHNjYWxlCiAgICAgICAgc2VsZi52aWV3ZXIgPSBweXJlbmRlci5PZmZzY3JlZW5SZW5kZXJlcihzZWxmLnNpemVbJ3cnXSwgc2VsZi5zaXplWydoJ10pCgogICAgZGVmIHByb2plY3Qoc2VsZiwgdmVydHMsIHNjYWxlPVRydWUpOgogICAgICAgIEsgPSBzZWxmLksgaWYgc2NhbGUgZWxzZSBzZWxmLktfbm9fc2NhbGUKICAgICAgICB2ZXJ0c18yZCA9IHZlcnRzIEAgSy5UCiAgICAgICAgdmVydHNfMmQgPSB2ZXJ0c18yZFs6LCA6Ml0gLyB2ZXJ0c18yZFs6LCBbMl1dCiAgICAgICAgcmV0dXJuIHZlcnRzXzJkCgogICAgZGVmIGdldF9iYm94KHNlbGYsIHZlcnRzLCB2ZXJ0c19maWx0ZXI9Tm9uZSwgc2NhbGU9VHJ1ZSwgcz0uMTUpOgogICAgICAgIEsgPSBzZWxmLksgaWYgc2NhbGUgZWxzZSBzZWxmLktfbm9fc2NhbGUKICAgICAgICAjIHZlcnRzID0gdmVydHMgQCBzZWxmLlRbOjMsIDozXS5UCiAgICAgICAgaWYgdmVydHNfZmlsdGVyIGlzIG5vdCBOb25lOgogICAgICAgICAgICB2ZXJ0cyA9IHZlcnRzW3ZlcnRzX2ZpbHRlcl0KICAgICAgICB2ZXJ0cyA9IGdldF9jdWJlKHZlcnRzLCBzPXMpCiAgICAgICAgdmVydHNfMmQgPSB2ZXJ0cyBAIEsuVAogICAgICAgIHZlcnRzXzJkID0gdmVydHNfMmRbOiwgOjJdIC8gdmVydHNfMmRbOiwgWzJdXQogICAgICAgIGJib3ggPSBnZXRfYmJveCh2ZXJ0c18yZCkKICAgICAgICByZXR1cm4gYmJveAoKICAgIGRlZiByZW5kZXIoc2VsZiwgdmVydHMsIGZhY2VzKToKICAgICAgICBmb3Igbm9kZSBpbiBzZWxmLnNjZW5lLmdldF9ub2RlcygpOgogICAgICAgICAgICBpZiBub2RlLm5hbWUgaXMgbm90IE5vbmUgYW5kICdkeW5hbWljLW1lc2gnIGluIG5vZGUubmFtZToKICAgICAgICAgICAgICAgIHNlbGYuc2NlbmUucmVtb3ZlX25vZGUobm9kZSkKICAgICAgICBtZXNoID0gZ2V0X21lc2godmVydHMsIGZhY2VzKQogICAgICAgIG1lc2ggPSBweXJlbmRlci5NZXNoLmZyb21fdHJpbWVzaChtZXNoKQogICAgICAgIHNlbGYuc2NlbmUuYWRkKG1lc2gsICdkeW5hbWljLW1lc2gtMCcpCgogICAgICAgIGlmIHNlbGYuaXNfc2hhZGluZzoKICAgICAgICAgICAgc2VsZi51c2VfcmF5bW9uZF9saWdodGluZyhUPXNlbGYuVCwgZD1zZWxmLmRfbGlnaHQpCgogICAgICAgIGZsYWdzID0gUmVuZGVyRmxhZ3MuUkdCQQogICAgICAgIGlmIHNlbGYuaXNfc2hhZGluZzoKICAgICAgICAgICAgZmxhZ3MgPSBSZW5kZXJGbGFncy5TSEFET1dTX0RJUkVDVElPTkFMIHwgUmVuZGVyRmxhZ3MuUkdCQQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGZsYWdzID0gUmVuZGVyRmxhZ3MuRkxBVCB8IGZsYWdzCgogICAgICAgIGNvbG9yX2ltZywgZGVwdGhfaW1nID0gc2VsZi52aWV3ZXIucmVuZGVyKHNlbGYuc2NlbmUsIGZsYWdzPWZsYWdzKQoKICAgICAgICByZXR1cm4gY29sb3JfaW1nCjx8ZmltX3N1ZmZpeHw+CiAgICByZXN1bHQgPSBucC5jb25jYXRlbmF0ZShyZXN1bHQpCiAgICByZXR1cm4gcmVzdWx0CgoKPHxmaW1fZW5kfD4="]
["71000024b363cc8cc12fe616ebcbfcce503fa580-4","71000024b363cc8cc12fe616ebcbfcce503fa580","PHxmaW1fcHJlZml4fD4KZnJvbSBzaGFhcGUuc3R5bGVwYXJzZXIgaW1wb3J0IFN0eWxlUGFyc2VyCmZyb20gc2hhYXBlLnN0eWxlIGltcG9ydCBTdHlsZQpmcm9tIHNoYWFwZS5wb2x5Z29uIGltcG9ydCBQb2x5Z29uCmZyb20gc2hhYXBlLm9wZW5ncmFwaCBpbXBvcnQgT3BlbkdyYXBoCmZyb20gc2hhYXBlLmFycm93IGltcG9ydCBBcnJvdwo8fGZpbV9ob2xlfD4KZnJvbSBub3NlLnRvb2xzIGltcG9ydCAqCgpjbGFzcyBUZXN0U3R5bGVQYXJzZXIodW5pdHRlc3QuVGVzdENhc2UpOgoKICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CiAgICAgICAgcGFyc2VyID0gU3R5bGVQYXJzZXIoKQogICAgICAgIGFzc2VydCBwYXJzZXIgIT0gTm9uZQoKICAgIGRlZiB0ZXN0X3J1bihzZWxmKToKICAgICAgICBwYXJzZXIgPSBTdHlsZVBhcnNlcigpCiAgICAgICAgYXJyb3dfc3R5bGUgPSBTdHlsZSgnX2Fycm93XycsICdmaWxsJywgWydyZWQnXSwgMSkKICAgICAgICBmaWxsX3N0eWxlID0gU3R5bGUoJy4qJywgJ2ZpbGwnLCBbJ2JsdWUnXSwgMCkKICAgICAgICBsaW5lX3N0eWxlID0gU3R5bGUoJ19saW5lXycsICdmaWxsJywgWydncmVlbiddLCAyKQogICAgICAgIGZyYW1lX3N0eWxlID0gU3R5bGUoJy4qJywgJ2ZyYW1lJywgW1swLjEsIDAuMiwgMC4zXV0sIDApCiAgICAgICAgY3VzdG9tX2ZpbGxfc3R5bGUgPSBTdHlsZSgnKGFiYyl8KGRlZiknLCAnZmlsbCcsIFtbMC4zLCAwLjIsIDAuM11dLCAzKQogICAgICAgIGN1c3RvbV9saW5lX3N0eWxlID0gU3R5bGUoJ2xpbmUnLCAnZmlsbCcsIFtbMC40LCAwLjMsIDAuM11dLCAzKQogICAgICAgIGN1c3RvbV9mcmFtZV9zdHlsZSA9IFN0eWxlKCcoYWJjKXwoZGVmKScsICdmcmFtZScsIFtbMC41LCAwLjIsIDAuM11dLCAzKQogICAgICAgIHBvbHlnb24xID0gUG9seWdvbihbTm9kZSgwLCAwKV0pCiAgICAgICAgb3BlbmdyYXBoMSA9IE9wZW5HcmFwaCgpCiAgICAgICAgb3BlbmdyYXBoMiA9IE9wZW5HcmFwaCgpCiAgICAgICAgb3BlbmdyYXBoMi5hZGRfbmFtZSgnbGluZScpCiAgICAgICAgYXJyb3cgPSBBcnJvdygpCiAgICAgICAgYmFja2dyb3VuZCA9IEJhY2tncm91bmQoKQogICAgICAgIHBvbHlnb24yID0gUG9seWdvbihbTm9kZSgwLCAwKV0pCiAgICAgICAgcG9seWdvbjIuYWRkX25hbWUoJ2FiYycpCiAgICAgICAgcG9seWdvbjMgPSBQb2x5Z29uKFtOb2RlKDAsIDApXSkKICAgICAgICBwb2x5Z29uMy5hZGRfbmFtZSgnZGVmJykKICAgICAgICAKICAgICAgICBvYmplY3RzID0gW2Fycm93X3N0eWxlLCBmaWxsX3N0eWxlLCBsaW5lX3N0eWxlLCBmcmFtZV9zdHlsZSwgY3VzdG9tX2ZpbGxfc3R5bGUsIGN1c3RvbV9saW5lX3N0eWxlLCBjdXN0b21fZnJhbWVfc3R5bGUsIHBvbHlnb24xLCBwb2x5Z29uMiwgcG9seWdvbjMsIG9wZW5ncmFwaDEsIG9wZW5ncmFwaDIsIGFycm93LCBiYWNrZ3JvdW5kXQogICAgICAgIHBhcnNlci5ydW4oW10sIG9iamVjdHMpCiAgICAgICAgYXNzZXJ0IGFycm93LnN0eWxlKCkuY29sb3IoKSA9PSBhcnJvd19zdHlsZS5jb2xvcigpLCBzdHIoYXJyb3cuc3R5bGUoKS5jb2xvcigpKSArICIgIT0gIiArIHN0cihhcnJvd19zdHlsZS5jb2xvcigpKQogICAgICAgIGFzc2VydCBwb2x5Z29uMS5zdHlsZSgpLmNvbG9yKCkgPT0gZmlsbF9zdHlsZS5jb2xvcigpLCBzdHIocG9seWdvbjEuc3R5bGUoKS5jb2xvcigpKSArICIgIT0gIiArIHN0cihmaWxsX3N0eWxlLmNvbG9yKCkpCiAgICAgICAgYXNzZXJ0IHBvbHlnb24xLmZyYW1lKCkuc3R5bGUoKS5jb2xvcigpID09IGZyYW1lX3N0eWxlLmNvbG9yKCkKICAgICAgICBhc3NlcnQgb3BlbmdyYXBoMS5zdHlsZSgpLmNvbG9yKCkgPT0gbGluZV9zdHlsZS5jb2xvcigpCiAgICAgICAgYXNzZXJ0IG9wZW5ncmFwaDIuc3R5bGUoKS5jb2xvcigpID09IGN1c3RvbV9saW5lX3N0eWxlLmNvbG9yKCkKICAgICAgICBhc3NlcnQgcG9seWdvbjIuc3R5bGUoKS5jb2xvcigpID09IGN1c3RvbV9maWxsX3N0eWxlLmNvbG9yKCkKICAgICAgICBhc3NlcnQgcG9seWdvbjMuc3R5bGUoKS5jb2xvcigpID09IGN1c3RvbV9maWxsX3N0eWxlLmNvbG9yKCkKICAgICAgICBhc3NlcnQgcG9seWdvbjIuZnJhbWUoKS5zdHlsZSgpLmNvbG9yKCkgPT0gY3VzdG9tX2ZyYW1lX3N0eWxlLmNvbG9yKCkKICAgICAgICBhc3NlcnQgcG9seWdvbjMuZnJhbWUoKS5zdHlsZSgpLmNvbG9yKCkgPT0gY3VzdG9tX2ZyYW1lX3N0eWxlLmNvbG9yKCkKCjx8ZmltX3N1ZmZpeHw+CmZyb20gc2hhYXBlLm5vZGUgaW1wb3J0IE5vZGUKZnJvbSBzaGFhcGUuYmFja2dyb3VuZCBpbXBvcnQgQmFja2dyb3VuZAppbXBvcnQgbm9zZQppbXBvcnQgdW5pdHRlc3QKPHxmaW1fZW5kfD4="]
["51c35a57ef5578f6dc18e94f3860fa8eaa6aed8c-4","51c35a57ef5578f6dc18e94f3860fa8eaa6aed8c","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmZyb20gc2VudHJ5LmFwaS5iYXNlIGltcG9ydCBEb2NTZWN0aW9uCmZyb20gc2VudHJ5LmFwaS5iYXNlcy5ncm91cCBpbXBvcnQgR3JvdXBFbmRwb2ludApmcm9tIHNlbnRyeS5hcGkuc2VyaWFsaXplcnMgaW1wb3J0IHNlcmlhbGl6ZQpmcm9tIHNlbnRyeS5hcGkucGFnaW5hdG9yIGltcG9ydCBEYXRlVGltZVBhZ2luYXRvcgpmcm9tIHNlbnRyeS5tb2RlbHMgaW1wb3J0IEV2ZW50LCBHcm91cApmcm9tIHNlbnRyeS51dGlscy5hcGlkb2NzIGltcG9ydCBzY2VuYXJpbywgYXR0YWNoX3NjZW5hcmlvcwoKCkBzY2VuYXJpbygnTGlzdEF2YWlsYWJsZVNhbXBsZXMnKQpkZWYgbGlzdF9hdmFpbGFibGVfc2FtcGxlc19zY2VuYXJpbyhydW5uZXIpOgogICAgZ3JvdXAgPSBHcm91cC5vYmplY3RzLmZpbHRlcihwcm9qZWN0PXJ1bm5lci5kZWZhdWx0X3Byb2plY3QpLmZpcnN0KCkKICAgIHJ1bm5lci5yZXF1ZXN0KAogICAgICAgIG1ldGhvZD0nR0VUJywKICAgICAgICBwYXRoPScvZ3JvdXBzLyVzL2V2ZW50cy8nICUgZ3JvdXAuaWQKICAgICkKCgpjbGFzcyBHcm91cEV2ZW50c0VuZHBvaW50KEdyb3VwRW5kcG9pbnQpOgogICAgZG9jX3NlY3Rpb24gPSBEb2NTZWN0aW9uLkVWRU5UUwoKICAgIEBhdHRhY2hfc2NlbmFyaW9zKFtsaXN0X2F2YWlsYWJsZV9zYW1wbGVzX3NjZW5hcmlvXSkKICAgIGRlZiBnZXQoc2VsZiwgcmVxdWVzdCwgZ3JvdXApOgo8fGZpbV9ob2xlfD4KICAgICAgICBUaGlzIGVuZHBvaW50IGxpc3RzIGFuIGFnZ3JlZ2F0ZSdzIGF2YWlsYWJsZSBzYW1wbGVzLgoKICAgICAgICA6cHBhcmFtIHN0cmluZyBncm91cF9pZDogdGhlIElEIG9mIHRoZSBncm91cCB0byByZXRyaWV2ZS4KICAgICAgICA6YXV0aDogcmVxdWlyZWQKICAgICAgICAiIiIKCiAgICAgICAgZXZlbnRzID0gRXZlbnQub2JqZWN0cy5maWx0ZXIoCiAgICAgICAgICAgIGdyb3VwPWdyb3VwCiAgICAgICAgKQoKICAgICAgICByZXR1cm4gc2VsZi5wYWdpbmF0ZSgKICAgICAgICAgICAgcmVxdWVzdD1yZXF1ZXN0LAogICAgICAgICAgICBxdWVyeXNldD1ldmVudHMsCiAgICAgICAgICAgIG9yZGVyX2J5PSctZGF0ZXRpbWUnLAogICAgICAgICAgICBvbl9yZXN1bHRzPWxhbWJkYSB4OiBzZXJpYWxpemUoeCwgcmVxdWVzdC51c2VyKSwKICAgICAgICAgICAgcGFnaW5hdG9yX2Nscz1EYXRlVGltZVBhZ2luYXRvciwKICAgICAgICApCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIiIiCiAgICAgICAgTGlzdCBBdmFpbGFibGUgU2FtcGxlcwogICAgICAgIGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAKCjx8ZmltX2VuZHw+"]
["74857f4f8f3dfb143c9f5612658d439df8478a29-3","74857f4f8f3dfb143c9f5612658d439df8478a29","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKIiIiIGNsYXNzIGF0bQpIYW5kbGVzIGJhc2ljIHRyYW5zYWN0aW9ucyAtIHdpdGhkcmF3LCBkZXBvc2l0IGFuZCB0cmFuc2Zlci4KUHJpdmlsZWdlZCB0cmFuc2FjdGlvbnMgY3JlYXRlYWNjdCBhbmQgZGVsZXRlYWNjdCBhcmUgZGVmdW5jdCBpbiB0aGlzIGNsYXNzLAphbmQgZXhpc3Qgb25seSB0byBiZSBleHRlbmRlZCBieSB0aGUgYWdlbnQgY2xhc3MuCgpjbGFzcyB2YXJpYWJsZXM6CglhY2NvdW50X2xpc3Q6IGxpc3Qgb2YgYWNjb3VudCBudW1iZXJzCglzdW1tYXJ5OiBsaXN0IG9mIHByZXZpb3VzIHRyYW5zYWN0aW9ucyBpbiB0aGlzIHNlc3Npb24KCURFUF9MSU1JVDogbWF4aW11bSBkZXBvc2l0IHNpemUgZm9yIEFUTSBtb2RlCglXRFJfTElNSTogbWF4aW11bSB3aXRoZHJhd2FsIGZvciBBVE0gbW9kZQoJVFJBX0xJTUlUOiBtYXhpbXVtIHRyYW5zZmVyIHNpemUgZm9yIEFUTSBtb2RlCglEQUlMWV9MSU1JVDogbWF4aW1hIGZvciBkZXBvc2l0IHRvIGFuZCB3aXRoZHJhd2FsIGZyb20gb25lIGFjY291bnQgaW4gYSBzaG9sZQoJc2Vzc2lvbjsgYWxzbyBoYWxmIG9mIGRhaWx5IHRyYW5zZmVyIGxpbWl0CgoiIiIKCmNsYXNzIGF0bToKCSIiImNsYXNzIGNvbnN0cnVjdG9yCgkJc2V0cyB1cCB0aGUgY2xhc3MgdmFyaWFibGVzLgoJIiIiCglkZWYgX19pbml0X18oc2VsZixhY2NvdW50TGlzdCxzdW1tYXJ5RmlsZSk6CgkJc2VsZi5hY2NvdW50X2xpc3QgPSBhY2NvdW50TGlzdAoJCXNlbGYuc3VtbWFyeSA9IHN1bW1hcnlGaWxlCgkJc2VsZi5ERVBfTElNSVQgPSAyMDAwMDAKCQlzZWxmLldEUl9MSU1JVCA9IDEwMDAwMAoJCXNlbGYuVFJBX0xJTUlUID0gMTAwMDAwMAoJCXNlbGYuREFJTFlfTElNSVQgPSA1MDAwMDAKCQlzZWxmLmRlbGV0ZWRfYWNjb3VudHMgPSBbXQoJCXJldHVybgoJCQoJJycnCglGb3IgZGVwb3NpdGluZyBmdW5kcwoJV2lsbCBjaGVjayB3aGV0aGVyIHRoZSBhY2NvdW50IGFuZCBkZXBvc2l0IGFtb3VudCBhcmUgdmFsaWQsIGFuZCBpZgoJdGhlIGRhaWx5IGRlcG9zaXQgbGltaXQgaGFzIGJlZW4gbWV0LgoJVmFsaWQgZGVwb3NpdHMgd2lsbCByZXR1cm4gYSB0cmFuc2FjdGlvbiBzdHJpbmcgZGV0YWlsaW5nIHRoZSBkZXBvc2l0LgoJJycnCglkZWYgZGVwb3NpdChzZWxmKToKCQl3aGlsZSBUcnVlOgoJCQlkZXN0QWNjb3VudCA9IHNlbGYuYXNrRm9yQWNjdCgnUGxlYXNlIGVudGVyIHRoZSBhY2NvdW50IG51bWJlciB0byBkZXBvc2l0IHRvOiAnKQoJCQlkZXBBbW91bnQgPSBzZWxmLmFza0Zvck1vbmV5KCdFbnRlciBhbW91bnQgdG8gZGVwb3NpdCwgaW4gY2VudHM6ICcsIHNlbGYuREVQX0xJTUlUKSAKCQkJCgkJCXJ1bm5pbmdUb3RhbCA9IGRlcEFtb3VudCArIHNlbGYuZ2V0VHJhbnNhY3Rpb25Ub3RhbChkZXN0QWNjb3VudCwiV0RSIikKCQkJaWYgcnVubmluZ1RvdGFsID4gc2VsZi5EQUlMWV9MSU1JVDoKCQkJCXN5cy5zdGRvdXQud3JpdGUoIllvdSBoYXZlIGV4Y2VlZGVkIHRoZSBkYWlseSBsaW1pdCBmb3IgZGVwb3NpdHMsICIgKyBzZWxmLkRBSUxZX0xJTUlUICsgIiwgdG8gdGhpcyBhY2NvdW50LiBQbGVhc2UgdHJ5IGFnYWluLlxuIikKCQkJCWNvbnRpbnVlCgkJCWVsc2U6CgkJCQlicmVhawoJCXN5cy5zdGRvdXQud3JpdGUoJ1lvdSBoYXZlIHN1Y2Nlc3NmdWxseSBkZXBvc2l0ZWQgJyArIHN0cihkZXBBbW91bnQpICsnIGNlbnRzIHRvIGFjY291bnQ6ICcrZGVzdEFjY291bnQpCgkJI2hlcmUgd2Ugc2V0IHVwIHRoZSB0cmFuc2FjdGlvbiBzdHJpbmcKCQlkZXBTdHJpbmcgPSAnREVQICcgKyBzdHIoZGVzdEFjY291bnQpICsgJyAnICsgIHN0cihkZXBBbW91bnQpICsgJyAnICsgJyoqKiAqKionCgkJcmV0dXJuIGRlcFN0cmluZwoJCQoJJycnCglGb3Igd2l0aGRyYXdpbmcgZnVuZHMKCVdpbGwgY2hlY2sgdmFsaWRpdHkgb2Ygc291cmNlIGFjY291bnQgbnVtYmVyIGFuZCB3aXRoZHJhd2FsIGFtb3VudCwgYW5kIHdoZXRoZXIKCXRoZSBkYWlseSB3aXRoZHJhd2FsIGxpbWl0IGhhcyBiZWVuIG1ldC4KCVZhbGlkIHdpdGhkcmF3YWxzIHdpbGwgcmV0dXJuIGEgdHJhbnNhY3Rpb24gc3RyaW5nLgoJJycnCglkZWYgd2l0aGRyYXcoc2VsZik6CgkJd2hpbGUgVHJ1ZToKCQkJc291cmNlQWNjb3VudCA9IHNlbGYuYXNrRm9yQWNjdCgnUGxlYXNlIGVudGVyIHRoZSBhY2NvdW50IG51bWJlciB0byB3aXRoZHJhdyBmcm9tOiAnKQoJCQl3ZHJBbW91bnQgPSBzZWxmLmFza0Zvck1vbmV5KCdFbnRlciBhbW91bnQgdG8gd2l0aGRyYXcsIGluIGNlbnRzOiAnLCBzZWxmLldEUl9MSU1JVCkKCQkJCgkJCXJ1bm5pbmdUb3RhbCA9IHdkckFtb3VudCArIHNlbGYuZ2V0VHJhbnNhY3Rpb25Ub3RhbChzb3VyY2VBY2NvdW50LCJXRFIiKQoJCQlpZiBydW5uaW5nVG90YWwgPiBzZWxmLkRBSUxZX0xJTUlUOgoJCQkJc3lzLnN0ZG91dC53cml0ZSgiWW91IGhhdmUgZXhjZWVkZWQgdGhlIGRhaWx5IGxpbWl0IGZvciB3aXRoZHJhd2FscywgIiArIHNlbGYuREFJTFlfTElNSVQgKyAiLCBmcm9tIHRoaXMgYWNjb3VudC4gUGxlYXNlIHRyeSBhZ2Fpbi5cbiIpCgkJCQljb250aW51ZQoJCQllbHNlOgoJCQkJYnJlYWsKCgkJc3lzLnN0ZG91dC53cml0ZSgnWW91IGhhdmUgc3VjY2Vzc2Z1bGx5IHdpdGhkcmF3biAnICsgc3RyKHdkckFtb3VudCkgKyAnIGNlbnRzIGZyb20gYWNjb3VudDogJysgc291cmNlQWNjb3VudCkKCQl3ZHJTdHJpbmcgPSAnV0RSICcgKyAnMDAwMDAwMCcgKyAgc3RyKHdkckFtb3VudCkgKyAnICcgKyBzdHIoc291cmNlQWNjb3VudCkgKyAnICoqKicKCQlyZXR1cm4gd2RyU3RyaW5nCgkJCgkJCgknJycKCUZvciB0cmFuc2ZlcnJpbmcgZnVuZHMgZnJvbSBvbmUgYWNjb3VudCB0byBhbm90aGVyLgoJV2lsbCBjaGVjayB2YWxpZGl0eSBvZiBib3RoIGFjY291bnRzIGludm9sdmVkIGFsb25nIHdpdGggdGhlIHRyYW5zZmVyIGFtb3VudCwKCWluY2x1ZGluZyB3aGV0aGVyIHRoZSBkYWlseSB0cmFuc2ZlciBsaW1pdCBoYXMgYmVlbiBtZXQgZm9yIHRoZSBzb3VyY2UgYWNjb3VudC4KCVZhbGlkIHRyYW5zZmVycyB3aWxsIHJldHVybiBhIHRyYW5zYWN0aW9uIHN0cmluZy4KCScnJwoJZGVmIHRyYW5zZmVyKHNlbGYpOgoJCXdoaWxlIFRydWU6CgkJCXNvdXJjZUFjY291bnQgPSBzZWxmLmFza0ZvckFjY3QoJ1BsZWFzZSBlbnRlciB0aGUgYWNjb3VudCBudW1iZXIgdG8gdHJhbnNmZXIgZnJvbTogJykKCQkJZGVzdEFjY291bnQgPSBzZWxmLmFza0ZvckFjY3QoJ1BsZWFzZSBlbnRlciB0aGUgYWNjb3VudCBudW1iZXIgdG8gdHJhbnNmZXIgdG86ICcpCgkJCXRyYUFtb3VudCA9IHNlbGYuYXNrRm9yTW9uZXkoJ0VudGVyIGFtb3VudCB0byB0cmFuc2ZlciwgaW4gY2VudHM6ICcsIHNlbGYuVFJBX0xJTUlUKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgkJCQoJCQlydW5uaW5nVG90YWwgPSB0cmFBbW91bnQgKyBzZWxmLmdldFRyYW5zYWN0aW9uVG90YWwoc291cmNlQWNjb3VudCwiVFJBIikKCQkJaWYgcnVubmluZ1RvdGFsID4gKHNlbGYuREFJTFlfTElNSVQgKiAyKToKCQkJCXN5cy5zdGRvdXQud3JpdGUoIllvdSBoYXZlIGV4Y2VlZGVkIHRoZSBkYWlseSBsaW1pdCBmb3IgdHJhbnNmZXJzLCAiICsgKHNlbGYuREFJTFlfTElNSVQqMikgKyAiLCBmcm9tIHRoaXMgYWNjb3VudC4gUGxlYXNlIHRyeSBhZ2Fpbi5cbiIpCjx8ZmltX2VuZHw+"]
["742dc81c29b957056290894e6473bfec5f35806b-2","742dc81c29b957056290894e6473bfec5f35806b","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuU3R5bGVTcGVlY2ggaW1wb3J0IFN0eWxlU3BlZWNoCmZyb20gLmxvc3MgaW1wb3J0IE1ldGFTdHlsZVNwZWVjaExvc3NNYWluLCBNZXRhU3R5bGVTcGVlY2hMb3NzRGlzYwpmcm9tIC5vcHRpbWl6ZXIgaW1wb3J0IFNjaGVkdWxlZE9wdGltTWFpbiwgU2NoZWR1bGVkT3B0aW1EaXNjCjx8ZmltX2VuZHw+"]
["f121ceaf9c05ca857895dde9d8eacaecf07abe1b-1","f121ceaf9c05ca857895dde9d8eacaecf07abe1b",{"$cut":{"chars":21652,"head":"PHxmaW1fcHJlZml4fD4KIyAyMDIwLzcvMTYKCmltcG9ydCBqc29uCmltcG9ydCBwYW5kYXMgYXMgcGQKZnJvbSB0YWJsZV9jZWxsIGltcG9ydCAqCmZyb20gdGFibGVfY2VsbF9zdHJ1Y3R1cmVsZXNzIGltcG9ydCAqCmltcG9ydCB0aW1lCmltcG9ydCBudW1weSBhcyBucAoKIyB0d28gc3BlY2lhbCBzeW1ib2xzIHVzZWQgaW4gdGhlIGxhbmd1YWdlCkhPTEUgPSAiXz9fIgpVTktOT1dOID0gIl9VTktfIgoKIiIiCmEgdGFibGUgaXMgcmVwcmVzZW50ZWQgYnkgc2V0IG9mIGNlbGxzCiIiIgoKCmNsYXNzIEFubm90YXRlZFRhYmxlOgogICAgIiIiCiAgICBjb25zdHJ1Y3QgdGhlIHRhYmxlIHdpdGggdGhlIGdpdmVuIGRhdGFzZXQuCiAgICAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlLCBmcm9tX3NvdXJjZT1GYWxzZSk6CiAgICAgICAgIiIibG9hZCBmcm9tIGEgZGljdGlvbmFyeSByZXByZXNlbnRlZCBhbm5vdGF0ZWQgdGFibGUiIiIKICAgICAgICBzZWxmLmRmID0gW10gICMgc3RvcmVkIGFzIGEgdHdvLWxldmVsIGFycmF5IHdpdGggY29sdW1ucyB0byBiZSB0aGUgaW5uZXIgbGV2ZWwKICAgICAgICBpZiBub3QgZnJvbV9zb3VyY2U6CiAgICAgICAgICAgIHNlbGYubG9hZF9mcm9tX2RpY3Qoc291cmNlKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYubG9hZF9mcm9tX3NvdXJjZShzb3VyY2UpCgogICAgZGVmIGVxdWFscyhzZWxmLCBvdGhlcik6CiAgICAgICAgaWYgc2VsZi5nZXRfY29sX251bSgpICE9IG90aGVyLmdldF9jb2xfbnVtKCk6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgIGlmIHNlbGYuZ2V0X3Jvd19udW0oKSAhPSBvdGhlci5nZXRfcm93X251bSgpOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICBmb3IgY2lkIGluIHJhbmdlKHNlbGYuZ2V0X2NvbF9udW0oKSk6CiAgICAgICAgICAgIGZvciByaWQgaW4gcmFuZ2Uoc2VsZi5nZXRfcm93X251bSgpKToKICAgICAgICAgICAgICAgIGlmIHNlbGYuZ2V0X2NlbGwoY2lkLCByaWQpLmdldF92YWx1ZSgpICE9IG90aGVyLmdldF9jZWxsKGNpZCwgcmlkKS5nZXRfdmFsdWUoKToKICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgICMgbG9hZCBmcm9tIHR3by1sZXZlbCBhcnJheSBvZiBjZWxscwogICAgZGVmIGxvYWRfZnJvbV9zb3VyY2Uoc2VsZiwgc291cmNlKToKICAgICAgICBzZWxmLmRmID0gc291cmNlLmNvcHkoKQoKICAgICMgZGljdCBzb3VyY2Ugc2hvdWxkIGJlIGEgdHdvLWxldmVsIGFycmF5IFtbe3ZhbCwgZXhwfV0sIFt7dmFsLCBleHB9XV0KICAgIGRlZiBsb2FkX2Zyb21fZGljdChzZWxmLCBzb3VyY2UpOgogICAgICAgIGZvciBjb2xfaWQgaW4gcmFuZ2UobGVuKHNvdXJjZSkpOgogICAgICAgICAgICBzZWxmLmRmLmFwcGVuZChbXSkKICAgICAgICAgICAgZm9yIGNlbGxfaWQgaW4gcmFuZ2UobGVuKHNvdXJjZVtjb2xfaWRdKSk6CiAgICAgICAgICAgICAgICBjZWxsID0gc291cmNlW2NvbF9pZF1bY2VsbF9pZF0KICAgICAgICAgICAgICAgIHNlbGYuZGZbY29sX2lkXS5hcHBlbmQoVGFibGVDZWxsKGNlbGxbInZhbHVlIl0sIGNlbGxbImV4cCJdKSkKCiAgICBkZWYgYWRkX2NvbHVtbihzZWxmLCBuZXdfY29sdW1uKToKICAgICAgICBzZWxmLmRmLmFwcGVuZChuZXdfY29sdW1uLmNvcHkoKSkKCiAgICBkZWYgYWRkX3JvdyhzZWxmLCBuZXdfcm93KToKICAgICAgICBpZiBzZWxmLmlzX2VtcHR5KCk6CiAgICAgICAgICAgICMgaW5pdGlhbGl6ZSB0aGVuIGFwcGVuZCB3aGVuIHRoZSBjdXJyZW50IHNwYWNlIGlzIGVtcHR5CiAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihuZXdfcm93KSk6CiAgICAgICAgICAgICAgICBzZWxmLmRmLmFwcGVuZChbbmV3X3Jvd1tpXV0pCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgbGVuKG5ld19yb3cpICE9IHNlbGYuZ2V0X2NvbF9udW0oKToKICAgICAgICAgICAgICAgIHByaW50KCJbZXJyb3JdIG5ldyByb3cgd2l0aCBpbmNvbnNpc3RlbnQgY29sdW1uIG51bWJlciBhZGRlZCIpCiAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihzZWxmLmRmKSk6CiAgICAgICAgICAgICAgICBzZWxmLmRmW2ldLmFwcGVuZChuZXdfcm93W2ldKQoKICAgIGRlZiBnZXRfY2VsbChzZWxmLCB4LCB5KToKICAgICAgICByZXR1cm4gY29weS5jb3B5KHNlbGYuZGZbeF1beV0pCgogICAgZGVmIGdldF9jb2x1bW4oc2VsZiwgY29sX2luZGV4KToKICAgICAgICByZXR1cm4gc2VsZi5kZltjb2xfaW5kZXhdLmNvcHkoKQoKICAgIGRlZiBnZXRfcm93KHNlbGYsIHJvd19pbmRleCk6CiAgICAgICAgIyBnZXQgYSBsaXN0IG9mIGNlbGxzIGluIHRoZSBzYW1lIHJvdyBpbmRleAogICAgICAgIHJsdCA9IFtdCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNlbGYuZGYpKToKICAgICAgICAgICAgcmx0LmFwcGVuZChzZWxmLmRmW2ldW3Jvd19pbmRleF0pCiAgICAgICAgcmV0dXJuIHJsdAoKICAgIGRlZiBnZXRfY29sX251bShzZWxmKToKICAgICAgICBpZiBzZWxmLmlzX2VtcHR5KCk6CiAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgcmV0dXJuIGxlbihzZWxmLmRmKQoKICAgIGRlZiBnZXRfcm93X251bShzZWxmKToKICAgICAgICBpZiBzZWxmLmlzX2VtcHR5KCk6CiAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgcmV0dXJuIGxlbihzZWxmLmRmWzBdKQoKICAgIGRlZiBpc19lbXB0eShzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5kZiA9PSBbXSBvciBbZSBmb3IgZSBpbiBzZWxmLmRmIGlmIGUgIT0gW11dID09IFtdCgogICAgZGVmIHJvdW5kKHNlbGYpOgogICAgICAgIGZvciBjaWQgaW4gcmFuZ2UobGVuKHNlbGYuZGYpKToKICAgICAgICAgICAgZm9yIHJpZCBpbiByYW5nZShsZW4oc2VsZi5kZltjaWRdKSk6CiAgICAgICAgICAgICAgICBjZWxsID0gc2VsZi5kZltjaWRdW3JpZF0KICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY2VsbC5nZXRfdmFsdWUoKSwgZmxvYXQpOgogICAgICAgICAgICAgICAgICAgIHNlbGYuZGZbY2lkXVtyaWRdID0gVGFibGVDZWxsKG5wLnJvdW5kKGNl"}}]
["a442c311e1b1cee0e6b0738582b9a566211de868-2","a442c311e1b1cee0e6b0738582b9a566211de868","PHxmaW1fcHJlZml4fD4KIiIiCkNhbGN1bGF0ZXMgcHJpY2UgLyBwcmVmb3JtYW5jZSBhbmQgZmlndXJlIG9mIG1lcml0IGFuZApzYXZlcyBpdCBpbnRvIHRoZSBvdXRwdXQgZmlsZSBhY29yZGluZyB0byBkZXNpZ24gZG9jdW1lbnQuCgoiIiIKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHN5cwoKZnJvbSBkZWNpc2lvbmVuZ2luZS5mcmFtZXdvcmsubW9kdWxlcyBpbXBvcnQgVHJhbnNmb3JtCmZyb20gZGVjaXNpb25lbmdpbmVfbW9kdWxlcy51dGlsIGltcG9ydCBmaWd1cmVfb2ZfbWVyaXQgYXMgZm9tCmltcG9ydCBsb2dnaW5nCgoKQFRyYW5zZm9ybS5jb25zdW1lcyhOZXJzY19JbnN0YW5jZV9QZXJmb3JtYW5jZT1wZC5EYXRhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgRmFjdG9yeV9FbnRyaWVzX0xDRj1wZC5EYXRhRnJhbWUpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KQFRyYW5zZm9ybS5wcm9kdWNlcyhOZXJzY19QcmljZV9QZXJmb3JtYW5jZT1wZC5EYXRhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgTmVyc2NfRmlndXJlX09mX01lcml0PXBkLkRhdGFGcmFtZSkKY2xhc3MgTmVyc2NGaWd1cmVPZk1lcml0KFRyYW5zZm9ybS5UcmFuc2Zvcm0pOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZyk6Cjx8ZmltX2VuZHw+"]
["176045fc1d7da3cd7645849f6c7739f01b67103a-2","176045fc1d7da3cd7645849f6c7739f01b67103a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCiMKIyBDb3JvbmEgQ2lyY2xlcywgY29kZXZzY292aWQxOSBoYWNrYXRob24gWnVyaWNoCiMgYnkgQ2hyaXN0b3BoZXIgUmVobSAyOS0zMCBtYXIgMjAyMCwgY2hyaXN0b3BoZXJyZWhtQHdlYi5kZQoKaW1wb3J0IHN5cwppbXBvcnQgTXlTUUxkYgoKCmRlZiBhZGROZXdVc2VyVG9DaXJjbGUoY2lyY2xlSUQsIHVzZXJJRCk6CgogICAgY29ubiA9IE15U1FMZGIuY29ubmVjdChob3N0PSJyZGJtcy5zdHJhdG8uZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyPSJVNDA5ODc4NyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3ZD0iMWxpZ2h0MWxpZ2h0ISEiLCBkYj0iREI0MDk4Nzg3IikKICAgIGN1cnNvciA9IGNvbm4uY3Vyc29yKCkKICAgIHNxbCA9ICIiIklOU0VSVCBJTlRPIENJUkNMRVVTRVIgKENVMkNJUkNMRSwgQ1UyVVNFUiwgSVNIT1NUKQogICAgICAgICAgICAgVkFMVUVTICglcywgJXMsIDApIiIiICUgKGNpcmNsZUlELCB1c2VySUQpCjx8ZmltX2hvbGV8PgoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBpZiBsZW4oc3lzLmFyZ3YpLTEgPT0gMjoKICAgICAgICBhZGROZXdVc2VyVG9DaXJjbGUoc3lzLmFyZ3ZbMV0sIHN5cy5hcmd2WzJdKQogICAgZWxzZToKICAgICAgICBwcmludCgid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyIpCjx8ZmltX3N1ZmZpeHw+CiAgICBwcmludChzcWwpCiAgICBjdXJzb3IuZXhlY3V0ZShzcWwpCiAgICBjb25uLmNvbW1pdCgpCiAgICBjb25uLmNsb3NlKCkKPHxmaW1fZW5kfD4="]
["74b2f4f6569db0846ec379fa475c7c2645583e0d-3","74b2f4f6569db0846ec379fa475c7c2645583e0d","PHxmaW1fcHJlZml4fD4KZnJvbSBjb25maWcgaW1wb3J0ICoKdHJhaW5fZGF0YSA9IHBkLnJlYWRfY3N2KCJkYXRhL3RyYWluX2RhdGEvdHJhaW5fZmVhdHVyZS5jc3YiKQp0ZXN0X2RhdGEgPSBwZC5yZWFkX2NzdigiZGF0YS90ZXN0X2RhdGEvdGVzdF9mZWF0dXJlLmNzdiIpCgoKCmNhbXBhaWduX2RhdGEgPSBwZC5yZWFkX2NzdigiZGF0YS9jYW1wYWlnbl9kYXRhLmNzdiIpCmNvdXBvbl9pdGVtID0gcGQucmVhZF9jc3YoImRhdGEvY291cG9uX2l0ZW1fbWFwcGluZy5jc3YiKQpjdXN0b21lcl9kYXRhID0gcGQucmVhZF9jc3YoImRhdGEvY3VzdG9tZXJfZGVtb2dyYXBoaWNzLmNzdiIpCnRyYW5zYWN0aW9uX2RhdGEgPSBwZC5yZWFkX2NzdigiZGF0YS9jdXN0b21lcl90cmFuc2FjdGlvbl9kYXRhLmNzdiIpCml0ZW1fZGF0YSA9IHBkLnJlYWRfY3N2KCJkYXRhL2l0ZW1fZGF0YS5jc3YiKQp0ZXN0ID0gcGQucmVhZF9jc3YoImRhdGEvdGVzdF9kYXRhLmNzdiIpCnRyYWluID0gcGQucmVhZF9jc3YoImRhdGEvdHJhaW5fZGF0YS5jc3YiKQoKCgp0cmFpbl9kYXRhLmRyb3AoWydjX3VuaXF1ZV9pdGVtcycsICdjX3VuaXF1ZV9icmFuZCcsICdjX2ZyZXFfYnJhbmQnLAogICAgICAgJ2NfcmFyZV9icmFuZCcsICdjX2l0ZW1zX2ZyZXFfYnJhbmQnLCAnY19pdGVtc19yYXJlX2JyYW5kJywnY191bmlxdWVfYnJhbmR0JywgJ2NfZnJlcV9icmFuZHQnLCAnY19yYXJlX2JyYW5kdCcsJ2NfaXRlbXNfZnJlcV9icmFuZHQnLCAKICAgICAgICdjX2l0ZW1zX3JhcmVfYnJhbmR0JywgJ2NfdW5pcXVlX2NhdGVnb3J5JywKICAgICAgICdjX2ZyZXFfY2F0ZWdvcnknLCAnY19yYXJlX2NhdGVnb3J5JywgJ2NfaXRlbXNfZnJlcV9jYXRlZ29yeScsCiAgICAgICAnY19pdGVtc19yYXJlX2NhdGVnb3J5JywgJ2NfY292ZXJhZ2VfaXRlbScsICdjX2NvdmVyYWdlX2JyYW5kJywKICAgICAgICdjX2NvdmVyYWdlX2JyYW5kdCcsICdjX2NvdmVyYWdlX2NhdGVnb3J5JywgJ292ZXJhbGxfdW5pcXVlX2l0ZW1zJywKICAgICAgICdvdmVyYWxsX2l0ZW1zJywgJ292ZXJhbGxfcXVhbnRpdHknLCAnb3ZlcmFsbF9zcHJpY2UnLCAnb3ZlcmFsbF9icHJpY2UnLAogICAgICAgJ292ZXJhbGxfb2Rpc2NvdW50JywgJ292ZXJhbGxfY2Rpc2NvdW50JywgJ292ZXJhbGxfdGRpc2NvdW50JywKICAgICAgICdvdmVyYWxsX3NwcmljZV9wcScsICdvdmVyYWxsX2JwcmljZV9wcScsICdvdmVyYWxsX29kaXNjb3VudF9wcScsCiAgICAgICAnb3ZlcmFsbF9jZGlzY291bnRfcHEnLCAnb3ZlcmFsbF90ZGlzY291bnRfcHEnLCAnb3ZlcmFsbF91bmlxdWVfYnJhbmQnLAogICAgICAgJ292ZXJhbGxfZnJlcV9icmFuZCcsICdvdmVyYWxsX3JhcmVfYnJhbmQnLCAnb3ZlcmFsbF9pdGVtc19mcmVxX2JyYW5kJywKICAgICAgICdvdmVyYWxsX2l0ZW1zX3JhcmVfYnJhbmQnLCAnb3ZlcmFsbF91bmlxdWVfYnJhbmR0JywKICAgICAgICdvdmVyYWxsX2ZyZXFfYnJhbmR0JywgJ292ZXJhbGxfcmFyZV9icmFuZHQnLAogICAgICAgJ292ZXJhbGxfaXRlbXNfZnJlcV9icmFuZHQnLCAnb3ZlcmFsbF9pdGVtc19yYXJlX2JyYW5kdCcsCiAgICAgICAnb3ZlcmFsbF91bmlxdWVfY2F0ZWdvcnknLCAnb3ZlcmFsbF9mcmVxX2NhdGVnb3J5JywKICAgICAgICdvdmVyYWxsX3JhcmVfY2F0ZWdvcnknLCAnb3ZlcmFsbF9pdGVtc19mcmVxX2NhdGVnb3J5JywKICAgICAgICdvdmVyYWxsX2l0ZW1zX3JhcmVfY2F0ZWdvcnknLCAnb3ZlcmFsbF9jb3ZlcmFnZV9pdGVtJywKICAgICAgICdvdmVyYWxsX2NvdmVyYWdlX2JyYW5kJywgJ292ZXJhbGxfY292ZXJhZ2VfYnJhbmR0JywKICAgICAgICdvdmVyYWxsX2NvdmVyYWdlX2NhdGVnb3J5JywgJ292ZXJhbGxfcG9kaXNjb3VudCcsICdvdmVyYWxsX3BjZGlzY291bnQnLAogICAgICAgJ292ZXJhbGxfcHRkaXNjb3VudCcsICdvdmVyYWxsX3BvZGlzY291bnRfcHEnLCAnb3ZlcmFsbF9wY2Rpc2NvdW50X3BxJywKPHxmaW1faG9sZXw+CnByaW50KCJJbXBvcnRhbnQgZmVhdHVyZXMgIikKSW1wb3J0YW50X2ZlYXR1cmVzID0gKHRyYWluX2RhdGFbdHJhaW5fZGF0YS5jb2x1bW5zWzpdXS5jb3JyKClbJ3JlZGVtcHRpb25fc3RhdHVzJ11bOl0pCkltcG9ydGFudF9mZWF0dXJlcyA9IChJbXBvcnRhbnRfZmVhdHVyZXMuc29ydF92YWx1ZXMoYXNjZW5kaW5nPUZhbHNlKSkKCnByaW50KGxpc3QoSW1wb3J0YW50X2ZlYXR1cmVzLmRyb3AoJ3JlZGVtcHRpb25fc3RhdHVzJykuaGVhZCgpLmluZGV4LnZhbHVlcykpCgoKCgpjdXN0b21lcl9kYXRhID0gdHJhaW5fZGF0YQpjdXN0b21lcl9kYXRhID0gY3VzdG9tZXJfZGF0YS5kcm9wKFsnaWQnLCdjb3Vwb25faWQnLCdjYW1wYWlnbl9pZCcsJ2NhbXBhaWduX3R5cGUnLCdkdXJhdGlvbicsJ3N0YXJ0X2RhdGUnLCdlbmRfZGF0ZScsJ2FnZV9yYW5nZSddICxheGlzPTEpCnByaW50KCJJbXBvcnRhbnQgQ3VzdG9tZXIgQXR0cmlidXRlcyIpCmN1c3RvbWVyX2ZlYXR1cmVzID0gKGN1c3RvbWVyX2RhdGFbY3VzdG9tZXJfZGF0YS5jb2x1bW5zWzpdXS5jb3JyKClbJ3JlZGVtcHRpb25fc3RhdHVzJ11bOl0pCmN1c3RvbWVyX2ZlYXR1cmVzID0gKGN1c3RvbWVyX2ZlYXR1cmVzLnNvcnRfdmFsdWVzKGFzY2VuZGluZz1GYWxzZSkpCgpwcmludChsaXN0KGN1c3RvbWVyX2ZlYXR1cmVzLmRyb3AoJ3JlZGVtcHRpb25fc3RhdHVzJykuaGVhZCgpLmluZGV4LnZhbHVlcykpCgoKIyBQcmVkaWN0aW5nIFVuc2VmdWwgY291cG9ucyAKY291cG9uX2RhdGEgPSB0cmFpbl9kYXRhW1snY291cG9uX2lkJywncmVkZW1wdGlvbl9zdGF0dXMnXV0KdXNlZnVsX2NvdXBvbiA9IHBkLm1lcmdlKGNvdXBvbl9kYXRhLGNvdXBvbl9pdGVtW1snY291cG9uX2lkJywnaXRlbV9pZCddXSxvbj0nY291cG9uX2lkJywgaG93PSdsZWZ0JykKdXNlZnVsX2NvdXBvbiA9IHBkLm1lcmdlKHVzZWZ1bF9jb3Vwb24saXRlbV9kYXRhW1snaXRlbV9pZCcsJ2NhdGVnb3J5J11dLG9uPSdpdGVtX2lkJywgaG93PSdsZWZ0JykKI3ByaW50KHVzZWZ1bF9jb3Vwb24uY29sdW1ucykKCmltcG9ydCBtYXRwbG90bGliLnB5bGFiIGFzIHBsCmltcG9ydCBtYXRwbG90bGliLmdyaWRzcGVjIGFzIGdyaWRzcGVjCgonJycKIyBDcmVhdGUgMngyIHN1YiBwbG90cwpncyA9IGdyaWRzcGVjLkdyaWRTcGVjKDIsIDIpCnBsLmZpZ3VyZSgpCmF4ID0gcGwuc3VicGxvdChnc1swLCAwXSkgIyByb3cgMCwgY29sIDAKcGwuc2NhdHRlcih1c2VmdWxfY291cG9uWydjb3Vwb25faWQnXSwgdXNlZnVsX2NvdXBvblsncmVkZW1wdGlvbl9zdGF0dXMnXSkKCmF4ID0gcGwuc3VicGxvdChnc1swLCAxXSkgIyByb3cgMCwgY29sIDEKcGwuc2NhdHRlcih1c2VmdWxfY291cG9uWydpdGVtX2lkJ10sIHVzZWZ1bF9jb3Vwb25bJ3JlZGVtcHRpb25fc3RhdHVzJ10gKQoKYXggPSBwbC5zdWJwbG90KGdzWzEsIDpdKSAjIHJvdyAxLCBzcGFuIGFsbCBjb2x1bW5zCnBsLnNjYXR0ZXIodXNlZnVsX2NvdXBvblsnY2F0ZWdvcnknXSwgdXNlZnVsX2NvdXBvblsncmVkZW1wdGlvbl9zdGF0dXMnXSkKcGwuc2hvdygpCicnJwoKCmNhdGVnb3J5X3JlZGVtcHRpb24gPSB1c2VmdWxfY291cG9uLmdyb3VwYnkoWydjYXRlZ29yeScsJ3JlZGVtcHRpb25fc3RhdHVzJ10pLnJlZGVtcHRpb25fc3RhdHVzLmNvdW50KCkKCmNhdGVnb3J5X3JlZGVtcHRpb25fcGVyY2VudGFnZSA9IGNhdGVnb3J5X3JlZGVtcHRpb24uZ3JvdXBieShsZXZlbD0wKS5hcHBseShsYW1iZGEgeDogMTAwICogeCAvIGZsb2F0KHguc3VtKCkpKQoKCnByaW50KCIgUmVkZW1wdGlvbiBwZXJjZW50YWdlIHdpdGggQ291cG9ucyBhbmQgQ2F0ZWdvcmllcyAiKQpwcmludChjYXRlZ29yeV9yZWRlbXB0aW9uX3BlcmNlbnRhZ2Uuc29ydF92YWx1ZXMoYXNjZW5kaW5nPUZhbHNlKSkKCgoKIyBQcm9maWxpbmcgSXRlbXMKCmRmID0gcGQubWVyZ2UodHJhbnNhY3Rpb25fZGF0YSxpdGVtX2RhdGEsIG9uPSJpdGVtX2lkIixob3cgPSAnbGVmdCcpCnByaW50KGRmKQp0b3RhbCA9IGRmWydvdGhlcl9kaXNjb3VudCddICsgZGZbJ2NvdXBvbl9kaXNjb3VudCddCmRmWyd0b3RhbF9kaXNjb3VudCddID0gdG90YWwKcGVyY2VudF9kaXNjb3VudCA9ICgtMSkgKiAxMDAgKiBkZlsndG90YWxfZGlzY291bnQnXSAvIGRmWydzZWxsaW5nX3ByaWNlJ10KZGZbJ3BlcmNlbnRfZGlzY291bnQnXSA9IHBlcmNlbnRfZGlzY291bnQKZGYgPSBkZi5kcm9wKFsnZGF0ZScsJ2N1c3RvbWVyX2lkJywnYnJhbmQnLCdicmFuZF90eXBlJywnb3RoZXJfZGlzY291bnQnLCdjb3Vwb25fZGlzY291bnQnLCd0b3RhbF9kaXNjb3VudCddLGF4aXMgPSAxKQpwcmludCgiTW9zdCBzb2xkIHByb2R1Y3RzIGJ5IGNhdGVnb3J5IikKI3ByaW50KGRmLmdyb3VwYnkoJ2NhdGVnb3J5Jykuc2l6ZSgpLnNvcnRfdmFsdWVzKGFzY2VuZGluZz1GYWxzZSkuaGVhZCgpKQpwcmludChkZi5ncm91cGJ5KCdjYXRlZ29yeScpLmFnZygnbWVhbicpLnNvcnRfdmFsdWVzKGJ5PSdwZXJjZW50X2Rpc2NvdW50JywgYXNjZW5kaW5nPUZhbHNlKS5oZWFkKCkuZHJvcChbJ2l0ZW1faWQnLCdxdWFudGl0eScsJ3NlbGxpbmdfcHJpY2UnXSxheGlzPTEpKQpwcmludChkZi5ncm91cGJ5KCdjYXRlZ29yeScpLmFnZygnbWVhbicpLnNvcnRfdmFsdWVzKGJ5PSdzZWxsaW5nX3ByaWNlJywgYXNjZW5kaW5nPUZhbHNlKS5oZWFkKCkuZHJvcChbJ2l0ZW1faWQnLCdxdWFudGl0eScsJ3BlcmNlbnRfZGlzY291bnQnXSxheGlzPTEpKQoKCgpkZiA9IGNhbXBhaWduX2RhdGEKZGZbImRhdGUiXSA9IGRmLmFwcGx5KAogICAgbGFtYmRhIHg6IHBkLmRhdGVfcmFuZ2UoeFsic3RhcnRfZGF0ZSJdLCB4WyJlbmRfZGF0ZSJdKSwgYXhpcz0xCikKZGYgPSAoCiAgICBkZi5leHBsb2RlKCJkYXRlIiwgaWdub3JlX2luZGV4PVRydWUpCiAgICAuZHJvcChjb2x1bW5zPVsic3RhcnRfZGF0ZSIsICJlbmRfZGF0ZSJdKQopCnByaW50KGRmKQoKJycnCiNkZiA9IHBkLmNvbmNhdChbZGYsdHJhbnNhY3Rpb25fZGF0YV0sam9pbj0naW5uZXInLGF4aXM9MSkKI2RmID0gZGYubWVyZ2UodHJhbnNhY3Rpb25fZGF0YSwgbGVmdF9pbmRleD1UcnVlLCByaWdodF9pbmRleD1UcnVlLCBob3c9J2lubmVyJykKZGYgPSBwZC5jb25jYXQoW2RmLnNldF9pbmRleCgnZGF0ZScpLHRyYW5zYWN0aW9uX2RhdGEuc2V0X2luZGV4KCdkYXRlJyldLCBheGlzPTEpLmZpbGxuYShtZXRob2Q9J2ZmaWxsJykKCnByaW50KGRmKQonJycKCgo8fGZpbV9zdWZmaXh8PgogICAgICAgJ292ZXJhbGxfcHRkaXNjb3VudF9wcSddLCBheGlzID0gMSwgaW5wbGFjZT1UcnVlKQoKCjx8ZmltX2VuZHw+"]
["2b08e70e8cb32a9714fc2bdfb7335f479054fd4a-2","2b08e70e8cb32a9714fc2bdfb7335f479054fd4a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgp3ZXN0PS05Ny42CmVhc3Q9LTk3LjQKbm9ydGg9MzUuNTUKc291dGg9MzUuMzUKam9iX3pvb209MTEKCmltcG9ydCBtZXJjYW50aWxlLG9zCgpzd190aWxlPW1lcmNhbnRpbGUudGlsZSh3ZXN0LHNvdXRoLGpvYl96b29tKQpuZV90aWxlPW1lcmNhbnRpbGUudGlsZShlYXN0LG5vcnRoLGpvYl96b29tKQoKc190aWxlPXN3X3RpbGVbMV0Kd190aWxlPXN3X3RpbGVbMF0Kbl90aWxlPW5lX3RpbGVbMV0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgplX3RpbGU9bmVfdGlsZVswXQoKZm9yIHlfdGlsZSBpbiB4cmFuZ2Uobl90aWxlLHNfdGlsZSsxKToJCQkjIEZsaXBwZWQgZHVlIHRvIHh5eiB2cyB0bXMgY291bnRpbmcgb2YgdGlsZXMKCWZvciB4X3RpbGUgaW4geHJhbmdlKHdfdGlsZSxlX3RpbGUrMSk6Cjx8ZmltX2VuZHw+"]
["a4234f92b9b2de7b0461391653ac284d93174370-3","a4234f92b9b2de7b0461391653ac284d93174370","PHxmaW1fcHJlZml4fD4KIyBJdmFuIENhcnZhbGhvCiMgU29sdXRpb24gdG8gaHR0cHM6Ly9kbW9qLmNhL3Byb2JsZW0vY29jaTA2YzNwMgoKZGVmIGFic19wYXJlcyhhLGIpOgoJcmV0dXJuIGFicyhhWzBdIC0gYlswXSkgKyBhYnMoYVsxXSAtIGJbMV0pCgpkaWNpbyA9IHsKCSJBIiA6ICgwLDApLCAiQiIgOiAoMCwxKSwgIkMiIDogKDAsMiksICJEIiA6ICgwLDMpLAoJIkUiIDogKDEsMCksICJGIiA6ICgxLDEpLCAiRyIgOiAoMSwyKSwgIkgiIDogKDEsMyksCgkiSSIgOiAoMiwwKSwgIkoiIDogKDIsMSksICJLIiA6ICgyLDIpLCAiTCIgOiAoMiwzKSwKCSJNIiA6ICgzLDApLCAiTiIgOiAoMywxKSwgIk8iIDogKDMsMiksICIuIiA6ICgzLDMpCn0KCmFucyA9IDAKCmZvciBpIGluIHJhbmdlKDQpOgoJZW50cmFkYSA9IGlucHV0KCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoJZm9yIGosYyBpbiBlbnVtZXJhdGUoZW50cmFkYSk6CgkJaWYgYyA9PSAiLiI6CgkJCWNvbnRpbnVlCgkJYW5zICs9IGFic19wYXJlcygoaSxqKSwgZGljaW9bY10pCjx8ZmltX2VuZHw+"]
["9940f3ec53babc29a484d705f40bfeb15483919d-1","9940f3ec53babc29a484d705f40bfeb15483919d","PHxmaW1fcHJlZml4fD4KZnJvbSBpdGVydG9vbHMgaW1wb3J0IGlzbGljZSwgY2hhaW4KCgpkZWYgZ3JvdXBlcl9jaHVuayhuLCBpdGVyYWJsZSk6CiAgICAiZ3JvdXBlcl9jaHVuaygzLCAnWzEsMiwzLDQsNSw2LDddJykgLS0+IFsxLDIsM10gWzQsNSw2XSBbN10iCiAgICBpdCA9IGl0ZXIoaXRlcmFibGUpCiAgICB3aGlsZSBUcnVlOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgY2h1bmsgPSBpc2xpY2UoaXQsIG4pCiAgICAgICAgdHJ5OgogICAgICAgICAgICBmaXJzdF9lbCA9IG5leHQoY2h1bmspCiAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Cjx8ZmltX2VuZHw+"]
["00d6adc18ff1061656f22a5c5078a00c259752cf-3","00d6adc18ff1061656f22a5c5078a00c259752cf","PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDb3B5cmlnaHQgMjAxOSBOb2JsaXMsIEluYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgICAgICAgICAgICAgICMKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICAgICAgICAgICAgICMKIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlICAgICAgICAgICMKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAgICAgICAgICAgICMKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gICAgICMKIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kICAgICAgICAgICMKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmltcG9ydCBvcwppbXBvcnQgdW5pdHRlc3QKZnJvbSB0ZW1wZmlsZSBpbXBvcnQgbWtzdGVtcApmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQoKZnJvbSB0aWVzLmNsaS50aWVzX2Zvcm1hdCBpbXBvcnQgbWFpbgpmcm9tIHRpZXMudXRpbC50ZXN0aW5nIGltcG9ydCBjbGlfdGVzdAoKc2hvcnRfdXNhZ2UgPSAiIiJcCnVzYWdlOiB0aWVzLWZvcm1hdCBbLWhdIFstLXZlcnNpb25dIEVYUE9SVF9QQVRIIiIiCgpsb25nX3VzYWdlID0gIiIiXAp7fQoKRm9ybWF0cyBUSUVTIGV4cG9ydC5qc29uIGZpbGVzCgpwb3NpdGlvbmFsIGFyZ3VtZW50czoKICBFWFBPUlRfUEFUSCAgdGhlIHBhdGggdG8gdGhlIFRJRVMgSlNPTiBmaWxlIG9yIC0gdG8gcmVhZCBmcm9tIHN0ZGluCgpvcHRpb25hbCBhcmd1bWVudHM6CiAgLWgsIC0taGVscCAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKICAtLXZlcnNpb24gICAgcHJpbnRzIHZlcnNpb24gaW5mb3JtYXRpb24KIiIiLmZvcm1hdChzaG9ydF91c2FnZSkKCnRlc3RfaW5wdXQgPSAiIiJcCnsKICAgICJvYmplY3RJdGVtcyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJhdXRob3JpdHlJbmZvcm1hdGlvbiI6IHsKICAgICAgICAgICAgICAgICJzZWN1cml0eVRhZyI6ICJVTkNMQVNTSUZJRUQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJtZDVIYXNoIjogImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIiwKICAgICAgICAgICAgInNoYTI1Nkhhc2giOiAiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSIsCiAgICAgICAgICAgICJvYmplY3RJZCI6ICJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIgogICAgICAgIH0KICAgIF0sCiAgICAic2VjdXJpdHlUYWciOiAiVU5DTEFTU0lGSUVEIiwKICAgICJ2ZXJzaW9uIjogIjAuOSIKfSIiIgoKdGVzdF9vdXRwdXQgPSAiIiJcCnsKICAidmVyc2lvbiI6ICIwLjkiLAogICJzZWN1cml0eVRhZyI6ICJVTkNMQVNTSUZJRUQiLAogICJvYmplY3RJdGVtcyI6IFsKICAgIHsKICAgICAgIm9iamVjdElkIjogImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiLAogICAgICAic2hhMjU2SGFzaCI6ICJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIiwKICAgICAgIm1kNUhhc2giOiAiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiLAogICAgICAiYXV0aG9yaXR5SW5mb3JtYXRpb24iOiB7CiAgICAgICAgInNlY3VyaXR5VGFnIjogIlVOQ0xBU1NJRklFRCIKICAgICAgfQogICAgfQogIF0KfSIiIgoKCmNsYXNzIFRpZXNGb3JtYXRUZXN0cyhUZXN0Q2FzZSk6CgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIGZkLCBzZWxmLl9pbnB1dF9maWxlX3BhdGggPSBta3N0ZW1wKCkKICAgICAgICB3aXRoIG9zLmZkb3BlbihmZCwgJ3cnKSBhcyBmOgogICAgICAgICAgICBmLndyaXRlKHRlc3RfaW5wdXQpCgogICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgIHRyeToKICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYuX2lucHV0X2ZpbGVfcGF0aCkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgICAgICAgIHBhc3MKCiAgICBkZWYgdGVzdF9ub19hcmdzKHNlbGYpOgogICAgICAgIHdpdGggY2xpX3Rlc3Qoc2VsZiwgbWFpbikgYXMgdDoKICAgICAgICAgICAgdC5hcmdzKFtdKQogICAgICAgICAgICB0LnJldHVybl9jb2RlKDIpCiAgICAgICAgICAgIHQuc3Rkb3V0X3RleHQoKQogICAgICAgICAgICB0LnN0ZGVycihzaG9ydF91c2FnZSkKICAgICAgICAgICAgdC5zdGRlcnIoJ3RpZXMtZm9ybWF0OiBlcnJvcjogdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgYXJlIHJlcXVpcmVkOiBFWFBPUlRfUEFUSCcpCiAgICAgICAgICAgIHQuc3RkZXJyKCkKCiAgICBkZWYgdGVzdF9oZWxwX3Nob3J0KHNlbGYpOgogICAgICAgIHdpdGggY2xpX3Rlc3Qoc2VsZiwgbWFpbikgYXMgdDoKICAgICAgICAgICAgdC5hcmdzKFsnLWgnXSkKICAgICAgICAgICAgdC5yZXR1cm5fY29kZSgwKQogICAgICAgICAgICB0LnN0ZG91dF90ZXh0KGxvbmdfdXNhZ2UpCiAgICAgICAgICAgIHQuc3RkZXJyKCkKCiAgICBkZWYgdGVzdF9oZWxwX2xvbmcoc2VsZik6CiAgICAgICAgd2l0aCBjbGlfdGVzdChzZWxmLCBtYWluKSBhcyB0OgogICAgICAgICAgICB0LmFyZ3MoWyctLWhlbHAnXSkKICAgICAgICAgICAgdC5yZXR1cm5fY29kZSgwKQogICAgICAgICAgICB0LnN0ZG91dF90ZXh0KGxvbmdfdXNhZ2UpCiAgICAgICAgICAgIHQuc3RkZXJyKCkKCiAgICBkZWYgdGVzdF9zdGRpbl9zdGRvdXQoc2VsZik6CiAgICAgICAgd2l0aCBjbGlfdGVzdChzZWxmLCBtYWluKSBhcyB0OgogICAgICAgICAgICB0LmFyZ3MoWyctJ10pCiAgICAgICAgICAgIHQuc3RkaW4odGVzdF9pbnB1dCkKICAgICAgICAgICAgdC5yZXR1cm5fY29kZSgwKQogICAgICAgICAgICB0LnN0ZG91dF9qc29uKHRlc3Rfb3V0cHV0KQogICAgICAgICAgICB0LnN0ZGVycigpCgogICAgZGVmIHRlc3RfaW5maWxlX3N0ZG91dChzZWxmKToKICAgICAgICB3aXRoIGNsaV90ZXN0KHNlbGYsIG1haW4pIGFzIHQ6CiAgICAgICAgICAgIHQuYXJncyhbc2VsZi5faW5wdXRfZmlsZV9wYXRoXSkKICAgICAgICAgICAgdC5yZXR1cm5fY29kZSgwKQogICAgICAgICAgICB0LnN0ZG91dF9qc29uKHRlc3Rfb3V0cHV0KQo8fGZpbV9ob2xlfD4KICAgIGRlZiB0ZXN0X3N0ZGluX3BhcnNlX2V4Y2VwdGlvbihzZWxmKToKICAgICAgICB3aXRoIGNsaV90ZXN0KHNlbGYsIG1haW4pIGFzIHQ6CiAgICAgICAgICAgIHQuYXJncyhbJy0nXSkKICAgICAgICAgICAgdC5yZXR1cm5fY29kZSgxKQogICAgICAgICAgICB0LnN0ZG91dF90ZXh0KCkKICAgICAgICAgICAgdC5zdGRlcnIoJ2Vycm9yOiBjb3VsZCBub3QgcGFyc2UgSlNPTiBmcm9tIHN0ZGluJykKCiAgICBkZWYgdGVzdF9pbmZpbGVfZm5mKHNlbGYpOgogICAgICAgIHdpdGggY2xpX3Rlc3Qoc2VsZiwgbWFpbikgYXMgdDoKICAgICAgICAgICAgdC5hcmdzKFsnL2ZpbGUvbm90L2ZvdW5kJ10pCiAgICAgICAgICAgIHQucmV0dXJuX2NvZGUoMSkKICAgICAgICAgICAgdC5zdGRvdXRfdGV4dCgpCiAgICAgICAgICAgIHQuc3RkZXJyKCdlcnJvcjogY291bGQgbm90IHJlYWQgZnJvbSBmaWxlOiAvZmlsZS9ub3QvZm91bmQnKQoKICAgIGRlZiB0ZXN0X2luZmlsZV9wYXJzZV9leGNlcHRpb24oc2VsZik6CiAgICAgICAgd2l0aCBjbGlfdGVzdChzZWxmLCBtYWluKSBhcyB0OgogICAgICAgICAgICB0LmFyZ3MoWycvZGV2L251bGwnXSkKICAgICAgICAgICAgdC5yZXR1cm5fY29kZSgxKQogICAgICAgICAgICB0LnN0ZG91dF90ZXh0KCkKICAgICAgICAgICAgdC5zdGRlcnIoJ2Vycm9yOiBjb3VsZCBub3QgcmVhZCBmcm9tIGZpbGU6IC9kZXYvbnVsbCcpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHVuaXR0ZXN0Lm1haW4oKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICB0LnN0ZGVycigpCgo8fGZpbV9lbmR8Pg=="]
["2d40d09c89a9cb76d31db79c51534911fa35fbc8-1","2d40d09c89a9cb76d31db79c51534911fa35fbc8","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmltcG9ydCBvcwppbXBvcnQgc3lzCgo8fGZpbV9ob2xlfD4KaW1wb3J0IHN5cwppbXBvcnQgdGltZQpmcm9tIGFub2RlLnBsdWdpbi5wbHVnaW4gaW1wb3J0IFBsdWdpbgoKaW1wb3J0IHBhaG8ubXF0dC5jbGllbnQgYXMgbXF0dAppbXBvcnQgeWFtbAoKTU9ERSA9ICJRVUVSWSIKIyBNT0RFID0gIkRFTEVURSIKCkNPTkZJRyA9IE5vbmUKVElNRV9XQUlUX1NFQ1MgPSAyCkNTVl9ST1dTID0gWyIsIi5qb2luKFsiSUQiLCAiTmFtZSIsICJEb21haW4iLCAiR3JvdXAiLCAiTG9jYXRpb24iLCAiVG9waWMiLCAiTWV0YWRhdGEiXSldCgoKIyBUT0RPCiMgICAtIFdyaXRlIG91dCBzZW5zb3JzIENTViwgdGVzdCBuYW1lLCBsb2NhdGlvbiwgZG9tYWluLCBncm91cCAtIGZpbHRlciBvdXQgbWF4L21pbi9jb3VudGVycywgcmVuYW1lIG1ldHJpY3MgYXMgbmVjZXNzYXJ5CiMgICAtIE1lcmdlIGludG8gTG92ZWxhY2UgVUksIHBlcmhhcHMgZG8gbWFudWFsbHkgYmFzZWQgb24gY29ob3J0cwojICAgLSBNZXJnZSBpbnRvIEdyYWZhbmEgVUksIHBlcmhhcHMgZG8gYXV0b21hdGljYWxseSBiYXNlZCBvbiBjb2hvcnRzCgoKZGVmIG9uX2Nvbm5lY3QoY2xpZW50LCB1c2VyX2RhdGEsIGZsYWdzLCByZXR1cm5fY29kZSk6CiAgICBjbGllbnQuc3Vic2NyaWJlKCJ7fS8jIi5mb3JtYXQoQ09ORklHWyJwdWJsaXNoX3B1c2hfbWV0YWRhdGFfdG9waWMiXSkpCgoKZGVmIG9uX21lc3NhZ2UoY2xpZW50LCB1c2VyX2RhdGEsIG1lc3NhZ2UpOgogICAgdHJ5OgogICAgICAgIHRvcGljID0gbWVzc2FnZS50b3BpYy5lbmNvZGUoJ3V0Zi04JykKICAgICAgICBpZiBsZW4obWVzc2FnZS5wYXlsb2FkKSA+IDA6CiAgICAgICAgICAgIHBheWxvYWQgPSBtZXNzYWdlLnBheWxvYWQuZGVjb2RlKCd1bmljb2RlLWVzY2FwZScpLmVuY29kZSgndXRmLTgnKQogICAgICAgICAgICBwYXlsb2FkX2pzb24gPSBqc29uLmxvYWRzKHBheWxvYWQpCiAgICAgICAgICAgIHBheWxvYWRfdW5pY29kZSA9ICJcIiIgKyBwYXlsb2FkLnJlcGxhY2UoIlwiIiwgIlwiXCIiKSArICJcIiIKICAgICAgICAgICAgcGF5bG9hZF9pZF90b2tlbnMgPSBQbHVnaW4uZGF0dW1fZmllbGRfZGVjb2RlKHBheWxvYWRfanNvblsidW5pcXVlX2lkIl0pLmVuY29kZSgndXRmLTgnKS5zcGxpdCgiLiIpIFwKICAgICAgICAgICAgICAgIGlmICJ1bmlxdWVfaWQiIGluIHBheWxvYWRfanNvbiBlbHNlICgpCiAgICAgICAgICAgIHBheWxvYWRfaWRfdG9rZW5zID0gW3Rva2VuLnJlcGxhY2UoIi0iLCAiICIpLnRpdGxlKCkgZm9yIHRva2VuIGluIHBheWxvYWRfaWRfdG9rZW5zXQogICAgICAgICAgICBwYXlsb2FkX2NzdiA9ICIsIi5qb2luKFsKICAgICAgICAgICAgICAgIHBheWxvYWRfanNvblsidW5pcXVlX2lkIl0uZW5jb2RlKCd1dGYtOCcpIGlmICJ1bmlxdWVfaWQiIGluIHBheWxvYWRfanNvbiBlbHNlICIiLAogICAgICAgICAgICAgICAgcGF5bG9hZF9qc29uWyJuYW1lIl0uZW5jb2RlKCd1dGYtOCcpIGlmICJuYW1lIiBpbiBwYXlsb2FkX2pzb24gZWxzZSAiIiwKICAgICAgICAgICAgICAgIHBheWxvYWRfaWRfdG9rZW5zWzJdIGlmIGxlbihwYXlsb2FkX2lkX3Rva2VucykgPiAxIGVsc2UgIiIsCiAgICAgICAgICAgICAgICBwYXlsb2FkX2lkX3Rva2Vuc1szXSBpZiBsZW4ocGF5bG9hZF9pZF90b2tlbnMpID4gMiBlbHNlICIiLAogICAgICAgICAgICAgICAgcGF5bG9hZF9pZF90b2tlbnNbNF0gaWYgbGVuKHBheWxvYWRfaWRfdG9rZW5zKSA+IDMgZWxzZSAiIiwKICAgICAgICAgICAgICAgIHRvcGljLAogICAgICAgICAgICAgICAgcGF5bG9hZF91bmljb2RlLAogICAgICAgICAgICBdKQogICAgICAgICAgICBDU1ZfUk9XUy5hcHBlbmQocGF5bG9hZF9jc3YpCiAgICAgICAgICAgIGlmIE1PREUgPT0gIkRFTEVURSI6CiAgICAgICAgICAgICAgICBjbGllbnQucHVibGlzaCh0b3BpYywgcGF5bG9hZD1Ob25lLCBxb3M9MSwgcmV0YWluPVRydWUpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4Y2VwdGlvbjoKICAgICAgICBwcmludChleGNlcHRpb24pCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIGlmIGxlbihzeXMuYXJndikgPiAxIGFuZCBzeXMuYXJndlsxXSA9PSAiZGVsZXRlIjoKICAgICAgICBNT0RFID0gIkRFTEVURSIKICAgIHdpdGggb3Blbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpICsgIi8uLi8uLi8uLi9jb25maWcvYW5vZGUueWFtbCIsICJyIikgYXMgc3RyZWFtOgogICAgICAgIENPTkZJRyA9IHlhbWwubG9hZChzdHJlYW0pCiAgICAgICAgY2xpZW50ID0gbXF0dC5DbGllbnQoKQogICAgICAgIGNsaWVudC5vbl9jb25uZWN0ID0gb25fY29ubmVjdAogICAgICAgIGNsaWVudC5vbl9tZXNzYWdlID0gb25fbWVzc2FnZQogICAgICAgIGNsaWVudC5jb25uZWN0KENPTkZJR1sicHVibGlzaF9ob3N0Il0sIENPTkZJR1sicHVibGlzaF9wb3J0Il0sIDYwKQogICAgICAgIHRpbWVfc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgIGNsaWVudC5sb29wKCkKICAgICAgICAgICAgdGltZV9lbGFwc2VkID0gdGltZS50aW1lKCkgLSB0aW1lX3N0YXJ0CiAgICAgICAgICAgIGlmIHRpbWVfZWxhcHNlZCA+IFRJTUVfV0FJVF9TRUNTOgogICAgICAgICAgICAgICAgY2xpZW50LmRpc2Nvbm5lY3QoKQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICB3aXRoIG9wZW4oJ3NlbnNvcnNfbWV0YWRhdGEuY3N2JywgJ3cnKSBhcyBmaWxlOgogICAgICAgICAgICBmb3IgbGluZSBpbiBDU1ZfUk9XUzoKICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoInt9XG4iLmZvcm1hdChsaW5lKSkKICAgICAgICB3aXRoIG9wZW4oJ3NlbnNvcnNfZW50aXRpZXMueWFtbCcsICd3JykgYXMgZmlsZToKICAgICAgICAgICAgbGluZXMgPSBpdGVyKENTVl9ST1dTKQogICAgICAgICAgICBuZXh0KGxpbmVzKQogICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoIiAgICAgIC0gZW50aXR5OiBzZW5zb3Iue31cbiIuZm9ybWF0KGxpbmUuc3BsaXQoIiwiKVsxXS5yZXBsYWNlKCIgIiwgIl8iKS5sb3dlcigpKSkKICAgICAgICBwcmludCgie30gW3t9XSBzZW5zb3JzIi5mb3JtYXQoIkRFTEVURUQiIGlmIE1PREUgPT0gIkRFTEVURSIgZWxzZSAiREVURUNURUQiLCBsZW4oQ1NWX1JPV1MpIC0gMSkpCjx8ZmltX3N1ZmZpeHw+CnN5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpICsgIi8uLi8uLi8uLiIpCgppbXBvcnQganNvbgoKPHxmaW1fZW5kfD4="]
["778894e0af109711354bd4e50c0fe6edc3fba024-1","778894e0af109711354bd4e50c0fe6edc3fba024","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCmZyb20gc2NyYXB5LmRvd25sb2FkZXJtaWRkbGV3YXJlcy5yZWRpcmVjdCBpbXBvcnQgUmVkaXJlY3RNaWRkbGV3YXJlCgpjbGFzcyBSZWRpcmVjdERvd25sb2FkZXJNaWRkbGV3YXJlKFJlZGlyZWN0TWlkZGxld2FyZSk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHNldHRpbmdzKToKICAgICAgICBzdXBlcihSZWRpcmVjdERvd25sb2FkZXJNaWRkbGV3YXJlLCBzZWxmKS5fX2luaXRfXyhzZXR0aW5ncykKCiAgICBkZWYgcHJvY2Vzc19yZXF1ZXN0KHNlbGYsIHJlcXVlc3QsIHNwaWRlcik6CiAgICAgICAgbG9nZ2VyLmluZm8oIiVzOiVzICVzIiAlICh0eXBlKHNlbGYpLl9fbmFtZV9fLCAgJ3Byb2Nlc3NfcmVxdWVzdCcsICBbcmVxdWVzdCwgc3BpZGVyXSkpIAogICAgICAgIHJldHVybiBOb25lCgogICAgZGVmIHByb2Nlc3NfcmVzcG9uc2Uoc2VsZiwgcmVxdWVzdCwgcmVzcG9uc2UsIHNwaWRlcik6CiAgICAgICAgbG9nZ2VyLmluZm8oIiVzOiVzICVzIiAlICh0eXBlKHNlbGYpLl9fbmFtZV9fLCAgJ3Byb2Nlc3NfcmVzcG9uc2UnLCAgW3JlcXVlc3QsIHJlc3BvbnNlLCBzcGlkZXIsIHJlc3BvbnNlLmhlYWRlcnNdKSkgCiAgICAgICAgbG9nZ2VyLmluZm8oIiVzOiVzICVzIiAlICh0eXBlKHNlbGYpLl9fbmFtZV9fLCAgJ3Byb2Nlc3NfcmVzcG9uc2UgdGVzdCcsICBbJ0xvY2F0aW9uJyBpbiByZXNwb25zZS5oZWFkZXJzLCAgcmVzcG9uc2UuaGVhZGVycy5nZXQoJ0xvY2F0aW9uJyldKSkKPHxmaW1faG9sZXw+CiAgICBkZWYgcHJvY2Vzc19leGNlcHRpb24oc2VsZiwgcmVxdWVzdCwgZXhjZXB0aW9uLCBzcGlkZXIpOgogICAgICAgIGxvZ2dlci5pbmZvKCIlczolcyAlcyIgJSAodHlwZShzZWxmKS5fX25hbWVfXywgICdwcm9jZXNzX2V4Y2VwdGlvbicsICBbcmVxdWVzdCwgZXhjZXB0aW9uLCBzcGlkZXJdKSkgCiAgICAgICAgcmV0dXJuIE5vbmUKCiAgICBkZWYgX3N1cGVyKHNlbGYpOgogICAgICAgIHJldHVybiBzdXBlcihSZWRpcmVjdERvd25sb2FkZXJNaWRkbGV3YXJlLCBzZWxmKQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGZyb21fY3Jhd2xlcihjbHMsIGNyYXdsZXIpOgogICAgICAgIHJldHVybiBjbHMoY3Jhd2xlci5zZXR0aW5ncykKPHxmaW1fc3VmZml4fD4KICAgICAgICByZXR1cm4gc2VsZi5fc3VwZXIoKS5wcm9jZXNzX3Jlc3BvbnNlKHJlcXVlc3QsIHJlc3BvbnNlLCBzcGlkZXIpOwoKPHxmaW1fZW5kfD4="]
["7411bd6f05d1823188d929240ed5a3fa6f87656b-5","7411bd6f05d1823188d929240ed5a3fa6f87656b","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBtb2RlOiBweXRob24gLSotCiMgLSotIGNvZGluZzogdXRmLTggLSotCgojIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgojIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCiMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCjx8ZmltX2VuZHw+"]
["5ca134dd328fe0c5d22db07524c7db4d2a1e69a6-2","5ca134dd328fe0c5d22db07524c7db4d2a1e69a6","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwpmcm9tIG1vdGlmc2VhcmNoIGltcG9ydCBtb3RpZlNlYXJjaAoKIyUlCiMgQ291bnRpbmcgbW90aWZzIGZvciB0aGUgYmFjdGVyaWFsIGdETkEgZG93bmxvYWRlZCB3aXRoIGRvd25sb2FkZWRpbmdfZG5hLnB5CgojIERlZmluZSBtb3RpZnMKbW90cyA9IFsnVE5UQycsICdHVENUJywgJ0dHQVRDJywgJ0NDVEEnXQoKIyBJbnN0YW50aWF0ZSBtb3RpZnNlYXJjaAptb3RpZiA9IG1vdGlmU2VhcmNoKCkKCiMgQ291bnQgbW90aWZzIGluIEZBU1RBIGZpbGUKbW90aWZfZGYgPSBtb3RpZi5jb3VudCgnYmFjdGVyaWFsLWdETkEtcmVuYW1lZC5mYScsIG1vdHMpCgojIFNhdmUgbW90aWYgZGYgdG8gZmlsZQptb3RpZl9kZi50b19jc3YoJ2JhY19jb3VudHMuY3N2JykKCiMgUmVhZCBzYXZlZCBkZiBmcm9tIGZpbGUKIyBtb3RpZl9kZiA9IHBkLnJlYWRfY3N2KCdiYWNfY291bnRzLmNzdicpCgojIFBsb3QgbW90aWYgbW9kaWZpY2F0aW9uIGJ1cmRlciBiYXIgcGxvdCBmb3IgYWxsIG1vdGlmcwptb3RpZi5tb3RpZl9iYXIobW90aWZfZGYsIG1vdHMpCgojIFBsb3QgZ2Vub21lIGxlbmd0aCBmb3Igc3BlY2llcyBpbiBNYgptb3RpZi5tb3RpZl9iYXJfbGVuZ3Rocyhtb3RpZl9kZikKCiMgTGluZWFyIHJlZ3Jlc3Npb24gdG8gY29tcGFyZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBtb2RpZmljYXRpb24gYnVyZGVuIGFuZCBnZW5vbWUgbGVuZ3RoCm1vdGlmLmNvdW50X3ZzX2xlbmd0aChtb3RpZl9kZiwgbW90cykKCgojJSUgU2F2aW5nIGV4YW1wbGUgcGxvdHMKCm1vdGlmLm1vdGlmX2Jhcihtb3RpZl9kZiwgbW90cykuc2F2ZWZpZygnaW1nL21vdGlmc2VhcmNoLWJhci1wbG90JywgYmJveF9pbmNoZXMgPSAndGlnaHQnLCBkcGk9MzAwKQoKbW90aWYubW90aWZfYmFyX2xlbmd0aHMobW90aWZfZGYpLnNhdmVmaWcoJ2ltZy9tb3RpZnNlYXJjaC1iYXItcGxvdC1sZW5ndGhzJywgYmJveF9pbmNoZXMgPSAndGlnaHQnLCBkcGk9MzAwKQoKbW90aWYuY291bnRfdnNfbGVuZ3RoKG1vdGlmX2RmLCBtb3RzKS5zYXZlZmlnKCdpbWcvbW90aWZzZWFyY2gtbGluLXJlZycsIGJib3hfaW5jaGVzID0gJ3RpZ2h0JywgZHBpPTMwMCkKCgoKCgojJSUKIyBDb3VudGluZyBtb3RpZnMgd2l0aGluIGh1bWFuIGF1dG9zb21lcyBpbmRpdmlkdWFsbHkKCmZyb20gbW90aWZzZWFyY2ggaW1wb3J0IG1vdGlmU2VhcmNoCmZyb20gbmF0c29ydCBpbXBvcnQgaW5kZXhfbmF0c29ydGVkCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCgptb3RzID0gWydUTlRDJ10KCm1vdGlmID0gbW90aWZTZWFyY2goKQoKIyBDb3VudCBtb3RpZnMgaW4gYXV0b3NvbWVzLiBTbG93IHRvIHJ1bgojaHVtYW5fY291bnRzID0gbW90aWYuY291bnQoJ2Rvd25sb2FkZWRfRE5BL2h1bWFuLWdkbmEvMS0yMi1ocy1nZG5hLXJlbmFtZWQuZmEnLCBtb3RzKQoKIyBTYXZlIGh1bWFuIG1vdGlmIGZyZXF1ZW5jeSBkZgojIGh1bWFuX2NvdW50cy50b19jc3YoJ2h1bWFuX2NvdW50cy5jc3YnKQoKIyBSZWFkIGh1bWFuIG1vdGlmIGZyZXF1ZW5jeSBkZgpodW1hbl9jb3VudHMgPSBwZC5yZWFkX2NzdignaHVtYW5fY291bnRzLmNzdicpCgojIyBPcmRlciAnY2hyMToyMicgaW50byB0aGVpciBuYXR1cmFsIG9yZGVyCiMgS2V5IGFyZ3VtZW50IGluIHNvcnRfdmFsdWVzIGFsbG93cyBmb3IgYWx0ZXJuYXRpdmUgc29ydGluZyBtZXRob2QgdG8gYmUgYXBwbGllZAojIGluZGV4X25hdHNvcnRlZCBmaXJzdCBuYXR1cmFsbHkgb3JkZXIgdGhlICdSZWNvcmQnIGNvbHVtbgojIG5wLmFyZ3NvcnQgdGhlbiByZXR1cm5zIGFuIGFycmF5IGZvciB0aGUgc29ydGVkIGluZGV4X25hdHNvcnRlZCBsaXN0LCBsb3cgdG8gaGlnaCwgYXMgYSBuZXcgYXJyYXkKIyBzb3J0X3ZhbHVlcyBzb3J0cyAnUmVjb3JkJyBiYXNlZCBvbiB0aGVpciByZXR1cm5lZCwgb3JkZXJlZCBpbmRpY2VzLCBsb3cgdG8gaGlnaCAKIyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yOTU4MDk3OC9uYXR1cmFsbHktc29ydGluZy1wYW5kYXMtZGF0YWZyYW1lCiMgVW5kZXJzdGFuZGluZyBrZXk6CiMgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvODk2NjUzOC9zeW50YXgtYmVoaW5kLXNvcnRlZGtleS1sYW1iZGEKaHVtYW5fY291bnRzX3NvcnRlZCA9IGh1bWFuX2NvdW50cy5zb3J0X3ZhbHVlcyhieT0nUmVjb3JkJywga2V5PWxhbWJkYSB4OiBucC5hcmdzb3J0KGluZGV4X25hdHNvcnRlZChodW1hbl9jb3VudHNbJ1JlY29yZCddKSkpCgojIFBsb3QgbW90aWYgZnJlcXVlbmN5IGZvciBlYWNoIGNocm9tb3NvbWUKbW90aWYubW90aWZfYmFyKGh1bWFuX2NvdW50c19zb3J0ZWQsIG1vdHMpCgojJSUgRGV0ZXJtaW5lIFNFTSBvZiBhdXRvc29tZSBtb2RpZmljYXRpb24KaW1wb3J0IG51bXB5IGFzIG5wCgpodW1hbl9zdGQgPSBucC5zdGQoaHVtYW5fY291bnRzWydQZXJjIEROQSBtb2RpZmllZCAodG90YWwpJ10pCgpwcmludChodW1hbl9zdGQpCgojJSUgQ29tcGFyaW5nIGJhY3RlcmlhbCBtb3RpZiBmcmVxdWVuY3kgd2l0aCBodW1hbgoKCmh1bWFuX2NvdW50cyA9IHBkLnJlYWRfY3N2KCdodW1hbl9jb3VudHMuY3N2JykKCmJhY19jb3VudHMgPSBwZC5yZWFkX2NzdignYmFjX2NvdW50cy5jc3YnKQoKIyBDb25zb2xpZGF0ZSBhdXRvc29tZSBkYXRhIGFuZCBmaW5kIHRoZSBhdmVyYWdlIG1vZGlmaWNhdGlvbiBhY3Jvc3MgY2hyb21vc29tZXMKaHNfZGF0YSA9IHsKICAgICAgICAgICAiUmVjb3JkIjogWydILnNhcGllbnMnXSwKICAgICAgICAgICAiVG90YWwgY29tcGxlbWVudCBzaXRlcyI6IFtzdW0oaHVtYW5fY291bnRzWydUb3RhbCBjb21wbGVtZW50IHNpdGVzJ10pXSwKICAgICAgICAgICAiVG90YWwgcmV2ZXJzZSBjb21wbGVtZW50IHNpdGVzIjogW3N1bShodW1hbl9jb3VudHNbJ1RvdGFsIHJldmVyc2UgY29tcGxlbWVudCBzaXRlcyddKV0sCiAgICAgICAgICAgIlRvdGFsIG51bWJlciBvZiBzaXRlcyI6IFtzdW0oaHVtYW5fY291bnRzWydUb3RhbCBudW1iZXIgb2Ygc2l0ZXMnXSldLAogICAgICAgICAgICJQZXJjIEROQSBtb2RpZmllZCAodG90YWwpIjogW25wLm1lYW4oaHVtYW5fY291bnRzWydQZXJjIEROQSBtb2RpZmllZCAodG90YWwpJ10pXSwKICAgICAgICAgICAibW90aWYgc2VxIjogWydUTlRDJ10sCiAgICAgICAgICAgInJlY29yZCBsZW5ndGgiOiBbc3VtKGh1bWFuX2NvdW50c1sncmVjb3JkIGxlbmd0aCddKV0sCiAgICAgICAgICAgInJlY29yZCBsZW5ndGggKE1iKSI6IFtzdW0oaHVtYW5fY291bnRzWydyZWNvcmQgbGVuZ3RoIChNYiknXSldCiAgICAgICAgfQoKIyBTYXZlIGRpY3QgYXMgZGF0YWZyYW1lCnBkLkRhdGFGcmFtZS5mcm9tX2RpY3QoZGF0YT1oc19kYXRhLCBvcmllbnQ9J2NvbHVtbnMnKS50b19jc3YoJ2h1bWFuX2NvdW50c19zdW1tYXJ5LmNzdicpCgojIEV4dHJhY3QgZGF0YSBmb3Igb25seSBFLiBjb2xpIGFuZCBULiBhY3F1YXRpY3VzIGZvciBUTlRDIG1vdGlmCnRhcV9lY29sX2dkbmEgPSBiYWNfY291bnRzWygoYmFjX2NvdW50c1snUmVjb3JkJ10gPT0gJ1QuYXF1YXRpY3VzJykgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChiYWNfY291bnRzWydSZWNvcmQnXSA9PSAnRS5jb2xpKEsxMiknKSkKICAgICAgICAgICAgICAgICAgICAmIChiYWNfY291bnRzWydtb3RpZiBzZXEnXSA9PSAnVE5UQycpXQoKIyBSZWFkIGNvbnNvbGlkYXRlZCBodW1hbiBtb3RpZiBkYXRhCmhzX2dkbmEgPSBwZC5yZWFkX2NzdignaHVtYW5fY291bnRzX3N1bW1hcnkuY3N2JykKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBDb25jYXRlbmF0ZSBiYWN0ZXJpYWwgd2l0aCBodW1hbiBkYXRhIGFuZCBzYXZlCnRhcV9lY29sX2dkbmEuYXBwZW5kKGhzX2dkbmEpLnRvX2NzdigndGFxX2Vjb2xfaHVtYW5fZ2RuYV9jb3VudHMuY3N2JykKCiMgUmVhZCBiYWN0ZXJpYWwtaHVtYW4gbW90aWYgZnJlcXVlbmN5IGRhdGEKPHxmaW1fZW5kfD4="]
["f1404b3a3640b0fcd566c376933516cb4f1f98df-4","f1404b3a3640b0fcd566c376933516cb4f1f98df","PHxmaW1fcHJlZml4fD4KIwojIFB5U05NUCBNSUIgbW9kdWxlIEpVTklQRVItSlMtSUYtRVhULU1JQiAoaHR0cDovL3NubXBsYWJzLmNvbS9weXNtaSkKIyBBU04uMSBzb3VyY2UgZmlsZTovLy9Vc2Vycy9kYXZ3YW5nNC9EZXYvbWlicy5zbm1wbGFicy5jb20vYXNuMS9KVU5JUEVSLUpTLUlGLUVYVC1NSUIKIyBQcm9kdWNlZCBieSBweXNtaS0wLjMuNCBhdCBNb24gQXByIDI5IDE5OjQ4OjM4IDIwMTkKIyBPbiBob3N0IERBVldBTkc0LU0tMTQ3NSBwbGF0Zm9ybSBEYXJ3aW4gdmVyc2lvbiAxOC41LjAgYnkgdXNlciBkYXZ3YW5nNAojIFVzaW5nIFB5dGhvbiB2ZXJzaW9uIDMuNy4zIChkZWZhdWx0LCBNYXIgMjcgMjAxOSwgMDk6MjM6MTUpIAojCkludGVnZXIsIE9jdGV0U3RyaW5nLCBPYmplY3RJZGVudGlmaWVyID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJBU04xIiwgIkludGVnZXIiLCAiT2N0ZXRTdHJpbmciLCAiT2JqZWN0SWRlbnRpZmllciIpCk5hbWVkVmFsdWVzLCA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiQVNOMS1FTlVNRVJBVElPTiIsICJOYW1lZFZhbHVlcyIpClNpbmdsZVZhbHVlQ29uc3RyYWludCwgVmFsdWVTaXplQ29uc3RyYWludCwgVmFsdWVSYW5nZUNvbnN0cmFpbnQsIENvbnN0cmFpbnRzVW5pb24sIENvbnN0cmFpbnRzSW50ZXJzZWN0aW9uID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJBU04xLVJFRklORU1FTlQiLCAiU2luZ2xlVmFsdWVDb25zdHJhaW50IiwgIlZhbHVlU2l6ZUNvbnN0cmFpbnQiLCAiVmFsdWVSYW5nZUNvbnN0cmFpbnQiLCAiQ29uc3RyYWludHNVbmlvbiIsICJDb25zdHJhaW50c0ludGVyc2VjdGlvbiIpCmlmSW5kZXgsID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJJRi1NSUIiLCAiaWZJbmRleCIpCmpueEpzSWYsID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJKVU5JUEVSLUpTLVNNSSIsICJqbnhKc0lmIikKTm90aWZpY2F0aW9uR3JvdXAsIE1vZHVsZUNvbXBsaWFuY2UgPSBtaWJCdWlsZGVyLmltcG9ydFN5bWJvbHMoIlNOTVB2Mi1DT05GIiwgIk5vdGlmaWNhdGlvbkdyb3VwIiwgIk1vZHVsZUNvbXBsaWFuY2UiKQppc28sIFRpbWVUaWNrcywgTW9kdWxlSWRlbnRpdHksIENvdW50ZXIzMiwgSXBBZGRyZXNzLCBNaWJJZGVudGlmaWVyLCBPYmplY3RJZGVudGl0eSwgQml0cywgVW5zaWduZWQzMiwgTWliU2NhbGFyLCBNaWJUYWJsZSwgTWliVGFibGVSb3csIE1pYlRhYmxlQ29sdW1uLCBJbnRlZ2VyMzIsIENvdW50ZXI2NCwgR2F1Z2UzMiwgTm90aWZpY2F0aW9uVHlwZSA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiU05NUHYyLVNNSSIsICJpc28iLCAiVGltZVRpY2tzIiwgIk1vZHVsZUlkZW50aXR5IiwgIkNvdW50ZXIzMiIsICJJcEFkZHJlc3MiLCAiTWliSWRlbnRpZmllciIsICJPYmplY3RJZGVudGl0eSIsICJCaXRzIiwgIlVuc2lnbmVkMzIiLCAiTWliU2NhbGFyIiwgIk1pYlRhYmxlIiwgIk1pYlRhYmxlUm93IiwgIk1pYlRhYmxlQ29sdW1uIiwgIkludGVnZXIzMiIsICJDb3VudGVyNjQiLCAiR2F1Z2UzMiIsICJOb3RpZmljYXRpb25UeXBlIikKRGlzcGxheVN0cmluZywgVGV4dHVhbENvbnZlbnRpb24gPSBtaWJCdWlsZGVyLmltcG9ydFN5bWJvbHMoIlNOTVB2Mi1UQyIsICJEaXNwbGF5U3RyaW5nIiwgIlRleHR1YWxDb252ZW50aW9uIikKam54SnNJZk1JQiA9IE1vZHVsZUlkZW50aXR5KCgxLCAzLCA2LCAxLCA0LCAxLCAyNjM2LCAzLCAzOSwgMSwgMSwgMSkpCmpueEpzSWZNSUIuc2V0UmV2aXNpb25zKCgnMjAwNy0wNS0wOSAwMDowMCcsKSkKaWYgbWliQnVpbGRlci5sb2FkVGV4dHM6IGpueEpzSWZNSUIuc2V0TGFzdFVwZGF0ZWQoJzIwMDcwNTA5MDAwMFonKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogam54SnNJZk1JQi5zZXRPcmdhbml6YXRpb24oJ0p1bmlwZXIgTmV0d29ya3MsIEluYy4nKQpqbnhKc0lmRXh0ZW5zaW9uID0gTWliSWRlbnRpZmllcigoMSwgMywgNiwgMSwgNCwgMSwgMjYzNiwgMywgMzksIDEsIDEsIDEsIDEpKQpqbnhKc0lmTW9uVGFibGUgPSBNaWJUYWJsZSgoMSwgMywgNiwgMSwgNCwgMSwgMjYzNiwgMywgMzksIDEsIDEsIDEsIDEsIDEpLCApCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiBqbnhKc0lmTW9uVGFibGUuc2V0U3RhdHVzKCdjdXJyZW50JykKam54SnNJZk1vbkVudHJ5ID0gTWliVGFibGVSb3coKDEsIDMsIDYsIDEsIDQsIDEsIDI2MzYsIDMsIDM5LCAxLCAxLCAxLCAxLCAxLCAxKSwgKS5zZXRJbmRleE5hbWVzKCgwLCAiSUYtTUlCIiwgImlmSW5kZXgiKSkKaWYgbWliQnVpbGRlci5sb2FkVGV4dHM6IGpueEpzSWZNb25FbnRyeS5zZXRTdGF0dXMoJ2N1cnJlbnQnKQpqbnhKc0lmTW9uSW5JY21wID0gTWliVGFibGVDb2x1bW4oKDEsIDMsIDYsIDEsIDQsIDEsIDI2MzYsIDMsIDM5LCAxLCAxLCAxLCAxLCAxLCAxLCAxKSwgQ291bnRlcjMyKCkpLnNldE1heEFjY2VzcygicmVhZG9ubHkiKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogam54SnNJZk1vbkluSWNtcC5zZXRTdGF0dXMoJ2N1cnJlbnQnKQpqbnhKc0lmTW9uSW5TZWxmID0gTWliVGFibGVDb2x1bW4oKDEsIDMsIDYsIDEsIDQsIDEsIDI2MzYsIDMsIDM5LCAxLCAxLCAxLCAxLCAxLCAxLCAyKSwgQ291bnRlcjMyKCkpLnNldE1heEFjY2VzcygicmVhZG9ubHkiKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogam54SnNJZk1vbkluU2VsZi5zZXRTdGF0dXMoJ2N1cnJlbnQnKQpqbnhKc0lmTW9uSW5WcG4gPSBNaWJUYWJsZUNvbHVtbigoMSwgMywgNiwgMSwgNCwgMSwgMjYzNiwgMywgMzksIDEsIDEsIDEsIDEsIDEsIDEsIDMpLCBDb3VudGVyMzIoKSkuc2V0TWF4QWNjZXNzKCJyZWFkb25seSIpCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiBqbnhKc0lmTW9uSW5WcG4uc2V0U3RhdHVzKCdjdXJyZW50JykKam54SnNJZk1vbkluUG9saWN5UGVybWl0ID0gTWliVGFibGVDb2x1bW4oKDEsIDMsIDYsIDEsIDQsIDEsIDI2MzYsIDMsIDM5LCAxLCAxLCAxLCAxLCAxLCAxLCA0KSwgQ291bnRlcjY0KCkpLnNldE1heEFjY2VzcygicmVhZG9ubHkiKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogam54SnNJZk1vbkluUG9saWN5UGVybWl0LnNldFN0YXR1cygnY3VycmVudCcpCmpueEpzSWZNb25PdXRQb2xpY3lQZXJtaXQgPSBNaWJUYWJsZUNvbHVtbigoMSwgMywgNiwgMSwgNCwgMSwgMjYzNiwgMywgMzksIDEsIDEsIDEsIDEsIDEsIDEsIDUpLCBDb3VudGVyNjQoKSkuc2V0TWF4QWNjZXNzKCJyZWFkb25seSIpCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiBqbnhKc0lmTW9uT3V0UG9saWN5UGVybWl0LnNldFN0YXR1cygnY3VycmVudCcpCmpueEpzSWZNb25Db25uID0gTWliVGFibGVDb2x1bW4oKDEsIDMsIDYsIDEsIDQsIDEsIDI2MzYsIDMsIDM5LCAxLCAxLCAxLCAxLCAxLCAxLCA2KSwgQ291bnRlcjMyKCkpLnNldE1heEFjY2VzcygicmVhZG9ubHkiKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogam54SnNJZk1vbkNvbm4uc2V0U3RhdHVzKCdjdXJyZW50JykKam54SnNJZk1vbkluTWNhc3QgPSBNaWJUYWJsZUNvbHVtbigoMSwgMywgNiwgMSwgNCwgMSwgMjYzNiwgMywgMzksIDEsIDEsIDEsIDEsIDEsIDEsIDcpLCBDb3VudGVyMzIoKSkuc2V0TWF4QWNjZXNzKCJyZWFkb25seSIpCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiBqbnhKc0lmTW9uSW5NY2FzdC5zZXRTdGF0dXMoJ2N1cnJlbnQnKQpqbnhKc0lmTW9uT3V0TWNhc3QgPSBNaWJUYWJsZUNvbHVtbigoMSwgMywgNiwgMSwgNCwgMSwgMjYzNiwgMywgMzksIDEsIDEsIDEsIDEsIDEsIDEsIDgpLCBDb3VudGVyMzIoKSkuc2V0TWF4QWNjZXNzKCJyZWFkb25seSIpCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiBqbnhKc0lmTW9uT3V0TWNhc3Quc2V0U3RhdHVzKCdjdXJyZW50JykKam54SnNJZk1vblBvbGljeURlbnkgPSBNaWJUYWJsZUNvbHVtbigoMSwgMywgNiwgMSwgNCwgMSwgMjYzNiwgMywgMzksIDEsIDEsIDEsIDEsIDEsIDEsIDkpLCBDb3VudGVyMzIoKSkuc2V0TWF4QWNjZXNzKCJyZWFkb25seSIpCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiBqbnhKc0lmTW9uUG9saWN5RGVueS5zZXRTdGF0dXMoJ2N1cnJlbnQnKQpqbnhKc0lmTW9uTm9HYXRlUGFyZW50ID0gTWliVGFibGVDb2x1bW4oKDEsIDMsIDYsIDEsIDQsIDEsIDI2MzYsIDMsIDM5LCAxLCAxLCAxLCAxLCAxLCAxLCAxMCksIENvdW50ZXIzMigpKS5zZXRNYXhBY2Nlc3MoInJlYWRvbmx5IikKaWYgbWliQnVpbGRlci5sb2FkVGV4dHM6IGpueEpzSWZNb25Ob0dhdGVQYXJlbnQuc2V0U3RhdHVzKCdjdXJyZW50JykKam54SnNJZk1vblRjcFByb3h5RHJvcCA9IE1pYlRhYmxlQ29sdW1uKCgxLCAzLCA2LCAxLCA0LCAxLCAyNjM2LCAzLCAzOSwgMSwgMSwgMSwgMSwgMSwgMSwgMTEpLCBDb3VudGVyMzIoKSkuc2V0TWF4QWNjZXNzKCJyZWFkb25seSIpCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiBqbnhKc0lmTW9uVGNwUHJveHlEcm9wLnNldFN0YXR1cygnY3VycmVudCcpCmpueEpzSWZNb25Ob0RpcCA9IE1pYlRhYmxlQ29sdW1uKCgxLCAzLCA2LCAxLCA0LCAxLCAyNjM2LCAzLCAzOSwgMSwgMSwgMSwgMSwgMSwgMSwgMTIpLCBDb3VudGVyMzIoKSkuc2V0TWF4QWNjZXNzKCJyZWFkb25seSIpCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiBqbnhKc0lmTW9uTm9EaXAuc2V0U3RhdHVzKCdjdXJyZW50JykKam54SnNJZk1vbk5vTnNwVHVubmVsID0gTWliVGFibGVDb2x1bW4oKDEsIDMsIDYsIDEsIDQsIDEsIDI2MzYsIDMsIDM5LCAxLCAxLCAxLCAxLCAxLCAxLCAxMyksIENvdW50ZXIzMigpKS5zZXRNYXhBY2Nlc3MoInJlYWRvbmx5IikKaWYgbWliQnVpbGRlci5sb2FkVGV4dHM6IGpueEpzSWZNb25Ob05zcFR1bm5lbC5zZXRTdGF0dXMoJ2N1cnJlbnQnKQpqbnhKc0lmTW9uTm9OYXRDb24gPSBNaWJUYWJsZUNvbHVtbigoMSwgMywgNiwgMSwgNCwgMSwgMjYzNiwgMywgMzksIDEsIDEsIDEsIDEsIDEsIDEsIDE0KSwgQ291bnRlcjMyKCkpLnNldE1heEFjY2VzcygicmVhZG9ubHkiKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogam54SnNJZk1vbk5vTmF0Q29uLnNldFN0YXR1cygnY3VycmVudCcpCmpueEpzSWZNb25JbnZhbGlkWm9uZSA9IE1pYlRhYmxlQ29sdW1uKCgxLCAzLCA2LCAxLCA0LCAxLCAyNjM2LCAzLCAzOSwgMSwgMSwgMSwgMSwgMSwgMSwgMTUpLCBDb3VudGVyMzIoKSkuc2V0TWF4QWNjZXNzKCJyZWFkb25seSIpCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiBqbnhKc0lmTW9uSW52YWxpZFpvbmUuc2V0U3RhdHVzKCdjdXJyZW50JykKam54SnNJZk1vbklwQ2xzRmFpbCA9IE1pYlRhYmxlQ29sdW1uKCgxLCAzLCA2LCAxLCA0LCAxLCAyNjM2LCAzLCAzOSwgMSwgMSwgMSwgMSwgMSwgMSwgMTYpLCBDb3VudGVyMzIoKSkuc2V0TWF4QWNjZXNzKCJyZWFkb25seSIpCjx8ZmltX2hvbGV8PgppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogam54SnNJZk1vbk11bHRpVXNlckF1dGhEcm9wLnNldFN0YXR1cygnY3VycmVudCcpCmpueEpzSWZNb25Mb29wTXVsdGlEaXBEcm9wID0gTWliVGFibGVDb2x1bW4oKDEsIDMsIDYsIDEsIDQsIDEsIDI2MzYsIDMsIDM5LCAxLCAxLCAxLCAxLCAxLCAxLCAxOSksIENvdW50ZXIzMigpKS5zZXRNYXhBY2Nlc3MoInJlYWRvbmx5IikKaWYgbWliQnVpbGRlci5sb2FkVGV4dHM6IGpueEpzSWZNb25Mb29wTXVsdGlEaXBEcm9wLnNldFN0YXR1cygnY3VycmVudCcpCmpueEpzSWZNb25BZGRyU3Bvb2YgPSBNaWJUYWJsZUNvbHVtbigoMSwgMywgNiwgMSwgNCwgMSwgMjYzNiwgMywgMzksIDEsIDEsIDEsIDEsIDEsIDEsIDIwKSwgQ291bnRlcjMyKCkpLnNldE1heEFjY2VzcygicmVhZG9ubHkiKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogam54SnNJZk1vbkFkZHJTcG9vZi5zZXRTdGF0dXMoJ2N1cnJlbnQnKQpqbnhKc0lmTW9uTHBEcm9wID0gTWliVGFibGVDb2x1bW4oKDEsIDMsIDYsIDEsIDQsIDEsIDI2MzYsIDMsIDM5LCAxLCAxLCAxLCAxLCAxLCAxLCAyMSksIENvdW50ZXIzMigpKS5zZXRNYXhBY2Nlc3MoInJlYWRvbmx5IikKaWYgbWliQnVpbGRlci5sb2FkVGV4dHM6IGpueEpzSWZNb25McERyb3Auc2V0U3RhdHVzKCdjdXJyZW50JykKam54SnNJZk1vbk51bGxab25lID0gTWliVGFibGVDb2x1bW4oKDEsIDMsIDYsIDEsIDQsIDEsIDI2MzYsIDMsIDM5LCAxLCAxLCAxLCAxLCAxLCAxLCAyMiksIENvdW50ZXIzMigpKS5zZXRNYXhBY2Nlc3MoInJlYWRvbmx5IikKaWYgbWliQnVpbGRlci5sb2FkVGV4dHM6IGpueEpzSWZNb25OdWxsWm9uZS5zZXRTdGF0dXMoJ2N1cnJlbnQnKQpqbnhKc0lmTW9uTm9HYXRlID0gTWliVGFibGVDb2x1bW4oKDEsIDMsIDYsIDEsIDQsIDEsIDI2MzYsIDMsIDM5LCAxLCAxLCAxLCAxLCAxLCAxLCAyMyksIENvdW50ZXIzMigpKS5zZXRNYXhBY2Nlc3MoInJlYWRvbmx5IikKaWYgbWliQnVpbGRlci5sb2FkVGV4dHM6IGpueEpzSWZNb25Ob0dhdGUuc2V0U3RhdHVzKCdjdXJyZW50JykKam54SnNJZk1vbk5vTWlub3JTZXNzID0gTWliVGFibGVDb2x1bW4oKDEsIDMsIDYsIDEsIDQsIDEsIDI2MzYsIDMsIDM5LCAxLCAxLCAxLCAxLCAxLCAxLCAyNCksIENvdW50ZXIzMigpKS5zZXRNYXhBY2Nlc3MoInJlYWRvbmx5IikKaWYgbWliQnVpbGRlci5sb2FkVGV4dHM6IGpueEpzSWZNb25Ob01pbm9yU2Vzcy5zZXRTdGF0dXMoJ2N1cnJlbnQnKQpqbnhKc0lmTW9uTnZlY0VyciA9IE1pYlRhYmxlQ29sdW1uKCgxLCAzLCA2LCAxLCA0LCAxLCAyNjM2LCAzLCAzOSwgMSwgMSwgMSwgMSwgMSwgMSwgMjUpLCBDb3VudGVyMzIoKSkuc2V0TWF4QWNjZXNzKCJyZWFkb25seSIpCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiBqbnhKc0lmTW9uTnZlY0Vyci5zZXRTdGF0dXMoJ2N1cnJlbnQnKQpqbnhKc0lmTW9uVGNwU2VxID0gTWliVGFibGVDb2x1bW4oKDEsIDMsIDYsIDEsIDQsIDEsIDI2MzYsIDMsIDM5LCAxLCAxLCAxLCAxLCAxLCAxLCAyNiksIENvdW50ZXIzMigpKS5zZXRNYXhBY2Nlc3MoInJlYWRvbmx5IikKaWYgbWliQnVpbGRlci5sb2FkVGV4dHM6IGpueEpzSWZNb25UY3BTZXEuc2V0U3RhdHVzKCdjdXJyZW50JykKam54SnNJZk1vbklsbGVnYWxQYWsgPSBNaWJUYWJsZUNvbHVtbigoMSwgMywgNiwgMSwgNCwgMSwgMjYzNiwgMywgMzksIDEsIDEsIDEsIDEsIDEsIDEsIDI3KSwgQ291bnRlcjMyKCkpLnNldE1heEFjY2VzcygicmVhZG9ubHkiKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogam54SnNJZk1vbklsbGVnYWxQYWsuc2V0U3RhdHVzKCdjdXJyZW50JykKam54SnNJZk1vbk5vUm91dGUgPSBNaWJUYWJsZUNvbHVtbigoMSwgMywgNiwgMSwgNCwgMSwgMjYzNiwgMywgMzksIDEsIDEsIDEsIDEsIDEsIDEsIDI4KSwgQ291bnRlcjMyKCkpLnNldE1heEFjY2VzcygicmVhZG9ubHkiKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogam54SnNJZk1vbk5vUm91dGUuc2V0U3RhdHVzKCdjdXJyZW50JykKam54SnNJZk1vbkF1dGhGYWlsID0gTWliVGFibGVDb2x1bW4oKDEsIDMsIDYsIDEsIDQsIDEsIDI2MzYsIDMsIDM5LCAxLCAxLCAxLCAxLCAxLCAxLCAyOSksIENvdW50ZXIzMigpKS5zZXRNYXhBY2Nlc3MoInJlYWRvbmx5IikKaWYgbWliQnVpbGRlci5sb2FkVGV4dHM6IGpueEpzSWZNb25BdXRoRmFpbC5zZXRTdGF0dXMoJ2N1cnJlbnQnKQpqbnhKc0lmTW9uU2FJbmFjdGl2ZSA9IE1pYlRhYmxlQ29sdW1uKCgxLCAzLCA2LCAxLCA0LCAxLCAyNjM2LCAzLCAzOSwgMSwgMSwgMSwgMSwgMSwgMSwgMzApLCBDb3VudGVyMzIoKSkuc2V0TWF4QWNjZXNzKCJyZWFkb25seSIpCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiBqbnhKc0lmTW9uU2FJbmFjdGl2ZS5zZXRTdGF0dXMoJ2N1cnJlbnQnKQpqbnhKc0lmTW9uTm9TYSA9IE1pYlRhYmxlQ29sdW1uKCgxLCAzLCA2LCAxLCA0LCAxLCAyNjM2LCAzLCAzOSwgMSwgMSwgMSwgMSwgMSwgMSwgMzEpLCBDb3VudGVyMzIoKSkuc2V0TWF4QWNjZXNzKCJyZWFkb25seSIpCmlmIG1pYkJ1aWxkZXIubG9hZFRleHRzOiBqbnhKc0lmTW9uTm9TYS5zZXRTdGF0dXMoJ2N1cnJlbnQnKQpqbnhKc0lmTW9uU2VsZlBrdERyb3AgPSBNaWJUYWJsZUNvbHVtbigoMSwgMywgNiwgMSwgNCwgMSwgMjYzNiwgMywgMzksIDEsIDEsIDEsIDEsIDEsIDEsIDMyKSwgQ291bnRlcjMyKCkpLnNldE1heEFjY2VzcygicmVhZG9ubHkiKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogam54SnNJZk1vblNlbGZQa3REcm9wLnNldFN0YXR1cygnY3VycmVudCcpCm1pYkJ1aWxkZXIuZXhwb3J0U3ltYm9scygiSlVOSVBFUi1KUy1JRi1FWFQtTUlCIiwgam54SnNJZk1vbklwQ2xzRmFpbD1qbnhKc0lmTW9uSXBDbHNGYWlsLCBqbnhKc0lmTW9uTm9EaXA9am54SnNJZk1vbk5vRGlwLCBqbnhKc0lmTW9uTG9vcE11bHRpRGlwRHJvcD1qbnhKc0lmTW9uTG9vcE11bHRpRGlwRHJvcCwgam54SnNJZk1vbk91dE1jYXN0PWpueEpzSWZNb25PdXRNY2FzdCwgam54SnNJZk1vbk51bGxab25lPWpueEpzSWZNb25OdWxsWm9uZSwgam54SnNJZk1vbk5vTWlub3JTZXNzPWpueEpzSWZNb25Ob01pbm9yU2Vzcywgam54SnNJZk1vbkluSWNtcD1qbnhKc0lmTW9uSW5JY21wLCBqbnhKc0lmTW9uQ29ubj1qbnhKc0lmTW9uQ29ubiwgam54SnNJZk1vbk5vR2F0ZT1qbnhKc0lmTW9uTm9HYXRlLCBqbnhKc0lmTW9uUG9saWN5RGVueT1qbnhKc0lmTW9uUG9saWN5RGVueSwgam54SnNJZk1vblRhYmxlPWpueEpzSWZNb25UYWJsZSwgam54SnNJZk1JQj1qbnhKc0lmTUlCLCBqbnhKc0lmRXh0ZW5zaW9uPWpueEpzSWZFeHRlbnNpb24sIGpueEpzSWZNb25JbGxlZ2FsUGFrPWpueEpzSWZNb25JbGxlZ2FsUGFrLCBqbnhKc0lmTW9uU2FJbmFjdGl2ZT1qbnhKc0lmTW9uU2FJbmFjdGl2ZSwgam54SnNJZk1vbk5vU2E9am54SnNJZk1vbk5vU2EsIGpueEpzSWZNb25UY3BQcm94eURyb3A9am54SnNJZk1vblRjcFByb3h5RHJvcCwgam54SnNJZk1vbk5vR2F0ZVBhcmVudD1qbnhKc0lmTW9uTm9HYXRlUGFyZW50LCBqbnhKc0lmTW9uSW5TZWxmPWpueEpzSWZNb25JblNlbGYsIGpueEpzSWZNb25Ob05hdENvbj1qbnhKc0lmTW9uTm9OYXRDb24sIGpueEpzSWZNb25PdXRQb2xpY3lQZXJtaXQ9am54SnNJZk1vbk91dFBvbGljeVBlcm1pdCwgam54SnNJZk1vbk5vTnNwVHVubmVsPWpueEpzSWZNb25Ob05zcFR1bm5lbCwgam54SnNJZk1vbkludmFsaWRab25lPWpueEpzSWZNb25JbnZhbGlkWm9uZSwgam54SnNJZk1vblNlbGZQa3REcm9wPWpueEpzSWZNb25TZWxmUGt0RHJvcCwgam54SnNJZk1vbkVudHJ5PWpueEpzSWZNb25FbnRyeSwgUFlTTk1QX01PRFVMRV9JRD1qbnhKc0lmTUlCLCBqbnhKc0lmTW9uTm9Sb3V0ZT1qbnhKc0lmTW9uTm9Sb3V0ZSwgam54SnNJZk1vbkxwRHJvcD1qbnhKc0lmTW9uTHBEcm9wLCBqbnhKc0lmTW9uQXV0aERyb3A9am54SnNJZk1vbkF1dGhEcm9wLCBqbnhKc0lmTW9uTXVsdGlVc2VyQXV0aERyb3A9am54SnNJZk1vbk11bHRpVXNlckF1dGhEcm9wLCBqbnhKc0lmTW9uVGNwU2VxPWpueEpzSWZNb25UY3BTZXEsIGpueEpzSWZNb25JblBvbGljeVBlcm1pdD1qbnhKc0lmTW9uSW5Qb2xpY3lQZXJtaXQsIGpueEpzSWZNb25Jbk1jYXN0PWpueEpzSWZNb25Jbk1jYXN0LCBqbnhKc0lmTW9uQXV0aEZhaWw9am54SnNJZk1vbkF1dGhGYWlsLCBqbnhKc0lmTW9uSW5WcG49am54SnNJZk1vbkluVnBuLCBqbnhKc0lmTW9uTnZlY0Vycj1qbnhKc0lmTW9uTnZlY0Vyciwgam54SnNJZk1vbkFkZHJTcG9vZj1qbnhKc0lmTW9uQWRkclNwb29mKQo8fGZpbV9zdWZmaXh8PgppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogam54SnNJZk1vbklwQ2xzRmFpbC5zZXRTdGF0dXMoJ2N1cnJlbnQnKQpqbnhKc0lmTW9uQXV0aERyb3AgPSBNaWJUYWJsZUNvbHVtbigoMSwgMywgNiwgMSwgNCwgMSwgMjYzNiwgMywgMzksIDEsIDEsIDEsIDEsIDEsIDEsIDE3KSwgQ291bnRlcjMyKCkpLnNldE1heEFjY2VzcygicmVhZG9ubHkiKQppZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogam54SnNJZk1vbkF1dGhEcm9wLnNldFN0YXR1cygnY3VycmVudCcpCmpueEpzSWZNb25NdWx0aVVzZXJBdXRoRHJvcCA9IE1pYlRhYmxlQ29sdW1uKCgxLCAzLCA2LCAxLCA0LCAxLCAyNjM2LCAzLCAzOSwgMSwgMSwgMSwgMSwgMSwgMSwgMTgpLCBDb3VudGVyMzIoKSkuc2V0TWF4QWNjZXNzKCJyZWFkb25seSIpCjx8ZmltX2VuZHw+"]
["7a367860defdebcb8a49857f204368c3157568ce-1","7a367860defdebcb8a49857f204368c3157568ce","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBveWFtbAppbXBvcnQgbG9nZ2luZwoKTE9HR0VSID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgpjbGFzcyBDb25maWdDb3JvbmE6CiAgICAiIiIKICAgIFRoaXMgY2xhc3Mgd2lsbCBob3VzZSBhbGwgb2YgdGhlIGF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoCiAgICBmaWxlcGF0aHMgYW5kIGFueSBvdGhlciBjb25maWctYWRqYWNlbnQgYXR0cmlidXRlcyB3ZSBuZWVkCiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lPU5vbmUpOgogICAgICAgIHNlbGYubG9hZF9jb25maWcoKQoKICAgIGRlZiBsb2FkX2NvbmZpZ19maWxlKHNlbGYpOgogICAgICAgIGZpbGVwYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCiAgICAgICAgY29uZmlnX2ZpbGUgPSBvcy5wYXRoLmpvaW4oZmlsZXBhdGgsICdjb25maWdfY29yb25hLnlhbWwnKQogICAgICAgIHdpdGggb3Blbihjb25maWdfZmlsZSkgYXMgZjoKICAgICAgICAgICAgY29uZmlnID0gb3lhbWwuc2FmZV9sb2FkKGYpCgogICAgICAgIHJldHVybiBjb25maWcKCiAgICBkZWYgbG9hZF9jb25maWcoc2VsZik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBjb25maWcgPSBzZWxmLmxvYWRfY29uZmlnX2ZpbGUoKQogICAgICAgIGZvciBrZXksIHZhbHVlIGluIGNvbmZpZy5pdGVtcygpOgogICAgICAgICAgICBMT0dHRVIuaW5mbyhmIkNvbmZpZ0Nvcm9uYSBsb2FkIGNvbmZpZzogc2V0dGluZyBhdHRyaWJ1dGUgZm9yIHtrZXl9IikKICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrZXksIHZhbHVlKQo8fGZpbV9lbmR8Pg=="]
["745279bec14440ac6baf037ea4b22261629afbcd-1","745279bec14440ac6baf037ea4b22261629afbcd",{"$cut":{"chars":18128,"head":"PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGUKCicnJwpGVU5DVElPTlMgKGF1eGlsaWFyKSAtIHNpbXBsaWZ5IHByb2JsZW0gCicnJwoKZGVmIGNoZWNrX2xhdW5jaGFibGUoY29tcF9saXN0LCBsYXVuY2gpOgogICAgdG90YWxfd2VpZ2h0PTAKICAgIGZvciBjb21wIGluIGNvbXBfbGlzdDoKICAgICAgICB0b3RhbF93ZWlnaHQrPWNvbXAudwogICAgaWYgdG90YWxfd2VpZ2h0PmxhdW5jaC5wbDoKICAgICAgICByZXR1cm4gRmFsc2UKICAgIGVsaWYgdG90YWxfd2VpZ2h0PT0gbGF1bmNoLnBsOgogICAgICAgIHJldHVybiAtMQogICAgZWxzZToKICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIApkZWYgbGF1bmNoX2Nvc3QoY29tcF9saXN0LGxhdW5jaCk6CiAgICB0b3RhbF9jb3N0PTAKICAgIGZvciBjb21wIGluIGNvbXBfbGlzdDoKICAgICAgICB0b3RhbF9jb3N0Kz1jb21wLncqbGF1bmNoLmNvc3R2CiAgICBpZiB0b3RhbF9jb3N0ICE9MDoKICAgICAgICB0b3RhbF9jb3N0Kz1sYXVuY2guY29zdGYKICAgIHJldHVybiB0b3RhbF9jb3N0CgpkZWYgY2hlY2tfbGlzdChzdGF0ZSwgbm9kZV9saXN0KToKICAgIGZvciBub2RlIGluIG5vZGVfbGlzdDoKICAgICAgICBpZiBzb3J0ZWQobm9kZS5zdGF0ZS5jb21wLCBrZXk9bGFtYmRhIHg6IHguaWQpID09IHNvcnRlZChzdGF0ZS5jb21wLCBrZXk9bGFtYmRhIHg6IHguaWQpIGFuZCBub2RlLnN0YXRlLmw9PXN0YXRlLmw6ICN0aGV5IGhhdmUgdGhlIHNhbWUgY29tcAogICAgICAgICAgICByZXR1cm4gbm9kZQogICAgcmV0dXJuIEZhbHNlCiAgICAKZGVmIHNvbHV0aW9uKHBhdGgsIGNvc3Q9MCwgaT0wKToKICAgIGlmIHBhdGggPT0gRmFsc2U6CiAgICAgICAgCiAgICAgICAgcHJpbnQoJ1x0IFRoZXJlIGlzIG5vIHNvbHV0aW9uIGZvciB0aGUgZ2l2ZW4gcHJvYmxlbS4nKQogICAgICAgIHJldHVybgogICAgZWxzZToKICAgICAgICBmb3IgbGF1bmNoIGluIHBhdGg6CiAgICAgICAgICAgIGlmIGxhdW5jaFsxXSA9PSBbXTogIyBubyBjb21wb25lbnQgc2VudAogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgcHJpbnQoJ0F0IGxhdW5jaDogJyxsYXVuY2hbMF0sJ1x0IHNlbmQ6ICcsIGxhdW5jaFsxXSkKICAgIHByaW50KCdcdCBUb3RhbCBsYXVuY2ggY29zdDonLGNvc3QsJ1x0IGl0ZXJhdGlvbjonLGkpCgoKJycnCkNMQVNTRVMgKGF1eGlsaWFyKSAtIHJlYWQgZnJvbSBmaWxlCiAgICBjb21wb25lbnQsIGVkZ2UsIGxhdW5jaAonJycKCmNsYXNzIE15Q29tcG9uZW50OgogICAgZGVmIF9faW5pdF9fKHNlbGYsaWQxPSdub25lJyx3PTApOgogICAgICAgIHNlbGYuaWQgPSBpZDEKICAgICAgICBzZWxmLncgPSBmbG9hdCh3KQogICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgIHJldHVybiAnQ29tcDp7fSh7fSknLmZvcm1hdChzZWxmLmlkLCBzZWxmLncpCiAgICBkZWYgdmlldyhzZWxmKToKICAgICAgICBwcmludCgne306IElEPXt9LCBXZWlnaHQ9e30nLmZvcm1hdChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5pZCwgc2VsZi53KSkKICAgICAgICAKY2xhc3MgTXlDb25uZWN0OgogICAgZGVmIF9faW5pdF9fKHNlbGYsaWQxPSdub25lJyxpZDI9J25vbmUnKToKICAgICAgICBzZWxmLmlkMSA9IGlkMQogICAgICAgIHNlbGYuaWQyID0gaWQyICAgICAgCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgcmV0dXJuICdDb246e30te30nLmZvcm1hdChzZWxmLmlkMSxzZWxmLmlkMikKICAgIGRlZiB2aWV3KHNlbGYpOgogICAgICAgIHByaW50KCd7fTogSUQxPXt9LCBJRDI9e30nLmZvcm1hdChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5pZDEsIHNlbGYuaWQyKSkKICAgIApjbGFzcyBNeUxhdW5jaDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLGRhdGVlPSczMTAxMjIwMDAnLCBwYXlsb2FkPTAsIENvc3RGaXhlZD0wLCBDb3N0VmFyPTApOgogICAgICAgIHNlbGYuZGF0ZT1kYXRlKHllYXI9aW50KGRhdGVlWzQ6OF0pLCBtb250aD1pbnQoZGF0ZWVbMjo0XSksIGRheT1pbnQoZGF0ZWVbMDoyXSkpCiAgICAgICAgc2VsZi5wbD1mbG9hdChwYXlsb2FkKQogICAgICAgIHNlbGYuY29zdGY9ZmxvYXQoQ29zdEZpeGVkKQogICAgICAgIHNlbGYuY29zdHY9ZmxvYXQoQ29zdFZhcikKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gJ0xhdTp7fVt7fV0gKHt9K3t9KScuZm9ybWF0KHNlbGYuZGF0ZSwgc2VsZi5wbCwgc2VsZi5jb3N0Ziwgc2VsZi5jb3N0dikKICAgIGRlZiB2aWV3KHNlbGYpOgogICAgICAgIHByaW50KCd7fTogRGF0ZT17fSwgUGF5bG9hZD17fSwgQ29zdHM9KEZpeD17fSwgVmFyPXt9KScuZm9ybWF0KAogICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyxzZWxmLmRhdGUsc2VsZi5wbCxzZWxmLmNvc3RmLHNlbGYuY29zdHYpKQogICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgaWYgbm90IGJvb2woc2VsZikgYW5kIG5vdCBib29sKG90aGVyKTogIyBpZiBib3RoIGxhdW5jaGVzIGFyZSBzZXQgYXMgZmFsc2UKICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICBlbGlmIG5vdCBib29sKHNlbGYpIG9yIG5vdCBib29sKG90aGVyKTogI2lmIG9ubHkgb25lIGxhdW5jaCBpcyBmYWxzZQogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gc2VsZi5kYXRlPT1vdGhlci5kYXRlCiAgICAgICAgICAgIAonJycKQ0xBU1NFUyAobWFpbikgLSBuZWNlc3NhcnkgZm9yIGdlbmVyYWwgc2VhcmNoCiAgICBzdGF0ZSwgbm9kZSwgcHJvYmxlbQonJycKCmNsYXNzIE15U3RhdGU6CiAgICBkZWYgX19pbml0X18oc2VsZixsY29tcD1bXSxubGF1bj1bXSk6CiAgICAgICAgJycnY29tcG9uZW50cyBpbiBzcGFjZSArIG5leHQgbGF1bmNoJycnCiAgICAgICAgc2VsZi5jb21wPWxjb21wCiAgICAgICAgc2VsZi5sPW5sYXVuCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgcmV0dXJuICdTdHQ6e30oe30pJy5mb3JtYXQoc2VsZi5jb21wLCBzZWxmLmwpCiAg"}}]
["1e62fd969f79509e229e80f7d5073b64a8fc026f-5","1e62fd969f79509e229e80f7d5073b64a8fc026f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBzeXMKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCmltcG9ydCBnemlwCmltcG9ydCBtYXRoCmltcG9ydCBzdWJwcm9jZXNzCmZyb20gX2N0eXBlcyBpbXBvcnQgQXJndW1lbnRFcnJvcgoKZnJvbSBjb21tb25fdXRpbCBpbXBvcnQgcmVhZEZpbGVNYXAKZnJvbSBCb3d0aWVDb3VudEl0ZW0gaW1wb3J0IEJvd3RpZUNvdW50SXRlbSwgcmVhZEJvd3RpZVRleHRGaWxlCgpkZWYgcHJlcGFyZV9ib3d0aWVfaW5kZXgobG9nZ2VyLCBzZXF1ZW5jZSwgdGhyZWFkKToKCiAgYm93dGllSW5kZWNpZXMgPSByZWFkQm93dGllSW5kZXhMaXN0KGNhdGVnb3J5RmlsZSkKCiAgaWYgbm90IHNsdXJtOgogICAgZm9yIGJvd3RpZUluZGV4IGluIGJvd3RpZUluZGVjaWVzOgogICAgICBsb2dnZXIuaW5mbygiQnVpbGRpbmcgaW5kZXggZm9yICVzIC4uLiIgJSBib3d0aWVJbmRleC5GYXN0YSkKICAgICAgaW5kZXhEb25lID0gYm93dGllSW5kZXguSW5kZXggKyAiLmluZGV4LmRvbmUiCiAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhpbmRleERvbmUpIG9yIGZvcmNlOgogICAgICAgIHN1YnByb2Nlc3MuY2FsbChbJ2Jvd3RpZS1idWlsZCcsICctcScsICctLXRocmVhZHMnLCBzdHIodGhyZWFkKSwgYm93dGllSW5kZXguRmFzdGEsIGJvd3RpZUluZGV4LkluZGV4XSkKICAgICAgICBvcGVuKGluZGV4RG9uZSwgJ3d0JykuY2xvc2UoKQogICAgcmV0dXJuCgpkZWYgc2VxdWVudGlhbF9jb3VudChsb2dnZXIsIGZhc3RxTGlzdEZpbGUsIGRiTGlzdEZpbGUsIG91dHB1dEZpbGUsIGNvdW50TGlzdEZpbGUpOgogIGxvZ2dlci5pbmZvKCJTdGFydCBjb3VudCAuLi4iKQoKICBmYXN0cUZpbGVNYXAgPSByZWFkRmlsZU1hcChmYXN0cUxpc3RGaWxlKQogIHByaW50KGZhc3RxRmlsZU1hcCkKCiAgZGJGaWxlTWFwID0gcmVhZEZpbGVNYXAoZGJMaXN0RmlsZSkKPHxmaW1faG9sZXw+CiAgY291bnRGaWxlTWFwID0gcmVhZEZpbGVNYXAoY291bnRMaXN0RmlsZSkgaWYgY291bnRMaXN0RmlsZSAhPSBOb25lIGVsc2Uge30KICBwcmludChjb3VudEZpbGVNYXApCiAgCjx8ZmltX3N1ZmZpeHw+CiAgcHJpbnQoZGJGaWxlTWFwKQoKICAjcHJpbnQoYm93dGllRmlsZU1hcCkKCjx8ZmltX2VuZHw+"]
["851941c8672d60a1315a17bddd04d32c4a355fdc-3","851941c8672d60a1315a17bddd04d32c4a355fdc","PHxmaW1fcHJlZml4fD4KIyBUaGlzIGluaXQgZmlsZSBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsCiMgSSBkbyBub3QgdW5kZXJzdGFuZCBhbGwgdGhlIGRldGFpbHMgb2YgUHl0aG9uIGluaXQgZmlsZXMgeWV0LgojCiMgTW92ZSBzdHVmZiB0byB0b3AgbGV2ZWwgbW9kdWxlIHNvIHdlIGNhbiBkbwojCiMgaW1wb3J0IGFjcm9ib3RpY3MgYXMgYWIKIwojIHNjZW5lID0gYWIuU2NlbmUoLi4uKQojIHNoYXBlID0gYWIuQm94KC4uLikKIwojIGZyb20gYWNyb2JvdGljcy5zaGFwZXMgaW1wb3J0IEJveAojIGZyb20gYWNyb2JvdGljcy5nZW9tZXRyeSBpbXBvcnQgU2NlbmUKIwojIGFuZCBoYXZpbmcgdG9vIG1hbnkgaW1wb3J0IHN0YXRlbWVudHMgYXQgdGhlIHRvcCBvZiBlYWNoIGZpbGUKIyBJdCBpcyBtYWlubHkgbWVhbnQgZm9yIHVzZXJzLCBub3QgZm9yIHVzZSBpbiBzb3VyY2UgZmlsZXMgaW4KIyB0aGUgbGlyYmFyeSBpdHNlbGYuCiMKIyBJIGV4cGxpY2l0bHkgaW1wb3J0IGFsbCBjbGFzc2VzIGFuZCBmdW5jdGlvbnMgdG8gYXZvaWQgaW1wb3J0aW5nCiMgbmFtZXMgdGhhdCB3aGVyZSBpbXBvcnRlZCBpbiB0aGUgbW9kdWxlIGZpbGUsIGFuZCB0aGVyZWZvcmUgaW1wb3J0aW5nCiMgdGhlIHNhbWUgbmFtZSB0aHJvdWdoIG11bHRpcGxlIGRpZmZlcmVudCBwYXRocy4KIwojIEFsc28gdGhpcyBjbGVhcmx5IHNob3dzIHdoYXQgaXMgbWVhbnQgdG8gYmUgdXNlciBmYWNpbmcuCiMgSSBzaG91bGQgYWRkIF8gdG8gbm9uIHVzZXIgZmFjaW5nIHN0dWZmLi4uCiMKIwpmcm9tIC5yb2JvdCBpbXBvcnQgVG9vbApmcm9tIC5yb2JvdF9leGFtcGxlcyBpbXBvcnQgKAogICAgUGxhbmFyQXJtLAogICAgU3BoZXJpY2FsQXJtLAogICAgU3BoZXJpY2FsV3Jpc3QsCiAgICBBbnRocm9wb21vcnBoaWNBcm0sCiAgICBBcm0yLAogICAgS3VrYSwKICAgIEt1a2FPblJhaWwsCikKZnJvbSAudG9vbF9leGFtcGxlcyBpbXBvcnQgdG9yY2gsIHRvcmNoMiwgdG9yY2gzCmZyb20gLnNoYXBlcyBpbXBvcnQgQm94LCBDeWxpbmRlcgpmcm9tIC5nZW9tZXRyeSBpbXBvcnQgU2NlbmUKCiMgUGF0aCBjb25zdHJ1Y3Rpb24KZnJvbSAucGF0aC5wYXRoX3B0IGltcG9ydCBUb2xQb3NpdGlvblB0LCBUb2xFdWxlclB0LCBUb2xRdWF0UHQsIEZyZWVPcmllbnRhdGlvblB0CmZyb20gLnBhdGguZmFjdG9yeSBpbXBvcnQgY3JlYXRlX2xpbmUsIGNyZWF0ZV9jaXJjbGUsIGNyZWF0ZV9hcmMKZnJvbSAucGF0aC50b2xlcmFuY2UgaW1wb3J0ICgKICAgIE5vVG9sZXJhbmNlLAogICAgVG9sZXJhbmNlLAogICAgUXVhdGVybmlvblRvbGVyYW5jZSwKICAgIFN5bW1ldHJpY1RvbGVyYW5jZSwKKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojIFBsYW5uaW5nIHNldHRpbmdzIGFuZCBzb2x2ZXJzCmZyb20gLnBhdGguc2FtcGxpbmcgaW1wb3J0IFNhbXBsaW5nU2V0dGluZywgU2VhcmNoU3RyYXRlZ3kKZnJvbSAucGxhbm5pbmcuc2V0dGluZ3MgaW1wb3J0IE9wdFNldHRpbmdzLCBTb2x2ZXJTZXR0aW5ncwpmcm9tIC5wbGFubmluZy50eXBlcyBpbXBvcnQgU29sdmVNZXRob2QsIENvc3RGdW50aW9uVHlwZSwgUGxhbm5pbmdTZXR1cAo8fGZpbV9lbmR8Pg=="]
["cf14c14d0110b8809989681a1a265da5e4d2fe79-2","cf14c14d0110b8809989681a1a265da5e4d2fe79","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKZnJvbSB0ZW5zb3JmbG93LmtlcmFzLm1vZGVscyBpbXBvcnQgTW9kZWwKZnJvbSB0ZW5zb3JmbG93LmtlcmFzLmxheWVycyBpbXBvcnQgKAogICAgQ29udjJELCBEZW5zZSwgTGF5ZXIsIElucHV0LCBMYXllck5vcm1hbGl6YXRpb24sIFBlcm11dGUKKQpmcm9tIGVpbm9wcy5sYXllcnMudGVuc29yZmxvdyBpbXBvcnQgUmVhcnJhbmdlLCBSZWR1Y2UKCgpjbGFzcyBNbHBCbG9jayhMYXllcik6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZGltLCBoaWRkZW5fZGltLCAqKmt3YXJncyk6CiAgICAgICAgc3VwZXIoTWxwQmxvY2ssIHNlbGYpLl9faW5pdF9fKCoqa3dhcmdzKQogICAgICAgIHNlbGYuZGltID0gZGltCiAgICAgICAgc2VsZi5kZW5zZTEgPSBEZW5zZShoaWRkZW5fZGltLCBhY3RpdmF0aW9uPXRmLm5uLmdlbHUpCiAgICAgICAgc2VsZi5kZW5zZTIgPSBEZW5zZShkaW0pCgogICAgZGVmIGNhbGwoc2VsZiwgeCk6CiAgICAgICAgeCA9IHNlbGYuZGVuc2UxKHgpCiAgICAgICAgeCA9IHNlbGYuZGVuc2UyKHgpCiAgICAgICAgcmV0dXJuIHgKCiAgICBkZWYgY29tcHV0ZV9vdXRwdXRfc2hhcGUoc2VsZiwgaW5wdXRfc2hhcGUpOgogICAgICAgIHJldHVybiAoaW5wdXRfc2hhcGVbMF0sIHNlbGYuZGltKQoKCmNsYXNzIE1peGVyQmxvY2soTGF5ZXIpOgogICAgZGVmIF9faW5pdF9fKAogICAgICAgICAgICBzZWxmLAogICAgICAgICAgICBudW1fcGF0Y2hlcywKICAgICAgICAgICAgY2hhbm5lbF9kaW0sCiAgICAgICAgICAgIHRva2Vuc19tbHBfZGltLAogICAgICAgICAgICBjaGFubmVsc19tbHBfZGltLAogICAgICAgICAgICAqKmt3YXJncwogICAgKToKICAgICAgICBzdXBlcihNaXhlckJsb2NrLCBzZWxmKS5fX2luaXRfXygqKmt3YXJncykKICAgICAgICBzZWxmLmxheWVyX25vcm0gPSBbTGF5ZXJOb3JtYWxpemF0aW9uKGF4aXM9MSkgZm9yIF8gaW4gcmFuZ2UoMildCiAgICAgICAgc2VsZi5wZXJtdXRlID0gUGVybXV0ZSgoMiwgMSkpCiAgICAgICAgc2VsZi5tbHBfYmxvY2sgPSBbCiAgICAgICAgICAgIE1scEJsb2NrKG51bV9wYXRjaGVzLCB0b2tlbnNfbWxwX2RpbSwgbmFtZT0ndG9rZW5fbWl4aW5nJyksCiAgICAgICAgICAgIE1scEJsb2NrKGNoYW5uZWxfZGltLCBjaGFubmVsc19tbHBfZGltLCBuYW1lPSdjaGFubmVsX21peGluZycpCiAgICAgICAgXQoKICAgIGRlZiBjYWxsKHNlbGYsIHgpOgogICAgICAgIHkgPSBzZWxmLmxheWVyX25vcm1bMF0oeCkKICAgICAgICB5ID0gc2VsZi5wZXJtdXRlKHkpCiAgICAgICAgeSA9IHNlbGYubWxwX2Jsb2NrWzBdKHkpCiAgICAgICAgeSA9IHNlbGYucGVybXV0ZSh5KQogICAgICAgIHggPSB4ICsgeQogICAgICAgIHkgPSBzZWxmLmxheWVyX25vcm1bMV0oeCkKICAgICAgICByZXR1cm4geCArIHNlbGYubWxwX2Jsb2NrWzFdKHkpCgogICAgZGVmIGNvbXB1dGVfb3V0cHV0X3NoYXBlKHNlbGYsIGlucHV0X3NoYXBlKToKICAgICAgICByZXR1cm4gaW5wdXRfc2hhcGUKCgpkZWYgX21scF9taXhlcigKICAgIGlucHV0X3NoYXBlPSgyMjQsIDIyNCwgMyksCiAgICBuX2NsYXNzZXM9MTAsCiAgICBuX2Jsb2Nrcz04LAogICAgcGF0Y2hfc2l6ZT0xNiwKICAgIGhpZGRlbl9kaW09NTEyLAogICAgdG9rZW5zX21scF9kaW09MjU2LAogICAgY2hhbm5lbHNfbWxwX2RpbT0yMDQ4Cik6CiAgICBoZWlnaHQsIHdpZHRoLCBfID0gaW5wdXRfc2hhcGUKICAgIG51bV9wYXRjaGVzID0gKGhlaWdodCp3aWR0aCkvLyhwYXRjaF9zaXplKioyKQogICAgaW5wdXRzID0gSW5wdXQoc2hhcGU9aW5wdXRfc2hhcGUpCgogICAgeCA9IENvbnYyRCgKICAgICAgICBoaWRkZW5fZGltLAogICAgICAgIGtlcm5lbF9zaXplPXBhdGNoX3NpemUsCiAgICAgICAgc3RyaWRlcz1wYXRjaF9zaXplLAogICAgICAgIG5hbWU9J3N0ZW0nKShpbnB1dHMpCgogICAgeCA9IFJlYXJyYW5nZSgnbiBoIHcgYyAtPiBuIChoIHcpIGMnKSh4KQoKICAgIGZvciBfIGluIHJhbmdlKG5fYmxvY2tzKToKICAgICAgICB4ID0gTWl4ZXJCbG9jaygKICAgICAgICAgICAgbnVtX3BhdGNoZXM9bnVtX3BhdGNoZXMsCiAgICAgICAgICAgIGNoYW5uZWxfZGltPWhpZGRlbl9kaW0sCiAgICAgICAgICAgIHRva2Vuc19tbHBfZGltPXRva2Vuc19tbHBfZGltLAogICAgICAgICAgICBjaGFubmVsc19tbHBfZGltPWNoYW5uZWxzX21scF9kaW0KICAgICAgICApKHgpCgogICAgeCA9IExheWVyTm9ybWFsaXphdGlvbihuYW1lPSdwcmVfaGVhZF9sYXllcl9ub3JtJykoeCkKICAgIHggPSBSZWR1Y2UoJ2IgbiBjIC0+IGIgYycsICdtZWFuJykoeCkKPHxmaW1faG9sZXw+CgpkZWYgbWxwX21peGVyKHNwZWNfY29kZSwgaW5wdXRfc2hhcGU9KDIyNCwgMjI0LCAzKSwgbl9jbGFzc2VzPTEwKToKICAgICIiIkNyZWF0ZSBhbiBNTFAgTWl4ZXIgbW9kZWwuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgc3BlY19jb2RlOiBzdHIKICAgICAgICBTcGVjaWZpY2F0aW9uIGNvZGUgYWNjb3JkaW5nIHRvIHRoZSBwYXJhbWV0ZXJzIHByZXNlbnRlZCBpbgogICAgICAgIHRhYmxlIDEgb2YgdGhlIHBhcGVyLiBJdCBtdXN0IGFzc3VtZSBvbmUgb2YgdGhlc2VzIHZhbHVlczoKICAgICAgICBgWyAnUzMyJywgJ1MxNicsICdCMzInLCAnQjE2JywgJ0wzMicsICdMMTYnLCAnSDE0JyBdYAogICAgaW5wdXRfc2hhcGU6IHR1cGxlCiAgICAgICAgSW5wdXQgaW1hZ2Ugc2hhcGUuCiAgICBuX2NsYXNzZXM6IGludAogICAgICAgIE1heGltdW0gbnVtYmVyIG9mIGNsYXNzZXMgdGhhdCBleGlzdHMgaW4gdGhlIGRhdGFzZXQuCgogICAgUmV0dXJuCiAgICAtLS0tLS0KICAgICAgICBSZXR1cm5zIHRoZSBzZWxlY3RlZCBNTFAgTWl4ZXIgbW9kZWwuCgogICAgUmVmZXJlbmNlCiAgICAtLS0tLS0tLS0KICAgIE1MUC1NaXhlcjogQW4gYWxsLU1MUCBBcmNoaXRlY3R1cmUgZm9yIFZpc2lvbgogICAgaHR0cHM6Ly9hcnhpdi5vcmcvcGRmLzIxMDUuMDE2MDEucGRmCiAgICAiIiIKICAgIFBBUkFNRVRFUlMgPSB7CiAgICAgICAgIlMzMiI6IFs4LCAzMiwgNTEyLCAyNTYsIDIwNDhdLAogICAgICAgICJTMTYiOiBbOCwgMTYsIDUxMiwgMjU2LCAyMDQ4XSwKICAgICAgICAiQjMyIjogWzEyLCAzMiwgNzY4LCAzODQsIDMwNzJdLAogICAgICAgICJCMTYiOiBbMTIsIDE2LCA3NjgsIDM4NCwgMzA3Ml0sCiAgICAgICAgIkwzMiI6IFsyNCwgMzIsIDEwMjQsIDUxMiwgNDA5Nl0sCiAgICAgICAgIkwxNiI6IFsyNCwgMTYsIDEwMjQsIDUxMiwgNDA5Nl0sCiAgICAgICAgIkgxNCI6IFszMiwgMTQsIDEyODAsIDY0MCwgNTEyMF0KICAgIH0KCiAgICByZXR1cm4gX21scF9taXhlcihpbnB1dF9zaGFwZSwgbl9jbGFzc2VzLCAqUEFSQU1FVEVSU1tzcGVjX2NvZGVdKQo8fGZpbV9zdWZmaXh8PgogICAgb3V0ID0gRGVuc2Uobl9jbGFzc2VzLCBuYW1lPSdoZWFkJykoeCkKCiAgICByZXR1cm4gTW9kZWwoaW5wdXRzLCBvdXQpCgo8fGZpbV9lbmR8Pg=="]
["56b0257b17a434f77b2ab0d41c489c6b9cb3745c-3","56b0257b17a434f77b2ab0d41c489c6b9cb3745c","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc9dXRmLTgKZnJvbSAuQXBpU0RLSnNvbkNsaWVudCBpbXBvcnQgQXBpU0RLSnNvbkNsaWVudAoKCmNsYXNzIHNtc19zZXJ2aWNlX0FkZ3JvdXBTZXJ2aWNlKEFwaVNES0pzb25DbGllbnQpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHRva2VuPU5vbmUpOgogICAgICAgIEFwaVNES0pzb25DbGllbnQuX19pbml0X18oc2VsZiwgJ3NtcycsICdzZXJ2aWNlJywgJ0FkZ3JvdXBTZXJ2aWNlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuKQoKICAgIGRlZiBhZGRBZGdyb3VwKHNlbGYsIGFkZEFkZ3JvdXBSZXF1ZXN0PU5vbmUpOgogICAgICAgIHJldHVybiBzZWxmLmV4ZWN1dGUoJ2FkZEFkZ3JvdXAnLCBhZGRBZGdyb3VwUmVxdWVzdCkKCiAgICBkZWYgdXBkYXRlQWRncm91cChzZWxmLCB1cGRhdGVBZGdyb3VwUmVxdWVzdD1Ob25lKToKICAgICAgICByZXR1cm4gc2VsZi5leGVjdXRlKCd1cGRhdGVBZGdyb3VwJywgdXBkYXRlQWRncm91cFJlcXVlc3QpCgogICAgZGVmIGRlbGV0ZUFkZ3JvdXAoc2VsZiwgZGVsZXRlQWRncm91cFJlcXVlc3Q9Tm9uZSk6CiAgICAgICAgcmV0dXJuIHNlbGYuZXhlY3V0ZSgnZGVsZXRlQWRncm91cCcsIGRlbGV0ZUFkZ3JvdXBSZXF1ZXN0KQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIGdldEFkZ3JvdXAoc2VsZiwgZ2V0QWRncm91cFJlcXVlc3Q9Tm9uZSk6CiAgICAgICAgcmV0dXJuIHNlbGYuZXhlY3V0ZSgnZ2V0QWRncm91cCcsIGdldEFkZ3JvdXBSZXF1ZXN0KQo8fGZpbV9lbmR8Pg=="]
["3223a058b5bb32ea4d92ff795fe0851932d2946a-1","3223a058b5bb32ea4d92ff795fe0851932d2946a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCgppbXBvcnQgbnVtcHkgYXMgbnAKCgpjbGFzcyBCYXNlVHJhaW5lcjoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBwYXNzCgogICAgZGVmIF9zZXRfZnJvbV9hcmdzKHNlbGYsIGFyZ3MpOgogICAgICAgIHNlbGYuX2FsZ28gPSBhcmdzLmFsZ28KICAgICAgICBzZWxmLl9hYnNvcmJpbmdfcGVyX2VwaXNvZGUgPSBhcmdzLmFic29yYmluZ19wZXJfZXBpc29kZQogICAgICAgIHNlbGYuX2FjdG9yX3VwZGF0ZV9mcmVxID0gYXJncy5hY3Rvcl91cGRhdGVfZnJlcQogICAgICAgIHNlbGYuX2Rpc2NvdW50ID0gYXJncy5kaXNjb3VudAogICAgICAgIHNlbGYuX2V2YWxfaW50ZXJ2YWwgPSBhcmdzLmV2YWxfaW50ZXJ2YWwKICAgICAgICBzZWxmLl9tYXhfdGltZXN0ZXBzID0gYXJncy5tYXhfdGltZXN0ZXBzCiAgICAgICAgc2VsZi5fbnVtX3JhbmRvbV9hY3Rpb25zID0gYXJncy5udW1fcmFuZG9tX2FjdGlvbnMKICAgICAgICBzZWxmLl9zYW1wbGVfYmF0Y2hfc2l6ZSA9IGFyZ3Muc2FtcGxlX2JhdGNoX3NpemUKICAgICAgICBzZWxmLl9zdGFydF90cmFpbmluZ190aW1lc3RlcHMgPSBhcmdzLnN0YXJ0X3RyYWluaW5nX3RpbWVzdGVwcwogICAgICAgIHNlbGYuX3RhcmdldF9lbnRyb3B5ID0gYXJncy50YXJnZXRfZW50cm9weQogICAgICAgIHNlbGYuX3RhdSA9IGFyZ3MudGF1CiAgICAgICAgc2VsZi5faW1pdGF0b3JfdXBkYXRlc19wZXJfc3RlcCA9IGFyZ3MuaW1pdGF0b3JfdXBkYXRlc19wZXJfc3RlcAogICAgICAgIHNlbGYuX3BvbGljeV91cGRhdGVzX3Blcl9zdGVwID0gYXJncy5wb2xpY3lfdXBkYXRlc19wZXJfc3RlcAogICAgICAgIHNlbGYuX3VwZGF0ZXNfcGVyX3N0ZXAgPSBhcmdzLnVwZGF0ZXNfcGVyX3N0ZXAKICAgICAgICBzZWxmLl91c2VfaW5pdF9zdGF0ZXMgPSBhcmdzLnVzZV9pbml0X3N0YXRlcwogICAgICAgIHNlbGYuX2xvZ19lbnZfZGlhZ25vc3RpY3MgPSBhcmdzLmxvZ19lbnZfZGlhZ25vc3RpY3MKCiAgICAgICAgIyBTYXZlCiAgICAgICAgc2VsZi5fc2F2ZV9tb2RlbCA9IGFyZ3Muc2F2ZV9tb2RlbAogICAgICAgIHNlbGYuX3NhdmVfbW9kZWxfaW50ZXJ2YWwgPSBhcmdzLnNhdmVfbW9kZWxfaW50ZXJ2YWwKICAgICAgICBzZWxmLl9sb2FkX21vZGVsX2RpciA9IGFyZ3MubG9hZF9tb2RlbF9kaXIKICAgICAgICBzZWxmLl9zYXZlX3Rlc3RfbW92aWUgPSBhcmdzLnNhdmVfdGVzdF9tb3ZpZQogICAgICAgIHNlbGYuX3NhdmVfbl9tb3ZpZXMgPSBhcmdzLnNhdmVfbl9tb3ZpZXMKICAgICAgICAjIExpc3Qgb2YgaW5kaWNlcyBmb3Igc2F2aW5nIHZpZGVvcwogICAgICAgIG5fdGVzdCA9IGludChhcmdzLm1heF90aW1lc3RlcHMgLyBhcmdzLmV2YWxfaW50ZXJ2YWwpCiAgICAgICAgIyBMaXN0IG9mIGluZGV4IG9mIHRlc3RpbmcKICAgICAgICBldmFsX2ludGVydmFsX2luZGljZXMgPSBbCiAgICAgICAgICAgIGFyZ3MuZXZhbF9pbnRlcnZhbCAqIGkgZm9yIGkgaW4gcmFuZ2Uobl90ZXN0ICsgMSkgaWYgaSA+IDAKICAgICAgICBdCiAgICAgICAgaWYgbGVuKGV2YWxfaW50ZXJ2YWxfaW5kaWNlcykgPCBhcmdzLnNhdmVfbl9tb3ZpZXM6CiAgICAgICAgICAgIHNlbGYuX3NhdmVfbW92aWVfaW5kaWNlcyA9IGV2YWxfaW50ZXJ2YWxfaW5kaWNlcwogICAgICAgIGVsc2U6CiAgICAgICAgICAgICMgTGlzdCBvZiBpbmRleCBmb3Igc2F2aW5nIHZpZGVvcy4gQWx3YXlzIHNhdmUgdGhlIGxhc3QgdmlkZW8uCiAgICAgICAgICAgIHNhdmVfbW92aWVfaW5kaWNlcyA9IG5wLmFycmF5X3NwbGl0KGV2YWxfaW50ZXJ2YWxfaW5kaWNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5zYXZlX25fbW92aWVzKQogICAgICAgICAgICBzZWxmLl9zYXZlX21vdmllX2luZGljZXMgPSBbXQogICAgICAgICAgICBmb3IgaWR4LCBpbmRpY2VzIGluIGVudW1lcmF0ZShzYXZlX21vdmllX2luZGljZXMpOgogICAgICAgICAgICAgICAgc2VsZi5fc2F2ZV9tb3ZpZV9pbmRpY2VzLmFwcGVuZChpbmRpY2VzWzBdKQogICAgICAgICAgICAgICAgaWYgaWR4ID09IGxlbihzYXZlX21vdmllX2luZGljZXMpIC0gMToKICAgICAgICAgICAgICAgICAgICBzZWxmLl9zYXZlX21vdmllX2luZGljZXMuYXBwZW5kKGluZGljZXNbLTFdKQogICAgICAgIHByaW50KHNlbGYuX3NhdmVfbW92aWVfaW5kaWNlcykKCiAgICBkZWYgZ2V0X2FyZ3VtZW50KHBhcnNlcj1Ob25lKToKICAgICAgICAjIHlhcGY6IGRpc2FibGUKICAgICAgICBpZiBwYXJzZXIgaXMgTm9uZToKICAgICAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoY29uZmxpY3RfaGFuZGxlcj0ncmVzb2x2ZScpCiAgICAgICAgIyBFbnZpcm9ubWVudCBjb25maWdzCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1hbGdvJywgdHlwZT1zdHIsIGRlZmF1bHQ9J3ZhbHVlX2RpY2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz1bJ29waXJsJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdBbGdvcml0aG0gdG8gdXNlIHRvIGNvbXB1dGUgcmV3YXJkLicpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1lbnZfbmFtZScsIHR5cGU9c3RyLCBkZWZhdWx0PSdIYWxmQ2hlZXRhaC12MicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdFbnZpcm9ubWVudCBmb3IgdHJhaW5pbmcvZXZhbHVhdGlvbi4nKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbWF4X3RpbWVzdGVwcycsIHR5cGU9aW50LCBkZWZhdWx0PWludCgxZTUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nTWF4IHRpbWVzdGVwcyB0byB0cmFpbi4nKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbm9ybWFsaXplX3N0YXRlcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdOb3JtYWxpemUgc3RhdGVzIHVzaW5nIGV4cGVydCBzdGF0cy4nKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc2FtcGxlX2JhdGNoX3NpemUnLCB0eXBlPWludCwgZGVmYXVsdD0yNTYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdCYXRjaCBzaXplLicpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zZWVkJywgdHlwZT1pbnQsIGRlZmF1bHQ9MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0ZpeGVkIHJhbmRvbSBzZWVkIGZvciB0cmFpbmluZy4nKQogICAgICAgICMgVHJhaW5pbmcgY29uZmlncyAoR2VuZXJhbCkKICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWFic29yYmluZ19wZXJfZXBpc29kZScsIHR5cGU9aW50LCBkZWZhdWx0PTEwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQSBudW1iZXIgb2YgYWJzb3JiaW5nIHN0YXRlcyBwZXIgZXBpc29kZSB0byBhZGQuJykKICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJ1ZmZlcl9zaXplJywgdHlwZT1pbnQsIGRlZmF1bHQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NpemUgb2YgcmVwbGF5IGJ1ZmZlcicpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1ldmFsX2ludGVydmFsJywgdHlwZT1pbnQsIGRlZmF1bHQ9aW50KDFlNCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdFdmFsdWF0ZSBldmVyeSBOIHRpbWVzdGVwcy4nKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0taGlkZGVuX3NpemUnLCB0eXBlPWludCwgZGVmYXVsdD0yNTYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdIaWRkZW4gc2l6ZS4nKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbnVtX3JhbmRvbV9hY3Rpb25zJywgdHlwZT1pbnQsIGRlZmF1bHQ9aW50KDJlMyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdGaWxsIHJlcGxheSBidWZmZXIgd2l0aCBOIHJhbmRvbSBhY3Rpb25zLicpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS11cGRhdGVzX3Blcl9zdGVwJywgdHlwZT1pbnQsIGRlZmF1bHQ9MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1VwZGF0ZXMgcGVyIHRpbWUgc3RlcC4nKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0taW1pdGF0b3JfdXBkYXRlc19wZXJfc3RlcCcsIHR5cGU9aW50LCBkZWZhdWx0PTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdVcGRhdGVzIGltaXRhdG9yIHBlciBzdGVwJykKICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXBvbGljeV91cGRhdGVzX3Blcl9zdGVwJywgdHlwZT1pbnQsIGRlZmF1bHQ9MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1VwZGF0ZXMgaW1pdGF0b3IgcGVyIHN0ZXAnKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgICAgICctLXN0YXJ0X3RyYWluaW5nX3RpbWVzdGVwcycsIHR5cGU9aW50LCBkZWZhdWx0PWludCgxZTMpLAogICAgICAgICAgICBoZWxwPSdTdGFydCB0cmFpbmluZyB3aGVuIHJlcGxheSBidWZmZXIgY29udGFpbnMgTiB0aW1lc3RlcHMuJykKICAgICAgICAjIFRyYWluaW5nIGNvbmZpZ3MgKFBvbGljeSkKICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWFjdG9yX2xyJywgdHlwZT1mbG9hdCwgZGVmYXVsdD0xZS01LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQWN0b3IgbGVhcm5pbmcgcmF0ZS4nKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYWN0b3JfdXBkYXRlX2ZyZXEnLCB0eXBlPWludCwgZGVmYXVsdD0yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVXBkYXRlIGFjdG9yIGV2ZXJ5IE4gc3RlcHMuJykKICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNyaXRpY19scicsIHR5cGU9ZmxvYXQsIGRlZmF1bHQ9MWUtMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NyaXRpYyBsZWFybmluZyByYXRlLicpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1kaXNjb3VudCcsIHR5cGU9ZmxvYXQsIGRlZmF1bHQ9MC45OSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0Rpc2NvdW50IHVzZWQgZm9yIHJldHVybnMuJykKPHxmaW1faG9sZXw+CiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1yZXBsYXlfcmVndWxhcml6YXRpb24nLCB0eXBlPWZsb2F0LCBkZWZhdWx0PTAuMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0Ftb3VudCBvZiByZXBsYXkgbWl4aW5nLicpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zYWNfYWxwaGEnLCB0eXBlPWZsb2F0LCBkZWZhdWx0PTAuMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NBQyB0ZW1wZXJhdHVyZS4nKQogICAgICAgICMgVHJhaW5pbmcgY29uZmlncyAoSW1pdGF0b3IpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1hbGdhZV9hbHBoYScsIHR5cGU9ZmxvYXQsIGRlZmF1bHQ9MC4wMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0FMR0FFIGFscGhhLicpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1kaXNjX2xyJywgdHlwZT1mbG9hdCwgZGVmYXVsdD0xZS01LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRGlzY3JpbWluYXRvciBsZWFybmluZyByYXRlLicpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mX2V4cG9uZW50JywgdHlwZT1mbG9hdCwgZGVmYXVsdD0xLjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdFeHBvbmVudCBmb3IgZi4nKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgICAgICctLXRhcmdldF9lbnRyb3B5JywgdHlwZT1mbG9hdCwgZGVmYXVsdD1Ob25lLAogICAgICAgICAgICBoZWxwPScob3B0aW9uYWwpIHRhcmdldF9lbnRyb3B5IGZvciB0cmFpbmluZyBhY3Rvci4gSWYgTm9uZSwgLWVudi5hY3Rpb25fc3BhY2Uuc2hhcGVbMF0gaXMgdXNlZC4nKSAgIyBub3FhCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS10YXUnLCB0eXBlPWZsb2F0LCBkZWZhdWx0PTAuMDA1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU29mdCB1cGRhdGUgY29lZmZpY2llbnQgZm9yIHRoZSB0YXJnZXQgbmV0d29yay4nKQogICAgICAgICMgT3RoZXIgKElSTCkKICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWV4cGVydF9wYXRoX2Rpcl9oZWFkJywgZGVmYXVsdD1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUGF0aCB0byBleHBlcnQgdHJhamVjdG9yaWVzJykKICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW51bV90cmFqZWN0b3JpZXMnLCB0eXBlPWludCwgZGVmYXVsdD0xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nTnVtYmVyIG9mIHRyYWplY3RvcmllcyB0byB1c2UuJykKICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXVzZV9kaXNjcmltX2FzX3Jld2FyZCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS11c2VfYmNfcmVnJywgYWN0aW9uPSdzdG9yZV90cnVlJykKICAgICAgICAjIE90aGVyCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1sb2dfZW52X2RpYWdub3N0aWNzJywgYWN0aW9uPSdzdG9yZV90cnVlJykKICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXVzZV9pbml0X3N0YXRlcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdVc2UgaW5pdCBzdGF0ZXMuJykKICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJjX3JlZ19jb2VmZicsIHR5cGU9ZmxvYXQsIGRlZmF1bHQ9MS4pCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1hY3Rvcl9yZWdfY29lZmYnLCB0eXBlPWZsb2F0LCBkZWZhdWx0PTEuZS0zKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcmV3YXJkX3R5cGUnLCB0eXBlPXN0ciwgZGVmYXVsdD0nb3BpcmwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz1bJ2FpcmwnLCAnZ2FpbCcsICdvcGlybCddKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcmV3YXJkX3NoYXBpbmcnLCBhY3Rpb249J3N0b3JlX3RydWUnKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcmV3YXJkX2NsaXBfbWF4JywgdHlwZT1mbG9hdCwgZGVmYXVsdD1Ob25lKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcmV3YXJkX2NsaXBfbWluJywgdHlwZT1mbG9hdCwgZGVmYXVsdD1Ob25lKQogICAgICAgICMgU2F2ZQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbG9hZF9tb2RlbF9kaXInLCB0eXBlPXN0ciwgZGVmYXVsdD1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRGlyZWN0b3J5IG9mIG1vZGVsIHRvIGxvYWQnKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc2F2ZV9kaXInLCB0eXBlPXN0ciwgZGVmYXVsdD1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRGlyZWN0b3J5IHRvIHNhdmUgcmVzdWx0cyB0by4nKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc2F2ZV9tb2RlbCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTYXZlIG1vZGVsIGV2ZXJ5IGAtLXNhdmVfbW9kZWxfaW50ZXJ2YWxgIGlmIHNldCBUcnVlJykgICMgbm9xYQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc2F2ZV9tb2RlbF9pbnRlcnZhbCcsIHR5cGU9aW50LCBkZWZhdWx0PTFlNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0ludGVydmFsIHRvIHNhdmUgbW9kZWwnKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc2F2ZV90ZXN0X21vdmllJywgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NhdmUgcmVuZGVyaW5nIHJlc3VsdHMnKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc2F2ZV9uX21vdmllcycsIHR5cGU9aW50LCBkZWZhdWx0PTEwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nTnVtYmVyIG9mIHZpZGVvcyB0byBzYXZlJykKICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXdhbmRiX2VudGl0eScsIHR5cGU9c3RyLCBkZWZhdWx0PU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdFbnRpdHkgbmFtZScpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS13YW5kYl9wcm9qZWN0JywgdHlwZT1zdHIsIGRlZmF1bHQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1Byb2plY3QgbmFtZScpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1sb2dfdG9fd2FuZGInLCBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVG8gbG9nIHJlc3VsdHMgdG8gV2FuZGInKQogICAgICAgIHJldHVybiBwYXJzZXIKPHxmaW1fc3VmZml4fD4KICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWxlYXJuX2FscGhhJywgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1doZXRoZXIgdG8gbGVhcm4gdGVtcGVyYXR1cmUgZm9yIFNBQy4nKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbnVfbHInLCB0eXBlPWZsb2F0LCBkZWZhdWx0PTFlLTMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdudSBuZXR3b3JrIGxlYXJuaW5nIHJhdGUuJykKPHxmaW1fZW5kfD4="]
["8f0de41e6f00fd392ac34ad099d5e0173dd8c2ee-1","8f0de41e6f00fd392ac34ad099d5e0173dd8c2ee","PHxmaW1fcHJlZml4fD4KZnJvbSBjb25maWcgaW1wb3J0IGRiLCBwcm9qZWN0X2RpcgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppbXBvcnQgc3lzCnN5cy5wYXRoLmluc2VydCgxLCBmIntwcm9qZWN0X2Rpcn0vLi4vY3JlYXRlX3BsYXlsaXN0cy8iKQpmcm9tIHBsYXlsaXN0c19idWlsZF9kYXRhYmFzZSBpbXBvcnQgQWRkQm9vaywgQ3JlYXRlUGxheWxpc3QKZnJvbSBwbGF5bGlzdHNfaW50ZXJmYWNlIGltcG9ydCBQbGF5bGlzdEludGVyZmFjZXMKPHxmaW1fZW5kfD4="]
["bb36a41c99b0740662f28968fa5269e3c06f38bb-1","bb36a41c99b0740662f28968fa5269e3c06f38bb","PHxmaW1fcHJlZml4fD4KbiwgayA9IG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkKZGF0YSA9IFtdCjx8ZmltX2hvbGV8Pgpjb3VudCA9IDAKd2hpbGUgayE9MDoKICAgIGNvdW50ICs9IGsvL2RhdGFbaW5kZXhdCiAgICBrICU9IGRhdGFbaW5kZXhdCiAgICBpbmRleCAtPSAxCgpwcmludChjb3VudCkKPHxmaW1fc3VmZml4fD4KZm9yIF8gaW4gcmFuZ2Uobik6CiAgICBkYXRhLmFwcGVuZChpbnQoaW5wdXQoKSkpCgppbmRleCA9IG4tMQo8fGZpbV9lbmR8Pg=="]
["2e391075ce3e5527a043d514a31ebf55c5d7480a-4","2e391075ce3e5527a043d514a31ebf55c5d7480a","PHxmaW1fcHJlZml4fD4KZnJvbSBweXB5Lm9ianNwYWNlLnN0ZC5vYmpzcGFjZSBpbXBvcnQgKgpmcm9tIHB5cHkub2Jqc3BhY2Uuc3RkLm5vbmVvYmplY3QgaW1wb3J0IFdfTm9uZU9iamVjdApmcm9tIHB5cHkucmxpYi5yYXJpdGhtZXRpYyBpbXBvcnQgb3ZmY2hlY2ssIG92ZmNoZWNrX2xzaGlmdCwgTE9OR19CSVQsIHJfdWludApmcm9tIHB5cHkucmxpYi5yYmlnaW50IGltcG9ydCByYmlnaW50CmZyb20gcHlweS5vYmpzcGFjZS5zdGQuaW50dHlwZSBpbXBvcnQgd3JhcGludAoKIiIiCkluIG9yZGVyIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3IgcnVubmluZwpvbiBDUHl0aG9uLCBhbmQgYWZ0ZXIgUlB5dGhvbiB0cmFuc2xhdGlvbiB3ZSB1c2Ugb3ZmY2hlY2sKZnJvbSByYXJpdGhtZXRpYyB0byBleHBsaWNpdGx5IGNoZWNrIGZvciBvdmVyZmxvd3MsCnNvbWV0aGluZyBDUHl0aG9uIGRvZXMgbm90IGRvIGFueW1vcmUuCiIiIgoKY2xhc3MgV19JbnRPYmplY3QoV19PYmplY3QpOgo8fGZpbV9ob2xlfD4KICAgIGZyb20gcHlweS5vYmpzcGFjZS5zdGQuaW50dHlwZSBpbXBvcnQgaW50X3R5cGVkZWYgYXMgdHlwZWRlZgogICAgCiAgICBkZWYgX19pbml0X18od19zZWxmLCBpbnR2YWwpOgogICAgICAgIHdfc2VsZi5pbnR2YWwgPSBpbnR2YWwKCiAgICBkZWYgX19yZXByX18od19zZWxmKToKICAgICAgICAiIiIgcmVwcmVzZW50YXRpb24gZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAiIiIKICAgICAgICByZXR1cm4gIiVzKCVkKSIgJSAod19zZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgd19zZWxmLmludHZhbCkKCiAgICBkZWYgdW53cmFwKHdfc2VsZiwgc3BhY2UpOgogICAgICAgIHJldHVybiBpbnQod19zZWxmLmludHZhbCkKCgpyZWdpc3RlcmltcGxlbWVudGF0aW9uKFdfSW50T2JqZWN0KQoKCmRlZiBpbnRfd19fSW50KHNwYWNlLCB3X2ludDEpOgogICAgcmV0dXJuIGludCh3X2ludDEuaW50dmFsKQoKZGVmIHVpbnRfd19fSW50KHNwYWNlLCB3X2ludDEpOgogICAgaW50dmFsID0gd19pbnQxLmludHZhbAogICAgaWYgaW50dmFsIDwgMDoKICAgICAgICByYWlzZSBPcGVyYXRpb25FcnJvcihzcGFjZS53X1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2Uud3JhcCgiY2Fubm90IGNvbnZlcnQgbmVnYXRpdmUgaW50ZWdlciB0byB1bnNpZ25lZCIpKQogICAgZWxzZToKICAgICAgICByZXR1cm4gcl91aW50KGludHZhbCkKCmRlZiBiaWdpbnRfd19fSW50KHNwYWNlLCB3X2ludDEpOgogICAgcmV0dXJuIHJiaWdpbnQuZnJvbWludCh3X2ludDEuaW50dmFsKQoKZGVmIHJlcHJfX0ludChzcGFjZSwgd19pbnQxKToKICAgIGEgPSB3X2ludDEuaW50dmFsCiAgICByZXMgPSBzdHIoYSkKICAgIHJldHVybiBzcGFjZS53cmFwKHJlcykKCnN0cl9fSW50ID0gcmVwcl9fSW50CgpkZWYgZGVjbGFyZV9uZXdfaW50X2NvbXBhcmlzb24ob3BuYW1lKToKICAgIGltcG9ydCBvcGVyYXRvcgogICAgZnJvbSBweXB5LnRvb2wuc291cmNldG9vbHMgaW1wb3J0IGZ1bmNfd2l0aF9uZXdfbmFtZQogICAgb3AgPSBnZXRhdHRyKG9wZXJhdG9yLCBvcG5hbWUpCiAgICBkZWYgZihzcGFjZSwgd19pbnQxLCB3X2ludDIpOgogICAgICAgIGkgPSB3X2ludDEuaW50dmFsCiAgICAgICAgaiA9IHdfaW50Mi5pbnR2YWwKICAgICAgICByZXR1cm4gc3BhY2UubmV3Ym9vbChvcChpLCBqKSkKICAgIG5hbWUgPSBvcG5hbWUgKyAiX19JbnRfSW50IgogICAgcmV0dXJuIGZ1bmNfd2l0aF9uZXdfbmFtZShmLCBuYW1lKSwgbmFtZQoKZm9yIG9wIGluIFsnbHQnLCAnbGUnLCAnZXEnLCAnbmUnLCAnZ3QnLCAnZ2UnXToKICAgIGZ1bmMsIG5hbWUgPSBkZWNsYXJlX25ld19pbnRfY29tcGFyaXNvbihvcCkKICAgIGdsb2JhbHMoKVtuYW1lXSA9IGZ1bmMKCmRlZiBoYXNoX19JbnQoc3BhY2UsIHdfaW50MSk6CiAgICAjIHVubGlrZSBDUHl0aG9uLCB3ZSBkb24ndCBzcGVjaWFsLWNhc2UgdGhlIHZhbHVlIC0xIGluIG1vc3Qgb2Ygb3VyCiAgICAjIGhhc2ggZnVuY3Rpb25zLCBzbyB0aGVyZSBpcyBub3QgbXVjaCBzZW5zZSBzcGVjaWFsLWNhc2luZyBpdCBoZXJlIGVpdGhlci4KICAgICMgTWFrZSBzdXJlIHRoaXMgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBoYXNoIG9mIGZsb2F0cyBhbmQgbG9uZ3MuCiAgICByZXR1cm4gaW50X19JbnQoc3BhY2UsIHdfaW50MSkKCiMgY29lcmNlCmRlZiBjb2VyY2VfX0ludF9JbnQoc3BhY2UsIHdfaW50MSwgd19pbnQyKToKICAgIHJldHVybiBzcGFjZS5uZXd0dXBsZShbd19pbnQxLCB3X2ludDJdKQoKCmRlZiBhZGRfX0ludF9JbnQoc3BhY2UsIHdfaW50MSwgd19pbnQyKToKICAgIHggPSB3X2ludDEuaW50dmFsCiAgICB5ID0gd19pbnQyLmludHZhbAogICAgdHJ5OgogICAgICAgIHogPSBvdmZjaGVjayh4ICsgeSkKICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgogICAgICAgIHJhaXNlIEZhaWxlZFRvSW1wbGVtZW50KHNwYWNlLndfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZS53cmFwKCJpbnRlZ2VyIGFkZGl0aW9uIikpCiAgICByZXR1cm4gd3JhcGludChzcGFjZSwgeikKCmRlZiBzdWJfX0ludF9JbnQoc3BhY2UsIHdfaW50MSwgd19pbnQyKToKICAgIHggPSB3X2ludDEuaW50dmFsCiAgICB5ID0gd19pbnQyLmludHZhbAogICAgdHJ5OgogICAgICAgIHogPSBvdmZjaGVjayh4IC0geSkKICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgogICAgICAgIHJhaXNlIEZhaWxlZFRvSW1wbGVtZW50KHNwYWNlLndfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZS53cmFwKCJpbnRlZ2VyIHN1YnN0cmFjdGlvbiIpKQogICAgcmV0dXJuIHdyYXBpbnQoc3BhY2UsIHopCgpkZWYgbXVsX19JbnRfSW50KHNwYWNlLCB3X2ludDEsIHdfaW50Mik6CiAgICB4ID0gd19pbnQxLmludHZhbAogICAgeSA9IHdfaW50Mi5pbnR2YWwKICAgIHRyeToKICAgICAgICB6ID0gb3ZmY2hlY2soeCAqIHkpCiAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKICAgICAgICByYWlzZSBGYWlsZWRUb0ltcGxlbWVudChzcGFjZS53X092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2Uud3JhcCgiaW50ZWdlciBtdWx0aXBsaWNhdGlvbiIpKQogICAgcmV0dXJuIHdyYXBpbnQoc3BhY2UsIHopCgpkZWYgZmxvb3JkaXZfX0ludF9JbnQoc3BhY2UsIHdfaW50MSwgd19pbnQyKToKICAgIHggPSB3X2ludDEuaW50dmFsCiAgICB5ID0gd19pbnQyLmludHZhbAogICAgdHJ5OgogICAgICAgIHogPSBvdmZjaGVjayh4IC8vIHkpCiAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CiAgICAgICAgcmFpc2UgT3BlcmF0aW9uRXJyb3Ioc3BhY2Uud19aZXJvRGl2aXNpb25FcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZS53cmFwKCJpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8iKSkKICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgogICAgICAgIHJhaXNlIEZhaWxlZFRvSW1wbGVtZW50KHNwYWNlLndfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZS53cmFwKCJpbnRlZ2VyIGRpdmlzaW9uIikpCiAgICByZXR1cm4gd3JhcGludChzcGFjZSwgeikKZGl2X19JbnRfSW50ID0gZmxvb3JkaXZfX0ludF9JbnQKCmRlZiB0cnVlZGl2X19JbnRfSW50KHNwYWNlLCB3X2ludDEsIHdfaW50Mik6CiAgICB4ID0gZmxvYXQod19pbnQxLmludHZhbCkKICAgIHkgPSBmbG9hdCh3X2ludDIuaW50dmFsKQogICAgaWYgeSA9PSAwLjA6CiAgICAgICAgcmFpc2UgRmFpbGVkVG9JbXBsZW1lbnQoc3BhY2Uud19aZXJvRGl2aXNpb25FcnJvciwgc3BhY2Uud3JhcCgiZmxvYXQgZGl2aXNpb24iKSkgICAgCiAgICByZXR1cm4gc3BhY2Uud3JhcCh4IC8geSkKCmRlZiBtb2RfX0ludF9JbnQoc3BhY2UsIHdfaW50MSwgd19pbnQyKToKICAgIHggPSB3X2ludDEuaW50dmFsCiAgICB5ID0gd19pbnQyLmludHZhbAogICAgdHJ5OgogICAgICAgIHogPSBvdmZjaGVjayh4ICUgeSkKICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKICAgICAgICByYWlzZSBPcGVyYXRpb25FcnJvcihzcGFjZS53X1plcm9EaXZpc2lvbkVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlLndyYXAoImludGVnZXIgbW9kdWxvIGJ5IHplcm8iKSkKICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgogICAgICAgIHJhaXNlIEZhaWxlZFRvSW1wbGVtZW50KHNwYWNlLndfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZS53cmFwKCJpbnRlZ2VyIG1vZHVsbyIpKQogICAgcmV0dXJuIHdyYXBpbnQoc3BhY2UsIHopCgpkZWYgZGl2bW9kX19JbnRfSW50KHNwYWNlLCB3X2ludDEsIHdfaW50Mik6CiAgICB4ID0gd19pbnQxLmludHZhbAogICAgeSA9IHdfaW50Mi5pbnR2YWwKICAgIHRyeToKICAgICAgICB6ID0gb3ZmY2hlY2soeCAvLyB5KQogICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgogICAgICAgIHJhaXNlIE9wZXJhdGlvbkVycm9yKHNwYWNlLndfWmVyb0RpdmlzaW9uRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2Uud3JhcCgiaW50ZWdlciBkaXZtb2QgYnkgemVybyIpKQogICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CiAgICAgICAgcmFpc2UgRmFpbGVkVG9JbXBsZW1lbnQoc3BhY2Uud19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlLndyYXAoImludGVnZXIgbW9kdWxvIikpCiAgICAjIG5vIG92ZXJmbG93IHBvc3NpYmxlCiAgICBtID0geCAlIHkKICAgIHcgPSBzcGFjZS53cmFwCiAgICByZXR1cm4gc3BhY2UubmV3dHVwbGUoW3coeiksIHcobSldKQoKCiMgaGVscGVyIGZvciBwb3coKQpkZWYgX2ltcGxfaW50X2ludF9wb3coc3BhY2UsIGl2LCBpdywgaXo9MCk6CiAgICBpZiBpdyA8IDA6CiAgICAgICAgaWYgaXogIT0gMDoKICAgICAgICAgICAgcmFpc2UgT3BlcmF0aW9uRXJyb3Ioc3BhY2Uud19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2Uud3JhcCgicG93KCkgMm5kIGFyZ3VtZW50ICIKICAgICAgICAgICAgICAgICAiY2Fubm90IGJlIG5lZ2F0aXZlIHdoZW4gM3JkIGFyZ3VtZW50IHNwZWNpZmllZCIpKQogICAgICAgICMjIGJvdW5jZSBpdCwgc2luY2UgaXQgYWx3YXlzIHJldHVybnMgZmxvYXQKICAgICAgICByYWlzZSBGYWlsZWRUb0ltcGxlbWVudChzcGFjZS53X1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2Uud3JhcCgiaW50ZWdlciBleHBvbmVudGlhdGlvbiIpKQogICAgdGVtcCA9IGl2CiAgICBpeCA9IDEKICAgIHRyeToKICAgICAgICB3aGlsZSBpdyA+IDA6CiAgICAgICAgICAgIGlmIGl3ICYgMToKICAgICAgICAgICAgICAgIGl4ID0gb3ZmY2hlY2soaXgqdGVtcCkKICAgICAgICAgICAgaXcgPj49IDEgICAjLyogU2hpZnQgZXhwb25lbnQgZG93biBieSAxIGJpdCAqLwogICAgICAgICAgICBpZiBpdz09MDoKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIHRlbXAgPSBvdmZjaGVjayh0ZW1wKnRlbXApICMvKiBTcXVhcmUgdGhlIHZhbHVlIG9mIHRlbXAgKi8KICAgICAgICAgICAgaWYgaXo6CiAgICAgICAgICAgICAgICAjLyogSWYgd2UgZGlkIGEgbXVsdGlwbGljYXRpb24sIHBlcmZvcm0gYSBtb2R1bG8gKi8KICAgICAgICAgICAgICAgIGl4ID0gaXggJSBpejsKICAgICAgICAgICAgICAgIHRlbXAgPSB0ZW1wICUgaXo7CiAgICAgICAgaWYgaXo6CiAgICAgICAgICAgIGl4ID0gaXggJSBpegogICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CiAgICAgICAgcmFpc2UgRmFpbGVkVG9JbXBsZW1lbnQoc3BhY2Uud19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlLndyYXAoImludGVnZXIgZXhwb25lbnRpYXRpb24iKSkKICAgIHJldHVybiB3cmFwaW50KHNwYWNlLCBpeCkKCmRlZiBwb3dfX0ludF9JbnRfSW50KHNwYWNlLCB3X2ludDEsIHdfaW50Miwgd19pbnQzKToKICAgIHggPSB3X2ludDEuaW50dmFsCiAgICB5ID0gd19pbnQyLmludHZhbAogICAgeiA9IHdfaW50My5pbnR2YWwKICAgIGlmIHogPT0gMDoKICAgICAgICByYWlzZSBPcGVyYXRpb25FcnJvcihzcGFjZS53X1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2Uud3JhcCgicG93KCkgM3JkIGFyZ3VtZW50IGNhbm5vdCBiZSAwIikpCiAgICByZXR1cm4gX2ltcGxfaW50X2ludF9wb3coc3BhY2UsIHgsIHksIHopCgpkZWYgcG93X19JbnRfSW50X05vbmUoc3BhY2UsIHdfaW50MSwgd19pbnQyLCB3X2ludDMpOgogICAgeCA9IHdfaW50MS5pbnR2YWwKICAgIHkgPSB3X2ludDIuaW50dmFsCiAgICByZXR1cm4gX2ltcGxfaW50X2ludF9wb3coc3BhY2UsIHgsIHkpCgpkZWYgbmVnX19JbnQoc3BhY2UsIHdfaW50MSk6CiAgICBhID0gd19pbnQxLmludHZhbAogICAgdHJ5OgogICAgICAgIHggPSBvdmZjaGVjaygtYSkKICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgogICAgICAgIHJhaXNlIEZhaWxlZFRvSW1wbGVtZW50KHNwYWNlLndfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZS53cmFwKCJpbnRlZ2VyIG5lZ2F0aW9uIikpCiAgICByZXR1cm4gd3JhcGludChzcGFjZSwgeCkKCgpkZWYgYWJzX19JbnQoc3BhY2UsIHdfaW50MSk6CiAgICBpZiB3X2ludDEuaW50dmFsID49IDA6CiAgICAgICAgcmV0dXJuIHBvc19fSW50KHNwYWNlLCB3X2ludDEpCiAgICBlbHNlOgogICAgICAgIHJldHVybiBuZWdfX0ludChzcGFjZSwgd19pbnQxKQoKZGVmIG5vbnplcm9fX0ludChzcGFjZSwgd19pbnQxKToKICAgIHJldHVybiBzcGFjZS5uZXdib29sKHdfaW50MS5pbnR2YWwgIT0gMCkKCmRlZiBpbnZlcnRfX0ludChzcGFjZSwgd19pbnQxKToKICAgIHggPSB3X2ludDEuaW50dmFsCiAgICBhID0gfngKICAgIHJldHVybiB3cmFwaW50KHNwYWNlLCBhKQoKZGVmIGxzaGlmdF9fSW50X0ludChzcGFjZSwgd19pbnQxLCB3X2ludDIpOgogICAgYSA9IHdfaW50MS5pbnR2YWwKICAgIGIgPSB3X2ludDIuaW50dmFsCiAgICBpZiBiIDwgMDoKICAgICAgICByYWlzZSBPcGVyYXRpb25FcnJvcihzcGFjZS53X1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2Uud3JhcCgibmVnYXRpdmUgc2hpZnQgY291bnQiKSkKICAgIGlmIGEgPT0gMCBvciBiID09IDA6CiAgICAgICAgcmV0dXJuIGludF9fSW50KHNwYWNlLCB3X2ludDEpCiAgICBpZiBiID49IExPTkdfQklUOgogICAgICAgIHJhaXNlIEZhaWxlZFRvSW1wbGVtZW50KHNwYWNlLndfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZS53cmFwKCJpbnRlZ2VyIGxlZnQgc2hpZnQiKSkKICAgIHRyeToKICAgICAgICBjID0gb3ZmY2hlY2tfbHNoaWZ0KGEsIGIpCiAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKICAgICAgICByYWlzZSBGYWlsZWRUb0ltcGxlbWVudChzcGFjZS53X092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2Uud3JhcCgiaW50ZWdlciBsZWZ0IHNoaWZ0IikpCiAgICByZXR1cm4gd3JhcGludChzcGFjZSwgYykKCmRlZiByc2hpZnRfX0ludF9JbnQoc3BhY2UsIHdfaW50MSwgd19pbnQyKToKICAgIGEgPSB3X2ludDEuaW50dmFsCiAgICBiID0gd19pbnQyLmludHZhbAogICAgaWYgYiA8IDA6CiAgICAgICAgcmFpc2UgT3BlcmF0aW9uRXJyb3Ioc3BhY2Uud19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlLndyYXAoIm5lZ2F0aXZlIHNoaWZ0IGNvdW50IikpCiAgICBpZiBhID09IDAgb3IgYiA9PSAwOgogICAgICAgIHJldHVybiBpbnRfX0ludChzcGFjZSwgd19pbnQxKQogICAgaWYgYiA+PSBMT05HX0JJVDoKICAgICAgICBpZiBhIDwgMDoKICAgICAgICAgICAgYSA9IC0xCiAgICAgICAgZWxzZToKICAgICAgICAgICAgYSA9IDAKICAgIGVsc2U6CiAgICAgICAgYSA9IGEgPj4gYgogICAgcmV0dXJuIHdyYXBpbnQoc3BhY2UsIGEpCgpkZWYgYW5kX19JbnRfSW50KHNwYWNlLCB3X2ludDEsIHdfaW50Mik6CiAgICBhID0gd19pbnQxLmludHZhbAogICAgYiA9IHdfaW50Mi5pbnR2YWwKICAgIHJlcyA9IGEgJiBiCiAgICByZXR1cm4gd3JhcGludChzcGFjZSwgcmVzKQoKZGVmIHhvcl9fSW50X0ludChzcGFjZSwgd19pbnQxLCB3X2ludDIpOgogICAgYSA9IHdfaW50MS5pbnR2YWwKICAgIGIgPSB3X2ludDIuaW50dmFsCiAgICByZXMgPSBhIF4gYgogICAgcmV0dXJuIHdyYXBpbnQoc3BhY2UsIHJlcykKCmRlZiBvcl9fSW50X0ludChzcGFjZSwgd19pbnQxLCB3X2ludDIpOgogICAgYSA9IHdfaW50MS5pbnR2YWwKICAgIGIgPSB3X2ludDIuaW50dmFsCiAgICByZXMgPSBhIHwgYgogICAgcmV0dXJuIHdyYXBpbnQoc3BhY2UsIHJlcykKCiMgaW50X19JbnQgaXMgc3VwcG9zZWQgdG8gZG8gbm90aGluZywgdW5sZXNzIGl0IGhhcwojIGEgZGVyaXZlZCBpbnRlZ2VyIG9iamVjdCwgd2hlcmUgaXQgc2hvdWxkIHJldHVybgojIGFuIGV4YWN0IG9uZS4KZGVmIGludF9fSW50KHNwYWNlLCB3X2ludDEpOgogICAgaWYgc3BhY2UuaXNfdyhzcGFjZS50eXBlKHdfaW50MSksIHNwYWNlLndfaW50KToKICAgICAgICByZXR1cm4gd19pbnQxCiAgICBhID0gd19pbnQxLmludHZhbAogICAgcmV0dXJuIHdyYXBpbnQoc3BhY2UsIGEpCnBvc19fSW50ID0gaW50X19JbnQKCmRlZiBpbmRleF9fSW50KHNwYWNlLCB3X2ludDEpOgogICAgcmV0dXJuIGludF9fSW50KHNwYWNlLCB3X2ludDEpCgpkZWYgZmxvYXRfX0ludChzcGFjZSwgd19pbnQxKToKICAgIGEgPSB3X2ludDEuaW50dmFsCiAgICB4ID0gZmxvYXQoYSkKICAgIHJldHVybiBzcGFjZS5uZXdmbG9hdCh4KQoKZGVmIG9jdF9fSW50KHNwYWNlLCB3X2ludDEpOgogICAgcmV0dXJuIHNwYWNlLndyYXAob2N0KHdfaW50MS5pbnR2YWwpKQoKZGVmIGhleF9fSW50KHNwYWNlLCB3X2ludDEpOgogICAgcmV0dXJuIHNwYWNlLndyYXAoaGV4KHdfaW50MS5pbnR2YWwpKQoKZGVmIGdldG5ld2FyZ3NfX0ludChzcGFjZSwgd19pbnQxKToKICAgIHJldHVybiBzcGFjZS5uZXd0dXBsZShbd3JhcGludChzcGFjZSwgd19pbnQxLmludHZhbCldKQoKCnJlZ2lzdGVyX2FsbCh2YXJzKCkpCjx8ZmltX3N1ZmZpeHw+CiAgICBfX3Nsb3RzX18gPSAnaW50dmFsJwoKICAgIF9pbW11dGFibGVfID0gVHJ1ZQogICAgCjx8ZmltX2VuZHw+"]
["e7df9a737a270a6cb3efb06df4393e73db177088-1","e7df9a737a270a6cb3efb06df4393e73db177088","PHxmaW1fcHJlZml4fD4KIwojIENvcHlyaWdodCAoYykgMjAxNiBGaXJlZXllLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKIyBNb2RpZmljYXRpb25zIENvcHlyaWdodCAoYykgbmV4QiwgSW5jLiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgojCiMgQ29weXJpZ2h0IChjKSBuZXhCIEluYy4gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIyBTY2FuQ29kZSBpcyBhIHRyYWRlbWFyayBvZiBuZXhCIEluYy4KIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojIFNlZSBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgZm9yIHRoZSBsaWNlbnNlIHRleHQuCiMgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uZXhCL3NjYW5jb2RlLXRvb2xraXQgZm9yIHN1cHBvcnQgb3IgZG93bmxvYWQuCiMgU2VlIGh0dHBzOi8vYWJvdXRjb2RlLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBuZXhCIE9TUyBwcm9qZWN0cy4KIwojIFRoaXMgZmlsZSBjb250YWlucyBjb2RlIGRlcml2ZWQgYW5kIG1vZGlmaWVkIGZyb20gRmlyZWV5ZSdzIGZsYXJlIEZMT1NTOgojIGh0dHBzOi8vd3d3LmdpdGh1Yi5jb20vZmlyZWV5ZS9mbGFyZS1mbG9zcwojIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyB0YWtlbiBvbiAyMDE2LTEwLTI4IGZyb206CiMgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2ZpcmVleWUvZmxhcmUtZmxvc3MvMGRiMTNhZmY4OGQwNDg3ZjgxOGYxOWEzNmRlODc5ZGMyN2M5NGUxMy9mbG9zcy9zdHJpbmdzLnB5CiMgbW9kaWZpY2F0aW9uczoKIyAtIGRvIG5vdCByZXR1cm4gb2Zmc2V0cwojIC0gZG8gbm90IGNoZWNrIGZvciBidWZmZXJzIGZpbGxlZCB3aXRoIGEgc2luZ2xlIGJ5dGUKIyAtIHJlbW92ZWQgbWFpbigpCiMgLSBkbyBub3QgY2FjaGUgY29tcGlsZWQgcGF0dGVybnMuIHJlIGRvZXMgY2FjaGUgcGF0dGVybnMgYWxyaWdodC4KCgppbXBvcnQgcmUKCkFTQ0lJX0JZVEUgPSAoCiAgICAiICFcIiNcJCUmXCdcKFwpXCpcKywtXC4vMDEyMzQ1Njc4OTo7PD0+XD9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCiAgICAiXFtcXVxeX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elx7XHxcfVxcXH5cdCIKKQoKCmRlZiBleHRyYWN0X2FzY2lpX3N0cmluZ3MoYnVmLCBuPTMpOgogICAgIiIiCiAgICBZaWVsZCBVbmljb2RlIHN0cmluZ3MgKEFTQ0lJKSBmcm9tIGEgYnVmIHN0cmluZyBvZiBiaW5hcnkgZGF0YS4KCiAgICA6cGFyYW0gYnVmOiBBIGJ5dGVzdHJpbmcuCiAgICA6dHlwZSBidWY6IHN0cgogICAgOnBhcmFtIG46IFRoZSBtaW5pbXVtIGxlbmd0aCBvZiBzdHJpbmdzIHRvIGV4dHJhY3QuCiAgICA6dHlwZSBuOiBpbnQKICAgIDpydHlwZTogU2VxdWVuY2Vbc3RyaW5nXQogICAgIiIiCiAgICBpZiBub3QgYnVmOgogICAgICAgIHJldHVybgoKICAgIHJlZyA9ICcoWyVzXXslZCx9KScgJSAoQVNDSUlfQllURSwgbikKICAgIHIgPSByZS5jb21waWxlKHJlZykKICAgIGZvciBtYXRjaCBpbiByLmZpbmRpdGVyKGJ1Zik6CiAgICAgICAgeWllbGQgbWF0Y2guZ3JvdXAoKS5kZWNvZGUoJ2FzY2lpJykKCgpkZWYgZXh0cmFjdF91bmljb2RlX3N0cmluZ3MoYnVmLCBuPTMpOgogICAgIiIiCiAgICBZaWVsZCBVbmljb2RlIHN0cmluZ3MgKFVURi0xNi1MRSBlbmNvZGVkIEFTQ0lJKSBmcm9tIGEgYnVmIHN0cmluZyBvZiBiaW5hcnkgZGF0YS4KCiAgICA6cGFyYW0gYnVmOiBBIGJ5dGVzdHJpbmcuCiAgICA6dHlwZSBidWY6IHN0cgogICAgOnBhcmFtIG46IFRoZSBtaW5pbXVtIGxlbmd0aCBvZiBzdHJpbmdzIHRvIGV4dHJhY3QuCiAgICA6dHlwZSBuOiBpbnQKICAgIDpydHlwZTogU2VxdWVuY2Vbc3RyaW5nXQogICAgIiIiCiAgICBpZiBub3QgYnVmOgogICAgICAgIHJldHVybgoKICAgIHJlZyA9IGInKCg/Olslc11ceDAwKXslZCx9KScgJSAoQVNDSUlfQllURSwgbikKICAgIHIgPSByZS5jb21waWxlKHJlZykKICAgIGZvciBtYXRjaCBpbiByLmZpbmRpdGVyKGJ1Zik6Cjx8ZmltX2hvbGV8PgoKCmRlZiBleHRyYWN0X3N0cmluZ3MoYnVmLCBuPTMpOgogICAgIiIiCiAgICBZaWVsZCB1bmljb2RlIHN0cmluZ3MgKEFTQ0lJIGFuZCBVVEYtMTYtTEUgZW5jb2RlZCBBU0NJSSkgZnJvbSBhIGJ1ZiBzdHJpbmcKICAgIG9mIGJpbmFyeSBkYXRhLgoKICAgIDpwYXJhbSBidWY6IEEgYnl0ZXN0cmluZy4KICAgIDp0eXBlIGJ1Zjogc3RyCiAgICA6cGFyYW0gbjogVGhlIG1pbmltdW0gbGVuZ3RoIG9mIHN0cmluZ3MgdG8gZXh0cmFjdC4KICAgIDp0eXBlIG46IGludAogICAgOnJ0eXBlOiBTZXF1ZW5jZVtzdHJpbmddCiAgICAiIiIKICAgIGZvciBzIGluIGV4dHJhY3RfYXNjaWlfc3RyaW5ncyhidWYpOgogICAgICAgIHlpZWxkIHMKCiAgICBmb3IgcyBpbiBleHRyYWN0X3VuaWNvZGVfc3RyaW5ncyhidWYpOgogICAgICAgIHlpZWxkIHMKPHxmaW1fc3VmZml4fD4KICAgICAgICB0cnk6CiAgICAgICAgICAgIHlpZWxkIG1hdGNoLmdyb3VwKCkuZGVjb2RlKCd1dGYtMTYnKQogICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CiAgICAgICAgICAgIHBhc3MKPHxmaW1fZW5kfD4="]
["7af7ad646502612fabb4221e4853c3e9ac789cb2-2","7af7ad646502612fabb4221e4853c3e9ac789cb2","PHxmaW1fcHJlZml4fD4KIiIiU3VpdGUgb2YgdXRpbGl0aWVzIHRvIGJ1aWxkICYgdHJhaW4gSW50ZW50cy4iIiIKCmZyb20gdHlwaW5nIGltcG9ydCBMaXN0Cgpmcm9tIHdpdCBpbXBvcnQgV2l0CgoKZGVmIGNyZWF0ZV9pbnRlbnRzKHdpdF9jbGllbnQ6IFdpdCwgaW50ZW50czogTGlzdFtzdHJdKSAtPiBOb25lOgogICAgIiIiQ3JlYXRlcyBXaXQgSW50ZW50cy4KPHxmaW1faG9sZXw+CiAgICAiIiIKICAgIGV4aXN0aW5nX2ludGVudHMgPSBbeFsibmFtZSJdIGZvciB4IGluIHdpdF9jbGllbnQuaW50ZW50X2xpc3QoKV0KICAgICMgRGVmaW5pdGVseSBjYW4gYmUgZG9uZSBtb3JlIGVmZmljaWVudGx5CiAgICBpbnRlbnRzX3RvX2NyZWF0ZSA9IFt4IGZvciB4IGluIGludGVudHMgaWYgeCBub3QgaW4gZXhpc3RpbmdfaW50ZW50c10KICAgIGludGVudHNfdG9fc2tpcCA9IFt4IGZvciB4IGluIGludGVudHMgaWYgeCBpbiBleGlzdGluZ19pbnRlbnRzXQoKICAgIHByaW50KGYiU2tpcHBpbmcgaW50ZW50cyBhcyB0aGV5IGFscmVhZHkgZXhpc3Q6IHtpbnRlbnRzX3RvX3NraXB9IikKCiAgICBmb3IgaW50ZW50IGluIGludGVudHNfdG9fY3JlYXRlOgogICAgICAgIHRyeToKICAgICAgICAgICAgcHJpbnQoZiJDcmVhdGluZzoge2ludGVudH0iKQogICAgICAgICAgICB3aXRfY2xpZW50LmNyZWF0ZV9pbnRlbnQoaW50ZW50KQogICAgICAgICAgICBwcmludChmIkludGVudCAne2ludGVudH0nIGNyZWF0ZWQiKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6CiAgICAgICAgICAgIHByaW50KGYiVW5hYmxlIHRvIGNyZWF0ZToge2ludGVudH0iKQogICAgICAgICAgICBwcmludChleCkKPHxmaW1fc3VmZml4fD4KCiAgICBBcmdzOgogICAgICAgIHdpdF9jbGllbnQgKFdpdCk6IEluc3RhbnRpYXRlZCBXaXQgQ2xpZW50CiAgICAgICAgaW50ZW50cyAoTGlzdFtzdHJdKTogQWxsIGludGVudHMgdG8gYmUgY3JlYXRlZC4KPHxmaW1fZW5kfD4="]
["5c73543b366b33e6988b01da6c1693a497a17b8e-4","5c73543b366b33e6988b01da6c1693a497a17b8e","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uc2hvcnRjdXRzIGltcG9ydCByZW5kZXIKaW1wb3J0IHJlcXVlc3RzCmZyb20gZGphbmdvLmh0dHAgaW1wb3J0IEpzb25SZXNwb25zZQppbXBvcnQganNvbgpmcm9tIGRqYW5nby5odHRwIGltcG9ydCBIdHRwUmVzcG9uc2UKaW1wb3J0IG9zCmZyb20gcmVzdF9mcmFtZXdvcmsgaW1wb3J0IHZpZXdzZXRzCmZyb20gLm1vZGVscyBpbXBvcnQgQWxpYXNlcwpmcm9tIC5zZXJpYWxpemVycyBpbXBvcnQgQWxpYXNlc1NlcmlhbGl6ZXJzCiMgZnJvbSByZXN0X2ZyYW1ld29yay5yZXNwb25zZSBpbXBvcnQgUmVzcG9uc2UKZnJvbSBkamFuZ28udmlld3MuZGVjb3JhdG9ycy5jc3JmIGltcG9ydCBjc3JmX2V4ZW1wdApmcm9tIHJlc3RfZnJhbWV3b3JrLnBlcm1pc3Npb25zIGltcG9ydCBJc0F1dGhlbnRpY2F0ZWQKZnJvbSByZXN0X2ZyYW1ld29yay5kZWNvcmF0b3JzIGltcG9ydCBwZXJtaXNzaW9uX2NsYXNzZXMsIGFwaV92aWV3ClVTRVJOQU1FID0gb3MuZW52aXJvbi5nZXQoJ1VTRVJOQU1FJykKRE9NQUlOU19QUk9WSURFRCA9IHsiZG9tYWlucyI6IFsic3dpZnRtZWdhbWluZHMudGVjaCIsICJoYXNoLmZ5aSIsICJoaWRlYWRkcmVzcy5uZXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWlsc2lyZS5jb20iLCAic2VjcmV0LmZ5aSJdCiAgICAgICAgICAgICAgICAgICAgfQoKCiMgVXRpbGl0eSBmdW5jdGlvbgpkZWYgcmVxdWVzdF9nZXRfdXRpbChkb21haW49JycsIHBheWxvYWQ9Tm9uZSk6CiAgICBGT1JXQVJEX0VNQUlMX0VORFBPSU5UID0gZiJodHRwczovL2FwaS5mb3J3YXJkZW1haWwubmV0L3YxL2RvbWFpbnMve2RvbWFpbn0vYWxpYXNlcyIKICAgIGlmIG5vdCBwYXlsb2FkOgogICAgICAgIHJldHVybiByZXF1ZXN0cy5nZXQoRk9SV0FSRF9FTUFJTF9FTkRQT0lOVCwgYXV0aD0oVVNFUk5BTUUsICcnKSkKICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIHJlcXVlc3RzLnBvc3QoRk9SV0FSRF9FTUFJTF9FTkRQT0lOVCwgYXV0aD0oVVNFUk5BTUUsICcnKSwganNvbj1wYXlsb2FkKQoKCmRlZiBnZXRfYWxpYXNlcyhyZXF1ZXN0KToKICAgICIiIgogICAgUmV0dXJucyBhbGwgdGhlIEFsaWFzZXMKICAgIEFQSV9FTkRQT0lOVDphcGkvdjEvYWxpYXNlcwogICAgIiIiCiAgICByZXMgPSByZXF1ZXN0X2dldF91dGlsKCkKICAgIHJldHVybiBKc29uUmVzcG9uc2UocmVzLmpzb24oKSwgc2FmZT1GYWxzZSkKCgpAYXBpX3ZpZXcoWydHRVQnXSkKQHBlcm1pc3Npb25fY2xhc3NlcyhbSXNBdXRoZW50aWNhdGVkXSkKZGVmIGdldF9hbGlhc2VzX3VzZXIocmVxdWVzdCk6CiAgICAiIiIKICAgIFJldHVybnMgYWxsIHRoZSBBbGlhc2VzCiAgICBBUElfRU5EUE9JTlQ6YXBpL3YxL2FsaWFzZXMKICAgIC0tLS0tLS0tLS0KICAgIHBheWxvYWQKICAgIHsKICAgICJlbWFpbCI6ImFAYS5jb20iCiAgICB9CiAgICAiIiIKICAgIGFsaWFzX2FycmF5ID0gW10KICAgIHBheWxvYWQgPSB7fQogICAgcHJpbnQoImNhbWUgdG8gZ2V0X2FsaWFzZXNfdXNlcigpIikKICAgIGRhdGFfcmVjZWl2ZWQgPSBqc29uLmxvYWRzKHJlcXVlc3QuYm9keSkKICAgIGVtYWlsID0gZGF0YV9yZWNlaXZlZFsiZW1haWwiXQogICAgcHJpbnQoZiJFbWFpbCBib2R5OntlbWFpbH0iKQogICAgZGJfZGF0YSA9IEFsaWFzZXMub2JqZWN0cy5maWx0ZXIodXNlcl9fZW1haWw9ZW1haWwpCiAgICBwcmludChmIlF1ZXJ5U2V0LT57ZGJfZGF0YX0iKQogICAgZm9yIHggaW4gZGJfZGF0YToKICAgICAgICBhbGlhc19hcnJheS5hcHBlbmQoeC5hbGlhcykKICAgIHJldHVybiBKc29uUmVzcG9uc2UoeyJhbGlhcyI6YWxpYXNfYXJyYXl9LCBzYWZlPUZhbHNlKQoKCgoKCkBhcGlfdmlldyhbJ0dFVCddKQpAcGVybWlzc2lvbl9jbGFzc2VzKFtJc0F1dGhlbnRpY2F0ZWRdKQpkZWYgZ2V0X2RvbWFpbnMocmVxdWVzdCk6CiAgICAiIiIKICAgIFJFRFVOREFOVAogICAgUmV0dXJuIGFsbCB0aGUgZG9tYWlucwogICAgQVBJX0VORFBPSU5UOmFwaS92MS9hbGlhc2VzL2RvbWFpbnMKICAgICIiIgogICAgcmV0dXJuIEpzb25SZXNwb25zZShET01BSU5TX1BST1ZJREVEKQoKCkBjc3JmX2V4ZW1wdApAYXBpX3ZpZXcoWydHRVQnLCAnUE9TVCddKQpAcGVybWlzc2lvbl9jbGFzc2VzKFtJc0F1dGhlbnRpY2F0ZWRdKQpkZWYgZ2V0X2FsaWFzX2ZpbHRlcmVkKHJlcXVlc3QsIERPTUFJTik6CiAgICAiIiIKICAgIFJldHVybiBEb21haW4gZmlsdGVyZWQgYnkgZG9tYWluCiAgICBBUElfRU5EUE9JTlQ6YXBpL3YxL2FsaWFzLzxkb21haW5zPgogICAgSnNvbiByYXcgYm9keSAKICAgIC0tLS0tLS0tLS0tLS0tLQogICAgQXV0aCB3aWxsIGJlIGhlYWRlciB3aXRoIGtleSBBdXRob3JpemF0aW9uIDogVG9rZW4gYTg1ZWZjODNjY2I2Mjk4NzhhNGQ2ZDE1ZTFmYzFmZmI1MTEzNmRhOQogICAgewogICAgIm5hbWUiOiAiNDMyIiwKICAgICJyZWNpcGllbnRzIjogInJhbmRvbUBlbWFpbC5jb20iLAogICAgImlzX2VuYWJsZWQiOiB0cnVlCiAgICB9CiAgICAtLS0tLS0tLS0tLS0tLS0KICAgICIiIgogICAgaWYgKHJlcXVlc3QubWV0aG9kID09ICdHRVQnKToKICAgICAgICByZXMgPSByZXF1ZXN0X2dldF91dGlsKGRvbWFpbj1ET01BSU4pCiAgICAgICAgZGF0YSA9IFtdCiAgICAgICAgZm9yIHggaW4gcmVzLmpzb24oKToKICAgICAgICAgICAgcmVzcG9zZV9kaWN0ID0geyJuYW1lIjogeFsibmFtZSJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImRvbWFpbiI6IHhbImRvbWFpbiJdWyJuYW1lIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWQiOiB4WyJpZCJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlY2lwaWVudHMiOiBbeFsicmVjaXBpZW50cyJdXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpc19lbmFibGVkIjogVHJ1ZX0KICAgICAgICAgICAgZGF0YS5hcHBlbmQocmVzcG9zZV9kaWN0KQogICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbi5kdW1wcyhkYXRhKSkKICAgIGVsaWYgKHJlcXVlc3QubWV0aG9kID09ICdQT1NUJyk6CiAgICAgICAgZGF0YV9yZWNlaXZlZCA9IGpzb24ubG9hZHMocmVxdWVzdC5ib2R5KQogICAgICAgIGJsYW5rID0gewogICAgICAgICAgICAibmFtZSI6IGRhdGFfcmVjZWl2ZWRbIm5hbWUiXSwKICAgICAgICAgICAgInJlY2lwaWVudHMiOiBkYXRhX3JlY2VpdmVkWyJyZWNpcGllbnRzIl0sCiAgICAgICAgICAgICJpc19lbmFibGVkIjogZGF0YV9yZWNlaXZlZFsiaXNfZW5hYmxlZCJdCiAgICAgICAgfQogICAgICAgIHByaW50KGRhdGFfcmVjZWl2ZWQpCiAgICAgICAgcmVzID0gcmVxdWVzdF9nZXRfdXRpbChkb21haW49RE9NQUlOLCBwYXlsb2FkPWJsYW5rKQogICAgICAgIHJldHVybiBKc29uUmVzcG9uc2UocmVzLmpzb24oKSwgc2FmZT1GYWxzZSkKCgpkZWYgY3JlYXRlX2FsaWFzKHJlcXVlc3QsIERPTUFJTik6CiAgICAiIiIKICAgIFJldHVybnMgYSBQT1NUIHJlcXVlc3QKICAgIEVORFBPSU5UIDogaHR0cHM6Ly9hcGkuZm9yd2FyZGVtYWlsLm5ldC92MS9kb21haW5zL2hpZGVhZGRyZXNzLm5ldC9hbGlhc2VzCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICIiIgogICAgcmVzID0gcmVxdWVzdF9nZXRfdXRpbChkb21haW49RE9NQUlOKQogICAgaWYgcmVzLnN0YXR1c19jb2RlID09IDIwMDoKICAgICAgICBwcmludCgiYWRkZWRkIHRoZSBhbGlhcyIpCjx8ZmltX2VuZHw+"]
["a479214d8dd8a8d0514c7f9047a21ce049d55f4f-3","a479214d8dd8a8d0514c7f9047a21ce049d55f4f","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBtb2RlbHMgaW1wb3J0ICoKZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KCgo8fGZpbV9lbmR8Pg=="]
["77ca3849820520aa0cef5e85ab7abb5e2b445e98-1","77ca3849820520aa0cef5e85ab7abb5e2b445e98","PHxmaW1fcHJlZml4fD4KIyAoYykgQ29weXJpZ2h0IDIwMTctMjAxOCBPTFgKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKCmltcG9ydCBiYXNlNjQKaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCBzeXMKaW1wb3J0IHRyYWNlYmFjawoKZnJvbSB1c2VyX2Vycm9yIGltcG9ydCBVc2VyRXJyb3IKaW1wb3J0IGt1YmVfeWFtbAppbXBvcnQgdmFyX3R5cGVzCgoKY2xhc3MgQmFzZTY0KHZhcl90eXBlcy5WYXJFbnRpdHkpOgogICAgZGVmIGluaXQoc2VsZiwgdmFsdWUpOgogICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQoKICAgIGRlZiB0b19zdHJpbmcoc2VsZik6CiAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLnZhbHVlLCB2YXJfdHlwZXMuVmFyRW50aXR5KSBhbmQgc2VsZi5faW5fdmFsaWRhdGlvbjoKICAgICAgICAgICAgcyA9IHNlbGYudmFsdWUudmFsaWRhdGlvbl92YWx1ZSgpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcyA9IHN0cihzZWxmLnZhbHVlKQogICAgICAgIHRyeToKICAgICAgICAgICAgcmV0dXJuIGJhc2U2NC5iNjRlbmNvZGUocykuZGVjb2RlKCd1dGY4JykKICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICByZXR1cm4gYmFzZTY0LmI2NGVuY29kZShzLmVuY29kZSgndXRmOCcpKS5kZWNvZGUoJ3V0ZjgnKQoKCmNsYXNzIEpTT04odmFyX3R5cGVzLlZhckVudGl0eSk6CiAgICBkZWYgaW5pdChzZWxmLCB2YWx1ZSk6CiAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCiAgICAgICAgc2VsZi5hcmdzID0geydpbmRlbnQnOiBOb25lLCAnc2VwYXJhdG9ycyc6ICgnLCcsJzonKX0KPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICBpZiBzZWxmLl9pbl92YWxpZGF0aW9uOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmoudmFsaWRhdGlvbl92YWx1ZSgpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHIob2JqKQogICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlVua25vd24gdHlwZSBmb3Igb2JqZWN0IHt9Ii5mb3JtYXQocmVwcihvYmopKSkKICAgICAgICByZXR1cm4ganNvbi5KU09ORW5jb2RlcihkZWZhdWx0PV9kZWZhdWx0X2pzb24sICoqKHNlbGYuYXJncykpLmVuY29kZShzZWxmLnZhbHVlKQoKCmNsYXNzIFlBTUwodmFyX3R5cGVzLlZhckVudGl0eSk6CiAgICBkZWYgaW5pdChzZWxmLCB2YWx1ZSk6CiAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCgogICAgZGVmIHRvX3N0cmluZyhzZWxmKToKICAgICAgICByZXQgPSBrdWJlX3lhbWwueWFtbF9zYWZlX2R1bXAoc2VsZi52YWx1ZSwgZGVmYXVsdF9mbG93X3N0eWxlPUZhbHNlKQogICAgICAgIGlmIGlzaW5zdGFuY2UocmV0LCB2YXJfdHlwZXMuVmFyRW50aXR5KSBhbmQgc2VsZi5faW5fdmFsaWRhdGlvbjoKICAgICAgICAgICAgcmV0dXJuIHJldC52YWxpZGF0aW9uX3ZhbHVlKCkKICAgICAgICByZXR1cm4gc3RyKHJldCkKCgpjbGFzcyBDb25maWRlbnRpYWwodmFyX3R5cGVzLlZhckVudGl0eSk6CiAgICBkZWYgaW5pdChzZWxmLCB2YWx1ZSk6CiAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCgogICAgZGVmIGVxKHNlbGYsIG90aGVyKToKICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQoKICAgIGRlZiB0b19zdHJpbmcoc2VsZik6CiAgICAgICAgaWYgdmFyX3R5cGVzLlZhckNvbnRleHQuY3VycmVudF9jb250ZXh0IGlzIG5vdCBOb25lOgogICAgICAgICAgICB2YXJfdHlwZXMuVmFyQ29udGV4dC5jdXJyZW50X2NvbnRleHRbJ2NvbmZpZGVudGlhbCddID0gVHJ1ZQogICAgICAgIGlmIHZhcl90eXBlcy5WYXJDb250ZXh0LnNob3dfY29uZmlkZW50aWFsIG9yIHNlbGYuX2luX3ZhbGlkYXRpb246CiAgICAgICAgICAgIHJldHVybiBzdHIoc2VsZi52YWx1ZSkKICAgICAgICByZXR1cm4gIioqKiBISURERU4gKioqIgoKCmNsYXNzIENvbW1hbmRSdW50aW1lRXhjZXB0aW9uKEV4Y2VwdGlvbik6CiAgICBwYXNzCgoKY2xhc3MgQ29tbWFuZCh2YXJfdHlwZXMuVmFyRW50aXR5KToKICAgIGRlZiBpbml0KHNlbGYsIGNtZCwgY3dkPU5vbmUsIGVudl9jbGVhcj1GYWxzZSwgZW52PU5vbmUsIGdvb2RfcmM9Tm9uZSwgcnN0cmlwPUZhbHNlLCBlb2w9RmFsc2UpOgogICAgICAgIHNlbGYuY21kID0gY21kCiAgICAgICAgc2VsZi5jd2QgPSBjd2QKICAgICAgICBzZWxmLmVudl9jbGVhciA9IGVudl9jbGVhcgogICAgICAgIHNlbGYuZW52ID0gZW52CiAgICAgICAgc2VsZi5nb29kX3JjID0gZ29vZF9yYwogICAgICAgIHNlbGYucnN0cmlwID0gcnN0cmlwCiAgICAgICAgc2VsZi5lb2wgPSBlb2wKICAgICAgICBzZWxmLnRiID0gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soKQoKICAgIGRlZiB0b19zdHJpbmcoc2VsZik6CiAgICAgICAgaWYgc2VsZi5faW5fdmFsaWRhdGlvbjoKICAgICAgICAgICAgcmV0dXJuICJjb21tYW5kX291dHB1dCIKCiAgICAgICAgZW52ID0ge30KICAgICAgICBpZiBub3Qgc2VsZi5lbnZfY2xlYXI6CiAgICAgICAgICAgIGVudi51cGRhdGUob3MuZW52aXJvbikKICAgICAgICBpZiBzZWxmLmVudiBpcyBub3QgTm9uZToKICAgICAgICAgICAgZm9yIGUgaW4gc2VsZi5lbnY6CiAgICAgICAgICAgICAgICBlbnZbZV0gPSBzdHIoc2VsZi5lbnZbZV0pCgogICAgICAgIHRyeToKICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4obWFwKHN0ciwgc2VsZi5jbWQpLCBjbG9zZV9mZHM9VHJ1ZSwgc2hlbGw9RmFsc2UsIGN3ZD1zZWxmLmN3ZCwgZW52PWVudiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICByYWlzZSBVc2VyRXJyb3IoQ29tbWFuZFJ1bnRpbWVFeGNlcHRpb24oIkNvbW1hbmQge30gZGlkbid0IHJ1bjoge306IHt9Ii5mb3JtYXQoc2VsZi5jbWRbMF0sIGUuX19jbGFzc19fLl9fbmFtZV9fLCBzdHIoZSkpKSwgdGI9c2VsZi50YikKCiAgICAgICAgKG91dCwgZXJyKSA9IHAuY29tbXVuaWNhdGUoKQoKICAgICAgICBvdXQgPSBvdXQuZGVjb2RlKCd1dGY4JykKICAgICAgICBlcnIgPSBlcnIuZGVjb2RlKCd1dGY4JykKCiAgICAgICAgaWYgbGVuKGVyci5zdHJpcCgpKSAhPSAwOgogICAgICAgICAgICBwcmludChlcnIucnN0cmlwKCksIGZpbGU9c3lzLnN0ZGVycikKCiAgICAgICAgaWYgc2VsZi5yc3RyaXA6CiAgICAgICAgICAgIG91dCA9IG91dC5yc3RyaXAoKQogICAgICAgIGlmIHNlbGYuZW9sIGFuZCAob3V0ID09ICcnIG9yIG91dFstMV0gIT0gJ1xuJyk6CiAgICAgICAgICAgIG91dCArPSAnXG4nCgogICAgICAgIGlmIHNlbGYuZ29vZF9yYyBpcyBOb25lIG9yIHJjIGluIHNlbGYuZ29vZF9yYzoKICAgICAgICAgICAgcmV0dXJuIG91dAoKICAgICAgICByYWlzZSBVc2VyRXJyb3IoQ29tbWFuZFJ1bnRpbWVFeGNlcHRpb24oIkNvbW1hbmQge30gZXhpdGVkIHdpdGggY29kZSByYz17fSIuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbWRbMF0sIHAucmV0dXJuY29kZSkpLCB0Yj1zZWxmLnRiKQo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiB0b19zdHJpbmcoc2VsZik6CiAgICAgICAgZGVmIF9kZWZhdWx0X2pzb24ob2JqKToKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIHZhcl90eXBlcy5WYXJFbnRpdHkpOgo8fGZpbV9lbmR8Pg=="]
["56d7a0ff1071de3fe35a3163809c62b75235dd92-1","56d7a0ff1071de3fe35a3163809c62b75235dd92","PHxmaW1fcHJlZml4fD4KZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKZnJvbSBwYW5saW5kcm9taWNfc3Vic3RyaW5ncyBpbXBvcnQgY291bnRTdWJzdHJpbmdzCgpjbGFzcyBUZXN0KFRlc3RDYXNlKToKICAgIGRlZiB0ZXN0X2NvdW50X3N1YnN0cmluZ3Moc2VsZik6CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudFN1YnN0cmluZ3MoImFiYyIpLCAzKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudFN1YnN0cmluZ3MoImFhYSIpLCA2KQo8fGZpbV9lbmR8Pg=="]
["247ca7a297fe99ce3c58b82e960f4dee91be33ae-1","247ca7a297fe99ce3c58b82e960f4dee91be33ae","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKEMpIDIwMjAgR2hpZmFyaSBQcmFkYW5hCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCgpmcm9tIGZsb29kc3lzdGVtLnN0YXRpb24gaW1wb3J0IGluY29uc2lzdGVudF90eXBpY2FsX3JhbmdlX3N0YXRpb25zCmZyb20gZmxvb2RzeXN0ZW0uc3RhdGlvbmRhdGEgaW1wb3J0IGJ1aWxkX3N0YXRpb25fbGlzdAoKCmRlZiBydW4oKToKICAgIHN0YXRpb25zID0gYnVpbGRfc3RhdGlvbl9saXN0KCkKICAgIHByaW50KGluY29uc2lzdGVudF90eXBpY2FsX3JhbmdlX3N0YXRpb25zKHN0YXRpb25zKSkKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBydW4oKQo8fGZpbV9lbmR8Pg=="]
["247982de87704e1e06ded173a760a424c4479dbf-2","247982de87704e1e06ded173a760a424c4479dbf","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmltcG9ydCBvcwppbXBvcnQgc2h1dGlsCmltcG9ydCBzdWJwcm9jZXNzCmZyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKClBST0pFQ1RfRElSRUNUT1JZID0gb3MucGF0aC5yZWFscGF0aChvcy5wYXRoLmN1cmRpcikKCgpkZWYgcmVtb3ZlX2ZpbGUoZmlsZXBhdGgpOgogICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihQUk9KRUNUX0RJUkVDVE9SWSwgZmlsZXBhdGgpKQoKCmRlZiByZW1vdmVfZm9sZGVyKGZvbGRlcnBhdGgpOgogICAgc2h1dGlsLnJtdHJlZShmb2xkZXJwYXRoKQoKCkBjb250ZXh0bWFuYWdlcgpkZWYgaW5zaWRlX2RpcihkaXJwYXRoKToKICAgICIiIgogICAgRXhlY3V0ZSBjb2RlIGZyb20gaW5zaWRlIHRoZSBnaXZlbiBkaXJlY3RvcnkKICAgIDpwYXJhbSBkaXJwYXRoOiBTdHJpbmcsIHBhdGggb2YgdGhlIGRpcmVjdG9yeSB0aGUgY29tbWFuZCBpcyBiZWluZyBydW4uCiAgICAiIiIKICAgIG9sZF9wYXRoID0gb3MuZ2V0Y3dkKCkKICAgIHRyeToKICAgICAgICBvcy5jaGRpcihkaXJwYXRoKQogICAgICAgIHlpZWxkCiAgICBmaW5hbGx5OgogICAgICAgIG9zLmNoZGlyKG9sZF9wYXRoKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CgogICAgc3VicHJvY2Vzcy5jYWxsKCgnZ2l0JywgJ2luaXQnLCAnLS1pbml0aWFsLWJyYW5jaD1tYWluJykpCiAgICBzdWJwcm9jZXNzLmNhbGwoKCdnaXQnLCAnYWRkJywgJy4nKSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGlmICd7eyBjb29raWVjdXR0ZXIuY3JlYXRlX2F1dGhvcl9maWxlIH19JyAhPSAneSc6CiAgICAgICAgcmVtb3ZlX2ZpbGUoJ0FVVEhPUlMucnN0JykKCjx8ZmltX2VuZHw+"]
["bb2b29731921cb4b8d25735f3366beb35f6d5d8b-5","bb2b29731921cb4b8d25735f3366beb35f6d5d8b","PHxmaW1fcHJlZml4fD4KIyB1bmNvbXB5bGU2IHZlcnNpb24gMy43LjQKIyBQeXRob24gYnl0ZWNvZGUgMy43ICgzMzk0KQojIERlY29tcGlsZWQgZnJvbTogUHl0aG9uIDMuNy45ICh0YWdzL3YzLjcuOToxM2M5NDc0N2M3LCBBdWcgMTcgMjAyMCwgMTg6NTg6MTgpIFtNU0Mgdi4xOTAwIDY0IGJpdCAoQU1ENjQpXQojIEVtYmVkZGVkIGZpbGUgbmFtZTogVDpcSW5HYW1lXEdhbWVwbGF5XFNjcmlwdHNcU2VydmVyXHJlbGF0aW9uc2hpcHNccmVsYXRpb25zaGlwX2JpdF9hZGQucHkKIyBDb21waWxlZCBhdDogMjAyMC0wNi0wOSAwMzozMTozNQojIFNpemUgb2Ygc291cmNlIG1vZCAyKiozMjogMzQyOSBieXRlcwpmcm9tIHJlbGF0aW9uc2hpcHMucmVsYXRpb25zaGlwX3RyYWNrIGltcG9ydCBSZWxhdGlvbnNoaXBUcmFjawpmcm9tIGludGVyYWN0aW9ucy51dGlscy5sb290X2Jhc2ljX29wIGltcG9ydCBCYXNlTG9vdE9wZXJhdGlvbgpmcm9tIHJlbGF0aW9uc2hpcHMucmVsYXRpb25zaGlwX2JpdCBpbXBvcnQgUmVsYXRpb25zaGlwQml0CmZyb20gc2ltczQudHVuaW5nLnR1bmFibGUgaW1wb3J0IFR1bmFibGVSZWZlcmVuY2UsIFR1bmFibGVSYW5nZSwgVHVuYWJsZUxpc3QsIFR1bmFibGVUdXBsZSwgVHVuYWJsZQppbXBvcnQgaW50ZXJhY3Rpb25zLnV0aWxzLCBzZXJ2aWNlcywgc2ltczQKCmNsYXNzIFJlbGF0aW9uc2hpcEJpdE9uRmlsdGVyZWRTaW1zKEJhc2VMb290T3BlcmF0aW9uKToKICAgIEZBQ1RPUllfVFVOQUJMRVMgPSB7J3JlbF9iaXRzJzpUdW5hYmxlTGlzdChkZXNjcmlwdGlvbj0nXG4gICAgICAgICAgICBMaXN0IG9mIHJlbGF0aW9uc2hpcCBiaXRzIHRvIGFkZCBvbnRvIHRoZSBzaW1zIHRoYXQgbWF0Y2ggdGhlIGZpbHRlci5cbiAgICAgICAgICAgICcsCiAgICAgICB0dW5hYmxlPVJlbGF0aW9uc2hpcEJpdC5UdW5hYmxlUGFja1NhZmVSZWZlcmVuY2UoZGVzY3JpcHRpb249J1xuICAgICAgICAgICAgICAgIEEgcmVsYXRpb25zaGlwIGJpdCB0byBhZGQgb250byB0aGUgc2ltcyB0aGF0IG1hdGNoIHRoZSBmaWx0ZXIuXG4gICAgICAgICAgICAgICAgJykpLCAKICAgICAncmVsYXRpb25zaGlwX3Njb3JlJzpUdW5hYmxlKGRlc2NyaXB0aW9uPSdcbiAgICAgICAgICAgIFRoZSByZWxhdGlvbnNoaXAgc2NvcmUgdG8gYWRkIHRvIHNpbXMgdGhhdCBtYXRjaCB0aGUgZmlsdGVyLlxuICAgICAgICAgICAgJywKICAgICAgIGRlZmF1bHQ9MSwKICAgICAgIHR1bmFibGVfdHlwZT1pbnQpLCAKICAgICAnZmlsdGVyX3NldHRpbmdzJzpUdW5hYmxlVHVwbGUoc2ltX2ZpbHRlcj1UdW5hYmxlUmVmZXJlbmNlKGRlc2NyaXB0aW9uPSdcbiAgICAgICAgICAgICAgICBBIGZpbHRlciB0byBhcHBseSBvbiB0aGUgc2ltIHBvcHVsYXRpb24uXG4gICAgICAgICAgICAgICAgJywKICAgICAgIG1hbmFnZXI9KHNlcnZpY2VzLmdldF9pbnN0YW5jZV9tYW5hZ2VyKHNpbXM0LnJlc291cmNlcy5UeXBlcy5TSU1fRklMVEVSKSkpLAogICAgICAgZGVzaXJlZF9zaW1fY291bnQ9VHVuYWJsZVJhbmdlKGRlc2NyaXB0aW9uPSdcbiAgICAgICAgICAgICAgICBUaGUgZGVzaXJlZCBudW1iZXIgb2YgU2ltcyB0byBhZGQgcmVsIGJpdHMgdG8uXG4gICAgICAgICAgICAgICAgJywKICAgICAgIHR1bmFibGVfdHlwZT1pbnQsCiAgICAgICBkZWZhdWx0PTEsCiAgICAgICBtaW5pbXVtPTEpKX0KCiAgICBkZWYgX19pbml0X18oc2VsZiwgcmVsX2JpdHMsIHJlbGF0aW9uc2hpcF9zY29yZSwgZmlsdGVyX3NldHRpbmdzLCAqKmt3YXJncyk6CiAgICAgICAgKHN1cGVyKCkuX19pbml0X18pKCoqa3dhcmdzKQogICAgICAgIHNlbGYuX3JlbF9iaXRzID0gcmVsX2JpdHMKICAgICAgICBzZWxmLl9yZWxfc2NvcmUgPSByZWxhdGlvbnNoaXBfc2NvcmUKICAgICAgICBzZWxmLl9maWx0ZXJfc2V0dGluZ3MgPSBmaWx0ZXJfc2V0dGluZ3MKCiAgICBAcHJvcGVydHkKPHxmaW1faG9sZXw+CiAgICAgICAgcmVsYXRpb25zaGlwX3RyYWNrZXIgPSBzdWJqZWN0LnJlbGF0aW9uc2hpcF90cmFja2VyCgogICAgICAgIGRlZiBmaWx0ZXJfY2FsbGJhY2soZmlsdGVyX3Jlc3VsdHMsIGJvdW5jZXJfcmVxdWVzdCk6CiAgICAgICAgICAgIGZvciByZXN1bHQgaW4gZmlsdGVyX3Jlc3VsdHM6CiAgICAgICAgICAgICAgICBmb3IgcmVsX2JpdCBpbiBzZWxmLl9yZWxfYml0czoKICAgICAgICAgICAgICAgICAgICByZWxhdGlvbnNoaXBfdHJhY2tlci5hZGRfcmVsYXRpb25zaGlwX3Njb3JlKHJlc3VsdC5zaW1faW5mby5zaW1faWQsIHNlbGYuX3JlbF9zY29yZSkKICAgICAgICAgICAgICAgICAgICByZWxhdGlvbnNoaXBfdHJhY2tlci5hZGRfcmVsYXRpb25zaGlwX2JpdChyZXN1bHQuc2ltX2luZm8uc2ltX2lkLCByZWxfYml0KQoKICAgICAgICBmaWx0ZXJfc2VydmljZSA9IHNlcnZpY2VzLnNpbV9maWx0ZXJfc2VydmljZSgpCiAgICAgICAgZmlsdGVyX3NlcnZpY2Uuc3VibWl0X21hdGNoaW5nX2ZpbHRlcihudW1iZXJfb2Zfc2ltc190b19maW5kPShzZWxmLl9maWx0ZXJfc2V0dGluZ3MuZGVzaXJlZF9zaW1fY291bnQpLCBzaW1fZmlsdGVyPShzZWxmLl9maWx0ZXJfc2V0dGluZ3Muc2ltX2ZpbHRlciksCiAgICAgICAgICBjYWxsYmFjaz1maWx0ZXJfY2FsbGJhY2ssCiAgICAgICAgICBibGFja2xpc3Rfc2ltX2lkcz17CiAgICAgICAgIHN1YmplY3QuaWR9LAogICAgICAgICAgZ3NpX3NvdXJjZV9mbj0obGFtYmRhIDogJ1JlbGF0aW9uc2hpcEJpdE9uRmlsdGVyZWRTaW1zIExvb3Q6IEFkZGluZyB7fSB0byBmaWx0ZXJlZCBzaW1zJy5mb3JtYXQoc3RyKHNlbGYuX3JlbF9iaXRzKSkpKQo8fGZpbV9zdWZmaXh8PgogICAgZGVmIGxvb3RfdHlwZShzZWxmKToKICAgICAgICByZXR1cm4gaW50ZXJhY3Rpb25zLnV0aWxzLkxvb3RUeXBlLlJFTEFUSU9OU0hJUF9CSVQKCiAgICBkZWYgX2FwcGx5X3RvX3N1YmplY3RfYW5kX3RhcmdldChzZWxmLCBzdWJqZWN0LCB0YXJnZXQsIHJlc29sdmVyKToKPHxmaW1fZW5kfD4="]
["7ae478e74cdb9433caede659feb5a45123e4c4d8-2","7ae478e74cdb9433caede659feb5a45123e4c4d8","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28gaW1wb3J0IGZvcm1zCgo8fGZpbV9ob2xlfD4KICAgIHVzYWdlX3R5cGUgPSBmb3Jtcy5DaG9pY2VGaWVsZChyZXF1aXJlZD1UcnVlLCBjaG9pY2VzPSgoJ2NlcGgnLCAnY2VwaCcpLCAoJ3ZvbHVtZScsICd2b2x1bWUnKSwgKCdpc2NzaScsICdpc2NzaScpKSkKICAgIGRhdGEgPSBmb3Jtcy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIHJlcXVpcmVkPVRydWUpCjx8ZmltX3N1ZmZpeHw+CgpjbGFzcyBBZGRTZWNyZXQoZm9ybXMuRm9ybSk6CiAgICBlcGhlbWVyYWwgPSBmb3Jtcy5DaG9pY2VGaWVsZChyZXF1aXJlZD1UcnVlLCBjaG9pY2VzPSgoJ25vJywgJ25vJyksICgneWVzJywgJ3llcycpKSkKICAgIHByaXZhdGUgPSBmb3Jtcy5DaG9pY2VGaWVsZChyZXF1aXJlZD1UcnVlLCBjaG9pY2VzPSgoJ25vJywgJ25vJyksICgneWVzJywgJ3llcycpKSkKPHxmaW1fZW5kfD4="]
["d8d1169fafc04747997b8e235c26d27919797313-5","d8d1169fafc04747997b8e235c26d27919797313","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCmltcG9ydCBzeXMKaW1wb3J0IHRpbWUKaW1wb3J0IHJlCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgbG9nZ2luZwppbXBvcnQgd2FybmluZ3MKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKCndhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiKQoKZnJvbSBwc3MxODMwc3NoLnBzczE4MzBjbGkgaW1wb3J0IFBTUzE4MzBDbGkKZnJvbSBwc3MxODMwc3NoLnBzczE4MzByb290IGltcG9ydCBQU1MxODMwUm9vdAoKZnJvbSBfX3ZlcnNpb25fXyBpbXBvcnQgVkVSU0lPTgoKUkVUX0xPR0lOX0ZBSUwgPSAxClJFVF9DT01NQU5EX0ZBSUwgPSAyClJFVF9TSEVMRl9MT0dJTl9GQUlMID0gMwpSRVRfVU5LTk9XTl9FUlJPUiA9IDQKUkVUX1dST05HX0FSR1MgPSAtMQoKZGVmIGVycihtc2cpOgogICAgcGFzcwoKZGVmIG91dChtc2cpOgogICAgcHJpbnQobXNnLCBlbmQ9JycpCgpkZWYgZ2V0X3BhcnNlcigpOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249IkV4ZWN1dGUgQ0xJL3Jvb3QgY29tbWFuZHMgb24gYSAxODMwLVBTUyBORSIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbScsICctLW1vZGUnLCB0eXBlPXN0ciwgY2hvaWNlcz1bJ3Jvb3QnLCAnY2xpJ10sIHJlcXVpcmVkPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ik1vZGUgZm9yIGNvbW1hbmRzOiBjYW4gYmUgZWl0aGVyIGFzIHJvb3Qgb3IgY2xpIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0taG9zdCcsIHR5cGU9c3RyLCBoZWxwPSJJUCBhZGRyZXNzIG9mIFBTUyBub2RlIiwgcmVxdWlyZWQ9VHJ1ZSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcG9ydCcsIGhlbHA9IlBvcnQgKGRlZmF1bHQ6IDIyKSIsIGRlZmF1bHQ9MjIsIHR5cGU9aW50KQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXUnLCAnLS11c2VyJywgcmVxdWlyZWQ9VHJ1ZSwgaGVscD0iVXNlcm5hbWUiLCB0eXBlPXN0cikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1wJywgJy0tcGFzcycsIG1ldGF2YXI9InAiLCByZXF1aXJlZD1UcnVlLCBoZWxwPSJQYXNzd29yZCIsIHR5cGU9c3RyKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWwnLCAnLS1zbG90JywgdHlwZT1zdHIsIAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJSdW4gY29tbWFuZCBpbiBhIGNhcmQgYXQgc2hlbGYvc2xvdCAoZS5nLiAyLzEpLiBBcHBsaWNhYmxlIGZvciByb290IG1vZGUgb25seSIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYycsICctLWNvbW1hbmQnLCByZXF1aXJlZD1UcnVlLCBuYXJncz0iKyIsIAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJDb21tYW5kKHMpLiBDYW4gYmUgcmVwZWF0ZWQiLCBhY3Rpb249ImFwcGVuZCIsIHR5cGU9c3RyKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXcnLCAnLS10aW1lb3V0JywKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iVGltZW91dCAocykgZm9yIHNlbmRpbmcvd2FpdGluZyBmb3IgY29tbWFuZHMvcmVzdWx0cyIsIHR5cGU9aW50KQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLVYnLCAnLS12ZXJib3NlJywgdHlwZT1zdHIsIGNob2ljZXM9WydpbmZvJywgJ2RlYnVnJ10sIGhlbHA9IkVuYWJsZSBkZWJ1ZyBtb2RlIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgJy0tdmVyc2lvbicsIGFjdGlvbj0idmVyc2lvbiIsIHZlcnNpb249VkVSU0lPTikKCiAgICByZXR1cm4gcGFyc2VyCgpkZWYgZ2V0X2NvbmZpZyhhcmdzKToKICAgIGNvbmZpZyA9IHt9CiAgICBjb25maWdbJ21vZGUnXSA9IGFyZ3MubW9kZQogICAgY29uZmlnWydob3N0J10gPSBhcmdzLmhvc3QKICAgIGNvbmZpZ1sicG9ydCJdID0gYXJncy5wb3J0CiAgICBjb25maWdbImNvbW1hbmRzIl0gPSBbY21kIGZvciBncm91cCBpbiBhcmdzLmNvbW1hbmQgZm9yIGNtZCBpbiBncm91cF0KICAgIGNvbmZpZ1sidXNlcm5hbWUiXSA9IGFyZ3MudXNlcgogICAgY29uZmlnWyJwYXNzd29yZCJdID0gdmFycyhhcmdzKVsncGFzcyddCjx8ZmltX2hvbGV8PgpkZWYgZXhpdChtc2csIHJldGNvZGU9MCk6CiAgICBvdXQoJ1xuJXNcbicgJSBtc2cpCiAgICBvdXQoJ1xuRmluaXNoZWQ6ICVzXG4nICUgZGF0ZXRpbWUubm93KCkpCiAgICBzeXMuZXhpdChyZXRjb2RlKQoKZGVmIHJ1bl9jbWRzKHBzcywgY29tbWFuZHMpOgogICAgZm9yIGNvbW1hbmQgaW4gY29tbWFuZHM6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBvdXQoJ1xuJXMgJXNcbicgJSAocHNzLnByb21wdCwgY29tbWFuZCkpCiAgICAgICAgICAgIGZvciBkYXRhIGluIHBzcy5leGVjdXRlKGNvbW1hbmQpOgogICAgICAgICAgICAgICAgb3V0KGRhdGEpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBwc3MuY2xvc2UoKQogICAgICAgICAgICBleGl0KCdFcnJvciBkdXJpbmcgZXhlY3V0aW5nIGNvbW1hbmQgKCVzKTogJXNcbicgJSAoY29tbWFuZCwgZSksIFJFVF9DT01NQU5EX0ZBSUwpCiAgICAgICAgdGltZS5zbGVlcCgwLjApCgpkZWYgcnVuKGNvbmZpZyk6CiAgICBvdXQoJ1N0YXJ0IGV4ZWN1dGlvbjogJXNcbicgJSBkYXRldGltZS5ub3coKSkKICAgIGlmIGNvbmZpZ1snbW9kZSddID09ICdyb290JzoKICAgICAgICBQU1MgPSBQU1MxODMwUm9vdAogICAgICAgIGlmIGNvbmZpZ1snc2xvdCddOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBzaGVsZiwgc2xvdCA9IGNvbmZpZ1snc2xvdCddLnNwbGl0KCcvJykKICAgICAgICAgICAgICAgIGNvbmZpZ1snc2xvdCddID0gKHNoZWxmLCBzbG90KQogICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICBleGl0KCdXcm9uZyBhcmd1bWVudCBmb3JtYXQgcHJvdmlkZWQ6ICVzJyAlIGNvbmZpZ1snc2xvdCddLCBSRVRfV1JPTkdfQVJHUykKICAgIGVsc2U6CiAgICAgICAgUFNTID0gUFNTMTgzMENsaQogICAgICAgIGlmIGNvbmZpZ1snc2xvdCddOgogICAgICAgICAgICBleGl0KCdTaGVsZiBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBDTEkgbW9kZScsIFJFVF9XUk9OR19BUkdTKQoKICAgIHBzcyA9IFBTUyhjb25maWdbJ2hvc3QnXSwgY29uZmlnWydwb3J0J10sIGNvbmZpZ1sndXNlcm5hbWUnXSwgY29uZmlnWydwYXNzd29yZCddKQogICAgaWYgY29uZmlnWyd0aW1lb3V0J106CiAgICAgICAgcHNzLlRJTUVPVVQgPSBjb25maWdbJ3RpbWVvdXQnXQogICAgdHJ5OgogICAgICAgIHBzcy5vcGVuKCkKICAgICAgICBhc3NlcnQgcHNzLmNvbm5lY3RlZCBhbmQgcHNzLnByb21wdAogICAgZXhjZXB0OgogICAgICAgIGV4aXQoJ0ZhaWxlZCB0byBsb2dpbiB0byB0aGUgbm9kZScsIDEpCiAgICAKICAgIGlmIGNvbmZpZ1sic2xvdCJdOgogICAgICAgIHRyeToKICAgICAgICAgICAgc2hlbGYsIHNsb3QgPSBjb25maWdbJ3Nsb3QnXQogICAgICAgICAgICBwc3MubG9naW5fdG9fc2xvdChzaGVsZiwgc2xvdCkKICAgICAgICAgICAgcnVuX2NtZHMocHNzLCBjb25maWdbJ2NvbW1hbmRzJ10pCiAgICAgICAgICAgIHBzcy5sb2dvdXRfZnJvbV9zbG90KCkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHBzcy5jbG9zZSgpCiAgICAgICAgICAgIGV4aXQoJ0ZhaWxlZCB0byBsb2dpbiB0byBzaGVsZjogJXMnICUgY29uZmlnWydzbG90J10sIFJFVF9TSEVMRl9MT0dJTl9GQUlMKQogICAgZWxzZToKICAgICAgICBydW5fY21kcyhwc3MsIGNvbmZpZ1snY29tbWFuZHMnXSkKCiAgICBwc3MuY2xvc2UoKQogICAgb3V0KCdcbkZpbmlzaGVkOiAlc1xuJyAlIGRhdGV0aW1lLm5vdygpKQoKZGVmIG1haW4oKToKICAgIHBhcnNlciA9IGdldF9wYXJzZXIoKQogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKICAgIGNvbmZpZyA9IGdldF9jb25maWcoYXJncykKICAgIGlmIGFyZ3MudmVyYm9zZToKICAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWFyZ3MudmVyYm9zZS51cHBlcigpKQogICAgdHJ5OgogICAgICAgIHJ1bihjb25maWcpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKICAgICAgICBleGl0KCdFeGl0ZWQgd2l0aCBlcnJvcjogJXMnICUgZXhjLCBSRVRfVU5LTk9XTl9FUlJPUikKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KICAgIGNvbmZpZ1sic2xvdCJdID0gYXJncy5zbG90CiAgICBjb25maWdbJ3RpbWVvdXQnXSA9IGFyZ3MudGltZW91dAogICAgcmV0dXJuIGNvbmZpZwoKPHxmaW1fZW5kfD4="]
["56feb13c68fe2e09c9b6160f132f082b9842a4dc-2","56feb13c68fe2e09c9b6160f132f082b9842a4dc","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgc3lzCmRhdGE9W10KbmFtZT1zeXMuYXJndlsxXQpmb3IgeCBpbiBvcGVuKCdiZW5jaG1hcmsuY3N2JykucmVhZGxpbmVzKCk6CglpZiBuYW1lLnNwbGl0KCctJylbMF0gbm90IGluIHg6Y29udGludWUKCXg9eC5zcGxpdCgnLCcpCglkeW5hPWZsb2F0KHhbMl0pCgl0ZXN0ZnJlZT1mbG9hdCh4WzRdKQoJdW5kaWZmPWZsb2F0KHhbNl0pCgliaW5nbz1mbG9hdCh4WzhdKQoJcHJpbnQoeCkKZm9yIHggaW4gc3lzLnN0ZGluLnJlYWRsaW5lcygpOgoJaWYgbGVuKGRhdGEpPT0wIG9yIGxlbihkYXRhWy0xXSk9PTEwOgo8fGZpbV9ob2xlfD4KCWRhdGFbLTFdLmFwcGVuZChpbnQoeCkpCnByaW50KGxlbihkYXRhKSkKYXNzZXJ0IGxlbihkYXRhKT09OQpmaWcxLCBheDEgPSBwbHQuc3VicGxvdHMoKQojYXgxLnNldF90aXRsZShuYW1lKQpheDEuYm94cGxvdChkYXRhLHBvc2l0aW9ucz1yYW5nZSgxMCwxMDAsMTApLHdpZHRocz01LHNob3dtZWFucz1GYWxzZSkKcGx0LnJjUGFyYW1zWyd0ZXh0LnVzZXRleCddID0gVHJ1ZQpwbHQucmNQYXJhbXNbJ3RleHQubGF0ZXgucHJldmlldyddID0gVHJ1ZQpwbHQucmNQYXJhbXMudXBkYXRlKHsnZm9udC5zaXplJzogMTZ9KQpheDEucGxvdChbMF0sW3Rlc3RmcmVlXSwnbycsbGFiZWw9cickXHRleHRzY3tEeW5hQm9vc3R9X1x0ZXh0c2N7emVyb30kJykKYXgxLnBsb3QoWzEwMF0sW2R5bmFdLCdyKicsbGFiZWw9cickXHRleHRzY3tEeW5hQm9vc3R9X1x0ZXh0c2N7YWxsfSQnKQojYXgxLmhsaW5lcyh1bmRpZmYsMCwxMDAsbGFiZWw9J1VuZGlmZmVyZW50aWF0ZWQnKQpheDEuaGxpbmVzKGJpbmdvLDAsMTAwLGxpbmVzdHlsZXM9J2RvdHRlZCcsbGFiZWw9cickXHRleHRzY3tCaW5nb31fXHRleHRzY3t6ZXJvfSQnKQpheDEuc2V0X3lsaW0oeW1pbj0wKQpwbHQueGxhYmVsKCdGcmFjdGlvbiBvZiB0ZXN0IGNhc2VzICglKScsZm9udHNpemU9MTYpCnBsdC55bGFiZWwoJ051bWJlciBvZiBpdGVyYXRpb25zJyxmb250c2l6ZT0xNikKI3BsdC5sZWdlbmQoKQpwbHQuc2F2ZWZpZygnL3RtcC9zYW1wbGVwbG90cy8nK25hbWUrJy5wZGYnKQo8fGZpbV9zdWZmaXh8PgoJCWRhdGEuYXBwZW5kKFtdKQo8fGZpbV9lbmR8Pg=="]
["24923faf51cdd1fa6825be9d0f2d616d2377a7ac-1","24923faf51cdd1fa6825be9d0f2d616d2377a7ac","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAxNCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiIiIkRhdGFiYXNlIG1vZGVscyBmb3Igcm9vdCBNZXNzYWdlIFJlY2FsbCBUYXNrIGVudGl0eS4iIiIKCmltcG9ydCB0aW1lCgppbXBvcnQgbG9nX3V0aWxzCmZyb20gbW9kZWxzIGltcG9ydCBkb21haW5fdXNlcgpmcm9tIG1vZGVscyBpbXBvcnQgZXJyb3JfcmVhc29uCmltcG9ydCByZWNhbGxfZXJyb3JzCgpmcm9tIGdvb2dsZS5hcHBlbmdpbmUuZGF0YXN0b3JlLmRhdGFzdG9yZV9xdWVyeSBpbXBvcnQgQ3Vyc29yCmZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0IG5kYgoKCl9HRVRfRU5USVRZX1JFVFJJRVMgPSA1Cl9HRVRfRU5USVRZX1NMRUVQX1MgPSAyCl9MT0cgPSBsb2dfdXRpbHMuR2V0TG9nZ2VyKCdtZXNzYWdlcmVjYWxsLm1vZGVscy5yZWNhbGxfdGFzaycpCl9UQVNLX1JPV1NfRkVUQ0hfUEFHRSA9IDEwCgpUQVNLX1NUQVJURUQgPSAnU3RhcnRlZCcKVEFTS19HRVRUSU5HX1VTRVJTID0gJ0dldHRpbmcgVXNlcnMnClRBU0tfUkVDQUxMSU5HID0gJ1JlY2FsbGluZycKVEFTS19ET05FID0gJ0RvbmUnCgpUQVNLX1NUQVRFUyA9IFtUQVNLX1NUQVJURUQsIFRBU0tfR0VUVElOR19VU0VSUywgVEFTS19SRUNBTExJTkcsIFRBU0tfRE9ORV0KCgpjbGFzcyBSZWNhbGxUYXNrTW9kZWwobmRiLk1vZGVsKToKICAiIiJNb2RlbCBmb3IgZWFjaCBydW5uaW5nL2NvbXBsZXRlZCBtZXNzYWdlIHJlY2FsbCB0YXNrLiIiIgoKICBvd25lcl9lbWFpbCA9IG5kYi5TdHJpbmdQcm9wZXJ0eShyZXF1aXJlZD1UcnVlKQogIG1lc3NhZ2VfY3JpdGVyaWEgPSBuZGIuU3RyaW5nUHJvcGVydHkocmVxdWlyZWQ9VHJ1ZSkKICBkb21haW4gPSBuZGIuQ29tcHV0ZWRQcm9wZXJ0eShsYW1iZGEgc2VsZjogc2VsZi5vd25lcl9lbWFpbC5zcGxpdCgnQCcpWzFdKQogIHN0YXJ0X2RhdGV0aW1lID0gbmRiLkRhdGVUaW1lUHJvcGVydHkocmVxdWlyZWQ9VHJ1ZSwgYXV0b19ub3dfYWRkPVRydWUpCiAgZW5kX2RhdGV0aW1lID0gbmRiLkRhdGVUaW1lUHJvcGVydHkoaW5kZXhlZD1GYWxzZSwgYXV0b19ub3c9VHJ1ZSkKICB0YXNrX3N0YXRlID0gbmRiLlN0cmluZ1Byb3BlcnR5KHJlcXVpcmVkPVRydWUsIGRlZmF1bHQ9VEFTS19TVEFSVEVELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz1UQVNLX1NUQVRFUykKICBpc19hYm9ydGVkID0gbmRiLkJvb2xlYW5Qcm9wZXJ0eShyZXF1aXJlZD1UcnVlLCBkZWZhdWx0PVRydWUpCgogIEBjbGFzc21ldGhvZAogIGRlZiBGZXRjaFRhc2tGcm9tU2FmZUlkKGNscywgdXNlcl9kb21haW4sIHRhc2tfa2V5X3VybHNhZmUpOgogICAgIiIiVXRpbGl0eSB0byBxdWVyeSBhbmQgZmV0Y2ggYSBzcGVjaWZpYyB0YXNrIGZyb20gaXRzIHNhZmUgaWQuCgogICAgZ2V0KCkgaXMgYSBzaG9ydGN1dCBmb3IgZmV0Y2goKSBvZiBvbmUgcmVjb3JkIG9ubHkuCgogICAgQXJnczoKICAgICAgdXNlcl9kb21haW46IFN0cmluZyB0byBmb3JjZSBzYWZldHkgY2hlY2sgb2YgcHJvcGVyIGRvbWFpbi4KICAgICAgdGFza19rZXlfdXJsc2FmZTogU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRhc2sga2V5IHNhZmUgZm9yIHVybHMuCgogICAgUmV0dXJuczoKICAgICAgQSBzaW5nbGUgdGFzayBtb2RlbCBvYmplY3QuCiAgICAiIiIKICAgIHJldHVybiBjbHMuR2V0UXVlcnlCeVNhZmVVcmxUYXNrS2V5KHVzZXJfZG9tYWluLCB0YXNrX2tleV91cmxzYWZlKS5nZXQoKQoKICBAY2xhc3NtZXRob2QKICBkZWYgRmV0Y2hPbmVVSVBhZ2VPZlRhc2tzRm9yRG9tYWluKGNscywgdXNlcl9kb21haW4sIHVybHNhZmVfY3Vyc29yKToKICAgICIiIlV0aWxpdHkgdG8gcXVlcnkgYW5kIGZldGNoIGFsbCB0YXNrcy4KCiAgICBBcmdzOgogICAgICB1c2VyX2RvbWFpbjogU3RyaW5nIHRvIGZvcmNlIHNhZmV0eSBjaGVjayBvZiBwcm9wZXIgZG9tYWluLgogICAgICB1cmxzYWZlX2N1cnNvcjogU3RyaW5nIGN1cnNvciBmcm9tIHByZXZpb3VzIGZldGNoX3BhZ2UoKSBjYWxscy4KCiAgICBSZXR1cm5zOgogICAgICBJdGVyYWJsZSBvZiBvbmUgcGFnZSBvZiBSZWNhbGxUYXNrTW9kZWwgdGFza3MuCiAgICAiIiIKICAgIHJldHVybiBjbHMuR2V0UXVlcnlGb3JBbGxUYXNrcyh1c2VyX2RvbWFpbikuZmV0Y2hfcGFnZSgKICAgICAgICBfVEFTS19ST1dTX0ZFVENIX1BBR0UsIHN0YXJ0X2N1cnNvcj1DdXJzb3IodXJsc2FmZT11cmxzYWZlX2N1cnNvcikpCgogIEBjbGFzc21ldGhvZAogIGRlZiBHZXRUYXNrQnlLZXkoY2xzLCB0YXNrX2tleV9pZCk6CiAgICAiIiJIZWxwZXIgdG8gcmV0cmlldmUgYSB0YXNrIGVudGl0eSB1c2luZyBpdHMga2V5LgoKICAgIEFyZ3M6CiAgICAgIHRhc2tfa2V5X2lkOiBTdHJpbmcgKHNlcmlhbGl6YWJsZSkgdW5pcXVlIGlkIG9mIHRoZSB0YXNrIHJlY29yZC4KCiAgICBSZXR1cm5zOgogICAgICBUaGUgUmVjYWxsVGFza01vZGVsIGVudGl0eSBvciBOb25lLgogICAgIiIiCiAgICByZXRyaWVzID0gMAogICAgdGFzayA9IE5vbmUKICAgIHdoaWxlIG5vdCB0YXNrIGFuZCByZXRyaWVzIDwgX0dFVF9FTlRJVFlfUkVUUklFUzoKICAgICAgdGFzayA9IGNscy5nZXRfYnlfaWQoaW50KHRhc2tfa2V5X2lkKSkKICAgICAgaWYgdGFzazoKICAgICAgICByZXR1cm4gdGFzawogICAgICB0aW1lLnNsZWVwKDIqKnJldHJpZXMpCiAgICAgIHJldHJpZXMgKz0gMQogICAgcmFpc2UgcmVjYWxsX2Vycm9ycy5NZXNzYWdlUmVjYWxsRGF0YUVycm9yKAogICAgICAgICdDYW5ub3QgbG9jYXRlIFJlY2FsbFRhc2tNb2RlbCBpZD0lcy4nICUgdGFza19rZXlfaWQpCgogIEBjbGFzc21ldGhvZAogIGRlZiBHZXRRdWVyeUJ5U2FmZVVybFRhc2tLZXkoY2xzLCB1c2VyX2RvbWFpbiwgdGFza19rZXlfdXJsc2FmZSk6CiAgICAiIiJQcmVwYXJlIGEgUXVlcnkgb2JqZWN0IHRvIHJldHJpZXZlIG9uZSBzcGVjaWZpYyB0YXNrLgoKICAgIEFyZ3M6CiAgICAgIHVzZXJfZG9tYWluOiBTdHJpbmcgdG8gZm9yY2Ugc2FmZXR5IGNoZWNrIG9mIHByb3BlciBkb21haW4uCiAgICAgIHRhc2tfa2V5X3VybHNhZmU6IFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0YXNrIGtleSBzYWZlIGZvciB1cmxzLgoKICAgIFJldHVybnM6CiAgICAgIFF1ZXJ5IG9iamVjdCBmaWx0ZXJlZCB0byBvbmUgc3BlY2lmaWMgdGFzay4KICAgICIiIgo8fGZpbV9ob2xlfD4KICBAY2xhc3NtZXRob2QKICBkZWYgR2V0UXVlcnlGb3JBbGxUYXNrcyhjbHMsIHVzZXJfZG9tYWluKToKICAgICIiIlByZXBhcmUgYSBRdWVyeSBvYmplY3QgdG8gcmV0cmlldmUgYWxsIHRhc2tzIGZvciBhIGRvbWFpbi4KCiAgICBBcmdzOgogICAgICB1c2VyX2RvbWFpbjogU3RyaW5nIHRvIGZvcmNlIHNhZmV0eSBjaGVjayBvZiBwcm9wZXIgZG9tYWluLgoKICAgIFJldHVybnM6CiAgICAgIFF1ZXJ5IG9iamVjdCBmaWx0ZXJlZCB0byBhbGwgdGFza3MgZm9yIGEgZG9tYWluLgogICAgIiIiCiAgICByZXR1cm4gY2xzLnF1ZXJ5KGNscy5kb21haW4gPT0gdXNlcl9kb21haW4pLm9yZGVyKC1jbHMuc3RhcnRfZGF0ZXRpbWUpCgogIEBjbGFzc21ldGhvZAogIGRlZiBTZXRUYXNrU3RhdGUoY2xzLCB0YXNrX2tleV9pZCwgbmV3X3N0YXRlLCBpc19hYm9ydGVkPVRydWUpOgogICAgIiIiVXRpbGl0eSBtZXRob2QgdG8gdXBkYXRlIHRoZSBzdGF0ZSBvZiB0aGUgbWFzdGVyIHRhc2sgcmVjb3JkLgoKICAgIEFyZ3M6CiAgICAgIHRhc2tfa2V5X2lkOiBTdHJpbmcgKHNlcmlhbGl6YWJsZSkgdW5pcXVlIGlkIG9mIHRoZSB0YXNrIHJlY29yZC4KICAgICAgbmV3X3N0YXRlOiBTdHJpbmcgdXBkYXRlIGZvciB0aGUgbmRiIFN0cmluZ1Byb3BlcnR5IGZpZWxkLgogICAgICBpc19hYm9ydGVkOiBCb29sZWFuOyBGYWxzZSB3aGVuIHBlcmZvcm1pbmcgZmluYWwgdXBkYXRlLgogICAgIiIiCiAgICB0YXNrID0gY2xzLkdldFRhc2tCeUtleSh0YXNrX2tleV9pZCkKICAgIGlmIHRhc2s6CiAgICAgIGlmIHRhc2sudGFza19zdGF0ZSAhPSBUQVNLX0RPTkU6CiAgICAgICAgdGFzay50YXNrX3N0YXRlID0gbmV3X3N0YXRlCiAgICAgICAgaWYgbmV3X3N0YXRlID09IFRBU0tfRE9ORToKICAgICAgICAgIF9MT0cud2FybmluZygnUmVjYWxsVGFza01vZGVsIGlkPSVzIERvbmUuJywgdGFza19rZXlfaWQpCiAgICAgIHRhc2suaXNfYWJvcnRlZCA9IGlzX2Fib3J0ZWQKICAgICAgdGFzay5wdXQoKQoKICBkZWYgR2V0RXJyb3JSZWFzb25Db3VudEZvclRhc2soc2VsZik6CiAgICAiIiJDb3VudCB0aGUgI2Vycm9yIHJlYXNvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IHRhc2suCgogICAgUmV0dXJuczoKICAgICAgSW50ZWdlciBudW1iZXIgb2YgZXJyb3IgcmVhc29ucyBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgdGFzay4KICAgICIiIgogICAgcmV0dXJuIGVycm9yX3JlYXNvbi5FcnJvclJlYXNvbk1vZGVsLkdldEVycm9yUmVhc29uQ291bnRGb3JUYXNrKAogICAgICAgIHRhc2tfa2V5X2lkPXNlbGYua2V5LmlkKCkpCgogIGRlZiBHZXRRdWVyeUZvckFsbFRhc2tVc2VycyhzZWxmLCB1c2VyX3N0YXRlX2ZpbHRlcnM9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9zdGF0ZV9maWx0ZXJzPU5vbmUpOgogICAgIiIiUHJlcGFyZSBhIFF1ZXJ5IG9iamVjdCB0byByZXRyaWV2ZSBhbGwgdXNlcnMgZm9yIGEgc3BlY2lmaWMgdGFzay4KCiAgICBBcmdzOgogICAgICB1c2VyX3N0YXRlX2ZpbHRlcnM6IExpc3Qgb2Ygc3RyaW5ncyB0byBmaWx0ZXIgdXNlcnMgZnJvbSB0aGUgVVNFUl9TVEFURVMKICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0IGluIGRvbWFpbl91c2VyLnB5LgogICAgICAgICAgICAgICAgICAgICAgICAgIGUuZy4gWydEb25lJywgJ1N1c3BlbmRlZCddCiAgICAgIG1lc3NhZ2Vfc3RhdGVfZmlsdGVyczogTGlzdCBvZiBzdHJpbmdzIHRvIGZpbHRlciB1c2VycyBmcm9tIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9TVEFURVMgbGlzdCBpbiBkb21haW5fdXNlci5weS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmcuIFsnRm91bmQnLCAnUHVyZ2VkJ10KCiAgICBSZXR1cm5zOgogICAgICBRdWVyeSBvYmplY3QgZmlsdGVyZWQgdG8gYWxsIHVzZXJzIGluIGEgc3BlY2lmaWMgdGFzay4KICAgICIiIgogICAgcmV0dXJuIGRvbWFpbl91c2VyLkRvbWFpblVzZXJUb0NoZWNrTW9kZWwuR2V0UXVlcnlGb3JBbGxUYXNrVXNlcnMoCiAgICAgICAgdGFza19rZXlfaWQ9c2VsZi5rZXkuaWQoKSwKICAgICAgICB1c2VyX3N0YXRlX2ZpbHRlcnM9dXNlcl9zdGF0ZV9maWx0ZXJzLAogICAgICAgIG1lc3NhZ2Vfc3RhdGVfZmlsdGVycz1tZXNzYWdlX3N0YXRlX2ZpbHRlcnMpCgogIGRlZiBHZXRVc2VyQ291bnRGb3JUYXNrKHNlbGYsIHVzZXJfc3RhdGVfZmlsdGVycz1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Vfc3RhdGVfZmlsdGVycz1Ob25lKToKICAgICIiIkNvdW50IHRoZSAjdXNlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IHRhc2sgYW5kIG1lc3NhZ2Ugc3RhdGUuCgogICAgVGhlIHN0YXRlcyBtYXkgYmUgZW1wdHkgdG8gY291bnQgYWxsIHVzZXJzIG9yIHRoZSBzdGF0ZXMgbWF5IGhhdmUKICAgIGVsZW1lbnRzIHRvIGNvdW50IHVzZXJzIGluIGEgcGFydGljdWxhciBzdGF0ZS4KCiAgICBBcmdzOgogICAgICB1c2VyX3N0YXRlX2ZpbHRlcnM6IExpc3Qgb2Ygc3RyaW5ncyB0byBmaWx0ZXIgdXNlcnMgZnJvbSB0aGUgVVNFUl9TVEFURVMKICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0IGluIGRvbWFpbl91c2VyLnB5LgogICAgICAgICAgICAgICAgICAgICAgICAgIGUuZy4gWydEb25lJywgJ1N1c3BlbmRlZCddCiAgICAgIG1lc3NhZ2Vfc3RhdGVfZmlsdGVyczogTGlzdCBvZiBzdHJpbmdzIHRvIGZpbHRlciB1c2VycyBmcm9tIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9TVEFURVMgbGlzdCBpbiBkb21haW5fdXNlci5weS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmcuIFsnRm91bmQnLCAnUHVyZ2VkJ10KCiAgICBSZXR1cm5zOgogICAgICBJbnRlZ2VyIG51bWJlciBvZiB1c2VycyBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgdGFzayB3aXRoIHRoZQogICAgICBzdXBwbGllZCBtZXNzYWdlIHN0YXRlcy4KICAgICIiIgogICAgcmV0dXJuIGRvbWFpbl91c2VyLkRvbWFpblVzZXJUb0NoZWNrTW9kZWwuR2V0VXNlckNvdW50Rm9yVGFzaygKICAgICAgICB0YXNrX2tleV9pZD1zZWxmLmtleS5pZCgpLAogICAgICAgIHVzZXJfc3RhdGVfZmlsdGVycz11c2VyX3N0YXRlX2ZpbHRlcnMsCiAgICAgICAgbWVzc2FnZV9zdGF0ZV9maWx0ZXJzPW1lc3NhZ2Vfc3RhdGVfZmlsdGVycykKCiAgZGVmIEdldFVzZXJDb3VudEZvclRhc2tXaXRoVGVybWluYWxVc2VyU3RhdGVzKHNlbGYpOgogICAgIiIiSGVscGVyIHRvIGNvdW50IHVzZXJzIHdobyBoYXZlIGNvbXBsZXRlZCBwcm9jZXNzaW5nLgoKICAgIFJldHVybnM6CiAgICAgIEludGVnZXIgbnVtYmVyIG9mIHVzZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCB0YXNrIHdpdGgKICAgICAgdGVybWluYWwgdXNlciBzdGF0ZXMuCiAgICAiIiIKICAgIHJldHVybiAoZG9tYWluX3VzZXIuRG9tYWluVXNlclRvQ2hlY2tNb2RlbAogICAgICAgICAgICAuR2V0VXNlckNvdW50Rm9yVGFza1dpdGhUZXJtaW5hbFVzZXJTdGF0ZXMoCiAgICAgICAgICAgICAgICB0YXNrX2tleV9pZD1zZWxmLmtleS5pZCgpKSkKCiAgZGVmIEFtSUFib3J0ZWQoc2VsZik6CiAgICByZXR1cm4gc2VsZi5pc19hYm9ydGVkIGFuZCAoc2VsZi50YXNrX3N0YXRlID09IFRBU0tfRE9ORSkKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIElzVGFza0Fib3J0ZWQoY2xzLCB0YXNrX2tleV9pZCk6CiAgICAiIiJDb252ZW5pZW5jZSBtZXRob2QgdG8gY2hlY2sgaWYgYW5vdGhlciB0YXNrIGFib3J0ZWQgdGhlIHJlY2FsbC4KCiAgICBBcmdzOgogICAgICB0YXNrX2tleV9pZDoga2V5IGlkIG9mIHRoZSBSZWNhbGxUYXNrIG1vZGVsIG9iamVjdCBmb3IgdGhpcyByZWNhbGwuCgogICAgUmV0dXJuczoKICAgICAgVHJ1ZSBpZiB0YXNrIGZvdW5kIGFuZCBhYm9ydGVkIGlzIFRydWUgZWxzZSBGYWxzZS4KICAgICIiIgogICAgdGFzayA9IGNscy5HZXRUYXNrQnlLZXkodGFza19rZXlfaWQ9dGFza19rZXlfaWQpCiAgICByZXR1cm4gdGFzay5pc19hYm9ydGVkIGFuZCAodGFzay50YXNrX3N0YXRlID09IFRBU0tfRE9ORSkKPHxmaW1fc3VmZml4fD4KICAgIHJldHVybiBjbHMucXVlcnkoY2xzLmRvbWFpbiA9PSB1c2VyX2RvbWFpbiwKICAgICAgICAgICAgICAgICAgICAgY2xzLmtleSA9PSBuZGIuS2V5KHVybHNhZmU9dGFza19rZXlfdXJsc2FmZSkpCgo8fGZpbV9lbmR8Pg=="]
["a47bf26eaabac35a37c91e4c5f15b8c24a28a604-3","a47bf26eaabac35a37c91e4c5f15b8c24a28a604","PHxmaW1fcHJlZml4fD4KZnJvbSBvcyBpbXBvcnQgcGF0aAppbXBvcnQgbm9uZWJvdAppbXBvcnQgY29uZmlnCmZyb20gbm9uZWJvdCBpbXBvcnQgb25fY29tbWFuZCwgQ29tbWFuZFNlc3Npb24KCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBub25lYm90LmluaXQoY29uZmlnKQogICAgbm9uZWJvdC5sb2FkX3BsdWdpbnMoCiAgICAgICAgcGF0aC5qb2luKHBhdGguZGlybmFtZShfX2ZpbGVfXyksICdTYXJlbicsICdwbHVnaW5zJyksCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAnU2FyZW4ucGx1Z2lucycKPHxmaW1fZW5kfD4="]
["bb352ca673f32c27f0cda8ea8e20b032a8436cc7-2","bb352ca673f32c27f0cda8ea8e20b032a8436cc7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCBkeWR4LmNvbnN0YW50cyBhcyBjb25zdHMKZnJvbSB3ZWIzIGltcG9ydCBXZWIzCmZyb20gZHlkeC5ldGhfc29sbyBpbXBvcnQgRXRoU29sbwpmcm9tIGR5ZHguZXRoX3BlcnAgaW1wb3J0IEV0aFBlcnAKCgpjbGFzcyBFdGgob2JqZWN0KToKCiAgICBkZWYgX19pbml0X18oCiAgICAgICAgc2VsZiwKICAgICAgICBub2RlLAogICAgICAgIHByaXZhdGVfa2V5LAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcHVibGljX2FkZHJlc3MsCiAgICAgICAgYWNjb3VudF9udW1iZXIKPHxmaW1fZW5kfD4="]
["d8be949273848cf23f4f5592843f8ef013b329eb-2","d8be949273848cf23f4f5592843f8ef013b329eb","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyMjCiMgKEMpIENvcHlyaWdodCBbMjAxOV0gSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFAKIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMjIwoKZnJvbSBjb25maWdfbG9hZGVyIGltcG9ydCB0cnlfbG9hZF9mcm9tX2ZpbGUKZnJvbSBocGVPbmVWaWV3Lm9uZXZpZXdfY2xpZW50IGltcG9ydCBPbmVWaWV3Q2xpZW50CmZyb20gcHByaW50IGltcG9ydCBwcHJpbnQKCmNvbmZpZyA9IHsKICAgICJpcCI6ICI8b25ldmlld19pcD4iLAogICAgImNyZWRlbnRpYWxzIjogewogICAgICAgICJ1c2VyTmFtZSI6ICI8dXNlcm5hbWU+IiwKICAgICAgICAicGFzc3dvcmQiOiAiPHBhc3N3b3JkPiIKICAgIH0KfQoKCiMgVHJ5IGxvYWQgY29uZmlnIGZyb20gYSBmaWxlIChpZiB0aGVyZSBpcyBhIGNvbmZpZyBmaWxlKQpjb25maWcgPSB0cnlfbG9hZF9mcm9tX2ZpbGUoY29uZmlnKQpvbmV2aWV3X2NsaWVudCA9IE9uZVZpZXdDbGllbnQoY29uZmlnKQoKIyBFeGFtcGxlIGxpY2Vuc2UgS2V5CiMgQUNERSBCOU1BIEg5UFkgQ0hXMyBVN0I1IEhXVzUgWTlKTCBLTVBMIEI4OUggTVpWVSBEWEFVIDJDU00gR0hURyBMNzYyIEtRTDcgRUc1TSBLSlZUIEQ1S00gQUZWVyBUVDVKIEY3N0sgTlhXVyBCUFNNIFlGMjYgMjhKUyBFV1RaIFgzNlEKIyBNNUc3IFdaSkwgSEg1USBMOTc1IFNOSlQgMjg4RiBBRFQyIExLNDQgNTZVRyBWOE1DIDJLOVggN0tHMiBGNkFEIEVNVkEgOUdFQiA5NVk2IFhCTTMgSFZEWSBMQlNTIFBVMjQgS0VXWSBKU0pDIEZQWkMgMkpKRQojIFpMQUJcIjI0UjItMDIxOTItMDAyIFQxMTExQSBIUF9PbmVWaWV3X3cvb19pTE9fRXhwbGljaXRfRmVhdHVyZSBKNEU4SUFNQU5FT05cIgoKb3B0aW9ucyA9IHsKICAgICJrZXkiOiAiPHlvdXIgbGljZW5zZSBLZXk+IiwKICAgICJ0eXBlIjogIkxpY2Vuc2VWNTAwIgp9CgojIEFkZCBhIExpY2Vuc2UKbGljZW5zZSA9IG9uZXZpZXdfY2xpZW50LmxpY2Vuc2VzLmNyZWF0ZShvcHRpb25zKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CnByaW50KCJcblxuTGljZW5zZSBhZGRlZCAnJXMnIHN1Y2Nlc3NmdWxseS5cbiIgJSBsaWNlbnNlWydrZXknXSkKCiMgR2V0IGFsbCBsaWNlbnNlcwpwcmludCgiXG5cblxuXG4gKioqKioqKioqKiAgIERpc3BsYXlpbmcgYWxsIHRoZSBMaWNlbnNlcyBsb2FkZWQgb24gdGhlIGFwcGxpYW5jZTogICoqKioqKioqKiogXG5cblxuXG4iKQo8fGZpbV9lbmR8Pg=="]
["2d10365a15e90f95c6fd9279f386e685f1b7726e-4","2d10365a15e90f95c6fd9279f386e685f1b7726e","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgb3MKaW1wb3J0IHN5cwppbXBvcnQgc3VicHJvY2VzcwoKZnJvbSBSZWRpc1F1ZXVlIGltcG9ydCAqCmZyb20gUmVkaXNIYXNoIGltcG9ydCAqCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CgppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHB5dHoKaW1wb3J0IGpzb24KCmZyb20gUERTX0RCcXVlcnkgaW1wb3J0ICoKCmltcG9ydCBwZGIKCgpkZWYgbWFpbigpOgoKICAgIHBkYi5zZXRfdHJhY2UoKQoKIyAgICBSUV9maW5hbCA9IFJlZGlzUXVldWUoJ0ZpbmFsUXVldWUnKQoKIyAgICBGS2V5ID0gUlFfZmluYWwuUXVldWVHZXQoKQoKICAgIHV0Y190eiA9IHB5dHoudGltZXpvbmUoJ1VUQycpCiAgICB1dGNfZHQgPSBkYXRldGltZS5kYXRldGltZS5ub3codXRjX3R6KQoKICAgIHByaW50IHV0Y19kdAoKICAgIHByaW50IGRhdGV0aW1lLmRhdGV0aW1lLm5vdyhweXR6LnV0Yykuc3RyZnRpbWUoIiVZLSVtLSVkICVIOiVNOiVTLiVmIikKCiAgICBEQlFPID0gUERTX0RCcXVlcnkoJ0pPQlMnKQoKICAgIGtleSA9ICdkMDFhMmJjYWE0YzNkMGVjM2E1NmJiNDZmMGM0MjYyNicKICAgIHJlc3VsdCA9IERCUU8uc2V0Sm9ic1F1ZXJlZChrZXkpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBwcmludCByZXN1bHQKCiAgICB6aXBRdWV1ZSA9IFJlZGlzUXVldWUoRktleSArICdfWklQJykKICAgIGxvZ2d5UXVldWUgPSBSZWRpc1F1ZXVlKEZLZXkgKyAnX2xvZ2d5JykKPHxmaW1fZW5kfD4="]
["68be2a6c7f1f6c3d199d387afd399959506577ab-2","68be2a6c7f1f6c3d199d387afd399959506577ab","PHxmaW1fcHJlZml4fD4KIiIibWFyayByZWNvbW1lbmRlZCBraW5nZG9tcwoKUmV2aXNpb24gSUQ6IDk4MGZkZWUwNjU1OApSZXZpc2VzOiAyNTQ4YmNmNGVjMTEKQ3JlYXRlIERhdGU6IDIwMTYtMTEtMDcgMTQ6NDg6NTYuMzgzODE3CgoiIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKIyByZXZpc2lvbiBpZGVudGlmaWVycywgdXNlZCBieSBBbGVtYmljLgpyZXZpc2lvbiA9ICc5ODBmZGVlMDY1NTgnCmRvd25fcmV2aXNpb24gPSAnMjU0OGJjZjRlYzExJwo8fGZpbV9lbmR8Pg=="]
["2d317bd36eaf70298b371a57728f3f02c0a7c549-5","2d317bd36eaf70298b371a57728f3f02c0a7c549",{"$cut":{"chars":25908,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIENvcHlyaWdodCAyMDIwIENhbm9uaWNhbCBMdGQuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQojIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluCiMgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKIyBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKIyBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwojIHVuZGVyIHRoZSBMaWNlbnNlLgojCiMgRm9yIHRob3NlIHVzYWdlcyBub3QgY292ZXJlZCBieSB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wIHBsZWFzZQojIGNvbnRhY3Q6IGxlZ2FsQGNhbm9uaWNhbC5jb20KIwojIFRvIGdldCBpbiB0b3VjaCB3aXRoIHRoZSBtYWludGFpbmVycywgcGxlYXNlIGNvbnRhY3Q6CiMgb3NtLWNoYXJtZXJzQGxpc3RzLmxhdW5jaHBhZC5uZXQKIyMKCmltcG9ydCBiYXNlNjQKZnJvbSB0eXBpbmcgaW1wb3J0IE5vUmV0dXJuCmltcG9ydCB1bml0dGVzdAoKZnJvbSBjaGFybSBpbXBvcnQgUm9DaGFybQpmcm9tIG9wcy5tb2RlbCBpbXBvcnQgQWN0aXZlU3RhdHVzLCBCbG9ja2VkU3RhdHVzCmZyb20gb3BzLnRlc3RpbmcgaW1wb3J0IEhhcm5lc3MKCgpkZWYgZW5jb2RlKGNvbnRlbnQ6IHN0cik6CiAgICByZXR1cm4gYmFzZTY0LmI2NGVuY29kZShjb250ZW50LmVuY29kZSgiYXNjaWkiKSkuZGVjb2RlKCJ1dGYtOCIpCgoKY2VydGlmaWNhdGVfcGVtID0gZW5jb2RlKAogICAgIiIiCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlEYXpDQ0FsT2dBd0lCQWdJVWYxYjBzM1VLdHJ4SFhIMnJnZTdVYVF5ZkpBTXdEUVlKS29aSWh2Y05BUUVMCkJRQXdSVEVMTUFrR0ExVUVCaE1DUVZVeEV6QVJCZ05WQkFnTUNsTnZiV1V0VTNSaGRHVXhJVEFmQmdOVkJBb00KR0VsdWRHVnlibVYwSUZkcFpHZHBkSE1nVUhSNUlFeDBaREFlRncweU1UQXpNakl4TnpFeU1qZGFGdzB6TVRBegpNakF4TnpFeU1qZGFNRVV4Q3pBSkJnTlZCQVlUQWtGVk1STXdFUVlEVlFRSURBcFRiMjFsTFZOMFlYUmxNU0V3Ckh3WURWUVFLREJoSmJuUmxjbTVsZENCWGFXUm5hWFJ6SUZCMGVTQk1kR1F3Z2dFaU1BMEdDU3FHU0liM0RRRUIKQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUNnQ2ZDQmdZQU42T04weUhEWHVXNDA3ckZ0SlZSZjB1NDZKcnAwRGs3Sgpra1NaMWU3S3ExNHI3eUZIYXpFQld2NzhvT2R3Qm9jdldyZDhsZUx1ZjNiWUdjSFI2NWhSeTZBL2ZiWW01QWplCmNLcHdsRndhcWZSNEJMZWx3Smw3OWpaMnJKWDczOGNDQlZySWsxbkFWZE94R3JYVjRNVFdVYUtSMmMrdUtLdmMKT0tSVCs1VnFDZVA0TjVGV2VBVFovS3FHdTh1VjlFOVdoRmd3SVp5U3RlbUx5TGFEYm41UG1BUTZTOW9lUjVqSgpvMmdFRXAvbERLdnNxT1dzNzZLRnVtU0thOWhRczVEdzJsajBtYjFVb3lZSzFnWWM0dWJ6VkNoSmFkdjQ0QVU4Ck1ZdElqbEZuMVgxUCtSamFLWk5VSUFHWGtvTHdZbjZTaXpGNnk2TGl1RlM5QWdNQkFBR2pVekJSTUIwR0ExVWQKRGdRV0JCUmwrLzIzQ0IrRlhjemVBWlJReVljZk9keTlZREFmQmdOVkhTTUVHREFXZ0JSbCsvMjNDQitGWGN6ZQpBWlJReVljZk9keTlZREFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUJBUUFkCmRrZUR5bTZsUk44a1dGdGZ1M0l5aUxGOEc4c245MXFOYkgzWXI0VHVUQmhnY2pZeVc2UGdpc1Nick5nQTl5c0UKR29hRjdvaGI4R2VWZkNzUWRLMjMrTnBBbGovK0RaM09uR2N4d1hqMVJVQXo0eXI5a2FuVjF5dUV0cjFxMnhKSQpVYUVDV3I4SFpsd0dCQUtOVEd4MkVYVDIvMmFGemdVTHBEY3h6VEtEK01ScEtwTVVyV2hmOVVMdlZyY2x2SFdlClBPTFlob2JVRnVCSHVvNnJ0NVJjcTE2ajY3ekNYOUVWVGxBRTNvMk9FQ0lXQnlLMjJzWGRlT2lkWU1wVGtsNHEKOEZyT3FqTnN4NWQrU0JQSkJ2L3BxdEJtNGJBNDdWeDFQOHRiV09RNGJYUzBVbVhnd3BlQk9VL08vb3QzMCtLUwpKbktFeStkWXl2VkJLZzc3c1JIdwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCiIiIgopCgoKY2xhc3MgVGVzdENoYXJtKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICIiIlByb21ldGhldXMgQ2hhcm0gdW5pdCB0ZXN0cy4iIiIKCiAgICBkZWYgc2V0VXAoc2VsZikgLT4gTm9SZXR1cm46CiAgICAgICAgIiIiVGVzdCBzZXR1cCIiIgogICAgICAgIHNlbGYuaGFybmVzcyA9IEhhcm5lc3MoUm9DaGFybSkKICAgICAgICBzZWxmLmhhcm5lc3Muc2V0X2xlYWRlcihpc19sZWFkZXI9VHJ1ZSkKICAgICAgICBzZWxmLmhhcm5lc3MuYmVnaW4oKQogICAgICAgIHNlbGYuY29uZmlnID0gewogICAgICAgICAgICAiZW5hYmxlX25nX3JvIjogVHJ1ZSwKICAgICAgICAgICAgImRhdGFiYXNlX2NvbW1vbmtleSI6ICJjb21tb25rZXkiLAogICAgICAgICAgICAibW9uZ29kYl91cmkiOiAiIiwKICAgICAgICAgICAgImxvZ19sZXZlbCI6ICJJTkZPIiwKICAgICAgICAgICAgInZpbV9kYXRhYmFzZSI6ICJkYl9uYW1lIiwKICAgICAgICAgICAgInJvX2RhdGFiYXNlIjogInJvX2RiX25hbWUiLAogICAgICAgICAgICAib3Blbm1hbm9fdGVuYW50IjogIm1hbm8iLAogICAgICAgICAgICAiY2VydGlmaWNhdGVzIjogZiJjZXJ0MTp7Y2VydGlmaWNhdGVfcGVtfSIsCiAgICAgICAgfQogICAgICAgIHNlbGYuaGFybmVzcy51cGRhdGVfY29uZmlnKHNlbGYuY29uZmlnKQoKICAgIGRlZiB0ZXN0X2NvbmZpZ19jaGFuZ2VkX25vX3JlbGF0aW9ucygK"}}]
["5c5339eaabde8ebc3557d48b7507634672cdbbe2-1","5c5339eaabde8ebc3557d48b7507634672cdbbe2","PHxmaW1fcHJlZml4fD4KIiIiCkRqYW5nbyBzZXR0aW5ncyBmb3Ige3tjb29raWVjdXR0ZXIuZGphbmdvX3Byb2plY3RfbmFtZX19IHByb2plY3QuCiIiIgoKZnJvbSBkYXRldGltZSBpbXBvcnQgdGltZWRlbHRhCmltcG9ydCBsb2dnaW5nCmZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcwppbXBvcnQgaW5zcGVjdAoKaW1wb3J0IGVudmlyb24KeyUgaWYgY29va2llY3V0dGVyLnVzZV9jZWxlcnkgPT0gInkiICV9CmZyb20gY2VsZXJ5LnNjaGVkdWxlcyBpbXBvcnQgY3JvbnRhYgp7JSBlbmRpZiAlfQoKCnJvb3QgPSBlbnZpcm9uLlBhdGgoX19maWxlX18pIC0gMgoKZW52ID0gZW52aXJvbi5FbnYoREVCVUc9KGJvb2wsIEZhbHNlKSkKCiMgLmVudiBmaWxlIGNvbnRlbnRzIGFyZSBub3QgcGFzc2VkIHRvIGRvY2tlciBpbWFnZSBkdXJpbmcgYnVpbGQgc3RhZ2U7CiMgdGhpcyByZXN1bHRzIGluIGVycm9ycyBpZiB5b3UgcmVxdWlyZSBzb21lIGVudiB2YXIgdG8gYmUgc2V0LCBhcyBpZiBpbiAiZW52KCdNWVZBUicpIiAtCiMgb2J2aW91c2x5IGl0J3Mgbm90IHNldCBkdXJpbmcgYnVpbGQgc3RhZ2UsIGJ1dCB5b3UgZG9uJ3QgY2FyZSBhbmQgd2FudCB0byBpZ25vcmUgdGhhdC4KIyBUbyBtaXRpZ2F0ZSB0aGlzLCB3ZSBzZXQgRU5WX0ZJTExfTUlTU0lOR19WQUxVRVM9MSBkdXJpbmcgYnVpbGQgcGhhc2UsIGFuZCBpdCBhY3RpdmF0ZXMKIyBtb25rZXktcGF0Y2hpbmcgb2YgImVudmlyb24iIG1vZHVsZSwgc28gdGhhdCBhbGwgdW5zZXQgdmFyaWFibGVzIGFyZSBzZXQgdG8gTm9uZSBhbmQKIyB0aGUgbGlicmFyeSBpcyBub3QgY29tcGxhaW5pbmcgYW55bW9yZQppZiBlbnYuYm9vbCgnRU5WX0ZJTExfTUlTU0lOR19WQUxVRVMnLCBkZWZhdWx0PUZhbHNlKToKCiAgICBkZWYgcGF0Y2goZm4pOgogICAgICAgIEB3cmFwcyhmbikKICAgICAgICBkZWYgd3JhcHBlZCgqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAgICBpZiBrd2FyZ3MuZ2V0KCdkZWZhdWx0JykgaXMgZW52Lk5PVFNFVDoKICAgICAgICAgICAgICAgIGt3YXJnc1snZGVmYXVsdCddID0gTm9uZQogICAgICAgICAgICByZXR1cm4gZm4oKmFyZ3MsICoqa3dhcmdzKQogICAgICAgIHJldHVybiB3cmFwcGVkCgogICAgZm9yIG5hbWUsIG1ldGhvZCBpbiBpbnNwZWN0LmdldG1lbWJlcnMoZW52LCBwcmVkaWNhdGU9aW5zcGVjdC5pc21ldGhvZCk6CiAgICAgICAgc2V0YXR0cihlbnYsIG5hbWUsIHBhdGNoKG1ldGhvZCkpCgojIHJlYWQgZnJvbSB0aGUgLmVudiBmaWxlIGlmIGhhc24ndCBiZWVuIHNvdXJjZWQgYWxyZWFkeQppZiBlbnYoJ0VOVicsIGRlZmF1bHQ9Tm9uZSkgaXMgTm9uZToKICAgIGVudi5yZWFkX2Vudihyb290KCcuLi8uLi8uZW52JykpCgpFTlYgPSBlbnYoJ0VOVicpCgojIFNFQ1VSSVRZIFdBUk5JTkc6IGtlZXAgdGhlIHNlY3JldCBrZXkgdXNlZCBpbiBwcm9kdWN0aW9uIHNlY3JldCEKU0VDUkVUX0tFWSA9IGVudignU0VDUkVUX0tFWScpCgojIFNFQ1VSSVRZIFdBUk5JTkc6IGRvbid0IHJ1biB3aXRoIGRlYnVnIHR1cm5lZCBvbiBpbiBwcm9kdWN0aW9uIQpERUJVRyA9IGVudignREVCVUcnKQoKQUxMT1dFRF9IT1NUUyA9IFsnKiddCgpJTlNUQUxMRURfQVBQUyA9IFsKICAgIHslIGlmIGNvb2tpZWN1dHRlci5tb25pdG9yaW5nID09ICJ5IiAlfSdkamFuZ29fcHJvbWV0aGV1cycseyUgZW5kaWYgJX0KICAgICdkamFuZ28uY29udHJpYi5hZG1pbicsCiAgICAnZGphbmdvLmNvbnRyaWIuYXV0aCcsCiAgICAnZGphbmdvLmNvbnRyaWIuY29udGVudHR5cGVzJywKICAgICdkamFuZ28uY29udHJpYi5zZXNzaW9ucycsCiAgICAnZGphbmdvLmNvbnRyaWIubWVzc2FnZXMnLAogICAgJ2RqYW5nby5jb250cmliLnN0YXRpY2ZpbGVzJywKCiAgICAnZGphbmdvX2V4dGVuc2lvbnMnLAogICAgJ2RqYW5nb19wcm9iZXMnLAoKICAgICd7e2Nvb2tpZWN1dHRlci5kamFuZ29fcHJvamVjdF9uYW1lfX0ue3tjb29raWVjdXR0ZXIuZGphbmdvX2RlZmF1bHRfYXBwX25hbWV9fScsCl0KCnslIGlmIGNvb2tpZWN1dHRlci5tb25pdG9yX3ZpZXdfZXhlY3V0aW9uX3RpbWVfaW5fZGphZ25vID09ICJ5IiBhbmQgY29va2llY3V0dGVyLm1vbml0b3JpbmcgPT0gInkiICV9ClBST01FVEhFVVNfTEFURU5DWV9CVUNLRVRTID0gKC4wMDgsIC4wMTYsIC4wMzIsIC4wNjIsIC4xMjUsIC4yNSwgLjUsIDEuMCwgMi4wLCA0LjAsIDguMCwgMTYuMCwgMzIuMCwgNjQuMCwgZmxvYXQoImluZiIpKQp7JSBlbmRpZiAlfQoKTUlERExFV0FSRSA9IFsKICAgIHslIGlmIGNvb2tpZWN1dHRlci5tb25pdG9yX3ZpZXdfZXhlY3V0aW9uX3RpbWVfaW5fZGphZ25vID09ICJ5IiBhbmQgY29va2llY3V0dGVyLm1vbml0b3JpbmcgPT0gInkiICV9J2RqYW5nb19wcm9tZXRoZXVzLm1pZGRsZXdhcmUuUHJvbWV0aGV1c0JlZm9yZU1pZGRsZXdhcmUnLHslIGVuZGlmICV9CiAgICAnZGphbmdvLm1pZGRsZXdhcmUuc2VjdXJpdHkuU2VjdXJpdHlNaWRkbGV3YXJlJywKICAgICdkamFuZ28uY29udHJpYi5zZXNzaW9ucy5taWRkbGV3YXJlLlNlc3Npb25NaWRkbGV3YXJlJywKICAgICdkamFuZ28ubWlkZGxld2FyZS5jb21tb24uQ29tbW9uTWlkZGxld2FyZScsCiAgICAnZGphbmdvLm1pZGRsZXdhcmUuY3NyZi5Dc3JmVmlld01pZGRsZXdhcmUnLAogICAgJ2RqYW5nby5jb250cmliLmF1dGgubWlkZGxld2FyZS5BdXRoZW50aWNhdGlvbk1pZGRsZXdhcmUnLAogICAgJ2RqYW5nby5jb250cmliLm1lc3NhZ2VzLm1pZGRsZXdhcmUuTWVzc2FnZU1pZGRsZXdhcmUnLAogICAgJ2RqYW5nby5taWRkbGV3YXJlLmNsaWNramFja2luZy5YRnJhbWVPcHRpb25zTWlkZGxld2FyZScsCiAgICB7JSBpZiBjb29raWVjdXR0ZXIubW9uaXRvcl92aWV3X2V4ZWN1dGlvbl90aW1lX2luX2RqYWdubyA9PSAieSIgYW5kIGNvb2tpZWN1dHRlci5tb25pdG9yaW5nID09ICJ5IiAlfSdkamFuZ29fcHJvbWV0aGV1cy5taWRkbGV3YXJlLlByb21ldGhldXNBZnRlck1pZGRsZXdhcmUnLHslIGVuZGlmICV9Cl0KCmlmIERFQlVHX1RPT0xCQVIgOj0gZW52LmJvb2woJ0RFQlVHX1RPT0xCQVInLCBkZWZhdWx0PUZhbHNlKToKICAgIERFQlVHX1RPT0xCQVJfQ09ORklHID0gewogICAgICAgICdTSE9XX1RPT0xCQVJfQ0FMTEJBQ0snOiBsYW1iZGEgX3JlcXVlc3Q6IFRydWUKICAgIH0KICAgIElOU1RBTExFRF9BUFBTLmFwcGVuZCgnZGVidWdfdG9vbGJhcicpCiAgICBNSURETEVXQVJFID0gWydkZWJ1Z190b29sYmFyLm1pZGRsZXdhcmUuRGVidWdUb29sYmFyTWlkZGxld2FyZSddICsgTUlERExFV0FSRQoKaWYgQ09SU19FTkFCTEVEIDo9IGVudi5ib29sKCdDT1JTX0VOQUJMRUQnLCBkZWZhdWx0PVRydWUpOgogICAgSU5TVEFMTEVEX0FQUFMuYXBwZW5kKCdjb3JzaGVhZGVycycpCjx8ZmltX2hvbGV8PgoKU0VDVVJFX1BST1hZX1NTTF9IRUFERVIgPSAoJ0hUVFBfWF9GT1JXQVJERURfUFJPVE8nLCAnaHR0cHMnKQoKIyBDb250ZW50IFNlY3VyaXR5IFBvbGljeQppZiBDU1BfRU5BQkxFRCA6PSBlbnYuYm9vbCgnQ1NQX0VOQUJMRUQnKToKICAgIE1JRERMRVdBUkUuYXBwZW5kKCdjc3AubWlkZGxld2FyZS5DU1BNaWRkbGV3YXJlJykKCiAgICBDU1BfUkVQT1JUX09OTFkgPSBlbnYuYm9vbCgnQ1NQX1JFUE9SVF9PTkxZJywgZGVmYXVsdD1UcnVlKQogICAgQ1NQX1JFUE9SVF9VUkwgPSBlbnYoJ0NTUF9SRVBPUlRfVVJMJywgZGVmYXVsdD1Ob25lKSBvciBOb25lCgogICAgQ1NQX0RFRkFVTFRfU1JDID0gZW52LnR1cGxlKCdDU1BfREVGQVVMVF9TUkMnKQogICAgQ1NQX1NDUklQVF9TUkMgPSBlbnYudHVwbGUoJ0NTUF9TQ1JJUFRfU1JDJykKICAgIENTUF9TVFlMRV9TUkMgPSBlbnYudHVwbGUoJ0NTUF9TVFlMRV9TUkMnKQogICAgQ1NQX0ZPTlRfU1JDID0gZW52LnR1cGxlKCdDU1BfRk9OVF9TUkMnKQogICAgQ1NQX0lNR19TUkMgPSBlbnYudHVwbGUoJ0NTUF9JTUdfU1JDJykKICAgIENTUF9NRURJQV9TUkMgPSBlbnYudHVwbGUoJ0NTUF9NRURJQV9TUkMnKQogICAgQ1NQX09CSkVDVF9TUkMgPSBlbnYudHVwbGUoJ0NTUF9PQkpFQ1RfU1JDJykKICAgIENTUF9GUkFNRV9TUkMgPSBlbnYudHVwbGUoJ0NTUF9GUkFNRV9TUkMnKQogICAgQ1NQX0NPTk5FQ1RfU1JDID0gZW52LnR1cGxlKCdDU1BfQ09OTkVDVF9TUkMnKQogICAgQ1NQX0NISUxEX1NSQyA9IGVudi50dXBsZSgnQ1NQX0NISUxEX1NSQycpCiAgICBDU1BfTUFOSUZFU1RfU1JDID0gZW52LnR1cGxlKCdDU1BfTUFOSUZFU1RfU1JDJykKICAgIENTUF9XT1JLRVJfU1JDID0gZW52LnR1cGxlKCdDU1BfV09SS0VSX1NSQycpCgogICAgQ1NQX0JMT0NLX0FMTF9NSVhFRF9DT05URU5UID0gZW52LmJvb2woJ0NTUF9CTE9DS19BTExfTUlYRURfQ09OVEVOVCcsIGRlZmF1bHQ9RmFsc2UpCiAgICBDU1BfRVhDTFVERV9VUkxfUFJFRklYRVMgPSBlbnYudHVwbGUoJ0NTUF9FWENMVURFX1VSTF9QUkVGSVhFUycsIGRlZmF1bHQ9dHVwbGUoKSkKCgpST09UX1VSTENPTkYgPSAne3tjb29raWVjdXR0ZXIuZGphbmdvX3Byb2plY3RfbmFtZX19LnVybHMnCgpURU1QTEFURVMgPSBbCiAgICB7CiAgICAgICAgJ0JBQ0tFTkQnOiAnZGphbmdvLnRlbXBsYXRlLmJhY2tlbmRzLmRqYW5nby5EamFuZ29UZW1wbGF0ZXMnLAogICAgICAgICdESVJTJzogW3Jvb3QoJ3t7Y29va2llY3V0dGVyLmRqYW5nb19wcm9qZWN0X25hbWV9fS90ZW1wbGF0ZXMnKV0sCiAgICAgICAgJ0FQUF9ESVJTJzogVHJ1ZSwKICAgICAgICAnT1BUSU9OUyc6IHsKICAgICAgICAgICAgJ2NvbnRleHRfcHJvY2Vzc29ycyc6IFsKICAgICAgICAgICAgICAgICdkamFuZ28udGVtcGxhdGUuY29udGV4dF9wcm9jZXNzb3JzLmRlYnVnJywKICAgICAgICAgICAgICAgICdkamFuZ28udGVtcGxhdGUuY29udGV4dF9wcm9jZXNzb3JzLnJlcXVlc3QnLAogICAgICAgICAgICAgICAgJ2RqYW5nby5jb250cmliLmF1dGguY29udGV4dF9wcm9jZXNzb3JzLmF1dGgnLAogICAgICAgICAgICAgICAgJ2RqYW5nby5jb250cmliLm1lc3NhZ2VzLmNvbnRleHRfcHJvY2Vzc29ycy5tZXNzYWdlcycsCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgIH0sCl0KCldTR0lfQVBQTElDQVRJT04gPSAne3tjb29raWVjdXR0ZXIuZGphbmdvX3Byb2plY3RfbmFtZX19LndzZ2kuYXBwbGljYXRpb24nCgoKaWYgZW52KCdEQVRBQkFTRV9VUkwnKToKICAgIERBVEFCQVNFUyA9IHsKICAgICAgICAnZGVmYXVsdCc6IGVudi5kYigpLAogICAgfQpERUZBVUxUX0FVVE9fRklFTEQgPSAnZGphbmdvLmRiLm1vZGVscy5CaWdBdXRvRmllbGQnCgpBVVRIX1BBU1NXT1JEX1ZBTElEQVRPUlMgPSBbCiAgICB7CiAgICAgICAgJ05BTUUnOiAnZGphbmdvLmNvbnRyaWIuYXV0aC5wYXNzd29yZF92YWxpZGF0aW9uLlVzZXJBdHRyaWJ1dGVTaW1pbGFyaXR5VmFsaWRhdG9yJywKICAgIH0sCiAgICB7CiAgICAgICAgJ05BTUUnOiAnZGphbmdvLmNvbnRyaWIuYXV0aC5wYXNzd29yZF92YWxpZGF0aW9uLk1pbmltdW1MZW5ndGhWYWxpZGF0b3InLAogICAgfSwKICAgIHsKICAgICAgICAnTkFNRSc6ICdkamFuZ28uY29udHJpYi5hdXRoLnBhc3N3b3JkX3ZhbGlkYXRpb24uQ29tbW9uUGFzc3dvcmRWYWxpZGF0b3InLAogICAgfSwKICAgIHsKICAgICAgICAnTkFNRSc6ICdkamFuZ28uY29udHJpYi5hdXRoLnBhc3N3b3JkX3ZhbGlkYXRpb24uTnVtZXJpY1Bhc3N3b3JkVmFsaWRhdG9yJywKICAgIH0sCl0KCiMgSW50ZXJuYXRpb25hbGl6YXRpb24KTEFOR1VBR0VfQ09ERSA9ICdlbi11cycKVElNRV9aT05FID0gJ1VUQycKVVNFX0kxOE4gPSBUcnVlClVTRV9MMTBOID0gVHJ1ZQpVU0VfVFogPSBUcnVlCgojIFN0YXRpYyBmaWxlcyAoQ1NTLCBKYXZhU2NyaXB0LCBJbWFnZXMpClNUQVRJQ19VUkwgPSBlbnYoJ1NUQVRJQ19VUkwnLCBkZWZhdWx0PScvc3RhdGljLycpClNUQVRJQ19ST09UID0gZW52KCdTVEFUSUNfUk9PVCcsIGRlZmF1bHQ9cm9vdCgnc3RhdGljJykpCk1FRElBX1VSTCA9IGVudignTUVESUFfVVJMJywgZGVmYXVsdD0nL21lZGlhLycpCk1FRElBX1JPT1QgPSBlbnYoJ01FRElBX1JPT1QnLCBkZWZhdWx0PXJvb3QoJ21lZGlhJykpCgojIFNlY3VyaXR5CiMgcmVkaXJlY3QgSFRUUCB0byBIVFRQUwppZiBlbnYuYm9vbCgnSFRUUFNfUkVESVJFQ1QnLCBkZWZhdWx0PUZhbHNlKSBhbmQgbm90IERFQlVHOgogICAgU0VDVVJFX1NTTF9SRURJUkVDVCA9IFRydWUKICAgIFNFQ1VSRV9SRURJUkVDVF9FWEVNUFQgPSBbXQogICAgU0VTU0lPTl9DT09LSUVfU0VDVVJFID0gVHJ1ZQogICAgQ1NSRl9DT09LSUVfU0VDVVJFID0gVHJ1ZQplbHNlOgogICAgU0VDVVJFX1NTTF9SRURJUkVDVCA9IEZhbHNlCgp7JSBpZiBjb29raWVjdXR0ZXIudXNlX2NlbGVyeSA9PSAieSIgJX0KQ0VMRVJZX0JST0tFUl9VUkwgPSBlbnYoJ0NFTEVSWV9CUk9LRVJfVVJMJywgZGVmYXVsdD0nJykKQ0VMRVJZX1JFU1VMVF9CQUNLRU5EID0gZW52KCdDRUxFUllfQlJPS0VSX1VSTCcsIGRlZmF1bHQ9JycpICAjIHN0b3JlIHJlc3VsdHMgaW4gUmVkaXMKQ0VMRVJZX1JFU1VMVF9FWFBJUkVTID0gaW50KHRpbWVkZWx0YShkYXlzPTEpLnRvdGFsX3NlY29uZHMoKSkgICMgdGltZSB1bnRpbCB0YXNrIHJlc3VsdCBkZWxldGlvbgpDRUxFUllfQ09NUFJFU1NJT04gPSAnZ3ppcCcgICMgdGFzayBjb21wcmVzc2lvbgpDRUxFUllfTUVTU0FHRV9DT01QUkVTU0lPTiA9ICdnemlwJyAgIyByZXN1bHQgY29tcHJlc3Npb24KQ0VMRVJZX1NFTkRfRVZFTlRTID0gVHJ1ZSAgIyBuZWVkZWQgZm9yIHdvcmtlciBtb25pdG9yaW5nCkNFTEVSWV9CRUFUX1NDSEVEVUxFID0gewogICAgIyAndGFza19uYW1lJzogewogICAgIyAgICAgJ3Rhc2snOiAne3tjb29raWVjdXR0ZXIuZGphbmdvX3Byb2plY3RfbmFtZX19Lnt7Y29va2llY3V0dGVyLmRqYW5nb19kZWZhdWx0X2FwcF9uYW1lfX0udGFza3MuZGVtb190YXNrJywKICAgICMgICAgICdhcmdzJzogWzIsIDJdLAogICAgIyAgICAgJ2t3YXJncyc6IHt9LAogICAgIyAgICAgJ3NjaGVkdWxlJzogY3JvbnRhYihtaW51dGU9MCwgaG91cj0wKSwKICAgICMgICAgICdvcHRpb25zJzogeyd0aW1lX2xpbWl0JzogMzAwfSwKICAgICMgfSwKfQpDRUxFUllfVEFTS19ST1VURVMgPSBbJ3t7Y29va2llY3V0dGVyLmRqYW5nb19wcm9qZWN0X25hbWV9fS5jZWxlcnkucm91dGVfdGFzayddCkNFTEVSWV9UQVNLX1RJTUVfTElNSVQgPSBpbnQodGltZWRlbHRhKG1pbnV0ZXM9NSkudG90YWxfc2Vjb25kcygpKQpDRUxFUllfVEFTS19BTFdBWVNfRUFHRVIgPSBlbnYuYm9vbCgnQ0VMRVJZX1RBU0tfQUxXQVlTX0VBR0VSJywgZGVmYXVsdD1GYWxzZSkKQ0VMRVJZX0FDQ0VQVF9DT05URU5UID0gWydqc29uJ10KQ0VMRVJZX1NFUklBTElaRVIgPSAnanNvbicKQ0VMRVJZX1JFU1VMVF9TRVJJQUxJWkVSID0gJ2pzb24nCkNFTEVSWV9XT1JLRVJfUFJFRkVUQ0hfTVVMVElQTElFUiA9IGVudi5pbnQoJ0NFTEVSWV9XT1JLRVJfUFJFRkVUQ0hfTVVMVElQTElFUicsIGRlZmF1bHQ9MTApCkNFTEVSWV9CUk9LRVJfUE9PTF9MSU1JVCA9IGVudi5pbnQoJ0NFTEVSWV9CUk9LRVJfUE9PTF9MSU1JVCcsIGRlZmF1bHQ9NTApCnslIGVuZGlmICV9CgpFTUFJTF9CQUNLRU5EID0gZW52KCdFTUFJTF9CQUNLRU5EJywgZGVmYXVsdD0nZGphbmdvLmNvcmUubWFpbC5iYWNrZW5kcy5zbXRwLkVtYWlsQmFja2VuZCcpCkVNQUlMX0ZJTEVfUEFUSCA9IGVudignRU1BSUxfRklMRV9QQVRIJywgZGVmYXVsdD0nJykKRU1BSUxfSE9TVCA9IGVudignRU1BSUxfSE9TVCcsIGRlZmF1bHQ9JycpCkVNQUlMX1BPUlQgPSBlbnYuaW50KCdFTUFJTF9QT1JUJywgZGVmYXVsdD01ODcpCkVNQUlMX0hPU1RfVVNFUiA9IGVudignRU1BSUxfSE9TVF9VU0VSJywgZGVmYXVsdD0nJykKRU1BSUxfSE9TVF9QQVNTV09SRCA9IGVudignRU1BSUxfSE9TVF9QQVNTV09SRCcsIGRlZmF1bHQ9JycpCkVNQUlMX1VTRV9UTFMgPSBlbnYuYm9vbCgnRU1BSUxfVVNFX1RMUycsIGRlZmF1bHQ9VHJ1ZSkKREVGQVVMVF9GUk9NX0VNQUlMID0gZW52KCdERUZBVUxUX0ZST01fRU1BSUwnLCBkZWZhdWx0PUVNQUlMX0hPU1RfVVNFUikKCkxPR0dJTkcgPSB7CiAgICAndmVyc2lvbic6IDEsCiAgICAnZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzJzogRmFsc2UsCiAgICAnZm9ybWF0dGVycyc6IHsKICAgICAgICAnbWFpbic6IHsKICAgICAgICAgICAgJ2Zvcm1hdCc6ICd7bGV2ZWxuYW1lfSB7YXNjdGltZX0ge25hbWV9IHttZXNzYWdlfScsCiAgICAgICAgICAgICdzdHlsZSc6ICd7JywKICAgICAgICB9LAogICAgfSwKICAgICdoYW5kbGVycyc6IHsKICAgICAgICAnY29uc29sZSc6IHsKICAgICAgICAgICAgJ2NsYXNzJzogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCiAgICAgICAgICAgICdmb3JtYXR0ZXInOiAnbWFpbicsCiAgICAgICAgfSwKICAgIH0sCiAgICAncm9vdCc6IHsKICAgICAgICAnaGFuZGxlcnMnOiBbJ2NvbnNvbGUnXSwKICAgICAgICAnbGV2ZWwnOiAnREVCVUcnLAogICAgfSwKICAgICdsb2dnZXJzJzogewogICAgICAgICdkamFuZ28nOiB7CiAgICAgICAgICAgICdoYW5kbGVycyc6IFsnY29uc29sZSddLAogICAgICAgICAgICAnbGV2ZWwnOiAnSU5GTycsCiAgICAgICAgICAgICdwcm9wYWdhdGUnOiBUcnVlLAogICAgICAgIH0sCiAgICB9LAp9CgojIFNlbnRyeQppZiBTRU5UUllfRFNOIDo9IGVudignU0VOVFJZX0RTTicsIGRlZmF1bHQ9JycpOgogICAgaW1wb3J0IHNlbnRyeV9zZGsKICAgIGZyb20gc2VudHJ5X3Nkay5pbnRlZ3JhdGlvbnMuY2VsZXJ5IGltcG9ydCBDZWxlcnlJbnRlZ3JhdGlvbgogICAgZnJvbSBzZW50cnlfc2RrLmludGVncmF0aW9ucy5kamFuZ28gaW1wb3J0IERqYW5nb0ludGVncmF0aW9uCiAgICBmcm9tIHNlbnRyeV9zZGsuaW50ZWdyYXRpb25zLmxvZ2dpbmcgaW1wb3J0IExvZ2dpbmdJbnRlZ3JhdGlvbgogICAgZnJvbSBzZW50cnlfc2RrLmludGVncmF0aW9ucy5yZWRpcyBpbXBvcnQgUmVkaXNJbnRlZ3JhdGlvbgogICAgc2VudHJ5X3Nkay5pbml0KAogICAgICAgIGRzbj1TRU5UUllfRFNOLAogICAgICAgIGVudmlyb25tZW50PUVOViwKICAgICAgICBpbnRlZ3JhdGlvbnM9WwogICAgICAgICAgICBEamFuZ29JbnRlZ3JhdGlvbigpLAogICAgICAgICAgICBDZWxlcnlJbnRlZ3JhdGlvbigpLAogICAgICAgICAgICBSZWRpc0ludGVncmF0aW9uKCksCiAgICAgICAgICAgIExvZ2dpbmdJbnRlZ3JhdGlvbigKICAgICAgICAgICAgICAgIGxldmVsPWxvZ2dpbmcuSU5GTywgICMgQ2FwdHVyZSBpbmZvIGFuZCBhYm92ZSBhcyBicmVhZGNydW1icwogICAgICAgICAgICAgICAgZXZlbnRfbGV2ZWw9bG9nZ2luZy5FUlJPUiwgICMgU2VuZCBlcnJvciBldmVudHMgZnJvbSBsb2cgbWVzc2FnZXMKICAgICAgICAgICAgKSwKICAgICAgICBdLAogICAgKQo8fGZpbV9zdWZmaXh8PgogICAgTUlERExFV0FSRSA9IFsnY29yc2hlYWRlcnMubWlkZGxld2FyZS5Db3JzTWlkZGxld2FyZSddICsgTUlERExFV0FSRQogICAgQ09SU19BTExPV0VEX09SSUdJTlMgPSBlbnYubGlzdCgnQ09SU19BTExPV0VEX09SSUdJTlMnLCBkZWZhdWx0PVtdKQogICAgQ09SU19BTExPV0VEX09SSUdJTl9SRUdFWEVTID0gZW52Lmxpc3QoJ0NPUlNfQUxMT1dFRF9PUklHSU5fUkVHRVhFUycsIGRlZmF1bHQ9W10pCiAgICBDT1JTX0FMTE9XX0FMTF9PUklHSU5TID0gZW52LmJvb2woJ0NPUlNfQUxMT1dfQUxMX09SSUdJTlMnLCBkZWZhdWx0PUZhbHNlKQo8fGZpbV9lbmR8Pg=="]
["a4113db7a32a597569896a6e256b747634e5acab-2","a4113db7a32a597569896a6e256b747634e5acab","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgojIEdvb2dsZSBDb2RlIEphbQojIEdvb2dsZSBDb2RlIEphbSAyMDE2CiMgUXVhbGlmaWNhdGlvbiBSb3VuZCAyMDE2CiMgUHJvYmxlbSBCLiBSZXZlbmdlIG9mIHRoZSBQYW5jYWtlcwoKIyBTb2x2ZWQgYWxsIHRlc3Qgc2V0cwoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKZGVmIGNhbGNfbWluX2ZsaXBfc3RlcChzKToKICAgIGdyb3VwZWRfaGVpZ2h0ID0gMSArIHMuY291bnQoJy0rJykgKyBzLmNvdW50KCcrLScpCiAgICBpZiBzLmVuZHN3aXRoKCctJyk6CiAgICAgICAgcmV0dXJuIGdyb3VwZWRfaGVpZ2h0CiAgICBlbHNlOgogICAgICAgIHJldHVybiBncm91cGVkX2hlaWdodCAtIDEKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBpbXBvcnQgb3MKCiAgICBzYW1wbGVzID0gWwogICAgICAgICctJywKICAgICAgICAnLSsnLAogICAgICAgICcrLScsCiAgICAgICAgJysrKycsCiAgICAgICAgJy0tKy0nCiAgICBdCgogICAgZm9yIHNhbXBsZSBpbiBzYW1wbGVzOgogICAgICAgIHByaW50KGNhbGNfbWluX2ZsaXBfc3RlcChzYW1wbGUpKQoKICAgIGRhdGFfZmlsZXMgPSBbJ0Itc21hbGwtcHJhY3RpY2UnLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICdCLWxhcmdlLXByYWN0aWNlJ10KPHxmaW1fZW5kfD4="]
["8faad3c99b6778d9fabf025fc41a3ea8cb9f63a1-4","8faad3c99b6778d9fabf025fc41a3ea8cb9f63a1","PHxmaW1fcHJlZml4fD4KIyBEZXNhZmlvIDA2NiAtIFbDoXJpb3MgbsO6bWVyb3MgY29tIGZsYWcKIwojIENyaWUgdW0gcHJvZ3JhbWEgcXVlIGxlaWEgVsOBUklPUyBOw5pNRVJPUyBpbnRlaXJvcyBwZWxvIHRlY2xhZG8uIE8gcHJvZ3JhbWEgc8OzIHZhaSBwYXJhciBxdWFuZG8gbyB1c3XDoXJpbyBkaWdpdGFyIG8KIyB2YWxvciA5OTksIHF1ZSDDqSBhIENPTkRJw4fDg08gREUgUEFSQURBLiBObyBmaW5hbCwgbW9zdHJlIHF1YW50b3MgbsO6bWVyb3MgZm9yYW0gZGlnaXRhZG9zIGUgcXVhbCBmb2kgYSBTT01BIGVudHJlIGVsZXMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojIChkZXNjb25zaWRlcmFuZG8gbyBmbGFnKS4KbnVtID0gMApzb21hX2NvdW50ID0gMApzb21hX251bSA9IDAKPHxmaW1fZW5kfD4="]
["247ac38a61a64fd6edd069c1146a06b1eabf2a45-2","247ac38a61a64fd6edd069c1146a06b1eabf2a45","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgpjbGFzcyBhdXRvRmxvdzoKICAgIGRlZiBfX2luaXRfXyhzZWxmLGZ1bmMgPSBOb25lKToKICAgICAgICBzZWxmLnR5cGUgPSBmdW5jCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiByZWFkbG9nKHNlbGYsbW9kdWxlX25hbWUgPSBOb25lKToKICAgICAgICBpZiBtb2R1bGVfbmFtZSA9PSAiYXV0b0NWIjoKICAgICAgICAgICAgZmlsZSA9IG9wZW4oIi4vbG9ncy9hdXRvQ1ZfbG9nXzIwMjAuMDguMDcuMjMuMjMuNDEubG9nIikKICAgICAgICAgICAgbGluZXMgPSBmaWxlLnJlYWQoKS5zcGxpdGxpbmVzKCkKPHxmaW1fZW5kfD4="]
["7ac425f7004bc42b80dc0def4bebbabe71c04b6a-4","7ac425f7004bc42b80dc0def4bebbabe71c04b6a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCBsb2dnaW5nCgppbXBvcnQgdHJpbwoKZnJvbSAuLiBpbXBvcnQgVHJ1bWJsZUNvcmUKZnJvbSAuLiBpbXBvcnQgbWVzc2FnZXMKCgpsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCmNsYXNzIFNpbXBsZVRydW1ibGUoVHJ1bWJsZUNvcmUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCB1c2VybmFtZT0nVHJ1bWJsZScsIHBhc3N3b3JkPScnLCBhY2Nlc3NfdG9rZW5zPU5vbmUsIHZlcnNpb249KDEsIDMsIDApLCAqKmt3YXJncyk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgc2VsZi51c2VybmFtZSA9IHVzZXJuYW1lCiAgICAgICAgc2VsZi5wYXNzd29yZCA9IHBhc3N3b3JkCiAgICAgICAgc2VsZi5hY2Nlc3NfdG9rZW5zID0gYWNjZXNzX3Rva2VucyBvciBbXQogICAgICAgIHNlbGYudmVyc2lvbiA9IHZlcnNpb24KICAgICAgICBzZWxmLnNlc3Npb25zID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QoZGljdCkKICAgICAgICBzZWxmLmNoYW5uZWxzID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QoZGljdCkKCiAgICAgICAgc2VsZi5idWZmZXIgPSBbXQoKICAgIGFzeW5jIGRlZiBvbl9jb25uZWN0KHNlbGYpOgogICAgICAgICIiIiBJbW1lZGlhdGVseSBhZnRlciBjb25uZWN0aW5nLCBib3RoIGNsaWVudCBhbmQgc2VydmVyIGV4Y2hhbmdlIHZlcnNpb24gaW5mbyAiIiIKICAgICAgICB2ZXJzaW9uID0gbWVzc2FnZXMuVmVyc2lvbigpCiAgICAgICAgdmVyc2lvbi52ZXJzaW9uID0gKHNlbGYudmVyc2lvblswXSA8PCAxNikgKyAoc2VsZi52ZXJzaW9uWzFdIDw8IDgpICsgc2VsZi52ZXJzaW9uWzJdCiAgICAgICAgcmV0dXJuIHZlcnNpb24KCiAgICBhc3luYyBkZWYgb25fdmVyc2lvbihzZWxmLCBtZXNzYWdlKToKICAgICAgICAiIiIgQWZ0ZXIgcmVjZWl2aW5nIHRoZSBzZXJ2ZXIncyB2ZXJzaW9uLCB3ZSBzZW5kIG91ciBhdXRoZW50aWNhdGlvbiBkYXRhICIiIgogICAgICAgIGF1dGhlbnRpY2F0ZSA9IG1lc3NhZ2VzLkF1dGhlbnRpY2F0ZSgpCiAgICAgICAgYXV0aGVudGljYXRlLnVzZXJuYW1lID0gc2VsZi51c2VybmFtZQogICAgICAgIGF1dGhlbnRpY2F0ZS5wYXNzd29yZCA9IHNlbGYucGFzc3dvcmQKICAgICAgICBhdXRoZW50aWNhdGUudG9rZW5zLmV4dGVuZChzZWxmLmFjY2Vzc190b2tlbnMpCiAgICAgICAgYXV0aGVudGljYXRlLm9wdXMgPSBUcnVlCiAgICAgICAgcmV0dXJuIGF1dGhlbnRpY2F0ZQoKICAgIGFzeW5jIGRlZiBvbl9jaGFubmVsX3N0YXRlKHNlbGYsIG1lc3NhZ2UpOgogICAgICAgICIiIiBXaGVuIGEgY2hhbm5lbCBpcyB1cGRhdGVkLCB1cGRhdGUgb3VyIGxpc3QgIiIiCiAgICAgICAgc2VsZi5jaGFubmVsc1ttZXNzYWdlLmNoYW5uZWxfaWRdLnVwZGF0ZSh7Cjx8ZmltX2hvbGV8PgogICAgICAgIH0pCgogICAgYXN5bmMgZGVmIG9uX2NoYW5uZWxfcmVtb3ZlKHNlbGYsIG1lc3NhZ2UpOgogICAgICAgICIiIiBXaGVuIGEgY2hhbm5lbCBpcyByZW1vdmVkLCByZW1vdmUgaXQgZnJvbSBvdXIgbGlzdCAiIiIKICAgICAgICBpZiBtZXNzYWdlLmNoYW5uZWxfaWQgaW4gc2VsZi5jaGFubmVsczoKICAgICAgICAgICAgZGVsIHNlbGYuY2hhbm5lbHNbbWVzc2FnZS5jaGFubmVsX2lkXQoKICAgIGFzeW5jIGRlZiBvbl91c2VyX3N0YXRlKHNlbGYsIG1lc3NhZ2UpOgogICAgICAgICIiIiBXaGVuIHdlIGNvbm5lY3Qgb3IgYSB1c2VyIGNvbm5lY3RzIG9yIGNoYW5nZXMgc3RhdGUsIHdlIHJlY2VpdmUgdGhlaXIgY3VycmVudCBpbmZvICIiIgogICAgICAgIGlmIG1lc3NhZ2Uuc2Vzc2lvbiBub3QgaW4gc2VsZi5zZXNzaW9uczoKICAgICAgICAgICAgIyBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gdGhpcyBzZXNzaW9uLAogICAgICAgICAgICAjIGFsc28ga2ljayBvZmYgYSBxdWVyeSBmb3IgdGhlaXIgInN0YXRzIiAoaW5jbHVkZXMgY2VydGlmaWNhdGUgY2hhaW4pCiAgICAgICAgICAgICMgdGhpcyByZXF1aXJlcyB0aGUgIlJlZ2lzdGVyIFVzZXIiIEFDTAogICAgICAgICAgICB1c2VyX3N0YXRzID0gbWVzc2FnZXMuVXNlclN0YXRzKCkKICAgICAgICAgICAgdXNlcl9zdGF0cy5zZXNzaW9uID0gbWVzc2FnZS5zZXNzaW9uCiAgICAgICAgICAgIHlpZWxkIHVzZXJfc3RhdHMKICAgICAgICBzZWxmLnNlc3Npb25zW21lc3NhZ2Uuc2Vzc2lvbl0udXBkYXRlKHsKICAgICAgICAgICAgJ25hbWUnOiBtZXNzYWdlLm5hbWUsCiAgICAgICAgICAgICd1c2VyX2lkJzogbWVzc2FnZS51c2VyX2lkLAogICAgICAgICAgICAnY2hhbm5lbF9pZCc6IG1lc3NhZ2UuY2hhbm5lbF9pZCwKICAgICAgICB9KQoKICAgIGFzeW5jIGRlZiBvbl91c2VyX3JlbW92ZShzZWxmLCBtZXNzYWdlKToKICAgICAgICAiIiIgV2hlbiBhIHVzZXIgaXMga2lja2VkIG9yIGRpc2Nvbm5lY3RzLCByZW1vdmUgdGhlaXIgc2Vzc2lvbiAiIiIKICAgICAgICBkZWwgc2VsZi5zZXNzaW9uc1ttZXNzYWdlLnNlc3Npb25dCgogICAgYXN5bmMgZGVmIG9uX3VzZXJfc3RhdHMoc2VsZiwgbWVzc2FnZSk6CiAgICAgICAgIiIiCiAgICAgICAgV2hlbiB3ZSBxdWVyeSBmb3IgdXNlciBzdGF0cywgd2UgZ2V0IGJhY2sgYSBidW5jaCBvZiBsYXRlbmN5IGluZm8sIGJ1dCBhbHNvCiAgICAgICAgYSBjZXJ0aWZpY2F0ZSBjaGFpbiBhbmQgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdGhlaXIgY2VydGlmaWNhdGUKICAgICAgICB2YWxpZGF0ZXMgd2l0aCB0aGUgc2VydmVyJ3MgY2hhaW4uIE9mIGNvdXJzZSwgd2UgY2FuIGNoZWNrIGl0IG91cnNlbHZlcyBpZiBuZWVkZWQuCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5zZXNzaW9uc1ttZXNzYWdlLnNlc3Npb25dLnVwZGF0ZSh7CiAgICAgICAgICAgICd2ZXJzaW9uJzogKG1lc3NhZ2UudmVyc2lvbi52ZXJzaW9uID4+IDE2LCAobWVzc2FnZS52ZXJzaW9uLnZlcnNpb24gJiAweGZmMDApID4+IDgsIG1lc3NhZ2UudmVyc2lvbi52ZXJzaW9uICYgMHhmZiksCiAgICAgICAgICAgICdvcHVzJzogbWVzc2FnZS5vcHVzLAogICAgICAgICAgICAnY2VydGlmaWNhdGVzJzogbGlzdChtZXNzYWdlLmNlcnRpZmljYXRlcyksCiAgICAgICAgICAgICdzdHJvbmdfY2VydGlmaWNhdGUnOiBib29sKG1lc3NhZ2UuY2VydGlmaWNhdGVzIGFuZCBtZXNzYWdlLnN0cm9uZ19jZXJ0aWZpY2F0ZSksCiAgICAgICAgfSkKCiAgICBhc3luYyBkZWYgb25fc2VydmVyX3N5bmMoc2VsZiwgbWVzc2FnZSk6CiAgICAgICAgIiIiCiAgICAgICAgQWZ0ZXIgdGhlIHNlcnZlciBmaW5pc2hlcyBzZW5kaW5nIGFsbCB1c2VycyBjaGFubmVscyBvbiBpbml0aWFsIGNvbm5lY3QsIHRoaXMKICAgICAgICBldmVudCBpcyBzZW50IHRvIGluZGljYXRlIHRoYXQgdGhlIHN0YXRlIGlzIG5vdyBzeW5jaHJvbml6ZWQuCiAgICAgICAgIiIiCiAgICAgICAgbG9nZ2VyLmluZm8oJ1N0YXRlIHN5bmNocm9uaXplZCwgJWQgY2hhbm5lbHMgYW5kICVkIHVzZXJzJywgbGVuKHNlbGYuY2hhbm5lbHMpLCBsZW4oc2VsZi5zZXNzaW9ucykpCgogICAgYXN5bmMgZGVmIG9uX3VkcF90dW5uZWwoc2VsZiwgbWVzc2FnZSk6CiAgICAgICAgaWYgbWVzc2FnZS50eXBlID09IG1lc3NhZ2VzLlVEUFR1bm5lbC5PcHVzOgogICAgICAgICAgICBpZiBtZXNzYWdlLmVuZF90cmFuc21pc3Npb246CiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnJXMgc3RvcHBlZCB0YWxraW5nJywgc2VsZi5zZXNzaW9uc1ttZXNzYWdlLnNlc3Npb25faWRdWyduYW1lJ10pCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICduYW1lJzogbWVzc2FnZS5uYW1lLAogICAgICAgICAgICAncGFyZW50JzogbWVzc2FnZS5wYXJlbnQsCjx8ZmltX2VuZHw+"]
["cfbf3ed82b9db77aaa2855e8e5d6b3462bf1e9b1-2","cfbf3ed82b9db77aaa2855e8e5d6b3462bf1e9b1",{"$cut":{"chars":18560,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgojICAgbGluZSBbdGhpbnZlY3RvcnN0eWxlXSAoTykocHgpIAojICAgbGluZSBbdGhpbnZlY3RvcnN0eWxlXSAoTykocHkpIAojICMgbGluZSBbdGhpbnZlY3RvcnN0eWxlXSAoTykocHopIAojICAgc3BlY2lhbCB8IFxwYXRoICMxIC0tICMyIG5vZGVbYXQgZW5kLCBiZWxvd10geyQgeCAkfTsgfCAoTykocHgpCiMgICBzcGVjaWFsIHwgXHBhdGggIzEgLS0gIzIgbm9kZVthdCBlbmQsIGJlbG93XSB7JCB5ICR9OyB8IChPKShweSkKIyAgIHNwZWNpYWwgfCBccGF0aCAjMSAtLSAjMiBub2RlW2F0IGVuZCwgYWJvdmVdIHskIHogJH07IHwgKE8pKHB6KQoKaW1wb3J0IHN5cyxvcyxtYXRoCmZyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgoKdW5pdGNlbGxfY2hvaWNlcyA9IFsnY3ViaWMnLCdoZXhhZ29uYWwnXQogIApwYXJzZXIgPSBPcHRpb25QYXJzZXIodXNhZ2U9JyVwcm9nIFtvcHRpb25zXScsIGRlc2NyaXB0aW9uID0gIiIiCkdlbmVyYXRlIHZlY3Rvci1iYXNlZCBjcnlzdGFsIHVuaXQgb3ZlcmxheXMgZnJvbSBFdWxlciBhbmdsZXMuCkFuZ2xlcyBhcmUgc3BlY2lmaWVkIGVpdGhlciBkaXJlY3RseSBhcyBhcmd1bWVudCwgcmVzdWx0aW5nIGluIGEgc2luZ2xlIGZpbGUgd2l0aCBuYW1lIGRlcml2ZWQgZnJvbSB0aGUgb3JpZW50YXRpb24gYW5kIGxhdHRpY2UsCm9yIGJ5IHNjYW5uaW5nIHRocm91Z2ggYW4gRURBWC9UU0wgdW5pdGNlbGwgZmlsZSBmcm9tIHdoaWNoIGEgYmF0Y2ggb2YgdW5pdGNlbGxzIGxvY2F0ZWQgYXQgdGhlIHJlc3BlY3RpdmUgcG9zaXRpb25zIGlzIHByb2R1Y2VkLgoKUmVxdWlyZXMgYSB3b3JraW5nIHNldHVwIG9mICdza2V0Y2gnIChieSBHZW5lIFJlc3NsZXIpIHBsdXMgJ0xhVGVYJyB3aXRoICdUaWtaJyBleHRlbnNpb24uCkNvbHVtbiBoZWFkaW5ncyBuZWVkIHRvIGhhdmUgbmFtZXMgJ3BoaTEnLCAnUGhpJywgJ3BoaTInLgoKJElkOiB1bml0Y2VsbC5weSA0NzQgMjAxNy0wMy0xMCAxOTozMTo1MFogcC5laXNlbmxvaHIgJAoiIiIpCgpwYXJzZXIuYWRkX29wdGlvbignLXUnLCAnLXQnLCAnLS11bml0Y2VsbCcsIHR5cGU9J3N0cmluZycsIG1ldGF2YXIgPSAnc3RyaW5nJywKICAgICAgICAgICAgICAgICAgZGVzdD0ndW5pdGNlbGwnLAogICAgICAgICAgICAgICAgICBoZWxwPSd0eXBlIG9mIHVuaXQgY2VsbCBbJXNdJyUoJywnLmpvaW4odW5pdGNlbGxfY2hvaWNlcykpKQpwYXJzZXIuYWRkX29wdGlvbignLW4nLCAnLS1uYW1lJywgdHlwZT0nc3RyaW5nJywgbWV0YXZhciA9ICdzdHJpbmcnLAogICAgICAgICAgICAgICAgICBkZXN0PSduYW1lJywKICAgICAgICAgICAgICAgICAgaGVscD0nZmlsZW5hbWUgb2Ygb3V0cHV0JykKcGFyc2VyLmFkZF9vcHRpb24oJy1lJywgJy0tZXVsZXJzJywgdHlwZT0nZmxvYXQnLCBuYXJncz0zLCBtZXRhdmFyID0gJ2Zsb2F0IGZsb2F0IGZsb2F0JywKICAgICAgICAgICAgICAgICAgZGVzdD0nZXVsZXJzJywKICAgICAgICAgICAgICAgICAgaGVscD0nMy0xLTMgRXVsZXIgYW5nbGVzIGluIGRlZ3JlZXMgWyVkZWZhdWx0XScpCnBhcnNlci5hZGRfb3B0aW9uKCctcicsICctLXJhZGlhbnMnLCBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgICAgICAgICAgICBkZXN0PSdyYWRpYW5zJywKICAgICAgICAgICAgICAgICAgaGVscD0nRXVsZXIgYW5nbGVzIGluIHJhZGlhbnMgWyVkZWZhdWx0XScpCnBhcnNlci5hZGRfb3B0aW9uKCctYycsICctLWNvdmVyYScsIHR5cGU9J2Zsb2F0JywgbWV0YXZhciA9ICdmbG9hdCcsCiAgICAgICAgICAgICAgICAgIGRlc3Q9J2NhJywKICAgICAgICAgICAgICAgICAgaGVscD0nYyBvdmVyIGEgcmF0aW8gW2lkZWFsXScpCnBhcnNlci5hZGRfb3B0aW9uKCctbycsICctLW9wYWNpdHknLCB0eXBlPSdmbG9hdCcsIG1ldGF2YXIgPSAnZmxvYXQnLAogICAgICAgICAgICAgICAgICBkZXN0PSdvcGFjaXR5JywKICAgICAgICAgICAgICAgICAgaGVscD0nb3BhY2l0eSBsZXZlbCBbJWRlZmF1bHRdJykKcGFyc2VyLmFkZF9vcHRpb24oJy1hJywgJy0tYXhlcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgIGRlc3Q9J2F4ZXMnLAogICAgICAgICAgICAgICAgICBoZWxwPSdzaG93IGFsbCBheGVzIFslZGVmYXVsdF0nKQpwYXJzZXIuYWRkX29wdGlvbignLS1nbG9iYWxheGVzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgZGVzdD0nZ2xvYmFsYXhlcycsCiAgICAgICAgICAgICAgICAgIGhlbHA9J3Nob3cgZ2xvYmFsIGF4ZXMgWyVkZWZhdWx0XScpCnBhcnNlci5hZGRfb3B0aW9uKCctLWxvY2FsYXhlcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgIGRlc3Q9J2xvY2FsYXhlcycsCiAgICAgICAgICAgICAgICAgIGhlbHA9J3Nob3cgbG9jYWwgYXhlcyBbJWRlZmF1bHRdJykKcGFyc2VyLmFkZF9vcHRpb24oJy0tdmVjdG9yJywgdHlwZT0nZmxvYXQnLCBuYXJncz0zLCBtZXRhdmFyID0gJ2Zsb2F0IGZsb2F0IGZsb2F0JywKICAgICAgICAgICAgICAgICAgZGVzdD0ndmVjdG9yJywKICAgICAgICAgICAgICAgICAgaGVscD0nZHJhdyBhIGxhdHRpY2UgdmVjdG9yJykKcGFyc2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcGVyc3BlY3RpdmUnLCBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgICAgICAgICAgICBkZXN0PSdwZXJzcGVjdGl2ZScsCiAgICAgICAgICAgICAgICAgIGhlbHA9J3BlcnNwZWN0aXZlIHZpZXcgWyVkZWZhdWx0XScpCnBhcnNlci5hZGRfb3B0aW9uKCcteScsICctLWV5ZScsIHR5cGU9J2Zsb2F0JywgbmFyZ3M9MywgbWV0YXZhciA9ICdmbG9hdCBmbG9hdCBmbG9hdCcsCiAgICAgICAgICAgICAgICAgIGRlc3Q9J2V5ZScsCiAgICAgICAgICAgICAgICAgIGhlbHA9J3Bvc2l0aW9uIG9mIGV5ZSBvbiBzY2VuZSBbJWRlZmF1bHRdJykKcGFyc2VyLmFkZF9vcHRpb24oICAgICAgJy0tdXAnLCB0eXBlPSdmbG9hdCcsIG5hcmdzPTMsIG1ldGF2YXIgPSAnZmxvYXQgZmxvYXQgZmxvYXQnLAogICAgICAgICAgICAgICAgICBkZXN0PSd1cCcsCiAg"}}]
["d45894a82d51c82efeda4b0cbc48f35b3cc9fa91-1","d45894a82d51c82efeda4b0cbc48f35b3cc9fa91","PHxmaW1fcHJlZml4fD4KIyBSdW4gZm9yd2FyZCBhbmQgYmFja3dhcmQgcGFzcyBvbiBhIGBWZWN0b3JTcGluTW9kZWxgIG1vZHVsZSBhbmQgcGxvdCBgcGhpYCBhbmQgaXRzIGRlcml2YXRpdmVzLgoKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRvcmNoCgpmcm9tIGFmZW0ubW9kZWxzIGltcG9ydCBWZWN0b3JTcGluTW9kZWwKCm51bV9zcGlucywgZGltID0gMzIsIDEyOAoKIyBTZXR1cCB2ZWN0b3Itc3BpbiBtb2RlbC4KbW9kZWwgPSBWZWN0b3JTcGluTW9kZWwoCiAgICBudW1fc3BpbnM9bnVtX3NwaW5zLAogICAgZGltPWRpbSwKICAgIGJldGE9MS4wLAopCgojIENyZWF0ZSByYW5kb20gaW5wdXRzIGFuZCBpbml0aWFsIHZhbHVlIGZvciBhdXhpbGlhcnkgdmFyaWFibGUgKHNlZSBgYWZlbS5tb2RlbHMuVmVjdG9yU3Bpbk1vZGVsYCkuCnggPSAodG9yY2gucmFuZG4oMSwgbnVtX3NwaW5zLCBkaW0pIC8gbnAuc3FydChkaW0pKS5yZXF1aXJlc19ncmFkXygpCnQwID0gdG9yY2gub25lcygxKQoKIyBSdW4gZm9yd2FyZCBwYXNzIGFuZCBnZXQgb3V0cHV0IG1hZ25ldGl6YXRpb25zLCBzdGF0aW9uYXJ5IHRfc3RhciB2YWx1ZSwgYW5kIGFwcHJveGltYXRlIGZyZWUgZW5lcmd5LgpvdXQgPSBtb2RlbCh4LCB0MD10MCwgcmV0dXJuX2FmZT1UcnVlLCByZXR1cm5fbWFnbmV0aXphdGlvbnM9VHJ1ZSkKCnByaW50KAogICAgZifinKggbWFnbmV0aXphdGlvbnM6IHtvdXQubWFnbmV0aXphdGlvbnN9XG7inKggdF9zdGFyIHtvdXQudF9zdGFyLmRldGFjaCgpfVxu4pyoIGFwcHJveGltYXRlIGZyZWUgZW5lcmd5OiB7b3V0LmFmZS5kZXRhY2goKX0nCikKCiMgUnVuIGJhY2t3YXJkIG9uIHN1bSBvZiBmcmVlIGVuZXJnaWVzIGFjcm9zcyBiYXRjaCBkaW1lbnNpb24uCm91dC5hZmUuc3VtKCkuYmFja3dhcmQoKQoKIyMjIyMjIyMjIyMjIyMKIyBQTE9UIFNUVUZGICMKIyMjIyMjIyMjIyMjIyMKCmlmIHguc2l6ZSgwKSA9PSAxIGFuZCB0MC5udW1lbCgpID09IDE6CgogICAgZGVmIGZpbHRlcl9hcnJheShhLCB0aHJlc2hvbGQ9MjUwKToKICAgICAgICBpZHggPSBucC53aGVyZShucC5hYnMoYSkgPiB0aHJlc2hvbGQpCiAgICAgICAgYVtpZHhdID0gbnAubmFuCiAgICAgICAgcmV0dXJuIGEKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHRfc3RhciA9IG91dC50X3N0YXJbMF1bMF0uZGV0YWNoKCkubnVtcHkoKQogICAgYWZlX3N0YXIgPSBvdXQuYWZlWzBdWzBdLmRldGFjaCgpLm51bXB5KCkKICAgIGdyYWRfcGhpX3N0YXIgPSBucC5hcnJheShtb2RlbC5famFjX3BoaShvdXQudF9zdGFyLCB4WzoxLCA6LCA6XSkuZGV0YWNoKCkubnVtcHkoKSkKICAgICMgUGljayBhIHJhbmdlIGFuZCByZXNvbHV0aW9uIGZvciBgdGAuCjx8ZmltX2VuZHw+"]
["2e461c317aecae23a027b12aecf07676f509e50a-3","2e461c317aecae23a027b12aecf07676f509e50a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nPXV0Zi04CiMKIyBDb3B5cmlnaHQgwqkgMjAxOCBWTXdhcmUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIAojIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgoKX19hdXRob3JfXyA9ICd5YXNlbnNpbScKCgppbXBvcnQgcmVxdWVzdHMsIHRpbWUKdHJ5OgogICAgZnJvbSBjb20udm13YXJlLm5zeC5tb2RlbF9jbGllbnQgaW1wb3J0IElwQmxvY2sKICAgIGZyb20gY29tLnZtd2FyZS5uc3gubW9kZWxfY2xpZW50IGltcG9ydCBUYWcKCiAgICBmcm9tIGNvbS52bXdhcmUubnN4LnBvb2xzX2NsaWVudCBpbXBvcnQgSXBCbG9ja3MKCiAgICBmcm9tIGNvbS52bXdhcmUudmFwaS5zdGQuZXJyb3JzX2NsaWVudCBpbXBvcnQgTm90Rm91bmQKICAgIGZyb20gdm13YXJlLnZhcGkubGliIGltcG9ydCBjb25uZWN0CiAgICBmcm9tIHZtd2FyZS52YXBpLnNlY3VyaXR5LnVzZXJfcGFzc3dvcmQgaW1wb3J0IFwKICAgICAgICBjcmVhdGVfdXNlcl9wYXNzd29yZF9zZWN1cml0eV9jb250ZXh0CiAgICBmcm9tIHZtd2FyZS52YXBpLnN0ZGxpYi5jbGllbnQuZmFjdG9yaWVzIGltcG9ydCBTdHViQ29uZmlndXJhdGlvbkZhY3RvcnkKICAgIGZyb20gY29tLnZtd2FyZS5uc3gubW9kZWxfY2xpZW50IGltcG9ydCBBcGlFcnJvcgogICAgZnJvbSBjb20udm13YXJlLnZhcGkuc3RkLmVycm9yc19jbGllbnQgaW1wb3J0IEVycm9yCiAgICBIQVNfUFlOU1hUID0gVHJ1ZQpleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBIQVNfUFlOU1hUID0gRmFsc2UKCmRlZiBsaXN0SXBCbG9ja3MobW9kdWxlLCBzdHViX2NvbmZpZyk6CiAgICBpcGJsb2NrX2xpc3QgPSBbXQogICAgdHJ5OgogICAgICAgIGlwYmxvY2tfc3ZjID0gSXBCbG9ja3Moc3R1Yl9jb25maWcpCiAgICAgICAgaXBibG9ja19saXN0ID0gaXBibG9ja19zdmMubGlzdCgpCiAgICBleGNlcHQgRXJyb3IgYXMgZXg6CiAgICAgICAgYXBpX2Vycm9yID0gZXguZGF0ZS5jb252ZXJ0X3RvKEFwaUVycm9yKQogICAgICAgIG1vZHVsZS5mYWlsX2pzb24obXNnPSdBUEkgRXJyb3IgbGlzdGluZyBJUCBCTE9DS1M6ICVzJyUoYXBpX2Vycm9yLmVycm9yX21lc3NhZ2UpKQogICAgcmV0dXJuIGlwYmxvY2tfbGlzdAoKZGVmIGdldElwQmxvY2tCeU5hbWUobW9kdWxlLCBzdHViX2NvbmZpZyk6CiAgICByZXN1bHQgPSBsaXN0SXBCbG9ja3MobW9kdWxlLCBzdHViX2NvbmZpZykKICAgIGZvciB2cyBpbiByZXN1bHQucmVzdWx0czoKICAgICAgICBpcGJsb2NrID0gdnMuY29udmVydF90byhJcEJsb2NrKQogICAgICAgIGlmIGlwYmxvY2suZGlzcGxheV9uYW1lID09IG1vZHVsZS5wYXJhbXNbJ2Rpc3BsYXlfbmFtZSddOgogICAgICAgICAgICByZXR1cm4gaXBibG9jawogICAgcmV0dXJuIE5vbmUKCmRlZiBtYWluKCk6CiAgICBtb2R1bGUgPSBBbnNpYmxlTW9kdWxlKAogICAgICAgIGFyZ3VtZW50X3NwZWM9ZGljdCgKICAgICAgICAgICAgZGlzcGxheV9uYW1lPWRpY3QocmVxdWlyZWQ9VHJ1ZSwgdHlwZT0nc3RyJyksCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPWRpY3QocmVxdWlyZWQ9RmFsc2UsIHR5cGU9J3N0cicsIGRlZmF1bHQ9Tm9uZSksCiAgICAgICAgICAgIGNpZHI9ZGljdChyZXF1aXJlZD1UcnVlLCB0eXBlPSdzdHInKSwKICAgICAgICAgICAgdGFncz1kaWN0KHJlcXVpcmVkPUZhbHNlLCB0eXBlPSdkaWN0JywgZGVmYXVsdD1Ob25lKSwKICAgICAgICAgICAgc3RhdGU9ZGljdChyZXF1aXJlZD1GYWxzZSwgdHlwZT0nc3RyJywgZGVmYXVsdD0icHJlc2VudCIsIGNob2ljZXM9WydwcmVzZW50JywgJ2Fic2VudCddKSwKICAgICAgICAgICAgbnN4X21hbmFnZXI9ZGljdChyZXF1aXJlZD1UcnVlLCB0eXBlPSdzdHInKSwKICAgICAgICAgICAgbnN4X3VzZXJuYW1lPWRpY3QocmVxdWlyZWQ9VHJ1ZSwgdHlwZT0nc3RyJyksCiAgICAgICAgICAgIG5zeF9wYXNzd2Q9ZGljdChyZXF1aXJlZD1UcnVlLCB0eXBlPSdzdHInLCBub19sb2c9VHJ1ZSkKICAgICAgICApLAogICAgICAgIHN1cHBvcnRzX2NoZWNrX21vZGU9VHJ1ZQogICAgKQoKICAgIGlmIG5vdCBIQVNfUFlOU1hUOgogICAgICAgIG1vZHVsZS5mYWlsX2pzb24obXNnPSdweW5zeHQgaXMgcmVxdWlyZWQgZm9yIHRoaXMgbW9kdWxlJykKICAgIHNlc3Npb24gPSByZXF1ZXN0cy5zZXNzaW9uKCkKICAgIHNlc3Npb24udmVyaWZ5ID0gRmFsc2UKICAgIG5zeF91cmwgPSAnaHR0cHM6Ly8lczolcycgJSAobW9kdWxlLnBhcmFtc1snbnN4X21hbmFnZXInXSwgNDQzKQogICAgY29ubmVjdG9yID0gY29ubmVjdC5nZXRfcmVxdWVzdHNfY29ubmVjdG9yKAogICAgICAgIHNlc3Npb249c2Vzc2lvbiwgbXNnX3Byb3RvY29sPSdyZXN0JywgdXJsPW5zeF91cmwpCiAgICBzdHViX2NvbmZpZyA9IFN0dWJDb25maWd1cmF0aW9uRmFjdG9yeS5uZXdfc3RkX2NvbmZpZ3VyYXRpb24oY29ubmVjdG9yKQogICAgc2VjdXJpdHlfY29udGV4dCA9IGNyZWF0ZV91c2VyX3Bhc3N3b3JkX3NlY3VyaXR5X2NvbnRleHQobW9kdWxlLnBhcmFtc1sibnN4X3VzZXJuYW1lIl0sIG1vZHVsZS5wYXJhbXNbIm5zeF9wYXNzd2QiXSkKICAgIGNvbm5lY3Rvci5zZXRfc2VjdXJpdHlfY29udGV4dChzZWN1cml0eV9jb250ZXh0KQogICAgcmVxdWVzdHMucGFja2FnZXMudXJsbGliMy5kaXNhYmxlX3dhcm5pbmdzKCkKICAgIHRhZ3M9Tm9uZQogICAgaWYgbW9kdWxlLnBhcmFtc1sndGFncyddIGlzIG5vdCBOb25lOgogICAgICAgIHRhZ3MgPSBbXQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gbW9kdWxlLnBhcmFtc1sndGFncyddLml0ZW1zKCk6CiAgICAgICAgICAgIHRhZz1UYWcoc2NvcGU9a2V5LCB0YWc9dmFsdWUpCiAgICAgICAgICAgIHRhZ3MuYXBwZW5kKHRhZykKCjx8ZmltX2VuZHw+"]
["f15bb10fa5b6cabbf7bab7248bfa3b1dcc696bd0-2","f15bb10fa5b6cabbf7bab7248bfa3b1dcc696bd0","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNvbGxlY3Rpb25zCgoKY2xhc3MgVG9wVm90ZWRDYW5kaWRhdGU6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHBlcnNvbnMsIHRpbWVzKToKICAgICAgICBzZWxmLmxlYWRzID0gW10KICAgICAgICBzZWxmLnRpbWVzID0gdGltZXMKICAgICAgICBjb3VudCA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGludCkKICAgICAgICBsZWFkID0gLTEKCiAgICAgICAgZm9yIHAgaW4gcGVyc29uczoKICAgICAgICAgICAgY291bnRbcF0gKz0gMQogICAgICAgICAgICBpZiBjb3VudFtwXSA+PSBjb3VudC5nZXQobGVhZCwgMCk6CiAgICAgICAgICAgICAgICBsZWFkID0gcAogICAgICAgICAgICBzZWxmLmxlYWRzLmFwcGVuZChsZWFkKQoKICAgIGRlZiBmaW5kX3RpbWUoc2VsZiwgdCk6CiAgICAgICAgbG93LCBoaWdoID0gMCwgbGVuKHNlbGYudGltZXMpIC0gMQoKICAgICAgICB3aGlsZSBsb3cgPD0gaGlnaDoKICAgICAgICAgICAgbWlkID0gbG93ICsgKGhpZ2ggLSBsb3cpIC8vIDIKCiAgICAgICAgICAgIGlmIHNlbGYudGltZXNbbWlkXSA9PSB0OgogICAgICAgICAgICAgICAgcmV0dXJuIG1pZAogICAgICAgICAgICBlbGlmIHNlbGYudGltZXNbbWlkXSA8IHQ6CiAgICAgICAgICAgICAgICBsb3cgPSBtaWQgKyAxCiAgICAgICAgICAgIGVsc2U6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIGhpZ2ggPSBtaWQgLSAxCgo8fGZpbV9lbmR8Pg=="]
["748ede14210573885f50ee7cf33f7e0cef92efd1-2","748ede14210573885f50ee7cf33f7e0cef92efd1","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCmltcG9ydCBhc3QKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCgpmcm9tIGNvbmYgaW1wb3J0IGNvbmZpZwpmcm9tIGxvZ2dlciBpbXBvcnQgbG9nZ2VyCmZyb20gdXRpbHMuYmFzZV9wbHVnaW4gaW1wb3J0IGxvYWRfbW9kdWxlLCBnZXRfcGx1Z2luc19saXN0CgpzY3JpcHRfbmFtZSA9IFBhdGgoX19maWxlX18pLm5hbWUKZmFyb19sb2dnZXIgPSBsb2dnZXIuTG9nZ2VyKGxvZ2dlcl9uYW1lPXNjcmlwdF9uYW1lLCBmaWxlX25hbWU9Y29uZmlnLkxPR19GSUxFX05BTUUsIGxvZ2dpbmdfbGV2ZWw9Y29uZmlnLkxPR19MRVZFTCkKCgpjbGFzcyBPcmNoZXN0cmF0b3I6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZik6CiAgICAgICAgc2VsZi5jb25maWcgPSBjb25mCiAgICAgICAgc2VsZi5yZXN1bHRzID0ge30KICAgICAgICBzZWxmLnBsdWdpbnNfcGF0aCA9IFBhdGgoX19maWxlX18pLnBhcmVudAogICAgICAgIHNlbGYucGx1Z2luX2xpc3QgPSBnZXRfcGx1Z2luc19saXN0KHNlbGYucGx1Z2luc19wYXRoKQoKICAgIGRlZiBfbG9hZF9wbHVnaW4oc2VsZiwgZXhlY19wbHVnaW4sIGNvbnRlbnQpOgogICAgICAgIGlmIGV4ZWNfcGx1Z2luIGluIHNlbGYucGx1Z2luX2xpc3Q6CiAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYucGx1Z2luc19wYXRoLm5hbWUgKyAiLiIgKyBleGVjX3BsdWdpbiArICIuZW50cnlwb2ludCIKICAgICAgICAgICAgcmV0dXJuIGxvYWRfbW9kdWxlKG1vZHVsZSkuUGx1Z2luRW50cnlwb2ludChjb250ZW50LCBzZWxmLmNvbmZpZ1sibGFuZyJdKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGZhcm9fbG9nZ2VyLmVycm9yKHNjcmlwdF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb2FkX3BsdWdpbi5fX25hbWVfXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiJQbHVnaW4ge2V4ZWNfcGx1Z2lufSBub3QgZm91bmQuIikKICAgICAgICAgICAgcmV0dXJuIE5vbmUKCiAgICBkZWYgX3VwZGF0ZV9yZXN1bHRzKHNlbGYsIGRldGVjdGlvbl9yZXN1bHRzKToKICAgICAgICBpZiBub3QgZGV0ZWN0aW9uX3Jlc3VsdHMgPT0ge306CiAgICAgICAgICAgIGVudF9rZXkgPSBsaXN0KGRldGVjdGlvbl9yZXN1bHRzKVswXQogICAgICAgICAgICBpZiBlbnRfa2V5IGluIHNlbGYucmVzdWx0czoKICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0c1tlbnRfa2V5XS51cGRhdGUoZGV0ZWN0aW9uX3Jlc3VsdHNbZW50X2tleV0pCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdHMudXBkYXRlKGRldGVjdGlvbl9yZXN1bHRzKQoKICAgIGRlZiBfc2VsZWN0X3BsdWdpbnNfdG9fcnVuKHNlbGYpOgogICAgICAgIHJ1bl9hbGwgPSBzZWxmLmNvbmZpZ1sicGx1Z2lucyJdWyJhbGwiXQogICAgICAgIHJldHVybiBzZWxmLnBsdWdpbl9saXN0IGlmIHJ1bl9hbGwgXAogICAgICAgICAgICBlbHNlIHNlbGYuY29uZmlnWyJwbHVnaW5zIl1bImF2YWlsYWJsZV9saXN0Il0KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBydW5fcGx1Z2lucyhzZWxmLCBjb250ZW50KToKICAgICAgICBjb250ZW50ID0gYXN0LmxpdGVyYWxfZXZhbChjb250ZW50KQoKICAgICAgICBleGVjdXRlX3BsdWdpbnMgPSBzZWxmLl9zZWxlY3RfcGx1Z2luc190b19ydW4oKQo8fGZpbV9lbmR8Pg=="]
["24dca39a658112447ac9138a00204b2a2cb001c0-1","24dca39a658112447ac9138a00204b2a2cb001c0","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMC43IG9uIDIwMjAtMDYtMjkgMTc6MDQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMsIG1vZGVscwpmcm9tIGRhdGEubW9kZWxzIGltcG9ydCBmYXJtZXIsIGV4cGVyaW1lbnQKCjx8ZmltX2VuZHw+"]
["7032cf3d4a3b7dee986e594644b42b1ad297e5d8-1","7032cf3d4a3b7dee986e594644b42b1ad297e5d8","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgpkZXNfcGF0aCA9ICcuL2ZpbmFsX2RhdGFzZXQvdW5pb25faGlnaC5jc3YnCmNzdmYgPSBvcGVuKGRlc19wYXRoLCAndycsIGVuY29kaW5nPSd1dGYtOCcsIG5ld2xpbmU9JycpCmNzdndyaXRlciA9IGNzdi53cml0ZXIoY3N2ZikKY3N2d3JpdGVyLndyaXRlcm93KFsnYXJjaF9jb25maWcnLCdncHUgbGF0ZW5jeScsJ2NwdSBsYXRlbmN5J10pCgpmb3IgZGlyIGluIG9zLmxpc3RkaXIocm9vdF9wYXRoKToKICAgIGNzdmZpbGUgPSBvcGVuKG9zLnBhdGguam9pbihyb290X3BhdGgsIGRpcikpCiAgICBjc3ZyZWFkZXIgPSBjc3YucmVhZGVyKGNzdmZpbGUpCiAgICBmb3IgaSwgcm93IGluIGVudW1lcmF0ZShjc3ZyZWFkZXIpOgogICAgICAgIGlmIGkgPiAwOgogICAgICAgICAgIGNzdndyaXRlci53cml0ZXJvdyhyb3cpCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBjc3YKaW1wb3J0IG9zCgpyb290X3BhdGggPSAnLi9sYXRlbmN5X2RhdGFzZXQvaGlnaF9sYXRlbmN5X2RhdGFzZXQnCjx8ZmltX2VuZHw+"]
["8f4b808e0e40b489b0ec69a904377dddce28aa56-1","8f4b808e0e40b489b0ec69a904377dddce28aa56","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBpbXBvcnRsaWIKZnJvbSBzeXMgaW1wb3J0IHN0ZGVycgoKaW1wb3J0IGd5bQpmcm9tIGxvZ3VydSBpbXBvcnQgbG9nZ2VyCgppbXBvcnQgZ3ltX21pbmlncmlkICAjIG5vcWEKZnJvbSBwdXJscy5hbGdvcml0aG1zIGltcG9ydCBtb2R1bGVzLCBBbGdvcml0aG1FcnJvcgpmcm9tIHB1cmxzLmFsZ29yaXRobXMuYmFzZSBpbXBvcnQgUmVpbmZvcmNlbWVudExlYXJuaW5nQWxnb3JpdGhtCmZyb20gcHVybHMudXRpbHMubG9ncyBpbXBvcnQgZGVidWcsIGVycm9yLCBnZXRfZm9ybWF0LCBpbmZvCgpmb3IgbW9kdWxlIGluIG1vZHVsZXM6CiAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShtb2R1bGUpCgoKZGVmIHJ1bihhY3Rpb24sIGFyZ3MpOgogICAgYWxnb3JpdGhtcyA9IHt9CiAgICBkZWJ1ZygiYWxnb3JpdGhtcyBkZXRlY3RlZDoiKQogICAgZm9yIGFsZ29yaXRobSBpbiBSZWluZm9yY2VtZW50TGVhcm5pbmdBbGdvcml0aG0uc3ViY2xhc3NlczoKICAgICAgICBkZWJ1ZyhhbGdvcml0aG0uX19uYW1lX18pCiAgICAgICAgYWxnb3JpdGhtcy51cGRhdGUoe2FsZ29yaXRobS5fX25hbWVfXzogYWxnb3JpdGhtfSkKICAgIGRlYnVnKCIiKQoKICAgIHRyeToKICAgICAgICBpZiBhcmdzLmFsZ29yaXRobSBub3QgaW4gYWxnb3JpdGhtczoKICAgICAgICAgICAgdmFsaWRfYWxnb3JpdGhtcyA9ICIsICIuam9pbihhbGdvcml0aG1zLmtleXMoKSkKICAgICAgICAgICAgZXJyb3IoZiJjaG9vc2UgYSB2YWxpZCBhbGdvcml0aG06IHt2YWxpZF9hbGdvcml0aG1zfSIpCiAgICAgICAgICAgIHJldHVybiAxCiAgICAgICAgdHJ5OgogICAgICAgICAgICBlbnYgPSBneW0ubWFrZShhcmdzLmVudmlyb25tZW50KQogICAgICAgIGV4Y2VwdCBneW0uZXJyb3IuRXJyb3I6CiAgICAgICAgICAgIHZhbGlkX2Vudmlyb25tZW50cyA9ICJcbiIuam9pbigKICAgICAgICAgICAgICAgIFtlbnYuaWQgZm9yIGVudiBpbiBneW0uZW52cy5yZWdpc3RyeS5hbGwoKSBpZiBlbnYuaWQuc3RhcnRzd2l0aCgiTWluaUdyaWQiKV0KICAgICAgICAgICAgKQogICAgICAgICAgICBlcnJvcihmImNob29zZSBhIHZhbGlkIGd5bSBlbnZpcm9tZW50Olxue3ZhbGlkX2Vudmlyb25tZW50c30iKQogICAgICAgICAgICByZXR1cm4gMQoKICAgICAgICBhbGdvID0gYWxnb3JpdGhtc1thcmdzLmFsZ29yaXRobV0oZW52PWVudiwgYXJncz1hcmdzKQogICAgICAgIHdpdGggbG9nZ2VyLmNhdGNoKHJlcmFpc2U9VHJ1ZSk6CiAgICAgICAgICAgIGlmIGFjdGlvbiA9PSAidHJhaW4iOgogICAgICAgICAgICAgICAgYWxnby50cmFpbigpCiAgICAgICAgICAgIGlmIGFjdGlvbiA9PSAidmlzdWFsaXplIjoKICAgICAgICAgICAgICAgIGFsZ28udmlzdWFsaXplKCkKCiAgICBleGNlcHQgQWxnb3JpdGhtRXJyb3IgYXMgZToKICAgICAgICBlcnJvcihlLm1zZykKICAgICAgICByZXR1cm4gMQoKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBlcnJvcihlKQogICAgICAgIHJldHVybiAxCiAgICByZXR1cm4gMAoKCmRlZiBtYWluKCk6CiAgICBwID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogICAgcC5hZGRfYXJndW1lbnQoIi0tbG9nLXRpbWUtc3RhbXBzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSkKCiAgICBzdWJwID0gcC5hZGRfc3VicGFyc2VycyhkZXN0PSJzdWJjbWRfbmFtZSIpCgogICAgcF90cmFpbiA9IHN1YnAuYWRkX3BhcnNlcigidHJhaW4iLCBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3VGV4dEhlbHBGb3JtYXR0ZXIpCiAgICBwX3RyYWluLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1hbGdvcml0aG0iLAogICAgICAgIHR5cGU9c3RyLAogICAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgICAgbWV0YXZhcj0iYWxnbyIsCiAgICAgICAgaGVscD0ic3RyOiAgIHJlaW5mb3JjZW1lbnQgbGVhcm5pbmcgYWxnb3JpdGhtIGFsZ28gdG8gdXNlLiIsCiAgICApCiAgICBwX3RyYWluLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1lbnZpcm9ubWVudCIsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgICBtZXRhdmFyPSJlbnYiLAogICAgICAgIGhlbHA9InN0cjogICBtaW5pZ3JpZCBlbnZpcm9ubWVudCBlbnYgdG8gdXNlLiIsCiAgICApCiAgICBwX3RyYWluLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1sZWFybmluZy1yYXRlIiwKICAgICAgICB0eXBlPWZsb2F0LAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBtZXRhdmFyPSLOsSIsCiAgICAgICAgaGVscD0iZmxvYXQ6IGxlYXJuaW5nIHJhdGUgzrEgdG8gdXNlLiIsCiAgICApCiAgICBwX3RyYWluLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1kaXNjb3VudC1mYWN0b3IiLAogICAgICAgIHR5cGU9ZmxvYXQsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIG1ldGF2YXI9Is6zIiwKICAgICAgICBoZWxwPSJmbG9hdDogZGlzY291bnQgZmFjdG9yIM6zIHRvIHVzZS4iLAogICAgKQogICAgcF90cmFpbi5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tc3RhcnQtZXBzIiwKICAgICAgICB0eXBlPWZsb2F0LAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBtZXRhdmFyPSJzZSIsCiAgICAgICAgaGVscD0iZmxvYXQ6IGFubmVhbCBlcHNpbG9uIHVzZWQgaW4gZ3JlZWR5LWVwc2lsb24gZnJvbSBzZS4iLAogICAgKQogICAgcF90cmFpbi5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tZW5kLWVwcyIsCiAgICAgICAgdHlwZT1mbG9hdCwKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgbWV0YXZhcj0iZWUiLAogICAgICAgIGhlbHA9ImZsb2F0OiBhbm5lYWwgZXBzaWxvbiB1c2VkIGluIGdyZWVkeS1lcHNpbG9uIHRvIGVlLiIsCiAgICApCiAgICBwX3RyYWluLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1hbm5lYWxpbmctc3RlcHMiLAogICAgICAgIHR5cGU9ZmxvYXQsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIG1ldGF2YXI9ImFzIiwKICAgICAgICBoZWxwPSJmbG9hdDogZGVjYXkgZXBzaWxvbiBvdmVyIGFzIHN0ZXBzLiIsCiAgICApCiAgICBwX3RyYWluLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS11cGRhdGVzIiwKICAgICAgICB0eXBlPWludCwKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgbWV0YXZhcj0ibiIsCiAgICAgICAgaGVscD0iaW50OiAgIHRyYWluIG1vZGVsIGZvciB1cCB0byBuIHVwZGF0ZXMiLAogICAgKQogICAgcF90cmFpbi5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tcmVuZGVyLWludGVydmFsIiwKICAgICAgICB0eXBlPWludCwKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgbWV0YXZhcj0iaSIsCiAgICAgICAgaGVscD0iaW50OiAgIGlmIGkgPiAwLCByZW5kZXIgZXZlcnkgaTp0aCBlcGlzb2RlIiwKICAgICkKICAgIHBfdHJhaW4uYWRkX2FyZ3VtZW50KAogICAgICAgICItLXNhdmUtaW50ZXJ2YWwiLAogICAgICAgIHR5cGU9aW50LAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBtZXRhdmFyPSJqIiwKICAgICAgICBoZWxwPSJpbnQ6ICAgaWYgaiA+IDAsIHNhdmUgbW9kZWwgZXZlcnkgajp0aCBlcGlzb2RlIiwKICAgICkKICAgIHBfdHJhaW4uYWRkX2FyZ3VtZW50KAogICAgICAgICItLW1vZGVsLW5hbWUiLAogICAgICAgIHR5cGU9c3RyLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBtZXRhdmFyPSJuYW1lIiwKICAgICAgICBoZWxwPSJzdHI6ICAgc2F2ZSBtb2RlbCBhcyBtb2RlbHMvPG5hbWU+LnB0IHdoZW4gKGlmKSB0aGUgbW9kZWwgaXMgc2F2ZWQiLAogICAgKQogICAgcF90cmFpbi5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tc2VlZCIsIHR5cGU9aW50LCBkZWZhdWx0PU5vbmUsIG1ldGF2YXI9InNlZWQiLCBoZWxwPSJpbnQ6ICAgc2VlZCB1c2VkIGZvciBhbGwgcmFuZG9tbmVzcyIKICAgICkKICAgIHBfdHJhaW4uYWRkX2FyZ3VtZW50KAogICAgICAgICItLWZwcyIsCiAgICAgICAgdHlwZT1pbnQsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIG1ldGF2YXI9ImZwcyIsCiAgICAgICAgaGVscD0iaW50OiAgIHJlbmRlcmluZyBkZWxheSA9IDEvZnBzICsgdGltZSB0byBjb21wdXRlIG5leHQgYWN0aW9uIiwKICAgICkKICAgIHBfdHJhaW4uYWRkX2FyZ3VtZW50KCItLXRlbnNvcmJvYXJkIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iYm9vbDogIHVzZSB0ZW5zb3Jib2FyZCIpCiAgICBwX3RyYWluLnNldF9kZWZhdWx0cyhhY3Rpb249InRyYWluIikKCiAgICBwX3Zpc3VhbGl6ZSA9IHN1YnAuYWRkX3BhcnNlcigidmlzdWFsaXplIikKICAgIHBfdmlzdWFsaXplLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1hbGdvcml0aG0iLAogICAgICAgIHR5cGU9c3RyLAogICAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgICAgbWV0YXZhcj0iYWxnbyIsCiAgICAgICAgaGVscD0ic3RyOiAgIHJlaW5mb3JjZW1lbnQgbGVhcm5pbmcgYWxnb3JpdGhtIGFsZ28gdG8gdXNlLiIsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICkKICAgIHBfdmlzdWFsaXplLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1lbnZpcm9ubWVudCIsCiAgICAgICAgdHlwZT1zdHIsCjx8ZmltX2VuZHw+"]
["8fc2718e33e38ca6ef6b8f929aaee76347ee14c1-2","8fc2718e33e38ca6ef6b8f929aaee76347ee14c1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCgpmcm9tIHB5em9vcGxhLmJhc2UgaW1wb3J0IEJhc2VQdXJjaGFzZVNlYXJjaApmcm9tIHB5em9vcGxhLnV0aWxzIGltcG9ydCBoZWFkZXJzCjx8ZmltX2hvbGV8PgogICAgU2VhcmNoIGZvciBwcm9wZXJ0aWVzIGZvciBzYWxlIGZyb20gaHR0cHM6Ly93d3cuem9vcGxhLmNvLnVrL2Zvci1zYWxlL3Byb3BlcnR5L3tsb2NhdGlvbn0KCiAgICBkaXN0YW5jZTogezAsIDAuMjUsIDAuNSwgMSwgMywgNSwgMTAsIDE1LCAyMCwgMzAsIDQwfQogICAgcHJvcGVydHlfdHlwZToge3Byb3BlcnR5LCBob3VzZXMsIGZsYXRzLCBmYXJtcy1sYW5kfQogICAgcmVzdWx0c19zb3J0OiB7bmV3ZXN0X2xpc3RpbmdzLCBoaWdoZXN0X3ByaWNlLCBsb3dlc3RfcHJpY2UsIG1vc3RfcmVkdWNlZCwgbW9zdF9wb3B1bGFyfQogICAgIiIiCgogICAgc2x1ZyA9ICdmb3Itc2FsZScKCiAgICBkZWYgX19pbml0X18oc2VsZiwgbG9jYXRpb24sIHBhZ2Vfc2l6ZT0xMDAsIGRpc3RhbmNlPU5vbmUsIG1pbl9wcmljZT1Ob25lLCBtYXhfcHJpY2U9Tm9uZSwgbWluX2JlZHM9Tm9uZSwKICAgICAgICAgICAgICAgICBtYXhfYmVkcz1Ob25lLCBwcm9wZXJ0eV90eXBlPSdwcm9wZXJ0eScsIGFkZGVkPU5vbmUsIHJlc3VsdHNfc29ydD1Ob25lLCBpbmNsdWRlX3NvbGQ9VHJ1ZSwKICAgICAgICAgICAgICAgICBoYXNfcGFya2luZ19nYXJhZ2U9Tm9uZSwgaGFzX2dhcmRlbj1Ob25lLCBoYXNfZmlyZXBsYWNlPU5vbmUsIGhhc193b29kX2Zsb29ycz1Ob25lLAogICAgICAgICAgICAgICAgIGhhc19iYWxjb255X3RlcnJhY2U9Tm9uZSwgaXNfcnVyYWxfc2VjbHVkZWQ9Tm9uZSwgaGFzX3BvcnRlcl9zZWN1cml0eT1Ob25lLCBjaGFpbl9mcmVlPUZhbHNlLAogICAgICAgICAgICAgICAgIHJlZHVjZWRfcHJpY2Vfb25seT1GYWxzZSwgbmV3X2J1aWxkPU5vbmUsIGlzX3NoYXJlZF9vd25lcnNoaXA9RmFsc2UsIGlzX2F1Y3Rpb249RmFsc2UsCiAgICAgICAgICAgICAgICAgaXNfcmV0aXJlbWVudF9ob21lPUZhbHNlLCBidXllcl9pbmNlbnRpdmU9Tm9uZSwga2V5d29yZHM9Tm9uZSk6CiAgICAgICAgc2VsZi5kaXN0YW5jZSA9IGRpc3RhbmNlCiAgICAgICAgc2VsZi5taW5fcHJpY2UgPSBtaW5fcHJpY2UKICAgICAgICBzZWxmLm1heF9wcmljZSA9IG1heF9wcmljZQogICAgICAgIHNlbGYucHJvcGVydHlfdHlwZSA9IHByb3BlcnR5X3R5cGUKICAgICAgICBzZWxmLm1pbl9iZWRzID0gbWluX2JlZHMKICAgICAgICBzZWxmLm1heF9iZWRzID0gbWF4X2JlZHMKICAgICAgICBzZWxmLmFkZGVkID0gYWRkZWQKICAgICAgICBzZWxmLnJlc3VsdHNfc29ydCA9IHJlc3VsdHNfc29ydAogICAgICAgIHNlbGYuaW5jbHVkZV9zb2xkID0gaW5jbHVkZV9zb2xkCiAgICAgICAgc2VsZi5oYXNfcGFya2luZ19nYXJhZ2UgPSAnaGFzX3BhcmtpbmdfZ2FyYWdlJyBpZiBoYXNfcGFya2luZ19nYXJhZ2UgZWxzZSBOb25lCiAgICAgICAgc2VsZi5oYXNfZ2FyZGVuID0gJ2hhc19nYXJkZW4nIGlmIGhhc19nYXJkZW4gZWxzZSBOb25lCiAgICAgICAgc2VsZi5oYXNfZmlyZXBsYWNlID0gJ2hhc19maXJlcGxhY2UnIGlmIGhhc19maXJlcGxhY2UgZWxzZSBOb25lCiAgICAgICAgc2VsZi5oYXNfd29vZF9mbG9vcnMgPSAnaGFzX3dvb2RfZmxvb3JzJyBpZiBoYXNfd29vZF9mbG9vcnMgZWxzZSBOb25lCiAgICAgICAgc2VsZi5oYXNfYmFsY29ueV90ZXJyYWNlID0gJ2hhc19iYWxjb255X3RlcnJhY2UnIGlmIGhhc19iYWxjb255X3RlcnJhY2UgZWxzZSBOb25lCiAgICAgICAgc2VsZi5pc19ydXJhbF9zZWNsdWRlZCA9ICdpc19ydXJhbF9zZWNsdWRlZCcgaWYgaXNfcnVyYWxfc2VjbHVkZWQgZWxzZSBOb25lCiAgICAgICAgc2VsZi5oYXNfcG9ydGVyX3NlY3VyaXR5ID0gJ2hhc19wb3J0ZXJfc2VjdXJpdHknIGlmIGhhc19wb3J0ZXJfc2VjdXJpdHkgZWxzZSBOb25lCiAgICAgICAgc2VsZi5jaGFpbl9mcmVlID0gc3RyKGNoYWluX2ZyZWUpLmxvd2VyKCkgaWYgY2hhaW5fZnJlZSBlbHNlIE5vbmUKICAgICAgICBzZWxmLnJlZHVjZWRfcHJpY2Vfb25seSA9IHN0cihyZWR1Y2VkX3ByaWNlX29ubHkpLmxvd2VyKCkgaWYgcmVkdWNlZF9wcmljZV9vbmx5IGVsc2UgTm9uZQogICAgICAgIHNlbGYubmV3X2J1aWxkID0gbmV3X2J1aWxkCiAgICAgICAgc2VsZi5pc19zaGFyZWRfb3duZXJzaGlwID0gc3RyKGlzX3NoYXJlZF9vd25lcnNoaXApLmxvd2VyKCkgaWYgaXNfc2hhcmVkX293bmVyc2hpcCBlbHNlIE5vbmUKICAgICAgICBzZWxmLmlzX2F1Y3Rpb24gPSBzdHIoaXNfYXVjdGlvbikubG93ZXIoKSBpZiBpc19hdWN0aW9uIGVsc2UgTm9uZQogICAgICAgIHNlbGYuaXNfcmV0aXJlbWVudF9ob21lID0gc3RyKGlzX3JldGlyZW1lbnRfaG9tZSkubG93ZXIoKSBpZiBpc19yZXRpcmVtZW50X2hvbWUgZWxzZSBOb25lCiAgICAgICAgc2VsZi5idXllcl9pbmNlbnRpdmUgPSAnaGVscF90b19idXknIGlmIGJ1eWVyX2luY2VudGl2ZSBlbHNlIE5vbmUKICAgICAgICBzZWxmLmtleXdvcmRzID0gJyJ7fSInLmZvcm1hdChrZXl3b3JkcykgaWYga2V5d29yZHMgZWxzZSBOb25lCiAgICAgICAgc3VwZXIoRm9yU2FsZVNlYXJjaCwgc2VsZikuX19pbml0X18obG9jYXRpb24sIHBhZ2Vfc2l6ZSkKCiAgICBkZWYgX2dldF9odG1sKHNlbGYsIHBhZ2Vfbm89MSk6CgogICAgICAgIGlmIHNlbGYuYWRkZWQgPT0gMToKICAgICAgICAgICAgYWRkZWQgPSAnMjRfaG91cnMnCiAgICAgICAgZWxpZiBzZWxmLmFkZGVkOgogICAgICAgICAgICBhZGRlZCA9ICd7fV9kYXlzJy5mb3JtYXQoc2VsZi5hZGRlZCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBhZGRlZCA9IE5vbmUKCiAgICAgICAgbmV3X2hvbWVzID0gTm9uZQogICAgICAgIGlmIHNlbGYubmV3X2J1aWxkIGlzIE5vbmU6CiAgICAgICAgICAgIHBhc3MKICAgICAgICBlbGlmIHNlbGYubmV3X2J1aWxkOgogICAgICAgICAgICBzZWxmLnNsdWcgPSAnbmV3LWhvbWVzJwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG5ld19ob21lcyA9ICdleGNsdWRlJwoKICAgICAgICBwYXlsb2FkID0geydyYWRpdXMnOiBzZWxmLmRpc3RhbmNlLCAncHJpY2VfbWluJzogc2VsZi5taW5fcHJpY2UsICdwcmljZV9tYXgnOiBzZWxmLm1heF9wcmljZSwKICAgICAgICAgICAgICAgICAgICdiZWRzX21pbic6IHNlbGYubWluX2JlZHMsICdiZWRzX21heCc6IHNlbGYubWF4X2JlZHMsICdhZGRlZCc6IGFkZGVkLAogICAgICAgICAgICAgICAgICAgJ3Jlc3VsdHNfc29ydCc6IHNlbGYucmVzdWx0c19zb3J0LCAnaW5jbHVkZV9zb2xkJzogc3RyKHNlbGYuaW5jbHVkZV9zb2xkKS5sb3dlcigpLAogICAgICAgICAgICAgICAgICAgJ3BhZ2Vfc2l6ZSc6IHNlbGYucGFnZV9zaXplLCAncG4nOiBwYWdlX25vLAogICAgICAgICAgICAgICAgICAgJ2ZlYXR1cmUnOiBbc2VsZi5oYXNfcGFya2luZ19nYXJhZ2UsIHNlbGYuaGFzX2dhcmRlbiwgc2VsZi5oYXNfZmlyZXBsYWNlLCBzZWxmLmhhc193b29kX2Zsb29ycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFzX2JhbGNvbnlfdGVycmFjZSwgc2VsZi5pc19ydXJhbF9zZWNsdWRlZCwgc2VsZi5oYXNfcG9ydGVyX3NlY3VyaXR5XSwKICAgICAgICAgICAgICAgICAgICdjaGFpbl9mcmVlJzogc2VsZi5jaGFpbl9mcmVlLCAncmVkdWNlZF9wcmljZV9vbmx5Jzogc2VsZi5yZWR1Y2VkX3ByaWNlX29ubHksCiAgICAgICAgICAgICAgICAgICAnbmV3X2hvbWVzJzogbmV3X2hvbWVzLCAnaXNfc2hhcmVkX293bmVyc2hpcCc6IHNlbGYuaXNfc2hhcmVkX293bmVyc2hpcCwKICAgICAgICAgICAgICAgICAgICdpc19hdWN0aW9uJzogc2VsZi5pc19hdWN0aW9uLCAnaXNfcmV0aXJlbWVudF9ob21lJzogc2VsZi5pc19yZXRpcmVtZW50X2hvbWUsCiAgICAgICAgICAgICAgICAgICAnYnV5ZXJfaW5jZW50aXZlJzogc2VsZi5idXllcl9pbmNlbnRpdmUsICdrZXl3b3Jkcyc6IHNlbGYua2V5d29yZHN9CiAgICAgICAgdXJsID0gJ2h0dHBzOi8vd3d3Lnpvb3BsYS5jby51ay97fS97fS97fS8nLmZvcm1hdChzZWxmLnNsdWcsIHNlbGYucHJvcGVydHlfdHlwZSwgc2VsZi5sb2NhdGlvbikKCiAgICAgICAgcmV0dXJuIHJlcXVlc3RzLmdldCh1cmwsIHBhcmFtcz1wYXlsb2FkLCBoZWFkZXJzPWhlYWRlcnMpCjx8ZmltX3N1ZmZpeHw+CgoKY2xhc3MgRm9yU2FsZVNlYXJjaChCYXNlUHVyY2hhc2VTZWFyY2gpOgogICAgIiIiCjx8ZmltX2VuZHw+"]
["41b26d90dff3a5165b4a66ae7f5b4b6e4530dd92-5","41b26d90dff3a5165b4a66ae7f5b4b6e4530dd92","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbjIuNQojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoKCl9fYXV0aG9yX18gPSAnUXVpbnRvbiBXZWVuaW5rJwoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwgZmluZF9wYWNrYWdlcwoKc2V0dXAoCjx8ZmltX2VuZHw+"]
["a477f734b2b61ee7f7e529a84a8ba67bc8e27744-3","a477f734b2b61ee7f7e529a84a8ba67bc8e27744","PHxmaW1fcHJlZml4fD4KZnJvbSBhMTBzZGsuY29tbW9uLkExMEJhc2VDbGFzcyBpbXBvcnQgQTEwQmFzZUNsYXNzCgoKY2xhc3MgU2FtcGxpbmdFbmFibGUoQTEwQmFzZUNsYXNzKToKICAgIAogICAgIiIiVGhpcyBjbGFzcyBkb2VzIG5vdCBzdXBwb3J0IENSVUQgT3BlcmF0aW9ucyBwbGVhc2UgdXNlIHBhcmVudC4KCiAgICA6cGFyYW0gY291bnRlcnMxOiB7ImVudW0iOiBbImFsbCIsICJLZXJiZXJvcy1yZXF1ZXN0LXNlbmQiLCAiS2VyYmVyb3MtcmVzcG9uc2UtZ2V0IiwgIktlcmJlcm9zLXRpbWVvdXQtZXJyb3IiLCAiS2VyYmVyb3Mtb3RoZXItZXJyb3IiLCAiTlRMTS1BdXRoZW50aWNhdGlvbi1zdWNjZXNzIiwgIk5UTE0tQXV0aGVudGljYXRpb24tZmFpbHVyZSIsICJOVExNLXByb3RvLW5lZ290aWF0aW9uLXN1Y2Nlc3MiLCAiTlRMTS1wcm90by1uZWdvdGlhdGlvbi1mYWlsdXJlIiwgIk5UTE0tc2Vzc2lvbi1zZXR1cC1zdWNjZXNzIiwgIk5UTE0tc2Vzc2lvbi1zZXR1cC1mYWlsZWQiXSwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIidhbGwnOiBhbGw7ICdLZXJiZXJvcy1yZXF1ZXN0LXNlbmQnOiBUb3RhbCBLZXJiZXJvcyBSZXF1ZXN0OyAnS2VyYmVyb3MtcmVzcG9uc2UtZ2V0JzogVG90YWwgS2VyYmVyb3MgUmVzcG9uc2U7ICdLZXJiZXJvcy10aW1lb3V0LWVycm9yJzogVG90YWwgS2VyYmVyb3MgVGltZW91dDsgJ0tlcmJlcm9zLW90aGVyLWVycm9yJzogVG90YWwgS2VyYmVyb3MgT3RoZXIgRXJyb3I7ICdOVExNLUF1dGhlbnRpY2F0aW9uLXN1Y2Nlc3MnOiBUb3RhbCBOVExNIEF1dGhlbnRpY2F0aW9uIFN1Y2Nlc3M7ICdOVExNLUF1dGhlbnRpY2F0aW9uLWZhaWx1cmUnOiBUb3RhbCBOVExNIEF1dGhlbnRpY2F0aW9uIEZhaWx1cmU7ICdOVExNLXByb3RvLW5lZ290aWF0aW9uLXN1Y2Nlc3MnOiBUb3RhbCBOVExNIFByb3RvY29sIE5lZ290aWF0aW9uIFN1Y2Nlc3M7ICdOVExNLXByb3RvLW5lZ290aWF0aW9uLWZhaWx1cmUnOiBUb3RhbCBOVExNIFByb3RvY29sIE5lZ290aWF0aW9uIEZhaWx1cmU7ICdOVExNLXNlc3Npb24tc2V0dXAtc3VjY2Vzcyc6IFRvdGFsIE5UTE0gU2Vzc2lvbiBTZXR1cCBTdWNjZXNzOyAnTlRMTS1zZXNzaW9uLXNldHVwLWZhaWxlZCc6IFRvdGFsIE5UTE0gU2Vzc2lvbiBTZXR1cCBGYWlsdXJlOyAiLCAiZm9ybWF0IjogImVudW0ifQogICAgOnBhcmFtIERldmljZVByb3h5OiBUaGUgZGV2aWNlIHByb3h5IGZvciBSRVNUIG9wZXJhdGlvbnMgYW5kIHNlc3Npb24gaGFuZGxpbmcuIFJlZmVyIHRvIGBjb21tb24vZGV2aWNlX3Byb3h5LnB5YAoKICAgIAoKICAgIAogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgogICAgICAgIHNlbGYuRVJST1JfTVNHID0gIiIKICAgICAgICAKICAgICAgICBzZWxmLmJfa2V5ID0gInNhbXBsaW5nLWVuYWJsZSIKICAgICAgICBzZWxmLkRldmljZVByb3h5ID0gIiIKICAgICAgICBzZWxmLmNvdW50ZXJzMSA9ICIiCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZm9yIGtleXMsIHZhbHVlIGluIGt3YXJncy5pdGVtcygpOgogICAgICAgICAgICBzZXRhdHRyKHNlbGYsa2V5cywgdmFsdWUpCgoKPHxmaW1fZW5kfD4="]
["2d27b2795740073b4d1214cedd36eba9fdb15ed0-3","2d27b2795740073b4d1214cedd36eba9fdb15ed0","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKdXJscGF0dGVybnMgPSBwYXR0ZXJucygnJywKICAgICMgRXhhbXBsZXM6CiAgICAjIHVybChyJ14kJywgJ3dlYi52aWV3cy5ob21lJywgbmFtZT0naG9tZScpLAogICAgIyBhbHdheXMgZ2V0IHRoZSBmaXJzdCByZWNvcmQKICAgIHVybChyJ15tZW1iZXIvJywgaW5jbHVkZSgnd2ViLmFwcHMubWVtYmVyLnVybHMnKSksCikKPHxmaW1fc3VmZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmZyb20gZGphbmdvLmNvbmYudXJscyBpbXBvcnQgcGF0dGVybnMsIGluY2x1ZGUsIHVybApmcm9tIGRqYW5nby52aWV3cy5nZW5lcmljIGltcG9ydCBUZW1wbGF0ZVZpZXcKPHxmaW1fZW5kfD4="]
["704b478b9a9d27e3bc3a9d0a5c2b0a0eb9c5ce93-1","704b478b9a9d27e3bc3a9d0a5c2b0a0eb9c5ce93","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMTggQXZhbmFkZQojIEF1dGhvcjogVGhvciBTY2h1ZWxlcgojCiMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQojIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCiMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwojIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgojCiMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KIwojIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgojIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCiMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgojIFRIRSBTT0ZUV0FSRS4KIwojIHB5bGludDogZGlzYWJsZT1DMDEwMwoiIiIKICAgIEltcGxlbWVudHMgYSBiYXNpYyB3cmFwcGVyIGZvciBhIHNlcnZvCiIiIgppbXBvcnQgbG9nZ2luZwppbXBvcnQgdGltZQppbXBvcnQgbWF0aApmcm9tIHR5cGluZyBpbXBvcnQgVHVwbGUKZnJvbSAuc2Vydm9fYXR0cmlidXRlcyBpbXBvcnQgU2Vydm9BdHRyaWJ1dGVzCmZyb20gLm1pdXplaV9zZzkwX2F0dHJpYnV0ZXMgaW1wb3J0IE1pdXplaVNHOTBBdHRyaWJ1dGVzCgpjbGFzcyBTZXJ2byhvYmplY3QpOgogICAgIiIiUmVwcmVzZW50cyBhIHNlcnZvIG9uIHRoZSBjb250cm9sbGVyLiIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250cm9sbGVyLCBjaGFubmVsOiBpbnQsIGF0dHJpYnV0ZXM6IFNlcnZvQXR0cmlidXRlcyA9IE1pdXplaVNHOTBBdHRyaWJ1dGVzKCksIG1vdmVfdG9fbmV1dHJhbDogYm9vbCA9IEZhbHNlKToKICAgICAgICAiIiJfX2luaXRfXwogICAgICAgIEluaXRpYWxpemUgU2Vydm8KICAgICAgICAgICAgQXR0cmlidXRlczoKICAgICAgICA6cGFyYW0gY29udHJvbGxlcjogVGhlIGNvbnRyb2xsZXIgaG9zdGluZyB0aGUgc2Vydm8uCiAgICAgICAgOnR5cGUgY29udHJvbGxlcjogUENBOTY4NQoKICAgICAgICA6cGFyYW0gY2hhbm5lbDogVGhlIGNoYW5uZWwgb24gd2hpY2ggdGhlIHNlcnZvIGlzIG9wZXJhdGluZy4KICAgICAgICA6dHlwZSBjaGFubmVsOiBpbnQKCiAgICAgICAgOnBhcmFtIGF0dHJpYnV0ZXM6IFRoZSBzZXJ2byBhdHRyaWJ1dGUgKG1pbi9tYXgvbmV1dHJhbCBwdWxzZXMgYW5kIGFuZ2xlcykuCiAgICAgICAgOnR5cGUgYXR0cmlidXRlczogU2Vydm9BdHRyaWJ1dGVzCgogICAgICAgIDpwYXJhbSBtb3ZlX3RvX25ldXRyYWw6IE1vdmUgdGhlIHNlcnZvIHRvIHRoZSBuZXV0cmFsIHBvc2l0aW9uIGlmIFRydWUKICAgICAgICA6dHlwZSBtb3ZlX3RvX25ldXRyYWw6IGJvb2wKCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5fbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2NvbnRyb2xsZXIuc2Vydm8nKQogICAgICAgIHNlbGYuX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyCiAgICAgICAgc2VsZi5fY2hhbm5lbCA9IGNoYW5uZWwKICAgICAgICBzZWxmLl9hdHRyaWJ1dGVzID0gYXR0cmlidXRlcwogICAgICAgIGlmIHNlbGYuX2F0dHJpYnV0ZXMgaXMgTm9uZTogCiAgICAgICAgICAgIHNlbGYuX2F0dHJpYnV0ZXMgPSBNaXV6ZWlTRzkwQXR0cmlidXRlcygpCiAgICAgICAgICAgIHNlbGYuX2xvZ2dlci53YXJuaW5nKCJObyBzZXJ2byBhdHRyaWJ1dGVzIHNwZWNpZmllZC4gVXNpbmcgTWl1emVpIFNHOTAgYXMgZmFsbGJhY2siKQoKICAgICAgICBzZWxmLl90aWNrcyA9IDAKICAgICAgICBzZWxmLl9hbmdsZSA9IDAKICAgICAgICBzZWxmLl9wdWxzZSA9IDAKCiAgICAgICAgI2NhbHVjbGF0ZSBib3VuZGFyeSB0aWNrcyBmb3Igc2Vydm8KICAgICAgICBzZWxmLl9zZXJ2b19taW4gPSBzZWxmLl9jYWxjdWxhdGVfc2Vydm9fdGlja3NfZnJvbV9wdWxzZShzZWxmLl9hdHRyaWJ1dGVzLm1pbl9wdWxzZSkKICAgICAgICBzZWxmLl9zZXJ2b19tYXggPSBzZWxmLl9jYWxjdWxhdGVfc2Vydm9fdGlja3NfZnJvbV9wdWxzZShzZWxmLl9hdHRyaWJ1dGVzLm1heF9wdWxzZSkKICAgICAgICBzZWxmLl9zZXJ2b19uZXV0cmFsID0gc2VsZi5fY2FsY3VsYXRlX3NlcnZvX3RpY2tzX2Zyb21fcHVsc2Uoc2VsZi5fYXR0cmlidXRlcy5uZXV0cmFsX3B1bHNlKQogICAgICAgIAogICAgICAgICNpbml0aWFsaXplIHNlcnZvCiAgICAgICAgaWYgbW92ZV90b19uZXV0cmFsIGlzIFRydWU6IHNlbGYuc2V0X2FuZ2xlKHNlbGYuX2F0dHJpYnV0ZXMubmV1dHJhbF9hbmdsZSkKICAgICAgICAKICAgIEBwcm9wZXJ0eQogICAgZGVmIGFuZ2xlKHNlbGYpIC0+IGZsb2F0OgogICAgICAgICIiIkdldHMgdGhlIGN1cnJlbnQgYW5nbGUgb2YgdGhlIHNlcnZvLgoKICAgICAgICA6cmV0dXJuOiBUaGUgY3VycmVudCBzZXJ2byBhbmdsZS4KICAgICAgICA6cnR5cGU6IGZsb2F0CiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuX2FuZ2xlCgogICAgQHByb3BlcnR5CiAgICBkZWYgY2hhbm5lbChzZWxmKSAtPiBpbnQ6CiAgICAgICAgIiIiR2V0cyB0aGUgY2hhbm5lbCBmb3IgdGhlIHNlcnZvLgoKICAgICAgICA6cmV0dXJuOiBUaGUgc2Vydm8gY2hhbm5lbC4KICAgICAgICA6cnR5cGU6IGludAogICAgICAgICIiIgogICAgICAgIHJldHVybiBzZWxmLl9jaGFubmVsCgogICAgQHByb3BlcnR5CiAgICBkZWYgcHVsc2Uoc2VsZikgLT4gZmxvYXQ6CiAgICAgICAgIiIiR2V0cyB0aGUgY3VycmVudCBwdWxzZSBsZW5naHQgb2YgdGhlIHNlcnZvLgoKICAgICAgICA6cmV0dXJuOiBUaGUgY3VycmVudCBzZXJ2byBwdWxzZSBsZW5naHQuCiAgICAgICAgOnJ0eXBlOiBmbG9hdAogICAgICAgICIiIgogICAgICAgIHJldHVybiBzZWxmLl9wdWxzZQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIHRpY2tzKHNlbGYpIC0+IGludDoKICAgICAgICAiIiJHZXRzIHRoZSBjdXJyZW50IG51bWJlciBvZiB0aWNrcyBvbiB0aGUgc2Vydm8uCgogICAgICAgIDpyZXR1cm46IFRoZSBjdXJyZW50IHNlcnZvIHRpY2tzLgogICAgICAgIDpydHlwZTogaW50CiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuX3RpY2tzCgogICAgZGVmIF9jYWxjdWxhdGVfc2Vydm9fYW5nbGVfZnJvbV90aWNrcyhzZWxmLCB0aWNrczppbnQpIC0+IGZsb2F0OgogICAgICAgICIiImNhbGN1bGF0ZV9zZXJ2b19hbmdsZV9mcm9tX3RpY2tzCjx8ZmltX2hvbGV8PgoKICAgICAgICA6cmV0dXJuOiBUaGUgYW5nbGUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgdGlja3MgZm9yIHRoaXMgc2Vydm8KICAgICAgICA6cnR5cGU6IGZsb2F0CiAgICAgICAgIiIiICAgICAgCiAgICAgICAgYW5nbGUgPSBzZWxmLl9hdHRyaWJ1dGVzLm5ldXRyYWxfYW5nbGUKICAgICAgICBwdWxzZSA9IHNlbGYuX2NhbGN1bGF0ZV9zZXJ2b19wdWxzZV9mcm9tX3RpY2tzKHRpY2tzKQogICAgICAgIGlmIHB1bHNlID09IHNlbGYuX2F0dHJpYnV0ZXMubmV1dHJhbF9wdWxzZTogCiAgICAgICAgICAgIHBhc3MKICAgICAgICBlbGlmIHB1bHNlID4gc2VsZi5fYXR0cmlidXRlcy5uZXV0cmFsX3B1bHNlOgogICAgICAgICAgICBhbmdsZSArPSAoKHB1bHNlIC0gc2VsZi5fYXR0cmlidXRlcy5uZXV0cmFsX3B1bHNlKSAqIChzZWxmLl9hdHRyaWJ1dGVzLm1heF9hbmdsZSAtIHNlbGYuX2F0dHJpYnV0ZXMubmV1dHJhbF9hbmdsZSkpIC8gXAogICAgICAgICAgICAgICAgKHNlbGYuX2F0dHJpYnV0ZXMubWF4X3B1bHNlIC0gc2VsZi5fYXR0cmlidXRlcy5uZXV0cmFsX3B1bHNlKQogICAgICAgIGVsaWYgcHVsc2UgPCBzZWxmLl9hdHRyaWJ1dGVzLm5ldXRyYWxfcHVsc2U6CiAgICAgICAgICAgIGFuZ2xlICs9ICgoc2VsZi5fYXR0cmlidXRlcy5uZXV0cmFsX3B1bHNlIC0gcHVsc2UpICogKHNlbGYuX2F0dHJpYnV0ZXMubWluX2FuZ2xlIC0gc2VsZi5fYXR0cmlidXRlcy5uZXV0cmFsX2FuZ2xlKSkgLyBcCiAgICAgICAgICAgICAgICAoc2VsZi5fYXR0cmlidXRlcy5uZXV0cmFsX3B1bHNlIC0gc2VsZi5fYXR0cmlidXRlcy5taW5fcHVsc2UpCiAgICAgICAgcmV0dXJuIGFuZ2xlCgogICAgZGVmIF9jYWxjdWxhdGVfc2Vydm9fcHVsc2VfZnJvbV90aWNrcyhzZWxmLCB0aWNrczppbnQpIC0+IGZsb2F0OgogICAgICAgICIiIl9jYWxjdWxhdGVfc2Vydm9fcHVsc2VfZnJvbV90aWNrcwogICAgICAgIENhbGN1bGF0ZSB0aGUgc2Vydm8gcHVsc2UgZnJvbSB0aGUgdGlja3MuIAoKICAgICAgICA6cGFyYW0gdGlja3M6ICAgVGhlIG51bWJlciBvZiB0aWNrcy4KICAgICAgICA6dHlwZSB0aWNrczogICAgaW50CgogICAgICAgIDpyZXR1cm46IFRoZSBwdWxzZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB0aWNrcyBmb3IgdGhpcyBzZXJ2bwogICAgICAgIDpydHlwZTogZmxvYXQKICAgICAgICAiIiIKICAgICAgICBwdWxzZV9sZW5ndGggPSAxMDAwMDAwLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDEsMDAwLDAwMCB1cyBwZXIgc2Vjb25kCiAgICAgICAgcHVsc2VfbGVuZ3RoIC89IGZsb2F0KHNlbGYuX2NvbnRyb2xsZXIuZnJlcXVlbmN5KSAgICAgIyBzaWduYWwgZnJlcXVlbmN5CiAgICAgICAgcHVsc2VfbGVuZ3RoIC89IGZsb2F0KHNlbGYuX2NvbnRyb2xsZXIucmVzb2x1dGlvbikgICAgIyBwdWxzZSByZXNvbHV0aW9uCiAgICAgICAgcHVsc2UgPSBmbG9hdCh0aWNrcykqcHVsc2VfbGVuZ3RoLzEwMDAuMAogICAgICAgIGlmIHB1bHNlID4gc2VsZi5fYXR0cmlidXRlcy5tYXhfcHVsc2U6IHB1bHNlID0gc2VsZi5fYXR0cmlidXRlcy5tYXhfcHVsc2UKICAgICAgICBpZiBwdWxzZSA8IHNlbGYuX2F0dHJpYnV0ZXMubWluX3B1bHNlOiBwdWxzZSA9IHNlbGYuX2F0dHJpYnV0ZXMubWluX3B1bHNlCiAgICAgICAgcmV0dXJuIHB1bHNlCgogICAgZGVmIF9jYWxjdWxhdGVfc2Vydm9fdGlja3NfZnJvbV9wdWxzZShzZWxmLCBwdWxzZTogZmxvYXQpIC0+IGludDoKICAgICAgICAiIiJjYWxjdWxhdGVfc2Vydm9fdGlja3NfZnJvbV9wdWxzZQogICAgICAgIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIG9uIHRpY2tzIHRvIGFjaGlldmUgYSBjZXJ0YWluIHB1bHNlLgogICAgICAgIAogICAgICAgIDpwYXJhbSBwdWxzZTogVGhlIGxlbmd0aCBvZiB0aGUgcHVsc2UgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgdGlja3MKICAgICAgICA6dHlwZSBwdWxzZTogZmxvYXQKCiAgICAgICAgOnJldHVybjogVGhlIG51bWJlciBvZiB0aWNrcyB0byBhY2hpZXZlIHRoZSBwdWxzZQogICAgICAgIDpydHlwZTogaW50CiAgICAgICAgIiIiCgogICAgICAgIGlmIHB1bHNlIDwgc2VsZi5fYXR0cmlidXRlcy5taW5fcHVsc2Ugb3IgcHVsc2UgPiBzZWxmLl9hdHRyaWJ1dGVzLm1heF9wdWxzZToKICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLndhcm5pbmcoZiJQdWxzZSB7cHVsc2V9IG91dCBvZiByYW5nZS4gTXVzdCBiZSBiZXR3ZWVuIHtzZWxmLl9hdHRyaWJ1dGVzLm1pbl9wdWxzZX0gYW5kIHtzZWxmLl9hdHRyaWJ1dGVzLm1heF9wdWxzZX0iKQogICAgICAgICAgICBpZiBwdWxzZSA8IHNlbGYuX2F0dHJpYnV0ZXMubWluX3B1bHNlOiBwdWxzZSA9IHNlbGYuX2F0dHJpYnV0ZXMubWluX3B1bHNlCiAgICAgICAgICAgIGlmIHB1bHNlID4gc2VsZi5fYXR0cmlidXRlcy5tYXhfcHVsc2U6IHB1bHNlID0gc2VsZi5fYXR0cmlidXRlcy5tYXhfcHVsc2UKCiAgICAgICAgcHVsc2VfbGVuZ3RoID0gMTAwMDAwMC4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAxLDAwMCwwMDAgdXMgcGVyIHNlY29uZAogICAgICAgIHB1bHNlX2xlbmd0aCAvPSBmbG9hdChzZWxmLl9jb250cm9sbGVyLmZyZXF1ZW5jeSkgICAgICMgc2lnbmFsIGZyZXF1ZW5jeQogICAgICAgIHB1bHNlX2xlbmd0aCAvPSBmbG9hdChzZWxmLl9jb250cm9sbGVyLnJlc29sdXRpb24pICAgICMgcHVsc2UgcmVzb2x1dGlvbgogICAgICAgIHB1bHNlICo9IDEwMDAuMAogICAgICAgIHB1bHNlIC8vPSBwdWxzZV9sZW5ndGgKICAgICAgICByZXR1cm4gaW50KHB1bHNlKQoKICAgIGRlZiBfY2FsY3VsYXRlX3NlcnZvX3RpY2tzX2Zyb21fYW5nbGUoc2VsZiwgYW5nbGU6IGZsb2F0KSAtPiBUdXBsZVtmbG9hdCwgaW50XToKICAgICAgICAiIiJfY2FsY3VsYXRlX3NlcnZvX3RpY2tzX2Zyb21fYW5nbGUKICAgICAgICBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBvbiB0aWNrcyB0byBhY2hpZXZlIGEgY2VydGFpbiBzZXJ2byBhbmdsZS4KICAgICAgICAKICAgICAgICA6cGFyYW0gYW5nbGU6IFRoZSBhbmdsZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSB0aWNrcwogICAgICAgIDp0eXBlIGFuZ2xlOiBmbG9hdAoKICAgICAgICA6cmV0dXJuOiBUaGUgbnVtYmVyIG9mIHRpY2tzIHRvIGFjaGlldmUgdGhlIGFuZ2xlIGFuZCB0aGUgY29ycmVzcG9uZGluZyBwdWxzZQogICAgICAgIDpydHlwZTogKGZsb2F0LCBpbnQpICAgICAgICAKICAgICAgICAiIiIKCiAgICAgICAgaWYgYW5nbGUgPCBzZWxmLl9hdHRyaWJ1dGVzLm1pbl9hbmdsZSBvciBhbmdsZSA+IHNlbGYuX2F0dHJpYnV0ZXMubWF4X2FuZ2xlOgogICAgICAgICAgICBzZWxmLl9sb2dnZXIud2FybmluZyhmIkFuZ2xlIHthbmdsZX0gb3V0IG9mIHJhbmdlLiBNdXN0IGJlIGJldHdlZW4ge3NlbGYuX2F0dHJpYnV0ZXMubWluX2FuZ2xlfSBhbmQge3NlbGYuX2F0dHJpYnV0ZXMubWF4X2FuZ2xlfSIpCiAgICAgICAgICAgIGlmIGFuZ2xlIDwgc2VsZi5fYXR0cmlidXRlcy5taW5fYW5nbGU6IGFuZ2xlID0gc2VsZi5fYXR0cmlidXRlcy5taW5fYW5nbGUKICAgICAgICAgICAgaWYgYW5nbGUgPiBzZWxmLl9hdHRyaWJ1dGVzLm1heF9hbmdsZTogYW5nbGUgPSBzZWxmLl9hdHRyaWJ1dGVzLm1heF9hbmdsZQoKICAgICAgICBwdWxzZSA9IHNlbGYuX2F0dHJpYnV0ZXMubmV1dHJhbF9wdWxzZQogICAgICAgIGlmIGFuZ2xlID09IHNlbGYuX2F0dHJpYnV0ZXMubmV1dHJhbF9hbmdsZTogcGFzcwogICAgICAgIGVsaWYgYW5nbGUgPiBzZWxmLl9hdHRyaWJ1dGVzLm5ldXRyYWxfYW5nbGU6CiAgICAgICAgICAgIHB1bHNlICs9ICgoYW5nbGUgLSBzZWxmLl9hdHRyaWJ1dGVzLm5ldXRyYWxfYW5nbGUpICogKHNlbGYuX2F0dHJpYnV0ZXMubWF4X3B1bHNlIC0gc2VsZi5fYXR0cmlidXRlcy5uZXV0cmFsX3B1bHNlKSkgLyBcCiAgICAgICAgICAgICAgICAoc2VsZi5fYXR0cmlidXRlcy5tYXhfYW5nbGUgLSBzZWxmLl9hdHRyaWJ1dGVzLm5ldXRyYWxfYW5nbGUpCiAgICAgICAgZWxpZiBhbmdsZSA8IHNlbGYuX2F0dHJpYnV0ZXMubmV1dHJhbF9hbmdsZToKICAgICAgICAgICAgcHVsc2UgLT0gKChhbmdsZSAtIHNlbGYuX2F0dHJpYnV0ZXMubmV1dHJhbF9hbmdsZSkgKiAoc2VsZi5fYXR0cmlidXRlcy5uZXV0cmFsX3B1bHNlIC0gc2VsZi5fYXR0cmlidXRlcy5taW5fcHVsc2UpKSAvIFwKICAgICAgICAgICAgICAgIChzZWxmLl9hdHRyaWJ1dGVzLm1pbl9hbmdsZSAtIHNlbGYuX2F0dHJpYnV0ZXMubmV1dHJhbF9hbmdsZSkKICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ0FuZ2xlICVmIC0+IHB1bHNlICVmJywgYW5nbGUsIHB1bHNlKQogICAgICAgIHJldHVybiBzZWxmLl9jYWxjdWxhdGVfc2Vydm9fdGlja3NfZnJvbV9wdWxzZShwdWxzZSksIHB1bHNlCgogICAgZGVmIHNldF9wdWxzZShzZWxmLCBwdWxzZTogZmxvYXQpOgogICAgICAgICIiInNldF9wdWxzZQogICAgICAgIFNldHMgdGhlIHNlcnZvIHRvIGEgY2VydGFpbiBwdWxzZSB3aWR0aC4KICAgICAgICAKICAgICAgICA6cGFyYW0gcHVsc2U6IFRoZSBkZXNpcmVkIHB1bHNlIGxlbmd0aAogICAgICAgIDp0eXBlIHB1bHNlOiBmbG9hdAogICAgICAgICIiIgogICAgICAgIHRpY2tzID0gc2VsZi5fY2FsY3VsYXRlX3NlcnZvX3RpY2tzX2Zyb21fcHVsc2UocHVsc2UpCiAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdDaGFubmVsICVkOiAlZiBwdWxzZSAtPiAlZCB0aWNrcycsIHNlbGYuX2NoYW5uZWwsIHB1bHNlLCB0aWNrcykKICAgICAgICBzZWxmLl9wdWxzZSA9IHB1bHNlCiAgICAgICAgc2VsZi5fdGlja3MgPSB0aWNrcwogICAgICAgIHNlbGYuX2FuZ2xlID0gc2VsZi5fY2FsY3VsYXRlX3NlcnZvX2FuZ2xlX2Zyb21fdGlja3ModGlja3MpCiAgICAgICAgc2VsZi5fY29udHJvbGxlci5zZXRfcHdtKHNlbGYuX2NoYW5uZWwsIDAsIHRpY2tzKQoKCiAgICBkZWYgc2V0X2FuZ2xlKHNlbGYsIGFuZ2xlOiBmbG9hdCk6CiAgICAgICAgIiIic2V0X2FuZ2xlCiAgICAgICAgU2V0cyB0aGUgc2Vydm8gdG8gYSBjZXJ0YWluIGFuZ2xlLgogICAgICAgIAogICAgICAgIDpwYXJhbSBhbmdsZTogVGhlIGRlc2lyZWQgYW5nbGUgdG8gYWNoaWV2ZS4gCiAgICAgICAgOnR5cGUgYW5nbGU6IGZsb2F0CiAgICAgICAgIiIiCiAgICAgICAgdGlja3MsIHB1bHNlID0gc2VsZi5fY2FsY3VsYXRlX3NlcnZvX3RpY2tzX2Zyb21fYW5nbGUoYW5nbGUpCiAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdDaGFubmVsICVkOiAlZiBhbmdsZSAtPiAlZCB0aWNrcycsIHNlbGYuX2NoYW5uZWwsIGFuZ2xlLCB0aWNrcykKICAgICAgICBzZWxmLl9hbmdsZSA9IGFuZ2xlCiAgICAgICAgc2VsZi5fdGlja3MgPSB0aWNrcwogICAgICAgIHNlbGYuX3B1bHNlID0gcHVsc2UKICAgICAgICBzZWxmLl9jb250cm9sbGVyLnNldF9wd20oc2VsZi5fY2hhbm5lbCwgMCwgdGlja3MpCgo8fGZpbV9zdWZmaXh8PgogICAgICAgIENhbGN1bGF0ZSB0aGUgc2Vydm8gYW5nbGUgZnJvbSB0aGUgdGlja3MuIAoKICAgICAgICA6cGFyYW0gdGlja3M6ICAgVGhlIG51bWJlciBvZiB0aWNrcy4KICAgICAgICA6dHlwZSB0aWNrczogICAgaW50Cjx8ZmltX2VuZHw+"]
["7a8b39d294371088a5815708b989b7295445a85f-2","7a8b39d294371088a5815708b989b7295445a85f","PHxmaW1fcHJlZml4fD4KZnJvbSBhd3NfY2RrIGltcG9ydCBjb3JlCmZyb20gYXdzX2Nkay5hd3NfczMgaW1wb3J0IEJ1Y2tldApmcm9tIGF3c19jZGsuYXdzX2xhbWJkYSBpbXBvcnQgRnVuY3Rpb24sIFJ1bnRpbWUsIENvZGUKCgpjbGFzcyBSYXdEYXRhU3RhY2soY29yZS5TdGFjayk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgc2NvcGU6IGNvcmUuQ29uc3RydWN0LCBpZDogc3RyKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKHNjb3BlLCBpZCkKCiAgICAgICAgcmF3X2J1Y2tldCA9IEJ1Y2tldChzZWxmLCAicmF3LWRhdGEtc3RhY2stMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRfbmFtZT0iY2Fpc2hlbi1yYXctZGF0YS1kZXYiKQoKICAgICAgICBoYW5kbGVyID0gRnVuY3Rpb24oc2VsZiwgImluaXRpYWwtbG9hZC1sYW1iZGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lPVJ1bnRpbWUuUFlUSE9OXzNfOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZT1Db2RlLmZyb21fYXNzZXQoIi4vYXJ0aWZhY3RzL2luaXRpYWxfbG9hZC56aXAiKSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyPSJ0ZXN0LmxhbWJkYV9oYW5kbGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ9ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJVQ0tFVCI6IHJhd19idWNrZXQuYnVja2V0X25hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQo8fGZpbV9lbmR8Pg=="]
["77daa7dfed43ecfb53901926dcc820f296d062d5-5","77daa7dfed43ecfb53901926dcc820f296d062d5","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGJlbnRvbWwKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHJhbmRvbQpmcm9tIGJlbnRvbWwuYXJ0aWZhY3QgaW1wb3J0IFBpY2tsZUFydGlmYWN0CmZyb20gYmVudG9tbC5oYW5kbGVycyBpbXBvcnQgSnNvbkhhbmRsZXIKCkBiZW50b21sLnZlcigxLCAwKQpjbGFzcyBSYW5kb21SZWNvbW1lbmRlcihiZW50b21sLkJlbnRvU2VydmljZSk6CgogICAgQGJlbnRvbWwuYXBpKEpzb25IYW5kbGVyKQogICAgZGVmIHJhbmsoc2VsZiwgc2FtcGxlKToKICAgICAgICBhcnRpY2xlcyA9IHNhbXBsZVsnQXJ0aWNsZV9MaXN0J10KICAgICAgICBzY29yZXMgPSBbcmFuZG9tLnJhbmRvbSgpIGZvciBhcnQgaW4gYXJ0aWNsZXNdCiAgICAgICAgb3V0cHV0ID0gW2l0ZW0gZm9yIHNjb3JlLCBpdGVtIGluIHNvcnRlZCh6aXAoc2NvcmVzLCBhcnRpY2xlcykscmV2ZXJzZT1UcnVlKV0KICAgICAgICAKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICJhcnRpY2xlcyI6IG91dHB1dCwKICAgICAgICAgICAgInNjb3JlcyI6IHNvcnRlZChzY29yZXMsIHJldmVyc2U9VHJ1ZSkKICAgICAgICB9Cjx8ZmltX2VuZHw+"]
["77db5b8c2c84c925d2bd0192fadc227f79b5d97a-1","77db5b8c2c84c925d2bd0192fadc227f79b5d97a","PHxmaW1fcHJlZml4fD4KZnJvbSBDb250ZW50RG93bmxvYWRlciBpbXBvcnQgQ29udGVudERvd25sb2FkZXIKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaWYgX19uYW1lX189PSdfX21haW5fXyc6CiAgICBDb250ZW50U3BpZGVyLnJ1bl90ZXh0X2Rvd25sb2FkaW5nKCkKPHxmaW1fZW5kfD4="]
["d8f21889c61a7da7277bb3a7798c2f5e7c0b8d6f-2","d8f21889c61a7da7277bb3a7798c2f5e7c0b8d6f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNvZGVjYWRlbXlsaWIzX3NlYWJvcm4KaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdApmcm9tIHNrbGVhcm4uc3ZtIGltcG9ydCBTVkMKZnJvbSBza2xlYXJuLm1vZGVsX3NlbGVjdGlvbiBpbXBvcnQgdHJhaW5fdGVzdF9zcGxpdApmcm9tIHN2bV92aXN1YWxpemF0aW9uIGltcG9ydCBkcmF3X2JvdW5kYXJ5CmZyb20gcGxheWVycyBpbXBvcnQgYWFyb25fanVkZ2UsIGpvc2VfYWx0dXZlLCBkYXZpZF9vcnRpegoKPHxmaW1faG9sZXw+CnByaW50KGFhcm9uX2p1ZGdlLnBsb3RfeikKcGx0LnNjYXR0ZXIoeCA9IGFhcm9uX2p1ZGdlLnBsb3RfeCx5ID0gYWFyb25fanVkZ2UucGx0X3osYz0gYWFyb25fanVkZ2UudHlwZSxjbmFwID0gcGx0LmNuLmNvb2x3YXJtLAphbHBoYSA9MC4yNSkKdHJhaW5pbmdfc2V0ICx2YWxpZGF0aW9uX3NldCA9IHRyYWluX3Rlc3Rfc3BsaXQoYWFyb25fanVkZ2UscmFuZG9tX3N0YXRlPTEpCmxhcmdlc3QgPSB7J3ZhbHVlJzowLCdnYW1tYSc6MSwnQyc6MX0KZm9yIGdhbW1hIGluIHJhbmdlKDEsMjApOgogIGZvciBDIGluIHJhbmdlKDEsMjApOgogICAgY2xhc3NpZmllciA9IFNWQyhrZXJuZWwgPSAncmJmJyxnYW1tYT0gZ2FtbWEsQykKICAgIGNsYXNzaWZpZXIuZml0KHRyYWluaW5nX3NldFtbJ3Bsb3RfeCcsJ3Bsb3RfeiddXQogICAgdHJhaW5pbmdfc2V0LnR5cGUpCiAgICBzY29yZSA9IGNsYXNzaWZpZXIuc2NvcmUoCiAgICAgIHZhbGlkYXRpb25fc2V0W1sncGxvdF94JywncGxvdF96J11dLHZhbGlkYXRpb25fc2V0LnR5cGUpCiAgaWYoc2NvcmU+bGFyZ2VzdFsndmFsdWUnXSk6CiAgICBsYXJnZXN0Wyd2YWx1ZSddLXNjb3JlCiAgICBsYXJnZXN0WydnYW1tYSddID0gZ2FtbWEKICAgIGxhcmdlc3RbJ0MnXSA9IEMgCiAgCgoKcHJpbnQobGFyZ2VzdCkKZHJhd19ib3VuZGFyeShheCxjbGFzc2lmaWVyKQpwbHQuc2hvdygpCjx8ZmltX3N1ZmZpeHw+CmZpZywgYXggPSBwbHQuc3VicGxvdHMoKQphYXJvbl9qdWRnZS50eXBlID0gYWFyb25fanVkZ2UudHlwZS5tYXAoeydTJzoxLCdCJzowfSkKYWFyb25fanVkZ2UgPSBhYXJvbl9qdWRnZS5kcm9wbmEoc3Vic2V0ID0gWyd0eXBlJywncGxvdF94JywncGxvdF96J10pCgo8fGZpbV9lbmR8Pg=="]
["77d937f5fe8f456ce8c1dad47016ca5b77808fdb-1","77d937f5fe8f456ce8c1dad47016ca5b77808fdb",{"$cut":{"chars":21676,"head":"PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscwpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIGZ1dHVyZSBpbXBvcnQgc3RhbmRhcmRfbGlicmFyeQpzdGFuZGFyZF9saWJyYXJ5Lmluc3RhbGxfYWxpYXNlcygpCmZyb20gYnVpbHRpbnMgaW1wb3J0ICoKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gcGFzdC51dGlscyBpbXBvcnQgb2xkX2RpdgppbXBvcnQganNvbgppbXBvcnQgbG9nZ2luZwppbXBvcnQgZW1pc3Npb24uc3RvcmFnZS50aW1lc2VyaWVzLmFic3RyYWN0X3RpbWVzZXJpZXMgYXMgZXN0YQo8fGZpbV9ob2xlfD4KCiMgT3VyIGltcG9ydHMKZnJvbSBlbWlzc2lvbi5jb3JlLmdldF9kYXRhYmFzZSBpbXBvcnQgZ2V0X3Byb2ZpbGVfZGIsIGdldF91dWlkX2RiCgpkZWZhdWx0Q2FyRm9vdHByaW50ID0gb2xkX2RpdigyNzguMCwxNjA5KQpkZWZhdWx0TXBnID0gb2xkX2Rpdig4LjkxLCgxLjYwOTMgKiBkZWZhdWx0Q2FyRm9vdHByaW50KSkgIyBTaG91bGQgYmUgcm91Z2hseSAzMgoKY2xhc3MgVXNlcihvYmplY3QpOgogIGRlZiBfX2luaXRfXyhzZWxmLCB1dWlkKToKICAgIHNlbGYudXVpZCA9IHV1aWQKICAgIHNlbGYudXNlcm5hbWUgPSBOb25lCiAgICAjIFRPRE86IFJlYWQgdGhpcyBmcm9tIGEgZmlsZSBpbnN0ZWFkCiAgICBzZWxmLmRlZmF1bHRTZXR0aW5ncyA9IHsKICAgICAgJ3Jlc3VsdF91cmwnOiAnaHR0cHM6Ly9lLW1pc3Npb24uZWVjcy5iZXJrZWxleS5lZHUvY29tcGFyZScKICAgIH0KCiAgQHN0YXRpY21ldGhvZAogIGRlZiBpc1JlZ2lzdGVyZWQodXNlckVtYWlsKToKICAgIGVtYWlsMlVVSUQgPSBnZXRfdXVpZF9kYigpLmZpbmRfb25lKHsndXNlcl9lbWFpbCc6IHVzZXJFbWFpbH0pCiAgICBpZiBlbWFpbDJVVUlEIGlzIE5vbmU6CiAgICAgIHJldHVybiBGYWxzZQogICAgZWxzZToKICAgICAgcmV0dXJuIFRydWUKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tRW1haWwodXNlckVtYWlsKToKICAgIGVtYWlsMlVVSUQgPSBnZXRfdXVpZF9kYigpLmZpbmRfb25lKHsndXNlcl9lbWFpbCc6IHVzZXJFbWFpbH0pCiAgICBpZiBlbWFpbDJVVUlEIGlzIE5vbmU6CiAgICAgIHJldHVybiBOb25lCiAgICB1c2VyID0gVXNlcihlbWFpbDJVVUlEWyd1dWlkJ10pCiAgICB1c2VyLl9fZW1haWwgPSB1c2VyRW1haWwKICAgIHJldHVybiB1c2VyCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbVVVSUQodXNlcl91dWlkKToKICAgIHVzZXIgPSBVc2VyKHVzZXJfdXVpZCkKICAgIHV1aWQyRW1haWwgPSBnZXRfdXVpZF9kYigpLmZpbmRfb25lKHsndXVpZCc6IHVzZXJfdXVpZH0pCiAgICAjIFJlbW92ZSBvbmNlIHdlIHJlbW92ZSBvYnNvbGV0ZSBjb2RlL3Rlc3RzIHRoYXQgZG9lc24ndCBjcmVhdGUgYW4gZW1haWwgLT4KICAgICMgdXVpZCBtYXBwaW5nCiAgICBpZiB1dWlkMkVtYWlsIGlzIG5vdCBOb25lIGFuZCAndXNlcl9lbWFpbCcgaW4gdXVpZDJFbWFpbDoKICAgICAgdXNlci5fX2VtYWlsID0gdXVpZDJFbWFpbFsndXNlcl9lbWFpbCddCiAgICByZXR1cm4gdXNlcgoKICBkZWYgZ2V0UHJvZmlsZShzZWxmKToKICAgIHJldHVybiBnZXRfcHJvZmlsZV9kYigpLmZpbmRfb25lKHsndXNlcl9pZCc6IHNlbGYudXVpZH0pCgogICMgUmV0dXJucyBBdmVyYWdlIG9mIE1QRyBvZiBhbGwgY2FycyB0aGUgdXNlciBkcml2ZXMKICBkZWYgZ2V0QXZnTXBnKHNlbGYpOgogICAgbXBnX2FycmF5ID0gW2RlZmF1bHRNcGddCiAgICAjIEFsbCBleGlzdGluZyBwcm9maWxlcyB3aWxsIGJlIG1pc3NpbmcgdGhlICdtcGdfYXJyYXknIGZpZWxkLgogICAgIyBUT0RPOiBNaWdodCB3YW50IHRvIHdyaXRlIGEgc3VwcG9ydCBzY3JpcHQgaGVyZSB0byBwb3B1bGF0ZSBpdCBmb3IgZXhpc3RpbmcgZGF0YQogICAgIyBhbmQgcmVtb3ZlIHRoaXMgYWRkaXRpb25hbCBjaGVjawogICAgaWYgc2VsZi5nZXRQcm9maWxlKCkgIT0gTm9uZSBhbmQgJ21wZ19hcnJheScgaW4gc2VsZi5nZXRQcm9maWxlKCk6CiAgICAgICAgbXBnX2FycmF5ID0gc2VsZi5nZXRQcm9maWxlKClbJ21wZ19hcnJheSddCiAgICB0b3RhbCA9IDAKICAgIGZvciBtcGcgaW4gbXBnX2FycmF5OgogICAgICB0b3RhbCArPSBtcGcKICAgIGF2ZyA9IG9sZF9kaXYodG90YWwsbGVuKG1wZ19hcnJheSkpCiAgICBwcmludCgiUmV0dXJuaW5nIHRvdGFsID0gJXMsIGxlbiA9ICVzLCBhdmcgPSAlcyIgJSAodG90YWwsIGxlbihtcGdfYXJyYXkpLCBhdmcpKQogICAgcmV0dXJuIGF2ZwoKICAjIFN0b3JlcyBBcnJheSBvZiBNUEdzIG9mIGFsbCB0aGUgY2FycyB0aGUgdXNlciBkcml2ZXMuCiAgIyBBdCB0aGlzIHBvaW50LCBndWFyYW50ZWVkIHRoYXQgdXNlciBoYXMgYSBwcm9maWxlLgogIGRlZiBzZXRNcGdBcnJheShzZWxmLCBtcGdfYXJyYXkpOgogICAgbG9nZ2luZy5kZWJ1ZygiU2V0dGluZyBNUEcgYXJyYXkgZm9yIHVzZXIgJXMgdG8gOiAlcyIgJSAoc2VsZi51dWlkLCBtcGdfYXJyYXkpKQogICAgZ2V0X3Byb2ZpbGVfZGIoKS51cGRhdGVfb25lKHsndXNlcl9pZCc6IHNlbGYudXVpZH0sIHsnJHNldCc6IHsnbXBnX2FycmF5JzogbXBnX2FycmF5fX0pCgogIGRlZiB1cGRhdGUoc2VsZiwgdXBkYXRlX2RvYyk6CiAgICBsb2dnaW5nLmRlYnVnKCJVcGRhdGluZyB1c2VyICVzIHdpdGggZmllbGRzICVzIiAlIChzZWxmLnV1aWQsIHVwZGF0ZV9kb2MpKQogICAgZ2V0X3Byb2ZpbGVfZGIoKS51cGRhdGVfb25lKHsndXNlcl9pZCc6IHNlbGYudXVpZH0sIHsnJHNldCc6IHVwZGF0ZV9kb2N9KQoKICAjQ08yIENvbnN1bXB0aW9uCgogICNkZWYgZ2V0Q2FyYm9uV2VlayhzZWxmLCBuKSA6IGdldHMgdGhpcyB3ZWVrcyBhdmVyYWdlIGNhcmJvbiBlbWlzc2lvbiwgd2hlcmUgbiBpcyB0aGUgbnRoIHdlZWsgaW4gdGhlIHBhc3QKICAjZGVmIGdldENhcmJvbldlZWtseShzZWxmLCBuKSA6IGdldHMgZGVsdGEgY2FyYm9uIGVtaXNzaW9uIGZvciB0aGUgbnRo"}}]
["855690e791c5f65697b8f1ae2dd5bf5616cf34db-2","855690e791c5f65697b8f1ae2dd5bf5616cf34db","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMjAtMjAyMSBEaW1pdHJpb3MtR2Vvcmdpb3MgQWtlc3RvcmlkaXMKIwojIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwojIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQojICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKIyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KIyB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiMKPHxmaW1fZW5kfD4="]
["320797e0f36175b2fc2784f4b5b371779ed2bc28-3","320797e0f36175b2fc2784f4b5b371779ed2bc28",{"$cut":{"chars":171496,"head":"PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiMgUmVzb3VyY2Ugb2JqZWN0IGNvZGUKIwojIENyZWF0ZWQgYnk6IFRoZSBSZXNvdXJjZSBDb21waWxlciBmb3IgUHlRdDUgKFF0IHY1LjExLjIpCiMKIyBXQVJOSU5HISBBbGwgY2hhbmdlcyBtYWRlIGluIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3QhCgpmcm9tIFB5UXQ1IGltcG9ydCBRdENvcmUKCnF0X3Jlc291cmNlX2RhdGEgPSBiIlwKXHgwMFx4MDBceDFiXHhjMFwKXHg4OVwKXHg1MFx4NGVceDQ3XHgwZFx4MGFceDFhXHgwYVx4MDBceDAwXHgwMFx4MGRceDQ5XHg0OFx4NDRceDUyXHgwMFwKXHgwMFx4MDJceDAwXHgwMFx4MDBceDAyXHgwMFx4MDhceDAzXHgwMFx4MDBceDAwXHhjM1x4YTZceDI0XHhjOFwKXHgwMFx4MDBceDAyXHg4OFx4NTBceDRjXHg1NFx4NDVceDAwXHgwMFx4MDBceDQ0XHg0NFx4NDBceDQ0XHg0NFwKXHg0MFx4NDRceDQ0XHg0MFx4NDRceDQ0XHg0MFx4NDRceDQ0XHg0MFx4NDRceDQ0XHg0MFx4NDRceDQ0XHg0MFwKXHg0NFx4NDRceDQwXHg0NFx4NDRceDQwXHg0NFx4NDRceDQwXHg0NFx4NDRceDQwXHg0NFx4NDRceDQwXHg0NFwKXHg0NFx4NDBceDQ0XHg0NFx4NDBceDIwXHgyMFx4MWVceDBlXHgwZVx4MGRceDA5XHgwOVx4MDlceDAxXHgwMVwKXHgwMVx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDJceDAyXHgwMVx4MDhceDA4XHgwOFwKXHgwYVx4MGFceDA5XHgyNFx4MjRceDIyXHgwOVx4MDlceDA4XHgwNVx4MDVceDA1XHgwNFx4MDRceDA0XHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDA0XHgwNFx4MDNceDAxXHgwMVwKXHgwMVx4MDBceDAwXHgwMFx4MjNceDIzXHgyMVx4MDhceDA4XHgwN1x4MDRceDA0XHgwNFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwNlx4MDZceDA2XHgwNVwKXHgwNVx4MDVceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDA0XHgwNFwKXHgwNFx4MDRceDA0XHgwNFx4MDBceDAwXHgwMFx4MDhceDA4XHgwN1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwNFx4MDRceDA0XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwNVx4MDVceDA1XHgwN1wKXHgwN1x4MDdceDAxXHgwMVx4MDFceDI2XHgyNlx4MjRceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgyZlx4MmZceDJjXHgwZFx4MGRceDBjXHgwN1wKXHgwN1x4MDdceDA1XHgwNVx4MDVceDA0XHgwNFx4MDRceDA0XHgwNFx4MDNceDAxXHgwMVx4MDFceDAwXHgwMFwKXHgwMFx4MDFceDAxXHgwMVx4MDlceDA5XHgwOVx4NDBceDQwXHgzY1x4MDJceDAyXHgwMVx4MDRceDA0XHgwNFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwNVx4MDVceDA1XHgxNlx4MTZceDE1XHgwMFx4MDBceDAwXHgwMVwKXHgwMVx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDA0XHgwNFx4MDRceDAyXHgwMlx4MDJceDAwXHgwMFwKXHgwMFx4MDFceDAxXHgwMVx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMVx4MDFceDAxXHgwM1x4MDNceDAzXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVwKXHgwMVx4MDFceDA0XHgwNFx4MDRceDFkXHgxZFx4MWJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMVwKXHgwMVx4MDZceDA2XHgwNVx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDJceDAyXHgwMlx4MGNceDBjXHgwYlwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwNVx4MDVceDA0XHgwMVx4MDFceDAxXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDEzXHgxM1x4MTJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDA5XHgwOVx4MDhceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDZceDA2XHgwNlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDVceDA1XHgwNVwKXHgwMVx4MDFceDAxXHgwNFx4MDRceDA0XHgwMFx4MDBceDAwXHgwNFx4MDRceDA0XHgwMVx4MDFceDAxXHgwNVwKXHgwNVx4MDRceDAwXHgwMFx4MDBceDAxXHgwMVx4MDFceDA0XHgwNFx4MDRceDA1XHgwNVx4MDVceDAwXHgwMFwKXHgwMFx4MDFceDAxXHgwMVx4MDlceDA5XHgwOFx4MThceDE4XHgxN1x4MDVceDA1XHgwNVx4MDNceDAzXHgwMlwKXHgwN1x4MDdceDA2XHgwNVx4MDVceDA1XHgwNFx4MDRceDA0XHgwNFx4MDRceDA0XHgwMFx4MDBceDAwXHgwNVwKXHgwNVx4MDRceDAxXHgwMVx4MDFceDAwXHgwMFx4MDBceDA2XHgwNlx4MDZceDAxXHgwMVx4MDFceDA4XHgwOFwKXHgwOFx4MDFceDAxXHgwMVx4MTdceDE3XHgxNVx4MDVceDA1XHgwNFx4MDVceDA1XHgwNVx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDAwXHgwZVx4MGVceDBkXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwNlx4MDZceDA2XHgwMFwKXHgwMFx4MDBceDAwXHgwMFx4MDBceDA1XHgwNVx4MDRceDIyXHgyMlx4MjBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MTRceDE0XHgxM1x4MDBceDAwXHgwMFx4MGRceDBkXHgwY1x4MDZceDA2XHgwNVx4MDFceDAxXHgwMVwKXHgwMVx4MDFceDAxXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFwKXHgwMFx4MDBceDA1XHgwNVx4MDVceDA0XHgwNFx4MDRceDBmXHgwZlx4MGVceDA0XHgwNFx4MDRceDBlXHgwZVwKXHgwZFx4MDRceDA0XHgwNFx4MDFceDAxXHgwMVx4MGVceDBlXHgwZFx4MDRceDA0XHgwNFx4MGJceDBiXHgwYVwKXHgwNFx4MDRceDA0XHgwNFx4MDRceDA0XHgxMFx4MTBceDBmXHgxMFx4MTBceDBmXHgwZFx4MGRceDBkXHgwMVwKXHgwMVx4MDFceDAxXHgwMVx4MDFceDBmXHgwZlx4MGVceDBhXHgwYVx4MGFceDA5XHgwOVx4MDlceDAyXHgwMlwKXHgwMlx4MDBceDAwXHgwMFx4MDRceDA0XHgwM1x4MDFceDAxXHgwMVx4MDBc"}}]
["708b122f66e154821e56632c1ebbedb3fe896f27-3","708b122f66e154821e56632c1ebbedb3fe896f27","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBzdHl4X21zZ3MubXNnIGltcG9ydCBUcmFmZmljTGlnaHQKaW1wb3J0IHJvc3B5CmltcG9ydCBjdjIKZnJvbSBzdGRfbXNncy5tc2cgaW1wb3J0IFN0cmluZwo8fGZpbV9lbmR8Pg=="]
["2d3fee4c430aed05146e11d4cd607e0c62bfd4ef-2","2d3fee4c430aed05146e11d4cd607e0c62bfd4ef","PHxmaW1fcHJlZml4fD4KIyBhZGQgdG8gdGhlIGRpY3Rpb25hcnkgYSBuYW1lIHdpdGggaXRzIHBob25lIG51bWJlcgojIHJlc3VsdCBzaG91bGQgYmUgcGhvbmVfYm9vayA9IHsnUHl0aG9uJzogMX0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpwaG9uZV9ib29rID0ge30KPHxmaW1fZW5kfD4="]
["74693e04c3753f8e87a75531bba19bae7313d9a3-1","74693e04c3753f8e87a75531bba19bae7313d9a3","PHxmaW1fcHJlZml4fD4KIiIiVGVzdHMgZm9yIGZpcmluZyByZXF1ZXN0cyBhdCB0aGUgRnVtaXMgV2lSQ1UgQVBJLiIiIgppbXBvcnQgYXN5bmNpbwoKaW1wb3J0IGFpb2h0dHAKaW1wb3J0IHB5dGVzdApmcm9tIGZ1bWlzIGltcG9ydCBGdW1pcwpmcm9tIGZ1bWlzLl9fdmVyc2lvbl9fIGltcG9ydCBfX3ZlcnNpb25fXwpmcm9tIGZ1bWlzLmV4Y2VwdGlvbnMgaW1wb3J0IEZ1bWlzQ29ubmVjdGlvbkVycm9yLCBGdW1pc0Vycm9yCgoKQHB5dGVzdC5tYXJrLmFzeW5jaW8KYXN5bmMgZGVmIHRlc3RfanNvbl9yZXF1ZXN0KGV2ZW50X2xvb3AsIGFyZXNwb25zZXMpOgogICAgIiIiVGVzdCBKU09OIHJlc3BvbnNlIGlzIGhhbmRsZWQgY29ycmVjdGx5LiIiIgogICAgYXJlc3BvbnNlcy5hZGQoCiAgICAgICAgImFwaS5mdW1pcy5zaSIsCiAgICAgICAgIi8iLAogICAgICAgICJHRVQiLAogICAgICAgIGFyZXNwb25zZXMuUmVzcG9uc2UoCiAgICAgICAgICAgIHN0YXR1cz0yMDAsCiAgICAgICAgICAgIGhlYWRlcnM9eyJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiJ9LAogICAgICAgICAgICB0ZXh0PSd7InRlc3QiOiAib2sifScsCiAgICAgICAgKSwKICAgICkKICAgIGFzeW5jIHdpdGggYWlvaHR0cC5DbGllbnRTZXNzaW9uKGxvb3A9ZXZlbnRfbG9vcCkgYXMgc2Vzc2lvbjoKICAgICAgICBmdW1pcyA9IEZ1bWlzKAogICAgICAgICAgICBtYWM9IkFBQkJDQ0RERUVGRiIsIHBhc3N3b3JkPSIxMjM0Iiwgc2Vzc2lvbj1zZXNzaW9uLCBsb29wPWV2ZW50X2xvb3AsCiAgICAgICAgKQogICAgICAgIHJlc3BvbnNlID0gYXdhaXQgZnVtaXMuX3JlcXVlc3QoIi8iKQogICAgICAgIGFzc2VydCByZXNwb25zZVsidGVzdCJdID09ICJvayIKCgpAcHl0ZXN0Lm1hcmsuYXN5bmNpbwphc3luYyBkZWYgdGVzdF9pbnRlcm5hbF9zZXNzaW9uKGV2ZW50X2xvb3AsIGFyZXNwb25zZXMpOgogICAgIiIiVGVzdCBpbnRlcm5hbCBjbGllbnQgc2Vzc2lvbiBpcyBoYW5kbGVkIGNvcnJlY3RseS4iIiIKICAgIGFyZXNwb25zZXMuYWRkKAogICAgICAgICJhcGkuZnVtaXMuc2kiLAogICAgICAgICIvIiwKICAgICAgICAiR0VUIiwKICAgICAgICBhcmVzcG9uc2VzLlJlc3BvbnNlKAogICAgICAgICAgICBzdGF0dXM9MjAwLAogICAgICAgICAgICBoZWFkZXJzPXsiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24ifSwKICAgICAgICAgICAgdGV4dD0neyJ0ZXN0IjogIm9rIn0nLAogICAgICAgICksCiAgICApCgogICAgYXN5bmMgd2l0aCBGdW1pcyhtYWM9IkFBQkJDQ0RERUVGRiIsIHBhc3N3b3JkPSIxMjM0IiwgbG9vcD1ldmVudF9sb29wLCkgYXMgZnVtaXM6CiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBmdW1pcy5fcmVxdWVzdCgiLyIpCiAgICAgICAgYXNzZXJ0IHJlc3BvbnNlWyJ0ZXN0Il0gPT0gIm9rIgoKCkBweXRlc3QubWFyay5hc3luY2lvCmFzeW5jIGRlZiB0ZXN0X2ludGVybmFsX2V2ZW50bG9vcChhcmVzcG9uc2VzKToKICAgICIiIlRlc3QgaW50ZXJuYWwgZXZlbnQgbG9vcCBjcmVhdGlvbiBpcyBoYW5kbGVkIGNvcnJlY3RseS4iIiIKICAgIGFyZXNwb25zZXMuYWRkKAogICAgICAgICJhcGkuZnVtaXMuc2kiLAogICAgICAgICIvIiwKICAgICAgICAiR0VUIiwKICAgICAgICBhcmVzcG9uc2VzLlJlc3BvbnNlKAogICAgICAgICAgICBzdGF0dXM9MjAwLAogICAgICAgICAgICBoZWFkZXJzPXsiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24ifSwKICAgICAgICAgICAgdGV4dD0neyJ0ZXN0IjogIm9rIn0nLAogICAgICAgICksCiAgICApCgogICAgYXN5bmMgd2l0aCBGdW1pcyhtYWM9IkFBQkJDQ0RERUVGRiIsIHBhc3N3b3JkPSIxMjM0IikgYXMgZnVtaXM6CiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBmdW1pcy5fcmVxdWVzdCgiLyIpCiAgICAgICAgYXNzZXJ0IHJlc3BvbnNlWyJ0ZXN0Il0gPT0gIm9rIgoKCkBweXRlc3QubWFyay5hc3luY2lvCmFzeW5jIGRlZiB0ZXN0X3JlcXVlc3RfdXNlcl9hZ2VudChldmVudF9sb29wLCBhcmVzcG9uc2VzKToKICAgICIiIlRlc3QgY2xpZW50IHNlbmRpbmcgY29ycmVjdCB1c2VyIGFnZW50IGhlYWRlcnMuIiIiCiAgICAjIEhhbmRsZSB0byBydW4gYXNzZXJ0cyBvbiByZXF1ZXN0IGluCiAgICBhc3luYyBkZWYgcmVzcG9uc2VfaGFuZGxlcihyZXF1ZXN0KToKICAgICAgICBhc3NlcnQgcmVxdWVzdC5oZWFkZXJzWyJVc2VyLUFnZW50Il0gPT0gZiJQeXRob25GdW1pcy97X192ZXJzaW9uX199IgogICAgICAgIHJldHVybiBhcmVzcG9uc2VzLlJlc3BvbnNlKAogICAgICAgICAgICBzdGF0dXM9MjAwLCBoZWFkZXJzPXsiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24ifSwgdGV4dD0ie30iLAogICAgICAgICkKCiAgICBhcmVzcG9uc2VzLmFkZCgiYXBpLmZ1bWlzLnNpIiwgIi8iLCAiR0VUIiwgcmVzcG9uc2VfaGFuZGxlcikKCiAgICBhc3luYyB3aXRoIGFpb2h0dHAuQ2xpZW50U2Vzc2lvbihsb29wPWV2ZW50X2xvb3ApIGFzIHNlc3Npb246CiAgICAgICAgZnVtaXMgPSBGdW1pcygKICAgICAgICAgICAgbWFjPSJBQUJCQ0NEREVFRkYiLCBwYXNzd29yZD0iMTIzNCIsIHNlc3Npb249c2Vzc2lvbiwgbG9vcD1ldmVudF9sb29wLAogICAgICAgICkKICAgICAgICBhd2FpdCBmdW1pcy5fcmVxdWVzdCgiLyIpCgoKQHB5dGVzdC5tYXJrLmFzeW5jaW8KYXN5bmMgZGVmIHRlc3RfcmVxdWVzdF9jdXN0b21fdXNlcl9hZ2VudChldmVudF9sb29wLCBhcmVzcG9uc2VzKToKICAgICIiIlRlc3QgY2xpZW50IHNlbmRpbmcgY29ycmVjdCB1c2VyIGFnZW50IGhlYWRlcnMuIiIiCiAgICAjIEhhbmRsZSB0byBydW4gYXNzZXJ0cyBvbiByZXF1ZXN0IGluCiAgICBhc3luYyBkZWYgcmVzcG9uc2VfaGFuZGxlcihyZXF1ZXN0KToKICAgICAgICBhc3NlcnQgcmVxdWVzdC5oZWFkZXJzWyJVc2VyLUFnZW50Il0gPT0gIkxvcmVtSXBzdW0vMS4wIgogICAgICAgIHJldHVybiBhcmVzcG9uc2VzLlJlc3BvbnNlKAogICAgICAgICAgICBzdGF0dXM9MjAwLCBoZWFkZXJzPXsiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24ifSwgdGV4dD0ie30iLAogICAgICAgICkKCiAgICBhcmVzcG9uc2VzLmFkZCgiYXBpLmZ1bWlzLnNpIiwgIi8iLCAiR0VUIiwgcmVzcG9uc2VfaGFuZGxlcikKCiAgICBhc3luYyB3aXRoIGFpb2h0dHAuQ2xpZW50U2Vzc2lvbihsb29wPWV2ZW50X2xvb3ApIGFzIHNlc3Npb246CiAgICAgICAgZnVtaXMgPSBGdW1pcygKICAgICAgICAgICAgbWFjPSJBQUJCQ0NEREVFRkYiLAogICAgICAgICAgICBwYXNzd29yZD0iMTIzNCIsCiAgICAgICAgICAgIHNlc3Npb249c2Vzc2lvbiwKICAgICAgICAgICAgbG9vcD1ldmVudF9sb29wLAogICAgICAgICAgICB1c2VyX2FnZW50PSJMb3JlbUlwc3VtLzEuMCIsCiAgICAgICAgKQogICAgICAgIGF3YWl0IGZ1bWlzLl9yZXF1ZXN0KCIvIikKCgpAcHl0ZXN0Lm1hcmsuYXN5bmNpbwphc3luYyBkZWYgdGVzdF90aW1lb3V0KGV2ZW50X2xvb3AsIGFyZXNwb25zZXMpOgogICAgIiIiVGVzdCByZXF1ZXN0IHRpbWVvdXQgZnJvbSBGdW1pcyBXaVJDVSBBUEkuIiIiCiAgICAjIEZha2luZyBhIHRpbWVvdXQgYnkgc2xlZXBpbmcKICAgIGFzeW5jIGRlZiByZXNwb25zZV9oYW5kbGVyKF8pOgogICAgICAgIGF3YWl0IGFzeW5jaW8uc2xlZXAoMikKICAgICAgICByZXR1cm4gYXJlc3BvbnNlcy5SZXNwb25zZSgKICAgICAgICAgICAgc3RhdHVzPTIwMCwgaGVhZGVycz17IkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIn0sIHRleHQ9Int9IiwKICAgICAgICApCgogICAgYXJlc3BvbnNlcy5hZGQoImFwaS5mdW1pcy5zaSIsICIvIiwgIkdFVCIsIHJlc3BvbnNlX2hhbmRsZXIpCgogICAgYXN5bmMgd2l0aCBhaW9odHRwLkNsaWVudFNlc3Npb24obG9vcD1ldmVudF9sb29wKSBhcyBzZXNzaW9uOgogICAgICAgIGZ1bWlzID0gRnVtaXMoCiAgICAgICAgICAgIG1hYz0iQUFCQkNDRERFRUZGIiwKICAgICAgICAgICAgcGFzc3dvcmQ9IjEyMzQiLAogICAgICAgICAgICBzZXNzaW9uPXNlc3Npb24sCiAgICAgICAgICAgIGxvb3A9ZXZlbnRfbG9vcCwKICAgICAgICAgICAgcmVxdWVzdF90aW1lb3V0PTEsCiAgICAgICAgKQogICAgICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhGdW1pc0Nvbm5lY3Rpb25FcnJvcik6CiAgICAgICAgICAgIGFzc2VydCBhd2FpdCBmdW1pcy5fcmVxdWVzdCgiLyIpCgoKQHB5dGVzdC5tYXJrLmFzeW5jaW8KYXN5bmMgZGVmIHRlc3RfaW52YWxpZF9jb250ZW50X3R5cGUoZXZlbnRfbG9vcCwgYXJlc3BvbnNlcyk6CiAgICAiIiJUZXN0IGludmFsaWQgY29udGVudCB0eXBlIGZyb20gRnVtaXMgV2lSQ1UgQVBJLiIiIgogICAgYXJlc3BvbnNlcy5hZGQoCiAgICAgICAgImFwaS5mdW1pcy5zaSIsCiAgICAgICAgIi8iLAogICAgICAgICJHRVQiLAogICAgICAgIGFyZXNwb25zZXMuUmVzcG9uc2UoCiAgICAgICAgICAgIHN0YXR1cz0yMDAsIGhlYWRlcnM9eyJDb250ZW50LVR5cGUiOiAib3RoZXIvY29udGVudCJ9LCB0ZXh0PSJ7fSIsCiAgICAgICAgKSwKICAgICkKCiAgICBhc3luYyB3aXRoIGFpb2h0dHAuQ2xpZW50U2Vzc2lvbihsb29wPWV2ZW50X2xvb3ApIGFzIHNlc3Npb246CiAgICAgICAgZnVtaXMgPSBGdW1pcygKICAgICAgICAgICAgbWFjPSJBQUJCQ0NEREVFRkYiLAogICAgICAgICAgICBwYXNzd29yZD0iMTIzNCIsCiAgICAgICAgICAgIHNlc3Npb249c2Vzc2lvbiwKICAgICAgICAgICAgbG9vcD1ldmVudF9sb29wLAogICAgICAgICAgICByZXF1ZXN0X3RpbWVvdXQ9MSwKICAgICAgICApCiAgICAgICAgd2l0aCBweXRlc3QucmFpc2VzKEZ1bWlzRXJyb3IpOgogICAgICAgICAgICBhd2FpdCBmdW1pcy5fcmVxdWVzdCgiLyIpCgoKQHB5dGVzdC5tYXJrLmFzeW5jaW8KYXN5bmMgZGVmIHRlc3RfaHR0cF9lcnJvcihldmVudF9sb29wLCBhcmVzcG9uc2VzKToKICAgICIiIlRlc3QgSFRUUCBlcnJvciByZXNwb25zZSBoYW5kbGluZy4iIiIKICAgIGFyZXNwb25zZXMuYWRkKAogICAgICAgICJhcGkuZnVtaXMuc2kiLAogICAgICAgICIvIiwKICAgICAgICAiR0VUIiwKICAgICAgICBhcmVzcG9uc2VzLlJlc3BvbnNlKHRleHQ9Ik9NRyBQVVBQSUVTISIsIHN0YXR1cz00MDQpLAogICAgKQogICAgYXJlc3BvbnNlcy5hZGQoCiAgICAgICAgImFwaS5mdW1pcy5zaSIsCiAgICAgICAgIi8iLAogICAgICAgICJHRVQiLAogICAgICAgIGFyZXNwb25zZXMuUmVzcG9uc2UodGV4dD0iT01HIFBVUFBJRVMhIiwgc3RhdHVzPTUwMCksCiAgICApCgogICAgYXN5bmMgd2l0aCBhaW9odHRwLkNsaWVudFNlc3Npb24obG9vcD1ldmVudF9sb29wKSBhcyBzZXNzaW9uOgogICAgICAgIGZ1bWlzID0gRnVtaXMoCjx8ZmltX2hvbGV8PgogICAgICAgICAgICByZXF1ZXN0X3RpbWVvdXQ9MSwKICAgICAgICApCiAgICAgICAgd2l0aCBweXRlc3QucmFpc2VzKEZ1bWlzRXJyb3IpOgogICAgICAgICAgICBhc3NlcnQgYXdhaXQgZnVtaXMuX3JlcXVlc3QoIi8iKQoKICAgICAgICB3aXRoIHB5dGVzdC5yYWlzZXMoRnVtaXNFcnJvcik6CiAgICAgICAgICAgIGFzc2VydCBhd2FpdCBmdW1pcy5fcmVxdWVzdCgiLyIpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIG1hYz0iQUFCQkNDRERFRUZGIiwKICAgICAgICAgICAgcGFzc3dvcmQ9IjEyMzQiLAogICAgICAgICAgICBzZXNzaW9uPXNlc3Npb24sCiAgICAgICAgICAgIGxvb3A9ZXZlbnRfbG9vcCwKPHxmaW1fZW5kfD4="]
["7411e4a0b64d9d2bd3da86291bd801fbe7144989-4","7411e4a0b64d9d2bd3da86291bd801fbe7144989","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAxNyBCcml0aXNoIEJyb2FkY2FzdGluZyBDb3Jwb3JhdGlvbgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKaW1wb3J0IGpzb24KaW1wb3J0IHRpbWUKaW1wb3J0IGpzb25zY2hlbWEKCmZyb20gZmxhc2sgaW1wb3J0IHJlcXVlc3QsIGFib3J0LCBtYWtlX3Jlc3BvbnNlCmZyb20gbm1vc2NvbW1vbi53ZWJhcGkgaW1wb3J0IHJvdXRlLCBqc29uaWZ5LCB0cmFjZWJhY2sKCmZyb20gLiBpbXBvcnQgc2NoZW1hCmZyb20gLi5tb2RpZmllciBpbXBvcnQgUmVnTW9kaWZpZXIKClZBTElEX1RZUEVTID0gWydub2RlJywgJ3NvdXJjZScsICdmbG93JywgJ2RldmljZScsICJyZWNlaXZlciIsICJzZW5kZXIiXQpSRUdJU1RSWV9QT1JUID0gMjM3OQpOT0RFX1NFRU5fVFRMID0gMTIgICMgc2Vjb25kcyB1bnRpbCBhIG5vZGUgY29uc2lkZXJlZCAiZGVhZCIuCgoKY2xhc3MgUm91dGVzQ29tbW9uKG9iamVjdCk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZ2dlciwgcmVnaXN0cnksIGFwaV92ZXJzaW9uPSJ2MS4wIiwgYXBpX3NjaGVtYT1zY2hlbWEpOgogICAgICAgIHNlbGYubG9nZ2VyID0gbG9nZ2VyCiAgICAgICAgc2VsZi5yZWdpc3RyeSA9IHJlZ2lzdHJ5CiAgICAgICAgc2VsZi5tb2RpZmllciA9IFJlZ01vZGlmaWVyKGxvZ2dlcj1zZWxmLmxvZ2dlcikKICAgICAgICBzZWxmLmFwaV92ZXJzaW9uID0gYXBpX3ZlcnNpb24KICAgICAgICBzZWxmLmFwaV9zY2hlbWEgPSBhcGlfc2NoZW1hCgogICAgZGVmIF9lbnN1cmVfcGFyZW50cyhzZWxmLCByZXNvdXJjZV90eXBlLCByZXNvdXJjZSk6CiAgICAgICAgaWYgcmVzb3VyY2VfdHlwZSA9PSAiZGV2aWNlIjoKICAgICAgICAgICAgaWYgbm90IHNlbGYucmVnaXN0cnkucmVzb3VyY2VfZXhpc3RzKCJub2RlcyIsIHJlc291cmNlWyJub2RlX2lkIl0pOgogICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAiTm9kZSB7fSBkb2VzIG5vdCBleGlzdCIuZm9ybWF0KHJlc291cmNlWyJub2RlX2lkIl0pCiAgICAgICAgZWxpZiByZXNvdXJjZV90eXBlIGluIFsicmVjZWl2ZXIiLCAic2VuZGVyIiwgInNvdXJjZSJdOgogICAgICAgICAgICBpZiBub3Qgc2VsZi5yZWdpc3RyeS5yZXNvdXJjZV9leGlzdHMoImRldmljZXMiLCByZXNvdXJjZVsiZGV2aWNlX2lkIl0pOgogICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAiRGV2aWNlIHt9IGRvZXMgbm90IGV4aXN0Ii5mb3JtYXQocmVzb3VyY2VbImRldmljZV9pZCJdKQogICAgICAgIGVsaWYgcmVzb3VyY2VfdHlwZSA9PSAiZmxvdyI6CiAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJlZ2lzdHJ5LnJlc291cmNlX2V4aXN0cygic291cmNlcyIsIHJlc291cmNlWyJzb3VyY2VfaWQiXSk6CiAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UsICJTb3VyY2Uge30gZG9lcyBub3QgZXhpc3QiLmZvcm1hdChyZXNvdXJjZVsic291cmNlX2lkIl0pCiAgICAgICAgcmV0dXJuIFRydWUsICIiCgogICAgZGVmIF9hZGRfcmVzb3VyY2Uoc2VsZiwgYm9keSk6CiAgICAgICAgIiIiUmVnaXN0ZXIgYSByZXNvdXJjZS4iIiIKICAgICAgICBqb2JqID0ganNvbi5sb2Fkcyhib2R5KQoKICAgICAgICAjIFB1dCByZXNvdXJjZSB0byByZWdpc3RyeSwgcmV0dXJuIEhUVFAgcmVzcG9uc2UKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZvciBrZXkgaW4gWyd0eXBlJywgJ2RhdGEnXToKICAgICAgICAgICAgICAgIGlmIGtleSBub3QgaW4gam9iajoKICAgICAgICAgICAgICAgICAgICBhYm9ydCg0MDAsICdBdHRyaWJ1dGUgInt9IiBpcyBtYW5kYXRvcnkgZm9yICJyZXNvdXJjZSIgdHlwZScuZm9ybWF0KGtleSkpCgogICAgICAgICAgICAjICdpZCcgaXMgYWx3YXlzIG1hbmRhdG9yeQogICAgICAgICAgICBpZiAnaWQnIG5vdCBpbiBqb2JqWydkYXRhJ106CiAgICAgICAgICAgICAgICBhYm9ydCg0MDAsICdBdHRyaWJ1dGUgImlkIiBpcyBtYW5kYXRvcnkgZm9yICJub2RlIiB0eXBlJykKCiAgICAgICAgICAgIG1vZGlmaWVkID0gc2VsZi5tb2RpZmllci5tb2RpZnkoam9iaikKICAgICAgICAgICAgcmVzb3VyY2VfdHlwZSA9IG1vZGlmaWVkWyd0eXBlJ10KICAgICAgICAgICAgcmVzb3VyY2VfZGF0YSA9IG1vZGlmaWVkWydkYXRhJ10KCiAgICAgICAgICAgIGlmIHJlc291cmNlX3R5cGUgbm90IGluIFZBTElEX1RZUEVTOgogICAgICAgICAgICAgICAgYWJvcnQoNDAwLCAncmVzb3VyY2U6ICJ0eXBlIiBhdHRyaWJ1dGUgaXMgbWFsZm9ybWVkLCBleHBlY3RlZCBvbmUgb2Yge30nLmZvcm1hdChWQUxJRF9UWVBFUykpCgogICAgICAgICAgICByZXNvdXJjZV9pZCA9IHJlc291cmNlX2RhdGFbJ2lkJ10KICAgICAgICAgICAgcmVzb3VyY2VfdHlwZV9wbHVyYWwgPSByZXNvdXJjZV90eXBlICsgInMiCgogICAgICAgICAgICAjIFZhbGlkYXRlIGFnYWluc3QgdGhlIHNjaGVtYQogICAgICAgICAgICBjaGVja2VyID0ganNvbnNjaGVtYS5Gb3JtYXRDaGVja2VyKFsiaXB2NCIsICJpcHY2Il0pCiAgICAgICAgICAgIGpzb25zY2hlbWEudmFsaWRhdGUocmVzb3VyY2VfZGF0YSwgc2VsZi5hcGlfc2NoZW1hLlNDSEVNQVtyZXNvdXJjZV90eXBlXSwgZm9ybWF0X2NoZWNrZXI9Y2hlY2tlcikKCiAgICAgICAgICAgICMgRW5zdXJlIGFueSBwYXJlbnRzIGFyZSBwcmVzZW50CiAgICAgICAgICAgIG9rLCBtZXNzYWdlID0gc2VsZi5fZW5zdXJlX3BhcmVudHMocmVzb3VyY2VfdHlwZSwgcmVzb3VyY2VfZGF0YSkKICAgICAgICAgICAgaWYgbm90IG9rOgogICAgICAgICAgICAgICAgYWJvcnQoNDAwLCBtZXNzYWdlKQoKICAgICAgICAgICAgIyBBZGQgaW4gdGhlIEFQSSB2ZXJzaW9uIHdlIGFyZSByZWdpc3RlcmluZyB3aXRoCiAgICAgICAgICAgIHJlc291cmNlX2RhdGFbJ0BfYXBpdmVyc2lvbiddID0gc2VsZi5hcGlfdmVyc2lvbgoKICAgICAgICAgICAgcmVnX3Jlc3BvbnNlID0gc2VsZi5yZWdpc3RyeS5wdXQoCiAgICAgICAgICAgICAgICByZXNvdXJjZV90eXBlX3BsdXJhbCwgcmVzb3VyY2VfaWQsIGpzb24uZHVtcHMocmVzb3VyY2VfZGF0YSksIHBvcnQ9UkVHSVNUUllfUE9SVAogICAgICAgICAgICApCiAgICAgICAgICAgIHJlZ19yZXNwb25zZS5hdXRvY29ycmVjdF9sb2NhdGlvbl9oZWFkZXIgPSBGYWxzZQogICAgICAgICAgICByZWdfcmVzcG9uc2UuaGVhZGVyc1siTG9jYXRpb24iXSA9ICIveC1ubW9zL3JlZ2lzdHJhdGlvbi97fS9yZXNvdXJjZS97fS97fS8iLmZvcm1hdCgKICAgICAgICAgICAgICAgIHNlbGYuYXBpX3ZlcnNpb24sIHJlc291cmNlX3R5cGVfcGx1cmFsLCByZXNvdXJjZV9pZAogICAgICAgICAgICApCgogICAgICAgICAgICBzZWxmLmxvZ2dlci53cml0ZUluZm8oInJlZ2lzdGVyIHt9IHt9OiB7fSIuZm9ybWF0KHJlc291cmNlX3R5cGUsIHJlc291cmNlX2lkLCByZWdfcmVzcG9uc2Uuc3RhdHVzX2NvZGUpKQoKICAgICAgICAgICAgIyBBZGQgYW4gaW5pdGlhbCBoZWFydGJlYXQgaWYgdGhpcyBpcyBhIG5vZGUgcmVzb3VyY2UKICAgICAgICAgICAgaWYgcmVzb3VyY2VfdHlwZSA9PSAnbm9kZSc6CiAgICAgICAgICAgICAgICBoYl9yID0gc2VsZi5yZWdpc3RyeS5wdXRfaGVhbHRoKHJlc291cmNlX2lkLCBpbnQodGltZS50aW1lKCkpLCB0dGw9Tk9ERV9TRUVOX1RUTCwgcG9ydD1SRUdJU1RSWV9QT1JUKQogICAgICAgICAgICAgICAgaWYgaGJfci5zdGF0dXNfY29kZSBub3QgaW4gWzIwNCwgMjAxLCAyMDBdOgogICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLndyaXRlV2FybmluZygiY291bGQgbm90IGFkZCBpbml0aWFsIGhlYXJ0YmVhdDoge30iLmZvcm1hdChoYl9yKSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGJfcgoKICAgICAgICAgICAgcmV0dXJuIHJlZ19yZXNwb25zZQoKICAgICAgICBleGNlcHQganNvbnNjaGVtYS5WYWxpZGF0aW9uRXJyb3IgYXMgZXg6CiAgICAgICAgICAgIHNlbGYubG9nZ2VyLndyaXRlV2FybmluZygiVmFsaWRhdGlvbiBlcnJvcjoge30sIGluIHt9Ii5mb3JtYXQoZXgubWVzc2FnZSwgam9iaikpCiAgICAgICAgICAgIGFib3J0KDQwMCwgZXgubWVzc2FnZSkKCiAgICAgICAgZXhjZXB0IHNlbGYucmVnaXN0cnkuUmVnaXN0cnlVbmF2YWlsYWJsZToKICAgICAgICAgICAgc2VsZi5sb2dnZXIud3JpdGVXYXJuaW5nKCJDb3VsZCBub3QgcHV0IHJlc291cmNlIHRvIHJlZ2lzdHJ5LiIpCiAgICAgICAgICAgIGFib3J0KDUwMCwgIlJlZ2lzdHJ5IHVuYXZhaWxhYmxlIikKCiAgICBkZWYgX2hlYWx0aChzZWxmLCBub2RlX2lkKToKICAgICAgICAiIiIKICAgICAgICBQZXJmb3JtIGhlYWx0aCBjaGVjayBmb3IgcGFydGljdWxhciByZXNvdXJjZQogICAgICAgICIiIgoKICAgICAgICAjIGNoZWNrIG5vZGUgaXMgcmVnaXN0ZXJlZAogICAgICAgIHRyeToKICAgICAgICAgICAgY2hlY2tfciA9IHNlbGYucmVnaXN0cnkuZ2V0KCJub2RlcyIsIG5vZGVfaWQsIHBvcnQ9UkVHSVNUUllfUE9SVCkKICAgICAgICBleGNlcHQgc2VsZi5yZWdpc3RyeS5SZWdpc3RyeVVuYXZhaWxhYmxlOgogICAgICAgICAgICBzZWxmLmxvZ2dlci53cml0ZVdhcm5pbmcoIlJlZ2lzdHJ5IHVuYXZhaWxhYmxlLiIpCiAgICAgICAgICAgIGFib3J0KDUwMCwgIlJlZ2lzdHJ5IHVuYXZhaWxhYmxlIikKCiAgICAgICAgaWYgY2hlY2tfciBpcyBOb25lOgogICAgICAgICAgICBzZWxmLmxvZ2dlci53cml0ZURlYnVnKCJoZWFydGJlYXQ6IG5vZGUgJ3t9JyBub3QgcmVnaXN0ZXJlZCIuZm9ybWF0KG5vZGVfaWQpKQogICAgICAgICAgICByZXR1cm4gNDA0CgogICAgICAgIHRyeToKICAgICAgICAgICAgciA9IHNlbGYucmVnaXN0cnkucHV0X2hlYWx0aChub2RlX2lkLCBpbnQodGltZS50aW1lKCkpLCB0dGw9Tk9ERV9TRUVOX1RUTCwgcG9ydD1SRUdJU1RSWV9QT1JUKQogICAgICAgIGV4Y2VwdCBzZWxmLnJlZ2lzdHJ5LlJlZ2lzdHJ5VW5hdmFpbGFibGU6CiAgICAgICAgICAgIHNlbGYubG9nZ2VyLndyaXRlV2FybmluZygiUmVnaXN0cnkgdW5hdmFpbGFibGUuIikKICAgICAgICAgICAgYWJvcnQoNTAwLCAiUmVnaXN0cnkgdW5hdmFpbGFibGUiKQoKICAgICAgICBpZiByLnN0YXR1c19jb2RlID09IDQwNDoKICAgICAgICAgICAgZGF0YSA9IGpzb24ubG9hZHMoci5kYXRhKQogICAgICAgICAgICBpZiAnZXJyb3JDb2RlJyBpbiBkYXRhOgogICAgICAgICAgICAgICAgaWYgaW50KGRhdGFbJ2Vycm9yQ29kZSddKSA9PSAxMDA6ICAjIGtleSBkb2VzIG5vdCBleGlzdCwgc28gbm9kZSBoYXMgYmVlbiBjdWxsZWQKICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci53cml0ZURlYnVnKCJoZWFydGJlYXQ6IG5vZGUgJ3t9JyBkaWQgbm90IGV4aXN0Ii5mb3JtYXQobm9kZV9pZCkpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQwNAoKICAgICAgICBlbGlmIHIuc3RhdHVzX2NvZGUgbm90IGluIFsyMDEsIDIwMF06CiAgICAgICAgICAgIHNlbGYubG9nZ2VyLndyaXRlV2FybmluZygiY291bGRuJ3QgcmVnaXN0ZXIgaGVhcnRiZWF0ICh7fToge30pIi5mb3JtYXQoci5zdGF0dXNfY29kZSwgci5yZWFzb24pKQogICAgICAgICAgICByZXR1cm4gNDA0CgogICAgICAgIHJldHVybiAyMDQKCiAgICBkZWYgX2RlbGV0ZShzZWxmLCByZXNvdXJjZV90eXBlLCByZXNvdXJjZV9pZCk6CiAgICAgICAgIiIiCiAgICAgICAgRGVsZXRlIGEgcGFydGljdWxhciByZXNvdXJjZSBmcm9tIHRoZSByZWdpc3RyeQogICAgICAgICIiIgogICAgICAgICMgVE9ETzogdGhlcmUgaXMgYW4gaXNzdWUgaGVyZTsgd2hlbiBhIG5vZGUgaXMgZGVsZXRlZCwgZG8gd2UKICAgICAgICAjIHRpZHkgdXAgaXQncyByZXNvdXJjZXM/ICBBc3N1bWUgZm9yIG5vdzogKDEpIHRoZSBmYWNhZGUgaGFzCiAgICAgICAgIyBjbGVhbmVkIHVwIGFueSByZXNvdXJjZXMgaXQgcmVnaXN0ZXJlZCAoaW4gYSBjbGVhbiBzaHV0ZG93bikKICAgICAgICAjICgyKSBpZiB0aGUgc2h1dGRvd24gd2FzIG5vdCBjbGVhbiwgY2xpZW50IGFwcHMgd2lsbCBub3RpY2UKICAgICAgICAjIHRoZSBub2RlIGhlYWx0aCBjaGVjayBhbmQgYWN0IGFjY29yZGluZ2x5LgogICAgICAgICMgU3RhbGUgZGF0YSB3aWxsIHN0aWxsIG5lZWQgdG8gYmUgY2xlYW5lZCB1cCBldmVudHVhbGx5LgogICAgICAgIHNlbGYubG9nZ2VyLndyaXRlSW5mbygidW5yZWdpc3RlciB7fSB7fSIuZm9ybWF0KHJlc291cmNlX3R5cGUsIHJlc291cmNlX2lkKSkKICAgICAgICB0cnk6CiAgICAgICAgICAgIHIgPSBzZWxmLnJlZ2lzdHJ5LmRlbGV0ZShyZXNvdXJjZV90eXBlLCByZXNvdXJjZV9pZCwgcG9ydD1SRUdJU1RSWV9QT1JUKQo8fGZpbV9ob2xlfD4KCiAgICBAcm91dGUoJy8nKQogICAgZGVmIF9fdmVyc2lvbnJvb3Qoc2VsZik6CiAgICAgICAgcmV0dXJuIFsncmVzb3VyY2UvJywgJ2hlYWx0aC8nXQoKICAgIEByb3V0ZSgnL3Jlc291cmNlJywgbWV0aG9kcz1bJ0dFVCcsICdQT1NUJ10sIGF1dG9fanNvbj1GYWxzZSkKICAgIGRlZiBfX3Jlc291cmNlKHNlbGYpOgogICAgICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICdQT1NUJzoKICAgICAgICAgICAgcmVxX2RhdGEgPSByZXF1ZXN0LmdldF9kYXRhKCkKICAgICAgICAgICAgaWYgdHlwZShyZXFfZGF0YSkgaXMgbm90IHN0cjoKICAgICAgICAgICAgICAgIHJlcV9kYXRhID0gcmVxX2RhdGEuZGVjb2RlKCd1dGYtOCcpCiAgICAgICAgICAgIHIgPSBzZWxmLl9hZGRfcmVzb3VyY2UocmVxX2RhdGEpCiAgICAgICAgICAgIGlmIHIuc3RhdHVzX2NvZGUgLy8gMTAwID09IDI6CiAgICAgICAgICAgICAgICByZXByZXNlbnRhdGlvbiA9IGpzb24ubG9hZHMoci5qc29uKClbIm5vZGUiXVsidmFsdWUiXSkKICAgICAgICAgICAgICAgICMgc3RyaXAgb3V0IGFueSBtZXRhZGF0YQogICAgICAgICAgICAgICAgcmVtb3ZlX2tleXMgPSAoeCBmb3IgeCBpbiBsaXN0KHJlcHJlc2VudGF0aW9uKSBpZiB4LnN0YXJ0c3dpdGgoIkBfIikpCiAgICAgICAgICAgICAgICBmb3IgayBpbiByZW1vdmVfa2V5czoKICAgICAgICAgICAgICAgICAgICBkZWwgcmVwcmVzZW50YXRpb25ba10KICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gbWFrZV9yZXNwb25zZShqc29uaWZ5KHJlcHJlc2VudGF0aW9uKSwgci5zdGF0dXNfY29kZSkKICAgICAgICAgICAgICAgIHJlc3BvbnNlLmF1dG9jb3JyZWN0X2xvY2F0aW9uX2hlYWRlciA9IEZhbHNlCiAgICAgICAgICAgICAgICByZXNwb25zZS5oZWFkZXJzWyJMb2NhdGlvbiJdID0gci5oZWFkZXJzLmdldCgiTG9jYXRpb24iLCAiIikKICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZQoKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLndyaXRlSW5mbygiUE9TVCByZXNvdXJjZSByZXNwb25zZToge30iLmZvcm1hdChyLmNvbnRlbnQpKQogICAgICAgICAgICAgICAgYWJvcnQoci5zdGF0dXNfY29kZSkKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gbWFrZV9yZXNwb25zZShqc29uaWZ5KFsie31zLyIuZm9ybWF0KHgpIGZvciB4IGluIFZBTElEX1RZUEVTXSksIDIwMCkKCiAgICBAcm91dGUoJy9yZXNvdXJjZS88cmVzb3VyY2VfdHlwZT4nKQogICAgZGVmIF9fcmVzb3VyY2VfdHlwZShzZWxmLCByZXNvdXJjZV90eXBlKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHIgPSBzZWxmLnJlZ2lzdHJ5LmdldHJlc291cmNlcyhyZXNvdXJjZV90eXBlKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQogICAgICAgICAgICByYWlzZQogICAgICAgIHJldHVybiByCgogICAgQHJvdXRlKCcvcmVzb3VyY2UvPHJlc291cmNlX3R5cGU+LzxybmFtZT4nLCBtZXRob2RzPVsnR0VUJywgJ0RFTEVURSddKQogICAgZGVmIF9fcmVzb3VyY2VfdHlwZV9uYW1lKHNlbGYsIHJlc291cmNlX3R5cGUsIHJuYW1lKToKICAgICAgICBpZiByZXF1ZXN0Lm1ldGhvZCA9PSAnREVMRVRFJzoKICAgICAgICAgICAgciA9IHNlbGYuX2RlbGV0ZShyZXNvdXJjZV90eXBlLCBybmFtZSkKICAgICAgICAgICAgaWYgci5zdGF0dXNfY29kZSAvLyAxMDAgPT0gMjoKICAgICAgICAgICAgICAgIHJldHVybiAoMjA0LCAnJykKICAgICAgICAgICAgYWJvcnQoci5zdGF0dXNfY29kZSkKICAgICAgICBlbHNlOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICByID0gc2VsZi5yZWdpc3RyeS5nZXQocmVzb3VyY2VfdHlwZSwgcm5hbWUpCiAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKICAgICAgICAgICAgICAgIHJhaXNlCgogICAgICAgICAgICBpZiByIGlzIE5vbmU6CiAgICAgICAgICAgICAgICBhYm9ydCg0MDQpCiAgICAgICAgICAgIHJldHVybiByCgogICAgQHJvdXRlKCcvaGVhbHRoLycpCiAgICBkZWYgX19oZWFsdGgoc2VsZik6CiAgICAgICAgcmV0dXJuIFsnbm9kZXMvJywgXQoKICAgIEByb3V0ZSgnL2hlYWx0aC9ub2Rlcy8nKQogICAgZGVmIF9faGVhbHRoX3R5cGUoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYucmVnaXN0cnkuZ2V0cmVzb3VyY2VzKCdub2RlcycpCgogICAgQHJvdXRlKCcvaGVhbHRoL25vZGVzLzxrPicsIG1ldGhvZHM9WydHRVQnLCAnUE9TVCddKQogICAgZGVmIF9faGVhbHRoX3R5cGVfbmFtZShzZWxmLCBrKToKICAgICAgICBpZiByZXF1ZXN0Lm1ldGhvZCA9PSAnUE9TVCc6CiAgICAgICAgICAgIHIgPSBzZWxmLl9oZWFsdGgoaykKICAgICAgICAgICAgaWYgciAhPSAyMDQ6CiAgICAgICAgICAgICAgICBhYm9ydCg0MDQpCgogICAgICAgIHRyeToKICAgICAgICAgICAgaGVhbHRoID0gc2VsZi5yZWdpc3RyeS5nZXRfaGVhbHRoKGssIHBvcnQ9UkVHSVNUUllfUE9SVCkKICAgICAgICBleGNlcHQgc2VsZi5yZWdpc3RyeS5SZWdpc3RyeVVuYXZhaWxhYmxlOgogICAgICAgICAgICBhYm9ydCg1MDAsICJSZWdpc3RyeSB1bmF2YWlsYWJsZSIpCgogICAgICAgIGlmIGhlYWx0aCBpcyBOb25lOgogICAgICAgICAgICBhYm9ydCg0MDQpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIHsnaGVhbHRoJzogaGVhbHRofQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGV4Y2VwdCBzZWxmLnJlZ2lzdHJ5LlJlZ2lzdHJ5VW5hdmFpbGFibGU6CiAgICAgICAgICAgIHNlbGYubG9nZ2VyLndyaXRlV2FybmluZygiQ291bGRuJ3QgZGVsZXRlIHJlc291cmNlLiBSZWdpc3RyeSB1bmF2YWlsYWJsZS4iKQogICAgICAgICAgICBhYm9ydCg1MDAsICJSZWdpc3RyeSB1bmF2YWlsYWJsZSIpCiAgICAgICAgcmV0dXJuIHIKPHxmaW1fZW5kfD4="]
["5c9c5ac64b02d5848eaef89fde412b0cfe873417-1","5c9c5ac64b02d5848eaef89fde412b0cfe873417","PHxmaW1fcHJlZml4fD4KIyBXaXRoIHRoaXMgZXhlcmNpc2Ugd2Ugd2lsbCB3b3JrIG9uIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBoZXVyaXN0aWNzLgojCl9fYXV0aG9yc19fPSdUT19CRV9GSUxMRUQnCl9fZ3JvdXBfXz0nREwwMScKIyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwojIEludGVsLmxpZ2VuY2lhIEFydGlmaWNpYWwKIyBHcmF1IGVuIEVuZ2lueWVyaWEgSW5mb3JtYXRpY2EKIyBDdXJzIDIwMTYtIDIwMTcKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojIFVuaXZlcnNpdGF0IEF1dG9ub21hIGRlIEJhcmNlbG9uYQojIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwoKZnJvbSBTZWFyY2hBbGdvcml0aG0gaW1wb3J0ICoKPHxmaW1fZW5kfD4="]
["8f287bfcee56eda9c8a35e2a87dc579d98938a62-3","8f287bfcee56eda9c8a35e2a87dc579d98938a62","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCjkzMS4gTWluaW11bSBGYWxsaW5nIFBhdGggU3VtCgpHaXZlbiBhIHNxdWFyZSBhcnJheSBvZiBpbnRlZ2VycyBBLCB3ZSB3YW50IHRoZSBtaW5pbXVtIHN1bSBvZiBhIGZhbGxpbmcgcGF0aCB0aHJvdWdoIEEuCgpBIGZhbGxpbmcgcGF0aCBzdGFydHMgYXQgYW55IGVsZW1lbnQgaW4gdGhlIGZpcnN0IHJvdywgYW5kIGNob29zZXMgb25lIGVsZW1lbnQgZnJvbSBlYWNoIHJvdy4KPHxmaW1faG9sZXw+CjEgPD0gQS5sZW5ndGggPT0gQVswXS5sZW5ndGggPD0gMTAwCi0xMDAgPD0gQVtpXVtqXSA8PSAxMDAKIiIiCgoKY2xhc3MgU29sdXRpb246CiAgICBkZWYgbWluRmFsbGluZ1BhdGhTdW0oc2VsZiwgQSk6CiAgICAgICAgbGVuZ3RoID0gbGVuKEEpCiAgICAgICAgaWYgbGVuZ3RoID09IDE6CiAgICAgICAgICAgIHJldHVybiBtaW4oQVswXSkKCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuZ3RoKToKICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UobGVuZ3RoKToKICAgICAgICAgICAgICAgIEFbaV1bal0gKz0gbWluKEFbaSAtIDFdW21heCgwLCBqIC0gMSk6IGogKyAyXSkKCiAgICAgICAgcmV0dXJuIG1pbihBWy0xXSkKPHxmaW1fc3VmZml4fD4KVGhlIG5leHQgcm93J3MgY2hvaWNlIG11c3QgYmUgaW4gYSBjb2x1bW4gdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcHJldmlvdXMgcm93J3MgY29sdW1uIGJ5IGF0IG1vc3Qgb25lLgoKQ29uc3RyYWludHM6Cgo8fGZpbV9lbmR8Pg=="]
["24fe81ba392a18c945a1ca0d3a6252b22a7ae649-2","24fe81ba392a18c945a1ca0d3a6252b22a7ae649","PHxmaW1fcHJlZml4fD4KIiIiVGhpcyBtb2R1bGUgaW1wbGVtZW50cyB0aGUgRm9yRWFjaEJsb2NrUGFzcyBjbGFzcy4iIiIKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKaW1wb3J0IGNvcHkKaW1wb3J0IGxvZ2dpbmcKZnJvbSB0eXBpbmcgaW1wb3J0IEFueQpmcm9tIHR5cGluZyBpbXBvcnQgQ2FsbGFibGUKZnJvbSB0eXBpbmcgaW1wb3J0IFNlcXVlbmNlCgpmcm9tIGRpc3RyaWJ1dGVkIGltcG9ydCBnZXRfY2xpZW50CmZyb20gZGlzdHJpYnV0ZWQgaW1wb3J0IHJlam9pbgpmcm9tIGRpc3RyaWJ1dGVkIGltcG9ydCBzZWNlZGUKCmZyb20gYnFza2l0LmNvbXBpbGVyLmJhc2VwYXNzIGltcG9ydCBCYXNlUGFzcwpmcm9tIGJxc2tpdC5jb21waWxlci5tYWNoaW5lIGltcG9ydCBNYWNoaW5lTW9kZWwKZnJvbSBicXNraXQuaXIuY2lyY3VpdCBpbXBvcnQgQ2lyY3VpdApmcm9tIGJxc2tpdC5pci5nYXRlcy5jaXJjdWl0Z2F0ZSBpbXBvcnQgQ2lyY3VpdEdhdGUKZnJvbSBicXNraXQuaXIuZ2F0ZXMuY29uc3RhbnQudW5pdGFyeSBpbXBvcnQgQ29uc3RhbnRVbml0YXJ5R2F0ZQpmcm9tIGJxc2tpdC5pci5nYXRlcy5wYXJhbWV0ZXJpemVkLnBhdWxpIGltcG9ydCBQYXVsaUdhdGUKZnJvbSBicXNraXQuaXIuZ2F0ZXMucGFyYW1ldGVyaXplZC51bml0YXJ5IGltcG9ydCBWYXJpYWJsZVVuaXRhcnlHYXRlCmZyb20gYnFza2l0LmlyLm9wZXJhdGlvbiBpbXBvcnQgT3BlcmF0aW9uCmZyb20gYnFza2l0LmlyLnBvaW50IGltcG9ydCBDaXJjdWl0UG9pbnQKZnJvbSBicXNraXQudXRpbHMudHlwaW5nIGltcG9ydCBpc19zZXF1ZW5jZQoKX2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCmNsYXNzIEZvckVhY2hCbG9ja1Bhc3MoQmFzZVBhc3MpOgogICAgIiIiCiAgICBUaGUgRm9yRWFjaEJsb2NrUGFzcyBjbGFzcy4KCiAgICBUaGlzIGlzIGEgY29udHJvbCBwYXNzIHRoYXQgZXhlY3V0ZXMgYW5vdGhlciBwYXNzIG9yIHBhc3NlcyBvbiBldmVyeSBibG9jawogICAgaW4gdGhlIGNpcmN1aXQuIFRoaXMgd2lsbCBiZSBkb25lIGluIHBhcmFsbGVsIGlmIGV4ZWN1dGVkIGluIHRoZSBjb21waWxlcgogICAgZnJhbWV3b3JrLgogICAgIiIiCgogICAga2V5ID0gJ0ZvckVhY2hCbG9ja1Bhc3NfZGF0YScKICAgICIiIlRoZSBrZXkgaW4gZGF0YSwgd2hlcmUgYmxvY2sgZGF0YSB3aWxsIGJlIHB1dC4iIiIKCiAgICBkZWYgX19pbml0X18oCiAgICAgICAgc2VsZiwKICAgICAgICBsb29wX2JvZHk6IEJhc2VQYXNzIHwgU2VxdWVuY2VbQmFzZVBhc3NdLAogICAgICAgIGNhbGN1bGF0ZV9lcnJvcl9ib3VuZDogYm9vbCA9IEZhbHNlLAogICAgICAgIGNvbGxlY3Rpb25fZmlsdGVyOiBDYWxsYWJsZVtbT3BlcmF0aW9uXSwgYm9vbF0gfCBOb25lID0gTm9uZSwKICAgICAgICByZXBsYWNlX2ZpbHRlcjogQ2FsbGFibGVbW0NpcmN1aXQsIE9wZXJhdGlvbl0sIGJvb2xdIHwgTm9uZSA9IE5vbmUsCiAgICApIC0+IE5vbmU6CiAgICAgICAgIiIiCiAgICAgICAgQ29uc3RydWN0IGEgRm9yRWFjaEJsb2NrUGFzcy4KCiAgICAgICAgQXJnczoKICAgICAgICAgICAgbG9vcF9ib2R5IChCYXNlUGFzcyB8IFNlcXVlbmNlW0Jhc2VQYXNzXSk6IFRoZSBwYXNzIG9yIHBhc3NlcwogICAgICAgICAgICAgICAgdG8gZXhlY3V0ZSBvbiBldmVyeSBibG9jay4KCiAgICAgICAgICAgIGNhbGN1bGF0ZV9lcnJvcl9ib3VuZCAoYm9vbCk6IElmIHNldCB0byB0cnVlLCB3aWxsIGNhbGN1bGF0ZQogICAgICAgICAgICAgICAgZXJyb3JzIG9uIGJsb2NrcyBhZnRlciBydW5uaW5nIGBsb29wX2JvZHlgIG9uIHRoZW0gYW5kCiAgICAgICAgICAgICAgICB1c2UgdGhlc2UgYmxvY2sgZXJyb3JzIHRvIGNhbGN1bGF0ZSBhbiB1cHBlciBib3VuZCBvbiB0aGUKICAgICAgICAgICAgICAgIGZ1bGwgY2lyY3VpdCBlcnJvci4gKERlZmF1bHQ6IEZhbHNlKQoKICAgICAgICAgICAgY29sbGVjdGlvbl9maWx0ZXIgKENhbGxhYmxlW1tPcGVyYXRpb25dLCBib29sXSB8IE5vbmUpOgogICAgICAgICAgICAgICAgQSBwcmVkaWNhdGUgdGhhdCBkZXRlcm1pbmVzIHdoaWNoIG9wZXJhdGlvbnMgc2hvdWxkIGhhdmUKICAgICAgICAgICAgICAgIGBsb29wX2JvZHlgIGNhbGxlZCBvbiB0aGVtLiBDYWxsZWQgd2l0aCBlYWNoIG9wZXJhdGlvbgogICAgICAgICAgICAgICAgaW4gdGhlIGNpcmN1aXQuIElmIHRoaXMgcmV0dXJucyB0cnVlLCB0aGF0IG9wZXJhdGlvbiB3aWxsCiAgICAgICAgICAgICAgICBiZSBmb3JtZWQgaW50byBhbiBpbmRpdmlkdWFsIGNpcmN1aXQgYW5kIHBhc3NlZCB0aHJvdWdoCiAgICAgICAgICAgICAgICBgbG9vcF9ib2R5YC4gRGVmYXVsdHMgdG8gYWxsIENpcmN1aXRHYXRlcywKICAgICAgICAgICAgICAgIENvbnN0YW50VW5pdGFyeUdhdGVzLCBhbmQgVmFyaWFibGVVbml0YXJ5R2F0ZXMuCgogICAgICAgICAgICByZXBsYWNlX2ZpbHRlciAoQ2FsbGFibGVbW0NpcmN1aXQsIE9wZXJhdGlvbl0sIGJvb2xdIHwgTm9uZSk6CiAgICAgICAgICAgICAgICBBIHByZWRpY2F0ZSB0aGF0IGRldGVybWluZXMgaWYgdGhlIHJlc3VsdGluZyBjaXJjdWl0LCBhZnRlcgogICAgICAgICAgICAgICAgY2FsbGluZyBgbG9vcF9ib2R5YCBvbiBhIGJsb2NrLCBzaG91bGQgcmVwbGFjZSB0aGUgb3JpZ2luYWwKICAgICAgICAgICAgICAgIG9wZXJhdGlvbi4gQ2FsbGVkIHdpdGggdGhlIGNpcmN1aXQgb3V0cHV0IGZyb20gYGxvb3BfYm9keWAKICAgICAgICAgICAgICAgIGFuZCB0aGUgb3JpZ2luYWwgb3BlcmF0aW9uLiBJZiB0aGlzIHJldHVybnMgdHJ1ZSwgdGhlCiAgICAgICAgICAgICAgICBvcGVyYXRpb24gd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBuZXcgY2lyY3VpdC4KICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIGFsd2F5cyByZXBsYWNlLgoKICAgICAgICBSYWlzZXM6CiAgICAgICAgICAgIFZhbHVlRXJyb3I6IElmIGEgU2VxdWVuY2VbQmFzZVBhc3NdIGlzIGdpdmVuLCBidXQgaXQgaXMgZW1wdHkuCiAgICAgICAgIiIiCgogICAgICAgIGlmIG5vdCBpc19zZXF1ZW5jZShsb29wX2JvZHkpIGFuZCBub3QgaXNpbnN0YW5jZShsb29wX2JvZHksIEJhc2VQYXNzKToKICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgICAgICAgJ0V4cGVjdGVkIFBhc3Mgb3Igc2VxdWVuY2Ugb2YgUGFzc2VzLCBnb3QgJXMuJwogICAgICAgICAgICAgICAgJSB0eXBlKGxvb3BfYm9keSksCiAgICAgICAgICAgICkKCiAgICAgICAgaWYgaXNfc2VxdWVuY2UobG9vcF9ib2R5KToKICAgICAgICAgICAgdHJ1dGhfbGlzdCA9IFtpc2luc3RhbmNlKGVsZW0sIEJhc2VQYXNzKSBmb3IgZWxlbSBpbiBsb29wX2JvZHldCiAgICAgICAgICAgIGlmIG5vdCBhbGwodHJ1dGhfbGlzdCk6CiAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIFBhc3Mgb3Igc2VxdWVuY2Ugb2YgUGFzc2VzLCBnb3QgJXMuJwogICAgICAgICAgICAgICAgICAgICUgdHlwZShsb29wX2JvZHlbdHJ1dGhfbGlzdC5pbmRleChGYWxzZSldKSwKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgaWYgbGVuKGxvb3BfYm9keSkgPT0gMDoKICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0V4cGVjdGVkIGF0IGxlYXN0IG9uZSBwYXNzLicpCgogICAgICAgIHNlbGYubG9vcF9ib2R5ID0gbG9vcF9ib2R5IGlmIGlzX3NlcXVlbmNlKGxvb3BfYm9keSkgZWxzZSBbbG9vcF9ib2R5XQogICAgICAgIHNlbGYuY2FsY3VsYXRlX2Vycm9yX2JvdW5kID0gY2FsY3VsYXRlX2Vycm9yX2JvdW5kCiAgICAgICAgc2VsZi5jb2xsZWN0aW9uX2ZpbHRlciA9IGNvbGxlY3Rpb25fZmlsdGVyIG9yIGRlZmF1bHRfY29sbGVjdGlvbl9maWx0ZXIKICAgICAgICBzZWxmLnJlcGxhY2VfZmlsdGVyID0gcmVwbGFjZV9maWx0ZXIgb3IgZGVmYXVsdF9yZXBsYWNlX2ZpbHRlcgoKICAgICAgICBpZiBub3QgY2FsbGFibGUoc2VsZi5jb2xsZWN0aW9uX2ZpbHRlcik6CiAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICAgICAgICdFeHBlY3RlZCBjYWxsYWJsZSBtZXRob2QgdGhhdCBtYXBzIE9wZXJhdGlvbnMgdG8gYm9vbGVhbnMgZm9yJwogICAgICAgICAgICAgICAgJyBjb2xsZWN0aW9uX2ZpbHRlciwgZ290ICVzLicgJSB0eXBlKHNlbGYuY29sbGVjdGlvbl9maWx0ZXIpLAogICAgICAgICAgICApCgogICAgICAgIGlmIG5vdCBjYWxsYWJsZShzZWxmLnJlcGxhY2VfZmlsdGVyKToKICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgICAgICAgJ0V4cGVjdGVkIGNhbGxhYmxlIG1ldGhvZCB0aGF0IG1hcHMgQ2lyY3VpdCBhbmQgT3BlcmF0aW9ucyB0bycKICAgICAgICAgICAgICAgICcgYm9vbGVhbnMgZm9yIHJlcGxhY2VfZmlsdGVyJwogICAgICAgICAgICAgICAgJywgZ290ICVzLicgJSB0eXBlKHNlbGYucmVwbGFjZV9maWx0ZXIpLAogICAgICAgICAgICApCgogICAgZGVmIHJ1bihzZWxmLCBjaXJjdWl0OiBDaXJjdWl0LCBkYXRhOiBkaWN0W3N0ciwgQW55XSA9IHt9KSAtPiBOb25lOgogICAgICAgICIiIlBlcmZvcm0gdGhlIHBhc3MncyBvcGVyYXRpb24sIHNlZSA6Y2xhc3M6YEJhc2VQYXNzYCBmb3IgbW9yZS4iIiIKICAgICAgICAjIE1ha2Ugcm9vbSBpbiBkYXRhIGZvciBibG9jayBkYXRhCiAgICAgICAgaWYgc2VsZi5rZXkgbm90IGluIGRhdGE6CiAgICAgICAgICAgIGRhdGFbc2VsZi5rZXldID0gW10KICAgICAgICBkYXRhW3NlbGYua2V5XS5hcHBlbmQoW10pCgogICAgICAgICMgQ29sbGVjdCBibG9ja3MKICAgICAgICBibG9ja3M6IGxpc3RbdHVwbGVbaW50LCBPcGVyYXRpb25dXSA9IFtdCiAgICAgICAgZm9yIGN5Y2xlLCBvcCBpbiBjaXJjdWl0Lm9wZXJhdGlvbnNfd2l0aF9jeWNsZXMoKToKICAgICAgICAgICAgaWYgc2VsZi5jb2xsZWN0aW9uX2ZpbHRlcihvcCk6CiAgICAgICAgICAgICAgICBibG9ja3MuYXBwZW5kKChjeWNsZSwgb3ApKQoKICAgICAgICAjIEdldCB0aGUgbWFjaGluZSBtb2RlbAogICAgICAgIG1vZGVsID0gQmFzZVBhc3MuZ2V0X21vZGVsKGNpcmN1aXQsIGRhdGEpCgogICAgICAgICMgR28gdGhyb3VnaCB0aGUgYmxvY2tzCiAgICAgICAgcG9pbnRzOiBsaXN0W0NpcmN1aXRQb2ludF0gPSBbXQogICAgICAgIG9wczogbGlzdFtPcGVyYXRpb25dID0gW10KICAgICAgICBzdWJjaXJjdWl0czogbGlzdFtDaXJjdWl0XSA9IFtdCiAgICAgICAgYmxvY2tfZGF0YXM6IGxpc3RbZGljdFtzdHIsIEFueV1dID0gW10KICAgICAgICBmb3IgaSwgKGN5Y2xlLCBvcCkgaW4gZW51bWVyYXRlKGJsb2Nrcyk6CiAgICAgICAgICAgIGJsb2NrX2RhdGE6IGRpY3Rbc3RyLCBBbnldID0ge30KCiAgICAgICAgICAgICMgRm9ybSBTdWJjaXJjdWl0CiAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3AuZ2F0ZSwgQ2lyY3VpdEdhdGUpOgogICAgICAgICAgICAgICAgc3ViY2lyY3VpdCA9IG9wLmdhdGUuX2NpcmN1aXQuY29weSgpCiAgICAgICAgICAgICAgICBzdWJjaXJjdWl0LnNldF9wYXJhbXMob3AucGFyYW1zKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgc3ViY2lyY3VpdCA9IENpcmN1aXQuZnJvbV9vcGVyYXRpb24ob3ApCgogICAgICAgICAgICAjIEZvcm0gU3VidG9wb2xvZ3kKICAgICAgICAgICAgc3VibnVtYmVyaW5nID0ge29wLmxvY2F0aW9uW2ldOiBpIGZvciBpIGluIHJhbmdlKGxlbihvcC5sb2NhdGlvbikpfQogICAgICAgICAgICBzdWJkYXRhID0gewogICAgICAgICAgICAgICAgJ21hY2hpbmVfbW9kZWwnOiBNYWNoaW5lTW9kZWwoCiAgICAgICAgICAgICAgICAgICAgbGVuKG9wLmxvY2F0aW9uKSwKICAgICAgICAgICAgICAgICAgICBtb2RlbC5nZXRfc3ViZ3JhcGgob3AubG9jYXRpb24sIHN1Ym51bWJlcmluZyksCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFJlY29yZCBEYXRhIFBhcnQgMQogICAgICAgICAgICBibG9ja19kYXRhWydvcCddID0gY29weS5kZWVwY29weShvcCkKICAgICAgICAgICAgYmxvY2tfZGF0YVsnc3ViY2lyY3VpdF9wcmUnXSA9IHN1YmNpcmN1aXQuY29weSgpCgogICAgICAgICAgICBzdWJjaXJjdWl0cy5hcHBlbmQoc3ViY2lyY3VpdCkKICAgICAgICAgICAgYmxvY2tfZGF0YXMuYXBwZW5kKGJsb2NrX2RhdGEpCgogICAgICAgICMgUGVyZm9ybSBXb3JrCiAgICAgICAgaWYgJ2V4ZWN1dG9yJyBpbiBkYXRhOiAgIyBJbiBQYXJhbGxlbAogICAgICAgICAgICBmb3IgYmxvY2tfZGF0YSBpbiBibG9ja19kYXRhczoKICAgICAgICAgICAgICAgIGJsb2NrX2RhdGFbJ2V4ZWN1dG9yJ10gPSBkYXRhWydleGVjdXRvciddCiAgICAgICAgICAgIGNsaWVudCA9IGdldF9jbGllbnQoKQogICAgICAgICAgICBjb21wbGV0ZWRfc3ViY2lyY3VpdHMgPSBbXQogICAgICAgICAgICBjb21wbGV0ZWRfYmxvY2tfZGF0YXMgPSBbXQogICAgICAgICAgICBmdXR1cmVzID0gW10KICAgICAgICAgICAgc3ViY19mdXR1cmVzID0gY2xpZW50LnNjYXR0ZXIoc3ViY2lyY3VpdHMpCiAgICAgICAgICAgIGRhdGFfZnV0dXJlcyA9IGNsaWVudC5zY2F0dGVyKGJsb2NrX2RhdGFzKQogICAgICAgICAgICBmb3Igc3ViY2lyY3VpdCwgYmxvY2tfZGF0YSBpbiB6aXAoc3ViY19mdXR1cmVzLCBkYXRhX2Z1dHVyZXMpOgogICAgICAgICAgICAgICAgZnV0dXJlID0gY2xpZW50LnN1Ym1pdCgKICAgICAgICAgICAgICAgICAgICBfc3ViX2RvX3dvcmssCiAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wX2JvZHksCiAgICAgICAgICAgICAgICAgICAgc3ViY2lyY3VpdCwKICAgICAgICAgICAgICAgICAgICBibG9ja19kYXRhLAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgZnV0dXJlcy5hcHBlbmQoZnV0dXJlKQogICAgICAgICAgICBzZWNlZGUoKQogICAgICAgICAgICBjbGllbnQuZ2F0aGVyKGZ1dHVyZXMpCiAgICAgICAgICAgIHJlam9pbigpCiAgICAgICAgICAgIGZvciBmdXR1cmUgaW4gZnV0dXJlczoKICAgICAgICAgICAgICAgIHgsIHkgPSBmdXR1cmUucmVzdWx0KCkKICAgICAgICAgICAgICAgIGNvbXBsZXRlZF9zdWJjaXJjdWl0cy5hcHBlbmQoeCkKICAgICAgICAgICAgICAgIGNvbXBsZXRlZF9ibG9ja19kYXRhcy5hcHBlbmQoeSkKCiAgICAgICAgZWxzZTogICMgU2VxdWVudGlhbGx5CiAgICAgICAgICAgIGNvbXBsZXRlZF9zdWJjaXJjdWl0cyA9IFtdCiAgICAgICAgICAgIGNvbXBsZXRlZF9ibG9ja19kYXRhcyA9IFtdCiAgICAgICAgICAgIGZvciBzdWJjaXJjdWl0LCBibG9ja19kYXRhIGluIHppcChzdWJjaXJjdWl0cywgYmxvY2tfZGF0YXMpOgogICAgICAgICAgICAgICAgeCwgeSA9IF9zdWJfZG9fd29yayhzZWxmLmxvb3BfYm9keSwgc3ViY2lyY3VpdCwgYmxvY2tfZGF0YSkKICAgICAgICAgICAgICAgIGNvbXBsZXRlZF9zdWJjaXJjdWl0cy5hcHBlbmQoeCkKICAgICAgICAgICAgICAgIGNvbXBsZXRlZF9ibG9ja19kYXRhcy5hcHBlbmQoeSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICAgICAjIFByb2Nlc3Mgd29yawogICAgICAgIGZvciBpLCAoY3ljbGUsIG9wKSBpbiBlbnVtZXJhdGUoYmxvY2tzKToKICAgICAgICAgICAgc3ViY2lyY3VpdCA9IGNvbXBsZXRlZF9zdWJjaXJjdWl0c1tpXQo8fGZpbV9lbmR8Pg=="]
["74aac6cb5490f5c50e424083b01f497bc007b1a5-2","74aac6cb5490f5c50e424083b01f497bc007b1a5","PHxmaW1fcHJlZml4fD4KIiIiClRoaXMgY2xhc3MgbW9kZWxzIHRoZSBjb2RlY2FkZW15IGxvZ2luIHBhZ2UuClVSTDogbG9naW4KIiIiCmZyb20gLkJhc2VfUGFnZSBpbXBvcnQgQmFzZV9QYWdlCmZyb20gLmNvZGVjYWRlbXlfbG9naW5fcGFnZV9vYmplY3QgaW1wb3J0IENvZGVjYWRlbXlfTG9naW5fUGFnZV9PYmplY3QKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppbXBvcnQgY29uZi50ZXN0X2NvZGVjYWRlbXlfY29uZiBhcyBjb25mCgpjbGFzcyBDb2RlY2FkZW15X0xvZ2luX1BhZ2UoQmFzZV9QYWdlLCBDb2RlY2FkZW15X0xvZ2luX1BhZ2VfT2JqZWN0KToKICAgICJQYWdlIE9iamVjdCBmb3IgdGhlIENvZGVjYWRlbXkgTG9naW4gcGFnZSIKPHxmaW1fZW5kfD4="]
["7462357178a34d09fe6cae483022e1f1a32d16f4-3","7462357178a34d09fe6cae483022e1f1a32d16f4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAoKcGF0aF9sb2cgPSAnbG9nLycKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIHN1bW1hcnkodHJpYWxzLCBuX2VzdGltYXRvcnNfbHN0LCBzY29yZV92YWxpZCk6CiAgICBkZiA9IHBkLkRhdGFGcmFtZSh0cmlhbHMudmFscykKICAgIGRmWyd0cmFpbiddID0gdHJpYWxzLmxvc3NlcygpCiAgICBkZlsnbl9lc3RpbWF0b3JzJ10gPSBuX2VzdGltYXRvcnNfbHN0Cjx8ZmltX2VuZHw+"]
["74445d3f6bdb2a971d262898e6980c11df916e44-3","74445d3f6bdb2a971d262898e6980c11df916e44","PHxmaW1fcHJlZml4fD4KCgpkZWYgdHdvX3N1bV9oYXNoX21ldGhvZChpbnB1dF9hcnJheSwgcmVxZF9zdW0pOgogICAgIiIiVHdvIHN1bSB1c2luZyBhIGhhc2guCgogICAgQ29tcGxleGl0eQogICAgLS0tLS0tLS0tLQogICAgdGltZTogTyhsZW4oaW5wdXRfYXJyYXkpKQogICAgc3BhY2U6IE8obGVuKGlucHV0X2FycmF5KSkKCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBpbnB1dF9hcnJheTogbGlzdAogICAgcmVxZF9zdW06IGludCAKCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCjx8ZmltX2hvbGV8PgogICAgZm9yIG51bWJlciBpbiBpbnB1dF9hcnJheToKICAgICAgICBpZiAocmVxZF9zdW0gLSBudW1iZXIpIGluIHR3b19zdW1faGFzaDoKICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICB0d29fc3VtX2hhc2guYWRkKG51bWJlcikKICAgIHJldHVybiBGYWxzZQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBleGFtcGxlX2FycmF5ID0gWzEwLCAxMDIsIDEsIDQsIDYsIDIsIDMsIDRdCiAgICBhc3NlcnQgdHdvX3N1bV9oYXNoX21ldGhvZChleGFtcGxlX2FycmF5LCA1KQogICAgYXNzZXJ0IHR3b19zdW1faGFzaF9tZXRob2QoZXhhbXBsZV9hcnJheSwgOSkKICAgIGFzc2VydCBub3QgdHdvX3N1bV9oYXNoX21ldGhvZChleGFtcGxlX2FycmF5LCAtMikKPHxmaW1fc3VmZml4fD4KICAgIGJvb2w6IElmIHRoZSB0d28gc3VtIGV4aXN0cwoKICAgICIiIgogICAgdHdvX3N1bV9oYXNoID0gc2V0KCkKPHxmaW1fZW5kfD4="]
["5ab7f80cd3e934f74b72bc6e657f0f2c3692ad8c-4","5ab7f80cd3e934f74b72bc6e657f0f2c3692ad8c","PHxmaW1fcHJlZml4fD4KQk9BUkRfS0VZID0gImJvYXJkIgpZT1VfS0VZID0gInlvdSIKU05BS0VTX0tFWSA9ICJzbmFrZXMiCkJPRFlfS0VZID0gImJvZHkiCkZPT0RfS0VZID0gImZvb2QiCkhFSUdIVF9LRVkgPSAiaGVpZ2h0IgpXSURUSF9LRVkgPSAid2lkdGgiCklEX0tFWSA9ICdpZCcKVFVSTl9LRVkgPSAndHVybicKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpIRUFMVEhfS0VZID0gJ2hlYWx0aCcKPHxmaW1fZW5kfD4="]
["7005aa3a3041817e175384fbbceb1b3260504d79-5","7005aa3a3041817e175384fbbceb1b3260504d79","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgppbXBvcnQgbnVtcHkgYXMgbnAKCgpkZWYgcmVhZF9zdTIoc3UyX2ZpbGVuYW1lLCBsb2c9Tm9uZSwgZGVidWc9RmFsc2UpOgogICAgbW9kZWwgPSBTVTJSZWFkZXIobG9nPWxvZywgZGVidWc9ZGVidWcpCiAgICB1bnVzZWRfbmRpbSwgbm9kZXMsIGVsZW1lbnRzLCByZWdpb25zID0gbW9kZWwucmVhZF9zdTIoc3UyX2ZpbGVuYW1lKQogICAgI21vZGVsLnRvX2NhcnQzZCgpCiAgICByZXR1cm4gbW9kZWwsIG5vZGVzLCBlbGVtZW50cywgcmVnaW9ucwoKY2xhc3MgU1UyUmVhZGVyKG9iamVjdCk6CiAgICBldHlwZV9ubm9kZXNfbWFwID0gewogICAgICAgICNMaW5lICAgICAgIDMKICAgICAgICAjVHJpYW5nbGUgICA1CiAgICAgICAgI1F1YWRyaWxhdGVyYWwgIDkKICAgICAgICAjVGV0cmFoZWRyYWwgICAgMTAKICAgICAgICAjSGV4YWhlZHJhbCAxMgogICAgICAgICNXZWRnZSAgICAgIDEzCiAgICAgICAgI1B5cmFtaWQgICAgMTQKICAgICAgICAzIDogMiwKICAgICAgICA1IDogMywKICAgICAgICA5IDogNCwKICAgICAgICAxMCA6IDQsCiAgICAgICAgMTIgOiA4LAogICAgICAgIDEzIDogNiwKICAgICAgICAxNCA6IDUsCiAgICB9CiAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nPU5vbmUsIGRlYnVnPUZhbHNlKToKICAgICAgICBzZWxmLmxvZyA9IGxvZwogICAgICAgIHNlbGYuZGVidWcgPSBkZWJ1ZwogICAgICAgIHNlbGYuc3UyX2ZpbGVuYW1lID0gTm9uZQoKICAgIGRlZiByZWFkXzJkKHNlbGYsIHN1Ml9maWxlLCBuZGltKToKICAgICAgICAjIGVsZW1lbnRzCiAgICAgICAgbmVsZW0gPSBpbnQoc3UyX2ZpbGUucmVhZGxpbmUoKS5zcGxpdCgnPScpWzFdKQogICAgICAgIHRyaXMgPSBbXQogICAgICAgIHF1YWRzID0gW10KICAgICAgICBmb3IgdW51c2VkX25lIGluIHJhbmdlKG5lbGVtKToKICAgICAgICAgICAgIyB3aGF0J3MgdGhlIDB0aCBzbG90PwogICAgICAgICAgICAjTGluZSAgICAgICAgICAgMwogICAgICAgICAgICAjVHJpYW5nbGUgICAgICAgNQogICAgICAgICAgICAjUXVhZHJpbGF0ZXJhbCAgOQogICAgICAgICAgICAjVGV0cmFoZWRyYWwgICAgMTAKICAgICAgICAgICAgI0hleGFoZWRyYWwgICAgIDEyCiAgICAgICAgICAgICNXZWRnZSAgICAgICAgICAxMwogICAgICAgICAgICAjUHlyYW1pZCAgICAgICAgMTQKICAgICAgICAgICAgZGF0YSA9IHN1Ml9maWxlLnJlYWRsaW5lKCkuc3BsaXQoKVs6LTFdCiAgICAgICAgICAgIGV0eXBlID0gZGF0YVswXQogICAgICAgICAgICBub2RlcyA9IGRhdGFbMTpdCiAgICAgICAgICAgIGlmIGV0eXBlID09ICc5JzoKICAgICAgICAgICAgICAgIGFzc2VydCBsZW4obm9kZXMpID09IDQsIG5vZGVzCiAgICAgICAgICAgICAgICBxdWFkcy5hcHBlbmQobm9kZXMpCiAgICAgICAgICAgIGVsaWYgZXR5cGUgPT0gJzUnOgogICAgICAgICAgICAgICAgYXNzZXJ0IGxlbihub2RlcykgPT0gMywgbm9kZXMKICAgICAgICAgICAgICAgIHRyaXMuYXBwZW5kKG5vZGVzKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcihldHlwZSkKCiAgICAgICAgdHJpcyA9IG5wLmFzYXJyYXkodHJpcywgZHR5cGU9J2ludDMyJykKICAgICAgICBxdWFkcyA9IG5wLmFzYXJyYXkocXVhZHMsIGR0eXBlPSdpbnQzMicpCiAgICAgICAgI3ByaW50KCd0cmlzID0nLCB0cmlzKQogICAgICAgICNwcmludCgncXVhZHMgPScsIHF1YWRzKQo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgc2xpbmUgPSBzdTJfZmlsZS5yZWFkbGluZSgpLnNwbGl0KCkKICAgICAgICAgICAgYXNzZXJ0IGxlbihzbGluZSkgPT0gMywgc2xpbmUKICAgICAgICAgICAgeCwgeSwgdW51c2VkX3ogPSBzbGluZQogICAgICAgICAgICAjcHJpbnQoeCwgeSwgeikKICAgICAgICAgICAgbm9kZXNbaW5vZGUsIDpdID0gW2Zsb2F0KHgpLCBmbG9hdCh5KV0KCiAgICAgICAgIyBib3VuZGFyeSBjb25kaXRpb25zCiAgICAgICAgbm1hcmsgPSBpbnQoc3UyX2ZpbGUucmVhZGxpbmUoKS5zcGxpdCgnPScpWzFdKQogICAgICAgIGZvciB1bnVzZWRfaW1hcmsgaW4gcmFuZ2Uobm1hcmspOgogICAgICAgICAgICB1bnVzZWRfbWFya2VyID0gc3UyX2ZpbGUucmVhZGxpbmUoKS5zcGxpdCgnPScpWzFdLnN0cmlwKCkKICAgICAgICAgICAgbmVsZW1lbnRzX21hcmsgPSBpbnQoc3UyX2ZpbGUucmVhZGxpbmUoKS5zcGxpdCgnPScpWzFdKQoKICAgICAgICAgICAgaWYgbmRpbSA9PSAyOgogICAgICAgICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICAgICAgICAgI25wLnplcm9zKChuZWxlbWVudHNfbWFyaywgMiksIGR0eXBlPSdpbnQzMicpCiAgICAgICAgICAgICAgICBmb3IgdW51c2VkX25lIGluIHJhbmdlKG5lbGVtZW50c19tYXJrKToKICAgICAgICAgICAgICAgICAgICAjIHdoYXQgYXJlIHRoZSAzIHNsb3RzPwogICAgICAgICAgICAgICAgICAgICNMaW5lICAgICAgICAgICgyRCkgICAgIDMKICAgICAgICAgICAgICAgICAgICAjVHJpYW5nbGUgICAgICAoM0QpICAgICA1CiAgICAgICAgICAgICAgICAgICAgI1F1YWRyaWxhdGVyYWwgKDNEKSAgICAgOQogICAgICAgICAgICAgICAgICAgIHNsaW5lID0gc3UyX2ZpbGUucmVhZGxpbmUoKS5zcGxpdCgpCiAgICAgICAgICAgICAgICAgICAgZXR5cGUgPSBpbnQoc2xpbmVbMF0pCiAgICAgICAgICAgICAgICAgICAgaWYgZXR5cGUgPT0gMzoKICAgICAgICAgICAgICAgICAgICAgICAgZXR5cGUsIG4xLCBuMiA9IHNsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChbbjEsIG4yXSkKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKGV0eXBlKQoKICAgICAgICBhc3NlcnQgbGVuKHRyaXMpID4gMCBvciBsZW4ocXVhZHMpID4gMAogICAgICAgIGVsZW1lbnRzID0gewogICAgICAgICAgICA1IDogdHJpcywKICAgICAgICAgICAgOSA6IHF1YWRzLAogICAgICAgIH0KICAgICAgICByZWdpb25zID0gezMgOiBsaW5lc30KICAgICAgICByZXR1cm4gbm9kZXMsIGVsZW1lbnRzLCByZWdpb25zCgogICAgZGVmIHJlYWRfM2Qoc2VsZiwgc3UyX2ZpbGUsIHVudXNlZF9uZGltKToKICAgICAgICBuZWxlbSA9IGludChzdTJfZmlsZS5yZWFkbGluZSgpLnNwbGl0KCc9JylbMV0pCiAgICAgICAgdGV0cyA9IFtdCiAgICAgICAgaGV4cyA9IFtdCiAgICAgICAgd2VkZ2VzID0gW10KICAgICAgICAjcGVudHMgPSBbXQogICAgICAgIHB5cmFtaWRzID0gW10KICAgICAgICBmb3IgdW51c2VkX25lIGluIHJhbmdlKG5lbGVtKToKICAgICAgICAgICAgZGF0YSA9IHN1Ml9maWxlLnJlYWRsaW5lKCkuc3BsaXQoKVsxOi0xXQogICAgICAgICAgICBldHlwZSA9IGRhdGFbMF0KICAgICAgICAgICAgbm9kZXMgPSBkYXRhWzE6XQogICAgICAgICAgICBpZiBldHlwZSA9PSAnMTAnOgogICAgICAgICAgICAgICAgdGV0cy5hcHBlbmQobm9kZXMpCiAgICAgICAgICAgIGVsaWYgZXR5cGUgPT0gJzEyJzoKICAgICAgICAgICAgICAgIGhleHMuYXBwZW5kKG5vZGVzKQogICAgICAgICAgICBlbGlmIGV0eXBlID09ICcxMyc6CiAgICAgICAgICAgICAgICB3ZWRnZXMuYXBwZW5kKG5vZGVzKQogICAgICAgICAgICBlbGlmIGV0eXBlID09ICcxNCc6CiAgICAgICAgICAgICAgICBweXJhbWlkcy5hcHBlbmQobm9kZXMpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKGV0eXBlKQogICAgICAgIHRldHMgPSBucC5hcnJheSh0ZXRzLCBkdHlwZT0naW50MzInKQogICAgICAgICNwZW50cyA9IG5wLmFycmF5KHBlbnRzLCBkdHlwZT0naW50MzInKQogICAgICAgIHdlZGdlcyA9IG5wLmFycmF5KHdlZGdlcywgZHR5cGU9J2ludDMyJykKICAgICAgICBweXJhbWlkcyA9IG5wLmFycmF5KHB5cmFtaWRzLCBkdHlwZT0naW50MzInKQogICAgICAgIGVsZW1lbnRzID0gewogICAgICAgICAgICAxMCA6IHRldHMsCiAgICAgICAgICAgIDEyIDogaGV4cywKICAgICAgICAgICAgMTMgOiB3ZWRnZXMsCiAgICAgICAgICAgIDE0IDogcHlyYW1pZHMsCiAgICAgICAgfQoKICAgICAgICBubm9kZXMgPSBpbnQoc3UyX2ZpbGUucmVhZGxpbmUoKS5zcGxpdCgnPScpWzFdKQogICAgICAgIG5vZGVzID0gbnAuemVyb3MoKG5lbGVtLCAyKSwgZHR5cGU9J2ludDMyJykKICAgICAgICBmb3IgaW5vZGUgaW4gcmFuZ2Uobm5vZGVzKToKICAgICAgICAgICAgeCwgeSwgeiA9IHN1Ml9maWxlLnJlYWRsaW5lKCkuc3BsaXQoKVs6LTFdCiAgICAgICAgICAgIG5vZGVzW2lub2RlLCA6XSA9IFt4LCB5LCB6XQoKICAgICAgICBubWFyayA9IGludChzdTJfZmlsZS5yZWFkbGluZSgpLnNwbGl0KCc9JylbMV0pCiAgICAgICAgZm9yIHVudXNlZF9pbWFyayBpbiByYW5nZShubWFyayk6CiAgICAgICAgICAgIHVudXNlZF9tYXJrZXIgPSBzdTJfZmlsZS5yZWFkbGluZSgpLnNwbGl0KCc9JylbMV0uc3RyaXAoKQogICAgICAgICAgICBuZWxlbWVudHNfbWFyayA9IGludChzdTJfZmlsZS5yZWFkbGluZSgpLnNwbGl0KCc9JylbMV0pCiAgICAgICAgICAgIHRyaXMgPSBbXQogICAgICAgICAgICBxdWFkcyA9IFtdCiAgICAgICAgICAgIGZvciB1bnVzZWRfbmUgaW4gcmFuZ2UobmVsZW1lbnRzX21hcmspOgogICAgICAgICAgICAgICAgZGF0YSA9IHN1Ml9maWxlLnJlYWRsaW5lKCkuc3BsaXQoKVsxOi0xXQogICAgICAgICAgICAgICAgZXR5cGUgPSBkYXRhWzBdCiAgICAgICAgICAgICAgICBub2RlcyA9IGRhdGFbMTpdCiAgICAgICAgICAgICAgICBpZiBldHlwZSA9PSAnOSc6CiAgICAgICAgICAgICAgICAgICAgcXVhZHMuYXBwZW5kKG5vZGVzKQogICAgICAgICAgICAgICAgZWxpZiBldHlwZSA9PSAnNSc6CiAgICAgICAgICAgICAgICAgICAgdHJpcy5hcHBlbmQobm9kZXMpCiAgICAgICAgICAgIHRyaXMgPSBucC5hcnJheSh0cmlzLCBkdHlwZT0naW50MzInKQogICAgICAgICAgICBxdWFkcyA9IG5wLmFycmF5KHF1YWRzLCBkdHlwZT0naW50MzInKQoKICAgICAgICByZWdpb25zID0gewogICAgICAgICAgICA1IDogdHJpcywKICAgICAgICAgICAgOSA6IHF1YWRzLAogICAgICAgIH0KICAgICAgICByZXR1cm4gbm9kZXMsIGVsZW1lbnRzLCByZWdpb25zCgogICAgZGVmIHJlYWRfc3UyKHNlbGYsIHN1Ml9maWxlbmFtZSk6CiAgICAgICAgc2VsZi5zdTJfZmlsZW5hbWUgPSBzdTJfZmlsZW5hbWUKICAgICAgICB3aXRoIG9wZW4oc3UyX2ZpbGVuYW1lLCAncicpIGFzIHN1Ml9maWxlOgogICAgICAgICAgICBuZGltID0gaW50KHN1Ml9maWxlLnJlYWRsaW5lKCkuc3BsaXQoJz0nKVsxXSkKCiAgICAgICAgICAgIGlmIG5kaW0gPT0gMjoKICAgICAgICAgICAgICAgIG5vZGVzLCBlbGVtZW50cywgcmVnaW9ucyA9IHNlbGYucmVhZF8yZChzdTJfZmlsZSwgbmRpbSkKICAgICAgICAgICAgZWxpZiBuZGltID09IDM6CiAgICAgICAgICAgICAgICBub2RlcywgZWxlbWVudHMsIHJlZ2lvbnMgPSBzZWxmLnJlYWRfM2Qoc3UyX2ZpbGUsIG5kaW0pCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IobmRpbSkKICAgICAgICByZXR1cm4gbmRpbSwgbm9kZXMsIGVsZW1lbnRzLCByZWdpb25zCgogICAgZGVmIHdyaXRlX3N1MihzZWxmLCBzdTJfZmlsZW5hbWUsIG5vZGVzLCBlbGVtZW50cywgdW51c2VkX3JlZ2lvbnMpOgogICAgICAgIG5ub2RlcywgbmRpbSA9IG5vZGVzLnNoYXBlCiAgICAgICAgbm5vZGVzLCBuZGltID0gbm9kZXMuc2hhcGUKICAgICAgICB3aXRoIG9wZW4oc3UyX2ZpbGVuYW1lLCAnd2InKSBhcyBzdTJfZmlsZToKICAgICAgICAgICAgc3UyX2ZpbGUud3JpdGUoJ05ESU0gPSAlaVxuJyAlIG5kaW0pCiAgICAgICAgICAgIGlmIG5kaW0gPT0gMjoKICAgICAgICAgICAgICAgIGZvciBldHlwZSwgZWxlbWVudHNpIGluIHNvcnRlZChlbGVtZW50cy5pdGVtcygpKToKICAgICAgICAgICAgICAgICAgICBlbGVtZW50X251bSA9IHNlbGYuZXR5cGVfbm5vZGVzX21hcFtldHlwZV0KICAgICAgICAgICAgICAgICAgICBmbXQgPSAnJSVzJyArICcgJSVzJyAqIChlbGVtZW50X251bS0xKSArICdcbicKICAgICAgICAgICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBlbGVtZW50c2k6CiAgICAgICAgICAgICAgICAgICAgICAgIHN1Ml9maWxlLndyaXRlKGZtdCAlIGVsZW1lbnQpCgogICAgICAgICAgICAgICAgc3UyX2ZpbGUud3JpdGUoJ05QT0lOVFMgPSAlaVxuJyAlIG5ub2RlcykKICAgICAgICAgICAgICAgIGZvciBpbm9kZSwgbm9kZSBpbiBlbnVtZXJhdGUobm9kZXMpOgogICAgICAgICAgICAgICAgICAgIHN1Ml9maWxlLndyaXRlKCclaSAlaSAlaVxuJyAlIChub2RlWzBdLCBub2RlWzFdLCBpbm9kZSkpCiAgICAgICAgICAgIGVsaWYgbmRpbSA9PSAzOgogICAgICAgICAgICAgICAgc3UyX2ZpbGUud3JpdGUoJ05QT0lOVFMgPSAlaVxuJyAlIG5ub2RlcykKICAgICAgICAgICAgICAgIGZvciBpbm9kZSwgbm9kZSBpbiBlbnVtZXJhdGUobm9kZXMpOgogICAgICAgICAgICAgICAgICAgIHN1Ml9maWxlLndyaXRlKCclaSAlaSAlaSAlaVxuJyAlIChub2RlWzBdLCBub2RlWzFdLCBub2RlWzJdLCBpbm9kZSkpCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgIG5ub2RlcyA9IGludChzdTJfZmlsZS5yZWFkbGluZSgpLnNwbGl0KCc9JylbMV0pCiAgICAgICAgbm9kZXMgPSBucC56ZXJvcygobmVsZW0sIDIpLCBkdHlwZT0naW50MzInKQogICAgICAgIGZvciBpbm9kZSBpbiByYW5nZShubm9kZXMpOgo8fGZpbV9lbmR8Pg=="]
["56371805674336b5620f348f872cffe32dbf14bd-1","56371805674336b5620f348f872cffe32dbf14bd","PHxmaW1fcHJlZml4fD4KIiIiClRoaXMgc2ltcGxlIGFuaW1hdGlvbiBleGFtcGxlIHNob3dzIGhvdyB0byBib3VuY2UgYSByZWN0YW5nbGUKb24gdGhlIHNjcmVlbi4KCkl0IGFzc3VtZXMgYSBwcm9ncmFtbWVyIGtub3dzIGhvdyB0byBjcmVhdGUgZnVuY3Rpb25zIGFscmVhZHkuCgpJdCBkb2VzIG5vdCBhc3N1bWUgYSBwcm9ncmFtbWVyIGtub3dzIGhvdyB0byBjcmVhdGUgY2xhc3Nlcy4gSWYgeW91IGRvIGtub3cKaG93IHRvIGNyZWF0ZSBjbGFzc2VzLCBzZWUgdGhlIHN0YXJ0aW5nIHRlbXBsYXRlIGZvciBhIGJldHRlciBleGFtcGxlOgoKaHR0cDovL2FyY2FkZS5hY2FkZW15L2V4YW1wbGVzL3N0YXJ0aW5nX3RlbXBsYXRlLmh0bWwKCk9yIGxvb2sgdGhyb3VnaCB0aGUgZXhhbXBsZXMgc2hvd2luZyBob3cgdG8gdXNlIFNwcml0ZXMuCgpBIHZpZGVvIHdhbGstdGhyb3VnaCBvZiB0aGlzIGV4YW1wbGUgaXMgYXZhaWxhYmxlIGF0OgpodHRwczovL3ZpbWVvLmNvbS8xNjgwNjM4NDAKCklmIFB5dGhvbiBhbmQgQXJjYWRlIGFyZSBpbnN0YWxsZWQsIHRoaXMgZXhhbXBsZSBjYW4gYmUgcnVuIGZyb20gdGhlIGNvbW1hbmQgbGluZSB3aXRoOgpweXRob24gLW0gYXJjYWRlLmV4YW1wbGVzLmJvdW5jaW5nX3JlY3RhbmdsZQoKIiIiCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgYXJjYWRlCmltcG9ydCByYW5kb20KaW1wb3J0IG5ldHdvcmt4IGFzIG54CmZyb20gbG9jYWxpemF0aW9uIGltcG9ydCBsb2NhbGl6ZSwgZ2VuZXJhdGVfcHJvYmxlbQpmcm9tIHNlbnNvcl9zZWxlY3Rpb24gaW1wb3J0IGFjdGl2YXRlX3NlbnNvcnMKCnJhbmRvbS5zZWVkKDI3KQoKIyAtLS0gU2V0IHVwIHN0YXRlcwpTVEFURV9JTklUSUFMID0gVHJ1ZQpTVEFURV9SVU5OSU5HID0gRmFsc2UKCiMgLS0tIFNldCB1cCB0aGUgY29uc3RhbnRzCgojIFNpemUgb2YgdGhlIHNjcmVlbgpTQ1JFRU5fV0lEVEggPSA4MDAKU0NSRUVOX0hFSUdIVCA9IDQwMApTQ1JFRU5fVElUTEUgPSAiUUNWZWhpY2xlTmV0d29yayIKCk5VTV9CSVQgPSA2MgpEWCA9IFNDUkVFTl9XSURUSCAvIE5VTV9CSVQKRFkgPSBTQ1JFRU5fSEVJR0hUIC8gTlVNX0JJVApERCA9IChEWCAqKiAyICsgRFkgKiogMikgKiogMC41CgpNQVhfVU5JVCA9IDYzCgojIFNpemUgb2YgdGhlIHJlY3RhbmdsZQpDSVJDTEVfV0lEVEggPSA1MApDSVJDTEVfSEVJR0hUID0gNTAKVkVISUNMRV9XSURUSCA9IDEwMApWRUhJQ0xFX1dJRFRIID0gMTAwCkJBQ0tHUk9VTkQgPSBhcmNhZGUubG9hZF90ZXh0dXJlKCJiZy5wbmciKQoKCiMgQnV0dG9ucwpQTEFZX0JVVFRPTiA9IGFyY2FkZS5TcHJpdGUoInBsYXkucG5nIiwgMC41KQpTVE9QX0JVVFRPTiA9IGFyY2FkZS5TcHJpdGUoInBhdXNlLnBuZyIsIDAuNSkKUkVTRVRfQlVUVE9OID0gYXJjYWRlLlNwcml0ZSgicmVzZXQucG5nIiwgMC41KQoKYnV0dG9uX3Nwcml0ZXMgPSBhcmNhZGUuU3ByaXRlTGlzdCgpCmJ1dHRvbl9zcHJpdGVzLmFwcGVuZChQTEFZX0JVVFRPTikKYnV0dG9uX3Nwcml0ZXMuYXBwZW5kKFNUT1BfQlVUVE9OKQpidXR0b25fc3ByaXRlcy5hcHBlbmQoUkVTRVRfQlVUVE9OKQoKYnRueCA9IHJhbmdlKDUwLCA0MDAsIDUwKQpidG55ID0gNTAKZm9yIGkgaW4gcmFuZ2UobGVuKGJ1dHRvbl9zcHJpdGVzKSk6CiAgICBidXR0b25fc3ByaXRlc1tpXS5jZW50ZXJfeCA9IGJ0bnhbaV0KICAgIGJ1dHRvbl9zcHJpdGVzW2ldLmNlbnRlcl95ID0gYnRueQoKCiMgdmFsaWQgZGlzdGFuY2UKUkFESVVTID0gMjAwCm1vdXNlX3ggPSAtMTAwCm1vdXNlX3kgPSAtMTAwCgojIGNvbG9ycwpBQ1RJVkVfU0VOU09SX0NPTE9SID0gYXJjYWRlLmNvbG9yLkFRVUFNQVJJTkUKQUNUSVZFX1NFTlNPUl9FREdFX0NPTE9SID0gYXJjYWRlLmNvbG9yLkFRVUFNQVJJTkUKTk9OX0FDVElWRV9TRU5TT1JfQ09MT1IgPSBhcmNhZGUuY29sb3IuQVJUSUNIT0tFCk5PTl9BQ1RJVkVfU0VOU09SX0VER0VfQ09MT1IgPSBhcmNhZGUuY29sb3IuQVJUSUNIT0tFClZFSElDTEVfQ09MT1IgPSBhcmNhZGUuY29sb3IuQVVSRU9MSU4KVkVISUNMRV9FREdFX0NPTE9SID0gYXJjYWRlLmNvbG9yLkFVUkVPTElOCkVTVElNQVRJT05fQ09MT1IgPSBhcmNhZGUuY29sb3IuQ09SQUxfUkVECgpjbGFzcyBOb2RlOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHgsIHksIHcsIGM9YXJjYWRlLmNvbG9yLkNBUklCQkVBTl9HUkVFTiwgc2hhcGU9J2NpcmNsZScpOgogICAgICAgIHNlbGYueCA9IHggICMzMiAyMyAyMiAyMwogICAgICAgIHNlbGYueSA9IHkKICAgICAgICBzZWxmLncgPSB3CiAgICAgICAgc2VsZi5jID0gYwogICAgICAgIHNlbGYuc2hhcGUgPSBzaGFwZQogICAgICAgIHNlbGYuZHggPSAxMDAgKiByYW5kb20uY2hvaWNlKFstMSwgMV0pCiAgICAgICAgc2VsZi5keSA9IDEwMCAqIHJhbmRvbS5jaG9pY2UoWy0xLCAxXSkKCiAgICBkZWYgbW92ZShzZWxmLCBkdCk6CgogICAgICAgICMgRmlndXJlIG91dCBpZiB3ZSBoaXQgdGhlIGVkZ2UgYW5kIG5lZWQgdG8gcmV2ZXJzZS4KICAgICAgICBpZiBzZWxmLnggPCBDSVJDTEVfV0lEVEggLy8gMjoKICAgICAgICAgICAgc2VsZi5keCA9IGFicyhzZWxmLmR4KQogICAgICAgIGlmIHNlbGYueCA+IFNDUkVFTl9XSURUSCAtIENJUkNMRV9XSURUSCAvLyAyOgogICAgICAgICAgICBzZWxmLmR4ID0gLWFicyhzZWxmLmR4KQogICAgICAgIGlmIHNlbGYueSA8IENJUkNMRV9IRUlHSFQgLy8gMjoKICAgICAgICAgICAgc2VsZi5keSA9IGFicyhzZWxmLmR5KQogICAgICAgIGlmIHNlbGYueSA+IFNDUkVFTl9IRUlHSFQgLSBDSVJDTEVfSEVJR0hUIC8vIDI6CiAgICAgICAgICAgIHNlbGYuZHkgPSAtYWJzKHNlbGYuZHkpCgogICAgICAgIGR4ID0gKG1vdXNlX3ggLSBzZWxmLngpCiAgICAgICAgZHkgPSAobW91c2VfeSAtIHNlbGYueSkKCiAgICAgICAgaWYgKGR4ICoqIDIgKyBkeSAqKiAyKSAqKiAwLjUgPCAyMDoKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIHJhdGlvID0gMTAwIC8gKGR4KioyICsgZHkqKjIpKiowLjUKICAgICAgICBzZWxmLnggKz0gZHggKiByYXRpbyAqIGR0CiAgICAgICAgc2VsZi55ICs9IGR5ICogcmF0aW8gKiBkdAoKCiAgICBkZWYgcmVuZGVyKHNlbGYpOgogICAgICAgIGlmIHNlbGYuc2hhcGUgPT0gJ2NpcmNsZSc6CiAgICAgICAgICAgIGFyY2FkZS5kcmF3X2NpcmNsZV9maWxsZWQoc2VsZi54LCBzZWxmLnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53LCBjb2xvcj1zZWxmLmMpCiAgICAgICAgZWxpZiBzZWxmLnNoYXBlID09ICdyZWN0JzoKICAgICAgICAgICAgYXJjYWRlLmRyYXdfcmVjdGFuZ2xlX2ZpbGxlZChzZWxmLngsIHNlbGYueSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLncsIHNlbGYudywgc2VsZi5jKQoKY2xhc3MgRWRnZToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBub2RlMSwgbm9kZTIsIHc9MSwgYz1hcmNhZGUuY29sb3IuQ0FSSUJCRUFOX0dSRUVOKToKICAgICAgICBzZWxmLm5vZGUxID0gbm9kZTEKICAgICAgICBzZWxmLm5vZGUyID0gbm9kZTIKICAgICAgICBzZWxmLncgPSB3CiAgICAgICAgc2VsZi5jID0gYwogICAgZGVmIHJlbmRlcihzZWxmKToKICAgICAgICBhcmNhZGUuZHJhd19saW5lKHNlbGYubm9kZTEueCwgc2VsZi5ub2RlMS55LAogICAgICAgICAgICAgICAgc2VsZi5ub2RlMi54LCBzZWxmLm5vZGUyLnksCiAgICAgICAgICAgICAgICBzZWxmLmMsIDIpCgpkZWYgcmFuZG9tX3BvcygpOgogICAgcmV0dXJuIHJhbmRvbS5yYW5kaW50KENJUkNMRV9XSURUSCAvLyAyLCBTQ1JFRU5fV0lEVEggLSBDSVJDTEVfV0lEVEggLy8gMiksIHJhbmRvbS5yYW5kaW50KENJUkNMRV9IRUlHSFQgLy8gMiwgU0NSRUVOX0hFSUdIVCAtIENJUkNMRV9IRUlHSFQgLy8gMikKCmRlZiBjcmVhdGVfcmFuZG9tX25vZGVzKG4sICoqYXJndik6CiAgICByZXQgPSBbXQogICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgICAgeCwgeSA9IHJhbmRvbV9wb3MoKQogICAgICAgIHJldC5hcHBlbmQoTm9kZSh4PXgsIHk9eSwgdz0xMCwgKiphcmd2KSkKICAgIHJldHVybiByZXQKCgpkZWYgZGlzdGFuY2Uobm9kZTEsIG5vZGUyKToKICAgIHJldHVybiAoKG5vZGUxLnggLSBub2RlMi54KSAqKiAyICsgKG5vZGUxLnkgLSBub2RlMi55KSAqKiAyKSAqKiAwLjUKCmRlZiBjcmVhdGVfZWRnZShub2RlczEsIG5vZGVzMiwgcmFkaXVzLCAqKmFyZ3YpOgogICAgZWRnZXMgPSBbXQogICAgZm9yIGkgaW4gcmFuZ2UobGVuKG5vZGVzMSkpOgogICAgICAgIGZvciBqIGluIHJhbmdlKGxlbihub2RlczIpKToKICAgICAgICAgICAgaWYgaSA8PSBqOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgaWYgZGlzdGFuY2Uobm9kZXMxW2ldLCBub2RlczJbal0pIDwgcmFkaXVzOgogICAgICAgICAgICAgICAgZWRnZXMuYXBwZW5kKEVkZ2Uobm9kZXMxW2ldLCBub2RlczJbal0sICoqYXJndikpCiAgICByZXR1cm4gZWRnZXMKCmRlZiByZW5kZXIoZWxlcyk6CiAgICBmb3IgZSBpbiBlbGVzOgogICAgICAgIGUucmVuZGVyKCkKCmRlZiBtb3ZlKG5vZGVzLCBkdCk6CiAgICBmb3IgaSBpbiByYW5nZShsZW4obm9kZXMpKToKICAgICAgICBub2Rlc1tpXS5tb3ZlKGR0KQoKc2Vuc29ycyA9IGNyZWF0ZV9yYW5kb21fbm9kZXMoMTUsIGM9Tk9OX0FDVElWRV9TRU5TT1JfQ09MT1IpCnZlaGljbGVzID0gY3JlYXRlX3JhbmRvbV9ub2RlcygxLCBjPVZFSElDTEVfQ09MT1IpCmFjdGl2ZV9zZW5zb3JfaWRzID0gW10KcHJvYmxlbV9zdHJpbmcgPSAiIgpwcm9ibGVtcyA9IFtdCgpjb3VudGVyID0gMApleCA9IC0xMDAKZXkgPSAtMTAwCgpkZWYgb25fZHJhdyhkZWx0YV90aW1lKToKICAgIGdsb2JhbCB2ZWhpY2xlcwogICAgZ2xvYmFsIHNlbnNvcnMKICAgIGdsb2JhbCBhY3RpdmVfc2Vuc29yX2lkcwogICAgZ2xvYmFsIERYCiAgICBnbG9iYWwgRFkKICAgIGdsb2JhbCBERAogICAgZ2xvYmFsIGNvdW50ZXIKICAgIGdsb2JhbCBleAogICAgZ2xvYmFsIGV5CiAgICBnbG9iYWwgbW91c2VfeAogICAgZ2xvYmFsIG1vdXNlX3kKICAgIGdsb2JhbCBwcm9ibGVtX3N0cmluZwogICAgZ2xvYmFsIHByb2JsZW1zCgogICAgIiIiCiAgICBVc2UgdGhpcyBmdW5jdGlvbiB0byBkcmF3IGV2ZXJ5dGhpbmcgdG8gdGhlIHNjcmVlbi4KICAgICIiIgoKICAgICMgU3RhcnQgdGhlIHJlbmRlci4gVGhpcyBtdXN0IGhhcHBlbiBiZWZvcmUgYW55IGRyYXdpbmcKICAgICMgY29tbWFuZHMuIFdlIGRvIE5PVCBuZWVkIGEgc3RvcCByZW5kZXIgY29tbWFuZC4KICAgIGFyY2FkZS5zdGFydF9yZW5kZXIoKQoKICAgIGFyY2FkZS5kcmF3X3RleHR1cmVfcmVjdGFuZ2xlKFNDUkVFTl9XSURUSCAvLyAyLCBTQ1JFRU5fSEVJR0hUIC8vIDIsIFNDUkVFTl9XSURUSCwgU0NSRUVOX0hFSUdIVCwgQkFDS0dST1VORCkKICAgIGJ1dHRvbl9zcHJpdGVzLmRyYXcoKQoKICAgIGFyY2FkZS5kcmF3X2NpcmNsZV9maWxsZWQobW91c2VfeCwgbW91c2VfeSwKICAgICAgICAgICAgMTAsIGNvbG9yPWFyY2FkZS5jb2xvci5XSElURSkKICAgICMKICAgICMgcGxvdCBhbGwgc2Vuc29yICAoaW5jbHVkZSBub24tYWN0aXZlIGFuZCBhY3RpdmUgc2Vuc29yKQogICAgIwoKICAgICMgYWxsIGVkZ2VzCiAgICBlZGdlcyA9IGNyZWF0ZV9lZGdlKHNlbnNvcnMsIHNlbnNvcnMsIDIwMCwgYz1OT05fQUNUSVZFX1NFTlNPUl9FREdFX0NPTE9SKQogICAgcmVuZGVyKGVkZ2VzKQoKICAgICMgYWxsIHNlbnNvcnMKICAgIHJlbmRlcihzZW5zb3JzKQoKICAgICMKICAgICMgaW5pdGlhbCBzdGF0ZQogICAgIwogICAgZ2xvYmFsIFNUQVRFX0lOSVRJQUwKCiAgICBpZiBTVEFURV9JTklUSUFMOgogICAgICAgIHNlbnNvcnMgPSBjcmVhdGVfcmFuZG9tX25vZGVzKDE1LCBjPU5PTl9BQ1RJVkVfU0VOU09SX0NPTE9SKQogICAgICAgIHZlaGljbGVzID0gY3JlYXRlX3JhbmRvbV9ub2RlcygxLCBjPVZFSElDTEVfQ09MT1IpCiAgICAgICAgYXJjYWRlLmRyYXdfdGV4dCgiQXBwbGF5IHNlbnNvciBwbGFjZW1lbnQgYWxnb3JpdGhtLi4uIiwgU0NSRUVOX1dJRFRILy8yLCBTQ1JFRU5fSEVJR0hULy8yLCBhcmNhZGUuY29sb3IuQkxBQ0ssIDEyKQogICAgICAgIGlzX2FjdGl2YXRlID0gYWN0aXZhdGVfc2Vuc29ycyhzZW5zb3JzLCBSQURJVVMpCgogICAgICAgICMgc2V0IHNlbnNvciBjb2xvcnMKICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oaXNfYWN0aXZhdGUpKToKICAgICAgICAgICAgc2Vuc29yc1tpXS5jID0gQUNUSVZFX1NFTlNPUl9DT0xPUiBpZiBpc19hY3RpdmF0ZVtpXSBlbHNlIE5PTl9BQ1RJVkVfU0VOU09SX0NPTE9SCiAgICAgICAgICAgIGlmIGlzX2FjdGl2YXRlW2ldOgogICAgICAgICAgICAgICAgYWN0aXZlX3NlbnNvcl9pZHMuYXBwZW5kKGkpCgogICAgICAgIHJlbmRlcihzZW5zb3JzKQogICAgICAgIFNUQVRFX0lOSVRJQUwgPSBGYWxzZQogICAgICAgIHJldHVybgoKICAgICMKICAgICMgcGxvdCBhY3RpdmUgc2Vuc29ycwogICAgIwogICAgYWN0aXZlX3NlbnNvcnMgPSBbc2Vuc29yc1tpXSBmb3IgaSBpbiByYW5nZShsZW4oc2Vuc29ycykpIGlmIGkgaW4gYWN0aXZlX3NlbnNvcl9pZHNdCiAgICByZW5kZXIoYWN0aXZlX3NlbnNvcnMpCgogICAgIyBwbG90IGFjdGl2ZSBzZW5zb3IgZWRnZQogICAgYWN0aXZlX2VkZ2VzID0gY3JlYXRlX2VkZ2UoYWN0aXZlX3NlbnNvcnMsIGFjdGl2ZV9zZW5zb3JzLCBSQURJVVMpCiAgICByZW5kZXIoYWN0aXZlX2VkZ2VzKQoKICAgIGlmIFNUQVRFX1JVTk5JTkc6CiAgICAgICAgIwogICAgICAgICMgcGxvdCB2ZWhpY2xlCiAgICAgICAgIwogICAgICAgIG1vdmUodmVoaWNsZXMsIGRlbHRhX3RpbWUpCiAgICAjIHBsb3QgdmVoaWNsZSBtb3ZpbmcKICAgIGVkZ2VzID0gY3JlYXRlX2VkZ2UoYWN0aXZlX3NlbnNvcnMsIHZlaGljbGVzLCBSQURJVVMsIGM9VkVISUNMRV9FREdFX0NPTE9SKQogICAgcmVuZGVyKGVkZ2VzKQoKICAgICMgcGVyZm9ybSBlc3RpbWF0aW9uCiAgICBhcmNhZGUuZHJhd190ZXh0KHByb2JsZW1fc3RyaW5nLCB2ZWhpY2xlc1swXS54LCB2ZWhpY2xlc1swXS55LCBhcmNhZGUuY29sb3IuV0hJVEUsIDgpCiAgICBpZiBjb3VudGVyID49IDIwOgogICAgICAgIHByb2JsZW1zID0gZ2VuZXJhdGVfcHJvYmxlbSh2ZWhpY2xlc1swXSwgYWN0aXZlX3NlbnNvcnMsIFJBRElVUykKICAgICAgICBwcm9ibGVtX3N0cmluZyA9ICJcbiIuam9pbihbImRpcyAlZCBsb2MgJWQgbG9jICVkIiVwIGZvciBwIGluIHByb2JsZW1zXVs6bGVuKGVkZ2VzKV0pCiAgICAgICAgZXgsIGV5ID0gbG9jYWxpemUocHJvYmxlbXMsIERYLCBEWSkKICAgICAgICBjb3VudGVyID0gMAogICAgYXJjYWRlLmRyYXdfcmVjdGFuZ2xlX291dGxpbmUoZXgrRFgvMiwgZXkrRFkvMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEWCo0LCBEWSo4LCBjb2xvcj1FU1RJTUFUSU9OX0NPTE9SKQoKCiAgICAjIHBsb3QKICAgIHJlbmRlcih2ZWhpY2xlcykKCgogICAgY291bnRlciArPSAxCgogICAgIyBNb2RpZnkgcmVjdGFuZ2xlcyBwb3NpdGlvbiBiYXNlZCBvbiB0aGUgZGVsdGEKICAgICMgdmVjdG9yLiAoRGVsdGEgbWVhbnMgY2hhbmdlLiBZb3UgY2FuIGFsc28gdGhpbmsKICAgICMgb2YgdGhpcyBhcyBvdXIgc3BlZWQgYW5kIGRpcmVjdGlvbi4pCiAgICAjIG9uX2RyYXcuY2VudGVyX3ggKz0gb25fZHJhdy5kZWx0YV94ICogZGVsdGFfdGltZQogICAgIyBvbl9kcmF3LmNlbnRlcl95ICs9IG9uX2RyYXcuZGVsdGFfeSAqIGRlbHRhX3RpbWUKCiAgICAjIEZpZ3VyZSBvdXQgaWYgd2UgaGl0IHRoZSBlZGdlIGFuZCBuZWVkIHRvIHJldmVyc2UuCiAgICAjIGlmIG9uX2RyYXcuY2VudGVyX3ggPCBDSVJDTEVfV0lEVEggLy8gMiBcCiAgICAjICAgICAgICAgb3Igb25fZHJhdy5jZW50ZXJfeCA+IFNDUkVFTl9XSURUSCAtIENJUkNMRV9XSURUSCAvLyAyOgogICAgIyAgICAgb25fZHJhdy5kZWx0YV94ICo9IC0xCiAgICAjIGlmIG9uX2RyYXcuY2VudGVyX3kgPCBDSVJDTEVfSEVJR0hUIC8vIDIgXAogICAgIyAgICAgICAgIG9yIG9uX2RyYXcuY2VudGVyX3kgPiBTQ1JFRU5fSEVJR0hUIC0gQ0lSQ0xFX0hFSUdIVCAvLyAyOgogICAgIyAgICAgb25fZHJhdy5kZWx0YV95ICo9IC0xCgoKIyBCZWxvdyBhcmUgZnVuY3Rpb24tc3BlY2lmaWMgdmFyaWFibGVzLiBCZWZvcmUgd2UgdXNlIHRoZW0KIyBpbiBvdXIgZnVuY3Rpb24sIHdlIG5lZWQgdG8gZ2l2ZSB0aGVtIGluaXRpYWwgdmFsdWVzLiBUaGVuCiMgdGhlIHZhbHVlcyB3aWxsIHBlcnNpc3QgYmV0d2VlbiBmdW5jdGlvbiBjYWxscy4KIwojIEluIG90aGVyIGxhbmd1YWdlcywgd2UnZCBkZWNsYXJlIHRoZSB2YXJpYWJsZXMgYXMgJ3N0YXRpYycgaW5zaWRlIHRoZQojIGZ1bmN0aW9uIHRvIGdldCB0aGF0IHNhbWUgZnVuY3Rpb25hbGl0eS4KIwojIExhdGVyIG9uLCB3ZSdsbCB1c2UgJ2NsYXNzZXMnIHRvIHRyYWNrIHBvc2l0aW9uIGFuZCB2ZWxvY2l0eSBmb3IgbXVsdGlwbGUKIyBvYmplY3RzLgojIG9uX2RyYXcuY2VudGVyX3ggPSAxMDAgICMgdHlwZTogaWdub3JlICMgZHluYW1pYyBhdHRyaWJ1dGUgb24gZnVuY3Rpb24gb2JqICAjIEluaXRpYWwgeCBwb3NpdGlvbgojIG9uX2RyYXcuY2VudGVyX3kgPSA1MCAgICMgdHlwZTogaWdub3JlICMgZHluYW1pYyBhdHRyaWJ1dGUgb24gZnVuY3Rpb24gb2JqICAjIEluaXRpYWwgeSBwb3NpdGlvbgojIG9uX2RyYXcuZGVsdGFfeCA9IDExNSAgICMgdHlwZTogaWdub3JlICMgZHluYW1pYyBhdHRyaWJ1dGUgb24gZnVuY3Rpb24gb2JqICAjIEluaXRpYWwgY2hhbmdlIGluIHgKIyBvbl9kcmF3LmRlbHRhX3kgPSAxMzAgICAjIHR5cGU6IGlnbm9yZSAjIGR5bmFtaWMgYXR0cmlidXRlIG9uIGZ1bmN0aW9uIG9iaiAgIyBJbml0aWFsIGNoYW5nZSBpbiB5CgpjbGFzcyBTaW11bGF0b3IoYXJjYWRlLldpbmRvdyk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHdpZHRoLCBoZWlnaHQsIHRpdGxlKToKCiAgICAgICAgIyBDYWxsIHRoZSBwYXJlbnQgY2xhc3MncyBpbml0IGZ1bmN0aW9uCiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyh3aWR0aCwgaGVpZ2h0LCB0aXRsZSkKCiAgICAgICAgIyBNYWtlIHRoZSBtb3VzZSBkaXNhcHBlYXIgd2hlbiBpdCBpcyBvdmVyIHRoZSB3aW5kb3cuCiAgICAgICAgIyBTbyB3ZSBqdXN0IHNlZSBvdXIgb2JqZWN0LCBub3QgdGhlIHBvaW50ZXIuCiAgICAgICAgYXJjYWRlLnNldF9iYWNrZ3JvdW5kX2NvbG9yKGFyY2FkZS5jb2xvci5BU0hfR1JFWSkKCiAgICBkZWYgb25fbW91c2VfcHJlc3Moc2VsZiwgeCwgeSwgYnV0dG9uLCBtb2RpZmllcnMpOgogICAgICAgICIiIgogICAgICAgIENhbGxlZCB3aGVuIHRoZSB1c2VyIHByZXNzZXMgYSBtb3VzZSBidXR0b24uCiAgICAgICAgIiIiCiAgICAgICAgZ2xvYmFsIFNUQVRFX1JVTk5JTkcKICAgICAgICBnbG9iYWwgU1RBVEVfSU5JVElBTAogICAgICAgIGdsb2JhbCBtb3VzZV94CiAgICAgICAgZ2xvYmFsIG1vdXNlX3kKICAgICAgICBtb3VzZV94ID0geAogICAgICAgIG1vdXNlX3kgPSB5CiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGJ1dHRvbl9zcHJpdGVzKSk6CiAgICAgICAgICAgICMgY2FsY3VsYXRlIGRpc3RhbmNlCiAgICAgICAgICAgIGRpc3RhbmNlID0gKChidXR0b25fc3ByaXRlc1tpXS5jZW50ZXJfeCAtIHgpICoqIDIgKyAoYnV0dG9uX3Nwcml0ZXNbaV0uY2VudGVyX3kgLSB5KSAqKiAyKSAqKiAwLjUKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICAgICAgU1RBVEVfUlVOTklORyA9IEZhbHNlCiAgICAgICAgICAgICAgICBpZiBpID09IDI6CiAgICAgICAgICAgICAgICAgICAgU1RBVEVfSU5JVElBTCA9IFRydWUKICAgICAgICAgICAgICAgICAgICBTVEFURV9SVU5OSU5HID0gRmFsc2UKCiAgICBkZWYgb25fbW91c2VfbW90aW9uKHNlbGYsIHgsIHksIGR4LCBkeSk6CiAgICAgICAgZ2xvYmFsIG1vdXNlX3gKICAgICAgICBnbG9iYWwgbW91c2VfeQogICAgICAgIG1vdXNlX3ggPSB4CiAgICAgICAgbW91c2VfeSA9IHkKCmRlZiBtYWluKCk6CiAgICAjIE9wZW4gdXAgb3VyIHdpbmRvdwogICAgU2ltdWxhdG9yKFNDUkVFTl9XSURUSCwgU0NSRUVOX0hFSUdIVCwgU0NSRUVOX1RJVExFKQoKICAgICMgVGVsbCB0aGUgY29tcHV0ZXIgdG8gY2FsbCB0aGUgZHJhdyBjb21tYW5kIGF0IHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwuCiAgICBhcmNhZGUuc2NoZWR1bGUob25fZHJhdywgMSAvIDYwKQoKICAgICMgUnVuIHRoZSBwcm9ncmFtCiAgICBhcmNhZGUucnVuKCkKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGlmIGRpc3RhbmNlIDwgMzA6CiAgICAgICAgICAgICAgICBpZiBpID09IDA6CiAgICAgICAgICAgICAgICAgICAgU1RBVEVfUlVOTklORyA9IFRydWUKICAgICAgICAgICAgICAgIGlmIGkgPT0gMToKPHxmaW1fZW5kfD4="]
["7128f86267acd47a7a4f78b9c64fb6c3b1738d2d-1","7128f86267acd47a7a4f78b9c64fb6c3b1738d2d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKYXJyID0gbWFwKGludCwgcmF3X2lucHV0KCkuc3RyaXAoKS5zcGxpdCgnICcpKQphcnIuc29ydChjbXA9Tm9uZSwga2V5PU5vbmUsIHJldmVyc2U9RmFsc2UpCm1pbj0wCm1heD0wCm1pbl9hcnI9YXJyWzA6NF0KPHxmaW1faG9sZXw+CiAgICBtYXg9bWF4K2kKcHJpbnQoc3RyKG1pbikrIiAiK3N0cihtYXgpKQo8fGZpbV9zdWZmaXh8PgptYXhfYXJyPWFyclsxOjVdCmZvciBpIGluIG1pbl9hcnI6CiAgICBtaW49bWluK2kKZm9yIGkgaW4gbWF4X2FycjoKPHxmaW1fZW5kfD4="]
["3b1c29275966b400d31eb7f2fb6b9ecd2acddbde-1","3b1c29275966b400d31eb7f2fb6b9ecd2acddbde","PHxmaW1fcHJlZml4fD4KI2ltcG9ydCBTdGF0ZW1lbnRzCmZyb20gdGtpbnRlciBpbXBvcnQqCmltcG9ydCB0a2ludGVyLm1lc3NhZ2Vib3gKZnJvbSB0a2ludGVyIGltcG9ydCB0dGsKCiMgQ3JlYXRlIGEgZnVuY3Rpb24gZm9yIHJpZ2h0IGJ1dHRvbgpkZWYgbWVzc2FnZV9kaXNwbGF5KCk6CiAgICB0a2ludGVyLm1lc3NhZ2Vib3guc2hvd2luZm8oIkV4cGVyaW1lbnRpbmcgd2l0aCBHSUZzIiwiV2VsY29tZSB0byBHSUZzIikKCiNDcmVhdGUgaW5zdGFuY2Ugb2Ygd2luZG93Cm13ID0gVGsoKQptdy50aXRsZSgiVGh1bWJzIFVQIikKCiNDcmVhdGUgaW5zdGFuY2Ugb2YgYSBidXR0b24KbXlfZmlyc3RfYnV0dG9uID0gdHRrLkJ1dHRvbihtdyx0ZXh0PSJjbGljayIsIGNvbW1hbmQgPSBtZXNzYWdlX2Rpc3BsYXkpCm15X2ZpcnN0X2J1dHRvbi5wYWNrKCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKI0FkZCBpbWFnZSB0byBidXR0b24KaW1nID0gUGhvdG9JbWFnZShmaWxlID0gImY6XFxteV9pbWFnZXNcXHRodW1iMi5naWYiKQpteV9maXJzdF9idXR0b24uY29uZmlnKGltYWdlID0gaW1nLGNvbXBvdW5kID1SSUdIVCkKPHxmaW1fZW5kfD4="]
["7136ba7f7a8d5d0afc5c113b453bbda34e4b1dc4-2","7136ba7f7a8d5d0afc5c113b453bbda34e4b1dc4","PHxmaW1fcHJlZml4fD4KIiIiUHJlcHJvY2VzcyBhbmQgcHJlcGFyZSBXaWtpcHJvbiBkYXRhLiIiIgoKaW1wb3J0IGdsb2IKaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCB3YXJuaW5ncwoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBwYW5kYXMgYXMgcGQKZnJvbSBwYW5waG9uLmRpc3RhbmNlIGltcG9ydCBEaXN0YW5jZQpmcm9tIHNrbGVhcm4ubW9kZWxfc2VsZWN0aW9uIGltcG9ydCB0cmFpbl90ZXN0X3NwbGl0CmZyb20gdHFkbSBpbXBvcnQgdHFkbQoKZnJvbSB1dGlscyBpbXBvcnQgd3JpdGUKCndhcm5pbmdzLnNpbXBsZWZpbHRlcigiaWdub3JlIikKCkxBTkdVQUdFUyA9IHBkLnJlYWRfY3N2KCJkYXRhL3Bob25lbWUvbGFuZ3VhZ2VzLmNzdiIsIGluZGV4X2NvbD0wKQpMQU5HVUFHRVMgPSBMQU5HVUFHRVNbTEFOR1VBR0VTWyJwaG9pYmxlX2lkIl0gIT0gLTFdClNFRUQgPSBzdW0obWFwKG9yZCwgInBob25vbG9neSIpKQpTVEFSVF9DSEFSQUNURVIgPSAiPCIKRU5EX0NIQVJBQ1RFUiA9ICI+IgoKZGlzdGFuY2VfZm4gPSBEaXN0YW5jZSgpLndlaWdodGVkX2ZlYXR1cmVfZWRpdF9kaXN0YW5jZQoKCmRlZiBsb2FkX3dpa2lwcm9uKGxhbmd1YWdlKToKICAgIGZpbGVuYW1lID0gZiJkYXRhL3Bob25lbWUvd2lraXByb24ve2xhbmd1YWdlfS9yYXcudHN2IgogICAgcmV0dXJuIHBkLnJlYWRfY3N2KAogICAgICAgIGZpbGVuYW1lLCBzZXA9Ilx0IiwgaGVhZGVyPU5vbmUsIG5hbWVzPVsib3J0aG9ncmFwaHkiLCAicGhvbmVtZXMiLCAiZnJlcXVlbmN5Il0KICAgICkKCgpkZWYgd2lraXByb25fdG9fcGhvaWJsZShsYW5ndWFnZSk6CiAgICBwaG9pYmxlX2lkID0gTEFOR1VBR0VTLmxvY1tsYW5ndWFnZSwgInBob2libGVfaWQiXQogICAgYXNzZXJ0IHBob2libGVfaWQgIT0gLTEsIGYiTm8gaW52ZW50b3J5IGZvciB7bGFuZ3VhZ2V9LiIKICAgIHJldHVybiBwaG9pYmxlX2lkCgoKZGVmIGxvYWRfaW52ZW50b3J5KGxhbmd1YWdlKToKICAgIGZpbGVuYW1lID0gImRhdGEvcGhvbmVtZS9waG9pYmxlL3Bob2libGUuY3N2IgogICAgcGhvaWJsZSA9IHBkLnJlYWRfY3N2KGZpbGVuYW1lLCBsb3dfbWVtb3J5PUZhbHNlKQogICAgcGhvaWJsZV9pZCA9IHdpa2lwcm9uX3RvX3Bob2libGUobGFuZ3VhZ2UpCiAgICBpbnZlbnRvcnkgPSBwaG9pYmxlW3Bob2libGVbIkludmVudG9yeUlEIl0gPT0gcGhvaWJsZV9pZF0KICAgIG5vX3RvbmVzID0gaW52ZW50b3J5W2ludmVudG9yeVsidG9uZSJdICE9ICIrIl0KICAgIG5vX3RvbmVzWyJQaG9uZW1lIl0gPSBub190b25lc1siUGhvbmVtZSJdLnN0ci5yZXBsYWNlKCLJmiIsICLJmcueIikKICAgIHJldHVybiBub190b25lcwoKCmRlZiBsb2FkX2ZlYXR1cmVzKGxhbmd1YWdlKToKICAgIGZpbGVuYW1lID0gZiJkYXRhL3Bob25lbWUvZmVhdHVyZXMve2xhbmd1YWdlfS9mZWF0dXJlcy5jc3YiCiAgICByZXR1cm4gcGQucmVhZF9jc3YoZmlsZW5hbWUsIGluZGV4X2NvbD0wKQoKCmNsYXNzIFByZXByb2Nlc3NvcjoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsYW5ndWFnZSk6CiAgICAgICAgc2VsZi5sYW5ndWFnZSA9IGxhbmd1YWdlCiAgICAgICAgc2VsZi5pbnZlbnRvcnkgPSBsb2FkX2ludmVudG9yeShsYW5ndWFnZSkKICAgICAgICBzZWxmLnZvY2FiID0gc2VsZi5fZ2V0X3ZvY2FiKCkKICAgICAgICBzZWxmLnRhYmxlID0gc2VsZi5fZ2V0X3RhYmxlKCkKCiAgICBkZWYgX2dldF92b2NhYihzZWxmKToKICAgICAgICB3aWtpcHJvbiA9IGxvYWRfd2lraXByb24oc2VsZi5sYW5ndWFnZSkKICAgICAgICByZXR1cm4gc2V0KCIgIi5qb2luKHdpa2lwcm9uWyJwaG9uZW1lcyJdLnZhbHVlcykuc3BsaXQoIiAiKSkKCiAgICBkZWYgX2Nsb3Nlc3Qoc2VsZiwgY2hhcik6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBhbGxvcGhvbmVzID0gc2VsZi5pbnZlbnRvcnlbIkFsbG9waG9uZXMiXS5zdHIuc3BsaXQoKQogICAgICAgICAgICBpc19hbGxvcGhvbmUgPSBhbGxvcGhvbmVzLmFwcGx5KGxhbWJkYSByb3c6IGNoYXIgaW4gcm93KQogICAgICAgICAgICBudW1fYWxsb3Bob25lcyA9IGlzX2FsbG9waG9uZS5zdW0oKQogICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgIG51bV9hbGxvcGhvbmVzID0gMAogICAgICAgIGlmIG51bV9hbGxvcGhvbmVzID09IDA6CiAgICAgICAgICAgIHJldHVybiBtaW4oc2VsZi5pbnZlbnRvcnlbIlBob25lbWUiXSwga2V5PWxhbWJkYSBwaDogZGlzdGFuY2VfZm4ocGgsIGNoYXIpKQogICAgICAgIGVsaWYgbnVtX2FsbG9waG9uZXMgPT0gMToKICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW52ZW50b3J5W2lzX2FsbG9waG9uZV1bIlBob25lbWUiXS5pbG9jWzBdCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIG1pbigKICAgICAgICAgICAgICAgIHNlbGYuaW52ZW50b3J5W2lzX2FsbG9waG9uZV1bIlBob25lbWUiXSwKICAgICAgICAgICAgICAgIGtleT1sYW1iZGEgcGg6IGRpc3RhbmNlX2ZuKHBoLCBjaGFyKSwKICAgICAgICAgICAgKQoKICAgIGRlZiBfZ2V0X3RhYmxlKHNlbGYpOgogICAgICAgIG5vdF9pbl9pbnZlbnRvcnkgPSBzZWxmLnZvY2FiLmRpZmZlcmVuY2Uoc2V0KHNlbGYuaW52ZW50b3J5WyJQaG9uZW1lIl0pKQogICAgICAgIHRhYmxlID0ge30KICAgICAgICBmb3IgY2hhciBpbiBub3RfaW5faW52ZW50b3J5OgogICAgICAgICAgICB0YWJsZVtjaGFyXSA9IHNlbGYuX2Nsb3Nlc3QoY2hhcikKICAgICAgICByZXR1cm4gdGFibGUKCiAgICBkZWYgcHJlcHJvY2VzcyhzZWxmLCBmb3JtKToKICAgICAgICBjaGFycyA9IGZvcm0uc3BsaXQoIiAiKQogICAgICAgIHBob25lbWVzID0gW3NlbGYudGFibGUuZ2V0KGNoLCBjaCkgZm9yIGNoIGluIGNoYXJzXQogICAgICAgIHBob25lbWVzID0gW1NUQVJUX0NIQVJBQ1RFUl0gKyBwaG9uZW1lcyArIFtFTkRfQ0hBUkFDVEVSXQogICAgICAgIHJldHVybiAiICIuam9pbihwaG9uZW1lcykKCgpkZWYgX3ByZXBhcmUobGFuZ3VhZ2UpOgogICAgd2lraXByb24gPSBsb2FkX3dpa2lwcm9uKGxhbmd1YWdlKQogICAgIyBQcmVwcm9jZXNzCiAgICBwcmVwcm9jZXNzb3IgPSBQcmVwcm9jZXNzb3IobGFuZ3VhZ2UpCiAgICB3aWtpcHJvblsicHJlcHJvY2Vzc2VkIl0gPSB3aWtpcHJvblsicGhvbmVtZXMiXS5hcHBseShwcmVwcm9jZXNzb3IucHJlcHJvY2VzcykKICAgICMgRmlsdGVyCiAgICB3aWtpcHJvbiA9IHdpa2lwcm9uWwogICAgICAgIHdpa2lwcm9uWyJwcmVwcm9jZXNzZWQiXS5zdHIuc3BsaXQoIiAiKS5hcHBseShsZW4pID4gMwogICAgXSAgIyBhdCBsZWFzdCB0d28gcGhvbmVtZXMKICAgICMgU3BsaXQKICAgIHRyYWluLCB2YWxpZCA9IHRyYWluX3Rlc3Rfc3BsaXQoCiAgICAgICAgd2lraXByb24sIHRyYWluX3NpemU9MC45LCByYW5kb21fc3RhdGU9U0VFRCwgc2h1ZmZsZT1UcnVlCiAgICApCiAgICAjIE9yZGVyIHRyYWluCiAgICB0cmFpbiA9IHRyYWluLnNhbXBsZShmcmFjPTEpCiAgICB0cmFpblsibGVuZ3RoIl0gPSB0cmFpblsicHJlcHJvY2Vzc2VkIl0uc3RyLmxlbigpCiAgICB0cmFpbi5zb3J0X3ZhbHVlcyhieT1bImZyZXF1ZW5jeSIsICJsZW5ndGgiXSwgYXNjZW5kaW5nPShGYWxzZSwgVHJ1ZSksIGlucGxhY2U9VHJ1ZSkKICAgICMgV3JpdGUKICAgIGZpbGVuYW1lID0gZiJkYXRhL3Bob25lbWUvd2lraXByb24ve2xhbmd1YWdlfS90cmFpbi50eHQiCiAgICB3cml0ZSh0cmFpblsicHJlcHJvY2Vzc2VkIl0sIGZpbGVuYW1lKQogICAgZmlsZW5hbWUgPSBmImRhdGEvcGhvbmVtZS93aWtpcHJvbi97bGFuZ3VhZ2V9L3ZhbGlkYXRpb24udHh0IgogICAgd3JpdGUodmFsaWRbInByZXByb2Nlc3NlZCJdLCBmaWxlbmFtZSkKCgpkZWYgcHJlcGFyZSgpOgogICAgZm9yIGxnIGluIHRxZG0oTEFOR1VBR0VTLmluZGV4KToKICAgICAgICBfcHJlcGFyZShsZykKCgpkZWYgY291bnQobGcpOgogICAgIiIiQ291bnQgdGhlIG51bWJlciBvZiBlZGl0c215IHByZXByb2Nlc3NpbmcgcGVyZm9ybXMuIiIiCiAgICB3aWtpcHJvbiA9IGxvYWRfd2lraXByb24obGcpCiAgICBwcmVwcm9jZXNzb3IgPSBQcmVwcm9jZXNzb3IobGcpCiAgICBpbnZlbnRvcnkgPSBsb2FkX2ludmVudG9yeShsZykKICAgIGkgPSBzZXQoaW52ZW50b3J5WyJQaG9uZW1lIl0pCjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7ImZvcm0iOiBmb3JtLCAiY2giOiBjaH0pCiAgICAgICAgICAgICAgICBwcmludChmIntsZ30gfCB7Zm9ybX0gfCB7Y2h9IikKICAgIHJlc3VsdCA9IHBkLkRhdGFGcmFtZShyZXN1bHQpCgoKIyBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgojICAgICBwcmVwYXJlKCkKPHxmaW1fc3VmZml4fD4KICAgIHJlc3VsdCA9IFtdCiAgICBmb3IgZm9ybSBpbiB3aWtpcHJvblsicGhvbmVtZXMiXToKICAgICAgICBmb3IgY2ggaW4gZm9ybS5zcGxpdCgiICIpOgogICAgICAgICAgICBpZiBjaCBub3QgaW4gaToKPHxmaW1fZW5kfD4="]
["563177594c35049584b165cceb081a0b4d8f9229-3","563177594c35049584b165cceb081a0b4d8f9229","PHxmaW1fcHJlZml4fD4KIyBUaGlzIGlzIGFuIGF1dG8tZ2VuZXJhdGVkIERqYW5nbyBtb2RlbCBtb2R1bGUuCiMgWW91J2xsIGhhdmUgdG8gZG8gdGhlIGZvbGxvd2luZyBtYW51YWxseSB0byBjbGVhbiB0aGlzIHVwOgojICAgKiBSZWFycmFuZ2UgbW9kZWxzJyBvcmRlcgojICAgKiBNYWtlIHN1cmUgZWFjaCBtb2RlbCBoYXMgb25lIGZpZWxkIHdpdGggcHJpbWFyeV9rZXk9VHJ1ZQojICAgKiBNYWtlIHN1cmUgZWFjaCBGb3JlaWduS2V5IGFuZCBPbmVUb09uZUZpZWxkIGhhcyBgb25fZGVsZXRlYCBzZXQgdG8gdGhlIGRlc2lyZWQgYmVoYXZpb3IKIyAgICogUmVtb3ZlIGBtYW5hZ2VkID0gRmFsc2VgIGxpbmVzIGlmIHlvdSB3aXNoIHRvIGFsbG93IERqYW5nbyB0byBjcmVhdGUsIG1vZGlmeSwgYW5kIGRlbGV0ZSB0aGUgdGFibGUKIyBGZWVsIGZyZWUgdG8gcmVuYW1lIHRoZSBtb2RlbHMsIGJ1dCBkb24ndCByZW5hbWUgZGJfdGFibGUgdmFsdWVzIG9yIGZpZWxkIG5hbWVzLgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCgo8fGZpbV9ob2xlfD4KICAgIGNvbnRhY3RsYXN0bmFtZSA9IG1vZGVscy5DaGFyRmllbGQoZGJfY29sdW1uPSdjb250YWN0TGFzdE5hbWUnLCBtYXhfbGVuZ3RoPTUwKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgY29udGFjdGZpcnN0bmFtZSA9IG1vZGVscy5DaGFyRmllbGQoZGJfY29sdW1uPSdjb250YWN0Rmlyc3ROYW1lJywgbWF4X2xlbmd0aD01MCkgICMgRmllbGQgbmFtZSBtYWRlIGxvd2VyY2FzZS4KICAgIHBob25lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwKQogICAgYWRkcmVzc2xpbmUxID0gbW9kZWxzLkNoYXJGaWVsZChkYl9jb2x1bW49J2FkZHJlc3NMaW5lMScsIG1heF9sZW5ndGg9NTApICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBhZGRyZXNzbGluZTIgPSBtb2RlbHMuQ2hhckZpZWxkKGRiX2NvbHVtbj0nYWRkcmVzc0xpbmUyJywgbWF4X2xlbmd0aD01MCwgYmxhbms9VHJ1ZSwgbnVsbD1UcnVlKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgY2l0eSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD01MCkKICAgIHN0YXRlID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwLCBibGFuaz1UcnVlLCBudWxsPVRydWUpCiAgICBwb3N0YWxjb2RlID0gbW9kZWxzLkNoYXJGaWVsZChkYl9jb2x1bW49J3Bvc3RhbENvZGUnLCBtYXhfbGVuZ3RoPTE1LCBibGFuaz1UcnVlLCBudWxsPVRydWUpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBjb3VudHJ5ID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwKQogICAgc2FsZXNyZXBlbXBsb3llZW51bWJlciA9IG1vZGVscy5Gb3JlaWduS2V5KCdFbXBsb3llZXMnLCBtb2RlbHMuRE9fTk9USElORywgZGJfY29sdW1uPSdzYWxlc1JlcEVtcGxveWVlTnVtYmVyJywgYmxhbms9VHJ1ZSwgbnVsbD1UcnVlKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgY3JlZGl0bGltaXQgPSBtb2RlbHMuRGVjaW1hbEZpZWxkKGRiX2NvbHVtbj0nY3JlZGl0TGltaXQnLCBtYXhfZGlnaXRzPTEwLCBkZWNpbWFsX3BsYWNlcz0yLCBibGFuaz1UcnVlLCBudWxsPVRydWUpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCgogICAgY2xhc3MgTWV0YToKICAgICAgICBtYW5hZ2VkID0gRmFsc2UKICAgICAgICBkYl90YWJsZSA9ICdjdXN0b21lcnMnCgoKY2xhc3MgRW1wbG95ZWVzKG1vZGVscy5Nb2RlbCk6CiAgICBlbXBsb3llZW51bWJlciA9IG1vZGVscy5JbnRlZ2VyRmllbGQoZGJfY29sdW1uPSdlbXBsb3llZU51bWJlcicsIHByaW1hcnlfa2V5PVRydWUpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBsYXN0bmFtZSA9IG1vZGVscy5DaGFyRmllbGQoZGJfY29sdW1uPSdsYXN0TmFtZScsIG1heF9sZW5ndGg9NTApICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBmaXJzdG5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKGRiX2NvbHVtbj0nZmlyc3ROYW1lJywgbWF4X2xlbmd0aD01MCkgICMgRmllbGQgbmFtZSBtYWRlIGxvd2VyY2FzZS4KICAgIGV4dGVuc2lvbiA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMCkKICAgIGVtYWlsID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKICAgIG9mZmljZWNvZGUgPSBtb2RlbHMuRm9yZWlnbktleSgnT2ZmaWNlcycsIG1vZGVscy5ET19OT1RISU5HLCBkYl9jb2x1bW49J29mZmljZUNvZGUnKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgcmVwb3J0c3RvID0gbW9kZWxzLkZvcmVpZ25LZXkoJ3NlbGYnLCBtb2RlbHMuRE9fTk9USElORywgZGJfY29sdW1uPSdyZXBvcnRzVG8nLCBibGFuaz1UcnVlLCBudWxsPVRydWUpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBqb2J0aXRsZSA9IG1vZGVscy5DaGFyRmllbGQoZGJfY29sdW1uPSdqb2JUaXRsZScsIG1heF9sZW5ndGg9NTApICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCgogICAgY2xhc3MgTWV0YToKICAgICAgICBtYW5hZ2VkID0gRmFsc2UKICAgICAgICBkYl90YWJsZSA9ICdlbXBsb3llZXMnCgoKY2xhc3MgT2ZmaWNlcyhtb2RlbHMuTW9kZWwpOgogICAgb2ZmaWNlY29kZSA9IG1vZGVscy5DaGFyRmllbGQoZGJfY29sdW1uPSdvZmZpY2VDb2RlJywgcHJpbWFyeV9rZXk9VHJ1ZSwgbWF4X2xlbmd0aD0xMCkgICMgRmllbGQgbmFtZSBtYWRlIGxvd2VyY2FzZS4KICAgIGNpdHkgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTApCiAgICBwaG9uZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD01MCkKICAgIGFkZHJlc3NsaW5lMSA9IG1vZGVscy5DaGFyRmllbGQoZGJfY29sdW1uPSdhZGRyZXNzTGluZTEnLCBtYXhfbGVuZ3RoPTUwKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgYWRkcmVzc2xpbmUyID0gbW9kZWxzLkNoYXJGaWVsZChkYl9jb2x1bW49J2FkZHJlc3NMaW5lMicsIG1heF9sZW5ndGg9NTAsIGJsYW5rPVRydWUsIG51bGw9VHJ1ZSkgICMgRmllbGQgbmFtZSBtYWRlIGxvd2VyY2FzZS4KICAgIHN0YXRlID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwLCBibGFuaz1UcnVlLCBudWxsPVRydWUpCiAgICBjb3VudHJ5ID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwKQogICAgcG9zdGFsY29kZSA9IG1vZGVscy5DaGFyRmllbGQoZGJfY29sdW1uPSdwb3N0YWxDb2RlJywgbWF4X2xlbmd0aD0xNSkgICMgRmllbGQgbmFtZSBtYWRlIGxvd2VyY2FzZS4KICAgIHRlcnJpdG9yeSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMCkKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIG1hbmFnZWQgPSBGYWxzZQogICAgICAgIGRiX3RhYmxlID0gJ29mZmljZXMnCgoKY2xhc3MgT3JkZXJkZXRhaWxzKG1vZGVscy5Nb2RlbCk6CiAgICBvcmRlcm51bWJlciA9IG1vZGVscy5PbmVUb09uZUZpZWxkKCdPcmRlcnMnLCBtb2RlbHMuRE9fTk9USElORywgZGJfY29sdW1uPSdvcmRlck51bWJlcicsIHByaW1hcnlfa2V5PVRydWUpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBwcm9kdWN0Y29kZSA9IG1vZGVscy5Gb3JlaWduS2V5KCdQcm9kdWN0cycsIG1vZGVscy5ET19OT1RISU5HLCBkYl9jb2x1bW49J3Byb2R1Y3RDb2RlJykgICMgRmllbGQgbmFtZSBtYWRlIGxvd2VyY2FzZS4KICAgIHF1YW50aXR5b3JkZXJlZCA9IG1vZGVscy5JbnRlZ2VyRmllbGQoZGJfY29sdW1uPSdxdWFudGl0eU9yZGVyZWQnKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgcHJpY2VlYWNoID0gbW9kZWxzLkRlY2ltYWxGaWVsZChkYl9jb2x1bW49J3ByaWNlRWFjaCcsIG1heF9kaWdpdHM9MTAsIGRlY2ltYWxfcGxhY2VzPTIpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBvcmRlcmxpbmVudW1iZXIgPSBtb2RlbHMuU21hbGxJbnRlZ2VyRmllbGQoZGJfY29sdW1uPSdvcmRlckxpbmVOdW1iZXInKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgoKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgbWFuYWdlZCA9IEZhbHNlCiAgICAgICAgZGJfdGFibGUgPSAnb3JkZXJkZXRhaWxzJwogICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgoJ29yZGVybnVtYmVyJywgJ3Byb2R1Y3Rjb2RlJyksKQoKCmNsYXNzIE9yZGVycyhtb2RlbHMuTW9kZWwpOgogICAgb3JkZXJudW1iZXIgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGRiX2NvbHVtbj0nb3JkZXJOdW1iZXInLCBwcmltYXJ5X2tleT1UcnVlKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgb3JkZXJkYXRlID0gbW9kZWxzLkRhdGVGaWVsZChkYl9jb2x1bW49J29yZGVyRGF0ZScpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICByZXF1aXJlZGRhdGUgPSBtb2RlbHMuRGF0ZUZpZWxkKGRiX2NvbHVtbj0ncmVxdWlyZWREYXRlJykgICMgRmllbGQgbmFtZSBtYWRlIGxvd2VyY2FzZS4KICAgIHNoaXBwZWRkYXRlID0gbW9kZWxzLkRhdGVGaWVsZChkYl9jb2x1bW49J3NoaXBwZWREYXRlJywgYmxhbms9VHJ1ZSwgbnVsbD1UcnVlKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgc3RhdHVzID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTE1KQogICAgY29tbWVudHMgPSBtb2RlbHMuVGV4dEZpZWxkKGJsYW5rPVRydWUsIG51bGw9VHJ1ZSkKICAgIGN1c3RvbWVybnVtYmVyID0gbW9kZWxzLkZvcmVpZ25LZXkoQ3VzdG9tZXJzLCBtb2RlbHMuRE9fTk9USElORywgZGJfY29sdW1uPSdjdXN0b21lck51bWJlcicpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCgogICAgY2xhc3MgTWV0YToKICAgICAgICBtYW5hZ2VkID0gRmFsc2UKICAgICAgICBkYl90YWJsZSA9ICdvcmRlcnMnCgoKY2xhc3MgUGF5bWVudHMobW9kZWxzLk1vZGVsKToKICAgIGN1c3RvbWVybnVtYmVyID0gbW9kZWxzLk9uZVRvT25lRmllbGQoQ3VzdG9tZXJzLCBtb2RlbHMuRE9fTk9USElORywgZGJfY29sdW1uPSdjdXN0b21lck51bWJlcicsIHByaW1hcnlfa2V5PVRydWUpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBjaGVja251bWJlciA9IG1vZGVscy5DaGFyRmllbGQoZGJfY29sdW1uPSdjaGVja051bWJlcicsIG1heF9sZW5ndGg9NTApICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBwYXltZW50ZGF0ZSA9IG1vZGVscy5EYXRlRmllbGQoZGJfY29sdW1uPSdwYXltZW50RGF0ZScpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBhbW91bnQgPSBtb2RlbHMuRGVjaW1hbEZpZWxkKG1heF9kaWdpdHM9MTAsIGRlY2ltYWxfcGxhY2VzPTIpCgogICAgY2xhc3MgTWV0YToKICAgICAgICBtYW5hZ2VkID0gRmFsc2UKICAgICAgICBkYl90YWJsZSA9ICdwYXltZW50cycKICAgICAgICB1bmlxdWVfdG9nZXRoZXIgPSAoKCdjdXN0b21lcm51bWJlcicsICdjaGVja251bWJlcicpLCkKCgpjbGFzcyBQcm9kdWN0bGluZXMobW9kZWxzLk1vZGVsKToKICAgIHByb2R1Y3RsaW5lID0gbW9kZWxzLkNoYXJGaWVsZChkYl9jb2x1bW49J3Byb2R1Y3RMaW5lJywgcHJpbWFyeV9rZXk9VHJ1ZSwgbWF4X2xlbmd0aD01MCkgICMgRmllbGQgbmFtZSBtYWRlIGxvd2VyY2FzZS4KICAgIHRleHRkZXNjcmlwdGlvbiA9IG1vZGVscy5DaGFyRmllbGQoZGJfY29sdW1uPSd0ZXh0RGVzY3JpcHRpb24nLCBtYXhfbGVuZ3RoPTQwMDAsIGJsYW5rPVRydWUsIG51bGw9VHJ1ZSkgICMgRmllbGQgbmFtZSBtYWRlIGxvd2VyY2FzZS4KICAgIGh0bWxkZXNjcmlwdGlvbiA9IG1vZGVscy5UZXh0RmllbGQoZGJfY29sdW1uPSdodG1sRGVzY3JpcHRpb24nLCBibGFuaz1UcnVlLCBudWxsPVRydWUpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBpbWFnZSA9IG1vZGVscy5UZXh0RmllbGQoYmxhbms9VHJ1ZSwgbnVsbD1UcnVlKQoKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgbWFuYWdlZCA9IEZhbHNlCiAgICAgICAgZGJfdGFibGUgPSAncHJvZHVjdGxpbmVzJwoKCmNsYXNzIFByb2R1Y3RzKG1vZGVscy5Nb2RlbCk6CiAgICBwcm9kdWN0Y29kZSA9IG1vZGVscy5DaGFyRmllbGQoZGJfY29sdW1uPSdwcm9kdWN0Q29kZScsIHByaW1hcnlfa2V5PVRydWUsIG1heF9sZW5ndGg9MTUpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBwcm9kdWN0bmFtZSA9IG1vZGVscy5DaGFyRmllbGQoZGJfY29sdW1uPSdwcm9kdWN0TmFtZScsIG1heF9sZW5ndGg9NzApICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBwcm9kdWN0bGluZSA9IG1vZGVscy5Gb3JlaWduS2V5KFByb2R1Y3RsaW5lcywgbW9kZWxzLkRPX05PVEhJTkcsIGRiX2NvbHVtbj0ncHJvZHVjdExpbmUnKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgcHJvZHVjdHNjYWxlID0gbW9kZWxzLkNoYXJGaWVsZChkYl9jb2x1bW49J3Byb2R1Y3RTY2FsZScsIG1heF9sZW5ndGg9MTApICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBwcm9kdWN0dmVuZG9yID0gbW9kZWxzLkNoYXJGaWVsZChkYl9jb2x1bW49J3Byb2R1Y3RWZW5kb3InLCBtYXhfbGVuZ3RoPTUwKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgcHJvZHVjdGRlc2NyaXB0aW9uID0gbW9kZWxzLlRleHRGaWVsZChkYl9jb2x1bW49J3Byb2R1Y3REZXNjcmlwdGlvbicpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBxdWFudGl0eWluc3RvY2sgPSBtb2RlbHMuU21hbGxJbnRlZ2VyRmllbGQoZGJfY29sdW1uPSdxdWFudGl0eUluU3RvY2snKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgYnV5cHJpY2UgPSBtb2RlbHMuRGVjaW1hbEZpZWxkKGRiX2NvbHVtbj0nYnV5UHJpY2UnLCBtYXhfZGlnaXRzPTEwLCBkZWNpbWFsX3BsYWNlcz0yKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgbXNycCA9IG1vZGVscy5EZWNpbWFsRmllbGQoZGJfY29sdW1uPSdNU1JQJywgbWF4X2RpZ2l0cz0xMCwgZGVjaW1hbF9wbGFjZXM9MikgICMgRmllbGQgbmFtZSBtYWRlIGxvd2VyY2FzZS4KCiAgICBjbGFzcyBNZXRhOgogICAgICAgIG1hbmFnZWQgPSBGYWxzZQogICAgICAgIGRiX3RhYmxlID0gJ3Byb2R1Y3RzJwo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgQ3VzdG9tZXJzKG1vZGVscy5Nb2RlbCk6CiAgICBjdXN0b21lcm51bWJlciA9IG1vZGVscy5JbnRlZ2VyRmllbGQoZGJfY29sdW1uPSdjdXN0b21lck51bWJlcicsIHByaW1hcnlfa2V5PVRydWUpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBjdXN0b21lcm5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKGRiX2NvbHVtbj0nY3VzdG9tZXJOYW1lJywgbWF4X2xlbmd0aD01MCkgICMgRmllbGQgbmFtZSBtYWRlIGxvd2VyY2FzZS4KPHxmaW1fZW5kfD4="]
["7048cd0619f6fc2d81f4e34ec6290d2e7608d9a7-2","7048cd0619f6fc2d81f4e34ec6290d2e7608d9a7","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMDgsIE1pY2hhZWwgTHVubmF5IDxtbHVubmF5QGdtYWlsLmNvbS5hdT4KIwojIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQojIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKIyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgojCiMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCiMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgojIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCiMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwojIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgojIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCiMgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KCl9fYWxsX18gPSBbJ0NvbmZpZycsICdkZWZhdWx0X2NvbmZpZyddCgpmcm9tIHlhbWwgaW1wb3J0IGxvYWQsIGR1bXAKdHJ5OgogICAgZnJvbSB5YW1sIGltcG9ydCBDTG9hZGVyIGFzIExvYWRlcgogICAgZnJvbSB5YW1sIGltcG9ydCBDRHVtcGVyIGFzIER1bXBlcgpleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBmcm9tIHlhbWwgaW1wb3J0IExvYWRlciwgRHVtcGVyCgppbXBvcnQgdHlwZXMKCmNsYXNzIENvbmZpZzoKICAgICIiIkEgd3JhcHBlciBhcm91bmQgYSB5YW1sIGRvY3VtZW50IGZvciBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLiIiIgogICAgCiAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUpOgogICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQogICAgICAgIHNlbGYuZGF0YSA9IHt9CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLmRhdGEgPSBsb2FkKG9wZW4oZmlsZW5hbWUpLCBMb2FkZXI9TG9hZGVyKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIyB0aGUgQ0xvYWRlciBoYXMgcHJvYmxlbXMgd2l0aCB0aHJvd2luZyBleGNlcHRpb25zIHNvIGNhbGwgdGhlIHB5dGhvbiB2ZXJzaW9uIGhlcmUgdG8gZ2V0IGEgbWVhbmluZ2Z1bCBleGNlcHRpb24KICAgICAgICAgICAgbG9hZChvcGVuKGZpbGVuYW1lKSkKICAgIAogICAgZGVmIHJlbG9hZChzZWxmKToKICAgICAgICBzZWxmLmRhdGEgPSBsb2FkKG9wZW4oc2VsZi5maWxlbmFtZSksIExvYWRlcj1Mb2FkZXIpCiAgICAKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIGNmID0gb3BlbihzZWxmLmZpbGVuYW1lLCAndycpCiAgICAgICAgCiAgICAgICAgZHVtcChzZWxmLmRhdGEsIGNmLCBEdW1wZXI9RHVtcGVyKQogICAgICAgIGNmLmNsb3NlKCkKICAgIAogICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBuYW1lKToKICAgICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiB0aGUgbmFtZSBpcyBjb250YWluZWQgaW4gdGhpcyBjb25maWd1cmF0aW9uLiIiIgogICAgICAgIHJldHVybiBuYW1lIGluIHNlbGYuZGF0YQogICAgCiAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgbmFtZSk6CiAgICAgICAgcmV0dXJuIHNlbGYuZGF0YVtuYW1lXQogICAgCiAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CiAgICAgICAgc2VsZi5kYXRhW2tleV0gPSB2YWx1ZQogICAgCiAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKICAgICAgICBkZWwgc2VsZi5kYXRhW2tleV0KICAgIAogICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgcmV0dXJuIGxlbihzZWxmLmRhdGEpCiAgICAKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzdHIoc2VsZi5kYXRhKQogICAgCiAgICBkZWYga2V5cyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5kYXRhLmtleXMoKQogICAgCiAgICBkZWYgaGFzX2tleShzZWxmLCBrZXkpOgogICAgICAgIHJldHVybiBzZWxmLmRhdGEuaGFzX2tleShrZXkpCiAgICAKICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgogICAgICAgIGlmIHNlbGYuZGF0YS5oYXNfa2V5KGtleSk6CiAgICAgICAgICAgIHJldHVybiBzZWxmLmRhdGFba2V5XQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CgpfZGVmYXVsdENvbmZpZyA9IE5vbmUKCmRlZiBkZWZhdWx0X2NvbmZpZyhmaWxlbmFtZT1Ob25lKToKICAgIGdsb2JhbCBfZGVmYXVsdENvbmZpZwogICAgCiAgICBpZiBfZGVmYXVsdENvbmZpZzoKICAgICAgICByZXR1cm4gX2RlZmF1bHRDb25maWcKICAgIAogICAgaWYgZmlsZW5hbWU6CiAgICAgICAgX2RlZmF1bHRDb25maWcgPSBDb25maWcoZmlsZW5hbWUpCiAgICAgICAgcmV0dXJuIF9kZWZhdWx0Q29uZmlnCiAgICAKICAgIHJldHVybiBOb25lCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgc2F2ZShzZWxmLCBmaWxlbmFtZT0nJyk6CiAgICAgICAgaWYgZmlsZW5hbWU6CiAgICAgICAgICAgIGNmID0gb3BlbihmaWxlbmFtZSwgJ3cnKQogICAgICAgIGVsc2U6Cjx8ZmltX2VuZHw+"]
["70208f79f7d7d62e4a36beaf66623c6ad700c828-2","70208f79f7d7d62e4a36beaf66623c6ad700c828","PHxmaW1fcHJlZml4fD4KCmltcG9ydCBweXRlc3QKZnJvbSByZWRiaXJkLnJlcG9zIGltcG9ydCBTUUxSZXBvCmZyb20gcHlkYW50aWMgaW1wb3J0IEJhc2VNb2RlbAoKY2xhc3MgTXlJdGVtKEJhc2VNb2RlbCk6CiAgICBpZDogc3RyCiAgICBuYW1lOiBzdHIKICAgIGFnZTogaW50CgpjbGFzcyBNeUl0ZW1XaXRoT1JNKEJhc2VNb2RlbCk6CiAgICBpZDogc3RyCiAgICBuYW1lOiBzdHIKICAgIGFnZTogaW50CiAgICBjbGFzcyBDb25maWc6CiAgICAgICAgb3JtX21vZGUgPSBUcnVlCgp0cnk6CiAgICBmcm9tIHNxbGFsY2hlbXkub3JtIGltcG9ydCBkZWNsYXJhdGl2ZV9iYXNlCiAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IENvbHVtbiwgU3RyaW5nLCBJbnRlZ2VyCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgIHBhc3MKZWxzZToKICAgIFNRTEJhc2UgPSBkZWNsYXJhdGl2ZV9iYXNlKCkKCiAgICBjbGFzcyBTUUxJdGVtKFNRTEJhc2UpOgogICAgICAgIF9fdGFibGVuYW1lX18gPSAncHl0ZXN0JwogICAgICAgIGlkID0gQ29sdW1uKFN0cmluZywgcHJpbWFyeV9rZXk9VHJ1ZSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIG5hbWUgPSBDb2x1bW4oU3RyaW5nKQogICAgICAgIGFnZSA9IENvbHVtbihJbnRlZ2VyKQoKICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKPHxmaW1fZW5kfD4="]
["7090a65930f225f5de31a000e98a7aafdccfdb2c-4","7090a65930f225f5de31a000e98a7aafdccfdb2c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGVudW0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppbXBvcnQgbWF0aAppbXBvcnQgcmFuZG9tCmltcG9ydCBjb2NvdGIuYmluYXJ5Cgo8fGZpbV9lbmR8Pg=="]
["7058191fb91bb66e406ad816bcd347eb8f3b81f5-2","7058191fb91bb66e406ad816bcd347eb8f3b81f5","PHxmaW1fcHJlZml4fD4KZnJvbSBVdGlscy5DbHVzdGVyIGltcG9ydCBDbHVzdGVyCmZyb20gVXRpbHMuU2FtcGxlIGltcG9ydCBTYW1wbGUKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gbWF0cGxvdGxpYiBpbXBvcnQgaW1hZ2UsIHB5cGxvdAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG9zCgpjbGFzcyBLTWVhbnMoKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzYW1wbGVzLCBrLCBkaW1lbnNpb25zKToKICAgICAgICBzZWxmLnNhbXBsZXMgPSBzYW1wbGVzCiAgICAgICAgc2VsZi5rID0gawogICAgICAgIHNlbGYuZGltZW5zaW9ucyA9IGRpbWVuc2lvbnMKICAgICAgICBzZWxmLmNlbnRyb2lkcyA9IFtdICMgdGhlcmUgc2hvdWxkIGJlIGsgcC1kaW1lbnNpb25hbCBtZWFuIHZlY3RvcnMKICAgICAgICBzZWxmLmNsdXN0ZXJzID0gW10KCiAgICBkZWYgbGVhcm4oc2VsZiwgQz0uMSk6CiAgICAgICAgc2VsZi5pbml0aWFsaXplX2NsdXN0ZXJzX2FuZF9jZW50cm9pZHMoKQogICAgICAgIG51bV9jaGFuZ2VkX3NhbXBsZXMgPSBsZW4oc2VsZi5zYW1wbGVzKQogICAgICAgIHdoaWxlKG51bV9jaGFuZ2VkX3NhbXBsZXMgPiAobGVuKHNlbGYuc2FtcGxlcykqQykpOgogICAgICAgICAgICBmb3IgayBpbiByYW5nZShzZWxmLmspOgogICAgICAgICAgICAgICAgY2VudHJvaWQgPSBzZWxmLmNvbXB1dGVfY2VudHJvaWQoc2VsZi5jbHVzdGVyc1trXSkKICAgICAgICAgICAgICAgIHNlbGYuY2VudHJvaWRzW2tdID0gY2VudHJvaWQKICAgICAgICAgICAgY2hhbmdlZF9zYW1wbGVzID0gc2VsZi5hc3NpZ25fcG9pbnRzX3RvX2NsdXN0ZXJzKCkKICAgICAgICAgICAgbnVtX2NoYW5nZWRfc2FtcGxlcyA9IGxlbihjaGFuZ2VkX3NhbXBsZXMpCgogICAgZGVmIGluaXRpYWxpemVfY2x1c3RlcnNfYW5kX2NlbnRyb2lkcyhzZWxmKToKICAgICAgICBmb3IgayBpbiByYW5nZShzZWxmLmspOgogICAgICAgICAgICBzZWxmLmNsdXN0ZXJzLmFwcGVuZChDbHVzdGVyKGxpc3QoKSwgaykpCiAgICAgICAgZm9yIHNhbXBsZSBpbiBzZWxmLnNhbXBsZXM6CiAgICAgICAgICAgIGsgPSBzYW1wbGUuZ2V0WSgpCiAgICAgICAgICAgIHNlbGYuY2x1c3RlcnNba10uYWRkU2FtcGxlKHNhbXBsZSkKICAgICAgICBmb3IgayBpbiByYW5nZShzZWxmLmspOgogICAgICAgICAgICBjZW50cm9pZCA9IHNlbGYuY29tcHV0ZV9jZW50cm9pZChzZWxmLmNsdXN0ZXJzW2tdKQogICAgICAgICAgICBzZWxmLmNlbnRyb2lkcy5hcHBlbmQoY2VudHJvaWQpCgogICAgZGVmIGNvbXB1dGVfY2VudHJvaWQoc2VsZiwgY2x1c3Rlcik6CiAgICAgICAgY2VudHJvaWQgPSBucC56ZXJvcyhzZWxmLmRpbWVuc2lvbnMpCiAgICAgICAgY291bnQgPSAwICMgdG8gYXZvaWQgZGl2aWRlIGJ5IHplcm8KICAgICAgICBmb3Igc2FtcGxlIGluIGNsdXN0ZXIuZ2V0WCgpOgogICAgICAgICAgICBjZW50cm9pZCArPSBzYW1wbGUuZ2V0WCgpCiAgICAgICAgICAgIGNvdW50ICs9IDEKICAgICAgICBpZiBjb3VudCA9PSAwOiBjb3VudCA9IDEgIyBhdm9pZCBkaXZpZGUgYnkgemVybwogICAgICAgIGNlbnRyb2lkID0gY2VudHJvaWQvY291bnQKICAgICAgICByZXR1cm4gY2VudHJvaWQKICAgICAgICAKICAgIGRlZiBhc3NpZ25fcG9pbnRzX3RvX2NsdXN0ZXJzKHNlbGYpOgogICAgICAgIGNoYW5nZWRfc2FtcGxlcyA9IGxpc3QoKQogICAgICAgIGZvciBrIGluIHJhbmdlKHNlbGYuayk6CiAgICAgICAgICAgIHNlbGYuY2x1c3RlcnNba10uY2xlYXIoKQogICAgICAgIGZvciBzYW1wbGUgaW4gc2VsZi5zYW1wbGVzOgogICAgICAgICAgICBjbG9zZXN0X2sgPSAwCiAgICAgICAgICAgIGNsb3Nlc3RfZGlzdGFuY2UgPSBmbG9hdCgnaW5mJykKICAgICAgICAgICAgZm9yIGsgaW4gcmFuZ2Uoc2VsZi5rKToKICAgICAgICAgICAgICAgIGRpc3QgPSBzZWxmLmRpc3RhbmNlKHNhbXBsZS5nZXRYKCksIHNlbGYuY2VudHJvaWRzW2tdKQogICAgICAgICAgICAgICAgaWYgZGlzdDxjbG9zZXN0X2Rpc3RhbmNlOgogICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RfZGlzdGFuY2UgPSBkaXN0CiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdF9rID0gawogICAgICAgICAgICBpZiBzYW1wbGUuZ2V0WSgpICE9IGNsb3Nlc3RfazoKICAgICAgICAgICAgICAgIGNoYW5nZWRfc2FtcGxlcy5hcHBlbmQoc2FtcGxlKQogICAgICAgICAgICAgICAgc2FtcGxlLnNldFkoY2xvc2VzdF9rKQogICAgICAgICAgICBzZWxmLmNsdXN0ZXJzW2Nsb3Nlc3Rfa10uYWRkU2FtcGxlKHNhbXBsZSkKICAgICAgICByZXR1cm4gY2hhbmdlZF9zYW1wbGVzCgogICAgZGVmIGRpc3RhbmNlKHNlbGYsIHBvaW50LCB0YXJnZXQpOgogICAgICAgIGRpZiA9IHBvaW50LXRhcmdldAogICAgICAgIGZvciBpZHggaW4gcmFuZ2UobGVuKGRpZikpOgogICAgICAgICAgICBkaWZbaWR4XSA9IGRpZltpZHhdKmRpZltpZHhdCiAgICAgICAgcmV0dXJuIHN1bShkaWYpCgogICAgZGVmIHByaW50KHNlbGYpOgogICAgICAgIHByaW50KHNlbGYuY2VudHJvaWRzKQoKICAgIGRlZiBnZXRDZW50cm9pZHMoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuY2VudHJvaWRzCiAgICAKICAgIGRlZiBnZXRDbHVzdGVycyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5jbHVzdGVycwoKICAgIGRlZiBzZXRDZW50cm9pZHMoc2VsZiwgY2VudHJvaWRzKToKICAgICAgICBzZWxmLmNlbnRyb2lkcyA9IGNlbnRyb2lkcwogICAgICAgIAogICAgZGVmIHBhaW50X2J5X251bWJlcnMoc2VsZiwgaW1hZ2VfbmFtZSwgc2F2ZV9wYXRoPSIiLCBzaG93PVRydWUpOgogICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCiAgICAgICAganBnX3BhdGggPSBjd2QrIlxccHJvamVjdFxcRGF0YXNldHNcXEpQR3NcXCIKICAgICAgICAjIGxvYWQgaW1hZ2UgYXMgcGl4ZWwgYXJyYXkKICAgICAgICBpbWcgPSBpbWFnZS5pbXJlYWQoanBnX3BhdGgraW1hZ2VfbmFtZSkKICAgICAgICBmb3Igcm93IGluIHJhbmdlKGxlbihpbWcpKToKICAgICAgICAgICAgZm9yIGNvbCBpbiByYW5nZShsZW4oaW1nW3Jvd10pKToKICAgICAgICAgICAgICAgIHBpeGVsID0gaW1nW3Jvd11bY29sXQogICAgICAgICAgICAgICAgY2xvc2VzdF9rID0gMAogICAgICAgICAgICAgICAgY2xvc2VzdF9kaXN0YW5jZSA9IGZsb2F0KCdpbmYnKQogICAgICAgICAgICAgICAgZm9yIGsgaW4gcmFuZ2Uoc2VsZi5rKToKICAgICAgICAgICAgICAgICAgICBkaXN0ID0gc2VsZi5kaXN0YW5jZShwaXhlbCwgc2VsZi5jZW50cm9pZHNba10pCiAgICAgICAgICAgICAgICAgICAgaWYgZGlzdDxjbG9zZXN0X2Rpc3RhbmNlOgogICAgICAgICAgICAgICAgICAgICAgICBjbG9zZXN0X2Rpc3RhbmNlID0gZGlzdAogICAgICAgICAgICAgICAgICAgICAgICBjbG9zZXN0X2sgPSBrCiAgICAgICAgICAgICAgICBpbWdbcm93XVtjb2xdID0gc2VsZi5jZW50cm9pZHNbY2xvc2VzdF9rXQogICAgICAgIHB5cGxvdC5pbXNob3coaW1nKQogICAgICAgIGF4ID0gcHlwbG90LmdjYSgpCiAgICAgICAgYXguYXhlcy5nZXRfeWF4aXMoKS5zZXRfdmlzaWJsZShGYWxzZSkKICAgICAgICBheC5heGVzLmdldF94YXhpcygpLnNldF92aXNpYmxlKEZhbHNlKQogICAgICAgIGlmIHNhdmVfcGF0aCAhPSAiIjoKICAgICAgICAgICAgcHlwbG90Lmltc2F2ZShzYXZlX3BhdGgsIGltZykKICAgICAgICBpZiBzaG93OgogICAgICAgICAgICBweXBsb3Quc2hvdygpCiAgICAgICAgcHlwbG90LmNsb3NlKCkKCgogICAgZGVmIGV2YWx1YXRlX2xpa2VsaWhvb2Qoc2VsZik6CiAgICAgICAgIyB0aGUgbGlrZWxpaG9vZCB0aGF0IHR3byBwb2ludHMgY2hvc2VuIHRvIGJlIGluIHRoZSBzYW1lIGNsdXN0ZXIgYnkgYSBjbHVzdGVyaW5nIGFsZ29yaXRobQogICAgICAgICMgd2FzIGdlbmVyYXRlZCBieSB0aGUgc2FtZSBzb3VyY2UgZGlzdHJpYnV0aW9uLCBpLmUuLCB0aGUgZnJhY3Rpb24gb2YgcGFpcnMgYmVsb25naW5nIHRvIHNhbWUgb3V0cHV0CiAgICAgICAgIyBjbHVzdGVyIHRoYXQgd2VyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgc2FtZSBzb3VyY2UuCiAgICAgICAgTiA9IGxlbihzZWxmLnNhbXBsZXMpCiAgICAgICAgbGlrZWxpaG9vZCA9IDAKICAgICAgICBmb3IgY2x1c3RlciBpbiBzZWxmLmNsdXN0ZXJzOgogICAgICAgICAgICAjIEVhY2ggY2x1c3RlciBtYXkgY29udGFpbiBwb2ludHMgZnJvbSBtb3JlIHRoYW4gb25lIGNsYXNzLgogICAgICAgICAgICAjIERldGVybWluZSB0aGUgbnVtYmVyIG9mIHBvaW50cyBmcm9tIGVhY2ggY2xhc3MgaW4gdGhlIGNsdXN0ZXIuCiAgICAgICAgICAgIHRydWVfbGFiZWxfY3RzID0gZGljdCgpCiAgICAgICAgICAgIG4gPSBsZW4oY2x1c3Rlci5nZXRYKCkpCiAgICAgICAgICAgIGZvciBzYW1wbGUgaW4gY2x1c3Rlci5nZXRYKCk6CiAgICAgICAgICAgICAgICBsYWJlbCA9IHNhbXBsZS5nZXRUcnVlTGFiZWwoKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICBpZiBsYWJlbCBub3QgaW4gdHJ1ZV9sYWJlbF9jdHM6CiAgICAgICAgICAgICAgICAgICAgdHJ1ZV9sYWJlbF9jdHNbbGFiZWxdID0gMAogICAgICAgICAgICAgICAgdHJ1ZV9sYWJlbF9jdHNbbGFiZWxdICs9IDEKPHxmaW1fZW5kfD4="]
["5684f201d7f9af03553311a7946b746e66d06407-2","5684f201d7f9af03553311a7946b746e66d06407","PHxmaW1fcHJlZml4fD4KIyBEYXRhYnJpY2tzIG5vdGVib29rIHNvdXJjZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKIyBDT01NQU5EIC0tLS0tLS0tLS0KCjx8ZmltX2VuZHw+"]
["7000f19280ce153d2ce040a815b87e9c11ed2cb1-1","7000f19280ce153d2ce040a815b87e9c11ed2cb1","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRLCBDb3VudApmcm9tIG90Y29yZS5oaXQubW9kZWxzIGltcG9ydCBIaXQsIEJhc2tldApmcm9tIG90Y29yZS5yZWxhdGlvbi5tb2RlbHMgaW1wb3J0IFJlbGF0aW9uVHlwZSwgUmVsYXRlZEJhc2tldApmcm9tIG90Y29yZS50b3BpYy5tb2RlbHMgaW1wb3J0IFRva2VuZ3JvdXAKZnJvbSBvdGNvcmUuc2V0dGluZ3MgaW1wb3J0IG90Y29yZV9zZXR0aW5ncwoKCgpkZWYgZ2V0X3J0eXBlcygpOgogICAgY29udGFpbm1lbnQsIF8gPSBSZWxhdGlvblR5cGUub2JqZWN0cy5nZXRfb3JfY3JlYXRlKHJ0eXBlPSJDb250YWlubWVudCIsCiAgICAgICAgZGVmYXVsdHMgPSB7CiAgICAgICAgICAgICdyb2xlX2Zyb20nOiAnY29udGFpbmVkIGJ5JywKICAgICAgICAgICAgJ3JvbGVfdG8nOiAnY29udGFpbnMnLAogICAgICAgICAgICAnc3ltbWV0cmljYWwnOiBGYWxzZQogICAgICAgIH0KICAgICkKCiAgICBtdWx0aXBsZXRva2VucywgXyA9IFJlbGF0aW9uVHlwZS5vYmplY3RzLmdldF9vcl9jcmVhdGUocnR5cGU9Ik11bHRpcGxlVG9rZW5zIiwKICAgICAgICBkZWZhdWx0cyA9IHsKICAgICAgICAgICAgJ3JvbGVfZnJvbSc6ICdNdWx0aXBsZSBUb2tlbnMgd2l0aCcsCiAgICAgICAgICAgICdyb2xlX3RvJzogJ011bHRpcGxlIFRva2VucyB3aXRoJywKICAgICAgICB9CiAgICApCgogICAgcmV0dXJuIHsKICAgICAgICAnY29udGFpbm1lbnQnOiBjb250YWlubWVudCwKICAgICAgICAnbXVsdGlwbGV0b2tlbnMnOiBtdWx0aXBsZXRva2VucwogICAgfQoKCmRlZiBnbG9iYWxfY29udGFpbm1lbnQoKToKICAgICIiIgogICAgUnVucyB0aGUgY29udGFpbm1lbnQgcnVsZSBmb3IgZXZlcnkgaGl0LgogICAgIiIiCiAgICBydHlwZXMgPSBnZXRfcnR5cGVzKCkKCiAgICBjb3VudGVyPTAKICAgIGFsbF9zbHVncyA9IEhpdC5vYmplY3RzLm9yZGVyX2J5KCdzbHVnJykuZGlzdGluY3QoJ3NsdWcnKS52YWx1ZXNfbGlzdCgnc2x1ZycsIGZsYXQ9VHJ1ZSkKICAgIHNsdWdfc2V0cyA9IFsoZnJvemVuc2V0KHNsdWcuc3BsaXQoJy0nKSksIHNsdWcpIGZvciBzbHVnIGluIGFsbF9zbHVnc10KICAgIHNsdWdfc2V0cyA9IHNvcnRlZChsaXN0KHNsdWdfc2V0cyksIGtleT1sYW1iZGEgeDogbGVuKHhbMF0pKQoKICAgIHdoaWxlIGxlbihzbHVnX3NldHMpID4gMDoKICAgICAgICBzaW5nbGVfaGl0X2NvbnRhaW5tZW50KHNsdWdfc2V0c1swXSwgc2x1Z19zZXRzWzE6XSwgcnR5cGVzKQogICAgICAgIHNsdWdfc2V0cyA9IHNsdWdfc2V0c1sxOl0KICAgICAgICBjb3VudGVyICs9IDEKCgpkZWYgcHJvY2Vzc19zaW5nbGVfYmFza2V0KGJhc2tldCk6CiAgICAiIiIKICAgIFJ1bnMgY29udGFpbm1lbnQgYW5kIG11bHRpcGxldG9rZW5zIG9uIGEgb24gYSBzaW5nbGUgYmFza2V0CiAgICAiIiIKICAgIHJ0eXBlcyA9IGdldF9ydHlwZXMoKQoKICAgICMgQ29udGFpbm1lbnQKICAgIGFsbF9zbHVncyA9IEhpdC5vYmplY3RzLm9yZGVyX2J5KCdzbHVnJykuZGlzdGluY3QoJ3NsdWcnKS52YWx1ZXNfbGlzdCgnc2x1ZycsIGZsYXQ9VHJ1ZSkKICAgIHNsdWdfc2V0cyA9IFsoZnJvemVuc2V0KHNsdWcuc3BsaXQoJy0nKSksIHNsdWcpIGZvciBzbHVnIGluIGFsbF9zbHVnc10KCiAgICBiYXNrZXRfc2x1Z3MgPSBiYXNrZXQudG9waWNfaGl0cy5vcmRlcl9ieSgnc2x1ZycpLmRpc3RpbmN0KCdzbHVnJykudmFsdWVzX2xpc3QoJ3NsdWcnLCBmbGF0PVRydWUpCgogICAgZm9yIHNsdWcgaW4gYmFza2V0X3NsdWdzOgogICAgICAgIHNsdWdfc2V0ID0gKGZyb3plbnNldChzbHVnLnNwbGl0KCctJykpLCBzbHVnKQogICAgICAgIGxvbmdlcl9zbHVncyA9IFtzIGZvciBzIGluIHNsdWdfc2V0cyBpZiBsZW4oc2x1Z19zZXRbMF0pIDwgbGVuKHNbMF0pXQogICAgICAgIHNpbmdsZV9oaXRfY29udGFpbm1lbnQoc2x1Z19zZXQsIGxvbmdlcl9zbHVncywgcnR5cGVzKQoKICAgICAgICBzaG9ydGVyX3NsdWdzID0gW3MgZm9yIHMgaW4gc2x1Z19zZXRzIGlmIGxlbihzbHVnX3NldFswXSkgPiBsZW4oc1swXSldCiAgICAgICAgcmV2ZXJzZV9jb250YWlubWVudChzbHVnX3NldCwgc2hvcnRlcl9zbHVncywgcnR5cGVzKQoKICAgICMgTXVsdGlwbGUgVG9rZW5zCiAgICBiYXNrZXQubG9jYWxfdG9rZW5ncm91cCgpCiAgICBmb3IgdG9rZW5ncm91cCBpbiBiYXNrZXQudG9rZW5ncm91cHMuYWxsKCk6CiAgICAgICAgc2luZ2xlX3Rva2VuZ3JvdXBfY2hlY2sodG9rZW5ncm91cCwgcnR5cGVzKQoKCmRlZiBzaW5nbGVfaGl0X2NvbnRhaW5tZW50KHNsdWdfc2V0LCBzbHVnX3NldHMsIHJ0eXBlcyk6CiAgICAiIiIKICAgIHJ1bnMgY29udGFpbm1lbnQgb24gYSBzaW5nbGUgc2x1Zy4gIEFzc3VtZXMgdGhhdCB0aGUgc2x1ZyBiZWluZyBwYXNzZWQgaW4gaXMKICAgIHNob3J0ZXIgdGhhbiB0aGUgcmVtYWluaW5nIHNsdWdzLiAgSWYgaXQncyBsb25nZXIsIHJ1biB0aGUgYHJldmVyc2VfY29udGFpbm1lbnRgIGluc3RlYWQKICAgICIiIgogICAgcmVzdWx0cyA9IFtzWzFdIGZvciBzIGluIHNsdWdfc2V0cyBpZiBzbHVnX3NldFswXSA8IHNbMF1dCgogICAgZm9yIHJlc3VsdCBpbiByZXN1bHRzOgogICAgICAgIHNvdXJjZV9oaXRzID0gSGl0Lm9iamVjdHMuZmlsdGVyKHNsdWc9c2x1Z19zZXRbMV0sIGJhc2tldF9faXNudWxsPUZhbHNlKQogICAgICAgIHJlc3VsdF9oaXRzID0gSGl0Lm9iamVjdHMuZmlsdGVyKHNsdWc9cmVzdWx0LCBiYXNrZXRfX2lzbnVsbD1GYWxzZSkKCiAgICAgICAgZm9yIHNvdXJjZV9oaXQgaW4gc291cmNlX2hpdHM6CiAgICAgICAgICAgIGZvciByZXN1bHRfaGl0IGluIHJlc3VsdF9oaXRzOgogICAgICAgICAgICAgICAgaWYgc291cmNlX2hpdC5iYXNrZXQgIT0gcmVzdWx0X2hpdC5iYXNrZXQgYW5kIG5vdCBSZWxhdGVkQmFza2V0Lm9iamVjdHMuZmlsdGVyKHNvdXJjZT1zb3VyY2VfaGl0LmJhc2tldCwgZGVzdGluYXRpb249cmVzdWx0X2hpdC5iYXNrZXQpLmV4aXN0cygpOgogICAgICAgICAgICAgICAgICAgIFJlbGF0ZWRCYXNrZXQub2JqZWN0cy5jcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9udHlwZT1ydHlwZXNbJ2NvbnRhaW5tZW50J10sCiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT1zb3VyY2VfaGl0LmJhc2tldCwKICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb249cmVzdWx0X2hpdC5iYXNrZXQKICAgICAgICAgICAgICAgICAgICApCgoKZGVmIHJldmVyc2VfY29udGFpbm1lbnQoc2x1Z19zZXQsIHNsdWdfc2V0cywgcnR5cGVzKToKICAgIHJlc3VsdHMgPSBbc1sxXSBmb3IgcyBpbiBzbHVnX3NldHMgaWYgc1swXSA8IHNsdWdfc2V0WzBdXQoKICAgIGZvciByZXN1bHQgaW4gcmVzdWx0czoKICAgICAgICBzb3VyY2VfaGl0cyA9IEhpdC5vYmplY3RzLmZpbHRlcihzbHVnPXNsdWdfc2V0WzFdLCBiYXNrZXRfX2lzbnVsbD1GYWxzZSkKICAgICAgICByZXN1bHRfaGl0cyA9IEhpdC5vYmplY3RzLmZpbHRlcihzbHVnPXJlc3VsdCwgYmFza2V0X19pc251bGw9RmFsc2UpCgogICAgICAgIGZvciBzb3VyY2VfaGl0IGluIHNvdXJjZV9oaXRzOgogICAgICAgICAgICBmb3IgcmVzdWx0X2hpdCBpbiByZXN1bHRfaGl0czoKICAgICAgICAgICAgICAgIGlmIHNvdXJjZV9oaXQuYmFza2V0ICE9IHJlc3VsdF9oaXQuYmFza2V0IGFuZCBub3QgUmVsYXRlZEJhc2tldC5vYmplY3RzLmZpbHRlcihzb3VyY2U9cmVzdWx0X2hpdC5iYXNrZXQsIGRlc3RpbmF0aW9uPXNvdXJjZV9oaXQuYmFza2V0KS5leGlzdHMoKToKICAgICAgICAgICAgICAgICAgICBSZWxhdGVkQmFza2V0Lm9iamVjdHMuY3JlYXRlKAogICAgICAgICAgICAgICAgICAgICAgICByZWxhdGlvbnR5cGU9cnR5cGVzWydjb250YWlubWVudCddLAogICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9cmVzdWx0X2hpdC5iYXNrZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uPXNvdXJjZV9oaXQuYmFza2V0CiAgICAgICAgICAgICAgICAgICAgKQoKCmRlZiBvbmVfY29udGFpbm1lbnQobmFtZSk6CiAgICAiIiIKICAgIFJ1bnMgdGhlIGNvbnRhaW5tZW50IHJ1bGUgZm9yIG9uZSBoaXQuCiAgICAiIiIKICAgIGFsbF9zbHVncyA9IEhpdC5vYmplY3RzLm9yZGVyX2J5KCdzbHVnJykuZGlzdGluY3QoJ3NsdWcnKS52YWx1ZXNfbGlzdCgnc2x1ZycsIGZsYXQ9VHJ1ZSkKICAgIHNsdWdfc2V0cyA9IFsoZnJvemVuc2V0KHNsdWcuc3BsaXQoJy0nKSksIHNsdWcpIGZvciBzbHVnIGluIGFsbF9zbHVnc10KCiAgICBydHlwZXMgPSBnZXRfcnR5cGVzKCkKCiAgICBoaXRzID0gSGl0Lm9iamVjdHMuZmlsdGVyKG5hbWU9bmFtZSkKICAgIHNsdWcgPSBoaXRzWzBdLnNsdWcKCiAgICBzbHVnX3NldCA9IChmcm96ZW5zZXQoc2x1Zy5zcGxpdCgnLScpKSwgc2x1ZykKICAgIGxvbmdlcl9zbHVncyA9IFtzIGZvciBzIGluIHNsdWdfc2V0cyBpZiBsZW4oc2x1Z19zZXRbMF0pIDwgbGVuKHNbMF0pXQogICAgc2luZ2xlX2hpdF9jb250YWlubWVudChzbHVnX3NldCwgbG9uZ2VyX3NsdWdzLCBydHlwZXMpCgogICAgc2hvcnRlcl9zbHVncyA9IFtzIGZvciBzIGluIHNsdWdfc2V0cyBpZiBsZW4oc2x1Z19zZXRbMF0pID4gbGVuKHNbMF0pXQogICAgcmV2ZXJzZV9jb250YWlubWVudChzbHVnX3NldCwgc2hvcnRlcl9zbHVncywgcnR5cGVzKQoKCmRlZiBnbG9iYWxfdG9rZW5ncm91cHMoKToKICAgICIiIgogICAgQ3JlYXRlIHRva2VuIGdyb3VwcyBmb3IgYWxsIGJhc2tldHMuCiAgICAiIiIKICAgIHByaW50KCdQcm9jZXNzaW5nOiBHbG9iYWwgVG9rZW4gR3JvdXBzJykKICAgIGNvdW50ZXIgPSAwCiAgICBiYXNrZXRzX251bWJlciA9IEJhc2tldC5vYmplY3RzLmNvdW50KCkKICAgIGZvciBiYXNrZXQgaW4gQmFza2V0Lm9iamVjdHMuYWxsKCkub3JkZXJfYnkoJ2lkJykuZGlzdGluY3QoJ2lkJyk6CiAgICAgICAgY291bnRlciArPSAxCiAgICAgICAgcHJpbnQoJ1RPS0VOR1JPVVBTOiAlcyBvZiAlcycgJSAoY291bnRlciwgYmFza2V0c19udW1iZXIpKQogICAgICAgIGJhc2tldC5sb2NhbF90b2tlbmdyb3VwKCkKCgpkZWYgZ2xvYmFsX211bHRpcGxlX3Rva2VucygpOgogICAgIiIiCiAgICBSdW5zIG11bHRpcGxldG9rZW4gcnVsZSBvbiBhbGwgYmFza2V0cwogICAgIiIiCiAgICBydHlwZXMgPSBnZXRfcnR5cGVzKCkKCiAgICBjb3VudGVyPTAKICAgIHRvdGFsPVRva2VuZ3JvdXAub2JqZWN0cy5hbm5vdGF0ZShjPUNvdW50KCdiYXNrZXQnKSkuZmlsdGVyKGNfX2d0PTEpLmNvdW50KCkKICAgIGZvciB0b2tlbmdyb3VwIGluIFRva2VuZ3JvdXAub2JqZWN0cy5hbm5vdGF0ZShjPUNvdW50KCdiYXNrZXQnKSkuZmlsdGVyKGNfX2d0PTEpOgogICAgICAgIHByaW50KCJNdWx0aXBsZSBUb2tlbnMge30gb2Yge30iLmZvcm1hdChjb3VudGVyLCB0b3RhbCkpCiAgICAgICAgY291bnRlciArPSAxCgogICAgICAgIHNpbmdsZV90b2tlbmdyb3VwX2NoZWNrKHRva2VuZ3JvdXAsIHJ0eXBlcykKCgpkZWYgc2luZ2xlX3Rva2VuZ3JvdXBfY2hlY2sodG9rZW5ncm91cCwgcnR5cGVzKToKICAgICIiIgogICAgRG9lcyBhIG11bHRpcGxldG9rZW4gY2hlY2sgb24gYSBzaW5nbGUgdG9rZW5ncm9wdQo8fGZpbV9ob2xlfD4KICAgICAgICBzb3VyY2VfYmFza2V0ID0gYmFza2V0cy5wb3AoKQoKICAgICAgICBmb3IgZGVzdF9iYXNrZXQgaW4gYmFza2V0czoKICAgICAgICAgICAgaWYgbm90IFJlbGF0ZWRCYXNrZXQub2JqZWN0cy5maWx0ZXIoc291cmNlPXNvdXJjZV9iYXNrZXQsIGRlc3RpbmF0aW9uPWRlc3RfYmFza2V0KS5leGlzdHMoKSBhbmQgbm90IFJlbGF0ZWRCYXNrZXQub2JqZWN0cy5maWx0ZXIoc291cmNlPWRlc3RfYmFza2V0LCBkZXN0aW5hdGlvbj1zb3VyY2VfYmFza2V0KS5leGlzdHMoKToKICAgICAgICAgICAgICAgIFJlbGF0ZWRCYXNrZXQub2JqZWN0cy5jcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgcmVsYXRpb250eXBlPXJ0eXBlc1snbXVsdGlwbGV0b2tlbnMnXSwKICAgICAgICAgICAgICAgICAgICBzb3VyY2U9c291cmNlX2Jhc2tldCwKICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbj1kZXN0X2Jhc2tldAogICAgICAgICAgICAgICAgKQoKCmRlZiBhbHRfZ2xvYmFsX211bHRpcGxlX3Rva2VucygpOgogICAgIiIiCiAgICBDcmVhdGVzIE11bHRpcGxlVG9rZW4gUmVsYXRpb25zIHdpdGhvdXQgdXNpbmcgVG9rZW5Hcm91cHMKICAgICIiIgogICAgcnR5cGVzID0gZ2V0X3J0eXBlcygpCgogICAgaGl0cyA9IEhpdC5vYmplY3RzLmFsbCgpCiAgICBzbHVnX3NldHMgPSBbKGZyb3plbnNldChoaXQuc2x1Zy5zcGxpdCgnLScpKSwgaGl0KSBmb3IgaGl0IGluIGhpdHMgaWYgbGVuKGZyb3plbnNldChoaXQuc2x1Zy5zcGxpdCgnLScpKSkgPj0gb3Rjb3JlX3NldHRpbmdzLk1VTFRJUExFX1JFTEFUSU9OU19DT1VOVF0KCiAgICBjb3VudGVyPTAKICAgIHRvdGFsPWxlbihzbHVnX3NldHMpCiAgICB3aGlsZSBsZW4oc2x1Z19zZXRzKSA+IDE6CiAgICAgICAgY291bnRlciArPSAxCiAgICAgICAgcHJpbnQoIk11bHRpcGxlIFRva2VucyB7fSBvZiB7fSIuZm9ybWF0KGNvdW50ZXIsIHRvdGFsKSkKCiAgICAgICAgYWx0X3NpbmdsZV9zZXRfbXVsdGlwbGVfdG9rZW5zKHNsdWdfc2V0c1swXSwgc2x1Z19zZXRzWzE6XSwgcnR5cGVzKQogICAgICAgIHNsdWdfc2V0cyA9IHNsdWdfc2V0c1sxOl0KCgpkZWYgYWx0X3NpbmdsZV9zZXRfbXVsdGlwbGVfdG9rZW5zKHNsdWdfc2V0LCBzbHVnX3NldHMsIHJ0eXBlcyk6CiAgICAiIiIKICAgIENoZWNrIGZvciBtdWx0aXBsZSB0b2tlbiByZWxhdGlvbnMgb24gYSBzaW5nbGUgaGl0L3NsdWdfc2V0IHBhaXIKICAgICIiIgogICAgaW50ZXJzZWN0aW9ucyA9IFtzIGZvciBzIGluIHNsdWdfc2V0cyBpZiBsZW4oc1swXS5pbnRlcnNlY3Rpb24oc2x1Z19zZXRbMF0pKSA+PSBvdGNvcmVfc2V0dGluZ3MuTVVMVElQTEVfUkVMQVRJT05TX0NPVU5UXQoKICAgIGZvciBoaXRfc2V0IGluIGludGVyc2VjdGlvbnM6CiAgICAgICAgaGl0MSA9IHNsdWdfc2V0WzFdCiAgICAgICAgaGl0MiA9IGhpdF9zZXRbMV0KCiAgICAgICAgaWYgaGl0MS5iYXNrZXQgIT0gaGl0Mi5iYXNrZXQgYW5kIFwKICAgICAgICAgICAgICAgIG5vdCBSZWxhdGVkQmFza2V0Lm9iamVjdHMuZmlsdGVyKHNvdXJjZT1oaXQxLmJhc2tldCwgZGVzdGluYXRpb249aGl0Mi5iYXNrZXQpLmV4aXN0cygpIGFuZCBcCiAgICAgICAgICAgICAgICBub3QgUmVsYXRlZEJhc2tldC5vYmplY3RzLmZpbHRlcihzb3VyY2U9aGl0Mi5iYXNrZXQsIGRlc3RpbmF0aW9uPWhpdDEuYmFza2V0KS5leGlzdHMoKToKICAgICAgICAgICAgUmVsYXRlZEJhc2tldC5vYmplY3RzLmNyZWF0ZSgKICAgICAgICAgICAgICAgIHJlbGF0aW9udHlwZT1ydHlwZXNbJ211bHRpcGxldG9rZW5zJ10sCiAgICAgICAgICAgICAgICBzb3VyY2U9aGl0MS5iYXNrZXQsCiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbj1oaXQyLmJhc2tldAogICAgICAgICAgICApCjx8ZmltX3N1ZmZpeHw+CiAgICAiIiIKICAgIGJhc2tldHMgPSBsaXN0KHRva2VuZ3JvdXAuYmFza2V0X3NldC5hbGwoKSkKCiAgICB3aGlsZSBsZW4oYmFza2V0cykgPiAxOgo8fGZpbV9lbmR8Pg=="]
["5cdc7b02097849718f4e90a70ee6cd74b26a22be-1","5cdc7b02097849718f4e90a70ee6cd74b26a22be","PHxmaW1fcHJlZml4fD4KZnJvbSBiY2NhLnRlc3QgaW1wb3J0IGV4cGVjdAoKCmNsYXNzIFRlc3RGdW5jdGlvbnNDYW5IYXZlTXVsdGlwbGVFeHBlY3RhdGlvbnM6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiB0ZXN0X2Nhbl9oYXZlX29uZV9leHBlY3RhdGlvbnMoKToKICAgICAgICBAZXhwZWN0KHg9MiwgeT0yLCB0b19yZXR1cm49NCkKICAgICAgICBkZWYgYWRkKHgsIHkpOgo8fGZpbV9lbmR8Pg=="]
["568e7fdf0fd8893a62f9cee1ef641aacc780f30a-1","568e7fdf0fd8893a62f9cee1ef641aacc780f30a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgQ29weXJpZ2h0IDIwMTQgVGhlIExVQ0kgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCiIiIlNtb2tlIHRlc3QgZm9yIENsb3VkIEVuZHBvaW50cyBzdXBwb3J0IGluIGF1dGggY29tcG9uZW50LgoKSXQgbGF1bmNoZXMgYXBwIHZpYSBkZXZfYXBwc2VydmVyIGFuZCBxdWVyaWVzIGEgYnVuY2ggb2YgY2xvdWQgZW5kcG9pbnRzCm1ldGhvZHMuCiIiIgoKaW1wb3J0IG9zCmltcG9ydCBzaHV0aWwKaW1wb3J0IHN5cwppbXBvcnQgdGVtcGZpbGUKaW1wb3J0IHVuaXR0ZXN0CgpUSElTX0RJUiA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQpURVNUX0FQUF9ESVIgPSBvcy5wYXRoLmpvaW4oVEhJU19ESVIsICd0ZXN0X2VuZHBvaW50c19hcHAnKQpDTElFTlRfRElSID0gb3MucGF0aC5qb2luKAogICAgb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoVEhJU19ESVIpKSksICdjbGllbnQnKQpzeXMucGF0aC5pbnNlcnQoMCwgQ0xJRU5UX0RJUikKCmZyb20gdGhpcmRfcGFydHkuZGVwb3RfdG9vbHMgaW1wb3J0IGZpeF9lbmNvZGluZwpmcm9tIHRvb2xfc3VwcG9ydCBpbXBvcnQgZ2FlX3Nka191dGlscwpmcm9tIHRvb2xfc3VwcG9ydCBpbXBvcnQgbG9jYWxfYXBwCgoKY2xhc3MgQ2xvdWRFbmRwb2ludHNTbW9rZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogIGRlZiBzZXRVcChzZWxmKToKICAgIHN1cGVyKENsb3VkRW5kcG9pbnRzU21va2VUZXN0LCBzZWxmKS5zZXRVcCgpCiAgICBzZWxmLnJvb3QgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZW5kcG9pbnRzX3Ntb2tlX3Rlc3QnKQogICAgc2VsZi5hcHAgPSBsb2NhbF9hcHAuTG9jYWxBcHBsaWNhdGlvbihURVNUX0FQUF9ESVIsIDk3MDAsIEZhbHNlLCBzZWxmLnJvb3QpCiAgICBzZWxmLmFwcC5zdGFydCgpCiAgICBzZWxmLmFwcC5lbnN1cmVfc2VydmluZygpCgogIGRlZiB0ZWFyRG93bihzZWxmKToKICAgIHRyeToKICAgICAgc2VsZi5hcHAuc3RvcCgpCiAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5yb290KQogICAgICBpZiBzZWxmLmhhc19mYWlsZWQoKToKICAgICAgICBzZWxmLmFwcC5kdW1wX2xvZygpCiAgICBmaW5hbGx5OgogICAgICBzdXBlcihDbG91ZEVuZHBvaW50c1Ntb2tlVGVzdCwgc2VsZikudGVhckRvd24oKQoKICBkZWYgaGFzX2ZhaWxlZChzZWxmKToKICAgICMgcHlsaW50OiBkaXNhYmxlPUUxMTAxCiAgICByZXR1cm4gbm90IHNlbGYuX3Jlc3VsdEZvckRvQ2xlYW51cHMud2FzU3VjY2Vzc2Z1bCgpCgogIGRlZiB0ZXN0X3Ntb2tlKHNlbGYpOgogICAgc2VsZi5jaGVja193aG9fYW5vbnltb3VzKCkKICAgIHNlbGYuY2hlY2tfd2hvX2F1dGhlbnRpY2F0ZWQoKQogICAgc2VsZi5jaGVja19mb3JiaWRkZW4oKQoKICBkZWYgY2hlY2tfd2hvX2Fub255bW91cyhzZWxmKToKICAgIHJlc3BvbnNlID0gc2VsZi5hcHAuY2xpZW50Lmpzb25fcmVxdWVzdCgnL19haC9hcGkvdGVzdGluZ19zZXJ2aWNlL3YxL3dobycpCiAgICBzZWxmLmFzc2VydEVxdWFsKDIwMCwgcmVzcG9uc2UuaHR0cF9jb2RlKQogICAgc2VsZi5hc3NlcnRFcXVhbCgnYW5vbnltb3VzOmFub255bW91cycsIHJlc3BvbnNlLmJvZHkuZ2V0KCdpZGVudGl0eScpKQogICAgc2VsZi5hc3NlcnRJbihyZXNwb25zZS5ib2R5LmdldCgnaXAnKSwgKCcxMjcuMC4wLjEnLCAnMDowOjA6MDowOjA6MDoxJykpCgogIGRlZiBjaGVja193aG9fYXV0aGVudGljYXRlZChzZWxmKToKICAgICMgVE9ETyh2YWRpbXNoKTogVGVzdGluZyB0aGlzIHJlcXVpcmVzIGludGVyYWN0aW5nIHdpdGggcmVhbCBPQXV0aDIgc2VydmljZQogICAgIyB0byBnZXQgT0F1dGgyIHRva2VuLiBJdCdzIGRvYWJsZSwgYnV0IHRoZSBzZXJ2aWNlIGFjY291bnQgc2VjcmV0cyBoYWQgdG8KICAgICMgYmUgaGFyZGNvZGVkIGludG8gdGhlIHNvdXJjZSBjb2RlLiBJJ20gbm90IHN1cmUgaXQncyBhIGdvb2QgaWRlYS4KICAgIHBhc3MKCiAgZGVmIGNoZWNrX2ZvcmJpZGRlbihzZWxmKToKICAgIHJlc3BvbnNlID0gc2VsZi5hcHAuY2xpZW50Lmpzb25fcmVxdWVzdCgKICAgICAgICAnL19haC9hcGkvdGVzdGluZ19zZXJ2aWNlL3YxL2ZvcmJpZGRlbicpCiAgICBzZWxmLmFzc2VydEVxdWFsKDQwMywgcmVzcG9uc2UuaHR0cF9jb2RlKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICBmaXhfZW5jb2RpbmcuZml4X2VuY29kaW5nKCkKICBnYWVfc2RrX3V0aWxzLnNldHVwX2dhZV9lbnYoKQogIHVuaXR0ZXN0Lm1haW4oKQo8fGZpbV9lbmR8Pg=="]
["3b5189bd4f8b21377cad0b1a9de094f443ca454a-2","3b5189bd4f8b21377cad0b1a9de094f443ca454a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAoKZnJvbSBsbHNweS5saWJjdWRhd3JhcHBlciBpbXBvcnQgY3VkYUxpYgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpyZXF1aXJlc19jdWRhID0gcHl0ZXN0Lm1hcmsuc2tpcGlmKG5vdCBjdWRhTGliLCByZWFzb249IkNhbm5vdCB0ZXN0IHdpdGhvdXQgQ1VEQSIpCjx8ZmltX2VuZHw+"]
["f10e514e7b3e6eccfa2be74ae6ac982b335821e5-4","f10e514e7b3e6eccfa2be74ae6ac982b335821e5","PHxmaW1fcHJlZml4fD4KIiIiQXl1ZGFFblB5dGhvbjogaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2dyb3Vwcy9heXVkYXB5dGhvbgoKRXNjcmliaXIgdW4gcHJvZ3JhbWEgcXVlLCBkYWRhIHVuYSBsaXN0YSwgZGV2dWVsdmEgdW5hIG51ZXZhIGxpc3RhIGN1eW8KY29udGVuaWRvIHNlYSBpZ3VhbCBhIGxhIG9yaWdpbmFsIHBlcm8gaW52ZXJ0aWRhLiBBc8OtLCBkYWRhIGxhIGxpc3RhClsiRGkiLCAiYnVlbiIsICJkaWEiLCAiYSIsICJwYXBhIl0sIGRlYmVyw6EgZGV2b2x2ZXIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpbInBhcGEiLCAiYSIsICJkaWEiLCAiYnVlbiIsICJEaSJdLgoiIiIKCnBhbGFicmFzID0gWyJEaSIsICJidWVuIiwgImRpYSIsICJhIiwgInBhcGEiXQo8fGZpbV9lbmR8Pg=="]
["a49fe7f5609f51b4283b93c0c0f06596cbe0833c-1","a49fe7f5609f51b4283b93c0c0f06596cbe0833c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHptcSx0aW1lCmZyb20gaW8gaW1wb3J0IEJ5dGVzSU8KZnJvbSBiYXNlNjQgaW1wb3J0IGI2NGVuY29kZQoKCmRlZiBjbGllbnQocG9ydHM9WyI1NTU2Il0pOgogICAgY29udGV4dCA9IHptcS5Db250ZXh0KCkKICAgIHByaW50ICgiQ29ubmVjdGluZyB0byBzZXJ2ZXIgd2l0aCBwb3J0cyAlcyIgJSBwb3J0cykKICAgIHNvY2tldHMgPSBbY29udGV4dC5zb2NrZXQoem1xLlJFUSkgZm9yIHBvcnQgaW4gcG9ydHNdCiAgICBsZW5ndGg9bGVuKHNvY2tldHMpCiAgICBmb3IgaSBpbiByYW5nZShsZW5ndGgpOgogICAgICAgIHNvY2tldHNbaV0uY29ubmVjdCAoInRjcDovL2xvY2FsaG9zdDolcyIgJSBwb3J0c1tpXSkKICAgICAgICAKICAgIGNvdW50PTEwMgogICAgI2NvdW50PTEyCiAgICBjb3VudDA9MAogICAgZj1vcGVuKHInMUE0WUZEODEuanBnJywncmInKQogICAgaW1nPWI2NGVuY29kZShmLnJlYWQoKSkKICAgIGYuY2xvc2UoKQogICAgdGltZV9zdGFydD10aW1lLnRpbWUoKQogICAgd2hpbGUgY291bnQwPGNvdW50OgogICAgICAgIGZvciBpIGluIHJhbmdlKGxlbmd0aCk6CiAgICAgICAgICAgICNwcmludCAoIlNlbmRpbmcgcmVxdWVzdCIsIHJlcXVlc3QsIi4uLiIpCiAgICAgICAgICAgIHNvY2tldHNbaV0uc2VuZCAoaW1nKQogICAgICAgICAgICAjcHJpbnQobWVzc2FnZSkKICAgICAgICAgICAgI3ByaW50ICgiUmVjZWl2ZWQgcmVwbHkgIiwgcmVxdWVzdCwgIlsiLCBtZXNzYWdlLCAiXSIpCiAgICAgICAgICAgICN0aW1lLnNsZWVwICgxKQogICAgICAgIGNvdW50MD1jb3VudDArbGVuZ3RoCiAgICAgICAgI3RpbWUuc2xlZXAoMSkKICAgICAgICBmb3IgaSBpbiByYW5nZShsZW5ndGgpOgogICAgICAgICAgICBtZXNzYWdlID0gc29ja2V0c1tpXS5yZWN2KCkKPHxmaW1faG9sZXw+CiAgICBwcmludChjb3VudDAsJ2ltYWdlcyBpbicsdGltZS50aW1lKCktdGltZV9zdGFydCwnc2Vjb25kcycpCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgY2xpZW50KHJhbmdlKDU1NTEsNTU1NCwxKSkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgI3ByaW50KG1lc3NhZ2UpCgo8fGZpbV9lbmR8Pg=="]
["8e84a9a28248ec2a555366a0044c7250dd3c9644-5","8e84a9a28248ec2a555366a0044c7250dd3c9644","PHxmaW1fcHJlZml4fD4KZnJvbSBtb2RlbHMubW9kZWxfY29udGFjdCBpbXBvcnQgQ29udGFjdAo8fGZpbV9ob2xlfD4KICAgIGlmIGxlbihkYi5nZXRfY29udGFjdF9saXN0KCkpID09IDA6CiAgICAgICAgYXBwLmNvbnRhY3QuY3JlYXRlX25ld19jb250YWN0KENvbnRhY3QoZmlyc3RuYW1lPSdTdGVwYW4nLCBtaWRkbGVuYW1lPSdCYXJhbnRzZXYnLCBsYXN0bmFtZT0nTG9sJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlja25hbWU9J0Jsb29kZXMnLCBlbWFpbDE9J3N0ZXBhbi5iYXJhbnRzZXZAZ21haWwuY29tJykpCiAgICBvbGRfY29udGFjdHMgPSBkYi5nZXRfY29udGFjdF9saXN0KCkKICAgIG5ld19jb250ID0gQ29udGFjdChmaXJzdG5hbWU9J01pJywgbWlkZGxlbmFtZT0nTHVsJywgbGFzdG5hbWU9J0NhdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pY2tuYW1lPSdiYXJzJywgZW1haWwxPSdzdGVwYW4uYmFyYW50c2V2QGdtYWlsLmNvbScpCiAgICBjb250ID0gcmFuZG9tLmNob2ljZShvbGRfY29udGFjdHMpCiAgICBuZXdfY29udC5pZCA9IGNvbnQuaWQKICAgIGFwcC5jb250YWN0Lm1vZGlmeV9jb250YWN0X2J5X2lkKG5ld19jb250LCBjb250LmlkKQogICAgbmV3X2NvbnRhY3RzID0gZGIuZ2V0X2NvbnRhY3RfbGlzdCgpCiAgICBvbGRfY29udGFjdHMucmVtb3ZlKGNvbnQpCiAgICBvbGRfY29udGFjdHMuYXBwZW5kKG5ld19jb250KQogICAgYXNzZXJ0IHNvcnRlZChvbGRfY29udGFjdHMsIGtleT1Db250YWN0LmlkX29yX21heCkgPT0gc29ydGVkKG5ld19jb250YWN0cywga2V5PUNvbnRhY3QuaWRfb3JfbWF4KQogICAgaWYgY2hlY2tfdWk6CiAgICAgICAgYXNzZXJ0IHNvcnRlZChuZXdfY29udGFjdHMsIGtleT1Db250YWN0LmlkX29yX21heCkgPT0gc29ydGVkKGFwcC5jb250YWN0LmdldF9jb250YWN0X2xpc3QoKSwga2V5PUNvbnRhY3QuaWRfb3JfbWF4KQo8fGZpbV9zdWZmaXh8PgppbXBvcnQgcmFuZG9tCgoKZGVmIHRlc3RfbW9kaWZ5X3NvbWVfY29udGFjdChhcHAsIGRiLCBjaGVja191aSk6Cjx8ZmltX2VuZHw+"]
["24cffe10604b20b48c4b81d38aa7037e8fc985ee-1","24cffe10604b20b48c4b81d38aa7037e8fc985ee","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAoKZnJvbSBzZWxlbml1bSBpbXBvcnQgd2ViZHJpdmVyCmZyb20gc2VsZW5pdW0ud2ViZHJpdmVyLmNocm9tZS5vcHRpb25zIGltcG9ydCBPcHRpb25zCgpmcm9tIHBhZ2VzLmdlbmVyaWNEb25hdGlvblBhZ2UgaW1wb3J0IEdlbmVyaWNEb25hdGlvblBhZ2UKCmltcG9ydCBkYXRhLmRhdGFTdHJpcGUgYXMgdGQKaW1wb3J0IHV0aWxzLmdsb2JhbF9mdW5jdGlvbnMgYXMgZ2YKCgojIENBVVRJT046IFRIRVNFIFRFU1RTIFNIT1VMRCBPTkxZIEJFIFJVTiBJTiBTVEFHSU5HLCBXSVRIIFRFU1QgS0VZUyBJTiBQTEFDRQoKCkBweXRlc3QuZml4dHVyZQpkZWYgZHJpdmVyKCk6CiAgICBvcHRpb25zID0gT3B0aW9ucygpCiAgICBnZi5zZXR1cChvcHRpb25zKQoKICAgIGRyaXZlciA9IHdlYmRyaXZlci5DaHJvbWUob3B0aW9ucz1vcHRpb25zKQogICAgeWllbGQgZHJpdmVyCiAgICBkcml2ZXIuY2xvc2UoKQoKCmRlZiB0ZXN0X21vbnRobHlfZG9uYXRpb25fYW1vdW50X3VuZGVyX21pbmltdW0oZHJpdmVyKToKICAgIGdlbmVyaWNfZG9uYXRpb25fcGFnZSA9IEdlbmVyaWNEb25hdGlvblBhZ2UoZHJpdmVyKQogICAgZ2VuZXJpY19kb25hdGlvbl9wYWdlLmNsaWNrX21vbnRobHlfY3VzdG9tX2J1dHRvbigpCiAgICBnZW5lcmljX2RvbmF0aW9uX3BhZ2UuZW50ZXJfbW9udGhseV9jdXN0b21fdmFsdWUodGQuTU9OVEhMWV9BTU9VTlRfVU5ERVJfTUlOSU1VTSkKCiAgICBhc3NlcnQgZ2VuZXJpY19kb25hdGlvbl9wYWdlLmdldF9tb250aGx5X2Ftb3VudF91bmRlcl9taW5pbXVtX2Vycm9yX3RleHQgPT1cCiAgICAgICAgICAgdGQuTU9OVEhMWV9BTU9VTlRfVU5ERVJfTUlOSU1VTV9FUlJPUgoKCmRlZiB0ZXN0X29uZV90aW1lX2RvbmF0aW9uX2Ftb3VudF91bmRlcl9taW5pbXVtKGRyaXZlcik6CiAgICBnZW5lcmljX2RvbmF0aW9uX3BhZ2UgPSBHZW5lcmljRG9uYXRpb25QYWdlKGRyaXZlcikKICAgIGdlbmVyaWNfZG9uYXRpb25fcGFnZS5jbGlja19vbmVfdGltZV9jdXN0b21fYnV0dG9uKCkKICAgIGdlbmVyaWNfZG9uYXRpb25fcGFnZS5lbnRlcl9vbmVfdGltZV9jdXN0b21fdmFsdWUodGQuT05FX1RJTUVfQU1PVU5UX1VOREVSX01JTklNVU0pCgogICAgYXNzZXJ0IGdlbmVyaWNfZG9uYXRpb25fcGFnZS5nZXRfb25lX3RpbWVfYW1vdW50X3VuZGVyX21pbmltdW1fZXJyb3JfdGV4dCA9PVwKICAgICAgICAgICB0ZC5PTkVfVElNRV9BTU9VTlRfVU5ERVJfTUlOSU1VTV9FUlJPUgoKCmRlZiB0ZXN0X3llYXJseV9kb25hdGlvbl9hbW91bnRfdW5kZXJfbWluaW11bShkcml2ZXIpOgogICAgZ2VuZXJpY19kb25hdGlvbl9wYWdlID0gR2VuZXJpY0RvbmF0aW9uUGFnZShkcml2ZXIpCiAgICBnZW5lcmljX2RvbmF0aW9uX3BhZ2UuY2xpY2tfeWVhcmx5X2N1c3RvbV9idXR0b24oKQogICAgZ2VuZXJpY19kb25hdGlvbl9wYWdlLmVudGVyX3llYXJseV9jdXN0b21fdmFsdWUodGQuWUVBUkxZX0FNT1VOVF9VTkRFUl9NSU5JTVVNKQoKICAgIGFzc2VydCBnZW5lcmljX2RvbmF0aW9uX3BhZ2UuZ2V0X3llYXJseV9hbW91bnRfdW5kZXJfbWluaW11bV9lcnJvcl90ZXh0ID09XAogICAgICAgICAgIHRkLllFQVJMWV9BTU9VTlRfVU5ERVJfTUlOSU1VTV9FUlJPUgoKCkBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgndGVzdF9pZCxwYXltZW50X3ZhbHVlLHN1Ym1pdF9idXR0b25fdGV4dCcsIHRkLk1PTlRITFlfQ1VTVE9NX0RPTkFUSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgaWRzPVtzZXFbMF0gZm9yIHNlcSBpbiB0ZC5NT05USExZX0NVU1RPTV9ET05BVElPTl0pCmRlZiB0ZXN0X2N1c3RvbV9tb250aGx5X2RvbmF0aW9uX2Ftb3VudChkcml2ZXIsIHRlc3RfaWQsIHBheW1lbnRfdmFsdWUsIHN1Ym1pdF9idXR0b25fdGV4dCk6CiAgICBnZW5lcmljX2RvbmF0aW9uX3BhZ2UgPSBHZW5lcmljRG9uYXRpb25QYWdlKGRyaXZlcikKICAgIGdlbmVyaWNfZG9uYXRpb25fcGFnZS5jbGlja19tb250aGx5X2N1c3RvbV9idXR0b24oKQogICAgZ2VuZXJpY19kb25hdGlvbl9wYWdlLmVudGVyX21vbnRobHlfY3VzdG9tX3ZhbHVlKHBheW1lbnRfdmFsdWUpCiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybSA9IGdlbmVyaWNfZG9uYXRpb25fcGFnZS5jbGlja19zdHJpcGVfYnV0dG9uKCkKICAgIHN0cmlwZV9wYXltZW50c19mb3JtLmVudGVyX2VtYWlsKHRkLlRFU1RfRU1BSUwpCiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybS5lbnRlcl9jYXJkX251bWJlcih0ZC5URVNUX0NBUkRfTlVNQkVSKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZW50ZXJfY2FyZF9leHAodGQuVEVTVF9DQVJEX0VYUElSWSkKICAgIHN0cmlwZV9wYXltZW50c19mb3JtLmVudGVyX2NhcmRfY3ZjKHRkLlRFU1RfQ1ZDKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZW50ZXJfemlwKHRkLlRFU1RfWklQKQoKICAgIGFzc2VydCBzdHJpcGVfcGF5bWVudHNfZm9ybS5nZXRfc3VibWl0X2J1dHRvbl90ZXh0KCkgPT0gc3VibWl0X2J1dHRvbl90ZXh0CiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybS5jbGlja19zdWJtaXRfYnV0dG9uKCkKICAgIGFzc2VydCBnZW5lcmljX2RvbmF0aW9uX3BhZ2UuaXNfcmVkaXJlY3RfdG9fdGhhbmtfeW91KCkKCgpAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoJ3Rlc3RfaWQscGF5bWVudF92YWx1ZSxzdWJtaXRfYnV0dG9uX3RleHQnLCB0ZC5PTkVfVElNRV9DVVNUT01fRE9OQVRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICBpZHM9W3NlcVswXSBmb3Igc2VxIGluIHRkLk9ORV9USU1FX0NVU1RPTV9ET05BVElPTl0pCmRlZiB0ZXN0X2N1c3RvbV9vbmVfdGltZV9kb25hdGlvbl9hbW91bnQoZHJpdmVyLCB0ZXN0X2lkLCBwYXltZW50X3ZhbHVlLCBzdWJtaXRfYnV0dG9uX3RleHQpOgogICAgZ2VuZXJpY19kb25hdGlvbl9wYWdlID0gR2VuZXJpY0RvbmF0aW9uUGFnZShkcml2ZXIpCiAgICBnZW5lcmljX2RvbmF0aW9uX3BhZ2UuY2xpY2tfb25lX3RpbWVfY3VzdG9tX2J1dHRvbigpCiAgICBnZW5lcmljX2RvbmF0aW9uX3BhZ2UuZW50ZXJfb25lX3RpbWVfY3VzdG9tX3ZhbHVlKHBheW1lbnRfdmFsdWUpCiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybSA9IGdlbmVyaWNfZG9uYXRpb25fcGFnZS5jbGlja19zdHJpcGVfYnV0dG9uKCkKICAgIHN0cmlwZV9wYXltZW50c19mb3JtLmVudGVyX2VtYWlsKHRkLlRFU1RfRU1BSUwpCiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybS5lbnRlcl9jYXJkX251bWJlcih0ZC5URVNUX0NBUkRfTlVNQkVSKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZW50ZXJfY2FyZF9leHAodGQuVEVTVF9DQVJEX0VYUElSWSkKICAgIHN0cmlwZV9wYXltZW50c19mb3JtLmVudGVyX2NhcmRfY3ZjKHRkLlRFU1RfQ1ZDKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZW50ZXJfemlwKHRkLlRFU1RfWklQKQoKICAgIGFzc2VydCBzdHJpcGVfcGF5bWVudHNfZm9ybS5nZXRfc3VibWl0X2J1dHRvbl90ZXh0KCkgPT0gc3VibWl0X2J1dHRvbl90ZXh0CiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybS5jbGlja19zdWJtaXRfYnV0dG9uKCkKICAgIGFzc2VydCBnZW5lcmljX2RvbmF0aW9uX3BhZ2UuaXNfcmVkaXJlY3RfdG9fdGhhbmtfeW91KCkKCgpAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoJ3Rlc3RfaWQscGF5bWVudF92YWx1ZSxzdWJtaXRfYnV0dG9uX3RleHQnLCB0ZC5ZRUFSTFlfQ1VTVE9NX0RPTkFUSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgaWRzPVtzZXFbMF0gZm9yIHNlcSBpbiB0ZC5ZRUFSTFlfQ1VTVE9NX0RPTkFUSU9OXSkKPHxmaW1faG9sZXw+CiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybSA9IGdlbmVyaWNfZG9uYXRpb25fcGFnZS5jbGlja19zdHJpcGVfYnV0dG9uKCkKICAgIHN0cmlwZV9wYXltZW50c19mb3JtLmVudGVyX2VtYWlsKHRkLlRFU1RfRU1BSUwpCiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybS5lbnRlcl9jYXJkX251bWJlcih0ZC5URVNUX0NBUkRfTlVNQkVSKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZW50ZXJfY2FyZF9leHAodGQuVEVTVF9DQVJEX0VYUElSWSkKICAgIHN0cmlwZV9wYXltZW50c19mb3JtLmVudGVyX2NhcmRfY3ZjKHRkLlRFU1RfQ1ZDKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZW50ZXJfemlwKHRkLlRFU1RfWklQKQoKICAgIGFzc2VydCBzdHJpcGVfcGF5bWVudHNfZm9ybS5nZXRfc3VibWl0X2J1dHRvbl90ZXh0KCkgPT0gc3VibWl0X2J1dHRvbl90ZXh0CiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybS5jbGlja19zdWJtaXRfYnV0dG9uKCkKICAgIGFzc2VydCBnZW5lcmljX2RvbmF0aW9uX3BhZ2UuaXNfcmVkaXJlY3RfdG9fdGhhbmtfeW91KCkKCgpAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoJ3BheW1lbnRfb3B0aW9uLHN1Ym1pdF9idXR0b25fdGV4dCcsIHRkLk9ORV9USU1FX1BBWU1FTlRfT1BUSU9OUywKICAgICAgICAgICAgICAgICAgICAgICAgIGlkcz1bc2VxWzBdIGZvciBzZXEgaW4gdGQuT05FX1RJTUVfUEFZTUVOVF9PUFRJT05TXSkKZGVmIHRlc3RfZml4ZWRfb25lX3RpbWVfZG9uYXRpb25fYW1vdW50cyhkcml2ZXIsIHBheW1lbnRfb3B0aW9uLCBzdWJtaXRfYnV0dG9uX3RleHQpOgogICAgZ2VuZXJpY19kb25hdGlvbl9wYWdlID0gR2VuZXJpY0RvbmF0aW9uUGFnZShkcml2ZXIpCiAgICBnZW5lcmljX2RvbmF0aW9uX3BhZ2UuY2xpY2tfcmFkaW9fYnV0dG9uKGdlbmVyaWNfZG9uYXRpb25fcGFnZS5nZXRfYWxsX29uZV90aW1lX2J1dHRvbnNbcGF5bWVudF9vcHRpb25dKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0gPSBnZW5lcmljX2RvbmF0aW9uX3BhZ2UuY2xpY2tfc3RyaXBlX2J1dHRvbigpCiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybS5lbnRlcl9lbWFpbCh0ZC5URVNUX0VNQUlMKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZW50ZXJfY2FyZF9udW1iZXIodGQuVEVTVF9DQVJEX05VTUJFUikKICAgIHN0cmlwZV9wYXltZW50c19mb3JtLmVudGVyX2NhcmRfZXhwKHRkLlRFU1RfQ0FSRF9FWFBJUlkpCiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybS5lbnRlcl9jYXJkX2N2Yyh0ZC5URVNUX0NWQykKICAgIHN0cmlwZV9wYXltZW50c19mb3JtLmVudGVyX3ppcCh0ZC5URVNUX1pJUCkKCiAgICBhc3NlcnQgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZ2V0X3N1Ym1pdF9idXR0b25fdGV4dCgpID09IHN1Ym1pdF9idXR0b25fdGV4dAogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uY2xpY2tfc3VibWl0X2J1dHRvbigpCiAgICBhc3NlcnQgZ2VuZXJpY19kb25hdGlvbl9wYWdlLmlzX3JlZGlyZWN0X3RvX3RoYW5rX3lvdSgpCgoKQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCdwYXltZW50X29wdGlvbixzdWJtaXRfYnV0dG9uX3RleHQnLCB0ZC5NT05USExZX1BBWU1FTlRfT1BUSU9OUywKICAgICAgICAgICAgICAgICAgICAgICAgIGlkcz1bc2VxWzBdIGZvciBzZXEgaW4gdGQuTU9OVEhMWV9QQVlNRU5UX09QVElPTlNdKQpkZWYgdGVzdF9maXhlZF9tb250aGx5X2RvbmF0aW9uX2Ftb3VudHMoZHJpdmVyLCBwYXltZW50X29wdGlvbiwgc3VibWl0X2J1dHRvbl90ZXh0KToKICAgIGdlbmVyaWNfZG9uYXRpb25fcGFnZSA9IEdlbmVyaWNEb25hdGlvblBhZ2UoZHJpdmVyKQogICAgZ2VuZXJpY19kb25hdGlvbl9wYWdlLmNsaWNrX3JhZGlvX2J1dHRvbihnZW5lcmljX2RvbmF0aW9uX3BhZ2UuZ2V0X2FsbF9tb250aGx5X2J1dHRvbnNbcGF5bWVudF9vcHRpb25dKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0gPSBnZW5lcmljX2RvbmF0aW9uX3BhZ2UuY2xpY2tfc3RyaXBlX2J1dHRvbigpCiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybS5lbnRlcl9lbWFpbCh0ZC5URVNUX0VNQUlMKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZW50ZXJfY2FyZF9udW1iZXIodGQuVEVTVF9DQVJEX05VTUJFUikKICAgIHN0cmlwZV9wYXltZW50c19mb3JtLmVudGVyX2NhcmRfZXhwKHRkLlRFU1RfQ0FSRF9FWFBJUlkpCiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybS5lbnRlcl9jYXJkX2N2Yyh0ZC5URVNUX0NWQykKICAgIHN0cmlwZV9wYXltZW50c19mb3JtLmVudGVyX3ppcCh0ZC5URVNUX1pJUCkKCiAgICBhc3NlcnQgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZ2V0X3N1Ym1pdF9idXR0b25fdGV4dCgpID09IHN1Ym1pdF9idXR0b25fdGV4dAogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uY2xpY2tfc3VibWl0X2J1dHRvbigpCiAgICBhc3NlcnQgZ2VuZXJpY19kb25hdGlvbl9wYWdlLmlzX3JlZGlyZWN0X3RvX3RoYW5rX3lvdSgpCgoKQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCdwYXltZW50X29wdGlvbixzdWJtaXRfYnV0dG9uX3RleHQnLCB0ZC5ZRUFSTFlfUEFZTUVOVF9PUFRJT05TLAogICAgICAgICAgICAgICAgICAgICAgICAgaWRzPVtzZXFbMF0gZm9yIHNlcSBpbiB0ZC5ZRUFSTFlfUEFZTUVOVF9PUFRJT05TXSkKZGVmIHRlc3RfZml4ZWRfeWVhcmx5X2RvbmF0aW9uX2Ftb3VudHMoZHJpdmVyLCBwYXltZW50X29wdGlvbiwgc3VibWl0X2J1dHRvbl90ZXh0KToKICAgIGdlbmVyaWNfZG9uYXRpb25fcGFnZSA9IEdlbmVyaWNEb25hdGlvblBhZ2UoZHJpdmVyKQogICAgZ2VuZXJpY19kb25hdGlvbl9wYWdlLmNsaWNrX3JhZGlvX2J1dHRvbihnZW5lcmljX2RvbmF0aW9uX3BhZ2UuZ2V0X2FsbF95ZWFybHlfYnV0dG9uc1twYXltZW50X29wdGlvbl0pCiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybSA9IGdlbmVyaWNfZG9uYXRpb25fcGFnZS5jbGlja19zdHJpcGVfYnV0dG9uKCkKICAgIHN0cmlwZV9wYXltZW50c19mb3JtLmVudGVyX2VtYWlsKHRkLlRFU1RfRU1BSUwpCiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybS5lbnRlcl9jYXJkX251bWJlcih0ZC5URVNUX0NBUkRfTlVNQkVSKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZW50ZXJfY2FyZF9leHAodGQuVEVTVF9DQVJEX0VYUElSWSkKICAgIHN0cmlwZV9wYXltZW50c19mb3JtLmVudGVyX2NhcmRfY3ZjKHRkLlRFU1RfQ1ZDKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZW50ZXJfemlwKHRkLlRFU1RfWklQKQoKICAgIGFzc2VydCBzdHJpcGVfcGF5bWVudHNfZm9ybS5nZXRfc3VibWl0X2J1dHRvbl90ZXh0KCkgPT0gc3VibWl0X2J1dHRvbl90ZXh0CiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybS5jbGlja19zdWJtaXRfYnV0dG9uKCkKICAgIGFzc2VydCBnZW5lcmljX2RvbmF0aW9uX3BhZ2UuaXNfcmVkaXJlY3RfdG9fdGhhbmtfeW91KCkKCgpAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoJ3Rlc3RfaWQsY2FyZF9udW1iZXInLCB0ZC5VU19DQVJEX1RZUEVTLAogICAgICAgICAgICAgICAgICAgICAgICAgaWRzPVtzZXFbMF0gZm9yIHNlcSBpbiB0ZC5VU19DQVJEX1RZUEVTXSkKZGVmIHRlc3RfdXNfY3JlZGl0X2NhcmRfdHlwZXMoZHJpdmVyLCB0ZXN0X2lkLCBjYXJkX251bWJlcik6CiAgICBnZW5lcmljX2RvbmF0aW9uX3BhZ2UgPSBHZW5lcmljRG9uYXRpb25QYWdlKGRyaXZlcikKICAgIHN0cmlwZV9wYXltZW50c19mb3JtID0gZ2VuZXJpY19kb25hdGlvbl9wYWdlLmNsaWNrX3N0cmlwZV9idXR0b24oKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZW50ZXJfZW1haWwodGQuVEVTVF9FTUFJTCkKICAgIHN0cmlwZV9wYXltZW50c19mb3JtLmVudGVyX2NhcmRfbnVtYmVyKGNhcmRfbnVtYmVyKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZW50ZXJfY2FyZF9leHAodGQuVEVTVF9DQVJEX0VYUElSWSkKICAgIHN0cmlwZV9wYXltZW50c19mb3JtLmVudGVyX2NhcmRfY3ZjKHRkLlRFU1RfQ1ZDKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZW50ZXJfemlwKHRkLlRFU1RfWklQKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uY2xpY2tfc3VibWl0X2J1dHRvbigpCgogICAgYXNzZXJ0IGdlbmVyaWNfZG9uYXRpb25fcGFnZS5pc19yZWRpcmVjdF90b190aGFua195b3UoKQoKCkBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgndGVzdF9pZCxjYXJkX251bWJlcicsIHRkLklOVEVSTkFUSU9OQUxfQ0FSRFMsCiAgICAgICAgICAgICAgICAgICAgICAgICBpZHM9W3NlcVswXSBmb3Igc2VxIGluIHRkLklOVEVSTkFUSU9OQUxfQ0FSRFNdKQpkZWYgdGVzdF9pbnRlcm5hdGlvbmFsX2NhcmRfdHlwZXMoZHJpdmVyLCB0ZXN0X2lkLCBjYXJkX251bWJlcik6CiAgICBnZW5lcmljX2RvbmF0aW9uX3BhZ2UgPSBHZW5lcmljRG9uYXRpb25QYWdlKGRyaXZlcikKICAgIHN0cmlwZV9wYXltZW50c19mb3JtID0gZ2VuZXJpY19kb25hdGlvbl9wYWdlLmNsaWNrX3N0cmlwZV9idXR0b24oKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZW50ZXJfZW1haWwodGQuVEVTVF9FTUFJTCkKICAgIHN0cmlwZV9wYXltZW50c19mb3JtLmVudGVyX2NhcmRfbnVtYmVyKGNhcmRfbnVtYmVyKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZW50ZXJfY2FyZF9leHAodGQuVEVTVF9DQVJEX0VYUElSWSkKICAgIHN0cmlwZV9wYXltZW50c19mb3JtLmVudGVyX2NhcmRfY3ZjKHRkLlRFU1RfQ1ZDKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZW50ZXJfemlwKHRkLlRFU1RfWklQKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uY2xpY2tfc3VibWl0X2J1dHRvbigpCgogICAgYXNzZXJ0IGdlbmVyaWNfZG9uYXRpb25fcGFnZS5pc19yZWRpcmVjdF90b190aGFua195b3UoKQoKCkBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgndGVzdF9pZCxjYXJkX251bWJlcixyZXNwb25zZScsIHRkLlNQRUNJRklDX1JFU1BPTlNFU19DQVJEU19ORUdBVElWRSwKICAgICAgICAgICAgICAgICAgICAgICAgIGlkcz1bc2VxWzBdIGZvciBzZXEgaW4gdGQuU1BFQ0lGSUNfUkVTUE9OU0VTX0NBUkRTX05FR0FUSVZFXSkKZGVmIHRlc3Rfc3BlY2lmaWNfcmVzcG9uc2VzX25lZ2F0aXZlKGRyaXZlciwgdGVzdF9pZCwgY2FyZF9udW1iZXIsIHJlc3BvbnNlKToKICAgIGdlbmVyaWNfZG9uYXRpb25fcGFnZSA9IEdlbmVyaWNEb25hdGlvblBhZ2UoZHJpdmVyKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0gPSBnZW5lcmljX2RvbmF0aW9uX3BhZ2UuY2xpY2tfc3RyaXBlX2J1dHRvbigpCiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybS5lbnRlcl9lbWFpbCh0ZC5URVNUX0VNQUlMKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZW50ZXJfY2FyZF9udW1iZXIoY2FyZF9udW1iZXIpCiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybS5lbnRlcl9jYXJkX2V4cCh0ZC5URVNUX0NBUkRfRVhQSVJZKQogICAgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZW50ZXJfY2FyZF9jdmModGQuVEVTVF9DVkMpCiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybS5lbnRlcl96aXAodGQuVEVTVF9aSVApCiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybS5jbGlja19zdWJtaXRfYnV0dG9uKCkKCiAgICBhc3NlcnQgc3RyaXBlX3BheW1lbnRzX2Zvcm0uZ2V0X2NhcmRfZXJyb3JzX2xhYmVsX3RleHQoKSA9PSByZXNwb25zZQoKCkBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgndGVzdF9pZCxjYXJkX251bWJlcicsIHRkLlNQRUNJRklDX1JFU1BPTlNFU19DQVJEU19QT1NJVElWRSwKICAgICAgICAgICAgICAgICAgICAgICAgIGlkcz1bc2VxWzBdIGZvciBzZXEgaW4gdGQuU1BFQ0lGSUNfUkVTUE9OU0VTX0NBUkRTX1BPU0lUSVZFXSkKZGVmIHRlc3Rfc3BlY2lmaWNfcmVzcG9uc2VzX3Bvc2l0aXZlKGRyaXZlciwgdGVzdF9pZCwgY2FyZF9udW1iZXIpOgogICAgZ2VuZXJpY19kb25hdGlvbl9wYWdlID0gR2VuZXJpY0RvbmF0aW9uUGFnZShkcml2ZXIpCiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybSA9IGdlbmVyaWNfZG9uYXRpb25fcGFnZS5jbGlja19zdHJpcGVfYnV0dG9uKCkKICAgIHN0cmlwZV9wYXltZW50c19mb3JtLmVudGVyX2VtYWlsKHRkLlRFU1RfRU1BSUwpCiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybS5lbnRlcl9jYXJkX251bWJlcihjYXJkX251bWJlcikKICAgIHN0cmlwZV9wYXltZW50c19mb3JtLmVudGVyX2NhcmRfZXhwKHRkLlRFU1RfQ0FSRF9FWFBJUlkpCiAgICBzdHJpcGVfcGF5bWVudHNfZm9ybS5lbnRlcl9jYXJkX2N2Yyh0ZC5URVNUX0NWQykKICAgIHN0cmlwZV9wYXltZW50c19mb3JtLmVudGVyX3ppcCh0ZC5URVNUX1pJUCkKICAgIHN0cmlwZV9wYXltZW50c19mb3JtLmNsaWNrX3N1Ym1pdF9idXR0b24oKQoKICAgIGFzc2VydCBnZW5lcmljX2RvbmF0aW9uX3BhZ2UuaXNfcmVkaXJlY3RfdG9fdGhhbmtfeW91KCkKCjx8ZmltX3N1ZmZpeHw+CmRlZiB0ZXN0X2N1c3RvbV95ZWFybHlfZG9uYXRpb25fYW1vdW50KGRyaXZlciwgdGVzdF9pZCwgcGF5bWVudF92YWx1ZSwgc3VibWl0X2J1dHRvbl90ZXh0KToKICAgIGdlbmVyaWNfZG9uYXRpb25fcGFnZSA9IEdlbmVyaWNEb25hdGlvblBhZ2UoZHJpdmVyKQogICAgZ2VuZXJpY19kb25hdGlvbl9wYWdlLmNsaWNrX3llYXJseV9jdXN0b21fYnV0dG9uKCkKICAgIGdlbmVyaWNfZG9uYXRpb25fcGFnZS5lbnRlcl95ZWFybHlfY3VzdG9tX3ZhbHVlKHBheW1lbnRfdmFsdWUpCjx8ZmltX2VuZHw+"]
["f1177b2d2922f4aea53cb55eabbf4351eae372f0-3","f1177b2d2922f4aea53cb55eabbf4351eae372f0","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCmltcG9ydCBzcWxpdGUzCgoKY2xhc3MgREJNYW5hZ2VyOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWU9ImFwcC5kYiIpOgogICAgICAgIHNlbGYuZGF0YWJhc2VfbmFtZSA9IG5hbWUKICAgICAgICBzZWxmLmNvbm4gPSBzcWxpdGUzLmNvbm5lY3Qoc2VsZi5kYXRhYmFzZV9uYW1lKQogICAgICAgIHNlbGYuY3Vyc29yID0gc2VsZi5jb25uLmN1cnNvcigpCiAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKICAgICAgICBzZWxmLmxvZ2dlci5zZXRMZXZlbChsZXZlbD1vcy5lbnZpcm9uLmdldCgiTE9HTEVWRUwiLCAiSU5GTyIpKQogICAgICAgIGhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQogICAgICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKAogICAgICAgICAgICAiJShhc2N0aW1lKXMgJShuYW1lKS0xMnMgJShsZXZlbG5hbWUpLThzICUobWVzc2FnZSlzIgogICAgICAgICkKICAgICAgICBoYW5kbGVyLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCiAgICAgICAgc2VsZi5sb2dnZXIuYWRkSGFuZGxlcihoYW5kbGVyKQogICAgICAgICMgQnVpbGQgdGhlIHRhYmxlcwogICAgICAgIHNlbGYuY3Vyc29yLmV4ZWN1dGUoCiAgICAgICAgICAgICIiIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHdhbGsKICAgICAgICAgICAgICAgICAgICAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgd2FsayBURVhULCBkbmFfc2VxdWVuY2UgVEVYVCkKICAgICAgICAgICAgICAgICIiIgogICAgICAgICkKCiAgICAgICAgc2VsZi5jdXJzb3IuZXhlY3V0ZSgKICAgICAgICAgICAgIiIiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcHJvdGVpbiAKICAgICAgICAgICAgICAgICAgICAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgc2VxdWVuY2UgVEVYVCkiIiIKICAgICAgICApCgogICAgICAgIHNlbGYuY3Vyc29yLmV4ZWN1dGUoCiAgICAgICAgICAgICIiIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHBlcHRpZGUKICAgICAgICAgICAgICAgICAgICAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgc2VxdWVuY2UgVEVYVCkiIiIKICAgICAgICApCgogICAgICAgIHNlbGYuY3Vyc29yLmV4ZWN1dGUoCiAgICAgICAgICAgICIiIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHByb3RlaW5fdG9fd2FsawogICAgICAgICAgICAgICAgICAgICh3YWxrX2lkIElOVEVHRVIsIHByb3RlaW5faWQgSU5URUdFUikiIiIKICAgICAgICApCgogICAgICAgIHNlbGYuY3Vyc29yLmV4ZWN1dGUoCiAgICAgICAgICAgICIiIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHBlcHRpZGVfdG9fcHJvdGVpbgogICAgICAgICAgICAgICAgICAgIChwZXB0aWRlX2lkIElOVEVHRVIsIHByb3RlaW5faWQgSU5URUdFUikiIiIKICAgICAgICApCgogICAgICAgIHNlbGYuY29ubi5jb21taXQoKQoKICAgIGRlZiBleGVjX3F1ZXJ5KHNlbGYsIHF1ZXJ5KToKICAgICAgICByZXR1cm4gc2VsZi5jdXJzb3IuZXhlY3V0ZShxdWVyeSkuZmV0Y2hhbGwoKQoKICAgIGRlZiBkX3F1b3RlKHNlbGYsIHN0cik6CiAgICAgICAgcmV0dXJuICciJyArIHN0ciArICciJwoKICAgIGRlZiBsaW5rX3Byb3RlaW5zX3BlcHRpZGVzKHNlbGYsIHByb3RfcGVwcyk6CiAgICAgICAgIiIiCiAgICAgICAgUG9wdWxhdGUgbWFueS10by1tYW55IHRhYmxlIGxpbmtpbmcgcGVwdGlkZXMgdG8gcHJvdGVpbnMKICAgICAgICBwcm90X3BlcCBvYmplY3Q6CiAgICAgICAgewogICAgICAgICAgICAicHJvdF9pZCI6IGludCwKICAgICAgICAgICAgInBlcHRpZGVzIjogc2V0KCkKICAgICAgICB9CiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiQmVnaW4gbGlua19wcm90ZWluc19wZXB0aWRlcyIpCiAgICAgICAgc3FsID0gc3FsaXRlMy5jb25uZWN0KHNlbGYuZGF0YWJhc2VfbmFtZSkKICAgICAgICBzcWwuaXNvbGF0aW9uX2xldmVsID0gTm9uZQogICAgICAgIGMgPSBzcWwuY3Vyc29yKCkKICAgICAgICBjLmV4ZWN1dGUoImJlZ2luIikKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZvciBvYmogaW4gcHJvdF9wZXBzOgogICAgICAgICAgICAgICAgcHJvdGVpbl9pZCA9IG9ialsicHJvdF9pZCJdCiAgICAgICAgICAgICAgICBwZXBfc2VxcyA9IFtdCiAgICAgICAgICAgICAgICBmb3IgcGVwX3NlcSBpbiBvYmpbInBlcHRpZGVzIl06CiAgICAgICAgICAgICAgICAgICAgcGVwX3NlcXMuYXBwZW5kKHBlcF9zZXEpCiAgICAgICAgICAgICAgICBpbl9jbGF1c2UgPSAiKCIgKyAiLCIuam9pbihsaXN0KG1hcChzZWxmLmRfcXVvdGUsIHBlcF9zZXFzKSkpICsgIikiCiAgICAgICAgICAgICAgICBzcWxfcSA9IGYiU0VMRUNUIGlkIEZST00gcGVwdGlkZSBXSEVSRSBzZXF1ZW5jZSBJTiB7aW5fY2xhdXNlfSIKICAgICAgICAgICAgICAgIHBlcF9pZHMgPSBjLmV4ZWN1dGUoc3FsX3EpLmZldGNoYWxsKCkKICAgICAgICAgICAgICAgIGluc19kYXRhID0gW10KICAgICAgICAgICAgICAgIGZvciBwZXBfaWQgaW4gcGVwX2lkczoKICAgICAgICAgICAgICAgICAgICBpbnNfZGF0YS5hcHBlbmQoKHBlcF9pZFswXSwgcHJvdGVpbl9pZCkpCiAgICAgICAgICAgICAgICBzcWxfaW5zID0gZiJJTlNFUlQgSU5UTyBwZXB0aWRlX3RvX3Byb3RlaW4ocGVwdGlkZV9pZCwgcHJvdGVpbl9pZCkgVkFMVUVTICg/LCA/KSIKICAgICAgICAgICAgICAgIGMuZXhlY3V0ZW1hbnkoc3FsX2lucywgaW5zX2RhdGEpCiAgICAgICAgICAgIGMuZXhlY3V0ZSgiY29tbWl0IikKICAgICAgICBleGNlcHQgc3FsLkVycm9yOgogICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcigKICAgICAgICAgICAgICAgICJUcmFuc2FjdGlvbiBmYWlsZWQsIHJvbGxpbmcgYmFjayBpbiBsaW5rX3Byb3RlaW5zX3BlcHRpZGVzIgogICAgICAgICAgICApCiAgICAgICAgICAgIGMuZXhlY3V0ZSgicm9sbGJhY2siKQogICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIkVuZCBsaW5rX3Byb3RlaW5zX3BlcHRpZGVzIikKCiAgICBkZWYgaW5zZXJ0X3BlcHRpZGVzKHNlbGYsIHByb3RfcGVwcyk6CiAgICAgICAgIiIiewogICAgICAgICAgICAicHJvdF9pZCI6IGludCwKICAgICAgICAgICAgInBlcHRpZGVzIjogc2V0KCkKICAgICAgICB9CiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5sb2dnZXIuaW5mbyhmIkJlZ2luIEluc2VydCBwZXB0aWRlcyIpCiAgICAgICAgc3FsID0gc3FsaXRlMy5jb25uZWN0KHNlbGYuZGF0YWJhc2VfbmFtZSkKICAgICAgICBzcWwuaXNvbGF0aW9uX2xldmVsID0gTm9uZQogICAgICAgIGMgPSBzcWwuY3Vyc29yKCkKICAgICAgICBjLmV4ZWN1dGUoImJlZ2luIikKCiAgICAgICAgZGVmIGRhdGFfaXRlcihkYXRhKToKICAgICAgICAgICAgIiIiRmlsdGVyIG91dCBkdXBsaWNhdGUgc2VxdWVuY2VzCiAgICAgICAgICAgICIiIgogICAgICAgICAgICBzZWVuID0gc2V0KCkKICAgICAgICAgICAgZm9yIGl0ZW0gaW4gZGF0YToKICAgICAgICAgICAgICAgIGlmIGl0ZW0gaW4gc2VlbjoKICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHNlZW4uYWRkKGl0ZW0pCiAgICAgICAgICAgICAgICAgICAgeWllbGQgaXRlbQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHBlcF9zZXFzID0gW10KICAgICAgICAgICAgZm9yIHBwIGluIHByb3RfcGVwczoKICAgICAgICAgICAgICAgIGZvciBwIGluIHBwWyJwZXB0aWRlcyJdOgogICAgICAgICAgICAgICAgICAgIHBlcF9zZXFzLmFwcGVuZCgocCwpKQogICAgICAgICAgICBjLmV4ZWN1dGVtYW55KAogICAgICAgICAgICAgICAgIklOU0VSVCBJTlRPIHBlcHRpZGUoc2VxdWVuY2UpIFZBTFVFUyAoPykiLCBkYXRhX2l0ZXIocGVwX3NlcXMpCiAgICAgICAgICAgICkKICAgICAgICAgICAgYy5leGVjdXRlKCJjb21taXQiKQogICAgICAgIGV4Y2VwdCBzcWwuRXJyb3I6CiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKCJUcmFuc2FjdGlvbiBmYWlsZWQsIHJvbGxpbmcgYmFjayBpbiBpbnNlcnRfcGVwdGlkZXMiKQogICAgICAgICAgICBjLmV4ZWN1dGUoInJvbGxiYWNrIikKICAgICAgICAjIEFkZCBpbmRleAogICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIkNyZWF0aW5nIHBlcHRpZGVfc2VxdWVuY2UgaW5kZXgiKQogICAgICAgIGMuZXhlY3V0ZSgiQ1JFQVRFIElOREVYIHBlcHRpZGVfc2VxdWVuY2UgT04gcGVwdGlkZShzZXF1ZW5jZSkiKQogICAgICAgIHNlbGYubGlua19wcm90ZWluc19wZXB0aWRlcyhwcm90X3BlcHMpCiAgICAgICAgc2VsZi5sb2dnZXIuaW5mbyhmIkVuZCBJbnNlcnQgcGVwdGlkZXMiKQoKICAgIGRlZiBidWlsZF9saW5rcyhzZWxmLCBvYmplY3RzKToKICAgICAgICAiIiIKICAgICAgICAgICAgUG9wdWxhdGUgbWFueS10by1tYW55IGZvciBwcm90ZWlucyB0byB3YWxrIHRyYXZlcnNhbHMKICAgICAgICAiIiIKICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKGYiQmVnaW4gYnVpbGRfbGlua3MiKQogICAgICAgIHNxbCA9IHNxbGl0ZTMuY29ubmVjdChzZWxmLmRhdGFiYXNlX25hbWUpCiAgICAgICAgc3FsLmlzb2xhdGlvbl9sZXZlbCA9IE5vbmUKICAgICAgICBjID0gc3FsLmN1cnNvcigpCiAgICAgICAgYy5leGVjdXRlKCJiZWdpbiIpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBmb3Igb2JqZWN0IGluIG9iamVjdHM6CiAgICAgICAgICAgICAgICB3YWxrID0gIiwiLmpvaW4ob2JqZWN0WyJ3YWxrIl0pCiAgICAgICAgICAgICAgICB3X3MgPSBmJ3NlbGVjdCBpZCBmcm9tIHdhbGsgd2hlcmUgd2FsayA9ICJ7d2Fsa30iJwogICAgICAgICAgICAgICAgd19pZCA9IGMuZXhlY3V0ZSh3X3MpLmZldGNob25lKCkKICAgICAgICAgICAgICAgIHByb3Rfc2VxcyA9IFtdCiAgICAgICAgICAgICAgICBmb3IgcCBpbiBvYmplY3RbInByb3RlaW5zIl06CiAgICAgICAgICAgICAgICAgICAgcHJvdF9zZXFzLmFwcGVuZChwKQogICAgICAgICAgICAgICAgaW5fY2xhdXNlID0gIigiICsgIiwiLmpvaW4obGlzdChtYXAoc2VsZi5kX3F1b3RlLCBwcm90X3NlcXMpKSkgKyAiKSIKICAgICAgICAgICAgICAgIHNxbF9xID0gZiJTRUxFQ1QgaWQgRlJPTSBwcm90ZWluIFdIRVJFIHNlcXVlbmNlIElOIHtpbl9jbGF1c2V9IgogICAgICAgICAgICAgICAgcHJvdF9pZHMgPSBjLmV4ZWN1dGUoc3FsX3EpLmZldGNoYWxsKCkKICAgICAgICAgICAgICAgIGluc19kYXRhID0gW10KICAgICAgICAgICAgICAgIGZvciBwcm90X2lkIGluIHByb3RfaWRzOgogICAgICAgICAgICAgICAgICAgIGluc19kYXRhLmFwcGVuZCgod19pZFswXSwgcHJvdF9pZFswXSkpCiAgICAgICAgICAgICAgICBzcWxfaW5zID0gKAogICAgICAgICAgICAgICAgICAgICJJTlNFUlQgSU5UTyBwcm90ZWluX3RvX3dhbGsod2Fsa19pZCwgcHJvdGVpbl9pZCkgVkFMVUVTICg/LD8pIgogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgYy5leGVjdXRlbWFueShzcWxfaW5zLCBpbnNfZGF0YSkKICAgICAgICAgICAgYy5leGVjdXRlKCJjb21taXQiKQogICAgICAgIGV4Y2VwdCBzcWwuRXJyb3I6CiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKCJUcmFuc2FjdGlvbiBmYWlsZWQsIHJvbGxpbmcgYmFjayBpbiBidWlsZF9saW5rcyIpCiAgICAgICAgICAgIGMuZXhlY3V0ZSgicm9sbGJhY2siKQogICAgICAgIHNlbGYubG9nZ2VyLmluZm8oZiJFbmQgYnVpbGRfbGlua3MiKQoKICAgIGRlZiBpbnNlcnRfcHJvdGVpbl93YWxrX29iamVjdHMoc2VsZiwgb2JqZWN0cyk6CiAgICAgICAgc2VsZi5sb2dnZXIuaW5mbyhmIkJlZ2luIGluc2VydF9wcm90ZWluX3dhbGtfb2JqZWN0cyIpCiAgICAgICAgc3FsID0gc3FsaXRlMy5jb25uZWN0KHNlbGYuZGF0YWJhc2VfbmFtZSkKICAgICAgICBzcWwuaXNvbGF0aW9uX2xldmVsID0gTm9uZQogICAgICAgIGMgPSBzcWwuY3Vyc29yKCkKICAgICAgICBjLmV4ZWN1dGUoImJlZ2luIikKCiAgICAgICAgZGVmIHByb3RlaW5fc2VxdWVuY2VfaXRlcihvYmplY3RzKToKICAgICAgICAgICAgZm9yIG9iamVjdCBpbiBvYmplY3RzOgogICAgICAgICAgICAgICAgZm9yIHAgaW4gb2JqZWN0WyJwcm90ZWlucyJdOgogICAgICAgICAgICAgICAgICAgIHlpZWxkIChwLCkKCjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgeWllbGQgKHdhbGssIHNlcSkKCiAgICAgICAgdHJ5OgogICAgICAgICAgICBjLmV4ZWN1dGVtYW55KAogICAgICAgICAgICAgICAgIklOU0VSVCBJTlRPIHByb3RlaW4oc2VxdWVuY2UpIFZBTFVFUyAoPykiLAogICAgICAgICAgICAgICAgcHJvdGVpbl9zZXF1ZW5jZV9pdGVyKG9iamVjdHMpLAogICAgICAgICAgICApCiAgICAgICAgICAgIGMuZXhlY3V0ZW1hbnkoCiAgICAgICAgICAgICAgICAiSU5TRVJUIElOVE8gd2FsayAod2FsaywgZG5hX3NlcXVlbmNlKSBWQUxVRVMgKD8sPykiLAogICAgICAgICAgICAgICAgd2Fsa19zZXF1ZW5jZV9pdGVyKG9iamVjdHMpLAogICAgICAgICAgICApCiAgICAgICAgICAgIGMuZXhlY3V0ZSgiY29tbWl0IikKICAgICAgICBleGNlcHQgc3FsLkVycm9yOgogICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcigKICAgICAgICAgICAgICAgICJUcmFuc2FjdGlvbiBmYWlsZWQsIHJvbGxpbmcgYmFjayBpbiBpbnNlcnRfcHJvdGVpbl93YWxrX29iamVjdHMiCiAgICAgICAgICAgICkKICAgICAgICAgICAgYy5leGVjdXRlKCJyb2xsYmFjayIpCiAgICAgICAgIyBDcmVhdGUgaW5kZXhlcwogICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIkNyZWF0aW5nIGluZGV4ZXM6IHdhbGtzX3dhbGssIHdhbGtzX3dfZCBhbmQgcHJvdGVpbl9zZXF1ZW5jZSIpCiAgICAgICAgYy5leGVjdXRlKCJDUkVBVEUgSU5ERVggd2Fsa3Nfd2FsayBPTiB3YWxrKHdhbGspIikKICAgICAgICBjLmV4ZWN1dGUoIkNSRUFURSBJTkRFWCBwcm90ZWluX3NlcXVlbmNlIE9OIHByb3RlaW4oc2VxdWVuY2UpIikKICAgICAgICBjLmV4ZWN1dGUoIkNSRUFURSBJTkRFWCB3YWxrc193X2QgT04gd2Fsayh3YWxrLCBkbmFfc2VxdWVuY2UpIikKCiAgICAgICAgc2VsZi5idWlsZF9saW5rcyhvYmplY3RzKQogICAgICAgIHNlbGYubG9nZ2VyLmluZm8oZiJFbmQgaW5zZXJ0X3Byb3RlaW5fd2Fsa19vYmplY3RzIikKCiAgICBkZWYgZ2V0X3Byb3RlaW5fc2VxdWVuY2VzKHNlbGYpOgogICAgICAgIHNlbGYubG9nZ2VyLmluZm8oZiJCZWdpbiBnZXRfcHJvdGVpbl9zZXF1ZW5jZXMiKQogICAgICAgIGMgPSBzZWxmLmNvbm4uZXhlY3V0ZSgic2VsZWN0IGlkLCBzZXF1ZW5jZSBmcm9tIHByb3RlaW4iKQogICAgICAgIHJfdmFsID0gW3ggZm9yIHggaW4gY10KICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKGYiRW5kIGdldF9wcm90ZWluX3NlcXVlbmNlcyIpCiAgICAgICAgcmV0dXJuIHJfdmFsCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZGVmIHdhbGtfc2VxdWVuY2VfaXRlcihvYmplY3RzKToKICAgICAgICAgICAgZm9yIG9iamVjdCBpbiBvYmplY3RzOgogICAgICAgICAgICAgICAgd2FsayA9ICIsIi5qb2luKG9iamVjdFsid2FsayJdKQogICAgICAgICAgICAgICAgc2VxID0gb2JqZWN0WyJkbmFfc2VxdWVuY2UiXQo8fGZpbV9lbmR8Pg=="]
["74fabfc023eac058b46df66fb210abe7f580fd77-4","74fabfc023eac058b46df66fb210abe7f580fd77","PHxmaW1fcHJlZml4fD4KZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgpmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwppbXBvcnQgb3MKZnJvbSB0ZXh0d3JhcCBpbXBvcnQgZGVkZW50CmZyb20gdGVtcGZpbGUgaW1wb3J0IE5hbWVkVGVtcG9yYXJ5RmlsZQppbXBvcnQgdW5pdHRlc3QKCmZyb20gZml4ZWQyY3N2IGltcG9ydCBwYXJzZV9maXhlZF93aWR0aF9maWxlCgoKY2xhc3MgUGFyc2VGaXhlZFdpZHRoRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKCiAgICAiIiJUZXN0cyBmb3IgcGFyc2VfZml4ZWRfd2lkdGhfZmlsZSIiIgoKICAgIGRlZiBhc3NlcnRJdGVyYWJsZUVxdWFsKHNlbGYsIGl0ZXJhYmxlMSwgaXRlcmFibGUyKToKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXRlcmFibGUxKSwgbGlzdChpdGVyYWJsZTIpKQoKICAgIGRlZiB0ZXN0X3R3b19leGFjdF9jb2x1bW5zKHNlbGYpOgogICAgICAgIGNvbnRlbnRzID0gZGVkZW50KCIiIgogICAgICAgICAgICAyMDEyICBMZXh1cwogICAgICAgICAgICAyMDA5ICBHTUMKICAgICAgICAgICAgMTk2NSAgRm9yZAogICAgICAgICAgICAyMDA1ICBIeXVuZGFpCiAgICAgICAgICAgIDE5OTUgIE1lcmNlZGVzLUJlbnoKICAgICAgICAiIiIpLmxzdHJpcCgpCiAgICAgICAgY29sdW1ucyA9IFsoMCwgNCksICg2LCAxOSldCiAgICAgICAgZXhwZWN0ZWQgPSBbCiAgICAgICAgICAgIFsiMjAxMiIsICJMZXh1cyJdLAogICAgICAgICAgICBbIjIwMDkiLCAiR01DIl0sCiAgICAgICAgICAgIFsiMTk2NSIsICJGb3JkIl0sCiAgICAgICAgICAgIFsiMjAwNSIsICJIeXVuZGFpIl0sCiAgICAgICAgICAgIFsiMTk5NSIsICJNZXJjZWRlcy1CZW56Il0sCiAgICAgICAgXQogICAgICAgIHNlbGYuYXNzZXJ0SXRlcmFibGVFcXVhbCgKICAgICAgICAgICAgcGFyc2VfZml4ZWRfd2lkdGhfZmlsZShTdHJpbmdJTyhjb250ZW50cyksIGNvbHVtbnMpLAo8fGZpbV9ob2xlfD4KICAgICAgICApCgogICAgZGVmIHRlc3RfdW5ldmVuX2NvbHVtbnMoc2VsZik6CiAgICAgICAgY29udGVudHMgPSBkZWRlbnQoIiIiCiAgICAgICAgICAgIDIwMTIgIExleHVzICAgICAgICAgICAgIExGQQogICAgICAgICAgICAyMDA5ICBHTUMgICAgICAgICAgICAgICBZdWtvbiBYTCAxNTAwCiAgICAgICAgICAgIDE5NjUgIEZvcmQgICAgICAgICAgICAgIE11c3RhbmcKICAgICAgICAgICAgMjAwNSAgSHl1bmRhaSAgICAgICAgICAgU29uYXRhCiAgICAgICAgICAgIDE5OTUgIE1lcmNlZGVzLUJlbnogICAgIEMtQ2xhc3MKICAgICAgICAiIiIpLmxzdHJpcCgpCiAgICAgICAgY29sdW1ucyA9IFsoMCwgNCksICg2LCAxOSksICgyNCwgMzcpXQogICAgICAgIGV4cGVjdGVkID0gWwogICAgICAgICAgICBbIjIwMTIiLCAiTGV4dXMiLCAiTEZBIl0sCiAgICAgICAgICAgIFsiMjAwOSIsICJHTUMiLCAiWXVrb24gWEwgMTUwMCJdLAogICAgICAgICAgICBbIjE5NjUiLCAiRm9yZCIsICJNdXN0YW5nIl0sCiAgICAgICAgICAgIFsiMjAwNSIsICJIeXVuZGFpIiwgIlNvbmF0YSJdLAogICAgICAgICAgICBbIjE5OTUiLCAiTWVyY2VkZXMtQmVueiIsICJDLUNsYXNzIl0sCiAgICAgICAgXQogICAgICAgIHNlbGYuYXNzZXJ0SXRlcmFibGVFcXVhbCgKICAgICAgICAgICAgcGFyc2VfZml4ZWRfd2lkdGhfZmlsZShTdHJpbmdJTyhjb250ZW50cyksIGNvbHVtbnMpLAogICAgICAgICAgICBleHBlY3RlZAogICAgICAgICkKCiAgICBkZWYgdGVzdF9taXNzaW5nX2RhdGEoc2VsZik6CiAgICAgICAgY29udGVudHMgPSBkZWRlbnQoIiIiCiAgICAgICAgICAgIDIwMTIgIExleHVzICAgICAgICAgICAgIExGQQogICAgICAgICAgICAgICAgICBGb3JkICAgICAgICAgICAgICBNdXN0YW5nCiAgICAgICAgICAgIDIwMDUgIEh5dW5kYWkgICAgICAgICAgIFNvbmF0YQogICAgICAgICAgICAxOTk1ICBNZXJjZWRlcy1CZW56CiAgICAgICAgIiIiKS5sc3RyaXAoKQogICAgICAgIGNvbHVtbnMgPSBbKDAsIDQpLCAoNiwgMTkpLCAoMjQsIDMxKV0KICAgICAgICBleHBlY3RlZCA9IFsKICAgICAgICAgICAgWyIyMDEyIiwgIkxleHVzIiwgIkxGQSJdLAogICAgICAgICAgICBbIiIsICJGb3JkIiwgIk11c3RhbmciXSwKICAgICAgICAgICAgWyIyMDA1IiwgIkh5dW5kYWkiLCAiU29uYXRhIl0sCiAgICAgICAgICAgIFsiMTk5NSIsICJNZXJjZWRlcy1CZW56IiwgIiJdLAogICAgICAgIF0KICAgICAgICBzZWxmLmFzc2VydEl0ZXJhYmxlRXF1YWwoCiAgICAgICAgICAgIHBhcnNlX2ZpeGVkX3dpZHRoX2ZpbGUoU3RyaW5nSU8oY29udGVudHMpLCBjb2x1bW5zKSwKICAgICAgICAgICAgZXhwZWN0ZWQKICAgICAgICApCgoKIyBUbyB0ZXN0IHRoZSBCb251cyBwYXJ0IG9mIHRoaXMgZXhlcmNpc2UsIGNvbW1lbnQgb3V0IHRoZSBmb2xsb3dpbmcgbGluZQojIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKY2xhc3MgUGFyc2VDb2x1bW5zVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgoKICAgICIiIlRlc3RzIGZvciBwYXJzZV9jb2x1bW5zIiIiCgogICAgZGVmIGFzc2VydEl0ZXJhYmxlRXF1YWwoc2VsZiwgaXRlcmFibGUxLCBpdGVyYWJsZTIpOgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdGVyYWJsZTEpLCBsaXN0KGl0ZXJhYmxlMikpCgogICAgZGVmIHRlc3Rfb25lX3JhbmdlKHNlbGYpOgogICAgICAgIGZyb20gZml4ZWQyY3N2IGltcG9ydCBwYXJzZV9jb2x1bW5zCiAgICAgICAgc2VsZi5hc3NlcnRJdGVyYWJsZUVxdWFsKAogICAgICAgICAgICBwYXJzZV9jb2x1bW5zKCcwOjInKSwKICAgICAgICAgICAgWygwLCAyKV0sCiAgICAgICAgKQoKICAgIGRlZiB0ZXN0X3R3b19yYW5nZXMoc2VsZik6CiAgICAgICAgZnJvbSBmaXhlZDJjc3YgaW1wb3J0IHBhcnNlX2NvbHVtbnMKICAgICAgICBzZWxmLmFzc2VydEl0ZXJhYmxlRXF1YWwoCiAgICAgICAgICAgIHBhcnNlX2NvbHVtbnMoJzA6NCw2OjE5JyksCiAgICAgICAgICAgIFsoMCwgNCksICg2LCAxOSldLAogICAgICAgICkKCiAgICBkZWYgdGVzdF9tYW55X3JhbmdlcyhzZWxmKToKICAgICAgICBmcm9tIGZpeGVkMmNzdiBpbXBvcnQgcGFyc2VfY29sdW1ucwogICAgICAgIHNlbGYuYXNzZXJ0SXRlcmFibGVFcXVhbCgKICAgICAgICAgICAgcGFyc2VfY29sdW1ucygnMDo0LDY6MTksMjQ6MzcnKSwKICAgICAgICAgICAgWygwLCA0KSwgKDYsIDE5KSwgKDI0LCAzNyldLAogICAgICAgICkKCgojIFRvIHRlc3QgdGhlIEJvbnVzIHBhcnQgb2YgdGhpcyBleGVyY2lzZSwgY29tbWVudCBvdXQgdGhlIGZvbGxvd2luZyBsaW5lCkB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKY2xhc3MgTWFpbkZ1bmN0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgoKICAgICIiIlRlc3RzIGZvciBtYWluIGZ1bmN0aW9uIiIiCgogICAgZGVmIHRlc3Rfc2luZ2xlX3JvdyhzZWxmKToKICAgICAgICBmcm9tIGZpeGVkMmNzdiBpbXBvcnQgbWFpbgogICAgICAgIGNvbnRlbnRzID0gKAogICAgICAgICAgICAiMDEgIE90aXMgVGF5bG9yICAgICAgICAgICAgICAgICAgICAgICAgICIKICAgICAgICAgICAgIlJhbiBTbyBIYXJkIHRoZSBTdW4gV2VudCBEb3duICAgICAgICAgICAgICAgIgogICAgICAgICAgICAiMzo1MiIKICAgICAgICApCiAgICAgICAgZXhwZWN0ZWQgPSAnMDEsT3RpcyBUYXlsb3IsUmFuIFNvIEhhcmQgdGhlIFN1biBXZW50IERvd24sMzo1MlxuJwogICAgICAgIGNvbHVtbnMgPSAnMDoyLDQ6MzgsNDA6ODIsODQ6ODgnCiAgICAgICAgd2l0aCBtYWtlX2ZpbGUoY29udGVudHMpIGFzIGZpeGVkX2ZpbGUsIG1ha2VfZmlsZSgnJykgYXMgY3N2X2ZpbGU6CiAgICAgICAgICAgIG1haW4oW2ZpeGVkX2ZpbGUsIGNzdl9maWxlLCAnLS1jb2xzPScgKyBjb2x1bW5zXSkKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVuKGNzdl9maWxlKS5yZWFkKCksIGV4cGVjdGVkKQoKICAgIGRlZiB0ZXN0X211bHRpcGxlX3Jvd3NfYW5kX2NvbHVtbnMoc2VsZik6CiAgICAgICAgZnJvbSBmaXhlZDJjc3YgaW1wb3J0IG1haW4KICAgICAgICBjb250ZW50cyA9IGRlZGVudCgiIiIKICAgICAgICAgICAgMjAxMiAgTGV4dXMgICAgICAgICAgICAgTEZBCiAgICAgICAgICAgIDIwMDkgIEdNQyAgICAgICAgICAgICAgIFl1a29uIFhMIDE1MDAKICAgICAgICAgICAgMTk2NSAgRm9yZCAgICAgICAgICAgICAgTXVzdGFuZwogICAgICAgICAgICAyMDA1ICBIeXVuZGFpICAgICAgICAgICBTb25hdGEKICAgICAgICAgICAgMTk5NSAgTWVyY2VkZXMtQmVueiAgICAgQy1DbGFzcwogICAgICAgICIiIikubHN0cmlwKCkKICAgICAgICBleHBlY3RlZCA9ICgKICAgICAgICAgICAgIjIwMTIsTGV4dXMsTEZBXG4iCiAgICAgICAgICAgICIyMDA5LEdNQyxZdWtvbiBYTCAxNTAwXG4iCiAgICAgICAgICAgICIxOTY1LEZvcmQsTXVzdGFuZ1xuIgogICAgICAgICAgICAiMjAwNSxIeXVuZGFpLFNvbmF0YVxuIgogICAgICAgICAgICAiMTk5NSxNZXJjZWRlcy1CZW56LEMtQ2xhc3NcbiIKICAgICAgICApCiAgICAgICAgY29sdW1ucyA9ICcwOjQsNjoxOSwyNDozNycKICAgICAgICB3aXRoIG1ha2VfZmlsZShjb250ZW50cykgYXMgZml4ZWRfZmlsZSwgbWFrZV9maWxlKCcnKSBhcyBjc3ZfZmlsZToKICAgICAgICAgICAgbWFpbihbJy0tY29scz0nICsgY29sdW1ucywgZml4ZWRfZmlsZSwgY3N2X2ZpbGVdKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZW4oY3N2X2ZpbGUpLnJlYWQoKSwgZXhwZWN0ZWQpCgoKQGNvbnRleHRtYW5hZ2VyCmRlZiBtYWtlX2ZpbGUoY29udGVudHM9Tm9uZSk6CiAgICAiIiJDb250ZXh0IG1hbmFnZXIgcHJvdmlkaW5nIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgZ2l2ZW4gY29udGVudHMuIiIiCiAgICB3aXRoIE5hbWVkVGVtcG9yYXJ5RmlsZShtb2RlPSd3dCcsIGVuY29kaW5nPSd1dGYtOCcsIGRlbGV0ZT1GYWxzZSkgYXMgZjoKICAgICAgICBpZiBjb250ZW50czoKICAgICAgICAgICAgZi53cml0ZShjb250ZW50cykKICAgIHRyeToKICAgICAgICB5aWVsZCBmLm5hbWUKICAgIGZpbmFsbHk6CiAgICAgICAgb3MucmVtb3ZlKGYubmFtZSkKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgZXhwZWN0ZWQKPHxmaW1fZW5kfD4="]
["8e5cd108a03f820267c5c154abfc9ab46787fcda-4","8e5cd108a03f820267c5c154abfc9ab46787fcda","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMy43CiIiIkNlbGVyeSB3b3JrZXIgd3JhcHBlci4KClJlYWRzIG9wdGlvbnMgZnJvbSBhIGNvbmZpZyBmaWxlIChvciBjb21tYW5kLWxpbmUgYXJndW1lbnRzKSwgdGhlbiBleGVjcyBhCmNlbGVyeSB3b3JrZXIgcHJvY2Vzcy4KIiIiCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgb3MKaW1wb3J0IHNvY2tldApmcm9tIHR5cGluZyBpbXBvcnQgVHVwbGUKCgpkZWYgbWFpbigpOgogICAgIiIiRW50cnlwb2ludCBpbnRvIHdyYXBwZXIuIiIiCiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKICAgICAgICBkZXNjcmlwdGlvbj0nUHJvY2VzcyBpbmNvbWluZyBPQ0YgYWNjb3VudCBjcmVhdGlvbiByZXF1ZXN0cy4nLAogICAgICAgIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5Bcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlciwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy1sJywKICAgICAgICAnLS1sb2ctbGV2ZWwnLAogICAgICAgIGRlZmF1bHQ9J2luZm8nLAogICAgICAgIGhlbHA9J0xvZ2dpbmcgbGV2ZWwnLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLWMnLAogICAgICAgICctLWNvbmZpZycsCiAgICAgICAgZGVmYXVsdD0nL2V0Yy9vY2YtY3JlYXRlL29jZi1jcmVhdGUuY29uZicsCiAgICAgICAgaGVscD0nQ29uZmlnIGZpbGUgdG8gcmVhZCBmcm9tLicsCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctZCcsCiAgICAgICAgJy0tZGVidWcnLAogICAgICAgIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICBoZWxwPSdXaGV0aGVyIHRvIHJ1biBpbiBkZWJ1ZyBtb2RlIChhbGxvd3MgaW50ZXJhY3RpdmUgZGVidWdnZXJzKS4nLAogICAgKQogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKICAgIGV4dHJhX2FyZ3M6IFR1cGxlW3N0ciwgLi4uXSA9ICgpCgogICAgaWYgYXJncy5kZWJ1ZzoKICAgICAgICBleHRyYV9hcmdzICs9ICgnLVAnLCAnc29sbycpCiAgICAgICAgb3MuZW52aXJvblsnQ1JFQVRFX0RFQlVHJ10gPSAnMScKCiAgICBvcy5lbnZpcm9uWydDUkVBVEVfQ09ORklHX0ZJTEUnXSA9IGFyZ3MuY29uZmlnCiAgICBvcy5leGVjdnAoCiAgICAgICAgJ2NlbGVyeScsCiAgICAgICAgKAogICAgICAgICAgICAnY2VsZXJ5JywKICAgICAgICAgICAgJ3dvcmtlcicsCiAgICAgICAgICAgICctQScsICdjcmVhdGUudGFza3MnLAogICAgICAgICAgICAjIFRoZSBkZWZhdWx0IGlzIHRvIHNwYXduIG9uZSB3b3JrZXIgcGVyIENQVS4uLiBtZWFuaW5nIDMyIG9yIDQ4IHdvcmtlcnMgb24gTWFyYXRob24hCiAgICAgICAgICAgICctYycsICc0JywKICAgICAgICAgICAgJy0td2l0aG91dC1nb3NzaXAnLAogICAgICAgICAgICAnLS13aXRob3V0LW1pbmdsZScsCiAgICAgICAgICAgICctbCcsIGFyZ3MubG9nX2xldmVsLAoKICAgICAgICAgICAgIyBXZSBhbHNvIGxpc3RlbiBvbiBhIHF1ZXVlIG5hbWVkIGFmdGVyIHRoZSBob3N0bmFtZSBzbyB0aGF0IHRoZQogICAgICAgICAgICAjIGhlYWx0aCBjaGVjayBjYW4gYmUgc3VyZSB0byBoaXQgdGhpcyBob3N0LgogICAgICAgICAgICAjIGh0dHA6Ly9kb2NzLmNlbGVyeXByb2plY3Qub3JnL2VuL2xhdGVzdC91c2VyZ3VpZGUvcm91dGluZy5odG1sCiAgICAgICAgICAgICctUScsICdjZWxlcnkse30nLmZvcm1hdChzb2NrZXQuZ2V0aG9zdG5hbWUoKSksCiAgICAgICAgKSArIGV4dHJhX2FyZ3MsCiAgICApCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbWFpbigpCjx8ZmltX2VuZHw+"]
["706892eed3a30d49beae15ae9bf164664e31cd3d-4","706892eed3a30d49beae15ae9bf164664e31cd3d","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCiMgLSotIGNvZGluZzogdXRmLTggLSotCiIiIgogQ3JlYXRlZCBieSBLYW5zb24gb24gMjAyMC8xLzEwIDE0OjI1LgoiIiIKaW1wb3J0IGpzb24KZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKCmZyb20gc3FsYWxjaGVteSBpbXBvcnQgQ29sdW1uLCBCaWdJbnRlZ2VyCmZyb20gc3FsYWxjaGVteSBpbXBvcnQgSW50ZWdlciwgRmxvYXQKZnJvbSBzcWxhbGNoZW15IGltcG9ydCBTdHJpbmcsIERhdGVUaW1lCgpmcm9tIGFwcC5tb2RlbHMuYmFzZSBpbXBvcnQgQmFzZQoKCmRlZiB0b19qc29uKGluc3QsIGNscyk6CiAgICBkID0gZGljdCAoKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAnJycKICAgIOiOt+WPluihqOmHjOmdoueahOWIl+W5tuWtmOWIsOWtl+WFuOmHjOmdogogICAgJycnCiAgICBmb3IgYyBpbiBjbHMuX190YWJsZV9fLmNvbHVtbnM6Cjx8ZmltX2VuZHw+"]
["77ce0ccc934bede7917e6bcc4d56456aeee268c8-4","77ce0ccc934bede7917e6bcc4d56456aeee268c8","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCB0aW1lCmltcG9ydCBqc29uCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgc3lzCgoKZnJvbSBmbGFzayBpbXBvcnQgRmxhc2sKZnJvbSBmbGFza19zb2NrIGltcG9ydCBTb2NrCgppbXBvcnQgcmFuZG9tCgphcHAgPSBGbGFzayhfX25hbWVfXykKc29jayA9IFNvY2soYXBwKQoKCkBzb2NrLnJvdXRlKCIvZWNobyIpCmRlZiBlY2hvKHNvY2spOgogICAgcHJpbnQoIkNvbm5lY3RlZCEiKQogICAgIyB1cGRhdGUgdGhlc2Ugd2l0aCBzdHVkZW50IHBvaW50cyBmcm9tIHdlYmNhbQogICAgZGF0YSA9IHsKICAgICAgICAiMCI6IHsKICAgICAgICAgICAgIngiOiByYW5kb20ucmFuZGludCgtMzAwLDMwMCksCiAgICAgICAgICAgICJ5IjogcmFuZG9tLnJhbmRpbnQoLTMwMCwzMDApCiAgICAgICAgfSwKICAgICAgICAiMSI6IHsKICAgICAgICAgICAgIngiOiByYW5kb20ucmFuZGludCgtMzAwLDMwMCksCiAgICAgICAgICAgICJ5IjogcmFuZG9tLnJhbmRpbnQoLTMwMCwzMDApCiAgICAgICAgfQogICAgfQogICAgcHJldiA9IDAKICAgIHdoaWxlIFRydWU6CiAgICAgICAgIyBzZW5kIHRoZSBkYXRhIG9mIHRoZSBwb2ludHMgb3ZlciB0aGUgd2Vic29ja2V0CiAgICAgICAgIyBwcmludChkYXRhKQogICAgICAgIHRpbWVfZWxhcHNlZCA9IHRpbWUudGltZSgpIC0gcHJldiAjIHRpbWUudGltZSgpIHJldHVybnMgc2Vjb25kcwo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgICIwIjogewogICAgICAgICAgICAgICAgICAgICJ4IjogZGF0YVsiMCJdWyJ4Il0gKyAxMCAqIHJhbmRvbS5yYW5kb20oKSAtIDUsCiAgICAgICAgICAgICAgICAgICAgInkiOiBkYXRhWyIwIl1bInkiXSArIDEwICogcmFuZG9tLnJhbmRvbSgpIC0gNQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICIxIjogewogICAgICAgICAgICAgICAgICAgICJ4IjogZGF0YVsiMSJdWyJ4Il0gKyAxMCAqIHJhbmRvbS5yYW5kb20oKSAtIDUsCiAgICAgICAgICAgICAgICAgICAgInkiOiBkYXRhWyIxIl1bInkiXSArIDEwICogcmFuZG9tLnJhbmRvbSgpIC0gNQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBhcHAucnVuKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICBpZiB0aW1lX2VsYXBzZWQgPj0gMS4vMTA6CiAgICAgICAgICAgIHByZXYgPSB0aW1lLnRpbWUoKQogICAgICAgICAgICBzb2NrLnNlbmQoZGF0YSkKICAgICAgICAgICAgZGF0YSA9IHsKPHxmaW1fZW5kfD4="]
["8e8e29ca0155d2ad4eeb7eddf42c54730cc84087-1","8e8e29ca0155d2ad4eeb7eddf42c54730cc84087","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IERpY3QKCmZyb20gLmVudGl0eSBpbXBvcnQgRW50aXR5CmZyb20gLndpa2lkYXRhc2Vzc2lvbiBpbXBvcnQgV2lraWRhdGFTZXNzaW9uCgoKY2xhc3MgU2Vuc2UoRW50aXR5KToKPHxmaW1faG9sZXw+CiAgICAgICAgc2VsZi51cGRhdGUoZm9ybSkKCiAgICBkZWYgZ2xvc3NlKHNlbGYsIGxhbmc6IHN0ciA9ICJlbiIpIC0+IHN0cjoKICAgICAgICAiIiIKICAgICAgICBUaGUgZ2xvc3Mgb2YgdGhlIHRleHQgaW4gdGhlIHNwZWNpZmllZCBsYW5ndWFnZSBpcyBhdmFpbGFibGUsIG90aGVyd2lzZQogICAgICAgIGluIGVuZ2xpc2NoLCBhbmQgaWYgdGhhdCdzIG5vdCBzZXQgdG9vIGluIGFuIGFyYml0cmFyeSBzZXQgbGFuZ3VhZ2UKCiAgICAgICAgOnBhcmFtIGxhbmc6IGxhbmd1YWdlIGNvZGUgb2YgdGhlIHdpc2hlZCBsYW5ndWFnZQogICAgICAgIDp0eXBlICBsYW5nOiBzdHIKICAgICAgICA6cnR5cGU6IHN0cgogICAgICAgICIiIgogICAgICAgIGlmIGxhbmcgbm90IGluIHNlbGZbImdsb3NzZXMiXToKICAgICAgICAgICAgaWYgImVuIiBpbiBzZWxmWyJnbG9zc2VzIl06CiAgICAgICAgICAgICAgICBsYW5nID0gImVuIgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbGFuZyA9IGxpc3Qoc2VsZlsiZ2xvc3NlcyJdLmtleXMoKSlbMF0KICAgICAgICByZXR1cm4gc2VsZlsiZ2xvc3NlcyJdW2xhbmddWyJ2YWx1ZSJdCgogICAgZGVmIF9fcmVwcl9fKHNlbGYpIC0+IHN0cjoKICAgICAgICByZXR1cm4gIjxTZW5zZSAne30nPiIuZm9ybWF0KHNlbGYuZ2xvc3NlKCkpCjx8ZmltX3N1ZmZpeHw+CiAgICAiIiJXcmFwcGVyIGFyb3VuZCBhIGRpY3QgdG8gcmVwcmVzZW50IGEgU2Vuc2UiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgcmVwbzogV2lraWRhdGFTZXNzaW9uLCBmb3JtOiBEaWN0KToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKHJlcG8pCjx8ZmltX2VuZHw+"]
["569b6e46c02bd100e72d50b19ead506f4bd348c8-1","569b6e46c02bd100e72d50b19ead506f4bd348c8","PHxmaW1fcHJlZml4fD4KIyBsb2FkIG1vZGVsCiMgaXRlcmF0ZSB0aHJvdWdoIG5ld3NwYXBlcnMKIyBldmVyeSAxMDAwIG5ld3NwYXBlcnMsIGNoZWNrIGhvdyBtYW55IG5laWdoYm9ycyB0aGV5IGhhdmUKIyAtIHB1bGwgdG9wX24gPSAxMDAKIyAtIGNvdW50IGV2ZXJ5dGhpbmcgb3ZlciAuNjUKCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IENvdW50ZXIKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCgppbXBvcnQgZ2Vuc2ltCgoKZGVmIF9nZXRfZG9jMnZlY190YWcodHh0X3BhdGgsIHRhcmdldF9kaXIpOgogICAgc3ViX3BhdGggPSB0eHRfcGF0aC5yZWxhdGl2ZV90byh0YXJnZXRfZGlyKQogICAgcmV0dXJuIHN0cihzdWJfcGF0aCkucmVwbGFjZSgnb2NyLnR4dCcsICcnKS5yc3RyaXAoJy8nKQoKCmRlZiBlc3RpbWF0ZSh0YXJnZXRfZGlyLCBtb2RlbF9wYXRoLCB0b3BuPTEwMCwgdGhyZXNob2xkPTAuNjUpOgogICAgbW9kZWwgPSBnZW5zaW0ubW9kZWxzLkRvYzJWZWMubG9hZChtb2RlbF9wYXRoKQogICAgY291bnQgPSAwCiAgICBzdGF0cyA9IFtdCgogICAgZm9yIHR4dF9wYXRoIGluIFBhdGgodGFyZ2V0X2Rpcikucmdsb2IoJyoqLyonKToKICAgICAgICBjb3VudCArPSAxCjx8ZmltX2hvbGV8PgoKICAgICAgICBpZiBub3QgdHh0X3BhdGguaXNfZmlsZSgpOgogICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAjIC5EU19TdG9yZSBvciB3aGF0ZXZlci4KICAgICAgICBpZiB0eHRfcGF0aC5uYW1lLnN0YXJ0c3dpdGgoJy4nKToKICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgdGFnID0gX2dldF9kb2MydmVjX3RhZyh0eHRfcGF0aCwgdGFyZ2V0X2RpcikKCiAgICAgICAgdHJ5OgogICAgICAgICAgICBuZWlnaGJvcnMgPSBtb2RlbC5kb2N2ZWNzLm1vc3Rfc2ltaWxhcih0YWcsIHRvcG49dG9wbikKICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgIHByaW50KGYnQ291bGQgbm90IGZpbmQge3RhZ30nKQogICAgICAgICAgICBjb250aW51ZQoKICAgICAgICBuZWFyX25laWdoYm9ycyA9IFtkb2MgZm9yIGRvYyBpbiBuZWlnaGJvcnMgaWYgZG9jWzFdID49IHRocmVzaG9sZF0KICAgICAgICBzdGF0cyArPSBbbGVuKG5lYXJfbmVpZ2hib3JzKV0KCiAgICByZXR1cm4ge2s6IHYgZm9yIGssIHYgaW4gc29ydGVkKENvdW50ZXIoc3RhdHMpLml0ZW1zKCksIGtleT1sYW1iZGEgaXRlbTogaXRlbVsxXSl9Cjx8ZmltX3N1ZmZpeHw+CgogICAgICAgICMgT25seSBzYW1wbGluZyBldmVyeSB0aG91c2FuZHRoIGZpbGUgdG8gc2F2ZSB0aW1lLgogICAgICAgIGlmIG5vdCBjb3VudCAlIDEwMDAgPT0gMDoKICAgICAgICAgICAgY29udGludWUKPHxmaW1fZW5kfD4="]
["8eb992ea467053c696e8cce5386a0673562d4a8f-1","8eb992ea467053c696e8cce5386a0673562d4a8f","PHxmaW1fcHJlZml4fD4KIyBpbnRlcm5hbCBpbXBvcnRzCmZyb20gY29uZmlncyBpbXBvcnQgY29uZmlnCmZyb20gZGF0YWxvYWRlcnMuZGF0YXNldCBpbXBvcnQgRFJEYXRhc2V0CmZyb20gbW9kZWwucmVzbmV0NTAgaW1wb3J0IFJlc25ldDUwCmZyb20gdXRpbHMudXRpbCBpbXBvcnQgZ2V0X2FjY3VyYWN5LCBzYXZlX2NoZWNrcG9pbnQsIGxvYWRfY2hlY2twb2ludCwgY3JlYXRlX3NhbXBsZXIKCiMgZXh0ZXJuYWwgaW1wb3J0cwpmcm9tIHRxZG0gaW1wb3J0IHRxZG0KaW1wb3J0IHRvcmNoCmZyb20gdG9yY2gudXRpbHMuZGF0YSBpbXBvcnQgRGF0YUxvYWRlcgpmcm9tIHRvcmNoIGltcG9ydCBubiwgb3B0aW0KZnJvbSBza2xlYXJuLm1ldHJpY3MgaW1wb3J0IGNvaGVuX2thcHBhX3Njb3JlCmltcG9ydCBvcwoKZGVmIHRyYWluX29uZV9lcG9jaChsb2FkZXIsIG1vZGVsLCBvcHRpbWl6ZXIsIGxvc3NfZm4sIHNjYWxlciwgZGV2aWNlKToKICAgICIiIlRyYWlucyB0aGUgbW9kZWwgZm9yIG9uZSBlcG9jaCIiIgoKICAgIGxvc3NlcyA9IFtdCiAgICAjIGxvb3AgPSB0cWRtKGxvYWRlcikKICAgICMgZm9yIGJhdGNoX2lkeCwgKHgsIHksIF8pIGluIGVudW1lcmF0ZShsb29wKToKICAgIGZvciBiYXRjaF9pZHgsICh4LCB5LCBfKSBpbiBlbnVtZXJhdGUobG9hZGVyKToKICAgICAgICB4ID0geC50byhkZXZpY2U9ZGV2aWNlKQogICAgICAgIHkgPSB5LnRvKGRldmljZT1kZXZpY2UpCgogICAgICAgICMgZm9yd2FyZCBwYXNzCiAgICAgICAgd2l0aCB0b3JjaC5jdWRhLmFtcC5hdXRvY2FzdCgpOgogICAgICAgICAgICBzY29yZXMgPSBtb2RlbCh4KQogICAgICAgICAgICBsb3NzID0gbG9zc19mbihzY29yZXMsIHkudW5zcXVlZXplKDEpLmZsb2F0KCkpCgogICAgICAgIGxvc3Nlcy5hcHBlbmQobG9zcy5pdGVtKCkpCgogICAgICAgICMgYmFja3dhcmQgcGFzcwogICAgICAgIG9wdGltaXplci56ZXJvX2dyYWQoKQogICAgICAgICMgc2NhbGVyLnNjYWxlKGxvc3MpLmJhY2t3YXJkKCkKICAgICAgICAjIHNjYWxlci5zdGVwKG9wdGltaXplcikKICAgICAgICBsb3NzLmJhY2t3YXJkKCkKICAgICAgICBvcHRpbWl6ZXIuc3RlcCgpCgogICAgICAgICMgVXBkYXRlIHByb2dyZXNzIGJhcgogICAgICAgICMgbG9vcC5zZXRfcG9zdGZpeChsb3NzPWxvc3MuaXRlbSgpKQoKICAgICAgICBpZiAoYmF0Y2hfaWR4ICUgMTAwID09IDApOgogICAgICAgICAgICBwcmludChmJ1x0QmF0Y2gge2JhdGNoX2lkeH0ve2xlbihsb2FkZXIpfTpcdExvc3M6IHtsb3NzLml0ZW0oKTouM2Z9JykKCiAgICBlcG9jaF9sb3NzID0gc3VtKGxvc3NlcykgLyBsZW4obG9zc2VzKQoKICAgIHJldHVybiBlcG9jaF9sb3NzCgoKZGVmIHRyYWluX2FsbF9lcG9jaHMoKToKICAgICIiIlRyYWlucyB0aGUgbW9kZWwgZm9yIGFsbCBlcG9jaHMiIiIKCiAgICAjIENyZWF0ZSBEYXRhc2V0cwogICAgdHJhaW5fZGF0YXNldCA9IERSRGF0YXNldChjb25maWcuVFJBSU5fSU1BR0VTX1BBVEgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5UUkFJTl9DU1YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU9J3RyYWluJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPWNvbmZpZy50cmFuc2Zvcm1hdGlvbnNbJ3RyYWluJ10pCiAgICBwcmludCgndHJhaW5fZGF0YXNldCBjcmVhdGVkJykKICAgIHZhbGlkX2RhdGFzZXQgPSBEUkRhdGFzZXQoY29uZmlnLlRSQUlOX0lNQUdFU19QQVRILAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuVkFMSURfQ1NWLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlPSd2YWxpZGF0aW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPWNvbmZpZy50cmFuc2Zvcm1hdGlvbnNbJ3ZhbGlkYXRpb24nXSkKICAgIHByaW50KCd2YWxpZF9kYXRhc2V0IGNyZWF0ZWQnKQoKICAgICMgQ3JlYXRlIHNhbXBsZXIgd2l0aCBjbGFzc2VzIHdlaWdodHMgdG8gZGVhbCB3aXRoIHVuYmFsYW5jZSB0cmFpbiBkYXRhc2V0CiAgICBzYW1wbGVyID0gY3JlYXRlX3NhbXBsZXIodHJhaW5fZGF0YXNldC5kYXRhLmxldmVsKQoKICAgICMgQ3JlYXRlIERhdGFMb2FkZXJzCiAgICB0cmFpbl9sb2FkZXIgPSBEYXRhTG9hZGVyKAogICAgICAgIHRyYWluX2RhdGFzZXQsIGJhdGNoX3NpemU9Y29uZmlnLkJBVENIX1NJWkUsIG51bV93b3JrZXJzPWNvbmZpZy5OVU1fV09SS0VSUywKICAgICAgICBzYW1wbGVyPXNhbXBsZXIKICAgICAgICAjICxzaHVmZmxlPVRydWUKICAgICkKICAgIHByaW50KCd0cmFpbl9sb2FkZXIgY3JlYXRlZCcpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHZhbGlkX2xvYWRlciA9IERhdGFMb2FkZXIoCiAgICAgICAgdmFsaWRfZGF0YXNldCwgYmF0Y2hfc2l6ZT1jb25maWcuQkFUQ0hfU0laRSwgbnVtX3dvcmtlcnM9Y29uZmlnLk5VTV9XT1JLRVJTLAogICAgICAgIHNodWZmbGU9RmFsc2UKICAgICkKPHxmaW1fZW5kfD4="]
["515b51e0bbb0736f2ab04d8a2445eabc06f8c11a-1","515b51e0bbb0736f2ab04d8a2445eabc06f8c11a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdApmcm9tIHNxbGFsY2hlbXkub3JtIGltcG9ydCBTZXNzaW9uCgpmcm9tIGFwcC5kYXRhYmFzZS5tb2RlbHMgaW1wb3J0IFpvZGlhYwpmcm9tIHRlc3RzLnV0aWxzIGltcG9ydCBjcmVhdGVfbW9kZWwsIGRlbGV0ZV9pbnN0YW5jZQoKCkBweXRlc3QuZml4dHVyZQpkZWYgem9kaWFjMShzZXNzaW9uOiBTZXNzaW9uKSAtPiBab2RpYWM6CiAgICB6b2RpYWMgPSBjcmVhdGVfbW9kZWwoCiAgICAgICAgc2Vzc2lvbiwgWm9kaWFjLAogICAgICAgIG5hbWU9ImFyaWVzIiwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHN0YXJ0X21vbnRoPTMsCiAgICAgICAgc3RhcnRfZGF5X2luX21vbnRoPTIwLAogICAgICAgIGVuZF9tb250aD00LAogICAgICAgIGVuZF9kYXlfaW5fbW9udGg9MTksCjx8ZmltX2VuZHw+"]
["707356c3d2cd66f2637e42f85f718057b9cf37c6-1","707356c3d2cd66f2637e42f85f718057b9cf37c6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gZ2xvYiBpbXBvcnQgZ2xvYgppbXBvcnQgbXVsdGlwcm9jZXNzaW5nIGFzIG1wCgpmcm9tIHRxZG0gaW1wb3J0IHRxZG0KCmZyb20gbWVyZ2UgaW1wb3J0IE1lcmdlcgoKCmRlZiBtZXJnZV9iYXRjaChpbnBfdHVwbGUpOgogICAgaW5maWxlLCBvdXRmaWxlLCBwcmV2X21lcmdlID0gaW5wX3R1cGxlCiAgICB0cnk6CiAgICAgICAgbSA9IE1lcmdlcihwcmV2X21lcmdlLCBpbmZpbGUpCiAgICAgICAgbS5zYXZlKG91dGZpbGUpCiAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAgIHByaW50KGluZmlsZSwgZSkKCgpkZWYgYmF0Y2hfaW5wKG1vbF9wYXRoLCBiYXRjaF9udW0sIHdwX3BhdGgpOgogICAgYmF0Y2hlcyA9IFtdCiAgICBmb3IgbW9sIGluIHRxZG0obW9sX3BhdGgpOgogICAgICAgIG1vbF9uYW1lID0gb3MucGF0aC5kaXJuYW1lKG1vbCkuc3BsaXQoJy8nKVstMV0KICAgICAgICBwX21lcmdlID0gZid7d3BfcGF0aH0vYmF0Y2h7YmF0Y2hfbnVtLTF9L3ttb2xfbmFtZX1fYmF0Y2h7YmF0Y2hfbnVtLTF9Lm1lcmdlZCcKICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUocF9tZXJnZSkgYW5kIGJhdGNoX251bSA+IDE6CiAgICAgICAgICAgIHByaW50KGYnQmF0Y2gge2JhdGNoX251bS0xfSBvZiBtb2xlY3VsZSB7bW9sX25hbWV9IGhhcyBub3QgYmVlbiBtZXJnZWQgeWV0LiBTa2lwcGVkLicpCiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgb3V0ZmlsZSA9IGYne291dHBhdGh9L3ttb2xfbmFtZX1fYmF0Y2h7YmF0Y2hfbnVtfS5tZXJnZWQnCiAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUob3V0ZmlsZSk6CiAgICAgICAgICAgIHByaW50KGYnQmF0Y2gge2JhdGNoX251bX0gaGFzIGFscmVhZHkgYmVlbiBtZXJnZWQuIFNraXBwZWQuJykKICAgICAgICAgICAgY29udGludWUKICAgICAgICBiYXRjaGVzLmFwcGVuZCgobW9sLCBvdXRmaWxlLCBwX21lcmdlKSkKICAgIHJldHVybiBiYXRjaGVzCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGltcG9ydCBhcmdwYXJzZQogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1tb2xwYXRoJywgYWN0aW9uPSdzdG9yZScsIGhlbHA9JycsIG1ldGF2YXI9ImRpciIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tb3V0cGF0aCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9JycpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW5jcHVzJywgYWN0aW9uPSdzdG9yZScsIGhlbHA9JycsIG1ldGF2YXI9Im8iKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1uYmF0Y2gnLCBhY3Rpb249J3N0b3JlJywgbWV0YXZhcj0iaW50IiwgdHlwZT1pbnQpCgo8fGZpbV9lbmR8Pg=="]
["8e6524eef05381ccb7a9e14dd6e0986f5b37ce3f-4","8e6524eef05381ccb7a9e14dd6e0986f5b37ce3f","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiMgRGVmaW5lIHlvdXIgaXRlbSBwaXBlbGluZXMgaGVyZQojCiMgRG9uJ3QgZm9yZ2V0IHRvIGFkZCB5b3VyIHBpcGVsaW5lIHRvIHRoZSBJVEVNX1BJUEVMSU5FUyBzZXR0aW5nCiMgU2VlOiBodHRwOi8vZG9jLnNjcmFweS5vcmcvZW4vbGF0ZXN0L3RvcGljcy9pdGVtLXBpcGVsaW5lLmh0bWwKCmltcG9ydCBkYXRldGltZQppbXBvcnQgdW5pY29kZWNzdiBhcyBjc3YKZnJvbSBzcG9ydF9zdGF0cy5pdGVtcyBpbXBvcnQgU3BvcnRTdGF0c0l0ZW0KCgpjbGFzcyBTcG9ydFN0YXRzUGlwZWxpbmUob2JqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBuYW1lID0gZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoIiVZLSVtLSVkLSVIOiVNOiVTIikKICAgICAgICBzZWxmLm15Q3N2ID0gY3N2LndyaXRlcihvcGVuKCdsb2ctJyArIG5hbWUgKyAnLmNzdicsICd3YicpKQogICAgICAgIGl0ZW0gPSBTcG9ydFN0YXRzSXRlbSgpCiAgICAgICAgc2VsZi5teUNzdi53cml0ZXJvdyhsaXN0KGl0ZW0uZmllbGRzLmtleXMoKSkpCgogICAgZGVmIHByb2Nlc3NfaXRlbShzZWxmLCBpdGVtLCBzcGlkZXIpOgogICAgICAgIGlmIGxlbihpdGVtLmtleXMoKSkgPT0gMDoKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIHJvdyA9IFtdCiAgICAgICAgZm9yIGZpZWxkIGluIGl0ZW0uZmllbGRzOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICByb3cuYXBwZW5kKGl0ZW1bZmllbGRdKQogICAgICAgICAgICBleGNlcHQgS2V5RXJyb3IgYXMgZToKICAgICAgICAgICAgICAgIHJvdy5hcHBlbmQoIiIpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5teUNzdi53cml0ZXJvdyhyb3cpCiAgICAgICAgcmV0dXJuIGl0ZW0KPHxmaW1fZW5kfD4="]
["2d321bf7dd381168056cd38d0937ae6525f1501e-2","2d321bf7dd381168056cd38d0937ae6525f1501e",{"$cut":{"chars":28296,"head":"PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KCgoiIiIKVGhpcyBmaWxlIHJlZ2lzdGVycyBwcmUtZGVmaW5lZCBkYXRhc2V0cyBhdCBoYXJkLWNvZGVkIHBhdGhzLCBhbmQgdGhlaXIgbWV0YWRhdGEuCgpXZSBoYXJkLWNvZGUgbWV0YWRhdGEgZm9yIGNvbW1vbiBkYXRhc2V0cy4gVGhpcyB3aWxsIGVuYWJsZToKMS4gQ29uc2lzdGVuY3kgY2hlY2sgd2hlbiBsb2FkaW5nIHRoZSBkYXRhc2V0cwoyLiBVc2UgbW9kZWxzIG9uIHRoZXNlIHN0YW5kYXJkIGRhdGFzZXRzIGRpcmVjdGx5IGFuZCBydW4gZGVtb3MsCiAgIHdpdGhvdXQgaGF2aW5nIHRvIGRvd25sb2FkIHRoZSBkYXRhc2V0IGFubm90YXRpb25zCgpXZSBoYXJkLWNvZGUgc29tZSBwYXRocyB0byB0aGUgZGF0YXNldCB0aGF0J3MgYXNzdW1lZCB0bwpleGlzdCBpbiAiLi9kYXRhc2V0cy8iLgoKVXNlcnMgU0hPVUxEIE5PVCB1c2UgdGhpcyBmaWxlIHRvIGNyZWF0ZSBuZXcgZGF0YXNldCAvIG1ldGFkYXRhIGZvciBuZXcgZGF0YXNldC4KVG8gYWRkIG5ldyBkYXRhc2V0LCByZWZlciB0byB0aGUgdHV0b3JpYWwgImRvY3MvREFUQVNFVFMubWQiLgoiIiIKCmltcG9ydCBvcwoKZnJvbSBkZXRlY3Ryb24yLmRhdGEgaW1wb3J0IERhdGFzZXRDYXRhbG9nLCBNZXRhZGF0YUNhdGFsb2cKZnJvbSAuYnVpbHRpbl9tZXRhIGltcG9ydCBBREUyMEtfU0VNX1NFR19DQVRFR09SSUVTLCBfZ2V0X2J1aWx0aW5fbWV0YWRhdGEKCiNEZXRlY3Ryb24y6Ieq5bim55qE5pWw5o2u5Yqg6L2956iL5bqPCmZyb20gLmNpdHlzY2FwZXMgaW1wb3J0IGxvYWRfY2l0eXNjYXBlc19pbnN0YW5jZXMsIGxvYWRfY2l0eXNjYXBlc19zZW1hbnRpYwpmcm9tIC5jaXR5c2NhcGVzX3Bhbm9wdGljIGltcG9ydCByZWdpc3Rlcl9hbGxfY2l0eXNjYXBlc19wYW5vcHRpYwpmcm9tIC5jb2NvIGltcG9ydCBsb2FkX3NlbV9zZWcsIHJlZ2lzdGVyX2NvY29faW5zdGFuY2VzCmZyb20gLmNvY29fcGFub3B0aWMgaW1wb3J0IHJlZ2lzdGVyX2NvY29fcGFub3B0aWMsIHJlZ2lzdGVyX2NvY29fcGFub3B0aWNfc2VwYXJhdGVkCmZyb20gLmx2aXMgaW1wb3J0IGdldF9sdmlzX2luc3RhbmNlc19tZXRhLCByZWdpc3Rlcl9sdmlzX2luc3RhbmNlcwpmcm9tIC5wYXNjYWxfdm9jIGltcG9ydCByZWdpc3Rlcl9wYXNjYWxfdm9jCgoj6Ieq5bex5Yqg5LiK55qE55So5LqO5YiG57G75Lu75Yqh55qE5pWw5o2u5Yqg6L2956iL5bqPCmZyb20gLmNsYXNzaWZpY2F0aW9uLmljcm9uX3dhdGVyIGltcG9ydCByZWdpc3Rlcl9pY3Jvbl93YXRlcgpmcm9tIC5jbGFzc2lmaWNhdGlvbi5wcm9jZXNzX2RhdGEgaW1wb3J0IHJlZ2lzdGVyX3Byb2Nlc3NfZGF0YQpmcm9tIC5jbGFzc2lmaWNhdGlvbi5wcm9jZXNzX2FuZF9pY3JvbldhdGVyIGltcG9ydCByZWdpc3Rlcl9wcm9jZXNzX2FuZF9pY3JvbldhdGVyCgoj6Ieq5bex5Yqg5LiK55qE55So5LqO5bCP5qC35pys55uu5qCH5qOA5rWL55qE5pWw5o2u5Yqg6L2956iL5bqPCmZyb20gLmZzZGV0Lm1ldGFfY29jbyBpbXBvcnQgcmVnaXN0ZXJfbWV0YV9jb2NvCmZyb20gLmZzZGV0Lm1ldGFfbHZpcyBpbXBvcnQgcmVnaXN0ZXJfbWV0YV9sdmlzCmZyb20gLmZzZGV0Lm1ldGFfcGFzY2FsX3ZvYyBpbXBvcnQgcmVnaXN0ZXJfbWV0YV9wYXNjYWxfdm9jCgojID09PT0gUHJlZGVmaW5lZCBkYXRhc2V0cyBhbmQgc3BsaXRzIGZvciBDT0NPID09PT09PT09PT0KCl9QUkVERUZJTkVEX1NQTElUU19DT0NPID0ge30KX1BSRURFRklORURfU1BMSVRTX0NPQ09bImNvY28iXSA9IHsKICAgICJjb2NvXzIwMTRfdHJhaW4iOiAoImNvY28vdHJhaW4yMDE0IiwgImNvY28vYW5ub3RhdGlvbnMvaW5zdGFuY2VzX3RyYWluMjAxNC5qc29uIiksCiAgICAiY29jb18yMDE0X3ZhbCI6ICgiY29jby92YWwyMDE0IiwgImNvY28vYW5ub3RhdGlvbnMvaW5zdGFuY2VzX3ZhbDIwMTQuanNvbiIpLAogICAgImNvY29fMjAxNF9taW5pdmFsIjogKCJjb2NvL3ZhbDIwMTQiLCAiY29jby9hbm5vdGF0aW9ucy9pbnN0YW5jZXNfbWluaXZhbDIwMTQuanNvbiIpLAogICAgImNvY29fMjAxNF92YWxtaW51c21pbml2YWwiOiAoCiAgICAgICAgImNvY28vdmFsMjAxNCIsCiAgICAgICAgImNvY28vYW5ub3RhdGlvbnMvaW5zdGFuY2VzX3ZhbG1pbnVzbWluaXZhbDIwMTQuanNvbiIsCiAgICApLAogICAgImNvY29fMjAxN190cmFpbiI6ICgiY29jby90cmFpbjIwMTciLCAiY29jby9hbm5vdGF0aW9ucy9pbnN0YW5jZXNfdHJhaW4yMDE3Lmpzb24iKSwKICAgICJjb2NvXzIwMTdfdmFsIjogKCJjb2NvL3ZhbDIwMTciLCAiY29jby9hbm5vdGF0aW9ucy9pbnN0YW5jZXNfdmFsMjAxNy5qc29uIiksCiAgICAiY29jb18yMDE3X3Rlc3QiOiAoImNvY28vdGVzdDIwMTciLCAiY29jby9hbm5vdGF0aW9ucy9pbWFnZV9pbmZvX3Rlc3QyMDE3Lmpzb24iKSwKICAgICJjb2NvXzIwMTdfdGVzdC1kZXYiOiAoImNvY28vdGVzdDIwMTciLCAiY29jby9hbm5vdGF0aW9ucy9pbWFnZV9pbmZvX3Rlc3QtZGV2MjAxNy5qc29uIiksCiAgICAiY29jb18yMDE3X3ZhbF8xMDAiOiAoImNvY28vdmFsMjAxNyIsICJjb2NvL2Fubm90YXRpb25zL2luc3RhbmNlc192YWwyMDE3XzEwMC5qc29uIiksCn0KCl9QUkVERUZJTkVEX1NQTElUU19DT0NPWyJjb2NvX3BlcnNvbiJdID0gewogICAgImtleXBvaW50c19jb2NvXzIwMTRfdHJhaW4iOiAoCiAgICAgICAgImNvY28vdHJhaW4yMDE0IiwKICAgICAgICAiY29jby9hbm5vdGF0aW9ucy9wZXJzb25fa2V5cG9pbnRzX3RyYWluMjAxNC5qc29uIiwKICAgICksCiAgICAia2V5cG9pbnRzX2NvY29fMjAxNF92YWwiOiAoImNvY28vdmFsMjAxNCIsICJjb2NvL2Fubm90YXRpb25zL3BlcnNvbl9rZXlwb2ludHNfdmFsMjAxNC5qc29uIiksCiAgICAia2V5cG9pbnRzX2NvY29fMjAxNF9taW5pdmFsIjogKAogICAgICAgICJjb2NvL3ZhbDIwMTQiLAogICAgICAgICJjb2NvL2Fubm90YXRpb25zL3BlcnNvbl9rZXlwb2ludHNfbWluaXZhbDIwMTQuanNvbiIsCiAgICApLAogICAgImtleXBvaW50"}}]
["851441c21edfc91ceacba68121f5a3fb7720fffe-2","851441c21edfc91ceacba68121f5a3fb7720fffe","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiSXJpc19EVHJlZS5pcHluYgoKQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgQ29sYWJvcmF0b3J5LgoKT3JpZ2luYWwgZmlsZSBpcyBsb2NhdGVkIGF0CiAgICBodHRwczovL2NvbGFiLnJlc2VhcmNoLmdvb2dsZS5jb20vZHJpdmUvMTlyaHZxVFBDWVhnbUNuLWFKV2pac1ZLUkZmZmlZZThmCiIiIgoKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgc2tsZWFybgoKZGYgPSBwZC5yZWFkX2NzdigiL2NvbnRlbnQvaXJpcy5jc3YiKQoKZGYKCmRmLmhlYWQoKQo8fGZpbV9ob2xlfD4KYXJyYXkgPSBkZi52YWx1ZXMKWD1hcnJheVs6LCAwOjRdClk9YXJyYXlbOiwgNF0KdmFsaWRhdGlvbl9zaXplPTAuMzAKc2VlZD03ClhfdHJhaW4sIFhfdmFsaWRhdGlvbiwgWV90cmFpbiwgWV92YWxpZGF0aW9uID0gbW9kZWxfc2VsZWN0aW9uLnRyYWluX3Rlc3Rfc3BsaXQoWCwgWSwgdGVzdF9zaXplID0gdmFsaWRhdGlvbl9zaXplLCByYW5kb21fc3RhdGU9c2VlZCkKCmR0YyA9IERlY2lzaW9uVHJlZUNsYXNzaWZpZXIoKQpkdGMuZml0KFhfdHJhaW4sIFlfdHJhaW4pCnByZWRpY3Rpb25zID0gZHRjLnByZWRpY3QoWF92YWxpZGF0aW9uKQoKcHJpbnQocHJlZGljdGlvbnMpCjx8ZmltX3N1ZmZpeHw+Cgpmcm9tIHNrbGVhcm4udHJlZSBpbXBvcnQgRGVjaXNpb25UcmVlQ2xhc3NpZmllcgpmcm9tIHNrbGVhcm4gaW1wb3J0IG1vZGVsX3NlbGVjdGlvbgoKPHxmaW1fZW5kfD4="]
["8eb9edef7b6caffa1d6af9bcc8b2bb07fe332ec8-4","8eb9edef7b6caffa1d6af9bcc8b2bb07fe332ec8","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KIyBDb3B5cmlnaHQgMjAxNiBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgojIHVuaXR0ZXN0IHJlcXVpcmVzIG1ldGhvZCBuYW1lcyBzdGFydGluZyBpbiAndGVzdCcKIyBweWxpbnQ6ZGlzYWJsZT1pbnZhbGlkLW5hbWUKCiIiIlVuaXQgdGVzdHMgZm9yIElwRGlhZ0lwZXJmMyBpbXBsZW1lbnRhdGlvbi4iIiIKCl9fYXV0aG9yX18gPSAnZGdlbnRyeUBnb29nbGUuY29tIChEZW50b24gR2VudHJ5KScKCmltcG9ydCBnb29nbGUzCmZyb20gdHIud3Z0ZXN0IGltcG9ydCB1bml0dGVzdAppbXBvcnQgdHIuaGFuZGxlCmltcG9ydCB0ci5tYWlubG9vcAppbXBvcnQgaXBfZGlhZ19pcGVyZjMKCgpjbGFzcyBEaWFnSXBlcmYzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgIiIiVGVzdHMgZm9yIGlwX2RpYWdfaXBlcmYzLnB5LiIiIgoKICBkZWYgc2V0VXAoc2VsZik6CiAgICBzdXBlcihEaWFnSXBlcmYzVGVzdCwgc2VsZikuc2V0VXAoKQogICAgc2VsZi5vbGRfSVBFUkYzID0gaXBfZGlhZ19pcGVyZjMuSVBFUkYzCiAgICBpcF9kaWFnX2lwZXJmMy5JUEVSRjNbMF0gPSAndGVzdGRhdGEvaXBfZGlhZ19pcGVyZjMvaXBlcmYzJwogICAgc2VsZi5sb29wID0gdHIubWFpbmxvb3AuTWFpbkxvb3AoKQoKICBkZWYgdGVhckRvd24oc2VsZik6CiAgICBzdXBlcihEaWFnSXBlcmYzVGVzdCwgc2VsZikudGVhckRvd24oKQogICAgaXBfZGlhZ19pcGVyZjMuSVBFUkYzID0gc2VsZi5vbGRfSVBFUkYzCgogIGRlZiB0ZXN0VmFsaWRhdGVFeHBvcnRzKHNlbGYpOgogICAgaXBlcmYzID0gaXBfZGlhZ19pcGVyZjMuRGlhZ0lwZXJmMygpCiAgICB0ci5oYW5kbGUuVmFsaWRhdGVFeHBvcnRzKGlwZXJmMykKCiAgZGVmIF9XYWl0VW50aWxDb21wbGV0ZWQoc2VsZiwgaXBlcmYzKToKICAgIGlwZXJmMy5EaWFnbm9zdGljc1N0YXRlID0gJ1JlcXVlc3RlZCcKICAgIHdoaWxlIGlwZXJmMy5EaWFnbm9zdGljc1N0YXRlID09ICdSZXF1ZXN0ZWQnOgogICAgICBzZWxmLmxvb3AuUnVuT25jZSh0aW1lb3V0PTUpCgogIGRlZiB0ZXN0U2ltcGxlKHNlbGYpOgogICAgaXBlcmYzID0gaXBfZGlhZ19pcGVyZjMuRGlhZ0lwZXJmMygpCiAgICBpcGVyZjMuSG9zdCA9ICdob3N0bmFtZScKICAgIHNlbGYuX1dhaXRVbnRpbENvbXBsZXRlZChpcGVyZjMpCiAgICBzZWxmLmFzc2VydEVxdWFsKGlwZXJmMy5EaWFnbm9zdGljc1N0YXRlLCAnQ29tcGxldGUnKQogICAgc2VsZi5hc3NlcnRUcnVlKCdob3N0bmFtZScgaW4gaXBlcmYzLlJlc3VsdCkKICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnaXBlcmYzOicgaW4gaXBlcmYzLlJlc3VsdCkKCiAgZGVmIHRlc3RJUHY0QWRkcmVzc1Bpbmcoc2VsZik6CiAgICBpcGVyZjMgPSBpcF9kaWFnX2lwZXJmMy5EaWFnSXBlcmYzKCkKICAgIGlwZXJmMy5Ib3N0ID0gJzguOC44LjgnCiAgICBzZWxmLl9XYWl0VW50aWxDb21wbGV0ZWQoaXBlcmYzKQogICAgc2VsZi5hc3NlcnRFcXVhbChpcGVyZjMuRGlhZ25vc3RpY3NTdGF0ZSwgJ0NvbXBsZXRlJykKICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnOC44LjguOCcgaW4gaXBlcmYzLlJlc3VsdCkKICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnLS12ZXJzaW9uNCcgaW4gaXBlcmYzLlJlc3VsdCkKICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnaXBlcmYzOicgaW4gaXBlcmYzLlJlc3VsdCkKCiAgZGVmIHRlc3RJUHY2QWRkcmVzc1Bpbmcoc2VsZik6CiAgICBpcGVyZjMgPSBpcF9kaWFnX2lwZXJmMy5EaWFnSXBlcmYzKCkKICAgIGlwZXJmMy5Ib3N0ID0gJzE6OjEnCiAgICBzZWxmLl9XYWl0VW50aWxDb21wbGV0ZWQoaXBlcmYzKQogICAgc2VsZi5hc3NlcnRFcXVhbChpcGVyZjMuRGlhZ25vc3RpY3NTdGF0ZSwgJ0NvbXBsZXRlJykKICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnMTo6MScgaW4gaXBlcmYzLlJlc3VsdCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgc2VsZi5hc3NlcnRUcnVlKCctLXZlcnNpb242JyBpbiBpcGVyZjMuUmVzdWx0KQogICAgc2VsZi5hc3NlcnRUcnVlKCdpcGVyZjM6JyBpbiBpcGVyZjMuUmVzdWx0KQoKPHxmaW1fZW5kfD4="]
["8ece11b894bf9324aa786325442c51127897fe94-4","8ece11b894bf9324aa786325442c51127897fe94","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIwojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEludmVuaW8uCiMgQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQ0VSTi4KIwojIEludmVuaW8gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAojIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2U7IHNlZSBMSUNFTlNFIGZpbGUgZm9yIG1vcmUgZGV0YWlscy4KIiIiQWRtaW4gaW50ZXJmYWNlIHRlc3RzLiIiIgo8fGZpbV9ob2xlfD4KCmZyb20gaW52ZW5pb19zaXBzdG9yZS5hZG1pbiBpbXBvcnQgcmVjb3Jkc2lwX2FkbWludmlldywgc2lwX2FkbWludmlldywgXAogICAgc2lwZmlsZV9hZG1pbnZpZXcsIHNpcG1ldGFkYXRhX2FkbWludmlldywgc2lwbWV0YWRhdGF0eXBlX2FkbWludmlldwoKCmRlZiB0ZXN0X2FkbWluKGRiLCBhcHApOgogICAgIiIiVGVzdCBmbGFzay1hZG1pbiBpbnRlcmFjZS4iIiIKICAgIGFkbWluID0gQWRtaW4oYXBwLCBuYW1lPSJBZG1pbkV4dCIpCgogICAgIyBSZWdpc3RlciBtb2RlbHMgaW4gYWRtaW4KICAgIGZvciBhZG1pbnZpZXcgaW4gKHNpcF9hZG1pbnZpZXcsIHNpcGZpbGVfYWRtaW52aWV3LCByZWNvcmRzaXBfYWRtaW52aWV3LAogICAgICAgICAgICAgICAgICAgICAgc2lwbWV0YWRhdGFfYWRtaW52aWV3LCBzaXBtZXRhZGF0YXR5cGVfYWRtaW52aWV3KToKICAgICAgICBhc3NlcnQgJ21vZGVsJyBpbiBhZG1pbnZpZXcKICAgICAgICBhc3NlcnQgJ21vZGVsdmlldycgaW4gYWRtaW52aWV3CiAgICAgICAgYWRtaW5fa3dhcmdzID0gZGljdChhZG1pbnZpZXcpCiAgICAgICAgbW9kZWwgPSBhZG1pbl9rd2FyZ3MucG9wKCdtb2RlbCcpCiAgICAgICAgbW9kZWx2aWV3ID0gYWRtaW5fa3dhcmdzLnBvcCgnbW9kZWx2aWV3JykKICAgICAgICBhZG1pbi5hZGRfdmlldyhtb2RlbHZpZXcobW9kZWwsIGRiLnNlc3Npb24sICoqYWRtaW5fa3dhcmdzKSkKCiAgICAjIENoZWNrIGlmIGdlbmVyYXRlZCBhZG1pbiBtZW51IGNvbnRhaW5zIHRoZSBjb3JyZWN0IGl0ZW1zCiAgICBtZW51X2l0ZW1zID0ge3N0cihpdGVtLm5hbWUpOiBpdGVtIGZvciBpdGVtIGluIGFkbWluLm1lbnUoKX0KCiAgICAjIFBJRFN0b3JlIHNob3VsZCBiZSBhIGNhdGVnb3J5CiAgICBhc3NlcnQgJ1JlY29yZHMnIGluIG1lbnVfaXRlbXMKICAgIGFzc2VydCBtZW51X2l0ZW1zWydSZWNvcmRzJ10uaXNfY2F0ZWdvcnkoKQogICAgYXNzZXJ0IGlzaW5zdGFuY2UobWVudV9pdGVtc1snUmVjb3JkcyddLCBtZW51Lk1lbnVDYXRlZ29yeSkKCiAgICAjIEl0ZW1zIGluIFBJRFN0b3JlIG1lbnUgc2hvdWxkIGJlIHRoZSBtb2RlbHZpZXdzCiAgICBzdWJtZW51X2l0ZW1zID0ge3N0cihpdGVtLm5hbWUpOiBpdGVtIGZvciBpdGVtIGluCiAgICAgICAgICAgICAgICAgICAgIG1lbnVfaXRlbXNbJ1JlY29yZHMnXS5nZXRfY2hpbGRyZW4oKX0KICAgIGFzc2VydCAnU0lQJyBpbiBzdWJtZW51X2l0ZW1zCiAgICBhc3NlcnQgJ1JlY29yZFNJUCcgaW4gc3VibWVudV9pdGVtcwogICAgYXNzZXJ0ICdTSVBGaWxlJyBpbiBzdWJtZW51X2l0ZW1zCiAgICBhc3NlcnQgJ1NJUE1ldGFkYXRhJyBpbiBzdWJtZW51X2l0ZW1zCiAgICBhc3NlcnQgJ1NJUE1ldGFkYXRhVHlwZScgaW4gc3VibWVudV9pdGVtcwogICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc3VibWVudV9pdGVtc1snU0lQJ10sIG1lbnUuTWVudVZpZXcpCiAgICBhc3NlcnQgaXNpbnN0YW5jZShzdWJtZW51X2l0ZW1zWydSZWNvcmRTSVAnXSwgbWVudS5NZW51VmlldykKICAgIGFzc2VydCBpc2luc3RhbmNlKHN1Ym1lbnVfaXRlbXNbJ1NJUEZpbGUnXSwgbWVudS5NZW51VmlldykKICAgIGFzc2VydCBpc2luc3RhbmNlKHN1Ym1lbnVfaXRlbXNbJ1NJUE1ldGFkYXRhJ10sIG1lbnUuTWVudVZpZXcpCiAgICBhc3NlcnQgaXNpbnN0YW5jZShzdWJtZW51X2l0ZW1zWydTSVBNZXRhZGF0YVR5cGUnXSwgbWVudS5NZW51VmlldykKPHxmaW1fc3VmZml4fD4KCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0LCBwcmludF9mdW5jdGlvbgoKZnJvbSBmbGFza19hZG1pbiBpbXBvcnQgQWRtaW4sIG1lbnUKPHxmaW1fZW5kfD4="]
["3b47cc8fa55e8ba198b99c6eab05abfe4f406f41-1","3b47cc8fa55e8ba198b99c6eab05abfe4f406f41","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCmltcG9ydCBsY20KaW1wb3J0IGRyYwpmcm9tIGRyYyBpbXBvcnQgcmVhY3RpdmVfcmVjb3ZlcnlfZGVidWdfdAppbXBvcnQgc3lzCmltcG9ydCB0aW1lCmZyb20gYm90X2xjbWdsIGltcG9ydCBsY21nbCwgR0xfTElORVMKaW1wb3J0IG51bXB5IGFzIG5wCgpkZWYgcHB2YWwoY29lZnMsIHRzLCB0KToKICB0aSA9IG5wLndoZXJlKHRzIDwgdClbLTFdCiAgaWYgKGxlbih0aSkgPj0gMSk6CiAgICB0aSA9IHRpWy0xXQogIGVsaWYgKGxlbih0aSkgPT0gMCk6CiAgICB0aSA9IDA7CiAgdF9vZmYgPSAodCAtIHRzW3RpXSk7CiAgb3V0ID0gbnAuYXJyYXkoWzAuMF0qNikKICBmb3IgaiBpbiByYW5nZSgwLCA2KToKICAgIG91dFtqXSA9IGNvZWZzW2osIHRpLCAwXSoodF9vZmYqKjMuMCkgKyBjb2Vmc1tqLCB0aSwgMV0qKHRfb2ZmKioyLjApICsgY29lZnNbaiwgdGksIDJdKnRfb2ZmICsgY29lZnNbaiwgdGksIDNdCiAgcmV0dXJuIG91dAoKZGVmIGhhbmRsZV9kZWJ1Z19tc2coY2hhbm5lbCwgZGF0YSk6CiAgbXNnID0gcmVhY3RpdmVfcmVjb3ZlcnlfZGVidWdfdC5kZWNvZGUoZGF0YSkKICBwcmludCgicmVjZWl2ZWQiKQogIGNvbSA9IG1zZy5jb207CiAgaWNwID0gbXNnLmljcDsKICAjIGRyYXcgY29tLCBpY3AKICBnbC5nbENvbG9yM2YoMC4yLDAuMiwxLjApOwogIGdsLnNwaGVyZShjb21bMF0sIGNvbVsxXSwgMCwgMC4wMSwgMjAsIDIwKTsKICBnbC5nbENvbG9yM2YoMC45LDAuMiwwLjIpOwogIGdsLnNwaGVyZShpY3BbMF0sIGljcFsxXSwgMCwgMC4wMSwgMjAsIDIwKTsKCiAgY29lZnMgPSBucC5hcnJheShtc2cuY29lZnMpCiAgdHMgPSBucC5hcnJheShtc2cudHMpCiAgaWYgdHMuc2hhcGVbMF0gPT0gMDoKICAgIGdsLnN3aXRjaF9idWZmZXIoKQogICAgcmV0dXJuCgogICMgZHJhdyBzcGxpbmUgc2VnbWVudHMKICB0c2RlbnNlID0gbnAubGluc3BhY2UodHNbMF0sIHRzWy0xXSwgMzApCiAgZ2wuZ2xDb2xvcjNmKDEuMCwgMC4yLCAwLjIpOwogIGdsLmdsTGluZVdpZHRoKDEpOwogIGdsLmdsQmVnaW4oR0xfTElORVMpOwogIHBzID0gbnAuYXJyYXkoW3BwdmFsKGNvZWZzLCBtc2cudHMsIHQpIGZvciB0IGluIHRzZGVuc2VdKTsKICBmb3IgaiBpbiByYW5nZSgwLHRzZGVuc2Uuc2l6ZS0xKToKICAgIGdsLmdsVmVydGV4M2YocHNbaiwwXSwgcHNbaiwxXSwgcHNbaiwyXSk7CiAgICBnbC5nbFZlcnRleDNmKHBzW2orMSwwXSwgcHNbaisxLDFdLCBwc1tqKzEsMl0pOwogIGdsLmdsRW5kKCk7CgogIGdsLnN3aXRjaF9idWZmZXIoKQoKCmxjID0gbGNtLkxDTSgpCmdsID0gbGNtZ2woJ3JlYWN0aXZlIHJlY292ZXJ5IGRlYnVnJywgbGMpOwpzdWJzY3JpcHRpb24gPSBsYy5zdWJzY3JpYmUoIlJFQUNUSVZFX1JFQ09WRVJZX0RFQlVHIiwgaGFuZGxlX2RlYnVnX21zZykKdHJ5OgogICAgd2hpbGUgVHJ1ZToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGxjLmhhbmRsZSgpCjx8ZmltX2VuZHw+"]
["5690a1f57fae950f69ef9ee2aeb7e94a96672469-2","5690a1f57fae950f69ef9ee2aeb7e94a96672469",{"$cut":{"chars":17892,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBtYXRoIApmcm9tIG1wLnBhdGhzIGltcG9ydCBKSVBfZGlyCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmZyb20gc2tsZWFybi5wcmVwcm9jZXNzaW5nIGltcG9ydCBTdGFuZGFyZFNjYWxlcgpmcm9tIHNrbGVhcm4uc3ZtIGltcG9ydCBTVlIKZnJvbSBza2xlYXJuLmxpbmVhcl9tb2RlbCBpbXBvcnQgUmlkZ2UKZnJvbSBza2xlYXJuLm5ldXJhbF9uZXR3b3JrIGltcG9ydCBNTFBSZWdyZXNzb3IKZnJvbSBza2xlYXJuLnN2bSBpbXBvcnQgU1ZDIApmcm9tIHNrbGVhcm4ubGluZWFyX21vZGVsIGltcG9ydCBMb2dpc3RpY1JlZ3Jlc3Npb24KZnJvbSBza2xlYXJuLm1ldHJpY3MgaW1wb3J0IGNvbmZ1c2lvbl9tYXRyaXgsIHBsb3RfY29uZnVzaW9uX21hdHJpeAoKI3NldCBlbnZpcm9ubWVudGFsIHZhcmlhYmxlcwojZm9yIGRhdGFfZGlycyBmb2xkZXIsIG5vdGhpbmcgY2hhbmdlZCBjb21wYXJlZCB0byBTaW1vbnMgdmVyc2lvbiAKb3MuZW52aXJvblsiV09SS0ZMT1dfRElSIl0gPSBvcy5wYXRoLmpvaW4oSklQX2RpciwgJ2RhdGFfZGlycycpCm9zLmVudmlyb25bIk9QRVJBVE9SX0lOX0RJUiJdID0gImlucHV0Igpvcy5lbnZpcm9uWyJPUEVSQVRPUl9PVVRfRElSIl0gPSAib3V0cHV0Igpvcy5lbnZpcm9uWyJPUEVSQVRPUl9URU1QX0RJUiJdID0gInRlbXAiCm9zLmVudmlyb25bIk9QRVJBVE9SX1BFUlNJU1RFTlRfRElSIl0gPSBvcy5wYXRoLmpvaW4oSklQX2RpciwgJ2RhdGFfZGlycycsICdwZXJzaXN0ZW50JykKCiMgcHJlcHJvY2Vzc2luZyBkaXIgYW5kIHN1YmZvbGRlcnMgCm9zLmVudmlyb25bIlBSRVBST0NFU1NFRF9XT1JLRkxPV19ESVIiXSA9IG9zLnBhdGguam9pbihKSVBfZGlyLCAncHJlcHJvY2Vzc2VkX2RpcnMnKQpvcy5lbnZpcm9uWyJQUkVQUk9DRVNTRURfT1BFUkFUT1JfT1VUX1NDQUxFRF9ESVIiXSA9ICJvdXRwdXRfc2NhbGVkIgpvcy5lbnZpcm9uWyJQUkVQUk9DRVNTRURfT1BFUkFUT1JfT1VUX1NDQUxFRF9ESVJfVFJBSU4iXSA9ICJvdXRwdXRfc2NhbGVkX3RyYWluIgoKI2RpciB3aGVyZSB0cmFpbiBkYXRhIGZvciBpbnRlbnNpdGVzIGlzIHN0b3JlZCAodGhpcyBvbmx5IG5lZWRzIHRvIGJlIHRyYWluc19kaXJzLCBidXQgc2luY2UgaSBoYXZlIG1vcmUgCiMgZGF0YXNldHMsIGFub3RoZXIgc3ViZm9sZGVyIGlzIGhlcmUpCm9zLmVudmlyb25bIlRSQUlOX1dPUktGTE9XX0RJUiJdID0gb3MucGF0aC5qb2luKEpJUF9kaXIsICd0cmFpbl9kaXJzJykKCiNpZ25vcmUKIyNiZWxvdyBpcyBmb3IgY2hyaXN0aWFuIG9ubHksIHVzZWQgZm9yIG9sZGVyIGRhdGEgc3RydWN0dXJlcyB3aGVyZSBtb2RlbHMgYXJlIHRyYWluZWQgb24Kb3MuZW52aXJvblsiVFJBSU5fV09SS0ZMT1dfRElSX0dUIl0gPSBvcy5wYXRoLmpvaW4oJ0NvdmlkLVJBQ09PTicsJ0FsbCBpbWFnZXMgYW5kIGxhYmVscycpCm9zLmVudmlyb25bIlRSQUlOX1dPUktGTE9XX0RJUl9QUkVEIl0gPSBvcy5wYXRoLmpvaW4oJ0NvdmlkLVJBQ09PTicsJ0FsbCBwcmVkaWN0aW9ucycpCiNvcy5lbnZpcm9uWyJUUkFJTl9XT1JLRkxPV19ESVJfR1QiXSA9IG9zLnBhdGguam9pbignZ3Rfc21hbGwnKQojb3MuZW52aXJvblsiVFJBSU5fV09SS0ZMT1dfRElSX1BSRUQiXSA9IG9zLnBhdGguam9pbigncHJlZF9zbWFsbCcpCgojd2hpY2ggbW9kZSBpcyBhY3RpdmUgZWl0aGVyICd0cmFpbicgb3IgJ2luZmVyZW5jZScgCm9zLmVudmlyb25bIklORkVSRU5DRV9PUl9UUkFJTiJdID0gJ3RyYWluJwoKI2lnbm9yZQojIHRoZSBlbmRpbmcgb2YgdGhlIGltYWdlIGZpbGVzIGluIHRyYWluX2RpciBpcyBvbmx5IGZvciBvbGRlciBkYXRhc2V0cwpvcy5lbnZpcm9uWyJJTlBVVF9GSUxFX0VORElORyJdID0gJ25paS5neicKCmZyb20gbXAudXRpbHMucHJlcHJvY2Vzc191dGlsaXR5X2Z1bmN0aW9ucyBpbXBvcnQgYmFzaWNfcHJlcHJvY2Vzc2luZwpmcm9tIG1wLnV0aWxzLnByZXByb2Nlc3NfdXRpbGl0eV9mdW5jdGlvbnMgaW1wb3J0IGV4dHJhY3RfZmVhdHVyZXNfYWxsX2RhdGEsY29tcHV0ZV9hbGxfcHJlZGljdGlvbl9kaWNlX3Njb3Jlcwpmcm9tIG1wLnV0aWxzLmZlYXR1cmVfZXh0cmFjdG9yIGltcG9ydCBGZWF0dXJlX2V4dHJhY3RvcgoKIyBhbGwgc3RlcHMgaW4gMS4gYXJlIG5vdCB1c2VkIGFueW1vcmUKIyMgMi4gZnVuY3Rpb24gdG8gc3BsaXQgZGF0YSBpbnRvIHNwbGl0cyBkZXBlbmRpbmcgb24gdGFzawojIDIuMSAoU0VUIHNwbGl0cyBmb3IgdHJhaW5pbmcgYW5kIGV2YWwpIHNldCB0aGUgZmlsdGVyIGZ1bmN0aW9uLCBzdWNoIHRoYXQgdGhlIHNwbGl0cyBhcmUgYXMgd2FudGVkIApkZWYgZmlsdGVyX2ZlYXR1cmVfZXh0cihpZCxtb2RlbCk6CiAgICAnJydmdW5jdGlvbiB0byBkZWNpZGUgd2hpY2ggc3BsaXQgYSBwcmVkaWN0aW9uIHNob3VsZCBiZSBwdXQgaW4uCiAgICBJcyBpbmZlcmVkIGZyb20gdGhlIGlkKGdpdmluZyB0aGUgZGF0YXNldCBvZiB0aGUgaW1hZ2UpIGFuZCBtb2RlbAogICAgKHRoZSBkYXRhc2V0IHRoZSBwcmVkaWN0aW5nIG1vZGVsIHdhcyB0cmFpbmVkIG9uKQogICAgQXJnczoKICAgICAgICBpZChzdHIpOmdpdmluZyB0aGUgZGF0YXNldCBvZiB0aGUgaW1hZ2UKICAgICAgICBtb2RlbChzdHIpOnRoZSBkYXRhc2V0IHRoZSBwcmVkaWN0aW5nIG1vZGVsIHdhcyB0cmFpbmVkIG9uCgogICAgUmV0dXJucyhzdHIpOnRoZSBzcGxpdCBmb3IgdGhlIHBhaXIgb2YgaWQgYW5kIG1vZGVsLCBjYW4gYmUgb3RoZXIsIHdoaWNoIGNhbiBiZSAKICAgICAgICBjYXRlZ29yeSBvZiB1bnVzZWQgZGF0YScnJwogICAgIyAjIHRyYWluIGRhdGEgCiAgICAjIGlmIG1vZGVsWzo3XSBpbiBbJ1Rhc2s3NDAnXSBhbmQgaWRbOjddIGluIFsnVGFzazc0MCcsJ1Rhc2s1NDEnXToKICAgICMgICAgIHJldHVybiAndHJhaW4nCiAgICAjICMgaWQgZGF0YQogICAgIyBpZiBtb2RlbFs6N10gaW4gWydUYXNrNzQwJ10gYW5kIGlkWzo3XSBpbiBbJ1Rhc2s3NDEnXToKICAgICMgICAgIHJldHVybiAnaWRfY2hhbGxlbmdlJwogICAgIyBpZiBt"}}]
["795d7fb959334548562d8e26dd73efbc4949813d-2","795d7fb959334548562d8e26dd73efbc4949813d","PHxmaW1fcHJlZml4fD4KZnJvbSBlbW9qaXNlYXJjaC5jcmVhdGVfd2hvb3NoX2luZGV4IGltcG9ydCBjcmVhdGVfaW5kZXhlcwpmcm9tIGVtb2ppc2VhcmNoLnBhdGhzIGltcG9ydCBJTkRFWF9ESVIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIGVtb2ppc2VhcmNoLnBhdGhzIGltcG9ydCBJTkRFWF9ESVJfRkFMTEJBQ0sKaW1wb3J0IG9zCgoKPHxmaW1fZW5kfD4="]
["8ee384bc9cdd7f2dd8ed323ded8c9d417b085844-2","8ee384bc9cdd7f2dd8ed323ded8c9d417b085844","PHxmaW1fcHJlZml4fD4KIwojIENvcHlyaWdodCAoYykgMjAxNS0yMDIwIFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgojCiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKIwppbXBvcnQgc2l4CmltcG9ydCB1dWlkCgpmcm9tIG5mdl9jb21tb24gaW1wb3J0IGNvbmZpZwpmcm9tIG5mdl9jb21tb24gaW1wb3J0IGRlYnVnCmZyb20gbmZ2X2NvbW1vbiBpbXBvcnQgc2NoZWR1bGUKCmZyb20gbmZ2X2NvbW1vbi5oZWxwZXJzIGltcG9ydCBTaW5nbGV0b24KCmZyb20gbmZ2X3ZpbSBpbXBvcnQgb2JqZWN0cwpmcm9tIG5mdl92aW0gaW1wb3J0IHN0cmF0ZWd5CgpETE9HID0gZGVidWcuZGVidWdfZ2V0X2xvZ2dlcignbmZ2X3ZpbS5zd19tZ210X2RpcmVjdG9yJykKCl9zd19tZ210X2RpcmVjdG9yID0gTm9uZQoKCkBzaXguYWRkX21ldGFjbGFzcyhTaW5nbGV0b24pCmNsYXNzIFN3TWdtdERpcmVjdG9yKG9iamVjdCk6CiAgICAiIiIKICAgIFNvZnR3YXJlIE1hbmFnZW1lbnQgRGlyZWN0b3IKICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHN3X3VwZGF0ZSwKICAgICAgICAgICAgICAgICBpZ25vcmVfYWxhcm1zLCBzaW5nbGVfY29udHJvbGxlcik6CiAgICAgICAgc2VsZi5fc3dfdXBkYXRlID0gc3dfdXBkYXRlCiAgICAgICAgc2VsZi5faWdub3JlX2FsYXJtcyA9IGlnbm9yZV9hbGFybXMKICAgICAgICBzZWxmLl9zaW5nbGVfY29udHJvbGxlciA9IHNpbmdsZV9jb250cm9sbGVyCgogICAgQHByb3BlcnR5CiAgICBkZWYgc3dfdXBkYXRlKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFJldHVybnMgdGhlIGN1cnJlbnQgc29mdHdhcmUgdXBkYXRlCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuX3N3X3VwZGF0ZQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIHNpbmdsZV9jb250cm9sbGVyKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFJldHVybnMgd2hldGhlciB0aGlzIGlzIGEgc2luZ2xlIGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbgogICAgICAgICIiIgogICAgICAgIHJldHVybiBzZWxmLl9zaW5nbGVfY29udHJvbGxlcgoKICAgIGRlZiBjcmVhdGVfc3dfcGF0Y2hfc3RyYXRlZ3koc2VsZiwgY29udHJvbGxlcl9hcHBseV90eXBlLCBzdG9yYWdlX2FwcGx5X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aWZ0X2FwcGx5X3R5cGUsIHdvcmtlcl9hcHBseV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGFyYWxsZWxfd29ya2VyX2hvc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X2luc3RhbmNlX2FjdGlvbiwgYWxhcm1fcmVzdHJpY3Rpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayk6CiAgICAgICAgIiIiCiAgICAgICAgQ3JlYXRlIFNvZnR3YXJlIFBhdGNoIFN0cmF0ZWd5CiAgICAgICAgIiIiCiAgICAgICAgc3RyYXRlZ3lfdXVpZCA9IHN0cih1dWlkLnV1aWQ0KCkpCgogICAgICAgIGlmIHNlbGYuX3N3X3VwZGF0ZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIyBEbyBub3Qgc2NoZWR1bGUgdGhlIGNhbGxiYWNrIC0gaWYgY3JlYXRpb24gZmFpbGVkIGJlY2F1c2UgYQogICAgICAgICAgICAjIHN0cmF0ZWd5IGFscmVhZHkgZXhpc3RzLCB0aGUgY2FsbGJhY2sgd2lsbCBhdHRlbXB0IHRvIG9wZXJhdGUKICAgICAgICAgICAgIyBvbiB0aGUgb2xkIHN0cmF0ZWd5LCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50LgogICAgICAgICAgICByZWFzb24gPSAic3RyYXRlZ3kgYWxyZWFkeSBleGlzdHMiCiAgICAgICAgICAgIHJldHVybiBOb25lLCByZWFzb24KCiAgICAgICAgc2VsZi5fc3dfdXBkYXRlID0gb2JqZWN0cy5Td1BhdGNoKCkKICAgICAgICBzdWNjZXNzLCByZWFzb24gPSBzZWxmLl9zd191cGRhdGUuc3RyYXRlZ3lfYnVpbGQoCiAgICAgICAgICAgIHN0cmF0ZWd5X3V1aWQsIGNvbnRyb2xsZXJfYXBwbHlfdHlwZSwKICAgICAgICAgICAgc3RvcmFnZV9hcHBseV90eXBlLCBzd2lmdF9hcHBseV90eXBlLAogICAgICAgICAgICB3b3JrZXJfYXBwbHlfdHlwZSwgbWF4X3BhcmFsbGVsX3dvcmtlcl9ob3N0cywKICAgICAgICAgICAgZGVmYXVsdF9pbnN0YW5jZV9hY3Rpb24sIGFsYXJtX3Jlc3RyaWN0aW9ucywKICAgICAgICAgICAgc2VsZi5faWdub3JlX2FsYXJtcywgc2VsZi5fc2luZ2xlX2NvbnRyb2xsZXIpCgogICAgICAgIHNjaGVkdWxlLnNjaGVkdWxlX2Z1bmN0aW9uX2NhbGwoY2FsbGJhY2ssIHN1Y2Nlc3MsIHJlYXNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N3X3VwZGF0ZS5zdHJhdGVneSkKICAgICAgICByZXR1cm4gc3RyYXRlZ3lfdXVpZCwgJycKCiAgICBkZWYgY3JlYXRlX3N3X3VwZ3JhZGVfc3RyYXRlZ3koc2VsZiwgc3RvcmFnZV9hcHBseV90eXBlLCB3b3JrZXJfYXBwbHlfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGFyYWxsZWxfd29ya2VyX2hvc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsYXJtX3Jlc3RyaWN0aW9ucywgc3RhcnRfdXBncmFkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZV91cGdyYWRlLCBjYWxsYmFjayk6CiAgICAgICAgIiIiCiAgICAgICAgQ3JlYXRlIFNvZnR3YXJlIFVwZ3JhZGUgU3RyYXRlZ3kKICAgICAgICAiIiIKICAgICAgICBzdHJhdGVneV91dWlkID0gc3RyKHV1aWQudXVpZDQoKSkKCiAgICAgICAgaWYgc2VsZi5fc3dfdXBkYXRlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAjIERvIG5vdCBzY2hlZHVsZSB0aGUgY2FsbGJhY2sgLSBpZiBjcmVhdGlvbiBmYWlsZWQgYmVjYXVzZSBhCiAgICAgICAgICAgICMgc3RyYXRlZ3kgYWxyZWFkeSBleGlzdHMsIHRoZSBjYWxsYmFjayB3aWxsIGF0dGVtcHQgdG8gb3BlcmF0ZQogICAgICAgICAgICAjIG9uIHRoZSBvbGQgc3RyYXRlZ3ksIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQuCiAgICAgICAgICAgIHJlYXNvbiA9ICJzdHJhdGVneSBhbHJlYWR5IGV4aXN0cyIKICAgICAgICAgICAgcmV0dXJuIE5vbmUsIHJlYXNvbgoKICAgICAgICBzZWxmLl9zd191cGRhdGUgPSBvYmplY3RzLlN3VXBncmFkZSgpCiAgICAgICAgc3VjY2VzcywgcmVhc29uID0gc2VsZi5fc3dfdXBkYXRlLnN0cmF0ZWd5X2J1aWxkKAogICAgICAgICAgICBzdHJhdGVneV91dWlkLCBzdG9yYWdlX2FwcGx5X3R5cGUsCiAgICAgICAgICAgIHdvcmtlcl9hcHBseV90eXBlLCBtYXhfcGFyYWxsZWxfd29ya2VyX2hvc3RzLAogICAgICAgICAgICBhbGFybV9yZXN0cmljdGlvbnMsIHN0YXJ0X3VwZ3JhZGUsCiAgICAgICAgICAgIGNvbXBsZXRlX3VwZ3JhZGUsIHNlbGYuX2lnbm9yZV9hbGFybXMpCgogICAgICAgIHNjaGVkdWxlLnNjaGVkdWxlX2Z1bmN0aW9uX2NhbGwoY2FsbGJhY2ssIHN1Y2Nlc3MsIHJlYXNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N3X3VwZGF0ZS5zdHJhdGVneSkKICAgICAgICByZXR1cm4gc3RyYXRlZ3lfdXVpZCwgJycKCiAgICBkZWYgY3JlYXRlX2Z3X3VwZGF0ZV9zdHJhdGVneShzZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlcl9hcHBseV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZV9hcHBseV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyX2FwcGx5X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGFyYWxsZWxfd29ya2VyX2hvc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9pbnN0YW5jZV9hY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGFybV9yZXN0cmljdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayk6CiAgICAgICAgIiIiCiAgICAgICAgQ3JlYXRlIEZpcm13YXJlIFVwZGF0ZSBTdHJhdGVneQogICAgICAgICIiIgogICAgICAgIHN0cmF0ZWd5X3V1aWQgPSBzdHIodXVpZC51dWlkNCgpKQoKICAgICAgICBpZiBzZWxmLl9zd191cGRhdGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICMgRG8gbm90IHNjaGVkdWxlIHRoZSBjYWxsYmFjayAtIGlmIGNyZWF0aW9uIGZhaWxlZCBiZWNhdXNlIGEKICAgICAgICAgICAgIyBzdHJhdGVneSBhbHJlYWR5IGV4aXN0cywgdGhlIGNhbGxiYWNrIHdpbGwgYXR0ZW1wdCB0byBvcGVyYXRlCiAgICAgICAgICAgICMgb24gdGhlIG9sZCBzdHJhdGVneSwgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudC4KICAgICAgICAgICAgcmVhc29uID0gInN0cmF0ZWd5IGFscmVhZHkgZXhpc3RzIgogICAgICAgICAgICByZXR1cm4gTm9uZSwgcmVhc29uCgogICAgICAgIHNlbGYuX3N3X3VwZGF0ZSA9IG9iamVjdHMuRndVcGRhdGUoKQogICAgICAgIHN1Y2Nlc3MsIHJlYXNvbiA9IHNlbGYuX3N3X3VwZGF0ZS5zdHJhdGVneV9idWlsZCgKICAgICAgICAgICAgc3RyYXRlZ3lfdXVpZCwgY29udHJvbGxlcl9hcHBseV90eXBlLAogICAgICAgICAgICBzdG9yYWdlX2FwcGx5X3R5cGUsCiAgICAgICAgICAgIHdvcmtlcl9hcHBseV90eXBlLCBtYXhfcGFyYWxsZWxfd29ya2VyX2hvc3RzLAogICAgICAgICAgICBkZWZhdWx0X2luc3RhbmNlX2FjdGlvbiwgYWxhcm1fcmVzdHJpY3Rpb25zLAogICAgICAgICAgICBzZWxmLl9pZ25vcmVfYWxhcm1zLCBzZWxmLl9zaW5nbGVfY29udHJvbGxlcikKCiAgICAgICAgc2NoZWR1bGUuc2NoZWR1bGVfZnVuY3Rpb25fY2FsbChjYWxsYmFjaywgc3VjY2VzcywgcmVhc29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3dfdXBkYXRlLnN0cmF0ZWd5KQogICAgICAgIHJldHVybiBzdHJhdGVneV91dWlkLCAnJwoKICAgIGRlZiBhcHBseV9zd191cGRhdGVfc3RyYXRlZ3koc2VsZiwgc3RyYXRlZ3lfdXVpZCwgc3RhZ2VfaWQsIGNhbGxiYWNrKToKICAgICAgICAiIiIKICAgICAgICBBcHBseSBTb2Z0d2FyZSBVcGRhdGUgU3RyYXRlZ3kKICAgICAgICAiIiIKICAgICAgICBzdWNjZXNzLCByZWFzb24gPSBzZWxmLl9zd191cGRhdGUuc3RyYXRlZ3lfYXBwbHkoc3RyYXRlZ3lfdXVpZCwgc3RhZ2VfaWQpCiAgICAgICAgc2NoZWR1bGUuc2NoZWR1bGVfZnVuY3Rpb25fY2FsbChjYWxsYmFjaywgc3VjY2VzcywgcmVhc29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3dfdXBkYXRlLnN0cmF0ZWd5KQogICAgICAgIHJldHVybgoKICAgIGRlZiBhYm9ydF9zd191cGRhdGVfc3RyYXRlZ3koc2VsZiwgc3RyYXRlZ3lfdXVpZCwgc3RhZ2VfaWQsIGNhbGxiYWNrKToKICAgICAgICAiIiIKICAgICAgICBBYm9ydCBTb2Z0d2FyZSBVcGRhdGUgU3RyYXRlZ3kKICAgICAgICAiIiIKICAgICAgICBzdWNjZXNzLCByZWFzb24gPSBzZWxmLl9zd191cGRhdGUuc3RyYXRlZ3lfYWJvcnQoc3RyYXRlZ3lfdXVpZCwgc3RhZ2VfaWQpCiAgICAgICAgc2NoZWR1bGUuc2NoZWR1bGVfZnVuY3Rpb25fY2FsbChjYWxsYmFjaywgc3VjY2VzcywgcmVhc29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3dfdXBkYXRlLnN0cmF0ZWd5KQogICAgICAgIHJldHVybgoKICAgIGRlZiBkZWxldGVfc3dfdXBkYXRlX3N0cmF0ZWd5KHNlbGYsIHN0cmF0ZWd5X3V1aWQsIGZvcmNlLCBjYWxsYmFjayk6CiAgICAgICAgIiIiCiAgICAgICAgRGVsZXRlIFNvZnR3YXJlIFVwZGF0ZSBTdHJhdGVneQogICAgICAgICIiIgogICAgICAgIHN1Y2Nlc3MsIHJlYXNvbiA9IHNlbGYuX3N3X3VwZGF0ZS5zdHJhdGVneV9kZWxldGUoc3RyYXRlZ3lfdXVpZCwgZm9yY2UpCiAgICAgICAgaWYgc3VjY2VzczoKICAgICAgICAgICAgc2VsZi5fc3dfdXBkYXRlLnJlbW92ZSgpCiAgICAgICAgICAgIGRlbCBzZWxmLl9zd191cGRhdGUKICAgICAgICAgICAgc2VsZi5fc3dfdXBkYXRlID0gTm9uZQogICAgICAgIHNjaGVkdWxlLnNjaGVkdWxlX2Z1bmN0aW9uX2NhbGwoY2FsbGJhY2ssIHN1Y2Nlc3MsIHJlYXNvbiwgc3RyYXRlZ3lfdXVpZCkKICAgICAgICByZXR1cm4KCiAgICBkZWYgZ2V0X3N3X3VwZGF0ZV9zdHJhdGVneShzZWxmLCBzd191cGRhdGVfdHlwZSk6CiAgICAgICAgIiIiCiAgICAgICAgR2V0IFNvZnR3YXJlIFVwZGF0ZSBTdHJhdGVneQogICAgICAgICIiIgogICAgICAgIGlmIHNlbGYuX3N3X3VwZGF0ZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgaWYgc2VsZi5fc3dfdXBkYXRlLnN3X3VwZGF0ZV90eXBlID09IHN3X3VwZGF0ZV90eXBlOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3dfdXBkYXRlLnN0cmF0ZWd5Cjx8ZmltX2VuZHw+"]
["56a6a3b514711c3cf9a69e1d8c4d8e5211065d2d-2","56a6a3b514711c3cf9a69e1d8c4d8e5211065d2d","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBzeXMKCiMgR2V0IGN1cnJlbnQgc2NyaXB0IGRpcmVjdG9yeQpzY3JpcHRfZGlyID0gc3lzLnBhdGhbMF0KCmRlZiBwbG90RmlsZShmKToKICAgIGRhdGEgPSBucC5sb2FkdHh0KGYsIGRlbGltaXRlcj0nLCcsIHNraXByb3dzPTEpCgogICAgIyBTb3J0IGJ5IHRpbWUgY29sdW1uCiAgICBwcmludCgiU29ydGluZyBieSB0aW1lLi4uIikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGF0YSA9IGRhdGFbZGF0YVs6LDBdLmFyZ3NvcnQoKV0KCiAgICAjIFBsb3QgUG9zaXRpb24gYW5kIEZvcmNlIERhdGEKICAgIHRpbWUgPSBkYXRhWzosIDBdCjx8ZmltX2VuZHw+"]
["7035bc693dcc928e7c8fbca8a151d1efba772fa2-2","7035bc693dcc928e7c8fbca8a151d1efba772fa2","PHxmaW1fcHJlZml4fD4KI01pc3Npb24gMQogICAgI1EzCiAgICBpbXBvcnQgbWF0aAogICAgI2lucHV0CiAgICByID0gZmxvYXQoaW5wdXQoJ3I6ICcpKQoKICAgICNwcm9jZXNzaW5nCiAgICBBID0gbWF0aC5waSAqIChyICogcikKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICNvdXRwdXQKICAgIHByaW50KCJBcmVhOiAiLCBzdHIoQSkpCjx8ZmltX2VuZHw+"]
["8ead21d5ddb0702bc300a6505b50816b9fd63d29-2","8ead21d5ddb0702bc300a6505b50816b9fd63d29","PHxmaW1fcHJlZml4fD4KIyBmcm9tIHJlc291cmNlLm1vZGVscyBpbXBvcnQgZGIKIyBpbXBvcnQgcHl0ZXN0CiMgaW1wb3J0IGpzb24KIwojCiMgIyBUT0RPOiDmt7vliqDms6jph4oKIyBAcHl0ZXN0Lm1hcmsuZmlsdGVyd2FybmluZ3MoImlnbm9yZTo6RGVwcmVjYXRpb25XYXJuaW5nIikKIyBkZWYgdGVzdF9jcmVhdGVfdXNlcihjbGllbnQpOgojICAgICAiIiIKIyAgICAg5Yib5bu65Lik5Liq5rWL6K+V55So5oi3CiMgICAgIDpwYXJhbSBjbGllbnQ6CiMgICAgIDpyZXR1cm46CiMgICAgICIiIgojICAgICByZXMgPSBjbGllbnQucG9zdCgnL2dyYXBocWwnLCBqc29uPWRpY3QoCiMgICAgICAgICBxdWVyeT0iIiIKIyAgICAgbXV0YXRpb24gdGVzdFVzZXIgewojICAgICAgIGNyZWF0ZVVzZXIoCiMgICAgICAgICBpZFRhZzogIjEyMzQ1NiIsCiMgICAgICAgICBuYW1lOiAi5rWL6K+V55So5oi3IgojICAgICAgICkgewojICAgICAgICAgdXNlciB7CiMgICAgICAgICAgIG5hbWUKIyAgICAgICAgIH0KIyAgICAgICAgIG9rCiMgICAgICAgICBtZXNzYWdlCiMgICAgICAgfQojICAgICB9IiIiLAojICAgICAgICAgdmFyaWFibGVzPXt9KSkKIyAgICAgcmVzID0gcmVzLmdldF9qc29uKCkKIyAgICAgYXNzZXJ0IHJlc1snZGF0YSddWydjcmVhdGVVc2VyJ11bJ29rJ10KIyAgICAgcmVzID0gY2xpZW50LnBvc3QoJy9ncmFwaHFsJywganNvbj1kaWN0KAojICAgICAgICAgcXVlcnk9IiIiCiMgICAgIG11dGF0aW9uIHRlc3RVc2VyIHsKIyAgICAgICBjcmVhdGVVc2VyKAojICAgICAgICAgaWRUYWc6ICIxMjM0NTciLAojICAgICAgICAgbmFtZTogIua1i+ivleeUqOaItzIiCiMgICAgICAgKSB7CiMgICAgICAgICB1c2VyIHsKIyAgICAgICAgICAgbmFtZQojICAgICAgICAgfQojICAgICAgICAgb2sKIyAgICAgICAgIG1lc3NhZ2UKIyAgICAgICB9CiMgICAgIH0iIiIsCiMgICAgICAgICB2YXJpYWJsZXM9e30pKQojICAgICByZXMgPSByZXMuZ2V0X2pzb24oKQojICAgICBhc3NlcnQgcmVzWydkYXRhJ11bJ2NyZWF0ZVVzZXInXVsnb2snXQojCiMKIyBAcHl0ZXN0Lm1hcmsuZmlsdGVyd2FybmluZ3MoImlnbm9yZTo6RGVwcmVjYXRpb25XYXJuaW5nIikKIyBkZWYgdGVzdF9jcmVhdGVfZXZlbnQoY2xpZW50KToKIyAgICAgd2l0aCBvcGVuKCJ0ZXN0cy90ZXN0X2Zvcm0uanNvbiIsIGVuY29kaW5nPSd1dGY4JykgYXMgZjoKIyAgICAgICAgIGZvcm0gPSBqc29uLmxvYWRzKGYucmVhZCgpKQojICAgICAgICAgZm9ybSA9IGpzb24uZHVtcHMoZm9ybSkucmVwbGFjZSgiXCIiLCAiXFxcIiIpCiMgICAgIHJlcyA9IGNsaWVudC5wb3N0KCcvZ3JhcGhxbCcsIGpzb249ZGljdCgKIyAgICAgICAgIHF1ZXJ5PSIiIgojICAgICBtdXRhdGlvbiB0ZXN0RXZlbnQgewojICAgICAgIGNyZWF0ZUV2ZW50KAojICAgICAgICAgbmFtZTogIua1i+ivlea0u+WKqCIsCiMgICAgICAgICBkZXRhaWw6ICLmtYvor5XmlbDmja4iLAojICAgICAgICAgZGVhZGxpbmU6ICIyMDA0LTA1LTAzVDE3OjMwOjA4KzA4OjAwIiwKIyAgICAgICAgIGNyZWF0b3JJZDogMSwKIyAgICAgICAgIGZvcm06ICIlcyIsCiMgICAgICAgICBzdGFydFRpbWU6ICIyMDA0LTA1LTAzVDE3OjMwOjA4KzA4OjAwIgojICAgICAgICkgewojICAgICAgICAgb2sKIyAgICAgICAgIGV2ZW50IHsKIyAgICAgICAgICAgY3JlYXRvciB7CiMgICAgICAgICAgICAgbmFtZQojICAgICAgICAgICB9CiMgICAgICAgICB9CiMgICAgICAgfQojICAgICB9CiMgICAgICIiIiAlIGZvcm0sCiMgICAgICAgICB2YXJpYWJsZXM9e30pKQojICAgICByZXMgPSByZXMuZ2V0X2pzb24oKQojICAgICBhc3NlcnQgcmVzWydkYXRhJ11bJ2NyZWF0ZUV2ZW50J11bJ29rJ10KIyAgICAgYXNzZXJ0IHJlc1snZGF0YSddWydjcmVhdGVFdmVudCddWydldmVudCddWydjcmVhdG9yJ11bJ25hbWUnXSA9PSAn5rWL6K+V55So5oi3JwojICAgICByZXMgPSBjbGllbnQucG9zdCgnL2dyYXBocWwnLCBqc29uPWRpY3QoCiMgICAgICAgICBxdWVyeT0iIiIKIyAgICAgbXV0YXRpb24gdGVzdEV2ZW50IHsKIyAgICAgICBjcmVhdGVFdmVudCgKIyAgICAgICAgIG5hbWU6ICLmtYvor5XmtLvliqgyIiwKIyAgICAgICAgIGRldGFpbDogIua1i+ivleaVsOaNriIsCiMgICAgICAgICBkZWFkbGluZTogIjIwMDgtMDEtMDFUMTc6MzA6MDgrMDg6MDAiLAojICAgICAgICAgY3JlYXRvcklkOiAyLAojICAgICAgICAgZm9ybTogIiVzIiwKIyAgICAgICAgIHN0YXJ0VGltZTogIjIwMDQtMDUtMDNUMTc6MzA6MDgrMDg6MDAiCiMgICAgICAgKSB7CiMgICAgICAgICBvawojICAgICAgICAgZXZlbnQgewojICAgICAgICAgICBjcmVhdG9yIHsKIyAgICAgICAgICAgICBuYW1lCiMgICAgICAgICAgIH0KIyAgICAgICAgIH0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojICAgICAgIH0KIyAgICAgfQojICAgICAiIiIgJSBmb3JtLAojICAgICAgICAgdmFyaWFibGVzPXt9KSkKPHxmaW1fZW5kfD4="]
["79527d4d34dca82441d22ab61590c529661f0521-1","79527d4d34dca82441d22ab61590c529661f0521","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdApmcm9tIHNlbGVuaXVtLmNvbW1vbi5leGNlcHRpb25zIGltcG9ydCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uCmZyb20gc2VsZW5pdW0ud2ViZHJpdmVyLnN1cHBvcnQgaW1wb3J0IGV4cGVjdGVkX2NvbmRpdGlvbnMgYXMgRUMKZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIuc3VwcG9ydC53YWl0IGltcG9ydCBXZWJEcml2ZXJXYWl0Cgpmcm9tIHRlc3RzLmZ1bmN0aW9uYWwucGFnZXMgaW1wb3J0IFRhc2szMTBQYWdlCmZyb20gdGVzdHMuZnVuY3Rpb25hbC51dGlscyBpbXBvcnQgc2NyZWVuc2hvdF9vbl9mYWlsdXJlCgoKQHB5dGVzdC5maXh0dXJlKHNjb3BlPSJzZXNzaW9uIikKZGVmIHRhc2tfdXJsKHNlcnZpY2VfdXJsKSAtPiBzdHI6CiAgICByZXN1bHQgPSBmIntzZXJ2aWNlX3VybH0vdGFza3MvMzEwLyIKICAgIHlpZWxkIHJlc3VsdAoKCkBweXRlc3QubWFyay5mdW5jdGlvbmFsCkBzY3JlZW5zaG90X29uX2ZhaWx1cmUKZGVmIHRlc3QoYnJvd3NlciwgcmVxdWVzdCwgdGFza191cmwpOgogICAgcGFnZSA9IFRhc2szMTBQYWdlKGJyb3dzZXIsIHRhc2tfdXJsKQoKICAgIGFzc2VydCBwYWdlLmhlYWRpbmcudGFnX25hbWUgPT0gImgxIgogICAgYXNzZXJ0IHBhZ2UuaGVhZGluZy50ZXh0ID09ICLQl9Cw0LTQsNC90LjQtSAzLjEwIgogICAgYXNzZXJ0IHBhZ2UubW9uZXkudGFnX25hbWUgPT0gImlucHV0IgogICAgYXNzZXJ0IG5vdCBwYWdlLm1vbmV5LnRleHQKICAgIGFzc2VydCBwYWdlLnN1Ym1pdC50YWdfbmFtZSA9PSAiYnV0dG9uIgogICAgd2l0aCBweXRlc3QucmFpc2VzKE5vU3VjaEVsZW1lbnRFeGNlcHRpb24pOgogICAgICAgIGFzc2VydCBwYWdlLnJlc3VsdDEudGFnX25hbWUKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhOb1N1Y2hFbGVtZW50RXhjZXB0aW9uKToKICAgICAgICBhc3NlcnQgcGFnZS5yZXN1bHQyLnRhZ19uYW1lCgogICAgdmVyaWZ5X3Jlc3VsdChwYWdlLCB0YXNrX3VybCwgIiIpCiAgICB2ZXJpZnlfcmVzdWx0KAogICAgICAgIHBhZ2UsCiAgICAgICAgdGFza191cmwsCiAgICAgICAgIjEiLAogICAgICAgICIxINGA0YPQsdC70YwiLAogICAgICAgICIxINGA0YPQsdC70YwgXE57RklSU1QgUExBQ0UgTUVEQUx9IMOXIDEiLAogICAgKQogICAgdmVyaWZ5X3Jlc3VsdCgKICAgICAgICBwYWdlLAogICAgICAgIHRhc2tfdXJsLAogICAgICAgICIxMSIsCiAgICAgICAgIjExINGA0YPQsdC70LXQuSIsCiAgICAgICAgKAogICAgICAgICAgICAiMTAg0YDRg9Cx0LvQtdC5IFxOe0JBTktOT1RFIFdJVEggRE9MTEFSIFNJR059IMOXIDFcbiIKICAgICAgICAgICAgIjEg0YDRg9Cx0LvRjCBcTntGSVJTVCBQTEFDRSBNRURBTH0gw5cgMSIKICAgICAgICApLAogICAgKQoKCmRlZiB2ZXJpZnlfcmVzdWx0KAogICAgcGFnZTogVGFzazMxMFBhZ2UsCiAgICB0YXNrX3VybDogc3RyLAogICAgbW9uZXk6IHN0ciwKICAgIHJlc3VsdDE6IHN0ciA9ICIiLAogICAgcmVzdWx0Mjogc3RyID0gIiIsCikgLT4gTm9uZToKICAgIHBhZ2UubW9uZXkuY2xlYXIoKQogICAgaWYgbW9uZXk6CiAgICAgICAgcGFnZS5tb25leS5zZW5kX2tleXMobW9uZXkpCiAgICBwYWdlLnN1Ym1pdC5jbGljaygpCiAgICBXZWJEcml2ZXJXYWl0KHBhZ2UuYnJvd3NlciwgdGltZW91dD00KS51bnRpbCgKICAgICAgICBFQy51cmxfdG9fYmUodGFza191cmwpLAogICAgICAgIGYibm8gcGFnZSByZWxvYWQiLAogICAgKQoKICAgIGlmIG5vdCBtb25leToKICAgICAgICB3aXRoIHB5dGVzdC5yYWlzZXMoTm9TdWNoRWxlbWVudEV4Y2VwdGlvbik6CiAgICAgICAgICAgIGFzc2VydCBwYWdlLnJlc3VsdDEudGFnX25hbWUKICAgICAgICB3aXRoIHB5dGVzdC5yYWlzZXMoTm9TdWNoRWxlbWVudEV4Y2VwdGlvbik6CiAgICAgICAgICAgIGFzc2VydCBwYWdlLnJlc3VsdDIudGFnX25hbWUKICAgICAgICByZXR1cm4KCiAgICBhc3NlcnQgcGFnZS5yZXN1bHQxLnRhZ19uYW1lID09ICJzcGFuIgogICAgYXNzZXJ0IHBhZ2UucmVzdWx0MS50ZXh0ID09IHJlc3VsdDEsIGYicmVzdWx0MSBtaXNtYXRjaCBmb3I6IHttb25leSFyfSIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGFzc2VydCBwYWdlLnJlc3VsdDIudGFnX25hbWUgPT0gInByZSIKICAgIGFzc2VydCBwYWdlLnJlc3VsdDIudGV4dCA9PSByZXN1bHQyLCBmInJlc3VsdDIgbWlzbWF0Y2ggZm9yOiB7bW9uZXkhcn0iCjx8ZmltX2VuZHw+"]
["74e4489b5a0221316ba1df9be52f2bd764743d2e-1","74e4489b5a0221316ba1df9be52f2bd764743d2e","PHxmaW1fcHJlZml4fD4KZnJvbSAuYWxwc1N0ZXAgaW1wb3J0IEFwcnVuU3RlcApmcm9tIC5jb2JhbHRTdGVwIGltcG9ydCBDb2JhbHRCYXRjaFN0ZXAKZnJvbSAubG9jYWxTdGVwIGltcG9ydCBMb2NhbFN0ZXAKZnJvbSAubXBpcnVuU3RlcCBpbXBvcnQgTXBpcnVuU3RlcAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gLnBic1N0ZXAgaW1wb3J0IFFzdWJCYXRjaFN0ZXAKZnJvbSAuc2x1cm1TdGVwIGltcG9ydCBTYmF0Y2hTdGVwLCBTcnVuU3RlcAo8fGZpbV9lbmR8Pg=="]
["8ee6d11a1a0c014f4e8977cb221ce454004e779a-1","8ee6d11a1a0c014f4e8977cb221ce454004e779a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNlYXJjaGluZwoKZnJvbSB3YWl0cmVzcyBpbXBvcnQgc2VydmUKZnJvbSBmbGFzayBpbXBvcnQgRmxhc2ssIHJlbmRlcl90ZW1wbGF0ZSwgcmVxdWVzdAoKYXBwID0gRmxhc2soX19uYW1lX18pCgpkZWYgc2VhcmNoKHBsYXRmb3JtKToKICAgIHBsYXRmb3JtcyA9IHsKICAgICAgICAneXQnOiAnWW91VHViZScsCiAgICAgICAgJ3dpa2knOiAnV2lraXBlZGlhJywKICAgICAgICAnZGRnJzogJ1lvdVR1YmUnCiAgICB9CgogICAgc2VhcmNoX3F1ZXJ5ID0gcmVxdWVzdC5hcmdzWydxJ10KICAgIHNlYXJjaF9xdWVyeSA9IGYnIntzZWFyY2hfcXVlcnl9IiDigKIgb24ge3BsYXRmb3Jtc1twbGF0Zm9ybV19IHZpYSBGbGFza1NlYXJjaCcKCiAgICBpZiBub3Qgc2VhcmNoX3F1ZXJ5OgogICAgICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoJ2hvbWUuaHRtbCcpCgogICAgaWYgcGxhdGZvcm0gPT0gJ3l0JzoKICAgICAgICBzZWFyY2hfcmVzdWx0cyA9IHNlYXJjaGluZy5zZWFyY2hfeW91dHViZShxdWVyeT1zZWFyY2hfcXVlcnkpCgogICAgZWxpZiBwbGF0Zm9ybSA9PSAnd2lraSc6CiAgICAgICAgc2VhcmNoX3Jlc3VsdHMgPSBzZWFyY2hpbmcuc2VhcmNoX3dpa2kocXVlcnk9c2VhcmNoX3F1ZXJ5KQogICAgCiAgICBlbGlmIHBsYXRmb3JtID09ICdkZGcnOgogICAgICAgIHNlYXJjaF9yZXN1bHRzID0gc2VhcmNoaW5nLnNlYXJjaF9kZGcocXVlcnk9c2VhcmNoX3F1ZXJ5KQoKICAgIHJldHVybiBzZWFyY2hfcXVlcnksIHNlYXJjaF9yZXN1bHRzCgpAYXBwLnJvdXRlKCcvJykKZGVmIGhvbWUoKToKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoJ2hvbWUuaHRtbCcpCgpAYXBwLnJvdXRlKCcveXQnKQpkZWYgeXQoKToKICAgIHNlYXJjaF9xdWVyeSwgc2VhcmNoX3Jlc3VsdHMgPSBzZWFyY2goJ3l0JykKCiAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKAogICAgICAgICdzZWFyY2guaHRtbCcsCiAgICAgICAgcXVlcnk9c2VhcmNoX3F1ZXJ5LAogICAgICAgIHJlc3VsdHM9c2VhcmNoX3Jlc3VsdHMKICAgICkKCkBhcHAucm91dGUoJy9kZGcnKQpkZWYgZGRnKCk6CiAgICBzZWFyY2hfcXVlcnksIHNlYXJjaF9yZXN1bHRzID0gc2VhcmNoKCdkZGcnKQoKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoCiAgICAgICAgJ3NlYXJjaC5odG1sJywKICAgICAgICBxdWVyeT1zZWFyY2hfcXVlcnksCiAgICAgICAgcmVzdWx0cz1zZWFyY2hfcmVzdWx0cwogICAgKQoKQGFwcC5yb3V0ZSgnL3dpa2knKQpkZWYgd2lraSgpOgogICAgc2VhcmNoX3F1ZXJ5LCBzZWFyY2hfcmVzdWx0cyA9IHNlYXJjaCgnd2lraScpCgogICAgcmV0dXJuIHJlbmRlcl90ZW1wbGF0ZSgKICAgICAgICAnc2VhcmNoLmh0bWwnLAogICAgICAgIHF1ZXJ5PXNlYXJjaF9xdWVyeSwKICAgICAgICByZXN1bHRzPXNlYXJjaF9yZXN1bHRzCiAgICApCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAjIHNlcnZlKGFwcCwgaG9zdD0nMC4wLjAuMCcsIHBvcnQ9ODA4MCkKICAgIGFwcC5ydW4oaG9zdD0nMC4wLjAuMCcsIHBvcnQ9ODA4MCkKPHxmaW1fZW5kfD4="]
["249ce2b802da14a8fe26659f946bd9d9d06f51e5-2","249ce2b802da14a8fe26659f946bd9d9d06f51e5","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5CmZyb20gcHlkYW50aWMgaW1wb3J0IGNyZWF0ZV9tb2RlbCwgVmFsaWRhdGlvbkVycm9yCmZyb20gdGhpbmMudHlwZXMgaW1wb3J0IEZsb2F0czFkLCBGbG9hdHMyZCwgRmxvYXRzM2QsIEZsb2F0czRkCmZyb20gdGhpbmMudHlwZXMgaW1wb3J0IEludHMxZCwgSW50czJkLCBJbnRzM2QsIEludHM0ZAppbXBvcnQgcHl0ZXN0CgoKQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAogICAgImFycixhcnJfdHlwZSIsCiAgICBbCiAgICAgICAgKG51bXB5Lnplcm9zKDAsIGR0eXBlPW51bXB5LmZsb2F0MzIpLCBGbG9hdHMxZCksCiAgICAgICAgKG51bXB5Lnplcm9zKCgwLCAwKSwgZHR5cGU9bnVtcHkuZmxvYXQzMiksIEZsb2F0czJkKSwKICAgICAgICAobnVtcHkuemVyb3MoKDAsIDAsIDApLCBkdHlwZT1udW1weS5mbG9hdDMyKSwgRmxvYXRzM2QpLAogICAgICAgIChudW1weS56ZXJvcygoMCwgMCwgMCwgMCksIGR0eXBlPW51bXB5LmZsb2F0MzIpLCBGbG9hdHM0ZCksCiAgICAgICAgKG51bXB5Lnplcm9zKDAsIGR0eXBlPW51bXB5LmludDMyKSwgSW50czFkKSwKICAgICAgICAobnVtcHkuemVyb3MoKDAsIDApLCBkdHlwZT1udW1weS5pbnQzMiksIEludHMyZCksCiAgICAgICAgKG51bXB5Lnplcm9zKCgwLCAwLCAwKSwgZHR5cGU9bnVtcHkuaW50MzIpLCBJbnRzM2QpLAogICAgICAgIChudW1weS56ZXJvcygoMCwgMCwgMCwgMCksIGR0eXBlPW51bXB5LmludDMyKSwgSW50czRkKSwKICAgIF0sCikKZGVmIHRlc3RfYXJyYXlfdmFsaWRhdGlvbl92YWxpZChhcnIsIGFycl90eXBlKToKICAgIHRlc3RfbW9kZWwgPSBjcmVhdGVfbW9kZWwoIlRlc3RNb2RlbCIsIGFycj0oYXJyX3R5cGUsIC4uLikpCiAgICByZXN1bHQgPSB0ZXN0X21vZGVsKGFycj1hcnIpCiAgICBhc3NlcnQgbnVtcHkuYXJyYXlfZXF1YWwoYXJyLCByZXN1bHQuYXJyKQoKCkBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKICAgICJhcnIsYXJyX3R5cGUiLAogICAgWwogICAgICAgIChudW1weS56ZXJvcygoMCwgMCksIGR0eXBlPW51bXB5LmZsb2F0MzIpLCBGbG9hdHMxZCksCiAgICAgICAgKG51bXB5Lnplcm9zKCgwLCAwKSwgZHR5cGU9bnVtcHkuZmxvYXQzMiksIEludHMyZCksCiAgICBdLAopCmRlZiB0ZXN0X2FycmF5X3ZhbGlkYXRpb25faW52YWxpZChhcnIsIGFycl90eXBlKToKICAgIHRlc3RfbW9kZWwgPSBjcmVhdGVfbW9kZWwoIlRlc3RNb2RlbCIsIGFycj0oYXJyX3R5cGUsIC4uLikpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhWYWxpZGF0aW9uRXJyb3IpOgogICAgICAgIHRlc3RfbW9kZWwoYXJyPWFycikKPHxmaW1fZW5kfD4="]
["8ebd10fa7595b13bc0f566814bebec0b0b6726d7-2","8ebd10fa7595b13bc0f566814bebec0b0b6726d7","PHxmaW1fcHJlZml4fD4KZnJvbSBuZXd0LnZpZXdzIGltcG9ydCBKU09OUmVzdFZpZXcKZnJvbSBuZXd0LnZpZXdzIGltcG9ydCBBdXRoSlNPTlJlc3RWaWV3Cgpmcm9tIGNvbW1vbi5yZXNwb25zZSBpbXBvcnQganNvbl9yZXNwb25zZQpmcm9tIGRqYW5nby5odHRwIGltcG9ydCBIdHRwUmVzcG9uc2UsIEh0dHBSZXNwb25zZVNlcnZlckVycm9yLCBTdHJlYW1pbmdIdHRwUmVzcG9uc2UKZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKCmZyb20gaW1wb3J0bGliIGltcG9ydCBpbXBvcnRfbW9kdWxlCmZpbGVfYWRhcHRlciA9IGltcG9ydF9tb2R1bGUoc2V0dGluZ3MuTkVXVF9DT05GSUdbJ0FEQVBURVJTJ11bJ0ZJTEUnXVsnYWRhcHRlciddKQoKCmltcG9ydCBsb2dnaW5nCgoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIm5ld3QuIiArIF9fbmFtZV9fKQoKIyAvYXBpL2ZpbGUvCmNsYXNzIEZpbGVSb290VmlldyhKU09OUmVzdFZpZXcpOgogICAgZGVmIGdldChzZWxmLCByZXF1ZXN0KToKICAgICAgICBsb2dnZXIuZGVidWcoIkVudGVyaW5nICVzOiVzIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgX19uYW1lX18pKQogICAgICAgIHJldHVybiBmaWxlX2FkYXB0ZXIuZ2V0X3N5c3RlbXMocmVxdWVzdCkKCiMgL2FwaS9maWxlLzxtYWNoaW5lX25hbWU+LzxwYXRoPi8KY2xhc3MgRmlsZVZpZXcoSlNPTlJlc3RWaWV3KToKICAgIGRlZiBnZXQoc2VsZiwgcmVxdWVzdCwgbWFjaGluZV9uYW1lLCBwYXRoKToKICAgICAgICBsb2dnZXIuZGVidWcoIkVudGVyaW5nICVzOiVzIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgX19uYW1lX18pKQogICAgICAgIGlmIHJlcXVlc3QuR0VULmdldCgiZG93bmxvYWQiLCBGYWxzZSk6CiAgICAgICAgICAgIHJldHVybiBmaWxlX2FkYXB0ZXIuZG93bmxvYWRfcGF0aChyZXF1ZXN0LCBtYWNoaW5lX25hbWUsIHBhdGgpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIGZpbGVfYWRhcHRlci5nZXRfZGlyKHJlcXVlc3QsIG1hY2hpbmVfbmFtZSwgcGF0aCkKICAgICAgICAKICAgIGRlZiBwdXQoc2VsZiwgcmVxdWVzdCwgbWFjaGluZV9uYW1lLCBwYXRoKToKICAgICAgICBsb2dnZXIuZGVidWcoIkVudGVyaW5nICVzOiVzIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgX19uYW1lX18pKQogICAgICAgIHJldHVybiBmaWxlX2FkYXB0ZXIucHV0X2ZpbGUocmVxdWVzdCwgbWFjaGluZV9uYW1lLCBwYXRoKQoKIyAvYXBpL2ZpbGUvPHF1ZXJ5Pi8KY2xhc3MgRXh0cmFGaWxlVmlldyhKU09OUmVzdFZpZXcpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgZ2V0KHNlbGYsIHJlcXVlc3QsIHF1ZXJ5KToKICAgICAgICByZXR1cm4gZmlsZV9hZGFwdGVyLmV4dHJhc19yb3V0ZXIocmVxdWVzdCwgcXVlcnkpCjx8ZmltX2VuZHw+"]
["709db6bb84b9d9f73ebc776b324e684cba0a8ab3-2","709db6bb84b9d9f73ebc776b324e684cba0a8ab3","PHxmaW1fcHJlZml4fD4KIyBUZW1wZmlsZSBNb2R1bGUKCiMgQ3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUKCiMgV3JpdGUgdG8gYSB0ZW1wb3JhcnkgZmlsZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgojIFJlYWQgdGhlIHRlbXBvcmFyeSBmaWxlCgojIENsb3NlIHRoZSB0ZW1wb3JhcnkgZmlsZQo8fGZpbV9lbmR8Pg=="]
["779517c60bd0a0c6328cfffa97c4377d5c6680f0-1","779517c60bd0a0c6328cfffa97c4377d5c6680f0","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCmltcG9ydCBzaHV0aWwsIHN0cmluZywgc3lzLCB0ZW1wZmlsZQpmcm9tIGFyZ3BhcnNlIGltcG9ydCBBcmd1bWVudFBhcnNlcgoKZnJvbSBmYnJlYWRlci5mb3JtYXQuZXB1YiBpbXBvcnQgRVB1YgoKZGVmIHZlcmlmeV9rZXkoa2V5LCBuYW1lKToKICAgIGlmIGxlbihrZXkpICE9IDMyOgogICAgICAgIHJhaXNlIEV4Y2VwdGlvbignSW5jb3JyZWN0ICVzIGxlbmd0aCAlZCwgMzIgZXhwZWN0ZWQnICUgKG5hbWUsIGxlbihrZXkpKSkKPHxmaW1faG9sZXw+CmRlZiBwYXJzZV9jb21tYW5kX2xpbmUoKToKICAgIHBhcnNlciA9IEFyZ3VtZW50UGFyc2VyKAogICAgICAgIGRlc2NyaXB0aW9uPSdNYXJsaW4gZVB1YiBlbmNyeXB0aW9uIHRvb2wnCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctcycsCiAgICAgICAgJy0ta2VlcC11bmVuY3J5cHRlZCcsCiAgICAgICAgZGVzdD0na2VlcF91bmVuY3J5cHRlZCcsCiAgICAgICAgbWV0YXZhcj0na2VlcF91bmVuY3J5cHRlZCcsCiAgICAgICAgbmFyZ3M9JyonLAogICAgICAgIGhlbHA9J2VudHJ5IHRvIGtlZXAgbm90IGVuY3J5cHRlZCAodG9vbCBlbmNyeXB0cyBhbGwgZW50cmllcyBleGNlcHQgY292ZXIgYnkgZGVmYXVsdCknCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctaycsCiAgICAgICAgZGVzdD0na2V5JywKICAgICAgICBtZXRhdmFyPSdrZXknLAogICAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgICAgaGVscD0nZW5jcnlwdGlvbiBrZXkgKDMyLWRpZ2l0IGhleCBudW1iZXIpJwogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLWNpJywKICAgICAgICBkZXN0PSdjb250ZW50X2lkJywKICAgICAgICBtZXRhdmFyPSdjb250ZW50X2lkJywKICAgICAgICByZXF1aXJlZD1UcnVlLAogICAgICAgIGhlbHA9J2NvbnRlbnQgaWQnCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICdlcHViJywKICAgICAgICBoZWxwPSduYW1lIG9mIGVQdWIgZmlsZSB0byBlbmNyeXB0JwogICAgKQogICAgcGFyYW1zID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3ZbMTpdKQogICAgdmVyaWZ5X2tleShwYXJhbXMua2V5LCAna2V5JykKICAgIHJldHVybiBwYXJhbXMKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBwYXJhbXMgPSBwYXJzZV9jb21tYW5kX2xpbmUoKQogICAgd29ya2luZ19kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKGRpcj0nLicpCiAgICB0cnk6CiAgICAgICAgZXB1YiA9IEVQdWIocGFyYW1zLmVwdWIsIHBhcmFtcy5lcHViKQogICAgICAgIGVwdWIuZW5jcnlwdChwYXJhbXMua2V5LCBwYXJhbXMuY29udGVudF9pZCwgd29ya2luZ19kaXIsIGZpbGVzX3RvX2tlZXA9cGFyYW1zLmtlZXBfdW5lbmNyeXB0ZWQpCiAgICBmaW5hbGx5OgogICAgICAgIHNodXRpbC5ybXRyZWUod29ya2luZ19kaXIpCjx8ZmltX3N1ZmZpeHw+CiAgICBmb3Igc3ltIGluIGtleToKICAgICAgICBpZiBub3Qgc3ltIGluIHN0cmluZy5oZXhkaWdpdHM6CiAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignSW5jb3JyZWN0IGNoYXJhY3RlciAlcyBpbiAlcycgJSAoc3ltLCBuYW1lKSkKCjx8ZmltX2VuZHw+"]
["79accd1f79faa1d17892513d0d04fddba01af048-4","79accd1f79faa1d17892513d0d04fddba01af048","PHxmaW1fcHJlZml4fD4KIyBVU0FHRQojIHB5dGhvbiB0cmFuc2xhdGUucHkgbWluaW9uLmpwZwoKIyBpbXBvcnQgdGhlIG5lY2Vzc2FyeSBwYWNrYWdlcwoKCmltcG9ydCBpbXV0aWxzCmltcG9ydCBjdjIKaW1wb3J0IHN5cwoKaW1nID0gc3lzLmFyZ3ZbMV0KIyBsb2FkIHRoZSBpbWFnZSBhbmQgc2hvdyBpdAo8fGZpbV9ob2xlfD4Kc2hpZnRlZCA9IGltdXRpbHMudHJhbnNsYXRlKGltYWdlLCAwLCAxMDApCmN2Mi5pbXdyaXRlKCJpbWFnZS5qcGciLHNoaWZ0ZWQpCmN2Mi5pbXNob3coIlNoaWZ0ZWQgRG93biIsIHNoaWZ0ZWQpCmN2Mi53YWl0S2V5KDApCjx8ZmltX3N1ZmZpeHw+CmltYWdlID0gY3YyLmltcmVhZChpbWcpCmN2Mi5pbXNob3coIk9yaWdpbmFsIiwgaW1hZ2UpCgoKPHxmaW1fZW5kfD4="]
["a43077901f1225167afbdb3ba6f80c49e151e896-4","a43077901f1225167afbdb3ba6f80c49e151e896","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlc3BvbnNlU2VydmVyRXJyb3IKZnJvbSBkamFuZ28udXRpbHMuZGVwcmVjYXRpb24gaW1wb3J0IE1pZGRsZXdhcmVNaXhpbgoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgQWRtaW5pc3RNaWRkbGV3YXJlKE1pZGRsZXdhcmVNaXhpbik6CiAgICBkZWYgcHJvY2Vzc19leGNlcHRpb24oc2VsZiwgcmVxdWVzdCwgZXhjZXB0aW9uKToKICAgICAgICBpcCA9IHJlcXVlc3QuTUVUQVsnUkVNT1RFX0FERFInXQoKPHxmaW1fZW5kfD4="]
["8552731c56e0a26bdb8cecbaa4cdd9edbd66b7b8-4","8552731c56e0a26bdb8cecbaa4cdd9edbd66b7b8","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMSBvbiAyMDIwLTA4LTE0IDAyOjExCgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucywgbW9kZWxzCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ2FjY291bnRzJywgJzAwMDRfYXV0b18yMDIwMDgxNF8wMTUyJyksCiAgICBdCjx8ZmltX2VuZHw+"]
["74c0d11567c8fa9d8e0215f6329a47fad8828703-3","74c0d11567c8fa9d8e0215f6329a47fad8828703","PHxmaW1fcHJlZml4fD4KZnJvbSB0a2ludGVyIGltcG9ydCAqCgpyb290ID0gVGsoKQpyb290LnRpdGxlKCdFbnRyeSB3aWRnZXQgYW5kIEdyaWQgbGF5b3V0JykKcm9vdC5nZW9tZXRyeSgiNjQweDQzNiIpCgpkZWYgZ2V0dmFscygpOgogICAgcHJpbnQodXNlcnZhbHVlLmdldCgpKQogICAgcHJpbnQocGFzc3ZhbHVlLmdldCgpKQoKZjEgPSBGcmFtZShyb290LCBib3JkZXJ3aWR0aCA9IDYsIGJnID0gImdyZXkiLCByZWxpZWYgPSBTVU5LRU4sIHBhZHggPSA5MCkKZjEucGFjayhzaWRlID0gVE9QLCBhbmNob3IgPSAibnciLCBmaWxsID0gWCkKCnVzZXJuYW1lPSBMYWJlbChmMSwgdGV4dCA9ICJVc2VybmFtZSIsIHBhZHggPSAzMCkKI3VzZXJuYW1lLnBhY2socGFkeSA9IDEwKQp1c2VybmFtZS5ncmlkKCkKCnBhc3N3b3JkPSBMYWJlbChmMSwgdGV4dCA9ICJQYXNzd29yZCIgLCBwYWR4ID0gMzApCiNwYXNzd29yZC5wYWNrKHBhZHkgPSAxMCkKcGFzc3dvcmQuZ3JpZChyb3c9MSkKPHxmaW1faG9sZXw+CnVzZXJlbnRyeSA9IEVudHJ5KGYxLCB0ZXh0dmFyaWFibGUgPSB1c2VydmFsdWUpCnBhc3NlbnRyeSA9IEVudHJ5KGYxLCB0ZXh0dmFyaWFibGUgPSBwYXNzdmFsdWUpCgp1c2VyZW50cnkuZ3JpZChyb3cgPSAwLCBjb2x1bW4gPSAxKQpwYXNzZW50cnkuZ3JpZChyb3cgPSAxLCBjb2x1bW4gPSAxKQoKQnV0dG9uKGYxLCB0ZXh0PSdTdWJtaXQnLCBjb21tYW5kID0gZ2V0dmFscykuZ3JpZCgpCgpyb290Lm1haW5sb29wKCkKPHxmaW1fc3VmZml4fD4KCnVzZXJ2YWx1ZSA9IFN0cmluZ1ZhcigpCnBhc3N2YWx1ZSA9IFN0cmluZ1ZhcigpCgo8fGZpbV9lbmR8Pg=="]
["24f04eab212ceb07c05e8f77ce5325ee9d48efcc-1","24f04eab212ceb07c05e8f77ce5325ee9d48efcc","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBwYW5kYXMgYXMgcGQKCmltcG9ydCBwaXBlZG93bgpmcm9tIHBpcGVkb3duLmRhZyBpbXBvcnQgREFHCmZyb20gcGlwZWRvd24ubm9kZXMuYmFzZSBpbXBvcnQgSW5wdXQsIFByaW1hcnkKZnJvbSBwaXBlZG93bi5ub2Rlcy5tZXRyaWNzIGltcG9ydCBNZWFuU3F1YXJlZEVycm9yCgoKZGVmIHRlc3RfcmVhZG1lX2RhZygpOgogICAgY2xhc3MgTWVhbkltcHV0ZXIocGlwZWRvd24ubm9kZXMuYmFzZS5Ob2RlKToKICAgICAgICBkZWYgZml0KHNlbGYsIFg6IHBkLkRhdGFGcmFtZSwgeTogcGQuU2VyaWVzKToKICAgICAgICAgICAgc2VsZi5tZWFucyA9IFgubWVhbigpCgogICAgICAgIGRlZiBydW4oc2VsZiwgWDogcGQuRGF0YUZyYW1lLCB5OiBwZC5TZXJpZXMpOgogICAgICAgICAgICBmb3IgYyBpbiBYOgogICAgICAgICAgICAgICAgWFtYW2NdLmlzbnVsbCgpXSA9IHNlbGYubWVhbnNbY10KICAgICAgICAgICAgcmV0dXJuIFgsIHkKCiAgICBjbGFzcyBMb2FkRnJvbUNzdihwaXBlZG93bi5ub2Rlcy5iYXNlLk5vZGUpOgogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZTogc3RyKToKICAgICAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCgogICAgICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgICAgIGRmID0gcGQuRGF0YUZyYW1lKCkKICAgICAgICAgICAgZGZbImZlYXR1cmUxIl0gPSBucC5yYW5kb20ucmFuZG4oMTAwKQogICAgICAgICAgICBkZlsiZmVhdHVyZTIiXSA9IG5wLnJhbmRvbS5yYW5kbigxMDApCiAgICAgICAgICAgIGRmWyJ0YXJnZXQiXSA9IG5wLnJhbmRvbS5yYW5kbigxMDApCiAgICAgICAgICAgIHJldHVybiBkZgoKICAgIGNsYXNzIExpbmVhclJlZ3Jlc3Npb24ocGlwZWRvd24ubm9kZXMuYmFzZS5Nb2RlbCk6CiAgICAgICAgZGVmIGZpdChzZWxmLCBYOiBwZC5EYXRhRnJhbWUsIHk6IHBkLlNlcmllcyk6CiAgICAgICAgICAgIHh4ID0gWC52YWx1ZXMKICAgICAgICAgICAgeXkgPSB5LnZhbHVlcy5yZXNoYXBlKCgtMSwgMSkpCiAgICAgICAgICAgIHNlbGYud2VpZ2h0cyA9IG5wLmxpbmFsZy5pbnYoeHguVCBAIHh4KSBAIHh4LlQgQCB5eQoKICAgICAgICBkZWYgcHJlZGljdChzZWxmLCBYOiBwZC5EYXRhRnJhbWUpOgogICAgICAgICAgICB5X3ByZWQgPSBYLnZhbHVlcyBAIHNlbGYud2VpZ2h0cwogICAgICAgICAgICByZXR1cm4gcGQuU2VyaWVzKGRhdGE9eV9wcmVkLnJhdmVsKCksIGluZGV4PVguaW5kZXgpCgogICAgY2xhc3MgTXlNb2RlbChEQUcpOgogICAgICAgIGRlZiBub2RlcyhzZWxmKToKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICJsb2FkX2NzdiI6IExvYWRGcm9tQ3N2KCJzb21lX2Nzdi5jc3YiKSwKICAgICAgICAgICAgICAgICJ0ZXN0X2lucHV0IjogSW5wdXQoKSwKICAgICAgICAgICAgICAgICJwcmltYXJ5IjogUHJpbWFyeShbImZlYXR1cmUxIiwgImZlYXR1cmUyIl0sICJ0YXJnZXQiKSwKICAgICAgICAgICAgICAgICJpbXB1dGVyIjogTWVhbkltcHV0ZXIoKSwKICAgICAgICAgICAgICAgICJsciI6IExpbmVhclJlZ3Jlc3Npb24oKSwKICAgICAgICAgICAgICAgICJtc2UiOiBNZWFuU3F1YXJlZEVycm9yKCksCjx8ZmltX2hvbGV8PgogICAgICAgIGRlZiBlZGdlcyhzZWxmKToKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICJtc2UiOiAibHIiLAogICAgICAgICAgICAgICAgImxyIjogImltcHV0ZXIiLAogICAgICAgICAgICAgICAgImltcHV0ZXIiOiAicHJpbWFyeSIsCiAgICAgICAgICAgICAgICAicHJpbWFyeSI6IHsidGVzdCI6ICJ0ZXN0X2lucHV0IiwgInRyYWluIjogImxvYWRfY3N2In0sCiAgICAgICAgICAgIH0KCiAgICBtb2RlbCA9IE15TW9kZWwoKQogICAgbW9kZWwuZml0KCkKCiAgICB0ZXN0X2lucHV0ID0geyJmZWF0dXJlMSI6IDEuMiwgImZlYXR1cmUyIjogMy40fQogICAgbW9kZWwucnVuKGlucHV0cz17InRlc3RfaW5wdXQiOiB0ZXN0X2lucHV0fSwgb3V0cHV0cz0ibHIiKQoKICAgIF8gPSBtb2RlbC5jdl9wcmVkaWN0KCkKCiAgICBtb2RlbC5jdl9tZXRyaWMoKQoKICAgIG1vZGVsLnNhdmUoInRlc3RfcmVhZG1lX21vZGVsLnBrbCIpCiAgICBfID0gcGlwZWRvd24uZGFnLmlvLmxvYWRfZGFnKCJ0ZXN0X3JlYWRtZV9tb2RlbC5wa2wiKQoKICAgICMgR2V0IHRoZSByYXcgaHRtbAogICAgXyA9IG1vZGVsLmdldF9odG1sKCkKCiAgICAjIE9yLCBzYXZlIHRvIGh0bWwgZmlsZToKICAgIG1vZGVsLnNhdmVfaHRtbCgidGVzdF9yZWFkbWVfbW9kZWwuaHRtbCIpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIH0KCjx8ZmltX2VuZHw+"]
["3b8d0ac6ac79e539193808e777c916f7e44d7787-1","3b8d0ac6ac79e539193808e777c916f7e44d7787","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uYXBwcyBpbXBvcnQgQXBwQ29uZmlnCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgpjbGFzcyBUYW9iYW9Db25maWcoQXBwQ29uZmlnKToKICAgIG5hbWUgPSAndGFvYmFvJwo8fGZpbV9lbmR8Pg=="]
["8df265fc377834b733fae587c45dc3e7d3a8b8cd-1","8df265fc377834b733fae587c45dc3e7d3a8b8cd","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKZnJvbSAuY29uc3RhbnRzIGltcG9ydCBWYWx1ZXMKZnJvbSAubWlzYy5hcnJheV91dGlsIGltcG9ydCBBcnJheVV0aWwKCgpjbGFzcyBBbGlnbm1lbnRQYXR0ZXJuOgogICAgX2NlbnRlcl9wb3NfYXJyYXlzID0gWwogICAgICAgIE5vbmUsCiAgICAgICAgTm9uZSwKICAgICAgICBbNiwgMThdLAogICAgICAgIFs2LCAyMl0sCiAgICAgICAgWzYsIDI2XSwKICAgICAgICBbNiwgMzBdLAogICAgICAgIFs2LCAzNF0sCiAgICAgICAgWzYsIDIyLCAzOF0sCiAgICAgICAgWzYsIDI0LCA0Ml0sCiAgICAgICAgWzYsIDI2LCA0Nl0sCiAgICAgICAgWzYsIDI4LCA1MF0sCiAgICAgICAgWzYsIDMwLCA1NF0sCiAgICAgICAgWzYsIDMyLCA1OF0sCiAgICAgICAgWzYsIDM0LCA2Ml0sCiAgICAgICAgWzYsIDI2LCA0NiwgNjZdLAogICAgICAgIFs2LCAyNiwgNDgsIDcwXSwKICAgICAgICBbNiwgMjYsIDUwLCA3NF0sCiAgICAgICAgWzYsIDMwLCA1NCwgNzhdLAogICAgICAgIFs2LCAzMCwgNTYsIDgyXSwKICAgICAgICBbNiwgMzAsIDU4LCA4Nl0sCiAgICAgICAgWzYsIDM0LCA2MiwgOTBdLAogICAgICAgIFs2LCAyOCwgNTAsIDcyLCA5NF0sCiAgICAgICAgWzYsIDI2LCA1MCwgNzQsIDk4XSwKICAgICAgICBbNiwgMzAsIDU0LCA3OCwgMTAyXSwKICAgICAgICBbNiwgMjgsIDU0LCA4MCwgMTA2XSwKICAgICAgICBbNiwgMzIsIDU4LCA4NCwgMTEwXSwKICAgICAgICBbNiwgMzAsIDU4LCA4NiwgMTE0XSwKICAgICAgICBbNiwgMzQsIDYyLCA5MCwgMTE4XSwKICAgICAgICBbNiwgMjYsIDUwLCA3NCwgOTgsIDEyMl0sCiAgICAgICAgWzYsIDMwLCA1NCwgNzgsIDEwMiwgMTI2XSwKICAgICAgICBbNiwgMjYsIDUyLCA3OCwgMTA0LCAxMzBdLAogICAgICAgIFs2LCAzMCwgNTYsIDgyLCAxMDgsIDEzNF0sCiAgICAgICAgWzYsIDM0LCA2MCwgODYsIDExMiwgMTM4XSwKICAgICAgICBbNiwgMzAsIDU4LCA4NiwgMTE0LCAxNDJdLAogICAgICAgIFs2LCAzNCwgNjIsIDkwLCAxMTgsIDE0Nl0sCiAgICAgICAgWzYsIDMwLCA1NCwgNzgsIDEwMiwgMTI2LCAxNTBdLAogICAgICAgIFs2LCAyNCwgNTAsIDc2LCAxMDIsIDEyOCwgMTU0XSwKICAgICAgICBbNiwgMjgsIDU0LCA4MCwgMTA2LCAxMzIsIDE1OF0sCiAgICAgICAgWzYsIDMyLCA1OCwgODQsIDExMCwgMTM2LCAxNjJdLAogICAgICAgIFs2LCAyNiwgNTQsIDgyLCAxMTAsIDEzOCwgMTY2XSwKICAgICAgICBbNiwgMzAsIDU4LCA4NiwgMTE0LCAxNDIsIDE3MF0KICAgIF0KCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBwbGFjZShjbHMsIHZlcnNpb246IGludCwgbW9kdWxlX21hdHJpeDogTGlzdFtMaXN0W2ludF1dKSAtPiBOb25lOgogICAgICAgIHZhbHVlID0gVmFsdWVzLkFMSUdOTUVOVAo8fGZpbV9ob2xlfD4KCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuZ3RoKToKICAgICAgICAgICAgciA9IGNlbnRlcl9wb3NfYXJyYXlbaV0KCiAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKGxlbmd0aCk6CiAgICAgICAgICAgICAgICBjID0gY2VudGVyX3Bvc19hcnJheVtqXQoKICAgICAgICAgICAgICAgICMg5L2N572u5qSc5Ye644OR44K/44O844Oz44Go6YeN44Gq44KL5aC05ZCICiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgaSA9PSAwIGFuZCBqID09IDAgb3IKICAgICAgICAgICAgICAgICAgICBpID09IDAgYW5kIGogPT0gbWF4X2luZGV4IG9yCiAgICAgICAgICAgICAgICAgICAgaSA9PSBtYXhfaW5kZXggYW5kIGogPT0gMAogICAgICAgICAgICAgICAgKToKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgICAgIEFycmF5VXRpbC5jb3B5KFt2YWx1ZSwgIHZhbHVlLCAgdmFsdWUsICB2YWx1ZSwgdmFsdWVdLCAwLCBtb2R1bGVfbWF0cml4W3IgLSAyXSwgYyAtIDIsIDUpCiAgICAgICAgICAgICAgICBBcnJheVV0aWwuY29weShbdmFsdWUsIC12YWx1ZSwgLXZhbHVlLCAtdmFsdWUsIHZhbHVlXSwgMCwgbW9kdWxlX21hdHJpeFtyIC0gMV0sIGMgLSAyLCA1KQogICAgICAgICAgICAgICAgQXJyYXlVdGlsLmNvcHkoW3ZhbHVlLCAtdmFsdWUsICB2YWx1ZSwgLXZhbHVlLCB2YWx1ZV0sIDAsIG1vZHVsZV9tYXRyaXhbciArIDBdLCBjIC0gMiwgNSkKICAgICAgICAgICAgICAgIEFycmF5VXRpbC5jb3B5KFt2YWx1ZSwgLXZhbHVlLCAtdmFsdWUsIC12YWx1ZSwgdmFsdWVdLCAwLCBtb2R1bGVfbWF0cml4W3IgKyAxXSwgYyAtIDIsIDUpCiAgICAgICAgICAgICAgICBBcnJheVV0aWwuY29weShbdmFsdWUsICB2YWx1ZSwgIHZhbHVlLCAgdmFsdWUsIHZhbHVlXSwgMCwgbW9kdWxlX21hdHJpeFtyICsgMl0sIGMgLSAyLCA1KQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGNlbnRlcl9wb3NfYXJyYXk6IExpc3RbaW50XSA9IGNscy5fY2VudGVyX3Bvc19hcnJheXNbdmVyc2lvbl0KCiAgICAgICAgbGVuZ3RoID0gbGVuKGNlbnRlcl9wb3NfYXJyYXkpCiAgICAgICAgbWF4X2luZGV4ID0gbGVuZ3RoIC0gMQo8fGZpbV9lbmR8Pg=="]
["746a21ece2da544262fec8b0f2391c3e909df3f8-1","746a21ece2da544262fec8b0f2391c3e909df3f8","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKX19hbGxfXyA9ICgKICAgICJMaW1pdCIsCiAgICAiRXh0cmVtdW0iLAogICAgIk1JTklNVU1fRVhUUkVNVU0iLAogICAgIk1BWElNVU1fRVhUUkVNVU0iLAopCgpmcm9tIHR5cGluZyBpbXBvcnQgKAogICAgTGl0ZXJhbCwKICAgIEZpbmFsLAopCgpFeHRyZW11bSA9IExpdGVyYWxbIm1pbmltdW0iLCAibWF4aW11bSJdCgpNSU5JTVVNX0VYVFJFTVVNOiBGaW5hbFtMaXRlcmFsWyJtaW5pbXVtIl1dID0gIm1pbmltdW0iCk1BWElNVU1fRVhUUkVNVU06IEZpbmFsW0xpdGVyYWxbIm1heGltdW0iXV0gPSAibWF4aW11bSIKCklOQ0xVU0lWRV9BTElHTk1FTlQ6IEZpbmFsW0xpdGVyYWxbMF1dID0gMApFWENMVVNJVkVfQUxJR05NRU5UOiBGaW5hbFtMaXRlcmFsWzFdXSA9IDEKCgpjbGFzcyBMaW1pdDoKCiAgICBfX3Nsb3RzX18gPSAoCiAgICAgICAgIm5hbWUiLAogICAgICAgICJ2YWx1ZSIsCiAgICAgICAgImlzX2luY2x1c2l2ZSIsCiAgICApCgogICAgZGVmIF9faW5pdF9fKAo8fGZpbV9ob2xlfD4KICAgICAgICAqLAogICAgICAgIGlzX2luY2x1c2l2ZTogYm9vbCwKICAgICkgLT4gTm9uZToKICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCiAgICAgICAgc2VsZi5pc19pbmNsdXNpdmUgPSBpc19pbmNsdXNpdmUKCiAgICBkZWYgX19yZXByX18oc2VsZikgLT4gc3RyOgogICAgICAgIHByZWZpeCA9ICIiIGlmIHNlbGYuaXNfaW5jbHVzaXZlIGVsc2UgImV4Y2x1c2l2ZV8iCgogICAgICAgIHJldHVybiBmIntwcmVmaXh9e3NlbGYubmFtZX09e3NlbGYudmFsdWV9IgoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGFsaWdubWVudChzZWxmKSAtPiBMaXRlcmFsWzAsIDFdOgoKICAgICAgICAiIiIKICAgICAgICBSZXR1cm5zIGxpbWl0IGFsaWdubWVudC4KCiAgICAgICAgQWxpZ25tZW50IGluZGljYXRlcyB3aGV0aGVyIHdlIGFjY2VwdCB0aGUgdmFsdWUKICAgICAgICBlcXVhbCB0byB0aGUgbGltaXQgdmFsdWUgYXMgY29ycmVjdCBvbmUgb3Igbm90LgoKICAgICAgICBJZiBhbGlnbm1lbnQgaXMgZXF1YWwgdG8gMCwgdmFsdWUgZXF1YWwgdG8gbGltaXQgaXMgYWNjZXB0ZWQuCiAgICAgICAgSWYgYWxpZ25tZW50IGlzIGVxdWFsIHRvIDEsIHZhbHVlIGVxdWFsIHRvIGxpbWl0IGlzIG5vdCBhY2NlcHRlZC4KICAgICAgICAiIiIKCiAgICAgICAgcmV0dXJuIElOQ0xVU0lWRV9BTElHTk1FTlQgaWYgc2VsZi5pc19pbmNsdXNpdmUgZWxzZSBFWENMVVNJVkVfQUxJR05NRU5UCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZiwKICAgICAgICBuYW1lOiBFeHRyZW11bSwKICAgICAgICB2YWx1ZTogaW50LAogICAgICAgIC8sCjx8ZmltX2VuZHw+"]
["5c0e87894e83716bcb8d391a169c7be09dc1867e-5","5c0e87894e83716bcb8d391a169c7be09dc1867e","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IG9zLCBzeXMKCgpjbGFzcyBCYWRGaWxlRXhjZXB0aW9uKEV4Y2VwdGlvbik6CiAgICBwYXNzCgoKZGVmIGNoZWNrZGlyKHBhdGgpOgogICAgIyBzb3VyY2U6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zMzIzMjY4OC81MTMyNDU2CiAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhwYXRoKToKICAgICAgICBmb3IgZmlsZSBpbiBmaWxlcyArIGRpcnM6CiAgICAgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZSkKICAgICAgICAgICAgaWYgbm90IG9zLmFjY2VzcyhmLCBvcy5SX09LKToKICAgICAgICAgICAgICAgIHJhaXNlIEJhZEZpbGVFeGNlcHRpb24oImZpbGUgbm90IHJlYWRhYmxlOiB7fSIuZm9ybWF0KG9zLnBhdGgucmVhbHBhdGgoZikpKQo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgICAgICBpZiBvcy5hY2Nlc3MoZiwgb3MuV19PSyk6CiAgICAgICAgICAgICAgICAgICAgICAgICMgdG9kbzogY2hlY2sgaWYgdGhpcyBzdGlsbCB3b3JrcyBpbiBzdWJkaXJzIG9mIHRoZSBzeW1saW5rCiAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEJhZEZpbGVFeGNlcHRpb24oIndyaXRlYWJsZSBleHRlcm5hbCBsaW5rOiB7fSAtPiB7fSIuZm9ybWF0KGYsIG9zLnBhdGgucmVhbHBhdGgoZikpKQoKCmhhc19lcnJvciA9IEZhbHNlCgpmb3IgcGF0aCBpbiBzeXMuYXJndlsxOl06CiAgICB0cnk6CiAgICAgICAgcHJpbnQoImNoZWNraW5nIGZpbGVzeXN0ZW0gc3RhcnRpbmcgYXQ6ICIgKyBvcy5wYXRoLnJlYWxwYXRoKHBhdGgpKQogICAgICAgIGNoZWNrZGlyKHBhdGgpCiAgICBleGNlcHQgQmFkRmlsZUV4Y2VwdGlvbiBhcyBlOgogICAgICAgIHN5cy5zdGRlcnIud3JpdGUoc3RyKGUpKQogICAgICAgIGhhc19lcnJvciA9IFRydWUKCmlmIGhhc19lcnJvcjoKICAgIHN5cy5leGl0KDEpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGYpOgogICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGYpOgogICAgICAgICAgICAgICAgICAgIHJhaXNlIEJhZEZpbGVFeGNlcHRpb24oImJyb2tlbiBsaW5rOiB7fSAtPiB7fSIuZm9ybWF0KGYsIG9zLnBhdGgucmVhbHBhdGgoZikpKQogICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGgucmVhbHBhdGgoZikuc3RhcnRzd2l0aChwYXRoKToKPHxmaW1fZW5kfD4="]
["5adbaa8f19414ccef392cfe8a150085f86488da5-2","5adbaa8f19414ccef392cfe8a150085f86488da5","PHxmaW1fcHJlZml4fD4KIiIic2lhbVJQTiBSUE4KQ29kZSBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL1NUVklSL3B5c290IiIiCiMgcHlsaW50OiBkaXNhYmxlPWFyZ3VtZW50cy1kaWZmZXIKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscwpmcm9tIG14bmV0LmdsdW9uLmJsb2NrIGltcG9ydCBIeWJyaWRCbG9jawpmcm9tIG14bmV0LmdsdW9uIGltcG9ydCBubgpmcm9tIG14bmV0LmNvbnRleHQgaW1wb3J0IGNwdQoKY2xhc3MgUlBOKEh5YnJpZEJsb2NrKToKICAgICIiIlJQTiBoZWFkIiIiCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc3VwZXIoUlBOLCBzZWxmKS5fX2luaXRfXygpCgogICAgZGVmIGh5YnJpZF9mb3J3YXJkKHNlbGYsIEYsIHpfZiwgeF9mKToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgoKY2xhc3MgRGVwdGh3aXNlWENvcnIoSHlicmlkQmxvY2spOgogICAgIiIiCiAgICAgICAgU2lhbVJQTiBSUE4gYWZ0ZXIgbmV0d29yayBiYWNrYm9uZSwgcmVnYXJkIG91dHB1dCBvZiB4IGJhY2tib25lIGFzIGtlcm5lbCwKICAgICAgICBhbmQgcmVnYXJkIG91dHB1dCBvZiB6IGJhY2tib25lIGFzIHNlYXJjaCBmZWF0dXJlLCBtYWtlIERlcHRod2lzZSBjb252LgogICAgICAgIGdldCBjbHMgYW5kIGxvYyB0aG91Z2ggdHdvIHN0cmVhbXMgbmV0d3JvawoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgICAgICBoaWRkZW4gOiBpbnQKICAgICAgICAgICAgaGlkZGVuIGZlYXR1cmUgY2hhbm5lbC4KICAgICAgICBvdXRfY2hhbm5lbHMgOiBpbnQKICAgICAgICAgICAgb3V0cHV0IGZlYXR1cmUgY2hhbm5lbC4KICAgICAgICBieiA6IGludAogICAgICAgICAgICBiYXRjaCBzaXplIGZvciB0cmFpbiwgYnogPSAxIGlmIHRlc3QuCiAgICAgICAgaXNfdHJhaW4gOiBzdHIKICAgICAgICAgICAgaXNfdHJhaW4gaXMgVHJ1ZSBpZiB0cmFpbiwgRmFsc2UgaWYgdGVzdC4KICAgICAgICBrZXJuZWxfc2l6ZSA6IGZsb2F0CiAgICAgICAgICAgIGhpZGRlbiBrZXJuZWwgc2l6ZS4KICAgICAgICBjdHggOiBteG5ldC5Db250ZXh0CiAgICAgICAgICAgIENvbnRleHQgc3VjaCBhcyBteC5jcHUoKSwgbXguZ3B1KDApLgogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgaGlkZGVuLCBvdXRfY2hhbm5lbHMsIGJ6PTEsIGlzX3RyYWluPUZhbHNlLCBrZXJuZWxfc2l6ZT0zLCBjdHg9Y3B1KCkpOgogICAgICAgIHN1cGVyKERlcHRod2lzZVhDb3JyLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5jb252X2tlcm5lbCA9IG5uLkh5YnJpZFNlcXVlbnRpYWwocHJlZml4PScnKQogICAgICAgIHNlbGYuY29udl9zZWFyY2ggPSBubi5IeWJyaWRTZXF1ZW50aWFsKHByZWZpeD0nJykKICAgICAgICBzZWxmLmhlYWQgPSBubi5IeWJyaWRTZXF1ZW50aWFsKHByZWZpeD0nJykKCiAgICAgICAgc2VsZi5jb252X2tlcm5lbC5hZGQobm4uQ29udjJEKGhpZGRlbiwga2VybmVsX3NpemU9a2VybmVsX3NpemUsIHVzZV9iaWFzPUZhbHNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubi5CYXRjaE5vcm0oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubi5BY3RpdmF0aW9uKCdyZWx1JykpCiAgICAgICAgc2VsZi5jb252X3NlYXJjaC5hZGQobm4uQ29udjJEKGhpZGRlbiwga2VybmVsX3NpemU9a2VybmVsX3NpemUsIHVzZV9iaWFzPUZhbHNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubi5CYXRjaE5vcm0oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubi5BY3RpdmF0aW9uKCdyZWx1JykpCiAgICAgICAgc2VsZi5oZWFkLmFkZChubi5Db252MkQoaGlkZGVuLCBrZXJuZWxfc2l6ZT0xLCB1c2VfYmlhcz1GYWxzZSksCiAgICAgICAgICAgICAgICAgICAgICBubi5CYXRjaE5vcm0oKSwKICAgICAgICAgICAgICAgICAgICAgIG5uLkFjdGl2YXRpb24oJ3JlbHUnKSwKICAgICAgICAgICAgICAgICAgICAgIG5uLkNvbnYyRChvdXRfY2hhbm5lbHMsIGtlcm5lbF9zaXplPTEpKQogICAgICAgIGlmIGlzX3RyYWluOgogICAgICAgICAgICBzZWxmLmtlcm5lbF9zaXplID0gW2J6LCAyNTYsIDQsIDRdCiAgICAgICAgICAgIHNlbGYuc2VhcmNoX3NpemUgPSBbYnosIDI1NiwgMjAsIDIwXQogICAgICAgICAgICBzZWxmLm91dF9zaXplID0gW2J6LCAyNTYsIDE3LCAxN10KICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLmtlcm5lbF9zaXplID0gWzEsIDI1NiwgNCwgNF0KICAgICAgICAgICAgc2VsZi5zZWFyY2hfc2l6ZSA9IFsxLCAyNTYsIDI0LCAyNF0KICAgICAgICAgICAgc2VsZi5vdXRfc2l6ZSA9IFsxLCAyNTYsIDIxLCAyMV0KCiAgICAgICAgc2VsZi5jb252X2tlcm5lbC5pbml0aWFsaXplKGN0eD1jdHgpCiAgICAgICAgc2VsZi5jb252X3NlYXJjaC5pbml0aWFsaXplKGN0eD1jdHgpCiAgICAgICAgc2VsZi5oZWFkLmluaXRpYWxpemUoY3R4PWN0eCkKCiAgICBkZWYgaHlicmlkX2ZvcndhcmQoc2VsZiwgRiwga2VybmVsLCBzZWFyY2gpOgogICAgICAgICIiImh5YnJpZF9mb3J3YXJkIiIiCiAgICAgICAga2VybmVsID0gc2VsZi5jb252X2tlcm5lbChrZXJuZWwpCiAgICAgICAgc2VhcmNoID0gc2VsZi5jb252X3NlYXJjaChzZWFyY2gpCiAgICAgICAgYmF0Y2ggPSBzZWxmLmtlcm5lbF9zaXplWzBdCiAgICAgICAgY2hhbm5lbCA9IHNlbGYua2VybmVsX3NpemVbMV0KICAgICAgICBzZWFyY2ggPSBzZWFyY2gucmVzaGFwZSgoMSwgYmF0Y2gqY2hhbm5lbCwgc2VsZi5zZWFyY2hfc2l6ZVsyXSwgc2VsZi5zZWFyY2hfc2l6ZVszXSkpCiAgICAgICAga2VybmVsID0ga2VybmVsLnJlc2hhcGUoKGJhdGNoKmNoYW5uZWwsIDEsIHNlbGYua2VybmVsX3NpemVbMl0sIHNlbGYua2VybmVsX3NpemVbM10pKQogICAgICAgIG91dCA9IEYuQ29udm9sdXRpb24oZGF0YT1zZWFyY2gsIHdlaWdodD1rZXJuZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWw9W3NlbGYua2VybmVsX3NpemVbMl0sIHNlbGYua2VybmVsX3NpemVbM11dLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9fYmlhcz1UcnVlLCBudW1fZmlsdGVyPWJhdGNoKmNoYW5uZWwsIG51bV9ncm91cD1iYXRjaCpjaGFubmVsKQogICAgICAgIG91dCA9IG91dC5yZXNoYXBlKChiYXRjaCwgY2hhbm5lbCwgc2VsZi5vdXRfc2l6ZVsyXSwgc2VsZi5vdXRfc2l6ZVszXSkpCiAgICAgICAgb3V0ID0gc2VsZi5oZWFkKG91dCkKICAgICAgICByZXR1cm4gb3V0Cgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmNsYXNzIERlcHRod2lzZVJQTihSUE4pOgogICAgIiIiRGVwdGh3aXNlUlBOCiAgICBnZXQgY2xzIGFuZCBsb2MgdGhyb3VnaHQgel9mIGFuZCB4X2YKCjx8ZmltX2VuZHw+"]
["8ec802568b26a8f2e3d2141c47695cfa8b58a1b7-2","8ec802568b26a8f2e3d2141c47695cfa8b58a1b7","PHxmaW1fcHJlZml4fD4KZnJvbSBwcm9zZW1pcnJvci5tb2RlbCBpbXBvcnQgTm9kZQoKCmRlZiBjYW5fY3V0KG5vZGUsIHN0YXJ0LCBlbmQpOgogICAgaWYgc3RhcnQgPT0gMCBvciBub2RlLmNhbl9yZXBsYWNlKHN0YXJ0LCBub2RlLmNoaWxkX2NvdW50KToKICAgICAgICByZXR1cm4gKGVuZCA9PSBub2RlLmNoaWxkX2NvdW50KSBvciBub2RlLmNhbl9yZXBsYWNlKDAsIGVuZCkKICAgIHJldHVybiBGYWxzZQoKCmRlZiBsaWZ0X3RhcmdldChyYW5nZV8pOgogICAgcGFyZW50ID0gcmFuZ2VfLnBhcmVudAogICAgY29udGVudCA9IHBhcmVudC5jb250ZW50LmN1dF9ieV9pbmRleChyYW5nZV8uc3RhcnRfaW5kZXgsIHJhbmdlXy5lbmRfaW5kZXgpCiAgICBkZXB0aCA9IHJhbmdlXy5kZXB0aAogICAgd2hpbGUgVHJ1ZToKICAgICAgICBub2RlID0gcmFuZ2VfLmZyb21fLm5vZGUoZGVwdGgpCiAgICAgICAgaW5kZXggPSByYW5nZV8uZnJvbV8uaW5kZXgoZGVwdGgpCiAgICAgICAgZW5kX2luZGV4ID0gcmFuZ2VfLnRvLmluZGV4X2FmdGVyKGRlcHRoKQogICAgICAgIGlmIGRlcHRoIDwgcmFuZ2VfLmRlcHRoIGFuZCBub2RlLmNhbl9yZXBsYWNlKGluZGV4LCBlbmRfaW5kZXgsIGNvbnRlbnQpOgogICAgICAgICAgICByZXR1cm4gZGVwdGgKICAgICAgICBpZiAoCiAgICAgICAgICAgIGRlcHRoID09IDAKICAgICAgICAgICAgb3Igbm9kZS50eXBlLnNwZWMuZ2V0KCJpc29sYXRpbmciKQogICAgICAgICAgICBvciBub3QgY2FuX2N1dChub2RlLCBpbmRleCwgZW5kX2luZGV4KQogICAgICAgICk6CiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgZGVwdGggLT0gMQoKCmRlZiBmaW5kX3dyYXBwaW5nKHJhbmdlXywgbm9kZV90eXBlLCBhdHRycz1Ob25lLCBpbm5lcl9yYW5nZT1Ob25lKToKICAgIGlmIGlubmVyX3JhbmdlIGlzIE5vbmU6CiAgICAgICAgaW5uZXJfcmFuZ2UgPSByYW5nZV8KICAgIGFyb3VuZCA9IGZpbmRfd3JhcHBpbmdfb3V0c2lkZShyYW5nZV8sIG5vZGVfdHlwZSkKICAgIGlubmVyID0gRmFsc2UKICAgIGlmIGFyb3VuZCBpcyBub3QgTm9uZToKICAgICAgICBpbm5lciA9IGZpbmRfd3JhcHBpbmdfaW5zaWRlKGlubmVyX3JhbmdlLCBub2RlX3R5cGUpCiAgICBlbHNlOgogICAgICAgIHJldHVybiBOb25lCiAgICBpZiBpbm5lciBpcyBOb25lOgogICAgICAgIHJldHVybiBOb25lCiAgICByZXR1cm4gKAogICAgICAgIFt3aXRoX2F0dHJzKGl0ZW0pIGZvciBpdGVtIGluIGFyb3VuZF0KICAgICAgICArIFt7InR5cGUiOiBub2RlX3R5cGUsICJhdHRycyI6IGF0dHJzfV0KICAgICAgICArIFt3aXRoX2F0dHJzKGl0ZW0pIGZvciBpdGVtIGluIGlubmVyXQogICAgKQoKCmRlZiB3aXRoX2F0dHJzKHR5cGUpOgogICAgcmV0dXJuIHsidHlwZSI6IHR5cGUsICJhdHRycyI6IE5vbmV9CgoKZGVmIGZpbmRfd3JhcHBpbmdfb3V0c2lkZShyYW5nZV8sIHR5cGUpOgogICAgcGFyZW50ID0gcmFuZ2VfLnBhcmVudAogICAgc3RhcnRfaW5kZXggPSByYW5nZV8uc3RhcnRfaW5kZXgKICAgIGVuZF9pbmRleCA9IHJhbmdlXy5lbmRfaW5kZXgKICAgIGFyb3VuZCA9IHBhcmVudC5jb250ZW50X21hdGNoX2F0KHN0YXJ0X2luZGV4KS5maW5kX3dyYXBwaW5nKHR5cGUpCiAgICBpZiBhcm91bmQgaXMgTm9uZToKICAgICAgICByZXR1cm4gTm9uZQogICAgb3V0ZXIgPSBhcm91bmRbMF0gaWYgbGVuKGFyb3VuZCkgYW5kIGFyb3VuZFswXSBlbHNlIHR5cGUKICAgIHJldHVybiBhcm91bmQgaWYgcGFyZW50LmNhbl9yZXBsYWNlX3dpdGgoc3RhcnRfaW5kZXgsIGVuZF9pbmRleCwgb3V0ZXIpIGVsc2UgTm9uZQoKCmRlZiBmaW5kX3dyYXBwaW5nX2luc2lkZShyYW5nZV8sIHR5cGUpOgogICAgcGFyZW50ID0gcmFuZ2VfLnBhcmVudAogICAgc3RhcnRfaW5kZXggPSByYW5nZV8uc3RhcnRfaW5kZXgKICAgIGVuZF9pbmRleCA9IHJhbmdlXy5lbmRfaW5kZXgKICAgIGlubmVyID0gcGFyZW50LmNoaWxkKHN0YXJ0X2luZGV4KQogICAgaW5zaWRlID0gdHlwZS5jb250ZW50X21hdGNoLmZpbmRfd3JhcHBpbmcoaW5uZXIudHlwZSkKICAgIGlmIGluc2lkZSBpcyBOb25lOgogICAgICAgIHJldHVybiBOb25lCiAgICBsYXN0X3R5cGUgPSBpbnNpZGVbLTFdIGlmIGxlbihpbnNpZGUpIGVsc2UgdHlwZQogICAgaW5uZXJfbWF0Y2ggPSBsYXN0X3R5cGUuY29udGVudF9tYXRjaAogICAgaSA9IHN0YXJ0X2luZGV4CiAgICB3aGlsZSBpbm5lcl9tYXRjaCBhbmQgaSA8IGVuZF9pbmRleDoKICAgICAgICBpbm5lcl9tYXRjaCA9IGlubmVyX21hdGNoLm1hdGNoX3R5cGUocGFyZW50LmNoaWxkKGkpLnR5cGUpCiAgICAgICAgaSArPSAxCiAgICBpZiBub3QgaW5uZXJfbWF0Y2ggb3Igbm90IGlubmVyX21hdGNoLnZhbGlkX2VuZDoKICAgICAgICByZXR1cm4gTm9uZQogICAgcmV0dXJuIGluc2lkZQoKCmRlZiBjYW5fY2hhbmdlX3R5cGUoZG9jLCBwb3MsIHR5cGUpOgogICAgcG9zXyA9IGRvYy5yZXNvbHZlKHBvcykKICAgIGluZGV4ID0gcG9zXy5pbmRleCgpCiAgICByZXR1cm4gcG9zXy5wYXJlbnQuY2FuX3JlcGxhY2Vfd2l0aChpbmRleCwgaW5kZXggKyAxLCB0eXBlKQoKCmRlZiBjYW5fc3BsaXQoZG9jLCBwb3MsIGRlcHRoPU5vbmUsIHR5cGVzX2FmdGVyPU5vbmUpOgogICAgaWYgZGVwdGggaXMgTm9uZToKICAgICAgICBkZXB0aCA9IDEKICAgIHBvc18gPSBkb2MucmVzb2x2ZShwb3MpCiAgICBiYXNlID0gcG9zXy5kZXB0aCAtIGRlcHRoCiAgICBpbm5lcl90eXBlID0gTm9uZQogICAgaWYgdHlwZXNfYWZ0ZXI6CiAgICAgICAgaW5uZXJfdHlwZSA9IHR5cGVzX2FmdGVyWy0xXQogICAgaWYgbm90IGlubmVyX3R5cGU6CiAgICAgICAgaW5uZXJfdHlwZSA9IHBvc18ucGFyZW50CiAgICBpZiBpc2luc3RhbmNlKGlubmVyX3R5cGUsIE5vZGUpOgogICAgICAgIGlmICgKICAgICAgICAgICAgYmFzZSA8IDAKICAgICAgICAgICAgb3IgcG9zXy5wYXJlbnQudHlwZS5zcGVjLmdldCgiaXNvbGF0aW5nIikKICAgICAgICAgICAgb3Igbm90IHBvc18ucGFyZW50LmNhbl9yZXBsYWNlKHBvc18uaW5kZXgoKSwgcG9zXy5wYXJlbnQuY2hpbGRfY291bnQpCiAgICAgICAgICAgIG9yIG5vdCBpbm5lcl90eXBlLnR5cGUudmFsaWRfY29udGVudCgKICAgICAgICAgICAgICAgIHBvc18ucGFyZW50LmNvbnRlbnQuY3V0X2J5X2luZGV4KHBvc18uaW5kZXgoKSwgcG9zXy5wYXJlbnQuY2hpbGRfY291bnQpCiAgICAgICAgICAgICkKICAgICAgICApOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgIGVsaWYgaXNpbnN0YW5jZShpbm5lcl90eXBlLCBkaWN0KToKICAgICAgICBpZiAoCiAgICAgICAgICAgIGJhc2UgPCAwCiAgICAgICAgICAgIG9yIHBvc18ucGFyZW50LnR5cGUuc3BlYy5nZXQoImlzb2xhdGluZyIpCiAgICAgICAgICAgIG9yIG5vdCBwb3NfLnBhcmVudC5jYW5fcmVwbGFjZShwb3NfLmluZGV4KCksIHBvc18ucGFyZW50LmNoaWxkX2NvdW50KQogICAgICAgICAgICBvciBub3QgaW5uZXJfdHlwZVsidHlwZSJdLnZhbGlkX2NvbnRlbnQoCiAgICAgICAgICAgICAgICBwb3NfLnBhcmVudC5jb250ZW50LmN1dF9ieV9pbmRleChwb3NfLmluZGV4KCksIHBvc18ucGFyZW50LmNoaWxkX2NvdW50KQogICAgICAgICAgICApCiAgICAgICAgKToKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICBkID0gcG9zXy5kZXB0aCAtIDEKICAgIGkgPSBkZXB0aCAtIDIKICAgIHdoaWxlIGQgPiBiYXNlOgogICAgICAgIG5vZGUgPSBwb3NfLm5vZGUoZCkKICAgICAgICBpbmRleCA9IHBvc18uaW5kZXgoZCkKICAgICAgICBpZiBub2RlLnR5cGUuc3BlYy5nZXQoImlzb2xhdGluZyIpOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICByZXN0ID0gbm9kZS5jb250ZW50LmN1dF9ieV9pbmRleChpbmRleCwgbm9kZS5jaGlsZF9jb3VudCkKICAgICAgICBhZnRlciA9IE5vbmUKICAgICAgICBpZiB0eXBlc19hZnRlciBhbmQgbGVuKHR5cGVzX2FmdGVyKSA+IGk6CiAgICAgICAgICAgIGFmdGVyID0gdHlwZXNfYWZ0ZXJbaV0KICAgICAgICBpZiBub3QgYWZ0ZXI6CiAgICAgICAgICAgIGFmdGVyID0gbm9kZQogICAgICAgIGlmIGlzaW5zdGFuY2UoYWZ0ZXIsIGRpY3QpOgogICAgICAgICAgICBpZiBhZnRlciAhPSBub2RlOgogICAgICAgICAgICAgICAgcmVzdCA9IHJlc3QucmVwbGFjZV9jaGlsZCgwLCBhZnRlclsidHlwZSJdLmNyZWF0ZShhZnRlci5nZXQoImF0dHJzIikpKQogICAgICAgICAgICBpZiBub3Qgbm9kZS5jYW5fcmVwbGFjZShpbmRleCArIDEsIG5vZGUuY2hpbGRfY291bnQpIG9yIG5vdCBhZnRlclsKICAgICAgICAgICAgICAgICJ0eXBlIgogICAgICAgICAgICBdLnZhbGlkX2NvbnRlbnQocmVzdCk6CiAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICBpZiBpc2luc3RhbmNlKGFmdGVyLCBOb2RlKToKICAgICAgICAgICAgaWYgYWZ0ZXIgIT0gbm9kZToKICAgICAgICAgICAgICAgIHJlc3QgPSByZXN0LnJlcGxhY2VfY2hpbGQoMCwgYWZ0ZXIudHlwZS5jcmVhdGUoYWZ0ZXIuYXR0cnMpKQogICAgICAgICAgICBpZiBub3Qgbm9kZS5jYW5fcmVwbGFjZSgKICAgICAgICAgICAgICAgIGluZGV4ICsgMSwgbm9kZS5jaGlsZF9jb3VudAogICAgICAgICAgICApIG9yIG5vdCBhZnRlci50eXBlLnZhbGlkX2NvbnRlbnQocmVzdCk6CiAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICBkIC09IDEKICAgICAgICBpIC09IDEKICAgIGluZGV4ID0gcG9zXy5pbmRleF9hZnRlcihiYXNlKQogICAgYmFzZV90eXBlID0gdHlwZXNfYWZ0ZXJbMF0gaWYgdHlwZXNfYWZ0ZXIgZWxzZSBOb25lCiAgICByZXR1cm4gcG9zXy5ub2RlKGJhc2UpLmNhbl9yZXBsYWNlX3dpdGgoCiAgICAgICAgaW5kZXgsIGluZGV4LCBiYXNlX3R5cGVbInR5cGUiXSBpZiBiYXNlX3R5cGUgZWxzZSBwb3NfLm5vZGUoYmFzZSArIDEpLnR5cGUKICAgICkKCgpkZWYgY2FuX2pvaW4oZG9jLCBwb3MpOgogICAgcG9zXyA9IGRvYy5yZXNvbHZlKHBvcykKICAgIGluZGV4ID0gcG9zXy5pbmRleCgpCiAgICByZXR1cm4gKAogICAgICAgIHBvc18ucGFyZW50LmNhbl9yZXBsYWNlKGluZGV4LCBpbmRleCArIDEpCiAgICAgICAgaWYgam9pbmFibGUocG9zXy5ub2RlX2JlZm9yZSwgcG9zXy5ub2RlX2FmdGVyKQogICAgICAgIGVsc2UgTm9uZQogICAgKQoKCmRlZiBqb2luYWJsZShhLCBiKToKICAgIGlmIGEgYW5kIGIgYW5kIG5vdCBhLmlzX2xlYWY6CiAgICAgICAgcmV0dXJuIGEuY2FuX2FwcGVuZChiKQogICAgcmV0dXJuIEZhbHNlCgoKZGVmIGpvaW5fcG9pbnQoZG9jLCBwb3MsIGRpcj0tMSk6CiAgICBwb3NfID0gZG9jLnJlc29sdmUocG9zKQogICAgZm9yIGQgaW4gcmFuZ2UocG9zXy5kZXB0aCwgLTEsIC0xKToKICAgICAgICBiZWZvcmUgPSBOb25lCiAgICAgICAgYWZ0ZXIgPSBOb25lCiAgICAgICAgaWYgZCA9PSBwb3NfLmRlcHRoOgogICAgICAgICAgICBiZWZvcmUgPSBwb3NfLm5vZGVfYmVmb3JlCiAgICAgICAgICAgIGFmdGVyID0gcG9zXy5ub2RlX2FmdGVyCiAgICAgICAgZWxpZiBkaXIgPiAwOgogICAgICAgICAgICBiZWZvcmUgPSBwb3NfLm5vZGUoZCArIDEpCiAgICAgICAgICAgIGFmdGVyID0gcG9zXy5ub2RlKGQpLm1heWJlX2NoaWxkKHBvc18uaW5kZXgoZCkgKyAxKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGJlZm9yZSA9IHBvc18ubm9kZShkKS5tYXliZV9jaGlsZChwb3NfLmluZGV4KGQpIC0gMSkKICAgICAgICAgICAgYWZ0ZXIgPSBwb3NfLm5vZGUoZCArIDEpCiAgICAgICAgaWYgYmVmb3JlIGFuZCBub3QgYmVmb3JlLmlzX3RleHRfYmxvY2sgYW5kIGpvaW5hYmxlKGJlZm9yZSwgYWZ0ZXIpOgogICAgICAgICAgICByZXR1cm4gcG9zCiAgICAgICAgaWYgZCA9PSAwOgogICAgICAgICAgICBicmVhawogICAgICAgIHBvcyA9IHBvc18uYmVmb3JlKGQpIGlmIGRpciA8IDAgZWxzZSBwb3NfLmFmdGVyKGQpCgoKZGVmIGluc2VydF9wb2ludChkb2MsIHBvcywgbm9kZV90eXBlKToKICAgIHBvc18gPSBkb2MucmVzb2x2ZShwb3MpCiAgICBpZiBwb3NfLnBhcmVudC5jYW5fcmVwbGFjZV93aXRoKHBvc18uaW5kZXgoKSwgcG9zXy5pbmRleCgpLCBub2RlX3R5cGUpOgogICAgICAgIHJldHVybiBwb3MKICAgIGlmIHBvc18ucGFyZW50X29mZnNldCA9PSAwOgogICAgICAgIGZvciBkIGluIHJhbmdlKHBvc18uZGVwdGggLSAxLCAtMSwgLTEpOgogICAgICAgICAgICBpbmRleCA9IHBvc18uaW5kZXgoZCkKICAgICAgICAgICAgaWYgcG9zXy5ub2RlKGQpLmNhbl9yZXBsYWNlX3dpdGgoaW5kZXgsIGluZGV4LCBub2RlX3R5cGUpOgogICAgICAgICAgICAgICAgcmV0dXJuIHBvc18uYmVmb3JlKGQgKyAxKQogICAgICAgICAgICBpZiBpbmRleCA+IDA6CiAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgaWYgcG9zXy5wYXJlbnRfb2Zmc2V0ID09IHBvc18ucGFyZW50LmNvbnRlbnQuc2l6ZToKICAgICAgICBmb3IgZCBpbiByYW5nZShwb3NfLmRlcHRoIC0gMSwgLTEsIC0xKToKICAgICAgICAgICAgaW5kZXggPSBwb3NfLmluZGV4X2FmdGVyKGQpCiAgICAgICAgICAgIGlmIHBvc18ubm9kZShkKS5jYW5fcmVwbGFjZV93aXRoKGluZGV4LCBpbmRleCwgbm9kZV90eXBlKToKICAgICAgICAgICAgICAgIHJldHVybiBwb3NfLmFmdGVyKGQgKyAxKQogICAgICAgICAgICBpZiBpbmRleCA8IHBvc18ubm9kZShkKS5jaGlsZF9jb3VudDoKICAgICAgICAgICAgICAgIHJldHVybiBOb25lCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgpkZWYgZHJvcF9wb2ludChkb2MsIHBvcywgc2xpY2UpOgogICAgcG9zXyA9IGRvYy5yZXNvbHZlKHBvcykKPHxmaW1fZW5kfD4="]
["8dc3395c1800aef99352a6e2f0af30a543fb1797-2","8dc3395c1800aef99352a6e2f0af30a543fb1797","PHxmaW1fcHJlZml4fD4KIiIiYSBtb2R1bGUgdGhhdCBzdG9yZXMgb25seSBhIGNsYXNzIGZvcgpjb21wYXJpbmcgdGhlIHJlc3VsdCBvZiBleGVjdXRpbmcgYSBjZXJ0YWluIGZ1bmN0aW9uIHdpdGggZGlmZmVyZW50IGFyZ3VtZW50cyIiIgoKaW1wb3J0IGRhdGV0aW1lCmZyb20gdHlwZXMgaW1wb3J0IEJ1aWx0aW5GdW5jdGlvblR5cGUKZnJvbSBtaXNjIGltcG9ydCBGLCBvdXRwdXQKCgpjbGFzcyBDb250YWluZXI6CiAgICAiIiJhIGNsYXNzIGZvciBjb21wYXJpbmcgdGhlIHJlc3VsdCBvZiBleGVjdXRpbmcKICAgIGEgY2VydGFpbiBmdW5jdGlvbiB3aXRoIGRpZmZlcmVudCBhcmd1bWVudHMiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuYyk6CiAgICAgICAgaWYgaXNpbnN0YW5jZShmdW5jLCBCdWlsdGluRnVuY3Rpb25UeXBlKToKICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ0aGUgY29uc3RydWN0b3IgYWNjZXB0cyBvbmx5IGZ1bmN0aW9ucyIpCiAgICAgICAgc2VsZi5fZnVuYyA9IGZ1bmMKICAgICAgICBzZWxmLl90ZXN0cyA9IFtdCiAgICAgICAgc2VsZi5fcGFzc2VkID0gMAogICAgICAgIHNlbGYuX2ZhaWxlZCA9IDAKICAgICAgICBzZWxmLl9jb3VudCA9IDEKCiAgICBkZWYgX3Byb2dyZXNzKHNlbGYsIHBhc3NlZDogYm9vbCk6CiAgICAgICAgIiIiYSBwcml2YXRlIG1ldGhvZCB0aGF0IGluY3JlYXNlcyB0aGUKICAgICAgICBpbmRpY2F0b3JzIG9mIHRoZSBudW1iZXIgb2YgdGVzdHMsCiAgICAgICAgdGVzdHMgcGFzc2VkIGFuZCBmYWlsZWQgaW5kaWNhdG9ycyIiIgogICAgICAgIGlmIHBhc3NlZDoKICAgICAgICAgICAgc2VsZi5fcGFzc2VkICs9IDEKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLl9mYWlsZWQgKz0gMQogICAgICAgIHNlbGYuX2NvdW50ICs9IDEKCiAgICBkZWYgZXF1YWwoc2VsZiwgY29tcGFyaXNvbl90aGluZywgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAiIiI9PSIiIgogICAgICAgIHNlbGYuX3Rlc3RzLmFwcGVuZChbIj09IiwgY29tcGFyaXNvbl90aGluZywgYXJncywga3dhcmdzXSkKCiAgICBkZWYgbW9yZShzZWxmLCBjb21wYXJpc29uX3RoaW5nLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICIiIj4iIiIKICAgICAgICBzZWxmLl90ZXN0cy5hcHBlbmQoWyI+IiwgY29tcGFyaXNvbl90aGluZywgYXJncywga3dhcmdzXSkKCiAgICBkZWYgbGVzcyhzZWxmLCBjb21wYXJpc29uX3RoaW5nLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICIiIjwiIiIKICAgICAgICBzZWxmLl90ZXN0cy5hcHBlbmQoWyI8IiwgY29tcGFyaXNvbl90aGluZywgYXJncywga3dhcmdzXSkKCiAgICBkZWYgbm90ZXF1YWwoc2VsZiwgY29tcGFyaXNvbl90aGluZywgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAiIiIhPSIiIgogICAgICAgIHNlbGYuX3Rlc3RzLmFwcGVuZChbIiE9IiwgY29tcGFyaXNvbl90aGluZywgYXJncywga3dhcmdzXSkKCiAgICBkZWYgcmVtb3ZlKHNlbGYsIGluZGV4OiBpbnQpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIiIiYSBtZXRob2QgdGhhdCByZW1vdmVzIGEgdGVzdCBmcm9tIHRoZSBsaXN0IG9mIHNjaGVkdWxlZCB0ZXN0cyIiIgogICAgICAgIHRyeToKICAgICAgICAgICAgZGVsIHNlbGYuX3Rlc3RzW2luZGV4IC0gMV0KICAgICAgICBleGNlcHQgSW5kZXhFcnJvciBhcyByYW5nZV9vdXQ6Cjx8ZmltX2VuZHw+"]
["d95b839798ce7a5837d83cf7397e6d3049318225-1","d95b839798ce7a5837d83cf7397e6d3049318225","PHxmaW1fcHJlZml4fD4KIiIiCkRhdGFzZXRzIGZvciB0aGUgYmVuY2htYXJrcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiIiIgoKaW1wb3J0IG51bXB5IGFzIG5wCgpzeW50aGV0aWMgPSB7CiAgICAjIEtleSAgIDogIG1ldHJpYywgICAgTnRyYWluLCBOdGVzdCwgRCwKICAgICJSXkQgYSI6ICgiZXVjbGlkZWFuIiwgMTAgKiogNCwgMTAgKiogNCwgMyksCiAgICAiUl5EIGIiOiAoImV1Y2xpZGVhbiIsIDEwICoqIDYsIDEwICoqIDQsIDMpLAogICAgIlJeRCBjIjogKCJldWNsaWRlYW4iLCAxMCAqKiA2LCAxMCAqKiA0LCAxMCksCiAgICAiUl5EIGQiOiAoImV1Y2xpZGVhbiIsIDEwICoqIDYsIDEwICoqIDQsIDEwMCksCiAgICAiUl5EIGUiOiAoImV1Y2xpZGVhbiIsIDEwICoqIDcsIDEwICoqIDQsIDEwMCksCiAgICAiUl5EIGYiOiAoIm1hbmhhdHRhbiIsIDEwICoqIDYsIDEwICoqIDQsIDEwKSwKICAgICJSXkQgZyI6ICgibWFuaGF0dGFuIiwgMTAgKiogNiwgMTAgKiogNCwgMTAwKSwKICAgICJTXntELTF9IjogKCJhbmd1bGFyIiwgMTAgKiogNiwgMTAgKiogNCwgMTApLAogICAgIkheRCI6ICgiaHlwZXJib2xpYyIsIDEwICoqIDYsIDEwICoqIDQsIDEwKSwKfQoKZG93bmxvYWRlZCA9IHsKICAgICMgS2V5ICAgICA6ICAgIG1ldHJpYywgZmlsZW5hbWUsIGRvX2NoZWNrCiAgICAiTU5JU1QgYSI6ICgiZXVjbGlkZWFuIiwgIm1uaXN0LTc4NC1ldWNsaWRlYW4uaGRmNSIsIFRydWUpLAogICAgIk1OSVNUIGIiOiAoIm1hbmhhdHRhbiIsICJtbmlzdC03ODQtZXVjbGlkZWFuLmhkZjUiLCBGYWxzZSksCiAgICAiR2xvVmUyNSI6ICgiYW5ndWxhciIsICJnbG92ZS0yNS1hbmd1bGFyLmhkZjUiLCBUcnVlKSwKICAgICJHbG9WZTEwMCI6ICgiYW5ndWxhciIsICJnbG92ZS0xMDAtYW5ndWxhci5oZGY1IiwgVHJ1ZSksCn0KCgpkZWYgZ2V0X2RhdGFzZXQoa2V5KToKCiAgICBkYXRhX2ZvbGRlciA9ICIiICAjJy4uL2RhdGEvJwoKICAgIGZpbGVuYW1lID0gTm9uZQoKICAgIHRydWVfaW5kaWNlcyA9IE5vbmUKICAgIHRydWVfdmFsdWVzID0gTm9uZQoKICAgIGlmIGtleSBpbiBzeW50aGV0aWMua2V5cygpOgogICAgICAgIG1ldHJpYywgTnRyYWluLCBOdGVzdCwgRCA9IHN5bnRoZXRpY1trZXldCgogICAgICAgIGlmIG1ldHJpYyA9PSAiaHlwZXJib2xpYyI6CiAgICAgICAgICAgIHhfdHJhaW4gPSAwLjUgKyBucC5yYW5kb20ucmFuZChOdHJhaW4sIEQpCiAgICAgICAgICAgIHhfdGVzdCA9IDAuNSArIG5wLnJhbmRvbS5yYW5kKE50ZXN0LCBEKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHhfdHJhaW4gPSBucC5yYW5kb20ucmFuZG4oTnRyYWluLCBEKQogICAgICAgICAgICB4X3Rlc3QgPSBucC5yYW5kb20ucmFuZG4oTnRlc3QsIEQpCgogICAgZWxzZToKICAgICAgICBtZXRyaWMsIGZpbGVuYW1lLCBkb19jaGVjayA9IGRvd25sb2FkZWRba2V5XQoKICAgICAgICBpbXBvcnQgaDVweQoKICAgICAgICBmID0gaDVweS5GaWxlKGRhdGFfZm9sZGVyICsgZmlsZW5hbWUsICJyIikKICAgICAgICB4X3RyYWluID0gZlsidHJhaW4iXVsoKV0KICAgICAgICB4X3Rlc3QgPSBmWyJ0ZXN0Il1bKCldCiAgICAgICAgdHJ1ZV9pbmRpY2VzID0gZlsibmVpZ2hib3JzIl1bKCldCiAgICAgICAgdHJ1ZV92YWx1ZXMgPSBmWyJkaXN0YW5jZXMiXVsoKV0KCiAgICAjIMKgV2l0aCB0aGUgYW5ndWxhciBtZXRyaWMsIGFsbCB0aGUgcG9pbnRzIGFyZSBub3JtYWxpemVkOgogICAgaWYgbWV0cmljID09ICJhbmd1bGFyIjoKICAgICAgICB4X3RyYWluIC89IG5wLmxpbmFsZy5ub3JtKHhfdHJhaW4sIGF4aXM9MSwga2VlcGRpbXM9VHJ1ZSkKICAgICAgICB4X3Rlc3QgLz0gbnAubGluYWxnLm5vcm0oeF90ZXN0LCBheGlzPTEsIGtlZXBkaW1zPVRydWUpCgogICAgeF90cmFpbiA9IHhfdHJhaW4uYXN0eXBlKCJmbG9hdDMyIikKICAgIHhfdGVzdCA9IHhfdGVzdC5hc3R5cGUoImZsb2F0MzIiKQoKICAgIHJldHVybiB7CiAgICAgICAgInRyYWluIjogeF90cmFpbiwKICAgICAgICAidGVzdCI6IHhfdGVzdCwKICAgICAgICAibWV0cmljIjogbWV0cmljLAogICAgICAgICJvdXRwdXQiOiB0cnVlX2luZGljZXMsCiAgICAgICAgIyAidHJ1ZV9kaXN0YW5jZXMiOiB0cnVlX3ZhbHVlcywKICAgIH0KCgpmcm9tIGJlbmNobWFya191dGlscyBpbXBvcnQgdGVuc29yCmZyb20gcHlrZW9wcy50b3JjaCBpbXBvcnQgTGF6eVRlbnNvcgoKCmRlZiBncm91bmRfdHJ1dGgoeF90cmFpbiwgeF90ZXN0LCBLLCBtZXRyaWMpOgogICAgIyBTZXR1cCB0aGUgSy1OTiBlc3RpbWF0b3I6CiAgICB4X3RyYWluID0gdGVuc29yKHhfdHJhaW4pCiAgICB4X3Rlc3QgPSB0ZW5zb3IoeF90ZXN0KQoKICAgICMgRW5jb2RpbmcgYXMgS2VPcHMgTGF6eVRlbnNvcnM6CiAgICBYX2kgPSBMYXp5VGVuc29yKHhfdGVzdFs6LCBOb25lLCA6XSkKICAgIFhfaiA9IExhenlUZW5zb3IoeF90cmFpbltOb25lLCA6LCA6XSkKCiAgICAjIFN5bWJvbGljIGRpc3RhbmNlIG1hdHJpeDoKICAgIGlmIG1ldHJpYyA9PSAiZXVjbGlkZWFuIjoKICAgICAgICBEX2lqID0gKChYX2kgLSBYX2opICoqIDIpLnN1bSgtMSkKICAgIGVsaWYgbWV0cmljID09ICJtYW5oYXR0YW4iOgogICAgICAgIERfaWogPSAoWF9pIC0gWF9qKS5hYnMoKS5zdW0oLTEpCiAgICBlbGlmIG1ldHJpYyA9PSAiYW5ndWxhciI6CiAgICAgICAgRF9paiA9IC0oWF9pIHwgWF9qKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBlbGlmIG1ldHJpYyA9PSAiaHlwZXJib2xpYyI6CiAgICAgICAgRF9paiA9ICgoWF9pIC0gWF9qKSAqKiAyKS5zdW0oLTEpIC8gKFhfaVswXSAqIFhfalswXSkKCiAgICAjIEstTk4gcXVlcnk6Cjx8ZmltX2VuZHw+"]
["a47b5dc19f2aef93297249788065a8110dc0a760-2","a47b5dc19f2aef93297249788065a8110dc0a760","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcHJpbnQoIlZlbGtvbW1lbiB0aWwgRGlnaXRhbGUgU3lzdGVtZXIiKQo8fGZpbV9lbmR8Pg=="]
["7009479a493890fbf449a70586a649fdc5b1c195-2","7009479a493890fbf449a70586a649fdc5b1c195","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgb3MKaW1wb3J0IHN5cwppbXBvcnQgYXJncGFyc2UKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdApmcm9tIG1hdHBsb3RsaWIucHlwbG90IGltcG9ydCBQb2x5Z29uCgpmLCBheCA9IHBsdC5zdWJwbG90cygpCgpkZWYgcGxvdFBvbHkoZmlsZSk6Cjx8ZmltX2hvbGV8PgogICAgeHMgPSBbXQogICAgeXMgPSBbXQogICAgZm9yIGkgaW4gcmFuZ2UoMSwgbisxKToKICAgICAgICB4LCB5ID0gbGluZXNbaV0uc3BsaXQoKQogICAgICAgIHgsIHkgPSBmbG9hdCh4KSwgZmxvYXQoeSkKICAgICAgICB4eS5hcHBlbmQoW3gsIHldKQogICAgICAgIHhzLmFwcGVuZCh4KQogICAgICAgIHlzLmFwcGVuZCh5KQogICAgcG9pbnRTaXplID0gMgogICAgaWYgbGVuKHh5KSA8IDUwMDogcG9pbnRTaXplID0gMjAKICAgIGVsaWYgbGVuKHh5KSA8IDEwMDogcG9pbnRTaXplID0gMzUKICAgIHBsdC5zY2F0dGVyKHhzLCB5cywgcz1wb2ludFNpemUsIGxhYmVsPSJBbGwgcG9pbnRzIikKCgpkZWYgbWFpbihmaWxlKToKICAgIHggPSBbXQogICAgeSA9IFtdCiAgICB4eSA9IFtdCiAgICBmb3IgbGluZSBpbiBmaWxlOgogICAgICAgIHByaW50KGxpbmUsIGVuZD0nJykKICAgICAgICBpZiBub3QgKGxpbmVbMF09PScoJyBvciAnMCc8PWxpbmVbMF08PSc5Jyk6IGNvbnRpbnVlCiAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgnLCcsICcgJykucmVwbGFjZSgnKCcsICcgJykucmVwbGFjZSgnKScsICcgJykuc3BsaXQoKQogICAgICAgIGxpbmUgPSBbIGZsb2F0KGspIGZvciBrIGluIGxpbmUgXQogICAgICAgIHguYXBwZW5kKGxpbmVbMF0pCiAgICAgICAgeS5hcHBlbmQobGluZVsxXSkKICAgICAgICB4eS5hcHBlbmQoW2xpbmVbMF0sIGxpbmVbMV1dKQogICAgcG9seWdvbiA9IFBvbHlnb24oeHksIGVkZ2Vjb2xvcj0ncmVkJywgZmlsbD1Ob25lLCBsYWJlbD0iQ29udmV4IGh1bGwiKQogICAgYXguYWRkX3BhdGNoKHBvbHlnb24pCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdwaXBlIHBvaW50cyB0byBzdGRpbiBvciBwcm92aWRlIGZpbGUgYXMgYXJndW1lbnQgdG8gcGxvdCcpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdvdXRwdXRGaWxlJywgbmFyZ3M9Jz8nLCBkZWZhdWx0PU5vbmUsIGhlbHA9J29wdGlvbmFsIG91dHB1dCB0byByZWFkIGZyb20gZmlsZS4gaWYgcHJvdmlkZWQsIC1vIG9wdGlvbiBpcyBpZ25vcmVkJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1pJywgJy0taW5wdXQnLCBkZWZhdWx0PU5vbmUsIGhlbHA9J29wdGlvbmFsIGlucHV0IGZpbGUgd2hpY2ggaGFzIHRoZSBvcmlnaW5hbCBwb2x5Z29uJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1vJywgJy0tb3V0cHV0JywgZGVmYXVsdD1Ob25lLCBoZWxwPSdvcHRpb25hbCBvdXRwdXQgZmlsZSBmcm9tIHRoZSBwcm9ncmFtLCBpZiBub3QgZ2l2ZW4sIHN0ZGluIGlzIGFzc3VtZWQnKQogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKICAgIG91dEZpbGUgPSBhcmdzLm91dHB1dEZpbGUgb3IgYXJncy5vdXRwdXQKICAgIGluRmlsZSA9IGFyZ3MuaW5wdXQKICAgIGlmIG91dEZpbGUgPT0gTm9uZToKICAgICAgICBmaWxlID0gc3lzLnN0ZGluCiAgICBlbHNlOgogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvdXRGaWxlKToKICAgICAgICAgICAgcHJpbnQoJ3Byb3ZpZGVkIG91dHB1dCBmaWxlcGF0aCBpcyBpbnZhbGlkJykKICAgICAgICAgICAgZXhpdCgxKQogICAgICAgIGZpbGUgPSBvcGVuKG91dEZpbGUsICdyJykKICAgIGlmIGluRmlsZSAhPSBOb25lIGFuZCBvcy5wYXRoLmV4aXN0cyhpbkZpbGUpOgogICAgICAgIGluRmlsZSA9IG9wZW4oaW5GaWxlLCAncicpCiAgICAjIHRyeToKICAgIG1haW4oZmlsZSkKICAgIGlmIGluRmlsZSAhPSBOb25lOiBwbG90UG9seShpbkZpbGUpCiAgICBwbHQueGxhYmVsKCJYIGF4aXMiKQogICAgcGx0LnlsYWJlbCgiWSBheGlzIikKICAgIHBsdC50aXRsZSgiQ29tcHV0ZWQgQ29udmV4IEh1bGwiKQogICAgcGx0LmxlZ2VuZCgpCiAgICBwbHQucGxvdCgpCiAgICBwbHQuc2hvdygpCiAgICAjIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICMgICAgIGZpbGUuY2xvc2UoKQogICAgIyAgICAgaWYgaW5GaWxlICE9IE5vbmU6IGluRmlsZS5jbG9zZSgpCiAgICAjICAgICBwcmludChlKQogICAgIyAgICAgcHJpbnQoJ0VuY291bnRlcmVkIGVycm9yLCBxdWl0dGluZy4uLicpCjx8ZmltX3N1ZmZpeHw+CiAgICBsaW5lcyA9IFtdCiAgICBsaW5lcyA9IGZpbGUucmVhZGxpbmVzKCkKICAgIG4gPSBpbnQobGluZXNbMF0uc3RyaXAoKSk7CiAgICB4eSA9IFtdCjx8ZmltX2VuZHw+"]
["8e886eb22c417e8c764f876f3b047b834555b985-1","8e886eb22c417e8c764f876f3b047b834555b985","PHxmaW1fcHJlZml4fD4KIyBlbmNvZGluZyB1dGYtOAppbXBvcnQgdG9yY2gKZnJvbSB0b3JjaCBpbXBvcnQgbm4KZnJvbSBpdGVydG9vbHMgaW1wb3J0IHJlcGVhdAoKCmNsYXNzIFNwYXRpYWxEcm9wb3V0KG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgcF9kcm9wb3V0KToKICAgICAgICBzdXBlcihTcGF0aWFsRHJvcG91dCwgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYucF9kcm9wb3V0ID0gcF9kcm9wb3V0CgogICAgZGVmIGZvcndhcmQoc2VsZiwgaW5wdXRzOiB0b3JjaC5GbG9hdFRlbnNvcik6Cjx8ZmltX2hvbGV8PgoKICAgIGRlZiBfbWFrZV9ub2lzZShzZWxmLCBpbnB1dHM6IHRvcmNoLkZsb2F0VGVuc29yKSAtPiB0b3JjaC5UZW5zb3I6CiAgICAgICAgIiIiCiAgICAgICAg5Lqn55Sf5LiA5Liqbm9pc2UsIOadpeiHqmlucHV06L+Z5LiqdGVuc29yCiAgICAgICAgICAgIOebuOWQjOeahHR5cGUsIOebuOWQjOeahGRldmljZQoKICAgICAgICBBcmdzOgogICAgICAgICAgICBpbnB1dCAodG9yY2guRmxvYXRUZW5zb3IpOiDovpPlhaXnmoTlvKDph48KICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICB0b3JjaC5UZW5zb3I6IOS6p+eUn+eahG5vaXNl5byg6YePCiAgICAgICAgIiIiCiAgICAgICAgbm9pc2UgPSBpbnB1dHMubmV3KCkKICAgICAgICBub2lzZS5yZXNpemVfKGlucHV0cy5zaXplKClbMF0sICpyZXBlYXQoMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzLmRpbSgpLTIpLAogICAgICAgICAgICAgICAgICAgICAgaW5wdXRzLnNpemUoKVstMV0pCiAgICAgICAgaWYgc2VsZi5wX2Ryb3BvdXQgPT0gMToKICAgICAgICAgICAgcmV0dXJuIG5vaXNlLmZpbGxfKDApLmV4cGFuZF9hcyhpbnB1dHMpCiAgICAgICAgbm9pc2UuYmVybm91bGxpXygxLXNlbGYucF9kcm9wb3V0KS5kaXZfKDEtc2VsZi5wX2Ryb3BvdXQpCiAgICAgICAgcmV0dXJuIG5vaXNlLmV4cGFuZF9hcyhpbnB1dHMpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHNwYXRpYWxfZHJvcG91dCA9IFNwYXRpYWxEcm9wb3V0KDAuMikKICAgIGJhdGNoX3RlbnNvciA9IHRvcmNoLnJhbmRuKHNpemU9KDMsIDQsIDUpKQogICAgb3V0X3RlbnNvciA9IHNwYXRpYWxfZHJvcG91dChiYXRjaF90ZW5zb3IpCiAgICBwcmludChvdXRfdGVuc29yKQogICAgcHJpbnQob3V0X3RlbnNvci5zaGFwZSkKPHxmaW1fc3VmZml4fD4KICAgICAgICBpZiAobm90IHNlbGYudHJhaW5pbmcpIG9yIHNlbGYucF9kcm9wb3V0ID09IDAuMDoKICAgICAgICAgICAgcmV0dXJuIGlucHV0CiAgICAgICAgbm9pc2UgPSBzZWxmLl9tYWtlX25vaXNlKGlucHV0cykKICAgICAgICByZXR1cm4gdG9yY2gubXVsKGlucHV0cywgbm9pc2UpCjx8ZmltX2VuZHw+"]
["8db167928284d785d849908bf4536700ba23635a-1","8db167928284d785d849908bf4536700ba23635a","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiRmFsY29uIGFwcCB1c2VkIGZvciB0ZXN0aW5nLiIiIgojIHN0YW5kYXJkIGxpYnJhcnkKaW1wb3J0IG9zCgojIHRoaXJkLXBhcnR5CmltcG9ydCBmYWxjb24KCiMgZmlyc3QtcGFydHkKZnJvbSBmYWxjb25fcHJvdmlkZXJfY2FjaGUubWlkZGxld2FyZSBpbXBvcnQgQ2FjaGVNaWRkbGV3YXJlCmZyb20gZmFsY29uX3Byb3ZpZGVyX2NhY2hlLnV0aWxzIGltcG9ydCBNZW1jYWNoZVByb3ZpZGVyCgojIE1lbWNhY2hlZApNRU1DQUNIRV9IT1NUID0gb3MuZ2V0ZW52KCdNRU1DQUNIRV9IT1NUJywgJ2xvY2FsaG9zdCcpCk1FTUNBQ0hFX1BPUlQgPSBpbnQob3MuZ2V0ZW52KCdNRU1DQUNIRV9QT1JUJywgJzExMjExJykpCm1lbWNhY2hlX3Byb3ZpZGVyID0gTWVtY2FjaGVQcm92aWRlcihzZXJ2ZXI9KE1FTUNBQ0hFX0hPU1QsIE1FTUNBQ0hFX1BPUlQpKQoKCmNsYXNzIE1lbWNhY2hlRW5hYmxlUmVzb3VyY2U6CiAgICAiIiJNZW1jYWNoZSBtaWRkbGV3YXJlIHRlc3RpbmcgcmVzb3VyY2UuIiIiCgogICAgY2FjaGVfY29udHJvbCA9IHsKICAgICAgICAnZW5hYmxlZCc6IFRydWUsCiAgICAgICAgJ21ldGhvZHMnOiBbJ0dFVCddLAogICAgICAgICdwcml2YXRlJzogRmFsc2UsCiAgICAgICAgJ3RpbWVvdXQnOiAyLAogICAgICAgICd1c2VfcXVlcnknOiBUcnVlLAogICAgfQoKICAgIGRlZiBvbl9nZXQoCiAgICAgICAgc2VsZiwgcmVxOiBmYWxjb24uUmVxdWVzdCwgcmVzcDogZmFsY29uLlJlc3BvbnNlLAogICAgKTogICMgcHlsaW50OiBkaXNhYmxlPW5vLXNlbGYtdXNlCiAgICAgICAgIiIiU3VwcG9ydCBHRVQgbWV0aG9kLiIiIgogICAgICAgIGtleTogc3RyID0gcmVxLmdldF9wYXJhbSgna2V5JykKICAgICAgICByZXNwLmJvZHkgPSBmJ3trZXl9LXdvcmtlZCcKICAgICAgICByZXNwLnN0YXR1c19jb2RlID0gZmFsY29uLkhUVFBfT0sKCgphcHBfbWVtY2FjaGVfZW5hYmxlZCA9IGZhbGNvbi5BUEkobWlkZGxld2FyZT1bQ2FjaGVNaWRkbGV3YXJlKG1lbWNhY2hlX3Byb3ZpZGVyKV0pCmFwcF9tZW1jYWNoZV9lbmFibGVkLmFkZF9yb3V0ZSgnL21pZGRsZXdhcmUnLCBNZW1jYWNoZUVuYWJsZVJlc291cmNlKCkpCgoKY2xhc3MgTWVtY2FjaGVHbG9iYWxSZXNvdXJjZToKICAgICIiIk1lbWNhY2hlIG1pZGRsZXdhcmUgdGVzdGluZyByZXNvdXJjZS4iIiIKCiAgICBjYWNoZV9jb250cm9sID0gewogICAgICAgICdlbmFibGVkJzogVHJ1ZSwKICAgICAgICAnbWV0aG9kcyc6IFsnR0VUJ10sCiAgICAgICAgJ3ByaXZhdGUnOiBUcnVlLAogICAgICAgICd0aW1lb3V0JzogMiwKICAgICAgICAndXNlX3F1ZXJ5JzogVHJ1ZSwKICAgIH0KCiAgICBkZWYgb25fZ2V0KAogICAgICAgIHNlbGYsIHJlcTogZmFsY29uLlJlcXVlc3QsIHJlc3A6IGZhbGNvbi5SZXNwb25zZSwKICAgICk6ICAjIHB5bGludDogZGlzYWJsZT1uby1zZWxmLXVzZQogICAgICAgICIiIlN1cHBvcnQgR0VUIG1ldGhvZC4iIiIKICAgICAgICBrZXk6IHN0ciA9IHJlcS5nZXRfcGFyYW0oJ2tleScpLnNwbGl0KCcsJylbMF0KICAgICAgICByZXNwLmJvZHkgPSBmJ3trZXl9LXdvcmtlZCcKICAgICAgICByZXNwLnN0YXR1c19jb2RlID0gZmFsY29uLkhUVFBfT0sKCgpjYWNoZV9jb250cm9sID0gewogICAgJ2VuYWJsZWQnOiBUcnVlLAogICAgJ21ldGhvZHMnOiBbJ0dFVCddLAogICAgJ3ByaXZhdGUnOiBGYWxzZSwKICAgICd0aW1lb3V0JzogMzAsCiAgICAndXNlX3F1ZXJ5JzogRmFsc2UsCn0KZXJyb3JfZGF0YSA9IHsKICAgICdjb2RlJzogMTIzNCwKICAgICdkZXNjcmlwdGlvbic6ICdBbiB1bmV4cGVjdGVkIGNhY2hpbmcgZXJyb3Igb2NjdXJyZWQuJywKICAgICd0aXRsZSc6ICdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InLAp9CiMgcHJvdmlkZXIgd2l0aCBnbG9iYWwgY2FjaGVfY29udHJvbAptZW1jYWNoZV9wcm92aWRlcl9nbG9iYWxfY2FjaGVfY29udHJvbCA9IE1lbWNhY2hlUHJvdmlkZXIoCiAgICBjYWNoZV9jb250cm9sPWNhY2hlX2NvbnRyb2wsCiAgICBlcnJvcl9kYXRhPWVycm9yX2RhdGEsCiAgICB1c2VyX2tleT0ndXNlcl9pZCcsCiAgICBzZXJ2ZXI9KE1FTUNBQ0hFX0hPU1QsIE1FTUNBQ0hFX1BPUlQpLAopCmFwcF9tZW1jYWNoZV9nbG9iYWwgPSBmYWxjb24uQVBJKAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBtaWRkbGV3YXJlPVtDYWNoZU1pZGRsZXdhcmUobWVtY2FjaGVfcHJvdmlkZXJfZ2xvYmFsX2NhY2hlX2NvbnRyb2wpXQo8fGZpbV9lbmR8Pg=="]
["248072b7700f39f41299e3a516bacc9105102231-5","248072b7700f39f41299e3a516bacc9105102231","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoKaW1wb3J0IGlvCgpmcm9tIGdvb2dsZS5jbG91ZCBpbXBvcnQgc3BlZWNoX3YxcDFiZXRhMSBhcyBzcGVlY2gKCnNwZWVjaF9maWxlID0gJ2V4YW1wbGUubXAzJwojIEVuY29kaW5nOiBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vCiMgc3BlZWNoLXRvLXRleHQvZG9jcy9yZWZlcmVuY2UvcmVzdC92MWJldGExL1JlY29nbml0aW9uQ29uZmlnCmVuY29kaW5nPXNwZWVjaC5lbnVtcy5SZWNvZ25pdGlvbkNvbmZpZy5BdWRpb0VuY29kaW5nLkFNUgpzYW1wbGVfcmF0ZV9oZXJ0ej04MDAwCiMgTGFuZ3VhZ2U6IGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS8KIyBzcGVlY2gtdG8tdGV4dC9kb2NzL2xhbmd1YWdlcwpsYW5ndWFnZV9jb2RlPSdlbi1VUycKCmNsaWVudCA9IHNwZWVjaC5TcGVlY2hDbGllbnQoKQp3aXRoIGlvLm9wZW4oc3BlZWNoX2ZpbGUsICdyYicpIGFzIGF1ZGlvX2ZpbGU6CiAgICBjb250ZW50ID0gYXVkaW9fZmlsZS5yZWFkKCkKYXVkaW8gPSBzcGVlY2gudHlwZXMuUmVjb2duaXRpb25BdWRpbyhjb250ZW50PWNvbnRlbnQpCmNvbmZpZyA9IHNwZWVjaC50eXBlcy5SZWNvZ25pdGlvbkNvbmZpZygKICAgIGVuY29kaW5nPWVuY29kaW5nLAogICAgc2FtcGxlX3JhdGVfaGVydHo9c2FtcGxlX3JhdGVfaGVydHosCiAgICBsYW5ndWFnZV9jb2RlPWxhbmd1YWdlX2NvZGUsCiAgICAjIEVuaGFuY2VkIG1vZGVscyBhcmUgb25seSBhdmFpbGFibGUgdG8gcHJvamVjdHMgdGhhdAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAjIG9wdCBpbiBmb3IgYXVkaW8gZGF0YSBjb2xsZWN0aW9uLgogICAgdXNlX2VuaGFuY2VkPVRydWUsCiAgICAjIEEgbW9kZWwgbXVzdCBiZSBzcGVjaWZpZWQgdG8gdXNlIGVuaGFuY2VkIG1vZGVsLgogICAgbW9kZWw9J3Bob25lX2NhbGwnLAo8fGZpbV9lbmR8Pg=="]
["3b0e534dde6e2dd6612e2bc4cc8c54b9376a11f8-2","3b0e534dde6e2dd6612e2bc4cc8c54b9376a11f8","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmltcG9ydCBqc29uCgppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IHhscmQKCgpVUkwgPSAiaHR0cHM6Ly93d3cubmJiLmJlL2RvYy9iZS9iZS9wcm90b2NvbC9yX2Z1bGxsaXN0X29mX2NvZGVzX2N1cnJlbnQueGxzeCIKCgpkZWYgcHJvY2VzcygpOgo8fGZpbV9ob2xlfD4KICAgIHNoZWV0ID0gYm9vay5zaGVldF9ieV9pbmRleCgwKQoKICAgIGZvciByb3cgaW4gbGlzdChzaGVldC5nZXRfcm93cygpKVsyOl06CiAgICAgICAgYmFua19jb2RlLCBiaWMsIG5hbWUsIHNlY29uZF9uYW1lID0gcm93Wzo0XQogICAgICAgIGlmIGJpYy52YWx1ZS51cHBlcigpIGluIHNraXBfbmFtZXM6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgcmVnaXN0cnkuYXBwZW5kKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiY291bnRyeV9jb2RlIjogIkJFIiwKICAgICAgICAgICAgICAgICJwcmltYXJ5IjogVHJ1ZSwKICAgICAgICAgICAgICAgICJiaWMiOiBiaWMudmFsdWUudXBwZXIoKS5yZXBsYWNlKCIgIiwgIiIpLAogICAgICAgICAgICAgICAgImJhbmtfY29kZSI6IGJhbmtfY29kZS52YWx1ZSwKICAgICAgICAgICAgICAgICJuYW1lIjogbmFtZS52YWx1ZSBvciBzZWNvbmRfbmFtZS52YWx1ZSwKICAgICAgICAgICAgICAgICJzaG9ydF9uYW1lIjogbmFtZS52YWx1ZSBvciBzZWNvbmRfbmFtZS52YWx1ZSwKICAgICAgICAgICAgfQogICAgICAgICkKICAgIHJldHVybiByZWdpc3RyeQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICB3aXRoIG9wZW4oInNjaHdpZnR5L2JhbmtfcmVnaXN0cnkvZ2VuZXJhdGVkX2JlLmpzb24iLCAidyIpIGFzIGZwOgogICAgICAgIGpzb24uZHVtcChwcm9jZXNzKCksIGZwLCBpbmRlbnQ9MikKPHxmaW1fc3VmZml4fD4KICAgIHJlZ2lzdHJ5ID0gW10KICAgIHNraXBfbmFtZXMgPSBbIk5BViIsICJWUklKIiwgIk5BUCIsICJOWUEiLCAiVlJJSiAtIExJQlJFIiwgIi0iXQoKICAgIGJvb2sgPSB4bHJkLm9wZW5fd29ya2Jvb2soZmlsZV9jb250ZW50cz1yZXF1ZXN0cy5nZXQoVVJMKS5jb250ZW50KQo8fGZpbV9lbmR8Pg=="]
["30a33c9a48e97b91cc6fdd312684a3e551d641d9-2","30a33c9a48e97b91cc6fdd312684a3e551d641d9","PHxmaW1fcHJlZml4fD4KIiIiUGFuU2ltIERpc2Vhc2UgTW9kZWwuIiIiCgppbXBvcnQgcmFuZG9tCgppbXBvcnQgdG9tbAppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gLnNhbXBsZXIgaW1wb3J0IEZpeGVkU2FtcGxlciwgQ2F0ZWdvcmljYWxTYW1wbGVyCgojIGZyb20gLnZpc2l0X2NvbXB1dGF0aW9uX3B5IGltcG9ydCAoCiMgICAgICAgICBjb21wdXRlX3Zpc2l0X291dHB1dF9weSBhcyBjb21wdXRlX3Zpc2l0X291dHB1dCwKIyAgICAgICAgIFNUQVJUX0VWRU5ULAojICAgICAgICAgRU5EX0VWRU5UCiMgKQpmcm9tIC52aXNpdF9jb21wdXRhdGlvbl9jeSBpbXBvcnQgKAogICAgY29tcHV0ZV92aXNpdF9vdXRwdXRfY3kgYXMgY29tcHV0ZV92aXNpdF9vdXRwdXQsCiAgICBTVEFSVF9FVkVOVCwKICAgIEVORF9FVkVOVCwKKQoKIyBmcm9tIGxpbmVfcHJvZmlsZXIgaW1wb3J0IExpbmVQcm9maWxlcgojIHByb2ZpbGUgPSBMaW5lUHJvZmlsZXIoKQoKClNFRURfTUlOID0gbnAuaWluZm8obnAuaW50NjQpLm1pbgpTRUVEX01BWCA9IG5wLmlpbmZvKG5wLmludDY0KS5tYXgKTlVMTF9TVEFURSA9IC0xCk5VTExfRFdFTExfVElNRSA9IC0xCgoKZGVmIHBzdW0ocHMsIGF4aXM9LTEpOgogICAgIiIiQWRkIHRoZSBwcm9iYWJpbGl0ZXMuIiIiCiAgICBwcyA9IDEuMCAtIHBzCiAgICBwcyA9IG5wLnByb2R1Y3QocHMsIGF4aXM9YXhpcykKICAgIHBzID0gMS4wIC0gcHMKICAgIHJldHVybiBwcwoKCmNsYXNzIERpc2Vhc2VNb2RlbDoKICAgICIiIlRoZSBkaXNlYXNlIG1vZGVsIHN0cnVjdHVyZS4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgZm5hbWU9Tm9uZSwgbW9kZWxfZGljdD1Ob25lKToKICAgICAgICAiIiJJbml0aWFsaXplLiIiIgogICAgICAgIGlmIChmbmFtZSBpcyBOb25lKSA9PSAobW9kZWxfZGljdCBpcyBOb25lKToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAgICJPbmUgYW5kIG9ubHkgb25lIG9mICdmbmFtZScgb3IgJ21vZGVsX2RpY3QnIG11c3QgYmUgcHJvdmlkZWQuIgogICAgICAgICAgICApCgogICAgICAgIGlmIGZuYW1lIGlzIG5vdCBOb25lOgogICAgICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICJydCIpIGFzIGZvYmo6CiAgICAgICAgICAgICAgICBtb2RlbF9kaWN0ID0gdG9tbC5sb2FkKGZvYmopCgogICAgICAgIHNlbGYuZm5hbWUgPSBmbmFtZQogICAgICAgIHNlbGYubW9kZWxfZGljdCA9IG1vZGVsX2RpY3QKCiAgICAgICAgc2VsZi5uYW1lX3N0YXRlID0ge3M6IGkgZm9yIGksIHMgaW4gZW51bWVyYXRlKG1vZGVsX2RpY3RbInN0YXRlcyJdKX0KICAgICAgICBzZWxmLm5hbWVfZ3JvdXAgPSB7ZzogaSBmb3IgaSwgZyBpbiBlbnVtZXJhdGUobW9kZWxfZGljdFsiZ3JvdXBzIl0pfQogICAgICAgIHNlbGYubmFtZV9iZWhhdmlvciA9IHtiOiBpIGZvciBpLCBiIGluIGVudW1lcmF0ZShtb2RlbF9kaWN0WyJiZWhhdmlvcnMiXSl9CgogICAgICAgIHNlbGYubl9zdGF0ZXMgPSBsZW4obW9kZWxfZGljdFsic3RhdGVzIl0pCiAgICAgICAgc2VsZi5uX2dyb3VwcyA9IGxlbihtb2RlbF9kaWN0WyJncm91cHMiXSkKICAgICAgICBzZWxmLm5fYmVoYXZpb3JzID0gbGVuKG1vZGVsX2RpY3RbImJlaGF2aW9ycyJdKQoKICAgICAgICBzZWxmLnVuaXRfdGltZSA9IGZsb2F0KG1vZGVsX2RpY3RbInVuaXRfdGltZSJdKQogICAgICAgIHNlbGYuZXhwb3NlZF9zdGF0ZSA9IHNlbGYubmFtZV9zdGF0ZVttb2RlbF9kaWN0WyJleHBvc2VkX3N0YXRlIl1dCgogICAgICAgIHNlbGYuc3VjY2VwdGliaWxpdHkgPSBzZWxmLl9jb21wdXRlX3N1Y2NlcHRpYmlsaXR5KCkKICAgICAgICAjIHByaW50KHNlbGYuc3VjY2VwdGliaWxpdHkpCiAgICAgICAgc2VsZi5pbmZlY3Rpdml0eSA9IHNlbGYuX2NvbXB1dGVfaW5mZWN0aXZpdHkoKQogICAgICAgICMgcHJpbnQoc2VsZi5pbmZlY3Rpdml0eSkKICAgICAgICBzZWxmLnRyYW5zbWlzc2lvbl9wcm9iID0gc2VsZi5fY29tcHV0ZV90cmFuc21pc3Npb25fcHJvYigpCiAgICAgICAgIyBwcmludChzZWxmLnRyYW5zbWlzc2lvbl9wcm9iKQoKICAgICAgICBzZWxmLnByb2dyZXNzaW9uID0gc2VsZi5fY29tcHV0ZV9wcm9ncmVzc2lvbigpCiAgICAgICAgc2VsZi5kd2VsbF90aW1lID0gc2VsZi5fY29tcHV0ZV9kd2VsbF90aW1lKCkKCiAgICAjIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgIyAgICAgcHJvZmlsZS5kdW1wX3N0YXRzKCJsaW5lcHJvZi5scHJvZiIpCgogICAgZGVmIF9jb21wdXRlX3N1Y2NlcHRpYmlsaXR5KHNlbGYpOgogICAgICAgICIiIkNvbXB1dGUgdGhlIHN1Y2NlcHRpYmlsaXR5IG1hdHJpeC4iIiIKICAgICAgICBzaGFwZSA9IChzZWxmLm5fc3RhdGVzLCBzZWxmLm5fZ3JvdXBzKQogICAgICAgIHN1Y2NlcHRpYmlsaXR5ID0gbnAuemVyb3Moc2hhcGUsIGR0eXBlPW5wLmZsb2F0NjQpCgogICAgICAgIHN0YXRlcyA9IHNlbGYubW9kZWxfZGljdFsic3RhdGVzIl0KICAgICAgICBncm91cHMgPSBzZWxmLm1vZGVsX2RpY3RbImdyb3VwcyJdCiAgICAgICAgc2RpY3QgPSBzZWxmLm1vZGVsX2RpY3RbInN1Y2NlcHRpYmlsaXR5Il0KCiAgICAgICAgZm9yIHN0YXRlLCBzbmFtZSBpbiBlbnVtZXJhdGUoc3RhdGVzKToKICAgICAgICAgICAgZm9yIGdyb3VwLCBnbmFtZSBpbiBlbnVtZXJhdGUoZ3JvdXBzKToKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICBzdWNjZXB0aWJpbGl0eVtzdGF0ZV1bZ3JvdXBdID0gc2RpY3Rbc25hbWVdW2duYW1lXQogICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgICAgICAgIHBhc3MKCiAgICAgICAgcmV0dXJuIHN1Y2NlcHRpYmlsaXR5CgogICAgZGVmIF9jb21wdXRlX2luZmVjdGl2aXR5KHNlbGYpOgogICAgICAgICIiIkNvbXB1dGUgdGhlIGluZmVjdGl2aXR5IG1hdHJpeC4iIiIKICAgICAgICBzaGFwZSA9IChzZWxmLm5fc3RhdGVzLCBzZWxmLm5fZ3JvdXBzKQogICAgICAgIGluZmVjdGl2aXR5ID0gbnAuemVyb3Moc2hhcGUsIGR0eXBlPW5wLmZsb2F0NjQpCgogICAgICAgIHN0YXRlcyA9IHNlbGYubW9kZWxfZGljdFsic3RhdGVzIl0KICAgICAgICBncm91cHMgPSBzZWxmLm1vZGVsX2RpY3RbImdyb3VwcyJdCiAgICAgICAgaWRpY3QgPSBzZWxmLm1vZGVsX2RpY3RbImluZmVjdGl2aXR5Il0KCiAgICAgICAgZm9yIHN0YXRlLCBzbmFtZSBpbiBlbnVtZXJhdGUoc3RhdGVzKToKICAgICAgICAgICAgZm9yIGdyb3VwLCBnbmFtZSBpbiBlbnVtZXJhdGUoZ3JvdXBzKToKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICBpbmZlY3Rpdml0eVtzdGF0ZV1bZ3JvdXBdID0gaWRpY3Rbc25hbWVdW2duYW1lXQogICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgcGFzcwoKPHxmaW1fZW5kfD4="]
["5c39caaf8dfdc86984f341a052f77a08b70ad1be-1","5c39caaf8dfdc86984f341a052f77a08b70ad1be","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBjc3YKaW1wb3J0IG9zCmltcG9ydCBwbGF0Zm9ybQppbXBvcnQgcmUKCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0LCBVc2VyRGljdAoKaW1wb3J0IHB5dGFibGV3cml0ZXIKCmNsYXNzIFJlc3VsdDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1pbmcsIHBhcnNlZF92YWx1ZSwgZXhjZXB0aW9uLCBtYXRjaGVkX2V4cGVjdGVkKToKICAgICAgICBzZWxmLnRpbWluZyA9IHRpbWluZwogICAgICAgIHNlbGYucGFyc2VkX3ZhbHVlID0gcGFyc2VkX3ZhbHVlCiAgICAgICAgc2VsZi5leGNlcHRpb24gPSBleGNlcHRpb24KICAgICAgICBzZWxmLm1hdGNoZWRfZXhwZWN0ZWQgPSBtYXRjaGVkX2V4cGVjdGVkCgogICAgZGVmIGZvcm1hdHRlZF90aW1pbmcoc2VsZik6CiAgICAgICAgcmV0dXJuIGZvcm1hdF9kdXJhdGlvbihzZWxmLnRpbWluZykgaWYgc2VsZi50aW1pbmcgaXMgbm90IE5vbmUgZWxzZSAiIgoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIGlmIHNlbGYuZXhjZXB0aW9uOgogICAgICAgICAgICByZXR1cm4gZiJSYWlzZWQgIGBge3NlbGYuZXhjZXB0aW9ufWBgIEV4Y2VwdGlvbiIKICAgICAgICBlbGlmIG5vdCBzZWxmLm1hdGNoZWRfZXhwZWN0ZWQ6CiAgICAgICAgICAgIHJldHVybiBmIioqSW5jb3JyZWN0IFJlc3VsdCoqIChgYHtzZWxmLnBhcnNlZF92YWx1ZX1gYCkiCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIHNlbGYuZm9ybWF0dGVkX3RpbWluZygpCgoKY2xhc3MgTW9kdWxlUmVzdWx0cyhVc2VyRGljdCk6CiAgICBkZWYgbW9zdF9tb2Rlcm5fcmVzdWx0KHNlbGYpOgogICAgICAgIG5vbl9leGNlcHRpb25fcmVzdWx0cyA9IFsoX3B5dGhvbl92ZXJzaW9uLCByZXN1bHQpIGZvciBfcHl0aG9uX3ZlcnNpb24sIHJlc3VsdCBpbiBzZWxmLmRhdGEuaXRlbXMoKSBpZiByZXN1bHQuZXhjZXB0aW9uIGlzIE5vbmVdCiAgICAgICAgcmV0dXJuIHNvcnRlZChub25fZXhjZXB0aW9uX3Jlc3VsdHMsIGtleT1sYW1iZGEga3ZwOiBrdnBbMF0sIHJldmVyc2U9VHJ1ZSlbMF1bMV0KCkZJTEVOQU1FX1JFR0VYX1JBVyA9IHIiYmVuY2htYXJrX3RpbWluZ3NfcHl0aG9uKFxkKShcZFxkPykuY3N2IgpGSUxFTkFNRV9SRUdFWCA9IHJlLmNvbXBpbGUoRklMRU5BTUVfUkVHRVhfUkFXKQoKTU9EVUxFX1ZFUlNJT05fRklMRU5BTUVfUkVHRVhfUkFXID0gciJtb2R1bGVfdmVyc2lvbnNfcHl0aG9uKFxkKShcZFxkPykuY3N2IgpNT0RVTEVfVkVSU0lPTl9GSUxFTkFNRV9SRUdFWCA9IHJlLmNvbXBpbGUoTU9EVUxFX1ZFUlNJT05fRklMRU5BTUVfUkVHRVhfUkFXKQoKVU5JVFMgPSB7Im5zZWMiOiAxZS05LCAidXNlYyI6IDFlLTYsICJtc2VjIjogMWUtMywgInNlYyI6IDEuMH0KU0NBTEVTID0gc29ydGVkKFsoc2NhbGUsIHVuaXQpIGZvciB1bml0LCBzY2FsZSBpbiBVTklUUy5pdGVtcygpXSwgcmV2ZXJzZT1UcnVlKQoKTk9UX0FQUExJQ0FCTEUgPSAiTi9BIgoKCmRlZiBmb3JtYXRfZHVyYXRpb24oZHVyYXRpb24pOgogICAgIyBCYXNlZCBvbiBjUHl0aG9uJ3MgYHRpbWVpdGAgQ0xJIGZvcm1hdHRpbmcKICAgIHNjYWxlLCB1bml0ID0gbmV4dCgoKHNjYWxlLCB1bml0KSBmb3Igc2NhbGUsIHVuaXQgaW4gU0NBTEVTIGlmIGR1cmF0aW9uID49IHNjYWxlKSwgU0NBTEVTWy0xXSkKICAgIHByZWNpc2lvbiA9IDMKICAgIHJldHVybiAiJS4qZyAlcyIgJSAocHJlY2lzaW9uLCBkdXJhdGlvbiAvIHNjYWxlLCB1bml0KQoKCmRlZiBmb3JtYXRfcmVsYXRpdmUoZHVyYXRpb24xLCBkdXJhdGlvbjIpOgogICAgaWYgZHVyYXRpb24xIGlzIE5vbmUgb3IgZHVyYXRpb24yIGlzIE5vbmU6CiAgICAgICAgcmV0dXJuIE5PVF9BUFBMSUNBQkxFCiAgICBwcmVjaXNpb24gPSAxCiAgICByZXR1cm4gIiUuKmZ4IiAlIChwcmVjaXNpb24sIGR1cmF0aW9uMSAvIGR1cmF0aW9uMikKCgpkZWYgZm9ybWF0X3VzZWRfbW9kdWxlX3ZlcnNpb25zKG1vZHVsZV92ZXJzaW9uc191c2VkKToKICAgIHJlc3VsdHMgPSBbXQogICAgZm9yIG1vZHVsZSwgdmVyc2lvbnMgaW4gc29ydGVkKG1vZHVsZV92ZXJzaW9uc191c2VkLml0ZW1zKCksIGtleT1sYW1iZGEgeDogeFswXS5sb3dlcigpKToKICAgICAgICBpZiBsZW4odmVyc2lvbnMpID09IDE6CiAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKGYie21vZHVsZX09PXtuZXh0KGl0ZXIodmVyc2lvbnMua2V5cygpKSl9IikKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgiLCAiLmpvaW4oW2Yie21vZHVsZX09PXt2ZXJzaW9ufSAob24gUHl0aG9uIHsnLCAnLmpvaW4oc29ydGVkKHB5X3ZlcnNpb25zKSl9KSIgZm9yIHZlcnNpb24sIHB5X3ZlcnNpb25zIGluIHZlcnNpb25zLml0ZW1zKCldKSkKICAgIHJldHVybiByZXN1bHRzCgoKZGVmIHJlbGF0aXZlX3Nsb3dkb3duKHN1YmplY3QsIGNvbXBhcmlzb24pOgogICAgbW9zdF9tb2Rlcm5fY29tbW9uX3ZlcnNpb24gPSBuZXh0KGl0ZXIoc29ydGVkKHNldChzdWJqZWN0LmtleXMoKSkuaW50ZXJzZWN0aW9uKHNldChjb21wYXJpc29uKSksIHJldmVyc2U9VHJ1ZSkpLCBOb25lKQoKICAgIGlmIG5vdCBtb3N0X21vZGVybl9jb21tb25fdmVyc2lvbjoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJObyBjb21tb24gUHl0aG9uIHZlcnNpb24gZm91bmQiKQoKICAgIHJldHVybiBmb3JtYXRfcmVsYXRpdmUoc3ViamVjdFttb3N0X21vZGVybl9jb21tb25fdmVyc2lvbl0udGltaW5nLCBjb21wYXJpc29uW21vc3RfbW9kZXJuX2NvbW1vbl92ZXJzaW9uXS50aW1pbmcpCgoKZGVmIGZpbGVwYXRocyhkaXJlY3RvcnksIGNvbmRpdGlvbik6CiAgICByZXR1cm4gW29zLnBhdGguam9pbihwYXJlbnQsIGYpIGZvciBwYXJlbnQsIF9kaXJzLCBmaWxlcyBpbiBvcy53YWxrKGRpcmVjdG9yeSkgZm9yIGYgaW4gZmlsZXMgaWYgY29uZGl0aW9uKGYpXQoKZGVmIGxvYWRfYmVuY2htYXJraW5nX3Jlc3VsdHMocmVzdWx0c19kaXJlY3RvcnkpOgogICAgY2FsbGluZ19jb2RlID0ge30KICAgIHRpbWVzdGFtcHMgPSBzZXQoKQogICAgcHl0aG9uX3ZlcnNpb25zID0gc2V0KCkKICAgIHJlc3VsdHMgPSBkZWZhdWx0ZGljdChNb2R1bGVSZXN1bHRzKQoKICAgIGZpbGVzX3RvX3Byb2Nlc3MgPSBmaWxlcGF0aHMocmVzdWx0c19kaXJlY3RvcnksIEZJTEVOQU1FX1JFR0VYLm1hdGNoKQogICAgZm9yIGNzdl9maWxlIGluIGZpbGVzX3RvX3Byb2Nlc3M6CiAgICAgICAgdHJ5OgogICAgICAgICAgICB3aXRoIG9wZW4oY3N2X2ZpbGUsICJyIikgYXMgZmluOgogICAgICAgICAgICAgICAgcmVhZGVyID0gY3N2LnJlYWRlcihmaW4sIGRlbGltaXRlcj0iLCIsIHF1b3RlY2hhcj0nIicpCiAgICAgICAgICAgICAgICBtYWpvciwgbWlub3IsIHRpbWVzdGFtcCA9IG5leHQocmVhZGVyKQogICAgICAgICAgICAgICAgbWFqb3IgPSBpbnQobWFqb3IpCiAgICAgICAgICAgICAgICBtaW5vciA9IGludChtaW5vcikKICAgICAgICAgICAgICAgIHRpbWVzdGFtcHMuYWRkKHRpbWVzdGFtcCkKICAgICAgICAgICAgICAgIGZvciBtb2R1bGUsIF9zZXR1cCwgc3RtdCwgcGFyc2VfcmVzdWx0LCBjb3VudCwgdGltZV90YWtlbiwgbWF0Y2hlZCwgZXhjZXB0aW9uIGluIHJlYWRlcjoKICAgICAgICAgICAgICAgICAgICB0aW1pbmcgPSBmbG9hdCh0aW1lX3Rha2VuKSAvIGludChjb3VudCkgaWYgZXhjZXB0aW9uID09ICIiIGVsc2UgTm9uZQogICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbiA9IGV4Y2VwdGlvbiBpZiBleGNlcHRpb24gIT0gIiIgZWxzZSBOb25lCiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1ttb2R1bGVdWyhtYWpvciwgbWlub3IpXSA9IFJlc3VsdCgKICAgICAgICAgICAgICAgICAgICAgICAgdGltaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9PSAiVHJ1ZSIKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgcHl0aG9uX3ZlcnNpb25zLmFkZCgobWFqb3IsIG1pbm9yKSkKICAgICAgICAgICAgICAgICAgICBjYWxsaW5nX2NvZGVbbW9kdWxlXSA9IGYiYGB7c3RtdC5mb3JtYXQodGltZXN0YW1wPXRpbWVzdGFtcCl9YGAiCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgcHJpbnQoZiJQcm9ibGVtIHdoaWxlIHBhcnNpbmcgYHtjc3ZfZmlsZX1gIikKICAgICAgICAgICAgcmFpc2UKCiAgICBpZiBsZW4odGltZXN0YW1wcykgPiAxOgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoZiJGb3VuZCBhIG1peCBvZiBmaWxlcyBpbiB0aGUgcmVzdWx0cyBkaXJlY3RvcnkuIEZvdW5kIGZpbGVzIHRoYXQgcmVwcmVzZW50IHRoZSBwYXJzaW5nIG9mIHt0aW1lc3RhbXBzfS4gU3VwcG9ydCBmb3IgaGFuZGxpbmcgbXVsdGlwbGUgdGltZXN0YW1wcyBpcyBub3QgaW1wbGVtZW50ZWQuIikKCiAgICBweXRob25fdmVyc2lvbnNfYnlfbW9kZXJuaXR5ID0gc29ydGVkKHB5dGhvbl92ZXJzaW9ucywgcmV2ZXJzZT1UcnVlKQogICAgcmV0dXJuIHJlc3VsdHMsIHB5dGhvbl92ZXJzaW9uc19ieV9tb2Rlcm5pdHksIGNhbGxpbmdfY29kZQoKCmRlZiB3cml0ZV9iZW5jaG1hcmtpbmdfcmVzdWx0cyhyZXN1bHRzX2RpcmVjdG9yeSwgb3V0cHV0X2ZpbGUsIGJhc2VsaW5lX21vZHVsZSwgaW5jbHVkZV9jYWxsKToKICAgIHJlc3VsdHMsIHB5dGhvbl92ZXJzaW9uc19ieV9tb2Rlcm5pdHksIGNhbGxpbmdfY29kZSA9IGxvYWRfYmVuY2htYXJraW5nX3Jlc3VsdHMocmVzdWx0c19kaXJlY3RvcnkpCiAgICBtb2R1bGVzX2J5X21vZGVybl9zcGVlZCA9IFttb2R1bGUgZm9yIG1vZHVsZSwgcmVzdWx0cyBpbiBzb3J0ZWQoWypyZXN1bHRzLml0ZW1zKCldLCBrZXk9bGFtYmRhIGt2cDoga3ZwWzFdLm1vc3RfbW9kZXJuX3Jlc3VsdCgpLnRpbWluZyldCgogICAgd3JpdGVyID0gcHl0YWJsZXdyaXRlci5Sc3RHcmlkVGFibGVXcml0ZXIoKQogICAgZm9ybWF0dGVkX3B5dGhvbl92ZXJzaW9ucyA9IFtmIlB5dGhvbiB7bWFqb3J9LnttaW5vcn0iIGZvciBtYWpvciwgbWlub3IgaW4gcHl0aG9uX3ZlcnNpb25zX2J5X21vZGVybml0eV0KICAgIHdyaXRlci5oZWFkZXJfbGlzdCA9IFsiTW9kdWxlIl0gKyAoWyJDYWxsIl0gaWYgaW5jbHVkZV9jYWxsIGVsc2UgW10pICsgZm9ybWF0dGVkX3B5dGhvbl92ZXJzaW9ucyArIFtmIlJlbGF0aXZlIFNsb3dkb3duICh2ZXJzdXMge2Jhc2VsaW5lX21vZHVsZX0sIGxhdGVzdCBQeXRob24pIl0KICAgIHdyaXRlci50eXBlX2hpbnRfbGlzdCA9IFtweXRhYmxld3JpdGVyLlN0cmluZ10gKiBsZW4od3JpdGVyLmhlYWRlcl9saXN0KQoKICAgIGNhbGxpbmdfY29kZXMgPSBbY2FsbGluZ19jb2RlW21vZHVsZV0gZm9yIG1vZHVsZSBpbiBtb2R1bGVzX2J5X21vZGVybl9zcGVlZF0KICAgIHBlcmZvcm1hbmNlX3Jlc3VsdHMgPSBbW3Jlc3VsdHNbbW9kdWxlXS5nZXQocHl0aG9uX3ZlcnNpb24sIE5PVF9BUFBMSUNBQkxFKSBmb3IgcHl0aG9uX3ZlcnNpb24gaW4gcHl0aG9uX3ZlcnNpb25zX2J5X21vZGVybml0eV0gZm9yIG1vZHVsZSBpbiBtb2R1bGVzX2J5X21vZGVybl9zcGVlZF0KICAgIHJlbGF0aXZlX3Nsb3dkb3ducyA9IFtyZWxhdGl2ZV9zbG93ZG93bihyZXN1bHRzW21vZHVsZV0sIHJlc3VsdHNbYmFzZWxpbmVfbW9kdWxlXSkgaWYgbW9kdWxlICE9IGJhc2VsaW5lX21vZHVsZSBlbHNlIE5PVF9BUFBMSUNBQkxFIGZvciBtb2R1bGUgaW4gbW9kdWxlc19ieV9tb2Rlcm5fc3BlZWRdCgogICAgd3JpdGVyLnZhbHVlX21hdHJpeCA9IFsKICAgICAgICBbbW9kdWxlXSArIChbY2FsbGluZ19jb2RlW21vZHVsZV1dIGlmIGluY2x1ZGVfY2FsbCBlbHNlIFtdKSArIHBlcmZvcm1hbmNlX2J5X3ZlcnNpb24gKyBbcmVsYXRpdmVfc2xvd2Rvd25dIGZvciBtb2R1bGUsIGNhbGxpbmdfY29kZSwgcGVyZm9ybWFuY2VfYnlfdmVyc2lvbiwgcmVsYXRpdmVfc2xvd2Rvd24gaW4gemlwKG1vZHVsZXNfYnlfbW9kZXJuX3NwZWVkLCBjYWxsaW5nX2NvZGVzLCBwZXJmb3JtYW5jZV9yZXN1bHRzLCByZWxhdGl2ZV9zbG93ZG93bnMpCiAgICBdCgogICAgd2l0aCBvcGVuKG91dHB1dF9maWxlLCAidyIpIGFzIGZvdXQ6CiAgICAgICAgd3JpdGVyLnN0cmVhbSA9IGZvdXQKICAgICAgICB3cml0ZXIud3JpdGVfdGFibGUoKQogICAgICAgIGZvdXQud3JpdGUoIlxuIikKCiAgICAgICAgaWYgbGVuKG1vZHVsZXNfYnlfbW9kZXJuX3NwZWVkKSA+IDE6CiAgICAgICAgICAgIGJhc2VsaW5lX21vZHVsZV90aW1pbmcgPSByZXN1bHRzW2Jhc2VsaW5lX21vZHVsZV0ubW9zdF9tb2Rlcm5fcmVzdWx0KCkuZm9ybWF0dGVkX3RpbWluZygpCgogICAgICAgICAgICBmYXN0ZXN0X21vZHVsZSwgbmV4dF9mYXN0ZXN0X21vZHVsZSA9IG1vZHVsZXNfYnlfbW9kZXJuX3NwZWVkWzA6Ml0KICAgICAgICAgICAgaWYgZmFzdGVzdF9tb2R1bGUgPT0gYmFzZWxpbmVfbW9kdWxlOgogICAgICAgICAgICAgICAgZm91dC53cml0ZShmIntiYXNlbGluZV9tb2R1bGV9IHRha2VzIHtiYXNlbGluZV9tb2R1bGVfdGltaW5nfSwgd2hpY2ggaXMgKip7cmVsYXRpdmVfc2xvd2Rvd24ocmVzdWx0c1tuZXh0X2Zhc3Rlc3RfbW9kdWxlXSwgcmVzdWx0c1tiYXNlbGluZV9tb2R1bGVdKX0gZmFzdGVyIHRoYW4ge25leHRfZmFzdGVzdF9tb2R1bGV9KiosIHRoZSBuZXh0IGZhc3Rlc3QgSVNPIDg2MDEgcGFyc2VyIGluIHRoaXMgY29tcGFyaXNvbi5cbiIpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBmb3V0LndyaXRlKGYie2Jhc2VsaW5lX21vZHVsZX0gdGFrZXMge2Jhc2VsaW5lX21vZHVsZV90aW1pbmd9LCB3aGljaCBpcyAqKntyZWxhdGl2ZV9zbG93ZG93bihyZXN1bHRzW2Jhc2VsaW5lX21vZHVsZV0sIHJlc3VsdHNbZmFzdGVzdF9tb2R1bGVdKX0gc2xvd2VyIHRoYW4ge2Zhc3Rlc3RfbW9kdWxlfSoqLCB0aGUgZmFzdGVzdCBJU08gODYwMSBwYXJzZXIgaW4gdGhpcyBjb21wYXJpc29uLlxuIikKCgpkZWYgbG9hZF9tb2R1bGVfdmVyc2lvbl9pbmZvKHJlc3VsdHNfZGlyZWN0b3J5KToKICAgIG1vZHVsZV92ZXJzaW9uc191c2VkID0gZGVmYXVsdGRpY3QoZGljdCkKICAgIGZpbGVzX3RvX3Byb2Nlc3MgPSBmaWxlcGF0aHMocmVzdWx0c19kaXJlY3RvcnksIE1PRFVMRV9WRVJTSU9OX0ZJTEVOQU1FX1JFR0VYLm1hdGNoKQogICAgZm9yIGNzdl9maWxlIGluIGZpbGVzX3RvX3Byb2Nlc3M6CiAgICAgICAgd2l0aCBvcGVuKGNzdl9maWxlLCAiciIpIGFzIGZpbjoKICAgICAgICAgICAgcmVhZGVyID0gY3N2LnJlYWRlcihmaW4sIGRlbGltaXRlcj0iLCIsIHF1b3RlY2hhcj0nIicpCiAgICAgICAgICAgIG1ham9yLCBtaW5vciA9IG5leHQocmVhZGVyKQogICAgICAgICAgICBmb3IgbW9kdWxlLCB2ZXJzaW9uIGluIHJlYWRlcjoKICAgICAgICAgICAgICAgIGlmIHZlcnNpb24gbm90IGluIG1vZHVsZV92ZXJzaW9uc191c2VkW21vZHVsZV06CiAgICAgICAgICAgICAgICAgICAgbW9kdWxlX3ZlcnNpb25zX3VzZWRbbW9kdWxlXVt2ZXJzaW9uXSA9IHNldCgpCiAgICAgICAgICAgICAgICBtb2R1bGVfdmVyc2lvbnNfdXNlZFttb2R1bGVdW3ZlcnNpb25dLmFkZCgiLiIuam9pbigobWFqb3IsIG1pbm9yKSkpCiAgICByZXR1cm4gbW9kdWxlX3ZlcnNpb25zX3VzZWQKCgpkZWYgd3JpdGVfbW9kdWxlX3ZlcnNpb25faW5mbyhyZXN1bHRzX2RpcmVjdG9yeSwgb3V0cHV0X2ZpbGUpOgogICAgd2l0aCBvcGVuKG91dHB1dF9maWxlLCAidyIpIGFzIGZvdXQ6CiAgICAgICAgZm91dC53cml0ZShmIlRlc3RlZCBvbiB7cGxhdGZvcm0uc3lzdGVtKCl9IHtwbGF0Zm9ybS5yZWxlYXNlKCl9IHVzaW5nIHRoZSBmb2xsb3dpbmcgbW9kdWxlczpcbiIpCiAgICAgICAgZm91dC53cml0ZSgiXG4iKQogICAgICAgIGZvdXQud3JpdGUoIi4uIGNvZGU6OiBweXRob25cbiIpCiAgICAgICAgZm91dC53cml0ZSgiXG4iKQogICAgICAgIGZvciBtb2R1bGVfdmVyc2lvbl9saW5lIGluIGZvcm1hdF91c2VkX21vZHVsZV92ZXJzaW9ucyhsb2FkX21vZHVsZV92ZXJzaW9uX2luZm8ocmVzdWx0c19kaXJlY3RvcnkpKToKICAgICAgICAgICAgZm91dC53cml0ZShmIiAge21vZHVsZV92ZXJzaW9uX2xpbmV9XG4iKQoKCmRlZiBtYWluKHJlc3VsdHNfZGlyZWN0b3J5LCBvdXRwdXRfZmlsZSwgYmFzZWxpbmVfbW9kdWxlLCBpbmNsdWRlX2NhbGwsIG1vZHVsZV92ZXJzaW9uX291dHB1dCk6CiAgICB3cml0ZV9iZW5jaG1hcmtpbmdfcmVzdWx0cyhyZXN1bHRzX2RpcmVjdG9yeSwgb3V0cHV0X2ZpbGUsIGJhc2VsaW5lX21vZHVsZSwgaW5jbHVkZV9jYWxsKQogICAgd3JpdGVfbW9kdWxlX3ZlcnNpb25faW5mbyhyZXN1bHRzX2RpcmVjdG9yeSwgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvdXRwdXRfZmlsZSksIG1vZHVsZV92ZXJzaW9uX291dHB1dCkpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgT1VUUFVUX0ZJTEVfSEVMUCA9ICJUaGUgZmlsZXBhdGggdG8gdXNlIHdoZW4gb3V0cHV0dGluZyB0aGUgcmVTdHJ1Y3R1cmVkVGV4dCByZXN1bHRzLiIKPHxmaW1fZW5kfD4="]
["d958b4f6441f03c1a2f05b5a7d00bc0609060cee-1","d958b4f6441f03c1a2f05b5a7d00bc0609060cee","PHxmaW1fcHJlZml4fD4KIiIiCnN0ci5qb2luKGl0ZXJhYmxlKQpSZXR1cm4gYSBzdHJpbmcgd2hpY2ggaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHN0cmluZ3MgaW4gaXRlcmFibGUuCkEgVHlwZUVycm9yIHdpbGwgYmUgcmFpc2VkIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0cmluZyB2YWx1ZXMgaW4gaXRlcmFibGUsCmluY2x1ZGluZyBieXRlcyBvYmplY3RzLiBUaGUgc2VwYXJhdG9yIGJldHdlZW4gZWxlbWVudHMgaXMgdGhlIHN0cmluZwpwcm92aWRpbmcgdGhpcyBtZXRob2QuCiIiIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmEgPSAiYWxpa2UiCmIgPSAiYmlrZSIKYyA9ICJDaXNjbyIKcHJpbnQoIlxuIi5qb2luKFthLCBiLCBjXSkpCjx8ZmltX2VuZHw+"]
["24e8a3b6213793494721ed4063884df1d1b0d678-3","24e8a3b6213793494721ed4063884df1d1b0d678","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKaW1wb3J0IG9zCmltcG9ydCBzdWJwcm9jZXNzCmZyb20gc2h1dGlsIGltcG9ydCBjb3B5ZmlsZQpmcm9tIHNodXRpbCBpbXBvcnQgcm10cmVlCmZyb20gc2h1dGlsIGltcG9ydCBtb3ZlCmZyb20gb3MgaW1wb3J0IHNjYW5kaXIKZnJvbSBvcyBpbXBvcnQgcmVtb3ZlCmZyb20gb3MgaW1wb3J0IHBhdGgKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIG93blN0eWxlIGltcG9ydCBHUkVFTixCTFVFLEJPTEQsR1JFRU4sUkVELFJFU0VULENZQU4KI0FpbXMgdG8gcmVwcmVzZW50cyBhIGxpYnJhcnkgZGVwZW5kZW5jeQpjbGFzcyBTaWduSW46CiAgICBOT1RfREVGSU5FRD0nTk9UX0RFRklORUQnCjx8ZmltX2VuZHw+"]
["bb45d11e6f79e37b11e4fbc27486693b59a0641e-1","bb45d11e6f79e37b11e4fbc27486693b59a0641e","PHxmaW1fcHJlZml4fD4KZGVmIG1lcmdlX3N0cihzdHIxLCBzdHIyKToKICAgIGwgPSAnJwogICAgZm9yIHQgaW4gemlwKHN0cjEsIHN0cjIpOgogICAgICAgIGwgKz0gJycuam9pbih0KQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcmV0dXJuIGwKPHxmaW1fZW5kfD4="]
["7a6711ae1422c30489adc5ecf7db7c9ecc06b9ea-2","7a6711ae1422c30489adc5ecf7db7c9ecc06b9ea","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBtYXRoIGltcG9ydCBzcXJ0LCBjZWlsCgpudW0gPSAyMDAwMDAwCmxlbmd0aCA9IG51bSAvIDIKPHxmaW1fZW5kfD4="]
["569cc75b3e184c0c789a9c721f4f128383adc213-3","569cc75b3e184c0c789a9c721f4f128383adc213","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyA9ICJTdXlhc2ggU29uaSIKX19lbWFpbF9fID0gInN1eWFzaC5zb25pMjQ4QGdtYWlsLmNvbSIKCmZyb20gc3JjLmV4YW1wbGVzLmNvbm5lY3RvciBpbXBvcnQgQmFzZQpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQpmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IFRhYmxlLCBDb2x1bW4sIEludGVnZXIsIFN0cmluZywgRGF0ZVRpbWUsIEZvcmVpZ25LZXkKZnJvbSBzcWxhbGNoZW15Lm9ybSBpbXBvcnQgcmVsYXRpb25zaGlwLCBiYWNrcmVmCgp0YWdzID0gVGFibGUoJ3RhZ19pbWFnZScsIEJhc2UubWV0YWRhdGEsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIENvbHVtbigndGFnX2lkJywgSW50ZWdlciwgRm9yZWlnbktleSgndGFncy5pZCcpKSwKICAgIENvbHVtbignaW1hZ2VfaWQnLCBJbnRlZ2VyLCBGb3JlaWduS2V5KCdpbWFnZXMuaWQnKSkKPHxmaW1fZW5kfD4="]
["a42191bf8712170ce73349ca4a08110dea970738-4","a42191bf8712170ce73349ca4a08110dea970738","PHxmaW1fcHJlZml4fD4KIiIiTGVldGNvZGUgMTM2LiBTaW5nbGUgTnVtYmVyCkVhc3kKCkdpdmVuIGEgbm9uLWVtcHR5IGFycmF5IG9mIGludGVnZXJzLCBldmVyeSBlbGVtZW50IGFwcGVhcnMgdHdpY2UgZXhjZXB0IGZvciBvbmUuIApGaW5kIHRoYXQgc2luZ2xlIG9uZS4KCk5vdGU6Ci0gWW91ciBhbGdvcml0aG0gc2hvdWxkIGhhdmUgYSBsaW5lYXIgcnVudGltZSBjb21wbGV4aXR5LiAKLSBDb3VsZCB5b3UgaW1wbGVtZW50IGl0IHdpdGhvdXQgdXNpbmcgZXh0cmEgbWVtb3J5PwoKRXhhbXBsZSAxOgpJbnB1dDogWzIsMiwxXQpPdXRwdXQ6IDEKCkV4YW1wbGUgMjoKSW5wdXQ6IFs0LDEsMiwxLDJdCk91dHB1dDogNAoiIiIKCmNsYXNzIFNvbHV0aW9uTnVtQ291bnREaWN0KG9iamVjdCk6CiAgICBkZWYgc2luZ2xlTnVtYmVyKHNlbGYsIG51bXMpOgogICAgICAgICIiIkxvbmVseSBpbnRlZ2VyIGJ5IG5haXZlIGRpY3Rpb25hcnkuCiAgICAgICAgOnR5cGUgbnVtczogTGlzdFtpbnRdCiAgICAgICAgOnJ0eXBlOiBpbnQKCiAgICAgICAgVGltZSBjb21wbGV4aXR5OiBPKG4pLgogICAgICAgIFNwYWNlIGNvbXBsZXhpdHk6IE8obikuCiAgICAgICAgIiIiCiAgICAgICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKICAgICAgICAKICAgICAgICBudW1fY291bnRfZCA9IGRlZmF1bHRkaWN0KGludCkKICAgICAgICBmb3IgbiBpbiBudW1zOgogICAgICAgICAgICBudW1fY291bnRfZFtuXSArPSAxCgogICAgICAgIGZvciBudW0sIGNvdW50IGluIG51bV9jb3VudF9kLml0ZW1zKCk6CiAgICAgICAgICAgIGlmIGNvdW50ID09IDE6CiAgICAgICAgICAgICAgICByZXR1cm4gbnVtCjx8ZmltX2hvbGV8PgogICAgICAgICIiIkxvbmVseSBpbnRlZ2VyIGJ5IGJpdCBvcGVyYXRpb24uCiAgICAgICAgOnR5cGUgbnVtczogTGlzdFtpbnRdCiAgICAgICAgOnJ0eXBlOiBpbnQKCiAgICAgICAgVGltZSBjb21wbGV4aXR5OiBPKG4pLgogICAgICAgIFNwYWNlIGNvbXBsZXhpdHk6IE8oMSkuCiAgICAgICAgIiIiCiAgICAgICAgbnVtID0gbnVtc1swXQogICAgICAgIGZvciBpLCBuIGluIGVudW1lcmF0ZShudW1zLCBzdGFydD0xKToKICAgICAgICAgICAgbnVtIF49IG4KICAgICAgICByZXR1cm4gbnVtCgoKZGVmIG1haW4oKToKICAgIGltcG9ydCB0aW1lCgogICAgIyBudW1zID0gWzksIDEsIDIsIDMsIDIsIDksIDEsIDcsIDddICAgICMgU2luZ2xlIG51bWJlciA9IDMuCiAgICAjIG51bXMgPSBbMSwgMywgMSwgLTEsIDNdICAgICAgICAgICAgICAgIyBTaW5nbGUgbnVtYmVyID0gLTEuCiAgICBudW1zID0gcmFuZ2UoMTAwMCkgKyByYW5nZSgxMDAwKSArIFsxMDAwXQoKICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgcHJpbnQoJ0J5IGRpY3Q6IHt9Jy5mb3JtYXQoU29sdXRpb25OdW1Db3VudERpY3QoKS5zaW5nbGVOdW1iZXIobnVtcykpKQogICAgcHJpbnQoJ1RpbWU6IHt9Jy5mb3JtYXQodGltZS50aW1lKCkgLSBzdGFydF90aW1lKSkKCiAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKICAgIHByaW50KCdCeSBiaXQgb3Blcjoge30nLmZvcm1hdChTb2x1dGlvbkJpdCgpLnNpbmdsZU51bWJlcihudW1zKSkpCiAgICBwcmludCgnVGltZToge30nLmZvcm1hdCh0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUpKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KCgpjbGFzcyBTb2x1dGlvbkJpdChvYmplY3QpOgogICAgZGVmIHNpbmdsZU51bWJlcihzZWxmLCBudW1zKToKPHxmaW1fZW5kfD4="]
["3b1bd2fbf2a14ed4954644351f9ff712feac477c-5","3b1bd2fbf2a14ed4954644351f9ff712feac477c","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiIiIkRlZmluZSB0aGUgTkVBVCBhbGdvcml0aG0uCgpUaGlzIHVzZXMgdGhlIE5ldXJvLUV2b2x1dGlvbiB0aHJvdWdoIEF1Z21lbnRpbmcgdG9wb2xvZ2llcyAoTkVBVCkgZnJhbWV3b3JrLiBJdCBhbGxvd3MgdGhlIGV2b2x1dGlvbiBvZiBub3Qgb25seSB0aGUKcGFyYW1ldGVycy93ZWlnaHRzIGJ1dCBhbHNvIHRoZSB0b3BvbG9naWNhbCBzdHJ1Y3R1cmUgb2YgbmV1cmFsIG5ldHdvcmtzLiBOb3RlIHRoYXQgdGhlIGZvbGxvd2luZyBhbGdvcml0aG0gb25seQp3b3JrcyB3aXRoIG5ldXJhbCBuZXR3b3JrcyBhbmQgaXMgdGh1cyB0aWdodGx5IGNvdXBsZWQgd2l0aCBpdHMgYXNzb2NpYXRlZCBwb2xpY3kvbW9kZWwuCiIiIgoKaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIHB5cm9ib2xlYXJuLmVudnMgaW1wb3J0IEVudgpmcm9tIHB5cm9ib2xlYXJuLnRhc2tzIGltcG9ydCBSTFRhc2sKZnJvbSBweXJvYm9sZWFybi5wb2xpY2llcyBpbXBvcnQgTkVBVFBvbGljeQo8fGZpbV9ob2xlfD4KICAgICMgZnJvbSBuZWF0IGltcG9ydCBubiwgcG9wdWxhdGlvbiwgY29uZmlnLCBzdGF0aXN0aWNzCmV4Y2VwdCBJbXBvcnRFcnJvciBhcyBlOgogICAgcmFpc2UgSW1wb3J0RXJyb3IoZS5fX3N0cl9fKCkgKyAiXG4gSElOVDogeW91IGNhbiBpbnN0YWxsIE5FQVQgZGlyZWN0bHkgdmlhICdwaXAgaW5zdGFsbCBuZWF0LXB5dGhvbicuIikKCgpfX2F1dGhvcl9fID0gIkJyaWFuIERlbGhhaXNzZSIKX19jb3B5cmlnaHRfXyA9ICJDb3B5cmlnaHQgMjAxOCwgUHlSb2JvTGVhcm4iCl9fY3JlZGl0c19fID0gWyJCcmlhbiBEZWxoYWlzc2UiXQpfX2xpY2Vuc2VfXyA9ICJHTlUgR1BMdjMiCl9fdmVyc2lvbl9fID0gIjEuMC4wIgpfX21haW50YWluZXJfXyA9ICJCcmlhbiBEZWxoYWlzc2UiCl9fZW1haWxfXyA9ICJicmlhbmRlbGhhaXNzZUBnbWFpbC5jb20iCl9fc3RhdHVzX18gPSAiRGV2ZWxvcG1lbnQiCgoKY2xhc3MgTkVBVChvYmplY3QpOiAgIyBSTEFsZ28pOgogICAgciIiIk5FQVQ6IE5ldXJvLUV2b2x1dGlvbiB0aHJvdWdoIEF1Z21lbnRpbmcgVG9wb2xvZ2llcwoKICAgIEV4cGxvcmF0aW9uIGlzIGNhcnJpZWQgb3V0IGluIHRoZSBwYXJhbWV0ZXIgYW5kIGh5cGVycGFyYW1ldGVyIHNwYWNlcy4KCiAgICBXYXJuaW5nczogVGhpcyBhbGdvcml0aG0gaXMgYSBsaXR0bGUgYml0IHNwZWNpYWwgYW5kIGN1cnJlbnRseSBvbmx5IHdvcmtzIHdpdGggdGhlIGFzc29jaWF0ZWQgcG9saWN5L2xlYXJuaW5nIG1vZGVsLgoKICAgIFJlZmVyZW5jZXM6CiAgICAgICAgWzFdICJFdm9sdmluZyBOZXVyYWwgTmV0d29ya3MgdGhyb3VnaCBBdWdtZW50aW5nIFRvcG9sb2dpZXMiLCBTdGFubGV5IGV0IGFsLiwgMjAwMgogICAgICAgIFsyXSBORUFULVB5dGhvbgogICAgICAgICAgICAtIGRvY3VtZW50YXRpb246IGh0dHBzOi8vbmVhdC1weXRob24ucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2luZGV4Lmh0bWwKICAgICAgICAgICAgLSBnaXRodWIgcmVwbzogaHR0cHM6Ly9naXRodWIuY29tL0NvZGVSZWNsYWltZXJzL25lYXQtcHl0aG9uCiAgICAgICAgWzNdIFB5VG9yY2ggTkVBVCAoYnVpbHQgdXBvbiBORUFULVB5dGhvbik6IGh0dHBzOi8vZ2l0aHViLmNvbS91YmVyLXJlc2VhcmNoL1B5VG9yY2gtTkVBVAogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhc2ssIHBvbGljeSwgcG9wdWxhdGlvbl9zaXplPTIwLCBzcGVjaWVzX2VsaXRpc209MiwgZWxpdGlzbT0yLCBtaW5fc3BlY2llc19zaXplPTIsCiAgICAgICAgICAgICAgICAgc3Vydml2YWxfdGhyZXNob2xkPTAuMiwgbWF4X3N0YWduYXRpb249MTUsIGNvbXBhdGliaWxpdHlfdGhyZXNob2xkPTMsIG51bV93b3JrZXJzPTEpOgogICAgICAgIHIiIiIKICAgICAgICBJbml0aWFsaXplIHRoZSBORUFUIGFsZ29yaXRobS4KCiAgICAgICAgQXJnczoKICAgICAgICAgICAgdGFzayAoUkxUYXNrLCBFbnYpOiBSTCB0YXNrL2VudiB0byBydW4KICAgICAgICAgICAgcG9saWN5IChQb2xpY3kpOiBzcGVjaWZ5IHRoZSBwb2xpY3kgKG1vZGVsKSB0byBvcHRpbWl6ZQogICAgICAgICAgICBwb3B1bGF0aW9uX3NpemUgKGludCk6IHNpemUgb2YgdGhlIHBvcHVsYXRpb24KICAgICAgICAgICAgZWxpdGlzbSAoaW50KTogVGhlIG51bWJlciBvZiBtb3N0LWZpdCBpbmRpdmlkdWFscyBpbiBlYWNoIHNwZWNpZXMgdGhhdCB3aWxsIGJlIHByZXNlcnZlZCBhcy1pcyBmcm9tIG9uZQogICAgICAgICAgICAgICAgZ2VuZXJhdGlvbiB0byB0aGUgbmV4dC4KICAgICAgICAgICAgbnVtX3dvcmtlcnMgKGludCk6IG51bWJlciBvZiB3b3JrZXJzL2pvYnMgdG8gcnVuIGluIHBhcmFsbGVsCiAgICAgICAgIiIiCiAgICAgICAgIyBjcmVhdGUgZXhwbG9yZXIKICAgICAgICAjIGNyZWF0ZSBldmFsdWF0b3IKICAgICAgICAjIGNyZWF0ZSB1cGRhdGVyCiAgICAgICAgIyBzdXBlcihORUFULCBzZWxmKS5fX2luaXRfXyhzZWxmLCBleHBsb3JlciwgZXZhbHVhdG9yLCB1cGRhdGVyLCBudW1fd29ya2Vycz0xKQoKICAgICAgICAjIHNldCB0YXNrCiAgICAgICAgaWYgaXNpbnN0YW5jZSh0YXNrLCBFbnYpOgogICAgICAgICAgICB0YXNrID0gUkxUYXNrKHRhc2ssIHBvbGljeSkKICAgICAgICBzZWxmLnRhc2sgPSB0YXNrCgogICAgICAgICMgc2V0IHBvbGljeQogICAgICAgIGlmIHBvbGljeSBpcyBOb25lOgogICAgICAgICAgICBwb2xpY3kgPSBzZWxmLnRhc2sucG9saWNpZXNbMF0gICMgVE9ETzogY3VycmVudGx5IGFzc3VtZSBvbmx5IDEgcG9saWN5CiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocG9saWN5LCBORUFUUG9saWN5KToKICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJFeHBlY3RpbmcgdGhlIHBvbGljeSB0byBiZSBhbiBpbnN0YW5jZSBvZiAnTkVBVFBvbGljeScuIikKICAgICAgICBzZWxmLnBvbGljeSA9IHBvbGljeQoKICAgICAgICAjIHNldCBjb25maWcgZmlsZQogICAgICAgICMgbW9yZSBpbmZvIGFib3V0IGdlbm9tZSdzIGNvbmZpZyBmaWxlOiBodHRwczovL25lYXQtcHl0aG9uLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9jb25maWdfZmlsZS5odG1sCiAgICAgICAgIyBtb3JlIGluZm8gYWJvdXQgYWN0aXZhdGlvbiBmY3Q6IGh0dHBzOi8vbmVhdC1weXRob24ucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2FjdGl2YXRpb24uaHRtbAogICAgICAgIGNvbmZpZ19kaWN0ID0geydbTkVBVF0nOiB7J2ZpdG5lc3NfY3JpdGVyaW9uJzogJ21heCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml0bmVzc190aHJlc2hvbGQnOiAxMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9fZml0bmVzc190ZXJtaW5hdGlvbic6IFRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncG9wX3NpemUnOiBwb3B1bGF0aW9uX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzZXRfb25fZXh0aW5jdGlvbic6IFRydWV9LAogICAgICAgICAgICAgICAgICAgICAgICdbRGVmYXVsdFNwZWNpZXNTZXRdJzogeydjb21wYXRpYmlsaXR5X3RocmVzaG9sZCc6IGNvbXBhdGliaWxpdHlfdGhyZXNob2xkfSwKICAgICAgICAgICAgICAgICAgICAgICAnW0RlZmF1bHRTdGFnbmF0aW9uXSc6IHsnc3BlY2llc19maXRuZXNzX2Z1bmMnOiAnbWF4JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWF4X3N0YWduYXRpb24nOiBtYXhfc3RhZ25hdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BlY2llc19lbGl0aXNtJzogc3BlY2llc19lbGl0aXNtfSwKICAgICAgICAgICAgICAgICAgICAgICAnW0RlZmF1bHRSZXByb2R1Y3Rpb25dJzogeydlbGl0aXNtJzogZWxpdGlzbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdXJ2aXZhbF90aHJlc2hvbGQnOiBzdXJ2aXZhbF90aHJlc2hvbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWluX3NwZWNpZXNfc2l6ZSc6IG1pbl9zcGVjaWVzX3NpemV9fQoKICAgICAgICAjIHVwZGF0ZSBjb25maWcgZmlsZSBvZiBwb2xpY3kKICAgICAgICBzZWxmLnBvbGljeS51cGRhdGVfY29uZmlnKGNvbmZpZ19kaWN0KQoKICAgICAgICAjIGdldCBwb3B1bGF0aW9uCiAgICAgICAgc2VsZi5wb3B1bGF0aW9uID0gc2VsZi5wb2xpY3kucG9wdWxhdGlvbgoKICAgICAgICAjIGNyZWF0ZSB1c2VmdWwgdmFyaWFibGVzCiAgICAgICAgc2VsZi5udW1fc3RlcHMgPSAxMDAwCiAgICAgICAgc2VsZi5udW1fcm9sbG91dHMgPSAxCiAgICAgICAgc2VsZi52ZXJib3NlID0gRmFsc2UKICAgICAgICBzZWxmLmVwaXNvZGUgPSAwCiAgICAgICAgc2VsZi5hdmdfcmV3YXJkcywgc2VsZi5tYXhfcmV3YXJkcyA9IFtdLCBbXQoKICAgICAgICBzZWxmLmJlc3RfcmV3YXJkID0gLW5wLmluZnR5CiAgICAgICAgc2VsZi5iZXN0X3BhcmFtZXRlcnMgPSBOb25lCgogICAgZGVmIGV4cGxvcmVfYW5kX2V2YWx1YXRlKHNlbGYsIGdlbm9tZXMsIGNvbmZpZyk6CiAgICAgICAgIyBwcmludCBpbmZvCiAgICAgICAgc2VsZi5lcGlzb2RlICs9IDEKICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CiAgICAgICAgICAgIHByaW50KCdcbkVwaXNvZGUge30nLmZvcm1hdChzZWxmLmVwaXNvZGUpKQoKICAgICAgICAjIGZvciBlYWNoIGluZGl2aWR1YWwgaW4gdGhlIHBvcHVsYXRpb24sIGV2YWx1YXRlIGl0IG9uIHRoZSB0YXNrCiAgICAgICAgcmV3YXJkcyA9IFtdCiAgICAgICAgZm9yIGdlbm9tZV9pZCwgZ2Vub21lIGluIGdlbm9tZXM6CiAgICAgICAgICAgICMgc2V0IGdlbm9tZQogICAgICAgICAgICBzZWxmLnBvbGljeS5zZXRfbmV0d29yayhnZW5vbWUsIGNvbmZpZykKCiAgICAgICAgICAgICMgcnVuIGEgbnVtYmVyIG9mIHJvbGxvdXRzCiAgICAgICAgICAgIHJld2FyZCA9IFtdCiAgICAgICAgICAgIGZvciByb2xsb3V0IGluIHJhbmdlKHNlbGYubnVtX3JvbGxvdXRzKToKICAgICAgICAgICAgICAgICMgcnVuIHRoZSB0YXNrCiAgICAgICAgICAgICAgICByZXcgPSBzZWxmLnRhc2sucnVuKG51bV9zdGVwcz1zZWxmLm51bV9zdGVwcywgdXNlX3Rlcm1pbmF0aW5nX2NvbmRpdGlvbj1UcnVlLCByZW5kZXI9RmFsc2UpCiAgICAgICAgICAgICAgICByZXdhcmQuYXBwZW5kKHJldykKCiAgICAgICAgICAgICMgcnVuIGluIHBhcmFsbGVsCiAgICAgICAgICAgICMgam9icyA9IFtzZWxmLnBvb2wuYXBpcGUoZXZhbHVhdGUsIE5FQVRfQWdlbnQsIHNlbGYuZW52LCBzZWxmLmNmZ1snbnVtX3N0ZXBzJ10sCiAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgZ2Vub21lLCB0eXBlTk49c2VsZi50eXBlKSBmb3IgZ2Vub21lIGluIGdlbm9tZXNdCiAgICAgICAgICAgICMgZm9yIGpvYiwgZ2Vub21lIGluIHppcChqb2JzLCBnZW5vbWVzKToKICAgICAgICAgICAgIyAgICAgXywgdHJhaiA9IGpvYi5nZXQoKQogICAgICAgICAgICAjICAgICBnZW5vbWUuZml0bmVzcyA9IHRyYWpbJ3RvdF9yZXdhcmQnXQoKICAgICAgICAgICAgIyBzZXQgZml0bmVzcyB2YWx1ZQogICAgICAgICAgICByZXdhcmQgPSBucC5tZWFuKHJld2FyZCkKICAgICAgICAgICAgZ2Vub21lLmZpdG5lc3MgPSByZXdhcmQKICAgICAgICAgICAgcmV3YXJkcy5hcHBlbmQocmV3YXJkKQoKICAgICAgICAgICAgIyBzYXZlIGJlc3QgcmV3YXJkIGFuZCBhc3NvY2lhdGVkIHBhcmFtZXRlci9nZW5vbWUKICAgICAgICAgICAgaWYgcmV3YXJkID4gc2VsZi5iZXN0X3Jld2FyZDoKICAgICAgICAgICAgICAgIHNlbGYuYmVzdF9yZXdhcmQgPSByZXdhcmQKICAgICAgICAgICAgICAgIHNlbGYuYmVzdF9wYXJhbWV0ZXJzID0gZ2Vub21lCgogICAgICAgICAgICAjIHByaW50IGluZm8KICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgogICAgICAgICAgICAgICAgcHJpbnQoJyAgLS0gR2Vub21lIGlkIHt9IC0gcmV3YXJkOiB7fScuZm9ybWF0KGdlbm9tZV9pZCwgcmV3YXJkKSkKCiAgICAgICAgIyBhcHBlbmQgcmV3YXJkcwogICAgICAgIHNlbGYuYXZnX3Jld2FyZHMuYXBwZW5kKG5wLm1lYW4ocmV3YXJkcykpCiAgICAgICAgc2VsZi5tYXhfcmV3YXJkcy5hcHBlbmQobnAubWF4KHJld2FyZHMpKQoKICAgICAgICAjIHByaW50IGluZm8KICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CiAgICAgICAgICAgIHByaW50KCdFcGlzb2RlIHt9OiBhdmVyYWdlIHJld2FyZCA9IHt9IGFuZCBiZXN0IHJld2FyZCA9IHt9Jy5mb3JtYXQoc2VsZi5lcGlzb2RlLCBzZWxmLmF2Z19yZXdhcmRzWy0xXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1heF9yZXdhcmRzWy0xXSkpCgogICAgZGVmIG9wdGltaXplKHNlbGYpOgogICAgICAgIHBhc3MKCiAgICBkZWYgdHJhaW4oc2VsZiwgbnVtX3N0ZXBzPTEwMDAsIG51bV9yb2xsb3V0cz0xLCBudW1fZXBpc29kZXM9MSwgdmVyYm9zZT1GYWxzZSk6CiAgICAgICAgIyBzZXQgZmV3IHZhcmlhYmxlcwogICAgICAgIHNlbGYubnVtX3N0ZXBzID0gbnVtX3N0ZXBzCiAgICAgICAgc2VsZi5udW1fcm9sbG91dHMgPSBudW1fcm9sbG91dHMKICAgICAgICBzZWxmLmVwaXNvZGUgPSAwCiAgICAgICAgc2VsZi52ZXJib3NlID0gdmVyYm9zZQogICAgICAgIHNlbGYuYXZnX3Jld2FyZHMsIHNlbGYubWF4X3Jld2FyZHMgPSBbXSwgW10KCiAgICAgICAgIyBydW4gdGhlIGFsZ28gZm9yIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGdlbmVyYXRpb25zIC8gZXBpc29kZXMKICAgICAgICB3aW5uZXIgPSBzZWxmLnBvcHVsYXRpb24ucnVuKHNlbGYuZXhwbG9yZV9hbmRfZXZhbHVhdGUsIG51bV9lcGlzb2RlcykKCiAgICAgICAgIyBwcmludCBiZXN0IHJld2FyZAogICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgIHByaW50KCJcbkJlc3QgcmV3YXJkIGZvdW5kOiB7fSIuZm9ybWF0KHNlbGYuYmVzdF9yZXdhcmQpKQoKICAgICAgICAjIHNldCB0aGUgYmVzdCBnZW5vbWUKICAgICAgICBzZWxmLnBvbGljeS5nZW5vbWUgPSB3aW5uZXIKCiAgICAgICAgIyByZXR1cm4gdGhlIGF2ZXJhZ2UgcmV3YXJkcyBhbmQgbWF4IHJld2FyZHMgcGVyIGdlbmVyYXRpb24KICAgICAgICByZXR1cm4gc2VsZi5hdmdfcmV3YXJkcywgc2VsZi5tYXhfcmV3YXJkcwoKICAgIGRlZiB0ZXN0KHNlbGYsIG51bV9zdGVwcz0xMDAwLCBkdD0wLCB1c2VfdGVybWluYXRpbmdfY29uZGl0aW9uPUZhbHNlLCByZW5kZXI9VHJ1ZSk6CiAgICAgICAgcmV0dXJuIHNlbGYudGFzay5ydW4obnVtX3N0ZXBzPW51bV9zdGVwcywgZHQ9ZHQsIHVzZV90ZXJtaW5hdGluZ19jb25kaXRpb249dXNlX3Rlcm1pbmF0aW5nX2NvbmRpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXI9cmVuZGVyKQo8fGZpbV9zdWZmaXh8PgojIGZyb20gcHlyb2JvbGVhcm4uYWxnb3MucmxfYWxnbyBpbXBvcnQgUkxBbGdvCgp0cnk6CiAgICBpbXBvcnQgbmVhdAo8fGZpbV9lbmR8Pg=="]
["513f63ffb954568c34340ac8090c4d3396fa5344-1","513f63ffb954568c34340ac8090c4d3396fa5344","PHxmaW1fcHJlZml4fD4KZnJvbSBlbnVtIGltcG9ydCBFbnVtCgoKY2xhc3MgUGxhdGZvcm0oRW51bSk6CiAgICBIRVJBID0gewogICAgICAgICdzb3VyY2VfZmlsZW5hbWUnOiAnL3NjcmF0Y2gyL0NPQVNUQUwvY29hc3RhbC9zYXZlL3NoYXJlZC9yZXBvc2l0b3JpZXMvQURDLVdXMy1OV00tTkVNUy9tb2R1bGVmaWxlcy9lbnZtb2R1bGVzX2ludGVsLmhlcmEnLAogICAgICAgICdwcm9jZXNzb3JzX3Blcl9ub2RlJzogNDAsCiAgICAgICAgJ2xhdW5jaGVyJzogJ3NydW4nLAogICAgICAgICd1c2VzX3NsdXJtJzogVHJ1ZSwKICAgICAgICAnc2x1cm1fYWNjb3VudCc6ICdjb2FzdGFsJywKICAgICAgICAnZGVmYXVsdF9wYXJ0aXRpb24nOiBOb25lLAogICAgfQogICAgT1JJT04gPSB7CiAgICAgICAgJ3NvdXJjZV9maWxlbmFtZSc6ICcvd29yay9ub2FhL25vc29mcy9zaGFyZS9yZXBvc2l0b3JpZXMvQURDLVdXMy1OV00tTkVNUy9tb2R1bGVmaWxlcy9lbnZtb2R1bGVzX2ludGVsLm9yaW9uJywKICAgICAgICAncHJvY2Vzc29yc19wZXJfbm9kZSc6IDQwLAogICAgICAgICdsYXVuY2hlcic6ICdzcnVuJywKICAgICAgICAndXNlc19zbHVybSc6IFRydWUsCiAgICAgICAgJ3NsdXJtX2FjY291bnQnOiAnbm9zb2ZzJywKICAgICAgICAnZGVmYXVsdF9wYXJ0aXRpb24nOiAnb3Jpb24nLAogICAgfQogICAgU1RBTVBFREUyID0gewogICAgICAgICdzb3VyY2VfZmlsZW5hbWUnOiAnL3dvcmsvMDc1MzEvenJiL3N0YW1wZWRlMi9idWlsZHMvQURDLVdXMy1OV00tTkVNUy9tb2R1bGVmaWxlcy9lbnZtb2R1bGVzX2ludGVsLnN0YW1wZWRlJywKICAgICAgICAncHJvY2Vzc29yc19wZXJfbm9kZSc6IDY4LAogICAgICAgICdsYXVuY2hlcic6ICdpYnJ1bicsCiAgICAgICAgJ3VzZXNfc2x1cm0nOiBUcnVlLAogICAgICAgICdzbHVybV9hY2NvdW50JzogJ2NvYXN0YWwnLAogICAgICAgICdkZWZhdWx0X3BhcnRpdGlvbic6ICdkZXZlbG9wbWVudCcsCiAgICB9CiAgICBMT0NBTCA9IHsKICAgICAgICAnc291cmNlX2ZpbGVuYW1lJzogTm9uZSwKICAgICAgICAncHJvY2Vzc29yc19wZXJfbm9kZSc6IDEsCiAgICAgICAgJ2xhdW5jaGVyJzogTm9uZSwKICAgICAgICAndXNlc19zbHVybSc6IEZhbHNlLAogICAgICAgICdzbHVybV9hY2NvdW50JzogTm9uZSwKICAgICAgICAnZGVmYXVsdF9wYXJ0aXRpb24nOiBOb25lLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICB9Cjx8ZmltX2VuZHw+"]
["eb47ca2dca5df20f2a16a6e38df6b7aeb8ca8493-1","eb47ca2dca5df20f2a16a6e38df6b7aeb8ca8493","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbjMyJyk6CiAgICBmcm9tIG5hdGl2ZWNvbmZpZy5jb25maWcucmVnaXN0cnlfY29uZmlnIGltcG9ydCBSZWdpc3RyeUNvbmZpZwogICAgUHJlZmVycmVkQ29uZmlnID0gUmVnaXN0cnlDb25maWcKZWxpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnZGFyd2luJyk6CiAgICBmcm9tIG5hdGl2ZWNvbmZpZy5jb25maWcubnN1c2VyZGVmYXVsdHNfY29uZmlnIGltcG9ydCBOU1VzZXJEZWZhdWx0c0NvbmZpZwogICAgUHJlZmVycmVkQ29uZmlnID0gTlNVc2VyRGVmYXVsdHNDb25maWcKZWxzZToKICAgIFByZWZlcnJlZENvbmZpZyA9IEpTT05Db25maWcKPHxmaW1fc3VmZml4fD4KaW1wb3J0IHN5cwoKZnJvbSBuYXRpdmVjb25maWcuY29uZmlnLm1lbW9yeV9jb25maWcgaW1wb3J0IE1lbW9yeUNvbmZpZwpmcm9tIG5hdGl2ZWNvbmZpZy5jb25maWcuanNvbl9jb25maWcgaW1wb3J0IEpTT05Db25maWcKPHxmaW1fZW5kfD4="]
["3b3b9d91e1e396710e6dc833bbe41819154d3151-3","3b3b9d91e1e396710e6dc833bbe41819154d3151","PHxmaW1fcHJlZml4fD4KIiIiQ3JlYXRlIHdpZmlfcGF5bG9hZCB0YWJsZQoKUmV2aXNpb24gSUQ6IGQ2NTA0OWJmNGI5MQpSZXZpc2VzOiA5ZGQ0ZTQ4MjM1ZTMKQ3JlYXRlIERhdGU6IDIwMTctMDUtMTkgMjA6MDA6MzYuNTQ4ODQwCgoiIiIKZnJvbSBhbGVtYmljIGltcG9ydCBvcAppbXBvcnQgc3FsYWxjaGVteSBhcyBzYQppbXBvcnQgY29tbWFuZG1lbnQuZGJ0eXBlcwoKIyByZXZpc2lvbiBpZGVudGlmaWVycywgdXNlZCBieSBBbGVtYmljLgpyZXZpc2lvbiA9ICdkNjUwNDliZjRiOTEnCmRvd25fcmV2aXNpb24gPSAnOWRkNGU0ODIzNWUzJwpicmFuY2hfbGFiZWxzID0gTm9uZQpkZXBlbmRzX29uID0gTm9uZQoKCmRlZiB1cGdyYWRlKCk6CiAgICBvcC5jcmVhdGVfdGFibGUoJ3dpZmlfcGF5bG9hZCcsCiAgICAgICAgICAgICAgICAgICAgc2EuQ29sdW1uKCdpZCcsIHNhLkludGVnZXIoKSwgbnVsbGFibGU9RmFsc2UpLAogICAgICAgICAgICAgICAgICAgIHNhLkNvbHVtbignc3NpZF9zdHInLCBzYS5TdHJpbmcoKSwgbnVsbGFibGU9RmFsc2UpLAogICAgICAgICAgICAgICAgICAgIHNhLkNvbHVtbignaGlkZGVuX25ldHdvcmsnLCBzYS5Cb29sZWFuKCksIG51bGxhYmxlPVRydWUpLAogICAgICAgICAgICAgICAgICAgIHNhLkNvbHVtbignYXV0b19qb2luJywgc2EuQm9vbGVhbigpLCBudWxsYWJsZT1UcnVlKSwKICAgICAgICAgICAgICAgICAgICBzYS5Db2x1bW4oJ2VuY3J5cHRpb25fdHlwZScsIHNhLkVudW0oJ0VOb25lJywgJ0FueScsICdXUEEyJywgJ1dQQScsICdXRVAnLCBuYW1lPSd3aWZpZW5jcnlwdGlvbnR5cGUnKSwgbnVsbGFibGU9VHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgc2EuQ29sdW1uKCdpc19ob3RzcG90Jywgc2EuQm9vbGVhbigpLCBudWxsYWJsZT1UcnVlKSwKICAgICAgICAgICAgICAgICAgICBzYS5Db2x1bW4oJ2RvbWFpbl9uYW1lJywgc2EuU3RyaW5nKCksIG51bGxhYmxlPVRydWUpLAogICAgICAgICAgICAgICAgICAgIHNhLkNvbHVtbignc2VydmljZV9wcm92aWRlcl9yb2FtaW5nX2VuYWJsZWQnLCBzYS5Cb29sZWFuKCksIG51bGxhYmxlPVRydWUpLAogICAgICAgICAgICAgICAgICAgIHNhLkNvbHVtbigncm9hbWluZ19jb25zb3J0aXVtX29pcycsIHNhLlN0cmluZygpLCBudWxsYWJsZT1UcnVlKSwKICAgICAgICAgICAgICAgICAgICBzYS5Db2x1bW4oJ25haV9yZWFsbV9uYW1lcycsIHNhLlN0cmluZygpLCBudWxsYWJsZT1UcnVlKSwKICAgICAgICAgICAgICAgICAgICBzYS5Db2x1bW4oJ21jY3NfYW5kX21uY3MnLCBzYS5TdHJpbmcoKSwgbnVsbGFibGU9VHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgc2EuQ29sdW1uKCdkaXNwbGF5ZWRfb3BlcmF0b3JfbmFtZScsIHNhLlN0cmluZygpLCBudWxsYWJsZT1UcnVlKSwKICAgICAgICAgICAgICAgICAgICBzYS5Db2x1bW4oJ2NhcHRpdmVfYnlwYXNzJywgc2EuQm9vbGVhbigpLCBudWxsYWJsZT1UcnVlKSwKICAgICAgICAgICAgICAgICAgICBzYS5Db2x1bW4oJ3Bhc3N3b3JkJywgc2EuU3RyaW5nKCksIG51bGxhYmxlPVRydWUpLAogICAgICAgICAgICAgICAgICAgIHNhLkNvbHVtbigndGxzX2NlcnRpZmljYXRlX3JlcXVpcmVkJywgc2EuQm9vbGVhbigpLCBudWxsYWJsZT1UcnVlKSwKICAgICAgICAgICAgICAgICAgICBzYS5Db2x1bW4oJ3BheWxvYWRfY2VydGlmaWNhdGVfdXVpZCcsIGNvbW1hbmRtZW50LmRidHlwZXMuR1VJRCgpLCBudWxsYWJsZT1UcnVlKSwKICAgICAgICAgICAgICAgICAgICBzYS5Db2x1bW4oJ3Byb3h5X3R5cGUnLCBzYS5TdHJpbmcoKSwgbnVsbGFibGU9VHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgc2EuQ29sdW1uKCdwcm94eV9zZXJ2ZXInLCBzYS5TdHJpbmcoKSwgbnVsbGFibGU9VHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgc2EuQ29sdW1uKCdwcm94eV9zZXJ2ZXJfcG9ydCcsIHNhLkludGVnZXIoKSwgbnVsbGFibGU9VHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgc2EuQ29sdW1uKCdwcm94eV91c2VybmFtZScsIHNhLlN0cmluZygpLCBudWxsYWJsZT1UcnVlKSwKICAgICAgICAgICAgICAgICAgICBzYS5Db2x1bW4oJ3Byb3h5X3Bhc3N3b3JkJywgc2EuU3RyaW5nKCksIG51bGxhYmxlPVRydWUpLAogICAgICAgICAgICAgICAgICAgIHNhLkNvbHVtbigncHJveHlfcGFjX3VybCcsIHNhLlN0cmluZygpLCBudWxsYWJsZT1UcnVlKSwKICAgICAgICAgICAgICAgICAgICBzYS5Db2x1bW4oJ3Byb3h5X3BhY19mYWxsYmFja19hbGxvd2VkJywgc2EuQm9vbGVhbigpLCBudWxsYWJsZT1UcnVlKSwKICAgICAgICAgICAgICAgICAgICBzYS5Gb3JlaWduS2V5Q29uc3RyYWludChbJ2lkJ10sIFsncGF5bG9hZHMuaWQnXSwgKSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgIHNhLlByaW1hcnlLZXlDb25zdHJhaW50KCdpZCcpCiAgICAgICAgICAgICAgICAgICAgKQoKCjx8ZmltX2VuZHw+"]
["d954ee5f5c4c36847cc0619c258db90574e6bc99-3","d954ee5f5c4c36847cc0619c258db90574e6bc99","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCgpwcmludCgiSGVsbG8gV29ybGQhIikKCiMgU2luZ2xlIGxpbmUgY29tbWVudAo8fGZpbV9ob2xlfD4KIiIiCkhlIHdhcyB0YWxraW5nIGFib3V0IG1lLiAKSSdtIHRoZSBzdHJpbmcgbGl0ZXJhbC4gCkJ1dCBzb21ldGltZXMgdXNlZCB3aGVuIGNvbW1lbnRzIGFyZSBnZXQgcmVhbGx5IGxvbmcKTWF5YmUgd2UgY2Fubm90IGNhbGwgdGhpcyBjb21tZW50IGxvbmcgZW5vdWdoIApidXQgc29tZXRpbWVzIGl0cyBqdXN0IHRoZSBjYXNlClB5dGhvbiBoYXMgdGhlIHNob3J0ZXN0IGhlbGxvIHdvcmxkICh3aXRob3V0IGNvbW1lbnRzKQpTbywgSSB0aGluayBub3cgSSBhbSBsb25nIGVub3VnaCEKIiIiCjx8ZmltX3N1ZmZpeHw+CgojIFRoZXJlIGlzIG5vIG11bHRpLWxpbmUgY29tbWVudCBpbiBweXRob24gYnV0IHRoZXJlIGFyZSB3b3JrYXJvdW5kcwojIExpa2UgdGhpczogUHV0dGluZyBzaW5nbGUgbGluZSBjb21tZW50cyB0b2dldGhlciBvciB1c2luZyBhbiBzdHJpbmcgbGl0ZXJhbAoKPHxmaW1fZW5kfD4="]
["d954ee5f5c4c36847cc0619c258db90574e6bc99-5","d954ee5f5c4c36847cc0619c258db90574e6bc99","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCgpwcmludCgiSGVsbG8gV29ybGQhIikKCiMgU2luZ2xlIGxpbmUgY29tbWVudAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojIFRoZXJlIGlzIG5vIG11bHRpLWxpbmUgY29tbWVudCBpbiBweXRob24gYnV0IHRoZXJlIGFyZSB3b3JrYXJvdW5kcwojIExpa2UgdGhpczogUHV0dGluZyBzaW5nbGUgbGluZSBjb21tZW50cyB0b2dldGhlciBvciB1c2luZyBhbiBzdHJpbmcgbGl0ZXJhbAoKIiIiCjx8ZmltX2VuZHw+"]
["bb034f1bc68345494e7d8c284f2af1f01500343b-2","bb034f1bc68345494e7d8c284f2af1f01500343b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKCmltcG9ydCBweXRlc3QKCiMgaW1wb3J0IHN0cnVjdGxvZwpmcm9tIHN0cnVjdGxvZy50ZXN0aW5nIGltcG9ydCBjYXB0dXJlX2xvZ3MKCmltcG9ydCB3b29kY2hpcHBlcgpmcm9tIHdvb2RjaGlwcGVyLmNvbmZpZ3MgaW1wb3J0IE1pbmltYWwKCgpjbGFzcyBUZXN0V29vZGNoaXBwZXJMb2dnaW5nOgogICAgZGVmIHRlc3Rfd29vZGNoaXBwZXJfb3V0cHV0c19sb2dzKHNlbGYpOgogICAgICAgIHdvb2RjaGlwcGVyLmNvbmZpZ3VyZShjb25maWc9TWluaW1hbCwgZmFjaWxpdGllcz17IiI6ICJERUJVRyJ9KQogICAgICAgIGxvZ2dlciA9IHdvb2RjaGlwcGVyLmdldF9sb2dnZXIoX19uYW1lX18pCgogICAgICAgIHdpdGggY2FwdHVyZV9sb2dzKCkgYXMgY2Fwc19sb2dzOgogICAgICAgICAgICBsb2dnZXIuZGVidWcoIkRlYnVnIExvZyBUZXN0IikKICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkluZm8gTG9nIFRlc3QiKQogICAgICAgICAgICBsb2dnZXIud2FybmluZygiV2FybmluZyBMb2cgVGVzdCIpCiAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRXJyb3IgTG9nIFRlc3QiKQogICAgICAgICAgICBsb2dnZXIuY3JpdGljYWwoIkNyaXRpY2FsIExvZyBUZXN0IikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCJFeGNlcHRpb24gTG9nIFRlc3QiKQoKPHxmaW1fZW5kfD4="]
["51c86caefb26fa3f026fea3924c3faebcd248a58-1","51c86caefb26fa3f026fea3924c3faebcd248a58","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4Kbm9tZSA9ICJDOlxcVXNlcnNcXGVtZXJzb24gZWR1YXJkb1xcRGVza3RvcFxcRW5nZW5oYXJpYSBDaXZpbFxcaGluby50eHQiICAgIyBwb2RlcmlhIHNlciB1bSBpbnB1dCgiRGlnaXRlIG8gbm9tZSBkbyBhcnF1aXZvOiAiKQoKd2l0aCBvcGVuKG5vbWUsICdyJywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgYXJxX2VudHJhZGE6CiAgICAjIENPUlBPIERPIFdJVEgKPHxmaW1fZW5kfD4="]
["3b175ac18dfe01b4fa7701be6f08ef6f2b8bc73e-3","3b175ac18dfe01b4fa7701be6f08ef6f2b8bc73e","PHxmaW1fcHJlZml4fD4KIiIiCnByZXBhcmVzIHRoZSBkYXRhIGZvciB0aGUgQ05OIGFuZCB0cmFpbnMgdGhlIENOTgoiIiIKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IHJhbmRvbQoKaW1wb3J0IGtlcmFzCmltcG9ydCB0ZW5zb3JmbG93IGFzIHRmCmZyb20ga2VyYXMubW9kZWxzIGltcG9ydCBTZXF1ZW50aWFsLCBNb2RlbCwgSW5wdXQKZnJvbSBrZXJhcy5sYXllcnMgaW1wb3J0IERlbnNlLCBEcm9wb3V0LCBGbGF0dGVuLCBDb25jYXRlbmF0ZSwgQmF0Y2hOb3JtYWxpemF0aW9uCmZyb20ga2VyYXMubGF5ZXJzIGltcG9ydCBDb252MkQsIE1heFBvb2xpbmcyRApmcm9tIHNrbGVhcm4ucHJlcHJvY2Vzc2luZyBpbXBvcnQgU3RhbmRhcmRTY2FsZXIKZnJvbSBrZXJhcy5sYXllcnMuYWR2YW5jZWRfYWN0aXZhdGlvbnMgaW1wb3J0IExlYWt5UmVMVQpmcm9tIHRlbnNvcmZsb3cua2VyYXMub3B0aW1pemVycyBpbXBvcnQgQWRhbSwgTmFkYW0KZnJvbSB0ZW5zb3JmbG93LmtlcmFzLmxvc3NlcyBpbXBvcnQgQmluYXJ5Q3Jvc3NlbnRyb3B5CmZyb20gdGVuc29yZmxvdy5rZXJhcy5jYWxsYmFja3MgaW1wb3J0IEVhcmx5U3RvcHBpbmcKCmltcG9ydCBjb25uZWN0b21lLnByZXByb2Nlc3NpbmcuZGF0YV9sb2FkZXIgYXMgZHRsCmZyb20gY29ubmVjdG9tZS5wcmVwcm9jZXNzaW5nLnJlb3JkZXJfbWF0cmljZXNfcmVnaW9ucyBpbXBvcnQgcmVvcmRlcl9tYXRyaWNlc19yZWdpb25zCmZyb20gY29ubmVjdG9tZS5wcmVwcm9jZXNzaW5nLmRhdGFfbG9hZGVyIGltcG9ydCBmbGF0X3RvX21hdF9hZ2dyZWdhdGlvbgpmcm9tIGNvbm5lY3RvbWUubW9kZWxzLkUyRV9jb252IGltcG9ydCBFMkVfY29udgoKCmRlZiBtb2RlbF9icmFpbm5ldF9jbm4oWCwgeSwgYWdncmVnYXRpb249RmFsc2UsIHJlb3JkZXI9RmFsc2UsIGF1Z21lbnRhdGlvbj1GYWxzZSwgc2NhbGU9LjA0LCBhdWdtX2ZhY3Q9NSwKICAgICAgICAgICAgICAgICAgICAgICBiYXRjaF9zaXplPTMyLCBlcG9jaHM9NDAwLCBwYXRpZW5jZT01LCB2YWxpZGF0aW9uX3NpemU9LjIsCiAgICAgICAgICAgICAgICAgICAgICAgRTJFX2ZpbHRlcjogaW50ID0gMzIsIEUyTl9maWx0ZXI6IGludCA9IDQ4LCBOMkdfdGlsZXI6IGludCA9IDY0LAogICAgICAgICAgICAgICAgICAgICAgIGRlbnNlX2ZpbHRlcjogaW50ID0gNjQsIGRyb3BvdXRfcmF0ZT0wLjUsCiAgICAgICAgICAgICAgICAgICAgICAga2VybmVsX3JlZ3VsYXJpemVyPWtlcmFzLnJlZ3VsYXJpemVycy5sMigwLjAxKSwKICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWxfaW5pdGlhbGl6ZXI9J2hlX3VuaWZvcm0nLCBvcHRpbWl6ZXI9QWRhbSgpLCBhY3RpdmF0aW9uPSdyZWx1JywKICAgICAgICAgICAgICAgICAgICAgICBsb3NzPSJiaW5hcnlfY3Jvc3NlbnRyb3B5IgogICAgICAgICAgICAgICAgICAgICAgICk6CiAgICAiIiIKICAgIFRyYWlucyBhIENvbnZvbHV0aW9uYWwgTmV1cmFsIE5ldHdvcmsgbW9kZWwgYmFzZWQgb24gdGhlIGRlc2lnbiBieSBLYXdhaGFyYSBldCBhbC4gKDIwMTYpCiAgICBodHRwOi8vZG9pLm9yZy8xMC4xMDE2L2oubmV1cm9pbWFnZS4yMDE2LjA5LjA0Ni4KCiAgICBBcmdzOgogICAgICAgIFg6IFRoZSB0cmFpbmluZyBkYXRhc2V0CiAgICAgICAgeTogVGhlIHRydWUgbGFiZWxzCiAgICAgICAgYWdncmVnYXRpb246IEJvb2xlYW4sIHdoZXRoZXIgdGhlIG1hdHJpY2VzIHdlcmUgYWdncmVnYXRlZCBiYXNlZCBvbiB5ZW83CiAgICAgICAgcmVvcmRlcjogIEJvb2xlYW4sIHdoZXRoZXIgdG8gcmVvcmRlciB0aGUgbWF0cmljZXMgYmFzZWQgb24gdGhlIHllbzcgbmV0d29yay4gKFRydWUgaXMgcmVjb21tZW5kZWQgd2hlbiB0cmFpbmluZwogICAgICAgICAgICB3aXRoIEJyYWlubmV0b21lIGRhdGEuIE9ubHkgYXBwbGljYWJsZSB0byBkYXRhIGJhc2VkIG9uIHRoZSBicmFpbm5ldG9tZSBhdGxhcy4KICAgICAgICBhdWdtZW50YXRpb246IEJvb2xlYW4sIHdoZXRoZXIgdG8gYXBwbHkgZGF0YSBhdWdtZW50YXRpb24gdG8gaW5jcmVhc2UgdGhlIHRyYWluaW5nIGRhdGEgc2l6ZQogICAgICAgIHNjYWxlOiBTdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIHJhbmRvbSBub2lzZSB0byBiZSBhcHBsaWVkIGZvciBkYXRhIGF1Z21lbnRhdGlvbgogICAgICAgIGF1Z21fZmFjdDogQXVnbWVudGF0aW9uIGZhY3RvciwgU2l6ZSBvZiB0cmFpbiBkYXRhc2V0ID0gb3JpZ2luYWwgdHJhaW4gZGF0YXNldCArIGF1Z21fZmFjdCAqIG5vaXNlIGRhdGFzZXQKICAgICAgICBiYXRjaF9zaXplOiBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IHdpbGwgYmUgcHJvcGFnYXRlZCB0aHJvdWdoIHRoZSBuZXR3b3JrCiAgICAgICAgZXBvY2hzOiBOdW1iZXIgb2YgdHJhaW5pbmcgaXRlcmF0aW9ucwogICAgICAgIHBhdGllbmNlOiBOdW1iZXIgb2YgaXRlcmF0aW9ucyB0byBlYXJseSBzdG9wIGlmIG5vIGltcHJvdmVtZW50IG9jY3VycwogICAgICAgIHZhbGlkYXRpb25fc2l6ZTogU2l6ZSBvZiB0aGUgdmFsaWRhdGlvbiBzZXQgdG8gZXZhbHVhdGUgZHVyaW5nIHRyYWluaW5nCiAgICAgICAgRTJFX2ZpbHRlcjogTnVtYmVyIG9mIEUyRSBmaWx0ZXJzLCBmb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBjaGVjayBvdXQ6CiAgICAgICAgICAgIGh0dHBzOi8va2F3YWhhcmEuY2EvY29udm9sdXRpb25hbC1uZXVyYWwtbmV0d29ya3MtZm9yLWFkamFjZW5jeS1tYXRyaWNlcy8KICAgICAgICBFMk5fZmlsdGVyOiBOdW1iZXIgb2YgRTJOIGZpbHRlcnMsIGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIGNoZWNrIG91dDoKICAgICAgICAgICAgaHR0cHM6Ly9rYXdhaGFyYS5jYS9jb252b2x1dGlvbmFsLW5ldXJhbC1uZXR3b3Jrcy1mb3ItYWRqYWNlbmN5LW1hdHJpY2VzLwogICAgICAgIE4yR190aWxlcjogTnVtYmVyIG9mIE4yRyBmaWx0ZXJzICwgZm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gY2hlY2sgb3V0OgogICAgICAgICAgICBodHRwczovL2thd2FoYXJhLmNhL2NvbnZvbHV0aW9uYWwtbmV1cmFsLW5ldHdvcmtzLWZvci1hZGphY2VuY3ktbWF0cmljZXMvCiAgICAgICAgZGVuc2VfZmlsdGVyOiBEZW5zZSBsYXllciBzaXplLCBkZWZhdWx0IDY0CiAgICAgICAgZHJvcG91dF9yYXRlOiBTaXplIG9mIG5vZGVzIHRvIHJhbmRvbWx5IGRyb3AgZHVyaW5nIHRyYWluaW5nLCBkZWZhdWx0IC41CiAgICAgICAga2VybmVsX3JlZ3VsYXJpemVyOiBMYXllciB3ZWlnaHQgcmVndWxhcml6ZXJzIHRvIGJlIGFwcGxpZWQsIGRlZmF1bHQgbDIgcmVndWxhcml6YXRpb24KICAgICAgICBrZXJuZWxfaW5pdGlhbGl6ZXI6IEtlcm5lbCBpbml0aWxpemF0aW9uIHN0cmF0ZWd5LCBkZWZhdWx0IGhlX3VuaWZvcm0KICAgICAgICBvcHRpbWl6ZXI6IE1ldGhvZCB0byB0cmFpbiB0aGUgbW9kZWwsIGRlZmF1bHQgQWRhbQogICAgICAgIGFjdGl2YXRpb246IEhpZGRlbiBsYXllciBhY3RpdmF0aW9uLCBkZWZhdWx0IHJlbHUKICAgICAgICBsb3NzOiBsb3NzIGZ1bmN0aW9uLCBkZWZhdWx0IGJpbmFyeV9jcm9zc2VudHJvcHkKICAgIFJldHVybnM6CiAgICAgICAgQSBmaXR0ZWQgbmV1cmFsIG5ldHdvcmsgbW9kZWwKICAgICIiIgoKICAgIGFzc2VydCBpc2luc3RhbmNlKGFnZ3JlZ2F0aW9uLCBib29sKSwgImludmFsaWQgZGF0YXR5cGUgZm9yIGFyZ3VtZW50IGFnZ3JlZ2F0aW9uIgogICAgYXNzZXJ0IGlzaW5zdGFuY2UocmVvcmRlciwgYm9vbCksICJpbnZhbGlkIGRhdGF0eXBlIGZvciBhcmd1bWVudCByZW9yZGVyIgogICAgYXNzZXJ0IGlzaW5zdGFuY2UoYXVnbWVudGF0aW9uLCBib29sKSwgImludmFsaWQgZGF0YXR5cGUgZm9yIGFyZ3VtZW50IGF1Z21lbnRhdGlvbiIKICAgIGFzc2VydCBpc2luc3RhbmNlKHNjYWxlLCBmbG9hdCkgJiAoc2NhbGUgPj0gMC4wKSwgImludmFsaWQgcGF0aCBkYXRhdHlwZSBmb3IgYXJndW1lbnQgc2NhbGUgb3Igc21hbGxlciB0aGFuIDAiCiAgICBhc3NlcnQgaXNpbnN0YW5jZShhdWdtX2ZhY3QsIGludCkgJiAoCiAgICAgICAgICAgIGF1Z21fZmFjdCA+PSAxKSwgImludmFsaWQgZGF0YXR5cGUgZm9yIGFyZ3VtZW50IGF1Z21fZmFjdCBvciBub3QgZ3JlYXRlciB0aGFuIDEiCiAgICBhc3NlcnQgaXNpbnN0YW5jZShlcG9jaHMsIGludCkgJiAoCiAgICAgICAgICAgIGVwb2NocyA+PSAxKSwgImludmFsaWQgZGF0YXR5cGUgZm9yIGVwb2NocyBvciBub3QgZ3JlYXRlciB0aGFuIDEiCiAgICBhc3NlcnQgaXNpbnN0YW5jZShwYXRpZW5jZSwgaW50KSAmICgKICAgICAgICAgICAgcGF0aWVuY2UgPj0gMSksICJpbnZhbGlkIGRhdGF0eXBlIGZvciBhcmd1bWVudCBwYXRpZW5jZSBvciBub3QgZ3JlYXRlciB0aGFuIDEiCiAgICBhc3NlcnQgaXNpbnN0YW5jZSh2YWxpZGF0aW9uX3NpemUsIGZsb2F0KSAmICh2YWxpZGF0aW9uX3NpemUgPj0gMC4wKSAmIFwKICAgICAgICAgICAodmFsaWRhdGlvbl9zaXplIDw9IDEuMCksICJpbnZhbGlkIHZhbHVlIHZhbGlkYXRpb25fc2l6ZSIKICAgIGFzc2VydCBpc2luc3RhbmNlKEUyRV9maWx0ZXIsIGludCkgJiAoCiAgICAgICAgICAgIEUyRV9maWx0ZXIgPj0gMSksICJpbnZhbGlkIGRhdGF0eXBlIGZvciBhcmd1bWVudCBFMkVfZmlsdGVyIG9yIG5vdCBncmVhdGVyIHRoYW4gMSIKICAgIGFzc2VydCBpc2luc3RhbmNlKEUyTl9maWx0ZXIsIGludCkgJiAoCiAgICAgICAgICAgIEUyTl9maWx0ZXIgPj0gMSksICJpbnZhbGlkIGRhdGF0eXBlIGZvciBhcmd1bWVudCBFMk5fZmlsdGVyIG9yIG5vdCBncmVhdGVyIHRoYW4gMSIKICAgIGFzc2VydCBpc2luc3RhbmNlKE4yR190aWxlciwgaW50KSAmICgKICAgICAgICAgICAgTjJHX3RpbGVyID49IDEpLCAiaW52YWxpZCBkYXRhdHlwZSBmb3IgYXJndW1lbnQgTjJHX3RpbGVyIG9yIG5vdCBncmVhdGVyIHRoYW4gMSIKICAgIGFzc2VydCBpc2luc3RhbmNlKGRlbnNlX2ZpbHRlciwgaW50KSAmICgKICAgICAgICAgICAgZGVuc2VfZmlsdGVyID49IDEpLCAiaW52YWxpZCBkYXRhdHlwZSBmb3IgYXJndW1lbnQgZGVuc2VfZmlsdGVyIG9yIG5vdCBncmVhdGVyIHRoYW4gMSIKICAgIGFzc2VydCBpc2luc3RhbmNlKGRyb3BvdXRfcmF0ZSwgZmxvYXQpICYgKGRyb3BvdXRfcmF0ZSA+PSAwLjApICYgXAogICAgICAgICAgIChkcm9wb3V0X3JhdGUgPD0gMS4wKSwgImludmFsaWQgdmFsdWUgZHJvcG91dF9yYXRlIgoKICAgICMgYWRkIGFsbCBwb3NzaWJsZSBwYXJhbWV0ZXJzIG9mIGJyYWlubmV0CiAgICBYX3RyYWluLCBYX3RyYWluX3N0cnVjLCB5X3RyYWluID0gcHJlcHJvY2Vzc19mb3JfY25uKFgsIHksIGFnZ3JlZ2F0aW9uPWFnZ3JlZ2F0aW9uLCByZW9yZGVyPXJlb3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1Z21lbnRhdGlvbj1hdWdtZW50YXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlPXNjYWxlLCBhdWdtZW50YXRpb25fZmFjdG9yPWF1Z21fZmFjdCkKCiAgICAjIGNyZWF0ZSB2YWxpZGF0aW9uIHNldAogICAgIyBUcmFpbiB2YWwgc3BsaXQKICAgIHNodWZmbGVkX2luZGljZXMgPSBsaXN0KHJhbmdlKGxlbihYX3RyYWluKSkpCiAgICByYW5kb20uc2h1ZmZsZShzaHVmZmxlZF9pbmRpY2VzKQoKICAgIHZhbF9pbmQgPSBpbnQobnAucm91bmQobGVuKFhfdHJhaW4pICogdmFsaWRhdGlvbl9zaXplKSkKICAgIHZhbF9pZHhzID0gc2h1ZmZsZWRfaW5kaWNlc1s6dmFsX2luZF0KICAgIHRyYWluX2lkeHMgPSBzaHVmZmxlZF9pbmRpY2VzW3ZhbF9pbmQ6XQoKICAgICMgdmFsaWRhdGlvbiBzZXQKICAgIHZhbF94ID0gWF90cmFpblt2YWxfaWR4c10KICAgIHZhbF94X3N0cnVjID0gWF90cmFpbl9zdHJ1Y1t2YWxfaWR4c10KICAgIHZhbF95ID0geV90cmFpblt2YWxfaWR4c10KICAgICMgdHJhaW4gc2V0CiAgICB0cmFpbl94ID0gWF90cmFpblt0cmFpbl9pZHhzXQogICAgdHJhaW5feF9zdHJ1YyA9IFhfdHJhaW5fc3RydWNbdHJhaW5faWR4c10KICAgIHRyYWluX3kgPSB5X3RyYWluW3RyYWluX2lkeHNdCgogICAgIyBtb2RlIGlucHV0IGRpbWVuc2lvbgogICAgaW5wdXRfaW1nX2RpbSA9IChYX3RyYWluLnNoYXBlWzFdLCBYX3RyYWluLnNoYXBlWzJdLCAxKQogICAgaW5wdXRfc3RydWNfZGltID0gKFhfdHJhaW5fc3RydWMuc2hhcGVbMV0pCgogICAgcHJpbnQoJ1N0YXJ0aW5nIHRvIHRyYWluIE1vZGVsJykKICAgICMgSW5pdGlhbGl6ZSBuZXVyYWwgbmV0d29yayBtb2RlbAogICAgYnJhaW5uZXRjbm4gPSBicmFpbl9uZXRfY25uKGlucHV0X2RpbV9pbWc9aW5wdXRfaW1nX2RpbSwgaW5wdXRfZGltX3N0cnVjPWlucHV0X3N0cnVjX2RpbSwgb3V0cHV0X2RpbT0xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUyRV9maWx0ZXI9RTJFX2ZpbHRlciwgRTJOX2ZpbHRlcj1FMk5fZmlsdGVyLCBOMkdfdGlsZXI9TjJHX3RpbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbnNlX2ZpbHRlcj1kZW5zZV9maWx0ZXIsIGRyb3BvdXRfcmF0ZT1kcm9wb3V0X3JhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsX3JlZ3VsYXJpemVyPWtlcm5lbF9yZWd1bGFyaXplciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWxfaW5pdGlhbGl6ZXI9a2VybmVsX2luaXRpYWxpemVyLCBvcHQ9b3B0aW1pemVyLCBhY3RpdmF0aW9uPWFjdGl2YXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9zcz1sb3NzKQoKICAgIGNhbGxiYWNrID0gdGYua2VyYXMuY2FsbGJhY2tzLkVhcmx5U3RvcHBpbmcobW9uaXRvcj0ndmFsX2xvc3MnLCBwYXRpZW5jZT1wYXRpZW5jZSkKCiAgICBpZiBpbnB1dF9zdHJ1Y19kaW0gIT0gMDoKICAgICAgICBicmFpbm5ldGNubi5maXQoW3RyYWluX3gsIHRyYWluX3hfc3RydWNdLCB0cmFpbl95LCBlcG9jaHM9ZXBvY2hzLCBiYXRjaF9zaXplPWJhdGNoX3NpemUsIHZlcmJvc2U9MSwKICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbl9kYXRhPShbdmFsX3gsIHZhbF94X3N0cnVjXSwgdmFsX3kpLCBjYWxsYmFja3M9W2NhbGxiYWNrXSkKICAgIGVsc2U6CiAgICAgICAgYnJhaW5uZXRjbm4uZml0KHRyYWluX3gsIHRyYWluX3ksIGVwb2Nocz1lcG9jaHMsIGJhdGNoX3NpemU9YmF0Y2hfc2l6ZSwgdmVyYm9zZT0xLAogICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uX2RhdGE9KHZhbF94LCB2YWxfeSksIGNhbGxiYWNrcz1bY2FsbGJhY2tdKQogICAgcmV0dXJuIGJyYWlubmV0Y25uCgoKZGVmIHByZXByb2Nlc3NfZm9yX2NubihYLCB5LCBhZ2dyZWdhdGlvbj1GYWxzZSwgcmVvcmRlcj1GYWxzZSwgYXVnbWVudGF0aW9uPUZhbHNlLCBzY2FsZT0uMDcsIGF1Z21lbnRhdGlvbl9mYWN0b3I9NSk6CiAgICAiIiIKICAgIFByZXBhcmVzIGFuZCByZWZvcm1hdHMgdGhlIGRhdGEgZm9yIHRoZSBjbm4gdGVuc29yZmxvdyBtcGRlOwoKICAgIEFyZ3M6CiAgICAgICAgWDogVGhlIHRyYWluaW5nIGRhdGFzZXQKICAgICAgICB5OiBUaGUgdHJ1ZSBsYWJlbHMKICAgICAgICBhZ2dyZWdhdGlvbjogQm9vbGVhbix3aGV0aGVyIHRoZSBtYXRyaWNlcyB3ZXJlIGFnZ3JlZ2F0ZWQgYmFzZWQgb24geWVvNwogICAgICAgIHJlb3JkZXI6IEJvb2xlYW4sIHdoZXRoZXIgdG8gcmVvcmRlciB0aGUgbWF0cmljZXMgYmFzZWQgb24gdGhlIHllbzcgbmV0d29yay4gT25seSBhcHBsaWNhYmxlIHRvIGRhdGEKICAgICAgICAgICAgYmFzZWQgb24gdGhlIGJyYWlubmV0b21lIGF0bGFzLgogICAgICAgIGF1Z21lbnRhdGlvbjogQm9vbGVhbiwgd2hldGhlciB0byBhcHBseSBkYXRhIGF1Z21lbnRhdGlvbiB0byBpbmNyZWFzZSB0aGUgdHJhaW5pbmcgZGF0YSBzaXplCiAgICAgICAgc2NhbGU6IFN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgcmFuZG9tIG5vaXNlIHRvIGJlIGFwcGxpZWQgZm9yIGRhdGEgYXVnbWVudGF0aW9uCiAgICAgICAgYXVnbWVudGF0aW9uX2ZhY3RvcjogQXVnbWVudGF0aW9uIGZhY3RvciwgU2l6ZSBvZiB0cmFpbiBkYXRhc2V0ID0gb3JpZ2luYWwgZGF0YXNldCArIGF1Z21fZmFjdCAqIG5vaXNlIGRhdGFzZXQKICAgIFJldHVybnM6CiAgICAgICAgWF9pbWc6IHN5bW1ldHJpYyBucC5hcnJheSB3aXRoIHRoZSBjb25uZWN0aXZpdHkgbWF0cmljZXMKICAgICAgICBYX3N0cnVjOiBucC5hcnJheSB3aXRoIHN0cnVjdHVyYWwgaW5mb3JtYXRpb24gc3VjaCBhcyBlLmcuIGFnZSBldGMuCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICB5OiBkYXRhc2V0IGxhYmVscwo8fGZpbV9lbmR8Pg=="]
["24e7bf7ffdd4dac06c3f22631f5a02a5b7015ec6-1","24e7bf7ffdd4dac06c3f22631f5a02a5b7015ec6","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMi43IG9uIDIwMjEtMTItMDQgMDE6MDMKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgKCdvcmdhbml6YXRpb25zJywgJzAwMDVfb3JnYW5pemF0aW9udXNlcl9zbHVnJyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIG1pZ3JhdGlvbnMuRGVsZXRlTW9kZWwoCiAgICAgICAgICAgIG5hbWU9J09yZ2FuaXphdGlvblVzZXInLAogICAgICAgICksCjx8ZmltX2VuZHw+"]
["707561289b5ac1987e8ee8ead9da09fd5b903f8e-2","707561289b5ac1987e8ee8ead9da09fd5b903f8e","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyA9ICdtYXJjb3RhZ2xpYWJ1ZScKIyBQUk9CTEVNOiBodHRwOi8vd3d3LmNyYWlnYWRkeW1hbi5jb20vbWluaW5nLWFsbC10d2VldHMtd2l0aC1weXRob24vCgppbXBvcnQgbG9nZ2luZwoKZnJvbSB0d3l0aG9uIGltcG9ydCBUd3l0aG9uLCBUd3l0aG9uQXV0aEVycm9yLCBUd3l0aG9uRXJyb3IKZnJvbSBsYW5nZGV0ZWN0IGltcG9ydCBkZXRlY3QKaW1wb3J0IHRpbWUKaW1wb3J0IGNvbmZpZ3VyYXRpb24KCgpjbGFzcyBDcmF3bGVyVXNlclRpbWVsaW5lVHdpdHRlcjoKICAgIGRlZiBfX2luaXRfXyhzZWxmLHRva2Vucyk6CiAgICAgICAgc2VsZi5sYW5ndWFnZXMgPSAoImRlIiwgImVuIiwgImVzIiwgImZyIiwgIml0IiwgInB0IikKICAgICAgICBzZWxmLm1heF90d2VldHNfcmV0cmlldmFibGUgPSAzMjAwCiAgICAgICAgc2VsZi5tYXhfcGVyX3JlcXVlc3QgPSAyMDAKICAgICAgICBzZWxmLnR3aXR0ZXIgPSBUd3l0aG9uKGNvbmZpZ3VyYXRpb24uY29uc3VtZXJfa2V5LCBjb25maWd1cmF0aW9uLmNvbnN1bWVyX3NlY3JldCwgdG9rZW5zWyJhY2Nlc3NfdG9rZW4iXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vuc1siYWNjZXNzX3Rva2VuX3NlY3JldCJdKQoKICAgIGRlZiBnZXRfdXNlcnNfdHdlZXRzKHNlbGYsIHNjcmVlbl9uYW1lLCBOKToKICAgICAgICAiIiIKICAgICAgICA6cGFyYW0gc2NyZWVuX25hbWU6IFR3aXR0ZXIgdXNlcm5hbWUKICAgICAgICA6cGFyYW0gTjogTnVtYmVyIG9mIHR3ZWV0cyBvZiBVc2VyCiAgICAgICAgOnJldHVybjogTiB0d2VldHMKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICBOID0gc2VsZi5tYXhfdHdlZXRzX3JldHJpZXZhYmxlCiAgICAgICAgICAgICAgICBpdGVyYXRpb24gPSAxNgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgaXRlcmF0aW9uLCBsYXN0X2NvdW50ID0gZGl2bW9kKE4sIHNlbGYubWF4X3Blcl9yZXF1ZXN0KQogICAgICAgICAgICAgICAgaXRlcmF0aW9uICs9IDEKCiAgICAgICAgICAgICAgICB1c2VyX3RpbWVsaW5lID0gc2VsZi50d2l0dGVyLmdldF91c2VyX3RpbWVsaW5lKHNjcmVlbl9uYW1lPXNjcmVlbl9uYW1lLCBjb3VudD0xKQoKICAgICAgICAgICAgICAgIGlmICh1c2VyX3RpbWVsaW5lKToKICAgICAgICAgICAgICAgICAgICAjI3RoZSBsYXRlc3Qgc3RhcnRpbmcgdHdlZXQgaWQKICAgICAgICAgICAgICAgICAgICBsaXMgPSBbaW50KHVzZXJfdGltZWxpbmVbMF1bImlkX3N0ciJdKV0KCiAgICAgICAgICAgICAgICAgICAgIyMgaXRlcmF0ZSB0aHJvdWdoIGFsbCB0d2VldHM6IE1heCAzMjAwIGZvciBlYWNoIHVzZXIKICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBpdGVyYXRpb24pOgoKICAgICAgICAgICAgICAgICAgICAgICAgIyMgdHdlZXQgZXh0cmFjdCBtZXRob2Qgd2l0aCB0aGUgbGFzdCBsaXN0IGl0ZW0gYXMgdGhlIG1heF9pZAogICAgICAgICAgICAgICAgICAgICAgICB1c2VyX3RpbWVsaW5lID0gc2VsZi50d2l0dGVyLmdldF91c2VyX3RpbWVsaW5lKHNjcmVlbl9uYW1lPXNjcmVlbl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50PXNlbGYubWF4X3Blcl9yZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfcmV0d2VldHM9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2lkPWxpc1stMV0pCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0d2VldCBpbiB1c2VyX3RpbWVsaW5lOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGVjayBpZiBzZWVkIE5hbWUgaXMgZGlmZmVyZW50IGZyb20gc2NyZWVuX25hbWUgdHdlZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYoc2NyZWVuX25hbWUgIT0gdHdlZXRbInVzZXIiXVsic2NyZWVuX25hbWUiXSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgIHByaW50KHNjcmVlbl9uYW1lLHR3ZWV0WyJ1c2VyIl1bInNjcmVlbl9uYW1lIl0gKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0d2VldFsibGFuZyJdID09IE5vbmUpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR3ZWV0WyJsYW5nIl0gPSBkZXRlY3QodHdlZXRbInRleHQiXS5yZXBsYWNlKCJcbiIsICIgIikpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR3ZWV0WyJsYW5nIl0gaW4gc2VsZi5sYW5ndWFnZXMpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfdHdlZXRzLmFwcGVuZCh0d2VldCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHByaW50KHR3ZWV0KSAjIyBwcmludCB0aGUgdHdlZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXMuYXBwZW5kKHR3ZWV0WydpZCddKSAgIyMgYXBwZW5kIHR3ZWV0IGlkJ3MKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJfdHdlZXRzWzpOXQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICByZXR1cm4gW10KCiAgICAgICAgZXhjZXB0IFR3eXRob25BdXRoRXJyb3IgYXMgZToKICAgICAgICAgICAgIyBNYW5hZ2UgU3VzcGVuZGVkIEl0ZW0KICAgICAgICAgICAgbG9nZ2luZy5lcnJvcihlKQogICAgICAgICAgICByZXR1cm4gW10KICAgICAgICBleGNlcHQgVHd5dGhvbkVycm9yIGFzIGU6CiAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoZS5lcnJvcl9jb2RlKQogICAgICAgICAgICBpZiAoZS5lcnJvcl9jb2RlID09IDQyOSk6CiAgICAgICAgICAgICAgICBwcmludCgiUmF0ZSBsaW1pdCBleGNlZWRlZCwgd2FpdGluZy4uIikKICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMzApCiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfdXNlcnNfdHdlZXRzKHNjcmVlbl9uYW1lLCBOKQogICAgICAgICAgICBwcmludChlLmVycm9yX2NvZGUpCiAgICAgICAgICAgIHByaW50KHNjcmVlbl9uYW1lKQogICAgICAgICAgICAgICAgIyBNYW5hZ2UgTm8gUGFnZSBGb3VuZDogVXNlciBEb2Vzbid0IGV4aXN0CiAgICAgICAgICAgIHJldHVybiBbXQogICAgZGVmIGdldF9hbGxfaGFuZGxlc19tZW50aW9uZWQoc2VsZiwgbGlzdF9vZl90d2VldCwgb3duZXIpOgoKICAgICAgICBtZW50aW9ucyA9IFtdCiAgICAgICAgZm9yIHR3ZWV0IGluIGxpc3Rfb2ZfdHdlZXQ6CiAgICAgICAgICAgIG1lbnRpb25zLmV4dGVuZChbbWVudGlvblsic2NyZWVuX25hbWUiXSBmb3IgbWVudGlvbiBpbiB0d2VldFsiZW50aXRpZXMiXVsidXNlcl9tZW50aW9ucyJdXSkKCiAgICAgICAgbWVudGlvbnNfdW5pcXVlID0gbGlzdChzZXQobWVudGlvbnMpKQoKICAgICAgICBpZiBvd25lciBpbiBtZW50aW9uc191bmlxdWU6CiAgICAgICAgICAgIG1lbnRpb25zX3VuaXF1ZS5yZW1vdmUob3duZXIpCgogICAgICAgIHJldHVybiBtZW50aW9uc191bmlxdWUKPHxmaW1fc3VmZml4fD4KICAgICAgICAiIiIKICAgICAgICB0cnk6CiAgICAgICAgICAgIHVzZXJfdHdlZXRzID0gW10KICAgICAgICAgICAgaWYgTiA+PSBzZWxmLm1heF90d2VldHNfcmV0cmlldmFibGU6Cjx8ZmltX2VuZHw+"]
["30a96e4bebf7cfd57c7a027a8b5d7d122a77394d-1","30a96e4bebf7cfd57c7a027a8b5d7d122a77394d","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IGdpCmdpLnJlcXVpcmVfdmVyc2lvbignR3RrJywgJzMuMCcpCmZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR3RrCgpjbGFzcyBWaWV3cG9ydChHdGsuV2luZG93KToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBHdGsuV2luZG93Ll9faW5pdF9fKHNlbGYpCiAgICAgICAgc2VsZi5zZXRfZGVmYXVsdF9zaXplKC0xLCAyMDApCiAgICAgICAgc2VsZi5jb25uZWN0KCJkZXN0cm95IiwgR3RrLm1haW5fcXVpdCkKCiAgICAgICAgc2Nyb2xsZWR3aW5kb3cgPSBHdGsuU2Nyb2xsZWRXaW5kb3coKQogICAgICAgIHNlbGYuYWRkKHNjcm9sbGVkd2luZG93KQoKICAgICAgICBoYWRqdXN0bWVudCA9IEd0ay5BZGp1c3RtZW50KCkKICAgICAgICB2YWRqdXN0bWVudCA9IEd0ay5BZGp1c3RtZW50KCkKCiAgICAgICAgdmlld3BvcnQgPSBHdGsuVmlld3BvcnQoaGFkanVzdG1lbnQsIHZhZGp1c3RtZW50KQogICAgICAgIHNjcm9sbGVkd2luZG93LmFkZCh2aWV3cG9ydCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICAgICBib3ggPSBHdGsuQm94KG9yaWVudGF0aW9uPUd0ay5PcmllbnRhdGlvbi5WRVJUSUNBTCkKICAgICAgICB2aWV3cG9ydC5hZGQoYm94KQoKPHxmaW1fZW5kfD4="]
["8dd865eab150de0061f1203ab4c587286e645d1b-2","8dd865eab150de0061f1203ab4c587286e645d1b","PHxmaW1fcHJlZml4fD4KZGVmIGYoKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgdjogZjY0CiAgICB2ID0gNC4wCiAgICBwcmludCh2IC8vIDAuMCkKCjx8ZmltX2VuZHw+"]
["567ea7c9f38c5940361fd2edfeb418e64d6612c7-2","567ea7c9f38c5940361fd2edfeb418e64d6612c7","PHxmaW1fcHJlZml4fD4KIiIiQXl1ZGFFblB5dGhvbjogaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2dyb3Vwcy9heXVkYXB5dGhvbgoKU29sdWNpw7NuIGNvbXBsZXRhIGVuOgpodHRwczovL2dpdGh1Yi5jb20vQXl1ZGFFblB5dGhvbi9Tb2x1Y2lvbmVzL2Jsb2IvbWFpbi9lamVyY2ljaW9zL2Fwcm9iYWRvc19kZXNhcHJvYmFkb3MucHkKIiIiCgojRXNjcmliaXIgdW4gcHJvZ3JhbWEgcXVlIHNvbGljaXRlIGluZ3Jlc2FyIGxhIG5vdGEgZGUgMTAgYWx1bW5vcywgZWwgcHJvZ3JhbWEsIGRlYmUKIyBpbmZvcm1hciBkZSBjdWFudG9zIGhhbiBhcHJvYmFkbywgY3VhbnRvcyBoYW4gcmVwcm9iYWRvLCBub3RhIHByb21lZGlvLCBsYSBtYXlvciB5IGxhIG1lbm9yCiMgZmFsdGFuIHJlYWxpemFyIGNvbXByb2JhY2lvbmVzIGRlbCB0aXBvIGRlIGRhdG8gaW5ncmVzYWRvIApwcmludCgiRXNjcmliYSAwIHBhcmEgdGVybWluYXIgZWwgcHJvZ3JhbWEiKQpub3RhcyA9IFtdCndoaWxlIFRydWU6CiAgICBub3RhID0gZmxvYXQoaW5wdXQoIkluZ3Jlc2Ugbm90YTogIikpCiAgICBpZiBub3RhID09IDA6CiAgICAgICAgcHJpbnQoIlNhbGllbmRvLi4uICIpCiAgICAgICAgYnJlYWsKICAgICNjb21wcm9iYXIgcSBsYSBub3RhIGVzdGUgZW4gZWwgcmFuZ28gMS0xMAogICAgaWYgbm90IG5vdGEgPiAxMDoKICAgICAgICBub3Rhcy5hcHBlbmQobm90YSkKICAgIGVsc2U6IAogICAgICAgICMgc2kgbm8gbG8gZXN0YSB2dWVsdmUgYSBwZWRpciBsYSBub3RhCiAgICAgICAgcHJpbnQoIkFzZWd1cmF0ZSBxdWUgbGEgbm90YSBlc3RlIGVuIHJhbmdvICgxLTEwKSIpCiAgICAgICAgY29udGludWUKICAgICNjdWFuZG8gbGEgbGlzdGEgdGVuZ2EgeWEgMTAgbm90YXMgZGVqYXJhIGRlIHBlZGlyIG5vdGEKICAgIGlmIGxlbihub3RhcykgPT0gMTA6CiAgICAgICAgYnJlYWsKYXBsYXphZG9zID0gMAphcHJvYmFkb3MgPSAwCm5vdGFibGVzID0gMAo8fGZpbV9ob2xlfD4KICAgICAgICBhcHJvYmFkb3MgKz0gMQogICAgZWxpZiBub3RhID4gNzogCiAgICAgICAgbm90YWJsZXMgKz0gMSAKcHJpbnQoZiIiIgpBcGxhemFkb3M6IHthcGxhemFkb3N9CkFwcm9iYWRvczoge2Fwcm9iYWRvc30KTm90YWJsZXM6IHtub3RhYmxlc30KIiIiKQo8fGZpbV9zdWZmaXh8Pgpmb3Igbm90YSBpbiBub3RhczoKICAgIGlmIG5vdGEgPCA0OgogICAgICAgIGFwbGF6YWRvcyArPSAxCiAgICBlbGlmIG5vdGEgPD0gNCBvciBub3RhIDw9IDc6Cjx8ZmltX2VuZHw+"]
["797fad58f37eb10e0f2940b60f39ace238ce7166-1","797fad58f37eb10e0f2940b60f39ace238ce7166","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYi5hZG1pbi5vcHRpb25zIGltcG9ydCBJbmxpbmVNb2RlbEFkbWluCgpfX2FsbF9fID0gWydpbmxpbmVfbW9kZWxfYWRtaW5fY2xhc3NfZmFjdG9yeSddCgoKZGVmIGlubGluZV9tb2RlbF9hZG1pbl9jbGFzc19mYWN0b3J5KGlubGluZV9tb2RlbCwgYWRtaW5fY2xhc3MsICoqZmllbGRzKToKICAgICIiIgoKICAgIDpwYXJhbSBpbmxpbmVfbW9kZWw6CiAgICA6cGFyYW0gYWRtaW5fY2xhc3M6CiAgICA6cGFyYW0gZmllbGRzOgogICAgOnJldHVybjoKICAgICIiIgogICAgaWYgbm90IGlzc3ViY2xhc3MoYWRtaW5fY2xhc3MsIElubGluZU1vZGVsQWRtaW4pOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2BhZG1pbl9jbGFzc2AgbXVzdCBzdWJjbGFzcyBJbmxpbmVNb2RlbEFkbWluLicpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBpZiBpc2luc3RhbmNlKGlubGluZV9tb2RlbCwgc3RyKToKICAgICAgICBmcm9tIGRqYW5nby5hcHBzIGltcG9ydCBhcHBzIGFzIGRqYW5nb19hcHBzCiAgICAgICAgaW5saW5lX21vZGVsID0gZGphbmdvX2FwcHMuZ2V0X21vZGVsKGlubGluZV9tb2RlbCkKPHxmaW1fZW5kfD4="]
["8e93bec498304c8e52040b5fb851a118396758b3-2","8e93bec498304c8e52040b5fb851a118396758b3","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IGxvZ2dpbmcKCmZyb20gcmVzdF9mcmFtZXdvcmsucmVzcG9uc2UgaW1wb3J0IFJlc3BvbnNlCmZyb20gcmVzdF9mcmFtZXdvcmsudmlld3MgaW1wb3J0IEFQSVZpZXcKPHxmaW1fZW5kfD4="]
["bb4e8849b2a6540b869b49d705593e058022752b-2","bb4e8849b2a6540b869b49d705593e058022752b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQganNvbgpmcm9tIGlibV93YXRzb24gaW1wb3J0IE5hdHVyYWxMYW5ndWFnZVVuZGVyc3RhbmRpbmdWMQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gaWJtX2Nsb3VkX3Nka19jb3JlLmF1dGhlbnRpY2F0b3JzIGltcG9ydCBJQU1BdXRoZW50aWNhdG9yCmZyb20gaWJtX3dhdHNvbi5uYXR1cmFsX2xhbmd1YWdlX3VuZGVyc3RhbmRpbmdfdjEgaW1wb3J0IEZlYXR1cmVzLCBDYXRlZ29yaWVzT3B0aW9ucywgS2V5d29yZHNPcHRpb25zCgpmcm9tIGtleXNfcHJvamVjdCBpbXBvcnQgYXV0aGVudGljYXRvcl9pYm0sIHNlcnZpY2VfdXJsX2libQo8fGZpbV9lbmR8Pg=="]
["56277e3403653275bbcb820e7ea6bf5ebc3f8e31-2","56277e3403653275bbcb820e7ea6bf5ebc3f8e31","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN1YnByb2Nlc3MKCgpwcmludCgiV2VsY29tZSwgdGhpcyBpcyBzb21lIG1hbmFnZSBtZW50IHRoaW5nIGxvbC4uLlxuXG4iKQoKcHJpbnQoImV4aXQgLSBFeGl0IHRoZSBzZXNzaW9uLiIpCnByaW50KCJjcHAgLSBDKysgQ29tcGlsZXIiKQpwcmludCgiYyAtIEMgQ29tcGlsZXIiKQpwcmludCgicHkgLSBQeXRob24gQ29tcGlsZXIiKQpwcmludCgianMgLSBKYXZhU2NyaXB0IGNvbXBpbGVyIikKcHJpbnQoInJlYWQgLSBSZWFkIGEgZmlsZSIpCnByaW50KCJcbklucHV0IHdoYXQgeW91IHdhbm5hIGRvOiAiKQoKeCA9IGlucHV0KCIgIikKCmlmIHggPT0gImV4aXQiOgogICAgZXhpdCgwKQoKaWYgeCA9PSAiY3BwIjoKICAgIGZpbGVuID0gaW5wdXQoIlBsZWFzZSB0eXBlIHRoZSBuYW1lIG9mIHRoZSBjKysvY3BwIGZpbGUgdGhhdCB5b3Ugd2FudCB0byBjb21waWxlICIpCiAgICBzdWJwcm9jZXNzLnJ1bihbImcrKyIsIGZpbGVuLCAiLW8iLCAib3V0cHV0Il0pCiAgICBzdWJwcm9jZXNzLnJ1bigiLi9vdXRwdXQiKQoKaWYgeCA9PSAiYyI6CiAgICBmaWxlbiA9IGlucHV0KCJQbGVhc2UgdHlwZSB0aGUgbmFtZSBvZiB0aGUgYyBmaWxlIHRoYXQgeW91IHdhbnQgdG8gY29tcGlsZSAiKQogICAgc3VicHJvY2Vzcy5ydW4oWyJnY2MiLCBmaWxlbiwgIi1vIiwgIm91dHB1dCJdKQogICAgc3VicHJvY2Vzcy5ydW4oIi4vb3V0cHV0IikKPHxmaW1faG9sZXw+CgppZiB4ID09ICJqcyI6CiAgICBmaWxlbiA9IGlucHV0KCJQbGVhc2UgdHlwZSB0aGUgbmFtZSBvZiB0aGUgamF2YXNjcmlwdCBmaWxlIHRoYXQgeW91IHdhbnQgdG8gcnVuICIpCiAgICBzdWJwcm9jZXNzLnJ1bihbIm5vZGUiLCBmaWxlbl0pCgppZiB4ID09ICJyZWFkIjoKICAgIGZpbGVuID0gaW5wdXQoIlBsZWFzZSB0eXBlIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoYXQgeW91IHdhbnQgdG8gcmVhZCAiKQogICAgd2l0aCBvcGVuKGZpbGVuLCAiciIpIGFzIGY6CiAgICAgICAgcHJpbnQoZi5yZWFkKCkpCgplbHNlOgogICAgcHJpbnQoIkVycm9yOiBDb21tYW5kIG5vdCBmb3VuZCEiKQo8fGZpbV9zdWZmaXh8PgoKaWYgeCA9PSAicHkiOgogICAgZmlsZW4gPSBpbnB1dCgiUGxlYXNlIHR5cGUgdGhlIG5hbWUgb2YgdGhlIHB5dGhvbiBmaWxlIHRoYXQgeW91IHdhbnQgdG8gcnVuICIpCiAgICBzdWJwcm9jZXNzLnJ1bihbInB5dGhvbjMiLCBmaWxlbl0pCjx8ZmltX2VuZHw+"]
["794cb4326088c53e7b9066955bbcd0f6f69e5e11-3","794cb4326088c53e7b9066955bbcd0f6f69e5e11","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KaW1wb3J0IHJvc2xpYjsgcm9zbGliLmxvYWRfbWFuaWZlc3QoJ3Jjb21tYW5kZXJfcHIyX2d1aScpCmltcG9ydCBweXByMi5wcjJfdXRpbHMgYXMgcHUKaW1wb3J0IHJjb21tYW5kZXJfd2ViLnJjb21tYW5kZXJfYXV0b19zZXJ2ZXIgYXMgcmNzCmltcG9ydCBzeXMKaW1wb3J0IHRmIAppbXBvcnQgcm9zcHkKCiMgImhvbWUvaGFpZGFpL0Rlc2t0b3AvcmNvbW1hbmRlciIpCnJvc3B5LmluaXRfbm9kZSgncmNvbW1hbmRlcl9wcjJfc2VydmVyJykKcGF0aCA9IHN5cy5hcmd2WzFdCnRmID0gdGYuVHJhbnNmb3JtTGlzdGVuZXIoKQpwcjIgPSBwdS5QUjIodGYpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcmNzLnJ1bihwcjIsIHBhdGgpCjx8ZmltX2VuZHw+"]
["5681231cca79be91901c258d38f1e4c4f0b042fd-1","5681231cca79be91901c258d38f1e4c4f0b042fd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGF1ZGFsaWduIGFzIGFkCmltcG9ydCBvcwppbXBvcnQgcHl0ZXN0Cgp0ZXN0X2ZpbGUgPSAidGVzdF9hdWRpby90ZXN0ZXJzL3Rlc3QubXAzIgp0ZXN0X2ZpbGUyID0gInRlc3RfYXVkaW8vdGVzdGVycy9waW5rX25vaXNlLm1wMyIKdGVzdF9maWxlX2VpZyA9ICJ0ZXN0X2F1ZGlvL3Rlc3Rfc2hpZnRzL0VpZ2VuLTIwc2VjLm1wMyIKdGVzdF9maWxlX2VpZzIgPSAidGVzdF9hdWRpby90ZXN0X3NoaWZ0cy9FaWdlbi1zb25nLWJhc2UubXAzIgp0ZXN0X2ZvbGRlcl9laWcgPSAidGVzdF9hdWRpby90ZXN0X3NoaWZ0cy8iCgoKY2xhc3MgVGVzdEZpbmdlcnByaW50aW5nOgogICAgdGVzdF9maWxlID0gInRlc3RfYXVkaW8vdGVzdGVycy90ZXN0Lm1wMyIKICAgIGFkYSA9IGFkLkF1ZGFsaWduKCkKCiAgICBkZWYgdGVzdF9maW5nZXJwcmludF9maWxlKHNlbGYpOgogICAgICAgIHNlbGYuYWRhLmNsZWFyX2ZpbmdlcnByaW50cygpCiAgICAgICAgc2VsZi5hZGEuc2V0X2FjY3VyYWN5KDEpCiAgICAgICAgc2VsZi5hZGEuZmluZ2VycHJpbnRfZmlsZShzZWxmLnRlc3RfZmlsZSkKICAgICAgICBzZWxmLmFkYS5maW5nZXJwcmludF9maWxlKHNlbGYudGVzdF9maWxlLCBzZXRfZmlsZV9uYW1lPSJTdXAiLCBwbG90PUZhbHNlKQogICAgICAgIGFzc2VydCBzZWxmLmFkYS50b3RhbF9maW5nZXJwcmludHMgPiAwCiAgICAgICAgYXNzZXJ0IHNlbGYuYWRhLmZpbGVfbmFtZXNbMF0gPT0gInRlc3QubXAzIgogICAgICAgIGFzc2VydCBsZW4oc2VsZi5hZGEuZmluZ2VycHJpbnRlZF9maWxlcykgPT0gMQoKICAgICAgICBzZWxmLmFkYS5jbGVhcl9maW5nZXJwcmludHMoKQogICAgICAgIGFzc2VydCBzZWxmLmFkYS50b3RhbF9maW5nZXJwcmludHMgPT0gMAoKICAgICAgICBzZWxmLmFkYS5maW5nZXJwcmludF9maWxlKHNlbGYudGVzdF9maWxlLCBzZXRfZmlsZV9uYW1lPSJTdXAiKQogICAgICAgIGFzc2VydCBzZWxmLmFkYS5maWxlX25hbWVzWzBdID09ICJTdXAiCgogICAgZGVmIHRlc3RfZmluZ2VycHJpbnRfZmlsZV9oYXNoX3N0eWxlcyhzZWxmKToKICAgICAgICBzZWxmLmFkYS5jbGVhcl9maW5nZXJwcmludHMoKQogICAgICAgIHNlbGYuYWRhLnNldF9hY2N1cmFjeSgxKQogICAgICAgIHNlbGYuYWRhLnNldF9oYXNoX3N0eWxlKCJiYXNlIikKICAgICAgICBzZWxmLmFkYS5maW5nZXJwcmludF9maWxlKHNlbGYudGVzdF9maWxlKQogICAgICAgIGFzc2VydCBzZWxmLmFkYS50b3RhbF9maW5nZXJwcmludHMgPiAwCiAgICAgICAgc2VsZi5hZGEuY2xlYXJfZmluZ2VycHJpbnRzKCkKCiAgICAgICAgc2VsZi5hZGEuc2V0X2hhc2hfc3R5bGUoInBhbmFrbyIpCiAgICAgICAgc2VsZi5hZGEuZmluZ2VycHJpbnRfZmlsZShzZWxmLnRlc3RfZmlsZSkKICAgICAgICBhc3NlcnQgc2VsZi5hZGEudG90YWxfZmluZ2VycHJpbnRzID4gMAogICAgICAgIHNlbGYuYWRhLmNsZWFyX2ZpbmdlcnByaW50cygpCgogICAgICAgIHNlbGYuYWRhLnNldF9oYXNoX3N0eWxlKCJwYW5ha29fbW9kIikKICAgICAgICBzZWxmLmFkYS5maW5nZXJwcmludF9maWxlKHNlbGYudGVzdF9maWxlKQogICAgICAgIGFzc2VydCBzZWxmLmFkYS50b3RhbF9maW5nZXJwcmludHMgPiAwCiAgICAgICAgc2VsZi5hZGEuY2xlYXJfZmluZ2VycHJpbnRzKCkKCiAgICAgICAgc2VsZi5hZGEuc2V0X2hhc2hfc3R5bGUoImJhc2VfdGhyZWUiKQogICAgICAgIHNlbGYuYWRhLmZpbmdlcnByaW50X2ZpbGUoc2VsZi50ZXN0X2ZpbGUpCiAgICAgICAgYXNzZXJ0IHNlbGYuYWRhLnRvdGFsX2ZpbmdlcnByaW50cyA+IDAKCiAgICBkZWYgdGVzdF9maW5nZXJwcmludF9iYWRfaGFzaF9zdHlsZXMoc2VsZik6CiAgICAgICAgYWRhMSA9IGFkLkF1ZGFsaWduKGhhc2hfc3R5bGU9ImJhZF9oYXNoX3N0eWxlIikKICAgICAgICBhc3NlcnQgYWRhMS5oYXNoX3N0eWxlID09ICJwYW5ha29fbW9kIgogICAgICAgIGFkYTEuaGFzaF9zdHlsZSA9ICJiYWRfaGFzaF9zdHlsZSIKICAgICAgICBhZGExLmZpbmdlcnByaW50X2ZpbGUoc2VsZi50ZXN0X2ZpbGUpCiAgICAgICAgYXNzZXJ0IGxlbihhZGExLmZpbmdlcnByaW50ZWRfZmlsZXMpID09IDAKICAgICAgICBhc3NlcnQgbGVuKGFkYTEuZmlsZV9uYW1lcykgPT0gMAogICAgICAgIGFzc2VydCBhZGExLnRvdGFsX2ZpbmdlcnByaW50cyA9PSAwCgogICAgQHB5dGVzdC5tYXJrLnNtb2tlCiAgICBkZWYgdGVzdF9maW5nZXJwcmludF9kaXJlY3RvcnlfbXVsdGlwcm9jZXNzaW5nKHNlbGYpOgogICAgICAgIHNlbGYuYWRhLmNsZWFyX2ZpbmdlcnByaW50cygpCiAgICAgICAgc2VsZi5hZGEuc2V0X211bHRpcHJvY2Vzc2luZyhUcnVlKQogICAgICAgIHNlbGYuYWRhLmZpbmdlcnByaW50X2RpcmVjdG9yeSgidGVzdF9hdWRpby90ZXN0ZXJzIikKICAgICAgICBhc3NlcnQgc2VsZi5hZGEudG90YWxfZmluZ2VycHJpbnRzID4gMAogICAgICAgIGFzc2VydCBsZW4oc2VsZi5hZGEuZmluZ2VycHJpbnRlZF9maWxlcykgPiAwCgogICAgZGVmIHRlc3RfZmluZ2VycHJpbnRfZGlyZWN0b3J5X3NpbmdsZShzZWxmKToKICAgICAgICBzZWxmLmFkYS5zZXRfbXVsdGlwcm9jZXNzaW5nKEZhbHNlKQogICAgICAgIHNlbGYuYWRhLmNsZWFyX2ZpbmdlcnByaW50cygpCiAgICAgICAgc2VsZi5hZGEuZmluZ2VycHJpbnRfZGlyZWN0b3J5KCJ0ZXN0X2F1ZGlvL3Rlc3RlcnMiKQogICAgICAgIGFzc2VydCBzZWxmLmFkYS50b3RhbF9maW5nZXJwcmludHMgPiAwCiAgICAgICAgYXNzZXJ0IGxlbihzZWxmLmFkYS5maW5nZXJwcmludGVkX2ZpbGVzKSA+IDAKCiAgICBkZWYgdGVzdF9maW5nZXJwcmludF9kaXJlY3Rvcnlfbm90X3RoZXJlX2FscmVhZHlfZG9uZShzZWxmKToKICAgICAgICBzZWxmLmFkYS5maW5nZXJwcmludF9kaXJlY3RvcnkoInRlc3RfYXVkaW8vdGVzdGVycyIpCiAgICAgICAgc2VsZi5hZGEubG9hZF9maW5nZXJwcmludGVkX2ZpbGVzKCJ0ZXN0cy90ZXN0X2ZpbmdlcnByaW50cy5qc29uIikKICAgICAgICBzZWxmLmFkYS5maW5nZXJwcmludF9kaXJlY3RvcnkoInRlc3RfYXVkaW8vdGVzdF9zaGlmdHMiKQoKICAgIGRlZiB0ZXN0X2ZpbmdlcnByaW50X2JhZF9maWxlKHNlbGYpOgogICAgICAgIGFkYTIgPSBhZC5BdWRhbGlnbigpCiAgICAgICAgIyBib3RoIHNob3VsZCBwcmludCBzb21ldGhpbmcgYW5kIGJlIGp1c3QgZmluZQogICAgICAgIGFkYTIuZmluZ2VycHJpbnRfZmlsZSgiZmlsZW5vdF9ldmVuX3RoZXJlLnR4dCIpCiAgICAgICAgYWRhMi5maW5nZXJwcmludF9maWxlKCJyZXF1aXJlbWVudHMudHh0IikKICAgICAgICBhc3NlcnQgbGVuKGFkYTIuZmluZ2VycHJpbnRlZF9maWxlcykgPT0gMAogICAgICAgIGFzc2VydCBsZW4oYWRhMi5maWxlX25hbWVzKSA9PSAwCiAgICAgICAgYXNzZXJ0IGFkYTIudG90YWxfZmluZ2VycHJpbnRzID09IDAKCgpjbGFzcyBUZXN0UmVjb2duaXplOgoKICAgIGFkYSA9IGFkLkF1ZGFsaWduKCJ0ZXN0cy90ZXN0X2ZpbmdlcnByaW50cy5qc29uIikKCiAgICBAcHl0ZXN0Lm1hcmsuc21va2UKICAgIGRlZiB0ZXN0X3JlY29nbml6ZShzZWxmKToKICAgICAgICBhc3NlcnQgc2VsZi5hZGEudG90YWxfZmluZ2VycHJpbnRzID4gMAogICAgICAgIHNlbGYuYWRhLnNldF9hY2N1cmFjeSg0KQoKICAgICAgICByZXN1bHQgPSBzZWxmLmFkYS5yZWNvZ25pemUodGVzdF9maWxlKQogICAgICAgIGFzc2VydCBsZW4ocmVzdWx0KSA+IDEKCiAgICAgICAgcmVzdWx0MiA9IHNlbGYuYWRhLnJlY29nbml6ZSh0ZXN0X2ZpbGUsIGZpbHRlcl9tYXRjaGVzPTIwMDAwKQogICAgICAgIGFzc2VydCBub3QgcmVzdWx0MgoKICAgIGRlZiB0ZXN0X3JlY29nbml6ZV9maW5nZXJwcmludChzZWxmKToKICAgICAgICBhZGEyID0gYWQuQXVkYWxpZ24oKQogICAgICAgIGFkYTIuZmluZ2VycHJpbnRfZmlsZSh0ZXN0X2ZpbGUpCiAgICAgICAgcmVzdWx0ID0gYWRhMi5yZWNvZ25pemUodGVzdF9maWxlMikKICAgICAgICBhc3NlcnQgcmVzdWx0CgogICAgZGVmIHRlc3RfcmVjb2duaXplX21heF9sYWdzKHNlbGYpOgogICAgICAgIF9tYXhfbGFncyA9IDQKICAgICAgICByZXN1bHRzID0gc2VsZi5hZGEucmVjb2duaXplKHRlc3RfZmlsZV9laWcsIG1heF9sYWdzPTQpCgogICAgICAgIG9mZnNldF9zZWNvbmRzID0gcmVzdWx0c1sibWF0Y2hfaW5mbyJdW29zLnBhdGguYmFzZW5hbWUodGVzdF9maWxlX2VpZzIpXVsKICAgICAgICAgICAgIm9mZnNldF9zZWNvbmRzIgogICAgICAgIF0KICAgICAgICBhc3NlcnQgbWluKG9mZnNldF9zZWNvbmRzKSA8IF9tYXhfbGFncwogICAgICAgIGFzc2VydCBtYXgob2Zmc2V0X3NlY29uZHMpIDwgX21heF9sYWdzCgogICAgQHB5dGVzdC5tYXJrLnNtb2tlCiAgICBkZWYgdGVzdF9yZWNvZ25pemVfbG9jYWxpdHkoc2VsZik6CiAgICAgICAgYXNzZXJ0IHNlbGYuYWRhLnRvdGFsX2ZpbmdlcnByaW50cyA+IDAKICAgICAgICBzZWxmLmFkYS5zZXRfYWNjdXJhY3koNCkKCiAgICAgICAgcmVzdWx0ID0gc2VsZi5hZGEucmVjb2duaXplKHRlc3RfZmlsZSwgbG9jYWxpdHk9MTApCiAgICAgICAgYXNzZXJ0IGxlbihyZXN1bHQpID4gMQogICAgICAgIHNlbGYuYWRhLnByZXR0eV9wcmludF9yZWNvZ25pdGlvbihyZXN1bHQpCgogICAgIyBAcHl0ZXN0Lm1hcmsuc2tpcChyZWFzb249Im5vdCB3b3JraW5nIGZvciBzb21lIHJlYXNvbiIpCiAgICBkZWYgdGVzdF9yZWNvZ25pemVfbG9jYWxpdHlfbWF4X2xhZ3Moc2VsZik6CiAgICAgICAgX21heF9sYWdzID0gNAogICAgICAgIHJlc3VsdHMgPSBzZWxmLmFkYS5yZWNvZ25pemUodGVzdF9maWxlX2VpZywgbWF4X2xhZ3M9NCwgbG9jYWxpdHk9MTApCgogICAgICAgIG9mZnNldF9zZWNvbmRzID0gcmVzdWx0c1sibWF0Y2hfaW5mbyJdW29zLnBhdGguYmFzZW5hbWUodGVzdF9maWxlX2VpZzIpXVsKICAgICAgICAgICAgIm9mZnNldF9zZWNvbmRzIgogICAgICAgIF0KICAgICAgICBhc3NlcnQgbWluKG9mZnNldF9zZWNvbmRzKSA8IF9tYXhfbGFncwogICAgICAgIGFzc2VydCBtYXgob2Zmc2V0X3NlY29uZHMpIDwgX21heF9sYWdzCgogICAgQHB5dGVzdC5tYXJrLnNtb2tlCiAgICBkZWYgdGVzdF92aXNyZWNvZ25pemUoc2VsZik6CiAgICAgICAgcmVzdWx0cyA9IHNlbGYuYWRhLnZpc3JlY29nbml6ZSgKICAgICAgICAgICAgdGVzdF9maWxlLAogICAgICAgICAgICB0ZXN0X2ZpbGUsCiAgICAgICAgICAgIGltZ193aWR0aD0wLjUsCiAgICAgICAgICAgIHZvbHVtZV90aHJlc2hvbGQ9MjE1LAogICAgICAgICkKICAgICAgICBhc3NlcnQgcmVzdWx0cwoKICAgIGRlZiB0ZXN0X3Zpc3JlY29nbml6ZV9zaW5nbGVfdGhyZWFkZWQoc2VsZik6CiAgICAgICAgc2VsZi5hZGEuc2V0X211bHRpcHJvY2Vzc2luZyhGYWxzZSkKICAgICAgICByZXN1bHRzID0gc2VsZi5hZGEudmlzcmVjb2duaXplKAogICAgICAgICAgICB0ZXN0X2ZpbGUsCiAgICAgICAgICAgIHRlc3RfZmlsZSwKICAgICAgICAgICAgaW1nX3dpZHRoPTAuNSwKICAgICAgICAgICAgdm9sdW1lX3RocmVzaG9sZD0yMTUsCiAgICAgICAgICAgIGNhbGNfbXNlPVRydWUsCiAgICAgICAgKQogICAgICAgIHNlbGYuYWRhLnNldF9tdWx0aXByb2Nlc3NpbmcoVHJ1ZSkKICAgICAgICBhc3NlcnQgcmVzdWx0cwoKICAgIGRlZiB0ZXN0X3Zpc3JlY29nbml6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgIHJlc3VsdHMgPSBzZWxmLmFkYS52aXNyZWNvZ25pemUoCiAgICAgICAgICAgIHRlc3RfZmlsZSwKICAgICAgICAgICAgdGVzdF9maWxlLAogICAgICAgICAgICBpbWdfd2lkdGg9MC41LAogICAgICAgICAgICB2b2x1bWVfdGhyZXNob2xkPTIxNiwKICAgICAgICAgICAgdm9sdW1lX2Zsb29yPTEwMCwKICAgICAgICAgICAgdmVydF9zY2FsaW5nPTAuOCwKICAgICAgICAgICAgaG9yaXpfc2NhbGluZz0wLjgsCiAgICAgICAgICAgIGNhbGNfbXNlPUZhbHNlLAogICAgICAgICkKICAgICAgICBhc3NlcnQgcmVzdWx0cwogICAgICAgIGFzc2VydCByZXN1bHRzWyJtYXRjaF9pbmZvIl1bInRlc3QubXAzIl1bIm1zZSJdWzBdID09IDIwMDAwMDAwLjAKCiAgICBkZWYgdGVzdF92aXNyZWNvZ25pemVfZGlyZWN0b3J5KHNlbGYpOgogICAgICAgIHJlc3VsdHMgPSBzZWxmLmFkYS52aXNyZWNvZ25pemVfZGlyZWN0b3J5KAogICAgICAgICAgICB0ZXN0X2ZpbGUsCiAgICAgICAgICAgICJ0ZXN0X2F1ZGlvL3Rlc3RlcnMvIiwKICAgICAgICAgICAgaW1nX3dpZHRoPTAuNSwKICAgICAgICAgICAgdm9sdW1lX3RocmVzaG9sZD0yMTUsCiAgICAgICAgKQo8fGZpbV9ob2xlfD4KICAgIEBweXRlc3QubWFyay5zbW9rZQogICAgZGVmIHRlc3RfY29ycmVjb2duaXplKHNlbGYpOgogICAgICAgIHJlc3VsdHMgPSBzZWxmLmFkYS5jb3JyZWNvZ25pemUoCiAgICAgICAgICAgIHRlc3RfZmlsZSwKICAgICAgICAgICAgdGVzdF9maWxlLAogICAgICAgICAgICBmaWx0ZXJfbWF0Y2hlcz1Ob25lLCAgIyBzZXRzIHRvIDAuNQogICAgICAgICkKICAgICAgICBhc3NlcnQgcmVzdWx0cwoKICAgIGRlZiB0ZXN0X2NvcnJlY29nbml6ZShzZWxmKToKICAgICAgICByZXN1bHRzID0gc2VsZi5hZGEuY29ycmVjb2duaXplKAogICAgICAgICAgICB0ZXN0X2ZpbGUsCiAgICAgICAgICAgIHRlc3RfZmlsZSwKICAgICAgICAgICAgbG9jYWxpdHk9MTAsCiAgICAgICAgICAgIGZpbHRlcl9tYXRjaGVzPU5vbmUsICAjIHNldHMgdG8gMC41CiAgICAgICAgKQogICAgICAgIGFzc2VydCByZXN1bHRzCgogICAgZGVmIHRlc3RfY29ycmVjb2duaXplX25vX3JldHVybihzZWxmKToKICAgICAgICByZXN1bHRzID0gc2VsZi5hZGEuY29ycmVjb2duaXplKAogICAgICAgICAgICB0ZXN0X2ZpbGUsCiAgICAgICAgICAgIHRlc3RfZmlsZSwKICAgICAgICAgICAgZmlsdGVyX21hdGNoZXM9MiwKICAgICAgICApCiAgICAgICAgYXNzZXJ0IHJlc3VsdHMgaXMgTm9uZQoKICAgIGRlZiB0ZXN0X2NvcnJlY29nbml6ZV9kaXJlY3RvcnlfbG9jYWxpdHkoc2VsZik6CiAgICAgICAgcmVzdWx0cyA9IHNlbGYuYWRhLmNvcnJlY29nbml6ZV9kaXJlY3RvcnkoCiAgICAgICAgICAgIHRlc3RfZmlsZSwKICAgICAgICAgICAgInRlc3RfYXVkaW8vdGVzdGVycy8iLAogICAgICAgICAgICBsb2NhbGl0eT0xMCwKICAgICAgICApCiAgICAgICAgYXNzZXJ0IHJlc3VsdHMKCiAgICBkZWYgdGVzdF9jb3JyZWNvZ25pemVfZGlyZWN0b3J5KHNlbGYpOgogICAgICAgIHJlc3VsdHMgPSBzZWxmLmFkYS5jb3JyZWNvZ25pemVfZGlyZWN0b3J5KAogICAgICAgICAgICB0ZXN0X2ZpbGUsCiAgICAgICAgICAgICJ0ZXN0X2F1ZGlvL3Rlc3RlcnMvIiwKICAgICAgICApCiAgICAgICAgYXNzZXJ0IHJlc3VsdHMKCiAgICBkZWYgdGVzdF9jb3JyZWNvZ25pemVfZGlyZWN0b3J5X3NpbmdsZV90aHJlYWRlZChzZWxmKToKICAgICAgICBzZWxmLmFkYS5zZXRfbXVsdGlwcm9jZXNzaW5nKEZhbHNlKQogICAgICAgIHJlc3VsdHMgPSBzZWxmLmFkYS5jb3JyZWNvZ25pemVfZGlyZWN0b3J5KAogICAgICAgICAgICB0ZXN0X2ZpbGUsCiAgICAgICAgICAgICJ0ZXN0X2F1ZGlvL3Rlc3RlcnMvIiwKICAgICAgICApCiAgICAgICAgc2VsZi5hZGEuc2V0X211bHRpcHJvY2Vzc2luZyhUcnVlKQogICAgICAgIGFzc2VydCByZXN1bHRzCgogICAgZGVmIHRlc3RfY29ycmVjb2duaXplX21heF9sYWdzKHNlbGYpOgogICAgICAgIF9tYXhfbGFncyA9IDQKICAgICAgICByZXN1bHRzID0gc2VsZi5hZGEuY29ycmVjb2duaXplKAogICAgICAgICAgICB0ZXN0X2ZpbGVfZWlnLAogICAgICAgICAgICB0ZXN0X2ZpbGVfZWlnMiwKICAgICAgICAgICAgbWF4X2xhZ3M9X21heF9sYWdzLAogICAgICAgICAgICBmaWx0ZXJfbWF0Y2hlcz0wLAogICAgICAgICkKICAgICAgICBhc3NlcnQgcmVzdWx0cwogICAgICAgIG9mZnNldF9zZWNvbmRzID0gcmVzdWx0c1sibWF0Y2hfaW5mbyJdW29zLnBhdGguYmFzZW5hbWUodGVzdF9maWxlX2VpZzIpXVsKICAgICAgICAgICAgIm9mZnNldF9zZWNvbmRzIgogICAgICAgIF0KICAgICAgICBhc3NlcnQgbWluKG9mZnNldF9zZWNvbmRzKSA8IF9tYXhfbGFncwogICAgICAgIGFzc2VydCBtYXgob2Zmc2V0X3NlY29uZHMpIDwgX21heF9sYWdzCgogICAgZGVmIHRlc3RfY29ycmVjb2duaXplX2xvY2FsaXR5X21heF9sYWdzKHNlbGYpOgogICAgICAgIF9tYXhfbGFncyA9IDQKICAgICAgICByZXN1bHRzID0gc2VsZi5hZGEuY29ycmVjb2duaXplKAogICAgICAgICAgICB0ZXN0X2ZpbGVfZWlnLAogICAgICAgICAgICB0ZXN0X2ZpbGVfZWlnMiwKICAgICAgICAgICAgbWF4X2xhZ3M9X21heF9sYWdzLAogICAgICAgICAgICBsb2NhbGl0eT0xMCwKICAgICAgICAgICAgZmlsdGVyX21hdGNoZXM9MCwKICAgICAgICApCiAgICAgICAgYXNzZXJ0IHJlc3VsdHMKICAgICAgICBvZmZzZXRfc2Vjb25kcyA9IHJlc3VsdHNbIm1hdGNoX2luZm8iXVtvcy5wYXRoLmJhc2VuYW1lKHRlc3RfZmlsZV9laWcyKV1bCiAgICAgICAgICAgICJvZmZzZXRfc2Vjb25kcyIKICAgICAgICBdCiAgICAgICAgYXNzZXJ0IG1pbihvZmZzZXRfc2Vjb25kcykgPCBfbWF4X2xhZ3MKICAgICAgICBhc3NlcnQgbWF4KG9mZnNldF9zZWNvbmRzKSA8IF9tYXhfbGFncwoKICAgIGRlZiB0ZXN0X2NvcnJlY29nbml6ZV9kaXJlY3Rvcnlfbm9fcmV0dXJuKHNlbGYpOgogICAgICAgIHJlc3VsdHMgPSBzZWxmLmFkYS5jb3JyZWNvZ25pemVfZGlyZWN0b3J5KAogICAgICAgICAgICB0ZXN0X2ZpbGUsCiAgICAgICAgICAgICJ0ZXN0cy8iLAogICAgICAgICkKICAgICAgICBhc3NlcnQgcmVzdWx0cyBpcyBOb25lCgogICAgZGVmIHRlc3RfY29ycmVjb2duaXplX3NwZWN0cm9ncmFtKHNlbGYpOgogICAgICAgIHJlc3VsdHMgPSBzZWxmLmFkYS5jb3JyZWNvZ25pemVfc3BlY3Ryb2dyYW0oCiAgICAgICAgICAgIHRlc3RfZmlsZV9laWcsCiAgICAgICAgICAgIHRlc3RfZmlsZV9laWcyLAogICAgICAgICkKICAgICAgICBhc3NlcnQgcmVzdWx0cwogICAgICAgIHNlbGYuYWRhLnByZXR0eV9wcmludF9yZXN1bHRzKHJlc3VsdHMpCgogICAgZGVmIHRlc3RfY29ycmVjb2duaXplX3NwZWN0cm9ncmFtX2xvY2FsaXR5KHNlbGYpOgogICAgICAgIHJlc3VsdHMgPSBzZWxmLmFkYS5jb3JyZWNvZ25pemVfc3BlY3Ryb2dyYW0oCiAgICAgICAgICAgIHRlc3RfZmlsZV9laWcsCiAgICAgICAgICAgIHRlc3RfZmlsZV9laWcyLAogICAgICAgICAgICBsb2NhbGl0eT0yMCwKICAgICAgICApCiAgICAgICAgYXNzZXJ0IHJlc3VsdHMKCiAgICBkZWYgdGVzdF9jb3JyZWNvZ25pemVfc3BlY3Ryb2dyYW1fZGlyZWN0b3J5KHNlbGYpOgogICAgICAgIHJlc3VsdHMgPSBzZWxmLmFkYS5jb3JyZWNvZ25pemVfc3BlY3Ryb2dyYW1fZGlyZWN0b3J5KAogICAgICAgICAgICB0ZXN0X2ZpbGVfZWlnLAogICAgICAgICAgICB0ZXN0X2ZvbGRlcl9laWcsCiAgICAgICAgKQogICAgICAgIGFzc2VydCByZXN1bHRzCgogICAgZGVmIHRlc3RfY29ycmVjb2duaXplX3NwZWN0cm9ncmFtX21heF9sYWdzKHNlbGYpOgogICAgICAgIF9tYXhfbGFncyA9IDQKICAgICAgICByZXN1bHRzID0gc2VsZi5hZGEuY29ycmVjb2duaXplX3NwZWN0cm9ncmFtKAogICAgICAgICAgICB0ZXN0X2ZpbGVfZWlnLAogICAgICAgICAgICB0ZXN0X2ZpbGVfZWlnMiwKICAgICAgICAgICAgbWF4X2xhZ3M9X21heF9sYWdzLAogICAgICAgICAgICBmaWx0ZXJfbWF0Y2hlcz0wLAogICAgICAgICkKICAgICAgICBhc3NlcnQgcmVzdWx0cwogICAgICAgIG9mZnNldF9zZWNvbmRzID0gcmVzdWx0c1sibWF0Y2hfaW5mbyJdW29zLnBhdGguYmFzZW5hbWUodGVzdF9maWxlX2VpZzIpXVsKICAgICAgICAgICAgIm9mZnNldF9zZWNvbmRzIgogICAgICAgIF0KICAgICAgICBhc3NlcnQgbWluKG9mZnNldF9zZWNvbmRzKSA8IF9tYXhfbGFncwogICAgICAgIGFzc2VydCBtYXgob2Zmc2V0X3NlY29uZHMpIDwgX21heF9sYWdzCgogICAgZGVmIHRlc3RfY29ycmVjb2duaXplX3NwZWN0cm9ncmFtX2xvY2FsaXR5X21heF9sYWdzKHNlbGYpOgogICAgICAgIF9tYXhfbGFncyA9IDQKICAgICAgICByZXN1bHRzID0gc2VsZi5hZGEuY29ycmVjb2duaXplX3NwZWN0cm9ncmFtKAogICAgICAgICAgICB0ZXN0X2ZpbGVfZWlnLAogICAgICAgICAgICB0ZXN0X2ZpbGVfZWlnMiwKICAgICAgICAgICAgbWF4X2xhZ3M9X21heF9sYWdzLAogICAgICAgICAgICBmaWx0ZXJfbWF0Y2hlcz0wLAogICAgICAgICAgICBsb2NhbGl0eT0xMCwKICAgICAgICApCiAgICAgICAgYXNzZXJ0IHJlc3VsdHMKICAgICAgICBvZmZzZXRfc2Vjb25kcyA9IHJlc3VsdHNbIm1hdGNoX2luZm8iXVtvcy5wYXRoLmJhc2VuYW1lKHRlc3RfZmlsZV9laWcyKV1bCiAgICAgICAgICAgICJvZmZzZXRfc2Vjb25kcyIKICAgICAgICBdCiAgICAgICAgYXNzZXJ0IG1pbihvZmZzZXRfc2Vjb25kcykgPCBfbWF4X2xhZ3MKICAgICAgICBhc3NlcnQgbWF4KG9mZnNldF9zZWNvbmRzKSA8IF9tYXhfbGFncwo8fGZpbV9zdWZmaXh8PgogICAgICAgIGFzc2VydCByZXN1bHRzCgo8fGZpbV9lbmR8Pg=="]
["709eb366f3a422163de79d6068cff68704f5989e-2","709eb366f3a422163de79d6068cff68704f5989e","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IHB5dGVzdAppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBzY2lweS5saW5hbGcgaW1wb3J0IGJsb2NrX2RpYWcKCgpjbGFzcyBDVF9oZWxwZXI6CiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgZnVuY3Rpb24oc3RhdGUsICoqa3dhcmdzKToKICAgICAgICB0aW1lX2ludGVydmFsX3NlYyA9IGt3YXJnc1sndGltZV9pbnRlcnZhbCddLnRvdGFsX3NlY29uZHMoKQogICAgICAgIHN2MSA9IHN0YXRlLnN0YXRlX3ZlY3Rvcgo8fGZpbV9ob2xlfD4KICAgICAgICBzdjIgPSBucC5hcnJheSgKICAgICAgICAgICAgW3N2MVswXSArIG5wLnNpbihkQW5nbGUpL3R1cm5fcmF0ZSAqIHN2MVsxXSAtIHN2MVszXS90dXJuX3JhdGUqKDEuIC0gbnAuY29zKGRBbmdsZSkpLAogICAgICAgICAgICAgc3YxWzFdICogbnAuY29zKGRBbmdsZSkgLSBzdjFbM10gKiBucC5zaW4oZEFuZ2xlKSwKICAgICAgICAgICAgIHN2MVsxXS90dXJuX3JhdGUgKiAoMS4gLSBucC5jb3MoZEFuZ2xlKSkgKyBzdjFbMl0gKyBzdjFbM10qbnAuc2luKGRBbmdsZSkvdHVybl9yYXRlLAogICAgICAgICAgICAgc3YxWzFdICogbnAuc2luKGRBbmdsZSkgKyBzdjFbM10gKiBucC5jb3MoZEFuZ2xlKSwKICAgICAgICAgICAgIHR1cm5fcmF0ZV0pCgogICAgICAgIHJldHVybiBzdjIKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgY292YXIobGluZWFyX25vaXNlX2NvZWZmcywgdHVybl9ub2lzZV9jb2VmZiwgdGltZV9pbnRlcnZhbCk6CiAgICAgICAgIiIiUmV0dXJucyB0aGUgdHJhbnNpdGlvbiBtb2RlbCBub2lzZSBjb3ZhcmlhbmNlIG1hdHJpeC4KCiAgICAgICAgUmV0dXJucwogICAgICAgIC0tLS0tLS0KICAgICAgICA6IDpjbGFzczpgc3RvbmVzb3VwLnR5cGVzLnN0YXRlLkNvdmFyaWFuY2VNYXRyaXhgIG9mIHNoYXBlXAogICAgICAgICg6cHk6YXR0cjpgfm5kaW1fc3RhdGVgLCA6cHk6YXR0cjpgfm5kaW1fc3RhdGVgKQogICAgICAgICAgICBUaGUgcHJvY2VzcyBub2lzZSBjb3ZhcmlhbmNlLgogICAgICAgICIiIgogICAgICAgIHFfeCwgcV95ID0gbGluZWFyX25vaXNlX2NvZWZmcwogICAgICAgIHEgPSB0dXJuX25vaXNlX2NvZWZmCiAgICAgICAgZHQgPSB0aW1lX2ludGVydmFsLnRvdGFsX3NlY29uZHMoKQoKICAgICAgICBRID0gbnAuYXJyYXkoW1tkdCoqMyAvIDMuLCBkdCoqMiAvIDIuXSwKICAgICAgICAgICAgICAgICAgICAgIFtkdCoqMiAvIDIuLCBkdF1dKQogICAgICAgIEMgPSBibG9ja19kaWFnKFEqcV94KioyLCBRKnFfeSoqMiwgcSoqMi9kdCkKCiAgICAgICAgcmV0dXJuIEMKCgpAcHl0ZXN0LmZpeHR1cmUKZGVmIENUX21vZGVsKCk6CiAgICByZXR1cm4gQ1RfaGVscGVyCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgdHVybl9yYXRlID0gc3YxWzQsIDpdCiAgICAgICAgIyBBdm9pZCBkaXZpZGUgYnkgemVybyBpbiB0aGUgZnVuY3Rpb24gZXZhbHVhdGlvbgogICAgICAgIHR1cm5fcmF0ZVt0dXJuX3JhdGUgPT0gMC5dID0gbnAuZmluZm8oZmxvYXQpLmVwcwogICAgICAgIGRBbmdsZSA9IHR1cm5fcmF0ZSAqIHRpbWVfaW50ZXJ2YWxfc2VjCjx8ZmltX2VuZHw+"]
["702da371ff01a4669d3f00bb36f9d92145d44221-1","702da371ff01a4669d3f00bb36f9d92145d44221","PHxmaW1fcHJlZml4fD4KI21ldG9kbyAxIGFkaXZpbmEgZWwgbnVtZXJvCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCmltcG9ydCByYW5kb20Kbj1yYW5kb20ucmFuZHJhbmdlKDEsMTAwKQpudT1pbnQoaW5wdXQoJ0RpbWUgZWwgbsO6bWVybyBxdWUgY3JlZXMgcXVlIGhlIGVsZWdpZG86ICcpKQo8fGZpbV9lbmR8Pg=="]
["8558abbe69f8181e9ada4ef0e24db8ca3c433fdb-1","8558abbe69f8181e9ada4ef0e24db8ca3c433fdb","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBqc29uCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgdGltZQpmcm9tIHR5cGluZyBpbXBvcnQgRGljdAoKZnJvbSBkb2MyanNvbi5zcHAyanNvbi5zcHAuc3BwX2NsaWVudCBpbXBvcnQgU3BwQ2xpZW50CmZyb20gZG9jMmpzb24uc3BwMmpzb24uc3BwLnNwcF9qc29uX3RvX3Myb3JjX2pzb24gaW1wb3J0IGNvbnZlcnRfc3BwX2pzb25fdG9fczJvcmNfanNvbgoKCgpkZWYgcHJvY2Vzc19wZGZfZmlsZShpbnB1dF9maWxlOiBzdHIsIHRlbXBfZGlyOiBzdHIsIG91dHB1dF9kaXI6IHN0cikgLT4gc3RyOgogICAgIiIiCiAgICBQcm9jZXNzIGEgUERGIGZpbGUgYW5kIGdldCBKU09OIHJlcHJlc2VudGF0aW9uCiAgICA6cGFyYW0gaW5wdXRfZmlsZToKICAgIDpwYXJhbSB0ZW1wX2RpcjoKICAgIDpwYXJhbSBvdXRwdXRfZGlyOgogICAgOnJldHVybjoKICAgICIiIgogICAgIyBnZXQgcGFwZXIgaWQgYXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUKICAgIHBhcGVyX2lkID0gJy4nLmpvaW4oaW5wdXRfZmlsZS5zcGxpdCgnLycpWy0xXS5zcGxpdCgnLicpWzotMV0pCiAgICBzcHBfanNvbl9maWxlID0gb3MucGF0aC5qb2luKHRlbXBfZGlyLCBmJ3twYXBlcl9pZH0uanNvbicpCiAgICBvdXRwdXRfZmlsZSA9IG9zLnBhdGguam9pbihvdXRwdXRfZGlyLCBmJ3twYXBlcl9pZH0uanNvbicpCgogICAgIyBjaGVjayBpZiBpbnB1dCBmaWxlIGV4aXN0cyBhbmQgb3V0cHV0IGZpbGUgZG9lc24ndAogICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGlucHV0X2ZpbGUpOgogICAgICAgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yKGYie2lucHV0X2ZpbGV9IGRvZXNuJ3QgZXhpc3QiKQogICAgaWYgb3MucGF0aC5leGlzdHMob3V0cHV0X2ZpbGUpOgogICAgICAgIHJhaXNlIFdhcm5pbmcoZid7b3V0cHV0X2ZpbGV9IGFscmVhZHkgZXhpc3RzIScpCgogICAgIyBwcm9jZXNzIFBERiB0aHJvdWdoIFNQUCAtPiBTUFAgSlNPTgogICAgY2xpZW50ID0gU3BwQ2xpZW50KCkKICAgICMgVE9ETzogY29tcHV0ZSBQREYgaGFzaAogICAgY2xpZW50LnByb2Nlc3MoaW5wdXRfZmlsZSwgdGVtcF9kaXIpCgogICAgIyBwcm9jZXNzIFNQUCBKU09OIC0+IFMyT1JDIEpTT04KICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cyhzcHBfanNvbl9maWxlKQogICAgd2l0aCBvcGVuKHNwcF9qc29uX2ZpbGUsICdyJykgYXMgZl9pbjoKICAgICAgICBzcHBfanNvbiA9IGpzb24ubG9hZChmX2luKQogICAgcGFwZXIgPSBjb252ZXJ0X3NwcF9qc29uX3RvX3Myb3JjX2pzb24oc3BwX2pzb249c3BwX2pzb24pCgogICAgIyB3cml0ZSB0byBmaWxlCiAgICB3aXRoIG9wZW4ob3V0cHV0X2ZpbGUsICd3JykgYXMgb3V0ZjoKICAgICAgICBqc29uLmR1bXAocGFwZXIucmVsZWFzZV9qc29uKCksIG91dGYsIGluZGVudD00LCBzb3J0X2tleXM9RmFsc2UpCgogICAgcmV0dXJuIG91dHB1dF9maWxlCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSJSdW4gUzJPUkMgUERGMkpTT04iKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWkiLCAiLS1pbnB1dCIsIGRlZmF1bHQ9Tm9uZSwgaGVscD0icGF0aCB0byB0aGUgaW5wdXQgUERGIGZpbGUiKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXQiLCAiLS10ZW1wIiwgZGVmYXVsdD0ndGVtcC8nLCBoZWxwPSJwYXRoIHRvIHRoZSB0ZW1wIGRpciBmb3IgcHV0dGluZyB0ZWkgeG1sIGZpbGVzIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1vIiwgIi0tb3V0cHV0IiwgZGVmYXVsdD0nb3V0cHV0LycsIGhlbHA9InBhdGggdG8gdGhlIG91dHB1dCBkaXIgZm9yIHB1dHRpbmcganNvbiBmaWxlcyIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItayIsICItLWtlZXAiLCBhY3Rpb249J3N0b3JlX3RydWUnKQoKICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCjx8ZmltX2hvbGV8PgogICAga2VlcF90ZW1wID0gYXJncy5rZWVwCgogICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCgogICAgb3MubWFrZWRpcnModGVtcF9wYXRoLCBleGlzdF9vaz1UcnVlKQogICAgb3MubWFrZWRpcnMob3V0cHV0X3BhdGgsIGV4aXN0X29rPVRydWUpCgogICAgcHJvY2Vzc19wZGZfZmlsZShpbnB1dF9wYXRoLCB0ZW1wX3BhdGgsIG91dHB1dF9wYXRoKQoKICAgIHJ1bnRpbWUgPSByb3VuZCh0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUsIDMpCiAgICBwcmludCgicnVudGltZTogJXMgc2Vjb25kcyAiICUgKHJ1bnRpbWUpKQogICAgcHJpbnQoJ2RvbmUuJykKPHxmaW1fc3VmZml4fD4KCiAgICBpbnB1dF9wYXRoID0gYXJncy5pbnB1dAogICAgdGVtcF9wYXRoID0gYXJncy50ZW1wCiAgICBvdXRwdXRfcGF0aCA9IGFyZ3Mub3V0cHV0Cjx8ZmltX2VuZHw+"]
["6926b98ab54c18806f3e03601c27244d29dc7174-2","6926b98ab54c18806f3e03601c27244d29dc7174","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAubW9kZWxfdXRpbHMgaW1wb3J0IGNvbGxhdGVfZm4KPHxmaW1fZW5kfD4="]
["30acda6b97b7965e6f045d196af7c098218f2ef9-3","30acda6b97b7965e6f045d196af7c098218f2ef9","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuaHR0cHNydiBpbXBvcnQgKgo8fGZpbV9lbmR8Pg=="]
["cce63670599abf9818422d34e6a7a26375f12f66-1","cce63670599abf9818422d34e6a7a26375f12f66","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBDb25uREIuZGJfbXlzcWwgaW1wb3J0IE9wX015c3FsCgpDT0RFXyA9ICdzaW5hJwpOQU1FXyA9ICduYW1lJwo8fGZpbV9lbmR8Pg=="]
["85144da48264a2fa6b4789cd5b3443929182c5b7-1","85144da48264a2fa6b4789cd5b3443929182c5b7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5Z2FtZQoKY2xvY2sgPSBweWdhbWUudGltZS5DbG9jaygpCmNsb2NrLnRpY2soNSkKcHlnYW1lLmluaXQoKQoKV0lEVEgsIEhFSUdIVCA9IDYxMCwgNjcwClRPUF9CT1RUT01fU1BBQ0UgPSAxMApNQVBfV0lEVEgsIE1BUF9IRUlHSFQgPSBXSURUSCAtIFRPUF9CT1RUT01fU1BBQ0UsIEhFSUdIVCAtIFRPUF9CT1RUT01fU1BBQ0UKCkJMQUNLID0gKDAsIDAsIDApCllFTExPVyA9ICgyNTUsIDI1NSwgMCkKQkxVRSA9ICgwLCAwLCAyNTUpClJFRCA9ICgyNTUsIDAsIDApCkdSRUVOID0gKDAsIDI1NSwgMCkKV0hJVEUgPSAoMjU1LCAyNTUsIDI1NSkKClRFWFRfU0laRV9NRU5VID0gMzAKRk9OVF9NRU5VID0gJ1BBQy1GT05ULlRURicKVElUTEVfU0laRSA9IDI2ClRFWFRfU0laRV9HQU1FID0gMTMKRk9OVF9HQU1FID0gJ2FyaWFsIGJsYWNrJwpwb3NGaXJzdE9wdGlvbiA9IChXSURUSCAvLyAyIC0gNTAsIEhFSUdIVCAvLyAyICsgMzApCgpzY3JlZW4gPSBweWdhbWUuZGlzcGxheS5zZXRfbW9kZSgoV0lEVEgsIEhFSUdIVCkpCmltZyA9IHB5Z2FtZS5pbWFnZS5sb2FkKCdpbWcvaW5zdC5wbmcnKQoKCmRlZiBkcmF3X3RleHQobWVzc2FnZSwgc2NyZWVuLCBwb3NpdGlvbiwgc2l6ZSwgZm9udF90eXBlLCBjb2xvcik6CiAgICBmb250ID0gcHlnYW1lLmZvbnQuRm9udChmb250X3R5cGUsIHNpemUpCiAgICB0ZXh0ID0gZm9udC5yZW5kZXIobWVzc2FnZSwgRmFsc2UsIGNvbG9yKQogICAgdGV4dF9zaXplID0gdGV4dC5nZXRfc2l6ZSgpCiAgICBwb3NpdGlvblswXSA9IHBvc2l0aW9uWzBdIC0gdGV4dF9zaXplWzBdIC8vIDIKICAgIHNjcmVlbi5ibGl0KHRleHQsIHBvc2l0aW9uKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZGVmIG1lbnVJbnN0cnVjb2VzKCk6CiAgICBSdW5uaW5nID0gVHJ1ZQogICAgd2hpbGUgUnVubmluZzoKPHxmaW1fZW5kfD4="]
["d91a56952c911400545b808960d314081d8ba063-1","d91a56952c911400545b808960d314081d8ba063","PHxmaW1fcHJlZml4fD4KZnJvbSBwaXBlbnZfc2V0dXAgaW1wb3J0IGxvY2tmaWxlX3BhcnNlcgoKCmRlZiB0ZXN0X2dldF9kZXZfZGVwZW5kZW5jaWVzKHNoYXJlZF9kYXRhZGlyKToKICAgIGxvY2FsLCByZW1vdGUgPSBsb2NrZmlsZV9wYXJzZXIuZ2V0X2Rldl9wYWNrYWdlcygKPHxmaW1faG9sZXw+CiAgICApCiAgICBhc3NlcnQgImdlbmVyaWMtcGFja2FnZSIgaW4gbG9jYWwKICAgIGFzc2VydCAiZ2l0ZGlyIiBpbiByZW1vdGUKPHxmaW1fc3VmZml4fD4KICAgICAgICBzaGFyZWRfZGF0YWRpciAvICJnZW5lcmljX25pY2VfMCIgLyAiUGlwZmlsZS5sb2NrIgo8fGZpbV9lbmR8Pg=="]
["eb78a2686a3c3af575018900b969d732500d0958-4","eb78a2686a3c3af575018900b969d732500d0958","PHxmaW1fcHJlZml4fD4KY2xhc3MgU29sdXRpb246CiAgICBtb250aHMgPSBbCiAgICAgICAgIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsCiAgICAgICAgIk1heSIsICJKdW4iLCAiSnVsIiwgIkF1ZyIsCiAgICAgICAgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyIKICAgIF0KCiAgICBkZWYgcmVmb3JtYXREYXRlKHNlbGYsIGRhdGU6IHN0cikgLT4gc3RyOgogICAgICAgIGRheSwgbW9udGgsIHllYXIgPSBkYXRlLnNwbGl0KCcgJykKICAgICAgICBkYXksIG1vbnRoID0gZGF5WzotMl0sIHNlbGYubW9udGhzLmluZGV4KG1vbnRoKSArIDEKICAgICAgICByZXR1cm4gIi0iLmpvaW4oWwogICAgICAgICAgICB5ZWFyLAogICAgICAgICAgICBmJzB7bW9udGh9JyBpZiBtb250aCA8IDEwIGVsc2UgZid7bW9udGh9JywKICAgICAgICAgICAgZGF5IGlmIGxlbihkYXkpID09IDIgZWxzZSBmJzB7ZGF5fScKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIF0pCjx8ZmltX2VuZHw+"]
["7ac62922186642c229442efdf6972a87e0719a45-3","7ac62922186642c229442efdf6972a87e0719a45","PHxmaW1fcHJlZml4fD4KIiIiCkZ1bmN0aW9ucyB0byBhbmFseXNlIHRoZSBjb2xvdXIgZGlzdHJpYnV0aW9uIG9mIG9iamVjdHMKIiIiCgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IGN2Mgpmcm9tIHNoYXBlX2FuYWx5c2lzIGltcG9ydCB1bmRlcnNhbXBsZSxpbnZfZmZ0LGZvdXJpZXJfY29tcGxleGl0eQoKQ09OVk9MVVRJT05fT1BFUkFUT1IgPSBucC5vbmVzKFszXSkgLyAzCgpkZWYgcGVha19wcm9maWxlcyhpbWFnZSxjbnQpOgogICAgZGVmIGZsb29yaW50KGFycik6CiAgICAgICAgcmV0dXJuIG5wLmludDE2KG5wLmZsb29yKGFycikpCgogICAgZGVmIHNpemVfY2FwKHgseSk6CiAgICAgICAgaWYgeCA+PSBpbWFnZS5zaGFwZVswXToKICAgICAgICAgICAgeCA9IGltYWdlLnNoYXBlWzBdIDwgMQogICAgICAgIGlmIHkgPj0gaW1hZ2Uuc2hhcGVbMV06CiAgICAgICAgICAgIHkgPSBpbWFnZS5zaGFwZVsxXSA8IDEKICAgICAgICByZXR1cm4geCx5CgogICAgaWYgKGNudC5zaGFwZVswXSA+IDEwKSAqIChsZW4oY250LnNoYXBlKSA9PSAzKToKICAgICAgICByZWN0ID0gY3YyLm1pbkFyZWFSZWN0KGNudCkKICAgICAgICBwb2ludHMgPSBjdjIuYm94UG9pbnRzKHJlY3QpCiAgICAgICAgeTEseDEgPSBwb2ludHNbMF0KICAgICAgICB5Mix4MiA9IHBvaW50c1sxXQogICAgICAgIHkzLHgzID0gcG9pbnRzWzJdCiAgICAgICAgeTQseDQgPSBwb2ludHNbM10KICAgICAgICBtcDEgPSBzaXplX2NhcCgoeDIreDEpLzIsKHkyK3kxKS8yKQogICAgICAgIG1wMiA9IHNpemVfY2FwKCh4Myt4MikvMiwoeTMreTIpLzIpCiAgICAgICAgbXAzID0gc2l6ZV9jYXAoKHg0K3gzKS8yLCh5NCt5MykvMikKICAgICAgICBtcDQgPSBzaXplX2NhcCgoeDEreDQpLzIsKHkxK3k0KS8yKQoKICAgICAgICBkaXN0XzEgPSBucC5zcXJ0KChtcDFbMF0gLSBtcDNbMF0pICoqIDIgKyAobXAxWzFdIC0gbXAzWzFdKSAqKiAyKQogICAgICAgIGRpc3RfMiA9IG5wLnNxcnQoKG1wMlswXSAtIG1wNFswXSkgKiogMiArIChtcDJbMV0gLSBtcDRbMV0pICoqIDIpCiAgICAgICAgZGlzdF8xID0gbnAuY2VpbChkaXN0XzEpLmFzdHlwZShucC5pbnQxNikKICAgICAgICBkaXN0XzIgPSBucC5jZWlsKGRpc3RfMikuYXN0eXBlKG5wLmludDE2KQoKICAgICAgICB4X2Nvb3Jkc18xID0gZmxvb3JpbnQobnAubGluc3BhY2UobXAxWzBdLG1wM1swXSxkaXN0XzEpKQogICAgICAgIHlfY29vcmRzXzEgPSBmbG9vcmludChucC5saW5zcGFjZShtcDFbMV0sbXAzWzFdLGRpc3RfMSkpCiAgICAgICAgeF9jb29yZHNfMiA9IGZsb29yaW50KG5wLmxpbnNwYWNlKG1wMlswXSxtcDRbMF0sZGlzdF8yKSkKICAgICAgICB5X2Nvb3Jkc18yID0gZmxvb3JpbnQobnAubGluc3BhY2UobXAyWzFdLG1wNFsxXSxkaXN0XzIpKQoKICAgICAgICBjb2xvcl9kaXN0cmlidXRpb25fbGlzdF8xID0gZ2V0X3BlYWtfcHJvZmlsZXMoCiAgICAgICAgICAgIGltYWdlLHhfY29vcmRzXzEseV9jb29yZHNfMSkKCiAgICAgICAgY29sb3JfZGlzdHJpYnV0aW9uX2xpc3RfMiA9IGdldF9wZWFrX3Byb2ZpbGVzKAogICAgICAgICAgICBpbWFnZSx4X2Nvb3Jkc18yLHlfY29vcmRzXzIpCgogICAgZWxzZToKICAgICAgICBjb2xvcl9kaXN0cmlidXRpb25fbGlzdF8xID0gW25wLm5hbixucC5uYW4sbnAubmFuLG5wLm5hbl0KICAgICAgICBjb2xvcl9kaXN0cmlidXRpb25fbGlzdF8yID0gW25wLm5hbixucC5uYW4sbnAubmFuLG5wLm5hbl0KCiAgICByZXR1cm4gY29sb3JfZGlzdHJpYnV0aW9uX2xpc3RfMSxjb2xvcl9kaXN0cmlidXRpb25fbGlzdF8yCgpkZWYgZ2V0X3BlYWtfcHJvZmlsZXMoaW1hZ2UseF9wcm9maWxlX2Nvb3Jkcyx5X3Byb2ZpbGVfY29vcmRzKToKICAgIGlmIGxlbih4X3Byb2ZpbGVfY29vcmRzKSA+PSAxMDoKICAgICAgICBwcm9maWxlID0gaW1hZ2VbeF9wcm9maWxlX2Nvb3Jkcyx5X3Byb2ZpbGVfY29vcmRzXQogICAgICAgIHByb2ZpbGUgPSBucC5tZWFuKHByb2ZpbGUsYXhpcz0xKQogICAgICAgIHByb2ZpbGUgPSBucC5jb252b2x2ZShwcm9maWxlLENPTlZPTFVUSU9OX09QRVJBVE9SLG1vZGU9J3NhbWUnKQogICAgICAgIHByb2ZpbGUgPSBwcm9maWxlIC0gbnAubWVhbihwcm9maWxlKQogICAgICAgIG91dHB1dCA9IFsKICAgICAgICAgICAgZm91cmllcl9jb21wbGV4aXR5KHByb2ZpbGUpLAogICAgICAgICAgICBucC5zdGQocHJvZmlsZSksCiAgICAgICAgICAgIG5wLm1heChwcm9maWxlKSwKICAgICAgICAgICAgbnAubWluKHByb2ZpbGUpCiAgICAgICAgICAgIF0KCiAgICBlbHNlOgogICAgICAgIG91dHB1dCA9IFsKICAgICAgICAgICAgbnAubmFuLAogICAgICAgICAgICBucC5uYW4sCiAgICAgICAgICAgIG5wLm5hbiwKICAgICAgICAgICAgbnAubmFuCiAgICAgICAgICAgIF0KCiAgICByZXR1cm4gb3V0cHV0CgpkZWYgY2VudGVyX29mX21hc3MoY29vcmRzLHZhbHVlcyk6CiAgICBkZWYgY20odmFsdWVzLGNvb3JkKToKICAgICAgICBvdXQgPSBucC5zdW0odmFsdWVzICogY29vcmQpIC8gbnAuc3VtKHZhbHVlcykKICAgICAgICByZXR1cm4gb3V0CiAgICBjZW50ZXJzID0gW2NtKHZhbHVlcyxjb29yZCkgZm9yIGNvb3JkIGluIGNvb3Jkc10KICAgIHJldHVybiBucC5hcnJheShjZW50ZXJzKQoKZGVmIG1hc3NfZGlzcGxhY2VtZW50KGltYWdlLHgseSk6CiAgICByX21hc3MgPSBpbWFnZVt4LHksMF0KICAgIGJfbWFzcyA9IGltYWdlW3gseSwxXQogICAgZ19tYXNzID0gaW1hZ2VbeCx5LDJdCiAgICBhdl9tYXNzID0gKHJfbWFzcyArIGJfbWFzcyArIGdfbWFzcykgLyAzLgogICAgYmluYXJ5X21hc3MgPSBucC5vbmVzX2xpa2UoYXZfbWFzcykKICAgIHJfY2VudGVyID0gY2VudGVyX29mX21hc3MoW3gseV0scl9tYXNzKQogICAgYl9jZW50ZXIgPSBjZW50ZXJfb2ZfbWFzcyhbeCx5XSxiX21hc3MpCiAgICBnX2NlbnRlciA9IGNlbnRlcl9vZl9tYXNzKFt4LHldLGdfbWFzcykKICAgIGF2X2NlbnRlciA9IGNlbnRlcl9vZl9tYXNzKFt4LHldLGF2X21hc3MpCiAgICBiaW5hcnlfY2VudGVyID0gY2VudGVyX29mX21hc3MoW3gseV0sYmluYXJ5X21hc3MpCgogICAgbWFzc19kaXNwbGFjZW1lbnRfbGlzdCA9IFsKICAgICAgICBucC5zcXJ0KG5wLnN1bShucC5zcXVhcmUocl9jZW50ZXIgLSBiaW5hcnlfY2VudGVyKSkpLAogICAgICAgIG5wLnNxcnQobnAuc3VtKG5wLnNxdWFyZShnX2NlbnRlciAtIGJpbmFyeV9jZW50ZXIpKSksCiAgICAgICAgbnAuc3FydChucC5zdW0obnAuc3F1YXJlKGJfY2VudGVyIC0gYmluYXJ5X2NlbnRlcikpKSwKICAgICAgICBucC5zcXJ0KG5wLnN1bShucC5zcXVhcmUoYXZfY2VudGVyIC0gYmluYXJ5X2NlbnRlcikpKQogICAgXQoKICAgIHJldHVybiBtYXNzX2Rpc3BsYWNlbWVudF9saXN0CgpkZWYgd3JhcHBlcihpbWFnZSxjbnQseCx5KToKICAgIG91dCA9IHt9Cjx8ZmltX2hvbGV8PgogICAgb3V0WydwZWFrX3Byb2ZpbGVfbWFqb3Jfc3RkJ10gPSBwcF8xX3N0ZAogICAgb3V0WydwZWFrX3Byb2ZpbGVfbWFqb3JfbWF4J10gPSBwcF8xX21heAogICAgb3V0WydwZWFrX3Byb2ZpbGVfbWFqb3JfbWluJ10gPSBwcF8xX21pbgoKICAgIG91dFsncGVha19wcm9maWxlX21pbm9yX2ZjJ10gPSBwcF8yX2ZjCiAgICBvdXRbJ3BlYWtfcHJvZmlsZV9taW5vcl9zdGQnXSA9IHBwXzJfc3RkCiAgICBvdXRbJ3BlYWtfcHJvZmlsZV9taW5vcl9tYXgnXSA9IHBwXzJfbWF4CiAgICBvdXRbJ3BlYWtfcHJvZmlsZV9taW5vcl9taW4nXSA9IHBwXzJfbWluCgogICAgbWQgPSBtYXNzX2Rpc3BsYWNlbWVudChpbWFnZSx4LHkpCiAgICBvdXRbJ21hc3NfZGlzcGxhY2VtZW50X3JlZCddID0gbWRbMF0KICAgIG91dFsnbWFzc19kaXNwbGFjZW1lbnRfZ3JlZW4nXSA9IG1kWzFdCiAgICBvdXRbJ21hc3NfZGlzcGxhY2VtZW50X2JsdWUnXSA9IG1kWzJdCiAgICBvdXRbJ21hc3NfZGlzcGxhY2VtZW50X2F2J10gPSBtZFszXQoKICAgIHJldHVybiBvdXQKCmRlZiB3cmFwcGVyX3NlcGFyYXRlKGltYWdlLGNudCx4LHkpOgogICAgb3V0ID0ge30KICAgIAogICAgbWQgPSBtYXNzX2Rpc3BsYWNlbWVudChpbWFnZSx4LHkpCiAgICBvdXRbJ21hc3NfZGlzcGxhY2VtZW50X3JlZCddID0gbWRbMF0KICAgIG91dFsnbWFzc19kaXNwbGFjZW1lbnRfZ3JlZW4nXSA9IG1kWzFdCiAgICBvdXRbJ21hc3NfZGlzcGxhY2VtZW50X2JsdWUnXSA9IG1kWzJdCiAgICBvdXRbJ21hc3NfZGlzcGxhY2VtZW50X2F2J10gPSBtZFszXQoKICAgIHJldHVybiBvdXQKPHxmaW1fc3VmZml4fD4KICAgIHBwXzEscHBfMiA9IHBlYWtfcHJvZmlsZXMoaW1hZ2UsY250KQogICAgcHBfMV9mYyxwcF8xX3N0ZCxwcF8xX21heCxwcF8xX21pbiA9IHBwXzEKICAgIHBwXzJfZmMscHBfMl9zdGQscHBfMl9tYXgscHBfMl9taW4gPSBwcF8yCiAgICBvdXRbJ3BlYWtfcHJvZmlsZV9tYWpvcl9mYyddID0gcHBfMV9mYwo8fGZpbV9lbmR8Pg=="]
["eba63b0aa2e0442105459115cf7104c3ccde6e03-4","eba63b0aa2e0442105459115cf7104c3ccde6e03","PHxmaW1fcHJlZml4fD4KZnJvbSB0a21hdHJpeC50a21hdHJpeF9jbGFzcyBpbXBvcnQgTUFUUklYCgoKI01BVFJJWC5wbG90X3Jlc3VsdHMoIlRJQyAxNjkyODUwOTciLCAiL2hvbWUvbWFydGluL0Rlc2t0b3AvcnVuX3Rlc3RzL3Rlc3RzL1RJQzE2OTI4NTA5N19pcl9ub25lIiwgMSkKTUFUUklYLnBsb3RfZGlmZigiVElDIDE2OTI4NTA5NyIsICIvaG9tZS9tYXJ0aW4vRGVza3RvcC9ydW5fdGVzdHMvdGVzdHMvVElDMTY5Mjg1MDk3X2lyX3Nhc2ciLAogICAgICAgICAgICAgICAgICIvaG9tZS9tYXJ0aW4vRGVza3RvcC9ydW5fdGVzdHMvdGVzdHMvVElDMTY5Mjg1MDk3X2lyX25vbmUiLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgIi4vIikKPHxmaW1fZW5kfD4="]
["15e86868d7944d76f661664bdba1580b10ac861a-3","15e86868d7944d76f661664bdba1580b10ac861a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBwcmVkaWN0CmZyb20gZmxhc2sgaW1wb3J0IGpzb25pZnksIHJlbmRlcl90ZW1wbGF0ZSwgcmVxdWVzdCwgcmVkaXJlY3QsIHVybF9mb3IKZnJvbSBmbGFzayBpbXBvcnQgc2VuZF9maWxlCgpGX1VQX0Y9Jy4uL3ByZWRpY3QnICMgRm9ybSB1cGxvYWQgZm9sZGVyCklfVVBfRj0nLi4vaW1nX2RhdGEnClNFUlZFUl9EQVRBQkFTRT0nLi4vZm9ybXMnICMgRm9ybSBEb3dubG9hZCBGb2xkZXIKVVBMT0FEX0ZPTERFUiA9ICcuLy4uL3VwbG9hZHMnClBIT1RPX0ZPTERFUiA9ICcuLy4uL2ltZ19kYXRhJwoKZGVmIHVwbG9hZF9mb3JtKGRhdCk6CiAgICBwcmludCgidXBsb2FkaW5nIikKICAgIGYgPSByZXF1ZXN0LmZpbGVzWydmaWxlJ10KICAgIGYuc2F2ZShvcy5wYXRoLmpvaW4oVVBMT0FEX0ZPTERFUiwgJ3ByZWRpY3QudHh0JykpCiAgICBwID0gcHJlZGljdC5nZXRfZmlsZShvcy5wYXRoLmpvaW4oVVBMT0FEX0ZPTERFUiwncHJlZGljdC50eHQnKSkKICAgIHJldHVybiBwcmVkaWN0LnByZWRpY3QocCkKCmRlZiBkb3dubG9hZChkYXQpOgogICAgcGF0aCA9IG9zLnBhdGguam9pbihTRVJWRVJfREFUQUJBU0UsICdmb3JtLnR4dCcpCiAgICByZXR1cm4gc2VuZF9maWxlKHBhdGgsIGFzX2F0dGFjaG1lbnQ9VHJ1ZSkKCmRlZiB1cGxvYWRfcGhvdG8ocGhvdG8pOgogICAgZiA9IHJlcXVlc3QuZmlsZXNbJ2ZpbGUnXQogICAgZi5zYXZlKG9zLnBhdGguam9pbihQSE9UT19GT0xERVIsIHBob3RvKycucG5nJykpCiAgICByZXR1cm4gIlN1Y2Nlc3NmdWwgVXBsb2FkIiAKCmRlZiB1cGxvYWRfcGhvdG8yKHBob3RvKToKICBpZiByZXF1ZXN0Lm1ldGhvZCA9PSAnUE9TVCc6CiAgICAgICAgIyBjaGVjayBpZiB0aGUgcG9zdCByZXF1ZXN0IGhhcyB0aGUgZmlsZSBwYXJ0CiAgICBpZiAnZmlsZScgbm90IGluIHJlcXVlc3QuZmlsZXM6CiAgICAgIGZsYXNoKCdObyBmaWxlIHBhcnQnKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgIHJldHVybiByZWRpcmVjdChyZXF1ZXN0LnVybCkKICAgICAgZmlsZSA9IHJlcXVlc3QuZmlsZXNbJ2ZpbGUnXQogICAgICAgICMgaWYgdXNlciBkb2VzIG5vdCBzZWxlY3QgZmlsZSwgYnJvd3NlciBhbHNvCiAgICAgICAgIyBzdWJtaXQgYSBlbXB0eSBwYXJ0IHdpdGhvdXQgZmlsZW5hbQo8fGZpbV9lbmR8Pg=="]
["7769a0ce2f468324331a667e5f1d40119495509e-1","7769a0ce2f468324331a667e5f1d40119495509e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBjdWRubgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpvcy5lbnZpcm9uWydNWE5FVF9DVUROTl9BVVRPVFVORV9ERUZBVUxUJ10gPSAnMCcKb3MuZW52aXJvblsnTVhORVRfQ1VETk5fTElCX0NIRUNLSU5HJ10gPSAnMCcKCjx8ZmltX2VuZHw+"]
["5c046b956ac2912c9a4195ad1b348ea7858e59bf-1","5c046b956ac2912c9a4195ad1b348ea7858e59bf",{"$cut":{"chars":17860,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCmltcG9ydCBhcmdwYXJzZQpmcm9tIGFyZ3BhcnNlIGltcG9ydCBSYXdUZXh0SGVscEZvcm1hdHRlcgppbXBvcnQgY3N2CmltcG9ydCBzeXMKaW1wb3J0IHJlCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IENvdW50ZXIKaW1wb3J0IGlvCmRlZiBvcGVuX2ZpbGUoZmlsZV9uYW1lKToKICAgIGlmIGZpbGVfbmFtZSA9PSBzeXMuc3RkaW46CiAgICAgICAgcmV0dXJuIHN5cy5zdGRpbgogICAgZWxzZToKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZyID0gb3BlbihmaWxlX25hbWUsJ3InKQogICAgICAgICAgICByZXR1cm4gZnIKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHByaW50KCJFcnJvcjogQ2FuIG5vdCBvcGVuIGZpbGUge30iLmZvcm1hdChmaWxlX25hbWUpKQogICAgICAgICAgICBleGl0KC0xKQoKCmRlZiBtYWluKCk6CiAgICBWRVJTSU9OID0gJzAuMicKICAgIGRlc2MgPSAnJydTbWFsbCBwcm9ncmFtIHRvIHBhcnNlIC5DU1YgZmlsZXMuXG5Xcml0dGVuIGJ5IHMubWFyb29maSAobWFyb29maUBnbWFpbC5jb20pXG5WZXJzaW9uIHt9JycnLmZvcm1hdChWRVJTSU9OKQoKICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPWRlc2MsZm9ybWF0dGVyX2NsYXNzPVJhd1RleHRIZWxwRm9ybWF0dGVyKSAgICAKICAgIAogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXYnLCctLXZlcnNpb24nLAogICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3ZlcnNpb24nLAogICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uPSdDU1ZUT09MIHZlcnNpb24ge30uIFVzZSAtLWhlbHAgdG8gc2VlIGxvZ24gZGVzY3JpcHRpb24uJy5mb3JtYXQoVkVSU0lPTikKICAgICkKICAgIAogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWwnLCctLWxpbmUtbnVtYmVyJywKICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ncHJpbnRfbGluZW51bScsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlByaW50cyBsaW5lIG51bWJlciBmb3IgZWFjaCBvdXRwdXQgbGluZSAodGhlIGxpbmUgbnVtYmVycyBhcmUgYmFzZWQgb24gdGhlIGZpbGUgbGluZSBudW1iZXIpLiIKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1jJywnLS1jb2x1bW4nLAogICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlJywKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nJywKICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nY29sdW1uJywKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iU2VsZWN0IHNwZWNpZmljIGNvbHVtbihzKSBpbiB0aGUgZm9ybSBvZiAxLDIsLi4gb3IgMS0zIG9yIDQgb3IgMSwyLDMtNiw3XG4gb3IgYW55IGNvbWJpbmF0aW9uIG9mIHZhbHVlcy9yYW5nZXMgYW5kIHBlcmZvcm0gYWxsIG9wZXJhdGlvbiBvbiB0aGVzZSBjb2x1bW5zIChkZWZhdWx0IGlzIGFsbCBjb2x1bW5zKSIKICAgICkKCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdCcsJy0tc3RhdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3N0YXQnLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQcmludCBzb21lIHVzZWZ1bCBzdGF0aXN0aWNzIGFib3V0IHRoZSBDU1YgZmlsZS4iCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZScsJy0tbm8taGVhZGVyJywKICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nbm9oZWFkZXInLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTcGVjaWZpZXMgdGhhdCBpbnB1dCAuQ1NWIGZpbGUgaGFzIG5vIGhlYWRlci4iCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcycsJy0tc2VhcmNoJywKICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZScsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3NlYXJjaCcsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9JycsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IiIiU2VhcmNoIGZvciBhIHNwZWNpZmljIHB5dGhvbiByZWdleCBwYXR0ZXJuIChvcHRpb25hbGx5XG4gb24gc3BlY2lmaWMgY29sdW1ucyBzcGVjaWZpZWQgYnkgLS1jb2x1bW4gb3IgYWxsIGNvbHVtbnMpLlxuSWYgKD9pKSBzcGVjaWZpZWQsIHRoZSBzZWFyY2ggaXMgY2FzZS1pbnNlbnNpdGl2ZS5cbkV4YW1wbGU6XG4jIG1hdGNoZXMgdGVzdCwgVGVzdCwgVGVTdCwgLi4uXG4gY3N2dG9vbCBvdXRwdXQuY3N2IC0tc2VhcmNoICcoP2kpdGVzdCdcbiMgbWF0Y2hlcyBhbGwgdGhlIGxpbmVzIHdoaWNoIGhhdmUgZXhhY3RseSAnVVMnIHZhbHVlIGluIHRoZWlyIHNlY29uZCBjb2x1bW5zLlxuICAgY3N2dG9vbCBvdXRwdXQuY3N2IC0tY29sdW1uIDIgLS1zZWFyY2ggJ15VUyQnXG4jIG1hdGNoZXMgYWxsIHRoZSBsaW5lcyB3aGljaCBoYXZlIG5vdCAnSGVsbG8nIGluIHRoZWlyIHNlY29uZCBjb2x1bW5zLiAgXG4gY3N2dG9vbCBvdXRwdXQuY3N2IC1jIDIgLXMgJ14oPzooPyFIZWxsbykuKSokJyAgIiIiCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcicsJy0tcHJpbnQtaGVhZGVyJywKICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ncHJpbnRfaGVhZGVyJywKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUHJpbnRzIHRoZSBoZWFkZXIgb2YgdGhlIC5DU1YgZmlsZSIKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1tIiwnLS1tb3N0LWNvbW1vbicsCiAg"}}]
["7ad681ee45661efb84dd7f0a0022eba4b10aaf71-2","7ad681ee45661efb84dd7f0a0022eba4b10aaf71","PHxmaW1fcHJlZml4fD4KY2xhc3MgRG9ja3N0cmluZ0Vycm9yKEV4Y2VwdGlvbik6CiAgICAiIiJCYXNlIGV4Y2VwdGlvbiBmb3IgRG9ja3N0cmluZyIiIgogICAgcGFzcwoKCmNsYXNzIENhbm9uaWNhbGl6YXRpb25FcnJvcihEb2Nrc3RyaW5nRXJyb3IpOgogICAgIiIiSW5wdXQgU01JTEVTIGNhbm5vdCBiZSBjYW5vbmljYWxpemVkIiIiCiAgICBwYXNzCgoKY2xhc3MgUGFyc2luZ0Vycm9yKERvY2tzdHJpbmdFcnJvcik6CiAgICAiIiJFcnJvciByYWlzZWQgd2hlbiBjb252ZXJ0aW5nIHNvbWUgaW5wdXQgKGZpbGUgb3Igc3RyaW5nKSB0byBhbiBSREtpdCBNb2wiIiIKICAgIHBhc3MKPHxmaW1faG9sZXw+CiAgICBwYXNzCgoKY2xhc3MgU2FuaXR5RXJyb3IoRG9ja3N0cmluZ0Vycm9yKToKICAgICIiIkVycm9yIHJhaXNlZCB3aGVuIHRoZSBpbnB1dCBtb2xlY3VsZSBkb2Vzbid0IGZ1bGZpbGwgY2VydGFpbiBjcml0ZXJpYSIiIgogICAgcGFzcwoKCmNsYXNzIEVtYmVkZGluZ0Vycm9yKERvY2tzdHJpbmdFcnJvcik6CiAgICAiIiJFcnJvciByYWlzZWQgZHVyaW5nIGdlbmVyYXRpb24gb2YgM0QgY29uZm9ybWF0aW9uIiIiCiAgICBwYXNzCgoKY2xhc3MgU3RydWN0dXJlT3B0aW1pemF0aW9uRXJyb3IoRG9ja3N0cmluZ0Vycm9yKToKICAgICIiIkVycm9yIHJhaXNlZCBkdXJpbmcgc3RydWN0dXJlIG9wdGltaXphdGlvbiIiIgogICAgcGFzcwoKCmNsYXNzIEZvcm1hdENvbnZlcnNpb25FcnJvcihEb2Nrc3RyaW5nRXJyb3IpOgogICAgIiIiRXJyb3IgcmFpc2VkIHdoZW4gY29udmVydGluZyBmaWxlIGZvcm1hdHMiIiIKICAgIHBhc3MKCgpjbGFzcyBQcm90b25hdGlvbkVycm9yKERvY2tzdHJpbmdFcnJvcik6CiAgICAiIiJFcnJvciByYWlzZWQgd2hlbiBwcm90b25hdGluZyBhIG1vbGVjdWxlIiIiCiAgICBwYXNzCgoKY2xhc3MgUG9zZVByb2Nlc3NpbmdFcnJvcihEb2Nrc3RyaW5nRXJyb3IpOgogICAgIiIiRXJyb3IgcmFpc2VkIGR1cmluZyBwb3NlIHByb2Nlc3NpbmcgKGUuZy4sIGFzc2lnbm1lbnQgb2Ygc3RlcmVvY2hlbWlzdHJ5KSIiIgogICAgcGFzcwoKCmNsYXNzIFZpbmFFcnJvcihEb2Nrc3RyaW5nRXJyb3IpOgogICAgIiIiRXJyb3IgaWYgQXV0b0RvY2sgVmluYSBmYWlscyIiIgogICAgcGFzcwoKCmNsYXNzIERvY2tpbmdFcnJvcihEb2Nrc3RyaW5nRXJyb3IpOgogICAgIiIiRXJyb3IgcmFpc2VkIGlmIEF1dG9Eb2NrIFZpbmEgY2Fubm90IGZpbmQgYSBwb3NlIiIiCiAgICBwYXNzCjx8ZmltX3N1ZmZpeHw+CgoKY2xhc3MgT3V0cHV0RXJyb3IoRG9ja3N0cmluZ0Vycm9yKToKICAgICIiIkVycm9yIHJhaXNlZCB3aGVuIHdyaXRpbmcgYW4gUkRLaXQgTW9sIHRvIGZpbGUgb3Igc3RyaW5nIiIiCjx8ZmltX2VuZHw+"]
["5c40f4dbf6c5ff8f5276cae86a5882a2c67cf2b2-2","5c40f4dbf6c5ff8f5276cae86a5882a2c67cf2b2","PHxmaW1fcHJlZml4fD4KIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIwojICBGbGF0bWFwIHZpZXdlciBhbmQgYW5ub3RhdGlvbiB0b29scwojCiMgIENvcHlyaWdodCAoYykgMjAyMC0yMDIxICBEYXZpZCBCcm9va3MKIwojICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWV6b25lLCB0aW1lZGVsdGEKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCmltcG9ydCB0ZW1wZmlsZQoKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCmltcG9ydCBweWdpdDIKCiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpjbGFzcyBXb3Jrc3BhY2U6CiAgICBkZWYgX19pbml0X18oc2VsZiwgd29ya3NwYWNlLCBjb21taXQpOgogICAgICAgIHNlbGYuX19kaXJlY3RvcnkgPSB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKQogICAgICAgIHNlbGYuX19wYXRoID0gUGF0aChzZWxmLl9fZGlyZWN0b3J5Lm5hbWUpLnJlc29sdmUoKQogICAgICAgIHNlbGYuX19yZXBvc2l0b3J5ID0gcHlnaXQyLmNsb25lX3JlcG9zaXRvcnkod29ya3NwYWNlLCBzZWxmLl9fcGF0aCkKICAgICAgICBjb21taXRfaWQgPSBzZWxmLl9fcmVwb3NpdG9yeS5yZXZwYXJzZV9zaW5nbGUoY29tbWl0KQogICAgICAgIHNlbGYuX19yZXBvc2l0b3J5LmNoZWNrb3V0X3RyZWUoY29tbWl0X2lkLAogICAgICAgICAgICBzdHJhdGVneT1weWdpdDIuR0lUX0NIRUNLT1VUX0ZPUkNFIHwgcHlnaXQyLkdJVF9DSEVDS09VVF9SRUNSRUFURV9NSVNTSU5HKQogICAgICAgIHNlbGYuX19yZXBvc2l0b3J5LnNldF9oZWFkKHB5Z2l0Mi5PaWQoaGV4PWNvbW1pdCkpCiAgICAgICAgc2VsZi5fX2NvbW1pdF90aW1lcyA9IHt9CiAgICAgICAgbGFzdF9jb21taXQgPSBzZWxmLl9fcmVwb3NpdG9yeVtzZWxmLl9fcmVwb3NpdG9yeS5oZWFkLnRhcmdldF0KICAgICAgICBmb3IgY29tbWl0IGluIHNlbGYuX19yZXBvc2l0b3J5LndhbGsobGFzdF9jb21taXQuaWQsCiAgICAgICAgICAgICAgICBweWdpdDIuR0lUX1NPUlRfVElNRSB8IHB5Z2l0Mi5HSVRfU09SVF9UT1BPTE9HSUNBTCk6CiAgICAgICAgICAgIHR6aW5mbyA9IHRpbWV6b25lKHRpbWVkZWx0YShtaW51dGVzPWNvbW1pdC5hdXRob3Iub2Zmc2V0KSkKICAgICAgICAgICAgY29tbWl0X3RpbWUgPSBkYXRldGltZS5mcm9tdGltZXN0YW1wKGZsb2F0KGNvbW1pdC5hdXRob3IudGltZSksIHR6aW5mbykKICAgICAgICAgICAgc2Vlbl9maWxlcyA9IEZhbHNlCiAgICAgICAgICAgIGZvciBmaWxlIGluIGNvbW1pdC50cmVlOgogICAgICAgICAgICAgICAgaWYgZmlsZS5uYW1lIG5vdCBpbiBzZWxmLl9fY29tbWl0X3RpbWVzOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NvbW1pdF90aW1lc1tmaWxlLm5hbWVdID0gY29tbWl0X3RpbWUKICAgICAgICAgICAgICAgICAgICBzZWVuX2ZpbGVzID0gVHJ1ZQo8fGZpbV9lbmR8Pg=="]
["69584bcbeb278366946311f09dac6ae0030fef89-2","69584bcbeb278366946311f09dac6ae0030fef89","PHxmaW1fcHJlZml4fD4KIyBORU9OIEFJIChUTSkgU09GVFdBUkUsIFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAmIEFwcGxpY2F0aW9uIEZyYW1ld29yawojIEFsbCB0cmFkZW1hcmsgYW5kIG90aGVyIHJpZ2h0cyByZXNlcnZlZCBieSB0aGVpciByZXNwZWN0aXZlIG93bmVycwojIENvcHlyaWdodCAyMDA4LTIwMjIgTmVvbmdlY2tvLmNvbSBJbmMuCiMgQ29udHJpYnV0b3JzOiBEYW5pZWwgTWNLbmlnaHQsIEd1eSBEYW5pZWxzLCBFbG9uIEdhc3BlciwgUmljaGFyZCBMZWVkcywKIyBSZWdpbmEgQmxvb21zdGluZSwgQ2FzaW1pcm8gRmVycmVpcmEsIEFuZHJpaSBQZXJuYXRpaSwgS2lyaWxsIEhyeW1haWxvCiMgQlNELTMgTGljZW5zZQojIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAojIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgojIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKIyAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgojIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKIyAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCiMgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwojICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKIyAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCiMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKIyBDT05UUklCVVRPUlMgIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiMgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAojIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLAojIE9SIFBST0ZJVFM7ICBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCiMgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKIyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKIyBTT0ZUV0FSRSwgIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCgpmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwKZnJvbSBuZW9uX3V0aWxzLmNvbmZpZ3VyYXRpb25fdXRpbHMgaW1wb3J0IGdldF9uZW9uX3R0c19jb25maWcKZnJvbSBuZW9uX3V0aWxzLmxvZ2dlciBpbXBvcnQgTE9HCmZyb20gbmVvbl91dGlscy5wYXJzZV91dGlscyBpbXBvcnQgZm9ybWF0X3NwZWFrX3RhZ3MKCnRyeToKICAgIGZyb20gbmVvbl9hdWRpby50dHMgaW1wb3J0IFRUUywgVFRTVmFsaWRhdG9yCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgIGZyb20gb3Zvc19wbHVnaW5fbWFuYWdlci50ZW1wbGF0ZXMudHRzIGltcG9ydCBUVFMsIFRUU1ZhbGlkYXRvcgo8fGZpbV9ob2xlfD4KaW1wb3J0IHNvdW5kZmlsZSBhcyBzZgoKCmNsYXNzIFRhY290cm9uMlRUUyhUVFMpOgogICAgbGFuZ3MgPSB7CiAgICAgICAgImVuLXVzIjogewogICAgICAgICAgICAibWVsIjogInRlbnNvcnNwZWVjaC90dHMtdGFjb3Ryb24yLWxqc3BlZWNoLWVuIiwgCiAgICAgICAgICAgICJ2b2NvZGVyIjogInRlbnNvcnNwZWVjaC90dHMtbWJfbWVsZ2FuLWxqc3BlZWNoLWVuIgogICAgICAgIH0sCiAgICAgICAgInBsLXBsIjogewogICAgICAgICAgICAibWVsIjogIk5lb25Cb2hkYW4vdHRzLXRhY290cm9uMi1sanNwZWVjaC1wbCIsIAogICAgICAgICAgICAidm9jb2RlciI6ICJ0ZW5zb3JzcGVlY2gvdHRzLW1iX21lbGdhbi1sanNwZWVjaC1lbiIKICAgICAgICB9CiAgICB9CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGxhbmc9ImVuLXVzIiwgY29uZmlnPU5vbmUpOgogICAgICAgIGNvbmZpZyA9IGNvbmZpZyBvciBnZXRfbmVvbl90dHNfY29uZmlnKCkuZ2V0KCJ0YWNvdHJvbjIiLCB7fSkKICAgICAgICBzdXBlcihUYWNvdHJvbjJUVFMsIHNlbGYpLl9faW5pdF9fKGxhbmcsIGNvbmZpZywgVGFjb3Ryb24yVFRTVmFsaWRhdG9yKHNlbGYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19leHQ9IndhdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbWxfdGFncz1bInNwZWFrIl0pCiAgICAgICAgc2VsZi5faW5pdF9tb2RlbCgpCgogICAgZGVmIGdldF90dHMoc2VsZiwgc2VudGVuY2U6IHN0ciwgb3V0cHV0X2ZpbGU6IHN0ciwgc3BlYWtlcjogT3B0aW9uYWxbZGljdF0gPSBOb25lKToKICAgICAgICBzdG9wd2F0Y2ggPSBTdG9wd2F0Y2goKQogICAgICAgIHNwZWFrZXIgPSBzcGVha2VyIG9yIGRpY3QoKQoKICAgICAgICAjIFRPRE86IHNwZWFrZXIgcGFyYW1zIGFyZSBvcHRpb25hbGx5IGRlZmluZWQgYW5kIHNob3VsZCBiZSBoYW5kbGVkIHdoZW5ldmVyIGRlZmluZWQKICAgICAgICAjICMgUmVhZCB1dHRlcmFuY2UgZGF0YSBmcm9tIHBhc3NlZCBjb25maWd1cmF0aW9uCiAgICAgICAgIyByZXF1ZXN0X2xhbmcgPSBzcGVha2VyLmdldCgibGFuZ3VhZ2UiLCAgc2VsZi5sYW5nKQogICAgICAgICMgcmVxdWVzdF9nZW5kZXIgPSBzcGVha2VyLmdldCgiZ2VuZGVyIiwgImZlbWFsZSIpCiAgICAgICAgIyByZXF1ZXN0X3ZvaWNlID0gc3BlYWtlci5nZXQoInZvaWNlIikKCiAgICAgICAgIyBUT0RPOiBCZWxvdyBpcyBhbiBleGFtcGxlIG9mIGEgY29tbW9uIGFtYmlndW91cyBsYW5ndWFnZSBjb2RlOyB0ZXN0IGFuZCBpbXBsZW1lbnQgb3IgcmVtb3ZlCiAgICAgICAgIyAjIENhdGNoIENoaW5lc2UgYWx0IGNvZGUKICAgICAgICAjIGlmIHJlcXVlc3RfbGFuZy5sb3dlcigpID09ICJ6aC16aCI6CiAgICAgICAgIyAgICAgcmVxdWVzdF9sYW5nID0gImNtbi1jbiIKCiAgICAgICAgdG9fc3BlYWsgPSBmb3JtYXRfc3BlYWtfdGFncyhzZW50ZW5jZSkKICAgICAgICBMT0cuZGVidWcodG9fc3BlYWspCiAgICAgICAgaWYgdG9fc3BlYWs6CiAgICAgICAgICAgIHdpdGggc3RvcHdhdGNoOgogICAgICAgICAgICAgICAgc2VsZi5fcnVuX21vZGVsKHNlbnRlbmNlID0gc2VudGVuY2UsIG91dHB1dF9maWxlID0gb3V0cHV0X2ZpbGUpCgogICAgICAgICAgICBMT0cuZGVidWcoZiJUVFMgU3ludGhlc2lzIHRpbWU9e3N0b3B3YXRjaC50aW1lfSIpCgogICAgICAgIHJldHVybiBvdXRwdXRfZmlsZSwgTm9uZQoKICAgIGRlZiBfaW5pdF9tb2RlbChzZWxmKToKICAgICAgICBsYW5nUGFyYW1zID0gc2VsZi5sYW5nc1tzZWxmLmxhbmddCiAgICAgICAgbWV2TmFtZSA9IGxhbmdQYXJhbXNbIm1lbCJdCiAgICAgICAgdm9jb2Rlck5hbWUgPSBsYW5nUGFyYW1zWyJ2b2NvZGVyIl0KCiAgICAgICAgIyBpbml0aWFsaXplIHRhY290cm9uMiBtb2RlbC4KICAgICAgICBzZWxmLm1vZGVsID0gVEZBdXRvTW9kZWwuZnJvbV9wcmV0cmFpbmVkKG1ldk5hbWUpCgogICAgICAgICMgaW5pdGlhbGl6ZSB2b2NvZGVyCiAgICAgICAgc2VsZi52b2NvZGVyID0gVEZBdXRvTW9kZWwuZnJvbV9wcmV0cmFpbmVkKHZvY29kZXJOYW1lKQoKICAgICAgICAjIHByb2Nlc3NvcgogICAgICAgIHNlbGYudGV4dF9wcm9jZXNzb3IgPSBBdXRvUHJvY2Vzc29yLmZyb21fcHJldHJhaW5lZChtZXZOYW1lKQoKICAgIGRlZiBfcnVuX21vZGVsKHNlbGYsIHNlbnRlbmNlOiBzdHIsIG91dHB1dF9maWxlOiBzdHIpOgogICAgICAgIGlucHV0X2lkcyA9IHNlbGYudGV4dF9wcm9jZXNzb3IudGV4dF90b19zZXF1ZW5jZShzZW50ZW5jZSkKICAgICAgICAKICAgICAgICBkZWNvZGVyX291dHB1dCwgbWVsX291dHB1dHMsIHN0b3BfdG9rZW5fcHJlZGljdGlvbiwgYWxpZ25tZW50X2hpc3RvcnkgPSBzZWxmLm1vZGVsLmluZmVyZW5jZSgKICAgICAgICAgICAgaW5wdXRfaWRzPVtpbnB1dF9pZHNdLAogICAgICAgICAgICBpbnB1dF9sZW5ndGhzPVtsZW4oaW5wdXRfaWRzKV0sCiAgICAgICAgICAgIHNwZWFrZXJfaWRzPVswXSwKICAgICAgICApCgogICAgICAgICMgdm9jb2RlciBpbmZlcmVuY2UKICAgICAgICBhdWRpbyA9IHNlbGYudm9jb2Rlci5pbmZlcmVuY2UobWVsX291dHB1dHMpWzAsIDosIDBdCgogICAgICAgICMgc2F2ZSB0byBmaWxlCiAgICAgICAgc2Yud3JpdGUob3V0cHV0X2ZpbGUsIGF1ZGlvLCAyMjA1MCwgIlBDTV8xNiIpCgoKCmNsYXNzIFRhY290cm9uMlRUU1ZhbGlkYXRvcihUVFNWYWxpZGF0b3IpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHR0cyk6CiAgICAgICAgc3VwZXIoVGFjb3Ryb24yVFRTVmFsaWRhdG9yLCBzZWxmKS5fX2luaXRfXyh0dHMpCgogICAgZGVmIHZhbGlkYXRlX2xhbmcoc2VsZik6CiAgICAgICAgaWYgKHNlbGYubGFuZyBub3QgaW4gc2VsZi5sYW5ncyk6CiAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJMYW5ndWFnZSBpc24ndCBzdXBwb3J0ZWQiKQoKICAgIGRlZiB2YWxpZGF0ZV9kZXBlbmRlbmNpZXMoc2VsZik6CiAgICAgICAgIyBUT0RPOiBPcHRpb25hbGx5IGNoZWNrIGRlcGVuZGVuY2llcyBvciByYWlzZQogICAgICAgIHBhc3MKCiAgICBkZWYgdmFsaWRhdGVfY29ubmVjdGlvbihzZWxmKToKICAgICAgICAjIFRPRE86IE9wdGlvbmFsbHkgY2hlY2sgY29ubmVjdGlvbiB0byByZW1vdGUgc2VydmljZSBvciByYWlzZQogICAgICAgIHBhc3MKCiAgICBkZWYgZ2V0X3R0c19jbGFzcyhzZWxmKToKICAgICAgICByZXR1cm4gVGFjb3Ryb24yVFRTCjx8ZmltX3N1ZmZpeHw+CmZyb20gbmVvbl91dGlscy5tZXRyaWNzX3V0aWxzIGltcG9ydCBTdG9wd2F0Y2gKCmZyb20gdGVuc29yZmxvd190dHMuaW5mZXJlbmNlIGltcG9ydCBURkF1dG9Nb2RlbApmcm9tIHRlbnNvcmZsb3dfdHRzLmluZmVyZW5jZSBpbXBvcnQgQXV0b1Byb2Nlc3Nvcgo8fGZpbV9lbmR8Pg=="]
["695071c6df10f7861d8450551c99cc6f97c5e495-3","695071c6df10f7861d8450551c99cc6f97c5e495",{"$cut":{"chars":16764,"head":"PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMTEtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMgIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgYm90aCB0aGUgR1BMdjIgKGZvdW5kIGluIHRoZQojICBDT1BZSU5HIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5KSBhbmQgQXBhY2hlIDIuMCBMaWNlbnNlCiMgIChmb3VuZCBpbiB0aGUgTElDRU5TRS5BcGFjaGUgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkpLgoKZnJvbSBhYmMgaW1wb3J0IEFCQywgYWJzdHJhY3RtZXRob2QKaW1wb3J0IGFyZ3BhcnNlCmZyb20gYWR2aXNvci5kYl9sb2dfcGFyc2VyIGltcG9ydCBEYXRhYmFzZUxvZ3MsIERhdGFTb3VyY2UKZnJvbSBhZHZpc29yLmRiX29wdGlvbnNfcGFyc2VyIGltcG9ydCBEYXRhYmFzZU9wdGlvbnMKZnJvbSBlbnVtIGltcG9ydCBFbnVtCmZyb20gYWR2aXNvci5pbmlfcGFyc2VyIGltcG9ydCBJbmlQYXJzZXIKCgpjbGFzcyBTZWN0aW9uKEFCQyk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CiAgICAgICAgc2VsZi5uYW1lID0gbmFtZQoKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIHNldF9wYXJhbWV0ZXIoc2VsZiwga2V5LCB2YWx1ZSk6CiAgICAgICAgcGFzcwoKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIHBlcmZvcm1fY2hlY2tzKHNlbGYpOgogICAgICAgIHBhc3MKCgpjbGFzcyBSdWxlKFNlY3Rpb24pOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18obmFtZSkKICAgICAgICBzZWxmLmNvbmRpdGlvbnMgPSBOb25lCiAgICAgICAgc2VsZi5zdWdnZXN0aW9ucyA9IE5vbmUKCiAgICBkZWYgc2V0X3BhcmFtZXRlcihzZWxmLCBrZXksIHZhbHVlKToKICAgICAgICAjIElmIHRoZSBSdWxlIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHNpbmdsZSBzdWdnZXN0aW9uL2NvbmRpdGlvbiwgdGhlbgogICAgICAgICMgdmFsdWUgd2lsbCBiZSBhIHN0cmluZyBhbmQgbm90IGEgbGlzdC4gSGVuY2UsIGNvbnZlcnQgaXQgdG8gYSBzaW5nbGUKICAgICAgICAjIGVsZW1lbnQgbGlzdCBiZWZvcmUgc3RvcmluZyBpdCBpbiBzZWxmLnN1Z2dlc3Rpb25zIG9yCiAgICAgICAgIyBzZWxmLmNvbmRpdGlvbnMuCiAgICAgICAgaWYga2V5ID09ICdjb25kaXRpb25zJzoKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKICAgICAgICAgICAgICAgIHNlbGYuY29uZGl0aW9ucyA9IFt2YWx1ZV0KICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHNlbGYuY29uZGl0aW9ucyA9IHZhbHVlCiAgICAgICAgZWxpZiBrZXkgPT0gJ3N1Z2dlc3Rpb25zJzoKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKICAgICAgICAgICAgICAgIHNlbGYuc3VnZ2VzdGlvbnMgPSBbdmFsdWVdCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBzZWxmLnN1Z2dlc3Rpb25zID0gdmFsdWUKCiAgICBkZWYgZ2V0X3N1Z2dlc3Rpb25zKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnN1Z2dlc3Rpb25zCgogICAgZGVmIHBlcmZvcm1fY2hlY2tzKHNlbGYpOgogICAgICAgIGlmIG5vdCBzZWxmLmNvbmRpdGlvbnMgb3IgbGVuKHNlbGYuY29uZGl0aW9ucykgPCAxOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAgICAgc2VsZi5uYW1lICsgJzogcnVsZSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGNvbmRpdGlvbicKICAgICAgICAgICAgKQogICAgICAgIGlmIG5vdCBzZWxmLnN1Z2dlc3Rpb25zIG9yIGxlbihzZWxmLnN1Z2dlc3Rpb25zKSA8IDE6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICAgICBzZWxmLm5hbWUgKyAnOiBydWxlIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc3VnZ2VzdGlvbicKICAgICAgICAgICAgKQoKICAgIGRlZiBpc190cmlnZ2VyZWQoc2VsZiwgY29uZGl0aW9uc19kaWN0KToKICAgICAgICBjb25kaXRpb25fdHJpZ2dlcnMgPSBbXQogICAgICAgIGZvciBjb25kIGluIHNlbGYuY29uZGl0aW9uczoKICAgICAgICAgICAgY29uZGl0aW9uX3RyaWdnZXJzLmFwcGVuZChjb25kaXRpb25zX2RpY3RbY29uZF0uaXNfdHJpZ2dlcmVkKCkpCiAgICAgICAgcmV0dXJuIGFsbChjb25kaXRpb25fdHJpZ2dlcnMpCgogICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICMgQXBwZW5kIGNvbmRpdGlvbnMKICAgICAgICBydWxlX3N0cmluZyA9ICJSdWxlOiAiICsgc2VsZi5uYW1lICsgIiBoYXMgY29uZGl0aW9uczo6ICIKICAgICAgICBpc19maXJzdCA9IFRydWUKICAgICAgICBmb3IgY29uZCBpbiBzZWxmLmNvbmRpdGlvbnM6CiAgICAgICAgICAgIGlmIGlzX2ZpcnN0OgogICAgICAgICAgICAgICAgcnVsZV9zdHJpbmcgKz0gY29uZAogICAgICAgICAgICAgICAgaXNfZmlyc3QgPSBGYWxzZQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcnVsZV9zdHJpbmcgKz0gKCIgQU5EICIgKyBjb25kKQogICAgICAgICMgQXBwZW5kIHN1Z2dlc3Rpb25zCiAgICAgICAgcnVsZV9zdHJpbmcgKz0gIlxuc3VnZ2VzdGlvbnM6OiAiCiAgICAgICAgaXNfZmlyc3QgPSBUcnVlCiAgICAgICAgZm9yIHN1Z2cgaW4gc2VsZi5zdWdnZXN0aW9uczoKICAgICAgICAgICAgaWYgaXNfZmlyc3Q6CiAgICAgICAgICAgICAgICBydWxlX3N0cmluZyArPSBzdWdnCiAgICAgICAgICAgICAgICBpc19maXJzdCA9IEZhbHNlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBydWxlX3N0cmluZyArPSAoIiwgIiArIHN1Z2cpCiAgICAgICAgIyBSZXR1cm4gY29uc3RydWN0ZWQgc3RyaW5nCiAgICAgICAgcmV0dXJuIHJ1bGVfc3RyaW5nCgoKY2xhc3MgU3VnZ2VzdGlvbihTZWN0aW9uKToKICAgIGNsYXNzIEFjdGlvbihFbnVtKToKICAgICAgICBzZXQgPSAxCiAgICAgICAgaW5jcmVhc2UgPSAyCiAgICAgICAgZGVjcmVhc2UgPSAzCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18obmFtZSkKICAgICAgICBzZWxmLm9wdGlvbiA9IE5vbmUKICAg"}}]
["5c4290e27ff96f1d4de36c00b2fb353c752f3360-1","5c4290e27ff96f1d4de36c00b2fb353c752f3360","PHxmaW1fcHJlZml4fD4KIiIiCmRhdG9zIGRlIGVudHJhZGEgCiAgICBjYW50aWRhZCBkZSBrbS0tPmttLS0+ZmxvYXQgCjx8ZmltX2hvbGV8PgprbT1mbG9hdChpbnB1dCgiZGlndWl0ZSBsYSBjYW50aWRhZCBkZSBraWxvbWV0cm9zIHJlY29ycmlkb3NuICIpKQojY2FqYSBuZWdyYSAKcD0iIgppZihrbTw9MzAwKToKICAgIHA9NTAwMDAKZWxpZigzMDA8a208PTEwMDApOgogICAgcD03MDAwMCsoMzAwMDAqKGttLTMwMCkpCmVsc2U6CiAgICBwPTE1MDAwMCsoOTAwMCooa20tMTAwMCkpCiNzYWxpZGFzCnByaW50KCJlbCBwcmVjaW8gZXM6IiwgcCkKPHxmaW1fc3VmZml4fD4KZGF0b3MgZGUgc2FsaWRhCiAgICBwcmVjaW8tLT5wLS0+aW50CiIiIgojZW50cmFkYXMKPHxmaW1fZW5kfD4="]
["77df479ce3054f8cac4c31aa46276029d5350f87-2","77df479ce3054f8cac4c31aa46276029d5350f87","PHxmaW1fcHJlZml4fD4KVCA9IGludChpbnB1dCgpKQpmb3IgXyBpbiByYW5nZShUKToKICAgIHNvdW5kID0gaW5wdXQoKS5zcGxpdCgpCiAgICB3aGlsZSBUcnVlOgogICAgICAgIGNhc2UgPSBpbnB1dCgpCiAgICAgICAgaWYgY2FzZSA9PSAnd2hhdCBkb2VzIHRoZSBmb3ggc2F5Pyc6IGJyZWFrCiAgICAgICAgY2FzZSA9IGNhc2Uuc3BsaXQoKQogICAgICAgIGlmIGNhc2VbMl0gaW4gc291bmQ6CiAgICAgICAgICAgIHdoaWxlIGNhc2VbMl0gaW4gc291bmQ6IHNvdW5kLnJlbW92ZShjYXNlWzJdKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBwcmludCgqc291bmQpCjx8ZmltX2VuZHw+"]
["795e9e45a0c204305334a4141cee0481f5cf76ea-3","795e9e45a0c204305334a4141cee0481f5cf76ea","PHxmaW1fcHJlZml4fD4KIyBUZXN0aW5nIGZvciB0aGUgcmVydW4gZmVhdHVyZSBvZiBMTlQgbnQuCiMgVGhpcyB0ZXN0IHJ1bnMgdHdvIHN0dWIgdGVzdCBzdWl0ZXMuIFRoZSBzZWNvbmQgb25lIGhhcyBkaWZmZXJlbnQgdmFsdWVzIGZvcgojIHNvbWUgb2YgdGhlIHRlc3QsIHNvIHRoZXkgc2hvdWxkIGJlIG1hcmtlZCBhcyByZWdyZXNzaW9ucywgYW5kIHJlcnVucyBzaG91bGQKIyBiZSB0cmlnZ2VyZWQuCgojIFJVTjogcm0gLXJmICV0Lmluc3RhbmNlCiMgUlVOOiBta2RpciAtcCAldC5pbnN0YW5jZQojIFJVTjogcnN5bmMgLWF2IC0tZXhjbHVkZSAuc3ZuICVTL0lucHV0cy9yZXJ1bl9zZXJ2ZXJfaW5zdGFuY2UvICV0Lmluc3RhbmNlCiMgUlVOOiBybSAtZiBDSEVDSy1TVERPVVQgQ0hFQ0stU1RET1VUMiBDSEVDSy1TVERFUlIgQ0hFQ0stU1RERVJSMgojIFJVTjogJXtzaGFyZWRfaW5wdXRzfS9zZXJ2ZXJfd3JhcHBlci5zaCBcCiMgUlVOOiAgICV0Lmluc3RhbmNlIDkwOTAgXAojIFJVTjogICBsbnQgcnVudGVzdCBudCAtLXN1Ym1pdCAiaHR0cDovL2xvY2FsaG9zdDo5MDkwL2RiX2RlZmF1bHQvc3VibWl0UnVuIiBcCiMgUlVOOiAgIC0tc2FuZGJveCAldC5TQU5EQk9YIFwKIyBSVU46ICAgLS10ZXN0LXN1aXRlICVTL0lucHV0cy9yZXJ1bi10ZXN0LXN1aXRlMSBcCiMgUlVOOiAgIC0tY2MgJXtzaGFyZWRfaW5wdXRzfS9GYWtlQ29tcGlsZXJzL2NsYW5nLXIxNTQzMzEgXAojIFJVTjogICAtLW5vLXRpbWVzdGFtcCAtLXJlcnVuIC0tcnVuLW9yZGVyIDEgPiAldC5sb2cgMj4gJXQuZXJyCiMgUlVOOiBGaWxlQ2hlY2sgLS1jaGVjay1wcmVmaXggQ0hFQ0stU1RET1VUIDwgJXQubG9nICVzCiMgUlVOOiBGaWxlQ2hlY2sgLS1jaGVjay1wcmVmaXggQ0hFQ0stU1RERVJSIDwgJXQuZXJyICVzCgojIENIRUNLLVNURE9VVDogSW1wb3J0IHN1Y2NlZWRlZC4KIyBDSEVDSy1TVERPVVQ6IFBBU1MgOiAzNDUKCiMgQ0hFQ0stU1RERVJSOiBpbmZlcnJlZCBDKysgY29tcGlsZXIgdW5kZXIgdGVzdAojIENIRUNLLVNUREVSUjogY2hlY2tpbmcgc291cmNlIHZlcnNpb25zCiMgQ0hFQ0stU1RERVJSOiB1c2luZyBuaWNrbmFtZQojIENIRUNLLVNUREVSUjogc3RhcnRpbmcgdGVzdAojIENIRUNLLVNUREVSUjogY29uZmlndXJpbmcKIyBDSEVDSy1TVERFUlI6IGJ1aWxkaW5nIHRlc3Qtc3VpdGUgdG9vbHMKIyBDSEVDSy1TVERFUlI6IGV4ZWN1dGluZyAibmlnaHRseSB0ZXN0cyIgd2l0aCAtajEKIyBDSEVDSy1TVERFUlI6IGxvYWRpbmcgbmlnaHRseSB0ZXN0IGRhdGEKIyBDSEVDSy1TVERFUlI6IGNhcHR1cmluZyBtYWNoaW5lIGluZm9ybWF0aW9uCiMgQ0hFQ0stU1RERVJSOiBnZW5lcmF0aW5nIHJlcG9ydAojIENIRUNLLVNUREVSUjogc3VibWl0dGluZyByZXN1bHQgdG8KIyBDSEVDSy1TVERFUlI6IFJlcnVubmluZyAwIG9mIDY5IGJlbmNobWFya3MuCjx8ZmltX2hvbGV8PgojIFJVTjogICAtLXNhbmRib3ggJXQuU0FOREJPWDIgXAojIFJVTjogICAtLXRlc3Qtc3VpdGUgJVMvSW5wdXRzL3JlcnVuLXRlc3Qtc3VpdGUyIFwKIyBSVU46ICAgLS1jYyAle3NoYXJlZF9pbnB1dHN9L0Zha2VDb21waWxlcnMvY2xhbmctcjE1NDMzMSBcCiMgUlVOOiAgIC0tbm8tdGltZXN0YW1wIC0tcmVydW4gLS1ydW4tb3JkZXIgNCAtLXZlcmJvc2UgXAojIFJVTjogICA+ICV0LjIubG9nIDI+ICV0LjIuZXJyIHx8IGNhdCAldC4yLmVycgojIFJVTjogZWNobyAiUnVuIDIiCiMgUlVOOiBGaWxlQ2hlY2sgLS1jaGVjay1wcmVmaXggQ0hFQ0stU1RET1VUMiA8ICV0LjIubG9nICVzCiMgUlVOOiBGaWxlQ2hlY2sgLS1jaGVjay1wcmVmaXggQ0hFQ0stU1RERVJSMiA8ICV0LjIuZXJyICVzCgojIENIRUNLLVNURE9VVDI6IEltcG9ydCBzdWNjZWVkZWQuCiMgQ0hFQ0stU1RET1VUMjogRkFJTCA6IDMKIyBDSEVDSy1TVERPVVQyOiBQQVNTIDogMzQyCgojIENIRUNLLVNUREVSUjI6IGluZmVycmVkIEMrKyBjb21waWxlciB1bmRlciB0ZXN0CiMgQ0hFQ0stU1RERVJSMjogY2hlY2tpbmcgc291cmNlIHZlcnNpb25zCiMgQ0hFQ0stU1RERVJSMjogdXNpbmcgbmlja25hbWUKIyBDSEVDSy1TVERFUlIyOiBzdGFydGluZyB0ZXN0CiMgQ0hFQ0stU1RERVJSMjogY29uZmlndXJpbmcKIyBDSEVDSy1TVERFUlIyOiBidWlsZGluZyB0ZXN0LXN1aXRlIHRvb2xzCiMgQ0hFQ0stU1RERVJSMjogZXhlY3V0aW5nICJuaWdodGx5IHRlc3RzIiB3aXRoIC1qMQojIENIRUNLLVNUREVSUjI6IGxvYWRpbmcgbmlnaHRseSB0ZXN0IGRhdGEKIyBDSEVDSy1TVERFUlIyOiBjYXB0dXJpbmcgbWFjaGluZSBpbmZvcm1hdGlvbgojIENIRUNLLVNUREVSUjI6IGdlbmVyYXRpbmcgcmVwb3J0CiMgQ0hFQ0stU1RERVJSMjogUmVydW5uaW5nIDMgb2YgNjkgYmVuY2htYXJrcy4KIyBDSENDSy1TRFRFUlIyOiBSZXJ1bm5pbmc6IG1zX3N0cnVjdC1iaXRmaWVsZCBbMS8zXQojIENIQ0NLLVNEVEVSUjI6IFJlcnVubmluZzogbXNfc3RydWN0X3BhY2tfbGF5b3V0LTEgWzIvM10KIyBDSENDSy1TRFRFUlIyOiBSZXJ1bm5pbmc6IHZsYSBbMy8zXQoKIyBDSEVDSy1TVERFUlIyOiBzdWJtaXR0aW5nIHJlc3VsdCB0bwo8fGZpbV9zdWZmaXh8PgoKIyBSVU46ICV7c2hhcmVkX2lucHV0c30vc2VydmVyX3dyYXBwZXIuc2ggXAojIFJVTjogICAldC5pbnN0YW5jZSA5MDkwIFwKIyBSVU46ICAgbG50IHJ1bnRlc3QgbnQgLS1zdWJtaXQgImh0dHA6Ly9sb2NhbGhvc3Q6OTA5MC9kYl9kZWZhdWx0L3N1Ym1pdFJ1biIgXAo8fGZpbV9lbmR8Pg=="]
["8dfec4d3cff7c8c5f7578ff586889ed13f39fef6-1","8dfec4d3cff7c8c5f7578ff586889ed13f39fef6","PHxmaW1fcHJlZml4fD4KIyBBbGwgcmlnaHRzIHJlc2VydmVkIGJ5IGZvcmVzdCBmYWlyeS4KIyBZb3UgY2Fubm90IG1vZGlmeSBvciBzaGFyZSBhbnl0aGluZyB3aXRob3V0IHNhY3JpZmljZS4KIyBJZiB5b3UgZG9uJ3QgYWdyZWUsIGtlZXAgY2FsbSBhbmQgZG9uJ3QgbG9vayBhdCBjb2RlIGJlbGxvdyEKCl9fYXV0aG9yX18gPSAiVmlydHVhbFYgPGh0dHBzOi8vZ2l0aHViLmNvbS92aXJ0dWFsdmZpeD4iCl9fZGF0ZV9fID0gIiRBcHIgNywgMjAxNCAxMDowNDowMSBQTSQiCgppbXBvcnQgb3MKZnJvbSBjb25maWcgaW1wb3J0IENPTkZJRwpmcm9tIGxpYnMucmVzdWx0cyBpbXBvcnQgWExTUmVzdWx0CmZyb20gbGlicy5jb3JlLmxvZ2dlciBpbXBvcnQgZ2V0TG9nZ2VyCmZyb20gbGlicy5yZXN1bHRzLmJhc2UgaW1wb3J0IGNvbnN0YW50cyBhcyB4bHNjb25maW5nCmZyb20gbGlicy5kZXZpY2UudWkgaW1wb3J0IFdpcmVsZXNzLCBNZWRpYSwgRGlzcGxheSwgV2l6YXJkCmZyb20gdGVzdHMuZXhjZXB0aW9ucyBpbXBvcnQgVGVzdFByZXBhcmVFcnJvciwgUmVzdWx0Q29sbGVjdGlvbkVycm9yCmZyb20gLmJhc2UuY29uc3RhbnRzIGltcG9ydCBVU0VfUE9JTlRfQVNfREVDSU1BTF9TWU1CT0wsIEJFTkNITUFSS1NfREFUQQpmcm9tIHRlc3RzLmJlbmNobWFya3MudG9vbHMuYmFzZS5jb25zdGFudHMgaW1wb3J0IENPVU5UX1JFVFJJRVMsIEFVVE9fVU5JTlNUQUxMX0FQUApmcm9tIGxpYnMuZGV2aWNlLnNoZWxsIGltcG9ydCBUZW1wZXJhdHVyZSwgQmF0dGVyeSwgUG93ZXJVcFJlYXNvbiwgUG93ZXJVcFJlYXNvbkVycm9yLCBEbWVzZywgTG9nY2F0LCBNb2RzCgoKY2xhc3MgQmVuY2htYXJrcyhXaXphcmQsIFdpcmVsZXNzLCBEaXNwbGF5LCBNZWRpYSwgUG93ZXJVcFJlYXNvbiwgVGVtcGVyYXR1cmUsIEJhdHRlcnksIERtZXNnLCBMb2djYXQsIE1vZHMpOgogICAgIiIiIEJlbmNobWFya3MgdGVzdHMgaW1wbGVtZW50YXRpb24gIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcmlhbCwgZGV2aWNlX3ByZXBhcmU9RmFsc2UsIHNraXBfd2l6YXJkPUZhbHNlKToKICAgICAgICBzdXBlcihCZW5jaG1hcmtzLCBzZWxmKS5fX2luaXRfXyhzZXJpYWwsIGxvZ2dlcj1nZXRMb2dnZXIoX19maWxlX18pKQogICAgICAgIHNlbGYuZGV2aWNlX3ByZXBhcmUgPSBkZXZpY2VfcHJlcGFyZSAgIyBvbi9vZmYgZGV2aWNlIHByZXBhcmUKICAgICAgICBzZWxmLnNraXBfd2l6YXJkID0gc2tpcF93aXphcmQKICAgICAgICBzZWxmLnNldFVwKCkKICAgICAgICAKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAjIGRpc2FibGUgc2VjdXJpdHkgcGFja2FnZV92ZXJpZmllcgogICAgICAgIHNlbGYucmVib290X3RvKCdhZGInKQogICAgICAgIHNlbGYud2FpdF9pZGxlKCkKICAgICAgICBzZWxmLnJvb3QoKQogICAgICAgIHNlbGYuc2goInNldHRpbmdzIHB1dCBnbG9iYWwgcGFja2FnZV92ZXJpZmllcl9lbmFibGUgMCIsIGVycm9ycz1GYWxzZSwgZW1wdHk9VHJ1ZSkKICAgICAgICAjIHByZXBhcmUgZGV2aWNlCiAgICAgICAgaWYgbm90IHNlbGYuZGV2aWNlX3ByZXBhcmU6CiAgICAgICAgICAgIHNlbGYubG9nZ2VyLm5ld2xpbmUoKQogICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuaW5nKCdJbml0aWFsIGNvbmRpdGlvbnMgb2YgZGV2aWNlIHNob3VsZCBiZTonKQogICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuaW5nKCcxLiBEaXNwbGF5IHRpbWVvdXQgaXMgc2V0IHRvIDMwIG1pbiBvciBTdGF5IGF3YWtlIGlzIE9OJykKICAgICAgICAgICAgc2VsZi5sb2dnZXIud2FybmluZygnMi4gV2lGaSBpcyBjb25uZWN0ZWQgdG8gcG9pbnQnKQogICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuaW5nKCczLiBBaXJwbGFuZSBtb2RlIGlzIE9OJykKICAgICAgICAgICAgc2VsZi5sb2dnZXIud2FybmluZygnNC4gTG9jYXRpb24gc2VydmljZXMgYWxsIERJU0FCTEVEJykKICAgICAgICAgICAgc2VsZi5sb2dnZXIud2FybmluZygnNS4gW29wdGlvbmFsXSBNZWRpYSB2b2x1bWUgaXMgbXV0ZScpCiAgICAgICAgICAgIHNlbGYubG9nZ2VyLndhcm5pbmcoJzYuIFtvcHRpb25hbF0gU0QgY2FyZCBpcyBOT1QgbW91bnRlZCBhcyBpbnRlcm5hbCBwcmltYXJ5JykKICAgICAgICAgICAgc2VsZi5sb2dnZXIubmV3bGluZSgpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5sb2dnZXIubmV3bGluZSgpCiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oJ1ByZXBhcmluZyBkZXZpY2U6JykKICAgICAgICAgICAgIyBpZiBzZWxmLnNraXBfd2l6YXJkOgogICAgICAgICAgICAjICAgICBzZWxmLnNraXBTZXR1cFdpemFyZCgpCiAgICAgICAgICAgICMgc2VsZi5zZXRNYXhEaXNwbGF5VGltZW91dCgpCiAgICAgICAgICAgICMgc2VsZi5tdXRlTWVkaWFWb2x1bWUoKQogICAgICAgICAgICBzZWxmLmVuYWJsZUFpcnBsYW5lTW9kZSgpCiAgICAgICAgICAgIHNlbGYubG9nZ2VyLm5ld2xpbmUoKQogICAgICAgIAogICAgICAgICMgQnVpbGQgVHlwZSBpbmZvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIHNlbGYubG9nZ2VyLmluZm8oJ0RldmljZSBJbmZvOiB7fSBbe30gKHt9KV1be31fe31fe31dJy5mb3JtYXQoQ09ORklHLkRFVklDRS5DUFVfSFcudXBwZXIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTkZJRy5ERVZJQ0UuREVWSUNFX05BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneDY0JyBpZiBDT05GSUcuREVWSUNFLkNQVV82NF9CSVQgZWxzZSAneDMyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTkZJRy5ERVZJQ0UuQlVJTERfUkVMRUFTRS51cHBlcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09ORklHLkRFVklDRS5CVUlMRF9UWVBFLnVwcGVyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05GSUcuREVWSUNFLkJVSUxEX1ZFUlNJT04pKQogICAgICAgIGlmICd1c2VyZGVidWcnIGluIENPTkZJRy5ERVZJQ0UuQlVJTERfVFlQRToKICAgICAgICAgICAgc2VsZi5sb2dnZXIubmV3bGluZSgpCiAgICAgICAgICAgIHNlbGYubG9nZ2VyLndhcm5saXN0KCdZb3UgdXNpbmcgVVNFUkRFQlVHIGJ1aWxkIGZvciBwZXJmb21hbmNlIHRlc3RpbmcgIScsIHNlbGYuc3lzbG9nZ2VyKQogICAgICAgICAgICBzZWxmLmxvZ2dlci5uZXdsaW5lKCkKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgICMgQ3JlYXRpbmcgUmVzdWx0cyBzcHJlYWRzaGVldCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIHhsc2NvbmZpbmcuVVNFX1BPSU5UX0FTX0RFQ0lNQUxfU1lNQk9MID0gVVNFX1BPSU5UX0FTX0RFQ0lNQUxfU1lNQk9MCiAgICAgICAgc2VsZi5iZW5jaF9yZXN1bHRzID0gWExTUmVzdWx0KCdCZW5jaG1hcmtzJywgb3MucGF0aC5qb2luKENPTkZJRy5TWVNURU0uTE9HX1BBVEgsICIhQmVuY2htYXJrc197fV97fV97fS54bHMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoQ09ORklHLlRFU1QuQ1VSUkVOVF9TVUlURSwgQ09ORklHLlRFU1QuQ1VSUkVOVF9DQVNFX0lOREVYLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTkZJRy5URVNULkNVUlJFTlRfQ1lDTEUpKSkKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIENoZWNrIFdpRmkgY29ubmVjdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBDT05GSUcuVEVTVC5fX2lzd2lmaWVuYWJsZWRfXyA9IHNlbGYuaXNXaUZpRW5hYmxlZCgpCiAgICAgICAgIyBjb25uZWN0IHRvIHBvaW50IGlmIHdpZmkgZW5hYmxlZAogICAgICAgIGlmIENPTkZJRy5URVNULl9faXN3aWZpZW5hYmxlZF9fOgogICAgICAgICAgICBzZWxmLmVuYWJsZVdpRmlBbmRQaW5nKCkKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFByZXBhcmUgTW9kcyBpZiBhdmFpbGFibGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBzZWxmLm1vZHNQcmVwYXJlKCkKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAKICAgICMgbWFpbiBsYXVuY2ggZnVuY3Rpb24KICAgIGRlZiBsYXVuY2goc2VsZiwgYmVuY2htYXJrX25hbWUsIGN5Y2xlcyA9IDEsIHJldHJpZXMgPSBDT1VOVF9SRVRSSUVTKToKICAgICAgICAiIiIgbGF1bmNoIGJlbmNobWFyayAiIiIKICAgICAgICByZXMsIG1zZyA9IEZhbHNlLCAnTm90IHJ1bicKICAgICAgICBibWFyayA9IE5vbmUKICAgICAgICBDT05GSUcuVEVTVC5URVNUX05BTUUgPSBiZW5jaG1hcmtfbmFtZSAgIyBzYXZlIGJlbmNobWFyayBuYW1lCiAgICAgICAgQ09ORklHLlRFU1QuVE9UQUxfQ1lDTEVTID0gY3ljbGVzCiAgICAgICAgdHJ5OgogICAgICAgICAgICBibWFyaywgYmRhdGEgPSBzZWxmLmdldEJlbmNobWFyayhiZW5jaG1hcmtfbmFtZSkKICAgICAgICAgICAgc2VsZi5sb2dnZXIgPSBibWFyay5sb2dnZXIKICAgICAgICAgICAgIyBhZGQgbmV3IHRlc3QgdG8gcmVzdWx0cyBkb2MKICAgICAgICAgICAgc2VsZi5iZW5jaF9yZXN1bHRzLm5ld190ZXN0KGJkYXRhWyduYW1lJ10pCiAgICAgICAgICAgIGJtYXJrLmluc3RhbGwoKQogICAgICAgICAgICBmb3IgaSBpbiByYW5nZShjeWNsZXMpOiAgIyBtYWluIGN5Y2xlCiAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5uZXdsaW5lKCkKICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIkl0ZXJhdGlvbjoge30ve30iLmZvcm1hdChpKzEsIGN5Y2xlcykpCiAgICAgICAgICAgICAgICBibWFyay5ydW5faW5kZXggPSBpICAjIHJ1biBpbmRleCB1c2luZyBpbiBzY3JlZW5zaG90cyBzYXZlCiAgICAgICAgICAgICAgICAjIGFkZCBuZSBjeWNsZSB0byByZXN1bHRzIGRvYwogICAgICAgICAgICAgICAgaWYgaSA+IDAgYW5kIGkgIT0gY3ljbGVzOiAKICAgICAgICAgICAgICAgICAgICBzZWxmLmJlbmNoX3Jlc3VsdHMubmV3X2N5Y2xlKCkKICAgICAgICAgICAgICAgIGogPSAwCiAgICAgICAgICAgICAgICAjIHJldHJpZXMKICAgICAgICAgICAgICAgIHdoaWxlIGogPCByZXRyaWVzOgogICAgICAgICAgICAgICAgICAgIGogKz0gMQogICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RzVG9nZ2xlKGNvbm5lY3Q9RmFsc2UsIHZlcmJvc2U9RmFsc2UpICMgZGlzYWJsZSBtb2RzIGlmIGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRG1lc2coRmFsc2UpICAjIGZpbmQgb2xkIEJDTCBhbmQgTE1IIHRyaWdnZXJzCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGVtcGVyYXR1cmVDb250cm9sKCkgICMgdGVtcGVyYXR1cmUgY29udHJvbAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJhdHRlcnlDb250cm9sKCkgICMgYmF0dGVyeSBjb250cm9sCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucG93ZXJVcFJlYXNvbigpICAjIGNoZWNrIFBvd2VyVXBSZWFzb24KICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2djYXRDbGVhcigpICAjIGNsZWFyIGxvZ2NhdAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZHNUb2dnbGUoY29ubmVjdD1UcnVlKSAgIyBlbmFibGUgbW9kcyBpZiBhdmFpbGFibGUKICAgICAgICAgICAgICAgICAgICAgICAgIyBzdGFydCBiZW5jaG1hcmsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgYmVuY2htYXJrX25hbWUubG93ZXIoKSA9PSAna3Jha2VuJzogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuaW5nKCdSZWxlYXNlIFRoZSBLcmFrZW4gIScpCiAgICAgICAgICAgICAgICAgICAgICAgICMgcnVubmluZyBiZW5jaG1hcmsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgYmVuY2htYXJrX25hbWUubG93ZXIoKSA9PSAna3Jha2VuJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLndhcm5pbmcoJ1RoZSBLcmFrZW4gaXMgY29taW5nICEnKQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygnU3RhcnRpbmcgYmVuY2htYXJrLi4uJykKICAgICAgICAgICAgICAgICAgICAgICAgYm1hcmsuc3RhcnQoKSAgIyBydW5uaW5nIGJlbmNobWFyawogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRG1lc2coKSAgIyBjaGVjayBCQ0wgYW5kIExNSCBmZWF0dXJlcwogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2NhdENvbGxlY3Rpb24oKSAgIyBsb2djYXQgY29sbGVjdGlvbgogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbGxlY3RSZXN1bHRzKGJtYXJrKQogICAgICAgICAgICAgICAgICAgICAgICByZXMsIG1zZyA9IFRydWUsICcnCiAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSAnQ3ljbGUge30ve30gW3t9XSBiZW5jaG1hcmsgZXJyb3I6IHt9Jy5mb3JtYXQoaSsxLCBjeWNsZXMsIGJlbmNobWFya19uYW1lLCBlKQogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN5c2xvZ2dlci5leGNlcHRpb24oZXJyb3IpCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIENPTkZJRy5TWVNURU0uREVCVUc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5leGNlcHRpb24oZXJyb3IpCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcihlcnJvcikKICAgICAgICAgICAgICAgICAgICAgICAgcmVzLCBtc2cgPSBGYWxzZSwgc3RyKGUpCiAgICAgICAgICAgICAgICAgICAgICAgICMgcmV0cnkgaWYgaXQncyBub3QgUG93ZXJVcFJlYXNvbkVycm9yCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGogPCByZXRyaWVzIGFuZCBub3QgaXNpbnN0YW5jZShlLCBQb3dlclVwUmVhc29uRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIubmV3bGluZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuaW5nKCdSZXN0YXJ0IGF0dGVtcHQge30ve30nLmZvcm1hdChqKzEsIHJldHJpZXMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJtYXJrIGlzIG5vdCBOb25lOiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJtYXJrLnN0b3AoKQogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZHNUb2dnbGUoY29ubmVjdD1GYWxzZSkgICMgZGlzYWJsZSBtb2RzIGFmdGVyIHRlc3QgaWYgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICBDT05GSUcuVEVTVC5DVVJSRU5UX0NZQ0xFID0gaSsxCiAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICAgICByYWlzZQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgcmVzLCBtc2cgPSBGYWxzZSwgc3RyKGUpCiAgICAgICAgICAgIHNlbGYuc3lzbG9nZ2VyLmV4Y2VwdGlvbignTGF1bmNoIFt7fV0gYmVuY2htYXJrIGVycm9yOiB7fScuZm9ybWF0KGJlbmNobWFya19uYW1lLCBlKSkKICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygnVGVzdGluZyB3YXMgaW50ZXJydXB0ZWQuIEN5Y2xlczoge30ve30nLmZvcm1hdChDT05GSUcuVEVTVC5DVVJSRU5UX0NZQ0xFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTkZJRy5URVNULlRPVEFMX0NZQ0xFUykpCiAgICAgICAgICAgIGlmIENPTkZJRy5TWVNURU0uREVCVUc6CiAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5leGNlcHRpb24oJ0xhdW5jaCBbe31dIGJlbmNobWFyayBlcnJvcjoge30nLmZvcm1hdChiZW5jaG1hcmtfbmFtZSwgZSkpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcignTGF1bmNoIFt7fV0gYmVuY2htYXJrIGVycm9yOiB7fScuZm9ybWF0KGJlbmNobWFya19uYW1lLCBlKSkKICAgICAgICAgICAgIyBhZGQgZmFpbCBtZXNzYWdlIHRvIHJlc3VsdHMgZG9jCiAgICAgICAgICAgIHRyeTpzZWxmLmJlbmNoX3Jlc3VsdHMuZmFpbGVkX3Rlc3QoJ0ZBSUxFRCcsIHN0cihlKSkKICAgICAgICAgICAgZXhjZXB0OnBhc3MKICAgICAgICAgICAgc2VsZi5wb3dlclVwUmVhc29uKCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCdUZXN0aW5nIGhhcyBiZWVuIGNvbXBsZXRlZC4gQ3ljbGVzOiB7fS97fScuZm9ybWF0KENPTkZJRy5URVNULkNVUlJFTlRfQ1lDTEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09ORklHLlRFU1QuVE9UQUxfQ1lDTEVTKSkKICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICBpZiBibWFyayBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICMgcmV0dXJuIGRlZmF1bHQgbG9nZ2VyCiAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlciA9IGdldExvZ2dlcihfX2ZpbGVfXykKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAjIHRyeSB0byBjb2xsZWN0IHJlc3VsdHMgaWYgZXJyb3IgaXMgb2JzZXJ2ZWQKICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVzOgogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbGxlY3RSZXN1bHRzKGJtYXJrKQogICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgICAgIHNlbGYuc3lzbG9nZ2VyLmV4Y2VwdGlvbihlKQogICAgICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAgICBpZiBBVVRPX1VOSU5TVEFMTF9BUFA6CiAgICAgICAgICAgICAgICAgICAgICAgIGJtYXJrLnVuaW5zdGFsbCgpCiAgICAgICAgcmV0dXJuIHJlcywgbXNnCiAgICAKICAgIGRlZiBjaGVja0RtZXNnKHNlbGYsIHZlcmJvc2U9VHJ1ZSk6CiAgICAgICAgcmVzID0gc2VsZi5kbWVzZyhbJ2JjbCcsICdsbWgnXSkKICAgICAgICBpZiByZXMgaXMgbm90IE5vbmUgYW5kIHZlcmJvc2U6CiAgICAgICAgICAgIHNlbGYubG9nZ2VyLm5ld2xpbmUoc2VsZi5zeXNsb2dnZXIpCiAgICAgICAgICAgIGZvciB4IGluIHJlczoKICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLndhcm5saXN0KCclcyB0cmlnZ2VyZWQ6ICVzLiB8IFRlc3Q6ICVzIHwgU3VpdGU6ICVzIHwgU3RhdGVuYW1lOiAlcyB8IEN5Y2xlOiAlcycgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHhbMl0udXBwZXIoKSwgeFswXSArIHhbMV0sICBDT05GSUcuVEVTVC5DVVJSRU5UX1RFU1QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09ORklHLlRFU1QuQ1VSUkVOVF9TVUlURSwgQ09ORklHLlRFU1QuQ1VSUkVOVF9TVEFURSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05GSUcuVEVTVC5DVVJSRU5UX0NZQ0xFKSwgc2VsZi5zeXNsb2dnZXIpCiAgICAgICAgICAgIHNlbGYubG9nZ2VyLm5ld2xpbmUoc2VsZi5zeXNsb2dnZXIpCgogICAgZGVmIGdldEJlbmNobWFyayhzZWxmLCBiZW5jaG1hcmtfbmFtZSk6CiAgICAgICAgIiIiCiAgICAgICAgR2V0IGJlbmNobWFyayBjbGFzcyBvYmplY3QgYnkgbmFtZQoKICAgICAgICBBcmdzOgogICAgICAgICAgICAgYmVuY2htYXJrX25hbWUgKHN0cik6IEJlbmNobWFyayBuYW1lIHRvIGxvYWQgdGVzdCBzZXR0aW5ncyBmcm9tIEJFTkNITUFSS1NfREFUQSBkaWN0CgogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIHR1cGxlOiAoYmVuY2htYXJrIGNsYXNzIGltcGxlbWVudGF0aW9uLCBiZW5jaG1hcmsgc2V0dGluZ3MgZGljdCkKICAgICAgICAiIiIKICAgICAgICBpZiBiZW5jaG1hcmtfbmFtZSBub3QgaW4gQkVOQ0hNQVJLU19EQVRBOgogICAgICAgICAgICByYWlzZSBUZXN0UHJlcGFyZUVycm9yKCdCZW5jaG1hcmtzIFslc10gbm90IGZvdW5kIGluIGNvbmZpZyBmaWxlICEnICUgYmVuY2htYXJrX25hbWUpCgogICAgICAgIGJkYXRhID0gQkVOQ0hNQVJLU19EQVRBW2JlbmNobWFya19uYW1lXQogICAgICAgIHRyeToKICAgICAgICAgICAgaWYgJ0AnIGluIGJkYXRhOgogICAgICAgICAgICAgICAgaWYgYmRhdGFbJ0AnXSBub3QgaW4gQkVOQ0hNQVJLU19EQVRBOgogICAgICAgICAgICAgICAgICAgIHJhaXNlIFRlc3RQcmVwYXJlRXJyb3IoJ0xpbmtlZCBiZW5jaG1hcmsgInt9IiBkb2VzIG5vdCBleGlzdHMgIScuZm9ybWF0KGJkYXRhWydAJ10pKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiBCRU5DSE1BUktTX0RBVEFbYmRhdGFbJ0AnXV06CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHggbm90IGluIGJkYXRhOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmRhdGFbeF0gPSBCRU5DSE1BUktTX0RBVEFbYmRhdGFbJ0AnXV1beF0KICAgICAgICAgICAgIyBsb2FkaW5nIG1vZHVsZQogICAgICAgICAgICBmcm9tIGxpYnMuY29yZS50b29scyBpbXBvcnQgbG9hZF9tb2R1bGUKICAgICAgICAgICAgX3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSksICdiZW5jaCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXMucHknICUgYmRhdGFbJ2NsYXNzJ10pCiAgICAgICAgICAgIG1vZCA9IGxvYWRfbW9kdWxlKCdiZW5jaG1hcmtfJXMnICUgYmVuY2htYXJrX25hbWUsIF9wYXRoKQogICAgICAgICAgICAjIGdldCBiZW5jaG1hcmsgY2xhc3MKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBjbHMgPSBnZXRhdHRyKG1vZCwgYmRhdGFbJ2NsYXNzJ10sIE5vbmUpCiAgICAgICAgICAgIGlmIGNscyBpcyBOb25lOgogICAgICAgICAgICAgICAgcmFpc2UgVGVzdFByZXBhcmVFcnJvcignQmVuY2htYXJrIGltcGxlbWVudGF0aW9uIG5vdCBmb3VuZCAhJykKICAgICAgICAgICAgcmV0dXJuIGNscyhhdHRyaWJ1dGVzPWJkYXRhLCBzZXJpYWw9c2VsZi5zZXJpYWwpLCBiZGF0YQo8fGZpbV9lbmR8Pg=="]
["bb2701415de7761335fbbd0e525e61812fbbfe87-3","bb2701415de7761335fbbd0e525e61812fbbfe87","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwpmcm9tIGxpbm8uYXBpIGltcG9ydCBkZAoKCmNsYXNzIEZvbyhkZC5Nb2RlbCk6CiAgCiAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkKICAgIHJlbWFya3MgPSBtb2RlbHMuVGV4dEZpZWxkKCJSZW1hcmtzIiwgYmxhbms9VHJ1ZSkKICAgIGlucHV0X21hc2tfdGVzdCA9IGRkLkNoYXJGaWVsZCgKICAgICAgICAiUXVlc3Rpb24gdGV4dCIsCjx8ZmltX2hvbGV8PgogICAgICAgIEJ5IGRlZmF1bHQgaXQgYWNjZXB0cyBhbGwgbGV0dGVycyBleGNlcHQgWi4KICAgICAgICAiIiIsCiAgICAgICAgI34gcmVnZXg9Jy9eW2EteUEtWV0qJC8nKQogICAgICAgIG1hc2tfcmU9Jy9eW2EteUEtWV0qJC8nKQogICAgICAgICN+IHN0cmlwX2NoYXJzX3JlPScvXlthLXlBLVldKiQvJykKCgpjbGFzcyBGb29zKGRkLlRhYmxlKToKICAgIG1vZGVsID0gRm9vCgogICAgY29sdW1uX25hbWVzID0gJ25hbWUgaW5wdXRfbWFza190ZXN0IGlkIHJlbWFya3MnCgogICAgZGV0YWlsX2xheW91dCA9ICIiIgogICAgaWQgbmFtZSBpbnB1dF9tYXNrX3Rlc3QKICAgIHJlbWFya3MKICAgICIiIgoKICAgIGluc2VydF9sYXlvdXQgPSAiIiIKICAgIG5hbWUKICAgIGlucHV0X21hc2tfdGVzdAogICAgIiIiCgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBibGFuaz1UcnVlLAogICAgICAgIG1heF9sZW5ndGg9MjAwLAogICAgICAgIGhlbHBfdGV4dD0iIiJUaGlzIGZpZWxkIGlzIGhlcmUgdG8gcGxheSB3aXRoIHRoZQogICAgICAgIENoYXJGaWVsZCBwYXJhbWV0ZXJzIHJlZ2V4LCBtYXNrX3JlIGFuZCBzdHJpcF9jaGFyc19yZS4KPHxmaW1fZW5kfD4="]
["74e0ea5bdf1b5be0e3f3c7438aea080581b8d536-2","74e0ea5bdf1b5be0e3f3c7438aea080581b8d536","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscwoKaW1wb3J0IG9zCmltcG9ydCB0YXJmaWxlCmltcG9ydCB0ZW1wZmlsZQppbXBvcnQgdW5pdHRlc3QKCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQb3BlbiwgUElQRQpmcm9tIHNpeC5tb3Zlcy51cmxsaWIucmVxdWVzdCBpbXBvcnQgdXJscmV0cmlldmUKaW1wb3J0IG51bXB5IGFzIG5wCgppbXBvcnQgb25ueApmcm9tIG9ubnggaW1wb3J0IGhlbHBlciwgTW9kZWxQcm90bywgVGVuc29yUHJvdG8KZnJvbSBvbm54LmJhY2tlbmQudGVzdC5ydW5uZXIgaW1wb3J0IFJ1bm5lcgppbXBvcnQgb25ueF9jYWZmZTIuYmFja2VuZCBhcyBjMgoKZnJvbSB0ZXN0cy50ZXN0X3V0aWxzIGltcG9ydCBUZXN0Q2FzZQoKY2xhc3MgVGVzdFJvdW5kdHJpcChUZXN0Q2FzZSk6CiAgICBkZWYgX3JvdW5kdHJpcChzZWxmLCBtb2RlbF9uYW1lKToKICAgICAgICBtb2RlbF9kaXIgPSBSdW5uZXIoYzIpLl9wcmVwYXJlX21vZGVsX2RhdGEoCiAgICAgICAgICAgIG5hbWVkdHVwbGUoJ2R1bW15JywgWydtb2RlbF9uYW1lJ10pKG1vZGVsX25hbWUpKQoKICAgICAgICBwYl9wYXRoID0gb3MucGF0aC5qb2luKG1vZGVsX2RpciwgJ21vZGVsLnBiJykKCiAgICAgICAgYmVmb3JlX3JvdW5kdHJpcCA9IG9ubngubG9hZChwYl9wYXRoKQoKICAgICAgICB3aXRoIG9wZW4ocGJfcGF0aCwgJ3JiJykgYXMgcGI6CiAgICAgICAgICAgIGFmdGVyX3JvdW5kdHJpcCA9IG9ubngubG9hZF9mcm9tX3N0cmluZyhwYi5yZWFkKCkpCgogICAgICAgIGFzc2VydCBvbm54LmhlbHBlci5wcmludGFibGVfZ3JhcGgoYmVmb3JlX3JvdW5kdHJpcC5ncmFwaCkgXAogICAgICAgICAgICA9PSBvbm54LmhlbHBlci5wcmludGFibGVfZ3JhcGgoYWZ0ZXJfcm91bmR0cmlwLmdyYXBoKQoKICAgICAgICB3aXRoIG9wZW4ocGJfcGF0aCwgJ3JiJykgYXMgcGI6CiAgICAgICAgICAgIGFzc2VydCBhZnRlcl9yb3VuZHRyaXAuU2VyaWFsaXplVG9TdHJpbmcoKSA9PSBwYi5yZWFkKCkKCiAgICAjIGFyYml0cmFyaWx5IHBpY2sgb25lIHJlbGF0aXZlbHkgc21hbGwgbW9kZWwgdG8gc2FuaXR5IHRlc3Qgd2l0aAogICAgZGVmIHRlc3Rfc3F1ZWV6ZW5ldF92MyhzZWxmKToKICAgICAgICBzZWxmLl9yb3VuZHRyaXAoJ3NxdWVlemVuZXQtaXItdmVyc2lvbi0zJykKCiAgICAjIHRlc3RpbmcganVzdCB0byBiZSBzdXJlIHRoYXQgd2Ugbm8tb3AgaW5zdGVhZCBvZiBicmVha2luZyBvbiBhbgogICAgIyBvbGRlciBJUiB2ZXJzaW9uLgogICAgZGVmIHRlc3Rfc3F1ZWV6ZW5ldF92MShzZWxmKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuX3JvdW5kdHJpcCgnc3F1ZWV6ZW5ldC1pci12ZXJzaW9uLTEnKQoKPHxmaW1fZW5kfD4="]
["2d00f6f96fdfc80ed194a91dd68ec22d05356352-2","2d00f6f96fdfc80ed194a91dd68ec22d05356352","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAucmVwYWlyc2hvcCBpbXBvcnQgKgo8fGZpbV9lbmR8Pg=="]
["79927ab830a53a17577c225520278ac9ff7421df-1","79927ab830a53a17577c225520278ac9ff7421df","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZXhlYygnYT1uPTExO2V4ZWMoIm4rPWE7YT1uLWE7IiooaW50KGlucHV0KCkpKzQpKTtwcmludChuK24lMTApOycqaW50KGlucHV0KCkpKQo8fGZpbV9lbmR8Pg=="]
["70712e397a63cec6bfd144ba501d18bd644d9f0a-2","70712e397a63cec6bfd144ba501d18bd644d9f0a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKZnJvbSBzaHV0aWwgaW1wb3J0IGNvcHlmaWxlCmltcG9ydCBvcwppbXBvcnQgc3lzCgpjaGFubmVsV2lkdGhEaWN0ID0gewogICdtZW1fY3RybCc6ODksJ3VzYl9waHknOjM4LCdkaWZmZXExJzo3Niwnc3lzdGVtY2Flcyc6ODEsJ01VTDMyJzo5MCwnTUFDMzInOjk0LCdzYXNjJzozOSwnaTJjJzo0MiwnaGFtbWluZyc6NzQsJ2RpdjE2Jzo4NiwnbWF4Jzo2NiwndHY4MCc6OTgsJ3JjYV8xMjgnOjE0NiwncmNhXzMyJzo2MCwnc3BpJzo3MCwncmV2eCc6NzEsJ0NTQTQ2NCc6NTYsJ2xvZzInOjE2OCwnc3lzdGVtY2Rlcyc6NDcsJ3NxdWFyZSc6MTA5LCdzaW1wbGVfc3BpJzozOCwndGVybl9hZGQnOjY2LCdtdWx0NjQnOjEyNCwncmNhXzI1Nic6NjgsJ2Flc19jb3JlJzo2NCwnY29tcCc6MTc4LCdwY2lfc3BvY2lfY3RybCc6NjUsJ3NxcnQzMic6NzUsJ3JjYV82NCc6NTUsJ2Rlc19hcmVhJzo3OSwnc3NfcGNtJzozNywKICAnbWVtX2N0cmxfY2FycnknOjg5LCd1c2JfcGh5X2NhcnJ5JzozOCwnZGlmZmVxMV9jYXJyeSc6NzYsJ3N5c3RlbWNhZXNfY2FycnknOjgxLCdNVUwzMl9jYXJyeSc6OTAsJ01BQzMyX2NhcnJ5Jzo5NCwnc2FzY19jYXJyeSc6MzksJ2kyY19jYXJyeSc6NDIsJ2hhbW1pbmdfY2FycnknOjc0LCdkaXYxNl9jYXJyeSc6ODYsJ21heF9jYXJyeSc6NjYsJ3R2ODBfY2FycnknOjk4LCdyY2FfMTI4X2NhcnJ5JzoxNDYsJ3JjYV8zMl9jYXJyeSc6NjAsJ3NwaV9jYXJyeSc6NzAsJ3JldnhfY2FycnknOjcxLCdDU0E0NjRfY2FycnknOjU2LCdsb2cyX2NhcnJ5JzoxNjgsJ3N5c3RlbWNkZXNfY2FycnknOjQ3LCdzcXVhcmVfY2FycnknOjEwOSwnc2ltcGxlX3NwaV9jYXJyeSc6MzgsJ3Rlcm5fYWRkX2NhcnJ5Jzo2NiwnbXVsdDY0X2NhcnJ5JzoxMjQsJ3JjYV8yNTZfY2FycnknOjY4LCdhZXNfY29yZV9jYXJyeSc6NjQsJ2NvbXBfY2FycnknOjE3OCwncGNpX3Nwb2NpX2N0cmxfY2FycnknOjY1LCdzcXJ0MzJfY2FycnknOjc1LCdyY2FfNjRfY2FycnknOjU1LCdkZXNfYXJlYV9jYXJyeSc6NzksJ3NzX3BjbV9jYXJyeSc6MzcsCiAgIydkZXB0aF9pMmMnOjQ5LCdhcmVhX3Npbic6MTE1LCdhcmVhX2ludDJmbG9hdCc6MjQsJ2RlcHRoX2Jhcic6NzAsJ2RlcHRoX3Npbic6MTE4LCdhcmVhX2NhdmxjJzoyOCwnYXJlYV9iYXInOjY0LCdhcmVhX2kyYyc6NDUsJ2FyZWFfZGVjJzo0MCwnYXJlYV92b3Rlcic6NDksJ2FyZWFfcHJpb3JpdHknOjYwLCdkZXB0aF9pbnQyZmxvYXQnOjI0LCdhcmVhX21heCc6NzUsJ2RlcHRoX2NhdmxjJzozMiwnYXJlYV9jdHJsJzo0MiwnYXJlYV9hcmJpdGVyJzoxNDgsJ2FyZWFfbG9nMic6MTY2LCdhcmVhX3NxdWFyZSc6MTExLCdkZXB0aF9jdHJsJzo0MywnZGVwdGhfYWRkZXInOjU1LCdkZXB0aF9kZWMnOjQwLCdkZXB0aF9hcmJpdGVyJzoxNTAsJ2RlcHRoX21heCc6NzgsJ2RlcHRoX2xvZzInOjE3NiwnZGVwdGhfdm90ZXInOjU2LCdhcmVhX3JvdXRlcic6NDksJ2FyZWFfbWVtX2N0cmwnOjEyMywnYXJlYV9tdWx0aXBsaWVyJzoxMjYsJ2RlcHRoX211bHRpcGxpZXInOjEzOCwnZGVwdGhfcHJpb3JpdHknOjYyLCdhcmVhX2FkZGVyJzo1MSwnZGVwdGhfc3F1YXJlJzoxMTgsJ2RlcHRoX21lbV9jdHJsJzoxNDUsJ2RlcHRoX3JvdXRlcic6NDEsCiAgIydkZXB0aF9pMmNfY2FycnknOjQ5LCdhcmVhX3Npbl9jYXJyeSc6MTE1LCdhcmVhX2ludDJmbG9hdF9jYXJyeSc6MjQsJ2RlcHRoX2Jhcl9jYXJyeSc6NzAsJ2RlcHRoX3Npbl9jYXJyeSc6MTE4LCdhcmVhX2NhdmxjX2NhcnJ5JzoyOCwnYXJlYV9iYXJfY2FycnknOjY0LCdhcmVhX2kyY19jYXJyeSc6NDUsJ2FyZWFfZGVjX2NhcnJ5Jzo0MCwnYXJlYV92b3Rlcl9jYXJyeSc6NDksJ2FyZWFfcHJpb3JpdHlfY2FycnknOjYwLCdkZXB0aF9pbnQyZmxvYXRfY2FycnknOjI0LCdhcmVhX21heF9jYXJyeSc6NzUsJ2RlcHRoX2NhdmxjX2NhcnJ5JzozMiwnYXJlYV9jdHJsX2NhcnJ5Jzo0MiwnYXJlYV9hcmJpdGVyX2NhcnJ5JzoxNDgsJ2FyZWFfbG9nMl9jYXJyeSc6MTY2LCdhcmVhX3NxdWFyZV9jYXJyeSc6MTExLCdkZXB0aF9jdHJsX2NhcnJ5Jzo0MywnZGVwdGhfYWRkZXJfY2FycnknOjU1LCdkZXB0aF9kZWNfY2FycnknOjQwLCdkZXB0aF9hcmJpdGVyX2NhcnJ5JzoxNTAsJ2RlcHRoX21heF9jYXJyeSc6NzgsJ2RlcHRoX2xvZzJfY2FycnknOjE3NiwnZGVwdGhfdm90ZXJfY2FycnknOjU2LCdhcmVhX3JvdXRlcl9jYXJyeSc6NDksJ2FyZWFfbWVtX2N0cmxfY2FycnknOjEyMywnYXJlYV9tdWx0aXBsaWVyX2NhcnJ5JzoxMjYsJ2RlcHRoX211bHRpcGxpZXJfY2FycnknOjEzOCwnZGVwdGhfcHJpb3JpdHlfY2FycnknOjYyLCdhcmVhX2FkZGVyX2NhcnJ5Jzo1MSwnZGVwdGhfc3F1YXJlX2NhcnJ5JzoxMTgsJ2RlcHRoX21lbV9jdHJsX2NhcnJ5JzoxNDUsJ2RlcHRoX3JvdXRlcl9jYXJyeSc6NDEsCiAgJ2FyZWFfaTJjJzogNDYsICdhcmVhX2FyYml0ZXInOiAxNTAsICdhcmVhX3Npbic6IDExOSwgJ2FyZWFfZGVjJzogNDAsICdhcmVhX3ByaW9yaXR5JzogNjAsICdhcmVhX2ludDJmbG9hdCc6IDI1LCAnYXJlYV92b3Rlcic6IDQ4LCAnYXJlYV9yb3V0ZXInOiA0NCwgJ2FyZWFfc3F1YXJlJzogMTA2LCAnYXJlYV9iYXInOiA2NywgJ2FyZWFfY3RybCc6IDQyLCAnYXJlYV9tdWx0aXBsaWVyJzogMTIyLCAnYXJlYV9sb2cyJzogMTY3LCAnYXJlYV9jYXZsYyc6IDM0LCAnYXJlYV9tYXgnOiA3NCwgJ2FyZWFfYWRkZXInOiA0OSwgJ2FyZWFfbWVtX2N0cmwnOiAxMTgsCiAgJ2FyZWFfaTJjX2NhcnJ5JzogNDYsICdhcmVhX2FyYml0ZXJfY2FycnknOiAxNTAsICdhcmVhX3Npbl9jYXJyeSc6IDExOSwgJ2FyZWFfZGVjX2NhcnJ5JzogNDAsICdhcmVhX3ByaW9yaXR5X2NhcnJ5JzogNjAsICdhcmVhX2ludDJmbG9hdF9jYXJyeSc6IDI1LCAnYXJlYV92b3Rlcl9jYXJyeSc6IDQ4LCAnYXJlYV9yb3V0ZXJfY2FycnknOiA0NCwgJ2FyZWFfc3F1YXJlX2NhcnJ5JzogMTA2LCAnYXJlYV9iYXJfY2FycnknOiA2NywgJ2FyZWFfY3RybF9jYXJyeSc6IDQyLCAnYXJlYV9tdWx0aXBsaWVyX2NhcnJ5JzogMTIyLCAnYXJlYV9sb2cyX2NhcnJ5JzogMTY3LCAnYXJlYV9jYXZsY19jYXJyeSc6IDM0LCAnYXJlYV9tYXhfY2FycnknOiA3NCwgJ2FyZWFfYWRkZXJfY2FycnknOiA0OSwgJ2FyZWFfbWVtX2N0cmxfY2FycnknOiAxMTgsCiAgIyBzYW1lIGFzIGFyZWEKICAncHJlb3B0X2FkZGVyJzo1MSwncHJlb3B0X2FyYml0ZXInOjE0OCwncHJlb3B0X2Jhcic6NjQsJ3ByZW9wdF9jYXZsYyc6MjgsJ3ByZW9wdF9jdHJsJzo0MiwncHJlb3B0X2RlYyc6NDAsJ3ByZW9wdF9pMmMnOjQ1LCdwcmVvcHRfaW50MmZsb2F0JzoyNCwncHJlb3B0X2xvZzInOjE2NiwncHJlb3B0X21heCc6NzUsJ3ByZW9wdF9tZW1fY3RybCc6MTIzLCdwcmVvcHRfbXVsdGlwbGllcic6MTI2LCdwcmVvcHRfcHJpb3JpdHknOjYwLCdwcmVvcHRfcm91dGVyJzo0OSwncHJlb3B0X3Npbic6MTE1LCdwcmVvcHRfc3F1YXJlJzoxMTEsJ3ByZW9wdF92b3Rlcic6NDksCiAgJ3ByZW9wdF9hZGRlcl9jYXJyeSc6NTEsJ3ByZW9wdF9hcmJpdGVyX2NhcnJ5JzoxNDgsJ3ByZW9wdF9iYXJfY2FycnknOjY0LCdwcmVvcHRfY2F2bGNfY2FycnknOjI4LCdwcmVvcHRfY3RybF9jYXJyeSc6NDIsJ3ByZW9wdF9kZWNfY2FycnknOjQwLCdwcmVvcHRfaTJjX2NhcnJ5Jzo0NSwncHJlb3B0X2ludDJmbG9hdF9jYXJyeSc6MjQsJ3ByZW9wdF9sb2cyX2NhcnJ5JzoxNjYsJ3ByZW9wdF9tYXhfY2FycnknOjc1LCdwcmVvcHRfbWVtX2N0cmxfY2FycnknOjEyMywncHJlb3B0X211bHRpcGxpZXJfY2FycnknOjEyNiwncHJlb3B0X3ByaW9yaXR5X2NhcnJ5Jzo2MCwncHJlb3B0X3JvdXRlcl9jYXJyeSc6NDksJ3ByZW9wdF9zaW5fY2FycnknOjExNSwncHJlb3B0X3NxdWFyZV9jYXJyeSc6MTExLCdwcmVvcHRfdm90ZXJfY2FycnknOjQ5CgojICAiYXJlYV9zaW4iOjExNywiYXJlYV9pbnQyZmxvYXQiOjI1LCJhcmVhX2NhdmxjIjoyOCwiYXJlYV9iYXIiOjY0LCJhcmVhX2kyYyI6NDUsImFyZWFfZGVjIjo0MCwiYXJlYV92b3RlciI6NTIsImFyZWFfcHJpb3JpdHkiOjU4LCJhcmVhX21heCI6NzUsImFyZWFfY3RybCI6NDEsImFyZWFfYXJiaXRlciI6MTUwLCJhcmVhX2xvZzIiOjE2OSwiYXJlYV9zcXVhcmUiOjExMCwiYXJlYV9yb3V0ZXIiOjUxLCJhcmVhX21lbV9jdHJsIjoxMjcsImFyZWFfbXVsdGlwbGllciI6MTI2LCJhcmVhX2FkZGVyIjo0OSwKIyAgImFyZWFfc2luX2NhcnJ5IjoxMTcsImFyZWFfaW50MmZsb2F0X2NhcnJ5IjoyNSwiYXJlYV9jYXZsY19jYXJyeSI6MjgsImFyZWFfYmFyX2NhcnJ5Ijo2NCwiYXJlYV9pMmNfY2FycnkiOjQ1LCJhcmVhX2RlY19jYXJyeSI6NDAsImFyZWFfdm90ZXJfY2FycnkiOjUyLCJhcmVhX3ByaW9yaXR5X2NhcnJ5Ijo1OCwiYXJlYV9tYXhfY2FycnkiOjc1LCJhcmVhX2N0cmxfY2FycnkiOjQxLCJhcmVhX2FyYml0ZXJfY2FycnkiOjE1MCwiYXJlYV9sb2cyX2NhcnJ5IjoxNjksImFyZWFfc3F1YXJlX2NhcnJ5IjoxMTAsImFyZWFfcm91dGVyX2NhcnJ5Ijo1MSwiYXJlYV9tZW1fY3RybF9jYXJyeSI6MTI3LCJhcmVhX211bHRpcGxpZXJfY2FycnkiOjEyNiwiYXJlYV9hZGRlcl9jYXJyeSI6NDksCiMgICJkZXB0aF9pMmMiOjQ4LCJkZXB0aF9iYXIiOjY5LCJkZXB0aF9zaW4iOjExOSwiZGVwdGhfaW50MmZsb2F0IjoyNCwiZGVwdGhfY2F2bGMiOjMxLCJkZXB0aF9jdHJsIjo0MywiZGVwdGhfYWRkZXIiOjUzLCJkZXB0aF9kZWMiOjQwLCJkZXB0aF9hcmJpdGVyIjoxNDcsImRlcHRoX21heCI6NzYsImRlcHRoX2xvZzIiOjE3NCwiZGVwdGhfdm90ZXIiOjU5LCJkZXB0aF9tdWx0aXBsaWVyIjoxMzgsImRlcHRoX3ByaW9yaXR5Ijo2MiwiZGVwdGhfc3F1YXJlIjoxMTcsImRlcHRoX21lbV9jdHJsIjoxNTIsImRlcHRoX3JvdXRlciI6NDIsCiMgICJkZXB0aF9pMmNfY2FycnkiOjQ4LCJkZXB0aF9iYXJfY2FycnkiOjY5LCJkZXB0aF9zaW5fY2FycnkiOjExOSwiZGVwdGhfaW50MmZsb2F0X2NhcnJ5IjoyNCwiZGVwdGhfY2F2bGNfY2FycnkiOjMxLCJkZXB0aF9jdHJsX2NhcnJ5Ijo0MywiZGVwdGhfYWRkZXJfY2FycnkiOjUzLCJkZXB0aF9kZWNfY2FycnkiOjQwLCJkZXB0aF9hcmJpdGVyX2NhcnJ5IjoxNDcsImRlcHRoX21heF9jYXJyeSI6NzYsImRlcHRoX2xvZzJfY2FycnkiOjE3NCwiZGVwdGhfdm90ZXJfY2FycnkiOjU5LCJkZXB0aF9tdWx0aXBsaWVyX2NhcnJ5IjoxMzgsImRlcHRoX3ByaW9yaXR5X2NhcnJ5Ijo2MiwiZGVwdGhfc3F1YXJlX2NhcnJ5IjoxMTcsImRlcHRoX21lbV9jdHJsX2NhcnJ5IjoxNTIsImRlcHRoX3JvdXRlcl9jYXJyeSI6NDIsCiMgICJhZXNfY29yZSI6NjIsICJjb21wIjoxNzgsICJDU0E0NjQiOjYyLCAiZGVzX2FyZWEiOjgwLCAiZGlmZmVxMSI6NzYsICJkaXYxNiI6ODYsICJoYW1taW5nIjo3NiwgImkyYyI6NDIsICJsb2cyIjoxNjIsICJNQUMzMiI6OTAsICJtYXgiOjYyLCAibWVtX2N0cmwiOjg4LCAiTVVMMzIiOjk0LCAibXVsdDY0IjoxMjQsICJwY2lfc3BvY2lfY3RybCI6NzAsICJyY2FfMTI4IjoxNDgsICJyY2FfMjU2Ijo3MCwgInJjYV8zMiI6NjIsICJyY2FfNjQiOjU2LCAicmV2eCI6NzAsICJzYXNjIjozOCwgInNpbXBsZV9zcGkiOjQwLCAic3BpIjo2NiwgInNxcnQzMiI6NzYsICJzcXVhcmUiOjExMCwgInNzX3BjbSI6MzYsICJzeXN0ZW1jYWVzIjo4NiwgInN5c3RlbWNkZXMiOjUwLCAidGVybl9hZGQiOjcwLCAidHY4MCI6OTgsICJ1c2JfcGh5IjozOCwKIyAgImFlc19jb3JlX2NhcnJ5Ijo2MiwgImNvbXBfY2FycnkiOjE3OCwgIkNTQTQ2NF9jYXJyeSI6NjIsICJkZXNfYXJlYV9jYXJyeSI6ODAsICJkaWZmZXExX2NhcnJ5Ijo3NiwgImRpdjE2X2NhcnJ5Ijo4NiwgImhhbW1pbmdfY2FycnkiOjc2LCAiaTJjX2NhcnJ5Ijo0MiwgImxvZzJfY2FycnkiOjE2MiwgIk1BQzMyX2NhcnJ5Ijo5MCwgIm1heF9jYXJyeSI6NjIsICJtZW1fY3RybF9jYXJyeSI6ODgsICJNVUwzMl9jYXJyeSI6OTQsICJtdWx0NjRfY2FycnkiOjEyNCwgInBjaV9zcG9jaV9jdHJsX2NhcnJ5Ijo3MCwgInJjYV8xMjhfY2FycnkiOjE0OCwgInJjYV8yNTZfY2FycnkiOjcwLCAicmNhXzMyX2NhcnJ5Ijo2MiwgInJjYV82NF9jYXJyeSI6NTYsICJyZXZ4X2NhcnJ5Ijo3MCwgInNhc2NfY2FycnkiOjM4LCAic2ltcGxlX3NwaV9jYXJyeSI6NDAsICJzcGlfY2FycnkiOjY2LCAic3FydDMyX2NhcnJ5Ijo3NiwgInNxdWFyZV9jYXJyeSI6MTEwLCAic3NfcGNtX2NhcnJ5IjozNiwgInN5c3RlbWNhZXNfY2FycnkiOjg2LCAic3lzdGVtY2Rlc19jYXJyeSI6NTAsICJ0ZXJuX2FkZF9jYXJyeSI6NzAsICJ0djgwX2NhcnJ5Ijo5OCwgInVzYl9waHlfY2FycnkiOjM4Cn0KCmJsaWZEaXI9ICIvaG9tZS9raW1qaW4xNC93b3JrL21hcHBpbmcvbWlnX21hcHBpbmcvbW9ja3R1cnRsZS9idWlsZC8iCnZwckRpcj0iL2hvbWUva2ltamluMTQvd29yay92dHIvdnRyLXZlcmlsb2ctdG8tcm91dGluZy92cHIvIgpydW5EaXI9Ii9ob21lL2tpbWppbjE0L3dvcmsvbWFwcGluZy9taWdfbWFwcGluZy9tb2NrdHVydGxlL2J1aWxkL3Zwci8iCm91dHB1dERpcj0iL2hvbWUva2ltamluMTQvd29yay9tYXBwaW5nL21pZ19tYXBwaW5nL21vY2t0dXJ0bGUvYnVpbGQvdnByL291dHB1dCIKc2F2ZURpcj0iL2hvbWUva2ltamluMTQvd29yay9tYXBwaW5nL21pZ19tYXBwaW5nL21vY2t0dXJ0bGUvYnVpbGQvdnByL291dHB1dCIKCnhtbEZpbGUgPSAiYXJjaC9YaWxpbnhfc3R5bGVfYXJjaF9lY2luLnhtbCIKdnByT3B0aW9ucyA9ICItLXRpbWluZ19yZXBvcnRfZGV0YWlsIGFnZ3JlZ2F0ZWQgLS1yb3V0ZV9jaGFuX3dpZHRoIgoKIyBHZXQgZGlyZWN0b3J5IG9mIHdoYXQgeW91IHdhbnQgdG8gcnVuCmJsaWZEaXI9YmxpZkRpcitzeXMuYXJndlsxXSsiLyIKCnNlZWRfbGlzdD17MSwgMzAyLCA1OTEwN30KI3NlZWRfbGlzdD17MSwgNX0KCmZvciBzZWVkIGluIHNlZWRfbGlzdDoKICAjIE1ha2UgcnVuIGRpcmVjdG9yeSBmb3IgVlBSCiAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG91dHB1dERpcik6CiAgICBvcy5ta2RpcihvdXRwdXREaXIpCiAgCiAgIyBGb3IgZWFjaCBmaWxlIGluIHRoZSBkaXJlY3RvcnksIHJ1biBWUFIKICBmb3IgZmlsZU5hbWUgaW4gb3MubGlzdGRpcihibGlmRGlyKToKICAKICAgICMgR2V0IGJlbmNobWFyayBuYW1lCiAgICBmaWxlTmFtZUxpc3QgPSBmaWxlTmFtZS5zcGxpdCgiLiIpCiAgICBiZW5jaG1hcmsgPSBzdHIoZmlsZU5hbWVMaXN0WzBdKQogIAogICAgIyBNYWtlIGJlbmNobWFyayBkaXJlY3RvcnkKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvdXRwdXREaXIrIi8iK2JlbmNobWFyayk6CiAgICAgIG9zLm1rZGlyKG91dHB1dERpcisiLyIrYmVuY2htYXJrKQogIAogICAgIyBDb3B5IGJsaWYgZnJvbSBtb2NrdHVydGxlIHRvIHZwcgogICAgY29weWZpbGUoYmxpZkRpcitmaWxlTmFtZSwgb3V0cHV0RGlyKyIvIitiZW5jaG1hcmsrIi8iK2ZpbGVOYW1lKTsKICAKICAgICMgUnVuIHZwcgogICAgdmFsdWUgPSBjaGFubmVsV2lkdGhEaWN0W2JlbmNobWFya10KICAgIHZhbHVlID0gaW50KHZhbHVlKjEuMjUpCiAgICBpZiB2YWx1ZSUyICE9IDA6CiAgICAgIHZhbHVlID0gdmFsdWUrMQogICAKICAgIHByaW50KGJlbmNobWFyayArICI6IikKICAgIHByaW50ICgiICBUcnlpbmcgY2hhbm5lbCB3aWR0aCAiK3N0cih2YWx1ZSkpCiAgICBvcy5zeXN0ZW0odnByRGlyKyJ2cHIgIit4bWxGaWxlKyIgIitvdXRwdXREaXIrIi8iK2JlbmNobWFyaysiLyIrZmlsZU5hbWUrIiAiK3Zwck9wdGlvbnMrIiAiK3N0cih2YWx1ZSkrIiAtLXNlZWQgIitzdHIoc2VlZCkrIiA+IC9kZXYvbnVsbCIpIAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICB3aXRoIG9wZW4gKCd2cHJfc3Rkb3V0LmxvZycpIGFzIHZwcl9vdXRwdXQ6CiAgICAgIGlmICdSb3V0aW5nIGZhaWxlZCcgaW4gdnByX291dHB1dC5yZWFkKCk6CiAgICAgICAgcHJpbnQgKCIgICAgUm91dGluZyBmYWlsZWQgZm9yICIgKyBiZW5jaG1hcmsgKyAiIHdpdGggY2hhbm5lbCB3aWR0aCAiICsgc3RyKHZhbHVlKSk7CiAgICAgICAgcHJpbnQgKCIgIFRyeWluZyBjaGFubmVsIHdpZHRoICIrc3RyKHZhbHVlLTIpKQo8fGZpbV9lbmR8Pg=="]
["246f1aec88d9df23fa51e56c8a72de5ddc567be6-2","246f1aec88d9df23fa51e56c8a72de5ddc567be6","PHxmaW1fcHJlZml4fD4KIiIiMjAyMTEwMjMgbW9kZWwgdXBkYXRlCgpSZXZpc2lvbiBJRDogOTBlNmNlZGE2ZjJjClJldmlzZXM6IGM5ZDI5ZmI5MGJkNApDcmVhdGUgRGF0ZTogMjAyMS0xMC0yNCAwMDowOTozNC45MTI1NDYKCiIiIgpmcm9tIGFsZW1iaWMgaW1wb3J0IG9wCmltcG9ydCBzcWxhbGNoZW15IGFzIHNhCgoKIyByZXZpc2lvbiBpZGVudGlmaWVycywgdXNlZCBieSBBbGVtYmljLgpyZXZpc2lvbiA9ICc5MGU2Y2VkYTZmMmMnCmRvd25fcmV2aXNpb24gPSAnYzlkMjlmYjkwYmQ0JwpicmFuY2hfbGFiZWxzID0gTm9uZQpkZXBlbmRzX29uID0gTm9uZQoKCmRlZiB1cGdyYWRlKCk6CiAgICAjICMjIyBjb21tYW5kcyBhdXRvIGdlbmVyYXRlZCBieSBBbGVtYmljIC0gcGxlYXNlIGFkanVzdCEgIyMjCiAgICBvcC5jcmVhdGVfdGFibGUoJ2NvbnRhaW5lcnR5cGVzJywKICAgIHNhLkNvbHVtbignaWQnLCBzYS5JbnRlZ2VyKCksIG51bGxhYmxlPUZhbHNlKSwKICAgIHNhLkNvbHVtbignbmFtZScsIHNhLlN0cmluZyhsZW5ndGg9MzIpLCBudWxsYWJsZT1UcnVlKSwKICAgIHNhLkNvbHVtbigndm9sdW1lX21heCcsIHNhLkZsb2F0KCksIG51bGxhYmxlPVRydWUpLAogICAgc2EuUHJpbWFyeUtleUNvbnN0cmFpbnQoJ2lkJykKICAgICkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgb3AuY3JlYXRlX3RhYmxlKCdsb2NhdGlvbnMnLAogICAgc2EuQ29sdW1uKCdpZCcsIHNhLkludGVnZXIoKSwgbnVsbGFibGU9RmFsc2UpLAogICAgc2EuQ29sdW1uKCduYW1lJywgc2EuU3RyaW5nKGxlbmd0aD0zMiksIG51bGxhYmxlPVRydWUpLAogICAgc2EuUHJpbWFyeUtleUNvbnN0cmFpbnQoJ2lkJykKPHxmaW1fZW5kfD4="]
["9926b54160f4f61907efe33a4b313311d574807f-3","9926b54160f4f61907efe33a4b313311d574807f","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgpmcm9tIGppbmphMiBpbXBvcnQgRW52aXJvbm1lbnQsIFBhY2thZ2VMb2FkZXIKCmltcG9ydCBvcwppbXBvcnQgc3lzCmltcG9ydCBqc29uCmltcG9ydCB0aW1lCmltcG9ydCByZQoKaW1wb3J0IGNzdgppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IHB5Z2l0aHViMwoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIFNSQ19ST09UID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkKICAgIHN5cy5wYXRoLmFwcGVuZChTUkNfUk9PVCkKCnRyeToKICAgIGZyb20gc2V0dGluZ3MuYmFzZSBpbXBvcnQgZ2V0X2dpdGh1Yl9hdXRoLCBnZXRfZ2l0aHViX2dvbGRlbl9hdXRoLCBcCiAgICAgICAgUkVETUlORV9TRVJWRVIsIFVTRV9JTVBPUlRfQVBJLCBSRURNSU5FX0NBVEVHT1JZX01BUCwgXAogICAgICAgIFJFRE1JTkVfU1RBVFVTX01BUCwgUkVETUlORV9VU0VSX01BUCwgUkVETUlORV9WRVJTSU9OX01BUCwgXAogICAgICAgIFJFRE1JTkVfUFJJT1JJVFlfTUFQLCBSRURNSU5FX0NGX01BUCwgUkVETUlORV9UUkFDS0VSX01BUAoKICAgIGZyb20gdXRpbHMubXNnX3V0aWwgaW1wb3J0ICoKICAgIGZyb20gZ2l0aHViX2lzc3Vlcy5tZF90cmFuc2xhdGUgaW1wb3J0IHRyYW5zbGF0ZV9mb3JfZ2l0aHViCiAgICBmcm9tIGdpdGh1Yl9pc3N1ZXMubWlsZXN0b25lX2hlbHBlciBpbXBvcnQgTWlsZXN0b25lSGVscGVyCiAgICBmcm9tIGdpdGh1Yl9pc3N1ZXMubGFiZWxfaGVscGVyIGltcG9ydCBMYWJlbEhlbHBlcgoKICAgIGZyb20gZ2l0aHViX2dvbGRlbl9jb21tZXQgaW1wb3J0IEdpdEh1Yklzc3VlSW1wb3J0ZXIKZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgcmFpc2UKCgpjbGFzcyBHaXRodWJJc3N1ZU1ha2VyOgogICAgIiIiCiAgICBHaXZlbiBhIFJlZG1pbmUgaXNzdWUgaW4gSlNPTiBmb3JtYXQsIGNyZWF0ZSBhIEdpdEh1YiBpc3N1ZS4KICAgIFRoZXNlIGlzc3VlcyBzaG91bGQgYmUgbW92ZWQgZnJvbSBSZWRtaW5lIGluIG9yZGVyIG9mIGlzc3VlLmlkLgogICAgVGhpcyB3aWxsIGFsbG93IG1hcHBpbmcgb2YgUmVkbWluZSBpc3N1ZSBJRCdzIGFnYWluc3QgbmV3bHkgY3JlYXRlZAogICAgR2l0aHViIGlzc3VlZCBJRHMuICBlLmcuLCBjYW4gdHJhbnNsYXRlIHJlbGF0ZWQgaXNzdWVzIG51bWJlcnMsIGV0Yy4KICAgICIiIgogICAgSVNTVUVfU1RBVEVfQ0xPU0VEID0gWydSZWplY3RlZCcsICdDbG9zZWQnLCAnUmVzb2x2ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdDYW5ub3QgUmVwcm9kdWNlJ10KCiAgICBkZWYgX19pbml0X18oc2VsZiwgdXNlcl9tYXBfaGVscGVyPU5vbmUsIGxhYmVsX21hcHBpbmdfZmlsZW5hbWU9Tm9uZSwKICAgICAgICAgICAgICAgICBtaWxlc3RvbmVfbWFwcGluZ19maWxlbmFtZT1Ob25lLCB1c2VfaW1wb3J0X2FwaT1GYWxzZSk6CiAgICAgICAgc2VsZi5naXRodWJfY29ubiA9IE5vbmUKICAgICAgICBzZWxmLmNvbW1lbnRzX3NlcnZpY2UgPSBOb25lCiAgICAgICAgc2VsZi5taWxlc3RvbmVfbWFuYWdlciA9IE1pbGVzdG9uZUhlbHBlcihtaWxlc3RvbmVfbWFwcGluZ19maWxlbmFtZSkKICAgICAgICBzZWxmLmxhYmVsX2hlbHBlciA9IExhYmVsSGVscGVyKGxhYmVsX21hcHBpbmdfZmlsZW5hbWUpCiAgICAgICAgc2VsZi5qaW5qYV9lbnYgPSBFbnZpcm9ubWVudChsb2FkZXI9UGFja2FnZUxvYWRlcignZ2l0aHViX2lzc3VlcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVtcGxhdGVzJykpCiAgICAgICAgc2VsZi51c2VyX21hcF9oZWxwZXIgPSB1c2VyX21hcF9oZWxwZXIKICAgICAgICBzZWxmLnVzZV9pbXBvcnRfYXBpID0gdXNlX2ltcG9ydF9hcGkKCiAgICAgICAgc2VsZi5yZWRtaW5lX2NhdGVnb3J5X21hcCA9IHNlbGYucmVhZF9jc3Zfa3ZtYXAoUkVETUlORV9DQVRFR09SWV9NQVApCiAgICAgICAgc2VsZi5yZWRtaW5lX3N0YXR1c19tYXAgPSBzZWxmLnJlYWRfY3N2X2t2bWFwKFJFRE1JTkVfU1RBVFVTX01BUCkKICAgICAgICBzZWxmLnJlZG1pbmVfdXNlcl9tYXAgPSBzZWxmLnJlYWRfY3N2X2t2bWFwKFJFRE1JTkVfVVNFUl9NQVApCiAgICAgICAgc2VsZi5yZWRtaW5lX3ZlcnNpb25fbWFwID0gc2VsZi5yZWFkX2Nzdl9rdm1hcChSRURNSU5FX1ZFUlNJT05fTUFQKQogICAgICAgIHNlbGYucmVkbWluZV9wcmlvcml0eV9tYXAgPSBzZWxmLnJlYWRfY3N2X2t2bWFwKFJFRE1JTkVfUFJJT1JJVFlfTUFQKQogICAgICAgIHNlbGYucmVkbWluZV9jZl9tYXAgPSBzZWxmLnJlYWRfY3N2X2t2bWFwKFJFRE1JTkVfQ0ZfTUFQKQogICAgICAgIHNlbGYucmVkbWluZV90cmFja2VyX21hcCA9IHNlbGYucmVhZF9jc3Zfa3ZtYXAoUkVETUlORV9UUkFDS0VSX01BUCkKCiAgICBkZWYgZ2V0X2NvbW1lbnRzX3NlcnZpY2Uoc2VsZik6CiAgICAgICAgaWYgc2VsZi5jb21tZW50c19zZXJ2aWNlIGlzIE5vbmU6CiAgICAgICAgICAgIHNlbGYuY29tbWVudHNfc2VydmljZSA9IFwKICAgICAgICAgICAgICAgIHB5Z2l0aHViMy5zZXJ2aWNlcy5pc3N1ZXMuQ29tbWVudHMoKipnZXRfZ2l0aHViX2F1dGgoKSkKCiAgICAgICAgcmV0dXJuIHNlbGYuY29tbWVudHNfc2VydmljZQoKICAgIGRlZiBnZXRfZ2l0aHViX2Nvbm4oc2VsZik6CiAgICAgICAgaWYgc2VsZi5naXRodWJfY29ubiBpcyBOb25lOgogICAgICAgICAgICBzZWxmLmdpdGh1Yl9jb25uID0gcHlnaXRodWIzLkdpdGh1YigqKmdldF9naXRodWJfYXV0aCgpKQogICAgICAgIHJldHVybiBzZWxmLmdpdGh1Yl9jb25uCgogICAgZGVmIGdldF9naXRodWJfZ29sZGVuX2Nvbm4oc2VsZik6CiAgICAgICAgaWYgc2VsZi5naXRodWJfY29ubiBpcyBOb25lOgogICAgICAgICAgICBzZWxmLmdpdGh1Yl9jb25uID0gR2l0SHViSXNzdWVJbXBvcnRlcigKICAgICAgICAgICAgICAgIHNlbGYsICoqZ2V0X2dpdGh1Yl9nb2xkZW5fYXV0aCgpKQogICAgICAgIHJldHVybiBzZWxmLmdpdGh1Yl9jb25uCgogICAgZGVmIHJlYWRfY3N2X2t2bWFwKHNlbGYsIGZpbGVfcGF0aCk6CiAgICAgICAgbXNndCgnTG9hZGluZyBjdnMgbWFwOiAlcycgJSBmaWxlX3BhdGgpCiAgICAgICAga3ZfbWFwID0ge30KICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZV9wYXRoKToKICAgICAgICAgICAgcmV0dXJuIGt2X21hcAoKICAgICAgICB3aXRoIG9wZW4oZmlsZV9wYXRoLCAnclUnKSBhcyBjc3ZmaWxlOgogICAgICAgICAgICBtYXBfcmVhZGVyID0gY3N2LnJlYWRlcihjc3ZmaWxlLCBkZWxpbWl0ZXI9JywnKQogICAgICAgICAgICByb3dfbnVtID0gMAogICAgICAgICAgICBmb3Igcm93IGluIG1hcF9yZWFkZXI6CiAgICAgICAgICAgICAgICByb3dfbnVtICs9IDEKICAgICAgICAgICAgICAgIGlmIHJvd19udW0gPT0gMSBvciBsZW4ocm93KSA9PSAwIG9yIHJvd1swXS5zdGFydHN3aXRoKCcjJyk6CiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIGt2X21hcFtyb3dbMF1dID0gcm93WzFdCgogICAgICAgICMgcHJpbnQoa3ZfbWFwKQogICAgICAgIHJldHVybiBrdl9tYXAKCiAgICBkZWYgZm9ybWF0X25hbWVfZm9yX2dpdGh1YihzZWxmLCBhdXRob3JfbmFtZSwgaW5jbHVkZV9hdF9zaWduPVRydWUpOgogICAgICAgICIiIgogICAgICAgICgxKSBUcnkgdGhlIHVzZXIgbWFwCiAgICAgICAgKDIpIElmIG5vIG1hdGNoLCByZXR1cm4gdGhlIG5hbWUKICAgICAgICAiIiIKICAgICAgICBpZiBub3QgYXV0aG9yX25hbWU6CiAgICAgICAgICAgIHJldHVybiBOb25lCgogICAgICAgIGlmIHNlbGYudXNlcl9tYXBfaGVscGVyOgogICAgICAgICAgICBnaXRodWJfbmFtZSA9IHNlbGYudXNlcl9tYXBfaGVscGVyLmdldF9naXRodWJfdXNlcigKICAgICAgICAgICAgICAgIGF1dGhvcl9uYW1lLCBpbmNsdWRlX2F0X3NpZ24pCiAgICAgICAgICAgIGlmIGdpdGh1Yl9uYW1lIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgcmV0dXJuIGdpdGh1Yl9uYW1lCiAgICAgICAgcmV0dXJuIGF1dGhvcl9uYW1lCgogICAgZGVmIGdldF9yZWRtaW5lX2Fzc2lnbmVlX25hbWUoc2VsZiwgcmVkbWluZV9pc3N1ZV9kaWN0KToKICAgICAgICAiIiIKICAgICAgICBJZiBhIHJlZG1pbmUgdXNlciBoYXMgYSBnaXRodWIgYWNjb3VudCBtYXBwZWQsIGFkZCB0aGUgcGVyc29uIGFzCiAgICAgICAgdGhlIGFzc2lnbmVlCgogICAgICAgICJhc3NpZ25lZF90byI6IHsKICAgICAgICAgICAgImlkIjogNCwKICAgICAgICAgICAgIm5hbWUiOiAiUGhpbGlwIER1cmJpbiIKICAgICAgICB9LAogICAgICAgIC9jYyBAa25lYXRoIEBqcmVzaWcKICAgICAgICAiIiIKICAgICAgICBpZiBub3QgdHlwZShyZWRtaW5lX2lzc3VlX2RpY3QpIGlzIGRpY3Q6CiAgICAgICAgICAgIHJldHVybiBOb25lCgogICAgICAgIHJlZG1pbmVfbmFtZSA9IHJlZG1pbmVfaXNzdWVfZGljdC5nZXQoJ2Fzc2lnbmVkX3RvJywge30pLmdldCgKICAgICAgICAgICAgJ25hbWUnLCBOb25lKQogICAgICAgIGlmIHJlZG1pbmVfbmFtZSBpcyBOb25lOgogICAgICAgICAgICByZXR1cm4gTm9uZQoKICAgICAgICByZXR1cm4gcmVkbWluZV9uYW1lCgogICAgZGVmIGdldF9hc3NpZ25lZShzZWxmLCByZWRtaW5lX2lzc3VlX2RpY3QpOgogICAgICAgICIiIgogICAgICAgIElmIGEgcmVkbWluZSB1c2VyIGhhcyBhIGdpdGh1YiBhY2NvdW50IG1hcHBlZCwgYWRkIHRoZSBwZXJzb24gYXMgdGhlCiAgICAgICAgYXNzaWduZWUKCiAgICAgICAgImFzc2lnbmVkX3RvIjogewogICAgICAgICAgICAiaWQiOiA0LAogICAgICAgICAgICAibmFtZSI6ICJQaGlsaXAgRHVyYmluIgogICAgICAgIH0sCiAgICAgICAgL2NjIEBrbmVhdGggQGpyZXNpZwogICAgICAgICIiIgogICAgICAgIGlmIG5vdCB0eXBlKHJlZG1pbmVfaXNzdWVfZGljdCkgaXMgZGljdDoKICAgICAgICAgICAgcmV0dXJuIE5vbmUKCiAgICAgICAgcmVkbWluZV9uYW1lID0gcmVkbWluZV9pc3N1ZV9kaWN0LmdldCgnYXNzaWduZWRfdG8nLCB7fSkuZ2V0KAogICAgICAgICAgICAnbmFtZScsIE5vbmUpCiAgICAgICAgaWYgcmVkbWluZV9uYW1lIGlzIE5vbmU6CiAgICAgICAgICAgIHJldHVybiBOb25lCgogICAgICAgIGdpdGh1Yl91c2VybmFtZSA9IHNlbGYuZm9ybWF0X25hbWVfZm9yX2dpdGh1YihyZWRtaW5lX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfYXRfc2lnbj1GYWxzZSkKCiAgICAgICAgcmV0dXJuIGdpdGh1Yl91c2VybmFtZQoKICAgICMgVE9ETzogc2VhcmNoIHJlZmVyZW5jZXMgaW4gZGVzY3JpcHRpb24gdGV4dCBhbmQgYWxzbyBjb3JyZWN0IHRoZW0KICAgIGRlZiB1cGRhdGVfZ2l0aHViX2lzc3VlX3dpdGhfcmVsYXRlZChzZWxmLCByZWRtaW5lX2pzb25fZm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkbWluZTJnaXRodWJfaXNzdWVfbWFwKToKICAgICAgICAiIiIKICAgICAgICBVcGRhdGUgYSBHaXRIdWIgaXNzdWUgd2l0aCByZWxhdGVkIHRpY2tldHMgYXMgc3BlY2ZpZWQgaW4gUmVkbWluZQoKICAgICAgICAtIFJlYWQgdGhlIGN1cnJlbnQgZ2l0aHViIGRlc2NyaXB0aW9uCiAgICAgICAgLSBBZGQgcmVsYXRlZCBub3RlcyB0byB0aGUgYm90dG9tIG9mIGRlc2NyaXB0aW9uCiAgICAgICAgLSBVcGRhdGUgdGhlIGRlc2NyaXB0aW9uCgogICAgICAgICJyZWxhdGlvbnMiOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAiZGVsYXkiOiBudWxsLAogICAgICAgICAgICAgICAgICAiaXNzdWVfdG9faWQiOiA0MTYwLAogICAgICAgICAgICAgICAgICAiaXNzdWVfaWQiOiA0MDYyLAogICAgICAgICAgICAgICAgICAiaWQiOiA0MzgsCiAgICAgICAgICAgICAgICAgICJyZWxhdGlvbl90eXBlIjogInJlbGF0ZXMiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICJkZWxheSI6IG51bGwsCiAgICAgICAgICAgICAgICAgICJpc3N1ZV90b19pZCI6IDM2NDMsCiAgICAgICAgICAgICAgICAgICJpc3N1ZV9pZCI6IDQxNjAsCiAgICAgICAgICAgICAgICAgICJpZCI6IDQzOSwKICAgICAgICAgICAgICAgICAgInJlbGF0aW9uX3R5cGUiOiAicmVsYXRlcyIKICAgICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgImlkIjogNDE2MCwKICAgICAgICAiIiIKICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUocmVkbWluZV9qc29uX2ZuYW1lKToKICAgICAgICAgICAgbXNneCgnRVJST1IuICB1cGRhdGVfZ2l0aHViX2lzc3VlX3dpdGhfcmVsYXRlZC4gZmlsZSBub3QgJwogICAgICAgICAgICAgICAgICdmb3VuZDogJXMnICUgcmVkbWluZV9qc29uX2ZuYW1lKQoKICAgICAgICAjIG1zZygnaXNzdWUgbWFwOiAlcycgJSByZWRtaW5lMmdpdGh1Yl9pc3N1ZV9tYXApCgogICAgICAgIGpzb25fc3RyID0gb3BlbihyZWRtaW5lX2pzb25fZm5hbWUsICdyVScpLnJlYWQoKQogICAgICAgIHJkID0ganNvbi5sb2Fkcyhqc29uX3N0cikgICAgICAgIyBUaGUgcmVkbWluZSBpc3N1ZSBhcyBhIHB5dGhvbiBkaWN0CiAgICAgICAgIyBtc2coJ3JkOiAlcycgJSByZCkKCiAgICAgICAgIyBpZiByZC5nZXQoJ3JlbGF0aW9ucycsIE5vbmUpIGlzIE5vbmU6CiAgICAgICAgIyAgICBtc2coJ25vIHJlbGF0aW9ucycpCiAgICAgICAgIyAgICByZXR1cm4KCiAgICAgICAgcmVkbWluZV9pc3N1ZV9udW0gPSByZC5nZXQoJ2lkJywgTm9uZSkKICAgICAgICBpZiByZWRtaW5lX2lzc3VlX251bSBpcyBOb25lOgogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgZ2l0aHViX2lzc3VlX251bSA9IHJlZG1pbmUyZ2l0aHViX2lzc3VlX21hcC5nZXQoCiAgICAgICAgICAgIHN0cihyZWRtaW5lX2lzc3VlX251bSksIE5vbmUpCiAgICAgICAgaWYgZ2l0aHViX2lzc3VlX251bSBpcyBOb25lOgogICAgICAgICAgICBtc2coJ1JlZG1pbmUgaXNzdWUgbm90IGluIG5hcCcpCiAgICAgICAgICAgIHJldHVybgoKICAgICAgICAjIFJlbGF0ZWQgdGlja2V0cyB1bmRlciAncmVsYXRpb25zJwogICAgICAgICMKICAgICAgICBnaXRodWJfcmVsYXRlZF90aWNrZXRzID0gW10KICAgICAgICBvcmlnaW5hbF9yZWxhdGVkX3RpY2tldHMgPSBbXQogICAgICAgIGlyZWxhdGlvbnMgPSByZC5nZXQoJ3JlbGF0aW9ucycsIE5vbmUpCiAgICAgICAgaWYgaXJlbGF0aW9ucyBpcyBub3QgTm9uZToKICAgICAgICAgICAgZm9yIHJlbCBpbiBpcmVsYXRpb25zOgogICAgICAgICAgICAgICAgaXNzdWVfdG9faWQgPSByZWwuZ2V0KCdpc3N1ZV90b19pZCcsIE5vbmUpCiAgICAgICAgICAgICAgICBpZiBpc3N1ZV90b19pZCBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBpZiByZC5nZXQoJ2lkJykgPT0gaXNzdWVfdG9faWQ6CiAgICAgICAgICAgICAgICAgICAgIyBza2lwIHJlbGF0aW9ucyBwb2ludGluZyB0byB0aGlzIHRpY2tldAogICAgICAgICAgICAgICAgICAgIGlzc3VlX3RvX2lkID0gcmVsLmdldCgnaXNzdWVfaWQnLCBOb25lKQoKICAgICAgICAgICAgICAgIG9yaWdpbmFsX3JlbGF0ZWRfdGlja2V0cy5hcHBlbmQoKGlzc3VlX3RvX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsLmdldCgncmVsYXRpb25fdHlwZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnKSkpCiAgICAgICAgICAgICAgICByZWxhdGVkX2dpdGh1Yl9pc3N1ZV9udW0gPSBcCiAgICAgICAgICAgICAgICAgICAgcmVkbWluZTJnaXRodWJfaXNzdWVfbWFwLmdldChzdHIoaXNzdWVfdG9faWQpLCBOb25lKQogICAgICAgICAgICAgICAgbXNnKHJlbGF0ZWRfZ2l0aHViX2lzc3VlX251bSkKICAgICAgICAgICAgICAgIGlmIHJlbGF0ZWRfZ2l0aHViX2lzc3VlX251bToKICAgICAgICAgICAgICAgICAgICBnaXRodWJfcmVsYXRlZF90aWNrZXRzLmFwcGVuZCgocmVsYXRlZF9naXRodWJfaXNzdWVfbnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWwuZ2V0KCdyZWxhdGlvbl90eXBlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJykpKQoKICAgICAgICBnaXRodWJfcmVsYXRlZF90aWNrZXRzLnNvcnQoa2V5PWxhbWJkYSB0dXA6IHR1cFswXSkKICAgICAgICBvcmlnaW5hbF9yZWxhdGVkX3RpY2tldHMuc29ydChrZXk9bGFtYmRhIHR1cDogdHVwWzBdKQogICAgICAgICMKICAgICAgICAjIGVuZDogUmVsYXRlZCB0aWNrZXRzIHVuZGVyICdyZWxhdGlvbnMnCgogICAgICAgICMgUmVsYXRlZCB0aWNrZXRzIHVuZGVyICdjaGlsZHJlbicKICAgICAgICAjCiAgICAgICAgIyAiY2hpbGRyZW4iOiBbeyAidHJhY2tlciI6IHsiaWQiOiAyLCAibmFtZSI6ICJGZWF0dXJlIiAgICB9LAogICAgICAgICMgImlkIjogMzQ1NCwgInN1YmplY3QiOiAiSWNvbnMgaW4gcmVzdWx0cyBhbmQgZmFjZXQiICAgIH0sIC4uLl0KICAgICAgICAjCiAgICAgICAgZ2l0aHViX2NoaWxkX3RpY2tldHMgPSBbXQogICAgICAgIG9yaWdpbmFsX2NoaWxkX3RpY2tldHMgPSBbXQoKICAgICAgICBjaGlsZF90aWNrZXRfaW5mbyA9IHJkLmdldCgnY2hpbGRyZW4nLCBbXSkKICAgICAgICBpZiBjaGlsZF90aWNrZXRfaW5mbzoKICAgICAgICAgICAgZm9yIGN0aWNrIGluIGNoaWxkX3RpY2tldF9pbmZvOgoKICAgICAgICAgICAgICAgIGNoaWxkX2lkID0gY3RpY2suZ2V0KCdpZCcsIE5vbmUpCiAgICAgICAgICAgICAgICBpZiBjaGlsZF9pZCBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAgICAgb3JpZ2luYWxfY2hpbGRfdGlja2V0cy5hcHBlbmQoY2hpbGRfaWQpCiAgICAgICAgICAgICAgICBjaGlsZF9naXRodWJfaXNzdWVfbnVtID0gcmVkbWluZTJnaXRodWJfaXNzdWVfbWFwLmdldCgKICAgICAgICAgICAgICAgICAgICBzdHIoY2hpbGRfaWQpLCBOb25lKQoKICAgICAgICAgICAgICAgIG1zZyhjaGlsZF9naXRodWJfaXNzdWVfbnVtKQogICAgICAgICAgICAgICAgaWYgY2hpbGRfZ2l0aHViX2lzc3VlX251bToKICAgICAgICAgICAgICAgICAgICBnaXRodWJfY2hpbGRfdGlja2V0cy5hcHBlbmQoY2hpbGRfZ2l0aHViX2lzc3VlX251bSkKICAgICAgICAgICAgb3JpZ2luYWxfY2hpbGRfdGlja2V0cy5zb3J0KCkKICAgICAgICAgICAgZ2l0aHViX2NoaWxkX3RpY2tldHMuc29ydCgpCiAgICAgICAgIwogICAgICAgICMgZW5kOiBSZWxhdGVkIHRpY2tldHMgdW5kZXIgJ2NoaWxkcmVuJwoKICAgICAgICB1cGRhdGVfaXNzdWUgPSBGYWxzZQogICAgICAgIHRyeToKICAgICAgICAgICAgaXNzdWUgPSBzZWxmLmdldF9naXRodWJfY29ubigpLmlzc3Vlcy5nZXQobnVtYmVyPWdpdGh1Yl9pc3N1ZV9udW0pCiAgICAgICAgICAgICMgdGltZS5zbGVlcCgxKQogICAgICAgICAgICB0aW1lLnNsZWVwKDAuNSkKICAgICAgICAgICAgdXBkYXRlZF9kZXNjcmlwdGlvbiwgdXBkYXRlX2lzc3VlID0gXAogICAgICAgICAgICAgICAgc2VsZi5maXhfaXNzdWVfcmVmZXJlbmNlcyhpc3N1ZS5ib2R5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRtaW5lMmdpdGh1Yl9pc3N1ZV9tYXApCiAgICAgICAgICAgIGlmIGlzc3VlLmNvbW1lbnRzID4gMDoKICAgICAgICAgICAgICAgIGNvbW1lbnRzID0gc2VsZi5nZXRfZ2l0aHViX2Nvbm4oKS5pc3N1ZXMuY29tbWVudHMubGlzdCgKICAgICAgICAgICAgICAgICAgICBudW1iZXI9Z2l0aHViX2lzc3VlX251bSkKICAgICAgICAgICAgICAgICMgdGltZS5zbGVlcCgxKQogICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjUpCiAgICAgICAgICAgICAgICBmb3IgcGFnZSBpbiBjb21tZW50czoKICAgICAgICAgICAgICAgICAgICBmb3IgY29tbSBpbiBwYWdlOgogICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkX2Nib2R5LCBkaWRfbWF0Y2ggPSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpeF9pc3N1ZV9yZWZlcmVuY2VzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW0uYm9keSwgcmVkbWluZTJnaXRodWJfaXNzdWVfbWFwKQogICAgICAgICAgICAgICAgICAgICAgICBpZiBkaWRfbWF0Y2ggaXMgVHJ1ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0X2dpdGh1Yl9jb25uKCkuaXNzdWVzLmNvbW1lbnRzLnVwZGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1jb21tLmlkLCBtZXNzYWdlPXVwZGF0ZWRfY2JvZHkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2coJ0NvbW1lbnQgdXBkYXRlZCEnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aW1lLnNsZWVwKDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuNSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGV4Y2VwdCBweWdpdGh1YjMuZXhjZXB0aW9ucy5Ob3RGb3VuZDoKICAgICAgICAgICAgbXNnKCdJc3N1ZSBub3QgZm91bmQhJykKICAgICAgICAgICAgcmV0dXJuCgo8fGZpbV9lbmR8Pg=="]
["79ab6d5a72714da43c0ca41aaff02e2e30ab141f-1","79ab6d5a72714da43c0ca41aaff02e2e30ab141f","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgpmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IGNyZWF0ZV9lbmdpbmUKZnJvbSBzcWxhbGNoZW15LmV4dC5kZWNsYXJhdGl2ZSBpbXBvcnQgZGVjbGFyYXRpdmVfYmFzZQpmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IENvbHVtbiwgSW50ZWdlciwgU3RyaW5nLCBEYXRlVGltZSwgRW51bQpmcm9tIHNxbGFsY2hlbXkub3JtIGltcG9ydCBzZXNzaW9ubWFrZXIKCmVuZ2luZSA9IGNyZWF0ZV9lbmdpbmUoJ215c3FsK3B5bXlzcWw6Ly91c2VyMToxMjM0NTZAbG9jYWxob3N0L3B5X3Rlc3QnLCBlY2hvPVRydWUpCkJhc2UgPSBkZWNsYXJhdGl2ZV9iYXNlKCkKCgpjbGFzcyBDdXN0b21lcihCYXNlKToKICAgIF9fdGFibGVuYW1lX18gPSAnY3VzdG9tZXInCjx8ZmltX2hvbGV8PgoKCkJhc2UubWV0YWRhdGEuY3JlYXRlX2FsbChlbmdpbmUpCgpkYl9zZXNzaW9uID0gc2Vzc2lvbm1ha2VyKGJpbmQ9ZW5naW5lKQpzZXNzaW9uID0gZGJfc2Vzc2lvbigpCgoKZGVmIGFkZF9kYXRhKCk6CiAgICBkYXRhMSA9IEN1c3RvbWVyKG5hbWU9J0ZvcmQnLCBiaXJ0aD0nMTk2My03LTMwJywgdmlwPScxJykKICAgIGRhdGEyID0gW0N1c3RvbWVyKG5hbWU9J0VsbGVuJywgYmlydGg9JzE5OTgtMS0yNicsIHZpcD0nMScpLCBDdXN0b21lcihuYW1lPSdaYWNrJywgYmlydGg9JzE5ODUtMTAtMTUnLCB2aXA9JzAnKV0KICAgIHNlc3Npb24uYWRkKGRhdGExKQogICAgc2Vzc2lvbi5hZGRfYWxsKGRhdGEyKQogICAgc2Vzc2lvbi5jb21taXQoKQoKCmRlZiB1cGRhdGVfZGF0YSgpOgogICAgc2Vzc2lvbi5xdWVyeShDdXN0b21lcikuZmlsdGVyX2J5KGlkPTEpLnVwZGF0ZSh7Q3VzdG9tZXIudmlwOiAnMCd9KQogICAgIyBnZXRfZGF0YSA9IHNlc3Npb24ucXVlcnkoQ3VzdG9tZXIpLmZpbHRlcl9ieShpZD0xKS5maXJzdCgpCiAgICAjIGdldF9kYXRhLnZpcCA9ICcwJwogICAgc2Vzc2lvbi5jb21taXQoKQoKCmRlZiBkZWxfZGF0YSgpOgogICAgZGVsX2NvdW50ID0gc2Vzc2lvbi5xdWVyeShDdXN0b21lcikuZmlsdGVyX2J5KGlkPTMpLmRlbGV0ZSgpCiAgICBzZXNzaW9uLmNvbW1pdCgpCiAgICBwcmludChmJ+W3suWIoOmZpHtkZWxfY291bnR95p2h5pWw5o2uJykKCgpkZWYgZmV0Y2hfZGF0YSgpOgogICAgcmVzdWx0cyA9IHNlc3Npb24ucXVlcnkoQ3VzdG9tZXIubmFtZSwgQ3VzdG9tZXIuYmlydGgpLmZpbHRlcihDdXN0b21lci5pZCA8IDEwLCBDdXN0b21lci52aXAgPT0gJzEnKS5hbGwoKQogICAgIyBmaWx0ZXJfYnnlj6rmjqXlj5fplK7lgLzlr7nlj4LmlbDvvIzlj6rpgILnlKjkuo7ljZXooajmn6Xor6IKICAgICMgcmVzdWx0cyA9IHNlc3Npb24ucXVlcnkoQ3VzdG9tZXIubmFtZSwgQ3VzdG9tZXIuYmlydGgpLmZpbHRlcl9ieSh2aXA9JzEnKS5hbGwoKQogICAgIyDlj6/ku6Xnm7TmjqXmiafooYxTUUzor63lj6UKICAgICMgcmVzdWx0cyA9IHNlc3Npb24uZXhlY3V0ZSgic2VsZWN0IG5hbWUsYmlydGggZnJvbSBjdXN0b21lciB3aGVyZSBpZDwxMCBhbmQgdmlwPScxJyIpCiAgICBmb3Igcm93IGluIHJlc3VsdHM6CiAgICAgICAgcHJpbnQocm93Lm5hbWUsIHJvdy5iaXJ0aC5zdHJmdGltZSgnJVktJW0tJWQnKSkKCgphZGRfZGF0YSgpCnVwZGF0ZV9kYXRhKCkKZGVsX2RhdGEoKQpmZXRjaF9kYXRhKCkKc2Vzc2lvbi5jbG9zZSgpCjx8ZmltX3N1ZmZpeHw+CiAgICBpZCA9IENvbHVtbihJbnRlZ2VyLCBwcmltYXJ5X2tleT1UcnVlKQogICAgbmFtZSA9IENvbHVtbihTdHJpbmcoNTApKQogICAgYmlydGggPSBDb2x1bW4oRGF0ZVRpbWUpCiAgICB2aXAgPSBDb2x1bW4oRW51bSgnMCcsICcxJykpCjx8ZmltX2VuZHw+"]
["ebd263b02df5d0797ae768f187b5a73a85def563-2","ebd263b02df5d0797ae768f187b5a73a85def563","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBpdGVydG9vbHMKaW1wb3J0IG11bHRpcHJvY2Vzc2luZwppbXBvcnQgb3MKaW1wb3J0IHBwcmludAppbXBvcnQgcmUKaW1wb3J0IHN1YnByb2Nlc3MKCmltcG9ydCBwYW5kYXMgYXMgcGQKCmRlZiBnZXRfZmlsZXMoZGlybmFtZSk6CiAgICBmYXN0YXMgPSAgb3MubGlzdGRpcihkaXJuYW1lKQogICAgcmV0dXJuIFtvcy5wYXRoLmpvaW4oZGlybmFtZSwgZikgZm9yIGYgaW4gZmFzdGFzXQoKZGVmIGdlbmVyYWxfbmFtZV9mcm9tX3BhdGgoZmFzdGEpOgogICAgZ2VuZXJhbF9uYW1lID0gcmUuc3ViKCdfZ3JvdXBbLl8wLTlmYXN0YV0rJywgJycsIG9zLnBhdGguYmFzZW5hbWUoZmFzdGEpKSAKICAgIHJldHVybiBnZW5lcmFsX25hbWUKICAgIApkZWYgcnVuX3Byb2trYShmYXN0YSwgdGhyZWFkcyk6CiAgICBmbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZmFzdGEpCiAgICBnZW5lcmFsX25hbWUgPSBnZW5lcmFsX25hbWVfZnJvbV9wYXRoKGZhc3RhKSAjcmUuc3ViKCdfZ3JvdXBbLl8wLTlmYXN0YV0rJywgJycsIGZuYW1lKQogICAgY29udGlnc19uYW1lID0gcmUuc3ViKCcuZmFbc3RhXSonLCAnJywgZm5hbWUpCgogICAgcHJpbnQoJ2dlbmVyYWxfbmFtZToge30nLmZvcm1hdChnZW5lcmFsX25hbWUpKQogICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGdlbmVyYWxfbmFtZSk6CiAgICAgICAgb3MubWtkaXIoZ2VuZXJhbF9uYW1lKQogICAgZGlybmFtZSA9IG9zLnBhdGguam9pbihnZW5lcmFsX25hbWUsIGNvbnRpZ3NfbmFtZSkKCiAgICBwcmludCgnZGlybmFtZToge30nLmZvcm1hdChkaXJuYW1lKSkKICAgICMgbWFrZSBhIGRpciBpbiB0aGlzIHByb2trYSBwbGFjZSBmb3IgdGhlIGFubm90YXRpb25zCiAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGlybmFtZSk6CiAgICAgICAgb3MubWtkaXIoZGlybmFtZSkKCiAgICBzdGRvdXRfcGF0aCA9ICBvcy5wYXRoLmpvaW4oZGlybmFtZSwgJ3Byb2trYS5vdXQnKQogICAgc3Rkb3V0ID0gb3BlbihzdGRvdXRfcGF0aCwgJ3cnKSAKICAgIHN0ZGVycl9wYXRoID0gIG9zLnBhdGguam9pbihkaXJuYW1lLCAncHJva2thLmVycicpCiAgICBzdGRlcnIgPSBvcGVuKHN0ZGVycl9wYXRoLCAndycpIAoKICAgIGNtZCA9IFsncHJva2thJywgZmFzdGEsICctLWZvcmNlJywgJ09OJywgCiAgICAgICAgICAgICctLWxvY3VzdGFnJywgZ2VuZXJhbF9uYW1lLCAnLS1nZW51cycsIGdlbmVyYWxfbmFtZSwgCiAgICAgICAgICAgICctLXNwZWNpZXMnLCBnZW5lcmFsX25hbWUsICctLXN0cmFpbicsIGdlbmVyYWxfbmFtZSwgCiAgICAgICAgICAgICctLW91dGRpcicsIGRpcm5hbWUsCiAgICAgICAgICAgICctLW1ldGFnZW5vbWUnLCAnT04nLCAnLS1jcHVzJywgdGhyZWFkc10KICAgIHByaW50KCctLS0tLSBjb21tYW5kIHRvIHJ1biAtLS0tLS0tJykKICAgIGNvbW1hbmRfc3RyaW5nID0gJyAnLmpvaW4oW3N0cihzKSBmb3IgcyBpbiBjbWRdKQogICAgcHJpbnQoJ3J1biBjb21tYW5kOlxue30nLmZvcm1hdChjb21tYW5kX3N0cmluZykpCiAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoY21kLCBzdGRvdXQ9c3Rkb3V0LCBzdGRlcnI9c3RkZXJyKQoKICAgIHN0ZG91dC5jbG9zZSgpCiAgICBzdGRlcnIuY2xvc2UoKQogICAgCmRlZiB0ZXN0X2NhbGwoeCk6CiAgICAjc3VicHJvY2Vzcy5jYWxsKFsnZWNobycsICd4JywgJzsnLCAnZWNobycsIHhdKQogICAgY21kID0gWydlY2hvJywgeF0KICAgIHByaW50KCcgJy5qb2luKGNtZCkpCiAgICBzdWJwcm9jZXNzLmNhbGwoY21kKQoKZGVmIHJ1bl9hbGwoc291cmNlX2NvbnRpZ19kaXIsIHRocmVhZHNfcGVyX3Byb2trYSk6CiAgICAjIHByaW50IAogICAgZmFzdGFzID0gb3MubGlzdGRpcihzb3VyY2VfY29udGlnX2RpcikKICAgIGZhc3RhcyA9IFtvcy5wYXRoLmpvaW4oc291cmNlX2NvbnRpZ19kaXIsIGYpIGZvciBmIGluIGZhc3Rhc10KICAgIGZhc3RhcyA9IFtvcy5wYXRoLmFic3BhdGgoZikgZm9yIGYgaW4gZmFzdGFzXQogICAgcHByaW50LnBwcmludCgiZmFzdGFzIGZvdW5kIGF0IHt9OiB7fSIuZm9ybWF0KHNvdXJjZV9jb250aWdfZGlyLCBmYXN0YXMpKQogICAgY291bnQgPSBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50KCkKICAgIHByaW50KCd5b3UgaGF2ZSB7fSBjcHVzIHRvIHdvcmsgd2l0aCwgYW5kIHdhbnQge30gdGhyZWFkcyBwZXIgcHJva2thIGNhbGwnLmZvcm1hdCgKICAgICAgICBjb3VudCwgdGhyZWFkc19wZXJfcHJva2thKSkKICAgIHByb2Nlc3NlcyA9IG1pbihjb3VudCAvLyB0aHJlYWRzX3Blcl9wcm9ra2EsIGxlbihmYXN0YXMpKQogICAgcHJpbnQoJ3VzZSB7fSBwb29sLm1hcCBwcm9jZXNzZXMnLmZvcm1hdChwcm9jZXNzZXMpKQogICAgCiAgICBnZW5lcmFsX25hbWUgPSBnZW5lcmFsX25hbWVfZnJvbV9wYXRoKGZhc3Rhc1swXSkKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhnZW5lcmFsX25hbWUpOgogICAgICAgIG9zLm1rZGlyKGdlbmVyYWxfbmFtZSkKCiAgICBwb29sID0gbXVsdGlwcm9jZXNzaW5nLlBvb2wocHJvY2Vzc2VzPXByb2Nlc3NlcykKICAgICNwb29sLm1hcCh0ZXN0X2NhbGwsIFsnYScsICdiJywgJ2MnXSkKICAgICNwb29sLm1hcCh0ZXN0X2NhbGwsIGZhc3RhcykKICAgICNwb29sLm1hcChydW5fcHJva2thLCBmYXN0YXMpCiAgICBwcm9jZXNzZXMgPSBpdGVydG9vbHMucmVwZWF0KHN0cihwcm9jZXNzZXMpKQogICAgYXJncyA9IGxpc3QoemlwKGZhc3RhcywgcHJvY2Vzc2VzKSkKICAgIHBwcmludC5wcHJpbnQoYXJncykKICAgIHBvb2wuc3Rhcm1hcChydW5fcHJva2thLCBhcmdzKQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoInJlZl9mb2xkZXIiLCBoZWxwPSJmb2xkZXIgY29udGFpbmluZyBmYXN0YXMgdG8gYW5ub3RhdGUgd2l0aCBQcm9ra2EiKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgidGhyZWFkc19wZXJfcnVuIiwgdHlwZT1pbnQsIGhlbHA9Im51bWJlciBvZiB0aHJlYWRzIGZvciBlYWNoIHByb2trYSBjYWxsIikKICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCiAgICBpZiBhcmdzLnJlZl9mb2xkZXIgaXMgTm9uZToKICAgICAgICBhcmdzLnByaW50X2hlbHAoKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBlbHNlOiAKICAgICAgICAjcHJpbnQoJ3ByZXBhcmUgY29tbWFuZHMgZm9yIGZhc3RhIGZpbGVzIGluIHt9Jy5mb3JtYXQoYXJncy5yZWZfZm9sZGVyKSkKICAgICAgICAjcHJlcGFyZV9jb21tYW5kcyhhcmdzLnJlZl9mb2xkZXIsIGFyZ3MudGhyZWFkc19wZXJfcnVuKQogICAgICAgIHJ1bl9hbGwoYXJncy5yZWZfZm9sZGVyLCBhcmdzLnRocmVhZHNfcGVyX3J1bikKPHxmaW1fZW5kfD4="]
["7972783ebdd1047d5b6c3b96a4d5333b4ccf610c-2","7972783ebdd1047d5b6c3b96a4d5333b4ccf610c","PHxmaW1fcHJlZml4fD4KIyB0aGlzIHByb2plY3QgaXMgbGljZW5zZWQgdW5kZXIgdGhlIFdURlBMdjIsIHNlZSBDT1BZSU5HLnd0ZnBsIGZvciBkZXRhaWxzCgpmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IEVtYWlsTWVzc2FnZQppbXBvcnQgbG9nZ2luZwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cgpmcm9tIGxpZXJyZS51dGlscy5kYl9vcHMgaW1wb3J0IG9wZW5fZGJfcncKZnJvbSBsaWVycmUudXRpbHMubWFpbGRpcl9vcHMgaW1wb3J0IE1haWxkaXJQUApmcm9tIGxpZXJyZS5jaGFuZ2Vfd2F0Y2hlciBpbXBvcnQgV0FUQ0hFUgo8fGZpbV9lbmR8Pg=="]
["74201ac8d57534bb04e98e1885bda35d510fdbe9-2","74201ac8d57534bb04e98e1885bda35d510fdbe9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGluc3RhbmNlX3JvbGUKZnJvbSBqb2JzIGltcG9ydCBMT0dfTk9USUZJQ0FUSU9OX0pPQl9TVEFUVVNFUwppbXBvcnQgcmVzb3VyY2VzCmltcG9ydCB0YWdzCmltcG9ydCB2b2x1bWVzCgpBUFBTX0RFRkFVTFQgPSB7CiAgICAnbW9kdWxlcy5zb3VyY2UubW9kZSc6ICdzeW1saW5rJywKICAgICdtb2R1bGVzLnNvdXJjZS5wcm90b2NvbCc6ICdnaXQnLAp9CgphcHBzX3NjaGVtYSA9IHsKICAgICduYW1lJzogewogICAgICAgICd0eXBlJzogJ3N0cmluZycsCiAgICAgICAgJ3JlZ2V4JzogJ15bYS16QS1aMC05Xy4rLV0qJCcsCiAgICAgICAgJ3JlcXVpcmVkJzogVHJ1ZQogICAgfSwKICAgICdlbnYnOiB7CiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJywKICAgICAgICAncmVnZXgnOiAnXlthLXowLTlcLVxfXSokJywKICAgICAgICAncmVxdWlyZWQnOiBUcnVlCiAgICB9LAogICAgJ3JvbGUnOiB7CiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJywKICAgICAgICAncmVnZXgnOiAnXlthLXowLTlcLVxfXSokJywKICAgICAgICAncmVxdWlyZWQnOiBUcnVlCiAgICB9LAogICAgJ2Rlc2NyaXB0aW9uJzogewogICAgICAgICd0eXBlJzogJ3N0cmluZycsCiAgICAgICAgJ3JlcXVpcmVkJzogRmFsc2UKICAgIH0sCiAgICAnYXNzdW1lZF9hY2NvdW50X2lkJzogewogICAgICAgICd0eXBlJzogJ3N0cmluZycsCiAgICAgICAgJ3JlZ2V4JzogJ15bYS16QS1aMC05Xy4rLV0qJCcsCiAgICAgICAgJ3JlcXVpcmVkJzogRmFsc2UKICAgIH0sCiAgICAnYXNzdW1lZF9yb2xlX25hbWUnOiB7CiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJywKICAgICAgICAncmVnZXgnOiAnXlthLXpBLVowLTlfListXSokJywKICAgICAgICAncmVxdWlyZWQnOiBGYWxzZQogICAgfSwKICAgICdhc3N1bWVkX3JlZ2lvbl9uYW1lJzogewogICAgICAgICd0eXBlJzogJ3N0cmluZycsCiAgICAgICAgJ3JlZ2V4JzogJ15bYS16QS1aMC05Xy4rLV0qJCcsCiAgICAgICAgJ3JlcXVpcmVkJzogRmFsc2UKICAgIH0sCiAgICAncmVnaW9uJzogeyd0eXBlJzogJ3N0cmluZyd9LAogICAgJ2luc3RhbmNlX3R5cGUnOiB7J3R5cGUnOiAnc3RyaW5nJ30sCiAgICAnaW5zdGFuY2VfbW9uaXRvcmluZycgOiB7J3R5cGUnOiAnYm9vbGVhbicsICdyZXF1aXJlZCc6IEZhbHNlfSwKICAgICdsaWZlY3ljbGVfaG9va3MnOiB7CiAgICAgICAgJ3R5cGUnOiAnZGljdCcsCiAgICAgICAgJ3NjaGVtYSc6IHsKICAgICAgICAgICAgJ3ByZV9idWlsZGltYWdlJzogeyd0eXBlJzogJ3N0cmluZyd9LAogICAgICAgICAgICAncG9zdF9idWlsZGltYWdlJzogeyd0eXBlJzogJ3N0cmluZyd9LAogICAgICAgICAgICAncHJlX2Jvb3RzdHJhcCc6IHsndHlwZSc6ICdzdHJpbmcnfSwKICAgICAgICAgICAgJ3Bvc3RfYm9vdHN0cmFwJzogeyd0eXBlJzogJ3N0cmluZyd9LAogICAgICAgIH0KICAgIH0sCiAgICAnYmx1ZV9ncmVlbic6IHsKICAgICAgICAndHlwZSc6ICdkaWN0JywKICAgICAgICAnc2NoZW1hJzogewogICAgICAgICAgICAnZW5hYmxlX2JsdWVfZ3JlZW4nOiB7J3R5cGUnOiAnYm9vbGVhbicsICdyZXF1aXJlZCc6IEZhbHNlfSwKICAgICAgICAgICAgJ2hvb2tzJzogewogICAgICAgICAgICAgICAgJ3R5cGUnOiAnZGljdCcsCiAgICAgICAgICAgICAgICAnc2NoZW1hJzogewogICAgICAgICAgICAgICAgICAgICdwcmVfc3dhcCc6IHsndHlwZSc6ICdzdHJpbmcnfSwKICAgICAgICAgICAgICAgICAgICAncG9zdF9zd2FwJzogeyd0eXBlJzogJ3N0cmluZyd9LAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAnY29sb3InOiB7J3R5cGUnOiAnc3RyaW5nJywgJ2FsbG93ZWQnOiBbJ2JsdWUnLCAnZ3JlZW4nXSwgJ3JlcXVpcmVkJzogRmFsc2V9LAogICAgICAgICAgICAnaXNfb25saW5lJzogeyd0eXBlJzogJ2Jvb2xlYW4nLCAncmVxdWlyZWQnOiBGYWxzZX0sCiAgICAgICAgICAgICdhbHRlcl9lZ29faWQnOiB7CiAgICAgICAgICAgICAgICAncmVhZG9ubHknOiBUcnVlLAogICAgICAgICAgICAgICAgJ3R5cGUnOiAnb2JqZWN0aWQnLAogICAgICAgICAgICAgICAgJ2RhdGFfcmVsYXRpb24nOiB7CiAgICAgICAgICAgICAgICAgICAgJ3Jlc291cmNlJzogJ2FwcHMnLAogICAgICAgICAgICAgICAgICAgICdmaWVsZCc6ICdfaWQnLAogICAgICAgICAgICAgICAgICAgICdlbWJlZGRhYmxlJzogRmFsc2UKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sCiAgICAnZmVhdHVyZXMnOiB7CiAgICAgICAgJ3R5cGUnOiAnbGlzdCcsCiAgICAgICAgJ3NjaGVtYSc6IHsKICAgICAgICAgICAgJ3R5cGUnOiAnZGljdCcsCiAgICAgICAgICAgICdzY2hlbWEnOiB7CiAgICAgICAgICAgICAgICAnbmFtZSc6IHsKICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdzdHJpbmcnLAogICAgICAgICAgICAgICAgICAgICdyZWdleCc6ICdeW2EtekEtWjAtOVwuXC1cX10qJCcsCiAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVkJzogVHJ1ZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICd2ZXJzaW9uJzogewogICAgICAgICAgICAgICAgICAgICd0eXBlJzogJ3N0cmluZycsCiAgICAgICAgICAgICAgICAgICAgJ3JlZ2V4JzogJ15bYS16QS1aMC05XC5cLVxfXC86flwrPVwsXSokJywKICAgICAgICAgICAgICAgICAgICAncmVxdWlyZWQnOiBGYWxzZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdwcm92aXNpb25lcic6IHsKICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdzdHJpbmcnLAogICAgICAgICAgICAgICAgICAgICdyZWdleCc6ICdeW2EtekEtWjAtOV0qJCcsCiAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVkJzogRmFsc2UKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAncGFyYW1ldGVycyc6IHsKICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdkaWN0JywKICAgICAgICAgICAgICAgICAgICAnYWxsb3dfdW5rbm93bic6IFRydWUsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9LAogICAgJ2Vudl92YXJzJzogewogICAgICAgICd0eXBlJzogJ2xpc3QnLAogICAgICAgICdzY2hlbWEnOiB7CiAgICAgICAgICAgICd0eXBlJzogJ2RpY3QnLAogICAgICAgICAgICAnc2NoZW1hJzogewogICAgICAgICAgICAgICAgJ3Zhcl9rZXknOiB7CiAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJywKICAgICAgICAgICAgICAgICAgICAncmVnZXgnOiAnXig/IUdIT1NUfGdob3N0KVthLXpBLVpfXStbYS16QS1aMC05X10qJCcsCiAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVkJzogRmFsc2UKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAndmFyX3ZhbHVlJzogewogICAgICAgICAgICAgICAgICAgICd0eXBlJzogJ3N0cmluZycsCiAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVkJzogRmFsc2UKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sCiAgICAnYW1pJzogeyd0eXBlJzogJ3N0cmluZycsCiAgICAgICAgICAgICdyZWdleCc6ICdeYW1pLVthLXowLTldKiQnLAogICAgICAgICAgICAncmVhZG9ubHknOiBUcnVlfSwKICAgICd2cGNfaWQnOiB7CiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJywKICAgICAgICAncmVnZXgnOiAnXnZwYy1bYS16MC05XSokJywKICAgICAgICAncmVxdWlyZWQnOiBUcnVlCiAgICB9LAogICAgJ21vZHVsZXMnOiB7CiAgICAgICAgJ3R5cGUnOiAnbGlzdCcsCiAgICAgICAgJ3NjaGVtYSc6IHsKICAgICAgICAgICAgJ3R5cGUnOiAnZGljdCcsCiAgICAgICAgICAgICdzY2hlbWEnOiB7CiAgICAgICAgICAgICAgICAnaW5pdGlhbGl6ZWQnOiB7J3R5cGUnOiAnYm9vbGVhbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlYWRvbmx5JzogVHJ1ZX0sCiAgICAgICAgICAgICAgICAnbmFtZSc6IHsndHlwZSc6ICdzdHJpbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ3JlZ2V4JzogJ15bYS16QS1aMC05XC5cLVxfXSokJywKICAgICAgICAgICAgICAgICAgICAgICAgICdyZXF1aXJlZCc6IFRydWV9LAogICAgICAgICAgICAgICAgJ3NvdXJjZSc6IHsKICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdkaWN0JywKICAgICAgICAgICAgICAgICAgICAnc2NoZW1hJzogewogICAgICAgICAgICAgICAgICAgICAgICAncHJvdG9jb2wnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdzdHJpbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVkJzogRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmYXVsdCc6IEFQUFNfREVGQVVMVFsnbW9kdWxlcy5zb3VyY2UucHJvdG9jb2wnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGxvd2VkJzogWydnaXQnLCAnczMnXSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogJ3N0cmluZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZWQnOiBGYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgJ21vZGUnOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdzdHJpbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVkJzogRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmYXVsdCc6IEFQUFNfREVGQVVMVFsnbW9kdWxlcy5zb3VyY2UubW9kZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsbG93ZWQnOiBbJ3N5bWxpbmsnXSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdnaXRfcmVwbyc6IHsndHlwZSc6ICdzdHJpbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXF1aXJlZCc6IEZhbHNlfSwKICAgICAgICAgICAgICAgICdzY29wZSc6IHsKICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdzdHJpbmcnLAogICAgICAgICAgICAgICAgICAgICdyZXF1aXJlZCc6IFRydWUsCiAgICAgICAgICAgICAgICAgICAgJ2FsbG93ZWQnOiBbJ3N5c3RlbScsICdjb2RlJ10KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAndWlkJzogeyd0eXBlJzogJ2ludGVnZXInLCAnbWluJzogMH0sCiAgICAgICAgICAgICAgICAnZ2lkJzogeyd0eXBlJzogJ2ludGVnZXInLCAnbWluJzogMH0sCiAgICAgICAgICAgICAgICAnYnVpbGRfcGFjayc6IHsndHlwZSc6ICdzdHJpbmcnfSwKICAgICAgICAgICAgICAgICdwcmVfZGVwbG95Jzogeyd0eXBlJzogJ3N0cmluZyd9LAogICAgICAgICAgICAgICAgJ3Bvc3RfZGVwbG95Jzogeyd0eXBlJzogJ3N0cmluZyd9LAogICAgICAgICAgICAgICAgJ2FmdGVyX2FsbF9kZXBsb3knOiB7J3R5cGUnOiAnc3RyaW5nJ30sCiAgICAgICAgICAgICAgICAncGF0aCc6IHsndHlwZSc6ICdzdHJpbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ3JlZ2V4JzogJ14oL1thLXpBLVowLTlcLlwtXF9dKykrJCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZWQnOiBUcnVlfSwKICAgICAgICAgICAgICAgICdsYXN0X2RlcGxveW1lbnQnOiB7CiAgICAgICAgICAgICAgICAgICAgJ3JlYWRvbmx5JzogVHJ1ZSwKICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdvYmplY3RpZCcsCiAgICAgICAgICAgICAgICAgICAgJ2RhdGFfcmVsYXRpb24nOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICdyZXNvdXJjZSc6ICdkZXBsb3ltZW50cycsCiAgICAgICAgICAgICAgICAgICAgICAgICdmaWVsZCc6ICdfaWQnLAogICAgICAgICAgICAgICAgICAgICAgICAnZW1iZWRkYWJsZSc6IFRydWUKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9LAogICAgJ2xvZ19ub3RpZmljYXRpb25zJzogewogICAgICAgICd0eXBlJzogJ2xpc3QnLAogICAgICAgICdjb2VyY2UnOiBsYW1iZGEgbDogW3snZW1haWwnOiB2LCAnam9iX3N0YXRlcyc6IFsnKiddfSBpZiBpc2luc3RhbmNlKHYsIGJhc2VzdHJpbmcpIGVsc2UgdiBmb3IgdiBpbiBsXSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICdzY2hlbWEnOiB7CiAgICAgICAgICAgICd0eXBlJzogJ2RpY3QnLAogICAgICAgICAgICAnc2NoZW1hJzogewogICAgICAgICAgICAgICAgJ2VtYWlsJzogewo8fGZpbV9lbmR8Pg=="]
["564e9fe19f5c50ed51d5f6cf41595f2e6bad1a63-2","564e9fe19f5c50ed51d5f6cf41595f2e6bad1a63","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKCgpsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuSU5GTykKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbG9nZ2VyLmluZm8oIkRvbmUuIikKICAgIHBhc3MKPHxmaW1fZW5kfD4="]
["ccf7260196bed53761a3886dd7226c1fe670601c-5","ccf7260196bed53761a3886dd7226c1fe670601c","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyA9ICdSYW5kYWxsJwppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgc2NpcHkgYXMgc3AKZnJvbSBjb21wZWNvbi50b29scyBpbXBvcnQgdGljLCB0b2MsIE9wdGlvbnNfQ29udGFpbmVyLCBtYXJrb3YKZnJvbSBzY2lweS5zcGFyc2UgaW1wb3J0IGNzY19tYXRyaXgsIGRpYWdzLCB0cmlsLCBpZGVudGl0eQppbXBvcnQgd2FybmluZ3MKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAoKY2xhc3MgRERQb3B0aW9ucyhPcHRpb25zX0NvbnRhaW5lcik6CiAgICAiIiIgQ29udGFpbmVyIGZvciBudW1lcmljYWwgb3B0aW9ucyB0byBzb2x2ZSBhIERQbW9kZWwKCiAgICBBdHRyaWJ1dGVzOgogICAgICAgIGFsZ29yaXRobSAgIGFsZ29yaXRobSBmb3Igc29sdmVyCiAgICAgICAgdG9sICAgICAgICAgY29udmVyZ2VuY2UgdG9sZXJhbmNlIHBhcmFtZXRlcgogICAgICAgIG1heGl0ICAgICAgIG1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbnMKICAgICAgICBwcmludCAgICAgICBwcmludCBpdGVyYXRpb24gc3VtbWFyeSB3aGVuIHNvbHZpbmcgdGhlIG1vZGVsCiAgICAgICAgdnRlcm0gICAgICAgdGVybWluYWwgdmFsdWUKICAgICIiIgogICAgZGVzY3JpcHRpb24gPSAiU29sdmVyIG9wdGlvbnMgZm9yIGEgRFBtb2RlbCIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgYWxnb3JpdGhtPSduZXd0b24nLCB0b2w9bnAuc3FydChucC5zcGFjaW5nKDEpKSwKICAgICAgICAgICAgICAgICBtYXhpdD0yMDAsIHZ0ZXJtPU5vbmUsIHNob3c9RmFsc2UpOgogICAgICAgIHNlbGYuYWxnb3JpdGhtID0gYWxnb3JpdGhtCiAgICAgICAgc2VsZi50b2wgPSB0b2wKICAgICAgICBzZWxmLm1heGl0ID0gbWF4aXQKICAgICAgICBzZWxmLnZ0ZXJtID0gdnRlcm0KICAgICAgICBzZWxmLnNob3cgPSBzaG93CgogICAgZGVmIHByaW50X2hlYWRlcihzZWxmLCBtZXRob2QsIGhvcml6b24pOgogICAgICAgIGhvcml6b24gPSAnaW5maW5pdGUnIGlmIG5wLmlzaW5mKGhvcml6b24pIGVsc2UgJ2Zpbml0ZScKICAgICAgICBpZiBzZWxmLnNob3c6CiAgICAgICAgICAgIHByaW50KCdTb2x2aW5nICVzLWhvcml6b24gZGlzY3JldGUgbW9kZWwgYnkgJXMgbWV0aG9kJyAlIChob3Jpem9uLCBtZXRob2QpKQogICAgICAgICAgICBwcmludCgnezo0c30gezoxMnN9IHs6OHN9Jy5mb3JtYXQoJ2l0ZXInLCAnY2hhbmdlJywgJ3RpbWUnKSkKICAgICAgICAgICAgcHJpbnQoJy0nICogMzApCgogICAgZGVmIHByaW50X2N1cnJlbnRfaXRlcmF0aW9uKHNlbGYsIGl0LCBjaGFuZ2UsIHQwKToKICAgICAgICAiIiIgUHJpbnRzIHN1bW1hcnkgb2YgY3VycmVudCBpdGVyYXRpb24gaW4gc29sdmUgbWV0aG9kCgogICAgICAgIEFyZ3M6CiAgICAgICAgICBpdDogaXRlcmF0aW9uIG51bWJlciAoc2NhbGFyKQogICAgICAgICAgY2hhbmdlOiBkaXN0YW5jZSBiZXR3ZWVuIHR3byBpdGVyYXRpb25zCiAgICAgICAgICB0aWM6IHRpbWUgd2hlbiBpdGVyYXRpb25zIHN0YXJ0ZWQKCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgIHByaW50cyBvdXRwdXQgdG8gc2NyZWVuCiAgICAgICAgIiIiCiAgICAgICAgaWYgc2VsZi5zaG93OgogICAgICAgICAgICBwcmludCgnezo0ZH0gIHs6MTIuMWV9ICB7OjguNGZ9Jy5mb3JtYXQoaXQsIGNoYW5nZSwgdG9jKHQwKSkpCgogICAgZGVmIHByaW50X2xhc3RfaXRlcmF0aW9uKHNlbGYsIHQwLCBjaGFuZ2UpOgogICAgICAgICIiIiBQcmludHMgc3VtbWFyeSBvZiBsYXN0IGl0ZXJhdGlvbiBpbiBzb2x2ZSBtZXRob2QKCiAgICAgICAgQXJnczoKICAgICAgICAgIHRpYzogdGltZSB3aGVuIGl0ZXJhdGlvbnMgc3RhcnRlZAogICAgICAgICAgY2hhbmdlOiBkaXN0YW5jZSBiZXR3ZWVuIGxhc3QgdHdvIGl0ZXJhdGlvbnMKCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgIHByaW50cyBvdXRwdXQgdG8gc2NyZWVuCiAgICAgICAgIiIiCiAgICAgICAgaWYgc2VsZi5zaG93OgogICAgICAgICAgICBpZiBjaGFuZ2UgPj0gc2VsZi50b2w6CiAgICAgICAgICAgICAgICBwcmludCgnRmFpbHVyZSB0byBjb252ZXJnZSBpbiBEUG1vZGVsLnNvbHZlKCknKQogICAgICAgICAgICBwcmludCgnRWxhcHNlZCBUaW1lID0gezo3LjJmfSBTZWNvbmRzJy5mb3JtYXQodG9jKHQwKSkpCgoKY2xhc3MgRERQZGltcyhPcHRpb25zX0NvbnRhaW5lcik6CiAgICAiIiIgQ29udGFpbmVyIGZvciB0aGUgZGltZW5zaW9ucyBvZiBhIEREUG1vZGVsIG9iamVjdAoKICAgIEF0dHJpYnV0ZXM6CiAgICAgICAgbiAgIG51bWJlciBvZiBkaXNjcmV0ZSBzdGF0ZXMKICAgICAgICBtICAgbnVtYmVyIG9mIGRpc2NyZXRlIGFjdGlvbnMKICAgICIiIgogICAgZGVzY3JpcHRpb24gPSAiRGltZW5zaW9ucyBvZiBhIERQbW9kZWwgb2JqZWN0IgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtLCBuKToKICAgICAgICBzZWxmLm0gPSBtCiAgICAgICAgc2VsZi5uID0gbgoKCmNsYXNzIEREUG1vZGVsKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgcmV3YXJkLCBkeW5hbWljcywKICAgICAgICAgICAgICAgICBkaXNjb3VudCwgaG9yaXpvbj1ucC5pbmYsCiAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgogICAgICAgICIiIgoKICAgICAgICA6cGFyYW0gcmV3YXJkOiBtIFggbiBhcnJheSwgbSBkaXNjcmV0ZSBhY3Rpb25zIHZzIG4gZGlzY3JldGUgc3RhdGVzCiAgICAgICAgOnBhcmFtIGR5bmFtaWNzOgogICAgICAgIDpwYXJhbSBkaXNjb3VudDogZmxvYXQsIGRpc2NvdW50IGZhY3RvciAoc2NhbGFyKQogICAgICAgIDpwYXJhbSBob3Jpem9uOiBpbnQsIHBsYW5uaW5nIGhvcml6b24KICAgICAgICA6cGFyYW0ga3dhcmdzOiBvcHRpb25zIGZvciBzb2x2aW5nIHRoZSBwcm9ibGVtCiAgICAgICAgIiIiCgogICAgICAgIGFzc2VydCByZXdhcmQubmRpbSA9PSAyLCAncmV3YXJkIG11c3QgYmUgYSAyLWRpbWVuc2lvbmFsIGFycmF5JwoKICAgICAgICBzZWxmLnJld2FyZCA9IHJld2FyZAogICAgICAgIHNlbGYuZGlzY291bnQgPSBkaXNjb3VudAogICAgICAgIHNlbGYuZGltcyA9IEREUGRpbXMoKnJld2FyZC5zaGFwZSkKCiAgICAgICAgc2VsZi5ob3Jpem9uID0gaG9yaXpvbgogICAgICAgIHNlbGYub3B0cyA9IEREUG9wdGlvbnMoKiprd2FyZ3MpCgogICAgICAgIG4gPSBzZWxmLmRpbXMubgoKICAgICAgICBzZWxmLl9pbmZpbml0ZV9ob3Jpem9uID0gbnAuaXNpbmYoaG9yaXpvbikKCiAgICAgICAgaWYgc2VsZi5faW5maW5pdGVfaG9yaXpvbjoKICAgICAgICAgICAgc2VsZi52YWx1ZSA9IG5wLnplcm9zKG4pCiAgICAgICAgICAgIHNlbGYucG9saWN5ID0gbnAuemVyb3MobiwgZHR5cGU9aW50KQogICAgICAgICAgICBzZWxmLnRyYW5zaXRpb24gPSBucC56ZXJvcygobiwgbikpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgVCA9IGhvcml6b24KICAgICAgICAgICAgc2VsZi5vcHRzLmFsZ29yaXRobSA9ICdiYWNrd2FyZHMnCiAgICAgICAgICAgIHNlbGYudmFsdWUgPSBucC56ZXJvcygoVCArIDEsIG4pKQogICAgICAgICAgICBzZWxmLnBvbGljeSA9IG5wLnplcm9zKChULCBuKSwgZHR5cGU9aW50KQogICAgICAgICAgICBzZWxmLnRyYW5zaXRpb24gPSBucC56ZXJvcygoVCArIDEsIG4sIG4pKQoKICAgICAgICB0eHQgPSAnZHluYW1pY3MgbXVzdCBoYXZlIDIgKGRldGVybWluaXN0aWMpIG9yIDMgKHN0b2NoYXN0aWMpIGRpbWVuc2lvbnMnCiAgICAgICAgYXNzZXJ0IGR5bmFtaWNzLm5kaW0gaW4gWzIsIDNdLCB0eHQKICAgICAgICBzZWxmLl9pc19kZXRlcm1pbmlzdGljID0gZHluYW1pY3MubmRpbSA9PSAyCgogICAgICAgIHNlbGYuUCA9IGR5bmFtaWNzLmFzdHlwZShpbnQpIGlmIHNlbGYuX2lzX2RldGVybWluaXN0aWMgZWxzZSBkeW5hbWljcwoKICAgIGRlZiBfX3ZhbG1heChzZWxmLCB2KToKICAgICAgICBpZiBzZWxmLl9pc19kZXRlcm1pbmlzdGljOgogICAgICAgICAgICBQdiA9IHZbc2VsZi5QXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIFB2ID0gKHNlbGYuUCBAIHYpLnNxdWVlemUoKQoKICAgICAgICB2ID0gc2VsZi5yZXdhcmQgKyBzZWxmLmRpc2NvdW50ICogUHYKICAgICAgICB4ID0gbnAuYXJnbWF4KHYsIDApCiAgICAgICAgcmV0dXJuIHZbeCwgbnAuYXJhbmdlKHNlbGYuZGltcy5uKV0sIHgKCiAgICBkZWYgX192YWxwb2woc2VsZiwgeCk6CiAgICAgICAgbiA9IHNlbGYuZGltcy5uCiAgICAgICAgbm4gPSBucC5hcmFuZ2UobiwgZHR5cGU9aW50KQogICAgICAgIGlmIHNlbGYuX2lzX2RldGVybWluaXN0aWM6CiAgICAgICAgICAgIHNuZXh0ID0gc2VsZi5QW3gsIG5uXQogICAgICAgICAgICBwc3RhciA9IGNzY19tYXRyaXgoKG5wLm9uZXMobiksIChubiwgc25leHQpKSwgKG4sIG4pKS50b2FycmF5KCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBwc3RhciA9IHNlbGYuUFt4LCBubl0KCiAgICAgICAgZnN0YXIgPSBzZWxmLnJld2FyZFt4LCBubl0KICAgICAgICByZXR1cm4gcHN0YXIsIGZzdGFyCgogICAgZGVmIHNvbHZlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICBzZWxmLm9wdHNba3dhcmdzLmtleXMoKV0gPSBrd2FyZ3MudmFsdWVzKCkKICAgICAgICB2dCA9IHNlbGYub3B0cy52dGVybQogICAgICAgIGlmIHZ0IGlzIG5vdCBOb25lOgogICAgICAgICAgICBhc3NlcnQgdnQuc2l6ZSA9PSBzZWxmLmRpbXMubiwgJ3Z0ZXJtIG11c3QgaGF2ZSB7OmR9IGVsZW1lbnRzIChvbmUgcGVyIHN0YXRlJy5mb3JtYXQoc2VsZi5kaW1zLm4pCiAgICAgICAgICAgIGlmIHNlbGYuX2luZmluaXRlX2hvcml6b246CiAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdnQKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHNlbGYudmFsdWVbLTFdID0gdnQKCiAgICAgICAgYWxnb3JpdGhtID0gc2VsZi5vcHRzLmFsZ29yaXRobQogICAgICAgIGlmIGFsZ29yaXRobSBpcyAnbmV3dG9uJzoKICAgICAgICAgICAgc2VsZi5fX3NvbHZlX2J5X05ld3Rvbl9tZXRob2QoKQogICAgICAgIGVsaWYgYWxnb3JpdGhtIGlzICdmdW5jaXQnOgogICAgICAgICAgICBzZWxmLl9fc29sdmVfYnlfZnVuY3Rpb25faXRlcmF0aW9uKCkKICAgICAgICBlbGlmIGFsZ29yaXRobSBpcyAnYmFja3dhcmRzJzoKICAgICAgICAgICAgc2VsZi5fX3NvbHZlX2JhY2t3YXJkcygpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5rbm93biBhbGdvcml0aG0nKQogICAgICAgIHJldHVybiBzZWxmCgogICAgZGVmIF9fc29sdmVfYmFja3dhcmRzKHNlbGYpOgogICAgICAgIHNlbGYub3B0cy5wcmludF9oZWFkZXIoJ2JhY2t3YXJkIHJlY3Vyc2lvbicsIHNlbGYuaG9yaXpvbikKICAgICAgICBmb3IgdCBpbiByYW5nZShzZWxmLmhvcml6b24gLSAxLCAtMSwgLTEpOgogICAgICAgICAgICBzZWxmLnZhbHVlW3RdLCBzZWxmLnBvbGljeVt0XSA9IHNlbGYuX192YWxtYXgoc2VsZi52YWx1ZVt0ICsgMV0pCiAgICAgICAgICAgIHNlbGYudHJhbnNpdGlvblt0XSA9IHNlbGYuX192YWxwb2woc2VsZi5wb2xpY3lbdF0pWzBdICAjIG9ubHkgZmlyc3Qgb3V0cHV0IHJlcXVpcmVkCgogICAgZGVmIF9fc29sdmVfYnlfTmV3dG9uX21ldGhvZChzZWxmKToKICAgICAgICB0MCA9IHRpYygpCiAgICAgICAgbiA9IHNlbGYuZGltcy5uCiAgICAgICAgZGVsdGEgPSBzZWxmLmRpc2NvdW50CiAgICAgICAgSV9uID0gbnAuaWRlbnRpdHkobikKCiAgICAgICAgc2VsZi5vcHRzLnByaW50X2hlYWRlcigiTmV3dG9uJ3MiLCBzZWxmLmhvcml6b24pCiAgICAgICAgZm9yIGl0IGluIHJhbmdlKHNlbGYub3B0cy5tYXhpdCk6CiAgICAgICAgICAgIHZvbGQgPSBzZWxmLnZhbHVlLmNvcHkoKQogICAgICAgICAgICB0bXAsIHNlbGYucG9saWN5ID0gc2VsZi5fX3ZhbG1heCh2b2xkKQogICAgICAgICAgICBzZWxmLnRyYW5zaXRpb24sIGZzdGFyID0gc2VsZi5fX3ZhbHBvbChzZWxmLnBvbGljeSkKICAgICAgICAgICAgc2VsZi52YWx1ZSA9IG5wLmxpbmFsZy5zb2x2ZShJX24gLSBkZWx0YSAqIHNlbGYudHJhbnNpdGlvbiwgZnN0YXIpCiAgICAgICAgICAgIGNoYW5nZSA9IG5wLmxpbmFsZy5ub3JtKHNlbGYudmFsdWUgLSB2b2xkKQogICAgICAgICAgICBzZWxmLm9wdHMucHJpbnRfY3VycmVudF9pdGVyYXRpb24oaXQsIGNoYW5nZSwgdDApCiAgICAgICAgICAgIGlmIGNoYW5nZSA8IHNlbGYub3B0cy50b2w6CiAgICAgICAgICAgICAgICBicmVhawoKICAgICAgICBzZWxmLm9wdHMucHJpbnRfbGFzdF9pdGVyYXRpb24odDAsIGNoYW5nZSkKCiAgICBkZWYgX19zb2x2ZV9ieV9mdW5jdGlvbl9pdGVyYXRpb24oc2VsZik6CiAgICAgICAgdDAgPSB0aWMoKQogICAgICAgIHNlbGYub3B0cy5wcmludF9oZWFkZXIoJ2Z1bmN0aW9uIGl0ZXJhdGlvbicsIHNlbGYuaG9yaXpvbikKICAgICAgICBmb3IgaXQgaW4gcmFuZ2Uoc2VsZi5vcHRzLm1heGl0KToKICAgICAgICAgICAgdm9sZCA9IHNlbGYudmFsdWUuY29weSgpCiAgICAgICAgICAgIHNlbGYudmFsdWUsIHNlbGYucG9saWN5ID0gc2VsZi5fX3ZhbG1heChzZWxmLnZhbHVlKQogICAgICAgICAgICBjaGFuZ2UgPSBucC5saW5hbGcubm9ybShzZWxmLnZhbHVlIC0gdm9sZCkKICAgICAgICAgICAgc2VsZi5vcHRzLnByaW50X2N1cnJlbnRfaXRlcmF0aW9uKGl0LCBjaGFuZ2UsIHQwKQogICAgICAgICAgICBpZiBjaGFuZ2UgPCBzZWxmLm9wdHMudG9sOgogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICBzZWxmLnRyYW5zaXRpb24gPSBzZWxmLl9fdmFscG9sKHNlbGYucG9saWN5KVswXQogICAgICAgIHNlbGYub3B0cy5wcmludF9sYXN0X2l0ZXJhdGlvbih0MCwgY2hhbmdlKQoKICAgIGRlZiBzb2x1dGlvbihzZWxmKToKICAgICAgICAjVE9ETzogUmV0dXJuIG1vZGVsIHNvbHV0aW9uIGFzIHBhbmRhcyBkYXRhZnJhbWU/CiAgICAgICAgcGFzcwoKICAgIGRlZiBzaW11bGF0ZShzZWxmLCBzMCwgbnBlcik6CgogICAgICAgIHMwID0gbnAuYXRsZWFzdF8xZChzMCkKICAgICAgICBuID0gc2VsZi5kaW1zLm4KICAgICAgICBucmVwID0gczAuc2l6ZQoKICAgICAgICBucGVyID0gbnBlciBpZiBzZWxmLmhvcml6b24gPiBucGVyIGVsc2Ugc2VsZi5ob3Jpem9uCiAgICAgICAgc3BhdGggPSBucC56ZXJvcygobnBlciArIDEsIG5yZXApLCBkdHlwZT1pbnQpCiAgICAgICAgc3BhdGhbMF0gPSBzMAoKICAgICAgICBpZiBzZWxmLl9pbmZpbml0ZV9ob3Jpem9uOgogICAgICAgICAgICBjcCA9IHNlbGYudHJhbnNpdGlvbi5jdW1zdW0oMSkKICAgICAgICAgICAgZm9yIHQgaW4gcmFuZ2UobnBlcik6CiAgICAgICAgICAgICAgICByID0gbnAucmFuZG9tLnJhbmQobnJlcCwgMSkKICAgICAgICAgICAgICAgIHNwYXRoW3QgKyAxXSA9IChyID4gY3Bbc3BhdGhbdF1dKS5zdW0oMSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBmb3IgdCBpbiByYW5nZShucGVyKToKICAgICAgICAgICAgICAgIHIgPSBucC5yYW5kb20ucmFuZChucmVwKQogICAgICAgICAgICAgICAgY3AgPSBzZWxmLnRyYW5zaXRpb25bdF0uY3Vtc3VtKDEpCiAgICAgICAgICAgICAgICBzcGF0aFt0ICsgMV0gPSAociA+IGNwW3NwYXRoW3RdXSkuc3VtKDEpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgeHBhdGggPSBzZWxmLnBvbGljeVtzcGF0aF0KICAgICAgICByZXR1cm4gc3BhdGguc3F1ZWV6ZSgpLCB4cGF0aC5zcXVlZXplKCkKCjx8ZmltX2VuZHw+"]
["30c4eee0adac55b4ec6946acbecb7d53259dbcf3-4","30c4eee0adac55b4ec6946acbecb7d53259dbcf3","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gdHlwaW5nIGltcG9ydCBUdXBsZSwgTGlzdCwgQ2FsbGFibGUKCgpjbGFzcyBMb2dUeXBlOgogICAgRVJST1IsIFdBUk5JTkcgPSByYW5nZSgyKQoKCkxvZ01lc3NhZ2UgPSBUdXBsZVtMb2dUeXBlLCBzdHJdCgoKY2xhc3MgTG9nZ2VyOgo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLmNvbnRleHQgPSBjb250ZXh0CiAgICAgICAgc2VsZi5jYWxsYmFjayA9IHByaW50CiAgICAgICAgc2VsZi5tZXNzYWdlcyA9IFtdCiAgICAgICAgc2VsZi51c2VfcHJlZml4ID0gVHJ1ZQoKICAgIGRlZiBwcmludChzZWxmLCBtc2c6IHN0cik6CiAgICAgICAgIiIiTG9ncyB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuIiIiCiAgICAgICAgaWYgc2VsZi51c2VfcHJlZml4OgogICAgICAgICAgICBzZWxmLmNhbGxiYWNrKCJbJXNdICVzIiAlIChzZWxmLmNvbnRleHQsIG1zZykpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5jYWxsYmFjayhtc2cpCgogICAgZGVmIGVycm9yKHNlbGYsIG1zZzogc3RyKToKICAgICAgICAiIiJMb2dzIHRoZSBzcGVjaWZpZWQgZXJyb3IuIiIiCiAgICAgICAgaWYgc2VsZi51c2VfcHJlZml4OgogICAgICAgICAgICBzZWxmLnByaW50KCJbRVJST1JdICVzIiAlIG1zZykKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLnByaW50KG1zZykKICAgICAgICBzZWxmLm1lc3NhZ2VzLmFwcGVuZCgoTG9nVHlwZS5FUlJPUiwgbXNnKSkKCiAgICBkZWYgd2FybihzZWxmLCBtc2c6IHN0cik6CiAgICAgICAgIiIiTG9ncyB0aGUgc3BlY2lmaWVkIHdhcm5pbmcuIiIiCiAgICAgICAgaWYgc2VsZi51c2VfcHJlZml4OgogICAgICAgICAgICBzZWxmLnByaW50KCJbIFdBUk5dICVzIiAlIG1zZykKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLnByaW50KG1zZykKICAgICAgICBzZWxmLm1lc3NhZ2VzLmFwcGVuZCgoTG9nVHlwZS5XQVJOSU5HLCBtc2cpKQoKICAgIGRlZiBzZXRfY2FsbGJhY2soc2VsZiwgY2I6IENhbGxhYmxlKToKICAgICAgICAiIiJSZXBsYWNlcyB0aGUgZGVmYXVsdCBwcmludGluZyBjYWxsYmFjayBmdW5jdGlvbi4iIiIKICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2IKCiAgICBkZWYgZ2V0X21lc3NhZ2VzKHNlbGYpIC0+IExpc3RbTG9nTWVzc2FnZV06CiAgICAgICAgIiIiRmV0Y2hlcyB0aGUgbG9nIG1lc3NhZ2VzLiIiIgogICAgICAgIHJldHVybiBzZWxmLm1lc3NhZ2VzCgogICAgZGVmIGhhc19lcnJvcnMoc2VsZikgLT4gYm9vbDoKICAgICAgICByZXR1cm4gYW55KG1zZyBmb3IgbXNnIGluIHNlbGYubWVzc2FnZXMgaWYgbXNnWzBdID09IExvZ1R5cGUuRVJST1IpCjx8ZmltX3N1ZmZpeHw+CiAgICAiIiJMb2dnZXIgY2xhc3MuIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRleHQ9IkxvZyIpOgogICAgICAgICIiIkluaXRpYWxpc2VzIHRoZSBMb2dnZXIgaW5zdGFuY2UuIiIiCjx8ZmltX2VuZHw+"]
["749c07c8b7c752b2ef326b65f386f5d0a10506ab-1","749c07c8b7c752b2ef326b65f386f5d0a10506ab","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBoYXNobGliCmltcG9ydCBzdHJpbmcKCmltcG9ydCBtci5jb25maWcKCgpjbGFzcyBTY3JhbWJsZXI6CiAgICBkZWYgX19pbml0X18oc2VsZiwgdXNlcj1Ob25lKToKICAgICAgICBzZWxmLmNvbmZpZyA9IG1yLmNvbmZpZy5Db25maWcoJ3NjcmFtYmxlJywgdXNlcj11c2VyKS5yZWFkKCkKICAgICAgICBzZWxmLnN5bWJvbHMgPSBzdHJpbmcuZGlnaXRzICsgc3RyaW5nLmFzY2lpX2xldHRlcnMKCiAgICBkZWYgcGFyc2VfYXJncyhzZWxmKToKICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgndGV4dCcsIHR5cGU9c3RyKQogICAgICAgIHJldHVybiBwYXJzZXIucGFyc2VfYXJncygpCgogICAgZGVmIGNvbnZlcnQoc2VsZiwgbnVtYmVyKToKICAgICAgICBpZiAobnVtYmVyID09IDApOgogICAgICAgICAgICByZXR1cm4gIjAiCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmVzdCA9IHNlbGYuY29udmVydChudW1iZXIgLy8gbGVuKHNlbGYuc3ltYm9scykpLmxzdHJpcCgiMCIpCiAgICAgICAgICAgIHJldHVybiByZXN0ICsgc2VsZi5zeW1ib2xzW251bWJlciAlIGxlbihzZWxmLnN5bWJvbHMpXQoKICAgIGRlZiBub3JtYWxpemUoc2VsZiwgaGFzaGVyKToKICAgICAgICByZXR1cm4gc2VsZi5jb252ZXJ0KGludChoYXNoZXIuaGV4ZGlnZXN0KCksIDE2KSkKCiAgICBkZWYgc2NyYW1ibGUoc2VsZiwgdGV4dCk6CiAgICAgICAgdGV4dCA9ICh0ZXh0ICsgc2VsZi5jb25maWdbJ3NhbHQnXSkuZW5jb2RlKCdhc2NpaScsICdpZ25vcmUnKQoKICAgICAgICBmb3IgXyBpbiByYW5nZShzZWxmLmNvbmZpZ1sncm91bmRzJ10pOgo8fGZpbV9ob2xlfD4KICAgICAgICByZXR1cm4gdGV4dC5kZWNvZGUoJ1VURi04JylbOnNlbGYuY29uZmlnWydsZW5ndGgnXV0KCiAgICBkZWYgbWFpbihzZWxmKToKICAgICAgICBwcmludChzZWxmLnNjcmFtYmxlKHNlbGYucGFyc2VfYXJncygpLnRleHQpKQoKCmRlZiBtYWluKCk6CiAgICBTY3JhbWJsZXIoKS5tYWluKCkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGhhc2hlciA9IGhhc2hsaWIuc2hhNTEyKCkKICAgICAgICAgICAgaGFzaGVyLnVwZGF0ZSh0ZXh0KQogICAgICAgICAgICB0ZXh0ID0gc2VsZi5ub3JtYWxpemUoaGFzaGVyKS5lbmNvZGUoImFzY2lpIiwgImlnbm9yZSIpCgo8fGZpbV9lbmR8Pg=="]
["5c1c81f609701cb237a0b3b67c7532adc3d1d015-2","5c1c81f609701cb237a0b3b67c7532adc3d1d015","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiNfX0F1dGhvcl9fID0gTXIuUgojX1BsdWdOYW1lXyA9IFNob3BOdW0x5YiG6ZSA6Zeo5oi357O757ufIGFwaS9DaGVja01lbWJlckxvZ2luLmFzaHjms6jlhaUKI19fUmVmZXJfX18gPSBodHRwOi8vd3d3Lndvb3l1bi5vcmcvYnVncy93b295dW4tMjAxNS0wMTQ2OTk0CgoKPHxmaW1faG9sZXw+CgpkZWYgYXVkaXQoYXJnKToKICAgIHBheWxvYWQgPSAiYXBpL0NoZWNrTWVtYmVyTG9naW4uYXNoeD9Vc2VySUQ9MCclMjBhbmQlMjAoQ0hBUigxMTYpJTJiQ0hBUigxMDEpJTJiQ0hBUigxMTUpJTJiQ0hBUigxMTYpKT4wLS0mdHlwZT1Vc2VySXNFeGlzdCIKICAgIHRhcmdldCA9IGFyZyArIHBheWxvYWQKICAgIGNvZGUsIGhlYWQsIHJlcywgZXJyY29kZSwgXyA9IGN1cmwuY3VybDIodGFyZ2V0KQogICAgaWYgY29kZSA9PSAyMDAgYW5kICJ0ZXN0IiBpbiByZXM6CiAgICAgICAgc2VjdXJpdHlfaG9sZSgnc3FsIGluaj4+Jyt0YXJnZXQpCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgZnJvbSBkdW1teSBpbXBvcnQgKgogICAgYXVkaXQoYXNzaWduKCdzaG9wbnVtMScsICdodHRwOi8vd3d3Lmh1YXNlbndlaS5jb20vJylbMV0pCjx8ZmltX3N1ZmZpeHw+CmRlZiBhc3NpZ24oc2VydmljZSwgYXJnKToKICAgIGlmIHNlcnZpY2UgPT0gJ3Nob3BudW0xJzoKICAgICAgICByZXR1cm4gVHJ1ZSwgYXJnCgo8fGZpbV9lbmR8Pg=="]
["ba46c9eaf01e8f8fd5a1e5396a2312c06284e555-1","ba46c9eaf01e8f8fd5a1e5396a2312c06284e555","PHxmaW1fcHJlZml4fD4KZnJvbSBjb3B5IGltcG9ydCBkZWVwY29weQoKaW1wb3J0IHRvcmNoCgpmcm9tIC5rZXJuZWwgaW1wb3J0IEtlcm5lbApmcm9tIC5pbmRleF9rZXJuZWwgaW1wb3J0IEluZGV4S2VybmVsCmZyb20gLi5sYXp5IGltcG9ydCBLcm9uZWNrZXJQcm9kdWN0TGF6eVRlbnNvciwgR1BhdHRLcm9uZWNrZXJQcm9kdWN0TGF6eVRlbnNvciwgbGF6aWZ5CmZyb20gLi5sYXp5Lk5vdFBTRE5vbkxhenlUZW5zb3IgaW1wb3J0IG5vdHBzZGxhemlmeQpmcm9tIC4ubGF6eS5wZXJtdXRhdGlvbl9sYXp5X3RlbnNvciBpbXBvcnQgUGVybXV0YXRpb25MYXp5VGVuc29yCgoKY2xhc3MgRHJ1Z1Jlc3BvbnNlS2VybmVsKEtlcm5lbCk6CiAgICAiIiIKICAgIEltcGxlbWVudHMgdGhlIGludHJpbnNpYyBjb3JlZ2lvbmFsaXphdGlvbiBtb2RlbCAoSUNNKSB3aXRoIG9yIHdpdGhvdXQgZW5jb2RlZCBpbnZhcmlhbmNlcwogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGFfY292YXJfbW9kdWxlLCBudW1fY29tYmluYXRpb25zLCBudW1fY2VsbF9saW5lcywgc3ltbWV0cmljPVRydWUsIGRydWdfcmFuaz0xLAogICAgICAgICAgICAgICAgIGNlbGxfbGluZXJhbms9MSwKICAgICAgICAgICAgICAgICB0YXNrX2NvdmFyX3ByaW9yPU5vbmUsCiAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgogICAgICAgIHN1cGVyKERydWdSZXNwb25zZUtlcm5lbCwgc2VsZikuX19pbml0X18oKiprd2FyZ3MpCiAgICAgICAgIyBDaGVjayBmb3IgQ1VEQQogICAgICAgIGlmIHRvcmNoLmN1ZGEuaXNfYXZhaWxhYmxlKCk6CiAgICAgICAgICAgIGRldiA9ICJjdWRhOjAiCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZGV2ID0gImNwdSIKCiAgICAgICAgaWYgc3ltbWV0cmljOgogICAgICAgICAgICBzZWxmLmV4cGFuZGVkX251bV9jb21iaW5hdGlvbnMgPSAyICogbnVtX2NvbWJpbmF0aW9ucwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYuZXhwYW5kZWRfbnVtX2NvbWJpbmF0aW9ucyA9IG51bV9jb21iaW5hdGlvbnMKICAgICAgICBzZWxmLm51bV9jZWxsX2xpbmVzID0gbnVtX2NlbGxfbGluZXMKICAgICAgICBzZWxmLmRydWdjb21ib19jb3Zhcl9tb2R1bGUgPSBJbmRleEtlcm5lbCgKICAgICAgICAgICAgbnVtX3Rhc2tzPXNlbGYuZXhwYW5kZWRfbnVtX2NvbWJpbmF0aW9ucywgYmF0Y2hfc2hhcGU9c2VsZi5iYXRjaF9zaGFwZSwgcmFuaz1kcnVnX3JhbmssCiAgICAgICAgICAgIHByaW9yPXRhc2tfY292YXJfcHJpb3IKICAgICAgICApCiAgICAgICAgc2VsZi5jZWxsbGluZV9jb3Zhcl9tb2R1bGUgPSBJbmRleEtlcm5lbCgKICAgICAgICAgICAgbnVtX3Rhc2tzPXNlbGYubnVtX2NlbGxfbGluZXMsIGJhdGNoX3NoYXBlPXNlbGYuYmF0Y2hfc2hhcGUsIHJhbms9Y2VsbF9saW5lcmFuaywKICAgICAgICAgICAgcHJpb3I9dGFza19jb3Zhcl9wcmlvcgogICAgICAgICkKICAgICAgICAjIElmIHN5bW1ldHJpYywgc2V0IHVwIHBlcm11dGF0aW9uIG1hdHJpeAogICAgICAgIGlmIHN5bW1ldHJpYzoKICAgICAgICAgICAgaW50ZXJwX2luZGljZXMgPSB0b3JjaC56ZXJvcygoc2VsZi5leHBhbmRlZF9udW1fY29tYmluYXRpb25zLCBzZWxmLmV4cGFuZGVkX251bV9jb21iaW5hdGlvbnMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0eXBlPXRvcmNoLmxvbmcsIGRldmljZT1kZXYpCiAgICAgICAgICAgIGludGVycF92YWx1ZXMgPSB0b3JjaC56ZXJvcygoc2VsZi5leHBhbmRlZF9udW1fY29tYmluYXRpb25zLCBzZWxmLmV4cGFuZGVkX251bV9jb21iaW5hdGlvbnMpLGRldmljZT1kZXYpCiAgICAgICAgICAgIGNvbGNvdW50ZXIgPSAwCiAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG51bV9jb21iaW5hdGlvbnMpOgogICAgICAgICAgICAgICAgaW50ZXJwX2luZGljZXNbY29sY291bnRlciwgY29sY291bnRlcl0gPSBpICsgbnVtX2NvbWJpbmF0aW9ucwogICAgICAgICAgICAgICAgaW50ZXJwX3ZhbHVlc1tjb2xjb3VudGVyLCBjb2xjb3VudGVyXSA9IDEKICAgICAgICAgICAgICAgIGNvbGNvdW50ZXIgKz0gMQogICAgICAgICAgICBmb3IgaSBpbiByYW5nZShudW1fY29tYmluYXRpb25zKToKICAgICAgICAgICAgICAgIGludGVycF9pbmRpY2VzW2NvbGNvdW50ZXIsIGNvbGNvdW50ZXJdID0gaQogICAgICAgICAgICAgICAgaW50ZXJwX3ZhbHVlc1tjb2xjb3VudGVyLCBjb2xjb3VudGVyXSA9IDEKICAgICAgICAgICAgICAgIGNvbGNvdW50ZXIgKz0gMQogICAgICAgICAgICBzZWxmLnN5bW1ldHJpY19pbmRpY2VzID0gaW50ZXJwX2luZGljZXMKICAgICAgICAgICAgc2VsZi5zeW1tZXRyaWNfdmFsdWVzID0gaW50ZXJwX3ZhbHVlcwogICAgICAgICAgICBzZWxmLnN5bW1ldHJpYyA9IHN5bW1ldHJpYwogICAgICAgICAgICAjIEFuZCByZWZsZWN0aW9uIG1hdHJpeAogICAgICAgICAgICBzZWxmLnJlZmxlY3Rpb24gPSB0b3JjaC50ZW5zb3IoW1swLjAsIDEuMF0sIFsxLjAsIDAuMF1dLGRldmljZT1kZXYpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5zeW1tZXRyaWMgPSBGYWxzZQogICAgICAgIHNlbGYuZGF0YV9jb3Zhcl9tb2R1bGUgPSBkYXRhX2NvdmFyX21vZHVsZQogICAgICAgIHNlbGYubnVtX2NvbWJpbmF0aW9ucyA9IG51bV9jb21iaW5hdGlvbnMKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4MSwgeDIsIGRpYWc9RmFsc2UsIGxhc3RfZGltX2lzX2JhdGNoPUZhbHNlLCAqKnBhcmFtcyk6CiAgICAgICAgaWYgbGFzdF9kaW1faXNfYmF0Y2g6CiAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiTXVsdGl0YXNrS2VybmVsIGRvZXMgbm90IGFjY2VwdCB0aGUgbGFzdF9kaW1faXNfYmF0Y2ggYXJndW1lbnQuIikKICAgICAgICBjb3Zhcl9kcnVnY29tYm8gPSBzZWxmLmRydWdjb21ib19jb3Zhcl9tb2R1bGUuY292YXJfbWF0cml4CiAgICAgICAgY292YXJfY2VsbGxpbmUgPSBzZWxmLmNlbGxsaW5lX2NvdmFyX21vZHVsZS5jb3Zhcl9tYXRyaXgKICAgICAgICBkYXRhX2NvdmFyX21hdHJpeCA9IHNlbGYuZGF0YV9jb3Zhcl9tb2R1bGUuZm9yd2FyZCh4MSwgeDIsICoqcGFyYW1zKQogICAgICAgIGNvdmFyX3ggPSBsYXppZnkoZGF0YV9jb3Zhcl9tYXRyaXgpCiAgICAgICAgaWYgc2VsZi5zeW1tZXRyaWM6CiAgICAgICAgICAgICMgRW5zdXJlIHRoaW5ncyBhcmUgb24gY29ycmVjdCBkZXZpY2UKICAgICAgICAgICAgZGV2aWNlID0geDEuZGV2aWNlCiAgICAgICAgICAgIHNlbGYuc3ltbWV0cmljX2luZGljZXMgPSBzZWxmLnN5bW1ldHJpY19pbmRpY2VzLnRvKGRldmljZSkKICAgICAgICAgICAgc2VsZi5zeW1tZXRyaWNfdmFsdWVzID0gc2VsZi5zeW1tZXRyaWNfdmFsdWVzLnRvKGRldmljZSkKICAgICAgICAgICAgc2VsZi5yZWZsZWN0aW9uID0gc2VsZi5yZWZsZWN0aW9uLnRvKGRldmljZSkKICAgICAgICAgICAgIyBNYWtlIHNvbWUgY29waWVzCiAgICAgICAgICAgIGNvdmFyX2RydWdjb21ib190ID0gY292YXJfZHJ1Z2NvbWJvLmNsb25lKCkKICAgICAgICAgICAgY292YXJfZHJ1Z2NvbWJvX3R0ID0gY292YXJfZHJ1Z2NvbWJvLmNsb25lKCkKICAgICAgICAgICAgY292YXJfZHJ1Z2NvbWJvX3N5bV9yb3cgPSBQZXJtdXRhdGlvbkxhenlUZW5zb3IoY292YXJfZHJ1Z2NvbWJvX3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRfaW50ZXJwX2luZGljZXM9c2VsZi5zeW1tZXRyaWNfaW5kaWNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdF9pbnRlcnBfdmFsdWVzPXNlbGYuc3ltbWV0cmljX3ZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRfaW50ZXJwX2luZGljZXM9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRfaW50ZXJwX3ZhbHVlcz1Ob25lKQogICAgICAgICAgICBjb3Zhcl9kcnVnY29tYm9fc3ltX3RvdGFsID0gUGVybXV0YXRpb25MYXp5VGVuc29yKGNvdmFyX2RydWdjb21ib190dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0X2ludGVycF9pbmRpY2VzPXNlbGYuc3ltbWV0cmljX2luZGljZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdF9pbnRlcnBfdmFsdWVzPXNlbGYuc3ltbWV0cmljX3ZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodF9pbnRlcnBfaW5kaWNlcz1zZWxmLnN5bW1ldHJpY19pbmRpY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0X2ludGVycF92YWx1ZXM9c2VsZi5zeW1tZXRyaWNfdmFsdWVzKQogICAgICAgICAgICBpZiB4MS5zaGFwZVsxXSA+IDE6ICAjIEZvciB0aGUgMi1kIGNhc2Ugd2UgZmxpcCB0aGUgYXhpcwogICAgICAgICAgICAgICAgZGF0YV9jb3Zhcl9tb2R1bGVfcmVmbGVjdGVkID0gZGVlcGNvcHkoc2VsZi5kYXRhX2NvdmFyX21vZHVsZSkKICAgICAgICAgICAgICAgIGRhdGFfY292YXJfbWF0cml4X3JlZmxlY3RlZCA9IGRhdGFfY292YXJfbW9kdWxlX3JlZmxlY3RlZC5mb3J3YXJkKHgxLm1hdG11bChzZWxmLnJlZmxlY3Rpb24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIsICoqcGFyYW1zKQogICAgICAgICAgICAgICAgY292YXJfeF9yZWZsZWN0ZWQgPSBub3Rwc2RsYXppZnkoZGF0YV9jb3Zhcl9tYXRyaXhfcmVmbGVjdGVkKQogICAgICAgICAgICAgICAga3Jvbl9sdDEgPSBLcm9uZWNrZXJQcm9kdWN0TGF6eVRlbnNvcihjb3Zhcl94LCBjb3Zhcl9jZWxsbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yNSAqIGNvdmFyX2RydWdjb21ibyArIDAuMjUgKiBjb3Zhcl9kcnVnY29tYm9fc3ltX3RvdGFsKQogICAgICAgICAgICAgICAga3Jvbl9sdDIgPSBLcm9uZWNrZXJQcm9kdWN0TGF6eVRlbnNvcihjb3Zhcl94X3JlZmxlY3RlZCwgY292YXJfY2VsbGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjUgKiBjb3Zhcl9kcnVnY29tYm9fc3ltX3JvdyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjUgKiBjb3Zhcl9kcnVnY29tYm9fc3ltX3Jvdy50KCkpCiAgICAgICAgICAgICAgICByZXMgPSBHUGF0dEtyb25lY2tlclByb2R1Y3RMYXp5VGVuc29yKGtyb25fbHQxKSArIEdQYXR0S3JvbmVja2VyUHJvZHVjdExhenlUZW5zb3Ioa3Jvbl9sdDIpCgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgY292YXJfayA9IDAuMjUgKiBjb3Zhcl9kcnVnY29tYm8gKyAwLjI1ICogY292YXJfZHJ1Z2NvbWJvX3N5bV9yb3cgKyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yNSAqIGNvdmFyX2RydWdjb21ib19zeW1fcm93LnQoKSArIDAuMjUgKiBjb3Zhcl9kcnVnY29tYm9fc3ltX3RvdGFsCiAgICAgICAgICAgICAgICBrcm9uX2x0ID0gS3JvbmVja2VyUHJvZHVjdExhenlUZW5zb3IoY292YXJfeCwgY292YXJfaywgY292YXJfY2VsbGxpbmUpCiAgICAgICAgICAgICAgICByZXMgPSBHUGF0dEtyb25lY2tlclByb2R1Y3RMYXp5VGVuc29yKGtyb25fbHQpCiAgICAgICAgZWxzZToKICAgICAgICAgICAga3Jvbl9sdCA9IEtyb25lY2tlclByb2R1Y3RMYXp5VGVuc29yKGNvdmFyX3gsIGNvdmFyX2NlbGxsaW5lLCBjb3Zhcl9kcnVnY29tYm8pCiAgICAgICAgICAgIHJlcyA9IEdQYXR0S3JvbmVja2VyUHJvZHVjdExhenlUZW5zb3Ioa3Jvbl9sdCkKCiAgICAgICAgcmV0dXJuIHJlcy5kaWFnKCkgaWYgZGlhZyBlbHNlIHJlcwoKICAgIGRlZiBudW1fb3V0cHV0c19wZXJfaW5wdXQoc2VsZiwgeDEsIHgyKToKPHxmaW1faG9sZXw+CiAgICAgICAgcmV0dXJuIChzZWxmLmV4cGFuZGVkX251bV9jb21iaW5hdGlvbnMgKiBzZWxmLm51bV9jZWxsX2xpbmVzKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICIiIgogICAgICAgIEdpdmVuIGBuYCBkYXRhIHBvaW50cyBgeDFgIGFuZCBgbWAgZGF0YXBvaW50cyBgeDJgLCB0aGlzIG11bHRpdGFzawogICAgICAgIGtlcm5lbCByZXR1cm5zIGFuIGAobipudW1fdGFza3MpIHggKG0qbnVtX3Rhc2tzKWAgY292YXJpYW5jZSBtYXRyaXguCiAgICAgICAgIiIiCjx8ZmltX2VuZHw+"]
["d91b144dc1f193b928a63a7cd04835940961d4ad-4","d91b144dc1f193b928a63a7cd04835940961d4ad","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIHRlc3RzLnV0aWwuZ2xvYmFsX3JlYWN0b3IgaW1wb3J0IFRFU1RfU1dJVENIRVMKZnJvbSB0ZXN0cy51dGlsLnByb3RvY29sX3V0aWwgaW1wb3J0IFNzaFRlc3RlciwgVGVsbmV0VGVzdGVyCgoKY2xhc3MgUm91dGluZ0VuZ2luZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgZGVmIHRlc3RfMl9zc2goc2VsZik6CiAgICAgICAgY29uZiA9IFRFU1RfU1dJVENIRVNbImJyb2NhZGUiXQogICAgICAgIHRlc3RlcjEgPSBTc2hUZXN0ZXIoInNzaC0xIiwgIjEyNy4wLjAuMSIsIGNvbmZbInNzaCJdLCB1J3Jvb3QnLCB1J3Jvb3QnKQogICAgICAgIHRlc3RlcjIgPSBTc2hUZXN0ZXIoInNzaC0yIiwgIjEyNy4wLjAuMSIsIGNvbmZbInNzaCJdLCB1J3Jvb3QnLCB1J3Jvb3QnKQoKICAgICAgICB0ZXN0ZXIxLmNvbm5lY3QoKQogICAgICAgIHRlc3RlcjEud3JpdGUoImVuYWJsZSIpCiAgICAgICAgdGVzdGVyMS5yZWFkKCJQYXNzd29yZDoiKQogICAgICAgIHRlc3RlcjEud3JpdGVfaW52aXNpYmxlKGNvbmZbImV4dHJhIl1bInBhc3N3b3JkIl0pCiAgICAgICAgdGVzdGVyMS5yZWFkKCJTU0hAbXlfc3dpdGNoIyIpCiAgICAgICAgdGVzdGVyMS53cml0ZSgic2tpcC1wYWdlLWRpc3BsYXkiKQogICAgICAgIHRlc3RlcjEucmVhZCgiU1NIQG15X3N3aXRjaCMiKQoKICAgICAgICB0ZXN0ZXIyLmNvbm5lY3QoKQoKICAgICAgICB0ZXN0ZXIxLndyaXRlKCJza2lwLXBhZ2UtZGlzcGxheSIpCiAgICAgICAgdGVzdGVyMS5yZWFkKCJTU0hAbXlfc3dpdGNoIyIpCgogICAgICAgIHRlc3RlcjIud3JpdGUoImVuYWJsZSIpCiAgICAgICAgdGVzdGVyMi5yZWFkKCJQYXNzd29yZDoiKQogICAgICAgIHRlc3RlcjIud3JpdGVfaW52aXNpYmxlKGNvbmZbImV4dHJhIl1bInBhc3N3b3JkIl0pCiAgICAgICAgdGVzdGVyMi5yZWFkKCJTU0hAbXlfc3dpdGNoIyIpCiAgICAgICAgdGVzdGVyMi53cml0ZSgiY29uZmlndXJlIHRlcm1pbmFsIikKICAgICAgICB0ZXN0ZXIyLnJlYWQoIlNTSEBteV9zd2l0Y2goY29uZmlnKSMiKQoKICAgICAgICB0ZXN0ZXIxLndyaXRlKCJza2lwLXBhZ2UtZGlzcGxheSIpCiAgICAgICAgdGVzdGVyMS5yZWFkKCJTU0hAbXlfc3dpdGNoIyIpCgogICAgICAgIHRlc3RlcjIud3JpdGUoImV4aXQiKQogICAgICAgIHRlc3RlcjIucmVhZCgiU1NIQG15X3N3aXRjaCMiKQoKICAgICAgICB0ZXN0ZXIxLndyaXRlKCJleGl0IikKICAgICAgICB0ZXN0ZXIxLnJlYWRfZW9mKCkKICAgICAgICB0ZXN0ZXIxLmRpc2Nvbm5lY3QoKQoKICAgICAgICB0ZXN0ZXIyLndyaXRlKCJleGl0IikKICAgICAgICB0ZXN0ZXIyLnJlYWRfZW9mKCkKICAgICAgICB0ZXN0ZXIyLmRpc2Nvbm5lY3QoKQoKICAgIGRlZiB0ZXN0XzJfdGVsbmV0KHNlbGYpOgogICAgICAgIGNvbmYgPSBURVNUX1NXSVRDSEVTWyJjaXNjbyJdCiAgICAgICAgdGVzdGVyMSA9IFRlbG5ldFRlc3RlcigidGVsbmV0LTEiLCAiMTI3LjAuMC4xIiwgY29uZlsidGVsbmV0Il0sICdyb290JywgJ3Jvb3QnKQogICAgICAgIHRlc3RlcjIgPSBUZWxuZXRUZXN0ZXIoInRlbG5ldC0yIiwgIjEyNy4wLjAuMSIsIGNvbmZbInRlbG5ldCJdLCAncm9vdCcsICdyb290JykKCjx8ZmltX2hvbGV8PgogICAgICAgIHRlc3RlcjEucmVhZCgibXlfc3dpdGNoIyIpCiAgICAgICAgdGVzdGVyMS53cml0ZSgidGVybWluYWwgbGVuZ3RoIDAiKQogICAgICAgIHRlc3RlcjEucmVhZCgibXlfc3dpdGNoIyIpCgogICAgICAgIHRlc3RlcjIuY29ubmVjdCgpCgogICAgICAgIHRlc3RlcjEud3JpdGUoInRlcm1pbmFsIGxlbmd0aCAwIikKICAgICAgICB0ZXN0ZXIxLnJlYWQoIm15X3N3aXRjaCMiKQoKICAgICAgICB0ZXN0ZXIyLndyaXRlKCJlbmFibGUiKQogICAgICAgIHRlc3RlcjIucmVhZCgiUGFzc3dvcmQ6ICIpCiAgICAgICAgdGVzdGVyMi53cml0ZV9pbnZpc2libGUoY29uZlsiZXh0cmEiXVsicGFzc3dvcmQiXSkKICAgICAgICB0ZXN0ZXIyLnJlYWQoIm15X3N3aXRjaCMiKQogICAgICAgIHRlc3RlcjIud3JpdGUoImNvbmZpZ3VyZSB0ZXJtaW5hbCIpCiAgICAgICAgdGVzdGVyMi5yZWFkbG4oIkVudGVyIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMsIG9uZSBwZXIgbGluZS4gIEVuZCB3aXRoIENOVEwvWi4iKQogICAgICAgIHRlc3RlcjIucmVhZCgibXlfc3dpdGNoKGNvbmZpZykjIikKCiAgICAgICAgdGVzdGVyMS53cml0ZSgidGVybWluYWwgbGVuZ3RoIDAiKQogICAgICAgIHRlc3RlcjEucmVhZCgibXlfc3dpdGNoIyIpCgogICAgICAgIHRlc3RlcjIud3JpdGUoImV4aXQiKQogICAgICAgIHRlc3RlcjIucmVhZCgibXlfc3dpdGNoIyIpCgogICAgICAgIHRlc3RlcjEud3JpdGUoImV4aXQiKQogICAgICAgIHRlc3RlcjEucmVhZF9lb2YoKQogICAgICAgIHRlc3RlcjEuZGlzY29ubmVjdCgpCgogICAgICAgIHRlc3RlcjIud3JpdGUoImV4aXQiKQogICAgICAgIHRlc3RlcjIucmVhZF9lb2YoKQogICAgICAgIHRlc3RlcjIuZGlzY29ubmVjdCgpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgdGVzdGVyMS5jb25uZWN0KCkKICAgICAgICB0ZXN0ZXIxLndyaXRlKCJlbmFibGUiKQogICAgICAgIHRlc3RlcjEucmVhZCgiUGFzc3dvcmQ6ICIpCiAgICAgICAgdGVzdGVyMS53cml0ZV9pbnZpc2libGUoY29uZlsiZXh0cmEiXVsicGFzc3dvcmQiXSkKPHxmaW1fZW5kfD4="]
["779ba9c568968f4530d524bbbf362b09dd788ecd-2","779ba9c568968f4530d524bbbf362b09dd788ecd","PHxmaW1fcHJlZml4fD4KCmltcG9ydCBudW1weSBhcyBucApmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdCwgbmFtZWR0dXBsZQpmcm9tIHRpbWUgaW1wb3J0IHRpbWUKU0VSSUFMX05VTUJFUiA9IDY1NDgKCmRlZiBnZXRfcG93ZXJfbGV2ZWwoeCwgeSwgc24pOgogICAgcmFja19pZCA9IHggKyAxMAogICAgcG93ZXIgPSB5ICogcmFja19pZAogICAgcG93ZXIgKz0gc24KICAgIHBvd2VyICo9IHJhY2tfaWQKICAgIGhkID0gaW50KHN0cihwb3dlcilbOi0yXVstMTpdKQogICAgcmV0dXJuIGhkIC0gNQoKIyBGdWVsIGNlbGwgYXQgIDEyMiw3OSwgZ3JpZCBzZXJpYWwgbnVtYmVyIDU3OiBwb3dlciBsZXZlbCAtNS4KIyBGdWVsIGNlbGwgYXQgMjE3LDE5NiwgZ3JpZCBzZXJpYWwgbnVtYmVyIDM5OiBwb3dlciBsZXZlbCAgMC4KIyBGdWVsIGNlbGwgYXQgMTAxLDE1MywgZ3JpZCBzZXJpYWwgbnVtYmVyIDcxOiBwb3dlciBsZXZlbCAgNC4KCmFzc2VydChnZXRfcG93ZXJfbGV2ZWwoMTIyLDc5LDU3KSA9PSAtNSkKYXNzZXJ0KGdldF9wb3dlcl9sZXZlbCgyMTcsMTk2LDM5KSA9PSAwKQphc3NlcnQoZ2V0X3Bvd2VyX2xldmVsKDEwMSwxNTMsNzEpID09IDQpCgoKIyBJIHdhcyBhYmxlIHRvIGRvIFBhcnQgMSBvbiBteSBvd24gZ3JpbmRpbmcgdGhyb3VnaCBhIGxpc3QKIyBvZiBsaXN0cyB0byByZXByZXNlbnQgdGhlIHBvd2VyIGdyaWQuIEhvd2V2ZXIsIGZvciBQYXJ0IDIgdGhhdAojIGJhc2ljIHN0cmF0ZWd5IHdhcyB3YXkgdG9vIHNsb3cgLSBJIGRpZG4ndCBoYXZlIHRoZSBwYXRpZW5jZQojIHRvIGxldCBpdCBmaW5pc2gsIHBsdXMgSSBoYWQgdG8gZ28gdG8gd29yay4uLgpkZWYgc29sdmVfZGF5XzExX3Nsb3cocnVuX3BhcnRfMj1GYWxzZSk6CiAgICBzdGFydCA9IHRpbWUoKQogICAgbWF4X3Bvd2VyID0gMAogICAgbWF4X3Bvd2VyX3BvaW50ID0gKDAsMCkKICAgIGdyaWQgPSBbWzAgZm9yIHggaW4gcmFuZ2UoMzAwKV0gZm9yIHkgaW4gcmFuZ2UoMzAwKV0KICAgIGZvciB4IGluIHJhbmdlKDMwMCk6CiAgICAgICAgZm9yIHkgaW4gcmFuZ2UoMzAwKToKICAgICAgICAgICAgZ3JpZFt4XVt5XSA9IGdldF9wb3dlcl9sZXZlbCh4KzEsIHkrMSwgU0VSSUFMX05VTUJFUikKICAgIAogICAgZm9yIHggaW4gcmFuZ2UoMjk4KToKICAgICAgICBmb3IgeSBpbiByYW5nZSgyOTgpOgogICAgICAgICAgICBwb3dlciA9IDAKICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMyk6CiAgICAgICAgICAgICAgICBmb3IgaiBpbiByYW5nZSgzKToKICAgICAgICAgICAgICAgICAgICBwb3dlciArPSBncmlkW3graV1beStqXQogICAgICAgICAgICBpZiBwb3dlciA+IG1heF9wb3dlcjoKICAgICAgICAgICAgICAgIG1heF9wb3dlciA9IHBvd2VyCiAgICAgICAgICAgICAgICBtYXhfcG93ZXJfcG9pbnQgPSAoeCx5KQogICAgcHJpbnQoIlNvbHV0aW9uIDExLjE6IiwgbWF4X3Bvd2VyX3BvaW50WzBdKzEsIG1heF9wb3dlcl9wb2ludFsxXSsxKQogICAgcHJpbnQoIlJ1bm5pbmcgdGltZToiLCB0aW1lKCkgLSBzdGFydCkKICAgIGlmIHJ1bl9wYXJ0XzI6CiAgICAgICAgc3RhcnQgPSB0aW1lKCkKICAgICAgICBtYXhfcG93ZXIgPSAwCiAgICAgICAgbWF4X3Bvd2VyX3BvaW50ID0gKDAsMCkKICAgICAgICBtYXhfc2l6ZSA9IDAKICAgICAgICBmb3Igc2l6ZSBpbiByYW5nZSgxLDMwMSk6CiAgICAgICAgICAgIHByaW50KCJDaGVja2luZyBzaXplOiIsIHNpemUpCiAgICAgICAgICAgICMgaWYgbWF4X3Bvd2VyID09IDEyMTogYnJlYWsKICAgICAgICAgICAgIyBUaGlzIGlzIGEgaGFjayB0byBuYXJyb3cgdGhlIHNlYXJjaCBib3gKICAgICAgICAgICAgIyBhcm91bmQgdGhlIGN1cnJlbnQgbWF4IHBvaW50IC0gaXQgd29ya2VkCiAgICAgICAgICAgICMgZm9yIG15IHNlcmlhbCBudW1iZXIgYnV0IGNhbid0IGd1YXJhbnRlZQogICAgICAgICAgICB4X3N0YXJ0ID0gbWF4KDAsIG1heF9wb3dlcl9wb2ludFswXSAtIDMwKQogICAgICAgICAgICBmb3IgeCBpbiByYW5nZSh4X3N0YXJ0LCAzMDEgLSBzaXplKToKICAgICAgICAgICAgICAgIHlfc3RhcnQgPSBtYXgoMCwgbWF4X3Bvd2VyX3BvaW50WzFdIC0gMzApCiAgICAgICAgICAgICAgICBmb3IgeSBpbiByYW5nZSh5X3N0YXJ0LCAzMDEgLSBzaXplKToKICAgICAgICAgICAgICAgICAgICBwb3dlciA9IDAKICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShzaXplKToKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2Uoc2l6ZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3dlciArPSBncmlkW3graV1beStqXQogICAgICAgICAgICAgICAgICAgIGlmIHBvd2VyID4gbWF4X3Bvd2VyOgogICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiTmV3IG1heDoiLCBwb3dlciwgImF0IiwgKHgrMSx5KzEpLCBzaXplKQogICAgICAgICAgICAgICAgICAgICAgICBtYXhfcG93ZXIgPSBwb3dlcgogICAgICAgICAgICAgICAgICAgICAgICBtYXhfcG93ZXJfcG9pbnQgPSAoeCx5KQogICAgICAgICAgICAgICAgICAgICAgICBtYXhfc2l6ZSA9IHNpemUKICAgICAgICBwcmludCgiU29sdXRpb24gMTEuMjoiLCBtYXhfcG93ZXJfcG9pbnRbMF0rMSwgbWF4X3Bvd2VyX3BvaW50WzFdKzEsIG1heF9zaXplKQogICAgICAgIHByaW50KCJSdW5uaW5nIHRpbWU6IiwgdGltZSgpIC0gc3RhcnQpCgojIEkgZW5kZWQgdXAgY3JpYmJpbmcgdGhpcyBzb2x1dGlvbiBmcm9tCiMgaHR0cHM6Ly9naXRodWIuY29tL3N0YWN5YnJvY2svYWR2ZW50LW9mLWNvZGUvYmxvYi9tYXN0ZXIvMjAxOC8xMS9wb3dlci5weQojIEl0IGlzIHRoZSBzYW1lIGJhc2ljIGlkZWEsIGJ1dCBzcGVlZGVkIHVwIGNvbnNpZGVyYWJseSBieSB1c2luZwojIGRlZmF1bHRkaWN0IGFuZCBudW1weSB0byBoZWxwIHdpdGggdGhlIGdydW50d29yay4gCmRlZiBzb2x2ZV9kYXlfMTFfbWVkaXVtKCk6CiAgICBzdGFydCA9IHRpbWUoKQogICAgZ3JpZCA9IG5wLnplcm9zKCgzMDAsMzAwKSkKICAgIGZvciAoeF8seV8pLCBwb3dlciBpbiBucC5uZGVudW1lcmF0ZShncmlkKToKICAgICAgICBncmlkW3lfXVt4X10gPSBnZXRfcG93ZXJfbGV2ZWwoeF8rMSwgeV8rMSwgU0VSSUFMX05VTUJFUikKCiAgICB0aHJlZXMgPSBkZWZhdWx0ZGljdChpbnQpCiAgICBmb3IgeSBpbiByYW5nZSgwLCAyOTgpOgogICAgICAgIGZvciB4IGluIHJhbmdlKDAsIDI5OCk6CiAgICAgICAgICAgIHRocmVlc1soeCsxLHkrMSldID0gbnAuc3VtKGdyaWRbeTp5KzMsIHg6eCszXSkKICAgIHByaW50KCdTb2x1dGlvbiAxMS4xOicsIG1heCh0aHJlZXMsIGtleT10aHJlZXMuZ2V0KSkKICAgIHByaW50KCJSdW5uaW5nIHRpbWU6IiwgdGltZSgpIC0gc3RhcnQpCiAgICBzdGFydCA9IHRpbWUoKQoKICAgIHNxdWFyZXMgPSBkZWZhdWx0ZGljdChpbnQpCiAgICBmb3Igc2l6ZSBpbiByYW5nZSgxLCAzMDEpOgogICAgICAgIG1heF9wb3dlciA9IDAKICAgICAgICBQb3dlciA9IG5hbWVkdHVwbGUoJ1Bvd2VyJywgJ3ggeSBzaXplIHBvd2VyJykKICAgICAgICBmb3IgeSBpbiByYW5nZSgwLCAzMDEtc2l6ZSk6CiAgICAgICAgICAgIGZvciB4IGluIHJhbmdlKDAsIDMwMS1zaXplKToKICAgICAgICAgICAgICAgIHBvd2VyID0gbnAuc3VtKGdyaWRbeTp5K3NpemUsIHg6eCtzaXplXSkKICAgICAgICAgICAgICAgIGlmIHBvd2VyID4gbWF4X3Bvd2VyOgogICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgPSBQb3dlcih4LHksc2l6ZSxwb3dlcikKICAgICAgICAgICAgICAgICAgICBtYXhfcG93ZXIgPSBwb3dlcgogICAgICAgIHNxdWFyZXNbKHJ1bm5pbmcueCsxLCBydW5uaW5nLnkrMSwgcnVubmluZy5zaXplKV0gPSBydW5uaW5nLnBvd2VyCiAgICBwcmludCgnU29sdXRpb24gMTEuMjonLCBtYXgoc3F1YXJlcywga2V5PXNxdWFyZXMuZ2V0KSkKICAgIHByaW50KCJSdW5uaW5nIHRpbWU6IiwgdGltZSgpIC0gc3RhcnQpCgojIFRoaXMgc29sdXRpb24gZnJvbQojIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRvdXJhbGl4L2FkdmVudC1vZi1jb2RlLTIwMTgvYmxvYi9tYXN0ZXIvZGF5LTExL3BhcnQtMi9zaWx2ZXN0cmUucHkKIyBpcyBhbG1vc3QgaW5zdGFudCwgYnV0IHdoZW4gSSBsb29rIGF0IHRoZSBjb2RlLCAKIyBJIGRvbid0IHVuZGVyc3RhbmQgd2hhdCBpdCBpcyBkb2luZywgc28uLi4KZGVmIHNvbHZlX2RheV8xMV9wYXJ0XzJfZmFzdCgpOgogICAgc3RhcnQgPSB0aW1lKCkKICAgIHJhY2tfaWQgPSBucC5hcmFuZ2UoMSwgMzAxKS5yZXNoYXBlKC0xLCAxKSArIDEwCiAgICBncmlkID0gcmFja19pZCAqIG5wLmFyYW5nZSgxLCAzMDEpLnJlc2hhcGUoMSwgLTEpICMgYnJvYWRjYXN0aW5nCiAgICBncmlkICs9IFNFUklBTF9OVU1CRVIKICAgIGdyaWQgKj0gcmFja19pZAogICAgZ3JpZCAlPSAxMDAwCiAgICBncmlkIC8vPSAxMDAKICAgIGdyaWQgLT0gNQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgWCA9IG5wLnplcm9zKCgzMDEsIDMwMSkpCiAgICBYWzE6LCAxOl0gPSBncmlkLmN1bXN1bShheGlzPTApLmN1bXN1bShheGlzPTEpCgogICAgbWF4aW11bSA9IDAKPHxmaW1fZW5kfD4="]
["d6e013493a3561a0485f20e02c4ed0f5cabf55c3-3","d6e013493a3561a0485f20e02c4ed0f5cabf55c3","PHxmaW1fcHJlZml4fD4KZnJvbSBsaWIudXRpbCBpbXBvcnQgVXRpbApmcm9tIGxpYi53YWxsZXQgaW1wb3J0IFdhbGxldApmcm9tIGxpYi50YW5nbGUgaW1wb3J0IFRhbmdsZQppbXBvcnQganNvbgoKdXRpbHMgPSBVdGlsKCkKCgpjbGFzcyBOb2RlOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlZWQsICphcmdzKToKICAgICAgICBzZWxmLnNlZWQgPSBzZWVkCiAgICAgICAgc2VsZi53YWxsZXQgPSBXYWxsZXQodXRpbHMuaGFzaChzdHIoc2VsZi5zZWVkKSkpCiAgICAgICAgc2VsZi5uZWlnaGJvdXJzID0gc2V0KCkKCiAgICAgICAgIyMjIwogICAgICAgICMgc2VsZi5EQUcgPSB7fQogICAgICAgICMgcm9vdF90cmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uKCcwMDAwJywgJ3Jvb3QnLCAyNTAwMDAwMDAwMCkgICAgICAgIAogICAgICAgICMgc2VsZi5hdHRhY2hfdHJhbnNhY3Rpb24ocm9vdF90cmFuc2FjdGlvbiwgWydyb290J10pCiAgICAgICAgc2VsZi50YW5nbGUgPSBUYW5nbGUoKQoKICAgICMgU2FtcGxlIGlucHV0IEpTT04gZGF0YTsKICAgICMgeyJuZWlnaGJvdXJzIjogW3siaXAiOiAibG9jYWxob3N0IiwgInBvcnQiOiA4MDgwfSwgeyJpcCI6ICIxOTIuMTY4LjEuMiIsICJwb3J0IjogMTIzNH1dfQogICAgZGVmIHJlZ2lzdGVyX25laWdoYm91cnMoc2VsZiwganNvbmRhdGEpOgogICAgICAgIGxpc3RvZm5laWdob3VycyA9IGpzb25kYXRhWyJuZWlnaGJvdXJzIl0KICAgICAgICBwcmludCAiWytdIFJlZ2lzdGVyaW5nICVkIG5laWdoYm91cnMuIiAlIGxlbihsaXN0b2ZuZWlnaG91cnMpCgogICAgICAgICMgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQwOTc5NTkvYWRkLWEtZGljdGlvbmFyeS10by1hLXNldC13aXRoLXVuaW9uCiAgICAgICAgZm9yIG4gaW4gbGlzdG9mbmVpZ2hvdXJzOgogICAgICAgICAgICAjIGZvciBlYWNoIG5ldyBuZWlnaGJvdXIsIGFkZCB0dXBsZXMgbGlrZSAoKCJpcCI6ICIxOTIuMTY4LjEuMiIpLCAoInBvcnQiOiA4MDgwKSkKICAgICAgICAgICAgc2VsZi5uZWlnaGJvdXJzLmFkZCh0dXBsZShuLml0ZW1zKCkpKQogICAgICAgIHByaW50ICJbK10gVG90YWwgbmVpZ2hib3VycyBvZiBub2RlOiAlZCIgJSBsZW4oc2VsZi5uZWlnaGJvdXJzKQoKICAgICAgICBzZWxmLnN5bmNfbmVpZ2hib3VyKCkKCiAgICAgICAgcmV0dXJuIHsnbXNnJzogJyVkJyAlIGxlbihzZWxmLm5laWdoYm91cnMpICsgJyBub2RlcyBhZGRlZCBhcyBuZWlnaGJvdXJzJ30KCiAgICBkZWYgc3luY19uZWlnaGJvdXIoc2VsZik6CiAgICAgICAgIyBUT0RPOiBmb3IgZWFjaCBpcDpwb3J0IHBhaXIgaW4gdGhlIHNlbGYubmVpZ2hib3VyczoKICAgICAgICAjICAgICAgIC0gQ2hlY2sgaWYgdGhleSBhcmUgdXAvYWxpdmUgKG1heWJlIHBpbmcgZmlyc3QpCiAgICAgICAgIyAgICAgICAtIGlmIHRoZXkgYXJlIHVwLCBhc2sgdGhlbSBmb3IgdGhlaXIgVGFuZ2xlLgogICAgICAgIHByaW50ICJbK10gU3luY2luZyB3aXRoIE5laWdoYm91cnMuLi4iCiAgICAgICAgcGFzcwoKICAgIGRlZiB3cml0ZVRhbmdsZVRvSlNPTmZpbGUoc2VsZik6CiAgICAgICAgZmlsZW5hbWUgPSAiZGIvdGFuZ2xlZGIuanNvbiIKICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3JykgYXMgZjoKICAgICAgICAgICAganNvbi5kdW1wKHNlbGYuZ2V0VGFuZ2xlQXNKU09OZGljdCgpLCBmKQoKICAgIGRlZiByZWFkVGFuZ2xlRnJvbUpTT05maWxlKHNlbGYpOgogICAgICAgIGZpbGVuYW1lID0gImRiL3RhbmdsZWRiLmpzb24iCiAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicpIGFzIGY6CiAgICAgICAgICAgIHRhbmdsZUpTT04gPSBqc29uLmxvYWQoZikKICAgICAgICByZXR1cm4gdGFuZ2xlSlNPTgoKICAgIGRlZiBnZXRUYW5nbGVBc0pTT05kaWN0KHNlbGYpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VyaWFsaXphYmxlX2Zvcm1hdCA9IHt9CiAgICAgICAgZm9yIChrLCB2KSBpbiBzZWxmLnRhbmdsZS5EQUcuaXRlbXMoKToKICAgICAgICAgICAgc2VyaWFsaXphYmxlX2Zvcm1hdC51cGRhdGUoe2s6IHYuZ2V0dHJhbnNhY3Rpb25hc2RpY3QoKX0pCgo8fGZpbV9lbmR8Pg=="]
["741ec7f1b8243769f716eb8ee57649182f34b003-2","741ec7f1b8243769f716eb8ee57649182f34b003","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKZGlzcGxheSA9IHBpM2QuRGlzcGxheS5jcmVhdGUoc2FtcGxlcz00KQpkaXNwbGF5LnNldF9iYWNrZ3JvdW5kKDAsMCwwLDApCmNhbSA9IHBpM2QuQ2FtZXJhKGlzXzNkPVRydWUpCnNoYWRlciA9IHBpM2QuU2hhZGVyKCJ1dl9saWdodCIpCgpwcmludCgiRE9ORSIpCjx8ZmltX3N1ZmZpeHw+CnByaW50KCJTVEFSVCIpCmZyb20gcm90YXRpbmdDYW1lcmEgaW1wb3J0IFJvdGF0aW5nQ2FtZXJhCgpwaTNkPVJvdGF0aW5nQ2FtZXJhLmdldHBpM2QoKQo8fGZpbV9lbmR8Pg=="]
["69606269c7d6f0961d57f59e8dcf7e8f893dfc9e-4","69606269c7d6f0961d57f59e8dcf7e8f893dfc9e","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKQHJlZ2lzdHJ5LlJlZ2lzdGVyZWRDbGFzcwpjbGFzcyBCYXNlKG9iamVjdCk6CiAgIiIiRHVtbXkgYmFzZSBjbGFzcy4iIiIKCiAgZGVmIEdldChzZWxmKToKICAgICIiIk92ZXJyaWRkZW4gaW4gc3ViY2xhc3Nlcy4iIiIKICAgIHJldHVybiBOb25lCjx8ZmltX3N1ZmZpeHw+CiIiIkEgZHVtbXkgYmFzZSBjbGFzcyBmb3IgdXNlIGluIFJlZ2lzdHJ5VGVzdC4iIiIKCmZyb20gc3ludGF4bmV0LnV0aWwgaW1wb3J0IHJlZ2lzdHJ5Cgo8fGZpbV9lbmR8Pg=="]
["7aec0cc19c3157a64f6a4be580841c82830021a6-4","7aec0cc19c3157a64f6a4be580841c82830021a6","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMS4xMiBvbiAyMDIxLTA2LTE1IDIwOjExCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zCmZyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsoImNvc3RfbW9kZWxzIiwgIjAwMDJfYXV0b18yMDIxMDMxOF8xNTE0IildCgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgZmllbGQ9bW9kZWxzLlRleHRGaWVsZChjaG9pY2VzPVsoIm1lbW9yeSIsICJtZW1vcnkiKSwgKCJjcHUiLCAiY3B1IildLCBkZWZhdWx0PSJjcHUiKSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQWRkRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9ImNvc3Rtb2RlbGF1ZGl0IiwKICAgICAgICAgICAgbmFtZT0iZGlzdHJpYnV0aW9uIiwKICAgICAgICAgICAgZmllbGQ9bW9kZWxzLlRleHRGaWVsZChjaG9pY2VzPVsoIm1lbW9yeSIsICJtZW1vcnkiKSwgKCJjcHUiLCAiY3B1IildLCBkZWZhdWx0PSJjcHUiKSwKICAgICAgICApLAogICAgXQo8fGZpbV9zdWZmaXh8PgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFkZEZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSJjb3N0bW9kZWwiLAogICAgICAgICAgICBuYW1lPSJkaXN0cmlidXRpb24iLAo8fGZpbV9lbmR8Pg=="]
["8e79c88207ae8c75689dd2245bf41463b28405eb-4","8e79c88207ae8c75689dd2245bf41463b28405eb","PHxmaW1fcHJlZml4fD4KZnJvbSBsaWJzLnRyZWUuaXRlcmF0b3IgaW1wb3J0IEFic3RyYWN0VHJlZUl0ZXJhdG9yCgoKY2xhc3MgU2VjcmV0VHJlZUl0ZXJhdG9yKEFic3RyYWN0VHJlZUl0ZXJhdG9yKToKCiAgICBkZWYgZ2V0X3BhcmVudF9vYmplY3Qoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X29iamVjdCgpLmNhcmQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiBnZXRfY2hpbGRfb2JqZWN0cyhzZWxmKToKICAgICAgICByZXR1cm4gW10KPHxmaW1fZW5kfD4="]
["7425e6edbabbcc170f6c5529aa8d4874e50e1bc4-1","7425e6edbabbcc170f6c5529aa8d4874e50e1bc4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CgojIFN0YXNzdW4ncyBTRUQgYW5hbHlzaXMgZm9yIFJzdGFyLiBzcGVjdHJvc2NvcGljIGxvZ2cgZm9yIE1zdGFyLiAgU2V0IHRoZQojIGVycm9yIGJhcnMgeE4sIHRvIGxldCB0cmFuc2l0IGRhdGEgc2hvdWxkIHNwZWFrIGZvciBpdHNlbGYsIGF0IGxlYXN0IGEgYml0CiMgbW9yZS4KCiMgUlNUQVIgPSAxLjA0OQojIFJTVEFSX1NUREVWID0gMC4wMTkqMwojIE1TVEFSID0gMS4yMSAgIyBGcm9tIGxvZ2cgYW5kIFJzdGFyLiBTZWVtcyBoaWdoLgojIE1TVEFSX1NUREVWID0gMC4xMCoyCiMgTE9HRyA9IDQuNDggICMgcHJvdmVuYW5jZTogQ0hJUk9OIHNwZWN0cm9zY29weS9aaG91LgojIExPR0dfU1RERVYgPSAwLjAzKjMKIyBURUZGID0gNTk0NiAjIENISVJPTiBzcGVjdHJhCgojIEZST00gTUlTVCBJU09DSFJPTkVTIE9OIElDIDI2MDIKUlNUQVIgPSAxLjAyMgpSU1RBUl9TVERFViA9IDAuMDgzICMgTUlTVCtQQVJTRUMgc3lzdGVtYXRpYyB1bmMuICAwLjAxNQpNU1RBUiA9IDEuMTE4Ck1TVEFSX1NUREVWID0gMC4wNTkgIyBNSVNUK1BBUlNFQyBzeXN0ZW1hdGljIHVuYy4gIDAuMDExCkxPR0cgPSA0LjQ2NwpMT0dHX1NUREVWID0gMC4wNDkgIyBNSVNUK1BBUlNFQyBzeXN0ZW1hdGljIHVuYy4gIDAuMDEwClRFRkYgPSA2MDQ3ClRFRkZfU1RERVYgPSAxNjIgIyBNSVNUK1BBUlNFQyBzeXN0ZW1hdGljIHVuYy4gIDQwCgojIE1JU1QrUEFSU0VDIElTT0NIUk9ORVMKCkxJX0VXID0gMTU0ICMgbUEKUF9ST1QgPSAzLjAwNCAjIGRheXMsIGZyb20gTG9tYi1TY2FyZ2xlIGZpdC4KClJPVF9BTVAgPSAwLjAyNyAjIGkuZS4gMjcgcGFydHMgcGVyIHRob3VzYW5kcywgcGVhay10by1wZWFrLCBieSBleWUKClZTSU5JID0gMTcuNDgzICMga20vcywgZnJvbSBhdmVyYWdlIG9mIDYgQ0hJUk9OIHNwZWN0cmEKVlNJTklfU1RERVYgPSAwLjEzNCAjIGttL3MsIGRpdHRvLgoKUlZfUEVBS19UT19QRUFLX0pJVFRFUiA9IFZTSU5JKlJPVF9BTVAKS19KSVRURVIgPSBSVl9QRUFLX1RPX1BFQUtfSklUVEVSICogMC41CgoKZGVmIGluaXRpYWxpemVfcHJpb3JfZChtb2RlbGNvbXBvbmVudHMsIGRhdGFzZXRzPU5vbmUpOgoKICAgICMgUF9vcmIgPSA4LjMyNDY3ICMgU1BPQywgKy8tIDRlLTQKICAgICMgdDBfb3JiID0gMTU3NC4yNzM4ICMgU1BPQywgKy8tIDFlLTMKCiAgICBQX29yYiA9IDguMzI0ODkKICAgIHQwX29yYiA9IDE1NzQuMjczODAKCiAgICAjIFBfb3JiID0gOC4zMjQ4OTcyICMgU0cxLCArLy0gMy40ZS00CiAgICAjIHQwX29yYiA9IDE1NzQuMjczODMwNCAgIyBTRzEsICsvLSAxLjFlLTMsICBCVEpECgogICAgIyBQX29yYiA9IDguMzI4ICMgVEVTUyArIEVsIFNhdWNlIGZpdAogICAgIyB0MF9vcmIgPSAxNTc0LjI2NDYgIyBwbGF1c2libGUgdHJhbnNpdAoKICAgIHJwX3JzID0gMC4wODY1ICMgKy8tIDAuMDMwMwoKICAgICMgVmlzdWFsIGluc3BlY3Rpb24KICAgIFBfcm90ID0gMy4zICMgKy8tIDEgKGJ5IGV5ZSkKICAgIHQwX3JvdCA9IE5vbmUgIyBpZGssIHdoYXRldmVyIHBoYXNlLiBpdCdzIG5vdCBldmVuIGEgbW9kZWwgcGFyYW1ldGVyCiAgICBhbXAgPSAxZTMqMS41ZS0yICMgcHJpbWFyeSBtb2RlIGFtcGxpdHVkZSBbcHB0XS4gcGVhayB0byBwZWFrIGlzIGEgYml0IG92ZXIgMiUKICAgIGFtcF9taXggPSAwLjUgIyBiZXR3ZWVuIDAgYW5kIDEKICAgIGxvZ19RMCA9IG5wLmxvZygxZTEpICMgUSBvZiBzZWNvbmRhcnkgb3NjaWxsYXRpb24uIHdpZGUgcHJpb3IKICAgIGxvZ19kZWx0YVEgPSBucC5sb2coMWUxKSAjIHByaW1hcnkgbW9kZSBnZXRzIGhpZ2hlciBxdWFsaXR5CgogICAgcHJpb3JfZCA9IE9yZGVyZWREaWN0KCkKCiAgICBmb3IgbW9kZWxjb21wb25lbnQgaW4gbW9kZWxjb21wb25lbnRzOgoKICAgICAgICBpZiAnYWxsdHJhbnNpdCcgaW4gbW9kZWxjb21wb25lbnQ6CiAgICAgICAgICAgIHByaW9yX2RbJ3BlcmlvZCddID0gUF9vcmIKICAgICAgICAgICAgcHJpb3JfZFsndDAnXSA9IHQwX29yYgogICAgICAgICAgICBpZiAncXVhZGRlcHRodmFyJyBub3QgaW4gbW9kZWxjb21wb25lbnRzOgogICAgICAgICAgICAgICAgcHJpb3JfZFsnbG9nX3InXSA9IG5wLmxvZyhycF9ycykKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICMgTk9URTogdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyB2ZXJ5IDgzNy1zcGVjaWZpYy4KICAgICAgICAgICAgICAgIHByaW9yX2RbJ2xvZ19yX1RiYW5kJ10gPSBucC5sb2cocnBfcnMpCiAgICAgICAgICAgICAgICBwcmlvcl9kWydsb2dfcl9CYmFuZCddID0gbnAubG9nKHJwX3JzKQogICAgICAgICAgICAgICAgcHJpb3JfZFsnbG9nX3JfUmJhbmQnXSA9IG5wLmxvZyhycF9ycykKPHxmaW1faG9sZXw+CgogICAgICAgICAgICAjIFQtYmFuZCBUZWZmIDU5MDBLLCBsb2dnIDQuNTAgKENsYXJldCsxOCkKICAgICAgICAgICAgcHJpb3JfZFsndVswXSddID0gMC4zMjQ5CiAgICAgICAgICAgIHByaW9yX2RbJ3VbMV0nXSA9IDAuMjM1CgoKICAgICAgICAgICAgZm9yIG4sIChuYW1lLCAoeCwgeSwgeWVyciwgdGV4cCkpIGluIGVudW1lcmF0ZShkYXRhc2V0cy5pdGVtcygpKToKICAgICAgICAgICAgICAgIHByaW9yX2RbZid7bmFtZX1fbWVhbiddID0gMQoKICAgICAgICBpZiAncXVhZCcgaW4gbW9kZWxjb21wb25lbnQ6CiAgICAgICAgICAgIGZvciBuLCAobmFtZSwgKHgsIHksIHllcnIsIHRleHApKSBpbiBlbnVtZXJhdGUoZGF0YXNldHMuaXRlbXMoKSk6CiAgICAgICAgICAgICAgICBpZiBuYW1lID09ICd0ZXNzJzoKICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICMgbW9kZWwgW3BlciBncm91bmQtdHJhbnNpdF0gaXMgOgogICAgICAgICAgICAgICAgICAgICMgYTArIGExKih0aW1lLW1pZHRpbWUpICsgYTIqKHRpbWUtbWlkdGltZSleMi4KICAgICAgICAgICAgICAgICAgICAjIGEwIGlzIHRoZSBtZWFuLCBhbHJlYWR5IGFib3ZlLgogICAgICAgICAgICAgICAgICAgIHByaW9yX2RbZid7bmFtZX1fYTEnXSA9IDAKICAgICAgICAgICAgICAgICAgICBwcmlvcl9kW2Yne25hbWV9X2EyJ10gPSAwCgogICAgICAgIGlmIG1vZGVsY29tcG9uZW50IG5vdCBpbiBbJ2FsbHRyYW5zaXQnLCAnb25ldHJhbnNpdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxsaW5kaXZ0cmFuc2l0JywgJ3Rlc3NpbmRpdnRyYW5zaXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29kZGluZGl2dHJhbnNpdCcsICdldmVuaW5kaXZ0cmFuc2l0J106CiAgICAgICAgICAgIGlmICd0cmFuc2l0JyBpbiBtb2RlbGNvbXBvbmVudDoKICAgICAgICAgICAgICAgIHByaW9yX2RbJ3BlcmlvZCddID0gUF9vcmIKICAgICAgICAgICAgICAgIHByaW9yX2RbJ3QwJ10gPSB0MF9vcmIKICAgICAgICAgICAgICAgICMgcHJpb3JfZFsnciddID0gcnBfcnMKICAgICAgICAgICAgICAgIHByaW9yX2RbJ2xvZ19yJ10gPSBucC5sb2cocnBfcnMpCiAgICAgICAgICAgICAgICBwcmlvcl9kWydiJ10gPSAwLjUgICMgaW5pdGlhbGl6ZSBmb3IgYnJvYWQgcHJpb3IKICAgICAgICAgICAgICAgIHByaW9yX2RbJ3VbMF0nXSA9IDAuMzI0OQogICAgICAgICAgICAgICAgcHJpb3JfZFsndVsxXSddID0gMC4yMzUKICAgICAgICAgICAgICAgIHByaW9yX2RbJ21lYW4nXSA9IDEKICAgICAgICAgICAgICAgIHByaW9yX2RbJ3Jfc3RhciddID0gUlNUQVIKICAgICAgICAgICAgICAgIHByaW9yX2RbJ2xvZ2dfc3RhciddID0gTE9HRwoKICAgICAgICBpZiBtb2RlbGNvbXBvbmVudCA9PSAnb25ldHJhbnNpdCc6CiAgICAgICAgICAgIHByaW9yX2RbJ3BlcmlvZCddID0gOC4zMjQ4MwogICAgICAgICAgICBwcmlvcl9kWyd0MCddID0gMTU3NC4yNzI3MwogICAgICAgICAgICAjIHByaW9yX2RbJ3InXSA9IHJwX3JzCiAgICAgICAgICAgIHByaW9yX2RbJ2xvZ19yJ10gPSBucC5sb2cocnBfcnMpCiAgICAgICAgICAgIHByaW9yX2RbJ2InXSA9IDAuNSAgIyBpbml0aWFsaXplIGZvciBicm9hZCBwcmlvcgogICAgICAgICAgICBwcmlvcl9kWyd1WzBdJ10gPSAwLjMyNDkKICAgICAgICAgICAgcHJpb3JfZFsndVsxXSddID0gMC4yMzUKICAgICAgICAgICAgcHJpb3JfZFsncl9zdGFyJ10gPSBSU1RBUgogICAgICAgICAgICBwcmlvcl9kWydsb2dnX3N0YXInXSA9IExPR0cKICAgICAgICAgICAgZm9yIG4sIChuYW1lLCAoeCwgeSwgeWVyciwgdGV4cCkpIGluIGVudW1lcmF0ZShkYXRhc2V0cy5pdGVtcygpKToKICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gJ3Rlc3MnOgogICAgICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKICAgICAgICAgICAgICAgICMgbW9kZWwgW3BlciBncm91bmQtdHJhbnNpdF0gaXMgOgogICAgICAgICAgICAgICAgIyBhMCsgYTEqKHRpbWUtbWlkdGltZSkgKyBhMioodGltZS1taWR0aW1lKV4yLgogICAgICAgICAgICAgICAgIyBhMCBpcyB0aGUgbWVhbiwgYWxyZWFkeSBhYm92ZS4KICAgICAgICAgICAgICAgIHByaW9yX2RbZid7bmFtZX1fbWVhbiddID0gMQogICAgICAgICAgICAgICAgcHJpb3JfZFtmJ3tuYW1lfV9hMSddID0gMAogICAgICAgICAgICAgICAgcHJpb3JfZFtmJ3tuYW1lfV9hMiddID0gMAoKICAgICAgICBpZiBtb2RlbGNvbXBvbmVudCBpbiBbJ2FsbGluZGl2dHJhbnNpdCcsICd0ZXNzaW5kaXZ0cmFuc2l0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29kZGluZGl2dHJhbnNpdCcsICdldmVuaW5kaXZ0cmFuc2l0J106CiAgICAgICAgICAgIHByaW9yX2RbJ3BlcmlvZCddID0gUF9vcmIKICAgICAgICAgICAgcHJpb3JfZFsndDAnXSA9IHQwX29yYgogICAgICAgICAgICBwcmlvcl9kWydsb2dfciddID0gbnAubG9nKHJwX3JzKQogICAgICAgICAgICBwcmlvcl9kWydiJ10gPSAwLjk1CgogICAgICAgICAgICBwcmlvcl9kWydyX3N0YXInXSA9IFJTVEFSCiAgICAgICAgICAgIHByaW9yX2RbJ2xvZ2dfc3RhciddID0gTE9HRwoKICAgICAgICAgICAgIyBULWJhbmQgVGVmZiA2MDAwSywgbG9nZyA0LjUwIChDbGFyZXQrMTgpCiAgICAgICAgICAgIHByaW9yX2RbJ3VbMF0nXSA9IDAuMzI0OQogICAgICAgICAgICBwcmlvcl9kWyd1WzFdJ10gPSAwLjIzNQogICAgICAgICAgICAjIE5PVEU6IGRlcHJlY2F0ZWQ7IGlmIHVzaW5nIHhvLmRpc3RyaWJ1dGlvbnMuUXVhZExpbWJEYXJrCiAgICAgICAgICAgICMgcHJpb3JfZFsndSddID0gWzAuMzI0OSwgMC4yMzVdCgogICAgICAgICAgICBmb3IgbiwgKG5hbWUsICh4LCB5LCB5ZXJyLCB0ZXhwKSkgaW4gZW51bWVyYXRlKGRhdGFzZXRzLml0ZW1zKCkpOgogICAgICAgICAgICAgICAgIyBtZWFuICsgYTEqKHRpbWUtbWlkdGltZSkgKyBhMioodGltZS1taWR0aW1lKV4yLgogICAgICAgICAgICAgICAgcHJpb3JfZFtmJ3tuYW1lfV9tZWFuJ10gPSAxCiAgICAgICAgICAgICAgICBwcmlvcl9kW2Yne25hbWV9X2ExJ10gPSAwCiAgICAgICAgICAgICAgICBwcmlvcl9kW2Yne25hbWV9X2EyJ10gPSAwCgogICAgICAgIGlmICdydicgaW4gbW9kZWxjb21wb25lbnQ6CiAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgICAgICAgaWYgJ2dwJyBpbiBtb2RlbGNvbXBvbmVudDoKICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICAgICAgICBpZiAnc2luY29zJyBpbiBtb2RlbGNvbXBvbmVudDoKICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigndHJ5IGJpbGx5JykKCiAgICByZXR1cm4gcHJpb3JfZAo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBwcmlvcl9kWydiJ10gPSAwLjUgICMgaW5pdGlhbGl6ZSBmb3IgYnJvYWQgcHJpb3IKCiAgICAgICAgICAgIHByaW9yX2RbJ3Jfc3RhciddID0gUlNUQVIKICAgICAgICAgICAgcHJpb3JfZFsnbG9nZ19zdGFyJ10gPSBMT0dHCjx8ZmltX2VuZHw+"]
["2d028544099a90a110adfa3c6f6536b5e232c39a-3","2d028544099a90a110adfa3c6f6536b5e232c39a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwpmcm9tIHR5cGluZyBpbXBvcnQgRGljdCwgTGlzdApmcm9tIGVudW0gaW1wb3J0IEVudW0KaW1wb3J0IG9wZXJhdG9yCmltcG9ydCBpdGVydG9vbHMKaW1wb3J0IGpzb24KaW1wb3J0IHRleHR3cmFwCgpmcm9tIC5kYXRhc3RydWN0dXJlcyBpbXBvcnQgQnJhbmNoU3RhdHVzLCBNZXJnZVN0YXR1cywgQ29uZmxpY3RUeXBlCgoKZGVmIHByaW50X2pzb24oYnJhbmNoX3N0YXR1c2VzOiBbQnJhbmNoU3RhdHVzXSkgLT4gTm9uZToKICAgICcnJ1ByaW50IGFsbCBicmFuY2hlcyBhcyBhIEpTT04gYXJyYXkuCgogICAgQWx3YXlzIHByaW50cyBjb25mbGljdGluZyBkaWZmcywgaWYgYW55LCBiZWNhdXNlIGl0IHdhcwogICAgc2ltcGxlciB0byBpbXBsZW1lbnQuCiAgICAnJycKICAgIGpzb24uZHVtcChqc29uaWZ5KGJyYW5jaF9zdGF0dXNlcyksIHN5cy5zdGRvdXQpCiAgICBwcmludCgnJykKCgpkZWYgcHJpbnRfcGxhaW4oCiAgICAgICAgYnJhbmNoX3N0YXR1c2VzOiBbQnJhbmNoU3RhdHVzXSwKICAgICAgICBvdXRwdXRfZGlmZnM6IGJvb2wgPSBGYWxzZSkgLT4gTm9uZToKICAgICcnJ1ByaW50IGJyYW5jaGVzIGdyb3VwZWQgYnkgbWVyZ2Ugc3RhdHVzIGluIGh1bWFuLXJlYWRhYmxlIGZvcm1hdC4KICAgICcnJwogICAgdW5pbnRlcmVzdGluZ19zdGF0dXNlcyA9ICgKICAgICAgICBNZXJnZVN0YXR1cy5ub19jb21tb25fYW5jZXN0b3IsCiAgICAgICAgTWVyZ2VTdGF0dXMubm9fY29uZmxpY3RzLAogICAgICAgIE1lcmdlU3RhdHVzLmNvbmZsaWN0c193aXRoX21hc3RlciwKICAgICkKCiAgICBncm91cGVkX3N0YXR1c2VzID0gX2dyb3VwX2JyYW5jaF9zdGF0dXNlcyhicmFuY2hfc3RhdHVzZXMpCiAgICBmb3IgbWVyZ2Vfc3RhdHVzIGluIHNvcnRlZChncm91cGVkX3N0YXR1c2VzLmtleXMoKSk6CiAgICAgICAgZ3JvdXBfYnJhbmNoZXMgPSBncm91cGVkX3N0YXR1c2VzW21lcmdlX3N0YXR1c10KICAgICAgICBpZiBub3QgZ3JvdXBfYnJhbmNoZXM6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgcHJpbnQobWVyZ2Vfc3RhdHVzLnZhbHVlKQogICAgICAgIHByaW50KCctJyAqIDYwKQogICAgICAgIGlmIG1lcmdlX3N0YXR1cyBpbiB1bmludGVyZXN0aW5nX3N0YXR1c2VzOgogICAgICAgICAgICBmb3IgYnJhbmNoX3N0YXR1cyBpbiBncm91cF9icmFuY2hlczoKICAgICAgICAgICAgICAgIHByaW50KGJyYW5jaF9zdGF0dXMuc2hvcnRoYW5kKQogICAgICAgICAgICBjb250aW51ZQoKICAgICAgICBmb3IgYnJhbmNoX3N0YXR1cyBpbiBncm91cF9icmFuY2hlczoKICAgICAgICAgICAgbWFzdGVyX3N0YXR1cyA9ICcoTSEpJyBpZiBicmFuY2hfc3RhdHVzLm1hc3Rlcl9jb25mbGljdHMgZWxzZSAnJwogICAgICAgICAgICBwcmludChicmFuY2hfc3RhdHVzLnNob3J0aGFuZCwgbWFzdGVyX3N0YXR1cykKICAgICAgICAgICAgZ3JvdXBlZF9jb25mbGljdHMgPSBpdGVydG9vbHMuZ3JvdXBieSgKICAgICAgICAgICAgICAgIHNvcnRlZCgKICAgICAgICAgICAgICAgICAgICBicmFuY2hfc3RhdHVzLm91cl9jb25mbGljdHMsCiAgICAgICAgICAgICAgICAgICAga2V5PW9wZXJhdG9yLmF0dHJnZXR0ZXIoJ3BhdGgnKSksCiAgICAgICAgICAgICAgICBrZXk9b3BlcmF0b3IuYXR0cmdldHRlcigncGF0aCcpKQogICAgICAgICAgICBmb3IgcGF0aCwgZ3JvdXAgaW4gZ3JvdXBlZF9jb25mbGljdHM6CiAgICAgICAgICAgICAgICBjb25mbGljdHMgPSBsaXN0KGdyb3VwKQogICAgICAgICAgICAgICAgcHJpbnQoJyAgJywKICAgICAgICAgICAgICAgICAgICAgIHBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAnJy5qb2luKG1hcChfY29uZmxpY3RfdHlwZV9zaG9ydGhhbmQsIGNvbmZsaWN0cykpKQoKICAgICAgICAgICAgICAgIGlmIG5vdCBvdXRwdXRfZGlmZnM6CiAgICAgICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgICAgICBmb3IgY29uZmxpY3QgaW4gY29uZmxpY3RzOgo8fGZpbV9ob2xlfD4KICAgICAgICBwcmludCgnJykKCgpkZWYganNvbmlmeShvKToKICAgICcnJwogICAgPj4+IGZyb20gLmRhdGFzdHJ1Y3R1cmVzIGltcG9ydCBNZXJnZVJlc3VsdCwgTWVyZ2VTdGF0dXMsIENvbmZsaWN0VHlwZQogICAgPj4+IGpzb25pZnkoJ2hlbGxvJykKICAgICdoZWxsbycKICAgID4+PiBqc29uaWZ5KDAuMSkKICAgIDAuMQogICAgPj4+IGpzb25pZnkoMjEpCiAgICAyMQogICAgPj4+IGpzb25pZnkoQ29uZmxpY3RUeXBlLmVkaXRfY29uZmxpY3QpCiAgICAnZWRpdF9jb25mbGljdCcKICAgID4+PiBqc29uaWZ5KE1lcmdlUmVzdWx0KE1lcmdlU3RhdHVzLm5vX2NvbmZsaWN0cykpID09IFwKICAgICAgICB7J3N0YXR1cyc6ICdub19jb25mbGljdHMnLCAnY29uZmxpY3RzJzogW119CiAgICBUcnVlCiAgICA+Pj4ganNvbmlmeSgoTWVyZ2VTdGF0dXMubm9fY29tbW9uX2FuY2VzdG9yLCkpCiAgICBbJ25vX2NvbW1vbl9hbmNlc3RvciddCiAgICA+Pj4ganNvbmlmeShzZXQoW0NvbmZsaWN0VHlwZS5kZWxldGVkX2J5X3RoZW1dKSkKICAgIFsnZGVsZXRlZF9ieV90aGVtJ10KICAgID4+PiBqc29uaWZ5KCBcCiAgICAgICAgICAgIHtNZXJnZVN0YXR1cy5jb25mbGljdHNfd2l0aF9tZTogW0NvbmZsaWN0VHlwZS5kZWxldGVkX2J5X3VzXX0pIFwKICAgICAgICA9PSB7J2NvbmZsaWN0c193aXRoX21lJzogWydkZWxldGVkX2J5X3VzJ119CiAgICBUcnVlCiAgICAnJycKICAgIGlmIGlzaW5zdGFuY2UobywgKHN0ciwgaW50LCBmbG9hdCkpOgogICAgICAgIHJldHVybiBvCiAgICBpZiBpc2luc3RhbmNlKG8sIEVudW0pOgogICAgICAgIHJldHVybiBvLm5hbWUKICAgIGlmIGhhc2F0dHIobywgJ19hc2RpY3QnKToKICAgICAgICByZXR1cm4ge2pzb25pZnkoayk6IGpzb25pZnkodikgZm9yIGssIHYgaW4gby5fYXNkaWN0KCkuaXRlbXMoKX0KICAgIGlmIGlzaW5zdGFuY2UobywgKGxpc3QsIHR1cGxlLCBzZXQsIHR5cGVzLkdlbmVyYXRvclR5cGUpKToKICAgICAgICByZXR1cm4gbGlzdChtYXAoanNvbmlmeSwgbykpCiAgICBpZiBpc2luc3RhbmNlKG8sIGRpY3QpOgogICAgICAgIHJldHVybiB7anNvbmlmeShrKToganNvbmlmeSh2KSBmb3IgaywgdiBpbiBvLml0ZW1zKCl9CiAgICByZXR1cm4gbwoKCmRlZiBfZ3JvdXBfYnJhbmNoX3N0YXR1c2VzKAogICAgICAgIGJyYW5jaF9zdGF0dXNlczogW0JyYW5jaFN0YXR1c10pIFwKICAgICAgICAtPiBEaWN0W01lcmdlU3RhdHVzLCBMaXN0W0JyYW5jaFN0YXR1c11dOgogICAgJycnCiAgICA+Pj4gc2V0KF9ncm91cF9icmFuY2hfc3RhdHVzZXMoW10pLmtleXMoKSkgPT0gc2V0KE1lcmdlU3RhdHVzKQogICAgVHJ1ZQogICAgJycnCiAgICBncm91cGVkX2JyYW5jaGVzID0gaXRlcnRvb2xzLmdyb3VwYnkoCiAgICAgICAgc29ydGVkKGJyYW5jaF9zdGF0dXNlcywga2V5PW9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21lcmdlX3N0YXR1cycpKSwKICAgICAgICBrZXk9b3BlcmF0b3IuYXR0cmdldHRlcignbWVyZ2Vfc3RhdHVzJykpCgogICAgcnYgPSB7bWVyZ2Vfc3RhdHVzOiBbXSBmb3IgbWVyZ2Vfc3RhdHVzIGluIE1lcmdlU3RhdHVzfQogICAgZm9yIG1lcmdlX3N0YXR1cywgYnJhbmNoX3N0YXR1c2VzIGluIGdyb3VwZWRfYnJhbmNoZXM6CiAgICAgICAgcnZbbWVyZ2Vfc3RhdHVzXSA9IHNvcnRlZChicmFuY2hfc3RhdHVzZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9b3BlcmF0b3IuYXR0cmdldHRlcignaGVhZF9jb21taXRfdGltZScpKQogICAgcmV0dXJuIHJ2CgoKZGVmIF9jb25mbGljdF90eXBlX3Nob3J0aGFuZChjb25mbGljdF90eXBlOiBDb25mbGljdFR5cGUpIC0+IHN0cjoKICAgICcnJwogICAgPj4+IF9jb25mbGljdF90eXBlX3Nob3J0aGFuZChDb25mbGljdFR5cGUuZGVsZXRlZF9ieV91cykKICAgICdkZWxldGVkIGJ5IHVzJwogICAgPj4+IF9jb25mbGljdF90eXBlX3Nob3J0aGFuZChDb25mbGljdFR5cGUuZGVsZXRlZF9ieV90aGVtKQogICAgJ2RlbGV0ZWQgYnkgdGhlbScKICAgID4+PiBfY29uZmxpY3RfdHlwZV9zaG9ydGhhbmQoQ29uZmxpY3RUeXBlLmVkaXRfY29uZmxpY3QpCiAgICAnQycKICAgICcnJwogICAgYXNfaXNfc3RhdHVzZXMgPSAoQ29uZmxpY3RUeXBlLmRlbGV0ZWRfYnlfdXMsIENvbmZsaWN0VHlwZS5kZWxldGVkX2J5X3RoZW0pCiAgICBpZiBjb25mbGljdF90eXBlIGluIGFzX2lzX3N0YXR1c2VzOgogICAgICAgIHJldHVybiBjb25mbGljdF90eXBlLnZhbHVlCiAgICBlbHNlOgogICAgICAgIHJldHVybiAnQycKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICBpZiBjb25mbGljdC5jb25mbGljdF90eXBlID09IENvbmZsaWN0VHlwZS5lZGl0X2NvbmZsaWN0OgogICAgICAgICAgICAgICAgICAgICAgICBwcmludCh0ZXh0d3JhcC5pbmRlbnQoY29uZmxpY3QuZGlmZiwgJ1x0JykpCjx8ZmltX2VuZHw+"]
["ebde008aea72026e66522adee0e206eef2a7cfa2-2","ebde008aea72026e66522adee0e206eef2a7cfa2","PHxmaW1fcHJlZml4fD4KIyBEb3dubG9hZCBVbnNwbGFzaCBpbWFnZSBvZiBhIGNlcnRhaW4gY2F0ZWdvcnkgYW5kIHNldHMgaXQgYXMgV2luZG93cyB3YWxscGFwZXIKIyMgSW1wcm92ZWQgdXBvbiBiYXNlZCBvbiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9qZGFoL2QzZDdhNGVjNGIxMmJkZjc0YmRkMGRlNGJjMTJhMmUyCgpmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCmltcG9ydCBjdHlwZXMsIG9zLCB3aW5yZWcsIHN5cwpmcm9tIG51bXB5LnJhbmRvbSBpbXBvcnQgcmFuZGludAppbXBvcnQgcmVxdWVzdHMgIyB0byBnZXQgaW1hZ2UgZnJvbSB0aGUgd2ViCmltcG9ydCBzaHV0aWwgIyB0byBzYXZlIGl0IGxvY2FsbHkKCmZyb20gUElMIGltcG9ydCBJbWFnZQoKCiMgPj4+PiBDT05GSUdVUkFUSU9OIFZBUklBQkxFUyA8PDw8Ck1PTklUT1JfQ09VTlQgPSAxCk1PTklUT1JfU0laRSA9ICcxOTIweDEwODAnCgpTUElfU0VUREVTS1dBTExQQVBFUiAgICA9IDB4MDAxNApTUElfU0VUREVTS1BBVFRFUk4gICAgICA9IDB4MDAxNQpTUElGX1VQREFURUlOSUZJTEUgICAgICA9IDB4MDEKU1BJRl9TRU5EV0lOSU5JQ0hBTkdFICAgPSAweDAyCgojIE1hcCBvZiB3YWxscGFwZXIgZmlsZW5hbWVzIHRvIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGV5IGhhdmUgYmVlbiB1c2VkCndhbGxwYXBlcnMgPSB7fQoKIyBOZXh0IHdhbGxwYXBlciBpbiB0aGUgc2VxdWVuY2UgdG8gYmUgY2hhbmdlZApuZXh0X2NoYW5nZSA9IDAKCiMgTmFtZXMgb2YgdGhlIGN1cnJlbnQgd2FsbHBhcGVycwpjdXJyZW50X3dhbGxwYXBlcnMgPSBbTm9uZV0gKiBNT05JVE9SX0NPVU5UCgpkZWYgc2V0X3dhbGxwYXBlcihwYXRoKToKICAgICMgTG9hZCBhbGwgaW1hZ2VzCiAgICBmb3IgaywgdiBpbiB7KCJUaWxlV2FsbHBhcGVyIiwgIjEiKSwgKCJXYWxscGFwZXJTdHlsZSIsICIwIil9OgogICAgICAgIGtleSA9IHdpbnJlZy5PcGVuS2V5KHdpbnJlZy5IS0VZX0NVUlJFTlRfVVNFUiwgIkNvbnRyb2wgUGFuZWxcXERlc2t0b3AiLCAwLCB3aW5yZWcuS0VZX1dPVzY0XzMyS0VZIHwgd2lucmVnLktFWV9XUklURSkKICAgICAgICB3aW5yZWcuU2V0VmFsdWVFeChrZXksIGssIDAsIHdpbnJlZy5SRUdfU1osIHYpCiAgICBjdHlwZXMud2luZGxsLnVzZXIzMi5TeXN0ZW1QYXJhbWV0ZXJzSW5mb1coU1BJX1NFVERFU0tXQUxMUEFQRVIsIDAsIG9zLnBhdGguYWJzcGF0aChwYXRoKSwgU1BJRl9TRU5EV0lOSU5JQ0hBTkdFIHwgU1BJRl9VUERBVEVJTklGSUxFKQoKZGVmIGdldF91bnNwbGFzaChrZXl3b3JkPSJuYXR1cmUiKToKICAgIHByaW50KGYnV2FsbHBhcGVyIENhdGVnb3J5IDoge2tleXdvcmR9JykKCiAgICAjIyBTZXQgdXAgdGhlIGltYWdlIFVSTCBhbmQgZmlsZW5hbWUKICAgIGltYWdlX3VybCA9IGYiaHR0cHM6Ly9zb3VyY2UudW5zcGxhc2guY29tL3tNT05JVE9SX1NJWkV9Lz97a2V5d29yZH0iCiAgICBmb2xkZXJuYW1lID0ga2V5d29yZCAjIENoYW5nZSBwYXRoIAogICAgZmlsZW5hbWUgPSBmJ3tmb2xkZXJuYW1lfS97cmFuZGludCgwLDEwMCl9LmpwZycKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmb2xkZXJuYW1lKToKICAgICAgICBvcy5tYWtlZGlycyhmb2xkZXJuYW1lKQoKICAgICMgT3BlbiB0aGUgdXJsIGltYWdlLCBzZXQgc3RyZWFtIHRvIFRydWUsIHRoaXMgd2lsbCByZXR1cm4gdGhlIHN0cmVhbSBjb250ZW50LgogICAgciA9IHJlcXVlc3RzLmdldChpbWFnZV91cmwsIHN0cmVhbSA9IFRydWUpCgogICAgIyBDaGVjayBpZiB0aGUgaW1hZ2Ugd2FzIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkKPHxmaW1faG9sZXw+CiAgICAgICAgIyBPcGVuIGEgbG9jYWwgZmlsZSB3aXRoIHdiICggd3JpdGUgYmluYXJ5ICkgcGVybWlzc2lvbi4KICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsJ3diJykgYXMgZjoKICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlb2JqKHIucmF3LCBmKQogICAgICAgICAgICAKICAgICAgICBwcmludCgnSW1hZ2Ugc3VjZXNzZnVsbHkgRG93bmxvYWRlZDogJyxmaWxlbmFtZSkKICAgIGVsc2U6CiAgICAgICAgcHJpbnQoJ0ltYWdlIENvdWxkblwndCBiZSByZXRyZWl2ZWQnKQogICAgCiAgICByZXR1cm4gZmlsZW5hbWUKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICB0cnk6CiAgICAgICAgd2FsbHBhcGVyID0gZ2V0X3Vuc3BsYXNoKHN5cy5hcmd2WzFdKQogICAgZXhjZXB0OgogICAgICAgIHdhbGxwYXBlciA9IGdldF91bnNwbGFzaCgpCiAgICBzZXRfd2FsbHBhcGVyKHdhbGxwYXBlcikKPHxmaW1fc3VmZml4fD4KICAgIGlmIHIuc3RhdHVzX2NvZGUgPT0gMjAwOgogICAgICAgICMgU2V0IGRlY29kZV9jb250ZW50IHZhbHVlIHRvIFRydWUsIG90aGVyd2lzZSB0aGUgZG93bmxvYWRlZCBpbWFnZSBmaWxlJ3Mgc2l6ZSB3aWxsIGJlIHplcm8uCiAgICAgICAgci5yYXcuZGVjb2RlX2NvbnRlbnQgPSBUcnVlCiAgICAgICAgCjx8ZmltX2VuZHw+"]
["8dad8750da09708c036cf959176b098026b80857-2","8dad8750da09708c036cf959176b098026b80857","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwppbXBvcnQgc2lwCgpmcm9tIFB5UXQ1LlF0Q29yZSBpbXBvcnQgKgpmcm9tIFB5UXQ1LlF0R3VpIGltcG9ydCBRRm9udCxRRm9udE1ldHJpY3MsUUNvbG9yCmZyb20gUHlRdDUuUXRXaWRnZXRzIGltcG9ydCAoCiAgICAgICAgUVdpZGdldCwKICAgICAgICBRUHVzaEJ1dHRvbiwKICAgICAgICBRVkJveExheW91dCwgCiAgICAgICAgUUxhYmVsLCAKICAgICAgICBRR3JhcGhpY3NJdGVtLCAKICAgICAgICBRR3JhcGhpY3NQcm94eVdpZGdldCwgCiAgICAgICAgUU1lc3NhZ2VCb3gsIAogICAgICAgIFFTaXplUG9saWN5KQpmcm9tIFB5UXQ1LlFzY2kgaW1wb3J0IFFzY2lTY2ludGlsbGEsIFFzY2lMZXhlclB5dGhvbgoKCgoKY2xhc3MgRWRpdG9yKFFzY2lTY2ludGlsbGEpOgogICAgQVJST1dfTUFSS0VSX05VTSA9IDgKCiAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50PU5vbmUpOgogICAgICAgIHN1cGVyKEVkaXRvciwgc2VsZikuX19pbml0X18ocGFyZW50KQoKICAgICAgICAjIFNldCB0aGUgZGVmYXVsdCBmb250CiAgICAgICAgZm9udCA9IFFGb250KCkKICAgICAgICBmb250LnNldEZhbWlseSgnQ291cmllcicpCiAgICAgICAgZm9udC5zZXRGaXhlZFBpdGNoKFRydWUpCiAgICAgICAgZm9udC5zZXRQb2ludFNpemUoMTApCiAgICAgICAgc2VsZi5zZXRGb250KGZvbnQpCiAgICAgICAgc2VsZi5zZXRNYXJnaW5zRm9udChmb250KQoKICAgICAgICAjIE1hcmdpbiAwIGlzIHVzZWQgZm9yIGxpbmUgbnVtYmVycwogICAgICAgIGZvbnRtZXRyaWNzID0gUUZvbnRNZXRyaWNzKGZvbnQpCiAgICAgICAgc2VsZi5zZXRNYXJnaW5zRm9udChmb250KQogICAgICAgIHNlbGYuc2V0TWFyZ2luV2lkdGgoMCwgZm9udG1ldHJpY3Mud2lkdGgoIjAwMDAwIikgKyA2KQogICAgICAgIHNlbGYuc2V0TWFyZ2luTGluZU51bWJlcnMoMCwgVHJ1ZSkKICAgICAgICBzZWxmLnNldE1hcmdpbnNCYWNrZ3JvdW5kQ29sb3IoUUNvbG9yKCIjY2NjY2NjIikpCgogICAgICAgICMgQ2xpY2thYmxlIG1hcmdpbiAxIGZvciBzaG93aW5nIG1hcmtlcnMKICAgICAgICBzZWxmLnNldE1hcmdpblNlbnNpdGl2aXR5KDEsIFRydWUpCiMgICAgICAgIHNlbGYuY29ubmVjdChzZWxmLAojICAgICAgICAgICAgU0lHTkFMKCdtYXJnaW5DbGlja2VkKGludCwgaW50LCBRdDo6S2V5Ym9hcmRNb2RpZmllcnMpJyksCiMgICAgICAgICAgICBzZWxmLm9uX21hcmdpbl9jbGlja2VkKQogICAgICAgIHNlbGYubWFya2VyRGVmaW5lKFFzY2lTY2ludGlsbGEuUmlnaHRBcnJvdywKICAgICAgICAgICAgc2VsZi5BUlJPV19NQVJLRVJfTlVNKQogICAgICAgIHNlbGYuc2V0TWFya2VyQmFja2dyb3VuZENvbG9yKFFDb2xvcigiI2VlMTExMSIpLAogICAgICAgICAgICBzZWxmLkFSUk9XX01BUktFUl9OVU0pCgogICAgICAgICMgQnJhY2UgbWF0Y2hpbmc6IGVuYWJsZSBmb3IgYSBicmFjZSBpbW1lZGlhdGVseSBiZWZvcmUgb3IgYWZ0ZXIKICAgICAgICAjIHRoZSBjdXJyZW50IHBvc2l0aW9uCiAgICAgICAgIwogICAgICAgIHNlbGYuc2V0QnJhY2VNYXRjaGluZyhRc2NpU2NpbnRpbGxhLlNsb3BweUJyYWNlTWF0Y2gpCgogICAgICAgICMgQ3VycmVudCBsaW5lIHZpc2libGUgd2l0aCBzcGVjaWFsIGJhY2tncm91bmQgY29sb3IKICAgICAgICBzZWxmLnNldENhcmV0TGluZVZpc2libGUoVHJ1ZSkKICAgICAgICBzZWxmLnNldENhcmV0TGluZUJhY2tncm91bmRDb2xvcihRQ29sb3IoIiNmZmU0ZTQiKSkKCiAgICAgICAgIyBTZXQgUHl0aG9uIGxleGVyCiAgICAgICAgIyBTZXQgc3R5bGUgZm9yIFB5dGhvbiBjb21tZW50cyAoc3R5bGUgbnVtYmVyIDEpIHRvIGEgZml4ZWQtd2lkdGgKICAgICAgICAjIGNvdXJpZXIuCiAgICAgICAgIwoKICAgICAgICBsZXhlciA9IFFzY2lMZXhlclB5dGhvbigpCiAgICAgICAgbGV4ZXIuc2V0RGVmYXVsdEZvbnQoZm9udCkKICAgICAgICBzZWxmLnNldExleGVyKGxleGVyKQoKICAgICAgICB0ZXh0ID0gYnl0ZWFycmF5KHN0ci5lbmNvZGUoIkFyaWFsIikpCiMgMzIsICJDb3VyaWVyIE5ldyIgICAgICAgICAKICAgICAgICBzZWxmLlNlbmRTY2ludGlsbGEoUXNjaVNjaW50aWxsYS5TQ0lfU1RZTEVTRVRGT05ULCAxLCB0ZXh0KQoKICAgICAgICAjIERvbid0IHdhbnQgdG8gc2VlIHRoZSBob3Jpem9udGFsIHNjcm9sbGJhciBhdCBhbGwKICAgICAgICAjIFVzZSByYXcgbWVzc2FnZSB0byBTY2ludGlsbGEgaGVyZSAoYWxsIG1lc3NhZ2VzIGFyZSBkb2N1bWVudGVkCiAgICAgICAgIyBoZXJlOiBodHRwOi8vd3d3LnNjaW50aWxsYS5vcmcvU2NpbnRpbGxhRG9jLmh0bWwpCiAgICAgICAgc2VsZi5TZW5kU2NpbnRpbGxhKFFzY2lTY2ludGlsbGEuU0NJX1NFVEhTQ1JPTExCQVIsIDApCgogICAgICAgICMgbm90IHRvbyBzbWFsbAogICAgICAgIHNlbGYuc2V0TWluaW11bVNpemUoNjAwLCA0NTApCgogICAgZGVmIG9uX21hcmdpbl9jbGlja2VkKHNlbGYsIG5tYXJnaW4sIG5saW5lLCBtb2RpZmllcnMpOgogICAgICAgICMgVG9nZ2xlIG1hcmtlciBmb3IgdGhlIGxpbmUgdGhlIG1hcmdpbiB3YXMgY2xpY2tlZCBvbgogICAgICAgIGlmIHNlbGYubWFya2Vyc0F0TGluZShubGluZSkgIT0gMDoKICAgICAgICAgICAgc2VsZi5tYXJrZXJEZWxldGUobmxpbmUsIHNlbGYuQVJST1dfTUFSS0VSX05VTSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLm1hcmtlckFkZChubGluZSwgc2VsZi5BUlJPV19NQVJLRVJfTlVNKQoKY2xhc3MgRWRpdG9yV2lkZ2V0KFFHcmFwaGljc1Byb3h5V2lkZ2V0KToKPHxmaW1faG9sZXw+CiAgICAgICAgYnV0dG9uID0gUVB1c2hCdXR0b24oIkNsb3NlIikKICAgICAgICBidXR0b24uY2xpY2tlZC5jb25uZWN0KHNlbGYub25fY2xvc2UpCiAgICAgICAgdmJveCA9IFFWQm94TGF5b3V0KCkKICAgICAgICB2Ym94LmFkZFdpZGdldChzZWxmLmVkaXRvcikKICAgICAgICB2Ym94LmFkZFdpZGdldChidXR0b24pCiAgICAgICAgdy5zZXRMYXlvdXQodmJveCkKICAgICAgICBzZWxmLnNldFdpZGdldCh3KQogICAgICAgIHNlbGYuc2V0RmxhZyhRR3JhcGhpY3NJdGVtLkl0ZW1Jc01vdmFibGUsVHJ1ZSkKICAgICAgICBzZWxmLnNldEZsYWcoUUdyYXBoaWNzSXRlbS5JdGVtSXNTZWxlY3RhYmxlLFRydWUpCgogICAgZGVmIG9uX2Nsb3NlKHNlbGYpOgogICAgICAgIHNlbGYuaGlkZSgpCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc3VwZXIoRWRpdG9yV2lkZ2V0LHNlbGYpLl9faW5pdF9fKCkKICAgICAgICB3ID0gUVdpZGdldCgpCiAgICAgICAgc2VsZi5lZGl0b3IgPSBFZGl0b3IoKQo8fGZpbV9lbmR8Pg=="]
["2473f30f10c2ab2be63770a03d0297e59063b998-3","2473f30f10c2ab2be63770a03d0297e59063b998","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBHZW5lcmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4gIERPIE5PVCBFRElUIQojIHNvdXJjZTogcHJvY2Vzc19kZWZpbml0aW9uLnByb3RvCgppbXBvcnQgc3lzCl9iPXN5cy52ZXJzaW9uX2luZm9bMF08MyBhbmQgKGxhbWJkYSB4OngpIG9yIChsYW1iZGEgeDp4LmVuY29kZSgnbGF0aW4xJykpCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBkZXNjcmlwdG9yIGFzIF9kZXNjcmlwdG9yCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBtZXNzYWdlIGFzIF9tZXNzYWdlCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCByZWZsZWN0aW9uIGFzIF9yZWZsZWN0aW9uCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBzeW1ib2xfZGF0YWJhc2UgYXMgX3N5bWJvbF9kYXRhYmFzZQojIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChpbXBvcnRzKQoKX3N5bV9kYiA9IF9zeW1ib2xfZGF0YWJhc2UuRGVmYXVsdCgpCgoKCgpERVNDUklQVE9SID0gX2Rlc2NyaXB0b3IuRmlsZURlc2NyaXB0b3IoCiAgbmFtZT0ncHJvY2Vzc19kZWZpbml0aW9uLnByb3RvJywKICBwYWNrYWdlPSdmbG93YWJsZScsCiAgc3ludGF4PSdwcm90bzMnLAogIHNlcmlhbGl6ZWRfb3B0aW9ucz1fYignWkJnby5lYXN5b3BzLmxvY2FsL2NvbnRyYWN0cy9wcm90b3JlcG8tbW9kZWxzL2Vhc3lvcHMvbW9kZWwvZmxvd2FibGUnKSwKICBzZXJpYWxpemVkX3BiPV9iKCdcblx4MThwcm9jZXNzX2RlZmluaXRpb24ucHJvdG9ceDEyXHgwOFx4NjZsb3dhYmxlXCJceGMxXHgwMlxuXHgxOVx4NDZsb3dhYmxlUHJvY2Vzc0RlZmluaXRpb25ceDEyXG5cblx4MDJpZFx4MThceDAxIFx4MDEoXHRceDEyXHgwYlxuXHgwM3VybFx4MThceDAyIFx4MDEoXHRceDEyXHgwYlxuXHgwM2tleVx4MThceDAzIFx4MDEoXHRceDEyXHgwZlxuXHgwN3ZlcnNpb25ceDE4XHgwNCBceDAxKFx4MDVceDEyXHgwY1xuXHgwNG5hbWVceDE4XHgwNSBceDAxKFx0XHgxMlx4MTNcblx4MGJceDY0XHg2NXNjcmlwdGlvblx4MThceDA2IFx4MDEoXHRceDEyXHgxMFxuXHgwOHRlbmFudElkXHgxOFx4MDcgXHgwMShcdFx4MTJceDE0XG5ceDBjXHg2NFx4NjVwbG95bWVudElkXHgxOFx4MDggXHgwMShcdFx4MTJceDE1XG5ccmRlcGxveW1lbnRVcmxceDE4XHQgXHgwMShcdFx4MTJceDEwXG5ceDA4cmVzb3VyY2VceDE4XG4gXHgwMShcdFx4MTJceDE3XG5ceDBmXHg2NGlhZ3JhbVJlc291cmNlXHgxOFx4MGIgXHgwMShcdFx4MTJceDEwXG5ceDA4XHg2M1x4NjF0ZWdvcnlceDE4XHgwYyBceDAxKFx0XHgxMiFcblx4MTlncmFwaGljYWxOb3RhdGlvbkRlZmluaWVkXHgxOFxyIFx4MDEoXHgwOFx4MTJceDExXG5cdHN1c3BlbmRlZFx4MThceDBlIFx4MDEoXHgwOFx4MTJceDE4XG5ceDEwc3RhcnRGb3JtRGVmaW5lZFx4MThceDBmIFx4MDEoXHgwOFx4NDJceDQ0WkJnby5lYXN5b3BzLmxvY2FsL2NvbnRyYWN0cy9wcm90b3JlcG8tbW9kZWxzL2Vhc3lvcHMvbW9kZWwvZmxvd2FibGViXHgwNnByb3RvMycpCikKCgoKCl9GTE9XQUJMRVBST0NFU1NERUZJTklUSU9OID0gX2Rlc2NyaXB0b3IuRGVzY3JpcHRvcigKICBuYW1lPSdGbG93YWJsZVByb2Nlc3NEZWZpbml0aW9uJywKICBmdWxsX25hbWU9J2Zsb3dhYmxlLkZsb3dhYmxlUHJvY2Vzc0RlZmluaXRpb24nLAogIGZpbGVuYW1lPU5vbmUsCiAgZmlsZT1ERVNDUklQVE9SLAogIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAogIGZpZWxkcz1bCiAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCiAgICAgIG5hbWU9J2lkJywgZnVsbF9uYW1lPSdmbG93YWJsZS5GbG93YWJsZVByb2Nlc3NEZWZpbml0aW9uLmlkJywgaW5kZXg9MCwKICAgICAgbnVtYmVyPTEsIHR5cGU9OSwgY3BwX3R5cGU9OSwgbGFiZWw9MSwKICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9X2IoIiIpLmRlY29kZSgndXRmLTgnKSwKICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKICAgICAgc2VyaWFsaXplZF9vcHRpb25zPU5vbmUsIGZpbGU9REVTQ1JJUFRPUiksCiAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCiAgICAgIG5hbWU9J3VybCcsIGZ1bGxfbmFtZT0nZmxvd2FibGUuRmxvd2FibGVQcm9jZXNzRGVmaW5pdGlvbi51cmwnLCBpbmRleD0xLAogICAgICBudW1iZXI9MiwgdHlwZT05LCBjcHBfdHlwZT05LCBsYWJlbD0xLAogICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT1fYigiIikuZGVjb2RlKCd1dGYtOCcpLAogICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAogICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAogICAgICBzZXJpYWxpemVkX29wdGlvbnM9Tm9uZSwgZmlsZT1ERVNDUklQVE9SKSwKICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKICAgICAgbmFtZT0na2V5JywgZnVsbF9uYW1lPSdmbG93YWJsZS5GbG93YWJsZVByb2Nlc3NEZWZpbml0aW9uLmtleScsIGluZGV4PTIsCiAgICAgIG51bWJlcj0zLCB0eXBlPTksIGNwcF90eXBlPTksIGxhYmVsPTEsCiAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPV9iKCIiKS5kZWNvZGUoJ3V0Zi04JyksCiAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCiAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCiAgICAgIHNlcmlhbGl6ZWRfb3B0aW9ucz1Ob25lLCBmaWxlPURFU0NSSVBUT1IpLAogICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAogICAgICBuYW1lPSd2ZXJzaW9uJywgZnVsbF9uYW1lPSdmbG93YWJsZS5GbG93YWJsZVByb2Nlc3NEZWZpbml0aW9uLnZlcnNpb24nLCBpbmRleD0zLAogICAgICBudW1iZXI9NCwgdHlwZT01LCBjcHBfdHlwZT0xLCBsYWJlbD0xLAogICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT0wLAogICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAogICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAogICAgICBzZXJpYWxpemVkX29wdGlvbnM9Tm9uZSwgZmlsZT1ERVNDUklQVE9SKSwKICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKICAgICAgbmFtZT0nbmFtZScsIGZ1bGxfbmFtZT0nZmxvd2FibGUuRmxvd2FibGVQcm9jZXNzRGVmaW5pdGlvbi5uYW1lJywgaW5kZXg9NCwKICAgICAgbnVtYmVyPTUsIHR5cGU9OSwgY3BwX3R5cGU9OSwgbGFiZWw9MSwKICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9X2IoIiIpLmRlY29kZSgndXRmLTgnKSwKICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKICAgICAgc2VyaWFsaXplZF9vcHRpb25zPU5vbmUsIGZpbGU9REVTQ1JJUFRPUiksCiAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCiAgICAgIG5hbWU9J2Rlc2NyaXB0aW9uJywgZnVsbF9uYW1lPSdmbG93YWJsZS5GbG93YWJsZVByb2Nlc3NEZWZpbml0aW9uLmRlc2NyaXB0aW9uJywgaW5kZXg9NSwKICAgICAgbnVtYmVyPTYsIHR5cGU9OSwgY3BwX3R5cGU9OSwgbGFiZWw9MSwKICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9X2IoIiIpLmRlY29kZSgndXRmLTgnKSwKICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKICAgICAgc2VyaWFsaXplZF9vcHRpb25zPU5vbmUsIGZpbGU9REVTQ1JJUFRPUiksCiAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCiAgICAgIG5hbWU9J3RlbmFudElkJywgZnVsbF9uYW1lPSdmbG93YWJsZS5GbG93YWJsZVByb2Nlc3NEZWZpbml0aW9uLnRlbmFudElkJywgaW5kZXg9NiwKICAgICAgbnVtYmVyPTcsIHR5cGU9OSwgY3BwX3R5cGU9OSwgbGFiZWw9MSwKICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9X2IoIiIpLmRlY29kZSgndXRmLTgnKSwKICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKICAgICAgc2VyaWFsaXplZF9vcHRpb25zPU5vbmUsIGZpbGU9REVTQ1JJUFRPUiksCiAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCiAgICAgIG5hbWU9J2RlcGxveW1lbnRJZCcsIGZ1bGxfbmFtZT0nZmxvd2FibGUuRmxvd2FibGVQcm9jZXNzRGVmaW5pdGlvbi5kZXBsb3ltZW50SWQnLCBpbmRleD03LAogICAgICBudW1iZXI9OCwgdHlwZT05LCBjcHBfdHlwZT05LCBsYWJlbD0xLAogICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT1fYigiIikuZGVjb2RlKCd1dGYtOCcpLAogICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAogICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAogICAgICBzZXJpYWxpemVkX29wdGlvbnM9Tm9uZSwgZmlsZT1ERVNDUklQVE9SKSwKICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKICAgICAgbmFtZT0nZGVwbG95bWVudFVybCcsIGZ1bGxfbmFtZT0nZmxvd2FibGUuRmxvd2FibGVQcm9jZXNzRGVmaW5pdGlvbi5kZXBsb3ltZW50VXJsJywgaW5kZXg9OCwKICAgICAgbnVtYmVyPTksIHR5cGU9OSwgY3BwX3R5cGU9OSwgbGFiZWw9MSwKICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9X2IoIiIpLmRlY29kZSgndXRmLTgnKSwKICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKICAgICAgc2VyaWFsaXplZF9vcHRpb25zPU5vbmUsIGZpbGU9REVTQ1JJUFRPUiksCiAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCiAgICAgIG5hbWU9J3Jlc291cmNlJywgZnVsbF9uYW1lPSdmbG93YWJsZS5GbG93YWJsZVByb2Nlc3NEZWZpbml0aW9uLnJlc291cmNlJywgaW5kZXg9OSwKICAgICAgbnVtYmVyPTEwLCB0eXBlPTksIGNwcF90eXBlPTksIGxhYmVsPTEsCiAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPV9iKCIiKS5kZWNvZGUoJ3V0Zi04JyksCiAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCiAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCiAgICAgIHNlcmlhbGl6ZWRfb3B0aW9ucz1Ob25lLCBmaWxlPURFU0NSSVBUT1IpLAogICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAogICAgICBuYW1lPSdkaWFncmFtUmVzb3VyY2UnLCBmdWxsX25hbWU9J2Zsb3dhYmxlLkZsb3dhYmxlUHJvY2Vzc0RlZmluaXRpb24uZGlhZ3JhbVJlc291cmNlJywgaW5kZXg9MTAsCiAgICAgIG51bWJlcj0xMSwgdHlwZT05LCBjcHBfdHlwZT05LCBsYWJlbD0xLAogICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT1fYigiIikuZGVjb2RlKCd1dGYtOCcpLAogICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAogICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAogICAgICBzZXJpYWxpemVkX29wdGlvbnM9Tm9uZSwgZmlsZT1ERVNDUklQVE9SKSwKICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKICAgICAgbmFtZT0nY2F0ZWdvcnknLCBmdWxsX25hbWU9J2Zsb3dhYmxlLkZsb3dhYmxlUHJvY2Vzc0RlZmluaXRpb24uY2F0ZWdvcnknLCBpbmRleD0xMSwKICAgICAgbnVtYmVyPTEyLCB0eXBlPTksIGNwcF90eXBlPTksIGxhYmVsPTEsCiAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPV9iKCIiKS5kZWNvZGUoJ3V0Zi04JyksCiAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCiAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCiAgICAgIHNlcmlhbGl6ZWRfb3B0aW9ucz1Ob25lLCBmaWxlPURFU0NSSVBUT1IpLAogICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAogICAgICBuYW1lPSdncmFwaGljYWxOb3RhdGlvbkRlZmluaWVkJywgZnVsbF9uYW1lPSdmbG93YWJsZS5GbG93YWJsZVByb2Nlc3NEZWZpbml0aW9uLmdyYXBoaWNhbE5vdGF0aW9uRGVmaW5pZWQnLCBpbmRleD0xMiwKICAgICAgbnVtYmVyPTEzLCB0eXBlPTgsIGNwcF90eXBlPTcsIGxhYmVsPTEsCiAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPUZhbHNlLAogICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAogICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAogICAgICBzZXJpYWxpemVkX29wdGlvbnM9Tm9uZSwgZmlsZT1ERVNDUklQVE9SKSwKICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKICAgICAgbmFtZT0nc3VzcGVuZGVkJywgZnVsbF9uYW1lPSdmbG93YWJsZS5GbG93YWJsZVByb2Nlc3NEZWZpbml0aW9uLnN1c3BlbmRlZCcsIGluZGV4PTEzLAogICAgICBudW1iZXI9MTQsIHR5cGU9OCwgY3BwX3R5cGU9NywgbGFiZWw9MSwKICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9RmFsc2UsCiAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCiAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCiAgICAgIHNlcmlhbGl6ZWRfb3B0aW9ucz1Ob25lLCBmaWxlPURFU0NSSVBUT1IpLAogICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAogICAgICBuYW1lPSdzdGFydEZvcm1EZWZpbmVkJywgZnVsbF9uYW1lPSdmbG93YWJsZS5GbG93YWJsZVByb2Nlc3NEZWZpbml0aW9uLnN0YXJ0Rm9ybURlZmluZWQnLCBpbmRleD0xNCwKICAgICAgbnVtYmVyPTE1LCB0eXBlPTgsIGNwcF90eXBlPTcsIGxhYmVsPTEsCjx8ZmltX2hvbGV8PgogIF0sCiAgZXh0ZW5zaW9ucz1bCiAgXSwKICBuZXN0ZWRfdHlwZXM9W10sCiAgZW51bV90eXBlcz1bCiAgXSwKICBzZXJpYWxpemVkX29wdGlvbnM9Tm9uZSwKICBpc19leHRlbmRhYmxlPUZhbHNlLAogIHN5bnRheD0ncHJvdG8zJywKICBleHRlbnNpb25fcmFuZ2VzPVtdLAogIG9uZW9mcz1bCiAgXSwKICBzZXJpYWxpemVkX3N0YXJ0PTM5LAogIHNlcmlhbGl6ZWRfZW5kPTM2MCwKKQoKREVTQ1JJUFRPUi5tZXNzYWdlX3R5cGVzX2J5X25hbWVbJ0Zsb3dhYmxlUHJvY2Vzc0RlZmluaXRpb24nXSA9IF9GTE9XQUJMRVBST0NFU1NERUZJTklUSU9OCl9zeW1fZGIuUmVnaXN0ZXJGaWxlRGVzY3JpcHRvcihERVNDUklQVE9SKQoKRmxvd2FibGVQcm9jZXNzRGVmaW5pdGlvbiA9IF9yZWZsZWN0aW9uLkdlbmVyYXRlZFByb3RvY29sTWVzc2FnZVR5cGUoJ0Zsb3dhYmxlUHJvY2Vzc0RlZmluaXRpb24nLCAoX21lc3NhZ2UuTWVzc2FnZSwpLCB7CiAgJ0RFU0NSSVBUT1InIDogX0ZMT1dBQkxFUFJPQ0VTU0RFRklOSVRJT04sCiAgJ19fbW9kdWxlX18nIDogJ3Byb2Nlc3NfZGVmaW5pdGlvbl9wYjInCiAgIyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc2NvcGU6Zmxvd2FibGUuRmxvd2FibGVQcm9jZXNzRGVmaW5pdGlvbikKICB9KQpfc3ltX2RiLlJlZ2lzdGVyTWVzc2FnZShGbG93YWJsZVByb2Nlc3NEZWZpbml0aW9uKQoKCkRFU0NSSVBUT1IuX29wdGlvbnMgPSBOb25lCiMgQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1vZHVsZV9zY29wZSkKPHxmaW1fc3VmZml4fD4KICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9RmFsc2UsCiAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCiAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCiAgICAgIHNlcmlhbGl6ZWRfb3B0aW9ucz1Ob25lLCBmaWxlPURFU0NSSVBUT1IpLAo8fGZpbV9lbmR8Pg=="]
["696334273c743186c19c1ed20b6e71e6c24aaf92-1","696334273c743186c19c1ed20b6e71e6c24aaf92","PHxmaW1fcHJlZml4fD4KI2NvcGllZCBmcm9tIE1TVGVhbXMKZGVmIHBhcnNlKGNtZFN0cmluZyk6CiAgICBvdXRGaWxlID0gTm9uZQogICAgaW5GaWxlID0gTm9uZQogICAgY21kID0gJycKICAgIGNtZFN0cmluZyA9IHJlLnN1YignICsnLCAnICcsIGNtZFN0cmluZykKICAgIGlmICc+JyBpbiBjbWRTdHJpbmc6CiAgICAgICAgW2NtZCwgb3V0RmlsZV0gPSBjbWRTdHJpbmcuc3BsaXQoJz4nLDEpCiAgICAgICAgb3V0RmlsZSA9IG91dEZpbGUuc3RyaXAoKQogICAgaWYgJzwnIGluIGNtZDoKICAgICAgICBbY21kLCBpbkZpbGVdID0gY21kLnNwbGl0KCc8JywgMSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGluRmlsZSA9IGluRmlsZS5zdHJpcCgpCjx8ZmltX2VuZHw+"]
["696f5e81e54b95a761be99e2e33eebd8b09e9df5-2","696f5e81e54b95a761be99e2e33eebd8b09e9df5","PHxmaW1fcHJlZml4fD4KZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKZnJvbSBsb2dnaW5nIGltcG9ydCBnZXRMb2dnZXIKCmZyb20ga2l2eS5wcm9wZXJ0aWVzIGltcG9ydCBTdHJpbmdQcm9wZXJ0eQpmcm9tIGtpdnltZC51aXgubGlzdCBpbXBvcnQgT25lTGluZUxpc3RJdGVtLCBUd29MaW5lQXZhdGFySWNvbkxpc3RJdGVtLCBJY29uUmlnaHRXaWRnZXQsIEljb25MZWZ0V2lkZ2V0LCBNRExpc3QKCmZyb20gdGVzc2VyYWN0WHBsb3JlLmFwcCBpbXBvcnQgZ2V0X2FwcApmcm9tIHRlc3NlcmFjdFhwbG9yZS5jb250cm9sbGVycyBpbXBvcnQgQ29udHJvbGxlcgpmcm9tIHRlc3NlcmFjdFhwbG9yZS50ZXNzcHJvZmlsZXMgaW1wb3J0IHdyaXRlX3Rlc3Nwcm9maWxlcwpmcm9tIHRlc3NlcmFjdFhwbG9yZS53aWRnZXRzIGltcG9ydCBMZWZ0Q2hlY2tib3gKCgoKbG9nZ2VyID0gZ2V0TG9nZ2VyKCkuZ2V0Q2hpbGQoX19uYW1lX18pCgoKY2xhc3MgQ3VzdG9tT25lTGluZUxpc3RJdGVtKE9uZUxpbmVMaXN0SXRlbSk6CiAgICBpY29uID0gU3RyaW5nUHJvcGVydHkoKQoKCmNsYXNzIFRlc3Nwcm9maWxlc0NvbnRyb2xsZXIoQ29udHJvbGxlcik6CiAgICAiIiIgQ29udHJvbGxlciBjbGFzcyB0byBtYW5hZ2UgdGVzc3Byb2ZpbGVzIHNjcmVlbiAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgc2NyZWVuLCAqKmt3YXJncyk6CiAgICAgICAgc2VsZi5zY3JlZW4gPSBzY3JlZW4KICAgICAgICBzZWxmLmxheW91dCA9IE1ETGlzdCgpCgogICAgZGVmIGdldF9jdXJyZW50X3Byb2ZpbGUoc2VsZik6CiAgICAgICAgcmV0dXJuIGdldF9hcHAoKS50ZXNzcHJvZmlsZXNfb25saW5lIGlmIGdldF9hcHAoKS5pc19vbmxpbmUoKSBlbHNlIGdldF9hcHAoKS50ZXNzcHJvZmlsZXMKCiAgICBkZWYgc2V0X3Byb2ZpbGVzKHNlbGYsIHRleHQ9IiIsIHNlYXJjaD1GYWxzZSk6CiAgICAgICAgIiIiIExpc3RzIGFsbCB0ZXNzZXJhY3QgcHJvZmlsZXMgIiIiCgogICAgICAgIGRlZiBhZGRfcHJvZmlsZShwcm9maWxlLCBwcm9maWxlcGFyYW0sIHByb2ZpbGVwYXJhbXN0cik6CiAgICAgICAgICAgIGl0ZW0gPSBUd29MaW5lQXZhdGFySWNvbkxpc3RJdGVtKAogICAgICAgICAgICAgICAgdGV4dD1wcm9maWxlLAogICAgICAgICAgICAgICAgc2Vjb25kYXJ5X3RleHQ9IlNldHRpbmdzOiAiICsgcHJvZmlsZXBhcmFtc3RyLAogICAgICAgICAgICAgICAgb25fcmVsZWFzZT1wYXJ0aWFsKHNlbGYubG9hZF9wcm9maWxlLCBwcm9maWxlcGFyYW0pLAogICAgICAgICAgICApCiAgICAgICAgICAgIGl0ZW0uYWRkX3dpZGdldChJY29uUmlnaHRXaWRnZXQoaWNvbj0idHJhc2gtY2FuIiwgb25fcmVsZWFzZT1wYXJ0aWFsKHNlbGYucmVtb3ZlX3Byb2ZpbGUsIHByb2ZpbGUpKSkKICAgICAgICAgICAgaWYgJ2RlZmF1bHQnIGluIHByb2ZpbGVwYXJhbSBhbmQgcHJvZmlsZXBhcmFtWydkZWZhdWx0J10gPT0gRmFsc2U6CiAgICAgICAgICAgICAgICBpdGVtLmFkZF93aWRnZXQoSWNvbkxlZnRXaWRnZXQoaWNvbj0ic3Rhci1vdXRsaW5lIiwgb25fcmVsZWFzZT1wYXJ0aWFsKHNlbGYuc2V0X3RvX2RlZmF1bHQsIHByb2ZpbGUpKSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGl0ZW0uYWRkX3dpZGdldChJY29uTGVmdFdpZGdldChpY29uPSJzdGFyIiwgb25fcmVsZWFzZT1wYXJ0aWFsKHNlbGYudW5zZXRfZGVmYXVsdCwgcHJvZmlsZSkpKQogICAgICAgICAgICBzZWxmLmxheW91dC5hZGRfd2lkZ2V0KGl0ZW0pCgogICAgICAgIHNlbGYubGF5b3V0LmNsZWFyX3dpZGdldHMoKQogICAgICAgIHNlbGYuc2NyZWVuLnRlc3Nwcm9maWxlbGlzdC5jbGVhcl93aWRnZXRzKCkKICAgICAgICBmb3IgcHJvZmlsZW5hbWUsIHByb2ZpbGVwYXJhbSBpbiBzZWxmLmdldF9jdXJyZW50X3Byb2ZpbGUoKS5pdGVtcygpOgogICAgICAgICAgICBwcm9maWxlcGFyYW1zdHIgPSAiLCAiLmpvaW4oW2Yie2t9Ont2fSIgZm9yIGssIHYgaW4gcHJvZmlsZXBhcmFtLml0ZW1zKCldKQogICAgICAgICAgICBpZiBzZWFyY2g6CiAgICAgICAgICAgICAgICBpZiBzZWxmLnNjcmVlbi5leGFjdF9tYXRjaF9jaGsuYWN0aXZlOgogICAgICAgICAgICAgICAgICAgIGlmIHRleHQgPT0gcHJvZmlsZW5hbWVbOmxlbih0ZXh0KV06CiAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9wcm9maWxlKHByb2ZpbGVuYW1lLCBwcm9maWxlcGFyYW0sIHByb2ZpbGVwYXJhbXN0cikKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgdGV4dHBhcnRzID0gdGV4dC5zcGxpdCgiICIpCiAgICAgICAgICAgICAgICAgICAgaWYgc3VtKFtUcnVlIGlmIHRleHRwYXJ0Lmxvd2VyKCkgaW4gcHJvZmlsZW5hbWUubG93ZXIoKSArICIgIiArIHByb2ZpbGVwYXJhbXN0ci5sb3dlcigpIGVsc2UgRmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0ZXh0cGFydCBpbiB0ZXh0cGFydHNdKSA9PSBsZW4odGV4dHBhcnRzKToKICAgICAgICAgICAgICAgICAgICAgICAgYWRkX3Byb2ZpbGUocHJvZmlsZW5hbWUsIHByb2ZpbGVwYXJhbSwgcHJvZmlsZXBhcmFtc3RyKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgYWRkX3Byb2ZpbGUocHJvZmlsZW5hbWUsIHByb2ZpbGVwYXJhbSwgcHJvZmlsZXBhcmFtc3RyKQogICAgICAgIHNlbGYuc2NyZWVuLnRlc3Nwcm9maWxlbGlzdC5hZGRfd2lkZ2V0KHNlbGYubGF5b3V0KQoKICAgIGRlZiBsb2FkX3Byb2ZpbGUoc2VsZiwgcHJvZmlsZXBhcmFtLCAqYXJncyk6CiAgICAgICAgIiIiIEFwcGx5IGFsbCBzZXR0aW5ncyBvZiB0aGUgY2hvb3NlbiBwcm9maWxlIHRvIHRoZSBtYWluIHdpbmRvdyIiIgogICAgICAgIGlmIGdldF9hcHAoKS5pc19vbmxpbmUoKToKICAgICAgICAgICAgZ2V0X2FwcCgpLnRlc3NlcmFjdF9vbmxpbmVfY29udHJvbGxlci5sb2FkX3Rlc3Nwcm9maWxlKHByb2ZpbGVwYXJhbSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBnZXRfYXBwKCkudGVzc2VyYWN0X2NvbnRyb2xsZXIubG9hZF90ZXNzcHJvZmlsZShwcm9maWxlcGFyYW0pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBnZXRfYXBwKCkuc3dpdGNoX3NjcmVlbihnZXRfYXBwKCkuaG9tZV9zY3JlZW4pCgo8fGZpbV9lbmR8Pg=="]
["696f5e81e54b95a761be99e2e33eebd8b09e9df5-4","696f5e81e54b95a761be99e2e33eebd8b09e9df5","PHxmaW1fcHJlZml4fD4KZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKZnJvbSBsb2dnaW5nIGltcG9ydCBnZXRMb2dnZXIKCmZyb20ga2l2eS5wcm9wZXJ0aWVzIGltcG9ydCBTdHJpbmdQcm9wZXJ0eQpmcm9tIGtpdnltZC51aXgubGlzdCBpbXBvcnQgT25lTGluZUxpc3RJdGVtLCBUd29MaW5lQXZhdGFySWNvbkxpc3RJdGVtLCBJY29uUmlnaHRXaWRnZXQsIEljb25MZWZ0V2lkZ2V0LCBNRExpc3QKCmZyb20gdGVzc2VyYWN0WHBsb3JlLmFwcCBpbXBvcnQgZ2V0X2FwcApmcm9tIHRlc3NlcmFjdFhwbG9yZS5jb250cm9sbGVycyBpbXBvcnQgQ29udHJvbGxlcgpmcm9tIHRlc3NlcmFjdFhwbG9yZS50ZXNzcHJvZmlsZXMgaW1wb3J0IHdyaXRlX3Rlc3Nwcm9maWxlcwpmcm9tIHRlc3NlcmFjdFhwbG9yZS53aWRnZXRzIGltcG9ydCBMZWZ0Q2hlY2tib3gKCgoKbG9nZ2VyID0gZ2V0TG9nZ2VyKCkuZ2V0Q2hpbGQoX19uYW1lX18pCgoKY2xhc3MgQ3VzdG9tT25lTGluZUxpc3RJdGVtKE9uZUxpbmVMaXN0SXRlbSk6CiAgICBpY29uID0gU3RyaW5nUHJvcGVydHkoKQoKCmNsYXNzIFRlc3Nwcm9maWxlc0NvbnRyb2xsZXIoQ29udHJvbGxlcik6CiAgICAiIiIgQ29udHJvbGxlciBjbGFzcyB0byBtYW5hZ2UgdGVzc3Byb2ZpbGVzIHNjcmVlbiAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgc2NyZWVuLCAqKmt3YXJncyk6CiAgICAgICAgc2VsZi5zY3JlZW4gPSBzY3JlZW4KICAgICAgICBzZWxmLmxheW91dCA9IE1ETGlzdCgpCgogICAgZGVmIGdldF9jdXJyZW50X3Byb2ZpbGUoc2VsZik6CiAgICAgICAgcmV0dXJuIGdldF9hcHAoKS50ZXNzcHJvZmlsZXNfb25saW5lIGlmIGdldF9hcHAoKS5pc19vbmxpbmUoKSBlbHNlIGdldF9hcHAoKS50ZXNzcHJvZmlsZXMKCiAgICBkZWYgc2V0X3Byb2ZpbGVzKHNlbGYsIHRleHQ9IiIsIHNlYXJjaD1GYWxzZSk6CiAgICAgICAgIiIiIExpc3RzIGFsbCB0ZXNzZXJhY3QgcHJvZmlsZXMgIiIiCgogICAgICAgIGRlZiBhZGRfcHJvZmlsZShwcm9maWxlLCBwcm9maWxlcGFyYW0sIHByb2ZpbGVwYXJhbXN0cik6CiAgICAgICAgICAgIGl0ZW0gPSBUd29MaW5lQXZhdGFySWNvbkxpc3RJdGVtKAogICAgICAgICAgICAgICAgdGV4dD1wcm9maWxlLAogICAgICAgICAgICAgICAgc2Vjb25kYXJ5X3RleHQ9IlNldHRpbmdzOiAiICsgcHJvZmlsZXBhcmFtc3RyLAogICAgICAgICAgICAgICAgb25fcmVsZWFzZT1wYXJ0aWFsKHNlbGYubG9hZF9wcm9maWxlLCBwcm9maWxlcGFyYW0pLAogICAgICAgICAgICApCiAgICAgICAgICAgIGl0ZW0uYWRkX3dpZGdldChJY29uUmlnaHRXaWRnZXQoaWNvbj0idHJhc2gtY2FuIiwgb25fcmVsZWFzZT1wYXJ0aWFsKHNlbGYucmVtb3ZlX3Byb2ZpbGUsIHByb2ZpbGUpKSkKICAgICAgICAgICAgaWYgJ2RlZmF1bHQnIGluIHByb2ZpbGVwYXJhbSBhbmQgcHJvZmlsZXBhcmFtWydkZWZhdWx0J10gPT0gRmFsc2U6CiAgICAgICAgICAgICAgICBpdGVtLmFkZF93aWRnZXQoSWNvbkxlZnRXaWRnZXQoaWNvbj0ic3Rhci1vdXRsaW5lIiwgb25fcmVsZWFzZT1wYXJ0aWFsKHNlbGYuc2V0X3RvX2RlZmF1bHQsIHByb2ZpbGUpKSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGl0ZW0uYWRkX3dpZGdldChJY29uTGVmdFdpZGdldChpY29uPSJzdGFyIiwgb25fcmVsZWFzZT1wYXJ0aWFsKHNlbGYudW5zZXRfZGVmYXVsdCwgcHJvZmlsZSkpKQogICAgICAgICAgICBzZWxmLmxheW91dC5hZGRfd2lkZ2V0KGl0ZW0pCgogICAgICAgIHNlbGYubGF5b3V0LmNsZWFyX3dpZGdldHMoKQogICAgICAgIHNlbGYuc2NyZWVuLnRlc3Nwcm9maWxlbGlzdC5jbGVhcl93aWRnZXRzKCkKICAgICAgICBmb3IgcHJvZmlsZW5hbWUsIHByb2ZpbGVwYXJhbSBpbiBzZWxmLmdldF9jdXJyZW50X3Byb2ZpbGUoKS5pdGVtcygpOgogICAgICAgICAgICBwcm9maWxlcGFyYW1zdHIgPSAiLCAiLmpvaW4oW2Yie2t9Ont2fSIgZm9yIGssIHYgaW4gcHJvZmlsZXBhcmFtLml0ZW1zKCldKQogICAgICAgICAgICBpZiBzZWFyY2g6CiAgICAgICAgICAgICAgICBpZiBzZWxmLnNjcmVlbi5leGFjdF9tYXRjaF9jaGsuYWN0aXZlOgogICAgICAgICAgICAgICAgICAgIGlmIHRleHQgPT0gcHJvZmlsZW5hbWVbOmxlbih0ZXh0KV06CiAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9wcm9maWxlKHByb2ZpbGVuYW1lLCBwcm9maWxlcGFyYW0sIHByb2ZpbGVwYXJhbXN0cikKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgdGV4dHBhcnRzID0gdGV4dC5zcGxpdCgiICIpCiAgICAgICAgICAgICAgICAgICAgaWYgc3VtKFtUcnVlIGlmIHRleHRwYXJ0Lmxvd2VyKCkgaW4gcHJvZmlsZW5hbWUubG93ZXIoKSArICIgIiArIHByb2ZpbGVwYXJhbXN0ci5sb3dlcigpIGVsc2UgRmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0ZXh0cGFydCBpbiB0ZXh0cGFydHNdKSA9PSBsZW4odGV4dHBhcnRzKToKICAgICAgICAgICAgICAgICAgICAgICAgYWRkX3Byb2ZpbGUocHJvZmlsZW5hbWUsIHByb2ZpbGVwYXJhbSwgcHJvZmlsZXBhcmFtc3RyKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgYWRkX3Byb2ZpbGUocHJvZmlsZW5hbWUsIHByb2ZpbGVwYXJhbSwgcHJvZmlsZXBhcmFtc3RyKQogICAgICAgIHNlbGYuc2NyZWVuLnRlc3Nwcm9maWxlbGlzdC5hZGRfd2lkZ2V0KHNlbGYubGF5b3V0KQoKICAgIGRlZiBsb2FkX3Byb2ZpbGUoc2VsZiwgcHJvZmlsZXBhcmFtLCAqYXJncyk6CiAgICAgICAgIiIiIEFwcGx5IGFsbCBzZXR0aW5ncyBvZiB0aGUgY2hvb3NlbiBwcm9maWxlIHRvIHRoZSBtYWluIHdpbmRvdyIiIgogICAgICAgIGlmIGdldF9hcHAoKS5pc19vbmxpbmUoKToKICAgICAgICAgICAgZ2V0X2FwcCgpLnRlc3NlcmFjdF9vbmxpbmVfY29udHJvbGxlci5sb2FkX3Rlc3Nwcm9maWxlKHByb2ZpbGVwYXJhbSkKICAgICAgICBlbHNlOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGdldF9hcHAoKS50ZXNzZXJhY3RfY29udHJvbGxlci5sb2FkX3Rlc3Nwcm9maWxlKHByb2ZpbGVwYXJhbSkKPHxmaW1fZW5kfD4="]
["d6b7098faad25ff4efe6713995584283126c8084-1","d6b7098faad25ff4efe6713995584283126c8084","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KZnJvbSBkamFuZ28uY29yZS51cmxyZXNvbHZlcnMgaW1wb3J0IHJldmVyc2UKCmZyb20gcmV2ZXJzaW9uLmFkbWluIGltcG9ydCBWZXJzaW9uQWRtaW4KCmZyb20gcHJvZmlsZXMubW9kZWxzIGltcG9ydCBQcm9maWxlLCBBY2NvdW50VHlwZQpmcm9tIHByb2ZpbGVzLm1vZGVscyBpbXBvcnQgQWNjb3VudApmcm9tIHNvY2lhbF9hdXRoX2xvY2FsLnRlbXBsYXRldGFncy53aXRuZXNzX3RhZ3MgaW1wb3J0IGlzX3ZvdGluZ19mb3Jfd2l0bmVzcywgZ2V0X3Byb3hpZXMsIGdldF93aXRuZXNzZXMKCgpjbGFzcyBQcm9maWxlQWRtaW4oVmVyc2lvbkFkbWluKToKCiAgICBzZWFyY2hfZmllbGRzID0gKCJ1c2VyX191c2VybmFtZSIsICJ1c2VyX19lbWFpbCIsICJlbWFpbCIpCiAgICBsaXN0X2Rpc3BsYXkgPSAoInVzZXJuYW1lIiwgImdpdGh1Yl9hY2NvdW50X25hbWUiLCAic3RlZW1fYWNjb3VudF9uYW1lIiwgImVtYWlsIikKCiAgICByZWFkb25seV9maWVsZHMgPSAoJ2FjY291bnRzJywpCgogICAgZGVmIF9wcmludF9saW5rX3RvX2FjY291bnQoc2VsZiwgYWNjb3VudCwgbGFiZWxfbGFtYmRhKToKICAgICAgICByZXR1cm4gJzxhIGhyZWY9Int1cmx9Ij57bGFiZWx9PC9hPicuZm9ybWF0KAogICAgICAgICAgICB1cmw9cmV2ZXJzZSgnYWRtaW46JXNfJXNfY2hhbmdlJyAlIChhY2NvdW50Ll9tZXRhLmFwcF9sYWJlbCwgYWNjb3VudC5fbWV0YS5tb2RlbF9uYW1lKSwgYXJncz0oYWNjb3VudC5pZCwpKSwKICAgICAgICAgICAgbGFiZWw9KGxhYmVsX2xhbWJkYShhY2NvdW50KSArICgiIChjb25uZWN0ZWQpIiBpZiBhY2NvdW50LmNvbm5lY3RlZCBlbHNlICIiKSkKICAgICAgICApCgogICAgZGVmIGFjY291bnRzKHNlbGYsIG9iaik6CiAgICAgICAgcmV0dXJuICIsPGJyPiIuam9pbigKICAgICAgICAgICAgc2VsZi5fcHJpbnRfbGlua190b19hY2NvdW50KAogICAgICAgICAgICAgICAgYWNjb3VudCwKICAgICAgICAgICAgICAgIGxhbWJkYSBhY2NvdW50OiBzdHIoYWNjb3VudCkKICAgICAgICAgICAgKQogICAgICAgICAgICBmb3IgYWNjb3VudCBpbiBvYmouYWNjb3VudF9zZXQuYWxsKCkKICAgICAgICApCgogICAgYWNjb3VudHMuYWxsb3dfdGFncyA9IFRydWUKCiAgICBkZWYgZ2l0aHViX2FjY291bnRfbmFtZShzZWxmLCBvYmopOgogICAgICAgIHJldHVybiBzZWxmLl9wcmludF9saW5rX3RvX2FjY291bnQob2JqLmdpdGh1Yl9hY2NvdW50LCBsYW1iZGEgYTogYS5uYW1lKSBpZiBvYmouZ2l0aHViX2FjY291bnQgZWxzZSAnLScKCiAgICBnaXRodWJfYWNjb3VudF9uYW1lLmFsbG93X3RhZ3MgPSBUcnVlCgogICAgZGVmIHN0ZWVtX2FjY291bnRfbmFtZShzZWxmLCBvYmopOgogICAgICAgIHJldHVybiBzZWxmLl9wcmludF9saW5rX3RvX2FjY291bnQob2JqLnN0ZWVtX2FjY291bnQsIGxhbWJkYSBhOiBhLm5hbWUpIGlmIG9iai5zdGVlbV9hY2NvdW50IGVsc2UgJy0nCgogICAgc3RlZW1fYWNjb3VudF9uYW1lLmFsbG93X3RhZ3MgPSBUcnVlCgoKY2xhc3MgQ29ubmVjdGVkRmlsdGVyKGFkbWluLlNpbXBsZUxpc3RGaWx0ZXIpOgoKICAgIHRpdGxlID0gIkNvbm5lY3RlZCIKCiAgICBwYXJhbWV0ZXJfbmFtZSA9ICdjb25uZWN0ZWQnCgogICAgZGVmIGxvb2t1cHMoc2VsZiwgcmVxdWVzdCwgbW9kZWxfYWRtaW4pOgoKICAgICAgICByZXR1cm4gKAogICAgICAgICAgICAoJ2Nvbm5lY3RlZCcsICdDb25uZWN0ZWQnKSwKICAgICAgICAgICAgKCdub3Rjb25uZWN0ZWQnLCAgJ05vIGNvbm5lY3RlZCcpLAogICAgICAgICkKCiAgICBkZWYgcXVlcnlzZXQoc2VsZiwgcmVxdWVzdCwgcXVlcnlzZXQpOgoKICAgICAgICBpZiBzZWxmLnZhbHVlKCkgPT0gJ2Nvbm5lY3RlZCc6CiAgICAgICAgICAgIHJldHVybiBxdWVyeXNldC5maWx0ZXIodXNlcl9zb2NpYWxfYXV0aF9faXNudWxsPUZhbHNlKQoKICAgICAgICBpZiBzZWxmLnZhbHVlKCkgPT0gJ25vdGNvbm5lY3RlZCc6CiAgICAgICAgICAgIHJldHVybiBxdWVyeXNldC5maWx0ZXIodXNlcl9zb2NpYWxfYXV0aF9faXNudWxsPVRydWUpCgoKY2xhc3MgSXNWb3RpbmdGb3JVc0ZpbHRlcihhZG1pbi5TaW1wbGVMaXN0RmlsdGVyKToKCiAgICB0aXRsZSA9ICJJcyBWb3RpbmcgRm9yIFVzIgogICAgcGFyYW1ldGVyX25hbWUgPSAnaXN2b3Rpbmdmb3J1cycKCiAgICBkZWYgbG9va3VwcyhzZWxmLCByZXF1ZXN0LCBtb2RlbF9hZG1pbik6CgogICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICgnd2l0bmVzc3N1cHBvcnRlcicsICdXaXRuZXNzIFN1cHBvcnRlcicpLAogICAgICAgICAgICAoJ2Z1dHVyZXdpdG5lc3NzdXBwb3J0ZXInLCAgJ0Z1dHVyZSBXaXRuZXNzIFN1cHBvcnRlciA6KSAnKSwKICAgICAgICApCgogICAgZGVmIHF1ZXJ5c2V0KHNlbGYsIHJlcXVlc3QsIHF1ZXJ5c2V0KToKCiAgICAgICAgaWYgc2VsZi52YWx1ZSgpID09ICd3aXRuZXNzc3VwcG9ydGVyJzoKICAgICAgICAgICAgYWNjb3VudHMgPSBxdWVyeXNldC5maWx0ZXIodXNlcl9zb2NpYWxfYXV0aF9faXNudWxsPUZhbHNlLCBhY2NvdW50X3R5cGVfX25hbWU9IlNURUVNIikKICAgICAgICAgICAgYWNjb3VudHNfaWRzID0gWwogICAgICAgICAgICAgICAgYWNjb3VudC5pZAogICAgICAgICAgICAgICAgZm9yIGFjY291bnQgaW4gYWNjb3VudHMKICAgICAgICAgICAgICAgIGlmIGlzX3ZvdGluZ19mb3Jfd2l0bmVzcyhhY2NvdW50LnByb2ZpbGUudXNlciwgIm5vaXN5LndpdG5lc3MiKQogICAgICAgICAgICBdCgogICAgICAgICAgICByZXR1cm4gcXVlcnlzZXQuZmlsdGVyKGlkX19pbj1hY2NvdW50c19pZHMpCgogICAgICAgIGlmIHNlbGYudmFsdWUoKSA9PSAnZnV0dXJld2l0bmVzc3N1cHBvcnRlcic6CiAgICAgICAgICAgIHJldHVybiBxdWVyeXNldC5maWx0ZXIodXNlcl9zb2NpYWxfYXV0aF9faXNudWxsPVRydWUpCgoKY2xhc3MgQWNjb3VudEFkbWluKFZlcnNpb25BZG1pbik6CiAgICBsaXN0X2Rpc3BsYXkgPSAoIm5hbWUiLCAiYWNjb3VudF90eXBlIiwgImVtYWlsIiwgImxpbmtfdG9fcHJvZmlsZSIsICJjb25uZWN0ZWQiLCAibGFzdF9sb2dpbiIsICJpc192b3RpbmdfZm9yX3VzIiwgInZvdGluZ19mb3IiLCAid2l0bmVzc19wcm94eSIpCiAgICBzZWFyY2hfZmllbGRzID0gKCJuYW1lIiwgKQogICAgbGlzdF9maWx0ZXIgPSAoImFjY291bnRfdHlwZSIsIENvbm5lY3RlZEZpbHRlciwgSXNWb3RpbmdGb3JVc0ZpbHRlciwgKQoKICAgIGRlZiBjb25uZWN0ZWQoc2VsZiwgb2JqKToKICAgICAgICByZXR1cm4gYm9vbChvYmoudXNlcl9zb2NpYWxfYXV0aCkKCiAgICBjb25uZWN0ZWQuYm9vbGVhbiA9IFRydWUKCiAgICBkZWYgcHJpbnRfbGlua190b19wcm9maWxlKHNlbGYsIHByb2ZpbGUpOgogICAgICAgIHJldHVybiAnPGEgaHJlZj0ie3VybH0iPntsYWJlbH08L2E+Jy5mb3JtYXQoCiAgICAgICAgICAgIHVybD1yZXZlcnNlKCdhZG1pbjolc18lc19jaGFuZ2UnICUgKHByb2ZpbGUuX21ldGEuYXBwX2xhYmVsLCBwcm9maWxlLl9tZXRhLm1vZGVsX25hbWUpLCBhcmdzPShwcm9maWxlLmlkLCkpLAogICAgICAgICAgICBsYWJlbD1zdHIocHJvZmlsZSkKICAgICAgICApCgogICAgZGVmIGxpbmtfdG9fcHJvZmlsZShzZWxmLCBvYmopOgogICAgICAgIHJldHVybiBzZWxmLnByaW50X2xpbmtfdG9fcHJvZmlsZShvYmoucHJvZmlsZSkgaWYgb2JqLnByb2ZpbGUgZWxzZSAiLSIKCiAgICBsaW5rX3RvX3Byb2ZpbGUuYWxsb3dfdGFncyA9IFRydWUKCiAgICBkZWYgZ2V0X3NlYXJjaF9yZXN1bHRzKHNlbGYsIHJlcXVlc3QsIHF1ZXJ5c2V0LCBzZWFyY2hfdGVybSk6CiAgICAgICAgcXVlcnlzZXQsIHVzZV9kaXN0aW5jdCA9IHN1cGVyKEFjY291bnRBZG1pbiwgc2VsZikuZ2V0X3NlYXJjaF9yZXN1bHRzKHJlcXVlc3QsIHF1ZXJ5c2V0LCBzZWFyY2hfdGVybSkKICAgICAgICB0cnk6CiAgICAgICAgICAgIGlmIGFueShbCiAgICAgICAgICAgICAgICBzZWFyY2hfdGVybS51cHBlcigpLnN0YXJ0c3dpdGgoYWNjb3VudF90eXBlWzBdICsgIjoiKQogICAgICAgICAgICAgICAgZm9yIGFjY291bnRfdHlwZSBpbiBBY2NvdW50LlRZUEVfQ0hPSUNFUwogICAgICAgICAgICBdKToKICAgICAgICAgICAgICAgICMgaWYgc2VhcmNoX3Rlcm0uc3RhcnRzd2l0aCgic3RlZW06Iikgb3Igc2VhcmNoX3Rlcm0uc3RhcnRzd2l0aCgiZ2l0aHViOiIpOgogICAgICAgICAgICAgICAgdG9rZW5zID0gc2VhcmNoX3Rlcm0uc3BsaXQoIjoiKQogICAgICAgICAgICAgICAgdHlwZV8gPSB0b2tlbnNbMF0udXBwZXIoKQogICAgICAgICAgICAgICAgbmFtZSA9ICI6Ii5qb2luKHRva2Vuc1sxOl0pCiAgICAgICAgICAgICAgICBxdWVyeXNldCB8PSBzZWxmLm1vZGVsLm9iamVjdHMuZmlsdGVyKHR5cGU9dHlwZV8sIG5hbWU9bmFtZSkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHBhc3MKCiAgICAgICAgcmV0dXJuIHF1ZXJ5c2V0LCB1c2VfZGlzdGluY3QKCiAgICBkZWYgbGFzdF9sb2dpbihzZWxmLCBvYmopOgogICAgICAgIHJldHVybiBvYmoucHJvZmlsZSBhbmQgb2JqLnByb2ZpbGUudXNlciBhbmQgb2JqLnByb2ZpbGUudXNlci5sYXN0X2xvZ2luCgogICAgbGFzdF9sb2dpbi5hZG1pbl9vcmRlcl9maWVsZCA9ICdwcm9maWxlX191c2VyX19sYXN0X2xvZ2luJwogICAgbGFzdF9sb2dpbi5zaG9ydF9kZXNjcmlwdGlvbiA9ICdMYXN0IGxvZ2luJwoKICAgIGRlZiBpc192b3RpbmdfZm9yX3VzKHNlbGYsIG9iaik6CiAgICAgICAgcmV0dXJuIG9iai5wcm9maWxlIGFuZCBpc192b3RpbmdfZm9yX3dpdG5lc3Mob2JqLnByb2ZpbGUudXNlciwgIm5vaXN5LndpdG5lc3MiKQoKICAgIGlzX3ZvdGluZ19mb3JfdXMuYm9vbGVhbiA9IFRydWUKCiAgICBkZWYgdm90aW5nX2ZvcihzZWxmLCBvYmopOgogICAgICAgIHJldHVybiBvYmoucHJvZmlsZSBhbmQgIiwgIi5qb2luKGdldF93aXRuZXNzZXMob2JqLnByb2ZpbGUudXNlcikpCgogICAgZGVmIHdpdG5lc3NfcHJveHkoc2VsZiwgb2JqKToKICAgICAgICByZXR1cm4gb2JqLnByb2ZpbGUgYW5kICIsICIuam9pbihnZXRfcHJveGllcyhvYmoucHJvZmlsZS51c2VyKSkKCgoKY2xhc3MgQWNjb3VudFR5cGVBZG1pbihWZXJzaW9uQWRtaW4pOgoKICAgIHNlYXJjaF9maWVsZHMgPSAoIm5hbWUiLCAiZGlzcGxheV9uYW1lIikKPHxmaW1faG9sZXw+CgphZG1pbi5zaXRlLnJlZ2lzdGVyKFByb2ZpbGUsIFByb2ZpbGVBZG1pbikKYWRtaW4uc2l0ZS5yZWdpc3RlcihBY2NvdW50LCBBY2NvdW50QWRtaW4pCmFkbWluLnNpdGUucmVnaXN0ZXIoQWNjb3VudFR5cGUsIEFjY291bnRUeXBlQWRtaW4pCjx8ZmltX3N1ZmZpeHw+CiAgICBsaXN0X2Rpc3BsYXkgPSAoCiAgICAgICAgIm5hbWUiLCAiZGlzcGxheV9uYW1lIiwgInNvY2lhbF9hdXRoX3Byb3ZpZGVyX25hbWUiLCAibGlua190b19hY2NvdW50X3dpdGhfcGFyYW0iLCAibGlua190b19hdmF0YXJfd2l0aF9wYXJhbXMiCiAgICApCgo8fGZpbV9lbmR8Pg=="]
["ebbe287f6fef52d957d26c24c3a3cae89b8d2769-2","ebbe287f6fef52d957d26c24c3a3cae89b8d2769","PHxmaW1fcHJlZml4fD4KIwojIFB5U05NUCBNSUIgbW9kdWxlIFdMU1gtTUVTSC1NSUIgKGh0dHA6Ly9zbm1wbGFicy5jb20vcHlzbWkpCiMgQVNOLjEgc291cmNlIGZpbGU6Ly8vVXNlcnMvZGF2d2FuZzQvRGV2L21pYnMuc25tcGxhYnMuY29tL2FzbjEvV0xTWC1NRVNILU1JQgojIFByb2R1Y2VkIGJ5IHB5c21pLTAuMy40IGF0IFdlZCBNYXkgIDEgMTU6MzY6NDggMjAxOQojIE9uIGhvc3QgREFWV0FORzQtTS0xNDc1IHBsYXRmb3JtIERhcndpbiB2ZXJzaW9uIDE4LjUuMCBieSB1c2VyIGRhdndhbmc0CiMgVXNpbmcgUHl0aG9uIHZlcnNpb24gMy43LjMgKGRlZmF1bHQsIE1hciAyNyAyMDE5LCAwOToyMzoxNSkgCiMKd2xzeEVudGVycHJpc2VNaWJNb2R1bGVzLCA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiQVJVQkEtTUlCIiwgIndsc3hFbnRlcnByaXNlTWliTW9kdWxlcyIpCkFydWJhTWVzaFJvbGUsIEFydWJhRW5jcnlwdGlvbk1ldGhvZHMsIEFydWJhUGh5VHlwZSA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiQVJVQkEtVEMiLCAiQXJ1YmFNZXNoUm9sZSIsICJBcnViYUVuY3J5cHRpb25NZXRob2RzIiwgIkFydWJhUGh5VHlwZSIpCk9jdGV0U3RyaW5nLCBJbnRlZ2VyLCBPYmplY3RJZGVudGlmaWVyID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJBU04xIiwgIk9jdGV0U3RyaW5nIiwgIkludGVnZXIiLCAiT2JqZWN0SWRlbnRpZmllciIpCk5hbWVkVmFsdWVzLCA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiQVNOMS1FTlVNRVJBVElPTiIsICJOYW1lZFZhbHVlcyIpClZhbHVlUmFuZ2VDb25zdHJhaW50LCBWYWx1ZVNpemVDb25zdHJhaW50LCBDb25zdHJhaW50c0ludGVyc2VjdGlvbiwgU2luZ2xlVmFsdWVDb25zdHJhaW50LCBDb25zdHJhaW50c1VuaW9uID0gbWliQnVpbGRlci5pbXBvcnRTeW1ib2xzKCJBU04xLVJFRklORU1FTlQiLCAiVmFsdWVSYW5nZUNvbnN0cmFpbnQiLCAiVmFsdWVTaXplQ29uc3RyYWludCIsICJDb25zdHJhaW50c0ludGVyc2VjdGlvbiIsICJTaW5nbGVWYWx1ZUNvbnN0cmFpbnQiLCAiQ29uc3RyYWludHNVbmlvbiIpCk5vdGlmaWNhdGlvbkdyb3VwLCBPYmplY3RHcm91cCwgTW9kdWxlQ29tcGxpYW5jZSA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiU05NUHYyLUNPTkYiLCAiTm90aWZpY2F0aW9uR3JvdXAiLCAiT2JqZWN0R3JvdXAiLCAiTW9kdWxlQ29tcGxpYW5jZSIpCk1vZHVsZUlkZW50aXR5LCBNaWJTY2FsYXIsIE1pYlRhYmxlLCBNaWJUYWJsZVJvdywgTWliVGFibGVDb2x1bW4sIEJpdHMsIENvdW50ZXI2NCwgSXBBZGRyZXNzLCBUaW1lVGlja3MsIE9iamVjdElkZW50aXR5LCBzbm1wTW9kdWxlcywgaXNvLCBOb3RpZmljYXRpb25UeXBlLCBNaWJJZGVudGlmaWVyLCBHYXVnZTMyLCBDb3VudGVyMzIsIFVuc2lnbmVkMzIsIEludGVnZXIzMiA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiU05NUHYyLVNNSSIsICJNb2R1bGVJZGVudGl0eSIsICJNaWJTY2FsYXIiLCAiTWliVGFibGUiLCAiTWliVGFibGVSb3ciLCAiTWliVGFibGVDb2x1bW4iLCAiQml0cyIsICJDb3VudGVyNjQiLCAiSXBBZGRyZXNzIiwgIlRpbWVUaWNrcyIsICJPYmplY3RJZGVudGl0eSIsICJzbm1wTW9kdWxlcyIsICJpc28iLCAiTm90aWZpY2F0aW9uVHlwZSIsICJNaWJJZGVudGlmaWVyIiwgIkdhdWdlMzIiLCAiQ291bnRlcjMyIiwgIlVuc2lnbmVkMzIiLCAiSW50ZWdlcjMyIikKVGV4dHVhbENvbnZlbnRpb24sIFJvd1N0YXR1cywgVGltZUludGVydmFsLCBUcnV0aFZhbHVlLCBEYXRlQW5kVGltZSwgUGh5c0FkZHJlc3MsIFRBZGRyZXNzLCBURG9tYWluLCBEaXNwbGF5U3RyaW5nLCBUZXN0QW5kSW5jciwgTWFjQWRkcmVzcywgU3RvcmFnZVR5cGUgPSBtaWJCdWlsZGVyLmltcG9ydFN5bWJvbHMoIlNOTVB2Mi1UQyIsICJUZXh0dWFsQ29udmVudGlvbiIsICJSb3dTdGF0dXMiLCAiVGltZUludGVydmFsIiwgIlRydXRoVmFsdWUiLCAiRGF0ZUFuZFRpbWUiLCAiUGh5c0FkZHJlc3MiLCAiVEFkZHJlc3MiLCAiVERvbWFpbiIsICJEaXNwbGF5U3RyaW5nIiwgIlRlc3RBbmRJbmNyIiwgIk1hY0FkZHJlc3MiLCAiU3RvcmFnZVR5cGUiKQp3bGFuQVBNYWNBZGRyZXNzLCA9IG1pYkJ1aWxkZXIuaW1wb3J0U3ltYm9scygiV0xTWC1XTEFOLU1JQiIsICJ3bGFuQVBNYWNBZGRyZXNzIikKd2xzeE1lc2hNSUIgPSBNb2R1bGVJZGVudGl0eSgoMSwgMywgNiwgMSwgNCwgMSwgMTQ4MjMsIDIsIDIsIDEsIDEzKSkKd2xzeE1lc2hNSUIuc2V0UmV2aXNpb25zKCgnMTkwNy0wOC0wNiAwNToxOCcsKSkKCmlmIGdldGF0dHIobWliQnVpbGRlciwgJ3ZlcnNpb24nLCAoMCwgMCwgMCkpID4gKDQsIDQsIDApOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBpZiBtaWJCdWlsZGVyLmxvYWRUZXh0czogd2xzeE1lc2hNSUIuc2V0UmV2aXNpb25zRGVzY3JpcHRpb25zKCgnVGhlIGluaXRpYWwgcmV2aXNpb24uJywpKQo8fGZpbV9lbmR8Pg=="]
["30937b6600351c963f26e53982bc3b0ad27480f0-4","30937b6600351c963f26e53982bc3b0ad27480f0","PHxmaW1fcHJlZml4fD4KTiA9IDMKc3R1ZGVudCA9IFtdCnN1YmplY3RzID0gWyJDaGluZXNlIiwgIkVuZ2xpc2giLCAiTWF0aGVtYXRpY3MiXQpmb3IgaSBpbiByYW5nZSg1KToKICAgIHN0dWRlbnQuYXBwZW5kKFsiIiwgIiIsIFtdXSkKCgpkZWYgaW5wdXRfc3R1KHN0dSk6CiAgICBmb3IgaSBpbiByYW5nZShOKToKICAgICAgICBzdHVbaV1bMF0gPSBpbnB1dCgiZW50ZXIgc3R1ZGVudCBudW06IikKICAgICAgICBzdHVbaV1bMV0gPSBpbnB1dCgiRW50ZXIgc3R1ZGVudCBuYW1lOiIpCiAgICAgICAgZm9yIGogaW4gcmFuZ2UoMyk6CiAgICAgICAgICAgIHN0dVtpXVsyXS5hcHBlbmQoaW50KGlucHV0KHN1YmplY3RzW2pdKycgc2NvcmU6JykpKQoKCmRlZiBvdXRwdXRfc3R1KHN0dSk6CiAgICBmb3IgaSBpbiByYW5nZShOKToKICAgICAgICBwcmludCgnJS02cyUtMTBzJyAlIChzdHVbaV1bMF0sIHN0dVtpXVsxXSkpCiAgICAgICAgZm9yIGogaW4gcmFuZ2UoMyk6CiAgICAgICAgICAgIHByaW50KCclLThkJyAlIChzdHVbaV1bMl1bal0pKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGlucHV0X3N0dShzdHVkZW50KQogICAgcHJpbnQoc3R1ZGVudCkKICAgIG91dHB1dF9zdHUoc3R1ZGVudCkKPHxmaW1fZW5kfD4="]
["c6332d73bc08825d7787de5bf3fbe9705c373108-5","c6332d73bc08825d7787de5bf3fbe9705c373108","PHxmaW1fcHJlZml4fD4KIyF+L2FuYWNvbmRhMi9iaW4vcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgppbXBvcnQgbXJqb2IKZnJvbSBtcmpvYi5wcm90b2NvbCBpbXBvcnQgUmF3UHJvdG9jb2wKZnJvbSBtcmpvYi5qb2IgaW1wb3J0IE1SSm9iCmZyb20gbXJqb2Iuc3RlcCBpbXBvcnQgTVJTdGVwCgpjbGFzcyBkaXN0cmlidXRpb24oTVJKb2IpOgogICAgCiAgICAjIyMjIFRPRE86IGRpdmlkZSB0aGUgY291bnRzIGJ5IDEwMDBzIHRvIG1ha2UgdGhlIGdyYXBoIG1vcmUgcmVhZGFibGUKICAgICMjIyMgVE9ETzogc3BsaXQgdGhlIGxlbmd0aHMgaW50byBidWNrZXRzIDwxMCwgPDI1LCA8NTAsIDw3NSwgPDEwMAogICAgZGVmIG1hcHBlcihzZWxmLCBfLCBsaW5lKToKICAgICAgICBmaWVsZHMgPSBsaW5lLnN0cmlwKCJcbiIpLnNwbGl0KCJcdCIpCiAgICAgICAgeWllbGQgbGVuKGZpZWxkc1swXSksIGludChmaWVsZHNbMV0pCiAgICAKPHxmaW1faG9sZXw+CiAgICAgICAgeWllbGQgbGVuZ3RoLCBzdW0oY291bnRzKQogICAgCiAgICBkZWYgcmVkdWNlcl9zb3J0KHNlbGYsIGtleSwgdmFsdWVzKToKICAgICAgICB5aWVsZCBrZXksIGxpc3QodmFsdWVzKVswXQogICAgICAgIAogICAgZGVmIHN0ZXBzKHNlbGYpOgogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgIE1SU3RlcCgKICAgICAgICAgICAgICAgIG1hcHBlciA9IHNlbGYubWFwcGVyLAogICAgICAgICAgICAgICAgY29tYmluZXIgPSBzZWxmLmNvbWJpbmVyLAogICAgICAgICAgICAgICAgcmVkdWNlciA9IHNlbGYucmVkdWNlciwKICAgICAgICAgICAgICAgIGpvYmNvbmYgPSB7CiAgICAgICAgICAgICAgICAgICAgIm1hcHJlZHVjZS5qb2IucmVkdWNlcyI6ICI0IiwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKSwKICAgICAgICAgICAgTVJTdGVwKAogICAgICAgICAgICAgICAgcmVkdWNlciA9IHNlbGYucmVkdWNlcl9zb3J0LAogICAgICAgICAgICAgICAgam9iY29uZiA9IHsKICAgICAgICAgICAgICAgICAgICAiU09SVF9WQUxVRVMiOlRydWUsCiAgICAgICAgICAgICAgICAgICAgIm1hcHJlZHVjZS5qb2IucmVkdWNlcyI6ICIxIiwKICAgICAgICAgICAgICAgICAgICAic3RyZWFtLm51bS5tYXAub3V0cHV0LmtleS5maWVsZHMiOiAxLAogICAgICAgICAgICAgICAgICAgICJtYXByZWR1Y2Uuam9iLm91dHB1dC5rZXkuY29tcGFyYXRvci5jbGFzcyIgOiAib3JnLmFwYWNoZS5oYWRvb3AubWFwcmVkLmxpYi5LZXlGaWVsZEJhc2VkQ29tcGFyYXRvciIsCiAgICAgICAgICAgICAgICAgICAgIm1hcHJlZHVjZS5wYXJ0aXRpb24ua2V5Y29tcGFyYXRvci5vcHRpb25zIjoiLWsxLDFuciIsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkKICAgICAgICBdCiAgICAKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGRpc3RyaWJ1dGlvbi5ydW4oKQo8fGZpbV9zdWZmaXh8PgogICAgZGVmIGNvbWJpbmVyKHNlbGYsbGVuZ3RoLCBjb3VudHMpOgogICAgICAgIHlpZWxkIGxlbmd0aCwgc3VtKGNvdW50cykKICAgICAgICAKICAgIGRlZiByZWR1Y2VyKHNlbGYsbGVuZ3RoLCBjb3VudHMpOgo8fGZpbV9lbmR8Pg=="]
["74c7642ef1a21839c889c7148188fc4ad46ed641-3","74c7642ef1a21839c889c7148188fc4ad46ed641","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzeXMKaW1wb3J0IGpzb24KaW1wb3J0IHBpY2tsZQppbXBvcnQgbG9nZ2luZwppbXBvcnQgaW1wb3J0bGliCmltcG9ydCBudW1weSBhcyBucAoKZnJvbSBweWNvY290b29scy5jb2NvZXZhbCBpbXBvcnQgQ09DT2V2YWwKCmltcG9ydCBfaW5pdF9wYXRocwpmcm9tIGRhdGFzZXRzLmpzb25fZGF0YXNldCBpbXBvcnQgSnNvbkRhdGFzZXQKaW1wb3J0IGRhdGFzZXRzLmpzb25fZGF0YXNldF9ldmFsdWF0b3IgYXMganNvbl9kYXRhc2V0X2V2YWx1YXRvcgpmcm9tIGRhdGFzZXRzLmpzb25fZGF0YXNldF9ldmFsdWF0b3IgaW1wb3J0IGV2YWx1YXRlX2JveGVzCmZyb20gZGF0YXNldHMgaW1wb3J0IGRhdGFzZXRfY2F0YWxvZwpmcm9tIGRhdGFzZXRzIGltcG9ydCB0YXNrX2V2YWx1YXRpb24KCiNndF9kYXRhc2V0X25hbWUgPSAnY3M2X2Fubm90X2V2YWxfdmFsLWVhc3knCiNndF9kYXRhc2V0X25hbWUgPSAnY3M2X3RyYWluX2d0JwpndF9kYXRhc2V0X25hbWUgPSAnY3M2X3RyYWluX2d0X3NhbWVfaW1ncycKCgojIENTNiBHcm91bmQgVHJ1dGggLS0gZnVsbCBkYXRhc2V0IChOT1QgcHJlZGljdGlvbiBmcm9tIGEgbW9kZWw6IGFjdHVhbCBncm91bmQgdHJ1dGggZm9yIHRoZSBmdWxsIGRhdGFzZXQpCmNzNl9ndF9qc29uID0gJy9tbnQvbmZzL3dvcmsxL2VsbS9wY2hha3JhYmFydHkvY3M2X2pzb25zL2NzNi10cmFpbi1ndF9mYWNlX3RyYWluX2Fubm90X2NvY29fc3R5bGUuanNvbicKCiMgQ1M2IEhQIEpzb24KY3M2X2hwX2pzb24gPSAnZGF0YS9DUzZfYW5ub3QvY3M2LXRyYWluLWhwLmpzb24nCgojIENTNiBIUCBKc29uIHdpdGggdGhlIGRpc3RpbGwgMC43IHNvZnRlbmluZyBvZiB0aGUgZGV0ZWN0aW9uIHNjb3JlcyAobm90IHRyYWNrZXIgc2NvcmVzKQpjczZfaHBfZGlzdGlsbDA3MF9yZW1hcHBlZCA9ICdkYXRhL2NzNl9qc29ucy9jczYtdHJhaW4taHBfcmVtYXBwZWRfZGlzdGlsbC0wLjcuanNvbicKCiMgTm9pc3kgQ1M2IGdyb3VuZCB0cnV0aCBKU09OcwpjczZfbm9pc3lfZ3RfMDIwID0gJy9tbnQvbmZzL3dvcmsxL2VsbS9wY2hha3JhYmFydHkvY3M2X2pzb25zL2NzNi10cmFpbi1ndF9mYWNlX3RyYWluX2Fubm90X2NvY29fc3R5bGVfbm9pc3ktMDIwLmpzb24nCmNzNl9ub2lzeV9ndF8wMzAgPSAnL21udC9uZnMvd29yazEvZWxtL3BjaGFrcmFiYXJ0eS9jczZfanNvbnMvY3M2LXRyYWluLWd0X2ZhY2VfdHJhaW5fYW5ub3RfY29jb19zdHlsZV9ub2lzeS0wMzAuanNvbicKY3M2X25vaXN5X2d0XzA0MCA9ICcvbW50L25mcy93b3JrMS9lbG0vcGNoYWtyYWJhcnR5L2NzNl9qc29ucy9jczYtdHJhaW4tZ3RfZmFjZV90cmFpbl9hbm5vdF9jb2NvX3N0eWxlX25vaXN5LTA0MC5qc29uJwpjczZfbm9pc3lfZ3RfMDUwID0gJy9tbnQvbmZzL3dvcmsxL2VsbS9wY2hha3JhYmFydHkvY3M2X2pzb25zL2NzNi10cmFpbi1ndF9mYWNlX3RyYWluX2Fubm90X2NvY29fc3R5bGVfbm9pc3ktMDUwLmpzb24nCmNzNl9ub2lzeV9ndF8wNjAgPSAnL21udC9uZnMvd29yazEvZWxtL3BjaGFrcmFiYXJ0eS9jczZfanNvbnMvY3M2LXRyYWluLWd0X2ZhY2VfdHJhaW5fYW5ub3RfY29jb19zdHlsZV9ub2lzeS0wNjAuanNvbicKY3M2X25vaXN5X2d0XzA3MCA9ICcvbW50L25mcy93b3JrMS9lbG0vcGNoYWtyYWJhcnR5L2NzNl9qc29ucy9jczYtdHJhaW4tZ3RfZmFjZV90cmFpbl9hbm5vdF9jb2NvX3N0eWxlX25vaXN5LTA3MC5qc29uJwpjczZfbm9pc3lfZ3RfMDgwID0gJy9tbnQvbmZzL3dvcmsxL2VsbS9wY2hha3JhYmFydHkvY3M2X2pzb25zL2NzNi10cmFpbi1ndF9mYWNlX3RyYWluX2Fubm90X2NvY29fc3R5bGVfbm9pc3ktMDgwLmpzb24nCmNzNl9ub2lzeV9ndF8wODUgPSAnL21udC9uZnMvd29yazEvZWxtL3BjaGFrcmFiYXJ0eS9jczZfanNvbnMvY3M2LXRyYWluLWd0X2ZhY2VfdHJhaW5fYW5ub3RfY29jb19zdHlsZV9ub2lzeS0wODUuanNvbicKY3M2X25vaXN5X2d0XzA5MCA9ICcvbW50L25mcy93b3JrMS9lbG0vcGNoYWtyYWJhcnR5L2NzNl9qc29ucy9jczYtdHJhaW4tZ3RfZmFjZV90cmFpbl9hbm5vdF9jb2NvX3N0eWxlX25vaXN5LTA5MC5qc29uJwpjczZfbm9pc3lfZ3RfMDk1ID0gJy9tbnQvbmZzL3dvcmsxL2VsbS9wY2hha3JhYmFydHkvY3M2X2pzb25zL2NzNi10cmFpbi1ndF9mYWNlX3RyYWluX2Fubm90X2NvY29fc3R5bGVfbm9pc3ktMDk1Lmpzb24nCmNzNl9ub2lzeV9ndF8xMDAgPSAnL21udC9uZnMvd29yazEvZWxtL3BjaGFrcmFiYXJ0eS9jczZfanNvbnMvY3M2LXRyYWluLWd0X2ZhY2VfdHJhaW5fYW5ub3RfY29jb19zdHlsZV9ub2lzeS0xMDAuanNvbicKCiMgR3JvdW5kIHRydXRoIEpTT04gKE5PVCBwcmVkaWN0aW9uIGZyb20gYSBtb2RlbDogYWN0dWFseSBncm91bmQgdHJ1dGgpCmNzNl9ndF92YWxfZWFzeV9qc29uID0gJy9tbnQvbmZzL3dvcmsxL2VsbS9wY2hha3JhYmFydHkvY3M2X2pzb25zL2NzNl9ndF9hbm5vdF92YWwtZWFzeS5qc29uJwoKIyBXSURFUiBiYXNlbGluZSBtb2RlbCBkZXRlY3Rpb25zCndpZGVyX21vZGVsX2RldF9qc29uID0gJy9tbnQvbmZzL3dvcmsxL2VsbS9wY2hha3JhYmFydHkvY3M2X2pzb25zL3RyYWluLVdJREVSX3ZhbC1lYXN5X2NvbmYtMC4xX2NzNl9hbm5vdF9ldmFsX3Njb3Jlcy5qc29uJwogICAgIAojIENTNiBHVCBtb2RlbCBkZXRlY3Rpb25zCmNzNl9ndF9tb2RlbF9kZXRfanNvbiA9ICcvbW50L25mcy93b3JrMS9lbG0vcGNoYWtyYWJhcnR5L2NzNl9qc29ucy90cmFpbi1DUzYtR1QtYWxsLTMwa192YWwtZWFzeV9jb25mLTAuMV9jczZfYW5ub3RfZXZhbF9zY29yZXMuanNvbicKICAgICAgICAgCiMgQ1M2IEdUK1dJREVSIG1vZGVsIGRldGVjdGlvbnMKY3M2X2hwX2FuZF93aWRlcl9iczY0X21vZGVsX2RldF9qc29uID0gJy9tbnQvbmZzL3dvcmsxL2VsbS9wY2hha3JhYmFydHkvY3M2X2pzb25zL3RyYWluLUNTNi1IUCtXSURFUi1iczY0LTVrX3ZhbC1lYXN5X2NvbmYtMC4xX2NzNl9hbm5vdF9ldmFsX3Njb3Jlcy5qc29uJwoKIyBDUzYgdHJhaW4gSFAgKyBXSURFUiBiczUxMiBtb2RlbCBkZXRlY3Rpb25zCmNzNl9ocF9hbmRfd2lkZXJfYnM1MTJfbW9kZWxfZGV0X2pzb24gPSAnL21udC9uZnMvd29yazEvZWxtL3BjaGFrcmFiYXJ0eS9jczZfanNvbnMvdHJhaW4tQ1M2LUhQK1dJREVSLWJzNTEyLTE1a192YWwtZWFzeV9jb25mLTAuMV9jczZfYW5ub3RfZXZhbF9zY29yZXMuanNvbicKIAojIENTNiB0cmFpbiBIUApjczZfaHBfbW9kZWxfZGV0X2pzb24gPSAnL21udC9uZnMvd29yazEvZWxtL3BjaGFrcmFiYXJ0eS9jczZfanNvbnMvdHJhaW4tQ1M2LVRyYWluLUhQLTVrX3ZhbC1lYXN5X2NvbmYtMC4xX2NzNl9hbm5vdF9ldmFsX3Njb3Jlcy5qc29uJwoKIyBDUzYgdHJhaW4gSFArV0lERVIgKGJzNTEyLWdwdTQtNWspIG1vZGVsIGRldGVjdGlvbnMKY3M2X2hwX2FuZF93aWRlcl9iczUxMl9ncHU0XzVrX21vZGVsX2RldF9qc29uID0gJy9tbnQvbmZzL3dvcmsxL2VsbS9wY2hha3JhYmFydHkvY3M2X2pzb25zL3RyYWluLUNTNi1IUCtXSURFUi1iczUxMi1ncHU0LTVrX3ZhbC1lYXN5X2NvbmYtMC4xX2NzNl9hbm5vdF9ldmFsX3Njb3Jlcy5qc29uJwoKCiNkZXRfanNvbiA9ICd0bXAvY3M2LXRyYWluLWd0X2ZhY2VfdHJhaW5fYW5ub3RfY29jb19zdHlsZV9ub2lzeS0wLjUwLmpzb24nICMgY3M2X25vaXN5X2d0XzEwMAoKIyBqc29uIHdpdGggaW1hZ2VzIGNvbW1vbiBpbiBjczYtdHJhaW4tZ3QgYW5kIGNzNi10cmFpbi1ocApjczZfaHBfanNvbl9zYW1lX2ltZ3MgPSAnL21udC9uZnMvd29yazEvZWxtL3BjaGFrcmFiYXJ0eS9jczZfanNvbnMvbm9pc2VfcmVkdWN0aW9uX3dpdGhfc29mdF9sYWJlbC9jczYtdHJhaW4taHBfc2FtZV9pbWdzLmpzb24nCgoKZGV0X2pzb24gPSBjczZfaHBfanNvbl9zYW1lX2ltZ3MgI2NzNl9ndF9qc29uICNjczZfaHBfanNvbgpvdXRwdXRfZGlyID0gJ3RtcF9yZXMnCgpkZWYgZGlzcF9kZXRlY3Rpb25fZXZhbF9tZXRyaWNzKGpzb25fZGF0YXNldCwgY29jb19ldmFsLCBpb3VfbG93PTAuNSwgaW91X2hpZ2g9MC45NSwgb3V0cHV0X2Rpcj1Ob25lKToKICAgICBkZWYgX2dldF90aHJfaW5kKGNvY29fZXZhbCwgdGhyKToKICAgICAgICAgaW5kID0gbnAud2hlcmUoKGNvY29fZXZhbC5wYXJhbXMuaW91VGhycyA+IHRociAtIDFlLTUpICYKICAgICAgICAgICAgICAgICAgICAgICAgKGNvY29fZXZhbC5wYXJhbXMuaW91VGhycyA8IHRociArIDFlLTUpKVswXVswXQogICAgICAgICBpb3VfdGhyID0gY29jb19ldmFsLnBhcmFtcy5pb3VUaHJzW2luZF0KICAgICAgICAgYXNzZXJ0IG5wLmlzY2xvc2UoaW91X3RociwgdGhyKQogICAgICAgICByZXR1cm4gaW5kCiAKICAgICBJb1VfbG9fdGhyZXNoID0gaW91X2xvdwogICAgIElvVV9oaV90aHJlc2ggPSBpb3VfaGlnaAogCiAgICAgaW5kX2xvID0gX2dldF90aHJfaW5kKGNvY29fZXZhbCwgSW9VX2xvX3RocmVzaCkKICAgICBpbmRfaGkgPSBfZ2V0X3Rocl9pbmQoY29jb19ldmFsLCBJb1VfaGlfdGhyZXNoKQogCiAgICAgY2xhc3NfbWFwcyA9IHt9CiAgICAgY2xhc3NfbWFwc1snSW9VX2xvdyddID0gSW9VX2xvX3RocmVzaAogICAgIGNsYXNzX21hcHNbJ0lvVV9oaWdoJ10gPSBJb1VfaGlfdGhyZXNoCiAKICAgICBwcmVjaXNpb24gPSBjb2NvX2V2YWwuZXZhbFsncHJlY2lzaW9uJ11baW5kX2xvOihpbmRfaGkgKyAxKSwgOiwgOiwgMCwgMl0KICAgICBhcF9kZWZhdWx0ID0gbnAubWVhbihwcmVjaXNpb24pI1twcmVjaXNpb24gPiAtMV0pCiAgICAgcmVjYWxsID0gY29jb19ldmFsLmV2YWxbJ3JlY2FsbCddW2luZF9sbzooaW5kX2hpICsgMSksIDosIDAsIDJdCiAgICAgYXJfZGVmYXVsdCA9IG5wLm1lYW4ocmVjYWxsKSNbcmVjYWxsID4gLTFdKQogICAgIHByaW50KAogICAgICAgICAnfn5+fiBNZWFuIGFuZCBwZXItY2F0ZWdvcnkgQVAgQCBJb1U9W3s6LjJmfSx7Oi4yZn1dIH5+fn4nLmZvcm1hdCgKICAgICAgICAgICAgIElvVV9sb190aHJlc2gsIElvVV9oaV90aHJlc2gpKQogICAgIHByaW50KCdPdmVyYWxsIC0tPiB7Oi4yZn0sezouMmZ9Jy5mb3JtYXQoMTAwICogYXBfZGVmYXVsdCwgMTAwICogYXJfZGVmYXVsdCkpCiAgICAgY2xhc3NfbWFwcy51cGRhdGUoeydPdmVyYWxsJyA6IDEwMCphcF9kZWZhdWx0fSkKICAgICBmb3IgY2xzX2luZCwgY2xzIGluIGVudW1lcmF0ZShqc29uX2RhdGFzZXQuY2xhc3Nlcyk6CiAgICAgICAgIGlmIGNscyA9PSAnX19iYWNrZ3JvdW5kX18nOgogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgIyBtaW51cyAxIGJlY2F1c2Ugb2YgX19iYWNrZ3JvdW5kX18KICAgICAgICAgcHJlY2lzaW9uID0gY29jb19ldmFsLmV2YWxbJ3ByZWNpc2lvbiddWwogICAgICAgICAgICAgaW5kX2xvOihpbmRfaGkgKyAxKSwgOiwgY2xzX2luZCAtIDEsIDAsIDJdCiAgICAgICAgIGFwID0gbnAubWVhbihwcmVjaXNpb25bcHJlY2lzaW9uID4gLTFdKQogICAgICAgICByZWNhbGwgPSBjb2NvX2V2YWwuZXZhbFsncmVjYWxsJ11baW5kX2xvOihpbmRfaGkrMSksIGNsc19pbmQgLSAxLCAwLCAyXQogICAgICAgICBhciA9IG5wLm1lYW4ocmVjYWxsW3JlY2FsbCA+IC0xXSkKICAgICAgICAgcHJpbnQoc3RyKGNscykrJyAtLT4gezouMmZ9LHs6LjJmfScuZm9ybWF0KDEwMCAqIGFwLCAxMDAgKiBhcikpCiAgICAgICAgIGNsYXNzX21hcHMudXBkYXRlKHtzdHIoY2xzKSA6IDEwMCAqIGFwfSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogCiAgICAgIyBzYXZlIGNsYXNzLXdpc2UgbUFQCiAgICAgaWYgbm90IChvdXRwdXRfZGlyIGlzIE5vbmUpOgogICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKG91dHB1dF9kaXIsJ2NsYXNzbUFQQElvVXMnK3N0cihpb3VfbG93KSsnLScrc3RyKGlvdV9oaWdoKSsnLmpzb24nKSwndycpIGFzIGY6Cjx8ZmltX2VuZHw+"]
["5c1b29259a681dd8e1593f1ff1ef4cac4c1125e2-1","5c1b29259a681dd8e1593f1ff1ef4cac4c1125e2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGluc3BlY3QKaW1wb3J0IG1hdGgKaW1wb3J0IHJlCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAoKZnJvbSBmb250VG9vbHMuc3Vic2V0IGltcG9ydCBtYWluIGFzIHN1YnNldF9mb250CmZyb20gc3BoaW54LmFwcGxpY2F0aW9uIGltcG9ydCBTcGhpbngKCgpkZWYgY2xlYW51cF9mb250YXdlc29tZV9jc3MoYXBwOiBTcGhpbngpIC0+IE5vbmU6CiAgICAiIiIKICAgIFRoaXMgY2xlYW5zIHVwIHRoZSBmb250YXdlc29tZSBjc3MgdGhhdCBpcyBpbiB0aGVtZS5jc3MuCiAgICBBYm91dCAyMCUgb2Ygb3VyIHRoZW1lLmNzcyBpcyBqdXN0IGZvbnRhd2Vzb21lIGljb24gZGVmaW5pdGlvbnMuCiAgICBFeGVjdXRpb246CiAgICAxLiBGaW5kIGFsbCBmb250YXdlc29tZSBpY29ucyB1c2VkIGluIGh0bWwgZmlsZXMgKG92ZXJlc3RpbWF0ZSkKICAgIDIuIEZpbmQgYWxsIHNhZmUtdG8tZGVsZXRlIChub3QgdGllZCB0byBvdGhlciBjc3Mgc2VsZWN0b3JzKSBpY29ucyBpbiB0aGVtZS5jc3MgKHVuZGVyZXN0aW1hdGUpCiAgICAzLiBEZWxldGUgYWxsIGNzcyBkZWZpbml0aW9ucyBmb3IgaWNvbnMgdGhhdCBhcmUgc2FmZS10by1kZWxldGUgYW5kIG5vdCB1c2VkIGluIGh0bWwgZmlsZXMKICAgIEJ5IG92ZXJlc3RpbWF0aW5nIGluIHN0ZXAgMSBhbmQgdW5kZXJlc3RpbWF0aW5nIGluIHN0ZXAgMiwgd2Ugc2hvdWxkbid0IGV2ZXIgZGVsZXRlIGljb25zIHRoYXQgYXJlIHVzZWQuCiAgICAiIiIKICAgIF9uYW1lID0gaW5zcGVjdC5zdGFjaygpWzBdWzNdCiAgICBwcmludCgiUnVubmluZyIsIF9uYW1lKQogICAgb3V0ZGlyID0gUGF0aChhcHAub3V0ZGlyKQoKICAgICMgTWF0Y2hlcyB0byBmb250YXdlc29tZSB1c2VzIGluIGh0bWwKICAgICMgRXg6IGZhIGZhLWdpdGh1YgogICAgRkFfUkVHRVggPSByZS5jb21waWxlKHIiZmEgKGZhKD86LVthLXpdKykrKSIpCgogICAgdXNlZF9mYSA9IHNldCgpCgogICAgZm9yIGh0bWxfZmlsZSBpbiBvdXRkaXIuZ2xvYigiKiovKi5odG1sIik6CiAgICAgICAgdGV4dCA9IGh0bWxfZmlsZS5yZWFkX3RleHQoZW5jb2Rpbmc9InV0Zi04IikKICAgICAgICB1c2VkX2ZhLnVwZGF0ZShGQV9SRUdFWC5maW5kYWxsKHRleHQpKQoKICAgIHRoZW1lX2Nzc19maWxlID0gb3V0ZGlyIC8gIl9zdGF0aWMiIC8gImNzcyIgLyAidGhlbWUuY3NzIgoKICAgIHRoZW1lX3RleHQgPSB0aGVtZV9jc3NfZmlsZS5yZWFkX3RleHQoZW5jb2Rpbmc9InV0Zi04IikKICAgIHRoZW1lX3NpemUgPSB0aGVtZV9jc3NfZmlsZS5zdGF0KCkuc3Rfc2l6ZQoKICAgICMgTWF0Y2hlcyB0byBwdXJlIGZvbnRhd2Vzb21lIHNlbGVjdG9ycyBpbiBjc3MKICAgICMgTm90ZTogZm9udCBhd2Vzb21lIGlzIG5vdCB0aGUgZmlyc3QgZGVmaW5pdGlvbiBpbiB0aGVtZS5jc3MKICAgICMgRXg6IH0uZmEtZ2l0aHViOmJlZm9yZXtjb250ZW50OiJxIn0KICAgICMgRXg6IH0uZmEtZ29vZGJ5ZTpiZWZvcmUsLmZhLWJhZGJ5ZTpiZWZvcmV7Y29udGVudDoicSJ9CiAgICBGQV9DU1NfUkVHRVggPSByZS5jb21waWxlKAogICAgICAgIHIifSg/OlwuKGZhKD86LVthLXpdKykrKTpiZWZvcmUpKD86LFwuKGZhKD86LVthLXpdKykrKTpiZWZvcmUpKntjb250ZW50OlwiLlwifSIKICAgICkKCiAgICBzdGFydF9wb3MgPSAwCiAgICB3aGlsZSBUcnVlOgogICAgICAgIG0gPSBGQV9DU1NfUkVHRVguc2VhcmNoKHRoZW1lX3RleHQsIHBvcz1zdGFydF9wb3MpCiAgICAgICAgaWYgbm90IG06CiAgICAgICAgICAgIGJyZWFrCgogICAgICAgIGZhX25hbWVzID0gbS5ncm91cHMoKQogICAgICAgIGlmIG5vdCBhbnkoZmFfbmFtZSBpbiB1c2VkX2ZhIGZvciBmYV9uYW1lIGluIGZhX25hbWVzKToKICAgICAgICAgICAgdGhlbWVfdGV4dCA9IHRoZW1lX3RleHRbOiBtLnN0YXJ0KCkgKyAxXSArIHRoZW1lX3RleHRbbS5lbmQoKSA6XQogICAgICAgICAgICBzdGFydF9wb3MgPSBtLnN0YXJ0KCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzdGFydF9wb3MgPSBtLmVuZCgpCgogICAgdGhlbWVfY3NzX2ZpbGUud3JpdGVfdGV4dCh0aGVtZV90ZXh0LCBlbmNvZGluZz0idXRmLTgiKQogICAgbmV3X3RoZW1lX3NpemUgPSB0aGVtZV9jc3NfZmlsZS5zdGF0KCkuc3Rfc2l6ZQoKICAgIHByaW50KAogICAgICAgIF9uYW1lLAogICAgICAgIGYiOiBzaXplIGRpZmYgOiB7bmV3X3RoZW1lX3NpemUgLSB0aGVtZV9zaXplfSBieXRlcywge21hdGguZmxvb3IoKChuZXdfdGhlbWVfc2l6ZSAtIHRoZW1lX3NpemUpIC8gdGhlbWVfc2l6ZSkgKiAxMDApfSUiLAogICAgKQoKCmRlZiBjbGVhbnVwX2ZvbnRhd2Vzb21lX2ZvbnRfZmlsZXMoYXBwOiBTcGhpbngpOgogICAgIiIiCiAgICBUaGlzIGNsZWFucyB1cCB0aGUgZm9udGF3ZXNvbWUgaWNvbnMgdGhhdCBhcmUgaW4gZm9udCBmaWxlcy4KICAgIE1vc3QgaWNvbnMgYXJlIHVudXNlZCBzbyBjYW4gYmUgc3RyaXBwZWQuCiAgICBUaGlzIHJ1bnMgYWZ0ZXIgY2xlYW51cF9mb250YXdlc29tZV9jc3MuCgogICAgRXhlY3V0aW9uOgogICAgMS4gRmluZCBhbGwgZm9udGF3ZXNvbWUgaWNvbiBkZWZpbml0aW9ucyBpbiB0aGVtZS5jc3MgKG92ZXJlc3RpbWF0ZSkKICAgIDIuIFJlZ2VuZXJhdGUgdGhlIGZvbnQgZmlsZXMga2VlcGluZyBvbmx5IHRoZXNlIGljb25zCgogICAgQnkgb3ZlcmVzdGltYXRpbmcgaW4gc3RlcCAxLCB3ZSBzaG91bGRuJ3QgZXZlciBkZWxldGUgaWNvbnMgdGhhdCBhcmUgdXNlZC4KICAgICIiIgogICAgX25hbWUgPSBpbnNwZWN0LnN0YWNrKClbMF1bM10KICAgIHByaW50KCJSdW5uaW5nIiwgX25hbWUpCgogICAgb3V0ZGlyID0gUGF0aChhcHAub3V0ZGlyKQogICAgZm9udHNfZm9sZGVyID0gb3V0ZGlyIC8gIl9zdGF0aWMiIC8gImNzcyIgLyAiZm9udHMiCgogICAgdGhlbWVfY3NzX2ZpbGUgPSBvdXRkaXIgLyAiX3N0YXRpYyIgLyAiY3NzIiAvICJ0aGVtZS5jc3MiCgogICAgdGhlbWVfdGV4dCA9IHRoZW1lX2Nzc19maWxlLnJlYWRfdGV4dChlbmNvZGluZz0idXRmLTgiKQoKICAgICMgTWF0Y2hlcyBmb250YXdlc29tZSBpY29uIGRlZmluaXRpb25zIGluIGNzcwogICAgIyBUaGlzIGRvZXNuJ3QgbWF0Y2ggb24gdGhlIGVudGlyZSBkZWZpbml0aW9uIGJ1dCBvbiB0aGUgYWN0dWFsIGljb24gaWRzIGZvbnRhd2Vzb21lIHVzZXMuCiAgICAjIEV4OiBjb250ZW50OiJxIgogICAgRkFfQ1NTX1JFR0VYID0gcmUuY29tcGlsZShyImNvbnRlbnQ6XCIoLilcIiIpCgogICAgdXNlZF9jb2RlcG9pbnRzID0gc2V0KCkKCiAgICBmb3IgbSBpbiBGQV9DU1NfUkVHRVguZmluZGl0ZXIodGhlbWVfdGV4dCk6CiAgICAgICAgZmFfY2hhciA9IG0uZ3JvdXAoMSkKICAgICAgICBmYV9jb2RlcG9pbnQgPSBmIlUre29yZChmYV9jaGFyKTowNFh9IgogICAgICAgIHVzZWRfY29kZXBvaW50cy5hZGQoZmFfY29kZXBvaW50KQoKICAgIHVuaWNvZGVzID0gIiwiLmpvaW4odXNlZF9jb2RlcG9pbnRzKQoKICAgIGZvciBmYV9mb250X3BhdGggaW4gZm9udHNfZm9sZGVyLmdsb2IoImZvbnRhd2Vzb21lKiIpOgogICAgICAgIGlmIGZhX2ZvbnRfcGF0aC5zdWZmaXggbm90IGluIHsiLndvZmYiLCAiLndvZmYyIn06CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZm9udF9zaXplID0gZmFfZm9udF9wYXRoLnN0YXQoKS5zdF9zaXplCgogICAgICAgIGZhX2Rlc3QgPSBmYV9mb250X3BhdGgud2l0aF9zdWZmaXgoZmFfZm9udF9wYXRoLnN1ZmZpeCArICIuc3Vic2V0IikKICAgICAgICBhcmdzID0gWwogICAgICAgICAgICBzdHIoZmFfZm9udF9wYXRoKSwKICAgICAgICAgICAgZiItLXVuaWNvZGVzPXt1bmljb2Rlc30iLAogICAgICAgICAgICAiLS1wYXNzdGhyb3VnaC10YWJsZXMiLAogICAgICAgICAgICBmIi0tb3V0cHV0LWZpbGU9e2ZhX2Rlc3R9IiwKICAgICAgICAgICAgIi0td2l0aC16b3BmbGkiLAogICAgICAgIF0KICAgICAgICBpZiBmYV9mb250X3BhdGguc3VmZml4ID09ICIud29mZiI6CiAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCItLWZsYXZvcj13b2ZmIikKICAgICAgICBlbGlmIGZhX2ZvbnRfcGF0aC5zdWZmaXggPT0gIi53b2ZmMiI6Cjx8ZmltX2hvbGV8PgogICAgICAgICMgVGhpcyBydW5zIGZvbnRUb29scydzIHN1YnNldCB0b29sCiAgICAgICAgc3Vic2V0X2ZvbnQoYXJncykKCiAgICAgICAgZmFfZGVzdC5yZXBsYWNlKGZhX2ZvbnRfcGF0aCkKICAgICAgICBuZXdfZm9udF9zaXplID0gZmFfZm9udF9wYXRoLnN0YXQoKS5zdF9zaXplCgogICAgICAgIGlmIGZhX2ZvbnRfcGF0aC5zdWZmaXggPT0gIi53b2ZmMiI6CiAgICAgICAgICAgIHByaW50KAogICAgICAgICAgICAgICAgX25hbWUsCiAgICAgICAgICAgICAgICBmIjogc2l6ZSBkaWZmIDoge25ld19mb250X3NpemUgLSBmb250X3NpemV9IGJ5dGVzLCB7bWF0aC5mbG9vcigoKG5ld19mb250X3NpemUgLSBmb250X3NpemUpIC8gZm9udF9zaXplKSAqIDEwMCl9JSIsCiAgICAgICAgICAgICkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgYXJncy5hcHBlbmQoIi0tZmxhdm9yPXdvZmYyIikKCjx8ZmltX2VuZHw+"]
["242391c72b154077ded4a6fa77951a18628b3a32-1","242391c72b154077ded4a6fa77951a18628b3a32","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoiIiJVdGlsaXR5IHNjcmlwdCB0byByZW1vdmUgYSBjZXJ0YWluIGxhbmd1YWdlIGZyb20gdGhlIHRyYW5zbGF0aW9ucyBtYXBwaW5nIGpzb24iIiIKUEFUSF9UT19UUkFOU0xBVElPTlNfTUFQUElOR19KU09OID0gJy9Vc2Vycy9zdW55aXRhby9Eb2N1bWVudHMvUHJvamVjdHMvR2l0SHViL1BzeWNoaWNMZWFybmVycy9kYXRhX3V0aWxzL3RyYW5zbGF0aW9uc19tYXBwaW5nLmpzb24nCkxBTkdVQUdFX1RPX1JFTU9WRSA9ICcnCgojQmVsb3cgY2FuIGJlIHVuY2hhbmdlZApQQVRIX1RPX1dPUkRfMl9MQU5HX0pTT04gPSBQYXRoLmN3ZCgpIC8gJ3dvcmRfdG9fbGFuZy5qc29uJwpPVVRQVVRfSlNPTiA9IFBhdGgoUEFUSF9UT19UUkFOU0xBVElPTlNfTUFQUElOR19KU09OKS5wYXJlbnQgLyAndHJhbnNsYXRpb25zX21hcHBpbmdfb3V0cHV0Lmpzb24nCgp3aXRoIG9wZW4oUEFUSF9UT19UUkFOU0xBVElPTlNfTUFQUElOR19KU09OLCAncicpIGFzIGY6CiAgICB0cmFuc2xhdGlvbnNfbWFwcGluZyA9IGpzb24ubG9hZChmKQp3aXRoIG9wZW4oUEFUSF9UT19XT1JEXzJfTEFOR19KU09OLCAncicpIGFzIGY6CiAgICB3b3JkMmxhbmcgPSBqc29uLmxvYWQoZikKCm5ld19tYXBwaW5nID0ge30KZm9yIHdvcmQsIHRyYW5zbGF0ZWRfd29yZCBpbiB0cmFuc2xhdGlvbnNfbWFwcGluZy5pdGVtcygpOgogICAgaWYgd29yZCBpbiB3b3JkMmxhbmcua2V5cygpOgogICAgICAgIGxhbmd1YWdlID0gd29yZDJsYW5nW3dvcmRdCiAgICAgICAgaWYgbGFuZ3VhZ2UgPT0gTEFOR1VBR0VfVE9fUkVNT1ZFOgogICAgICAgICAgICBwcmludChmJ1dvcmQ6e3dvcmR9LCBUcmFuc2xhdGlvbjoge3RyYW5zbGF0ZWRfd29yZH0gd2lsbCBiZSByZW1vdmVkJykKICAgICAgICAgICAgY29udGludWUKICAgICAgICBlbHNlOgogICAgICAgICAgICBuZXdfbWFwcGluZ1t3b3JkXSA9IHRyYW5zbGF0ZWRfd29yZAogICAgZWxzZToKICAgICAgICByYWlzZSBMb29rdXBFcnJvcihmJ1VucmVjb2duaXNlZCB3b3JkIHt3b3JkfSwgc2hvdWxkbnQgYmUgaGFwcGVuaW5nJykKCndpdGggb3BlbihPVVRQVVRfSlNPTiwgJ3cnKSBhcyBmOgogICAgZi53cml0ZShqc29uLmR1bXBzKG5ld19tYXBwaW5nKSkKPHxmaW1fc3VmZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAoKPHxmaW1fZW5kfD4="]
["d68c06937781e6c8bbfb7654dae09369b70b4fc9-1","d68c06937781e6c8bbfb7654dae09369b70b4fc9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5Z2FtZQpmcm9tIC4gaW1wb3J0IFNwcml0ZUNvbnN0YW50cwoKY2xhc3MgU3ByaXRlRGVmaW5pdGlvbihvYmplY3QpOgogICAgIiIiQ29udGFpbnMgdGhlIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgdG8gY29udHJvbCBhIFNwcml0ZVNoZWV0IHN0cnVjdHVyZSIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlTmFtZSwgb3JpZ2luX1gsIG9yaWdpbl9ZLCB3aWR0aCwgaGVpZ2h0KToKICAgICAgICBzZWxmLlNwcml0ZVNoZWV0ID0gcHlnYW1lLmltYWdlLmxvYWQoZmlsZU5hbWUpLmNvbnZlcnQoKQogICAgICAgIHNlbGYuT3JpZ2luX1ggPSBvcmlnaW5fWAogICAgICAgIHNlbGYuT3JpZ2luX1kgPSBvcmlnaW5fWQogICAgICAgIHNlbGYuV2lkdGggPSB3aWR0aAogICAgICAgIHNlbGYuSGVpZ2h0ID0gaGVpZ2h0CgogICAgZGVmIGdldEltYWdlKHNlbGYsIHN0ZXBzX1gsIHN0ZXBzX1kpOgogICAgICAgIG1hcmdpblggPSBzZWxmLldpZHRoICogc3RlcHNfWAogICAgICAgIG1hcmdpblkgPSBzZWxmLkhlaWdodCAqIHN0ZXBzX1kKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBpbWFnZSA9IHB5Z2FtZS5TdXJmYWNlKFtzZWxmLldpZHRoLCBzZWxmLkhlaWdodF0pLmNvbnZlcnQoKQoKICAgICAgICBpbWFnZS5ibGl0KHNlbGYuU3ByaXRlU2hlZXQsCiAgICAgICAgICAgICAgICAgICAoMCwgMCksCjx8ZmltX2VuZHw+"]
["d94f51904dd6baf4a59755d2931eba36b23423c7-1","d94f51904dd6baf4a59755d2931eba36b23423c7","PHxmaW1fcHJlZml4fD4KZnJvbSBjeXRueCBpbXBvcnQgKgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpBID0gYXJhbmdlKDYwKQpwcmludChBKQpBLnJlc2hhcGVfKDUsMTIpCnByaW50KEEpCjx8ZmltX2VuZHw+"]
["bac860af139a465536dc7385590fc04ecd4b3d8e-2","bac860af139a465536dc7385590fc04ecd4b3d8e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGJpcGxpc3QKaW1wb3J0IGRhdGV0aW1lCgpmcm9tIHNjcmlwdHMuYXJ0aWZhY3RfcmVwb3J0IGltcG9ydCBBcnRpZmFjdEh0bWxSZXBvcnQKZnJvbSBzY3JpcHRzLmlsYXBmdW5jcyBpbXBvcnQgbG9nZnVuYywgdHN2LCB0aW1lbGluZSwgaXNfcGxhdGZvcm1fd2luZG93cwoKCmRlZiBnZXRfcmVjZW50QXBwaGlzdG9yeShmaWxlc19mb3VuZCwgcmVwb3J0X2ZvbGRlciwgc2Vla2VyKToKICAgIGRhdGFfbGlzdCA9IFtdCiAgICBmb3IgZmlsZV9mb3VuZCBpbiBmaWxlc19mb3VuZDoKICAgICAgICBmaWxlX2ZvdW5kID0gc3RyKGZpbGVfZm91bmQpCiAgICAgICAgd2l0aCBvcGVuKGZpbGVfZm91bmQsICdyYicpIGFzIGY6CiAgICAgICAgICAgIHBsaXN0ID0gYmlwbGlzdC5yZWFkUGxpc3QoZikKICAgICAgICAgICAgUmVjZW50QXBwSGlzdG9yeSA9IHBsaXN0LmdldCgnQ0FSUmVjZW50QXBwSGlzdG9yeScpCiAgICAgICAgICAgIAogICAgICAgIGlmIFJlY2VudEFwcEhpc3RvcnkgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIGlmIGxlbihSZWNlbnRBcHBIaXN0b3J5KSA+IDA6CiAgICAgICAgICAgICAgICBmb3IgYnVuZGxlaWQsIHRpbWVzdGFtcCBpbiBSZWNlbnRBcHBIaXN0b3J5Lml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wID0gKGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAoaW50KHRpbWVzdGFtcCkpLnN0cmZ0aW1lKCclWS0lbS0lZCAlSDolTTolUycpKQogICAgICAgICAgICAgICAgICAgIGRhdGFfbGlzdC5hcHBlbmQoKHRpbWVzdGFtcCwgYnVuZGxlaWQpKQogICAgICAgIAogICAgaWYgbGVuKGRhdGFfbGlzdCkgPiAwOgogICAgICAgIGRlc2NyaXB0aW9uID0gJ0NhclBsYXkgcmVjZW50IGFwcCBoaXN0b3J5LicKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJlcG9ydCA9IEFydGlmYWN0SHRtbFJlcG9ydCgnQ2FyUGxheSBSZWNlbnQgQXBwIEhpc3RvcnknKQogICAgICAgIHJlcG9ydC5zdGFydF9hcnRpZmFjdF9yZXBvcnQocmVwb3J0X2ZvbGRlciwgJ0NhclBsYXkgUmVjZW50IEFwcCBIaXN0b3J5JywgZGVzY3JpcHRpb24pCiAgICAgICAgcmVwb3J0LmFkZF9zY3JpcHQoKQogICAgICAgIGRhdGFfaGVhZGVycyA9ICgnVGltZXN0YW1wJywnQnVuZGxlIElEJykgICAgIAo8fGZpbV9lbmR8Pg=="]
["8eb1dcd253a10027db6e26e094c8da3db36c9ded-3","8eb1dcd253a10027db6e26e094c8da3db36c9ded","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiIkZ1bmN0aW9ucyB0byBlc3RpbWF0ZSBjb3JyZWxhdGlvbiBzdW1zIGFuZCBkaW1lbnNpb25zLgoKVGhpcyBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIHRvIGVzdGltYXRlIHRoZSBjb3JyZWxhdGlvbiBzdW0gYW5kIHRoZQpjb3JyZWxhdGlvbiBkaW1lbnNpb24gZnJvbSBib3RoIHNjYWxhciBhbmQgdmVjdG9yIHRpbWUgc2VyaWVzLgoKQ29ycmVsYXRpb24gU3VtCi0tLS0tLS0tLS0tLS0tLQoKICAqIGMyIC0tIGVzdGltYXRlcyB0aGUgY29ycmVsYXRpb24gc3VtIGZyb20gYSB2ZWN0b3IgdGltZSBzZXJpZXMuCiAgKiBjMl9lbWJlZCAtLSBlc3RpbWF0ZXMgdGhlIGNvcnJlbGF0aW9uIHN1bSBmcm9tIGEgc2NhbGFyIHRpbWUgc2VyaWVzCiAgICBhZnRlciBlbWJlZGRpbmcuCgpDb3JyZWxhdGlvbiBEaW1lbnNpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICogZDIgLS0gZXN0aW1hdGVzIHRoZSAibG9jYWwiIGNvcnJlbGF0aW9uIGRpbWVuc2lvbiBmcm9tIGNvcnJlbGF0aW9uCiAgICBzdW1zIGFuZCBkaXN0YW5jZXMgdXNpbmcgYSBsb2NhbCBsZWFzdCBzcXVhcmVzIGZpdC4KICAqIHR0bWxlIC0tIGVzdGltYXRlcyB0aGUgY29ycmVsYXRpb24gZGltZW5zaW9uIGZyb20gY29ycmVsYXRpb24gc3VtcwogICAgYW5kIGRpc3RhbmNlcyB1c2luZyBhIG1heGltdW0gbGlrZWxpaG9vZCBlc3RpbWF0b3IuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQsIGRpdmlzaW9uLCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIHNjaXB5LnNwYXRpYWwgaW1wb3J0IGRpc3RhbmNlCmZyb20gLiBpbXBvcnQgdXRpbHMKCgpkZWYgYzIoeSwgcj0xMDAsIG1ldHJpYz0nY2hlYnlzaGV2Jywgd2luZG93PTEwKToKICAgICIiIkNvbXB1dGUgdGhlIGNvcnJlbGF0aW9uIHN1bSBmb3IgdGhlIGdpdmVuIGRpc3RhbmNlcy4KCiAgICBDb21wdXRlcyB0aGUgY29ycmVsYXRpb24gc3VtIG9mIHRoZSBnaXZlbiB0aW1lIHNlcmllcyBmb3IgdGhlCiAgICBzcGVjaWZpZWQgZGlzdGFuY2VzIChHcmFzc2JlcmdlciAmIFByb2NhY2NpYSAxOTgzKS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB5IDogbmRhcnJheQogICAgICAgIE4tZGltZW5zaW9uYWwgcmVhbCBpbnB1dCBhcnJheSBjb250YWluaW5nIHBvaW50cyBpbiB0aGUgcGhhc2UKICAgICAgICBzcGFjZS4KICAgIHIgOiBpbnQgb3IgYXJyYXksIG9wdGlvbmFsIChkZWZhdWx0ID0gMTAwKQogICAgICAgIERpc3RhbmNlcyBmb3Igd2hpY2ggdGhlIGNvcnJlbGF0aW9uIHN1bSBzaG91bGQgYmUgY2FsY3VsYXRlZC4KICAgICAgICBJZiByIGlzIGFuIGludCwgdGhlbiB0aGUgZGlzdGFuY2VzIGFyZSB0YWtlbiB0byBiZSBhIGdlb21ldHJpYwogICAgICAgIHByb2dyZXNzaW9uIGJldHdlZW4gYSBtaW5pbXVtIGFuZCBtYXhpbXVtIGxlbmd0aCBzY2FsZQogICAgICAgIChlc3RpbWF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBtZXRyaWMgYW5kIHRoZSBpbnB1dCBzZXJpZXMpLgogICAgbWV0cmljIDogc3RyaW5nLCBvcHRpb25hbCAoZGVmYXVsdCA9ICdjaGVieXNoZXYnKQogICAgICAgIE1ldHJpYyB0byB1c2UgZm9yIGRpc3RhbmNlIGNvbXB1dGF0aW9uLiAgTXVzdCBiZSBvbmUgb2YKICAgICAgICAiY2hlYnlzaGV2IiAoYWthIHRoZSBtYXhpbXVtIG5vcm0gbWV0cmljKSwgImNpdHlibG9jayIgKGFrYSB0aGUKICAgICAgICBNYW5oYXR0YW4gbWV0cmljKSwgb3IgImV1Y2xpZGVhbiIuCiAgICB3aW5kb3cgOiBpbnQsIG9wdGlvbmFsIChkZWZhdWx0ID0gMTApCiAgICAgICAgTWluaW11bSB0ZW1wb3JhbCBzZXBhcmF0aW9uIChUaGVpbGVyIHdpbmRvdykgdGhhdCBzaG91bGQgZXhpc3QKICAgICAgICBiZXR3ZWVuIHBhaXJzLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHIgOiBhcnJheQogICAgICAgIERpc3RhbmNlcyBmb3Igd2hpY2ggY29ycmVsYXRpb24gc3VtcyBoYXZlIGJlZW4gY2FsY3VsYXRlZC4gIE5vdGUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHRoYXQgdGhpcyBtaWdodCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgc3VwcGxpZWQgciBhcyBvbmx5IHRoZQogICAgICAgIGRpc3RhbmNlcyB3aXRoIGEgbm9uemVybyBDKHIpIGFyZSBpbmNsdWRlZC4KPHxmaW1fZW5kfD4="]
["d93b0d8af599e02caa0520f46cd1f6271696c3ca-5","d93b0d8af599e02caa0520f46cd1f6271696c3ca","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBlbnZpcm9uCgpST09UX0RJUiA9ICgKICAgIGVudmlyb24uUGF0aChfX2ZpbGVfXykgLSAzCikgICMgKGF2eXVrdC9jb25maWcvc2V0dGluZ3MvYmFzZS5weSAtIDMgPSBhdnl1a3QvKQpBUFBTX0RJUiA9IFJPT1RfRElSLnBhdGgoImF2eXVrdCIpCmVudiA9IGVudmlyb24uRW52KCkKCgpCQVNFX0RJUiA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpCgpTRUNSRVRfS0VZID0gZW52KAogICAgIkRKQU5HT19TRUNSRVRfS0VZIiwKICAgIGRlZmF1bHQ9IkRvYklaSXlYZ0RIbFBvbmVLbmR3V0NtZmRiblQ3STJMT2hSOVR5YnBvMFRGR0VkZ045S3VKYUQ2YUk4Rk9LQ00iLAopCkRFQlVHID0gVHJ1ZQoKQUxMT1dFRF9IT1NUUyA9IFtdCgpESkFOR09fQVBQUyA9IFsKICAgICdkamFuZ28uY29udHJpYi5hZG1pbicsCiAgICAnZGphbmdvLmNvbnRyaWIuYXV0aCcsCiAgICAnZGphbmdvLmNvbnRyaWIuY29udGVudHR5cGVzJywKICAgICdkamFuZ28uY29udHJpYi5zZXNzaW9ucycsCiAgICAnZGphbmdvLmNvbnRyaWIubWVzc2FnZXMnLAogICAgJ2RqYW5nby5jb250cmliLnN0YXRpY2ZpbGVzJywKXQoKVEhJUkRfUEFSVFlfQVBQUyA9IFsKICAgICJjaGFubmVscyIsCiAgICAiY3Jpc3B5X2Zvcm1zIiwKXQoKTE9DQUxfQVBQUyA9IFsKICAgICJhdnl1a3QuY29yZSIsCiAgICAiYXZ5dWt0LnVzZXJzIiwKXQoKSU5TVEFMTEVEX0FQUFMgPSBESkFOR09fQVBQUyArIFRISVJEX1BBUlRZX0FQUFMgKyBMT0NBTF9BUFBTCgoKTUlERExFV0FSRSA9IFsKICAgICdkamFuZ28ubWlkZGxld2FyZS5zZWN1cml0eS5TZWN1cml0eU1pZGRsZXdhcmUnLAogICAgJ2RqYW5nby5jb250cmliLnNlc3Npb25zLm1pZGRsZXdhcmUuU2Vzc2lvbk1pZGRsZXdhcmUnLAogICAgJ2RqYW5nby5taWRkbGV3YXJlLmNvbW1vbi5Db21tb25NaWRkbGV3YXJlJywKICAgICdkamFuZ28ubWlkZGxld2FyZS5jc3JmLkNzcmZWaWV3TWlkZGxld2FyZScsCiAgICAnZGphbmdvLmNvbnRyaWIuYXV0aC5taWRkbGV3YXJlLkF1dGhlbnRpY2F0aW9uTWlkZGxld2FyZScsCiAgICAnZGphbmdvLmNvbnRyaWIubWVzc2FnZXMubWlkZGxld2FyZS5NZXNzYWdlTWlkZGxld2FyZScsCiAgICAnZGphbmdvLm1pZGRsZXdhcmUuY2xpY2tqYWNraW5nLlhGcmFtZU9wdGlvbnNNaWRkbGV3YXJlJywKXQoKUk9PVF9VUkxDT05GID0gJ2NvbmZpZy51cmxzJwoKVEVNUExBVEVTID0gWwogICAgewogICAgICAgICdCQUNLRU5EJzogJ2RqYW5nby50ZW1wbGF0ZS5iYWNrZW5kcy5kamFuZ28uRGphbmdvVGVtcGxhdGVzJywKICAgICAgICAnRElSUyc6IFtvcy5wYXRoLmpvaW4oQVBQU19ESVIsICd0ZW1wbGF0ZXMnKV0sCiAgICAgICAgJ0FQUF9ESVJTJzogVHJ1ZSwKICAgICAgICAnT1BUSU9OUyc6IHsKICAgICAgICAgICAgJ2NvbnRleHRfcHJvY2Vzc29ycyc6IFsKICAgICAgICAgICAgICAgICdkamFuZ28udGVtcGxhdGUuY29udGV4dF9wcm9jZXNzb3JzLmRlYnVnJywKICAgICAgICAgICAgICAgICdkamFuZ28udGVtcGxhdGUuY29udGV4dF9wcm9jZXNzb3JzLnJlcXVlc3QnLAogICAgICAgICAgICAgICAgJ2RqYW5nby5jb250cmliLmF1dGguY29udGV4dF9wcm9jZXNzb3JzLmF1dGgnLAogICAgICAgICAgICAgICAgJ2RqYW5nby5jb250cmliLm1lc3NhZ2VzLmNvbnRleHRfcHJvY2Vzc29ycy5tZXNzYWdlcycsCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgIH0sCl0KCiMgV1NHSV9BUFBMSUNBVElPTiA9ICdjb25maWcud3NnaS5hcHBsaWNhdGlvbicKPHxmaW1faG9sZXw+CiMgUkVESVMgU0VUVElOR1MKIyMgcmVkaXMgYmFja2VuZAojIENIQU5ORUxfTEFZRVJTID0gewojICAgICAnZGVmYXVsdCc6IHsKIyAgICAgICAgICdCQUNLRU5EJzogJ2NoYW5uZWxzX3JlZGlzLmNvcmUuUmVkaXNDaGFubmVsTGF5ZXInLAojICAgICAgICAgJ0NPTkZJRyc6IHsKIyAgICAgICAgICAgICAiaG9zdHMiOiBbKCcxMjcuMC4wLjEnLCA2Mzc5KV0sCiMgICAgICAgICB9LAojICAgICB9LAojIH0KIyByYWJiaXRtcSBiYWNrZW5kCkNIQU5ORUxfTEFZRVJTID0gewogICAgImRlZmF1bHQiOiB7CiAgICAgICAgIkJBQ0tFTkQiOiAiY2hhbm5lbHNfcmFiYml0bXEuY29yZS5SYWJiaXRtcUNoYW5uZWxMYXllciIsCiAgICAgICAgIkNPTkZJRyI6IHsKICAgICAgICAgICAgIyBpZiBoYXZpbmcgYW55IGFtcXAgc2VydmVyIHVybCB1c2UgdGhhdCB1cmwKICAgICAgICAgICAgImhvc3QiOiBlbnYoIkFNUVBfVVJMIiwgZGVmYXVsdCA9ICJhbXFwOi8vZ3Vlc3Q6Z3Vlc3RAbG9jYWxob3N0OjU2NzIiKQogICAgICAgICAgICAjICJzc2xfY29udGV4dCI6IC4uLiAob3B0aW9uYWwpCiAgICAgICAgfSwKICAgIH0sCn0KCgpBVVRIX1VTRVJfTU9ERUwgPSAidXNlcnMuVXNlciIKCkRBVEFCQVNFUyA9IHsKICAgICdkZWZhdWx0JzogewogICAgICAgICdFTkdJTkUnOiAnZGphbmdvLmRiLmJhY2tlbmRzLnNxbGl0ZTMnLAogICAgICAgICdOQU1FJzogb3MucGF0aC5qb2luKEJBU0VfRElSLCAnZGIuc3FsaXRlMycpLAogICAgfQp9CgpBVVRIX1BBU1NXT1JEX1ZBTElEQVRPUlMgPSBbCiAgICB7CiAgICAgICAgJ05BTUUnOiAnZGphbmdvLmNvbnRyaWIuYXV0aC5wYXNzd29yZF92YWxpZGF0aW9uLlVzZXJBdHRyaWJ1dGVTaW1pbGFyaXR5VmFsaWRhdG9yJywKICAgIH0sCiAgICB7CiAgICAgICAgJ05BTUUnOiAnZGphbmdvLmNvbnRyaWIuYXV0aC5wYXNzd29yZF92YWxpZGF0aW9uLk1pbmltdW1MZW5ndGhWYWxpZGF0b3InLAogICAgfSwKICAgIHsKICAgICAgICAnTkFNRSc6ICdkamFuZ28uY29udHJpYi5hdXRoLnBhc3N3b3JkX3ZhbGlkYXRpb24uQ29tbW9uUGFzc3dvcmRWYWxpZGF0b3InLAogICAgfSwKICAgIHsKICAgICAgICAnTkFNRSc6ICdkamFuZ28uY29udHJpYi5hdXRoLnBhc3N3b3JkX3ZhbGlkYXRpb24uTnVtZXJpY1Bhc3N3b3JkVmFsaWRhdG9yJywKICAgIH0sCl0KCiMgQVVUSEVOVElDQVRJT05fQkFDS0VORFMgPSBbImF2eXVrdC51c2Vycy5iYWNrZW5kLkF1dGhlbnRpY2F0aW9uQmFja2VuZCJdCgpMQU5HVUFHRV9DT0RFID0gJ2VuLXVzJwpUSU1FX1pPTkUgPSAgJ0FzaWEvS29sa2F0YScKVVNFX0kxOE4gPSBUcnVlClVTRV9MMTBOID0gVHJ1ZQpVU0VfVFogPSBUcnVlCgpDUklTUFlfVEVNUExBVEVfUEFDSyA9ICdib290c3RyYXA0JwoKU1RBVElDX1VSTCA9ICcvc3RhdGljLycKU1RBVElDX1JPT1QgPSBzdHIoUk9PVF9ESVIoInN0YXRpY2ZpbGVzIikpClNUQVRJQ0ZJTEVTX0RJUlMgPSBbc3RyKEFQUFNfRElSLnBhdGgoInN0YXRpYyIpKV0KU1RBVElDRklMRVNfRklOREVSUyA9IFsKICAgICJkamFuZ28uY29udHJpYi5zdGF0aWNmaWxlcy5maW5kZXJzLkZpbGVTeXN0ZW1GaW5kZXIiLAogICAgImRqYW5nby5jb250cmliLnN0YXRpY2ZpbGVzLmZpbmRlcnMuQXBwRGlyZWN0b3JpZXNGaW5kZXIiLApdCgojIE1FRElBCiMgTUVESUFfUk9PVCA9IHN0cihST09UX0RJUigibWVkaWFmaWxlcyIpKQpNRURJQV9VUkwgPSAiL21lZGlhLyIKCgojYW1wcSBzZXR0aW5ncwpBTVFQX1VSTCA9IGVudigiQU1RUF9VUkwiLCBkZWZhdWx0PSJsb2NhbGhvc3QiKQo8fGZpbV9zdWZmaXh8PgoKIyBBU0dJIEFQUExJQ0FUSU9OCkFTR0lfQVBQTElDQVRJT04gPSAiY29uZmlnLnJvdXRpbmcuYXBwbGljYXRpb24iCgo8fGZpbV9lbmR8Pg=="]
["d68c9827004b904673bce34306c1a0ca98782ae3-1","d68c9827004b904673bce34306c1a0ca98782ae3","PHxmaW1fcHJlZml4fD4KIiIiSFVCIERhdGEgQVBJLiIiIgoKZnJvbSBmbGFzayBpbXBvcnQganNvbmlmeSwgcmVxdWVzdApmcm9tIGZsYXNrX3BlZXdlZS5yZXN0IGltcG9ydCBSZXN0UmVzb3VyY2UKZnJvbSBmbGFza19wZWV3ZWUudXRpbHMgaW1wb3J0IHNsdWdpZnkKZnJvbSBmbGFza19wZWV3ZWVfc3dhZ2dlci5zd2FnZ2VyIGltcG9ydCBTd2FnZ2VyCmZyb20gd2Vya3pldWcuZXhjZXB0aW9ucyBpbXBvcnQgTm90Rm91bmQKCmZyb20gLiBpbXBvcnQgZGF0YV9hcGksIG1vZGVscwpmcm9tIC51dGlscyBpbXBvcnQgcGx1cmFsCgoKY2xhc3MgRGF0YVJlc291cmNlKFJlc3RSZXNvdXJjZSk6CiAgICAiIiJBcHBsaWNhdGlvbiBSRVNUIFJlc291cmNlLiIiIgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgYWxsb3dlZF9tZXRob2RzID0gWyJHRVQiLCAiUEFUQ0giLCAiUE9TVCIsICJQVVQiLCAiREVMRVRFIl0KCiAgICBkZWYgZ2V0X2FwaV9uYW1lKHNlbGYpOgogICAgICAgICIiIlBsdXJhbGl6ZSB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgbW9kZWwuIiIiCjx8ZmltX2VuZHw+"]
["bb041ef44b917f17c02f76f7b33c385398b6966a-1","bb041ef44b917f17c02f76f7b33c385398b6966a","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc9dXRmOAoiIiIKVGVzdCB0aGF0IEMrKyBzdXBwb3J0cyB3Y2hhcl90IGNvcnJlY3RseS4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoiIiIKCgoKPHxmaW1fZW5kfD4="]
["ba835f8164669dc846b444a557f2e9886f45bf73-3","ba835f8164669dc846b444a557f2e9886f45bf73","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG5wbWF0IGFzIG5wbWF0CmltcG9ydCBnbnVtcHkKaW1wb3J0IGdudW1weSBhcyBnCmltcG9ydCBnbnVtcHlfY3B1IGFzIGdjCmltcG9ydCBnbnVtcHlfY29udl90bXAgYXMgY29udgoKcmVsb2FkIChjb252KQpmcm9tIHB5bGFiIGltcG9ydCByYW5kCgpnLnJhbmQoMTApICMgaW5pdCB0aGUgZ3B1IHZlcnNpb24uCgpkZWYgdGVzdF9ncHVfY3B1X2NvbnZlcnNpb24oKToKICAgIGltcG9ydCB0aW1lCiAgICBpbnB1dCA9IHJhbmQoMjAwMCwxMDAwKQoKICAgIG49MTAwCgogICAgZm9yIGd4IGluIFtnLCBnY106CgogICAgICAgIGEgPSBneC5nYXJyYXkoaW5wdXQpCiAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgICAgIGZvciBpIGluIHJhbmdlKG4pOgogICAgICAgICAgICBiPWErYQoKCiAgICAgICAgZW5kID0gdGltZS50aW1lKCkKICAgICAgICBwcmludCAndG90YWwgPSAlZicgJSAoKGVuZC1zdGFydCkvbikKCgpkZWYgdGVzdF9jb252KHBsb3Q9RmFsc2UsIAogICAgICAgICAgICAgIGc9MSwKICAgICAgICAgICAgICBpPTIsCiAgICAgICAgICAgICAgZj0yLAogICAgICAgICAgICAgICBjb2xvciA9IDAsCiAgICAgICAgICAgICAgIGlvcmRlciA9IDEsCiAgICAgICAgICAgICAgIGltYWdlX3NpemUgPSA4LAogICAgICAgICAgICAgICBmaWx0ZXJfc2l6ZSA9IDQsCiAgICAgICAgICAgICAgIG51bV9ncm91cHMgPSA0LAogICAgICAgICAgICAgICBudW1faW1hZ2VzX3Blcl9ncm91cCA9IDQsCiAgICAgICAgICAgICAgIG51bV9maWx0ZXJzX3Blcl9ncm91cCA9IDIpOgogICAgIyB1c2UgdGhlIHNhbWUgZGF0YSBmb3IgYm90aCBleHBlcmltZW50cHM6CgogICAgZnJvbSBweWxhYiBpbXBvcnQgcmFuZG4KCiAgICBvdXRwdXRfc2l6ZSA9IGltYWdlX3NpemUgLSBmaWx0ZXJfc2l6ZSArIDEKCiAgICBudW1fZmlsdGVyc19wZXJfZ3JvdXAgPSA0MAoKICAgIGNvbG9yX211bHQgPSBbMSwzXVtjb2xvcl0KCgogICAgaW1hZ2VzID0gcmFuZChudW1fZ3JvdXBzLCAgbnVtX2ltYWdlc19wZXJfZ3JvdXAsIGNvbG9yX211bHQsIGltYWdlX3NpemUsIGltYWdlX3NpemUpIDwgMC4xCiAgICBmaWx0ZXJzID0gcmFuZChudW1fZ3JvdXBzLCBudW1fZmlsdGVyc19wZXJfZ3JvdXAsIGNvbG9yX211bHQsIGZpbHRlcl9zaXplLCBmaWx0ZXJfc2l6ZSk8IDAuNQogICAgZmlsdGVyc1s6LDEsOiw6LDpdPTEKCiAgICBhbnMgPSBbTm9uZV0qMgogICAgcHJpbnQgJ2EnCiAgICBmb3IgKGksIGd4KSBpbiBlbnVtZXJhdGUoW2dudW1weSwgZ2NdKTogCiAgICAgICAgY29udi5nID0gZ3ggCiAgICAgICAgY29udi5fY3UgPSBneC5fY3VkYW1hdAogICAgICAgIAogICAgICAgICMgSSBkb24ndCBnZXQgaXQuIEFuZCBJIHJlYWxseSBuZWVkIHRvIGdldCBpZiBJJ20gdG8gYXBwbHkgaXQgYW55d2hlcmUgYXQgYWxsLgogICAgICAgICMgSG93IGFyZSB0aGVzZSB0aGluZ3Mgd29ya2luZz8gCiAgICAgICAgYW5zW2ldID0gY29udi5jb252KGd4LmdhcnJheShpbWFnZXMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBneC5nYXJyYXkoZmlsdGVycyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvcmRlcj1pb3JkZXIpLmFzYXJyYXkoKQogICAgICAgIHByaW50ICdiJwoKICAgIHByaW50IGFicyhhbnNbMF0tYW5zWzFdKS5tYXgoKQoKICAgICMgcXVpdGUgc3VjY2Vzc2Z1bCwgaW5kZWVkLiAgSXQncyB3ZWlyZCBhcyBoZWxsLiBUaGUgc3RyYW5nZXN0CiAgICAjIHRoaW5nIGlzIHRoYXQgaXQgdXNlZCB0byB3b3JrLgoKICAgIGlmIHBsb3Q6CgogICAgICAgIGZyb20gcHlsYWIgaW1wb3J0IHNob3csIHN1YnBsb3QKICAgICAgICBjPVswLDFdW2NvbG9yXQoKI2VudW0gT1JERVIgewojICAgIEdST1VQX0ZJTFRFUl9JTUFHRSwgSU1BR0VfR1JPVVBfRklMVEVSCiAjR0ZJICAgICAgICAgICAgICAgICAgICAgICAgICMgSUdGCiAgICAgICAgaWYgaW9yZGVyPT0xOgogICAgICAgICAgICBwcmludCAnaW9yZGVyPTEsIHllcy4nCiAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgZyxpLGMsCiAgICAgICAgICAgIHN1YnBsb3QoMzMxKTsgc2hvdyhpbWFnZXNbZyxpLGMsOiw6XSkgCiAgICAgICAgICAgIHN1YnBsb3QoMzMyKTsgc2hvdyhmaWx0ZXJzW2csZixjLDosOl0pCgogICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgIGksZyxmCiAgICAgICAgICAgIHByaW50ICdmPScsZgogICAgICAgICAgICBwcmludCBhbnNbMV0uc2hhcGUKICAgICAgICAgICAgc3VicGxvdCgzMzQpOyBzaG93KGFuc1swXVtpLGcsZiw6LDpdKQogICAgICAgICAgICBzdWJwbG90KDMzNSk7IHNob3coYW5zWzFdW2ksZyxmLDosOl0pCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc3VicGxvdCgzMzEpOyBzaG93KGltYWdlc1tnLGksYyw6LDpdKSAKICAgICAgICAgICAgc3VicGxvdCgzMzIpOyBzaG93KGZpbHRlcnNbZyxmLGMsOiw6XSkKCiAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgZyxmLGkKICAgICAgICAgICAgc3VicGxvdCgzMzQpOyBzaG93KGFuc1swXVtnLGYsaSw6LDpdKQogICAgICAgICAgICBzdWJwbG90KDMzNSk7IHNob3coYW5zWzFdW2csZixpLDosOl0pCgoKCiAgICByZXR1cm4gYW5zCgoKCgpkZWYgdGVzdF9jb252MihwbG90PUZhbHNlLCAKICAgICAgICAgICAgICAgY29sb3IgPSAwLAogICAgICAgICAgICAgICBpb3JkZXIgPSAxLAogICAgICAgICAgICAgICBpbWFnZV9zaXplID0gMTcsCiAgICAgICAgICAgICAgIGZpbHRlcl9zaXplID0gNSwKICAgICAgICAgICAgICAgbnVtX2dyb3VwcyA9IDgsCiAgICAgICAgICAgICAgIG51bV9pbWFnZXNfcGVyX2dyb3VwID0gNCwKICAgICAgICAgICAgICAgbnVtX2ZpbHRlcnNfcGVyX2dyb3VwID0gMTAsCiAgICAgICAgICAgICAgIGc9MSwKICAgICAgICAgICAgICAgaT0yLAogICAgICAgICAgICAgICBjPTAsCiAgICAgICAgICAgICAgIGY9MiwKICAgICAgICAgICAgICAgcCA9IC4xCiAgICAgICAgICAgICAgICk6CiAgICAjIHVzZSB0aGUgc2FtZSBkYXRhIGZvciBib3RoIGV4cGVyaW1lbnRwczoKCiAgICBmcm9tIHB5bGFiIGltcG9ydCByYW5kbgoKICAgIG91dHB1dF9zaXplID0gaW1hZ2Vfc2l6ZSAtIGZpbHRlcl9zaXplICsgMQoKICAgIG51bV9maWx0ZXJzX3Blcl9ncm91cCA9IDQwCgogICAgY29sb3JfbXVsdCA9IFsxLDNdW2NvbG9yXQoKCgogICAgaW1hZ2VzID0gcmFuZChudW1fZ3JvdXBzLCBudW1faW1hZ2VzX3Blcl9ncm91cCwgY29sb3JfbXVsdCwgaW1hZ2Vfc2l6ZSwgaW1hZ2Vfc2l6ZSkgPCBwCiAgICBpZiBpb3JkZXI9PTE6CiAgICAgICAgZmlsdGVycyA9IHJhbmQobnVtX2ltYWdlc19wZXJfZ3JvdXAsIG51bV9ncm91cHMsIG51bV9maWx0ZXJzX3Blcl9ncm91cCwgb3V0cHV0X3NpemUsIG91dHB1dF9zaXplKTwgcAogICAgICAgIGZpbHRlcnNbOiw6LDBdPTEKICAgIGVsc2U6CiAgICAgICAgZmlsdGVycyA9IHJhbmQobnVtX2dyb3VwcywgbnVtX2ZpbHRlcnNfcGVyX2dyb3VwLCBudW1faW1hZ2VzX3Blcl9ncm91cCwgb3V0cHV0X3NpemUsIG91dHB1dF9zaXplKTwgcAogICAgICAgIGZpbHRlcnNbOiwwLDpdPTEKCiAgICBhbnMgPSBbTm9uZV0qMgogICAgcHJpbnQgJ2EnCiAgICBmb3IgKGksIGd4KSBpbiBlbnVtZXJhdGUoW2dudW1weSwgZ2NdKTogCiAgICAgICAgY29udi5nID0gZ3ggCiAgICAgICAgY29udi5fY3UgPSBneC5fY3VkYW1hdAogICAgICAgIAogICAgICAgICMgSSBkb24ndCBnZXQgaXQuIEFuZCBJIHJlYWxseSBuZWVkIHRvIGdldCBpZiBJJ20gdG8gYXBwbHkgaXQgYW55d2hlcmUgYXQgYWxsLgogICAgICAgICMgSG93IGFyZSB0aGVzZSB0aGluZ3Mgd29ya2luZz8gCiAgICAgICAgYW5zW2ldID0gY29udi5jb252MihneC5nYXJyYXkoaW1hZ2VzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd4LmdhcnJheShmaWx0ZXJzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHMgPSBOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9yZGVyPWlvcmRlcikuYXNhcnJheSgpCiAgICAgICAgcHJpbnQgJ2InCgogICAgcHJpbnQgYWJzKGFuc1swXS1hbnNbMV0pLm1heCgpCgogICAgIyBxdWl0ZSBzdWNjZXNzZnVsLCBpbmRlZWQuICBJdCdzIHdlaXJkIGFzIGhlbGwuIFRoZSBzdHJhbmdlc3QKICAgICMgdGhpbmcgaXMgdGhhdCBpdCB1c2VkIHRvIHdvcmsuCiAgICBpZiBjIGlzIE5vbmU6CiAgICAgICAgYz1bMCwxXVtjb2xvcl0KICAgIGlmIGNvbG9yPT0wOgogICAgICAgIGM9MAoKICAgIGlmIHBsb3Q6CiAgICAgICAgZnJvbSBweWxhYiBpbXBvcnQgc2hvdywgc3VicGxvdAoKICAgICAgICBpZiBpb3JkZXI9PTE6CgogICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgIGcsaSxjLAogICAgICAgICAgICBzdWJwbG90KDMzMSk7IHNob3coaW1hZ2VzW2csaSxjLDosOl0pIAogICAgICAgICAgICAjICAgICAgICAgICAgIGlvcmRlcj09MTogIGlnZgogICAgICAgICAgICBzdWJwbG90KDMzMik7IHNob3coZmlsdGVyc1tpLGcsZiw6LDpdKQoKICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICBnLGksZiAgICAgCiAgICAgICAgICAgIHN1YnBsb3QoMzM0KTsgc2hvdyhhbnNbMF1baSxnLGYsYyw6LDpdKQogICAgICAgICAgICBzdWJwbG90KDMzNSk7IHNob3coYW5zWzFdW2ksZyxmLGMsOiw6XSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzdWJwbG90KDMzMSk7IHNob3coaW1hZ2VzW2csaSxjLDosOl0pIAogICAgICAgICAgICBzdWJwbG90KDMzMik7IHNob3coZmlsdGVyc1tnLGYsaSw6LDpdKQoKICAgICAgICAgICAgc3VicGxvdCgzMzQpOyBzaG93KGFuc1swXVtpLGcsZixjLDosOl0pCiAgICAgICAgICAgIHN1YnBsb3QoMzM1KTsgc2hvdyhhbnNbMV1baSxnLGYsYyw6LDpdKQoKCgogICAgcmV0dXJuIGFucwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKCmRlZiB0ZXN0X2NvbnYzKHBsb3Q9RmFsc2UsIAo8fGZpbV9lbmR8Pg=="]
["ba72e4691b386e96d6d4ee493f31527a44c2ab66-2","ba72e4691b386e96d6d4ee493f31527a44c2ab66","PHxmaW1fcHJlZml4fD4KWFhYWFhYWFhYIFhYWFhYClhYWFgKWFhYWFhYWFhYIFhYWCBYWFhYWFhYWFhYIFhYWFhYWFhYIFggWFhYWFhYWFhYIFhYWFhYWFhYIFhYWCBYWFhYWFggWFhYWFhYWFhYClhYWCBYWFhYWFhYWFhYIFhYWCBYWFhYWFhYWFhYIFhYIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWApYWFgKWFhYWFhYClhYWFhYWAoJWFhYWFggWFhYWFhYWFhYWFhYWFhYWAoJWFhYWFhYWFhYWFhYIFhYWCBYWFhYWFhYWCBYWFhYWFhYWFggWFhYIFhYWFhYWFggWFhYWFhYWFggWFhYWFhYWFhYWFhYWFgKCVhYWFhYWFggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCglYWFhYWCBYWFhYWFhYWFhYWFhYWFhYIFhYWFhYWFhYWFhYWFhYWFhYWAoJWFhYWFhYWFgKCgkJWFhYIFhYWFhYWFgKCgkJWFggWFhYIFhYWFhYWFhYWFhYWFggWFhYWFggWFggWFhYWFhYIFhYWFggWFggWFhYWFhYWFggWFggWFhYWFhYWFggWFhYIFhYWFhYWFhYCgkJWFggWFhYIFhYWFhYWFhYWFhYWFhYWAoJCVhYWFhYWFhYWFhYWCBYWFhYWFhYWFhYWFhYWFhYIFhYWFhYWFhYWCBYWCBYIFgKCQkJWFhYWFhYIFggWFhYWFhYWFhYWAoKCQkJWFggWFhYWCBYWFhYIFhYWFggWFhYWFhYWAoJCQlYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFggWFhYWFhYWFhYWFhYIFhYWFhYWFhYWFhYWFhYWCBYIFhYWAoKCQkJWFggWFhYWFggWFhYWFggWFhYWCBYWFggWFhYWFhYWFggWFhYWFhYWFggWFhYWFhYWFgKCQkJWFhYWFhYWFhYWCBYWFhYWFhYWFhYWCBYWFhYWFhYWFhYIFgKCQkJCVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWCBYWFhYWFhYWFhYWFggWFhYWFhYWFhYWFhYWFhYIFggWFhYWFhYWFhYWFhYWCBYIFhYWFhYWCBYIFhYWAoJCQkJWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYIFhYWFhYWFhYWFhYWFggWFhYWFhYWFhYWFhYWFhYIFggWFhYWFhYWFhYWFhYWCBYIFhYIFggWFhYWFhYWAoJCQlYWFgKCQlYWFgKPHxmaW1faG9sZXw+CgkJCVhYWFhYWFhYWFhYWFhYWFhYWFggWFhYWFhYWFhYWCBYWAoJCVgKCglYWFhYWFhYWFgKWFhYWFhYWApYWFhYWFgKCVhYWCBYWFhYWFhYWFhYWFhYWFhYCgkJWFggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFggWFhYWFhYWFhYWFggWFhYWFhYWCBYWFhYWCBYWFggWFhYWFhYWFggWFhYWFhYWFhYIFhYWAoJWFhYWFgKCVhYWFggWFhYWFhYWFhYWFhYWFggWFhYWFhYWFhYWFhYCgkJWFhYWCBYWFhYWFggWFggWFhYIFhYWFhYWFhYWFggWFhYWFhYWFggWFhYWFggWFhYIFhYWCBYWCBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYIFhYWCBYWFhYWFhYIFhYIFhYWFhYWFhYIFhYWFhYWFhYCglYWFhYWFgKCVhYWFggWFhYWFhYWFhYWFhYWFhYWFhYWFgKCQlYWFgKCQkJWFhYWCBYWFhYWFggWFhYWFggWFhYIFhYIFhYWCBYWFgKCQkJWFhYWFhYWFggWFhYWFhYWFhYWFhYWFhYIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAoJCQlYWFggWFggWFhYIFhYWFhYWCBYWFhYIFhYWCBYWFhYWFhYWFggWFhYWFggWFhYWCBYWFhYWCBYWCBYWFhYWFhYWFhYIFhYWCBYWFhYWCBYWCBYWFhYWFggWFhYIFhYWFhYWCBYWFhYWFhYWFgKCQlYWFhYCgkJWFhYCgkJCVhYWCBYWFhYWFhYIFhYIFhYWCBYWCBYWFhYWFggWFhYWCBYWFhYWCBYWFhYWCBYWFggWFhYWFhYIFhYWFggWFggWFhYWCBYWFhYWFggWFhYWFgKCQlYWFhYCglYWFhYWFgKCVhYWFhYIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWCBYWFhYWFhYWFhYWFhYWAoJCVhYWAoJCQlYWFhYWFhYWFggWFhYWFhYWFhYWFhYWFhYWCBYWFhYWFhYWFhYWFggWFhYWFhYWFhYWFhYWFggWFhYWFhYWFhYWCBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWCBYWCBYWFhYIFhYWFhYWFhYWFhYWFhYWFhYWFhYIFhYWFhYWFhYWFhYWFhYWFhYWFhYIFhYWCBYWFggWFhYWFggWFhYWFggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKCQlYWFhYCgkJWFhYCgkJCVhYWFhYWCBYWFhYWFhYWFhYWFhYWFggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYIFhYWFhYWFhYWFhYWFggWFhYWFhYWFhYWFggWFggWFhYWFhYWFhYWCBYWFhYWFhYWFhYWFhYWFhYWFhYWFgKCQkJWFhYWFhYIFhYWFhYWFhYWFhYWFhYWFggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYIFhYWFhYIFhYWCBYWFhYWFhYWFhYWFhYIFhYWFhYWFhYWFhYIFhYIFhYWFhYWFhYIFhYWFhYWCBYWFhYWFhYWFhYWFhYWFhYWFhYWFgKCQlYWFhYCglYWFhYWFhYCglYWFhYIFhYWFhYWFhYWFhYWAoJCVhYWFgKCQlYWFgKCQkJWFhYWFhYWFggWCBYWFggWFhYWCBYWFhYWFggWFhYIFhYWCBYWFhYWFhYWCBYIFhYIFhYWFhYWFhYWFhYWFhYWCBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKCQlYWFhYCgkJWFggWFhYWFhYWFhYWAoJCQlYWFhYWFhYWFggWFhYWFhYIFhYWFhYWFhYWFggWFggWFhYWFhYWFhYWFhYWFhYIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFggWCBYWFhYWFhYWFgKCQkJWFhYWFhYWFggWFhYIFhYWFhYWCBYWFhYWFhYWFgKCQlYWFhYCglYWFhYWFgKWFhYWFhYWApYWFhYWFhYCjx8ZmltX3N1ZmZpeHw+CgoJCVhYWFhYWFhYIFhYWFhYWFhYWFhYWFhYWCBYWFhYWFhYWFhYIFggWAoJCQlYWCBYWFhYWFggWFhYIFhYWFhYWFhYWCBYWFhYWCBYWCBYWFggWFhYWFhYWAoJCQlYWCBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKPHxmaW1fZW5kfD4="]
["d6f09ca50b901238ffcf51ec322cdb419ce5dbd1-4","d6f09ca50b901238ffcf51ec322cdb419ce5dbd1","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlc3BvbnNlCmZyb20gZGphbmdvLnZpZXdzLmdlbmVyaWMgaW1wb3J0IFZpZXcKCmZyb20gZW1vaml3ZWF0aGVyLm1peGlucyBpbXBvcnQgQ3NyZkV4ZW1wdE1peGluCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgpjbGFzcyBXaGF0c0FwcFZpZXcoQ3NyZkV4ZW1wdE1peGluLCBWaWV3KToKCjx8ZmltX2VuZHw+"]
["79e1fb70e915fa4151e7faa47956523130ccd425-3","79e1fb70e915fa4151e7faa47956523130ccd425","PHxmaW1fcHJlZml4fD4KZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKCndpdGggb3BlbigiaW5wdXQudHh0IiwgJ3InLCBlbmNvZGluZz0idXRmLTgiKSBhcyBmaWxlOgogICAgZm9vZCA9IFsKICAgICAgICAoCiAgICAgICAgICAgIHNldChpbmdyZWRpZW50cy5zcGxpdCgpKSwKICAgICAgICAgICAgc2V0KG1hcChzdHIuc3RyaXAsIGFsbGVyZ2Vucy5zdHJpcCgpLmxzdHJpcCgiY29udGFpbnMiKS5zcGxpdCgiLCAiKSkpCiAgICAgICAgKQogICAgICAgIGZvciBpbmdyZWRpZW50cywgYWxsZXJnZW5zIGluIChsaW5lLnN0cmlwKCkucnN0cmlwKCcpJykuc3BsaXQoJygnKSBmb3IgbGluZSBpbiBmaWxlKQogICAgXQoKYWxsX2luZ3JlZGllbnRzLCBtYXBwZWRfaW5ncmVkaWVudHMgPSBkZWZhdWx0ZGljdChsYW1iZGE6IDApLCB7fQptYXBwZWRfYWxsZXJnZW5zID0ge30KCmZvciBpbmdyZWRpZW50cywgYWxsZXJnZW5zIGluIGZvb2Q6CgogICAgZm9yIGluZ3JlZGllbnQgaW4gaW5ncmVkaWVudHM6CiAgICAgICAgYWxsX2luZ3JlZGllbnRzW2luZ3JlZGllbnRdICs9IDEKCiAgICBmb3IgYWxsZXJnZW4gaW4gYWxsZXJnZW5zOgogICAgICAgIGlmIGFsbGVyZ2VuIG5vdCBpbiBtYXBwZWRfYWxsZXJnZW5zOgogICAgICAgICAgICBtYXBwZWRfYWxsZXJnZW5zW2FsbGVyZ2VuXSA9IGluZ3JlZGllbnRzLmNvcHkoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG1hcHBlZF9hbGxlcmdlbnNbYWxsZXJnZW5dICY9IGluZ3JlZGllbnRzCgp3aGlsZSBtYXBwZWRfYWxsZXJnZW5zOgogICAgYWxsZXJnZW4gPSBtaW4obWFwcGVkX2FsbGVyZ2Vucywga2V5PWxhbWJkYSBrZXk6IGxlbihtYXBwZWRfYWxsZXJnZW5zW2tleV0pKQoKICAgIGluZ3JlZGllbnQgPSBuZXh0KGl0ZXIobWFwcGVkX2FsbGVyZ2Vucy5wb3AoYWxsZXJnZW4pKSkKCiAgICBtYXBwZWRfaW5ncmVkaWVudHNbaW5ncmVkaWVudF0gPSBhbGxlcmdlbgoKICAgIGZvciBrZXkgaW4gbWFwcGVkX2FsbGVyZ2VuczoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIG1hcHBlZF9hbGxlcmdlbnNba2V5XS5kaXNjYXJkKGluZ3JlZGllbnQpCgoKPHxmaW1fZW5kfD4="]
["30cedeab71268e7bc380eff09f46fc074e42e4ce-2","30cedeab71268e7bc380eff09f46fc074e42e4ce","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmZyb20gLnByb2Nlc3NvciBpbXBvcnQgTW9iZXJnUHJvY2Vzc29yCjx8ZmltX2VuZHw+"]
["0332ff51b06f4553aa90994267ab60f0182a556b-2","0332ff51b06f4553aa90994267ab60f0182a556b","PHxmaW1fcHJlZml4fD4KQ0FSX1ZBTFVFID0gNjAuMDAKPHxmaW1faG9sZXw+CgpwcmljZSA9IGRheXMgKiBDQVJfVkFMVUUgKyBrbSAqIEtNX1ZBTFVFCgpwcmludCgiVmFsb3IgYSBzZXIgcGFnbzogUiQgezouMmZ9Ii5mb3JtYXQocHJpY2UpKQo8fGZpbV9zdWZmaXh8PgpLTV9WQUxVRSA9IDAuMTUKCmttID0gZmxvYXQoaW5wdXQoIlF1YW50aWRhZGUgZGUga20gcGVyY29ycmlkb3M6ICIpKQpkYXlzID0gaW50KGlucHV0KCJRdWFudGlkYWRlIGRlIGRpYXMgcXVlIG8gY2Fycm8gZm9pIGFsdWdhZG86ICIpKQo8fGZpbV9lbmR8Pg=="]
["24108069c5efcfac4b80310e3eacc430a59363e5-2","24108069c5efcfac4b80310e3eacc430a59363e5","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiJUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgZXhwZXJpbWVudGFsIGRhdGEgbG9vayB1cCB0YWJsZXMgZm9yIHRoZQphdG9tIGNsYXNzLgoKSW4gb3JkZXIgdG8gcnVuIHRoaXMgc2NyaXB0IHNpbXBseSBuZWVkcyB0byBrbm93IHdoZXJlIHlvdSB3YW50IHRoZSBnZW5lcmF0ZWQKZmlsZXMgdG8gbGl2ZS4KCgp1c2FnZToKICAgIHB5dGhvbjMgZ2VuZXJhdGVfYXRvbWljaW5mby5weSA8b3V0cHV0X2RpcmVjdG9yeT4KCiIiIgoKI0tub2JzIHRoYXQgeW91IG1heSB3YW50IHRvIHR3ZWFrCnBtMmJvaHIgPSA1Mi45MTc3MjEwNjcKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEJlZ2luIFNjcmlwdCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCgppbXBvcnQgb3MKaW1wb3J0IHN5cwppbXBvcnQgcmUKCmlmIGxlbihzeXMuYXJndikgIT0gMjoKICAgcHJpbnQoIlVzYWdlOiBnZW5lcmF0ZV9hdG9taWNpbmZvLnB5IDxvdXRwdXRfZGlyZWN0b3J5PiIpCiAgIHF1aXQoMSkKCgpvdXRiYXNlID0gc3lzLmFyZ3ZbMV0KbXlwYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQpkYXRhZGlyID0gb3MucGF0aC5qb2luKG15cGF0aCwgImRhdGEiKQoKYXRvbWljaW5mbyA9IHt9CgojRmlsZSBjb250YWluaW5nIHRoZSBuYW1lcyBhbmQgc3ltYm9scyBvZiB0aGUgYXRvbXMKbmFtZV9maWxlID0gb3MucGF0aC5qb2luKGRhdGFkaXIsICJFbGVtZW50TmFtZXMudHh0IikKCiNGaWxlIGNvbnRhaW5pbmcgdGhlIG1hc3NlcyBvZiB0aGUgYXRvbXMKbWFzc19maWxlID0gb3MucGF0aC5qb2luKGRhdGFkaXIsICJDSUFBVy1NQVNTRVMuZm9ybWF0dGVkLnR4dCIpCgojRmlsZSBjb250YWluaW5nIHRoZSBjb3ZhbGVudCByYWRpaSBvZiB0aGUgYXRvbXMKY292X2ZpbGUgPSBvcy5wYXRoLmpvaW4oZGF0YWRpciwiQ292UmFkaWkudHh0IikKCiNGaWxlIGNvbnRhaW5pbmcgdGhlIFZhbiBkZXIgV2FhbHMgcmFkaWkgb2YgdGhlIGF0b21zCnZkd19maWxlID0gb3MucGF0aC5qb2luKGRhdGFkaXIsIlZhbkRlcldhYWxSYWRpdXMudHh0IikKCiNGaWxlIGNvbnRhaW5pbmcgdGhlIGlzb3RvcGUgbWFzc2VzCmlzb19maWxlID0gb3MucGF0aC5qb2luKGRhdGFkaXIsICJDSUFBVy1JU09UT1BFTUFTU0VTLmZvcm1hdHRlZC50eHQiKQoKI0ZpbGUgY29udGFpbmluZyB0aGUgaXNvdG9wZSBhYnVuZGFuY2VzCmlzb19hYl9maWxlID0gb3MucGF0aC5qb2luKGRhdGFkaXIsICJDSUFBVy1BQlVOREFOQ0UuZm9ybWF0dGVkLnR4dCIpCgojRmlsZSBjb250YWluaW5nIHRoZSBtdWx0aXBsaWNpdGllcyBvZiBlYWNoIGF0b20KbXVsdF9maWxlID0gb3MucGF0aC5qb2luKGRhdGFkaXIsICJOSVNULUFUT01JQ0lPTi5mb3JtYXR0ZWQudHh0IikKCiNSZWFkIGluIG5hbWVzIGFuZCBtYWtlIGluaXRpYWwgZW50cmllcwpmb3IgbCBpbiBvcGVuKG5hbWVfZmlsZSkucmVhZGxpbmVzKCk6CiAgICBsLnN0cmlwKCkKICAgIHosIHN5bSwgbmFtZSA9IGwuc3BsaXQoKQogICAgeiA9IGludCh6KQoKICAgIGF0b21pY2luZm9bel0gPSB7ICJzeW0iIDogc3ltLAogICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICJtdWx0IjogMCwKICAgICAgICAgICAgICAgICAgICAgICJ0ZXJtc3ltIjogIngiLAogICAgICAgICAgICAgICAgICAgICAgIm1hc3MiOiAoMC4wLCAwLjAsIDAuMCksCiAgICAgICAgICAgICAgICAgICAgICAiY292cmFkaXVzIjowLjAsCiAgICAgICAgICAgICAgICAgICAgICAidmR3cmFkaXVzIjowLjAsCiAgICAgICAgICAgICAgICAgICAgICAiaXNvcyIgOiB7fQogICAgICAgICAgICAgICAgICAgIH0KCgojIFJlYWQgaW4gZXhwZXJpbWVudGFsIG1hc3Nlcwpmb3IgbCBpbiBvcGVuKG1hc3NfZmlsZSkucmVhZGxpbmVzKClbNTpdOgogIGwuc3RyaXAoKQogIHosIHN5bSwgbWlkLCBsb3csIGhpZ2ggPSBsLnNwbGl0KCkKICB6ID0gaW50KHopCgogIGF0b21pY2luZm9bel1bIm1hc3MiXSA9ICggbWlkLCBsb3csIGhpZ2ggKQoKI1JlYWQgaW4gQ292YWxlbnQgUmFkaWkKZm9yIGwgaW4gb3Blbihjb3ZfZmlsZSkucmVhZGxpbmVzKClbMTpdOgogIGwuc3RyaXAoKQogIHoscix1bml0PWwuc3BsaXQoKQogIHo9aW50KHopCiAgcj1mbG9hdChyKQogIGF0b21pY2luZm9bel1bImNvdnJhZGl1cyJdPXIvcG0yYm9ocgoKI1JlYWQgaW4gdmFuIGRlciB3YWFsIFJhZGlpCmZvciBsIGluIG9wZW4odmR3X2ZpbGUpLnJlYWRsaW5lcygpWzE6XToKICBsLnN0cmlwKCkKICB6LHIsdW5pdD1sLnNwbGl0KCkKICB6PWludCh6KQogIHI9ZmxvYXQocikKICBhdG9taWNpbmZvW3pdWyJ2ZHdyYWRpdXMiXT1yL3BtMmJvaHIKCgojIFJlYWQgaW4gaXNvdG9wZSBtYXNzZXMKZm9yIGwgaW4gb3Blbihpc29fZmlsZSkucmVhZGxpbmVzKClbNTpdOgogIGwuc3RyaXAoKQogIHosIHN5bSwgaXNvbnVtLCBtaWQsIGxvdywgaGlnaCA9IGwuc3BsaXQoKQogIHogPSBpbnQoeikKCiAgaWYgbm90IGlzb251bSBpbiBhdG9taWNpbmZvW3pdWyJpc29zIl06CiAgICAgIGF0b21pY2luZm9bel1bImlzb3MiXVtpc29udW1dID0geyB9CgogIGF0b21pY2luZm9bel1bImlzb3MiXVtpc29udW1dWyJtYXNzIl0gPSAobWlkLCBsb3csIGhpZ2gpCgoKIyBSZWFkIGluIGlzb3RvcGUgYWJ1bmRhbmNlcwpmb3IgbCBpbiBvcGVuKGlzb19hYl9maWxlKS5yZWFkbGluZXMoKVs1Ol06CiAgbC5zdHJpcCgpCiAgeiwgc3ltLCBpc29udW0sIG1pZCwgbG93LCBoaWdoID0gbC5zcGxpdCgpCiAgeiA9IGludCh6KQoKICBpZiBub3QgaXNvbnVtIGluIGF0b21pY2luZm9bel1bImlzb3MiXToKICAgICAgYXRvbWljaW5mb1t6XVsiaXNvcyJdW2lzb251bV0gPSB7IH0KCiAgYXRvbWljaW5mb1t6XVsiaXNvcyJdW2lzb251bV1bImFidW5kYW5jZSJdID0gKG1pZCwgbG93LCBoaWdoKQoKCiMgRmlsbCBpbiBtaXNzaW5nIGlzb3RvcGUgaW5mbwpmb3IgeiwgYXRvbSBpbiBhdG9taWNpbmZvLml0ZW1zKCk6CiAgZm9yIGlzb251bSwgaXNvZGF0IGluIGF0b21bImlzb3MiXS5pdGVtcygpOgogICAgaWYgbm90ICJtYXNzIiBpbiBpc29kYXQ6CiAgICAgICAgaXNvZGF0WyJtYXNzIl0gPSAoaXNvbnVtLCBpc29udW0sIGlzb251bSkKICAgIGlmIG5vdCAiYWJ1bmRhbmNlIiBpbiBpc29kYXQ6CiAgICAgICAgaXNvZGF0WyJhYnVuZGFuY2UiXSA9ICgwLCAwLCAwKQoKCiMgUmVhZCBpbiBtdWx0aXBsaWNpdGllcwpmb3IgbCBpbiBvcGVuKG11bHRfZmlsZSkucmVhZGxpbmVzKClbNTpdOgogIHosIG9jYywgbXVsdCwgdGVybXN5bSA9IGwuc3BsaXQoKQogIHogPSBpbnQoeikKICBhdG9taWNpbmZvW3pdWyJtdWx0Il0gPSBpbnQobXVsdCkKICBhdG9taWNpbmZvW3pdWyJ0ZXJtc3ltIl0gPSB0ZXJtc3ltCgpoZWFkZXJfZmlsZSA9IG9zLnBhdGguam9pbihvdXRiYXNlLCJBdG9taWNJbmZvLmhwcCIpCnNyY19maWxlID0gb3MucGF0aC5qb2luKG91dGJhc2UsIkF0b21pY0luZm8uY3BwIikKCmNvbW1lbnQgPSIiIgovKiogXFxmaWxlIERlY2xhcmVzIHN0cnVjdHVyZXMgY29udGFpbmluZyBiYXNpYyBleHBlcmltZW50YWwgZGF0YS4KICoKICogXHdhcm5pbmcgVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHZpYSBnZW5lcmF0ZV9hdG9taWNpbmZvLnB5LgogKiAgICBETyBOT1QgRURJVCEhIQogKi8KIiIiCgoKd2l0aCBvcGVuKGhlYWRlcl9maWxlLCd3JykgYXMgZjoKCiAgICBmLndyaXRlKCIjcHJhZ21hIG9uY2VcbiIpCiAgICBmLndyaXRlKCIjaW5jbHVkZSA8c3RyaW5nPlxuIikKICAgIGYud3JpdGUoIiNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPlxuIikKICAgIGYud3JpdGUoIiNpbmNsdWRlIDx2ZWN0b3I+XG4iKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBmLndyaXRlKGNvbW1lbnQrJ1xuJykKICAgIGYud3JpdGUoIm5hbWVzcGFjZSBMaWJDaGVtaXN0IHtcbiIpCiAgICBmLndyaXRlKCJuYW1lc3BhY2UgZGV0YWlsXyB7XG5cbiIpCiAgICBmLndyaXRlKCJzdHJ1Y3QgSXNvdG9wZURhdGEge1xuIikKPHxmaW1fZW5kfD4="]
["8db754ff228120db118d6a43092e59527fd0f12a-2","8db754ff228120db118d6a43092e59527fd0f12a","PHxmaW1fcHJlZml4fD4KIyB0ZXN0X2FwcC5weQppbXBvcnQgcmFuZG9tCmZyb20gZmFrZXIgaW1wb3J0IEZha2VyCgpmcm9tIGZsYXNrIGltcG9ydCB1cmxfZm9yCgpmcm9tIGNvbmZpZy5jb25zdGFudHMgaW1wb3J0IExBTkdVQUdFUwpmcm9tIGRhdGFiYXNlLmRiX21vZGVscyBpbXBvcnQgRW1haWxMaXN0LCBQcmVzYWxlLCBJbnRlcmVzdAoKZnJvbSAuZmFjdG9yaWVzIGltcG9ydCBQcmVzYWxlRmFjdG9yeSwgSW50ZXJlc3RGYWN0b3J5CgoKZmFrZSA9IEZha2VyKCkKCgpkZWYgdGVzdF9yb290X3JldHVybnNfMzAyKGNsaWVudCk6CiAgICByZXMgPSBjbGllbnQuZ2V0KHVybF9mb3IoJ3Jvb3QnKSkKICAgIGFzc2VydCByZXMuc3RhdHVzX2NvZGUgPT0gMzAyCgoKZGVmIHRlc3RfaW5kZXhfcmV0dXJuc18yMDAoY2xpZW50KToKICAgIHJlcyA9IGNsaWVudC5nZXQodXJsX2ZvcignaW5kZXgnLCBsYW5nX2NvZGU9cmFuZG9tLmNob2ljZShMQU5HVUFHRVMpKSkKICAgIGFzc2VydCByZXMuc3RhdHVzX2NvZGUgPT0gMjAwCgoKZGVmIHRlc3Rfam9pbl9tYWlsaW5nX2FuZF91bnN1YnNjcmliZShtb2NrX3NlbmRfbWVzc2FnZSwgc2Vzc2lvbiwgY2xpZW50KToKICAgIGRhdGEgPSB7CiAgICAgICAgImVtYWlsIjogZmFrZS5zYWZlX2VtYWlsKCksCiAgICAgICAgImlwX2FkZHIiOiBmYWtlLmlwdjQoKSwKICAgIH0KICAgIHJlcyA9IGNsaWVudC5wb3N0KHVybF9mb3IoJ2pvaW5fbWFpbGluZ19saXN0JyksCiAgICAgICAgICAgICAgICAgICAgICBkYXRhPWRhdGEpCgogICAgYXNzZXJ0IHJlcy5zdGF0dXNfY29kZSA9PSAyMDAKICAgIGFzc2VydCBFbWFpbExpc3QucXVlcnkuZmlsdGVyX2J5KGVtYWlsPWRhdGFbJ2VtYWlsJ10pLmZpcnN0KCkgaXMgbm90IE5vbmUKCiAgICAjIHRyeSB0byB1bnN1YnNjcmliZSB0aGUgY3JlYXRlZCBFbWFpbExpc3Qgb2JqZWN0IGFib3ZlCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHJlcyA9IGNsaWVudC5nZXQoInt1cmx9P2VtYWlsPXtwYXJhbX0iLgogICAgICAgICAgICAgICAgICAgICBmb3JtYXQodXJsPXVybF9mb3IoJ3Vuc3Vic2NyaWJlJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbT1kYXRhWydlbWFpbCddKSkKCjx8ZmltX2VuZHw+"]
["0366c61a4f36a8368a5c989f98354096bff9cea5-2","0366c61a4f36a8368a5c989f98354096bff9cea5","PHxmaW1fcHJlZml4fD4KI1VwZGF0ZSBwcmV2aW91cyBvbmUsIGFsbG93IHRvIGVudGVyIG11bHRpcGxlIGNsYXNzbWF0ZSwgYXQgZW5kLCBhbGxvdyB0byBzYXZlIHRvIGZpbGUgYXMgQ1NWIGZvcm1hdAoKaW1wb3J0IHJlCmltcG9ydCBjc3YKCmxpbWl0X25hbWUgPSA3CmxpbWl0X2JpcnRoZGF5ID0gOApsaW1pdF9lbWFsbCA9IDMwCmZpcnN0X25hbWUgPSBbXQpsYXN0X25hbWUgPSBbXQpiaXJ0aGRheSA9IFtdCmVtYWlsID0gW10KCmRlZiBjaGVja19pbnB1dF9uYW1lKGxpc3RfaW5wdXQpOgogICAgaWYobGVuKGxpc3RfaW5wdXRbMF0pIDwgbGltaXRfbmFtZSBhbmQgbGVuKGxpc3RfaW5wdXRbMV0pIDwgbGltaXRfbmFtZSk6CiAgICAgICAgcmV0dXJuIFRydWUKICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIEZhbHNlCgpkZWYgY2hlY2tfaW5wdXRfYmlyZGF5KGxpc3RfaW5wdXQpOgogICAgY2hlY2tfYmlyZGF5ID0gYm9vbChyZS5zZWFyY2gociIoXihbMC0yXVswLTldfCgzKVswLTFdKShcLykoKCgwKVswLTldKXwoKDEpWzAtMl0pKShcLylcZHsyfSQpIiwgbGlzdF9pbnB1dFsyXSkpCiAgICBpZiBjaGVja19iaXJkYXkgYW5kIGxlbihsaXN0X2lucHV0WzJdKSA8PSBsaW1pdF9iaXJ0aGRheSA6Cjx8ZmltX2hvbGV8PgogICAgZWxzZToKICAgICAgICByZXR1cm4gRmFsc2UKCmRlZiBjaGVja19pbnB1dF9lbWFpbChsaXN0X2lucHV0KToKICAgIGNoZWNrX2VtYWlsID0gYm9vbChyZS5zZWFyY2gociIoXlthLXpBLVowLTlfListXStAW2EtekEtWjAtOS1dK1wuW2EtekEtWjAtOS0uXSskKSIsIGxpc3RfaW5wdXRbM10pKQogICAgaWYgY2hlY2tfZW1haWwgYW5kIGxlbihsaXN0X2lucHV0WzNdKSA8IGxpbWl0X2VtYWxsOgogICAgICAgIHJldHVybiBUcnVlCiAgICBlbHNlOgogICAgICAgIHJldHVybiBGYWxzZQoKZGVmIGNoZWNrX2luZigpOgogICAgdXNlciA9IGlucHV0KCJFbnRlciBjbGFzc21hdGUgZmlyc3RfbmFtIGxhc3RfbmFtZSBiaXJ0aGRheSBFbWFpbCAiKQogICAgbGlzdF91c2VyID0gcmUuc3BsaXQoIlxzIix1c2VyKQogICAgaWYgY2hlY2tfaW5wdXRfbmFtZShsaXN0X3VzZXIpIGFuZCBjaGVja19pbnB1dF9iaXJkYXkobGlzdF91c2VyKSBhbmQgY2hlY2tfaW5wdXRfZW1haWwobGlzdF91c2VyKToKICAgICAgICBmaXJzdF9uYW1lLmFwcGVuZChsaXN0X3VzZXJbMF0pCiAgICAgICAgbGFzdF9uYW1lLmFwcGVuZChsaXN0X3VzZXJbMV0pCiAgICAgICAgYmlydGhkYXkuYXBwZW5kKGxpc3RfdXNlclsyXSkKICAgICAgICBlbWFpbC5hcHBlbmQobGlzdF91c2VyWzNdKQoKICAgICAgICByZXR1cm4gZmlyc3RfbmFtZSwgbGFzdF9uYW1lLCBlbWFpbCwgYmlydGhkYXkKICAgIGVsc2U6CiAgICAgICAgcHJpbnQoImJhbiBuaGFwIHNhaSBmb3JtYXQgcm9pIikKICAgICAgICBwcmludCgibmhhcCBsYWkgZGkiKQogICAgICAgIGNoZWNrX2luZigpCgoKZGVmIGlucHV0X2NsYXNzbWF0ZSgpOgogICAgd2l0aCBvcGVuKCdjbGFzc21hdGUuY3N2JywgJ3cnLCBuZXdsaW5lPScnKSBhcyBmaWxlOgogICAgICAgIGZpZWxkbmFtZXMgPSBbJ2ZpcnN0X25hbWUnLCAnbGFzdF9uYW1lJywgJ2JpcnRoZGF5JywgJ2VtYWlsJ10KICAgICAgICB3cml0ZXIgPSBjc3YuRGljdFdyaXRlcihmaWxlLCBmaWVsZG5hbWVzPWZpZWxkbmFtZXMpCgogICAgICAgIHdyaXRlci53cml0ZWhlYWRlcigpCiAgICAgICAgc29fbHVvbmdfc3YgPSBldmFsKGlucHV0KCJOaGFwIHZhbyBzbyBsdW9uZyBzaW5oIHZpZW4gbXVvbiBuaGFwICIpKQogICAgICAgIGZvciBpIGluIHJhbmdlKHNvX2x1b25nX3N2KToKICAgICAgICAgICAgY2hlY2tfaW5mKCkKICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KHsnZmlyc3RfbmFtZSc6IGZpcnN0X25hbWVbaV0sICdsYXN0X25hbWUnOiBsYXN0X25hbWVbaV0sICdiaXJ0aGRheSc6YmlydGhkYXlbaV0sICdlbWFpbCc6ZW1haWxbaV19KQoKaW5wdXRfY2xhc3NtYXRlKCkKZiA9IG9wZW4oImNsYXNzbWF0ZS5jc3YiLCAiciIpCnByaW50KGYpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcmV0dXJuIFRydWUKPHxmaW1fZW5kfD4="]
["853a66938c738eae1da02ef341f7ef54d97c0329-1","853a66938c738eae1da02ef341f7ef54d97c0329","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KYSA9IDIgCjx8ZmltX2VuZHw+"]
["2460deb177f468b938d98eec2ad5f5b83ab315c5-1","2460deb177f468b938d98eec2ad5f5b83ab315c5","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGlvCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHMgPSBpby5TdHJpbmdJTygpCiAgICBzX2J5dGUgPSBpby5CeXRlc0lPKCkKPHxmaW1faG9sZXw+CiAgICBwcmludChzX2J5dGUuZ2V0dmFsdWUoKSkKPHxmaW1fc3VmZml4fD4KICAgIHByaW50KCd0ZXN0JywgZmlsZT1zLCBlbmQ9Ilx0IikKICAgIHNfYnl0ZS53cml0ZShiJ2J5dGVzJykKICAgIHByaW50KCJuZXciKQogICAgcHJpbnQocy5nZXR2YWx1ZSgpKQo8fGZpbV9lbmR8Pg=="]
["bab66a8966b3d1cd0bb14fb947344c6d96419594-2","bab66a8966b3d1cd0bb14fb947344c6d96419594","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDEuMTEgb24gMjAxOC0xMC0xMiAxMzo1Mgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscwoKZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMsIG1vZGVscwppbXBvcnQgZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbgo8fGZpbV9lbmR8Pg=="]
["8ed346ddcb7e91ce8ab3a3ec00eb6d0efc048438-3","8ed346ddcb7e91ce8ab3a3ec00eb6d0efc048438","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmltcG9ydCBwZGIKaW1wb3J0IG1hdGgKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gbnVtcHkubGluYWxnIGltcG9ydCBpbnYKPHxmaW1faG9sZXw+CmNsYXNzIGxwX2ZpbHRlcigpOgoKCWRlZiBfX2luaXRfXyhzZWxmKToKCQlzZWxmLmFscGhhID0gMC4yNSAjZGVmYXVsdAoJCXNlbGYub2xkID0gMC4wCgkJc2VsZi5uZXcgPSAwLjAKCQlzZWxmLmluaXRlZCA9IEZhbHNlCgoKCglkZWYgaW5pdF9maWx0ZXIoc2VsZiwgdmFsKToKCQlzZWxmLm5ldyA9IHZhbAoJCXNlbGYub2xkID0gdmFsCgkJc2VsZi5pbml0ZWQgPSBUcnVlCgoJZGVmIHNldF9jb25zdChzZWxmLGxpbSk6CgkJc2VsZi5hbHBoYSA9IGxpbQoKCWRlZiBzZXRfbmV3KHNlbGYsIHZhbCk6CgkJc2VsZi5uZXcgPSB2YWwKCglkZWYgRmlsdGVyQ29tcHV0ZShzZWxmKToKCQlzZWxmLm9sZCA9IHNlbGYub2xkKigxLXNlbGYuYWxwaGEpK3NlbGYubmV3KnNlbGYuYWxwaGEKCQlyZXR1cm4gc2VsZi5vbGQKCgkJCQoKCgoKCgo8fGZpbV9zdWZmaXh8Pgpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZSAKI0lucHV0OgoKCjx8ZmltX2VuZHw+"]
["8ed346ddcb7e91ce8ab3a3ec00eb6d0efc048438-5","8ed346ddcb7e91ce8ab3a3ec00eb6d0efc048438","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmltcG9ydCBwZGIKaW1wb3J0IG1hdGgKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gbnVtcHkubGluYWxnIGltcG9ydCBpbnYKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUgCiNJbnB1dDoKCgpjbGFzcyBscF9maWx0ZXIoKToKCglkZWYgX19pbml0X18oc2VsZik6CgkJc2VsZi5hbHBoYSA9IDAuMjUgI2RlZmF1bHQKCQlzZWxmLm9sZCA9IDAuMAoJCXNlbGYubmV3ID0gMC4wCgkJc2VsZi5pbml0ZWQgPSBGYWxzZQoKCgoJZGVmIGluaXRfZmlsdGVyKHNlbGYsIHZhbCk6CgkJc2VsZi5uZXcgPSB2YWwKCQlzZWxmLm9sZCA9IHZhbAoJCXNlbGYuaW5pdGVkID0gVHJ1ZQoKCWRlZiBzZXRfY29uc3Qoc2VsZixsaW0pOgoJCXNlbGYuYWxwaGEgPSBsaW0KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCWRlZiBzZXRfbmV3KHNlbGYsIHZhbCk6CgkJc2VsZi5uZXcgPSB2YWwKCglkZWYgRmlsdGVyQ29tcHV0ZShzZWxmKToKPHxmaW1fZW5kfD4="]
["eb7c0248179a729060e0a13d0752e66d815f7428-5","eb7c0248179a729060e0a13d0752e66d815f7428","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNsaWNrCmZyb20gICBnaHV0aWwuc2hvd2luZyBpbXBvcnQgcHJpbnRfanNvbgpmcm9tICAgZ2h1dGlsLnR5cGVzICAgaW1wb3J0IElzc3VlCgpAY2xpY2suY29tbWFuZCgpCkBjbGljay5vcHRpb24oJy12JywgJy0tdmVyYm9zZScsIGlzX2ZsYWc9VHJ1ZSwgaGVscD0nU2hvdyBmdWxsIHJlc3BvbnNlIGJvZHknKQpASXNzdWUuYXJndW1lbnRfbGlzdCgnaXNzdWVzJykKZGVmIGNsaShpc3N1ZXMsIHZlcmJvc2UpOgogICAgIiIiIFNob3cgaXNzdWUgZGV0YWlscyAiIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcHJpbnRfanNvbihpc3N1ZXMsIHZlcmJvc2UpCjx8ZmltX2VuZHw+"]
["5afcd1fd542d65760958bbd0d3a6b6742996ad3e-2","5afcd1fd542d65760958bbd0d3a6b6742996ad3e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gY29zdGFudHMgaW1wb3J0IFRFWFRfRk9MREVSCmZyb20gcGVyc29uYWxfZXJyb3JzIGltcG9ydCBBUElFcnJvcgppbXBvcnQgZXJybm8KaW1wb3J0IHB5dGVzc2VyYWN0CgoKZGVmIGRvX29jcl90b190ZXh0KHBpbF9pbWFnZSwgZmlsZV9uYW1lLCBvdXRwdXRfZm9sZGVyPVRFWFRfRk9MREVSKToKICAgICIiIgogICAgVGFrZXMgYW4gaW1hZ2UgYW5kIGRvIG9jciBvbiBpdC4KICAgIDpwYXJhbSBwaWxfaW1hZ2U6IHBpbGxvdyBpbWFnZSBvZiB0ZXh0CiAgICA6cGFyYW0gZmlsZV9uYW1lOiBuYW1lIG9mIHBkZiBvcmlnaW5hbCBmaWxlCiAgICA6cGFyYW0gb3V0cHV0X2ZvbGRlcjogL3BhdGgvdG8vb3V0cHV0X2ZpbGUKICAgIDpyZXR1cm46CiAgICAiIiIKICAgICMgRGVmaW5lIGNvbmZpZyBwYXJhbWV0ZXJzLgogICAgIyAnLWwgZW5nJyAgZm9yIHVzaW5nIHRoZSBFbmdsaXNoIGxhbmd1YWdlCiAgICAjICctLW9lbSAxJyBmb3IgdXNpbmcgTFNUTSBPQ1IgRW5naW5lCiAgICAjIC0tcHNtIDQgIEFzc3VtZSBhIHNpbmdsZSBjb2x1bW4gb2YgdGV4dAlvZiB2YXJpYWJsZQlzaXplcy4KICAgICMgJy0tcHNtIDEyJyBmb3Igc3BhcnNlIHRleHQgd2l0aCBPU0QuIDMgaXMgZGVmYXVsdCBhbmQgaXQncyBub3Qgd29ya2luZyBiYWQuCjx8ZmltX2hvbGV8PgoKICAgICAgICAjIGNoZWNrIGlmIGRlc3RpbmF0aW9uIGZvbGRlciBhbHJlYWR5IGV4aXN0cwogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmRpcm5hbWUob3V0cHV0X2ZvbGRlcikpOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhvdXRwdXRfZm9sZGVyKQogICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6ICAjIEd1YXJkIGFnYWluc3QgcmFjZSBjb25kaXRpb24KICAgICAgICAgICAgICAgIGlmIGV4Yy5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CiAgICAgICAgICAgICAgICAgICAgcmFpc2UKCiAgICAgICAgIyB3cml0ZSB0aGUgb3V0cHV0IGZpbGUsIGFwcGVuZGluZyB0byB0aGUgZXhpc3Rpbmcgb25lCiAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihvdXRwdXRfZm9sZGVyLCAne30udHh0Jy5mb3JtYXQoZmlsZV9uYW1lKSksICdhJywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgcmVzdWx0OgogICAgICAgICAgICByZXN1bHQud3JpdGUodHh0KQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIHJhaXNlIEFQSUVycm9yKCdQeVRlc3NlcmFjdCBpcyBub3QgcGVyZm9ybWluZyB3ZWxsLi4uXG57fScKICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGUpKQojIHByaW50KGxpbmUpCjx8ZmltX3N1ZmZpeHw+CiAgICBjb25maWcgPSAnLWwgaXRhIC0tb2VtIDEgLS1wc20gNCcKICAgIHRyeToKICAgICAgICB0eHQgPSBweXRlc3NlcmFjdC5pbWFnZV90b19zdHJpbmcocGlsX2ltYWdlLCBjb25maWc9Y29uZmlnKQogICAgICAgIHR4dCArPSAnXG5cblxuJwo8fGZpbV9lbmR8Pg=="]
["eb62571f91cade89ad622ecedfe94ca8d1119a68-1","eb62571f91cade89ad622ecedfe94ca8d1119a68","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFzeW5jaW8KaW1wb3J0IGRpc2NvcmQKaW1wb3J0IG9zCmltcG9ydCB0aW1lCmltcG9ydCB0cmFjZWJhY2sKCmNsaWVudCA9IGRpc2NvcmQuQ2xpZW50KCkKCkBjbGllbnQuZXZlbnQKYXN5bmMgZGVmIG9uX3JlYWR5KCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGF3YWl0IGNsaWVudC5zZW5kX21lc3NhZ2UoY2xpZW50LmdldF9jaGFubmVsKCczMjIxODQwNzM0MjA0NzIzMzQnKSwgJ1Rlc3RlcyBkYSBib3QgcGFyYSBtZW5zYWdlbnMgYXV0b21hdGl6YWRhcyA6dGhpbmtpbmc6JykKICAgIHF1aXQoKSAgIAoKPHxmaW1fZW5kfD4="]
["d92d0d06b7d0c214c12ff8b6ade72f5acfe448c7-2","d92d0d06b7d0c214c12ff8b6ade72f5acfe448c7",{"$cut":{"chars":182784,"head":"PHxmaW1fcHJlZml4fD4KIiIiR2VuZXJhdGVkIG1lc3NhZ2UgY2xhc3NlcyBmb3IgcHJpdmF0ZWNhIHZlcnNpb24gdjEuCgpUaGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IFNlcnZpY2UgQVBJIGlzIGEgaGlnaGx5LWF2YWlsYWJsZSwgc2NhbGFibGUgc2VydmljZQp0aGF0IGVuYWJsZXMgeW91IHRvIHNpbXBsaWZ5IGFuZCBhdXRvbWF0ZSB0aGUgbWFuYWdlbWVudCBvZiBwcml2YXRlCmNlcnRpZmljYXRlIGF1dGhvcml0aWVzIChDQXMpIHdoaWxlIHN0YXlpbmcgaW4gY29udHJvbCBvZiB5b3VyIHByaXZhdGUga2V5cy4KIiIiCiMgTk9URTogVGhpcyBmaWxlIGlzIGF1dG9nZW5lcmF0ZWQgYW5kIHNob3VsZCBub3QgYmUgZWRpdGVkIGJ5IGhhbmQuCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSBhcGl0b29scy5iYXNlLnByb3RvcnBjbGl0ZSBpbXBvcnQgbWVzc2FnZXMgYXMgX21lc3NhZ2VzCmZyb20gYXBpdG9vbHMuYmFzZS5weSBpbXBvcnQgZW5jb2RpbmcKZnJvbSBhcGl0b29scy5iYXNlLnB5IGltcG9ydCBleHRyYV90eXBlcwoKCnBhY2thZ2UgPSAncHJpdmF0ZWNhJwoKCmNsYXNzIEFjY2Vzc1VybHMoX21lc3NhZ2VzLk1lc3NhZ2UpOgogIHIiIiJVUkxzIHdoZXJlIGEgQ2VydGlmaWNhdGVBdXRob3JpdHkgd2lsbCBwdWJsaXNoIGNvbnRlbnQuCgogIEZpZWxkczoKICAgIGNhQ2VydGlmaWNhdGVBY2Nlc3NVcmw6IFRoZSBVUkwgd2hlcmUgdGhpcyBDZXJ0aWZpY2F0ZUF1dGhvcml0eSdzIENBCiAgICAgIGNlcnRpZmljYXRlIGlzIHB1Ymxpc2hlZC4gVGhpcyB3aWxsIG9ubHkgYmUgc2V0IGZvciBDQXMgdGhhdCBoYXZlIGJlZW4KICAgICAgYWN0aXZhdGVkLgogICAgY3JsQWNjZXNzVXJsczogVGhlIFVSTHMgd2hlcmUgdGhpcyBDZXJ0aWZpY2F0ZUF1dGhvcml0eSdzIENSTHMgYXJlCiAgICAgIHB1Ymxpc2hlZC4gVGhpcyB3aWxsIG9ubHkgYmUgc2V0IGZvciBDQXMgdGhhdCBoYXZlIGJlZW4gYWN0aXZhdGVkLgogICIiIgoKICBjYUNlcnRpZmljYXRlQWNjZXNzVXJsID0gX21lc3NhZ2VzLlN0cmluZ0ZpZWxkKDEpCiAgY3JsQWNjZXNzVXJscyA9IF9tZXNzYWdlcy5TdHJpbmdGaWVsZCgyLCByZXBlYXRlZD1UcnVlKQoKCmNsYXNzIEFjdGl2YXRlQ2VydGlmaWNhdGVBdXRob3JpdHlSZXF1ZXN0KF9tZXNzYWdlcy5NZXNzYWdlKToKICByIiIiUmVxdWVzdCBtZXNzYWdlIGZvcgogIENlcnRpZmljYXRlQXV0aG9yaXR5U2VydmljZS5BY3RpdmF0ZUNlcnRpZmljYXRlQXV0aG9yaXR5LgoKICBGaWVsZHM6CiAgICBwZW1DYUNlcnRpZmljYXRlOiBSZXF1aXJlZC4gVGhlIHNpZ25lZCBDQSBjZXJ0aWZpY2F0ZSBpc3N1ZWQgZnJvbQogICAgICBGZXRjaENlcnRpZmljYXRlQXV0aG9yaXR5Q3NyUmVzcG9uc2UucGVtX2Nzci4KICAgIHJlcXVlc3RJZDogT3B0aW9uYWwuIEFuIElEIHRvIGlkZW50aWZ5IHJlcXVlc3RzLiBTcGVjaWZ5IGEgdW5pcXVlIHJlcXVlc3QKICAgICAgSUQgc28gdGhhdCBpZiB5b3UgbXVzdCByZXRyeSB5b3VyIHJlcXVlc3QsIHRoZSBzZXJ2ZXIgd2lsbCBrbm93IHRvCiAgICAgIGlnbm9yZSB0aGUgcmVxdWVzdCBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIGNvbXBsZXRlZC4gVGhlIHNlcnZlciB3aWxsCiAgICAgIGd1YXJhbnRlZSB0aGF0IGZvciBhdCBsZWFzdCA2MCBtaW51dGVzIHNpbmNlIHRoZSBmaXJzdCByZXF1ZXN0LiBGb3IKICAgICAgZXhhbXBsZSwgY29uc2lkZXIgYSBzaXR1YXRpb24gd2hlcmUgeW91IG1ha2UgYW4gaW5pdGlhbCByZXF1ZXN0IGFuZCB0IGhlCiAgICAgIHJlcXVlc3QgdGltZXMgb3V0LiBJZiB5b3UgbWFrZSB0aGUgcmVxdWVzdCBhZ2FpbiB3aXRoIHRoZSBzYW1lIHJlcXVlc3QKICAgICAgSUQsIHRoZSBzZXJ2ZXIgY2FuIGNoZWNrIGlmIG9yaWdpbmFsIG9wZXJhdGlvbiB3aXRoIHRoZSBzYW1lIHJlcXVlc3QgSUQKICAgICAgd2FzIHJlY2VpdmVkLCBhbmQgaWYgc28sIHdpbGwgaWdub3JlIHRoZSBzZWNvbmQgcmVxdWVzdC4gVGhpcyBwcmV2ZW50cwogICAgICBjbGllbnRzIGZyb20gYWNjaWRlbnRhbGx5IGNyZWF0aW5nIGR1cGxpY2F0ZSBjb21taXRtZW50cy4gVGhlIHJlcXVlc3QgSUQKICAgICAgbXVzdCBiZSBhIHZhbGlkIFVVSUQgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgemVybyBVVUlEIGlzIG5vdCBzdXBwb3J0ZWQKICAgICAgKDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCkuCiAgICBzdWJvcmRpbmF0ZUNvbmZpZzogUmVxdWlyZWQuIE11c3QgaW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaXNzdWVyIG9mCiAgICAgICdwZW1fY2FfY2VydGlmaWNhdGUnLCBhbmQgYW55IGZ1cnRoZXIgaXNzdWVycyB1bnRpbCB0aGUgc2VsZi1zaWduZWQgQ0EuCiAgIiIiCgogIHBlbUNhQ2VydGlmaWNhdGUgPSBfbWVzc2FnZXMuU3RyaW5nRmllbGQoMSkKICByZXF1ZXN0SWQgPSBfbWVzc2FnZXMuU3RyaW5nRmllbGQoMikKICBzdWJvcmRpbmF0ZUNvbmZpZyA9IF9tZXNzYWdlcy5NZXNzYWdlRmllbGQoJ1N1Ym9yZGluYXRlQ29uZmlnJywgMykKCgpjbGFzcyBBbGxvd2VkS2V5VHlwZShfbWVzc2FnZXMuTWVzc2FnZSk6CiAgciIiIkRlc2NyaWJlcyBhICJ0eXBlIiBvZiBrZXkgdGhhdCBtYXkgYmUgdXNlZCBpbiBhIENlcnRpZmljYXRlIGlzc3VlZCBmcm9tCiAgYSBDYVBvb2wuIE5vdGUgdGhhdCBhIHNpbmdsZSBBbGxvd2VkS2V5VHlwZSBtYXkgcmVmZXIgdG8gZWl0aGVyIGEgZnVsbHktCiAgcXVhbGlmaWVkIGtleSBhbGdvcml0aG0sIHN1Y2ggYXMgUlNBIDQwOTYsIG9yIGEgZmFtaWx5IG9mIGtleSBhbGdvcml0aG1zLAogIHN1Y2ggYXMgYW55IFJTQSBrZXkuCgogIEZpZWxkczoKICAgIGVsbGlwdGljQ3VydmU6IFJlcHJlc2VudHMgYW4gYWxsb3dlZCBFbGxpcHRpYyBDdXJ2ZSBrZXkgdHlwZS4KICAgIHJzYTogUmVwcmVzZW50cyBhbiBhbGxvd2VkIFJTQSBrZXkgdHlwZS4KICAiIiIKCiAgZWxsaXB0aWNDdXJ2ZSA9IF9tZXNzYWdlcy5NZXNzYWdlRmllbGQoJ0VjS2V5VHlwZScsIDEpCiAgcnNhID0gX21lc3NhZ2VzLk1lc3NhZ2VGaWVsZCgnUnNhS2V5VHlwZScsIDIpCgoKY2xhc3MgQXVkaXRDb25m"}}]
["5cce0d76a64f14935c96f0fea66de17adea3cff0-4","5cce0d76a64f14935c96f0fea66de17adea3cff0",{"$cut":{"chars":36144,"head":"PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMCBNYWthbmkgVGVjaG5vbG9naWVzIExMQwojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiIiIlByb3ZpZGVzIGEgbW9yZSB1c2VyIGZyaWVuZGx5IGludGVyZmFjZSB0byBNYWthbmkgSERGNSBsb2dzLgoKVHlwaWNhbCB1c2UgY2FzZToKICBoNSA9IEg1TG9nTG9hZGVyKCkKICBoNS5PcGVuKFsnZmlsZTEuaDUnLCAnZmlsZTIuaDUnXSkKCiAgIyBEaWN0aW9uYXJ5IGludGVyZmFjZS4KICBwbHQuZmlndXJlKCkKICB0ID0gaDUuY2FwdHVyZV90aW1lWydGY0EvRmxpZ2h0Q29tcHV0ZXJTZW5zb3InXQogIGQgPSBoNVsnRmNBL0ZsaWdodENvbXB1dGVyU2Vuc29yL2F1eC9tYWcnXQogIHBsdC5wbG90KHQsIGQpCgogICMgRnVuY3Rpb24gY2FsbCBpbnRlcmZhY2UuCiAgcGx0LmZpZ3VyZSgpCiAgZm9yIGYgaW4gaDUuR2V0RmllbGRzKHInXlNlcnZvW14vXSsvU2Vydm9TdGF0dXMkJyk6CiAgICB0ID0gaDUuR2V0Q2FwdHVyZVRpbWUoZikKICAgIGQgPSBoNS5HZXREYXRhKGYgKyAnL2FuZ2xlX21lYXN1cmVkJykKICAgIHBsdC5wbG90KHQsIGQsIGxhYmVsPWg1LkdldE5vZGVOYW1lKGYpKQogIHBsdC5sZWdlbmQoKQoiIiIKCiMgTk9USUNFOiBUbyBlYXNlIGFuYWx5c2lzLCBwbGVhc2UgZG8gbm90IGRlcGVuZCBvbiB0aGUgTWFrYW5pIHJlcG9zaXRvcnkhCmltcG9ydCBjb2xsZWN0aW9ucwppbXBvcnQgcmUKaW1wb3J0IHN5cwoKaW1wb3J0IGg1cHkKaW1wb3J0IG51bXB5IGFzIG5wCgoKZGVmIFByaW50UHJvZ3Jlc3MoY291bnQsIHRvdGFsLCBzdWZmaXg9JycpOgogICIiIlByaW50IGEgcHJvZ3Jlc3MgYmFyIHRvIHN0ZG91dC4iIiIKICBiYXJfbGVuID0gNjAKICBmaWxsZWRfbGVuID0gaW50KHJvdW5kKGJhcl9sZW4gKiBjb3VudCAvIGZsb2F0KHRvdGFsKSkpCgogIHBlcmNlbnQgPSAxMDAuMCAqIGNvdW50IC8gZmxvYXQodG90YWwpCiAgYmFyID0gJz0nICogZmlsbGVkX2xlbiArICctJyAqIChiYXJfbGVuIC0gZmlsbGVkX2xlbikKICBzeXMuc3Rkb3V0LndyaXRlKCdbJXNdICUgNC4xZiUlIC4uLiVzXHInICUgKGJhciwgcGVyY2VudCwgc3VmZml4KSkKCiAgaWYgY291bnQgPT0gdG90YWw6CiAgICBzeXMuc3Rkb3V0LndyaXRlKCdcbkRvbmUhXG4nKQoKICBzeXMuc3Rkb3V0LmZsdXNoKCkKCgpkZWYgX0g1QnVpbGREdHlwZVRyZWUoZHR5cGUsIHByZWZpeD0nJyk6CiAgIiIiUmVjdXJzaXZlbHkgYnVpbGQgYW4gYXJyYXkgb2YgcGF0aHMsIHN0YXJ0aW5nIGZyb20gYW4gSERGNSBkdHlwZS4iIiIKICB2YWx1ZXMgPSBbc3RyKHByZWZpeCkubHN0cmlwKCcvJyldCiAgaWYgZHR5cGUuZmllbGRzOgogICAgZm9yIGtleSwgaXRlbSBpbiBkdHlwZS5maWVsZHMuaXRlcml0ZW1zKCk6CiAgICAgIHZhbHVlcyArPSBfSDVCdWlsZER0eXBlVHJlZShpdGVtWzBdLmJhc2UsIHByZWZpeCArICcvJyArIGtleSkKICByZXR1cm4gdmFsdWVzCgoKZGVmIF9INUJ1aWxkR3JvdXBUcmVlKGdyb3VwLCBwcmVmaXg9JycpOgogICIiIlJlY3Vyc2l2ZWx5IGJ1aWxkIGFuIGFycmF5IG9mIHBhdGhzIHRvIGVhY2ggSERGNSBkYXRhc2V0LiIiIgogIHZhbHVlcyA9IFtdCiAgZm9yIGtleSwgaXRlbSBpbiBncm91cC5pdGVyaXRlbXMoKToKICAgIGlmIGlzaW5zdGFuY2UoaXRlbSwgaDVweS5EYXRhc2V0KToKICAgICAgdmFsdWVzLmFwcGVuZChzdHIocHJlZml4ICsgJy8nICsga2V5KS5sc3RyaXAoJy8nKSkKICAgIGVsaWYgaXNpbnN0YW5jZShpdGVtLCBoNXB5Lkdyb3VwKToKICAgICAgdmFsdWVzICs9IF9INUJ1aWxkR3JvdXBUcmVlKGl0ZW0sIHByZWZpeCArICcvJyArIGtleSkKICByZXR1cm4gdmFsdWVzCgoKZGVmIF9INUJ1aWxkR3JvdXBBbmREdHlwZVRyZWUoZ3JvdXAsIHByZWZpeD0nJyk6CiAgIiIiUmVjdXJzaXZlbHkgYnVpbGQgYW4gYXJyYXkgb2YgcGF0aHMsIHN0YXJ0aW5nIGZyb20gYW4gSERGNSBncm91cC4iIiIKICB2YWx1ZXMgPSBbXQogIGZvciBrZXksIGl0ZW0gaW4gZ3JvdXAuaXRlcml0ZW1zKCk6CiAgICBpZiBpc2luc3RhbmNlKGl0ZW0sIGg1cHkuRGF0YXNldCk6CiAgICAgIHZhbHVlcyArPSBfSDVCdWlsZER0eXBlVHJlZShpdGVtLmR0eXBlLmJhc2UsIHByZWZpeCArICcvJyArIGtleSkKICAgIGVsaWYgaXNpbnN0YW5jZShpdGVtLCBoNXB5Lkdyb3VwKToKICAgICAgdmFsdWVzICs9IF9INUJ1aWxkR3JvdXBBbmREdHlwZVRyZWUoaXRlbSwgcHJlZml4ICsgJy8nICsga2V5KQogIHJldHVybiB2YWx1ZXMKCgpkZWYgX05vcm1hbGl6ZUZpbGVOYW1lcyhmaWxlbmFtZXMpOgogIGlmIGZpbGVuYW1lcyBpcyBOb25lOgogICAgZmlsZW5hbWVzID0gW10KICBlbGlmIG5vdCBpc2luc3RhbmNlKGZpbGVuYW1lcywgbGlzdCk6CiAgICBmaWxlbmFtZXMgPSBbZmlsZW5hbWVzXQogIHJldHVybiBmaWxlbmFtZXMKCgpjbGFzcyBfSDVEYXRhQ2FjaGUob2JqZWN0KToKICAiIiJQcm92aWRlcyBhIHNpbXBsZSBjYWNoZSBpbnRlcmZhY2UgdG8gSDUqQ2FjaGUgY2xhc3Nlcy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgc2VsZi5fZGF0YV9jYWNo"}}]
["5ce61dc88e5b6c86fb6bf745b519da3fbec32438-5","5ce61dc88e5b6c86fb6bf745b519da3fbec32438",{"$cut":{"chars":21376,"head":"PHxmaW1fcHJlZml4fD4KIiIiIFRlc3Rpbmcgb3V0IGNvbXBsZXggc3RlcCBjYXBhYmlsaXR5LiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IHVuaXR0ZXN0CgppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gb3Blbm1kYW8uYXBpIGltcG9ydCBHcm91cCwgUHJvYmxlbSwgSW5kZXBWYXJDb21wLCBOZXd0b24sIFVuaXRDb21wLCBFeGVjQ29tcCwgXAogICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50CmZyb20gb3Blbm1kYW8uY29yZS50ZXN0LnRlc3RfdW5pdHMgaW1wb3J0IFNyY0NvbXAsIFRndENvbXBDLCBUZ3RDb21wRiwgVGd0Q29tcEsKZnJvbSBvcGVubWRhby50ZXN0LmNvbnZlcmdlX2RpdmVyZ2UgaW1wb3J0IENvbnZlcmdlRGl2ZXJnZUdyb3Vwcwpmcm9tIG9wZW5tZGFvLnRlc3QucGFyYWJvbG9pZCBpbXBvcnQgUGFyYWJvbG9pZApmcm9tIG9wZW5tZGFvLnRlc3Quc2VsbGFyIGltcG9ydCBTZWxsYXJEZXJpdmF0aXZlc0dyb3VwZWQKZnJvbSBvcGVubWRhby50ZXN0LnV0aWwgaW1wb3J0IGFzc2VydF9yZWxfZXJyb3IKZnJvbSBvcGVubWRhby51dGlsLm9wdGlvbnMgaW1wb3J0IE9wdGlvbnNEaWN0aW9uYXJ5Cgp0cnk6CiAgICBmcm9tIG9wZW5tZGFvLnNvbHZlcnMucGV0c2Nfa3NwIGltcG9ydCBQZXRzY0tTUAogICAgZnJvbSBvcGVubWRhby5jb3JlLnBldHNjX2ltcGwgaW1wb3J0IFBldHNjSW1wbCBhcyBwZXRzY19pbXBsCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgIHBldHNjX2ltcGwgPSBOb25lCgoKY2xhc3MgQ29tcGxleFN0ZXBWZWN0b3JVbml0VGVzdHNCYXNpY0ltcGwodW5pdHRlc3QuVGVzdENhc2UpOgoKICAgIGRlZiB0ZXN0X3NpbmdsZV9jb21wX3BhcmFib2xvaWQoc2VsZik6CiAgICAgICAgcHJvYiA9IFByb2JsZW0oKQogICAgICAgIHJvb3QgPSBwcm9iLnJvb3QgPSBHcm91cCgpCiAgICAgICAgcm9vdC5hZGQoJ3AxJywgSW5kZXBWYXJDb21wKCd4JywgMC4wKSwgcHJvbW90ZXM9WycqJ10pCiAgICAgICAgcm9vdC5hZGQoJ3AyJywgSW5kZXBWYXJDb21wKCd5JywgMC4wKSwgcHJvbW90ZXM9WycqJ10pCiAgICAgICAgcm9vdC5hZGQoJ2NvbXAnLCBQYXJhYm9sb2lkKCksIHByb21vdGVzPVsneCcsICd5JywgJ2ZfeHknXSkKCiAgICAgICAgcm9vdC5kZXJpdl9vcHRpb25zWyd0eXBlJ10gPSAnY3MnCgogICAgICAgIHByb2Iuc2V0dXAoY2hlY2s9RmFsc2UpCiAgICAgICAgcHJvYi5ydW4oKQoKICAgICAgICBqYWMgPSBwcm9iLmNhbGNfZ3JhZGllbnQoWyd4JywgJ3knXSwgWydmX3h5J10pCgogICAgICAgICMgTm90ZSwgRkQgY2FuIG5vdCByZWFjaCB0aGlzIGFjY3VyYWN5LCBidXQgQ1MgY2FuLgogICAgICAgIGFzc2VydF9yZWxfZXJyb3Ioc2VsZiwgamFjWzBdWzBdLCAtNi4wLCAxZS03KQogICAgICAgIGFzc2VydF9yZWxfZXJyb3Ioc2VsZiwgamFjWzBdWzFdLCA4LjAsIDFlLTcpCgogICAgZGVmIHRlc3RfY29udmVyZ2VfZGl2ZXJnZV9ncm91cHMoc2VsZik6CgogICAgICAgIHByb2IgPSBQcm9ibGVtKCkKICAgICAgICByb290ID0gcHJvYi5yb290ID0gR3JvdXAoKQogICAgICAgIHJvb3QuYWRkKCdzdWInLCBDb252ZXJnZURpdmVyZ2VHcm91cHMoKSkKCiAgICAgICAgcm9vdC5kZXJpdl9vcHRpb25zWyd0eXBlJ10gPSAnY3MnCgogICAgICAgICMgV2UgY2FuJ3QgcmVhY2ggb3VyIGRlc2lyZWQgYWNjdXJhY3kgd2l0aCB0aGlzIHN0ZXAgc2l6ZSBpbiBmZCwgYnV0CiAgICAgICAgIyB3ZSBjYW4gd2l0aCBjcyAod2hlcmUgc3RlcCBzaXplIGlzIGlycmVsZXZhbnQuKQogICAgICAgIHJvb3QuZGVyaXZfb3B0aW9uc1snc3RlcF9zaXplJ10gPSAxLjBlLTQKCiAgICAgICAgcHJvYi5zZXR1cChjaGVjaz1GYWxzZSkKICAgICAgICBwcm9iLnJ1bigpCgogICAgICAgIGluZGVwX2xpc3QgPSBbJ3N1Yi5wLngnXQogICAgICAgIHVua25vd25fbGlzdCA9IFsnc3ViLmNvbXA3LnkxJ10KCiAgICAgICAgSiA9IHByb2IuY2FsY19ncmFkaWVudChpbmRlcF9saXN0LCB1bmtub3duX2xpc3QsIG1vZGU9J2Z3ZCcsIHJldHVybl9mb3JtYXQ9J2RpY3QnKQogICAgICAgIGFzc2VydF9yZWxfZXJyb3Ioc2VsZiwgSlsnc3ViLmNvbXA3LnkxJ11bJ3N1Yi5wLngnXVswXVswXSwgLTQwLjc1LCAxZS02KQoKICAgICAgICBKID0gcHJvYi5jYWxjX2dyYWRpZW50KGluZGVwX2xpc3QsIHVua25vd25fbGlzdCwgbW9kZT0ncmV2JywgcmV0dXJuX2Zvcm1hdD0nZGljdCcpCiAgICAgICAgYXNzZXJ0X3JlbF9lcnJvcihzZWxmLCBKWydzdWIuY29tcDcueTEnXVsnc3ViLnAueCddWzBdWzBdLCAtNDAuNzUsIDFlLTYpCgogICAgZGVmIHRlc3RfdW5pdF9jb252ZXJzaW9uKHNlbGYpOgoKICAgICAgICBwcm9iID0gUHJvYmxlbSgpCiAgICAgICAgcHJvYi5yb290ID0gR3JvdXAoKQogICAgICAgIHByb2Iucm9vdC5hZGQoJ3NyYycsIFNyY0NvbXAoKSkKICAgICAgICBwcm9iLnJvb3QuYWRkKCd0Z3RGJywgVGd0Q29tcEYoKSkKICAgICAgICBwcm9iLnJvb3QuYWRkKCd0Z3RDJywgVGd0Q29tcEMoKSkKICAgICAgICBwcm9iLnJvb3QuYWRkKCd0Z3RLJywgVGd0Q29tcEsoKSkKICAgICAgICBwcm9iLnJvb3QuYWRkKCdweDEnLCBJbmRlcFZhckNvbXAoJ3gxJywgMTAwLjApLCBwcm9tb3Rlcz1bJ3gxJ10pCiAgICAgICAgcHJvYi5yb290LmNvbm5lY3QoJ3gxJywgJ3NyYy54MScpCiAgICAgICAgcHJvYi5yb290LmNvbm5lY3QoJ3NyYy54MicsICd0Z3RGLngyJykKICAgICAgICBwcm9iLnJvb3QuY29ubmVjdCgnc3JjLngyJywgJ3RndEMueDInKQogICAgICAgIHByb2Iucm9vdC5jb25uZWN0KCdzcmMueDInLCAndGd0Sy54MicpCgogICAgICAgIHByb2Iucm9vdC5kZXJpdl9vcHRpb25zWyd0eXBlJ10gPSAnY3MnCgogICAgICAgIHByb2Iuc2V0dXAoY2hlY2s9RmFsc2UpCiAgICAgICAgcHJvYi5ydW4oKQoKICAgICAgICBpbmRlcF9saXN0ID0gWyd4MSddCiAgICAgICAgdW5rbm93bl9saXN0ID0gWyd0Z3RGLngzJywgJ3RndEMueDMnLCAndGd0Sy54MyddCiAgICAgICAgSiA9IHByb2IuY2FsY19ncmFkaWVudChpbmRlcF9saXN0LCB1bmtub3duX2xpc3QsIG1vZGU9J2Z3"}}]
["3b433332994f3673e499580a1b4638443c8889a1-4","3b433332994f3673e499580a1b4638443c8889a1",{"$cut":{"chars":38272,"head":"PHxmaW1fcHJlZml4fD4KCmZyb20gUHlTaWRlMi5RdEd1aSBpbXBvcnQgKgpmcm9tIFB5U2lkZTIuUXRDb3JlIGltcG9ydCAqCmZyb20gUHlTaWRlMi5RdFdpZGdldHMgaW1wb3J0ICoKCmZyb20gbWNlZGl0X3VpLnVpX21haW4gaW1wb3J0IFVpX01haW5XaW5kb3cKZnJvbSBtY2VkaXRfdWkuY2xpY2thYmxlX2dyYXBoaWNzX3NjZW5lIGltcG9ydCAqCmZyb20gbWNlZGl0X3VpLmN1c3RvbV9ncmFwaGljc19pdGVtcyBpbXBvcnQgKgpmcm9tIG1jZWRpdF91aS5lbnRpdHlfbGF5ZXJfaXRlbSBpbXBvcnQgKgpmcm9tIG1jZWRpdF91aS5sYXllcl9pdGVtIGltcG9ydCAqCmZyb20gbWNlZGl0X3VpLnRpbGVzZXRfZ3JhcGhpY3Nfc2NlbmUgaW1wb3J0ICoKCmZyb20gbWNlZGl0X3VpLnNldHRpbmdzIGltcG9ydCAqCmZyb20gbWNlZGl0X3VpLmVudGl0eV9zZWFyY2hfZGlhbG9nIGltcG9ydCAqCmZyb20gbWNlZGl0X3VpLnNhdmVfZWRpdG9yX2RpYWxvZyBpbXBvcnQgKgpmcm9tIG1jZWRpdF91aS50ZXh0X2VkaXRvcl9kaWFsb2cgaW1wb3J0ICoKZnJvbSBtY2VkaXRfdWkuc3ByaXRlX2VkaXRvcl9kaWFsb2cgaW1wb3J0ICoKCmZyb20gbWNsaWIuZ2FtZSBpbXBvcnQgR2FtZQpmcm9tIG1jbGliLmRhdGFfaW50ZXJmYWNlIGltcG9ydCBSb21JbnRlcmZhY2UKZnJvbSBtY2xpYi5yZW5kZXJlciBpbXBvcnQgUmVuZGVyZXIKZnJvbSBtY2xpYi5kb2NzIGltcG9ydCBBUkVBX0lOREVYX1RPX05BTUUKCmZyb20gdmVyc2lvbiBpbXBvcnQgVkVSU0lPTgoKaW1wb3J0IG9zCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CmZyb20gUElMIGltcG9ydCBJbWFnZQppbXBvcnQgdHJhY2ViYWNrCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCBwc3V0aWwKZnJvbSB6aXBmaWxlIGltcG9ydCBaaXBGaWxlCgppbXBvcnQgeWFtbAp0cnk6CiAgZnJvbSB5YW1sIGltcG9ydCBDRHVtcGVyIGFzIER1bXBlcgpleGNlcHQgSW1wb3J0RXJyb3I6CiAgZnJvbSB5YW1sIGltcG9ydCBEdW1wZXIKCiMgQWxsb3cgeWFtbCB0byBsb2FkIGFuZCBkdW1wIE9yZGVyZWREaWN0cy4KeWFtbC5TYWZlTG9hZGVyLmFkZF9jb25zdHJ1Y3RvcigKICB5YW1sLnJlc29sdmVyLkJhc2VSZXNvbHZlci5ERUZBVUxUX01BUFBJTkdfVEFHLAogIGxhbWJkYSBsb2FkZXIsIG5vZGU6IE9yZGVyZWREaWN0KGxvYWRlci5jb25zdHJ1Y3RfcGFpcnMobm9kZSkpCikKeWFtbC5EdW1wZXIuYWRkX3JlcHJlc2VudGVyKAogIE9yZGVyZWREaWN0LAogIGxhbWJkYSBkdW1wZXIsIGRhdGE6IGR1bXBlci5yZXByZXNlbnRfZGljdChkYXRhLml0ZW1zKCkpCikKCmZyb20gcGF0aHMgaW1wb3J0IERBVEFfUEFUSAoKY2xhc3MgTUNFZGl0b3JXaW5kb3coUU1haW5XaW5kb3cpOgogIGRlZiBfX2luaXRfXyhzZWxmKToKICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgc2VsZi51aSA9IFVpX01haW5XaW5kb3coKQogICAgc2VsZi51aS5zZXR1cFVpKHNlbGYpCiAgICAKICAgIHNlbGYuY3VycmVudF9wcm9qZWN0X3BhdGggPSBOb25lCiAgICAKICAgIHNlbGYub3Blbl9kaWFsb2dzID0gW10KICAgIAogICAgc2VsZi5hcmVhX2luZGV4ID0gTm9uZQogICAgc2VsZi5yb29tX2luZGV4ID0gTm9uZQogICAgc2VsZi5hcmVhID0gTm9uZQogICAgc2VsZi5yb29tID0gTm9uZQogICAgCiAgICBzZWxmLmxheWVyX2l0ZW1zID0gW10KICAgIHNlbGYuc2VsZWN0ZWRfbGF5ZXJfaW5kZXggPSBOb25lCiAgICBzZWxmLnNlbGVjdGVkX3RpbGVzZXRfZ3JhcGhpY3Nfc2NlbmUgPSBOb25lCiAgICBzZWxmLnNlbGVjdGVkX3RpbGVzX2N1cnNvciA9IE5vbmUKICAgIAogICAgc2VsZi5sYXN0X2VtdWxhdG9yX3Byb2Nlc3MgPSBOb25lCiAgICAKICAgIHNlbGYudWkuc2Nyb2xsQXJlYS5zZXRGcmFtZVNoYXBlKFFGcmFtZS5Ob0ZyYW1lKQogICAgCiAgICBzZWxmLnJvb21fZ3JhcGhpY3Nfc2NlbmUgPSBDbGlja2FibGVHcmFwaGljc1NjZW5lKCkKICAgIHNlbGYudWkucm9vbV9ncmFwaGljc192aWV3LnNldFNjZW5lKHNlbGYucm9vbV9ncmFwaGljc19zY2VuZSkKICAgIHNlbGYudWkucm9vbV9ncmFwaGljc192aWV3LnNldEZvY3VzKCkKICAgIHNlbGYucm9vbV9ncmFwaGljc19zY2VuZS5jbGlja2VkLmNvbm5lY3Qoc2VsZi5yb29tX2NsaWNrZWQpCiAgICBzZWxmLnJvb21fZ3JhcGhpY3Nfc2NlbmUuY2xpY2tlZC5jb25uZWN0KHNlbGYubGF5ZXJfY2xpY2tlZCkKICAgIHNlbGYucm9vbV9ncmFwaGljc19zY2VuZS5tb3ZlZC5jb25uZWN0KHNlbGYubW91c2VfbW92ZWRfb25fcm9vbSkKICAgIAogICAgc2VsZi5tYXBfZ3JhcGhpY3Nfc2NlbmUgPSBDbGlja2FibGVHcmFwaGljc1NjZW5lKCkKICAgIHNlbGYudWkubWFwX2dyYXBoaWNzX3ZpZXcuc2V0U2NlbmUoc2VsZi5tYXBfZ3JhcGhpY3Nfc2NlbmUpCiAgICBzZWxmLm1hcF9ncmFwaGljc19zY2VuZS5jbGlja2VkLmNvbm5lY3Qoc2VsZi5tYXBfY2xpY2tlZCkKICAgIAogICAgc2VsZi5iZzJfdGlsZXNldF9ncmFwaGljc19zY2VuZSA9IFRpbGVzZXRHcmFwaGljc1NjZW5lKHNlbGYpCiAgICBzZWxmLnVpLmJnMl90aWxlc2V0X2dyYXBoaWNzX3ZpZXcuc2V0U2NlbmUoc2VsZi5iZzJfdGlsZXNldF9ncmFwaGljc19zY2VuZSkKICAgIHNlbGYuYmcxX3RpbGVzZXRfZ3JhcGhpY3Nfc2NlbmUgPSBUaWxlc2V0R3JhcGhpY3NTY2VuZShzZWxmKQogICAgc2VsZi51aS5iZzFfdGlsZXNldF9ncmFwaGljc192aWV3LnNldFNjZW5lKHNlbGYuYmcxX3RpbGVzZXRfZ3JhcGhpY3Nfc2NlbmUpCiAgICBzZWxmLnNlbGVjdGVkX3RpbGVzZXRfZ3JhcGhpY3Nfc2NlbmUgPSBOb25lCiAgICAKICAgIHNlbGYudWkucmlnaHRfc2lkZWJhci5jdXJyZW50Q2hhbmdlZC5jb25uZWN0KHNlbGYudXBkYXRlX2VkaXRfbW9kZV9ieV9jdXJyZW50X3RhYikKICAgIFFTaG9ydGN1dChRS2V5U2VxdWVuY2UoUXQuS2V5X0YxKSwgc2VsZiwgc2VsZi5lbnRlcl9lbnRpdHlfZWRpdF9tb2RlKQogICAgUVNob3J0Y3V0KFFLZXlTZXF1ZW5jZShRdC5LZXlfRjIpLCBzZWxmLCBzZWxmLmVudGVyX2JnMl9sYXllcl9lZGl0X21vZGUpCiAgICBRU2hvcnRjdXQoUUtleVNlcXVlbmNlKFF0"}}]
["eb94c873ec7a3ca822c33863c8bf78fcb92a3f0f-2","eb94c873ec7a3ca822c33863c8bf78fcb92a3f0f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlbnNvcmZsb3dfaHViIGFzIGh1YgppbXBvcnQgdGVuc29yZmxvdyBhcyB0Zgpmcm9tIHRlbnNvcmZsb3dfaHViIGltcG9ydCB0Zl92MSwgdGVuc29yX2luZm8KZnJvbSB0ZW5zb3JmbG93X2h1Yi5uYXRpdmVfbW9kdWxlIGltcG9ydCBfTW9kdWxlSW1wbApmcm9tIHRlbnNvcmZsb3dfaHViLm1ldGFfZ3JhcGhfbGliIGltcG9ydCBwcnVuZV9mZWVkX21hcCwgcHJ1bmVfdW51c2VkX25vZGVzCgoKZGVmIGltcG9ydF9tb2R1bGUocGF0aD0nL2dob21lL2ZlbmdybC9jb21wYXJlX2dhbi9iaWdiaWdhbicpOgogICAgbSA9IGh1Yi5Nb2R1bGUoJ2JpZ2JpZ2FuJykKICAgIHJldHVybiBtCgoKZGVmIG1ha2VfcHJ1bmUoaW5wdXRfdGVuc29ycyk6CiAgICBtID0gaW1wb3J0X21vZHVsZSgpCiAgICAjIGRlZiBtb2RlbF9mbigpOgogICAgIyAgICAgeiA9IHRmLnBsYWNlaG9sZGVyKGR0eXBlPXRmLmZsb2F0MzIpCiAgICAjICAgICB4ID0gbSh6LCBzaWduYXR1cmU9J2dlbmVyYXRlJywgYXNfZGljdD1UcnVlKVsnZGVmYXVsdCddCiAgICAjICAgICBodWIuYWRkX3NpZ25hdHVyZShzaWduYXR1cmUsIHosIHgpCiAgICAjIHRhZ3NfYW5kX2FyZ3MgPSBbKHsndHJhaW4nfSwge30pLCAoc2V0KCksIHt9KV0KICAgICMgZHJvcF9jb2xsZWN0aW9ucyA9IFt2IGZvciB2IGluIHRmLmdsb2JhbF92YXJpYWJsZXMoKSBpZiAnR2VuZXJhdG9yJyBub3QgaW4gdi5uYW1lXQogICAgIyBwID0gaHViLmNyZWF0ZV9tb2R1bGVfc3BlYyhtb2RlbF9mbiwgdGFnc19hbmRfYXJncywgZHJvcF9jb2xsZWN0aW9ucykKICAgIGdyYXBoID0gbS5faW1wbC5fbWV0YV9ncmFwaAogICAgc2lnbmF0dXJlX2RlZiA9IG0uX3NwZWMuX2dldF9zaWduYXR1cmVfZGVmKCdnZW5lcmF0ZScsIHsndHJhaW4nfSkKICAgIGluZmVlZF9tYXAgPSB0ZW5zb3JfaW5mby5idWlsZF9pbnB1dF9tYXAoc2lnbmF0dXJlX2RlZi5pbnB1dHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3RlbnNvcnMpCiAgICBwcnVuZV91bnVzZWRfbm9kZXMoZ3JhcGgsIHNpZ25hdHVyZV9kZWYpCiAgICBwcnVuZV9mZWVkX21hcChncmFwaCwgaW5mZWVkX21hcCkKICAgIHJldHVybiBtCgoKZGVmIGNyZWF0ZV9hcHBseV9ncmFwaChzZWxmLCBzaWduYXR1cmUsIGlucHV0X3RlbnNvcnMsIG5hbWUpOgogICAgIiIiU2VlIGBNb2R1bGVJbXBsLmNyZWF0ZV9hcHBseV9ncmFwaGAuIiIiCiAgICBzaWduYXR1cmVfZGVmID0gc2VsZi5fbWV0YV9ncmFwaC5zaWduYXR1cmVfZGVmLmdldChzaWduYXR1cmUpCiAgICBtZXRhX2dyYXBoID0gbWV0YV9ncmFwaF9wYjIuTWV0YUdyYXBoRGVmKCkKICAgIG1ldGFfZ3JhcGguQ29weUZyb20oc2VsZi5fbWV0YV9ncmFwaCkKICAgIGFwcGx5X2dyYXBoID0gdGZfdjEuZ2V0X2RlZmF1bHRfZ3JhcGgoKQogICAgaW5mZWVkX21hcCA9IHRlbnNvcl9pbmZvLmJ1aWxkX2lucHV0X21hcChzaWduYXR1cmVfZGVmLmlucHV0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfdGVuc29ycykKCiAgICAjIEJ1aWxkIGEgaW5wdXQgbWFwIHRvIGZlZWQgd2hlbiBpbXBvcnRpbmcgdGhlIGFwcGx5LWdyYXBoIGJ5IGF1Z21lbnRpbmcgdGhlCiAgICAjIHN0YXRlX21hcCB3aXRoIHRoZSBpbnB1dCBhcmdzLiBUaGlzIGFsbG93cyBhbiBpbnB1dCB0byBvdmVycmlkZSBhIHRlbnNvcgogICAgIyBmcm9tIHRoZSBzdGF0ZS1ncmFwaC4KICAgIGZlZWRfbWFwID0gZGljdChzZWxmLl9zdGF0ZV9tYXApCiAgICAjIElmIHdlIGFyZSBhcHBseWluZyB0aGUgbW9kdWxlIGluIGEgZnVuY3Rpb24gd2l0aCBhIFRQVVJlcGxpY2F0ZUNvbnRleHQsIHdlCiAgICAjIG11c3QgY2FwdHVyZSB0aGUgc3RhdGUgdGVuc29ycyBpbiBnZW5lcmF0aW5nIG91ciBmZWVkbWFwIGFuZCBwcnVuZSBvdXQKICAgICMgYXNzaWduIG9wcy4gRnVuY3Rpb24gZ3JhcGggc2VtYW50aWNzIGFyZSBkaWZmZXJlbnQgaW4gdGhhdCBhbGwgb3BzIGFyZQogICAgIyBleGVjdXRlZCByZWdhcmRsZXNzIG9mIGRlcGVuZGVuY3kuCiAgICAjIFRPRE8oYi8xMTI1NzUwMDYpOiBUaGUgZm9sbG93aW5nIGFkZHMgZnVuY3Rpb25hbGl0eSBvZiBmdW5jdGlvbiBjYWxsCiAgICAjIHdpdGhpbiBhIFRQVSBjb250ZXh0LiBXb3JrIHRvIGdlbmVyYWxpemUgdGhpcyBmb3IgYWxsIGZ1bmN0aW9uIGNhbGxzIGlzCiAgICAjIG9uZ29pbmcuCiAgICBpZiBGYWxzZToKICAgICAgZm9yIGssIHYgaW4gc2VsZi5fc3RhdGVfbWFwLml0ZW1zKCk6CiAgICAgICAgZmVlZF9tYXBba10gPSBhcHBseV9ncmFwaC5jYXB0dXJlKHYpCiAgICAgIG1ldGFfZ3JhcGhfbGliLnBydW5lX3VudXNlZF9ub2RlcyhtZXRhX2dyYXBoLCBzaWduYXR1cmVfZGVmKQogICAgICAjIEFmdGVyIHdlIHBydW5lIHRoZSBtZXRhZ3JhcGggZGVmLCB3ZSBtaWdodCBuZWVkIHRvIHBydW5lIGF3YXkKICAgICAgIyBpbmZlZWRzIHdoaWNoIG5vIGxvbmdlciBleGlzdC4KICAgICAgbWV0YV9ncmFwaF9saWIucHJ1bmVfZmVlZF9tYXAobWV0YV9ncmFwaCwgaW5mZWVkX21hcCkKICAgIGVsaWYgYXBwbHlfZ3JhcGguYnVpbGRpbmdfZnVuY3Rpb246CiAgICAgICMgTG9nIGEgd2FybmluZyBpZiBhIHVzZXIgaXMgdXNpbmcgYSBodWIgbW9kdWxlIGluIGZ1bmN0aW9uIGdyYXBoLgogICAgICAjIFRoaXMgaXMgb25seSBleHBlY3RlZCB0byB3b3JrIGlmIHRoZSBmdW5jdGlvbiBncmFwaCBpcyBwcnVuZWQgYW5kCiAgICAgICMgbm90IGFsbCBub2RlcyBhcmUgZXhlY3V0ZWQuCiAgICAgICMKICAgICAgIyBFLmcuIGl0IGNvdWxkIHdvcmsgd2l0aCAidGYuY29tcGF0LnYxLndyYXBfZnVuY3Rpb24iLCBidXQgaXQgd2lsbCBub3QKICAgICAgIyB3b3JrIHdpdGggZGVmdW4sIERhdGFzZXQubWFwX2ZuLCBldGMuLi4KICAgICAgbG9nZ2luZy53YXJuaW5nKCJVc2luZyBgaHViLk1vZHVsZWAgd2hpbGUgYnVpbGRpbmcgYSBmdW5jdGlvbjogJXMuIFRoaXMgIgogICAgICAgICAgICAgICAgICAgICAgImNhbiBsZWFkIHRvIGVycm9ycyBpZiB0aGUgZnVuY3Rpb24gaXMgbm90IHBydW5lZC4iLAogICAgICAgICAgICAgICAgICAgICAgYXBwbHlfZ3JhcGgubmFtZSkKICAgIG1ldGFfZ3JhcGhfbGliLnBydW5lX3VudXNlZF9ub2RlcyhtZXRhX2dyYXBoLCBzaWduYXR1cmVfZGVmKQogICAgIyBBZnRlciB3ZSBwcnVuZSB0aGUgbWV0YWdyYXBoIGRlZiwgd2UgbWlnaHQgbmVlZCB0byBwcnVuZSBhd2F5CiAgICAjIGluZmVlZHMgd2hpY2ggbm8gbG9uZ2VyIGV4aXN0LgogICAgbWV0YV9ncmFwaF9saWIucHJ1bmVfZmVlZF9tYXAobWV0YV9ncmFwaCwgaW5mZWVkX21hcCkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICMgQXMgc3RhdGUgb3BzIGluIHRoZSBhcHBseSBncmFwaCBhcmUgdW51c2VkLCByZXBsYWNlIHRoZW0gd2l0aCBQbGFjZWhvbGRlcnMKICAgICMgc28gdGhhdCBpbiBhIGhlaXJhcmNoaWNhbCBpbnN0YW50aWF0aW9uLCBhcHBseV9ncmFwaCBzdGF0ZSBvcHMgYXJlCiAgICAjIGlnbm9yZWQuCiAgICByZXBsYWNlX2FwcGx5X3N0YXRlKAo8fGZpbV9lbmR8Pg=="]
["bad2f9e0aae0bf79cfb3f52eb55421b181f10a42-2","bad2f9e0aae0bf79cfb3f52eb55421b181f10a42","PHxmaW1fcHJlZml4fD4KIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KVGhpcyBtb2R1bGUgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIG1vZGVsIGEgJ3VzZXInIGluIFN5ZnQuClRoZSBsb2dpYyBmb3IgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uYWxpdGllcyB0byBpbnRlcmFjdCB3aXRoIHRoYXQgJ3VzZXInIGNhbiBhbHNvIGJlIGZvdW5kIGhlcmUuCiIiIgo8fGZpbV9lbmR8Pg=="]
["03653f2e3e8202d2367362414827908c9f0d2c38-2","03653f2e3e8202d2367362414827908c9f0d2c38","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gZG90ZW52IGltcG9ydCBsb2FkX2RvdGVudgpmcm9tIHRlbGV0aG9uLnN5bmMgaW1wb3J0IFRlbGVncmFtQ2xpZW50CmZyb20gdGVsZXRob24uc2Vzc2lvbnMgaW1wb3J0IFN0cmluZ1Nlc3Npb24KCmxvYWRfZG90ZW52KCkKCmFwaV9pZCA9IG9zLmdldGVudignYXBpX2lkJykKPHxmaW1faG9sZXw+CiMgICAgIHByaW50KCJZb3VyIHNlc3Npb24gc3RyaW5nIGlzOiIsIGNsaWVudC5zZXNzaW9uLnNhdmUoKSkKCmNsaWVudCA9IFRlbGVncmFtQ2xpZW50KHNlc3Npb25fc3RyLCBhcGlfaWQ9YXBpX2lkLCBhcGlfaGFzaD1hcGlfaGFzaCkKCgphc3luYyBkZWYgcHJpbnRfbWVzc2FnZSgpOgogICAgbWVzc2FnZSA9IGF3YWl0IGNsaWVudC5nZXRfbWVzc2FnZXMoJ1RlbGV0aG9uU25pcHBldHMnLCBpZHM9MykKICAgIHByaW50KCJNRVNTQUdFOiIsIGVuZD0iXG4tLS0tLS0tXG4iKQogICAgcHJpbnQobWVzc2FnZS50ZXh0KQoKCndpdGggY2xpZW50OgogICAgY2xpZW50Lmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByaW50X21lc3NhZ2UoKSkKPHxmaW1fc3VmZml4fD4KYXBpX2hhc2ggPSBvcy5nZXRlbnYoJ2FwaV9oYXNoJykKc2Vzc2lvbl9zdHIgPSBvcy5nZXRlbnYoJ3Nlc3Npb25fc3RyJykKCiMgd2l0aCBUZWxlZ3JhbUNsaWVudChTdHJpbmdTZXNzaW9uKCksIGFwaV9pZCwgYXBpX2hhc2gpIGFzIGNsaWVudDoKPHxmaW1fZW5kfD4="]
["ba33ca8de24691e90521ff6b1b6fb790455a0bfe-2","ba33ca8de24691e90521ff6b1b6fb790455a0bfe","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgogICAgICAgIAogICAgICAgIGlmIGxlbihzdG9uZXMpID09IDE6CiAgICAgICAgICAgIHJldHVybiB0cnVlCiAgICAgICAgCiAgICAgICAgaWYgc3RvbmVzWzFdICE9IHN0b25lc1swXSArIDE6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgIAogICAgICAgIGZvciBpLCB2IGluIGVudW1lcmF0ZShzdG9uZXMpOgogICAgICAgICAgICBtcFt2XSA9IGkKICAgICAgICAKICAgICAgICAKICAgICAgICBkZWYgZihpLCBrKToKICAgICAgICAgICAgaWYgaSA9PSBsZW4oc3RvbmVzKS0xOgogICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoaSwgaykgaW4gZDoKICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICBkLmFkZCgoaSxrKSkKICAgICAgICAgICAgCiAgICAgICAgICAgIHAgPSBzdG9uZXNbaV0KICAgICAgICAgICAgCiAgICAgICAgICAgIGZvciBqIGluIFstMSwgMCwgMV06CiAgICAgICAgICAgICAgICBfcCA9IHAgKyBrICsgagogICAgICAgICAgICAgICAgaWYgX3AgaW4gbXA6CiAgICAgICAgICAgICAgICAgICAgaWYgZihtcFtfcF0sIGsgKyBqKToKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgICAgCiAgICAgICAgcmV0dXJuIGYoMSwxKQo8fGZpbV9zdWZmaXh8PgpjbGFzcyBTb2x1dGlvbjoKICAgIGRlZiBjYW5Dcm9zcyhzZWxmLCBzdG9uZXM6IExpc3RbaW50XSkgLT4gYm9vbDoKICAgICAgICBkID0gc2V0KCkKICAgICAgICBtcCA9IHt9Cjx8ZmltX2VuZHw+"]
["d6e5c237036da6dc3251adf6d652ce836eb434d9-1","d6e5c237036da6dc3251adf6d652ce836eb434d9","PHxmaW1fcHJlZml4fD4KCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KCmltcG9ydCBudW1weSBhcyBucAoKZnJvbSBweWN1ZGEgaW1wb3J0IGNvbXBpbGVyLCBncHVhcnJheQppbXBvcnQgcHljdWRhLmF1dG9pbml0CmltcG9ydCBweWN1ZGEuZHJpdmVyCgppbXBvcnQgbG9nZ2luZywgd2FybmluZ3MKIyBpZ25vcmUgbnZjYyBkZXByZWNhdGlvbiB3YXJuaW5ncwp3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIFVzZXJXYXJuaW5nKQoKZGVmIGdwdV9pbmZvKCk6CiAgICAjIHByaW50IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IEdQVQogICAgYXR0cnMgPSBweWN1ZGEuYXV0b2luaXQuZGV2aWNlLmdldF9hdHRyaWJ1dGVzKCkKICAgIGRldmF0dHIgPSBweWN1ZGEuZHJpdmVyLmRldmljZV9hdHRyaWJ1dGUKICAgIGJsb2NrZGltcyA9IChhdHRyc1tkZXZhdHRyLk1BWF9CTE9DS19ESU1fWF0sCiAgICAgICAgICAgICAgICAgYXR0cnNbZGV2YXR0ci5NQVhfQkxPQ0tfRElNX1ldLAogICAgICAgICAgICAgICAgIGF0dHJzW2RldmF0dHIuTUFYX0JMT0NLX0RJTV9aXSkKICAgIGdyaWRkaW1zID0gKGF0dHJzW2RldmF0dHIuTUFYX0dSSURfRElNX1hdLAogICAgICAgICAgICAgICAgYXR0cnNbZGV2YXR0ci5NQVhfR1JJRF9ESU1fWV0sCiAgICAgICAgICAgICAgICBhdHRyc1tkZXZhdHRyLk1BWF9HUklEX0RJTV9aXSkKICAgIGxvZ2dpbmcuZGVidWcoIk1BWF9CTE9DS19ESU09e2Jsb2NrZGltc30sICIgXAogICAgICAgICJNQVhfR1JJRF9ESU09e2dyaWRkaW1zfSwgTUFYX1RIUkVBRFNfUEVSX0JMT0NLPXttYXh0aHJlYWRzfSwgIiBcCiAgICAgICAgIlRPVEFMX0NPTlNUQU5UX01FTU9SWT17Y29uc3RfbWVtfSwgIiBcCiAgICAgICAgIk1BWF9TSEFSRURfTUVNT1JZX1BFUl9CTE9DSz17c2hhcmVkX21lbX0sICIgXAogICAgICAgICJNQVhfUkVHSVNURVJTX1BFUl9CTE9DSz17cmVnaXN0ZXJzfSwgIiBcCiAgICAgICAgIktFUk5FTF9FWEVDX1RJTUVPVVQ9e2tlcm5lbF90aW1lb3V0fSIuZm9ybWF0KAogICAgICAgIGJsb2NrZGltcz0ieCIuam9pbihtYXAoc3RyLGJsb2NrZGltcykpLAogICAgICAgIGdyaWRkaW1zPSJ4Ii5qb2luKG1hcChzdHIsZ3JpZGRpbXMpKSwKICAgICAgICBtYXh0aHJlYWRzPWF0dHJzW2RldmF0dHIuTUFYX1RIUkVBRFNfUEVSX0JMT0NLXSwKICAgICAgICBjb25zdF9tZW09YXR0cnNbZGV2YXR0ci5UT1RBTF9DT05TVEFOVF9NRU1PUlldLAogICAgICAgIHNoYXJlZF9tZW09YXR0cnNbZGV2YXR0ci5NQVhfU0hBUkVEX01FTU9SWV9QRVJfQkxPQ0tdLAogICAgICAgIHJlZ2lzdGVycz1hdHRyc1tkZXZhdHRyLk1BWF9SRUdJU1RFUlNfUEVSX0JMT0NLXSwKICAgICAgICBrZXJuZWxfdGltZW91dD1hdHRyc1tkZXZhdHRyLktFUk5FTF9FWEVDX1RJTUVPVVRdLAogICAgKSkKCmRlZiBwcmVwYXJlX2tlcm5lbHMoZmlsZXMsIHRlbXBsYXRlcywgY29uc3R2YXJzLCBibG9ja3ZhcnM9e30pOgogICAgIiIiIENvbXBpbGUgYW5kIHByZXBhcmUgQ1VEQSBrZXJuZWwgZnVuY3Rpb25zCgogICAgQXJnczoKICAgICAgICBmaWxlcyA6IGxpc3Qgb2YgY3VkYSBzb3VyY2UgZmlsZSBoYW5kbGVzCiAgICAgICAgdGVtcGxhdGVzIDogbGlzdCBvZiB0dXBsZXMgZGVzY3JpYmluZyB0aGUga2VybmVscwogICAgICAgIGNvbnN0dmFycyA6IGRpY3Qgb2YgcmVhZG9ubHkgdmFyaWFibGVzCiAgICAgICAgYmxvY2t2YXJzIDogZGljdCBvZiBibG9ja3ZhcnMgd2hvc2UgZGVzY3JpcHRpb24gd2lsbCBiZSBpbmNsdWRlZAogICAgICAgICAgICAgICAgICAgIGluIHRoZSBwcmVhbWJsZSBhcyBwcmVwcm9jZXNzb3IgbWFjcm9zCiAgICBSZXR1cm5zOgogICAgICAgIGtlcm5lbHMgOiBkaWN0IG9mIGV4ZWN1dGFibGUgQ1VEQSBrZXJuZWxzCiAgICAiIiIKICAgIHByZWFtYmxlLCBjb25zdHZhcnMgPSBwcmVwYXJlX3ZhcnMoY29uc3R2YXJzLCBibG9ja3ZhcnMpCiAgICBrZXJuZWxzX2NvZGUgPSBwcmVhbWJsZQogICAgZm9yIGYgaW4gZmlsZXM6CiAgICAgICAga2VybmVsc19jb2RlICs9IGYucmVhZCgpLmRlY29kZSgidXRmLTgiKQoKICAgIG1vZCA9IGNvbXBpbGVyLlNvdXJjZU1vZHVsZShrZXJuZWxzX2NvZGUpCiAgICBrZXJuZWxzID0ge30KICAgIGZvciBkIGluIHRlbXBsYXRlczoKICAgICAgICBrZXJuZWxzW2RbMF1dID0gcHJlcGFyZV9rZXJuZWxmdW4obW9kLCAqZCkKCiAgICBmb3IgbmFtZSwgdmFsIGluIGNvbnN0dmFycy5pdGVtcygpOgogICAgICAgIGNvbnN0X3B0ciwgc2l6ZV9pbl9ieXRlcyA9IG1vZC5nZXRfZ2xvYmFsKG5hbWUpCiAgICAgICAgcHljdWRhLmRyaXZlci5tZW1jcHlfaHRvZChjb25zdF9wdHIsIHZhbCkKICAgICAgICAjIFdBUk5JTkc6IFRoZSBncHVkYXRhIGFyZ3VtZW50IGluIGdwdWFycmF5LkdQVUFycmF5IHVzdWFsbHkgcmVxdWlyZXMgYQogICAgICAgICMgcHljdWRhLmRyaXZlci5EZXZpY2VBbGxvY2F0aW9uIGFuZCBjb25zdF9wdHIgaXMgYW4gaW50IGdlbmVyYXRlZCBmcm9tCiAgICAgICAgIyBjYXN0aW5nIGEgQ1VkZXZpY2VwdHIgdG8gYW4gaW50LgogICAgICAgICMgSG93ZXZlciwgc2luY2UgRGV2aWNlQWxsb2NhdGlvbiBpcyBhIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCBDVWRldmljZXB0cgogICAgICAgICMgKHRoYXQgZ2l2ZXMgYSBDVWRldmljZXB0ciB3aGVuIGNhc3QgdG8gYW4gaW50KSwgaXQgd29ya3MgbGlrZSB0aGlzLgogICAgICAgIGNvbnN0dmFyc1tuYW1lXSA9IGdwdWFycmF5LkdQVUFycmF5KHZhbC5zaGFwZSwgdmFsLmR0eXBlLCBncHVkYXRhPWNvbnN0X3B0cikKCiAgICByZXR1cm4ga2VybmVscwoKZGVmIHByZXBhcmVfa2VybmVsZnVuKG1vZCwgbmFtZSwgc2lnbmF0dXJlLCB0b3RhbGRpbSwgYmxvY2tkaW0pOgogICAgZ3JpZGRpbSA9IHR1cGxlKGludChucC5jZWlsKHQvYikpIGZvciB0LGIgaW4gemlwKHRvdGFsZGltLCBibG9ja2RpbSkpCiAgICBmdW5jID0gbW9kLmdldF9mdW5jdGlvbihuYW1lKQogICAgZnVuYy5wcmVwYXJlKHNpZ25hdHVyZSkKICAgIGRlZiBrZXJuZWxmdW4oKmFyZ3MpOgogICAgICAgIGdwdWFyZ3MgPSBbYS5ncHVkYXRhIGlmIHQgPT0gIlAiIGVsc2UgYSBmb3IgdCxhIGluIHppcChzaWduYXR1cmUsYXJncyldCiAgICAgICAgcmV0dXJuIGZ1bmMucHJlcGFyZWRfY2FsbChncmlkZGltLCBibG9ja2RpbSwgKmdwdWFyZ3MpCiAgICByZXR1cm4ga2VybmVsZnVuCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRlZiBwcmVwYXJlX3ZhcnMoY29uc3R2YXJzLCBibG9ja3ZhcnMpOgogICAgcHJlYW1ibGUgPSAiIgogICAgbmV3X2NvbnN0dmFycyA9IHt9Cgo8fGZpbV9lbmR8Pg=="]
["779759e39f017e279329aa172504dae17e024a41-3","779759e39f017e279329aa172504dae17e024a41","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKZnJvbSBQSUwgaW1wb3J0IEltYWdlCmZyb20gc2NpcHkgaW1wb3J0IG5kaW1hZ2UsbWlzYwppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBzeXMKaW1wb3J0IGl0ZXJ0b29scwoKZGVmIHBlcmltZXRlcl9wb2ludHMoZCxuLHR5cGUgPSAnaW50Jyk6CiAgICAiIiJSZXR1cm5zIG4gcG9pbnRzIGV2ZW5seSBzcGFjZWQgYWxvbmcgdGhlIHBlcmltZXRlciBvZiBhIGNpcmNsZSBvZiBkaWFtZXRlciBkIGNlbnRlcmVkIGF0IHRoZSBvcmlnaW4sCiAgICAgICBpZiB0eXBlID0gJ2ludCcgdGhlIGNvb3JkaW5hdGVzIGFyZSByb3VuZGVkIHRvIHRoZSBuZWFyZXMgaW50ZWdlciIiIgogICAgcmltcG9pbnRzeCA9IG5wLnNpbihucC5saW5zcGFjZSgwLDIqbnAucGksbnVtPW4sZW5kcG9pbnQgPSBGYWxzZSkpICsgMQogICAgcmltcG9pbnRzeSA9IG5wLmNvcyhucC5saW5zcGFjZSgwLDIqbnAucGksbnVtPW4sZW5kcG9pbnQgPSBGYWxzZSkpICsgMQogICAgcmltcG9pbnRzID0gKCgoZC0xKS8yKSkqbnAuYXJyYXkoW3JpbXBvaW50c3kscmltcG9pbnRzeF0pCiAgICBpZiB0eXBlID09ICdpbnQnOgogICAgICAgIHJpbXBvaW50cyA9IG5wLnJvdW5kKHJpbXBvaW50cykKICAgICAgICByaW1wb2ludHMgPSByaW1wb2ludHMuYXN0eXBlKGludCkKICAgIHJldHVybiByaW1wb2ludHMKCiMgUHJlcHJvY2Vzc2luZyBvZiB0aGUgaW1hZ2UKZGVmIGdldF9pbWFnZShmaWxlcGF0aCxzaXplKToKICAgICIiInJldHVybnMgdGhlIGltYWdlIHNwZWNpZmllZCBhcyBhIG51bXB5IGFycmF5IGluIGdyYXlzY2FsZQogICAgSW1hZ2VzIGNyb3BwZWQgdG8gc3F1YXJlcwogICAgIiIiCiAgICBpbWFnZSA9IEltYWdlLm9wZW4oZmlsZXBhdGgpCiAgICBuZXdpbWFnZSA9IGltYWdlLnJlc2l6ZSgoc2l6ZSxzaXplKSkuY29udmVydCgnTEEnKQogICAgcGl4ZWxzID0gbnAuYXNhcnJheShuZXdpbWFnZSxkdHlwZSA9IG5wLmZsb2F0MzIpWzosOiwwXQogICAgcmV0dXJuICBwaXhlbHMKCmRlZiBnZXRfZ3JhZGllbnQocGl4ZWxzLHByb2Nlc3NpbmcgPSAnbm9ybWFsaXplJyk6CiAgICAiIiJyZXR1cm5zIHRoZSBncmFkaWVudCBvZiBhbiBpbWFnZSwgYW5kIGRvZXMgYmFzaWMgcHJlcHJvY2Vzc2luZyIiIgogICAgaG9yZ3JhZGllbnQgPSBuZGltYWdlLnNvYmVsKHBpeGVscywgYXhpcyA9IDEpCiAgICB2ZXJncmFkaWVudCA9IG5kaW1hZ2Uuc29iZWwocGl4ZWxzLCBheGlzID0gMCkKICAgIGdyYWRpZW50ID0gIG5wLmFycmF5KCh2ZXJncmFkaWVudCxob3JncmFkaWVudCkpCgogICAgaWYgcHJvY2Vzc2luZyA9PSAnbm9ybWFsaXplJzoKICAgICAgICAiIiJOb3JtYWxpemluZyB0aGUgIGdyYWRpZW50IiIiCiAgICAgICAgZ3JhZG5vcm0gPSAwLjIqbnAubWF4KG5wLmxpbmFsZy5ub3JtKGdyYWRpZW50LGF4aXMgPSAtMSkpCiAgICAgICAgZ3JhZGllbnQgPSBncmFkaWVudCAvIGdyYWRub3JtCgogICAgcmV0dXJuIGdyYWRpZW50CgpkZWYgY29vcmRpbmF0ZV9tYXRyaXgobik6CiAgICAiIiJNYWtpbmcgYW4gYXJyYXkgb2YgY29vcmRpbmF0ZXMiIiIKICAgIHhjb29yZGluYXRlcyA9IG5wLnplcm9zKChuLG4pKQogICAgeGNvb3JkaW5hdGVzID0geGNvb3JkaW5hdGVzICsgbnAuYXJhbmdlKDAsd29ya3NpemUpICNicm9hZGNhc3RpbmcgdHJpY2sKICAgIHljb29yZGluYXRlcyA9IHhjb29yZGluYXRlcy5UCiAgICByZXR1cm4gbnAuYXJyYXkoW3ljb29yZGluYXRlcyx4Y29vcmRpbmF0ZXNdKQoKCmRlZiBsaW5lX2NvbnRyaWJ1dGlvbihwMSxwMixhbHBoYSA9IDEpOgogICAgIiIiT3V0cHV0cyB0aGUgbWF0cml4IHdpdGggd2l0aCB0byBhZGp1c3QgdGhlIGdyYWRpZW50IGFmdGVyIGFkZGluZyB0aGUgbGluZSBiZXR3ZWVuIHAxIGFuZCBwMiIiIgoKICAgIGFkanVzdCA9IG5wLnplcm9zKCh3b3Jrc2l6ZSx3b3Jrc2l6ZSwyKSkKCiAgICB4MSA9IHAxWzBdCiAgICB5MSA9IHAxWzFdCiAgICB4MiA9IHAyWzBdCiAgICB5MiA9IHAyWzFdCgogICAgY29vcmRpbmF0ZXMgPSBjb29yZGluYXRlX21hdHJpeCh3b3Jrc2l6ZSkKICAgIG51bWVyYXRvciA9IG5wLnN1bShucC5tdWx0aXBseShjb29yZGluYXRlcyxucC5yZXNoYXBlKG5wLmFycmF5KCgoeTIteTEsLSh4Mi14MSkpKSksKDIsMSwxKSkpLGF4aXMgPSAwKSArIHgyKnkxIC0geTIqeDEKICAgIGRpc3RfZnJvbV9saW5lID0gbnAuYWJzKG51bWVyYXRvcikgKiAoMS4wL25wLnNxcnQoKHkyLXkxKSoqMisoeDIteDEpKioyKSkKICAgIHhjb250cmlidXRpb24gPSAoeDIteDEpKigxLyhhbHBoYSpkaXN0X2Zyb21fbGluZSsxKSkKICAgIHljb250cmlidXRpb24gPSAoeTIteTEpKigxLyhhbHBoYSpkaXN0X2Zyb21fbGluZSsxKSkKCgogICAgcmV0dXJuIG5wLmFycmF5KCgteWNvbnRyaWJ1dGlvbix4Y29udHJpYnV0aW9uKSkvbnAuc3FydCgoeTIteTEpKioyKyh4Mi14MSkqKjIpCgpkZWYgZGlzY3JldGVfbGluZShwMSxwMixhbGcgPSAnaG9tZWJyZXcnKToKCiAgICAiIiIKICAgIEdpdmVuIHR3byBwb2ludHMgaW4gYSBncmlkLCByZXR1cm5zIGEgbGlzdCBvZiBhbGwgZ3JpZCBjZWxscyBtZWV0aW5nIHRoZSBsaW5lIGJldHdlZW4gdGhlIHBvaW50cwogICAgIiIiCiAgICBpZiBhbGc9PSdob21lYnJldyc6CiAgICAgICAgbnVtcGl4ZWxzID0gYWJzKHAyWzBdIC0gcDFbMF0pICsgYWJzKHAyWzFdIC0gcDFbMV0pICsgMSAjVGF4aWNhcCBtZXRyaWMgZGlzdGFuY2UKCiAgICAgICAgeGxpbmUgPSBucC5yaW50KG5wLmxpbnNwYWNlKHAxWzBdLHAyWzBdLG51bXBpeGVscykpLmFzdHlwZShpbnQpCiAgICAgICAgeWxpbmUgPSBucC5yaW50KG5wLmxpbnNwYWNlKHAxWzFdLHAyWzFdLG51bXBpeGVscykpLmFzdHlwZShpbnQpCgogICAgICAgIHJldHVybiBucC5hcnJheShbeGxpbmUseWxpbmVdKQoKICAgIGVsaWYgYWxnID09ICdCcmVzZW5oYW0nOgogICAgICAgIHJhaXNlIEV4Y2VwdGlvbgogICAgZWxpZiBhbGcgPT0gJ1d1JzoKICAgICAgICByYWlzZSBFeGNlcHRpb24KCgpkZWYgbGluZWxvc3MoZW5kcG9pbnRzLGdyYWRpZW50KToKICAgICIiIlJldHVybiB0aGUgbG9zcyBhc3NpZ25lZCB0byB0aGUgbGluZSBiZXR3ZWVuIHRoZSB0d28gcG9pbnRzIiIiCiAgICBsID0gZGlzY3JldGVfbGluZShlbmRwb2ludHNbMF0sZW5kcG9pbnRzWzFdKQogICAgZGlyZWN0aW9uID0gZW5kcG9pbnRzWzFdLWVuZHBvaW50c1swXQogICAgZHBlcnAgPSBucC5hcnJheSgoLWRpcmVjdGlvblsxXSxkaXJlY3Rpb25bMF0pKSAjUGVycGVuZGljdWxhciB2ZWN0b3IgdG8gdGhlIGRpcmVjdGlvbgogICAgZHBlcnAgPSBkcGVycC9ucC5saW5hbGcubm9ybShkcGVycCkKICAgIGxwb2ludHMgPSBncmFkaWVudFs6LGxbMF0sbFsxXV0KCiAgICByZXR1cm4gLW5wLnN1bShucC5hYnMobnAuZG90KGRwZXJwLGxwb2ludHMpKSkKCgpkZWYgc2hvd19uX2Jlc3RfbGluZXMobGluZXMsY3V0b2ZmKToKICAgIGxvc3NlcyA9IG5wLmFycmF5KGxpc3QobWFwKGxhbWJkYSBsIDogbGluZWxvc3MobCxncmFkaWVudCksbGluZXMpKSkKCiAgICBkcmF3bGluZXNpbmRpY2VzID0gbnAuYXJncGFydGl0aW9uKGxvc3NlcyxjdXRvZmYpWzpjdXRvZmZdCgogICAgZm9yIGkgaW4gcmFuZ2UoMCxjdXRvZmYpOgogICAgICAgIGxpbmUgPSBsaW5lc1tkcmF3bGluZXNpbmRpY2VzW2ldXQogICAgICAgIGxpbmVwaXhlbHMgPSBkaXNjcmV0ZV9saW5lKGxpbmVbMF0sbGluZVsxXSkKICAgICAgICBvdXRwaXhlbHNbbGluZXBpeGVsc1swXSxsaW5lcGl4ZWxzWzFdXSA9IDAKCgogICAgb3V0aW1hZ2UgPSBJbWFnZS5mcm9tYXJyYXkob3V0cGl4ZWxzKQogICAgb3V0aW1hZ2Uuc2hvdygpCgoKZGVmIGNsaXBfYXRfemVybyhNLE4pOgogICAgIiIiTSxOIGFyZSB0d28gbWF0cmljZXMgb2YgdmVjdG9ycywgcmV0dXJucyBhIG1hdHJpeCB3aGljaCBpcyBNIGlmIE0sTiBoYXZlIHBvc2l0aXZlIGRvdCBwcm9kdWN0LCBhbmQgMCBvdGhlcndpc2UiIiIKICAgIGRvdHByb2QgPSBucC5zdW0obnAubXVsdGlwbHkoTSxOKSxheGlzID0gMCkKICAgIGlmIChucC5hbnkobnAubG9naWNhbF9hbmQoZG90cHJvZCA8PSAwLCBucC5hbGwoTSA9PSBucC5hcnJheSgoMCwwKSkucmVzaGFwZSgoMiwxLDEpKSwgYXhpcz0wKSkpKToKICAgICAgICBwcmludCgnY2xpcHBpbmcgaGFwcGVuZWQnKQogICAgcmV0dXJuIG5wLndoZXJlKGRvdHByb2Q8PTAsbnAuemVyb3NfbGlrZShNKSxNKQoKZGVmIGl0ZXJhdGVfbl9iZXN0X2xpbmVzKGxpbmVzLG4scGxvdCA9IEZhbHNlKToKICAgIGdyYWRpZW50ID0gZ2V0X2dyYWRpZW50KHBpeGVscykKICAgIGZvciBpIGluIHJhbmdlKDAsbik6CiAgICAgICAgbG9zc2VzID0gbnAuYXJyYXkobGlzdChtYXAobGFtYmRhIGwgOiBsaW5lbG9zcyhsLGdyYWRpZW50KSxsaW5lcykpKQogICAgICAgIGN1cnJlbnRpbmRleCA9IG5wLmFyZ21pbihsb3NzZXMpCiAgICAgICAgcHJpbnQoJ0luZGV4IG9mIGxpbmU6JykKICAgICAgICBwcmludChjdXJyZW50aW5kZXgpCiAgICAgICAgY3VycmVudGxpbmVlbmRzID0gbGluZXNbY3VycmVudGluZGV4XQogICAgICAgIGN1cnJlbnRsaW5lID0gZGlzY3JldGVfbGluZShjdXJyZW50bGluZWVuZHNbMF0sY3VycmVudGxpbmVlbmRzWzFdKQogICAgICAgIGN1cnJlbnRkaXJlY3Rpb24gPSBjdXJyZW50bGluZWVuZHNbMV0tY3VycmVudGxpbmVlbmRzWzBdCiAgICAgICAgY3VycmVudGRpcmVjdGlvbiA9IGN1cnJlbnRkaXJlY3Rpb24vbnAubGluYWxnLm5vcm0oY3VycmVudGRpcmVjdGlvbikKICAgICAgICBvdXRwaXhlbHNbY3VycmVudGxpbmVbMF0sY3VycmVudGxpbmVbMV1dID0gMAoKICAgICAgICBjb250cmlidXRpb24gPSAwLjUqbGluZV9jb250cmlidXRpb24oY3VycmVudGxpbmVlbmRzWzBdLGN1cnJlbnRsaW5lZW5kc1sxXSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICAgICBzdWJ0cmFjdGdyYWQgPSBncmFkaWVudCAtIGNvbnRyaWJ1dGlvbgogICAgICAgIGFkZGdyYWQgPSBncmFkaWVudCArIGNvbnRyaWJ1dGlvbgoKPHxmaW1fZW5kfD4="]
["77f5a3a967cba089ccec3ded125547e85140ebbf-2","77f5a3a967cba089ccec3ded125547e85140ebbf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG5sdGsKaW1wb3J0IGxvZ2dpbmcKCmZyb20gc2tsZWFybi5mZWF0dXJlX2V4dHJhY3Rpb24udGV4dCBpbXBvcnQgVGZpZGZWZWN0b3JpemVyCmZyb20gc2tsZWFybi5tZXRyaWNzLnBhaXJ3aXNlIGltcG9ydCBjb3NpbmVfc2ltaWxhcml0eQpmcm9tIHR5cGluZyBpbXBvcnQgRGljdCwgT3B0aW9uYWwKZnJvbSBudW1weSBpbXBvcnQgZGVsZXRlIGFzIG5wX2RlbGV0ZSwgbWF4IGFzIG5wX21heCwgZmlsbF9kaWFnb25hbAoKCmRlZiBpZF9maWx0ZXIoY3VyX2RpY3Q6IERpY3Rbc3RyLCBkaWN0XSwgcHJldl9kaWN0OiBEaWN0W3N0ciwgZGljdF0sIHByb3ZpZGVyKToKICAgICIiIiBGaWx0ZXIgZHVwbGljYXRlcyBvbiBqb2IgaWQgcGVyIHByb3ZpZGVyLgoKICAgICAgICBBcmdzOgogICAgICAgICAgICBjdXJfZGljdDogdG9kYXkncyBqb2Igc2NyYXBlIGRpY3QKICAgICAgICAgICAgcHJldl9kaWN0OiB0aGUgZXhpc3RpbmcgbWFzdGVyIGxpc3Qgam9iIGRpY3QKICAgICAgICAgICAgcHJvdmlkZXI6IGpvYiBib2FyZCB1c2VkCgogICAgIiIiCiAgICAjIGdldCBqb2IgaWRzIGZyb20gc2NyYXBlIGFuZCBtYXN0ZXIgbGlzdCBieSBwcm92aWRlciBhcyBsaXN0cwogICAgY3VyX2pvYl9pZHMgPSBbam9iWydpZCddIGZvciBqb2IgaW4gY3VyX2RpY3QudmFsdWVzKCldCiAgICBwcmV2X2pvYl9pZHMgPSBbam9iWydpZCddIGZvciBqb2IgaW4gcHJldl9kaWN0LnZhbHVlcygpCiAgICAgICAgICAgICAgICAgICAgaWYgam9iWydwcm92aWRlciddID09IHByb3ZpZGVyXQoKICAgICMgcG9wIGR1cGxpY2F0ZSBqb2IgaWRzIGZyb20gY3VycmVudCBzY3JhcGUKICAgIGR1cGxpY2F0ZV9pZHMgPSBbY3VyX2RpY3QucG9wKGpvYl9pZClbJ2lkJ10gZm9yIGpvYl9pZCBpbiBjdXJfam9iX2lkcwogICAgICAgICAgICAgICAgICAgICBpZiBqb2JfaWQgaW4gcHJldl9qb2JfaWRzXQoKICAgICMgbG9nIGR1cGxpY2F0ZSBpZHMKICAgIGxvZ2dpbmcuaW5mbyhmJ2ZvdW5kIHtsZW4oY3VyX2RpY3Qua2V5cygpKX0gdW5pcXVlIGpvYiBpZHMgYW5kICcKICAgICAgICAgICAgICAgICBmJ3tsZW4oZHVwbGljYXRlX2lkcyl9IGR1cGxpY2F0ZXMgZnJvbSB7cHJvdmlkZXJ9JykKCgpkZWYgdGZpZGZfZmlsdGVyKGN1cl9kaWN0OiBEaWN0W3N0ciwgZGljdF0sCiAgICAgICAgICAgICAgICAgcHJldl9kaWN0OiBPcHRpb25hbFtEaWN0W3N0ciwgZGljdF1dID0gTm9uZSwKICAgICAgICAgICAgICAgICBtYXhfc2ltaWxhcml0eTogZmxvYXQgPSAwLjc1KToKICAgICIiIiBGaXQgYSB0ZmlkZiB2ZWN0b3JpemVyIHRvIGEgY29ycHVzIG9mIGFsbCBsaXN0aW5nJ3MgdGV4dC4KCiAgICAgICAgQXJnczoKICAgICAgICAgICAgY3VyX2RpY3Q6IHRvZGF5J3Mgam9iIHNjcmFwZSBkaWN0CiAgICAgICAgICAgIHByZXZfZGljdDogdGhlIGV4aXN0aW5nIG1hc3RlciBsaXN0IGpvYiBkaWN0CiAgICAgICAgICAgIG1heF9zaW1pbGFyaXR5OiB0aHJlc2hvbGQgYWJvdmUgd2hpY2ggYmx1cmIgc2ltaWxhcml0eSA9IGR1cGxpY2F0ZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIGxpc3Qgb2YgZHVwbGljYXRlIGpvYiBpZHMgd2hpY2ggd2VyZSByZW1vdmVkIGZyb20gY3VyX2RpY3QKICAgICIiIgo8fGZpbV9lbmR8Pg=="]
["babf833078d5e0028a344707ea7ea4b21d62e7ee-1","babf833078d5e0028a344707ea7ea4b21d62e7ee","PHxmaW1fcHJlZml4fD4KIiIiVW5pdCB0ZXN0IG1vZHVsZSBmb3IgdGhlIFBvcnRmb2xpbyBPYmplY3QuCgpXaWxsIHBlcmZvcm0gYW4gaW5zdGFuY2UgdGVzdCB0byBtYWtlIHN1cmUgaXQgY3JlYXRlcyBpdC4gQWRkaXRpb25hbGx5LAppdCB3aWxsIHRlc3QgZGlmZmVyZW50IHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgb2YgdGhlIG9iamVjdC4KIiIiCgppbXBvcnQgdW5pdHRlc3QKZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKZnJvbSBjb25maWdwYXJzZXIgaW1wb3J0IENvbmZpZ1BhcnNlcgoKZnJvbSBweXJvYm90LnBvcnRmb2xpbyBpbXBvcnQgUG9ydGZvbGlvCmZyb20gdGQuY2xpZW50IGltcG9ydCBURENsaWVudAoKCmNsYXNzIFB5Um9ib3RQb3J0Zm9saW9UZXN0KFRlc3RDYXNlKToKCiAgICAiIiJXaWxsIHBlcmZvcm0gYSB1bml0IHRlc3QgZm9yIHRoZSBQb3J0Zm9saW8gb2JqZWN0LiIiIgoKICAgIGRlZiBzZXRVcChzZWxmKSAtPiBOb25lOgogICAgICAgICIiIlNldCB1cCB0aGUgUG9ydGZvbGlvLiIiIgoKICAgICAgICBzZWxmLnBvcnRmb2xpbyA9IFBvcnRmb2xpbygpCiAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQoKICAgICAgICAgICAgICAgICMgR3JhYiBjb25maWd1cmF0aW9uIHZhbHVlcy4KICAgICAgICBjb25maWcgPSBDb25maWdQYXJzZXIoKQogICAgICAgIGNvbmZpZy5yZWFkKCdjb25maWdzL2NvbmZpZy5pbmknKSAgICAgICAKCiAgICAgICAgQ0xJRU5UX0lEID0gY29uZmlnLmdldCgnbWFpbicsICdDTElFTlRfSUQnKQo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLnRkX2NsaWVudCA9IFREQ2xpZW50KAogICAgICAgICAgICBjbGllbnRfaWQ9Q0xJRU5UX0lELAogICAgICAgICAgICByZWRpcmVjdF91cmk9UkVESVJFQ1RfVVJJLAogICAgICAgICAgICBjcmVkZW50aWFsc19wYXRoPUNSRURFTlRJQUxTX1BBVEgKICAgICAgICApCgogICAgICAgIHNlbGYudGRfY2xpZW50LmxvZ2luKCkKCiAgICBkZWYgdGVzdF9jcmVhdGVfcG9ydG9mb2xpbyhzZWxmKToKICAgICAgICAiIiJNYWtlIHN1cmUgaXQncyBhIFBvcnRmb2xpby4iIiIKCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYucG9ydGZvbGlvLCBQb3J0Zm9saW8pCgogICAgZGVmIHRlc3RfdGRfY2xpZW50X3Byb3BlcnR5KHNlbGYpOgogICAgICAgICIiIlRlc3QgdGhlIFREIENsaWVudCBwcm9wZXJ0eS4iIiIKCiAgICAgICAgIyBTaG91bGQgYmUgTm9uZSBpZiB3YXNuJ3QgaW5pdGFsaXplZCBmcm9tIHRoZSBQeVJvYm90LgogICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYucG9ydGZvbGlvLnRkX2NsaWVudCkKICAgIAogICAgZGVmIHRlc3Rfc3RvY2tfZnJhbWVfcHJvcGVydHkoc2VsZik6CiAgICAgICAgIiIiVGVzdCB0aGUgU3RvY2sgRnJhbWUgcHJvcGVydHkuIiIiCgogICAgICAgICMgU2hvdWxkIGJlIE5vbmUgaWYgd2Fzbid0IGluaXRhbGl6ZWQgZnJvbSB0aGUgUHlSb2JvdC4KICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLnBvcnRmb2xpby5zdG9ja19mcmFtZSkgICAgICAgIAoKICAgIGRlZiB0ZXN0X2hpc3RvcmljYWxfcHJpY2VzX3Byb3BlcnR5KHNlbGYpOgogICAgICAgICIiIlRlc3QgdGhlIEhpc3RvcmljYWwgUHJpY2VzIHByb3BlcnR5LiIiIgoKICAgICAgICAjIFNob3VsZCBiZSBGYWxzZSBpZiB3YXNuJ3QgaW5pdGFsaXplZCBmcm9tIHRoZSBQeVJvYm90LgogICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wb3J0Zm9saW8uaGlzdG9yaWNhbF9wcmljZXMpICAKCiAgICBkZWYgdGVzdF9hZGRfcG9zaXRpb24oc2VsZik6CiAgICAgICAgIiIiVGVzdCBhZGRpbmcgYSBzaW5nbGUgcG9zaXRpb24gdG8gdGhlIHBvcnRmb2xpby4iIiIKCiAgICAgICAgbmV3X3Bvc2l0aW9uID0gc2VsZi5wb3J0Zm9saW8uYWRkX3Bvc2l0aW9uKAogICAgICAgICAgICBzeW1ib2w9J01TRlQnLAogICAgICAgICAgICBhc3NldF90eXBlPSdlcXVpdHknLAogICAgICAgICAgICBxdWFudGl0eT0xMCwKICAgICAgICAgICAgcHVyY2hhc2VfcHJpY2U9My4wMCwKICAgICAgICAgICAgcHVyY2hhc2VfZGF0ZT0nMjAyMC0wMS0zMScKICAgICAgICApCgogICAgICAgIGNvcnJlY3RfcG9zaXRpb24gPSB7CiAgICAgICAgICAgICdzeW1ib2wnOiAnTVNGVCcsCiAgICAgICAgICAgICdhc3NldF90eXBlJzogJ2VxdWl0eScsCiAgICAgICAgICAgICdvd25lcnNoaXBfc3RhdHVzJzogVHJ1ZSwgCiAgICAgICAgICAgICdxdWFudGl0eSc6IDEwLCAKICAgICAgICAgICAgJ3B1cmNoYXNlX3ByaWNlJzogMy4wMCwKICAgICAgICAgICAgJ3B1cmNoYXNlX2RhdGUnOiAnMjAyMC0wMS0zMScKICAgICAgICB9CgogICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKG5ld19wb3NpdGlvbiwgY29ycmVjdF9wb3NpdGlvbikKCiAgICBkZWYgdGVzdF9hZGRfcG9zaXRpb25fZGVmYXVsdF9hcmd1bWVudHMoc2VsZik6CiAgICAgICAgIiIiVGVzdCBhZGRpbmcgYSBzaW5nbGUgcG9zaXRpb24gdG8gdGhlIHBvcnRmb2xpbywgbm8gZGF0ZS4iIiIKCiAgICAgICAgbmV3X3Bvc2l0aW9uID0gc2VsZi5wb3J0Zm9saW8uYWRkX3Bvc2l0aW9uKAogICAgICAgICAgICBzeW1ib2w9J01TRlQnLAogICAgICAgICAgICBhc3NldF90eXBlPSdlcXVpdHknCiAgICAgICAgKQoKICAgICAgICBjb3JyZWN0X3Bvc2l0aW9uID0gewogICAgICAgICAgICAnc3ltYm9sJzogJ01TRlQnLAogICAgICAgICAgICAnYXNzZXRfdHlwZSc6ICdlcXVpdHknLAogICAgICAgICAgICAnb3duZXJzaGlwX3N0YXR1cyc6IEZhbHNlLCAKICAgICAgICAgICAgJ3F1YW50aXR5JzogMCwgCiAgICAgICAgICAgICdwdXJjaGFzZV9wcmljZSc6IDAuMDAsCiAgICAgICAgICAgICdwdXJjaGFzZV9kYXRlJzogTm9uZQogICAgICAgIH0KCiAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwobmV3X3Bvc2l0aW9uLCBjb3JyZWN0X3Bvc2l0aW9uKQoKICAgIGRlZiB0ZXN0X2RlbGV0ZV9leGlzdGluZ19wb3NpdGlvbihzZWxmKToKICAgICAgICAiIiJUZXN0IGRlbGV0aW5nIGFuIGV4aXNpdGluZyBwb3NpdGlvbi4iIiIKCiAgICAgICAgc2VsZi5wb3J0Zm9saW8uYWRkX3Bvc2l0aW9uKAogICAgICAgICAgICBzeW1ib2w9J01TRlQnLAogICAgICAgICAgICBhc3NldF90eXBlPSdlcXVpdHknLAogICAgICAgICAgICBxdWFudGl0eT0xMCwKICAgICAgICAgICAgcHVyY2hhc2VfcHJpY2U9My4wMCwKICAgICAgICAgICAgcHVyY2hhc2VfZGF0ZT0nMjAyMC0wMS0zMScKICAgICAgICApCgogICAgICAgIGRlbGV0ZV9zdGF0dXMgPSBzZWxmLnBvcnRmb2xpby5yZW1vdmVfcG9zaXRpb24oc3ltYm9sPSdNU0ZUJykKICAgICAgICBjb3JyZWN0X3N0YXR1cyA9IChUcnVlLCAnTVNGVCB3YXMgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQuJykKCiAgICAgICAgc2VsZi5hc3NlcnRUdXBsZUVxdWFsKGRlbGV0ZV9zdGF0dXMsIGNvcnJlY3Rfc3RhdHVzKQoKICAgIGRlZiB0ZXN0X2RlbGV0ZV9ub25fZXhpc3RpbmdfcG9zaXRpb24oc2VsZik6CiAgICAgICAgIiIiVGVzdCBkZWxldGluZyBhIG5vbi1leGlzaXRpbmcgcG9zaXRpb24uIiIiCgogICAgICAgIGRlbGV0ZV9zdGF0dXMgPSBzZWxmLnBvcnRmb2xpby5yZW1vdmVfcG9zaXRpb24oc3ltYm9sPSdBQVBMJykKICAgICAgICBjb3JyZWN0X3N0YXR1cyA9IChGYWxzZSwgJ0FBUEwgZGlkIG5vdCBleGlzdCBpbiB0aGUgcG9yZm9saW8uJykKCiAgICAgICAgc2VsZi5hc3NlcnRUdXBsZUVxdWFsKGRlbGV0ZV9zdGF0dXMsIGNvcnJlY3Rfc3RhdHVzKQogICAgCiAgICBkZWYgdGVzdF9pbl9wb3J0Zm9saW9fZXhpc2l0bmcoc2VsZik6CiAgICAgICAgIiIiQ2hlY2tzIHRvIHNlZSBpZiBhbiBleGlzaXRpbmcgcG9zaXRpb24gZXhpc3RzLiIiIgoKICAgICAgICBzZWxmLnBvcnRmb2xpby5hZGRfcG9zaXRpb24oCiAgICAgICAgICAgIHN5bWJvbD0nTVNGVCcsCiAgICAgICAgICAgIGFzc2V0X3R5cGU9J2VxdWl0eScsCiAgICAgICAgICAgIHF1YW50aXR5PTEwLAogICAgICAgICAgICBwdXJjaGFzZV9wcmljZT0zLjAwLAogICAgICAgICAgICBwdXJjaGFzZV9kYXRlPScyMDIwLTAxLTMxJwogICAgICAgICkKCiAgICAgICAgaW5fcG9ydGZvbGlvX2ZsYWcgPSBzZWxmLnBvcnRmb2xpby5pbl9wb3J0Zm9saW8oc3ltYm9sPSdNU0ZUJykKICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5fcG9ydGZvbGlvX2ZsYWcpCiAgICAKICAgIGRlZiB0ZXN0X2luX3BvcnRmb2xpb19ub25fZXhpc2l0bmcoc2VsZik6CiAgICAgICAgIiIiQ2hlY2tzIHRvIHNlZSBpZiBhIG5vbiBleGlzaXRpbmcgcG9zaXRpb24gZXhpc3RzLiIiIgoKICAgICAgICBpbl9wb3J0Zm9saW9fZmxhZyA9IHNlbGYucG9ydGZvbGlvLmluX3BvcnRmb2xpbyhzeW1ib2w9J0FBUEwnKQogICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fcG9ydGZvbGlvX2ZsYWcpCgogICAgZGVmIHRlc3RfaXNfcHJvZml0YWJsZShzZWxmKToKICAgICAgICAiIiJDaGVja3MgdG8gc2VlIGlmIGEgcG9zaXRpb24gaXMgcHJvZml0YWJsZS4iIiIKCiAgICAgICAgIyBBZGQgYSBwb3NpdGlvbi4KICAgICAgICBzZWxmLnBvcnRmb2xpby5hZGRfcG9zaXRpb24oCiAgICAgICAgICAgIHN5bWJvbD0nTVNGVCcsCiAgICAgICAgICAgIGFzc2V0X3R5cGU9J2VxdWl0eScsCiAgICAgICAgICAgIHF1YW50aXR5PTEwLAogICAgICAgICAgICBwdXJjaGFzZV9wcmljZT0zLjAwLAogICAgICAgICAgICBwdXJjaGFzZV9kYXRlPScyMDIwLTAxLTMxJwogICAgICAgICkKCiAgICAgICAgIyBUZXN0IGZvciBiZWluZyBQcm9maXRhYmxlLgogICAgICAgIGlzX3Byb2ZpdGFibGUgPSBzZWxmLnBvcnRmb2xpby5pc19wcm9maXRhYmxlKAogICAgICAgICAgICBzeW1ib2w9J01TRlQnLAogICAgICAgICAgICBjdXJyZW50X3ByaWNlPTUuMDAKICAgICAgICAKICAgICAgICApCgogICAgICAgICMgVGVzdCBmb3Igbm90IGJlaW5nIHByb2ZpdGFibGUuCiAgICAgICAgaXNfbm90X3Byb2ZpdGFibGUgPSBzZWxmLnBvcnRmb2xpby5pc19wcm9maXRhYmxlKAogICAgICAgICAgICBzeW1ib2w9J01TRlQnLAogICAgICAgICAgICBjdXJyZW50X3ByaWNlPTEuMDAKICAgICAgICApCiAgICAgICAgCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX3Byb2ZpdGFibGUpCiAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc19ub3RfcHJvZml0YWJsZSkKCiAgICBkZWYgdGVzdF9wcm9qZWN0ZWRfbWFya2V0X3ZhbHVlKHNlbGYpOgogICAgICAgICIiIlRlc3RzIHRoZSBnZW5lcmF0aW9uIG9mIGEgbWFya2V0IHZhbHVlIHN1bW1hcnksIGZvciBhbGwgb2YgdGhlIHBvc2l0aW9ucy4iIiIKCiAgICAgICAgIyBBZGQgYSBwb3NpdGlvbi4KICAgICAgICBzZWxmLnBvcnRmb2xpby5hZGRfcG9zaXRpb24oCiAgICAgICAgICAgIHN5bWJvbD0nTVNGVCcsCiAgICAgICAgICAgIGFzc2V0X3R5cGU9J2VxdWl0eScsCiAgICAgICAgICAgIHF1YW50aXR5PTEwLAogICAgICAgICAgICBwdXJjaGFzZV9wcmljZT0zLjAwLAogICAgICAgICAgICBwdXJjaGFzZV9kYXRlPScyMDIwLTAxLTMxJwogICAgICAgICkKCiAgICAgICAgY29ycmVjdF9kaWN0ID0gewogICAgICAgICAgICAnTVNGVCc6IHsKICAgICAgICAgICAgICAgICdjdXJyZW50X3ByaWNlJzogNS4wLAogICAgICAgICAgICAgICAgJ2lzX3Byb2ZpdGFibGUnOiBUcnVlLAogICAgICAgICAgICAgICAgJ3B1cmNoYXNlX3ByaWNlJzogMy4wLAogICAgICAgICAgICAgICAgJ3F1YW50aXR5JzogMTAsCiAgICAgICAgICAgICAgICAndG90YWxfaW52ZXN0ZWRfY2FwaXRhbCc6IDMwLjAsCiAgICAgICAgICAgICAgICAndG90YWxfbG9zc19vcl9nYWluXyQnOiAyMC4wLAogICAgICAgICAgICAgICAgJ3RvdGFsX2xvc3Nfb3JfZ2Fpbl8lJzogMC42NjY3LAogICAgICAgICAgICAgICAgJ3RvdGFsX21hcmtldF92YWx1ZSc6IDUwLjAKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ3RvdGFsJzogewogICAgICAgICAgICAgICAgJ251bWJlcl9vZl9icmVha2V2ZW5fcG9zaXRpb25zJzogMCwKICAgICAgICAgICAgICAgICdudW1iZXJfb2Zfbm9uX3Byb2ZpdGFibGVfcG9zaXRpb25zJzogMCwKICAgICAgICAgICAgICAgICdudW1iZXJfb2ZfcHJvZml0YWJsZV9wb3NpdGlvbnMnOiAxLAogICAgICAgICAgICAgICAgJ3RvdGFsX2ludmVzdGVkX2NhcGl0YWwnOiAzMC4wLAogICAgICAgICAgICAgICAgJ3RvdGFsX21hcmtldF92YWx1ZSc6IDUwLjAsCiAgICAgICAgICAgICAgICAndG90YWxfcG9zaXRpb25zJzogMSwKICAgICAgICAgICAgICAgICd0b3RhbF9wcm9maXRfb3JfbG9zcyc6IDIwLjAKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcG9ydGZvbGlvX3N1bW1hcnkgPSBzZWxmLnBvcnRmb2xpby5wcm9qZWN0ZWRfbWFya2V0X3ZhbHVlKGN1cnJlbnRfcHJpY2VzPXsnTVNGVCc6eydsYXN0UHJpY2UnOjUuMH19KQogICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKGNvcnJlY3RfZGljdCwgcG9ydGZvbGlvX3N1bW1hcnkpCgogICAgZGVmIHRlc3RfZ3JhYl9oaXN0b3JpY2FsX3ByaWNlcyhzZWxmKToKICAgICAgICBwYXNzCgogICAgZGVmIHRlc3RfcG9ydGZvbGlvX3N1bW1hcnkoc2VsZik6CiAgICAgICAgIiIiVGVzdHMgdGhlIGdlbmVyYXRpb24gb2YgYSBwb3J0Zm9saW8gc3VtbWFyeSwgZm9yIGFsbCBvZiB0aGUgcG9zaXRpb25zLiIiIgoKICAgICAgICAjIEFkZCBhIHBvc2l0aW9uLgogICAgICAgIHNlbGYucG9ydGZvbGlvLmFkZF9wb3NpdGlvbigKICAgICAgICAgICAgc3ltYm9sPSdNU0ZUJywKICAgICAgICAgICAgYXNzZXRfdHlwZT0nZXF1aXR5JywKICAgICAgICAgICAgcXVhbnRpdHk9MTAsCiAgICAgICAgICAgIHB1cmNoYXNlX3ByaWNlPTMuMDAsCiAgICAgICAgICAgIHB1cmNoYXNlX2RhdGU9JzIwMjAtMDEtMzEnCiAgICAgICAgKQoKICAgICAgICBzZWxmLnBvcnRmb2xpby50ZF9jbGllbnQgPSBzZWxmLnRkX2NsaWVudAoKICAgICAgICBjb3JyZWN0X2RpY3QgPSBbCiAgICAgICAgICAgICdwcm9qZWN0ZWRfbWFya2V0X3ZhbHVlJywKICAgICAgICAgICAgJ3BvcnRmb2xpb193ZWlnaHRzJywKICAgICAgICAgICAgJ3BvcnRmb2xpb19yaXNrJwogICAgICAgIF0KCiAgICAgICAgY29ycmVjdF9kaWN0ID0gc2V0KGNvcnJlY3RfZGljdCkKCiAgICAgICAgc3VtbWFyeV9kaWN0ID0gc2VsZi5wb3J0Zm9saW8ucG9ydGZvbGlvX3N1bW1hcnkoKQoKICAgICAgICBzZWxmLmFzc2VydFRydWUoY29ycmVjdF9kaWN0Lmlzc3Vic2V0KHN1bW1hcnlfZGljdCkpICAgIAoKICAgIGRlZiB0ZXN0X293bmVyc2hpcF9zdGF0dXMoc2VsZik6CiAgICAgICAgIiIiVGVzdHMgZ2V0dGluZyBhbmQgc2V0dGluZyB0aGUgb3duZXJzaGlwIHN0YXR1cy4iIiIKCiAgICAgICAgIyBBZGQgYSBwb3NpdGlvbi4KICAgICAgICBzZWxmLnBvcnRmb2xpby5hZGRfcG9zaXRpb24oCiAgICAgICAgICAgIHN5bWJvbD0nTVNGVCcsCiAgICAgICAgICAgIGFzc2V0X3R5cGU9J2VxdWl0eScsCiAgICAgICAgICAgIHF1YW50aXR5PTEwLAogICAgICAgICAgICBwdXJjaGFzZV9wcmljZT0zLjAwLAogICAgICAgICAgICBwdXJjaGFzZV9kYXRlPScyMDIwLTAxLTMxJwogICAgICAgICkKCiAgICAgICAgIyBTaG91bGQgYmUgVHJ1ZSwgc2luY2UgYHB1cmNoYXNlX2RhdGVgIHdhcyBzZXQuCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucG9ydGZvbGlvLmdldF9vd25lcnNoaXBfc3RhdHVzKHN5bWJvbD0nTVNGVCcpKQoKICAgICAgICAjIFJlYXNzaWduIGl0LgogICAgICAgIHNlbGYucG9ydGZvbGlvLnNldF9vd25lcnNoaXBfc3RhdHVzKHN5bWJvbD0nTVNGVCcsIG93bmVyc2hpcD1GYWxzZSkKCiAgICAgICAgIyBTaG91bGQgYmUgRmFsc2UuCiAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnBvcnRmb2xpby5nZXRfb3duZXJzaGlwX3N0YXR1cyhzeW1ib2w9J01TRlQnKSkKCgogICAgZGVmIHRlYXJEb3duKHNlbGYpIC0+IE5vbmU6CiAgICAgICAgIiIiVGVhcmRvd24gdGhlIFBvcnRmb2xpbyBvYmplY3QuIiIiCgogICAgICAgIHNlbGYucG9ydGZvbGlvID0gTm9uZQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICB1bml0dGVzdC5tYWluKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICBSRURJUkVDVF9VUkkgPSBjb25maWcuZ2V0KCdtYWluJywgJ1JFRElSRUNUX1VSSScpCiAgICAgICAgQ1JFREVOVElBTFNfUEFUSCA9IGNvbmZpZy5nZXQoJ21haW4nLCAnSlNPTl9QQVRIJykKICAgICAgICBzZWxmLkFDQ09VTlRfTlVNQkVSID0gY29uZmlnLmdldCgnbWFpbicsICdBQ0NPVU5UX05VTUJFUicpCgo8fGZpbV9lbmR8Pg=="]
["30d115ae6fc7eb689df7c2014b976f7d6a7ab4fd-3","30d115ae6fc7eb689df7c2014b976f7d6a7ab4fd","PHxmaW1fcHJlZml4fD4KZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluLCBjb21iaW5hdGlvbnMKCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IHBhbmRhcyBhcyBwZAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKZGVmIHBvd2Vyc2V0KGl0ZXJhYmxlKToKICAgICIiInBvd2Vyc2V0KFsxLDIsM10pIC0tPiAoKSAoMSwpICgyLCkgKDMsKSAoMSwyKSAoMSwzKSAoMiwzKSAoMSwyLDMpCjx8ZmltX2VuZHw+"]
["ba7613a8b0738f6b59a6bc309e0b34bcdba1a38b-4","ba7613a8b0738f6b59a6bc309e0b34bcdba1a38b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IHRpbWUKCmltcG9ydCBmZWVkcGFyc2VyCmZyb20gZmxhc2sgaW1wb3J0IGFib3J0Cjx8ZmltX2hvbGV8Pgpmcm9tIGFmcHkubW9kZWxzLkpvYlBvc3QgaW1wb3J0IEpvYlBvc3QKZnJvbSBhZnB5Lm1vZGVscy5OZXdzRW50cnkgaW1wb3J0IE5ld3NFbnRyeQpmcm9tIGFmcHkgaW1wb3J0IGNvbmZpZwoKCnJzc19icCA9IEJsdWVwcmludCgicnNzIiwgX19uYW1lX18pCgoKQHJzc19icC5yb3V0ZSgiL2ZlZWQvPHR5cGU+L3Jzcy54bWwiKQpkZWYgZmVlZF9yc3ModHlwZSk6CiAgICBuYW1lID0gIiIKICAgIGVudHJpZXMgPSBbXQogICAgaWYgdHlwZSA9PSAiZW1wbG9pcyI6CiAgICAgICAgbmFtZSA9ICJFbXBsb2lzIgogICAgICAgIGVudHJpZXMgPSBKb2JQb3N0LnNlbGVjdCgpLndoZXJlKEpvYlBvc3Quc3RhdGUgPT0gInB1Ymxpc2hlZCIpCiAgICBlbGlmIHR5cGUgPT0gImFjdHVhbGl0ZXMiOgogICAgICAgIG5hbWUgPSAiQWN0dWFsaXTDqXMiCiAgICAgICAgZW50cmllcyA9IE5ld3NFbnRyeS5zZWxlY3QoKS53aGVyZShOZXdzRW50cnkuc3RhdGUgPT0gInB1Ymxpc2hlZCIpCiAgICBlbHNlOgogICAgICAgIGFib3J0KDQwNCkKICAgIHRpdGxlID0gZiJ7bmFtZX0gQUZQeS5vcmciCiAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKAogICAgICAgICJwYWdlcy9yc3MueG1sIiwKICAgICAgICBlbnRyaWVzPWVudHJpZXMsCiAgICAgICAgdGl0bGU9dGl0bGUsCiAgICAgICAgZGVzY3JpcHRpb249dGl0bGUsCiAgICAgICAgbGluaz11cmxfZm9yKCJyc3MuZmVlZF9yc3MiLCB0eXBlPXR5cGUsIF9leHRlcm5hbD1UcnVlKSwKICAgICAgICB0eXBlPXR5cGUsCiAgICApCjx8ZmltX3N1ZmZpeHw+CmZyb20gZmxhc2sgaW1wb3J0IEJsdWVwcmludApmcm9tIGZsYXNrIGltcG9ydCByZW5kZXJfdGVtcGxhdGUKZnJvbSBmbGFzayBpbXBvcnQgdXJsX2ZvcgoKPHxmaW1fZW5kfD4="]
["8ed79aab264b26af6161148b3b61bde233afb018-5","8ed79aab264b26af6161148b3b61bde233afb018","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBsb2dnaW5nCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IGdsb2IKaW1wb3J0IGpzb24KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBkYXRldGltZQppbXBvcnQgcHl0egppbXBvcnQgbWF0aApmcm9tIC5mdW5jdGlvbnMgaW1wb3J0IHBhcnNlX3N1cnZleXMKCgojIyMgV3JpdGUgYSBmdW5jdGlvbiB0aGF0IHN1YnNldHMgdGhlIGxpc3QgaWYgaXQgc3RhcnRzIHdpdGggbmFuIGFuZCBlbmRzIHdpdGggdHdvIG9mIHRoZSBzYW1lIGVsZW1lbnRzCmRlZiBzdWJzZXRfYW5zd2VyX2Nob2ljZXMoYW5zd2VyKToKICAgICIiIgogICAgSWYgYSB1c2VyIGNoYW5nZXMgdGhlaXIgYW5zd2VycyBtdWx0aXBsZSB0aW1lcywgYW4gaU9TIGRldmljZSB3aWxsIGhhdmUgcmVkdW5kYW50IGFuc3dlcnMgYXQgdGhlIGJlZ2lubmluZwogICAgYW5kIGVuZCBvZiB0aGUgbGlzdCwgc28gd2UgcmVtb3ZlIHRoZW0uCiAgICBBcmdzOgogICAgICAgIGFuc3dlcihsaXN0KToKICAgICAgICAgICAgTGlzdCBvZiBjaGFuZ2VkIGFuc3dlcnMKCiAgICBSZXR1cm5zOgogICAgICAgIGFuc3dlcihsaXN0KToKICAgICAgICAgICAgTGlzdCBvZiBjaGFuZ2VkIGFuc3dlcnMgd2l0aCByZWR1bmRhbnQgYW5zd2VycyByZW1vdmVkCiAgICAiIiIKICAgIGlmIGlzaW5zdGFuY2UoYW5zd2VyWzBdLCBmbG9hdCk6CiAgICAgICAgYW5zd2VyID0gYW5zd2VyWzE6XQoKICAgIGlmIGxlbihhbnN3ZXIpID4gMToKICAgICAgICBpZiBhbnN3ZXJbLTFdID09IGFuc3dlclstMl06CiAgICAgICAgICAgIGFuc3dlciA9IGFuc3dlcls6LTFdCgogICAgcmV0dXJuIGFuc3dlcgoKCiMgRnVuY3Rpb24gdGhhdCB0YWtlcyBhZ2dyZWdhdGVkIGRhdGEgYW5kIGFkZHMgbGlzdCBvZiBjaGFuZ2VkIGFuc3dlcnMgYW5kIGZpcnN0IGFuZCBsYXN0IHRpbWVzIGFuZCBhbnN3ZXJzCmRlZiBhZ2dfY2hhbmdlZF9hbnN3ZXJzKHN0dWR5X2RpciwgY29uZmlnX3BhdGgsIGFnZywgc3R1ZHlfdHo9Tm9uZSk6CiAgICAiIiIKICAgIEFyZ3M6CiAgICAgICAgY29uZmlnX3BhdGgoc3RyKToKICAgICAgICAgICAgRmlsZSBwYXRoIHRvIHN0dWR5IGNvbmZpZ3VyYXRpb24gZmlsZQogICAgICAgIHN0dWR5X2RpcihzdHIpOgogICAgICAgICAgICBGaWxlIHBhdGggdG8gc3R1ZHkgZGF0YQogICAgICAgIHN0dWR5X3R6KHN0cik6CiAgICAgICAgICAgIFRpbWV6b25lIG9mIHN0dWR5LiBUaGlzIGRlZmF1bHRzIHRvICdBbWVyaWNhL05ld19Zb3JrJwoKICAgIFJldHVybnM6CiAgICAgICAgYWdnKERhdGFGcmFtZSk6CiAgICAgICAgICAgIERhdGFmcmFtZSB3aXRoIGFnZ3JlZ2F0ZWQgZGF0YSwgb25lIGxpbmUgcGVyIHF1ZXN0aW9uIGFuc3dlcmVkLCB3aXRoIGNoYW5nZWQgYW5zd2VycyBhZ2dyZWdhdGVkIGludG8gYSBsaXN0LgogICAgICAgICAgICBUaGUgRmluYWwgYW5zd2VyIGlzIGluIHRoZSAnbGFzdF9hbnN3ZXInIGZpZWxkCiAgICAiIiIKCiAgICAjICAgICBhZ2cgPSBmdW5jdGlvbnMuYWdncmVnYXRlX3N1cnZleXNfY29uZmlnKHN0dWR5X2RpciwgY29uZmlnX3BhdGgsIHN0dWR5X3R6KQoKICAgIGNvbHMgPSBbJ3N1cnZleSBpZCcsICdiZWl3ZV9pZCcsICdxdWVzdGlvbiBpZCcsICdxdWVzdGlvbiB0ZXh0JywgJ3F1ZXN0aW9uIHR5cGUnLCAncXVlc3Rpb24gaW5kZXgnXQoKICAgIGFnZ1snbGFzdF9hbnN3ZXInXSA9IGFnZy5ncm91cGJ5KGNvbHMpLmFuc3dlci50cmFuc2Zvcm0oJ2xhc3QnKQogICAgIyBhZGQgaW4gYW4gYW5zd2VyIElEIGFuZCB0YWtlIHRoZSBsYXN0IG9mIHRoYXQgdG9vIHRvIGpvaW4gYmFjayBvbiB0aGUgdGltZQogICAgYWdnID0gYWdnLnJlc2V0X2luZGV4KCkuc2V0X2luZGV4KGNvbHMpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGFnZ1snYWxsX2Fuc3dlcnMnXSA9IGFnZy5ncm91cGJ5KGNvbHMpWydhbnN3ZXInXS5hcHBseShsYW1iZGEgeDogbGlzdCh4KSkKICAgICMgU3Vic2V0IGFuc3dlciBsaXN0cyBpZiBuZWVkZWQKICAgIGFnZ1snYWxsX2Fuc3dlcnMnXSA9IGFnZ1snYWxsX2Fuc3dlcnMnXS5hcHBseShsYW1iZGEgeDogeCBpZiBpc2luc3RhbmNlKHgsIGZsb2F0KSBlbHNlIHN1YnNldF9hbnN3ZXJfY2hvaWNlcyh4KSkKICAgIGFnZ1snbnVtX2Fuc3dlcnMnXSA9IGFnZ1snYWxsX2Fuc3dlcnMnXS5hcHBseShsYW1iZGEgeDogeCBpZiBpc2luc3RhbmNlKHgsIGZsb2F0KSBlbHNlIGxlbihsaXN0KHgpKSkKPHxmaW1fZW5kfD4="]
["cee9de851ef3fc069dd8a4c27d4080565016f57f-2","cee9de851ef3fc069dd8a4c27d4080565016f57f","PHxmaW1fcHJlZml4fD4KIyAhL3Vzci9sb2NhbC9weXRob24vYmluL3B5dGhvbgojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQojIChDKSBXdSBEb25nLCAyMDIwCiMgQWxsIHJpZ2h0cyByZXNlcnZlZAojIEBBdXRob3I6ICdXdSBEb25nIDx3dWRvbmdAZWFzdHd1LmNuPicKIyBAVGltZTogJzIwMjAtMDUtMDYgMDk6MzAnCiMgc3lzCmltcG9ydCBqc29uCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCgojIDNwCmZyb20gZmxhc2sgaW1wb3J0IG1ha2VfcmVzcG9uc2UsIEZsYXNrCmZyb20gcHJlX3JlcXVlc3QgaW1wb3J0IHByZSwgUnVsZQoKCmFwcCA9IEZsYXNrKF9fbmFtZV9fKQphcHAuY29uZmlnWyJURVNUSU5HIl0gPSBUcnVlCmNsaWVudCA9IGFwcC50ZXN0X2NsaWVudCgpCgoKZGVmIGpzb25fcmVzcChyZXN1bHQpOgo8fGZpbV9ob2xlfD4KCgphcmdzID0gewogICAgImJpcnRoZGF5IjogUnVsZSh0eXBlPWRhdGV0aW1lKSwKICAgICJoYXBweURheSI6IFJ1bGUodHlwZT1kYXRldGltZSwgZXFfa2V5PSJiaXJ0aGRheSIpLAogICAgInB1Ymxpc2hEYXRlIjogUnVsZSh0eXBlPWRhdGV0aW1lLCBmbXQ9IiVZLSVtLSVkIiwgZ3RlPWRhdGV0aW1lKDIwMTksIDExLCAxMSksIGx0ZT1kYXRldGltZSgyMDE5LCAxMiwgMTIpKQp9CgoKQGFwcC5yb3V0ZSgiL2RhdGV0aW1lIiwgbWV0aG9kcz1bIkdFVCIsICJQT1NUIl0pCkBwcmUuY2F0Y2goYXJncykKZGVmIGRhdGV0aW1lX2hhbmRsZXIocGFyYW1zKToKICAgIHJldHVybiBqc29uX3Jlc3Aoe30pCgoKY2xhc3MgVGVzdERhdGV0aW1lOgoKICAgIGRlZiB0ZXN0X2RhdGV0aW1lX3Ntb2tlKHNlbGYpOgogICAgICAgICIiIiDmtYvor5Xml7bpl7Tml6XmnJ/ovazmjaLog73lipsKICAgICAgICAiIiIKICAgICAgICByZXNwID0gYXBwLnRlc3RfY2xpZW50KCkucG9zdCgiL2RhdGV0aW1lIiwgZGF0YT17CiAgICAgICAgICAgICJiaXJ0aGRheSI6ICIyMDE5LTAxLTAxIDExOjEyOjEzIiwKICAgICAgICAgICAgInB1Ymxpc2hEYXRlIjogIjIwMTktMTEtMTgiLAogICAgICAgICAgICAiaGFwcHlEYXkiOiAiMjAxOS0wMS0wMSAxMToxMjoxMyIKICAgICAgICB9KQoKICAgICAgICBhc3NlcnQgcmVzcC5qc29uID09IHt9CgogICAgZGVmIHRlc3RfZGF0ZXRpbWVfNTkzKHNlbGYpOgogICAgICAgIHJlc3AgPSBhcHAudGVzdF9jbGllbnQoKS5wb3N0KCIvZGF0ZXRpbWUiLCBkYXRhPXsKICAgICAgICAgICAgImJpcnRoZGF5IjogIjIwMTktMDEtMDEgMTE6MTI6MTMiLAogICAgICAgICAgICAicHVibGlzaERhdGUiOiAiMjAxOS0xMS0xOCIsCiAgICAgICAgICAgICJoYXBweURheSI6ICIyMDE5LTAxLTAxIDExOjEyOjE1IgogICAgICAgIH0pCgogICAgICAgIGFzc2VydCByZXNwLmpzb25bInJlc3BDb2RlIl0gPT0gNTkzCgogICAgZGVmIHRlc3RfZGF0ZXRpbWVfNTcxKHNlbGYpOgogICAgICAgIHJlc3AgPSBhcHAudGVzdF9jbGllbnQoKS5wb3N0KCIvZGF0ZXRpbWUiLCBkYXRhPXsKICAgICAgICAgICAgImJpcnRoZGF5IjogIjIwMTktMDEtMDEgMTE6MTI6MTMiLAogICAgICAgICAgICAicHVibGlzaERhdGUiOiAiMjAxOS0xMS0xMCIsCiAgICAgICAgICAgICJoYXBweURheSI6ICIyMDE5LTAxLTAxIDExOjEyOjEzIgogICAgICAgIH0pCgogICAgICAgIGFzc2VydCByZXNwLmpzb25bInJlc3BDb2RlIl0gPT0gNTcxCgogICAgZGVmIHRlc3RfZGF0ZXRpbWVfNTczKHNlbGYpOgogICAgICAgIHJlc3AgPSBhcHAudGVzdF9jbGllbnQoKS5wb3N0KCIvZGF0ZXRpbWUiLCBkYXRhPXsKICAgICAgICAgICAgImJpcnRoZGF5IjogIjIwMTktMDEtMDEgMTE6MTI6MTMiLAogICAgICAgICAgICAicHVibGlzaERhdGUiOiAiMjAxOS0xMi0yMCIsCiAgICAgICAgICAgICJoYXBweURheSI6ICIyMDE5LTAxLTAxIDExOjEyOjEzIgogICAgICAgIH0pCgogICAgICAgIGFzc2VydCByZXNwLmpzb25bInJlc3BDb2RlIl0gPT0gNTczCjx8ZmltX3N1ZmZpeHw+CiAgICByZXN1bHQgPSBqc29uLmR1bXBzKHJlc3VsdCkKICAgIHJlc3AgPSBtYWtlX3Jlc3BvbnNlKHJlc3VsdCkKICAgIHJlc3AuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24vanNvbicKICAgIHJldHVybiByZXNwCjx8ZmltX2VuZHw+"]
["3b07ef48582a7968704590adf6b33d6f76911603-3","3b07ef48582a7968704590adf6b33d6f76911603","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCiMKIyBtYWtlIHJhbmRvbSBudWNsZW90aWRlIGRhdGEgYW5kIHNhdmUgaXQgYXMgRkFTVEEgYW5kIFBIWUxJUAoKaW1wb3J0IHJhbmRvbQppbXBvcnQgc3RyaW5nCgpkZWYgZ2V0TmFtZShsZW5ndGgpOgogICAgcmV0dXJuICIiLmpvaW4ocmFuZG9tLmNob2ljZXMoc3RyaW5nLmFzY2lpX2xvd2VyY2FzZSxrPWxlbmd0aCkpCjx8ZmltX2hvbGV8PgpkZWYgZ2V0RGF0YShuYW1lbGVuLG50YXhhLG5jaGFycyk6CiAgICBkYXRhID0ge30KICAgIG5hbWVzID0gW10KICAgIGZvciBpIGluIHJhbmdlKG50YXhhKToKICAgICAgICBuYW1lID0gZ2V0TmFtZShuYW1lbGVuKQogICAgICAgIHdoaWxlIG5hbWUgaW4gZGF0YS5rZXlzKCk6CiAgICAgICAgICAgIG5hbWUgPSBnZXROYW1lKG5hbWVsZW4pCiAgICAgICAgZGF0YVtuYW1lXSA9IGdldEFsaWdubWVudChuY2hhcnMpCiAgICByZXR1cm4gZGF0YQoKZGVmIG1ha2VGaWxlcyhkYXRhKToKICAgIHBoeWxpcCA9IFtdCiAgICBmYXN0YSA9IFtdCiAgICBvdXRsaW5lID0gIiIKICAgIHBoeWxpcC5hcHBlbmQoc3RyKGxlbihkYXRhKSkgKyAiICIgKyBzdHIobGVuKGRhdGFbbGlzdChkYXRhLmtleXMoKSlbMF1dKSkpCiAgICBmb3IgaSBpbiBzb3J0ZWQoZGF0YS5rZXlzKCkpOgogICAgICAgIGZhc3RhLmFwcGVuZCgiPiIgKyBpKQogICAgICAgIGZhc3RhLmFwcGVuZCgiIi5qb2luKGRhdGFbaV0pKQogICAgICAgIHBoeWxpcC5hcHBlbmQoaSArICIgIiArICIiLmpvaW4oZGF0YVtpXSkpCiAgICB3aXRoIG9wZW4oInNhbXBsZWRhdGEuZmFzdGEiLCAidyIpIGFzIGY6CiAgICAgICAgZm9yIGxpbmUgaW4gZmFzdGE6CiAgICAgICAgICAgIGYud3JpdGUoc3RyKGxpbmUpICsgIlxuIikKICAgICAgICBmLmNsb3NlKCkKICAgIHdpdGggb3Blbigic2FtcGxlZGF0YS5waHlsaXAiLCAidyIpIGFzIGY6CiAgICAgICAgZm9yIGxpbmUgaW4gcGh5bGlwOgogICAgICAgICAgICBmLndyaXRlKHN0cihsaW5lKSArICJcbiIpCiAgICAgICAgZi5jbG9zZSgpCgpyYW5kb20uc2VlZCgxMjM0KQoKbnRheGEgPSAyMApjaGFycyA9IDUwMApuYW1lbGVuID0gMwoKbWFrZUZpbGVzKGdldERhdGEobmFtZWxlbixudGF4YSxjaGFycykpCiNmb3IgaSBpbiByYW5nZShudGF4YSk6CiMgICAgcHJpbnQoZ2V0TmFtZShuYW1lbGVuKSkKIyAgICBwcmludChnZXRBbGlnbm1lbnQoY2hhcnMpKQo8fGZpbV9zdWZmaXh8PgoKZGVmIGdldEFsaWdubWVudChsZW5ndGgpOgogICAgcmV0dXJuIHJhbmRvbS5jaG9pY2VzKFsiQSIsIlQiLCJHIiwiQyJdLCBrPWxlbmd0aCkKCjx8ZmltX2VuZHw+"]
["690c4d5d7373b9082d84a67ae3655bb9d7f594df-1","690c4d5d7373b9082d84a67ae3655bb9d7f594df","PHxmaW1fcHJlZml4fD4KJycnCm7kuLrmraPlpJrovrnlvaIKJycnCmltcG9ydCBudW1weSBhcyBucApmcm9tIGRlY2ltYWwgaW1wb3J0ICoKCgojIOWGheWJsjbovrnlvaLvvIzmr4/mrKHpgJLlop426L65CmRlZiBwaShuKToKICAgIHkgPSBEZWNpbWFsKDEuMCkKICAgIGZvciBpIGluIHJhbmdlKG4pOgogICAgICAgIHBpID0gRGVjaW1hbCgzKSAqIERlY2ltYWwoMikgKiogRGVjaW1hbChpKSAqIERlY2ltYWwoeSkKICAgICAgICBwcmludCg2ICsgNiAqIGksICfovrnlvaIsIFBJOiAnLCBwaSkKICAgICAgICB5ID0gKERlY2ltYWwoMikgLSAoRGVjaW1hbCg0KSAtIHkgKiogRGVjaW1hbCgyKSkgKiogRGVjaW1hbCgwLjUpKSAqKiBEZWNpbWFsKDAuNSkKPHxmaW1faG9sZXw+CnByaW50KGdldGNvbnRleHQoKSkKZ2V0Y29udGV4dCgpLnByZWMgPSA1MCAgIyDmj5Dpq5jnsr7luqYKCnByaW50KHBpKDUwKSkKcHJpbnQobnAucGkpCjx8ZmltX3N1ZmZpeHw+CiAgICByZXR1cm4gcGkKCgo8fGZpbV9lbmR8Pg=="]
["d92e913501ea83c8bdf0541f90092a4befe4cb13-4","d92e913501ea83c8bdf0541f90092a4befe4cb13","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMS40IG9uIDIwMTktMTEtMDYgMjA6MDEKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ2FwaScsICcwMDI0X21vZGVsX3B1YmxpYycpLAogICAgXQoKICAgIG9wZXJhdGlvbnMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5BZGRGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0ncnVuX3BhcmFtZXRlcicsCiAgICAgICAgICAgIG5hbWU9J2Nhbl9ldm9sdmUnLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UpLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkFkZEZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdzY2VuYXJpb19wYXJhbScsCiAgICAgICAgICAgIG5hbWU9J3llYXInLAo8fGZpbV9lbmR8Pg=="]
["cfea13ae325813d94fca85066e88524ff325e71a-2","cfea13ae325813d94fca85066e88524ff325e71a","PHxmaW1fcHJlZml4fD4KUz1pbnB1dCgpCmw9bGVuKFMpCmFucz0wCmZvciBpIGluIHJhbmdlKGwpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBpZiBTW2ldPT0nRCc6CiAgICAgICAgYW5zKz1sLWktMQogICAgZWxzZToKICAgICAgICBhbnMrPWkKPHxmaW1fZW5kfD4="]
["c643f1146c155fd8bd5fc62509ecf603301ffd2e-2","c643f1146c155fd8bd5fc62509ecf603301ffd2e","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCgpmcm9tIGRqYW5nby50ZW1wbGF0ZS5yZXNwb25zZSBpbXBvcnQgVGVtcGxhdGVSZXNwb25zZQpmcm9tIGRqYW5nby5odHRwLnJlc3BvbnNlIGltcG9ydCAoCiAgICBIdHRwUmVzcG9uc2VCYWRSZXF1ZXN0LCBIdHRwUmVzcG9uc2VGb3JiaWRkZW4sIEh0dHBSZXNwb25zZU5vdEZvdW5kLAogICAgSHR0cFJlc3BvbnNlU2VydmVyRXJyb3IKKQoKCmNsYXNzIFRlbXBsYXRlQmFkUmVxdWVzdFJlc3BvbnNlKEh0dHBSZXNwb25zZUJhZFJlcXVlc3QsIFRlbXBsYXRlUmVzcG9uc2UpOgogICAgcGFzcwoKCmNsYXNzIFRlbXBsYXRlRm9yYmlkZGVuUmVzcG9uc2UoSHR0cFJlc3BvbnNlRm9yYmlkZGVuLCBUZW1wbGF0ZVJlc3BvbnNlKToKICAgIHBhc3MKCjx8ZmltX2hvbGV8PgoKY2xhc3MgVGVtcGxhdGVTZXJ2ZXJFcnJvclJlc3BvbnNlKEh0dHBSZXNwb25zZVNlcnZlckVycm9yLCBUZW1wbGF0ZVJlc3BvbnNlKToKICAgIHBhc3MKPHxmaW1fc3VmZml4fD4KCmNsYXNzIFRlbXBsYXRlTm90Rm91bmRSZXNwb25zZShIdHRwUmVzcG9uc2VOb3RGb3VuZCwgVGVtcGxhdGVSZXNwb25zZSk6CiAgICBwYXNzCgo8fGZpbV9lbmR8Pg=="]
["3002a3b95173e8c3de0103de111dcfe64dca8dfc-4","3002a3b95173e8c3de0103de111dcfe64dca8dfc","PHxmaW1fcHJlZml4fD4KZnJvbSAuaW5kaWNhdG9yIGltcG9ydCBJbmRpY2F0b3IgCmltcG9ydCBzeXMKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAoKIiIiCkNvbW1vZGl0eSBDaGFubmVsIEluZGV4IChDQ0kpIG92ZXJib3VnaHQgJiBvdmVyc29sZAotCkJ1eSB3aGVuIDE0LWRheSBDQ0kgZmFsbHMgYmVsb3cgLTEwMCBhbmQgdGhlbiByaXNlcyBiYWNrIGFib3ZlLCAKc2VsbCB3aGVuIGl0IHJpc2VzIGFib3ZlICsxMDAgYW5kIHRoZW4gZmFsbHMgYmFjayBiZWxvdy4KIiIiCmNsYXNzIGNjaU92ZXJib3VnaHRPdmVyc29sZChJbmRpY2F0b3IpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRmLCB3aW5kb3dfc2l6ZT0xNCk6CiAgICAgICAgc2VsZi5kZiA9IGRmCiAgICAgICAgc2VsZi53aW5kb3dfc2l6ZSA9IHdpbmRvd19zaXplCiAgICAgICAgc2VsZi5jb25zdGFudCA9IDAuMDE1CgogICAgIiIiCiAgICBGb3JtdWxhCiAgICAtCiAgICBDQ0kgPSAoVHlwaWNhbCBQcmljZSAtIHgtcGVyaW9kIFNNQSBvZiBUUCkgLyAoQ29uc3RhbnQgeCBNZWFuIERldmlhdGlvbikKCiAgICBUeXBpY2FsIFByaWNlIChUUCkgPSAoSGlnaCArIExvdyArIENsb3NlKSAvIDMKICAgIENvbnN0YW50ID0gMC4wMTUKICAgIAogICAgeDogV2luZG93IHNpemUgKGRlZmF1bHQgPSAyMCkKICAgIFNNQTogU2ltcGxlIE1vdmluZyBBdmVyYWdlCiAgICAiIiIKCiAgICBkZWYgcGxvdF9DQ0koc2VsZik6CiAgICAgICAgIyBJbml0aWFsaXplIHRoZSBwbG90IGZpZ3VyZQogICAgICAgIGZpZyA9IHBsdC5maWd1cmUoKQoKICAgICAgICAjIEFkZCBhIHN1YnBsb3QgYW5kIGxhYmVsIGZvciB5LWF4aXMKICAgICAgICBheDEgPSBmaWcuYWRkX3N1YnBsb3QoMTExLCAgeWxhYmVsPSdWYWx1ZScpCgogICAgICAgICMgUGxvdCBDQ0kKICAgICAgICBzZWxmLnNpZ25hbHNbJ0NDSSddLnBsb3QoYXg9YXgxLCBsdz0xLjIsIGxhYmVsPSdDb21tb2RpdHkgQ2hhbm5lbCBJbmRleCAoQ0NJKScpCiAgICAgICAgcGx0LmxlZ2VuZCgpCgogICAgICAgICMgUGxvdCB0aGUgYnV5IHNpZ25hbHMKICAgICAgICBheDEucGxvdChzZWxmLnNpZ25hbHMubG9jW3NlbGYuc2lnbmFscy5wb3NpdGlvbnMgPT0gMS4wXS5pbmRleCwKICAgICAgICAgICAgICAgICAgICBzZWxmLnNpZ25hbHNbJ0NDSSddW3NlbGYuc2lnbmFscy5wb3NpdGlvbnMgPT0gMS4wXSwKICAgICAgICAgICAgICAgICAgICAnXicsIG1hcmtlcnNpemU9MTAsIGNvbG9yPSdtJywgbGFiZWw9J0J1eSBzaWduYWwnKQoKICAgICAgICAjIFBsb3QgdGhlIHNlbGwgc2lnbmFscwogICAgICAgIGF4MS5wbG90KHNlbGYuc2lnbmFscy5sb2Nbc2VsZi5zaWduYWxzLnBvc2l0aW9ucyA9PSAtMS4wXS5pbmRleCwKICAgICAgICAgICAgICAgICAgICBzZWxmLnNpZ25hbHNbJ0NDSSddW3NlbGYuc2lnbmFscy5wb3NpdGlvbnMgPT0gLTEuMF0sCiAgICAgICAgICAgICAgICAgICAgJ3YnLCBtYXJrZXJzaXplPTEwLCBjb2xvcj0naycsIGxhYmVsPSdTZWxsIHNpZ25hbCcpCgogICAgICAgIHJldHVybiBmaWcKCiAgICBkZWYgZ2VuX3NpZ25hbHMoc2VsZik6CiAgICAgICAgc2lnbmFscyA9IHBkLkRhdGFGcmFtZShpbmRleD1zZWxmLmRmLmluZGV4KQogICAgICAgIHNpZ25hbHNbJ2xhYmVsJ10gPSAwLjAKICAgICAgICBzaWduYWxzWydzaWduYWwnXSA9IDAuMAoKICAgICAgICBzaWduYWxzWydUeXBpY2FsIHByaWNlJ10gPSAoCiAgICAgICAgICAgIHNlbGYuZGZbJ0hpZ2gnXSArIHNlbGYuZGZbJ0xvdyddICsgc2VsZi5kZlsnQ2xvc2UnXSkgLyAzCgogICAgICAgIHNpZ25hbHNbJ1NNQSddID0gc2lnbmFsc1snVHlwaWNhbCBwcmljZSddLnJvbGxpbmcoCiAgICAgICAgICAgIHdpbmRvdz1zZWxmLndpbmRvd19zaXplLCBtaW5fcGVyaW9kcz0xLCBjZW50ZXI9RmFsc2UpLm1lYW4oKQoKICAgICAgICBzaWduYWxzWydtZWFuX2RldmlhdGlvbiddID0gc2lnbmFsc1snVHlwaWNhbCBwcmljZSddLnJvbGxpbmcoCiAgICAgICAgICAgIHdpbmRvdz0yMCwgbWluX3BlcmlvZHM9MSwgY2VudGVyPUZhbHNlKS5zdGQoKQoKICAgICAgICBzaWduYWxzWydDQ0knXSA9IChzaWduYWxzWydUeXBpY2FsIHByaWNlJ10gLSBzaWduYWxzWydTTUEnXSkgLyBcCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAoc2VsZi5jb25zdGFudCAqIHNpZ25hbHNbJ21lYW5fZGV2aWF0aW9uJ10pCgogICAgICAgICMgTWFyayB3aGVuIENDSSBmYWxscyBiZWxvdyAtMTAwCiAgICAgICAgc2lnbmFscy5sb2Nbc2lnbmFsc1snQ0NJJ10gPCAtMTAwLCAnbGFiZWwnXSA9IC0xLjAKPHxmaW1fZW5kfD4="]
["692828db0a08640d95ce8b33164e753164d20e22-1","692828db0a08640d95ce8b33164e753164d20e22","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuZWRpdG9yIGltcG9ydCBDb2RlRWRpdG9yCmZyb20gLmhpZ2hsaWdodGVycyBpbXBvcnQgUHl0aG9uSGlnaGxpZ2h0ZXIKPHxmaW1fZW5kfD4="]
["8df501086d5ccb5c2a8488f0459dbdeddc982ca0-1","8df501086d5ccb5c2a8488f0459dbdeddc982ca0","PHxmaW1fcHJlZml4fD4KIyBBdXRob3I6IFhpbnNodW8gV2VuZwojIGVtYWlsOiB4aW5zaHVvLndlbmdAZ21haWwuY29tCmltcG9ydCBvcywgc3lzLCBudW1weSBhcyBucCwgcHl0ZXN0CgppbXBvcnQgaW5pdF9wYXRocwpmcm9tIHR5cGVfY2hlY2sgaW1wb3J0IGlzMmRwdHMsIGlzM2RwdHMsIGlzMmRwdHNhcnJheSwgaXMzZHB0c2FycmF5LCBpczJkcHRzYXJyYXlfb2NjbHVzaW9uLCBpczJkcHRzYXJyYXlfY29uZmlkZW5jZQoKZGVmIHRlc3RfaXMyZHB0cygpOgoJcHRzID0gWzEsIDNdCglhc3NlcnQgaXMyZHB0cyhwdHMpCglwdHMgPSAoMiwgNCkKCWFzc2VydCBpczJkcHRzKHB0cykKCXB0cyA9IG5wLmFycmF5KFszLCA2XSkKCWFzc2VydCBpczJkcHRzKHB0cykKCXB0cyA9IFsxLCAzLCAxMDBdCglhc3NlcnQgbm90IGlzMmRwdHMocHRzKQoJcHRzID0gKDIsIDQsIDMpCglhc3NlcnQgbm90IGlzMmRwdHMocHRzKQoJcHRzID0gbnAuYXJyYXkoWzNdKQoJYXNzZXJ0IG5vdCBpczJkcHRzKHB0cykKCmRlZiB0ZXN0X2lzMmRwdHNhcnJheSgpOgoJcHRzID0gbnAuYXJyYXkoW1sxLCAzXSwgWzIsIDRdXSkKCWFzc2VydCBpczJkcHRzYXJyYXkocHRzKQoJcHRzID0gbnAuYXJyYXkoW1sxLCAzLCA1XSwgWzIsIDQsIDNdXSkKCWFzc2VydCBpczJkcHRzYXJyYXkocHRzKQoJcHRzID0gbnAucmFuZG9tLnJhbmQoMiwgMCkKCWFzc2VydCBpczJkcHRzYXJyYXkocHRzKQoJcHRzID0gbnAucmFuZG9tLnJhbmQoMywgMCkKCWFzc2VydCBub3QgaXMyZHB0c2FycmF5KHB0cykKPHxmaW1faG9sZXw+CgpkZWYgdGVzdF9pczNkcHRzKCk6CglwdHMgPSBbMSwgMywgMl0KCWFzc2VydCBpczNkcHRzKHB0cykKCXB0cyA9ICgyLCA0LCAxKQoJYXNzZXJ0IGlzM2RwdHMocHRzKQoJcHRzID0gbnAuYXJyYXkoWzMsIDMsIDZdKQoJYXNzZXJ0IGlzM2RwdHMocHRzKQoJcHRzID0gWzEsIDNdCglhc3NlcnQgbm90IGlzM2RwdHMocHRzKQoJcHRzID0gKDMpCglhc3NlcnQgbm90IGlzM2RwdHMocHRzKQoJcHRzID0gbnAuYXJyYXkoWzNdKQoJYXNzZXJ0IG5vdCBpczNkcHRzKHB0cykKCmRlZiB0ZXN0X2lzM2RwdHNhcnJheSgpOgoJcHRzID0gbnAuYXJyYXkoW1sxLCAzXSwgWzIsIDRdLCBbMSwgMl1dKQoJYXNzZXJ0IGlzM2RwdHNhcnJheShwdHMpCglwdHMgPSBucC5yYW5kb20ucmFuZCgzLCAxMCkKCWFzc2VydCBpczNkcHRzYXJyYXkocHRzKQoJcHRzID0gbnAucmFuZG9tLnJhbmQoMywgMCkKCWFzc2VydCBpczNkcHRzYXJyYXkocHRzKQoJcHRzID0gbnAucmFuZG9tLnJhbmQoMiwgMCkKCWFzc2VydCBub3QgaXMzZHB0c2FycmF5KHB0cykKCXB0cyA9IFtbMSwgM10sIFsyLCA0XV0KCWFzc2VydCBub3QgaXMzZHB0c2FycmF5KHB0cykKCXB0cyA9IG5wLnJhbmRvbS5yYW5kKDEsIDApCglhc3NlcnQgbm90IGlzM2RwdHNhcnJheShwdHMpCgpkZWYgdGVzdF9pczJkcHRzYXJyYXlfb2NjbHVzaW9uKCk6CglwdHMgPSBucC5hcnJheShbWzEsIDMsIDBdLCBbMiwgNCwgLTFdLCBbMSwgMiwgMV1dKQoJYXNzZXJ0IG5vdCBpczJkcHRzYXJyYXlfb2NjbHVzaW9uKHB0cykKCXB0cyA9IG5wLmFycmF5KFtbMSwgMywgMV0sIFsyLCA0LCAzXSwgWzEsIDAsIC0xXV0pCglhc3NlcnQgaXMyZHB0c2FycmF5X29jY2x1c2lvbihwdHMpCglwdHMgPSBucC5yYW5kb20ucmFuZCgzLCAwKQoJYXNzZXJ0IGlzMmRwdHNhcnJheV9vY2NsdXNpb24ocHRzKQoJcHRzID0gbnAucmFuZG9tLnJhbmQoMiwgMCkKCWFzc2VydCBub3QgaXMyZHB0c2FycmF5X29jY2x1c2lvbihwdHMpCglwdHMgPSBucC5yYW5kb20ucmFuZCgzLCAxMCkKCXB0c1stMSwgOl0gPSAtMQoJYXNzZXJ0IGlzMmRwdHNhcnJheV9vY2NsdXNpb24ocHRzKQoJcHRzID0gbnAucmFuZG9tLnJhbmQoMywgMTApCglhc3NlcnQgbm90IGlzMmRwdHNhcnJheV9vY2NsdXNpb24ocHRzKQoKZGVmIHRlc3RfaXMyZHB0c2FycmF5X2NvbmZpZGVuY2UoKToKCXB0cyA9IG5wLmFycmF5KFtbMSwgMywgMF0sIFsyLCA0LCAtMV0sIFsxLCAyLCAxXV0pCglhc3NlcnQgbm90IGlzMmRwdHNhcnJheV9jb25maWRlbmNlKHB0cykKCXB0cyA9IG5wLmFycmF5KFtbMSwgMywgMV0sIFsyLCA0LCAzXSwgWzAuNSwgMCwgMV1dKQoJYXNzZXJ0IGlzMmRwdHNhcnJheV9jb25maWRlbmNlKHB0cykKCXB0cyA9IG5wLnJhbmRvbS5yYW5kKDMsIDApCglhc3NlcnQgaXMyZHB0c2FycmF5X2NvbmZpZGVuY2UocHRzKQoJcHRzID0gbnAucmFuZG9tLnJhbmQoMiwgMCkKCWFzc2VydCBub3QgaXMyZHB0c2FycmF5X2NvbmZpZGVuY2UocHRzKQoJcHRzID0gbnAucmFuZG9tLnJhbmQoMywgMTApCglhc3NlcnQgaXMyZHB0c2FycmF5X2NvbmZpZGVuY2UocHRzKQoJcHRzID0gbnAucmFuZG9tLnJhbmQoMywgMTApCglwdHNbLTEsIDpdID0gLTEKCWFzc2VydCBub3QgaXMyZHB0c2FycmF5X2NvbmZpZGVuY2UocHRzKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CglweXRlc3QubWFpbihbX19maWxlX19dKQo8fGZpbV9zdWZmaXh8PgoJcHRzID0gW1sxLCAzXSwgWzIsIDRdXQoJYXNzZXJ0IG5vdCBpczJkcHRzYXJyYXkocHRzKQoJcHRzID0gbnAucmFuZG9tLnJhbmQoMSwgMCkKCWFzc2VydCBub3QgaXMyZHB0c2FycmF5KHB0cykKPHxmaW1fZW5kfD4="]
["030216869fc7a504bd47bfaee0a6b067d488e61f-3","030216869fc7a504bd47bfaee0a6b067d488e61f","PHxmaW1fcHJlZml4fD4KZnJvbSBhYmMgaW1wb3J0IGFic3RyYWN0bWV0aG9kLCBBQkNNZXRhCmZyb20gYWxnb3JpdG1pYS5wcm9ibGVtcy5zaG9ydGVzdHBhdGhzLmJhY2t0cmFjZXIgaW1wb3J0IEJhY2t0cmFjZXIKCmNsYXNzIElTaG9ydGVzdFBhdGhzRmluZGVyKG1ldGFjbGFzcz1BQkNNZXRhKTogI1tpc3AKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIHNvbWVfdG9fc29tZV9kaXN0YW5jZShzZWxmLCBHOiAiYWN5Y2xpYyBJRGlncmFwaDxUPiIsIGQ6ICJULCBUIC0+IFIiLCAKICAgICAgICAgICAgSTogIlNpemVkSXRlcmFibGVDb250YWluZXI8VD4iLCBGOiAiU2l6ZWRJdGVyYWJsZUNvbnRhaW5lcjxUPiIpIC0+ICJSIjogCiAgICAgICAgcGFzcwoKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIHNvbWVfdG9fc29tZV9iYWNrcG9pbnRlcnMoc2VsZiwgRzogImFjeWNsaWMgSURpZ3JhcGg8VD4iLCBkOiAiVCwgVCAtPiBSIiwgCiAgICAgICAgICAgIEk6ICJTaXplZEl0ZXJhYmxlQ29udGFpbmVyPFQ+IiwgCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgRjogIlNpemVkSXRlcmFibGVDb250YWluZXI8VD4iKSAtPiAiSXRlcmFibGU8KFQsIFQgb3IgTm9uZSk+IjogCjx8ZmltX2VuZHw+"]
["243d475ecf845e46b64f2f886994da57f740c0d0-3","243d475ecf845e46b64f2f886994da57f740c0d0","PHxmaW1fcHJlZml4fD4KZnJvbSBlbnVtIGltcG9ydCBFbnVtCgoKY2xhc3MgRG9jdW1lbnRDb250ZW50VHlwZShFbnVtKToKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHN0cmluZyA9IDEKICAgIG1hcmtkb3duID0gMgogICAgaHRtbCA9IDMKPHxmaW1fZW5kfD4="]
["a43c5936598fe4eaa1b288ab377bc0fb2aa5919a-2","a43c5936598fe4eaa1b288ab377bc0fb2aa5919a","PHxmaW1fcHJlZml4fD4KZnJvbSBza2xlYXJuIGltcG9ydCBkYXRhc2V0cwppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRvcmNoCgpjbGFzcyBEYXRhc2V0TW9vbnMob2JqZWN0KToKICAgIGRlZiBzYW1wbGUoc2VsZiwgbik6CiAgICAgICAgbW9vbnMgPSBkYXRhc2V0cy5tYWtlX21vb25zKG5fc2FtcGxlcz1uLCBub2lzZT0wLjA1KVswXS5hc3R5cGUobnAuZmxvYXQzMikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJldHVybiB0b3JjaC5mcm9tX251bXB5KG1vb25zKQogICAgCjx8ZmltX2VuZHw+"]
["8e6325079667283a268285f4f7694919da11f536-1","8e6325079667283a268285f4f7694919da11f536","PHxmaW1fcHJlZml4fD4KZnJvbSBweW1vb0NGRC5zZXR1cE9wdCBpbXBvcnQgY2hlY2twb2ludEZpbGUsIGRhdGFEaXIsIG5DUCwgYXJjaERpciwgXAogICAgcHJlUHJvY0RpciwgY2x1c3Rlcgpmcm9tIHB5bW9vQ0ZELnV0aWwuc3lzVG9vbHMgaW1wb3J0IHJlbW92ZURpciAjLCBtYWtlRGlyLCBlbXB0eURpcgpmcm9tIHB5bW9vQ0ZELnNldHVwQ0ZEIGltcG9ydCBydW5DYXNlCgoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0aW1lCmltcG9ydCBvcwppbXBvcnQgdGFyZmlsZQpmcm9tIGRhc2suZGlzdHJpYnV0ZWQgaW1wb3J0IENsaWVudAoKZnJvbSBzeXMgaW1wb3J0IGV4aXQKCgojIGRlZiBnZXRHZW4oY2hlY2twb2ludEZpbGU9Y2hlY2twb2ludEZpbGUpOgojICAgICB0cnk6IAojICAgICAgICAgbG9hZENQKGNoZWNrcG9pbnRGaWxlPWNoZWNrcG9pbnRGaWxlKQojICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3IgYXMgZXJyOgojICAgICAgICAgcHJpbnQoZXJyKQojICAgICAgICAgcmV0dXJuIDAKCmRlZiBhcmNoaXZlKGRpclRvQ29tcCwgYXJjaERpcj1hcmNoRGlyLCBiYWNrZ3JvdW5kPVRydWUpOgogICAgaWYgYmFja2dyb3VuZDoKICAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcwogICAgICAgIHAgPSBQcm9jZXNzKHRhcmdldD1jb21wcmVzc0RpciwgYXJncz0oZGlyVG9Db21wLCBhcmNoRGlyKSkKICAgICAgICBwLnN0YXJ0KCkKICAgIGVsc2U6CiAgICAgICAgY29tcHJlc3NEaXIoZGlyVG9Db21wLCBhcmNoRGlyKQoKCmRlZiBjb21wcmVzc0RpcihkaXJUb0NvbXAsIGFyY2hEaXIpOgogICAgcHJpbnQoZid7ZGlyVG9Db21wfSBjb21wcmVzc2lvbiBzdGFydGVkJykKICAgICMgZGVzdGluYXRpb24gZmlsZSBuYW1pbmcKICAgIHRpbWVzdHIgPSB0aW1lLnN0cmZ0aW1lKCIleSVtJWQtJUglTSIpCiAgICB0cnk6CiAgICAgICAgZm5hbWUgPSBmJ3tkaXJUb0NvbXBbZGlyVG9Db21wLnJpbmRleCgiLyIpOl19X3t0aW1lc3RyfScKICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgIGZuYW1lID0gZid7ZGlyVG9Db21wfV97dGltZXN0cn0nCiAgICAjIGNvbmNhdGVuYXRlIGNvbXByZXNzaW9uIGZpbGUgcGF0aCBhbmQgbmFtZQogICAgY29tcEZpbGUgPSBvcy5wYXRoLmpvaW4oYXJjaERpciwgZid7Zm5hbWV9LnRhci5neicpCiAgICB3aXRoIHRhcmZpbGUub3Blbihjb21wRmlsZSwgJ3c6Z3onKSBhcyB0YXI6CiAgICAgICAgdGFyLmFkZChkaXJUb0NvbXApCiAgICBwcmludChmJ3tkaXJUb0NvbXB9IGNvbXByZXNzaW9uIGZpbmlzaGVkJykKICAgIHJlbW92ZURpcihkaXJUb0NvbXApCgoKZGVmIHNhdmVEYXRhKGFsZ29yaXRobSk6CiAgICBnZW4gPSBhbGdvcml0aG0ubl9nZW4KICAgICMgZ2VuRGlyID0gZidnZW57Z2VufScKICAgICMgcmV0cmlldmUgcG9wdWxhdGlvbiBmcm9tIGxhc3Rlc3QgZ2VuZXJhdGlvbgogICAgZ2VuWCA9IGFsZ29yaXRobS5wb3AuZ2V0KCdYJykKICAgIGdlbkYgPSBhbGdvcml0aG0ucG9wLmdldCgnRicpCiAgICAjIHNhdmUgY2hlY2twb2ludCBhZnRlciBlYWNoIGdlbmVyYXRpb24KICAgIG5wLnNhdmUob3MucGF0aC5qb2luKGRhdGFEaXIsICdjaGVja3BvaW50JyksIGFsZ29yaXRobSkKICAgICMgZ2VuMCBhbmQgZXZlcnkgbkNQIGdlbmVyYXRpb25zIHNhdmUgYWRkaXRpb25hbCBzdGF0aWMgY2hlY2twb2ludAogICAgaWYgZ2VuICUgbkNQID09IDE6CiAgICAgICAgbnAuc2F2ZShmIntkYXRhRGlyfS9jaGVja3BvaW50LWdlbiVpIiAlIGdlbiwgYWxnb3JpdGhtKQogICAgIyBzYXZlIHRleHQgZmlsZSBvZiB2YXJpYWJsZXMgYW5kIG9iamVjdGl2ZXMgYXMgd2VsbAogICAgIyB0aGlzIHByb3ZpZGVzIG1vcmUgb3B0aW9ucyBmb3IgcG9zdC1wcm9jZXNzZXNpbmcgZGF0YQogICAgd2l0aCBvcGVuKGYne2RhdGFEaXJ9L2dlbntnZW59WC50eHQnLCAidysiKSBhcyBmaWxlOiAgIyB3cml0ZSBmaWxlCiAgICAgICAgbnAuc2F2ZXR4dChmaWxlLCBnZW5YKQogICAgd2l0aCBvcGVuKGYne2RhdGFEaXJ9L2dlbntnZW59Ri50eHQnLCAidysiKSBhcyBmaWxlOiAgIyB3cml0ZSBmaWxlCiAgICAgICAgbnAuc2F2ZXR4dChmaWxlLCBnZW5GKQoKCmRlZiBsb2FkQ1AoY2hlY2twb2ludEZpbGU9Y2hlY2twb2ludEZpbGUsIGhhc1Rlcm1pbmF0ZWQ9RmFsc2UpOgogICAgdHJ5OgogICAgICAgIGNoZWNrcG9pbnQsID0gbnAubG9hZChjaGVja3BvaW50RmlsZSwgYWxsb3dfcGlja2xlPVRydWUpLmZsYXR0ZW4oKQogICAgICAgICMgb25seSBuZWNlc3NhcnkgaWYgZm9yIHRoZSBjaGVja3BvaW50IHRoZSB0ZXJtaW5hdGlvbiBjcml0ZXJpb24gaGFzIGJlZW4gbWV0CiAgICAgICAgY2hlY2twb2ludC5oYXNfdGVybWluYXRlZCA9IGhhc1Rlcm1pbmF0ZWQKICAgICAgICBhbGcgPSBjaGVja3BvaW50CiAgICAgICAgIyBVcGRhdGUgYW55IGNoYW5nZXMgbWFkZSB0byB0aGUgYWxnb3JpdGhtcyBiZXR3ZWVuIHJ1bnMKICAgICAgICBmcm9tIHB5bW9vQ0ZELnNldHVwT3B0IGltcG9ydCBwb3Bfc2l6ZSwgbl9vZmZzcHJpbmdzLCB4bCwgeHUKICAgICAgICBhbGcucG9wX3NpemUgPSBwb3Bfc2l6ZQogICAgICAgIGFsZy5uX29mZnNwcmluZ3MgPSBuX29mZnNwcmluZ3MKICAgICAgICBhbGcucHJvYmxlbS54bCA9IHhsCiAgICAgICAgYWxnLnByb2JsZW0ueHUgPSB4dQogICAgICAgIHJldHVybiBhbGcKICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvciBhcyBlcnI6CiAgICAgICAgcHJpbnQoZXJyKQogICAgICAgIHJhaXNlIEV4Y2VwdGlvbihmJ3tjaGVja3BvaW50RmlsZX0gbG9hZCBmYWlsZWQuJykKICAgICAgICAjIHJldHVybiBOb25lCgpkZWYgcHJpbnRBcnJheShhcnJheSwgbGFiZWxzLCB0aXRsZSk6CiAgICBwcmludCh0aXRsZSwgJyAtICcsIGVuZD0nJykKICAgIGZvciBpLCBsYWJlbCBpbiBlbnVtZXJhdGUobGFiZWxzKToKICAgICAgICBwcmludChmJ3tsYWJlbH06IHthcnJheVtpXX0gLyAnLCBlbmQ9JycpCiAgICBwcmludCgpCgoKCmRlZiBydW5Qb3AoWCk6CiAgICBjbGllbnQgPSBDbGllbnQoY2x1c3RlcigpKQogICAgCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBmdW4oeF9pLCB4KToKICAgICAgICBjYXNlRGlyID0gb3MucGF0aC5qb2luKHByZVByb2NEaXIsIGYnbGltX3Blcm1fc2ltLXt4X2l9JykgCiAgICAgICAgZiA9IHJ1bkNhc2UoY2FzZURpciwgeCkKICAgICAgICByZXR1cm4gZgo8fGZpbV9lbmR8Pg=="]
["8eb458866691f77241af7aebab7e5c3397676287-4","8eb458866691f77241af7aebab7e5c3397676287","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29yZS5leGNlcHRpb25zIGltcG9ydCBWYWxpZGF0aW9uRXJyb3IKCgpjbGFzcyBNb2RlbFZhbGlkYXRvcjoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBvbmx5X2ludCh2YWx1ZSk6CiAgICAgICAgaWYgbm90IHZhbHVlLmlzZGlnaXQoKToKICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKCdJRCBjb250YWlucyBjaGFyYWN0ZXJzJykKPHxmaW1fZW5kfD4="]
["064b996f7603def11675dc20455d98644240523a-1","064b996f7603def11675dc20455d98644240523a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgIEZJTEU6IGZpeF90aW1lLnB5CgogICAgICAgVVNBR0U6IC4vZml4X3RpbWUucHkKCiBERVNDUklQVElPTjogCgogICAgIE9QVElPTlM6IC0tLQpSRVFVSVJFTUVOVFM6IC0tLQogICAgICAgIEJVR1M6IC0tLQogICAgICAgTk9URVM6IC0tLQogICAgICBBVVRIT1I6IEFsZXggTGVvbnRpZXYgKGFsb3p6MTk5MUBnbWFpbC5jb20pCk9SR0FOSVpBVElPTjogCiAgICAgVkVSU0lPTjogLS0tCiAgICAgQ1JFQVRFRDogMjAyMS0wMi0xOVQxNDoxNzozNi45MjUwMTcKICAgIFJFVklTSU9OOiAtLS0KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iIiIKCmltcG9ydCBjbGljawppbXBvcnQgX2NvbW1vbgppbXBvcnQgcGFuZGFzIGFzIHBkCmZyb20gcHl0eiBpbXBvcnQgdGltZXpvbmUKZnJvbSBic29uLmNvZGVjX29wdGlvbnMgaW1wb3J0IENvZGVjT3B0aW9ucwpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZWRlbHRhCmltcG9ydCByZQppbXBvcnQgZnVuY3Rvb2xzCgoKI2RlZiBfZ2V0X2NvbGwobW9uZ29fcGFzcyk6CiMgICAgY2xpZW50ID0gX2NvbW1vbi5nZXRfcmVtb3RlX21vbmdvX2NsaWVudChtb25nb19wYXNzKQojICAgIGNvbGwgPSBjbGllbnQubG9naXN0aWNzWyJhbGV4LnRhc2tMb2ciXS53aXRoX29wdGlvbnMoCiMgICAgICAgIGNvZGVjX29wdGlvbnM9Q29kZWNPcHRpb25zKHR6X2F3YXJlPVRydWUsIHR6aW5mbz10aW1lem9uZSgnQXNpYS9Ub2t5bycpKSkKIyAgICByZXR1cm4gY29sbAoKCkBjbGljay5jb21tYW5kKCkKQGNsaWNrLm9wdGlvbigiLS1tb25nby1wYXNzIiwgZW52dmFyPSJNT05HT19QQVNTIiwgcmVxdWlyZWQ9VHJ1ZSkKQGNsaWNrLm9wdGlvbigiLWkiLCAiLS1pbmRleCIsIHR5cGU9aW50LCBkZWZhdWx0PTApCkBjbGljay5vcHRpb24oIi1sIiwgIi0tbGltaXQiLCB0eXBlPWludCwgZGVmYXVsdD0xMCkKQGNsaWNrLm9wdGlvbigiLS10aW1lIikKQGNsaWNrLm9wdGlvbigiLS1kcnktcnVuLy0tbm8tZHJ5LXJ1biIsZGVmYXVsdD1GYWxzZSkKQGNsaWNrLm9wdGlvbigiLS1yZW1vdmUvLS1uby1yZW1vdmUiLGRlZmF1bHQ9RmFsc2UpCmRlZiBmaXhfdGltZShtb25nb19wYXNzLCBpbmRleCwgdGltZSwgbGltaXQsZHJ5X3J1bixyZW1vdmUpOgogICAgY29sbCA9IF9jb21tb24uZ2V0X2NvbGwobW9uZ29fcGFzcywiYWxleC50YXNrTG9nIixhcHBseV9vcHRpb25zPUZhbHNlKQogICAgZGYgPSBwZC5EYXRhRnJhbWUoY29sbC5maW5kKAogICAgICAgIHsibWVzc2FnZSI6ICJhZGQgZW5nYWdlIn0sIHNvcnQ9WygiZGF0ZSIsIC0xKV0sIGxpbWl0PWxpbWl0KSkKICAgIGRmWyJuYW1lIl0gPSBkZlsib2JqIl0uYXBwbHkobGFtYmRhIG86b1sibmFtZSJdKQogICAgZGYgPSBkZi5kcm9wKGNvbHVtbnM9WyJvYmoiLCJtZXNzYWdlIl0pCiAgICBkZi5kYXRlID0gZGYuZGF0ZS5hcHBseShmdW5jdG9vbHMucGFydGlhbChfY29tbW9uLnRvX3V0Y19kYXRldGltZSxpbnZlcnNlPVRydWUpKQogICAgY2xpY2suZWNobyhkZikKCiAgICBvID0gZGYudG9fZGljdChvcmllbnQ9InJlY29yZHMiKVtpbmRleF0KICAgIGNsaWNrLmVjaG8obykKICAgIGlmIHRpbWUgaXMgbm90IE5vbmUgb3IgcmVtb3ZlOgogICAgICAgIGlmIHRpbWUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIG0gPSByZS5tYXRjaChyIigoP1A8eWVhcj5cZHs0fSktKD9QPG1vbnRoPlxkezJ9KS0oP1A8ZGF5PlxkezJ9KSApPyg/UDxob3VyPlxkezJ9KTooP1A8bWludXRlPlxkezJ9KSIsdGltZSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBhc3NlcnQgbSBpcyBub3QgTm9uZSwgdGltZQogICAgICAgICAgICBkYXRlID0gZGF0ZXRpbWUoKip7CiAgICAgICAgICAgICAgICAqKntrOmdldGF0dHIob1siZGF0ZSJdLGspIGZvciBrIGluICJ5ZWFyIG1vbnRoIGRheSIuc3BsaXQoIiAiKX0sCiAgICAgICAgICAgICAgICAqKntrOmludChtLmdyb3VwKGspKSBmb3IgayBpbiAiaG91ciBtaW51dGUgeWVhciBtb250aCBkYXkiLnNwbGl0KCIgIikgaWYgbS5ncm91cChrKSBpcyBub3QgTm9uZX0KPHxmaW1fZW5kfD4="]
["a511511c338d45707e4932a429c3a75a8f47af83-1","a511511c338d45707e4932a429c3a75a8f47af83","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMKIyBDb3B5cmlnaHQgMjAyMCBYaWxpbnggSW5jLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKIiIiCk1vZHVsZSBmb3IgdGVzdGluZyB0aGUgcHl4aXIgVEYgZXhlY3V0b3IKCgoiIiIKCmltcG9ydCB1bml0dGVzdAppbXBvcnQgbnVtcHkgYXMgbnAKPHxmaW1faG9sZXw+CmZyb20gcHl4aXIuZ3JhcGguaW8gaW1wb3J0IHhsYXllcl9pbwoKZnJvbSBweXhpci5ydW50aW1lLnRlbnNvcmZsb3cueF8yX3RmX3JlZ2lzdHJ5IGltcG9ydCBYXzJfVEYKCgpjbGFzcyBUZXN0VGZMNEJyb2FkY2FzdEFuZFJlZHVjZSh1bml0dGVzdC5UZXN0Q2FzZSk6CgogICAgZGVmIHRlc3RfbWVhbihzZWxmKToKCiAgICAgICAgWCA9IHhsYXllci5YTGF5ZXIoCiAgICAgICAgICAgIHR5cGU9WydNZWFuJ10sCiAgICAgICAgICAgIG5hbWU9J21lYW4xJywKICAgICAgICAgICAgc2hhcGVzPVstMSwgMSwgMSwgNF0sCiAgICAgICAgICAgIHNpemVzPVs0XSwKICAgICAgICAgICAgYm90dG9tcz1bJ2luMSddLAogICAgICAgICAgICB0b3BzPVtdLAogICAgICAgICAgICB0YXJnZXRzPVtdLAogICAgICAgICAgICBhdHRycz17CiAgICAgICAgICAgICAgICAnYXhlcyc6IFsxLCAyXSwKICAgICAgICAgICAgICAgICdrZWVwZGltcyc6IFRydWUKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICAgICAgaW5wdXRfc2hhcGVzID0geydpbjEnOiBUZW5zb3JTaGFwZShbMSwgMywgMywgNF0pfQoKICAgICAgICBsYXllcnMgPSBYXzJfVEZbJ01lYW4nXShYLCBpbnB1dF9zaGFwZXMsIHt9KQogICAgICAgIGFzc2VydCBsZW4obGF5ZXJzKSA9PSAxCgogICAgICAgIGlucHQgPSBucC5vbmVzKCgxLCAzLCAzLCA0KSkKICAgICAgICBpbnB1dHMgPSBbaW5wdF0KCiAgICAgICAgb3V0ID0gbGF5ZXJzWzBdLmZvcndhcmRfZXhlYyhpbnB1dHMpCgogICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG91dCwgbnAubmRhcnJheSkKICAgICAgICBhc3NlcnQgbGVuKG91dCkgPT0gMQogICAgICAgIGFzc2VydCBvdXQuc2hhcGUgPT0gKDEsIDEsIDEsIDQpCjx8ZmltX3N1ZmZpeHw+Cgpmcm9tIHB5eGlyLnNoYXBlcyBpbXBvcnQgVGVuc29yU2hhcGUKZnJvbSBweXhpci5ydW50aW1lIGltcG9ydCBiYXNlCmZyb20gcHl4aXIuZ3JhcGgubGF5ZXIgaW1wb3J0IHhsYXllcgo8fGZpbV9lbmR8Pg=="]
["ba79248ed8018c2eb8a9523003ab5da92a26d443-1","ba79248ed8018c2eb8a9523003ab5da92a26d443","PHxmaW1fcHJlZml4fD4KIiIiRmxhc2sgYmx1ZXByaW50IGZvciAvaGVhbHRoIGVuZHBvaW50LgoKRXhwb3NlcyB0aGUgYmx1ZXByaW50IGFzIGEgbW9kdWxlLWxldmVsIHZhcmlhYmxlIG5hbWVkIGBoZWFsdGhgLgoiIiIKaW1wb3J0IGpzb24KaW1wb3J0IGdycGMKZnJvbSBmbGFzayBpbXBvcnQgQmx1ZXByaW50CmZyb20gcmlwb3pvLmFkYXB0ZXJzIGltcG9ydCBKU09OQVBJQWRhcHRlcgpmcm9tIHJpcG96by5leGNlcHRpb25zIGltcG9ydCBSZXN0RXhjZXB0aW9uCmZyb20gaGVhbHRoY2hlY2sgaW1wb3J0IEhlYWx0aENoZWNrCmZyb20gZ3JwY19weXRob25fZXhhbXBsZS5zZXJ2aWNlcy5zdHVicyBpbXBvcnQgaGVhbHRoX3BiMgpmcm9tIGdycGNfcHl0aG9uX2V4YW1wbGUuYXBpcy5odHRwLnNlcnZpY2VzIGltcG9ydCBoZWFsdGhfY29ubgoKIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCmhlYWx0aCA9IEJsdWVwcmludCgnaGVhbHRoJywgX19uYW1lX18pCgoKZGVmIF9ncnBjX2F2YWlsYWJsZSgpOgogICAgIiIiQ2hlY2tzIHRoYXQgdGhlIGh0dHAgY2xpZW50IGlzIGNvbm5lY3RlZCBhbmQgdGhhdCB0aGUgZ3JwYyBzZXJ2ZXIKICAgIGlzIGF2YWlsYWJsZS4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIFJldHVybnM6CiAgICAgICAgQSB0dXBsZSBvZiAoYm9vbCwgc3RyIG9yIGRpY3QpIHdoZXJlIGJvb2wgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNoZWNrCiAgICAgICAgICAgIHBhc3NlZCwgYW5kIHRoZSBzdHIgb3IgZGljdCBwcm92aWRlcyBleHRyYSBjb250ZXh0IGFib3V0IHRoZSBjaGVjawogICAgIiIiCjx8ZmltX2VuZHw+"]
["3068507c78c744b952151017cd21cce2033eaf9c-2","3068507c78c744b952151017cd21cce2033eaf9c","PHxmaW1fcHJlZml4fD4KIyBBUCBSdXltZ2FhcnQuICBUaGlzIHNjcmlwdCByZWFkcyB0aGUgcGlja2xlZCBwcmUtcHJvY2Vzc2VkIG1vdmllcyBhbmQgcHJvZHVjZXMgb2JqZWN0IGNvb3JkaW5hdGVzIGZyb20gZWFjaAppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBzY2lweS5zaWduYWwgaW1wb3J0IGNvbnZvbHZlMmQKZnJvbSBza2ltYWdlLmNvbG9yIGltcG9ydCByZ2IyZ3JleQppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBwaWNrbGUsIGNvcHkKZnJvbSBpbWFnZUZ1bmN0aW9ucyBpbXBvcnQgKgoKTTEsTTIsTTMgPSBwaWNrbGUubG9hZChvcGVuKCdkYXRhL2NhbWVyYV8xLmRpY3QnLCdyYicpKSwgcGlja2xlLmxvYWQob3BlbignZGF0YS9jYW1lcmFfMi5kaWN0JywncmInKSksIHBpY2tsZS5sb2FkKG9wZW4oJ2RhdGEvY2FtZXJhXzMuZGljdCcsJ3JiJykpCgpjYW5NMSA9IE0xWzBdWzI5XVs2NzoxMTQ6LDU4Ojg5LDpdCmNhbk0yID0gTTJbMF1bMF1bMTA4OjE1NTosNTA6ODQsOl0KY2FuTTMgPSBNM1swXVsxNTBdWzg2OjExNSwxMjE6MTU5LDpdCgppbWFnZVNldFRvT2JqZWN0Q29vcmRpbmF0ZXMoIFtNMVswXV0sIFtjYW5NMV0sIG5hbWU9J2RhdGEvY2FtMV8xJyApCmltYWdlU2V0VG9PYmplY3RDb29yZGluYXRlcyggW00xWzFdXSwgW2Nhbk0xXSwgbmFtZT0nZGF0YS9jYW0xXzInICkJCQppbWFnZVNldFRvT2JqZWN0Q29vcmRpbmF0ZXMoIFtNMlswXV0sIFtjYW5NMl0sIG5hbWU9J2RhdGEvY2FtMl8xJyApCmltYWdlU2V0VG9PYmplY3RDb29yZGluYXRlcyggW00yWzFdXSwgW2Nhbk0yXSwgbmFtZT0nZGF0YS9jYW0yXzInICkKaW1hZ2VTZXRUb09iamVjdENvb3JkaW5hdGVzKCBbTTNbMF1dLCBbY2FuTTNdLCBuYW1lPSdkYXRhL2NhbTNfMScgKQppbWFnZVNldFRvT2JqZWN0Q29vcmRpbmF0ZXMoIFtNM1sxXV0sIFtjYW5NM10sIG5hbWU9J2RhdGEvY2FtM18yJyApCmltYWdlU2V0VG9PYmplY3RDb29yZGluYXRlcyggW00xWzJdXSwgW2Nhbk0xXSwgbmFtZT0nZGF0YS9jYW0xXzMnICkKCncsaCxzID0gMjAsMjYsIDIKY2FuMSA9IGdldENhbkltZyhNMixzLDE3MCw3MSwxMjksdyxoLG9mZnk9OCkgCmNhbjIgPSBnZXRDYW5JbWcoTTIscywxOTYsOTIsMTI3LHcsaCxvZmZ5PTApCmNhbjMgPSBnZXRDYW5JbWcoTTIscywyMDMsOTksMTM0LHcsaCxvZmZ5PTEyKQpvYnMgPSBbY2FuTTIsY2FuMSxjYW4yLGNhbjNdICMtIHBlcmZlY3QKaW1hZ2VTZXRUb09iamVjdENvb3JkaW5hdGVzKCBbIE0yWzJdIF0sIG9icywgbmFtZT0nZGF0YS9jYW0yXzMnICkKCncsaCxzID0gMjAsMTYsIDIKY2FuMCxjYW4xID0gZ2V0Q2FuSW1nKE0zLHMsMCwxMTMsNzUsdyxoLG9mZnk9MCksICBnZXRDYW5JbWcoTTMscywxNCwxMTUsMTA1LHcsaCxvZmZ5PTApCmNhbjIsY2FuMyA9IGdldENhbkltZyhNMyxzLDUyLDEyNyw3MSx3LGgsb2ZmeT0wKSwgZ2V0Q2FuSW1nKE0zLHMsNzIsODQsODcsdyxoLG9mZnk9MCkKb2JzID0gW2NhbjAsY2FuMSxjYW4yLGNhbjNdICMtIHBlcmZlY3QKaW1hZ2VTZXRUb09iamVjdENvb3JkaW5hdGVzKCBbIE0zWzJdIF0sIG9icywgbmFtZT0nZGF0YS9jYW0zXzMnICkKCiM9PSBDQU5TIEFUIDE2IEFOR0xFUyAoZ3Vlc3NlZCBhYm91dCAzNjAgZGVncmVlcy8xNikgPT0KdyxoLHMgPSAxNCwxNywgMwpjYW4xLCBjYW4yID0gIGdldENhbkltZyhNMSxzLDAsOTgsNDYsdyxoKSwgIGdldENhbkltZyhNMSxzLDEwLDEwNCw0MSx3LGgpCmNhbjMsIGNhbjQgPSAgZ2V0Q2FuSW1nKE0xLHMsMTYsMTEwLDQ0LHcsaCksZ2V0Q2FuSW1nKE0xLHMsMTksMTEwLDUwLHcsaCkKY2FuNSwgY2FuNiA9ICBnZXRDYW5JbWcoTTEscywyMiwxMTAsNjAsdyxoKSxnZXRDYW5JbWcoTTEscywyNiwxMDYsNjksdyxoKQpjYW43LCBjYW44ID0gIGdldENhbkltZyhNMSxzLDMxLDEwMSw3Nix3LGgpLGdldENhbkltZyhNMSxzLDM1LDkzLDc2LHcsaCkKY2FuOSwgY2FuMTAgPSBnZXRDYW5JbWcoTTEscyw0NCw4Miw0OSx3LGgpLCBnZXRDYW5JbWcoTTEscyw1MCw4MSwzOCx3LGgpCmNhbjExLGNhbjEyID0gZ2V0Q2FuSW1nKE0xLHMsNTUsODAsNDAsdyxoKSwgZ2V0Q2FuSW1nKE0xLHMsNjQsODIsNjUsdyxoKQpjYW4xMyxjYW4xNCA9IGdldENhbkltZyhNMSxzLDc0LDkwLDgwLHcsaCksIGdldENhbkltZyhNMSxzLDc5LDkyLDcwLHcsaCkKY2FuMTUsY2FuMTYgPSBnZXRDYW5JbWcoTTEscyw5NCw5Miw0MSx3LGgpLCBnZXRDYW5JbWcoTTEscywxMTEsODgsNzMsdyxoKQoKb2JzID0gW2NhbjEsY2FuMixjYW4zLGNhbjQsY2FuNSxjYW42LGNhbjcsY2FuOCxjYW45LGNhbjEwLGNhbjExLGNhbjEyLGNhbjEzLGNhbjE0LGNhbjE1LGNhbjE2XQppbWFnZVNldFRvT2JqZWN0Q29vcmRpbmF0ZXMoIFsgTTFbM10gXSwgb2JzLCBuYW1lPSdkYXRhL2NhbTFfNCcpCgppZiBGYWxzZTogIy0gYWx0ZXJuYXRlIHdheQoJaW1hZ2VTZXRUb09iamVjdENvb3JkaW5hdGVzKFtNMVsxXV0sIHJnYjJncmV5KE0xWzBdWzI5XVs2NzoxMTQ6LDU4Ojg5LDpdKSwgYkNvbnY9VHJ1ZSwgbmFtZT0nZGF0YS9jYW0xXzQnKQoJI2ltYWdlU2V0VG9PYmplY3RDb29yZGluYXRlcyhbTTFbM11dLCBNMVswXVsyOV1bNjc6MTE0Oiw1ODo4OSw6XSwgYkNvbnY9RmFsc2UsIG5hbWU9J2NhbTFfNCcpCgojPT0gQ0FOUyBBVCAxNiBBTkdMRVMgKGd1ZXNzZWQgYWJvdXQgMzYwIGRlZ3JlZXMvMTYpID09CncsaCxzLCBveSA9IDE3LDIwLCAzLCAxMApjYW4xLCBjYW4yID0gIGdldENhbkltZyhNMixzLCAwLCA0OCwxMDgsdyxoLG9mZnk9b3kpLCBnZXRDYW5JbWcoTTIscywgNSwgNjEsIDkzLHcsaCxvZmZ5PW95KSAKY2FuMywgY2FuNCA9ICBnZXRDYW5JbWcoTTIscywxMiwgODEsIDY5LHcsaCxvZmZ5PW95KSwgZ2V0Q2FuSW1nKE0yLHMsMTcsIDk2LCA1OCx3LGgsb2ZmeT1veSkKY2FuNSwgY2FuNiA9ICBnZXRDYW5JbWcoTTIscywyMCwxMDQsIDU5LHcsaCxvZmZ5PW95KSwgZ2V0Q2FuSW1nKE0yLHMsMjQsMTA0LCA2OCx3LGgsb2ZmeT1veSkKY2FuNywgY2FuOCA9ICBnZXRDYW5JbWcoTTIscywyOSwxMDIsIDkwLHcsaCxvZmZ5PW95KSwgZ2V0Q2FuSW1nKE0yLHMsMzMsIDk0LDEwNSx3LGgsb2ZmeT1veSkKY2FuOSwgY2FuMTAgPSBnZXRDYW5JbWcoTTIscywzNywgODYsMTE0LHcsaCxvZmZ5PW95KSwgZ2V0Q2FuSW1nKE0yLHMsNDIsIDc0LDExMCx3LGgsb2ZmeT1veSkKY2FuMTEsY2FuMTIgPSBnZXRDYW5JbWcoTTIscyw0NiwgNjUsIDk4LHcsaCxvZmZ5PW95KSwgZ2V0Q2FuSW1nKE0yLHMsNDksIDU5LCA4Mix3LGgsb2ZmeT1veSkKY2FuMTMsY2FuMTQgPSBnZXRDYW5JbWcoTTIscyw1MywgNTcsIDY1LHcsaCxvZmZ5PW95KSwgZ2V0Q2FuSW1nKE0yLHMsNTgsIDU1LCA1Mix3LGgsb2ZmeT1veSkKY2FuMTUsY2FuMTYgPSBnZXRDYW5JbWcoTTIscyw2NywgNjQsIDczLHcsaCxvZmZ5PW95KSwgZ2V0Q2FuSW1nKE0yLHMsNzQsIDc1LDEwNyx3LGgsb2ZmeT1veSkKb2JzID0gW2NhbjEsY2FuMixjYW4zLGNhbjQsY2FuNSxjYW42LGNhbjcsY2FuOCxjYW45LGNhbjEwLGNhbjExLGNhbjEyLGNhbjEzLGNhbjE0LGNhbjE1LGNhbjE2XQpwbG90Q2FuUm90KGNhbjEsY2FuMixjYW4zLGNhbjQsY2FuNSxjYW42LGNhbjcsY2FuOCxjYW45LGNhbjEwLGNhbjExLGNhbjEyLGNhbjEzLGNhbjE0LGNhbjE1LGNhbjE2LGZuYW1lPSdpbWFnZXMvY2FuUjE2XzJfNC5wbmcnKQppbWFnZVNldFRvT2JqZWN0Q29vcmRpbmF0ZXMoIFsgTTJbM10gXSwgb2JzLCBuYW1lPSdkYXRhL2NhbTJfNCcgKQoKdyxoLHMgPTE4LDE1LDMKY2FuMSwgY2FuMiA9IGdldENhbkltZyhNMyxzLCAgMCwxMTMsNjMsdyxoKSwgZ2V0Q2FuSW1nKE0zLHMsICA0LDEwMiw2MSx3LGgpCmNhbjMsIGNhbjQgPSBnZXRDYW5JbWcoTTMscywgIDcsIDk1LDYwLHcsaCksIGdldENhbkltZyhNMyxzLCAxMSwgOTMsNTgsdyxoKQpjYW41LCBjYW42ID0gZ2V0Q2FuSW1nKE0zLHMsIDE2LDEwMCw1Nix3LGgpLCBnZXRDYW5JbWcoTTMscywgMjAsMTA3LDU0LHcsaCkKY2FuNywgY2FuOCA9IGdldENhbkltZyhNMyxzLCAyMywxMTcsNTIsdyxoKSwgZ2V0Q2FuSW1nKE0zLHMsIDMwLDEzNCw1Myx3LGgpCmNhbjksY2FuMTAgPSBnZXRDYW5JbWcoTTMscywgMzUsMTMyLDU5LHcsaCksIGdldENhbkltZyhNMyxzLCA0MSwxMTYsNjUsdyxoKQpjYW4xMSxjYW4xMj0gZ2V0Q2FuSW1nKE0zLHMsIDUxLCA5OCw2Nyx3LGgpLCBnZXRDYW5JbWcoTTMscywgNjEsMTEzLDU3LHcsaCkKY2FuMTMsY2FuMTQ9IGdldENhbkltZyhNMyxzLCA3MywxMzQsNDQsdyxoKSxnZXRDYW5JbWcoTTMscywgODAsMTE4LDUxLHcsaCkKY2FuMTUsY2FuMTY9IGdldENhbkltZyhNMyxzLCA4NSwxMDUsNjAsdyxoKSxnZXRDYW5JbWcoTTMscywgOTIsMTA0LDYzLHcsaCkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4Kb2JzID0gW2NhbjEsY2FuMixjYW4zLGNhbjQsY2FuNSxjYW42LGNhbjcsY2FuOCxjYW45LGNhbjEwLGNhbjExLGNhbjEyLGNhbjEzLGNhbjE0LGNhbjE1LGNhbjE2XQpwbG90Q2FuUm90KGNhbjEsY2FuMixjYW4zLGNhbjQsY2FuNSxjYW42LGNhbjcsY2FuOCxjYW45LGNhbjEwLGNhbjExLGNhbjEyLGNhbjEzLGNhbjE0LGNhbjE1LGNhbjE2LGZuYW1lPSdpbWFnZXMvY2FuUjE2XzNfNC5wbmcnKQppbWFnZVNldFRvT2JqZWN0Q29vcmRpbmF0ZXMoIFtNM1szXV0sIG9icywgbmFtZT0nZGF0YS9jYW0zXzQnICkKCjx8ZmltX2VuZHw+"]
["cce44fea2406067e27d34df44fc9cf1bee8acd14-1","cce44fea2406067e27d34df44fc9cf1bee8acd14","PHxmaW1fcHJlZml4fD4KZnJvbSBib2xpbmV0dGUuZGVmYXVsdHMuY29udHJvbGxlcnMuc3RhdGljIGltcG9ydCBTdGF0aWNDb250cm9sbGVyCmZyb20gYm9saW5ldHRlLmRlZmF1bHRzLmNvbnRyb2xsZXJzLnRpbWV6b25lIGltcG9ydCBUaW1lem9uZUNvbnRyb2xsZXIKZnJvbSBib2xpbmV0dGUuZGVmYXVsdHMuY29udHJvbGxlcnMuZmlsZSBpbXBvcnQgRmlsZUNvbnRyb2xsZXIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIGJvbGluZXR0ZS5kZWZhdWx0cy5jb250cm9sbGVycy5yb2xlIGltcG9ydCBSb2xlQ29udHJvbGxlcgpmcm9tIGJvbGluZXR0ZS5kZWZhdWx0cy5jb250cm9sbGVycy51c2VyIGltcG9ydCBVc2VyQ29udHJvbGxlcgo8fGZpbV9lbmR8Pg=="]
["c614d0f3e8d75e6509dc2fca6dbe296557a074b0-3","c614d0f3e8d75e6509dc2fca6dbe296557a074b0","PHxmaW1fcHJlZml4fD4KZnJvbSBlbnVtIGltcG9ydCBFbnVtCgpjbGFzcyBCb2R5KEVudW0pOgoJSGVhZCA9IDEKCUZhY2UgPSAyCglIYWlyID0gMwoJVG9yc28gPSA0CglMZWZ0QXJtID0gNQoJUmlnaHRBcm0gPSA2CglMZWZ0SGFuZCA9IDcKCVJpZ2h0SGFuZCA9IDgKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoJTGVmdExlZyA9IDkKCVJpZ2h0TGVnID0gMTAKCUxlZnRGb290ID0gMTEKCVJpZ2h0Rm9vdCA9IDEyCjx8ZmltX2VuZHw+"]
["033db79008a796b1c7240792a22046b7b321b434-1","033db79008a796b1c7240792a22046b7b321b434","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KIyAtKi0gY29kaW5nOiB1dGYtOCAgLSotCgoiIiJVbml0IHRlc3RzIGZvciBtZWFuaW5nLnB5IiIiCgppbXBvcnQgbWVhbmluZwppbXBvcnQgdW5pdHRlc3QKCmNsYXNzIEtub3duVmFsdWVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKCiAgICBrbm93blBhcnNlclZhbHVlcyA9ICgKICAgICAgICAgICAgICAgICgiKkdlcm1hbjogW1t3aWNodGlnXV0iLAogICAgICAgICAgICAgICAgICAgIFsoJ2RlJywnd2ljaHRpZycsJycsMSxGYWxzZSwnJyldCjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgKCIqe3tmcn19OiBbW2ltcG9ydGFudGVdXSB7e2Z9fSIsCiAgICAgICAgICAgICAgICAgICAgWygnZnInLCdpbXBvcnRhbnRlJywnZicsMSxGYWxzZSwnJyldCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgKCIqRHV0Y2g6IFtbdm9vcmJlZWxkZW5dXSAnJ24sIHBsJycsIFtbaW5zdHJ1Y3RpZXNdXSB7e2Z9fSwge3twfX0iLAogICAgICAgICAgICAgICAgICAgIFsoJ25sJywndm9vcmJlZWxkZW4nLCduJywyLEZhbHNlLCcnKSwKICAgICAgICAgICAgICAgICAgICAgKCdubCcsJ2luc3RydWN0aWVzJywgJ2YnLDIsRmFsc2UsJycpXQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICgiKlJ1c3NpYW46IFtb0YjQtdGB0YLQvtC6XV0gJydtJycgKHNoZXN0b2spIiwKICAgICAgICAgICAgICAgICAgICBbKCdydScsJ9GI0LXRgdGC0L7QuicsJ20nLDEsRmFsc2UsJ3NoZXN0b2snKV0KICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAoIipLYXpha2g6INGB05nQu9C10LwsINGB0LDQu9Cw0LwsINGB05nQu9C10LzQtdGC0YHRltC30LTQtdGAKHJlc3BlY3RhYmxlKSIsCiAgICAgICAgICAgICAgICAgICAgWygna2EnLCfRgdOZ0LvQtdC8JywnJywxLEZhbHNlLCcnKSwKICAgICAgICAgICAgICAgICAgICAgKCdrYScsJ9GB0LDQu9Cw0LwnLCcnLDEsRmFsc2UsJycpLAogICAgICAgICAgICAgICAgICAgICAoJ2thJywn0YHTmdC70LXQvNC10YLRgdGW0LfQtNC10YAnLCcnLDEsRmFsc2UsJ3Jlc3BlY3RhYmxlJyldCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgKCIqQ2hpbmVzZShNYW5kYXJpbik6W1vkvaDlpb1dXShuaTMgaGFvMyksIFtb5oKo5aW9XV0oJydmb3JtYWwnJyBuaW4yIGhhbzMpIiwKICAgICAgICAgICAgICAgICAgICBbKCd6aCcsJ+S9oOWlvScsJycsMSxGYWxzZSwnbmkzIGhhbzMnKSwKICAgICAgICAgICAgICAgICAgICAgKCd6aCcsJ+aCqOWlvScsJycsMSxGYWxzZSwiJydmb3JtYWwnJyBuaW4yIGhhbzMiKV0KICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAoIipHZXJtYW46IFtbTGFtbV1dICcnbicnIFtbOmRlOkxhbW18KGRlKV1dIiwKICAgICAgICAgICAgICAgICAgICBbKCdkZScsJ0xhbW0nLCduJywxLEZhbHNlLCcnKV0KICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAoIipJdGFsaWFuOiBbW3Byb250byNJdGFsaWFufHByb250b11dIiwKICAgICAgICAgICAgICAgICAgICBbKCdpdCcsJ3Byb250bycsJycsMSxGYWxzZSwnJyldCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgKQoKICAgIGRlZiB0ZXN0UGFyc2VyKHNlbGYpOgogICAgICAgICcnJ3NlbGYudGVybSwgc2VsZi5nZW5kZXIsIHNlbGYubnVtYmVyLCBzZWxmLmRpbWludXRpdmUgYW5kIHJlbWFyayBwYXJzZWQgY29ycmVjdGx5IGZyb20gV2lraSBmb3JtYXQnJycKICAgICAgICBmb3Igd2lraWxpbmUsIHJlc3VsdHMgaW4gc2VsZi5rbm93blBhcnNlclZhbHVlczoKICAgICAgICAgICAgYW1lYW5pbmcgPSBtZWFuaW5nLk1lYW5pbmcoJ2VuJywgJ2R1bW15JykKICAgICAgICAgICAgYW1lYW5pbmcucGFyc2VUcmFuc2xhdGlvbnMod2lraWxpbmUpCiAgICAgICAgICAgIGk9MAogICAgICAgICAgICBmb3IgdGVybWxhbmcsIHRoaXN0ZXJtLCB0ZXJtZ2VuZGVyLCB0ZXJtbnVtYmVyLCB0ZXJtaXNhZGltaW51dGl2ZSwgcmVtYXJrIGluIHJlc3VsdHM6CiAgICAgICAgICAgICAgICByZXN1bHR0ZXJtID0gYW1lYW5pbmcudHJhbnNsYXRpb25zW3Rlcm1sYW5nXVsnYWxsdHJhbnMnXVtpXVsndHJhbnMnXQogICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHR0ZXJtLmdldFRlcm0oKSwgdGhpc3Rlcm0pCiAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHRlcm0uZ2V0R2VuZGVyKCksIHRlcm1nZW5kZXIpCiAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHRlcm0uZ2V0TnVtYmVyKCksIHRlcm1udW1iZXIpCiMgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHR0ZXJtLmdldElzRGltaW51dGl2ZSgpLCB0ZXJtaXNhZGltaW51dGl2ZSkKICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYW1lYW5pbmcudHJhbnNsYXRpb25zW3Rlcm1sYW5nXVsnYWxsdHJhbnMnXVtpXVsncmVtYXJrJ10sIHJlbWFyaykKICAgICAgICAgICAgICAgIGkrPTEKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICB1bml0dGVzdC5tYWluKCkKCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgKCIqW1tFc3BlcmFudG9dXTogW1tncmF2YV1dIiwKICAgICAgICAgICAgICAgICAgICBbKCdlbycsJ2dyYXZhJywnJywxLEZhbHNlLCcnKV0KICAgICAgICAgICAgICAgICksCjx8ZmltX2VuZHw+"]
["bab3d7baeb3d2079d75e42653c4b121418acccde-2","bab3d7baeb3d2079d75e42653c4b121418acccde","PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRhY2xhc3NlcyBpbXBvcnQgZGF0YWNsYXNzLCBmaWVsZApmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwsIFVuaW9uCmZyb20gYmluZGluZ3MuY3N3LmVudmVsb3BlIGltcG9ydCBFbnZlbG9wZQpmcm9tIGJpbmRpbmdzLmNzdy5lbnZlbG9wZV93aXRoX3RpbWVfcGVyaW9kIGltcG9ydCBFbnZlbG9wZVdpdGhUaW1lUGVyaW9kCmZyb20gYmluZGluZ3MuY3N3Lm51bGxfZW51bWVyYXRpb25fdmFsdWUgaW1wb3J0IE51bGxFbnVtZXJhdGlvblZhbHVlCgpfX05BTUVTUEFDRV9fID0gImh0dHA6Ly93d3cub3Blbmdpcy5uZXQvZ21sIgoKCkBkYXRhY2xhc3MKY2xhc3MgQm91bmRpbmdTaGFwZVR5cGU6CiAgICAiIiIKICAgIEJvdW5kaW5nIHNoYXBlLgogICAgIiIiCgogICAgZW52ZWxvcGVfd2l0aF90aW1lX3BlcmlvZDogT3B0aW9uYWxbRW52ZWxvcGVXaXRoVGltZVBlcmlvZF0gPSBmaWVsZCgKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgbWV0YWRhdGE9ewogICAgICAgICAgICAibmFtZSI6ICJFbnZlbG9wZVdpdGhUaW1lUGVyaW9kIiwKICAgICAgICAgICAgInR5cGUiOiAiRWxlbWVudCIsCiAgICAgICAgICAgICJuYW1lc3BhY2UiOiAiaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9nbWwiLAogICAgICAgIH0sCiAgICApCiAgICBlbnZlbG9wZTogT3B0aW9uYWxbRW52ZWxvcGVdID0gZmllbGQoCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIG1ldGFkYXRhPXsKPHxmaW1faG9sZXw+CiAgICAgICAgfSwKICAgICkKICAgIG51bGw6IE9wdGlvbmFsW1VuaW9uW3N0ciwgTnVsbEVudW1lcmF0aW9uVmFsdWVdXSA9IGZpZWxkKAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBtZXRhZGF0YT17CiAgICAgICAgICAgICJuYW1lIjogIk51bGwiLAogICAgICAgICAgICAidHlwZSI6ICJFbGVtZW50IiwKICAgICAgICAgICAgIm5hbWVzcGFjZSI6ICJodHRwOi8vd3d3Lm9wZW5naXMubmV0L2dtbCIsCiAgICAgICAgICAgICJwYXR0ZXJuIjogciJvdGhlcjpcd3syLH0iLAogICAgICAgIH0sCiAgICApCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICJuYW1lIjogIkVudmVsb3BlIiwKICAgICAgICAgICAgInR5cGUiOiAiRWxlbWVudCIsCiAgICAgICAgICAgICJuYW1lc3BhY2UiOiAiaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9nbWwiLAo8fGZpbV9lbmR8Pg=="]
["77c932badecd8ed00686ff9a6794f0fa26e45629-1","77c932badecd8ed00686ff9a6794f0fa26e45629","PHxmaW1fcHJlZml4fD4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgfAojIHwgIFB5dGVzdFRlc3RQYXJzZXIucHkKIyB8CiMgfCAgRGF2aWQgQnJvd25lbGwgPGRiQERhdmlkQnJvd25lbGwuY29tPgojIHwgICAgICAyMDIwLTAxLTA0IDA1OjQzOjE0CiMgfAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyB8CiMgfCAgQ29weXJpZ2h0IERhdmlkIEJyb3duZWxsIDIwMjAtMjIKIyB8ICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIFNlZQojIHwgIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0CiMgfCAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0LgojIHwKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiIiIkNvbnRhaW5zIHRoZSBUZXN0UGFyc2VyIG9iamVjdCIiIgoKaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQgc3lzCgppbXBvcnQgQ29tbW9uRW52aXJvbm1lbnQKZnJvbSBDb21tb25FbnZpcm9ubWVudCBpbXBvcnQgSW50ZXJmYWNlCmZyb20gQ29tbW9uRW52aXJvbm1lbnQuU2hlbGwuQWxsIGltcG9ydCBDdXJyZW50U2hlbGwKZnJvbSBDb21tb25FbnZpcm9ubWVudC5UZXN0UGFyc2VySW1wbCBpbXBvcnQgVGVzdFBhcnNlckltcGwKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpfc2NyaXB0X2Z1bGxwYXRoICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gQ29tbW9uRW52aXJvbm1lbnQuVGhpc0Z1bGxwYXRoKCkKX3NjcmlwdF9kaXIsIF9zY3JpcHRfbmFtZSAgICAgICAgICAgICAgICAgICA9IG9zLnBhdGguc3BsaXQoX3NjcmlwdF9mdWxscGF0aCkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEludGVyZmFjZS5zdGF0aWNkZXJpdmVkCmNsYXNzIFRlc3RQYXJzZXIoVGVzdFBhcnNlckltcGwpOgogICAgIiIiUGFyc2VzIGNvbnRlbnQgcHJvZHVjZWQgYnkgUHl0aG9uJ3MgcHl0ZXN0IGxpYnJhcnkiIiIKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgfCAgUHVibGljIFByb3BlcnRpZXMKICAgIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEludGVyZmFjZS5EZXJpdmVkUHJvcGVydHkoIlB5dGVzdCIpCiAgICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBJbnRlcmZhY2UuRGVyaXZlZFByb3BlcnR5KCJQYXJzZXMgUHl0aG9uIHB5dGVzdCBvdXRwdXQuIikKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgfCAgUHVibGljIE1ldGhvZHMKICAgIEBzdGF0aWNtZXRob2QKICAgIEBJbnRlcmZhY2Uub3ZlcnJpZGUKICAgIGRlZiBJc1N1cHBvcnRlZENvbXBpbGVyKGNvbXBpbGVyKToKICAgICAgICAjIFN1cHBvcnRzIGFueSBjb21waWxlciB0aGF0IHN1cHBvcnRzIHB5dGhvbjsgdXNlIHRoaXMgZmlsZSBhcyBhIHRlc3Qgc3ViamVjdAogICAgICAgIHJldHVybiBjb21waWxlci5Jc1N1cHBvcnRlZChfc2NyaXB0X2Z1bGxwYXRoIGlmIG9zLnBhdGguc3BsaXRleHQoX3NjcmlwdF9uYW1lKVsxXSA9PSAiLnB5IiBlbHNlICJ7fS5weSIuZm9ybWF0KG9zLnBhdGguc3BsaXRleHQoX3NjcmlwdF9mdWxscGF0aClbMF0pKQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgX0lzU3VwcG9ydGVkVGVzdEl0ZW1faW1wb3J0cyAgICAgICAgICAgID0gWwogICAgICAgIHJlLmNvbXBpbGUociJeXHMqaW1wb3J0IHB5dGVzdCIpLAogICAgXQoKICAgIF9Jc1Vuc3VwcG9ydGVkVGVzdEl0ZW1faW1wb3J0cyAgICAgICAgICA9IFsKICAgICAgICAjIElmIHRoZXNlIGltcG9ydHMgYXJlIHByZXNlbnQsIGl0IGlzIE5PVCBhIHB5dGVzdCB0ZXN0IGZpbGUKICAgICAgICByZS5jb21waWxlKHIiXlxzKmltcG9ydCB1bml0dGVzdCIpLAogICAgICAgIHJlLmNvbXBpbGUociJeXHMqZnJvbSB1bml0dGVzdCBpbXBvcnQiKSwKICAgIF0KCiAgICBAY2xhc3NtZXRob2QKICAgIEBJbnRlcmZhY2Uub3ZlcnJpZGUKICAgIGRlZiBJc1N1cHBvcnRlZFRlc3RJdGVtKGNscywgaXRlbSk6CiAgICAgICAgIyBweXRlc3QgaXMgb25seSBzdXBwb3J0ZWQgb24gcHl0aG9uMwogICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPT0gMjoKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICAgICMgVXNlIHRoaXMgcGFyc2VyIGZvciBhbnkgcHl0aG9uIHRlc3QgZmlsZSB0aGF0IGRvZXMgbm90IGV4cGxpY2l0bHkgaW1wb3J0ICd1bml0dGVzdCcKICAgICAgICBhc3NlcnQgb3MucGF0aC5pc2ZpbGUoaXRlbSksIGl0ZW0KCiAgICAgICAgd2l0aCBvcGVuKGl0ZW0pIGFzIGY6CiAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CiAgICAgICAgICAgICAgICBmb3IgcmVnZXggaW4gY2xzLl9Jc1N1cHBvcnRlZFRlc3RJdGVtX2ltcG9ydHM6CiAgICAgICAgICAgICAgICAgICAgaWYgcmVnZXguc2VhcmNoKGxpbmUpOgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQoKICAgICAgICAgICAgICAgIGZvciByZWdleCBpbiBjbHMuX0lzVW5zdXBwb3J0ZWRUZXN0SXRlbV9pbXBvcnRzOgogICAgICAgICAgICAgICAgICAgIGlmIHJlZ2V4LnNlYXJjaChsaW5lKToKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICAgIHJldHVybiBUcnVlCgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBfUGFyc2VfZmFpbGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgPSByZS5jb21waWxlKHIiPT0gRkFJTFVSRVMgPT0iKQogICAgX1BhcnNlX3Bhc3NlZCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gcmUuY29tcGlsZSgKICAgICAgICByIiIiKD8jCiAgICAgICAgICAgIERlbGltaXRlciBwcmVmaXggICAgICAgICAgICAgICAgKT09ICg/IwogICAgICAgICAgICBQYXNzZWQgc3RhdGVtZW50ICAgICAgICAgICAgICAgIClcZCsgcGFzc2VkKD8jCiAgICAgICAgICAgIFNraXBwZWQgc3RhdGVtZW50IFtvcHRpb25hbF0gICAgKSg/OiwgXGQrIHNraXBwZWQpPyg/IwogICAgICAgICAgICBJbiBfX19zICAgICAgICAgICAgICAgICAgICAgICAgICkgaW4gW1xkXC5dK3MoPyMKICAgICAgICAgICAgTWludXRlcyBjb252ZXJzaW9uIFtvcHRpb25hbF0gICApKD86IFwoW1xkOl0rXCkpPyg/IwogICAgICAgICAgICBEZWxpbWl0ZXIgc3VmZml4ICAgICAgICAgICAgICAgICkgPT0oPyMKICAgICAgICApIiIiLAogICAgKQoKICAgIF9QeXRlc3RfdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICA9IHJlLmNvbXBpbGUociIoP1A8dmFsdWU+cHl0ZXN0LVxkK1wuXGQrXC5cZCspIikKICAgIF9CZW5jaG1hcmtfdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICA9IHJlLmNvbXBpbGUociIoP1A8dmFsdWU+YmVuY2htYXJrLVxkK1wuXGQrXC5cZCspIikKCiAgICBfUGFyc2VfYmVuY2htYXJrX2NvbnRlbnQgICAgICAgICAgICAgICAgPSByZS5jb21waWxlKAogICAgICAgIHIiIiIoPyMKICAgICAgICBIZWFkZXIgUHJlZml4ICAgICAgICAgICAgICAgICAgICAgICApLS0tLSsgYmVuY2htYXJrOiBcZCsgdGVzdHMgLS0tLStccj9cbig/IwogICAgICAgIEhlYWRlcgogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgIClOYW1lIFwodGltZSBpbiAoP1A8dW5pdHM+XFMrKVwpXHMrKD8jCiAgICAgICAgICAgIE1pbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKU1pblxzKyg/IwogICAgICAgICAgICBNYXggICAgICAgICAgICAgICAgICAgICAgICAgICAgIClNYXhccysoPyMKICAgICAgICAgICAgTWVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApTWVhblxzKyg/IwogICAgICAgICAgICBTdGREZXYgICAgICAgICAgICAgICAgICAgICAgICAgIClTdGREZXZccysoPyMKICAgICAgICAgICAgTWVkaWFuICAgICAgICAgICAgICAgICAgICAgICAgICApTWVkaWFuXHMrKD8jCiAgICAgICAgICAgIEludGVyUXVhcnRpbGUgUmFuZ2UgICAgICAgICAgICAgKUlRUlxzKyg/IwogICAgICAgICAgICBPdXRsaW5lcnMgICAgICAgICAgICAgICAgICAgICAgIClPdXRsaWVyc1xzKyg/IwogICAgICAgICAgICBPcGVyYXRpb25zIHBlciBzZWNvbmQgICAgICAgICAgIClPUFMgXChNb3BzL3NcKVxzKyg/IwogICAgICAgICAgICBSb3VuZHMgICAgICAgICAgICAgICAgICAgICAgICAgIClSb3VuZHNccysoPyMKICAgICAgICAgICAgSXRlcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICApSXRlcmF0aW9uc1xyP1xuKD8jCiAgICAgICAgSGVhZGVyIFN1ZmZpeCAgICAgICAgICAgICAgICAgICAgICAgKS0tLS0rXHI/XG4oPyMKICAgICAgICBDb250ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKD9QPGNvbnRlbnQ+LispXHI/XG4oPyMKICAgICAgICBGb290ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLS0tLStccj9cbig/IwogICAgICAgICkiIiIsCjx8ZmltX2hvbGV8PgogICAgKQoKICAgIF9QYXJzZV9iZW5jaG1hcmtfbGluZV9pdGVtICAgICAgICAgICAgICA9IHJlLmNvbXBpbGUoCiAgICAgICAgciIiIig/IwogICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkoP1A8bmFtZT5cUyspXHMrKD8jCiAgICAgICAgTWluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSg/UDxtaW4+e2Zsb2F0X3JlZ2V4fSkoPzogXCgoP1A8bWluX2Rldj57ZmxvYXRfcmVnZXh9KVwpKT9ccysoPyMKICAgICAgICBNYXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKD9QPG1heD57ZmxvYXRfcmVnZXh9KSg/OiBcKCg/UDxtYXhfZGV2PntmbG9hdF9yZWdleH0pXCkpP1xzKyg/IwogICAgICAgIE1lYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkoP1A8bWVhbj57ZmxvYXRfcmVnZXh9KSg/OiBcKCg/UDxtZWFuX2Rldj57ZmxvYXRfcmVnZXh9KVwpKT9ccysoPyMKICAgICAgICBTdGREZXYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKD9QPHN0ZF9kZXY+e2Zsb2F0X3JlZ2V4fSkoPzogXCgoP1A8c3RkX2Rldl9kZXY+e2Zsb2F0X3JlZ2V4fSlcKSk/XHMrKD8jCiAgICAgICAgTWVkaWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSg/UDxtZWRpYW4+e2Zsb2F0X3JlZ2V4fSkoPzogXCgoP1A8bWVkaWFuX2Rldj57ZmxvYXRfcmVnZXh9KVwpKT9ccysoPyMKICAgICAgICBJUVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKD9QPGlxcj57ZmxvYXRfcmVnZXh9KSg/OiBcKCg/UDxpcXJfZGV2PntmbG9hdF9yZWdleH0pXCkpP1xzKyg/IwogICAgICAgIE91dGxpZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICkoP1A8b3V0bGllcl9maXJzdD5cZCspOyg/UDxvdXRsaWVyX3NlY29uZD5cZCspXHMrKD8jCiAgICAgICAgT1BTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSg/UDxvcHM+e2Zsb2F0X3JlZ2V4fSkoPzogXCgoP1A8b3BzX2Rldj57ZmxvYXRfcmVnZXh9KVwpKT9ccysoPyMKICAgICAgICBSb3VuZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKD9QPHJvdW5kcz5cZCspXHMrKD8jCiAgICAgICAgSXRlcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgKSg/UDxpdGVyYXRpb25zPlxkKykoPyMKICAgICAgICApIiIiLmZvcm1hdCgKICAgICAgICAgICAgZmxvYXRfcmVnZXg9ciJbXGQsXStcLlxkKyIsCiAgICAgICAgKSwKICAgICkKCiAgICBAY2xhc3NtZXRob2QKICAgIEBJbnRlcmZhY2Uub3ZlcnJpZGUKICAgIGRlZiBQYXJzZShjbHMsIHRlc3RfZGF0YSk6CiAgICAgICAgaWYgY2xzLl9QYXJzZV9mYWlsZWQuc2VhcmNoKHRlc3RfZGF0YSk6CiAgICAgICAgICAgIHJldHVybiAtMQoKICAgICAgICBpZiBub3QgY2xzLl9QYXJzZV9wYXNzZWQuc2VhcmNoKHRlc3RfZGF0YSk6CiAgICAgICAgICAgIHJldHVybiAxCgogICAgICAgIGJlbmNobWFya3MgPSBbXQoKICAgICAgICBtYXRjaCA9IGNscy5fUGFyc2VfYmVuY2htYXJrX2NvbnRlbnQuc2VhcmNoKHRlc3RfZGF0YSkKICAgICAgICBpZiBtYXRjaDoKICAgICAgICAgICAgIyBHZXQgdGhlIHB5dGVzdCBhbmQgYmVuY2htYXJrIHZlcnNpb25zCiAgICAgICAgICAgIHB5dGVzdF92ZXJzaW9uID0gY2xzLl9QeXRlc3RfdmVyc2lvbi5zZWFyY2godGVzdF9kYXRhKQogICAgICAgICAgICBhc3NlcnQgcHl0ZXN0X3ZlcnNpb24KICAgICAgICAgICAgcHl0ZXN0X3ZlcnNpb24gPSBweXRlc3RfdmVyc2lvbi5ncm91cCgidmFsdWUiKQoKICAgICAgICAgICAgYmVuY2htYXJrX3ZlcnNpb24gPSBjbHMuX0JlbmNobWFya192ZXJzaW9uLnNlYXJjaCh0ZXN0X2RhdGEpCiAgICAgICAgICAgIGFzc2VydCBiZW5jaG1hcmtfdmVyc2lvbgogICAgICAgICAgICBiZW5jaG1hcmtfdmVyc2lvbiA9IGJlbmNobWFya192ZXJzaW9uLmdyb3VwKCJ2YWx1ZSIpCgogICAgICAgICAgICAjIFBhcnNlIHRoZSBtYXRjaAogICAgICAgICAgICB1bml0cyA9IG1hdGNoLmdyb3VwKCJ1bml0cyIpCiAgICAgICAgICAgIG1hdGNoID0gbWF0Y2guZ3JvdXAoImNvbnRlbnQiKQoKICAgICAgICAgICAgZm9yIGxpbmVfaXRlbSBpbiBtYXRjaC5zcGxpdCgiXG4iKToKICAgICAgICAgICAgICAgIGxpbmVfaXRlbSA9IGxpbmVfaXRlbS5zdHJpcCgpCgogICAgICAgICAgICAgICAgbWF0Y2ggPSBjbHMuX1BhcnNlX2JlbmNobWFya19saW5lX2l0ZW0ubWF0Y2gobGluZV9pdGVtKQogICAgICAgICAgICAgICAgYXNzZXJ0IG1hdGNoLCBsaW5lX2l0ZW0KCiAgICAgICAgICAgICAgICBiZW5jaG1hcmtzLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICBUZXN0UGFyc2VySW1wbC5CZW5jaG1hcmtTdGF0KAogICAgICAgICAgICAgICAgICAgICAgICBtYXRjaC5ncm91cCgibmFtZSIpLAogICAgICAgICAgICAgICAgICAgICAgICBjbHMuX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAxLCAjIExpbmUgbnVtYmVyCiAgICAgICAgICAgICAgICAgICAgICAgICJ7fSwge30iLmZvcm1hdChweXRlc3RfdmVyc2lvbiwgYmVuY2htYXJrX3ZlcnNpb24pLAogICAgICAgICAgICAgICAgICAgICAgICBmbG9hdChtYXRjaC5ncm91cCgibWluIikucmVwbGFjZSgiLCIsICIiKSksCiAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KG1hdGNoLmdyb3VwKCJtYXgiKS5yZXBsYWNlKCIsIiwgIiIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQobWF0Y2guZ3JvdXAoIm1lYW4iKS5yZXBsYWNlKCIsIiwgIiIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQobWF0Y2guZ3JvdXAoInN0ZF9kZXYiKS5yZXBsYWNlKCIsIiwgIiIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50KG1hdGNoLmdyb3VwKCJyb3VuZHMiKSksCiAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRzLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQobWF0Y2guZ3JvdXAoIml0ZXJhdGlvbnMiKSksCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICkKCiAgICAgICAgaWYgYmVuY2htYXJrczoKICAgICAgICAgICAgcmV0dXJuIDAsIHsgImJlbmNobWFya3MiIDogYmVuY2htYXJrcyB9CgogICAgICAgIHJldHVybiAwCgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBAY2xhc3NtZXRob2QKICAgIEBJbnRlcmZhY2Uub3ZlcnJpZGUKICAgIGRlZiBDcmVhdGVJbnZva2VDb21tYW5kTGluZShjbHMsIGNvbnRleHQsIGRlYnVnX29uX2Vycm9yKToKICAgICAgICAjIFN0b3JlIHRoZSBmaWxlbmFtZSBmb3IgbGF0ZXIKICAgICAgICBjbHMuX2ZpbGVuYW1lID0gY29udGV4dFsiaW5wdXQiXQoKICAgICAgICBjb21tYW5kX2xpbmVfcHJlZml4ID0gJ3B5dGVzdCAtLXZlcmJvc2UgLXZ2IC0tY2FwdHVyZT1ubycKCiAgICAgICAgaWYgQ3VycmVudFNoZWxsLkNhdGVnb3J5TmFtZSA9PSAiV2luZG93cyI6CiAgICAgICAgICAgIGNvbW1hbmRfbGluZV9wcmVmaXggKz0gIiAtVyBpZ25vcmU6OkRlcHJlY2F0aW9uV2FybmluZzpweXdpbnR5cGVzIgoKICAgICAgICByZXR1cm4gJ3t9ICJ7fSInLmZvcm1hdCgKICAgICAgICAgICAgY29tbWFuZF9saW5lX3ByZWZpeCwKICAgICAgICAgICAgc3VwZXIoVGVzdFBhcnNlciwgY2xzKS5DcmVhdGVJbnZva2VDb21tYW5kTGluZShjb250ZXh0LCBkZWJ1Z19vbl9lcnJvciksCiAgICAgICAgKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJlLkRPVEFMTCB8IHJlLk1VTFRJTElORSwKPHxmaW1fZW5kfD4="]
["2327683f6a6853ff45f4e9cc03c422f5da2219e7-2","2327683f6a6853ff45f4e9cc03c422f5da2219e7","PHxmaW1fcHJlZml4fD4KZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNvdW50Cgpmcm9tIC4ubGlicmFyeS5udW1iZXJfdGhlb3J5LnByaW1lcyBpbXBvcnQgaXNfcHJpbWUsIHByaW1lX3NpZXZlCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpkZWYgY29uc2VjdXRpdmUoYTogaW50LCBiOiBpbnQsIHNpZXZlKSAtPiBpbnQ6CiAgICAjIGFzc3VtZSBiIHByaW1lCgo8fGZpbV9lbmR8Pg=="]
["3b526d6bfcbbd64ae9a56ec0a709e9b5494db486-1","3b526d6bfcbbd64ae9a56ec0a709e9b5494db486","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxpYnJvc2EKaW1wb3J0IHRpbWVzdGFtcF90b19waXRjaCBhcyB0cAppbXBvcnQgcmVhZF9jc3Zfb25zZXRzIGFzIHJjbwppbXBvcnQgbnVtcHkgYXMgbnAJCmltcG9ydCBjcmVwZSBhcyBjcnAKZnJvbSBzY2lweS5pbyBpbXBvcnQgd2F2ZmlsZQpmcm9tIHRpbWVpdCBpbXBvcnQgZGVmYXVsdF90aW1lciBhcyB0aW1lcgppbXBvcnQgc3lzLCBvcwpzeXMucGF0aC5pbnNlcnQoMCwgIi4uL2JpbiIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBzeXMgaW1wb3J0IGFyZ3YKaW1wb3J0IGd1aXRhYiBhcyBndAoKZGVmIGdlbmVyYXRlQ1NWKGZpbGVwYXRoKToKPHxmaW1fZW5kfD4="]
["88d9428b19dba560502c20f7cb4c5f684b6e2fa6-3","88d9428b19dba560502c20f7cb4c5f684b6e2fa6","PHxmaW1fcHJlZml4fD4KIwo8fGZpbV9ob2xlfD4KIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAojIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKIwojIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAojIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiMKIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgojIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAojIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQojIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAojIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCiMgU09GVFdBUkUuCgpmcm9tIGRhdGFjbGFzc2VzIGltcG9ydCBkYXRhY2xhc3MKCmZyb20gc2hvdWxkZXIuZ2FkZ2V0LmdhZGdldF9wcm9wZXJ0aWVzIGltcG9ydCBHYWRnZXRQcm9wZXJ0aWVzCgpAZGF0YWNsYXNzCmNsYXNzIHByb3BlcnRpZXMoR2FkZ2V0UHJvcGVydGllcyk6CiAgICAiIiIgUHJvcGVydGllcyBvZiB0aGUgaW5jbHVkZV9ndWFyZCBnYWRnZXQgIiIiCgogICAgZ2FkZ2V0X25hbWU6IHN0ciA9ICJzaG91bGRlci5pbmNsdWRlX2d1YXJkIgogICAgIiIiIE5hbWUgb2YgdGhlIGdhZGdldCB0aGVzZSBwcm9wZXJ0aWVzIGFwcGx5IHRvICIiIgoKICAgIG5hbWU6IHN0ciA9ICJTSE9VTERFUl9BQVJDSDY0X0giCiAgICAiIiIgVGhlIG5hbWUgb2YgdGhlIGluY2x1ZGUgZ3VhcmQgIiIiCgpkZWYgaW5jbHVkZV9ndWFyZChkZWNvcmF0ZWQpOgogICAgIiIiCiAgICBBIGRlY29yYXRvciBnYWRnZXQgdGhhdCBnZW5lcmF0ZXMgaW5jbHVkZSBndWFyZHMgZm9yIEMvQysrIGhlYWRlciBmaWxlcwoKICAgIFVzYWdlOgogICAgICAgIEBpbmNsdWRlX2d1YXJkCiAgICAgICAgZnVuY3Rpb24oZ2VuZXJhdG9yLCBvdXRmaWxlLCAuLi4pOgogICAgICAgICAgICBvdXRmaWxlLndyaXRlKCJjb250ZW50cyBwcm90ZWN0ZWQgYnkgdGhlIGluY2x1ZGUgZ3VhcmQiKQoKICAgIEdlbmVyYXRlczoKICAgICAgICAjaWZuZGVmIFNIT1VMREVSX0FBUkNINjRfSAogICAgICAgICNkZWZpbmUgU0hPVUxERVJfQUFSQ0g2NF9ICiAgICAgICAgY29udGVudHMgcHJvdGVjdGVkIGJ5IHRoZSBpbmNsdWRlIGd1YXJkCiAgICAgICAgI2VuZGlmCiAgICAiIiIKICAgIGRlZiBpbmNsdWRlX2d1YXJkX2RlY29yYXRvcihnZW5lcmF0b3IsIG91dGZpbGUsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgcHJvcGVydGllcyA9IGdlbmVyYXRvci5nYWRnZXRzWyJzaG91bGRlci5pbmNsdWRlX2d1YXJkIl0KCiAgICAgICAgb3V0ZmlsZS53cml0ZSgiI2lmbmRlZiAiICsgc3RyKHByb3BlcnRpZXMubmFtZSkgKyAiXG4iKQogICAgICAgIG91dGZpbGUud3JpdGUoIiNkZWZpbmUgIiArIHN0cihwcm9wZXJ0aWVzLm5hbWUpICsgIlxuXG4iKQogICAgICAgIGRlY29yYXRlZChnZW5lcmF0b3IsIG91dGZpbGUsICphcmdzLCAqKmt3YXJncykKICAgICAgICBvdXRmaWxlLndyaXRlKCIjZW5kaWZcbiIpCiAgICByZXR1cm4gaW5jbHVkZV9ndWFyZF9kZWNvcmF0b3IKPHxmaW1fc3VmZml4fD4KIyBTaG91bGRlcgojIENvcHlyaWdodCAoQykgMjAxOCBBc3N1cmVkIEluZm9ybWF0aW9uIFNlY3VyaXR5LCBJbmMuCiMKIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cjx8ZmltX2VuZHw+"]
["0345095b9f97012efd853a9c079733ee3aa6827e-5","0345095b9f97012efd853a9c079733ee3aa6827e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdApmcm9tIGRqYW5nby5jb250cmliLmF1dGggaW1wb3J0IGdldF91c2VyX21vZGVsCmZyb20gbWl4ZXIuYmFja2VuZC5kamFuZ28gaW1wb3J0IG1peGVyCgpmcm9tIHBlcnNvbl9hcHAubW9kZWxzIGltcG9ydCBQZXJzb24sIEJpcnRoCmZyb20gY29yZS5tb2RlbHMgaW1wb3J0ICgKICAgIERhdGVUaW1lLAogICAgR2l2TmFtZSwKICAgIFN1ck5hbWUsCiAgICBTVVJOQU1FX0RJQ1QsCikKCnB5dGVzdG1hcmsgPSBweXRlc3QubWFyay5kamFuZ29fZGIKCgpjbGFzcyBUZXN0QmlydGg6CiAgICBkZWYgdGVzdF9iaXJ0aChzZWxmKToKICAgICAgICBpbnN0YW5jZSA9IG1peGVyLmJsZW5kKEJpcnRoKQogICAgICAgIGFzc2VydCBpbnN0YW5jZQogICAgICAgIGFzc2VydCBpbnN0YW5jZS5wawoKICAgIGRlZiB0ZXN0X3BlcnNvbihzZWxmKToKICAgICAgICBwZXJzb24gPSBtaXhlci5ibGVuZChQZXJzb24pCiAgICAgICAgYmlydGggPSBtaXhlci5ibGVuZChCaXJ0aCkKICAgICAgICBiaXJ0aC5wZXJzb24gPSBwZXJzb24ucGsKICAgICAgICBiaXJ0aC5zYXZlKCkKICAgICAgICBhc3NlcnQgYmlydGgucGVyc29uID09IHBlcnNvbgoKICAgICAgICBwZXJzb24gPSBtaXhlci5ibGVuZChQZXJzb24pCiAgICAgICAgYmlydGgucGVyc29uID0gcGVyc29uCiAgICAgICAgYmlydGguc2F2ZSgpCiAgICAgICAgYXNzZXJ0IGJpcnRoLnBlcnNvbiA9PSBwZXJzb24KCiAgICBkZWYgdGVzdF9naXZuYW1lX2dldHRlcihzZWxmKToKICAgICAgICBiaXJ0aCA9IG1peGVyLmJsZW5kKEJpcnRoKQoKICAgICAgICBhc3NlcnQgbm90IGJpcnRoLmdpdm5hbWUKCiAgICAgICAgYmlydGguX2dpdm5hbWUgPSBHaXZOYW1lLm9iamVjdHMuY3JlYXRlKGdpdm5hbWU9J2FiYycpCiAgICAgICAgYmlydGguc2F2ZSgpCiAgICAgICAgYXNzZXJ0IGJpcnRoLmdpdm5hbWUgPT0gJ2FiYycKCiAgICBkZWYgdGVzdF9naXZuYW1lX3NldHRlcihzZWxmKToKICAgICAgICBiaXJ0aCA9IG1peGVyLmJsZW5kKEJpcnRoKQoKICAgICAgICBhc3NlcnQgYmlydGguX2dpdm5hbWUgaXMgTm9uZQoKICAgICAgICAjIEFyZ3VtZW50IGlzIHN0cgogICAgICAgIGJpcnRoLmdpdm5hbWUgPSAnWXl50LjQuScKICAgICAgICBiaXJ0aC5zYXZlKCkKICAgICAgICBhc3NlcnQgYmlydGguX2dpdm5hbWUuZ2l2bmFtZSA9PSAnWXl50LjQuScKICAgICAgICBiaXJ0aC5naXZuYW1lID0gTm9uZQogICAgICAgIGJpcnRoLnNhdmUoKQogICAgICAgIGFzc2VydCBiaXJ0aC5fZ2l2bmFtZSBpcyBOb25lCgogICAgICAgICMgQXJndW1lbnQgaXMgR2l2TmFtZQogICAgICAgIGJpcnRoLmdpdm5hbWUgPSBHaXZOYW1lLm9iamVjdHMuY3JlYXRlKGdpdm5hbWU9J1l5edC40LknKQogICAgICAgIGJpcnRoLnNhdmUoKQogICAgICAgIGFzc2VydCBiaXJ0aC5fZ2l2bmFtZS5naXZuYW1lID09ICdZeXnQuNC5JwogICAgICAgIGJpcnRoLmdpdm5hbWUgPSBOb25lCiAgICAgICAgYmlydGguc2F2ZSgpCiAgICAgICAgYXNzZXJ0IGJpcnRoLl9naXZuYW1lIGlzIE5vbmUKCiAgICBkZWYgdGVzdF9zdXJuYW1lX2dldHRlcihzZWxmKToKICAgICAgICBiaXJ0aCA9IG1peGVyLmJsZW5kKEJpcnRoKQoKICAgICAgICBhc3NlcnQgYmlydGguc3VybmFtZSA9PSAnJwoKICAgICAgICAjIE1hbGUKICAgICAgICBiaXJ0aC5nZW5kZXIgPSAnTScKICAgICAgICBiaXJ0aC5fc3VybmFtZSA9IFN1ck5hbWUub2JqZWN0cy5jcmVhdGUoCiAgICAgICAgICAgIF9zdXJuYW1lX21hbGU9J1l5edC40LknLAogICAgICAgICAgICBfc3VybmFtZV9mZW1hbGU9J1h4eNCw0Y8nLAogICAgICAgICkKICAgICAgICBiaXJ0aC5zYXZlKCkKICAgICAgICBhc3NlcnQgYmlydGguc3VybmFtZSA9PSAnWXl50LjQuScKCiAgICAgICAgIyBGZW1hbGUKICAgICAgICBiaXJ0aC5nZW5kZXIgPSAnRicKICAgICAgICBiaXJ0aC5zYXZlKCkKICAgICAgICBhc3NlcnQgYmlydGguc3VybmFtZSA9PSAnWHh40LDRjycKCiAgICBkZWYgdGVzdF9zdXJuYW1lX3NldHRlcihzZWxmKToKICAgICAgICBiaXJ0aCA9IG1peGVyLmJsZW5kKEJpcnRoKQoKICAgICAgICBhc3NlcnQgYmlydGguX3N1cm5hbWUgaXMgTm9uZQoKICAgICAgICAjIE1hbGUKICAgICAgICBiaXJ0aC5nZW5kZXIgPSAnTScKCiAgICAgICAgIyBBcmd1bWVudCBpcyBzdHIKICAgICAgICBiaXJ0aC5zdXJuYW1lID0gJ1l5edC40LknCiAgICAgICAgYmlydGguc2F2ZSgpCiAgICAgICAgYXNzZXJ0IGJpcnRoLl9zdXJuYW1lLl9zdXJuYW1lX21hbGUgPT0gJ1l5edC40LknCiAgICAgICAgYmlydGguc3VybmFtZSA9IE5vbmUKICAgICAgICBiaXJ0aC5zYXZlKCkKICAgICAgICBhc3NlcnQgYmlydGguX3N1cm5hbWUgaXMgTm9uZQoKICAgICAgICAjIEFyZ3VtZW50IGlzIFN1ck5hbWUKICAgICAgICBiaXJ0aC5zdXJuYW1lID0gU3VyTmFtZS5vYmplY3RzLmNyZWF0ZShfc3VybmFtZV9tYWxlPSdZeXnQuNC5JykKICAgICAgICBiaXJ0aC5zYXZlKCkKICAgICAgICBhc3NlcnQgYmlydGguX3N1cm5hbWUuX3N1cm5hbWVfbWFsZSA9PSAnWXl50LjQuScKICAgICAgICBiaXJ0aC5zdXJuYW1lID0gTm9uZQogICAgICAgIGJpcnRoLnNhdmUoKQogICAgICAgIGFzc2VydCBiaXJ0aC5fc3VybmFtZSBpcyBOb25lCgogICAgICAgICMgRmVtYWxlCiAgICAgICAgYmlydGguZ2VuZGVyID0gJ0YnCgogICAgICAgICMgQXJndW1lbnQgaXMgc3RyCiAgICAgICAgYmlydGguc3VybmFtZSA9ICdYeHjQsNGPJwogICAgICAgIGJpcnRoLnNhdmUoKQogICAgICAgIGFzc2VydCBiaXJ0aC5fc3VybmFtZS5fc3VybmFtZV9mZW1hbGUgPT0gJ1h4eNCw0Y8nCiAgICAgICAgYmlydGguc3VybmFtZSA9IE5vbmUKICAgICAgICBiaXJ0aC5zYXZlKCkKICAgICAgICBhc3NlcnQgYmlydGguX3N1cm5hbWUgaXMgTm9uZQoKICAgICAgICAjIEFyZ3VtZW50IGlzIFN1ck5hbWUKICAgICAgICBiaXJ0aC5zdXJuYW1lID0gU3VyTmFtZS5vYmplY3RzLmNyZWF0ZShfc3VybmFtZV9mZW1hbGU9J1h4eNCw0Y8nKQogICAgICAgIGJpcnRoLnNhdmUoKQogICAgICAgIGFzc2VydCBiaXJ0aC5fc3VybmFtZS5fc3VybmFtZV9mZW1hbGUgPT0gJ1h4eNCw0Y8nCiAgICAgICAgYmlydGguc3VybmFtZSA9IE5vbmUKICAgICAgICBiaXJ0aC5zYXZlKCkKICAgICAgICBhc3NlcnQgYmlydGguX3N1cm5hbWUgaXMgTm9uZQoKICAgIGR0X2RhdGEgPSB7CiAgICAgICAgJ3llYXInOiAyMDAwLAogICAgICAgICdtb250aCc6IDYsCiAgICAgICAgJ2RheSc6IDE1LAogICAgICAgICdob3VyJzogMTIsCiAgICAgICAgJ21pbnV0ZSc6IDMwLAogICAgfQoKICAgIGRlZiB0ZXN0X2RhdGV0aW1lX2dldHRlcihzZWxmKToKICAgICAgICBiaXJ0aCA9IG1peGVyLmJsZW5kKEJpcnRoKQoKICAgICAgICBhc3NlcnQgbm90IGJpcnRoLl9kYXRldGltZQoKICAgICAgICBvYmogPSBtaXhlci5ibGVuZChEYXRlVGltZSkKICAgICAgICBmb3Iga2V5IGluIHNlbGYuZHRfZGF0YToKICAgICAgICAgICAgdmFsdWUgPSBzZWxmLmR0X2RhdGEuZ2V0KGtleSkKICAgICAgICAgICAgc2V0YXR0cihvYmosIGtleSwgdmFsdWUpCiAgICAgICAgb2JqLnNhdmUoKQogICAgICAgIGJpcnRoLl9kYXRldGltZSA9IG9iagogICAgICAgIGFzc2VydCBiaXJ0aC5kYXRldGltZSA9PSBzZWxmLmR0X2RhdGEKCiAgICBkZWYgdGVzdF9kYXRldGltZV9zZXR0ZXIoc2VsZik6CiAgICAgICAgYmlydGggPSBtaXhlci5ibGVuZChCaXJ0aCkKCiAgICAgICAgYXNzZXJ0IGJpcnRoLl9kYXRldGltZSBpcyBOb25lCgogICAgICAgIGJpcnRoLmRhdGV0aW1lID0gc2VsZi5kdF9kYXRhCiAgICAgICAgYmlydGguc2F2ZSgpCiAgICAgICAgZm9yIGtleSBpbiBzZWxmLmR0X2RhdGE6CiAgICAgICAgICAgIHZhbHVlID0gc2VsZi5kdF9kYXRhLmdldChrZXkpCiAgICAgICAgICAgIGFzc2VydCBnZXRhdHRyKGJpcnRoLl9kYXRldGltZSwga2V5LCB2YWx1ZSkgPT0gdmFsdWUKCiAgICAgICAgYmlydGguZGF0ZXRpbWUgPSBOb25lCiAgICAgICAgYmlydGguc2F2ZSgpCiAgICAgICAgYXNzZXJ0IGJpcnRoLl9kYXRldGltZSBpcyBOb25lCgogICAgZGVmIHRlc3RfbGluayhzZWxmKToKICAgICAgICBkYXRhID0gewogICAgICAgICAgICAnZ2l2bmFtZSc6IFtHaXZOYW1lLCAn0JjQstCw0L0nLCAnX2dpdm5hbWUnXSwKICAgICAgICAgICAgJ3N1cm5hbWUnOiBbU3VyTmFtZSwgJ9CY0LLQsNC90L7QsicsICdfc3VybmFtZSddLAogICAgICAgICAgICAnZGF0ZXRpbWUnOiBbRGF0ZVRpbWUsIHNlbGYuZHRfZGF0YSwgJ19kYXRldGltZSddLAogICAgICAgICAgICAjJ2RhdGV0aW1lJzogW0RhdGVUaW1lLCB7fSwgJ19kYXRldGltZSddLAogICAgICAgIH0KCiAgICAgICAgZm9yIGtleSBpbiBkYXRhOgogICAgICAgICAgICBvYmogPSBkYXRhLmdldChrZXkpWzBdCiAgICAgICAgICAgIHZhbHVlID0gZGF0YS5nZXQoa2V5KVsxXQogICAgICAgICAgICBfID0gZGF0YS5nZXQoa2V5KVsyXQoKICAgICAgICAgICAgYmlydGggPSBtaXhlci5ibGVuZChCaXJ0aCkKICAgICAgICAgICAgYnBrMSA9IGJpcnRoLnBrCiAgICAgICAgICAgIHNldGF0dHIoYmlydGgsIGtleSwgdmFsdWUpCiAgICAgICAgICAgIGJpcnRoLnNhdmUoKQogICAgICAgICAgICBhc3NlcnQgb2JqLm9iamVjdHMuYWxsKCkuY291bnQoKSA9PSAxCiAgICAgICAgICAgIGFzc2VydCBvYmoub2JqZWN0cy5maWx0ZXIobGluaz0xKS5jb3VudCgpID09IDEKCiAgICAgICAgICAgIGJpcnRoID0gbWl4ZXIuYmxlbmQoQmlydGgpCiAgICAgICAgICAgIGJwazIgPSBiaXJ0aC5wawogICAgICAgICAgICBzZXRhdHRyKGJpcnRoLCBrZXksIHZhbHVlKQogICAgICAgICAgICBiaXJ0aC5zYXZlKCkKICAgICAgICAgICAgYXNzZXJ0IG9iai5vYmplY3RzLmFsbCgpLmNvdW50KCkgPT0gMQogICAgICAgICAgICBhc3NlcnQgb2JqLm9iamVjdHMuZmlsdGVyKGxpbms9MikuY291bnQoKSA9PSAxCgogICAgICAgICAgICBiaXJ0aCA9IEJpcnRoLm9iamVjdHMuZ2V0KHBrPWJwazEpCiAgICAgICAgICAgIHNldGF0dHIoYmlydGgsIGtleSwgTm9uZSkKICAgICAgICAgICAgYmlydGguc2F2ZSgpCiAgICAgICAgICAgIGFzc2VydCBvYmoub2JqZWN0cy5hbGwoKS5jb3VudCgpID09IDEKICAgICAgICAgICAgYXNzZXJ0IG9iai5vYmplY3RzLmZpbHRlcihsaW5rPTEpLmNvdW50KCkgPT0gMQoKICAgICAgICAgICAgQmlydGgub2JqZWN0cy5nZXQocGs9YnBrMikuZGVsZXRlKCkKICAgICAgICAgICAgYXNzZXJ0IG9iai5vYmplY3RzLmFsbCgpLmNvdW50KCkgPT0gMAoKICAgICAgICAgICAgaWYgaGFzYXR0cihvYmosICdub3RlJyk6CiAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IG1peGVyLmJsZW5kKG9iaikKICAgICAgICAgICAgICAgIGluc3RhbmNlLm5vdGUgPSAnSGVsbG8nCiAgICAgICAgICAgICAgICBpbnN0YW5jZS5zYXZlKCkKICAgICAgICAgICAgICAgIGJpcnRoID0gQmlydGgub2JqZWN0cy5nZXQocGs9YnBrMSkKICAgICAgICAgICAgICAgIHNldGF0dHIoYmlydGgsIGtleSwgdmFsdWUpCiAgICAgICAgICAgICAgICBiaXJ0aC5zYXZlKCkKICAgICAgICAgICAgICAgIGFzc2VydCBvYmoub2JqZWN0cy5nZXQobGluaz0xKQoKICAgICAgICAgICAgICAgIGJpcnRoID0gbWl4ZXIuYmxlbmQoQmlydGgpCiAgICAgICAgICAgICAgICBicGsyID0gYmlydGgucGsKICAgICAgICAgICAgICAgIGJpcnRoID0gQmlydGgub2JqZWN0cy5nZXQocGs9YnBrMikKICAgICAgICAgICAgICAgIHNldGF0dHIoYmlydGgsIGtleSwgdmFsdWUpCiAgICAgICAgICAgICAgICBiaXJ0aC5zYXZlKCkKICAgICAgICAgICAgICAgIGFzc2VydCBvYmoub2JqZWN0cy5nZXQobGluaz0yKQoKICAgICAgICAgICAgICAgIEJpcnRoLm9iamVjdHMuZ2V0KHBrPWJwazIpLmRlbGV0ZSgpCiAgICAgICAgICAgICAgICBhc3NlcnQgb2JqLm9iamVjdHMuZ2V0KGxpbms9MSkKCiAgICAgICAgICAgICAgICBiaXJ0aCA9IEJpcnRoLm9iamVjdHMuZ2V0KHBrPWJwazEpCiAgICAgICAgICAgICAgICBzZXRhdHRyKGJpcnRoLCBrZXksIE5vbmUpCiAgICAgICAgICAgICAgICBiaXJ0aC5zYXZlKCkKICAgICAgICAgICAgICAgIGFzc2VydCBvYmoub2JqZWN0cy5nZXQobGluaz0wKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICBhc3NlcnQgb2JqLm9iamVjdHMuYWxsKCkuY291bnQoKSA9PSAxCiAgICAgICAgICAgICAgICBvID0gb2JqLm9iamVjdHMuZ2V0KGxpbms9MCkKICAgICAgICAgICAgICAgIG8ubm90ZSA9ICcnCiAgICAgICAgICAgICAgICBvLnNhdmUoKQo8fGZpbV9lbmR8Pg=="]
["24323d4a7f6bc94b8042da371ae521f092dc6346-1","24323d4a7f6bc94b8042da371ae521f092dc6346","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNvbGxlY3Rpb25zCgoKY2xhc3MgTWVhbkZpbHRlcjoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsZW5ndGgpOgogICAgICAgIHNlbGYudmFsdWVfbGlzdCA9IGNvbGxlY3Rpb25zLmRlcXVlKG1heGxlbj1sZW5ndGgpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgY29tcHV0ZV9tZWFuKHNlbGYsIHZhbHVlKToKICAgICAgICBzZWxmLnZhbHVlX2xpc3QuYXBwZW5kKHZhbHVlKQogICAgICAgIG1lYW4gPSBzdW0oc2VsZi52YWx1ZV9saXN0KSAvIGxlbihzZWxmLnZhbHVlX2xpc3QpCiAgICAgICAgcmV0dXJuIG1lYW4KPHxmaW1fZW5kfD4="]
["79fb028cef8d6d6ad72b089156cfd8d077f9c8aa-2","79fb028cef8d6d6ad72b089156cfd8d077f9c8aa","PHxmaW1fcHJlZml4fD4KIyMlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQojIyAgICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uIHZpYSBGREEgZm9yIFRFIGRhdGEKIyMgJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQoKIyUlIGltcG9ydCByZXF1aXJlZCBwYWNrYWdlcwppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAoKIyUlIGZldGNoIFRFUCBkYXRhIGZvciBmYXVsdHMgNSwxMCwxOSAKVEVkYXRhX0ZhdWx0NV90cmFpbiA9IG5wLmxvYWR0eHQoJ2QwNS5kYXQnKQpURWRhdGFfRmF1bHQxMF90cmFpbiA9IG5wLmxvYWR0eHQoJ2QxMC5kYXQnKQpURWRhdGFfRmF1bHQxOV90cmFpbiA9IG5wLmxvYWR0eHQoJ2QxOS5kYXQnKQpURWRhdGFfRmF1bHR5X3RyYWluID0gbnAudnN0YWNrKChURWRhdGFfRmF1bHQ1X3RyYWluLCBURWRhdGFfRmF1bHQxMF90cmFpbiwgVEVkYXRhX0ZhdWx0MTlfdHJhaW4pKQoKIyBzZWxlY3QgdmFyaWFibGVzIGFzIGRvbmUgaW4gTGVlIGV0IGFsLgp4bWVhcyA9IFRFZGF0YV9GYXVsdHlfdHJhaW5bOiwwOjIyXQp4bXYgPSBURWRhdGFfRmF1bHR5X3RyYWluWzosNDE6NTJdCmRhdGFfRmF1bHR5X3RyYWluID0gbnAuaHN0YWNrKCh4bWVhcywgeG12KSkKCiMgZ2VuZXJhdGUgc2FtcGxlIGxhYmVscwpuX3Jvd3NfdHJhaW4gPSBURWRhdGFfRmF1bHQ1X3RyYWluLnNoYXBlWzBdCnlfdHJhaW4gPSBucC5jb25jYXRlbmF0ZSgoNSpucC5vbmVzKG5fcm93c190cmFpbiwpLCAxMCpucC5vbmVzKG5fcm93c190cmFpbiwpLCAxOSpucC5vbmVzKG5fcm93c190cmFpbiwpKSkKICAgICAgICAgCiMlJSBzY2FsZSBkYXRhCmZyb20gc2tsZWFybi5wcmVwcm9jZXNzaW5nIGltcG9ydCBTdGFuZGFyZFNjYWxlcgpzY2FsZXIgPSBTdGFuZGFyZFNjYWxlcigpCkZhdWx0eWRhdGFfdHJhaW5fc2NhbGVkID0gc2NhbGVyLmZpdF90cmFuc2Zvcm0oZGF0YV9GYXVsdHlfdHJhaW4pCgojJSUgdmlzdWFsaXplIGFsbCBzY2FsZWQgdmFyaWFibGVzCnBsdC5maWd1cmUoKQpwbHQucGxvdChGYXVsdHlkYXRhX3RyYWluX3NjYWxlZCkKcGx0LnNob3coKQogICAgICAgICAgIAojJSUgZml0IExEQSBtb2RlbApmcm9tIHNrbGVhcm4uZGlzY3JpbWluYW50X2FuYWx5c2lzIGltcG9ydCBMaW5lYXJEaXNjcmltaW5hbnRBbmFseXNpcwpsZGEgPSBMaW5lYXJEaXNjcmltaW5hbnRBbmFseXNpcygpCnNjb3Jlc190cmFpbl9sZGEgPSBsZGEuZml0X3RyYW5zZm9ybShGYXVsdHlkYXRhX3RyYWluX3NjYWxlZCwgeV90cmFpbikKCiMlJSB2aXN1YWxpemUgTERBIHNjb3JlcwpwbHQuZmlndXJlKCkKcGx0LnBsb3Qoc2NvcmVzX3RyYWluX2xkYVswOm5fcm93c190cmFpbiwwXSwgc2NvcmVzX3RyYWluX2xkYVswOm5fcm93c190cmFpbiwxXSwgJ2IuJywgbGFiZWw9J0ZhdWx0IDUnKQpwbHQucGxvdChzY29yZXNfdHJhaW5fbGRhW25fcm93c190cmFpbjoyKm5fcm93c190cmFpbiwwXSwgc2NvcmVzX3RyYWluX2xkYVtuX3Jvd3NfdHJhaW46MipuX3Jvd3NfdHJhaW4sMV0sICdyLicsIGxhYmVsPSdGYXVsdCAxMCcpCnBsdC5wbG90KHNjb3Jlc190cmFpbl9sZGFbMipuX3Jvd3NfdHJhaW46MypuX3Jvd3NfdHJhaW4sMF0sIHNjb3Jlc190cmFpbl9sZGFbMipuX3Jvd3NfdHJhaW46MypuX3Jvd3NfdHJhaW4sMV0sICdtLicsIGxhYmVsPSdGYXVsdCAxOScpCnBsdC5sZWdlbmQoKQpwbHQueGxhYmVsKCdGRDEgKHRyYWluaW5nIGRhdGEpJykKcGx0LnlsYWJlbCgnRkQyICh0cmFpbmluZyBkYXRhKScpCgojJSUgZml0IFBDQSBtb2RlbApmcm9tIHNrbGVhcm4uZGVjb21wb3NpdGlvbiBpbXBvcnQgUENBCnBjYSA9IFBDQShuX2NvbXBvbmVudHM9MikKc2NvcmVzX3RyYWluX3BjYSA9IHBjYS5maXRfdHJhbnNmb3JtKEZhdWx0eWRhdGFfdHJhaW5fc2NhbGVkKQoKIyUlIHZpc3VhbGl6ZSBQQ0Egc2NvcmVzCnBsdC5maWd1cmUoKQpwbHQucGxvdChzY29yZXNfdHJhaW5fcGNhWzA6bl9yb3dzX3RyYWluLDBdLCBzY29yZXNfdHJhaW5fcGNhWzA6bl9yb3dzX3RyYWluLDFdLCAnYi4nLCBsYWJlbD0nRmF1bHQgNScpCnBsdC5wbG90KHNjb3Jlc190cmFpbl9wY2Fbbl9yb3dzX3RyYWluOjIqbl9yb3dzX3RyYWluLDBdLCBzY29yZXNfdHJhaW5fcGNhW25fcm93c190cmFpbjoyKm5fcm93c190cmFpbiwxXSwgJ3IuJywgbGFiZWw9J0ZhdWx0IDEwJykKcGx0LnBsb3Qoc2NvcmVzX3RyYWluX3BjYVsyKm5fcm93c190cmFpbjozKm5fcm93c190cmFpbiwwXSwgc2NvcmVzX3RyYWluX3BjYVsyKm5fcm93c190cmFpbjozKm5fcm93c190cmFpbiwxXSwgJ20uJywgbGFiZWw9J0ZhdWx0IDE5JykKcGx0LmxlZ2VuZCgpCnBsdC54bGFiZWwoJ1BDMSAodHJhaW5pbmcgZGF0YSknKQpwbHQueWxhYmVsKCdQQzIgKHRyYWluaW5nIGRhdGEpJykKCiMjJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKIyMgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc3VhbGl6ZSB0ZXN0IGRhdGEgCiMjICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKIyUlIGZldGNoIFRFIGRhdGEKVEVkYXRhX0ZhdWx0NV90ZXN0ID0gbnAubG9hZHR4dCgnZDA1X3RlLmRhdCcpClRFZGF0YV9GYXVsdDVfdGVzdCA9IFRFZGF0YV9GYXVsdDVfdGVzdFsxNjA6LDpdClRFZGF0YV9GYXVsdDEwX3Rlc3QgPSBucC5sb2FkdHh0KCdkMTBfdGUuZGF0JykKVEVkYXRhX0ZhdWx0MTBfdGVzdCA9IFRFZGF0YV9GYXVsdDEwX3Rlc3RbMTYwOiw6XQpURWRhdGFfRmF1bHQxOV90ZXN0ID0gbnAubG9hZHR4dCgnZDE5X3RlLmRhdCcpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KVEVkYXRhX0ZhdWx0MTlfdGVzdCA9IFRFZGF0YV9GYXVsdDE5X3Rlc3RbMTYwOiw6XQpURWRhdGFfRmF1bHR5X3Rlc3QgPSBucC52c3RhY2soKFRFZGF0YV9GYXVsdDVfdGVzdCwgVEVkYXRhX0ZhdWx0MTBfdGVzdCwgVEVkYXRhX0ZhdWx0MTlfdGVzdCkpCgojIHNlbGVjdCB2YXJpYWJsZXMgYXMgZG9uZSBpbiBMZWUgZXQgYWwuCjx8ZmltX2VuZHw+"]
["3075c03f918f02fc735a99f59224f24c3892952f-1","3075c03f918f02fc735a99f59224f24c3892952f","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiLQmNCz0YDQsCDQtNGD0YDQsNC6INCyINGC0LXQutGB0YLQvtCy0L7QvCDRhNC+0YDQvNCw0YLQtSIiIgojINCc0L7QtNGD0LvRjCBzeXMg0L7QsdC10YHQv9C10YfQuNCy0LDQtdGCINC00L7RgdGC0YPQvyDQuiDQvdC10LrQvtGC0L7RgNGL0Lwg0L/QtdGA0LXQvNC10L3QvdGL0Lwg0Lgg0YTRg9C90LrRhtC40Y/QvAojINCy0LfQsNC40LzQvtC00LXQudGB0YLQstGD0Y7RidC40Lwg0YEg0LjQvdGC0LXRgNC/0YDQtdGC0LDRgtC+0YDQvtC8IHB5dGhvbgppbXBvcnQgc3lzCiPQnNC+0LTRg9C70Ywg0YHQu9GD0YfQsNC50L3Ri9GFINGH0LjRgdC10LsKaW1wb3J0IHJhbmRvbQoKZnJvbSBjb25maWcgaW1wb3J0ICoKZnJvbSBnYW1lX3Byb2Nlc2VzLmdhbWUgaW1wb3J0IGNvdW50X2JhdHRsZXMsbWVldF9wbGF5ZXJzLGRlYWwsZ29lc19maXJzdCxiYXR0bGUsdGFrZSxjb3VudF9lbXB0eQpmcm9tIHByZXBhcmF0aW9uLmNyZWF0ZV9kZXNrX3NodWZmbGUgaW1wb3J0IGNyZWF0ZV9kZWNrLHNodWZmbGUKCgpkZWYgbWFpbigqYXJncyk6CiAgICAi0L/QsNGA0YLQuNC4INC40LPRgNGLIgogICAgZ2xvYmFsIHRydW1wCiAgICAjcHJpbnQoYXJncykKICAgIHByaW50KCLQmNCT0KDQkCDQlNCj0KDQkNCaIikKICAgICPQtNGD0YDQsNC60L7QsiDQv9C+0LrQsCDQvdC10YIKICAgIGZvb2wgPSBOb25lCiAgICAj0YHRh9C10YLRh9C40Log0LPQtdC90LXRgNCw0YLQvtGACiAgICBjb3VudCA9IGNvdW50X2JhdHRsZXMoKQogICAgI9C60L7Qu9C+0LTQsAogICAgZGVjayA9IFtdCiAgICAj0LHQuNGC0YvQtSDQutCw0YDRgtGLCiAgICBwbGF5ZWQgPSBbXQogICAgIyDRgdGC0L7QuwogICAgdGFibGUgPSBbXQogICAgI9C40LPRgNC+0LrQuAogICAgcGxheWVycyA9IFtdCiAgICBtZWV0X3BsYXllcnMocGxheWVycykKICAgICPQv9Cw0YDRgtC40LgKICAgIG1vcmUgPSAieWVzIgogICAgd2hpbGUgbW9yZSA9PSAieWVzIjoKICAgICAgICBwcmludChjcmVhdGVfZGVjayhkZWNrKSkj0LTQvtGB0YLQsNC10Lwg0LrQvtC70L7QvdGDCiAgICAgICAgcHJpbnQoc2h1ZmZsZShkZWNrKSkgIyDQvNC10YjQsNC10Lwg0LrQvtC70L7QtNGDCiAgICAgICAgcHJpbnQoZGVhbChwbGF5ZXJzLGRlY2ssdGFibGUpKSPRgNCw0LfQtNCw0LXQvCDQutC+0LvQvtC00YMKICAgICAgICBhdHRhY2tlciA9IGdvZXNfZmlyc3QocGxheWVycykj0LrRgtC+INGF0L7QtNC40YIg0L/QtdGA0LLRi9C8CiAgICAgICAgZG9uZSA9IEZhbHNlCiAgICAgICAgd2hpbGUgbm90IGRvbmU6CiAgICAgICAgICAgIHJlc3VsdCA9IGJhdHRsZShhdHRhY2tlcixwbGF5ZXJzLHRhYmxlLGRlY2sscGxheWVkLGNvdW50KQogICAgICAgICAgICBhdHRhY2tlciA9IHJlc3VsdFsibmV4dCJdI9C60YLQviDRgdC70LXQtNGD0Y7RidC40LkKICAgICAgICAgICAgaWYgdGFrZShyZXN1bHQscGxheWVycyx0YWJsZSxkZWNrKSBhbmQgY291bnRfZW1wdHkocGxheWVycykgPj0gbGVuKHBsYXllcnMpLTE6CiAgICAgICAgICAgICAgICBkb25lID0gVHJ1ZQogICAgICAgICAgICAgICAgZm9vbCA9IE5vbmUKICAgICAgICAgICAgICAgIGZvciBpLHAgaW4gZW51bWVyYXRlKHBsYXllcnMpOgogICAgICAgICAgICAgICAgICAgIGlmIGxlbihwWyJoYW5kIl0pICE9MDpmb29sID0gaQogICAgICAgICAgICAjZG9uZSA9IFRydWUjIyMg0L7RgtC70LDQtNC60LAKICAgICAgICAjZm9vbCA9IDEjIyMKICAgICAgICBpZiBmb29sIGlzIE5vbmU6CiAgICAgICAgICAgIHByaW50KCLQndC40YfRjNGPIC0g0LTRg9GA0LDQutC+0LIg0L3QtdGCIikKICAgICAgICBlbHNlOgogICAgICAgICAgICBwbGF5ZXJzW2Zvb2xdWyJsYXN0Il0gPSBUcnVlCiAgICAgICAgICAgIHBsYXllcnNbZm9vbF1bImZvb2wiXSArPSAxCiAgICAgICAgICAgIHByaW50KCLQlNGD0YDQsNC6INGN0YLQvtC5INC/0LDRgNGC0LjQuCDRjdGC0L4iLHBsYXllcnNbZm9vbF1bIm5hbWUiXSkKICAgICAgICBwbGF5ZWQuY2xlYXIoKSAgIyDRg9Cx0LjRgNCw0LXQvCDQvtGC0YvQs9GA0LDQvdC90YvQtSDQutCw0YDRgtGLCiAgICAgICAgdGFibGUuY2xlYXIoKSAgIyDRh9C40YHRgtGL0Lkg0YHRgtC+0LsKCjx8ZmltX2hvbGV8PgoKIyDQv9GA0L7QstC10YDQutCwINGH0YLQviDQvNC+0LTRg9C70Ywg0LfQsNC/0YPRidC10L0g0LrQsNC6INCz0LvQsNCy0L3Ri9C5CiMg0Lgg0LfQsNC/0YPRgdC6INCz0LvQsNCy0L3QvtC5INCyIG1haW4KaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjptYWluKHN5cy5hcmd2KQoKCgoKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgcHJpbnQoItCY0JPQoNCQINCX0JDQktCV0KDQqNCV0J3QkCIpCiAgICAgICAgbW9yZSA9IGlucHV0KCLQktCy0LXQtNC40YLQtSB5ZXMg0LTQu9GPINC10YnRkSDQvtC00L3QvtC5INC/0LDRgNGC0LjQuDoiKQoKPHxmaW1fZW5kfD4="]
["cce5e5e9c2f8617a6efc79ab9c5fe874589bf9a4-2","cce5e5e9c2f8617a6efc79ab9c5fe874589bf9a4","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiJBbGZyZWQgUmVwb3NpdG9yeSBDbGFzcyIiIgppbXBvcnQgbG9nZ2luZwppbXBvcnQganNvbgppbXBvcnQgYm90bzMKZnJvbSByZXF1ZXN0cyBpbXBvcnQgZ2V0LCBleGNlcHRpb25zCgpfTE9HR0VSID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKY2xhc3MgUmVwb3NpdG9yeSgpOgogICAgIiIiQUxmcmVkIHJlcG9zaXRvcnkiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgYnVja2V0KToKICAgICAgICAiIiJSZXBvc2l0b3J5IENvbnN0cnVjdG9yIiIiCiAgICAgICAgc2VsZi5idWNrZXQgPSBidWNrZXQKICAgICAgICBzZWxmLm1LZXkgPSAnbW92aWVzLmpzb24nCiAgICAgICAgc2VsZi5uS2V5ID0gJ25vdGlmaWVkLnR4dCcKICAgICAgICBzZWxmLnMzID0gYm90bzMucmVzb3VyY2UoJ3MzJykKICAgICAgICBzZWxmLm5vdGlmaWVkID0gc2VsZi5sb2FkX25vdGlmaWVkKCkKCiAgICBkZWYgbG9hZF9ub3RpZmllZChzZWxmKToKICAgICAgICAiIiJMb2FkIGFscmVhZHkgbm90aWZpZWQgbW92aWVzIGZyb20gZmlsZSIiIgogICAgICAgICIiIkdldCBtb3ZpZXMvZW1haWxzIGZyb20gcmVwbyIiIgogICAgICAgIHRyeToKICAgICAgICAgICAgb2JqID0gc2VsZi5zMy5PYmplY3Qoc2VsZi5idWNrZXQsIHNlbGYubktleSkKICAgICAgICAgICAgcmV0dXJuIG9iai5nZXQoKVsnQm9keSddLnJlYWQoKS5kZWNvZGUoJ3V0Zi04Jykuc3BsaXRsaW5lcygpCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICBzZWxmLnMzLkJ1Y2tldChzZWxmLmJ1Y2tldCkucHV0X29iamVjdCgKICAgICAgICAgICAgICAgIEtleT1zZWxmLm5LZXksIEJvZHk9JycuZW5jb2RlKCd1dGYtOCcpKQogICAgICAgICAgICByZXR1cm4gW10KCiAgICBkZWYgc2F2ZV9ub3RpZmllZChzZWxmLCBtb3ZpZXMpOgogICAgICAgICIiImFwcGVuZCBub3RpZmllZCBtb3ZpZSB0byBmaWxlIiIiCiAgICAgICAgc2VsZi5ub3RpZmllZCArPSBtb3ZpZXMKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYuczMuQnVja2V0KHNlbGYuYnVja2V0KS5wdXRfb2JqZWN0KAogICAgICAgICAgICAgICAgS2V5PXNlbGYubktleSwgQm9keT0nXG4nLmpvaW4oc2VsZi5ub3RpZmllZCkuZW5jb2RlKCd1dGYtOCcpKQogICAgICAgIGV4Y2VwdDoKPHxmaW1faG9sZXw+CiAgICBkZWYgZ2V0X21vdmllcyhzZWxmKToKICAgICAgICAiIiJHZXQgbW92aWVzL2VtYWlscyBmcm9tIHJlcG8iIiIKICAgICAgICB0cnk6CiAgICAgICAgICAgIG9iaiA9IHNlbGYuczMuT2JqZWN0KHNlbGYuYnVja2V0LCBzZWxmLm1LZXkpCiAgICAgICAgICAgIGRhdGEgPSBvYmouZ2V0KClbJ0JvZHknXS5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCiAgICAgICAgICAgIG1vdmllcyA9IGpzb24ubG9hZHMoZGF0YSkKICAgICAgICAgICAgZmlsdGVyZWRfbW92aWVzID0gZGljdCgoaywgdikgZm9yIGssIHYgaW4gbW92aWVzLml0ZW1zKCkgaWYgayBub3QgaW4gc2VsZi5ub3RpZmllZCkKICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkX21vdmllcwogICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGVycm9yOgogICAgICAgICAgICBfTE9HR0VSLmV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdDb3VsZCBub3QgcGFyc2UgSlNPTiBjb250ZW50OiAlcycpCiAgICAgICAgICAgIHJldHVybiB7fQogICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZXJyb3I6CiAgICAgICAgICAgIF9MT0dHRVIuZXhjZXB0aW9uKCdGYWlsZWQgdG8gc2VyaWFsaXplIHRvIEpTT04nKQogICAgICAgICAgICByZXR1cm4ge30KICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHJldHVybiB7fQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICByZXR1cm4gW10KCjx8ZmltX2VuZHw+"]
["034746a1171167ddff4f3d7530d4a55dcb5f9060-3","034746a1171167ddff4f3d7530d4a55dcb5f9060","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3RlbXBsYXRlLCByZWRpcmVjdCwgdXJsX2ZvciwgZmxhc2gsIHJlcXVlc3QsIHNlc3Npb24KZnJvbSBmbGFza19sb2dpbiBpbXBvcnQgbG9naW5fcmVxdWlyZWQsIGN1cnJlbnRfdXNlcgoKZnJvbSBhcHAuY29uZmlnIGltcG9ydCBFTUFJTF9ET01BSU4sIEhJR0hMSUdIVF9HRU5fRU1BSUxfSUQKZnJvbSBhcHAuZGFzaGJvYXJkLmJhc2UgaW1wb3J0IGRhc2hib2FyZF9icApmcm9tIGFwcC5leHRlbnNpb25zIGltcG9ydCBkYgpmcm9tIGFwcC5sb2cgaW1wb3J0IExPRwpmcm9tIGFwcC5tb2RlbHMgaW1wb3J0IEdlbkVtYWlsLCBEZWxldGVkQWxpYXMsIEN1c3RvbURvbWFpbgpmcm9tIGFwcC51dGlscyBpbXBvcnQgY29udmVydF90b19pZCwgcmFuZG9tX3dvcmQKCgpAZGFzaGJvYXJkX2JwLnJvdXRlKCIvY3VzdG9tX2FsaWFzIiwgbWV0aG9kcz1bIkdFVCIsICJQT1NUIl0pCkBsb2dpbl9yZXF1aXJlZApkZWYgY3VzdG9tX2FsaWFzKCk6CiAgICAjIGNoZWNrIGlmIHVzZXIgaGFzIHRoZSByaWdodCB0byBjcmVhdGUgY3VzdG9tIGFsaWFzCiAgICBpZiBub3QgY3VycmVudF91c2VyLmNhbl9jcmVhdGVfbmV3X2FsaWFzKCk6CiAgICAgICAgIyBub3RpZnkgYWRtaW4KICAgICAgICBMT0cuZXJyb3IoInVzZXIgJXMgdHJpZXMgdG8gY3JlYXRlIGN1c3RvbSBhbGlhcyIsIGN1cnJlbnRfdXNlcikKICAgICAgICBmbGFzaCgib255IHByZW1pdW0gdXNlciBjYW4gY2hvb3NlIGN1c3RvbSBhbGlhcyIsICJ3YXJuaW5nIikKICAgICAgICByZXR1cm4gcmVkaXJlY3QodXJsX2ZvcigiZGFzaGJvYXJkLmluZGV4IikpCgogICAgZXJyb3IgPSAiIgoKICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICJQT1NUIjoKICAgICAgICBpZiByZXF1ZXN0LmZvcm0uZ2V0KCJmb3JtLW5hbWUiKSA9PSAibm9uLWN1c3RvbS1kb21haW4tbmFtZSI6CiAgICAgICAgICAgIGVtYWlsX3ByZWZpeCA9IHJlcXVlc3QuZm9ybS5nZXQoImVtYWlsLXByZWZpeCIpCiAgICAgICAgICAgIGVtYWlsX3ByZWZpeCA9IGNvbnZlcnRfdG9faWQoZW1haWxfcHJlZml4KQogICAgICAgICAgICBlbWFpbF9zdWZmaXggPSByZXF1ZXN0LmZvcm0uZ2V0KCJlbWFpbC1zdWZmaXgiKQoKICAgICAgICAgICAgaWYgbm90IGVtYWlsX3ByZWZpeDoKICAgICAgICAgICAgICAgIGVycm9yID0gImFsaWFzIHByZWZpeCBjYW5ub3QgYmUgZW1wdHkiCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBmdWxsX2VtYWlsID0gZiJ7ZW1haWxfcHJlZml4fS57ZW1haWxfc3VmZml4fUB7RU1BSUxfRE9NQUlOfSIKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgZW1haWwgYWxyZWFkeSBleGlzdHMKICAgICAgICAgICAgICAgIGlmIEdlbkVtYWlsLmdldF9ieShlbWFpbD1mdWxsX2VtYWlsKSBvciBEZWxldGVkQWxpYXMuZ2V0X2J5KAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgZW1haWw9ZnVsbF9lbWFpbAo8fGZpbV9lbmR8Pg=="]
["15d20323d41a00c7399a9a8d61c950460a21ab34-4","15d20323d41a00c7399a9a8d61c950460a21ab34","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKZnJvbSBwcmV0dHlxdCBpbXBvcnQgbG9jYXRpb24KZnJvbSBwcmV0dHlxdC5xdCBpbXBvcnQgUXRMb2NhdGlvbgoKCmNsYXNzIFBsYWNlQ2F0ZWdvcnkoUXRMb2NhdGlvbi5RUGxhY2VDYXRlZ29yeSk6CiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5uYW1lKCkKCiAgICBkZWYgX19ib29sX18oc2VsZik6CiAgICAgICAgcmV0dXJuIG5vdCBzZWxmLmlzRW1wdHkoKQoKICAgIGRlZiBnZXRfaWNvbihzZWxmKSAtPiBsb2NhdGlvbi5QbGFjZUljb24gfCBOb25lOgogICAgICAgIGljb24gPSBzZWxmLmljb24oKQogICAgICAgIGlmIGljb24uaXNFbXB0eSgpOgogICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgIHJldHVybiBsb2NhdGlvbi5QbGFjZUljb24oaWNvbikKCiAgICBkZWYgZ2V0X3Zpc2liaWxpdHkoc2VsZikgLT4gbG9jYXRpb24uVmlzaWJpbGl0eVN0cjoKICAgICAgICAiIiJSZXR1cm4gdGhlIHZpc2liaWxpdHkgb2YgdGhlIHBsYWNlLgo8fGZpbV9ob2xlfD4KICAgICAgICByZXR1cm4gbG9jYXRpb24uVklTSUJJTElUWS5pbnZlcnNlW3NlbGYudmlzaWJpbGl0eSgpXQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBjYXRlZ29yeSA9IFBsYWNlQ2F0ZWdvcnkoKQogICAgcHJpbnQoYm9vbChjYXRlZ29yeSkpCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIFZpc2liaWxpdHkKICAgICAgICAiIiIKPHxmaW1fZW5kfD4="]
["23021e3fa567deacba82ef8ee3f9c9005cc6b1e2-3","23021e3fa567deacba82ef8ee3f9c9005cc6b1e2","PHxmaW1fcHJlZml4fD4KX192ZXJzaW9uX18gPSAiMC4zLjQiCgpfX2F1dGhvcl9fID0gIlRlcnJhbGVnbyIKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KX19lbWFpbF9fID0gInRlcnJhbGVnby1weXBpQG1ha2luYS1jb3JwdXMuY29tIgo8fGZpbV9lbmR8Pg=="]
["068d6860d39d3d41d21d583b4b61189b42af5cff-1","068d6860d39d3d41d21d583b4b61189b42af5cff","PHxmaW1fcHJlZml4fD4KIyB1bmNvbXB5bGU2IHZlcnNpb24gMy43LjQKIyBQeXRob24gYnl0ZWNvZGUgMy43ICgzMzk0KQojIERlY29tcGlsZWQgZnJvbTogUHl0aG9uIDMuNy45ICh0YWdzL3YzLjcuOToxM2M5NDc0N2M3LCBBdWcgMTcgMjAyMCwgMTg6NTg6MTgpIFtNU0Mgdi4xOTAwIDY0IGJpdCAoQU1ENjQpXQojIEVtYmVkZGVkIGZpbGUgbmFtZTogVDpcSW5HYW1lXEdhbWVwbGF5XFNjcmlwdHNcU2VydmVyXGludGVyYWN0aW9uc1xwYXltZW50XHBheW1lbnRfc291cmNlLnB5CiMgQ29tcGlsZWQgYXQ6IDIwMjAtMDctMDggMDQ6NDM6MDgKIyBTaXplIG9mIHNvdXJjZSBtb2QgMioqMzI6IDg2OTYgYnl0ZXMKZnJvbSBidWNrcy5idWNrc19lbnVtcyBpbXBvcnQgQnVja3NUeXBlCmZyb20gYnVja3MuYnVja3NfdXRpbHMgaW1wb3J0IEJ1Y2tzVXRpbHMKZnJvbSBwcm90b2NvbGJ1ZmZlcnMgaW1wb3J0IENvbnN0c19wYjIKZnJvbSBidXNpbmVzcy5idXNpbmVzc19mdW5kcyBpbXBvcnQgQnVzaW5lc3NGdW5kc0NhdGVnb3J5CmZyb20gaW50ZXJhY3Rpb25zIGltcG9ydCBQYXJ0aWNpcGFudFR5cGUKZnJvbSBzaW1zLmZ1bmRzIGltcG9ydCBGdW5kc1NvdXJjZSwgZ2V0X2Z1bmRzX2Zvcl9zb3VyY2UKZnJvbSBzaW1zNC50dW5pbmcudHVuYWJsZSBpbXBvcnQgVHVuYWJsZVZhcmlhbnQsIEhhc1R1bmFibGVTaW5nbGV0b25GYWN0b3J5LCBBdXRvRmFjdG9yeUluaXQsIFR1bmFibGVFbnVtRW50cnksIFR1bmFibGVSZWZlcmVuY2UsIFR1bmFibGUKaW1wb3J0IHNlcnZpY2VzLCBzaW1zNC5sb2cKbG9nZ2VyID0gc2ltczQubG9nLkxvZ2dlcignUGF5bWVudCcsIGRlZmF1bHRfb3duZXI9J3JtY2NvcmQnKQoKZGVmIGdldF90dW5hYmxlX3BheW1lbnRfc291cmNlX3ZhcmlhbnQoKmFyZ3MsICoqa3dhcmdzKToKICAgIGt3YXJnc1snaG91c2Vob2xkJ10gPSBfUGF5bWVudFNvdXJjZUhvdXNlaG9sZC5UdW5hYmxlRmFjdG9yeSgpCiAgICBrd2FyZ3NbJ2J1c2luZXNzJ10gPSBfUGF5bWVudFNvdXJjZUJ1c2luZXNzLlR1bmFibGVGYWN0b3J5KCkKICAgIGt3YXJnc1snc3RhdGlzdGljJ10gPSBfUGF5bWVudFNvdXJjZVN0YXRpc3RpYy5UdW5hYmxlRmFjdG9yeSgpCiAgICBrd2FyZ3NbJ2J1Y2tzJ10gPSBfUGF5bWVudFNvdXJjZUJ1Y2tzLlR1bmFibGVGYWN0b3J5KCkKICAgIHJldHVybiBUdW5hYmxlVmFyaWFudChhcmdzLCBkZWZhdWx0PSdob3VzZWhvbGQnLCAqKmt3YXJncykKCgpjbGFzcyBfUGF5bWVudFNvdXJjZShIYXNUdW5hYmxlU2luZ2xldG9uRmFjdG9yeSwgQXV0b0ZhY3RvcnlJbml0KToKICAgIEZBQ1RPUllfVFVOQUJMRVMgPSB7J3JlcXVpcmVfZnVsbF9hbW91bnQnOlR1bmFibGUoZGVzY3JpcHRpb249J1xuICAgICAgICAgICAgSWYgRmFsc2UsIHRoZSBwYXltZW50IGVsZW1lbnQgd2lsbCBzdWJ0cmFjdCB3aGF0ZXZlciBmdW5kcyBhcmUgXG4gICAgICAgICAgICBhdmFpbGFibGUgaWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggZnVuZHMuXG4gICAgICAgICAgICAnLAogICAgICAgdHVuYWJsZV90eXBlPWJvb2wsCiAgICAgICBkZWZhdWx0PVRydWUpLCAKICAgICAnYWxsb3dfY3JlZGl0cyc6VHVuYWJsZShkZXNjcmlwdGlvbj0nXG4gICAgICAgICAgICBJZiBGYWxzZSwgdGhlIHBheW1lbnQgZWxlbWVudCB3aWxsIHBlcm1pdCBuZWdhdGl2ZSBwYXltZW50cyAoY3JlZGl0cykuXG4gICAgICAgICAgICAnLAogICAgICAgdHVuYWJsZV90eXBlPWJvb2wsCiAgICAgICBkZWZhdWx0PUZhbHNlKX0KCiAgICBAcHJvcGVydHkKICAgIGRlZiBmdW5kc19zb3VyY2Uoc2VsZik6CiAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIHRyeV9yZW1vdmVfZnVuZHMoc2VsZiwgc2ltLCBhbW91bnQsIHJlc29sdmVyPU5vbmUsIHJlYXNvbj1Ob25lKToKICAgICAgICBmdW5kcyA9IGdldF9mdW5kc19mb3Jfc291cmNlKChzZWxmLmZ1bmRzX3NvdXJjZSksIHNpbT1zaW0pCiAgICAgICAgaWYgYW1vdW50IDwgMDoKPHxmaW1fZW5kfD4="]
["7adeda8f7e4ffaa132694491845bed9c0ad1d8a6-4","7adeda8f7e4ffaa132694491845bed9c0ad1d8a6","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBmaW5kX3BhY2thZ2VzLHNldHVwCgpyZXF1aXJlbWVudHMgPSBvcGVuKCJyZXF1aXJlbWVudHMudHh0IikucmVhZCgpLnN0cmlwKCkuc3BsaXQoIlxuIikKCmV4ZWMob3BlbignY2FuY2VyL19faW5pdF9fLnB5JykucmVhZCgpKQoKc2V0dXAoCgluYW1lPSdjYW5jZXInLAoJcGFja2FnZXM9ZmluZF9wYWNrYWdlcygpLAoJZW50cnlfcG9pbnRzPXsKCQkiY29uc29sZV9zY3JpcHRzIjogWydjYW5jZXIgPSBjYW5jZXIucnVuOm1haW4nXQoJCX0sCgl2ZXJzaW9uPV9fdmVyc2lvbl9fLAoJZGVzY3JpcHRpb249IkFsbCB0aGUgc2NyaXB0cyB3ZXJlIHByZXBhcmVkIGR1cmluZyB3b3JraW5nIHdpdGggUHJvZmVzc29yIEthc2h5YXAiLAoJYXV0aG9yPSJEci4gTWFuanUgS2FzaHlhcCIsCjx8ZmltX2hvbGV8PgoJdXJsPSdodHRwczovL2dpdGh1Yi5jb20vbWFuanUtdXNzL2NhbmNlclNob3J0JwopIAoKPHxmaW1fc3VmZml4fD4KCWxpY2Vuc2U9Ik1JVCIsCglpbmNsdWRlX3BhY2thZ2VfZGF0YT1UcnVlLAoJcGFja2FnZV9kYXRhPXsiY2FuY2VyIjogWyJkYXRhLyoiXX0sCglpbnN0YWxsX3JlcXVpcmVzPXJlcXVpcmVtZW50cywKPHxmaW1fZW5kfD4="]
["2440a213db2942e491a004df51104b35156bcb26-1","2440a213db2942e491a004df51104b35156bcb26","PHxmaW1fcHJlZml4fD4KIiIiTW9kdWxlIHRvIGNvbnRyb2wgdGhlIGlucHV0cyBhbmQgb3V0cHV0cyBvZiB0aGUgY2FyZC4iIiIKCmltcG9ydCBsb2dnaW5nCmZyb20gdHlwaW5nIGltcG9ydCBBbnkKCgpHUElPOiBBbnkgPSBOb25lCiIiIlZhcmlhYmxlIGxpbmtpbmcgdG8gdGhlIHBhY2thZ2UgUlBpLkdQSU8uIiIiCgoKZGVmIHVzZV9ncGlvKHBfdmFsdWU6IGJvb2wpIC0+IE5vbmU6CiAgICAiIiJUZWxscyB0aGUgcmVzdCBvZiB0aGUgbW9kdWxlIGlmIHRoZXkgY2FuIG1vZGlmeSB0aGUgR1BJTyBsZXZlbC4KCiAgICBJZiB0aGUgcGFzc2VkIHBhcmFtZXRlciBpcyBgVHJ1ZWAsIHRoZW4gdGhlIG1vZHVsZSBgUlBpLkdQSU9gIGlzIGltcG9ydGVkLgogICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwcm9ncmFtLgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgcF92YWx1ZSA6IGBib29sYAo8fGZpbV9lbmR8Pg=="]
["30428602a40d07c987068eaa1c611f602c1f8f72-3","30428602a40d07c987068eaa1c611f602c1f8f72","PHxmaW1fcHJlZml4fD4KIiIiVGFza3MgY2FuIGJlIG9wdGlvbmFsbHkgc29sdmVkbgoKUmV2aXNpb24gSUQ6IGE1ZTQ5YWFiYTY1YgpSZXZpc2VzOiBkODk4ZGMxODFmYTAKQ3JlYXRlIERhdGU6IDIwMjEtMTAtMjcgMTk6MzU6MDEuNjgyMTIwCgoiIiIKaW1wb3J0IHNxbGFsY2hlbXkgYXMgc2EKZnJvbSBhbGVtYmljIGltcG9ydCBvcApmcm9tIHNxbGFsY2hlbXkuZGlhbGVjdHMgaW1wb3J0IG15c3FsCmZyb20gc3FsYWxjaGVteS5lbmdpbmUucmVmbGVjdGlvbiBpbXBvcnQgSW5zcGVjdG9yCgojIHJldmlzaW9uIGlkZW50aWZpZXJzLCB1c2VkIGJ5IEFsZW1iaWMuCnJldmlzaW9uID0gImE1ZTQ5YWFiYTY1YiIKZG93bl9yZXZpc2lvbiA9ICJkODk4ZGMxODFmYTAiCmJyYW5jaF9sYWJlbHMgPSBOb25lCmRlcGVuZHNfb24gPSBOb25lCgoKZGVmIHVwZ3JhZGUoKToKICAgICMgIyMjIGNvbW1hbmRzIGF1dG8gZ2VuZXJhdGVkIGJ5IEFsZW1iaWMgLSBwbGVhc2UgYWRqdXN0ISAjIyMKICAgIGNvbm4gPSBvcC5nZXRfYmluZCgpCiAgICBpbnNwZWN0b3IgPSBJbnNwZWN0b3IuZnJvbV9lbmdpbmUoY29ubikKICAgIHRhYmxlcyA9IGluc3BlY3Rvci5nZXRfdGFibGVfbmFtZXMoKQogICAgaWYgInNsaWRlIiBpbiB0YWJsZXM6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBvcC5kcm9wX2luZGV4KCJpeF9zbGlkZV9pZCIsIHRhYmxlX25hbWU9InNsaWRlIikKICAgICAgICAgICAgb3AuZHJvcF9pbmRleCgibmFtZSIsIHRhYmxlX25hbWU9InNsaWRlIikKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgIHByaW50KGUpCgogICAgICAgIHRyeToKICAgICAgICAgICAgb3AuZHJvcF9pbmRleCgibmFtZSIsIHRhYmxlX25hbWU9InNsaWRlIikKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgIHByaW50KGUpCgogICAgICAgIHRyeToKICAgICAgICAgICAgb3AuZHJvcF9pbmRleCgiaXhfc2xpZGVfZmlsZV9pZCIsIHRhYmxlX25hbWU9InNsaWRlIikKICAgICAgICAgICAgb3AuZHJvcF9pbmRleCgibmFtZSIsIHRhYmxlX25hbWU9InNsaWRlIikKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgIHByaW50KGUpCgogICAgICAgIG9wLmRyb3BfdGFibGUoInNsaWRlIikKCiAgICB0cnk6CiAgICAgICAgb3AuY3JlYXRlX2luZGV4KAogICAgICAgICAgICBvcC5mKCJpeF9iYXNldGFza19zbGlkZV9pZCIpLCAiYmFzZXRhc2siLCBbInNsaWRlX2lkIl0sIHVuaXF1ZT1GYWxzZQogICAgICAgICkKICAgICAgICBvcC5hZGRfY29sdW1uKCJ0YXNrIiwgc2EuQ29sdW1uKCJjYW5fYmVfc29sdmVkIiwgc2EuQm9vbGVhbigpLCBudWxsYWJsZT1UcnVlKSkKICAgICAgICBvcC5hbHRlcl9jb2x1bW4oCiAgICAgICAgICAgICJ1c2Vyc29sdXRpb24iLAogICAgICAgICAgICAiZmFpbGVkX2F0dGVtcHRzIiwKICAgICAgICAgICAgZXhpc3RpbmdfdHlwZT1teXNxbC5JTlRFR0VSKCksCiAgICAgICAgICAgIG51bGxhYmxlPUZhbHNlLAogICAgICAgICAgICBleGlzdGluZ19zZXJ2ZXJfZGVmYXVsdD1zYS50ZXh0KCIoMCkiKSwKICAgICAgICApCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgcHJpbnQoZSkKCiAgICAjICMjIyBlbmQgQWxlbWJpYyBjb21tYW5kcyAjIyMKCgpkZWYgZG93bmdyYWRlKCk6CiAgICAjICMjIyBjb21tYW5kcyBhdXRvIGdlbmVyYXRlZCBieSBBbGVtYmljIC0gcGxlYXNlIGFkanVzdCEgIyMjCiAgICBvcC5hbHRlcl9jb2x1bW4oCiAgICAgICAgInVzZXJzb2x1dGlvbiIsCiAgICAgICAgImZhaWxlZF9hdHRlbXB0cyIsCiAgICAgICAgZXhpc3RpbmdfdHlwZT1teXNxbC5JTlRFR0VSKCksCiAgICAgICAgbnVsbGFibGU9VHJ1ZSwKICAgICAgICBleGlzdGluZ19zZXJ2ZXJfZGVmYXVsdD1zYS50ZXh0KCIoMCkiKSwKICAgICkKICAgIG9wLmRyb3BfY29sdW1uKCJ0YXNrIiwgImNhbl9iZV9zb2x2ZWQiKQogICAgb3AuZHJvcF9pbmRleChvcC5mKCJpeF9iYXNldGFza19zbGlkZV9pZCIpLCB0YWJsZV9uYW1lPSJiYXNldGFzayIpCiAgICBvcC5jcmVhdGVfdGFibGUoCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAic2xpZGUiLAogICAgICAgIHNhLkNvbHVtbigiaWQiLCBteXNxbC5JTlRFR0VSKCksIGF1dG9pbmNyZW1lbnQ9VHJ1ZSwgbnVsbGFibGU9RmFsc2UpLAogICAgICAgIHNhLkNvbHVtbigibmFtZSIsIG15c3FsLlZBUkNIQVIobGVuZ3RoPTI1NSksIG51bGxhYmxlPVRydWUpLAogICAgICAgIHNhLkNvbHVtbigiZmlsZV9pZCIsIG15c3FsLlZBUkNIQVIobGVuZ3RoPTI1NSksIG51bGxhYmxlPVRydWUpLAo8fGZpbV9lbmR8Pg=="]
["03241fa4508e01673973ff8761bd4caa7dab9e02-2","03241fa4508e01673973ff8761bd4caa7dab9e02","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDEuMTEgb24gMjAxOS0wMi0yMSAxNjowNgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKCmltcG9ydCBkYXRldGltZQpmcm9tIGRqYW5nby5jb25mIGltcG9ydCBzZXR0aW5ncwpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucywgbW9kZWxzCmltcG9ydCBkamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5zd2FwcGFibGVfZGVwZW5kZW5jeShzZXR0aW5ncy5BVVRIX1VTRVJfTU9ERUwpLAogICAgICAgICgnYWdncmVnYXRvcicsICcwMDM1X21lcmdlXzIwMTkwMjE4XzE0MjMnKSwKICAgIF0KCiAgICBvcGVyYXRpb25zID0gWwogICAgICAgIG1pZ3JhdGlvbnMuQ3JlYXRlTW9kZWwoCiAgICAgICAgICAgIG5hbWU9J0RhdGFzZXRBY2Nlc3NSZXF1ZXN0JywKICAgICAgICAgICAgZmllbGRzPVsKICAgICAgICAgICAgICAgICgnaWQnLCBtb2RlbHMuQXV0b0ZpZWxkKGF1dG9fY3JlYXRlZD1UcnVlLCBwcmltYXJ5X2tleT1UcnVlLCBzZXJpYWxpemU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nSUQnKSksCiAgICAgICAgICAgICAgICAoJ3N0YXR1cycsIG1vZGVscy5DaGFyRmllbGQoY2hvaWNlcz1bKGInb3BlbicsIGInb3BlbicpLCAoYidhY2NlcHRlZCcsIGInYWNjZXB0ZWQnKSwgKGIncmVqZWN0ZWQnLCBiJ3JlamVjdGVkJyldLCBkZWZhdWx0PWInb3BlbicsIG1heF9sZW5ndGg9MjApKSwKICAgICAgICAgICAgICAgICgnY3JlYXRpb25fZGF0ZScsIG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGF0ZXRpbWUuZGF0ZXRpbWUoMjAxOSwgMiwgMjEsIDE4LCA2LCA0OCwgMjgxMDAwKSkpLAogICAgICAgICAgICAgICAgKCdyZXNwb25zZV9kYXRlJywgbW9kZWxzLkRhdGVUaW1lRmllbGQobnVsbD1UcnVlKSksCiAgICAgICAgICAgICAgICAoJ3Jlc291cmNlJywgbW9kZWxzLkZvcmVpZ25LZXkob25fZGVsZXRlPWRqYW5nby5kYi5tb2RlbHMuZGVsZXRpb24uQ0FTQ0FERSwgcmVsYXRlZF9uYW1lPSdyZXNvdXJjZScsIHRvPSdhZ2dyZWdhdG9yLkRhdGFzZXQnKSksCiAgICAgICAgICAgICAgICAoJ3VzZXInLCBtb2RlbHMuRm9yZWlnbktleShvbl9kZWxldGU9ZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbi5DQVNDQURFLCB0bz1zZXR0aW5ncy5BVVRIX1VTRVJfTU9ERUwpKSwKICAgICAgICAgICAgXSwKICAgICAgICApLAogICAgICAgICMgbWlncmF0aW9ucy5BZGRGaWVsZCgKICAgICAgICAjICAgICBtb2RlbF9uYW1lPSdkaW1lbnNpb24nLAogICAgICAgICMgICAgIG5hbWU9J2Rlc2NyaXB0aW9uJywKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICMgICAgIGZpZWxkPW1vZGVscy5UZXh0RmllbGQobnVsbD1UcnVlKSwKICAgICAgICAjICksCiAgICAgICAgIyBtaWdyYXRpb25zLkFkZEZpZWxkKAogICAgICAgICMgICAgIG1vZGVsX25hbWU9J3ZhcmlhYmxlJywKPHxmaW1fZW5kfD4="]
["3061f55f3aa8a7edbfb7e14161220d9405979404-4","3061f55f3aa8a7edbfb7e14161220d9405979404","PHxmaW1fcHJlZml4fD4KUHl0aG9uIDMuOC44ICh0YWdzL3YzLjguODowMjRkODA1LCBGZWIgMTkgMjAyMSwgMTM6MTg6MTYpIFtNU0Mgdi4xOTI4IDY0IGJpdCAoQU1ENjQpXSBvbiB3aW4zMgpUeXBlICJoZWxwIiwgImNvcHlyaWdodCIsICJjcmVkaXRzIiBvciAibGljZW5zZSgpIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KPj4+IAo9PT09PT09PT09PT09PSBSRVNUQVJUOiBDOlxVc2Vyc1xvbWthclxPbmVEcml2ZVxEZXNrdG9wXGxvZ3NfcHkucHkgPT09PT09PT09PT09PQpUaGUgZm9sbG93aW5nIGRhdGEgd2lsbCBiZSBhcHBlbmRlZCB0byBvdXRwdXQuanNvbiBmaWxlCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpEYXRlICA6ICAyMDE1LTA1LTIyIDE2OjQ4OjQ4LDE4MApUeXBlICA6ICBFUlJPUgpNZXNzYWdlICA6ICBGYWlsZWQ6IFdhaXRpbmcgZm9yIGZpbGVzIHRoZSBGaWxlcyBmcm9tIENsb3VkIFN0b3JhZ2U6IGdzOi8vZm9sZGVyL2ZvbGRlci8KCjx8ZmltX2VuZHw+"]
["3048521ae7561af070b8dedab0bec3d9f2717574-1","3048521ae7561af070b8dedab0bec3d9f2717574","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCmZyb20gYnM0IGltcG9ydCBCZWF1dGlmdWxTb3VwCmZyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1cmxwYXJzZQoKVUEgPSAnQ2F0QXJjaGl2ZUJvdC8wLjEuMCAoK2h0dHBzOi8vZ2l0aHViLmNvbS9jYXRhcmNoaXZlKScKCmNsYXNzIFBhZ2U6CiAgICAiIiJSZXByZXNlbnRzIGEgd2VicGFnZSB3aXRoIG1ldGhvZHMgZm9yIGNyYXdsaW5nLiIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmwpOgogICAgICAgIHNlbGYudXJsID0gdXJscGFyc2UodXJsKQogICAgICAgIHNlbGYucGF0aCA9IHNlbGYudXJsLnBhdGggaWYgc2VsZi51cmwucGF0aCAhPSAnJyBlbHNlICcvJwogICAgICAgIHNlbGYucmF3X3VybCA9IHVybAogICAgICAgIHNlbGYubGlua3MgPSBbXQogICAgICAgIHNlbGYuaW1hZ2VzID0gW10KCiAgICBkZWYgZ2V0KHNlbGYpOgogICAgICAgICIiIlNlbmRzIHRoZSByZXF1ZXN0IHRvIGdldCB0aGUgcGFnZSBhbmQgc3RvcmVzIHRoZSByZXNwb25zZSBhcyBzZWxmLnJlc3BvbnNlLiIiIgoKICAgICAgICBzZWxmLnJlc3BvbnNlID0gcmVxdWVzdHMuZ2V0KAogICAgICAgICAgICBzZWxmLnJhd191cmwsCiAgICAgICAgICAgIGhlYWRlcnM9ewogICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBVQQogICAgICAgICAgICB9LAogICAgICAgICAgICB0aW1lb3V0PTMsCiAgICAgICAgICAgIHN0cmVhbT1UcnVlLAogICAgICAgICAgICBhdXRoPSgndXNlcicsICdwYXNzJykKICAgICAgICApCgogICAgZGVmIGV4cGxvcmUoc2VsZik6CiAgICAgICAgIiIiUGFyc2VzIG91dCBsaW5rcyBhbmQgaW1hZ2VzIGZyb20gdGhlIHdlYnBhZ2UgYW5kIHN0b3JlcyB0aGVtIGluIHNlbGYubGlua3MgYW5kIHNlbGYuaW1hZ2VzLCByZXNwZWN0aXZlbHkuIiIiIAoKICAgICAgICAjIFVzZSBCZWF1dGlmdWwgU291cCB0byBwYXJzZSB0aGUgSFRNTCBhbmQgZ2V0IHRoZSBocmVmIG9mIGEgdGFncyBhbmQgc3JjIG9mIGltZyB0YWdzOgogICAgICAgIHBhZ2VfZGF0YSA9IEJlYXV0aWZ1bFNvdXAoc2VsZi5yZXNwb25zZS50ZXh0LCAnaHRtbC5wYXJzZXInKQogICAgICAgIGxpbmtzID0gW2xpbmsuZ2V0KCdocmVmJykgZm9yIGxpbmsgaW4gcGFnZV9kYXRhLmZpbmRfYWxsKCdhJyldCiAgICAgICAgaW1hZ2VzID0gW2ltYWdlLmdldCgnc3JjJykgZm9yIGltYWdlIGluIHBhZ2VfZGF0YS5maW5kX2FsbCgnaW1nJyldCgogICAgICAgIGZvciBsaW5rIGluIGxpbmtzOgogICAgICAgICAgICAjIEZvcm1hdCB0aGUgdXJsOgogICAgICAgICAgICBsaW5rID0gc2VsZi5mb3JtYXRfdXJsKGxpbmspCiAgICAgICAgICAgIGlmIGxpbmsgPT0gJyc6CiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgIyBBcHBlbmQgZWFjaCB2YWxpZCBsaW5rIHRvIHNlbGYubGlua3M6CiAgICAgICAgICAgIHNlbGYubGlua3MuYXBwZW5kKGxpbmspCgogICAgICAgIGZvciBpbWFnZSBpbiBpbWFnZXM6CiAgICAgICAgICAgICMgRm9ybWF0IHRoZSB1cmw6CiAgICAgICAgICAgIGltYWdlID0gc2VsZi5mb3JtYXRfdXJsKGltYWdlKQogICAgICAgICAgICBpZiBpbWFnZSA9PSAnJzoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAjIEFwcGVuZCBlYWNoIHZhbGlkIGltYWdlIHRvIHNlbGYuaW1hZ2VzOgogICAgICAgICAgICBzZWxmLmltYWdlcy5hcHBlbmQoaW1hZ2UpCgogICAgZGVmIGZvcm1hdF91cmwoc2VsZiwgbGluayk6CiAgICAgICAgICAgICIiIkhhbmRsZSB0aGUgbWFueSBkaWZmZXJlbnQgd2F5cyB0byBmb3JtYXQgbGlua3MuIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgICAgIGlmIGxpbmsgPT0gTm9uZSBvciBsaW5rID09ICcnOgogICAgICAgICAgICAgICAgcmV0dXJuICcnCgo8fGZpbV9lbmR8Pg=="]
["3038c1f6847584850b4c3564bf8be8670174b594-2","3038c1f6847584850b4c3564bf8be8670174b594","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHByYXcKaW1wb3J0IGpzb24KaW1wb3J0IG5sdGsKaW1wb3J0IHN0cmluZwpmcm9tIG5sdGsuY29ycHVzIGltcG9ydCBzdG9wd29yZHMKZnJvbSBubHRrLnN0ZW0ucG9ydGVyIGltcG9ydCAqCmZyb20gc2tsZWFybi5mZWF0dXJlX2V4dHJhY3Rpb24udGV4dCBpbXBvcnQgVGZpZGZWZWN0b3JpemVyCmltcG9ydCBvcGVyYXRvcgppbXBvcnQgc3lzCmltcG9ydCB0aHJlYWRpbmcKaW1wb3J0IGNvcHkKaW1wb3J0IHNxbGl0ZTMKCnN0ZW1tZXIgPSBQb3J0ZXJTdGVtbWVyKCkKCnN1YnJlZGRpdHNfbWFpbl9kaWN0ID0ge30Kc3VicmVkZGl0c19sYXJnZV9kaWN0ID0ge30Kc3VicmVkZGl0c19wb2xpdGljYWxfZGljdCA9IHt9CnN1YnJlZGRpdHNfbWV0YV9kaWN0ID0ge30Kc3VicmVkZGl0c19sYXJnZSA9IFtdCnN1YnJlZGRpdHNfcG9saXRpY2FsID0gW10Kc3VicmVkZGl0c19tZXRhID0gW10KCnJlZGRpdCA9IE5vbmUKZGIgPSBOb25lCgpkZWYgaW5pdCgpOgoJZ2xvYmFsIHN1YnJlZGRpdHNfbGFyZ2UKCWdsb2JhbCBzdWJyZWRkaXRzX3BvbGl0aWNhbAoJZ2xvYmFsIHN1YnJlZGRpdHNfbWV0YQoJZ2xvYmFsIHJlZGRpdAoJZ2xvYmFsIGRiCgl3aXRoIG9wZW4oJ3N1YnN0ZXIuanNvbicpIGFzIHNldHRpbmdzX2ZpbGU6ICAgIAoJCXNldHRpbmdzID0ganNvbi5sb2FkKHNldHRpbmdzX2ZpbGUpCgkJc3VicmVkZGl0c19sYXJnZSA9IHNldHRpbmdzWyJzdWJyZWRkaXRzX2xhcmdlIl0KCQlzdWJyZWRkaXRzX3BvbGl0aWNhbCA9IHNldHRpbmdzWyJzdWJyZWRkaXRzX3BvbGl0aWNhbCJdCgkJc3VicmVkZGl0c19tZXRhID0gc2V0dGluZ3NbInN1YnJlZGRpdHNfbWV0YSJdCgoJZGIgPSBzcWxpdGUzLmNvbm5lY3QoJ3N1YnN0ZXIuZGInKQoJcmVkZGl0ID0gcHJhdy5SZWRkaXQoY2xpZW50X2lkPXNldHRpbmdzWyJjbGllbnRfaWQiXSwKCQkJCQkJIGNsaWVudF9zZWNyZXQ9c2V0dGluZ3NbInNlY3JldCJdLAoJCQkJCQkgcGFzc3dvcmQ9c2V0dGluZ3NbInBhc3N3b3JkIl0sCgkJCQkJCSB1c2VyX2FnZW50PSdTY3JpcHQgYnkgL3UvbW9ycGVuJywKCQkJCQkJIHVzZXJuYW1lPXNldHRpbmdzWyJ1c2VybmFtZSJdKQoJCQkJCSAKZGVmIHByZXBfc3VicygpOgoJdGhyZWFkcyA9IFtdCgoJZm9yIHN1YiBpbiBzdWJyZWRkaXRzX2xhcmdlOgoJCXQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zY3JhcGVfc3VicmVkZGl0LCBhcmdzPShzdWIsc3VicmVkZGl0c19sYXJnZV9kaWN0KSkKCQl0aHJlYWRzLmFwcGVuZCh0KQoJCXQuc3RhcnQoKQoKCWZvciBzdWIgaW4gc3VicmVkZGl0c19sYXJnZVs6MTBdOgoJCXQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zY3JhcGVfc3VicmVkZGl0LCBhcmdzPShzdWIsc3VicmVkZGl0c19tYWluX2RpY3QpKQoJCXRocmVhZHMuYXBwZW5kKHQpCgkJdC5zdGFydCgpCgoJZm9yIHN1YiBpbiBzdWJyZWRkaXRzX3BvbGl0aWNhbDoKCQl0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2NyYXBlX3N1YnJlZGRpdCwgYXJncz0oc3ViLHN1YnJlZGRpdHNfcG9saXRpY2FsX2RpY3QpKQoJCXRocmVhZHMuYXBwZW5kKHQpCgkJdC5zdGFydCgpCglmb3Igc3ViIGluIHN1YnJlZGRpdHNfbWV0YToKCQl0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2NyYXBlX3N1YnJlZGRpdCwgYXJncz0oc3ViLHN1YnJlZGRpdHNfbWV0YV9kaWN0KSkKCQl0aHJlYWRzLmFwcGVuZCh0KQoJCXQuc3RhcnQoKQoKCWZvciB0aHJlYWQgaW4gdGhyZWFkczoKCQl0aHJlYWQuam9pbigpOwoJCQpkZWYgdG9rZW5pemUodGV4dCk6Cgl0b2tlbnMgPSBubHRrLndvcmRfdG9rZW5pemUodGV4dCkKCXN0ZW1tZWQgPSBzdGVtX3Rva2Vucyh0b2tlbnMsIHN0ZW1tZXIpCglyZXR1cm4gc3RlbW1lZAoKZGVmIHN0ZW1fdG9rZW5zKHRva2Vucywgc3RlbW1lcik6CglzdGVtbWVkID0gW10KCWZvciBpdGVtIGluIHRva2VuczoKCQlzdGVtbWVkLmFwcGVuZChzdGVtbWVyLnN0ZW0oaXRlbSkpCglyZXR1cm4gc3RlbW1lZAoKZGVmIGFuYWx5emUodXNlcm5hbWUsc3VicmVkZGl0X2RpY3Rpb25hcnkpOgoJdXNlcl9jb21tZW50cyA9IGdldF91c2VyX2NvbW1lbnRzKHVzZXJuYW1lKQoJc2NvcmVfZGljdGlvbmFyeSA9IGNvcHkuZGVlcGNvcHkoc3VicmVkZGl0X2RpY3Rpb25hcnkpCglzY29yZV9kaWN0aW9uYXJ5W3VzZXJuYW1lXSA9IHVzZXJfY29tbWVudHMKCXZlY3Rvcml6ZShzY29yZV9kaWN0aW9uYXJ5LCB1c2VybmFtZSkKCWRlbCBzY29yZV9kaWN0aW9uYXJ5W3VzZXJuYW1lXQoJcmV0dXJuIHNvcnRlZChzY29yZV9kaWN0aW9uYXJ5Lml0ZW1zKCksIGtleT1vcGVyYXRvci5pdGVtZ2V0dGVyKDEpLHJldmVyc2U9VHJ1ZSlbOjEwXQoKZGVmIGdldF91c2VyX2NvbW1lbnRzKHVzZXJuYW1lKToKCWNvbW1lbnRfc3RyaW5nID0gIiIKCWZvciBjb21tZW50IGluIHJlZGRpdC5yZWRkaXRvcih1c2VybmFtZSkuY29tbWVudHMubmV3KGxpbWl0PU5vbmUpOgoJCWNvbW1lbnRfc3RyaW5nICs9IGNvbW1lbnQuYm9keQoJcmV0dXJuIGNvbW1lbnRfc3RyaW5nCgkKZGVmIGdldF9yZXBseSh1c2VybmFtZSxkaWN0aW9uYXJ5LHNpemUpOgoJcmVwbHkgPSAiSGVsbG8gL3UvIit1c2VybmFtZSsiISBJIGhhdmUgYW5hbHlzZWQgeW91ciB2b2NhYnVsYXJ5IGFuZCBjb21wYXJlZCBpdCB0byBvdmVyICIrc3RyKHNpemUpKyIgc3VicmVkZGl0cywgYW5kIGhlcmUncyBob3cgeW91IHN0YWNrIHVwISAgXG5cbiIKCWZvciBrZXksIHZhbHVlIGluIGRpY3Rpb25hcnk6CgkJc2NvcmUgPSAiJS4zZiIgJSBmbG9hdCh2YWx1ZSkKCQlyZXBseSs9IGtleSArICI6ICIgKyBzY29yZSArIiUgIFxuIgoJaWYoc2l6ZSA+IGxlbihkaWN0aW9uYXJ5KSk6CgkJcmVwbHkgKz0gIlxuXG5eRGlzcGxheWluZyBeb25seSBedGhlIF50b3AgXiIgKyBzdHIobGVuKGRpY3Rpb25hcnkpKSArICIgXnJlc3VsdHMgXnRvIF5yZWR1Y2UgXm1lc3NhZ2UgXnNpemUuIgoJcmVwbHkrPSJcblxuICAqKioqKiBcblxuIF5JIF5hbSBeYSBeYm90IF5hbmQgXnRoaXMgXmFjdGlvbiBed2FzIF5wZXJmb3JtZWQgXmJ5IF51c2VyIF5yZXF1ZXN0LiAgXG5cbiBeTWFkZSBeYnkgXlttb3JwZW5dKGh0dHA6Ly93d3cucmVkZGl0LmNvbS91c2VyL21vcnBlbikiCglyZXR1cm4gcmVwbHkKCmRlZiBzY3JhcGVfc3VicmVkZGl0KHN1YixkaWN0aW9uYXJ5KToKCXRyeToKCQljb21tZW50X3N0cmluZyA9ICIiCgkJZm9yIGNvbW1lbnQgaW4gcmVkZGl0LnN1YnJlZGRpdChzdWIpLmNvbW1lbnRzKGxpbWl0PTEwMCk6CgkJCWNvbW1lbnRfc3RyaW5nICs9IGNvbW1lbnQuYm9keQoJCWxvd2VyID0gY29tbWVudF9zdHJpbmcubG93ZXIoKQoJCXRyYW5zbGF0b3IgPSBzdHIubWFrZXRyYW5zKCcnLCAnJywgc3RyaW5nLnB1bmN0dWF0aW9uKQoJCW5vX3B1bmMgPSBsb3dlci50cmFuc2xhdGUodHJhbnNsYXRvcikKCQlkaWN0aW9uYXJ5W3N1Yl0gPSBub19wdW5jCgkJcHJpbnQoc3ViICsgIiBpbml0aWFsaXplZCIpCglleGNlcHQ6CgkJcHJpbnQoc3ViICsgIiBmYWlsZWQiKQoKZGVmIGFuYWx5emVfdXNlcihjb21tZW50LGRpY3Rpb25hcnkpOgoJcHJpbnQoIkFuYWx5emluZzogIitjb21tZW50LmF1dGhvci5uYW1lKQoJc2NvcmVzID0gYW5hbHl6ZShjb21tZW50LmF1dGhvci5uYW1lLGRpY3Rpb25hcnkpCglyZXBseSA9IGdldF9yZXBseShjb21tZW50LmF1dGhvci5uYW1lLCBzY29yZXMsIGxlbihkaWN0aW9uYXJ5KSkKCWNvbW1lbnQucmVwbHkocmVwbHkpCglwcmludCgiRG9uZSIpCgpkZWYgdmVjdG9yaXplKGRpY3Rpb25hcnksIHVzZXJuYW1lKToKCXN1YnJlZGRpdHMgPSBbXQoJY29tbWVudHMgPSBbXQoJZm9yIGtleSx2YWx1ZSBpbiBkaWN0aW9uYXJ5Lml0ZW1zKCk6IAoJCXN1YnJlZGRpdHMuYXBwZW5kKGtleSkgCgkJY29tbWVudHMuYXBwZW5kKHZhbHVlKQoJdmVjdG9yaXplciA9IFRmaWRmVmVjdG9yaXplcih0b2tlbml6ZXI9dG9rZW5pemUsIHN0b3Bfd29yZHM9J2VuZ2xpc2gnKQoJdGZpZGYgPSB2ZWN0b3JpemVyLmZpdF90cmFuc2Zvcm0oY29tbWVudHMpCglzY29yZSA9ICgodGZpZGYgKiB0ZmlkZi5UKS5BKQoJaT0wCgl2YWx1ZXMgPSBzY29yZVtzdWJyZWRkaXRzLmluZGV4KHVzZXJuYW1lKV0KCWZvciBzdWJyZWRkaXQgaW4gc3VicmVkZGl0czoKCQlkaWN0aW9uYXJ5W3N1YnJlZGRpdF0gPSB2YWx1ZXNbaV0qMTAwCgkJaSs9MQoJcmV0dXJuIGRpY3Rpb25hcnkKCmRlZiBhbHJlYWR5X2NvbXBsZXRlKGNvbW1lbnRfaWQpOgoJZXhpc3RzID0gZGIuY3Vyc29yKCkuZXhlY3V0ZSgiU0VMRUNUIEVYSVNUUyhTRUxFQ1QgMSBGUk9NIGFscmVhZHlfY29tcGxldGUgV0hFUkUgaWQ9PyBMSU1JVCAxKSIsW2NvbW1lbnRfaWRdKS5mZXRjaG9uZSgpWzBdCglyZXR1cm4gZXhpc3RzCgpkZWYgaW5zZXJ0KGNvbW1lbnRfaWQpOgoJZGIuY3Vyc29yKCkuZXhlY3V0ZSgiSU5TRVJUIElOVE8gYWxyZWFkeV9jb21wbGV0ZSBWQUxVRVMoPykiLFtjb21tZW50X2lkXSkKCWRiLmNvbW1pdCgpCgpzdWJfbmFtZSA9ICJhbGwiIAppZiBsZW4oc3lzLmFyZ3YpID4gMToKCXN1Yl9uYW1lID0gc3lzLmFyZ3ZbMV0KaW5pdCgpCnByaW50KCJJbml0aWFsaXppbmcuLi4iKQpwcmVwX3N1YnMoKQkKcHJpbnQoIkluaXRpYWxpemVkIikKc3VicmVkZGl0ID0gcmVkZGl0LnN1YnJlZGRpdChzdWJfbmFtZSkKcHJpbnQoIkxpc3RlbmluZyBvbiAvci8iK3N1Yl9uYW1lKQpwcmludCgpCmZvciBjb21tZW50IGluIHN1YnJlZGRpdC5zdHJlYW0uY29tbWVudHMoKToKCWlmKCIhc3Vic3RlciIgaW4gY29tbWVudC5ib2R5Lmxvd2VyKCkpOgoJCWlmKG5vdCBhbHJlYWR5X2NvbXBsZXRlKGNvbW1lbnQuaWQpKToKCQkJaWYoIiFwIiBpbiBjb21tZW50LmJvZHkpOgoJCQkJcHJpbnQoInBvbGl0aWNhbCByZXF1ZXN0ZWQiKQoJCQkJZGljdGlvbmFyeSA9IHN1YnJlZGRpdHNfcG9saXRpY2FsX2RpY3QKPHxmaW1faG9sZXw+CgkJCQlwcmludCgibGFyZ2UgcmVxdWVzdGVkIikKCQkJCWRpY3Rpb25hcnkgPSBzdWJyZWRkaXRzX2xhcmdlX2RpY3QKCQkJZWxzZToKCQkJCWRpY3Rpb25hcnkgPSBzdWJyZWRkaXRzX21haW5fZGljdAoJCQl0cnk6CgkJCQl0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9YW5hbHl6ZV91c2VyLGFyZ3M9KGNvbW1lbnQsZGljdGlvbmFyeSkpCgkJCQl0LnN0YXJ0KCkKCQkJCWluc2VydChjb21tZW50LmlkKQoJCQlleGNlcHQ6CgkJCQlwcmludCgiV2hvb3BzLCB3ZSBoYWQgYSBwcm9ibGVtIHRoZXJlIikKPHxmaW1fc3VmZml4fD4KCQkJZWxpZigiIW0iIGluIGNvbW1lbnQuYm9keSk6CgkJCQlwcmludCgibWV0YSByZXF1ZXN0ZWQiKQoJCQkJZGljdGlvbmFyeSA9IHN1YnJlZGRpdHNfbWV0YV9kaWN0CgkJCWVsaWYoIiFsIikgaW4gY29tbWVudC5ib2R5Ogo8fGZpbV9lbmR8Pg=="]
["690f2811775ec8dfd92e3d2ae2f4fafd6e2c47bf-5","690f2811775ec8dfd92e3d2ae2f4fafd6e2c47bf","PHxmaW1fcHJlZml4fD4KCmZyb20gcHVscCBpbXBvcnQgKgppbXBvcnQgbWF0aAoKY2xhc3MgU29sdmVyUGFyY2VsYXMob2JqZWN0KToKCQoJbnVtZXJvX21lc2VzID0gMAoJdGVtcGVyYXR1cmEgPSB7fQoJcHJlY2lwaXRhY2lvbiA9IHt9CglkZW1hbmRhX21pbmltYSA9IHt9CglkZW1hbmRhX21heGltYSA9IHt9Cglwcm9kdWNjaW9uID0gMAoJdmFsb3JfeF9idWx0byA9IDAKCglkZWYgaW5pY2lhbGl6YXJWYWxvcmVzKHNlbGYpOgoJCXNlbGYubnVtZXJvX21lc2VzID0gMAoJCXNlbGYudGVtcGVyYXR1cmEgPSB7fQoJCXNlbGYucHJlY2lwaXRhY2lvbiA9IHt9CgkJc2VsZi5kZW1hbmRhX21pbmltYSA9IHt9CgkJc2VsZi5kZW1hbmRhX21heGltYSA9IHt9CgkJc2VsZi5wcm9kdWNjaW9uID0gMAoJCXNlbGYudmFsb3JfeF9idWx0byA9IDAKCglkZWYgc2V0TnVtZXJvTWVzZXMoc2VsZiwgbik6CgkJc2VsZi5udW1lcm9fbWVzZXMgPSBuCgoJZGVmIGdldE51bWVyb01lc2VzKHNlbGYpOgoJCXJldHVybiBzZWxmLm51bWVyb19tZXNlcwoKCWRlZiBzZXRUZW1wZXJhdHVyYShzZWxmLCB0KToKCQlzZWxmLnRlbXBlcmF0dXJhID0gdAoKCWRlZiBnZXRUZW1wZXJhdHVyYShzZWxmKToKCQlyZXR1cm4gc2VsZi50ZW1wZXJhdHVyYQoKCWRlZiBzZXRQcmVjaXBpdGFjaW9uKHNlbGYsIHApOgoJCXNlbGYucHJlY2lwaXRhY2lvbiA9IHAKCglkZWYgZ2V0UHJlY2lwaXRhY2lvbihzZWxmKToKCQlyZXR1cm4gc2VsZi5wcmVjaXBpdGFjaW9uCgoJZGVmIHNldERlbWFuZGFNaW5pbWEoc2VsZiwgZF9taW4pOgoJCXNlbGYuZGVtYW5kYV9taW5pbWEgPSBkX21pbgoKCWRlZiBnZXREZW1hbmRhTWluaW1hKHNlbGYpOgoJCXJldHVybiBzZWxmLmRlbWFuZGFfbWluaW1hCgoJZGVmIHNldERlbWFuZGFNYXhpbWEoc2VsZiwgZF9tYXgpOgoJCXNlbGYuZGVtYW5kYV9tYXhpbWEgPSBkX21heAoKCWRlZiBnZXREZW1hbmRhTWF4aW1hKHNlbGYpOgoJCXJldHVybiBzZWxmLmRlbWFuZGFfbWF4aW1hCgoJZGVmIHNldFByb2R1Y2Npb24oc2VsZiwgcCk6CgkJc2VsZi5wcm9kdWNjaW9uID0gcAoKCWRlZiBnZXRQcm9kdWNjaW9uKHNlbGYpOgoJCXJldHVybiBzZWxmLnByb2R1Y2Npb24KCglkZWYgc2V0VmFsb3JCdWx0byhzZWxmLCB2KToKCQlzZWxmLnZhbG9yX3hfYnVsdG8gPSB2CgoJZGVmIGdldFZhbG9yQnVsdG8oc2VsZik6CgkJcmV0dXJuIHNlbGYudmFsb3JfeF9idWx0bwoKCWRlZiBjb25zdHJ1aXJWYXJpYWJsZXMoc2VsZik6CgkJc2VsZi5tZXNlcyA9IGxpc3QoIHJhbmdlKDEsIChzZWxmLm51bWVyb19tZXNlcysxKSkgKQoJCXNlbGYuY29zZWNoYV92YXJzID0gTHBWYXJpYWJsZS5kaWN0cygiY29zZWNoYSIsIHNlbGYubWVzZXMsIDAsIDEsIExwSW50ZWdlcikKCQlzZWxmLnNpZW1icmFfdmFycyA9IExwVmFyaWFibGUuZGljdHMoInNpZW1icmEiLCBzZWxmLm1lc2VzLCAwLCAxLCBMcEludGVnZXIpCgkJc2VsZi50ZW1wZXJhdHVyYV92YXJzID0gTHBWYXJpYWJsZS5kaWN0cygidGVtcGVyYXR1cmEiLCBzZWxmLm1lc2VzLCAwLCAxLCBMcEludGVnZXIpCgkJc2VsZi5wcmVjaXBpdGFjaW9uX3ZhcnMgPSBMcFZhcmlhYmxlLmRpY3RzKCJwcmVjaXBpdGFjaW9uIiwgc2VsZi5tZXNlcywgMCwgMSwgTHBJbnRlZ2VyKQoJCSMgcHJpbnQoc2VsZi5jb3NlY2hhX3ZhcnMpCgoJCXNlbGYuaW5ncmVzb3MgPSB7fQoJCXNlbGYubWVzZXNfbm9fdGVtcGVyYXR1cmEgPSBbXQoJCXNlbGYubWVzZXNfbm9fcHJlY2lwaXRhY2lvbiA9IFtdCgkJZm9yIGkgaW4gc2VsZi5tZXNlczoKCQkJIyBDYWxjdWxvIGRlIGxvcyBpbmdyZXNvcwoJCQlpZiBzZWxmLnByb2R1Y2Npb24gPCBzZWxmLmRlbWFuZGFfbWluaW1hW2ldOgoJCQkJc2VsZi5pbmdyZXNvc1tpXSA9IChzZWxmLnByb2R1Y2Npb24qc2VsZi52YWxvcl94X2J1bHRvKS8yCgkJCWVsaWYgc2VsZi5kZW1hbmRhX21pbmltYVtpXSA8PSBzZWxmLnByb2R1Y2Npb24gYW5kIHNlbGYucHJvZHVjY2lvbiA8PSBzZWxmLmRlbWFuZGFfbWF4aW1hW2ldOgoJCQkJc2VsZi5pbmdyZXNvc1tpXSA9IHNlbGYucHJvZHVjY2lvbipzZWxmLnZhbG9yX3hfYnVsdG8KCQkJZWxzZToKCQkJCXNlbGYuaW5ncmVzb3NbaV0gPSAoc2VsZi5kZW1hbmRhX21heGltYVtpXSpzZWxmLnZhbG9yX3hfYnVsdG8pICsgKChzZWxmLnByb2R1Y2Npb24tc2VsZi5kZW1hbmRhX21heGltYVtpXSkqKHNlbGYudmFsb3JfeF9idWx0by8yKSkKCgkJCSMgRGV0ZXJtaW5hIHRlbXBlcmF0dXJhIGRlIHNpZW1icmEKCQkJaWYgMTg+c2VsZi50ZW1wZXJhdHVyYVtpXSBvciBzZWxmLnRlbXBlcmF0dXJhW2ldPjIwOgoJCQkJc2VsZi5tZXNlc19ub190ZW1wZXJhdHVyYS5hcHBlbmQoaSkKCgkJCWlmIHNlbGYucHJlY2lwaXRhY2lvbltpXTw2MyA6CgkJCQlzZWxmLm1lc2VzX25vX3ByZWNpcGl0YWNpb24uYXBwZW5kKGkpCgoJZGVmIHNvbHVjaW9uYXIoc2VsZik6CgkJc2VsZi5jb25zdHJ1aXJWYXJpYWJsZXMoKQoJCXByb2JsZW1hID0gTHBQcm9ibGVtKCJDdWx0aXZvIGRlIHBhcGEiLCBMcE1heGltaXplKQoJCSMgcHJvYmxlbWEgPSBMcFByb2JsZW0oIkN1bHRpdm8gZGUgcGFwYSIsIExwTWluaW1pemUpCgoJCSMgRlVOQ0lPTiBPQkpFVElWTwoJCXByb2JsZW1hICs9IGxwU3VtKFtzZWxmLmluZ3Jlc29zW2ldKnNlbGYuY29zZWNoYV92YXJzW2ldIGZvciBpIGluIHNlbGYubWVzZXNdKQoKCQkjIFJFU1RSSUNDSU9ORVMKCQkjIFN1bWF0b3JpYSBkZSBjb3NlY2hhcyBlcyA8PSBOLzQKCQlwcm9ibGVtYSArPSBscFN1bShbc2VsZi5jb3NlY2hhX3ZhcnNbaV0gZm9yIGkgaW4gc2VsZi5tZXNlc10pIDw9IG1hdGguZmxvb3Ioc2VsZi5udW1lcm9fbWVzZXMvNCkKCgkJIyBDdW1wbGlyIGVsIGNpY2xvOiBYKGkpICsgWChpKzEpICsgWChpKzIpICsgWChpKzMpIDw9IDEKCQlwcm9ibGVtYSArPSBzZWxmLmNvc2VjaGFfdmFyc1sxXStzZWxmLmNvc2VjaGFfdmFyc1syXStzZWxmLmNvc2VjaGFfdmFyc1szXSA9PSAwCgkJZm9yIGkgaW4gcmFuZ2UoMSwgc2VsZi5udW1lcm9fbWVzZXMtMik6CgkJCXByb2JsZW1hICs9IHNlbGYuY29zZWNoYV92YXJzW2ldK3NlbGYuY29zZWNoYV92YXJzW2krMV0rc2VsZi5jb3NlY2hhX3ZhcnNbaSsyXStzZWxmLmNvc2VjaGFfdmFyc1tpKzNdIDw9IDEKCgkJIyBObyBjdW1wbGUgbGFzIGNvbmRpY2lvbmVzIGRlIHRlbXBlcmF0dXJhCgkJcHJvYmxlbWEgKz0gbHBTdW0oW3NlbGYudGVtcGVyYXR1cmFfdmFyc1tpXSBmb3IgaSBpbiBzZWxmLm1lc2VzX25vX3RlbXBlcmF0dXJhXSkgPT0gMC4wCgkJCgkJIyBObyBjdW1wbGUgbGFzIGNvbmRpY2lvbmVzIGRlIHByZWNpcGl0YWNpb24KCQlwcm9ibGVtYSArPSBscFN1bShbc2VsZi5wcmVjaXBpdGFjaW9uX3ZhcnNbaV0gZm9yIGkgaW4gc2VsZi5tZXNlc19ub19wcmVjaXBpdGFjaW9uXSkgPT0gMC4wCgoJCSMgQ09ORElDSU9ORVMgQ0xJTUFUSUNBUwoJCU0gPSAxMDAKCQlmb3IgaSBpbiBzZWxmLm1lc2VzOgoJCQlwcm9ibGVtYSArPSBzZWxmLnNpZW1icmFfdmFyc1tpXSA8PSAwK00qc2VsZi50ZW1wZXJhdHVyYV92YXJzW2ldCgkJCXByb2JsZW1hICs9IHNlbGYuc2llbWJyYV92YXJzW2ldIDw9IDArTSpzZWxmLnByZWNpcGl0YWNpb25fdmFyc1tpXQoJCQkjIENvc2VjaG8gZW4gMyBtZXNlcwoJCQlpZiBpPD0oc2VsZi5udW1lcm9fbWVzZXMtMyk6CgkJCQlwcm9ibGVtYSArPSBzZWxmLnNpZW1icmFfdmFyc1tpXSA9PSBzZWxmLmNvc2VjaGFfdmFyc1tpKzNdCgoKCQkjIHByb2JsZW1hLndyaXRlTFAoJ3Byb2JsZW1hLnR4dCcpCgoJCSMgcHJpbnQoIiMjIyMjIFBST0JMRU1BICMjIyMjIikKCQkjIHByaW50KHByb2JsZW1hKQoKCQkjIHByaW50KCIjIyMjIyBTT0xVQ0lPTiAjIyMjIyIpCgkJc3RhdHVzID0gcHJvYmxlbWEuc29sdmUoKQoJCSMgc3RhdHVzID0gcHJvYmxlbWEuc29sdmUoR0xQSygpKQoJCSMgTHBTdGF0dXNbc3RhdHVzXQoJCSMgcHJpbnQoInN0YXR1czoiLCBMcFN0YXR1c1tzdGF0dXNdKQoJCSMgcHJpbnQoIm9iamVjdGl2ZToiLCB2YWx1ZShwcm9ibGVtYS5vYmplY3RpdmUpICkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCQkjIHByaW50KCItLS0gVkFMT1JFUyAtLS0iKQoJCXNvbHVjaW9uID0gWyB2YWx1ZShwcm9ibGVtYS5vYmplY3RpdmUpIF0KCQltZXNlc19jb3NlY2hhID0gW10KCQlmb3IgeCBpbiBzZWxmLm1lc2VzOgo8fGZpbV9lbmR8Pg=="]
["30107e8e2677d7b69eb1a9a5960de9a79483e803-2","30107e8e2677d7b69eb1a9a5960de9a79483e803","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0ZW5zb3JmbG93IGFzIHRmCmltcG9ydCBvcwoKZnJvbSBzY2lweS5pbyBpbXBvcnQgc2F2ZW1hdApmcm9tIHNjaXB5LmlvIGltcG9ydCBsb2FkbWF0CgppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CnBsdC5zd2l0Y2hfYmFja2VuZCgnYWdnJykKCmltcG9ydCBfcGlja2xlIGFzIGNQaWNrbGUKCmRlZiBjb252KGlucHV0LCBrZXJuZWwsIGJpYXNlcywga19oLCBrX3csIGNfbywgc19oLCBzX3csICBwYWRkaW5nPSJWQUxJRCIsIGdyb3VwPTEpOgogICAgJycnRnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXRoZXJlb24vY2FmZmUtdGVuc29yZmxvdwogICAgJycnCiAgICBjX2kgPSBpbnB1dC5nZXRfc2hhcGUoKVstMV0KICAgIGFzc2VydCBjX2klZ3JvdXA9PTAKICAgIGFzc2VydCBjX28lZ3JvdXA9PTAKICAgIGNvbnZvbHZlID0gbGFtYmRhIGksIGs6IHRmLm5uLmNvbnYyZChpLCBrLCBbMSwgc19oLCBzX3csIDFdLCBwYWRkaW5nPXBhZGRpbmcpCiAgICAKICAgIAogICAgaWYgZ3JvdXA9PTE6CiAgICAgICAgY29udiA9IGNvbnZvbHZlKGlucHV0LCBrZXJuZWwpCiAgICBlbHNlOgogICAgICAgIGlucHV0X2dyb3VwcyA9ICB0Zi5zcGxpdChpbnB1dCwgZ3JvdXAsIDMpCiAgICAgICAga2VybmVsX2dyb3VwcyA9IHRmLnNwbGl0KGtlcm5lbCwgZ3JvdXAsIDMpIAogICAgICAgIG91dHB1dF9ncm91cHMgPSBbY29udm9sdmUoaSwgaykgZm9yIGksayBpbiB6aXAoaW5wdXRfZ3JvdXBzLCBrZXJuZWxfZ3JvdXBzKV0KICAgICAgICBjb252ID0gdGYuY29uY2F0KG91dHB1dF9ncm91cHMsMykKICAgIHJldHVybiAgdGYucmVzaGFwZSh0Zi5ubi5iaWFzX2FkZChjb252LCBiaWFzZXMpLCBbLTFdK2NvbnYuZ2V0X3NoYXBlKCkuYXNfbGlzdCgpWzE6XSkKCgpjbGFzcyBhbGV4bmV0X2ZhY2VfY2xhc3NpZmllcjoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbWdzPU5vbmUsIGZlYXR1cmVfbWFwcz1Ob25lLCBudW1fY2xhc3Nlcz0xNywga2VlcF9wcm9iPTEuMCk6CiAgICAKICAgICAgICAjIFBhcnNlIGlucHV0IGFyZ3VtZW50cyBpbnRvIGNsYXNzIHZhcmlhYmxlcwogICAgICAgIHNlbGYuaW1ncyA9IGltZ3MKICAgICAgICBzZWxmLmZlYXR1cmVfbWFwcyA9IGZlYXR1cmVfbWFwcwogICAgICAgIHNlbGYua2VlcF9wcm9iID0ga2VlcF9wcm9iCiAgICAgICAgc2VsZi5udW1fY2xhc3NlcyA9IG51bV9jbGFzc2VzCiAgICAgICAgc2VsZi5jb252X3BhcmFtZXRlcnMgPSBbXQogICAgICAgIHNlbGYuZmNfcGFyYW1ldGVycyA9IFtdCiAgICAgICAgCiAgICBkZWYgcHJlcHJvY2VzcyhzZWxmKToKICAgICAgICB3aXRoIHRmLm5hbWVfc2NvcGUoJ3JlY2VudGVyaW5nJykgYXMgc2NvcGU6CiAgICAgICAgICAgIG1lYW4gPSB0Zi5yZWR1Y2VfbWVhbihzZWxmLmltZ3MsICgtMSwtMiwtMyksIGtlZXBfZGltcz1UcnVlKQogICAgICAgICAgICBzZWxmLnJlY2VudGVyZWRfaW1ncyA9IHNlbGYuaW1ncy1tZWFuCiAgICAgICAgICAgIHNlbGYucmV2ZXJzZWRfaW1ncyA9IHRmLnJldmVyc2Uoc2VsZi5yZWNlbnRlcmVkX2ltZ3MsWy0xXSkKCiAgICBkZWYgY29udmxheWVycyhzZWxmLCB0cmFpbmluZz1UcnVlKToKICAgICAgICAjIGNvbnYxCiAgICAgICAga19oID0gMTE7IGtfdyA9IDExOyBrX2QgPSAzOyBjX28gPSA5Njsgc19oID0gNDsgc193ID0gNAogICAgICAgIHdpdGggdGYubmFtZV9zY29wZSgnY29udjEnKSBhcyBzY29wZToKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIGNvbnYxX2luID0gY29udihzZWxmLnJldmVyc2VkX2ltZ3MsIHNlbGYuY29udjFXLCBzZWxmLmNvbnYxYiwga19oLCBrX3csIGNfbywgc19oLCBzX3csIHBhZGRpbmc9IlNBTUUiLCBncm91cD0xKQogICAgICAgICAgICBzZWxmLmNvbnYxID0gdGYubm4ucmVsdShjb252MV9pbikKICAgICAgICAgICAgc2VsZi5jb252X3BhcmFtZXRlcnMgKz0gW3NlbGYuY29udjFXLCBzZWxmLmNvbnYxYl0KICAgICAgICAgICAgCiAgICAgICAgI2xybjEKICAgICAgICAjbHJuKDIsIDJlLTA1LCAwLjc1LCBuYW1lPSdub3JtMScpCiAgICAgICAgcmFkaXVzID0gMjsgYWxwaGEgPSAyZS0wNTsgYmV0YSA9IDAuNzU7IGJpYXMgPSAxLjAKICAgICAgICBzZWxmLmxybjEgPSB0Zi5ubi5sb2NhbF9yZXNwb25zZV9ub3JtYWxpemF0aW9uKHNlbGYuY29udjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoX3JhZGl1cz1yYWRpdXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhPWFscGhhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXRhPWJldGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpYXM9YmlhcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgI21heHBvb2wxCiAgICAgICAgI21heF9wb29sKDMsIDMsIDIsIDIsIHBhZGRpbmc9J1ZBTElEJywgbmFtZT0ncG9vbDEnKQogICAgICAgIGtfaCA9IDM7IGtfdyA9IDM7IHNfaCA9IDI7IHNfdyA9IDI7IHBhZGRpbmcgPSAnVkFMSUQnCiAgICAgICAgc2VsZi5tYXhwb29sMSA9IHRmLm5uLm1heF9wb29sKHNlbGYubHJuMSwga3NpemU9WzEsIGtfaCwga193LCAxXSwgc3RyaWRlcz1bMSwgc19oLCBzX3csIDFdLCBwYWRkaW5nPXBhZGRpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAjIGNvbnYyCiAgICAgICAga19oID0gNTsga193ID0gNTsga19kID0gNDggOyBjX28gPSAyNTY7IHNfaCA9IDE7IHNfdyA9IDE7IGdyb3VwID0gMgogICAgICAgIHdpdGggdGYubmFtZV9zY29wZSgnY29udjInKSBhcyBzY29wZToKICAgICAgICAgICAgc2VsZi5jb252MlcgPSB0Zi5WYXJpYWJsZSh0Zi50cnVuY2F0ZWRfbm9ybWFsKFtrX2gsIGtfdywga19kLCBjX29dLCBkdHlwZT10Zi5mbG9hdDMyLCBzdGRkZXY9MWUtMSksXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9J3dlaWdodHMnLCB0cmFpbmFibGU9dHJhaW5pbmcpCiAgICAgICAgICAgIHNlbGYuY29udjJiID0gdGYuVmFyaWFibGUodGYuY29uc3RhbnQoMC4wLCBzaGFwZT1bY19vXSwgZHR5cGU9dGYuZmxvYXQzMiksXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpbmFibGU9dHJhaW5pbmcsIG5hbWU9J2JpYXNlcycpCiAgICAgICAgICAgIGNvbnYyX2luID0gY29udihzZWxmLm1heHBvb2wxLCBzZWxmLmNvbnYyVywgc2VsZi5jb252MmIsIGtfaCwga193LCBjX28sIHNfaCwgc193LCBwYWRkaW5nPSJTQU1FIiwgZ3JvdXA9Z3JvdXApCiAgICAgICAgICAgIHNlbGYuY29udjIgPSB0Zi5ubi5yZWx1KGNvbnYyX2luKQogICAgICAgICAgICBzZWxmLmNvbnZfcGFyYW1ldGVycyArPSBbc2VsZi5jb252MlcsIHNlbGYuY29udjJiXQogICAgICAgIAogICAgICAgICNscm4yCiAgICAgICAgI2xybigyLCAyZS0wNSwgMC43NSwgbmFtZT0nbm9ybTInKQogICAgICAgIHJhZGl1cyA9IDI7IGFscGhhID0gMmUtMDU7IGJldGEgPSAwLjc1OyBiaWFzID0gMS4wCiAgICAgICAgc2VsZi5scm4yID0gdGYubm4ubG9jYWxfcmVzcG9uc2Vfbm9ybWFsaXphdGlvbihzZWxmLmNvbnYyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aF9yYWRpdXM9cmFkaXVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYT1hbHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0YT1iZXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWFzPWJpYXMpCgogICAgICAgICNtYXhwb29sMgogICAgICAgICNtYXhfcG9vbCgzLCAzLCAyLCAyLCBwYWRkaW5nPSdWQUxJRCcsIG5hbWU9J3Bvb2wyJykKICAgICAgICBrX2ggPSAzOyBrX3cgPSAzOyBzX2ggPSAyOyBzX3cgPSAyOyBwYWRkaW5nID0gJ1ZBTElEJwogICAgICAgIHNlbGYubWF4cG9vbDIgPSB0Zi5ubi5tYXhfcG9vbChzZWxmLmxybjIsIGtzaXplPVsxLCBrX2gsIGtfdywgMV0sIHN0cmlkZXM9WzEsIHNfaCwgc193LCAxXSwgcGFkZGluZz1wYWRkaW5nKQoKICAgICAgICAjY29udjMKICAgICAgICAjY29udigzLCAzLCAzODQsIDEsIDEsIG5hbWU9J2NvbnYzJykKICAgICAgICBrX2ggPSAzOyBrX3cgPSAzOyBrX2QgPSAyNTY7IGNfbyA9IDM4NDsgc19oID0gMTsgc193ID0gMTsgZ3JvdXAgPSAxCiAgICAgICAgd2l0aCB0Zi5uYW1lX3Njb3BlKCdjb252MycpIGFzIHNjb3BlOgogICAgICAgICAgICBzZWxmLmNvbnYzVyA9IHRmLlZhcmlhYmxlKHRmLnRydW5jYXRlZF9ub3JtYWwoW2tfaCwga193LCBrX2QsIGNfb10sIGR0eXBlPXRmLmZsb2F0MzIsIHN0ZGRldj0xZS0xKSxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0nd2VpZ2h0cycsIHRyYWluYWJsZT10cmFpbmluZykKICAgICAgICAgICAgc2VsZi5jb252M2IgPSB0Zi5WYXJpYWJsZSh0Zi5jb25zdGFudCgwLjAsIHNoYXBlPVtjX29dLCBkdHlwZT10Zi5mbG9hdDMyKSxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWluYWJsZT10cmFpbmluZywgbmFtZT0nYmlhc2VzJykKICAgICAgICAgICAgY29udjNfaW4gPSBjb252KHNlbGYubWF4cG9vbDIsIHNlbGYuY29udjNXLCBzZWxmLmNvbnYzYiwga19oLCBrX3csIGNfbywgc19oLCBzX3csIHBhZGRpbmc9IlNBTUUiLCBncm91cD1ncm91cCkKICAgICAgICAgICAgc2VsZi5jb252MyA9IHRmLm5uLnJlbHUoY29udjNfaW4pCiAgICAgICAgICAgIHNlbGYuY29udl9wYXJhbWV0ZXJzICs9IFtzZWxmLmNvbnYzVywgc2VsZi5jb252M2JdCiAgICAgICAgCiAgICAgICAgI2NvbnY0CiAgICAgICAgI2NvbnYoMywgMywgMzg0LCAxLCAxLCBncm91cD0yLCBuYW1lPSdjb252NCcpCiAgICAgICAga19oID0gMzsga193ID0gMzsga19kID0gMTkyOyBjX28gPSAzODQ7IHNfaCA9IDE7IHNfdyA9IDE7IGdyb3VwID0gMgogICAgICAgIHdpdGggdGYubmFtZV9zY29wZSgnY29udjQnKSBhcyBzY29wZToKICAgICAgICAgICAgc2VsZi5jb252NFcgPSB0Zi5WYXJpYWJsZSh0Zi50cnVuY2F0ZWRfbm9ybWFsKFtrX2gsIGtfdywga19kLCBjX29dLCBkdHlwZT10Zi5mbG9hdDMyLCBzdGRkZXY9MWUtMSksXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9J3dlaWdodHMnLCB0cmFpbmFibGU9dHJhaW5pbmcpCiAgICAgICAgICAgIHNlbGYuY29udjRiID0gdGYuVmFyaWFibGUodGYuY29uc3RhbnQoMC4wLCBzaGFwZT1bY19vXSwgZHR5cGU9dGYuZmxvYXQzMiksXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpbmFibGU9dHJhaW5pbmcsIG5hbWU9J2JpYXNlcycpCiAgICAgICAgICAgIGNvbnY0X2luID0gY29udihzZWxmLmNvbnYzLCBzZWxmLmNvbnY0Vywgc2VsZi5jb252NGIsIGtfaCwga193LCBjX28sIHNfaCwgc193LCBwYWRkaW5nPSJTQU1FIiwgZ3JvdXA9Z3JvdXApCiAgICAgICAgICAgIHNlbGYuY29udjQgPSB0Zi5ubi5yZWx1KGNvbnY0X2luKQogICAgICAgICAgICBzZWxmLmNvbnZfcGFyYW1ldGVycyArPSBbc2VsZi5jb252NFcsIHNlbGYuY29udjRiXQogICAgCiAgICAgICAgI2NvbnY1CiAgICAgICAgI2NvbnYoMywgMywgMjU2LCAxLCAxLCBncm91cD0yLCBuYW1lPSdjb252NScpCiAgICAgICAga19oID0gMzsga193ID0gMzsga19kPTE5MjsgY19vID0gMjU2OyBzX2ggPSAxOyBzX3cgPSAxOyBncm91cCA9IDIKICAgICAgICB3aXRoIHRmLm5hbWVfc2NvcGUoJ2NvbnY1JykgYXMgc2NvcGU6CiAgICAgICAgICAgIHNlbGYuY29udjVXID0gdGYuVmFyaWFibGUodGYudHJ1bmNhdGVkX25vcm1hbChba19oLCBrX3csIGtfZCwgY19vXSwgZHR5cGU9dGYuZmxvYXQzMiwgc3RkZGV2PTFlLTEpLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSd3ZWlnaHRzJywgdHJhaW5hYmxlPXRyYWluaW5nKQogICAgICAgICAgICBzZWxmLmNvbnY1YiA9IHRmLlZhcmlhYmxlKHRmLmNvbnN0YW50KDAuMCwgc2hhcGU9W2Nfb10sIGR0eXBlPXRmLmZsb2F0MzIpLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaW5hYmxlPXRyYWluaW5nLCBuYW1lPSdiaWFzZXMnKQogICAgICAgICAgICBjb252NV9pbiA9IGNvbnYoc2VsZi5jb252NCwgc2VsZi5jb252NVcsIHNlbGYuY29udjViLCBrX2gsIGtfdywgY19vLCBzX2gsIHNfdywgcGFkZGluZz0iU0FNRSIsIGdyb3VwPWdyb3VwKQogICAgICAgICAgICBzZWxmLmNvbnY1ID0gdGYubm4ucmVsdShjb252NV9pbikKICAgICAgICAgICAgc2VsZi5jb252X3BhcmFtZXRlcnMgKz0gW3NlbGYuY29udjVXLCBzZWxmLmNvbnY1Yl0KICAgICAgICAKICAgICAgICBzaGFwZSA9IGludChucC5wcm9kKHNlbGYuY29udjUuZ2V0X3NoYXBlKClbMTpdKSkKICAgICAgICBzZWxmLmNvbnY1X2ZsYXQgPSB0Zi5yZXNoYXBlKHNlbGYuY29udjUsIFstMSwgc2hhcGVdKQogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICBkZWYgZmNfbGF5ZXJzKHNlbGYsIHRyYWluaW5nPVRydWUsIHRyYW5zZmVyX2xlYXJuaW5nPUZhbHNlLCBuaGlkPTUwKToKICAgICAgICBpZiB0cmFuc2Zlcl9sZWFybmluZyA9PSBUcnVlOgogICAgICAgICAgICBzZWxmLmZfbWFwcyA9IHNlbGYuZmVhdHVyZV9tYXBzCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5mX21hcHMgPSBzZWxmLmNvbnY1X2ZsYXQKICAgIAogICAgICAgICNmYzEKICAgICAgICB3aXRoIHRmLm5hbWVfc2NvcGUoJ2ZjMScpIGFzIHNjb3BlOgogICAgICAgICAgICAKICAgICAgICAgICAgc2VsZi5mYzFXID0gdGYuVmFyaWFibGUodGYucmFuZG9tX25vcm1hbChbaW50KHNlbGYuZl9tYXBzLmdldF9zaGFwZSgpWzFdKSwgbmhpZF0sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdHlwZT10Zi5mbG9hdDMyLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZGV2PTFlLTIpLCBuYW1lPSd3ZWlnaHRzJywgdHJhaW5hYmxlPXRyYWluaW5nKQogICAgICAgICAgICBzZWxmLmZjMWIgPSB0Zi5WYXJpYWJsZSh0Zi5yYW5kb21fbm9ybWFsKHNoYXBlPVtuaGlkXSwgZHR5cGU9dGYuZmxvYXQzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWluYWJsZT10cmFpbmluZywgbmFtZT0nYmlhc2VzJykKICAgICAgICAgICAgZmMxbCA9IHRmLm5uLmJpYXNfYWRkKHRmLm1hdG11bChzZWxmLmZfbWFwcywgc2VsZi5mYzFXKSwgc2VsZi5mYzFiKQogICAgICAgICAgICBzZWxmLmZjMSA9IHRmLm5uLnJlbHUoZmMxbCkKICAgICAgICAgICAgc2VsZi5mY19wYXJhbWV0ZXJzICs9IFtzZWxmLmZjMVcsIHNlbGYuZmMxYl0KICAgICAgICAKICAgICAgICAjZHJvcG91dAogICAgICAgIHNlbGYuZmMxX2Ryb3AgPSB0Zi5ubi5kcm9wb3V0KHNlbGYuZmMxLCBzZWxmLmtlZXBfcHJvYikKICAgICAgICAKICAgICAgICAjZmMyCiAgICAgICAgd2l0aCB0Zi5uYW1lX3Njb3BlKCdmYzInKSBhcyBzY29wZToKICAgICAgICAgICAgc2VsZi5mYzJXID0gdGYuVmFyaWFibGUodGYucmFuZG9tX25vcm1hbChbbmhpZCwgc2VsZi5udW1fY2xhc3Nlc10sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdHlwZT10Zi5mbG9hdDMyLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZGV2PTFlLTIpLCBuYW1lPSd3ZWlnaHRzJywgdHJhaW5hYmxlPXRyYWluaW5nKQogICAgICAgICAgICBzZWxmLmZjMmIgPSB0Zi5WYXJpYWJsZSh0Zi5yYW5kb21fbm9ybWFsKHNoYXBlPVtzZWxmLm51bV9jbGFzc2VzXSwgZHR5cGU9dGYuZmxvYXQzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWluYWJsZT10cmFpbmluZywgbmFtZT0nYmlhc2VzJykKICAgICAgICAgICAgZmMybCA9IHRmLm5uLmJpYXNfYWRkKHRmLm1hdG11bChzZWxmLmZjMV9kcm9wLCBzZWxmLmZjMlcpLCBzZWxmLmZjMmIpCiAgICAgICAgICAgICNzZWxmLmZjMiA9IHRmLm5uLnJlbHUoZmMybCkKICAgICAgICAgICAgc2VsZi5mYzIgPSBmYzJsCiAgICAgICAgICAgIHNlbGYuZmNfcGFyYW1ldGVycyArPSBbc2VsZi5mYzJXLCBzZWxmLmZjMmJdCiAgICAgICAgCiAgICBkZWYgbG9hZF93ZWlnaHRzKHNlbGYsIHdlaWdodF9maWxlLCBzZXNzLCBjb252X29ubHk9RmFsc2UsIGZjX29ubHk9RmFsc2UpOgogICAgICAgICMgU2VwYXJhdGVkIGludG8gdHdvIHBhcnRzLCBjb252IGxheWVycyBhbmQgZmMgbGF5ZXJzCiAgICAgICAgIyB0byBhY2NvbW9kYXRlIGJvdGggdHJhbnNmZXIgbGVhcm5pbmcgYW5kIGVuZC10by1lbmQgbGVhcm5pbmcKICAgICAgICB3ZWlnaHRzID0gY1BpY2tsZS5sb2FkKG9wZW4od2VpZ2h0X2ZpbGUsICJyYiIpKQogICAgICAgIGtleXMgPSBzb3J0ZWQod2VpZ2h0cy5rZXlzKCkpCiAgICAgICAgaWYgY29udl9vbmx5OgogICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oc2VsZi5jb252X3BhcmFtZXRlcnMpKToKICAgICAgICAgICAgICAgIHByaW50IChpLCBrZXlzW2ldLCBucC5zaGFwZSh3ZWlnaHRzW2tleXNbaV1dKSkKICAgICAgICAgICAgICAgIHNlc3MucnVuKHNlbGYuY29udl9wYXJhbWV0ZXJzW2ldLmFzc2lnbih3ZWlnaHRzW2tleXNbaV1dKSkKICAgICAgICAgICAgCiAgICAgICAgZWxpZiBmY19vbmx5OgogICAgICAgICAgICBmb3IgaiBpbiByYW5nZShsZW4oc2VsZi5mY19wYXJhbWV0ZXJzKSk6CiAgICAgICAgICAgICAgICBwcmludCAoaiwga2V5c1tqXSwgbnAuc2hhcGUod2VpZ2h0c1trZXlzW2pdXSkpCiAgICAgICAgICAgICAgICBzZXNzLnJ1bihzZWxmLmZjX3BhcmFtZXRlcnNbal0uYXNzaWduKHdlaWdodHNba2V5c1tqXV0pKQogICAgICAgICAgICAgICAgCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNlbGYuY29udl9wYXJhbWV0ZXJzKSk6CiAgICAgICAgICAgICAgICBwcmludCAoaSwga2V5c1tpXSwgbnAuc2hhcGUod2VpZ2h0c1trZXlzW2ldXSkpCiAgICAgICAgICAgICAgICBzZXNzLnJ1bihzZWxmLmNvbnZfcGFyYW1ldGVyc1tpXS5hc3NpZ24od2VpZ2h0c1trZXlzW2ldXSkpCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNlbGYuZmNfcGFyYW1ldGVycykpOgogICAgICAgICAgICAgICAgaiA9IGkrbGVuKHNlbGYuY29udl9wYXJhbWV0ZXJzKQogICAgICAgICAgICAgICAgcHJpbnQgKGosIGtleXNbal0sIG5wLnNoYXBlKHdlaWdodHNba2V5c1tqXV0pKQogICAgICAgICAgICAgICAgc2Vzcy5ydW4oc2VsZi5mY19wYXJhbWV0ZXJzW2ldLmFzc2lnbih3ZWlnaHRzW2tleXNbal1dKSkKICAgIAo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBzZWxmLmNvbnYxVyA9IHRmLlZhcmlhYmxlKHRmLnRydW5jYXRlZF9ub3JtYWwoW2tfaCwga193LCBrX2QsIGNfb10sIGR0eXBlPXRmLmZsb2F0MzIsIHN0ZGRldj0xZS0xKSxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0nd2VpZ2h0cycsIHRyYWluYWJsZT10cmFpbmluZykKICAgICAgICAgICAgc2VsZi5jb252MWIgPSB0Zi5WYXJpYWJsZSh0Zi5jb25zdGFudCgwLjAsIHNoYXBlPVtjX29dLCBkdHlwZT10Zi5mbG9hdDMyKSxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWluYWJsZT10cmFpbmluZywgbmFtZT0nYmlhc2VzJykKPHxmaW1fZW5kfD4="]
["d6f12593bce607a3c0cc28869476fbf0c33c127e-2","d6f12593bce607a3c0cc28869476fbf0c33c127e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCnN1cHBvcnRlZF9lbmNvZGluZ3MgPSBbCiAgICAndXRmLTgnLAogICAgIyBNYWtlIHN1cmUgdG8gc3BlY2lmeSAtbGUgYW5kIC1iZSBzbyB0aGF0IHRoZSBVVEYgZW5kaWFuIHByZWZpeAo8fGZpbV9lbmR8Pg=="]
["063b29914e96e882cd650609e1750f4cfe25a1f4-3","063b29914e96e882cd650609e1750f4cfe25a1f4","PHxmaW1fcHJlZml4fD4KY2xhc3MgSW5zdHJ1Y3Rpb24ob2JqZWN0KToKICAgICIiIkluc3RydWN0aW9uIGtleSB2YWx1ZSIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHZhbHVlKToKICAgICAgICBzZWxmLl9fbV9uYW1lID0gbmFtZQogICAgICAgIHNlbGYuX19tX3ZhbHVlID0gdmFsdWUKICAgIAogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgcmVwID0gIkluc3RydWN0aW9uIG5hbWU6IHswfSB8IHZhbHVlOiB7MX0iLmZvcm1hdChnZXROYW1lLCBnZXRWYWx1ZSkKICAgICAgICByZXR1cm4gcmVwCiAgICAKICAgIEBwcm9wZXJ0eQogICAgZGVmIGdldFZhbHVlKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl9fbV92YWx1ZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBAcHJvcGVydHkKICAgIGRlZiBnZXROYW1lKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl9fbV9uYW1lCjx8ZmltX2VuZHw+"]
["cca058379bbf900318496f6c3a9652911240bc5a-2","cca058379bbf900318496f6c3a9652911240bc5a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG14bmV0IGFzIG14Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBteG5ldC5tb2RlbCBpbXBvcnQgc2F2ZV9jaGVja3BvaW50CmZyb20gcmNubi5jb25maWcgaW1wb3J0IGNvbmZpZwppbXBvcnQgbnVtcHkgYXMgbnAKCjx8ZmltX2VuZHw+"]
["cc81ec1d910097fa070919a50acd436cba10e4af-1","cc81ec1d910097fa070919a50acd436cba10e4af","PHxmaW1fcHJlZml4fD4KIyAgQ29weXJpZ2h0IDIwMDgtMjAxNSBOb2tpYSBTb2x1dGlvbnMgYW5kIE5ldHdvcmtzCiMKIyAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpmcm9tIHJvYm90LmVycm9ycyBpbXBvcnQgKEV4ZWN1dGlvbkZhaWxlZCwgRXhlY3V0aW9uRmFpbHVyZXMsIEV4ZWN1dGlvblBhc3NlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBFeGl0Rm9yTG9vcCwgQ29udGludWVGb3JMb29wLCBEYXRhRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlckV4ZWN1dGlvbkZhaWxlZCkKZnJvbSByb2JvdC5yZXN1bHQua2V5d29yZCBpbXBvcnQgS2V5d29yZCBhcyBLZXl3b3JkUmVzdWx0CmZyb20gcm9ib3QudXRpbHMgaW1wb3J0IChmb3JtYXRfYXNzaWduX21lc3NhZ2UsIGZyYW5nZSwgZ2V0X2Vycm9yX21lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfdGltZXN0YW1wLCBwbHVyYWxfb3Jfbm90IGFzIHMsIHR5cGVfbmFtZSkKZnJvbSByb2JvdC52YXJpYWJsZXMgaW1wb3J0IGlzX3NjYWxhcl92YXIsIFZhcmlhYmxlQXNzaWduZXIKCgpjbGFzcyBLZXl3b3JkUnVubmVyKG9iamVjdCk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRleHQsIHRlbXBsYXRlZD1GYWxzZSk6CiAgICAgICAgc2VsZi5fY29udGV4dCA9IGNvbnRleHQKICAgICAgICBzZWxmLl90ZW1wbGF0ZWQgPSB0ZW1wbGF0ZWQKCiAgICBkZWYgcnVuX2tleXdvcmRzKHNlbGYsIGtleXdvcmRzKToKICAgICAgICBlcnJvcnMgPSBbXQogICAgICAgIGZvciBrdyBpbiBrZXl3b3JkczoKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgc2VsZi5ydW5fa2V5d29yZChrdykKICAgICAgICAgICAgZXhjZXB0IEV4ZWN1dGlvblBhc3NlZCBhcyBleGNlcHRpb246CiAgICAgICAgICAgICAgICBleGNlcHRpb24uc2V0X2VhcmxpZXJfZmFpbHVyZXMoZXJyb3JzKQogICAgICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9uCiAgICAgICAgICAgIGV4Y2VwdCBFeGVjdXRpb25GYWlsZWQgYXMgZXhjZXB0aW9uOgogICAgICAgICAgICAgICAgZXJyb3JzLmV4dGVuZChleGNlcHRpb24uZ2V0X2Vycm9ycygpKQogICAgICAgICAgICAgICAgaWYgbm90IGV4Y2VwdGlvbi5jYW5fY29udGludWUoc2VsZi5fY29udGV4dC5pbl90ZWFyZG93biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NvbnRleHQuZHJ5X3J1bik6CiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICBpZiBlcnJvcnM6CiAgICAgICAgICAgIHJhaXNlIEV4ZWN1dGlvbkZhaWx1cmVzKGVycm9ycykKCiAgICBkZWYgcnVuX2tleXdvcmQoc2VsZiwga3csIG5hbWU9Tm9uZSk6CiAgICAgICAgaWYga3cudHlwZSA9PSBrdy5GT1JfTE9PUF9UWVBFOgogICAgICAgICAgICBydW5uZXIgPSBGb3JMb29wUnVubmVyKHNlbGYuX2NvbnRleHQsIHNlbGYuX3RlbXBsYXRlZCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBydW5uZXIgPSBOb3JtYWxSdW5uZXIoc2VsZi5fY29udGV4dCkKICAgICAgICByZXR1cm4gcnVubmVyLnJ1bihrdywgbmFtZT1uYW1lKQoKCmNsYXNzIE5vcm1hbFJ1bm5lcihvYmplY3QpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0KToKICAgICAgICBzZWxmLl9jb250ZXh0ID0gY29udGV4dAoKICAgIGRlZiBydW4oc2VsZiwga3csIG5hbWU9Tm9uZSk6CiAgICAgICAgaGFuZGxlciA9IHNlbGYuX2NvbnRleHQuZ2V0X2hhbmRsZXIobmFtZSBvciBrdy5uYW1lKQogICAgICAgIGhhbmRsZXIuaW5pdF9rZXl3b3JkKHNlbGYuX2NvbnRleHQudmFyaWFibGVzKQogICAgICAgIGFzc2lnbmVyID0gVmFyaWFibGVBc3NpZ25lcihrdy5hc3NpZ24pCiAgICAgICAgcmVzdWx0ID0gS2V5d29yZFJlc3VsdChrd25hbWU9aGFuZGxlci5uYW1lIG9yICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlibmFtZT1oYW5kbGVyLmxpYm5hbWUgb3IgJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2M9aGFuZGxlci5zaG9ydGRvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9a3cuYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbj1hc3NpZ25lci5hc3NpZ25tZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFncz1oYW5kbGVyLnRhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PWdldGF0dHIoaGFuZGxlciwgJ3RpbWVvdXQnLCAnJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPWt3LnR5cGUpCiAgICAgICAgZHJ5X3J1bl9saWJfa3cgPSBzZWxmLl9jb250ZXh0LmRyeV9ydW4gYW5kIGhhbmRsZXIudHlwZSA9PSAnbGlicmFyeScKICAgICAgICB3aXRoIFN0YXR1c1JlcG9ydGVyKHNlbGYuX2NvbnRleHQsIHJlc3VsdCwgZHJ5X3J1bl9saWJfa3cpOgogICAgICAgICAgICBzZWxmLl93YXJuX2lmX2RlcHJlY2F0ZWQocmVzdWx0Lm5hbWUsIHJlc3VsdC5kb2MpCiAgICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5fYW5kX2Fzc2lnbihoYW5kbGVyLCBrdy5hcmdzLCBhc3NpZ25lcikKCiAgICBkZWYgX3dhcm5faWZfZGVwcmVjYXRlZChzZWxmLCBuYW1lLCBkb2MpOgogICAgICAgIGlmIGRvYy5zdGFydHN3aXRoKCcqREVQUkVDQVRFRCcpIGFuZCAnKicgaW4gZG9jWzE6XToKICAgICAgICAgICAgbWVzc2FnZSA9ICcgJyArIGRvYy5zcGxpdCgnKicsIDIpWy0xXS5zdHJpcCgpCiAgICAgICAgICAgIHNlbGYuX2NvbnRleHQud2FybigiS2V5d29yZCAnJXMnIGlzIGRlcHJlY2F0ZWQuJXMiICUgKG5hbWUsIG1lc3NhZ2UpKQoKICAgIGRlZiBfcnVuX2FuZF9hc3NpZ24oc2VsZiwgaGFuZGxlciwgYXJncywgYXNzaWduZXIpOgogICAgICAgIHN5bnRheF9lcnJvcl9yZXBvcnRlciA9IFN5bnRheEVycm9yUmVwb3J0ZXIoc2VsZi5fY29udGV4dCkKICAgICAgICB3aXRoIHN5bnRheF9lcnJvcl9yZXBvcnRlcjoKICAgICAgICAgICAgYXNzaWduZXIudmFsaWRhdGVfYXNzaWdubWVudCgpCiAgICAgICAgcmV0dXJuX3ZhbHVlLCBleGNlcHRpb24gPSBzZWxmLl9ydW4oaGFuZGxlciwgYXJncykKICAgICAgICBpZiBub3QgZXhjZXB0aW9uIG9yIGV4Y2VwdGlvbi5jYW5fY29udGludWUoc2VsZi5fY29udGV4dC5pbl90ZWFyZG93bik6CiAgICAgICAgICAgIHdpdGggc3ludGF4X2Vycm9yX3JlcG9ydGVyOgogICAgICAgICAgICAgICAgYXNzaWduZXIuYXNzaWduKHNlbGYuX2NvbnRleHQsIHJldHVybl92YWx1ZSkKICAgICAgICBpZiBleGNlcHRpb246CiAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbgogICAgICAgIHJldHVybiByZXR1cm5fdmFsdWUKCiAgICBkZWYgX3J1bihzZWxmLCBoYW5kbGVyLCBhcmdzKToKICAgICAgICByZXR1cm5fdmFsdWUgPSBleGNlcHRpb24gPSBOb25lCiAgICAgICAgdHJ5OgogICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBoYW5kbGVyLnJ1bihzZWxmLl9jb250ZXh0LCBhcmdzKQogICAgICAgIGV4Y2VwdCBFeGVjdXRpb25GYWlsZWQgYXMgZXJyOgogICAgICAgICAgICBleGNlcHRpb24gPSBlcnIKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIGV4Y2VwdGlvbiA9IHNlbGYuX2dldF9hbmRfcmVwb3J0X2ZhaWx1cmUoKQogICAgICAgIGlmIGV4Y2VwdGlvbjoKICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gZXhjZXB0aW9uLnJldHVybl92YWx1ZQogICAgICAgIHJldHVybiByZXR1cm5fdmFsdWUsIGV4Y2VwdGlvbgoKICAgIGRlZiBfZ2V0X2FuZF9yZXBvcnRfZmFpbHVyZShzZWxmKToKICAgICAgICBmYWlsdXJlID0gSGFuZGxlckV4ZWN1dGlvbkZhaWxlZCgpCiAgICAgICAgaWYgZmFpbHVyZS50aW1lb3V0OgogICAgICAgICAgICBzZWxmLl9jb250ZXh0LnRpbWVvdXRfb2NjdXJyZWQgPSBUcnVlCiAgICAgICAgc2VsZi5fY29udGV4dC5mYWlsKGZhaWx1cmUuZnVsbF9tZXNzYWdlKQogICAgICAgIGlmIGZhaWx1cmUudHJhY2ViYWNrOgogICAgICAgICAgICBzZWxmLl9jb250ZXh0LmRlYnVnKGZhaWx1cmUudHJhY2ViYWNrKQogICAgICAgIHJldHVybiBmYWlsdXJlCgoKY2xhc3MgRm9yTG9vcFJ1bm5lcihvYmplY3QpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0LCB0ZW1wbGF0ZWQ9RmFsc2UpOgogICAgICAgIHNlbGYuX2NvbnRleHQgPSBjb250ZXh0CiAgICAgICAgc2VsZi5fdGVtcGxhdGVkID0gdGVtcGxhdGVkCgogICAgZGVmIHJ1bihzZWxmLCBkYXRhLCBuYW1lPU5vbmUpOgogICAgICAgIHJlc3VsdCA9IEtleXdvcmRSZXN1bHQoa3duYW1lPXNlbGYuX2dldF9uYW1lKGRhdGEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1kYXRhLkZPUl9MT09QX1RZUEUpCiAgICAgICAgd2l0aCBTdGF0dXNSZXBvcnRlcihzZWxmLl9jb250ZXh0LCByZXN1bHQpOgogICAgICAgICAgICB3aXRoIFN5bnRheEVycm9yUmVwb3J0ZXIoc2VsZi5fY29udGV4dCk6CiAgICAgICAgICAgICAgICBzZWxmLl92YWxpZGF0ZShkYXRhKQogICAgICAgICAgICAgICAgc2VsZi5fcnVuKGRhdGEpCgogICAgZGVmIF9nZXRfbmFtZShzZWxmLCBkYXRhKToKICAgICAgICByZXR1cm4gJyVzICVzIFsgJXMgXScgJSAoJyB8ICcuam9pbihkYXRhLnZhcmlhYmxlcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJTicgaWYgbm90IGRhdGEucmFuZ2UgZWxzZSAnSU4gUkFOR0UnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIHwgJy5qb2luKGRhdGEudmFsdWVzKSkKCiAgICBkZWYgX3ZhbGlkYXRlKHNlbGYsIGRhdGEpOgogICAgICAgIGlmIG5vdCBkYXRhLnZhcmlhYmxlczoKICAgICAgICAgICAgcmFpc2UgRGF0YUVycm9yKCdGT1IgbG9vcCBoYXMgbm8gbG9vcCB2YXJpYWJsZXMuJykKICAgICAgICBmb3IgdmFyIGluIGRhdGEudmFyaWFibGVzOgogICAgICAgICAgICBpZiBub3QgaXNfc2NhbGFyX3Zhcih2YXIpOgogICAgICAgICAgICAgICAgcmFpc2UgRGF0YUVycm9yKCJJbnZhbGlkIEZPUiBsb29wIHZhcmlhYmxlICclcycuIiAlIHZhcikKICAgICAgICBpZiBub3QgZGF0YS52YWx1ZXM6CiAgICAgICAgICAgIHJhaXNlIERhdGFFcnJvcignRk9SIGxvb3AgaGFzIG5vIGxvb3AgdmFsdWVzLicpCiAgICAgICAgaWYgbm90IGRhdGEua2V5d29yZHM6CiAgICAgICAgICAgIHJhaXNlIERhdGFFcnJvcignRk9SIGxvb3AgY29udGFpbnMgbm8ga2V5d29yZHMuJykKCiAgICBkZWYgX3J1bihzZWxmLCBkYXRhKToKICAgICAgICBlcnJvcnMgPSBbXQogICAgICAgIGZvciB2YWx1ZXMgaW4gc2VsZi5fZ2V0X3ZhbHVlc19mb3Jfb25lX3JvdW5kKGRhdGEpOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBzZWxmLl9ydW5fb25lX3JvdW5kKGRhdGEsIHZhbHVlcykKICAgICAgICAgICAgZXhjZXB0IEV4aXRGb3JMb29wIGFzIGV4Y2VwdGlvbjoKICAgICAgICAgICAgICAgIGlmIGV4Y2VwdGlvbi5lYXJsaWVyX2ZhaWx1cmVzOgogICAgICAgICAgICAgICAgICAgIGVycm9ycy5leHRlbmQoZXhjZXB0aW9uLmVhcmxpZXJfZmFpbHVyZXMuZ2V0X2Vycm9ycygpKQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgZXhjZXB0IENvbnRpbnVlRm9yTG9vcCBhcyBleGNlcHRpb246CiAgICAgICAgICAgICAgICBpZiBleGNlcHRpb24uZWFybGllcl9mYWlsdXJlczoKICAgICAgICAgICAgICAgICAgICBlcnJvcnMuZXh0ZW5kKGV4Y2VwdGlvbi5lYXJsaWVyX2ZhaWx1cmVzLmdldF9lcnJvcnMoKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGV4Y2VwdCBFeGVjdXRpb25QYXNzZWQgYXMgZXhjZXB0aW9uOgogICAgICAgICAgICAgICAgZXhjZXB0aW9uLnNldF9lYXJsaWVyX2ZhaWx1cmVzKGVycm9ycykKICAgICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbgogICAgICAgICAgICBleGNlcHQgRXhlY3V0aW9uRmFpbGVkIGFzIGV4Y2VwdGlvbjoKICAgICAgICAgICAgICAgIGVycm9ycy5leHRlbmQoZXhjZXB0aW9uLmdldF9lcnJvcnMoKSkKICAgICAgICAgICAgICAgIGlmIG5vdCBleGNlcHRpb24uY2FuX2NvbnRpbnVlKHNlbGYuX2NvbnRleHQuaW5fdGVhcmRvd24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb250ZXh0LmRyeV9ydW4pOgogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgaWYgZXJyb3JzOgogICAgICAgICAgICByYWlzZSBFeGVjdXRpb25GYWlsdXJlcyhlcnJvcnMpCgogICAgZGVmIF9nZXRfdmFsdWVzX2Zvcl9vbmVfcm91bmQoc2VsZiwgZGF0YSk6CiAgICAgICAgaWYgbm90IHNlbGYuX2NvbnRleHQuZHJ5X3J1bjoKICAgICAgICAgICAgdmFsdWVzID0gc2VsZi5fcmVwbGFjZV92YXJpYWJsZXMoZGF0YSkKICAgICAgICAgICAgdmFyX2NvdW50ID0gbGVuKGRhdGEudmFyaWFibGVzKQogICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4odmFsdWVzKSwgdmFyX2NvdW50KToKICAgICAgICAgICAgICAgIHlpZWxkIHZhbHVlc1tpOmkrdmFyX2NvdW50XQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHlpZWxkIGRhdGEudmFyaWFibGVzCgogICAgZGVmIF9yZXBsYWNlX3ZhcmlhYmxlcyhzZWxmLCBkYXRhKToKICAgICAgICB2YWx1ZXMgPSBzZWxmLl9jb250ZXh0LnZhcmlhYmxlcy5yZXBsYWNlX2xpc3QoZGF0YS52YWx1ZXMpCiAgICAgICAgaWYgZGF0YS5yYW5nZToKICAgICAgICAgICAgdmFsdWVzID0gc2VsZi5fZ2V0X3JhbmdlX2l0ZW1zKHZhbHVlcykKICAgICAgICBpZiBsZW4odmFsdWVzKSAlIGxlbihkYXRhLnZhcmlhYmxlcykgPT0gMDoKICAgICAgICAgICAgcmV0dXJuIHZhbHVlcwogICAgICAgIHJhaXNlIERhdGFFcnJvcignTnVtYmVyIG9mIEZPUiBsb29wIHZhbHVlcyBzaG91bGQgYmUgbXVsdGlwbGUgb2YgJwogICAgICAgICAgICAgICAgICAgICAgICAndmFyaWFibGVzLiBHb3QgJWQgdmFyaWFibGVzIGJ1dCAlZCB2YWx1ZSVzLicKICAgICAgICAgICAgICAgICAgICAgICAgJSAobGVuKGRhdGEudmFyaWFibGVzKSwgbGVuKHZhbHVlcyksIHModmFsdWVzKSkpCgogICAgZGVmIF9nZXRfcmFuZ2VfaXRlbXMoc2VsZiwgaXRlbXMpOgogICAgICAgIHRyeToKICAgICAgICAgICAgaXRlbXMgPSBbc2VsZi5fdG9fbnVtYmVyX3dpdGhfYXJpdGhtZXRpY3MoaXRlbSkgZm9yIGl0ZW0gaW4gaXRlbXNdCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICByYWlzZSBEYXRhRXJyb3IoJ0NvbnZlcnRpbmcgYXJndW1lbnQgb2YgRk9SIElOIFJBTkdFIGZhaWxlZDogJXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGdldF9lcnJvcl9tZXNzYWdlKCkpCiAgICAgICAgaWYgbm90IDEgPD0gbGVuKGl0ZW1zKSA8PSAzOgogICAgICAgICAgICByYWlzZSBEYXRhRXJyb3IoJ0ZPUiBJTiBSQU5HRSBleHBlY3RlZCAxLTMgYXJndW1lbnRzLCBnb3QgJWQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBsZW4oaXRlbXMpKQogICAgICAgIHJldHVybiBmcmFuZ2UoKml0ZW1zKQoKICAgIGRlZiBfdG9fbnVtYmVyX3dpdGhfYXJpdGhtZXRpY3Moc2VsZiwgaXRlbSk6CiAgICAgICAgaWYgaXNpbnN0YW5jZShpdGVtLCAoaW50LCBsb25nLCBmbG9hdCkpOgogICAgICAgICAgICByZXR1cm4gaXRlbQogICAgICAgIG51bWJlciA9IGV2YWwoc3RyKGl0ZW0pLCB7fSkKICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShudW1iZXIsIChpbnQsIGxvbmcsIGZsb2F0KSk6CiAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiRXhwZWN0ZWQgbnVtYmVyLCBnb3QgJXMuIiAlIHR5cGVfbmFtZShpdGVtKSkKICAgICAgICByZXR1cm4gbnVtYmVyCgogICAgZGVmIF9ydW5fb25lX3JvdW5kKHNlbGYsIGRhdGEsIHZhbHVlcyk6CiAgICAgICAgbmFtZSA9ICcsICcuam9pbihmb3JtYXRfYXNzaWduX21lc3NhZ2UodmFyLCBpdGVtKQogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHZhciwgaXRlbSBpbiB6aXAoZGF0YS52YXJpYWJsZXMsIHZhbHVlcykpCiAgICAgICAgcmVzdWx0ID0gS2V5d29yZFJlc3VsdChrd25hbWU9bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ZGF0YS5GT1JfSVRFTV9UWVBFKQogICAgICAgIGZvciB2YXIsIHZhbHVlIGluIHppcChkYXRhLnZhcmlhYmxlcywgdmFsdWVzKToKICAgICAgICAgICAgc2VsZi5fY29udGV4dC52YXJpYWJsZXNbdmFyXSA9IHZhbHVlCiAgICAgICAgcnVubmVyID0gS2V5d29yZFJ1bm5lcihzZWxmLl9jb250ZXh0LCBzZWxmLl90ZW1wbGF0ZWQpCiAgICAgICAgd2l0aCBTdGF0dXNSZXBvcnRlcihzZWxmLl9jb250ZXh0LCByZXN1bHQpOgogICAgICAgICAgICBydW5uZXIucnVuX2tleXdvcmRzKGRhdGEua2V5d29yZHMpCgoKY2xhc3MgU3RhdHVzUmVwb3J0ZXIob2JqZWN0KToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGV4dCwgcmVzdWx0LCBkcnlfcnVuX2xpYl9rdz1GYWxzZSk6CiAgICAgICAgc2VsZi5fY29udGV4dCA9IGNvbnRleHQKICAgICAgICBzZWxmLl9yZXN1bHQgPSByZXN1bHQKICAgICAgICBzZWxmLl9wYXNzX3N0YXR1cyA9ICdQQVNTJyBpZiBub3QgZHJ5X3J1bl9saWJfa3cgZWxzZSAnTk9UX1JVTicKCiAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgICAgIHNlbGYuX3Jlc3VsdC5zdGFydHRpbWUgPSBnZXRfdGltZXN0YW1wKCkKICAgICAgICBzZWxmLl9jb250ZXh0LnN0YXJ0X2tleXdvcmQoc2VsZi5fcmVzdWx0KQoKICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiKToKICAgICAgICBpZiBleGNfdmFsIGlzIE5vbmU6CiAgICAgICAgICAgIHNlbGYuX3Jlc3VsdC5zdGF0dXMgPSBzZWxmLl9wYXNzX3N0YXR1cwogICAgICAgIGVsaWYgaXNpbnN0YW5jZShleGNfdmFsLCBFeGVjdXRpb25GYWlsZWQpOgogICAgICAgICAgICBzZWxmLl9yZXN1bHQuc3RhdHVzID0gZXhjX3ZhbC5zdGF0dXMKICAgICAgICAgICAgaWYgc2VsZi5fcmVzdWx0LnR5cGUgPT0gc2VsZi5fcmVzdWx0LlRFQVJET1dOX1RZUEU6CiAgICAgICAgICAgICAgICBzZWxmLl9yZXN1bHQubWVzc2FnZSA9IHVuaWNvZGUoZXhjX3ZhbCkKICAgICAgICBzZWxmLl9yZXN1bHQuZW5kdGltZSA9IGdldF90aW1lc3RhbXAoKQogICAgICAgIHNlbGYuX2NvbnRleHQuZW5kX2tleXdvcmQoc2VsZi5fcmVzdWx0KQoKCmNsYXNzIFN5bnRheEVycm9yUmVwb3J0ZXIob2JqZWN0KToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGV4dCk6CiAgICAgICAgc2VsZi5fY29udGV4dCA9IGNvbnRleHQKCiAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgICAgIHBhc3MKCiAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWwsIGV4Y190Yik6CiAgICAgICAgaWYgaXNpbnN0YW5jZShleGNfdmFsLCBEYXRhRXJyb3IpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIG1zZyA9IHVuaWNvZGUoZXhjX3ZhbCkKICAgICAgICAgICAgc2VsZi5fY29udGV4dC5mYWlsKG1zZykKICAgICAgICAgICAgcmFpc2UgRXhlY3V0aW9uRmFpbGVkKG1zZywgc3ludGF4PVRydWUpCjx8ZmltX2VuZHw+"]
["bafc3ace272a62827c44ca89e60bed887bb5891a-2","bafc3ace272a62827c44ca89e60bed887bb5891a","PHxmaW1fcHJlZml4fD4KIiIiQ3VzdG9tIHN0b3JhZ2UgYmFja2VuZHMuCiIiIgppbXBvcnQgb3MKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmNvbnRyaWIuc3RhdGljZmlsZXMuc3RvcmFnZSBpbXBvcnQgTWFuaWZlc3RGaWxlc01peGluCmZyb20gc3RvcmFnZXMuYmFja2VuZHMuczNib3RvMyBpbXBvcnQgUzNCb3RvM1N0b3JhZ2UsIFNwb29sZWRUZW1wb3JhcnlGaWxlCgoKY2xhc3MgUGF0Y2hlZFMzU3RhdGljU3RvcmFnZShTM0JvdG8zU3RvcmFnZSk6CiAgICBkZWYgX3NhdmVfY29udGVudChzZWxmLCBvYmosIGNvbnRlbnQsIHBhcmFtZXRlcnMpOgogICAgICAgICIiIgogICAgICAgIFdlIGNyZWF0ZSBhIGNsb25lIG9mIHRoZSBjb250ZW50IGZpbGUgYXMgd2hlbiB0aGlzIGlzIHBhc3NlZCB0bwogICAgICAgIGJvdG8zIGl0IHdyb25nbHkgY2xvc2VzIHRoZSBmaWxlIHVwb24gdXBsb2FkIHdoZXJlIGFzIHRoZQogICAgICAgIHN0b3JhZ2UgYmFja2VuZCBleHBlY3RzIGl0IHRvIHN0aWxsIGJlIG9wZW4uCgogICAgICAgIFNlZSBBbHNvOgogICAgICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vanNjaG5laWVyL2RqYW5nby1zdG9yYWdlcy9pc3N1ZXMvMzgyI2lzc3VlY29tbWVudC0zNzcxNzQ4MDgKPHxmaW1faG9sZXw+CiAgICAgICAgIyBDcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSB0aGF0IHdpbGwgd3JpdGUgdG8gZGlzayBhZnRlciBhCiAgICAgICAgIyBzcGVjaWZpZWQgc2l6ZQogICAgICAgIGNvbnRlbnRfYXV0b2Nsb3NlID0gU3Bvb2xlZFRlbXBvcmFyeUZpbGUoKQoKICAgICAgICAjIFdyaXRlIG91ciBvcmlnaW5hbCBjb250ZW50IGludG8gb3VyIGNvcHkgdGhhdCB3aWxsIGJlIGNsb3NlZAogICAgICAgICMgYnkgYm90bzMKICAgICAgICBjb250ZW50X2F1dG9jbG9zZS53cml0ZShjb250ZW50LnJlYWQoKSkKCiAgICAgICAgIyBVcGxvYWQgdGhlIG9iamVjdCB3aGljaCB3aWxsIGF1dG8gY2xvc2UgdGhlIGNvbnRlbnRfYXV0b2Nsb3NlCiAgICAgICAgIyBpbnN0YW5jZQogICAgICAgIHN1cGVyKFBhdGNoZWRTM1N0YXRpY1N0b3JhZ2UsIHNlbGYpLl9zYXZlX2NvbnRlbnQoCiAgICAgICAgICAgIG9iaiwgY29udGVudF9hdXRvY2xvc2UsIHBhcmFtZXRlcnMKICAgICAgICApCgogICAgICAgICMgQ2xlYW51cCBpZiB0aGlzIGlzIGZpeGVkIHVwc3RyZWFtIG91ciBkdXBsaWNhdGUgc2hvdWxkIGFsd2F5cwogICAgICAgICMgY2xvc2UKICAgICAgICBpZiBub3QgY29udGVudF9hdXRvY2xvc2UuY2xvc2VkOgogICAgICAgICAgICBjb250ZW50X2F1dG9jbG9zZS5jbG9zZSgpCgoKY2xhc3MgQ2FjaGVkUzNTdG9yYWdlKE1hbmlmZXN0RmlsZXNNaXhpbiwgUGF0Y2hlZFMzU3RhdGljU3RvcmFnZSk6CiAgICBwYXNzCgoKY2xhc3MgTWVkaWFTdG9yYWdlKFMzQm90bzNTdG9yYWdlKToKICAgICIiIgogICAgU3RvcmFnZSBjbGFzcyBmb3IgbWVkaWEgZmlsZXMuCgogICAgUHJlZml4ZXMgYWxsIGZpbGUgcGF0aHMgd2l0aCBgYG1lZGlhL2BgLgogICAgIiIiCgogICAgYnVja2V0X25hbWUgPSBzZXR0aW5ncy5TM19CVUNLRVRfTUVESUEKICAgIGRlZmF1bHRfYWNsID0gInByaXZhdGUiCiAgICBlbmNyeXB0aW9uID0gVHJ1ZQogICAgbG9jYXRpb24gPSAibWVkaWEiCgoKY2xhc3MgU3RhdGljU3RvcmFnZShDYWNoZWRTM1N0b3JhZ2UpOgogICAgIiIiCiAgICBTdG9yYWdlIGNsYXNzIGZvciBzdGF0aWMgZmlsZXMuCgogICAgUHJlZml4ZXMgYWxsIGZpbGUgcGF0aHMgd2l0aCBgYHN0YXRpYy9gYC4KICAgICIiIgoKICAgIGJ1Y2tldF9uYW1lID0gc2V0dGluZ3MuUzNfQlVDS0VUX1NUQVRJQwogICAgZGVmYXVsdF9hY2wgPSAicHVibGljLXJlYWQiCiAgICBsb2NhdGlvbiA9ICJzdGF0aWMiCiAgICBxdWVyeXN0cmluZ19hdXRoID0gRmFsc2UKPHxmaW1fc3VmZml4fD4KICAgICAgICAiIiIKICAgICAgICAjIFNlZWsgb3VyIGNvbnRlbnQgYmFjayB0byB0aGUgc3RhcnQKICAgICAgICBjb250ZW50LnNlZWsoMCwgb3MuU0VFS19TRVQpCgo8fGZpbV9lbmR8Pg=="]
["233eeda206b0d371f2aff5668b9a4f7dd0783107-4","233eeda206b0d371f2aff5668b9a4f7dd0783107","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBEZXZlbG9wIGEgcHJvZ3JhbSB0aGF0IHJlYWRzIHRoZSBmaXJzdCB0ZXJtIGFuZCByZWFzb24gb2YgYW4gQVAuIEF0IHRoZSBlbmQsIHNob3cgdGhlIGZpcnN0IDEwIHRlcm1zIG9mIHRoaXMgcHJvZ3Jlc3Npb24uCjx8ZmltX2VuZHw+"]
["561791b3be356126f1897f208fef90e196b9eec2-1","561791b3be356126f1897f208fef90e196b9eec2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBqc29uCmltcG9ydCByYW5kb20KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCByZQppbXBvcnQgc3lzCmltcG9ydCByZXF1ZXN0cwpmcm9tIGlvIGltcG9ydCBCeXRlc0lPCmltcG9ydCBiYXNlNjQKaW1wb3J0IGdsb2IKZnJvbSBtYXRoIGltcG9ydCB0cnVuYwpmcm9tIFBJTCBpbXBvcnQgSW1hZ2UgYXMgUElMSW1hZ2UKZnJvbSBQSUwgaW1wb3J0IEltYWdlRHJhdyBhcyBQSUxJbWFnZURyYXcKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdApmcm9tIENvbmNhdmVIdWxsIGltcG9ydCBDb25jYXZlSHVsbAppbXBvcnQgb3MKCnJldCA9IFtdCgp0aHJlc2ggPSAyMDAKCmlmIG5vdCBvcy5wYXRoLmV4aXN0cygnbWFza3MnKToKICAgIG9zLm1rZGlyKCdtYXNrcycpCgpkZWYgZmxvb2RmaWxsKHgsIHkpOgogICAgaWYgbWF0cml4W3hdW3ldID4gdGhyZXNoOiAKICAgICAgICBtYXRyaXhbeF1beV0gPSAwIAogICAgICAgIHJldC5hcHBlbmQoKHgseSkpCiAgICAgICAgaWYgeCA+IDA6CiAgICAgICAgICAgIGZsb29kZmlsbCh4LTEseSkKICAgICAgICBpZiB4IDwgbWF0cml4LnNoYXBlWzBdIC0gMToKICAgICAgICAgICAgZmxvb2RmaWxsKHgrMSx5KQogICAgICAgIGlmIHkgPiAwOgogICAgICAgICAgICBmbG9vZGZpbGwoeCx5LTEpCiAgICAgICAgaWYgeSA8IG1hdHJpeC5zaGFwZVsxXSAtIDE6CiAgICAgICAgICAgIGZsb29kZmlsbCh4LHkrMSkKCmRlZiBmbG9vZCgpOgogICAgYXJyID0gW10KICAgIGZvciByIGluIHJhbmdlKG1hdHJpeC5zaGFwZVswXSk6CiAgICAgICAgZm9yIGMgaW4gcmFuZ2UobWF0cml4LnNoYXBlWzFdKToKICAgICAgICAgICAgaWYgKG1hdHJpeFtyXVtjXSA+IHRocmVzaCk6CiAgICAgICAgICAgICAgICByZXQuY2xlYXIoKQogICAgICAgICAgICAgICAgZmxvb2RmaWxsKHIsIGMpCiAgICAgICAgICAgICAgICBtID0gW10KICAgICAgICAgICAgICAgIGZvciBpIGluIHJldDoKICAgICAgICAgICAgICAgICAgICBtLmFwcGVuZChpKQogICAgICAgICAgICAgICAgYXJyLmFwcGVuZChtKQogICAgcmV0dXJuIGFycgoKc3lzLnNldHJlY3Vyc2lvbmxpbWl0KDMwMDAwMCkKZGF0YSA9IHt9CgpkZWYgc2hvdyhhcnIsIGluZGV4KToKICAgIGFucyA9IFtdIAogICAgYSA9IGFycltpbmRleF0KICAgIHggPSBbXQogICAgeSA9IFtdCiAgICBmb3IgdHVwIGluIGE6CiAgICAgIHguYXBwZW5kKHR1cFswXSkKICAgICAgeS5hcHBlbmQodHVwWzFdKQogICAgYWxsUG9pbnRzPW5wLmNvbHVtbl9zdGFjaygoeCx5KSkKICAgIGNoID0gQ29uY2F2ZUh1bGwoKQogICAgY2gubG9hZHBvaW50cyhhbGxQb2ludHMpCiAgICBjaC5jYWxjdWxhdGVodWxsKCkKICAgIGJvdW5kYXJ5X3BvaW50cyA9IG5wLnZzdGFjayhjaC5ib3VuZGFyeS5leHRlcmlvci5jb29yZHMueHkpLlQKICAgIHhzID0gW10KICAgIHlzID0gW10KICAgIGZvciByIGluIHJhbmdlKGxlbihib3VuZGFyeV9wb2ludHMpKToKICAgICAgICBhbnMuYXBwZW5kKChib3VuZGFyeV9wb2ludHNbcl1bMF0sIGJvdW5kYXJ5X3BvaW50c1tyXVsxXSkpCiAgICAgICAgeHMuYXBwZW5kKGJvdW5kYXJ5X3BvaW50c1tyXVswXSkKICAgICAgICB5cy5hcHBlbmQoYm91bmRhcnlfcG9pbnRzW3JdWzFdKQogICAgcmV0dXJuIGFucwoKY2xhc3MgQ29jb0RhdGFzZXQoKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhbm5vdGF0aW9uX3BhdGgsIGltYWdlX2Rpcik6CiAgICAgICAgc2VsZi5hbm5vdGF0aW9uX3BhdGggPSBhbm5vdGF0aW9uX3BhdGgKICAgICAgICBzZWxmLmltYWdlX2RpciA9IGltYWdlX2RpcgogICAgICAgIHNlbGYuY29sb3JzID0gY29sb3JzID0gWydibHVlJywgJ3B1cnBsZScsICdyZWQnLCAnZ3JlZW4nLCAnb3JhbmdlJywgJ3NhbG1vbicsICdwaW5rJywgJ2dvbGQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcmNoaWQnLCAnc2xhdGVibHVlJywgJ2xpbWVncmVlbicsICdzZWFncmVlbicsICdkYXJrZ3JlZW4nLCAnb2xpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RlYWwnLCAnYXF1YW1hcmluZScsICdzdGVlbGJsdWUnLCAncG93ZGVyYmx1ZScsICdkb2RnZXJibHVlJywgJ25hdnknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hZ2VudGEnLCAnc2llbm5hJywgJ21hcm9vbiddCiAgICAgICAgCiAgICAgICAganNvbl9maWxlID0gb3BlbihzZWxmLmFubm90YXRpb25fcGF0aCkKICAgICAgICBzZWxmLmNvY28gPSBqc29uLmxvYWQoanNvbl9maWxlKQogICAgICAgIGpzb25fZmlsZS5jbG9zZSgpCiAgICAgICAgCiAgICAgICAgc2VsZi5wcm9jZXNzX2luZm8oKQogICAgICAgIHNlbGYucHJvY2Vzc19saWNlbnNlcygpCiAgICAgICAgc2VsZi5wcm9jZXNzX2NhdGVnb3JpZXMoKQogICAgICAgIHNlbGYucHJvY2Vzc19pbWFnZXMoKQogICAgICAgIHNlbGYucHJvY2Vzc19zZWdtZW50YXRpb25zKCkKICAgIAogICAgZGVmIGRpc3BsYXlfaW1hZ2Uoc2VsZiwgaW1hZ2VfaWQsIGZuYW1lLCBxLCBzaG93X3BvbHlzPVRydWUsIHNob3dfYmJveD1UcnVlLCBzaG93X2Nyb3dkcz1UcnVlLCB1c2VfdXJsPUZhbHNlKToKICAgICAgICAjIHByaW50KCdJbWFnZTonKQogICAgICAgICMgcHJpbnQoJz09PT09PScpCiAgICAgICAgIyBpZiBpbWFnZV9pZCA9PSAncmFuZG9tJzoKICAgICAgICAjICAgICBpbWFnZV9pZCA9IHJhbmRvbS5jaG9pY2UobGlzdChzZWxmLmltYWdlcy5rZXlzKCkpKQogICAgICAgIAogICAgICAgICMgIyBQcmludCB0aGUgaW1hZ2UgaW5mbwogICAgICAgIGltYWdlID0gc2VsZi5pbWFnZXNbaW1hZ2VfaWRdCiAgICAgICAgIyBmb3Iga2V5LCB2YWwgaW4gaW1hZ2UuaXRlbXMoKToKICAgICAgICAjICAgICBwcmludCgnICB7fToge30nLmZvcm1hdChrZXksIHZhbCkpCiAgICAgICAgICAgIAogICAgICAgICMgT3BlbiB0aGUgaW1hZ2UKICAgICAgICBpZiB1c2VfdXJsOgogICAgICAgICAgICBpbWFnZV9wYXRoID0gaW1hZ2VbJ2NvY29fdXJsJ10KICAgICAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5nZXQoaW1hZ2VfcGF0aCkKICAgICAgICAgICAgaW1hZ2UgPSBQSUxJbWFnZS5vcGVuKEJ5dGVzSU8ocmVzcG9uc2UuY29udGVudCkpCiAgICAgICAgICAgIAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGltYWdlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5pbWFnZV9kaXIsIGltYWdlWydmaWxlX25hbWUnXSkKICAgICAgICAgICAgaW1hZ2UgPSBQSUxJbWFnZS5vcGVuKGltYWdlX3BhdGgpCiAgICAgICAgICAgIAogICAgICAgICAgICBidWZmZXIgPSBCeXRlc0lPKCkKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIGltYWdlX3BhdGggPSAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LHswfSIuZm9ybWF0KGRhdGFfdXJpKQogICAgICAgICAgICAKICAgICAgICAjIENhbGN1bGF0ZSB0aGUgc2l6ZSBhbmQgYWRqdXN0ZWQgZGlzcGxheSBzaXplCiAgICAgICAgaW1hZ2Vfd2lkdGgsIGltYWdlX2hlaWdodCA9IGltYWdlLnNpemUKICAgICAgICBtYXhfd2lkdGggPSBpbWFnZV93aWR0aAogICAgICAgIGFkanVzdGVkX3dpZHRoID0gbWluKGltYWdlX3dpZHRoLCBtYXhfd2lkdGgpCiAgICAgICAgYWRqdXN0ZWRfcmF0aW8gPSBhZGp1c3RlZF93aWR0aCAvIGltYWdlX3dpZHRoCiAgICAgICAgYWRqdXN0ZWRfaGVpZ2h0ID0gYWRqdXN0ZWRfcmF0aW8gKiBpbWFnZV9oZWlnaHQKICAgICAgICAKICAgICAgICAjIENyZWF0ZSBsaXN0IG9mIHBvbHlnb25zIHRvIGJlIGRyYXduCiAgICAgICAgcG9seWdvbnMgPSB7fQogICAgICAgIGJib3hfcG9seWdvbnMgPSB7fQogICAgICAgIHJsZV9yZWdpb25zID0ge30KICAgICAgICBwb2x5X2NvbG9ycyA9IHt9CiAgICAgICAgIyBwcmludCgnICBzZWdtZW50YXRpb25zICh7fSk6Jy5mb3JtYXQobGVuKHNlbGYuc2VnbWVudGF0aW9uc1tpbWFnZV9pZF0pKSkKICAgICAgICBmb3IgaSwgc2VnbSBpbiBlbnVtZXJhdGUoc2VsZi5zZWdtZW50YXRpb25zW2ltYWdlX2lkXSk6CiAgICAgICAgICAgIHBvbHlnb25zX2xpc3QgPSBbXQogICAgICAgICAgICBpZiBzZWdtWydjYXRlZ29yeV9pZCddICE9IDMgYW5kIHNlZ21bJ2NhdGVnb3J5X2lkJ10gIT0gNjoKICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgaWYgc2VnbVsnaXNjcm93ZCddICE9IC01MDAwOgogICAgICAgICAgICAgICAgcHggPSAwCiAgICAgICAgICAgICAgICB4LCB5ID0gMCwgMAogICAgICAgICAgICAgICAgcmxlX2xpc3QgPSBbXQogICAgICAgICAgICAgICAgZm9yIGosIGNvdW50cyBpbiBlbnVtZXJhdGUoc2VnbVsnc2VnbWVudGF0aW9uJ11bJ2NvdW50cyddKToKICAgICAgICAgICAgICAgICAgICBpZiBqICUgMiA9PSAwOgogICAgICAgICAgICAgICAgICAgICAgICAjIEVtcHR5IHBpeGVscwogICAgICAgICAgICAgICAgICAgICAgICBweCArPSBjb3VudHMKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAjIE5lZWQgdG8gZHJhdyBvbiB0aGVzZSBwaXhlbHMsIHNpbmNlIHdlIGFyZSBkcmF3aW5nIGluIHZlY3RvciBmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAjIHdlIG5lZWQgdG8gZHJhdyBob3Jpem9udGFsIGxpbmVzIG9uIHRoZSBpbWFnZQogICAgICAgICAgICAgICAgICAgICAgICB4X3N0YXJ0ID0gdHJ1bmModHJ1bmMocHggLyBpbWFnZV9oZWlnaHQpICogYWRqdXN0ZWRfcmF0aW8pCiAgICAgICAgICAgICAgICAgICAgICAgIHlfc3RhcnQgPSB0cnVuYyhweCAlIGltYWdlX2hlaWdodCAqIGFkanVzdGVkX3JhdGlvKQogICAgICAgICAgICAgICAgICAgICAgICBweCArPSBjb3VudHMKICAgICAgICAgICAgICAgICAgICAgICAgeF9lbmQgPSB0cnVuYyh0cnVuYyhweCAvIGltYWdlX2hlaWdodCkgKiBhZGp1c3RlZF9yYXRpbykKICAgICAgICAgICAgICAgICAgICAgICAgeV9lbmQgPSB0cnVuYyhweCAlIGltYWdlX2hlaWdodCAqIGFkanVzdGVkX3JhdGlvKQogICAgICAgICAgICAgICAgICAgICAgICBpZiB4X2VuZCA9PSB4X3N0YXJ0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIG9ubHkgb24gb25lIGxpbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJsZV9saXN0LmFwcGVuZCh7J3gnOiB4X3N0YXJ0LCAneSc6IHlfc3RhcnQsICd3aWR0aCc6IDEgLCAnaGVpZ2h0JzogKHlfZW5kIC0geV9zdGFydCl9KQogICAgICAgICAgICAgICAgICAgICAgICBpZiB4X2VuZCA+IHhfc3RhcnQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgc3BhbnMgbW9yZSB0aGFuIG9uZSBsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluc2VydCB0b3AgbGluZSBmaXJzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmxlX2xpc3QuYXBwZW5kKHsneCc6IHhfc3RhcnQsICd5JzogeV9zdGFydCwgJ3dpZHRoJzogMSwgJ2hlaWdodCc6IChpbWFnZV9oZWlnaHQgLSB5X3N0YXJ0KX0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW5zZXJ0IG1pZGRsZSBsaW5lcyBpZiBuZWVkZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzX3NwYW5uZWQgPSB4X2VuZCAtIHhfc3RhcnQgKyAxICMgdG90YWwgbnVtYmVyIG9mIGxpbmVzIHNwYW5uZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxfbGluZXNfdG9faW5zZXJ0ID0gbGluZXNfc3Bhbm5lZCAtIDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZ1bGxfbGluZXNfdG9faW5zZXJ0ID4gMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsX2xpbmVzX3RvX2luc2VydCA9IHRydW5jKGZ1bGxfbGluZXNfdG9faW5zZXJ0ICogYWRqdXN0ZWRfcmF0aW8pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmxlX2xpc3QuYXBwZW5kKHsneCc6ICh4X3N0YXJ0ICsgMSksICd5JzogMCwgJ3dpZHRoJzogZnVsbF9saW5lc190b19pbnNlcnQsICdoZWlnaHQnOiBpbWFnZV9oZWlnaHR9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJbnNlcnQgYm90dG9tIGxpbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJsZV9saXN0LmFwcGVuZCh7J3gnOiB4X2VuZCwgJ3knOiAwLCAnd2lkdGgnOiAxLCAnaGVpZ2h0JzogeV9lbmR9KQogICAgICAgICAgICAgICAgaWYgbGVuKHJsZV9saXN0KSA+IDA6CiAgICAgICAgICAgICAgICAgICAgcmxlX3JlZ2lvbnNbc2VnbVsnaWQnXV0gPSBybGVfbGlzdCAgCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBmb3Igc2VnbWVudGF0aW9uX3BvaW50cyBpbiBzZWdtWydzZWdtZW50YXRpb24nXTogI1snY291bnRzJ10KICAgICAgICAgICAgICAgICAgICBzZWdtZW50YXRpb25fcG9pbnRzID0gbnAubXVsdGlwbHkoc2VnbWVudGF0aW9uX3BvaW50cywgYWRqdXN0ZWRfcmF0aW8pLmFzdHlwZShpbnQpCiAgICAgICAgICAgICAgICAgICAgcG9seWdvbnNfbGlzdC5hcHBlbmQoc3RyKHNlZ21lbnRhdGlvbl9wb2ludHMpLmxzdHJpcCgnWycpLnJzdHJpcCgnXScpKQogICAgICAgICAgICBwb2x5Z29uc1tzZWdtWydpZCddXSA9IHBvbHlnb25zX2xpc3QKICAgICAgICAgICAgaWYgaSA8IGxlbihzZWxmLmNvbG9ycyk6CiAgICAgICAgICAgICAgICBwb2x5X2NvbG9yc1tzZWdtWydpZCddXSA9IHNlbGYuY29sb3JzW2ldCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwb2x5X2NvbG9yc1tzZWdtWydpZCddXSA9ICd3aGl0ZScKICAgICAgICAgICAgCiAgICAgICAgICAgIGJib3ggPSBzZWdtWydiYm94J10KICAgICAgICAgICAgYmJveF9wb2ludHMgPSBbYmJveFswXSwgYmJveFsxXSwgYmJveFswXSArIGJib3hbMl0sIGJib3hbMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJib3hbMF0gKyBiYm94WzJdLCBiYm94WzFdICsgYmJveFszXSwgYmJveFswXSwgYmJveFsxXSArIGJib3hbM10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJib3hbMF0sIGJib3hbMV1dCiAgICAgICAgICAgIGJib3hfcG9pbnRzID0gbnAubXVsdGlwbHkoYmJveF9wb2ludHMsIGFkanVzdGVkX3JhdGlvKS5hc3R5cGUoaW50KQogICAgICAgICAgICBiYm94X3BvbHlnb25zW3NlZ21bJ2lkJ11dID0gc3RyKGJib3hfcG9pbnRzKS5sc3RyaXAoJ1snKS5yc3RyaXAoJ10nKQogICAgICAgICAgICAgICAgCiAgICAgICAgaWYgc2hvd19jcm93ZHM6CiAgICAgICAgICAgIG1hc2tfYXJyID0gbnAuemVyb3MoKGltYWdlX2hlaWdodCwgaW1hZ2Vfd2lkdGgpKQogICAgICAgICAgICBhcnIgPSBbXQogICAgICAgICAgICBmb3Igc2VnX2lkLCByZWN0X2xpc3QgaW4gcmxlX3JlZ2lvbnMuaXRlbXMoKToKICAgICAgICAgICAgICAgIG0gPSBbXQogICAgICAgICAgICAgICAgZm9yIHJlY3RfZGVmIGluIHJlY3RfbGlzdDoKICAgICAgICAgICAgICAgICAgICB4LCB5ID0gcmVjdF9kZWZbJ3gnXSwgcmVjdF9kZWZbJ3knXQogICAgICAgICAgICAgICAgICAgIHcsIGggPSByZWN0X2RlZlsnd2lkdGgnXSwgcmVjdF9kZWZbJ2hlaWdodCddCiAgICAgICAgICAgICAgICAgICAgZm9yIHIgaW4gcmFuZ2UoeCwgeCt3KzEpOgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgYyBpbiByYW5nZSh5LHkraCsxKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tfYXJyW2NdW3JdID0gMjU1CiAgICAgICAgICAgIHBsdC5pbXNob3cobWFza19hcnIsIGNtYXA9J2dyYXknKQogICAgICAgICAgICBwbHQuZ2NhKCkuc2V0X2F4aXNfb2ZmKCkKICAgICAgICAgICAgZmlndXJlID0gcGx0LmdjZigpCiAgICAgICAgICAgIGZpZ3VyZS5zZXRfc2l6ZV9pbmNoZXMobWFza19hcnIuc2hhcGVbMF0sIG1hc2tfYXJyLnNoYXBlWzFdKQogICAgICAgICAgICBwbHQuc3VicGxvdHNfYWRqdXN0KHRvcCA9IDEsIGJvdHRvbSA9IDAsIHJpZ2h0ID0gMSwgbGVmdCA9IDAsIGhzcGFjZSA9IDAsIHdzcGFjZSA9IDApCiAgICAgICAgICAgIHBsdC5tYXJnaW5zKDAsMCkKICAgICAgICAgICAgcGx0LmdjYSgpLnhheGlzLnNldF9tYWpvcl9sb2NhdG9yKHBsdC5OdWxsTG9jYXRvcigpKQogICAgICAgICAgICBwbHQuZ2NhKCkueWF4aXMuc2V0X21ham9yX2xvY2F0b3IocGx0Lk51bGxMb2NhdG9yKCkpCiAgICAgICAgICAgIHBsdC5zYXZlZmlnKCdtYXNrcy8nICsgc3RyKGZuYW1lWzpmbmFtZS5yaW5kZXgoJy4nKV0pICsgJy5wbmcnLCBiYm94X2luY2hlcyA9ICd0aWdodCcsIHBhZF9pbmNoZXMgPSAwLCBkcGk9MSkKICAgICAgICAgICAgaW0xID0gUElMSW1hZ2Uub3BlbignbWFza3MvJyArIHN0cihmbmFtZVs6Zm5hbWUucmluZGV4KCcuJyldKSArICcucG5nJykKICAgICAgICAgICAgaW0xID0gaW0xLnJlc2l6ZSgoaW1hZ2Vfd2lkdGgsIGltYWdlX2hlaWdodCkpCiAgICAgICAgICAgIGltMS5zYXZlKCdtYXNrcy8nICsgc3RyKGZuYW1lWzpmbmFtZS5yaW5kZXgoJy4nKV0pICsgJy5wbmcnKQogICAgICAgICAgICBwbHQuY2xvc2UoKQoKICAgIGRlZiBwcm9jZXNzX2luZm8oc2VsZik6CiAgICAgICAgc2VsZi5pbmZvID0gc2VsZi5jb2NvWydpbmZvJ10KICAgIAogICAgZGVmIHByb2Nlc3NfbGljZW5zZXMoc2VsZik6CiAgICAgICAgc2VsZi5saWNlbnNlcyA9IHNlbGYuY29jb1snbGljZW5zZXMnXQogICAgCiAgICBkZWYgcHJvY2Vzc19jYXRlZ29yaWVzKHNlbGYpOgogICAgICAgIHNlbGYuY2F0ZWdvcmllcyA9IHt9CiAgICAgICAgc2VsZi5zdXBlcl9jYXRlZ29yaWVzID0ge30KICAgICAgICBmb3IgY2F0ZWdvcnkgaW4gc2VsZi5jb2NvWydjYXRlZ29yaWVzJ106CiAgICAgICAgICAgIGNhdF9pZCA9IGNhdGVnb3J5WydpZCddCiAgICAgICAgICAgIHN1cGVyX2NhdGVnb3J5ID0gY2F0ZWdvcnlbJ3N1cGVyY2F0ZWdvcnknXQogICAgICAgICAgICAKICAgICAgICAgICAgIyBBZGQgY2F0ZWdvcnkgdG8gdGhlIGNhdGVnb3JpZXMgZGljdAogICAgICAgICAgICBpZiBjYXRfaWQgbm90IGluIHNlbGYuY2F0ZWdvcmllczoKICAgICAgICAgICAgICAgIHNlbGYuY2F0ZWdvcmllc1tjYXRfaWRdID0gY2F0ZWdvcnkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHByaW50KCJFUlJPUjogU2tpcHBpbmcgZHVwbGljYXRlIGNhdGVnb3J5IGlkOiB7fSIuZm9ybWF0KGNhdGVnb3J5KSkKCiAgICAgICAgICAgICMgQWRkIGNhdGVnb3J5IHRvIHN1cGVyX2NhdGVnb3JpZXMgZGljdAogICAgICAgICAgICBpZiBzdXBlcl9jYXRlZ29yeSBub3QgaW4gc2VsZi5zdXBlcl9jYXRlZ29yaWVzOgogICAgICAgICAgICAgICAgc2VsZi5zdXBlcl9jYXRlZ29yaWVzW3N1cGVyX2NhdGVnb3J5XSA9IHtjYXRfaWR9ICMgQ3JlYXRlIGEgbmV3IHNldCB3aXRoIHRoZSBjYXRlZ29yeSBpZAogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgc2VsZi5zdXBlcl9jYXRlZ29yaWVzW3N1cGVyX2NhdGVnb3J5XSB8PSB7Y2F0X2lkfSAjIEFkZCBjYXRlZ29yeSBpZCB0byB0aGUgc2V0CiAgICAgICAgICAgICAgICAKICAgIGRlZiBwcm9jZXNzX2ltYWdlcyhzZWxmKToKICAgICAgICBzZWxmLmltYWdlcyA9IHt9CiAgICAgICAgZm9yIGltYWdlIGluIHNlbGYuY29jb1snaW1hZ2VzJ106CiAgICAgICAgICAgIGltYWdlX2lkID0gaW1hZ2VbJ2lkJ10KICAgICAgICAgICAgaWYgaW1hZ2VfaWQgaW4gc2VsZi5pbWFnZXM6CiAgICAgICAgICAgICAgICBwcmludCgiRVJST1I6IFNraXBwaW5nIGR1cGxpY2F0ZSBpbWFnZSBpZDoge30iLmZvcm1hdChpbWFnZSkpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBzZWxmLmltYWdlc1tpbWFnZV9pZF0gPSBpbWFnZQogICAgICAgICAgICAgICAgCiAgICBkZWYgcHJvY2Vzc19zZWdtZW50YXRpb25zKHNlbGYpOgogICAgICAgIHNlbGYuc2VnbWVudGF0aW9ucyA9IHt9CiAgICAgICAgZm9yIHNlZ21lbnRhdGlvbiBpbiBzZWxmLmNvY29bJ2Fubm90YXRpb25zJ106CiAgICAgICAgICAgIGltYWdlX2lkID0gc2VnbWVudGF0aW9uWydpbWFnZV9pZCddCiAgICAgICAgICAgIGlmIGltYWdlX2lkIG5vdCBpbiBzZWxmLnNlZ21lbnRhdGlvbnM6CiAgICAgICAgICAgICAgICBzZWxmLnNlZ21lbnRhdGlvbnNbaW1hZ2VfaWRdID0gW10KICAgICAgICAgICAgc2VsZi5zZWdtZW50YXRpb25zW2ltYWdlX2lkXS5hcHBlbmQoc2VnbWVudGF0aW9uKQoKYW5ub3RhdGlvbl9wYXRoID0gJy4vc2FtcGxlX2Fubm90YXRpb25zLmpzb24nCmltYWdlX2RpciA9ICdpbWFnZXMnCgpjb2NvX2RhdGFzZXQgPSBDb2NvRGF0YXNldChhbm5vdGF0aW9uX3BhdGgsIGltYWdlX2RpcikKCiMgaWYgbm90IG9zLnBhdGguZXhpc3RzKCdtYXNrcycpOgojICAgICBvcy5tYWtlZGlycygnbWFza3MnKQoKIyBjb3VudCA9IDUwCgpxID0gMAoKZCA9IGdsb2IuZ2xvYignaW1hZ2VzLyonKQpmb3IgaSBpbiBkOgogICAgcHJpbnQocSkKICAgICMgaWYgY291bnQgPCAwOgogICAgIyAgICAgYnJlYWsKICAgICMgY291bnQgLT0gMQogICAgZm5hbWUgPSBpW2kucmluZGV4KCdpbWFnZXMvJykgKyBsZW4oJ2ltYWdlcy8nKTpdCiAgICBpZHggPSAtMQogICAgZm9yIGltZyBpbiBjb2NvX2RhdGFzZXQuaW1hZ2VzOgogICAgICAgIGlmIGZuYW1lIGluIGNvY29fZGF0YXNldC5pbWFnZXNbaW1nXVsnZmlsZV9uYW1lJ106CiAgICAgICAgICAgIGlkeCA9IGltZwogICAgICAgICAgICBicmVhawogICAgaWYgaWR4ID09IC0xOgogICAgICAgIHByaW50KGZuYW1lKQogICAgICAgIGNvbnRpbnVlCiAgICB0cnk6CiAgICAgICAgY29jb19kYXRhc2V0LmRpc3BsYXlfaW1hZ2UoaWR4LCBmbmFtZSwgcSwgc2hvd19wb2x5cz1GYWxzZSwgc2hvd19iYm94PUZhbHNlLCBzaG93X2Nyb3dkcz1UcnVlLCB1c2VfdXJsPUZhbHNlKQogICAgZXhjZXB0OgogICAgICAgIHByaW50KGZuYW1lKQogICAgcSArPSAxCgp3aXRoIG9wZW4oJ3ZpYV9yZWdpb25fZGF0YS5qc29uJywgJ3cnKSBhcyBvdXRmaWxlOgogICAganNvbi5kdW1wKGRhdGEsIG91dGZpbGUpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGltYWdlLnNhdmUoYnVmZmVyLCBmb3JtYXQ9J1BORycpCiAgICAgICAgICAgIGJ1ZmZlci5zZWVrKDApCiAgICAgICAgICAgIAogICAgICAgICAgICBkYXRhX3VyaSA9IGJhc2U2NC5iNjRlbmNvZGUoYnVmZmVyLnJlYWQoKSkuZGVjb2RlKCdhc2NpaScpCjx8ZmltX2VuZHw+"]
["ebb2f7e3b8c218147e80ba891236b1ef89d383a2-2","ebb2f7e3b8c218147e80ba891236b1ef89d383a2",{"$cut":{"chars":45208,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMyAtaQojIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBPUyBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgojIENvcHlyaWdodCAoYykgMjAxOS0yMDIxIFRoZSBFRElEIEpTT04gVG9vbHMgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIwojIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgojCiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQoKIyBUT0RPKGNocm9taXVtOjM5NTk0Nyk6IFNoYXJlIHN0cmluZ3MgYW5kIG9wdGlvbnMgd2l0aCBqc29uZWRpZAojIFRPRE8oY2hyb21pdW06Mzk1OTQ3KTogQWRkIEpTT04gdmFsaWRhdGlvbgoKCiIiIkNyZWF0ZSBhbiBFRElEIGJpbmFyeSBibG9iIG91dCBvZiBhIEpzb24gcmVwcmVzZW50YXRpb24gb2YgYW4gRURJRC4iIiIKCgppbXBvcnQgaXRlcnRvb2xzCmltcG9ydCBqc29uCmZyb20gdHlwaW5nIGltcG9ydCBBbnksIERpY3QsIExpc3QsIE5ld1R5cGUsIFR1cGxlCgpmcm9tIC4gaW1wb3J0IGRhdGFfYmxvY2sKZnJvbSAuIGltcG9ydCBlZGlkIGFzIGVkaWRfbW9kdWxlCmZyb20gLiBpbXBvcnQgb3B0aW9ucyBhcyBvcHRpb25zX21vZHVsZQpmcm9tIC50b29scyBpbXBvcnQgUHJpbnRIZXhEYXRhCmZyb20gLnR5cGluZyBpbXBvcnQgQm9vbERpY3QKCkJpdE1hc2sgPSBOZXdUeXBlKCJCaXRNYXNrIiwgaW50KQoKCmRlZiBfQnVpbGRCaXRzRnJvbU9wdGlvbnMob3B0aW9uczogTGlzdFtzdHJdLCBqc29uX21hcDogQm9vbERpY3QpIC0+IGludDoKICAgICIiIkVuY29kZSBhIGxpc3Qgb2Ygb3B0aW9ucyBpbnRvIGJpdCBmb3JtIGZvciBhbiBFRElEIGJpbmFyeSBibG9iLgoKICAgIFRoZSBvcmRlciBvZiB0aGUgb3B0aW9ucyBkZXRlcm1pbmVzIHRoZSBiaXQgcG9zaXRpb24gaW4gdGhlIEVESUQuIFRoZSBmaXJzdAogICAgb3B0aW9uIGNvcnJlc3BvbmRzIHRvIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgcmVzdWx0LCB0aGUgbGFzdCBvcHRpb24KICAgIHdpdGggdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCwgZXRjLgoKICAgIEFyZ3M6CiAgICAgIG9wdGlvbnM6IFRoZSBsaXN0IG9mIG9wdGlvbnMgKHN0cmluZ3MpLgogICAgICBqc29uX21hcDogVGhlIGpzb24gZGljdGlvbmFyeSBpbmRpY2F0aW5nIHdoZXRoZXIgZWFjaCBvcHRpb24gaXMgdHJ1ZSBvcgogICAgICAgICAgZmFsc2UgKGkuZS4sIHN1cHBvcnRlZCBvciBub3QpLgoKICAgIFJldHVybnM6CiAgICAgIEFuIGludGVnZXIgdG8gYmUgc3RvcmVkIGluIHRoZSBFRElEIHRoYXQgZW5jb2RlcyB0aGVzZSBvcHRpb25zLgogICAgIiIiCiAgICBiaXRzID0gMAogICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgogICAgICAgIGJpdHMgPSAoYml0cyA8PCAxKSArIGludChqc29uX21hcFtvcHRpb25dKQogICAgcmV0dXJuIGJpdHMKCgpkZWYgX0J1aWxkQml0c0Zyb21CaXRtYXNrTGlzdCgKICAgIG9wdGlvbnM6IExpc3RbVHVwbGVbQml0TWFzaywgc3RyXV0sIGpzb25fbWFwOiBCb29sRGljdAopIC0+IGludDoKICAgICIiIkVuY29kZSBhIGxpc3Qgb2Ygb3B0aW9ucyBpbnRvIGJpdCBmb3JtIGZvciBhbiBFRElEIGJpbmFyeSBibG9iLgoKICAgIEFyZ3M6CiAgICAgIG9wdGlvbnM6IFRoZSBsaXN0IG9mIG9wdGlvbnMgKGJpdG1hc2ssIHN0cmluZyBwYWlycykuCiAgICAgIGpzb25fbWFwOiBUaGUganNvbiBkaWN0aW9uYXJ5IGluZGljYXRpbmcgd2hldGhlciBlYWNoIG9wdGlvbiBpcyB0cnVlIG9yCiAgICAgICAgICBmYWxzZSAoaS5lLiwgc3VwcG9ydGVkIG9yIG5vdCkuCgogICAgUmV0dXJuczoKICAgICAgQW4gaW50ZWdlciB0byBiZSBzdG9yZWQgaW4gdGhlIEVESUQgdGhhdCBlbmNvZGVzIHRoZXNlIG9wdGlvbnMuCiAgICAiIiIKICAgIGJpdHMgPSAwCiAgICBmb3IgbWFzaywgb3B0aW9uIGluIG9wdGlvbnM6CiAgICAgICAgaWYgb3B0aW9uIGluIGpzb25fbWFwOgogICAgICAgICAgICBiaXRzICs9IG1hc2sgKiBpbnQoanNvbl9tYXBbb3B0aW9uXSkKICAgIHJldHVybiBiaXRzCgoKZGVmIEJ1aWxkTWFudWZhY3R1cmVySW5mbyhlZGlkOiBMaXN0W2ludF0sIG1hbnVfanNvbjogRGljdFtzdHIsIEFueV0pOgogICAgIiIiQWRkIGluZm9ybWF0aW9uIGZyb20gbWFudWZhY3R1cmVyIGluZm8gZGljdGlvbmFyeSBpbnRvIHRoZSBFRElEIGxpc3QuCgogICAgQXJnczoKICAgICAgZWRpZDogVGhlIGZ1bGwgbGlzdCBmb3JtIG9mIHRoZSBFRElELgogICAgICBtYW51X2pzb246IFRoZSBkaWN0aW9uYXJ5IG9mIG1hbnVmYWN0dXJlciBpbmZvLgogICAgIiIiCiAgICAjIE1hbnVmYWN0dXJlciBOYW1lCiAgICBtYW51X2lkID0gbWFudV9qc29uWyJNYW51ZmFjdHVyZXIgSUQiXQoKICAgIG0xID0gKG9yZChtYW51X2lkWzBdKSAtIDY0KSA8PCAxMAogICAgbTIgPSAob3JkKG1hbnVfaWRbMV0pIC0gNjQpIDw8IDUKICAgIG0zID0gb3JkKG1hbnVfaWRbMl0pIC0gNjQKCiAgICBtID0gbTEgKyBtMiArIG0zCiAgICBlZGlkWzB4MDhdID0gbSA+PiA4CiAgICBlZGlkWzB4MDldID0gbSAmIDB4RkYKCiAgICAjIElEIFByb2R1Y3QgQ29kZQogICAgcHJvZF9jb2RlID0gbWFudV9qc29uWyJJRCBQcm9kdWN0IENvZGUiXQogICAgZWRpZFsweDBBXSA9IHByb2RfY29kZSAmIDB4RkYKICAgIGVkaWRbMHgwQl0gPSBwcm9kX2NvZGUgPj4gOAoKICAgICMgU2VyaWFsIE51bWJlcgogICAgc2VyX251bSA9IG1hbnVfanNvblsiU2VyaWFsIG51bWJlciJdCiAgICBpZiBzZXJfbnVtOgogICAgICAgIGVkaWRbMHgwQ10gPSBzZXJfbnVtICYgMHhGRgogICAgICAgIGVkaWRbMHgwRF0gPSAoc2VyX251bSA+PiA4KSAmIDB4RkYKICAgICAgICBlZGlkWzB4MEVdID0gKHNlcl9udW0gPj4gMTYpICYgMHhGRgogICAgICAgIGVkaWRbMHgwRl0gPSAoc2VyX251bSA+PiAyNCkgJiAweEZGCiAgICBlbHNlOgogICAgICAgIGVkaWRbMHgwQzoweDEwXSA9IFsweDAwXSAqIDQKCiAgICAjIE1hbnVmYWN0dXJl"}}]
["067e4defed4e7ef02afccecce54428b633d79539-1","067e4defed4e7ef02afccecce54428b633d79539","PHxmaW1fcHJlZml4fD4KZnJvbSBtYXRwbG90bGliLmF4ZXMgaW1wb3J0IFN1YnBsb3RCYXNlLCBBeGVzLCBfcHJvY2Vzc19wbG90X3Zhcl9hcmdzLCBcCglfcHJvY2Vzc19wbG90X3Zhcl9hcmdzLCByY1BhcmFtcywgVGV4dCwgRm9udFByb3BlcnRpZXMsIGxpbnNwYWNlLFwKCVBvbHlnb24sIEludGVydmFsLCBWYWx1ZSwgU2NhbGFyRm9ybWF0dGVyLCBBdXRvTG9jYXRvciwgQmJveCwgUG9pbnQsIFwKCU5vbnNlcGFyYWJsZVRyYW5zZm9ybWF0aW9uLCBGdW5jWFksIFBPTEFSLCBMT0cxMCwgZ2V0X2Jib3hfdHJhbnNmb3JtLCB1bml0X2Jib3gsXAoJcG9wYWxsLCBMaW5lMkQsIElERU5USVRZCmZyb20gbWF0cGxvdGxpYi5heGlzIGltcG9ydCBBeGlzLCBYQXhpcywgWUF4aXMsXAoJWFRpY2ssIFlUaWNrLCBcCgkgTnVsbExvY2F0b3IsIEF1dG9Mb2NhdG9yLCBTY2FsYXJGb3JtYXR0ZXIsIE51bGxGb3JtYXR0ZXIKZnJvbSBtYXRwbG90bGliLmFydGlzdCBpbXBvcnQgQXJ0aXN0CmZyb20gbWF0cGxvdGxpYi50aWNrZXIgaW1wb3J0IExvY2F0b3IKZnJvbSBtYXRwbG90bGliLnRyYW5zZm9ybXMgaW1wb3J0IEludGVydmFsLCBWYWx1ZSwgXAoJYmxlbmRfeHlfc2VwX3RyYW5zZm9ybQoKZnJvbSBrYXB1LnN0ZXJlb2dyYXBoaWMgaW1wb3J0IFN0ZXJlb0dyYXBoaWNQcm9qZWN0aW9uCmZyb20gcHlsYWIgaW1wb3J0IGdjZgppbXBvcnQgbWF0aApmcm9tIG51bXB5IGltcG9ydCAqCmltcG9ydCBrYXB1CgpkZWYgcm5kKHgpOgoJcmV0dXJuICgoeCArIDM2MCsxODApICUgMzYwKSAtIDE4MAoKZGVmIHIxODAoeCk6CglyZXR1cm4gKCh4ICsgMzYwKzE4MCkgJSAzNjApIC0gMTgwCgpkZWYgcjkwKHgpOgoJcmV0dXJuICgoeCArIDE4MCs5MCkgJSAxODApIC0gOTAKCmRlZiBybmR2KHYpOgoJeCwgeSA9IHYKCXJldHVybiBrYXB1LlZlY3RvcihybmQoeCksIHJuZCh5KSkKCmRlZiBnY2Ffd2NzKCoqa3dhcmdzKToKCWZpZyA9IGdjZigpIy5nY2EoKiprd2FyZ3MpCglheCA9IGZpZy5fYXhzdGFjaygpCglpZiBheCBpcyBub3QgTm9uZToKCQlyZXR1cm4gYXgKCWVsc2U6CiAgICAJIyBjb2RlIGR1cCBmcm9tIEZpZ3VyZS5nY2EgYW5kIEZpZ3VyZS5hZGRfc3VicGxvdAoJCWFyZ3MgPSBbMTExXQoJCWtleSA9IGZpZy5fbWFrZV9rZXkoKmFyZ3MsICoqa3dhcmdzKQoJCWlmIGZpZy5fc2Vlbi5oYXNfa2V5KGtleSk6CgkJCWF4ID0gZmlnLl9zZWVuW2tleV0KCQkJZmlnLnNjYShheCkKCQkJcmV0dXJuIGF4CgkJCgkJCgkJaWYgbm90IGxlbihhcmdzKTogcmV0dXJuCgkJCgkJYSA9IFdjc1N1YlBsb3QoZmlnLCAqYXJncywgKiprd2FyZ3MpCgkJCgkJZmlnLmF4ZXMuYXBwZW5kKGEpCgkJZmlnLl9heHN0YWNrLnB1c2goYSkKCQlmaWcuc2NhKGEpCgkJZmlnLl9zZWVuW2tleV0gPSBhCgkJcmV0dXJuIGEKICAgIAogICAgCmRlZiB3Y3NwbG90KCphcmdzLCAqKmt3YXJncyk6CiAgICAiIiIKICAgIHdjcygpCiAgICAiIiIKICAgIGF4ID0gZ2NhX3djcygpCiAgICByZXR1cm4gYXgucGxvdCgqYXJncywgKiprd2FyZ3MpIAoKZGVmIGxpbmVpbnRlcnNlY3Rpb24ocDEsIHAyLCBwMywgcDQpOgoJIyBmcm9tIGh0dHA6Ly9hc3Ryb25vbXkuc3dpbi5lZHUuYXUvfnBib3Vya2UvZ2VvbWV0cnkvbGluZWxpbmUyZC8KCW51bWEgPSAocDQueCAtIHAzLngpKihwMS55LXAzLnkpIC0gKHA0LnktcDMueSkqKHAxLngtcDMueCkKCW51bWIgPSAocDIueCAtIHAxLngpKihwMS55LXAzLnkpIC0gKHAyLnktcDEueSkqKHAxLngtcDMueCkKCWRlbm9tID0gKHA0LnkgLSBwMy55KSoocDIueC1wMS54KSAtIChwNC54LXAzLngpKihwMi55LXAxLnkpCglpZiBhYnMoZGVub20pIDwgMWUtNjoKCQlyZXR1cm4gTm9uZQoJZWxzZToKCQl1YSA9IG51bWEvZGVub20KCQl1YiA9IG51bWIvZGVub20KCQlpZiB1YSA+PSAwIGFuZCB1YSA8IDEgYW5kIHViID49IDAgYW5kIHViIDwgMToKCQkJcmV0dXJuIHAxICsgKHAyIC0gcDEpLnNjYWxleHkodWEsIHVhKQoJCWVsc2U6CgkJCXJldHVybiBOb25lCgoJCmNsYXNzIFdjc0xvY2F0b3IoTG9jYXRvcik6CglkZWYgX19pbml0X18oc2VsZiwgYXhpcywgc2xvY2F0b3IpOgoJCXNlbGYuYXhpcyA9IGF4aXMKCQlzZWxmLmF4ZXMgPSBzZWxmLmF4aXMuYXhlcwoJCXNlbGYuc2xvY2F0b3IgPSBzbG9jYXRvcgoJCXNlbGYuTiA9IDIwCgkJc2VsZi5sb2NhdGlvbk1hcCA9IHt9CgoKY2xhc3MgV2NzWExvY2F0b3IoV2NzTG9jYXRvcik6ICMgVGhldGEKCWRlZiBfX2NhbGxfXyhzZWxmKToKCQlzZWxmLnNsb2NhdG9yLnNldF92aWV3X2ludGVydmFsKHNlbGYudmlld0ludGVydmFsKQoJCXNlbGYuc2xvY2F0b3Iuc2V0X2RhdGFfaW50ZXJ2YWwoc2VsZi5kYXRhSW50ZXJ2YWwpCgkJKHRoZXRhMSwgcGhpMSksICh0aGV0YTIsIHBoaTIpID0gc2VsZi5heGVzLmdldFdjc0Jib3goKQoJCXRoZXRhSW50ZXJ2YWwgPSBJbnRlcnZhbChWYWx1ZSh0aGV0YTEpLCBWYWx1ZSh0aGV0YTIpKQoJCSNwcmludCAidGhldGEgaW50ZXJ2YWw6IiwgdGhldGExLCB0aGV0YTIKCQlzZWxmLnNsb2NhdG9yLnNldF92aWV3X2ludGVydmFsKHRoZXRhSW50ZXJ2YWwpCgkJc2VsZi5zbG9jYXRvci5zZXRfZGF0YV9pbnRlcnZhbCh0aGV0YUludGVydmFsKQoJCXRoZXRhVmFsdWVzID0gc2VsZi5zbG9jYXRvcigpCgkJCgkJeFZhbHVlcyAgPSBbXQoJCXN0ZXAgPSAocGhpMi1waGkxKS9zZWxmLk4KCQlwaGlSYW5nZSA9IGFyYW5nZShwaGkxLCBwaGkyK3N0ZXAvMi4sIHN0ZXApCgkJcGhpUmFuZ2VaaXBwZWQgPSB6aXAocGhpUmFuZ2VbOi0xXSwgcGhpUmFuZ2VbMTpdKQoJCSNwcmludCBwaGlSYW5nZQoJCSNwcmludCB0aGV0YVZhbHVlcwoJCQoJCXdjcyA9IHNlbGYuYXhlcy53Y3MKCQkoeDEsIHkxKSwgKHgyLCB5MikgPSBzZWxmLmF4ZXMuZ2V0V29ybGQoKQoJCQoJCWF4aXNfc3RhcnQgPSBrYXB1LlZlY3Rvcih4MSwgeTEpCgkJYXhpc19lbmQgPSBrYXB1LlZlY3Rvcih4MiwgeTEpCgkJCgkJc2VsZi5sb2NhdGlvbk1hcCA9IHt9CgkJZm9yIHRoZXRhIGluIHRoZXRhVmFsdWVzOgoJCQlmb3IgcGhpMSwgcGhpMiBpbiBwaGlSYW5nZVppcHBlZDoKCQkJCSNwcmludCAidGhldGE6IiwgdGhldGEsIHBoaTEsIHBoaTIKCQkJCXAxID0gd2NzLnRvX3BpeGVsKHRoZXRhLCBwaGkxKQoJCQkJcDIgPSB3Y3MudG9fcGl4ZWwodGhldGEsIHBoaTIpCgkJCQlpZiBwMSBpcyBub3QgTm9uZSBhbmQgcDIgaXMgbm90IE5vbmU6CgkJCQkJdzEgPSBrYXB1LlZlY3RvcihwMSkKCQkJCQl3MiA9IGthcHUuVmVjdG9yKHAyKQoJCQkJCXAgPSBsaW5laW50ZXJzZWN0aW9uKGF4aXNfc3RhcnQsIGF4aXNfZW5kLCB3MSwgdzIpCgkJCQkJI3ByaW50IHcxLngsIHcxLnksIHcyLngsIHcyLnkKCQkJCQlpZiBwOgoJCQkJCQkjcHJpbnQgcAoJCQkJCQlzZWxmLmxvY2F0aW9uTWFwW3AueF0gPSB0aGV0YQoJCQkJCQl4VmFsdWVzLmFwcGVuZChwLngpCgkJcmV0dXJuIGFycmF5KHhWYWx1ZXMpCgoJCQoJCQoJCQpjbGFzcyBXY3NZTG9jYXRvcihXY3NMb2NhdG9yKToKCWRlZiBfX2NhbGxfXyhzZWxmKToKCQlzZWxmLnNsb2NhdG9yLnNldF92aWV3X2ludGVydmFsKHNlbGYudmlld0ludGVydmFsKQoJCXNlbGYuc2xvY2F0b3Iuc2V0X2RhdGFfaW50ZXJ2YWwoc2VsZi5kYXRhSW50ZXJ2YWwpCgkJKHRoZXRhMSwgcGhpMSksICh0aGV0YTIsIHBoaTIpID0gc2VsZi5heGVzLmdldFdjc0Jib3goKQoJCXBoaUludGVydmFsID0gSW50ZXJ2YWwoVmFsdWUocGhpMSksIFZhbHVlKHBoaTIpKQoJCSNwcmludCAidGhldGEgaW50ZXJ2YWw6IiwgdGhldGExLCB0aGV0YTIKCQlzZWxmLnNsb2NhdG9yLnNldF92aWV3X2ludGVydmFsKHBoaUludGVydmFsKQoJCXNlbGYuc2xvY2F0b3Iuc2V0X2RhdGFfaW50ZXJ2YWwocGhpSW50ZXJ2YWwpCgkJcGhpVmFsdWVzID0gc2VsZi5zbG9jYXRvcigpCgkJCgkJeVZhbHVlcyAgPSBbXQoJCXN0ZXAgPSAodGhldGEyLXRoZXRhMSkvc2VsZi5OCgkJdGhldGFSYW5nZSA9IGFyYW5nZSh0aGV0YTEsIHRoZXRhMitzdGVwLzIuLCBzdGVwKQoJCXRoZXRhUmFuZ2VaaXBwZWQgPSB6aXAodGhldGFSYW5nZVs6LTFdLCB0aGV0YVJhbmdlWzE6XSkKCQkjcHJpbnQgInRoZXRhIiwgdGhldGFSYW5nZQoJCSNwcmludCAicGhpIiwgcGhpVmFsdWVzCgkJCgkJd2NzID0gc2VsZi5heGVzLndjcwoJCSh4MSwgeTEpLCAoeDIsIHkyKSA9IHNlbGYuYXhlcy5nZXRXb3JsZCgpCgkJCgkJYXhpc19zdGFydCA9IGthcHUuVmVjdG9yKHgxLCB5MSkKCQlheGlzX2VuZCA9IGthcHUuVmVjdG9yKHgxLCB5MikKCQkKCQkjc2VsZi5sb2NhdGlvbk1hcCA9IHt9CgkJZm9yIHBoaSBpbiBwaGlWYWx1ZXM6CgkJCWlmIHBoaSA+PSAtOTAgYW5kIHBoaSA8PSA5MDoKCQkJCXByaW50ICJwaGkgPSIsIHBoaQoJCQkJZm9yIHRoZXRhMSwgdGhldGEyIGluIHRoZXRhUmFuZ2VaaXBwZWQ6CgkJCQkJI3ByaW50ICJ0aGV0YToiLCB0aGV0YSwgcGhpMSwgcGhpMgoJCQkJCSNpZiAodGhldGExIDw9IDkwIG9yIHRoZXRhMSA+PSAtOTApIGFuZCAodGhldGEyIDw9IDkwIG9yIHRoZXRhMiA+PSAtOTApOgoJCQkJCQlwMSA9IHdjcy50b19waXhlbChyMTgwKHRoZXRhMSksIHI5MChwaGkpKQoJCQkJCQlwMiA9IHdjcy50b19waXhlbChyMTgwKHRoZXRhMiksIHI5MChwaGkpKQoJCQkJCQlpZiBwMSBpcyBub3QgTm9uZSBhbmQgcDIgaXMgbm90IE5vbmU6CgkJCQkJCQl3MSA9IGthcHUuVmVjdG9yKHAxKQoJCQkJCQkJdzIgPSBrYXB1LlZlY3RvcihwMikKCQkJCQkJCXAgPSBsaW5laW50ZXJzZWN0aW9uKGF4aXNfc3RhcnQsIGF4aXNfZW5kLCB3MSwgdzIpCgkJCQkJCQkjcHJpbnQgdzEueCwgdzEueSwgdzIueCwgdzIueQoJCQkJCQkJaWYgcDoKCQkJCQkJCQlwcmludCBwLnkKCQkJCQkJCQkjc2VsZi5sb2NhdGlvbk1hcFtwLnldID0gcGhpCgkJCQkJCQkJeVZhbHVlcy5hcHBlbmQocC55KQoJCQkJCQkJCWJyZWFrICMgd2Ugb25seSB3YW50IDEgbGFiZWwKCQlyZXR1cm4gYXJyYXkoeVZhbHVlcykKCgpjbGFzcyBXY3NYQXhpcyhYQXhpcyk6CglkZWYgY2xhKHNlbGYpOgoJCVhBeGlzLmNsYShzZWxmKQoJCXNlbGYuc2V0X21ham9yX2xvY2F0b3IoV2NzWExvY2F0b3Ioc2VsZiwgQXV0b0xvY2F0b3IoKSkpCgkJc2VsZi5zZXRfbWFqb3JfZm9ybWF0dGVyKFNjYWxhckZvcm1hdHRlcigpKQoJCXNlbGYuc2V0X21pbm9yX2xvY2F0b3IoTnVsbExvY2F0b3IoKSkKCQlzZWxmLnNldF9taW5vcl9mb3JtYXR0ZXIoTnVsbEZvcm1hdHRlcigpKQoJCQoKY2xhc3MgV2NzWUF4aXMoWUF4aXMpOgoJZGVmIGNsYShzZWxmKToKCQlZQXhpcy5jbGEoc2VsZikKCQlzZWxmLnNldF9tYWpvcl9sb2NhdG9yKFdjc1lMb2NhdG9yKHNlbGYsIEF1dG9Mb2NhdG9yKCkpKQoJCXNlbGYuc2V0X21ham9yX2Zvcm1hdHRlcihTY2FsYXJGb3JtYXR0ZXIoKSkKCQlzZWxmLnNldF9taW5vcl9sb2NhdG9yKE51bGxMb2NhdG9yKCkpCgkJc2VsZi5zZXRfbWlub3JfZm9ybWF0dGVyKE51bGxGb3JtYXR0ZXIoKSkKCmNsYXNzIE5vVHJhbnNmb3JtYXRpb24ob2JqZWN0KToKCQkKCWRlZiBmb3J3YXJkKHNlbGYsIHgsIHkpOgoJCXJldHVybiB4LCB5CgkJCglkZWYgcmV2ZXJzZShzZWxmLCB4LCB5KToKCQlyZXR1cm4geCwgeQoKCWRlZiB1c2Vyc3RyaW5nKHNlbGYpOgoJCXJldHVybiAiIgoKY2xhc3MgV2NzR3JpZChBcnRpc3QpOgoJem9yZGVyID0gMwoJTiA9IDMwCglkZWYgX19pbml0X18oc2VsZiwgYXhlcyk6CgkJc2VsZi5heGVzID0gYXhlcwoJCQoJZGVmIGRyYXcoc2VsZiwgcmVuZGVyZXIpOgoKCQlwaGlWYWx1ZXMgPSBzZWxmLmF4ZXMueWF4aXMubWFqb3IubG9jYXRvci5zbG9jYXRvcigpCgkJdGhldGFWYWx1ZXMgPSBzZWxmLmF4ZXMueGF4aXMubWFqb3IubG9jYXRvci5zbG9jYXRvcigpCgkJCgkJKHRoZXRhMSwgcGhpMSksICh0aGV0YTIsIHBoaTIpID0gc2VsZi5heGVzLmdldFdjc0Jib3goKQoKCQl0aGV0YVN0ZXAgPSAodGhldGEyLXRoZXRhMSkvc2VsZi5OCgkJdGhldGFWYWx1ZXNTbWFsbCA9IGFyYW5nZSh0aGV0YTEsIHRoZXRhMit0aGV0YVN0ZXAvMi4sIHRoZXRhU3RlcCkKCQl0aGV0YVZhbHVlc1NtYWxsWmlwcGVkID0gemlwKHRoZXRhVmFsdWVzU21hbGxbOi0xXSwgdGhldGFWYWx1ZXNTbWFsbFsxOl0pCgoJCXBoaVN0ZXAgPSAocGhpMi1waGkxKS9zZWxmLk4KCQlwaGlWYWx1ZXNTbWFsbCA9IGFyYW5nZShwaGkxLCBwaGkyK3BoaVN0ZXAvMi4sIHBoaVN0ZXApCgkJcGhpVmFsdWVzU21hbGxaaXBwZWQgPSB6aXAocGhpVmFsdWVzU21hbGxbOi0xXSwgcGhpVmFsdWVzU21hbGxbMTpdKQoKCQl3Y3MgPSBzZWxmLmF4ZXMud2NzCgkJCgkJIyBsaW5lcyBhdCBjb25zdGFudCBwaGkgKGhvcml6b250YWwpCgkJZm9yIHBoaSBpbiBwaGlWYWx1ZXM6CgkJCXByaW50ICJsaW5lIHBoaSA9IiwgcGhpCgkJCWZvciB0aGV0YTEsIHRoZXRhMiBpbiB0aGV0YVZhbHVlc1NtYWxsWmlwcGVkOgoJCQkJeERhdGEgPSBbXQoJCQkJeURhdGEgPSBbXQoJCQkJcDEgPSB3Y3MudG9fcGl4ZWwocm5kKHRoZXRhMSksIHJuZChwaGkpKQoJCQkJcDIgPSB3Y3MudG9fcGl4ZWwocm5kKHRoZXRhMiksIHJuZChwaGkpKQoJCQkJaWYgcDEgaXMgbm90IE5vbmUgYW5kIHAyIGlzIG5vdCBOb25lOgoJCQkJCXgxLCB5MSA9IHAxCgkJCQkJeDIsIHkyID0gcDIKCQkJCQl4RGF0YS5hcHBlbmQoeDEpCgkJCQkJeERhdGEuYXBwZW5kKHgyKQoJCQkJCXlEYXRhLmFwcGVuZCh5MSkKCQkJCQl5RGF0YS5hcHBlbmQoeTIpCgkJCQlzZWxmLmRyYXdMaW5lKHhEYXRhLCB5RGF0YSwgcmVuZGVyZXIpCgoJCSMgbGluZXMgYXQgY29uc3RhbnQgdGhldGEgKHZlcnRpY2FsKQoJCQoJCWZvciB0aGV0YSBpbiB0aGV0YVZhbHVlczoKCQkJeERhdGEgPSBbXQoJCQl5RGF0YSA9IFtdCgkJCXByaW50ICJsaW5lIHRoZXRhID0iLCB0aGV0YQoJCQlmb3IgcGhpLCBwaGkyIGluIHBoaVZhbHVlc1NtYWxsWmlwcGVkOgoJCQkJcCA9IHdjcy50b19waXhlbChybmQodGhldGEpLCBybmQocGhpKSkKCQkJCWlmIHAgaXMgbm90IE5vbmU6CgkJCQkJeCwgeSA9IHAKCQkJCQl4RGF0YS5hcHBlbmQoeCkKCQkJCQl5RGF0YS5hcHBlbmQoeSkKCQkJc2VsZi5kcmF3TGluZSh4RGF0YSwgeURhdGEsIHJlbmRlcmVyKQoKCWRlZiBkcmF3TGluZShzZWxmLCB4RGF0YSwgeURhdGEsIHJlbmRlcmVyKToKCQlsaW5lID0gTGluZTJEKCB4ZGF0YT14RGF0YSwgeWRhdGE9eURhdGEsCgkJCQkJY29sb3I9cmNQYXJhbXNbJ2dyaWQuY29sb3InXSwKCQkJCQkjbGluZXN0eWxlPXJjUGFyYW1zWydncmlkLmxpbmVzdHlsZSddLAoJCQkJCWxpbmV3aWR0aD1yY1BhcmFtc1snZ3JpZC5saW5ld2lkdGgnXSwKCQkJCQlhbnRpYWxpYXNlZD1UcnVlLAoJCQkJKQoJCWxpbmUuc2V0X3RyYW5zZm9ybSggYmxlbmRfeHlfc2VwX3RyYW5zZm9ybSggc2VsZi5heGVzLnRyYW5zRGF0YSwKCQkgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5heGVzLnRyYW5zRGF0YSkgKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgkJbGluZS5zZXRfY2xpcF9ib3goc2VsZi5heGVzLmJib3gpCgkJI3NlbGYuX3NldF9hcnRpc3RfcHJvcHMobGluZSkKCQlsaW5lLmRyYXcocmVuZGVyZXIpCgo8fGZpbV9lbmR8Pg=="]
["037be5198f821294c911fc0e0ecdd67c277332ea-4","037be5198f821294c911fc0e0ecdd67c277332ea","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG11bHRpcHJvY2Vzc2luZywgc3lzLCBvcwppbXBvcnQgdGVuc29yZmxvdyBhcyB0Zgpmcm9tIGxvYWRfY29uZmlnIGltcG9ydCBDT05GSUcKT1VUUFVUX0RJUiA9IENPTkZJR1snUkVTVUxUU19ESVInXQoKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBzY29yZV91dGlscyBpbXBvcnQgY2FsY19pb25zLCBzY29yaW5nCmZyb20gdHFkbSBpbXBvcnQgdHFkbQpmcm9tIHV0aWxzIGltcG9ydCBiYXRjaGVkX2xpc3QsdW5iYXRjaGVkX2xpc3QKZnJvbSBwcm90ZW9taWNzX3V0aWxzIGltcG9ydCBub3JtYWxpemVfaW50ZW5zaXRpZXMsdGhlb3JldGljYWxfcGVwdGlkZV9tYXNzLHRyaW1fcGVha3NfbGlzdAoKTUFYX05fUEVBS1MgPSBDT05GSUdbJ01BWF9OX1BFQUtTJ10jNTAwCkJBVENIX1NJWkU9Q09ORklHWydCQVRDSF9TSVpFJ10jNjQKTlVNQkVSX09GX1RIUkVBRFM9Q09ORklHWydOVU1CRVJfT0ZfVEhSRUFEUyddIzY0Cks9Q09ORklHWydLJ10jNTAKVE9QSz0xClZFUkJPU0UgPSBGYWxzZQpTVUJTRVQ9Tm9uZQoKZGVmIHRyaW1fcGVha3NfbGlzdF8oeCk6IAogICAgbXpzLCBpbnRlbnNpdGllcyA9IHgKICAgIG16cywgaW50ZW5zaXRpZXMgPSBtenMsIG5vcm1hbGl6ZV9pbnRlbnNpdGllcyhpbnRlbnNpdGllcykKICAgIHJldHVybiB0cmltX3BlYWtzX2xpc3QobXpzLCBpbnRlbnNpdGllcyxNQVhfTl9QRUFLUz1NQVhfTl9QRUFLUykKCiNpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkZWYgc2VhcmNoX3Njb3JlKE9VVFBVVF9ESVI9T1VUUFVUX0RJUik6CiAgICAKICAgIHdpdGggcGQuSERGU3RvcmUob3MucGF0aC5qb2luKE9VVFBVVF9ESVIsJ3NlYXJjaF9yZXN1bHRzLmg1JykpIGFzIHN0b3JlLCBwZC5IREZTdG9yZShvcy5wYXRoLmpvaW4oT1VUUFVUX0RJUiwnc2VhcmNoX3Jlc3VsdHNfc2NvcmVkLmg1JykpIGFzIHN0b3JlX291dDoKICAgICAgICByYXdfZmlsZXMgPSBzdG9yZS5rZXlzKCkKICAgICAgICBzZWFyY2hfcmVzdWx0c19zY29yZWQgPSBwZC5EYXRhRnJhbWUoKQoKICAgICAgICB3aXRoIG11bHRpcHJvY2Vzc2luZy5Qb29sKE5VTUJFUl9PRl9USFJFQURTKSBhcyBwOgogICAgICAgICAgICAKICAgICAgICAgICAgcGVwdGlkZV9jaGFyZ2UgPSBzZXQoKQogICAgICAgICAgICBmb3Iga2V5IGluIHJhd19maWxlczoKICAgICAgICAgICAgICAgIHNlYXJjaF9yZXN1bHRzID0gc3RvcmVba2V5XQogICAgICAgICAgICAgICAgc2VhcmNoX3Jlc3VsdHMgPSBzZWFyY2hfcmVzdWx0c1s6U1VCU0VUXQogICAgICAgICAgICAgICAgcHJpbnQoJ2V4cGxvZGUuLi4nICkKICAgICAgICAgICAgICAgIHRtcCA9IHNlYXJjaF9yZXN1bHRzW1sndG9wa19wZXB0aWRlcycsJ2NoYXJnZSddXS5leHBsb2RlKCd0b3BrX3BlcHRpZGVzJykKICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfcGVwdGlkZV9jaGFyZ2UgPSBsaXN0KHppcCh0bXAudG9wa19wZXB0aWRlcyx0bXAuY2hhcmdlKSkKICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfcGVwdGlkZV9jaGFyZ2UgPSBzZXQoYWRkaXRpb25hbF9wZXB0aWRlX2NoYXJnZSkKICAgICAgICAgICAgICAgIHBlcHRpZGVfY2hhcmdlID0gcGVwdGlkZV9jaGFyZ2UudW5pb24oYWRkaXRpb25hbF9wZXB0aWRlX2NoYXJnZSkKCiAgICAgICAgICAgIHByaW50KCdjYWxjdWxhdGUgaW9ucy4uLicpCiAgICAgICAgICAgIGlvbnMgPSBsaXN0KHAubWFwKGNhbGNfaW9ucyx0cWRtKHBlcHRpZGVfY2hhcmdlKSkpCiAgICAgICAgICAgIHBlcHRpZGVfY2hhcmdlXzJfaW9ucyA9IGRpY3QoemlwKHBlcHRpZGVfY2hhcmdlLGlvbnMpKQoKICAgICAgICAgICAgZm9yIGtleSBpbiByYXdfZmlsZXM6CiAgICAgICAgICAgICAgICBzZWFyY2hfcmVzdWx0cyA9IHN0b3JlW2tleV0KCiAgICAgICAgICAgICAgICB0b3BfcGVwdGlkZXMgPSBbXQogICAgICAgICAgICAgICAgdG9wX3BlcHRpZGVfaXNfZGVjb3lzID0gW10KICAgICAgICAgICAgICAgIHRvcF9wZXB0aWRlX2Rpc3RhbmNlcyA9IFtdCiAgICAgICAgICAgICAgICBiZXN0X3Njb3JlcyA9IFtdCiAgICAgICAgICAgICAgICBhbGxfc2NvcmVzID0gW10KCgogICAgICAgICAgICAgICAgc2VhcmNoX3Jlc3VsdHMgPSBzZWFyY2hfcmVzdWx0c1s6U1VCU0VUXQogICAgICAgICAgICAgICAgI2ZvciBpLHJvdyBpbiBlbnVtZXJhdGUoc2VhcmNoX3Jlc3VsdHMuaXRlcnJvd3MoKSk6CiAgICAgICAgICAgICAgICBmb3IgaSBpbiB0cWRtKHJhbmdlKDAsbGVuKHNlYXJjaF9yZXN1bHRzKSxCQVRDSF9TSVpFKSk6ICAgICAKICAgICAgICAgICAgICAgICAgICByb3dzID0gc2VhcmNoX3Jlc3VsdHMuaWxvY1tpOmkrQkFUQ0hfU0laRV0gIyBUT0RPOiBmaXggbGFzdCBiYXRjaAogICAgICAgICAgICAgICAgICAgIHRydWVfcGVwdGlkZSA9IHJvd3NbJ3BlcHRpZGUnXS50b19udW1weSgpCiAgICAgICAgICAgICAgICAgICAgYmF0Y2hlZF90b3BrX3BlcHRpZGVzID0gcm93c1sndG9wa19wZXB0aWRlcyddLnRvX251bXB5KCkKICAgICAgICAgICAgICAgICAgICBjaGFyZ2VzID0gcm93c1snY2hhcmdlJ10udG9fbnVtcHkoKQogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGFwcGFyZW50X2JhdGNoX3NpemUgPSBsZW4ocm93cykKCiAgICAgICAgICAgICAgICAgICAgdG9wa19wZXB0aWRlcyA9IG5wLmFycmF5KHVuYmF0Y2hlZF9saXN0KGJhdGNoZWRfdG9wa19wZXB0aWRlcykpCgogICAgICAgICAgICAgICAgICAgICMgaXNvZm9ybXMgPSBsaXN0KHBhcnNlci5pc29mb3JtcyhwZXB0aWRlU2VxdWVuY2UsdmFyaWFibGVfbW9kcz1WQVJJQUJMRV9NT0RTKSkgCiAgICAgICAgICAgICAgICAgICAgIyBwcmludChpc29mb3JtcykKICAgICAgICAgICAgICAgICAgICAjIGZvciBpc29mb3JtIGluIGlzb2Zvcm1zOgogICAgICAgICAgICAgICAgICAgICMgICAgIGlzb2Zvcm0gPSBpc29mb3JtLnJlcGxhY2UoJ294TScsJ20nKQogICAgICAgICAgICAgICAgICAgIGFwcGFyZW50X0sgPSBpbnQobGVuKHRvcGtfcGVwdGlkZXMpL2FwcGFyZW50X2JhdGNoX3NpemUpCiAgICAgICAgICAgICAgICAgICAgY2hhcmdlc190aWxlZCA9IG5wLnJlcGVhdChjaGFyZ2VzLGFwcGFyZW50X0spCiAgICAgICAgICAgICAgICAgICAgdG9wa19wZXB0aWRlc19jaGFyZ2UgPSBsaXN0KHppcCh0b3BrX3BlcHRpZGVzLGNoYXJnZXNfdGlsZWQpKQoKICAgICAgICAgICAgICAgICAgICBpb25zID0gW3BlcHRpZGVfY2hhcmdlXzJfaW9uc1trZXldIGZvciBrZXkgaW4gdG9wa19wZXB0aWRlc19jaGFyZ2VdCgogICAgICAgICAgICAgICAgICAgICMgZm9yIF8gaW4gcmFuZ2UoMSk6CiAgICAgICAgICAgICAgICAgICAgIyAgICAgaWYgVkVSQk9TRToKICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgcHJpbnQoJ2NhbGMgaW9ucy4uLicpCiAgICAgICAgICAgICAgICAgICAgIyAgICAgaW9ucyA9IGxpc3QocC5tYXAoY2FsY19pb25zLHRvcGtfcGVwdGlkZXNfY2hhcmdlKSkKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpb25zID0gbnAucmVzaGFwZShpb25zLChhcHBhcmVudF9iYXRjaF9zaXplLGFwcGFyZW50X0ssLTEpKQogICAgICAgICAgICAgICAgICAgICNpb25zID0gbnAuemVyb3MoKGFwcGFyZW50X2JhdGNoX3NpemUsaywyMDApKQogICAgICAgICAgICAgICAgICAgICNwcmludChsZW4oaW9ucykpCiAgICAgICAgICAgICAgICAgICAgI2lvbnMgPSBsaXN0KGJhdGNoZWRfbGlzdChpb25zLGJhdGNoX3NpemUpKQogICAgICAgICAgICAgICAgICAgICNtenMgPSBucC5hcnJheShyb3dzWydtenMnXSkKICAgICAgICAgICAgICAgICAgICAjaW50ZW5zaXRpZXMgPSBucC5hcnJheShyb3dzWydpbnRlbnNpdGllcyddKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgbXpzID0gcm93c1snbXpzJ10udG9saXN0KCkKICAgICAgICAgICAgICAgICAgICBpbnRlbnNpdGllcyA9IHJvd3NbJ2ludGVuc2l0aWVzJ10udG9saXN0KCkKICAgICAgICAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZSgxKToKICAgICAgICAgICAgICAgICAgICAgICAgaWYgVkVSQk9TRToKPHxmaW1fZW5kfD4="]
["ccc1a1e844f06f3c77c2209fd2b1e53795876982-2","ccc1a1e844f06f3c77c2209fd2b1e53795876982","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwpmcm9tIGRqYW5nby51cmxzIGltcG9ydCByZXZlcnNlCgojIENyZWF0ZSB5b3VyIG1vZGVscyBoZXJlLgpjbGFzcyBCb29rKG1vZGVscy5Nb2RlbCk6CiAgICB0aXRsZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yMDApCiAgICBhdXRob3IgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwKQogICAgc3VtbWFyeSA9IG1vZGVscy5UZXh0RmllbGQobWF4X2xlbmd0aD0xMDAwLCBoZWxwX3RleHQ9IkVudGVyIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIGJvb2siKQogICAgaXNibiA9IG1vZGVscy5DaGFyRmllbGQoJ0lTQk4nLCBtYXhfbGVuZ3RoPTEzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PScxMyBDaGFyYWN0ZXIgPGEgaHJlZj0iaHR0cHM6Ly93d3cuaXNibi1pbnRlcm5hdGlvbmFsLm9yZy9jb250ZW50L3doYXQtaXNibiI+SVNCTiBudW1iZXI8L2E+JykKICAgIGdlbnJlID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTIwMCwgaGVscF90ZXh0PSJFbnRlciBhIGJvb2sgZ2VucmUgKGUuZy4gU2NpZW5jZSBGaWN0aW9uLCBGcmVuY2ggUG9ldHJ5IGV0Yy4pIikKICAgIHF1YW50aXR5ID0gbW9kZWxzLkludGVnZXJGaWVsZCgpCiAgICBsaWJfYXV0aG9yPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwLCBkZWZhdWx0PSAiU2FyYSIpCiAgICBjYXRlZ29yeT1tb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTAsIGRlZmF1bHQ9IkZlYXR1cmVkIikKICAgIGltYWdlPW1vZGVscy5JbWFnZUZpZWxkKGRlZmF1bHQ9J2RlZmF1bHQuanBnJyx1cGxvYWRfdG89J3Byb2ZpbGVfcGljcycpCgoKPHxmaW1faG9sZXw+CiAgICAgICAgcmV0dXJuIHJldmVyc2UoJ2Jvb2stZGV0YWlsJywga3dhcmdzPXsncGsnOiBzZWxmLnBrfSkKCmNsYXNzIFN0dWRlbnQobW9kZWxzLk1vZGVsKToKICAgIHJvbGxfbm8gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAsdW5pcXVlPVRydWUpCiAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwKQogICAgYnJhbmNoID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTMpCiAgICBjb250YWN0X25vID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwKQogICAgdG90YWxfYm9va3NfZHVlPW1vZGVscy5JbnRlZ2VyRmllbGQoZGVmYXVsdD0wKQogICAgZW1haWw9bW9kZWxzLkVtYWlsRmllbGQodW5pcXVlPVRydWUpCiAgICBwYXNzd29yZD1tb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9OCwgZGVmYXVsdD0xMjM0KQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzdHIoc2VsZi5yb2xsX25vKQoKY2xhc3MgQm9ycm93ZXIobW9kZWxzLk1vZGVsKToKICAgIHN0dWRlbnQgPSBtb2RlbHMuRm9yZWlnbktleSgnU3R1ZGVudCcsIG9uX2RlbGV0ZT1tb2RlbHMuQ0FTQ0FERSkKICAgIGJvb2sgPSBtb2RlbHMuRm9yZWlnbktleSgnQm9vaycsIG9uX2RlbGV0ZT1tb2RlbHMuQ0FTQ0FERSkKICAgIGlzc3VlX2RhdGUgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChudWxsPVRydWUsYmxhbms9VHJ1ZSkKICAgIHJldHVybl9kYXRlID0gbW9kZWxzLkRhdGVUaW1lRmllbGQobnVsbD1UcnVlLGJsYW5rPVRydWUpCgogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuc3R1ZGVudC5uYW1lICsiIGJvcnJvd2VkICIrIHNlbGYuYm9vay50aXRsZQoKY2xhc3MgUmV2aWV3cyhtb2RlbHMuTW9kZWwpOgogICAgcmV2aWV3PW1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsZGVmYXVsdD0ibm9uZSIpCiAgICBib29rPW1vZGVscy5Gb3JlaWduS2V5KCdCb29rJyxvbl9kZWxldGU9bW9kZWxzLkNBU0NBREUpCiAgICBzdHVkZW50ID0gbW9kZWxzLkZvcmVpZ25LZXkoJ1N0dWRlbnQnLCBvbl9kZWxldGU9bW9kZWxzLkNBU0NBREUpCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi50aXRsZQoKICAgIGRlZiBnZXRfYWJzb2x1dGVfdXJsKHNlbGYpOgo8fGZpbV9lbmR8Pg=="]
["2425fa97c6b836b0b369d56e40bdf85e48f9876f-3","2425fa97c6b836b0b369d56e40bdf85e48f9876f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cyxzY2UKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpjbGFzcyBNYWxvZG9uX0NoYXJhY3Rlcl9CUChzY2UuQWxwaGFzKToKICAgcGFzcwo8fGZpbV9lbmR8Pg=="]
["cca0b21aaab84c391b62b6691402eed64b258f51-1","cca0b21aaab84c391b62b6691402eed64b258f51","PHxmaW1fcHJlZml4fD4KZnJvbSBjb21tb24uaXNfdmFsaWRfZGlyZWN0b3J5IGltcG9ydCBpc192YWxpZF9kaXJlY3RvcnkKZnJvbSBjb21tb24uY3JlYXRlX2RpcmVjdG9yeSBpbXBvcnQgY3JlYXRlX2RpcmVjdG9yeQoKZGVmIGNoZWNrX3dvcmxkX2NvbmZpZyh3b3JsZCk6CiAgaWYgbm90IGlzX3ZhbGlkX2RpcmVjdG9yeSh3b3JsZFsncmVnaW9uX2ZpbGVzX2RpcmVjdG9yeSddKTogIyBDaGVjayBpZiB0aGUgcmVnaW9ucyBmb2xkZXIgaXMgdmFsaWQKICAgIHByaW50KGYnSW52YWxpZCByZWdpb24gZmlsZXMgZGlyZWN0b3J5IFt7d29ybGRbInJlZ2lvbl9maWxlc19kaXJlY3RvcnkiXX1dJykKICAgIGV4aXQoMSkgIyBUT0RPOiBTZXQgdGhlIGNvcnJlY3QgZXhpdCBjb2RlCiAgCiAgZm9yIGNvbmZpZyBpbiB3b3JsZFsnc2NhbnMnXTogIyBDaGVjayBlYWNoIHdvcmxkJ3MgY29uZmlndXJhdGlvbgogICAgcHJpbnQoZidTZXR0aW5nIHVwIHNjYW4gW3tjb25maWdbIm5hbWUiXX1dJykKICAgIAogICAgaWYgY29uZmlnWydyZWdpb25fb3V0cHV0J11bJ2VuYWJsZWQnXTogIyBPbmx5IGNoZWNrIHRoaXMgaWYgcmVnaW9uIG91dHB1dCBpcyBlbmFibGVkCiAgICAgIHByaW50KCdSZWdpb24gb3V0cHV0IGlzIGVuYWJsZWQgZm9yIHRoaXMgc2NhbicpCiAgICAgIAogICAgICBwcmludCgnQ2hlY2tpbmcgcmVnaW9uIGZpbGVzIG91dHB1dCBkaXJlY3RvcnknKQogICAgICBpZiBub3QgaXNfdmFsaWRfZGlyZWN0b3J5KGNvbmZpZ1sncmVnaW9uX291dHB1dCddWydvdXRwdXRfZGlyZWN0b3J5J10pOiAjIENoZWNrIGlmIHRoZSBkaXJlY3RvcnkgaXMgdmFsaWQKICAgICAgICBjcmVhdGVfZGlyZWN0b3J5KGNvbmZpZ1sncmVnaW9uX291dHB1dCddWydvdXRwdXRfZGlyZWN0b3J5J10pICMgSWYgbm90IHRyeSB0byBjcmVhdGUgaXQKICAgIGVsc2U6CiAgICAgIHByaW50KCdSZWdpb24gb3V0cHV0IGlzIG5vdCBlbmFibGVkIGZvciB0aGlzIHNjYW4nKQogICAgCjx8ZmltX2hvbGV8PgogICAgICBpZiBub3QgaXNfdmFsaWRfZGlyZWN0b3J5KGNvbmZpZ1snbWFwJ11bJ291dHB1dF9kaXJlY3RvcnknXSk6ICMgQ2hlY2sgaWYgdGhlIGRpcmVjdG9yeSBpcyB2YWxpZAogICAgICAgIGNyZWF0ZV9kaXJlY3RvcnkoY29uZmlnWydtYXAnXVsnb3V0cHV0X2RpcmVjdG9yeSddKSAjIElmIG5vdCB0cnkgdG8gY3JlYXRlIGl0CiAgICBlbHNlOgogICAgICBwcmludCgnTWFwIGdyYXBoaW5nIGlzIG5vdCBlbmFibGVkIGZvciB0aGlzIHNjYW4nKQogICAgCiAgICAjIFRPRE86IENoZWNrIHRoZSByZXN0IG9mIHRoZSBjb25maWd1cmF0aW9ucz8KPHxmaW1fc3VmZml4fD4KICAgIGlmIGNvbmZpZ1snbWFwJ11bJ2VuYWJsZWQnXTogIyBPbmx5IGNoZWNrIHRoaXMgaWYgbWFwIGdyYXBoaW5nIGlzIGVuYWJsZWQKICAgICAgcHJpbnQoJ01hcCBncmFwaGluZyBpcyBlbmFibGVkIGZvciB0aGlzIHNjYW4nKQogICAgICAKICAgICAgcHJpbnQoJ0NoZWNraW5nIG1hcCBmaWxlcyBvdXRwdXQgZGlyZWN0b3J5JykKPHxmaW1fZW5kfD4="]
["69575c58bfb3ac6c384a2e689c20429c188c0238-5","69575c58bfb3ac6c384a2e689c20429c188c0238","PHxmaW1fcHJlZml4fD4KIyBDb252ZXJ0cyB0aGUgTW9iaWxlTmV0VjIgRGVlcExhYnYzKyBtb2RlbCB0byBDb3JlIE1MLgojCiMgVGhlIG1vZGVsIGlzIG1vYmlsZW5ldHYyX2NvY29fdm9jX3RyYWludmFsLCBkb3dubG9hZGVkIGZyb206CiMgaHR0cDovL2Rvd25sb2FkLnRlbnNvcmZsb3cub3JnL21vZGVscy9kZWVwbGFidjNfbW52Ml9wYXNjYWxfdHJhaW52YWxfMjAxOF8wMV8yOS50YXIuZ3oKIwojIFRoZSBtYWluIHJlcG8gcGFnZSBmb3IgRGVlcExhYnYzKyBpczoKIyBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy9tb2RlbHMvdHJlZS9tYXN0ZXIvcmVzZWFyY2gvZGVlcGxhYgojCiMgVGVzdGVkIHVzaW5nIFB5dGhvbiAzLjYuOCwgVGVuc29yRmxvdyAxLjEzLjEsIGNvcmVtbHRvb2xzIDMuMCwgdGZjb3JlbWwgMC4zLjAuCgppbXBvcnQgdGZjb3JlbWwgYXMgdGZfY29udmVydGVyCgppbnB1dF9wYXRoID0gJ2RlZXBsYWJ2M19tbnYyX3Bhc2NhbF90cmFpbnZhbC9mcm96ZW5faW5mZXJlbmNlX2dyYXBoLnBiJwpvdXRwdXRfcGF0aCA9ICdEZWVwTGFiLm1sbW9kZWwnCgppbnB1dF90ZW5zb3IgPSAnSW1hZ2VUZW5zb3I6MCcKaW5wdXRfbmFtZSA9ICdJbWFnZVRlbnNvcl9fMCcKb3V0cHV0X3RlbnNvciA9ICdSZXNpemVCaWxpbmVhcl8zOjAnCgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfaW5wdXRfbmFtZXM9aW5wdXRfbmFtZSkKPHxmaW1fc3VmZml4fD4KdGZfY29udmVydGVyLmNvbnZlcnQodGZfbW9kZWxfcGF0aD1pbnB1dF9wYXRoLAogICAgICAgICAgICAgICAgICAgICBtbG1vZGVsX3BhdGg9b3V0cHV0X3BhdGgsCiAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mZWF0dXJlX25hbWVzPVtvdXRwdXRfdGVuc29yXSwKICAgICAgICAgICAgICAgICAgICAgaW5wdXRfbmFtZV9zaGFwZV9kaWN0PXtpbnB1dF90ZW5zb3IgOiBbMSwgNTEzLCA1MTMsIDNdfSwKPHxmaW1fZW5kfD4="]
["cc56529517a148eab93df02bcc02e62dadf2e831-3","cc56529517a148eab93df02bcc02e62dadf2e831","PHxmaW1fcHJlZml4fD4KIyA0OHRoIHdlZWsKCiMgYm9qIDI2MzIKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBzID0gaW50KGlucHV0KCkpCiAgICBtLCBuID0gbWFwKGludCwgaW5wdXQoKS5zcGxpdCgnICcpKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcGEgPSBbXQogICAgcGIgPSBbXQoKICAgIGZvciBfIGluIHJhbmdlKG0pOgo8fGZpbV9lbmR8Pg=="]
["cc8830758e607957ff3c319fed8dfa69bd81debc-1","cc8830758e607957ff3c319fed8dfa69bd81debc","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGluZm8KZnJvbSBQYWNrYWdlLkJpbmFyeVBhY2thZ2VCYXNlIGltcG9ydCAqCgoKY2xhc3Mgc3ViaW5mbyhpbmZvLmluZm9jbGFzcyk6CiAgICBkZWYgc2V0VGFyZ2V0cyhzZWxmKToKICAgICAgICBzZWxmLmFkZENhY2hlZEF1dG90b29sc0J1aWxkKCJkZXYtdXRpbHMvX2F1dG90b29scy9wa2ctY29uZmlnIiwgdGFyZ2V0SW5zdGFsbFBhdGg9b3MucGF0aC5qb2luKCJkZXYtdXRpbHMiLCAiYmluIikpCgogICAgZGVmIHNldERlcGVuZGVuY2llcyhzZWxmKToKICAgICAgICBzZWxmLmJ1aWxkRGVwZW5kZW5jaWVzWyJ2aXJ0dWFsL2Jpbi1iYXNlIl0gPSBOb25lCgpjbGFzcyBQYWNrYWdlKEJpbmFyeVBhY2thZ2VCYXNlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBCaW5hcnlQYWNrYWdlQmFzZS5fX2luaXRfXyhzZWxmKQoKICAgIGRlZiBpbnN0YWxsKHNlbGYpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgaWYgbm90IHN1cGVyKCkuaW5zdGFsbCgpOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICByZXR1cm4gdXRpbHMuY3JlYXRlU2hpbShvcy5wYXRoLmpvaW4oc2VsZi5pbWFnZURpcigpLCAiYmluIiwgInBrZy1jb25maWcuZXhlIiksIG9zLnBhdGguam9pbihzZWxmLmluc3RhbGxEaXIoKSwgImJpbiIsICJwa2ctY29uZmlnLmV4ZSIpKQo8fGZpbV9lbmR8Pg=="]
["4e2331d8888daec1b1d2bb54cedbb48217aea8b2-5","4e2331d8888daec1b1d2bb54cedbb48217aea8b2","PHxmaW1fcHJlZml4fD4KbGlzdGEgPSBbXQpsaXN0YS5hcHBlbmQoZmxvYXQoaW5wdXQoKSkpCmxpc3RhLmFwcGVuZChmbG9hdChpbnB1dCgpKSkKbGlzdGEuYXBwZW5kKGZsb2F0KGlucHV0KCkpKQpsaXN0YS5hcHBlbmQoZmxvYXQoaW5wdXQoKSkpCmxpc3RhLmFwcGVuZChmbG9hdChpbnB1dCgpKSkKbGlzdGEuYXBwZW5kKGZsb2F0KGlucHV0KCkpKQoKcGFyZXMgPSAwCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZvciB2IGluIGxpc3RhOgogICAgaWYodj4wKToKICAgICAgICBwYXJlcyArPSAxCgo8fGZpbV9lbmR8Pg=="]
["a5007cd74d42a5ebf160c62314bdc109b9d52f18-5","a5007cd74d42a5ebf160c62314bdc109b9d52f18","PHxmaW1fcHJlZml4fD4KZnJvbSBwYW5kYXNfZGF0YXJlYWRlciBpbXBvcnQgZGF0YQppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBwYW5kYXMgYXMgcGQKPHxmaW1faG9sZXw+CnRpY2tlcnMgPSBbJ0FBUEwnLCAnTVNGVCcsICdeR1NQQyddCiMKIyMgV2Ugd291bGQgbGlrZSBhbGwgYXZhaWxhYmxlIGRhdGEgZnJvbSAwMS8wMS8yMDAwIHVudGlsIDEyLzMxLzIwMTYuCiNzdGFydF9kYXRlID0gJzIwMTAtMDEtMDEnCiNlbmRfZGF0ZSA9ICcyMDE2LTEyLTMxJwojCiMjIFVzZXIgcGFuZGFzX3JlYWRlci5kYXRhLkRhdGFSZWFkZXIgdG8gbG9hZCB0aGUgZGVzaXJlZCBkYXRhLiBBcyBzaW1wbGUgYXMgdGhhdC4KI3BhbmVsX2RhdGEgPSBkYXRhLkRhdGFSZWFkZXIoJ0lOUFgnLCAnZ29vZ2xlJywgc3RhcnRfZGF0ZSwgZW5kX2RhdGUpCgojIGltcG9ydCBzdG9ja19pbmZvIG1vZHVsZSBmcm9tIHlhaG9vX2Zpbgpmcm9tIHlhaG9vX2ZpbiBpbXBvcnQgc3RvY2tfaW5mbyBhcyBzaQojVGhlbiwgb2J0YWluaW5nIHRoZSBjdXJyZW50IHByaWNlIG9mIGEgc3RvY2sgaXMgYXMgc2ltcGxlIGFzIG9uZSBsaW5lIG9mIGNvZGU6CgojIyBnZXQgbGl2ZSBwcmljZSBvZiBBcHBsZQojcHJpbnQoJ2FhcGxlOicsc2kuZ2V0X2xpdmVfcHJpY2UoImFhcGwiKSkKIyAKIyMgb3IgQW1hem9uCiNwcmludCgnYW1hem9uJyxzaS5nZXRfbGl2ZV9wcmljZSgiYW16biIpKQojIAojIyBvciBhbnkgb3RoZXIgdGlja2VyCiNmb3IgdGlja2VyIGluIHRpY2tlcnM6CiMgICAgcHJpbnQodGlja2VyLHNpLmdldF9saXZlX3ByaWNlKHRpY2tlcikpCiMKI2hpc3QgPSBbXQp3aGlsZSBUcnVlOgogICAgZHIgPSBzaS5nZXRfbGl2ZV9wcmljZSgndHNsYScpCiAgICBoaXN0ICs9IFtkcl0KICAgIHByaW50KCdUTScsZHIpCgpwcmludCAoanNvbi5kdW1wcyhnZXRRdW90ZXMoJ0FBUEwnKSwgaW5kZW50PTIpKQo8fGZpbV9zdWZmaXh8PgppbSBnb29nbGVmaW5hbmNlIGltcG9ydCBnZXRRdW90ZXMKaW1wb3J0IGpzb24KIwojIyBEZWZpbmUgdGhlIGluc3RydW1lbnRzIHRvIGRvd25sb2FkLiBXZSB3b3VsZCBsaWtlIHRvIHNlZSBBcHBsZSwgTWljcm9zb2Z0IGFuZCB0aGUgUyZQNTAwIGluZGV4Lgo8fGZpbV9lbmR8Pg=="]
["cc75694bb8d73fd57cba37a4f6ae57062d4a160e-1","cc75694bb8d73fd57cba37a4f6ae57062d4a160e",{"$cut":{"chars":18232,"head":"PHxmaW1fcHJlZml4fD4KJycnCgpkb2NwaWN0dXJlCgpOZWVkIHRvIGV4cGxhaW4gd2hhdCBpdCBkb2VzIGhlcmUKJycnCmltcG9ydCBweWRvYwpmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwppbXBvcnQgcmUKaW1wb3J0IHN5cwpmcm9tIHhtbC5zYXguc2F4dXRpbHMgaW1wb3J0IGVzY2FwZQoKaW1wb3J0IHNyYy5zdmcgYXMgc3ZnCmltcG9ydCBzcmMucGFyc2Vyc19sb2FkZXIKaW1wb3J0IHNyYy5zZXJ2ZXIKCmRvY3BpY3R1cmVfZGlyZWN0aXZlX3BhdHRlcm4gPSByZS5jb21waWxlKCJeXHMqXC5cLmRvY3BpY3R1cmU6OlxzKiguKz8pJCIpCiMgbm90ZTogc29tZXRpbWVzLCB0aGUgUHl0aG9uIGhlbHAgZGlzcGxheSBjb2RlIGluZGVudGVkIHdpdGggYSBzdHJpbmcgbGlrZToKIyAiICAgIHwgICAiLgppbmRlbnRlZF9kX3BhdHRlcm4gPSByZS5jb21waWxlKCJeXHMqXHxccypcLlwuZG9jcGljdHVyZTo6XHMqKC4rPykkIikKYm9sZF9wYXR0ZXJuID0gcmUuY29tcGlsZSgiJmx0O3NwYW4gY2xhc3M9J2JvbGQnJmd0OyguKz8pJmx0Oy9zcGFuJmd0OyIpCgpjbGFzcyBEb2NwaWN0dXJlRG9jdW1lbnQob2JqZWN0KToKICAgICcnJwogICAgQSBEb2NwaWN0dXJlRG9jdW1lbnQgaXMgYW4geG1sIGRvY3VtZW50IHRoYXQgY2FuIGNvbnRhaW4gc3ZnIGltYWdlcy4KCiAgICBJdCBpcyB1c3VhbGx5IGNyZWF0ZWQgZnJvbSBhIFB5dGhvbiBkb2NzdHJpbmcgdGhhdCBjb250YWlucyBzb21lCiAgICAiZG9jcGljdHVyZSBkaXJlY3RpdmVzIi4KCiAgICAnJycKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJzZXJzPU5vbmUsIG9iaj1Ob25lKToKICAgICAgICBpZiBwYXJzZXJzIGlzIE5vbmU6CiAgICAgICAgICAgIHNlbGYucGFyc2VycyA9IHt9CiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5wYXJzZXJzID0gcGFyc2VycwogICAgICAgIHNlbGYub2JqZWN0X3RvX2Rpc3BsYXkgPSBvYmoKICAgICAgICBzZWxmLnJlc2V0KCkKICAgICAgICBzZWxmLnN0eWxlID0gIiIicHt3aWR0aDo4MDBweDt9CiAgICAgICAgICAgIHByZXtmb250LXNpemU6IDEycHQ7fQogICAgICAgICAgICAuZG9jcGljdHVyZXtjb2xvcjogYmx1ZTt9CiAgICAgICAgICAgIC53YXJuaW5ne2NvbG9yOiByZWQ7fQogICAgICAgICAgICAuYm9sZHtmb250LXdlaWdodDpib2xkOyBjb2xvcjpkYXJrYmx1ZTt9CiAgICAgICAgICAgICIiIgogICAgICAgIHNlbGYudHJ1c3RlZCA9IFtdCgogICAgZGVmIHJlc2V0KHNlbGYpOgogICAgICAgICcnJ3Jlc2V0cyAob3Igc2V0cykgdmFsdWVzIHRvIGluaXRpYWwgY2hvaWNlcyBuZWVkZWQgdG8gcHJvY2VzcwogICAgICAgIGEgbmV3IGRvY3VtZW50JycnCiAgICAgICAgc2VsZi5pbmRlbnRhdGlvbiA9IE5vbmUKICAgICAgICBzZWxmLnZlcnRpY2FsX2Jhcl9pbmRlbnRhdGlvbiA9IEZhbHNlCiAgICAgICAgc2VsZi5jdXJyZW50X3BhcnNlcl9uYW1lID0gTm9uZQogICAgICAgIHNlbGYuaW5jbHVkZWRfZGVmcyA9IFtdCiAgICAgICAgc2VsZi51bmtub3duX3BhcnNlciA9IEZhbHNlCgogICAgZGVmIHRydXN0KHNlbGYsIHBhcnNlcl9uYW1lKToKICAgICAgICAnJydhZGRzIGEgcGFyc2VyIG5hbWUgdG8gdGhlIGxpc3Qgb2YgdHJ1c3RlZCBwYXJzZXJzLCBzbyB0aGF0CiAgICAgICAgICAgZG9jcGljdHVyZSB3aWxsIGF0dGVtcHQgdG8gbG9hZCBpdCBpZiBuZWVkZWQuCgogICAgICAgICAgIFRoaXMgaXMgb25seSB0byBlbmFibGUgcGFyc2VycyBub3QgaW5jbHVkZWQgaW4gdGhlIHBhcnNlci9wbHVnaW4KICAgICAgICAgICBkaXJlY3RvcnkgdG8gYmUgcmVjb2duaXplZC4KICAgICAgICAgICAnJycKICAgICAgICBzZWxmLnRydXN0ZWQuYXBwZW5kKHBhcnNlcl9uYW1lKQogICAgICAgIHByaW50ICIlcyBpcywgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGlzIHNlc3Npb24sIGEgdHJ1c3RlZCBwYXJzZXIuIiAlIHBhcnNlcl9uYW1lCgogICAgZGVmIGlzX2RvY3BpY3R1cmVfZGlyZWN0aXZlKHNlbGYsIGxpbmUpOgogICAgICAgICIiIiBJZGVudGlmaWVzIGlmIGEgbGluZSBjb3JyZXNwb25kcyB0byBhIGRvY3BpY3R1cmUgZGlyZWN0aXZlcy4KCiAgICAgICAgICAgIElmIGl0IGlzIGEgZG9jcGljdHVyZSBkaXJlY3RpdmUsIGl0IHJldHVybnMgdGhlIGluZGVudGF0aW9uIChudW1iZXIgb2YKICAgICAgICAgICAgc3BhY2VzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUpIGFuZCB0aGUgbmFtZSBvZiB0aGUgcHJvY2Vzc29yCiAgICAgICAgICAgIGlmIGl0IGlzIGEga25vd24gcHJvY2Vzc29yOyBvdGhlcndpc2UgaXQgcmV0dXJucyBGYWxzZS4KICAgICAgICAiIiIKICAgICAgICByZXN1bHQgPSBkb2NwaWN0dXJlX2RpcmVjdGl2ZV9wYXR0ZXJuLnNlYXJjaChsaW5lLnJzdHJpcCgpKQogICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgogICAgICAgICAgICByZXN1bHQgPSBpbmRlbnRlZF9kX3BhdHRlcm4uc2VhcmNoKGxpbmUucnN0cmlwKCkpCiAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgogICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgIGVsc2U6ICAjIGxpbmUgc3RhcnQgd2l0aCBzb21ldGhpbmcgbGlrZSAiICAgICB8ICAgIgogICAgICAgICAgICAgICAgc2VsZi52ZXJ0aWNhbF9iYXJfaW5kZW50YXRpb24gPSBUcnVlCgogICAgICAgIHBhcnNlcl9uYW1lID0gcmVzdWx0Lmdyb3VwcygpWzBdCgogICAgICAgIGtub3duX3BhcnNlciA9IHNlbGYucmV0cmlldmVfZG9jcGljdHVyZV9wYXJzZXIocGFyc2VyX25hbWUpCiAgICAgICAgaWYga25vd25fcGFyc2VyOgogICAgICAgICAgICBzZWxmLmN1cnJlbnRfcGFyc2VyX25hbWUgPSByZXN1bHQuZ3JvdXBzKClbMF0KICAgICAgICAgICAgc2VsZi5pbmRlbnRhdGlvbiA9IGxpbmUuaW5kZXgoIi4uZG9jcGljdHVyZSIpCiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi51bmtub3duX3BhcnNlciA9IHBhcnNlcl9uYW1lCiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIGRlZiByZXRyaWV2ZV9kb2NwaWN0dXJlX3BhcnNlcihzZWxmLCBuYW1lKToKICAgICAgICAnJydy"}}]
["747b9362bd83e6155fca59adf3d0dd6ad481d0c5-1","747b9362bd83e6155fca59adf3d0dd6ad481d0c5","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCicnJwpFeGFtcGxlIG9mIGhvdyB0byB1c2UgYXJncGFyc2UgdG8gcGFzcyBhbiBhcmd1bWVudCB0byBzaG93IGRlYnVnIGxvZ3MKRWFzaWVyIHRvIG1hbmFnZSB0aGFuIGNvbW1lbnRpbmcvdW5jb21tZW50aW5nIGEgYnVuY2ggb2YgcHJpbnQgbGluZXMKdXNhZ2U6IC4vbG9nZ2VyLnB5IC1sbCBERUJVRwoKTG9nIGxldmVsczoKICAgIERFQlVHOiAgICBzaG93cyBDUklUSUNBTCwgRVJST1IsIFdBUk5JTkcsIElORk8sIERFQlVHCiAgICBJTkZPOiAgICAgc2hvd3MgQ1JJVElDQUwsIEVSUk9SLCBXQVJOSU5HLCBJTkZPCiAgICBXQVJOSU5HOiAgc2hvd3MgQ1JJVElDQUwsIEVSUk9SLCBXQVJOSU5HCiAgICBFUlJPUjogICAgc2hvd3MgQ1JJVElDQUwsIEVSUk9SCiAgICBDUklUSUNBTDogc2hvd3MgQ1JJVElDQUwKCiAgICBEZWZhdWx0IChubyBhcmd1bWVudHMpIGlzIFdBUk5JTkcKJycnCgpmcm9tIGFyZ3BhcnNlIGltcG9ydCBBcmd1bWVudFBhcnNlcgppbXBvcnQgbG9nZ2luZwoKZGVmIG1haW4oKToKICAgIHBhcnNlciA9IEFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSJGb28gYXBwIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1sbCcsICctLWxvZ2xldmVsJywKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9WydERUJVRycsJ0lORk8nLCdXQVJOSU5HJywnRVJST1InLCdDUklUSUNBTCddLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTZXQgdGhlIGxvZ2dpbmcgbGV2ZWwnKQogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9YXJncy5sb2dsZXZlbCkKCjx8ZmltX2hvbGV8PgogICAgbG9nZ2VyLndhcm5pbmcoJ2ZvbyB3YXJuaW5nIG1lc3NhZ2UnKQogICAgbG9nZ2VyLmVycm9yKCdmb28gZXJyb3IgbWVzc2FnZScpCiAgICBsb2dnZXIuY3JpdGljYWwoJ2ZvbyBjcml0aWNhbCBtZXNzYWdlJykKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKCiAgICBsb2dnZXIuZGVidWcoJ2ZvbyBkZWJ1ZyBtZXNzYWdlJykKICAgIGxvZ2dlci5pbmZvKCdmb28gaW5mbyBtZXNzYWdlJykKPHxmaW1fZW5kfD4="]
["0036722884dd034a36980a620beb479127170d4a-2","0036722884dd034a36980a620beb479127170d4a",{"$cut":{"chars":28796,"head":"PHxmaW1fcHJlZml4fD4KIyBweWxpbnQ6IGRpc2FibGU9YXR0cmlidXRlLWRlZmluZWQtb3V0c2lkZS1pbml0CgppbXBvcnQgbG9nZ2luZwpmcm9tIHR5cGluZyBpbXBvcnQgVW5pb24KZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBBTlksIEFzeW5jTW9jaywgTWFnaWNNb2NrLCBNb2NrCgppbXBvcnQgZGlzY29yZAppbXBvcnQgcHl0ZXN0CmZyb20gZGlzY29yZC5lcnJvcnMgaW1wb3J0IERpc2NvcmRFeGNlcHRpb24KCmZyb20gc3BlbGxib3Qub3BlcmF0aW9ucyBpbXBvcnQgKAogICAgc2FmZV9hZGRfcm9sZSwKICAgIHNhZmVfY3JlYXRlX2NhdGVnb3J5X2NoYW5uZWwsCiAgICBzYWZlX2NyZWF0ZV9pbnZpdGUsCiAgICBzYWZlX2NyZWF0ZV92b2ljZV9jaGFubmVsLAogICAgc2FmZV9kZWxldGVfY2hhbm5lbCwKICAgIHNhZmVfZW5zdXJlX3ZvaWNlX2NhdGVnb3J5LAogICAgc2FmZV9mZXRjaF9ndWlsZCwKICAgIHNhZmVfZmV0Y2hfdGV4dF9jaGFubmVsLAogICAgc2FmZV9mZXRjaF91c2VyLAogICAgc2FmZV9nZXRfcGFydGlhbF9tZXNzYWdlLAogICAgc2FmZV9tZXNzYWdlX3JlcGx5LAogICAgc2FmZV9zZW5kX3VzZXIsCiAgICBzYWZlX3VwZGF0ZV9lbWJlZCwKICAgIHNhZmVfdXBkYXRlX2VtYmVkX29yaWdpbiwKKQpmcm9tIHNwZWxsYm90LnV0aWxzIGltcG9ydCBDQU5UX1NFTkRfQ09ERQpmcm9tIHRlc3RzLm1peGlucyBpbXBvcnQgQ29tcG9uZW50Q29udGV4dE1peGluCmZyb20gdGVzdHMubW9ja3MgaW1wb3J0IGJ1aWxkX21lc3NhZ2UsIG1vY2tfY2xpZW50CgoKQHB5dGVzdC5tYXJrLmFzeW5jaW8KY2xhc3MgVGVzdE9wZXJhdGlvbnNGZXRjaFVzZXI6CiAgICBhc3luYyBkZWYgdGVzdF9jYWNoZWQoc2VsZiwgZHB5X2F1dGhvcjogZGlzY29yZC5Vc2VyKToKICAgICAgICBjbGllbnQgPSBtb2NrX2NsaWVudCh1c2Vycz1bZHB5X2F1dGhvcl0pCiAgICAgICAgYXNzZXJ0IGF3YWl0IHNhZmVfZmV0Y2hfdXNlcihjbGllbnQsIGRweV9hdXRob3IuaWQpIGlzIGRweV9hdXRob3IKCiAgICBhc3luYyBkZWYgdGVzdF91bmNhY2hlZChzZWxmLCBkcHlfYXV0aG9yOiBkaXNjb3JkLlVzZXIsIG1vbmtleXBhdGNoKToKICAgICAgICBjbGllbnQgPSBtb2NrX2NsaWVudCh1c2Vycz1bZHB5X2F1dGhvcl0pCiAgICAgICAgbW9ua2V5cGF0Y2guc2V0YXR0cihjbGllbnQsICJnZXRfdXNlciIsIE1hZ2ljTW9jayhyZXR1cm5fdmFsdWU9Tm9uZSkpCiAgICAgICAgYXNzZXJ0IGF3YWl0IHNhZmVfZmV0Y2hfdXNlcihjbGllbnQsIGRweV9hdXRob3IuaWQpIGlzIGRweV9hdXRob3IKCgpAcHl0ZXN0Lm1hcmsuYXN5bmNpbwpjbGFzcyBUZXN0T3BlcmF0aW9uc0ZldGNoR3VpbGQ6CiAgICBhc3luYyBkZWYgdGVzdF9jYWNoZWQoc2VsZiwgZHB5X2d1aWxkKToKICAgICAgICBjbGllbnQgPSBtb2NrX2NsaWVudChndWlsZHM9W2RweV9ndWlsZF0pCiAgICAgICAgYXNzZXJ0IGF3YWl0IHNhZmVfZmV0Y2hfZ3VpbGQoY2xpZW50LCBkcHlfZ3VpbGQuaWQpIGlzIGRweV9ndWlsZAoKICAgIGFzeW5jIGRlZiB0ZXN0X3VuY2FjaGVkKHNlbGYsIGRweV9ndWlsZCwgbW9ua2V5cGF0Y2gpOgogICAgICAgIGNsaWVudCA9IG1vY2tfY2xpZW50KGd1aWxkcz1bZHB5X2d1aWxkXSkKICAgICAgICBtb25rZXlwYXRjaC5zZXRhdHRyKGNsaWVudCwgImdldF9ndWlsZCIsIE1hZ2ljTW9jayhyZXR1cm5fdmFsdWU9Tm9uZSkpCiAgICAgICAgYXNzZXJ0IGF3YWl0IHNhZmVfZmV0Y2hfZ3VpbGQoY2xpZW50LCBkcHlfZ3VpbGQuaWQpIGlzIGRweV9ndWlsZAoKCkBweXRlc3QubWFyay5hc3luY2lvCmNsYXNzIFRlc3RPcGVyYXRpb25zRmV0Y2hUZXh0Q2hhbm5lbDoKICAgIGFzeW5jIGRlZiB0ZXN0X2NhY2hlZChzZWxmLCBkcHlfY2hhbm5lbCk6CiAgICAgICAgY2xpZW50ID0gbW9ja19jbGllbnQoY2hhbm5lbHM9W2RweV9jaGFubmVsXSkKICAgICAgICBhc3NlcnQgYXdhaXQgc2FmZV9mZXRjaF90ZXh0X2NoYW5uZWwoY2xpZW50LCBBTlksIGRweV9jaGFubmVsLmlkKSBpcyBkcHlfY2hhbm5lbAoKICAgIGFzeW5jIGRlZiB0ZXN0X3VuY2FjaGVkKHNlbGYsIGRweV9jaGFubmVsLCBtb25rZXlwYXRjaCk6CiAgICAgICAgY2xpZW50ID0gbW9ja19jbGllbnQoY2hhbm5lbHM9W2RweV9jaGFubmVsXSkKICAgICAgICBtb25rZXlwYXRjaC5zZXRhdHRyKGNsaWVudCwgImdldF9jaGFubmVsIiwgTWFnaWNNb2NrKHJldHVybl92YWx1ZT1Ob25lKSkKICAgICAgICBhc3NlcnQgYXdhaXQgc2FmZV9mZXRjaF90ZXh0X2NoYW5uZWwoY2xpZW50LCBBTlksIGRweV9jaGFubmVsLmlkKSBpcyBkcHlfY2hhbm5lbAoKICAgIGFzeW5jIGRlZiB0ZXN0X25vbl90ZXh0KHNlbGYpOgogICAgICAgIGNoYW5uZWwgPSBNYWdpY01vY2soc3BlYz1kaXNjb3JkLkRNQ2hhbm5lbCkKICAgICAgICBjbGllbnQgPSBtb2NrX2NsaWVudChjaGFubmVscz1bY2hhbm5lbF0pCiAgICAgICAgYXNzZXJ0IGF3YWl0IHNhZmVfZmV0Y2hfdGV4dF9jaGFubmVsKGNsaWVudCwgQU5ZLCBjaGFubmVsLmlkKSBpcyBOb25lCgogICAgYXN5bmMgZGVmIHRlc3RfdW5jYWNoZWRfbm9uX3RleHQoc2VsZiwgbW9ua2V5cGF0Y2gpOgogICAgICAgIGNoYW5uZWwgPSBNYWdpY01vY2soc3BlYz1kaXNjb3JkLkRNQ2hhbm5lbCkKICAgICAgICBjbGllbnQgPSBtb2NrX2NsaWVudChjaGFubmVscz1bY2hhbm5lbF0pCiAgICAgICAgbW9ua2V5cGF0Y2guc2V0YXR0cihjbGllbnQsICJnZXRfY2hhbm5lbCIsIE1hZ2ljTW9jayhyZXR1cm5fdmFsdWU9Tm9uZSkpCiAgICAgICAgYXNzZXJ0IGF3YWl0IHNhZmVfZmV0Y2hfdGV4dF9jaGFubmVsKGNsaWVudCwgQU5ZLCBjaGFubmVsLmlkKSBpcyBOb25lCgoKQHB5dGVzdC5tYXJrLmFzeW5jaW8KY2xhc3MgVGVzdE9wZXJhdGlvbnNHZXRQYXJ0aWFsTWVzc2FnZToKICAgIHJlYWRfcGVybXMgPSBkaXNjb3JkLlBlcm1pc3Npb25zKAogICAgICAgIGRpc2NvcmQuUGVybWlzc2lvbnMucmVhZF9tZXNzYWdlcy5mbGFnCiAgICAgICAgfCBkaXNjb3JkLlBlcm1pc3Npb25zLnJlYWRfbWVzc2FnZV9oaXN0b3J5LmZsYWcsCiAgICApCgogICAgQHB5dGVzdC5maXh0dXJlKGF1"}}]
["0632929b8f44fc86c8cda868d673e27faa107ca5-4","0632929b8f44fc86c8cda868d673e27faa107ca5","PHxmaW1fcHJlZml4fD4KZnJvbSBjaGFubmVscy5hdXRoIGltcG9ydCBBdXRoTWlkZGxld2FyZVN0YWNrCmZyb20gY2hhbm5lbHMucm91dGluZyBpbXBvcnQgUHJvdG9jb2xUeXBlUm91dGVyLCBVUkxSb3V0ZXIKaW1wb3J0IHJvb21zLnJvdXRpbmcgYXMgcm9vbXMKCnVybHBhdHRlcm5zID0gbGlzdCgpCnVybHBhdHRlcm5zICs9IHJvb21zLndlYnNvY2tldF91cmxwYXR0ZXJucwoKYXBwbGljYXRpb24gPSBQcm90b2NvbFR5cGVSb3V0ZXIoCjx8ZmltX2hvbGV8PgopCjx8ZmltX3N1ZmZpeHw+CiAgICB7CiAgICAgICAgIyAoaHR0cC0+ZGphbmdvIHZpZXdzIGlzIGFkZGVkIGJ5IGRlZmF1bHQpCiAgICAgICAgIndlYnNvY2tldCI6IEF1dGhNaWRkbGV3YXJlU3RhY2soVVJMUm91dGVyKHVybHBhdHRlcm5zKSksCiAgICB9Cjx8ZmltX2VuZHw+"]
["5c3f476d4080795711fc224393939f7851108a36-2","5c3f476d4080795711fc224393939f7851108a36","PHxmaW1fcHJlZml4fD4KCgpkZWYgam9iX3NjcmlwdChzZXR0aW5nLCBqb2JfbmFtZT1Ob25lLCBzY3JpcHRfYWRkcmVzcz1Ob25lLCBqb2Jfb3V0cHV0X2ZvbGRlcj1Ob25lKToKICAgIHRleHQgPSAiIiIjIS9iaW4vYmFzaAojJCAtUyAvYmluL2Jhc2ggCiMkIC1qIFkgCiMkIC1WIAoiIiIKICAgIHRleHQgPSB0ZXh0ICsgJyMkIC1vICcgKyBqb2Jfb3V0cHV0X2ZvbGRlciArICdcbicKICAgIHRleHQgPSB0ZXh0ICsgJyMkIC1xICcgKyBzZXR0aW5nWydjbHVzdGVyX3F1ZXVlJ10gKyAnXG4nCiAgICB0ZXh0ID0gdGV4dCArICcjJCAtTiAnICsgam9iX25hbWUgKyAnXG4nCiAgICB0ZXh0ID0gdGV4dCArICcjJCAtbCBoX3ZtZW09JyArIHNldHRpbmdbJ2NsdXN0ZXJfbWVtb3J5J10gKyAnXG4nCiAgICBpZiBzZXR0aW5nWydjbHVzdGVyX051bWJlck9mQ1BVJ10gaXMgbm90IE5vbmU6CiAgICAgICAgdGV4dCA9IHRleHQgKyAnIyQgLXBlIEJXQSAnICsgc3RyKHNldHRpbmdbJ2NsdXN0ZXJfTnVtYmVyT2ZDUFUnXSkgKyAnXG4nCgogICAgaWYgc2V0dGluZ1snY2x1c3Rlcl9ob3N0bmFtZSddIGlzIG5vdCBOb25lOgogICAgICAgIHRleHQgPSB0ZXh0ICsgJyMkIC1sIGhvc3RuYW1lPScgKyBzZXR0aW5nWydjbHVzdGVyX2hvc3RuYW1lJ10gKyAnXG4nCgogICAgIyBpZiBzZXR0aW5nWydjbHVzdGVyX0N1ZGEnXToKCiAgICAjIHRleHQgPSB0ZXh0ICsgJ2V4cG9ydCBMRF9MSUJSQVJZX1BBVEg9Ii9leHBvcnRzL2xrZWItaHBjL2hzb2tvb3Rpb3Nrb295aS9Qcm9ncmFtL2N1ZG5uNzMvbGliNjQ6JExEX0xJQlJBUllfUEFUSCInICdcbicKICAgIHRleHQgPSB0ZXh0ICsgJ2V4cG9ydCBDVURBX1ZJU0lCTEVfREVWSUNFUz0nICsgJyInICsgc3RyKHNldHRpbmdbJ2NsdXN0ZXJfQ1VEQV9WSVNJQkxFX0RFVklDRVMnXSkgKyAnIicgKyAnXG4nCiAgICB0ZXh0ID0gdGV4dCArICdzb3VyY2UgJyArIHNldHRpbmdbJ2NsdXN0ZXJfdmVudiddICsgJ1xuJwogICAgdGV4dCA9IHRleHQgKyAnbW9kdWxlIGxvYWQgY3VkYTknICsgJ1xuJwoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgaWYgc2V0dGluZ1snY2x1c3Rlcl9ob3N0bmFtZSddIGlzIG5vdCBOb25lOgogICAgICAgIHRleHQgPSB0ZXh0ICsgJ2VjaG8gIm9uIEhvc3RuYW1lID0gJChob3N0bmFtZSkiJyAnXG4nCiAgICBpZiBzZXR0aW5nWydjbHVzdGVyX0N1ZGEnXToKICAgICAgICB0ZXh0ID0gdGV4dCArICdlY2hvICJvbiBHUFUgICAgICA9ICRDVURBX1ZJU0lCTEVfREVWSUNFUyInICdcbicKPHxmaW1fZW5kfD4="]
["d9000607375209e3fa1d9d896a2160781da25892-2","d9000607375209e3fa1d9d896a2160781da25892","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nOiB1dGYtOAoKIyAjIENyZWF0ZSBhIGJpbmFyeSB0cmVlCgojICFbdHJlZSBpbWFnZV0oaW1hZ2VzL3RyZWVfMDEucG5nICJUcmVlIikKCiMgIyMgVGFzayAwMTogYnVpbGQgYSBub2RlCiMgCiMgKiBvbiBhIHBpZWNlIG9mIHBhcGVyLCBkcmF3IGEgdHJlZS4KIyAqIERlZmluZSBhIG5vZGUsIHdoYXQgYXJlIHRoZSB0aHJlZSB0aGluZ3MgeW91J2QgZXhwZWN0IGluIGEgbm9kZT8KIyAqIERlZmluZSBjbGFzcyBjYWxsZWQgYE5vZGVgLCBhbmQgZGVmaW5lIGEgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBubyBhcmd1bWVudHMsIGFuZCBzZXRzIHRoZSB0aHJlZSBpbnN0YW5jZSB2YXJpYWJsZXMgdG8gYE5vbmVgLgojICogTm90ZTogY29kaW5nIGZyb20gYSBibGFuayBjZWxsIChvciBibGFuayBwaWVjZSBvZiBwYXBlcikgaXMgZ29vZCBwcmFjdGljZSBmb3IgaW50ZXJ2aWV3cyEKCiMgSW5bMV06CgoKIyMgRGVmaW5lIGEgbm9kZQoKCiMgSW5bMl06CgoKbm9kZTAgPSBOb2RlKCkKcHJpbnQoZiIiIgp2YWx1ZToge25vZGUwLnZhbHVlfQpsZWZ0OiB7bm9kZTAubGVmdH0KcmlnaHQ6IHtub2RlMC5yaWdodH0KIiIiKQoKCiMgIyMgVGFzayAwMjogYWRkIGEgY29uc3RydWN0b3IgdGhhdCB0YWtlcyB0aGUgdmFsdWUgYXMgYSBwYXJhbWV0ZXIKIyAKIyBDb3B5IHdoYXQgeW91IGp1c3QgbWFkZSwgYW5kIG1vZGlmeSB0aGUgY29uc3RydWN0b3Igc28gdGhhdCBpdCB0YWtlcyBpbiBhbiBvcHRpb25hbCB2YWx1ZSwgd2hpY2ggaXQgYXNzaWducyBhcyB0aGUgbm9kZSdzIHZhbHVlLiAgT3RoZXJ3aXNlLCBpdCBzZXRzIHRoZSBub2RlJ3MgdmFsdWUgdG8gYE5vbmVgLgojIAoKIyBJblszXToKCgojIyBZb3VyIGNvZGUgaGVyZQojIyBEZWZpbmUgYSBub2RlCgoKIyBJblsxM106CgoKCgoKIyBJbls0XToKCgojIyBDaGVjawoKbm9kZTAgPSBOb2RlKCkKcHJpbnQoZiIiIgp2YWx1ZToge25vZGUwLnZhbHVlfQpsZWZ0OiB7bm9kZTAubGVmdH0KcmlnaHQ6IHtub2RlMC5yaWdodH0KIiIiKQoKbm9kZTAgPSBOb2RlKCJhcHBsZSIpCnByaW50KGYiIiIKdmFsdWU6IHtub2RlMC52YWx1ZX0KbGVmdDoge25vZGUwLmxlZnR9CnJpZ2h0OiB7bm9kZTAucmlnaHR9CiIiIikKCgojICMjIFRhc2sgMDM6IGFkZCBmdW5jdGlvbnMgdG8gc2V0IGFuZCBnZXQgdGhlIHZhbHVlIG9mIHRoZSBub2RlCiMgCiMgQWRkIGZ1bmN0aW9ucyBgZ2V0X3ZhbHVlYCBhbmQgYHNldF92YWx1ZWAKCiMgSW5bIF06CgoKIyBhZGQgc2V0X3ZhbHVlIGFuZCBnZXRfdmFsdWUgZnVuY3Rpb25zCgoKIyBJblsgXToKCgoKCgojICMjIFRhc2sgMDQ6IGFkZCBmdW5jdGlvbnMgdGhhdCBhc3NpZ24gYSBsZWZ0IGNoaWxkLCBvciByaWdodCBjaGlsZAojIAojIERlZmluZSBhIGZ1bmN0aW9uIGBzZXRfbGVmdF9jaGlsZGAgYW5kIGEgZnVuY3Rpb24gYHNldF9yaWdodF9jaGlsZGAuICBFYWNoIGZ1bmN0aW9uIHRha2VzIGluIGEgbm9kZSB0aGF0IGl0IGFzc2lnbnMgYXMgdGhlIGxlZnQgb3IgcmlnaHQgY2hpbGQsIHJlc3BlY3RpdmVseS4gIE5vdGUgdGhhdCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhpcyB3aWxsIHJlcGxhY2UgYW55IGV4aXN0aW5nIG5vZGUgaWYgaXQncyBhbHJlYWR5IGFzc2lnbmVkIGFzIGEgbGVmdCBvciByaWdodCBjaGlsZC4KIyAKIyBBbHNvLCBkZWZpbmUgYGdldF9sZWZ0X2NoaWxkYCBhbmQgYGdldF9yaWdodF9jaGlsZGAgZnVuY3Rpb25zLgoKIyBJbls1XToKCgojIyB5b3VyIGNvZGUgaGVyZQoKCiMgSW5bMTRdOgoKCgoKCiMgSW5bNl06CgoKIyMgY2hlY2sKCm5vZGUwID0gTm9kZSgiYXBwbGUiKQpub2RlMSA9IE5vZGUoImJhbmFuYSIpCm5vZGUyID0gTm9kZSgib3JhbmdlIikKbm9kZTAuc2V0X2xlZnRfY2hpbGQobm9kZTEpCm5vZGUwLnNldF9yaWdodF9jaGlsZChub2RlMikKCnByaW50KGYiIiIKbm9kZSAwOiB7bm9kZTAudmFsdWV9Cm5vZGUgMCBsZWZ0IGNoaWxkOiB7bm9kZTAubGVmdC52YWx1ZX0Kbm9kZSAwIHJpZ2h0IGNoaWxkOiB7bm9kZTAucmlnaHQudmFsdWV9CiIiIikKCgojICMjIFRhc2sgMDU6IGNoZWNrIGlmIGxlZnQgb3IgcmlnaHQgY2hpbGQgZXhpc3RzCiMgCiMgRGVmaW5lIGZ1bmN0aW9ucyBgaGFzX2xlZnRfY2hpbGRgLCBgaGFzX3JpZ2h0X2NoaWxkYCwgc28gdGhhdCB0aGV5IHJldHVybiB0cnVlIGlmIHRoZSBub2RlIGhhcyBsZWZ0IGNoaWxkLCBvciByaWdodCBjaGlsZCByZXNwZWN0aXZlbHkuCgojIEluWzddOgoKCiMjIHlvdXIgY29kZSBoZXJlCiAgICAKCgojIEluWzQzXToKCgoKCgojIEluWzhdOgoKCiMjIGNoZWNrCgpub2RlMCA9IE5vZGUoImFwcGxlIikKbm9kZTEgPSBOb2RlKCJiYW5hbmEiKQpub2RlMiA9IE5vZGUoIm9yYW5nZSIpCgpwcmludChmImhhcyBsZWZ0IGNoaWxkPyB7bm9kZTAuaGFzX2xlZnRfY2hpbGQoKX0iKQpwcmludChmImhhcyByaWdodCBjaGlsZD8ge25vZGUwLmhhc19yaWdodF9jaGlsZCgpfSIpCgpwcmludCgiYWRkaW5nIGxlZnQgYW5kIHJpZ2h0IGNoaWxkcmVuIikKbm9kZTAuc2V0X2xlZnRfY2hpbGQobm9kZTEpCm5vZGUwLnNldF9yaWdodF9jaGlsZChub2RlMikKCnByaW50KGYiaGFzIGxlZnQgY2hpbGQ/IHtub2RlMC5oYXNfbGVmdF9jaGlsZCgpfSIpCnByaW50KGYiaGFzIHJpZ2h0IGNoaWxkPyB7bm9kZTAuaGFzX3JpZ2h0X2NoaWxkKCl9IikKCgojICMjIFRhc2sgMDY6IENyZWF0ZSBhIGJpbmFyeSB0cmVlCiMgCiMgQ3JlYXRlIGEgY2xhc3MgY2FsbGVkIGBUcmVlYCB0aGF0IGhhcyBhICJyb290IiBpbnN0YW5jZSB2YXJpYWJsZSBvZiB0eXBlIGBOb2RlYC4KIyAKIyBBbHNvIGRlZmluZSBhIGdldF9yb290IG1ldGhvZCB0aGF0IHJldHVybnMgdGhlIHJvb3Qgbm9kZS4KCiMgSW5bIF06CgoKIyBkZWZpbmUgYSBUcmVlIGNsYXNzIGhlcmUKICAgIAoKCiMgSW5bMV06CgoKCgoKIyAjIyBUYXNrIDA3OiBzZXR0aW5nIHJvb3Qgbm9kZSBpbiBjb25zdHJ1Y3Rvcgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgCiMgTGV0J3MgbW9kaWZ5IHRoZSBgVHJlZWAgY29uc3RydWN0b3Igc28gdGhhdCBpdCB0YWtlcyBhbiBpbnB1dCB0aGF0IGluaXRpYWxpemVzIHRoZSByb290IG5vZGUuICBDaG9vc2UgYmV0d2VlbiBvbmUgb2YgdHdvIG9wdGlvbnM6IAojIDEpIHRoZSBjb25zdHJ1Y3RvciB0YWtlcyBhIGBOb2RlYCBvYmplY3QgIAojIDIpIHRoZSBjb25zdHJ1Y3RvciB0YWtlcyBhIHZhbHVlLCB0aGVuIGNyZWF0ZXMgYSBuZXcgYE5vZGVgIG9iamVjdCB1c2luZyB0aGF0IHZhbHVlLiAgCjx8ZmltX2VuZHw+"]
["cc5f5ad917e7a43b7f43029d971dc825ca461cce-1","cc5f5ad917e7a43b7f43029d971dc825ca461cce","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMSBVVy1JVCwgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uCiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gc2lzX3Byb3Zpc2lvbmVyLmRhby51c2VyIGltcG9ydCB2YWxpZF9uZXRfaWQsIHZhbGlkX2dtYWlsX2lkCmZyb20gc2lzX3Byb3Zpc2lvbmVyLmV4Y2VwdGlvbnMgaW1wb3J0IFVzZXJQb2xpY3lFeGNlcHRpb24KZnJvbSBzaXNfcHJvdmlzaW9uZXIubW9kZWxzLmdyb3VwIGltcG9ydCBHcm91cCwgR3JvdXBNZW1iZXJHcm91cApmcm9tIHNpc19wcm92aXNpb25lci5tb2RlbHMudXNlciBpbXBvcnQgVXNlcgpmcm9tIHJlc3RjbGllbnRzX2NvcmUuZXhjZXB0aW9ucyBpbXBvcnQgRGF0YUZhaWx1cmVFeGNlcHRpb24KaW1wb3J0IHhtbC5ldHJlZS5FbGVtZW50VHJlZSBhcyBFVApmcm9tIGxvZ2dpbmcgaW1wb3J0IGdldExvZ2dlcgppbXBvcnQgcmUKCmxvZ19wcmVmaXggPSAnR1JPVVA6JwpyZV9wYXJzZXIgPSByZS5jb21waWxlKHInXi4qKDxncm91cC4qL2dyb3VwPikuKiQnLCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwpCgoKY2xhc3MgRGlzcGF0Y2gob2JqZWN0KToKICAgICIiIgogICAgQmFzZSBjbGFzcyBmb3IgZGlzcGF0Y2hpbmcgb24gYWN0aW9ucyB3aXRoaW4gYSBVVyBHV1MgRXZlbnQKICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZywgbWVzc2FnZT1Ob25lKToKICAgICAgICBzZWxmLl9sb2cgPSBnZXRMb2dnZXIoX19uYW1lX18pCiAgICAgICAgc2VsZi5fc2V0dGluZ3MgPSBjb25maWcKICAgICAgICBzZWxmLl9tZXNzYWdlID0gbWVzc2FnZQoKICAgIGRlZiBtaW5lKHNlbGYsIGdyb3VwKToKICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBkZWYgcnVuKHNlbGYsIGFjdGlvbiwgZ3JvdXAsIG1lc3NhZ2UpOgogICAgICAgIHRyeToKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICd1cGRhdGUtbWVtYmVycyc6IHNlbGYudXBkYXRlX21lbWJlcnMsCiAgICAgICAgICAgICAgICAncHV0LWdyb3VwJzogc2VsZi5wdXRfZ3JvdXAsCiAgICAgICAgICAgICAgICAnZGVsZXRlLWdyb3VwJzogc2VsZi5kZWxldGVfZ3JvdXAsCiAgICAgICAgICAgICAgICAncHV0LW1lbWJlcnMnOiBzZWxmLnB1dF9tZW1iZXJzLAogICAgICAgICAgICAgICAgJ2NoYW5nZS1zdWJqZWN0LW5hbWUnOiBzZWxmLmNoYW5nZV9zdWJqZWN0X25hbWUsCiAgICAgICAgICAgICAgICAnbm8tYWN0aW9uJzogc2VsZi5ub19hY3Rpb24KICAgICAgICAgICAgfVthY3Rpb25dKGdyb3VwLCBzZWxmLl9wYXJzZShtZXNzYWdlKSkKICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgIHNlbGYuX2xvZy5pbmZvKCd7fSBVTktOT1dOIHt9IGZvciB7fScuZm9ybWF0KAogICAgICAgICAgICAgICAgbG9nX3ByZWZpeCwgYWN0aW9uLCBncm91cCkpCiAgICAgICAgICAgIHJldHVybiAwCgogICAgZGVmIHVwZGF0ZV9tZW1iZXJzKHNlbGYsIGdyb3VwX2lkLCBtZXNzYWdlKToKICAgICAgICBzZWxmLl9sb2cuaW5mbygne30gSUdOT1JFIHVwZGF0ZS1tZW1iZXJzIGZvciB7fScuZm9ybWF0KAogICAgICAgICAgICBsb2dfcHJlZml4LCBncm91cF9pZCkpCiAgICAgICAgcmV0dXJuIDAKCiAgICBkZWYgcHV0X2dyb3VwKHNlbGYsIGdyb3VwX2lkLCBtZXNzYWdlKToKICAgICAgICBzZWxmLl9sb2cuaW5mbygne30gSUdOT1JFIHB1dC1ncm91cCB7fScuZm9ybWF0KGxvZ19wcmVmaXgsIGdyb3VwX2lkKSkKICAgICAgICByZXR1cm4gMAoKICAgIGRlZiBkZWxldGVfZ3JvdXAoc2VsZiwgZ3JvdXBfaWQsIG1lc3NhZ2UpOgogICAgICAgIHNlbGYuX2xvZy5pbmZvKCd7fSBJR05PUkUgZGVsZXRlLWdyb3VwIHt9Jy5mb3JtYXQoCiAgICAgICAgICAgIGxvZ19wcmVmaXgsIGdyb3VwX2lkKSkKICAgICAgICByZXR1cm4gMAoKICAgIGRlZiBwdXRfbWVtYmVycyhzZWxmLCBncm91cF9pZCwgbWVzc2FnZSk6CiAgICAgICAgc2VsZi5fbG9nLmluZm8oJ3t9IElHTk9SRSBwdXQtbWVtYmVycyBmb3Ige30nLmZvcm1hdCgKICAgICAgICAgICAgbG9nX3ByZWZpeCwgZ3JvdXBfaWQpKQogICAgICAgIHJldHVybiAwCgogICAgZGVmIGNoYW5nZV9zdWJqZWN0X25hbWUoc2VsZiwgZ3JvdXBfaWQsIG1lc3NhZ2UpOgogICAgICAgIHNlbGYuX2xvZy5pbmZvKCd7fSBJR05PUkUgY2hhbmdlLXN1YmplY3QtbmFtZSBmb3Ige30nLmZvcm1hdCgKICAgICAgICAgICAgbG9nX3ByZWZpeCwgZ3JvdXBfaWQpKQogICAgICAgIHJldHVybiAwCgogICAgZGVmIG5vX2FjdGlvbihzZWxmLCBncm91cF9pZCwgbWVzc2FnZSk6CiAgICAgICAgcmV0dXJuIDAKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgX3BhcnNlKG1lc3NhZ2UpOgogICAgICAgIG1lc3NhZ2UgPSByZV9wYXJzZXIuc3ViKHInXGc8MT4nLCBtZXNzYWdlLmRlY29kZSgndXRmLTgnKSkKICAgICAgICByZXR1cm4gRVQuZnJvbXN0cmluZyhtZXNzYWdlKQoKCmNsYXNzIFVXR3JvdXBEaXNwYXRjaChEaXNwYXRjaCk6CiAgICAiIiIKICAgIENhbnZhcyBFbnJvbGxtZW50IEdyb3VwIEV2ZW50IERpc3BhdGNoZXIKICAgICIiIgogICAgZGVmIG1pbmUoc2VsZiwgZ3JvdXBfaWQpOgogICAgICAgIHJldHVybiAoCiAgICAgICAgICAgIEdyb3VwLm9iamVjdHMuZ2V0X2FjdGl2ZV9ieV9ncm91cChncm91cF9pZCkuZXhpc3RzKCkgb3IKICAgICAgICAgICAgR3JvdXBNZW1iZXJHcm91cC5vYmplY3RzLmdldF9hY3RpdmVfYnlfZ3JvdXAoZ3JvdXBfaWQpLmV4aXN0cygpKQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBfdmFsaWRfbWVtYmVyKGxvZ2luX2lkKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHZhbGlkX25ldF9pZChsb2dpbl9pZCkKICAgICAgICAgICAgcmV0dXJuIDEKICAgICAgICBleGNlcHQgVXNlclBvbGljeUV4Y2VwdGlvbjoKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgdmFsaWRfZ21haWxfaWQobG9naW5faWQpCiAgICAgICAgICAgICAgICByZXR1cm4gMQogICAgICAgICAgICBleGNlcHQgVXNlclBvbGljeUV4Y2VwdGlvbjoKICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICByZXR1cm4gMAoKICAgIGRlZiB1cGRhdGVfbWVtYmVycyhzZWxmLCBncm91cF9pZCwgbWVzc2FnZSk6CiAgICAgICAgIyBib2R5IGNvbnRhaW5zIGxpc3Qgb2YgbWVtYmVycyB0byBiZSBhZGRlZCBvciByZW1vdmVkCiAgICAgICAgZ3JvdXBfaWQgPSBtZXNzYWdlLmZpbmRhbGwoJy4vbmFtZScpWzBdLnRleHQKICAgICAgICBtZW1iZXJfY291bnQgPSAwCgogICAgICAgIGZvciBlbCBpbiBtZXNzYWdlLmZpbmRhbGwoJy4vYWRkLW1lbWJlcnMvYWRkLW1lbWJlcicpOgogICAgICAgICAgICBtZW1iZXJfY291bnQgKz0gc2VsZi5fdmFsaWRfbWVtYmVyKGVsLnRleHQpCgogICAgICAgIGZvciBlbCBpbiBtZXNzYWdlLmZpbmRhbGwoJy4vZGVsZXRlLW1lbWJlcnMvZGVsZXRlLW1lbWJlcicpOgogICAgICAgICAgICBtZW1iZXJfY291bnQgKz0gc2VsZi5fdmFsaWRfbWVtYmVyKGVsLnRleHQpCgogICAgICAgIGlmIG1lbWJlcl9jb3VudCA+IDA6CiAgICAgICAgICAgIGZvciBncm91cCBpbiBHcm91cC5vYmplY3RzLmdldF9hY3RpdmVfYnlfZ3JvdXAoZ3JvdXBfaWQpOgogICAgICAgICAgICAgICAgZ3JvdXAudXBkYXRlX3ByaW9yaXR5KGdyb3VwLlBSSU9SSVRZX0hJR0gpCgogICAgICAgICAgICBmb3IgbWdyb3VwIGluIEdyb3VwTWVtYmVyR3JvdXAub2JqZWN0cy5nZXRfYWN0aXZlX2J5X2dyb3VwKAogICAgICAgICAgICAgICAgICAgIGdyb3VwX2lkKToKICAgICAgICAgICAgICAgIGZvciBncm91cCBpbiBHcm91cC5vYmplY3RzLmdldF9hY3RpdmVfYnlfZ3JvdXAoCiAgICAgICAgICAgICAgICAgICAgICAgIG1ncm91cC5yb290X2dyb3VwX2lkKToKICAgICAgICAgICAgICAgICAgICBncm91cC51cGRhdGVfcHJpb3JpdHkoZ3JvdXAuUFJJT1JJVFlfSElHSCkKCiAgICAgICAgICAgIHNlbGYuX2xvZy5pbmZvKCd7fSBVUERBVEUgbWVtYmVyc2hpcCBmb3Ige30nLmZvcm1hdCgKICAgICAgICAgICAgICAgIGxvZ19wcmVmaXgsIGdyb3VwX2lkKSkKCiAgICAgICAgcmV0dXJuIG1lbWJlcl9jb3VudAoKICAgIGRlZiBkZWxldGVfZ3JvdXAoc2VsZiwgZ3JvdXBfaWQsIG1lc3NhZ2UpOgogICAgICAgIGdyb3VwX2lkID0gbWVzc2FnZS5maW5kYWxsKCcuL25hbWUnKVswXS50ZXh0CgogICAgICAgICMgbWFyayBncm91cCBhcyBkZWxldGVkIGFuZCByZWFkeSBmb3IgaW1wb3J0CiAgICAgICAgR3JvdXAub2JqZWN0cy5kZWxldGVfZ3JvdXBfbm90X2ZvdW5kKGdyb3VwX2lkKQoKICAgICAgICAjIG1hcmsgYXNzb2NpYXRlZCByb290IGdyb3VwcyBmb3IgaW1wb3J0CiAgICAgICAgZm9yIG1ncm91cCBpbiBHcm91cE1lbWJlckdyb3VwLm9iamVjdHMuZ2V0X2FjdGl2ZV9ieV9ncm91cChncm91cF9pZCk6CiAgICAgICAgICAgIG1ncm91cC5kZWFjdGl2YXRlKCkKCiAgICAgICAgICAgIGZvciBncm91cCBpbiBHcm91cC5vYmplY3RzLmdldF9hY3RpdmVfYnlfZ3JvdXAoCiAgICAgICAgICAgICAgICAgICAgbWdyb3VwLnJvb3RfZ3JvdXBfaWQpOgogICAgICAgICAgICAgICAgZ3JvdXAudXBkYXRlX3ByaW9yaXR5KGdyb3VwLlBSSU9SSVRZX0lNTUVESUFURSkKCiAgICAgICAgc2VsZi5fbG9nLmluZm8oJ3t9IERFTEVURSB7fScuZm9ybWF0KGxvZ19wcmVmaXgsIGdyb3VwX2lkKSkKCiAgICAgICAgcmV0dXJuIDEKCiAgICBkZWYgY2hhbmdlX3N1YmplY3RfbmFtZShzZWxmLCBncm91cF9pZCwgbWVzc2FnZSk6CiAgICAgICAgIyBib2R5IGNvbnRhaW5zIG9sZCBhbmQgbmV3IHN1YmplY3QgbmFtZXMgKGlkKQogICAgICAgICMgbm9ybWFsaXplICdjaGFuZ2Utc3ViamVjdC1uYW1lJyBldmVudAogICAgICAgIG9sZF9uYW1lID0gbWVzc2FnZS5maW5kYWxsKCcuL3N1YmplY3Qvb2xkLW5hbWUnKVswXS50ZXh0CiAgICAgICAgbmV3X25hbWUgPSBtZXNzYWdlLmZpbmRhbGwoJy4vc3ViamVjdC9uZXctbmFtZScpWzBdLnRleHQKCiAgICAgICAgR3JvdXAub2JqZWN0cy51cGRhdGVfZ3JvdXBfaWQob2xkX25hbWUsIG5ld19uYW1lKQogICAgICAgIEdyb3VwTWVtYmVyR3JvdXAub2JqZWN0cy51cGRhdGVfZ3JvdXBfaWQob2xkX25hbWUsIG5ld19uYW1lKQogICAgICAgIEdyb3VwTWVtYmVyR3JvdXAub2JqZWN0cy51cGRhdGVfcm9vdF9ncm91cF9pZChvbGRfbmFtZSwgbmV3X25hbWUpCgogICAgICAgIHNlbGYuX2xvZy5pbmZvKCd7fSBVUERBVEUgY2hhbmdlLXN1YmplY3QtbmFtZSB7fSB0byB7fScuZm9ybWF0KAogICAgICAgICAgICBsb2dfcHJlZml4LCBvbGRfbmFtZSwgbmV3X25hbWUpKQoKICAgICAgICByZXR1cm4gMQoKCmNsYXNzIExvZ2luR3JvdXBEaXNwYXRjaChEaXNwYXRjaCk6CiAgICBkZWYgZ3JvdXAoc2VsZik6CiAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICAgIGRlZiBtaW5lKHNlbGYsIGdyb3VwX2lkKToKICAgICAgICByZXR1cm4gZ3JvdXBfaWQgPT0gc2VsZi5ncm91cCgpCgogICAgZGVmIF9sb2dfdXBkYXRlKHNlbGYpOgogICAgICAgIHNlbGYuX2xvZy5pbmZvKCd7fSBVUERBVEUgbWVtYmVyc2hpcCBmb3Ige30nLmZvcm1hdCgKICAgICAgICAgICAgbG9nX3ByZWZpeCwgc2VsZi5ncm91cCgpKSkKCiAgICBkZWYgX2FkZF91c2VyKHNlbGYsIG5ldF9pZCwgZmxhZ191c2VyPUZhbHNlKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHVzZXIgPSBVc2VyLm9iamVjdHMuYWRkX3VzZXJfYnlfbmV0aWQobmV0X2lkKQogICAgICAgICAgICBpZiBmbGFnX3VzZXI6CiAgICAgICAgICAgICAgICB1c2VyLmludmFsaWRfZW5yb2xsbWVudF9jaGVja19yZXF1aXJlZCA9IFRydWUKICAgICAgICAgICAgICAgIHVzZXIuc2F2ZSgpCiAgICAgICAgICAgICAgICBzZWxmLl9sb2cuaW5mbygKICAgICAgICAgICAgICAgICAgICAne30gRkxBRyB7fSBpbiB7fSBmb3IgaW52YWxpZCBlbnJvbGxtZW50IGNoZWNrJy5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ19wcmVmaXgsIG5ldF9pZCwgc2VsZi5ncm91cCgpKSkKICAgICAgICBleGNlcHQgVXNlclBvbGljeUV4Y2VwdGlvbiBhcyBleDoKICAgICAgICAgICAgc2VsZi5fbG9nLmluZm8oJ3t9IElHTk9SRSBtZW1iZXIge306IHt9Jy5mb3JtYXQoCiAgICAgICAgICAgICAgICBsb2dfcHJlZml4LCBuZXRfaWQsIGV4KSkKICAgICAgICBleGNlcHQgRGF0YUZhaWx1cmVFeGNlcHRpb24gYXMgZXg6CiAgICAgICAgICAgIHNlbGYuX2xvZy5pbmZvKCd7fSBFUlJPUiBhZGRpbmcgbWVtYmVyIHt9OiB7fScuZm9ybWF0KAogICAgICAgICAgICAgICAgbG9nX3ByZWZpeCwgbmV0X2lkLCBleCkpCgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICBleGNlcHQgVXNlclBvbGljeUV4Y2VwdGlvbjoKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgoKY2xhc3MgQWZmaWxpYXRlTG9naW5Hcm91cERpc3BhdGNoKExvZ2luR3JvdXBEaXNwYXRjaCk6CiAgICBkZWYgZ3JvdXAoc2VsZik6CiAgICAgICAgcmV0dXJuIGdldGF0dHIoc2V0dGluZ3MsICdBTExPV0VEX0NBTlZBU19BRkZJTElBVEVfVVNFUlMnKQoKICAgIGRlZiB1cGRhdGVfbWVtYmVycyhzZWxmLCBncm91cF9pZCwgbWVzc2FnZSk6CiAgICAgICAgbWVtYmVyX2NvdW50ID0gMAogICAgICAgIGZvciBlbCBpbiBtZXNzYWdlLmZpbmRhbGwoJy4vYWRkLW1lbWJlcnMvYWRkLW1lbWJlcicpOgogICAgICAgICAgICBpZiBzZWxmLl92YWxpZF9tZW1iZXIoZWwudGV4dCk6CiAgICAgICAgICAgICAgICB1c2VyX2V4aXN0cyA9IFVzZXIub2JqZWN0cy5maWx0ZXIobmV0X2lkPWVsLnRleHQpLmV4aXN0cygpCiAgICAgICAgICAgICAgICBzZWxmLl9hZGRfdXNlcihlbC50ZXh0LCBmbGFnX3VzZXI9dXNlcl9leGlzdHMpCiAgICAgICAgICAgICAgICBtZW1iZXJfY291bnQgKz0gMQoKICAgICAgICBmb3IgZWwgaW4gbWVzc2FnZS5maW5kYWxsKCcuL2RlbGV0ZS1tZW1iZXJzL2RlbGV0ZS1tZW1iZXInKToKICAgICAgICAgICAgaWYgc2VsZi5fdmFsaWRfbWVtYmVyKGVsLnRleHQpOgogICAgICAgICAgICAgICAgc2VsZi5fYWRkX3VzZXIoZWwudGV4dCwgZmxhZ191c2VyPVRydWUpCiAgICAgICAgICAgICAgICBtZW1iZXJfY291bnQgKz0gMQoKICAgICAgICBpZiBtZW1iZXJfY291bnQ6CiAgICAgICAgICAgIHNlbGYuX2xvZ191cGRhdGUoKQoKICAgICAgICByZXR1cm4gbWVtYmVyX2NvdW50CgoKY2xhc3MgU3BvbnNvcmVkTG9naW5Hcm91cERpc3BhdGNoKExvZ2luR3JvdXBEaXNwYXRjaCk6CiAgICBkZWYgZ3JvdXAoc2VsZik6CiAgICAgICAgcmV0dXJuIGdldGF0dHIoc2V0dGluZ3MsICdBTExPV0VEX0NBTlZBU19TUE9OU09SRURfVVNFUlMnKQoKICAgIGRlZiB1cGRhdGVfbWVtYmVycyhzZWxmLCBncm91cF9pZCwgbWVzc2FnZSk6CiAgICAgICAgbWVtYmVyX2NvdW50ID0gMAogICAgICAgIGZvciBlbCBpbiBtZXNzYWdlLmZpbmRhbGwoJy4vYWRkLW1lbWJlcnMvYWRkLW1lbWJlcicpOgogICAgICAgICAgICBpZiBzZWxmLl92YWxpZF9tZW1iZXIoZWwudGV4dCk6CiAgICAgICAgICAgICAgICBzZWxmLl9hZGRfdXNlcihlbC50ZXh0LCBmbGFnX3VzZXI9VHJ1ZSkKICAgICAgICAgICAgICAgIG1lbWJlcl9jb3VudCArPSAxCgogICAgICAgIGZvciBlbCBpbiBtZXNzYWdlLmZpbmRhbGwoJy4vZGVsZXRlLW1lbWJlcnMvZGVsZXRlLW1lbWJlcicpOgogICAgICAgICAgICBpZiBzZWxmLl92YWxpZF9tZW1iZXIoZWwudGV4dCk6CiAgICAgICAgICAgICAgICBzZWxmLl9hZGRfdXNlcihlbC50ZXh0LCBmbGFnX3VzZXI9VHJ1ZSkKICAgICAgICAgICAgICAgIG1lbWJlcl9jb3VudCArPSAxCgogICAgICAgIGlmIG1lbWJlcl9jb3VudDoKICAgICAgICAgICAgc2VsZi5fbG9nX3VwZGF0ZSgpCgogICAgICAgIHJldHVybiBtZW1iZXJfY291bnQKCgpjbGFzcyBTdHVkZW50TG9naW5Hcm91cERpc3BhdGNoKExvZ2luR3JvdXBEaXNwYXRjaCk6CiAgICBkZWYgZ3JvdXAoc2VsZik6CiAgICAgICAgcmV0dXJuIGdldGF0dHIoc2V0dGluZ3MsICdBTExPV0VEX0NBTlZBU19TVFVERU5UX1VTRVJTJykKCiAgICBkZWYgdXBkYXRlX21lbWJlcnMoc2VsZiwgZ3JvdXBfaWQsIG1lc3NhZ2UpOgogICAgICAgIG1lbWJlcl9jb3VudCA9IDAKICAgICAgICBmb3IgZWwgaW4gbWVzc2FnZS5maW5kYWxsKCcuL2FkZC1tZW1iZXJzL2FkZC1tZW1iZXInKToKICAgICAgICAgICAgaWYgc2VsZi5fdmFsaWRfbWVtYmVyKGVsLnRleHQpOgogICAgICAgICAgICAgICAgdXNlcl9leGlzdHMgPSBVc2VyLm9iamVjdHMuZmlsdGVyKG5ldF9pZD1lbC50ZXh0KS5leGlzdHMoKQogICAgICAgICAgICAgICAgc2VsZi5fYWRkX3VzZXIoZWwudGV4dCwgZmxhZ191c2VyPXVzZXJfZXhpc3RzKQogICAgICAgICAgICAgICAgbWVtYmVyX2NvdW50ICs9IDEKCiAgICAgICAgaWYgbWVtYmVyX2NvdW50OgogICAgICAgICAgICBzZWxmLl9sb2dfdXBkYXRlKCkKCiAgICAgICAgcmV0dXJuIG1lbWJlcl9jb3VudAoKCmNsYXNzIENvdXJzZUdyb3VwRGlzcGF0Y2goRGlzcGF0Y2gpOgogICAgIiIiCiAgICBDb3Vyc2UgR3JvdXAgRGlzcGF0Y2hlcgogICAgIiIiCiAgICBkZWYgbWluZShzZWxmLCBncm91cCk6CiAgICAgICAgY291cnNlID0gKCdjb3Vyc2VfJyBpbiBncm91cCBhbmQgcmUubWF0Y2goCiAgICAgICAgICAgIChyJ15jb3Vyc2VfKDIwWzAtOV17Mn0pJwogICAgICAgICAgICAgcicoW2Etel17M30pLShbYS16XC1dKyknCiAgICAgICAgICAgICByJyhbMC05XXszfSkoW2Etel1bYS16MC05XT8pJCcpLCBncm91cCkpCiAgICAgICAgaWYgY291cnNlOgogICAgICAgICAgICBzZWxmLl9jb3Vyc2Vfc2lzX2lkID0gJy0nLmpvaW4oWwogICAgICAgICAgICAgICAgY291cnNlLmdyb3VwKDEpLAogICAgICAgICAgICAgICAgeyd3aW4nOiAnd2ludGVyJywgJ3Nwcic6ICdzcHJpbmcnLCAnc3VtJzogJ3N1bW1lcicsCiAgICAgICAgICAgICAgICAgICAgJ2F1dCc6ICdhdXR1bW4nfVtjb3Vyc2UuZ3JvdXAoMildLAogICAgICAgICAgICAgICAgcmUuc3ViKHInXC0nLCAnICcsIGNvdXJzZS5ncm91cCgzKS51cHBlcigpKSwKICAgICAgICAgICAgICAgIGNvdXJzZS5ncm91cCg0KSwgY291cnNlLmdyb3VwKDUpLnVwcGVyKCkKICAgICAgICAgICAgXSkKICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBkZWYgdXBkYXRlX21lbWJlcnMoc2VsZiwgZ3JvdXAsIG1lc3NhZ2UpOgogICAgICAgICMgYm9keSBjb250YWlucyBsaXN0IG9mIG1lbWJlcnMgdG8gYmUgYWRkZWQgb3IgcmVtb3ZlZAogICAgICAgIHNlbGYuX2xvZy5pbmZvKCd7fSBJR05PUkUgY291cnNlIGdyb3VwIHVwZGF0ZToge30nLmZvcm1hdCgKICAgICAgICAgICAgbG9nX3ByZWZpeCwgc2VsZi5fY291cnNlX3Npc19pZCkpCiAgICAgICAgcmV0dXJuIDAKCiAgICBkZWYgcHV0X2dyb3VwKHNlbGYsIGdyb3VwX2lkLCBtZXNzYWdlKToKICAgICAgICBzZWxmLl9sb2cuaW5mbygne30gSUdOT1JFIGNvdXJzZSBncm91cCBwdXQtZ3JvdXA6IHt9Jy5mb3JtYXQoCiAgICAgICAgICAgIGxvZ19wcmVmaXgsIGdyb3VwX2lkKSkKICAgICAgICByZXR1cm4gMAo8fGZpbV9zdWZmaXh8PgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIF92YWxpZF9tZW1iZXIobmV0X2lkKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHZhbGlkX25ldF9pZChuZXRfaWQpCjx8ZmltX2VuZHw+"]
["0019d9f83b3d5db0fdef8cd4c128e60108fdb762-2","0019d9f83b3d5db0fdef8cd4c128e60108fdb762","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAoKZnJvbSBzdGF0ZS5wcnVuaW5nX3N0YXRlIGltcG9ydCBQcnVuaW5nU3RhdGUKPHxmaW1faG9sZXw+CgoKQHB5dGVzdC55aWVsZF9maXh0dXJlKHBhcmFtcz1bJ21lbW9yeScsICdsZXZlbGRiJywgJ3JvY2tzZGInXSkKZGVmIHN0YXRlKHJlcXVlc3QsIHRtcGRpcl9mYWN0b3J5KSAtPiBTdGF0ZToKICAgIGlmIHJlcXVlc3QucGFyYW0gPT0gJ2xldmVsZGInOgogICAgICAgIGRiID0gS2V5VmFsdWVTdG9yYWdlTGV2ZWxkYih0bXBkaXJfZmFjdG9yeS5ta3RlbXAoJycpLnN0cnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb21lX2RiJykKICAgIGVsaWYgcmVxdWVzdC5wYXJhbSA9PSAncm9ja3NkYic6CiAgICAgICAgZGIgPSBLZXlWYWx1ZVN0b3JhZ2VSb2Nrc2RiKHRtcGRpcl9mYWN0b3J5Lm1rdGVtcCgnJykuc3RycGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvbWVfZGInKQogICAgZWxzZToKICAgICAgICBkYiA9IEtleVZhbHVlU3RvcmFnZUluTWVtb3J5KCkKICAgIHN0YXRlID0gUHJ1bmluZ1N0YXRlKGRiKQogICAgeWllbGQgc3RhdGUKICAgIHN0YXRlLmNsb3NlKCkKCgpkZWYgdGVzdF9zdGF0ZV9wcm9vZl9hbmRfdmVyaWZpY2F0aW9uKHN0YXRlKToKICAgIHN0YXRlLnNldChiJ2sxJywgYid2MScpCiAgICBzdGF0ZS5zZXQoYidrMicsIGIndjInKQogICAgc3RhdGUuc2V0KGInazMnLCBiJ3YzJykKICAgIHN0YXRlLnNldChiJ2s0JywgYid2NCcpCgogICAgcDEgPSBzdGF0ZS5nZW5lcmF0ZV9zdGF0ZV9wcm9vZihiJ2sxJykKICAgIHAyID0gc3RhdGUuZ2VuZXJhdGVfc3RhdGVfcHJvb2YoYidrMicpCiAgICBwMyA9IHN0YXRlLmdlbmVyYXRlX3N0YXRlX3Byb29mKGInazMnKQogICAgcDQgPSBzdGF0ZS5nZW5lcmF0ZV9zdGF0ZV9wcm9vZihiJ2s0JykKCiAgICAjIFZlcmlmeSBjb3JyZWN0IHByb29mcyBhbmQgdmFsdWVzCiAgICBhc3NlcnQgUHJ1bmluZ1N0YXRlLnZlcmlmeV9zdGF0ZV9wcm9vZihzdGF0ZS5oZWFkSGFzaCwgYidrMScsIGIndjEnLCBwMSkKICAgIGFzc2VydCBQcnVuaW5nU3RhdGUudmVyaWZ5X3N0YXRlX3Byb29mKHN0YXRlLmhlYWRIYXNoLCBiJ2syJywgYid2MicsIHAyKQogICAgYXNzZXJ0IFBydW5pbmdTdGF0ZS52ZXJpZnlfc3RhdGVfcHJvb2Yoc3RhdGUuaGVhZEhhc2gsIGInazMnLCBiJ3YzJywgcDMpCiAgICBhc3NlcnQgUHJ1bmluZ1N0YXRlLnZlcmlmeV9zdGF0ZV9wcm9vZihzdGF0ZS5oZWFkSGFzaCwgYidrNCcsIGIndjQnLCBwNCkKCiAgICAjIEluY29ycmVjdCBwcm9vZgogICAgYXNzZXJ0IFBydW5pbmdTdGF0ZS52ZXJpZnlfc3RhdGVfcHJvb2Yoc3RhdGUuaGVhZEhhc2gsIGInazMnLCBiJ3YzJywgcDQpCgogICAgIyBDb3JyZWN0IHByb29mIGJ1dCBpbmNvcnJlY3QgdmFsdWUKICAgIGFzc2VydCBub3QgUHJ1bmluZ1N0YXRlLnZlcmlmeV9zdGF0ZV9wcm9vZihzdGF0ZS5oZWFkSGFzaCwgYidrMicsIGIndjEnLCBwMikKICAgIGFzc2VydCBub3QgUHJ1bmluZ1N0YXRlLnZlcmlmeV9zdGF0ZV9wcm9vZihzdGF0ZS5oZWFkSGFzaCwgYidrNCcsIGIndjInLCBwNCkKCgpkZWYgdGVzdF9zdGF0ZV9wcm9vZl9hbmRfdmVyaWZpY2F0aW9uX3NlcmlhbGl6ZWQoc3RhdGUpOgogICAgZGF0YSA9IHtrLmVuY29kZSgpOiB2LmVuY29kZSgpIGZvciBrLCB2IGluCiAgICAgICAgICAgIFsoJ2sxJywgJ3YxJyksICgnazInLCAndjInKSwgKCdrMzUnLCAndjU1JyksICgnazcwJywgJ3Y5OScpXX0KCiAgICBmb3IgaywgdiBpbiBkYXRhLml0ZW1zKCk6CiAgICAgICAgc3RhdGUuc2V0KGssIHYpCgogICAgcHJvb2ZzID0ge2s6IHN0YXRlLmdlbmVyYXRlX3N0YXRlX3Byb29mKGssIHNlcmlhbGl6ZT1UcnVlKSBmb3IgayBpbiBkYXRhfQoKICAgIGZvciBrLCB2IGluIGRhdGEuaXRlbXMoKToKICAgICAgICBhc3NlcnQgUHJ1bmluZ1N0YXRlLnZlcmlmeV9zdGF0ZV9wcm9vZihzdGF0ZS5oZWFkSGFzaCwgaywgdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9vZnNba10sIHNlcmlhbGl6ZWQ9VHJ1ZSkKCgpkZWYgdGVzdF9zdGF0ZV9wcm9vZl9mb3JfbWlzc2luZ19kYXRhKHN0YXRlKToKICAgIHAxID0gc3RhdGUuZ2VuZXJhdGVfc3RhdGVfcHJvb2YoYidrMScpCiAgICBhc3NlcnQgUHJ1bmluZ1N0YXRlLnZlcmlmeV9zdGF0ZV9wcm9vZihzdGF0ZS5oZWFkSGFzaCwgYidrMScsIE5vbmUsIHAxKQo8fGZpbV9zdWZmaXh8Pgpmcm9tIHN0YXRlLnN0YXRlIGltcG9ydCBTdGF0ZQpmcm9tIHN0b3JhZ2Uua3ZfaW5fbWVtb3J5IGltcG9ydCBLZXlWYWx1ZVN0b3JhZ2VJbk1lbW9yeQpmcm9tIHN0b3JhZ2Uua3Zfc3RvcmVfbGV2ZWxkYiBpbXBvcnQgS2V5VmFsdWVTdG9yYWdlTGV2ZWxkYgpmcm9tIHN0b3JhZ2Uua3Zfc3RvcmVfcm9ja3NkYiBpbXBvcnQgS2V5VmFsdWVTdG9yYWdlUm9ja3NkYgo8fGZpbV9lbmR8Pg=="]
["aeec709ba5e2d5117d38d56d5066595b1481f42d-1","aeec709ba5e2d5117d38d56d5066595b1481f42d","PHxmaW1fcHJlZml4fD4KIiIiIFRoZSA6cHk6bW9kOmAudmFsaWRhdGlvbmAgbW9kdWxlIHByb3ZpZGVzIGEgc2V0IG9mIGNyb3NzIHZhbGlkYXRpb24KYW5kIG1vZGVsIHNlbGVjdGlvbiBtZXRob2RzLiAiIiIKaW1wb3J0IGluc3BlY3QKaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQgb3BlcmF0b3IKaW1wb3J0IHRpbWUKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZQpmcm9tIHR5cGluZyBpbXBvcnQgQ2FsbGFibGUsIERpY3QsIExpc3QsIFVuaW9uLCBBbnkKCmltcG9ydCBudW1weSBhcyBucApmcm9tIHNjaXB5LnN0YXRzLmRpc3RyaWJ1dGlvbnMgaW1wb3J0IHJ2X2Zyb3plbgoKZnJvbSBubndlYXZlciBpbXBvcnQgTk4KZnJvbSBubndlYXZlci5vcHRpbWl6ZXJzIGltcG9ydCBPcHRpbWl6ZXIKCgpkZWYgc3BsaXRzX2dlbmVyYXRvcih4LCB5LCBncm91cHMpOgogICAgIiIiIFNwbGl0IGEgZGF0YSBzZXQgaW50byBwYXJ0aXRpb25zLgoKICAgIDpwYXJhbSB4OiBhIGxpc3Qgb2YgZXhhbXBsZXMuCiAgICA6cGFyYW0geTogYSBsaXN0IHdpdGggdGhlIHRhcmdldCBvdXRwdXQgb2YgZWFjaCBleGFtcGxlLgogICAgOnBhcmFtIGdyb3VwczogdGhlIGxpc3Qgb2YgdGhlIHNpemVzIG9mIGVhY2ggcGFydGl0aW9uICh0aGUgc3VtIG9mIGl0cwogICAgICAgIGVsZW1lbnRzIG11c3QgYmUgYGBsZW4oeClgYC4KICAgICIiIgogICAgYXNzZXJ0IGxlbih4KSA9PSBsZW4oeSkKICAgIGFzc2VydCBzdW0oZ3JvdXBzKSA9PSBsZW4oeCkKCiAgICBiZWdpbiA9IDAKICAgIGZvciBnIGluIGdyb3VwczoKICAgICAgICBlbmQgPSBiZWdpbiArIGcKICAgICAgICB5aWVsZCB4W2JlZ2luOmVuZF0sIHlbYmVnaW46ZW5kXSwgXAogICAgICAgICAgICAgIG5wLmNvbmNhdGVuYXRlKCh4WzpiZWdpbl0sIHhbZW5kOl0pKSwgXAogICAgICAgICAgICAgIG5wLmNvbmNhdGVuYXRlKCh5WzpiZWdpbl0sIHlbZW5kOl0pKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgYmVnaW4gKz0gZwoKCjx8ZmltX2VuZHw+"]
["069b93ebc1459db58d0b80fd159c084e6c241e11-2","069b93ebc1459db58d0b80fd159c084e6c241e11","PHxmaW1fcHJlZml4fD4KI1BJUEUgREFUQQpQaXBlID0nRmxvd2xpbmUnICAgICAgICMgdXNlciBpbnB1dCBmb3IgdHlwZSBvZiBwaXBlbGluZSB0eXBlLCBzZWxlY3QgZWl0aGVyOkZsb3dsaW5lIG9yIFJpc2VyCk1hbnVmYWN0dXJpbmdfdHlwZSA9ICdTTUxTJyAgIyB1c2VyIGlucHV0IGZvciBtYW51ZmF0dXJpbmcgcHJvY2Vzcywgc2VsZWN0IGVpdGgoU01MUyxVT0UsRFNBVyxFUlcpCkQgPSAwLjMxNiAgICAgICAgICAgICAgICAgICAjIG91dHNpZGUgZGlhbWV0ZXIKb3ZhbCA9IDAuMDIgICAgICAgICAgICAgICAgICAjIG92YWxpdHkgCgojTUFURVJJQUwgREFUQQo8fGZpbV9ob2xlfD4KQ0EgPSAwLjAwMyAgICAgICAgICAgICAgICAgICAjIGNvcnJvc2lvbiBBbGxvd2FuY2UsbQoKI0VOVklST05NRU5UQUwgREFUQQpyaG9fc3cgPSAxMDI1ICAgICAgICAgICAgICAgICMgZGVuc2l0eSBvZiBzZWF3YXRlcixLZy9tMwpyaG9fY29udCA9IDcwMCAgICAgICAgICAgICAgICMgY29udGVudCBkZW5zaXR5LEtnL20zCldEX21pbiA9IDE2MDAgICAgICAgICAgICAgICAgIyBtaW5pbXVtIHdhdGVyIGRlcHRoLG0KV0RfbWF4ID0gMTcwMCAgICAgICAgICAgICAgICAjIG1pbmltdW0gd2F0ZXIgZGVwdGgsIG0KZyA9IDkuODEgICAgICAgICAgICAgICAgICAgICAjIGFjY2VsZXJhdGlvbiBkdWUgdG8gZ3Jhdml0eSwgbS9zCiAgICAKI1BSRVNTVVJFICYgVEVNUEVSQVRVUkUgREFUQQpQZCA9IDMxMEU1ICAgICAgICAgICAgICAgICAgICMgZGVzaWduIHByZXNzdXJlIGF0IE1TTCwgUGEKUG1pbiA9IDAgICAgICAgICAgICAgICAgICAgICAjIG1pbmltdW0gcHJlc3N1cmUgZm9yIGNvbGxhcHNlL2J1Y2tsaW5nLCBQYQpUZCA9IDEwMCAgICAgICAgICAgICAgICAgICAgICMgZGVzaWduIHRlbXBlcmF0dXJlLCBvYwoKIyBERVNJR04gRkFDVE9SUwpmX2hzID0gKGxhbWJkYSBmX2hzOiAwLjcyIGlmIFBpcGU9PSdGbG93bGluZScgZWxzZSAwLjUgKSAKZl9ocyA9IGZfaHMoUGlwZSkgICAgICAgICAgICAjIGRlc2lnbiBmYWN0b3IgZm9yIGhvb3Agc3RyZXNzIApmMCA9IDAuNyAgICAgICAgICAgICAgICAgICAgICMgZGVzaWduIGZhY3RvciBmb3IgY29sbGFwc2UgCmZwID0gMC44ICAgICAgICAgICAgICAgICAgICAgIyBkZXNpZ24gZmFjdG9yIGZvciBwcm9wYWdhdGluZyBidWNrbGluZwo8fGZpbV9zdWZmaXh8PgpNYXRlcmlhbF9ncmFkZSA9ICdBUEk1TC1YNjUnICN1c2VyIGlucHV0OiBBUEk1TC1YNjAsIEFQSTVMLVg2NSxBUEk1TC1YNzAsQVBJNUwtWDgwClNNWVMgPSA0NTAqMTAqKjYgICAgICAgICAgICAgIyBzcGVjaWZpZWQgbWluaW11bSB5aWVsZCBzdHJlbmd0aCAsTi9tMgpFcyA9IDIwNzAwMCoxMCoqNiAgICAgICAgICAgICMgeW91bmcgbW9kdWx1cyBhdCByb29tIHRlbXBlcmF0dXJlLE4vbTIKdiA9IDAuMyAgICAgICAgICAgICAgICAgICAgICAjIHBvaXNzb24ncyByYXRpbwo8fGZpbV9lbmR8Pg=="]
["4e0dc45bec5256f262023c4c951fdf97111835bc-1","4e0dc45bec5256f262023c4c951fdf97111835bc","PHxmaW1fcHJlZml4fD4KZnJvbSBjeWRlci5hcGkudXJscyBpbXBvcnQgYXBpcm91dGVyLCB1cmxwYXR0ZXJucwoKZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgc3RhdHVzCmZyb20gcmVzdF9mcmFtZXdvcmsgaW1wb3J0IHZpZXdzZXRzCmZyb20gcmVzdF9mcmFtZXdvcmsucGVybWlzc2lvbnMgaW1wb3J0IElzQXV0aGVudGljYXRlZApmcm9tIHJlc3RfZnJhbWV3b3JrLnJlc3BvbnNlIGltcG9ydCBSZXNwb25zZQpmcm9tIHJlc3RfZnJhbWV3b3JrLmRlY29yYXRvcnMgaW1wb3J0IGRldGFpbF9yb3V0ZSwgbGlzdF9yb3V0ZQpmcm9tIC5tb2RlbHMgaW1wb3J0ICoKZnJvbSAuc2VyaWFsaXplcnMgaW1wb3J0IFByb2plY3RTZXJpYWxpemVyLCBTaW11bGF0aW9uUmVzdWx0U2VyaWFsaXplcgpmcm9tIGRqYW5nby5zaG9ydGN1dHMgaW1wb3J0IGdldF9vYmplY3Rfb3JfNDA0CmZyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgUQoKCmNsYXNzIFByb2plY3RWaWV3U2V0KHZpZXdzZXRzLk1vZGVsVmlld1NldCk6CiAgICBwZXJtaXNzaW9uX2NsYXNzZXMgPSAoSXNBdXRoZW50aWNhdGVkLCkKICAgIHF1ZXJ5c2V0ID0gUHJvamVjdC5vYmplY3RzLmFsbCgpLm9yZGVyX2J5KCctaWQnKQogICAgc2VyaWFsaXplcl9jbGFzcyA9IFByb2plY3RTZXJpYWxpemVyCiAgICBsb29rdXBfZmllbGQgPSAnaWQnCgogICAgZGVmIHVwZGF0ZShzZWxmLCByZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHBhcnRpYWwgPSBrd2FyZ3MucG9wKCdwYXJ0aWFsJywgRmFsc2UpCiAgICAgICAgaW5zdGFuY2UgPSBzZWxmLmdldF9vYmplY3QoKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgaWYgaW5zdGFuY2Uuc3RhdHVzID09ICJTdGFydGVkIiBvciBpbnN0YW5jZS5zdGF0dXMgPT0gIlBlbmRpbmciOgogICAgICAgICAgICByZXR1cm4gUmVzcG9uc2UoeyAiZGV0YWlsIiA6ICJDYW4ndCB1cGRhdGUgYSBwcm9qZWN0IHdoZW4gaXQgaXMgY3VycmVudGx5IGluICIgKyBpbnN0YW5jZS5zdGFnZSB9LCBzdGF0dXM9c3RhdHVzLkhUVFBfNDAxX1VOQVVUSE9SSVpFRCkKICAgICAgICBzZXJpYWxpemVyID0gc2VsZi5nZXRfc2VyaWFsaXplcihpbnN0YW5jZSwgZGF0YT1yZXF1ZXN0LmRhdGEsIHBhcnRpYWw9cGFydGlhbCkKICAgICAgICBzZXJpYWxpemVyLmlzX3ZhbGlkKHJhaXNlX2V4Y2VwdGlvbj1UcnVlKQo8fGZpbV9lbmR8Pg=="]
["aeb4c5d9d807708e2deebb65ed34bc5ed962e233-1","aeb4c5d9d807708e2deebb65ed34bc5ed962e233","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBjbGljawppbXBvcnQgYXN5bmNpbwppbXBvcnQgem1xCmltcG9ydCB6bXEuYXN5bmNpbwppbXBvcnQgbG9nZ2luZwppbXBvcnQgc29ja2V0Cgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gLnV0aWxzIGltcG9ydCBsb2FkX2NvbmZpZwpmcm9tIC51dGlscyBpbXBvcnQgc2hvd19jb25maWcgYXMgX3Nob3dfY29uZmlnCgpIRUFSVEJFQVQgPSBiJ1x4MDAnCjx8ZmltX2VuZHw+"]
["0675e0451326eb1fc0f53bf09010532a3d99eeb8-2","0675e0451326eb1fc0f53bf09010532a3d99eeb8","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBtYXRoCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgTGV2ZW5zaHRlaW4KaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gdHFkbSBpbXBvcnQgdHFkbQpmcm9tIFBJTCBpbXBvcnQgSW1hZ2UKZnJvbSByZGtpdCBpbXBvcnQgQ2hlbSwgRGF0YVN0cnVjdHMKZnJvbSByZGtpdC5DaGVtIGltcG9ydCBNQUNDU2tleXMsIEFsbENoZW0sIHJkbW9sb3BzLCBEcmF3CmZyb20gbmx0ay50cmFuc2xhdGUuYmxldV9zY29yZSBpbXBvcnQgc2VudGVuY2VfYmxldQpmcm9tIHRva2VuaXplcnMgaW1wb3J0IFRva2VuaXplciwgbW9kZWxzLCBwcmVfdG9rZW5pemVycywgZGVjb2RlcnMsIHByb2Nlc3NvcnMKaW1wb3J0IHRvcmNoCmltcG9ydCB0b3JjaHZpc2lvbi50cmFuc2Zvcm1zIGFzIHRyYW5zZm9ybXMKCiIiIgpFdmFsdWF0aW9uIE1ldHJpY3MKMS4gTW9sZWN1bGUgRm91bmQoQmluYXJ5KQoyLiBWYWxpZCBTbWlsZXMoQmluYXJ5KQozLiBFZGl0IERpc3RhbmNlKExldmVuc2h0ZWluIGRpc3RhbmNlKQo0LiBFZGl0IERpc3RhbmNlKEJMRVUxKQo1LiBNb2xlY3VsZSBEaXN0YW5jZSB2aWEgTUFDQ1MKNi4gTW9sZWN1bGUgRGlzdGFuY2UgdmlhIFBhdGgKNy4gTW9sZWN1bGUgZGlzdGFuY2UgdmlhIG1vcmdhbiBmaW5nZXJwcmludAo4LiBJbWFnZSBzaW1pbGFyaXR5CiIiIgoKZGVmIGxvYWRfaW1nMnNtaShmaWxlbmFtZSk6CiAgICBpbWcyc21pID0ge30KICAgIGNvdW50ID0gMAogICAgcHJpbnQoIkxvYWRpbmcgZmlsZSB7fSIuZm9ybWF0KGZpbGVuYW1lKSkKICAgIHdpdGggb3BlbihmaWxlbmFtZSwncicpIGFzIGY6CiAgICAgICAgZm9yIGwgaW4gZjoKICAgICAgICAgICAgbCA9IGwuc3RyaXAoKS5zcGxpdCgnXHQnKQogICAgICAgICAgICBpZiAnLicgaW4gbFswXTogI05vIHNtaWxlcyBnZW5lcmF0ZWQgc28ganVzdCBhbiBleHRlbnNpb24KICAgICAgICAgICAgICAgIGltZzJzbWlbbFswXV0gPSAnTk9ORScKICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGlmIGxbMF0gPT0gJyc6CiAgICAgICAgICAgICAgICAgICAgbFswXSA9ICdOT05FJwogICAgICAgICAgICAgICAgaW1nMnNtaVtsWzFdXSA9IGxbMF0KICAgICAgICAgICAgaWYgbFswXSA9PSAnTk9ORSc6CiAgICAgICAgICAgICAgICBjb3VudCArPSAxCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0cnk6IAogICAgICAgICAgICAgICAgICAgIG1vbCA9IENoZW0uTW9sRnJvbVNtaWxlcyhzbWkpICMgR2VuZXJhdGUgbW9sCiAgICAgICAgICAgICAgICAgICAgaW1nMnNtaVtsWzFdXSA9IENoZW0uTW9sVG9TbWlsZXMobW9sLCBUcnVlKSAjZW5zdXJlIHdlIGdlbmVyYXRlIGNhbm9uaWNhbCBzbWlsZQogICAgICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICAgIHBhc3MKICAgIHByaW50KCJEb25lIGxvYWRpbmcgZmlsZSB7fSIuZm9ybWF0KGZpbGVuYW1lKSkKICAgIHJldHVybiBpbWcyc21pLCBjb3VudAoKZGVmIGNvbnZlcnRfc21pX3RvX21vbChpbWcyc21pLCBmaWxlbmFtZSk6CiAgICBtb2xzID0ge30KICAgIGNvdW50ID0gMAogICAgcHJpbnQoIkNvbnZlcnRpbmcgU01JIGluIHt9IHRvIG1vbCByZXByZXNlbnRhdGlvbiIuZm9ybWF0KGZpbGVuYW1lKSkKICAgIGZvciBpbWcgaW4gaW1nMnNtaToKICAgICAgICBzbWkgPSBpbWcyc21pW2ltZ10KICAgICAgICB0cnk6CiAgICAgICAgICAgIG1vbCA9IENoZW0uTW9sRnJvbVNtaWxlcyhzbWkpICMgR2VuZXJhdGUgbW9sZQogICAgICAgICAgICBjYW5fc21pID0gQ2hlbS5Nb2xUb1NtaWxlcyhtb2wsIFRydWUpICNlbnN1cmUgd2UgZ2VuZXJhdGUgY2Fub25pY2FsIHNtaWxlCiAgICAgICAgICAgIG1vbHNbaW1nXSA9IENoZW0uTW9sRnJvbVNtaWxlcyhjYW5fc21pKSAjZmluYWwgbW9sZWN1bGUgZm9yIGV2YWx1YXRpb24KICAgICAgICAgICAgY291bnQgKz0gMSAjTWFkZSBpdCB0aGlzIGZhciBzbyB2YWxpZCBzbWkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHBhc3MKICAgIHByaW50KCJEb25lIENvbnZlcnRpbmcgU01JIHRvIG1vbCIpCiAgICByZXR1cm4gbW9scywgY291bnQKCmRlZiBsZXZlbnNodGVpbl9ldmFsKHJlZmVyZW5jZXMsIGNhbmRpZGF0ZXMpOgogICAgIiIiCiAgICBTaW1pbGFyaXR5IHZpYSBMZXZlbnNodGVpbiBEaXN0YW5jZQogICAgIiIiCiAgICBwcmludCgiQ2FsY3VsYXRpbmcgTGV2ZW5zaHRlaW4gRGlzdGFuY2UiKQogICAgZGlzdGFuY2VzID0gW10KICAgIGZvciBpbWcgaW4gcmVmZXJlbmNlczoKICAgICAgICBjYW5kaWRhdGVfc21pID0gJycKICAgICAgICBpZiBpbWcgaW4gY2FuZGlkYXRlczoKICAgICAgICAgICAgY2FuZGlkYXRlX3NtaSA9IGNhbmRpZGF0ZXNbaW1nXQogICAgICAgIGRpc3RhbmNlcy5hcHBlbmQoTGV2ZW5zaHRlaW4uZGlzdGFuY2UocmVmZXJlbmNlc1tpbWddLCBjYW5kaWRhdGVfc21pKSkKICAgIHByaW50KCJEb250ZSBDYWxjdWxhdGluZyBMZXZlbnNodGVpbiBEaXN0YW5jZS4iKQogICAgcHJpbnQoIkF2ZXJhZ2UgRGlzdGFuY2U6e30iLmZvcm1hdChyb3VuZChucC5tZWFuKGRpc3RhbmNlcyksNCkpKQogICAgcmV0dXJuIHJvdW5kKG5wLm1lYW4oZGlzdGFuY2VzKSw0KQoKZGVmIGJsZXVfZXZhbChhcmdzLCByZWZlcmVuY2VzLCBjYW5kaWRhdGVzKToKICAgICIiIgogICAgQkxFVS0xIHZpYSB0b2tlbml6ZWQgc21pbGUKICAgICIiIgogICAgcHJpbnQoIkxvYWRpbmcgVG9rZW5pemVyOiB7fS4iLmZvcm1hdChhcmdzLnRva2VuaXplcikpCiAgICB0b2tlbml6ZXIgPSBUb2tlbml6ZXIuZnJvbV9maWxlKGFyZ3MudG9rZW5pemVyKQogICAgcHJpbnQoIlRlc3Rpbmcgd2l0aCBTTUlMRVMgU3RyaW5nOiB7fSIuZm9ybWF0KGFyZ3MudGVzdF9zdHJpbmcpKQogICAgZW5jb2RpbmcgPSB0b2tlbml6ZXIuZW5jb2RlKGFyZ3MudGVzdF9zdHJpbmcpCiAgICBwcmludCgiRW5jb2RlZCBzdHJpbmc6IHt9Ii5mb3JtYXQoZW5jb2RpbmcudG9rZW5zKSkKICAgIGRlY29kZWQgPSB0b2tlbml6ZXIuZGVjb2RlKGVuY29kaW5nLmlkcykKICAgIHByaW50KCJEZWNvZGVkIHN0cmluZzoge30iLmZvcm1hdChkZWNvZGVkKSkKICAgIHByaW50KCJUb2tlbml6ZXIgTG9hZGVkLlxuIENhbGN1bGF0aW5nIEJMRVUtMSIpCiAgICBzY29yZXMgPSBbXQogICAgZm9yIGltZyBpbiByZWZlcmVuY2VzOgogICAgICAgIHNjb3JlID0gMAogICAgICAgIGlmIGltZyBpbiBjYW5kaWRhdGVzOgogICAgICAgICAgICByZWZlcmVuY2UgPSB0b2tlbml6ZXIuZW5jb2RlKHJlZmVyZW5jZXNbaW1nXSkKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gdG9rZW5pemVyLmVuY29kZShjYW5kaWRhdGVzW2ltZ10pCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgc2NvcmUgPSBzZW50ZW5jZV9ibGV1KHJlZmVyZW5jZS50b2tlbnMsIGNhbmRpZGF0ZS50b2tlbnMsd2VpZ2h0cz0oMS4wLCAwLCAwLCAwKSkKICAgICAgICBzY29yZXMuYXBwZW5kKHNjb3JlKQogICAgcHJpbnQoIkRvbmUgY2FsY3VsYXRpbmcgQkxFVS0xLiB7fSBhdmVyYWdlIHNjb3JlIi5mb3JtYXQocm91bmQobnAubWVhbihzY29yZXMpLDQpKSkKICAgIHJldHVybiByb3VuZChucC5tZWFuKHNjb3JlcyksNCkKICAgIApkZWYgbW9yZ2FuX2ZpbmdlcnByaW50X2V2YWx1YXRpb24ocmVmZXJlbmNlcywgY2FuZGlkYXRlcyk6CiAgICAiIiIKICAgIENpcmN1bGFyIGJhc2VkIGZpbmdlcnByaW50cwogICAgaHR0cHM6Ly9kb2kub3JnLzEwLjEwMjEvY2kxMDAwNTB0CiAgICAiIiIKICAgIHByaW50KCJDYWxjdWxhdGluZyBTaW1pbGFyaXR5IHZpYSBNb3JnYW4gYmFzZWQgQ2lyY3VsYXIgRmluZ2VycHJpbnQiKQogICAgc2ltaWxhcml0aWVzID0gW1tdLFtdLFtdLFtdLFtdXSAjIHZhcmlvdXMgc2ltaWxhcml0aWVzOiBUYW5pbW90bywgRGljZSwgQ29zaW5lLCBTb2thbCwgTWNDb25uYXVnaGV5CiAgICBmb3IgaW1nIGluIHJlZmVyZW5jZXM6CiAgICAgICAgc2ltaWxhcml0eSA9IFswLDAsMCwwLDBdCiAgICAgICAgaWYgaW1nIGluIGNhbmRpZGF0ZXM6CiAgICAgICAgICAgIG1vcmdhbl9mcF9jYW5kaWRhdGUgPSBBbGxDaGVtLkdldE1vcmdhbkZpbmdlcnByaW50QXNCaXRWZWN0KGNhbmRpZGF0ZXNbaW1nXSwgMiwgbkJpdHM9MTAyNCkKICAgICAgICAgICAgbW9yZ2FuX2ZwX3JlZmVyZW5jZSA9IEFsbENoZW0uR2V0TW9yZ2FuRmluZ2VycHJpbnRBc0JpdFZlY3QocmVmZXJlbmNlc1tpbWddLCAyLCBuQml0cz0xMDI0KQogICAgICAgICAgICBzaW1pbGFyaXR5WzBdID0gcm91bmQoRGF0YVN0cnVjdHMuVGFuaW1vdG9TaW1pbGFyaXR5KG1vcmdhbl9mcF9yZWZlcmVuY2UsbW9yZ2FuX2ZwX2NhbmRpZGF0ZSksIDQpCiAgICAgICAgICAgIHNpbWlsYXJpdHlbMV0gPSByb3VuZChEYXRhU3RydWN0cy5EaWNlU2ltaWxhcml0eShtb3JnYW5fZnBfcmVmZXJlbmNlLG1vcmdhbl9mcF9jYW5kaWRhdGUpLCA0KQogICAgICAgICAgICBzaW1pbGFyaXR5WzJdID0gcm91bmQoRGF0YVN0cnVjdHMuQ29zaW5lU2ltaWxhcml0eShtb3JnYW5fZnBfcmVmZXJlbmNlLG1vcmdhbl9mcF9jYW5kaWRhdGUpLCA0KQogICAgICAgICAgICBzaW1pbGFyaXR5WzNdID0gcm91bmQoRGF0YVN0cnVjdHMuU29rYWxTaW1pbGFyaXR5KG1vcmdhbl9mcF9yZWZlcmVuY2UsbW9yZ2FuX2ZwX2NhbmRpZGF0ZSksIDQpCiAgICAgICAgICAgIHNpbWlsYXJpdHlbNF0gPSByb3VuZChEYXRhU3RydWN0cy5NY0Nvbm5hdWdoZXlTaW1pbGFyaXR5KG1vcmdhbl9mcF9yZWZlcmVuY2UsbW9yZ2FuX2ZwX2NhbmRpZGF0ZSksIDQpCiAgICAgICAgc2ltaWxhcml0aWVzWzBdLmFwcGVuZChzaW1pbGFyaXR5WzBdKQogICAgICAgIHNpbWlsYXJpdGllc1sxXS5hcHBlbmQoc2ltaWxhcml0eVsxXSkKICAgICAgICBzaW1pbGFyaXRpZXNbMl0uYXBwZW5kKHNpbWlsYXJpdHlbMl0pCiAgICAgICAgc2ltaWxhcml0aWVzWzNdLmFwcGVuZChzaW1pbGFyaXR5WzNdKQogICAgICAgIHNpbWlsYXJpdGllc1s0XS5hcHBlbmQoc2ltaWxhcml0eVs0XSkKICAgIHByaW50KCJEb25lIENhbGN1bGF0aW5nIFNpbWlsYXJpdHkgdmlhICBNb3JnYW4gYmFzZWQgQ2lyY3VsYXIgRmluZ2VycHJpbnQiKQogICAgcHJpbnQoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpCiAgICBwcmludCgiVGFuaW1vdG8gU2ltaWxhcml0eTp7fSIuZm9ybWF0KHJvdW5kKG5wLm1lYW4oc2ltaWxhcml0aWVzWzBdKSw0KSkpCiAgICBwcmludCgiRGljZSBTaW1pbGFyaXR5Ont9Ii5mb3JtYXQocm91bmQobnAubWVhbihzaW1pbGFyaXRpZXNbMV0pLDQpKSkKICAgIHByaW50KCJDb3NpbmUgU2ltaWxhcml0eTp7fSIuZm9ybWF0KHJvdW5kKG5wLm1lYW4oc2ltaWxhcml0aWVzWzJdKSw0KSkpCiAgICBwcmludCgiU29rYWwgU2ltaWxhcml0eTp7fSIuZm9ybWF0KHJvdW5kKG5wLm1lYW4oc2ltaWxhcml0aWVzWzNdKSw0KSkpCiAgICBwcmludCgiTWNDb25uYXVnaGV5IFNpbWlsYXJpdHk6e30iLmZvcm1hdChyb3VuZChucC5tZWFuKHNpbWlsYXJpdGllc1s0XSksNCkpKQogICAgcHJpbnQoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpCiAgICByZXR1cm4gcm91bmQobnAubWVhbihzaW1pbGFyaXRpZXNbMF0pLDQpCgpkZWYgcmRfZmluZ2VycHJpbnRfZXZhbHVhdGlvbihyZWZlcmVuY2VzLCBjYW5kaWRhdGVzKToKICAgICIiIgogICAgRW51bWVyYXRlIGxpbmVhciBGcmFnZW1lbnQKICAgICIiIgogICAgcHJpbnQoIkNhbGN1bGF0aW5nIFNpbWlsYXJpdHkgdmlhIFJERkluZ2VycHJpbnQgUGF0aCBTaW1pbGFyaXR5IikKICAgIHNpbWlsYXJpdGllcyA9IFtbXSxbXSxbXSxbXSxbXV0gIyB2YXJpb3VzIHNpbWlsYXJpdGllczogVGFuaW1vdG8sIERpY2UsIENvc2luZSwgU29rYWwsIE1jQ29ubmF1Z2hleQogICAgZm9yIGltZyBpbiByZWZlcmVuY2VzOgogICAgICAgIHNpbWlsYXJpdHkgPSBbMCwwLDAsMCwwXQogICAgICAgIGlmIGltZyBpbiBjYW5kaWRhdGVzOgogICAgICAgICAgICBjYW5kaWRhdGVfcmRrZmluZ2VycHJpbnQgPSByZG1vbG9wcy5SREtGaW5nZXJwcmludChjYW5kaWRhdGVzW2ltZ10sIGZwU2l6ZT0yMDQ4LCBtaW5QYXRoPTEsIG1heFBhdGg9NykKICAgICAgICAgICAgcmVmZXJlbmNlX3Jka2ZpbmdlcnByaW50ID0gcmRtb2xvcHMuUkRLRmluZ2VycHJpbnQocmVmZXJlbmNlc1tpbWddLCBmcFNpemU9MjA0OCwgbWluUGF0aD0xLCBtYXhQYXRoPTcpCiAgICAgICAgICAgIHNpbWlsYXJpdHlbMF0gPSByb3VuZChEYXRhU3RydWN0cy5UYW5pbW90b1NpbWlsYXJpdHkocmVmZXJlbmNlX3Jka2ZpbmdlcnByaW50LGNhbmRpZGF0ZV9yZGtmaW5nZXJwcmludCksIDQpCiAgICAgICAgICAgIHNpbWlsYXJpdHlbMV0gPSByb3VuZChEYXRhU3RydWN0cy5EaWNlU2ltaWxhcml0eShyZWZlcmVuY2VfcmRrZmluZ2VycHJpbnQsY2FuZGlkYXRlX3Jka2ZpbmdlcnByaW50KSwgNCkKICAgICAgICAgICAgc2ltaWxhcml0eVsyXSA9IHJvdW5kKERhdGFTdHJ1Y3RzLkNvc2luZVNpbWlsYXJpdHkocmVmZXJlbmNlX3Jka2ZpbmdlcnByaW50LGNhbmRpZGF0ZV9yZGtmaW5nZXJwcmludCksIDQpCiAgICAgICAgICAgIHNpbWlsYXJpdHlbM10gPSByb3VuZChEYXRhU3RydWN0cy5Tb2thbFNpbWlsYXJpdHkocmVmZXJlbmNlX3Jka2ZpbmdlcnByaW50LGNhbmRpZGF0ZV9yZGtmaW5nZXJwcmludCksIDQpCiAgICAgICAgICAgIHNpbWlsYXJpdHlbNF0gPSByb3VuZChEYXRhU3RydWN0cy5NY0Nvbm5hdWdoZXlTaW1pbGFyaXR5KHJlZmVyZW5jZV9yZGtmaW5nZXJwcmludCxjYW5kaWRhdGVfcmRrZmluZ2VycHJpbnQpLCA0KQogICAgICAgIHNpbWlsYXJpdGllc1swXS5hcHBlbmQoc2ltaWxhcml0eVswXSkKICAgICAgICBzaW1pbGFyaXRpZXNbMV0uYXBwZW5kKHNpbWlsYXJpdHlbMV0pCiAgICAgICAgc2ltaWxhcml0aWVzWzJdLmFwcGVuZChzaW1pbGFyaXR5WzJdKQogICAgICAgIHNpbWlsYXJpdGllc1szXS5hcHBlbmQoc2ltaWxhcml0eVszXSkKICAgICAgICBzaW1pbGFyaXRpZXNbNF0uYXBwZW5kKHNpbWlsYXJpdHlbNF0pCiAgICBwcmludCgiRG9uZSBDYWxjdWxhdGluZyBTaW1pbGFyaXR5IHZpYSBSREZJbmdlcnByaW50IFBhdGggU2ltaWxhcml0eSIpCiAgICBwcmludCgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIikKICAgIHByaW50KCJUYW5pbW90byBTaW1pbGFyaXR5Ont9Ii5mb3JtYXQocm91bmQobnAubWVhbihzaW1pbGFyaXRpZXNbMF0pLDQpKSkKICAgIHByaW50KCJEaWNlIFNpbWlsYXJpdHk6e30iLmZvcm1hdChyb3VuZChucC5tZWFuKHNpbWlsYXJpdGllc1sxXSksNCkpKQogICAgcHJpbnQoIkNvc2luZSBTaW1pbGFyaXR5Ont9Ii5mb3JtYXQocm91bmQobnAubWVhbihzaW1pbGFyaXRpZXNbMl0pLDQpKSkKICAgIHByaW50KCJTb2thbCBTaW1pbGFyaXR5Ont9Ii5mb3JtYXQocm91bmQobnAubWVhbihzaW1pbGFyaXRpZXNbM10pLDQpKSkKICAgIHByaW50KCJNY0Nvbm5hdWdoZXkgU2ltaWxhcml0eTp7fSIuZm9ybWF0KHJvdW5kKG5wLm1lYW4oc2ltaWxhcml0aWVzWzRdKSw0KSkpCiAgICBwcmludCgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIikKICAgIHJldHVybiByb3VuZChucC5tZWFuKHNpbWlsYXJpdGllc1swXSksNCkKCmRlZiBtYWFjc19maW5nZXJwcmludF9ldmFsdWF0aW9uKHJlZmVyZW5jZXMsIGNhbmRpZGF0ZXMpOgogICAgIiIiIAogICAgR2VuZXJhdGUgU2ltaWxhcml0eSB2aWEgTUFDQ1NLZXlzCiAgICAiIiIKICAgIHByaW50KCJDYWxjdWxhdGluZyBTaW1pbGFyaXR5IHZpYSBNQUNDUyBLZXlzIikKICAgIHNpbWlsYXJpdGllcyA9IFtbXSxbXSxbXSxbXSxbXV0gIyB2YXJpb3VzIHNpbWlsYXJpdGllczogVGFuaW1vdG8sIERpY2UsIENvc2luZSwgU29rYWwsIE1jQ29ubmF1Z2hleQogICAgZm9yIGltZyBpbiByZWZlcmVuY2VzOgogICAgICAgIHNpbWlsYXJpdHkgPSBbMCwwLDAsMCwwXQogICAgICAgIGlmIGltZyBpbiBjYW5kaWRhdGVzOgogICAgICAgICAgICBjYW5kaWRhdGVfbWFjY3MgPSBNQUNDU2tleXMuR2VuTUFDQ1NLZXlzKGNhbmRpZGF0ZXNbaW1nXSkKICAgICAgICAgICAgcmVmZXJlbmNlX21hY2NzID0gTUFDQ1NrZXlzLkdlbk1BQ0NTS2V5cyhyZWZlcmVuY2VzW2ltZ10pCiAgICAgICAgICAgIHNpbWlsYXJpdHlbMF0gPSByb3VuZChEYXRhU3RydWN0cy5UYW5pbW90b1NpbWlsYXJpdHkocmVmZXJlbmNlX21hY2NzLGNhbmRpZGF0ZV9tYWNjcyksIDQpCiAgICAgICAgICAgIHNpbWlsYXJpdHlbMV0gPSByb3VuZChEYXRhU3RydWN0cy5EaWNlU2ltaWxhcml0eShyZWZlcmVuY2VfbWFjY3MsY2FuZGlkYXRlX21hY2NzKSwgNCkKICAgICAgICAgICAgc2ltaWxhcml0eVsyXSA9IHJvdW5kKERhdGFTdHJ1Y3RzLkNvc2luZVNpbWlsYXJpdHkocmVmZXJlbmNlX21hY2NzLGNhbmRpZGF0ZV9tYWNjcyksIDQpCiAgICAgICAgICAgIHNpbWlsYXJpdHlbM10gPSByb3VuZChEYXRhU3RydWN0cy5Tb2thbFNpbWlsYXJpdHkocmVmZXJlbmNlX21hY2NzLGNhbmRpZGF0ZV9tYWNjcyksIDQpCiAgICAgICAgICAgIHNpbWlsYXJpdHlbNF0gPSByb3VuZChEYXRhU3RydWN0cy5NY0Nvbm5hdWdoZXlTaW1pbGFyaXR5KHJlZmVyZW5jZV9tYWNjcyxjYW5kaWRhdGVfbWFjY3MpLCA0KQogICAgICAgIHNpbWlsYXJpdGllc1swXS5hcHBlbmQoc2ltaWxhcml0eVswXSkKICAgICAgICBzaW1pbGFyaXRpZXNbMV0uYXBwZW5kKHNpbWlsYXJpdHlbMV0pCiAgICAgICAgc2ltaWxhcml0aWVzWzJdLmFwcGVuZChzaW1pbGFyaXR5WzJdKQogICAgICAgIHNpbWlsYXJpdGllc1szXS5hcHBlbmQoc2ltaWxhcml0eVszXSkKICAgICAgICBzaW1pbGFyaXRpZXNbNF0uYXBwZW5kKHNpbWlsYXJpdHlbNF0pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHByaW50KCJEb25lIENhbGN1bGF0aW5nIFNpbWlsYXJpdHkgdmlhIE1BQ0NTIEtleXMiKQogICAgcHJpbnQoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpCiAgICBwcmludCgiVGFuaW1vdG8gU2ltaWxhcml0eTp7fSIuZm9ybWF0KHJvdW5kKG5wLm1lYW4oc2ltaWxhcml0aWVzWzBdKSw0KSkpCiAgICBwcmludCgiRGljZSBTaW1pbGFyaXR5Ont9Ii5mb3JtYXQocm91bmQobnAubWVhbihzaW1pbGFyaXRpZXNbMV0pLDQpKSkKPHxmaW1fZW5kfD4="]
["2343a1a07c3243b0c315906aa4933b01461dd91d-3","2343a1a07c3243b0c315906aa4933b01461dd91d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdApmcm9tIGNvcmUuY29udGV4dF9tb2RpZmllcnMgaW1wb3J0IFJlZ2lzdHJ5CgoKZGVmIHRlc3RfcmVnaXN0ZXJfbm9uX2NhbGxhYmxlKCk6CiAgICByZWdpc3RyeSA9IFJlZ2lzdHJ5KCkKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgIGFzc2VydCByZWdpc3RyeS5yZWdpc3RlcignVGVzdFBhZ2UnLCAnZm9vJykKCgpkZWYgdGVzdF9yZWdpc3Rlcl9kaXJlY3QoKToKICAgIHJlZ2lzdHJ5ID0gUmVnaXN0cnkoKQoKICAgIGRlZiBleGFtcGxlX21vZGlmaWVyKGNvbnRleHQsIHJlcXVlc3QpOgogICAgICAgIHJldHVybgoKICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdUZXN0UGFnZScsIGV4YW1wbGVfbW9kaWZpZXIpCgogICAgIyBDb25maXJtIGJvdGggbWV0aG9kcyB3ZXJlIGFkZGVkIHRvIHRoZSByZWdpc3RyeQogICAgbW9kaWZpZXJzID0gcmVnaXN0cnkuZ2V0X2Zvcl9wYWdlX3R5cGUoJ1Rlc3RQYWdlJykKICAgIGFzc2VydCBsZW4obW9kaWZpZXJzKSA9PSAxCiAgICBhc3NlcnQgbW9kaWZpZXJzWzBdID09IGV4YW1wbGVfbW9kaWZpZXIKCgpkZWYgdGVzdF9yZWdpc3Rlcl9hc19kZWNvcmF0b3IoKToKICAgIHJlZ2lzdHJ5ID0gUmVnaXN0cnkoKQoKICAgIEByZWdpc3RyeS5yZWdpc3RlcignVGVzdFBhZ2UnKQogICAgZGVmIGV4YW1wbGVfbW9kaWZpZXIoY29udGV4dCwgcmVxdWVzdCk6CiAgICAgICAgcmV0dXJuCgogICAgIyBDb25maXJtIG1ldGhvZCB3YXMgYWRkZWQgdG8gdGhlIHJlZ2lzdHJ5CiAgICBtb2RpZmllcnMgPSByZWdpc3RyeS5nZXRfZm9yX3BhZ2VfdHlwZSgnVGVzdFBhZ2UnKQogICAgYXNzZXJ0IGxlbihtb2RpZmllcnMpID09IDEKICAgIGFzc2VydCBtb2RpZmllcnNbMF0gPT0gZXhhbXBsZV9tb2RpZmllcgoKCmRlZiB0ZXN0X3JlZ2lzdGVyX211bHRpcGxlX3RpbWVzKCk6CiAgICByZWdpc3RyeSA9IFJlZ2lzdHJ5KCkKCiAgICBkZWYgZXhhbXBsZV9tb2RpZmllcihjb250ZXh0LCByZXF1ZXN0KToKICAgICAgICByZXR1cm4KCiAgICByZWdpc3RyeS5yZWdpc3RlcignVGVzdFBhZ2UnLCBleGFtcGxlX21vZGlmaWVyKQogICAgcmVnaXN0cnkucmVnaXN0ZXIoJ1Rlc3RQYWdlJywgZXhhbXBsZV9tb2RpZmllcikKICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdUZXN0UGFnZScsIGV4YW1wbGVfbW9kaWZpZXIpCgogICAgIyBDb25maXJtIG1ldGhvZCB3YXMgb25seSByZWdpc3RlcmVkIG9uY2UKICAgIG1vZGlmaWVycyA9IHJlZ2lzdHJ5LmdldF9mb3JfcGFnZV90eXBlKCdUZXN0UGFnZScpCiAgICBhc3NlcnQgbGVuKG1vZGlmaWVycykgPT0gMQogICAgYXNzZXJ0IG1vZGlmaWVyc1swXSA9PSBleGFtcGxlX21vZGlmaWVyCgoKZGVmIHRlc3RfcmVnaXN0ZXJfZm9yX211bHRpcGxlX3BhZ2VfdHlwZXNfYXRfb25jZSgpOgogICAgcmVnaXN0cnkgPSBSZWdpc3RyeSgpCiAgICBwYWdlX3R5cGVzID0gWydBcnRpY2xlUGFnZScsICdFdmVudFBhZ2UnLCAnVmVudWVQYWdlJ10KPHxmaW1faG9sZXw+CiAgICByZWdpc3RyeS5yZWdpc3RlcihwYWdlX3R5cGVzLCBleGFtcGxlX21vZGlmaWVyKQoKICAgICMgQ29uZmlybSB0aGUgbWV0aG9kIHdhcyBhZGRlZCB0byB0aGUgcmVnaXN0cnkgZm9yIGFsbCBwYWdlIHR5cGVzCiAgICBmb3IgcGFnZV90eXBlIGluIHBhZ2VfdHlwZXM6CiAgICAgICAgbW9kaWZpZXJzID0gcmVnaXN0cnkuZ2V0X2Zvcl9wYWdlX3R5cGUocGFnZV90eXBlKQogICAgICAgIGFzc2VydCBsZW4obW9kaWZpZXJzKSA9PSAxCiAgICAgICAgYXNzZXJ0IG1vZGlmaWVyc1swXSA9PSBleGFtcGxlX21vZGlmaWVyCgoKZGVmIHRlc3RfdW5yZWdpc3RlcigpOgogICAgcmVnaXN0cnkgPSBSZWdpc3RyeSgpCiAgICBwYWdlX3R5cGVzID0gWydBcnRpY2xlUGFnZScsICdFdmVudFBhZ2UnLCAnVmVudWVQYWdlJ10KCiAgICBkZWYgZXhhbXBsZV9tb2RpZmllcl9vbmUoY29udGV4dCwgcmVxdWVzdCk6CiAgICAgICAgcmV0dXJuCgogICAgZGVmIGV4YW1wbGVfbW9kaWZpZXJfdHdvKGNvbnRleHQsIHJlcXVlc3QpOgogICAgICAgIHJldHVybgoKICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKHBhZ2VfdHlwZXMsIGV4YW1wbGVfbW9kaWZpZXJfb25lKQogICAgcmVnaXN0cnkucmVnaXN0ZXIocGFnZV90eXBlcywgZXhhbXBsZV9tb2RpZmllcl90d28pCgogICAgIyBDaGVjayB0aGUgYWJvdmUgcmVnaXN0cnkgd29ya2VkIGZvciBib3RoIG1ldGhvZHMKICAgIGZvciBwYWdlX3R5cGUgaW4gcGFnZV90eXBlczoKICAgICAgICBtb2RpZmllcnMgPSByZWdpc3RyeS5nZXRfZm9yX3BhZ2VfdHlwZShwYWdlX3R5cGUpCiAgICAgICAgYXNzZXJ0IGxlbihtb2RpZmllcnMpID09IDIKICAgICAgICBhc3NlcnQgbW9kaWZpZXJzWzBdID09IGV4YW1wbGVfbW9kaWZpZXJfb25lCiAgICAgICAgYXNzZXJ0IG1vZGlmaWVyc1sxXSA9PSBleGFtcGxlX21vZGlmaWVyX3R3bwoKICAgICMgTm93IHVucmVnaXN0ZXIgb25lIG9mIHRoZSBhYm92ZSBtb2RpZmllcnMKICAgIHJlZ2lzdHJ5LnVucmVnaXN0ZXIoZXhhbXBsZV9tb2RpZmllcl9vbmUpCgogICAgIyBPbmx5ICdleGFtcGxlX21vZGlmaWVyX3R3bycgc2hvdWxkIG5vdyBiZSByZWdpc3RlcmVkCiAgICBmb3IgcGFnZV90eXBlIGluIHBhZ2VfdHlwZXM6CiAgICAgICAgbW9kaWZpZXJzID0gcmVnaXN0cnkuZ2V0X2Zvcl9wYWdlX3R5cGUocGFnZV90eXBlKQogICAgICAgIGFzc2VydCBsZW4obW9kaWZpZXJzKSA9PSAxCiAgICAgICAgYXNzZXJ0IG1vZGlmaWVyc1swXSA9PSBleGFtcGxlX21vZGlmaWVyX3R3bwoKICAgICMgVW5yZWdpc3RlciBzYW1lIG1ldGhvZCBhZ2FpbiB0byBzaG93IHRoYXQgbm90aGluZyBiYWQgaGFwcGVucwogICAgcmVnaXN0cnkudW5yZWdpc3RlcihleGFtcGxlX21vZGlmaWVyX29uZSkKCiAgICAjIE9ubHkgJ2V4YW1wbGVfbW9kaWZpZXJfdHdvJyBzaG91bGQgbm93IGJlIHJlZ2lzdGVyZWQKICAgIGZvciBwYWdlX3R5cGUgaW4gcGFnZV90eXBlczoKICAgICAgICBtb2RpZmllcnMgPSByZWdpc3RyeS5nZXRfZm9yX3BhZ2VfdHlwZShwYWdlX3R5cGUpCiAgICAgICAgYXNzZXJ0IGxlbihtb2RpZmllcnMpID09IDEKICAgICAgICBhc3NlcnQgbW9kaWZpZXJzWzBdID09IGV4YW1wbGVfbW9kaWZpZXJfdHdvCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIGV4YW1wbGVfbW9kaWZpZXIoY29udGV4dCwgcmVxdWVzdCk6CiAgICAgICAgcmV0dXJuCgo8fGZpbV9lbmR8Pg=="]
["c614690b8fada4d2881d171bb592dc627e184a0a-2","c614690b8fada4d2881d171bb592dc627e184a0a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IHB5dGVzdAoKZnJvbSBoY2xfbW9kZWwudHJhbnNmb3JtZXJzLmFkZF9wZXJpb2RpY19zcGxpbmVzIGltcG9ydCBBZGRQZXJpb2RpY1NwbGluZXMKCgpjbGFzcyBUZXN0QWRkUGVyaW9kaWNTcGxpbmVzOgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGdldF94cmVnX2V4YW1wbGUoKSAtPiBwZC5EYXRhRnJhbWU6CiAgICAgICAgcmV0dXJuIHBkLkRhdGFGcmFtZSgKICAgICAgICAgICAgeyJ4MSI6IG5wLnJhbmRvbS5ub3JtYWwoMCwgMSwgNTMgKiAzKX0sCiAgICAgICAgICAgIGluZGV4PXBkLmRhdGVfcmFuZ2Uoc3RhcnQ9IjIwMTUtMDEtMDEiLCBmcmVxPSI3IEQiLCBwZXJpb2RzPTUzICogMyksCiAgICAgICAgKQoKICAgIGRlZiB0ZXN0X2FkZF9wZXJpb2RpY19zcGxpbmVzKHNlbGYpIC0+IE5vbmU6CiAgICAgICAgeHJlZyA9IHNlbGYuZ2V0X3hyZWdfZXhhbXBsZSgpCgogICAgICAgIGRlZ3JlZXNfb2ZfZnJlZWRvbSA9IDMKPHxmaW1faG9sZXw+CiAgICAgICAgYXNzZXJ0IG5wLnN1bShkZl9kZWZhdWx0LmlzbnVsbCgpKS5zdW0oKSA9PSAwCgogICAgICAgIGNhbF90cmFuc2Zvcm1lciA9IEFkZFBlcmlvZGljU3BsaW5lcyhkZWdyZWVzX29mX2ZyZWVkb209ZGVncmVlc19vZl9mcmVlZG9tLCBpbnB1dF9sZXZlbD0iaXNvd2VlayIpCiAgICAgICAgZGYgPSBjYWxfdHJhbnNmb3JtZXIudHJhbnNmb3JtKFg9eHJlZykKCiAgICAgICAgYXNzZXJ0IGRmLnNoYXBlID09ICh4cmVnLnNoYXBlWzBdLCBkZWdyZWVzX29mX2ZyZWVkb20gKyB4cmVnLnNoYXBlWzFdKQogICAgICAgIGFzc2VydCBucC5zdW0oZGYuaXNudWxsKCkpLnN1bSgpID09IDAKICAgICAgICBwZC50ZXN0aW5nLmFzc2VydF9mcmFtZV9lcXVhbChkZiwgZGZfZGVmYXVsdCkKCiAgICAgICAgY2FsX3RyYW5zZm9ybWVyID0gQWRkUGVyaW9kaWNTcGxpbmVzKGRlZ3JlZXNfb2ZfZnJlZWRvbT1kZWdyZWVzX29mX2ZyZWVkb20sIGlucHV0X2xldmVsPSJtb250aCIpCiAgICAgICAgZGYgPSBjYWxfdHJhbnNmb3JtZXIudHJhbnNmb3JtKFg9eHJlZykKCiAgICAgICAgYXNzZXJ0IGRmLnNoYXBlID09ICh4cmVnLnNoYXBlWzBdLCBkZWdyZWVzX29mX2ZyZWVkb20gKyB4cmVnLnNoYXBlWzFdKQogICAgICAgIGFzc2VydCBucC5zdW0oZGYuaXNudWxsKCkpLnN1bSgpID09IDAKCiAgICAgICAgY2FsX3RyYW5zZm9ybWVyID0gQWRkUGVyaW9kaWNTcGxpbmVzKGRlZ3JlZXNfb2ZfZnJlZWRvbT1kZWdyZWVzX29mX2ZyZWVkb20sIGlucHV0X2xldmVsPSJkYXkiKQogICAgICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgY2FsX3RyYW5zZm9ybWVyLnRyYW5zZm9ybShYPXhyZWcpCgogICAgICAgIHdyb25nX2lucHV0X2xldmVsID0gIndyb25nX2lucHV0X2xldmVsIgogICAgICAgIGNhbF90cmFuc2Zvcm1lciA9IEFkZFBlcmlvZGljU3BsaW5lcyhkZWdyZWVzX29mX2ZyZWVkb209ZGVncmVlc19vZl9mcmVlZG9tLCBpbnB1dF9sZXZlbD13cm9uZ19pbnB1dF9sZXZlbCkKICAgICAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVmFsdWVFcnJvcikgYXMgZXJyb3I6CiAgICAgICAgICAgIGNhbF90cmFuc2Zvcm1lci50cmFuc2Zvcm0oWD14cmVnKQoKICAgICAgICBhc3NlcnQgd3JvbmdfaW5wdXRfbGV2ZWwgaW4gc3RyKGVycm9yKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGNhbF90cmFuc2Zvcm1lciA9IEFkZFBlcmlvZGljU3BsaW5lcyhkZWdyZWVzX29mX2ZyZWVkb209ZGVncmVlc19vZl9mcmVlZG9tKQogICAgICAgIGRmX2RlZmF1bHQgPSBjYWxfdHJhbnNmb3JtZXIudHJhbnNmb3JtKFg9eHJlZykKCiAgICAgICAgYXNzZXJ0IGRmX2RlZmF1bHQuc2hhcGUgPT0gKHhyZWcuc2hhcGVbMF0sIGRlZ3JlZXNfb2ZfZnJlZWRvbSArIHhyZWcuc2hhcGVbMV0pCjx8ZmltX2VuZHw+"]
["7064a62a30134c2a89306a92fb25c17da8015935-1","7064a62a30134c2a89306a92fb25c17da8015935","PHxmaW1fcHJlZml4fD4KIyBBcnJheTsgQmFja3RyYWNraW5nCjx8ZmltX2hvbGV8PgojCiMgTm90ZToKIwojIEFsbCBudW1iZXJzIChpbmNsdWRpbmcgdGFyZ2V0KSB3aWxsIGJlIHBvc2l0aXZlIGludGVnZXJzLgojIFRoZSBzb2x1dGlvbiBzZXQgbXVzdCBub3QgY29udGFpbiBkdXBsaWNhdGUgY29tYmluYXRpb25zLgojIEV4YW1wbGUgMToKIwojIElucHV0OiBjYW5kaWRhdGVzID0gWzIsMyw2LDddLCB0YXJnZXQgPSA3LAojIEEgc29sdXRpb24gc2V0IGlzOgojIFsKIyAgIFs3XSwKIyAgIFsyLDIsM10KIyBdCiMgRXhhbXBsZSAyOgojCiMgSW5wdXQ6IGNhbmRpZGF0ZXMgPSBbMiwzLDVdLCB0YXJnZXQgPSA4LAojIEEgc29sdXRpb24gc2V0IGlzOgojIFsKIyAgIFsyLDIsMiwyXSwKIyAgIFsyLDMsM10sCiMgICBbMyw1XQojIF0KCmNsYXNzIFNvbHV0aW9uKG9iamVjdCk6CiAgICBkZWYgY29tYmluYXRpb25TdW0oc2VsZiwgY2FuZGlkYXRlcywgdGFyZ2V0KToKICAgICAgICAiIiIKICAgICAgICA6dHlwZSBjYW5kaWRhdGVzOiBMaXN0W2ludF0KICAgICAgICA6dHlwZSB0YXJnZXQ6IGludAogICAgICAgIDpydHlwZTogTGlzdFtMaXN0W2ludF1dCiAgICAgICAgIiIiCiAgICAgICAgcmVzID0gW10KICAgICAgICBjYW5kaWRhdGVzLnNvcnQoKQogICAgICAgIHNlbGYuZGZzKGNhbmRpZGF0ZXMsIHRhcmdldCwgMCwgW10sIHJlcykKICAgICAgICByZXR1cm4gcmVzCgogICAgZGVmIGRmcyhzZWxmLCBudW1zLCB0YXJnZXQsIGluZGV4LCBwYXRoLCByZXMpOgogICAgICAgIGlmIHRhcmdldCA8IDA6CiAgICAgICAgICAgIHJldHVybgogICAgICAgIGlmIHRhcmdldCA9PSAwOgogICAgICAgICAgICByZXMuYXBwZW5kKHBhdGgpCiAgICAgICAgICAgIHJldHVybgogICAgICAgIGZvciBpIGluIHJhbmdlKGluZGV4LCBsZW4obnVtcykpOgogICAgICAgICAgICBzZWxmLmRmcyhudW1zLCB0YXJnZXQtbnVtc1tpXSwgaSwgcGF0aCtbbnVtc1tpXV0sIHJlcykKPHxmaW1fc3VmZml4fD4KCiMgR2l2ZW4gYSBzZXQgb2YgY2FuZGlkYXRlIG51bWJlcnMgKGNhbmRpZGF0ZXMpICh3aXRob3V0IGR1cGxpY2F0ZXMpIGFuZCBhIHRhcmdldCBudW1iZXIgKHRhcmdldCksIGZpbmQgYWxsIHVuaXF1ZSBjb21iaW5hdGlvbnMgaW4gY2FuZGlkYXRlcyB3aGVyZSB0aGUgY2FuZGlkYXRlIG51bWJlcnMgc3VtcyB0byB0YXJnZXQuCiMKIyBUaGUgc2FtZSByZXBlYXRlZCBudW1iZXIgbWF5IGJlIGNob3NlbiBmcm9tIGNhbmRpZGF0ZXMgdW5saW1pdGVkIG51bWJlciBvZiB0aW1lcy4KPHxmaW1fZW5kfD4="]
["c655fa2bf721f79f23c0ba3b9ba5a12bffa57bfc-3","c655fa2bf721f79f23c0ba3b9ba5a12bffa57bfc","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRpc2NvcmQKaW1wb3J0IGluZmxlY3QKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHJhbmRvbQppbXBvcnQgcmUKCmZyb20gYXJncGFyc2VyIGltcG9ydCBwYXJzZXIsIHN1YnBhcnNlcnMKZnJvbSBjYXJkcyBpbXBvcnQgQ2FyZERlY2ssIFRhYmxldG9wCmZyb20gY29uZmlnIGltcG9ydCBkaXNjb3JkX2JvdF90b2tlbgpmcm9tIG91dHB1dCBpbXBvcnQgT3V0cHV0CmZyb20gcGxheWVyIGltcG9ydCBQbGF5ZXIKCmltcG9ydCBjb2RleC5jYXRhbgppbXBvcnQgY29kZXguc3RhbmRhcmQKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcGx1ID0gaW5mbGVjdC5lbmdpbmUoKQpzaG9ydGN1dF9yZWdleCA9IHJlLmNvbXBpbGUociJeJVxzKig/UDxhcmdzPi4qKSIsIHJlLklHTk9SRUNBU0UpCmRpY2Vfcm9sbF9yZWdleCA9IHJlLmNvbXBpbGUociJeKD9QPGNvdW50PlxkKilkKD9QPHNpZGVzPlxkKykkIiwgcmUuSUdOT1JFQ0FTRSkKCjx8ZmltX2VuZHw+"]
["2316626ca882b990eb0ce91ff6ca1457aff446f3-5","2316626ca882b990eb0ce91ff6ca1457aff446f3","PHxmaW1fcHJlZml4fD4KIiIiIHRoaXMgc2NyaXB0IGV4dHJhY3RzIGEgbGlzdCBvZiBjdXN0b20gZGltZW5zaW9ucyBpbiBhIEdvb2dsZSBBbmFseXRpY3MgcHJvcGVydHkgCnVzaW5nIHRoZSBNYW5hZ2VtZW50IEFQSSBhbmQgZXhwb3J0cyB0byBDU1YKIiIiCgppbXBvcnQgY3N2CmltcG9ydCBvcy5wYXRoCmltcG9ydCByZQppbXBvcnQgc3lzCmltcG9ydCBhcmdwYXJzZQpmcm9tIGNsaWNrIGltcG9ydCBwcm9tcHQKZnJvbSBnb29nbGVhcGljbGllbnQuZGlzY292ZXJ5IGltcG9ydCBidWlsZApmcm9tIGdvb2dsZV9hdXRoX29hdXRobGliLmZsb3cgaW1wb3J0IEluc3RhbGxlZEFwcEZsb3cKZnJvbSBnb29nbGUuYXV0aC50cmFuc3BvcnQucmVxdWVzdHMgaW1wb3J0IFJlcXVlc3QKZnJvbSBnb29nbGUub2F1dGgyLmNyZWRlbnRpYWxzIGltcG9ydCBDcmVkZW50aWFscwpmcm9tIHVybGxpYi5lcnJvciBpbXBvcnQgSFRUUEVycm9yCgojIERlZmluZSB0aGUgYXV0aCBzY29wZXMgdG8gcmVxdWVzdC4KIyBJZiBtb2RpZnlpbmcgdGhlc2Ugc2NvcGVzLCBkZWxldGUgdGhlIGZpbGUgdG9rZW4uanNvbi4KU0NPUEVTID0gWwogICdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9hdXRoL2FuYWx5dGljcy5yZWFkb25seScsCiAgJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvYW5hbHl0aWNzLmVkaXQnCl0KCmRlZiBtYWluKCk6CiAgY3JlZF9maWxlICA9ICJ0b2tlbnMvY3JlZGVudGlhbHMuanNvbiIKICB0b2tlbl9maWxlID0gInRva2Vucy9nYV9tYW5hZ2VtZW50Lmpzb24iCiAgY3JlZHMgPSBOb25lCiAgIyBUaGUgZmlsZSB0b2tlbi5qc29uIHN0b3JlcyB0aGUgdXNlcidzIGFjY2VzcyBhbmQgcmVmcmVzaCB0b2tlbnMsIGFuZCBpcwogICMgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGF1dGhvcml6YXRpb24gZmxvdyBjb21wbGV0ZXMgZm9yIHRoZSBmaXJzdAogICMgdGltZS4KICBpZiBvcy5wYXRoLmV4aXN0cyhjcmVkX2ZpbGUpOgogICAgIyBBbGwgZ29vZAogICAgcHJpbnQoIkNyZWRlbnRpYWxzIGZpbGUgZm91bmQuIikKICBlbHNlOgogICAgcHJpbnQgKCJObyBjcmVkZW50aWFscyBmaWxlIGZvdW5kOyBjcmVhdGUgb25lIGJ5IHZpc2l0aW5nIHRoZSBHQ1AgY29uc29sZSBhbmQgY3JlYXRpbmcgYSBuZXcgcHJvamVjdC5cblZpc2l0IGh0dHBzOi8vY29uc29sZS5jbG91ZC5nb29nbGUuY29tL2FwaXMvY3JlZGVudGlhbHMgdG8gY3JlYXRlIGEgbmV3IE9BdXRoIGtleSBhbmQgc2F2ZSBpdCBsb2NhbGx5IGFzIHRva2Vucy9jcmVkZW50aWFscy5qc29uIikKPHxmaW1faG9sZXw+CiAgaWYgb3MucGF0aC5leGlzdHModG9rZW5fZmlsZSk6CiAgICAgIGNyZWRzID0gQ3JlZGVudGlhbHMuZnJvbV9hdXRob3JpemVkX3VzZXJfZmlsZSh0b2tlbl9maWxlLCBTQ09QRVMpCiAgIyBJZiB0aGVyZSBhcmUgbm8gKHZhbGlkKSBjcmVkZW50aWFscyBhdmFpbGFibGUsIGxldCB0aGUgdXNlciBsb2cgaW4uCiAgaWYgbm90IGNyZWRzIG9yIG5vdCBjcmVkcy52YWxpZDoKICAgIHByaW50ICgiUmVmcmVzaGluZyBjcmVkZW50aWFscyBmb3IgcmVxdWlyZWQgc2NvcGVzIikKICAgIGlmIGNyZWRzIGFuZCBjcmVkcy5leHBpcmVkIGFuZCBjcmVkcy5yZWZyZXNoX3Rva2VuOgogICAgICAgIGNyZWRzLnJlZnJlc2goUmVxdWVzdCgpKQogICAgZWxzZToKICAgICAgICBmbG93ID0gSW5zdGFsbGVkQXBwRmxvdy5mcm9tX2NsaWVudF9zZWNyZXRzX2ZpbGUoCiAgICAgICAgICAgIGNyZWRfZmlsZSwgU0NPUEVTKQogICAgICAgIGNyZWRzID0gZmxvdy5ydW5fbG9jYWxfc2VydmVyKHBvcnQ9MCkKICAgICMgU2F2ZSB0aGUgY3JlZGVudGlhbHMgZm9yIHRoZSBuZXh0IHJ1bgogICAgd2l0aCBvcGVuKHRva2VuX2ZpbGUsICd3JykgYXMgdG9rZW46CiAgICAgICAgdG9rZW4ud3JpdGUoY3JlZHMudG9fanNvbigpKQoKICAjIEF1dGhlbnRpY2F0ZSBhbmQgY29uc3RydWN0IHNlcnZpY2UuCiAgcHJpbnQoIkNvbm5lY3RpbmcgdG8gR29vZ2xlIEFuYWx5dGljcyBBUEkgZm9yIGF1dGhlbnRpY2F0aW9uIikKICAKICBzZXJ2aWNlID0gYnVpbGQoJ2FuYWx5dGljcycsICd2MycsIGNyZWRlbnRpYWxzPWNyZWRzKQoKICBwcmludCgiUmVhZGluZyBjdXN0b20gZGltZW5zaW9ucyBmcm9tIHByb3BlcnR5IikKICAgIAogIHByaW50KCJBbmFseXppbmcgYXZhaWxhYmxlIGFjY291bnRzLiIpCiAgcHJvcGVydGllcyA9IHNlcnZpY2UubWFuYWdlbWVudCgpLndlYnByb3BlcnRpZXMoKS5saXN0KGFjY291bnRJZD0nfmFsbCcpLmV4ZWN1dGUoKQoKICBwcm9wZXJ0aWVzTGlzdCA9IHByb3BlcnRpZXMuZ2V0KCJpdGVtcyIpCiAgbkl0ZW1zID0gbGVuKHByb3BlcnRpZXNMaXN0KQogIHByaW50KCJGb3VuZCAiK3N0cihuSXRlbXMpKyIgcHJvcGVydGllcy4iKQogIGlmIG5JdGVtcyA+MzA6CiAgICBoYXZlX3RpbWUgPSBwcm9tcHQoIlRoaXMgc2NyaXB0IHdpbGwgdGFrZSBhIGxvbmcgdGltZSB0byBydW4uIENvbnRpbnVlPyAoeS9uKSIpCiAgICBpZiBoYXZlX3RpbWUgIT0gInkiOgogICAgICBwcmludCgiRXhpdGluZy4iKQogICAgICBzeXMuZXhpdCgpCiAgZm9yIHByb3BlcnR5IGluIHByb3BlcnRpZXNMaXN0OgogICAgICBwcmludCAoIkV4cG9ydGluZzpcdCIrcHJvcGVydHlbImlkIl0rIlx0Iitwcm9wZXJ0eVsibmFtZSJdKQogICAgICBjc3ZuYW1lID0gImV4cG9ydHMvIitwcm9wZXJ0eVsiaWQiXSArICIuY3N2IgogICAgICBwY2h1bmtzID0gcHJvcGVydHlbImlkIl0uc3BsaXQoIi0iKQogICAgICBkaW1lbnNpb25zID0gc2VydmljZS5tYW5hZ2VtZW50KCkuY3VzdG9tRGltZW5zaW9ucygpLmxpc3QoCiAgICAgICAgYWNjb3VudElkPXBjaHVua3NbMV0sCiAgICAgICAgd2ViUHJvcGVydHlJZD1wcm9wZXJ0eVsiaWQiXSwKICAgICAgKS5leGVjdXRlKCkKICAgICAgZGltTGlzdCA9IGRpbWVuc2lvbnMuZ2V0KCJpdGVtcyIpCiAgICAgIHdpdGggb3Blbihjc3ZuYW1lLCAndycsIG5ld2xpbmU9JycpIGFzIGNzdmZpbGU6CiAgICAgICAgZGltZHVtcCA9IGNzdi53cml0ZXIoY3N2ZmlsZSwgZGVsaW1pdGVyPSIsIikKICAgICAgICAjSW5kZXgsU2NvcGUsTmFtZSxBY3RpdmUKICAgICAgICBkaW1kdW1wLndyaXRlcm93KFsiSW5kZXgiLCJOYW1lIiwiU2NvcGUiLCJBY3RpdmUiXSkKICAgICAgICBmb3IgZGltZW5zaW9uIGluIGRpbUxpc3Q6CiAgICAgICAgICBkaW1kdW1wLndyaXRlcm93KFsKICAgICAgICAgICAgc3RyKGRpbWVuc2lvblsiaW5kZXgiXSksCiAgICAgICAgICAgIGRpbWVuc2lvblsibmFtZSJdLAogICAgICAgICAgICBkaW1lbnNpb25bInNjb3BlIl0sCiAgICAgICAgICAgIHN0cihkaW1lbnNpb25bImFjdGl2ZSJdKQogICAgICAgICAgXSkKICBwcmludCAoIlxuRG9uZS5cbiIpCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICBzeXMuZXhpdCgpCjx8ZmltX2VuZHw+"]
["9def9a2e5eecc069a7e6726733cfd7aa14ba69ac-1","9def9a2e5eecc069a7e6726733cfd7aa14ba69ac","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IGRhdGV0aW1lCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gcndzbGliLmJ1aWxkZXJzLmNvbnN0YW50cyBpbXBvcnQgTG9jYXRpb25UeXBlLCBVc2VyVHlwZQoKX19hdXRob3JfXyA9ICdnbG93JwoKPHxmaW1fZW5kfD4="]
["2463fc90e96903bd02a65a69b5aadb4b43c497d1-3","2463fc90e96903bd02a65a69b5aadb4b43c497d1","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgpmcm9tIHRvcmV4dC5zY3JpcHQgaW1wb3J0IE1hbmFnZXIKCm1hbmFnZXIgPSBNYW5hZ2VyKCkKCgpAbWFuYWdlci5jb21tYW5kCjx8ZmltX2hvbGV8PgogICAgcHJpbnQgJ25hbWUnLCBuYW1lLCB0eXBlKG5hbWUpCiAgICBwcmludCAnbnVtYmVyJywgbnVtYmVyLCB0eXBlKG51bWJlcikKICAgIHByaW50ICdmb3JjZV9jbGVhcicsIGZvcmNlX2NsZWFyLCB0eXBlKGZvcmNlX2NsZWFyKQoKCkBtYW5hZ2VyLmNvbW1hbmQKZGVmIHJ1bigqKmt3YXJncyk6CiAgICAiIiJDb21tYW5kIHRvIHJ1biBzZXJ2ZXIsIHBhc3MgYC0tUE9SVCA5MDAwYCwgYC0tVEVNUExBVEVfUEFUSCB0ZW1wbGF0ZXNgCiAgICBhcyBhcmd1bWVudHMgdG8gYWZmZWN0IG9uIGdsb2JhbCBzZXR0aW5ncyBvYmplY3QuCiAgICAiIiIKICAgIGZyb20gc2FtcGxlcHJvamVjdC5hcHAgaW1wb3J0IGFwcAoKICAgIGFwcC51cGRhdGVfc2V0dGluZ3MoKiprd2FyZ3MpCiAgICBhcHAucnVuKCkKCgpAbWFuYWdlci5jb21tYW5kCmRlZiB0ZXN0X2VudigpOgogICAgaW1wb3J0IHRvcm5hZG8KICAgIHByaW50IHRvcm5hZG8KCgppZiAnX19tYWluX18nID09IF9fbmFtZV9fOgogICAgbWFuYWdlci5ydW4oKQo8fGZpbV9zdWZmaXh8PgpkZWYgY3JlYXRlX2RhdGFiYXNlKG5hbWUsIG51bWJlcj0xLCBmb3JjZV9jbGVhcj1GYWxzZSk6CiAgICAiIiJDb21tYW5kIHRvIGNyZWF0ZSBhIGRhdGFiYXNlCiAgICAiIiIKICAgIHByaW50ICdHb3Q6Jwo8fGZpbV9lbmR8Pg=="]
["aeed95e0baaeed3edf0a1bfb6fdaddbb1df76bd9-3","aeed95e0baaeed3edf0a1bfb6fdaddbb1df76bd9","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwpmcm9tIGRqYW5nby5jb25mIGltcG9ydCBzZXR0aW5ncwpmcm9tIFNlbGVjdENob2ljZS5tb2RlbHMgaW1wb3J0IEl0ZW1fQ2l0eSwgSXRlbV9DYXRlZ29yeQpmcm9tIGRqYW5nby51dGlscy50aW1lem9uZSBpbXBvcnQgbm93CiMgZnJvbSBjbG91ZGluYXJ5Lm1vZGVscyBpbXBvcnQgQ2xvdWRpbmFyeUZpZWxkCgppbXBvcnQgYmFzZTY0CgpjbGFzcyBQb3N0U2VhcmNoKG1vZGVscy5Nb2RlbCk6CiAgICAiIiJDcmVhdGUgYSBtb2RlbCB0byBhbGxvdyB0aGUgdXNlciB0byBwb3N0IGEgbG9zdCBpdGVtIiIiCiAgICB1c2VyX3Byb2ZpbGUgPSBtb2RlbHMuRm9yZWlnbktleSgKICAgICAgICBzZXR0aW5ncy5BVVRIX1VTRVJfTU9ERUwsCiAgICAgICAgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFLAogICAgKQogICAgaXRlbV9waWN0dXJlID0gbW9kZWxzLkltYWdlRmllbGQoCiAgICAgICAgbWF4X2xlbmd0aD1Ob25lLAogICAgICAgIHVwbG9hZF90bz0nbG9zdF9pdGVtX3BpY3MvJywKICAgICAgICBkZWZhdWx0PScnCiAgICApCiAgICAjIGl0ZW1fcGljdHVyZSA9IENsb3VkaW5hcnlGaWVsZCgnaW1hZ2UnKQogICAgIyBjYXRlZ29yeSA9IG1vZGVscy5Gb3JlaWduS2V5KAogICAgIyAgICAgSXRlbV9DYXRlZ29yeSwKICAgICMgICAgIG9uX2RlbGV0ZT1tb2RlbHMuQ0FTQ0FERSwKICAgICMgICAgIGRlZmF1bHQ9JycKICAgICMgKQogICAgIyBjaXR5X2xvc3QgPSBtb2RlbHMuRm9yZWlnbktleSgKICAgICMgICAgIEl0ZW1fQ2l0eSwKICAgICMgICAgIG9uX2RlbGV0ZT1tb2RlbHMuQ0FTQ0FERSwKICAgICMgICAgIGRlZmF1bHQ9JycKICAgICMgKQogICAgbmFtZV9vbl90aGVfaXRlbSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNTUpCiAgICBkZXNjcmlwdGlvbl9vZl9pdGVtID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSwgZGVmYXVsdD0nJykKICAgIGNvbnRhY3QgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjU1KQogICAgZGF0ZV9sb3N0ID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoZGVmYXVsdD1ub3cpCiAgICBjcmVhdGVfb24gPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChhdXRvX25vd19hZGQ9VHJ1ZSkKCiAgICBjYXRlZ29yeV9pdGVtID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSwgZGVmYXVsdD0nJykKICAgIGNpdHlfaXRlbSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNTUpCgogICAgY2xhc3MgTWV0YToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIG9yZGVyaW5nID0gWyctY3JlYXRlX29uJ10KCgo8fGZpbV9lbmR8Pg=="]
["d1c7004a42db2b9101473b6655fca0a201419e5b-1","d1c7004a42db2b9101473b6655fca0a201419e5b","PHxmaW1fcHJlZml4fD4KZnJvbSBzcGhlcm8ucmVxdWVzdC5jb3JlcmVxdWVzdCBpbXBvcnQgQ29yZVJlcXVlc3QKCjx8ZmltX2hvbGV8PgogICAgRk1UID0gJyFIQkgnCjx8ZmltX3N1ZmZpeHw+CgpjbGFzcyBTbGVlcChDb3JlUmVxdWVzdCk6CgogICAgQ0lEID0gMHgyMgo8fGZpbV9lbmR8Pg=="]
["d1878e8f1ecfe234c2b03cac06763859f85150f6-1","d1878e8f1ecfe234c2b03cac06763859f85150f6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNjYXB5LCBHZW9JUApmcm9tIHNjYXB5IGltcG9ydCAqCgo8fGZpbV9ob2xlfD4KCXNyY0NvdW50cnkgPSBnaS5jb3VudHJ5X2NvZGVfYnlfYWRkcihzcmMpCglkc3RDb3VudHJ5ID0gZ2kuY291bnRyeV9jb2RlX2J5X2FkZHIoZHN0KQoJcHJpbnQgc3JjQ291bnRyeSsiPj4iK2RzdENvdW50cnkKCnRyeToKCXdoaWxlIFRydWU6CgkJc25pZmYoZmlsdGVyPSJpcCIscHJuPWxvY2F0ZVBhY2thZ2Usc3RvcmU9MCkKZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgoJcHJpbnQgIlxuU2NhbiBBYm9ydGVkIVxuIgo8fGZpbV9zdWZmaXh8PgpnaSA9IEdlb0lQLm5ldyhHZW9JUC5HRU9JUF9NRU1PUllfQ0FDSEUpCmRlZiBsb2NhdGVQYWNrYWdlKHBrZyk6CglzcmM9cGtnLmdldGxheWVyKElQKS5zcmMKCWRzdD1wa2cuZ2V0bGF5ZXIoSVApLmRzdAo8fGZpbV9lbmR8Pg=="]
["068970cbbb591eb6c608973b2ccfecdccc34a4f9-2","068970cbbb591eb6c608973b2ccfecdccc34a4f9","PHxmaW1fcHJlZml4fD4KVGVzdEl0ZW1OYW1lID0gJ1Rlc3RJdGVtTmFtZScKdGggPSAndmFsMScKdGgxID0gJ3ZhbDInCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KdmRmID0gZGZbKGRmW1Rlc3RJdGVtTmFtZSBdID09IHRoKSB8IChkZltUZXN0SXRlbU5hbWVdID09IHRoMSldICMgfiwgJiwgfAo8fGZpbV9lbmR8Pg=="]
["0644f29f069a8af208b3f97054c4c4adbb58888e-2","0644f29f069a8af208b3f97054c4c4adbb58888e","PHxmaW1fcHJlZml4fD4KJycnClByb2dyYW0gdG8gcHJvY2VzcyB0aGUgcGVyc29uIGRhdGEgYW5kIHRoZSBzdGVwIGRhdGEgb2YgWmVuIGluZHVzdHJpZXMKQXV0aG9yOiBECkRhdGU6IDEwLzE5LzIwMTkKJycnCgoKaW1wb3J0IG9zCgoKZGVmIGdldF92YWxpZF9maWxlbmFtZSgpOgogICAgJycnIEFzayBmb3IgYSBmaWxlbmFtZSB1bnRpbCBvbmUgaXMgZ2l2ZW4gJycnCiAgICAKICAgIGZpbGVuYW1lID0gaW5wdXQoJ0lucHV0IGZpbGUgbmFtZT8gJykKICAgIAogICAgd2hpbGUgb3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUpID09IEZhbHNlOgogICAgICAgIHByaW50KCdGaWxlIGRvZXMgbm90IGV4aXN0LicpCiAgICAgICAgZmlsZW5hbWUgPSBpbnB1dCgnSW5wdXQgZmlsZSBuYW1lPyAnKQogICAgICAgIAogICAgcmV0dXJuIGZpbGVuYW1lCgoKZGVmIGV4dHJhY3RfcGVyc29uKGxpbmVzLCBzdGFydF9pbmRleD0wKToKICAgICcnJyBUYWtlIGEgbGlzdCBvZiBsaW5lcyBhbmQgcmV0dXJucyBhIHBlcnNvbiBkaWN0aW9uYXJ5IGJhc2VkIG9uCiAgICB0aGUgZGF0YSBzdGFydGluZyBhdCBhIGdpdmVuIGluZGV4ICcnJwogICAgCiAgICBpZF90ZW1wID0gbGluZXNbc3RhcnRfaW5kZXggKyAxXS5zcGxpdCgnOicpCiAgICBpZF9udW0gPSBpbnQoaWRfdGVtcFsxXSkKICAgIAogICAgbmFtZV90ZW1wID0gbGluZXNbc3RhcnRfaW5kZXggKyAyXS5zcGxpdCgnOicpCiAgICBuYW1lID0gc3RyKG5hbWVfdGVtcFsxXSkKICAgIAogICAgd2VpZ2h0X3RlbXAgPSBsaW5lc1tzdGFydF9pbmRleCArIDNdLnNwbGl0KCc6JykKICAgIHdlaWdodCA9IGZsb2F0KHdlaWdodF90ZW1wWzFdKQogICAgCiAgICBoZWlnaHRfdGVtcCA9IGxpbmVzW3N0YXJ0X2luZGV4ICsgNF0uc3BsaXQoJzonKQogICAgaGVpZ2h0ID0gZmxvYXQoaGVpZ2h0X3RlbXBbMV0pCiAgICAKICAgIGFnZV90ZW1wID0gbGluZXNbc3RhcnRfaW5kZXggKyA1XS5zcGxpdCgnOicpCiAgICBhZ2UgPSBpbnQoYWdlX3RlbXBbMV0pCiAgICAKICAgIHBlcnNvbiA9IFBlcnNvbihpZF9udW0sIG5hbWUsIHdlaWdodCwgaGVpZ2h0LCBhZ2UpCiAgICAKICAgIHJldHVybiBwZXJzb24KCgpkZWYgcHJvY2Vzc19zdGVwcyhwZXJzb24sIGxpbmVzLCBpbmRleCk6CiAgICAnJycgVGFrZSBhIHBlcnNvbiBkaWN0aW9uYXJ5LCBhIGxpc3Qgb2YgbGluZXMgZnJvbSBhIGZpbGUgKHdpdGggdHJhaWxpbmcKICAgIG5ld2xpbmUgY2hhcmFjdGVycyBzdHJpcHBlZCkgYW5kIHRoZSBpbmRleCBpbnRvIHRoYXQgbGlzdCBvZiB0aGUKICAgIDxiZWdpbiBzdGVwIGRhdGE+IGxpbmUgZm9yIHRoZSBnaXZlbiBwZXJzb24gJycnCiAgICAKICAgIGVuZCA9IDAKICAgIGZvciBpIGluIHJhbmdlKGluZGV4LCBsZW4obGluZXMpKToKICAgICAgICBpZiBsaW5lc1tpXS5zdGFydHN3aXRoKCc8ZW5kIHN0ZXAgZGF0YT4nKSBhbmQgZW5kID09IDA6CiAgICAgICAgICAgIGVuZCA9IGkKCiAgICBmb3IgaSBpbiByYW5nZShpbmRleCArIDEsIGVuZCk6CiAgICAgICAgZGF5X3RlbXAgPSBsaW5lc1tpXS5zcGxpdCgnOicpCiAgICAgICAgZGF0ZSA9IHN0cihkYXlfdGVtcFswXSkKICAgICAgICBzdGVwX3RlbXAgPSBkYXlfdGVtcFsxXS5zcGxpdCgnLCcpCiAgICAgICAgc3RlcF90ZW1wID0gbGlzdChtYXAoaW50LCBzdGVwX3RlbXApKQogICAgICAgIHN0ZXBzID0gc3VtKHN0ZXBfdGVtcCkKICAgICAgICBwZXJzb24uYWRkX3N0ZXBzKGRhdGUsIHN0ZXBzKQoKCmRlZiByZWFkX3Blb3BsZV9mcm9tX2ZpbGUoZmlsZW5hbWUpOgogICAgJycnIFRha2UgYSBmaWxlbmFtZSBhbmQgcmV0dXJuIGEgbGlzdCBvZiBwZXJzb24gZGljdGlvbmFyaWVzICcnJwogICAgaW5maWxlID0gb3BlbihmaWxlbmFtZSkKICAgIGxpbmVzID0gaW5maWxlLnJlYWRsaW5lcygpCiAgICBsaW5lcyA9IFtpdGVtLnN0cmlwKCkgZm9yIGl0ZW0gaW4gbGluZXNdCiAgICBwZW9wbGUgPSBbXQogICAgCiAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4obGluZXMpKToKICAgICAgICBpZiBsaW5lc1tpXS5zdGFydHN3aXRoKCc8YmVnaW4gcGVyc29uIGRhdGE+Jyk6CiAgICAgICAgICAgIHBlcnNvbiA9IGV4dHJhY3RfcGVyc29uKGxpbmVzLCBpKQogICAgICAgIGlmIGxpbmVzW2ldLnN0YXJ0c3dpdGgoJzxiZWdpbiBzdGVwIGRhdGE+Jyk6CiAgICAgICAgICAgIHByb2Nlc3Nfc3RlcHMocGVyc29uLCBsaW5lcywgaSkKICAgICAgICAgICAgcGVvcGxlLmFwcGVuZChwZXJzb24pCgogICAgcmV0dXJuIHBlb3BsZQoKCmRlZiBjYWxjdWxhdGVfYm1pKHBlb3BsZSk6CiAgICAnJycgUmV0dXJuIHRoZSBtYXgsIG1pbiBhbmQgbWVhbiBib2R5LW1hc3MgaW5kZXhlcyBvZiB0aGUgZ3JvdXAgJycnCiAgICAKICAgIGJtaV90ZW1wID0gW10KICAgIGZvciBwZXJzb24gaW4gcGVvcGxlOgogICAgICAgIHBlcnNvbl9ibWkgPSBQZXJzb24uYm1pKHBlcnNvbikKICAgICAgICBibWlfdGVtcC5hcHBlbmQocGVyc29uX2JtaSkKCiAgICBtaW5fYm1pID0gc3RyKCd7Oi4yZn0nLmZvcm1hdChtaW4oYm1pX3RlbXApKSkKICAgIG1lYW5fYm1pID0gc3RyKCd7Oi4yZn0nLmZvcm1hdChzdW0oYm1pX3RlbXApIC8gbGVuKGJtaV90ZW1wKSkpCiAgICBtYXhfYm1pID0gc3RyKCd7Oi4yZn0nLmZvcm1hdChtYXgoYm1pX3RlbXApKSkKICAgIAogICAgcmV0dXJuIG1pbl9ibWksIG1lYW5fYm1pLCBtYXhfYm1pCgoKZGVmIHNvcnRfcGVvcGxlKHBlb3BsZSk6CiAgICAnJycgU29ydCB0aGUgcGVvcGxlIGJhc2VkIG9uIHRoZWlyIHN0ZXAgY291bnRzICcnJwoKICAgIHBlb3BsZV90ZW1wID0gW10KICAgIGZvciBwZXJzb24gaW4gcGVvcGxlOgogICAgICAgIHBlcnNvbl90ZW1wID0gKHBlcnNvbi5pZF9udW0sIHBlcnNvbi5uYW1lLCBwZXJzb24ubnVtX3N0ZXBzKQogICAgICAgIHBlb3BsZV90ZW1wLmFwcGVuZChwZXJzb25fdGVtcCkKICAgCiAgICBwZW9wbGVfdGVtcC5zb3J0KGtleT1sYW1iZGEgdHVwOiB0dXBbMl0pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICByZXR1cm4gcGVvcGxlX3RlbXAKCgo8fGZpbV9lbmR8Pg=="]
["aef88470d84ef7c894ed933d7e367fd5df82f284-2","aef88470d84ef7c894ed933d7e367fd5df82f284","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlc3R1dGlscwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCgoKY2xhc3MgVGVzdChUZXN0Q2FzZSk6Cjx8ZmltX2VuZHw+"]
["56549b2184c9e37166abf1d98cc7836ac1c7aa5e-3","56549b2184c9e37166abf1d98cc7836ac1c7aa5e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBvcwoKZnJvbSBweXN1cmYuc3BwLnNwcCBpbXBvcnQgU3VyZmFjZVBvaW50UHJvdmlkZXIKZnJvbSBweXN1cmYuc2guc2ggaW1wb3J0ICoKCiNzcHAgPSBTdXJmYWNlUG9pbnRQcm92aWRlcignLi90ZXN0LmlucCcpCiNvdXQgPSBzcHAuZ2V0KHsnY3JkJzogbnAuemVyb3MoMywgZHR5cGU9bnAuZG91YmxlKSwgJ2VuZXJneSc6IE5vbmUsICdncmFkaWVudCc6IE5vbmV9KQoKY2xhc3MgU2F2ZShvYmplY3QpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgaGVhZGVyPU5vbmUpOgoKICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlbmFtZSk6CiAgICAgICAgICAgIGZpbGVuYW1lID0gbGlzdChmaWxlbmFtZS5ycGFydGl0aW9uKCcuJykpCiAgICAgICAgICAgIGZpbGVuYW1lWzBdICs9ICJfJTEyLjExZiIgJSByYW5kb20uZ2V0KCkKICAgICAgICAgICAgZmlsZW5hbWUgPSAiIi5qb2luKGZpbGVuYW1lKQoKICAgICAgICBzZWxmLmYgPSBvcGVuKGZpbGVuYW1lLCAndycpCiAgICAgICAgaWYgaGVhZGVyIGlzIG5vdCBOb25lOgogICAgICAgICAgICBzZWxmLmYud3JpdGUoaGVhZGVyICsgIlxuIikKCiAgICBkZWYgc2F2ZShzZWxmLCB0eHQpOgogICAgICAgIHNlbGYuZi53cml0ZSh0eHQgKyAiXG4iKQoKICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgIHNlbGYuZi5jbG9zZSgpCgoKZGVmIHJlc2NhbGVfdmVsb2NpdHkoZWtpbiwgZEUsIHYpOgogICAgZmFjdG9yID0gKDEuIC0gZEUvZWtpbikKICAgIHByaW50KGYiZmFjdG9yID0ge2ZhY3Rvcn0iKQogICAgdiAqPSBucC5zcXJ0KGZhY3RvcikKICAgIHJldHVybiB2CgpkZWYgbGFuZGF1X3plbmVyX3N1cmZhY2Vob3BwaW5nKGluaXRfY29uZCwgaWFjdGl2ZSwgbnN0ZXBzLCByYW5kb21fc2VlZCwgaW5wLCBkdCk6CgogICAgbnN0YXRlcyA9IDMKIyAgICBtYXNzID0gbnAuYXJyYXkoWzEuMCwgMS4wLCAxLjBdKQoKICAgIHNhdmVfY3JkID0gU2F2ZSgnY3JkLnR4dCcsICJNMSBNMiBNMyIpCiAgICBzYXZlX3ZlbG9jID0gU2F2ZSgndmVsb2MudHh0JywgIk0xIE0yIE0zIikKICAgIHNhdmVfYWNjID0gU2F2ZSgnYWNjLnR4dCcsICJNMSBNMiBNMyIpCiAgICBzYXZlX2VuZXJneSA9IFNhdmUoImVuZXJneS50eHQiLCAiaWFjdGl2ZSBFS2luIEVQb3QgRVRvdCIpCiAgICBzYXZlX3BlcyA9IFNhdmUoInBlcy50eHQiLCAic3RhdGVzIikKCiAgICBlX2N1cnIgPSBOb25lCiAgICBlX3ByZXZfc3RlcCA9IE5vbmUKICAgIGVfdHdvX3N0ZXBfcHJldiA9IE5vbmUKCiAgICAjIGluaXQgU1BQCiAgICBzcHAgPSBTdXJmYWNlUG9pbnRQcm92aWRlcihpbnApCiAgICAjIHNldCByYW5kb20gbnVtYmVyCiAgICByYW5kb20gPSBSYW5kb21OdW1iZXJHZW5lcmF0b3JOUChyYW5kb21fc2VlZCkKICAgICMgc2V0IHN0YXJ0aW5nIGNyZHMKICAgIGNyZCA9IGluaXRfY29uZC5jcmQKICAgICMKICAgIHYgPSBpbml0X2NvbmQudmVsb2MKICAgICMgc3RhcnQKICAgIGRhdGEgPSBnZXRfZGF0YShzcHAsIGNyZCkKICAgIGEgPSBnZXRfYWNjZWxlcmF0aW9uKGRhdGFbJ2dyYWRpZW50J11baWFjdGl2ZV0sIGRhdGFbJ21hc3MnXSkKICAgICMKICAgIGVfY3VyciA9IGRhdGFbJ2VuZXJneSddCiAgICBmb3IgaXN0ZXAgaW4gcmFuZ2UoMik6CiAgICAgICAgIiIiSWYgbm90IHJlc3RhcnQsIGZpcnN0IDIgc3RlcHMgYXJlIGp1c3QgdG8gc2F2ZSBlbmVyZ3khIiIiCiAgICAgICAgY3JkID0gdnZfeHN0ZXAoY3JkLCB2LCBhLCBkdCkKICAgICAgICBkYXRhID0gZ2V0X2RhdGEoc3BwLCBjcmQpIAogICAgICAgICMgdXBkYXRlIGFjY2VsZXJhdGlvbgogICAgICAgIGFfb2xkID0gYQogICAgICAgIGEgPSBnZXRfYWNjZWxlcmF0aW9uKGRhdGFbJ2dyYWRpZW50J11baWFjdGl2ZV0sIGRhdGFbJ21hc3MnXSkKICAgICAgICB2ID0gdnZfdnN0ZXAodiwgYV9vbGQsIGEsIGR0KQogICAgICAgIGlmIGVfcHJldl9zdGVwIGlzIE5vbmU6CiAgICAgICAgICAgIGVfcHJldl9zdGVwID0gZV9jdXJyCiAgICAgICAgICAgIGVfY3VyciA9IGRhdGFbJ2VuZXJneSddCiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZV90d29fc3RlcF9wcmV2ID0gZV9wcmV2X3N0ZXAKICAgICAgICBlX3ByZXZfc3RlcCA9IGVfY3VycgogICAgICAgIGVfY3VyciA9IGRhdGFbJ2VuZXJneSddCiAgICAgICAgCiAgICAKICAgIGZvciBpc3RlcCBpbiByYW5nZShuc3RlcHMpOgogICAgICAgICMgMSkgd3JpdGUgc3RlcCBpbmZvCiAgICAgICAgIyAyKSBjYWxsIGludGVyZmFjZQogICAgICAgIGNyZCA9IHZ2X3hzdGVwKGNyZCwgdiwgYSwgZHQpCiAgICAgICAgZGF0YSA9IGdldF9kYXRhKHNwcCwgY3JkKQogICAgICAgICMKICAgICAgICBlX3R3b19zdGVwX3ByZXYgPSBlX3ByZXZfc3RlcAogICAgICAgIGVfcHJldl9zdGVwID0gZV9jdXJyCiAgICAgICAgZV9jdXJyID0gZGF0YVsnZW5lcmd5J10KICAgICAgICAjIHVwZGF0ZSBhY2NlbGVyYXRpb24KICAgICAgICBhX29sZCA9IGEKICAgICAgICBhID0gZ2V0X2FjY2VsZXJhdGlvbihkYXRhWydncmFkaWVudCddW2lhY3RpdmVdLCBkYXRhWydtYXNzJ10pCiAgICAgICAgIyAKICAgICAgICB2ID0gdnZfdnN0ZXAodiwgYV9vbGQsIGEsIGR0KQogICAgICAgICMgTGFuZGF1IFplbmVyOgogICAgICAgIGlzZWxlY3RlZCA9IExhbmRhdVplbmVyLmxhbmRhdV96ZW5lcihpYWN0aXZlLCBuc3RhdGVzLCBkdCwgCiAgICAgICAgICAgICAgICBlX2N1cnIsIGVfcHJldl9zdGVwLCBlX3R3b19zdGVwX3ByZXYpCiAgICAgICAgaWYgaXNlbGVjdGVkIGlzIG5vdCBOb25lOgogICAgICAgICAgICAjIGNoYW5nZSBhY3RpdmUgc3RhdGUKICAgICAgICAgICAgZEUgPSBkYXRhWydlbmVyZ3knXVtpc2VsZWN0ZWRdIC0gZGF0YVsnZW5lcmd5J11baWFjdGl2ZV0KICAgICAgICAgICAgZWtpbiA9IGNhbGNfZWtpbihkYXRhWydtYXNzJ10sIHYpCiAgICAgICAgICAgIGlmIChkRSA+IGVraW4pOgogICAgICAgICAgICAgICAgcHJpbnQoZiJUb28gZmV3IGVuZXJneSAtPiBubyBob3AiKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgaWFjdGl2ZSA9IGlzZWxlY3RlZAogICAgICAgICAgICAgICAgcHJpbnQoZiJuZXcgc2VsZWN0ZWQgc3RhdGU6IHtpc2VsZWN0ZWR9IikKICAgICAgICAgICAgICAgICMgcmVzY2FsZSB2ZWxvY2l0eQogICAgICAgICAgICAgICAgdiA9IHJlc2NhbGVfdmVsb2NpdHkoZWtpbiwgZEUsIHYpCiAgICAgICAgICAgICAgICAjIGdldCBhY2NlbGVyYXRpb24KICAgICAgICAgICAgICAgIGEgPSBnZXRfYWNjZWxlcmF0aW9uKGRhdGFbJ2dyYWRpZW50J11baWFjdGl2ZV0sIGRhdGFbJ21hc3MnXSkKICAgICAgICBzYXZlX2NyZC5zYXZlKCIgIi5qb2luKCIlMTIuOGYiICUgYyBmb3IgYyBpbiBjcmQuZmxhdHRlbigpKSkKICAgICAgICBzYXZlX3ZlbG9jLnNhdmUoIiAiLmpvaW4oIiUxMi44ZiIgJSBfdiBmb3IgX3YgaW4gdi5mbGF0dGVuKCkpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2F2ZV9hY2Muc2F2ZSgiICIuam9pbigiJTEyLjhmIiAlIF9hIGZvciBfYSBpbiBhLmZsYXR0ZW4oKSkpCiAgICAgICAgZWtpbiA9IGNhbGNfZWtpbihkYXRhWydtYXNzJ10sIHYpCiAgICAgICAgZXBvdCA9IGVfY3VycltpYWN0aXZlXQogICAgICAgIGV0b3QgPSBla2luICsgZXBvdAo8fGZpbV9lbmR8Pg=="]
["30982f914f208c7eb538197af3d465d7cb5d83c5-4","30982f914f208c7eb538197af3d465d7cb5d83c5","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCBudW1weSBhcyBucApmcm9tIHB5bGlwaWQuZnVuYyBpbXBvcnQgY2FsX2NvbnRhY3RfcmVzaWR1ZXMsIER1cmF0aW9uLCBjYWxfb2NjdXBhbmN5LCBjYWxfbGlwaWRjb3VudAoKY2xhc3MgVGVzdEN1dG9mZih1bml0dGVzdC5UZXN0Q2FzZSk6CgogICAgZGVmIHRlc3RfY2FsX2NvbnRhY3RfcmVzaWR1ZXMoc2VsZik6CiAgICAgICAgZHIwID0gWzAuOSwgMC45NSwgMS4yLCAxLjEsIDEuMCwgMC45XQogICAgICAgIGRyMSA9IFswLjk1LCAwLjksIDAuOTUsIDEuMSwgMS4yLCAxLjFdCiAgICAgICAgZHIyID0gWzAuOTAsIDAuOTAsIDAuODUsIDAuOTUsIDEuMCwgMS4xXQogICAgICAgIGRpc3RfbWF0cml4ID0gbnAuYXJyYXkoW2RyMCwgZHIxLCBkcjJdKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgY29udGFjdF9saXN0LCBmcmFtZV9pZF9zZXQsIHJlc2lkdWVfaWRfc2V0ID0gY2FsX2NvbnRhY3RfcmVzaWR1ZXMoZGlzdF9tYXRyaXgsIDEuMCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRhY3RfbGlzdCwgW1swLCAxLCAyXSwgWzAsIDEsIDJdLCBbMSwgMl0sIFsyXSwgWzAsIDJdLCBbMF1dKQogICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGxpc3QoZnJhbWVfaWRfc2V0KSwgWzAsIDEsIDQsIDUsIDAsIDEsIDIsIDAsIDEsIDIsIDMsIDRdKQogICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGxpc3QocmVzaWR1ZV9pZF9zZXQpLCBbMCwgMCwgMCwgMCwgMSwgMSwgMSwgMiwgMiwgMiwgMiwgMl0pCjx8ZmltX2VuZHw+"]
["d1f499ad733f102a63ec1bc3c3b2007e9b104f05-3","d1f499ad733f102a63ec1bc3c3b2007e9b104f05","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uIC1CCgojIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJpZXMKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBqc29uCmltcG9ydCBsb2dnaW5nCmltcG9ydCBvcwppbXBvcnQgc2lnbmFsCmltcG9ydCBzeXMKaW1wb3J0IHRpbWUKCiMgRXh0ZXJuYWwgbGlicmFyaWVzIChzZWUgcmVxdWlyZW1lbnRzLnR4dCkKaW1wb3J0IHdpb3RwLnNkay5kZXZpY2UKCiMgSW50ZXJuYWwgbW9kdWxlcyAoc2VlIHNyYy9weXRob24vbW9kdWxlcy8pCmZyb20gbW9kdWxlcy5vcmlnaW5hbF9jb21tYW5kX2NhbGxiYWNrIGltcG9ydCBvcmlnaW5hbENvbW1hbmRDYWxsYmFjawoKCmRlZiBpbnRlcnJ1cHRIYW5kbGVyKHNpZ25hbCwgZnJhbWUpOgogICAgY2xpZW50LmRpc2Nvbm5lY3QoKQogICAgc3lzLmV4aXQoMCkKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBpbnRlcnJ1cHRIYW5kbGVyKQoKICAgICMgUGFyc2UgY29tbWFuZC1saW5lIG9wdGlvbnMKICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdDb25uZWN0IGRldmljZSB0byBJQk0gV2F0c29uIElvVCBQbGF0Zm9ybS4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLW8nLCAnLS1vcmdhbml6YXRpb24nLCBoZWxwPSdPcmdhbml6YXRpb24gSUQuJywgcmVxdWlyZWQ9VHJ1ZSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1UJywgJy0tdG9rZW4nLCBoZWxwPSdBdXRoZW50aWNhdGlvbiB0b2tlbi4nLCByZXF1aXJlZD1UcnVlKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kZXZpY2UnLCBoZWxwPSdEZXZpY2UgSUQuJywgcmVxdWlyZWQ9VHJ1ZSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy10JywgJy0tdHlwZScsIGhlbHA9J0RldmljZSBUeXBlLicsIHJlcXVpcmVkPVRydWUpCiAgICBhcmcgPSBwYXJzZXIucGFyc2VfYXJncygpCgogICAgIyBSZWFkIGRldmljZSBjcmVkZW50aWFscwogICAgdHJ5OgogICAgICAgIG9wdGlvbnMgPSB7CiAgICAgICAgICAgICJpZGVudGl0eSI6IHsib3JnSWQiOiBhcmcub3JnYW5pemF0aW9uLCAidHlwZUlkIjogYXJnLnR5cGUsICJkZXZpY2VJZCI6IGFyZy5kZXZpY2V9LAogICAgICAgICAgICAiYXV0aCI6IHsidG9rZW4iOiBhcmcudG9rZW59LAogICAgICAgIH0KICAgICAgICBjbGllbnQgPSB3aW90cC5zZGsuZGV2aWNlLkRldmljZUNsaWVudChvcHRpb25zKQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIHByaW50KCJDYXVnaHQgZXhjZXB0aW9uIGNvbm5lY3RpbmcgZGV2aWNlOiAlcyIgJSBzdHIoZSkpCiAgICAgICAgc3lzLmV4aXQoKQoKICAgIGNsaWVudC5sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKICAgIGNsaWVudC5jb21tYW5kQ2FsbGJhY2sgPSBvcmlnaW5hbENvbW1hbmRDYWxsYmFjawogICAgY2xpZW50LmNvbm5lY3QoKQoKd2hpbGUgVHJ1ZToKICAgIHRpbWUuc2xlZXAoMSkKCiAgICAjIFRyeSBwdWJsaXNoaW5nIGV2ZW50IHdpdGggcmVzcG9uc2UuanNvbgogICAgdHJ5OgogICAgICAgIGZpbGVuYW1lID0gb3MuZ2V0Y3dkKCkgKyAnL2xvZ3MvcmVzcG9uc2UuanNvbicKICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyJywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoKICAgICAgICAgICAgcmVzcG9uc2VfanNvbiA9IGpzb24ubG9hZChmKQogICAgICAgIG9zLnJlbW92ZShmaWxlbmFtZSkKICAgICAgICBjbGllbnQucHVibGlzaEV2ZW50KCdtZWFzdXJlbWVudCcsICdqc29uJywgcmVzcG9uc2VfanNvbikKICAgIGV4Y2VwdCAoSU9FcnJvciwgT1NFcnJvcik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBwYXNzCjx8ZmltX2VuZHw+"]
["5c4aa2e6e867e0da1723189ff1fe2cd6141add4f-2","5c4aa2e6e867e0da1723189ff1fe2cd6141add4f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGlvCmltcG9ydCBpdGVydG9vbHMKZnJvbSBkYXRhY2xhc3NlcyBpbXBvcnQgZGF0YWNsYXNzLCBmaWVsZApmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKZnJvbSB0eXBpbmcgaW1wb3J0IEdlbmVyYXRvciwgTGlzdCwgT3B0aW9uYWwKCmZyb20gbWF0cGxvdGxpYiBpbXBvcnQgZmlndXJlCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gUElMIGltcG9ydCBJbWFnZQpmcm9tIG1hdHBsb3RsaWIuYW5pbWF0aW9uIGltcG9ydCBGRk1wZWdGaWxlV3JpdGVyCmZyb20gbWF0cGxvdGxpYiBpbXBvcnQgY29sbGVjdGlvbnMgYXMgbWMKaW1wb3J0IG1hdHBsb3RsaWIucGF0Y2hlcyBhcyBwYXRjaGVzCmZyb20gbWF0cGxvdGxpYi5wYXRjaGVzIGltcG9ydCBDaXJjbGUsIFdlZGdlCmltcG9ydCBzY2lweS5zdGF0cyBhcyBzdGF0cwppbXBvcnQgZ2VvcGFuZGFzIGFzIGdwZApmcm9tIHNoYXBlbHkuZ2VvbWV0cnkgaW1wb3J0IFBvbHlnb24KaW1wb3J0IGNvcHkKCkJBQ0tHUk9VTkRfQ09MT1VSID0gIiMwMDAwMDBGRiIKRlJBTUVfUkFURSA9IDI0CgoKQGRhdGFjbGFzcwpjbGFzcyBTY2VuZToKICAgICIiIgogICAgQmFzZSBjbGFzcyBmb3IgYW5pbWF0ZWQgc2NlbmUgbGF5ZXJzCiAgICAiIiIKCiAgICBzdGFydF9mcmFtZTogaW50CiAgICBlbmRfZnJhbWU6IGludAogICAgem9yZGVyOiBmbG9hdAogICAgcmVuZGVyX2ZyYW1lOiBHZW5lcmF0b3JbSW1hZ2UuSW1hZ2UsIE5vbmUsIE5vbmVdCgoKZGVmIGNvbnZlcnRfcGxvdF90b19pbWFnZShmaWd1cmU6IGZpZ3VyZS5GaWd1cmUpIC0+IEltYWdlLkltYWdlOgogICAgIiIiCiAgICBDb252ZXJ0cyB0aGUgc3BlY2lmaWVkIG1hdHBsb3RsaWIgRmlndXJlIGludG8gYSBQSUwgSW1hZ2UKICAgIDpwYXJhbSBmaWd1cmU6IEZpZ3VyZSB0byBjb252ZXJ0CiAgICA6cmV0dXJuOiBQSUwgSW1hZ2UKICAgICIiIgogICAgYnVmID0gaW8uQnl0ZXNJTygpCiAgICBmaWd1cmUuc2F2ZWZpZyhidWYsIGZvcm1hdD0icG5nIiwgZmFjZWNvbG9yPSJOb25lIikKICAgIGJ1Zi5zZWVrKDApCiAgICBpbSA9IEltYWdlLm9wZW4oYnVmKQogICAgcmV0dXJuIGltCgoKZGVmIGRyYXdfZXllKAogICAgYXhlc19kaW1zOiBMaXN0W2Zsb2F0XSwgcGVyc2lzdF9mcmFtZXM6IGludCwgZmFkZV9vdXRfZnJhbWVzOiBpbnQKKSAtPiBHZW5lcmF0b3JbSW1hZ2UuSW1hZ2UsIE5vbmUsIE5vbmVdOgogICAgIiIiCiAgICBHZW5lcmF0b3IgbWV0aG9kIGZvciByZW5kZXJpbmcgYSBzdHlsaXplZCBleWUKICAgIDpwYXJhbSBheGVzX2RpbXM6IG9mZnNldCBhbmQgZGltZW5zaW9ucyBvZiB0aGUgYXhlcyB0byByZW5kZXIgdG8KICAgIDpwYXJhbSBwZXJzaXN0X2ZyYW1lczogTnVtYmVyIG9mIGZyYW1lcyB0byBwZXJzaXN0IHRoZSBmcmFtZXMgdG8KICAgIDpwYXJhbSBmYWRlX291dF9mcmFtZXM6IE51bWJlciBvZiBmcmFtZXMgdG8gZmFkZSBvdXQgdGhlIGV5ZQogICAgOnJldHVybjogR2VuZXJhdG9yIGZvciBwcm9kdWNpbmcgUElMIEltYWdlIGZyYW1lcwogICAgIiIiCiAgICBpbnRlcnZhbF9jb3VudCA9IDM2MQogICAgYW5nbGUgPSBucC5saW5zcGFjZSgwLCBucC5waSAqIDIuMCwgaW50ZXJ2YWxfY291bnQpCiAgICByYWRpdXMgPSBucC5hcnJheShbbnVtICUgMiBmb3IgbnVtIGluIHJhbmdlKDAsIGludGVydmFsX2NvdW50KV0pICogMi41ICsgMS41CiAgICB4ID0gcmFkaXVzICogbnAuY29zKGFuZ2xlKQogICAgeSA9IHJhZGl1cyAqIG5wLnNpbihhbmdsZSkKICAgIGlyaXMgPSBucC52c3RhY2soW3gucmVzaGFwZSgxLCAtMSksIHkucmVzaGFwZSgxLCAtMSldKQogICAgaW50ZXJ2YWxzID0gbnAubGluc3BhY2UoLTcuMDUsIDcuMDUsIGludGVydmFsX2NvdW50KQogICAgcG9zaXRpdmVfY3VydmUgPSAwLjA3NSAqIGludGVydmFscyAqKiAyIC0gMy43NQogICAgbmVnYXRpdmVfY3VydmUgPSAtMC4wNzUgKiAoaW50ZXJ2YWxzICoqIDIpICsgMy43NQogICAgaW06IEltYWdlLkltYWdlID0gSW1hZ2UuZnJvbWFycmF5KG5wLnplcm9zKCgxLCAxLCA0KSwgZHR5cGU9bnAudWludDgpKQogICAgZmlndXJlID0gcGx0LmZpZ3VyZShmaWdzaXplPSgxOS4yLCAxMC44KSkKCiAgICBmb3IgaSBpbiByYW5nZSgxLCBpbnRlcnZhbF9jb3VudCArIDMsIDMpOgogICAgICAgIGZpZ3VyZS5jbGVhcigpCgogICAgICAgICMgRHJhdyBJcmlzCiAgICAgICAgYXggPSBmaWd1cmUuYWRkX2F4ZXMoYXhlc19kaW1zKQogICAgICAgIGF4LmZpbGxfYmV0d2VlbigKICAgICAgICAgICAgaW50ZXJ2YWxzW2ludGVydmFsX2NvdW50IC0gaSA6XSwKICAgICAgICAgICAgcG9zaXRpdmVfY3VydmVbaW50ZXJ2YWxfY291bnQgLSBpIDpdLAogICAgICAgICAgICBuZWdhdGl2ZV9jdXJ2ZVtpbnRlcnZhbF9jb3VudCAtIGkgOl0sCiAgICAgICAgICAgIGNvbG9yPSJ3aGl0ZSIsCiAgICAgICAgICAgIHpvcmRlcj0xLAogICAgICAgICkKICAgICAgICBheC5wbG90KGlyaXNbMCwgMDppXSwgaXJpc1sxLCAwOmldLCBsaW5ld2lkdGg9NSwgY29sb3I9InN0ZWVsYmx1ZSIsIHpvcmRlcj0zKQogICAgICAgIGF4LmZpbGxfYmV0d2VlbigKICAgICAgICAgICAgaW50ZXJ2YWxzLAogICAgICAgICAgICBucC5vbmVzKGludGVydmFsX2NvdW50KSAqIDUsCiAgICAgICAgICAgIG5lZ2F0aXZlX2N1cnZlLAogICAgICAgICAgICBjb2xvcj0iYmxhY2siLAogICAgICAgICAgICBhbHBoYT0xLjAsCiAgICAgICAgICAgIHpvcmRlcj00LAogICAgICAgICkKICAgICAgICBheC5maWxsX2JldHdlZW4oCiAgICAgICAgICAgIGludGVydmFscywKICAgICAgICAgICAgLW5wLm9uZXMoaW50ZXJ2YWxfY291bnQpICogNSwKICAgICAgICAgICAgcG9zaXRpdmVfY3VydmUsCiAgICAgICAgICAgIGNvbG9yPSJibGFjayIsCiAgICAgICAgICAgIGFscGhhPTEuMCwKICAgICAgICAgICAgem9yZGVyPTQsCiAgICAgICAgKQogICAgICAgIGF4LnNldF94bGltKC05LjYsIDkuNikKICAgICAgICBheC5zZXRfeWxpbSgtNC4zMiwgNC4zMikKICAgICAgICBheC5heGlzKCJvZmYiKQogICAgICAgIHBhdGNoID0gcGF0Y2hlcy5DaXJjbGUoKDAsIDApLCByYWRpdXM9NC4wMiwgY29sb3I9ImJsYWNrIiwgem9yZGVyPTIpCiAgICAgICAgYXguYWRkX3BhdGNoKHBhdGNoKQoKICAgICAgICBpbSA9IGNvbnZlcnRfcGxvdF90b19pbWFnZShmaWd1cmUpCiAgICAgICAgeWllbGQgaW0KCiAgICAjIEtlZXAgdGhlIGltYWdlIGZvciB0aGlzIG1hbnkgZnJhbWVzCiAgICBmb3IgaSBpbiByYW5nZShwZXJzaXN0X2ZyYW1lcyk6CiAgICAgICAgeWllbGQgaW0KCiAgICAjIEZhZGUgb3V0IHRoZSBpbWFnZSBvdmVyIHRoaXMgbWFueSBmcmFtZXMKICAgIGZhZGVfb3V0X2FscGhhID0gbnAucG93ZXIobnAubGluc3BhY2UoMSwgMCwgZmFkZV9vdXRfZnJhbWVzKSwgMikKICAgIGZvciBhbHBoYSBpbiBmYWRlX291dF9hbHBoYToKICAgICAgICBwaXhlbHMgPSBucC5hcnJheShpbSkKICAgICAgICBhbHBoYV9sYXllciA9IHBpeGVsc1s6LCA6LCAzXQogICAgICAgIGFscGhhX2xheWVyW2FscGhhX2xheWVyID4gMF0gPSBpbnQoMjU1ICogYWxwaGEpCiAgICAgICAgeWllbGQgSW1hZ2UuZnJvbWFycmF5KHBpeGVscykKCiAgICAjIFN0YXkgYmxhY2sgZm9yIHRoZSByZW1haW5kZXIKICAgIGJsYWNrX3NjcmVlbiA9IG5wLmFycmF5KGltKQogICAgYmxhY2tfc2NyZWVuWzosIDosIDpdID0gMAogICAgaW0gPSBJbWFnZS5mcm9tYXJyYXkoYmxhY2tfc2NyZWVuKQogICAgd2hpbGUgVHJ1ZToKICAgICAgICB5aWVsZCBpbQoKCmRlZiBkcmF3X3RleHQoCiAgICBzZW50ZW5jZTogc3RyLAogICAgdGV4dF9wb3NfbGlzdDogTGlzdFtpbnRdLAogICAgYWxwaGFfdHJhbnNpdGlvbnM6IGludCwKICAgIHBlcnNpc3RfZnJhbWVzOiBpbnQsCiAgICBmYWRlX291dF9mcmFtZXM6IGludCwKICAgIGZvbnRfc2l6ZTogaW50LAogICAgbGVmdF9vZmZzZXQ6IGZsb2F0LAogICAgYm90dG9tX29mZnNldDogZmxvYXQsCikgLT4gR2VuZXJhdG9yW0ltYWdlLkltYWdlLCBOb25lLCBOb25lXToKICAgICIiIgogICAgUmVuZGVycyBhIHNlbnRlbmNlIHdpdGggY29uZmlndXJhYmxlIHBocmFzZSBib3VuZGFyaWVzCiAgICA6cGFyYW0gc2VudGVuY2U6IEZ1bGwgdGV4dCB0byByZW5kZXIKICAgIDpwYXJhbSB0ZXh0X3Bvc19saXN0OiBDaGFyYWN0ZXIgb2Zmc2V0cyBpbiB0aGUgc2VudGVuY2UgdG8gZmFkZSBpbgogICAgOnBhcmFtIGFscGhhX3RyYW5zaXRpb25zOiBOdW1iZXIgb2YgYWxwaGEgaW5jcmVtZW50cyB0byBmYWRlIGluIGVhY2ggcGhyYXNlCiAgICA6cGFyYW0gcGVyc2lzdF9mcmFtZXM6IE51bWJlciBvZiBmcmFtZXMgdG8gcGVyc2lzdCB0aGUgc2VudGVuY2Ugb25jZSBkcmF3bgogICAgOnBhcmFtIGZhZGVfb3V0X2ZyYW1lczogTnVtYmVyIG9mIGZyYW1lcyB0byBmYWRlIG91dCB0aGUgc2VudGVuY2UKICAgIDpwYXJhbSBmb250X3NpemU6IFNpemUgb2YgdGhlIGZvbnQgdG8gcmVuZGVyIHRoZSBzZW50ZW5jZSB3aXRoCiAgICA6cGFyYW0gbGVmdF9vZmZzZXQ6IGF4ZXMgb2Zmc2V0IGZvciB0aGUgdGV4dCBmcm9tIHRoZSBsZWZ0IGJvdW5kYXJ5CiAgICA6cGFyYW0gYm90dG9tX29mZnNldDogYXhlcyBvZmZzZXQgZm9yIHRoZSB0ZXh0IGZyb20gdGhlIGJvdHRvbSBib3VuZGFyeQogICAgOnJldHVybjogR2VuZXJhdG9yIGZvciBwcm9kdWNpbmcgUElMIEltYWdlIGZyYW1lcwogICAgIiIiCiAgICBpbTogSW1hZ2UuSW1hZ2UgPSBJbWFnZS5mcm9tYXJyYXkobnAuemVyb3MoKDEsIDEsIDQpLCBkdHlwZT1ucC51aW50OCkpCiAgICBmaWd1cmUgPSBwbHQuZmlndXJlKGZpZ3NpemU9KDE5LjIsIDEwLjgpKQogICAgYWxwaGFfYXJyYXkgPSBucC5wb3dlcihucC5saW5zcGFjZSgwLCAxLCBhbHBoYV90cmFuc2l0aW9ucyksIDIpCiAgICBmb3IgaWR4LCB0ZXh0X3BvcyBpbiBlbnVtZXJhdGUodGV4dF9wb3NfbGlzdCk6CiAgICAgICAgZm9yIGFscGhhIGluIGFscGhhX2FycmF5OgogICAgICAgICAgICBmaWd1cmUuY2xlYXIoKQogICAgICAgICAgICB0ZXh0X2F4ZXMgPSBmaWd1cmUuYWRkX2F4ZXMoWzAuMCwgMC4wLCAxLjAsIDEuMF0pCiAgICAgICAgICAgIHRleHRfYXhlcy5heGlzKCJvZmYiKQoKICAgICAgICAgICAgaWYgaWR4ID4gMDoKICAgICAgICAgICAgICAgIHRleHRfYXhlcy50ZXh0KAogICAgICAgICAgICAgICAgICAgIGxlZnRfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgIGJvdHRvbV9vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgcz1zZW50ZW5jZVs6IHRleHRfcG9zX2xpc3RbaWR4IC0gMV1dLAogICAgICAgICAgICAgICAgICAgIGZvbnRzaXplPWZvbnRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICBzdHlsZT0ib2JsaXF1ZSIsCiAgICAgICAgICAgICAgICAgICAgaGE9ImxlZnQiLAogICAgICAgICAgICAgICAgICAgIHZhPSJib3R0b20iLAogICAgICAgICAgICAgICAgICAgIGNvbG9yPSJ3aGl0ZSIsCiAgICAgICAgICAgICAgICAgICAgYWxwaGE9MS4wLAogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgdGV4dF9heGVzLnRleHQoCiAgICAgICAgICAgICAgICBsZWZ0X29mZnNldCwKICAgICAgICAgICAgICAgIGJvdHRvbV9vZmZzZXQsCiAgICAgICAgICAgICAgICBzPXNlbnRlbmNlWzp0ZXh0X3Bvc10sCiAgICAgICAgICAgICAgICBmb250c2l6ZT1mb250X3NpemUsCiAgICAgICAgICAgICAgICBzdHlsZT0ib2JsaXF1ZSIsCiAgICAgICAgICAgICAgICBoYT0ibGVmdCIsCiAgICAgICAgICAgICAgICB2YT0iYm90dG9tIiwKICAgICAgICAgICAgICAgIGNvbG9yPSJ3aGl0ZSIsCiAgICAgICAgICAgICAgICBhbHBoYT1hbHBoYSwKICAgICAgICAgICAgKQogICAgICAgICAgICBpbSA9IGNvbnZlcnRfcGxvdF90b19pbWFnZShmaWd1cmUpCiAgICAgICAgICAgIHlpZWxkIGltCgogICAgIyBLZWVwIHRoZSBpbWFnZSBmb3IgdGhpcyBtYW55IGZyYW1lcwogICAgZm9yIGkgaW4gcmFuZ2UocGVyc2lzdF9mcmFtZXMpOgogICAgICAgIHlpZWxkIGltCgogICAgIyBGYWRlIG91dCB0aGUgaW1hZ2Ugb3ZlciB0aGlzIG1hbnkgZnJhbWVzCiAgICBmYWRlX291dF9hbHBoYSA9IG5wLnBvd2VyKG5wLmxpbnNwYWNlKDEsIDAsIGZhZGVfb3V0X2ZyYW1lcyksIDIpCiAgICBmb3IgYWxwaGEgaW4gZmFkZV9vdXRfYWxwaGE6CiAgICAgICAgZmlndXJlLmNsZWFyKCkKICAgICAgICB0ZXh0X2F4ZXMgPSBmaWd1cmUuYWRkX2F4ZXMoWzAuMCwgMC4wLCAxLjAsIDEuMF0pCiAgICAgICAgdGV4dF9heGVzLmF4aXMoIm9mZiIpCiAgICAgICAgdGV4dF9heGVzLnRleHQoCiAgICAgICAgICAgIGxlZnRfb2Zmc2V0LAogICAgICAgICAgICBib3R0b21fb2Zmc2V0LAogICAgICAgICAgICBzPXNlbnRlbmNlLAogICAgICAgICAgICBmb250c2l6ZT1mb250X3NpemUsCiAgICAgICAgICAgIHN0eWxlPSJvYmxpcXVlIiwKICAgICAgICAgICAgaGE9ImxlZnQiLAogICAgICAgICAgICB2YT0iYm90dG9tIiwKICAgICAgICAgICAgY29sb3I9IndoaXRlIiwKICAgICAgICAgICAgYWxwaGE9YWxwaGEsCiAgICAgICAgKQogICAgICAgIGltID0gY29udmVydF9wbG90X3RvX2ltYWdlKGZpZ3VyZSkKICAgICAgICB5aWVsZCBpbQoKICAgICMgU3RheSBibGFjayBmb3IgdGhlIHJlbWFpbmRlcgogICAgYmxhY2tfc2NyZWVuID0gbnAuYXJyYXkoaW0pCiAgICBibGFja19zY3JlZW5bOiwgOiwgOl0gPSAwCiAgICBpbSA9IEltYWdlLmZyb21hcnJheShibGFja19zY3JlZW4pCiAgICB3aGlsZSBUcnVlOgogICAgICAgIHlpZWxkIGltCgoKQGRhdGFjbGFzcwpjbGFzcyBGaXJlQXV0b21hdGE6CiAgICAiIiIKICAgIENsYXNzIGZvciByZXByZXNlbnRpbmcgYW5kIGFuaW1hdGluZyBhIGZpcmUgZWZmZWN0IGF1dG9tdGEKICAgICIiIgoKICAgIGhlaWdodDogaW50CiAgICB3aWR0aDogaW50CiAgICBkZWNheTogZmxvYXQKICAgIHNwYXduX3BvaW50czogaW50CiAgICBoZWF0bWFwOiBucC5uZGFycmF5ID0gZmllbGQoaW5pdD1GYWxzZSkKICAgIHNwYXduX2luZGljZXM6IG5wLm5kYXJyYXkgPSBmaWVsZChpbml0PUZhbHNlKQogICAgbm9uX3NwYXduX2luZGljZXM6IG5wLm5kYXJyYXkgPSBmaWVsZChpbml0PUZhbHNlKQogICAgZmxhbWVfYmFzZTogbnAubmRhcnJheSA9IGZpZWxkKGluaXQ9RmFsc2UpCiAgICBoZWlnaHRfbWF4X2luZGV4OiBpbnQgPSBmaWVsZChpbml0PUZhbHNlKQogICAgd2lkdGhfbWF4X2luZGV4OiBpbnQgPSBmaWVsZChpbml0PUZhbHNlKQoKICAgIGRlZiBfX3Bvc3RfaW5pdF9fKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIEluaXRpYWxpemUgdGhlIGNhbGN1bGF0ZWQgcHJvcGVydGllcwogICAgICAgICIiIgogICAgICAgIHNlbGYuaGVhdG1hcCA9IG5wLnplcm9zKChzZWxmLmhlaWdodCwgc2VsZi53aWR0aCkpCiAgICAgICAgaW5kaWNlcyA9IG5wLmFyYW5nZShzZWxmLndpZHRoKQogICAgICAgIHNlbGYuc3Bhd25faW5kaWNlcyA9IG5wLnJhbmRvbS5jaG9pY2UoaW5kaWNlcywgMjApCiAgICAgICAgc2VsZi5ub25fc3Bhd25faW5kaWNlcyA9IG5wLmRlbGV0ZShpbmRpY2VzLCBzZWxmLnNwYXduX3BvaW50cykKICAgICAgICBzZWxmLmZsYW1lX2Jhc2UgPSBucC56ZXJvcyhzZWxmLndpZHRoKQogICAgICAgIHNlbGYuaGVpZ2h0X21heF9pbmRleCA9IHNlbGYuaGVpZ2h0IC0gMQogICAgICAgIHNlbGYud2lkdGhfbWF4X2luZGV4ID0gc2VsZi53aWR0aCAtIDEKCiAgICBkZWYgdXBkYXRlX2hlYXRtYXAoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVXBkYXRlIHRoZSBmaXJlIGF1dG9tYXRhIGJ5IG9uZSBmcmFtZQogICAgICAgICIiIgogICAgICAgIHN3YXBfc3Bhd24gPSBucC5yYW5kb20ucmFuZGludChsZW4oc2VsZi5zcGF3bl9pbmRpY2VzKSkKICAgICAgICBzd2FwX25vbl9zcGF3biA9IG5wLnJhbmRvbS5yYW5kaW50KGxlbihzZWxmLm5vbl9zcGF3bl9pbmRpY2VzKSkKICAgICAgICBzZWxmLnNwYXduX2luZGljZXNbc3dhcF9zcGF3bl0sIHNlbGYubm9uX3NwYXduX2luZGljZXNbc3dhcF9ub25fc3Bhd25dID0gKAogICAgICAgICAgICBzZWxmLm5vbl9zcGF3bl9pbmRpY2VzW3N3YXBfbm9uX3NwYXduXSwKICAgICAgICAgICAgc2VsZi5zcGF3bl9pbmRpY2VzW3N3YXBfc3Bhd25dLAogICAgICAgICkKICAgICAgICBzZWxmLmZsYW1lX2Jhc2UgKj0gMAogICAgICAgIHNlbGYuZmxhbWVfYmFzZVtzZWxmLnNwYXduX2luZGljZXNdID0gMQogICAgICAgIHNlbGYuaGVhdG1hcFtzZWxmLmhlaWdodF9tYXhfaW5kZXgsIDpdID0gc2VsZi5mbGFtZV9iYXNlCgogICAgICAgIGRlbHRhID0gbnAucmFuZG9tLnJhbmRvbSgoc2VsZi5oZWlnaHRfbWF4X2luZGV4LCBzZWxmLndpZHRoLCAzKSkKICAgICAgICBkZWx0YVs6LCBzZWxmLndpZHRoX21heF9pbmRleCwgMF0gPSAwCiAgICAgICAgZGVsdGFbOiwgMCwgMl0gPSAwCiAgICAgICAgc2NhbGVkX2RlbHRhID0gZGVsdGEgLyBkZWx0YS5zdW0oYXhpcz0yKVs6LCA6LCBucC5uZXdheGlzXQogICAgICAgIGhlYXRtYXBfc291cmNlX3BhcnQgPSBucC56ZXJvcygoc2VsZi5oZWlnaHRfbWF4X2luZGV4LCBzZWxmLndpZHRoLCAzKSkKICAgICAgICBoZWF0bWFwX3NvdXJjZV9wYXJ0WzosIDogc2VsZi53aWR0aF9tYXhfaW5kZXgsIDBdID0gc2VsZi5oZWF0bWFwWwogICAgICAgICAgICAxIDogc2VsZi5oZWlnaHQsIDEgOiBzZWxmLndpZHRoCiAgICAgICAgXQogICAgICAgIGhlYXRtYXBfc291cmNlX3BhcnRbOiwgOiwgMV0gPSBzZWxmLmhlYXRtYXBbMSA6IHNlbGYuaGVpZ2h0LCA6XQogICAgICAgIGhlYXRtYXBfc291cmNlX3BhcnRbOiwgMSA6IHNlbGYud2lkdGgsIDJdID0gc2VsZi5oZWF0bWFwWwogICAgICAgICAgICAxIDogc2VsZi5oZWlnaHQsIDogc2VsZi53aWR0aF9tYXhfaW5kZXgKICAgICAgICBdCiAgICAgICAgc2VsZi5oZWF0bWFwWzogc2VsZi5oZWlnaHRfbWF4X2luZGV4LCA6XSA9ICgKICAgICAgICAgICAgaGVhdG1hcF9zb3VyY2VfcGFydCAqIHNjYWxlZF9kZWx0YQogICAgICAgICkuc3VtKGF4aXM9MikgKiBzZWxmLmRlY2F5CgoKZGVmIGRyYXdfZmlyZV9hdXRvbWF0YSgKICAgIGF4ZXNfZGltczogTGlzdFtmbG9hdF0sCiAgICBmYWRlX2luX2ZyYW1lczogaW50LAogICAgdXBkYXRlX2ZyYW1lczogaW50LAogICAgZmFkZV9vdXRfZnJhbWVzOiBpbnQsCikgLT4gR2VuZXJhdG9yW0ltYWdlLkltYWdlLCBOb25lLCBOb25lXToKICAgICIiIgogICAgR2VuZXJhdG9yIG1ldGhvZCBmb3IgcmVuZGVyaW5nIHRoZSBmaXJlIGF1dG9tYXRhCiAgICA6cGFyYW0gYXhlc19kaW1zOiBPZmZzZXQgYW5kIGRpbWVuc2lvbnMgb2YgdGhlIGF4ZXMKICAgIDpwYXJhbSBmYWRlX2luX2ZyYW1lczogTnVtYmVyIG9mIGZyYW1lcyB0byBmYWRlIGluIHRoZSBncmFwaGljCiAgICA6cGFyYW0gdXBkYXRlX2ZyYW1lczogTnVtYmVyIG9mIGZyYW1lcyB0byB1cGRhdGUgdGhlIGdyYXBoaWMKICAgIDpwYXJhbSBmYWRlX291dF9mcmFtZXM6IE51bWJlciBvZiBmcmFtZXMgdG8gZmFkZSBvdXQgdGhlIGdyYXBoaWMKICAgIDpyZXR1cm46IEdlbmVyYXRvciBmb3IgcHJvZHVjaW5nIFBJTCBJbWFnZSBmcmFtZXMKICAgICIiIgogICAgaW06IEltYWdlLkltYWdlID0gSW1hZ2UuZnJvbWFycmF5KG5wLnplcm9zKCgxLCAxLCA0KSwgZHR5cGU9bnAudWludDgpKQogICAgZmlyZV9hdXRvbWF0YSA9IEZpcmVBdXRvbWF0YShoZWlnaHQ9NjUsIHdpZHRoPTY0LCBkZWNheT0wLjk1LCBzcGF3bl9wb2ludHM9MjApCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGZpZ3VyZSA9IHBsdC5maWd1cmUoZmlnc2l6ZT0oMTkuMiwgMTAuOCkpCgogICAgZmFkZV9pbl9hbHBoYSA9IG5wLnBvd2VyKG5wLmxpbnNwYWNlKDAsIDEsIGZhZGVfaW5fZnJhbWVzKSwgMikKICAgIGZvciBhbHBoYSBpbiBmYWRlX2luX2FscGhhOgo8fGZpbV9lbmR8Pg=="]
["aee267d116252c4b25defe6ba0d9394907605350-4","aee267d116252c4b25defe6ba0d9394907605350","PHxmaW1fcHJlZml4fD4KIyBMSVNQLWxpa2UgY29ucyBzdHJ1Y3R1cmVzCgoKZGVmIGNvbnMoYSwgYik6CiAgICByZXR1cm4gKGEsIGIpCjx8ZmltX2hvbGV8PgoKCmRlZiBjYXIoYyk6CiAgICByZXR1cm4gY1swXQoKCmRlZiBjZHIoYyk6CiAgICByZXR1cm4gY1sxXQoKCiMgaGVscGVyIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBuZXN0ZWQgY29ucyBvdXQgb2YgbGlzdHMKCmRlZiBsKCpsc3QpOgogICAgaWYgbGVuKGxzdCkgPT0gMToKICAgICAgICByZXR1cm4gY29ucyhsc3RbMF0sICgpKQogICAgZWxzZToKICAgICAgICByZXR1cm4gY29ucyhsc3RbMF0sIGwoKmxzdFsxOl0pKQoKCiMgc2FtZSBhcyBJIGRpZCB3aXRoIG1pbmlrYW5yZW4KIwojICh2YXIgYykgYmVjb21lcyB2YXIoYykKIyAodmFyPyB4KSBiZWNvbWVzIGlzaW5zdGFuY2UoeCwgdmFyKQojICh2YXI9PyB4XzEgeF8yKSBiZWNvbWVzIHhfMSA9PSB4XzIKCmNsYXNzIHZhcjoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbmRleCk6CiAgICAgICAgc2VsZi5pbmRleCA9IGluZGV4CgogICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uob3RoZXIsIHZhcikgYW5kIHNlbGYuaW5kZXggPT0gb3RoZXIuaW5kZXgKCiAgICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5pbmRleCkKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgcmV0dXJuICI8JXM+IiAlIHNlbGYuaW5kZXgKCgpkZWYgaXNfdmFyKHYpOgogICAgcmV0dXJuIGlzaW5zdGFuY2UodiwgdmFyKQoKCiMgdGhpcyBhbHNvIHN0YXlzIHRoZSBzYW1lIGFzIHRoZSBweXRob24gZm9yIG1pbmlrYW5yZW4sIHVzaW5nIGEgZGljdGlvbmFyeQojIGZvciBzdWJzdGl0dXRpb25zCgpkZWYgd2Fsayh1LCBzKToKICAgIGlmIGlzaW5zdGFuY2UodSwgdmFyKToKICAgICAgICBhID0gcy5nZXQodSkKICAgICAgICBpZiBhOgogICAgICAgICAgICByZXR1cm4gd2FsayhhLCBzKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiB1CiAgICBlbHNlOgogICAgICAgIHJldHVybiB1CgoKZGVmIGV4dF9zKHgsIHYsIHMpOgogICAgcyA9IHMuY29weSgpCiAgICBzW3hdID0gdgogICAgcmV0dXJuIHMKCgojIGFnYWluLCB1bmlmeSBzdGF5cyB0aGUgc2FtZSBhcyB0aGUgcHl0aG9uIGZvciBtaW5pa2FucmVuCgpkZWYgdW5pZnkodSwgdiwgcyk6CiAgICB1ID0gd2Fsayh1LCBzKQogICAgdiA9IHdhbGsodiwgcykKICAgIGlmIGlzX3Zhcih1KSBhbmQgaXNfdmFyKHYpIGFuZCB1ID09IHY6CiAgICAgICAgcmV0dXJuIHMKICAgIGVsaWYgaXNfdmFyKHUpOgogICAgICAgIHJldHVybiBleHRfcyh1LCB2LCBzKQogICAgZWxpZiBpc192YXIodik6CiAgICAgICAgcmV0dXJuIGV4dF9zKHYsIHUsIHMpCiAgICBlbGlmIGlzX2NvbnModSkgYW5kIGlzX2NvbnModik6CiAgICAgICAgcyA9IHVuaWZ5KGNhcih1KSwgY2FyKHYpLCBzKQogICAgICAgIHQgPSB1bmlmeShjZHIodSksIGNkcih2KSwgcykKICAgICAgICByZXR1cm4gdCBpZiB0IGlzIG5vdCBGYWxzZSBlbHNlIHMKICAgIGVsaWYgdSA9PSB2OgogICAgICAgIHJldHVybiBzCiAgICBlbHNlOgogICAgICAgIHJldHVybiBGYWxzZQoKCiMgZm9yIG5vdyB3ZSdyZSBnb2luZyB0byB0cmVhdCBtemVybyBhcyAoKSBhbmQgKHVuaXQgeCkgYXMgKHgsICgpKQoKZGVmIGVxKHUsIHYpOgogICAgZGVmIGdvYWwoc3RhdGUpOgogICAgICAgIHMgPSB1bmlmeSh1LCB2LCBjYXIoc3RhdGUpKQogICAgICAgIGlmIHMgaXMgbm90IEZhbHNlOgogICAgICAgICAgICByZXR1cm4gKChzLCBjZHIoc3RhdGUpKSwgKCkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuICgpCgogICAgcmV0dXJuIGdvYWwKCgpkZWYgY2FsbF9mcmVzaChmKToKICAgIGRlZiBnb2FsKHN0YXRlKToKICAgICAgICBjID0gc3RhdGVbMV0KICAgICAgICByZXR1cm4gZih2YXIoYykpKChjYXIoc3RhdGUpLCBjICsgMSkpCgogICAgcmV0dXJuIGdvYWwKCgpFTVBUWV9TVEFURSA9IGNvbnMoe30sIDApCgoKZGVmIG1wbHVzKHN0cmVhbTEsIHN0cmVhbTIpOgogICAgaWYgc3RyZWFtMSA9PSAoKToKICAgICAgICByZXR1cm4gc3RyZWFtMgogICAgZWxpZiBjYWxsYWJsZShzdHJlYW0xKToKICAgICAgICByZXR1cm4gbGFtYmRhOiBtcGx1cyhzdHJlYW0yLCBzdHJlYW0xKCkpCiAgICBlbHNlOgogICAgICAgIHJldHVybiBjb25zKGNhcihzdHJlYW0xKSwgbXBsdXMoY2RyKHN0cmVhbTEpLCBzdHJlYW0yKSkKCgpkZWYgYmluZChzdHJlYW0sIGdvYWwpOgogICAgaWYgc3RyZWFtID09ICgpOgogICAgICAgIHJldHVybiAoKQogICAgZWxpZiBjYWxsYWJsZShzdHJlYW0pOgogICAgICAgIHJldHVybiBsYW1iZGE6IGJpbmQoc3RyZWFtKCksIGdvYWwpCiAgICBlbHNlOgogICAgICAgIHJldHVybiBtcGx1cyhnb2FsKGNhcihzdHJlYW0pKSwgYmluZChjZHIoc3RyZWFtKSwgZ29hbCkpCgoKZGVmIGRpc2ooZ29hbF8xLCBnb2FsXzIpOgogICAgZGVmIGdvYWwoc3RhdGUpOgogICAgICAgIHJldHVybiBtcGx1cyhnb2FsXzEoc3RhdGUpLCBnb2FsXzIoc3RhdGUpKQogICAgcmV0dXJuIGdvYWwKCgpkZWYgY29uaihnb2FsXzEsIGdvYWxfMik6CiAgICBkZWYgZ29hbChzdGF0ZSk6CiAgICAgICAgcmV0dXJuIGJpbmQoZ29hbF8xKHN0YXRlKSwgZ29hbF8yKQogICAgcmV0dXJuIGdvYWwKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgoKICAgIHMxID0ge3ZhcigwKTogNSwgdmFyKDEpOiBUcnVlfQogICAgczIgPSB7dmFyKDEpOiA1LCB2YXIoMCk6IHZhcigxKX0KCiAgICBhc3NlcnQgd2Fsayh2YXIoMCksIHMxKSA9PSA1CiAgICBhc3NlcnQgd2Fsayh2YXIoMCksIHMyKSA9PSA1CgogICAgYXNzZXJ0IHVuaWZ5KE5vbmUsIDEsIHt9KSBpcyBGYWxzZQogICAgYXNzZXJ0IHVuaWZ5KE5vbmUsIHZhcigwKSwge30pID09IHt2YXIoMCk6IE5vbmV9CiAgICBhc3NlcnQgdW5pZnkoTm9uZSwgWzEsIHZhcigwKV0sIHt9KSBpcyBGYWxzZQogICAgYXNzZXJ0IHVuaWZ5KDEsIE5vbmUsIHt9KSBpcyBGYWxzZQogICAgYXNzZXJ0IHVuaWZ5KDEsIDEsIHt9KSA9PSB7fQogICAgYXNzZXJ0IHVuaWZ5KDEsIDIsIHt9KSBpcyBGYWxzZQogICAgYXNzZXJ0IHVuaWZ5KDEsIHZhcigwKSwge30pID09IHt2YXIoMCk6IDF9CiAgICBhc3NlcnQgdW5pZnkoMSwgW10sIHt9KSBpcyBGYWxzZQogICAgYXNzZXJ0IHVuaWZ5KHZhcigwKSwgMSwge30pID09IHt2YXIoMCk6IDF9CiAgICBhc3NlcnQgdW5pZnkodmFyKDApLCB2YXIoMSksIHt9KSA9PSB7dmFyKDApOiB2YXIoMSl9CiAgICBhc3NlcnQgdW5pZnkodmFyKDApLCBbXSwge30pID09IHt2YXIoMCk6IFtdfQogICAgYXNzZXJ0IHVuaWZ5KHZhcigwKSwgbCgxLCAyLCAzKSwge30pID09IHt2YXIoMCk6IGwoMSwgMiwgMyl9CiAgICBhc3NlcnQgdW5pZnkobCgxLCAyLCAzKSwgbCgxLCAyLCAzKSwge30pID09IHt9CiAgICBhc3NlcnQgdW5pZnkobCgxLCAyLCAzKSwgbCgzLCAyLCAxKSwge30pIGlzIEZhbHNlCiAgICBhc3NlcnQgdW5pZnkobCh2YXIoMCksIHZhcigxKSksIGwoMSwgMiksIHt9KSA9PSB7dmFyKDApOiAxLCB2YXIoMSk6IDJ9CiAgICBhc3NlcnQgdW5pZnkobChsKDEsIDIpLCBsKDMsIDQpKSwgbChsKDEsIDIpLCBsKDMsIDQpKSwge30pID09IHt9CiAgICBhc3NlcnQgdW5pZnkobChsKHZhcigwKSwgMiksIGwoMywgNCkpLCBsKGwoMSwgMiksIGwoMywgNCkpLCB7fSkgPT0ge3ZhcigwKTogMX0KCiAgICBhc3NlcnQgdW5pZnkoKDEsICgyLCAoMywgNCkpKSwgKDEsICgyLCB2YXIoMCkpKSwge30pID09IHt2YXIoMCk6ICgzLCA0KX0KCiAgICBhc3NlcnQgdW5pZnkoe30sIHt9LCB7fSkgPT0ge30KCiAgICBhc3NlcnQgZXEoMSwgMSkoRU1QVFlfU1RBVEUpID09IChFTVBUWV9TVEFURSwgKCkpCiAgICBhc3NlcnQgZXEoMSwgMikoRU1QVFlfU1RBVEUpID09ICgpCgogICAgIyB0YWtlIGZ1bmN0aW9uCgogICAgZGVmIHRha2Uobiwgc3RyZWFtKToKICAgICAgICBpZiBuID09IDA6CiAgICAgICAgICAgIHJldHVybiAoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBjb25zKGNhcihzdHJlYW0pLCB0YWtlKG4gLSAxLCBjZHIoc3RyZWFtKSkpCgogICAgYXNzZXJ0IHRha2UoMCwgbCgxLCAyLCAzKSkgPT0gKCkKICAgIGFzc2VydCB0YWtlKDEsIGwoMSwgMiwgMykpID09ICgxLCAoKSkKICAgIGFzc2VydCB0YWtlKDIsIGwoMSwgMiwgMykpID09ICgxLCAoMiwgKCkpKQogICAgYXNzZXJ0IHRha2UoMywgbCgxLCAyLCAzKSkgPT0gKDEsICgyLCAoMywgKCkpKSkKCiAgICBkZWYgdGFrZV9hbGwoc3RyZWFtKToKICAgICAgICAjIGZvciBub3csIGJlY2F1c2Ugd2UncmUgbm90IHVzaW5nIHRydWUgc3RyZWFtcwogICAgICAgIHJldHVybiBzdHJlYW0KCiAgICAjIG1pY3JvS2FucmVuIHRlc3QgcHJvZ3JhbXMKCiAgICBhX2FuZF9iID0gY29uaigKICAgICAgICBjYWxsX2ZyZXNoKGxhbWJkYSBhOiBlcShhLCA3KSksCiAgICAgICAgY2FsbF9mcmVzaChsYW1iZGEgYjogZGlzaihlcShiLCA1KSwgZXEoYiwgNikpKQogICAgKQoKICAgIGZpdmVzID0gbGFtYmRhIHg6IGRpc2ooCiAgICAgICAgZXEoeCwgNSksCiAgICAgICAgbGFtYmRhIGFfYzogbGFtYmRhOiBmaXZlcyh4KShhX2MpCiAgICApCgogICAgYXBwZW5kbyA9IGxhbWJkYSBsLCBzLCBvdXQ6IGRpc2ooCiAgICAgICAgY29uaigKICAgICAgICAgICAgZXEoW10sIGwpLAogICAgICAgICAgICBlcShzLCBvdXQpLAogICAgICAgICksCiAgICAgICAgY2FsbF9mcmVzaCgKICAgICAgICAgICAgbGFtYmRhIGE6IGNhbGxfZnJlc2goCiAgICAgICAgICAgICAgICBsYW1iZGEgZDogY29uaigKICAgICAgICAgICAgICAgICAgICBlcSgoYSwgZCksIGwpLAogICAgICAgICAgICAgICAgICAgIGNhbGxfZnJlc2goCiAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSByZXM6IGNvbmooCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcSgoYSwgcmVzKSwgb3V0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBzX2M6IGxhbWJkYTogYXBwZW5kbyhkLCBzLCByZXMpKHNfYykKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKQogICAgICAgICkKCiAgICApCgogICAgIyBtaWNyb0thbnJlbiB0ZXN0cwoKICAgICMgc2Vjb25kLXNldCB0MQogICAgYXNzZXJ0IGNhcihjYWxsX2ZyZXNoKGxhbWJkYSBxOiBlcShxLCA1KSkoRU1QVFlfU1RBVEUpKSA9PSAoe3ZhcigwKTogNX0sIDEpCgogICAgIyBzZWNvbmQtc2V0IHQyCiAgICBhc3NlcnQgY2RyKGNhbGxfZnJlc2gobGFtYmRhIHE6IGVxKHEsIDUpKShFTVBUWV9TVEFURSkpID09ICgpCgogICAgIyBzZWNvbmQtc2V0IHQzCiAgICBhc3NlcnQgY2FyKGFfYW5kX2IoRU1QVFlfU1RBVEUpKSA9PSAoe3ZhcigwKTogNywgdmFyKDEpOiA1fSwgMikKCiAgICAjIHNlY29uZC1zZXQgdDMsIHRha2UKICAgIGFzc2VydCB0YWtlKDEsIGFfYW5kX2IoRU1QVFlfU1RBVEUpKSA9PSAoKHt2YXIoMCk6IDcsIHZhcigxKTogNX0sIDIpLCAoKSkKCiAgICAjIHNlY29uZC1zZXQgdDQKICAgIGFzc2VydCBjYXIoY2RyKGFfYW5kX2IoRU1QVFlfU1RBVEUpKSkgPT0gKHt2YXIoMCk6IDcsIHZhcigxKTogNn0sIDIpCgogICAgIyBzZWNvbmQtc2V0IHQ1CiAgICBhc3NlcnQgY2RyKGNkcihhX2FuZF9iKEVNUFRZX1NUQVRFKSkpID09ICgpCgogICAgIyB3aG8gY2FyZHMKICAgIGFzc2VydCB0YWtlKDEsIGNhbGxfZnJlc2gobGFtYmRhIHE6IGZpdmVzKHEpKShFTVBUWV9TVEFURSkpID09ICgoe3ZhcigwKTogNX0sIDEpLCAoKSkKCiAgICAjIHRha2UgMiBhLWFuZC1iIHN0cmVhbQogICAgYXNzZXJ0IHRha2UoMiwgYV9hbmRfYihFTVBUWV9TVEFURSkpID09ICgoe3ZhcigwKTogNywgdmFyKDEpOiA1fSwgMiksICgoe3ZhcigwKTogNywgdmFyKDEpOiA2fSwgMiksICgpKSkKCiAgICAjIHRha2UtYWxsIGEtYW5kLWIgc3RyZWFtCiAgICBhc3NlcnQgdGFrZV9hbGwoYV9hbmRfYihFTVBUWV9TVEFURSkpID09ICgoe3ZhcigwKTogNywgdmFyKDEpOiA1fSwgMiksICgoe3ZhcigwKTogNywgdmFyKDEpOiA2fSwgMiksICgpKSkKPHxmaW1fc3VmZml4fD4KCgpkZWYgaXNfY29ucyhjKToKICAgIHJldHVybiBpc2luc3RhbmNlKGMsIHR1cGxlKSBhbmQgbGVuKGMpID09IDIKPHxmaW1fZW5kfD4="]
["3b003f25479b088f39e9b99d6c1ec81c7dbc9315-2","3b003f25479b088f39e9b99d6c1ec81c7dbc9315","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIwojIENvcHlyaWdodCAoYykgMjAyMCBieSBDbGVtZW5zIFJhYmUgPGNsZW1lbnMucmFiZUBjbGVtZW5zcmFiZS5kZT4KIyBBbGwgcmlnaHRzIHJlc2VydmVkLgojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHZhZ3JhbmN5Q3RybCAoaHR0cHM6Ly9naXRodWIuY29tL3NlZXJhdmVuL3ZhZ3JhbmN5Q3RybCkKIyBhbmQgaXMgcmVsZWFzZWQgdW5kZXIgdGhlICJCU0QgMy1DbGF1c2UgTGljZW5zZSIuIFBsZWFzZSBzZWUgdGhlIExJQ0VOU0UgZmlsZQojIHRoYXQgaXMgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGlzIHBhY2thZ2UuCiMKIiIiUGFyc2VyIG9mIHRoZSBwcmludCBjb21tYW5kIG9mIHZhZ3JhbmN5Q3RybC4KCkF0dHJpYnV0ZXM6CiAgICBERVNDUklQVElPTiAoc3RyKTogVGhlIHVzYWdlIGRlc2NyaXB0aW9uIG9mIHRoZSBzdWJwYXJzZXIgZm9yIHRoZSBwcmludCBjb21tYW5kLgoiIiIKCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTW9kdWxlIEltcG9ydAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgb3MKaW1wb3J0IHN5cwoKZnJvbSAuLmNsaWVudCAgIGltcG9ydCBWYWdyYW5jeQoKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGUgVmFyaWFibGVzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KREVTQ1JJUFRJT04gPSAiIiIKR2V0IGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGJveGVzIG9uIHRoZSB2YWdyYW5jeSBzZXJ2ZXIuIFdpdGhvdXQgYW55IGFyZ3VtZW50cywKdGhlIG5hbWVzIG9mIGFsbCBib3hlcyBhcmUgcHJpbnRlZDoKICAlKHByb2cpcwoKWW91IGNhbiBhbHNvIGxpbWl0IHRoZSBsaXN0IGJ5IHNwZWNpZmlpbmcgYSBwYXR0ZXJuOgogICUocHJvZylzIGJhc2UvKjE4LjA0KgoKVXNpbmcgdGhlICctLXByb3ZpZGVyJyBvcHRpb24sIHlvdSBjYW4gbGltaXQgdGhlIG91dHB1dCBsaXN0IHRvIGEgY2VydGFpbgpwcm92aWRlciAodmlydHVhbGJveCwgbGlidmlydCksIGUuZy4sIGJ5IGxpc3Rpbmcgb25seSB2aXJ0dWFsYm94IGltYWdlczoKICAlKHByb2cpcyAtLXByb3ZpZGVyIHZpcnR1YWxib3gKClRvIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBib3hlcywgc3VjaCBhcyB0aGUgcHJvdmlkZXIsIHZlcnNpb25zLCBldGMuLAp5b3UgY2FuIHVzZSB0aGUgJy0tdmVyYm9zZScgb3B0aW9uOgogICUocHJvZylzIC0tdmVyYm9zZSBiYXNlLyoxOC4wNCoKClRvIHVzZSB0aGUgaW5mb3JtYXRpb24gaW4gYSBzY3JpcHQsIHlvdSBjYW4gc3BlY2lmaXkgdGhlICctLWN2cycgb3B0aW9uIHRvIGdldAphIGNvbW1hIHNlcGFyYXRlZCBsaXN0IGNvbnNpc3Rpbmcgb2Y6CiAtIG5hbWUgb2YgYm94IG9uIHZhZ3JhbmN5CiAtIHByb3ZpZGVyCiAtIGRpcmVjdG9yeSB0byB0aGUgYm94IGZpbGUgcmVsYXRpdmUgdG8gdGhlIHZhZ3JhbmN5IGZpbGUgc3RvcmUKIC0gbGF0ZXN0IHZlcnNpb24KIC0gbmV4dCB2ZXJzaW9uCgoKUmV0dXJuIGNvZGVzOgogMCAtIENvbW11bmljYXRpb24gd2FzIHN1Y2Nlc3NmdWxsLgogMSAtIENvbW11bmljYXRpb24gZmFpbGVkLgoiIiIKCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRXhwb3J0ZWQgRnVuY3Rpb25zCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmRlZiBleGVjX3ByaW50X2NtZChhcmdzKToKICAgICIiIkV4ZWN1dGUgdGhlIHByaW50IGNvbW1hbmQuCgogICAgQXJnczoKICAgICAgICBhcmdzOiBUaGUgYXJndW1lbnRzIG9iamVjdC4KICAgICIiIgogICAgdmFncmFuY3kgPSBWYWdyYW5jeShhcmdzLmJhc2VfdXJsKQogICAgYm94X2xpc3QgPSB2YWdyYW5jeS5nZXRfYm94ZXMoYXJncy5ib3hfbmFtZSwgYXJncy5wcm92aWRlcikKCiAgICBpZiBhcmdzLmNzdjoKICAgICAgICBmb3IgYm94IGluIGJveF9saXN0OgogICAgICAgICAgICBmb3IgcHJvdmlkZXIgaW4gc29ydGVkKGJveC5wcm92aWRlcl92ZXJzaW9uX21hcC5rZXlzKCkpOgogICAgICAgICAgICAgICAgbGF0ZXN0X3ZlcnNpb24gICA9IGJveC5wcm92aWRlcl9sYXRlc3RfdmVyc2lvbnNbcHJvdmlkZXJdCiAgICAgICAgICAgICAgICBuZXh0X3ZlcnNpb24gICAgID0gYm94LnByb3ZpZGVyX25leHRfdmVyc2lvbnNbcHJvdmlkZXJdCgogICAgICAgICAgICAgICAgaWYgbmV4dF92ZXJzaW9uIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgbmV4dF92ZXJzaW9uID0gJycKCiAgICAgICAgICAgICAgICBwcmludCgiJXMsJXMsJXMsJXMsJXMiICUgKGJveC5ib3hfbmFtZSwgcHJvdmlkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihib3guYm94X25hbWUsIGxhdGVzdF92ZXJzaW9uLCBwcm92aWRlciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdGVzdF92ZXJzaW9uLCBuZXh0X3ZlcnNpb24pKQogICAgICAgIHN5cy5leGl0KDApCgogICAgaWYgYXJncy52ZXJib3NlOgogICAgICAgIGZvciBib3ggaW4gYm94X2xpc3Q6CiAgICAgICAgICAgIHByaW50KCIlczoiICUgYm94LmJveF9uYW1lKQoKICAgICAgICAgICAgZm9yIHByb3ZpZGVyIGluIHNvcnRlZChib3gucHJvdmlkZXJfdmVyc2lvbl9tYXAua2V5cygpKToKICAgICAgICAgICAgICAgIGxhdGVzdF92ZXJzaW9uICAgPSBib3gucHJvdmlkZXJfbGF0ZXN0X3ZlcnNpb25zW3Byb3ZpZGVyXQogICAgICAgICAgICAgICAgbmV4dF92ZXJzaW9uICAgICA9IGJveC5wcm92aWRlcl9uZXh0X3ZlcnNpb25zW3Byb3ZpZGVyXQoKICAgICAgICAgICAgICAgIGlmIG5leHRfdmVyc2lvbiBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgIG5leHRfdmVyc2lvbiA9ICd1bmRlZmluZWQnCgogICAgICAgICAgICAgICAgcHJpbnQoIiBQcm92aWRlcjogICAgICAgICAgICVzIiAlIHByb3ZpZGVyKQogICAgICAgICAgICAgICAgcHJpbnQoIiBBdmFpbGFibGUgVmVyc2lvbnM6ICVzIiAlICcgJy5qb2luKHNvcnRlZChib3gudmVyc2lvbl9wcm92aWRlcl9tYXAua2V5cygpKSkpCiAgICAgICAgICAgICAgICBwcmludCgiIExhdGVzdCBWZXJzaW9uOiAgICAgJXMiICUgbGF0ZXN0X3ZlcnNpb24pCiAgICAgICAgICAgICAgICBwcmludCgiIE5leHQgVmVyc2lvbjogICAgICAgJXMiICUgbmV4dF92ZXJzaW9uKQogICAgICAgICAgICAgICAgcHJpbnQoIiBEb3dubG9hZCBVUkw6ICAgICAgICVzIiAlIG9zLnBhdGguam9pbihhcmdzLmJhc2VfdXJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3guYm94X25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdGVzdF92ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlcikpCiAgICAgICAgICAgICAgICBwcmludCgiIFVwbG9hZCBVUkw6ICAgICAgICAgJXMiICUgb3MucGF0aC5qb2luKGFyZ3MuYmFzZV91cmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveC5ib3hfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF92ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlcikpCiAgICAgICAgICAgICAgICBwcmludCgpCgogICAgICAgIHN5cy5leGl0KDApCgogICAgZm9yIGJveCBpbiBib3hfbGlzdDoKICAgICAgICBwcmludCgiJXMiICUgYm94LmJveF9uYW1lKQoKCmRlZiBnZXRfc3VicGFyc2VyX3ByaW50KHN1YnBhcnNlcnMpOgogICAgIiIiUmV0dXJuIHRoZSBzdWJwYXJzZXIgdG8gY29uZmlndXJlIGFuZCBoYW5kbGUgdGhlIHByaW50IGNvbW1hbmQuCjx8ZmltX2hvbGV8PgogICAgUmV0dXJuczoKICAgICAgICBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcjogVGhlIG5ldyBzdWJwYXJzZXIgb2JqZWN0LgogICAgIiIiCiAgICBwYXJzZXJfcHJpbnQgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoInByaW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwID0gIlByaW50IHRoZSBjb250ZW50cyBvZiB0aGUgdmFjcmFuY3kgc2VydmVyLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBERVNDUklQVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXJfY2xhc3MgPSBhcmdwYXJzZS5SYXdUZXh0SGVscEZvcm1hdHRlcikKCiAgICBwYXJzZXJfcHJpbnQuYWRkX2FyZ3VtZW50KCItcCIsICItLXByb3ZpZGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscCA9ICJPbmx5IHByaW50IGJveGVzIHRoYXQgaGF2ZSB0aGUgc3BlY2lmaWVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3ZpZGVyLCBlLmcuLCBsaWJ2aXJ0IG9yIHZpcnR1YWxib3guIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9ICIqIikKICAgIHBhcnNlcl9wcmludC5hZGRfYXJndW1lbnQoIi12IiwgIi0tdmVyYm9zZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscCA9ICJCZSB2ZXJib3NlIGFuZCBwcmludCBhbGwgYXZhaWxhYmxlICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluZm9ybWF0aW9uIGFib3V0IHRoZSBib3hlcy4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gRmFsc2UpCiAgICBwYXJzZXJfcHJpbnQuYWRkX2FyZ3VtZW50KCItLWNzdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscCA9ICJQcmludCBhIGNzdiBsaXN0IGluc3RlYWQgb2Ygb25seSB0aGUgbmFtZXMuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IEZhbHNlKQogICAgcGFyc2VyX3ByaW50LmFkZF9hcmd1bWVudCgiYm94X25hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwID0gIlByaW50IG9ubHkgbmFtZXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0dGVybi4gRGVmYXVsdDogJShkZWZhdWx0KXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gIioiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXJncyAgID0gIj8iKQogICAgcGFyc2VyX3ByaW50LnNldF9kZWZhdWx0cyhmdW5jID0gZXhlY19wcmludF9jbWQpCiAgICByZXR1cm4gcGFyc2VyX3ByaW50CgoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEVPRgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCjx8ZmltX3N1ZmZpeHw+CgogICAgQXJnczoKICAgICAgICBzdWJwYXJzZXJzOiBUaGUgc3VicGFyc2VycyBvYmplY3Qgb2YgdGhlIG1haW4gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuCgo8fGZpbV9lbmR8Pg=="]
["302ea6e9329f6c0ae29d92eddad323a0bbed7dd2-2","302ea6e9329f6c0ae29d92eddad323a0bbed7dd2","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBAZmlsZSBvc3RhcC9wbG90dGluZy9zdHlsZS5weQojIE9zdGFwIHN0eWxlIGZpbGUgZm9yIFJPT1QtcGxvdHMKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoiIiJPc3RhcCBTdHlsZSBmb3IgUk9PVC1wbG90cyIiIgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmltcG9ydCBST09UCmltcG9ydCBvc3RhcC5wbG90dGluZy5jb2xvciAKX19hbGxfXyA9ICgKICAgICdVc2VTdHlsZScgICAgICAgICAsICAjIyBjb250ZXh0IG1hbmFnZXIgIGZvciB0aGUgc3R5bGUgKGNsYXNzKSAKICAgICd1c2VTdHlsZScgICAgICAgICAsICAjIyBjb250ZXh0IG1hbmFnZXIgIGZvciB0aGUgc3R5bGUgKGZ1bmN0aW9uKQogICAgIyMKICAgICdTdHlsZScgICAgICAgICAgICAsICAjIyB0aGUgZGVmYXVsdCBPc3RhcCBzdHlsZSAKICAgICdvc3RhcF9sYWJlbCcgICAgICAsICAjIyB0aGUgc3R5bGUgZm9yIHRoZSB0ZXh0IAogICAgJ29zdGFwX2xhdGV4JyAgICAgICwgICMjIHRoZSBzdHlsZSBmb3IgTGFUZVggCiAgICAnb3N0YXBfZm9udCcgICAgICAgLCAgIyMgdGhlIGRlZmF1bHQgIGZvbnQgCiAgICAnb3N0YXBfbGluZV93aWR0aCcgLCAgIyMgdGhlIGRlZmF1bHQgIGZvbnQgCiAgICAnT3N0YXBTdHlsZScgICAgICAgLCAgIyMgdGhlIGZ1bmN0aW9uIHRvIGluc3RhbnRpYXRlIHRoZSBzdHlsZQogICAgIyMgCiAgICAnU3R5bGVaJyAgICAgICAgICAgLCAgIyMgdGhlIHN0eWxlIGZvciBDT0xaIHBsb3RzCiAgICAnU3R5bGUyJyAgICAgICAgICAgLCAgIyMgdGhlIHN0eWxlIGZvciBkb3duc2NhbGVkIDItaW4tcm93IHBsb3RzCiAgICAnU3R5bGUzJyAgICAgICAgICAgLCAgIyMgdGhlIHN0eWxlIGZvciBkb3duc2NhbGVkIDMtaW4tcm93IHBsb3RzCiAgICAnU3R5bGUyWicgICAgICAgICAgLCAgIyMgdGhlIHN0eWxlIGZvciBkb3duc2NhbGVkIDItaW4tcm93IENPTFogcGxvdHMKICAgICdTdHlsZTNaJyAgICAgICAgICAsICAjIyB0aGUgc3R5bGUgZm9yIGRvd25zY2FsZWQgMy1pbi1yb3cgQ09MWiBwbG90cwogICAgKQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgbG9nZ2luZyAKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpmcm9tIG9zdGFwLmxvZ2dlci5sb2dnZXIgaW1wb3J0IGdldExvZ2dlcgppZiAnX19tYWluX18nID09ICBfX25hbWVfXyA6IGxvZ2dlciA9IGdldExvZ2dlciggJ29zdGFwLnBsb3R0aW5nLnN0eWxlJyApCmVsc2UgICAgICAgICAgICAgICAgICAgICAgIDogbG9nZ2VyID0gZ2V0TG9nZ2VyKCBfX25hbWVfXyApCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZnJvbSBvc3RhcC5wbG90dGluZy5tYWtlc3R5bGVzIGltcG9ydCAoIG9zdGFwX2ZvbnQgICAgICAgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3N0YXBfbGFiZWwgICAgICAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvc3RhcF9saW5lX3dpZHRoICwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zdGFwX2xhdGV4ICAgICAgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3N0eWxlICAgICAgICApCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyMgdGhlIGRpY3Rpb25hcnkgb2Yga25vd24gIHN0eWxlcyAKc3R5bGVzID0ge30KCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyMgQ3JlYXRlIE9zdGFwLXN0eWxlIGZvciB0aGUgcGxvdHMKZGVmIE9zdGFwU3R5bGUgKCBuYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgLAogICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAsCiAgICAgICAgICAgICAgICAgbGluZV93aWR0aCAgPSBvc3RhcF9saW5lX3dpZHRoICwgCiAgICAgICAgICAgICAgICAgZm9udCAgICAgICAgPSBvc3RhcF9mb250ICAgICAgICwKICAgICAgICAgICAgICAgICBtYWtlTmV3ICAgICA9IEZhbHNlICAgICAgICAgICAgLAogICAgICAgICAgICAgICAgIGZvcmNlICAgICAgID0gVHJ1ZSAgICAgICAgICAgICAsCiAgICAgICAgICAgICAgICAgc2NhbGUgICAgICAgPSAxLjAgICAgICAgICAgICAgICwKICAgICAgICAgICAgICAgICBjb2x6ICAgICAgICA9IEZhbHNlICAgICAgICAgICAgKSA6CiAgICAiIiJDcmVhdGUgT3N0YXAtc3R5bGUgZm9yIHRoZSBwbG90cyAgICAKICAgICIiIgogICAgZ3Jvb3QgPSBST09ULlJPT1QuR2V0Uk9PVCgpIAogICAgb2JqICAgPSBncm9vdC5GaW5kT2JqZWN0ICAoIG5hbWUgKQogICAgaWYgb2JqIGFuZCBpc2luc3RhbmNlICggb2JqICwgUk9PVC5UU3R5bGUgKSBhbmQgbm90IG1ha2VOZXcgOiAKICAgICAgICBsb2dnZXIuaW5mbyAgICAgICAgICAgICAgICgnVGhlIHN0eWxlICVzIGlzIHJldXNlZCcgJSBvYmouR2V0TmFtZSgpICkKICAgICAgICBpZiBmb3JjZSA6CiAgICAgICAgICAgIG9iai5jZCAgICAgICAgICAgICAgICAoKSAKICAgICAgICAgICAgbG9nZ2VyLmluZm8gICAgICAgICAgICgnVGhlIHN0eWxlICVzIGlzIGZvcmNlZCcgJSBvYmouR2V0TmFtZSgpICkKICAgICAgICAgICAgZ3Jvb3QuU2V0U3R5bGUgICAoIG9iai5HZXROYW1lKCkgICkKICAgICAgICAgICAgZ3Jvb3QuRm9yY2VTdHlsZSAoICkKICAgICAgICByZXR1cm4gb2JqCgogICAgbmFtID0gbmFtZQogICAgaSAgID0gMQogICAgd2hpbGUgb2JqIDoKICAgICAgICBuYW0gID0gbmFtZSArICdfJWQnICUgaQogICAgICAgIG9iaiAgPSBncm9vdC5GaW5kT2JqZWN0ICggbmFtICkKICAgICAgICBpICAgKz0gMQoKICAgICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIyMgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gCiAgICBpbXBvcnQgb3N0YXAuY29yZS5jb25maWcgICAgICAgICBhcyBDT05GSUcKCiAgICBjb25maWcgPSB7fSAKICAgIGZvciBrZXkgaW4gQ09ORklHLmNvbmZpZyA6CiAgICAgICAgaWYgbm90IGtleS51cHBlcigpLnN0YXJ0c3dpdGgoJ1NUWUxFJykgOiBjb250aW51ZQogICAgICAgIHMgLCBjICwgbiA9IGtleS5wYXJ0aXRpb24oJzonKQogICAgICAgIGlmIG5vdCBjIDogY29udGludWUKICAgICAgICBuMSA9IG4uc3RyaXAoKQogICAgICAgIG4yID0gbmFtZS5zdHJpcCgpCiAgICAgICAgaWYgbjEgPT0gbjIgOgogICAgICAgICAgICBjb25maWcgPSBDT05GSUcuY29uZmlnW2tleV0KICAgICAgICAgICAgbG9nZ2VyLmluZm8gKCAnVXNlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gc3R5bGUgJXMnICUgbmFtZSApCiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgCiAgICBpbXBvcnQgb3N0YXAucGxvdHRpbmcubWFrZXN0eWxlcyBhcyBNUyAKICAgIHN0eWxlID0gTVMubWFrZV9vc3RhcF9zdHlsZSAoIG5hbWUgICAgICAgID0gbmFtICAgICAgICAgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbiAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnICAgICAgPSBjb25maWcgICAgICAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x6ICAgICAgICA9IGNvbHogICAgICAgICwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlICAgICAgID0gc2NhbGUgICAgICAgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udCAgICAgICAgPSBmb250ICAgICAgICAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX3dpZHRoICA9IGxpbmVfd2lkdGggICkKICAgICAgICAKICAgIGlmIGZvcmNlIDogCiAgICAgICAgc3R5bGUgLiBjZCgpIAogICAgICAgIGxvZ2dlci5kZWJ1ZyAoJ1RoZSBzdHlsZSAlcyBpcyBmb3JjZWQnICUgc3R5bGUuR2V0TmFtZSgpICkKICAgICAgICBncm9vdC5TZXRTdHlsZSAgICggc3R5bGUuR2V0TmFtZSgpICApCiAgICAgICAgZ3Jvb3QuRm9yY2VTdHlsZSAoKQogICAgICAgIAogICAgcmV0dXJuIHN0eWxlICAgICAKCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyMgc3R5bGUgZm9yIGhhbGYtcGFnZS13aWR0aCBDT0xaIHBsb3RzClN0eWxlMlogPSBPc3RhcFN0eWxlICgKICAgICdTdHlsZTJaJyAsCiAgICBkZXNjcmlwdGlvbiA9ICJTdHlsZSwgc3VpdGFibGUgdG8gcHJvZHVjZSBkb3duc2NhbGVkICgyLWluLXJvdykgcGxvdCB3aXRoIGxhcmdlIHJpZ2h0IG1hcmdpbiAoQ09MWikiLAogICAgc2NhbGUgICAgICAgPSAgMS40MSAsIG1ha2VOZXcgPSBUcnVlICwgY29seiA9IFRydWUgKQoKIyMgc3R5bGUgZm9yIG9uZS10aGlyZC1wYWdlLXdpZHRoIENPTFogcGxvdHMgClN0eWxlM1ogPSBPc3RhcFN0eWxlICgKICAgICdTdHlsZTNaJyAsCiAgICBkZXNjcmlwdGlvbiA9ICJTdHlsZSwgc3VpdGFibGUgdG8gcHJvZHVjZSBkb3duc2NhbGVkICgzLWluLXJvdykgcGxvdCB3aXRoIGxhcmdlIHJpZ2h0IG1hcmdpbiAoQ09MWikiLAogICAgc2NhbGUgICAgICAgPSAgMS43MSAsIG1ha2VOZXcgPSBUcnVlICwgY29seiA9IFRydWUgKQoKIyMgc3R5bGUgZm9yIHN0YW5kYXJkIENPTFogcGxvdHMgClN0eWxlWiAgPSBPc3RhcFN0eWxlICgKICAgICdTdHlsZTFaJyAsCiAgICBkZXNjcmlwdGlvbiA9ICJTdHlsZSwgc3VpdGFibGUgdG8gcHJvZHVjZSBwbG90IHdpdGggbGFyZ2UgcmlnaHQgbWFyZ2luIChDT0xaKSIsCiAgICBtYWtlTmV3ICAgICA9IFRydWUgLCBjb2x6ID0gVHJ1ZSApCgojIyBzdHlsZSBmb3IgaGFsZi1wYWdlLXdpZHRoIHBsb3RzIApTdHlsZTIgID0gT3N0YXBTdHlsZSAoCiAgICAnU3R5bGUyJyAsIAogICAgZGVzY3JpcHRpb24gPSAiU3R5bGUsIHN1aXRhYmxlIHRvIHByb2R1Y2UgZG93bnNjYWxlZCAoMi1pbi1yb3cpIHBsb3RzIiwKICAgIHNjYWxlICAgICAgID0gIDEuNDEgLCBtYWtlTmV3ID0gVHJ1ZSApCgojIyBzdHlsZSBmb3Igb25lLXRoaXJkLXBhZ2Utd2lkdGggcGxvdHMgClN0eWxlMyAgPSBPc3RhcFN0eWxlICgKICAgICdTdHlsZTMnICwKICAgIGRlc2NyaXB0aW9uID0gIlN0eWxlLCBzdWl0YWJsZSB0byBwcm9kdWNlIGRvd25zY2FsZWQgKDMtaW4tcm93KSBwbG90cyIsCiAgICBzY2FsZSAgICAgICA9ICAxLjcxICwgbWFrZU5ldyA9IFRydWUgKQoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMjIGRlZmF1bHQgc3R5bGUgClN0eWxlICAgICAgPSBPc3RhcFN0eWxlICgKICAgICdTdHlsZScgLAogICAgJ1RoZSBiYXNpYyBPc3RhcCBzdHlsZSBmb3IgcGxvdHMnICkKCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIyBkZWZhdWx0IHN0eWxlIApvc3RhcFN0eWxlID0gU3R5bGUKCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyMgVXNlIHNvbWUgKHRlbXBvcmFyeSkgc3R5bGUgICBhcyBjb250ZXh0IG1hbmFnZXIgCiMgIEBjb2RlCiMgIHdpdGggVXNlU3R5bGUgKCBsaGNiU3R5bGUyICkgOgojICAuLi4gICAgIGgxID0gLi4uCiMgIC4uLiAgICAgaDEuRHJhdygpIAojICBAZW5kY29kZQpjbGFzcyBVc2VTdHlsZShvYmplY3QpOgogICAgIiIiIFVzZSBzb21lICh0ZW1wb3JhcnkpIHN0eWxlICAgYXMgY29udGV4dCBtYW5hZ2VyIAogICAgPj4+IHdpdGggVXNlU3R5bGUgKCBsaGNiU3R5bGUyICkgOgogICAgLi4uICAgICBoMSA9IC4uLgogICAgLi4uICAgICBoMS5EcmF3KCkgCiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyAoIHNlbGYsIHN0eWxlID0gTm9uZSAsICoqY29uZmlnICkgOgogICAgICAgIAogICAgICAgIGlmICAgaXNpbnN0YW5jZSAoIHN0eWxlICwgaW50ICk6CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAgICAxICA9PSBzdHlsZSA6IHN0eWxlID0gU3R5bGUgCiAgICAgICAgICAgIGVsaWYgIDIgID09IHN0eWxlIDogc3R5bGUgPSBTdHlsZTIKICAgICAgICAgICAgZWxpZiAgMyAgPT0gc3R5bGUgOiBzdHlsZSA9IFN0eWxlMwogICAgICAgICAgICAKICAgICAgICBpZiBpc2luc3RhbmNlICggc3R5bGUgLCBzdHIgKToKICAgICAgICAgICAgCiAgICAgICAgICAgIGltcG9ydCBvc3RhcC5wbG90dGluZy5tYWtlc3R5bGVzIGFzIE1TCiAgICAgICAgICAgIGlmICAgc3R5bGUgaW4gTVMuU3R5bGVTdG9yZS5zdHlsZXMgOiBzdHlsZSA9IE1DLlN0eWxlU3RvcmUuc3R5bGVzIFsgc3R5bGUgXSAKICAgICAgICAgICAgZWxpZiBzdHlsZS51cHBlcigpIGluICggJycgLCAnMCcgLCAnMScgKSAgICA6IHN0eWxlID0gU3R5bGUgCiAgICAgICAgICAgIGVsaWYgJzInICA9PSBzdHlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdHlsZSA9IFN0eWxlMgogICAgICAgICAgICBlbGlmICczJyAgPT0gc3R5bGUgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3R5bGUgPSBTdHlsZTMKICAgICAgICAgICAgZWxpZiBzdHlsZS51cHBlcigpIGluICggJ1onICwgJzFaJyAsICdaMScgKSA6IHN0eWxlID0gU3R5bGVaIAogICAgICAgICAgICBlbGlmIHN0eWxlLnVwcGVyKCkgaW4gKCAgICAgICAnMlonICwgJ1oyJyApIDogc3R5bGUgPSBTdHlsZTJaIAogICAgICAgICAgICBlbGlmIHN0eWxlLnVwcGVyKCkgaW4gKCAgICAgICAnM1onICwgJ1ozJyApIDogc3R5bGUgPSBTdHlsZTNaIAoKICAgICAgICAjIyB1c2UgdGhlIHN0eWxlIGJ5IG5hbWUgCiAgICAgICAgaWYgaXNpbnN0YW5jZSAgICggc3R5bGUgLCBzdHIgKSA6CiAgICAgICAgICAgIGdyb290ICA9IFJPT1QuUk9PVC5HZXRST09UKCkKICAgICAgICAgICAgc3R5bGVzID0gZ3Jvb3QuR2V0TGlzdE9mU3R5bGVzKCkKICAgICAgICAgICAgZm9yIHMgaW4gc3R5bGVzIDoKICAgICAgICAgICAgICAgIGlmIHMuR2V0TmFtZSgpID09IHN0eWxlIDoKICAgICAgICAgICAgICAgICAgICBzdHlsZSA9IHMKICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgCiAgICAgICAgaWYgICBzdHlsZSBpcyBOb25lIDogc3R5bGUgPSBST09ULmdTdHlsZSAKICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlICAoIHN0eWxlICwgUk9PVC5UU3R5bGUgKSA6CiAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nICggJ05vIHZhbGlkIHN0eWxlICIlcyIgaXMgZm91bmQsIHVzZSBkZWZhdWx0IHN0eWxlJyAlIHN0eWxlICkKICAgICAgICAgICAgc3R5bGUgPSBvc3RhcFN0eWxlCgogICAgICAgIHNlbGYuX19uZXdfc3R5bGUgPSBzdHlsZQogICAgICAgIHNlbGYuX19vbGRfc3R5bGUgPSBOb25lIAoKICAgICAgICBzZWxmLl9fY29uZmlnICAgID0gY29uZmlnIAogICAgICAgIHNlbGYuX19jaGFuZ2VkICAgPSB7fQogICAgICAgIAogICAgIyMgY29udGV4dCAgbWFuYWdlcjogZW50ZXIgCiAgICBkZWYgX19lbnRlcl9fICggc2VsZiApICAgICAgOgogICAgICAgIAogICAgICAgIGdyb290ICA9IFJPT1QuUk9PVC5HZXRST09UKCkgICAgICAgIAogICAgICAgIHNlbGYuX19mb3JjZV9zdHlsZSA9IGdyb290LkdldEZvcmNlU3R5bGUoKQogICAgICAgIGlmIHNlbGYuX19uZXdfc3R5bGUgOiAKICAgICAgICAgICAgc2VsZi5fX29sZF9zdHlsZSA9IFJPT1QuZ1N0eWxlIAogICAgICAgICAgICBzZWxmLl9fbmV3X3N0eWxlLmNkICAgKCkKCiAgICAgICAgICAgIGlmIHNlbGYuX19jb25maWcgOgogICAgICAgICAgICAgICAgc2VsZi5fX2NoYW5nZWQgPSBzZXRfc3R5bGUgKCBzZWxmLl9fbmV3X3N0eWxlICwgc2VsZi5fX2NvbmZpZyApIAogICAgICAgICAgICAKICAgICAgICAgICAgZ3Jvb3QuRm9yY2VTdHlsZSAoIFRydWUgKQogICAgICAgICAgICBpZiBST09ULmdQYWQgOiBST09ULmdQYWQuVXNlQ3VycmVudFN0eWxlKCkKICAgICAgICAgICAgCiAgICAjIyBjb250ZXh0ICBtYW5hZ2VyOiBleGl0CiAgICBkZWYgX19leGl0X18gICggc2VsZiAsICpfICkgOgoKICAgICAgICBpZiBzZWxmLl9fY2hhbmdlZCA6CiAgICAgICAgICAgIHNlbGYuX19jaGFuZ2VkID0gc2V0X3N0eWxlICggc2VsZi5fX25ld19zdHlsZSAsIHNlbGYuX19jaGFuZ2VkICkgCiAgICAgICAgICAgIAogICAgICAgIGlmIHNlbGYuX19vbGRfc3R5bGU6IAogICAgICAgICAgICBzZWxmLl9fb2xkX3N0eWxlLmNkKCkKICAgICAgICAgICAgZ3Jvb3QgPSBST09ULlJPT1QuR2V0Uk9PVCgpICAgICAgICAKICAgICAgICAgICAgZ3Jvb3QuRm9yY2VTdHlsZSAoIHNlbGYuX19mb3JjZV9zdHlsZSApIAoKICAgICAgICBzZWxmLl9fbmV3X3N0eWxlID0gTm9uZQogICAgICAgIHNlbGYuX19vbGRfc3R5bGUgPSBOb25lCgogICAgQHByb3BlcnR5CiAgICBkZWYgbmV3X3N0eWxlICggc2VsZiApIDoKICAgICAgICAiYGBuZXdfc3R5bGUnJyA6IG5ldyBzdHlsZSIKICAgICAgICByZXR1cm4gc2VsZi5fX25ld19zdHlsZQogICAgCiAgICBAcHJvcGVydHkKICAgIGRlZiBvbGRfc3R5bGUgKCBzZWxmICkgOgogICAgICAgICJgYG9sZF9zdHlsZScnIDogb2xkIHN0eWxlIgogICAgICAgIHJldHVybiBzZWxmLl9fb2xkX3N0eWxlCgogICAgQHByb3BlcnR5CiAgICBkZWYgY29uZmlnICAgKCBzZWxmICkgOgogICAgICAgICIiImBgY29uZmlnJycgOiBhZGR0aW9uYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICIiIgogICAgICAgIHJldHVybiBzZWxmLl9fY29uZmlnCgogICAgQHByb3BlcnR5CiAgICBkZWYgY2hhbmdlZCAgICggc2VsZiApIDoKICAgICAgICAiIiJgYGNoYW5nZWQnJyA6IGNoYW5nZWQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICIiIgogICAgICAgIHJldHVybiBzZWxmLl9fY2hhbmdlZAogICAgCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyMgVXNlIHNvbWUgKHRlbXBvcmFyeSkgc3R5bGUgICBhcyBjb250ZXh0IG1hbmFnZXIgCiMgIEBjb2RlCiMgIHdpdGggdXNlU3R5bGUgKCBsaGNiU3R5bGUyICkgOgojICAuLi4gICAgIGgxID0gLi4uCiMgIC4uLiAgICAgaDEuRHJhdygpIAojICBAZW5kY29kZQpkZWYgdXNlU3R5bGUgKCBzdHlsZSA9IE5vbmUgLCAqKmNvbmZpZyAgKSA6CiAgICAiIiIgVXNlIHNvbWUgKHRlbXBvcmFyeSkgc3R5bGUgICBhcyBjb250ZXh0IG1hbmFnZXIgCjx8ZmltX2hvbGV8PgogICAgcmV0dXJuIFVzZVN0eWxlICggc3R5bGUgLCAqKmNvbmZpZyApCgogICAgCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KaWYgJ19fbWFpbl9fJyA9PSBfX25hbWVfXyA6CiAgICAgICAgIAogICAgZnJvbSBvc3RhcC51dGlscy5kb2NtZSBpbXBvcnQgZG9jbWUKICAgIGRvY21lICggX19uYW1lX18gLCBsb2dnZXIgPSBsb2dnZXIgKQogICAgCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIEVORCAKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo8fGZpbV9zdWZmaXh8PgogICAgPj4+IHdpdGggdXNlU3R5bGUgKCBTdHlsZTIgKSA6CiAgICAuLi4gICAgIGgxID0gLi4uCiAgICAuLi4gICAgIGgxLkRyYXcoKSAKICAgICIiIgo8fGZpbV9lbmR8Pg=="]
["d6fd5069adf192fef021d443b27c4a734efb33db-2","d6fd5069adf192fef021d443b27c4a734efb33db","PHxmaW1fcHJlZml4fD4KI1N0YW5kYXJkIE1vZHVsZXMKCgojM3JkIFBhcnRpZXMgTW9kdWxlcwppbXBvcnQgaWdyYXBoCgojTG9jYWwgTW9kdWxlcwoKCmNsYXNzIE5ldHdvcmtfR3JhcGgob2JqZWN0KToKCWRlZiBfX2luaXRfXyhzZWxmKToKCQkjIGNyZWF0ZSBhIGdyYXBoIGZyb20gaWdyYXBoCgkJc2VsZi5ncmFwaCA9IGlncmFwaC5HcmFwaChkaXJlY3RlZD1GYWxzZSkKCgkJIyBncmFwaCBzdHlsZQoJCXNlbGYudmlzdWFsX3N0eWxlID0ge30KCgoJZGVmIHNldHVwKHNlbGYsIGhlaWdodCA9IDEyODAsIHdpZHRoID0gODAwKToKCQkjIFNldCBiYm94IGFuZCBtYXJnaW4KCQlzZWxmLnZpc3VhbF9zdHlsZVsiYmJveCJdID0gKGhlaWdodCwgd2lkdGgpCgkJc2VsZi52aXN1YWxfc3R5bGVbIm1hcmdpbiJdID0gMjAKCQlzZWxmLnZpc3VhbF9zdHlsZVsiZWRnZV93aWR0aCJdID0gMQoJCSMgc2VsZi52aXN1YWxfc3R5bGVbInZlcnRleF9zaXplIl0gPSAwCgkJIyBzZWxmLnZpc3VhbF9zdHlsZVsibGF5b3V0Il0gPSAiY2lyY2xlIgoJCSMgc2VsZi52aXN1YWxfc3R5bGVbImxheW91dCJdID0gInRyZWUiCgoJCSMgRG9uJ3QgY3VydmUgdGhlIGVkZ2VzCgkJc2VsZi52aXN1YWxfc3R5bGVbImVkZ2VfY3VydmVkIl0gPSBGYWxzZQoKCWRlZiB1cGRhdGVfbm9kZV9zaXplKHNlbGYsIF9pZCwgc2l6ZSA9IC0xKToKPHxmaW1faG9sZXw+CgoJZGVmIGdldF9ub2RlX3NpemUoc2VsZiwgX2lkKToKCQlyZXR1cm4gc2VsZi52aXN1YWxfc3R5bGVbInZlcnRleF9zaXplIl1bX2lkXQoKCWRlZiBhZGRfbm9kZShzZWxmLCB2ZXJ0aWNlc19uYW1lLCBjb2xvciA9IE5vbmUpOgoJCSMgc2VsZi5ncmFwaC52c1sibmFtZSJdLmFwcGVuZCh2ZXJ0aWNlc19uYW1lKQoJCXNlbGYuZ3JhcGguYWRkX3ZlcnRleCgpCgkJIyBzZXQgdGhlIG5hbWUgb2YgdGhlIHZlcnNpdHkKCQkjIHNlbGYuZ3JhcGgudnNbc2VsZi5nZXRfbm9kZXNfY291bnQoKS0xXVsibGFiZWwiXSA9IHZlcnRpY2VzX25hbWUKCQlpZiBub3QgInZlcnRleF9zaXplIiBpbiBzZWxmLnZpc3VhbF9zdHlsZToKCQkJc2VsZi52aXN1YWxfc3R5bGVbInZlcnRleF9zaXplIl0gPSBbMV0KCQllbHNlOgoJCQlzZWxmLnZpc3VhbF9zdHlsZVsidmVydGV4X3NpemUiXS5hcHBlbmQoMSkKCgkJaWYgY29sb3I6CgkJCWlmIG5vdCAidmVydGV4X2NvbG9yIiBpbiBzZWxmLnZpc3VhbF9zdHlsZToKCQkJCXNlbGYudmlzdWFsX3N0eWxlWyJ2ZXJ0ZXhfY29sb3IiXSA9IFtjb2xvcl0KCQkJZWxzZToKCQkJCXNlbGYudmlzdWFsX3N0eWxlWyJ2ZXJ0ZXhfY29sb3IiXS5hcHBlbmQoY29sb3IpCgoJZGVmIHJlbW92ZV9ub2RlKHNlbGYsIF9pZCk6CgkJc2VsZi52aXN1YWxfc3R5bGVbInZlcnRleF9zaXplIl0gPSBzZWxmLnZpc3VhbF9zdHlsZVsidmVydGV4X3NpemUiXVs6X2lkXSArIHNlbGYudmlzdWFsX3N0eWxlWyJ2ZXJ0ZXhfc2l6ZSJdW19pZCsxOl0KCQlzZWxmLnZpc3VhbF9zdHlsZVsidmVydGV4X2NvbG9yIl0gPSBzZWxmLnZpc3VhbF9zdHlsZVsidmVydGV4X2NvbG9yIl1bOl9pZF0gKyBzZWxmLnZpc3VhbF9zdHlsZVsidmVydGV4X2NvbG9yIl1bX2lkKzE6XQoJCQoJCXNlbGYuZ3JhcGguZGVsZXRlX3ZlcnRpY2VzKF9pZCkKCglkZWYgcmVtb3ZlX25vZGVzKHNlbGYsIF9pZHMpOgoJCXNlbGYudmlzdWFsX3N0eWxlWyJ2ZXJ0ZXhfc2l6ZSJdID0gW3NpemUgZm9yIF9pZCwgc2l6ZSBpbiBlbnVtZXJhdGUoc2VsZi52aXN1YWxfc3R5bGVbInZlcnRleF9zaXplIl0pIGlmIG5vdCBfaWQgaW4gX2lkc10KCQlzZWxmLnZpc3VhbF9zdHlsZVsidmVydGV4X2NvbG9yIl0gPSBbY29sb3IgZm9yIF9pZCwgY29sb3IgaW4gZW51bWVyYXRlKHNlbGYudmlzdWFsX3N0eWxlWyJ2ZXJ0ZXhfY29sb3IiXSkgaWYgbm90IF9pZCBpbiBfaWRzXQoKCQlzZWxmLmdyYXBoLmRlbGV0ZV92ZXJ0aWNlcyhfaWRzKQoKCWRlZiBhZGRfZWRnZShzZWxmLCBzb3VyY2UsIGRlc3QpOgoJCXNlbGYuZ3JhcGguYWRkX2VkZ2VzKFsoc291cmNlLCBkZXN0KV0pCgkJCglkZWYgYWRkX2VkZ2VzKHNlbGYsIGVkZ2VzX2xpc3QpOgoJCXNlbGYuZ3JhcGguYWRkX2VkZ2VzKGVkZ2VzX2xpc3QpCgoJZGVmIHJlbW92ZV9lZGdlKHNlbGYpOgoJCXBhc3MKCglkZWYgZ2V0X25vZGVzX2NvdW50KHNlbGYpOgoJCXJldHVybiBsZW4oc2VsZi5ncmFwaC52cykKCglkZWYgZ2V0X2VkZ2VzX2NvdW50KHNlbGYpOgoJCXJldHVybiBsZW4oc2VsZi5ncmFwaC5lcykKCglkZWYgcGxvdF9ncmFwaChzZWxmKToKCQlpZiBzZWxmLnZpc3VhbF9zdHlsZToKCQkJIyBmaW5hbGx5IGdyYXBoIGl0CgkJCWlncmFwaC5wbG90KHNlbGYuZ3JhcGgsICoqc2VsZi52aXN1YWxfc3R5bGUpCgkJZWxzZToKCQkJaWdyYXBoLnBsb3Qoc2VsZi5ncmFwaCkKCglkZWYgZWRnZV9iZXR3ZWVubmVzc19kZXRlY3Rpb24oc2VsZik6CgkJY29tbXVuaXRpZXMgPSBzZWxmLmdyYXBoLmNvbW11bml0eV9lZGdlX2JldHdlZW5uZXNzKGRpcmVjdGVkPUZhbHNlKQoJCWNsdXN0ZXJzID0gY29tbXVuaXRpZXMuYXNfY2x1c3RlcmluZygpCgoJCSMgU2V0IGVkZ2Ugd2VpZ2h0cyBiYXNlZCBvbiBjb21tdW5pdGllcwoJCXdlaWdodHMgPSB7djogbGVuKGMpIGZvciBjIGluIGNsdXN0ZXJzIGZvciB2IGluIGN9CgkJc2VsZi5ncmFwaC5lc1sid2VpZ2h0Il0gPSBbd2VpZ2h0c1tlLnR1cGxlWzBdXSArIHdlaWdodHNbZS50dXBsZVsxXV0gZm9yIGUgaW4gc2VsZi5ncmFwaC5lc10KCgoJCWlmIHNlbGYudmlzdWFsX3N0eWxlOgoJCQkjIGZpbmFsbHkgZ3JhcGggaXQKCQkJaWdyYXBoLnBsb3Qoc2VsZi5ncmFwaCwgKipzZWxmLnZpc3VhbF9zdHlsZSkKCQllbHNlOgoJCQlpZ3JhcGgucGxvdChzZWxmLmdyYXBoKQoKCgoKCjx8ZmltX3N1ZmZpeHw+CgkJaWYgc2l6ZSA9PSAtMToKCQkJc2VsZi52aXN1YWxfc3R5bGVbInZlcnRleF9zaXplIl1bX2lkXSArPSAxCgkJZWxzZToKCQkJc2VsZi52aXN1YWxfc3R5bGVbInZlcnRleF9zaXplIl1bX2lkXSA9IHNpemUKPHxmaW1fZW5kfD4="]
["baffb4f7371c78db0069cca46e1f1607d1744adf-2","baffb4f7371c78db0069cca46e1f1607d1744adf","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQganNvbgoKaW1wb3J0IGFyZ3BhcnNlCmZyb20gZmxhc2sgaW1wb3J0IEZsYXNrLCBtYWtlX3Jlc3BvbnNlLCByZW5kZXJfdGVtcGxhdGUKCmltcG9ydCBhcHBfY29uZmlnCmZyb20gcmVuZGVyX3V0aWxzIGltcG9ydCBtYWtlX2NvbnRleHQsIHNtYXJ0eV9maWx0ZXIsIHVybGVuY29kZV9maWx0ZXIKaW1wb3J0IHN0YXRpYwoKYXBwID0gRmxhc2soX19uYW1lX18pCgphcHAuYWRkX3RlbXBsYXRlX2ZpbHRlcihzbWFydHlfZmlsdGVyLCBuYW1lPSdzbWFydHknKQphcHAuYWRkX3RlbXBsYXRlX2ZpbHRlcih1cmxlbmNvZGVfZmlsdGVyLCBuYW1lPSd1cmxlbmNvZGUnKQoKIyBFeGFtcGxlIGFwcGxpY2F0aW9uIHZpZXdzCkBhcHAucm91dGUoJy8nKQpkZWYgaW5kZXgoKToKICAgICIiIgogICAgRXhhbXBsZSB2aWV3IGRlbW9uc3RyYXRpbmcgcmVuZGVyaW5nIGEgc2ltcGxlIEhUTUwgcGFnZS4KICAgICIiIgogICAgY29udGV4dCA9IG1ha2VfY29udGV4dCgpCgogICAgd2l0aCBvcGVuKCdkYXRhL2ZlYXR1cmVkLmpzb24nKSBhcyBmOgogICAgICAgIGNvbnRleHRbJ2ZlYXR1cmVkJ10gPSBqc29uLmxvYWQoZikKCiAgICB3aXRoIG9wZW4oJ2RhdGEvc29uZ3MuanNvbicpIGFzIGY6CiAgICAgICAgY29udGV4dFsnc29uZ19kYXRhJ10gPSBmLnJlYWQoKQogICAgICAgIGNvbnRleHRbJ3RvdGFsX3NvbmdzJ10gPSBsZW4oanNvbi5sb2Fkcyhjb250ZXh0Wydzb25nX2RhdGEnXSkpCgogICAgcmV0dXJuIG1ha2VfcmVzcG9uc2UocmVuZGVyX3RlbXBsYXRlKCdpbmRleC5odG1sJywgKipjb250ZXh0KSkKCkBhcHAucm91dGUoJy9zZWFtdXMnKQpkZWYgc2VhbXVzKCk6CiAgICAiIiIKICAgIFByZXZpZXcgZm9yIFNlYW11cyBwYWdlCiAgICAiIiIKICAgIGNvbnRleHQgPSBtYWtlX2NvbnRleHQoKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgIyBSZWFkIHRoZSBib29rcyBKU09OIGludG8gdGhlIHBhZ2UuCiAgICB3aXRoIG9wZW4oJ2RhdGEvc29uZ3MuanNvbicsICdyYicpIGFzIHJlYWRmaWxlOgogICAgICAgIHNvbmdzX2RhdGEgPSBqc29uLmxvYWQocmVhZGZpbGUpCjx8ZmltX2VuZHw+"]
["747d9fbc2a97ea6c0e147ae7a016a59f25fd60a0-4","747d9fbc2a97ea6c0e147ae7a016a59f25fd60a0","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiIFNvcnRzIGRiIHRhYmxlcyBpbiB0b3BvbG9naWNhbCBvcmRlciBvZiB0aGVpciBjb25zdHJhaW50IGdyYXBoLgoKUmVhZHMgYSBjb2xsZWN0aW9uIG9mIFdlYjJweSAudGFibGUgZmlsZXMgb3IgU0hPVyBDUkVBVEUgVEFCTEUgaW5mbyBmcm9tCk15U1FMLCBleHRyYWN0cyB0aGUgZm9yZWlnbiBrZXkgY29uc3RyYWludHMsIGZvcm1zIHRoZSB0YWJsZXMgYW5kIHRoZWlyCmRlcGVuZGVuY2llcyBpbnRvIGEgZGlyZWN0ZWQgZ3JhcGgsIHZlcmlmaWVzIHRoYXQgdGhlIGdyYXBoIGhhcyBubyBjeWNsZXMsCmRvZXMgYSB0b3BvbG9naWNhbCBzb3J0LCBhbmQgc3VwcGxpZXMgdGhlIHRhYmxlcyBpbiBvcmRlciwgd2l0aCB0aGUKbm9uLWRlcGVuZGVudCB0YWJsZXMgYXQgdGhlIGZyb250LiAgQ2FuIGJlIHJ1biBhcyBhIHNjcmlwdCBvciBjYWxsZWQgYXMKYSBmdW5jdGlvbi4KCklmIHRoZSB0YWJsZXMgYXJlIGR1bXBlZCBpbiB0aGlzIG9yZGVyLCByZWFkaW5nIHRoZW0gYmFjayBpbiB3aWxsIG5vdApjYXVzZSBjb25zdHJhaW50IGVycm9ycy4gIFRoZSByZXZlcnNlIG9yZGVyIChtb3N0IGRlcGVuZGVudCB0byBsZWFzdCkgaXMKdGhlIGFwcHJvcHJpYXRlIG9yZGVyIGluIHdoaWNoIHRvIGFsdGVyIHRhYmxlcyB0byBmaXQgYSBuZXcgc2NoZW1hLgoKTm90ZSBkbyBub3QgZGVmaW5lIGEgdGFibGUgb3IgZmllbGQgbmFtZWQgKHVwcGVyY2FzZSkgUkVGRVJFTkNFUyAtLSBhbGwKdGhlIGZvcm1zIG9mIHNjaGVtYSBpbmZvIHVzZSB0aGF0IGFzIGEga2V5d29yZC4KClVzZXMgTEFOTCBOZXR3b3JrWCBmb3IgZ3JhcGggYWxnb3JpdGhtcy4gIFdvcmtzIHdpdGggdjEuMyBvciB2MS4yIC0tIHRoZQpsYXR0ZXIgaXMgdXNhYmxlIHVuZGVyIFB5dGhvbiAyLjUsIHdoZXJlIHYxLjMgcmVxdWlyZXMgUHl0aG9uIDIuNiBvciBhYm92ZS4KTmV0d29ya1ggc2l0ZTogaHR0cDovL25ldHdvcmt4LmxhbmwuZ292L2luZGV4Lmh0bWwKR2V0IG9sZGVyIHZlcnNpb25zIGZyb206IGh0dHA6Ly9uZXR3b3JreC5sYW5sLmdvdi9kb3dubG9hZC9uZXR3b3JreC8KIiIiCgppbXBvcnQgc3lzLCBvcywgb3MucGF0aCwgc3RyaW5nCmltcG9ydCBuZXR3b3JreCBhcyBueAoKIyBUYWJsZXMgYXJlIG5vZGVzIGluIHRoZSBncmFwaCwgYW5kIGNvbnN0cmFpbnRzIGFyZSBlZGdlcyB0aGF0IHBvaW50IGZyb20KIyB0aGUgZGVwZW5kZW50IHRhYmxlIHRvIHRoZSBwcmltYXJ5IHRhYmxlLgoKY2xhc3MgT3JkZXJUYWJsZXM6CiAgICAiIiIgU29ydHMgdGFibGVzIGluIG9yZGVyIGJ5IGNvbnN0cmFpbnRzLCBsZWFzdCBjb25zdHJhaW5lZCBmaXJzdAoKICAgIFRoZSBiYXNlIGNsYXNzIGlzIG5vdCBpbnN0YW50aWF0ZWQgLS0gc2VlIHN1YmNsYXNzZXMuCiAgICAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5ncmFwaCA9IG54LkRpR3JhcGgoKQogICAgICAgIHNlbGYudHJhbnNfdGJsID0gc3RyaW5nLm1ha2V0cmFucygiKClgJywiLCAiICAgICAiKSAgIyBmb3IgY2xlYW51cCgpCgogICAgZGVmIGNsZWFudXAoc2VsZiwgbGluZSk6CiAgICAgICAgIiIiIFJlcGxhY2VzIGFzc29ydGVkIHB1bmN0dWF0aW9uIHdpdGggc3BhY2UuICIiIgoKICAgICAgICByZXR1cm4gbGluZS50cmFuc2xhdGUoc2VsZi50cmFuc190YmwpCgogICAgZGVmIGFkZF90YWJsZV90b19ncmFwaChzZWxmLCB0YWJsZV9pZCk6CiAgICAgICAgIiIiIkFkZHMgbm9kZXMgYW5kIGVkZ2VzIGV4dHJhY3RlZCBmcm9tIG9uZSB0YWJsZSdzIHNjaGVtYQoKICAgICAgICBBZGRzIHRoZSB0YWJsZSBuYW1lLCBhbmQgdGhlIG5hbWVzIG9mIG90aGVyIHRhYmxlcyBmb3VuZCBpbgogICAgICAgIGNvbnN0cmFpbnRzLCBhcyBub2RlcyB0byB0aGUgc3VwcGxpZWQgZ3JhcGguCiAgICAgICAgQWRkcyBjb25zdHJhaW50cyBhcyBlZGdlcywgcG9pbnRpbmcgZnJvbSBwcmltYXJ5IHRvIGRlcGVuZGVudCB0YWJsZS4KCiAgICAgICAgQHBhcmFtIHRhYmxlX2lkOiB0YWJsZSBpZGVudGlmaWVyLCBhcyBuZWVkZWQgYnkgc3ViY2xhc3MgbWV0aG9kCiAgICAgICAgZ2V0X3RhYmxlX2luZm8odGFibGVfaWQpLgogICAgICAgICIiIgoKICAgICAgICAodGFibGVfbmFtZSwgY29uc3RyYWludF9pdGVyKSA9IHNlbGYuZ2V0X3RhYmxlX2luZm8odGFibGVfaWQpCgogICAgICAgICMgQWRkIHRoZSB0YWJsZSBuYW1lIGFzIGEgbm9kZS4KICAgICAgICBzZWxmLmdyYXBoLmFkZF9ub2RlKHRhYmxlX25hbWUpICAjIGRvZXMgbm90aGluZyBpZiBuYW1lIGFscmVhZHkgaW4gZ3JhcGgKCiAgICAgICAgIyBTdGVwIHRocm91Z2ggY29uc3RyYWludHMsIGFkZCB0aGUgcHJpbWFyeSB0YWJsZSBhcyBhIG5vZGUsCiAgICAgICAgIyBhbmQgYWRkIGFuIGVkZ2UgZnJvbSB0aGUgcHJpbWFyeSB0byB0aGlzIHRhYmxlLiAgKGFkZF9lZGdlIHdpbGwKICAgICAgICAjIGFkZCBub2RlcyBpZiBub3QgaW4gZ3JhcGguKQogICAgICAgIGZvciBwcmltYXJ5X25hbWUgaW4gY29uc3RyYWludF9pdGVyKCk6CiAgICAgICAgICAgICMgU2VsZi1yZWZlcmVuY2VzIGFyZSBvaywgc28gZXhjbHVkZSB0aG9zZS4KICAgICAgICAgICAgaWYgdGFibGVfbmFtZSAhPSBwcmltYXJ5X25hbWU6CiAgICAgICAgICAgICAgICBzZWxmLmdyYXBoLmFkZF9lZGdlKHByaW1hcnlfbmFtZSwgdGFibGVfbmFtZSkKCiAgICBkZWYgb3JkZXJfdGFibGVzKHNlbGYpOgogICAgICAgICIiIiBTb3J0cyB0YWJsZXMgaW4gY29uc3RyYWludCBvcmRlciwgbGVhc3QgY29uc3RyYWluZWQgdGFibGVzIGZpcnN0CgogICAgICAgIENvbnN0cnVjdHMgYSBjb25zdHJhaW50IGdyYXBoIGZvciB0aGUgdGFibGVzIGluIHRoZSBzdXBwbGllZCBkYXRhYmFzZQogICAgICAgIG9yIGRhdGFiYXNlcyBkaXJlY3RvcnksIHNvcnRzIGl0IGluIHRvcG9sb2dpY2FsIG9yZGVyIHdpdGggdGhlIGxlYXN0CiAgICAgICAgY29uc3RhaW5lZCB0YWJsZXMgZmlyc3QsIGFuZCByZXR1cm5zIHRoZSB0YWJsZSBuYW1lcyBpbiB0aGF0IG9yZGVyIGluCiAgICAgICAgYSBsaXN0LgogICAgICAgICIiIgoKICAgICAgICBzZWxmLmFkZF9hbGxfdGFibGVzX3RvX2dyYXBoKCkKCiAgICAgICAgIyBXaXRoIE5ldHdvcmtYIHYxLjMsIHRvcG9sb2dpY2FsX3NvcnQgcmFpc2VzIE5ldHdvcmtYVW5mZWFzaWJsZSBpZgogICAgICAgICMgdGhlIGdyYXBoIGlzIG5vdCBhY3ljbGljLiAgV2l0aCB2MS4yLCBpdCByZXR1cm5zIE5vbmUuCiAgICAgICAgb3JkZXJlZF90YWJsZXMgPSBOb25lCiAgICAgICAgdHJ5OgogICAgICAgICAgICBvcmRlcmVkX3RhYmxlcyA9IG54LnRvcG9sb2dpY2FsX3NvcnQoc2VsZi5ncmFwaCkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIG9yZGVyZWRfdGFibGVzID0gTm9uZQogICAgICAgIGlmIG5vdCBvcmRlcmVkX3RhYmxlczoKICAgICAgICAgICAgIyBGYWlscyBvbmx5IGlmIHRoZSBncmFwaCBoYXMgY3ljbGVzLgogICAgICAgICAgICAjIFRoZSBOZXR3b3JrWCBwYWNrYWdlIGRvZXMgbm90IGluY2x1ZGUgYSBmdW5jdGlvbiB0aGF0IGZpbmRzCiAgICAgICAgICAgICMgY3ljbGVzIGluIGEgZGlyZWN0ZWQgZ3JhcGguICBMYWNraW5nIHRoYXQsIHJlcG9ydCB0aGUgdW5kaXJlY3RlZAogICAgICAgICAgICAjIGN5Y2xlcy4gIFNpbmNlIG91ciB0YWJsZXMgY3VycmVudGx5IGNvbnRhaW4gbm8gY3ljbGVzIG90aGVyIHRoYW4KICAgICAgICAgICAgIyBzZWxmLWxvb3BzLCBubyBuZWVkIHRvIGltcGxlbWVudCBhIGRpcmVjdGVkIGN5Y2xlIGZpbmRlci4KICAgICAgICAgICAgIyBAVG9EbzogQWRkIGEgd2FybmluZyB0byB0aGUgd2lraSBhYm91dCBub3QgcHV0dGluZyBjeWNsZXMgaW4KICAgICAgICAgICAgIyB0YWJsZSByZWxhdGlvbnNoaXBzLiAgSXQncyBuZXZlciBuZWNlc3NhcnkgLS0gc2hvdyBhIHByb3BlcgogICAgICAgICAgICAjIHJlbGF0aW9uc2hpcCBoaWVyYXJjaHkuCiAgICAgICAgICAgIGN5Y2xlcyA9IG54LmN5Y2xlX2Jhc2lzKG54LkdyYXBoKHNlbGYuZ3JhcGgpKQogICAgICAgICAgICBlcnJtc2cgPSAiVGFibGVzIGFuZCB0aGVpciBjb25zdHJhaW50cyBkbyBub3QgZm9ybSBhIERBRy5cbiIgKyBcCiAgICAgICAgICAgICAgICAgICAgICJGb3VuZCBwb3NzaWJsZSBjeWNsZXM6XG4iICsgc3RyKGN5Y2xlcykKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgZXJybXNnCgogICAgICAgIHJldHVybiBvcmRlcmVkX3RhYmxlcwoKY2xhc3MgT3JkZXJUYWJsZXNGcm9tRGF0YWJhc2VzKE9yZGVyVGFibGVzKToKICAgICIiIiBTb3J0cyB0YWJsZXMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIgYnkgY29uc3RyYWludHMsIGxlYXN0IGNvbnN0cmFpbmVkIDFzdC4KICAgIFRoaXMgdmFyaWFudCBnZXRzIGl0cyBkYXRhIGZyb20gdGhlIGFwcGxpY2F0aW9uJ3MgZGF0YWJhc2VzIGRpcmVjdG9yeS4KICAgIEBwYXJhbSBhcHBkaXJfc3RyOiB0aGUgcGF0aCB0byB0aGUgYXBwbGljYXRpb24ncyBkaXJlY3RvcnkgY29udGFpbmluZwogICAgaXRzIGRhdGFiYXNlcyBkaXJlY3RvcnkuICBEZWZhdWx0IGlzIGN1cnJlbnQgZGlyZWN0b3J5LgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFwcGRpcl9zdHI9Tm9uZSk6CiAgICAgICAgT3JkZXJUYWJsZXMuX19pbml0X18oc2VsZikKICAgICAgICBpZiBub3QgYXBwZGlyX3N0cjoKICAgICAgICAgICAgYXBwZGlyX3N0ciA9IG9zLmN1cmRpcgogICAgICAgIHNlbGYuZGJkaXJfc3RyID0gb3MucGF0aC5qb2luKGFwcGRpcl9zdHIsICJkYXRhYmFzZXMiKQo8fGZpbV9ob2xlfD4KICAgIGRlZiBnZXRfdGFibGVfaW5mbyhzZWxmLCBmaWxlX3N0cik6CiAgICAgICAgIiIiIEV4dHJhY3RzIHRhYmxlIG5hbWUgYW5kIGNvbnN0cmFpbnRzIGZyb20gZ2l2ZW4gLnRhYmxlIGZpbGUuCiAgICAgICAgQHBhcmFtIGZpbGVfc3RyOiB0aGUgbmFtZSBvZiBhIC50YWJsZSBmaWxlLgogICAgICAgIEByZXR1cm46ICh0YWJsZV9uYW1lLCBjb25zdHJhaW50X2l0ZXIpIHdoZXJlIGNvbnN0cmFpbnRfaXRlciB5aWVsZHMKICAgICAgICB0aGUgbmFtZXMgb2YgdGFibGVzIG9uIHdoaWNoIHRoaXMgdGFibGUgZGVwZW5kcy4KICAgICAgICAiIiIKCiAgICAgICAgdHJ5OgogICAgICAgICAgICB0YWJsZV9maWxlID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5kYmRpcl9zdHIsIGZpbGVfc3RyKSwgInIiKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgIkNvdWxkbid0IHJlYWQgZmlsZSAlcyIgJSBmaWxlX3N0cgoKICAgICAgICB0YWJsZV9uYW1lID0gZmlsZV9zdHIuc3BsaXQoIi4iLCAxKVswXS5zcGxpdCgiXyIsIDEpWzFdCgogICAgICAgIGRlZiBjb25zdHJhaW50X2l0ZXIoKToKICAgICAgICAgICAgIiIiIEZpbmQgY29uc3RyYWludCBsaW5lcyBpbiB0aGUgZmlsZSwgeWllbGQgdGhlIHByaW1hcnkgdGFibGUgbmFtZS4KCiAgICAgICAgICAgIENvbnN0cmFpbnQgbGluZXMgY29udGFpbiB0aGUgd29yZCBSRUZFUkVOQ0VTIGFuZCB0aGUgZm9sbG93aW5nCiAgICAgICAgICAgIHRlcm0gKG1pbnVzIHB1bmN0dWF0aW9uKSBpcyB0aGUgcHJpbWFyeSB0YWJsZSBuYW1lIGZvciB0aGlzCiAgICAgICAgICAgIGZvcmVpZ24ga2V5IHJlZmVyZW5jZS4KICAgICAgICAgICAgIiIiCgogICAgICAgICAgICBmb3IgbGluZSBpbiB0YWJsZV9maWxlOgogICAgICAgICAgICAgICAgdGVybXMgPSBzZWxmLmNsZWFudXAobGluZSkuc3BsaXQoKQogICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgIHByaW1hcnlfaW5kZXggPSB0ZXJtcy5pbmRleCgiUkVGRVJFTkNFUyIpICsgMQogICAgICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBpZiBsZW4odGVybXMpID4gcHJpbWFyeV9pbmRleDoKICAgICAgICAgICAgICAgICAgICBwcmltYXJ5X25hbWUgPSB0ZXJtc1twcmltYXJ5X2luZGV4XQogICAgICAgICAgICAgICAgICAgIHlpZWxkIHByaW1hcnlfbmFtZQoKICAgICAgICByZXR1cm4gKHRhYmxlX25hbWUsIGNvbnN0cmFpbnRfaXRlcikKCiAgICBkZWYgYWRkX2FsbF90YWJsZXNfdG9fZ3JhcGgoc2VsZik6CiAgICAgICAgIiIiIEFkZCB0YWJsZXMgYW5kIGNvbnN0cmFpbnRzIGZyb20gZGF0YWJhc2VzIGRpcmVjdG9yeSB0byBncmFwaC4gIiIiCgogICAgICAgIGZvciBmaWxlX3N0ciBpbiBvcy5saXN0ZGlyKHNlbGYuZGJkaXJfc3RyKToKICAgICAgICAgICAgaWYgZmlsZV9zdHIuZW5kc3dpdGgoIi50YWJsZSIpOgogICAgICAgICAgICAgICAgc2VsZi5hZGRfdGFibGVfdG9fZ3JhcGgoZmlsZV9zdHIpCgpjbGFzcyBPcmRlclRhYmxlc0Zyb21NeVNRTChPcmRlclRhYmxlcyk6CiAgICAiIiIgU29ydCB0YWJsZXMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIgYnkgY29uc3RyYWludHMsIGxlYXN0IGNvbnN0cmFpbmVkIDFzdC4KICAgIFRoaXMgdmFyaWFudCBnZXRzIGl0cyBkYXRhIGZyb20gdGhlIGFwcGxpY2F0aW9uJ3MgTXlTUUwgZGF0YWJhc2UuCiAgICBUaGVyZSBhcmUgdHdvIHdheXMgdG8gc3VwcGx5IGEgY29ubmVjdGlvbiB0byB0aGUgZGF0YWJhc2UuICBGaXJzdCwgaWYKICAgIHRoZXJlIGlzIGFscmVhZHkgYW4gb3BlbiBjb25uZWN0aW9uLCBwYXNzIHRoYXQ6CiAgICBAcGFyYW0gZGI6IEFuIG9wZW4gZGF0YWJhc2UgY29ubmVjdGlvbi4KICAgIElmIG5vdCwgcGFzcyB0aGUgaW5mbyBuZWVkZWQgdG8gY29ubmVjdDoKICAgIEBwYXJhbSB1c2VyOiBNeVNRTCB1c2VyIGZvciB0aGUgZGF0YWJhc2UuCiAgICBAcGFyYW0gcGFzc3dvcmQ6IHBhc3N3b3JkIGZvciB0aGUgZGF0YWJhc2UuCiAgICBAcGFyYW0gZGJuYW1lOiBuYW1lIG9mIHRoZSBkYXRhYmFzZS4KICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICAgIGRiPU5vbmUsCiAgICAgICAgICAgICAgICAgdXNlcj0ic2FoYW5hIiAsIHBhc3N3b3JkPSJwYXNzd29yZCIsIGRibmFtZT0ic2FoYW5hIik6CiAgICAgICAgIiIiIENvbm5lY3QgdG8gZGF0YmFzZSwgaW5pdCBncmFwaC4KCiAgICAgICAgSWYgYSBkYXRhYmFzZSBjb25uZWN0aW9uIGlzIHN1cHBsaWVkIGluIGRiLCB1c2UgdGhhdCwgZWxzZSBjb25uZWN0CiAgICAgICAgdXNpbmcgdGhlIHN1cHBsaWVkIG9yIGRlZmF1bHRlZCB1c2VyLCBwYXNzd29yZCwgYW5kIGRhdGFiYXNlIG5hbWUuCiAgICAgICAgIiIiCgogICAgICAgIGltcG9ydCBNeVNRTGRiCiAgICAgICAgT3JkZXJUYWJsZXMuX19pbml0X18oc2VsZikKICAgICAgICBpZiBkYjoKICAgICAgICAgICAgc2VsZi5kYiA9IGRiCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5kYiA9IE15U1FMZGIuY29ubmVjdGlvbigKICAgICAgICAgICAgICAgIGhvc3Q9ImxvY2FsaG9zdCIsIHVzZXI9dXNlciwgcGFzc3dkPXBhc3N3b3JkLCBkYj1kYm5hbWUpCgogICAgZGVmIGdldF90YWJsZV9pbmZvKHNlbGYsIHRhYmxlX25hbWUpOgogICAgICAgICIiIiBFeHRyYWN0cyBjb25zdHJhaW50cyBmb3IgdGFibGUgZnJvbSBzY2hlbWEuCiAgICAgICAgQHBhcmFtIHRhYmxlX25hbWU6IG5hbWUgb2YgdGhlIHRhYmxlIHRvIHByb2Nlc3MuCiAgICAgICAgQHJldHVybjogKHRhYmxlX25hbWUsIGNvbnN0cmFpbnRfaXRlcikgd2hlcmUgY29uc3RyYWludF9pdGVyIHlpZWxkcwogICAgICAgIHRoZSBuYW1lcyBvZiB0YWJsZXMgb24gd2hpY2ggdGhpcyB0YWJsZSBkZXBlbmRzLgogICAgICAgICIiIgoKICAgICAgICBzZWxmLmRiLnF1ZXJ5KCJTSE9XIENSRUFURSBUQUJMRSAlczsiICUgdGFibGVfbmFtZSkKICAgICAgICByZXN1bHQgPSBzZWxmLmRiLnN0b3JlX3Jlc3VsdCgpCiAgICAgICAgdGFibGVfc2NoZW1hID0gcmVzdWx0LmZldGNoX3JvdygxKVswXVsxXQoKICAgICAgICBkZWYgY29uc3RyYWludF9pdGVyKCk6CiAgICAgICAgICAgICIiIiBGaW5kIGNvbnN0cmFpbnRzIGluIHRoZSBzY2hlbWEsIHlpZWxkIHRoZSBwcmltYXJ5IHRhYmxlIG5hbWUuCgogICAgICAgICAgICBTSE9XIENSRUFURSBUQUJMRSByZXR1cm5zIG9uZSBsaW5lIHdpdGggdGhlIGVudGlyZSBjcmVhdGUgdGFibGUKICAgICAgICAgICAgY29tbWFuZC4gIEFzIHdpdGggLnRhYmxlIGZpbGVzLCBvbnN0cmFpbnQgY2xhdXNlcyBjb250YWluIHRoZSB3b3JkCiAgICAgICAgICAgIFJFRkVSRU5DRVMgYW5kIHRoZSBmb2xsb3dpbmcgdGVybSAobWludXMgcHVuY3R1YXRpb24pIGlzIHRoZQogICAgICAgICAgICBkZXBlbmRlbnQgdGFibGUgbmFtZSkuCiAgICAgICAgICAgICIiIgoKICAgICAgICAgICAgdGVybXMgPSBzZWxmLmNsZWFudXAodGFibGVfc2NoZW1hKS5zcGxpdCgpCgogICAgICAgICAgICB3aGlsZSBsZW4odGVybXMpID4gMDoKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICBwcmltYXJ5X2luZGV4ID0gdGVybXMuaW5kZXgoIlJFRkVSRU5DRVMiKSArIDEKICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgaWYgbGVuKHRlcm1zKSA+IHByaW1hcnlfaW5kZXg6CiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeV9uYW1lID0gdGVybXNbcHJpbWFyeV9pbmRleF0KICAgICAgICAgICAgICAgICAgICB0ZXJtcyA9IHRlcm1zW3ByaW1hcnlfaW5kZXggKyAxOl0KICAgICAgICAgICAgICAgICAgICB5aWVsZCBwcmltYXJ5X25hbWUKCiAgICAgICAgcmV0dXJuICh0YWJsZV9uYW1lLCBjb25zdHJhaW50X2l0ZXIpCgogICAgZGVmIGFkZF9hbGxfdGFibGVzX3RvX2dyYXBoKHNlbGYpOgogICAgICAgICIiIiBBZGQgdGFibGVzIGFuZCBjb25zdHJhaW50cyBmcm9tIE15U1FMIGRhdGFiYXNlIHRvIGdyYXBoLiAiIiIKCiAgICAgICAgc2VsZi5kYi5xdWVyeSgiU0hPVyBUQUJMRVM7IikKICAgICAgICByZXN1bHQgPSBzZWxmLmRiLnN0b3JlX3Jlc3VsdCgpCgogICAgICAgIGZvciByb3cgaW4gcmVzdWx0LmZldGNoX3JvdygxMDAwKToKICAgICAgICAgICAgdGFibGVfbmFtZSA9IHJvd1swXQogICAgICAgICAgICBzZWxmLmFkZF90YWJsZV90b19ncmFwaCh0YWJsZV9uYW1lKQoKZGVmIG9yZGVyX3RhYmxlc19mcm9tX2RhdGFiYXNlcyhhcHBkaXJfc3RyPU5vbmUpOgogICAgIiIiIFNvcnRzIHRhYmxlcyBpbiBjb25zdHJhaW50IG9yZGVyLCBsZWFzdCBjb25zdHJhaW5lZCB0YWJsZXMgZmlyc3QuCgogICAgQ29uc3RydWN0cyBhIGNvbnN0cmFpbnQgZ3JhcGggZm9yIHRoZSB0YWJsZXMgaW4gdGhlIHNwZWNpZmllZCB3ZWIycHkKICAgIGRhdGFiYXNlcyBkaXJlY3RvcnksIHNvcnRzIGl0IGluIHRvcG9sb2dpY2FsIG9yZGVyLCBhbmQgcmV0dXJucyB0aGUgdGFibGUKICAgIG5hbWVzIGluIG9yZGVyLCBmcm9tIGxlYXN0IGRlcGVuZGVudCB0byBtb3N0LCBpbiBhIGxpc3QuCiAgICAiIiIKCiAgICBvcmRlcl90b29sID0gT3JkZXJUYWJsZXNGcm9tRGF0YWJhc2VzKGFwcGRpcl9zdHIpCiAgICByZXR1cm4gb3JkZXJfdG9vbC5vcmRlcl90YWJsZXMoKQoKZGVmIG9yZGVyX3RhYmxlc19mcm9tX215c3FsKGRiPU5vbmUsIHVzZXI9Tm9uZSwgcGFzc3dvcmQ9Tm9uZSwgZGJuYW1lPU5vbmUpOgogICAgIiIiIFNvcnRzIHRhYmxlcyBpbiBjb25zdHJhaW50IG9yZGVyLCBsZWFzdCBjb25zdHJhaW5lZCB0YWJsZXMgZmlyc3QuCgogICAgVXNlcyBvcGVuIGRhdGFiYXNlIGNvbm5lY3Rpb24gaWYgc3VwcGxpZWQgaW4gZGIsIGVsc2Ugb3BlbnMgYSBjb25uZWN0aW9uCiAgICB1c2luZyB0aGUgc3VwcGxpZWQgdXNlciwgcGFzc3dvcmQsIGFuZCBkYXRhYmFzZSBuYW1lLiAgRXhwZWN0cyBhIE15U1FMCiAgICBkYXRhYmFzZS4KCiAgICBDb25zdHJ1Y3RzIGEgY29uc3RyYWludCBncmFwaCBmb3IgdGhlIHRhYmxlcyBpbiB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlLAogICAgc29ydHMgaXQgaW4gdG9wb2xvZ2ljYWwgb3JkZXIsIGFuZCByZXR1cm5zIHRoZSB0YWJsZSBuYW1lcyBpbiBvcmRlciwKICAgIGZyb20gbGVhc3QgZGVwZW5kZW50IHRvIG1vc3QsIGluIGEgbGlzdC4KICAgICIiIgoKICAgIG9yZGVyX3Rvb2wgPSBPcmRlclRhYmxlc0Zyb21NeVNRTCgKICAgICAgICBkYj1kYiwgdXNlcj11c2VyLCBwYXNzd29yZD1wYXNzd29yZCwgZGJuYW1lPWRibmFtZSkKICAgIHJldHVybiBvcmRlcl90b29sLm9yZGVyX3RhYmxlcygpCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIyBJZiBydW4gYXMgYSBjb21tYW5kLCB1c2FnZSBpczoKICAgICMgICBweXRob24gdG9wby5weSBhcHBsaWNhdGlvbi1wYXRoIG91dHB1dC1wYXRoCiAgICAjIHdoZXJlIGFwcGxpY2F0aW9uLXBhdGggc2hvdWxkIGNvbnRhaW4gYSBkYXRhYmFzZXMgZGlyZWN0b3J5IHdpdGggdGhlCiAgICAjIC50YWJsZSBmaWxlcyB0byByZWFkLCBhbmQgb3V0cHV0LXBhdGggaXMgd2hlcmUgdG8gd3JpdGUgdGhlIHJlc3VsdHMuCiAgICAjIFRoZXNlIGRlZmF1bHQgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBzdGRvdXQuCiAgICAjIEBUb0RvOiBDb21tYW5kIGxpbmUgZG9lc24ndCB5ZXQgaGF2ZSBhcmdzIGZvciBkaXJlY3QgTXlTUUwgdmVyc2lvbi4KCiAgICBpZiBsZW4oc3lzLmFyZ3YpID4gMjoKICAgICAgICBvdXRwdXRfc3RyID0gc3lzLmFyZ3ZbMl0KICAgICAgICB0cnk6CiAgICAgICAgICAgIG91dHB1dCA9IG9wZW4ob3V0cHV0X3N0ciwgbW9kZT0idyIpCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAiVW5hYmxlIHRvIHdyaXRlIHRvICVzIiAlIG91dHB1dF9zdHIKICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgIGVsc2U6CiAgICAgICAgb3V0cHV0ID0gc3lzLnN0ZG91dAogICAgaWYgbGVuKHN5cy5hcmd2KSA+IDE6CiAgICAgICAgYXBwZGlyX3N0ciA9IHN5cy5hcmd2WzFdCiAgICBlbHNlOgogICAgICAgIGFwcGRpcl9zdHIgPSBvcy5jdXJkaXIKCiAgICBvcmRlcmVkX3RhYmxlcyA9IG9yZGVyX3RhYmxlc19mcm9tX2RhdGFiYXNlcyhhcHBkaXJfc3RyKQogICAgb3JkZXJlZF90YWJsZXNfc3RyID0gIiAiLmpvaW4ob3JkZXJlZF90YWJsZXMpCiAgICBvdXRwdXQud3JpdGUob3JkZXJlZF90YWJsZXNfc3RyKQogICAgb3V0cHV0LmNsb3NlKCkKCiAgICBzeXMuZXhpdCgwKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNlbGYuZGJkaXJfc3RyKToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgIlVuYWJsZSB0byByZWFkIGRpcmVjdG9yeSAlcyIgJSBzZWxmLmRiZGlyX3N0cgogICAgICAgICAgICAKCjx8ZmltX2VuZHw+"]
["15e0667743994d2cf478103e6a8025a5b4bf4bf2-5","15e0667743994d2cf478103e6a8025a5b4bf4bf2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoLm5uIGFzIG5uCgoKY2xhc3MgRG91YmxlVXBjb252VU5ldChubi5Nb2R1bGUpOgo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLmwzID0gbm4uQ29udjJkKGluX2NoYW5uZWxzPWluX2NoYW5uZWxzLCBvdXRfY2hhbm5lbHM9aW5fY2hhbm5lbHMvLzIsIGtlcm5lbF9zaXplPTMsIHN0cmlkZT0xLCBwYWRkaW5nPTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWFzPVRydWUpCiAgICAgICAgc2VsZi5sNCA9IG5uLkNvbnYyZChpbl9jaGFubmVscz1pbl9jaGFubmVscy8vMiwgb3V0X2NoYW5uZWxzPW91dF9jaGFubmVscywga2VybmVsX3NpemU9Mywgc3RyaWRlPTEsIHBhZGRpbmc9MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpYXM9VHJ1ZSkKCiAgICAgICAgc2VsZi5sNSA9IG5uLkJhdGNoTm9ybTJkKG91dF9jaGFubmVscykKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4KToKICAgICAgICB4ID0gc2VsZi5sMSh4KQogICAgICAgIHggPSBzZWxmLmwyKHgpCiAgICAgICAgeCA9IHNlbGYubDMoeCkKICAgICAgICB4ID0gc2VsZi5sNCh4KQogICAgICAgIHggPSBzZWxmLmw1KHgpCiAgICAgICAgcmV0dXJuIHgKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbl9jaGFubmVscywgb3V0X2NoYW5uZWxzKToKICAgICAgICBzdXBlcihEb3VibGVVcGNvbnZVTmV0LCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5sMSA9IG5uLlVwc2FtcGxlKHNjYWxlX2ZhY3Rvcj0yLCBtb2RlPSduZWFyZXN0JykKICAgICAgICBzZWxmLmwyID0gbm4uUmVmbGVjdGlvblBhZDJkKDEpCjx8ZmltX2VuZHw+"]
["bb4f42f3fb5610cb8e8cfb582a1b3714798a24ea-1","bb4f42f3fb5610cb8e8cfb582a1b3714798a24ea","PHxmaW1fcHJlZml4fD4KIiIiCk1JVCBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIDIwMjEgRmFsc2VEZXYKClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKU09GVFdBUkUuCmh0dHBzOi8vZ2l0aHViLmNvbS9UZWNoU3RydWNrL1RlY2hTdHJ1Y2stQm90L2Jsb2IvbWFpbi9ib3QvdXRpbHMvcnRmbS5weQoiIiIKCmltcG9ydCBpbwppbXBvcnQgb3MKaW1wb3J0IHJlCmltcG9ydCB6bGliCgoKY2xhc3MgU3BoaW54T2JqZWN0RmlsZVJlYWRlcjoKICAgICMgSW5zcGlyZWQgYnkgU3BoaW54J3MgSW52ZW50b3J5RmlsZVJlYWRlcgogICAgQlVGU0laRSA9IDE2ICogMTAyNAoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBidWZmZXIpOgogICAgICAgIHNlbGYuc3RyZWFtID0gaW8uQnl0ZXNJTyhidWZmZXIpCgogICAgZGVmIHJlYWRsaW5lKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnN0cmVhbS5yZWFkbGluZSgpLmRlY29kZSgidXRmLTgiKQoKICAgIGRlZiBza2lwbGluZShzZWxmKToKICAgICAgICBzZWxmLnN0cmVhbS5yZWFkbGluZSgpCgogICAgZGVmIHJlYWRfY29tcHJlc3NlZF9jaHVua3Moc2VsZik6CiAgICAgICAgZGVjb21wcmVzc29yID0gemxpYi5kZWNvbXByZXNzb2JqKCkKICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICBjaHVuayA9IHNlbGYuc3RyZWFtLnJlYWQoc2VsZi5CVUZTSVpFKQogICAgICAgICAgICBpZiBsZW4oY2h1bmspID09IDA6CiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICB5aWVsZCBkZWNvbXByZXNzb3IuZGVjb21wcmVzcyhjaHVuaykKICAgICAgICB5aWVsZCBkZWNvbXByZXNzb3IuZmx1c2goKQoKICAgIGRlZiByZWFkX2NvbXByZXNzZWRfbGluZXMoc2VsZik6CiAgICAgICAgYnVmID0gYiIiCiAgICAgICAgZm9yIGNodW5rIGluIHNlbGYucmVhZF9jb21wcmVzc2VkX2NodW5rcygpOgogICAgICAgICAgICBidWYgKz0gY2h1bmsKICAgICAgICAgICAgcG9zID0gYnVmLmZpbmQoYiJcbiIpCiAgICAgICAgICAgIHdoaWxlIHBvcyAhPSAtMToKICAgICAgICAgICAgICAgIHlpZWxkIGJ1Zls6cG9zXS5kZWNvZGUoInV0Zi04IikKICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1Zltwb3MgKyAxIDpdCiAgICAgICAgICAgICAgICBwb3MgPSBidWYuZmluZChiIlxuIikKCiAgICBkZWYgcGFyc2Vfb2JqZWN0X2ludihzZWxmLCB1cmwpOgogICAgICAgICMga2V5OiBVUkwKICAgICAgICAjIG4uYi46IGtleSBkb2Vzbid0IGhhdmUgYGRpc2NvcmRgIG9yIGBkaXNjb3JkLmV4dC5jb21tYW5kc2AgbmFtZXNwYWNlcwogICAgICAgIHJlc3VsdCA9IHt9CgogICAgICAgICMgZmlyc3QgbGluZSBpcyB2ZXJzaW9uIGluZm8KICAgICAgICBpbnZfdmVyc2lvbiA9IHNlbGYucmVhZGxpbmUoKS5yc3RyaXAoKQoKICAgICAgICBpZiBpbnZfdmVyc2lvbiAhPSAiIyBTcGhpbnggaW52ZW50b3J5IHZlcnNpb24gMiI6CiAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiSW52YWxpZCBvYmplY3RzLmludiBmaWxlIHZlcnNpb24uIikKCiAgICAgICAgIyBuZXh0IGxpbmUgaXMgIiMgUHJvamVjdDogPG5hbWU+IgogICAgICAgICMgdGhlbiBhZnRlciB0aGF0IGlzICIjIFZlcnNpb246IDx2ZXJzaW9uPiIKICAgICAgICBwcm9qbmFtZSA9IHNlbGYucmVhZGxpbmUoKS5yc3RyaXAoKVsxMTpdCiAgICAgICAgdmVyc2lvbiA9IHNlbGYucmVhZGxpbmUoKS5yc3RyaXAoKVsxMTpdCgogICAgICAgICMgbmV4dCBsaW5lIHNheXMgaWYgaXQncyBhIHpsaWIgaGVhZGVyCiAgICAgICAgbGluZSA9IHNlbGYucmVhZGxpbmUoKQogICAgICAgIGlmICJ6bGliIiBub3QgaW4gbGluZToKICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJJbnZhbGlkIG9iamVjdHMuaW52IGZpbGUsIG5vdCB6LWxpYiBjb21wYXRpYmxlLiIpCgogICAgICAgICMgVGhpcyBjb2RlIG1vc3RseSBjb21lcyBmcm9tIHRoZSBTcGhpbnggcmVwb3NpdG9yeS4KICAgICAgICBlbnRyeV9yZWdleCA9IHJlLmNvbXBpbGUociIoP3gpKC4rPylccysoXFMqOlxTKilccysoLT9cZCspXHMrKFxTKylccysoLiopIikKICAgICAgICBmb3IgbGluZSBpbiBzZWxmLnJlYWRfY29tcHJlc3NlZF9saW5lcygpOgogICAgICAgICAgICBtYXRjaCA9IGVudHJ5X3JlZ2V4Lm1hdGNoKGxpbmUucnN0cmlwKCkpCiAgICAgICAgICAgIGlmIG5vdCBtYXRjaDoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICBuYW1lLCBkaXJlY3RpdmUsIHByaW8sIGxvY2F0aW9uLCBkaXNwbmFtZSA9IG1hdGNoLmdyb3VwcygpCiAgICAgICAgICAgIGRvbWFpbiwgXywgc3ViZGlyZWN0aXZlID0gZGlyZWN0aXZlLnBhcnRpdGlvbigiOiIpCiAgICAgICAgICAgIGlmIGRpcmVjdGl2ZSA9PSAicHk6bW9kdWxlIiBhbmQgbmFtZSBpbiByZXN1bHQ6CiAgICAgICAgICAgICAgICAjIEZyb20gdGhlIFNwaGlueCBSZXBvc2l0b3J5OgogICAgICAgICAgICAgICAgIyBkdWUgdG8gYSBidWcgaW4gMS4xIGFuZCBiZWxvdywKICAgICAgICAgICAgICAgICMgdHdvIGludmVudG9yeSBlbnRyaWVzIGFyZSBjcmVhdGVkCiAgICAgICAgICAgICAgICAjIGZvciBQeXRob24gbW9kdWxlcywgYW5kIHRoZSBmaXJzdAogICAgICAgICAgICAgICAgIyBvbmUgaXMgY29ycmVjdAogICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgICMgTW9zdCBkb2N1bWVudGF0aW9uIHBhZ2VzIGhhdmUgYSBsYWJlbAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGlmIGRpcmVjdGl2ZSA9PSAic3RkOmRvYyI6CiAgICAgICAgICAgICAgICBzdWJkaXJlY3RpdmUgPSAibGFiZWwiCgogICAgICAgICAgICBpZiBsb2NhdGlvbi5lbmRzd2l0aCgiJCIpOgo8fGZpbV9lbmR8Pg=="]
["cca7512b1d10d414831f456cdabaf032161341e4-3","cca7512b1d10d414831f456cdabaf032161341e4","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cAoKc2V0dXAobmFtZT0ncGlwX2hlbGxvJywKICAgICAgdmVyc2lvbj0nMC4xJywKICAgICAgZGVzY3JpcHRpb249J0hlbGxvIFdvcmxkIEZyb20gUGlQJywKICAgICAgdXJsPSdodHRwczovL2dpdGh1Yi5jb20vUGVyQXJuZW5nL3BpcGhlbGxvJywKICAgICAgYXV0aG9yPSdQZXIgQXJuZW5nJywKICAgICAgYXV0aG9yX2VtYWlsPSdwZXIuYXJuZW5nQHNjYWxlYml0LmNvbScsCiAgICAgIGxpY2Vuc2U9J0FQQUNIRSAyLjAnLAogICAgICBwYWNrYWdlcz1bJ2hlbGxvJywgJ3Jlc291cmNlcyddLAogICAgICBlbnRyeV9wb2ludHMgPSB7CiAgICAgICAgICAgICdjb25zb2xlX3NjcmlwdHMnOiBbJ3BpcF9oZWxsbz1oZWxsby5oZWxsbzptYWluJ10sCiAgICAgIH0sCiAgICAgIHBhY2thZ2VfZGF0YT17Cjx8ZmltX2hvbGV8PgogICAgICB9LAogICAgICBpbmNsdWRlX3BhY2thZ2VfZGF0YT1UcnVlLAogICAgICB6aXBfc2FmZT1GYWxzZSkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICJyZXNvdXJjZXMiOiBbCiAgICAgICAgICAgICAgIioudHh0IiwKICAgICAgICAgIF0sCjx8ZmltX2VuZHw+"]
["033ad06ed4cdbf846196b1cb4de805f27b806b9f-3","033ad06ed4cdbf846196b1cb4de805f27b806b9f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAppbXBvcnQgb3MKCmZyb20gcGdvcHR0dW5lLnV0aWxzLnJlbW90ZV9jb21tYW5kIGltcG9ydCBTU0hDb21tYW5kRXhlY3V0b3IKCgpAcHl0ZXN0LmZpeHR1cmUoKQpkZWYgc3NoX2NsaWVudCgpOgogICAgc3NoX2NsaWVudCA9IFNTSENvbW1hbmRFeGVjdXRvcihob3N0bmFtZT0nbG9jYWxob3N0JywgdXNlcj0ncG9zdGdyZXMnLCBwYXNzd29yZD0ncG9zdGdyZXMnKQogICAgeWllbGQgc3NoX2NsaWVudAogICAgZGVsIHNzaF9jbGllbnQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCkBweXRlc3QuZml4dHVyZSgpCmRlZiBtYWtlX3Rlc3RfZmlsZSgpOgo8fGZpbV9lbmR8Pg=="]
["c60ef57d6d660150f3646709e5cee686dbbe518f-2","c60ef57d6d660150f3646709e5cee686dbbe518f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKY3VwczEgPSBpbnB1dCgiSG93IG1hbnkgY3VwcyBvZiB0ZWEgZGlkIHlvdSBidXkgZnJvbSBzaG9wIDE6ICIpCmN1cHMyID0gaW5wdXQoIkhvdyBtYW55IGN1cHMgb2YgdGVhIGRpZCB5b3UgYnV5IGZyb20gc2hvcCAyOiAiKQoKdHJ5OgogICAgaW50KGN1cHMxKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBpbnQoY3VwczIpCjx8ZmltX2VuZHw+"]
["8e80fc4a2af82c75f6f120842223dadf47be8f22-1","8e80fc4a2af82c75f6f120842223dadf47be8f22","PHxmaW1fcHJlZml4fD4KZnJvbSBoYWlrdW5hdG9yIGltcG9ydCBIYWlrdW5hdG9yCmltcG9ydCBkYXRldGltZQoKaGFpa3VuYXRvciA9IEhhaWt1bmF0b3IoKQplcG9jaCA9IGRhdGV0aW1lLmRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAoMCkKCmRlZiBnZW5lcmF0ZV9yYW5kb21fbW9kZWxfbmFtZSgpOgogICAgcmV0dXJuIGhhaWt1bmF0b3IuaGFpa3VuYXRlKHRva2VuX2xlbmd0aD0wKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKZGVmIGNvbnZlcnRfZHRfdG9fZXBvY2goZHQpOgogICAgcmV0dXJuIChkdCAtIGVwb2NoKS50b3RhbF9zZWNvbmRzKCkgKiAxMDAwLjAKPHxmaW1fZW5kfD4="]
["aee2572483c725b938e8a1ee7476ef6c8c543fd3-3","aee2572483c725b938e8a1ee7476ef6c8c543fd3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNzdgppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBtYXRoCmltcG9ydCBtdWx0aXByb2Nlc3NpbmcKaW1wb3J0IG9zCmltcG9ydCBzaHV0aWwKaW1wb3J0IHRpbWUKaW1wb3J0IHV1aWQKCmZyb20gZGVmaW5pdGlvbnMgaW1wb3J0IFJPT1RfRElSCmZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQb29sLCBNYW5hZ2VyLCBQcm9jZXNzCmZyb20gdHFkbSBpbXBvcnQgdHFkbQoKCmRlZiB3cml0ZV90b19jc3YocSwgY3N2X2ZpbGVfbmFtZSwgaGVhZGVycywgYnVmZmVyX3NpemU9NTAwKToKICAgICMgQ3JlYXRlIHRoZSBvdXRwdXQgZmlsZXMKICAgIGNzdl9maWxlID0gb3BlbihmInRtcC97Y3N2X2ZpbGVfbmFtZX0ve3V1aWQudXVpZDQoKX0uY3N2IiwgInciKQogICAgY3N2X3dyaXRlciA9IGNzdi53cml0ZXIoY3N2X2ZpbGUpCgogICAgIyBXcml0ZSBoZWFkZXJzCiAgICBjc3Zfd3JpdGVyLndyaXRlcm93KGhlYWRlcnMpCgogICAgb3V0cHV0ID0gW10KCiAgICB3aGlsZSBUcnVlOgogICAgICAgIG1lc3NhZ2UgPSBxLmdldCgpCgogICAgICAgIGlmIG1lc3NhZ2UgaXMgTm9uZToKICAgICAgICAgICAgaWYgbGVuKG91dHB1dCkgPiAwOgogICAgICAgICAgICAgICAgY3N2X3dyaXRlci53cml0ZXJvd3Mob3V0cHV0KQoKICAgICAgICAgICAgYnJlYWsKCiAgICAgICAgb3V0cHV0LmFwcGVuZChtZXNzYWdlKQogICAgICAgIGlmIGxlbihvdXRwdXQpID49IGJ1ZmZlcl9zaXplOgogICAgICAgICAgICBjc3Zfd3JpdGVyLndyaXRlcm93cyhvdXRwdXQpCiAgICAgICAgICAgIG91dHB1dCA9IFtdCgoKY2xhc3MgUmVwb3J0UnVubmVyOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWcpOgogICAgICAgIHNlbGYudHVyYm9fbW9kZSA9IGNvbmZpZy50dXJib19tb2RlCiAgICAgICAgc2VsZi5wcmVwcm9jZXNzZWRfY29udGVudF9zdG9yZV9wYXRoID0gY29uZmlnLnByZXByb2Nlc3NlZF9jb250ZW50X3N0b3JlX3BhdGgKICAgICAgICBzZWxmLmh0bWxfY29udGVudF9kaXJfcGF0aCA9IGNvbmZpZy5odG1sX2NvbnRlbnRfZGlyX3BhdGgKICAgICAgICBzZWxmLmNvbnRlbnRfaXRlbV9iYXRjaF9zaXplID0gY29uZmlnLmNvbnRlbnRfaXRlbV9iYXRjaF9zaXplCiAgICAgICAgc2VsZi5jc3Zfd3JpdGVyX2J1ZmZlcl9zaXplID0gY29uZmlnLmNzdl93cml0ZXJfYnVmZmVyX3NpemUKICAgICAgICBzZWxmLnRvdGFsX2NvbnRlbnRfaXRlbXMgPSBjb25maWcudG90YWxfY29udGVudF9pdGVtcwogICAgICAgIHNlbGYubWFuYWdlciA9IE1hbmFnZXIoKQoKICAgIGRlZiBydW4oc2VsZiwgcmVwb3J0X2dlbmVyYXRvcnMpOgogICAgICAgIHByaW50KGYiUmVhZGluZyB7c2VsZi50b3RhbF9jb250ZW50X2l0ZW1zfSBjb250ZW50IGl0ZW1zIGZyb20gdGhlIHByZXByb2Nlc3NlZCBjb250ZW50IHN0b3JlLi4uIikKICAgICAgICBwcmVwcm9jZXNzZWRfY29udGVudF9pdGVtcyA9IHBkLnJlYWRfY3N2KHNlbGYucHJlcHJvY2Vzc2VkX2NvbnRlbnRfc3RvcmVfcGF0aCwgc2VwPSJcdCIsIGNvbXByZXNzaW9uPSJnemlwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd19tZW1vcnk9RmFsc2UsIGNodW5rc2l6ZT1zZWxmLnRvdGFsX2NvbnRlbnRfaXRlbXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICBwcmludCgiRmluaXNoZWQgcmVhZGluZyBmcm9tIHRoZSBwcmVwcm9jZXNzZWQgY29udGVudCBzdG9yZSEiKQogICAgICAgIHByZXByb2Nlc3NlZF9jb250ZW50X2l0ZW1zID0gbmV4dChwcmVwcm9jZXNzZWRfY29udGVudF9pdGVtcykKCiAgICAgICAgdG90YWxfY29udGVudF9pdGVtcyA9IGxlbihwcmVwcm9jZXNzZWRfY29udGVudF9pdGVtcykKICAgICAgICBwcmludChmIkNvbnRlbnQgaXRlbSBsZW5ndGg6IHt0b3RhbF9jb250ZW50X2l0ZW1zfSIpCgogICAgICAgIG51bV93b3JrLCBjaHVua3NpemUgPSBzZWxmLmdldF9vcHRpb25zX2Zvcl9tdWx0aXByb2Nlc3NpbmcodG90YWxfY29udGVudF9pdGVtcykKCiAgICAgICAgcmVwb3J0X2dlbmVyYXRvcnNfd2l0aF9xdWV1ZXMgPSBzZWxmLmNyZWF0ZV9yZXBvcnRfcXVldWVzX2J5X2dlbmVyYXRvcihyZXBvcnRfZ2VuZXJhdG9ycykKICAgICAgICByZXBvcnRfd3JpdGVyX3Byb2Nlc3NlcyA9IHNlbGYuaW5pdGlhbGl6ZV9yZXBvcnRfd3JpdGVycyhyZXBvcnRfZ2VuZXJhdG9yc193aXRoX3F1ZXVlcywgbnVtX3dvcmspCgogICAgICAgIHJlcXVpcmVkX2l0ZXJhdGlvbnMgPSBzZWxmLmdldF9pdGVyYXRpb25zX2Zvcl9iYXRjaF9zaXplKHRvdGFsX2NvbnRlbnRfaXRlbXMsIHNlbGYuY29udGVudF9pdGVtX2JhdGNoX3NpemUpCiAgICAgICAgY29udGVudF9pdGVtc19pdGVyYXRvciA9IHByZXByb2Nlc3NlZF9jb250ZW50X2l0ZW1zLml0ZXJyb3dzKCkKCiAgICAgICAgZm9yIGl0ZXJhdGlvbiBpbiByYW5nZSgwLCByZXF1aXJlZF9pdGVyYXRpb25zKToKICAgICAgICAgICAgcHJpbnQoZiJTdGFydGluZyBiYXRjaCB7aXRlcmF0aW9uICsgMX0iKQogICAgICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKCiAgICAgICAgICAgIGNvbnRlbnRfaXRlbV90dXBsZXMgPSBzZWxmLmNyZWF0ZV9iYXRjaGVkX2lucHV0X2Zvcl9tdWx0aXByb2Nlc3NpbmcoY29udGVudF9pdGVtc19pdGVyYXRvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRfZ2VuZXJhdG9yc193aXRoX3F1ZXVlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF9jb250ZW50X2l0ZW1zKQoKICAgICAgICAgICAgcHJpbnQoZiJDcmVhdGVkIGJhdGNoIG9mIHtsZW4oY29udGVudF9pdGVtX3R1cGxlcyl9IHR1cGxlcyIpCgogICAgICAgICAgICB3aXRoIFBvb2wobnVtX3dvcmspIGFzIHBvb2w6CiAgICAgICAgICAgICAgICBwb29sLnN0YXJtYXAoc2VsZi5tdWx0aXByb2Nlc3NfY29udGVudF9pdGVtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudF9pdGVtX3R1cGxlIGZvciBjb250ZW50X2l0ZW1fdHVwbGUgaW4gdHFkbShjb250ZW50X2l0ZW1fdHVwbGVzKV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtzaXplPWNodW5rc2l6ZSkKICAgICAgICAgICAgICAgIHBvb2wuY2xvc2UoKQogICAgICAgICAgICAgICAgcG9vbC5qb2luKCkKCiAgICAgICAgICAgIGVsYXBzZWRfdGltZV9pbl9zZWNvbmRzID0gdGltZS50aW1lKCkgLSBzdGFydF90aW1lCiAgICAgICAgICAgIHByaW50KGYiVG9vayB7ZWxhcHNlZF90aW1lX2luX3NlY29uZHN9cyB0byBwcm9jZXNzIGJhdGNoIHtpdGVyYXRpb24gKyAxfSIpCgogICAgICAgIHNlbGYuZmluYWxpemVfcXVldWVzX2Zvcl9yZXBvcnRfd3JpdGVycyhyZXBvcnRfZ2VuZXJhdG9yc193aXRoX3F1ZXVlcy52YWx1ZXMoKSwgbnVtX3dvcmspCiAgICAgICAgc2VsZi53YWl0X2Zvcl9yZXBvcnRfd3JpdGVyc19wcm9jZXNzZXNfdG9fdGVybWluYXRlKHJlcG9ydF93cml0ZXJfcHJvY2Vzc2VzKQogICAgICAgIHNlbGYuY3JlYXRlX3JlcG9ydHNfZnJvbV90ZW1wb3JhcnlfZmlsZXMocmVwb3J0X2dlbmVyYXRvcnMpCgogICAgZGVmIGNyZWF0ZV9iYXRjaGVkX2lucHV0X2Zvcl9tdWx0aXByb2Nlc3Npbmcoc2VsZiwgY29udGVudF9pdGVtc19pdGVyYXRvciwgcmVwb3J0X2dlbmVyYXRvcnNfd2l0aF9xdWV1ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF9jb250ZW50X2l0ZW1zKToKICAgICAgICB0dXBsZXMgPSBbXQoKICAgICAgICBlbmRfY29udGVudF9pdGVtX2luZGV4ID0gdG90YWxfY29udGVudF9pdGVtcyAtIDEKCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgc2VsZi5jb250ZW50X2l0ZW1fYmF0Y2hfc2l6ZSk6CiAgICAgICAgICAgIHByZXByb2Nlc3NlZF9jb250ZW50X2l0ZW1fdHVwbGUgPSBuZXh0KGNvbnRlbnRfaXRlbXNfaXRlcmF0b3IpCgogICAgICAgICAgICB0dXBsZXMuYXBwZW5kKAogICAgICAgICAgICAgICAgKHByZXByb2Nlc3NlZF9jb250ZW50X2l0ZW1fdHVwbGVbMV0sIHNlbGYuaHRtbF9jb250ZW50X2Rpcl9wYXRoLCByZXBvcnRfZ2VuZXJhdG9yc193aXRoX3F1ZXVlcykpCgogICAgICAgICAgICBpZiBwcmVwcm9jZXNzZWRfY29udGVudF9pdGVtX3R1cGxlWzBdID09IGVuZF9jb250ZW50X2l0ZW1faW5kZXg6CiAgICAgICAgICAgICAgICBwcmludChmIlJlYWNoZWQgZW5kIG9mIHRoZSBpbnB1dCBmaWxlIGF0IGluZGV4IHtlbmRfY29udGVudF9pdGVtX2luZGV4fSIpCiAgICAgICAgICAgICAgICBicmVhawoKICAgICAgICByZXR1cm4gdHVwbGVzCgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgcmVwb3J0X3F1ZXVlID0gc2VsZi5tYW5hZ2VyLlF1ZXVlKCkKICAgICAgICAgICAgcXVldWVzX2J5X2dlbmVyYXRvcltnZW5lcmF0b3JdID0gcmVwb3J0X3F1ZXVlCgogICAgICAgIHJldHVybiBxdWV1ZXNfYnlfZ2VuZXJhdG9yCgogICAgZGVmIGluaXRpYWxpemVfcmVwb3J0X3dyaXRlcnMoc2VsZiwgcmVwb3J0X3F1ZXVlc19ieV9nZW5lcmF0b3IsIG51bWJlcl9vZl93b3JrZXJzX3Blcl9yZXBvcnQpOgogICAgICAgIHJlcG9ydF93cml0ZXJfcHJvY2Vzc2VzID0gW10KCiAgICAgICAgIyBDcmVhdGUgdGVtcG9yYXJ5IGRpciBmb3IgcGFydGlhbCBDU1ZzCiAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKFJPT1RfRElSLCAndG1wJykpCgogICAgICAgIGZvciBnZW5lcmF0b3IsIHF1ZXVlIGluIHJlcG9ydF9xdWV1ZXNfYnlfZ2VuZXJhdG9yLml0ZW1zKCk6CiAgICAgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihST09UX0RJUiwgZiJ0bXAve2dlbmVyYXRvci5maWxlbmFtZX0iKSkKCiAgICAgICAgICAgICMgQ3JlYXRlIGEgY3N2IHdyaXRlciBwcm9jZXNzIGZvciBlYWNoIG9mIHRoZSByZXBvcnQgd29ya2VycyB3ZSdsbCBiZSB1c2luZyBmb3IgdGhpcyByZXBvcnQKICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtYmVyX29mX3dvcmtlcnNfcGVyX3JlcG9ydCk6CiAgICAgICAgICAgICAgICByZXBvcnRfd3JpdGVyX3Byb2Nlc3Nlcy5hcHBlbmQoc2VsZi5pbml0aWFsaXplX3dyaXRlcl9wcm9jZXNzKHdyaXRlX3RvX2NzdiwgcXVldWUsIGdlbmVyYXRvci5maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmhlYWRlcnMpKQoKICAgICAgICByZXR1cm4gcmVwb3J0X3dyaXRlcl9wcm9jZXNzZXMKCiAgICBkZWYgZ2V0X29wdGlvbnNfZm9yX211bHRpcHJvY2Vzc2luZyhzZWxmLCB0b3RhbF9jb250ZW50X2l0ZW1zKToKICAgICAgICB3b3JrZXJfbXVsdGlwbGllciA9IDggaWYgc2VsZi50dXJib19tb2RlIGVsc2UgMC44CiAgICAgICAgbnVtX3dvcmsgPSBpbnQobWF0aC5jZWlsKG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKSAqIHdvcmtlcl9tdWx0aXBsaWVyKSkgICMgKiA4CiAgICAgICAgY2h1bmtzaXplLCByZW1haW5kZXIgPSBkaXZtb2QodG90YWxfY29udGVudF9pdGVtcywgbnVtX3dvcmspCiAgICAgICAgaWYgcmVtYWluZGVyOgogICAgICAgICAgICBjaHVua3NpemUgKz0gMQoKICAgICAgICByZXR1cm4gbnVtX3dvcmssIGNodW5rc2l6ZQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBjcmVhdGVfcmVwb3J0c19mcm9tX3RlbXBvcmFyeV9maWxlcyhyZXBvcnRfZ2VuZXJhdG9ycyk6CiAgICAgICAgZm9yIHJlcG9ydF9nZW5lcmF0b3IgaW4gcmVwb3J0X2dlbmVyYXRvcnM6CiAgICAgICAgICAgIHRlbXBvcmFyeV9kaXIgPSBvcy5wYXRoLmpvaW4oUk9PVF9ESVIsIGYidG1wL3tyZXBvcnRfZ2VuZXJhdG9yLmZpbGVuYW1lfSIpCiAgICAgICAgICAgIG91dHB1dF9wYXRoID0gb3MucGF0aC5qb2luKFJPT1RfRElSLCBmImRhdGEve3JlcG9ydF9nZW5lcmF0b3IuZmlsZW5hbWV9IikKCiAgICAgICAgICAgIGNzdl9kYXRhZnJhbWVzID0gW3BkLnJlYWRfY3N2KG9zLnBhdGguam9pbih0ZW1wb3JhcnlfZGlyLCB0ZW1wb3JhcnlfY3N2KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRlbXBvcmFyeV9jc3YgaW4gb3MubGlzdGRpcih0ZW1wb3JhcnlfZGlyKV0KICAgICAgICAgICAgcGQuY29uY2F0KGNzdl9kYXRhZnJhbWVzKS5zb3J0X3ZhbHVlcyhieT1bJ2Jhc2VfcGF0aCddKVwKICAgICAgICAgICAgICAgIC50b19jc3Yob3V0cHV0X3BhdGgsIGluZGV4PUZhbHNlLCBjb2x1bW5zPXJlcG9ydF9nZW5lcmF0b3IuaGVhZGVycykKCiAgICAgICAgIyBEZWxldGUgdGVtcG9yYXJ5IGRpcgogICAgICAgIHNodXRpbC5ybXRyZWUob3MucGF0aC5qb2luKFJPT1RfRElSLCAndG1wJykpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGZpbmFsaXplX3F1ZXVlc19mb3JfcmVwb3J0X3dyaXRlcnMocXVldWVzLCBudW1iZXJfb2Zfd29ya2Vyc19wZXJfcmVwb3J0KToKICAgICAgICBmb3IgcXVldWUgaW4gcXVldWVzOgogICAgICAgICAgICBbcXVldWUucHV0KE5vbmUpIGZvciBfaSBpbiByYW5nZShudW1iZXJfb2Zfd29ya2Vyc19wZXJfcmVwb3J0KV0KCiAgICAgICAgICAgIHByaW50KCJDbG9zaW5nIHBvb2wgZm9yIGFsbCB3b3JrZXJzLCBwdXNoaW5nIE5vbmUgdmFsdWUgdG8gcXVldWUiKQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBnZXRfaXRlcmF0aW9uc19mb3JfYmF0Y2hfc2l6ZSh0b3RhbF9jb250ZW50X2l0ZW1zLCBiYXRjaF9zaXplKToKICAgICAgICByZXR1cm4gbWF0aC5jZWlsKHRvdGFsX2NvbnRlbnRfaXRlbXMgLyBiYXRjaF9zaXplKQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBpbml0aWFsaXplX3dyaXRlcl9wcm9jZXNzKHRhcmdldCwgcXVldWUsIGZpbGVuYW1lLCBoZWFkZXJzKToKICAgICAgICBwcm9jZXNzID0gUHJvY2Vzcyh0YXJnZXQ9dGFyZ2V0LCBhcmdzPShxdWV1ZSwgZmlsZW5hbWUsIGhlYWRlcnMpKQogICAgICAgIHByb2Nlc3MuZGFlbW9uID0gVHJ1ZQogICAgICAgIHByb2Nlc3Muc3RhcnQoKQoKICAgICAgICByZXR1cm4gcHJvY2VzcwoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBtdWx0aXByb2Nlc3NfY29udGVudF9pdGVtcyhjb250ZW50X2l0ZW0sIGJhc2VfaHRtbF9jb250ZW50X3BhdGgsIHJlcG9ydF9nZW5lcmF0b3JzKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIGh0bWxfZmlsZV9wYXRoID0gZiJ7YmFzZV9odG1sX2NvbnRlbnRfcGF0aH17Y29udGVudF9pdGVtWydiYXNlX3BhdGgnXX0uaHRtbCIKCiAgICAgICAgICAgIHdpdGggb3BlbihodG1sX2ZpbGVfcGF0aCwgInIiKSBhcyBodG1sX2ZpbGU6CiAgICAgICAgICAgICAgICBodG1sID0gaHRtbF9maWxlLnJlYWQoKQoKICAgICAgICAgICAgICAgIGZvciByZXBvcnRfZ2VuZXJhdG9yLCBxdWV1ZSBpbiByZXBvcnRfZ2VuZXJhdG9ycy5pdGVtcygpOgogICAgICAgICAgICAgICAgICAgICMgQWxsb3cgdGhlIGdlbmVyYXRvcnMgdG8gZG8gd2hhdCB0aGV5IHdpbGwgd2l0aCB0aGUgb3V0cHV0LCByYXRoZXIgdGhhbiBzYXZpbmcgb3V0cHV0IGhlcmUKICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgYmVjYXVzZSBhIGdlbmVyYXRvciBtaWdodCB3aXNoIHRvIHNraXAgY2VydGFpbiBwYWdlcywgc28gd2Ugc2hvdWxkbid0IG1hbmRhdGUgYW4gb3V0cHV0CiAgICAgICAgICAgICAgICAgICAgIyBmb3IgZXZlcnkgcGFnZSwgYW5kIHdlIGRvbid0IHdhbnQgdG8gaW50cm9kdWNlIHVubmVjZXNzYXJ5IGxvZ2ljIGhlcmUgdG8gc2Vjb25kLWd1ZXNzIHdoYXQgdGhlCiAgICAgICAgICAgICAgICAgICAgIyBnZW5lcmF0b3IgbWF5IG9yIG1heSBub3QgcmV0dXJuCiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVwb3J0X2dlbmVyYXRvci5wcm9jZXNzX3BhZ2UoY29udGVudF9pdGVtLCBodG1sKQoKICAgICAgICAgICAgICAgICAgICBpZiBhbnkocmVzdWx0KToKICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUucHV0KHJlc3VsdCkKCiAgICAgICAgICAgIHJldHVybgoKICAgICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgICAgIyBDb3VsZG4ndCBsb2FkIHRoZSBwYXRoLCBpdCBjb3VsZCBiZSB0aGF0IHRoZSBjb250ZW50IG5vIGxvbmdlciBleGlzdHMgLyBleGlzdHMgaW4gdGhlIHByZXByb2Nlc3NlZCBzdG9yZQogICAgICAgICAgICAjIGJ1dCBkaWRuJ3QgZXhpc3Qgd2hlbiB0aGUgbWlycm9yIGJhY2stdXBzIHdlcmUgY3JlYXRlZAogICAgICAgICAgICBwYXNzCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHdhaXRfZm9yX3JlcG9ydF93cml0ZXJzX3Byb2Nlc3Nlc190b190ZXJtaW5hdGUocHJvY2Vzc2VzKToKICAgICAgICBmb3IgcHJvY2VzcyBpbiBwcm9jZXNzZXM6CiAgICAgICAgICAgIHByaW50KCJXYWl0aW5nIG9uIHJlcG9ydCB3cml0ZXIgcHJvY2VzcyB0byBmaW5pc2giKQogICAgICAgICAgICBwcm9jZXNzLmpvaW4oKQo8fGZpbV9zdWZmaXh8PgogICAgZGVmIGNyZWF0ZV9yZXBvcnRfcXVldWVzX2J5X2dlbmVyYXRvcihzZWxmLCByZXBvcnRfZ2VuZXJhdG9ycyk6CiAgICAgICAgcXVldWVzX2J5X2dlbmVyYXRvciA9IHt9CgogICAgICAgIGZvciBnZW5lcmF0b3IgaW4gcmVwb3J0X2dlbmVyYXRvcnM6Cjx8ZmltX2VuZHw+"]
["2336e6b7b7b6c8e725f676311ab0890b3dcb16e8-2","2336e6b7b7b6c8e725f676311ab0890b3dcb16e8","PHxmaW1fcHJlZml4fD4KCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCmZyb20gLmFwaSBpbXBvcnQgQXBpT2JqZWN0CgoKY2xhc3MgSXRlbShBcGlPYmplY3QpOgogICAgIiIiCiAgICBodHRwczovL3d3dy54aWJiYXouY29tL2RvY3VtZW50YXRpb24vMy40L21hbnVhbC9hcGkvcmVmZXJlbmNlL2l0ZW0vb2JqZWN0CiAgICAiIiIKCiAgICBERUZBVUxUX1NFTEVDVFMgPSAoJ1RyaWdnZXJzJywgJ0dyYXBocycsICdBcHBsaWNhdGlvbnMnLCAnRGlzY292ZXJ5UnVsZScsICdJdGVtRGlzY292ZXJ5JywgJ1ByZXByb2Nlc3NpbmcnKQoKICAgIFJFTEFUSU9OUyA9ICgnaG9zdHMnLCAnaW50ZXJmYWNlcycsICd0cmlnZ2VycycsICdncmFwaHMnKQoKICAgICMgU2VlIGB2YWx1ZV90eXBlYCBwcm9wZXJ0eQogICAgVFlQRV9GTE9BVCA9IDAKICAgIFRZUEVfQ0hBUiAgPSAxCiAgICBUWVBFX0xPRyAgID0gMgogICAgVFlQRV9JTlQgICA9IDMKICAgIFRZUEVfVEVYVCAgPSA0CgoKICAgIGRlZiBoaXN0b3J5KHNlbGYsIHRzX2Zyb209Tm9uZSwgdHNfdG89Tm9uZSwgbGltaXQ9MTApOgogICAgICAgICIiIgogICAgICAgIGAodHMsIHZhbClgIGZvciBsYXRlc3QgYGxpbWl0YCBmcm9tIGB0c19mcm9tYCB1bnRpbCBgdHNfdG9gLgogICAgICAgICIiIgogICAgICAgIHBhcmFtcyA9IGRpY3QoCiAgICAgICAgICAgIG91dHB1dCA9ICdleHRlbmQnLAogICAgICAgICAgICBoaXN0b3J5ID0gc2VsZi52YWx1ZV90eXBlLnZhbCwKICAgICAgICAgICAgaXRlbWlkcyA9IHNlbGYuaWQsCiAgICAgICAgICAgIGxpbWl0ID0gbGltaXQsCiAgICAgICAgICAgIHNvcnRmaWVsZCA9ICdjbG9jaycsCiAgICAgICAgICAgIHNvcnRvcmRlciA9ICdERVNDJywKICAgICAgICApCiAgICAgICAgaWYgdHNfZnJvbToKICAgICAgICAgICAgcGFyYW1zWyd0aW1lX2Zyb20nXSA9IHRzX2Zyb20uc3RyZnRpbWUoJyVzJykKICAgICAgICBpZiB0c190bzoKICAgICAgICAgICAgcGFyYW1zWyd0aW1lX3RpbGwnXSA9IHRzX3RvLnN0cmZ0aW1lKCclcycpCiAgICAgICAgcmV0dXJuIFsoaVsnY2xvY2snXSwgc2VsZi5fdHlwZWRfdmFsdWUoaVsndmFsdWUnXSkpIGZvciBpIGluCiAgICAgICAgICAgICAgICBzZWxmLl9hcGkucmVzcG9uc2UoJ2hpc3RvcnkuZ2V0JywgKipwYXJhbXMpLmdldCgncmVzdWx0JyldCgoKICAgIGRlZiBfdHlwZWRfdmFsdWUoc2VsZiwgdmFsKToKICAgICAgICAiIiIKICAgICAgICBSZXR1cm4gYHZhbGAgd2l0aCBwcm9wZXIgdHlwZSBiYXNlZCBvbiB0aGlzIEl0ZW0ncyBgdmFsdWVfdHlwZWAuCiAgICAgICAgIiIiCiAgICAgICAgaWYgc2VsZi52YWx1ZV90eXBlLnZhbCA9PSBzZWxmLlRZUEVfRkxPQVQ6CiAgICAgICAgICAgIHZhbCA9IGZsb2F0KHZhbCkKICAgICAgICBlbGlmIHNlbGYudmFsdWVfdHlwZS52YWwgPT0gc2VsZi5UWVBFX0lOVDoKICAgICAgICAgICAgdmFsID0gaW50KHZhbCkKICAgICAgICByZXR1cm4gdmFsCgoKICAgIFBST1BTID0gZGljdCgKICAgICAgICBpdGVtaWQgPSBkaWN0KAogICAgICAgICAgICBkb2MgPSAiSUQgb2YgdGhlIGl0ZW0uIiwKICAgICAgICAgICAgaWQgPSBUcnVlLAogICAgICAgICAgICByZWFkb25seSA9IFRydWUsCiAgICAgICAgKSwKICAgICAgICBkZWxheSA9IGRpY3QoCiAgICAgICAgICAgIGRvYyA9ICJVcGRhdGUgaW50ZXJ2YWwgb2YgdGhlIGl0ZW0gaW4gJHt2YWx9JHt1bml0c30gZm9ybS4gIFVuaXRzOiBzPXNlY29uZHMgKGRlZmF1bHQpLCBtPW1pbnV0ZXMsIGg9aG91cnMsIGQ9ZGF5cy4iLAogICAgICAgICAgICBraW5kID0gc3RyLAogICAgICAgICksCiAgICAgICAgaG9zdGlkID0gZGljdCgKICAgICAgICAgICAgZG9jID0gIklEIG9mIHRoZSBob3N0IHRoYXQgdGhlIGl0ZW0gYmVsb25ncyB0by4iLAogICAgICAgICksCiAgICAgICAgaW50ZXJmYWNlaWQgPSBkaWN0KAogICAgICAgICAgICBkb2MgPSAiSUQgb2YgdGhlIGl0ZW0ncyBob3N0IGludGVyZmFjZS4gVXNlZCBvbmx5IGZvciBob3N0IGl0ZW1zLiBPcHRpb25hbCBmb3IgWmFiYml4IGFnZW50IChhY3RpdmUpLCBaYWJiaXggaW50ZXJuYWwsIFphYmJpeCB0cmFwcGVyLCBaYWJiaXggYWdncmVnYXRlLCBkYXRhYmFzZSBtb25pdG9yIGFuZCBjYWxjdWxhdGVkIGl0ZW1zLiIsCiAgICAgICAgKSwKICAgICAgICBrZXlfID0gZGljdCgKICAgICAgICAgICAgZG9jID0gIkl0ZW0ga2V5LiIsCiAgICAgICAgKSwKICAgICAgICBuYW1lID0gZGljdCgKICAgICAgICAgICAgZG9jID0gIk5hbWUgb2YgdGhlIGl0ZW0uIiwKICAgICAgICApLAogICAgICAgIHR5cGUgPSBkaWN0KAogICAgICAgICAgICBkb2MgPSAiIFR5cGUgb2YgdGhlIGl0ZW0uIiwKICAgICAgICAgICAga2luZCA9IGludCwKICAgICAgICAgICAgdmFscyA9IHsKICAgICAgICAgICAgICAgIDA6ICdaYWJiaXggYWdlbnQnLAogICAgICAgICAgICAgICAgMTogJ1NOTVB2MSBhZ2VudCcsCiAgICAgICAgICAgICAgICAyOiAnWmFiYml4IHRyYXBwZXInLAogICAgICAgICAgICAgICAgMzogJ3NpbXBsZSBjaGVjaycsCiAgICAgICAgICAgICAgICA0OiAnU05NUHYyIGFnZW50JywKICAgICAgICAgICAgICAgIDU6ICdaYWJiaXggaW50ZXJuYWwnLAogICAgICAgICAgICAgICAgNjogJ1NOTVB2MyBhZ2VudCcsCiAgICAgICAgICAgICAgICA3OiAnWmFiYml4IGFnZW50IChhY3RpdmUpJywKICAgICAgICAgICAgICAgIDg6ICdaYWJiaXggYWdncmVnYXRlJywKICAgICAgICAgICAgICAgIDk6ICd3ZWIgaXRlbScsCiAgICAgICAgICAgICAgICAxMDogJ2V4dGVybmFsIGNoZWNrJywKICAgICAgICAgICAgICAgIDExOiAnZGF0YWJhc2UgbW9uaXRvcicsCiAgICAgICAgICAgICAgICAxMjogJ0lQTUkgYWdlbnQnLAogICAgICAgICAgICAgICAgMTM6ICdTU0ggYWdlbnQnLAogICAgICAgICAgICAgICAgMTQ6ICdURUxORVQgYWdlbnQnLAogICAgICAgICAgICAgICAgMTU6ICdjYWxjdWxhdGVkJywKICAgICAgICAgICAgICAgIDE2OiAnSk1YIGFnZW50JywKICAgICAgICAgICAgICAgIDE3OiAnU05NUCB0cmFwJywKICAgICAgICAgICAgICAgIDE4OiAnRGVwZW5kZW50IGl0ZW0nLAogICAgICAgICAgICAgICAgMTk6ICdIVFRQIGFnZW50JywKICAgICAgICAgICAgfSwKICAgICAgICApLAogICAgICAgIHZhbHVlX3R5cGUgPSBkaWN0KAogICAgICAgICAgICBkb2MgPSAiVHlwZSBvZiBpbmZvcm1hdGlvbiBvZiB0aGUgaXRlbS4iLAogICAgICAgICAgICBraW5kID0gaW50LAogICAgICAgICAgICB2YWxzID0gewogICAgICAgICAgICAgICAgMDogJ251bWVyaWMgZmxvYXQnLAogICAgICAgICAgICAgICAgMTogJ2NoYXJhY3RlcicsCiAgICAgICAgICAgICAgICAyOiAnbG9nJywKICAgICAgICAgICAgICAgIDM6ICdudW1lcmljIHVuc2lnbmVkJywKICAgICAgICAgICAgICAgIDQ6ICd0ZXh0JywKICAgICAgICAgICAgfSwKICAgICAgICApLAogICAgICAgIGF1dGh0eXBlID0gZGljdCgKICAgICAgICAgICAgZG9jID0gIlNTSCBhdXRoZW50aWNhdGlvbiBtZXRob2QuIFVzZWQgb25seSBieSBTU0ggYWdlbnQgaXRlbXMuIiwKICAgICAgICAgICAga2luZCA9IGludCwKPHxmaW1faG9sZXw+CiAgICAgICAgKSwKICAgICAgICBkYXRhX3R5cGUgPSBkaWN0KAogICAgICAgICAgICBkb2MgPSAiRGF0YSB0eXBlIG9mIHRoZSBpdGVtLiIsCiAgICAgICAgICAgIGtpbmQgPSBpbnQsCiAgICAgICAgICAgIHZhbHMgPSB7CiAgICAgICAgICAgICAgICAwOiAnZGVjaW1hbCAoZGVmYXVsdCknLAogICAgICAgICAgICAgICAgMTogJ29jdGFsJywKICAgICAgICAgICAgICAgIDI6ICdoZXhhZGVjaW1hbCcsCiAgICAgICAgICAgICAgICAzOiAnYm9vbGVhbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgKSwKICAgICAgICBkZWxheV9mbGV4ID0gZGljdCgKICAgICAgICAgICAgZG9jID0gIkZsZXhpYmxlIGludGVydmFscyBhcyBhIHNlcmlhbGl6ZWQgc3RyaW5nLiAgRWFjaCBzZXJpYWxpemVkIGZsZXhpYmxlIGludGVydmFsIGNvbnNpc3RzIG9mIGFuIHVwZGF0ZSBpbnRlcnZhbCBhbmQgYSB0aW1lIHBlcmlvZCBzZXBhcmF0ZWQgYnkgYSBmb3J3YXJkIHNsYXNoLiBNdWx0aXBsZSBpbnRlcnZhbHMgYXJlIHNlcGFyYXRlZCBieSBhIGNvbG9uLiIsCiAgICAgICAgKSwKICAgICAgICBkZWx0YSA9IGRpY3QoCiAgICAgICAgICAgIGRvYyA9ICJWYWx1ZSB0aGF0IHdpbGwgYmUgc3RvcmVkLiIsCiAgICAgICAgICAgIGtpbmQgPSBpbnQsCiAgICAgICAgICAgIHZhbHMgPSB7CiAgICAgICAgICAgICAgICAwOiAnYXMgaXMgKGRlZmF1bHQpJywKICAgICAgICAgICAgICAgIDE6ICdEZWx0YSwgc3BlZWQgcGVyIHNlY29uZCcsCiAgICAgICAgICAgICAgICAyOiAnRGVsdGEsIHNpbXBsZSBjaGFuZ2UnLAogICAgICAgICAgICB9LAogICAgICAgICksCiAgICAgICAgZGVzY3JpcHRpb24gPSBkaWN0KAogICAgICAgICAgICBkb2MgPSAiRGVzY3JpcHRpb24gb2YgdGhlIGl0ZW0uIiwKICAgICAgICApLAogICAgICAgIGVycm9yID0gZGljdCgKICAgICAgICAgICAgZG9jID0gIkVycm9yIHRleHQgaWYgdGhlcmUgYXJlIHByb2JsZW1zIHVwZGF0aW5nIHRoZSBpdGVtLiIsCiAgICAgICAgICAgIHJlYWRvbmx5ID0gVHJ1ZSwKICAgICAgICApLAogICAgICAgIGZsYWdzID0gZGljdCgKICAgICAgICAgICAgZG9jID0gIk9yaWdpbiBvZiB0aGUgaXRlbS4iLAogICAgICAgICAgICBraW5kID0gaW50LAogICAgICAgICAgICByZWFkb25seSA9IFRydWUsCiAgICAgICAgICAgIHZhbHMgPSB7CiAgICAgICAgICAgICAgICAwOiAnYSBwbGFpbiBpdGVtJywKICAgICAgICAgICAgICAgIDQ6ICdhIGRpc2NvdmVyZWQgaXRlbScsCiAgICAgICAgICAgIH0sCiAgICAgICAgKSwKICAgICAgICAjIGZvcm11bGEJID0gZGljdCgKICAgICAgICAjICAgICBkb2MgPSAiQ3VzdG9tIG11bHRpcGxpZXIuIiwKICAgICAgICAjICAgICBraW5kID0gaW50LAogICAgICAgICMgKSwKICAgICAgICBoaXN0b3J5CSA9IGRpY3QoCiAgICAgICAgICAgIGRvYyA9ICJSZXRlbnRpb24gb2YgcmF3IHNhbXBsZXMgaW4gJHt2YWx9JHt1bml0c30gZm9ybS4gIFVuaXRzOiBzPXNlY29uZHMgKGRlZmF1bHQpLCBtPW1pbnV0ZXMsIGg9aG91cnMsIGQ9ZGF5cy4iLAogICAgICAgICAgICBraW5kID0gc3RyLAogICAgICAgICksCiAgICAgICAgaW52ZW50b3J5X2xpbmsgPSBkaWN0KAogICAgICAgICAgICBkb2MgPSAiSUQgb2YgdGhlIGhvc3QgaW52ZW50b3J5IGZpZWxkIHRoYXQgaXMgcG9wdWxhdGVkIGJ5IHRoZSBpdGVtLiAgUmVmZXIgdG8gdGhlIGhvc3QgaW52ZW50b3J5IHBhZ2UgZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgaG9zdCBpbnZlbnRvcnkgZmllbGRzIGFuZCB0aGVpciBJRHMuIiwKICAgICAgICAgICAga2luZCA9IGludCwKICAgICAgICApLAogICAgICAgIGlwbWlfc2Vuc29yID0gZGljdCgKICAgICAgICAgICAgZG9jID0gIklQTUkgc2Vuc29yLiBVc2VkIG9ubHkgYnkgSVBNSSBpdGVtcy4iLAogICAgICAgICksCiAgICAgICAgbGFzdGNsb2NrID0gZGljdCgKICAgICAgICAgICAgZG9jID0gIlRpbWUgd2hlbiB0aGUgaXRlbSB3YXMgbGFzdCB1cGRhdGVkLiIsCiAgICAgICAgICAgIGtpbmQgPSBkYXRldGltZSwKICAgICAgICAgICAgcmVhZG9ubHkgPSBUcnVlLAogICAgICAgICksCiAgICAgICAgbGFzdG5zID0gZGljdCgKICAgICAgICAgICAgZG9jID0gIk5hbm9zZWNvbmRzIHdoZW4gdGhlIGl0ZW0gd2FzIGxhc3QgdXBkYXRlZC4iLAogICAgICAgICAgICBraW5kID0gaW50LAogICAgICAgICAgICByZWFkb25seSA9IFRydWUsCiAgICAgICAgKSwKICAgICAgICBsYXN0dmFsdWUgPSBkaWN0KAogICAgICAgICAgICBkb2MgPSAiTGFzdCB2YWx1ZSBvZiB0aGUgaXRlbS4iLAogICAgICAgICAgICByZWFkb25seSA9IFRydWUsCiAgICAgICAgKSwKICAgICAgICBsb2d0aW1lZm10ID0gZGljdCgKICAgICAgICAgICAgZG9jID0gIkZvcm1hdCBvZiB0aGUgdGltZSBpbiBsb2cgZW50cmllcy4gVXNlZCBvbmx5IGJ5IGxvZyBpdGVtcy4iLAogICAgICAgICksCiAgICAgICAgbXRpbWUgPSBkaWN0KAogICAgICAgICAgICBkb2MgPSAiVGltZSB3aGVuIHRoZSBtb25pdG9yZWQgbG9nIGZpbGUgd2FzIGxhc3QgdXBkYXRlZC4gVXNlZCBvbmx5IGJ5IGxvZyBpdGVtcy4iLAogICAgICAgICAgICBraW5kID0gZGF0ZXRpbWUsCiAgICAgICAgKSwKICAgICAgICBtdWx0aXBsaWVyID0gZGljdCgKICAgICAgICAgICAgZG9jID0gIldoZXRoZXIgdG8gdXNlIGEgY3VzdG9tIG11bHRpcGxpZXIuIiwKICAgICAgICAgICAga2luZCA9IGludCwKICAgICAgICApLAogICAgICAgIHBhcmFtcyA9IGRpY3QoCiAgICAgICAgICAgIGRvYyA9ICJBZGRpdGlvbmFsIHBhcmFtZXRlcnMgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHRoZSBpdGVtOiAtIGV4ZWN1dGVkIHNjcmlwdCBmb3IgU1NIIGFuZCBUZWxuZXQgaXRlbXM7IC0gU1FMIHF1ZXJ5IGZvciBkYXRhYmFzZSBtb25pdG9yIGl0ZW1zOyAtIGZvcm11bGEgZm9yIGNhbGN1bGF0ZWQgaXRlbXMuIiwKICAgICAgICApLAogICAgICAgIHBhc3N3b3JkID0gZGljdCgKICAgICAgICAgICAgZG9jID0gIlBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbi4gVXNlZCBieSBzaW1wbGUgY2hlY2ssIFNTSCwgVGVsbmV0LCBkYXRhYmFzZSBtb25pdG9yIGFuZCBKTVggaXRlbXMuIiwKICAgICAgICApLAogICAgICAgIHBvcnQgPSBkaWN0KAogICAgICAgICAgICBkb2MgPSAiUG9ydCBtb25pdG9yZWQgYnkgdGhlIGl0ZW0uIFVzZWQgb25seSBieSBTTk1QIGl0ZW1zLiIsCiAgICAgICAgKSwKICAgICAgICBwcmV2dmFsdWUgPSBkaWN0KAogICAgICAgICAgICBkb2MgPSAiUHJldmlvdXMgdmFsdWUgb2YgdGhlIGl0ZW0uIiwKICAgICAgICAgICAgcmVhZG9ubHkgPSBUcnVlLAogICAgICAgICksCiAgICAgICAgcHJpdmF0ZWtleSA9IGRpY3QoCiAgICAgICAgICAgIGRvYyA9ICJOYW1lIG9mIHRoZSBwcml2YXRlIGtleSBmaWxlLiIsCiAgICAgICAgKSwKICAgICAgICBwdWJsaWNrZXkgPSBkaWN0KAogICAgICAgICAgICBkb2MgPSAiTmFtZSBvZiB0aGUgcHVibGljIGtleSBmaWxlLiIsCiAgICAgICAgKSwKICAgICAgICBzbm1wX2NvbW11bml0eSA9IGRpY3QoCiAgICAgICAgICAgIGRvYyA9ICJTTk1QIGNvbW11bml0eS4gVXNlZCBvbmx5IGJ5IFNOTVB2MSBhbmQgU05NUHYyIGl0ZW1zLiIsCiAgICAgICAgKSwKICAgICAgICBzbm1wX29pZCA9IGRpY3QoCiAgICAgICAgICAgIGRvYyA9ICJTTk1QIE9JRC4iLAogICAgICAgICksCiAgICAgICAgc25tcHYzX2F1dGhwYXNzcGhyYXNlID0gZGljdCgKICAgICAgICAgICAgZG9jID0gIlNOTVB2MyBhdXRoIHBhc3NwaHJhc2UuIFVzZWQgb25seSBieSBTTk1QdjMgaXRlbXMuIiwKICAgICAgICApLAogICAgICAgIHNubXB2M19hdXRocHJvdG9jb2wgPSBkaWN0KAogICAgICAgICAgICBkb2MgPSAiU05NUHYzIGF1dGhlbnRpY2F0aW9uIHByb3RvY29sLiBVc2VkIG9ubHkgYnkgU05NUHYzIGl0ZW1zLiIsCiAgICAgICAgICAgIGtpbmQgPSBpbnQsCiAgICAgICAgICAgIHZhbHMgPSB7CiAgICAgICAgICAgICAgICAwOiAnTUQ1IChkZWZhdWx0KScsCiAgICAgICAgICAgICAgICAxOiAnU0hBJywKICAgICAgICAgICAgfSwKICAgICAgICApLAogICAgICAgIHNubXB2M19jb250ZXh0bmFtZSA9IGRpY3QoCiAgICAgICAgICAgIGRvYyA9ICJTTk1QdjMgY29udGV4dCBuYW1lLiBVc2VkIG9ubHkgYnkgU05NUHYzIGl0ZW1zLiIsCiAgICAgICAgKSwKICAgICAgICBzbm1wdjNfcHJpdnBhc3NwaHJhc2UgPSBkaWN0KAogICAgICAgICAgICBkb2MgPSAiU05NUHYzIHByaXYgcGFzc3BocmFzZS4gVXNlZCBvbmx5IGJ5IFNOTVB2MyBpdGVtcy4iLAogICAgICAgICksCiAgICAgICAgc25tcHYzX3ByaXZwcm90b2NvbCA9IGRpY3QoCiAgICAgICAgICAgIGRvYyA9ICJTTk1QdjMgcHJpdmFjeSBwcm90b2NvbC4gVXNlZCBvbmx5IGJ5IFNOTVB2MyBpdGVtcy4iLAogICAgICAgICAgICBraW5kID0gaW50LAogICAgICAgICAgICB2YWxzID0gewogICAgICAgICAgICAgICAgMDogJ0RFUyAoZGVmYXVsdCknLAogICAgICAgICAgICAgICAgMTogJ0FFUycsCiAgICAgICAgICAgIH0sCiAgICAgICAgKSwKICAgICAgICBzbm1wdjNfc2VjdXJpdHlsZXZlbCA9IGRpY3QoCiAgICAgICAgICAgIGRvYyA9ICJTTk1QdjMgc2VjdXJpdHkgbGV2ZWwuIFVzZWQgb25seSBieSBTTk1QdjMgaXRlbXMuIiwKICAgICAgICAgICAga2luZCA9IGludCwKICAgICAgICAgICAgdmFscyA9IHsKICAgICAgICAgICAgICAgIDA6ICdub0F1dGhOb1ByaXYnLAogICAgICAgICAgICAgICAgMTogJ2F1dGhOb1ByaXYnLAogICAgICAgICAgICAgICAgMjogJ2F1dGhQcml2JywKICAgICAgICAgICAgfSwKICAgICAgICApLAogICAgICAgIHNubXB2M19zZWN1cml0eW5hbWUgPSBkaWN0KAogICAgICAgICAgICBkb2MgPSAiU05NUHYzIHNlY3VyaXR5IG5hbWUuIFVzZWQgb25seSBieSBTTk1QdjMgaXRlbXMuIiwKICAgICAgICApLAogICAgICAgIHN0YXRlID0gZGljdCgKICAgICAgICAgICAgZG9jID0gIlN0YXRlIG9mIHRoZSBpdGVtLiIsCiAgICAgICAgICAgIGtpbmQgPSBpbnQsCiAgICAgICAgICAgIHJlYWRvbmx5ID0gVHJ1ZSwKICAgICAgICAgICAgdmFscyA9IHsKICAgICAgICAgICAgICAgIDA6ICdub3JtYWwgKGRlZmF1bHQpJywKICAgICAgICAgICAgICAgIDE6ICdub3Qgc3VwcG9ydGVkJywKICAgICAgICAgICAgfSwKICAgICAgICApLAogICAgICAgIHN0YXR1cyA9IGRpY3QoCiAgICAgICAgICAgIGRvYyA9ICJTdGF0dXMgb2YgdGhlIGl0ZW0uIiwKICAgICAgICAgICAga2luZCA9IGludCwKICAgICAgICAgICAgdmFscyA9IHsKICAgICAgICAgICAgICAgIDA6ICdlbmFibGVkIGl0ZW0gKGRlZmF1bHQpJywKICAgICAgICAgICAgICAgIDE6ICdkaXNhYmxlZCBpdGVtJywKICAgICAgICAgICAgfSwKICAgICAgICApLAogICAgICAgIHRlbXBsYXRlaWQgPSBkaWN0KAogICAgICAgICAgICBkb2MgPSAiSUQgb2YgdGhlIHBhcmVudCB0ZW1wbGF0ZSBpdGVtLiIsCiAgICAgICAgICAgIHJlYWRvbmx5ID0gVHJ1ZSwKICAgICAgICApLAogICAgICAgIHRyYXBwZXJfaG9zdHMgPSBkaWN0KAogICAgICAgICAgICBkb2MgPSAiQWxsb3dlZCBob3N0cy4gVXNlZCBvbmx5IGJ5IHRyYXBwZXIgaXRlbXMuIiwKICAgICAgICApLAogICAgICAgIHRyZW5kcyA9IGRpY3QoCiAgICAgICAgICAgIGRvYyA9ICJSZXRlbnRpb24gb2YgZG93bi1zYW1wbGVkIGRhdGEgaW4gJHt2YWx9JHt1bml0c30gZm9ybS4gIFVuaXRzOiBzPXNlY29uZHMgKGRlZmF1bHQpLCBtPW1pbnV0ZXMsIGg9aG91cnMsIGQ9ZGF5cy4iLAogICAgICAgICAgICBraW5kID0gc3RyLAogICAgICAgICksCiAgICAgICAgdW5pdHMgPSBkaWN0KAogICAgICAgICAgICBkb2MgPSAiVmFsdWUgdW5pdHMuIiwKICAgICAgICApLAogICAgICAgIHVzZXJuYW1lID0gZGljdCgKICAgICAgICAgICAgZG9jID0gIlVzZXJuYW1lIGZvciBhdXRoZW50aWNhdGlvbi4gVXNlZCBieSBzaW1wbGUgY2hlY2ssIFNTSCwgVGVsbmV0LCBkYXRhYmFzZSBtb25pdG9yIGFuZCBKTVggaXRlbXMuIFJlcXVpcmVkIGJ5IFNTSCBhbmQgVGVsbmV0IGl0ZW1zLiIsCiAgICAgICAgKSwKICAgICAgICB2YWx1ZW1hcGlkID0gZGljdCgKICAgICAgICAgICAgZG9jID0gIklEIG9mIHRoZSBhc3NvY2lhdGVkIHZhbHVlIG1hcC4iLAogICAgICAgICksCiAgICApCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHZhbHMgPSB7CiAgICAgICAgICAgICAgICAwOiAncGFzc3dvcmQgKGRlZmF1bHQpJywKICAgICAgICAgICAgICAgIDE6ICdwdWJsaWMga2VrJywKICAgICAgICAgICAgfSwKPHxmaW1fZW5kfD4="]
["881d21c84504ee90db9e4c4643d08fb03435ca5e-3","881d21c84504ee90db9e4c4643d08fb03435ca5e","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwppbXBvcnQgb3MKaW1wb3J0IG9wdHBhcnNlCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCBmaWxldHlwZQoKI0luaXRpYWxpemUgVmFyaWFibGVzCmNvdW50ID0gMApudW1fdW5rbm93biA9IDAKbnVtX3JlbmFtZXMgPSAwCm9wdGlvbnMgPSBOb25lCgpkZWYgcGFyc2VfYXJncygpOgogIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKICAgICIiIgogICAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBcIkFTIElTXCIsIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQuXG4KICAgICdjaGVja2V4dCcgaXMgYSB0b29sIHVzZWQgdG8gbWFrZSBzdXJlIHRoYXQgZmlsZXMgcmVhbGx5IGFyZQogICAgd2hhdCB0aGVpciBleHRlbnNpb25zIHNheSB0aGV5IGFyZS4KCiAgICBydW4gd2l0aDogJ3tQeXRob24gUGF0aH0gY2hlY2tleHQucHkgW29wdGlvbnNdJ1xuXG4KICAgIFRvb2wgY3JlYXRlZCBieTogRWxnaW4gQ2lhbmkKICAgICIiIiwKICAgIHZlcnNpb249IiVwcm9nIDEuMiIpCgogICNBdmFpbGFibGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwogIHBhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXR5cGUiLCBkZXN0PSJ0eXBlIiwgYWN0aW9uPSJhcHBlbmQiLCB0eXBlPSJzdHJpbmciLCBoZWxwPSJGaWxlIHR5cGUocykgdG8gY2hlY2sgZm9yLiBDb21tYSBkZWxpbWl0ZWQgKGUuZy4gLXQganBnLHBuZykuIElucHV0ICogZm9yIGFsbC4iKQogIHBhcnNlci5hZGRfb3B0aW9uKCItZCIsICItLWRlbGV0ZSIsIGRlc3Q9ImRlbGV0ZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9IkRlbGV0ZSBmaWxlIGlmIHRoZSBleHRlbnNpb24gZG9lcyBub3QgbWF0Y2ggdHJ1ZSBmaWxlIHR5cGUuIikKICBwYXJzZXIuYWRkX29wdGlvbigiLWYiLCAiLS1maXgiLCBkZXN0PSJmaXgiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSJSZW5hbWUgZmlsZSBleHRlbnNpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdHJ1ZSBmaWxlIHR5cGUuIikKICBwYXJzZXIuYWRkX29wdGlvbigiLXIiLCAiLS1yZWN1cnNpdmUiLCBkZXN0PSJyZWN1cnNpdmUiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSJDaGVjayBmaWxlcyBpbiBzdWJkaXJlY3RvcmllcyBhcyB3ZWxsLiIpCiAgcGFyc2VyLmFkZF9vcHRpb24oIi1SIiwgIi0tcmVuYW1lIiwgZGVzdD0icmVuYW1lIiwgYWN0aW9uPSJhcHBlbmQiLCB0eXBlPSJzdHJpbmciLCBoZWxwPSJSZW5hbWVzIGFsbCBleHRlbnNpb25zIGZyb20gYSB0byBiIChpLmUuIC1SIGEsYikuIikKICBwYXJzZXIuYWRkX29wdGlvbigiLWwiLCAiLS1sb3dlcmNhc2UiLCBkZXN0PSJsb3dlcmNhc2UiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSJTZXRzIGFsbCBmaWxlIGV4dGVuc2lvbnMgdG8gbG93ZXJjYXNlIGlmIHVzZWQgYnkgaXRzZWxmLiBTZXRzIHJlbmFtZSB0byB1c2UgbG93ZXJjYXNlIGV4dGVuc2lvbnMgd2hlbiB1c2VkIHdpdGggLS1maXggKGRlZmF1bHQpLiIpCiAgcGFyc2VyLmFkZF9vcHRpb24oIi11IiwgIi0tdXBwZXJjYXNlIiwgZGVzdD0idXBwZXJjYXNlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwgaGVscD0iU2V0cyBhbGwgZmlsZSBleHRlbnNpb25zIHRvIHVwcGVyY2FzZSBpZiB1c2VkIGJ5IGl0c2VsZi4gU2V0cyByZW5hbWUgdG8gdXNlIHVwcGVyY2FzZSBleHRlbnNpb25zIHdoZW4gdXNlZCB3aXRoIC0tZml4LiIpCiAgcGFyc2VyLmFkZF9vcHRpb24oIi1xIiwgIi0tcXVpZXQiLCBkZXN0PSJxdWlldCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9IkVuYWJsZSB0aGlzIGZsYWcgdG8gdHVybiBvZmYgYW55IHByaW50IGxvZ2dpbmcuIikKICBwYXJzZXIuYWRkX29wdGlvbigiLXYiLCAiLS12ZXJib3NlIiwgZGVzdD0idmVyYm9zZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9IkVuYWJsZSB0aGlzIGZsYWcgZm9yIGV4dHJhIGxvZ2dpbmcuIikKICAKICBnbG9iYWwgb3B0aW9ucwogIChvcHRpb25zLCBhcmd1bWVudHMpID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQoKICAjVGhyb3cgZXJyb3IgaWYgdXNlciBkb2VzIG5vdCBzcGVjaWZ5IHJlcXVpcmVkIHBhcmFtZXRlcnMKICBpZiBub3Qgb3B0aW9ucy50eXBlIGFuZCBub3Qgb3B0aW9ucy5yZW5hbWUgYW5kIG5vdCBvcHRpb25zLmxvd2VyY2FzZSBhbmQgbm90IG9wdGlvbnMudXBwZXJjYXNlOgogICAgcGFyc2VyLmVycm9yKCJbLV0gUGxlYXNlIHNwZWNpZnkgZmlsZSB0eXBlKHMpLiBVc2UgKiB0byBjaGVjayBhbGwuIFNlZSAtLWhlbHAgZm9yIG1vcmUgaW5mby4iKQogIGVsaWYgb3B0aW9ucy5yZW5hbWUgYW5kIChvcHRpb25zLmRlbGV0ZSBvciBvcHRpb25zLmZpeCk6CiAgICBwYXJzZXIuZXJyb3IoIlstXSBEbyBub3Qgc2V0IC0tcmVuYW1lIGZsYWcgYWxvbmcgd2l0aCAtLWRlbGV0ZSBvciAtLWZpeC4iKQogIGVsaWYgb3B0aW9ucy50eXBlIGFuZCBvcHRpb25zLnJlbmFtZToKICAgIHBhcnNlci5lcnJvcigiWy1dIERvIG5vdCBzZXQgLS10eXBlIGFuZCAtLXJlbmFtZSBmbGFncyBzaW11bHRhbmVvdXNseS4iKQogIGVsaWYgb3B0aW9ucy5kZWxldGUgYW5kIG9wdGlvbnMuZml4OgogICAgcGFyc2VyLmVycm9yKCJbLV0gRG8gbm90IHNldCAtLWRlbGV0ZSBhbmQgLS1maXggZmxhZ3Mgc2ltdWx0YW5lb3VzbHkuIikKICBlbGlmIG9wdGlvbnMubG93ZXJjYXNlIGFuZCBvcHRpb25zLnVwcGVyY2FzZToKICAgIHBhcnNlci5lcnJvcigiWy1dIERvciBub3Qgc2V0IC0tbG93ZXJjYXNlIGFuZCAtLXVwcGVyY2FzZSBmbGFncyBzaW11bHRhbmVvdXNseS4iKQogIGVsaWYgb3B0aW9ucy5xdWlldCBhbmQgb3B0aW9ucy52ZXJib3NlOgogICAgcGFyc2VyLmVycm9yKCJbLV0gRG8gbm90IHNldCAtLXF1aWV0IGFuZCAtLXZlcmJvc2UgZmxhZ3Mgc2ltdWx0YW5lb3VzbHkuIikKICAjIyBFbmQ6IEVycm9yIHNjZW5hcmlvcyAjIwogIHJldHVybiBvcHRpb25zCgoKZGVmIHJlbmFtZSgpOgogIGdsb2JhbCBudW1fcmVuYW1lcwogIHR5cGVzID0gb3B0aW9ucy5yZW5hbWVbMF0uc3BsaXQoIiwiKSAjQXJyYXkgb2Ygc3BlY2lmaWVkIG5hbWVzCiAgaWYgb3B0aW9ucy52ZXJib3NlOgogICAgcHJpbnQoIlJlbmFtaW5nIGFsbCBleHRlbnNpb25zIG9mIHR5cGUiLCB0eXBlc1swXSwgInRvIiwgdHlwZXNbMV0pCiAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoIi4iKToKICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlczoKICAgICAgZmlsZXBhdGggPSByb290KyJcXCIrZmlsZW5hbWUKICAgICAgc3BsaXRfdHVwID0gb3MucGF0aC5zcGxpdGV4dChmaWxlcGF0aCkKICAgICAgaWYgc3BsaXRfdHVwWzFdWzE6XSA9PSB0eXBlc1swXToKICAgICAgICBuZXdfbmFtZSA9IHNwbGl0X3R1cFswXSsnLicrdHlwZXNbMV0KICAgICAgICBpZiBvcHRpb25zLnZlcmJvc2U6CiAgICAgICAgICBwcmludCgiUmVuYW1pbmciLCBmaWxlcGF0aCwgInRvIiwgbmV3X25hbWUpCiAgICAgICAgb3MucmVuYW1lKGZpbGVwYXRoLCBuZXdfbmFtZSkKICAgICAgICBudW1fcmVuYW1lcyArPSAxCiAgICBpZiBvcHRpb25zLnJlY3Vyc2l2ZToKICAgICAgZm9yIGRpciBpbiBkaXJzOgogICAgICAgIGlmIG9wdGlvbnMudmVyYm9zZToKICAgICAgICAgIHByaW50KCJDaGVja2luZyBkaXI6IiwgZGlyKQogICAgZWxzZTogI1ByZXZlbnQgZGVzY2VuZGluZyBpbnRvIHN1YmZvbGRlcnMKICAgICAgYnJlYWsKCgpkZWYgY2hhbmdlX2Nhc2UodHlwZXMpOgogIGdsb2JhbCBudW1fcmVuYW1lcwogIGlmIG9wdGlvbnMubG93ZXJjYXNlOgogICAgaWYgb3B0aW9ucy52ZXJib3NlOgogICAgICBwcmludCgiQ2hhbmdpbmcgYWxsIHNwZWNpZmllZCBmaWxlIGV4dGVuc2lvbnMgdG8gbG93ZXJjYXNlLiIpCiAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsaygiLiIpOgogICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZXM6CiAgICAgICAgaWYgJyonIGluIHR5cGVzOgogICAgICAgICAgZmlsZXBhdGggPSByb290KyJcXCIrZmlsZW5hbWUKICAgICAgICAgIHNwbGl0X3R1cCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZXBhdGgpCiAgICAgICAgICBuZXdfbmFtZSA9IHNwbGl0X3R1cFswXSsnLicrZmlsZW5hbWUucnNwbGl0KCcuJywgMSlbMV0ubG93ZXIoKQogICAgICAgICAgaWYgb3B0aW9ucy52ZXJib3NlOgogICAgICAgICAgICBwcmludCgiUmVuYW1pbmciLCBmaWxlcGF0aCwgInRvIiwgbmV3X25hbWUpCiAgICAgICAgICBvcy5yZW5hbWUoZmlsZXBhdGgsIG5ld19uYW1lKQogICAgICAgICAgbnVtX3JlbmFtZXMgKz0gMQogICAgICAgIGVsc2U6CiAgICAgICAgICBmb3IgZXh0ZW5zaW9uIGluIHR5cGVzOgogICAgICAgICAgICBmaWxlcGF0aCA9IHJvb3QrIlxcIitmaWxlbmFtZQogICAgICAgICAgICBzcGxpdF90dXAgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVwYXRoKQogICAgICAgICAgICBpZiBzcGxpdF90dXBbMV1bMTpdLmxvd2VyKCkgPT0gZXh0ZW5zaW9uLmxvd2VyKCk6CiAgICAgICAgICAgICAgbmV3X25hbWUgPSBzcGxpdF90dXBbMF0rJy4nK2V4dGVuc2lvbi5sb3dlcigpCiAgICAgICAgICAgICAgaWYgb3B0aW9ucy52ZXJib3NlOgogICAgICAgICAgICAgICAgcHJpbnQoIlJlbmFtaW5nIiwgZmlsZXBhdGgsICJ0byIsIG5ld19uYW1lKQogICAgICAgICAgICAgIG9zLnJlbmFtZShmaWxlcGF0aCwgbmV3X25hbWUpCiAgICAgICAgICAgICAgbnVtX3JlbmFtZXMgKz0gMQogICAgICBpZiBvcHRpb25zLnJlY3Vyc2l2ZToKICAgICAgICBmb3IgZGlyIGluIGRpcnM6CiAgICAgICAgICBpZiBvcHRpb25zLnZlcmJvc2U6CiAgICAgICAgICAgIHByaW50KCJDaGVja2luZyBkaXI6IiwgZGlyKQogICAgICBlbHNlOiAjUHJldmVudCBkZXNjZW5kaW5nIGludG8gc3ViZm9sZGVycwogICAgICAgIGJyZWFrCiAgZWxzZTogI29wdGlvbnMudXBwZXJjYXNlCiAgICBpZiBvcHRpb25zLnZlcmJvc2U6CiAgICAgIHByaW50KCJDaGFuZ2luZyBhbGwgc3BlY2lmaWVkIGZpbGUgZXh0ZW5zaW9ucyB0byB1cHBlcmNhc2UuIikKICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKCIuIik6CiAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlczoKICAgICAgICBpZiAnKicgaW4gdHlwZXM6CiAgICAgICAgICBmaWxlcGF0aCA9IHJvb3QrIlxcIitmaWxlbmFtZQogICAgICAgICAgc3BsaXRfdHVwID0gb3MucGF0aC5zcGxpdGV4dChmaWxlcGF0aCkKICAgICAgICAgIG5ld19uYW1lID0gc3BsaXRfdHVwWzBdKycuJytmaWxlbmFtZS5yc3BsaXQoJy4nLCAxKVsxXS51cHBlcigpCiAgICAgICAgICBpZiBvcHRpb25zLnZlcmJvc2U6CiAgICAgICAgICAgIHByaW50KCJSZW5hbWluZyIsIGZpbGVwYXRoLCAidG8iLCBuZXdfbmFtZSkKICAgICAgICAgIG9zLnJlbmFtZShmaWxlcGF0aCwgbmV3X25hbWUpCiAgICAgICAgICBudW1fcmVuYW1lcyArPSAxCiAgICAgICAgZWxzZToKICAgICAgICAgIGZvciBleHRlbnNpb24gaW4gdHlwZXM6CiAgICAgICAgICAgIGZpbGVwYXRoID0gcm9vdCsiXFwiK2ZpbGVuYW1lCiAgICAgICAgICAgIHNwbGl0X3R1cCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZXBhdGgpCiAgICAgICAgICAgIGlmIHNwbGl0X3R1cFsxXVsxOl0udXBwZXIoKSA9PSBleHRlbnNpb24udXBwZXIoKToKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgbnVtX3JlbmFtZXMgKz0gMQogICAgICBpZiBvcHRpb25zLnJlY3Vyc2l2ZToKICAgICAgICBmb3IgZGlyIGluIGRpcnM6CiAgICAgICAgICBpZiBvcHRpb25zLnZlcmJvc2U6CiAgICAgICAgICAgIHByaW50KCJDaGVja2luZyBkaXI6IiwgZGlyKQogICAgICBlbHNlOiAjUHJldmVudCBkZXNjZW5kaW5nIGludG8gc3ViZm9sZGVycwogICAgICAgIGJyZWFrCgoKIyMjIyMjIyMjIyBNQUlOICMjIyMjIyMjIyMKZGVmIG1haW4oKToKICBnbG9iYWwgY291bnQKICBvcHRpb25zID0gcGFyc2VfYXJncygpICNPcHRpb24gcGFyc2VyCgogICNVc2VyIGp1c3Qgd2FudHMgdG8gcmVuYW1lIGZpbGVzCiAgaWYgb3B0aW9ucy5yZW5hbWUgYW5kIG5vdCBvcHRpb25zLnR5cGU6CiAgICByZW5hbWUoKQogICAgaWYgbm90IG9wdGlvbnMucXVpZXQ6CiAgICAgIHByaW50KG51bV9yZW5hbWVzLCAiZmlsZXMgcmVuYW1lZC4iKQogICAgcmV0dXJuCiAgCiAgdHlwZXMgPSBvcHRpb25zLnR5cGVbMF0uc3BsaXQoIiwiKSAjQXJyYXkgb2Ygc3BlY2lmaWVkIHR5cGVzCgogICNVc2VyIHdhbnRzIHRvIGNoYW5nZSBleHRlbnNpb24gY2FzaW5nCiAgaWYgKG9wdGlvbnMubG93ZXJjYXNlIG9yIG9wdGlvbnMudXBwZXJjYXNlKToKICAgIGNoYW5nZV9jYXNlKHR5cGVzKQoKICAjQ2hlY2sgYWxsIGZpbGVzCiAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoIi4iKToKICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlczoKICAgICAgaWYgb3B0aW9ucy52ZXJib3NlOgogICAgICAgIHByaW50KCJDaGVja2luZyBmaWxlOiIsIGZpbGVuYW1lKQogICAgICBmaWxlcGF0aCA9IHJvb3QrIlxcIitmaWxlbmFtZQogICAgICBzcGxpdF90dXAgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVwYXRoKQogICAgICBraW5kID0gZmlsZXR5cGUuZ3Vlc3MoZmlsZXBhdGgpCiAgICAgIGlmIGtpbmQgaXMgTm9uZToKICAgICAgICBpZiBvcHRpb25zLnZlcmJvc2U6CiAgICAgICAgICBwcmludCgnQ2Fubm90IGd1ZXNzIGZpbGUgdHlwZSEnKQogICAgICAgIGNvbnRpbnVlCiAgICAgIGVsc2U6CiAgICAgICAgaWYgb3B0aW9ucy52ZXJib3NlOgogICAgICAgICAgcHJpbnQoJ0ZpbGUgZXh0ZW5zaW9uOiAlcycgJSBraW5kLmV4dGVuc2lvbikKICAgICAgICAgIHByaW50KCdGaWxlIE1JTUUgdHlwZTogJXMnICUga2luZC5taW1lKQogICAgICAgIGlmICcqJyBpbiB0eXBlcyBvciBraW5kLmV4dGVuc2lvbiBpbiB0eXBlczoKICAgICAgICAgIGlmIGtpbmQuZXh0ZW5zaW9uICE9IHNwbGl0X3R1cFsxXVsxOl0ubG93ZXIoKTogI0ZpbGUgZXh0ZW5zaW9uIGlzIHdyb25nCiAgICAgICAgICAgIGlmIG5vdCBvcHRpb25zLnF1aWV0OgogICAgICAgICAgICAgIHByaW50KGZpbGVuYW1lLCAiaGFzIHdyb25nIGV4dGVuc2lvbi4iKQogICAgICAgICAgICBpZiBvcHRpb25zLmRlbGV0ZToKICAgICAgICAgICAgICBpZiBvcHRpb25zLnZlcmJvc2U6CiAgICAgICAgICAgICAgICBwcmludCgiRGVsZXRpbmciLCBmaWxlbmFtZSkKICAgICAgICAgICAgICBvcy5yZW1vdmUoZmlsZXBhdGgpCiAgICAgICAgICAgIGVsaWYgb3B0aW9ucy5maXg6CiAgICAgICAgICAgICAgaWYgb3B0aW9ucy51cHBlcmNhc2U6CiAgICAgICAgICAgICAgICBuZXdfbmFtZSA9IHNwbGl0X3R1cFswXSsnLicra2luZC5leHRlbnNpb24udXBwZXIoKQogICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBuZXdfbmFtZSA9IHNwbGl0X3R1cFswXSsnLicra2luZC5leHRlbnNpb24ubG93ZXIoKQogICAgICAgICAgICAgIGlmIG9wdGlvbnMudmVyYm9zZToKICAgICAgICAgICAgICAgIHByaW50KCJSZW5hbWluZyIsIGZpbGVwYXRoLCAidG8iLCBuZXdfbmFtZSkKICAgICAgICAgICAgICBvcy5yZW5hbWUoZmlsZXBhdGgsIG5ld19uYW1lKQogICAgICAgICAgICBjb3VudCArPSAxCiAgICBpZiBvcHRpb25zLnJlY3Vyc2l2ZToKICAgICAgZm9yIGRpciBpbiBkaXJzOgogICAgICAgIGlmIG9wdGlvbnMudmVyYm9zZToKICAgICAgICAgIHByaW50KCJDaGVja2luZyBkaXI6IiwgZGlyKQogICAgZWxzZTogI1ByZXZlbnQgZGVzY2VuZGluZyBpbnRvIHN1YmZvbGRlcnMKICAgICAgYnJlYWsgICAgICAgICAgCgogICNGaW5hbCBwcmludCBsb2dnaW5nCiAgaWYgb3B0aW9ucy5kZWxldGUgYW5kIG5vdCBvcHRpb25zLnF1aWV0OgogICAgcHJpbnQoY291bnQsICJmaWxlcyB3aXRoIHdyb25nIGV4dGVuc2lvbiBkZWxldGVkLiIpCiAgZWxpZiBvcHRpb25zLmZpeCBhbmQgbm90IG9wdGlvbnMucXVpZXQ6CiAgICBwcmludChjb3VudCwgImZpbGVzIHdpdGggd3JvbmcgZXh0ZW5zaW9uIGZpeGVkLiIpCiAgZWxpZiBub3Qgb3B0aW9ucy5kZWxldGUgYW5kIG5vdCBvcHRpb25zLmZpeCBhbmQgbm90IG9wdGlvbnMucXVpZXQ6CiAgICBwcmludChjb3VudCwgImZpbGVzIGZvdW5kIHdpdGggd3JvbmcgZXh0ZW5zaW9uLiIpCiAgaWYgbm90IG9wdGlvbnMucXVpZXQ6CiAgICBpZiBudW1fcmVuYW1lcyA+IDA6CiAgICAgIHByaW50KG51bV9yZW5hbWVzLCAiZmlsZSBleHRlbnNpb25zIHBhcnNlZC4iKQogICAgaWYgbnVtX3Vua25vd24gPiAwOgogICAgICBwcmludChudW1fdW5rbm93biwgImZpbGVzIGZvdW5kIHdpdGggdW5rbm93biBleHRlbnNpb25zLiIpCiMjIyMjIyMjIyMgRU5EIE1BSU4gIyMjIyMjIyMjIwoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICBtYWluKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICBuZXdfbmFtZSA9IHNwbGl0X3R1cFswXSsnLicrZXh0ZW5zaW9uLnVwcGVyKCkKICAgICAgICAgICAgICBpZiBvcHRpb25zLnZlcmJvc2U6CiAgICAgICAgICAgICAgICBwcmludCgiUmVuYW1pbmciLCBmaWxlcGF0aCwgInRvIiwgbmV3X25hbWUpCiAgICAgICAgICAgICAgb3MucmVuYW1lKGZpbGVwYXRoLCBuZXdfbmFtZSkKPHxmaW1fZW5kfD4="]
["ae91c8fd0c6278c0c2f498b70931d1fd9d69993b-2","ae91c8fd0c6278c0c2f498b70931d1fd9d69993b","PHxmaW1fcHJlZml4fD4KZnJvbSBwcm91ZCBpbXBvcnQgZXhjcwpmcm9tIHByb3VkLmNvcmVfbGFuZyBpbXBvcnQgc2V4cHIsIGNvbXBvc2FibGVfZXZhbHVhdG9yIGFzIGNlLCB0eXBlcwpmcm9tIHByb3VkLmNvcmVfbGFuZy5tb2R1bGFyX2NvbXBpbGVyIGltcG9ydCAqCmZyb20gcHJvdWQuY29yZV9sYW5nLnNjb3BlIGltcG9ydCBTeW0KaW1wb3J0IHByb3VkLnVuaWZpY2F0aW9uLnR5cGVfZW5jb2RlIGFzIHRlCmltcG9ydCB0eXBpbmcKCgpkZWYgbWFrZShjZ2M6IENvbXBpbGVyR2xvYmFsQ29udGV4dCk6CiAgICB0Y19zdGF0ZSA9IGNnYy50Y19zdGF0ZQogICAgdGVudiA9IGNnYy50ZW52CgogICAgRXhwcmVzcyA9IHR5cGluZy5jYXN0KHR5cGluZy5DYWxsYWJsZVtbQ29tcGlsZXJMb2NhbENvbnRleHRdLCBJbnRlcnByZXRlcl0sIE5vbmUpCgogICAgZGVmIGxpbmtfZXhwcmVzcyhldmFsdWF0b3JzKToKICAgICAgICBub25sb2NhbCBFeHByZXNzCiAgICAgICAgRXhwcmVzcyA9IGV2YWx1YXRvcnNbJ0V4cHJlc3MnXQoKICAgIGRlZiB0eXBlX29mX3R5cGUoc3ltOiBTeW0pIC0+IHRlLlQ6Cjx8ZmltX2hvbGV8PgogICAgICAgIHRjX3N0YXRlLnVuaWZ5KHQsIHRlLkFwcCh0eXBlcy50eXBlX3R5cGUsIHdoYXRfaV93YW50KSkKICAgICAgICByZXR1cm4gd2hhdF9pX3dhbnQKCiAgICBjbGFzcyBUeXBpbmcoSW50ZXJwcmV0ZXIsIGNlLkV2YWxfZm9yYWxsLCBjZS5FdmFsX2V4aXN0LCBjZS5FdmFsX2Fycm93LCBjZS5FdmFsX2ltcGx5LCBjZS5FdmFsX3R1cGxlLAogICAgICAgICAgICAgICAgIGNlLkV2YWxfcmVjb3JkLCBjZS5FdmFsX2xpc3QsIGNlLkV2YWxfbG9jLCBjZS5FdmFsX2NhbGwsIGNlLkV2YWxfdHlwZSk6CgogICAgICAgIGRlZiB0eXBlKG1vZHVsZSwgbmFtZSwgZGVmaW5pdGlvbik6CiAgICAgICAgICAgIGFzc2VydCBuYW1lIGlzIE5vbmUKICAgICAgICAgICAgY2xjID0gbW9kdWxlLmNsYwogICAgICAgICAgICB4ID0gRXhwcmVzcyhjbGMpLmV2YWwoZGVmaW5pdGlvbikudHlwZQogICAgICAgICAgICByZXQgPSB0Y19zdGF0ZS5uZXdfdmFyKFZhcj10eXBlcy5WYXIsIGxvYz1jbGMubG9jYXRpb24sIGZpbGVuYW1lPWNsYy5maWxlbmFtZSwgbmFtZT0idmFsdG90eXBlIikKICAgICAgICAgICAgdGNfc3RhdGUudW5pZnkodGUuQXBwKHR5cGVzLnR5cGVfdHlwZSwgcmV0KSwgeCkKICAgICAgICAgICAgcmV0ID0gdGNfc3RhdGUuaW5mZXIocmV0KQogICAgICAgICAgICByZXR1cm4gcmV0CgogICAgICAgIGRlZiBjYWxsKG1vZHVsZSwgZiwgYXJnKToKICAgICAgICAgICAgZiA9IG1vZHVsZS5ldmFsKGYpCiAgICAgICAgICAgIGFyZyA9IG1vZHVsZS5ldmFsKGFyZykKICAgICAgICAgICAgcmV0dXJuIHRlLkFwcChmLCBhcmcpCgogICAgICAgIGRlZiByZWNvcmQobW9kdWxlLCBwYWlycywgcm93KToKICAgICAgICAgICAgXywgcGFpcnMgPSBzZXhwci51bmxvYyhwYWlycykKICAgICAgICAgICAgaWYgcm93OgogICAgICAgICAgICAgICAgcm93X3QgPSB0ZS5Sb3dQb2x5KG1vZHVsZS5ldmFsKHJvdykpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByb3dfdCA9IHRlLmVtcHR5X3JvdwoKICAgICAgICAgICAgZmllbGRzID0gWyhrLCBtb2R1bGUuZXZhbCh2KSkgZm9yIGssIHYgaW4gcGFpcnNdCiAgICAgICAgICAgIHJvd190ID0gdGUucm93X2Zyb21fbGlzdChmaWVsZHMsIHJvd190KQogICAgICAgICAgICByZXR1cm4gdGUuUmVjb3JkKHJvd190KQoKICAgICAgICBkZWYgbGlzdChtb2R1bGUsIGVsdHMpOgogICAgICAgICAgICBsaXN0X3QgPSB0eXBlcy5saXN0X3QKICAgICAgICAgICAgaWYgbm90IGVsdHM6CiAgICAgICAgICAgICAgICByZXR1cm4gbGlzdF90CgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBbYV0gPSBlbHRzCiAgICAgICAgICAgICAgICBsaXN0X2VsdF90eXBlID0gbW9kdWxlLmV2YWwoYSkKICAgICAgICAgICAgICAgIHJldHVybiB0ZS5BcHAobGlzdF90LCBsaXN0X2VsdF90eXBlKQogICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgICAgIHJhaXNlIGV4Y3MuSW52YWxpZExpc3RUeXBlKCJMaXN0IG9mIHt9Ii5mb3JtYXQoZWx0cykpCgogICAgICAgIGRlZiB0dXBsZShtb2R1bGUsIGVsdHMpOgogICAgICAgICAgICBpZiBub3QgZWx0czoKICAgICAgICAgICAgICAgIHJldHVybiB0eXBlcy51bml0X3QKCiAgICAgICAgICAgIGlmIGxlbihlbHRzKSBpcyAxOgogICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZS5ldmFsKGVsdHNbMF0pCgogICAgICAgICAgICByZXR1cm4gdGUuVHVwbGUodHVwbGUobWFwKG1vZHVsZS5ldmFsLCBlbHRzKSkpCgogICAgICAgIGRlZiBpbXBseShtb2R1bGUsIGFyZywgcmV0KToKICAgICAgICAgICAgYXJnID0gbW9kdWxlLmV2YWwoYXJnKQogICAgICAgICAgICByZXQgPSBtb2R1bGUuZXZhbChyZXQpCiAgICAgICAgICAgIHJldHVybiB0ZS5JbXBsaWNpdChhcmcsIHJldCkKCiAgICAgICAgZGVmIGFycm93KG1vZHVsZSwgYXJnLCByZXQpOgogICAgICAgICAgICBhcmcgPSBtb2R1bGUuZXZhbChhcmcpCiAgICAgICAgICAgIHJldCA9IG1vZHVsZS5ldmFsKHJldCkKICAgICAgICAgICAgcmV0dXJuIHRlLkFycm93KGFyZywgcmV0KQoKICAgICAgICBkZWYgZm9yYWxsKG1vZHVsZSwgdW5ib3VuZF9mcmVzaF9kZWNsczogdHlwaW5nLlR1cGxlW3N0ciwgLi4uXSwgcG9seXR5cGUpOgogICAgICAgICAgICBmcmVzaF92YXJzXyA9IHNldCh1bmJvdW5kX2ZyZXNoX2RlY2xzKQogICAgICAgICAgICBpZiBsZW4oZnJlc2hfdmFyc18pICE9IGxlbih1bmJvdW5kX2ZyZXNoX2RlY2xzKToKICAgICAgICAgICAgICAgIHJhaXNlIGV4Y3MuRHVwbGljYXRlZE5hbWVkVHlwZVZhcihmcmVzaF92YXJzXykKICAgICAgICAgICAgdW5ib3VuZF9mcmVzaF9kZWNscyA9IGZyZXNoX3ZhcnNfCiAgICAgICAgICAgIGNsYyA9IG1vZHVsZS5jbGMKICAgICAgICAgICAgZm9yYWxsX3Njb3BlID0gdHlwZXMuRm9yYWxsU2NvcGUoY2xjLmxvY2F0aW9uLCBjbGMuZmlsZW5hbWUpCiAgICAgICAgICAgIGJvdW5kX3ZhcnMgPSBbXQogICAgICAgICAgICB3aXRoIGNsYy5yZXN1bWVfc2NvcGUoKToKICAgICAgICAgICAgICAgIGNsYy5zY29wZSA9IHN1Yl9zY29wZSA9IGNsYy5zY29wZS5zdWJfc2NvcGUoKQogICAgICAgICAgICAgICAgZm9yIG4gaW4gdW5ib3VuZF9mcmVzaF9kZWNsczoKICAgICAgICAgICAgICAgICAgICBfLCBuID0gc2V4cHIudW5sb2MobikKICAgICAgICAgICAgICAgICAgICBzeW0gPSBzdWJfc2NvcGUuZW50ZXIobikKICAgICAgICAgICAgICAgICAgICBib3VuZF92YXIgPSB0ZS5Cb3VuZChuLCBmb3JhbGxfc2NvcGUpCiAgICAgICAgICAgICAgICAgICAgYm91bmRfdmFycy5hcHBlbmQoYm91bmRfdmFyKQogICAgICAgICAgICAgICAgICAgIHRlbnZbc3ltXSA9IHRlLkFwcCh0eXBlcy50eXBlX3R5cGUsIGJvdW5kX3ZhcikKICAgICAgICAgICAgICAgIHJldHVybiB0ZS5Gb3JhbGwoZm9yYWxsX3Njb3BlLCB0dXBsZShib3VuZF92YXJzKSwgbW9kdWxlLmV2YWwocG9seXR5cGUpKQoKICAgICAgICBkZWYgZXhpc3QobW9kdWxlLCBib3VuZF92YXJzOiB0dXBsZSwgbW9ub3R5cGUpOgogICAgICAgICAgICBib3VuZF92YXJzXyA9IHNldChib3VuZF92YXJzKQogICAgICAgICAgICBpZiBsZW4oYm91bmRfdmFycykgIT0gbGVuKGJvdW5kX3ZhcnNfKToKICAgICAgICAgICAgICAgIHJhaXNlIGV4Y3MuRHVwbGljYXRlZE5hbWVkVHlwZVZhcihib3VuZF92YXJzXykKICAgICAgICAgICAgYm91bmRfdmFycyA9IGJvdW5kX3ZhcnNfCiAgICAgICAgICAgIGZpbGVuYW1lID0gbW9kdWxlLmNsYy5maWxlbmFtZQogICAgICAgICAgICBzY29wZSA9IG1vZHVsZS5jbGMuc2NvcGUKICAgICAgICAgICAgZm9yIG4gaW4gYm91bmRfdmFyczoKICAgICAgICAgICAgICAgIGxvYywgbiA9IHNleHByLnVubG9jKG4pCiAgICAgICAgICAgICAgICBzeW0gPSBzY29wZS5lbnRlcihuKQogICAgICAgICAgICAgICAgdHZhciA9IHRjX3N0YXRlLnVzZXJfdmFyKFZhcj10eXBlcy5WYXIsIGxvYz1sb2MsIGZpbGVuYW1lPWZpbGVuYW1lLCBuYW1lPW4pCiAgICAgICAgICAgICAgICB0ZW52W3N5bV0gPSB0ZS5BcHAodHlwZXMudHlwZV90eXBlLCB0dmFyKQoKICAgICAgICAgICAgcmV0dXJuIG1vZHVsZS5ldmFsKG1vbm90eXBlKQoKICAgICAgICBkZWYgZXZhbChzZWxmLCB4KToKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh4LCBzdHIpOgogICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlX29mX3R5cGUoc2VsZi5jbGMuc2NvcGUucmVxdWlyZSh4KSkKICAgICAgICAgICAgICAgIGlmIHNleHByLmlzX2FzdCh4KToKICAgICAgICAgICAgICAgICAgICBoZCwgKmFyZ3MgPSB4CiAgICAgICAgICAgICAgICAgICAgaWYgaGQgaXMgc2V4cHIuYXR0cl9rOgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi50eXBlKE5vbmUsIHgpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNlLmRpc3BhdGNoZXJbaGRdKCphcmdzKShzZWxmKQoKICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoeCkKICAgICAgICAgICAgZXhjZXB0IGV4Y3MuU3RhdGljQ2hlY2tpbmdGYWlsZWQ6CiAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAgICByYWlzZSBleGNzLlN0YXRpY0NoZWNraW5nRmFpbGVkKGUsIHNlbGYuY2xjKQoKICAgICAgICBkZWYgbG9jKG1vZHVsZSwgbG9jYXRpb24sIGNvbnRlbnRzKToKICAgICAgICAgICAgbW9kdWxlLmNsYy5sb2NhdGlvbiA9IGxvY2F0aW9uCiAgICAgICAgICAgIHJldHVybiBtb2R1bGUuZXZhbChjb250ZW50cykKCiAgICByZXR1cm4gVHlwaW5nLCBbbGlua19leHByZXNzXQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHQgPSB0Y19zdGF0ZS5pbmZlcih0ZW52W3N5bV0pCiAgICAgICAgaWYgaXNpbnN0YW5jZSh0LCB0ZS5BcHApIGFuZCB0LmYgaXMgdHlwZXMudHlwZV90eXBlOgogICAgICAgICAgICByZXR1cm4gdC5hcmcKICAgICAgICB3aGF0X2lfd2FudCA9IHRjX3N0YXRlLm5ld192YXIoKQo8fGZpbV9lbmR8Pg=="]
["88e1ad1dfafd0aba941c1b1b0ed49f32b1a72544-1","88e1ad1dfafd0aba941c1b1b0ed49f32b1a72544","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCmZyb20gcmUgaW1wb3J0IHN1Ygpmcm9tIHN0cmluZ2Nhc2UgaW1wb3J0IHNwaW5hbGNhc2UKIyBQYXRocwpkaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQptYXJrZG93bl9wYXRoID0gb3MucGF0aC5qb2luKGRpcm5hbWUsICcuLicsICd3ZWJzaXRlJywgJ2NvbnRlbnQnLCAnYm9vaycpCgoKZGVmIG1hcmtkb3duX2ZpbGVfY29udGVudChib29rKToKICAgIHJldHVybiAiIiItLS0KdGl0bGU6ICJ7cmVhZGFibGVfdGl0bGV9IgpkYXRlOiB7ZGF0ZX0Kc2x1ZzogIiIKZGVzY3JpcHRpb246ICIiCmtleXdvcmRzOiBbXQpkcmFmdDogZmFsc2UKdGFnczogW10KbWF0aDogZmFsc2UKdG9jOiBmYWxzZQpnb29kcmVhZHM6ICJ7Z29vZHJlYWRzX2xpbmt9IgppbWFnZTogIntpbWFnZX0iCi0tLQoiIiIuZm9ybWF0KCoqYm9vaykKCmRlZiBrZWJhYih2YWx1ZSk6CiAgICB0cmFuc2Zvcm1lZF9zdHJpbmcgPSBzdWIocidbXjAtOWEtekEtWl0rJywgJy0nLCB2YWx1ZSkKICAgIGlmICh0cmFuc2Zvcm1lZF9zdHJpbmdbLTFdICE9ICctJyk6CiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkX3N0cmluZwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICByZXR1cm4gdHJhbnNmb3JtZWRfc3RyaW5nWzotMV0KCjx8ZmltX2VuZHw+"]
["9da0afc03abbbc924d0b5f26a9765ad300d608e6-3","9da0afc03abbbc924d0b5f26a9765ad300d608e6","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgRmlsZSBjcmVhdGVkIG9uIDE0IEFwciAyMDEzCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KCl9fYXV0aG9yX18gPSAiWW9zaGlraSBWYXpxdWV6IEJhZXphIgpfX2NvcHlyaWdodF9fID0gIkNvcHlyaWdodCAyMDEzLCBUaGUgRW1wZXJvciBQcm9qZWN0IgpfX2NyZWRpdHNfXyA9IFsiWW9zaGlraSBWYXpxdWV6IEJhZXphIl0KX19saWNlbnNlX18gPSAiQlNEIgpfX3ZlcnNpb25fXyA9ICIwLjkuMy1kZXYiCl9fbWFpbnRhaW5lcl9fID0gIllvc2hpa2kgVmF6cXVleiBCYWV6YSIKX19lbWFpbF9fID0gInlvc2hpa2k4OUBnbWFpbC5jb20iCl9fc3RhdHVzX18gPSAiRGV2ZWxvcG1lbnQiCgpmcm9tIG51bXB5IGltcG9ydCBhcmdzb3J0LCBhcnJheQo8fGZpbV9ob2xlfD4KICAgIGdldF90YXhhX2Nvb3JkcywgbWFrZV9iaXBsb3Rfc2NvcmVzX291dHB1dCkKCmRlZiBleHRyYWN0X3RheGFfZGF0YShvdHVfY29vcmRzLCBvdHVfdGFibGUsIGxpbmVhZ2VzLCBwcmV2YWxlbmNlLCBOPTApOgogICAgIiIiRXh0cmFjIHRoZSBOIG1vc3QgcHJldmFsZW50IGVsZW1lbnRzIGFjY29yZGluZyB0byBhIHByZXZhbGVuY2UgdmVjdG9yCgogICAgSW5wdXRzOgogICAgb3R1X2Nvb3JkczogY29vcmRpbmF0ZXMgd2hlcmUgc3BlY2lmaWMgdGF4YSBpcyBjZW50ZXJlZAogICAgb3R1X3RhYmxlOiBjb250aW5nZW5jeSB0YWJsZQogICAgbGluZWFnZXM6IHRheG9ub21pYyBhc3NpZ25tZW50cyBmb3IgZWFjaCByb3cgaW4gdGhlIG90dV90YWJsZQogICAgcHJldmFsZW5jZTogdmVjdG9yIHdpdGggcHJldmFsbmNlIGZyb20gMCB0byAxIGZvciBlYWNoIHJvdyBvZiB0aGUgb3R1X3RhYmxlCiAgICBhcyByZXR1cm5lZCBmcm9tIHFpaW1lLmJpcGxvdHMuZ2V0X3RheGFfcHJldmFsZW5jZQogICAgTjogbnVtYmVyIG9mIG1vc3QgcHJldmFsZW50IGVsZW1lbnRzIHRvIHJldGFpbiwgaWYgemVybyBpcyBwYXNzZWQsIHdpbGwKICAgIHJlYXRhaW4gYWxsIGF2YWlsYWJsZQoKICAgIE91dHB1dHM6CiAgICBvdHVfY29vcmRzOiBOIG1vc3QgcHJldmFsZW50IGNvb3JkcwogICAgb3V0X290dV90YWJsZTogTiBtb3N0IHByZXZhbGVudCByb3dzIG9mIHRoZSBvdHVfdGFibGUKICAgIG91dF9vdHVfbGluZWFnZXM6IE4gbW9zdCBwcmV2YWxlbnQgdGF4b25vbWljIGFzc2lnbm1lbnRzIGZvciBlYWNoIHJvdyBvZiB0aGUKICAgIG90dV90YWJsZQogICAgb3V0X3ByZXZhbGVuY2U6IGZpcnN0IE4gdmFsdWVzIG9mIHByZXZhbGVuY2UKCiAgICBCYXNlZCBvbiBxaWltZS5iaXBsb3RzLnJlbW92ZV9yYXJlX3RheGE7IHRob3VnaCB0aGlzIGZ1bmN0aW9uIG9wcGVyYXRlcyBvbgogICAgZ2VuZXJpYyBkYXRhIHRoYXQncyBub3QgaW4gZGljdCBmb3JtYSBhbmQgcmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgcmVzdWx0LgogICAgIiIiCiAgICAjIElmIGxlc3MgdGhhbiB6ZXJvIG9yIGdyZWF0ZXIgdGhhbiBsZW5ndGggb2YgdGF4YSwgTiA9IGZpeCB0byBtYXgKICAgIGlmIE48PTAgb3IgTj5sZW4ocHJldmFsZW5jZSk6CiAgICAgICAgTiA9IGxlbihwcmV2YWxlbmNlKQoKICAgICMgZ2V0IHRoZSBmaXJzdCBOIGluZGljZXMgdG8ga2VlcCBmcm9tIGFsbCBvZiB0aGUgdGF4YSBkYXRhCiAgICBpbmRpY2VzID0gYXJnc29ydChwcmV2YWxlbmNlKQogICAgaW5kaWNlcyA9IGluZGljZXNbOjotMV1bOk5dCgogICAgIyByZW1vdmUgdGhlIGluZGljZXMgdGhhdCBhcmUgbm90IG5lZWRlZCBhbmQgcmV0dXJuIHRoZW0gaW5kaXZpZHVhbGx5CiAgICBvdXRfb3R1X2Nvb3JkcyA9IG90dV9jb29yZHNbaW5kaWNlcywgOl0KICAgIG91dF9vdHVfdGFibGUgPSBvdHVfdGFibGVbaW5kaWNlcywgOl0KICAgIG91dF9vdHVfbGluZWFnZXMgPSBbbGluZWFnZXNbaW5kZXhdIGZvciBpbmRleCBpbiBpbmRpY2VzXQogICAgb3V0X3ByZXZhbGVuY2UgPSBwcmV2YWxlbmNlW2luZGljZXNdCgogICAgcmV0dXJuIG91dF9vdHVfY29vcmRzLCBvdXRfb3R1X3RhYmxlLCBvdXRfb3R1X2xpbmVhZ2VzLCBvdXRfcHJldmFsZW5jZQoKZGVmIHByZXByb2Nlc3Nfb3R1X3RhYmxlKG90dV9zYW1wbGVfaWRzLCBvdHVfdGFibGUsIGxpbmVhZ2VzLAogICAgICAgICAgICAgICAgICAgICAgICBjb29yZHNfZGF0YSwgY29vcmRzX2hlYWRlcnMsIE49MCk6CiAgICAiIiJQcmVwcm9jZXNzIHRoZSBPVFUgdGFibGUgdG8gdG8gZ2VuZXJhdGUgdGhlIHJlcXVpcmVkIGRhdGEgZm9yIHRoZSBiaXBsb3RzCgogICAgSW5wdXQ6CiAgICBvdHVfc2FtcGxlX2lkczogc2FtcGxlIGlkZW50aWZpZXJzIGZvciB0aGUgb3R1X3RhYmxlCiAgICBvdHVfdGFibGU6IGNvbnRpbmdlbmN5IHRhYmxlCiAgICBsaW5lYWdlczogdGF4b25vbWljIGFzc2lnbm1lbnRzIGZvciB0aGUgT1RVcyBpbiB0aGUgb3R1X3RhYmxlCiAgICBjb29yZHNfZGF0YTogcHJpbmNpcGFsIGNvb3JkaW5hdGVzIGRhdGEgd2hlcmUgdGhlIHRheGEgd2lsbCBiZSBtYXBwZWQKICAgIE46IG51bWJlciBvZiBtb3N0IHByZXZhbGVudCB0YXhhIHRvIGtlZXAsIGJ5IGRlZmF1bHQgd2lsbCB1c2UgYWxsCgogICAgT3V0cHV0OgogICAgb3R1X2Nvb3JkczogY29vcmRpbmF0ZXMgcmVwcmVzZW50aW5nIHRoZSBOIG1vc3QgcHJldmFsZW50IHRheGEgaW4gb3R1X3RhYmxlCiAgICBvdHVfdGFibGU6IE4gbW9zdCBwcmV2YWxlbnQgT1RVcyBmcm9tIHRoZSBpbnB1dCBvdHVfdGFibGUKICAgIG90dV9saW5lYWdlczogdGF4b25vbWljIGFzc2lnbm1lbnRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIE4gbW9zdCBwcmV2YWxlbnQKICAgIE9UVXMKICAgIG90dV9wcmV2YWxlbmNlOiB2ZWN0b3Igd2l0aCB0aGUgcHJldmFsZW5jZSBzY29yZXMgb2YgdGhlIE4gaGlnaGVzdCB2YWx1ZXMKICAgIGxpbmVzOiBjb29yZHMgd2hlcmUgdGhlIE4gbW9zdCBwcmV2YWxlbnQgdGF4YSB3aWxsIGJlIHBvc2l0aW9uZWQgaW4gdGhlCiAgICBiaXBsb3QKICAgICIiIgoKICAgICMgcmV0dXJuIGVtcHR5IHZhbHVlcyBpZiBhbnkgb2YgdGhlIHRheGEgZGF0YSBpcyBlbXB0eQogICAgaWYgKG90dV9zYW1wbGVfaWRzID09IFtdKSBvciAob3R1X3RhYmxlID09IGFycmF5KFtdKSkgb3IgKGxpbmVhZ2VzID09IFtdKToKICAgICAgICByZXR1cm4gW10sIFtdLCBbXSwgW10sICcnCgogICAgIyB0aGlzIG1lYW5zIHRoZXJlJ3Mgb25seSBvbmUgb3IgZmV3ZXIgcm93cyBpbiB0aGUgY29udGluZ2VuY3kgdGFibGUKICAgIGlmIGxlbihvdHVfdGFibGUpIDw9IDEgb3IgbGVuKGxpbmVhZ2VzKSA8PSAxOgogICAgICAgIHJhaXNlIEVtcGVyb3JVbnN1cHBvcnRlZENvbXB1dGF0aW9uLCAiQmlwbG90cyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgIitcCiAgICAgICAgICAgICJjb250aW5nZW5jeSB0YWJsZXMgd2l0aCBvbmUgb3IgZmV3ZXIgcm93cyIKCiAgICAjIGlmIHRoaXMgZWxlbWVudCBpcyBhIGxpc3QgdGFrZSB0aGUgZmlyc3QgaGVhZGVycyBhbmQgY29vcmRpbmF0ZXMKICAgICMgYm90aCBvZiB0aGVzZSB3aWxsIGJlIHRoZSBtYXN0ZXIgY29vcmRpbmF0ZXMsIGkuIGUuIHdoZXJlIGRhdGEgaXMgY2VudGVyZWQKICAgIGlmIHR5cGUoY29vcmRzX2RhdGEpID09IGxpc3QgYW5kIHR5cGUoY29vcmRzX2hlYWRlcnMpID09IGxpc3Q6CiAgICAgICAgY29vcmRzX2RhdGEgPSBjb29yZHNfZGF0YVswXQogICAgICAgIGNvb3Jkc19oZWFkZXJzID0gY29vcmRzX2hlYWRlcnNbMF0KCiAgICAjIHJlLWFycmFuZ2UgdGhlIG90dSB0YWJsZSBzbyBpdCBtYXRjaGVzIHRoZSBvcmRlciBvZiB0aGUgc2FtcGxlcyBpbiB0aGUKICAgICMgY29vcmRpbmF0ZXMgZGF0YSAmIHJlbW92ZSBhbnkgc2FtcGxlIHRoYXQgaXMgbm90IGluIHRoZSBjb29yZGluYXRlcyBoZWFkZXIKICAgIG90dV9zYW1wbGVfaWRzLCBvdHVfdGFibGUgPSBzb3J0X3RheGFfdGFibGVfYnlfcGNvYV9jb29yZHMoY29vcmRzX2hlYWRlcnMsCiAgICAgICAgb3R1X3RhYmxlLCBvdHVfc2FtcGxlX2lkcykKCiAgICAjIHJldHJpZXZlIHRoZSBwcmV2YWxlbmNlIGFuZCB0aGUgY29vcmRzIHByaW9yIHRoZSBmaWx0ZXJpbmcKICAgIHByZXZhbGVuY2UgPSBnZXRfdGF4YV9wcmV2YWxlbmNlKG90dV90YWJsZSkKICAgIGJpX3Bsb3RfY29vcmRzID0gZ2V0X3RheGFfY29vcmRzKG90dV90YWJsZSwgY29vcmRzX2RhdGEpCgogICAgb19vdHVfY29vcmRzLCBvX290dV90YWJsZSwgb19vdHVfbGluZWFnZXMsIG9fcHJldmFsZW5jZSA9XAogICAgICAgIGV4dHJhY3RfdGF4YV9kYXRhKGJpX3Bsb3RfY29vcmRzLCBvdHVfdGFibGUsIGxpbmVhZ2VzLCBwcmV2YWxlbmNlLCBOKQoKICAgIGxpbmVzID0gJ1xuJy5qb2luKG1ha2VfYmlwbG90X3Njb3Jlc19vdXRwdXQoeydjb29yZCc6IG9fb3R1X2Nvb3JkcywKICAgICAgICAnbGluZWFnZXMnOiBvX290dV9saW5lYWdlc30pKQoKICAgIHJldHVybiBvX290dV9jb29yZHMsIG9fb3R1X3RhYmxlLCBvX290dV9saW5lYWdlcywgb19wcmV2YWxlbmNlLCBsaW5lcwo8fGZpbV9zdWZmaXh8PgoKZnJvbSBlbXBlcm9yLnV0aWwgaW1wb3J0IEVtcGVyb3JVbnN1cHBvcnRlZENvbXB1dGF0aW9uCmZyb20gZW1wZXJvci5zb3J0IGltcG9ydCBzb3J0X3RheGFfdGFibGVfYnlfcGNvYV9jb29yZHMKZnJvbSBlbXBlcm9yLnFpaW1lX2JhY2twb3J0cy5iaXBsb3RzIGltcG9ydCAoZ2V0X3RheGFfcHJldmFsZW5jZSwKPHxmaW1fZW5kfD4="]
["4e0b47b4b4bbb78a4e6c5c4a0108c80c5761d4e1-2","4e0b47b4b4bbb78a4e6c5c4a0108c80c5761d4e1","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmltcG9ydCBvcwppbXBvcnQgbG9nZ2luZwpmcm9tIGxvZ2dpbmcuaGFuZGxlcnMgaW1wb3J0IFNNVFBIYW5kbGVyLCBSb3RhdGluZ0ZpbGVIYW5kbGVyCmZyb20gZmxhc2sgaW1wb3J0IEZsYXNrCmZyb20gY29uZmlnIGltcG9ydCBDb25maWcKZnJvbSBmbGFza19zcWxhbGNoZW15IGltcG9ydCBTUUxBbGNoZW15CmZyb20gZmxhc2tfbWlncmF0ZSBpbXBvcnQgTWlncmF0ZQpmcm9tIGZsYXNrX2xvZ2luIGltcG9ydCBMb2dpbk1hbmFnZXIKCmFwcCA9IEZsYXNrKF9fbmFtZV9fKQojIGFwcC5jb25maWcuZnJvbV9vYmplY3QoQ29uZmlnKQpiYXNlZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCgphcHAuY29uZmlnWydTRUNSRVRfS0VZJ10gPSBvcy5lbnZpcm9uLmdldCgnU0VDUkVUX0tFWScpIG9yICdzZWNyZXQta2V5IScKYXBwLmNvbmZpZ1snU1FMQUxDSEVNWV9EQVRBQkFTRV9VUkknXSA9IG9zLmVudmlyb24uZ2V0KCdTUUxBTENIRU1ZX19EQVRBQkFTRV9VUkknKSBvciAnc3FsaXRlOi8vL3t9Jy5mb3JtYXQob3MucGF0aC5qb2luKGJhc2VkaXIsICdhcHAuZGInKSkKYXBwLmNvbmZpZ1snU1FMQUxDSEVNWV9UUkFDS19NT0RJRklDQVRJT05TJ10gPSBGYWxzZQoKZGIgPSBTUUxBbGNoZW15KGFwcCkKbWlncmF0ZSA9IE1pZ3JhdGUoYXBwLCBkYikKCmxvZ2luID0gTG9naW5NYW5hZ2VyKGFwcCkKbG9naW4ubG9naW5fdmlldyA9ICdsb2dpbicKCmFwcC5jb25maWdbJ01BSUxfU0VSVkVSJ10gPSBvcy5lbnZpcm9uLmdldCgnTUFJTF9TRVJWRVInKQphcHAuY29uZmlnWydNQUlMX1BPUlQnXSA9IG9zLmVudmlyb24uZ2V0KCdNQUlMX1BPUlQnKQphcHAuY29uZmlnWydNQUlMX1VTRV9UTFMnXSA9IG9zLmVudmlyb24uZ2V0KCdNQUlMX1VTRVJfVExTcycpCmFwcC5jb25maWdbJ01BSUxfVVNFUk5BTUUnXSA9IG9zLmVudmlyb24uZ2V0KCdNQUlMX1VTRVJOQU1FJykKYXBwLmNvbmZpZ1snTUFJTF9QQVNTV09SRCddID0gb3MuZW52aXJvbi5nZXQoJ01BSUxfUEFTU1dPUkQnKQphcHAuY29uZmlnWydBRE1JTlMnXSA9IFsnYW5kcmVzbHVqYW5kZXZAZ21haWwuY29tJ10KCmFwcC5jb25maWdbJ1BPU1RTX1BFUl9QQUdFJ10gPSAyNQoKCmlmIG5vdCBhcHAuZGVidWc6CiAgICBpZiBhcHAuY29uZmlnWydNQUlMX1NFUlZFUiddOgogICAgICAgIGF1dGggPSBOb25lCiAgICAgICAgaWYgYXBwLmNvbmZpZ1snTUFJTF9VU0VSTkFNRSddIG9yIGFwcC5jb25maWdbJ01BSUxfUEFTU1dPUkQnXToKICAgICAgICAgICAgYXV0aCA9IChhcHAuY29uZmlnWydNQUlMX1VTRVJOQU1FJ10sIGFwcC5jb25maWdbJ01BSUxfUEFTU1dPUkQnXSkKICAgICAgICBzZWN1cmUgPSBOb25lCiAgICAgICAgaWYgYXBwLmNvbmZpZ1snTUFJTF9VU0VfVExTJ106CiAgICAgICAgICAgIHNlY3VyZSA9ICgpCiAgICAgICAgbWFpbF9oYW5kbGVyID0gU01UUEhhbmRsZXIoCiAgICAgICAgICAgIG1haWxob3N0PShhcHAuY29uZmlnWydNQUlMX1NFUlZFUiddLCBhcHAuY29uZmlnWydNQUlMX1BPUlQnXSksCiAgICAgICAgICAgIGZyb21hZGRyPSduby1yZXBseUAnICsgYXBwLmNvbmZpZ1snTUFJTF9TRVJWRVInXSwKICAgICAgICAgICAgdG9hZGRycz1hcHAuY29uZmlnWydBRE1JTlMnXSwgc3ViamVjdD0nTWljcm9ibG9nIEZhaWx1cmUnLAogICAgICAgICAgICBjcmVkZW50aWFscz1hdXRoLCBzZWN1cmU9c2VjdXJlKQogICAgICAgIG1haWxfaGFuZGxlci5zZXRMZXZlbChsb2dnaW5nLkVSUk9SKQogICAgICAgIGFwcC5sb2dnZXIuYWRkSGFuZGxlcihtYWlsX2hhbmRsZXIpCiAgICAKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygnbG9ncycpOgogICAgICAgIG9zLm1rZGlyKCdsb2dzJykKICAgIGZpbGVfaGFuZGxlciA9IFJvdGF0aW5nRmlsZUhhbmRsZXIoJ2xvZ3MvbWljcm9ibG9nLmxvZycsIG1heEJ5dGVzPTEwMjQwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrdXBDb3VudD0xMCkKICAgIGZpbGVfaGFuZGxlci5zZXRGb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIoCiAgICAgICAgJyUoYXNjdGltZSlzICUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIFtpbiAlKHBhdGhuYW1lKXM6JShsaW5lbm8pZF0nKSkKICAgIGZpbGVfaGFuZGxlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCjx8ZmltX2hvbGV8PgoKZnJvbSBhcHAgaW1wb3J0IHJvdXRlcywgbW9kZWxzLCBlcnJvcnMKPHxmaW1fc3VmZml4fD4KICAgIGFwcC5sb2dnZXIuYWRkSGFuZGxlcihmaWxlX2hhbmRsZXIpCgogICAgYXBwLmxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCiAgICBhcHAubG9nZ2VyLmluZm8oJ01pY3JvYmxvZyBzdGFydHVwJykKPHxmaW1fZW5kfD4="]
["cc9fddd836b49d966d345a9bb04c77755405ca40-5","cc9fddd836b49d966d345a9bb04c77755405ca40","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIENvcHlyaWdodCAyMDE5IEthdGEuYWkKIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluCmltcG9ydCBvcwoKZnJvbSBzYWNyZWQgaW1wb3J0IEV4cGVyaW1lbnQKZnJvbSBzYWNyZWQub2JzZXJ2ZXJzIGltcG9ydCBNb25nb09ic2VydmVyCmZyb20gdHFkbSBpbXBvcnQgdHFkbQoKZnJvbSBpbmdyZWRpZW50cy5jb3JwdXMgaW1wb3J0IGluZyBhcyBjb3JwdXNfaW5nLCByZWFkX2NvcnB1cwpmcm9tIGluZ3JlZGllbnRzLnByZXByb2Nlc3MgaW1wb3J0IGluZyBhcyBwcmVwX2luZywgbWFrZV9wcmVwX3NlbnQKCmV4ID0gRXhwZXJpbWVudChuYW1lPSdpZC13b3JkMnZlYy1wcmVwLWdsb3ZlLWNvcnB1cycsIGluZ3JlZGllbnRzPVtjb3JwdXNfaW5nLCBwcmVwX2luZ10pCgojIFNldHVwIE1vbmdvIG9ic2VydmVyCm1vbmdvX3VybCA9IG9zLmdldGVudignU0FDUkVEX01PTkdPX1VSTCcpCjx8ZmltX2hvbGV8PgoKQGV4LmF1dG9tYWluCmRlZiBwcmVwYXJlKCk6CiAgICAiIiJQcmVwYXJlIGNvcnB1cyBmb3IgdHJhaW5pbmcgd2l0aCBHbG9WZS4iIiIKICAgIHByZXBfc2VudCA9IG1ha2VfcHJlcF9zZW50KCkKICAgIGZvciBwYXJhcyBpbiB0cWRtKHJlYWRfY29ycHVzKCksIHVuaXQ9J2RvYycpOgogICAgICAgIHNlbnRzID0gW10KICAgICAgICBmb3Igc2VudCBpbiBjaGFpbi5mcm9tX2l0ZXJhYmxlKHBhcmFzKToKICAgICAgICAgICAgc2VudHMuYXBwZW5kKCcgJy5qb2luKHByZXBfc2VudChzZW50KSkpCiAgICAgICAgcHJpbnQoJyAnLmpvaW4oc2VudHMpKQo8fGZpbV9zdWZmaXh8PgpkYl9uYW1lID0gb3MuZ2V0ZW52KCdTQUNSRURfREJfTkFNRScpCmlmIG1vbmdvX3VybCBpcyBub3QgTm9uZSBhbmQgZGJfbmFtZSBpcyBub3QgTm9uZToKICAgIGV4Lm9ic2VydmVycy5hcHBlbmQoTW9uZ29PYnNlcnZlci5jcmVhdGUodXJsPW1vbmdvX3VybCwgZGJfbmFtZT1kYl9uYW1lKSkKCjx8ZmltX2VuZHw+"]
["060606e3e2c2077a5ec27c33e72605d006b7fc65-1","060606e3e2c2077a5ec27c33e72605d006b7fc65","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOnV0Zi04IC0qLQoKIwojIEltcG9ydCBhbmQgZXhwb3J0IFgzRCBmaWxlcwojCgojIEV4dGVybmFsIGRlcGVuZGVuY2llcwpmcm9tIHhtbC5ldHJlZS5FbGVtZW50VHJlZSBpbXBvcnQgcGFyc2UKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBNZXNoVG9vbGtpdCBhcyBtdGsKCiMgSW1wb3J0IGEgdHJpYW5ndWxhciBtZXNoIGZyb20gYSBYM0QgZmlsZQpkZWYgUmVhZFgzZCggZmlsZW5hbWUgKSA6CgkjIEluaXRpYWxpc2F0aW9uCglmYWNlcyA9IFtdCgl2ZXJ0aWNlcyA9IFtdCgkjwqBSZWFkIFhNTCBmaWxlCgl0cmVlID0gcGFyc2UoIGZpbGVuYW1lICkKCXJvb3QgPSB0cmVlLmdldHJvb3QoKQoJZm9yIGZhY2UgaW4gcm9vdC5pdGVyKCAnSW5kZXhlZEZhY2VTZXQnICkgOgoJCWZhY2VzID0gbnAuZnJvbXN0cmluZyggZmFjZS5nZXQoICdjb29yZEluZGV4JyApLnJlcGxhY2UoICctMScsICcnICksIGR0eXBlPWludCwgc2VwPScgJyApLnJlc2hhcGUoIC0xLCAzICkKCWZvciB2ZXJ0ZXggaW4gcm9vdC5pdGVyKCAnQ29vcmRpbmF0ZScgKSA6CgkJdmVydGljZXMgPSBucC5mcm9tc3RyaW5nKCB2ZXJ0ZXguZ2V0KCAncG9pbnQnICksIHNlcD0nICcgKS5yZXNoYXBlKCAtMSwgMyApCgkjIFJldHVybiB0aGUgZmluYWwgbWVzaAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CglyZXR1cm4gbXRrLk1lc2goIG5hbWU9ZmlsZW5hbWUsIHZlcnRpY2VzPXZlcnRpY2VzLCBmYWNlcz1mYWNlcyApCjx8ZmltX2VuZHw+"]
["309ed1a427ddf7b8f20afac5e1dfec182be0e2a9-4","309ed1a427ddf7b8f20afac5e1dfec182be0e2a9","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IHN5cwppbXBvcnQgcmFuZG9tCmltcG9ydCB0aW1lCmltcG9ydCBjb250ZXh0bGliCmltcG9ydCB0ZXJtaW9zCmltcG9ydCB0aW1lb3V0X2RlY29yYXRvcgppbXBvcnQgb3MKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBqc29uCmltcG9ydCBpbmZvCmltcG9ydCBzdHR5CmltcG9ydCBzaHV0aWwKZnJvbSBibGVzc2luZ3MgaW1wb3J0IFRlcm1pbmFsCgoKY2xhc3MgUXVpdEdhbWVFcnJvcihCYXNlRXhjZXB0aW9uKToKICAgIHBhc3MKCgpjbGFzcyBSYW5JbnRvU29tZXRoaW5nRXJyb3IoUXVpdEdhbWVFcnJvcik6CiAgICBwYXNzCgoKY2xhc3MgSXNGdWxsU2NyZWVuKEJhc2VFeGNlcHRpb24pOgogICAgcGFzcwoKCmRlZiBkcmF3X3dvcm0oKToKICAgIGZvciBsb2NhdGlvbiBpbiB3b3JtX2xvY2F0aW9uczoKICAgICAgICBwcmludChkb19tb3ZlKCpyZXZlcnNlZChsb2NhdGlvbikpICsgdGVybS5icmlnaHRfYmx1ZSgnbycpLCBlbmQ9JycpCgogICAgcHJpbnQoZG9fbW92ZSgqcmV2ZXJzZWQod29ybV9oZWFkKSkgKyAnQCcgKyBkb19tb3ZlKCpyZXZlcnNlZCh3b3JtX2hlYWQpKSwgZW5kPScnKQoKCmRlZiBkcmF3X2ZyYW1lKCk6CiAgICBwcmludCh0ZXJtLmNsZWFyLCBlbmQ9JycpCiAgICBwcmludChkb19tb3ZlKDAsIDApICsgdGVybS5vbl9yZWQoJyBXb3JtJykgKyB0ZXJtLmJsYWNrX29uX2JyaWdodF9jeWFuKCcucHkgJykgKyAnIFByZXNzICcgKyB0ZXJtLmJvbGRfZ3JlZW4oJ0knKSArICcgZm9yIGluZm8sICcgKyB0ZXJtLmJvbGRfcmVkKCdDdHJsLUMnKSsgJyB0byBxdWl0JywgZW5kPScnKQogICAgaWYgc2NvcmUgPiAtMToKICAgICAgICBwcmludChkb19tb3ZlKDAsIHdpZHRoLTEyKSArIGYnU2NvcmU6eyIgIiooNC1sZW4oc3RyKHNjb3JlKSkpfXt0ZXJtLmJyaWdodF9ncmVlbihzdHIoc2NvcmUpKX0nLCBlbmQ9JycpCiAgICBwcmludChkb19tb3ZlKDEsIDApICsgdGVybS53aGl0ZV9vbl9yZWQoJ+KUjCcgKyAoJ+KUgCcgKiAod2lkdGgtMykpICsgJ+KUkCcpLCBlbmQ9JycpCiAgICBmb3IgeSBpbiByYW5nZSgyLCBoZWlnaHQtMSk6CiAgICAgICAgcHJpbnQoZG9fbW92ZSh5LCAwKSArIHRlcm0ud2hpdGVfb25fcmVkKCfilIInICsgZG9fbW92ZSh5LCB3aWR0aC0yKSArICfilIInKSwgZW5kPScnKQogICAgcHJpbnQoCiAgICAgICAgICAgIGRvX21vdmUoaGVpZ2h0LTEsIDApCiAgICAgICAgICAgICsgdGVybS53aGl0ZV9vbl9yZWQoJ+KUlCcpCiAgICAgICAgICAgICsgdGVybS53aGl0ZV9vbl9yZWQoJ+KUgCcgKiAod2lkdGgtMykpCiAgICAgICAgICAgICsgdGVybS53aGl0ZV9vbl9yZWQoJ+KUmCcpCiAgICAgICAgLCBlbmQ9JycpCiAgICBwcmludChkb19tb3ZlKCpyZXZlcnNlZChib251c19sb2NhdGlvbikpICsgdGVybS5ibGFja19vbl9ncmVlbih0ZXJtLm9uX2JyaWdodF9ncmVlbihzdHIoYm9udXNfcG9pbnRzKSkpLCBlbmQ9JycpCiAgICBkcmF3X3dvcm0oKQogICAgc3lzLnN0ZG91dC5mbHVzaCgpCgoKZGVmIG1vdmVfaGVhZChkaXJlY3Rpb24sIGRpc3RhbmNlKToKICAgIGdsb2JhbCBzaXplLCB3b3JtX2hlYWQsIGxhc3RfZGlyLCB3b3JtX2xvY2F0aW9ucywgYm9udXNfbG9jYXRpb24sIGJvbnVzX3BvaW50cywgc2NvcmUKCiAgICBpZiBkaXJlY3Rpb24gbm90IGluICdoamtsSEpLTEFCQ0R3YXNkeCc6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignYXJndW1lbnQgdG8gbW92ZV9oZWFkKCkgbXVzdCBiZSBvbmUgb2YgYGhqa2xISktMQUJDRHdhc2R4YCcpCgogICAgaWYgZGlyZWN0aW9uID09ICd4JzoKICAgICAgICByZXR1cm4KCiAgICB3b3JtX2xvY2F0aW9ucy5hcHBlbmQod29ybV9oZWFkLmNvcHkoKSkKICAgIAogICAgd29ybV9oZWFkID0gd29ybV9oZWFkLmNvcHkoKQoKICAgIGlmIGRpcmVjdGlvbiBpbiAna0tBdyc6ICN1cAogICAgICAgIHdvcm1faGVhZFsxXSAtPSAxCiAgICAgICAgbGFzdF9kaXIgPSAnQScKICAgIGVsaWYgZGlyZWN0aW9uIGluICdqSkJzJzogI2Rvd24KICAgICAgICB3b3JtX2hlYWRbMV0gKz0gMQogICAgICAgIGxhc3RfZGlyID0gJ0InCiAgICBlbGlmIGRpcmVjdGlvbiBpbiAnaEhEYSc6ICNsZWZ0CiAgICAgICAgd29ybV9oZWFkWzBdIC09IDEKICAgICAgICBsYXN0X2RpciA9ICdEJwogICAgZWxpZiBkaXJlY3Rpb24gaW4gJ2xMQ2QnOiAjcmlnaHQKICAgICAgICB3b3JtX2hlYWRbMF0gKz0gMQogICAgICAgIGxhc3RfZGlyID0gJ0MnCiAgICAKICAgIHdoaWxlIGxlbih3b3JtX2xvY2F0aW9ucykgPiBzaXplOgogICAgICAgIHdvcm1fbG9jYXRpb25zLnBvcCgwKQoKICAgIGlmIHdvcm1faGVhZCBpbiB3b3JtX2xvY2F0aW9ucyBcCiAgICAgICAgICAgIG9yIHdvcm1faGVhZFsxXSA8PSAxIFwKICAgICAgICAgICAgb3Igd29ybV9oZWFkWzFdID49IGhlaWdodC0xIFwKICAgICAgICAgICAgb3Igd29ybV9oZWFkWzBdIDw9IDAgXAogICAgICAgICAgICBvciB3b3JtX2hlYWRbMF0gPj0gd2lkdGgtMjoKICAgICAgICByYWlzZSBSYW5JbnRvU29tZXRoaW5nRXJyb3IoKQoKICAgIGlmIHdvcm1faGVhZCA9PSBib251c19sb2NhdGlvbjoKICAgICAgICBzaXplICs9IGJvbnVzX3BvaW50cwogICAgICAgIHNjb3JlICs9IGJvbnVzX3BvaW50cwogICAgICAgIG5ld19ib251cygpCgogICAgaWYgZGlzdGFuY2UgPiAxOgogICAgICAgIG1vdmVfaGVhZChkaXJlY3Rpb24sIGRpc3RhbmNlLTEpCgoKQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKZGVmIGRlY2Fub25pemUoZmQpOgogICAgb2xkX3NldHRpbmdzID0gdGVybWlvcy50Y2dldGF0dHIoZmQpCiAgICBuZXdfc2V0dGluZ3MgPSBvbGRfc2V0dGluZ3NbOl0KICAgIG5ld19zZXR0aW5nc1szXSAmPSB+dGVybWlvcy5JQ0FOT04KICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0ZXJtaW9zLlRDU0FGTFVTSCwgbmV3X3NldHRpbmdzKQogICAgeWllbGQKICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0ZXJtaW9zLlRDU0FGTFVTSCwgb2xkX3NldHRpbmdzKQoKCkB0aW1lb3V0X2RlY29yYXRvci50aW1lb3V0KDEpCmRlZiBydW4oKl8pOgogICAgZ2xvYmFsIGRvX2F1dG9tb3ZlLCBkb19oZWxwCiAgICBpZiBkb19hdXRvbW92ZToKICAgICAgICBtb3ZlX2hlYWQobGFzdF9kaXIsIDEpCiAgICAgICAgZHJhd19mcmFtZSgpCgogICAgZG9fYXV0b21vdmUgPSBUcnVlCiAgICAKICAgIHNhdmVfZ2FtZSgpCgogICAgayA9IGF3YWl0X2tleXMoJ2hqa2xISktMQUJDRHdhc2RpSQMKJykKICAgIGlmIGsgaW4gJ2hqa2xISktMQUJDRHdhc2QnOgogICAgICAgIG1vdmVfaGVhZChrLCAxMCBpZiBrIGluICdISktMJyBlbHNlIDEpCiAgICAgICAgZHJhd19mcmFtZSgpCiAgICAgICAgZG9fYXV0b21vdmUgPSBGYWxzZQogICAgICAgIHJldHVybgogICAgZWxpZiBrIGluICcDCic6CiAgICAgICAgc2F2ZV9nYW1lKCkKICAgICAgICBzeXMuZXhpdCgwKQogICAgZWxpZiBrIGluICdpSSc6CiAgICAgICAgZG9faGVscCA9IFRydWUKICAgICAgICByZXR1cm4KCgpkZWYgYXdhaXRfa2V5cyhrZXlzKToKICAgIHdoaWxlIFRydWU6CiAgICAgICAgayA9IHN5cy5zdGRpbi5yZWFkKDEpCiAgICAgICAgaWYgayBpbiBrZXlzOgogICAgICAgICAgICByZXR1cm4gawoKCmRlZiBuZXdfYm9udXMoKToKICAgIGdsb2JhbCBib251c19sb2NhdGlvbiwgYm9udXNfcG9pbnRzCiAgICBib251c19wb2ludHMgPSByYW5kb20ucmFuZGludCgxLCA5KQogICAgYm9udXNfbG9jYXRpb24gPSB3b3JtX2hlYWQKICAgIHdoaWxlIHdvcm1faGVhZCA9PSBib251c19sb2NhdGlvbiBvciBib251c19sb2NhdGlvbiBpbiB3b3JtX2xvY2F0aW9uczoKICAgICAgICBib251c19sb2NhdGlvbiA9IFsKICAgICAgICAgICAgICAgIHJhbmRvbS5yYW5kaW50KDEsIHdpZHRoLTMpLAogICAgICAgICAgICAgICAgcmFuZG9tLnJhbmRpbnQoMiwgaGVpZ2h0LTIpLAogICAgICAgICAgICAgICAgXQoKCmRlZiBkb19tb3ZlKHksIHgpOgogICAgeSArPSAodGVybS5oZWlnaHQgLSBoZWlnaHQpIC8vIDIKICAgIHggKz0gKHRlcm0ud2lkdGggLSB3aWR0aCkgLy8gMgogICAgcmV0dXJuIHRlcm0ubW92ZSh5LCB4KQoKCmRlZiBzYXZlX2dhbWUoKToKICAgIGlmIG5vdCBhcmdzLmZ1bGxfc2NyZWVuOgogICAgICAgIHdpdGggb3BlbihnYW1lc2F2ZV9wYXRoLCAndysnKSBhcyBmOgogICAgICAgICAgICBqc29uLmR1bXAoW3dvcm1fbG9jYXRpb25zLCB3b3JtX2hlYWQsIGxhc3RfZGlyLCBzY29yZSwgc2l6ZSwgYm9udXNfbG9jYXRpb24sIGJvbnVzX3BvaW50cywgZG9fYXV0b21vdmUsIGRvX2hlbHBdLCBmKQoKCnRlcm0gPSBUZXJtaW5hbCgpCmdhbWVzYXZlX3BhdGggPSBvcy5wYXRoLmpvaW4ob3MuZ2V0ZW52KCdIT01FJyksICcud29ybS5weS1nYW1lc2F2ZScpCgpwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSd3b3JtcHknKQpncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXNhdmUtZ2FtZSIsICctcycsIGhlbHA9InVzZSA4MHgyNCBib3ggYW5kIHNhdmUgZ2FtZSBvbiBeQyAoZGVmYXVsdCkiLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PVRydWUpCmdyb3VwLmFkZF9hcmd1bWVudCgiLS1mdWxsLXNjcmVlbiIsICctZicsIGhlbHA9InVzZSBlbnRpcmUgc2NyZWVuIChkaXNhYmxlcyBnYW1lIHNhdmluZykiLCBhY3Rpb249J3N0b3JlX3RydWUnKQpncm91cC5hZGRfYXJndW1lbnQoIi0tZGVsZXRlLXNhdmUiLCBoZWxwPSJkZWxldGUgc2F2ZWQgZ2FtZSBhbmQgZXhpdCIsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCmFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCgppZiBhcmdzLmRlbGV0ZV9zYXZlOgogICAgdHJ5OgogICAgICAgIHNodXRpbC5tb3ZlKGdhbWVzYXZlX3BhdGgsIGdhbWVzYXZlX3BhdGggKyAnLW9sZCcpCiAgICAgICAgcHJpbnQoIlNhdmVkIGdhbWUgZGVsZXRlZC4iKQogICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgogICAgICAgIHByaW50KCJObyBzYXZlZCBnYW1lIGZvdW5kLiIpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgcHJpbnQoIkFuIGVycm9yIG9jY3VycmVkLiIpCiAgICAgICAgcHJpbnQoc3RyKHR5cGUoZSkpLnNwbGl0KCInIilbMV0gKyAnOiAnICsgc3RyKGUpKQogICAgICAgIGNvbnQgPSBpbnB1dCgiRG8geW91IHdhbnQgdG8gdHJ5IHRvIG5vbi1yZWNvdmVyYWJseSBkZWxldGUgdGhlIHNhdmVkIGdhbWU/IFtZL25dICIpCiAgICAgICAgaWYgY29udFswXSBpbiAnWXknOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBvcy51bmxpbmsoZ2FtZXNhdmVfcGF0aCkKICAgICAgICAgICAgICAgIHByaW50KCJTYXZlZCBnYW1lIGRlbGV0ZWQuIikKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgcHJpbnQoIkFuIGVycm9yIG9jY3VycmVkLiIpCiAgICAgICAgICAgICAgICBwcmludChzdHIodHlwZShlKSkuc3BsaXQoIiciKVsxXSArICc6ICcgKyBzdHIoZSkpCiAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgIHN5cy5leGl0KDApCmVsaWYgYXJncy5zYXZlX2dhbWU6CiAgICBoZWlnaHQgPSAyNAogICAgd2lkdGggPSA4MAplbGlmIGFyZ3MuZnVsbF9zY3JlZW46CiAgICBoZWlnaHQgPSB0ZXJtLmhlaWdodAogICAgd2lkdGggPSB0ZXJtLndpZHRoCmVsc2U6CiAgICBwcmludCgiQW4gdW5oYW5kbGVhYmxlIGVycm9yIG9jY3VycmVkLiIpCiAgICBwcmludCgiVGhlIGNvZGUgd2FzIG5vdCBleHBlY3RlZCB0byByZWFjaCB0aGlzIHN0YXRlLiIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHByaW50KCJQbGVhc2UgY3JlYXRlIGFuIGlzc3VlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9rajdycnYvd29ybXB5L2lzc3VlcyIpCiAgICBzeXMuZXhpdCgyKQoKPHxmaW1fZW5kfD4="]
["8857d266c403f2928ddaa0ddcea9b68b0bc497f5-4","8857d266c403f2928ddaa0ddcea9b68b0bc497f5","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgZW5jb2Rpbmc6IHV0Zi04CgppbXBvcnQgcmUKZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KaW1wb3J0IHB5dGVzdApmcm9tIHR4dGVtcGxhdGVzLnV0aWxzLmh0bWwgaW1wb3J0ICgKICAgIGFjY2VwdGVkX21pbWV0eXBlcywgU2luZ2xlV2ViUmVxdWVzdCwgQmFkUmVxdWVzdEVycm9yKQpmcm9tIHR3aXN0ZWQud2ViLnRlc3QgaW1wb3J0IHJlcXVlc3RoZWxwZXIKCmZyb20gdHh0ZW1wbGF0ZXMubG9nZ2VyIGltcG9ydCB0ZXN0Cgpsb2dnZXIgPSB0ZXN0LmNvbmZpZ3VyZV9sb2dnZXIoKQoKCmRlZiB0ZXN0X2pzb25fZXJyb3JfcGFnZShkdW1teXJlcXVlc3QpOgogICAgYnJlID0gQmFkUmVxdWVzdEVycm9yKG1lc3NhZ2U9dSdibMO2ZGUgbmFjaHJpY2h0IG1pdCDDnG1sw6R1dGVuLicpCiAgICByZXMgPSBicmUucmVuZGVyKGR1bW15cmVxdWVzdCkKICAgIGFzc2VydCB0eXBlKHJlcykgaXMgc3RyIGFuZCB0eXBlKHJlcykgaXMgbm90IHVuaWNvZGUKCgpkZWYgdGVzdF93ZWJyZXF1ZXN0X2ZpbGVzKCk6CiAgICB3ciA9IFNpbmdsZVdlYlJlcXVlc3QoJy8nKQogICAgcCwgbWltZSA9IHdyLl9nZXRfYm9keV9wcm9kdWNlcigKICAgICAgICB7J2ZpbGVzJzogW3sKICAgICAgICAgICAgJ25hbWUnOiAndGhlX2ZpbGUnLAogICAgICAgICAgICAnZm5hbWUnOiAnZmlsZS50eHQnLAogICAgICAgICAgICAnaGFuZGxlJzogU3RyaW5nSU8oJ1RoaXMgaXMgYSB0ZXN0JykKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAnbmFtZSc6ICdvdGhlcl9maWxlJywKICAgICAgICAgICAgJ2ZuYW1lJzogJ2ZpbGUyLnR4dCcsCiAgICAgICAgICAgICdoYW5kbGUnOiBTdHJpbmdJTygnVGhpcyBpcyBhbm90aGVyIHRlc3QnKSwKICAgICAgICAgICAgJ21pbWV0eXBlJzogJ2FwcGxpY2F0aW9uL3RleHQnCiAgICAgICAgICAgIH1dfSkKICAgIGFzc2VydCByZS5zZWFyY2goJ211bHRpcGFydC9mb3JtJywgbWltZSkKICAgIGZyb20gdHdpc3RlZC50ZXN0LnByb3RvX2hlbHBlcnMgaW1wb3J0IFN0cmluZ1RyYW5zcG9ydAogICAgcyA9IFN0cmluZ1RyYW5zcG9ydCgpCiAgICBnID0gcC5fd3JpdGVsb29wKHMpCiAgICBbXyBmb3IgXyBpbiBnXQogICAgYXNzZXJ0IHJlLnNlYXJjaCgnVGhpcyBpcyBhIHRlc3QnLCBzLnZhbHVlKCkpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGFzc2VydCByZS5zZWFyY2goJ1RoaXMgaXMgYW5vdGhlciB0ZXN0Jywgcy52YWx1ZSgpKQogICAgYXNzZXJ0IHJlLnNlYXJjaCgnYXBwbGljYXRpb24vdGV4dCcsIHMudmFsdWUoKSkKCgo8fGZpbV9lbmR8Pg=="]
["8855b69e78ea1a9543a16bea7c2dbe7b5fcb70f7-2","8855b69e78ea1a9543a16bea7c2dbe7b5fcb70f7","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMS43IG9uIDIwMjEtMDQtMDUgMTQ6MTcKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKaW1wb3J0IGRqYW5nby5kYi5tb2RlbHMuZGVsZXRpb24KCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGluaXRpYWwgPSBUcnVlCgogICAgZGVwZW5kZW5jaWVzID0gWwo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgbmFtZT0nQ2F0ZWdvcnknLAogICAgICAgICAgICBmaWVsZHM9WwogICAgICAgICAgICAgICAgKCdpZCcsIG1vZGVscy5BdXRvRmllbGQoYXV0b19jcmVhdGVkPVRydWUsIHByaW1hcnlfa2V5PVRydWUsIHNlcmlhbGl6ZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdJRCcpKSwKICAgICAgICAgICAgICAgICgnbmFtZScsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD01NSwgdmVyYm9zZV9uYW1lPSdjYXRlZ29yaWEnKSksCiAgICAgICAgICAgIF0sCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkNyZWF0ZU1vZGVsKAogICAgICAgICAgICBuYW1lPSdQcm9kdWN0cycsCiAgICAgICAgICAgIGZpZWxkcz1bCiAgICAgICAgICAgICAgICAoJ2lkJywgbW9kZWxzLkF1dG9GaWVsZChhdXRvX2NyZWF0ZWQ9VHJ1ZSwgcHJpbWFyeV9rZXk9VHJ1ZSwgc2VyaWFsaXplPUZhbHNlLCB2ZXJib3NlX25hbWU9J0lEJykpLAogICAgICAgICAgICAgICAgKCduYW1lJywgbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTU1LCB2ZXJib3NlX25hbWU9J05vbWUnKSksCiAgICAgICAgICAgICAgICAoJ25vcm1hbF9wcmljZScsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMCwgdmVyYm9zZV9uYW1lPSdQcmXDp28nKSksCiAgICAgICAgICAgICAgICAoJ3Byb21vdGlvbl9wcmljZScsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMCwgdmVyYm9zZV9uYW1lPSdQcmXDp28gcHJvbW9jaW9uYWwnKSksCiAgICAgICAgICAgICAgICAoJ3Byb21vdGlvbicsIG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdD1GYWxzZSwgdmVyYm9zZV9uYW1lPSdFbSBwcm9tb8Onw6NvJykpLAogICAgICAgICAgICAgICAgKCdwaWN0dXJlJywgbW9kZWxzLkltYWdlRmllbGQodXBsb2FkX3RvPSdwcm9kdWN0cy8lWS8lbS8nLCB2ZXJib3NlX25hbWU9J0ltYWdlbScpKSwKICAgICAgICAgICAgICAgICgnY2F0ZWdvcnknLCBtb2RlbHMuRm9yZWlnbktleShvbl9kZWxldGU9ZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbi5ET19OT1RISU5HLCB0bz0ncHJvZHVjdHMuY2F0ZWdvcnknKSksCiAgICAgICAgICAgIF0sCiAgICAgICAgKSwKICAgIF0KPHxmaW1fc3VmZml4fD4KICAgIF0KCiAgICBvcGVyYXRpb25zID0gWwogICAgICAgIG1pZ3JhdGlvbnMuQ3JlYXRlTW9kZWwoCjx8ZmltX2VuZHw+"]
["881d3a88c609a7b85cc53faec54cacd31f264d1a-1","881d3a88c609a7b85cc53faec54cacd31f264d1a","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucywgbW9kZWxzCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgKCdjb3Vyc2VfbWF0ZXJpYWwnLCAnMDAwMV9pbml0aWFsJyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFkZEZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdmaWxlJywKICAgICAgICAgICAgbmFtZT0naGlkZScsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkJvb2xlYW5GaWVsZChkZWZhdWx0PUZhbHNlLCB2ZXJib3NlX25hbWU9J0hpZGUnKSwKPHxmaW1fZW5kfD4="]
["7064fe2b1abdf08e93d81f6c068a9d7e509321a6-1","7064fe2b1abdf08e93d81f6c068a9d7e509321a6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmZyb20gbmV0d29ya19pbnNpZ2h0X3Nka19nZW5lcmljX2RhdGFzb3VyY2VzLnBhcnNlcnMuY29tbW9uLmJsb2NrX3BhcnNlciBpbXBvcnQgU2ltcGxlQmxvY2tQYXJzZXIKZnJvbSBuZXR3b3JrX2luc2lnaHRfc2RrX2dlbmVyaWNfZGF0YXNvdXJjZXMucGFyc2Vycy5jb21tb24uYmxvY2tfcGFyc2VyIGltcG9ydCBMaW5lQmFzZWRCbG9ja1BhcnNlcgoKCmNsYXNzIEJsb2NrUGFyc2VyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgZGVmIHRlc3RfZ2VuZXJpY19ibG9ja19wYXJzZXIoc2VsZik6CiAgICAgICAgcGFyYSA9ICIiIkhlbGxvIHdvcmxkIGIxIDEKICAgICAgICAgICAgICAgIEhlbGxvIHdvcmxkIGIxIDIKICAgICAgICAgICAgICAgIEhlbGxvIHdvcmxkIGIxIDMKCiAgICAgICAgICAgICAgICBIZWxsbyB3b3JsZCBiMiAxCiAgICAgICAgICAgICAgICBIZWxsbyB3b3JsZCBiMiAyCiAgICAgICAgICAgICAgICBIZWxsbyB3b3JsZCBiMiAzCiAgICAgICAgICAgICAgICAiIiIKICAgICAgICBidCA9IFNpbXBsZUJsb2NrUGFyc2VyKCkKICAgICAgICBibG9ja3MgPSBidC5wYXJzZShwYXJhKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJsb2NrcyksIDIpCgogICAgZGVmIHRlc3RfbGluZV9iYXNlZF9ibG9ja19wYXJzZXIoc2VsZik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBwYXJhID0gIiIiSGVsbG8gd29ybGQgYjEgMQogICAgICAgICAgICAgICAgICAgICAgICBIZWxsbyB3b3JsZCBiMSAyCiAgICAgICAgICAgICAgICAgICAgICAgIEhlbGxvIHdvcmxkIGIxIDMKCjx8ZmltX2VuZHw+"]
["9dd5292b687046d635b32e9c719b52db52d65238-3","9dd5292b687046d635b32e9c719b52db52d65238","PHxmaW1fcHJlZml4fD4KIyBlbmNvZGluZzogdXRmLTgKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmNvbnRyaWIgaW1wb3J0IGFkbWluCgpmcm9tIHdvcmtvbi5jb250cmliLnNlY3VyaXR5Lm1vZGVscyBpbXBvcnQgRGlzYWxsb3dlZEhvc3QKCkBhZG1pbi5yZWdpc3RlcihEaXNhbGxvd2VkSG9zdCkKY2xhc3MgRGlzYWxsb3dlZEhvc3RBZG1pbihhZG1pbi5Nb2RlbEFkbWluKToKPHxmaW1faG9sZXw+CiAgICBkZWYgZ2V0X3JlYWRvbmx5X2ZpZWxkcyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIGZpZWxkcyA9IFtmLm5hbWUgZm9yIGYgaW4gc2VsZi5tb2RlbC5fbWV0YS5maWVsZHNdCiAgICAgICAgcmV0dXJuIGZpZWxkcwoKPHxmaW1fc3VmZml4fD4KCiAgICBsaXN0X2Rpc3BsYXkgPSAoJ2h0dHBfaG9zdCcsICdyZXF1ZXN0X3VyaScsICdwYXRoX2luZm8nLCAncmVtb3RlX2FkZHInLCAnaHR0cF94X2ZvcndhcmRlZF9mb3InLCAncmVxdWVzdF9tZXRob2QnLCAnY3JlYXRlZF9hdCcpCiAgICBsaXN0X2ZpbHRlciA9ICgnaHR0cF9ob3N0JywgJ3JlcXVlc3RfdXJpJywgJ3BhdGhfaW5mbycsICdyZW1vdGVfYWRkcicsICdodHRwX3hfZm9yd2FyZGVkX2ZvcicsICdyZXF1ZXN0X21ldGhvZCcsICkKCjx8ZmltX2VuZHw+"]
["ae5a6f8d10eb26755ce03307f623ea9a07f4f071-2","ae5a6f8d10eb26755ce03307f623ea9a07f4f071","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCgoKY2xhc3MgRmxvdyh0b3JjaC5ubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYW5zZm9ybWF0aW9ucyk6CiAgICAgICAgc3VwZXIoRmxvdywgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYudHJhbnNmb3JtYXRpb25zID0gdG9yY2gubm4uTW9kdWxlTGlzdCh0cmFuc2Zvcm1hdGlvbnMpCgogICAgZGVmIHNldF90cmFjZShzZWxmLCB0cmFjZSk6CiAgICAgICAgZGlkX3NldF90cmFjZSA9IEZhbHNlCiAgICAgICAgZm9yIG1vZHVsZSBpbiBzZWxmLm1vZHVsZXMoKToKICAgICAgICAgICAgaWYgaGFzYXR0cihtb2R1bGUsICdzZXRfdHJhY2UnKSBhbmQgbW9kdWxlIGlzIG5vdCBzZWxmOgogICAgICAgICAgICAgICAgbW9kdWxlLnNldF90cmFjZSh0cmFjZSkKICAgICAgICAgICAgICAgIGRpZF9zZXRfdHJhY2UgPSBUcnVlCiAgICAgICAgYXNzZXJ0IGRpZF9zZXRfdHJhY2UKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4LCBub2RlX21hc2s9Tm9uZSwgZWRnZV9tYXNrPU5vbmUsIGNvbnRleHQ9Tm9uZSk6CiAgICAgICAgbGRqID0geC5uZXdfemVyb3MoeC5zaGFwZVswXSkKICAgICAgICByZWdfdGVybSA9IHgubmV3X3plcm9zKHguc2hhcGVbMF0pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgZm9yIHRyYW5zZm9ybSBpbiBzZWxmLnRyYW5zZm9ybWF0aW9uczoKICAgICAgICAgICAgeCwgZGVsdGFfbG9ncCwgZGVsdGFfcmVnX3Rlcm0gPSB0cmFuc2Zvcm0oeCwgbm9kZV9tYXNrLCBlZGdlX21hc2ssIGNvbnRleHQpCgo8fGZpbV9lbmR8Pg=="]
["aebc27dc4c28c203682bd01a54a0e9ca46e258f2-2","aebc27dc4c28c203682bd01a54a0e9ca46e258f2","PHxmaW1fcHJlZml4fD4KZnJvbSBkcmFnb25mbHkgaW1wb3J0IChHcmFtbWFyLCBDb21wb3VuZFJ1bGUsIEFwcENvbnRleHQsIE1hcHBpbmdSdWxlLCBUZXh0LCBDaG9pY2UsIEZ1bmN0aW9uKQoKZnJvbSB2aW0ucnVsZXMubGV0dGVyIGltcG9ydCBMZXR0ZXJTZXF1ZW5jZVJ1bGUKCgpjbGFzcyBWaW1FbmFibGVyKENvbXBvdW5kUnVsZSk6CiAgICBzcGVjID0gIkVuYWJsZSBmYW5jeSIKCiAgICBkZWYgX3Byb2Nlc3NfcmVjb2duaXRpb24oc2VsZiwgbm9kZSwgZXh0cmFzKToKICAgICAgICBWaW1HcmFtbWFyLmVuYWJsZSgpCiAgICAgICAgcHJpbnQoIiMjIyB2aW0gZ3JhbW1hciBlbmFibGVkICMjIyIpCgoKY2xhc3MgVmltRGlzYWJsZXIoQ29tcG91bmRSdWxlKToKICAgIHNwZWMgPSAiRGlzYWJsZSBmYW5jeSIKCiAgICBkZWYgX3Byb2Nlc3NfcmVjb2duaXRpb24oc2VsZiwgbm9kZSwgZXh0cmFzKToKICAgICAgICBWaW1HcmFtbWFyLmRpc2FibGUoKQogICAgICAgIHByaW50KCIjIyMgdmltIGdyYW1tYXIgZGlzYWJsZWQgIyMjIikKCgpidWZmZXJfY29tbWFuZF9jaG9pY2VfbWFwID0gewogICAgIndyaXRlIjogInciLAogICAgImNsb3NlIjogInEiLAogICAgIndyaXRlIGFuZCBjbG9zZSI6ICJ3cSIsCiAgICAiZm9yY2UgY2xvc2UiOiAicSEiLAogICAgImRlbGV0ZSI6ICJiZCIsCn0KCgpkZWYgYnVmZmVyX2NvbW1hbmRfY2hvaWNlKG5hbWU9ImJ1ZmZlcl9jb21tYW5kIik6CiAgICByZXR1cm4gQ2hvaWNlKG5hbWUsIGJ1ZmZlcl9jb21tYW5kX2Nob2ljZV9tYXApCgoKZGVmIG91dHB1dF9idWZmZXJfY29tbWFuZChidWZmZXJfY29tbWFuZD1Ob25lKToKICAgIGlmIGJ1ZmZlcl9jb21tYW5kIGlzIG5vdCBOb25lOgogICAgICAgIFRleHQoIjolc1xuIiAlIGJ1ZmZlcl9jb21tYW5kKS5leGVjdXRlKCkKCgpmdWdpdGl2ZV9jb21tYW5kX2Nob2ljZV9tYXAgPSB7CiAgICAiY29tbWl0IjogIkdjb21taXQiLAogICAgInN0YXR1cyI6ICJHc3RhdHVzIiwKICAgICJzdGFnZSI6ICJHd3JpdGUiLAogICAgInB1c2giOiAiR3B1c2giLAogICAgImFib3J0IGNvbW1pdCI6ICJxISIsCiAgICAiZmluaXNoIGNvbW1pdCI6ICJ3cSIsCn0KCgpkZWYgZnVnaXRpdmVfY29tbWFuZF9jaG9pY2UobmFtZT0iZnVnaXRpdmVfY29tbWFuZCIpOgogICAgcmV0dXJuIENob2ljZShuYW1lLCBmdWdpdGl2ZV9jb21tYW5kX2Nob2ljZV9tYXApCgoKZGVmIG91dHB1dF9mdWdpdGl2ZV9jb21tYW5kKGZ1Z2l0aXZlX2NvbW1hbmQ9Tm9uZSk6CiAgICBpZiBmdWdpdGl2ZV9jb21tYW5kIGlzIG5vdCBOb25lOgogICAgICAgIFRleHQoIjolc1xuIiAlIGZ1Z2l0aXZlX2NvbW1hbmQpLmV4ZWN1dGUoKQoKCmdpdGd1dHRlcl9jb21tYW5kX2Nob2ljZV9tYXAgPSB7CiAgICAic3RhZ2UiOiAiIGhzIiwKICAgICJuZXh0IjogIl1jIiwKICAgICJwcmV2aW91cyI6ICJbYyIsCiAgICAicHJldmlldyI6ICIgaHAiLAogICAgInVuZG8iOiAiIGh1IiwKfQoKCmRlZiBnaXRndXR0ZXJfY29tbWFuZF9jaG9pY2UobmFtZT0iZ2l0Z3V0dGVyX2NvbW1hbmQiKToKICAgIHJldHVybiBDaG9pY2UobmFtZSwgZ2l0Z3V0dGVyX2NvbW1hbmRfY2hvaWNlX21hcCkKCgpkZWYgb3V0cHV0X2dpdGd1dHRlcl9jb21tYW5kKGdpdGd1dHRlcl9jb21tYW5kPU5vbmUpOgogICAgaWYgZ2l0Z3V0dGVyX2NvbW1hbmQgaXMgbm90IE5vbmU6CiAgICAgICAgVGV4dCgiJXMiICUgZ2l0Z3V0dGVyX2NvbW1hbmQpLmV4ZWN1dGUoKQoKCmNsYXNzIFZpbVV0aWxpdGllcyhNYXBwaW5nUnVsZSk6CiAgICBtYXBwaW5nID0gewogICAgICAgICMgZ2VuZXJhbAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIjxidWZmZXJfY29tbWFuZD4gYnVmZmVyIjogRnVuY3Rpb24ob3V0cHV0X2J1ZmZlcl9jb21tYW5kKSwKCiAgICAgICAgIyBgdHBvcGUvdmltLWZ1Z2l0aXZlYAogICAgICAgICIoZnVnaXRpdmV8cG9wZSkgPGZ1Z2l0aXZlX2NvbW1hbmQ+IjogRnVuY3Rpb24ob3V0cHV0X2Z1Z2l0aXZlX2NvbW1hbmQpLAo8fGZpbV9lbmR8Pg=="]
["854244260306ed1c24cf1872364903229a27e4eb-2","854244260306ed1c24cf1872364903229a27e4eb","PHxmaW1fcHJlZml4fD4KcSA9IGludChpbnB1dCgpLnN0cmlwKCkpCmZvciBfIGluIHJhbmdlKHEpOgogICAgbiA9IGludChpbnB1dCgpLnN0cmlwKCkpCiAgICBjID0gbWFwKGludCwgaW5wdXQoKS5zdHJpcCgpLnNwbGl0KCcgJykpCiAgICBlZGdlcyA9IFtdCiAgICBmb3IgaiBpbiByYW5nZShuLTEpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZWRnZXMuYXBwZW5kKGxpc3QobWFwKGludCwgaW5wdXQoKS5zdHJpcCgpLnNwbGl0KCcgJykpKSkKICAgICAgICAKPHxmaW1fZW5kfD4="]
["068c1a0d59cd77920273bb83c4ca43033e3613dd-1","068c1a0d59cd77920273bb83c4ca43033e3613dd","PHxmaW1fcHJlZml4fD4KZnJvbSBiZXJ0NHRvcmNoLm1vZGVsIGltcG9ydCAqCmZyb20gdHJhbnNmb3JtZXJzIGltcG9ydCBNVDVGb3JDb25kaXRpb25hbEdlbmVyYXRpb24KaW1wb3J0IGppZWJhCmZyb20gdHJhbnNmb3JtZXJzIGltcG9ydCBCZXJ0VG9rZW5pemVyLCBCYXRjaEVuY29kaW5nCmZyb20gdG9yY2guX3NpeCBpbXBvcnQgY29udGFpbmVyX2FiY3MsIHN0cmluZ19jbGFzc2VzLCBpbnRfY2xhc3NlcwppbXBvcnQgdG9yY2gKZnJvbSB0b3JjaC51dGlscy5kYXRhIGltcG9ydCBEYXRhTG9hZGVyLCBEYXRhc2V0CmltcG9ydCByZQppbXBvcnQgb3MKaW1wb3J0IGNzdgppbXBvcnQgYXJncGFyc2UKZnJvbSB0cWRtLmF1dG8gaW1wb3J0IHRxZG0KZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFBvb2wsIFByb2Nlc3MKaW1wb3J0IHBhbmRhcyBhcyBwZAoKCmRldmljZSA9ICdjdWRhJyBpZiB0b3JjaC5jdWRhLmlzX2F2YWlsYWJsZSgpIGVsc2UgJ2NwdScKCgpkZWYgbG9hZF9kYXRhKGZpbGVuYW1lKToKICAgICIiIuWKoOi9veaVsOaNrgogICAg5Y2V5p2h5qC85byP77yaKOato+aWhykKICAgICIiIgogICAgRCA9IFtdCiAgICB3aXRoIG9wZW4oZmlsZW5hbWUsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CiAgICAgICAgZm9yIGwgaW4gZi5yZWFkbGluZXMoKToKICAgICAgICAgICAgY29udGVudCA9IGwuc3RyaXAoKQogICAgICAgICAgICBELmFwcGVuZChjb250ZW50KQogICAgcmV0dXJuIEQKICAgIAoKY2xhc3MgVDVQZWdhc3VzVG9rZW5pemVyKEJlcnRUb2tlbml6ZXIpOgogICAgIiIi57uT5ZCI5Lit5paH54m554K55a6M5ZaE55qEVG9rZW5pemVyCiAgICDln7rkuo7or43popfnspLluqbnmoTliIbor43vvIzlpoLor43ooajkuK3mnKrlh7rnjrDvvIzlho3osIPnlKhCRVJU5Y6f55SfVG9rZW5pemVyCiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQogICAgICAgIAogICAgZGVmIHByZV90b2tlbml6ZXIoc2VsZiwgeCk6CiAgICAgICAgcmV0dXJuIGppZWJhLmN1dCh4LCBITU09RmFsc2UpCgogICAgZGVmIF90b2tlbml6ZShzZWxmLCB0ZXh0LCAqYXJnLCAqKmt3YXJncyk6CiAgICAgICAgc3BsaXRfdG9rZW5zID0gW10KICAgICAgICBmb3IgdGV4dCBpbiBzZWxmLnByZV90b2tlbml6ZXIodGV4dCk6CiAgICAgICAgICAgIGlmIHRleHQgaW4gc2VsZi52b2NhYjoKICAgICAgICAgICAgICAgIHNwbGl0X3Rva2Vucy5hcHBlbmQodGV4dCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHNwbGl0X3Rva2Vucy5leHRlbmQoc3VwZXIoKS5fdG9rZW5pemUodGV4dCkpCiAgICAgICAgcmV0dXJuIHNwbGl0X3Rva2VucwogICAgCgpjbGFzcyBLZXlEYXRhc2V0KERhdGFzZXQpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpY3RfZGF0YSk6CiAgICAgICAgc2VsZi5kYXRhID0gZGljdF9kYXRhCgogICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgcmV0dXJuIGxlbihzZWxmLmRhdGEpCgogICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKICAgICAgICByZXR1cm4gc2VsZi5kYXRhW2luZGV4XQogICAgCiAgICAKZGVmIGNyZWF0ZV9kYXRhKGRhdGEsIHRva2VuaXplciwgbWF4X2xlbik6CiAgICAiIiLosIPnlKh0b2tlbml6ZXIuZW5jb2Rl57yW56CB5q2j5paHL+agh+mimO+8jOavj+adoeagt+acrOeUqGRpY3TooajnpLrmlbDmja7ln58KICAgICIiIgogICAgcmV0LCBmbGFnID0gW10sIFRydWUKICAgIGZvciBjb250ZW50IGluIGRhdGE6CiAgICAgICAgdGV4dF9pZHMgPSB0b2tlbml6ZXIuZW5jb2RlKGNvbnRlbnQsIG1heF9sZW5ndGg9bWF4X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1bmNhdGlvbj0nb25seV9maXJzdCcpCgogICAgICAgIGlmIGZsYWc6CiAgICAgICAgICAgIGZsYWcgPSBGYWxzZQogICAgICAgICAgICBwcmludChjb250ZW50KQoKICAgICAgICBmZWF0dXJlcyA9IHsnaW5wdXRfaWRzJzogdGV4dF9pZHMsCiAgICAgICAgICAgICAgICAgICAgJ2F0dGVudGlvbl9tYXNrJzogWzFdICogbGVuKHRleHRfaWRzKSwKICAgICAgICAgICAgICAgICAgICAncmF3X2RhdGEnOiBjb250ZW50fQogICAgICAgIHJldC5hcHBlbmQoZmVhdHVyZXMpCiAgICByZXR1cm4gcmV0CgoKZGVmIHNlcXVlbmNlX3BhZGRpbmcoaW5wdXRzLCBsZW5ndGg9Tm9uZSwgcGFkZGluZz0wKToKICAgICIiIk51bXB55Ye95pWw77yM5bCG5bqP5YiXcGFkZGluZ+WIsOWQjOS4gOmVv+W6pgogICAgIiIiCiAgICBpZiBsZW5ndGggaXMgTm9uZToKICAgICAgICBsZW5ndGggPSBtYXgoW2xlbih4KSBmb3IgeCBpbiBpbnB1dHNdKQoKICAgIHBhZF93aWR0aCA9IFsoMCwgMCkgZm9yIF8gaW4gbnAuc2hhcGUoaW5wdXRzWzBdKV0KICAgIG91dHB1dHMgPSBbXQogICAgZm9yIHggaW4gaW5wdXRzOgogICAgICAgIHggPSB4WzpsZW5ndGhdCiAgICAgICAgcGFkX3dpZHRoWzBdID0gKDAsIGxlbmd0aCAtIGxlbih4KSkKICAgICAgICB4ID0gbnAucGFkKHgsIHBhZF93aWR0aCwgJ2NvbnN0YW50JywgY29uc3RhbnRfdmFsdWVzPXBhZGRpbmcpCiAgICAgICAgb3V0cHV0cy5hcHBlbmQoeCkKCiAgICByZXR1cm4gbnAuYXJyYXkob3V0cHV0cywgZHR5cGU9J2ludDY0JykKCgpkZWYgZGVmYXVsdF9jb2xsYXRlKGJhdGNoKToKICAgICIiIue7hGJhdGNoCiAgICDlkITkuKrmlbDmja7ln5/liIbliKvovazmjaLkuLp0ZW5zb3LvvIx0ZW5zb3LnrKzkuIDkuKrnu7TluqbnrYnkuo5iYXRjaF9zaXplCiAgICAiIiIKICAgIG5wX3N0cl9vYmpfYXJyYXlfcGF0dGVybiA9IHJlLmNvbXBpbGUocidbU2FVT10nKQogICAgZGVmYXVsdF9jb2xsYXRlX2Vycl9tc2dfZm9ybWF0ID0gKAogICAgICAgICJkZWZhdWx0X2NvbGxhdGU6IGJhdGNoIG11c3QgY29udGFpbiB0ZW5zb3JzLCBudW1weSBhcnJheXMsIG51bWJlcnMsICIKICAgICAgICAiZGljdHMgb3IgbGlzdHM7IGZvdW5kIHt9IikKICAgIGVsZW0gPSBiYXRjaFswXQogICAgZWxlbV90eXBlID0gdHlwZShlbGVtKQogICAgaWYgaXNpbnN0YW5jZShlbGVtLCB0b3JjaC5UZW5zb3IpOgogICAgICAgIG91dCA9IE5vbmUKICAgICAgICBpZiB0b3JjaC51dGlscy5kYXRhLmdldF93b3JrZXJfaW5mbygpIGlzIG5vdCBOb25lOgogICAgICAgICAgICAjIElmIHdlJ3JlIGluIGEgYmFja2dyb3VuZCBwcm9jZXNzLCBjb25jYXRlbmF0ZSBkaXJlY3RseSBpbnRvIGEKICAgICAgICAgICAgIyBzaGFyZWQgbWVtb3J5IHRlbnNvciB0byBhdm9pZCBhbiBleHRyYSBjb3B5CiAgICAgICAgICAgIG51bWVsID0gc3VtKFt4Lm51bWVsKCkgZm9yIHggaW4gYmF0Y2hdKQogICAgICAgICAgICBzdG9yYWdlID0gZWxlbS5zdG9yYWdlKCkuX25ld19zaGFyZWQobnVtZWwpCiAgICAgICAgICAgIG91dCA9IGVsZW0ubmV3KHN0b3JhZ2UpCiAgICAgICAgcmV0dXJuIHRvcmNoLnN0YWNrKGJhdGNoLCAwLCBvdXQ9b3V0KS50byhkZXZpY2UpCiAgICBlbGlmIGVsZW1fdHlwZS5fX21vZHVsZV9fID09ICdudW1weScgYW5kIGVsZW1fdHlwZS5fX25hbWVfXyAhPSAnc3RyXycgXAogICAgICAgICAgICBhbmQgZWxlbV90eXBlLl9fbmFtZV9fICE9ICdzdHJpbmdfJzoKICAgICAgICBpZiBlbGVtX3R5cGUuX19uYW1lX18gPT0gJ25kYXJyYXknIG9yIGVsZW1fdHlwZS5fX25hbWVfXyA9PSAnbWVtbWFwJzoKICAgICAgICAgICAgIyBhcnJheSBvZiBzdHJpbmcgY2xhc3NlcyBhbmQgb2JqZWN0CiAgICAgICAgICAgIGlmIG5wX3N0cl9vYmpfYXJyYXlfcGF0dGVybi5zZWFyY2goZWxlbS5kdHlwZS5zdHIpIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKGRlZmF1bHRfY29sbGF0ZV9lcnJfbXNnX2Zvcm1hdC5mb3JtYXQoZWxlbS5kdHlwZSkpCgogICAgICAgICAgICByZXR1cm4gZGVmYXVsdF9jb2xsYXRlKFt0b3JjaC5hc190ZW5zb3IoYikgZm9yIGIgaW4gYmF0Y2hdKQogICAgICAgIGVsaWYgZWxlbS5zaGFwZSA9PSAoKTogICMgc2NhbGFycwogICAgICAgICAgICByZXR1cm4gdG9yY2guYXNfdGVuc29yKGJhdGNoKQogICAgZWxpZiBpc2luc3RhbmNlKGVsZW0sIGZsb2F0KToKICAgICAgICByZXR1cm4gdG9yY2gudGVuc29yKGJhdGNoLCBkdHlwZT10b3JjaC5mbG9hdDY0KQogICAgZWxpZiBpc2luc3RhbmNlKGVsZW0sIGludF9jbGFzc2VzKToKICAgICAgICByZXR1cm4gdG9yY2gudGVuc29yKGJhdGNoLCBkdHlwZT10b3JjaC5sb25nKQogICAgZWxpZiBpc2luc3RhbmNlKGVsZW0sIHN0cmluZ19jbGFzc2VzKToKICAgICAgICByZXR1cm4gYmF0Y2gKICAgIGVsaWYgaXNpbnN0YW5jZShlbGVtLCBjb250YWluZXJfYWJjcy5NYXBwaW5nKToKICAgICAgICByZXR1cm4ge2tleTogZGVmYXVsdF9jb2xsYXRlKFtkW2tleV0gZm9yIGQgaW4gYmF0Y2hdKSBmb3Iga2V5IGluIGVsZW19CiAgICBlbGlmIGlzaW5zdGFuY2UoZWxlbSwgdHVwbGUpIGFuZCBoYXNhdHRyKGVsZW0sICdfZmllbGRzJyk6ICAjIG5hbWVkdHVwbGUKICAgICAgICByZXR1cm4gZWxlbV90eXBlKCooZGVmYXVsdF9jb2xsYXRlKHNhbXBsZXMpIGZvciBzYW1wbGVzIGluIHppcCgqYmF0Y2gpKSkKICAgIGVsaWYgaXNpbnN0YW5jZShlbGVtLCBjb250YWluZXJfYWJjcy5TZXF1ZW5jZSk6CiAgICAgICAgIyBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZWxlbWVudHMgaW4gYmF0Y2ggaGF2ZSBjb25zaXN0ZW50IHNpemUKICAgICAgICBpdCA9IGl0ZXIoYmF0Y2gpCiAgICAgICAgZWxlbV9zaXplID0gbGVuKG5leHQoaXQpKQogICAgICAgIGlmIG5vdCBhbGwobGVuKGVsZW0pID09IGVsZW1fc2l6ZSBmb3IgZWxlbSBpbiBpdCk6CiAgICAgICAgICAgIGJhdGNoID0gc2VxdWVuY2VfcGFkZGluZyhiYXRjaCkKCiAgICAgICAgcmV0dXJuIGRlZmF1bHRfY29sbGF0ZShbZGVmYXVsdF9jb2xsYXRlKGVsZW0pIGZvciBlbGVtIGluIGJhdGNoXSkKCiAgICByYWlzZSBUeXBlRXJyb3IoZGVmYXVsdF9jb2xsYXRlX2Vycl9tc2dfZm9ybWF0LmZvcm1hdChlbGVtX3R5cGUpKQogICAgCgpkZWYgcHJlcGFyZV9kYXRhKGFyZ3MsIHRva2VuaXplcik6CiAgICAiIiLlh4blpIdiYXRjaOaVsOaNrgogICAgIiIiCiAgICB0ZXN0X2RhdGEgPSBsb2FkX2RhdGEoYXJncy50ZXN0X2RhdGEpCiAgICB0ZXN0X2RhdGEgPSBjcmVhdGVfZGF0YSh0ZXN0X2RhdGEsIHRva2VuaXplciwgYXJncy5tYXhfbGVuKQogICAgdGVzdF9kYXRhID0gS2V5RGF0YXNldCh0ZXN0X2RhdGEpCiAgICB0ZXN0X2RhdGEgPSBEYXRhTG9hZGVyKHRlc3RfZGF0YSwgYmF0Y2hfc2l6ZT1hcmdzLmJhdGNoX3NpemUsIGNvbGxhdGVfZm49ZGVmYXVsdF9jb2xsYXRlKQogICAgcmV0dXJuIHRlc3RfZGF0YQoKCmRlZiBnZW5lcmF0ZSh0ZXN0X2RhdGEsIG1vZGVsLCB0b2tlbml6ZXIsIGFyZ3MpOgogICAgd2l0aCBvcGVuKGFyZ3MucmVzdWx0X2ZpbGUsICd3JywgZW5jb2Rpbmc9J3V0Zi04JywgbmV3bGluZT0nJykgYXMgZjoKICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGYsIGRlbGltaXRlcj0nXHQnKQogICAgICAgIG1vZGVsLmV2YWwoKQogICAgICAgIGZvciBmZWF0dXJlIGluIHRxZG0odGVzdF9kYXRhKToKICAgICAgICAgICAgcmF3X2RhdGEgPSBmZWF0dXJlWydyYXdfZGF0YSddCiAgICAgICAgICAgIGNvbnRlbnQgPSB7ayA6IHYgZm9yIGssIHYgaW4gZmVhdHVyZS5pdGVtcygpIGlmIGsgIT0gJ3Jhd19kYXRhJ30gCiAgICAgICAgICAgIGdlbiA9IG1vZGVsLmdlbmVyYXRlKG1heF9sZW5ndGg9YXJncy5tYXhfbGVuX2dlbmVyYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVvc190b2tlbl9pZD10b2tlbml6ZXIuc2VwX3Rva2VuX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXJfc3RhcnRfdG9rZW5faWQ9dG9rZW5pemVyLmNsc190b2tlbl9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmNvbnRlbnQpCiAgICAgICAgICAgIGdlbiA9IHRva2VuaXplci5iYXRjaF9kZWNvZGUoZ2VuLCBza2lwX3NwZWNpYWxfdG9rZW5zPVRydWUpCiAgICAgICAgICAgIGdlbiA9IFtpdGVtLnJlcGxhY2UoJyAnLCAnJykgZm9yIGl0ZW0gaW4gZ2VuXQogICAgICAgICAgICB3cml0ZXIud3JpdGVyb3dzKHppcChnZW4sIHJhd19kYXRhKSkKICAgIHByaW50KCdEb25lIScpCgoKZGVmIGdlbmVyYXRlX211bHRpcHJvY2VzcyhmZWF0dXJlKToKICAgICIiIuWkmui/m+eoiwogICAgIiIiCiAgICBtb2RlbC5ldmFsKCkKICAgIHJhd19kYXRhID0gZmVhdHVyZVsncmF3X2RhdGEnXQogICAgY29udGVudCA9IHtrOiB2IGZvciBrLCB2IGluIGZlYXR1cmUuaXRlbXMoKSBpZiBrICE9ICdyYXdfZGF0YSd9Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGdlbiA9IG1vZGVsLmdlbmVyYXRlKG1heF9sZW5ndGg9YXJncy5tYXhfbGVuX2dlbmVyYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVvc190b2tlbl9pZD10b2tlbml6ZXIuc2VwX3Rva2VuX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXJfc3RhcnRfdG9rZW5faWQ9dG9rZW5pemVyLmNsc190b2tlbl9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmNvbnRlbnQpCjx8ZmltX2VuZHw+"]
["88335f6ccaa0e1dc9865f7e59fad45dcf787792d-2","88335f6ccaa0e1dc9865f7e59fad45dcf787792d","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuc29hciBpbXBvcnQgc29hcl9jb25maWdzCmZyb20gLnNxbGFkdmlzb3IgaW1wb3J0IHNxbGFkdmlzb3JfY29uZmlncwpmcm9tIHBsdWdpbnMgaW1wb3J0IFNvYXIsIFNRTEFkdmlzb3IKCjx8ZmltX2VuZHw+"]
["9d765a56809489a1e65f5413621b818e94f76b7e-1","9d765a56809489a1e65f5413621b818e94f76b7e","PHxmaW1fcHJlZml4fD4KIyBFQVNZIAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpjbGFzcyBTb2x1dGlvbjoKICAgIGRlZiB0d29TdW0oc2VsZiwgbnVtczogTGlzdFtpbnRdLCB0YXJnZXQ6IGludCkgLT4gTGlzdFtpbnRdOgogICAgICAgIGNoZWNrID0ge30KICAgICAgICBmb3IgaSx2IGluIGVudW1lcmF0ZShudW1zKToKPHxmaW1fZW5kfD4="]
["9db721c887122909546ec4c52b41151e1f814f36-1","9db721c887122909546ec4c52b41151e1f814f36","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN0cmljdHlhbWwgYXMgc3lhbWwKaW1wb3J0IHJ1YW1lbAppbXBvcnQgc3lzCmZyb20gdmFsaWRhdGUgaW1wb3J0IGdlbmVyYXRlX3VuaXZlcnNlCmZyb20gdmFsaWRhdGUgaW1wb3J0IGVudGl0eV9pbnN0YW5jZQpmcm9tIHZhbGlkYXRlIGltcG9ydCBpbnN0YW5jZV9wYXJzZXIKaW1wb3J0IGFyZ3BhcnNlCgojdGhlb3JldGljYWxseSB3b3JrcywgaXNzdWUgdmFsaWRhdGluZwpkZWYgY3JlYXRlX29udG9sb2d5KHlhbWxfZmlsZXBhdGgpOgoKCXByaW50KCdHZW5lcmF0aW5nIHVuaXZlcnNlIC4uLicpCgl1bml2ZXJzZSA9IGdlbmVyYXRlX3VuaXZlcnNlLkJ1aWxkVW5pdmVyc2UoeWFtbF9maWxlcGF0aCkKCglpZiB1bml2ZXJzZSBpcyBOb25lOgoJICBwcmludCgnXG5FcnJvciBnZW5lcmF0aW5nIHVuaXZlcnNlJykKCSAgc3lzLmV4aXQoMCkKCglwcmludCgnVW5pdmVyc2UgZ2VuZXJhdGVkIHN1Y2Nlc3NmdWxseScpCglyZXR1cm4gdW5pdmVyc2UKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCW9udF91bml2ZXJzZSA9IGNyZWF0ZV9vbnRvbG9neSgiQzovVXNlcnMvQW5kcmV3L0RvY3VtZW50cy9HaXRIdWIvZGlnaXRhbGJ1aWxkaW5ncy9vbnRvbG9neSIpCjx8ZmltX2VuZHw+"]
["8884d735c765a86559fa394bb9bf0e5b829b9f8f-2","8884d735c765a86559fa394bb9bf0e5b829b9f8f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCgppbXBvcnQgcmVxdWVzdHMKCgpESUFMT0dGTE9XX0FQSV9VUkwgPSAnaHR0cHM6Ly9hcGkuZGlhbG9nZmxvdy5jb20vdjEvcXVlcnk/dj0yMDE1MDkxMCcKCjx8ZmltX2hvbGV8PgogICAgUmVmZXJlbmNlOiBodHRwczovL2RpYWxvZ2Zsb3cuY29tL2RvY3MvcmVmZXJlbmNlL2FnZW50L3F1ZXJ5CiAgICAiIiIKICAgIGRpYWxvZ2Zsb3dfY2xpZW50X3Rva2VuID0gb3MuZW52aXJvblsnRElBTE9HRkxPV19DTElFTlRfVE9LRU4nXQogICAgciA9IHJlcXVlc3RzLnBvc3QoRElBTE9HRkxPV19BUElfVVJMLAogICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17J0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBkaWFsb2dmbG93X2NsaWVudF90b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbid9LAogICAgICAgICAgICAgICAgICAgICAganNvbj17J3Nlc3Npb25JZCc6IHNlc3Npb25faWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncXVlcnknOiBxdWVyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYW5nJzogbGFuZ3VhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGltZXpvbmUnOiB0aW1lem9uZX0pCiAgICBqc29uX2RhdGEgPSByLmpzb24oKQogICAgcmV0dXJuIGpzb25fZGF0YQoKCmRlZiBtYWluKCk6CiAgICBzZXNzaW9uX2lkID0gJzEyMzQ1JwogICAgcXVlcnkgPSAnZmluZCBtYWNoaW5lIGxlYXJuaW5nIG1lZXR1cHMgaW4gc3dpdHplcmxhbmQnCiAgICBqc29uX2RhdGEgPSBwb3N0X3F1ZXJ5KHNlc3Npb25faWQsIHF1ZXJ5KQoKICAgIGltcG9ydCBwcHJpbnQKICAgIHBwcmludC5wcHJpbnQoanNvbl9kYXRhKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KCmRlZiBwb3N0X3F1ZXJ5KHNlc3Npb25faWQsIHF1ZXJ5LCBsYW5ndWFnZT0nZW4nLCB0aW1lem9uZT0nQW1lcmljYS9OZXdfWW9yaycpOgogICAgIiIiUG9zdCBhIHF1ZXJ5IHRvIHRoZSBEaWFsb2dmbG93IEFQSS4KCjx8ZmltX2VuZHw+"]
["9d676b0fd2ab0b122c0007bd1a89bfade63d7f2c-2","9d676b0fd2ab0b122c0007bd1a89bfade63d7f2c","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiIiIgpzY3JpcHQgZm9yIGNvbXBhcmluZyBhcmFiaWMgc3RlbW1lciBvdXRwdXQKIiIiCmltcG9ydCBvcwppbXBvcnQgc3lzCgpPVVRQVVQsIFZPQywgR1JPVVBJTkcgPSBzeXMuYXJndlsxOl0gb3IgKCJvdXRwdXQudHh0IiwgInZvYy50eHQiLCAiZ3JvdXBpbmcudHh0IikgCgoKZiA9IG9wZW4oT1VUUFVUKQpnID0gb3BlbihWT0MpCmggPSBvcGVuKEdST1VQSU5HLCAidyIpCgpsaW5lMSA9IGYucmVhZGxpbmUoKQo8fGZpbV9ob2xlfD4KICAgIGlmIGNwdCUxMDAwMDAwPT0wOgogICAgICAgIHByaW50ICJtaWxlc3RvbmUiLCBjcHQKICAgIGlmICBsaW5lMVs6LTFdIGluIHdvcmRfZmFtaWx5OgogICAgICAgIHdvcmRfZmFtaWx5W2xpbmUxWzotMV1dLmFwcGVuZChsaW5lMls6LTFdKQogICAgZWxzZToKICAgICAgICB3b3JkX2ZhbWlseVtsaW5lMVs6LTFdXT1bbGluZTJbOi0xXV0KICAgIGxpbmUxID0gZi5yZWFkbGluZSgpCiAgICBsaW5lMiA9IGcucmVhZGxpbmUoKQogICAgY3B0Kz0xCgpmb3IgayBpbiBzb3J0ZWQod29yZF9mYW1pbHkpOgogICAgaC53cml0ZShrKyIgPT0+IFx0IisgIiAiLmpvaW4od29yZF9mYW1pbHlba10pKyJcbiIpCgpwcmludCAiTnVtYmVyIG9mIHdvcmRzID0iLCBjcHQKcHJpbnQgIk51bWJlciBvZiBncm91cHMgPSIsIGxlbih3b3JkX2ZhbWlseSkKcHJpbnQgIkdyb3VwaW5nIHBlcmNlbnRhZ2UgPSIsIChsZW4od29yZF9mYW1pbHkpKS9mbG9hdChjcHQpCjx8ZmltX3N1ZmZpeHw+CmxpbmUyID0gZy5yZWFkbGluZSgpCndvcmRfZmFtaWx5PXt9CmNwdD0xCndoaWxlIChsaW5lMSBhbmQgbGluZTIpOgo8fGZpbV9lbmR8Pg=="]
["ee2befac29f88a288f219a20c5f40a54ed7fd326-1","ee2befac29f88a288f219a20c5f40a54ed7fd326","PHxmaW1fcHJlZml4fD4KZnJvbSBzcWxhbGNoZW15IGltcG9ydCBDb2x1bW4sIFN0cmluZywgSW50ZWdlciwgRm9yZWlnbktleSwgRmxvYXQsIFRJTUVTVEFNUAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gc3FsYWxjaGVteS5vcm0gaW1wb3J0IHJlbGF0aW9uc2hpcCwgYmFja3JlZgpmcm9tIHNxbGFsY2hlbXkuZXh0LmRlY2xhcmF0aXZlIGltcG9ydCBkZWNsYXJhdGl2ZV9iYXNlCgpCYXNlID0gZGVjbGFyYXRpdmVfYmFzZSgpCjx8ZmltX2VuZHw+"]
["aec184fc17b6bf51304d8eb83f4c1557cd62a586-2","aec184fc17b6bf51304d8eb83f4c1557cd62a586","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgojIGNvcHkgZnJvbSBzbG93ZmFzdC5tb2RlbHMub3B0aW1pemVyCiIiIk9wdGltaXplci4iIiIKCmltcG9ydCB0b3JjaAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG1hdGgKCmRlZiBjb25zdHJ1Y3Rfb3B0aW1pemVyKG1vZGVsLCBjZmcpOgogICAgIiIiCiAgICBDb25zdHJ1Y3QgYSBzdG9jaGFzdGljIGdyYWRpZW50IGRlc2NlbnQgb3IgQURBTSBvcHRpbWl6ZXIgd2l0aCBtb21lbnR1bS4KICAgIERldGFpbHMgY2FuIGJlIGZvdW5kIGluOgogICAgSGVyYmVydCBSb2JiaW5zLCBhbmQgU3V0dG9uIE1vbnJvLiAiQSBzdG9jaGFzdGljIGFwcHJveGltYXRpb24gbWV0aG9kLiIKICAgIGFuZAogICAgRGllZGVyaWsgUC5LaW5nbWEsIGFuZCBKaW1teSBCYS4KICAgICJBZGFtOiBBIE1ldGhvZCBmb3IgU3RvY2hhc3RpYyBPcHRpbWl6YXRpb24uIgoKICAgIEFyZ3M6CiAgICAgICAgbW9kZWwgKG1vZGVsKTogbW9kZWwgdG8gcGVyZm9ybSBzdG9jaGFzdGljIGdyYWRpZW50IGRlc2NlbnQKICAgICAgICBvcHRpbWl6YXRpb24gb3IgQURBTSBvcHRpbWl6YXRpb24uCiAgICAgICAgY2ZnIChjb25maWcpOiBjb25maWdzIG9mIGh5cGVyLXBhcmFtZXRlcnMgb2YgU0dEIG9yIEFEQU0sIGluY2x1ZGVzIGJhc2UKICAgICAgICBsZWFybmluZyByYXRlLCAgbW9tZW50dW0sIHdlaWdodF9kZWNheSwgZGFtcGVuaW5nLCBhbmQgZXRjLgogICAgIiIiCiAgICAjIEJhdGNobm9ybSBwYXJhbWV0ZXJzLgogICAgYm5fcGFyYW1zID0gW10KICAgICMgTm9uLWJhdGNobm9ybSBwYXJhbWV0ZXJzLgogICAgbm9uX2JuX3BhcmFtZXRlcnMgPSBbXQogICAgZm9yIG4sIG0gaW4gbW9kZWwubmFtZWRfbW9kdWxlcygpOgogICAgICAgIGlzX2JuID0gaXNpbnN0YW5jZShtLCB0b3JjaC5ubi5tb2R1bGVzLmJhdGNobm9ybS5fTm9ybUJhc2UpCiAgICAgICAgZm9yIHAgaW4gbS5wYXJhbWV0ZXJzKHJlY3Vyc2U9RmFsc2UpOgogICAgICAgICAgICBpZiAnYmFja2JvbmUnIGluIG4gYW5kIGNmZy5NT0RFTC5UUkFJTl9CQVNFICE9ICd0cmFpbl9hbGwnOgogICAgICAgICAgICAgICAgaWYgY2ZnLk1PREVMLlRSQUlOX0JBU0UgPT0gJ2Zyb3plbic6CiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIGVsaWYgY2ZnLk1PREVMLlRSQUlOX0JBU0UgPT0gJ29ubHlfYm4nOgogICAgICAgICAgICAgICAgICAgIGlmIGlzX2JuOgogICAgICAgICAgICAgICAgICAgICAgICBibl9wYXJhbXMuYXBwZW5kKHApCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBpZiBpc19ibjoKICAgICAgICAgICAgICAgICAgICBibl9wYXJhbXMuYXBwZW5kKHApCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIG5vbl9ibl9wYXJhbWV0ZXJzLmFwcGVuZChwKQoKICAgICMgQXBwbHkgZGlmZmVyZW50IHdlaWdodCBkZWNheSB0byBCYXRjaG5vcm0gYW5kIG5vbi1iYXRjaG5vcm0gcGFyYW1ldGVycy4KICAgICMgSW4gQ2FmZmUyIGNsYXNzaWZpY2F0aW9uIGNvZGViYXNlIHRoZSB3ZWlnaHQgZGVjYXkgZm9yIGJhdGNobm9ybSBpcyAwLjAuCiAgICAjIEhhdmluZyBhIGRpZmZlcmVudCB3ZWlnaHQgZGVjYXkgb24gYmF0Y2hub3JtIG1pZ2h0IGNhdXNlIGEgcGVyZm9ybWFuY2UKICAgICMgZHJvcC4KICAgIG9wdGltX3BhcmFtcyA9IFsKICAgICAgICB7InBhcmFtcyI6IGJuX3BhcmFtcywgIndlaWdodF9kZWNheSI6IGNmZy5PUFRJTUlaRVIuV0VJR0hUX0RFQ0FZfSwKICAgICAgICB7InBhcmFtcyI6IG5vbl9ibl9wYXJhbWV0ZXJzLCAid2VpZ2h0X2RlY2F5IjogY2ZnLk9QVElNSVpFUi5XRUlHSFRfREVDQVl9LAogICAgXQoKICAgIGlmIGNmZy5PUFRJTUlaRVIuVFlQRSA9PSAiTW9tZW50dW1PcHRpbWl6ZXIiOgogICAgICAgIHJldHVybiB0b3JjaC5vcHRpbS5TR0QoCiAgICAgICAgICAgIG9wdGltX3BhcmFtcywKPHxmaW1faG9sZXw+CiAgICAgICAgKQogICAgZWxpZiBjZmcuT1BUSU1JWkVSLlRZUEUgPT0gIkFkYW1PcHRpbWl6ZXIiOgogICAgICAgIHJldHVybiB0b3JjaC5vcHRpbS5BZGFtKAogICAgICAgICAgICBvcHRpbV9wYXJhbXMsCiAgICAgICAgICAgIGxyPWNmZy5PUFRJTUlaRVIuTFIuSU5JVElBTF9MUiwKICAgICAgICAgICAgYmV0YXM9KDAuOSwgMC45OTkpLAogICAgICAgICAgICB3ZWlnaHRfZGVjYXk9Y2ZnLk9QVElNSVpFUi5XRUlHSFRfREVDQVksCiAgICAgICAgKQogICAgZWxpZiBjZmcuT1BUSU1JWkVSLlRZUEUgPT0gIkFkYW1XT3B0aW1pemVyIjoKICAgICAgICByZXR1cm4gdG9yY2gub3B0aW0uQWRhbVcoCiAgICAgICAgICAgIG9wdGltX3BhcmFtcywKICAgICAgICAgICAgbHI9Y2ZnLk9QVElNSVpFUi5MUi5JTklUSUFMX0xSLAogICAgICAgICAgICBiZXRhcz0oMC45LCAwLjk5OSksCiAgICAgICAgICAgIHdlaWdodF9kZWNheT1jZmcuT1BUSU1JWkVSLldFSUdIVF9ERUNBWSwKICAgICAgICApCiAgICBlbHNlOgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgICAgICJEb2VzIG5vdCBzdXBwb3J0IHt9IG9wdGltaXplciIuZm9ybWF0KGNmZy5PUFRJTUlaRVIuVFlQRSkKICAgICAgICApCgpkZWYgY29uc3RydWN0X3NjaGVkdWxlcihvcHRpbWl6ZXIsIGNmZyk6CiAgICBpZiBjZmcuT1BUSU1JWkVSLkxSLkRFQ0FZX1RZUEUgPT0gImZpeGVkIjoKICAgICAgICByZXR1cm4gdG9yY2gub3B0aW0ubHJfc2NoZWR1bGVyLkxhbWJkYUxSKG9wdGltaXplciwgbHJfbGFtYmRhPWxhbWJkYSBlcG9jaDogMSkKICAgIGVsaWYgY2ZnLk9QVElNSVpFUi5MUi5ERUNBWV9UWVBFID09ICJjb3NpbmUiOgogICAgICAgIHJldHVybiB0b3JjaC5vcHRpbS5scl9zY2hlZHVsZXIuQ29zaW5lQW5uZWFsaW5nTFIoCiAgICAgICAgICAgIG9wdGltaXplciwKICAgICAgICAgICAgVF9tYXg9Y2ZnLlRSQUlOLk1BWF9FUE9DSFMgKyAxLCAKICAgICAgICAgICAgZXRhX21pbj0wLAogICAgICAgICAgICBsYXN0X2Vwb2NoPS0xCiAgICAgICAgKQogICAgZWxpZiBjZmcuT1BUSU1JWkVSLkxSLkRFQ0FZX1RZUEUgPT0gImNvc2luZXdhcm11cCI6CiAgICAgICAgYmFzZV9sciA9IGNmZy5PUFRJTUlaRVIuTFIuSU5JVElBTF9MUgogICAgICAgIHdhcm11cF9scl9zY2hlZHVsZSA9IG5wLmxpbnNwYWNlKGNmZy5PUFRJTUlaRVIuTFIuV0FSTVVQX0xSIC8gYmFzZV9sciwgMSwgY2ZnLk9QVElNSVpFUi5MUi5OVU1fV0FSTVVQX1NURVBTKQogICAgICAgIGl0ZXJzID0gbnAuYXJhbmdlKGNmZy5UUkFJTi5NQVhfRVBPQ0hTICsgMSAtIGNmZy5PUFRJTUlaRVIuTFIuTlVNX1dBUk1VUF9TVEVQUykKICAgICAgICBjb3NpbmVfbHJfc2NoZWR1bGUgPSBucC5hcnJheShbY2ZnLk9QVElNSVpFUi5MUi5GSU5BTF9MUiAvIGJhc2VfbHIgKyAwLjUgKiAoMSAtIGNmZy5PUFRJTUlaRVIuTFIuRklOQUxfTFIgLyBiYXNlX2xyKSAqIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSArIG1hdGguY29zKG1hdGgucGkgKiB0IC8gbGVuKGl0ZXJzKSkpIGZvciB0IGluIGl0ZXJzXSkKICAgICAgICBscl9zY2hlZHVsZSA9IG5wLmNvbmNhdGVuYXRlKCh3YXJtdXBfbHJfc2NoZWR1bGUsIGNvc2luZV9scl9zY2hlZHVsZSkpCiAgICAgICAgcmV0dXJuIHRvcmNoLm9wdGltLmxyX3NjaGVkdWxlci5MYW1iZGFMUihvcHRpbWl6ZXIsIGxyX2xhbWJkYT1sYW1iZGEgZXBvY2g6IGxyX3NjaGVkdWxlW2Vwb2NoXSkKICAgIGVsc2U6CiAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKICAgICAgICAgICAgIkRvZXMgbm90IHN1cHBvcnQge30gc2NoZWR1bGVyIi5mb3JtYXQoY2ZnLk9QVElNSVpFUi5MUi5ERUNBWV9UWVBFKQogICAgICAgICkKCmRlZiBnZXRfbHIob3B0aW1pemVyKToKICAgIHJldHVybiBbcGFyYW1fZ3JvdXBbImxyIl0gZm9yIHBhcmFtX2dyb3VwIGluIG9wdGltaXplci5wYXJhbV9ncm91cHNdCgpkZWYgc2V0X2xyKG9wdGltaXplciwgbmV3X2xyKToKICAgICIiIgogICAgU2V0cyB0aGUgb3B0aW1pemVyIGxyIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuCiAgICBBcmdzOgogICAgICAgIG9wdGltaXplciAob3B0aW0pOiB0aGUgb3B0aW1pemVyIHVzaW5nIHRvIG9wdGltaXplIHRoZSBjdXJyZW50IG5ldHdvcmsuCiAgICAgICAgbmV3X2xyIChmbG9hdCk6IHRoZSBuZXcgbGVhcm5pbmcgcmF0ZSB0byBzZXQuCiAgICAiIiIKICAgIGZvciBwYXJhbV9ncm91cCBpbiBvcHRpbWl6ZXIucGFyYW1fZ3JvdXBzOgogICAgICAgIHBhcmFtX2dyb3VwWyJsciJdID0gbmV3X2xyCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGxyPWNmZy5PUFRJTUlaRVIuTFIuSU5JVElBTF9MUiwKICAgICAgICAgICAgbW9tZW50dW09MC45LAogICAgICAgICAgICB3ZWlnaHRfZGVjYXk9Y2ZnLk9QVElNSVpFUi5XRUlHSFRfREVDQVksCjx8ZmltX2VuZHw+"]
["d1da1c2528ee4f7f7b255bb1aac5b69a29c55e82-1","d1da1c2528ee4f7f7b255bb1aac5b69a29c55e82","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcsIG15bW9kdWxlCgo8fGZpbV9ob2xlfD4KbG9nLmluZm8oIlN0YXJ0aW5nIG15IGFwcCIpCnRyeToKICAgIG15bW9kdWxlLmRvSXQoKQpleGNlcHQgRXhjZXB0aW9uLCBlOgogICAgbG9nLmV4Y2VwdGlvbigiVGhlcmUgd2FzIGEgcHJvYmxlbS4iKQpsb2cuaW5mbygiRW5kaW5nIG15IGFwcCIpCgo8fGZpbV9zdWZmaXh8Pgpsb2dnaW5nLmJhc2ljQ29uZmlnKCkKCmxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJNeUFwcCIpCmxvZy5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKSAjc2V0IHZlcmJvc2l0eSB0byBzaG93IGFsbCBtZXNzYWdlcyBvZiBzZXZlcml0eSA+PSBERUJVRwo8fGZpbV9lbmR8Pg=="]
["d1f3e153c772a57b2b80c4d11eabe5c1abecde54-1","d1f3e153c772a57b2b80c4d11eabe5c1abecde54","PHxmaW1fcHJlZml4fD4KCmltcG9ydCBvcwppbXBvcnQgc3VicHJvY2VzcwoKdGFyZ2V0X2RpciA9ICcvYmRhdGEvaHV0L2xhYi9yaXpfTGlwTmV0L2RhdGEvdW56aXBwZWQnCgp2aWRlb19zdHIgPSAnL2JkYXRhL2h1dC9sYWIvcml6X0xpcE5ldC9kYXRhL3N7Kn0ubXBnX3ZjZC56aXAnCmFsaWduX3N0ciA9ICcvYmRhdGEvaHV0L2xhYi9yaXpfTGlwTmV0L2RhdGEvc3sqfS50YXInCgoKZm9yIGsgaW4gcmFuZ2UoMSwzNSk6CiAgICBpZiBrID09IDIxOgogICAgICAgIGNvbnRpbnVlCgogICAgdmlkZW8gPSB2aWRlb19zdHIucmVwbGFjZSgieyp9Iiwgc3RyKGspKQogICAgYWxpZ24gPSBhbGlnbl9zdHIucmVwbGFjZSgieyp9Iiwgc3RyKGspKQoKPHxmaW1faG9sZXw+CiAgICAjbWtkaXIgLXAgMTExICYmIHRhciAtenh2ZiBzMS50YXIgLUMgMTExCiAgICAjdGFyX3RhcmdldCA9IG9zLnBhdGguam9pbih0YXJnZXRfZGlyLCAncyVkX2FsaWduJy5mb3JtYXQoaykpCiAgICB0YXJfdGFyZ2V0ID0gdGFyZ2V0X2RpcgogICAgY21kID0gWyd0YXInLCcteHZmJyxhbGlnbiwnLUMnLHRhcl90YXJnZXQgXQogICAgcHJpbnQoJ3RhciAgJywgYWxpZ24pCiAgICBzdWJwcm9jZXNzLmNhbGwoY21kKQo8fGZpbV9zdWZmaXh8PgogICAgY21kID0gWyd1bnppcCcsIHZpZGVvLCAnLWQnLCB0YXJnZXRfZGlyXQogICAgcHJpbnQoJ3VuemlwICcsIHZpZGVvKQogICAgc3VicHJvY2Vzcy5jYWxsKGNtZCkKCjx8ZmltX2VuZHw+"]
["d1af4a7718aea18e9951a73426783fc054af5c7c-5","d1af4a7718aea18e9951a73426783fc054af5c7c","PHxmaW1fcHJlZml4fD4KIyBVbmxlc3MgZXhwbGljaXRseSBzdGF0ZWQgb3RoZXJ3aXNlIGFsbCBmaWxlcyBpbiB0aGlzIHJlcG9zaXRvcnkgYXJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUtMi4wIExpY2Vuc2UuCiMgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBhdCBEYXRhZG9nIChodHRwczovL3d3dy5kYXRhZG9naHEuY29tLykuCiMgQ29weXJpZ2h0IDIwMTktUHJlc2VudCBEYXRhZG9nLCBJbmMuCgoKZnJvbSBkYXRhZG9nX2FwaV9jbGllbnQudjEubW9kZWxfdXRpbHMgaW1wb3J0ICgKICAgIE1vZGVsTm9ybWFsLAogICAgY2FjaGVkX3Byb3BlcnR5LAopCgoKZGVmIGxhenlfaW1wb3J0KCk6CiAgICBmcm9tIGRhdGFkb2dfYXBpX2NsaWVudC52MS5tb2RlbC5sb2dzX2xvb2t1cF9wcm9jZXNzb3JfdHlwZSBpbXBvcnQgTG9nc0xvb2t1cFByb2Nlc3NvclR5cGUKCiAgICBnbG9iYWxzKClbIkxvZ3NMb29rdXBQcm9jZXNzb3JUeXBlIl0gPSBMb2dzTG9va3VwUHJvY2Vzc29yVHlwZQoKCmNsYXNzIExvZ3NMb29rdXBQcm9jZXNzb3IoTW9kZWxOb3JtYWwpOgogICAgIiIiTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvci4KICAgIFJlZjogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoCgogICAgRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LgogICAgIiIiCgogICAgdmFsaWRhdGlvbnMgPSB7fQoKICAgIEBjYWNoZWRfcHJvcGVydHkKICAgIGRlZiBvcGVuYXBpX3R5cGVzKCk6Cjx8ZmltX2hvbGV8PgogICAgICAgICAgICAibG9va3VwX3RhYmxlIjogKFtzdHJdLCksCiAgICAgICAgICAgICJuYW1lIjogKHN0ciwpLAogICAgICAgICAgICAic291cmNlIjogKHN0ciwpLAogICAgICAgICAgICAidGFyZ2V0IjogKHN0ciwpLAogICAgICAgICAgICAidHlwZSI6IChMb2dzTG9va3VwUHJvY2Vzc29yVHlwZSwpLAogICAgICAgIH0KCiAgICBhdHRyaWJ1dGVfbWFwID0gewogICAgICAgICJsb29rdXBfdGFibGUiOiAibG9va3VwX3RhYmxlIiwKICAgICAgICAic291cmNlIjogInNvdXJjZSIsCiAgICAgICAgInRhcmdldCI6ICJ0YXJnZXQiLAogICAgICAgICJ0eXBlIjogInR5cGUiLAogICAgICAgICJkZWZhdWx0X2xvb2t1cCI6ICJkZWZhdWx0X2xvb2t1cCIsCiAgICAgICAgImlzX2VuYWJsZWQiOiAiaXNfZW5hYmxlZCIsCiAgICAgICAgIm5hbWUiOiAibmFtZSIsCiAgICB9CgogICAgcmVhZF9vbmx5X3ZhcnMgPSB7fQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29rdXBfdGFibGUsIHNvdXJjZSwgdGFyZ2V0LCB0eXBlLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICIiIkxvZ3NMb29rdXBQcm9jZXNzb3IgLSBhIG1vZGVsIGRlZmluZWQgaW4gT3BlbkFQSQoKICAgICAgICBBcmdzOgogICAgICAgICAgICBsb29rdXBfdGFibGUgKFtzdHJdKTogTWFwcGluZyB0YWJsZSBvZiB2YWx1ZXMgZm9yIHRoZSBzb3VyY2UgYXR0cmlidXRlIGFuZCB0aGVpciBhc3NvY2lhdGVkIHRhcmdldCBhdHRyaWJ1dGUgdmFsdWVzLCBmb3JtYXR0ZWQgYXMgYFtcInNvdXJjZV9rZXkxLHRhcmdldF92YWx1ZTFcIiwgXCJzb3VyY2Vfa2V5Mix0YXJnZXRfdmFsdWUyXCJdYAogICAgICAgICAgICBzb3VyY2UgKHN0cik6IFNvdXJjZSBhdHRyaWJ1dGUgdXNlZCB0byBwZXJmb3JtIHRoZSBsb29rdXAuCiAgICAgICAgICAgIHRhcmdldCAoc3RyKTogTmFtZSBvZiB0aGUgYXR0cmlidXRlIHRoYXQgY29udGFpbnMgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIG1hcHBpbmcgbGlzdCBvciB0aGUgYGRlZmF1bHRfbG9va3VwYCBpZiBub3QgZm91bmQgaW4gdGhlIG1hcHBpbmcgbGlzdC4KICAgICAgICAgICAgdHlwZSAoTG9nc0xvb2t1cFByb2Nlc3NvclR5cGUpOgoKICAgICAgICBLZXl3b3JkIEFyZ3M6CiAgICAgICAgICAgIGRlZmF1bHRfbG9va3VwIChzdHIpOiBbb3B0aW9uYWxdIFZhbHVlIHRvIHNldCB0aGUgdGFyZ2V0IGF0dHJpYnV0ZSBpZiB0aGUgc291cmNlIHZhbHVlIGlzIG5vdCBmb3VuZCBpbiB0aGUgbGlzdC4KICAgICAgICAgICAgaXNfZW5hYmxlZCAoYm9vbCk6IFtvcHRpb25hbF0gV2hldGhlciBvciBub3QgdGhlIHByb2Nlc3NvciBpcyBlbmFibGVkLiBJZiBvbWl0dGVkIHRoZSBzZXJ2ZXIgd2lsbCB1c2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgRmFsc2UuCiAgICAgICAgICAgIG5hbWUgKHN0cik6IFtvcHRpb25hbF0gTmFtZSBvZiB0aGUgcHJvY2Vzc29yLgogICAgICAgICIiIgogICAgICAgIHN1cGVyKCkuX19pbml0X18oa3dhcmdzKQoKICAgICAgICBzZWxmLl9jaGVja19wb3NfYXJncyhhcmdzKQoKICAgICAgICBzZWxmLmxvb2t1cF90YWJsZSA9IGxvb2t1cF90YWJsZQogICAgICAgIHNlbGYuc291cmNlID0gc291cmNlCiAgICAgICAgc2VsZi50YXJnZXQgPSB0YXJnZXQKICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgX2Zyb21fb3BlbmFwaV9kYXRhKGNscywgbG9va3VwX3RhYmxlLCBzb3VyY2UsIHRhcmdldCwgdHlwZSwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAiIiJIZWxwZXIgY3JlYXRpbmcgYSBuZXcgaW5zdGFuY2UgZnJvbSBhIHJlc3BvbnNlLiIiIgoKICAgICAgICBzZWxmID0gc3VwZXIoTG9nc0xvb2t1cFByb2Nlc3NvciwgY2xzKS5fZnJvbV9vcGVuYXBpX2RhdGEoa3dhcmdzKQoKICAgICAgICBzZWxmLl9jaGVja19wb3NfYXJncyhhcmdzKQoKICAgICAgICBzZWxmLmxvb2t1cF90YWJsZSA9IGxvb2t1cF90YWJsZQogICAgICAgIHNlbGYuc291cmNlID0gc291cmNlCiAgICAgICAgc2VsZi50YXJnZXQgPSB0YXJnZXQKICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCiAgICAgICAgcmV0dXJuIHNlbGYKPHxmaW1fc3VmZml4fD4KICAgICAgICBsYXp5X2ltcG9ydCgpCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgImRlZmF1bHRfbG9va3VwIjogKHN0ciwpLAogICAgICAgICAgICAiaXNfZW5hYmxlZCI6IChib29sLCksCjx8ZmltX2VuZHw+"]
["2369aa356e24a5d810ec2926a2b1b6a482b910c7-2","2369aa356e24a5d810ec2926a2b1b6a482b910c7","PHxmaW1fcHJlZml4fD4KIiIiCkEgZGF0YWxvZyBlbmdpbmUuCiIiIgoKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZQoKZnJvbSBkYXRhbG9nLnR5cGVzIGltcG9ydCAoCiAgICBDYWNoZWREYXRhc2V0LAogICAgQ29uc3RhbnQsCiAgICBEYXRhc2V0LAogICAgTFZhciwKICAgIFRhYmxlSW5kZXhlZERhdGFzZXQsCikKCgpkZWYgbWF0Y2godHVwbGUsIGV4cHIsIGJpbmRpbmdzPU5vbmUpOgogICAgIiIiQXR0ZW1wdCB0byBjb25zdHJ1Y3QgbHZhciBiaW5kaW5ncyBmcm9tIGV4cHIgc3VjaCB0aGF0IHR1cGxlIGFuZCBleHByIGVxdWF0ZS4KCiAgICBJZiB0aGUgbWF0Y2ggaXMgc3VjY2Vzc2Z1bCwgcmV0dXJuIHRoZSBiaW5kaW5nIG1hcCwgb3RoZXJ3aXNlIHJldHVybiBOb25lLgogICAgIiIiCgogICAgYmluZGluZ3MgPSBiaW5kaW5ncy5jb3B5KCkgaWYgYmluZGluZ3MgaXMgbm90IE5vbmUgZWxzZSB7fQogICAgZm9yIGEsIGIgaW4gemlwKGV4cHIsIHR1cGxlKToKICAgICAgICAjIE5vdGUgdGhlIGx2YXIgLSBsdmFyIGNhc2UgaXMgZGVsaWJlcmF0ZWx5IGlnbm9yZWQuCiAgICAgICAgIyBUaGlzIG1heSBub3Qgd29yayBvdXQgbG9uZyB0ZXJtLgogICAgICAgIGlmIGlzaW5zdGFuY2UoYSwgTFZhcikgYW5kIGlzaW5zdGFuY2UoYiwgTFZhcik6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZWxpZiBpc2luc3RhbmNlKGEsIExWYXIpIGFuZCBhIG5vdCBpbiBiaW5kaW5ncyBhbmQgaXNpbnN0YW5jZShiLCBDb25zdGFudCk6CiAgICAgICAgICAgIGJpbmRpbmdzW2FdID0gYgogICAgICAgIGVsaWYgaXNpbnN0YW5jZShhLCBMVmFyKSBhbmQgYSBpbiBiaW5kaW5ncyBhbmQgYmluZGluZ3NbYV0gPT0gYjoKICAgICAgICAgICAgY29udGludWUKICAgICAgICBlbGlmIGlzaW5zdGFuY2UoYSwgTFZhcikgYW5kIGEgaW4gYmluZGluZ3MgYW5kIGJpbmRpbmdzW2FdICE9IGI6CiAgICAgICAgICAgIHJldHVybgogICAgICAgIGVsaWYgYSAhPSBiOgogICAgICAgICAgICByZXR1cm4KCiAgICByZXR1cm4gYmluZGluZ3MKCgpkZWYgYXBwbHlfYmluZGluZ3MoZXhwciwgYmluZGluZ3MsIHN0cmljdD1UcnVlKToKICAgICIiIkdpdmVuIGFuIGV4cHIgd2hpY2ggbWF5IGNvbnRhaW4gbHZhcnMsIHN1YnN0aXR1dGUgaXRzIGx2YXJzIGZvciBjb25zdGFudHMgcmV0dXJuaW5nIHRoZQogICAgc2ltcGxpZmllZCBleHByLgoKICAgICIiIgoKICAgIGlmIHN0cmljdDoKICAgICAgICByZXR1cm4gdHVwbGUoKGJpbmRpbmdzW2VdIGlmIGlzaW5zdGFuY2UoZSwgTFZhcikgZWxzZSBlKSBmb3IgZSBpbiBleHByKQogICAgZWxzZToKICAgICAgICByZXR1cm4gdHVwbGUoKGJpbmRpbmdzLmdldChlLCBlKSBpZiBpc2luc3RhbmNlKGUsIExWYXIpIGVsc2UgZSkgZm9yIGUgaW4gZXhwcikKCgpkZWYgc2VsZWN0KGRiOiBEYXRhc2V0LCBleHByLCBiaW5kaW5ncz1Ob25lLCBfcmVjdXJzaW9uX2d1YXJkPU5vbmUsIF9zZWxlY3RfZ3VhcmQ9Tm9uZSk6CiAgICAiIiJFdmFsdWF0ZSBhbiBleHByZXNzaW9uIGluIGEgZGF0YWJhc2UsIGxhemlseSBwcm9kdWNpbmcgYSBzZXF1ZW5jZSBvZiAnbWF0Y2hpbmcnIHR1cGxlcy4KCiAgICBUaGUgZGF0YXNldCBpcyBhIHNldCBvZiB0dXBsZXMgYW5kIHJ1bGVzLCBhbmQgdGhlIGV4cHJlc3Npb24gaXMgYSBzaW5nbGUgdHVwbGUgY29udGFpbmluZyBsdmFycwogICAgYW5kIGNvbnN0YW50cy4gRXZhbHVhdGVzIHJ1bGVzIGFuZCB0dXBsZXMsIHJldHVybmluZwoKICAgICIiIgoKICAgIGRlZiBfX3NlbGVjdF90dXBsZXMoKToKICAgICAgICAjIEFzIGFuIG9wdC4gc3VwcG9ydCBpbmRleGVkIHNjYW5zLCB3aGljaCBpcyBvcHRpb25hbC4KICAgICAgICBpZiBpc2luc3RhbmNlKGRiLCBUYWJsZUluZGV4ZWREYXRhc2V0KToKICAgICAgICAgICAgaXRlciA9IGRiLnNjYW5faW5kZXgoZXhwcikKICAgICAgICBlbHNlOgogICAgICAgICAgICBpdGVyID0gZGIudHVwbGVzKCkKCiAgICAgICAgIyBGb3IgYWxsIGhpdHMgaW4gdGhlIHNjYW4sIGNoZWNrIGZvciBhIG1hdGNoCiAgICAgICAgIyBGSVhNRSAoYXJyZGVtIDIwMTktMDYtMDEpOgogICAgICAgICMgICBVc2UgdGhlIFdBTFJVUyBPUEVSQVRPUgogICAgICAgIGZvciB0IGluIGl0ZXI6CiAgICAgICAgICAgICMgTGVuZ3RocyBtdXN0IHRpZSBvZmYKICAgICAgICAgICAgaWYgbGVuKGV4cHIpICE9IGxlbih0KToKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAjIFRoZSBtb3JlIGV4cGVuc2l2ZSBjaGVjayAtIHRlcm1zICsgYmluZGluZ3MgbXVzdCB0aWUgb2ZmCiAgICAgICAgICAgIF9iaW5kaW5ncyA9IG1hdGNoKHQsIGV4cHIsIGJpbmRpbmdzIG9yIHt9KQogICAgICAgICAgICBpZiBfYmluZGluZ3MgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICB5aWVsZCAoKHQsKSwgX2JpbmRpbmdzKQoKICAgIGRlZiBfX2lubmVyX3NlbGVjdF9ydWxlcyhyLCBjYWNoZV9rZXksIGJhc2VfYmluZGluZ3MpOgogICAgICAgIGZvciB0dXBsZXMsIGJpbmRpbmdzIGluIGpvaW4oCiAgICAgICAgICAgIGRiLAogICAgICAgICAgICByLmNsYXVzZXMsCiAgICAgICAgICAgIGJhc2VfYmluZGluZ3MsCiAgICAgICAgICAgIHBhdHRlcm49ci5wYXR0ZXJuLAogICAgICAgICAgICBfcmVjdXJzaW9uX2d1YXJkPXtyLCAqX3JlY3Vyc2lvbl9ndWFyZH0sCiAgICAgICAgKToKICAgICAgICAgICAgIyBBbmQgc29tZSBmYW5jeSBmb290d29yayBzbyB3ZSByZXR1cm4gYmluZGluZ3MgaW4gdGVybXMgb2YgVEhJUyBleHByIG5vdCB0aGUgcGF0dGVybihzKQogICAgICAgICAgICB0ID0gYXBwbHlfYmluZGluZ3Moci5wYXR0ZXJuLCBiaW5kaW5ncykKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkYiwgQ2FjaGVkRGF0YXNldCk6CiAgICAgICAgICAgICAgICBkYi5jYWNoZV90dXBsZShjYWNoZV9rZXksIHQpCiAgICAgICAgICAgIHlpZWxkIHQKCiAgICBkZWYgX19zZWxlY3RfcnVsZXMoKToKICAgICAgICAjIEFORCBub3cgZm9yIHRoZSBtZXNzeSBiaXQsIHdlIGhhdmUgdG8gZG8gcnVsZSBldmFsdWF0aW9uLgoKICAgICAgICAjIEhBQ0sgKGFycmRlbSAyMDE5LTA2LTE4KToKICAgICAgICAjICAgQXMgYSBoZXVyaXN0aWMsIHRyYXZlcnNlIGFsbCBJTkFDVElWRSBydWxlcyBmaXJzdC4KICAgICAgICAjICAgVGhlIGludHVpdGlvbiBoZXJlIGlzIHRoYXQgaWYgd2UgaGl0IGEgUkVDVVJTSVZFIHJ1bGUgZmlyc3QsIHdlIHdhbnQgdG8gaGl0IGl0cyBiYXNlIGNhc2UuCiAgICAgICAgX2luYWN0dmVfcnVsZXMgPSBbXQogICAgICAgIF9hY3RpdmVfcnVsZXMgPSBbXQoKICAgICAgICBmb3IgciBpbiBkYi5ydWxlcygpOgogICAgICAgICAgICBpZiByIGluIF9yZWN1cnNpb25fZ3VhcmQ6CiAgICAgICAgICAgICAgICBfYWN0aXZlX3J1bGVzLmFwcGVuZChyKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgX2luYWN0dmVfcnVsZXMuYXBwZW5kKHIpCgogICAgICAgICMgTm93IHByaW9yaXRpemluZyB0aGUgaW5hY3RpdmUgcnVsZXMsIHRyeSB0byBmaW5kIG1hdGNoZXMuCiAgICAgICAgZm9yIHIgaW4gWypfaW5hY3R2ZV9ydWxlcywgKl9hY3RpdmVfcnVsZXNdOgogICAgICAgICAgICAjIElmIHRoZSBwYXR0ZXJucyBjb3VsZCBtYXRjaCwKICAgICAgICAgICAgaWYgci5wYXR0ZXJuWzBdID09IGV4cHJbMF0gYW5kIGxlbihyLnBhdHRlcm4pID09IGxlbihleHByKToKICAgICAgICAgICAgICAgICMgRXN0YWJsaXNoICJiYXNlIiBiaW5kaW5ncyBmcm9tIGV4cHIgY29uc3RhbnRzIHRvIHJ1bGUgbHZhcnMKICAgICAgICAgICAgICAgIGJhc2VfYmluZGluZ3MgPSBtYXRjaChleHByLCByLnBhdHRlcm4pCgogICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyBjb3VsZCBmYWlsIGlmIHRoZXJlIGFyZSBtaXNtYXRjaGVkIGNvbnN0YW50cywgaW4gd2hpY2ggY2FzZSBicmVhay4KICAgICAgICAgICAgICAgIGlmIGJhc2VfYmluZGluZ3MgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgICAgIGNhY2hlX2tleSA9ICgKICAgICAgICAgICAgICAgICAgICByLAogICAgICAgICAgICAgICAgICAgIGFwcGx5X2JpbmRpbmdzKHIucGF0dGVybiwgYmFzZV9iaW5kaW5ncywgc3RyaWN0PUZhbHNlKSwKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRiLCBDYWNoZWREYXRhc2V0KToKICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gZGIuc2Nhbl9jYWNoZShjYWNoZV9rZXkpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBOb25lCgogICAgICAgICAgICAgICAgaWYgcmVzdWx0cyBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBfX2lubmVyX3NlbGVjdF9ydWxlcyhyLCBjYWNoZV9rZXksIGJhc2VfYmluZGluZ3MpCgogICAgICAgICAgICAgICAgIyBGSVhNRSAoYXJyZGVtIDIwMTktMDYtMTIpOgogICAgICAgICAgICAgICAgIyAgSXQncyBwb3NzaWJsZSB0aGF0IHdlIGhpdCBhbiBpbmRleCBvciBjYWNoZSBwcmVjaXNlbHkgYW5kIGRvbid0IG5lZWQgdG8gdGVzdC4KICAgICAgICAgICAgICAgIGZvciB0IGluIHJlc3VsdHM6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICBwX2JpbmRpbmdzID0gbWF0Y2godCwgZXhwcikKICAgICAgICAgICAgICAgICAgICAjIEl0J3MgcG9zc2libGUgdGhhdCB3ZSBiaW5kIGEgdHVwbGUsIGFuZCB0aGVuIGl0IGRvZXNuJ3QgbWF0Y2guCiAgICAgICAgICAgICAgICAgICAgaWYgcF9iaW5kaW5ncyBpcyBub3QgTm9uZSBhbmQgdCBub3QgaW4gX3NlbGVjdF9ndWFyZDoKICAgICAgICAgICAgICAgICAgICAgICAgX3NlbGVjdF9ndWFyZC5hZGQodCkKPHxmaW1fZW5kfD4="]
["882141d6607f216cd424aa91103fe8568314d944-2","882141d6607f216cd424aa91103fe8568314d944","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgphcnIgPSBucC5hcnJheShbWzAsIDIsIDNdLAogICAgICAgICAgICAgICAgWzEsIDMsIC02XSwKICAgICAgICAgICAgICAgIFstMywgLTIsIDFdXSkKcHJpbnQocmVwcihhcnIgPT0gMykpCiNhcnJheShbW0ZhbHNlLCBGYWxzZSwgIFRydWVdLCBbRmFsc2UsICBUcnVlLCBGYWxzZV0sIFtGYWxzZSwgRmFsc2UsIEZhbHNlXV0sIGR0eXBlPWJvb2wpCiNucC5pc25hbgoKI25wLndoZXJlIHdpdGggMSBhcmd1bWVudAphcnIgPSBucC5hcnJheShbWzAsIDIsIDNdLAogICAgICAgICAgICAgICAgWzEsIDAsIDBdLAogICAgICAgICAgICAgICAgWy0zLCAwLCAwXV0pCnhfaW5kLCB5X2luZCA9IG5wLndoZXJlKGFyciAhPSAwKQpwcmludChyZXByKG5wLndoZXJlKGFyciAhPSAwKSkpCnByaW50KHJlcHIoeF9pbmQpKSAjIHggaW5kaWNlcyBvZiBub24temVybyBlbGVtZW50cwpwcmludChyZXByKHlfaW5kKSkgIyB5IGluZGljZXMgb2Ygbm9uLXplcm8gZWxlbWVudHMKcHJpbnQocmVwcihhcnJbeF9pbmQsIHlfaW5kXSkpCiMgKGFycmF5KFswLCAwLCAxLCAyXSksIGFycmF5KFsxLCAyLCAwLCAwXSkpCiMgYXJyYXkoWzAsIDAsIDEsIDJdKQojIGFycmF5KFsxLCAyLCAwLCAwXSkKIyBhcnJheShbIDIsICAzLCAgMSwgLTNdKQoKCiNucC53aGVyZSB3aXRoIDMgYXJndW1lbnRzCm5wX2ZpbHRlciA9IG5wLmFycmF5KFtbVHJ1ZSwgRmFsc2VdLCBbRmFsc2UsIFRydWVdXSkKcG9zaXRpdmVzID0gbnAuYXJyYXkoW1sxLCAyXSwgWzMsIDRdXSkKcHJpbnQocmVwcihucC53aGVyZShucF9maWx0ZXIsIHBvc2l0aXZlcywgLTEpKSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojYXJyYXkoW1sgMSwgLTFdLCBbLTEsICA0XV0pCgojbnAuYW55LCBucC5hbGwgYXhpcz0KPHxmaW1fZW5kfD4="]
["882afa9727ef7f96fab28f4ac9f9220b8335ba42-1","882afa9727ef7f96fab28f4ac9f9220b8335ba42","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNjMnJlYWRlcgpmcm9tIHNodXRpbCBpbXBvcnQgY29weSwgbW92ZQppbXBvcnQgcmUKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBzeXMKaW1wb3J0IG9zCgojIFRoaXMgc2NyaXB0IHJlcXVpcmVzIFtzYzJyZWFkZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9HcmF5bGluS2ltL3NjMnJlYWRlcikKIyBJbnN0YWxsIHdpdGggYHBpcCBpbnN0YWxsIHNjMnJlYWRlcmAuCgojIFBhcnNlIGFyZ3VtZW50cwpwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKICAgIGRlc2NyaXB0aW9uPSdUZXN0IHJlcGxheXMgaW4gYSBnaXZlbiBmb2xkZXIuIFRob3NlIHRoYXQgcGFzcyB0aGUgdGVzdCBhcmUgcGxhY2VkIGluIG9uZSBmb2xkZXIgYW5kIHRob3NlIHRoYXQgZmFpbCBpbiBhbm90aGVyLiBGb2xkZXJzIG11c3QgYmUgY3JlYXRlZCBiZWZvcmVoYW5kLiBTY3JpcHQgcmVxdWlyZXMgc2MycmVhZGVyLCBpbnN0YWxsIHdpdGggYHBpcCBpbnN0YWxsIHNjMnJlYWRlcmAuJykKcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICdzcmMnLCBoZWxwPSdQYXRoIHRvIHJlcGxheSBkaXJlY3RvcnkuIElmIHJlbGF0aXZlLCBoYXMgdG8gc3RhcnQgd2l0aCAuLyBvciAuLi8uJykKcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICdhY2NlcHREZXN0JywgaGVscD0nUGF0aCB0byBkaXJlY3Rvcnkgd2hlcmUgYWNjZXB0ZWQgcmVwbGF5cyBnby4gSWYgcmVsYXRpdmUsIGhhcyB0byBzdGFydCB3aXRoIC4vIG9yIC4uLy4nKQpwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgJ2RlY2xpbmVEZXN0JywgaGVscD0nUGF0aCB0byBkaXJlY3Rvcnkgd2hlcmUgYWNjZXB0ZWQgcmVwbGF5cyBnby4gSWYgcmVsYXRpdmUsIGhhcyB0byBzdGFydCB3aXRoIC4vIG9yIC4uLy4nKQphcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQoKIyBHbG9iYWxzCnJlcGxheXNDaGVja2VkID0gMApyZXBsYXlzQWNjZXB0ZWQgPSAwCmVycm9ycyA9IDAKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRlZiBsb2NrQW5kTG9hZCgpOgogICBnbG9iYWwgcmVwbGF5c0NoZWNrZWQKICAgZ2xvYmFsIHJlcGxheXNBY2NlcHRlZAogICBnbG9iYWwgZXJyb3JzCjx8ZmltX2VuZHw+"]
["ae15faf457fd392acc59a3d85641004dfba39d4a-1","ae15faf457fd392acc59a3d85641004dfba39d4a","PHxmaW1fcHJlZml4fD4KZnJvbSBjb2RlX2dlbmVyYXRvci5saW5lX2J1ZmZlciBpbXBvcnQgTGluZUJ1ZmZlcgpmcm9tIGNvZGVfZ2VuZXJhdG9yLnR5cGVfZ2VuZXJhdG9ycy5jcHBfdHlwZV9iYXNlIGltcG9ydCBDcHBUeXBlQmFzZQpmcm9tIGNvZGVfZ2VuZXJhdG9yLnR5cGVfZ2VuZXJhdG9ycy5pbm5lcl90eXBlX3BhcnNlciBpbXBvcnQgdmFyaWFudF9lbGVtZW50X3R5cGUKZnJvbSBzY2hlbWFfcGFyc2VyLnR5cGVfZGVmcy52YXJpYW50X2FsaWFzIGltcG9ydCBWYXJpYW50QWxpYXMKZnJvbSBzY2hlbWFfcGFyc2VyLnR5cGVfcmVnaXN0cnkgaW1wb3J0IFR5cGVSZWdpc3RyeQoKCmNsYXNzIENwcFZhcmlhbnRBbGlhcyhDcHBUeXBlQmFzZSk6CiAgICB0eXBlX2RlZjogVmFyaWFudEFsaWFzCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVfZGVmKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKHR5cGVfZGVmKQogICAgICAgIHNlbGYuaGVhZGVyX2luY2x1ZGVzLmFkZCgndmFyaWFudCcpCjx8ZmltX2hvbGV8PgogICAgZGVmIGFjdHVhbF90eXBlKHNlbGYsIHR5cGVfcmVnaXN0cnk6IFR5cGVSZWdpc3RyeSk6CiAgICAgICAgcmV0dXJuIHZhcmlhbnRfZWxlbWVudF90eXBlKHNlbGYudHlwZV9kZWYsIHR5cGVfcmVnaXN0cnkpCgogICAgZGVmIGdldF9pbmNsdWRlX2hlYWRlcnMoc2VsZiwgX3R5cGVfcmVnaXN0cnk6IFR5cGVSZWdpc3RyeSk6CiAgICAgICAgcmV0dXJuIFsidmFyaWFudCJdCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIHdyaXRlX2hlYWRlcihzZWxmLCBidWZmZXI6IExpbmVCdWZmZXIsIHR5cGVfcmVnaXN0cnk6IFR5cGVSZWdpc3RyeSkgLT4gTm9uZToKICAgICAgICBidWZmZXIuYXBwZW5kKGYidXNpbmcge3NlbGYudHlwZV9kZWYudHlwZV9uYW1lfSA9IHtzZWxmLmFjdHVhbF90eXBlKHR5cGVfcmVnaXN0cnkpfTsiKQoKPHxmaW1fZW5kfD4="]
["d1f2c39f5dc0a320ae8eb87e6b7fd4332dac2c54-1","d1f2c39f5dc0a320ae8eb87e6b7fd4332dac2c54","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKCgpkZWYgcmV2ZXJzZV9zdHJpbmcoc3RyaW5nOiBzdHIpIC0+IHN0cjoKICAgICIiIgogICAgUmV2ZXJzZXMgYSBzdHJpbmcgdXNpbmcgYSBzdGFjay4KCiAgICA6cGFyYW0gc3RyaW5nOiBpcyB0aGUgc3RyaW5nIHRvIGJlIHJldmVyc2VkLgogICAgOnJhaXNlIEF0dHJpYnV0ZUVycm9yOiBpZiB0aGUgaW5wdXQgaXMgTm9uZS4KICAgIDpyZXR1cm46IGlzIHRoZSByZXZlcnNlZCBzdHJpbmcuCiAgICAiIiIKICAgIGlmIHN0cmluZyBpcyBOb25lOgogICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJUaGUgaW5wdXQgY2Fubm90IGJlIG51bGwuIikKCiAgICBzdGFjazogTGlzdFtzdHJdID0gW10KCiAgICBmb3IgbGV0dGVyIGluIHN0cmluZzoKICAgICAgICBzdGFjay5hcHBlbmQobGV0dGVyKQoKICAgIHJldmVyc2VkID0gIiIKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHdoaWxlIG5vdCBpc19lbXB0eShzdGFjayk6CiAgICAgICAgcmV2ZXJzZWQgKz0gc3RhY2sucG9wKCkKCiAgICByZXR1cm4gcmV2ZXJzZWQKPHxmaW1fZW5kfD4="]
["d1f2c9d0b6c6650a1e66d7c3b53e1cb78d5407ed-1","d1f2c9d0b6c6650a1e66d7c3b53e1cb78d5407ed","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgpjbGFzcyBSZXdhcmRIYW5kbGVyKCk6CiAgICAnJycKICAgIENhbGN1bGF0ZXMgcmV3YXJkcyBmb3IgZW52aXJvbm1lbnQuCiAgICAnJycKICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXdhcmRfcmVkLCByZXdhcmRfZ3JlZW4sIHJld2FyZF90aWNrKToKICAgICAgICBzZWxmLnJld2FyZF9yZWQgPSByZXdhcmRfcmVkCiAgICAgICAgc2VsZi5yZXdhcmRfZ3JlZW4gPSByZXdhcmRfZ3JlZW4KICAgICAgICBzZWxmLnJld2FyZF90aWNrID0gcmV3YXJkX3RpY2sKCiAgICBkZWYgdGljayhzZWxmLCBjb2xpc3Npb25fb2JqZWN0KToKICAgICAgICBpZiBjb2xpc3Npb25fb2JqZWN0ICE9IE5vbmU6CiAgICAgICAgICAgIGlmIGNvbGlzc2lvbl9vYmplY3QgPT0gJ3InOgogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucmV3YXJkX3JlZAogICAgICAgICAgICBlbGlmIGNvbGlzc2lvbl9vYmplY3QgPT0gJ2cnOgogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucmV3YXJkX2dyZWVuCiAgICAgICAgCiAgICAgICAgcmV0dXJuIHNlbGYucmV3YXJkX3RpY2sKPHxmaW1fc3VmZml4fD4KCmZyb20gdHlwaW5nIGltcG9ydCBDb2xsZWN0aW9uCgoKPHxmaW1fZW5kfD4="]
["c9b14ca5cc963db917eeb5162c7a2d7ece614997-1","c9b14ca5cc963db917eeb5162c7a2d7ece614997","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgojCiMKIyAgICBzaW1pbGFyIHRvIHRlc3RfRk0sIGJ1dCBpbiB0aGUgb2ZmaWNpYWwgQURNSVQgZW52aXJvbm1lbnQKIyAgICB0aGVzZSBhcmUgbWVhbnQgdG8gYmUgYWJsZSB0byBydW4gd2l0aG91dCBDQVNBLCBpZS4gaW4gYQojICAgIHZhbmlsbGEgcHl0aG9uIGVudmlyb25tZW50CiMKIyAgICB5b3UgbWlnaHQgbmVlZCB0byBydW4KIyAgICAgICAgICBybSAuLi9hdC9fX2luaXRfXy5weSAuLi9hdC9fX2luaXRfXy5weWMgOyB0b3VjaCAuLi9hdC9fX2luaXRfXy5weQojICAgIGJlZm9yZSwgYW5kIHJlc2V0IHRoaXMgZmlsZSB1c2luZwojICAgICAgICAgIGR0ZEdlbmVyYXRvcgojICAgIGlmIENBU0Egc2l0cyBpbiB0aGUgd2F5CgojIHBlcmZvcm1hbmNlIChvbiBuZW1vMik6ICAgICAgICAgICAgICAgIHRpbWUgdGVzdF9GbG93X21hbnkucHkgPiAvZGV2L251bGwKIyAgICAgICAgICAgIHRvdWNoPUZhbHNlICAgICAgICAgICAgICAgICAgICAgICAgdG91Y2g9VHJ1ZQojICAgICAxMDAgICAgLi4uCiMgICAgMTAwMCAgICAxLjQyMXUgMC4xNTlzIDA6MDEuNTkgOTguNyUgICAgICAgIDEuNTk2dSAgMi43MDNzIDA6MDQuMzEgICAgICAgICAocnVuIGFmdGVyIHRoZSBsb29wKQojICAgICAgICAgICAgMS41NDd1IDAuMjAzcyAwOjAxLjc1IDk5LjQlICAgICAgICAyLjE5NXUgIDIuODg1cyAwOjA1LjEyIDk5LjAlICAgKHJ1biBpbnNpZGUgbG9vcCkKIyAgIDEwMDAwICAgNDEuMjI1dSAyLjAxMnMgMDo0My40MiA5OS41JSAgICAgICA0NC44MjJ1IDM1LjU3NXMgMToyMC44OSA5OS4zJSAgIChydW4gYWZ0ZXIgdGhlIGxvb3ApCQojICAgICAgICAgICA3OS45MDd1IDIuMDE1cyAxOjIyLjA5IDk5LjclICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ1biBpbnNpZGUgbG9vcCkKIwojICgxMDAwMCxUcnVlKSBpcyB0aGUgZGVmYXVsdCBiZW5jaCwgdGh1cyBuZW1vMiBnb2VzIGluIDE6MjEKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZmVybm8gZ29lcyBpbiAxOjUzICh5aXBlcywgYW5kIC9kZXYvc2htIGRpZG4ndCBoZWxwKQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmFydSAgICAgICAgIDE6NTIKIwojIFBlcmhhcHMgYSBwdXp6bGUgcmVtYWluaW5nOgojIDQ0LjYxN3UgMzIuNTgycyAxOjE4LjI5IDk4LjUlCTArMGsgNDAwMCsxMjg1MjA4aW8gMHBmKzB3ICAgICAgICB3aXRoIGpwcmV2PWogcmVzZXQgZm9yZ290dGVuCiMgMTAuOTAwdSAzNy4wNjNzIDA6NDkuMDAgOTcuOCUJMCswayA5MTc2KzE2NTYzMmlvIDQ3cGYrMHcgICAgICAgIHByb3BlciBzZXJpYWwgb3BlcmF0aW9uCiMgNDUuODcwdSAzNi44ODRzIDE6MjQuMDQgOTguNCUJMCswayAgNTQ0KzEyODUyMDhpbyA3cGYrMHcKIwojIE9uIE1hciAxMSB0aGUgYmVuY2htYXJrIHJhbiBmYXN0ZXI6CiMgMTAwMDAgICAgICA4LjIwNHUgMC45MjdzIDA6MDkuMTggOTkuMyUgICAgICAgMTEuMDIydSA0Mi43MzBzIDA6NTQuMDkgOTkuMyUgICAgb3Muc3lzdGVtKCkKIyAgICAgICAgICAgIDguMTExdSAwLjkzNXMgMDowOS4wNyA5OS42JSAgICAgICAgOC4wMzR1IDEuMjAxcyAwOjA5LjI3IDk5LjUlICAgICBzZWxmLnRvdWNoKCkKaW1wb3J0IHN5cywgb3MKCmZyb20gYWRtaXQuQVQgaW1wb3J0IEFUCmltcG9ydCBhZG1pdC5BZG1pdCBhcyBhZG1pdApmcm9tIGFkbWl0LmF0LkZpbGVfQVQgaW1wb3J0IEZpbGVfQVQKZnJvbSBhZG1pdC5hdC5GbG93MTFfQVQgIGltcG9ydCBGbG93MTFfQVQKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbiA9IDEwCiAgICB0b3VjaCA9IFRydWUKICAgIGV4aXN0ID0gVHJ1ZQoKICAgIHByaW50ICJGbG93MTFfbWFueToiCgogICAgIyAgcGljayB3aGVyZSBhZG1pdCB3aWxsIGRvIGl0cyB3b3JrCiAgICBpZiBsZW4oc3lzLmFyZ3YpID4gMToKICAgICAgICAjIHVzZSB0aGUgYXJndW1lbnQgYXMgYSAobmV3IG9yIGV4aXN0aW5nKSBkaXJlY3RvcnkgCiAgICAgICAgYSA9IGFkbWl0LkFkbWl0KHN5cy5hcmd2WzFdKQogICAgZWxzZToKICAgICAgICAjIHVzZSB0aGUgY3VycmVudCBkaXJlY3RvcnkKICAgICAgICBhID0gYWRtaXQuQWRtaXQoKQoKICAgIHByaW50ICJhLm5ldzogIixhLm5ldwoKICAgIGkgPSByYW5nZShuKzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkdW1teSBhcnJheSB0byBob2xkIHRoZSB0YXNrIElEJ3MKCiAgICBpWzBdID0gYS5hZGR0YXNrKCBGaWxlX0FUKCkgKSAgICAgICAgICAgICMgZmlyc3QgdGFzazogRmlsZV9BVCBib290c3RyYXAKICAgIGFbaVswXV0uc2V0a2V5KCdmaWxlJywnRmxvdzExLTAuZGF0JykKICAgIGFbaVswXV0uc2V0a2V5KCd0b3VjaCcsdG91Y2gpCiAgICBhW2lbMF1dLnNldGtleSgnZXhpc3QnLEZhbHNlKQogICAganByZXYgPSBpWzBdCgogICAgZm9yIGogaW4gcmFuZ2UoMSxuKzEpOiAgICAgICAgICAgICAgICAgICAjIGxvb3Agb3ZlciBhIGNoYWluIG9mIEZsb3cxMV9BVCdzCiAgICAgICAgaVtqXSA9IGEuYWRkdGFzayggRmxvdzExX0FUKCksIFsoanByZXYsMCldICkKICAgICAgICBhW2lbal1dLnNldGtleSgnZmlsZScsJ0Zsb3cxMS0lZC5kYXQnICVqKQogICAgICAgIGFbaVtqXV0uc2V0a2V5KCd0b3VjaCcsdG91Y2gpCiAgICAgICAgIyBjb21tZW50IG91dCB0aGUgbmV4dCBsaW5lIGZvciB0aGUgcHV6emxpbmcgYmVoYXZpb3IKICAgICAgICBqcHJldiA9IGoKICAgICAgICAjIGEucnVuKCkKICAgICAgICAjCiAgICBwcmludCAiUlVOIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBhLnJ1bigpCiAgICAjCiAgICBwcmludCAiV1JJVEUiCiAgICBhLndyaXRlKCkKPHxmaW1fZW5kfD4="]
["9db3f6097802f59222097763bb7ae6d3c7789d0c-1","9db3f6097802f59222097763bb7ae6d3c7789d0c","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBJbnRlbCBDb3Jwb3JhdGlvbgojIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCgoiIiIgVGVzdCBmb3IgRG94eWdlbiBiYXNlZCBkb2N1bWVudGF0aW9uIGdlbmVyYXRpb24uCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KUmVmZXIgdG8gY29uZnRlc3QucHkgb24gdGhlIHRlc3QgdXNhZ2UuCiIiIgoKCjx8ZmltX2VuZHw+"]
["24380963614c4b7007962af73a5b036b16567c22-2","24380963614c4b7007962af73a5b036b16567c22","PHxmaW1fcHJlZml4fD4KZnJvbSBjb2xvcmFtYSBpbXBvcnQgaW5pdCwgRm9yZQppbml0KCkKCnByaW50KCIiIiAgICAgICBUSidzIFRlc3RpbmcgU3VpdGUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIiIiKQoKZGVmIHJldHVybkNoZWNrKHRlc3RGdW5jLCB3YW50ZWRPdXRwdXQpOgogICAgcmVzdWx0ID0gdGVzdEZ1bmMoKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBpZiBzdHIocmVzdWx0KSA9PSBzdHIod2FudGVkT3V0cHV0KToKICAgICAgICBwcmludChGb3JlLkdSRUVOICsgIlRlc3QgaGFzIHBhc3NlZCAtICIgKyBzdHIodGVzdEZ1bmMoKSkgKyAiID0gIiArIHN0cih3YW50ZWRPdXRwdXQpKQogICAgZWxzZToKICAgICAgICBwcmludChGb3JlLlJFRCArICJUZXN0IGhhcyBmYWlsZWQgLSAiICsgc3RyKHRlc3RGdW5jKCkpICsgIiAhPSAiICsgc3RyKHdhbnRlZE91dHB1dCkpCjx8ZmltX2VuZHw+"]
["8899f231a22b1bdf4ca642426fb7dd12d52b74be-5","8899f231a22b1bdf4ca642426fb7dd12d52b74be","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2xvY2FsL2Jpbi9weXRob24zLjEwCmltcG9ydCBvcywgc3lzLCByZSwgY2dpLCBjZ2l0YiwganNvbiwgaW8KaW1wb3J0IHlvdXR1YmVfZGwKaW1wb3J0IG5pY29uaWNvX2RsCgpjZ2l0Yi5lbmFibGUoKQoKc3lzLnN0ZG91dCA9IGlvLlRleHRJT1dyYXBwZXIoc3lzLnN0ZG91dC5idWZmZXIsIGVuY29kaW5nPSJ1dGYtOCIpCnByaW50KCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcbiIpCnByaW50KCkKZm9ybSA9IGNnaS5GaWVsZFN0b3JhZ2UoKQoKZGVmIGdldFVybCh1cmwpOgogICAgaWYgc2l0ZVR5cGVDaGVjayh1cmwpID09ICJ5dCI6CiAgICAgICAgaWYgbm90IHBsYXlsaXN0Q2hlY2sodXJsKToKICAgICAgICAgICAgd2l0aCB5b3V0dWJlX2RsLllvdXR1YmVETChkaWN0KGZvcmNldXJsPVRydWUsIHF1aWV0PVRydWUpKSBhcyB5ZGw6CiAgICAgICAgICAgICAgICByID0geWRsLmV4dHJhY3RfaW5mbyh1cmwsIGRvd25sb2FkPUZhbHNlKQogICAgICAgICAgICAgICAgbWVkaWFfdXJsID0gclsnZm9ybWF0cyddWy0xXVsndXJsJ10KICAgICAgICAgICAgICAgIHJldHVybiBtZWRpYV91cmwKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gKE5vbmUsICJQTEFZTElTVF9FUlJPUiIpCiAgICBlbGlmIHNpdGVUeXBlQ2hlY2sodXJsKSA9PSAibmMiOgogICAgICAgIGlmIG5vdCBwbGF5bGlzdENoZWNrKHVybCk6CiAgICAgICAgICAgIHdpdGggbmljb25pY29fZGwuTmljb05pY29WaWRlbyh1cmwpIGFzIG5pY286CiAgICAgICAgICAgICAgICBtZWRpYV91cmwgPSBuaWNvLmdldF9kb3dubG9hZF9saW5rKCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgcmV0dXJuIG1lZGlhX3VybAo8fGZpbV9lbmR8Pg=="]
["881f3dac5993dc4256be57ea7491b25180488d62-2","881f3dac5993dc4256be57ea7491b25180488d62","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKaW1wb3J0IG9zCkVMRklOREVSX1JPT1QgPSB1JyVzJyVvcy5wYXRoLmFic3BhdGgoc2V0dGluZ3MuTUVESUFfUk9PVCkKRUxGSU5ERVJfVVJMID0gdSdodHRwOi8vbG9jYWxob3N0OjgwMC9tZWRpYS8nCkVMRklOREVSX1RIVU1CID0gb3MucGF0aC5qb2luKEVMRklOREVSX1JPT1QsICd0bWInKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CkVMRklOREVSX1RIVU1CX1VSTCA9IHUnJXMlcy8nJShFTEZJTkRFUl9VUkwsICd0bWInKQo8fGZpbV9lbmR8Pg=="]
["74d1c9762a1e9a3ba1652a37b1fa7eb43342021e-1","74d1c9762a1e9a3ba1652a37b1fa7eb43342021e","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgpmcm9tIFZJU0FfRHJpdmVyIGltcG9ydCBWSVNBX0RyaXZlcgoKY2xhc3MgRHJpdmVyKFZJU0FfRHJpdmVyKToKICAgICIiIiBUaGUgRFMgMzQ1IGRyaXZlciByZS1pbXBsZW1lbnRzIHRoZSBWSVNBIGRyaXZlciBmb3IgdGFraW5nIGNhcmUgb2YgdW5pdHMiIiIKCiAgICBkZWYgcGVyZm9ybUdldFZhbHVlKHNlbGYsIHF1YW50LCBvcHRpb25zPXt9KToKICAgICAgICAiIiJQZXJmb3JtIHRoZSBHZXQgVmFsdWUgaW5zdHJ1bWVudCBvcGVyYXRpb24iIiIKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICMgc3RyaXAgIlZQIiBmcm9tIHN0cmluZyAKICAgICAgICAgICAgc0RhdGEgPSAgc0Fucy5zcGxpdCgnVlAnKVswXQogICAgICAgICAgICAjIHJldHVybiBmbG9hdAogICAgICAgICAgICByZXR1cm4gZmxvYXQoc0RhdGEpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyBmb3IgYWxsIG90aGVyIGNhc2VzLCBqdXN0IHJ1biB0aGUgZ2VuZXJpYyB2aXNhIGRyaXZlcgogICAgICAgICAgICByZXR1cm4gVklTQV9Ecml2ZXIucGVyZm9ybUdldFZhbHVlKHNlbGYsIHF1YW50LCBvcHRpb25zPW9wdGlvbnMpCgo8fGZpbV9zdWZmaXh8PgogICAgICAgICMgcGVyZm9ybSBzcGVjaWFsIGdldFZhbHVlIGZvciBhbXBsaXR1ZGUgY29tbWFuZAogICAgICAgIGlmIHF1YW50Lm5hbWUgPT0gJ0FtcGxpdHVkZSc6CiAgICAgICAgICAgICMgZ2V0IHZvbHRhZ2Ugc3RyaW5nIGZyb20gaW5zdHJ1bWVudAogICAgICAgICAgICBzQW5zID0gc2VsZi5hc2tBbmRMb2coJ0FNUEw/IFZQJykuc3RyaXAoKQo8fGZpbV9lbmR8Pg=="]
["242b128755b78b7f0f4f8d5567379e1162077502-3","242b128755b78b7f0f4f8d5567379e1162077502","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CgojVXNhZG8gcGFyYSBwbG90YXIgM2QgZW0gZmlnLmdjYQpmcm9tIG1wbF90b29sa2l0cy5tcGxvdDNkIGltcG9ydCBBeGVzM0QKCgpkZWYgcGxvdChKKToKICAgICMgVmFsb3JlcyBkZSB0aGV0YTAgZSB0aGV0YTEgaW5mb3JtYWRvcyBubyBlbnVuY2lhZG8gZG8gdHJhYmFsaG8KICAgIHRoZXRhMCA9IG5wLmFyYW5nZSgtMTAsIDEwLCAwLjAxKQogICAgdGhldGExID0gbnAuYXJhbmdlKC0xLCA0LCAwLjAxKQoKICAgICMgQ29tYW5kb3MgbmVjZXNzYXJpb3MgcGFyYSBvIG1hdHBsb3RsaWIgcGxvdGFyIGVtIDNECiAgICBmaWcgPSBwbHQuZmlndXJlKCkKICAgIGF4ID0gZmlnLmdjYShwcm9qZWN0aW9uPSczZCcpCgogICAgIyBQbG90YW5kbyBvIGdyYWZpY28gZGUgc3VwZXJmaWNpZQogICAgdGhldGEwLCB0aGV0YTEgPSBucC5tZXNoZ3JpZCh0aGV0YTAsIHRoZXRhMSkKICAgIHN1cmYgPSBheC5wbG90X3N1cmZhY2UodGhldGEwLCB0aGV0YTEsIEopCiAgICBwbHQueGxhYmVsKCd0aGV0YV8wJykKICAgIHBsdC55bGFiZWwoJ3RoZXRhXzEnKQogICAgcGx0LnNob3coKQoKICAgIGZpbGVuYW1lID0gJ3RhcmdldC9wbG90MS4zLjIucG5nJwogICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguZGlybmFtZShmaWxlbmFtZSkpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5kaXJuYW1lKGZpbGVuYW1lKSkKCjx8ZmltX2VuZHw+"]
["2492dbdd578012ee59972aba15c6ec442ded4c2c-3","2492dbdd578012ee59972aba15c6ec442ded4c2c","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbiwgYWJzb2x1dGVfaW1wb3J0LCBkaXZpc2lvbgoKaW1wb3J0IHVuaXR0ZXN0MiBhcyB1bml0dGVzdApmcm9tIG1vY2sgaW1wb3J0IE1hZ2ljTW9jaywgcGF0Y2gsIGNhbGwKCmZyb20gcmRzX2xvZ19jYXQuc2VuZGVyIGltcG9ydCAoY2h1bmtzLCBzZW5kX2luX2JhdGNoZXMsIHNlbmQpCgoKY2xhc3MgU2VuZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CiAgICAgICAgcGFzcwoKICAgIGRlZiB0ZXN0X2NodW5rc193aXRoX2FycmF5KHNlbGYpOgogICAgICAgIGluX2FycmF5ID0gWzEsIDIsIDMsIDQsIDVdCiAgICAgICAgcmVzdWx0ID0gY2h1bmtzKGluX2FycmF5LCAyKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXN1bHQpLCBbWzEsIDJdLCBbMywgNF0sIFs1XV0pCgogICAgZGVmIGl0ZXN0X2NodW5rc193aXRoX2dlbmVyYXRvcihzZWxmKToKICAgICAgICBnZW5lcmF0b3IgPSAoaSBmb3IgaSBpbiAoMSwgMiwgMywgNCwgNSkpCiAgICAgICAgcmVzdWx0ID0gY2h1bmtzKGdlbmVyYXRvciwgMikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmVzdWx0KSwgW1sxLCAyXSwgWzMsIDRdLCBbNV1dKQoKICAgIEBwYXRjaCgncmRzX2xvZ19jYXQuc2VuZGVyLnNlbmQnKQogICAgZGVmIHRlc3Rfc2VuZF9pbl9iYXRjaGVzKHNlbGYsIHNlbmQpOgogICAgICAgIHNlbmRfaW5fYmF0Y2hlcyhbMSwgMiwgM10sICdmb28nLCAyKQogICAgICAgIGV4cGVjdGVkID0gW2NhbGwoWzEsIDJdLCAnZm9vJyksIGNhbGwoWzNdLCAnZm9vJyldCiAgICAgICAgc2VuZC5hc3NlcnRfaGFzX2NhbGxzKGV4cGVjdGVkKQoKICAgIGRlZiB0ZXN0X3NlbmRfcmVzZW5kc193aGVuX3Rocm91Z2hwdXRfZXhjZWVkZWQoc2VsZik6CiAgICAgICAgbW9ja19raW5lc2lzID0gTWFnaWNNb2NrKCkKICAgICAgICBtb2NrX2tpbmVzaXMucHV0X3JlY29yZHMuc2lkZV9lZmZlY3QgPSBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICdGYWlsZWRSZWNvcmRDb3VudCc6IDEsCiAgICAgICAgICAgICAgICAnUmVjb3Jkcyc6IFsKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICdTZXF1ZW5jZU51bWJlcic6ICdzdHJpbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAnU2hhcmRJZCc6ICdzdHJpbmcnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAnRXJyb3JDb2RlJzogJ1Byb3Zpc2lvbmVkVGhyb3VnaHB1dEV4Y2VlZGVkRXhjZXB0aW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgJ0Vycm9yTWVzc2FnZSc6ICdSYXRlIGV4Y2VlZGVkIGZvciBzaGFyZCBzaGFyZElkLTAwMDAwMDAwMDAwMSBpbiBzdHJlYW0uLi4nCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICdGYWlsZWRSZWNvcmRDb3VudCc6IDAsCiAgICAgICAgICAgICAgICAnUmVjb3Jkcyc6IFsKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICdTZXF1ZW5jZU51bWJlcic6ICdzdHJpbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAnU2hhcmRJZCc6ICdzdHJpbmcnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH1dCgogICAgICAgIHNlbmQoW3snRGF0YSc6ICdmb28nfSwgeydEYXRhJzogJ2Jhcid9XSwgInN0cmVhbV9uYW1lIiwgbW9ja19raW5lc2lzKQoKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2tfa2luZXNpcy5wdXRfcmVjb3Jkcy5jYWxsX2NvdW50LCAyKQogICAgICAgIG1vY2tfa2luZXNpcy5wdXRfcmVjb3Jkcy5hc3NlcnRfYW55X2NhbGwoCiAgICAgICAgICAgIFN0cmVhbU5hbWU9InN0cmVhbV9uYW1lIiwgUmVjb3Jkcz1beydEYXRhJzogJ2Zvbyd9LCB7J0RhdGEnOiAnYmFyJ31dKQogICAgICAgIG1vY2tfa2luZXNpcy5wdXRfcmVjb3Jkcy5hc3NlcnRfYW55X2NhbGwoCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgU3RyZWFtTmFtZT0ic3RyZWFtX25hbWUiLCBSZWNvcmRzPVt7J0RhdGEnOiAnYmFyJ31dKQoKPHxmaW1fZW5kfD4="]
["88a26c9c4a9d1617bbd216ca3d14a72401265628-3","88a26c9c4a9d1617bbd216ca3d14a72401265628","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG1hdGgKCmZpbGUgPSBwZC5yZWFkX2Nzdigndm9jYWJ1bGFyeS5jc3YnLCBzZXA9JywnKQppZHMgPSBmaWxlWydJbmRleCddLnZhbHVlcyAgIyBwcmV2aW91cyBsYWJlbCBpZAp2MSA9IGZpbGVbJ1ZlcnRpY2FsMSddLnZhbHVlcyAgIyBjYXRlZ29yaWVzIGJlbG9uZwoKIyBjb3VudCBhbGwgY2F0ZWdvcmllcwpjYXRlZ29yeSA9IFtdCmZvciB2IGluIHYxOgogICAgaWYgc3RyKHYpICE9ICduYW4nIGFuZCBub3QgKHYgaW4gY2F0ZWdvcnkpOgogICAgICAgIGNhdGVnb3J5LmFwcGVuZCh2KQoKY2F0ZXMgPSBsZW4oY2F0ZWdvcnkpICAjIG51bSBvZiBjYXRlZ29yaWVzLDI1IGluIGZhY3QKcHJpbnQoY2F0ZXMpCgojIGxpc3QgZm9yIGVhY2ggY2F0ZWdvcnkKZ3JvdXAgPSBucC5uZGFycmF5KGNhdGVzLCBkdHlwZT1saXN0KQpmb3IgbCBpbiByYW5nZShjYXRlcyk6CiAgICBncm91cFtsXSA9IFtdCgojIGFkZCBsYWJlbCBpZCB0byBlYWNoIGNhdGVnb3J5CmZvciBpIGluIHJhbmdlKGxlbihpZHMpKToKICAgIGZvciBqIGluIHJhbmdlKGNhdGVzKToKICAgICAgICBpZiB2MVtpXSA9PSBjYXRlZ29yeVtqXToKICAgICAgICAgICAgZ3JvdXBbal0uYXBwZW5kKGkpCgo8fGZpbV9ob2xlfD4KICAgIGNhdGVfbGVuLmFwcGVuZChsZW4oZ3JvdXBbal0pKQogICAgcHJpbnQoY2F0ZWdvcnlbal0sIGxlbihncm91cFtqXSkpCgpkZiA9IHBkLkRhdGFGcmFtZS5mcm9tX2RpY3QoeydDYXRlZ29yeSc6IGNhdGVnb3J5LCAnTGFiZWxfbnVtJzogY2F0ZV9sZW59KQpkZi50b19jc3YoJ0NhdGVnb3J5LmNzdicsIGhlYWRlcj1UcnVlLCBpbmRleD1GYWxzZSwgY29sdW1ucz1bJ0NhdGVnb3J5JywgJ0xhYmVscyddKQoKI21hcHBpbmcgdHVwbGUKdHUgPSBbXQpmb3IgaSBpbiByYW5nZSgzODYyKToKICAgIHR1LmFwcGVuZChbbmV3X3RvX3ByZXZbaV0sIGldKQp0dSA9IG5wLmFzYXJyYXkodHUpCgpkZiA9IHBkLkRhdGFGcmFtZS5mcm9tX2RpY3QoeydPbGRMYWJlbCc6IHR1WzosIDBdLCAnTmV3TGFiZWwnOiB0dVs6LCAxXX0pCmRmLnRvX2NzdignTWFwcGluZ19vdXQuY3N2JywgaGVhZGVyPVRydWUsIGluZGV4PUZhbHNlLCBjb2x1bW5zPVsnT2xkTGFiZWwnLCAnTmV3TGFiZWwnXSkKCiNzb3J0IGFjY29yZGluZyB0byBvbGQgbGFiZWwKdHUgPSBzb3J0ZWQodHUsIGtleT1sYW1iZGEgeDogeFswXSkKCmRmID0gcGQuRGF0YUZyYW1lLmZyb21fZGljdCh7J09sZExhYmVsJzogdHVbOiwgMF0sICdOZXdMYWJlbCc6IHR1WzosIDFdfSkKZGYudG9fY3N2KCdNYXBwaW5nX2luLmNzdicsIGhlYWRlcj1UcnVlLCBpbmRleD1GYWxzZSwgY29sdW1ucz1bJ09sZExhYmVsJywgJ05ld0xhYmVsJ10pCjx8ZmltX3N1ZmZpeHw+CiMgY2F0ZWdvcmllcyBhcnJhbmdlZCBvbmUgYnkgb25lCm5ld190b19wcmV2ID0gW10KY2F0ZV9sZW49W10KZm9yIGogaW4gcmFuZ2UoY2F0ZXMpOgo8fGZpbV9lbmR8Pg=="]
["9ddb4973f4322f9669d4ebd211118a35444d04cd-4","9ddb4973f4322f9669d4ebd211118a35444d04cd","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiNodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMTUzNjc2NC9ob3ctdG8tZml4LWF0dGVtcHRlZC1yZWxhdGl2ZS1pbXBvcnQtaW4tbm9uLXBhY2thZ2UtZXZlbi13aXRoLWluaXQtcHkKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJyBhbmQgX19wYWNrYWdlX18gaXMgTm9uZToKICAgIGZyb20gb3MgaW1wb3J0IHN5cywgcGF0aAogICAgc3lzLnBhdGguYXBwZW5kKHBhdGguZGlybmFtZShwYXRoLmRpcm5hbWUocGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpKQoKaW1wb3J0IGhhbmR5aGF4ZQppbXBvcnQgc3lzCgpoYW5keWhheGUubWFrZV9lbnYoIi12IC1oYXhlPWxhdGVzdCIsIFsKIyAgICAiaGF4ZWxpYiBpbnN0YWxsIGZvcm1hdCIsCiMgICAgImNvZGUgLS1pbnN0YWxsLWV4dGVuc2lvbiBuYWRha28udnNoYXhlIiwKIyAgICAiY29kZSAtLXVuaW5zdGFsbC1leHRlbnNpb24gdnNoYXhlLmhheGUtZXh0ZW5zaW9uLXBhY2siLAogICAgImNvZGUgLS1pbnN0YWxsLWV4dGVuc2lvbiB2c2hheGUuaGF4ZS1leHRlbnNpb24tcGFjayIsCiAgICAiY29kZSAuIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cl0pCgo8fGZpbV9lbmR8Pg=="]
["9d92444345beac581d73403f6a83af70dfc85950-2","9d92444345beac581d73403f6a83af70dfc85950","PHxmaW1fcHJlZml4fD4KIyAtKi0gZW5jb2Rpbmc6IHV0Zi04IC0qLQoKZnJvbSAuLmJhc2ljX2dhbWUgaW1wb3J0IEJhc2ljR2FtZQoKCmNsYXNzIEtpbmdkb21Db21lRGVsaXZlcmFuY2VHYW1lKEJhc2ljR2FtZSk6CiAgICBOYW1lID0gIktpbmdkb20gQ29tZSBEZWxpdmVyYW5jZSBTdXBwb3J0IFBsdWdpbiIKICAgIEF1dGhvciA9ICJTaWxlbmNlcjcxMSIKICAgIFZlcnNpb24gPSAiMS4wLjAiCgogICAgR2FtZU5hbWUgPSAiS2luZ2RvbSBDb21lOiBEZWxpdmVyYW5jZSIKICAgIEdhbWVTaG9ydE5hbWUgPSAia2luZ2RvbWNvbWVkZWxpdmVyYW5jZSIKICAgIEdhbWVOZXh1c05hbWUgPSAia2luZ2RvbWNvbWVkZWxpdmVyYW5jZSIKICAgIEdhbWVOZXh1c0lkID0gMjI5OAogICAgR2FtZVN0ZWFtSWQgPSBbMzc5NDMwXQogICAgR2FtZUdvZ0lkID0gWzE3MTkxOTg4MDNdCjx8ZmltX2hvbGV8PgogICAgR2FtZVNhdmVzRGlyZWN0b3J5ID0gIiVVU0VSUFJPRklMRSUvU2F2ZWQgR2FtZXMva2luZ2RvbWNvbWUvc2F2ZXMiCgogICAgZGVmIGluaUZpbGVzKHNlbGYpOgogICAgICAgIHJldHVybiBbImN1c3RvbS5jZmciLCAic3lzdGVtLmNmZyIsICJ1c2VyLmNmZyJdCjx8ZmltX3N1ZmZpeHw+CiAgICBHYW1lQmluYXJ5ID0gImJpbi9XaW42NC9LaW5nZG9tQ29tZS5leGUiCiAgICBHYW1lRGF0YVBhdGggPSAibW9kcyIKICAgIEdhbWVTYXZlRXh0ZW5zaW9uID0gIndocyIKICAgIEdhbWVEb2N1bWVudHNEaXJlY3RvcnkgPSAiJUdBTUVfUEFUSCUiCjx8ZmltX2VuZHw+"]
["9d92444345beac581d73403f6a83af70dfc85950-4","9d92444345beac581d73403f6a83af70dfc85950","PHxmaW1fcHJlZml4fD4KIyAtKi0gZW5jb2Rpbmc6IHV0Zi04IC0qLQoKZnJvbSAuLmJhc2ljX2dhbWUgaW1wb3J0IEJhc2ljR2FtZQoKCmNsYXNzIEtpbmdkb21Db21lRGVsaXZlcmFuY2VHYW1lKEJhc2ljR2FtZSk6CiAgICBOYW1lID0gIktpbmdkb20gQ29tZSBEZWxpdmVyYW5jZSBTdXBwb3J0IFBsdWdpbiIKICAgIEF1dGhvciA9ICJTaWxlbmNlcjcxMSIKICAgIFZlcnNpb24gPSAiMS4wLjAiCgogICAgR2FtZU5hbWUgPSAiS2luZ2RvbSBDb21lOiBEZWxpdmVyYW5jZSIKICAgIEdhbWVTaG9ydE5hbWUgPSAia2luZ2RvbWNvbWVkZWxpdmVyYW5jZSIKICAgIEdhbWVOZXh1c05hbWUgPSAia2luZ2RvbWNvbWVkZWxpdmVyYW5jZSIKICAgIEdhbWVOZXh1c0lkID0gMjI5OAogICAgR2FtZVN0ZWFtSWQgPSBbMzc5NDMwXQogICAgR2FtZUdvZ0lkID0gWzE3MTkxOTg4MDNdCiAgICBHYW1lQmluYXJ5ID0gImJpbi9XaW42NC9LaW5nZG9tQ29tZS5leGUiCiAgICBHYW1lRGF0YVBhdGggPSAibW9kcyIKICAgIEdhbWVTYXZlRXh0ZW5zaW9uID0gIndocyIKICAgIEdhbWVEb2N1bWVudHNEaXJlY3RvcnkgPSAiJUdBTUVfUEFUSCUiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIEdhbWVTYXZlc0RpcmVjdG9yeSA9ICIlVVNFUlBST0ZJTEUlL1NhdmVkIEdhbWVzL2tpbmdkb21jb21lL3NhdmVzIgoKICAgIGRlZiBpbmlGaWxlcyhzZWxmKToKICAgICAgICByZXR1cm4gWyJjdXN0b20uY2ZnIiwgInN5c3RlbS5jZmciLCAidXNlci5jZmciXQo8fGZpbV9lbmR8Pg=="]
["d19ab9796df0fae7393aecf341e4b909558e5ba3-3","d19ab9796df0fae7393aecf341e4b909558e5ba3","PHxmaW1fcHJlZml4fD4KIiIiClJ1bnMgdGhlIHN0cmVhbWxpdCBhcHAuCmBzdHJlYW1saXQgcnVuIGFwcC9tYWluLnB5YAoiIiIKCmltcG9ydCBzdHJlYW1saXQgYXMgc3QKaW1wb3J0IHV0aWxzCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiMgU2V0IHBhZ2UgdGl0bGUgYW5kIGZhdmljb24uCmljb25fdXJsID0gImh0dHBzOi8vdGVjaHMwdWxzLmZpbGVzLndvcmRwcmVzcy5jb20vMjAxOS8xMC9jcm9wcGVkLWxvZ28tMS0xLnBuZz9yZXNpemU9MzIwJTJDMzIwIgpzdC5zZXRfcGFnZV9jb25maWcoCjx8ZmltX2VuZHw+"]
["7783b3fc9b4df2a5f57038e0ec0ce8edc2fa731f-5","7783b3fc9b4df2a5f57038e0ec0ce8edc2fa731f","PHxmaW1fcHJlZml4fD4KIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQojIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluCiMgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCiMgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCiMgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKIyB1bmRlciB0aGUgTGljZW5zZS4KCmZyb20ga2V5c3RvbmVjbGllbnQgaW1wb3J0IGJhc2UKCgpjbGFzcyBSZWdpb24oYmFzZS5SZXNvdXJjZSk6CiAgICAiIiJSZXByZXNlbnRzIGEgQ2F0YWxvZyByZWdpb24uCgogICAgQXR0cmlidXRlczoKICAgICAgICAqIGlkOiBhIHN0cmluZyB0aGF0IGlkZW50aWZpZXMgdGhlIHJlZ2lvbi4KICAgICAgICAqIGRlc2NyaXB0aW9uOiBhIHN0cmluZyB0aGF0IGRlc2NyaWJlcyB0aGUgcmVnaW9uLgogICAgICAgICogcGFyZW50X3JlZ2lvbl9pZDogYSBwcmUtZXhpc3RpbmcgcmVnaW9uIGluIHRoZSBiYWNrZW5kIG9yIGl0cyBJRAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuIEFsbG93cyBmb3IgaGllcmFyY2hpY2FsIHJlZ2lvbiBvcmdhbml6YXRpb24uCiAgICAgICAgKiBlbmFibGVkOiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGVuZHBvaW50IGFwcGVhcnMgaW4gdGhlIGNhdGFsb2cuCiAgICAiIiIKCiAgICBwYXNzCgoKY2xhc3MgUmVnaW9uTWFuYWdlcihiYXNlLkNydWRNYW5hZ2VyKToKICAgICIiIk1hbmFnZXIgY2xhc3MgZm9yIG1hbmlwdWxhdGluZyBJZGVudGl0eSByZWdpb25zLiIiIgoKICAgIHJlc291cmNlX2NsYXNzID0gUmVnaW9uCiAgICBjb2xsZWN0aW9uX2tleSA9ICdyZWdpb25zJwogICAga2V5ID0gJ3JlZ2lvbicKCiAgICBkZWYgY3JlYXRlKHNlbGYsIGlkPU5vbmUsIGRlc2NyaXB0aW9uPU5vbmUsIGVuYWJsZWQ9VHJ1ZSwKICAgICAgICAgICAgICAgcGFyZW50X3JlZ2lvbj1Ob25lLCAqKmt3YXJncyk6CiAgICAgICAgIiIiQ3JlYXRlIGEgcmVnaW9uLgoKICAgICAgICA6cGFyYW0gc3RyIGlkOiB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJlZ2lvbi4gSWYgbm90IHNwZWNpZmllZCBhbgogICAgICAgICAgICAgICAgICAgICAgIElEIHdpbGwgYmUgY3JlYXRlZCBieSB0aGUgc2VydmVyLgogICAgICAgIDpwYXJhbSBzdHIgZGVzY3JpcHRpb246IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgcmVnaW9uLgogICAgICAgIDpwYXJhbSBib29sIGVuYWJsZWQ6IHdoZXRoZXIgdGhlIHJlZ2lvbiBpcyBlbmFibGVkIG9yIG5vdCwgZGV0ZXJtaW5pbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdCBhcHBlYXJzIGluIHRoZSBjYXRhbG9nLgogICAgICAgIDpwYXJhbSBwYXJlbnRfcmVnaW9uOiB0aGUgcGFyZW50IG9mIHRoZSByZWdpb24gaW4gdGhlIGhpZXJhcmNoeS4KICAgICAgICA6dHlwZSBwYXJlbnRfcmVnaW9uOiBzdHIgb3IgOmNsYXNzOmBrZXlzdG9uZWNsaWVudC52My5yZWdpb25zLlJlZ2lvbmAKICAgICAgICA6cGFyYW0ga3dhcmdzOiBhbnkgb3RoZXIgYXR0cmlidXRlIHByb3ZpZGVkIHdpbGwgYmUgcGFzc2VkIHRvIHRoZQogICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci4KCiAgICAgICAgOnJldHVybnM6IHRoZSBjcmVhdGVkIHJlZ2lvbiByZXR1cm5lZCBmcm9tIHNlcnZlci4KICAgICAgICA6cnR5cGU6IDpjbGFzczpga2V5c3RvbmVjbGllbnQudjMucmVnaW9ucy5SZWdpb25gCgogICAgICAgICIiIgogICAgICAgIHJldHVybiBzdXBlcihSZWdpb25NYW5hZ2VyLCBzZWxmKS5jcmVhdGUoCiAgICAgICAgICAgIGlkPWlkLCBkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbiwgZW5hYmxlZD1lbmFibGVkLAogICAgICAgICAgICBwYXJlbnRfcmVnaW9uX2lkPWJhc2UuZ2V0aWQocGFyZW50X3JlZ2lvbiksICoqa3dhcmdzKQoKICAgIGRlZiBnZXQoc2VsZiwgcmVnaW9uKToKICAgICAgICAiIiJSZXRyaWV2ZSBhIHJlZ2lvbi4KCiAgICAgICAgOnBhcmFtIHJlZ2lvbjogdGhlIHJlZ2lvbiB0byBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgc2VydmVyLgogICAgICAgIDp0eXBlIHJlZ2lvbjogc3RyIG9yIDpjbGFzczpga2V5c3RvbmVjbGllbnQudjMucmVnaW9ucy5SZWdpb25gCgogICAgICAgIDpyZXR1cm5zOiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiByZXR1cm5lZCBmcm9tIHNlcnZlci4KICAgICAgICA6cnR5cGU6IDpjbGFzczpga2V5c3RvbmVjbGllbnQudjMucmVnaW9ucy5SZWdpb25gCgogICAgICAgICIiIgogICAgICAgIHJldHVybiBzdXBlcihSZWdpb25NYW5hZ2VyLCBzZWxmKS5nZXQoCiAgICAgICAgICAgIHJlZ2lvbl9pZD1iYXNlLmdldGlkKHJlZ2lvbikpCgogICAgZGVmIGxpc3Qoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICIiIkxpc3QgcmVnaW9ucy4KCiAgICAgICAgOnBhcmFtIGt3YXJnczogYW55IGF0dHJpYnV0ZXMgcHJvdmlkZWQgd2lsbCBmaWx0ZXIgcmVnaW9ucyBvbi4KCiAgICAgICAgOnJldHVybnM6IGEgbGlzdCBvZiByZWdpb25zLgogICAgICAgIDpydHlwZTogbGlzdCBvZiA6Y2xhc3M6YGtleXN0b25lY2xpZW50LnYzLnJlZ2lvbnMuUmVnaW9uYC4KCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHN1cGVyKFJlZ2lvbk1hbmFnZXIsIHNlbGYpLmxpc3QoCiAgICAgICAgICAgICoqa3dhcmdzKQoKICAgIGRlZiB1cGRhdGUoc2VsZiwgcmVnaW9uLCBkZXNjcmlwdGlvbj1Ob25lLCBlbmFibGVkPU5vbmUsCiAgICAgICAgICAgICAgIHBhcmVudF9yZWdpb249Tm9uZSwgKiprd2FyZ3MpOgogICAgICAgICIiIlVwZGF0ZSBhIHJlZ2lvbi4KCiAgICAgICAgOnBhcmFtIHJlZ2lvbjogdGhlIHJlZ2lvbiB0byBiZSB1cGRhdGVkIG9uIHRoZSBzZXJ2ZXIuCiAgICAgICAgOnR5cGUgcmVnaW9uOiBzdHIgb3IgOmNsYXNzOmBrZXlzdG9uZWNsaWVudC52My5yZWdpb25zLlJlZ2lvbmAKICAgICAgICA6cGFyYW0gc3RyIGRlc2NyaXB0aW9uOiB0aGUgbmV3IGRlc2NyaXB0aW9uIG9mIHRoZSByZWdpb24uCiAgICAgICAgOnBhcmFtIGJvb2wgZW5hYmxlZDogZGV0ZXJtaW5pbmcgaWYgdGhlIHJlZ2lvbiBhcHBlYXJzIGluIHRoZSBjYXRhbG9nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0LgogICAgICAgIDpwYXJhbSBwYXJlbnRfcmVnaW9uOiB0aGUgbmV3IHBhcmVudCBvZiB0aGUgcmVnaW9uIGluIHRoZSBoaWVyYXJjaHkuCiAgICAgICAgOnR5cGUgcGFyZW50X3JlZ2lvbjogc3RyIG9yIDpjbGFzczpga2V5c3RvbmVjbGllbnQudjMucmVnaW9ucy5SZWdpb25gCiAgICAgICAgOnBhcmFtIGt3YXJnczogYW55IG90aGVyIGF0dHJpYnV0ZSBwcm92aWRlZCB3aWxsIGJlIHBhc3NlZCB0byBzZXJ2ZXIuCgogICAgICAgIDpyZXR1cm5zOiB0aGUgdXBkYXRlZCByZWdpb24gcmV0dXJuZWQgZnJvbSBzZXJ2ZXIuCiAgICAgICAgOnJ0eXBlOiA6Y2xhc3M6YGtleXN0b25lY2xpZW50LnYzLnJlZ2lvbnMuUmVnaW9uYAoKICAgICAgICAiIiIKICAgICAgICByZXR1cm4gc3VwZXIoUmVnaW9uTWFuYWdlciwgc2VsZikudXBkYXRlKAogICAgICAgICAgICByZWdpb25faWQ9YmFzZS5nZXRpZChyZWdpb24pLAogICAgICAgICAgICBkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbiwKICAgICAgICAgICAgZW5hYmxlZD1lbmFibGVkLAogICAgICAgICAgICBwYXJlbnRfcmVnaW9uX2lkPWJhc2UuZ2V0aWQocGFyZW50X3JlZ2lvbiksCiAgICAgICAgICAgICoqa3dhcmdzKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIGRlbGV0ZShzZWxmLCByZWdpb24pOgogICAgICAgICIiIkRlbGV0ZSBhIHJlZ2lvbi4KCjx8ZmltX2VuZHw+"]
["066162ecad7b2e083d7b2aacaa2087a819661b97-1","066162ecad7b2e083d7b2aacaa2087a819661b97","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KZnJvbSAubW9kZWxzIGltcG9ydCBRdWVzdGlvbiwgQW5zd2VyCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgphZG1pbi5zaXRlLnJlZ2lzdGVyKFF1ZXN0aW9uKQphZG1pbi5zaXRlLnJlZ2lzdGVyKEFuc3dlcikKCjx8ZmltX2VuZHw+"]
["ccbcaf8c978d4999ad70f259d67ceeb1a81f7b3d-2","ccbcaf8c978d4999ad70f259d67ceeb1a81f7b3d","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgpmcm9tIGl0ZXJ0b29scyBpbXBvcnQgY29tYmluYXRpb25zCgp0cmF2aXNfdGVtcGxhdGUgPSAiIiJcCmxhbmd1YWdlOiBnZW5lcmljCgptYXRyaXg6CiAgaW5jbHVkZToKJXMKCmJlZm9yZV9zY3JpcHQ6CiAgLSBhdXRvY29uZgogIC0gLi9jb25maWd1cmUgJHtDT01QSUxFUl9GTEFHUzorIFwKICAgICAgQ0M9IiRDQyAkQ09NUElMRVJfRkxBR1MiIH0gXAogICAgICAkQ09ORklHVVJFX0ZMQUdTCiAgLSBtYWtlIC1qMwogIC0gbWFrZSAtajMgdGVzdHMKCnNjcmlwdDoKICAtIG1ha2UgY2hlY2sKIiIiCgojIFRoZSAnZGVmYXVsdCcgY29uZmlndXJhdGlvbiBpcyBnY2MsIG9uIGxpbnV4LCB3aXRoIG5vIGNvbXBpbGVyIG9yIGNvbmZpZ3VyZQojIGZsYWdzLiAgV2UgYWxzbyB0ZXN0IHdpdGggY2xhbmcsIC1tMzIsIC0tZW5hYmxlLWRlYnVnLCAtLWVuYWJsZS1wcm9mLAojIC0tZGlzYWJsZS1zdGF0cywgYW5kIC0tZGlzYWJsZS10Y2FjaGUuICBUbyBhdm9pZCBhYnVzaW5nIHRyYXZpcyB0aG91Z2gsIHdlCiMgZG9uJ3QgdGVzdCBhbGwgMioqNyA9IDEyOCBwb3NzaWJsZSBjb21iaW5hdGlvbnMgb2YgdGhlc2U7IGluc3RlYWQsIHdlIG9ubHkKIyB0ZXN0IGNvbWJpbmF0aW9ucyBvZiB1cCB0byAyICd1bnVzdWFsJyBzZXR0aW5ncywgdW5kZXIgdGhlIGhvcGUgdGhhdCBidWdzCiMgaW52b2x2aW5nIGludGVyYWN0aW9ucyBvZiBzdWNoIHNldHRpbmdzIGFyZSByYXJlLgojIHRoaW5ncyBhdCBvbmNlLCBmb3IgQyg3LCAwKSArIEMoNywgMSkgKyBDKDcsIDIpID0gMjkKTUFYX1VOVVNVQUxfT1BUSU9OUyA9IDIKCm9zX2RlZmF1bHQgPSAnbGludXgnCm9zX3VudXN1YWwgPSAnb3N4JwoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpjb21waWxlcnNfZGVmYXVsdCA9ICdDQz1nY2MnCmNvbXBpbGVyc191bnVzdWFsID0gJ0NDPWNsYW5nJwoKY29tcGlsZXJfZmxhZ191bnVzdWFscyA9IFsnLW0zMiddCjx8ZmltX2VuZHw+"]
["0613ac581f91cb8d7bef11c5a6a4dd5ad6b9a897-3","0613ac581f91cb8d7bef11c5a6a4dd5ad6b9a897","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGN2Mgo8fGZpbV9ob2xlfD4KZGVmIGFkZF9yZWN0YW5nbGUoaW1hZ2U6IEltYWdlLCB4MCwgeTAsIHcsIGgsIGNvbG9yPSgxMjcsIDEyNywgMTI3KSwgdGhpY2tuZXNzPTIpOgogICAgcmV0dXJuIGN2Mi5yZWN0YW5nbGUoaW1hZ2UsICh4MCwgeTApLCAoeDAgKyB3LCB5MCArIGgpLCBjb2xvciwgdGhpY2tuZXNzKQo8fGZpbV9zdWZmaXh8PgoKZnJvbSBvY3IudHlwZXMgaW1wb3J0IEltYWdlCgoKPHxmaW1fZW5kfD4="]
["0671aaf5b3aca9e32e72511dc056085b64cbf65d-3","0671aaf5b3aca9e32e72511dc056085b64cbf65d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdApmcm9tIGZha2VyIGltcG9ydCBGYWtlcgoKZnJvbSBhbWF6b25fcHJpY2VfdHJhY2tlci5jb3JlLmZpeHR1cmVzIGltcG9ydCBhZG1pbiwgdXNlcgpmcm9tIGRqYW5nby5jb250cmliLmF1dGggaW1wb3J0IGdldF91c2VyX21vZGVsCmZyb20gZGphbmdvLmNvcmUuZXhjZXB0aW9ucyBpbXBvcnQgVmFsaWRhdGlvbkVycm9yCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KClVzZXIgPSBnZXRfdXNlcl9tb2RlbCgpCmZha2VyID0gRmFrZXIoKQoKPHxmaW1fZW5kfD4="]
["884a92b42b50f7ae9234346e5bb282b6be09eedc-1","884a92b42b50f7ae9234346e5bb282b6be09eedc","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgpjbGFzcyBJbk1ldGFNYXBEaXNHZU5ldChJbmZpbGVNZXRhZGF0YSk6CgogICAgQ1NWX05BTUUgPSAiREJfRGlzR2VOZXRfbWFwcGluZ19kaXNlYXNlX3VtbHNfZG8uY3N2IgogICAgVVNFX0NPTFMgPSBbJ3VtbHNJRCcsICdjb2RlJ10gICMgdm9jIGdldHMgZGVsZXRlZCB3aGlsZSBpbmRpdmlkdWFsIHByZXByb2Nlc3NpbmcKICAgIFNPVVJDRV9DT0wgPSAwCiAgICBUQVJHRVRfQ09MID0gMQogICAgTUFQUElOR19TRVAgPSBOb25lCiAgICBJTkZJTEVfVFlQRSA9IEluZmlsZVR5cGUuSU5fTUFQX0RJU0dFTkVUCgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oY3N2X25hbWU9SW5NZXRhTWFwRGlzR2VOZXQuQ1NWX05BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2xzPXNlbGYuVVNFX0NPTFMsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZpbGVUeXBlPUluTWV0YU1hcERpc0dlTmV0LklORklMRV9UWVBFKQo8fGZpbV9zdWZmaXh8Pgpmcm9tIG9wZW5iaW9saW5rLmdyYXBoX2NyZWF0aW9uLm1ldGFkYXRhX2luZmlsZS5pbmZpbGVNZXRhZGF0YSBpbXBvcnQgSW5maWxlTWV0YWRhdGEKZnJvbSBvcGVuYmlvbGluay5ncmFwaF9jcmVhdGlvbi50eXBlcy5pbmZpbGVUeXBlIGltcG9ydCBJbmZpbGVUeXBlCgoKPHxmaW1fZW5kfD4="]
["304e09247b93823630029fcd41b8b9fa3c4920b4-1","304e09247b93823630029fcd41b8b9fa3c4920b4","PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRldGltZSBpbXBvcnQgdGltZWRlbHRhLCBkYXRldGltZQpmcm9tIHByZWZlY3QgaW1wb3J0IHRhc2ssIEZsb3csIFBhcmFtZXRlcgppbXBvcnQgcHJlZmVjdAppbXBvcnQgbG9nZ2luZwpmcm9tIHByZWZlY3QudXRpbGl0aWVzLmxvZ2dpbmcgaW1wb3J0IGdldF9sb2dnZXIKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IG9zCgojIG9zLm1rZGlyKCdsb2cnKQpMT0dfUEFUSCA9ICdsb2cnCjx8ZmltX2VuZHw+"]
["ccaa7b1b4783ee76786ef89726e59564f53f560d-4","ccaa7b1b4783ee76786ef89726e59564f53f560d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gLi5MYXRlbnQgaW1wb3J0IExhdGVudApmcm9tIC5CYXNlRXhwbG9yYXRpb24gaW1wb3J0IEJhc2VFeHBsb3JhdGlvbgpmcm9tIC5FYXNpbmdzIGltcG9ydCAqCgpjbGFzcyBUcnVuY2F0aW9uSW50ZXJwb2xhdGlvbihCYXNlRXhwbG9yYXRpb24pOgoJZGVmIF9faW5pdF9fKHNlbGYsIHN0eWxlR2FuV3JhcHBlcik6CgkJQmFzZUV4cGxvcmF0aW9uLl9faW5pdF9fKHNlbGYsIHN0eWxlR2FuV3JhcHBlcikKCglkZWYgcnVuKHNlbGYsIHNlZWQsIHN0YXJ0LCBlbmQsIHN0ZXBzLCBlYXNpbmc9TGluZWFySW5PdXQpOgoJCXN0ZXBfaW5jID0gMS4wIC8gc3RlcHMKCQlzdGVwc19udW0gPSBucC5hcmFuZ2UoMCwgMSwgc3RlcF9pbmMpCjx8ZmltX2hvbGV8PgoJCWZvciBhbHBoYSBpbiBzdGVwc19udW06CgkJCXRydW5jYXRpb24gPSBpbnRlcnBvbGF0b3IuZWFzZShhbHBoYSkKCQkJaW1hZ2VzLmFwcGVuZChzZWxmLnN0eWxlR2FuV3JhcHBlci5mcm9tX2xhdGVudChMYXRlbnQuZnJvbV9zZWVkKHNlZWQsIHRydW5jYXRpb24pKSkKCgkJcmV0dXJuIGltYWdlcwo8fGZpbV9zdWZmaXh8PgoJCWltYWdlcyA9IFtdCgoJCWludGVycG9sYXRvciA9IGVhc2luZyhzdGFydCwgZW5kLCAxKQoKPHxmaW1fZW5kfD4="]
["ec53f1bde7faeda127ea1e30a3386751a8490d73-3","ec53f1bde7faeda127ea1e30a3386751a8490d73","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKCgpjbGFzcyBTb2x1dGlvbjoKICAgIGRlZiBzb2x2ZVN1ZG9rdShzZWxmLCBib2FyZDogTGlzdFtMaXN0W3N0cl1dKSAtPiBOb25lOgogICAgICAgIHNlbGYuYm9hcmQgPSBib2FyZCAgIyBDcmVhdGUgaW5zdGFuY2UgdmFyaWFibGUKICAgICAgICBzZWxmLnNpemUgPSA5CiAgICAgICAgc2VsZi5zb2x2ZSgpCgogICAgZGVmIHNvbHZlKHNlbGYpOgogICAgICAgIGZvciByb3cgaW4gcmFuZ2Uoc2VsZi5zaXplKToKICAgICAgICAgICAgZm9yIGNvbCBpbiByYW5nZShzZWxmLnNpemUpOgogICAgICAgICAgICAgICAgaWYgc2VsZi5ib2FyZFtyb3ddW2NvbF0gIT0gJy4nOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBmb3IgbnVtIGluIHJhbmdlKDEsIDEwKTogICMgVHJ5IGFsbCBwb3NzaWJsZSBjb21iaW5hdGlvbnMKICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmlzX3ZhbGlkKHJvdywgY29sLCBzdHIobnVtKSk6ICAjIElmIGNvbWIgaXMgdmFsaWQKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ib2FyZFtyb3ddW2NvbF0gPSBzdHIobnVtKSAgIyBNYWtlIG1vdmUKICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zb2x2ZSgpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUgICMgQm9hcmQgaXMgc29sdmluZyB3aXRoIG1vdmUKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYm9hcmRbcm93XVtjb2xdID0gJy4nICAjIFJlc2V0IGFuZCBnbyBiYWNrCjx8ZmltX2hvbGV8PgogICAgICAgIHJldHVybiBUcnVlICAjIE1vdmVzIHNvIGZhciB2YWxpZAoKICAgIGRlZiBpc192YWxpZChzZWxmLCByb3c6IGludCwgY29sOiBpbnQsIG51bTogc3RyKSAtPiBib29sOgogICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYuc2l6ZSk6CiAgICAgICAgICAgICMgQ2hlY2sgcm93IHZhbGlkaXR5CiAgICAgICAgICAgIGlmIHNlbGYuYm9hcmRbaV1bY29sXSAhPSAnLicgYW5kIHNlbGYuYm9hcmRbaV1bY29sXSA9PSBudW06CiAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIyBDaGVjayBjb2x1bW4gdmFsaWRpdHkKICAgICAgICAgICAgaWYgc2VsZi5ib2FyZFtyb3ddW2ldICE9ICcuJyBhbmQgc2VsZi5ib2FyZFtyb3ddW2ldID09IG51bToKICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAjIENoZWNrIGJveCB2YWxpZGl0eQogICAgICAgICAgICBib3ggPSBzZWxmLmJvYXJkWzMgKiAocm93IC8vIDMpICsgaSAvLyAzXVszICogKGNvbCAvLyAzKSArIGkgJSAzXQogICAgICAgICAgICBpZiBib3ggIT0gJy4nIGFuZCBib3ggPT0gbnVtOgogICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgcmV0dXJuIFRydWUKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZSAgIyBObyBjb21iaW5hdGlvbiB2YWxpZCwgd3JvbmcgbW92ZXMgc28gZmFyCjx8ZmltX2VuZHw+"]
["79ddddb08af4f5bd84a4cc719fada4ea08b16e91-1","79ddddb08af4f5bd84a4cc719fada4ea08b16e91","PHxmaW1fcHJlZml4fD4KREFUQUJBU0VTID0gewogICAgJ2RlZmF1bHQnOiB7CiAgICAgICAgJ0VOR0lORSc6ICdkamFuZ28uZGIuYmFja2VuZHMuc3FsaXRlMycsCiAgICAgICAgJ05BTUUnOiAnOm1lbW9yeTonCiAgICB9Cn0KSU5TVEFMTEVEX0FQUFMgPSBbCiAgICAnZGphbmdvLmNvbnRyaWIuYXV0aCcsCiAgICAnZGphbmdvLmNvbnRyaWIuY29udGVudHR5cGVzJywKICAgICdkamFuZ28uY29udHJpYi5zZXNzaW9ucycsCgogICAgJ2JyaWRnZWtlZXBlcicsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KXQpTRUNSRVRfS0VZID0gJ2NvcnJlY3QgaG9yc2UgYmF0dGVyeSBzdGFwbGUnClJPT1RfVVJMQ09ORiA9ICdicmlkZ2VrZWVwZXIudXJscycKPHxmaW1fZW5kfD4="]
["4e552b42a2c370701b1044457c7d3552be0a07b3-1","4e552b42a2c370701b1044457c7d3552be0a07b3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGZubWF0Y2gKaW1wb3J0IHJlCgpmcm9tIGR5bmFtby53ZWIubW9kdWxlcy5fYmFzZSBpbXBvcnQgV2ViTW9kdWxlCmZyb20gZHluYW1vLmRhdGFmb3JtYXQgaW1wb3J0IERhdGFzZXQKCmNsYXNzIExpc3REYXRhc2V0cyhXZWJNb2R1bGUpOgogICAgIiIiCiAgICBTaW1wbGUgZGF0YXNldCBsaXN0aW5nLgogICAgIiIiCgogICAgZGVmIHJ1bihzZWxmLCBjYWxsZXIsIHJlcXVlc3QsIGludmVudG9yeSk6CiAgICAgICAgZGF0YXNldHMgPSBbXQogICAgCiAgICAgICAgIyBjb2xsZWN0IGluZm9ybWF0aW9uIGZyb20gdGhlIGludmVudG9yeSBhbmQgcmVnaXN0cnkgYWNjb3JkaW5nIHRvIHRoZSByZXF1ZXN0cwogICAgICAgIGlmICdkYXRhc2V0JyBpbiByZXF1ZXN0OgogICAgICAgICAgICBtYXRjaF9uYW1lID0gcmVxdWVzdFsnZGF0YXNldCddCiAgICAgICAgICAgIGlmICcqJyBpbiBtYXRjaF9uYW1lOgogICAgICAgICAgICAgICAgcGF0dGVybiA9IHJlLmNvbXBpbGUoZm5tYXRjaC50cmFuc2xhdGUobWF0Y2hfbmFtZSkpCiAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBpbnZlbnRvcnkuZGF0YXNldHMuaXRlcmtleXMoKToKICAgICAgICAgICAgICAgICAgICBpZiBwYXR0ZXJuLm1hdGNoKG5hbWUpOgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0cy5hcHBlbmQoaW52ZW50b3J5LmRhdGFzZXRzW25hbWVdKQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgZGF0YXNldHMuYXBwZW5kKGludmVudG9yeS5kYXRhc2V0c1ttYXRjaF9uYW1lXSkKICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAKICAgICAgICByZXNwb25zZSA9IFtdCiAgICAgICAgZm9yIGRhdGFzZXQgaW4gZGF0YXNldHM6CiAgICAgICAgICAgIHJlc3BvbnNlLmFwcGVuZCh7J25hbWUnOiBkYXRhc2V0Lm5hbWUsICdzaXplJzogZGF0YXNldC5zaXplLCAnbnVtX2ZpbGVzJzogZGF0YXNldC5udW1fZmlsZXMsCiAgICAgICAgICAgICAgICAnc3RhdHVzJzogRGF0YXNldC5zdGF0dXNfbmFtZShkYXRhc2V0LnN0YXR1cyksICd0eXBlJzogRGF0YXNldC5kYXRhX3R5cGVfbmFtZShkYXRhc2V0LmRhdGFfdHlwZSl9KQogICAgCiAgICAgICAgIyByZXR1cm4gYW55IEpTT05pemFibGUgcHl0aG9uIG9iamVjdCAobWF5YmUgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gYSBsaXN0KQogICAgICAgIHJldHVybiByZXNwb25zZQoKCiMgZXhwb3J0ZWQgdG8gX19pbml0X18ucHkKZXhwb3J0X2RhdGEgPSB7Cjx8ZmltX2hvbGV8Pgp9Cjx8ZmltX3N1ZmZpeHw+CiAgICAnZGF0YXNldHMnOiBMaXN0RGF0YXNldHMKPHxmaW1fZW5kfD4="]
["2b270cb42ce29082f8b6bf41737b6dee4c318a5f-4","2b270cb42ce29082f8b6bf41737b6dee4c318a5f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGZhY3RvcnkKCmZyb20gZmFrZXIgaW1wb3J0IEZhY3RvcnkgYXMgRmFrZXJGYWN0b3J5CgpmYWtlciA9IEZha2VyRmFjdG9yeS5jcmVhdGUoKQoKCmNsYXNzIEx1bmNoVHlwZUZhY3RvcnkoZmFjdG9yeS5kamFuZ28uRGphbmdvTW9kZWxGYWN0b3J5KToKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgbW9kZWwgPSAicmVnaXN0cmF0aW9uLkx1bmNoVHlwZSIKCiAgICBzb3J0X29yZGVyID0gZmFrZXIucmFuZG9tX2ludCgpCgoKY2xhc3MgUGFzc1R5cGVGYWN0b3J5KGZhY3RvcnkuZGphbmdvLkRqYW5nb01vZGVsRmFjdG9yeSk6CiAgICBjbGFzcyBNZXRhOgogICAgICAgIG1vZGVsID0gInJlZ2lzdHJhdGlvbi5QYXNzVHlwZSIKCiAgICBzb3J0X29yZGVyID0gZmFrZXIucmFuZG9tX2ludCgpCiAgICBkYXRhID0ge30KCgpjbGFzcyBSZWdpc3RyYXRpb25GYWN0b3J5KGZhY3RvcnkuZGphbmdvLkRqYW5nb01vZGVsRmFjdG9yeSk6CiAgICBjbGFzcyBNZXRhOgogICAgICAgIG1vZGVsID0gInJlZ2lzdHJhdGlvbi5SZWdpc3RyYXRpb24iCgogICAgbHVuY2ggPSBmYWN0b3J5LlN1YkZhY3RvcnkoTHVuY2hUeXBlRmFjdG9yeSkKICAgIHBhc3NfdHlwZSA9IGZhY3RvcnkuU3ViRmFjdG9yeShQYXNzVHlwZUZhY3RvcnkpCgoKY2xhc3MgQ2FydEZhY3RvcnkoZmFjdG9yeS5kamFuZ28uRGphbmdvTW9kZWxGYWN0b3J5KToKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgbW9kZWwgPSAibWluaXNob3AuQ2FydCIKCgpjbGFzcyBQcm9kdWN0RmFjdG9yeShmYWN0b3J5LmRqYW5nby5EamFuZ29Nb2RlbEZhY3RvcnkpOgogICAgY2xhc3MgTWV0YToKICAgICAgICBtb2RlbCA9ICJtaW5pc2hvcC5Qcm9kdWN0IgoKCmNsYXNzIE9yZGVyRmFjdG9yeShmYWN0b3J5LmRqYW5nby5EamFuZ29Nb2RlbEZhY3RvcnkpOgogICAgY2xhc3MgTWV0YToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIG1vZGVsID0gIm1pbmlzaG9wLk9yZGVyIgo8fGZpbV9lbmR8Pg=="]
["8898af7b9932d27f09706e93f4eef2609b00388b-3","8898af7b9932d27f09706e93f4eef2609b00388b","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgogICAgRVVST1BFID0gIkV1cm9wZSIKICAgIE5PUlRIX0FNRVJJQ0EgPSAiTm9ydGggQW1lcmljYSIKICAgIFNPVVRIRUFTVF9BU0lBID0gIlNvdXRoZWFzdCBBc2lhIgogICAgQVVTVFJBTElBID0gIkF1c3RyYWxpYSIKICAgIFVOS05PV04gPSAnJwo8fGZpbV9zdWZmaXh8Pgpmcm9tIC5FbnVtIGltcG9ydCBFbnVtCmNsYXNzIFJlZ2lvbihFbnVtKToKICAgIExBVElOX0FNRVJJQ0FfTk9SVEggPSAiTGF0aW4gQW1lcmljYSBOb3J0aCIKICAgIEJSQVpJTCA9ICJCcmF6aWwiCjx8ZmltX2VuZHw+"]
["ae28cc7d8619cf97654d0ac5867f32d3ffaaec92-1","ae28cc7d8619cf97654d0ac5867f32d3ffaaec92","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCjx8ZmltX2hvbGV8PgpfX1NUQVRFX1NJWkVfUkVWID0gdHVwbGUocmV2ZXJzZWQoX19TVEFURV9TSVpFKSkKIiIiIFN0YXRlIHNpemUgcmVwcmVzZW50ZWQgYXMgdyBhbmQgaCAiIiIKCl9fVVNFX1JHQiA9IEZhbHNlCgpfX1NUQVRFX0NIQU5ORUxTID0gMyBpZiBfX1VTRV9SR0IgZWxzZSAxCgpfX1NUQVRVU19ESUNUID0gewogICAgInNtYWxsIjogMC4yNSwKICAgICJ0YWxsIjogMC41LAogICAgImZpcmViYWxsIjogMC43NQp9CgoKZGVmIGNsaXBfcmV3YXJkKHJld2FyZCwgbWluX3Jld2FyZCwgbWF4X3Jld2FyZCk6CiAgICBtYXhfY2xpcHBlZCA9IG1pbihyZXdhcmQsIG1heF9yZXdhcmQpCiAgICBtaW5fY2xpcHBlZCA9IG1heChtYXhfY2xpcHBlZCwgbWluX3Jld2FyZCkKICAgIHJldHVybiBtaW5fY2xpcHBlZAoKCmRlZiBnZXRfc3RhdGVfY2hhbm5lbHMoKSAtPiBpbnQ6CiAgICByZXR1cm4gX19TVEFURV9DSEFOTkVMUwoKCmRlZiBnZXRfc3RhdGVfc2l6ZSgpIC0+IHR1cGxlOgogICAgcmV0dXJuIF9fU1RBVEVfU0laRQoKCmRlZiBwcmVwcm9jZXNzX3N0YXRlKHN0YXRlOiBucC5uZGFycmF5KToKICAgIGltcG9ydCBjdjIgYXMgY3YKICAgIHJlc3VsdCA9IHN0YXRlCgogICAgaWYgbm90IF9fVVNFX1JHQjoKICAgICAgICByZXN1bHQgPSBjdi5jdnRDb2xvcihyZXN1bHQsIGN2LkNPTE9SX1JHQjJHUkFZKQogICAgcmVzdWx0ID0gY3YucmVzaXplKHJlc3VsdCwgX19TVEFURV9TSVpFX1JFVikKCiAgICBpZiBfX1NUQVRFX0NIQU5ORUxTID4gMToKICAgICAgICByZXN1bHQgPSBucC50cmFuc3Bvc2UocmVzdWx0LCAoMiwgMCwgMSkpCgogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBwcmVwcm9jZXNzX2luZm8oaW5mbzogZGljdCkgLT4gbnAuYXJyYXk6CiAgICBzdGF0dXMgPSBpbmZvWyJzdGF0dXMiXQogICAgc3RhdHVzX251bWVyaWMgPSAwCiAgICBpZiBzdGF0dXMgaW4gX19TVEFUVVNfRElDVDoKICAgICAgICBzdGF0dXNfbnVtZXJpYyA9IF9fU1RBVFVTX0RJQ1Rbc3RhdHVzXQoKICAgIGluZm9fb3V0ID0gW3N0YXR1c19udW1lcmljXQogICAgcmV0dXJuIG5wLmFycmF5KGluZm9fb3V0LCBkdHlwZT1ucC5mbG9hdDMyKQo8fGZpbV9zdWZmaXh8PgoKX19TVEFURV9TSVpFID0gKDExMCwgMTI4KQoiIiIgU3RhdGUgc2l6ZSByZXByZXNlbnRlZCBhcyBoIGFuZCB3ICIiIgoKPHxmaW1fZW5kfD4="]
["301f7bcba80f70c0fa942f5bd8a358797d45de7a-4","301f7bcba80f70c0fa942f5bd8a358797d45de7a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKPHxmaW1faG9sZXw+CmZyb20gLmxvZ2dlcl90ZW1wbGF0ZSBpbXBvcnQgTG9nZ2VyVGVtcGxhdGUKCmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCmNsYXNzIFdlYkhvb2tMb2dnZXIoTG9nZ2VyVGVtcGxhdGUpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWcsIGNhbWVyYV9pZCk6CiAgICAgICAgc2VsZi5jYW1lcmFfaWQgPSBjYW1lcmFfaWQKICAgICAgICBzZWxmLndlYl9ob29rX2VuZHBvaW50ID0gY29uZmlnLmdldF9zZWN0aW9uX2RpY3QoIkxvZ2dlciIpWyJXZWJIb29rc0VuZHBvaW50Il0KCiAgICBkZWYgbG9nX29iamVjdHMoc2VsZiwgb2JqZWN0cywgdmlvbGF0aW5nX29iamVjdHMsIHZpb2xhdGluZ19vYmplY3RzX2luZGV4X2xpc3QsIHZpb2xhdGluZ19vYmplY3RzX2NvdW50LAogICAgICAgICAgICAgICAgICAgIGRldGVjdGVkX29iamVjdHNfY291dCwgZW52aXJvbm1lbnRfc2NvcmUsIHRpbWVfc3RhbXAsIHZlcnNpb24pOgogICAgICAgIHJlcXVlc3RfZGF0YSA9IHsKICAgICAgICAgICAgInZlcnNpb24iOiB2ZXJzaW9uLAogICAgICAgICAgICAidGltZXN0YW1wIjogdGltZV9zdGFtcCwKICAgICAgICAgICAgImRldGVjdGVkX29iamVjdHMiOiBkZXRlY3RlZF9vYmplY3RzX2NvdXQsCiAgICAgICAgICAgICJ2aW9sYXRpbmdfb2JqZWN0cyI6IHZpb2xhdGluZ19vYmplY3RzX2NvdW50LAogICAgICAgICAgICAiZW52aXJvbm1lbnRfc2NvcmUiOiBlbnZpcm9ubWVudF9zY29yZSwKICAgICAgICAgICAgImRldGVjdGlvbnMiOiBzdHIob2JqZWN0cyksCiAgICAgICAgICAgICJ2aW9sYXRpb25zX2luZGV4ZXMiOiBzdHIodmlvbGF0aW5nX29iamVjdHNfaW5kZXhfbGlzdCkKICAgICAgICB9CiAgICAgICAgdHJ5OgogICAgICAgICAgICByZXF1ZXN0cy5wdXQoc2VsZi53ZWJfaG9va19lbmRwb2ludCwgZGF0YT1yZXF1ZXN0X2RhdGEpCiAgICAgICAgZXhjZXB0IENvbm5lY3Rpb25FcnJvcjoKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGYiQ29ubmVjdGlvbiB3aXRoIGVuZHBvaW50IHtzZWxmLndlYl9ob29rX2VuZHBvaW50fSBjYW4ndCBiZSBlc3RhYmxpc2hlZCIpCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCByZXF1ZXN0cwoKZnJvbSByZXF1ZXN0cy5leGNlcHRpb25zIGltcG9ydCBDb25uZWN0aW9uRXJyb3IKCjx8ZmltX2VuZHw+"]
["d1d5dc5ca71725ed7f0fdbf31e0dcdcb1de6e824-5","d1d5dc5ca71725ed7f0fdbf31e0dcdcb1de6e824","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KIyBSZWdpc3RlciB5b3VyIG1vZGVscyBoZXJlLgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20ga3V0aXBhbl9wZW55ZW1hbmdhdC5tb2RlbHMgaW1wb3J0IFF1b3RlcwoKYWRtaW4uc2l0ZS5yZWdpc3RlcihRdW90ZXMpCjx8ZmltX2VuZHw+"]
["4e48120d65cf35ff853fe7d0e36212ab9a551b7f-1","4e48120d65cf35ff853fe7d0e36212ab9a551b7f","PHxmaW1fcHJlZml4fD4KClVTRVJfVEFTS19TVEFUVVMgPSAoCiAgICAoJ+W+heaPkOS6pCcsICflvoXmj5DkuqQnKSwKPHxmaW1faG9sZXw+CikKClVTRVJfVFlQRV9TVEFUVVMgPSB7CiAgICAnYWRtaW4nOiAnYWRtaW4nLCAgICAgIyDnrqHnkIblkZgKICAgICdjb21wYW55JzogJ2NvbXBhbnknLCAjIOWFrOWPuOi0puWPtwogICAgJ25vcm1hbCc6ICdub3JtYWwnLCAgICMg5pmu6YCa55So5oi3Cn0KPHxmaW1fc3VmZml4fD4KICAgICgn5a6h5qC45LitJywgJ+WuoeaguOS4rScpLAogICAgKCflrqHmoLjlrozmr5UnLCAn5a6h5qC45a6M5q+VJyksCiAgICAoJ+W3sui/h+acnycsICflt7Lov4fmnJ8nKSwKPHxmaW1fZW5kfD4="]
["d1df5a04aff14f71d4e4bc66f70afe68555bfaef-1","d1df5a04aff14f71d4e4bc66f70afe68555bfaef","PHxmaW1fcHJlZml4fD4KIiIiClRvdXJuYW1lbnRzIG1vZHVsZS4KClRoaXMgbW9kdWxlIHByb3ZpZGVzIHJvdXRlcyBmb3Igdmlld2luZyBhbmQgYWN0aW9uaW5nIHRvdXJuYW1lbnRzLgoiIiIKCmZyb20gaHR0cCBpbXBvcnQgSFRUUFN0YXR1cwoKZnJvbSBmbGFzayBpbXBvcnQganNvbmlmeSwgcmVxdWVzdApmcm9tIGZsYXNrLnZpZXdzIGltcG9ydCBNZXRob2RWaWV3CmZyb20gc2NvcmVjYXJkLm1vZGVscy5wbGF5ZXIgaW1wb3J0IFBsYXllcgpmcm9tIHNjb3JlY2FyZC5tb2RlbHMudG91cm5hbWVudCBpbXBvcnQgVG91cm5hbWVudCwgVG91cm5hbWVudFNjaGVtYQoKZnJvbSAudmlld19kZWNvcmF0b3JzIGltcG9ydCBwZXJtaXNzaW9uX3JlcXVpcmVkCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CnNjaGVtYSA9IFRvdXJuYW1lbnRTY2hlbWEoKQoKCmNsYXNzIFRvdXJuYW1lbnRzUmVzb3VyY2UoTWV0aG9kVmlldyk6Cjx8ZmltX2VuZHw+"]
["ee358c3194fbfbe98bb0566bd5d79e00425a08c7-3","ee358c3194fbfbe98bb0566bd5d79e00425a08c7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCgppbXBvcnQgcmUKCgpjbGFzcyBzb2h1OgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCk6CiAgICAgICAgc2VsZi51cmwgPSB1cmwKICAgICAgICBzZWxmLmhlYWRlcnMgPSB7CiAgICAgICAgICAgICJVc2VyLUFnZW50IjogIk1vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDExXzJfMykgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzg5LjAuNDM4OS45MCBTYWZhcmkvNTM3LjM2wqwiCiAgICAgICAgfQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIGdldF92aWQoc2VsZik6CiAgICAgICAgcmVzID0gcmVxdWVzdHMuZ2V0KHNlbGYudXJsLCBoZWFkZXJzPXNlbGYuaGVhZGVycykKICAgICAgICB2aWQgPSByZS5maW5kYWxsKCd2YXIgdmlkPSIoXGQrKSI7JywgcmVzLnRleHQpCjx8ZmltX2VuZHw+"]
["9db6af29b5bb48b8ef84632d6f9963930f72f490-2","9db6af29b5bb48b8ef84632d6f9963930f72f490","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgpERUZBVUxUX1VTRVJTX01FU1NBR0VTID0gewogICAgJ0VNQUlMX0FERFJFU1NfQUxSRUFEWV9DT05GSVJNRUQnOiAnRW1haWwgYWRkcmVzcyBpcyBjb25maXJtZWQuJywKICAgICdFTUFJTF9BRERSRVNTX0VYSVNUUyc6ICdFbWFpbCBhbHJlYWR5IGV4aXN0cy4nLAogICAgJ0VNQUlMX0FERFJFU1NfSU5WQUxJRCc6ICdFbWFpbCBhZGRyZXNzIGlzIGludmFsaWQuJywKICAgICdFTUFJTF9BRERSRVNTX05PVF9DT05GSVJNRUQnOiAnRW1haWwgYWRkcmVzcyBoYXMgbm90IGJlZW4gY29uZmlybWVkLicsCiAgICAnRU1BSUxfQUREUkVTU19OT1RfUFJPVklERUQnOiAnRW1haWwgYWRkcmVzcyBub3QgcHJvdmlkZWQuJywKICAgICdQQVNTV09SRF9JTlZBTElEJzogJ1Bhc3N3b3JkIGlzIGludmFsaWQuJywKICAgICdQQVNTV09SRF9MRU5HVEhfSU5WQUxJRCc6ICdQYXNzd29yZCBtdXN0IGJlIGF0IGxlYXN0IDYgY2hhcmFjdGVycy4nLAogICAgJ1BBU1NXT1JEX05PVF9QUk9WSURFRCc6ICdQYXNzd29yZCBub3QgcHJvdmlkZWQuJywKICAgICdQQVNTV09SRF9DT05GSVJNQVRJT05fSU5WQUxJRCc6ICdQYXNzd29yZHMgZG8gbm90IG1hdGNoLicsCiAgICAnVVNFUl9ET0VTX05PVF9FWElTVCc6ICcnCn0KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyB2aW06IGZpbGV0eXBlPXB5dGhvbgo8fGZpbV9lbmR8Pg=="]
["09277e5d920f5bfb2542e69766ac1b3e4dd8a77e-5","09277e5d920f5bfb2542e69766ac1b3e4dd8a77e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zIAogIApuYW1lPWlucHV0KCJJbnB1dCB0aGUgZmlsZW5hbWU6IikKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmV4dD0gb3MubmFtZS5zcGxpdGV4dChuYW1lKSAKICAKcHJpbnQoIlRoZSBleHRlbnNpb24gb2YgdGhlIGZpbGUgaXMgJyVzJzoiJW5hbWUsZXh0WzFdKQoKPHxmaW1fZW5kfD4="]
["ee32a2441e0f9b181f564cd35d2ff96f488de617-3","ee32a2441e0f9b181f564cd35d2ff96f488de617","PHxmaW1fcHJlZml4fD4KZXhwZWN0ZWRfb3V0cHV0ID0gewogICAgInNsb3QiOiB7CiAgICAgICAgImxjIjogewogICAgICAgICAgICAiMC8wIjogewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTkM2LTEwWDEwMEctTS1LIiwKICAgICAgICAgICAgICAgICJmdWxsX3Nsb3QiOiAiMC8wL0NQVTAiLAogICAgICAgICAgICAgICAgInN0YXRlIjogIklPUyBYUiBSVU4iLAogICAgICAgICAgICAgICAgImNvbmZpZ19zdGF0ZSI6ICJOU0hVVCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIjAvMSI6IHsKICAgICAgICAgICAgICAgICJuYW1lIjogIk5DNi0xMFgxMDBHLU0tSyIsCiAgICAgICAgICAgICAgICAiZnVsbF9zbG90IjogIjAvMS9DUFUwIiwKICAgICAgICAgICAgICAgICJzdGF0ZSI6ICJJT1MgWFIgUlVOIiwKICAgICAgICAgICAgICAgICJjb25maWdfc3RhdGUiOiAiTlNIVVQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICIwLzIiOiB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJOQzYtMTBYMTAwRy1NLUsiLAogICAgICAgICAgICAgICAgImZ1bGxfc2xvdCI6ICIwLzIvQ1BVMCIsCiAgICAgICAgICAgICAgICAic3RhdGUiOiAiSU9TIFhSIFJVTiIsCiAgICAgICAgICAgICAgICAiY29uZmlnX3N0YXRlIjogIk5TSFVUIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiMC8zIjogewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTkM2LTEwWDEwMEctTS1LIiwKICAgICAgICAgICAgICAgICJmdWxsX3Nsb3QiOiAiMC8zL0NQVTAiLAogICAgICAgICAgICAgICAgInN0YXRlIjogIklPUyBYUiBSVU4iLAogICAgICAgICAgICAgICAgImNvbmZpZ19zdGF0ZSI6ICJOU0hVVCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIjAvNCI6IHsKICAgICAgICAgICAgICAgICJuYW1lIjogIk5DNi0xMFgxMDBHLU0tSyIsCiAgICAgICAgICAgICAgICAiZnVsbF9zbG90IjogIjAvNC9DUFUwIiwKICAgICAgICAgICAgICAgICJzdGF0ZSI6ICJJT1MgWFIgUlVOIiwKICAgICAgICAgICAgICAgICJjb25maWdfc3RhdGUiOiAiTlNIVVQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICIwLzUiOiB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJOQzYtMTBYMTAwRy1NLUsiLAogICAgICAgICAgICAgICAgImZ1bGxfc2xvdCI6ICIwLzUvQ1BVMCIsCiAgICAgICAgICAgICAgICAic3RhdGUiOiAiSU9TIFhSIFJVTiIsCiAgICAgICAgICAgICAgICAiY29uZmlnX3N0YXRlIjogIk5TSFVUIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiMC82IjogewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTkM2LTEwWDEwMEctTS1LIiwKICAgICAgICAgICAgICAgICJmdWxsX3Nsb3QiOiAiMC82L0NQVTAiLAogICAgICAgICAgICAgICAgInN0YXRlIjogIklPUyBYUiBSVU4iLAogICAgICAgICAgICAgICAgImNvbmZpZ19zdGF0ZSI6ICJOU0hVVCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIjAvNyI6IHsKICAgICAgICAgICAgICAgICJuYW1lIjogIk5DNi0xMFgxMDBHLU0tSyIsCiAgICAgICAgICAgICAgICAiZnVsbF9zbG90IjogIjAvNy9DUFUwIiwKICAgICAgICAgICAgICAgICJzdGF0ZSI6ICJJT1MgWFIgUlVOIiwKICAgICAgICAgICAgICAgICJjb25maWdfc3RhdGUiOiAiTlNIVVQiCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJycCI6IHsKICAgICAgICAgICAgIjAvUlAwIjogewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTkM2LVJQIiwKICAgICAgICAgICAgICAgICJmdWxsX3Nsb3QiOiAiMC9SUDAvQ1BVMCIsCiAgICAgICAgICAgICAgICAic3RhdGUiOiAiSU9TIFhSIFJVTiIsCiAgICAgICAgICAgICAgICAiY29uZmlnX3N0YXRlIjogIk5TSFVUIiwKICAgICAgICAgICAgICAgICJyZWR1bmRhbmN5X3N0YXRlIjogIlN0YW5kYnkiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICIwL1JQMSI6IHsKICAgICAgICAgICAgICAgICJuYW1lIjogIk5DNi1SUCIsCiAgICAgICAgICAgICAgICAiZnVsbF9zbG90IjogIjAvUlAxL0NQVTAiLAogICAgICAgICAgICAgICAgInN0YXRlIjogIklPUyBYUiBSVU4iLAogICAgICAgICAgICAgICAgImNvbmZpZ19zdGF0ZSI6ICJOU0hVVCIsCiAgICAgICAgICAgICAgICAicmVkdW5kYW5jeV9zdGF0ZSI6ICJBY3RpdmUiCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJvYyI6IHsKICAgICAgICAgICAgIjAvRkMwIjogewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTkM2LUZDIiwKICAgICAgICAgICAgICAgICJmdWxsX3Nsb3QiOiAiMC9GQzAiLAogICAgICAgICAgICAgICAgInN0YXRlIjogIk9QRVJBVElPTkFMIiwKICAgICAgICAgICAgICAgICJjb25maWdfc3RhdGUiOiAiTlNIVVQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICIwL0ZDMSI6IHsKICAgICAgICAgICAgICAgICJuYW1lIjogIk5DNi1GQyIsCiAgICAgICAgICAgICAgICAiZnVsbF9zbG90IjogIjAvRkMxIiwKICAgICAgICAgICAgICAgICJzdGF0ZSI6ICJPUEVSQVRJT05BTCIsCiAgICAgICAgICAgICAgICAiY29uZmlnX3N0YXRlIjogIk5TSFVUIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiMC9GQzIiOiB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJOQzYtRkMiLAogICAgICAgICAgICAgICAgImZ1bGxfc2xvdCI6ICIwL0ZDMiIsCiAgICAgICAgICAgICAgICAic3RhdGUiOiAiT1BFUkFUSU9OQUwiLAogICAgICAgICAgICAgICAgImNvbmZpZ19zdGF0ZSI6ICJOU0hVVCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIjAvRkMzIjogewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTkM2LUZDIiwKICAgICAgICAgICAgICAgICJmdWxsX3Nsb3QiOiAiMC9GQzMiLAogICAgICAgICAgICAgICAgInN0YXRlIjogIk9QRVJBVElPTkFMIiwKICAgICAgICAgICAgICAgICJjb25maWdfc3RhdGUiOiAiTlNIVVQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICIwL0ZDNCI6IHsKICAgICAgICAgICAgICAgICJuYW1lIjogIk5DNi1GQyIsCiAgICAgICAgICAgICAgICAiZnVsbF9zbG90IjogIjAvRkM0IiwKICAgICAgICAgICAgICAgICJzdGF0ZSI6ICJPUEVSQVRJT05BTCIsCiAgICAgICAgICAgICAgICAiY29uZmlnX3N0YXRlIjogIk5TSFVUIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiMC9GQzUiOiB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJOQzYtRkMiLAogICAgICAgICAgICAgICAgImZ1bGxfc2xvdCI6ICIwL0ZDNSIsCiAgICAgICAgICAgICAgICAic3RhdGUiOiAiT1BFUkFUSU9OQUwiLAogICAgICAgICAgICAgICAgImNvbmZpZ19zdGF0ZSI6ICJOU0hVVCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIjAvQ0kwIjogewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTkNTLUNSRlQiLAogICAgICAgICAgICAgICAgImZ1bGxfc2xvdCI6ICIwL0NJMCIsCiAgICAgICAgICAgICAgICAic3RhdGUiOiAiT1BFUkFUSU9OQUwiLAogICAgICAgICAgICAgICAgImNvbmZpZ19zdGF0ZSI6ICJOU0hVVCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIjAvRlQwIjogewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTkM2LUZBTlRSQVkiLAogICAgICAgICAgICAgICAgImZ1bGxfc2xvdCI6ICIwL0ZUMCIsCiAgICAgICAgICAgICAgICAic3RhdGUiOiAiT1BFUkFUSU9OQUwiLAogICAgICAgICAgICAgICAgImNvbmZpZ19zdGF0ZSI6ICJOU0hVVCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIjAvRlQxIjogewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTkM2LUZBTlRSQVkiLAogICAgICAgICAgICAgICAgImZ1bGxfc2xvdCI6ICIwL0ZUMSIsCiAgICAgICAgICAgICAgICAic3RhdGUiOiAiT1BFUkFUSU9OQUwiLAogICAgICAgICAgICAgICAgImNvbmZpZ19zdGF0ZSI6ICJOU0hVVCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIjAvUFQwIjogewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTkNTLURDLVBXUlRSQVkiLAogICAgICAgICAgICAgICAgImZ1bGxfc2xvdCI6ICIwL1BUMCIsCiAgICAgICAgICAgICAgICAic3RhdGUiOiAiT1BFUkFUSU9OQUwiLAogICAgICAgICAgICAgICAgImNvbmZpZ19zdGF0ZSI6ICJOU0hVVCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIjAvUFQxIjogewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTkNTLURDLVBXUlRSQVkiLAogICAgICAgICAgICAgICAgImZ1bGxfc2xvdCI6ICIwL1BUMSIsCiAgICAgICAgICAgICAgICAic3RhdGUiOiAiT1BFUkFUSU9OQUwiLAogICAgICAgICAgICAgICAgImNvbmZpZ19zdGF0ZSI6ICJOU0hVVCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIjAvUFQyIjogewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTkNTLURDLVBXUlRSQVkiLAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIjAvUFQzIjogewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTkNTLURDLVBXUlRSQVkiLAogICAgICAgICAgICAgICAgImZ1bGxfc2xvdCI6ICIwL1BUMyIsCiAgICAgICAgICAgICAgICAic3RhdGUiOiAiT1BFUkFUSU9OQUwiLAogICAgICAgICAgICAgICAgImNvbmZpZ19zdGF0ZSI6ICJOU0hVVCIKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgImZ1bGxfc2xvdCI6ICIwL1BUMiIsCiAgICAgICAgICAgICAgICAic3RhdGUiOiAiT1BFUkFUSU9OQUwiLAogICAgICAgICAgICAgICAgImNvbmZpZ19zdGF0ZSI6ICJOU0hVVCIKPHxmaW1fZW5kfD4="]
["856bf5ecb1208983ee1d397b20eb1f1562e14109-3","856bf5ecb1208983ee1d397b20eb1f1562e14109","PHxmaW1fcHJlZml4fD4KZnJvbSBzcG90aXB5Lm9hdXRoMiBpbXBvcnQgU3BvdGlmeUNsaWVudENyZWRlbnRpYWxzCmltcG9ydCBzcG90aXB5CmZyb20gcHByaW50IGltcG9ydCBwcHJpbnQKCmNsaWVudF9jcmVkZW50aWFsc19tYW5hZ2VyID0gU3BvdGlmeUNsaWVudENyZWRlbnRpYWxzKCkKc3AgPSBzcG90aXB5LlNwb3RpZnkoY2xpZW50X2NyZWRlbnRpYWxzX21hbmFnZXI9Y2xpZW50X2NyZWRlbnRpYWxzX21hbmFnZXIpCgpzZWFyY2hfc3RyID0gJ011c2UnCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcmVzdWx0ID0gc3Auc2VhcmNoKHNlYXJjaF9zdHIpCnBwcmludChyZXN1bHQpCjx8ZmltX2VuZHw+"]
["4e48a73f69bf1ae3ba48e4617494a93ce55c503a-2","4e48a73f69bf1ae3ba48e4617494a93ce55c503a","PHxmaW1fcHJlZml4fD4KZGVmIGV4dHJhY3RfbW9ja19uYW1lKG1vY2tfaW5zdGFuY2UpOgogICAgIiIiCiAgICBDb3BpZWQgZGlyZWN0bHkgZnJvbSBweXRob24gMy43KyBgbW9ja2AgZm9yIHB5MiB1c2FnZS4KCiAgICBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGZ1bGwgbW9jayBuYW1lLCBlLmcuIGBvYmplY3QuZnVuYygpLmF0dHJpYnV0ZWAKCiAgICA6cGFyYW0gbW9ja19pbnN0YW5jZTogYSBweXRob24gTW9jayBpbnN0YW5jZQogICAgOnJldHVybjogdGhlIGZ1bGwgbW9jayBpbnN0YW5jZSBuYW1lCiAgICAiIiIKICAgIF9uYW1lX2xpc3QgPSBbbW9ja19pbnN0YW5jZS5fbW9ja19uZXdfbmFtZV0KICAgIF9wYXJlbnQgPSBtb2NrX2luc3RhbmNlLl9tb2NrX25ld19wYXJlbnQKICAgIGxhc3QgPSBtb2NrX2luc3RhbmNlCgogICAgZG90ID0gIi4iCiAgICBpZiBfbmFtZV9saXN0ID09IFsiKCkiXToKICAgICAgICBkb3QgPSAiIgoKICAgIHdoaWxlIF9wYXJlbnQgaXMgbm90IE5vbmU6CiAgICAgICAgbGFzdCA9IF9wYXJlbnQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICAgICBfbmFtZV9saXN0LmFwcGVuZChfcGFyZW50Ll9tb2NrX25ld19uYW1lICsgZG90KQogICAgICAgIGRvdCA9ICIuIgogICAgICAgIGlmIF9wYXJlbnQuX21vY2tfbmV3X25hbWUgPT0gIigpIjoKPHxmaW1fZW5kfD4="]
["090743e4f5da9457e4249fc0ca5cb9ee7d528e74-3","090743e4f5da9457e4249fc0ca5cb9ee7d528e74","PHxmaW1fcHJlZml4fD4KIiIiClNvbWUgY29tbW9uIHN0dWZmCiIiIgpfX2F1dGhvcl9fID0gJ0RhbiBHdW50ZXIgPGRrZ3VudGVyQGxibC5nb3Y+JwpfX2RhdGVfXyA9ICcyLzIzLzE1JwoKaW1wb3J0IHB5bW9uZ28KCkNvbm5lY3Rpb25FcnJvciA9IHB5bW9uZ28uZXJyb3JzLkNvbm5lY3Rpb25GYWlsdXJlCgo8fGZpbV9ob2xlfD4KICAgICAgICBob3N0ID0gY2ZnLmdldCgnaG9zdCcsICdsb2NhbGhvc3QnKQogICAgICAgIHBvcnQgPSBpbnQoY2ZnLmdldCgncG9ydCcsIDI3MDE3KSkKICAgICAgICBweW1vbmdvLk1vbmdvQ2xpZW50Ll9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQpCiAgICAgICAgc2VsZi5kYXRhYmFzZSwgc2VsZi5jb2xsZWN0aW9uID0gTm9uZSwgTm9uZQogICAgICAgIGlmICdkYXRhYmFzZScgaW4gY2ZnOgogICAgICAgICAgICBzZWxmLmRiID0gc2VsZltjZmdbJ2RhdGFiYXNlJ11dCiAgICAgICAgICAgIGlmICd1c2VyJyBpbiBjZmcgYW5kICdwYXNzd29yZCcgaW4gY2ZnOgogICAgICAgICAgICAgICAgb2sgPSBzZWxmLmRiLmF1dGhlbnRpY2F0ZShjZmdbJ3VzZXInXSwgY2ZnWydwYXNzd29yZCddKQogICAgICAgICAgICAgICAgaWYgbm90IG9rOgogICAgICAgICAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25FcnJvcigiRmFpbGVkIHRvIGF1dGhlbnRpY2F0ZS4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNlcj17dXNlcn0gcGFzc3dvcmQ9e3Bhc3N3b3JkfSIuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICAqKmNmZykpCiAgICAgICAgICAgIGlmICdjb2xsZWN0aW9uJyBpbiBjZmc6CiAgICAgICAgICAgICAgICBzZWxmLmNvbGxlY3Rpb24gPSBzZWxmLmRiW2NmZ1snY29sbGVjdGlvbiddXQoKPHxmaW1fc3VmZml4fD4KY2xhc3MgTW9uZ29DbGllbnQocHltb25nby5Nb25nb0NsaWVudCk6CiAgICAiIiJKU09OLWNvbmZpZ3VyYWJsZSBjbGllbnQuCiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjZmcpOgo8fGZpbV9lbmR8Pg=="]
["d1cbf70b47ae174a922bd6da8bab77e8f8dc3e0b-1","d1cbf70b47ae174a922bd6da8bab77e8f8dc3e0b","PHxmaW1fcHJlZml4fD4KZnJvbSBvcyBpbXBvcnQgWF9PSwppbXBvcnQgZ2kKZ2kucmVxdWlyZV92ZXJzaW9uKCdHdGsnLCAnMy4wJykKZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHdGssIEdkawpmcm9tIHdpZGdldF9tYW5hZ2VyIGltcG9ydCBXaWRnZXRNYW5hZ2VyCgpjbGFzcyBBcHAoKToKICBkZWYgX19pbml0X18oc2VsZikgLT4gTm9uZToKICAgIHdpbiA9IEd0ay5XaW5kb3coKQogICAgZml4ZWQgPSBHdGsuRml4ZWQod2lkdGhfcmVxdWVzdD02NDAsIGhlaWdodF9yZXF1ZXN0PTQ4MCkKICAgIHNlbGYuZ3JpZF9zZXR0aW5ncyA9IFs4LDhdCiAgICB3aWRnZXRfbWFuYWdlciA9IFdpZGdldE1hbmFnZXIoc2VsZiwgZml4ZWQpCiAgICBzZWxmLmVfYm94ID0gR3RrLkV2ZW50Qm94KGFib3ZlX2NoaWxkPVRydWUpCiAgICBzZWxmLm92ZXJsYXkgPSBHdGsuT3ZlcmxheSgpCiAgICBzZWxmLm92ZXJsYXlfc2lnbmFscyA9IFtdCiAgICBldmVudF9tYXNrID0gR2RrLkV2ZW50TWFzay5CVVRUT04xX01PVElPTl9NQVNLCiAgICBzZWxmLm92ZXJsYXkuc2V0X2V2ZW50cyhldmVudF9tYXNrKQogICAgc2VsZi5vdmVybGF5LmFkZChmaXhlZCkKICAgIHdpbi5hZGQoc2VsZi5vdmVybGF5KQogICAgd2luLnNob3dfYWxsKCkKICAgIHdpbi5zZXRfZGVjb3JhdGVkKEZhbHNlKQogICAgR3RrLm1haW4oKQoKICBkZWYgZ3JhYl93aWRnZXQoc2VsZiwgd2lkZ2V0KToKICAgICNjYWxsZWQgZnJvbSB0aGUgd2lkZ2V0LCBhc2tpbmcgZm9yIGRyYWcgZXZlbnRzIHVudGlsIG1vdXNlIGlzIHVwCiAgICBzZWxmLm92ZXJsYXlfc2lnbmFscy5hcHBlbmQoc2VsZi5vdmVybGF5LmNvbm5lY3QoJ21vdGlvbi1ub3RpZnktZXZlbnQnLCB3aWRnZXQubW91c2VfZHJhZ2dlZCkpCgogIGRlZiBsZXRfZ28oc2VsZiwgd2lkZ2V0KToKICAgICN3aWRnZXQgbm90aWZpZXMgdGhhdCB0aGUgbW91c2UgY2FtZSB1cCwgZGlzY29ubmVjdCB0aGUgZHJhZyBldmVudAogICAgZm9yIGhhbmRsZXIgaW4gc2VsZi5vdmVybGF5X3NpZ25hbHM6CiAgICAgIHNlbGYub3ZlcmxheS5kaXNjb25uZWN0KGhhbmRsZXIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHNlbGYub3ZlcmxheV9zaWduYWxzID0gW10KCiAgICAgIAoKPHxmaW1fZW5kfD4="]
["d1cbf70b47ae174a922bd6da8bab77e8f8dc3e0b-3","d1cbf70b47ae174a922bd6da8bab77e8f8dc3e0b","PHxmaW1fcHJlZml4fD4KZnJvbSBvcyBpbXBvcnQgWF9PSwppbXBvcnQgZ2kKPHxmaW1faG9sZXw+CmNsYXNzIEFwcCgpOgogIGRlZiBfX2luaXRfXyhzZWxmKSAtPiBOb25lOgogICAgd2luID0gR3RrLldpbmRvdygpCiAgICBmaXhlZCA9IEd0ay5GaXhlZCh3aWR0aF9yZXF1ZXN0PTY0MCwgaGVpZ2h0X3JlcXVlc3Q9NDgwKQogICAgc2VsZi5ncmlkX3NldHRpbmdzID0gWzgsOF0KICAgIHdpZGdldF9tYW5hZ2VyID0gV2lkZ2V0TWFuYWdlcihzZWxmLCBmaXhlZCkKICAgIHNlbGYuZV9ib3ggPSBHdGsuRXZlbnRCb3goYWJvdmVfY2hpbGQ9VHJ1ZSkKICAgIHNlbGYub3ZlcmxheSA9IEd0ay5PdmVybGF5KCkKICAgIHNlbGYub3ZlcmxheV9zaWduYWxzID0gW10KICAgIGV2ZW50X21hc2sgPSBHZGsuRXZlbnRNYXNrLkJVVFRPTjFfTU9USU9OX01BU0sKICAgIHNlbGYub3ZlcmxheS5zZXRfZXZlbnRzKGV2ZW50X21hc2spCiAgICBzZWxmLm92ZXJsYXkuYWRkKGZpeGVkKQogICAgd2luLmFkZChzZWxmLm92ZXJsYXkpCiAgICB3aW4uc2hvd19hbGwoKQogICAgd2luLnNldF9kZWNvcmF0ZWQoRmFsc2UpCiAgICBHdGsubWFpbigpCgogIGRlZiBncmFiX3dpZGdldChzZWxmLCB3aWRnZXQpOgogICAgI2NhbGxlZCBmcm9tIHRoZSB3aWRnZXQsIGFza2luZyBmb3IgZHJhZyBldmVudHMgdW50aWwgbW91c2UgaXMgdXAKICAgIHNlbGYub3ZlcmxheV9zaWduYWxzLmFwcGVuZChzZWxmLm92ZXJsYXkuY29ubmVjdCgnbW90aW9uLW5vdGlmeS1ldmVudCcsIHdpZGdldC5tb3VzZV9kcmFnZ2VkKSkKCiAgZGVmIGxldF9nbyhzZWxmLCB3aWRnZXQpOgogICAgI3dpZGdldCBub3RpZmllcyB0aGF0IHRoZSBtb3VzZSBjYW1lIHVwLCBkaXNjb25uZWN0IHRoZSBkcmFnIGV2ZW50CiAgICBmb3IgaGFuZGxlciBpbiBzZWxmLm92ZXJsYXlfc2lnbmFsczoKICAgICAgc2VsZi5vdmVybGF5LmRpc2Nvbm5lY3QoaGFuZGxlcikKICAgIHNlbGYub3ZlcmxheV9zaWduYWxzID0gW10KCiAgICAgIAoKQXBwKCkKCgoKCgoKCgoKPHxmaW1fc3VmZml4fD4KZ2kucmVxdWlyZV92ZXJzaW9uKCdHdGsnLCAnMy4wJykKZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHdGssIEdkawpmcm9tIHdpZGdldF9tYW5hZ2VyIGltcG9ydCBXaWRnZXRNYW5hZ2VyCgo8fGZpbV9lbmR8Pg=="]
["a011d7d74e51487ba2718ecfc0599c19ce2e6a80-4","a011d7d74e51487ba2718ecfc0599c19ce2e6a80","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCmltcG9ydCB0b3JjaC5ubiBhcyBubgoKZnJvbSB0b3JjaHZpc2lvbi5tb2RlbHMgaW1wb3J0IHZnZzE5CgoKY2xhc3MgRmVhdHVyZUV4dHJhY3Rvcihubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHZnZyA9IHZnZzE5KHByZXRyYWluZWQgPSBUcnVlKQogICAgICAgICMgQmVmb3JlIGFjdGl2YXRpb24gKFJlTFUpCiAgICAgICAgc2VsZi52Z2cxOV81NCA9IG5uLlNlcXVlbnRpYWwoKmxpc3QodmdnLmZlYXR1cmVzLmNoaWxkcmVuKCkpWzogMzVdKQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIGltZzogdG9yY2guVGVuc29yKToKICAgICAgICByZXR1cm4gc2VsZi52Z2cxOV81NChpbWcpCgoKY2xhc3MgRGVuc2VSZXNpZHVhbEJsb2NrKG5uLk1vZHVsZSk6CiAgICAiIiIKICAgIDEpIFJlbW92ZSBhbGwgQk4gbGF5ZXI6IGluY3JlYXNlIHBlcmZvcm1hbmNlIGFuZCByZWR1Y2UgY29tcHV0YXRpb25hbCBjb21wbGV4aXR5CiAgICAyKSBEZW5zZSBibG9jawogICAgMykgUmVzaWR1YWwgYmxvY2sKICAgIDQpIFJlc2lkdWFsIHNjYWxpbmcgdG8gcHJldmVudCBpbnN0YWJpbGl0eQoKICAgIElucHV0czoKICAgICAgICAtIGBpbWdfdGVuc29yYDogW2JhdGNoLCBmaWx0ZXJzLCBoZWlnaHQsIHdpZHRoXQogICAgUmV0dXJuczoKICAgICAgICAtIGBmZWF0dXJlIG1hcGA6IFtiYXRjaCwgZmlsdGVycywgaGVpZ2h0LCB3aWR0aF0KICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbHRlcnM6IGludCwgcmVzaWR1YWxfc2NhbGU6IGZsb2F0ID0gMC4yKToKICAgICAgICBzdXBlcihEZW5zZVJlc2lkdWFsQmxvY2ssIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLnJlc2lkdWFsX3NjYWxlID0gcmVzaWR1YWxfc2NhbGUKCiAgICAgICAgZGVmIGJsb2NrKGluX2ZlYXR1cmVzLCBub25fbGluZWFyaXR5ID0gVHJ1ZSk6CiAgICAgICAgICAgIGxheWVyID0gW25uLkNvbnYyZChpbl9mZWF0dXJlcywgZmlsdGVycywgMywgMSwgMSwgYmlhcyA9IFRydWUpXQogICAgICAgICAgICBpZiBub25fbGluZWFyaXR5OgogICAgICAgICAgICAgICAgbGF5ZXIuYXBwZW5kKG5uLlJlTFUoaW5wbGFjZSA9IFRydWUpKQogICAgICAgICAgICByZXR1cm4gbm4uU2VxdWVudGlhbCgqbGF5ZXIpCgogICAgICAgIHNlbGYuYmxvY2sxID0gYmxvY2soZmlsdGVycykKICAgICAgICBzZWxmLmJsb2NrMiA9IGJsb2NrKGZpbHRlcnMgKiAyKQogICAgICAgIHNlbGYuYmxvY2szID0gYmxvY2soZmlsdGVycyAqIDMpCiAgICAgICAgc2VsZi5ibG9jazQgPSBibG9jayhmaWx0ZXJzICogNCkKICAgICAgICBzZWxmLmJsb2NrNSA9IGJsb2NrKGZpbHRlcnMgKiA1LCBGYWxzZSkKICAgICAgICBzZWxmLmJsb2NrcyA9IFtzZWxmLmJsb2NrMSwgc2VsZi5ibG9jazIsIHNlbGYuYmxvY2szLCBzZWxmLmJsb2NrNCwgc2VsZi5ibG9jazVdCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeDogdG9yY2guVGVuc29yKToKICAgICAgICBpbnB1dHMgPSB4CiAgICAgICAgZm9yIGJsb2NrIGluIHNlbGYuYmxvY2tzOgogICAgICAgICAgICBvdXQgPSBibG9jayhpbnB1dHMpCiAgICAgICAgICAgIGlucHV0cyA9IHRvcmNoLmNhdChbaW5wdXRzLCBvdXRdLCAxKQogICAgICAgIHJldHVybiBvdXQgKiBzZWxmLnJlc2lkdWFsX3NjYWxlICsgeAoKCmNsYXNzIFJlc2lkdWFsSW5SZXNpZHVhbERlbnNlQmxvY2sobm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWx0ZXJzOiBpbnQsIHJlc2lkdWFsX3NjYWxlOiBmbG9hdCA9IDAuMik6Cjx8ZmltX2hvbGV8PgogICAgICAgICAgICBEZW5zZVJlc2lkdWFsQmxvY2soZmlsdGVycywgc2VsZi5yZXNpZHVhbF9zY2FsZSksCiAgICAgICAgICAgIERlbnNlUmVzaWR1YWxCbG9jayhmaWx0ZXJzLCBzZWxmLnJlc2lkdWFsX3NjYWxlKQogICAgICAgICkKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4OiB0b3JjaC5UZW5zb3IpOgogICAgICAgIHJldHVybiBzZWxmLmRlbnNlX2Jsb2Nrcyh4KSAqIHNlbGYucmVzaWR1YWxfc2NhbGUgKyB4CgoKY2xhc3MgR2VuZXJhdG9yKG5uLk1vZHVsZSk6CiAgICAiIiJbR2VuZXJhdG9yIGluIEVTUkdBTl0KICAgIEFyZ3VtZW50czoKICAgICAgICBpbl9jaGFubmVscyB7aW50fSAtLSBbSW5wdXQgY2hhbm5lbHMgb2YgdGVuc29yXQogICAgICAgIGZpbHRlcnMge2ludH0gLS0gW051bWJlciBvZiBmZWF0dXJlIG1hcHNdCiAgICAgICAgbnVtX2Jsb2NrcyB7aW50fSAtLSBbTnVtYmVyIG9mIHJlc2lkdWFsIGJsb2NrcyBpbiBEZW5zZVJlc2lkdWFsQmxvY2tdCiAgICAgICAgbnVtX3Vwc2FtcGxlcyB7aW50fSAtLSBbTnVtYmVyIG9mIHVwc2FtcGxpbmcgbGF5ZXJzIChyYXRpbyA9IDIpXQoKICAgIElucHV0czoKICAgICAgICAtIGBpbWdfdGVuc29yYDogW2JhdGNoLCBjaGFubmVscywgaGVpZ2h0LCB3aWR0aF0KICAgIFJldHVybnM6CiAgICAgICAgLSBgb3V0YDogW2JhdGNoLCBjaGFubmVscywgaGVpZ2h0ICogMl5udW1fdXBzYW1wbGVzLCB3aWR0aCAqIDJebnVtX3Vwc2FtcGxlc10KICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgaW5fY2hhbm5lbHM6IGludCA9IDMsCiAgICAgICAgZmlsdGVyczogaW50ID0gMzIsCiAgICAgICAgbnVtX2Jsb2NrczogaW50ID0gMTYsCiAgICAgICAgbnVtX3Vwc2FtcGxlczogaW50ID0gMiwKICAgICAgICByZXNpZHVhbF9zY2FsZTogZmxvYXQgPSAwLjIKICAgICk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgIyBGaXJzdCBDb252b2x1dGlvbiBMYXllcgogICAgICAgIHNlbGYuZmlyc3RfY29udiA9IG5uLkNvbnYyZChpbl9jaGFubmVscywgZmlsdGVycywgMywgMSwgMSkKICAgICAgICAjIFJlc2lkdWFsIGJsb2NrCiAgICAgICAgc2VsZi5yZXNpZHVhbF9ibG9jayA9IG5uLlNlcXVlbnRpYWwoCiAgICAgICAgICAgICpbUmVzaWR1YWxJblJlc2lkdWFsRGVuc2VCbG9jayhmaWx0ZXJzLCByZXNpZHVhbF9zY2FsZSkgZm9yIF8gaW4gcmFuZ2UobnVtX2Jsb2NrcyldCiAgICAgICAgKQogICAgICAgICMgU2Vjb25kIENvbnZvbHV0aW9uIExheWVyCiAgICAgICAgc2VsZi5zZWNvbmRfY29udiA9IG5uLkNvbnYyZChmaWx0ZXJzLCBmaWx0ZXJzLCAzLCAxLCAxKQogICAgICAgICMgVXBzYW1wbGluZyBMYXllcnMKICAgICAgICB1cHNhbXBsZV9sYXllciA9IFtdCiAgICAgICAgZm9yIF8gaW4gcmFuZ2UobnVtX3Vwc2FtcGxlcyk6CiAgICAgICAgICAgIHVwc2FtcGxlX2xheWVyLmFwcGVuZChubi5Db252MmQoZmlsdGVycywgZmlsdGVycyAqIDQsIDMsIDEsIDEpKQogICAgICAgICAgICB1cHNhbXBsZV9sYXllci5hcHBlbmQobm4uTGVha3lSZUxVKDAuMiwgaW5wbGFjZSA9IFRydWUpKQogICAgICAgICAgICB1cHNhbXBsZV9sYXllci5hcHBlbmQobm4uUGl4ZWxTaHVmZmxlKDIpKQogICAgICAgIHNlbGYudXBzYW1wbGVfbGF5ZXIgPSBubi5TZXF1ZW50aWFsKCp1cHNhbXBsZV9sYXllcikKICAgICAgICAjIExhc3QgQ29udm9sdXRpb24gTGF5ZXIKICAgICAgICBzZWxmLmxhc3RfY29udiA9IG5uLlNlcXVlbnRpYWwoCiAgICAgICAgICAgIG5uLkNvbnYyZChmaWx0ZXJzLCBmaWx0ZXJzLCAzLCAxLCAxKSwKICAgICAgICAgICAgbm4uTGVha3lSZUxVKDAuMiwgaW5wbGFjZSA9IFRydWUpLAogICAgICAgICAgICBubi5Db252MmQoZmlsdGVycywgaW5fY2hhbm5lbHMsIDMsIDEsIDEpCiAgICAgICAgKQoKICAgICAgICBzZWxmLmluaXRfd2VpZ2h0cygpCgogICAgZGVmIGluaXRfd2VpZ2h0cyhzZWxmKToKICAgICAgICBmb3IgbSBpbiBzZWxmLm1vZHVsZXMoKToKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtLCBubi5Db252MmQpOgogICAgICAgICAgICAgICAgbm4uaW5pdC5ub3JtYWxfKG0ud2VpZ2h0LCBzdGQgPSAwLjAxKQogICAgICAgICAgICAgICAgaWYgbS5iaWFzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgIG5uLmluaXQuY29uc3RhbnRfKG0uYmlhcywgMCkKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4OiB0b3JjaC5UZW5zb3IpOgogICAgICAgIGZlYXR1cmUxID0gc2VsZi5maXJzdF9jb252KHgpCiAgICAgICAgZmVhdHVyZSA9IHNlbGYucmVzaWR1YWxfYmxvY2soZmVhdHVyZTEpCiAgICAgICAgZmVhdHVyZTIgPSBzZWxmLnNlY29uZF9jb252KGZlYXR1cmUpCiAgICAgICAgZmVhdHVyZSA9IGZlYXR1cmUxICsgZmVhdHVyZTIKICAgICAgICBvdXQgPSBzZWxmLnVwc2FtcGxlX2xheWVyKGZlYXR1cmUpCiAgICAgICAgb3V0ID0gc2VsZi5sYXN0X2NvbnYob3V0KQogICAgICAgIHJldHVybiBvdXQKCgpjbGFzcyBEaXNjcmltaW5hdG9yKG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgaW5wdXRfc2hhcGU6IHR1cGxlID0gKDMsIDk2LCA5NikpOgogICAgICAgIHN1cGVyKERpc2NyaW1pbmF0b3IsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLmlucHV0X3NoYXBlID0gaW5wdXRfc2hhcGUKICAgICAgICBpbl9jaGFubmVsLCBpbl9oZWlnaHQsIGluX3dpZHRoID0gc2VsZi5pbnB1dF9zaGFwZQogICAgICAgIHBhdGNoX2gsIHBhdGNoX3cgPSBpbnQoaW5faGVpZ2h0IC8gMiAqKiA0KSwgaW50KGluX3dpZHRoIC8gMiAqKiA0KQoKICAgICAgICBkZWYgYmxvY2soaW5fZmlsdGVycywgb3V0X2ZpbHRlcnMsIGZpcnN0X2Jsb2NrID0gRmFsc2UpOgogICAgICAgICAgICBsYXllciA9IFtdCiAgICAgICAgICAgIGxheWVyLmFwcGVuZChubi5Db252MmQoaW5fZmlsdGVycywgb3V0X2ZpbHRlcnMsIDMsIDEsIDEpKQogICAgICAgICAgICBpZiBub3QgZmlyc3RfYmxvY2s6CiAgICAgICAgICAgICAgICBsYXllci5hcHBlbmQobm4uQmF0Y2hOb3JtMmQob3V0X2ZpbHRlcnMpKQogICAgICAgICAgICBsYXllci5hcHBlbmQobm4uTGVha3lSZUxVKDAuMiwgaW5wbGFjZSA9IFRydWUpKQogICAgICAgICAgICBsYXllci5hcHBlbmQobm4uQ29udjJkKG91dF9maWx0ZXJzLCBvdXRfZmlsdGVycywgMywgMiwgMSkpCiAgICAgICAgICAgIGxheWVyLmFwcGVuZChubi5CYXRjaE5vcm0yZChvdXRfZmlsdGVycykpCiAgICAgICAgICAgIGxheWVyLmFwcGVuZChubi5MZWFreVJlTFUoMC4yLCBpbnBsYWNlID0gVHJ1ZSkpCiAgICAgICAgICAgIHJldHVybiBsYXllcgoKICAgICAgICBsYXllcnMgPSBbXQogICAgICAgIGluX2ZpbHRlcnMgPSBpbl9jaGFubmVsCiAgICAgICAgZm9yIGksIG91dF9maWx0ZXJzIGluIGVudW1lcmF0ZShbNjQsIDEyOCwgMjU2LCA1MTJdKToKICAgICAgICAgICAgbGF5ZXJzLmV4dGVuZChibG9jayhpbl9maWx0ZXJzLCBvdXRfZmlsdGVycywgZmlyc3RfYmxvY2sgPSBpID09IDApKQogICAgICAgICAgICBpbl9maWx0ZXJzID0gb3V0X2ZpbHRlcnMKICAgICAgICBsYXllcnMuYXBwZW5kKG5uLkNvbnYyZChvdXRfZmlsdGVycywgMSwgMywgMSwgMSkpCiAgICAgICAgc2VsZi5sYXllcnMgPSBubi5TZXF1ZW50aWFsKCpsYXllcnMpCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeDogdG9yY2guVGVuc29yKToKICAgICAgICByZXR1cm4gc2VsZi5sYXllcnMoeCkKCgpkZWYgdGVzdCgpOgogICAgbmV0RyA9IEdlbmVyYXRvcihudW1fYmxvY2tzPTEpCiAgICBuZXREID0gRGlzY3JpbWluYXRvcigoMywgODk2LCA4OTYpKQogICAgaW1nID0gdG9yY2gucmFuZG4oMSwgMywgMjI0LCAyMjQpCiAgICBmYWtlX2ltZyA9IG5ldEcoaW1nKQogICAgcHJpbnQoZmFrZV9pbWcuc2hhcGUpCiAgICBwcmludChuZXREKGZha2VfaW1nKS5zaGFwZSkKPHxmaW1fc3VmZml4fD4KICAgICAgICBzdXBlcihSZXNpZHVhbEluUmVzaWR1YWxEZW5zZUJsb2NrLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5yZXNpZHVhbF9zY2FsZSA9IHJlc2lkdWFsX3NjYWxlCiAgICAgICAgc2VsZi5kZW5zZV9ibG9ja3MgPSBubi5TZXF1ZW50aWFsKAogICAgICAgICAgICBEZW5zZVJlc2lkdWFsQmxvY2soZmlsdGVycywgc2VsZi5yZXNpZHVhbF9zY2FsZSksCjx8ZmltX2VuZHw+"]
["ae7b8cbcdb40b0f47d06e769d26a39fff50260bb-2","ae7b8cbcdb40b0f47d06e769d26a39fff50260bb","PHxmaW1fcHJlZml4fD4KCgojIGZvciBuIGluIHJhbmdlKDAsIDEwKSA6CiMgICAgIGZvciBtIGluIHJhbmdlKDAsIDEwKToKIyAgICAgICAgIGYgPSBuICogMTkuMSArIG0gKiAxNy4yCiMgICAgICAgICBwcmludCgibj0lZCwgbT0lZCwgZj0lZiIgJSAobiwgbSwgZikpCgoKCgpmb3IgbiBpbiByYW5nZSgxLCA3KSA6CiAgICAKICAgIGYxID0gbiAqIDE5LjEKCiAgICBpZihuID4zKToKICAgICAgICBtID0gbiAtIDMKICAgICAgICB4ID0gbWluKG4sIDMpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBmMiA9IHggKiAxOS4xICsgbSAqIDE3LjIKICAgICAgICBwcmludCgibj0lZCwgeD0lZCwgbT0lZCwgZjE9JWYsIGYyPSVmIiAlIChuLCB4LCBtLCBmMSwgZjIpKQo8fGZpbV9lbmR8Pg=="]
["d6fd8578d99ef732c144ce594ec45bb83598cbea-5","d6fd8578d99ef732c144ce594ec45bb83598cbea","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgc2VhYm9ybiBhcyBzbgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAoKCmRlZiBhbmFseXplX2RhdGEobG9vcF9mZWF0dXJlcywgbG9vcF90YXJnZXRzLCBmZWF0dXJlX25hbWVzLCBkYXRhX2FuYWx5c2lzX3BhcmFtcywgcHJlX2RhdGFfcHJvY2Vzc2luZywgY2xhc3NpZmljYXRpb24pOgogICAgaWYgKHByZV9kYXRhX3Byb2Nlc3NpbmcgYW5kIG5vdCAoZGF0YV9hbmFseXNpc19wYXJhbXNbInByZV9kYXRhX3Byb2Nlc3NpbmciXSkpIG9yIFwKICAgICAgICAgICAgKG5vdCBwcmVfZGF0YV9wcm9jZXNzaW5nIGFuZCBub3QgKGRhdGFfYW5hbHlzaXNfcGFyYW1zWyJwb3N0X2RhdGFfcHJvY2Vzc2luZyJdKSk6CiAgICAgICAgcmV0dXJuCgogICAgcHJpbnQoIisgRGF0YSBBbmFseXNpcyIpCiAgICBpZiBkYXRhX2FuYWx5c2lzX3BhcmFtc1siZGF0YV9jb3JyZWxhdGlvbiJdWyJlbmFibGVkIl06CiAgICAgICAgZGF0YV9jb3JyZWxhdGlvbihsb29wX2ZlYXR1cmVzLCBsb29wX3RhcmdldHMsIGZlYXR1cmVfbmFtZXMsIGRhdGFfYW5hbHlzaXNfcGFyYW1zWyJkYXRhX2NvcnJlbGF0aW9uIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICBwcmVfZGF0YV9wcm9jZXNzaW5nLCBjbGFzc2lmaWNhdGlvbikKCgpkZWYgZGF0YV9jb3JyZWxhdGlvbihsb29wX2ZlYXR1cmVzLCBsb29wX3RhcmdldHMsIGZlYXR1cmVfbmFtZXMsIGNvcnJlbGF0aW9uX3BhcmFtcywgcHJlX2RhdGFfcHJvY2Vzc2luZywKICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZmljYXRpb24pOgogICAgcHJpbnQoIisrIERhdGEgY29ycmVsYXRpb24iKQoKICAgIGNvcnJfbWF0cml4ID0gZ2V0X2NvcnJlbGF0aW9uX21hdHJpeChsb29wX2ZlYXR1cmVzLCBsb29wX3RhcmdldHMsIGZlYXR1cmVfbmFtZXMpCiAgICBpZiBjb3JyZWxhdGlvbl9wYXJhbXNbImdyYXBoaWNhbF9yZXN1bHRzIl06CiAgICAgICAgc24uaGVhdG1hcChjb3JyX21hdHJpeCwgYW5ub3Q9VHJ1ZSkKICAgICAgICBwbHQuc2hvdygpCgogICAgaWYgcHJlX2RhdGFfcHJvY2Vzc2luZzoKICAgICAgICBmaWxlX3BhdGggPSAiLi9yZXN1bHRzL2NvcnJfbWF0cml4X3ByZS5jc3YiCiAgICBlbHNlOgogICAgICAgIGlmIGNsYXNzaWZpY2F0aW9uOgogICAgICAgICAgICBmaWxlX3BhdGggPSAiLi9yZXN1bHRzL2NvcnJfbWF0cml4X2NsYXNzaWZpY2F0aW9uLmNzdiIKICAgICAgICBlbHNlOgogICAgICAgICAgICBmaWxlX3BhdGggPSAiLi9yZXN1bHRzL2NvcnJfbWF0cml4X3JlZ3Jlc3Npb24uY3N2Igo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgY29ycl9tYXRyaXgudG9fY3N2KGZpbGVfcGF0aCkKCgo8fGZpbV9lbmR8Pg=="]
["ee3a4c8cfc1ad7949920d6a79f8e7d78c1f67d51-4","ee3a4c8cfc1ad7949920d6a79f8e7d78c1f67d51","PHxmaW1fcHJlZml4fD4KZnJvbSBndGFza3Bvb2wgaW1wb3J0IFRhc2sKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIGd0YXNrcG9vbCBpbXBvcnQgc2V0bG9nZ2luZwpmcm9tIGd0YXNrcG9vbCBpbXBvcnQgcnVudGFza3MKPHxmaW1fZW5kfD4="]
["4e49d57a672433561ad93b49494beaf4ec331f5e-2","4e49d57a672433561ad93b49494beaf4ec331f5e","PHxmaW1fcHJlZml4fD4KIiIiCkNvcHlyaWdodCAyMDE1IFNZU1RSQU4gU29mdHdhcmUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKPHxmaW1faG9sZXw+CmZyb20gLnRyYW5zbGF0aW9uX3N0YXR1cyBpbXBvcnQgVHJhbnNsYXRpb25TdGF0dXMKZnJvbSAudHJhbnNsYXRpb25fY2FuY2VsIGltcG9ydCBUcmFuc2xhdGlvbkNhbmNlbApmcm9tIC5iYXRjaF9yZXF1ZXN0IGltcG9ydCBCYXRjaFJlcXVlc3QKZnJvbSAuYmF0Y2hfY3JlYXRlIGltcG9ydCBCYXRjaENyZWF0ZQpmcm9tIC5iYXRjaF9jYW5jZWwgaW1wb3J0IEJhdGNoQ2FuY2VsCmZyb20gLmJhdGNoX2Nsb3NlIGltcG9ydCBCYXRjaENsb3NlCmZyb20gLmJhdGNoX3N0YXR1cyBpbXBvcnQgQmF0Y2hTdGF0dXMKZnJvbSAucHJvZmlsZV9pZCBpbXBvcnQgUHJvZmlsZUlkCmZyb20gLmxhbmd1YWdlX3BhaXIgaW1wb3J0IExhbmd1YWdlUGFpcgpmcm9tIC5zdXBwb3J0ZWRfbGFuZ3VhZ2VfcmVzcG9uc2UgaW1wb3J0IFN1cHBvcnRlZExhbmd1YWdlUmVzcG9uc2UKZnJvbSAucHJvZmlsZSBpbXBvcnQgUHJvZmlsZQpmcm9tIC5wcm9maWxlc19yZXNwb25zZSBpbXBvcnQgUHJvZmlsZXNSZXNwb25zZQpmcm9tIC5lcnJvcl9yZXNwb25zZSBpbXBvcnQgRXJyb3JSZXNwb25zZQoKPHxmaW1fc3VmZml4fD4KIyBpbXBvcnQgbW9kZWxzIGludG8gbW9kZWwgcGFja2FnZQpmcm9tIC50cmFuc2xhdGlvbl9vdXRwdXQgaW1wb3J0IFRyYW5zbGF0aW9uT3V0cHV0CmZyb20gLnRyYW5zbGF0aW9uX3Jlc3BvbnNlIGltcG9ydCBUcmFuc2xhdGlvblJlc3BvbnNlCmZyb20gLnRyYW5zbGF0aW9uX2ZpbGVfcmVzcG9uc2UgaW1wb3J0IFRyYW5zbGF0aW9uRmlsZVJlc3BvbnNlCjx8ZmltX2VuZHw+"]
["305cfe7f44100badf4586f6980ab365ee3b7fd6e-4","305cfe7f44100badf4586f6980ab365ee3b7fd6e","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgb3MKaW1wb3J0IHN5cwpmcm9tIGRhdGFfdG9vbHMubGliLmZpbGVzIGltcG9ydCBmaW5kTnVtYmVyLFBhcmFtZXRlclBhcnNlcgpmcm9tIGRhdGFfdG9vbHMubGliLmdyb3VwIGltcG9ydCBHcm91cCxydW5fZ3JvdXBpbmcKCmNsYXNzIFNoYXJlR3JvdXAoR3JvdXApOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHR1cCk6CiAgICAgICAgc3VwZXIoU2hhcmVHcm91cCwgc2VsZikuX19pbml0X18odHVwKQoKICAgIGRlZiBhZGQoc2VsZiwgY2h1bmtzKToKICAgICAgICBmaXJzdCxzZWNvbmQgPSBbbGlzdChyZXZlcnNlZChjaHVua3NbY29sXS5zdHJpcChhcmdzLnNlcGFyYXRvcikuc3BsaXQoYXJncy5zZXBhcmF0b3IpKSkgZm9yIGNvbCBpbiBhcmdzLmNvbHVtbnNdCiAgICAgICAgc2hhcmUgPSAwCiAgICAgICAgZm9yIGYscyBpbiB6aXAoZmlyc3Qsc2Vjb25kKToKICAgICAgICAgICAgaWYgZiA9PSBzOgogICAgICAgICAgICAgICAgc2hhcmUgKz0gMQogICAgICAgICAgICBlbHNlOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICBicmVhawo8fGZpbV9lbmR8Pg=="]
["14f4b673bf3a024a007fc092fb356b19df6d0b6a-2","14f4b673bf3a024a007fc092fb356b19df6d0b6a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCgppbXBvcnQgcHl0ZXN0CmZyb20gcHlsb2dpbnNpZ2h0Lm1vZGVscyBpbXBvcnQgRGF0YXNldCwgRGF0YXNldHMKaW1wb3J0IHV1aWQKCgpkZWYgdGVzdF9nZXRfbm9uZXhpc3RhbnQoY29ubmVjdGlvbik6CgogICAgIyB0aGUgZmFrZSBrZXkgd2UncmUgdHJ5aW5nIHRvIGZldGNoIHJlYWxseSBkb2Vzbid0IGV4aXN0CiAgICBmb3IgZ3VpZCwgbGljZW5zZSBpbiBjb25uZWN0aW9uLnNlcnZlci5kYXRhc2V0cy5pdGVtcygpOgogICAgICAgIGFzc2VydCBndWlkICE9ICIwMDAwMDAwMDAtMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiCgogICAgd2l0aCBweXRlc3QucmFpc2VzKEtleUVycm9yKToKICAgICAgICBfID0gY29ubmVjdGlvbi5zZXJ2ZXIuZGF0YXNldHNbIjAwMDAwMDAwMC0wMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCJdCgoKZGVmIHRlc3Rfc2V0aXRlbShjb25uZWN0aW9uKToKICAgIGRhdGFzZXRzID0gY29ubmVjdGlvbi5zZXJ2ZXIuZGF0YXNldHMKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKICAgICAgICBkYXRhc2V0c1snN2M2Nzc2NjQtZTM3My00NTZkLWJhODUtNjA0N2RmYzg0NDUyJ10gPSAncmFzcGJlcnJ5JwoKCmRlZiB0ZXN0X3JlbW92ZV9ub25leGlzdGFudChjb25uZWN0aW9uKToKCiAgICBwcmV2aW91c19xdWFudGl0eSA9IGxlbihjb25uZWN0aW9uLnNlcnZlci5kYXRhc2V0cykKCiAgICAjIHRoZSBmYWtlIGtleSB3ZSdyZSB0cnlpbmcgdG8gZGVsZXRlIHJlYWxseSBkb2Vzbid0IGV4aXN0CiAgICBmb3IgZ3VpZCwgaXRlbSBpbiBjb25uZWN0aW9uLnNlcnZlci5kYXRhc2V0cy5pdGVtcygpOgogICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGd1aWQsICh1IiIuX19jbGFzc19fLCAiIi5fX2NsYXNzX18pKQogICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGl0ZW0sIERhdGFzZXQpCiAgICAgICAgYXNzZXJ0IGd1aWQgIT0gIjAwMDAwMDAwMC0wMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCIKCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoS2V5RXJyb3IpOgogICAgICAgIGRlbCBjb25uZWN0aW9uLnNlcnZlci5kYXRhc2V0c1siMDAwMDAwMDAwLTAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIl0KICAgIGFzc2VydCBsZW4oY29ubmVjdGlvbi5zZXJ2ZXIuZGF0YXNldHMpID09IHByZXZpb3VzX3F1YW50aXR5ICAjIG5vIGNoYW5nZSB0byBudW1iZXIgb2YgbGljZW5zZSBrZXlzIG9uIHNlcnZlcgoKCmRlZiB0ZXN0X2l0ZXJhdGVfYWxsX2RhdGFzZXRzX2J5X2tleShjb25uZWN0aW9uKToKICAgIGNvdW50ID0gMAogICAgZm9yIGRhdGFzZXRfa2V5IGluIGNvbm5lY3Rpb24uc2VydmVyLmRhdGFzZXRzOgogICAgICAgIGNvdW50ICs9IDEKICAgICAgICBwcmludChkYXRhc2V0X2tleSkKCiAgICBhc3NlcnQgY291bnQgPT0gbGVuKGNvbm5lY3Rpb24uc2VydmVyLmRhdGFzZXRzKQoKCmRlZiB0ZXN0X2NvbGxlY3Rpb25fY2FsbGFibGUoY29ubmVjdGlvbik6CiAgICBkID0gRGF0YXNldHMoY29ubmVjdGlvbikKCiAgICBjYWxsZWQgPSBkKCkKCiAgICBwcmludCgidHlwZShkKSIsIHR5cGUoZCksIGQpCiAgICBwcmludCgidHlwZShjYWxsZWQpIiwgdHlwZShjYWxsZWQpLCBjYWxsZWQpCjx8ZmltX2hvbGV8PgogICAgZm9yIGRhdGFzZXRfa2V5LCBkYXRhc2V0IGluIGNvbm5lY3Rpb24uc2VydmVyLmRhdGFzZXRzLml0ZW1zKCk6CiAgICAgICAgY291bnQgKz0gMQogICAgICAgIHByaW50KGRhdGFzZXRfa2V5KQogICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGRhdGFzZXQsIERhdGFzZXQpCiAgICAgICAgcHJpbnQoZGF0YXNldCkKCiAgICBhc3NlcnQgY291bnQgPT0gbGVuKGNvbm5lY3Rpb24uc2VydmVyLmRhdGFzZXRzKQoKCmRlZiB0ZXN0X2FwcGVuZF9hbmRfZGVsZXRlKGNvbm5lY3Rpb24pOgogICAgbmFtZSA9ICJ0ZXN0ZGF0YXNldC0iICsgc3RyKHV1aWQudXVpZDQoKSkKCiAgICBvcmlnaW5hbF9xdWFudGl0eSA9IGxlbihjb25uZWN0aW9uLnNlcnZlci5kYXRhc2V0cykKCiAgICBkYXRhc2V0ID0gRGF0YXNldChuYW1lPW5hbWUsIGRlc2NyaXB0aW9uPSdteWRlc2NyaXB0aW9uJywgZmllbGQ9J2hvc3RuYW1lJywgdmFsdWU9J2VzeConLCBjb25zdHJhaW50cz1beyd2YWx1ZSc6ICd2b2JkJywgJ2hpZGRlbic6IEZhbHNlLCAnbmFtZSc6ICdfX2xpX3NvdXJjZV9wYXRoJywgJ2ZpZWxkVHlwZSc6ICdTVFJJTkcnLCAnb3BlcmF0b3InOiAnQ09OVEFJTlMnfV0pCiAgICBhc3NlcnQgJ2lkJyBub3QgaW4gZGF0YXNldAoKICAgIG5ld19vYmplY3RfZ3VpZCA9IGNvbm5lY3Rpb24uc2VydmVyLmRhdGFzZXRzLmFwcGVuZChkYXRhc2V0KQogICAgcHJpbnQoIm5ld19vYmplY3RfZ3VpZCIsIG5ld19vYmplY3RfZ3VpZCkKCiAgICBhc3NlcnQgJy0nIGluIG5ld19vYmplY3RfZ3VpZAoKICAgIHJlZmV0Y2hfb2JqZWN0ID0gY29ubmVjdGlvbi5zZXJ2ZXIuZGF0YXNldHNbbmV3X29iamVjdF9ndWlkXQogICAgcHJpbnQoInJlZmV0Y2hfb2JqZWN0IiwgcmVmZXRjaF9vYmplY3QpCgogICAgYXNzZXJ0IGxlbihjb25uZWN0aW9uLnNlcnZlci5kYXRhc2V0cykgPT0gb3JpZ2luYWxfcXVhbnRpdHkgKyAxCgogICAgZGVsIGNvbm5lY3Rpb24uc2VydmVyLmRhdGFzZXRzW25ld19vYmplY3RfZ3VpZF0KCiAgICAjIEJhY2sgdG8gc3RhcnRpbmcgcG9pbnQKICAgIGFzc2VydCBsZW4oY29ubmVjdGlvbi5zZXJ2ZXIuZGF0YXNldHMpID09IG9yaWdpbmFsX3F1YW50aXR5Cjx8ZmltX3N1ZmZpeHw+CgoKZGVmIHRlc3RfaXRlcmF0ZV9hbGxfZGF0YXNldHNfb25fc2VydmVyKGNvbm5lY3Rpb24pOgogICAgY291bnQgPSAwCjx8ZmltX2VuZHw+"]
["88d38f46e9c7e81794769456925392f8abb2c576-1","88d38f46e9c7e81794769456925392f8abb2c576","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiIgUGFyZW50IGNsYXNzIGZvciBtYXNrIGFkanVzdG1lbnRzIGZvciBmYWNlc3dhcC5weSBjb252ZXJ0ZXIgIiIiCgppbXBvcnQgbG9nZ2luZwoKaW1wb3J0IGN2MgppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gbGliLm1vZGVsIGltcG9ydCBtYXNrcyBhcyBtb2RlbF9tYXNrcwpmcm9tIHBsdWdpbnMuY29udmVydC5fY29uZmlnIGltcG9ydCBDb25maWcKCmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKSAgIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCgoKZGVmIGdldF9jb25maWcocGx1Z2luX25hbWUsIGNvbmZpZ2ZpbGU9Tm9uZSk6CiAgICAiIiIgUmV0dXJuIHRoZSBjb25maWcgZm9yIHRoZSByZXF1ZXN0ZWQgbW9kZWwgIiIiCiAgICByZXR1cm4gQ29uZmlnKHBsdWdpbl9uYW1lLCBjb25maWdmaWxlPWNvbmZpZ2ZpbGUpLmNvbmZpZ19kaWN0CgoKY2xhc3MgQWRqdXN0bWVudCgpOgogICAgIiIiIFBhcmVudCBjbGFzcyBmb3IgYWRqdXN0bWVudHMgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgbWFza190eXBlLCBvdXRwdXRfc2l6ZSwgcHJlZGljdGVkX2F2YWlsYWJsZSwgY29uZmlnZmlsZT1Ob25lLCBjb25maWc9Tm9uZSk6CiAgICAgICAgbG9nZ2VyLmRlYnVnKCJJbml0aWFsaXppbmcgJXM6IChhcmd1bWVudHM6ICclcycsIG91dHB1dF9zaXplOiAlcywgIgogICAgICAgICAgICAgICAgICAgICAicHJlZGljdGVkX2F2YWlsYWJsZTogJXMsIGNvbmZpZ2ZpbGU6ICVzLCBjb25maWc6ICVzKSIsCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBtYXNrX3R5cGUsIG91dHB1dF9zaXplLCBwcmVkaWN0ZWRfYXZhaWxhYmxlLAogICAgICAgICAgICAgICAgICAgICBjb25maWdmaWxlLCBjb25maWcpCiAgICAgICAgc2VsZi5jb25maWcgPSBzZWxmLnNldF9jb25maWcoY29uZmlnZmlsZSwgY29uZmlnKQogICAgICAgIGxvZ2dlci5kZWJ1ZygiY29uZmlnOiAlcyIsIHNlbGYuY29uZmlnKQogICAgICAgIHNlbGYubWFza190eXBlID0gc2VsZi5nZXRfbWFza190eXBlKG1hc2tfdHlwZSwgcHJlZGljdGVkX2F2YWlsYWJsZSkKICAgICAgICBzZWxmLmR1bW15ID0gbnAuemVyb3MoKG91dHB1dF9zaXplLCBvdXRwdXRfc2l6ZSwgMyksIGR0eXBlPSdmbG9hdDMyJykKCiAgICAgICAgc2VsZi5za2lwID0gc2VsZi5jb25maWcuZ2V0KCJ0eXBlIiwgTm9uZSkgaXMgTm9uZQogICAgICAgIGxvZ2dlci5kZWJ1ZygiSW5pdGlhbGl6ZWQgJXMiLCBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXykKCiAgICBkZWYgc2V0X2NvbmZpZyhzZWxmLCBjb25maWdmaWxlLCBjb25maWcpOgogICAgICAgICIiIiBTZXQgdGhlIGNvbmZpZyB0byBlaXRoZXIgZ2xvYmFsIGNvbmZpZyBvciBwYXNzZWQgaW4gY29uZmlnICIiIgogICAgICAgIHNlY3Rpb24gPSAiLiIuam9pbihzZWxmLl9fbW9kdWxlX18uc3BsaXQoIi4iKVstMjpdKQogICAgICAgIGlmIGNvbmZpZyBpcyBOb25lOgogICAgICAgICAgICByZXR2YWwgPSBnZXRfY29uZmlnKHNlY3Rpb24sIGNvbmZpZ2ZpbGU9Y29uZmlnZmlsZSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBjb25maWcuc2VjdGlvbiA9IHNlY3Rpb24KICAgICAgICAgICAgcmV0dmFsID0gY29uZmlnLmNvbmZpZ19kaWN0CiAgICAgICAgICAgIGNvbmZpZy5zZWN0aW9uID0gTm9uZQogICAgICAgIGxvZ2dlci5kZWJ1ZygiQ29uZmlnOiAlcyIsIHJldHZhbCkKICAgICAgICByZXR1cm4gcmV0dmFsCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgZ2V0X21hc2tfdHlwZShtYXNrX3R5cGUsIHByZWRpY3RlZF9hdmFpbGFibGUpOgogICAgICAgICIiIiBSZXR1cm4gdGhlIHJlcXVlc3RlZCBtYXNrIHR5cGUuIFJldHVybiBkZWZhdWx0IG1hc2sgaWYKICAgICAgICAgICAgcHJlZGljdGVkIHJlcXVlc3RlZCBidXQgbm90IGF2YWlsYWJsZSAiIiIKPHxmaW1fZW5kfD4="]
["ee899efa61db57bb8cdcd1a91460649fefdeaa21-1","ee899efa61db57bb8cdcd1a91460649fefdeaa21","PHxmaW1fcHJlZml4fD4KIiIiY29yZSBVUkwgQ29uZmlndXJhdGlvbgoKVGhlIGB1cmxwYXR0ZXJuc2AgbGlzdCByb3V0ZXMgVVJMcyB0byB2aWV3cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHNlZToKICAgIGh0dHBzOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi8yLjIvdG9waWNzL2h0dHAvdXJscy8KRXhhbXBsZXM6CkZ1bmN0aW9uIHZpZXdzCiAgICAxLiBBZGQgYW4gaW1wb3J0OiAgZnJvbSBteV9hcHAgaW1wb3J0IHZpZXdzCiAgICAyLiBBZGQgYSBVUkwgdG8gdXJscGF0dGVybnM6ICBwYXRoKCcnLCB2aWV3cy5ob21lLCBuYW1lPSdob21lJykKQ2xhc3MtYmFzZWQgdmlld3MKICAgIDEuIEFkZCBhbiBpbXBvcnQ6ICBmcm9tIG90aGVyX2FwcC52aWV3cyBpbXBvcnQgSG9tZQogICAgMi4gQWRkIGEgVVJMIHRvIHVybHBhdHRlcm5zOiAgcGF0aCgnJywgSG9tZS5hc192aWV3KCksIG5hbWU9J2hvbWUnKQpJbmNsdWRpbmcgYW5vdGhlciBVUkxjb25mCiAgICAxLiBJbXBvcnQgdGhlIGluY2x1ZGUoKSBmdW5jdGlvbjogZnJvbSBkamFuZ28udXJscyBpbXBvcnQgaW5jbHVkZSwgcGF0aAogICAgMi4gQWRkIGEgVVJMIHRvIHVybHBhdHRlcm5zOiAgcGF0aCgnYmxvZy8nLCBpbmNsdWRlKCdibG9nLnVybHMnKSkKIiIiCmZyb20gZGphbmdvLmNvbnRyaWIgaW1wb3J0IGFkbWluCmZyb20gZGphbmdvLnVybHMgaW1wb3J0IHBhdGgsIGluY2x1ZGUKZnJvbSByZXN0X2ZyYW1ld29ya19zd2FnZ2VyLnZpZXdzIGltcG9ydCBnZXRfc3dhZ2dlcl92aWV3Cgpmcm9tIG5ld3MuYWRtaW4gaW1wb3J0IGFkbWluX3NpdGUKCgpzd2FnZ2VyX2RvY3NfdmlldyA9IGdldF9zd2FnZ2VyX3ZpZXcodGl0bGU9J05ld3MgQVBJIERPQ1MnKQoKdXJscGF0dGVybnMgPSBbCiAgICBwYXRoKCdhZG1pbi8nLCBhZG1pbl9zaXRlLnVybHMpLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBwYXRoKCdhcGkvdjEvJywgc3dhZ2dlcl9kb2NzX3ZpZXcpLAogICAgcGF0aCgnYXBpL3YxL25ld3MvJywgaW5jbHVkZSgnc2VhcmNoLnVybHMnKSksCiAgICBwYXRoKCdhcGkvdjEvdXNlci8nLCBpbmNsdWRlKCd1c2Vycy51cmxzJykpLAo8fGZpbV9lbmR8Pg=="]
["4e75330132ccf21667ac28417822b2a31bd2162f-2","4e75330132ccf21667ac28417822b2a31bd2162f","PHxmaW1fcHJlZml4fD4KJycnClRvd2VyIG9mIEhhbm9pIGlzIGEgbWF0aGVtYXRpY2FsIHB1enpsZSB3aGVyZSB3ZSBoYXZlIHRocmVlIHJvZHMgYW5kIG4gZGlza3MuCiBUaGUgb2JqZWN0aXZlIG9mIHRoZSBwdXp6bGUgaXMgdG8gbW92ZSB0aGUgZW50aXJlIHN0YWNrIHRvIGFub3RoZXIgcm9kLAogb2JleWluZyB0aGUgZm9sbG93aW5nIHNpbXBsZSBydWxlczoKMSkgT25seSBvbmUgZGlzayBjYW4gYmUgbW92ZWQgYXQgYSB0aW1lLgoyKSBFYWNoIG1vdmUgY29uc2lzdHMgb2YgdGFraW5nIHRoZSB1cHBlciBkaXNrIGZyb20gb25lIG9mIHRoZSBzdGFja3MgYW5kIHBsYWNpbmcgaXQKb24gdG9wIG9mIGFub3RoZXIgc3RhY2sgaS5lLiBhIGRpc2sgY2FuIG9ubHkgYmUgbW92ZWQgaWYgaXQgaXMgdGhlIHVwcGVybW9zdCBkaXNrIG9uIGEgc3RhY2suCjMpIE5vIGRpc2sgbWF5IGJlIHBsYWNlZCBvbiB0b3Agb2YgYSBzbWFsbGVyIGRpc2sKClNvLGZpcnN0IHdlIGhhdmUgdG8gbW92ZSB0aG9zZSBuIOKIkiAxIHNtYWxsZXIgZGlza3MgdG8gdGhlIHNwYXJlIHBlZy4gT25jZSB0aGF04oCZcwpkb25lLCB3ZSBjYW4gbW92ZSB0aGUgbGFyZ2VzdCBkaXNrIGRpcmVjdGx5IHRvIGl0cyBkZXN0aW5hdGlvbi4gRmluYWxseSwgdG8gZmluaXNoCnRoZSBwdXp6bGUsIHdlIGhhdmUgdG8gbW92ZSB0aGUgbiDiiJIgMSBzbWFsbGVyIGRpc2tzIGZyb20gdGhlIHNwYXJlIHBlZyB0byB0aGVpcgpkZXN0aW5hdGlvbi4KCldl4oCZdmUgc3VjY2Vzc2Z1bGx5IHJlZHVjZWQgdGhlIG4tZGlzayBUb3dlciBvZiBIYW5vaQpwcm9ibGVtIHRvIHR3byBpbnN0YW5jZXMgb2YgdGhlIChuIOKIkiAxKS1kaXNrIFRvd2VyIG9mIEhhbm9pIHByb2JsZW0sIHdoaWNoCndlIGNhbiBnbGVlZnVsbHkgaGFuZCBvZmYgdG8gdGhlIFJlY3Vyc2lvbgoKVGhlIGFsZ29yaXRobSBtb3ZlcyBhIHN0YWNrIG9mIG4gZGlza3MgZnJvbSBhIHNvdXJjZSBwZWcgKHNyYykgdG8gYSBkZXN0aW5hdGlvbgpwZWcgKGRzdCkgdXNpbmcgYSB0aGlyZCB0ZW1wb3JhcnkgcGVnICh0bXApIGFzIGEgcGxhY2Vob2xkZXIuIE5vdGljZSB0aGF0IHRoZQphbGdvcml0aG0gY29ycmVjdGx5IGRvZXMgbm90aGluZyBhdCBhbGwgd2hlbiBuID0gMC4KSGFub2kobixzcmMsIGRzdCx0bXApOgppZiBuID4gMApIYW5vaShuIOKIkiAxLHNyYyx0bXAsIGRzdCkg4oyp4oypUmVjdXJzZSHijKrijKoKbW92ZSBkaXNrIG4gZnJvbSBzcmMgdG8gZHN0Ckhhbm9pKG4g4oiSIDEsdG1wLCBkc3Qsc3JjKSDijKnijKlSZWN1cnNlIeKMquKMqgoKTGV0IFQobikgZGVub3RlIHRoZSBudW1iZXIgb2YgbW92ZXMgcmVxdWlyZWQgdG8gdHJhbnNmZXIgbiBkaXNrc+KAlHRoZQpydW5uaW5nIHRpbWUgb2Ygb3VyIGFsZ29yaXRobS4gT3VyIHZhY3VvdXMgYmFzZSBjYXNlIGltcGxpZXMgdGhhdCBUKDApID0gMCwKYW5kIHRoZSBtb3JlIGdlbmVyYWwgcmVjdXJzaXZlIGFsZ29yaXRobSBpbXBsaWVzIHRoYXQgVChuKSA9IDJUKG4g4oiSIDEpICsgMQpmb3IgYW55IG4g4omlIDEuIEJ5IHdyaXRpbmcgb3V0IHRoZSBmaXJzdCBzZXZlcmFsIHZhbHVlcyBvZiBUKG4pLCB3ZSBjYW4gZWFzaWx5Cmd1ZXNzIHRoYXQgVChuKSA9IDJebiDiiJIgMTsgYSBzdHJhaWdodGZvcndhcmQgaW5kdWN0aW9uIHByb29mIGltcGxpZXMgdGhhdCB0aGlzCmd1ZXNzIGlzIGNvcnJlY3QuIEluIHBhcnRpY3VsYXIsIG1vdmluZyBhIHRvd2VyIG9mIDY0IGRpc2tzIHJlcXVpcmVzIDJeNjQg4oiSIDEgPTE4LDQ0Niw3NDQsMDczLDcwOSw1NTEsNjE1CmluZGl2aWR1YWwgbW92ZXMuIFRodXMsIGV2ZW4gYXQgdGhlIGltcHJlc3NpdmUgcmF0ZQpvZiBvbmUgbW92ZSBwZXIgc2Vjb25kLCB0aGUgbW9ua3MgYXQgQmVuYXJlcyB3aWxsIGJlIGF0IHdvcmsgZm9yIGFwcHJveGltYXRlbHkKNTg1IGJpbGxpb24geWVhcnMgKOKAnHBsdXMgZGUgY2lucSBtaWxsaWFyZHMgZGUgc2nDqGNsZXPigJ0pIGJlZm9yZSB0b3dlciwgdGVtcGxlLCBhbmQKQnJhaG1pbnMgYWxpa2Ugd2lsbCBjcnVtYmxlIGludG8gZHVzdCwgYW5kIHdpdGggYSB0aHVuZGVyY2xhcCB0aGUgd29ybGQgd2lsbAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CnZhbmlzaC4gcmVmOiBBbGdvcml0aG1zIGJ5IEplZmYgRXJpY2tzb24KCgpyZWY6IGh0dHBzOi8vd3d3LmdlZWtzZm9yZ2Vla3Mub3JnL3B5dGhvbi1wcm9ncmFtLWZvci10b3dlci1vZi1oYW5vaS8KPHxmaW1fZW5kfD4="]
["ae9f135f3b35369a23967d5cb9eb076819b4f17c-1","ae9f135f3b35369a23967d5cb9eb076819b4f17c","PHxmaW1fcHJlZml4fD4KIyBDb2xsYWJvcmF0b3JzIChpbmNsdWRpbmcgd2ViIHNpdGVzIHdoZXJlIHlvdSBnb3QgaGVscDogKGVudGVyIG5vbmUgaWYgeW91IGRpZG4ndCBuZWVkIGhlbHApCiMgIG5vbmUKcGVyc29ubmFtZT0gaW5wdXQoImVudGVyIGEgcGVyc29uJ3MgbmFtZSIpCnZlcmI9aW5wdXQoJ2VudGVyIGEgdmVyYicpCmFkdmVyYj1pbnB1dCgnZW50ZXIgYW4gYWR2ZXJiJykKZm9vZD1pbnB1dCgnZW50ZXIgYSBmb29kJykKcGVyc29ubmFtZTI9aW5wdXQoImVudGVyIGEgcGVyc29uJ3MgbmFtZSIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KdmVyYjI9aW5wdXQoJ2VudGVyIGEgdmVyYicpCmFkdmVyYjI9aW5wdXQoJ2VudGVyIGFuIGFkdmVyYicpCnByaW50IChmIlRoZXJlIG9uY2Ugd2FzIGEgcGVyc29uIG5hbWVkIHtwZXJzb25uYW1lfSB0aGF0IHJlYWxseSBsaWtlZCB0byB7dmVyYn0ge2FkdmVyYn0uIE9uZSB0aW1lLCB7cGVyc29ubmFtZX0gd2FzIGVhdGluZyBhIHtmb29kfSBhbmQgcmVhbGl6ZWQgdGhhdCB7cGVyc29ubmFtZTJ9IHdhbnRlZCB0byB7dmVyYjJ9IFxuIHdpdGggdGhlbS4gU28ge3BlcnNvbm5hbWV9IGFuZCB7cGVyc29ubmFtZTJ9IHt2ZXJiMn1lZCB0b2dldGhlciB7YWR2ZXJiMn0iKQo8fGZpbV9lbmR8Pg=="]
["9daddd011b49a75be093bf303b2ed8518fc87cf5-3","9daddd011b49a75be093bf303b2ed8518fc87cf5","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgppbXBvcnQgcHljdWRhLmF1dG9pbml0CmZyb20gZ3JhcGhkb3Qua2VybmVsLm1hcmdpbmFsaXplZC5fc2NyYXRjaCBpbXBvcnQgUENHU2NyYXRjaAoKCkBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgnY2xzJywgWwogICAgbGFtYmRhIG46IFBDR1NjcmF0Y2gobiksCl0pCmRlZiB0ZXN0X3NjcmF0Y2goY2xzKToKICAgIGFzc2VydChjbHMoMSkuZHR5cGUuaXNhbGlnbmVkc3RydWN0KQoKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICBjbHMoMCkKCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgY2xzKC0xKQoKCkBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgnY2xzJywgWwogICAgUENHU2NyYXRjaCwKXSkKQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCdzaXplJywgWzEsIDExLCAxNiwgMTcsIDI1LCAzMSwgMzIsIDIxNywgODE5NSwgOTE5MjRdKQpAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoJ250ZW1wJywgWzEsIDUsIDYsIDEwXSkKZGVmIHRlc3Rfc2NyYXRjaF9hbGxvY2F0aW9uKGNscywgc2l6ZSwgbnRlbXApOgogICAgc2NyYXRjaCA9IGNscyhzaXplLCBudGVtcCkKICAgIGFzc2VydChzY3JhdGNoLm5tYXggPj0gc2l6ZSkKICAgIGFzc2VydChzY3JhdGNoLm5tYXggKiBzY3JhdGNoLm5kaW0gPj0gc2l6ZSAqIG50ZW1wKQogICAgYXNzZXJ0KHNjcmF0Y2gucHRyICE9IDApCiAgICBhc3NlcnQoc2NyYXRjaC5zdGF0ZSkKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgc2NyYXRjaC5wdHIgPSBucC51aW50NjQoMCkKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgc2NyYXRjaC5wdHIgPSAwCjx8ZmltX3N1ZmZpeHw+CiMhL3Vzci9iaW4vZW52IHB5dGhvbgojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHB5dGVzdAo8fGZpbV9lbmR8Pg=="]
["a012049cf3736c5113e8a8caafd131ccd9aba43e-5","a012049cf3736c5113e8a8caafd131ccd9aba43e","PHxmaW1fcHJlZml4fD4KIyBGYcOnYSB1bSBwcm9ncmFtYSBxdWUgbGVpYSBhbGdvIHBlbG8gdGVjbGFkbyBlIG1vc3RyZSBuYSB0ZWxhIG8gc2V1IHRpcG8gcHJpbWl0aXZvIGUgdG9kYXMgYXMgaW5mb3JtYcOnw7VlcyBwb3Nzw612ZWlzIHNvYnJlIGVsYToKCjx8ZmltX2hvbGV8PgpwcmludChmJ8OJIGNvbXBvc3RvIHNvbWVudGUgcG9yIGxldHJhcz8gJywgYWxnby5pc2FscGhhKCkpCnByaW50KGYnw4kgY29tcG9zdG8gcG9yIG7Dum1lcm9zIGUgbGV0cmFzPyAnLCBhbGdvLmlzYWxudW0oKSkKcHJpbnQoZifDiSBjb21wb3N0byBzb21lbnRlIHBvciBsZXRyYXMgbWludXNjdWxhcz8gJywgYWxnby5pc2xvd2VyKCkpCnByaW50KGYnw4kgY29tcG9zdG8gc29tZW50ZSBwb3IgbGV0cmFzIG1hacO6c2N1bGFzPyAnLCBhbGdvLmlzdXBwZXIoKSkKcHJpbnQoZidFc3TDoSBjYXBpdGFsaXphZGE/ICcsIGFsZ28uaXN0aXRsZSgpKQo8fGZpbV9zdWZmaXh8PgphbGdvID0gaW5wdXQoJ0RpZ2l0ZSBhbGdvOiAnKQpwcmludChmJ08gdGlwbyBwcmltaXRpdm8gw6kge3R5cGUoYWxnbyl9JykKcHJpbnQoZifDiSB1bSBuw7ptZXJvPyAnLCBhbGdvLmlzbnVtZXJpYygpKQpwcmludChmJ8OJIGNvbXBvc3RvIGFwZW5hcyBwb3IgZXNwYcOnb3M/ICcsIGFsZ28uaXNzcGFjZSgpKQo8fGZpbV9lbmR8Pg=="]
["8df6fefbd68e1d5784609b9cf7c29f20c0274c4e-2","8df6fefbd68e1d5784609b9cf7c29f20c0274c4e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCmltcG9ydCB0b3JjaC51dGlscy5kYXRhCmltcG9ydCB0b3JjaHZpc2lvbi5kYXRhc2V0cyBhcyBkc2V0CmltcG9ydCB0b3JjaHZpc2lvbi50cmFuc2Zvcm1zIGFzIHRyYW5zZm9ybXMKaW1wb3J0IHRvcmNodmlzaW9uLnV0aWxzIGFzIHZ1dGlscwoKZnJvbSBQYXJhbSBpbXBvcnQgZGF0YXJvb3QsIGRhdGFyb290Mgpmcm9tIFByZXBhcmVfRGF0YSBpbXBvcnQgRGF0YUxvYWRlciwgRGF0YUxvYWRlcl9mbG93cwoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKCgoKZGVmIFBsb3QoaW1nKToKCXBsdC5maWd1cmUoZmlnc2l6ZT0oMTAsMTApKQoJcGx0LmF4aXMoIm9mZiIpCglwbHQudGl0bGUoIlJlYWwgSW1hZ2VzIikKCXBsdC5pbXNob3cobnAudHJhbnNwb3NlKHZ1dGlscy5tYWtlX2dyaWQoaW1nWzoxMF0sIG5yb3c9NSwgbm9ybWFsaXplPVRydWUpLCAoMSwyLDApKSkKCXBsdC5zaG93KCkKCiAgICAKZGVmIHRlc3RfZGF0YV9pbWdzKCk6CiAgICBkYXRhbG9hZGVyID0gRGF0YUxvYWRlcihkYXRhcm9vdCwgNTEyLCA1MTIsIDMyLCAyLCBGYWxzZSkKCiAgICBmb3IgaSwgZGF0YSBpbiBlbnVtZXJhdGUoZGF0YWxvYWRlcik6CiAgICAgICAgaW1nID0gZGF0YVswXSAKICAgICAgICBwcmludChpKQogICAgICAgIFBsb3QoaW1nKQoKCmRlZiB0ZXN0X2RhdGFfZmxvd3MocGF0aCk6CiAgICBpbXBvcnQgY3YyCiAgICBkYXRhbG9hZGVyID0gRGF0YUxvYWRlcl9mbG93cyhwYXRoLCA1MTIsIDUxMiwgMzIsIDIsIEZhbHNlKQoKICAgIGZvciBpLCBkYXRhIGluIGVudW1lcmF0ZShkYXRhbG9hZGVyKToKICAgICAgICBwcmludChpKQogICAgICAgIGZsb3dfbWFwID0gZGF0YVswXQogICAgICAgIHByaW50KGZsb3dfbWFwLnNoYXBlLCBmbG93X21hcC5kdHlwZSkKICAgICAgICBmbG93ID0gZmxvd19tYXBbMF0ucGVybXV0ZSgyLDEsMCkKPHxmaW1faG9sZXw+CiAgICAgICAgaWYgaSA9PSAyOgogICAgICAgICAgICBicmVhawoKcGF0aCA9ICcuLi8uLi8uLi9WYXJuYV9kYXRhc2V0cy9GbG93c19ucHkvJwp0ZXN0X2RhdGFfZmxvd3MocGF0aCkKPHxmaW1fc3VmZml4fD4KICAgICAgICBwcmludChmbG93LnNoYXBlKQogICAgICAgIGltZyA9IGZsb3cubnVtcHkoKQogICAgICAgIGN2Mi5pbXNob3coJ2ltZycsIGltZykKICAgICAgICBjdjIud2FpdEtleSgwKQo8fGZpbV9lbmR8Pg=="]
["ee1e8c50b62335c596ca753de3d3dcc2d1144535-1","ee1e8c50b62335c596ca753de3d3dcc2d1144535","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4gIERPIE5PVCBFRElUIQojIHNvdXJjZTogdG9zLnByb3RvCgppbXBvcnQgc3lzCl9iPXN5cy52ZXJzaW9uX2luZm9bMF08MyBhbmQgKGxhbWJkYSB4OngpIG9yIChsYW1iZGEgeDp4LmVuY29kZSgnbGF0aW4xJykpCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBkZXNjcmlwdG9yIGFzIF9kZXNjcmlwdG9yCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBtZXNzYWdlIGFzIF9tZXNzYWdlCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCByZWZsZWN0aW9uIGFzIF9yZWZsZWN0aW9uCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBzeW1ib2xfZGF0YWJhc2UgYXMgX3N5bWJvbF9kYXRhYmFzZQpmcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZGVzY3JpcHRvcl9wYjIKIyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoaW1wb3J0cykKCl9zeW1fZGIgPSBfc3ltYm9sX2RhdGFiYXNlLkRlZmF1bHQoKQoKCgoKREVTQ1JJUFRPUiA9IF9kZXNjcmlwdG9yLkZpbGVEZXNjcmlwdG9yKAogIG5hbWU9J3Rvcy5wcm90bycsCiAgcGFja2FnZT0nVG9zJywKICBzeW50YXg9J3Byb3RvMicsCiAgc2VyaWFsaXplZF9wYj1fYignXG5cdHRvcy5wcm90b1x4MTJceDAzVG9zXCJceDEzXG5ceDExXHg0MVx4NjNceDYzXHg2NXB0VG9zUmVzcG9uc2VCXCdcbiBjb20uZ29vZ2xlLmFuZHJvaWQuZmluc2t5LnByb3Rvc0JceDAzVG9zJykKKQpfc3ltX2RiLlJlZ2lzdGVyRmlsZURlc2NyaXB0b3IoREVTQ1JJUFRPUikKCgoKCl9BQ0NFUFRUT1NSRVNQT05TRSA9IF9kZXNjcmlwdG9yLkRlc2NyaXB0b3IoCiAgbmFtZT0nQWNjZXB0VG9zUmVzcG9uc2UnLAogIGZ1bGxfbmFtZT0nVG9zLkFjY2VwdFRvc1Jlc3BvbnNlJywKICBmaWxlbmFtZT1Ob25lLAogIGZpbGU9REVTQ1JJUFRPUiwKICBjb250YWluaW5nX3R5cGU9Tm9uZSwKICBmaWVsZHM9WwogIF0sCiAgZXh0ZW5zaW9ucz1bCiAgXSwKICBuZXN0ZWRfdHlwZXM9W10sCiAgZW51bV90eXBlcz1bCiAgXSwKPHxmaW1faG9sZXw+CiAgb25lb2ZzPVsKICBdLAogIHNlcmlhbGl6ZWRfc3RhcnQ9MTgsCiAgc2VyaWFsaXplZF9lbmQ9MzcsCikKCkRFU0NSSVBUT1IubWVzc2FnZV90eXBlc19ieV9uYW1lWydBY2NlcHRUb3NSZXNwb25zZSddID0gX0FDQ0VQVFRPU1JFU1BPTlNFCgpBY2NlcHRUb3NSZXNwb25zZSA9IF9yZWZsZWN0aW9uLkdlbmVyYXRlZFByb3RvY29sTWVzc2FnZVR5cGUoJ0FjY2VwdFRvc1Jlc3BvbnNlJywgKF9tZXNzYWdlLk1lc3NhZ2UsKSwgZGljdCgKICBERVNDUklQVE9SID0gX0FDQ0VQVFRPU1JFU1BPTlNFLAogIF9fbW9kdWxlX18gPSAndG9zX3BiMicKICAjIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zY29wZTpUb3MuQWNjZXB0VG9zUmVzcG9uc2UpCiAgKSkKX3N5bV9kYi5SZWdpc3Rlck1lc3NhZ2UoQWNjZXB0VG9zUmVzcG9uc2UpCgoKREVTQ1JJUFRPUi5oYXNfb3B0aW9ucyA9IFRydWUKREVTQ1JJUFRPUi5fb3B0aW9ucyA9IF9kZXNjcmlwdG9yLl9QYXJzZU9wdGlvbnMoZGVzY3JpcHRvcl9wYjIuRmlsZU9wdGlvbnMoKSwgX2IoJ1xuIGNvbS5nb29nbGUuYW5kcm9pZC5maW5za3kucHJvdG9zQlwwMDNUb3MnKSkKIyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobW9kdWxlX3Njb3BlKQo8fGZpbV9zdWZmaXh8PgogIG9wdGlvbnM9Tm9uZSwKICBpc19leHRlbmRhYmxlPUZhbHNlLAogIHN5bnRheD0ncHJvdG8yJywKICBleHRlbnNpb25fcmFuZ2VzPVtdLAo8fGZpbV9lbmR8Pg=="]
["0600062fcc2bedc02e92af01ebfd271480fe3f90-5","0600062fcc2bedc02e92af01ebfd271480fe3f90","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vcHl0aG9uMwoiIiJORVMgUk9NIC0gVXRpbGl0aWVzCgpDb3B5cmlnaHQgKGMpIDIwMTYgQWxleCBEYWxlCgpUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLiBQbGVhc2UgcmV2aWV3IHRoZQphY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciBkZXRhaWxzLgoKVGhpcyBwcm9ncmFtIGNvbnNpc3RzIG9mIGEgc2V0IG9mIHVzZWZ1bCB0b29scyBmb3IgaGFuZGxpbmcgTkVTIFJPTSBmaWxlcyBmb3IKZW11bGF0ZWQgTkVTIGhhcmR3YXJlLiAgVGhpcyB0b29sIGlzIGludGVuZGVkIHRvIG1ha2UgaXQgZWFzaWVyIGZvciBjbGFzc2ljCk5FUyBnYW1lIGZhbnMgdG8gcHJvZHVjZSBhbmQgY29udmVydCBST00gZmlsZXMgZm9yIHZhcmlvdXMgcHVycG9zZXMuCgpUaGlzIHRvb2wgZG9lcyBub3QgY29udGFpbiBhbnkgY29weXJpZ2h0ZWQgaW5mb3JtYXRpb24KYWJvdXQgdGhlIFJPTSBmaWxlcyB0aGVtIHNlbGYuICBBbGwgZGVzaWduIGRldGFpbHMgaGF2ZSBiZWVuIHJldHJpZXZlZCBmcm9tCnB1YmxpY2x5IGF2YWlsYWJsZSBpbmZvcm1hdGlvbi4KClNvdXJjZToKICAgIGh0dHA6Ly9uZXNkZXYuY29tL05FU0RvYy5wZGYKClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KIiIiCgppbXBvcnQgYXJncGFyc2UKaW1wb3J0IGNvZGVjcwppbXBvcnQgb3MKZnJvbSBvcy5wYXRoIGltcG9ydCBiYXNlbmFtZQppbXBvcnQgcmFuZG9tCmltcG9ydCBzeXMKCmRlZiBiaW5hcnlUb0hlYWRlcihpc3RyZWFtLCBvc3RyZWFtLCBvZmlsZW5hbWUsIHZhcm5hbWUpOgogICAgIiIiQmluYXJ5IChST00pIHRvIEMgSGVhZGVyCgogICAgV3JpdGVzIHRoZSBiaW5hcnkgY29udGVudCBvZiB0aGUgaW5wdXQgZmlsZSB0byB0aGUgb3V0cHV0IGhlYWRlciBmaWxlIGFzCiAgICBhIHNpbmdsZSB1bnNpZ25lZCBjaGFyYWN0ZXIgYXJyYXkuICBUaGUgcHJvZHVjZWQgaGVhZGVyIGZpbGUgaXMgQU5TSSBDODkKICAgIG9ud2FyZHMgY29tcGxpZW50LgoKICAgIFBhcmFtZXRlcnM6CiAgICAgICAgaXN0cmVhbSAgICAgLSBJbnB1dCBmaWxlIHN0cmVhbSBjb250YWluaW5nIHRoZSBiaW5hcnkgaW5mb3JtYXRpb24gb2YgYQogICAgICAgICAgICAgICAgICAgICAgUk9NLgogICAgICAgIG9zdHJlYW0gICAgIC0gT3V0cHV0IGZpbGUgc3RyZWFtIHRvIGJlIHByb2R1Y2VkIGludG8gYSB2YWxpZCBDIGhlYWRlcgogICAgICAgICAgICAgICAgICAgICAgZmlsZS4KICAgICAgICBvZmlsZW5hbWUgICAtIFRoZSBuYW1lIG9mIHRoZSBDIGhlYWRlciBmaWxlLCB1c2VkIHRvIHByb2R1Y2UgdGhlIGhlYWRlcgogICAgICAgICAgICAgICAgICAgICAgZ3VhcmQgbWFjcm8uCiAgICAgICAgdmFybmFtZSAgICAgLSBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUuICBNdXN0IGJlIGEgdmFsaWQgQyBpZGVudGlmaWVyLgoKICAgIFJldHVybnM6CiAgICAgICAgTm9uZQogICAgIiIiCgogICAgaWYgaXN0cmVhbSBpcyBOb25lIG9yIG9zdHJlYW0gaXMgTm9uZToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJOZWVkIGlucHV0IGFuZCBvdXRwdXQgc3RyZWFtcyIpCgogICAgZGVmIHByaW50T3V0KG1lc3NhZ2UpOgogICAgICAgIHByaW50KG1lc3NhZ2UsIGZpbGU9b3N0cmVhbSwgZW5kPSIiLCBmbHVzaD1UcnVlKQoKICAgIGRlZiByZWFkQnl0ZSgpOgogICAgICAgIHJldHVybiBpc3RyZWFtLnJlYWQoMSkKCiAgICBtYWNybyA9IGJhc2VuYW1lKG9maWxlbmFtZS5zcGxpdCgiLiIpWzBdKS51cHBlcigpLnJlcGxhY2UoIi0iLCAiXyIpCgo8fGZpbV9ob2xlfD4KICAgIGNvdW50ID0gMAogICAgdG9IZXggPSBjb2RlY3MuZ2V0ZW5jb2RlcignaGV4JykKICAgIHByaW50T3V0KCJ1bnNpZ25lZCBjaGFyIHswfVtdID0ge3siLmZvcm1hdCh2YXJuYW1lKSkKICAgIGJ5dGUgPSByZWFkQnl0ZSgpCiAgICB3aGlsZSBieXRlICE9IGIiIjoKICAgICAgICBpZiBjb3VudCAhPSAwOgogICAgICAgICAgICBwcmludE91dCgiLCAiKQogICAgICAgIGlmIGNvdW50ICUgMTAgPT0gMDogICAgICMgS2VlcHMgdGhlIGxpbmUgbGVuZ3RoIGxlc3MgdGhhbiA4MCBjaGFyYWN0ZXJzCiAgICAgICAgICAgIHByaW50T3V0KCJcbiAgICAiKSAgIyBZZXMsIHNwYWNlcyBmb3IgaW50ZW5kCiAgICAgICAgcHJpbnRPdXQoIjB4ezB9Ii5mb3JtYXQodG9IZXgoYnl0ZSlbMF0uZGVjb2RlKCkpKQogICAgICAgIGNvdW50ICs9IDEKICAgICAgICBieXRlID0gcmVhZEJ5dGUoKQoKICAgIHByaW50T3V0KCJ9O1xuXG4iKQoKICAgICMgRW5kIGhlYWRlciBndWFyZAogICAgcHJpbnRPdXQoIiNlbmRpZlxuXG4iKQoKZGVmIGdlbmVyYXRlQmluYXJ5KG9zdHJlYW0sIG5ieXRlcyk6CiAgICAiIiJHZW5lcmF0ZSBCaW5hcnkgd2l0aCBSYW5kb20gQnl0ZXMKCiAgICBHZW5lcmF0ZXMgYSBiaW5hcnkgZmlsZSB3aXRoIHRoZSA4KmZsb29yKG5ieXRlcy84KSBieXRlcyBvZiBkYXRhIHRvIHRoZQogICAgc3BlY2lmaWVkIGZpbGUgc3RyZWFtLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgICAgb3N0cmVhbSAgICAgLSBPdXRwdXQgZmlsZSBzdHJlYW0gdGhhdCB0aGUgcmFuZG9tIGJpbmFyeSBpbmZvcm1hdGlvbiB3aWxsCiAgICAgICAgICAgICAgICAgICAgICBiZSB3cml0dGVuIHRvLgogICAgICAgIG5ieXRlcyAgICAgIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJ1bi4gIEV4YWN0IG51bWJlciBvZiBieXRlcwogICAgICAgICAgICAgICAgICAgICAgaXMgY2xvc2VzdCBtdWx0aXBsZSBvZiA4IGxlc3MgdGhhbiBvciBlcXVhbCB0byBuYnl0ZXMuCiAgICAiIiIKICAgIGZvciBfIGluIHJhbmdlKG5ieXRlcyAvLyA4KToKICAgICAgICBvc3RyZWFtLndyaXRlKG9zLnVyYW5kb20oOCkpCgpkZWYgcGFyc2VBcmd1bWVudHMoKmFyZ3YpOgogICAgIiIiUGFyc2UgQXJndW1lbnRzCgogICAgUGFyc2VzIHRoZSBnaXZlbiBhcmd1bWVudCBzdHJpbmcgc2V0IHRvIHByb2R1Y2UgdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvcgogICAgdGhlIHByb2dyYW0uICBNb3N0IGluY29ycmVjdCBhcmd1bWVudHMgd2lsbCByZXN1bHQgaW4gYSBwcm9ncmFtIGZhaWx1cmUgdGhhdAogICAgd2lsbCBwcm9kdWNlIGEgaGVscCBtZXNzYWdlLgoKICAgIFRoaXMgcHJvZ3JhbSBjb25zaXN0cyBvZiBzZXZlcmFsIHNtYWxsIHByb2dyYW1zLCBzbyB0aGUgYXJndW1lbnRzIGFyZSBicm9rZW4KICAgIGRvd24gaW50byBzdWItY29tbWFuZHMgZnJvbSB0aGUgbWFpbiBwcm9ncmFtLiAgRWFjaCBzdWItY29tbWFuZCBoYXMgYSBzbWFsbAogICAgc2V0IG9mIGFyZ3VtZW50cy4KCiAgICBQYXJhbWV0ZXJzOgogICAgICAgICh2YXJpYWJsZSkgIC0gVGhlIGFyZ3VtZW50cyB0byB0aGlzIGZ1bmN0aW9uIGlzIHZhcmlhYmxlIG5vbi1rZXktd29yZAogICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLgoKICAgIEV4YW1wbGU6CiAgICAgICAgcGFyc2VBcmd1bWVudHMoImhlYWRlciIsICItbyIsICJpbmNsdWRlL3NhbXBsZUhlYWRlci5oIiAiLS12YXIiLAogICAgICAgICAgICAgICAgICAgICAgICJzYW1wbGVfcm9tIiwgInNhbXBsZS9zYW1wbGUuYmluIikKCiAgICBSZXR1cm5zOgogICAgICAgIEFuIGFyZ3VtZW50IG9iamVjdCB3aXRoIGF0dHJpYnV0ZXMgZm9yIGVhY2ggb2YgdGhlIHBhcnNlZCBhcmd1bWVudHMuCiAgICAiIiIKCiAgICAjIFByaW1hcnkgcGFyc2VyIGZvciB0aGUgd2hvbGUgcHJvZ3JhbQogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCiAgICAgICAgZGVzY3JpcHRpb249IlV0aWxpdHkgZnVuY3Rpb25zIGZvciBwcm9jZXNzaW5nIE5pbnRlbmRvIEVudGVydGFpbm1lbnQgIgogICAgICAgICAgICAgICAgICAgICJTeXN0ZW0gZ2FtZSBST00gZmlsZXMiKQogICAgY21kUGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycyhoZWxwPSJTZWxlY3Rpb24gZm9yIHByb2dyYW0gZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJjb21tYW5kIikKCiAgICAjIEJpbmFyeSB0byBIZWFkZXIgQ29tbWFuZAogICAgdG9IZWFkZXJQYXJzZXIgPSBjbWRQYXJzZXJzLmFkZF9wYXJzZXIoImhlYWRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJHZW5lcmF0ZSBhIEMgaGVhZGVyIGZyb20gYSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiaW5hcnkiKQogICAgdG9IZWFkZXJQYXJzZXIuYWRkX2FyZ3VtZW50KCItbyIsICItLW91dHB1dCIsIGhlbHA9Ik91dHB1dCBmaWxlIG5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJvZmlsZW5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9Ik9VVFBVVCIpCiAgICB0b0hlYWRlclBhcnNlci5hZGRfYXJndW1lbnQoIi0tdmFyIiwgaGVscD0iT3V0cHV0IGNoYXJhY3RlciBhcnJheSBuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0idmFybmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0iVkFSX05BTUUiKQogICAgdG9IZWFkZXJQYXJzZXIuYWRkX2FyZ3VtZW50KG1ldGF2YXI9IklOUFVUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJJbnB1dCBiaW5hcnkgZmlsZSB0byBiZSBjb252ZXJ0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9ImlmaWxlbmFtZSIpCgogICAgcmFuZG9tQmluYXJ5UGFyc2VyID0gY21kUGFyc2Vycy5hZGRfcGFyc2VyKCJyYW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJHZW5lcmF0ZSBhIHJhbmRvbSBiaW5hcnkgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiKQogICAgcmFuZG9tQmluYXJ5UGFyc2VyLmFkZF9hcmd1bWVudCgiLW8iLCAiLS1vdXRwdXQiLCBoZWxwPSJPdXRwdXQgZmlsZSBuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9Im9maWxlbmFtZSIpCiAgICByYW5kb21CaW5hcnlQYXJzZXIuYWRkX2FyZ3VtZW50KCItcyIsICItLXNpemUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJzaXplIG9mIHRoZSBiaW5hcnkgZmlsZSBpbiBrQiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCB0eXBlPWludCwgY2hvaWNlcz1bMzIsIDY0XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0iYmluc2l6ZSIpCiAgICByZXR1cm4gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncz1hcmd2KQoKZGVmIG1haW4oKmFyZ3YpOgogICAgb3B0aW9ucyA9IHBhcnNlQXJndW1lbnRzKCphcmd2KQoKICAgIGlmIG9wdGlvbnMuY29tbWFuZCA9PSAiaGVhZGVyIjoKICAgICAgICBpc3RyZWFtID0gb3BlbihvcHRpb25zLmlmaWxlbmFtZSwgbW9kZT0icmIiKQogICAgICAgIGlmIGlzdHJlYW0gaXMgTm9uZToKICAgICAgICAgICAgcHJpbnQoIkZhaWxlZCB0byBvcGVuIGlucHV0IGZpbGUgezB9Ii5mb3JtYXQob3B0aW9ucy5pZmlsZW5hbWUpLAogICAgICAgICAgICAgICAgICBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICAgIHJldHVybiAxCiAgICAgICAgb3N0cmVhbSA9IG9wZW4ob3B0aW9ucy5vZmlsZW5hbWUsIG1vZGU9IncrIikKICAgICAgICBpZiBvc3RyZWFtIGlzIE5vbmU6CiAgICAgICAgICAgIHByaW50KCJGYWlsZWQgdG8gb3BlbiBvdXRwdXQgZmlsZSB7MH0iLmZvcm1hdChvcHRpb25zLm9maWxlbmFtZSksCiAgICAgICAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgaXN0cmVhbS5jbG9zZSgpCiAgICAgICAgICAgIHJldHVybiAxCiAgICAgICAgYmluYXJ5VG9IZWFkZXIoaXN0cmVhbSwgb3N0cmVhbSwgb3B0aW9ucy5pZmlsZW5hbWUsIG9wdGlvbnMudmFybmFtZSkKICAgICAgICBpc3RyZWFtLmNsb3NlKCkKICAgICAgICBvc3RyZWFtLmNsb3NlKCkKICAgICAgICByZXR1cm4gMAoKICAgIGlmIG9wdGlvbnMuY29tbWFuZCA9PSAicmFuZCI6CiAgICAgICAgb3N0cmVhbSA9IG9wZW4ob3B0aW9ucy5vZmlsZW5hbWUsIG1vZGU9IncrYiIpCiAgICAgICAgaWYgb3N0cmVhbSBpcyBOb25lOgogICAgICAgICAgICBwcmludCgiRmFpbGVkIHRvIG9wZW4gb3V0cHV0IGZpbGUgezB9Ii5mb3JtYXQob3B0aW9ucy5vZmlsZW5hbWUpLAogICAgICAgICAgICAgICAgICBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgbmJ5dGVzID0gb3B0aW9ucy5iaW5zaXplICogMTAyNAogICAgICAgIGdlbmVyYXRlQmluYXJ5KG9zdHJlYW0sIG5ieXRlcykKICAgICAgICBvc3RyZWFtLmNsb3NlKCkKICAgICAgICByZXR1cm4gMAoKICAgIHJldHVybiAwCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIyBQcm9ncmFtIHN0YXJ0cyBoZXJlLiAgU3RyaXBzIHRoZSBmaXJzdCBhcmd1bWVudCBvZmYKICAgIHN5cy5leGl0KG1haW4oKnN5cy5hcmd2WzE6XSkpCjx8ZmltX3N1ZmZpeHw+CiAgICAjIFN0YXJ0IGhlYWRlciBndWFyZAogICAgcHJpbnRPdXQoIiNpZm5kZWYgX3swfV9cbiIuZm9ybWF0KG1hY3JvKSkKICAgIHByaW50T3V0KCIjZGVmaW5lIF97MH1fXG5cbiIuZm9ybWF0KG1hY3JvKSkKCjx8ZmltX2VuZHw+"]
["4ec5323ab9f5ec359fea38b06d4dc31531b998ea-2","4ec5323ab9f5ec359fea38b06d4dc31531b998ea","PHxmaW1fcHJlZml4fD4KZnJvbSBnaXJkZXIubW9kZWxzLmZpbGUgaW1wb3J0IEZpbGUKZnJvbSBnaXJkZXIubW9kZWxzLmZvbGRlciBpbXBvcnQgRm9sZGVyCmZyb20gZ2lyZGVyLm1vZGVscy51cGxvYWQgaW1wb3J0IFVwbG9hZAppbXBvcnQgcHl0ZXN0CmZyb20gcHl0ZXN0X2dpcmRlci5hc3NlcnRpb25zIGltcG9ydCBhc3NlcnRTdGF0dXMKZnJvbSBweXRlc3RfZ2lyZGVyLnV0aWxzIGltcG9ydCB1cGxvYWRGaWxlCmZyb20gc2l4IGltcG9ydCBCeXRlc0lPCgoKZGVmIHRlc3RFbXB0eVVwbG9hZEZyb21GaWxlKGFkbWluLCBmc0Fzc2V0c3RvcmUpOgogICAgZGVzdCA9IEZvbGRlcigpLmNoaWxkRm9sZGVycyhhZG1pbiwgcGFyZW50VHlwZT0ndXNlcicpWzBdCiAgICBmaWxlID0gVXBsb2FkKCkudXBsb2FkRnJvbUZpbGUoQnl0ZXNJTyhiJycpLCBzaXplPTAsIG5hbWU9J2VtcHR5JywgcGFyZW50PWRlc3QsIHVzZXI9YWRtaW4pCiAgICBhc3NlcnQgRmlsZSgpLmxvYWQoZmlsZVsnX2lkJ10sIGZvcmNlPVRydWUpIGlzIG5vdCBOb25lCiAgICBhc3NlcnQgZmlsZVsnYXNzZXRzdG9yZUlkJ10gPT0gZnNBc3NldHN0b3JlWydfaWQnXQoKCkBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgncmFuZ2Usc3RhdHVzLGNyLGNsJywgKAogICAgKCdieXRlcz0wLScsIDIwNiwgJ2J5dGVzIDAtOTkvMTAwJywgMTAwKSwKICAgICgnYnl0ZXM9MC0xMCcsIDIwNiwgJ2J5dGVzIDAtMTAvMTAwJywgMTEpLAogICAgKE5vbmUsIDIwMCwgTm9uZSwgMTAwKQopKQpkZWYgdGVzdFJhbmdlUmVxdWVzdEJlaGF2aW9yKHJhbmdlLCBzdGF0dXMsIGNyLCBjbCwgYWRtaW4sIHNlcnZlciwgZnNBc3NldHN0b3JlKToKICAgIGRlc3QgPSBGb2xkZXIoKS5jaGlsZEZvbGRlcnMoYWRtaW4sIHBhcmVudFR5cGU9J3VzZXInKVswXQogICAgZmlsZSA9IHVwbG9hZEZpbGUoJ3Rlc3QnLCBiJ2EnICogMTAwLCBhZG1pbiwgZGVzdCkKICAgIGhlYWRlcnMgPSBbKCdSYW5nZScsIHJhbmdlKV0gaWYgcmFuZ2UgZWxzZSBbXQogICAgcmVzcCA9IHNlcnZlci5yZXF1ZXN0KAogICAgICAgIHBhdGg9Jy9maWxlLyVzL2Rvd25sb2FkJyAlIGZpbGVbJ19pZCddLCB1c2VyPWFkbWluLCBhZGRpdGlvbmFsSGVhZGVycz1oZWFkZXJzLCBpc0pzb249RmFsc2UpCiAgICBhc3NlcnRTdGF0dXMocmVzcCwgc3RhdHVzKQogICAgYXNzZXJ0IHJlc3AuaGVhZGVyc1snQ29udGVudC1MZW5ndGgnXSA9PSBjbAogICAgaWYgY3IgaXMgTm9uZToKICAgICAgICBhc3NlcnQgJ0NvbnRlbnQtUmFuZ2UnIG5vdCBpbiByZXNwLmhlYWRlcnMKICAgIGVsc2U6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBhc3NlcnQgcmVzcC5oZWFkZXJzWydDb250ZW50LVJhbmdlJ10gPT0gY3IKPHxmaW1fZW5kfD4="]
["11f2ea96eb497c096f2dfc5eaaf8d7dc6924dcde-2","11f2ea96eb497c096f2dfc5eaaf8d7dc6924dcde",{"$cut":{"chars":89508,"head":"PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAxMyBPcGVuU3RhY2sgRm91bmRhdGlvbgojCiMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKIyAgICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbgojICAgIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCiMgICAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCiMgICAgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKIyAgICB1bmRlciB0aGUgTGljZW5zZS4KIwojIENvcHlyaWdodCAoYykgMjAxMy0yMDE1IFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgojCgppbXBvcnQgY29udGV4dGxpYgppbXBvcnQgY29weQppbXBvcnQgdXVpZAoKaW1wb3J0IHdlYm9iLmV4YwoKaW1wb3J0IG1vY2sKZnJvbSBvc2xvX2xvZyBpbXBvcnQgbG9nIGFzIGxvZ2dpbmcKCmZyb20gbmV1dHJvbi5hcGkucnBjLmFnZW50bm90aWZpZXJzIGltcG9ydCBwbmV0X2Nvbm5lY3Rpdml0eV9ycGNfYWdlbnRfYXBpCmZyb20gbmV1dHJvbi5hcGkucnBjLmhhbmRsZXJzIGltcG9ydCBwbmV0X2Nvbm5lY3Rpdml0eV9ycGMKZnJvbSBuZXV0cm9uLmNvbW1vbiBpbXBvcnQgY29uc3RhbnRzIGFzIG5fY29uc3QKZnJvbSBuZXV0cm9uLmNvbW1vbiBpbXBvcnQgcnBjIGFzIG5fcnBjCmZyb20gbmV1dHJvbi5leHRlbnNpb25zIGltcG9ydCB3cnNfcHJvdmlkZXIgYXMgZXh0X3BuZXQKZnJvbSBuZXV0cm9uLnBsdWdpbnMubWwyIGltcG9ydCBjb25maWcKZnJvbSBuZXV0cm9uLnRlc3RzLnVuaXQuZGIgaW1wb3J0IHRlc3RfZGJfYmFzZV9wbHVnaW5fdjIKZnJvbSBuZXV0cm9uLnRlc3RzLnVuaXQucGx1Z2lucy53cnMgaW1wb3J0IHRlc3Rfd3JzX3BsdWdpbgpmcm9tIG5ldXRyb25fbGliIGltcG9ydCBjb250ZXh0CmZyb20gbmV1dHJvbl9saWIucGx1Z2lucyBpbXBvcnQgZGlyZWN0b3J5CgpMT0cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKClRFTkFOVF8xID0gInRlc3QtdGVuYW50IgoKSE9TVF8xID0gJ3Rlc3QtaG9zdCcKCkFVRElUXzEgPSAnNDNiMTJjMGItM2MxNy00NjYxLTg2ZDItNTJjNWEzYjgzYzJmJwoKRkxBVF9QTkVUMSA9IHsnbmFtZSc6ICdmbGF0LXBuZXQwJywKICAgICAgICAgICAgICAndHlwZSc6IG5fY29uc3QuUFJPVklERVJORVRfRkxBVCwKICAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAnZmxhdCB0ZXN0IHByb3ZpZGVyIG5ldHdvcmsnfQoKVkxBTl9QTkVUMSA9IHsnbmFtZSc6ICd2bGFuLXBuZXQwJywKICAgICAgICAgICAgICAndHlwZSc6IG5fY29uc3QuUFJPVklERVJORVRfVkxBTiwKICAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAndmxhbiB0ZXN0IHByb3ZpZGVyIG5ldHdvcmsnfQoKVkxBTl9QTkVUMV9SQU5HRTEgPSB7J25hbWUnOiAndmxhbi1wbmV0MC0wJywKICAgICAgICAgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogJ3ZsYW4gcmFuZ2UxJywKICAgICAgICAgICAgICAgICAgICAgJ3NoYXJlZCc6IEZhbHNlLAogICAgICAgICAgICAgICAgICAgICAnbWluaW11bSc6IDEwLAogICAgICAgICAgICAgICAgICAgICAnbWF4aW11bSc6IDEwMCwKICAgICAgICAgICAgICAgICAgICAgJ3RlbmFudF9pZCc6IHRlc3RfZGJfYmFzZV9wbHVnaW5fdjIuVEVTVF9URU5BTlRfSUR9CgpWTEFOX1BORVQyID0geyduYW1lJzogJ3ZsYW4tcG5ldDEnLAogICAgICAgICAgICAgICd0eXBlJzogbl9jb25zdC5QUk9WSURFUk5FVF9WTEFOLAogICAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICd2bGFuIHRlc3QgcHJvdmlkZXIgbmV0d29yayd9CgpWTEFOX1BORVQyX1JBTkdFMSA9IHsnbmFtZSc6ICd2bGFuLXBuZXQxLTAnLAogICAgICAgICAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAndmxhbiByYW5nZTEnLAogICAgICAgICAgICAgICAgICAgICAnc2hhcmVkJzogVHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgJ21pbmltdW0nOiAxLAogICAgICAgICAgICAgICAgICAgICAnbWF4aW11bSc6IDEwMCwKICAgICAgICAgICAgICAgICAgICAgJ3RlbmFudF9pZCc6IHRlc3RfZGJfYmFzZV9wbHVnaW5fdjIuVEVTVF9URU5BTlRfSUR9CgpWWExBTl9QTkVUMSA9IHsnbmFtZSc6ICd2eGxhbi1wbmV0MCcsCiAgICAgICAgICAgICAgICd0eXBlJzogbl9jb25zdC5QUk9WSURFUk5FVF9WWExBTiwKICAgICAgICAgICAgICAgJ210dSc6IG5fY29uc3QuREVGQVVMVF9NVFUgLSBuX2NvbnN0LlZYTEFOX01UVV9PVkVSSEVBRCwKICAgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogJ3Z4bGFuIHRlc3QgcHJvdmlkZXIgbmV0d29yayd9CgpWWExBTl9QTkVUMV9SQU5HRTEgPSB7J25hbWUnOiAndnhsYW4tcG5ldDAtMCcsCiAgICAgICAgICAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAndnhsYW4gcmFuZ2UxJywKICAgICAgICAgICAgICAgICAgICAgICdzaGFyZWQnOiBGYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICdtaW5pbXVtJzogMTAsCiAgICAgICAgICAgICAgICAgICAgICAnbWF4aW11bSc6IDEwMCwKICAgICAgICAgICAgICAgICAgICAgICdncm91cCc6ICcyMzkuMC4wLjEnLAogICAgICAgICAgICAgICAgICAgICAgJ3BvcnQnOiA4NDcyLAogICAgICAgICAgICAgICAgICAgICAgJ3R0bCc6IDEsCiAgICAgICAgICAgICAgICAgICAgICAndGVuYW50X2lkJzogdGVzdF9kYl9iYXNlX3BsdWdpbl92Mi5URVNUX1RFTkFOVF9JRH0KClZYTEFOX1BORVQxX1JBTkdFMiA9IHsn"}}]
["aed012edcd7d75a118ae9f78f0a3c4225371365b-2","aed012edcd7d75a118ae9f78f0a3c4225371365b","PHxmaW1fcHJlZml4fD4KCiMhL3Vzci9iaW4vZW52IHB5dGhvbjMKCiMgTUVUQURBVEEgT0YgVEhJUyBUQUxfU0VSVklDRToKCnByb2JsZW0gPSAiM1NBVCIKc2VydmljZSA9ICJldmFsX2ZfcmVwIgphcmdzX2xpc3QgPSBbCiAgICAoJ2snLCBpbnQpLAogICAgKCdzaXplJywgc3RyKSwKICAgICgnbGFuZycsIHN0ciksCiAgICAoJ0lTQVRUWScsIGJvb2wpLApdCgpmcm9tIHN5cyBpbXBvcnQgc3RkZXJyLCBleGl0LCBhcmd2CmltcG9ydCBTQVRfbGliCmZyb20gbXVsdGlsYW5ndWFnZSBpbXBvcnQgRW52LCBMYW5nLCBUQUxjb2xvcnMKaW1wb3J0IHJlCmltcG9ydCBpdGVydG9vbHMKaW1wb3J0IHJhbmRvbQoKCmRlZiBpbnB1dF9pc192YWxpZChzdHJpbmcsIHJlZ2V4KToKICAgIG1hdGNoZXMgPSByZS5tYXRjaChyZWdleCwKICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcpCiAgICBpZiAobWF0Y2hlcyAhPSBOb25lKToKICAgICAgICBpZiAobWF0Y2hlcy5zcGFuKClbMV0gPT0gbGVuKHN0cmluZykpOgogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGVycm9yX3Bvc2l0aW9uID0gbWF0Y2hlcy5zcGFuKClbMV0KICAgIGVsc2U6CiAgICAgICAgZXJyb3JfcG9zaXRpb24gPSAwCiAgICBwcmludCgiXG5cbiMgRXJyb3IgZm91bmQgaW4gdGhlIHN0cmluZyBhdCB0aGUgcG9zaXRpb24ge30iLmZvcm1hdChlcnJvcl9wb3NpdGlvbiksInJlZCIpCiAgICBwcmludCgiIyAiK3N0cmluZ1tlcnJvcl9wb3NpdGlvbjplcnJvcl9wb3NpdGlvbiArIDUwXSwgInllbGxvdyIpCiAgICBwcmludCgiIyBeIiwgInJlZCIpCiAgICByZXR1cm4gRmFsc2UKCgoKRU5WID0gRW52KHByb2JsZW0sIHNlcnZpY2UsIGFyZ3NfbGlzdCkKVEFjID0gVEFMY29sb3JzKEVOVikKTEFORyA9IExhbmcoRU5WLCBUQWMsIGxhbWJkYSBmc3RyaW5nOiAgZXZhbChmImYne2ZzdHJpbmd9JyIpKQppZiBub3QgRU5WWydzaWxlbnQnXToKICAgIHByaW50KExBTkcub3BlbmluZ19tc2csICJncmVlbiIpCgpkZWYgY2hlY2tfaWZfM2NuZihjbmYpOgogICAgZm9yIGRpc2ogaW4gY25mOgogICAgICAgIGlmIGxlbihkaXNqKSA+IDM6CiAgICAgICAgICAgIFRBYy5wcmludCgiXG5cbiMgVGhlIDNDTkYgZl8zIGluc2VydGVkIGlzIG5vdCBhIHZhbGlkIDMtU0FULlxuIgogICAgICAgICAgICAgICAgICAgICAgIiMgSW4gZmFjdCB7fSBjb250YWlucyBtb3JlIHRoYW4gMyBsaXRlcmFscyIuZm9ybWF0KFNBVF9saWIudG9fc3RyaW5nKFtkaXNqXSkpLCAicmVkIikKICAgICAgICAgICAgZXhpdCgxKQogICAgcmV0dXJuIGNuZgoKZGVmIHJvdW5kMV8yKGNuZik6CiAgICBUQWMucHJpbnQoIiMgSGVyZSdzIGEgQ05GLiBDYW4geW91IGdpdmUgbWUgYW4gZXF1aXZhbGVudCAzQ05GIG9uZXM/XG4xXG57fSIuZm9ybWF0KFNBVF9saWIudG9fc3RyaW5nKGNuZikpLCAiZ3JlZW4iKQogICAgVF9mID0gaW5wdXQoKQogICAgaWYgKG5vdCBpbnB1dF9pc192YWxpZChUX2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ14oXHMqXChccyooXHMqIT9ccyooeHx5KVsxLTldKShccypvclxzKiE/XHMqKHh8eSlbMS05XSkqXHMqXCkoXHMqYW5kXHMqXChccyooXHMqIT9ccyooeHx5KVsxLTldKShccypvclxzKiE/XHMqKHh8eSlbMS05XSkqXHMqXCkpKlxzKiknKSk6CiAgICAgICAgZXhpdCgxKQogICAgcmV0dXJuIGNoZWNrX2lmXzNjbmYoU0FUX2xpYi50b19jbmYoVF9mKSkKCmRlZiByb3VuZDMoY2VydCk6CiAgICBUQWMucHJpbnQoIiMgVGhhbmtzIGZvciB5b3VyIENORi4gSGVyZSdzIGEgY2VydGlmaWNhdGUgZm9yIHRoZSBvcmlnaW5hbCBvbmUuIgogICAgIlxuIyBDYW4geW91IGdpdmUgbWUgYSBjZXJ0aWZpY2F0ZSB0aGF0IGlzIHZhbGlkIGZvciB5b3VycyBDTkYgP1xuMlxue30iLmZvcm1hdChjZXJ0KSwgImdyZWVuIikKICAgIGNlcnQgPSBpbnB1dCgpCiAgICBpZiAobm90IGlucHV0X2lzX3ZhbGlkKGNlcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl5ccyp7XHMqXChccyonKHh8eSlbMC05XSsnXHMqLFxzKihUcnVlfEZhbHNlKVxzKlwpXHMqKCxccypcKFxzKicoeHx5KVswLTldKydccyosXHMqKFRydWV8RmFsc2UpXHMqXClccyopKn1ccyoiKSk6CiAgICAgICAgZXhpdCgxKQoKICAgIHJldHVybiBTQVRfbGliLnBhcnNlX2NlcnRpZmljYXRlKGNlcnQpCgpkZWYgcm91bmQ0KGNuZl95ZXMsIGNlcnQpOgogICAgdXNlcnNfeWVzX2NuZiA9IHJvdW5kMV8yKGNuZl95ZXMpCiAgICBUQWMucHJpbnQoIiMgVGhhbmtzIGZvciB5b3VyIENORi4gSGVyZSdzIGFuIGFzc2lnbm1lbnQgdGhhdCBzYXRpc2Z5IHlvdXIgQ05GLlxuIyBDYW4geW91IGdpdmUgbWUgYSBjZXJ0aWZpY2F0ZSB0aGF0IGlzIHZhbGlkIGZvciBteSBDTkYgP1xuM1xue30iLmZvcm1hdChjZXJ0KSwgImdyZWVuIikKICAgIGNlcnQgPSBpbnB1dCgpCjx8ZmltX2hvbGV8PgoKayA9IEVOVlsnayddCnNpemUgPSBFTlZbJ3NpemUnXQoKY25mX2ZpbGUgPSAic2VydmljZXMvc2F0X2RhdGFiYXNlL3t9L3t9L3t9L2NuZi5jbmYiCmNlcnRfZmlsZSA9ICJzZXJ2aWNlcy9zYXRfZGF0YWJhc2UveWVzL3t9L3t9L3NvbHV0aW9uLnR4dCIKCmNuZl9maWxlX3llcyA9IGNuZl9maWxlLmZvcm1hdCgieWVzIixzaXplLGspCmNlcnRfZmlsZV95ZXMgPSBjZXJ0X2ZpbGUuZm9ybWF0KHNpemUsaykKY25mX2ZpbGVfbm8gPSBjbmZfZmlsZS5mb3JtYXQoIm5vIixzaXplLGspCgpjbmZfeWVzID0gU0FUX2xpYi5kaW1hY3NfZmlsZV90b19jbmYoY25mX2ZpbGVfeWVzKQpjbmZfbm8gPSBTQVRfbGliLmRpbWFjc19maWxlX3RvX2NuZihjbmZfZmlsZV9ubykKY2VydF95ZXMgPSBTQVRfbGliLnNhdmVkX2NlcnRpZmljYXRlX3RvX2NuZihjZXJ0X2ZpbGVfeWVzKQoKCnVzZXJzX3llc19jbmYgPSBbXQp1c2Vyc19ub19jbmYgPSBbXQoKdXNlcnNfeWVzX2NuZiA9IHJvdW5kMV8yKGNuZl95ZXMpCnVzZXJzX25vX2NuZiA9IHJvdW5kMV8yKGNuZl9ubykKdXNlcnNfeWVzX2NuZiA9IChyb3VuZDFfMihjbmZfeWVzKSx1c2Vyc195ZXNfY25mKVtyYW5kb20ucmFuZGludCgwLCAxKV0KdXNlcnNfeWVzX2NlcnQgPSByb3VuZDMoY2VydF95ZXMpCgppZihub3QgU0FUX2xpYi5jaGVja19zb2wodXNlcnNfeWVzX2NuZix1c2Vyc195ZXNfY2VydCkpOgogICAgVEFjLnByaW50KCIjIFRoZSBjZXJ0aWZpY2F0ZSB0aGF0IHlvdSBnYXZlIG1lIGlzIG5vdCBhIHZhbGlkIG9uZSBmb3IgeW91ciBDTkYiLCAicmVkIikKICAgIHF1aXQoMCkKCnVzZXJzX3llc19jZXJ0ID0gcm91bmQ0KGNuZl95ZXMsIHVzZXJzX3llc19jZXJ0KQoKaWYobm90IFNBVF9saWIuY2hlY2tfc29sKGNuZl95ZXMsdXNlcnNfeWVzX2NlcnQpKToKICAgIFRBYy5wcmludCgiIyBUaGUgY2VydGlmaWNhdGUgdGhhdCB5b3UgZ2F2ZSBtZSBpcyBub3QgYSB2YWxpZCBvbmUgZm9yIG15IENORiIsICJyZWQiKQogICAgcXVpdCgwKQo8fGZpbV9zdWZmaXh8PgogICAgaWYgKG5vdCBpbnB1dF9pc192YWxpZChUX2YsIl5ccyp7XHMqXChccyonKHh8eSlbMC05XSsnXHMqLFxzKihUcnVlfEZhbHNlKVxzKlwpXHMqKCxccypcKFxzKicoeHx5KVswLTldKydccyosXHMqKFRydWV8RmFsc2UpXHMqXClccyopKn1ccyoiKSk6CiAgICAgICAgZXhpdCgxKQogICAgcmV0dXJuIFNBVF9saWIucGFyc2VfY2VydGlmaWNhdGUoY2VydCkKCjx8ZmltX2VuZHw+"]
["4ecdf176537a9b6b3b4b37a2653099c7687c7cba-1","4ecdf176537a9b6b3b4b37a2653099c7687c7cba","PHxmaW1fcHJlZml4fD4KIiIiClRoZSBFeGNlcHRpb25zIENvZGUKIiIiCgoKY2xhc3MgSW52YWxpZFVzZXIoRXhjZXB0aW9uKToKICAgICIiIgogICAgUmFpc2VkIHdoZW4gYSB1c2VyIGlzIEludmFsaWQKICAgICIiIgogICAgcGFzcwoKCmNsYXNzIEludmFsaWRTdHVkaW8oRXhjZXB0aW9uKToKICAgICIiIgogICAgUmFpc2VkIHdoZW4gYSBzdHVkaW8gaXMgSW52YWxpZAogICAgIiIiCiAgICBwYXNzCgoKY2xhc3MgSW52YWxpZFByb2plY3QoRXhjZXB0aW9uKToKICAgICIiIgo8fGZpbV9ob2xlfD4KCmNsYXNzIEludmFsaWRGb3J1bVRvcGljKEV4Y2VwdGlvbik6CiAgICAiIiIKICAgIFJhaXNlZCB3aGVuIGEgZm9ydW0gdG9waWMgaXMgSW52YWxpZAogICAgIiIiCiAgICBwYXNzCjx8ZmltX3N1ZmZpeHw+CiAgICBSYWlzZWQgd2hlbiBhIHByb2plY3QgaXMgSW52YWxpZAogICAgIiIiCiAgICBwYXNzCgo8fGZpbV9lbmR8Pg=="]
["1197e9b7bfda415fdbb61c0076664c7709b75028-1","1197e9b7bfda415fdbb61c0076664c7709b75028","PHxmaW1fcHJlZml4fD4KZnJvbSBlaW5vcHMgaW1wb3J0IHJlYXJyYW5nZQppbXBvcnQgcmFuZG9tCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgbWF0aAppbXBvcnQgbG9nZ2luZwpmcm9tIFBJTCBpbXBvcnQgSW1hZ2UKCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm5uLmZ1bmN0aW9uYWwgYXMgRgoKZnJvbSB0bDIubGF1bmNoLmxhdW5jaF91dGlscyBpbXBvcnQgZ2xvYmFsX2NmZwpmcm9tIHRsMi5wcm9qLnB5dG9yY2gucHl0b3JjaF9ob29rIGltcG9ydCBWZXJib3NlTW9kZWwKZnJvbSB0bDIucHJvai5weXRvcmNoIGltcG9ydCB0b3JjaF91dGlscwoKCmNsYXNzIEZpTE1MYXllckVxdWFsRkMobm4uTW9kdWxlKToKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgaW5wdXRfZGltLAogICAgICAgICAgICAgICBoaWRkZW5fZGltKToKICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgIyBzZWxmLmxheWVyID0gbm4uTGluZWFyKGlucHV0X2RpbSwgaGlkZGVuX2RpbSkKICAgIHNlbGYubGF5ZXIgPSBFcXVhbExpbmVhcihpbnB1dF9kaW0sIGhpZGRlbl9kaW0pCiAgICBwYXNzCgogIGRlZiBmb3J3YXJkKHNlbGYsCiAgICAgICAgICAgICAgeCwKICAgICAgICAgICAgICBmcmVxLAogICAgICAgICAgICAgIHBoYXNlX3NoaWZ0KToKICAgICIiIgoKICAgIDpwYXJhbSB4OiAoYiwgbnVtX3BvaW50cywgZCkKICAgIDpwYXJhbSBmcmVxOiAoYiwgZCkKICAgIDpwYXJhbSBwaGFzZV9zaGlmdDogKGIsIGQpCiAgICA6cmV0dXJuOgogICAgIiIiCgogICAgeCA9IHNlbGYubGF5ZXIoeCkKICAgIGZyZXEgPSBmcmVxLnVuc3F1ZWV6ZSgxKS5leHBhbmRfYXMoeCkKICAgIHBoYXNlX3NoaWZ0ID0gcGhhc2Vfc2hpZnQudW5zcXVlZXplKDEpLmV4cGFuZF9hcyh4KQogICAgb3V0ID0gdG9yY2guc2luKGZyZXEgKiB4ICsgcGhhc2Vfc2hpZnQpCiAgICByZXR1cm4gb3V0CgoKY2xhc3MgTW9kdWxhdGVkX0ZDX0NvbnYobm4uTW9kdWxlKToKICBkZWYgX19pbml0X18oCiAgICAgICAgc2VsZiwKICAgICAgICBpbl9jaGFubmVsLAogICAgICAgIG91dF9jaGFubmVsLAogICAgICAgIGtlcm5lbF9zaXplPTEsCiAgICAgICAgc3R5bGVfZGltPU5vbmUsCiAgICAgICAgdXNlX3N0eWxlX2ZjPUZhbHNlLAogICAgICAgIGRlbW9kdWxhdGU9VHJ1ZSwKICAgICAgICBhY3RpdmF0aW9uPU5vbmUpOgogICAgIiIiCgogICAgOnBhcmFtIGluX2NoYW5uZWw6CiAgICA6cGFyYW0gb3V0X2NoYW5uZWw6CiAgICA6cGFyYW0ga2VybmVsX3NpemU6CiAgICA6cGFyYW0gc3R5bGVfZGltOiA9aW5fY2hhbm5lbAogICAgOnBhcmFtIHVzZV9zdHlsZV9mYzoKICAgIDpwYXJhbSBkZW1vZHVsYXRlOgogICAgOnBhcmFtIGFjdGl2YXRpb246IEZ1c2VkTGVha3lSZUxVCiAgICAiIiIKICAgIHN1cGVyKCkuX19pbml0X18oKQoKICAgIHNlbGYuZXBzID0gMWUtOAogICAgc2VsZi5pbl9jaGFubmVsID0gaW5fY2hhbm5lbAogICAgc2VsZi5vdXRfY2hhbm5lbCA9IG91dF9jaGFubmVsCiAgICBzZWxmLmtlcm5lbF9zaXplID0ga2VybmVsX3NpemUKICAgIHNlbGYuc3R5bGVfZGltID0gc3R5bGVfZGltCiAgICBzZWxmLnVzZV9zdHlsZV9mYyA9IHVzZV9zdHlsZV9mYwogICAgc2VsZi5kZW1vZHVsYXRlID0gZGVtb2R1bGF0ZQogICAgc2VsZi5hY3RpdmF0aW9uID0gYWN0aXZhdGlvbgoKICAgIGZhbl9pbiA9IGluX2NoYW5uZWwgKiBrZXJuZWxfc2l6ZSAqKiAyCiAgICBzZWxmLnNjYWxlID0gMSAvIG1hdGguc3FydChmYW5faW4pCiAgICBzZWxmLnBhZGRpbmcgPSBrZXJuZWxfc2l6ZSAvLyAyCgogICAgc2VsZi53ZWlnaHQgPSBubi5QYXJhbWV0ZXIoCiAgICAgIHRvcmNoLnJhbmRuKDEsIG91dF9jaGFubmVsLCBpbl9jaGFubmVsLCBrZXJuZWxfc2l6ZSwga2VybmVsX3NpemUpCiAgICApCiAgICBzZWxmLmJpYXMgPSBubi5QYXJhbWV0ZXIodG9yY2guemVyb3MoMSwgb3V0X2NoYW5uZWwsIDEsIDEpKQoKICAgIGlmIHVzZV9zdHlsZV9mYzoKICAgICAgc2VsZi5tb2R1bGF0aW9uID0gRXF1YWxMaW5lYXIoc3R5bGVfZGltLCBpbl9jaGFubmVsLCBiaWFzX2luaXQ9MCkKICAgIGVsc2U6CiAgICAgIHNlbGYuc3R5bGVfZGltID0gaW5fY2hhbm5lbAoKICAgIGlmIGFjdGl2YXRpb24gaXMgbm90IE5vbmU6CiAgICAgIHNlbGYuYWN0X2xheWVyID0gbm4uTGVha3lSZUxVKDAuMikKICAgIHBhc3MKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICgKICAgICAgZid7c2VsZi5fX2NsYXNzX18uX19uYW1lX199KHtzZWxmLmluX2NoYW5uZWx9LCB7c2VsZi5vdXRfY2hhbm5lbH0sIHtzZWxmLmtlcm5lbF9zaXplfSwgJwogICAgICBmJ3VzZV9zdHlsZV9mYz17c2VsZi51c2Vfc3R5bGVfZmN9LCBhY3RpdmF0aW9uPXtzZWxmLmFjdGl2YXRpb259KScKICAgICkKCiAgZGVmIGZvcndhcmQoc2VsZiwKICAgICAgICAgICAgICB4LAogICAgICAgICAgICAgIHN0eWxlKToKICAgICIiIgoKICAgIDpwYXJhbSBpbnB1dDogKGIsIGluX2MsIGgsIHcpLCAoYiwgaW5fYyksIChiLCBuLCBpbl9jKQogICAgOnBhcmFtIHN0eWxlOiAoYiwgaW5fYykKICAgIDpyZXR1cm46CiAgICAiIiIKICAgIGlmIHguZGltKCkgPT0gMjoKICAgICAgaW5wdXQgPSByZWFycmFuZ2UoeCwgImIgYyAtPiBiIGMgMSAxIikKICAgIGVsaWYgeC5kaW0oKSA9PSAzOgogICAgICBpbnB1dCA9IHJlYXJyYW5nZSh4LCAiYiBuIGMgLT4gYiBjIG4gMSIpCiAgICBlbGlmIHguZGltKCkgPT0gNDoKICAgICAgaW5wdXQgPSB4CiAgICBlbHNlOgogICAgICBhc3NlcnQgMAoKICAgIGJhdGNoLCBpbl9jaGFubmVsLCBoZWlnaHQsIHdpZHRoID0gaW5wdXQuc2hhcGUKCiAgICBpZiBzZWxmLnVzZV9zdHlsZV9mYzoKICAgICAgc3R5bGUgPSBzZWxmLm1vZHVsYXRpb24oc3R5bGUpLnZpZXcoYmF0Y2gsIDEsIGluX2NoYW5uZWwsIDEsIDEpCiAgICAgIHN0eWxlID0gc3R5bGUgKyAxLgogICAgZWxzZToKICAgICAgc3R5bGUgPSByZWFycmFuZ2Uoc3R5bGUsICdiIGMgLT4gYiAxIGMgMSAxJykKICAgICAgc3R5bGUgPSBzdHlsZSArIDEuCgogICAgd2VpZ2h0ID0gc2VsZi5zY2FsZSAqIHNlbGYud2VpZ2h0ICogc3R5bGUKICAgIGlmIHNlbGYuZGVtb2R1bGF0ZToKICAgICAgZGVtb2QgPSB0b3JjaC5yc3FydCh3ZWlnaHQucG93KDIpLnN1bShbMiwgMywgNF0pICsgc2VsZi5lcHMpCiAgICAgIHdlaWdodCA9IHdlaWdodCAqIGRlbW9kLnZpZXcoYmF0Y2gsIHNlbGYub3V0X2NoYW5uZWwsIDEsIDEsIDEpCgogICAgd2VpZ2h0ID0gd2VpZ2h0LnZpZXcoCiAgICAgIGJhdGNoICogc2VsZi5vdXRfY2hhbm5lbCwgaW5fY2hhbm5lbCwgc2VsZi5rZXJuZWxfc2l6ZSwgc2VsZi5rZXJuZWxfc2l6ZQogICAgKQoKICAgIGlucHV0ID0gaW5wdXQucmVzaGFwZSgxLCBiYXRjaCAqIGluX2NoYW5uZWwsIGhlaWdodCwgd2lkdGgpCiAgICBvdXQgPSBGLmNvbnYyZChpbnB1dCwgd2VpZ2h0LCBwYWRkaW5nPXNlbGYucGFkZGluZywgZ3JvdXBzPWJhdGNoKQogICAgXywgXywgaGVpZ2h0LCB3aWR0aCA9IG91dC5zaGFwZQogICAgb3V0ID0gb3V0LnZpZXcoYmF0Y2gsIHNlbGYub3V0X2NoYW5uZWwsIGhlaWdodCwgd2lkdGgpCgogICAgb3V0ID0gb3V0ICsgc2VsZi5iaWFzCgogICAgaWYgc2VsZi5hY3RpdmF0aW9uIGlzIG5vdCBOb25lOgogICAgICBvdXQgPSBzZWxmLmFjdF9sYXllcihvdXQpCgogICAgaWYgeC5kaW0oKSA9PSAyOgogICAgICBvdXQgPSByZWFycmFuZ2Uob3V0LCAiYiBjIDEgMSAtPiBiIGMiKQogICAgZWxpZiB4LmRpbSgpID09IDM6CiAgICAgIG91dCA9IHJlYXJyYW5nZShvdXQsICJiIGMgbiAxIC0+IGIgbiBjIikKCiAgICByZXR1cm4gb3V0CgoKCmNsYXNzIFBpeGVsTm9ybShubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCgo8fGZpbV9lbmR8Pg=="]
["d6e8d22e7f337c0021292b1ae34881b0cd3a67c3-3","d6e8d22e7f337c0021292b1ae34881b0cd3a67c3","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KCmZyb20gdXNlcnB5cGkubW9kZWxzIGltcG9ydCAqCmZyb20gdXNlcnB5cGkuc2V0dGluZ3MgaW1wb3J0IE1JUlJPUklORwoKY2xhc3MgUGFja2FnZUFkbWluKGFkbWluLk1vZGVsQWRtaW4pOgogICAgbGlzdF9kaXNwbGF5ID0gKCduYW1lJywgJ293bmVyJywpCiAgICBzZWFyY2hfZmllbGRzID0gKCduYW1lJywpCgphZG1pbi5zaXRlLnJlZ2lzdGVyKFBhY2thZ2UsIFBhY2thZ2VBZG1pbikKYWRtaW4uc2l0ZS5yZWdpc3RlcihSZWxlYXNlKQphZG1pbi5zaXRlLnJlZ2lzdGVyKENsYXNzaWZpZXIpCmFkbWluLnNpdGUucmVnaXN0ZXIoRGlzdHJpYnV0aW9uKQoKaWYgTUlSUk9SSU5HOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBhZG1pbi5zaXRlLnJlZ2lzdGVyKE1hc3RlckluZGV4KQogICAgYWRtaW4uc2l0ZS5yZWdpc3RlcihNaXJyb3JMb2cpCjx8ZmltX2VuZHw+"]
["4e8cfa281f45127eea85400eabcfd07b51efe421-2","4e8cfa281f45127eea85400eabcfd07b51efe421","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCkNyZWF0ZWQgb24gRnJpIEF1ZyAzMCAwOTo1NjozNiAyMDE5CgpAYXV0aG9yOiBSdXBlcnQuVGhvbWFzCgpwcmVwYXJlX2RhdGFzZXQucHkgLSBmb3IgdHJhaW5pbmcgRENHQU4gdG8gZ2VuZXJhdGUgY2F0IGZhY2VzCgpEb3dubG9hZCBUaG9tYXMgU2ltb25pbmkncyBDYXQgZGF0YXNldDoKIC0gZG93bmxvYWQgLnppcCBmaWxlCiAtIGRlY29tcHJlc3MKIC0gY29sbGF0ZSB0aGUgZmlsZXMgaW50byBhIHNpbmdsZSBmb2xkZXIKIC0gcmVtb3ZlIGFueSBvdXRsaWVycywgdW51c3VhbCBpbWFnZXMsIG9uZXMgd2hlcmUgdGhlIGNhdCBpcyBhdCBhIGZ1bm55IGFuZ2xlCiAtIHNlcGFyYXRlIGJ5IHNpemUKIC0gY3JvcCB0byBmYWNlCgpCYXNlZCBvbiBCYXNoIHNjcmlwdCB0YWtlbiBmcm9tIEFsZXhpYSBKb2xpY29ldXIgTWFydGluZWF1J3Mgd29yayBodHRwczovL2Fqb2xpY29ldXIud29yZHByZXNzLmNvbS9jYXRzLwpJbWFnZSBwcmUtcHJvY2Vzc2luZyBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL21pY3JvZS9hbmdvcmEtYmx1ZS9ibG9iL21hc3Rlci9jYXNjYWRlX3RyYWluaW5nL2Rlc2NyaWJlLnB5IGJ5IEVyaWsgSG92bGFuZAoKIiIiCgojIFN0YW5kYXJkIGxpYnJhcnkKaW1wb3J0IG9zCmltcG9ydCBzeXMKaW1wb3J0IHVybGxpYi5yZXF1ZXN0CmltcG9ydCB6aXBmaWxlCmltcG9ydCBzaHV0aWwKaW1wb3J0IGdsb2IKCiMgT3RoZXIgcGFja2FnZXMKaW1wb3J0IGN2Mgpmcm9tIHRxZG0gaW1wb3J0IHRxZG0KCiMgTW9kdWxlcwpmcm9tIGNhdF9pbWFnZV9wcmVwcm9jZXNzaW5nIGltcG9ydCBwcmVwcm9jZXNzQ2F0RmFjZQoKIyBEYXRhc2V0IGZpbGVzIHNvdXJjZQp1cmwgPSAnaHR0cDovL3d3dy5zaW1vbmluaXRob21hcy5jb20vZGF0YS9jYXRzLnppcCcKemlwX2ZpbGVuYW1lID0gJ2NhdHMuemlwJyAgIyBOLkIuIHRoZXJlIGFyZSBhY3R1YWxseSB0d28gZmlsZXMsIG9uZSBpbnNpZGUgdGhlIG90aGVyCgp0ZW1wX2ZvbGRlciA9ICdkYXRhc2V0X3RlbXAnCgpkYXRhc2V0X3Jvb3RfZm9sZGVyID0gJ2NhdF9kYXRhc2V0JwppbWFnZXMxX3BhdGggPSBvcy5wYXRoLmpvaW4oZGF0YXNldF9yb290X2ZvbGRlciwnY2F0c19iaWdnZXJfdGhhbl82NHg2NCcpCmltYWdlczJfcGF0aCA9IG9zLnBhdGguam9pbihkYXRhc2V0X3Jvb3RfZm9sZGVyLCdjYXRzX2JpZ2dlcl90aGFuXzEyOHgxMjgnKQogICAgCiMgTWFrZSBmb2xkZXIgc3RydWN0dXJlCmZvciBmb2xkZXJfcGF0aCBpbiBbdGVtcF9mb2xkZXIsIGRhdGFzZXRfcm9vdF9mb2xkZXIsIGltYWdlczFfcGF0aCwgaW1hZ2VzMl9wYXRoXToKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmb2xkZXJfcGF0aCk6CiAgICAgICAgb3MubWtkaXIoZm9sZGVyX3BhdGgpCgojJSUgRG93bmxvYWQgQ2F0cyBkYXRhc2V0LCBpZiByZXF1aXJlZApjbGFzcyBEb3dubG9hZFByb2dyZXNzQmFyKHRxZG0pOgogICAgZGVmIHVwZGF0ZV90byhzZWxmLCBiPTEsIGJzaXplPTEsIHRzaXplPU5vbmUpOgogICAgICAgIGlmIHRzaXplIGlzIG5vdCBOb25lOgogICAgICAgICAgICBzZWxmLnRvdGFsID0gdHNpemUKICAgICAgICBzZWxmLnVwZGF0ZShiICogYnNpemUgLSBzZWxmLm4pCgoKaWYgbm90IG9zLnBhdGguZXhpc3RzKHppcF9maWxlbmFtZSk6CiAgICBwcmludCgnQmVnaW5uaW5nIGZpbGUgZG93bmxvYWQ6JykKICAgIAogICAgd2l0aCBEb3dubG9hZFByb2dyZXNzQmFyKHVuaXQ9J0InLCB1bml0X3NjYWxlPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaXRlcnM9MSwgZGVzYz11cmwuc3BsaXQoJy8nKVstMV0pIGFzIHQ6CiAgICAgICAgdXJsbGliLnJlcXVlc3QudXJscmV0cmlldmUodXJsLCBmaWxlbmFtZT16aXBfZmlsZW5hbWUsIHJlcG9ydGhvb2s9dC51cGRhdGVfdG8pCgojIyBVbnppcCBkYXRhc2V0CnByaW50KCdVbnppcHBpbmcgZmlsZXMuLi4nKQojIEZpcnN0IFpJUCBmaWxlCnRyeToKICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKHppcF9maWxlbmFtZSwgJ3InKSBhcyB6aXBfcmVmOgogICAgICAgIHppcF9yZWYuZXh0cmFjdGFsbCh0ZW1wX2ZvbGRlcikKZXhjZXB0OgogICAgc3lzLmV4aXQoJ0ZhaWxlZCB0aGUgZmlyc3QgaGFsZiBvZiB1bnppcHBpbmcgdGhlIGRhdGFzZXQnKQoKIyBTZWNvbmQgWmlwIGZpbGUKdHJ5OgogICAgc2Vjb25kX3ppcF9maWxlX2xvY2F0aW9uID0gb3MucGF0aC5qb2luKHRlbXBfZm9sZGVyLCB6aXBfZmlsZW5hbWUpCiAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShzZWNvbmRfemlwX2ZpbGVfbG9jYXRpb24sICdyJykgYXMgemlwX3JlZjoKICAgICAgICB6aXBfcmVmLmV4dHJhY3RhbGwodGVtcF9mb2xkZXIpCmV4Y2VwdDoKICAgIHN5cy5leGl0KCdGYWlsZWQgdGhlIHNlY29uZCBoYWxmIG9mIHVuemlwcGluZyB0aGUgZGF0YXNldCcpCgojIyBDb3B5IGZpbGVzCnByaW50KCdBbmFseXNpbmcgZmlsZXMuLi4nKQojIFJlbW92aW5nIG91dGxpZXJzCiMgQ29ycnVwdGVkLCBkcmF3aW5ncywgYmFkbHkgY3JvcHBlZCwgaW52ZXJ0ZWQsIGltcG9zc2libGUgdG8gdGVsbCBpdCdzIGEgY2F0LCBibG9ja2VkIGZhY2UKaW1hZ2VfaWdub3JlX2xpc3QgPSBbJ3JtIDAwMDAwMDA0XzAwNy5qcGcnLCAnMDAwMDAwMDdfMDAyLmpwZycsICcwMDAwMDA0NV8wMjguanBnJywgCiAgICAgICAgICAgICAgICAgICAgICcwMDAwMDA1MF8wMTQuanBnJywgJzAwMDAwMDU2XzAxMy5qcGcnLCAnMDAwMDAwNTlfMDAyLmpwZycsIAogICAgICAgICAgICAgICAgICAgICAnMDAwMDAxMDhfMDA1LmpwZycsICcwMDAwMDEyMl8wMjMuanBnJywgJzAwMDAwMTI2XzAwNS5qcGcnLCAKICAgICAgICAgICAgICAgICAgICAgJzAwMDAwMTMyXzAxOC5qcGcnLCAnMDAwMDAxNDJfMDI0LmpwZycsICcwMDAwMDE0Ml8wMjkuanBnJywgCiAgICAgICAgICAgICAgICAgICAgICcwMDAwMDE0M18wMDMuanBnJywgJzAwMDAwMTQ1XzAyMS5qcGcnLCAnMDAwMDAxNjZfMDIxLmpwZycsIAogICAgICAgICAgICAgICAgICAgICAnMDAwMDAxNjlfMDIxLmpwZycsICcwMDAwMDE4Nl8wMDIuanBnJywgJzAwMDAwMjAyXzAyMi5qcGcnLCAKICAgICAgICAgICAgICAgICAgICAgJzAwMDAwMjA4XzAyMy5qcGcnLCAnMDAwMDAyMTBfMDAzLmpwZycsICcwMDAwMDIyOV8wMDUuanBnJywgCiAgICAgICAgICAgICAgICAgICAgICcwMDAwMDIzNl8wMjUuanBnJywgJzAwMDAwMjQ5XzAxNi5qcGcnLCAnMDAwMDAyNTRfMDEzLmpwZycsIAogICAgICAgICAgICAgICAgICAgICAnMDAwMDAyNjBfMDE5LmpwZycsICcwMDAwMDI2MV8wMjkuanBnJywgJzAwMDAwMjY1XzAyOS5qcGcnLCAKICAgICAgICAgICAgICAgICAgICAgJzAwMDAwMjcxXzAyMC5qcGcnLCAnMDAwMDAyODJfMDI2LmpwZycsICcwMDAwMDMxNl8wMDQuanBnJywgCiAgICAgICAgICAgICAgICAgICAgICcwMDAwMDM1Ml8wMTQuanBnJywgJzAwMDAwNDAwXzAyNi5qcGcnLCAnMDAwMDA0MDZfMDA2LmpwZycsIAogICAgICAgICAgICAgICAgICAgICAnMDAwMDA0MzFfMDI0LmpwZycsICcwMDAwMDQ0M18wMjcuanBnJywgJzAwMDAwNTAyXzAxNS5qcGcnLCAKICAgICAgICAgICAgICAgICAgICAgJzAwMDAwNTA0XzAxMi5qcGcnLCAnMDAwMDA1MTBfMDE5LmpwZycsICcwMDAwMDUxNF8wMTYuanBnJywgCiAgICAgICAgICAgICAgICAgICAgICcwMDAwMDUxNF8wMDguanBnJywgJzAwMDAwNTE1XzAyMS5qcGcnLCAnMDAwMDA1MTlfMDE1LmpwZycsIAogICAgICAgICAgICAgICAgICAgICAnMDAwMDA1MjJfMDE2LmpwZycsICcwMDAwMDUyM18wMjEuanBnJywgJzAwMDAwNTI5XzAwNS5qcGcnLCAKICAgICAgICAgICAgICAgICAgICAgJzAwMDAwNTU2XzAyMi5qcGcnLCAnMDAwMDA1NzRfMDExLmpwZycsICcwMDAwMDU4MV8wMTguanBnJywgCiAgICAgICAgICAgICAgICAgICAgICcwMDAwMDU4Ml8wMTEuanBnJywgJzAwMDAwNTg4XzAxNi5qcGcnLCAnMDAwMDA1ODhfMDE5LmpwZycsIAogICAgICAgICAgICAgICAgICAgICAnMDAwMDA1OTBfMDA2LmpwZycsICcwMDAwMDU5Ml8wMTguanBnJywgJzAwMDAwNTkzXzAyNy5qcGcnLCAKICAgICAgICAgICAgICAgICAgICAgJzAwMDAwNjE3XzAxMy5qcGcnLCAnMDAwMDA2MThfMDE2LmpwZycsICcwMDAwMDYxOV8wMjUuanBnJywgCiAgICAgICAgICAgICAgICAgICAgICcwMDAwMDYyMl8wMTkuanBnJywgJzAwMDAwNjIyXzAyMS5qcGcnLCAnMDAwMDA2MzBfMDA3LmpwZycsIAogICAgICAgICAgICAgICAgICAgICAnMDAwMDA2NDVfMDE2LmpwZycsICcwMDAwMDY1Nl8wMTcuanBnJywgJzAwMDAwNjU5XzAwMC5qcGcnLCAKICAgICAgICAgICAgICAgICAgICAgJzAwMDAwNjYwXzAyMi5qcGcnLCAnMDAwMDA2NjBfMDI5LmpwZycsICcwMDAwMDY2MV8wMTYuanBnJywgCiAgICAgICAgICAgICAgICAgICAgICcwMDAwMDY2M18wMDUuanBnJywgJzAwMDAwNjcyXzAyNy5qcGcnLCAnMDAwMDA2NzNfMDI3LmpwZycsIAogICAgICAgICAgICAgICAgICAgICAnMDAwMDA2NzVfMDIzLmpwZycsICcwMDAwMDY5Ml8wMDYuanBnJywgJzAwMDAwODAwXzAxNy5qcGcnLCAKICAgICAgICAgICAgICAgICAgICAgJzAwMDAwODA1XzAwNC5qcGcnLCAnMDAwMDA4MDdfMDIwLmpwZycsICcwMDAwMDgyM18wMTAuanBnJywgCiAgICAgICAgICAgICAgICAgICAgICcwMDAwMDgyNF8wMTAuanBnJywgJzAwMDAwODM2XzAwOC5qcGcnLCAnMDAwMDA4NDNfMDIxLmpwZycsIAogICAgICAgICAgICAgICAgICAgICAnMDAwMDA4NTBfMDI1LmpwZycsICcwMDAwMDg2Ml8wMTcuanBnJywgJzAwMDAwODY0XzAwNy5qcGcnLCAKICAgICAgICAgICAgICAgICAgICAgJzAwMDAwODY1XzAxNS5qcGcnLCAnMDAwMDA4NzBfMDA3LmpwZycsICcwMDAwMDg3N18wMTQuanBnJywgCiAgICAgICAgICAgICAgICAgICAgICcwMDAwMDg4Ml8wMTMuanBnJywgJzAwMDAwODg3XzAyOC5qcGcnLCAnMDAwMDA4OTNfMDIyLmpwZycsIAogICAgICAgICAgICAgICAgICAgICAnMDAwMDA5MDdfMDEzLmpwZycsICcwMDAwMDkyMV8wMjkuanBnJywgJzAwMDAwOTI5XzAyMi5qcGcnLCAKICAgICAgICAgICAgICAgICAgICAgJzAwMDAwOTM0XzAwNi5qcGcnLCAnMDAwMDA5NjBfMDIxLmpwZycsICcwMDAwMDk3Nl8wMDQuanBnJywgCiAgICAgICAgICAgICAgICAgICAgICcwMDAwMDk4N18wMDAuanBnJywgJzAwMDAwOTkzXzAwOS5qcGcnLCAnMDAwMDEwMDZfMDE0LmpwZycsIAogICAgICAgICAgICAgICAgICAgICAnMDAwMDEwMDhfMDEzLmpwZycsICcwMDAwMTAxMl8wMTkuanBnJywgJzAwMDAxMDE0XzAwNS5qcGcnLCAKICAgICAgICAgICAgICAgICAgICAgJzAwMDAxMDIwXzAxNy5qcGcnLCAnMDAwMDEwMzlfMDA4LmpwZycsICcwMDAwMTAzOV8wMjMuanBnJywgCiAgICAgICAgICAgICAgICAgICAgICcwMDAwMTA0OF8wMjkuanBnJywgJzAwMDAxMDU3XzAwMy5qcGcnLCAnMDAwMDEwNjhfMDA1LmpwZycsIAogICAgICAgICAgICAgICAgICAgICAnMDAwMDExMTNfMDE1LmpwZycsICcwMDAwMTE0MF8wMDcuanBnJywgJzAwMDAxMTU3XzAyOS5qcGcnLCAKICAgICAgICAgICAgICAgICAgICAgJzAwMDAxMTU4XzAwMC5qcGcnLCAnMDAwMDExNjdfMDA3LmpwZycsICcwMDAwMTE4NF8wMDcuanBnJywgCiAgICAgICAgICAgICAgICAgICAgICcwMDAwMTE4OF8wMTkuanBnJywgJzAwMDAxMjA0XzAyNy5qcGcnLCAnMDAwMDEyMDVfMDIyLmpwZycsIAogICAgICAgICAgICAgICAgICAgICAnMDAwMDEyMTlfMDA1LmpwZycsICcwMDAwMTI0M18wMTAuanBnJywgJzAwMDAxMjYxXzAwNS5qcGcnLCAKICAgICAgICAgICAgICAgICAgICAgJzAwMDAxMjcwXzAyOC5qcGcnLCAnMDAwMDEyNzRfMDA2LmpwZycsICcwMDAwMTI5M18wMTUuanBnJywgCiAgICAgICAgICAgICAgICAgICAgICcwMDAwMTMxMl8wMjEuanBnJywgJzAwMDAxMzY1XzAyNi5qcGcnLCAnMDAwMDEzNzJfMDA2LmpwZycsIAogICAgICAgICAgICAgICAgICAgICAnMDAwMDEzNzlfMDE4LmpwZycsICcwMDAwMTM4OF8wMjQuanBnJywgJzAwMDAxMzg5XzAyNi5qcGcnLCAKICAgICAgICAgICAgICAgICAgICAgJzAwMDAxNDE4XzAyOC5qcGcnLCAnMDAwMDE0MjVfMDEyLmpwZycsICcwMDAwMTQzMV8wMDEuanBnJywgCiAgICAgICAgICAgICAgICAgICAgICcwMDAwMTQ1Nl8wMTguanBnJywgJzAwMDAxNDU4XzAwMy5qcGcnLCAnMDAwMDE0NjhfMDE5LmpwZycsIAogICAgICAgICAgICAgICAgICAgICAnMDAwMDE0NzVfMDA5LmpwZycsICcwMDAwMTQ4N18wMjAuanBnJywgJzAwMDAwMDAzXzAxOS5qcGcnXQoKIyBnZW5lcmF0ZSBsaXN0IG9mIHNvdXJjZS9kZXN0aW5hdGlvbiBjb3B5IHBhaXJzCmZpbGVfY29weV9zcmNfZGVzdCA9IFtdCmRhdGFzZXRfc3ViZm9sZGVycyA9IFtuYW1lIGZvciBuYW1lIGluIG9zLmxpc3RkaXIodGVtcF9mb2xkZXIpIGlmIG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHRlbXBfZm9sZGVyLCBuYW1lKSldCmZvciBzdWJmb2xkZXIgaW4gZGF0YXNldF9zdWJmb2xkZXJzOgogICAgdGhpc19mb2xkZXJfcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wX2ZvbGRlciwgc3ViZm9sZGVyKQogICAgc3JjX2ZpbGVzID0gb3MubGlzdGRpcih0aGlzX2ZvbGRlcl9wYXRoKQogICAgZm9yIGZpbGVfbmFtZSBpbiBzcmNfZmlsZXM6CiAgICAgICAgIyBnZXQgaW1hZ2UgZmlsZXMKICAgICAgICBzcmNfZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4odGhpc19mb2xkZXJfcGF0aCwgZmlsZV9uYW1lKQogICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHNyY19maWxlcGF0aCkgYW5kIGZpbGVfbmFtZS5lbmRzd2l0aCgnLmpwZycpIGFuZCAoZmlsZV9uYW1lIG5vdCBpbiBpbWFnZV9pZ25vcmVfbGlzdCk6CiAgICAgICAgICAgICMgY2hlY2sgaWYgZGF0YWZpbGUgYWxzbyBleGlzdHMKICAgICAgICAgICAgZGF0YV9maWxlbmFtZSA9IGZpbGVfbmFtZSArICcuY2F0JwogICAgICAgICAgICBzcmNfZGF0YV9maWxlcGF0aCA9IG9zLnBhdGguam9pbih0aGlzX2ZvbGRlcl9wYXRoLCBkYXRhX2ZpbGVuYW1lKQogICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShzcmNfZGF0YV9maWxlcGF0aCk6CiAgICAgICAgICAgICAgICAjIGFkZCBkYXRhIGZpbGUgdG8gY29weSBsaXN0CiAgICAgICAgICAgICAgICBkZXN0X2RhdGFfZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4oZGF0YXNldF9yb290X2ZvbGRlciwgZGF0YV9maWxlbmFtZSkKICAgICAgICAgICAgICAgIGZpbGVfY29weV9zcmNfZGVzdC5hcHBlbmQoKHNyY19kYXRhX2ZpbGVwYXRoLCBkZXN0X2RhdGFfZmlsZXBhdGgpKQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAjIGFkZCBpbWFnZSBmaWxlIHRvIGNvcHkgbGlzdAogICAgICAgICAgICAgICAgZGVzdF9pbWdfZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4oZGF0YXNldF9yb290X2ZvbGRlciwgZmlsZV9uYW1lKQogICAgICAgICAgICAgICAgZmlsZV9jb3B5X3NyY19kZXN0LmFwcGVuZCgoc3JjX2ZpbGVwYXRoLCBkZXN0X2ltZ19maWxlcGF0aCkpCgojIGNvcHkgZmlsZXMgd2l0aCBwcm9ncmVzcyBiYXIKcHJpbnQoJ0NvcHlpbmcgZmlsZXMuLi4nKQpmb3Igc3JjLCBkZXN0IGluIHRxZG0oZmlsZV9jb3B5X3NyY19kZXN0KToKICAgIHNodXRpbC5jb3B5ZmlsZShzcmMsIGRlc3QpCiAgICAKIyUlIFByb2Nlc3MgaW1hZ2UgZmlsZXMKcHJpbnQoJ1J1bm5pbmcgaW1hZ2UgcHJlLXByb2Nlc3NpbmcuLi4nKQojY2F0X2ltYWdlX3ByZXByb2Nlc3NpbmcuZGVzY3JpYmVQb3NpdGl2ZSgpCmltYWdlX2ZpbGVzID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihkYXRhc2V0X3Jvb3RfZm9sZGVyLCAnKi5qcGcnKSkKd2l0aCB0cWRtKHRvdGFsPWxlbihpbWFnZV9maWxlcykpIGFzIHBiYXI6Cglmb3IgYyxpbWFnZVBhdGggaW4gZW51bWVyYXRlKGltYWdlX2ZpbGVzKToKCgkJIyBPcGVuIHRoZSAnLmNhdCcgYW5ub3RhdGlvbiBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGltYWdlLgoJCWlucHV0ID0gb3BlbignJXMuY2F0JyAlIGltYWdlUGF0aCwgJ3InKQoJCSMgUmVhZCB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGNhdCBmZWF0dXJlcyBmcm9tIHRoZSBmaWxlLiAKICAgICAgICAjIERpc2NhcmQgdGhlIGZpcnN0IG51bWJlciwgd2hpY2ggaXMgdGhlIG51bWJlciBvZiBmZWF0dXJlcy4KCQljb29yZHMgPSBbaW50KGkpIGZvciBpIGluIGlucHV0LnJlYWRsaW5lKCkuc3BsaXQoKVsxOl1dCgkJIyBSZWFkIHRoZSBpbWFnZS4KCQlpbWFnZSA9IGN2Mi5pbXJlYWQoaW1hZ2VQYXRoKQoKCQkjIFN0cmFpZ2h0ZW4gYW5kIGNyb3AgdGhlIGNhdCBmYWNlLgoJCWNyb3AgPSBwcmVwcm9jZXNzQ2F0RmFjZShjb29yZHMsIGltYWdlKQoKCQlpZiBjcm9wIGlzIE5vbmU6CgkJCXByaW50KCdGYWlsZWQgdG8gcHJlcHJvY2VzcyBpbWFnZSBhdCB7fScuZm9ybWF0KGltYWdlUGF0aCksIGZpbGU9c3lzLnN0ZGVycikKCQkJY29udGludWUKCgkJIyBTYXZlIHRoZSBjcm9wIHRvIGZvbGRlcnMgYmFzZWQgb24gc2l6ZQoJCWgsIHcsIGNvbG9ycyA9IGNyb3Auc2hhcGUKCQlpZiBtaW4oaCx3KSA+PSA2NDoKCQkJUGF0aDEgPSBpbWFnZVBhdGgucmVwbGFjZShkYXRhc2V0X3Jvb3RfZm9sZGVyLCBpbWFnZXMxX3BhdGgpCgkJCWN2Mi5pbXdyaXRlKFBhdGgxLCBjcm9wKQoJCWlmIG1pbihoLHcpID49IDEyODoKCQkJUGF0aDIgPSBpbWFnZVBhdGgucmVwbGFjZShkYXRhc2V0X3Jvb3RfZm9sZGVyLCBpbWFnZXMyX3BhdGgpCgkJCWN2Mi5pbXdyaXRlKFBhdGgyLCBjcm9wKQoJCXBiYXIudXBkYXRlKDEpCgojJSUKICAgICAgICAKIyByZW1vdmUgdGVtcG9yYXJ5IGZvbGRlciBhbmQgY29udGVudHMKcHJpbnQoJ0NsZWFuaW5nIHVwLi4uJykKdHJ5OgogICAgc2h1dGlsLnJtdHJlZSh0ZW1wX2ZvbGRlcikKZXhjZXB0OgogICAgcHJpbnQoJ1VuYWJsZSB0byByZW1vdmUgdGVtcG9yYXJ5IGRpcmVjdG9yeToge30nLmZvcm1hdCh0ZW1wX2ZvbGRlcikpCiAgICAKIyByZW1vdmUgWklQIGZpbGUKdHJ5OgogICAgb3MucmVtb3ZlKHppcF9maWxlbmFtZSkKZXhjZXB0OgogICAgcHJpbnQoJ1VuYWJsZSB0byByZW1vdmUgZG93bmxvYWRlZCBaSVAgZmlsZToge30nLmZvcm1hdCh6aXBfZmlsZW5hbWUpKQoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcHJpbnQoJ0RvbmUhJykKPHxmaW1fZW5kfD4="]
["0945fd5eeab30ff7cd60442724e410234ce4cff7-1","0945fd5eeab30ff7cd60442724e410234ce4cff7","PHxmaW1fcHJlZml4fD4KZnJvbSAuIGltcG9ydCBkYgpmcm9tIC5tb2RlbHMgaW1wb3J0IFVzZXIKZnJvbSAubW9kZWxzIGltcG9ydCBXb3Jrb3V0CmZyb20gZmxhc2sgaW1wb3J0IEJsdWVwcmludCwgcmVuZGVyX3RlbXBsYXRlLCByZWRpcmVjdCwgdXJsX2ZvciwgcmVxdWVzdCwgZmxhc2gsIGFib3J0CmZyb20gZmxhc2tfbG9naW4gaW1wb3J0IGN1cnJlbnRfdXNlciwgbG9naW5fcmVxdWlyZWQsIGxvZ291dF91c2VyCgptYWluID0gQmx1ZXByaW50KCdtYWluJywgX19uYW1lX18pCgoKQG1haW4ucm91dGUoJy8nKQpkZWYgaW5kZXgoKToKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoJ2luZGV4Lmh0bWwnKQoKCkBtYWluLnJvdXRlKCcvcHJvZmlsZScpCkBsb2dpbl9yZXF1aXJlZApkZWYgcHJvZmlsZSgpOgogICAgcmV0dXJuIHJlbmRlcl90ZW1wbGF0ZSgncHJvZmlsZS5odG1sJywgbmFtZT1jdXJyZW50X3VzZXIubmFtZSkKCgpAbWFpbi5yb3V0ZSgnL25ldycpCkBsb2dpbl9yZXF1aXJlZApkZWYgbmV3X3dvcmtvdXQoKToKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoJ2NyZWF0ZV93b3Jrb3V0Lmh0bWwnKQoKCkBtYWluLnJvdXRlKCcvbmV3JywgbWV0aG9kcz1bJ1BPU1QnXSkKQGxvZ2luX3JlcXVpcmVkCmRlZiBuZXdfd29ya291dF9wb3N0KCk6CiAgICBleGVyY2lzZSA9IHJlcXVlc3QuZm9ybS5nZXQoJ2V4ZXJjaXNlJykKICAgIHNldHMgPSByZXF1ZXN0LmZvcm0uZ2V0KCdzZXRzJykKICAgIHJlcHMgPSByZXF1ZXN0LmZvcm0uZ2V0KCdyZXBzJykKICAgIG5vdGVzID0gcmVxdWVzdC5mb3JtLmdldCgnbm90ZXMnKQoKICAgIHdvcmtvdXQgPSBXb3Jrb3V0KGV4ZXJjaXNlPWV4ZXJjaXNlLCBzZXRzPXNldHMsIHJlcHM9cmVwcywgbm90ZXM9bm90ZXMsIGF1dGhvcj1jdXJyZW50X3VzZXIpCiAgICBkYi5zZXNzaW9uLmFkZCh3b3Jrb3V0KQogICAgZGIuc2Vzc2lvbi5jb21taXQoKQoKICAgIGZsYXNoKCdZb3VyIGV4ZXJjaXNlIGhhcyBiZWVuIGFkZGVkIScpCgogICAgcmV0dXJuIHJlZGlyZWN0KHVybF9mb3IoJ21haW4udXNlcl93b3Jrb3V0cycpKQoKCkBtYWluLnJvdXRlKCcvYWxsJykKQGxvZ2luX3JlcXVpcmVkCmRlZiB1c2VyX3dvcmtvdXRzKCk6CiAgICBwYWdlID0gcmVxdWVzdC5hcmdzLmdldCgncGFnZScsIDEsIHR5cGU9aW50KQogICAgdXNlciA9IFVzZXIucXVlcnkuZmlsdGVyX2J5KGVtYWlsPWN1cnJlbnRfdXNlci5lbWFpbCkuZmlyc3Rfb3JfNDA0KCkKICAgIHdvcmtvdXRzID0gV29ya291dC5xdWVyeS5maWx0ZXJfYnkoYXV0aG9yPXVzZXIpLnBhZ2luYXRlKHBhZ2U9cGFnZSwgcGVyX3BhZ2U9NikKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoJ2FsbF93b3Jrb3V0cy5odG1sJywgd29ya291dHM9d29ya291dHMsIHVzZXI9dXNlcikKCgpAbWFpbi5yb3V0ZSgiL3dvcmtvdXQvPGludDp3b3Jrb3V0X2lkPi91cGRhdGUiLCBtZXRob2RzPVsnR0VUJywgJ1BPU1QnXSkKQGxvZ2luX3JlcXVpcmVkCmRlZiB1cGRhdGVfd29ya291dCh3b3Jrb3V0X2lkKToKICAgIHdvcmtvdXQgPSBXb3Jrb3V0LnF1ZXJ5LmdldF9vcl80MDQod29ya291dF9pZCkKICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICdQT1NUJzoKICAgICAgICB3b3Jrb3V0LmV4ZXJjaXNlID0gcmVxdWVzdC5mb3JtWydleGVyY2lzZSddCiAgICAgICAgd29ya291dC5zZXRzID0gcmVxdWVzdC5mb3JtWydzZXRzJ10KICAgICAgICB3b3Jrb3V0LnJlcHMgPSByZXF1ZXN0LmZvcm1bJ3JlcHMnXQogICAgICAgIHdvcmtvdXQubm90ZXMgPSByZXF1ZXN0LmZvcm1bJ25vdGVzJ10KICAgICAgICBkYi5zZXNzaW9uLmNvbW1pdCgpCiAgICAgICAgZmxhc2goJ1lvdXIgZXhlcmNpc2UgaGFzIGJlZW4gdXBkYXRlZCEnKQogICAgICAgIHJldHVybiByZWRpcmVjdCh1cmxfZm9yKCdtYWluLnVzZXJfd29ya291dHMnKSkKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoJ3VwZGF0ZV93b3Jrb3V0Lmh0bWwnLCB3b3Jrb3V0PXdvcmtvdXQpCgoKPHxmaW1faG9sZXw+CiAgICBkYi5zZXNzaW9uLmRlbGV0ZSh3b3Jrb3V0KQogICAgZGIuc2Vzc2lvbi5jb21taXQoKQogICAgZmxhc2goJ1lvdXIgZXhlcmNpc2UgaGFzIGJlZW4gZGVsZXRlZCEnKQogICAgcmV0dXJuIHJlZGlyZWN0KHVybF9mb3IoJ21haW4udXNlcl93b3Jrb3V0cycpKQoKQG1haW4ucm91dGUoJy9sb2dvdXQnKQpAbG9naW5fcmVxdWlyZWQKZGVmIGxvZ291dCgpOgogICAgbG9nb3V0X3VzZXIoKQogICAgcmV0dXJuIHJlbmRlcl90ZW1wbGF0ZSgnbG9nb3V0Lmh0bWwnKQo8fGZpbV9zdWZmaXh8PgpAbWFpbi5yb3V0ZSgiL3dvcmtvdXQvPGludDp3b3Jrb3V0X2lkPi9kZWxldGUiLCBtZXRob2RzPVsnR0VUJywgJ1BPU1QnXSkKQGxvZ2luX3JlcXVpcmVkCmRlZiBkZWxldGVfd29ya291dCh3b3Jrb3V0X2lkKToKICAgIHdvcmtvdXQgPSBXb3Jrb3V0LnF1ZXJ5LmdldF9vcl80MDQod29ya291dF9pZCkKPHxmaW1fZW5kfD4="]
["2378cc54bdfb8acccc32eb1f0a4e46a41d1a1a4b-1","2378cc54bdfb8acccc32eb1f0a4e46a41d1a1a4b",{"$cut":{"chars":17872,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNjaXB5LmlvIGFzIHNjaW8KaW1wb3J0IHNrbGVhcm4ubWV0cmljcwppbXBvcnQgY3YyCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CgpucC5zZXRfcHJpbnRvcHRpb25zKGZvcm1hdHRlcj17J2Zsb2F0X2tpbmQnOiBsYW1iZGEgeDogIiUuNGYiICUgeH0pCgoKY2xhc3MgUGFyYW1zOgogICAgQUNDX0NPTlNUID0gMmUzICAjIDVlNSAjPC0tLSBvYnNvbGV0ZQogICAga3NpemVfYWNjID0gMTUgICMgMTUKICAgIGtzaXplX3dlaWdodCA9IDMzICAjIDMzCgoKZGVmIGJhZEluZGV4KHByb2plY3QsIGltZyk6CiAgICBiYWQgPSBucC5sb2dpY2FsX29yKHByb2plY3QubWluKGF4aXM9MCkgPCAxLCBwcm9qZWN0WzEsIDpdID4gaW1nLnNoYXBlWzBdKQogICAgYmFkID0gbnAubG9naWNhbF9vcihiYWQsIHByb2plY3RbMCwgOl0gPiBpbWcuc2hhcGVbMV0pCiAgICBiYWQgPSBucC5hc2FycmF5KGJhZCkucmVzaGFwZSgoLTEpLCBvcmRlcj0nRicpCiAgICByZXR1cm4gYmFkCgoKZGVmIHdhcnBJbWcoaW1nLCB0X2hlaWdodCwgdF93aWR0aCwgcHJqLCBpZHgpOgogICAgbmV3X2ltZyA9IG5wLnplcm9zKCh0X2hlaWdodCAqIHRfd2lkdGgsIDMpKQogICAgIyBJbiBjYXNlIHdlIGhhdmUgc29tZSBwb2ludHMKICAgICMgZml4ZWQgYnk6IGh0dHBzOi8vZ2l0aHViLmNvbS9pYWNvcG9tYXNpL2ZhY2Vfc3BlY2lmaWNfYXVnbS9pc3N1ZXMvMyNpc3N1ZWNvbW1lbnQtMzQxNjE1NDYxCiAgICBpZiBwcmouc2l6ZSAhPSAwOgogICAgICAgIHhzID0gbnAuc3F1ZWV6ZShucC5hc2FycmF5KHByalswLCA6XSkpLnJlc2hhcGUodF9oZWlnaHQsIHRfd2lkdGgpLmFzdHlwZShucC5mbG9hdDMyKQogICAgICAgIHlzID0gbnAuc3F1ZWV6ZShucC5hc2FycmF5KHByalsxLCA6XSkpLnJlc2hhcGUodF9oZWlnaHQsIHRfd2lkdGgpLmFzdHlwZShucC5mbG9hdDMyKQogICAgICAgIHBpeGVscyA9IGN2Mi5yZW1hcChpbWcsIHhzLCB5cywgIGN2Mi5JTlRFUl9DVUJJQykKICAgICAgICBwaXhlbHMgPSBwaXhlbHMucmVzaGFwZShwaXhlbHMuc2hhcGVbMF0qcGl4ZWxzLnNoYXBlWzFdLCBwaXhlbHMuc2hhcGVbMl0pCiAgICAgICAgIyBwaXhlbHMgPSBwaXhlbHNbOiwgMCwgOl0KICAgICAgICBuZXdfaW1nW2lkeCwgOl0gPSBwaXhlbHMKICAgIGVsc2U6CiAgICAgICAgcHJpbnQoJz4gUHJvamVjdGVkIHBvaW50cyBlbXB0eScpCiAgICBuZXdfaW1nID0gbmV3X2ltZy5yZXNoYXBlKCh0X2hlaWdodCwgdF93aWR0aCwgMyksIG9yZGVyPSdGJykKICAgIG5ld19pbWdbbmV3X2ltZyA+IDI1NV0gPSAyNTUKICAgIG5ld19pbWdbbmV3X2ltZyA8IDBdID0gMAogICAgbmV3X2ltZyA9IG5ld19pbWcuYXN0eXBlKCd1aW50OCcpCiAgICByZXR1cm4gbmV3X2ltZwoKCmRlZiBOb3JtYWxpemVQb2ludHMob3V0X3Byb2opOgogICAgbWF4T3V0ID0gb3V0X3Byb2oubWF4KGF4aXM9MSkKICAgIG1pbk91dCA9IG91dF9wcm9qLm1pbihheGlzPTEpCiAgICBsZW5uID0gbWF4T3V0LW1pbk91dAogICAgIyBOb3JtYWxpemUgdGhlIHBvaW50cyBzb21laG93IGluc2lkZSB0aGUgaW1hZ2UKICAgICMgSW4gdGhlb3J5IGhlcmUgd2UgY2FuIGRvIGJldHRlciB0byBhdm9pZCBwdXR0aW4gaW4gdGhlIGJhY2tncm91bmQgcGl4ZWwgb2YgdGhlIGZhY2VzCiAgICBkZW4gPSBtYXhPdXQtbWluT3V0CiAgICBkZW5bZGVuID09IDBdID0gMQogICAgb3V0X3Byb2ogPSAob3V0X3Byb2otbWluT3V0KS9kZW4KICAgIHJldHVybiBvdXRfcHJvaiwgbGVubgoKCmRlZiBVbm5vcm1hbGl6ZVBvaW50cyhvdXRfcHJvaiwgc2l6ZSk6CiAgICByZXR1cm4gbnAubXVsdGlwbHkob3V0X3Byb2osIHNpemUuVCkKCgpkZWYgSGFuZGxlQmFja2dyb3VuZChvdXRfcHJvaiwgZmFjZV9wcm9qX2luLCBpbWcsIG9wdHMpOgogICAgaWYgb3V0X3Byb2ouc2l6ZSAhPSAwOgogICAgICAgIG91dF9wcm9qLCBsZW5uID0gTm9ybWFsaXplUG9pbnRzKG91dF9wcm9qKQogICAgICAgIHdpZHRoWCA9IGxlbm5bMV0KICAgICAgICBoZWlnaHRZID0gbGVublswXQogICAgICAgIHRoV2lkdGggPSBmYWNlX3Byb2pfaW5bMCwgOl0ubWluKCkvaW1nLnNoYXBlWzFdICogXAogICAgICAgICAgICBvcHRzLmdldGZsb2F0KCdyZW5kZXJlcicsICdzY2FsZUZhY2VYJykKICAgICAgICBpZHhPdmVyYWwgPSBucC5ub256ZXJvKG5wLnNxdWVlemUoCiAgICAgICAgICAgIG5wLmFzYXJyYXkob3V0X3Byb2pbMCwgOl0pKSA+IHRoV2lkdGgpWzBdCiAgICAgICAgaWYgaWR4T3ZlcmFsLnNpemUgIT0gMDoKICAgICAgICAgICAgb3V0X3Byb2pbMCwgaWR4T3ZlcmFsXSA9IG91dF9wcm9qWzAsIGlkeE92ZXJhbF0gLyBcCiAgICAgICAgICAgICAgICBvdXRfcHJvalswLCBpZHhPdmVyYWxdLm1heCgpKnRoV2lkdGgKICAgICAgICAjIEluIGNhc2Ugd2Ugd2FudCB0byBza2lwIHRoZSBoZWFkIGFuZCBnbyBpbiB0aGUgcmlnaHQgcGFydCBvZiB0aGUgZmFjZQogICAgICAgICMgZGlmZlggPSBvdXRfcHJvalswLGlkeE92ZXJhbF0tdGhXaWR0aCM9dGhXaWR0aAogICAgICAgICMgI3ByaW50IGRpZmZYCiAgICAgICAgIyByZW1wUHRzID0gdGhXaWR0aE1heCArIGRpZmZYWzAsOl0KICAgICAgICAjIHJlbXBQdHMsIGxlbm4gPSBOb3JtYWxpemVQb2ludHMocmVtcFB0cykKICAgICAgICAjIHJlbXBQdHMgPSBmYWNlX3Byb2pfaW5bMCw6XS5tYXgoKSoxLjEgKyBVbm5vcm1hbGl6ZVBvaW50cyhyZW1wUHRzLCBpbWcuc2hhcGVbMF0tZmFjZV9wcm9qX2luWzAsOl0ubWF4KCkqMS4xICkKICAgICAgICBvdXRfcHJvaiA9IFVubm9ybWFsaXplUG9pbnRzKAogICAgICAgICAgICBvdXRfcHJvaiwgbnAubWF0cml4KFtpbWcuc2hhcGVbMV0sIGltZy5zaGFwZVswXV0pKQogICAgcmV0dXJuIG91dF9wcm9qCgoKZGVmIHJlbmRlcihpbWcsIHByb2pfbWF0cml4LCByZWZfVSwgZXllbWFzaywgZmFjZW1hc2ssIG9wdHMpOgogICAgcHJpbnQoIj4gUXVlcnkgaW1hZ2Ugc2hhcGU6IiwgaW1nLnNoYXBlKQogICAgaW1nID0gaW1nLmFzdHlwZSgnZmxvYXQzMicpCgogICAgIyBQcm9q"}}]
["ae636028d31e61e97e679917e7bee06eea33480c-3","ae636028d31e61e97e679917e7bee06eea33480c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKaWYgc3lzLnZlcnNpb25faW5mbyA+PSAoMywgOCk6CiAgICBmcm9tIHR5cGluZyBpbXBvcnQgUHJvdG9jb2wsIFR5cGVkRGljdAplbHNlOgogICAgZnJvbSB0eXBpbmdfZXh0ZW5zaW9ucyBpbXBvcnQgUHJvdG9jb2wsIFR5cGVkRGljdAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpfX2FsbF9fID0gKCJQcm90b2NvbCIsICJUeXBlZERpY3QiKQo8fGZpbV9lbmR8Pg=="]
["ee02a514bd99f5a43b616cb2406da125096f9baa-2","ee02a514bd99f5a43b616cb2406da125096f9baa","PHxmaW1fcHJlZml4fD4KZGVmIHJlYWRlcihwYXRoKToKICAgIHRyeToKICAgICAgICBmID0gb3BlbihwYXRoKQogICAgICAgIHIgPSBmLnJlYWQoKQogICAgICAgIGYuY2xvc2UoKQogICAgICAgIHJldHVybiByCiAgICBleGNlcHQ6CiAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgcmV0dXJuIE5vbmUKCmNhbWluaG8gPSBpbnB1dCgiSW50cm9kdXphIG8gY2FtaW5obyBhYnNvbHV0byBkbyBmaWNoZWlybyIpCgpyZXMgPSByZWFkZXIoY2FtaW5obykgICAgCjx8ZmltX2hvbGV8PgpwcmludChyZXMpCjx8ZmltX3N1ZmZpeHw+CndoaWxlIHJlcyA9PSBOb25lOgogICAgcHJpbnQoIlRlbSBxdWUgaW50cm9kdXppciB1bSBjYW1pbmhvIGFic29sdXRvIHbDoWxpZG8uIikKICAgIGNhbWluaG8gPSBpbnB1dCgiSW50cm9kdXphIG8gY2FtaW5obyBhYnNvbHV0byBkbyBmaWNoZWlybyIpCgo8fGZpbV9lbmR8Pg=="]
["d1de72daaa81fa1cd061e5c4b07e1a8092f17192-1","d1de72daaa81fa1cd061e5c4b07e1a8092f17192","PHxmaW1fcHJlZml4fD4KZnJvbSBoZWxwZXIuY29tcHV0ZV9pbnN0YW5jZV9jbGllbnQgaW1wb3J0IENvbXB1dGVJbnN0YW5jZUNsaWVudAoKIyMgUmVhZCBjb25maWcKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppbXBvcnQganNvbgppbXBvcnQgcGF0aGxpYgpzY3JpcHRfcGF0aCA9IHBhdGhsaWIuUGF0aChfX2ZpbGVfXykucGFyZW50LmFic29sdXRlKCkKc2V0dGluZ3MgPSBOb25lCjx8ZmltX2VuZHw+"]
["ee43fa554a9ab02dba99c66a379159ba66b00dfa-4","ee43fa554a9ab02dba99c66a379159ba66b00dfa","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nOiB1dGYtOAoKIyAjIENhZXNhciBDaXBoZXIKCiMgIyMgQWJvdXQgUlNBIEFsZ29yaXRobQojIENhZXNhciBjaXBoZXIsIGFsc28ga25vd24gYXMgQ2Flc2FyJ3MgY2lwaGVyLCB0aGUgc2hpZnQgY2lwaGVyLCBDYWVzYXIncyBjb2RlIG9yIENhZXNhciBzaGlmdCwgaXMgb25lIG9mIHRoZSBzaW1wbGVzdCBhbmQgbW9zdCB3aWRlbHkga25vd24gZW5jcnlwdGlvbiB0ZWNobmlxdWVzLiBJdCBpcyBhIHR5cGUgb2Ygc3Vic3RpdHV0aW9uIGNpcGhlciBpbiB3aGljaCBlYWNoIGxldHRlciBpbiB0aGUgcGxhaW50ZXh0IGlzIHJlcGxhY2VkIGJ5IGEgbGV0dGVyIHNvbWUgZml4ZWQgbnVtYmVyIG9mIHBvc2l0aW9ucyBkb3duIHRoZSBhbHBoYWJldC4gRm9yIGV4YW1wbGUsIHdpdGggYSBsZWZ0IHNoaWZ0IG9mIDMsIEQgd291bGQgYmUgcmVwbGFjZWQgYnkgQSwgRSB3b3VsZCBiZWNvbWUgQiwgYW5kIHNvIG9uLgoKIyAjIyBBbGdvcml0aG0KIyAKIyAxLiBJbnB1dCBQbGFpbiBUZXh0LCBQIGZyb20gdXNlci4KIyAyLiBJbnB1dCBLZXksIEsgZnJvbSB1c2VyLgojIDMuIER1cmluZyBFbmNyeXB0aW9uLCBlYWNoIGFscGhhYmV0IGluIHRoZSBwbGFpbnRleHQgaXMgU2hpZnRlZCB0byB0aGUgcmlnaHQgYnkgSyBjaGFyYWN0ZXJzLCBpbiBhIGN5Y2xpYyBvcmRlci4KIyA0LiBEdXJpbmcgRGVjcnlwdGlvbiwgZWFjaCBhbHBoYWJldCBpbiB0aGUgcGxhaW50ZXh0IGlzIFNoaWZ0ZWQgdG8gdGhlIGxlZnQgYnkgSyBjaGFyYWN0ZXJzLCBpbiBhIGN5Y2xpYyBvcmRlci4KIyAKIyAqKkV4YW1wbGU6KioKIyAKIyBLZXkgPSAyIGFuZCBQbGFpbnRleHQgPSBBIAojIAojICAgRW5jcnlwdGlvbiA6ICoqQSAtPiBCIC0+IEMqKiAsIHRoZXJlZm9yZSwgQ2lwaGVydGV4dCA9IEMKIyAgIAojICAgRGVjcnlwdGlvbiA6ICoqQSA8LSBCIDwtIEMqKiAsIHRoZXJlZm9yZSwgUGxhaW50ZXh0ID0gQQoKIyAjIyBFbmNyeXB0aW9uCiMgCiMgVGhlIEFscGhhYmV0cyBBIC4uLiBaIGFyZSByZXByZXNlbnRlZCBhcyAwIC4uLiAyNSB3aXRoIEEgPSAwICwgQiA9IDEgLCAuLi4gLCBaID0gMjUKIyAKIyAxLiBFYWNoIGFscGhhYmV0IGluIFAsIGlzIHJlcHJlc2VudGVkIGluIGl0cyBudW1lcmljIGZvcm0gYXMgbWVudGlvbmVkIGFib3ZlLiAKIyAyLiBNb2R1bHVzIDI2IGlzIGFwcGxpZWQgb24gdGhlIGtleSwgc28gdGhhdCB0aGUga2V5IGlzIHdpdGhpbiAwIHRvIDI2LiAKIyAzLiBUaGUgb3V0cHV0IHZhbHVlIGlzIGFkZGVkIHRvIHRoZSBudW1lcmljIHJlcHJlc2VudGF0aW9uLCAKIyA0LiBUaGUgcmVzdWx0aW5nIHZhbHVlIGlmIGNvbnZlcnRlZCB0byBpdHMgY29ycmVzcG9uZGluZyBhbHBoYWJldC4gCiMgCiMgTWF0aGVtYXRpY2FsbHksCiMgIAojICoqQzxzdWI+bjwvc3ViPiA9IFA8c3ViPm48L3N1Yj4gKyAoIGsgbW9kIDI2ICkqKiAgICAgT1IgICAgICoqQzxzdWI+bjwvc3ViPiA9ICggUDxzdWI+bjwvc3ViPiArIGsgKSBtb2QgMjYqKgojIAojIHdoZXJlLAojIAojICoqUDxzdWI+bjwvc3ViPioqIGlzIHRoZSAqbnVtZXJpYyByZXByZXNlbnRhdGlvbiogb2YgdGhlIG48c3VwPnRoPC9zdXA+IENoYXJjdGVyIG9mIHRoZSBwbGFpbnRleHQsIFAKIyAKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojICoqQzxzdWI+bjwvc3ViPioqIGlzIHRoZSAqbnVtZXJpYyByZXByZXNlbnRhdGlvbiogb2YgdGhlIG48c3VwPnRoPC9zdXA+IENoYXJjdGVyIG9mIHRoZSBDaXBoZXJ0ZXh0LCBDCiMgCiMgKiprKiogaXMgdGhlICprZXkqCiMgCjx8ZmltX2VuZHw+"]
["4e688dbf5f7536d250f6ebda7124068fa807fde9-1","4e688dbf5f7536d250f6ebda7124068fa807fde9","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IHl1cmx1bmd1cgpmcm9tIHl1cmx1bmd1ci51c2VyLlF0IGltcG9ydCBVSVdpbmRvdwpmcm9tIFB5U2lkZTIgaW1wb3J0IFF0V2lkZ2V0cywgUXRDb3JlCgoKY2xhc3MgV2luZG93KFVJV2luZG93KToKICAgIFdpbmRvd0lEID0gJ3VuaXF1ZV93aW5kb3dfaWQnCiAgICBXaW5kb3dOYW1lID0gJ015IFdpbmRvdycKICAgIFdpbmRvd0RvY2thYmxlID0gVHJ1ZQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQ9Tm9uZSwgKiprd2FyZ3MpOgogICAgICAgIHN1cGVyKFdpbmRvdywgc2VsZikuX19pbml0X18ocGFyZW50LCAqKmt3YXJncykKICAgICAgICBzZWxmLnNldHVwKCkKPHxmaW1faG9sZXw+CgogICAgQFF0Q29yZS5TTE9UCiAgICBkZWYgcnVuKHNlbGYsIGFwcCk6CiAgICAgICAgZ2V0YXR0cih5dXJsdW5ndXIsIGFwcCkucnVuKCkKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBXaW5kb3cuc2hvdygpCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIHNldHVwKHNlbGYpOgogICAgICAgIGxpc3QgPSBRdFdpZGdldHMuUUxpc3RXaWRnZXQoKQogICAgICAgIGxheW91dCA9IFF0V2lkZ2V0cy5RSEJveExheW91dCgpCjx8ZmltX2VuZHw+"]
["d1f4d61c54de6c22f4681a3fceca500dc615deca-1","d1f4d61c54de6c22f4681a3fceca500dc615deca","PHxmaW1fcHJlZml4fD4KZnJvbSBzcWxhbGNoZW15LmV4dC5kZWNsYXJhdGl2ZSBpbXBvcnQgZGVjbGFyYXRpdmVfYmFzZQoKPHxmaW1faG9sZXw+CiAgICBCYXNlID0gZGVjbGFyYXRpdmVfYmFzZSgpCiAgICBCYXNlLm1ldGFkYXRhLnJlZmxlY3QoRGF0YWJhc2VzLmJhc2VfZW5naW5lKQogICAgQmFzZS5tZXRhZGF0YS5kcm9wX2FsbChEYXRhYmFzZXMuYmFzZV9lbmdpbmUpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIGNsZWFuX2RiKCkKPHxmaW1fc3VmZml4fD4KZnJvbSBjb250YWluZXJzIGltcG9ydCBEYXRhYmFzZXMKCgpkZWYgY2xlYW5fZGIoKToKPHxmaW1fZW5kfD4="]
["11ff75c617f2f337f811e84f7efc2b621cd08330-1","11ff75c617f2f337f811e84f7efc2b621cd08330","PHxmaW1fcHJlZml4fD4KIiIiVGhpcyBpcyBhIGdlbmVyYXRlZCBleGFtcGxlIGZpbGUgdGhhdCBpcyBzdXBwb3NlZCB0byBiZSBtb2RpZmllZC4iIiIKCmZyb20gYXBwLmNydWQuYmFzZSBpbXBvcnQgQ1JVREJhc2UKZnJvbSBhcHAubW9kZWxzLnByb2R1Y3QgaW1wb3J0IFByb2R1Y3QKZnJvbSBhcHAuc2NoZW1hcyBpbXBvcnQgUHJvZHVjdENyZWF0ZSwgUHJvZHVjdFVwZGF0ZQoKPHxmaW1faG9sZXw+CiAgICBwYXNzCgoKcHJvZHVjdCA9IENSVURQcm9kdWN0KFByb2R1Y3QpCjx8ZmltX3N1ZmZpeHw+CgpjbGFzcyBDUlVEUHJvZHVjdChDUlVEQmFzZVtQcm9kdWN0LCBQcm9kdWN0Q3JlYXRlLCBQcm9kdWN0VXBkYXRlXSk6CiAgICAiIiJEZWNsYXJlIG1vZGVsIHNwZWNpZmljIENSVUQgb3BlcmF0aW9uIG1ldGhvZHMuIiIiCgo8fGZpbV9lbmR8Pg=="]
["004ea8f83306625d6e3456fc9fe2e68048f860a7-1","004ea8f83306625d6e3456fc9fe2e68048f860a7","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYi5hdXRoIGltcG9ydCB1cGRhdGVfc2Vzc2lvbl9hdXRoX2hhc2gsIGF1dGhlbnRpY2F0ZSwgbG9naW4KZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLmRlY29yYXRvcnMgaW1wb3J0IGxvZ2luX3JlcXVpcmVkCmZyb20gZGphbmdvLmNvbnRyaWIuYXV0aC5mb3JtcyBpbXBvcnQgUGFzc3dvcmRDaGFuZ2VGb3JtCmZyb20gZGphbmdvLmh0dHAgaW1wb3J0IEpzb25SZXNwb25zZQpmcm9tIGRqYW5nby5zaG9ydGN1dHMgaW1wb3J0ICgKICAgIEh0dHBSZXNwb25zZSwKICAgIEh0dHBSZXNwb25zZVJlZGlyZWN0LAogICAgSHR0cDQwNCwKICAgIHJldmVyc2UsCiAgICBnZXRfb2JqZWN0X29yXzQwNCwKKQpmcm9tIGRqYW5nby5zaG9ydGN1dHMgaW1wb3J0IHJlbmRlcl90b19yZXNwb25zZQpmcm9tIGRqYW5nby52aWV3cy5nZW5lcmljIGltcG9ydCBVcGRhdGVWaWV3CmZyb20gYWNjb3VudHMuZm9ybXMgaW1wb3J0ICgKICAgIEVkaXRQcm9maWxlRm9ybSwKICAgIFByb2plY3RGb3JtLAogICAgUmVnaXN0cmF0aW9uRm9ybSwKICAgIFNraWxsRm9ybSwKICAgIEVkaXRJbmZvcm1hdGlvbkZvcm0sCiAgICBJbWFnZUZpbGVVcGxvYWRGb3JtLAogICAgVXNlclByb2ZpbGVGb3JtLAopCmZyb20gYWNjb3VudHMubW9kZWxzIGltcG9ydCAqCmZyb20gbnNwbWVzc2FnZS5tb2RlbHMgaW1wb3J0IE1lc3NhZ2UKZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cDQwNAoKCkBsb2dpbl9yZXF1aXJlZApkZWYgUHJvamVjdEhvbWVWaWV3KHJlcXVlc3QpOgogICAgYXJncyA9IHt9CiAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICdhY2NvdW50cy9ob21lLmh0bWwnLCBhcmdzKQoKCkBsb2dpbl9yZXF1aXJlZApkZWYgUHJvamVjdERlc2NyaWJlVmlldyhyZXF1ZXN0KToKICAgIHByb2plY3RfcmVnaXN0ZXJlZCA9IEZhbHNlCiAgICBpbml0aWF0b3IgPSByZXF1ZXN0LnVzZXIKICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICdQT1NUJzoKICAgICAgICBwcm9qZWN0X2Zvcm0gPSBQcm9qZWN0Rm9ybShkYXRhPXJlcXVlc3QuUE9TVCkKICAgICAgICBpZiBwcm9qZWN0X2Zvcm0uaXNfdmFsaWQoKToKICAgICAgICAgICAgUHJvamVjdERldGFpbCA9IHByb2plY3RfZm9ybS5zYXZlKCkKICAgICAgICAgICAgcHJvamVjdF9yZWdpc3RlcmVkID0gVHJ1ZQogICAgICAgICAgICBQcm9qZWN0RGV0YWlsLmluaXRpYXRlZF9ieSA9IHJlcXVlc3QudXNlcgogICAgICAgICAgICBQcm9qZWN0RGV0YWlsLnNhdmUoKQogICAgIyBOb3QgYSBIVFRQIFBPU1QsIHNvIHdlIHJlbmRlciBvdXIgZm9ybSB1c2luZyB0d28gTW9kZWxGb3JtIGluc3RhbmNlcy4KICAgICMgVGhlc2UgZm9ybXMgd2lsbCBiZSBibGFuaywgcmVhZHkgZm9yIHVzZXIgaW5wdXQuCiAgICBlbHNlOgogICAgICAgIHByb2plY3RfZm9ybSA9IFByb2plY3RGb3JtKCkKICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgJ2FjY291bnRzL3N0YXJ0X3Byb2plY3QuaHRtbCcsCiAgICAgICAgICAgICAgICAgIHsncHJvamVjdF9mb3JtJzogcHJvamVjdF9mb3JtLCAncHJvamVjdF9yZWdpc3RlcmVkJzogcHJvamVjdF9yZWdpc3RlcmVkfSkKCgpAbG9naW5fcmVxdWlyZWQKZGVmIGRlbGV0ZVByb2plY3QocmVxdWVzdCwgSUQpOgogICAgcHJvamVjdCA9IFByb2plY3REZXRhaWwub2JqZWN0cy5nZXQocGs9SUQpCiAgICBpZiByZXF1ZXN0LnVzZXIgPT0gcHJvamVjdC5pbml0aWF0ZWRfYnk6CiAgICAgICAgcHJvamVjdC5kZWxldGUoKQogICAgICAgIHJldHVybiByZWRpcmVjdCgiL2FjY291bnQvcHJvamVjdC9hY3RpdmUiKQogICAgZWxzZToKICAgICAgICByZXR1cm4gcmVkaXJlY3QoIi9hY2NvdW50L3Byb2plY3QvYWN0aXZlIikKCgpAbG9naW5fcmVxdWlyZWQKZGVmIHByb2plY3RFZGl0KHJlcXVlc3QsIElEKToKICAgIHByb2plY3QgPSBQcm9qZWN0RGV0YWlsLm9iamVjdHMuZ2V0KHBrPUlEKQogICAgaWYgcmVxdWVzdC51c2VyID09IHByb2plY3QuaW5pdGlhdGVkX2J5OgogICAgICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICdQT1NUJzoKICAgICAgICAgICAgcHJvamVjdC5wcm9qZWN0X25hbWUgPSByZXF1ZXN0LlBPU1QuZ2V0KCJwcm9qZWN0X25hbWUiKQogICAgICAgICAgICBwcm9qZWN0Lm1lbnRvcl9uYW1lID0gcmVxdWVzdC5QT1NULmdldCgibWVudG9yX25hbWUiKQogICAgICAgICAgICBwcm9qZWN0LmJyYW5jaCA9IHJlcXVlc3QuUE9TVC5nZXQoImJyYW5jaCIpCiAgICAgICAgICAgIHByb2plY3QuZGVzY3JpcHRpb24gPSByZXF1ZXN0LlBPU1QuZ2V0KCJkZXNjcmlwdGlvbiIpCiAgICAgICAgICAgIHByb2plY3Quc2F2ZSgpCiAgICAgICAgICAgIHJldHVybiByZWRpcmVjdCgiL2FjY291bnQvcHJvamVjdC97fSIuZm9ybWF0KHN0cihwcm9qZWN0LmlkKSkpCiAgICAgICAgYXJncyA9IHsicHJvamVjdCI6IHByb2plY3R9CiAgICAgICAgaWYgcHJvamVjdC5pbml0aWF0ZWRfYnkgPT0gcmVxdWVzdC51c2VyOgogICAgICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICdhY2NvdW50cy9lZGl0UHJvamVjdC5odG1sJywgYXJncykKICAgICAgICBlbHNlOgogICAgICAgICAgICByYWlzZSBIdHRwNDA0CiAgICBlbHNlOgogICAgICAgIHJldHVybiByZWRpcmVjdCgiL2FjY291bnQvcHJvamVjdC97fSIuZm9ybWF0KHN0cihwcm9qZWN0LmlkKSkpCgoKZGVmIEhvbWVWaWV3KHJlcXVlc3QpOgogICAgbmFtZSA9ICJOU1AgLSBOZXR3b3JrIE9mIFNraWxsZWQgUGVvcGxlIgogICAgYXJncyA9IHsnbmFtZSc6IG5hbWV9CiAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICdhY2NvdW50cy9pbmRleC5odG1sJywgYXJncykKCgpkZWYgTG9naW5WaWV3KHJlcXVlc3QpOgogICAgaWYgcmVxdWVzdC5tZXRob2QgPT0gJ1BPU1QnOgogICAgICAgIHVzZXJuYW1lID0gcmVxdWVzdC5QT1NULmdldCgndXNlcm5hbWUnKQogICAgICAgIHBhc3N3b3JkID0gcmVxdWVzdC5QT1NULmdldCgncGFzc3dvcmQnKQogICAgICAgIHVzZXIgPSBhdXRoZW50aWNhdGUodXNlcm5hbWU9dXNlcm5hbWUsIHBhc3N3b3JkPXBhc3N3b3JkKQogICAgICAgIGlmIHVzZXI6CiAgICAgICAgICAgIGlmIHVzZXIuaXNfYWN0aXZlOgogICAgICAgICAgICAgICAgbG9naW4ocmVxdWVzdCwgdXNlcikKICAgICAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2VSZWRpcmVjdCgnL2FjY291bnQvJykKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoIllvdXIgTlNQIGFjY291bnQgaXMgZGlzYWJsZWQuIikgICMgVGhpcyBpcyBub3Qgd29ya2luZwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoCiAgICAgICAgICAgICAgICAiPGgyPiAgIEludmFsaWQgbG9naW4gZGV0YWlscyBzdXBwbGllZC48L2gyPiAgICIpICAjIEJ5IERlZmF1bHQsIERqYW5nbydzIG1lc3NhZ2UgaXMgd29ya2luZwogICAgZWxzZToKICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICdhY2NvdW50cy9sb2dpbi5odG1sJywge30pCgoKIyBUT0RPIFNlYXJjaCBmb3JtIHRvIGJlIGFkZGVkCgpAbG9naW5fcmVxdWlyZWQKZGVmIFByb2ZpbGVWaWV3KHJlcXVlc3QpOgogICAgdXNlciA9IHJlcXVlc3QudXNlcgogICAgZm9sbG93ZXJzID0gbGVuKEZvbGxvdy5vYmplY3RzLmZpbHRlcihmb2xsb3dpbmc9cmVxdWVzdC51c2VyKSkKICAgIGZvbGxvd2luZ3MgPSBsZW4oRm9sbG93Lm9iamVjdHMuZmlsdGVyKGZvbGxvd2VyPXJlcXVlc3QudXNlcikpCiAgICBza2lsbHMgPSBTa2lsbC5vYmplY3RzLmZpbHRlcih1c2VyPXJlcXVlc3QudXNlcikKICAgIHByb2plY3RzID0gUHJvamVjdFBlb3BsZUludGVyZXN0ZWQub2JqZWN0cy5maWx0ZXIodXNlcj1yZXF1ZXN0LnVzZXIpCiAgICBhcmdzID0geyd1c2VyJzogcmVxdWVzdC51c2VyLCAiZm9sbG93ZXJzIjogZm9sbG93ZXJzCiAgICAgICAgLCAiZm9sbG93aW5ncyI6IGZvbGxvd2luZ3MsICJza2lsbHMiOiBza2lsbHN9CiAgICByYXRpbmdfdmFsdWUgPSB1c2VyLnVzZXJwcm9maWxlLnJhdGluZ3MKICAgIGFyZ3MgPSB7J3VzZXInOiB1c2VyLCAiZm9sbG93ZXJzIjogZm9sbG93ZXJzLCAiZm9sbG93aW5nIjogZm9sbG93aW5ncywgInNraWxscyI6IHNraWxscywKICAgICAgICAgICAgJ3JhbmdlJzogcmFuZ2UocmF0aW5nX3ZhbHVlKSwgJ3Byb2plY3RzJzogcHJvamVjdHN9CiAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICdhY2NvdW50cy9wcm9maWxlLmh0bWwnLCBhcmdzKQoKCkBsb2dpbl9yZXF1aXJlZApkZWYgUGVvcGxlVmlldyhyZXF1ZXN0KToKICAgIHVzZXJzID0gVXNlci5vYmplY3RzLmFsbCgpICAjIGRvIG5vdCB1c2UgZmlsdGVyKCkgd2l0aCBVc2VyIG9iamVjdAogICAgYXJncyA9IHsndXNlcnMnOiB1c2VycywgJ3ZpZXdlcic6IHJlcXVlc3QudXNlcn0KICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgJ2FjY291bnRzL3Blb3BsZS5odG1sJywgYXJncykKCgpAbG9naW5fcmVxdWlyZWQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpkZWYgUHJvamVjdHNMaXN0VmlldyhyZXF1ZXN0KToKICAgIGN1cnJlbnRfdXNlciA9IHJlcXVlc3QudXNlcgogICAgcHJvamVjdHMgPSBQcm9qZWN0RGV0YWlsLm9iamVjdHMuYWxsKCkKICAgIGRpY3RfID0ge30KPHxmaW1fZW5kfD4="]
["4eba4e8bc9ad225c5403ba0d9dc3f9177374c3cf-2","4eba4e8bc9ad225c5403ba0d9dc3f9177374c3cf","PHxmaW1fcHJlZml4fD4KY2xhc3MgVmVpY3VsbzoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXBvKSAtPiBOb25lOgogICAgICAgIHNlbGYudGlwbyA9IHRpcG8KCiAgICBkZWYgX19zdHJfXyhzZWxmKSAtPiBzdHI6CiAgICAgICAgcmV0dXJuIHNlbGYudGlwbwoKCmNsYXNzIENhcnJvKFZlaWN1bG8pOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpcG8pIC0+IE5vbmU6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyh0aXBvKQoKCmNhbWluaGFvID0gVmVpY3VsbygnY2FtaW5oYW8nKQpjYW1pbmhhby5wcm9wcmllZGFkZXMgPSB7CiAgICAnY29yJzogJ2F6dWwnLAogICAgJ2NhbWJpbyc6ICdtYW51YWwnLAogICAgJ2NhcGFjaWRhZGUnOiAnNScKfQoKY2Fycm8gPSBDYXJybygnU2VkYW4nKQpjYXJyby5wcm9wcmllZGFkZXMgPSB7J2F6dWwnLCAnYXV0b21hdGljbycsIDV9Cgprb21iaSA9IFZlaWN1bG8oJ2tvbWJpJykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgprb21iaS5wcm9wcmllZGFkZXMgPSBbJ2F6dWwnLCAnbWFudWFsJywgMTJdCgp2ZWljdWxvcyA9IFtjYW1pbmhhbywgY2Fycm8sIGtvbWJpXQoKPHxmaW1fZW5kfD4="]
["eee83f24d2472a07ff9107ffacd410ea511badba-2","eee83f24d2472a07ff9107ffacd410ea511badba","PHxmaW1fcHJlZml4fD4KIiIiVGhpcyBtb2R1bGUgY29sbGVjdHMgc2V2ZXJhbCBleHRlbnNpb25zIHRvIERqYW5nbyB3ZSBmb3VuZCB1c2VmdWwgYXQgSFVET1JBLgpTZWUgaHR0cDovL3d3dy5kamFuZ29wcm9qZWN0LmNvbS8gYW5kIGh0dHBzOi8vY3liZXJuZXRpY3MuaHVkb3JhLmJpei9wcm9qZWN0cy93aWtpL2h1RGphbmdvCgoiIiIKCmltcG9ydCBkYXRldGltZQpmcm9tIGRqYW5nby5jb25mIGltcG9ydCBzZXR0aW5ncwpmcm9tIGRqYW5nby5jb250cmliLmFkbWluLm1vZGVscyBpbXBvcnQgTG9nRW50cnksIEFERElUSU9OLCBDSEFOR0UsIERFTEVUSU9OCmZyb20gZGphbmdvLmNvbnRyaWIuYXV0aC5tb2RlbHMgaW1wb3J0IFVzZXIKZnJvbSBkamFuZ28uY29udHJpYi5jb250ZW50dHlwZXMubW9kZWxzIGltcG9ydCBDb250ZW50VHlwZQpmcm9tIGRqYW5nby5zaG9ydGN1dHMgaW1wb3J0IF9nZXRfcXVlcnlzZXQKZnJvbSBkamFuZ28udXRpbHMuZW5jb2RpbmcgaW1wb3J0IHNtYXJ0X3VuaWNvZGUKCgpjbGFzcyBQcmludGVyQ2hvb3NlcihvYmplY3QpOgogICAgIiIiUHJpbnRlckNob29zZXIgYWxsb3dzIHRoZSB1c2VyIGluIGEgSFRNTCBmb3JtIHRvIGNob29zZSBhIHByaW50ZXIuIEl0IHJlbWVtYmVycyB0aGUgY2hvaWNlLgogICAgUHJpbnRlckNob29zZXIoKSBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGgKCiAgICAqIEEgRGphbmdvIFJlcXVlc3QgT2JqZWN0CiAgICAqIEEgbGlzdCBvZiBwb3NzaWJsZSBwcmludGVyIG5hbWVzLiBUaGUgZmlyc3QgbmFtZSBpcyB0aGUgZGVmYXVsdCBjaG9pY2UuCiAgICAqIEFuIG9wdGlvbmFsIGlkZW50aWZpZXIgaWYgeW91IHdhbnQgdG8gdXNlIFByaW50ZXJDaG9vc2VyKCkgZm9yIGRpZmZlcmVudCBraW5kcyBvZiBwcmludGVycy4KICAgICAgV2UgdXNlICdhNCcsICdhNGNvbG9yJyBhbmQgJ2xhYmVsJy4KCiAgICBUbyB1c2UgaXQgeW91ciB2aWV3IG11c3QgYmUgc3RydWN0dXJlZCBsaWtlIHRoaXM6CgogICAgICAgIGRlZiBteXZpZXcocmVxdWVzdCk6CiAgICAgICAgICAgIHByaW50ZXIgPSBQcmludGVyQ2hvb3NlcihyZXF1ZXN0LCAoJ0RydWNrZXJFcmlrQmxvb2RheGUnLCAnRHJ1Y2tlck5hcHN0ZXInKSwgJ2xhYmVsJykKICAgICAgICAgICAgLi4uCiAgICAgICAgICAgIHByaW50ICJDdXJyZW50bHkgc2VsZWN0ZWQgcHJpbnRlciBpcyAlcyIgJSBwcmludGVyLm5hbWUKICAgICAgICAgICAgcmVzcG9uc2UgPSByZW5kZXJfdG9fcmVzcG9uc2UoJ2h1TE9HL3BhY2tzdHVlY2tlX2JlYXJiZWl0ZW4uaHRtbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZXIudXBkYXRlX2NvbnRleHQoeydsaWVmZXJ1bmcnOiBsaWVmZXJ1bmd9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dF9pbnN0YW5jZT1SZXF1ZXN0Q29udGV4dChyZXF1ZXN0KSkKICAgICAgICAgICAgcG9wdWxhdGVfeGhlYWRlcnMocmVxdWVzdCwgcmVzcG9uc2UsIFNlbmR1bmcsIGxpZWZlcnVuZy5pZCkKICAgICAgICAgICAgcmV0dXJuIHByaW50ZXIudXBkYXRlX3Jlc3BvbnNlKHJlc3BvbnNlKQoKCiAgICBJbiB5b3VyIHRlbXBsYXRlIGRvOgoKICAgICAgICB7JSBsb2FkIGh1ZGphbmdvICV9CiAgICAgICAgLi4uCiAgICAgICAgPGZvcm0gLi4uPgogICAgICAgIHslIHByaW50ZXJfY2hvaWNlICV9CiAgICAgICAgLi4uCiAgICAgICAgPC9mb3JtPgoKICAgIFNlZSBodHRwOi8vc3RhdGljLjIzLm51L21kL1BpY3R1cmVzL1paNUZCNDNFRjAucG5nIGZvciBhbiBleGFtcGxlLgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3QsIGNob2ljZXMsIG5hbWU9J2RlZmF1bHQnKToKICAgICAgICBzZWxmLnJlcXVlc3QgPSByZXF1ZXN0CiAgICAgICAgc2VsZi5jaG9pY2VzID0gY2hvaWNlcwogICAgICAgIHNlbGYuY2xhc3NuYW1lID0gbmFtZQoKICAgIGRlZiB1cGRhdGVfcmVzcG9uc2Uoc2VsZiwgcmVzcG9uc2UpOgogICAgICAgICIiIlVwZGF0ZXMgYW4gZGphbmdvIFJlc3BvbnNlIE9iamVjdCB0byBzZXQgdGhlIHByaW50ZXIgY2hvaWNlLgoKICAgICAgICBVc3VhbGx5IGNhbGxlZCBpbiB0aGUgbGFzdCBsaW5lIG9mIGEgRGphbmdvIHZpZXcgZnVuY3Rpb246CiAgICAgICAgICAgIHJldHVybiBwcmludGVyLnVwZGF0ZV9yZXNwb25zZShyZW5kZXJfdG9fcmVzcG9uc2UoLi4uKSkKICAgICAgICAiIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICAgICBwcmludGVyX2Nob2ljZSA9IHNlbGYucmVxdWVzdC5QT1NULmdldCgncHJpbnRlcl9jaG9pY2UnLCBOb25lKQogICAgICAgIGlmIHByaW50ZXJfY2hvaWNlOgogICAgICAgICAgICBtYXhfYWdlID0gMzY1KjI0KjYwKjYwICAjIG9uZSB5ZWFyCjx8ZmltX2VuZHw+"]
["2454b7c04d349f13c69b131e9e7993585ea817a8-3","2454b7c04d349f13c69b131e9e7993585ea817a8","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKaW1wb3J0IGJhc2U2NAppbXBvcnQgb3MKaW1wb3J0IGlvCmltcG9ydCBzeXMKZnJvbSBjb250ZXh0bGliIGltcG9ydCByZWRpcmVjdF9zdGRvdXQsIHJlZGlyZWN0X3N0ZGVycgoKaW1wb3J0IGdpdGh1YgppbXBvcnQgY2xpY2sKaW1wb3J0IGp3dAppbXBvcnQgcmVxdWVzdHMKZnJvbSBjcnlwdG9ncmFwaHkuaGF6bWF0LmJhY2tlbmRzIGltcG9ydCBkZWZhdWx0X2JhY2tlbmQKZnJvbSBuYWNsIGltcG9ydCBlbmNvZGluZywgcHVibGljCgoKZGVmIF9lbmNyeXB0X2dpdGh1Yl9zZWNyZXQocHVibGljX2tleSwgc2VjcmV0X3ZhbHVlKToKICAgICIiIkVuY3J5cHQgYSBVbmljb2RlIHN0cmluZyB1c2luZyB0aGUgcHVibGljIGtleS4iIiIKICAgIHB1YmxpY19rZXkgPSBwdWJsaWMuUHVibGljS2V5KHB1YmxpY19rZXkuZW5jb2RlKCJ1dGYtOCIpLCBlbmNvZGluZy5CYXNlNjRFbmNvZGVyKCkpCiAgICBzZWFsZWRfYm94ID0gcHVibGljLlNlYWxlZEJveChwdWJsaWNfa2V5KQogICAgZW5jcnlwdGVkID0gc2VhbGVkX2JveC5lbmNyeXB0KHNlY3JldF92YWx1ZS5lbmNvZGUoInV0Zi04IikpCiAgICByZXR1cm4gYmFzZTY0LmI2NGVuY29kZShlbmNyeXB0ZWQpLmRlY29kZSgidXRmLTgiKQoKCmRlZiBnZW5lcmF0ZV9hcHBfdG9rZW4oYXBwX2lkLCByYXdfcGVtKToKICAgICIiIkdldCBhbiBhcHAgdG9rZW4uCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgYXBwX2lkIDogc3RyCiAgICAgICAgVGhlIGdpdGh1YiBhcHAgSUQuCiAgICByYXdfcGVtIDogYnl0ZXMKICAgICAgICBBbiBhcHAgcHJpdmF0ZSBrZXkgYXMgYnl0ZXMuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgZ2hfdG9rZW4gOiBzdHIKICAgICAgICBUaGUgZ2l0aHViIHRva2VuLiBNYXkgcmV0dXJuIE5vbmUgaWYgdGhlcmUgaXMgYW4gZXJyb3IuCiAgICAiIiIKICAgIHRyeToKICAgICAgICBpZiByYXdfcGVtWzA6MV0gIT0gYictJzoKICAgICAgICAgICAgcmF3X3BlbSA9IGJhc2U2NC5iNjRkZWNvZGUocmF3X3BlbSkKCiAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChmKSwgcmVkaXJlY3Rfc3RkZXJyKGYpOgogICAgICAgICAgICBwcml2YXRlX2tleSA9IGRlZmF1bHRfYmFja2VuZCgpLmxvYWRfcGVtX3ByaXZhdGVfa2V5KHJhd19wZW0sIE5vbmUpCgogICAgICAgICAgICB0aSA9IGludCh0aW1lLnRpbWUoKSkKICAgICAgICAgICAgdG9rZW4gPSBqd3QuZW5jb2RlKAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICdpYXQnOiB0aSwKICAgICAgICAgICAgICAgICAgICAnZXhwJzogdGkgKyA2MCoxMCwKICAgICAgICAgICAgICAgICAgICAnaXNzJzogYXBwX2lkLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHByaXZhdGVfa2V5LAogICAgICAgICAgICAgICAgYWxnb3JpdGhtPSdSUzI1NicsCiAgICAgICAgICAgICkKCiAgICAgICAgaWYgKAogICAgICAgICAgICAiR0lUSFVCX0FDVElPTlMiIGluIG9zLmVudmlyb24KICAgICAgICAgICAgYW5kIG9zLmVudmlyb25bIkdJVEhVQl9BQ1RJT05TIl0gPT0gInRydWUiCiAgICAgICAgKToKICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgIHByaW50KCJtYXNraW5nIEpXVCB0b2tlbiBmb3IgZ2l0aHViIGFjdGlvbnMiLCBmbHVzaD1UcnVlKQogICAgICAgICAgICBwcmludCgiOjphZGQtbWFzazo6JXMiICUgdG9rZW4sIGZsdXNoPVRydWUpCgogICAgICAgIHdpdGggcmVkaXJlY3Rfc3Rkb3V0KGYpLCByZWRpcmVjdF9zdGRlcnIoZik6CiAgICAgICAgICAgIHIgPSByZXF1ZXN0cy5nZXQoCiAgICAgICAgICAgICAgICAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9hcHAvaW5zdGFsbGF0aW9ucyIsCiAgICAgICAgICAgICAgICBoZWFkZXJzPXsKICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJXMnICUgdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViLm1hY2hpbmUtbWFuLXByZXZpZXcranNvbicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApCiAgICAgICAgICAgIHIucmFpc2VfZm9yX3N0YXR1cygpCgogICAgICAgICAgICByID0gcmVxdWVzdHMucG9zdCgKICAgICAgICAgICAgICAgICJodHRwczovL2FwaS5naXRodWIuY29tL2FwcC9pbnN0YWxsYXRpb25zLyIKICAgICAgICAgICAgICAgICIlcy9hY2Nlc3NfdG9rZW5zIiAlIHIuanNvbigpWzBdWyJpZCJdLAogICAgICAgICAgICAgICAgaGVhZGVycz17CiAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICVzJyAlIHRva2VuLAogICAgICAgICAgICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yi5tYWNoaW5lLW1hbi1wcmV2aWV3K2pzb24nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKQogICAgICAgICAgICByLnJhaXNlX2Zvcl9zdGF0dXMoKQoKICAgICAgICAgICAgZ2hfdG9rZW4gPSByLmpzb24oKVsidG9rZW4iXQoKICAgICAgICBpZiAoCiAgICAgICAgICAgICJHSVRIVUJfQUNUSU9OUyIgaW4gb3MuZW52aXJvbgogICAgICAgICAgICBhbmQgb3MuZW52aXJvblsiR0lUSFVCX0FDVElPTlMiXSA9PSAidHJ1ZSIKICAgICAgICApOgogICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgICAgcHJpbnQoIm1hc2tpbmcgR0lUSFVCIHRva2VuIGZvciBnaXRodWIgYWN0aW9ucyIsIGZsdXNoPVRydWUpCiAgICAgICAgICAgIHByaW50KCI6OmFkZC1tYXNrOjolcyIgJSBnaF90b2tlbiwgZmx1c2g9VHJ1ZSkKCiAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgIGdoX3Rva2VuID0gTm9uZQoKICAgIHJldHVybiBnaF90b2tlbgoKCmRlZiBnZXRfZ2l0aHViX2NsaWVudF93aXRoX2FwcF90b2tlbihhcHBfaWRfZW52LCBwcml2YXRlX2tleV9lbnYpOgogICAgIiIiR2V0IGEgZ2l0aHViIGNsaWVudCB3aXRoIGFuIGFwcCB0b2tlbi4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBhcHBfaWRfZW52IDogc3RyCiAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHdpdGggdGhlIGFwcCBpZC4KICAgIHByaXZhdGVfa2V5X2VudiA6IHN0cgogICAgICAgIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIHRoZSBwcml2YXRlIGtleS4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBnaCA6IGdpdGh1Yi5HaXRodWIKICAgICAgICBUaGUgZ2l0aHViIGNsaWVudCBvYmplY3QuIE1heSByZXR1cm4gTm9uZSBpZiB0aGVyZSBpcyBhbiBlcnJvci4KICAgICIiIgogICAgdHJ5OgogICAgICAgIHRva2VuID0gZ2VuZXJhdGVfYXBwX3Rva2VuKAogICAgICAgICAgICBvcy5lbnZpcm9uW2FwcF9pZF9lbnZdLAogICAgICAgICAgICBvcy5lbnZpcm9uW3ByaXZhdGVfa2V5X2Vudl0uZW5jb2RlKCksCiAgICAgICAgKQogICAgICAgIGlmIHRva2VuIGlzIG5vdCBOb25lOgogICAgICAgICAgICBnaCA9IGdpdGh1Yi5HaXRodWIodG9rZW4pCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZ2ggPSBOb25lCiAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgIGdoID0gTm9uZQoKICAgIHJldHVybiBnaAoKCkBjbGljay5jb21tYW5kKCkKQGNsaWNrLmFyZ3VtZW50KCJhcHBfaWQiLCB0eXBlPXN0cikKQGNsaWNrLm9wdGlvbigKICAgICItLXBlbSIsCiAgICB0eXBlPXN0ciwKICAgIGRlZmF1bHQ9Tm9uZSwKICAgIGhlbHA9IlBhdGggdG8gcHJpdmF0ZSBrZXkgaW4gUEVNIGZvcm1hdC4iCikKQGNsaWNrLm9wdGlvbigKICAgICItLWVudi12YXIiLAogICAgdHlwZT1zdHIsCiAgICBkZWZhdWx0PU5vbmUsCiAgICBoZWxwPSJOYW1lIG9mIGVudmlyb25tZW50IHZhcmlhYmxlIHdpdGggYmFzZTY0IGVuY29kZWQgUEVNLiIKKQpkZWYgbWFpbl9nZW4oYXBwX2lkLCBwZW0sIGVudl92YXIpOgogICAgIiIiR2VuZXJhdGUgYSBHaXRIdWIgdG9rZW4gdXNpbmcgYXBwIEFQUF9JRCBmcm9tIGEgcHJpdmF0ZSBrZXkuCgogICAgTk9URTogVGhlIHRva2VuIGlzIHByaW50ZWQgdG8gc3Rkb3V0LCBzbyBtYWtlIHN1cmUgbm90IHRvIHVzZSB0aGlzIGNvbW1hbmQKICAgIGluIHB1YmxpYyBDSSBpbmZyYXN0cnVjdHVyZS4KICAgICIiIgoKICAgIGlmIHBlbSBpcyBOb25lIGFuZCBlbnZfdmFyIGlzIE5vbmU6CiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJPbmUgb2YgLS1wZW0gb3IgLS1lbnYtdmFyIG11c3QgYmUgZ2l2ZW4hIikKCiAgICB0cnk6CiAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChmKSwgcmVkaXJlY3Rfc3RkZXJyKGYpOgogICAgICAgICAgICBpZiBwZW0gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICB3aXRoIG9wZW4ocGVtLCAiciIpIGFzIGZwOgogICAgICAgICAgICAgICAgICAgIHJhd19wZW0gPSBmcC5yZWFkKCkuZW5jb2RlKCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJhd19wZW0gPSBiYXNlNjQuYjY0ZGVjb2RlKG9zLmVudmlyb25bZW52X3Zhcl0pCgogICAgICAgICAgICB0b2tlbiA9IGdlbmVyYXRlX2FwcF90b2tlbihhcHBfaWQsIHJhd19wZW0pCgogICAgICAgIHByaW50KHRva2VuKQoKICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgcGFzcwoKCkBjbGljay5jb21tYW5kKCkKQGNsaWNrLmFyZ3VtZW50KCJhcHBfaWQiLCB0eXBlPXN0cikKQGNsaWNrLmFyZ3VtZW50KCJ0YXJnZXRfcmVwbyIsIHR5cGU9c3RyKQpAY2xpY2suYXJndW1lbnQoInNlY3JldF9uYW1lIiwgdHlwZT1zdHIpCkBjbGljay5vcHRpb24oCiAgICAiLS1wZW0iLAogICAgdHlwZT1zdHIsCiAgICBkZWZhdWx0PU5vbmUsCiAgICBoZWxwPSJQYXRoIHRvIHByaXZhdGUga2V5IGluIFBFTSBmb3JtYXQuIgopCkBjbGljay5vcHRpb24oCiAgICAiLS1lbnYtdmFyIiwKICAgIHR5cGU9c3RyLAogICAgZGVmYXVsdD1Ob25lLAogICAgaGVscD0iTmFtZSBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIGJhc2U2NCBlbmNvZGVkIFBFTS4iCikKZGVmIG1haW5fcHVzaChhcHBfaWQsIHRhcmdldF9yZXBvLCBzZWNyZXRfbmFtZSwgcGVtLCBlbnZfdmFyKToKICAgICIiIkdlbmVyYXRlIGEgR2l0SHViIHRva2VuIHVzaW5nIGFwcCBBUFBfSUQgZnJvbSBhIHByaXZhdGUga2V5LgogICAgVGhlbiBwdXNoIHRoaXMgdG9rZW4gdG8gdGhlIFRBUkdFVF9SRVBPJ3Mgc2VjcmV0cyB3LyBTRUNSRVRfTkFNRS4iIiIKCiAgICBpZiBwZW0gaXMgTm9uZSBhbmQgZW52X3ZhciBpcyBOb25lOgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiT25lIG9mIC0tcGVtIG9yIC0tZW52LXZhciBtdXN0IGJlIGdpdmVuISIpCgogICAgdHJ5OgogICAgICAgIGYgPSBpby5TdHJpbmdJTygpCiAgICAgICAgd2l0aCByZWRpcmVjdF9zdGRvdXQoZiksIHJlZGlyZWN0X3N0ZGVycihmKToKICAgICAgICAgICAgaWYgcGVtIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgd2l0aCBvcGVuKHBlbSwgInIiKSBhcyBmcDoKICAgICAgICAgICAgICAgICAgICByYXdfcGVtID0gZnAucmVhZCgpLmVuY29kZSgpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByYXdfcGVtID0gYmFzZTY0LmI2NGRlY29kZShvcy5lbnZpcm9uW2Vudl92YXJdKQoKICAgICAgICAgICAgdG9rZW4gPSBnZW5lcmF0ZV9hcHBfdG9rZW4oYXBwX2lkLCByYXdfcGVtKQoKICAgICAgICAgICAgcmtleSA9IHJlcXVlc3RzLmdldCgKICAgICAgICAgICAgICAgICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyIKICAgICAgICAgICAgICAgICIlcy9hY3Rpb25zL3NlY3JldHMvcHVibGljLWtleSIgJSB0YXJnZXRfcmVwbywKICAgICAgICAgICAgICAgIGhlYWRlcnM9ewogICAgICAgICAgICAgICAgICAgICJBdXRob3JpemF0aW9uIjogIkJlYXJlciAlcyIgJSBvcy5lbnZpcm9uWyJHSVRIVUJfVE9LRU4iXSwKICAgICAgICAgICAgICAgICAgICAiQWNjZXB0IjogImFwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvbiIsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkKICAgICAgICAgICAgcmtleS5yYWlzZV9mb3Jfc3RhdHVzKCkKCiAgICAgICAgICAgIGVuY29kZWRfdG9rZW4gPSBfZW5jcnlwdF9naXRodWJfc2VjcmV0KHJrZXkuanNvbigpWyJrZXkiXSwgdG9rZW4pCgogICAgICAgICAgICByZXF1ZXN0cy5wdXQoCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyVzL2FjdGlvbnMvc2VjcmV0cy8lcyIgJSAoCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3JlcG8sCiAgICAgICAgICAgICAgICAgICAgc2VjcmV0X25hbWUsCiAgICAgICAgICAgICAgICApLAo8fGZpbV9lbmR8Pg=="]
["eeae638225c10366c7b9e7c2b4683900fdbedcf7-1","eeae638225c10366c7b9e7c2b4683900fdbedcf7","PHxmaW1fcHJlZml4fD4KZnJvbSAuYmFzZV9jbGFzcyBpbXBvcnQgQmFzZUNvbW1vbnMKPHxmaW1faG9sZXw+CiAgbW9kZWxzX2NvbW1lbnQsCiAgbW9kZWxzX3BhdGNoLAoKICBtb2RlbHNfbGljZW5jZSwKICBtb2RlbHNfdGFibGVtZXRhLAogIG1vZGVsc19kYXRhc2V0LAogIG1vZGVsc193b3Jrc3BhY2UsCiAgbW9kZWxzX2dyb3VwLAogIG1vZGVsc19pbnZpdGF0aW9uLAogIG1vZGVsc191c2VyLAopCjx8ZmltX3N1ZmZpeHw+CmZyb20gLi5tb2RlbHMgaW1wb3J0ICgKICAKICAjIG1vZGVsc19pdGVtLCAKICAjIG1vZGVsc19wb3N0LAo8fGZpbV9lbmR8Pg=="]
["aece10fa4d1249c8460dc0db2df63f24b3a04a6a-1","aece10fa4d1249c8460dc0db2df63f24b3a04a6a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKPHxmaW1faG9sZXw+CmZyb20gb2NzY2kudGVzdGxpYiBpbXBvcnQgdGllcjEsIE1hbmFnZVRlc3QKZnJvbSByZXNvdXJjZXMub2NzIGltcG9ydCBPQ1MKZnJvbSByZXNvdXJjZXMucG9kIGltcG9ydCBnZXRfYWRtaW5fa2V5X2Zyb21fY2VwaF90b29scwpmcm9tIHJlc291cmNlcy5wdmMgaW1wb3J0IFBWQwpmcm9tIHRlc3RzIGltcG9ydCBoZWxwZXJzCgpsb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpQT0QgPSBvY3AuT0NQKGtpbmQ9J1BvZCcsIG5hbWVzcGFjZT1jb25maWcuRU5WX0RBVEFbJ2NsdXN0ZXJfbmFtZXNwYWNlJ10pCkNFUEhfT0JKID0gTm9uZQoKCkBweXRlc3QuZml4dHVyZSgpCmRlZiB0ZXN0X2ZpeHR1cmUocmVxdWVzdCk6CiAgICAiIiIKICAgIENyZWF0ZSBkaXNrcwogICAgIiIiCiAgICBzZWxmID0gcmVxdWVzdC5ub2RlLmNscwogICAgc2V0dXBfZnMoc2VsZikKICAgIHlpZWxkCiAgICB0ZWFyZG93bl9mcygpCgoKZGVmIHNldHVwX2ZzKHNlbGYpOgogICAgIiIiCiAgICBTZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIHRlc3QKICAgICIiIgogICAgZ2xvYmFsIENFUEhfT0JKCiAgICBzZWxmLmZzX2RhdGEgPSBkZWZhdWx0cy5DRVBIRklMRVNZU1RFTV9ESUNULmNvcHkoKQogICAgc2VsZi5mc19kYXRhWydtZXRhZGF0YSddWyduYW1lJ10gPSBoZWxwZXJzLmNyZWF0ZV91bmlxdWVfcmVzb3VyY2VfbmFtZSgKICAgICAgICAndGVzdCcsICdjZXBoZnMnCiAgICApCiAgICBzZWxmLmZzX2RhdGFbJ21ldGFkYXRhJ11bJ25hbWVzcGFjZSddID0gY29uZmlnLkVOVl9EQVRBWydjbHVzdGVyX25hbWVzcGFjZSddCiAgICBDRVBIX09CSiA9IE9DUygqKnNlbGYuZnNfZGF0YSkKICAgIENFUEhfT0JKLmNyZWF0ZSgpCiAgICBhc3NlcnQgUE9ELndhaXRfZm9yX3Jlc291cmNlKAogICAgICAgIGNvbmRpdGlvbj0nUnVubmluZycsIHNlbGVjdG9yPSdhcHA9cm9vay1jZXBoLW1kcycKICAgICkKICAgIHBvZHMgPSBQT0QuZ2V0KHNlbGVjdG9yPSdhcHA9cm9vay1jZXBoLW1kcycpWydpdGVtcyddCiAgICBhc3NlcnQgbGVuKHBvZHMpID09IDIKCgpkZWYgdGVhcmRvd25fZnMoKToKICAgICIiIgogICAgVGVhcmluZyBkb3duIHRoZSBlbnZpcm9ubWVudAogICAgIiIiCiAgICBnbG9iYWwgQ0VQSF9PQkoKICAgIENFUEhfT0JKLmRlbGV0ZSgpCgoKQHRpZXIxCmNsYXNzIFRlc3RPU0NCYXNpY3MoTWFuYWdlVGVzdCk6CiAgICBtb25zID0gKAogICAgICAgIGYncm9vay1jZXBoLW1vbi1hLntjb25maWcuRU5WX0RBVEFbImNsdXN0ZXJfbmFtZXNwYWNlIl19JwogICAgICAgIGYnLnN2Yy5jbHVzdGVyLmxvY2FsOjY3ODksJwogICAgICAgIGYncm9vay1jZXBoLW1vbi1iLntjb25maWcuRU5WX0RBVEFbImNsdXN0ZXJfbmFtZXNwYWNlIl19LicKICAgICAgICBmJ3N2Yy5jbHVzdGVyLmxvY2FsOjY3ODksJwogICAgICAgIGYncm9vay1jZXBoLW1vbi1jLntjb25maWcuRU5WX0RBVEFbImNsdXN0ZXJfbmFtZXNwYWNlIl19JwogICAgICAgIGYnLnN2Yy5jbHVzdGVyLmxvY2FsOjY3ODknCiAgICApCgogICAgQHB5dGVzdC5tYXJrLnBvbGFyaW9uX2lkKCJPQ1MtMzM2IikKICAgIGRlZiB0ZXN0X29jc18zMzYoc2VsZiwgdGVzdF9maXh0dXJlKToKICAgICAgICAiIiIKICAgICAgICBUZXN0aW5nIGJhc2ljczogc2VjcmV0IGNyZWF0aW9uLAogICAgICAgIHN0b3JhZ2UgY2xhc3MgY3JlYXRpb24gYW5kIHB2YyB3aXRoIGNlcGhmcwogICAgICAgICIiIgogICAgICAgIHNlbGYuY2VwaGZzX3NlY3JldCA9IGRlZmF1bHRzLkNTSV9DRVBIRlNfU0VDUkVULmNvcHkoKQogICAgICAgIGRlbCBzZWxmLmNlcGhmc19zZWNyZXRbJ2RhdGEnXVsndXNlcklEJ10KICAgICAgICBkZWwgc2VsZi5jZXBoZnNfc2VjcmV0WydkYXRhJ11bJ3VzZXJLZXknXQogICAgICAgIHNlbGYuY2VwaGZzX3NlY3JldFsnZGF0YSddWydhZG1pbktleSddID0gKAogICAgICAgICAgICBnZXRfYWRtaW5fa2V5X2Zyb21fY2VwaF90b29scygpCiAgICAgICAgKQogICAgICAgIHNlbGYuY2VwaGZzX3NlY3JldFsnZGF0YSddWydhZG1pbklEJ10gPSBjb25zdGFudHMuQURNSU5fQkFTRTY0CiAgICAgICAgbG9nZ2luZy5pbmZvKHNlbGYuY2VwaGZzX3NlY3JldCkKICAgICAgICBzZWNyZXQgPSBPQ1MoKipzZWxmLmNlcGhmc19zZWNyZXQpCiAgICAgICAgc2VjcmV0LmNyZWF0ZSgpCiAgICAgICAgc2VsZi5jZXBoZnNfc2MgPSBkZWZhdWx0cy5DU0lfQ0VQSEZTX1NUT1JBR0VDTEFTU19ESUNULmNvcHkoKQogICAgICAgIHNlbGYuY2VwaGZzX3NjWydwYXJhbWV0ZXJzJ11bJ21vbml0b3JzJ10gPSBzZWxmLm1vbnMKICAgICAgICBzZWxmLmNlcGhmc19zY1sncGFyYW1ldGVycyddWydwb29sJ10gPSAoCiAgICAgICAgICAgIGYie3NlbGYuZnNfZGF0YVsnbWV0YWRhdGEnXVsnbmFtZSddfS1kYXRhMCIKICAgICAgICApCiAgICAgICAgc3RvcmFnZV9jbGFzcyA9IE9DUygqKnNlbGYuY2VwaGZzX3NjKQogICAgICAgIHN0b3JhZ2VfY2xhc3MuY3JlYXRlKCkKICAgICAgICBzZWxmLmNlcGhmc19wdmMgPSBkZWZhdWx0cy5DU0lfQ0VQSEZTX1BWQy5jb3B5KCkKICAgICAgICBwdmMgPSBQVkMoKipzZWxmLmNlcGhmc19wdmMpCiAgICAgICAgcHZjLmNyZWF0ZSgpCiAgICAgICAgbG9nLmluZm8ocHZjLnN0YXR1cykKICAgICAgICBhc3NlcnQgJ0JvdW5kJyBpbiBwdmMuc3RhdHVzCiAgICAgICAgcHZjLmRlbGV0ZSgpCiAgICAgICAgc3RvcmFnZV9jbGFzcy5kZWxldGUoKQogICAgICAgIHNlY3JldC5kZWxldGUoKQoKICAgIEBweXRlc3QubWFyay5wb2xhcmlvbl9pZCgiT0NTLTM0NiIpCiAgICBkZWYgdGVzdF9vY3NfMzQ2KHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFRlc3RpbmcgYmFzaWNzOiBzZWNyZXQgY3JlYXRpb24sCiAgICAgICAgIHN0b3JhZ2UgY2xhc3MgY3JlYXRpb24gIGFuZCBwdmMgd2l0aCByYmQKICAgICAgICAiIiIKICAgICAgICBzZWxmLnJiZF9zZWNyZXQgPSBkZWZhdWx0cy5DU0lfUkJEX1NFQ1JFVC5jb3B5KCkKICAgICAgICBkZWwgc2VsZi5yYmRfc2VjcmV0WydkYXRhJ11bJ2t1YmVybmV0ZXMnXQogICAgICAgIHNlbGYucmJkX3NlY3JldFsnZGF0YSddWydhZG1pbiddID0gZ2V0X2FkbWluX2tleV9mcm9tX2NlcGhfdG9vbHMoKQogICAgICAgIGxvZ2dpbmcuaW5mbyhzZWxmLnJiZF9zZWNyZXQpCiAgICAgICAgc2VjcmV0ID0gT0NTKCoqc2VsZi5yYmRfc2VjcmV0KQogICAgICAgIHNlY3JldC5jcmVhdGUoKQogICAgICAgIHNlbGYucmJkX3NjID0gZGVmYXVsdHMuQ1NJX1JCRF9TVE9SQUdFQ0xBU1NfRElDVC5jb3B5KCkKICAgICAgICBzZWxmLnJiZF9zY1sncGFyYW1ldGVycyddWydtb25pdG9ycyddID0gc2VsZi5tb25zCiAgICAgICAgZGVsIHNlbGYucmJkX3NjWydwYXJhbWV0ZXJzJ11bJ3VzZXJpZCddCiAgICAgICAgc3RvcmFnZV9jbGFzcyA9IE9DUygqKnNlbGYucmJkX3NjKQogICAgICAgIHN0b3JhZ2VfY2xhc3MuY3JlYXRlKCkKICAgICAgICBzZWxmLnJiZF9wdmMgPSBkZWZhdWx0cy5DU0lfUkJEX1BWQy5jb3B5KCkKICAgICAgICBwdmMgPSBQVkMoKipzZWxmLnJiZF9wdmMpCiAgICAgICAgcHZjLmNyZWF0ZSgpCiAgICAgICAgYXNzZXJ0ICdCb3VuZCcgaW4gcHZjLnN0YXR1cwogICAgICAgIHB2Yy5kZWxldGUoKQogICAgICAgIHN0b3JhZ2VfY2xhc3MuZGVsZXRlKCkKICAgICAgICBzZWNyZXQuZGVsZXRlKCkKPHxmaW1fc3VmZml4fD4KaW1wb3J0IHB5dGVzdAoKZnJvbSBvY3MgaW1wb3J0IG9jcCwgZGVmYXVsdHMsIGNvbnN0YW50cwpmcm9tIG9jc2NpIGltcG9ydCBjb25maWcKPHxmaW1fZW5kfD4="]
["014ed18c145a7163a76c46dc9aeedbd62a135fd6-1","014ed18c145a7163a76c46dc9aeedbd62a135fd6","PHxmaW1fcHJlZml4fD4KZnJvbSBjYWxjdWxhdGVfYW55dGhpbmcuY2FsY3VsYXRpb24uY2FsY3VsYXRpb24gaW1wb3J0IENhbGN1bGF0aW9uCmZyb20gY2FsY3VsYXRlX2FueXRoaW5nLnF1ZXJ5LnJlc3VsdCBpbXBvcnQgUXVlcnlSZXN1bHQKZnJvbSBjYWxjdWxhdGVfYW55dGhpbmcubGFuZyBpbXBvcnQgTGFuZ3VhZ2VTZXJ2aWNlCmZyb20gY2FsY3VsYXRlX2FueXRoaW5nLnV0aWxzLmNvbG9ycyBpbXBvcnQgaGV4X3RvX3JnYiwgcmdiX3RvX2hzdiwgcmdiX3RvX2NteWssIHJnYl90b19oc2wKCgpjbGFzcyBCYXNlTkNhbGN1bGF0aW9uKENhbGN1bGF0aW9uKToKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBfZ2V0X3F1ZXJ5X3Jlc3VsdChpY29uPSdpbWFnZXMvaWNvbi5zdmcnLCBuYW1lPScnLCBkZXNjcmlwdGlvbj0nJywgY2xpcGJvYXJkPScnKToKICAgICAgICByZXR1cm4gUXVlcnlSZXN1bHQoCiAgICAgICAgICAgIGljb249aWNvbiwKICAgICAgICAgICAgbmFtZT1uYW1lLAogICAgICAgICAgICBkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbiwKICAgICAgICAgICAgY2xpcGJvYXJkPWNsaXBib2FyZAogICAgICAgICkKCiAgICBkZWYgdG9fYmFzZV9jYWxjdWxhdGlvbihzZWxmLCBiYXNlX2NhbGN1bGF0aW9uX2NsYXNzLCBvcmRlcj1Ob25lKToKICAgICAgICBvcmRlciA9IG9yZGVyIGlmIG9yZGVyIGlzIG5vdCBOb25lIGVsc2Ugc2VsZi5vcmRlcgogICAgICAgIHJldHVybiBiYXNlX2NhbGN1bGF0aW9uX2NsYXNzKHZhbHVlPXNlbGYudmFsdWUsIHF1ZXJ5PXNlbGYucXVlcnksIG9yZGVyPW9yZGVyKQoKICAgIEBDYWxjdWxhdGlvbi5EZWNvcmF0b3JzLmhhbmRsZV9lcnJvcl9yZXN1bHRzCiAgICBkZWYgdG9fcXVlcnlfcmVzdWx0KHNlbGYpOgogICAgICAgIHJldHVybiBCYXNlTkNhbGN1bGF0aW9uLl9nZXRfcXVlcnlfcmVzdWx0KG5hbWU9c3RyKHNlbGYudmFsdWUpKQoKCmNsYXNzIEJhc2UxNlN0cmluZ0NhbGN1bGF0aW9uKEJhc2VOQ2FsY3VsYXRpb24pOgogICAgQEJhc2VOQ2FsY3VsYXRpb24uRGVjb3JhdG9ycy5oYW5kbGVfZXJyb3JfcmVzdWx0cwogICAgZGVmIHRvX3F1ZXJ5X3Jlc3VsdChzZWxmKToKICAgICAgICBuYW1lID0gIjoiLmpvaW4oIns6MDJ4fSIuZm9ybWF0KG9yZChjKSkgZm9yIGMgaW4gc2VsZi52YWx1ZSkKICAgICAgICBkZXNjcmlwdGlvbiA9IExhbmd1YWdlU2VydmljZSgpLnRyYW5zbGF0ZSgnYnl0ZXMnLCAnY2FsY3VsYXRvcicpLnVwcGVyKCkKICAgICAgICBjbGlwYm9hcmQgPSBuYW1lCiAgICAgICAgcmV0dXJuIEJhc2VOQ2FsY3VsYXRpb24uX2dldF9xdWVyeV9yZXN1bHQobmFtZT1uYW1lLCBkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbiwgY2xpcGJvYXJkPWNsaXBib2FyZCkKCgpjbGFzcyBCYXNlMTBDYWxjdWxhdGlvbihCYXNlTkNhbGN1bGF0aW9uKToKICAgIEBCYXNlTkNhbGN1bGF0aW9uLkRlY29yYXRvcnMuaGFuZGxlX2Vycm9yX3Jlc3VsdHMKICAgIGRlZiB0b19xdWVyeV9yZXN1bHQoc2VsZik6CiAgICAgICAgbmFtZSA9IHN0cihpbnQoc2VsZi52YWx1ZSkpCiAgICAgICAgZGVzY3JpcHRpb24gPSBMYW5ndWFnZVNlcnZpY2UoKS50cmFuc2xhdGUoJ2RlYycsICdjYWxjdWxhdG9yJykudXBwZXIoKQogICAgICAgIGNsaXBib2FyZCA9IG5hbWUKICAgICAgICByZXR1cm4gQmFzZU5DYWxjdWxhdGlvbi5fZ2V0X3F1ZXJ5X3Jlc3VsdChuYW1lPW5hbWUsIGRlc2NyaXB0aW9uPWRlc2NyaXB0aW9uLCBjbGlwYm9hcmQ9Y2xpcGJvYXJkKQoKCmNsYXNzIEJhc2UyQ2FsY3VsYXRpb24oQmFzZU5DYWxjdWxhdGlvbik6CiAgICBAQmFzZU5DYWxjdWxhdGlvbi5EZWNvcmF0b3JzLmhhbmRsZV9lcnJvcl9yZXN1bHRzCiAgICBkZWYgdG9fcXVlcnlfcmVzdWx0KHNlbGYpOgogICAgICAgIG5hbWUgPSBiaW4oaW50KHNlbGYudmFsdWUpKVsyOl0KICAgICAgICBkZXNjcmlwdGlvbiA9IExhbmd1YWdlU2VydmljZSgpLnRyYW5zbGF0ZSgnYmluJywgJ2NhbGN1bGF0b3InKS51cHBlcigpCiAgICAgICAgY2xpcGJvYXJkID0gbmFtZQogICAgICAgIHJldHVybiBCYXNlTkNhbGN1bGF0aW9uLl9nZXRfcXVlcnlfcmVzdWx0KG5hbWU9bmFtZSwgZGVzY3JpcHRpb249ZGVzY3JpcHRpb24sIGNsaXBib2FyZD1jbGlwYm9hcmQpCgoKY2xhc3MgQmFzZThDYWxjdWxhdGlvbihCYXNlTkNhbGN1bGF0aW9uKToKICAgIEBCYXNlTkNhbGN1bGF0aW9uLkRlY29yYXRvcnMuaGFuZGxlX2Vycm9yX3Jlc3VsdHMKICAgIGRlZiB0b19xdWVyeV9yZXN1bHQoc2VsZik6CiAgICAgICAgbmFtZSA9IG9jdChpbnQoc2VsZi52YWx1ZSkpWzI6XQogICAgICAgIGRlc2NyaXB0aW9uID0gTGFuZ3VhZ2VTZXJ2aWNlKCkudHJhbnNsYXRlKCdvY3QnLCAnY2FsY3VsYXRvcicpLnVwcGVyKCkKICAgICAgICBjbGlwYm9hcmQgPSBuYW1lCiAgICAgICAgcmV0dXJuIEJhc2VOQ2FsY3VsYXRpb24uX2dldF9xdWVyeV9yZXN1bHQobmFtZT1uYW1lLCBkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbiwgY2xpcGJvYXJkPWNsaXBib2FyZCkKCgpjbGFzcyBCYXNlMTZDYWxjdWxhdGlvbihCYXNlTkNhbGN1bGF0aW9uKToKICAgIEBCYXNlTkNhbGN1bGF0aW9uLkRlY29yYXRvcnMuaGFuZGxlX2Vycm9yX3Jlc3VsdHMKICAgIGRlZiB0b19xdWVyeV9yZXN1bHQoc2VsZik6CiAgICAgICAgbmFtZSA9IGhleChpbnQoc2VsZi52YWx1ZSkpWzI6XQogICAgICAgIGRlc2NyaXB0aW9uID0gTGFuZ3VhZ2VTZXJ2aWNlKCkudHJhbnNsYXRlKCdoZXgnLCAnY2FsY3VsYXRvcicpLnVwcGVyKCkKICAgICAgICBjbGlwYm9hcmQgPSBuYW1lCiAgICAgICAgcmV0dXJuIEJhc2VOQ2FsY3VsYXRpb24uX2dldF9xdWVyeV9yZXN1bHQobmFtZT1uYW1lLCBkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbiwgY2xpcGJvYXJkPWNsaXBib2FyZCkKCgpjbGFzcyBDb2xvckJhc2UxNkNhbGN1bGF0aW9uKEJhc2UxNkNhbGN1bGF0aW9uKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZT1Ob25lLCBxdWVyeT0nJywgZXJyb3I9Tm9uZSwgb3JkZXI9MCwgY29sb3JfY29kZT1Ob25lLCBjb2xvcl9mb3JtYXQ9Tm9uZSk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyh2YWx1ZT12YWx1ZSwgcXVlcnk9cXVlcnksIGVycm9yPWVycm9yLCBvcmRlcj1vcmRlcikKICAgICAgICBzZWxmLmNvbG9yX2NvZGUgPSBjb2xvcl9jb2RlCiAgICAgICAgc2VsZi5jb2xvcl9mb3JtYXQgPSBjb2xvcl9mb3JtYXQgb3IgJ3s6LjJmfSwgezouMmZ9LCB7Oi4yZn0nCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGdldF9jb2xvcl9jYWxjdWxhdGlvbnModmFsdWUsIG9yZGVyX29mZnNldCk6CiAgICAgICAgZm9ybWF0cyA9IFsKICAgICAgICAgICAgKHJnYl90b19oc3YsICdoc3YnLCAnezouMGZ9LCB7Oi4wZn0lLCB7Oi4wZn0lJyksCiAgICAgICAgICAgIChyZ2JfdG9faHNsLCAnaHNsJywgJ3s6LjBmfSwgezouMGZ9JSwgezouMGZ9JScpLAogICAgICAgICAgICAocmdiX3RvX2NteWssICdjbXlrJywgJ3s6LjBmfSUsIHs6LjBmfSUsIHs6LjBmfSUsIHs6LjBmfSUnKSwKICAgICAgICBdCgogICAgICAgIGl0ZW1zID0gW10KCiAgICAgICAgcmdiID0gaGV4X3RvX3JnYih2YWx1ZSkKICAgICAgICBpdGVtcy5hcHBlbmQoQ29sb3JCYXNlMTZDYWxjdWxhdGlvbigKICAgICAgICAgICAgdmFsdWU9cmdiLAogICAgICAgICAgICBvcmRlcj1vcmRlcl9vZmZzZXQgKyAxLAogICAgICAgICAgICBjb2xvcl9jb2RlPSdyZ2InLAogICAgICAgICAgICBjb2xvcl9mb3JtYXQ9J3s6LjBmfSwgezouMGZ9LCB7Oi4wZn0nCiAgICAgICAgKQogICAgICAgICkKCiAgICAgICAgZm9yIGZ1bmMsIGNvbG9yX2NvZGUsIGNvbG9yX2Zvcm1hdCBpbiBmb3JtYXRzOgogICAgICAgICAgICB2YWx1ZSA9IGZ1bmMocmdiKQogICAgICAgICAgICBpdGVtcy5hcHBlbmQoCiAgICAgICAgICAgICAgICBDb2xvckJhc2UxNkNhbGN1bGF0aW9uKAogICAgICAgICAgICAgICAgICAgIHZhbHVlPXZhbHVlLAogICAgICAgICAgICAgICAgICAgIG9yZGVyPWxlbihpdGVtcykgKyBvcmRlcl9vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgY29sb3JfY29kZT1jb2xvcl9jb2RlLAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKQogICAgICAgIHJldHVybiBpdGVtcwoKICAgIEBCYXNlMTZDYWxjdWxhdGlvbi5EZWNvcmF0b3JzLmhhbmRsZV9lcnJvcl9yZXN1bHRzCiAgICBkZWYgdG9fcXVlcnlfcmVzdWx0KHNlbGYpOgogICAgICAgIGljb24gPSAnaW1hZ2VzL2NvbG9yLnN2ZycKICAgICAgICBuYW1lID0gc2VsZi5jb2xvcl9mb3JtYXQuZm9ybWF0KCpzZWxmLnZhbHVlKQogICAgICAgIGRlc2NyaXB0aW9uID0gJycKICAgICAgICBpZiBzZWxmLmNvbG9yX2NvZGU6CiAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gTGFuZ3VhZ2VTZXJ2aWNlKCkudHJhbnNsYXRlKHNlbGYuY29sb3JfY29kZSwgJ2NvbG9yJykudXBwZXIoKQogICAgICAgIGNsaXBib2FyZCA9IG5hbWUKICAgICAgICByZXR1cm4gQmFzZU5DYWxjdWxhdGlvbi5fZ2V0X3F1ZXJ5X3Jlc3VsdChpY29uPWljb24sIG5hbWU9bmFtZSwgZGVzY3JpcHRpb249ZGVzY3JpcHRpb24sIGNsaXBib2FyZD1jbGlwYm9hcmQpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgY29sb3JfZm9ybWF0PWNvbG9yX2Zvcm1hdAo8fGZpbV9lbmR8Pg=="]
["014ed18c145a7163a76c46dc9aeedbd62a135fd6-3","014ed18c145a7163a76c46dc9aeedbd62a135fd6","PHxmaW1fcHJlZml4fD4KZnJvbSBjYWxjdWxhdGVfYW55dGhpbmcuY2FsY3VsYXRpb24uY2FsY3VsYXRpb24gaW1wb3J0IENhbGN1bGF0aW9uCmZyb20gY2FsY3VsYXRlX2FueXRoaW5nLnF1ZXJ5LnJlc3VsdCBpbXBvcnQgUXVlcnlSZXN1bHQKZnJvbSBjYWxjdWxhdGVfYW55dGhpbmcubGFuZyBpbXBvcnQgTGFuZ3VhZ2VTZXJ2aWNlCmZyb20gY2FsY3VsYXRlX2FueXRoaW5nLnV0aWxzLmNvbG9ycyBpbXBvcnQgaGV4X3RvX3JnYiwgcmdiX3RvX2hzdiwgcmdiX3RvX2NteWssIHJnYl90b19oc2wKCgpjbGFzcyBCYXNlTkNhbGN1bGF0aW9uKENhbGN1bGF0aW9uKToKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBfZ2V0X3F1ZXJ5X3Jlc3VsdChpY29uPSdpbWFnZXMvaWNvbi5zdmcnLCBuYW1lPScnLCBkZXNjcmlwdGlvbj0nJywgY2xpcGJvYXJkPScnKToKICAgICAgICByZXR1cm4gUXVlcnlSZXN1bHQoCiAgICAgICAgICAgIGljb249aWNvbiwKICAgICAgICAgICAgbmFtZT1uYW1lLAogICAgICAgICAgICBkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbiwKICAgICAgICAgICAgY2xpcGJvYXJkPWNsaXBib2FyZAogICAgICAgICkKCiAgICBkZWYgdG9fYmFzZV9jYWxjdWxhdGlvbihzZWxmLCBiYXNlX2NhbGN1bGF0aW9uX2NsYXNzLCBvcmRlcj1Ob25lKToKICAgICAgICBvcmRlciA9IG9yZGVyIGlmIG9yZGVyIGlzIG5vdCBOb25lIGVsc2Ugc2VsZi5vcmRlcgogICAgICAgIHJldHVybiBiYXNlX2NhbGN1bGF0aW9uX2NsYXNzKHZhbHVlPXNlbGYudmFsdWUsIHF1ZXJ5PXNlbGYucXVlcnksIG9yZGVyPW9yZGVyKQoKICAgIEBDYWxjdWxhdGlvbi5EZWNvcmF0b3JzLmhhbmRsZV9lcnJvcl9yZXN1bHRzCiAgICBkZWYgdG9fcXVlcnlfcmVzdWx0KHNlbGYpOgogICAgICAgIHJldHVybiBCYXNlTkNhbGN1bGF0aW9uLl9nZXRfcXVlcnlfcmVzdWx0KG5hbWU9c3RyKHNlbGYudmFsdWUpKQoKCmNsYXNzIEJhc2UxNlN0cmluZ0NhbGN1bGF0aW9uKEJhc2VOQ2FsY3VsYXRpb24pOgogICAgQEJhc2VOQ2FsY3VsYXRpb24uRGVjb3JhdG9ycy5oYW5kbGVfZXJyb3JfcmVzdWx0cwogICAgZGVmIHRvX3F1ZXJ5X3Jlc3VsdChzZWxmKToKICAgICAgICBuYW1lID0gIjoiLmpvaW4oIns6MDJ4fSIuZm9ybWF0KG9yZChjKSkgZm9yIGMgaW4gc2VsZi52YWx1ZSkKICAgICAgICBkZXNjcmlwdGlvbiA9IExhbmd1YWdlU2VydmljZSgpLnRyYW5zbGF0ZSgnYnl0ZXMnLCAnY2FsY3VsYXRvcicpLnVwcGVyKCkKICAgICAgICBjbGlwYm9hcmQgPSBuYW1lCiAgICAgICAgcmV0dXJuIEJhc2VOQ2FsY3VsYXRpb24uX2dldF9xdWVyeV9yZXN1bHQobmFtZT1uYW1lLCBkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbiwgY2xpcGJvYXJkPWNsaXBib2FyZCkKCgpjbGFzcyBCYXNlMTBDYWxjdWxhdGlvbihCYXNlTkNhbGN1bGF0aW9uKToKICAgIEBCYXNlTkNhbGN1bGF0aW9uLkRlY29yYXRvcnMuaGFuZGxlX2Vycm9yX3Jlc3VsdHMKICAgIGRlZiB0b19xdWVyeV9yZXN1bHQoc2VsZik6CiAgICAgICAgbmFtZSA9IHN0cihpbnQoc2VsZi52YWx1ZSkpCiAgICAgICAgZGVzY3JpcHRpb24gPSBMYW5ndWFnZVNlcnZpY2UoKS50cmFuc2xhdGUoJ2RlYycsICdjYWxjdWxhdG9yJykudXBwZXIoKQogICAgICAgIGNsaXBib2FyZCA9IG5hbWUKICAgICAgICByZXR1cm4gQmFzZU5DYWxjdWxhdGlvbi5fZ2V0X3F1ZXJ5X3Jlc3VsdChuYW1lPW5hbWUsIGRlc2NyaXB0aW9uPWRlc2NyaXB0aW9uLCBjbGlwYm9hcmQ9Y2xpcGJvYXJkKQoKCmNsYXNzIEJhc2UyQ2FsY3VsYXRpb24oQmFzZU5DYWxjdWxhdGlvbik6CiAgICBAQmFzZU5DYWxjdWxhdGlvbi5EZWNvcmF0b3JzLmhhbmRsZV9lcnJvcl9yZXN1bHRzCiAgICBkZWYgdG9fcXVlcnlfcmVzdWx0KHNlbGYpOgogICAgICAgIG5hbWUgPSBiaW4oaW50KHNlbGYudmFsdWUpKVsyOl0KICAgICAgICBkZXNjcmlwdGlvbiA9IExhbmd1YWdlU2VydmljZSgpLnRyYW5zbGF0ZSgnYmluJywgJ2NhbGN1bGF0b3InKS51cHBlcigpCiAgICAgICAgY2xpcGJvYXJkID0gbmFtZQogICAgICAgIHJldHVybiBCYXNlTkNhbGN1bGF0aW9uLl9nZXRfcXVlcnlfcmVzdWx0KG5hbWU9bmFtZSwgZGVzY3JpcHRpb249ZGVzY3JpcHRpb24sIGNsaXBib2FyZD1jbGlwYm9hcmQpCgoKY2xhc3MgQmFzZThDYWxjdWxhdGlvbihCYXNlTkNhbGN1bGF0aW9uKToKICAgIEBCYXNlTkNhbGN1bGF0aW9uLkRlY29yYXRvcnMuaGFuZGxlX2Vycm9yX3Jlc3VsdHMKICAgIGRlZiB0b19xdWVyeV9yZXN1bHQoc2VsZik6CiAgICAgICAgbmFtZSA9IG9jdChpbnQoc2VsZi52YWx1ZSkpWzI6XQogICAgICAgIGRlc2NyaXB0aW9uID0gTGFuZ3VhZ2VTZXJ2aWNlKCkudHJhbnNsYXRlKCdvY3QnLCAnY2FsY3VsYXRvcicpLnVwcGVyKCkKICAgICAgICBjbGlwYm9hcmQgPSBuYW1lCiAgICAgICAgcmV0dXJuIEJhc2VOQ2FsY3VsYXRpb24uX2dldF9xdWVyeV9yZXN1bHQobmFtZT1uYW1lLCBkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbiwgY2xpcGJvYXJkPWNsaXBib2FyZCkKCgpjbGFzcyBCYXNlMTZDYWxjdWxhdGlvbihCYXNlTkNhbGN1bGF0aW9uKToKICAgIEBCYXNlTkNhbGN1bGF0aW9uLkRlY29yYXRvcnMuaGFuZGxlX2Vycm9yX3Jlc3VsdHMKICAgIGRlZiB0b19xdWVyeV9yZXN1bHQoc2VsZik6CiAgICAgICAgbmFtZSA9IGhleChpbnQoc2VsZi52YWx1ZSkpWzI6XQogICAgICAgIGRlc2NyaXB0aW9uID0gTGFuZ3VhZ2VTZXJ2aWNlKCkudHJhbnNsYXRlKCdoZXgnLCAnY2FsY3VsYXRvcicpLnVwcGVyKCkKICAgICAgICBjbGlwYm9hcmQgPSBuYW1lCiAgICAgICAgcmV0dXJuIEJhc2VOQ2FsY3VsYXRpb24uX2dldF9xdWVyeV9yZXN1bHQobmFtZT1uYW1lLCBkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbiwgY2xpcGJvYXJkPWNsaXBib2FyZCkKCgpjbGFzcyBDb2xvckJhc2UxNkNhbGN1bGF0aW9uKEJhc2UxNkNhbGN1bGF0aW9uKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZT1Ob25lLCBxdWVyeT0nJywgZXJyb3I9Tm9uZSwgb3JkZXI9MCwgY29sb3JfY29kZT1Ob25lLCBjb2xvcl9mb3JtYXQ9Tm9uZSk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyh2YWx1ZT12YWx1ZSwgcXVlcnk9cXVlcnksIGVycm9yPWVycm9yLCBvcmRlcj1vcmRlcikKICAgICAgICBzZWxmLmNvbG9yX2NvZGUgPSBjb2xvcl9jb2RlCiAgICAgICAgc2VsZi5jb2xvcl9mb3JtYXQgPSBjb2xvcl9mb3JtYXQgb3IgJ3s6LjJmfSwgezouMmZ9LCB7Oi4yZn0nCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGdldF9jb2xvcl9jYWxjdWxhdGlvbnModmFsdWUsIG9yZGVyX29mZnNldCk6CiAgICAgICAgZm9ybWF0cyA9IFsKICAgICAgICAgICAgKHJnYl90b19oc3YsICdoc3YnLCAnezouMGZ9LCB7Oi4wZn0lLCB7Oi4wZn0lJyksCiAgICAgICAgICAgIChyZ2JfdG9faHNsLCAnaHNsJywgJ3s6LjBmfSwgezouMGZ9JSwgezouMGZ9JScpLAogICAgICAgICAgICAocmdiX3RvX2NteWssICdjbXlrJywgJ3s6LjBmfSUsIHs6LjBmfSUsIHs6LjBmfSUsIHs6LjBmfSUnKSwKICAgICAgICBdCgogICAgICAgIGl0ZW1zID0gW10KCiAgICAgICAgcmdiID0gaGV4X3RvX3JnYih2YWx1ZSkKICAgICAgICBpdGVtcy5hcHBlbmQoQ29sb3JCYXNlMTZDYWxjdWxhdGlvbigKICAgICAgICAgICAgdmFsdWU9cmdiLAogICAgICAgICAgICBvcmRlcj1vcmRlcl9vZmZzZXQgKyAxLAogICAgICAgICAgICBjb2xvcl9jb2RlPSdyZ2InLAogICAgICAgICAgICBjb2xvcl9mb3JtYXQ9J3s6LjBmfSwgezouMGZ9LCB7Oi4wZn0nCiAgICAgICAgKQogICAgICAgICkKCiAgICAgICAgZm9yIGZ1bmMsIGNvbG9yX2NvZGUsIGNvbG9yX2Zvcm1hdCBpbiBmb3JtYXRzOgogICAgICAgICAgICB2YWx1ZSA9IGZ1bmMocmdiKQogICAgICAgICAgICBpdGVtcy5hcHBlbmQoCiAgICAgICAgICAgICAgICBDb2xvckJhc2UxNkNhbGN1bGF0aW9uKAogICAgICAgICAgICAgICAgICAgIHZhbHVlPXZhbHVlLAogICAgICAgICAgICAgICAgICAgIG9yZGVyPWxlbihpdGVtcykgKyBvcmRlcl9vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgY29sb3JfY29kZT1jb2xvcl9jb2RlLAogICAgICAgICAgICAgICAgICAgIGNvbG9yX2Zvcm1hdD1jb2xvcl9mb3JtYXQKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKQogICAgICAgIHJldHVybiBpdGVtcwo8fGZpbV9ob2xlfD4KICAgICAgICBuYW1lID0gc2VsZi5jb2xvcl9mb3JtYXQuZm9ybWF0KCpzZWxmLnZhbHVlKQogICAgICAgIGRlc2NyaXB0aW9uID0gJycKICAgICAgICBpZiBzZWxmLmNvbG9yX2NvZGU6CiAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gTGFuZ3VhZ2VTZXJ2aWNlKCkudHJhbnNsYXRlKHNlbGYuY29sb3JfY29kZSwgJ2NvbG9yJykudXBwZXIoKQogICAgICAgIGNsaXBib2FyZCA9IG5hbWUKICAgICAgICByZXR1cm4gQmFzZU5DYWxjdWxhdGlvbi5fZ2V0X3F1ZXJ5X3Jlc3VsdChpY29uPWljb24sIG5hbWU9bmFtZSwgZGVzY3JpcHRpb249ZGVzY3JpcHRpb24sIGNsaXBib2FyZD1jbGlwYm9hcmQpCjx8ZmltX3N1ZmZpeHw+CgogICAgQEJhc2UxNkNhbGN1bGF0aW9uLkRlY29yYXRvcnMuaGFuZGxlX2Vycm9yX3Jlc3VsdHMKICAgIGRlZiB0b19xdWVyeV9yZXN1bHQoc2VsZik6CiAgICAgICAgaWNvbiA9ICdpbWFnZXMvY29sb3Iuc3ZnJwo8fGZpbV9lbmR8Pg=="]
["e12b692dbade5a4d51484ef88532492615fa6758-1","e12b692dbade5a4d51484ef88532492615fa6758","PHxmaW1fcHJlZml4fD4KZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgc2VyaWFsaXplcnMKZnJvbSAubW9kZWxzIGltcG9ydCBOb3JtYXMKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgTm9ybWFzU2VyaWFsaXplcihzZXJpYWxpemVycy5Nb2RlbFNlcmlhbGl6ZXIpOgogICAgY2xhc3MgTWV0YToKICAgICAgICBtb2RlbCA9IE5vcm1hcwogICAgICAgIGZpZWxkcyA9ICgnaWQnLCAnc2lnbGEnLCAnY29kaWdvJywgJ3ZpZ2VuY2lhJywgJ2ZvbnRlJywgJ2FyZWEnLCAndGl0dWxvJywgJ2Rlc2NyaWNhbycsICdjb25zZXF1ZW5jaWFzJywgJ2Fjb2VzJywgJ3Vzb2NvcnJldG8nLCAnZGVzY2FydGUnLCAncmlzY29zJywgJ3N0YXR1cycpCjx8ZmltX2VuZHw+"]
["c9ce4c977c3dec1718b29914a533011aa976e9ef-4","c9ce4c977c3dec1718b29914a533011aa976e9ef","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKZnJvbSBjdGMgaW1wb3J0IHNwZWMKZnJvbSBjdGMgaW1wb3J0IGJpbmFyeQpmcm9tIC4uIGltcG9ydCBycGNfcmVxdWVzdAoKCmRlZiBjb25zdHJ1Y3RfZXRoX2dldF90cmFuc2FjdGlvbl9jb3VudCgKICAgIGZyb21fYWRkcmVzczogc3BlYy5CaW5hcnlEYXRhLAogICAgYmxvY2tfbnVtYmVyOiBzcGVjLkJsb2NrTnVtYmVyUmVmZXJlbmNlID0gJ2xhdGVzdCcsCikgLT4gc3BlYy5ScGNSZXF1ZXN0OgoKICAgIGJsb2NrX251bWJlciA9IGJpbmFyeS5lbmNvZGVfYmxvY2tfbnVtYmVyKGJsb2NrX251bWJlcikKICAgIHJldHVybiBycGNfcmVxdWVzdC5jcmVhdGUoCiAgICAgICAgJ2V0aF9nZXRUcmFuc2FjdGlvbkNvdW50JywKICAgICAgICBbZnJvbV9hZGRyZXNzLCBibG9ja19udW1iZXJdLAogICAgKQoKCmRlZiBjb25zdHJ1Y3RfZXRoX2dldF90cmFuc2FjdGlvbl9ieV9oYXNoKAogICAgdHJhbnNhY3Rpb25faGFzaDogc3BlYy5CaW5hcnlEYXRhLAopIC0+IHNwZWMuUnBjUmVxdWVzdDoKICAgIHJldHVybiBycGNfcmVxdWVzdC5jcmVhdGUoJ2V0aF9nZXRUcmFuc2FjdGlvbkJ5SGFzaCcsIFt0cmFuc2FjdGlvbl9oYXNoXSkKCgpkZWYgY29uc3RydWN0X2V0aF9nZXRfdHJhbnNhY3Rpb25fYnlfYmxvY2tfaGFzaF9hbmRfaW5kZXgoCiAgICBibG9ja19oYXNoOiBzcGVjLkJpbmFyeURhdGEsCiAgICB0cmFuc2FjdGlvbl9pbmRleDogc3BlYy5CaW5hcnlEYXRhLAopIC0+IHNwZWMuUnBjUmVxdWVzdDoKICAgIHRyYW5zYWN0aW9uX2luZGV4ID0gYmluYXJ5LmNvbnZlcnQodHJhbnNhY3Rpb25faW5kZXgsICdwcmVmaXhfaGV4JykKCiAgICByZXR1cm4gcnBjX3JlcXVlc3QuY3JlYXRlKAogICAgICAgICdldGhfZ2V0VHJhbnNhY3Rpb25CeUJsb2NrSGFzaEFuZEluZGV4JywKICAgICAgICBbYmxvY2tfaGFzaCwgdHJhbnNhY3Rpb25faW5kZXhdLAogICAgKQoKCmRlZiBjb25zdHJ1Y3RfZXRoX2dldF90cmFuc2FjdGlvbl9ieV9ibG9ja19udW1iZXJfYW5kX2luZGV4KAogICAgYmxvY2tfbnVtYmVyOiBzcGVjLkJsb2NrTnVtYmVyUmVmZXJlbmNlLAogICAgdHJhbnNhY3Rpb25faW5kZXg6IHNwZWMuQmluYXJ5RGF0YSwKKSAtPiBzcGVjLlJwY1JlcXVlc3Q6CiAgICBibG9ja19udW1iZXIgPSBiaW5hcnkuZW5jb2RlX2Jsb2NrX251bWJlcihibG9ja19udW1iZXIpCiAgICB0cmFuc2FjdGlvbl9pbmRleCA9IGJpbmFyeS5jb252ZXJ0KHRyYW5zYWN0aW9uX2luZGV4LCAncHJlZml4X2hleCcpCgogICAgcmV0dXJuIHJwY19yZXF1ZXN0LmNyZWF0ZSgKICAgICAgICAnZXRoX2dldFRyYW5zYWN0aW9uQnlCbG9ja051bWJlckFuZEluZGV4JywKICAgICAgICBbYmxvY2tfbnVtYmVyLCB0cmFuc2FjdGlvbl9pbmRleF0sCiAgICApCgoKZGVmIGNvbnN0cnVjdF9ldGhfZ2V0X3RyYW5zYWN0aW9uX3JlY2VpcHQoCiAgICB0cmFuc2FjdGlvbl9oYXNoOiBzcGVjLkJpbmFyeURhdGEsCikgLT4gc3BlYy5ScGNSZXF1ZXN0OgogICAgcmV0dXJuIHJwY19yZXF1ZXN0LmNyZWF0ZSgKICAgICAgICAnZXRoX2dldFRyYW5zYWN0aW9uUmVjZWlwdCcsCiAgICAgICAgW3RyYW5zYWN0aW9uX2hhc2hdLAogICAgKQoKCmRlZiBjb25zdHJ1Y3RfZXRoX2dldF9ibG9ja190cmFuc2FjdGlvbl9jb3VudF9ieV9oYXNoKAogICAgYmxvY2tfaGFzaDogc3BlYy5CaW5hcnlEYXRhLAopIC0+IHNwZWMuUnBjUmVxdWVzdDoKICAgIHJldHVybiBycGNfcmVxdWVzdC5jcmVhdGUoCiAgICAgICAgJ2V0aF9nZXRCbG9ja1RyYW5zYWN0aW9uQ291bnRCeUhhc2gnLAogICAgICAgIFtibG9ja19oYXNoXSwKICAgICkKCgpkZWYgY29uc3RydWN0X2V0aF9nZXRfYmxvY2tfdHJhbnNhY3Rpb25fY291bnRfYnlfbnVtYmVyKAogICAgYmxvY2tfbnVtYmVyOiBzcGVjLkJsb2NrTnVtYmVyUmVmZXJlbmNlLAopIC0+IHNwZWMuUnBjUmVxdWVzdDoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGJsb2NrX251bWJlciA9IGJpbmFyeS5lbmNvZGVfYmxvY2tfbnVtYmVyKGJsb2NrX251bWJlcikKICAgIHJldHVybiBycGNfcmVxdWVzdC5jcmVhdGUoCiAgICAgICAgJ2V0aF9nZXRCbG9ja1RyYW5zYWN0aW9uQ291bnRCeU51bWJlcicsCjx8ZmltX2VuZHw+"]
["1180852b46b5b06f92aba246d92bf89e1701f326-1","1180852b46b5b06f92aba246d92bf89e1701f326","PHxmaW1fcHJlZml4fD4KIiIiCkZvcm1zIGFuZCB2YWxpZGF0aW9uIGNvZGUgZm9yIHVzZXIgcmVnaXN0cmF0aW9uLgoKTm90ZSB0aGF0IGFsbCBvZiB0aGVzZSBmb3JtcyBhc3N1bWUgRGphbmdvJ3MgYnVuZGxlIGRlZmF1bHQgYGBVc2VyYGAKbW9kZWw7IHNpbmNlIGl0J3Mgbm90IHBvc3NpYmxlIGZvciBhIGZvcm0gdG8gYW50aWNpcGF0ZSBpbiBhZHZhbmNlIHRoZQpuZWVkcyBvZiBjdXN0b20gdXNlciBtb2RlbHMsIHlvdSB3aWxsIG5lZWQgdG8gd3JpdGUgeW91ciBvd24gZm9ybXMgaWYKeW91J3JlIHVzaW5nIGEgY3VzdG9tIG1vZGVsLgoKIiIiCgpmcm9tIHNjaGVtYS5tb2RlbHMgaW1wb3J0IFVzZXJQcm9maWxlCmZyb20gZGphbmdvIGltcG9ydCBmb3Jtcwpmcm9tIGRqYW5nby5jb250cmliLmF1dGggaW1wb3J0IGdldF91c2VyX21vZGVsCmZyb20gZGphbmdvLmNvbnRyaWIuYXV0aC5mb3JtcyBpbXBvcnQgUGFzc3dvcmRSZXNldEZvcm0KZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLnRva2VucyBpbXBvcnQgZGVmYXVsdF90b2tlbl9nZW5lcmF0b3IKZnJvbSBkamFuZ28uY29udHJpYi5zaXRlcy5tb2RlbHMgaW1wb3J0IGdldF9jdXJyZW50X3NpdGUKZnJvbSBkamFuZ28udGVtcGxhdGUgaW1wb3J0IGxvYWRlcgpmcm9tIGRqYW5nby51dGlscy5lbmNvZGluZyBpbXBvcnQgZm9yY2VfYnl0ZXMKZnJvbSBkamFuZ28udXRpbHMuaHR0cCBpbXBvcnQgdXJsc2FmZV9iYXNlNjRfZW5jb2RlCmZyb20gZGphbmdvLnV0aWxzLnRyYW5zbGF0aW9uIGltcG9ydCB1Z2V0dGV4dF9sYXp5IGFzIF8KZnJvbSBodHRwX2hhbmRsZXIuc2V0dGluZ3MgaW1wb3J0IFdFQlNJVEUKCmNsYXNzIFJlZ2lzdHJhdGlvbkZvcm0oZm9ybXMuRm9ybSk6CiAgICAiIiIKICAgIEZvcm0gZm9yIHJlZ2lzdGVyaW5nIGEgbmV3IHVzZXIgYWNjb3VudC4KICAgIAogICAgVmFsaWRhdGVzIHRoYXQgdGhlIHJlcXVlc3RlZCB1c2VybmFtZSBpcyBub3QgYWxyZWFkeSBpbiB1c2UsIGFuZAogICAgcmVxdWlyZXMgdGhlIHBhc3N3b3JkIHRvIGJlIGVudGVyZWQgdHdpY2UgdG8gY2F0Y2ggdHlwb3MuCiAgICAKICAgIFN1YmNsYXNzZXMgc2hvdWxkIGZlZWwgZnJlZSB0byBhZGQgYW55IGFkZGl0aW9uYWwgdmFsaWRhdGlvbiB0aGV5CiAgICBuZWVkLCBidXQgc2hvdWxkIGF2b2lkIGRlZmluaW5nIGEgYGBzYXZlKClgYCBtZXRob2QgLS0gdGhlIGFjdHVhbAogICAgc2F2aW5nIG9mIGNvbGxlY3RlZCB1c2VyIGRhdGEgaXMgZGVsZWdhdGVkIHRvIHRoZSBhY3RpdmUKICAgIHJlZ2lzdHJhdGlvbiBiYWNrZW5kLgoKICAgICIiIgogICAgcmVxdWlyZWRfY3NzX2NsYXNzID0gJ3JlcXVpcmVkJwogICAgZW1haWwgPSBmb3Jtcy5FbWFpbEZpZWxkKGxhYmVsPV8oIkUtbWFpbCIpKQogICAgcGFzc3dvcmQxID0gZm9ybXMuQ2hhckZpZWxkKHdpZGdldD1mb3Jtcy5QYXNzd29yZElucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPV8oIlBhc3N3b3JkIikpCiAgICBwYXNzd29yZDIgPSBmb3Jtcy5DaGFyRmllbGQod2lkZ2V0PWZvcm1zLlBhc3N3b3JkSW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XygiUGFzc3dvcmQgKGFnYWluKSIpKQoKICAgIGRlZiBjbGVhbihzZWxmKToKICAgICAgICAiIiIKICAgICAgICBWZXJpZml5IHRoYXQgdGhlIHZhbHVlcyBlbnRlcmVkIGludG8gdGhlIHR3byBwYXNzd29yZCBmaWVsZHMKICAgICAgICBtYXRjaC4gTm90ZSB0aGF0IGFuIGVycm9yIGhlcmUgd2lsbCBlbmQgdXAgaW4KICAgICAgICBgYG5vbl9maWVsZF9lcnJvcnMoKWBgIGJlY2F1c2UgaXQgZG9lc24ndCBhcHBseSB0byBhIHNpbmdsZQogICAgICAgIGZpZWxkLgogICAgICAgIAogICAgICAgICIiIgogICAgICAgIGlmICdwYXNzd29yZDEnIGluIHNlbGYuY2xlYW5lZF9kYXRhIGFuZCAncGFzc3dvcmQyJyBpbiBzZWxmLmNsZWFuZWRfZGF0YToKICAgICAgICAgICAgaWYgc2VsZi5jbGVhbmVkX2RhdGFbJ3Bhc3N3b3JkMSddICE9IHNlbGYuY2xlYW5lZF9kYXRhWydwYXNzd29yZDInXToKICAgICAgICAgICAgICAgIHJhaXNlIGZvcm1zLlZhbGlkYXRpb25FcnJvcihfKCJUaGUgdHdvIHBhc3N3b3JkIGZpZWxkcyBkaWRuJ3QgbWF0Y2guIikpCiAgICAgICAgcmV0dXJuIHNlbGYuY2xlYW5lZF9kYXRhCgoKPHxmaW1faG9sZXw+CiAgICAKICAgICIiIgogICAgdG9zID0gZm9ybXMuQm9vbGVhbkZpZWxkKHdpZGdldD1mb3Jtcy5DaGVja2JveElucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPV8odSdJIGhhdmUgcmVhZCBhbmQgYWdyZWUgdG8gdGhlIFRlcm1zIG9mIFNlcnZpY2UnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlcz17J3JlcXVpcmVkJzogXygiWW91IG11c3QgYWdyZWUgdG8gdGhlIHRlcm1zIHRvIHJlZ2lzdGVyIil9KQoKCmNsYXNzIFJlZ2lzdHJhdGlvbkZvcm1VbmlxdWVFbWFpbChSZWdpc3RyYXRpb25Gb3JtKToKICAgICIiIgogICAgU3ViY2xhc3Mgb2YgYGBSZWdpc3RyYXRpb25Gb3JtYGAgd2hpY2ggZW5mb3JjZXMgdW5pcXVlbmVzcyBvZgogICAgZW1haWwgYWRkcmVzc2VzLgogICAgCiAgICAiIiIKICAgIGRlZiBjbGVhbl9lbWFpbChzZWxmKToKICAgICAgICAiIiIKICAgICAgICBWYWxpZGF0ZSB0aGF0IHRoZSBzdXBwbGllZCBlbWFpbCBhZGRyZXNzIGlzIHVuaXF1ZSBmb3IgdGhlCiAgICAgICAgc2l0ZS4KICAgICAgICAKICAgICAgICAiIiIKICAgICAgICBpZiBVc2VyUHJvZmlsZS5vYmplY3RzLmZpbHRlcihlbWFpbF9faWV4YWN0PXNlbGYuY2xlYW5lZF9kYXRhWydlbWFpbCddKToKICAgICAgICAgICAgcmFpc2UgZm9ybXMuVmFsaWRhdGlvbkVycm9yKF8oIlRoaXMgZW1haWwgYWRkcmVzcyBpcyBhbHJlYWR5IGluIHVzZS4gUGxlYXNlIHN1cHBseSBhIGRpZmZlcmVudCBlbWFpbCBhZGRyZXNzLiIpKQogICAgICAgIHJldHVybiBzZWxmLmNsZWFuZWRfZGF0YVsnZW1haWwnXQoKCmNsYXNzIFJlZ2lzdHJhdGlvbkZvcm1Ob0ZyZWVFbWFpbChSZWdpc3RyYXRpb25Gb3JtKToKICAgICIiIgogICAgU3ViY2xhc3Mgb2YgYGBSZWdpc3RyYXRpb25Gb3JtYGAgd2hpY2ggZGlzYWxsb3dzIHJlZ2lzdHJhdGlvbiB3aXRoCiAgICBlbWFpbCBhZGRyZXNzZXMgZnJvbSBwb3B1bGFyIGZyZWUgd2VibWFpbCBzZXJ2aWNlczsgbW9kZXJhdGVseQogICAgdXNlZnVsIGZvciBwcmV2ZW50aW5nIGF1dG9tYXRlZCBzcGFtIHJlZ2lzdHJhdGlvbnMuCiAgICAKICAgIFRvIGNoYW5nZSB0aGUgbGlzdCBvZiBiYW5uZWQgZG9tYWlucywgc3ViY2xhc3MgdGhpcyBmb3JtIGFuZAogICAgb3ZlcnJpZGUgdGhlIGF0dHJpYnV0ZSBgYGJhZF9kb21haW5zYGAuCiAgICAKICAgICIiIgogICAgYmFkX2RvbWFpbnMgPSBbJ2FpbS5jb20nLCAnYW9sLmNvbScsICdlbWFpbC5jb20nLCAnZ21haWwuY29tJywKICAgICAgICAgICAgICAgICAgICdnb29nbGVtYWlsLmNvbScsICdob3RtYWlsLmNvbScsICdodXNobWFpbC5jb20nLAogICAgICAgICAgICAgICAgICAgJ21zbi5jb20nLCAnbWFpbC5ydScsICdtYWlsaW5hdG9yLmNvbScsICdsaXZlLmNvbScsCiAgICAgICAgICAgICAgICAgICAneWFob28uY29tJ10KICAgIAogICAgZGVmIGNsZWFuX2VtYWlsKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIENoZWNrIHRoZSBzdXBwbGllZCBlbWFpbCBhZGRyZXNzIGFnYWluc3QgYSBsaXN0IG9mIGtub3duIGZyZWUKICAgICAgICB3ZWJtYWlsIGRvbWFpbnMuCiAgICAgICAgCiAgICAgICAgIiIiCiAgICAgICAgZW1haWxfZG9tYWluID0gc2VsZi5jbGVhbmVkX2RhdGFbJ2VtYWlsJ10uc3BsaXQoJ0AnKVsxXQogICAgICAgIGlmIGVtYWlsX2RvbWFpbiBpbiBzZWxmLmJhZF9kb21haW5zOgogICAgICAgICAgICByYWlzZSBmb3Jtcy5WYWxpZGF0aW9uRXJyb3IoXygiUmVnaXN0cmF0aW9uIHVzaW5nIGZyZWUgZW1haWwgYWRkcmVzc2VzIGlzIHByb2hpYml0ZWQuIFBsZWFzZSBzdXBwbHkgYSBkaWZmZXJlbnQgZW1haWwgYWRkcmVzcy4iKSkKICAgICAgICByZXR1cm4gc2VsZi5jbGVhbmVkX2RhdGFbJ2VtYWlsJ10KCmNsYXNzIE11cm11clBhc3N3b3JkUmVzZXRGb3JtKFBhc3N3b3JkUmVzZXRGb3JtKToKCiAgICBkZWYgc2F2ZShzZWxmLCBkb21haW5fb3ZlcnJpZGU9Tm9uZSwKICAgICAgICAgICAgIHN1YmplY3RfdGVtcGxhdGVfbmFtZT0ncmVnaXN0cmF0aW9uL3Bhc3N3b3JkX3Jlc2V0X3N1YmplY3QudHh0JywKICAgICAgICAgICAgIGVtYWlsX3RlbXBsYXRlX25hbWU9J3JlZ2lzdHJhdGlvbi9wYXNzd29yZF9yZXNldF9lbWFpbC5odG1sJywKICAgICAgICAgICAgIHVzZV9odHRwcz1GYWxzZSwgdG9rZW5fZ2VuZXJhdG9yPWRlZmF1bHRfdG9rZW5fZ2VuZXJhdG9yLAogICAgICAgICAgICAgZnJvbV9lbWFpbD1Ob25lLCByZXF1ZXN0PU5vbmUpOgogICAgICAgICIiIgogICAgICAgIEdlbmVyYXRlcyBhIG9uZS11c2Ugb25seSBsaW5rIGZvciByZXNldHRpbmcgcGFzc3dvcmQgYW5kIHNlbmRzIHRvIHRoZQogICAgICAgIHVzZXIuCiAgICAgICAgIiIiCiAgICAgICAgZnJvbSBkamFuZ28uY29yZS5tYWlsIGltcG9ydCBzZW5kX21haWwKICAgICAgICBVc2VyTW9kZWwgPSBnZXRfdXNlcl9tb2RlbCgpCiAgICAgICAgZW1haWwgPSBzZWxmLmNsZWFuZWRfZGF0YVsiZW1haWwiXQogICAgICAgIGFjdGl2ZV91c2VycyA9IFVzZXJNb2RlbC5fZGVmYXVsdF9tYW5hZ2VyLmZpbHRlcigKICAgICAgICAgICAgZW1haWxfX2lleGFjdD1lbWFpbCwgaXNfYWN0aXZlPVRydWUpCiAgICAgICAgZm9yIHVzZXIgaW4gYWN0aXZlX3VzZXJzOgogICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IG5vIGVtYWlsIGlzIHNlbnQgdG8gYSB1c2VyIHRoYXQgYWN0dWFsbHkgaGFzCiAgICAgICAgICAgICMgYSBwYXNzd29yZCBtYXJrZWQgYXMgdW51c2FibGUKICAgICAgICAgICAgaWYgbm90IHVzZXIuaGFzX3VzYWJsZV9wYXNzd29yZCgpOgogICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgIGlmIG5vdCBkb21haW5fb3ZlcnJpZGU6CiAgICAgICAgICAgICAgICBkb21haW4gPSBnZXRfY3VycmVudF9zaXRlKHJlcXVlc3QpLmRvbWFpbgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgZG9tYWluID0gZG9tYWluX292ZXJyaWRlCgogICAgICAgICAgICBjID0gewogICAgICAgICAgICAgICAgJ2VtYWlsJzogdXNlci5lbWFpbCwKICAgICAgICAgICAgICAgICdkb21haW4nOiBkb21haW4sCiAgICAgICAgICAgICAgICAnc2l0ZV9uYW1lJzogV0VCU0lURS50aXRsZSgpLAogICAgICAgICAgICAgICAgJ3VpZCc6IHVybHNhZmVfYmFzZTY0X2VuY29kZShmb3JjZV9ieXRlcyh1c2VyLnBrKSksCiAgICAgICAgICAgICAgICAndXNlcic6IHVzZXIsCiAgICAgICAgICAgICAgICAndG9rZW4nOiB0b2tlbl9nZW5lcmF0b3IubWFrZV90b2tlbih1c2VyKSwKICAgICAgICAgICAgICAgICdwcm90b2NvbCc6ICdodHRwcycgaWYgdXNlX2h0dHBzIGVsc2UgJ2h0dHAnLAogICAgICAgICAgICB9CiAgICAgICAgICAgIHN1YmplY3QgPSBsb2FkZXIucmVuZGVyX3RvX3N0cmluZyhzdWJqZWN0X3RlbXBsYXRlX25hbWUsIGMpCiAgICAgICAgICAgICMgRW1haWwgc3ViamVjdCAqbXVzdCBub3QqIGNvbnRhaW4gbmV3bGluZXMKICAgICAgICAgICAgc3ViamVjdCA9ICcnLmpvaW4oc3ViamVjdC5zcGxpdGxpbmVzKCkpCiAgICAgICAgICAgIGVtYWlsID0gbG9hZGVyLnJlbmRlcl90b19zdHJpbmcoZW1haWxfdGVtcGxhdGVfbmFtZSwgYykKICAgICAgICAgICAgc2VuZF9tYWlsKHN1YmplY3QsIGVtYWlsLCBmcm9tX2VtYWlsLCBbdXNlci5lbWFpbF0pCgo8fGZpbV9zdWZmaXh8PgpjbGFzcyBSZWdpc3RyYXRpb25Gb3JtVGVybXNPZlNlcnZpY2UoUmVnaXN0cmF0aW9uRm9ybSk6CiAgICAiIiIKICAgIFN1YmNsYXNzIG9mIGBgUmVnaXN0cmF0aW9uRm9ybWBgIHdoaWNoIGFkZHMgYSByZXF1aXJlZCBjaGVja2JveAogICAgZm9yIGFncmVlaW5nIHRvIGEgc2l0ZSdzIFRlcm1zIG9mIFNlcnZpY2UuCjx8ZmltX2VuZHw+"]
["31f7246d8d6a7f20833b13a8bd485bdce86d1bf6-2","31f7246d8d6a7f20833b13a8bd485bdce86d1bf6","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBGaWxlOiBtb2RlbF9kZXNjLnB5CgoKZnJvbSAuLnRyYWluLm1vZGVsX2Rlc2MgaW1wb3J0IE1vZGVsRGVzYywgTW9kZWxEZXNjQmFzZSAgIyBrZXB0IGZvciBCQyAjIG5vcWEKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCl9fYWxsX18gPSBbXQo8fGZpbV9lbmR8Pg=="]
["cc7c53d29ba39c1fb9958ba429510f6006c16d48-1","cc7c53d29ba39c1fb9958ba429510f6006c16d48","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyBQbGFuZXRzLnB5IC0tIFBsYW5ldHMgYW5kIFNvbGFyIFN5c3RlbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgIFdlc3Rlcm4gV2FzaGluZ3RvbiBVbml2ZXJzaXR5IC0tIENTQ0kgNC81OTdIIC0tIFNwcmluZyAyMDE2ICAgICAgICAgICAgICAgICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmltcG9ydCByYW5kb20KCmZyb20gQ2FyZ28gaW1wb3J0IFJlc291cmNlLCBwbGFuZXRUeXBlUXQsIERFRkFVTFRfQ0lWX1NQQVdOX0NIQU5DRQoKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBDb25zdGFudHM6Ck1BWF9CQVNFX0NIQU5DRSA9IDY2Ck1JTl9IRUFMVEggICAgICA9IDI1CkhBUlZFU1RfREFNX01JTiA9ICAxCkhBUlZFU1RfREFNX01BWCA9ICA2CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUGxhbmV0IENsYXNzOgpjbGFzcyBQbGFuZXQoKToKICAgICcnJwogICAgcmVzb3VyY2UgICAgLS0gQ2l2aWxpemF0aW9uIGFuZCBSZXNvdXJjZXMgb24gUGxhbmV0LgogICAgaGVhbHRoICAgICAgLS0gUmVtYWluaW5nIHBvcHVsYXRpb24sIG9yIHJlc291cmNlcywgaWYgYW55LgogICAgYmFzZUNoYW5jZSAgLS0gQmFzZSBjaGFuY2UgZm9yIGdhdGhlcmluZywgZmlnaHRpbmcsIGV0Yy4KICAgICcnJwogICAgZGVmIF9faW5pdF9fKHNlbGYsa2luZCxjaXZfY2hhbmNlID0gREVGQVVMVF9DSVZfU1BBV05fQ0hBTkNFKToKICAgICAgICBzZWxmLnJlc291cmNlID0gUmVzb3VyY2Uoa2luZCxjaXZfY2hhbmNlKQogICAgICAgIHNlbGYuaGVhbHRoID0gcmFuZG9tLnJhbmRpbnQoTUlOX0hFQUxUSCwxMDApCiAgICAgICAgc2VsZi5iYXNlQ2hhbmNlID0gcmFuZG9tLnJhbmRpbnQoMCxNQVhfQkFTRV9DSEFOQ0UpCiAgICBkZWYgaGFydmVzdChzZWxmLGFkaiA9IDAsIGJvbnVzID0gMCk6CiAgICAgICAgaWYgc2VsZi5yZXNvdXJjZS5jaXYgPT0gTm9uZSBhbmQgc2VsZi5oZWFsdGggPiAwOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHNlbGYuaGVhbHRoIC09IHJhbmRvbS5yYW5kaW50KEhBUlZFU1RfREFNX01JTixIQVJWRVNUX0RBTV9NQVgpCjx8ZmltX2VuZHw+"]
["d1ced8fe9b1c868307e329a32a6cffe0df94cebc-2","d1ced8fe9b1c868307e329a32a6cffe0df94cebc","PHxmaW1fcHJlZml4fD4KZnJvbSBQSUwgaW1wb3J0IEltYWdlCmltcG9ydCByZQppbXBvcnQgZ2xvYgppbXBvcnQgcHl0ZXNzZXJhY3QKZnJvbSBweXRlc3NlcmFjdCBpbXBvcnQgaW1hZ2VfdG9fc3RyaW5nCnB5dGVzc2VyYWN0LnB5dGVzc2VyYWN0LnRlc3NlcmFjdF9jbWQgPSAnJyAjUEFUSCBUTyBURVNTRVJBQ1QgRk9MREVSCgpkZWYgZ2V0Q29vcmRzKHRleHQpOiAjU2VhcmNoIHRleHQgZm9yIGNvb3JkaW5hdGVzIGFuZCBhc2sgZm9yIHVzZXIgaW5wdXQKICAgIGNvb3JkcyAgPSBbXQogICAgc3RyaWN0Y29vcmRzID0gW10KICAgIHBlcm1jb29yZHBhdHRlcm4gPSAnW0VXXVxkezEsOX0uKj9ccy4qP1xzLio/XC4uKj9bTlNdXGR7MSw5fS4qP1xzLio/XHMuKj9cLlxkezAsOX0nICNQZXJtaXNzaXZlIGNvb3JkIHJlZ2V4CiAgICBzdHJpY3Rjb29yZHBhdHRlcm4gPSAnV1swLTlsXVswLTlsXVswLTldXHNbMC05XVswLTldXHNbMC05XVswLTldXFcuLlwvTlswLTldWzAtOV1cc1swLTldWzAtOV1cc1swLTldWzAtOV1cVy4ufFNbMC05XVswLTldXHNbMC05XVswLTldXHNbMC05XVswLTldXFcuLnxFWzAtOV1bMC05XVswLTldXHNbMC05XVswLTldXHNbMC05XVswLTldXFcuLlwvTlswLTldWzAtOV1cc1swLTldWzAtOV1cc1swLTldWzAtOV1cVy4ufFNbMC05XVswLTldXHNbMC05XVswLTldXHNbMC05XVswLTldXFcuLicgI1N0cmljdCBjb29yZCByZWdleAoKICAgICNEZXRlY3QgY29vcmRpbmF0ZXMgcGVybWlzc2l2ZWx5CiAgICB4ID0gMAogICAgZm9yIG1hdGNoIGluIHJlLmZpbmRhbGwocGVybWNvb3JkcGF0dGVybiwgdGV4dCk6CiAgICAgICAgY29vcmRzLmFwcGVuZChtYXRjaCkKICAgICAgICB4ICs9IDEKCiAgICAjRGV0ZWN0IGNvb3JkaW5hdGVzIHN0cmljdGx5CiAgICB6ID0gMAogICAgZm9yIG1hdGNoIGluIHJlLmZpbmRhbGwoc3RyaWN0Y29vcmRwYXR0ZXJuLCB0ZXh0KToKICAgICAgICBzdHJpY3Rjb29yZHMuYXBwZW5kKG1hdGNoKQogICAgICAgIHogKz0gMQoKICAgICNMaXN0IHRvIHJlbWVtYmVyIHByZS1yZXBhaXJlZCBjb29yZHMKICAgIHJlcGFpcmVkID0gW10KCiAgICAjbG9vcCB0aHJvdWdoIGNvb3JkcyBydW5uaW5nIHBydW5lTgogICAgeSA9IDAKICAgIGZvciBpIGluIGNvb3JkczoKICAgICAgICBjb3JkID0gcHJ1bmVOKGkpCiAgICAgICAgaWYgY29yZCAhPSAnJyBhbmQgbGVuKGNvcmQpIDw9IDI2OiAjYmxhbmsgY29yZHMgZGlkbid0IHJlcXVpcmUgcmVwYWlyLCBjb3JkcyBsb25nZXIgdGhhbiAyNiBjaGFyYWN0ZXJzIGFyZSBvdGhlcndpc2UgbWFsZm9ybWVkCiAgICAgICAgICAgIGRlbCBjb29yZHNbeV0gI3BydW5lIG5vdyBnb29kIGNvb3JkcyBmcm9tIGNvb3JkcwogICAgICAgICAgICByZXBhaXJlZC5hcHBlbmQoaSkgI3ByZS1yZXBhaXJlZAogICAgICAgICAgICBzdHJpY3Rjb29yZHMuYXBwZW5kKGNvcmQpICNhZGQgcmVwYWlyZWQgY29vcmRzIHRvIHN0cmljdGNvb3JkcwogICAgICAgIHkrPTEKCiAgICAjQmVnaW4gaW50ZXJhY3RpdmUgcG9ydGlvbgogICAgcHJpbnQgIlRlc3NlcmFjdCBmb3VuZCAiICsgc3RyKHgpICsgIiBjb29yZGluYXRlcyBpbiBwZXJtaXNzaXZlIG1vZGUgYW5kICIgKyBzdHIobGVuKHN0cmljdGNvb3JkcykpICsgIiBpbiBzdHJpY3QgbW9kZS4iCiAgICBwcmludCAiVGhlcmUgYXJlICIgKyBzdHIoeCAtIGxlbihzdHJpY3Rjb29yZHMpKSArICIgbWFsZm9ybWVkIGNvb3JkaW5hdGVzIHRoYXQgc2hvdWxkIGJlIGNvcnJlY3RlZC4iCiAgICBZTiA9IHJhd19pbnB1dCgiQ29ycmVjdCBub3c/IChZL04pOiAiKQogICAgcHJpbnQgWU4KICAgIGlmIFlOLnVwcGVyKCkgPT0gIlkiOgogICAgICAgICNsb29wIHRocm91Z2ggcGVybWlzc2l2ZSBjb29yZHMKICAgICAgICB5ID0gMAogICAgICAgIGZvciBjb29yZCBpbiBjb29yZHM6CiAgICAgICAgICAgIGlmIGNvb3JkIG5vdCBpbiBzdHJpY3Rjb29yZHMgYW5kIGNvb3JkIG5vdCBpbiByZXBhaXJlZDogI29ubHkgbG9vayBhdCBjb29yZHMgdGhhdCBhcmUgYmFkKG5vdCBpbiBzdHJpY3QgY29vcmRzKSBhbmQgd2VyZW4ndCByZXBhaXJlZChub3QgaW4gcmVwYWlyZWQgY29vcmRzKQogICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBlZGl0Q29vcmRzKGNvb3JkKSAjc2VlIGVkaXRDb29yZHMKICAgICAgICAgICAgICAgIGlmIHJlc3BvbnNlID09ICJEIjogI2RlbGV0ZQogICAgICAgICAgICAgICAgICAgIGRlbCBjb29yZHNbeV0KICAgICAgICAgICAgICAgIGVsaWYgcmVzcG9uc2UgPT0gIlMiOiAjc2tpcAogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBlbHNlOiAjaW5zZXJ0IHRoZSBjb3JyZWN0ZWQgY29vcmRpbmF0ZSBpbnRvIHN0cmljdGNvb3JkcwogICAgICAgICAgICAgICAgICAgIHN0cmljdGNvb3Jkcy5pbnNlcnQoeSwgcmVzcG9uc2UpCiAgICAgICAgICAgIHkrPTEKICAgIHJldHVybiBzdHJpY3Rjb29yZHMKCmRlZiBlZGl0Q29vcmRzKGNvb3JkKToKICAgIHByaW50ICJUaGUgbWFsZm9ybWVkIGNvb3JkOiAiICsgY29vcmQKPHxmaW1faG9sZXw+CiAgICAgICAgZ29vZGNvb3JkID0gcmF3X2lucHV0KCkKICAgIGlmIHJlcGFpci51cHBlcigpID09ICJEIjoKICAgICAgICBwcmludCAiRGVsZXRpbmcuLi4iCiAgICAgICAgZ29vZGNvb3JkID0gIkQiCiAgICBpZiByZXBhaXIudXBwZXIoKSA9PSAiUyI6CiAgICAgICAgcHJpbnQgIlNraXBwaW5nLi4uIgogICAgICAgIGdvb2Rjb29yZCA9ICJTIgogICAgcmV0dXJuIGdvb2Rjb29yZAoKZGVmIHBydW5lTihjb29yZCk6ICNSZXBhaXIgY29tbW9uIGVycm9yIGluIHRleHQgZGV0ZWN0aW9uKGRvdWJsZSBOcykKICAgIHggPSAwCiAgICBuZXdjb29yZCA9ICIiCiAgICBmb3IgaSBpbiBjb29yZDogI2xvb3AgdGhyb3VnaCBjaGFyYWN0ZXJzIGluIGNvb3JkCiAgICAgICAgaWYgaSA9PSAiTiIgYW5kIGNvb3JkW3grMV0gPT0gIk4iOiAjdHdvIGNvbnNlY3V0aXZlIE5zCiAgICAgICAgICAgIG5ld2Nvb3JkID0gKGNvb3JkWzp4XSArIGNvb3JkWyh4KzEpOl0pICNzbGljZSBzdHJpbmcgdG8gcmVtb3ZlIHNlY29uZCBOCiAgICAgICAgeCs9MQogICAgcmV0dXJuIG5ld2Nvb3JkCgoKZmlsZXMgPSBnbG9iLmdsb2IoJyoucG5nJykgI2xpc3Qgb2YgUE5HIGluIGZvbGRlcgoKZm9yIGZpbGUgaW4gZmlsZXM6ICNsb29wIHRocm91Z2ggaW1hZ2VzCiAgICBpbnB1dCA9IGZpbGUKICAgIHByaW50ICJGaWxlOiAiICsgZmlsZQogICAgdGV4dCA9IGltYWdlX3RvX3N0cmluZyhJbWFnZS5vcGVuKGlucHV0KSwgbGFuZz0nZ2VvJykgI3J1biBkaWN0aW9uYXJ5IHRleHQgZGV0ZWN0aW9uIG9uIGlucHV0IGltYWdlCiAgICBjb29yZHMgPSBnZXRDb29yZHModGV4dCkKCiAgICAjY3JlYXRlIENTViBvdXRwdXQKICAgIG91dHB1dCA9IGlucHV0ICsgJy5jc3YnCiAgICBmID0gb3BlbihvdXRwdXQsICd3JykKICAgIGZvciBpIGluIGNvb3JkczoKICAgICAgICBmLndyaXRlKGkgKyAiXG4iKQogICAgZi5jbG9zZSgpCgoKCgo8fGZpbV9zdWZmaXh8PgogICAgcmVwYWlyID0gcmF3X2lucHV0KCIoRSlkaXQvKEQpZWxldGUvKFMpa2lwOiAiKQogICAgaWYgcmVwYWlyLnVwcGVyKCkgPT0gIkUiOgogICAgICAgIHByaW50ICJFbnRlciB0aGUgY29ycmVjdCBjb29yZCIKICAgICAgICBwcmludCAiRm9ybWF0IHNob3VsZCBiZSAoRS9XKVhYWCBYWCBYWC5YWC8oTi9TKVhYWCBYWCBYWC5YWCIKPHxmaW1fZW5kfD4="]
["eed5fdf6aa61b20c00d5ec6557f64e0c1ae08835-1","eed5fdf6aa61b20c00d5ec6557f64e0c1ae08835","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uc2hvcnRjdXRzIGltcG9ydCByZW5kZXIsIHJlZGlyZWN0LCBnZXRfb2JqZWN0X29yXzQwNApmcm9tIGNvbXBzLm1vZGVscy5jb21wIGltcG9ydCBDb21wCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBjb21wcy5mb3JtcyBpbXBvcnQgQ29tcEZvcm0KCgpkZWYgZWRpdF9jb21wKHJlcXVlc3QsIGNvbXBfaWQpOgo8fGZpbV9lbmR8Pg=="]
["018dafa9275bcfe03bea92c64aee25a5db996b8f-1","018dafa9275bcfe03bea92c64aee25a5db996b8f","PHxmaW1fcHJlZml4fD4KZGVmIGdldF9scl9sYW1iZGEoc3RlcCwgd2FybV91cF9zdGVwczogaW50LCByZWR1Y2VfbHJfc3RlcHM6IGludCk6CiAgICByIiIiR2V0IGxyX2xhbWJkYSBmb3IgTGFtYmRhTFIuIEUuZy4sCgogICAgLi4gY29kZS1ibG9jazogcHl0aG9uCiAgICAgICAgbHJfbGFtYmRhID0gbGFtYmRhIHN0ZXA6IGdldF9scl9sYW1iZGEoc3RlcCwgd2FybV91cF9zdGVwcz0xMDAwLCByZWR1Y2VfbHJfc3RlcHM9MTAwMDApCgogICAgICAgIGZyb20gdG9yY2gub3B0aW0ubHJfc2NoZWR1bGVyIGltcG9ydCBMYW1iZGFMUgogICAgICAgIExhbWJkYUxSKG9wdGltaXplciwgbHJfbGFtYmRhKQoKICAgIEFyZ3M6CiAgICAgICAgd2FybV91cF9zdGVwczogaW50LCBzdGVwcyBmb3Igd2FybSB1cAogICAgICAgIHJlZHVjZV9scl9zdGVwczogaW50LCByZWR1Y2UgbGVhcm5pbmcgcmF0ZSBieSAwLjkgZXZlcnkgI3JlZHVjZV9scl9zdGVwcyBzdGVwcwoKICAgIFJldHVybnM6CiAgICAgICAgbGVhcm5pbmcgcmF0ZTogZmxvYXQKICAgICIiIgogICAgaWYgc3RlcCA8PSB3YXJtX3VwX3N0ZXBzOgogICAgICAgIHJldHVybiBzdGVwIC8gd2FybV91cF9zdGVwcwogICAgZWxzZToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJldHVybiAwLjkgKiogKHN0ZXAgLy8gcmVkdWNlX2xyX3N0ZXBzKQo8fGZpbV9lbmR8Pg=="]
["0129021a1ef51bc380dc4387c34503ace414ae0f-1","0129021a1ef51bc380dc4387c34503ace414ae0f","PHxmaW1fcHJlZml4fD4KIyA4LiBQcm9ncmFtZSB1biBtw6l0b2RvIHJlY3Vyc2l2byBxdWUgdHJhbnNmb3JtZSB1biBuw7ptZXJvIGV4cHJlc2FkbyBlbiBub3RhY2nDs24gYmluYXJpYSBhIHVuCiMgbsO6bWVybyBlbnRlcm8uCgpkZWYgYmluYXJpb0RlY2kobnVtKToKICAgIGlmIChudW0gPCAxMCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICByZXR1cm4gKG51bSkKPHxmaW1fZW5kfD4="]
["bbffc04ab30f179da48c5457a8e5180774e70eb2-4","bbffc04ab30f179da48c5457a8e5180774e70eb2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNvcHkKCmZyb20gcmVwb3J0bGFiLnBsYXR5cHVzIGltcG9ydCBTaW1wbGVEb2NUZW1wbGF0ZSwgUGFyYWdyYXBoLCBTcGFjZXIKZnJvbSByZXBvcnRsYWIucGxhdHlwdXMgaW1wb3J0IFRhYmxlLCBUYWJsZVN0eWxlLCBJbWFnZSwgUGFnZUJyZWFrCmZyb20gcmVwb3J0bGFiLmxpYi5zdHlsZXMgaW1wb3J0IGdldFNhbXBsZVN0eWxlU2hlZXQKZnJvbSByZXBvcnRsYWIucmxfY29uZmlnIGltcG9ydCBkZWZhdWx0UGFnZVNpemUKZnJvbSByZXBvcnRsYWIubGliLnVuaXRzIGltcG9ydCBpbmNoCmZyb20gcmVwb3J0bGFiLmxpYiBpbXBvcnQgY29sb3JzCgpmcm9tIHN1cHBvcnQgaW1wb3J0ICoKCmNsYXNzIFJldGFpbkNDKG9iamVjdCk6CiAgICAiIiJTUEFSQy9DQyBpbnRlZ3JhdGVkIGFkZGVuZHVtLiIiIgoKICAgIE5BTUUgPSAiQWNjZXNzLVJldXNlIgogICAgVkVSU0lPTiA9ICIxLjAiCgogICAgZGVmIF9fY2FsbF9fKHNlbGYsIGZpbGVuYW1lLCBtYW51c2NyaXB0PSIiLCBqb3VybmFsPSIiLCBhdXRob3I9W10sIAogICAgICAgICAgICAgICAgIHB1Ymxpc2hlcj0iIik6CiAgICAgICAgIiIiR2VuZXJhdGUgdGhlIFJldGFpbiBDQyBhZ3JlZW1lbnQuIiIiCgogICAgICAgICMgY2hlY2sgdGhlIHBhcmFtZXRlcnMKICAgICAgICB3aGlsZSBsZW4oYXV0aG9yKSA8IDQ6CiAgICAgICAgICAgIGF1dGhvci5hcHBlbmQoIiIpCgogICAgICAgIGRvYyA9IGdldERvY3VtZW50KGZpbGVuYW1lKQoKICAgICAgICBTdG9yeSA9IFtdCgogICAgICAgICMgU2VjdGlvbiAxCiAgICAgICAgU3RvcnkuYXBwZW5kKAogICAgICAgICAgICBQYXJhZ3JhcGgoCiAgICAgICAgICAgICIiIjxzZXFyZXNldCBpZD0ibWFpbiIgLz48c2VxIGlkPSJtYWluIj4uIFRISVMgQURERU5EVU0gaGVyZWJ5IG1vZGlmaWVzIGFuZCBzdXBwbGVtZW50cwogICAgICAgICAgICB0aGUgYXR0YWNoZWQgUHVibGljYXRpb24gQWdyZWVtZW50IGNvbmNlcm5pbmcgdGhlIGZvbGxvd2luZwogICAgICAgICAgICBBcnRpY2xlOiIiIiwgc3R5bGVzWydvdXRlcl9zdHlsZSddKQogICAgICAgICAgICApCgogICAgICAgIGpvdXJuYWxfaW5mb190YWJsZSA9IFRhYmxlKFsKICAgICAgICAgICAgW2ZpbGxJblJvdyhtYW51c2NyaXB0LCAiKG1hbnVzY3JpcHQgdGl0bGUpIiwgd2lkdGg9aW5jaCo1KV0sCiAgICAgICAgICAgIFtmaWxsSW5Sb3coam91cm5hbCwgIihqb3VybmFsIG5hbWUpIiwgd2lkdGg9aW5jaCo1KV0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgKQogICAgICAgIGpvdXJuYWxfaW5mb190YWJsZS5oQWxpZ24gPSAnTEVGVCcKICAgICAgICBTdG9yeS5hcHBlbmQoam91cm5hbF9pbmZvX3RhYmxlKQoKICAgICAgICAjIFNlY3Rpb24gMgogICAgICAgIFN0b3J5LmFwcGVuZCgKICAgICAgICAgICAgUGFyYWdyYXBoKAogICAgICAgICAgICAiIiI8c2VxIGlkPSJtYWluIj4uIFRoZSBwYXJ0aWVzIHRvIHRoZSBQdWJsaWNhdGlvbiBBZ3JlZW1lbnQgYXMKICAgICAgICAgICAgbW9kaWZpZWQgYW5kIHN1cHBsZW1lbnRlZCBieSB0aGlzIEFkZGVuZHVtIGFyZToiIiIsIHN0eWxlc1snb3V0ZXJfc3R5bGUnXSkKICAgICAgICAgICAgKQoKICAgICAgICBqb3VybmFsX2luZm9fdGFibGUgPSBUYWJsZShbCiAgICAgICAgICAgIFtmaWxsSW5Sb3coYXV0aG9yWzBdLCIoY29ycmVzcG9uZGluZyBhdXRob3IpIiwpLCAiIiwgIiJdLAogICAgICAgICAgICBbZmlsbEluUm93KGF1dGhvclsxXSwiIiksICIiLCAiIl0sCiAgICAgICAgICAgIFtmaWxsSW5Sb3coYXV0aG9yWzJdLCIiKSwgIiIsICIiXSwKICAgICAgICAgICAgW2ZpbGxJblJvdyhhdXRob3JbM10sCiAgICAgICAgICAgICAgICAgICAgICAgIiIiKEluZGl2aWR1YWxseSBvciwgaWYgbW9yZSB0aGFuIG9uZSBhdXRob3IsIGNvbGxlY3RpdmVseSwgQXV0aG9yKSIiIiksICIiLCBmaWxsSW5Sb3cocHVibGlzaGVyLCAiKFB1Ymxpc2hlciIpXSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xXaWR0aHM9W2luY2gqMywgaW5jaCAqIDAuMjUsIGluY2gqM10sCiAgICAgICAgICAgICAgKQogICAgICAgIGpvdXJuYWxfaW5mb190YWJsZS5oQWxpZ24gPSAnTEVGVCcKICAgICAgICBTdG9yeS5hcHBlbmQoam91cm5hbF9pbmZvX3RhYmxlKQoKICAgICAgICAjIFNlY3Rpb24gMwogICAgICAgIFN0b3J5LmFwcGVuZCgKICAgICAgICAgICAgUGFyYWdyYXBoKAogICAgICAgICAgICAiIiI8c2VxIGlkPSJtYWluIj4uIFRoaXMgQWRkZW5kdW0gYW5kIHRoZSBQdWJsaWNhdGlvbiBBZ3JlZW1lbnQsIAp0YWtlbiB0b2dldGhlciwgYWxsb2NhdGUgYWxsIHJpZ2h0cyB1bmRlciBjb3B5cmlnaHQgd2l0aCByZXNwZWN0IHRvIGFsbCAKdmVyc2lvbnMgb2YgdGhlIEFydGljbGUuICBUaGUgcGFydGllcyBhZ3JlZSB0aGF0IHdoZXJldmVyIHRoZXJlIGlzIGFueSAKY29uZmxpY3QgYmV0d2VlbiB0aGlzIEFkZGVuZHVtIGFuZCB0aGUgUHVibGljYXRpb24gQWdyZWVtZW50LCB0aGUgcHJvdmlzaW9ucyAKb2YgdGhpcyBBZGRlbmR1bSBhcmUgcGFyYW1vdW50IGFuZCB0aGUgUHVibGljYXRpb24gQWdyZWVtZW50IHNoYWxsIGJlIGNvbnN0cnVlZCAKYWNjb3JkaW5nbHkuIiIiLAogICAgICAgICAgICBzdHlsZXNbJ291dGVyX3N0eWxlJ10pCiAgICAgICAgICAgICkKCiAgICAgICAgIyBTZWN0aW9uIDQKICAgICAgICBTdG9yeS5hcHBlbmQoCiAgICAgICAgICAgIFBhcmFncmFwaCgKICAgICAgICAgICAgIiIiPHNlcSBpZD0ibWFpbiI+LiA8Yj5BdXRob3IncyBSZXRlbnRpb24gb2YgUmlnaHRzLiA8L2I+ICAKTm90d2l0aHN0YW5kaW5nIGFueSB0ZXJtcyBpbiB0aGUgUHVibGljYXRpb24gQWdyZWVtZW50IHRvIHRoZSBjb250cmFyeSwgCkFVVEhPUiBhbmQgUFVCTElTSEVSIGFncmVlIHRoYXQgaW4gYWRkaXRpb24gdG8gYW55IHJpZ2h0cyB1bmRlciBjb3B5cmlnaHQgCnJldGFpbmVkIGJ5IEF1dGhvciBpbiB0aGUgUHVibGljYXRpb24gQWdyZWVtZW50LCBBdXRob3IgcmV0YWluczogKGkpIHRoZSAKcmlnaHRzIHRvIHJlcHJvZHVjZSwgdG8gZGlzdHJpYnV0ZSwgdG8gcHVibGljbHkgcGVyZm9ybSwgYW5kIHRvIHB1YmxpY2x5IApkaXNwbGF5IHRoZSBBcnRpY2xlIGluIGFueSBtZWRpdW0gZm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzOyAoaWkpIHRoZSByaWdodCAKdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIGZyb20gdGhlIEFydGljbGU7IGFuZCAoaWlpKSB0aGUgcmlnaHQgdG8gYXV0aG9yaXplCiBvdGhlcnMgdG8gbWFrZSBhbnkgbm9uLWNvbW1lcmNpYWwgdXNlIG9mIHRoZSBBcnRpY2xlIHNvIGxvbmcgYXMgQXV0aG9yCiByZWNlaXZlcyBjcmVkaXQgYXMgYXV0aG9yIGFuZCB0aGUgam91cm5hbCBpbiB3aGljaCB0aGUgQXJ0aWNsZSBoYXMgYmVlbiAKcHVibGlzaGVkIGlzIGNpdGVkIGFzIHRoZSBzb3VyY2Ugb2YgZmlyc3QgcHVibGljYXRpb24gb2YgdGhlIEFydGljbGUuICBGb3IgCmV4YW1wbGUsIEF1dGhvciBtYXkgbWFrZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgaW4gdGhlIGNvdXJzZSBvZiB0ZWFjaGluZyBhbmQgCnJlc2VhcmNoIGFuZCBtYXkgcG9zdCB0aGUgQXJ0aWNsZSBvbiBwZXJzb25hbCBvciBpbnN0aXR1dGlvbmFsIFdlYiBzaXRlcyBhbmQgCmluIG90aGVyIG9wZW4tYWNjZXNzIGRpZ2l0YWwgcmVwb3NpdG9yaWVzLiIiIiwKICAgICAgICAgICAgc3R5bGVzWydvdXRlcl9zdHlsZSddKQogICAgICAgICAgICApCgogICAgICAgICMgU2VjdGlvbiA1CiAgICAgICAgU3RvcnkuYXBwZW5kKAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIFBhcmFncmFwaCgKICAgICAgICAgICAgICAgICIiIjxzZXEgaWQ9Im1haW4iPi4gPGI+UHVibGlzaGVyJ3MgQWRkaXRpb25hbCBDb21taXRtZW50cy48L2I+IAo8fGZpbV9lbmR8Pg=="]
["ceff2ce80c7c19b351f32824c1d509accb52d785-1","ceff2ce80c7c19b351f32824c1d509accb52d785","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMS40IG9uIDIwMjEtMDEtMDcgMTA6NTgKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKaW1wb3J0IGRqYW5nb19jdXJyZW50dXNlci5kYi5tb2RlbHMuZmllbGRzCmltcG9ydCBkamFuZ29fY3VycmVudHVzZXIubWlkZGxld2FyZQppbXBvcnQgdXRpbHMubW9kZWxzCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5zd2FwcGFibGVfZGVwZW5kZW5jeShzZXR0aW5ncy5BVVRIX1VTRVJfTU9ERUwpLAogICAgICAgICgnd2lraScsICcwMDAyX2F1dG9fMjAyMTAxMDZfMDAzNycpLAogICAgXQoKICAgIG9wZXJhdGlvbnMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5BZGRGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nYXJ0aWNsZScsCiAgICAgICAgICAgIG5hbWU9J2NyZWF0ZV91c2VyJywKICAgICAgICAgICAgZmllbGQ9ZGphbmdvX2N1cnJlbnR1c2VyLmRiLm1vZGVscy5maWVsZHMuQ3VycmVudFVzZXJGaWVsZChkZWZhdWx0PWRqYW5nb19jdXJyZW50dXNlci5taWRkbGV3YXJlLmdldF9jdXJyZW50X2F1dGhlbnRpY2F0ZWRfdXNlciwgZWRpdGFibGU9RmFsc2UsIG51bGw9VHJ1ZSwgb25fZGVsZXRlPW1vZGVscy5TRVQodXRpbHMubW9kZWxzLmdldF9zZW50aW5lbF91c2VyKSwgcmVsYXRlZF9uYW1lPSdjcmVhdGVfdXNlcicsIHRvPXNldHRpbmdzLkFVVEhfVVNFUl9NT0RFTCksCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkFkZEZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdhcnRpY2xlJywKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBuYW1lPSdkZWxldGVfdXNlcicsCiAgICAgICAgICAgIGZpZWxkPWRqYW5nb19jdXJyZW50dXNlci5kYi5tb2RlbHMuZmllbGRzLkN1cnJlbnRVc2VyRmllbGQoZGVmYXVsdD1kamFuZ29fY3VycmVudHVzZXIubWlkZGxld2FyZS5nZXRfY3VycmVudF9hdXRoZW50aWNhdGVkX3VzZXIsIG51bGw9VHJ1ZSwgb25fZGVsZXRlPW1vZGVscy5TRVQodXRpbHMubW9kZWxzLmdldF9zZW50aW5lbF91c2VyKSwgcmVsYXRlZF9uYW1lPSdkZWxldGVfdXNlcicsIHRvPXNldHRpbmdzLkFVVEhfVVNFUl9NT0RFTCksCjx8ZmltX2VuZHw+"]
["ae912cc29244b4961f022a352a06dde2c4c6d4b7-4","ae912cc29244b4961f022a352a06dde2c4c6d4b7","PHxmaW1fcHJlZml4fD4KZnJvbSBiYXNlX3Rlc3QgaW1wb3J0IEJhc2VUZXN0CgoKY2xhc3MgVGVzdENocm9tZShCYXNlVGVzdCk6CiAgICAuLi4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmNsYXNzIFRlc3RGaXJlRm94KEJhc2VUZXN0KToKICAgIC4uLgo8fGZpbV9lbmR8Pg=="]
["6da70eea348b663ab410092c5011960b57a23955-2","6da70eea348b663ab410092c5011960b57a23955","PHxmaW1fcHJlZml4fD4KJycnCkRlc2lnbiBvZiBhIE5ldXJhbCBOZXR3b3JrIGZyb20gc2NyYXRjaAoKKioqKioqKioqKioqKjxJTVA+KioqKioqKioqKioqKgpNZW50aW9uIGh5cGVycGFyYW1ldGVycyB1c2VkIGFuZCBkZXNjcmliZSBmdW5jdGlvbmFsaXR5IGluIGRldGFpbCBpbiB0aGlzIHNwYWNlCi0gY2FycmllcyAxIG1hcmsKJycnCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0IHRyYWluX3Rlc3Rfc3BsaXQgI0FsbG93ZWQgZm9yIHNwbGl0dGluZyBkYXRhc2V0CnBhcmFtZXRlcnM9ZGljdCgpCmRlZiBjbGVhbih4KTogCiAgICAjV2Ugcm91bmQgbWVhbiB2YWx1ZXMgdG8gYXBwcm9wcmlhdGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzCiAgICB4WydBZ2UnXT14WydBZ2UnXS5maWxsbmEocm91bmQoeFsnQWdlJ10ubWVhbigpKSkKICAgIHhbJ1dlaWdodCddPXhbJ1dlaWdodCddLmZpbGxuYShyb3VuZCh4WydXZWlnaHQnXS5tZWFuKCkpKQogICAgeFsnRGVsaXZlcnkgcGhhc2UnXT14WydEZWxpdmVyeSBwaGFzZSddLmZpbGxuYSh4WydEZWxpdmVyeSBwaGFzZSddLm1vZGUoKVswXSkKICAgIHhbJ0hCJ109eFsnSEInXS5maWxsbmEocm91bmQoeFsnSEInXS5tZWFuKCksMSkpCiAgICB4WydJRkEnXT14WydJRkEnXS5maWxsbmEoeFsnSUZBJ10ubW9kZSgpWzBdKQogICAgeFsnQlAnXT14WydCUCddLmZpbGxuYShyb3VuZCh4WydCUCddLm1lYW4oKSwzKSkKICAgIHhbJ0VkdWNhdGlvbiddPXhbJ0VkdWNhdGlvbiddLmZpbGxuYSh4WydFZHVjYXRpb24nXS5tb2RlKClbMF0pCiAgICB4WydSZXNpZGVuY2UnXT14WydSZXNpZGVuY2UnXS5maWxsbmEoeFsnUmVzaWRlbmNlJ10ubW9kZSgpWzBdKQogICAgcmV0dXJuIHgKICAgIApkZWYgc2lnbW9pZCh4KToKICAgICN4PW5wLmFycmF5KFt4XSxkdHlwZT1ucC5mbG9hdDEyOCkKICAgIHJldHVybiAxLygxK25wLmV4cCgteCkpCmRlZiBzaWdtb2lkX2Rlcml2YXRpdmUoeSk6CiAgICByZXR1cm4geSAqICgxIC0geSkKCiMgbnAudGFuaCh4KSB3aWxsIHN1ZmZpY2UgZm9yIHRhbmggYWN0aXZhdGlvbiBmdW5jdGlvbgpkZWYgdGFuaF9kZXJpdmF0aXZlKHkpOgogICAgcmV0dXJuIDEtKHkqeSkKCmRlZiByZWx1KHgpOgoJaWYgeDwwOgoJCXJldHVybiAwCgllbHNlOgoJCXJldHVybiB4CgpkZWYgcmVsdV9kZXJpdmF0aXZlKHkpOgoJaWYgeTwwOgoJCXJldHVybiAwCgllbHNlOgoJCXJldHVybiAxCgpjbGFzcyBOTjoKICAgIGRlZiBfX2luaXRfXyhzZWxmLFgsWSk6CiAgICAgICAgI25feD05CiAgICAgICAgI25faD00CiAgICAgICAgI25feT0xCiAgICAgICAgbnAucmFuZG9tLnNlZWQoMikgI1Blc3Vkby1yYW5kb20KICAgICAgICBzZWxmLmlucHV0ID0gWAogICAgICAgIHNlbGYubGVhcm5pbmdfcmF0ZT0wLjA1CiAgICAgICAgc2VsZi53ZWlnaHRzMSA9IG5wLnJhbmRvbS5yYW5kbig0LHNlbGYuaW5wdXQuc2hhcGVbMV0pKjAuMDEjV2UgaGF2ZSA0IG5vZGVzIGluIGZpcnN0IGhpZGRlbiBsYXllciwgNFg5IE11bHRpcGx5aW5nIGJ5IDAuMDEgdG8gY29udmVydCBpbnRvIGRlY2ltYWxzCiAgICAgICAgIyBBcyBhIHRodW1iIHJ1bGUsIHRoZSB3ZWlnaHQgbWF0cmljZXMgbXVzdCBoYXZlIHRoZSBmb2xsd29pbmcgZGltZW5zaW9uczoKICAgICAgICAjIFRoZSBudW1iZXIgb2Ygcm93cyBtdXN0IGJlIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgbmV1cm9ucyBpbiB0aGUgY3VycmVudCBsYXllci5UaGUgbnVtYmVyIG9mIGNvbHVtbnMgbXVzdCBiZSBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIG5ldXJvbnMgaW4gcHJldmlvdXMgbGF5ZXIKICAgICAgICAjIEFzIGEgdGh1bWIgcnVsZSwgdGhlIGJpYXMgbWF0cmljZXMgbXVzdCBoYXZlIHRoZSBmb2xsd29pbmcgZGltZW5zaW9uczoKICAgICAgICAjIFRoZSBudW1iZXIgb2Ygcm93cyBtdXN0IGJlIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgbmV1cm9ucyBpbiB0aGUgY3VycmVudCBsYXllciBhbmQgaXQgbXVzdCBiZSBhIGNvbHVtbiB2ZWN0b3IKICAgICAgICAjIFRoZSBzYW1lIHJ1bGUgYXBwbGllcyBmb3IgYmFjayBwcm9wYWdhdGlvbiBhcyB3ZWxsIGZvciBkVyBhbmQgZEIKICAgICAgICBzZWxmLndlaWdodHMyID0gbnAucmFuZG9tLnJhbmRuKFkuc2hhcGVbMV0sNCkqMC4wMSNTZWNvbmQgaGlkZGVuIGxheWVyIGFsc28gaGFzIDQgbm9kZXMKICAgICAgICAjc2VsZi53ZWlnaHRzMyA9IG5wLnJhbmRvbS5yYW5kKDQsMSkjRnJvbSBzZWNvbmQgaGlkZGVuIGxheWVyIHRvIG91dHB1dCBsYXllcgogICAgICAgIHNlbGYuYmlhczE9bnAuemVyb3MoKDQsMSkpCiAgICAgICAgc2VsZi5iaWFzMj1ucC56ZXJvcygoWS5zaGFwZVsxXSwxKSkKICAgICAgICBzZWxmLnkgPSBZCiAgICAgICAgc2VsZi5vdXRwdXQgPSBucC56ZXJvcyhZLnNoYXBlKQogICAgICAgIHNlbGYucGFyYW1ldGVycyA9IHsiVzEiOiBzZWxmLndlaWdodHMxLAogICAgICAgICAgICAgICAgICAiYjEiOiBzZWxmLmJpYXMxLAogICAgICAgICAgICAgICAgICAiVzIiOiBzZWxmLndlaWdodHMyLAogICAgICAgICAgICAgICAgICAiYjIiOiBzZWxmLmJpYXMyfQogICAgJycnIFggYW5kIFkgYXJlIGRhdGFmcmFtZXMgJycnCgogICAgICAgCiAgICAjRm9yd2FyZCBQcm9wb2dhdGlvbgogICAgZGVmIGZlZWRmb3J3YXJkKHNlbGYpOgogICAgICAgIFcxID0gc2VsZi5wYXJhbWV0ZXJzWyJXMSJdIzRYOQogICAgICAgIGIxID0gc2VsZi5wYXJhbWV0ZXJzWyJiMSJdIzRYMQogICAgICAgIFcyID0gc2VsZi5wYXJhbWV0ZXJzWyJXMiJdIzFYNAogICAgICAgIGIyID0gc2VsZi5wYXJhbWV0ZXJzWyJiMiJdIzFYMQogICAgICAgIFoxID0gbnAuZG90KFcxLHNlbGYuaW5wdXQuVCkrYjEjNFg2NwogICAgICAgIEExID0gbnAudGFuaChaMSkjNFg2NwogICAgICAgIFoyID0gbnAuZG90KFcyLEExKStiMiMxWDY3CiAgICAgICAgQTIgPSBzaWdtb2lkKFoyKSMxWDY3CiAgICAgICAgc2VsZi5jYWNoZT17IloxIjpaMSwiQTEiOkExLCJaMiI6WjIsIkEyIjpBMn0KICAgICAgICAjc2VsZi5sYXllcjE9c2lnbW9pZChucC5kb3Qoc2VsZi5pbnB1dCwgc2VsZi53ZWlnaHRzMSkpCiAgICAgICAgI3NlbGYubGF5ZXIyPXNpZ21vaWQobnAuZG90KHNlbGYubGF5ZXIxLCBzZWxmLndlaWdodHMyKSkKICAgICAgICAjc2VsZi5sYXllcjM9c2lnbW9pZChucC5kb3Qoc2VsZi5sYXllcjIsIHNlbGYud2VpZ2h0czMpKQogICAgICAgIHJldHVybiBBMgogICAgCiAgICAjQmFja3dhcmQgUHJvcG9nYXRpb24KICAgIGRlZiBiYWNrcHJvcChzZWxmKToKCSMgYXBwbGljYXRpb24gb2YgdGhlIGNoYWluIHJ1bGUgdG8gZmluZCBkZXJpdmF0aXZlIG9mIHRoZSBsb3NzIGZ1bmN0aW9uIHdpdGggcmVzcGVjdCB0byB3ZWlnaHRzMiBhbmQgd2VpZ2h0czEKICAgICAgICBtPXNlbGYuaW5wdXQuc2hhcGVbMF0gIyBOdW1iZXIgb2Ygcm93cyBpLmUgNjcKICAgICAgICBXMT1zZWxmLnBhcmFtZXRlcnNbIlcxIl0KICAgICAgICBXMj1zZWxmLnBhcmFtZXRlcnNbIlcyIl0KICAgICAgICBiMT1zZWxmLnBhcmFtZXRlcnNbImIxIl0KICAgICAgICBiMj1zZWxmLnBhcmFtZXRlcnNbImIyIl0KICAgICAgICBBMT1zZWxmLmNhY2hlWyJBMSJdCiAgICAgICAgQTI9c2VsZi5jYWNoZVsiQTIiXQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZFoyPUEyLXNlbGYueS5UIzFYNjcKICAgICAgICBkVzI9KDEvbSkqKG5wLmRvdChkWjIsQTEuVCkpIzFYNAogICAgICAgIGRiMiA9ICgxL20pKm5wLnN1bShkWjIsYXhpcz0xLGtlZXBkaW1zPVRydWUpCiAgICAgICAgZFoxID0gbnAuZG90KFcyLlQsZFoyKSooMS1ucC5wb3dlcihBMSwyKSkjNFg2Nwo8fGZpbV9lbmR8Pg=="]
["a511ebe563dace582b9e5a903b8f5607772aebb5-4","a511ebe563dace582b9e5a903b8f5607772aebb5","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBneW0uZW52cy5yZWdpc3RyYXRpb24gaW1wb3J0IHJlZ2lzdGVyCgpyZWdpc3RlcigKICAgIGlkPSdDdXN0b21FbnYtdjAnLAo8fGZpbV9lbmR8Pg=="]
["88a19eb5f8f2620974090fc483c797e17f186383-2","88a19eb5f8f2620974090fc483c797e17f186383","PHxmaW1fcHJlZml4fD4KJycnCgpEZXNjcmlwdGlvbjoKCllvdSBoYXZlIGEgUmVjZW50Q291bnRlciBjbGFzcyB3aGljaCBjb3VudHMgdGhlIG51bWJlciBvZiByZWNlbnQgcmVxdWVzdHMgd2l0aGluIGEgY2VydGFpbiB0aW1lIGZyYW1lLgoKSW1wbGVtZW50IHRoZSBSZWNlbnRDb3VudGVyIGNsYXNzOgoKUmVjZW50Q291bnRlcigpIEluaXRpYWxpemVzIHRoZSBjb3VudGVyIHdpdGggemVybyByZWNlbnQgcmVxdWVzdHMuCmludCBwaW5nKGludCB0KSBBZGRzIGEgbmV3IHJlcXVlc3QgYXQgdGltZSB0LCB3aGVyZSB0IHJlcHJlc2VudHMgc29tZSB0aW1lIGluIG1pbGxpc2Vjb25kcywgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0IGhhcyBoYXBwZW5lZCBpbiB0aGUgcGFzdCAzMDAwIG1pbGxpc2Vjb25kcyAoaW5jbHVkaW5nIHRoZSBuZXcgcmVxdWVzdCkuIFNwZWNpZmljYWxseSwgcmV0dXJuIHRoZSBudW1iZXIgb2YgcmVxdWVzdHMgdGhhdCBoYXZlIGhhcHBlbmVkIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgW3QgLSAzMDAwLCB0XS4KSXQgaXMgZ3VhcmFudGVlZCB0aGF0IGV2ZXJ5IGNhbGwgdG8gcGluZyB1c2VzIGEgc3RyaWN0bHkgbGFyZ2VyIHZhbHVlIG9mIHQgdGhhbiB0aGUgcHJldmlvdXMgY2FsbC4KCiAKCkV4YW1wbGUgMToKCklucHV0ClsiUmVjZW50Q291bnRlciIsICJwaW5nIiwgInBpbmciLCAicGluZyIsICJwaW5nIl0KW1tdLCBbMV0sIFsxMDBdLCBbMzAwMV0sIFszMDAyXV0KT3V0cHV0CltudWxsLCAxLCAyLCAzLCAzXQoKRXhwbGFuYXRpb24KUmVjZW50Q291bnRlciByZWNlbnRDb3VudGVyID0gbmV3IFJlY2VudENvdW50ZXIoKTsKcmVjZW50Q291bnRlci5waW5nKDEpOyAgICAgIyByZXF1ZXN0cyA9IFsxXSwgcmFuZ2UgaXMgWy0yOTk5LDFdLCByZXR1cm4gMQpyZWNlbnRDb3VudGVyLnBpbmcoMTAwKTsgICAjIHJlcXVlc3RzID0gWzEsIDEwMF0sIHJhbmdlIGlzIFstMjkwMCwxMDBdLCByZXR1cm4gMgpyZWNlbnRDb3VudGVyLnBpbmcoMzAwMSk7ICAjIHJlcXVlc3RzID0gWzEsIDEwMCwgMzAwMV0sIHJhbmdlIGlzIFsxLDMwMDFdLCByZXR1cm4gMwpyZWNlbnRDb3VudGVyLnBpbmcoMzAwMik7ICAjIHJlcXVlc3RzID0gWzEsIDEwMCwgMzAwMSwgMzAwMl0sIHJhbmdlIGlzIFsyLDMwMDJdLCByZXR1cm4gMwogCgpDb25zdHJhaW50czoKCjEgPD0gdCA8PSAxMDkKRWFjaCB0ZXN0IGNhc2Ugd2lsbCBjYWxsIHBpbmcgd2l0aCBzdHJpY3RseSBpbmNyZWFzaW5nIHZhbHVlcyBvZiB0LgpBdCBtb3N0IDEwNCBjYWxscyB3aWxsIGJlIG1hZGUgdG8gcGluZy4KCicnJwoKCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCgpjbGFzcyBSZWNlbnRDb3VudGVyOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAKICAgICAgICAjIGEgZG91YmxlLWVuZGVkIHF1ZXVlIHRoYXQga2VlcCBmcmVzaCBjYWxscyBpbiBtYXRoIGludGVydmFsIFt0LTMwMDAsIHRdCiAgICAgICAgc2VsZi5jYWxsX3F1ZXVlID0gZGVxdWUoKQoKCgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgc2VsZi5jYWxsX3F1ZXVlLnBvcGxlZnQoKQogICAgICAgIAogICAgICAgIAogICAgICAgICMgcHVzaCBpbi1jb21pbmcgY2FsbCBvbiB0aGUgcmVhcgogICAgICAgIHNlbGYuY2FsbF9xdWV1ZS5hcHBlbmQodCkKICAgICAgICAKICAgICAgICAKICAgICAgICByZXR1cm4gbGVuKHNlbGYuY2FsbF9xdWV1ZSkKCgojIFRpbWUgQ29tcGxleGl0eTogTyggMSApCiMKIyBUaGUgb3ZlcmhlYWQgaW4gdGltZSBpcyB0aGUgY29zdCBvZiBtYWludGluIGEgTyggMzAwMCApIGRlcXVlLCB3aGljaCBpcyBvZiBPKCAxICkKCiMjIFNwYWNlIENvbXBsZXhpdHk6IE8oIDEgKQojCiMgVGhlIG92ZXJoZWFkIGluIHNwYWNlIGlzIHRoZSBzdG9yYWdlIGZvciBPKCAzMDAwICkgZGVxdWUsIHdoaWNoIGlzIG9mIE8oIDEgKQoKaW1wb3J0IHVuaXR0ZXN0CgpjbGFzcyBUZXN0aW5nKCB1bml0dGVzdC5UZXN0Q2FzZSApOgoKICAgIGRlZiB0ZXN0X2Nhc2VfMSggc2VsZiApOgogICAgICAgIAogICAgICAgIHJlY2VudENvdW50ZXIgPSBSZWNlbnRDb3VudGVyKCkKCiAgICAgICAgcmVzdWx0ID0gcmVjZW50Q291bnRlci5waW5nKDEpICAgICAgICMgcmVxdWVzdHMgPSBbMV0sIHJhbmdlIGlzIFstMjk5OSwxXSwgcmV0dXJuIDEKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMSkKCiAgICAgICAgcmVzdWx0ID0gcmVjZW50Q291bnRlci5waW5nKDEwMCkgICAgICMgcmVxdWVzdHMgPSBbMSwgMTAwXSwgcmFuZ2UgaXMgWy0yOTAwLDEwMF0sIHJldHVybiAyCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDIpCgoKICAgICAgICByZXN1bHQgPSByZWNlbnRDb3VudGVyLnBpbmcoMzAwMSkgICAgIyByZXF1ZXN0cyA9IFsxLCAxMDAsIDMwMDFdLCByYW5nZSBpcyBbMSwzMDAxXSwgcmV0dXJuIDMKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMykKCiAgICAgICAgcmVzdWx0ID0gcmVjZW50Q291bnRlci5waW5nKDMwMDIpICAgICMgcmVxdWVzdHMgPSBbMSwgMTAwLCAzMDAxLCAzMDAyXSwgcmFuZ2UgaXMgWzIsMzAwMl0sIHJldHVybiAzCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDMpCgoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CgogICAgdW5pdHRlc3QubWFpbigpCiAgICAgICAgCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgcGluZyhzZWxmLCB0OiBpbnQpIC0+IGludDoKICAgICAgICAKICAgICAgICAjIHBvcCBvdXQtb2YtZGF0ZSBjYWxscyB3aGljaCBjYWxsaW5nIHRpbWUgaXMgc21hbGxlciB0aGFuIHQtMzAwMCBvbiB0aGUgZnJvbnQKICAgICAgICB3aGlsZSBzZWxmLmNhbGxfcXVldWUgYW5kIHNlbGYuY2FsbF9xdWV1ZVswXSA8IHQtMzAwMDogICAgCjx8ZmltX2VuZHw+"]
["019a26432a8c84f3d83c20537fda2b88a199ba12-3","019a26432a8c84f3d83c20537fda2b88a199ba12","PHxmaW1fcHJlZml4fD4KIiIiCkN1cnNlcyBMaXN0IFBpY2tlcgoiIiIKaW1wb3J0IGNnaXRiCmltcG9ydCBjdXJzZXMKZnJvbSBjdXJzZXMudGV4dHBhZCBpbXBvcnQgVGV4dGJveApmcm9tIC5zY3JlZW4gaW1wb3J0IFNjcmVlbgoKY2dpdGIuZW5hYmxlKGZvcm1hdD0idGV4dCIpCgoKY2xhc3MgRHJhdyhTY3JlZW4pOgogICAgIiIiCiAgICBIb3cgdG8gZHJhdyBvbiB0aGUgc2NyZWVuLgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0ZHNjciwgaXRlbXMpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oc3Rkc2NyLCBpdGVtcykKICAgICAgICBzZWxmLmluZGljYXRvciA9ICItLT4iCiAgICAgICAgc2VsZi5jaGVja2JveCA9ICJbIF0iCiAgICAgICAgc2VsZi5jaGVja2VkID0gIlt4XSIKCiAgICBkZWYgZHJhd19oZWFkZXIoc2VsZiwgbXNnKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYuaGVhZC5hZGRzdHIoMCwgMCwgbXNnLCBzZWxmLm1hZ2VudGFfYmxhY2spCiAgICAgICAgICAgICMgc2VsZi5oZWFkLmJrZ2RzZXQoc2VsZi5ibGFja19tYWdlbnRhKQogICAgICAgICAgICBzZWxmLmhlYWQuY2xydG9lb2woKSAgIyBtb3JlIGZydWdhbCB0aGFuIGVyYXNlLiBubyBmbGlja2VyLgogICAgICAgIGV4Y2VwdCBjdXJzZXMuZXJyb3I6CiAgICAgICAgICAgIHBhc3MKCiAgICBkZWYgZHJhd19mb290ZXIoc2VsZiwgbXNnKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYuZm9vdC5hZGRzdHIoMCwgMCwgbXNnLCBzZWxmLm1hZ2VudGFfYmxhY2spCiAgICAgICAgICAgICMgc2VsZi5mb290LmJrZ2RzZXQoc2VsZi5ibGFja19tYWdlbnRhKQogICAgICAgICAgICBzZWxmLmZvb3QuY2xydG9lb2woKSAgIyBtb3JlIGZydWdhbCB0aGFuIGVyYXNlLiBubyBmbGlja2VyLgogICAgICAgIGV4Y2VwdCBjdXJzZXMuZXJyb3I6CiAgICAgICAgICAgIHBhc3MKCiAgICBkZWYgZ2V0X2l0ZW1fc3R5bGUoc2VsZiwgaW5kZXgpOgogICAgICAgIGlmIGluZGV4ID09IHNlbGYuY3Vycm93IGFuZCBpbmRleCBpbiBzZWxmLnBpY2tlZDoKICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW5kaWNhdG9yLCBzZWxmLmJsYWNrX3llbGxvdwogICAgICAgIGVsaWYgaW5kZXggPT0gc2VsZi5jdXJyb3cgYW5kIGluZGV4IGluIHNlbGYubWF0Y2hlczoKICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW5kaWNhdG9yLCBzZWxmLmJsYWNrX2dyZWVuCiAgICAgICAgZWxpZiBpbmRleCBpbiBzZWxmLnBpY2tlZDoKICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2hlY2tlZCwgc2VsZi55ZWxsb3dfYmxhY2sKICAgICAgICBlbGlmIGluZGV4IGluIHNlbGYubWF0Y2hlczoKICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2hlY2tib3gsIHNlbGYuZ3JlZW5fYmxhY2sKICAgICAgICBlbGlmIGluZGV4ID09IHNlbGYuY3Vycm93OgogICAgICAgICAgICByZXR1cm4gc2VsZi5pbmRpY2F0b3IsIHNlbGYud2hpdGVfYmx1ZV9ib2xkCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2hlY2tib3gsIHNlbGYud2hpdGVfYmxhY2sKCiAgICBkZWYgZ2V0X2l0ZW1fbnVtYmVyKHNlbGYsIGluZGV4LCBpbmRpY2F0b3IsIGl0ZW0pOgogICAgICAgIG1heGxlbiA9IGxlbihzdHIoc2VsZi50b3RhbCArIDEpKQogICAgICAgIGxlbmd0aCA9IGxlbihzdHIoaW5kZXggKyAxKSkKICAgICAgICBpZiBsZW5ndGggPD0gbWF4bGVuOgogICAgICAgICAgICBwYWQgPSAiICIgKiAobWF4bGVuIC0gbGVuZ3RoKQogICAgICAgICAgICBudW1iZXIgPSBzdHIoaW5kZXggKyAxKSArICIpIiArIHBhZAogICAgICAgIHJldHVybiBudW1iZXIgKyBpbmRpY2F0b3IgKyAiICIgKyBpdGVtCgogICAgZGVmIGdldF9pdGVtKHNlbGYsIGluZGV4LCBpdGVtLCBudW1iZXJzKToKICAgICAgICBpbmRpY2F0b3IsIGNvbG9yID0gc2VsZi5nZXRfaXRlbV9zdHlsZShpbmRleCkKICAgICAgICBpZiBudW1iZXJzOgogICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfaXRlbV9udW1iZXIoaW5kZXgsIGluZGljYXRvciwgaXRlbSksIGNvbG9yCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIGluZGljYXRvciArICIgIiArIGl0ZW0sIGNvbG9yCgogICAgZGVmIGRyYXdfYm9keShzZWxmLCBtc2csIHBpY2s9VHJ1ZSwgbnVtYmVycz1GYWxzZSk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzdGFydCwgc3RvcCA9IDAsIHNlbGYucG1heHJvdwogICAgICAgIGZvciBjb2x1bW4gaW4gc2VsZi5wYWRzOgogICAgICAgICAgICBjb2x1bW4uZXJhc2UoKQogICAgICAgICAgICBmb3IgaWR4LCBpdGVtIGluIGVudW1lcmF0ZShtc2dbc3RhcnQ6c3RvcF0pOgo8fGZpbV9lbmR8Pg=="]
["c9ab66ade55bb3fa81154cba2b080b14090a5ac3-4","c9ab66ade55bb3fa81154cba2b080b14090a5ac3","PHxmaW1fcHJlZml4fD4KZnJvbSBmbV9zb2x2ZXIuZmVhdHVyZV9tb2RlbCBpbXBvcnQgZmVhdHVyZQoKCmRlZiB0ZXN0X3NlbGVjdGlvbl9zZWxlY3RlZCgpOgogICAgYXNzZXJ0IGZlYXR1cmUuU2VsZWN0aW9uLlNFTEVDVEVELnZhbHVlID09ICJTRUxFQ1RFRCIKCjx8ZmltX2hvbGV8PgoKZGVmIHRlc3Rfc2VsZWN0aW9uX3VuZGVmaW5lZCgpOgogICAgYXNzZXJ0IGZlYXR1cmUuU2VsZWN0aW9uLlVOREVGSU5FRC52YWx1ZSA9PSAiVU5ERUZJTkVEIgoKCmRlZiB0ZXN0X2ZlYXR1cmVfZGVmYXVsdF9zZWxlY3Rpb24oKToKICAgIGZlYXR1cmVfaW5zdGFuY2UgPSBmZWF0dXJlLkZlYXR1cmUoaWRlbnRpZmllcj0xLCBuYW1lPSJmZWF0dXJlXzEiKQoKICAgIGFzc2VydCBmZWF0dXJlX2luc3RhbmNlLmlkZW50aWZpZXIgPT0gMQogICAgYXNzZXJ0IGZlYXR1cmVfaW5zdGFuY2UubmFtZSA9PSAiZmVhdHVyZV8xIgogICAgYXNzZXJ0IGZlYXR1cmVfaW5zdGFuY2Uuc2VsZWN0aW9uID09IGZlYXR1cmUuU2VsZWN0aW9uLlVOREVGSU5FRAo8fGZpbV9zdWZmaXh8PgoKZGVmIHRlc3Rfc2VsZWN0aW9uX3Vuc2VsZWN0ZWQoKToKICAgIGFzc2VydCBmZWF0dXJlLlNlbGVjdGlvbi5VTlNFTEVDVEVELnZhbHVlID09ICJVTlNFTEVDVEVEIgoKPHxmaW1fZW5kfD4="]
["6dec57948ac17f039eaf3690a216b0f22a566e64-3","6dec57948ac17f039eaf3690a216b0f22a566e64","PHxmaW1fcHJlZml4fD4KCmltcG9ydCBjb3B5CmltcG9ydCBvcwppbXBvcnQgdGltZQoKZnJvbSB1dGlscy5kYXRhc2V0IGltcG9ydCAqCgoKY2xhc3MgVHJhaW5lcihvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKICAgICAgICBzZWxmLm1vZGVsID0ga3dhcmdzLnBvcCgnbW9kZWwnKQogICAgICAgIHNlbGYub3B0ID0ga3dhcmdzLnBvcCgnb3B0JykKICAgICAgICBzZWxmLm5fZXBvY2ggPSBrd2FyZ3MucG9wKCdlcG9jaCcpCiAgICAgICAgc2VsZi5iYXRjaHNpemUgPSBrd2FyZ3MucG9wKCdiYXRjaHNpemUnKQogICAgICAgIHNlbGYubG9nZ2VyID0ga3dhcmdzLnBvcCgnbG9nZ2VyJykKICAgICAgICBzZWxmLmxvZ19kaXIgPSBrd2FyZ3MucG9wKCdtb2RlbF9kaXInKQogICAgICAgIHNlbGYuZXZhbHVhdG9yID0ga3dhcmdzLnBvcCgnZXZhbHVhdG9yJykKICAgICAgICBzZWxmLnZhbGlkX2RhdCA9IGt3YXJncy5wb3AoJ3ZhbGlkX2RhdCcpCiAgICAgICAgc2VsZi5zYXZlX3N0ZXAgPSBrd2FyZ3MucG9wKCdzYXZlX3N0ZXAnKQogICAgICAgIHNlbGYuY3VyX2Vwb2NoID0gMAogICAgICAgIHNlbGYubW9kZWxfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmxvZ19kaXIsIHNlbGYubW9kZWwuX19jbGFzc19fLl9fbmFtZV9fKQoKICAgIGRlZiBfc2V0dXAoc2VsZik6CiAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygnc2V0dXAgdHJhaW5lci4uLicpCiAgICAgICAgc2VsZi5vcHQucmVnaXN0X3BhcmFtcyhzZWxmLm1vZGVsLnBhcmFtcykKICAgICAgICBzZWxmLmJlc3RfbW9kZWwgPSBOb25lCgogICAgZGVmIF9maW5hbGl6ZShzZWxmKToKICAgICAgICBhc3NlcnQgc2VsZi5uX2Vwb2NoID09IHNlbGYuY3VyX2Vwb2NoCiAgICAgICAgaWYgc2VsZi52YWxpZF9kYXQ6CiAgICAgICAgICAgIHNlbGYuYmVzdF9tb2RlbC5zYXZlX21vZGVsKHNlbGYubW9kZWxfcGF0aCArICcuYmVzdCcpCiAgICAgICAgICAgIGJlc3RfZXBvY2gsIGJlc3RfdmFsID0gc2VsZi5ldmFsdWF0b3IuZ2V0X2Jlc3RfaW5mbygpCiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oJz09PT09IEJlc3QgbWV0cmljOiB7fSAoe30gZXBvY2gpID09PT09Jy5mb3JtYXQoYmVzdF92YWwsIGJlc3RfZXBvY2gpKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYubW9kZWwuc2F2ZV9tb2RlbChzZWxmLm1vZGVsX3BhdGggKyAnLmVwb2Noe30nLmZvcm1hdChzZWxmLm5fZXBvY2gpKQoKICAgIGRlZiBfdmFsaWRhdGlvbihzZWxmKToKICAgICAgICB2YWxpZF9zdGFydCA9IHRpbWUudGltZSgpCiAgICAgICAgcmVzID0gc2VsZi5ldmFsdWF0b3IucnVuKHNlbGYubW9kZWwsIHNlbGYudmFsaWRfZGF0KQogICAgICAgIHNlbGYubG9nZ2VyLmluZm8oJ2V2YWx1YXRpb24gbWV0cmljIGluIHt9IGVwb2NoOiB7fScuZm9ybWF0KHNlbGYuY3VyX2Vwb2NoLCByZXMpKQogICAgICAgIHNlbGYubG9nZ2VyLmluZm8oJ2V2YWx1YXRpb24gdGltZSBpbiB7fSBlcG9jaDoge30nLmZvcm1hdChzZWxmLmN1cl9lcG9jaCwgdGltZS50aW1lKCkgLSB2YWxpZF9zdGFydCkpCgogICAgICAgIGN1cl9iZXN0X2Vwb2NoLCBjdXJfYmVzdF92YWwgPSBzZWxmLmV2YWx1YXRvci5nZXRfYmVzdF9pbmZvKCkKICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCc8IEN1cnJlbnQgQmVzdCBtZXRyaWM6IHt9ICh7fSBlcG9jaCkgPicuZm9ybWF0KGN1cl9iZXN0X3ZhbCwgY3VyX2Jlc3RfZXBvY2gpKQogICAgICAgIGlmIGN1cl9iZXN0X2Vwb2NoID09IHNlbGYuY3VyX2Vwb2NoOgogICAgICAgICAgICBzZWxmLmJlc3RfbW9kZWwgPSBjb3B5LmRlZXBjb3B5KHNlbGYubW9kZWwpCiAgICAgICAgcmV0dXJuIGN1cl9iZXN0X2Vwb2NoCgogICAgZGVmIGZpdChzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKCmNsYXNzIFBhaXJ3aXNlVHJhaW5lcihUcmFpbmVyKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgc3VwZXIoUGFpcndpc2VUcmFpbmVyLCBzZWxmKS5fX2luaXRfXygqKmt3YXJncykKICAgICAgICBzZWxmLm5fbmVnYXRpdmUgPSBrd2FyZ3MucG9wKCduX25lZ2F0aXZlJykKICAgICAgICBzZWxmLm5lZ19nZW5lcmF0b3IgPSBVbmlmb3JtTmVnYXRpdmVHZW5lcmF0b3Ioc2VsZi5tb2RlbC5uX2VudGl0eSwgc2VsZi5uX25lZ2F0aXZlKQoKICAgIGRlZiBmaXQoc2VsZiwgdHJhaW5fZGF0KToKICAgICAgICBhc3NlcnQgdHlwZSh0cmFpbl9kYXQpID09IFRyaXBsZXREYXRhc2V0CiAgICAgICAgc2VsZi5fc2V0dXAoKQogICAgICAgIGZvciBlcG9jaCBpbiByYW5nZShzZWxmLm5fZXBvY2gpOgogICAgICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCiAgICAgICAgICAgIHNlbGYuY3VyX2Vwb2NoICs9IDEKICAgICAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgICAgICAgICBzdW1fbG9zcyA9IDAuCiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oJ3N0YXJ0IHt9IGVwb2NoJy5mb3JtYXQoZXBvY2grMSkpCiAgICAgICAgICAgIGZvciBwb3NfdHJpcGxldHMgaW4gdHJhaW5fZGF0LmJhdGNoX2l0ZXIoc2VsZi5iYXRjaHNpemUpOgogICAgICAgICAgICAgICAgbmVnX3RyaXBsZXRzID0gc2VsZi5uZWdfZ2VuZXJhdG9yLmdlbmVyYXRlKHBvc190cmlwbGV0cykKICAgICAgICAgICAgICAgIGxvc3MgPSBzZWxmLm1vZGVsLmNvbXB1dGVfZ3JhZGllbnRzKG5wLnRpbGUocG9zX3RyaXBsZXRzLCAoc2VsZi5uX25lZ2F0aXZlLCAxKSksIG5lZ190cmlwbGV0cykKICAgICAgICAgICAgICAgIHNlbGYub3B0LnVwZGF0ZSgpCiAgICAgICAgICAgICAgICBzdW1fbG9zcyArPSBsb3NzCgogICAgICAgICAgICBpZiBzZWxmLnZhbGlkX2RhdDogICMgcnVuIHZhbGlkYXRpb24KICAgICAgICAgICAgICAgIGN1cl9iZXN0X2Vwb2NoID0gc2VsZi5fdmFsaWRhdGlvbigpCgogICAgICAgICAgICBpZiAoZXBvY2grMSkgJSBzZWxmLnNhdmVfc3RlcCA9PSAwOgogICAgICAgICAgICAgICAgaWYgc2VsZi52YWxpZF9kYXQ6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5iZXN0X21vZGVsLnNhdmVfbW9kZWwoc2VsZi5tb2RlbF9wYXRoKycuZXBvY2h7fScuZm9ybWF0KGN1cl9iZXN0X2Vwb2NoKSkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5zYXZlX21vZGVsKHNlbGYubW9kZWxfcGF0aCArICcuZXBvY2h7fScuZm9ybWF0KGVwb2NoKzEpKQoKICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygndHJhaW5pbmcgbG9zcyBpbiB7fSBlcG9jaDoge30nLmZvcm1hdChlcG9jaCsxLCBzdW1fbG9zcykpCiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oJ3RyYWluaW5nIHRpbWUgaW4ge30gZXBvY2g6IHt9Jy5mb3JtYXQoZXBvY2grMSwgdGltZS50aW1lKCktc3RhcnQpKQoKICAgICAgICBzZWxmLl9maW5hbGl6ZSgpCgoKY2xhc3MgU2luZ2xlVHJhaW5lcihUcmFpbmVyKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgc3VwZXIoU2luZ2xlVHJhaW5lciwgc2VsZikuX19pbml0X18oKiprd2FyZ3MpCiAgICAgICAgc2VsZi5uX25lZ2F0aXZlID0ga3dhcmdzLnBvcCgnbl9uZWdhdGl2ZScpCiAgICAgICAgc2VsZi5uZWdfZ2VuZXJhdG9yID0gVW5pZm9ybU5lZ2F0aXZlR2VuZXJhdG9yKHNlbGYubW9kZWwubl9lbnRpdHksIHNlbGYubl9uZWdhdGl2ZSkKCiAgICBkZWYgZml0KHNlbGYsIHRyYWluX2RhdCk6CiAgICAgICAgc2VsZi5fc2V0dXAoKQogICAgICAgIGlmIHR5cGUodHJhaW5fZGF0KSA9PSBUcmlwbGV0RGF0YXNldDoKICAgICAgICAgICAgc2VsZi5fZml0X25lZ2F0aXZlX3NhbXBsZSh0cmFpbl9kYXQpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICAgIGRlZiBfZml0X25lZ2F0aXZlX3NhbXBsZShzZWxmLCB0cmFpbl9kYXQpOgogICAgICAgIGFzc2VydCB0eXBlKHRyYWluX2RhdCkgPT0gVHJpcGxldERhdGFzZXQKICAgICAgICBmb3IgZXBvY2ggaW4gcmFuZ2Uoc2VsZi5uX2Vwb2NoKToKICAgICAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgICAgICAgICBzZWxmLmN1cl9lcG9jaCArPSAxCiAgICAgICAgICAgIHN1bV9sb3NzID0gMC4KICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygnc3RhcnQge30gZXBvY2gnLmZvcm1hdChlcG9jaCsxKSkKICAgICAgICAgICAgZm9yIHBvc190cmlwbGV0cyBpbiB0cmFpbl9kYXQuYmF0Y2hfaXRlcihzZWxmLmJhdGNoc2l6ZSk6CiAgICAgICAgICAgICAgICBuZWdfdHJpcGxldHMgPSBzZWxmLm5lZ19nZW5lcmF0b3IuZ2VuZXJhdGUocG9zX3RyaXBsZXRzKQogICAgICAgICAgICAgICAgeXMgPSBucC5jb25jYXRlbmF0ZSgobnAub25lcyhsZW4ocG9zX3RyaXBsZXRzKSksIC1ucC5vbmVzKGxlbihuZWdfdHJpcGxldHMpKSkpCiAgICAgICAgICAgICAgICBsb3NzID0gc2VsZi5tb2RlbC5jb21wdXRlX2dyYWRpZW50cyhucC5yX1twb3NfdHJpcGxldHMsIG5lZ190cmlwbGV0c10sIHlzKQogICAgICAgICAgICAgICAgc2VsZi5vcHQudXBkYXRlKCkKICAgICAgICAgICAgICAgIHN1bV9sb3NzICs9IGxvc3MKCiAgICAgICAgICAgIGlmIHNlbGYudmFsaWRfZGF0OiAgIyBydW4gdmFsaWRhdGlvbgogICAgICAgICAgICAgICAgY3VyX2Jlc3RfZXBvY2ggPSBzZWxmLl92YWxpZGF0aW9uKCkKCiAgICAgICAgICAgIGlmIChlcG9jaCsxKSAlIHNlbGYuc2F2ZV9zdGVwID09IDA6CiAgICAgICAgICAgICAgICBpZiBzZWxmLnZhbGlkX2RhdDoKICAgICAgICAgICAgICAgICAgICBzZWxmLmJlc3RfbW9kZWwuc2F2ZV9tb2RlbChzZWxmLm1vZGVsX3BhdGgrJy5lcG9jaHt9Jy5mb3JtYXQoY3VyX2Jlc3RfZXBvY2gpKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLnNhdmVfbW9kZWwoc2VsZi5tb2RlbF9wYXRoICsgJy5lcG9jaHt9Jy5mb3JtYXQoZXBvY2grMSkpCgogICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCd0cmFpbmluZyBsb3NzIGluIHt9IGVwb2NoOiB7fScuZm9ybWF0KGVwb2NoKzEsIHN1bV9sb3NzKSkKICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygndHJhaW5pbmcgdGltZSBpbiB7fSBlcG9jaDoge30nLmZvcm1hdChlcG9jaCsxLCB0aW1lLnRpbWUoKS1zdGFydCkpCgogICAgICAgIHNlbGYuX2ZpbmFsaXplKCkKCgpjbGFzcyBOZWdhdGl2ZUdlbmVyYXRvcihvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG5fZW50LCBuX25lZ2F0aXZlLCB0cmFpbl9ncmFwaD1Ob25lKToKICAgICAgICBzZWxmLm5fZW50ID0gbl9lbnQKICAgICAgICBzZWxmLm5fbmVnYXRpdmUgPSBuX25lZ2F0aXZlCiAgICAgICAgaWYgdHJhaW5fZ3JhcGg6CiAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKICAgICAgICBzZWxmLmdyYXBoID0gdHJhaW5fZ3JhcGggICMgZm9yIHByZXZlbnRpbmcgZnJvbSBpbmNsdWRpbmcgcG9zaXRpdmUgdHJpcGxldHMgYXMgbmVnYXRpdmUgb25lcwoKICAgIGRlZiBnZW5lcmF0ZShzZWxmLCBwb3NfdHJpcGxldHMpOgogICAgICAgICIiIgogICAgICAgIDpyZXR1cm46IG5lZ190cmlwbGV0cywgd2hvc2Ugc2l6ZSBpcyAobGVuZ3RoIG9mIHBvc2l0aXZlcyBcdGltZXMgbl9zYW1wbGUgLCAzKQogICAgICAgICIiIgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgo8fGZpbV9ob2xlfD4KICAgIGRlZiBnZW5lcmF0ZShzZWxmLCBwb3NfdHJpcGxldHMpOgogICAgICAgIF9iYXRjaHNpemUgPSBsZW4ocG9zX3RyaXBsZXRzKQogICAgICAgIHNhbXBsZV9zaXplID0gX2JhdGNoc2l6ZSAqIHNlbGYubl9uZWdhdGl2ZQogICAgICAgIG5lZ19lbnRzID0gbnAucmFuZG9tLnJhbmRpbnQoMCwgc2VsZi5uX2VudCwgc2l6ZT1zYW1wbGVfc2l6ZSkKICAgICAgICBuZWdfdHJpcGxldHMgPSBucC50aWxlKHBvc190cmlwbGV0cywgKHNlbGYubl9uZWdhdGl2ZSwgMSkpCiAgICAgICAgaGVhZF9vcl90YWlsID0gMiAqIG5wLnJhbmRvbS5yYW5kaW50KDAsIDIsIHNhbXBsZV9zaXplKQogICAgICAgIG5lZ190cmlwbGV0c1tucC5hcmFuZ2Uoc2FtcGxlX3NpemUpLCBoZWFkX29yX3RhaWxdID0gbmVnX2VudHMKICAgICAgICByZXR1cm4gbmVnX3RyaXBsZXRzCgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgVW5pZm9ybU5lZ2F0aXZlR2VuZXJhdG9yKE5lZ2F0aXZlR2VuZXJhdG9yKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuX2VudCwgbl9uZWdhdGl2ZSwgdHJhaW5fZ3JhcGg9Tm9uZSk6CiAgICAgICAgc3VwZXIoVW5pZm9ybU5lZ2F0aXZlR2VuZXJhdG9yLCBzZWxmKS5fX2luaXRfXyhuX2VudCwgbl9uZWdhdGl2ZSwgdHJhaW5fZ3JhcGgpCgo8fGZpbV9lbmR8Pg=="]
["888aeb44e19dfdc1226b9147d63b2a0fb4fc9ad0-2","888aeb44e19dfdc1226b9147d63b2a0fb4fc9ad0","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5Z2FtZS5nZnhkcmF3LCBweWdhbWUKYmxhY2sgPSAoMCwgMCwgMCkKcmVkID0gKDI1NSwgMCwgMCkKYmx1ZSA9ICgwLCAwLCAyNTUpCgpjbGFzcyBDZWxsKG9iamVjdCk6CglkZWYgX19pbml0X18oc2VsZiwgaSwgaiwgdyk6CgkJc2VsZi5pID0gaQoJCXNlbGYuaiA9IGoKCQlzZWxmLncgPSB3CgkJc2VsZi54ID0gc2VsZi5pICogc2VsZi53CgkJc2VsZi55ID0gc2VsZi5qICogc2VsZi53CgkJc2VsZi5zdGF0ZSA9IDAKCQkKCWRlZiByZW5kZXIoc2VsZiwgc2NyZWVuKToKCQlweWdhbWUuZ2Z4ZHJhdy5yZWN0YW5nbGUoc2NyZWVuLCAoc2VsZi54LCBzZWxmLnksIHNlbGYudywgc2VsZi53KSwgYmxhY2spCgkJaWYgc2VsZi5zdGF0ZSA9PSAnWCc6CgkJCXB5Z2FtZS5kcmF3LmxpbmUoc2NyZWVuLCByZWQsIChzZWxmLngsIHNlbGYueSksIChzZWxmLnggKyBzZWxmLncsIHNlbGYueSArIHNlbGYudyksIDEpCgkJCXB5Z2FtZS5kcmF3LmxpbmUoc2NyZWVuLCByZWQsIChzZWxmLnggKyBzZWxmLncsIHNlbGYueSksIChzZWxmLngsIHNlbGYueSArIHNlbGYudyksIDEpCgkJZWxpZiBzZWxmLnN0YXRlID09ICdPJzoKCQkJcHlnYW1lLmRyYXcuY2lyY2xlKHNjcmVlbiwgYmx1ZSwgKGludChzZWxmLnggKyBzZWxmLncgKiAwLjUpLCBpbnQoc2VsZi55ICsgc2VsZi53ICogMC41KSksCgkJCQkJCQkgICBpbnQoc2VsZi53ICogMC41KSwgMSkKCQoJZGVmIGNvbnRhaW5zKHNlbGYsIHgsIHkpOgoJCXJldHVybiBzZWxmLnggPCB4IDwgc2VsZi54ICsgc2VsZi53IGFuZCBzZWxmLnkgPCB5IDwgc2VsZi55ICsgc2VsZi53CgkKCWRlZiBkcmF3WChzZWxmLCBzY3JlZW4pOgoJCSMgcHlnYW1lLmRyYXcubGluZShzY3JlZW4sIHJlZCwgKHNlbGYueCwgc2VsZi55KSwgKHNlbGYueCArIHNlbGYudywgc2VsZi55ICsgc2VsZi53KSwgMSkKCQlzZWxmLnN0YXRlID0gJ1gnCgkKCWRlZiBkcmF3TyhzZWxmLCBzY3JlZW4pOgoJCSMgcHlnYW1lLmRyYXcuY2lyY2xlKHNjcmVlbiwgYmx1ZSwgKGludChzZWxmLnggKyBzZWxmLncgKiAwLjUpLCBpbnQoc2VsZi55ICsgc2VsZi53ICogMC41KSksIGludChzZWxmLncqMC41KSwgMSkKCQlzZWxmLnN0YXRlID0gJ08nCgkKCWRlZiBjaGVjayhzZWxmLCBwbGF5ZXIpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgkJIyBpZiBwbGF5ZXIgPT0gJ1gnOgoJCSMgCXJldHVybiBzZWxmLnN0YXRlICE9ICdYJwoJCSMgZWxzZToKCQkjIAlyZXR1cm4gc2VsZi5zdGF0ZSAhPSAnTycKPHxmaW1fZW5kfD4="]
["eeaab877981ac8d547417bb6a100a8019dffbe11-2","eeaab877981ac8d547417bb6a100a8019dffbe11","PHxmaW1fcHJlZml4fD4KIyBQeXRob24gLSAzLjYuMAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpzd2FwID0gbGFtYmRhIHN0OiBzdC50cmFuc2xhdGUoc3RyLm1ha2V0cmFucygnYWVpb3UnLCAnQUVJT1UnKSkKPHxmaW1fZW5kfD4="]
["1172a9866bd6e4ea855a37d95dd2fa969f034a0c-3","1172a9866bd6e4ea855a37d95dd2fa969f034a0c","PHxmaW1fcHJlZml4fD4KZnJvbSBzY2lweS5pbyBpbXBvcnQgbG9hZG1hdAppbXBvcnQgaDVweQppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBzZWFib3JuIGFzIHNucwo8fGZpbV9ob2xlfD4KbWF0ID0gaDVweS5GaWxlKGZuYW1lKQoKZGF0YSA9IG5wLnNxdWVlemUobWF0WydFTUcnXVsnZGF0YSddWygpXSkKc3JhdGUgPSBucC5zcXVlZXplKG1hdFsnRU1HJ11bJ3NyYXRlJ11bKCldKQoKCgpuX2NoYW5uZWxzID0gZGF0YS5zaGFwZVswXQpzYW1wbGluZ19mcmVxID0gc3JhdGUgICMgaW4gSGVydHoKCmNoX25hbWVzID0gWydFTUclMDNkJyAlIChqKzEpIGZvciBqIGluIHJhbmdlKGRhdGEuc2hhcGVbMF0pXQpjaF90eXBlcyA9IFsnZW1nJ10gKiBuX2NoYW5uZWxzCgppbmZvID0gbW5lLmNyZWF0ZV9pbmZvKGNoX25hbWVzPWNoX25hbWVzLCBzZnJlcT1zYW1wbGluZ19mcmVxLCBjaF90eXBlcz1jaF90eXBlcykKcHJpbnQoaW5mbykKCnBlYWtzLCBwcm9wZXJ0aWVzID0gZmluZF9wZWFrcygtZGF0YVswXSwgcHJvbWluZW5jZT0xLCB3aWR0aD0yMCkKcGVha3MsCjx8ZmltX3N1ZmZpeHw+CgppbXBvcnQgbW5lCgpmbmFtZSA9ICcvaG9tZS9yb2JiaXMvRG93bmxvYWRzL01FUF9TdWJqXzAwMS5tYXQnCjx8ZmltX2VuZHw+"]
["c9c0452cdb0f5f4b5a2504f3749835789ad09db1-1","c9c0452cdb0f5f4b5a2504f3749835789ad09db1","PHxmaW1fcHJlZml4fD4KZnJvbSBmbG93c2FiZXIuYXBpIGltcG9ydCAqCgoKZGVmIHRlc3RfZmxvd19zZXJpYWxpemF0aW9uKCk6CiAgICBAdGFzawogICAgZGVmIGFkZChudW0pOgogICAgICAgIHJldHVybiBudW0gKyAxCgo8fGZpbV9ob2xlfD4KICAgIG51bV9jaCA9IENoYW5uZWwudmFsdWVzKCpsaXN0KHJhbmdlKDEwMCkpKQogICAgdGVzX2Zsb3cgPSBteWZsb3cobnVtX2NoKQoKICAgIGZsb3dfaW5wdXQgPSB0ZXNfZmxvdy5zZXJpYWxpemUoKQoKICAgIGRlc2VyaWFsaXplZF9mbG93ID0gRmxvdy5kZXNlcmlhbGl6ZShmbG93X2lucHV0LnNlcmlhbGl6ZWRfZmxvdykKPHxmaW1fc3VmZml4fD4KICAgIEBmbG93CiAgICBkZWYgbXlmbG93KG51bSk6CiAgICAgICAgcmV0dXJuIG51bSB8IGFkZCB8IGFkZCB8IHZpZXcgfCBhZGQgfCB2aWV3Cgo8fGZpbV9lbmR8Pg=="]
["88cc0445c3871ee446842213e786c6410fb85a77-4","88cc0445c3871ee446842213e786c6410fb85a77","PHxmaW1fcHJlZml4fD4KZnJvbSBrZXJhcy5tb2RlbHMgaW1wb3J0IGxvYWRfbW9kZWwKaW1wb3J0IGN2MgppbXBvcnQgbnVtcHkgYXMgbnAKCkNMQVNTX01BUCA9IHsgI2FueSBuZXcgZ2VzdHVyZSBoYXMgdG8gYmUgYWRkZWQgaGVyZQogICAgMDonbm9uZScsCiAgICAxOidvbmUnLAogICAgMjondHdvJywKICAgIDM6J3RocmVlJywKICAgIDQ6J2ZvdXInLAogICAgNTonZml2ZScsCiAgICA2OidzaXgnCn0KCk5VTV9DTEFTU0VTID0gbGVuKENMQVNTX01BUCkKCgpkZWYgbWFwcGVyKHZhbCk6CiAgICByZXR1cm4gQ0xBU1NfTUFQW3ZhbF0KCm1vZGVsID0gbG9hZF9tb2RlbCgiZ2VzdHVyZWNoZWNrLmg1IikKCmNhcCA9IGN2Mi5WaWRlb0NhcHR1cmUoMCkKd2hpbGUgVHJ1ZToKICAgIHJldCwgZnJhbWUgPSBjYXAucmVhZCgpCiAgICBpZiBub3QgcmV0OgogICAgICAgIGNvbnRpbnVlCgogICAgY3YyLnJlY3RhbmdsZShmcmFtZSwgKDEwMCwgMTAwKSwgKDUwMCwgNTAwKSwgKDI1NSwgMjU1LCAyNTUpLCAyKQogICAgZWRnZXMgPSBjdjIuQ2FubnkoZnJhbWUsMTAwLDIwMCkKICAgIHJvaSA9IGVkZ2VzWzEwMDo1MDAsIDEwMDo1MDBdCjx8ZmltX2hvbGV8PgogICAgZ2VzdHVyZV9uYW1lID0gbWFwcGVyKG1vdmVfY29kZSkKICAgIGZvbnQgPSBjdjIuRk9OVF9IRVJTSEVZX1NJTVBMRVgKICAgIGN2Mi5wdXRUZXh0KGZyYW1lLCBnZXN0dXJlX25hbWUsCiAgICAgICAgICAgICAgICAoNTAsIDUwKSwgZm9udCwgMS4yLCAoMjU1LCAyNTUsIDI1NSksIDIsIGN2Mi5MSU5FX0FBKQogICAgY3YyLmltc2hvdygiSGFuZCBEZXRlY3Rpb24iLCBmcmFtZSkKCiAgICBrID0gY3YyLndhaXRLZXkoMTApCiAgICBpZiBrID09IG9yZCgncScpOgogICAgICAgIGJyZWFrCgpjYXAucmVsZWFzZSgpCmN2Mi5kZXN0cm95QWxsV2luZG93cygpCjx8ZmltX3N1ZmZpeHw+CiAgICBpbWcgPSBjdjIuY3Z0Q29sb3Iocm9pLCBjdjIuQ09MT1JfQkdSMlJHQikKICAgIGltZyA9IGN2Mi5yZXNpemUoaW1nLCAoMjI3LCAyMjcpKQogICAgcHJlZCA9IG1vZGVsLnByZWRpY3QobnAuYXJyYXkoW2ltZ10pKQogICAgbW92ZV9jb2RlID0gbnAuYXJnbWF4KHByZWRbMF0pCjx8ZmltX2VuZHw+"]
["245b4df05b18279699aef5e06f3523162a549d78-4","245b4df05b18279699aef5e06f3523162a549d78","PHxmaW1fcHJlZml4fD4KIyEvYmluL2VudiBweXRob24KCmltcG9ydCBzdWJwcm9jZXNzCgojIGtleSBmb3IgbnVtYmVyIG9mIGRldGVjdGVkIGZhaWxzCktfRkFJTFMgPSAnZmFpbHMnCiMga2V5IGZvciBib29sIGlmICJvbkZhaWwiIHdhcyB0cmlnZ2VyZWQKS19BTEVSVEVEID0gJ2FsZXJ0ZWQnCiMga2V5IGZvciBpbnRlcnZhbCBpbiBtaW51dGVzCktfSU5URVJWQUwgPSAnaW50ZXJ2YWwnCiMga2V5IGZvciBpbmNvbWluZyBwaW5nIHRva2VuCktfVE9LRU4gPSAndG9rZW4nCiMga2V5IGZvciBhcGkgcmVzdWx0IHN1Y2Nlc3Mgc3RhdGUKS19TVUNDRVNTID0gJ3N1Y2Nlc3MnCiMgc3BlY2lhbCBrZXkgaW4gdGhlIGNoZWNrcy55bWwgY29uZmlnIGZpbGUgd2hpY2ggY29uZmlndXJlcyBncmFwaGl0ZQpLX0dSQVBISVRFID0gJ19fZ3JhcGhpdGUnCgpkZWYgcnVuQ21kKGNtZCk6CglzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLCBjbG9zZV9mZHM9VHJ1ZSkKCmRlZiBydW5GYWlsQ29tbWFuZChjaGVjaywgc3RhdGUpOgoJZmFpbHMgPSBzdGF0ZS5nZXQoS19GQUlMUykgKyAxCglzdGF0ZVtLX0ZBSUxTXSA9IGZhaWxzCgltaW5GYWlscyA9IGNoZWNrLmdldCgnbWluRmFpbHMnLCAxKQoJYWxlcnRlZCA9IHN0YXRlLmdldChLX0FMRVJURUQsIEZhbHNlKQoJaWYgZmFpbHMgPCBtaW5GYWlsczoKCQlwcmludCgnJXMgbW9yZSBmYWlscyBiZWZvcmUgdHJpZ2dlcmluZyclKG1pbkZhaWxzIC0gZmFpbHMpKQoJCXJldHVybgoJb25GYWlsQ21kID0gY2hlY2suZ2V0KCdvbkZhaWwnKQoJb25OZWdhdGl2ZUNtZCA9IGNoZWNrLmdldCgnb25OZWdhdGl2ZScsIE5vbmUpCglpZiBub3QgYWxlcnRlZCBhbmQgZmFpbHMgPj0gbWluRmFpbHM6CgkJcHJpbnQoJ3J1bm5pbmcgb25GYWlsIGNvbW1hbmQ6XG4lcyclKG9uRmFpbENtZCkpCgkJIyBydW4gY29tbWFuZCBpbiBiYWNrZ3JvdW5kCgkJcnVuQ21kKG9uRmFpbENtZCkKCQlzdGF0ZVtLX0FMRVJURURdID0gVHJ1ZQoJZWxpZiBvbk5lZ2F0aXZlQ21kIGlzIG5vdCBOb25lOgoJCXJ1bkNtZChvbk5lZ2F0aXZlQ21kKQoKZGVmIHJ1blJlY292ZXJlZChjaGVjaywgbmFtZSwgc3RhdGUpOgoJbWluRmFpbHMgPSBjaGVjay5nZXQoJ21pbkZhaWxzJywgMSkKCWZhaWxzID0gc3RhdGUuZ2V0KEtfRkFJTFMsIDApCglpZiBmYWlscyA+PSBtaW5GYWlscyBhbmQgJ29uUmVjb3ZlcicgaW4gY2hlY2s6Cjx8ZmltX2hvbGV8PgoJc3RhdGVbS19GQUlMU10gPSAwCglzdGF0ZVtLX0FMRVJURURdID0gRmFsc2UKCmRlZiBidWlsZFN0YXRlUmVzdWx0KGZhaWxzKToKCSIiIgoJYnVpbGRzIHRoZSByZXN1bHQgb2JqZWN0IHdoaWNoIGlzIHJldHVybmVkIGJ5IHRoZSBqc29uIGFwaSBmb3IgZWFjaCBjaGVjawoJIiIiCglyZXR1cm4ge0tfU1VDQ0VTUzogZmFpbHMgPT0gMCwgS19GQUlMUyA6IGZhaWxzfQo8fGZpbV9zdWZmaXh8PgoJCXByaW50KCciJXMiIHJlY292ZXJlZCclbmFtZSkKCQlydW5DbWQoY2hlY2suZ2V0KCdvblJlY292ZXInKSkKPHxmaW1fZW5kfD4="]
["ee85c1d5c1dc5e25bf943b6056ccd79d4c3547df-3","ee85c1d5c1dc5e25bf943b6056ccd79d4c3547df","PHxmaW1fcHJlZml4fD4KIiIiIFRoaXMgbW9kdWxlIGNvbnRhaW5zIHRoZSBzYWNyZWQgZXhwZXJpbWVudAoiIiIKCmZyb20gc2FjcmVkIGltcG9ydCBFeHBlcmltZW50Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBzYWNyZWQub2JzZXJ2ZXJzIGltcG9ydCBNb25nb09ic2VydmVyCgpmcm9tIG1uaXN0X2Nubi50cmFpbiBpbXBvcnQgcGlwZWxpbmVfdHJhaW5faG9vawoKPHxmaW1fZW5kfD4="]
["14ce1039127e31a2c958d1e3cfa24e5d087a5641-1","14ce1039127e31a2c958d1e3cfa24e5d087a5641","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzp1dGYtOCAtKi0KCmltcG9ydCBsb2dnaW5nCgpmcm9tIHB5ZnRwZGxpYi5zZXJ2ZXJzIGltcG9ydCBGVFBTZXJ2ZXIsIE11bHRpcHJvY2Vzc0ZUUFNlcnZlcgoKZnJvbSBmdHBfdjUuY29zX2F1dGhvcml6ZXIgaW1wb3J0IENvc0F1dGhvcml6ZXIKZnJvbSBmdHBfdjUuY29zX2Z0cF9oYW5kbGVyIGltcG9ydCBDb3NGdHBIYW5kbGVyCmZyb20gZnRwX3Y1LmNvc19maWxlX3N5c3RlbSBpbXBvcnQgQ29zRmlsZVN5c3RlbQpmcm9tIGZ0cF92NS5jb25mLmZ0cF9jb25maWcgaW1wb3J0IENvc0Z0cENvbmZpZwoKbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZT0ncHlmdHBkLmxvZycsIGxldmVsPUNvc0Z0cENvbmZpZygpLmxvZ19sZXZlbCkKCgpkZWYgcnVuKHBvcnQ9MjEyMSwgcGFzc2l2ZV9wb3J0cz1yYW5nZSg2MDAwMCwgNjU1MzUpLCBtYXNxdWVyYWRlX2FkZHJlc3M9Tm9uZSk6CiAgICBhdXRob3JpemVyID0gQ29zQXV0aG9yaXplcigpCiAgICBmb3IgbG9naW5fdXNlciwgbG9naW5fcGFzc3dvcmQsIHBlcm1pc3Npb24gaW4gQ29zRnRwQ29uZmlnKCkubG9naW5fdXNlcnM6CiAgICAgICAgcGVybSA9ICIiCiAgICAgICAgaWYgIlIiIGluIHBlcm1pc3Npb246CiAgICAgICAgICAgIHBlcm0gPSBwZXJtICsgYXV0aG9yaXplci5yZWFkX3Blcm1zCiAgICAgICAgaWYgIlciIGluIHBlcm1pc3Npb246CiAgICAgICAgICAgIHBlcm0gPSBwZXJtICsgYXV0aG9yaXplci53cml0ZV9wZXJtcwogICAgICAgIGF1dGhvcml6ZXIuYWRkX3VzZXIobG9naW5fdXNlciwgbG9naW5fcGFzc3dvcmQsIENvc0Z0cENvbmZpZygpLmhvbWVkaXIsIHBlcm09cGVybSkKCiAgICBoYW5kbGVyID0gQ29zRnRwSGFuZGxlcgogICAgaGFuZGxlci5hdXRob3JpemVyID0gYXV0aG9yaXplcgogICAgaGFuZGxlci5hYnN0cmFjdGVkX2ZzID0gQ29zRmlsZVN5c3RlbQogICAgaGFuZGxlci5iYW5uZXIgPSAiV2VsY29tZSB0byBDT1MgRlRQIFNlcnZpY2UiCiAgICBoYW5kbGVyLnBlcm1pdF9mb3JlaWduX2FkZHJlc3NlcyA9IFRydWUKCiAgICBpZiBtYXNxdWVyYWRlX2FkZHJlc3MgaXMgbm90IE5vbmU6CiAgICAgICAgaGFuZGxlci5tYXNxdWVyYWRlX2FkZHJlc3MgPSBtYXNxdWVyYWRlX2FkZHJlc3MKCiAgICBoYW5kbGVyLnBhc3NpdmVfcG9ydHMgPSBwYXNzaXZlX3BvcnRzCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBzZXJ2ZXIgPSBGVFBTZXJ2ZXIoKCIwLjAuMC4wIiwgcG9ydCksIGhhbmRsZXIpCQogICAgc2VydmVyLm1heF9jb25zID0gQ29zRnRwQ29uZmlnKCkubWF4X2Nvbm5lY3Rpb25fbnVtCgo8fGZpbV9lbmR8Pg=="]
["6d906d52863b437e57eef07f07d084e5a18e704a-3","6d906d52863b437e57eef07f07d084e5a18e704a","PHxmaW1fcHJlZml4fD4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgZ2VuZXJhdGUgSlZNIGR1bXBzLCBoZWFwLCBzeXN0ZW0sIHRocmVhZHMKIyBmb3Igb25lIG9yIG1vcmUgc2VydmVycwojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0Kc2NyaXB0X25hbWUgPSAianZtX2dlbmVyYXRlX2R1bXBfc29hcC5weSIKCmltcG9ydCBzeXMKCmRlZiBwcmludF91c2FnZSgpOgogIHByaW50KCdcblVzYWdlOiB3c2FkbWluLnNoIFstY29ubnR5cGUgU09BUF0gLWxhbmcganl0aG9uIC1mIDwlcz4gPGNlbGx8YWxsPiA8bm9kZXxhbGw+IDxzZXJ2ZXJ8YWxsPiA8aGVhcDpzeXN0ZW06dGhyZWFkPicgJSBzY3JpcHRfbmFtZSkKICBwcmludAogIHJldHVybgoKZGVmIHByaW50X2p2bXMoKToKICAiIiIKICAgIHByaW50IGxpc3Qgb2YgYXZhaWxhYmxlIEpWTQogICIiIgogIHByaW50KCdcbkRlZmluZWQgSlZNcyBhcmU6JykKICBqdm1zID0gQWRtaW5Db25maWcubGlzdCgnSmF2YVZpcnR1YWxNYWNoaW5lJykuc3BsaXQoIGxpbmVTZXBhcmF0b3IpCiAgZm9yIGp2bSBpbiBqdm1zOgogICAgY2VsbF9ub2RlX3NlcnZlciA9IGp2bS5zcGxpdCgnfCcpWzBdLnNwbGl0KCcvJykKICAgIF9jZWxsID0gY2VsbF9ub2RlX3NlcnZlclsxXQogICAgX25vZGUgPSBjZWxsX25vZGVfc2VydmVyWzNdCiAgICBfc2VydiA9IGNlbGxfbm9kZV9zZXJ2ZXJbNV0KICAgIHByaW50KCcgIFsgY2VsbHMgLyAlcyAvIG5vZGVzIC8gJXMgLyBzZXJ2ZXJzIC8gJXMgXScgJSAoX2NlbGwsIF9ub2RlLCBfc2VydikpCiAgcHJpbnQKICByZXR1cm4KCmRlZiBqdm1fZ2VuZXJhdGVfZHVtcCggKmFyZ3YpOgogICMgbGlzdCBhbGwgcHJvcGVydGllcyBhdmFpbGFibGUgd2l0aCB0aGlzIHNjcmlwdAogIGF2YWlsYWJsZV9wcm9wcyA9IFsnSUJNX0NPUkVESVInLCAnSUJNX0hFQVBEVU1QJywgJ0lCTV9IRUFQRFVNUERJUicsICdJQk1fSEVBUERVTVBfT1VUT0ZNRU1PUlknLCAgJ0lCTV9IRUFQX0RVTVAnLCAnSUJNX0pBVkFDT1JFRElSJywgJ0lCTV9KQVZBRFVNUF9PVVRPRk1FTU9SWScsICdJQk1fSkFWQV9IRUFQRFVNUF9URVhUJywgJ0lCTV9KQVZBX0hFQVBEVU1QX1RYVCcsICdKQVZBX0RVTVBTX09QVFMnLCAnY29tLmlibS53ZWJzcGhlcmUudGhyZWFkbW9uaXRvci5pbnRlcnZhbCcsICdjb20uaWJtLndlYnNwaGVyZS50aHJlYWRtb25pdG9yLnRocmVzaG9sZCcsICdjb20uaWJtLndlYnNwaGVyZS50aHJlYWRtb25pdG9yLmZhbHNlLmFsYXJtLnRocmVzaG9sZCcsICdjb20uaWJtLndlYnNwaGVyZS50aHJlYWRtb25pdG9yLmR1bXAuamF2YScsICdjb20uaWJtLndlYnNwaGVyZS50aHJlYWRtb25pdG9yLmR1bXAuc3RhY2snXQogIAogICMgZmlyc3QgY2hlY2sgaWYgd2UgYXJlIHJlYWxseSBjb25uZWN0ZWQ6IEFkbWluVGFzayBzaG91bGQgYmUgYXZhaWxhYmxlCiAgdHJ5OgogICAgY2VsbE5hbWUgPSBBZG1pbkNvbnRyb2wuZ2V0Q2VsbCgpCiAgZXhjZXB0OgogICAgcHJpbnQoJ1xuV0FSTklORzogTm90IGNvbm5lY3RlZCcpCiAgICBwcmludF91c2FnZSgpCiAgICBwcmludF9qdm1zKCkKICAgICMgc3lzLmV4aXQoKQogICAgcmV0dXJuCiAgICAKICAjIHRlc3QgcGFyYW1ldGVyCiAgcHJpbnQoJy0nKjIwKQogIGlmIGxlbiggYXJndikgPT0gNDogCiAgICBjZWxsID0gYXJndlswXQogICAgbm9kZSA9IGFyZ3ZbMV0KICAgIHNlcnYgPSBhcmd2WzJdCiAgICBtb2RlID0gYXJndlszXS5sb3dlcigpLnNwbGl0KCc6JykKICAgIGdlbl9oZWFwID0gZ2VuX3N5c3RlbSA9IGdlbl90aHJlYWQgPSAnJwogICAgaWYgJ2hlYXAnIGluIG1vZGU6IGdlbl9oZWFwID0gJ2hlYXAnCiAgICBpZiAnc3lzdGVtJyBpbiBtb2RlOiBnZW5fc3lzdGVtID0gJ3N5c3RlbScKICAgIGlmICd0aHJlYWQnIGluIG1vZGU6IGdlbl90aHJlYWQgPSAndGhyZWFkJwogICAgaWYgKGdlbl9oZWFwICE9ICcnKSBvciAoZ2VuX3N5c3RlbSAhPSAnJykgb3IgKGdlbl90aHJlYWQgIT0gJycpOgogICAgICBwcmludCgnR2VuZXJhdGluZyBbJXM6JXM6JXNdIGR1bXAgZm9yIFsgY2VsbHMgLyAlcyAvIG5vZGVzIC8gJXMgLyBzZXJ2ZXJzIC8gJXMgXScgJSAoZ2VuX2hlYXAsIGdlbl9zeXN0ZW0sIGdlbl90aHJlYWQsIGNlbGwsIG5vZGUsIHNlcnYpKQogICAgZWxzZToKICAgICAgcHJpbnRfdXNhZ2UoKQogICAgICBwcmludCgnXG5XQVJOSU5HOiBObyBjb3JyZWN0IHBhcmFtZXRlciBwYXNzZWQgdG8gdGhlIHNjcmlwdC4uLicpCiAgICAKICBpZiAobGVuKCBhcmd2KSAhPSA0KSBvciAoZ2VuX2hlYXArZ2VuX3N5c3RlbStnZW5fdGhyZWFkID09ICcnKToKICAgIHByaW50X3VzYWdlKCkKICAgIHByaW50X2p2bXMoKQogICAgIyBzeXMuZXhpdCgpCjx8ZmltX2hvbGV8PgogICMgZ2VuZXJhdGUgZHVtcCBHQyBmb3Igc2VsZWN0ZWQganZtCiAgZm91bmQgPSAwCiAgb25seV9hcHBsaWNhdGlvbl9zZXJ2ZXIgPSAndHJ1ZScKICBqdm1zID0gQWRtaW5Db250cm9sLnF1ZXJ5TmFtZXMoJ3R5cGU9SlZNLConKS5zcGxpdCggbGluZVNlcGFyYXRvcikKICBmb3IganZtIGluIGp2bXM6CiAgICBqdm1PYmogPSBBZG1pbkNvbnRyb2wubWFrZU9iamVjdE5hbWUoIGp2bSkKICAgIF9jZWxsID0ganZtT2JqLmdldEtleVByb3BlcnR5KCAnY2VsbCcpCiAgICBfbm9kZSA9IGp2bU9iai5nZXRLZXlQcm9wZXJ0eSggJ25vZGUnKQogICAgX3NlcnYgPSBqdm1PYmouZ2V0S2V5UHJvcGVydHkoICdwcm9jZXNzJykKICAgICMgcmV0cmlldmUgc2VydmVyIHR5cGUKICAgIHNlcnZlcl90eXBlID0ganZtT2JqLmdldEtleVByb3BlcnR5KCAndHlwZScpCiAgICAjIGlmICdhbGwnIGlzIHVzZWQgdGhlbiBhY3RpdmF0ZSBvbmx5IGlmIHNlcnZlciB0eXBlIGlzIEFQUExJQ0FUSU9OX1NFUlZFUgogICAgIyBlbHNlIGlmICdhbGwnIGlzIG5vdCB1c2VkIHRoZW4gdXNlciBrbm93cyB3aGF0IGhlIGRvZXMgc28gYWN0aXZhdGUgZXZlbiBpZiBzZXJ2ZXIgdHlwZSBpcyBub3QgQVBQTElDQVRJT05fU0VSVkVSCiAgICAjIGRvIGlmIG9ubHkgY3VycmVudCBqdm0gaXMgdGFyZ2V0ZWQKICAgIGlmIChfY2VsbCA9PSBjZWxsIG9yIGNlbGwgPT0gJ2FsbCcpIGFuZCAoX25vZGUgPT0gbm9kZSBvciBub2RlID09ICdhbGwnKSBhbmQgKF9zZXJ2ID09IHNlcnYgb3Igc2VydiA9PSAnYWxsJyk6CiAgICAgIHByaW50KCctJyoyMCkKICAgICAgcHJpbnQoJ1sgY2VsbHMgLyAlcyAvIG5vZGVzIC8gJXMgLyBzZXJ2ZXJzIC8gJXMgXScgJSAoX2NlbGwsIF9ub2RlLCBfc2VydikpCiAgICAgIGZvdW5kID0gZm91bmQgKyAxCiAgICAgIHByaW50KCctJyoyMCkKICAgICAgaWYgZ2VuX2hlYXAgPT0gJ2hlYXAnOgogICAgICAgIHByaW50ICIgIGdlbmVyYXRpbmcgSEVBUCBkdW1wLi4uIgogICAgICAgIEFkbWluQ29udHJvbC5pbnZva2UoIGp2bSwgJ2dlbmVyYXRlSGVhcER1bXAnKQkJIyA8cHJvZmlsZS1uYW1lPi9oZWFwZHVtcC48ZGF0ZT4uLjx0aW1lc3RhbXA+PHBpZD4ucGhkCiAgICAgIGlmIGdlbl90aHJlYWQgPT0gJ3RocmVhZCc6CiAgICAgICAgcHJpbnQgIiAgZ2VuZXJhdGluZyBUSFJFQUQgZHVtcCAoamF2YWNvcmUpLi4uIgogICAgICAgIEFkbWluQ29udHJvbC5pbnZva2UoIGp2bSwgJ2R1bXBUaHJlYWRzJykJCQkjIDxwcm9maWxlLW5hbWU+L2phdmFjb3JlLjxkYXRlPi4uPHRpbWVzdGFtcD48cGlkPgogICAgICBpZiBnZW5fc3lzdGVtID09ICdzeXN0ZW0nOgogICAgICAgIHByaW50ICIgIGdlbmVyYXRpbmcgU1lTVEVNIGR1bXAuLi4iCiAgICAgICAgQWRtaW5Db250cm9sLmludm9rZSgganZtLCAnZ2VuZXJhdGVTeXN0ZW1EdW1wJykJCSMgPHByb2ZpbGUtbmFtZT4vY29yZS48ZGF0ZT4uLjx0aW1lc3RhbXA+PHBpZD4uZG1wCiAgICAgICMgZ2V0IHNlcnZlciBwcm9wZXJ0aWVzIGZvciBjdXJyZW50IGp2bSAodG8gc2hvdyBkdW1wIGRpcmVjdG9yaWVzKQogICAgICBwcmludCgiXG4gIGN1cnJlbnRzIHByb3BlcnRpZXMgb2YgdGhpcyBzZXJ2ZXI6IikKICAgICAgcHJvcHMgPSBBZG1pbkNvbmZpZy5saXN0KCAnUHJvcGVydHknLCAnKGNlbGxzLyVzL25vZGVzLyVzL3NlcnZlcnMvJXN8c2VydmVyLnhtbCknICUgKF9jZWxsLCBfbm9kZSwgX3NlcnYpKS5zcGxpdCggbGluZVNlcGFyYXRvcikKICAgICAgIyBwcmludCBwcm9wcwogICAgICBmb3IgcCBpbiBwcm9wczoKICAgICAgICBpZiBwICE9ICcnOgogICAgICAgICAgdiA9IHt9CiAgICAgICAgICB2WyduYW1lJ10gPSBBZG1pbkNvbmZpZy5zaG93QXR0cmlidXRlKCBwLCAnbmFtZScpCiAgICAgICAgICB2Wyd2YWx1ZSddID0gQWRtaW5Db25maWcuc2hvd0F0dHJpYnV0ZSggcCwgJ3ZhbHVlJykKICAgICAgICAgIGlmICh2WyduYW1lJ10gaW4gYXZhaWxhYmxlX3Byb3BzKToKICAgICAgICAgICAgcHJpbnQoICIgICAgJS0zMHMgJyVzJyIgJSAodlsnbmFtZSddLCB2Wyd2YWx1ZSddKSkKICAKICAjIGRpc3BsYXkgbGlzdCBvZiBqdm0gYXZhaWxhYmxlIGlmIG5vIG1hdGNoCiAgaWYgbm90IGZvdW5kOgogICAgIyBkaXNwbGF5IHdhcm5pbmcgYW5kIGxpc3Qgb2YgYXZhaWxhYmxlIGp2bQogICAgcHJpbnRfdXNhZ2UoKQogICAgcHJpbnQoJ1xuV0FSTklORzogWyBjZWxscyAvICVzIC8gbm9kZXMgLyAlcyAvIHNlcnZlcnMgLyAlcyBdIG5vdCBhdmFpbGFibGUhJyAlIChjZWxsLCBub2RlLCBzZXJ2KSkKICAgIHByaW50X2p2bXMoKQogIAojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgZm9yIFdBUyA2OiBfX25hbWVfXyA9PSAibWFpbiIKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIiBvciBfX25hbWVfXyA9PSAibWFpbiI6CiAganZtX2dlbmVyYXRlX2R1bXAoICpzeXMuYXJndikKICAjIHN5cy5leGl0KCkKZWxzZToKICB0cnk6CiAgICAjIGltcG9ydCBBZG1pbkNvbmZpZywgQWRtaW5Db250cm9sLCBBZG1pbkFwcCwgQWRtaW5UYXNrLCBIZWxwCiAgICBpbXBvcnQgbGluZVNlcGFyYXRvcgogIGV4Y2VwdDoKICAgIHBhc3MKCjx8ZmltX3N1ZmZpeHw+CiAgICByZXR1cm4KICAKPHxmaW1fZW5kfD4="]
["01354365dee8648fef24ce894721b4993f400009-1","01354365dee8648fef24ce894721b4993f400009","PHxmaW1fcHJlZml4fD4KZGVmIGNvbnRhaW5zKG15X2xpc3QsIG15X2ZpbHRlcik6CiAgICBmb3IgeCBpbiBteV9saXN0OgogICAgICAgIGlmIG15X2ZpbHRlcih4KToKICAgICAgICAgICAgcmV0dXJuIFRydWUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcmV0dXJuIEZhbHNlCjx8ZmltX2VuZHw+"]
["882734a15a61ca9898b9bbc259e3b22a97924348-1","882734a15a61ca9898b9bbc259e3b22a97924348","PHxmaW1fcHJlZml4fD4KIiIiU2NyaXB0IGZvciBjcmVhdGluZyB1cmwgYmFzZWQgb24gc2NyaXB0IHBhcmFtZXRlcnMiIiIKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCByZXF1ZXN0cwoKcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQoKcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zY2hlbWEnLAogICAgICAgICAgICAgICAgICAgIGhlbHA9J3NjaGVtYScsCiAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0naHR0cHMnLAogICAgICAgICAgICAgICAgICAgIGNob2ljZXM9WydodHRwJywgJ2h0dHBzJ10pCgpwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWhvc3QnLAogICAgICAgICAgICAgICAgICAgIGhlbHA9J2hvc3QnLAogICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ImxvY2FsaG9zdCIpCgpwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXBhdGgnLAogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Jy8nLAogICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgIGhlbHA9J1BhdGggdG8gbWFrZSByZXF1ZXN0IG9uIGhvc3QnLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UpCgoKPHxmaW1fZW5kfD4="]
["6d828c401726f33aaf310b383a7a6ef5079f6fb0-1","6d828c401726f33aaf310b383a7a6ef5079f6fb0","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc9dXRmLTgKaW1wb3J0IHB5bXlzcWwKaW1wb3J0IGRhdGV0aW1lCmZyb20gY29uY3VycmVudC5mdXR1cmVzIGltcG9ydCBUaHJlYWRQb29sRXhlY3V0b3IsIGFzX2NvbXBsZXRlZAoKCmRlZiBnZXRfY29ubmVjdGlvbihpcCwgcG9ydCwgdXNlciwgcHdkLCBkYik6CiAgICAnJyfojrflj5ZNeXNxbOaVsOaNruW6k+a4uOaghwogICAgJycnCiAgICBkYiA9IHB5bXlzcWwuY29ubmVjdChob3N0PWlwLCBwb3J0PXBvcnQsIHVzZXI9dXNlciwKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3ZD1wd2QsIGRiPWRiLCBjaGFyc2V0PSd1dGY4JywgY3Vyc29yY2xhc3M9cHlteXNxbC5jdXJzb3JzLkRpY3RDdXJzb3IpCiAgICByZXR1cm4gZGIKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICAgICAgICAgICJ1c2VyIiwgIiIsICJkYl9mbG93IikKICAgIHNxbCA9ICJTRUxFQ1QgZi5mZF9pZCxmLmZkX2RldmljZV9pZCxkLmZkX2lwLGYuZmRfcG9ydCxmLmZkX2NvbGxlY3Rpb25fdGltZSBGUk9NIHN5c19mbG93IGFzIGYgbGVmdCBKT0lOIHN5c19kZXZpY2UgYXMgZCBvbiBkLmZkX2lkPWYuZmRfZGV2aWNlX2lkIFdIRVJFIGYuZmRfY29sbGVjdGlvbl90aW1lPj0lcyBBTkQgKGYuZmRfZmxvd19vdXQ9MCBPUiBmLmZkX2Zsb3dfaW49MCkiCiAgICB3aXRoIGRiLmN1cnNvcigpIGFzIGN1cnNvcjoKICAgICAgICBjdXJzb3IuZXhlY3V0ZShzcWwsIFtzdGFydF90aW1lXSkKICAgICAgICByZXR1cm4gY3Vyc29yLmZldGNoYWxsKCkKCgpkZWYgdXBkYXRlX3plcm9fZGF0YShmbG93X2luLCBmbG93X291dCwgaWQpOgogICAgZGIgPSBnZXRfY29ubmVjdGlvbigiIiwgMzMwNiwKICAgICAgICAgICAgICAgICAgICAgICAgInVzZXIiLCAiIiwgImRiX2Zsb3ciKQogICAgc3FsID0gInVwZGF0ZSBzeXNfZmxvdyBzZXQgZmRfZmxvd19pbj0lcyxmZF9mbG93X291dD0lcyB3aGVyZSBmZF9pZD0lcyIgJSAoCiAgICAgICAgZmxvd19pbiwgZmxvd19vdXQsIGlkKQogICAgY3Vyc29yID0gZGIuY3Vyc29yKCkKICAgIHRyeToKICAgICAgICBjdXJzb3IuZXhlY3V0ZShzcWwpCiAgICAgICAgZGIuY29tbWl0KCkKICAgIGV4Y2VwdDoKICAgICAgICBkYi5yb2xsYmFjaygpCiAgICBmaW5hbGx5OgogICAgICAgIGRiLmNsb3NlKCkKCgpkZWYgZ2V0X2RhdGFfZnV0dXJlKGl0ZW0sIG1hcCk6CiAgICBpZiBpdGVtWyJmZF9pZCJdID09IDE4NzIyOTk5OgogICAgICAgIHByaW50KCdzdGFydCcpCiAgICBwb3J0ID0gaXRlbVsnZmRfcG9ydCddCiAgICB0aW1lID0gaXRlbVsnZmRfY29sbGVjdGlvbl90aW1lJ10KICAgIGRldmljZUlkID0gaXRlbVsnZmRfaXAnXQogICAgaWYgZGV2aWNlSWQgaW4gbWFwOgogICAgICAgIGRldmljZUlkID0gbWFwW2RldmljZUlkXQogICAgZGIgPSBnZXRfY29ubmVjdGlvbigiMTkyLjE2OC41LjIzNyIsIDMzMDYsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IiwgIll6QDVjU2p2V3JCIiwgImRiX3Rlc3QiKQogICAgcHJpbnQoaXRlbVsnZmRfaXAnXSwgZGV2aWNlSWQsIHBvcnQsIHRpbWUpCiAgICBzcWwgPSAnU0VMRUNUICogRlJPTSBzeXNfZmxvdyBXSEVSRSBmZF9kZXZpY2VfaWQ9IiVzIiBBTkQgZmRfcG9ydD0lcyBBTkQgZmRfY29sbGVjdGlvbl90aW1lPSVzIExJTUlUIDEnICUgKAogICAgICAgIGRldmljZUlkLCBwb3J0LCB0aW1lKQogICAgd2l0aCBkYi5jdXJzb3IoKSBhcyBjdXJzb3I6CiAgICAgICAgY3Vyc29yLmV4ZWN1dGUoc3FsKQogICAgICAgIGRhdGEgPSBjdXJzb3IuZmV0Y2hvbmUoKQogICAgICAgIHJldHVybiBkYXRhCgoKZGVmIHVwZGF0ZV96ZXJvX2l0ZW0oaXRlbSwgZGV2aWNlX21hcCk6CiAgICBkYXRhID0gZ2V0X2RhdGFfZnV0dXJlKGl0ZW0sIGRldmljZV9tYXApCiAgICBpZiBkYXRhIGlzIG5vdCBOb25lOgogICAgICAgIHByaW50KCJleGVjdXRlIHVwZGF0ZSBmb3IgIiwgaXRlbVsnZmRfaWQnXSkKICAgICAgICBpZCA9IGl0ZW1bJ2ZkX2lkJ10KICAgICAgICBmbG93SW4gPSBkYXRhWydmZF9mbG93X2luJ10KICAgICAgICBmbG93T3V0ID0gZGF0YVsnZmRfZmxvd19vdXQnXQogICAgICAgIHVwZGF0ZV96ZXJvX2RhdGEoZmxvd0luLCBmbG93T3V0LCBpZCkKCgpkZWYgdXBkYXRlX3plcm9fbGlzdCh6ZXJvX2xpc3QsIHRocmVhZHM9NSk6CiAgICBkZXZpY2VfbWFwID0gewogICAgICAgICIxOTIuMTY4LjUuODEiOiAiMTcyLjIwLjAuMiIsCiAgICAgICAgIjE5Mi4xNjguNS44MiI6ICIxNzIuMjAuMTEzLjI0OCIsCiAgICAgICAgIjE5Mi4xNjguNS44MyI6ICIxNzIuMjAuMC4xMCIsCiAgICAgICAgIjE5Mi4xNjguNS44NCI6ICIxNzIuMjAuMC4yMiIsCiAgICAgICAgIjE5Mi4xNjguNS44NSI6ICIxNzIuMjAuMC4yNiIsCiAgICAgICAgIjE5Mi4xNjguNS44NiI6ICIxNzIuMjguMC43MyIsCiAgICAgICAgIjE5Mi4xNjguNS44NyI6ICIxNzIuMjkuMC45NCIsCiAgICAgICAgIjE5Mi4xNjguNS44OCI6ICIxNzIuMjkuMTMyLjEiLAogICAgICAgICIxOTIuMTY4LjUuODkiOiAiMTkyLjE2OC4yMC44MSIsCiAgICAgICAgIjE5Mi4xNjguNS45MCI6ICIxOTIuMTY4LjIwLjEyMCIsCiAgICAgICAgIjE5Mi4xNjguNS45MSI6ICIxNzIuMjkuMC43OCIsCiAgICAgICAgIjE5Mi4xNjguNS45MiI6ICIxNzIuMjAuMTAuMTAxIgogICAgfQogICAgcHJpbnQoImZpbmQgcm93cyIsIGxlbih6ZXJvX2xpc3QpKQogICAgd2l0aCBUaHJlYWRQb29sRXhlY3V0b3IobWF4X3dvcmtlcnM9dGhyZWFkcykgYXMgZXhlY3V0b3I6CiAgICAgICAgdGFza19saXN0ID0gW10KICAgICAgICBmb3IgaXRlbSBpbiB6ZXJvX2xpc3Q6CiAgICAgICAgICAgIHRhc2sgPSBleGVjdXRvci5zdWJtaXQodXBkYXRlX3plcm9faXRlbSwgaXRlbSwgZGV2aWNlX21hcCkKICAgICAgICAgICAgdGFza19saXN0LmFwcGVuZCh0YXNrKQogICAgICAgIGZvciBfIGluIGFzX2NvbXBsZXRlZCh0YXNrX2xpc3QpOgogICAgICAgICAgICBwYXNzCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICMgMTYwNzg3NTIwMCAyMDIwLTEyLTE0CiAgICAjIDE2MDY3NTIwMDAgMjAyMC0xMi0wMQogICAgIyAxNTc3ODA4MDAwIDIwMjAtMDEtMDEKICAgIHN0YXJ0ID0gZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkKICAgIHplcm9fbGlzdCA9IGdldF96ZXJvX2RhdGEoMTYwNjc1MjAwMCkKICAgIHVwZGF0ZV96ZXJvX2xpc3QoemVyb19saXN0KQogICAgdGltZSA9IGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLXN0YXJ0CiAgICBwcmludCgidXNlIHRpbWUiLCB0aW1lLCAncycpCjx8ZmltX3N1ZmZpeHw+CgoKZGVmIGdldF96ZXJvX2RhdGEoc3RhcnRfdGltZSk6CiAgICBkYiA9IGdldF9jb25uZWN0aW9uKCIiLCAzMzA2LAo8fGZpbV9lbmR8Pg=="]
["882d2747ca90db39934fb9f2a987a39334ed8496-1","882d2747ca90db39934fb9f2a987a39334ed8496","PHxmaW1fcHJlZml4fD4KIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxIEplZmYgRXBsZXIsIHdyaXR0ZW4gZm9yIEFkYWZydWl0IEluZHVzdHJpZXMKIwojIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKCmltcG9ydCBycDJwaW8KaW1wb3J0IGFkYWZydWl0X3Bpb2FzbQoKY29kZSA9IGFkYWZydWl0X3Bpb2FzbS5hc3NlbWJsZSgKICAgICIiIgoucHJvZ3JhbSB1YXJ0X3J4X21pbmkKCjsgTWluaW11bSB2aWFibGUgOG4xIFVBUlQgcmVjZWl2ZXIuIFdhaXQgZm9yIHRoZSBzdGFydCBiaXQsIHRoZW4gc2FtcGxlIDggYml0cwo7IHdpdGggdGhlIGNvcnJlY3QgdGltaW5nLgo7IElOIHBpbiAwIGlzIG1hcHBlZCB0byB0aGUgR1BJTyB1c2VkIGFzIFVBUlQgUlguCjsgQXV0b3B1c2ggbXVzdCBiZSBlbmFibGVkLCB3aXRoIGEgdGhyZXNob2xkIG9mIDguCgogICAgd2FpdCAwIHBpbiAwICAgICAgICA7IFdhaXQgZm9yIHN0YXJ0IGJpdAo8fGZpbV9ob2xlfD4KYml0bG9vcDogICAgICAgICAgICAgICAgOyBMb29wIDggdGltZXMKICAgIGluIHBpbnMsIDEgICAgICAgICAgOyBTYW1wbGUgZGF0YQogICAgam1wIHgtLSBiaXRsb29wIFs2XSA7IEVhY2ggaXRlcmF0aW9uIGlzIDggY3ljbGVzCgoiIiIKKQoKCmNsYXNzIFJYVUFSVDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwaW4sIGJhdWRyYXRlPTk2MDApOgogICAgICAgIHNlbGYucGlvID0gcnAycGlvLlN0YXRlTWFjaGluZSgKICAgICAgICAgICAgY29kZSwKICAgICAgICAgICAgZmlyc3RfaW5fcGluPXBpbiwKICAgICAgICAgICAgZnJlcXVlbmN5PTggKiBiYXVkcmF0ZSwKICAgICAgICAgICAgYXV0b19wdXNoPVRydWUsCiAgICAgICAgICAgIHB1c2hfdGhyZXNob2xkPTgsCiAgICAgICAgKQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIHRpbWVvdXQoc2VsZik6CiAgICAgICAgcmV0dXJuIDAKCiAgICBAcHJvcGVydHkKICAgIGRlZiBiYXVkcmF0ZShzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5waW8uZnJlcXVlbmN5IC8vIDgKCiAgICBAYmF1ZHJhdGUuc2V0dGVyCiAgICBkZWYgYmF1ZHJhdGUoc2VsZiwgZnJlcXVlbmN5KToKICAgICAgICBzZWxmLnBpby5mcmVxdWVuY3kgPSBmcmVxZW5jeSAqIDgKCiAgICBAcHJvcGVydHkKICAgIGRlZiBpbl93YWl0aW5nKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnBpby5pbl93YWl0aW5nCgogICAgZGVmIHJlYWQoc2VsZiwgbik6CiAgICAgICAgYiA9IGJ5dGVhcnJheShuKQogICAgICAgIG4gPSBzZWxmLnBpby5yZWFkaW50byhiKQogICAgICAgIHJldHVybiBiWzpuXQoKICAgIGRlZiByZWFkaW50byhzZWxmLCBidWYpOgogICAgICAgIHJldHVybiBzZWxmLnBpby5yZWFkaW50byhuKQo8fGZpbV9zdWZmaXh8PgogICAgc2V0IHgsIDcgWzEwXSAgICAgICA7IFByZWxvYWQgYml0IGNvdW50ZXIsIGRlbGF5IHVudGlsIGV5ZSBvZiBmaXJzdCBkYXRhIGJpdAo8fGZpbV9lbmR8Pg=="]
["11c86126c833a56d298e6a47d6a559438a3d3bb5-1","11c86126c833a56d298e6a47d6a559438a3d3bb5","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgcmUKaW1wb3J0IG51bXB5CmZyb20gbWF0cGxvdGxpYiBpbXBvcnQgcHlwbG90CgojIENob29zZSBjb3JyZWN0IGh0bWwgcGFyc2VyIGxpYnJhcnkKdmVyc2lvbiA9IHN5cy52ZXJzaW9uX2luZm8ubWFqb3IKaWYgdmVyc2lvbiA9PSAyOgoJZnJvbSBIVE1MUGFyc2VyIGltcG9ydCBIVE1MUGFyc2VyCmVsc2U6Cglmcm9tIGh0bWwucGFyc2VyIGltcG9ydCBIVE1MUGFyc2VyCgojIyMgSW5pdGlhbGl6ZSBEYXRhIFN0cnVjdHVyZXMgIyMjCgojIFNldCBNb250aCBEYXRhIEFycmF5IGFuZCBOYW1lIHZhbHVlcy4KbW9udGggPSBbMF0gKiAxMgptb250aF9uYW1lcyA9IFsKCSJKYW4iLCAKCSJGZWIiLCAKCSJNYXJjaCIsCgkiQXByaWwiLCAKCSJNYXkiLCAKCSJKdW5lIiwgCgkiSnVseSIsIAoJIkF1ZyIsIAoJIlNlcCIsIAoJIk9jdCIsIAoJIk5vdiIsIAoJIkRlYyIKXQoKIyBTZXQgRGF5IERhdGEgQXJyYXkgYW5kIE5hbWUgdmFsdWVzLgpkYXkgPSBbMF0gKiA3CmRheV9uYW1lcyA9IFsKCSJNb25kYXkiLCAKCSJUdWVzZGF5IiwgCgkiV2VkbmVzZGF5IiwgCgkiVGh1cnNkYXkiLCAKCSJGcmlkYXkiLCAKCSJTYXR1cmRheSIsIAoJIlN1bmRheSIKXQoKIyBTZXQgVGltZSBEYXRhIEFycmF5IGFuZCBOYW1lIHZhbHVlcy4KdGltZSA9IFswXSAqIDI0CnRpbWVfbmFtZXMgPSBbXQpmb3IgbmFtZSBpbiByYW5nZSgyNCk6CglpZiBuYW1lIDwgMTA6CgkJdGltZV9uYW1lcy5hcHBlbmQoIjAiICsgc3RyKG5hbWUpICsgIjoiKQoJZWxzZToKPHxmaW1faG9sZXw+CmZvciBpIGluIHJhbmdlKGxlbih0aW1lX25hbWVzKSk6Cgl0aW1lX25hbWVzW2ldID0gdGltZV9uYW1lc1tpXVs6LTFdCgoKIyMjIFNldHVwIGFuZCBBY3RpdmF0ZSBQYXJzZXIvRGF0YSBHYXRoZXJlciAjIyMKCiMgUGFyc2UgRGF0YSB3aGlsZSBhZGRpbmcgdG8gZGF0YSBhcnJheXMgd2l0aCByZWdleC4KY2xhc3MgTWVzc2FnZXNQYXJzZXIoSFRNTFBhcnNlcik6CglkZWYgaGFuZGxlX2RhdGEoc2VsZiwgZGF0YSk6CgkJbWF0Y2ggPSByZS5zZWFyY2goCgkJCSIoU2F0dXJkYXl8U3VuZGF5fE1vbmRheXxUdWVzZGF5fFdlZG5lc2RheXxUaHVyc2RheXxGcmlkYXkpKCwpICIgXAoJCQkiWzAtOV17Mn0gKEphbnVhcnl8RmVicnVhcnl8TWFyY2h8QXByaWx8TWF5fEp1bmV8IiBcCgkJCSJKdWx5fEF1Z3VzdHxTZXB0ZW1iZXJ8T2N0b2JlcnxOb3ZlbWJlcnxEZWNlbWJlcikgIiBcCgkJCSJbMC05XXs0fSBhdCBbMC05XXsyfTpbMC05XXsyfSIsIGRhdGEpCgkJaWYgbWF0Y2g6CgkJCWZvciBpIGluIHJhbmdlKDEyKToKCQkJCWlmIHJlLnNlYXJjaChtb250aF9uYW1lc1tpXSwgbWF0Y2guZ3JvdXAoMCkpOgoJCQkJCW1vbnRoW2ldID0gbW9udGhbaV0gKyAxCgkJCWZvciBpIGluIHJhbmdlKDcpOgoJCQkJaWYgcmUuc2VhcmNoKGRheV9uYW1lc1tpXSwgbWF0Y2guZ3JvdXAoMCkpOgoJCQkJCWRheVtpXSA9IGRheVtpXSArIDEKCQkJZm9yIGkgaW4gcmFuZ2UoMjQpOgoJCQkJaWYgcmUuc2VhcmNoKHRpbWVfbmFtZXNbaV0sIG1hdGNoLmdyb3VwKDApKToKCQkJCQl0aW1lW2ldID0gdGltZVtpXSArIDEKCiMgQWN0aXZhdGUgUGFyc2VyIG9uIHRoZSBtZXNzZW5nZXIgSFRNTCBkYXRhIGZpbGUuCmZpbGUgPSBvcGVuKCJodG1sL21lc3NhZ2VzLmh0bSIsICdyJykKbWVzc2FnZXMgPSBmaWxlLnJlYWRsaW5lcygpCnBhcnNlciA9IE1lc3NhZ2VzUGFyc2VyKCkKZm9yIGkgaW4gcmFuZ2UobGVuKG1lc3NhZ2VzKSk6CglwYXJzZXIuZmVlZChtZXNzYWdlc1tpXSkKCgojIyMgQ3JlYXRlIEdyYXBocyAjIyMKCiMgQmFyIEdyYXBoIGNyZWF0ZXIgZnVuY3Rpb24uCmRlZiBtZXNzYWdlcyhuX2dyb3VwcywgYmFyX3dpZHRoLCB4X2xpbSwgaXRlbXMsIG5hbWVzLCAKCQl4X2xhYmVsLCB5X2xhYmVsLCB0aXRsZSwgZmlsZV9uYW1lKToKCgkjIFBsb3QgR3JhcGguCglmaWcsIGF4ID0gcHlwbG90LnN1YnBsb3RzKCkKCWluZGV4ID0gbnVtcHkuYXJhbmdlKG5fZ3JvdXBzKQoJcmVjdHMxID0gcHlwbG90LmJhcihpbmRleCwgaXRlbXMsIGJhcl93aWR0aCkKCQoJIyBBZGQgdGV4dHMgYW5kIGxhYmxlcy4KCXB5cGxvdC54bGFiZWwoeF9sYWJlbCkKCXB5cGxvdC55bGFiZWwoeV9sYWJlbCkKCXB5cGxvdC50aXRsZSh0aXRsZSkKCgkjIFNoYXBlIEdyYXBoLgoJcHlwbG90Lnh0aWNrcyhpbmRleCArIGJhcl93aWR0aC8yLCBuYW1lcykKCXB5cGxvdC54bGltKFttaW4oaW5kZXgpIC0geF9saW0sIG1heChpbmRleCkgKyB4X2xpbV0pCglweXBsb3QudGlnaHRfbGF5b3V0KCkKCgkjIEV4cG9ydCBHcmFwaC4KCXB5cGxvdC5zYXZlZmlnKGZpbGVfbmFtZSkKCgojIENyZWF0ZSBCYXIgR3JhcGggZm9yIG1lc3NlbmdlciBtb250aCBmcmVxdWVuY3kuCm1lc3NhZ2VzKDEyLCAwLjMsIDEsIG1vbnRoLCBtb250aF9uYW1lcywgIk1vbnRoIG9mIE1lc3NhZ2UgU2VudCIsIAoJIk51bWJlciBvZiBNZXNzYWdlcyBTZW50IiwgIkFtb3VudCBvZiBNZXNzYWdlcyBTZW50IG9uIHRoYXQgTW9udGgiLCAKCSJtZXNzYWdlc19tb250aC5wbmciKQoKIyBDcmVhdGUgQmFyIEdyYXBoIGZvciBtZXNzZW5nZXIgZGFnIGZyZXF1ZW5jeS4KbWVzc2FnZXMoNywgMC4zNSwgMC41LCBkYXksIGRheV9uYW1lcywgIkRheSBvZiBNZXNzYWdlIFNlbnQiLCAKCSJOdW1iZXIgb2YgTWVzc2FnZXMgU2VudCIsICJBbW91bnQgb2YgTWVzc2FnZXMgU2VudCBvbiBEYXlzIG9mIHRoZSBXZWVrIiwgCgkibWVzc2FnZXNfZGF5cy5wbmciKQoKIyBDcmVhdGUgQmFyIEdyYXBoIGZvciBtZXNzZW5nZXIgdGltZSBmcmVxdWVuY3kuCm1lc3NhZ2VzKDI0LCAwLjIwLCAwLjUsIHRpbWUsIHRpbWVfbmFtZXMsICJUaW1lIG9mIG1lc3NhZ2Ugc2VudCIsIAoJIk51bWJlciBvZiBtZXNzYWdlcyBzZW50IiwgIkFtb3VudCBvZiBNZXNzYWdlcyBTZW50IG9uIFRpbWUgb2YgdGhlIERheSIsIAoJIm1lc3NhZ2VzX3RpbWVzLnBuZyIpCgo8fGZpbV9zdWZmaXh8PgoJCXRpbWVfbmFtZXMuYXBwZW5kKHN0cihuYW1lKSArICI6IikKPHxmaW1fZW5kfD4="]
["a303441333ce8836f4babb92be4bb6e24f96bb5f-1","a303441333ce8836f4babb92be4bb6e24f96bb5f",{"$cut":{"chars":36856,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBkYgoKaW1wb3J0IGNvcHkKaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQgbXVsdGlwcm9jZXNzaW5nLnBvb2wKCmltcG9ydCBudW1weQppbXBvcnQgc2NpcHkubGluYWxnCmltcG9ydCBzY2lweS5vcHRpbWl6ZQpmcm9tIG51bXB5IGltcG9ydCBmbG9hdDY0IGFzIHByZWNpc2lvbgoKaW1wb3J0IGFwcHJveGltYXRvcnMuYmFzaXNfZnVuY3Rpb25zCgpkZWYgbm9ybV9mdW5jdGlvbmFsKFgpOgogICAgcmV0dXJuIG51bXB5LmxpbmFsZy5ub3JtKFgsIGF4aXM9MSkKCmRlZiBncmFkX25vcm1fZnVuY3Rpb25hbChYKToKICAgIHJldHVybiAoWC5UICogbm9ybV9mdW5jdGlvbmFsKFgpKS5UCgpkZWYgX2V2YWx1YXRlX2Jhc2VzKGJhc2VzLCB4KToKICAgICIiIkV2YWx1YXRlIGJhc2lzIGIgYXQgcG9pbnQgeAogICAgIiIiCiAgICByZXR1cm4gYmFzZXMudmFsdWUoeCkKICAgIEMgPSBudW1weS5zdGFjayhbYi52YWx1ZSh4KSBmb3IgYiBpbiBiYXNlc10pCiAgICByZXR1cm4gQy5UCgpjbGFzcyBEaXJlY3RQcm9kdWN0QmFzaXNBcHByb3hpbWF0b3Iob2JqZWN0KToKICAgICIiIgogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgYmFzZXMsIHcwPU5vbmUsIGFscGhhPTAuMDAxKToKICAgICAgICAiIiIKCiAgICAgICAgQXJndW1lbnRzOgogICAgICAgICAgICBiYXNlczogaXRlcmFibGUgb2YgKGFscmVhZHkgY29uc3RydWN0ZWQpIGJhc2lzIGZ1bmN0aW9ucyB0byB1c2UKICAgICAgICAgICAgICAgIHRoZXJlIHNob3VsZCBiZSBvbmUgZW50cnkgcGVyIGRpbWVuc2lvbnMgb2YgdGhlIGRvbWFpbiBvZiB0aGUKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRvIGJlIG1vZGVsZWQgZWFjaCBlbnRyeSBzaG91bGQgYmUgYW4gaXRlcmFibGUgb2YgYmFzZXMKICAgICAgICAgICAgdzA6IG9wdGlvbmFsLCB3ZWlnaHQgdmVjdG9yIHdpdGggZGltZW5zaW9uIChwcm9kKG5faSksKSB3aGVyZSBuX2kKICAgICAgICAgICAgICAgIGFyZSB0aGUgbnVtYmVyIG9mIGJhc2lzIGZ1bmN0aW9ucyBpbiBlYWNoIGRpbWVuc2lvbiBvZiB0aGUKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRvbWFpbi4gZGVmYXVsdHMgdG8gemVyb3MKICAgICAgICAgICAgYWxwaGE6IG9wdGlvbmFsLCBsZWFybmluZyByYXRlIHBhcmFtZXRlciwgZGVmYXVsdHMgMC4wMDEKCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgY2xhc3MgaW5zdGFuY2UKICAgICAgICAiIiIKICAgICAgICBzZWxmLl9iYXNlcyA9IGJhc2VzCiAgICAgICAgc2VsZi5fTiA9IG51bXB5LnByb2QoW2xlbihiX2kpIGZvciBiX2kgaW4gc2VsZi5fYmFzZXNdKQogICAgICAgIGlmIHcwIGlzIE5vbmU6CiAgICAgICAgICAgIHcwID0gbnVtcHkuemVyb3MoKGxlbihiYXNlcyksKSkKICAgICAgICBzZWxmLl9hbHBoYSA9IGFscGhhCiAgICAgICAgaWYgdzAgaXMgTm9uZToKICAgICAgICAgICAgc2VsZi5fdyA9IG51bXB5Lnplcm9zKChzZWxmLl9OLCBzZWxmLl9OKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLl93ID0gdzAKCiAgICBkZWYgQyhzZWxmLCB4LCBwYXJhbGxlbD1Ob25lKToKICAgICAgICAiIiJDb21wdXRlIHRoZSBvYnNlcnZhdGlvbiBtYXRyaXgKCiAgICAgICAgQXJndW1lbnRzOgogICAgICAgICAgICB4OiBwb2ludCBvZiBvYnNlcnZhdGlvbgogICAgICAgICAgICBwYXJhbGxlbDogb3B0aW9uYWwsIGNvbXB1dGUgQyB3aXRoIHBhcmFsbGVsIG9wZXJhdGlvbnMKCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgbm8gcmV0dXJucwogICAgICAgICIiIgogICAgICAgIGlmIHBhcmFsbGVsIGlzIE5vbmUgYW5kIHguc2hhcGVbMF0gPiA1MDoKICAgICAgICAgICAgcGFyYWxsZWwgPSBUcnVlCiAgICAgICAgaWYgcGFyYWxsZWw6CiAgICAgICAgICAgIHJldHVybiBzZWxmLnBhckMoeCkuVAoKPHxmaW1faG9sZXw+CiAgICAgICAgcmV0dXJuIEMuVAoKICAgIGRlZiBwYXJDKHNlbGYsIHgpOgogICAgICAgICIiIlRoaXMgaXMgYSBwYXJhbGxlbGl6ZWQgdmVyc2lvbiBvZiB0aGUgY2FsY3VsYXRpb24gZm9yIHRoZSBDIG1hdHJpeCIiIgogICAgICAgIEMgPSAxLjAKICAgICAgICBmb3IgYmFzZXMgaW4gc2VsZi5fYmFzZXM6CiAgICAgICAgICAgIHdpdGggbXVsdGlwcm9jZXNzaW5nLnBvb2wuUG9vbCgpIGFzIHBvb2w6CiAgICAgICAgICAgICAgICBiID0gc2VsZi5fYmFzZXMKICAgICAgICAgICAgICAgIG5leHRfQyA9IGxpc3QocG9vbC5zdGFybWFwKAogICAgICAgICAgICAgICAgICAgIF9ldmFsdWF0ZV9iYXNlcywKICAgICAgICAgICAgICAgICAgICBpdGVydG9vbHMuemlwX2xvbmdlc3QoYiwgW10sIGZpbGx2YWx1ZT14KSkpCiAgICAgICAgICAgIEMgPSBudW1weS5rcm9uKEMsIG51bXB5LmFycmF5KG5leHRfQywgZHR5cGU9cHJlY2lzaW9uKSkKICAgICAgICByZXR1cm4gQwoKICAgIGRlZiB2YWx1ZShzZWxmLCB4KToKICAgICAgICAiIiJHZXQgdGhlIHZhbHVlIG9mIHRoZSBiYXNpcyBmaWVsZCBhdCBwb2ludCBYCgogICAgICAgIEFyZ3VtZW50czoKICAgICAgICAgICAgeDogdmVjdG9yIHNwZWNpZnlpbmcgcG9pbnQgdG8gZXZhbHVhdGUgdGhlIGJhc2lzIGF0LiAobSxuKSBhcnJheQogICAgICAgICAgICAgICAgd2hlcmUgbSBpcyB0aGUgbnVtYmVyIG9mIHZlY3RvcnMgdG8gZXZhbHVhdGUgc2ltdWx0YW5lb3VzbHkgYW5kCiAgICAgICAgICAgICAgICBuIGlzIHRoZSBkaW1lbnNpb24gb2YgdGhlIHZlY3RvcgoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBmOiBiYXNpcyBmdW5jdGlvbiB2YWx1ZSBhdCB4LCBzdW1tZWQgZnJvbSBhbGwgYmFzaXMgZnVuY3Rpb25zCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIG51bXB5LmRvdChDLCBzZWxmLl93KQoKICAgIGRlZiBncmFkaWVudF94KHNlbGYsIHgpOgogICAgICAgICIiIkdldCB0aGUgZ3JhZGllbnQgb2YgdGhlIGJhc2lzIGZpZWxkIGF0IHBvaW50IHggd2l0aCByZXNwZWN0IHRvIHgKCiAgICAgICAgQXJndW1lbnRzOgogICAgICAgICAgICB4OiB2ZWN0b3Igc3BlY2lmeWluZyBwb2ludCB0byBldmFsdWF0ZSB0aGUgYmFzaXMgYXQuIChtLG4pIGFycmF5"}}]
["9de33f5bd3513ef2c79195af0d8303507498cce1-1","9de33f5bd3513ef2c79195af0d8303507498cce1","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCkNyZWF0ZWQgb24gRnJpIEp1bCAzMCAwOToxMToxOSAyMDIxCgpAYXV0aG9yOiB1c2VyMjQKIiIiCgppbXBvcnQgbXlzcWwuY29ubmVjdG9yIGFzIG15ZGIKCmNvbm4gPSBteWRiLmNvbm5lY3QoCiAgICBob3N0PSJsb2NhbGhvc3QiLAogICAgcG9ydD0iMzMwNiIsCiAgICB1c2VyPSJyaG9lbiIsCiAgICBwYXNzd29yZD0icGFzcyIsCiAgICBkYXRhYmFzZT0iYm9vayIKKQoKI+OAgOOCq+ODvOOCveODq+OBruS9nOaIkApjdXIgPSBjb25uLmN1cnNvcigpCgojIOeZu+mMsuOBmeOCi+aDheWgseOCkua6luWCmQo8fGZpbV9ob2xlfD4KY3VyLmV4ZWN1dGUoaW5zZXJ0LCBkYXRhKQoKCiMg5Lu25pWw44KS5Y+W5b6X44GZ44KLCnByaW50KGN1ci5yb3djb3VudCwgIuS7tuOAgeWPluW+l+OBl+OBvuOBl+OBnyIpCgojIOabtOaWsOOCkueiuuWumuOBmeOCiwpjb25uLmNvbW1pdCgpCgojIOOCq+ODvOOCveODq+OBqOOCs+ODjeOCr+OCt+ODp+ODs+OCkuWIh+aWrQpjdXIuY2xvc2UoKQpjb25uLmNsb3NlKCkKPHxmaW1fc3VmZml4fD4KZGF0YSA9ICgiWTAwMDIiLCAi5bGx55SwIOWkqumDjiIsICLjg6Tjg57jg4Ag44K/44Ot44KmIikgIyBqYXAuIHNwYWNlIGluc2VydCB3ZWlyZCBjaGFyIFx1MzAwMAppbnNlcnQgPSAiaW5zZXJ0IGludG8gYXV0aG9yIHZhbHVlcyglcywgJXMsICVzKSIKCiMgU1FMIOaWh+OBruWun+ihjAo8fGZpbV9lbmR8Pg=="]
["09b9d41105b0dc336f94a145a5e5e3860bafacfb-3","09b9d41105b0dc336f94a145a5e5e3860bafacfb","PHxmaW1fcHJlZml4fD4KIiIiCmVudHJhZGEKY2FudGlkYWQgZGUgcGllemFzPT5pbnQ9PmNhbnBpCmNvc3RvIHJlZmFjY2lvbmVzPT5pbnQ9PmNvcmUKc2FsaWRhCmNvc3RvPT5pbnQ9PmNvcwppbnZlcnNpb249PmludD0+aW4KY3JlZGl0bz0+aW50PT5jcmUKaW50ZXJlcz0+aW50PT5pbnQKCiIiIgpjb3JlPWludChpbnB1dCgiaW5ncmVzZSBjb3N0bzogIikpCmNhbnBpPWludChpbnB1dCgiaW5ncmVzZSBjYW50aWRhZCBkZSBwaWV6YXM6ICIpKQp0b3RhbD0gY2FucGkgKiBjb3JlCmlmIHRvdGFsPjUwMDAwMDA6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGludmVyc2lvbj0gdG90YWwgKiAuNTUKICAgIGJhbmNvPSB0b3RhbCAqIC4zMAogICAgY3JlZGl0bz0gdG90YWwgKi4xNQo8fGZpbV9lbmR8Pg=="]
["9d8c8d183eb2da13c2bee4742e36d86d4bff06ac-2","9d8c8d183eb2da13c2bee4742e36d86d4bff06ac","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0b3JjaAppbXBvcnQgZGdsCgppbXBvcnQgcmFuZG9tCmltcG9ydCBpdGVydG9vbHMKZnJvbSBzY2lweS5zcGFyc2UgaW1wb3J0IGNvb19tYXRyaXgKCnRvcmNoLnNldF9wcmludG9wdGlvbnMocHJvZmlsZT0iZnVsbCIpCgoKZGVmIGdldF9hZGpfYW5kX2RlZ3JlZXMobnVtX25vZGVzLCBudW1fcmVscywgdHJpcGxldHMpOgogICAgIiIiIEdldCBhZGphY2VuY3kgbGlzdCBhbmQgZGVncmVlcyBvZiB0aGUgZ3JhcGgKICAgICIiIgogICAKICAgIGNvbCA9IFtdCiAgICByb3cgPSBbXQogICAgcmVsID0gW10KICAgIGFkal9saXN0ID0gW1tdIGZvciBfIGluIHJhbmdlKG51bV9ub2RlcyldCiAgICBmb3IgaSwgdHJpcGxldCBpbiBlbnVtZXJhdGUodHJpcGxldHMpOgogICAgICAgIGFkal9saXN0W3RyaXBsZXRbMF1dLmFwcGVuZChbaSwgdHJpcGxldFsyXV0pCiAgICAgICAgYWRqX2xpc3RbdHJpcGxldFsyXV0uYXBwZW5kKFtpLCB0cmlwbGV0WzBdXSkKICAgICAgICByb3cuYXBwZW5kKHRyaXBsZXRbMF0pCiAgICAgICAgY29sLmFwcGVuZCh0cmlwbGV0WzJdKQogICAgICAgIHJlbC5hcHBlbmQodHJpcGxldFsxXSkKICAgICAgICByb3cuYXBwZW5kKHRyaXBsZXRbMl0pCiAgICAgICAgY29sLmFwcGVuZCh0cmlwbGV0WzBdKQogICAgICAgIHJlbC5hcHBlbmQodHJpcGxldFsxXSArIG51bV9yZWxzKQoKICAgIHNwYXJzZV9hZGpfbWF0cml4ID0gY29vX21hdHJpeCgobnAub25lcyhsZW4odHJpcGxldHMpKjIpLCAocm93LCBjb2wpKSwgc2hhcGU9KG51bV9ub2RlcywgbnVtX25vZGVzKSkKICAgCiAgICBkZWdyZWVzID0gbnAuYXJyYXkoW2xlbihhKSBmb3IgYSBpbiBhZGpfbGlzdF0pCiAgICBhZGpfbGlzdCA9IFtucC5hcnJheShhKSBmb3IgYSBpbiBhZGpfbGlzdF0KICAgIHJldHVybiBhZGpfbGlzdCwgZGVncmVlcywgc3BhcnNlX2Fkal9tYXRyaXgsIHJlbAoKCmRlZiBzYW1wbGVfZWRnZV9uZWlnaGJvcmhvb2QoYWRqX2xpc3QsIGRlZ3JlZXMsIG5fdHJpcGxldHMsIHNhbXBsZV9zaXplLCBzYW1wbGU9VHJ1ZSwgc2FtcGxpbmdfZWRnZV9pZHM9Tm9uZSk6CiAgICAiIiIgRWRnZSBuZWlnaGJvcmhvb2Qgc2FtcGxpbmcgdG8gcmVkdWNlIHRyYWluaW5nIGdyYXBoIHNpemUKICAgICIiIgoKICAgIGlmIHNhbXBsZToKICAgICAgICBlZGdlcyA9IG5wLnplcm9zKChzYW1wbGVfc2l6ZSksIGR0eXBlPW5wLmludDMyKQoKICAgICAgICAjIGluaXRpYWxpemUKICAgICAgICBzYW1wbGVfY291bnRzID0gbnAuYXJyYXkoW2QgZm9yIGQgaW4gZGVncmVlc10pCiAgICAgICAgcGlja2VkID0gbnAuYXJyYXkoW0ZhbHNlIGZvciBfIGluIHJhbmdlKG5fdHJpcGxldHMpXSkKICAgICAgICBzZWVuID0gbnAuYXJyYXkoW0ZhbHNlIGZvciBfIGluIGRlZ3JlZXNdKQogICAgICAgIGkgPSAwCgogICAgICAgIHdoaWxlIGkgIT0gc2FtcGxlX3NpemU6CiAgICAgICAgICAgIHdlaWdodHMgPSBzYW1wbGVfY291bnRzICogc2VlbgoKICAgICAgICAgICAgaWYgbnAuc3VtKHdlaWdodHMpID09IDA6CiAgICAgICAgICAgICAgICB3ZWlnaHRzID0gbnAub25lc19saWtlKHdlaWdodHMpCiAgICAgICAgICAgICAgICB3ZWlnaHRzW25wLndoZXJlKHNhbXBsZV9jb3VudHMgPT0gMCldID0gMAoKICAgICAgICAgICAgcHJvYmFiaWxpdGllcyA9IHdlaWdodHMgLyBucC5zdW0od2VpZ2h0cykKICAgICAgICAgICAgY2hvc2VuX3ZlcnRleCA9IG5wLnJhbmRvbS5jaG9pY2UobnAuYXJhbmdlKGRlZ3JlZXMuc2hhcGVbMF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwPXByb2JhYmlsaXRpZXMpCiAgICAgICAgICAgIGNob3Nlbl9hZGpfbGlzdCA9IGFkal9saXN0W2Nob3Nlbl92ZXJ0ZXhdCiAgICAgICAgICAgIHNlZW5bY2hvc2VuX3ZlcnRleF0gPSBUcnVlCgogICAgICAgICAgICBjaG9zZW5fZWRnZSA9IG5wLnJhbmRvbS5jaG9pY2UobnAuYXJhbmdlKGNob3Nlbl9hZGpfbGlzdC5zaGFwZVswXSkpCiAgICAgICAgICAgIGNob3Nlbl9lZGdlID0gY2hvc2VuX2Fkal9saXN0W2Nob3Nlbl9lZGdlXQogICAgICAgICAgICBlZGdlX251bWJlciA9IGNob3Nlbl9lZGdlWzBdCgogICAgICAgICAgICB3aGlsZSBwaWNrZWRbZWRnZV9udW1iZXJdOgogICAgICAgICAgICAgICAgY2hvc2VuX2VkZ2UgPSBucC5yYW5kb20uY2hvaWNlKG5wLmFyYW5nZShjaG9zZW5fYWRqX2xpc3Quc2hhcGVbMF0pKQogICAgICAgICAgICAgICAgY2hvc2VuX2VkZ2UgPSBjaG9zZW5fYWRqX2xpc3RbY2hvc2VuX2VkZ2VdCiAgICAgICAgICAgICAgICBlZGdlX251bWJlciA9IGNob3Nlbl9lZGdlWzBdCjx8ZmltX2hvbGV8PgogICAgICAgICAgICBzYW1wbGVfY291bnRzW2Nob3Nlbl92ZXJ0ZXhdIC09IDEKICAgICAgICAgICAgc2FtcGxlX2NvdW50c1tvdGhlcl92ZXJ0ZXhdIC09IDEKICAgICAgICAgICAgc2VlbltvdGhlcl92ZXJ0ZXhdID0gVHJ1ZQogICAgICAgICAgICBpICs9IDEKCiAgICBlbHNlOgogICAgICAgIGlmIHNhbXBsaW5nX2VkZ2VfaWRzIGlzIE5vbmU6CiAgICAgICAgICAgIHJhbmRvbV9lZGdlcyA9IHJhbmRvbS5zYW1wbGUocmFuZ2Uobl90cmlwbGV0cyksIHNhbXBsZV9zaXplKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJhbmRvbV9lZGdlcyA9IG5wLnJhbmRvbS5jaG9pY2Uoc2FtcGxpbmdfZWRnZV9pZHMsIHNhbXBsZV9zaXplLCByZXBsYWNlPUZhbHNlKQogICAgICAgIGVkZ2VzID0gbnAuYXJyYXkocmFuZG9tX2VkZ2VzKQoKICAgIHJldHVybiBlZGdlcwoKCmRlZiBnZW5lcmF0ZV9zYW1wbGVkX2dyYXBoX2FuZF9sYWJlbHModHJpcGxldHMsIHNhbXBsZV9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9yZWxzLCBhZGpfbGlzdCwgZGVncmVlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWdhdGl2ZV9yYXRlLCBzaW1fc2ltPUZhbHNlLCBhZGRfc2ltX3JlbGF0aW9ucz1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW1fdHJhaW5fZTFfdG9fbXVsdGlfZTI9Tm9uZSwgc2FtcGxpbmdfZWRnZV9pZHM9Tm9uZSk6CiAgICAiIiJHZXQgdHJhaW5pbmcgZ3JhcGggYW5kIHNpZ25hbHMKICAgIEZpcnN0IHBlcmZvcm0gZWRnZSBuZWlnaGJvcmhvb2Qgc2FtcGxpbmcgb24gZ3JhcGgsIHRoZW4gcGVyZm9ybSBuZWdhdGl2ZQogICAgc2FtcGxpbmcgdG8gZ2VuZXJhdGUgbmVnYXRpdmUgc2FtcGxlcwogICAgIiIiCgogICAgIyBwZXJmb3JtIGVkZ2UgbmVpZ2hib3Igc2FtcGxpbmcKICAgIGVkZ2VzID0gc2FtcGxlX2VkZ2VfbmVpZ2hib3Job29kKGFkal9saXN0LCBkZWdyZWVzLCBsZW4odHJpcGxldHMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX3NpemUsIHNhbXBsZT1GYWxzZSwgc2FtcGxpbmdfZWRnZV9pZHM9c2FtcGxpbmdfZWRnZV9pZHMpCiAgICBlZGdlcyA9IHRyaXBsZXRzW2VkZ2VzXQoKICAgICMgYWRkIHNpbSBlZGdlcwogICAgaWYgYWRkX3NpbV9yZWxhdGlvbnM6CiAgICAgICAgZWRnZXMgPSBkZW5zaWZ5X3N1YmdyYXBoKGVkZ2VzLCBudW1fcmVscywgc2ltX3RyYWluX2UxX3RvX211bHRpX2UyKQoKICAgICMgY29ubmVjdCBuZWlnaGJvcnMgb2Ygbm9kZXMgY29ubmVjdGVkIGJ5IHNpbSBlZGdlcyAobm90IHVzZWQpCiAgICBpZiBzaW1fc2ltOgogICAgICAgIGVkZ2VzID0gc2ltX3NpbV9jb25uZWN0KGVkZ2VzLCB0cmlwbGV0cywgbnVtX3JlbHMpCgogICAgc3JjLCByZWwsIGRzdCA9IGVkZ2VzLnRyYW5zcG9zZSgpCgogICAgIyByZWxhYmVsIG5vZGVzIHRvIGhhdmUgY29uc2VjdXRpdmUgbm9kZSBpZHMKIAogICAgIyB1bmlxX3YgOiBzb3J0ZWQgdW5pcXVlIG5vZGVzIGluIHN1YnNhbXBsZWQgZ3JhcGggKG9yaWdpbmFsIG5vZGUgaWRzKQogICAgdW5pcV92LCBlZGdlcyA9IG5wLnVuaXF1ZSgoc3JjLCBkc3QpLCByZXR1cm5faW52ZXJzZT1UcnVlKQogICAgIyBub2RlIGlkcyBub3cgbGllIGluIHJhbmdlKDAsIG51bWJlciBvZiB1bmlxdWUgbm9kZXMgaW4gc3Vic2FtcGxlZCBncmFwaCkKICAgIHNyYywgZHN0ID0gbnAucmVzaGFwZShlZGdlcywgKDIsIC0xKSkKICAgICMgcmVsYWJlbGVkX2VkZ2VzID0gbnAuc3RhY2soKHNyYywgcmVsLCBkc3QpKS50cmFuc3Bvc2UoKQoKICAgICMgQWRkIGludmVyc2UgZWRnZXMgdG8gdHJhaW5pbmcgc2FtcGxlcwogICAgc3JjLCBkc3QgPSBucC5jb25jYXRlbmF0ZSgoc3JjLCBkc3QpKSwgbnAuY29uY2F0ZW5hdGUoKGRzdCwgc3JjKSkKICAgIHJlbCA9IG5wLmNvbmNhdGVuYXRlKChyZWwsIHJlbCtudW1fcmVscykpCiAgICByZWxhYmVsZWRfZWRnZXMgPSBucC5zdGFjaygoc3JjLCByZWwsIGRzdCkpLnRyYW5zcG9zZSgpCgogICAgIyBuZWdhdGl2ZSBzYW1wbGluZwogICAgaWYgbmVnYXRpdmVfcmF0ZSA9PSAwOgogICAgICAgIHNhbXBsZXMgPSByZWxhYmVsZWRfZWRnZXMKICAgICAgICBsYWJlbHMgPSBucC5vbmVzKGxlbihzYW1wbGVzKSkKICAgIGVsc2U6CiAgICAgICAgc2FtcGxlcywgbGFiZWxzID0gbmVnYXRpdmVfc2FtcGxpbmcocmVsYWJlbGVkX2VkZ2VzLCBsZW4odW5pcV92KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWdhdGl2ZV9yYXRlKQoKICAgICMgYnVpbGQgREdMIGdyYXBoCiAgICBwcmludCgiIyBzYW1wbGVkIG5vZGVzOiB7fSIuZm9ybWF0KGxlbih1bmlxX3YpKSkKICAgIHByaW50KCIjIHNhbXBsZWQgZWRnZXM6IHt9Ii5mb3JtYXQobGVuKHNyYykpKQogICAgZywgcmVsLCBub3JtID0gYnVpbGRfZ3JhcGhfZnJvbV90cmlwbGV0cyhsZW4odW5pcV92KSwgbnVtX3JlbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzcmMsIHJlbCwgZHN0KSkKICAgIHJldHVybiBnLCB1bmlxX3YsIHJlbCwgbm9ybSwgc2FtcGxlcywgbGFiZWxzCgoKZGVmIGRlbnNpZnlfc3ViZ3JhcGgoZWRnZXMsIG51bV9yZWxzLCBzaW1fdHJhaW5fZTFfdG9fbXVsdGlfZTIpOgogICAgc2ltX2VkZ2VzID0gW10KICAgIG5vX3NpbV9pbmRpY2VzID0gbnAud2hlcmUoZWRnZXNbOiwgMV0gIT0gbnVtX3JlbHMtMSlbMF0KICAgIG5vX3NpbV9lZGdlcyA9IGVkZ2VzW25vX3NpbV9pbmRpY2VzXQogICAgdW5pcXVlLCBlZGdlcyA9IG5wLnVuaXF1ZSgobm9fc2ltX2VkZ2VzWzosIDBdLCBub19zaW1fZWRnZXNbOiwgMl0pLCByZXR1cm5faW52ZXJzZT1UcnVlKQogICAgZm9yIHBhaXIgaW4gaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyh1bmlxdWUsIDIpOgogICAgICAgIGlmIChwYWlyWzBdLCBudW1fcmVscy0xKSBpbiBzaW1fdHJhaW5fZTFfdG9fbXVsdGlfZTI6CiAgICAgICAgICAgIGlmIHBhaXJbMV0gaW4gc2ltX3RyYWluX2UxX3RvX211bHRpX2UyWyhwYWlyWzBdLCBudW1fcmVscy0xKV06CiAgICAgICAgICAgICAgICBzaW1fZWRnZXMuYXBwZW5kKG5wLmFycmF5KFtwYWlyWzBdLCBudW1fcmVscy0xLCBwYWlyWzFdXSkpCgogICAgcmV0dXJuIG5wLmNvbmNhdGVuYXRlKChub19zaW1fZWRnZXMsIG5wLmFycmF5KHNpbV9lZGdlcykpKQoKCmRlZiBjb21wX2RlZ19ub3JtKGcpOgogICAgaW5fZGVnID0gZy5pbl9kZWdyZWVzKHJhbmdlKGcubnVtYmVyX29mX25vZGVzKCkpKS5mbG9hdCgpLm51bXB5KCkKICAgIG5vcm0gPSAxLjAgLyBpbl9kZWcKICAgIG5vcm1bbnAuaXNpbmYobm9ybSldID0gMAogICAgcmV0dXJuIG5vcm0KCgpkZWYgYnVpbGRfZ3JhcGhfZnJvbV90cmlwbGV0cyhudW1fbm9kZXMsIG51bV9yZWxzLCB0cmlwbGV0cyk6CiAgICAiIiIKICAgICAgICBDcmVhdGUgYSBER0wgZ3JhcGguCiAgICAiIiIKCiAgICBnID0gZGdsLkRHTEdyYXBoKCkKICAgIGcuYWRkX25vZGVzKG51bV9ub2RlcykKICAgIHNyYywgcmVsLCBkc3QgPSB0cmlwbGV0cwogICAgZy5hZGRfZWRnZXMoc3JjLCBkc3QpCiAgICBub3JtID0gY29tcF9kZWdfbm9ybShnKQogICAgcHJpbnQoIiMgbm9kZXM6IHt9LCAjIGVkZ2VzOiB7fSIuZm9ybWF0KG51bV9ub2RlcywgbGVuKHNyYykpKQogICAgcmV0dXJuIGcsIHJlbCwgbm9ybQoKCmRlZiBidWlsZF90ZXN0X2dyYXBoKG51bV9ub2RlcywgbnVtX3JlbHMsIGVkZ2VzKToKICAgIHNyYywgcmVsLCBkc3QgPSBlZGdlcy50cmFuc3Bvc2UoKQogICAgcHJpbnQoIlRlc3QgZ3JhcGg6IikKICAgIHJldHVybiBidWlsZF9ncmFwaF9mcm9tX3RyaXBsZXRzKG51bV9ub2RlcywgbnVtX3JlbHMsIChzcmMsIHJlbCwgZHN0KSkKCgpkZWYgbmVnYXRpdmVfc2FtcGxpbmcocG9zX3NhbXBsZXMsIG51bV9lbnRpdHksIG5lZ2F0aXZlX3JhdGUpOgogICAgc2l6ZV9vZl9iYXRjaCA9IGxlbihwb3Nfc2FtcGxlcykKICAgIG51bV90b19nZW5lcmF0ZSA9IHNpemVfb2ZfYmF0Y2ggKiBuZWdhdGl2ZV9yYXRlCiAgICBuZWdfc2FtcGxlcyA9IG5wLnRpbGUocG9zX3NhbXBsZXMsIChuZWdhdGl2ZV9yYXRlLCAxKSkKICAgIGxhYmVscyA9IG5wLnplcm9zKHNpemVfb2ZfYmF0Y2ggKiAobmVnYXRpdmVfcmF0ZSArIDEpLCBkdHlwZT1ucC5mbG9hdDMyKQogICAgbGFiZWxzWzogc2l6ZV9vZl9iYXRjaF0gPSAxCiAgICAjIFRPRE86IHBpY2sgbmVnYXRpdmUgc2FtcGxlcyBvbmx5IHdpdGggc2FtZSByZWxhdGlvbnMKICAgIHZhbHVlcyA9IG5wLnJhbmRvbS5yYW5kaW50KG51bV9lbnRpdHksIHNpemU9bnVtX3RvX2dlbmVyYXRlKQogICAgI3ZhbHVlcyA9IG5wLnJhbmRvbS5jaG9pY2UodG90X2VudGl0aWVzLCBzaXplPW51bV90b19nZW5lcmF0ZSwgcmVwbGFjZT1GYWxzZSkKICAgIAogICAgY2hvaWNlcyA9IG5wLnJhbmRvbS51bmlmb3JtKHNpemU9bnVtX3RvX2dlbmVyYXRlKQogICAgc3ViaiA9IGNob2ljZXMgPiAwLjUKICAgIG9iaiA9IGNob2ljZXMgPD0gMC41CiAgICBuZWdfc2FtcGxlc1tzdWJqLCAwXSA9IHZhbHVlc1tzdWJqXQogICAgbmVnX3NhbXBsZXNbb2JqLCAyXSA9IHZhbHVlc1tvYmpdCgogICAgI2ZvciBpLCBzYW1wbGUgaW4gZW51bWVyYXRlKG5lZ19zYW1wbGVzKToKICAgICMgICAgaWYgYW55KG5wLmFycmF5X2VxdWFsKHNhbXBsZSwgeCkgZm9yIHggaW4gcG9zX3NhbXBsZXMpOgogICAgIyAgICAgICAgbGFiZWxzW2krc2l6ZV9vZl9iYXRjaF0gPSAxCgogICAgcmV0dXJuIG5wLmNvbmNhdGVuYXRlKChwb3Nfc2FtcGxlcywgbmVnX3NhbXBsZXMpKSwgbGFiZWxzCgoKZGVmIHNpbV9zaW1fY29ubmVjdChwb3Nfc2FtcGxlcywgYWxsX3RyaXBsZXRzLCBudW1fcmVscyk6CiAgICAiIiIKICAgIGNvbm5lY3QgbmVpZ2hib3JzIG9mIG5vZGUgd2l0aCBzaW0gZWRnZSB0eXBlIHRvIGEgY2FuZGlkYXRlIG5vZGUKICAgICIiIgoKICAgICMgZmlsdGVyIHNpbSByZWxhdGlvbnMKCiAgICBzYW1wbGVfaWRzID0gbnAud2hlcmUocG9zX3NhbXBsZXNbOiwgMV0gPT0gbnVtX3JlbHMtMSlbMF0KICAgIHNhbXBsZWRfc2ltX2VkZ2VzID0gcG9zX3NhbXBsZXNbc2FtcGxlX2lkc10KICAgIGFkZGxfc2FtcGxlcyA9IFtdCgogICAgZm9yIGVkZ2UgaW4gc2FtcGxlZF9zaW1fZWRnZXM6CiAgICAgICAgc3JjLCByZWwsIHRndCA9IGVkZ2UKICAgICAgICAjIGZpbmQgYWxsIG5laWdoYm9yaW5nIGVkZ2VzIG9mIHRndCBpbiBsYXJnZSBncmFwaAogICAgICAgIG5laWdoYm9ycyA9IG5wLndoZXJlKGFsbF90cmlwbGV0c1s6LCAwXSA9PSB0Z3QpWzBdCiAgICAgICAgbm9fc2ltX25laWdoYm9ycyA9IG5wLndoZXJlKGFsbF90cmlwbGV0c1tuZWlnaGJvcnNdWzosIDFdICE9IG51bV9yZWxzLTEpWzBdCiAgICAgICAgbmV3X2VkZ2VzID0gbnAuY29weShhbGxfdHJpcGxldHNbbmVpZ2hib3JzXVtub19zaW1fbmVpZ2hib3JzXSkKICAgICAgICBuZXdfZWRnZXNbOiwgMF0gPSBzcmMKICAgICAgICBhZGRsX3NhbXBsZXMuYXBwZW5kKG5ld19lZGdlcykKCiAgICBpZiBsZW4oYWRkbF9zYW1wbGVzKSA9PSAwOgogICAgICAgIHJldHVybiBwb3Nfc2FtcGxlcwogICAgZWxzZToKICAgICAgICBhZGRsX3NhbXBsZXMgPSBucC5jb25jYXRlbmF0ZShhZGRsX3NhbXBsZXMpCiAgICAgICAgZmluYWxfc2FtcGxlcyA9IG5wLmNvbmNhdGVuYXRlKChwb3Nfc2FtcGxlcywgYWRkbF9zYW1wbGVzKSkKICAgICAgICB1bmlxdWVfc2FtcGxlcyA9IG5wLnVuaXF1ZShmaW5hbF9zYW1wbGVzLCBheGlzPTApCiAgICAgICAgcHJpbnQoIkFkZGluZyAlZCBzaW0tc2ltIGVkZ2VzIiAlICh1bmlxdWVfc2FtcGxlcy5zaGFwZVswXSAtIHBvc19zYW1wbGVzLnNoYXBlWzBdKSkKICAgICAgICByZXR1cm4gdW5pcXVlX3NhbXBsZXMKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAKICAgICAgICAgICAgZWRnZXNbaV0gPSBlZGdlX251bWJlcgogICAgICAgICAgICBvdGhlcl92ZXJ0ZXggPSBjaG9zZW5fZWRnZVsxXQogICAgICAgICAgICBwaWNrZWRbZWRnZV9udW1iZXJdID0gVHJ1ZQo8fGZpbV9lbmR8Pg=="]
["9daec52af0f8fd01ea2414b95f494436c18ad1d1-2","9daec52af0f8fd01ea2414b95f494436c18ad1d1","PHxmaW1fcHJlZml4fD4KZnJvbSAuY29uc3RhbnRzIGltcG9ydCBCQVJPUVVFX1ZFUlNJT04KZnJvbSAuZGF0YXN0cnVjdHVyZXMgaW1wb3J0IHJlZ2lzdHJpZXMsIGNvdW50ZXJzCmZyb20gLnV0aWxzIGltcG9ydCBjb25maWdyZWFkZXIsIGltcG9ydGVyCmZyb20gLmVudGl0aWVzLmV2ZW50dHlwZSBpbXBvcnQgRXZlbnRUeXBlCmZyb20gLmVudGl0aWVzLmV2ZW50IGltcG9ydCBFdmVudApmcm9tIC5leGNlcHRpb25zLmV2ZW50dHlwZXMgaW1wb3J0IFVucmVnaXN0ZXJlZEV2ZW50VHlwZUVycm9yLCBcCiAgICBJbnZhbGlkRXZlbnRTY2hlbWFFcnJvcgpmcm9tIC5leGNlcHRpb25zLnRvcGljcyBpbXBvcnQgVW5yZWdpc3RlcmVkVG9waWNFcnJvcgoKCmNsYXNzIEJhcm9xdWU6CiAgICAiIiJUaGUgQmFyb3F1ZSBldmVudCBicm9rZXIgY2xhc3MuCgogICAgTm90ZToKICAgICAgICBXaGVuIG5vIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24KICAgICAgICBpcyBsb2FkZWQuCgogICAgQXJnczoKICAgICAgICBjb25maWdmaWxlIChzdHIsIG9wdGlvbmFsKTogUGF0aCB0byB0aGUgY29uZmlndXJhdGlvbiBZTUwgZmlsZS4KCiAgICBSYWlzZXM6CiAgICAgICAgOm9iajpgYmFyb3F1ZS5leGNlcHRpb25zLmNvbmZpZ3VyYXRpb24uQ29uZmlndXJhdGlvbk5vdEZvdW5kRXJyb3JgOiB3aGVuIHRoZSBzdXBwbGllZCBmaWxlcGF0aCBpcyBub3QgYSByZWd1bGFyIGZpbGUKICAgICAgICA6b2JqOmBiYXJvcXVlLmV4Y2VwdGlvbnMuY29uZmlndXJhdGlvbi5Db25maWd1cmF0aW9uUGFyc2VFcnJvcmA6IHdoZW4gdGhlIHN1cHBsaWVkIGZpbGUgY2Fubm90IGJlIHBhcnNlZAoKICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWdmaWxlPU5vbmUpOgogICAgICAgIHNlbGYuY29uZmlnID0gY29uZmlncmVhZGVyLnJlYWRfY29uZmlnX29yX2RlZmF1bHQoY29uZmlnZmlsZSkKICAgICAgICBzZWxmLnJlYWN0cmVnID0gcmVnaXN0cmllcy5SZWFjdG9yc1JlZ2lzdHJ5KCkKICAgICAgICBzZWxmLnRvcGljc3JlZyA9IHJlZ2lzdHJpZXMuVG9waWNzUmVnaXN0cnkoKQogICAgICAgIHNlbGYuZXZ0Y291bnRlciA9IGNvdW50ZXJzLkV2ZW50Q291bnRlcigpCiAgICAgICAgc2VsZi5fbG9hZF9wcmVyZWdpc3RlcmVkX2V2ZW50dHlwZXMoKQogICAgICAgIHNlbGYuX2xvYWRfcGVyc2lzdGVuY2VfYmFja2VuZCgpCgogICAgQHByb3BlcnR5CiAgICBkZWYgY29uZmlndXJhdGlvbihzZWxmKToKICAgICAgICAiIiI6b2JqOmBkaWN0YDogdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgYnJva2VyIGluc3RhbmNlIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuY29uZmlnCgogICAgQHByb3BlcnR5CiAgICBkZWYgdmVyc2lvbihzZWxmKToKICAgICAgICAiIiI6b2JqOmB0dXBsZWA6IHZlcnNpb24gdHVwbGUgZm9yIHRoaXMgYnJva2VyIGluc3RhbmNlIiIiCiAgICAgICAgcmV0dXJuIEJBUk9RVUVfVkVSU0lPTgoKICAgIEBwcm9wZXJ0eQogICAgZGVmIHJlYWN0b3JzKHNlbGYpOgogICAgICAgICIiIjpvYmo6YGJhcm9xdWUuZGF0YXN0cnVjdHVyZXMucmVnaXN0cmllcy5SZWFjdG9yUmVnaXN0cnlgOgogICAgICAgIHJlZ2lzdHJ5IG9mIHJlYWN0b3JzIHN1YnNjcmliZWQgdG8gdGhpcyBicm9rZXIgaW5zdGFuY2UiIiIKICAgICAgICByZXR1cm4gc2VsZi5yZWFjdHJlZwoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGV2ZW50dHlwZXMoc2VsZik6CiAgICAgICAgIiIiOm9iajpgYmFyb3F1ZS5kYXRhc3RydWN0dXJlcy5yZWdpc3RyaWVzLkV2ZW50VHlwZXNSZWdpc3RyeWA6CiAgICAgICAgcmVnaXN0cnkgb2YgZXZlbnQgdHlwZXMgcmVnaXN0ZXJlZCBvbiB0aGlzIGJyb2tlciBpbnN0YW5jZSIiIgogICAgICAgIHJldHVybiBzZWxmLnJlYWN0cmVnLmdldF9ldmVudF90eXBlc19yZWdpc3RyeSgpCgogICAgQHByb3BlcnR5CiAgICBkZWYgZXZlbnRzKHNlbGYpOgogICAgICAgICIiIjpvYmo6YGJhcm9xdWUuZGF0YXN0cnVjdHVyZXMuY291bnRlcnMuRXZlbnRDb3VudGVyYDoKICAgICAgICBjb3VudGVyIG9mIGV2ZW50cyBwdWJsaXNoZWQgb24gdGhpcyBicm9rZXIgaW5zdGFuY2Ugc28gZmFyIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuZXZ0Y291bnRlcgoKICAgIEBwcm9wZXJ0eQogICAgZGVmIHRvcGljcyhzZWxmKToKICAgICAgICAiIiI6b2JqOmBiYXJvcXVlLmRhdGFzdHJ1Y3R1cmVzLnJlZ2lzdHJpZXMuVG9waWNzUmVnaXN0cnlgOgogICAgICAgIHJlZ2lzdHJ5IG9mIHRvcGljcyByZWdpc3RlcmVkIG9uIHRoaXMgYnJva2VyIGluc3RhbmNlIiIiCiAgICAgICAgcmV0dXJuIHNlbGYudG9waWNzcmVnCgogICAgZGVmIHJlc2V0KHNlbGYpOgogICAgICAgICIiIlJlc2V0cyB0aGUgcmVhY3RvcnMgcmVnaXN0ZXIgYW5kIHRoZSBwdWJsaXNoZWQgZXZlbnRzIGNvdW50ZXIgb2YKICAgICAgICB0aGlzIGJyb2tlciBpbnN0YW5jZS4KCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5yZWFjdHJlZyA9IHJlZ2lzdHJpZXMuUmVhY3RvcnNSZWdpc3RyeSgpCiAgICAgICAgc2VsZi5ldnRjb3VudGVyID0gY291bnRlcnMuRXZlbnRDb3VudGVyKCkKCiAgICAjIC0tLS0tLS0tIHJlYWN0b3ItcmVsYXRlZCBtZXRob2RzIC0tLS0tLS0tCiAgICBkZWYgb24oc2VsZiwgZXZlbnR0eXBlKToKICAgICAgICAiIiJSZWdpc3RlcnMgYW4gZXZlbnQgdHlwZSBvbiB0aGUgYnJva2VyLgoKICAgICAgICBBcmdzOgogICAgICAgICAgICBldmVudHR5cGUgKDpvYmo6YGJhcm9xdWUuZW50aXRpZXMuZXZlbnR0eXBlLkV2ZW50VHlwZWApOiB0aGUgZXZlbnQgdHlwZSB0byBiZSByZWdpc3RlcmVkCgogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIDpvYmo6YGJhcm9xdWUuZGF0YXN0cnVjdHVyZXMuYmFncy5SZWFjdG9yc0JhZ2AKCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYucmVhY3RyZWcuZ2V0X29yX2NyZWF0ZV9iYWcoZXZlbnR0eXBlKQoKICAgIGRlZiBvbl9hbnlfZXZlbnRfcnVuKHNlbGYsIHJlYWN0b3IpOgogICAgICAgICIiIlN1YnNjcmliZXMgYSByZWFjdG9yIG9uIHRoZSBicm9rZXIgdG8gYmUgcnVuIHVwb24gYW55IGV2ZW50IGZpcmluZy4KCiAgICAgICAgQXJnczoKICAgICAgICAgICAgcmVhY3RvciAoOm9iajpgYmFyb3F1ZS5lbnRpdGllcy5yZWFjdG9yLlJlYWN0b3JgKTogdGhlIHJlYWN0b3IgdG8gYmUgc3Vic2NyaWJlZAoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICA6b2JqOmBiYXJvcXVlLmRhdGFzdHJ1Y3R1cmVzLnJlYWN0b3IuUmVhY3RvcmAKCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYucmVhY3RyZWcuZ2V0X2pvbGx5X2JhZygpLnJ1bihyZWFjdG9yKQoKICAgICMgLS0tLS0tLS0gZXZlbnQtcmVsYXRlZCBtZXRob2RzIC0tLS0tLS0tCiAgICBkZWYgcHVibGlzaChzZWxmLCBldmVudCk6CiAgICAgICAgIiIiUHVibGlzaGVzIGFuIGV2ZW50IG9uIHRoZSBicm9rZXIuCgogICAgICAgIE5vdGU6CiAgICAgICAgICAgIFRoaXMgaXMgYSB0ZW1wbGF0ZS1tZXRob2QKCiAgICAgICAgQXJnczoKICAgICAgICAgICAgZXZlbnQgKDpvYmo6YGJhcm9xdWUuZW50aXRpZXMuZXZlbnQuRXZlbnRgKTogdGhlIGV2ZW50IHRvIGJlIHB1Ymxpc2hlZAoKICAgICAgICAiIiIKICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShldmVudCwgRXZlbnQpCiAgICAgICAgaWYgc2VsZi5jb25maWdbJ2V2ZW50cyddWyd2YWxpZGF0ZV9zY2hlbWEnXToKICAgICAgICAgICAgc2VsZi5fdmFsaWRhdGVfZXZlbnRfc2NoZW1hKGV2ZW50KQogICAgICAgIHNlbGYuX2NvdW50X2V2ZW50KGV2ZW50KQogICAgICAgIHNlbGYuX2V4ZWN1dGVfcmVhY3RvcnMoZXZlbnQpCiAgICAgICAgc2VsZi5fdXBkYXRlX2V2ZW50X3N0YXR1cyhldmVudCkKICAgICAgICBpZiBzZWxmLmNvbmZpZ1snZXZlbnRzJ11bJ3BlcnNpc3QnXToKICAgICAgICAgICAgc2VsZi5fcGVyc2lzdF9ldmVudChldmVudCkKCiAgICAjICJwcml2YXRlIiBtZXRob2RzCiAgICBkZWYgX2NvdW50X2V2ZW50KHNlbGYsIGV2ZW50KToKICAgICAgICAiIiJJbmNyZW1lbnRzIHRoZSBldmVudHMgY291bnRlciBvZiB0aGUgYnJva2VyCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIGV2ZW50ICg6b2JqOmBiYXJvcXVlLmVudGl0aWVzLmV2ZW50LkV2ZW50YCk6IHRoZSBldmVudCB0byBiZSBjb3VudGVkCgogICAgICAgICIiIgogICAgICAgIHNlbGYuZXZ0Y291bnRlci5pbmNyZW1lbnRfY291bnRpbmcoZXZlbnQpCgogICAgZGVmIF9leGVjdXRlX3JlYWN0b3JzKHNlbGYsIGV2ZW50KToKICAgICAgICAiIiJFeGVjdXRlIGFsbCByZWFjdG9ycyB0aGF0IHN1YnNjcmliZWQgdG8gdGhlIGV2ZW50IHR5cGUgb2YgdGhlIGlucHV0CiAgICAgICAgZXZlbnQuCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIGV2ZW50ICg6b2JqOmBiYXJvcXVlLmVudGl0aWVzLmV2ZW50LkV2ZW50YCk6IHRoZSBldmVudAogICAgICAgIFJhaXNlcwogICAgICAgICAgICA6b2JqOmBiYXJvcXVlLmV4Y2VwdGlvbnMuZXZlbnR0eXBlcy5VbnJlZ2lzdGVyZWRFdmVudFR5cGVFcnJvcmA6IHdoZW4gdGhlIHR5cGUgb2YgdGhlIGV2ZW50IGlzIG5vdCByZWdpc3RlcmVkIG9uIHRoZSBicm9rZXIKCiAgICAgICAgIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBwcm9wYWdhdGUgPSBzZWxmLmNvbmZpZ1sncmVhY3RvcnMnXVsncHJvcGFnYXRlX2V4Y2VwdGlvbnMnXQogICAgICAgIGlnbm9yZSA9IHNlbGYuY29uZmlnWydldmVudHR5cGVzJ11bJ2lnbm9yZV91bnJlZ2lzdGVyZWQnXQogICAgICAgIGlmIG5vdCBpZ25vcmU6CiAgICAgICAgICAgIGlmIGV2ZW50LnR5cGUgbm90IGluIHNlbGYuZXZlbnR0eXBlczoKPHxmaW1fZW5kfD4="]
["0648ef912ff19c67822767c2bccfcaf08d1ad079-1","0648ef912ff19c67822767c2bccfcaf08d1ad079","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKaW1wb3J0IGh1bWFuZnJpZW5kbHkKCgpjbGFzcyBDbG9jazoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLnQgPSAwCgogICAgZGVmIHRpY2soc2VsZik6CiAgICAgICAgc2VsZi50ID0gdGltZS50aW1lKCkKCiAgICBkZWYgdG9jayhzZWxmLCBwcmV0dHk9RmFsc2UpOgogICAgICAgIGlmIHByZXR0eToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICByZXR1cm4gaHVtYW5mcmllbmRseS5mb3JtYXRfdGltZXNwYW4odGltZS50aW1lKCkgLSBzZWxmLnQsIGRldGFpbGVkPVRydWUpCjx8ZmltX2VuZHw+"]
["018fea9c69f3781ab72afa09c8baaf306331a832-2","018fea9c69f3781ab72afa09c8baaf306331a832","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IHRpbWUKZnJvbSB0eXBpbmcgaW1wb3J0IERpY3QKCmltcG9ydCByZXF1ZXN0cwpmcm9tIGNvbmZpZy5zZXR0aW5ncyBpbXBvcnQgQVBJX0tFWSwgQVBJX1BSRURJQ1RfUEFUSCwgQVBJX1VQTE9BRF9QQVRILCBBUElfVVJMCmZyb20gdGVsZWdyYW0gaW1wb3J0IElubGluZUtleWJvYXJkQnV0dG9uLCBJbmxpbmVLZXlib2FyZE1hcmt1cCwgVXBkYXRlCmZyb20gdGVsZWdyYW0uZXh0IGltcG9ydCBDYWxsYmFja0NvbnRleHQKZnJvbSB1dGlscy5sb2dnaW5nIGltcG9ydCB0ZWxlZ3JhbV9ib3QKCgpkZWYgc2VuZF9waG90b190b19hcGkoZmlsZXM6IERpY3QpOgogICAgIiIiCiAgICBOYW1lOiBzZW5kX3Bob3RvX3RvX2FwaQogICAgRGVzY3JpcHRpb246CiAgICAgICAgR2V0IGEgZGljdGlvbmFyeSB3aXRoIGEgZmlsZW5hbWUgYW5kIGEgYmluYXJ5IG9iamVjdCBhbmQgc2VuZCB0byB0aGUgQVBJLgogICAgSW5wdXRzOgogICAgICAgIDpmaWxlczogdHlwZShkaWN0KTogeyJmaWxlIjogKCJmaWxlX25hbWUiLCBiaW5hcnlfb2JqZWN0KX0KICAgIE91dHB1dHM6CiAgICAgICAgTm9uZQogICAgIiIiCiAgICBkYXRhID0geyJzb3VyY2UiOiAidGVsZWdyYW0ifQogICAgaGVhZGVycyA9IHsiWC1BcGktS2V5IjogQVBJX0tFWX0KICAgIHRlbGVncmFtX2JvdC5kZWJ1ZygiU2VuZGluZyB0aGUgZmlsZSBvYmplY3QgdG8gdGhlIEFQSS4iKQogICAgdHJ5OgogICAgICAgIHIgPSByZXF1ZXN0cy5wb3N0KAogICAgICAgICAgICBBUElfVVJMICsgQVBJX1VQTE9BRF9QQVRILCBmaWxlcz1maWxlcywgZGF0YT1kYXRhLCBoZWFkZXJzPWhlYWRlcnMKICAgICAgICApCiAgICAgICAgaWYgci5zdGF0dXNfY29kZSA9PSAyMDE6CiAgICAgICAgICAgIHRlbGVncmFtX2JvdC5pbmZvKGYiRmlsZSBzdWNlc3NmdWxseSB1cGxvYWRlZDoge3IudGV4dH0iKQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIHRlbGVncmFtX2JvdC5lcnJvcihmIlRoZXJlIHdhcyBhbiBlcnJvciBzZW5kaW5nIHRoZSBmaWxlOiB7ZX0uIikKCgpkZWYga2V5Ym9hcmQoKToKICAgIGtleWJvYXJkID0gWwogICAgICAgIFsKICAgICAgICAgICAgSW5saW5lS2V5Ym9hcmRCdXR0b24oIlllcyEhISIsIGNhbGxiYWNrX2RhdGE9InllcyIpLAogICAgICAgICAgICBJbmxpbmVLZXlib2FyZEJ1dHRvbigiTm8iLCBjYWxsYmFja19kYXRhPSJubyIpLAogICAgICAgIF0sCiAgICBdCgogICAgcmVwbHlfbWFya3VwID0gSW5saW5lS2V5Ym9hcmRNYXJrdXAoa2V5Ym9hcmQpCiAgICByZXR1cm4gcmVwbHlfbWFya3VwCgoKZGVmIGtleWJvYXJkX3N0YXJ0KCk6CiAgICBrZXlib2FyZCA9IFsKICAgICAgICBbCiAgICAgICAgICAgIElubGluZUtleWJvYXJkQnV0dG9uKCJZZXMhISEiLCBjYWxsYmFja19kYXRhPSJZRVMiKSwKICAgICAgICAgICAgSW5saW5lS2V5Ym9hcmRCdXR0b24oIk5vIiwgY2FsbGJhY2tfZGF0YT0iTk8iKSwKICAgICAgICBdLAogICAgXQoKICAgIHJlcGx5X21hcmt1cCA9IElubGluZUtleWJvYXJkTWFya3VwKGtleWJvYXJkKQogICAgcmV0dXJuIHJlcGx5X21hcmt1cAoKCmRlZiBzdGFydCh1cGRhdGU6IFVwZGF0ZSwgY29udGV4dDogQ2FsbGJhY2tDb250ZXh0KSAtPiBOb25lOgogICAgIiIiCiAgICBOYW1lOiBzdGFydAogICAgRGVzY3JpcHRpb246CiAgICAgICAgU3RhcnQgY2FsbGFibGUgZnVuY3Rpb24gd2hlbiAvc3RhcnQgY29tbWFuZCBpcyB1c2VkIG9uIHRoZSB0ZWxlZ3JhbSBib3QuCiAgICAgICAgU2VuZCBhIHJlcGx5IHdoZW4gdXNpbmcgdGhhdCBjb21tYW5kLgogICAgSW5wdXRzOgogICAgICAgIDp1cGRhdGU6IHR5cGUoVXBkYXRlKTogdXBkYXRlIGhhbmRsZXIgb2JqZWN0LgogICAgICAgIDpjb250ZXh0OiB0eXBlKENhbGxiYWNrQ29udGV4dCkuCiAgICBPdXRwdXRzOgogICAgICAgIE5vbmUKICAgICIiIgogICAgcmVwbHlfbWFya3VwID0ga2V5Ym9hcmRfc3RhcnQoKQogICAgY29udGV4dC5ib3Quc2VuZF9tZXNzYWdlKAogICAgICAgIGNoYXRfaWQ9dXBkYXRlLmVmZmVjdGl2ZV9jaGF0LmlkLAogICAgICAgIHRleHQ9IldlbGNvbWUgdG8gbWFpcnJvciEgRG8geW91IHdhbnQgbWUgdG8gZ3Vlc3MgeW91ciBhZ2U/IiwKICAgICAgICByZXBseV9tYXJrdXA9cmVwbHlfbWFya3VwLAogICAgKQoKCmRlZiB0ZXh0KHVwZGF0ZTogVXBkYXRlLCBjb250ZXh0OiBDYWxsYmFja0NvbnRleHQpIC0+IE5vbmU6CiAgICAiIiIKICAgIE5hbWU6IHRleHQKICAgIERlc2NyaXB0aW9uOgogICAgICAgIFdoZW4gYSB0ZXh0IG1lc3NhZ2UgaXMgc2VudCBpbiB0aGUgdGVsZWdyYW0gYm90LCB0aGUgY29udGV4dCBzZW5kIHRoYXQgbWVzc2FnZS4KICAgIElucHV0czoKICAgICAgICA6dXBkYXRlOiB0eXBlKFVwZGF0ZSk6IHVwZGF0ZSBoYW5kbGVyIG9iamVjdC4KICAgICAgICA6Y29udGV4dDogdHlwZShDYWxsYmFja0NvbnRleHQpLgogICAgT3V0cHV0czoKICAgICAgICBOb25lCiAgICAiIiIKICAgIGNvbnRleHQuYm90LnNlbmRfbWVzc2FnZSgKICAgICAgICBjaGF0X2lkPXVwZGF0ZS5lZmZlY3RpdmVfY2hhdC5pZCwKICAgICAgICB0ZXh0PSJTb3JyeSwgSSBkaWRuJ3QgdW5kZXJzdGFuZCB5b3UuIFBsZWFzZSBzZW5kIG1lIGEgcGljLiIsCiAgICApCgoKZGVmIHVua25vd24odXBkYXRlOiBVcGRhdGUsIGNvbnRleHQ6IENhbGxiYWNrQ29udGV4dCkgLT4gTm9uZToKICAgICIiIgogICAgTmFtZTogdW5rbm93bgogICAgRGVzY3JpcHRpb246CiAgICAgICAgV2hlbiBhbiB1bmtub3duIGNvbW1hbmQgaXMgdXNlZCB0aGUgYm90IGlzIHJlcGxpZWQgd2l0aCB0aGlzIG1lc3NhZ2UuCiAgICBJbnB1dHM6CiAgICAgICAgOnVwZGF0ZTogdHlwZShVcGRhdGUpOiB1cGRhdGUgaGFuZGxlciBvYmplY3QuCiAgICAgICAgOmNvbnRleHQ6IHR5cGUoQ2FsbGJhY2tDb250ZXh0KS4KICAgIE91dHB1dHM6CiAgICAgICAgTm9uZQogICAgIiIiCiAgICBjb250ZXh0LmJvdC5zZW5kX21lc3NhZ2UoCiAgICAgICAgY2hhdF9pZD11cGRhdGUuZWZmZWN0aXZlX2NoYXQuaWQsCiAgICAgICAgdGV4dD0iU29ycnksIEkgZGlkbid0IHVuZGVyc3RhbmQgdGhhdCBjb21tYW5kLiIsCiAgICApCgoKZGVmIGhlbHBfY29tbWFuZCh1cGRhdGU6IFVwZGF0ZSwgY29udGV4dDogQ2FsbGJhY2tDb250ZXh0KSAtPiBOb25lOgogICAgIiIiCiAgICBOYW1lOiB1bmtub3duCiAgICBEZXNjcmlwdGlvbjoKICAgICAgICBXaGVuIHVzZWQgdGhlIC9oZWxwIGNvbW1hbmQsIHlvdSBjYW4gZ2V0IHRoZSBjb21tYW5kIGhlbHBlciBmb3IgdGhlIHRlbGVncmFtIGJvdC4KICAgIElucHV0czoKICAgICAgICA6dXBkYXRlOiB0eXBlKFVwZGF0ZSk6IHVwZGF0ZSBoYW5kbGVyIG9iamVjdC4KICAgICAgICA6Y29udGV4dDogdHlwZShDYWxsYmFja0NvbnRleHQpLgogICAgT3V0cHV0czoKICAgICAgICBOb25lCiAgICAiIiIKICAgIHVwZGF0ZS5tZXNzYWdlLnJlcGx5X3RleHQoCiAgICAgICAgIiIiCjxiPk1haXJyb3IgQm90OjwvYj4KCllvdSBjYW4gZmluZCA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbWFpcnJvci90ZWxlZ3JhbS1ib3QvYmxvYi9tYWluL1JFQURNRS5tZCI+aGVyZTwvYT4gdGhpcyBib3QncyBkb2N1bWVudGF0aW9uLgpBdXRob3JzIG9mIHRoaXMgYm90OgoKICAgIC0gPGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2luLyVFMiU5QyU4NS1ib3JqYS1sLTQyMjY2NmE5Ij5Cb3JqYTwvYT4KICAgIC0gPGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2luL2FhY2VjYW4iPkFsZXg8L2E+CiAgICAgICAgIiIiLAogICAgICAgIHBhcnNlX21vZGU9IkhUTUwiLAogICAgICAgIGRpc2FibGVfd2ViX3BhZ2VfcHJldmlldz1UcnVlLAogICAgKQoKCmRlZiBidWlsZF90ZXh0X3ByZWRpY3Rpb24ocHJlZGljdGlvbjogRGljdCk6CiAgICBuZXdsaW5lID0gIlxuIgogICAgdGV4dCA9IGYiIiIKPGI+UFJFRElDVElPTjo8L2I+XG4Ke25ld2xpbmUuam9pbihbZiJGYWNlIHtjb3VudCsxfTogKEFnZToge3ByZWRbJ2FnZSddfSksIChHZW5kZXI6IHtwcmVkWydnZW5kZXInXX0pIgogICAgICAgICAgICAgICAgZm9yIGNvdW50LCBwcmVkIGluIGVudW1lcmF0ZShwcmVkaWN0aW9uWyJwcmVkaWN0aW9ucyJdKSBdKX0KIiIiCiAgICByZXR1cm4gdGV4dAoKCmRlZiBwcmVkaWN0KGltYWdlKToKICAgIGRhdGEgPSB7ImltYWdlX2lkIjogaW1hZ2V9CiAgICBwcmludChkYXRhKQogICAgaGVhZGVycyA9IHsiWC1BcGktS2V5IjogQVBJX0tFWX0KICAgIHRlbGVncmFtX2JvdC5kZWJ1ZyhmIlByZWRpY3QgaW1hZ2Uge2ltYWdlfS4iKQogICAgdHJ5OgogICAgICAgIHIgPSByZXF1ZXN0cy5wb3N0KAogICAgICAgICAgICBBUElfVVJMICsgQVBJX1BSRURJQ1RfUEFUSCwgZGF0YT1qc29uLmR1bXBzKGRhdGEpLCBoZWFkZXJzPWhlYWRlcnMKICAgICAgICApCiAgICAgICAgaWYgci5zdGF0dXNfY29kZSA9PSAyMDA6CiAgICAgICAgICAgIHRlbGVncmFtX2JvdC5pbmZvKGYiU3VjZXNzZnVsbHkgcHJlZGljdGVkOiB7ci50ZXh0fSIpCiAgICAgICAgICAgIHJldHVybiBidWlsZF90ZXh0X3ByZWRpY3Rpb24oanNvbi5sb2FkcyhyLnRleHQpKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRlbGVncmFtX2JvdC5lcnJvcihmIkVycm9yIHF1ZXJ5aW5nIHRoZSBBUEk6IHtyLnRleHR9LiIpCiAgICAgICAgICAgIHJldHVybiAiVGhlcmUgd2FzIGFuIGVycm9yIHByZWRpY3RpbmcgeW91ciBpbWFnZS4iCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgdGVsZWdyYW1fYm90LmVycm9yKGYiVGhlcmUgaXMgYW4gZXJyb3IgbWFraW5nIHRoZSBwcmVkaWN0aW9uOiB7ZX0uIikKCgpkZWYgYnV0dG9uKHVwZGF0ZTogVXBkYXRlLCBjb250ZXh0OiBDYWxsYmFja0NvbnRleHQpIC0+IE5vbmU6CiAgICAiIiIKICAgIE5hbWU6IHBob3RvCiAgICBEZXNjcmlwdGlvbjoKICAgICAgICBVc2VkIHRvIHNlbmQgYSBwaG90byBpbnRvIHRoZSBBUEkgd2hlbiB5b3UgdXBsb2FkZWQgaW4gdGhlIHRlbGVncmFtIGJvdC4KICAgIElucHV0czoKICAgICAgICA6dXBkYXRlOiB0eXBlKFVwZGF0ZSk6IHVwZGF0ZSBoYW5kbGVyIG9iamVjdC4KICAgICAgICA6Y29udGV4dDogdHlwZShDYWxsYmFja0NvbnRleHQpLgogICAgT3V0cHV0czoKICAgICAgICBOb25lCiAgICAiIiIKICAgIHF1ZXJ5ID0gdXBkYXRlLmNhbGxiYWNrX3F1ZXJ5CiAgICBxdWVyeS5hbnN3ZXIoKQogICAgYW5zd2VyID0gcXVlcnkuZGF0YQogICAgaWYgYW5zd2VyID09ICJ5ZXMiOgogICAgICAgIHF1ZXJ5LmVkaXRfbWVzc2FnZV90ZXh0KHRleHQ9IkknbSBhIGdyZWF0IGd1ZXNzZXIhIikKICAgIGVsaWYgYW5zd2VyID09ICJZRVMiOgogICAgICAgIHF1ZXJ5LmVkaXRfbWVzc2FnZV90ZXh0KAogICAgICAgICAgICB0ZXh0PSJUbyBzdGFydCBwbGVhc2Ugc2VuZCBtZSBhIHBpYyBvZiB5b3Vyc2VsZiBhbmQgSSB3aWxsIHRyeSB0byBndWVzcyB5b3VyIGFnZSBhbmQgZ2VuZGVyLiIKICAgICAgICApCiAgICBlbGlmIGFuc3dlciA9PSAiTk8iOgogICAgICAgIHF1ZXJ5LmVkaXRfbWVzc2FnZV90ZXh0KHRleHQ9Ik5vIHByb2JsZW0sIHlvdSBjYW4gY29tZSBiYWNrIHdoZW5ldmVyIHlvdSB3YW50LiIpCiAgICBlbHNlOgogICAgICAgIHF1ZXJ5LmVkaXRfbWVzc2FnZV90ZXh0KAogICAgICAgICAgICB0ZXh0PSJTb3JyeSwgSSdsbCBkbyBteSBiZXN0IHRoZSBuZXh0IHRpbWUgOiguIEkgbmVlZCBtb3JlIGltYWdlcyB0byBpbXByb3ZlIG15IHByZWRpY3Rpb25zLiIKICAgICAgICApCgoKZGVmIHBob3RvKHVwZGF0ZTogVXBkYXRlLCBjb250ZXh0OiBDYWxsYmFja0NvbnRleHQpIC0+IE5vbmU6CiAgICAiIiIKICAgIE5hbWU6IHBob3RvCiAgICBEZXNjcmlwdGlvbjoKICAgICAgICBVc2VkIHRvIHNlbmQgYSBwaG90byBpbnRvIHRoZSBBUEkgd2hlbiB5b3UgdXBsb2FkZWQgaW4gdGhlIHRlbGVncmFtIGJvdC4KICAgIElucHV0czoKICAgICAgICA6dXBkYXRlOiB0eXBlKFVwZGF0ZSk6IHVwZGF0ZSBoYW5kbGVyIG9iamVjdC4KICAgICAgICA6Y29udGV4dDogdHlwZShDYWxsYmFja0NvbnRleHQpLgogICAgT3V0cHV0czoKICAgICAgICBOb25lCiAgICAiIiIKICAgIGltYWdlID0gZiJ7dXBkYXRlLm1lc3NhZ2UucGhvdG9bLTFdLmZpbGVfdW5pcXVlX2lkfV97dXBkYXRlLm1lc3NhZ2UuY2hhdC5pZH0uanBnIgogICAgZmlsZXMgPSB7CiAgICAgICAgImZpbGUiOiAoCiAgICAgICAgICAgICMgQVFBREZya3hHLTNiQ1ZGeV8zMjM1MDU3LmpwZwogICAgICAgICAgICBpbWFnZSwKICAgICAgICAgICAgYnl0ZXModXBkYXRlLm1lc3NhZ2UucGhvdG9bLTFdLmdldF9maWxlKCkuZG93bmxvYWRfYXNfYnl0ZWFycmF5KCkpLAogICAgICAgICkKICAgIH0KCiAgICBzZW5kX3Bob3RvX3RvX2FwaShmaWxlcykKCiAgICBjb250ZXh0LmJvdC5zZW5kX2NoYXRfYWN0aW9uKGNoYXRfaWQ9dXBkYXRlLmVmZmVjdGl2ZV9jaGF0LmlkLCBhY3Rpb249InR5cGluZyIpCiAgICB0aW1lLnNsZWVwKDcpCgogICAgcHJlZGljdGlvbl9yZXN1bHQgPSBwcmVkaWN0KCJyYXcvIiArIGltYWdlKQogICAgaWYgcHJlZGljdGlvbl9yZXN1bHQ6CiAgICAgICAgY29udGV4dC5ib3Quc2VuZF9tZXNzYWdlKAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGNoYXRfaWQ9dXBkYXRlLmVmZmVjdGl2ZV9jaGF0LmlkLAogICAgICAgICAgICB0ZXh0PXByZWRpY3Rpb25fcmVzdWx0LAogICAgICAgICAgICBwYXJzZV9tb2RlPSJIVE1MIiwKICAgICAgICAgICAgZGlzYWJsZV93ZWJfcGFnZV9wcmV2aWV3PVRydWUsCjx8ZmltX2VuZHw+"]
["096fe5a6fa83f7e5a2161bfffced42e3f5ac9e01-2","096fe5a6fa83f7e5a2161bfffced42e3f5ac9e01","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZj1vcGVuKCc2LjIuMV9ydW5fYWxsX3JhbmRvbWl6ZV9zZWFyY2hsaWdodC5zaCcsJ3cnKQoKZm9yIGkgaW4gcmFuZ2UoNTAwKToKICAgIGNtZD0ncHl0aG9uIDYuMl9jbGFzc2lmeV90YXNrX3NlYXJjaGxpZ2h0X3JhbmRvbWl6ZS5weSAlZCclaQo8fGZpbV9lbmR8Pg=="]
["4e99c1a6b19e5827c01b61b5b79e71ec89a1064e-3","4e99c1a6b19e5827c01b61b5b79e71ec89a1064e",{"$cut":{"chars":36432,"head":"PHxmaW1fcHJlZml4fD4KJycnClNoaXBwZWQgd2l0aCBETkEgc2luZ2xlLXN0cmFuZGVkIHRpbGUgKFNTVCkgc2VxdWVuY2UgZGVzaWduZXIgdXNlZCBpbiB0aGUgZm9sbG93aW5nIHB1YmxpY2F0aW9uLgogIkRpdmVyc2UgYW5kIHJvYnVzdCBtb2xlY3VsYXIgYWxnb3JpdGhtcyB1c2luZyByZXByb2dyYW1tYWJsZSBETkEgc2VsZi1hc3NlbWJseSIKIFdvb2RzKiwgRG90eSosIE15aHJ2b2xkLCBIdWksIFpob3UsIFlpbiwgV2luZnJlZS4gKCpKb2ludCBmaXJzdCBjby1hdXRob3JzKQogTmF0dXJlLCAyMDE5CgpHZW5lcmFsbHkgc3N0X2RzZCBwcm9jZXNzZXMgUHl0aG9uICdBQ1RHJyBzdHJpbmdzIChhcyBvcHBvc2VkIHRvIG51bXB5IGFycmF5cyB3aGljaCBhcmUgcHJvY2Vzc2VkIGJ5IGRzZCkuCicnJwoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRoLCBzdHJpbmcsIHJhbmRvbSwgc3lzLCBvcwppbXBvcnQgc3VicHJvY2VzcyBhcyBzdWIKZnJvbSBtdWx0aXByb2Nlc3NpbmcucG9vbCBpbXBvcnQgVGhyZWFkUG9vbAppbXBvcnQgaXRlcnRvb2xzCgojIGZyb20gbHJ1X2NhY2hlIGltcG9ydCBscnVfY2FjaGUgIyB0aGlzIHdhcyB1c2VkIHdoZW4gd2UgaGFkIGEgaGFuZC1yb2xsZWQgbHJ1X2NhY2hlLCBidXQgaXQncyBub3cgaW4gUHl0aG9uIDMKdHJ5OgogICAgZnJvbSBmdW5jdG9vbHMgaW1wb3J0IGxydV9jYWNoZSAKZXhjZXB0IEltcG9ydEVycm9yOgogICAgIyBpbiBjYXNlIHRoaXMgaXMgcHl0aG9uMgogICAgZnJvbSBscnVfY2FjaGUgaW1wb3J0IGxydV9jYWNoZQoKZ2xvYmFsX3RocmVhZF9wb29sID0gVGhyZWFkUG9vbCgpCgojdmllbm5hUk5BX1BBUkFNRVRFUl9TRVRfRElSRUNUT1JZID0gJ3NoYXJlL1ZpZW5uYVJOQS8nCnRyeTogIAogICBvcy5lbnZpcm9uWyJWSUVOTkFSTkFfUEFSQU1TX1BBVEgiXQpleGNlcHQgS2V5RXJyb3I6IAogICBwcmludCgiUGxlYXNlIHNldCB0aGUgZW52aXJvbm1lbnQgcGF0aCB2YXJpYWJsZSBWSUVOTkFSTkFfUEFSQU1TX1BBVEggdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBWaWVubmFSTkEgcGFyYW1ldGVycyAoZG5hX21hdGhld3MxOTk5LnBhciBhbmQgZG5hX21hdGhld3MyMDA0LnBhciksICIpCiAgIHByaW50KCJGb3IgZXhhbXBsZSBieSB0eXBpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIChvciBwdXR0aW5nIGl0IGluIHlvdXIgc2hlbGwgc3RhcnR1cCByb3V0aW5lLCBlLmcuIGZvciBiYXNoIHVzZXJzIGluIC5iYXNocmMpOiIpCiAgIHByaW50KCJleHBvcnQgVklFTk5BUk5BX1BBUkFNU19QQVRIPS91c3IvbG9jYWwvc2hhcmUvVmllbm5hUk5BLyIpCiAgIHN5cy5leGl0KDEpCgp2aWVubmFSTkFfUEFSQU1FVEVSX1NFVF9ESVJFQ1RPUlkgPSBvcy5lbnZpcm9uLmdldCgnVklFTk5BUk5BX1BBUkFNU19QQVRIJykKREVGQVVMVF92aWVubmFSTkFfUEFSQU1FVEVSX1NFVCA9IHZpZW5uYVJOQV9QQVJBTUVURVJfU0VUX0RJUkVDVE9SWSsnZG5hX21hdGhld3MxOTk5LnBhcicKCiMgdW5peCBwYXRoIG11c3QgYmUgYWJsZSB0byBmaW5kIE5VUEFDSywgYW5kIE5VUEFDS0hPTUUgbXVzdCBiZSBzZXQsIGFzIGRlc2NyaWJlZCBpbiBOVVBBQ0sgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucy4KCmRlZiBkR2FkanVzdCh0ZW1wZXJhdHVyZSxzZXFsZW4pOgogICAgUiA9IDAuMDAxOTg3MjA0MSAjIEJvbHR6bWFubidzIGNvbnN0YW50IGluIGtjYWwvbW9sL0sKICAgIHdhdGVyX2NvbmMgPSA1NS4xNCAjIG1vbGFyIGNvbmNlbnRyYXRpb24gb2Ygd2F0ZXIgYXQgMzcgQzsgaWdub3JlIHRlbXBlcmF0dXJlIGRlcGVuZGVuY2UsIH41JQogICAgSyA9IHRlbXBlcmF0dXJlICsgMjczLjE1ICMgS2VsdmluCiAgICBhZGp1c3QgPSBSKksqbWF0aC5sb2cod2F0ZXJfY29uYykgIyBjb252ZXJ0cyBmcm9tIE5VUEFDSyBtb2xlIGZyYWN0aW9uIHVuaXRzIHRvIG1vbGFyIHVuaXRzLCBwZXIgYXNzb2NpYXRpb24KICAgIHJldHVybiBhZGp1c3QqKHNlcWxlbi0xKQoKQGxydV9jYWNoZShtYXhzaXplPTEwMDAwMDApCmRlZiBwZnVuYyhzZXF0dXBsZSwgdGVtcGVyYXR1cmUsIG5lZ2F0ZT1GYWxzZSk6CiAgICAiIiJDYWxscyBOVVBBQ0sncyBwZnVuYyBvbiBhIGNvbXBsZXggY29uc2lzdGluZyBvZiB0aGUgdW5pcXVlIHN0cmFuZHMgaW4KICAgIHNlcXR1cGxlLCByZXR1cm5zIGRHLiAgdGVtcGVyYXR1cmUgaXMgaW4gQ2Vsc2l1cy4KCiAgICBJZiBuZWdhdGU9PVRydWUsIHJldHVybnMgbmVnYXRpb24gb2Ygbm9ybWFsIGZyZWUgZW5lcmd5IHNvIHRoYXQgcmVzdWx0IHdpbGwgYmUgcG9zaXRpdmUuIiIiCiAgICBpZiB0eXBlKHNlcXR1cGxlKSBpcyBzdHI6CiAgICAgICAgc2VxdHVwbGUgPSAoc2VxdHVwbGUsKQogICAgdXNlcl9pbnB1dCA9IHN0cihsZW4oc2VxdHVwbGUpKSArICdcbicgKyAnXG4nLmpvaW4oc2VxdHVwbGUpICsgJ1xuJyArICcgJy5qb2luKG1hcChzdHIsbGlzdChyYW5nZSgxLGxlbihzZXF0dXBsZSkrMSkpKSkKCiAgICBwPXN1Yi5Qb3BlbihbJ3BmdW5jJywnLVQnLHN0cih0ZW1wZXJhdHVyZSksJy1tdWx0aScsJy1tYXRlcmlhbCcsJ2RuYSddLAogICAgICAgICAgICAgICAgIHN0ZGluPXN1Yi5QSVBFLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpICAgICAgICAgICAgIAoKICAgIHRyeToKICAgICAgICAjb3V0cHV0ID0gcC5jb21tdW5pY2F0ZSh1c2VyX2lucHV0KVswXQogICAgICAgIG91dHB1dCA9IHAuY29tbXVuaWNhdGUodXNlcl9pbnB1dC5lbmNvZGUoKSlbMF0KICAgICAgICBvdXRwdXQgPSBvdXRwdXQuZGVjb2RlKCkKICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGVycm9yOgogICAgICAgIHAua2lsbCgpCiAgICAgICAgcmFpc2UgZXJyb3IKICAgIAogICAgI2xpbmVzID0gb3V0cHV0LnNwbGl0KCdcbicpCiAgICBsaW5lcyA9IG91dHB1dC5zcGxpdCgnXG4nKQoKICAgIAogICAgaWYgbGluZXNbLTRdICE9ICIlIEZyZWUgZW5lcmd5IChrY2FsL21vbCkgYW5kIHBhcnRpdGlvbiBmdW5jdGlvbjoiIDoKICAgICAgICByYWlzZSBOYW1lRXJyb3IoJ05VUEFDSyBvdXRwdXQg"}}]
["09e41e0fde111b126aa39ad06e095fc10c99dd1a-5","09e41e0fde111b126aa39ad06e095fc10c99dd1a","PHxmaW1fcHJlZml4fD4KIyEvYmluL3B5dGhvbgoKaW1wb3J0IGRhc2hfY29yZV9jb21wb25lbnRzIGFzIGRjYwppbXBvcnQgZGFzaF9odG1sX2NvbXBvbmVudHMgYXMgaHRtbAppbXBvcnQgZGF0ZXRpbWUKCgphbGxTdHlsZSA9IHsKICAgICAgICAgICAgJ3dpZHRoJzogJzExMDAnLAogICAgICAgICAgICAnbWFyZ2luLWxlZnQnOiAnYXV0bycsCiAgICAgICAgICAgICdtYXJnaW4tcmlnaHQnOiAnYXV0bycsCiAgICAgICAgICAgICdmb250LWZhbWlseSc6ICdvdmVycGFzcycsCiAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJyNGM0YzRjMnCiAgICAgICAgfQoKCmRlZiBnZXRMYXlvdXQoYXBwKToKICAgIGxheW91dCA9IGh0bWwuRGl2KFsKICAgICAgICBkY2MuTG9jYXRpb24oaWQ9J3VybCcsIHJlZnJlc2g9RmFsc2UpLAogICAgICAgIGdldEhlYWRlcihhcHApLAogICAgICAgIGh0bWwuRGl2KGlkPSdwYWdlLWNvbnRlbnQnKQogICAgXSkKICAgIHJldHVybiBsYXlvdXQKCgpkZWYgZ2V0SGVhZGVyKGFwcCk6CiAgICAjIHRoaXMgaXMgYSBtZXNzOwogICAgaW5saW5lQmxvY2sgPSB7ImRpc3BsYXkiOiAiaW5saW5lLWJsb2NrIn0KICAgIGhlYWRlcldpZGdldHMgPSBbCiAgICAgICAgaHRtbC5CdXR0b24oIlJlZnJlc2giLCBpZD0ncmVmcmVzaC1idXR0b24nKSwKICAgICAgICBodG1sLkRpdigKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgaHRtbC5EaXYoIkxhc3QgcmVmcmVzaCBAICIsIHN0eWxlPWlubGluZUJsb2NrLnVwZGF0ZSh7ImZsb2F0IjogImxlZnQifSkpLAogICAgICAgICAgICAgICAgaHRtbC5EaXYoZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCksCiAgICAgICAgICAgICAgICAgICAgICAgICBpZD0nbGFzdC1yZWZyZXNoJywgY2xhc3NOYW1lPSJzaG93VGltZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1pbmxpbmVCbG9jay51cGRhdGUoeyJmbG9hdCI6ICJsZWZ0In0pKSwKCiAgICAgICAgICAgICAgICBodG1sLkRpdigiJXMgU3RhcnQgdGltZSIgJSBhcHAuc3RhcnRUaW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgaWQ9J3N0YXJ0LXRpbWUnLCBjbGFzc05hbWU9InNob3dUaW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPWlubGluZUJsb2NrLnVwZGF0ZSh7ImZsb2F0IjogInJpZ2h0In0pKSwKICAgICAgICAgICAgICAgIGh0bWwuQnIoKSwKICAgICAgICAgICAgICAgIGh0bWwuQ2VudGVyKFsKICAgICAgICAgICAgICAgICAgICBodG1sLkRpdihhcHAuZXBvY2hJbmZvLCBpZD0iY3VycmVudC1lcG9jaCIpCiAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgXSwgY2xhc3NOYW1lPSJzaG93VGltZSIpCiAgICBdCgogICAgcGFnZU1lbnUgPSBbCiAgICAgICAgaHRtbC5BKGh0bWwuQnV0dG9uKCJFdm9sdXRpb24gU3RhdGlzdGljcyIpLCBocmVmPSIvIiksCiAgICAgICAgaHRtbC5BKGh0bWwuQnV0dG9uKCJFdmFsdWF0aW9uIEJyZWFrcyIpLCBocmVmPSIvZXZhbGJyZWFrIiksCiAgICAgICAgaHRtbC5BKGh0bWwuQnV0dG9uKCJWaWV3IFJlc3VsdHMiKSwgaHJlZj0iL3Jlc3VsdHMiKQogICAgICAgICMgaHRtbC5CdXR0b24oIlZpZXcgU2V0dGluZ3MiLCBjbGFzc05hbWU9InVuaW1wbGVtZW50ZWQiKSwKICAgICAgICAjIGh0bWwuQnV0dG9uKCJJbnNwZWN0IFBvcHVsYXRpb24iLCBjbGFzc05hbWU9InVuaW1wbGVtZW50ZWQiKQogICAgXQoKCgogICAgIyBodG1sLkxpbmsocmVsPSdzdHlsZXNoZWV0JywgaHJlZj0nL3N0YXRpYy9wcm9tb3Rlcnpfc3R5bGUuY3NzJyksCiAgICBoZWFkZXIgPSBodG1sLkRpdigKICAgICAgICBbCiAgICAgICAgICAgIGh0bWwuSDIoCiAgICAgICAgICAgICAgICBhcHAud2VicGFnZVRpdGxlLAogICAgICAgICAgICAgICAgc3R5bGU9eydwYWRkaW5nLXRvcCc6ICcyMCcsICd0ZXh0LWFsaWduJzogJ2NlbnRlcid9LAogICAgICAgICAgICApLAogICAgICAgICAgICBodG1sLkRpdihoZWFkZXJXaWRnZXRzKSwKICAgICAgICAgICAgaHRtbC5EaXYocGFnZU1lbnUpLAogICAgICAgIF0sCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzdHlsZT1hbGxTdHlsZSkKCjx8ZmltX2VuZHw+"]
["2441a9552db5c2147636df9739f76d054259e07e-1","2441a9552db5c2147636df9739f76d054259e07e","PHxmaW1fcHJlZml4fD4KIiIiClRlc3RzIC9tb2RlbHMgZW5kcG9pbnQKIiIiCmltcG9ydCBsb2dnaW5nIGFzIGxvZwo8fGZpbV9ob2xlfD4KCmNsYXNzIE1vZGVsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CgogICAgZGVmIHRlc3RfZ2V0X21vZGVscyhzZWxmKToKICAgICAgICBjbGllbnQgPSBnZXRjbGllbnQoKQogICAgICAgIG1vZGVscyA9IGNsaWVudC5nZXRfbW9kZWxzKCkKICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG1vZGVscykgPiAwKQogICAgICAgIGxvZy5pbmZvKCd0ZXN0ICVpIG1vZGVscycsIGxlbihtb2RlbHMpKQogICAgICAgIGZvciBtb2RlbCBpbiBtb2RlbHM6ICAjIHR5cGU6IGRpY3QKICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUobW9kZWwuZ2V0KCdpZCcpKQogICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShtb2RlbC5nZXQoJ25hbWUnKSkKICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUobW9kZWwuZ2V0KCdsb2NhdGlvbicpKQo8fGZpbV9zdWZmaXh8PgppbXBvcnQgdW5pdHRlc3QKCmZyb20gY29uZmlnIGltcG9ydCBnZXRjbGllbnQKCjx8ZmltX2VuZHw+"]
["14d9d1914d24936d79a757cf0bda70567a6070ae-2","14d9d1914d24936d79a757cf0bda70567a6070ae","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgb3MKaW1wb3J0IHN5cwppbXBvcnQgYXJncGFyc2UKaW1wb3J0IGpzb24KCiMgdGVtcGF0ZTJqc29uLnB5IC1rIFNZU1RFTT1sb25lc3Rhci50YWNjLnV0ZXhhcy5lZHUKIyAgICAgICAgICAgICAgICAgUEFUSD0vaG9tZS92YXVnaG4vYXBwcyAtaSB0ZW1wbGF0ZS5qc29ueCAtbyBmaWxlLmpzb24KCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQoKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1rIiwgZGVzdD0na2V5cycsIGhlbHA9J1NwYWNlLWRlbGltaXRlZCBWQVI9VmFsdWUgc2V0cycsIG5hcmdzPScqJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1pIiwgZGVzdD0naW5wdXQnLCBoZWxwPSdJbnB1dCAodGVtcGxhdGUuanNvbngpJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1vIiwgZGVzdD0ib3V0cHV0IiwgaGVscD0iT3V0cHV0IChvdXRwdXQuanNvbikiKQoKICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCgogICAgdHJ5OgogICAgICAgIHdpdGggb3BlbihhcmdzLmlucHV0KSBhcyBmOgogICAgICAgICAgICBzID0gZi5yZWFkKCkKICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGU6CiAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgIltGQVRBTF0iLCAiTm8gZmlsZW5hbWUgd2FzIHByb3ZpZGVkIGZvciAtaSIKICAgICAgICBzeXMuZXhpdCgxKQogICAgZXhjZXB0IElPRXJyb3IsIGU6CiAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgIltGQVRBTF0iLCBhcmdzLmlucHV0LCAid2FzIG5vdCBhdmFpbGFibGUgZm9yIHJlYWRpbmciCiAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgIkV4Y2VwdGlvbjogJXMiICUgc3RyKGUpCiAgICAgICAgc3lzLmV4aXQoMSkKCiAgICAjIEl0ZXJhdGUgdGhyb3VnaCBkb2N1bWVudCwgcmVwbGFjaW5nIHZhcmlhYmxlcyB3aXRoIHZhbHVlcwogICAgZm9yIGt2cCBpbiBhcmdzLmtleXM6CgogICAgICAgIHRyeToKICAgICAgICAgICAgKGtleSwgdmFsKSA9IGt2cC5zcGxpdCgnPScpCiAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgIHByaW50ICdbV0FSTl0nLCBrdnAsICdub3QgYSB2YWxpZCBWQVI9VmFsdWUgcGFpcicKCiAgICAgICAga2V5bmFtZSA9ICckeycgKyBrZXkgKyAnfScKCiAgICAgICAgcyA9IHMucmVwbGFjZShrZXluYW1lLCB2YWwpCgogICAgIyBQcmludCBvdXQgdG8gSlNPTgogICAganNvbkRvYyA9IGpzb24ubG9hZHMocykKCjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5kaXJuYW1lKGFyZ3Mub3V0cHV0KSkKICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOiAgIyBHdWFyZCBhZ2FpbnN0IHJhY2UgY29uZGl0aW9uCiAgICAgICAgICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAiRXhjZXB0aW9uOiAlcyIgJSBzdHIoZXhjKQogICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKCiAgICB3aXRoIG9wZW4oYXJncy5vdXRwdXQsICd3JykgYXMgb3V0ZmlsZToKICAgICAgICBqc29uLmR1bXAoanNvbkRvYywgb3V0ZmlsZSwgaW5kZW50PTQpCjx8ZmltX3N1ZmZpeHw+CiAgICBvdXRwYXRoID0gb3MucGF0aC5kaXJuYW1lKGFyZ3Mub3V0cHV0KQogICAgaWYgb3V0cGF0aDoKICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5kaXJuYW1lKGFyZ3Mub3V0cHV0KSk6CiAgICAgICAgICAgIHRyeToKPHxmaW1fZW5kfD4="]
["4ecfa0f2a48c8e654dde39298b820ee0f7f9cfdc-1","4ecfa0f2a48c8e654dde39298b820ee0f7f9cfdc","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIKQ3JlYXRlZCBvbiBXZWQgTWFyIDEzIDE1OjM5OjIyIDIwMTkKCkBhdXRob3I6IGFsYW5rYXIKIiIiCgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdApmcm9tIGJhc2ljX3VuaXRzIGltcG9ydCByYWRpYW5zLCBzaW4KCiIiIgp1ID0gbnAucmFuZG9tLnVuaWZvcm0obG93PTAuLGhpZ2g9MS4sc2l6ZT0xMDAwKQp4ID0gbnAucGllY2V3aXNlKHUsW3U8PTAuNV0sW2xhbWJkYSB1OiBucC5hcmNjb3MoMS0yKnUpLGxhbWJkYSB1OiBucC5waS1ucC5hcmNjb3MoMip1LTEpXSkKcGx0Lmhpc3QoeCxub3JtZWQ9VHJ1ZSkKeCA9IG5wLmxpbnNwYWNlKDAsbnAucGksMTAwKQpwbHQucGxvdCh4LDAuNSpucC5zaW4oeCkpCiIiIgoKZGVmIGF6aW1fZHJhdyhOKTojcmFkaWFucwogICAgdSA9IG5wLnJhbmRvbS51bmlmb3JtKGxvdz0wLixoaWdoPTIqbnAucGksc2l6ZT1OKQogICAgcmV0dXJuIHUKCjx8ZmltX2hvbGV8PgoKcGhpID0gW3ZhbCpyYWRpYW5zIGZvciB2YWwgaW4gbnAuYXJhbmdlKDAsIDIqbnAucGksIDAuMDEpXQp0aGV0YSA9IFt2YWwqcmFkaWFucyBmb3IgdmFsIGluIG5wLmFyYW5nZSgwLCBucC5waSwgMC4wMSldCk4gPSBpbnQoMWU1KQoKcGx0LmZpZ3VyZShmaWdzaXplPSgxMywxMCkpCnBsdC5wbG90KHBoaSwoMS8oMipucC5waSkpKm5wLm9uZXMobGVuKHBoaSkpLHh1bml0cz1yYWRpYW5zLGNvbG9yPSdibGFjaycpCnBsdC5oaXN0KGF6aW1fZHJhdyhOKSxub3JtZWQ9VHJ1ZSxiaW5zPTIwLGNvbG9yPSdvcmFuZ2UnKQpwbHQuZ3JpZCgpCnBsdC55bGFiZWwocidQcm9iYWJpbGl0eScsc2l6ZT0xOCkKcGx0LnhsYWJlbChyJ0FuZ2xlIChyYWQpJyxzaXplPTIwKQpwbHQudGl0bGUocidEaXN0cmlidXRpb24gb2YgQXppbXV0aGFsIEFuZ2xlJywgc2l6ZT0yMSkKcGx0LnRpY2tfcGFyYW1zKGF4aXM9J2JvdGgnLCB3aGljaD0nbWFqb3InLCBsYWJlbHNpemU9MTgpCnBsdC50aWNrX3BhcmFtcyhheGlzPSdib3RoJywgd2hpY2g9J21pbm9yJywgbGFiZWxzaXplPTE1KQpwbHQuc2F2ZWZpZygnMTBfMS5wbmcnKQpwbHQuc2hvdygpCgpwbHQuZmlndXJlKGZpZ3NpemU9KDEzLDEwKSkKcGx0LnBsb3QodGhldGEsbnAuYXJyYXkoc2luKHRoZXRhKSkvMix4dW5pdHM9cmFkaWFucyxjb2xvcj0nYmxhY2snKQpwbHQuaGlzdChwb2xhcl9kcmF3KE4pLG5vcm1lZD1UcnVlLGJpbnM9MjAsY29sb3I9J29yYW5nZScpCnBsdC5ncmlkKCkKcGx0LnlsYWJlbChyJ1Byb2JhYmlsaXR5JyxzaXplPTE4KQpwbHQueGxhYmVsKHInQW5nbGUgKHJhZCknLHNpemU9MjApCnBsdC50aXRsZShyJ0Rpc3RyaWJ1dGlvbiBvZiBQb2xhciBBbmdsZScsIHNpemU9MjEpCnBsdC50aWNrX3BhcmFtcyhheGlzPSdib3RoJywgd2hpY2g9J21ham9yJywgbGFiZWxzaXplPTE4KQpwbHQudGlja19wYXJhbXMoYXhpcz0nYm90aCcsIHdoaWNoPSdtaW5vcicsIGxhYmVsc2l6ZT0xNSkKcGx0LnNhdmVmaWcoJzEwXzIucG5nJykKcGx0LnNob3coKQo8fGZpbV9zdWZmaXh8PgpkZWYgcG9sYXJfZHJhdyhOKTojcmFkaWFucwogICAgdSA9IG5wLnJhbmRvbS51bmlmb3JtKGxvdz0wLixoaWdoPTEuLHNpemU9TikKICAgIHggPSBucC5waWVjZXdpc2UodSxbdTw9MC41XSxbbGFtYmRhIHU6IG5wLmFyY2NvcygxLTIqdSksbGFtYmRhIHU6IG5wLnBpLW5wLmFyY2NvcygyKnUtMSldKQogICAgcmV0dXJuIHgKPHxmaW1fZW5kfD4="]
["6ddd785856ce3dee8586879384d3628ea84faf5d-1","6ddd785856ce3dee8586879384d3628ea84faf5d","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHNlcmlhbAppbXBvcnQgdGltZQppbXBvcnQgc3lzCmltcG9ydCBjc3YKCgoKIyBjdXN0b20gcGF0aCBpbXBvcnRzCnRyeToKICAgIGZyb20gcGxleHVzLm5vZGVzLm5vZGUgaW1wb3J0IEJhc2VOb2RlLCBQZXJpb2RpY0NhbGxiYWNrCiAgICBmcm9tIHBsZXh1cy5ub2Rlcy5tZXNzYWdlIGltcG9ydCBNZXNzYWdlCiAgICBmcm9tIHBsZXh1cy5ub2Rlcy5jb21tYW5kIGltcG9ydCBDb21tYW5kCiAgICBmcm9tIHBsZXh1cy51dGlscy5jb25zb2xlX2NsaWVudCBpbXBvcnQgUGxleHVzVXNlckFwaQogICAgZnJvbSBwbGV4dXMuZGV2aWNlcy5zaW1wbGVfYXZyX3JlbGF5X2RldmljZSBpbXBvcnQgQVZSUmVsYXlEZXZpY2UKICAgIGZyb20gcGxleHVzLmRldmljZXMuc2ltcGxlX2F2cl9jb25kX2RldmljZSBpbXBvcnQgQVZSQ29uZERldmljZQpleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICBmcm9tIHNyYy5wbGV4dXMubm9kZXMubm9kZSBpbXBvcnQgQmFzZU5vZGUsIFBlcmlvZGljQ2FsbGJhY2ssIE1lc3NhZ2UKICAgIGZyb20gc3JjLnBsZXh1cy51dGlscy5jb25zb2xlX2NsaWVudF9hcGkgaW1wb3J0IFBsZXh1c1VzZXJBcGkKICAgIGZyb20gc3JjLnBsZXh1cy5kZXZpY2VzLnNpbXBsZV9hdnJfcmVsYXlfZGV2aWNlIGltcG9ydCBBVlJSZWxheURldmljZQogICAgZnJvbSBzcmMucGxleHVzLmRldmljZXMuc2ltcGxlX2F2cl9jb25kX2RldmljZSBpbXBvcnQgQVZSQ29uZERldmljZQoKCmRlZiBhcHByb3hpbWF0aW9uX3dpdGhfcjIoZnVuYywgeCwgeSk6CgogICAgaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAogICAgZnJvbSBzY2lweS5vcHRpbWl6ZSBpbXBvcnQgY3VydmVfZml0CiAgICBpbXBvcnQgbnVtcHkgYXMgbnAKCiAgICBwb3B0LCBwY292ID0gY3VydmVfZml0KGZ1bmMsIHgsIHkpCiAgICBwcmludCgicG9wdCB1c2luZyBzY2lweToge30iLmZvcm1hdChwb3B0KSkKICAgIHByaW50KCJwY292IHVzaW5nIHNjaXB5OiB7fSIuZm9ybWF0KHBjb3YpKQogICAgIyBwZXJyID0gbnAuc3FydChucC5kaWFnKHBjb3YpKQogICAgIyBwcmludCgicGVyciB1c2luZyBzY2lweToge30iLmZvcm1hdChwZXJyKSkKCiAgICAjIHRvIGNvbXB1dGUgUjIKICAgICMgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTkxODkzNjIvZ2V0dGluZy10aGUtci1zcXVhcmVkLXZhbHVlLXVzaW5nLWN1cnZlLWZpdAoKICAgIHJlc2lkdWFscyA9IHkgLSBmdW5jKHgsICpwb3B0KQogICAgc3NfcmVzID0gbnAuc3VtKHJlc2lkdWFscyAqKiAyKQogICAgc3NfdG90ID0gbnAuc3VtKCh5IC0gbnAubWVhbih5KSkgKiogMikKICAgIHJfc3F1YXJlZCA9IDEgLSAoc3NfcmVzIC8gc3NfdG90KQogICAgcHJpbnQoInJfc3F1YXJlZCB1c2luZyBjdXN0b20gY29kZToge30iLmZvcm1hdChyX3NxdWFyZWQpKQogICAgcmV0dXJuIHBvcHQsIHJfc3F1YXJlZAoKCmRlZiB1X3RvX2VfYXBwcm94aW1hdGlvbigpOgogICAgaW1wb3J0IG51bXB5IGFzIG5wCiAgICBpbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CgogICAgIyBmaXJzdCBkYXRhCiAgICB1X3MgPSBucC5hcnJheShbMC4wMDUsIDIuMDQ4LCAyLjU5NywgMy4wOTIsIDMuMzM2LCAzLjQ4MCwgMy42MDJdKQogICAgZV9zID0gbnAuYXJyYXkoWzAuMDA3LCAwLjUxOSwgMC44MDEsIDEuMzcyLCAxLjk3MywgMi41MjQsIDMuMTE0XSkKCiAgICAjICMgc2Vjb25kIGRhdGEKICAgICMgdV9zID0gbnAuYXJyYXkoW10pCiAgICAjIGVfcyA9IG5wLmFycmF5KFtdKQoKICAgICMgZiA9IHBsdC5maWd1cmUoKQogICAgZGVmIGV4cF9mdW5jKHR0LCBhLCBiKToKICAgICAgICByZXR1cm4gYSAqIG5wLmV4cChiICogdHQpCgogICAgZGVmIHNxdWFkX2Z1bmModCwgYSwgYiwgYyk6CiAgICAgICAgcmV0dXJuIGEqdCp0ICsgYip0ICsgYwoKICAgIGRlZiB0cmlhZF9mdW5jKHQsIGEsIGIsIGMsIGQpOgogICAgICAgIHJldHVybiBhKnQqdCp0ICsgYip0KnQgKyBjKnQgKyBkCgogICAgZGVmIHF1YWRfZnVuYyh0LCBhLCBiLCBjLCBkLCBlKToKICAgICAgICByZXR1cm4gYSp0KnQqdCp0ICsgYip0KnQqdCArIGMqdCp0ICsgZCp0ICsgZQoKICAgIGRlZiBmZmZmZnVuYyh0LCBhLCBiKToKICAgICAgICByZXR1cm4gYSp0LyhiLXQpCgogICAgZXBvcHQsIGVyMiA9IGFwcHJveGltYXRpb25fd2l0aF9yMihleHBfZnVuYywgdV9zLCBlX3MpCiAgICBzcG9wdCwgc3IyID0gYXBwcm94aW1hdGlvbl93aXRoX3IyKHNxdWFkX2Z1bmMsIHVfcywgZV9zKQogICAgdHBvcHQsIHRyMiA9IGFwcHJveGltYXRpb25fd2l0aF9yMih0cmlhZF9mdW5jLCB1X3MsIGVfcykKICAgIHFwb3B0LCBxcjIgPSBhcHByb3hpbWF0aW9uX3dpdGhfcjIocXVhZF9mdW5jLCB1X3MsIGVfcykKICAgICMgZnBvcHQsIGZyMiA9IGFwcHJveGltYXRpb25fd2l0aF9yMihmZmZmZnVuYywgdV9zLCBlX3MpCgoKICAgIHByaW50KCJleHAgYXBwcm94OiBjb2VmZnMgPSB7fSByMiA9IHt9Ii5mb3JtYXQoZXBvcHQsIGVyMikpCiAgICBwcmludCgic3F1YWQgYXBwcm94OiBjb2VmZnMgPSB7fSByMiA9IHt9Ii5mb3JtYXQoc3BvcHQsIHNyMikpCiAgICBwcmludCgidHJpYWQgYXBwcm94OiBjb2VmZnMgPSB7fSByMiA9IHt9Ii5mb3JtYXQodHBvcHQsIHRyMikpCiAgICBwcmludCgicXVhZCBhcHByb3g6IGNvZWZmcyA9IHt9IHIyID0ge30iLmZvcm1hdChxcG9wdCwgcXIyKSkKICAgICMgcHJpbnQoImh5cGVyYm9sYSBhcHByb3g6IGNvZWZmcyA9IHt9IHIyID0ge30iLmZvcm1hdChmcG9wdCwgZnIyKSkKCiAgICB4ID0gbnAuYXJhbmdlKDAsIDMuNzUsIDAuMSkKICAgIHlfZW9wdCA9IGV4cF9mdW5jKHgsICplcG9wdCkKICAgIHlfc3BvcHQgPSBzcXVhZF9mdW5jKHgsICpzcG9wdCkKICAgIHlfdHBvcHQgPSB0cmlhZF9mdW5jKHgsICp0cG9wdCkKICAgIHlfcXBvcHQgPSBxdWFkX2Z1bmMoeCwgKnFwb3B0KQogICAgeV9mcG9wdCA9IGZmZmZmdW5jKHgsICpbMC40ODE5LCA0LjE1OTRdKQoKICAgIHJlc2lkdWFscyA9IGVfcyAtIGZmZmZmdW5jKHVfcywgMC40ODE5LCA0LjE1OTQpCiAgICByZXNpZHVhbHMyID0gZV9zIC0gZXhwX2Z1bmModV9zLCAqZXBvcHQpCiAgICBwcmludChyZXNpZHVhbHMpCiAgICBwcmludChyZXNpZHVhbHMyKQogICAgc3NfcmVzID0gbnAuc3VtKHJlc2lkdWFscyAqKiAyKQogICAgc3NfdG90ID0gbnAuc3VtKChlX3MgLSBucC5tZWFuKGVfcykpICoqIDIpCiAgICByX3NxdWFyZWQgPSAxIC0gKHNzX3JlcyAvIHNzX3RvdCkKCgogICAgcGx0LnBsb3QoeCwgeV9lb3B0LCAnLWInKQogICAgcGx0LnBsb3QoeCwgeV9zcG9wdCwgJy1nJykKICAgIHBsdC5wbG90KHgsIHlfdHBvcHQsICctYycpCiAgICBwbHQucGxvdCh4LCB5X3Fwb3B0LCAnLS1yJykKICAgIHBsdC5wbG90KHgsIHlfZnBvcHQsICctLmsnKQogICAgcGx0LnBsb3QodV9zLCBlX3MsICdvcicpCgogICAgcGx0LnhsYWJlbCgnVSwgdm9sdHMsIGludGVybmFsIHNlbnNvcicpCiAgICBwbHQueWxhYmVsKCdFLCBtU20sIGV4dGVybmFsIHNlbnNvcicpCiAgICBsZWdlbmQxID0gIns6LjNmfSpleHAoezouM2Z9KngpLCBSMiA9IHs6LjJmfSIuZm9ybWF0KCplcG9wdCwgZXIyKQogICAgbGVnZW5kMiA9ICJ7Oi4zZn0qeDIgKyB7Oi4zZn0qeCArIHs6LjNmfSwgUjIgPSB7Oi4yZn0iLmZvcm1hdCgqc3BvcHQsIHNyMikKICAgIGxlZ2VuZDMgPSAiezouM2Z9KngzICsgezouM2Z9KngyICsgezouM2Z9KnggKyB7Oi4zZn0sIFIyID0gezouMmZ9Ii5mb3JtYXQoKnRwb3B0LCB0cjIpCiAgICBsZWdlbmQ0ID0gIns6LjNmfSp4NCArIHs6LjNmfSp4MyArIHs6LjNmfSp4MiArIHs6LjNmfSp4ICsgezouM2Z9LCBSMiA9IHs6LjJmfSIuZm9ybWF0KCpxcG9wdCwgcXIyKQogICAgbGVnZW5kNSA9ICJ7Oi4zZn0qeCAvICh7Oi4zZn0gLSB4KSwgUjIgPSB7Oi4yZn0iLmZvcm1hdCgwLjQ4MTkwMjEsIDQuMTU5NDIxLCByX3NxdWFyZWQpCiAgICBwbHQubGVnZW5kKFtsZWdlbmQxLCBsZWdlbmQyLCBsZWdlbmQzLCBsZWdlbmQ0LCBsZWdlbmQ1LCAiUmF3IGRhdGEiXSwgbG9jPSJ1cHBlciBsZWZ0IikKICAgIHBsdC50aXRsZSgiQ29uZHVjdCBzZW5zb3IgZGF0YSBhcHByb3hpbWF0aW9uIikKCiAgICBwbHQuc2hvdygpCgoKY2xhc3MgQ29uZHVjdFN0YW5kQ29udHJvbE5vZGUoQmFzZU5vZGUpOgogICAgIiIiCgogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgZW5kcG9pbnQ6IHN0ciwgbmFtZTogc3RyLCBsaXN0X29mX25vZGVzOiBsaXN0LCBpc19kYWVtb246IGJvb2wgPSBUcnVlKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKGVuZHBvaW50LCBuYW1lLCBsaXN0X29mX25vZGVzLCBpc19kYWVtb24pCiAgICAgICAgc2VsZi5hdnJfcmVsYXlfZGV2ID0gQVZSUmVsYXlEZXZpY2UoCiAgICAgICAgICAgIG5hbWU9ImF2cl9yZWxheSIsCiAgICAgICAgICAgIG51bV9vZl9jaGFubmVscz02LAogICAgICAgICAgICBkZXY9Jy9kZXYvdHR5VVNCMCcsCiAgICAgICAgICAgIGJhdWQ9OTYwMCwKICAgICAgICAgICAgdGltZW91dD0xLAogICAgICAgICAgICBzbGF2ZV9pZD0xCiAgICAgICAgKQoKICAgICAgICAjIHNlbGYuYXZyX2NvbmRfZGV2ID0gQVZSQ29uZERldmljZSgKICAgICAgICAjICAgICBuYW1lPSJhdnJfc2Vuc29yIiwKICAgICAgICAjICAgICBkZXY9Jy9kZXYvdHR5VVNCMScsCiAgICAgICAgIyAgICAgYmF1ZD05NjAwLAogICAgICAgICMgICAgIHRpbWVvdXQ9MSwKICAgICAgICAjICAgICBzbGF2ZV9pZD0yCiAgICAgICAgIyApCgogICAgICAgICMgYWRkaXRpb25hbCBzeXN0ZW0gY29tbWFuZAogICAgICAgIG9uZV9jeWNsZV9jb21tYW5kID0gQ29tbWFuZCgKICAgICAgICAgICAgbmFtZT0ib25lX2N5Y2xlIiwKICAgICAgICAgICAgYW5ub3RhdGlvbj0ib25lIGN5Y2xlIG9mIG1lYXN1cmVtZW50IG9uIGNvbmR1Y3Qgc3RhbmQiLAogICAgICAgICAgICBvdXRwdXRfa3dhcmdzPXsiYWNrX21zZyI6ICJvayJ9CiAgICAgICAgKQoKICAgICAgICBzdGF0dXNfY29tbWFuZCA9IENvbW1hbmQoCiAgICAgICAgICAgIG5hbWU9ImV4cF9zdGF0dXMiLAogICAgICAgICAgICBhbm5vdGF0aW9uPSJyZXR1cm5zIHNob3J0IGluZm8gYWJvdXQgZXhwZXJpbWVudCBzdGF0dXMiLAogICAgICAgICAgICBvdXRwdXRfa3dhcmdzPXsic3RhdHVzX3N0cmluZyI6ICJzdGF0dXMifQogICAgICAgICkKICAgICAgICBzZWxmLl9hbm5vdGF0aW9uID0gImNvbnRyb2wgbm9kZSBmb3IgY29uZHVjdGl2aXR5IGNvbnRyb2wgc3RhbmQgd2l0aCBtaXhlciIKICAgICAgICAjIHNlbGYuX2RldmljZXMuZXh0ZW5kKFtzZWxmLmF2cl9jb25kX2Rldiwgc2VsZi5hdnJfcmVsYXlfZGV2XSkKICAgICAgICBzZWxmLl9kZXZpY2VzLmV4dGVuZChbc2VsZi5hdnJfcmVsYXlfZGV2XSkKCiAgICAgICAgc2VsZi5zeXN0ZW1fY29tbWFuZHMuYXBwZW5kKG9uZV9jeWNsZV9jb21tYW5kKQogICAgICAgIHNlbGYuc3lzdGVtX2NvbW1hbmRzLmFwcGVuZChzdGF0dXNfY29tbWFuZCkKCiAgICAgICAgc2VsZi5sb2dnZXIoIm15IHN5c3RlbSBjb21tYW5kcyIpCiAgICAgICAgc2VsZi5sb2dnZXIoc2VsZi5zeXN0ZW1fY29tbWFuZHMpCgogICAgICAgIHNlbGYubmVlZF9vbmVfY3ljbGUgPSBGYWxzZQogICAgICAgICMgc2VsZi5udW1fb2ZfZG9uZV9jeWNsZXMgPSAwCiAgICAgICAgIyBzZWxmLm1heF9udW1fb2ZfY3ljbGVzID0gMTAKICAgICAgICBzZWxmLm1lYXN1cmVfcGF1c2UgPSA1MDAwICAjIG1zCiAgICAgICAgc2VsZi50aW1lX3F1YW50ID0gMTAgICMgbXMKICAgICAgICBzZWxmLnNsZWVwX3RpbWVyX2RlbGF5ID0gMCAgIyBtcwogICAgICAgIHNlbGYuc3lzdGVtX3N0YWdlX2ZsYWcgPSAid2FpdGluZyBmb3IgdGhlIHN0YXJ0IG9mIGN5Y2xlIgoKICAgICAgICAjIGNoYW5uZWxzIG9uIHJlYWwgZGV2aWNlCiAgICAgICAgc2VsZi5taXhpbmdfcHVtcCA9IDEKICAgICAgICBzZWxmLm91dHB1dF92YWx2ZSA9IDIKICAgICAgICBzZWxmLmRvc2luZ19wdW1wID0gMwogICAgICAgIHNlbGYuaW5wdXRfcHVtcCA9IDQKCiAgICAgICAgIyBleHAgZGF0YSBzdG9yYWdpbmcKICAgICAgICBzZWxmLm91dF9maWxlID0gIm91dC5jc3YiCiAgICAgICAgc2VsZi5ibGlua19mbGFnID0gRmFsc2UKCiAgICBkZWYgY3VzdG9tX3ByZXBhcmF0aW9uKHNlbGYpOgogICAgICAgIHNlbGYubG9nZ2VyKCJjdXN0b20gaW5pdCIpCiAgICAgICAgIyBzZWxmLnN5c3RlbV9zdGFnZV9mbGFnID0gIndhaXRpbmcgZm9yIHRoZSBzdGFydCBvZiBjeWNsZSIKICAgICAgICBzZWxmLnN5c3RlbV90aW1lciA9IFBlcmlvZGljQ2FsbGJhY2soc2VsZi5vbl9zeXN0ZW1fdGltZXIsIHNlbGYudGltZV9xdWFudCkgICMgbXMKICAgICAgICBzZWxmLnN5c3RlbV90aW1lciA9IFBlcmlvZGljQ2FsbGJhY2soc2VsZi5vbl9kYXRhX3NhdmluZywgc2VsZi5tZWFzdXJlX3BhdXNlKSAgIyBtcwogICAgICAgIHNlbGYuc3lzdGVtX3RpbWVyLnN0YXJ0KCkKICAgICAgICBzZWxmLmxvZ2dlcigic3RhcnQgd29yayIpCgogICAgIyBkZWYgY29udmVydF91X3RvX2Uoc2VsZiwgdV92b2x0cyk6CiAgICAjICAgICBwYXNzCgogICAgZGVmIG9uX2RhdGFfc2F2aW5nKHNlbGYpOgogICAgICAgICMgY29uZHVjdGl2aXR5ID0gc2VsZi5hdnJfY29uZF9kZXYuY2FsbCgiZ2V0X2FwcHJveF9kYXRhIikKICAgICAgICAjIGYgPSBvcGVuKHNlbGYub3V0X2ZpbGUsICdhJykKICAgICAgICAjIHdyID0gY3N2LndyaXRlcihmKQogICAgICAgICMgbm93ID0gZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkKICAgICAgICAjIHRpbWUgPSBub3cuc3RyZnRpbWUoIiVIOiVNOiVTIikKICAgICAgICAjIGRhdGUgPSBub3cuc3RyZnRpbWUoIiVkLyVtLyVZIikKICAgICAgICAjIGRhdGFfcm93ID0gW2RhdGUsIHRpbWUsIGNvbmR1Y3Rpdml0eV0KICAgICAgICAjIHdyLndyaXRlcm93KGRhdGFfcm93KQogICAgICAgICMgZi5jbG9zZSgpCiAgICAgICAgIyBzZWxmLmxvZ2dlcihjb25kdWN0aXZpdHkpCiAgICAgICAgaWYgc2VsZi5ibGlua19mbGFnOgogICAgICAgICAgICBzZWxmLmJsaW5rX2ZsYWcgPSBGYWxzZQo8fGZpbV9ob2xlfD4KICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLmJsaW5rX2ZsYWcgPSBUcnVlCiAgICAgICAgICAgIHNlbGYuYXZyX3JlbGF5X2Rldi5jYWxsKGNvbW1hbmQ9Im9uIiwgKip7ImNoYW5uZWwiOiAxfSkKCgogICAgZGVmIG9uX3N5c3RlbV90aW1lcihzZWxmKToKCiAgICAgICAgaWYgc2VsZi5zbGVlcF90aW1lcl9kZWxheSA+IDA6CiAgICAgICAgICAgICMgaXQgbWVhbnMgdGhhdCB3ZSBoYXZlIHRvIHdhaXQgc29tZSBtb3JlIHRpbWUKICAgICAgICAgICAgIyBsZXRzIGRlY3JlYXNlIGdsb2JhbCBkZWxheSB0aW1lcgogICAgICAgICAgICBzZWxmLnNsZWVwX3RpbWVyX2RlbGF5ID0gc2VsZi5zbGVlcF90aW1lcl9kZWxheSAtIHNlbGYudGltZV9xdWFudAoKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiBzZWxmLnN5c3RlbV9zdGFnZV9mbGFnID09ICJuZWVkX2RvemluZyI6CiAgICAgICAgICAgICAgICAjIGl0IG1lYW5zIHRoYXQgd2UgaGF2ZSB0byB3b3JrCiAgICAgICAgICAgICAgICBzZWxmLmF2cl9yZWxheV9kZXYuY2FsbChjb21tYW5kPSJvbiIsICoqeyJjaGFubmVsIjogc2VsZi5kb3NpbmdfcHVtcH0pCiAgICAgICAgICAgICAgICBzZWxmLnN5c3RlbV9zdGFnZV9mbGFnID0gIm5lZWRfbWl4aW5nIgogICAgICAgICAgICAgICAgc2VsZi5zbGVlcF90aW1lcl9kZWxheSA9IDMwMDAKICAgICAgICAgICAgZWxpZiBzZWxmLnN5c3RlbV9zdGFnZV9mbGFnID09ICJuZWVkX21peGluZyI6CiAgICAgICAgICAgICAgICBzZWxmLmF2cl9yZWxheV9kZXYuY2FsbChjb21tYW5kPSJvZmYiLCAqKnsiY2hhbm5lbCI6IHNlbGYuZG9zaW5nX3B1bXB9KQogICAgICAgICAgICAgICAgc2VsZi5hdnJfcmVsYXlfZGV2LmNhbGwoY29tbWFuZD0ib24iLCAqKnsiY2hhbm5lbCI6IHNlbGYubWl4aW5nX3B1bXB9KQogICAgICAgICAgICAgICAgc2VsZi5zeXN0ZW1fc3RhZ2VfZmxhZyA9ICJuZWVkX2RyYWluaW5nIgogICAgICAgICAgICAgICAgc2VsZi5zbGVlcF90aW1lcl9kZWxheSA9IDQ4MDAwMAogICAgICAgICAgICBlbGlmIHNlbGYuc3lzdGVtX3N0YWdlX2ZsYWcgPT0gIm5lZWRfZHJhaW5pbmciOgogICAgICAgICAgICAgICAgc2VsZi5hdnJfcmVsYXlfZGV2LmNhbGwoY29tbWFuZD0ib2ZmIiwgKip7ImNoYW5uZWwiOiBzZWxmLm1peGluZ19wdW1wfSkKICAgICAgICAgICAgICAgICMgaGVyZSBtdXN0IGJlIGNvZGUgZm9yIGRyYWluaW5nIDQwIG1sIG9mIHdhdGVyIG91dCBmcm9tIHN5c3RlbQogICAgICAgICAgICAgICAgc2VsZi5zeXN0ZW1fc3RhZ2VfZmxhZyA9ICJ3YWl0aW5nIGZvciB0aGUgc3RhcnQgb2YgY3ljbGUiCgogICAgZGVmIGhhbmRsZV9jdXN0b21fc3lzdGVtX21zZ3Moc2VsZiwgc3RyZWFtLCByZXF2X21zZzogTWVzc2FnZSk6CiAgICAgICAgYWRkcl9kZWNvZGVkLCBkZWNvZGVkX2RpY3QgPSBNZXNzYWdlLnBhcnNlX3ptcV9tc2cocmVxdl9tc2cpCiAgICAgICAgIyBzZWxmLmxvZ2dlcihbYWRkcl9kZWNvZGVkLCBkZWNvZGVkX2RpY3RdKQogICAgICAgICMgZGVjb2RlZF9tc2cgPSBNZXNzYWdlLmNyZWF0ZV9tc2dfZnJvbV9hZGRyX2FuZF9kaWN0KGFkZHJfZGVjb2RlZD1hZGRyX2RlY29kZWQsIGRlY29kZWRfZGljdD1kZWNvZGVkX2RpY3QpCiAgICAgICAgc2VsZi5sb2dnZXIoZGVjb2RlZF9kaWN0KQogICAgICAgIGlmIGRlY29kZWRfZGljdFsiY29tbWFuZCJdID09ICJvbmVfY3ljbGUiOgogICAgICAgICAgICBzZWxmLnN5c3RlbV9zdGFnZV9mbGFnID0gIm5lZWRfZG96aW5nIgogICAgICAgICAgICByZXNfbXNnID0gTWVzc2FnZSgKICAgICAgICAgICAgICAgIGFkZHI9YWRkcl9kZWNvZGVkLAogICAgICAgICAgICAgICAgZGV2aWNlPWRlY29kZWRfZGljdFsiZGV2aWNlIl0sCiAgICAgICAgICAgICAgICBjb21tYW5kPSJyZXNwIiwKICAgICAgICAgICAgICAgIG1zZ19pZD1kZWNvZGVkX2RpY3RbIm1zZ19pZCJdLAogICAgICAgICAgICAgICAgdGltZV89dGltZS50aW1lKCksCiAgICAgICAgICAgICAgICBkYXRhPSJvayIKICAgICAgICAgICAgKQogICAgICAgICAgICByZXR1cm4gcmVzX21zZwoKICAgICAgICBpZiBkZWNvZGVkX2RpY3RbImNvbW1hbmQiXSA9PSAic3RhdHVzIjoKICAgICAgICAgICAgcmVzX21zZyA9IE1lc3NhZ2UoCiAgICAgICAgICAgICAgICBhZGRyPWFkZHJfZGVjb2RlZCwKICAgICAgICAgICAgICAgIGRldmljZT1kZWNvZGVkX2RpY3RbImRldmljZSJdLAogICAgICAgICAgICAgICAgY29tbWFuZD0icmVzcCIsCiAgICAgICAgICAgICAgICBtc2dfaWQ9ZGVjb2RlZF9kaWN0WyJtc2dfaWQiXSwKICAgICAgICAgICAgICAgIHRpbWVfPXRpbWUudGltZSgpLAogICAgICAgICAgICAgICAgZGF0YT1zZWxmLnN5c3RlbV9zdGFnZV9mbGFnCiAgICAgICAgICAgICkKICAgICAgICAgICAgcmV0dXJuIHJlc19tc2cKCgoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBwcmludCgid2UgYXJlIGF3YWl0aW5nIHRjcCBhZGRyIGluIGZvcm1hdCAxMC45LjAuMSIpCgogICAgIyB1X3RvX2VfYXBwcm94aW1hdGlvbigpCgogICAgIyB3ZSBhcmUgYXdhaXRpbmcgYWRkciBhcyAxMC45LjAuMQogICAgbXlfYWRkciA9IHN0cihzeXMuYXJndlsxXSkKCiAgICBsaXN0X29mX25vZGVzMSA9IFsKICAgICAgICB7Im5hbWUiOiAibm9kZTQiLCAiYWRkcmVzcyI6ICJ0Y3A6Ly97fTo1NTY3Ii5mb3JtYXQobXlfYWRkcil9CiAgICAgICAgIyB7Im5hbWUiOiAibm9kZTIiLCAiYWRkcmVzcyI6ICJ0Y3A6Ly8xMC45LjAuMTI6NTU2NyJ9LAogICAgXQogICAgbjEgPSBDb25kdWN0U3RhbmRDb250cm9sTm9kZShuYW1lPWxpc3Rfb2Zfbm9kZXMxWzBdWyduYW1lJ10sIGVuZHBvaW50PWxpc3Rfb2Zfbm9kZXMxWzBdWydhZGRyZXNzJ10sCiAgICAgICAgICAgICAgICAgICAgIGxpc3Rfb2Zfbm9kZXM9bGlzdF9vZl9ub2RlczEpCiAgICBuMS5zdGFydCgpCiAgICBuMS5qb2luKCkKCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHNlbGYuYXZyX3JlbGF5X2Rldi5jYWxsKGNvbW1hbmQ9Im9mZiIsICoqeyJjaGFubmVsIjogMX0pCjx8ZmltX2VuZHw+"]
["fef5d16b954b255485519438c4d2bb1220ad0d36-2","fef5d16b954b255485519438c4d2bb1220ad0d36","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLm1vZGVscyBpbXBvcnQgQWJzdHJhY3RVc2VyCmZyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgQ2hhckZpZWxkLCBCb29sZWFuRmllbGQKZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcmV2ZXJzZQpmcm9tIGRqYW5nby51dGlscy50cmFuc2xhdGlvbiBpbXBvcnQgZ2V0dGV4dF9sYXp5IGFzIF8KCgpjbGFzcyBVc2VyKEFic3RyYWN0VXNlcik6CiAgICAiIiIKICAgIERlZmF1bHQgY3VzdG9tIHVzZXIgbW9kZWwgZm9yIGhwY2FjY2Vzcy4KICAgIElmIGFkZGluZyBmaWVsZHMgdGhhdCBuZWVkIHRvIGJlIGZpbGxlZCBhdCB1c2VyIHNpZ251cCwKICAgIGNoZWNrIGZvcm1zLlNpZ251cEZvcm0gYW5kIGZvcm1zLlNvY2lhbFNpZ251cEZvcm1zIGFjY29yZGluZ2x5LgogICAgIiIiCgogICAgIzogRmlyc3QgYW5kIGxhc3QgbmFtZSBkbyBub3QgY292ZXIgbmFtZSBwYXR0ZXJucyBhcm91bmQgdGhlIGdsb2JlCiAgICBuYW1lID0gQ2hhckZpZWxkKF8oIk5hbWUgb2YgVXNlciIpLCBibGFuaz1UcnVlLCBtYXhfbGVuZ3RoPTI1NSkKICAgIGZpcnN0X25hbWUgPSBOb25lICAjIHR5cGU6IGlnbm9yZQogICAgbGFzdF9uYW1lID0gTm9uZSAgIyB0eXBlOiBpZ25vcmUKICAgIGlzX2hwY2FkbWluID0gQm9vbGVhbkZpZWxkKAogICAgICAgIF8oIkhQQyBhZG1pbiBzdGF0dXMiKSwKICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgICAgIGhlbHBfdGV4dD1fKCJEZXNpZ25hdGVzIHdoZXRoZXIgdGhlIHVzZXIgaXMgYW4gSFBDIGFkbWluLiIpLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICApCiAgICBwaG9uZSA9IENoYXJGaWVsZChfKCJQaG9uZSBudW1iZXIgb2YgVXNlciIpLCBibGFuaz1UcnVlLCBtYXhfbGVuZ3RoPTMyKQoKICAgIGRlZiBnZXRfYWJzb2x1dGVfdXJsKHNlbGYpOgo8fGZpbV9lbmR8Pg=="]
["6dd59d9811af1b37b9b05fc30539976113090b42-2","6dd59d9811af1b37b9b05fc30539976113090b42","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gdHlwaW5nIGltcG9ydCBMaXN0LCBPcHRpb25hbApmcm9tIHV1aWQgaW1wb3J0IHV1aWQ0CgppbXBvcnQgUElMCmltcG9ydCBweXRlc3QKCmltcG9ydCBhcmNhZGUKaW1wb3J0IGFyY2FkZS5ndWkKZnJvbSBhcmNhZGUuZ3VpIGltcG9ydCBVSUNsaWNrYWJsZSwgVUlNYW5hZ2VyCmZyb20gYXJjYWRlLmd1aS51aV9zdHlsZSBpbXBvcnQgVUlTdHlsZQoKCmNsYXNzIFRlc3RVSU1hbmFnZXIoVUlNYW5hZ2VyKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQogICAgICAgIHNlbGYuZXZlbnRfaGlzdG9yeTogTGlzdFthcmNhZGUuZ3VpLlVJRXZlbnRdID0gW10KCiAgICAgICAgc2VsZi5wdXNoX2hhbmRsZXJzKG9uX3VpX2V2ZW50PXNlbGYuX29uX3VpX2V2ZW50KQoKICAgIGRlZiBtb3ZlX21vdXNlKHNlbGYsIHg6IGludCwgeTogaW50KToKICAgICAgICBzZWxmLmRpc3BhdGNoX3VpX2V2ZW50KGFyY2FkZS5ndWkuVUlFdmVudCgKICAgICAgICAgICAgYXJjYWRlLmd1aS5NT1VTRV9NT1RJT04sCiAgICAgICAgICAgIHg9eCwKICAgICAgICAgICAgeT15LAogICAgICAgICAgICBidXR0b249MSwKICAgICAgICAgICAgbW9kaWZpZXI9MAogICAgICAgICkpCgogICAgZGVmIGNsaWNrX2FuZF9ob2xkKHNlbGYsIHg6IGludCwgeTogaW50LCBidXR0b249YXJjYWRlLk1PVVNFX0JVVFRPTl9MRUZUKToKICAgICAgICBzZWxmLmRpc3BhdGNoX3VpX2V2ZW50KGFyY2FkZS5ndWkuVUlFdmVudCgKICAgICAgICAgICAgYXJjYWRlLmd1aS5NT1VTRV9QUkVTUywKICAgICAgICAgICAgeD14LAogICAgICAgICAgICB5PXksCiAgICAgICAgICAgIGJ1dHRvbj1idXR0b24sCiAgICAgICAgICAgIG1vZGlmaWVyPTAKICAgICAgICApKQoKICAgIGRlZiByZWxlYXNlKHNlbGYsIHg6IGludCwgeTogaW50LCBidXR0b249YXJjYWRlLk1PVVNFX0JVVFRPTl9MRUZUKToKICAgICAgICBzZWxmLmRpc3BhdGNoX3VpX2V2ZW50KGFyY2FkZS5ndWkuVUlFdmVudCgKICAgICAgICAgICAgYXJjYWRlLmd1aS5NT1VTRV9SRUxFQVNFLAogICAgICAgICAgICB4PXgsCiAgICAgICAgICAgIHk9eSwKICAgICAgICAgICAgYnV0dG9uPWJ1dHRvbiwKICAgICAgICAgICAgbW9kaWZpZXI9MAogICAgICAgICkpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBkZWYgY2xpY2soc2VsZiwgeDogaW50LCB5OiBpbnQpOgogICAgICAgIHNlbGYuY2xpY2tfYW5kX2hvbGQoeCwgeSkKICAgICAgICBzZWxmLnJlbGVhc2UoeCwgeSkKPHxmaW1fZW5kfD4="]
["9dbe3cb62eb2c92dc661603eca3cb032e8a9f291-5","9dbe3cb62eb2c92dc661603eca3cb032e8a9f291","PHxmaW1fcHJlZml4fD4KIiIiIGNsaWVudCBtb2R1bGUgIiIiCgppbXBvcnQgc29ja2V0Cjx8ZmltX2hvbGV8PgoKICAgIHNvY2tldF9jbGllbnQuY29ubmVjdCgoJzEyNy4wLjAuMScsIDUwMDApKQoKICAgIGhlYWRlcl9kYXRhX3N0ciA9ICIiCiAgICBjb250ZW50X2RhdGFfc3RyID0gIiIKCiAgICB3aGlsZSBUcnVlOgoKICAgICAgICBoZWFkZXJfZGF0YV9ieXRlcyA9IHNvY2tldF9jbGllbnQucmVjdig0KQoKICAgICAgICBoZWFkZXJfZGF0YV9zdHIgKz0gaGVhZGVyX2RhdGFfYnl0ZXMuZGVjb2RlKCJVVEYtOCIpCgogICAgICAgIGlmICI7IiBpbiBoZWFkZXJfZGF0YV9zdHI6CiAgICAgICAgICAgIGhlYWRlciwgY29udGVudF9kYXRhX3N0ciA9IGhlYWRlcl9kYXRhX3N0ci5zcGxpdCgiOyIpCiAgICAgICAgICAgIGJyZWFrCgogICAgY2hhcnNfZXhwZWN0ZWQgPSBpbnQoaGVhZGVyLnNwbGl0KCIgIilbMV0pCgogICAgd2hpbGUgbGVuKGNvbnRlbnRfZGF0YV9zdHIpIDwgY2hhcnNfZXhwZWN0ZWQ6CgogICAgICAgIGNvbnRlbnRfZGF0YV9ieXRlcyA9IHNvY2tldF9jbGllbnQucmVjdig0KQogICAgICAgIGNvbnRlbnRfZGF0YV9zdHIgKz0gY29udGVudF9kYXRhX2J5dGVzLmRlY29kZSgiVVRGLTgiKQoKICAgIHByaW50KGNvbnRlbnRfZGF0YV9zdHIpIAoKICAgICMgZGF0YV9ieXRlcyA9IHNvY2tldF9jbGllbnQucmVjdigxMDI0KQogICAgIyBwcmludChkYXRhX2J5dGVzKQoKICAgICMgZGF0YV9sZW4gPSBpbnQuZnJvbV9ieXRlcyhkYXRhX2xlbl9ieXRlcywgJ2JpZycpCiAgICAjIHByaW50KGRhdGFfbGVuKQoKICAgICMgd2VsY29tZV9tZXNzYWdlX2J5dGVzID0gc29ja2V0X2NsaWVudC5yZWN2KDEwMjQpCgogICAgIyBwcmludChkYXRhX2xlbl9ieXRlcykKCiAgICAjIHByaW50KCJyZWNlaXZlIG1lc3NhZ2UiKQogICAgIyB3ZWxjb21lX21zZyA9IGJ5dGVzKCkKICAgICMgd2hpbGUgbGVuKHdlbGNvbWVfbXNnKSA8IGRhdGFfbGVuOgogICAgIyAgICAgd2VsY29tZV9tc2cgPSBzb2NrZXRfY2xpZW50LnJlY3YoMTAyNCkKCiAgICAjIHByaW50KHdlbGNvbWVfbXNnLmRlY29kZSgiVVRGLTgiKSkKCiAgICAjIHByaW50KCJzZW5kIG1lc3NhZ2UiKQogICAgIyBzb2NrZXRfY2xpZW50LnNlbmRhbGwoYiJ0aGlzIGlzIGZ1biIpCgogICAgIyBwcmludCgicmVjZWl2ZSBlY2hvIikKICAgICMgZWNob19tc2cgPSBzb2NrZXRfY2xpZW50LnJlY3YoMTAyNCkKICAgICMgcHJpbnQoZWNob19tc2cuZGVjb2RlKCJVVEYtOCIpKQo8fGZpbV9zdWZmaXh8PgoKd2l0aCBzb2NrZXQuc29ja2V0KAogICAgc29ja2V0LkFGX0lORVQsCiAgICBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHNvY2tldF9jbGllbnQ6Cjx8ZmltX2VuZHw+"]
["09e8f9f98d5444d7959f11790b7a5cc38d250090-3","09e8f9f98d5444d7959f11790b7a5cc38d250090","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCmltcG9ydCB0b3JjaHZpc2lvbgpmcm9tIHRvcmNoIGltcG9ydCBubgpmcm9tIFBJTCBpbXBvcnQgSW1hZ2UKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CgppbWdfcGF0aD0iLi9ib25vYm8uanBnIgp0ZXN0X2ltZyA9IEltYWdlLm9wZW4oaW1nX3BhdGgpCjx8ZmltX2VuZHw+"]
["a00da1a7b52c97c39db0050c7210ba4703b8c05e-4","a00da1a7b52c97c39db0050c7210ba4703b8c05e","PHxmaW1fcHJlZml4fD4KZnJvbSB1dGlscyBpbXBvcnQgKgppbXBvcnQgcmFuZG9tCmltcG9ydCB0aW1lCgpnbG9iYWwgcmVtRnJvbnQKCmNsYXNzIFByb2JsZW06CiAgICAiIiJUaGUgYWJzdHJhY3QgY2xhc3MgZm9yIGEgZm9ybWFsIHByb2JsZW0uIFlvdSBzaG91bGQgc3ViY2xhc3MKICAgIHRoaXMgYW5kIGltcGxlbWVudCB0aGUgbWV0aG9kcyBhY3Rpb25zIGFuZCByZXN1bHQsIGFuZCBwb3NzaWJseQogICAgX19pbml0X18sIGdvYWxfdGVzdCwgYW5kIHBhdGhfY29zdC4gVGhlbiB5b3Ugd2lsbCBjcmVhdGUgaW5zdGFuY2VzCiAgICBvZiB5b3VyIHN1YmNsYXNzIGFuZCBzb2x2ZSB0aGVtIHdpdGggdGhlIHZhcmlvdXMgc2VhcmNoIGZ1bmN0aW9ucy4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgaW5pdGlhbCwgZ29hbD1Ob25lKToKICAgICAgICAiIiJUaGUgY29uc3RydWN0b3Igc3BlY2lmaWVzIHRoZSBpbml0aWFsIHN0YXRlLCBhbmQgcG9zc2libHkgYSBnb2FsCiAgICAgICAgc3RhdGUsIGlmIHRoZXJlIGlzIGEgdW5pcXVlIGdvYWwuIFlvdXIgc3ViY2xhc3MncyBjb25zdHJ1Y3RvciBjYW4gYWRkCiAgICAgICAgb3RoZXIgYXJndW1lbnRzLiIiIgogICAgICAgIHNlbGYuaW5pdGlhbCA9IGluaXRpYWwKICAgICAgICBzZWxmLmdvYWwgPSBnb2FsCgogICAgZGVmIGFjdGlvbnMoc2VsZiwgc3RhdGUpOgogICAgICAgICIiIlJldHVybiB0aGUgYWN0aW9ucyB0aGF0IGNhbiBiZSBleGVjdXRlZCBpbiB0aGUgZ2l2ZW4KICAgICAgICBzdGF0ZS4gVGhlIHJlc3VsdCB3b3VsZCB0eXBpY2FsbHkgYmUgYSBsaXN0LCBidXQgaWYgdGhlcmUgYXJlCiAgICAgICAgbWFueSBhY3Rpb25zLCBjb25zaWRlciB5aWVsZGluZyB0aGVtIG9uZSBhdCBhIHRpbWUgaW4gYW4KICAgICAgICBpdGVyYXRvciwgcmF0aGVyIHRoYW4gYnVpbGRpbmcgdGhlbSBhbGwgYXQgb25jZS4iIiIKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogICAgZGVmIHJlc3VsdChzZWxmLCBzdGF0ZSwgYWN0aW9uKToKICAgICAgICAiIiJSZXR1cm4gdGhlIHN0YXRlIHRoYXQgcmVzdWx0cyBmcm9tIGV4ZWN1dGluZyB0aGUgZ2l2ZW4KICAgICAgICBhY3Rpb24gaW4gdGhlIGdpdmVuIHN0YXRlLiBUaGUgYWN0aW9uIG11c3QgYmUgb25lIG9mCiAgICAgICAgc2VsZi5hY3Rpb25zKHN0YXRlKS4iIiIKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogICAgZGVmIGdvYWxfdGVzdChzZWxmLCBzdGF0ZSk6CiAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIHN0YXRlIGlzIGEgZ29hbC4gVGhlIGRlZmF1bHQgbWV0aG9kIGNvbXBhcmVzIHRoZQogICAgICAgIHN0YXRlIHRvIHNlbGYuZ29hbCBvciBjaGVja3MgZm9yIHN0YXRlIGluIHNlbGYuZ29hbCBpZiBpdCBpcyBhCiAgICAgICAgbGlzdCwgYXMgc3BlY2lmaWVkIGluIHRoZSBjb25zdHJ1Y3Rvci4gT3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYKICAgICAgICBjaGVja2luZyBhZ2FpbnN0IGEgc2luZ2xlIHNlbGYuZ29hbCBpcyBub3QgZW5vdWdoLiIiIgogICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5nb2FsLCBsaXN0KToKICAgICAgICAgICAgcmV0dXJuIGlzX2luKHN0YXRlLCBzZWxmLmdvYWwpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIHN0YXRlID09IHNlbGYuZ29hbAoKICAgIGRlZiBwYXRoX2Nvc3Qoc2VsZiwgYywgc3RhdGUxLCBhY3Rpb24sIHN0YXRlMik6CiAgICAgICAgIiIiUmV0dXJuIHRoZSBjb3N0IG9mIGEgc29sdXRpb24gcGF0aCB0aGF0IGFycml2ZXMgYXQgc3RhdGUyIGZyb20KICAgICAgICBzdGF0ZTEgdmlhIGFjdGlvbiwgYXNzdW1pbmcgY29zdCBjIHRvIGdldCB1cCB0byBzdGF0ZTEuIElmIHRoZSBwcm9ibGVtCiAgICAgICAgaXMgc3VjaCB0aGF0IHRoZSBwYXRoIGRvZXNuJ3QgbWF0dGVyLCB0aGlzIGZ1bmN0aW9uIHdpbGwgb25seSBsb29rIGF0CiAgICAgICAgc3RhdGUyLiBJZiB0aGUgcGF0aCBkb2VzIG1hdHRlciwgaXQgd2lsbCBjb25zaWRlciBjIGFuZCBtYXliZSBzdGF0ZTEKICAgICAgICBhbmQgYWN0aW9uLiBUaGUgZGVmYXVsdCBtZXRob2QgY29zdHMgMSBmb3IgZXZlcnkgc3RlcCBpbiB0aGUgcGF0aC4iIiIKICAgICAgICByZXR1cm4gYyArIDEKCiAgICBkZWYgdmFsdWUoc2VsZiwgc3RhdGUpOgogICAgICAgICIiIkZvciBvcHRpbWl6YXRpb24gcHJvYmxlbXMsIGVhY2ggc3RhdGUgaGFzIGEgdmFsdWUuIEhpbGwgQ2xpbWJpbmcKICAgICAgICBhbmQgcmVsYXRlZCBhbGdvcml0aG1zIHRyeSB0byBtYXhpbWl6ZSB0aGlzIHZhbHVlLiIiIgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCgoKY2xhc3MgTm9kZToKICAgICIiIkEgbm9kZSBpbiBhIHNlYXJjaCB0cmVlLiBDb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIHBhcmVudCAodGhlIG5vZGUKICAgIHRoYXQgdGhpcyBpcyBhIHN1Y2Nlc3NvciBvZikgYW5kIHRvIHRoZSBhY3R1YWwgc3RhdGUgZm9yIHRoaXMgbm9kZS4gTm90ZQogICAgdGhhdCBpZiBhIHN0YXRlIGlzIGFycml2ZWQgYXQgYnkgdHdvIHBhdGhzLCB0aGVuIHRoZXJlIGFyZSB0d28gbm9kZXMgd2l0aAogICAgdGhlIHNhbWUgc3RhdGUuIEFsc28gaW5jbHVkZXMgdGhlIGFjdGlvbiB0aGF0IGdvdCB1cyB0byB0aGlzIHN0YXRlLCBhbmQKICAgIHRoZSB0b3RhbCBwYXRoX2Nvc3QgKGFsc28ga25vd24gYXMgZykgdG8gcmVhY2ggdGhlIG5vZGUuIE90aGVyIGZ1bmN0aW9ucwogICAgbWF5IGFkZCBhbiBmIGFuZCBoIHZhbHVlOyBzZWUgYmVzdF9maXJzdF9ncmFwaF9zZWFyY2ggYW5kIGFzdGFyX3NlYXJjaCBmb3IKICAgIGFuIGV4cGxhbmF0aW9uIG9mIGhvdyB0aGUgZiBhbmQgaCB2YWx1ZXMgYXJlIGhhbmRsZWQuIFlvdSB3aWxsIG5vdCBuZWVkIHRvCiAgICBzdWJjbGFzcyB0aGlzIGNsYXNzLiIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGF0ZSwgcGFyZW50PU5vbmUsIGFjdGlvbj1Ob25lLCBwYXRoX2Nvc3Q9MCk6CiAgICAgICAgIiIiQ3JlYXRlIGEgc2VhcmNoIHRyZWUgTm9kZSwgZGVyaXZlZCBmcm9tIGEgcGFyZW50IGJ5IGFuIGFjdGlvbi4iIiIKICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUKICAgICAgICBzZWxmLnBhcmVudCA9IHBhcmVudAogICAgICAgIHNlbGYuYWN0aW9uID0gYWN0aW9uCiAgICAgICAgc2VsZi5wYXRoX2Nvc3QgPSBwYXRoX2Nvc3QKICAgICAgICBzZWxmLmRlcHRoID0gMAogICAgICAgIGlmIHBhcmVudDoKICAgICAgICAgICAgc2VsZi5kZXB0aCA9IHBhcmVudC5kZXB0aCArIDEKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgcmV0dXJuICI8Tm9kZSB7fT4iLmZvcm1hdChzZWxmLnN0YXRlKQoKICAgIGRlZiBfX2x0X18oc2VsZiwgbm9kZSk6CiAgICAgICAgcmV0dXJuIHNlbGYuc3RhdGUgPCBub2RlLnN0YXRlCgogICAgZGVmIGV4cGFuZChzZWxmLCBwcm9ibGVtKToKICAgICAgICAiIiJMaXN0IHRoZSBub2RlcyByZWFjaGFibGUgaW4gb25lIHN0ZXAgZnJvbSB0aGlzIG5vZGUuIiIiCiAgICAgICAgcmV0dXJuIFtzZWxmLmNoaWxkX25vZGUocHJvYmxlbSwgYWN0aW9uKQogICAgICAgICAgICAgICAgZm9yIGFjdGlvbiBpbiBwcm9ibGVtLmFjdGlvbnMoc2VsZi5zdGF0ZSldCgogICAgZGVmIGNoaWxkX25vZGUoc2VsZiwgcHJvYmxlbSwgYWN0aW9uKToKICAgICAgICAiIiJbRmlndXJlIDMuMTBdIiIiCiAgICAgICAgbmV4dF9zdGF0ZSA9IHByb2JsZW0ucmVzdWx0KHNlbGYuc3RhdGUsIGFjdGlvbikKICAgICAgICBuZXh0X25vZGUgPSBOb2RlKG5leHRfc3RhdGUsIHNlbGYsIGFjdGlvbiwgcHJvYmxlbS5wYXRoX2Nvc3Qoc2VsZi5wYXRoX2Nvc3QsIHNlbGYuc3RhdGUsIGFjdGlvbiwgbmV4dF9zdGF0ZSkpCiAgICAgICAgcmV0dXJuIG5leHRfbm9kZQoKICAgIGRlZiBzb2x1dGlvbihzZWxmKToKICAgICAgICAiIiJSZXR1cm4gdGhlIHNlcXVlbmNlIG9mIGFjdGlvbnMgdG8gZ28gZnJvbSB0aGUgcm9vdCB0byB0aGlzIG5vZGUuIiIiCiAgICAgICAgcmV0dXJuIFtub2RlLmFjdGlvbiBmb3Igbm9kZSBpbiBzZWxmLnBhdGgoKVsxOl1dCgogICAgZGVmIHBhdGgoc2VsZik6CiAgICAgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBub2RlcyBmb3JtaW5nIHRoZSBwYXRoIGZyb20gdGhlIHJvb3QgdG8gdGhpcyBub2RlLiIiIgogICAgICAgIG5vZGUsIHBhdGhfYmFjayA9IHNlbGYsIFtdCiAgICAgICAgd2hpbGUgbm9kZToKICAgICAgICAgICAgcGF0aF9iYWNrLmFwcGVuZChub2RlKQogICAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnQKICAgICAgICByZXR1cm4gbGlzdChyZXZlcnNlZChwYXRoX2JhY2spKQoKICAgICMgV2Ugd2FudCBmb3IgYSBxdWV1ZSBvZiBub2RlcyBpbiBicmVhZHRoX2ZpcnN0X2dyYXBoX3NlYXJjaCBvcgogICAgIyBhc3Rhcl9zZWFyY2ggdG8gaGF2ZSBubyBkdXBsaWNhdGVkIHN0YXRlcywgc28gd2UgdHJlYXQgbm9kZXMKICAgICMgd2l0aCB0aGUgc2FtZSBzdGF0ZSBhcyBlcXVhbC4gW1Byb2JsZW06IHRoaXMgbWF5IG5vdCBiZSB3aGF0IHlvdQogICAgIyB3YW50IGluIG90aGVyIGNvbnRleHRzLl0KCiAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShvdGhlciwgTm9kZSkgYW5kIHNlbGYuc3RhdGUgPT0gb3RoZXIuc3RhdGUKCiAgICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAgICAgIyBXZSB1c2UgdGhlIGhhc2ggdmFsdWUgb2YgdGhlIHN0YXRlCiAgICAgICAgIyBzdG9yZWQgaW4gdGhlIG5vZGUgaW5zdGVhZCBvZiB0aGUgbm9kZQogICAgICAgICMgb2JqZWN0IGl0c2VsZiB0byBxdWlja2x5IHNlYXJjaCBhIG5vZGUKICAgICAgICAjIHdpdGggdGhlIHNhbWUgc3RhdGUgaW4gYSBIYXNoIFRhYmxlCiAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5zdGF0ZSkKCmRlZiBiZXN0X2ZpcnN0X2dyYXBoX3NlYXJjaChwcm9ibGVtLCBmLCBkaXNwbGF5PUZhbHNlKToKICAgICIiIlNlYXJjaCB0aGUgbm9kZXMgd2l0aCB0aGUgbG93ZXN0IGYgc2NvcmVzIGZpcnN0LgogICAgWW91IHNwZWNpZnkgdGhlIGZ1bmN0aW9uIGYobm9kZSkgdGhhdCB5b3Ugd2FudCB0byBtaW5pbWl6ZTsgZm9yIGV4YW1wbGUsCiAgICBpZiBmIGlzIGEgaGV1cmlzdGljIGVzdGltYXRlIHRvIHRoZSBnb2FsLCB0aGVuIHdlIGhhdmUgZ3JlZWR5IGJlc3QKICAgIGZpcnN0IHNlYXJjaDsgaWYgZiBpcyBub2RlLmRlcHRoIHRoZW4gd2UgaGF2ZSBicmVhZHRoLWZpcnN0IHNlYXJjaC4KICAgIFRoZXJlIGlzIGEgc3VidGxldHk6IHRoZSBsaW5lICJmID0gbWVtb2l6ZShmLCAnZicpIiBtZWFucyB0aGF0IHRoZSBmCiAgICB2YWx1ZXMgd2lsbCBiZSBjYWNoZWQgb24gdGhlIG5vZGVzIGFzIHRoZXkgYXJlIGNvbXB1dGVkLiBTbyBhZnRlciBkb2luZwogICAgYSBiZXN0IGZpcnN0IHNlYXJjaCB5b3UgY2FuIGV4YW1pbmUgdGhlIGYgdmFsdWVzIG9mIHRoZSBwYXRoIHJldHVybmVkLiIiIgogICAgZiA9IG1lbW9pemUoZiwgJ2YnKQogICAgbm9kZSA9IE5vZGUocHJvYmxlbS5pbml0aWFsKQogICAgcmVtRnJvbnQgPSAwCiAgICBmcm9udGllciA9IFByaW9yaXR5UXVldWUoJ21pbicsIGYpCiAgICBmcm9udGllci5hcHBlbmQobm9kZSkKICAgIGV4cGxvcmVkID0gc2V0KCkKICAgIHdoaWxlIGZyb250aWVyOgogICAgICAgIG5vZGUgPSBmcm9udGllci5wb3AoKQogICAgICAgIHJlbUZyb250ICs9IDEKICAgICAgICBpZiBwcm9ibGVtLmdvYWxfdGVzdChub2RlLnN0YXRlKToKICAgICAgICAgICAgaWYgZGlzcGxheToKICAgICAgICAgICAgICAgIHByaW50KGxlbihleHBsb3JlZCksICJwYXRocyBoYXZlIGJlZW4gZXhwYW5kZWQgYW5kIiwgbGVuKGZyb250aWVyKSwgInBhdGhzIHJlbWFpbiBpbiB0aGUgZnJvbnRpZXIiKQogICAgICAgICAgICBwcmludCgnUmVtb3ZlZCBub2RlcyBmcm9tIGZyb250aWVyOiAnLHJlbUZyb250KQogICAgICAgICAgICByZXR1cm4gbm9kZQogICAgICAgIGV4cGxvcmVkLmFkZChub2RlLnN0YXRlKQogICAgICAgIGZvciBjaGlsZCBpbiBub2RlLmV4cGFuZChwcm9ibGVtKToKICAgICAgICAgICAgaWYgY2hpbGQuc3RhdGUgbm90IGluIGV4cGxvcmVkIGFuZCBjaGlsZCBub3QgaW4gZnJvbnRpZXI6CiAgICAgICAgICAgICAgICBmcm9udGllci5hcHBlbmQoY2hpbGQpCiAgICAgICAgICAgIGVsaWYgY2hpbGQgaW4gZnJvbnRpZXI6CiAgICAgICAgICAgICAgICBpZiBmKGNoaWxkKSA8IGZyb250aWVyW2NoaWxkXToKICAgICAgICAgICAgICAgICAgICBkZWwgZnJvbnRpZXJbY2hpbGRdCiAgICAgICAgICAgICAgICAgICAgZnJvbnRpZXIuYXBwZW5kKGNoaWxkKQogICAgcHJpbnQoJ1JlbW92ZWQgbm9kZXMgZnJvbSBmcm9udGllcjogJyxyZW1Gcm9udCkKICAgIHJldHVybiBOb25lCgpkZWYgYXN0YXJfc2VhcmNoKHByb2JsZW0sIGg9Tm9uZSwgZGlzcGxheT1GYWxzZSk6CiAgICAiIiJBKiBzZWFyY2ggaXMgYmVzdC1maXJzdCBncmFwaCBzZWFyY2ggd2l0aCBmKG4pID0gZyhuKStoKG4pLgogICAgWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgaCBmdW5jdGlvbiB3aGVuIHlvdSBjYWxsIGFzdGFyX3NlYXJjaCwgb3IKICAgIGVsc2UgaW4geW91ciBQcm9ibGVtIHN1YmNsYXNzLiIiIgogICAgaCA9IG1lbW9pemUoaCBvciBwcm9ibGVtLmgsICdoJykKICAgIHJldHVybiBiZXN0X2ZpcnN0X2dyYXBoX3NlYXJjaChwcm9ibGVtLCBsYW1iZGEgbjogbi5wYXRoX2Nvc3QgKyBoKG4pLCBkaXNwbGF5KQoKZGVmIGFzdGFyX3NlYXJjaF9tYW4ocHJvYmxlbSwgaD1Ob25lLCBkaXNwbGF5PUZhbHNlKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgIiIiQSogc2VhcmNoIGlzIGJlc3QtZmlyc3QgZ3JhcGggc2VhcmNoIHdpdGggZihuKSA9IGcobikraChuKS4KICAgIFlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGggZnVuY3Rpb24gd2hlbiB5b3UgY2FsbCBhc3Rhcl9zZWFyY2gsIG9yCiAgICBlbHNlIGluIHlvdXIgUHJvYmxlbSBzdWJjbGFzcy4iIiIKICAgIGggPSBtZW1vaXplKGggb3IgcHJvYmxlbS5tYW5ILCAnaCcpCjx8ZmltX2VuZHw+"]
["0107990d256a4f83719c2942c591ca8ea5898c6d-1","0107990d256a4f83719c2942c591ca8ea5898c6d","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKCmZyb20gbW9kZWwubW9kZWwuY29tbW9uLmRhdGFfcGFnZSBpbXBvcnQgRGF0YVBhZ2UKZnJvbSBtb2RlbC5tb2RlbC5jb21tb24ucGFnaW5hdGlvbiBpbXBvcnQgUGFnaW5hdGlvbgpmcm9tIG1vZGVsLm1vZGVsLmVudW0uZW51bSBpbXBvcnQgRW51bQoKZnJvbSB3YXRjaG1lbl9ib290Lmd1aWQuc25vd2ZsYWtlIGltcG9ydCBnZXRfc3Vycm9nYXRlX2tleQpmcm9tIHdhdGNobWVuLmNvbW1vbi51dGlscy5kYXRhX3V0aWxzIGltcG9ydCBjaGVja19mYWtlX2lkCmZyb20gd2F0Y2htZW4uZGF0YWJhc2UuZmluZF9zdG9yYWdlX3RlbXBsYXRlIGltcG9ydCBmaW5kX3N0b3JhZ2VfdGVtcGxhdGUKCkVOVU1TID0gImVudW1zIgoKRU5VTV9JVEVNUyA9ICJlbnVtX2l0ZW1zIgoKIyB0ZW1wbGF0ZSA9IGZpbmRfdGVtcGxhdGUoKQoKc3RvcmFnZV90ZW1wbGF0ZSA9IGZpbmRfc3RvcmFnZV90ZW1wbGF0ZSgpCgoKZGVmIHNhdmVfZW51bV90b19zdG9yYWdlKGVudW06IEVudW0pOgogICAgaWYgY2hlY2tfZmFrZV9pZChlbnVtLmVudW1JZCk6CiAgICAgICAgZW51bS5lbnVtSWQgPSBnZXRfc3Vycm9nYXRlX2tleSgpCiAgICAgICAgIyBlbnVtLml0ZW1zID0gW10KICAgICAgICAjIHJlc3VsdCA9IHRlbXBsYXRlLmNyZWF0ZShFTlVNUywgZW51bSwgRW51bSkKICAgICAgICByZXN1bHQgPSBzdG9yYWdlX3RlbXBsYXRlLmluc2VydF9vbmUoZW51bSwgRW51bSwgRU5VTVMpCiAgICAgICAgIyBpdGVtcyA9IF9fYWRkX2VudW1faWQoaXRlbXNfY29weSwgcmVzdWx0LmVudW1JZCkKICAgICAgICAjIHNhdmVfZW51bV9pdGVtc190b19zdG9yYWdlKGl0ZW1zX2NvcHksIGVudW0ubmFtZSkKICAgICAgICByZXR1cm4gcmVzdWx0CiAgICBlbHNlOgogICAgICAgICMgaXRlbXNfY29weSA9IGVudW0uaXRlbXMuY29weSgpCiAgICAgICAgIyAjIGVudW0uaXRlbXMgPSBbXQogICAgICAgICMgIyBpdGVtcyA9IF9fYWRkX2VudW1faWQoaXRlbXNfY29weSwgZW51bS5lbnVtSWQpCiAgICAgICAgIyBzYXZlX2VudW1faXRlbXNfdG9fc3RvcmFnZShpdGVtc19jb3B5LCBlbnVtLm5hbWUpCiAgICAgICAgIyAjIHJldHVybiB0ZW1wbGF0ZS51cGRhdGVfb25lKEVOVU1TLCB7ImVudW1JZCI6IGVudW0uZW51bUlkfSwgZW51bSwgRW51bSkKICAgICAgICByZXR1cm4gc3RvcmFnZV90ZW1wbGF0ZS51cGRhdGVfb25lKGVudW0sIEVudW0sIEVOVU1TKQoKCmRlZiBsb2FkX2VudW1fYnlfaWQoZW51bV9pZCwgY3VycmVudF91c2VyKSAtPiBFbnVtOgogICAgIyByZXN1bHQgPSB0ZW1wbGF0ZS5maW5kX29uZShFTlVNUywgeyJlbnVtSWQiOiBlbnVtX2lkfSwgRW51bSkKICAgIGVudW0gPSBzdG9yYWdlX3RlbXBsYXRlLmZpbmRfb25lKHsiYW5kIjogW3siZW51bUlkIjogZW51bV9pZH0sIHsidGVuYW50SWQiOiBjdXJyZW50X3VzZXIudGVuYW50SWR9XX0sIEVudW0sIEVOVU1TKQogICAgIyBlbnVtLml0ZW1zID0gbG9hZF9lbnVtX2l0ZW1zX2J5X2VudW1fbmFtZShlbnVtLm5hbWUsIGN1cnJlbnRfdXNlcikKICAgIHJldHVybiBlbnVtCgoKZGVmIGxvYWRfZW51bV9ieV9wYXJlbnRfaWQocGFyZW50X2lkLCBjdXJyZW50X3VzZXIpIC0+IEVudW06CiAgICAjIHJlc3VsdCA9IHRlbXBsYXRlLmZpbmRfb25lKEVOVU1TLCB7InBhcmVudEVudW1JZCI6IHBhcmVudF9pZH0sIEVudW0pCiAgICByZXN1bHQgPSBzdG9yYWdlX3RlbXBsYXRlLmZpbmRfb25lKHsiYW5kIjogW3sicGFyZW50RW51bUlkIjogcGFyZW50X2lkfSwgeyJ0ZW5hbnRJZCI6IGN1cnJlbnRfdXNlci50ZW5hbnRJZH1dfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW51bSwgRU5VTVMpCiAgICAjIGlmIHJlc3VsdCBpcyBub3QgTm9uZToKICAgICMgICAgIHJlc3VsdC5pdGVtcyA9IGxvYWRfZW51bV9pdGVtc19ieV9lbnVtX25hbWUocmVzdWx0Lm5hbWUsIGN1cnJlbnRfdXNlcikKICAgIHJldHVybiByZXN1bHQgb3IgW10KCgpkZWYgbG9hZF9lbnVtX2xpc3RfYnlfbmFtZShlbnVtX25hbWUsIGN1cnJlbnRfdXNlcikgLT4gTGlzdFtFbnVtXToKPHxmaW1faG9sZXw+CgpkZWYgbG9hZF9hbGxfZW51bV9saXN0KHBhZ2luYXRpb246IFBhZ2luYXRpb24sIGN1cnJlbnRfdXNlcikgLT4gRGF0YVBhZ2U6CiAgICAjIHJldHVybiB0ZW1wbGF0ZS5xdWVyeV93aXRoX3BhZ2luYXRpb24oRU5VTVMsIHBhZ2luYXRpb24sIEVudW0sIHNvcnRfZGljdD17Imxhc3RfbW9kaWZpZWQiOiBweW1vbmdvLkRFU0NFTkRJTkd9KQogICAgcmV0dXJuIHN0b3JhZ2VfdGVtcGxhdGUucGFnZV8oeyJ0ZW5hbnRJZCI6IGN1cnJlbnRfdXNlci50ZW5hbnRJZH0sIFsoImxhc3RfbW9kaWZpZWQiLCAiZGVzYyIpXSwgcGFnaW5hdGlvbiwgRW51bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOVU1TKQoKCmRlZiBxdWVyeV9lbnVtX2xpc3Rfd2l0aF9wYWdpbmF0aW9uKHF1ZXJ5X25hbWU6IHN0ciwgcGFnaW5hdGlvbjogUGFnaW5hdGlvbiwgY3VycmVudF91c2VyKSAtPiBEYXRhUGFnZToKICAgIHJldHVybiBzdG9yYWdlX3RlbXBsYXRlLnBhZ2VfKHsiYW5kIjogW3sibmFtZSI6IHsibGlrZSI6IHF1ZXJ5X25hbWV9fSwgeyJ0ZW5hbnRJZCI6IGN1cnJlbnRfdXNlci50ZW5hbnRJZH1dfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoImxhc3Rtb2RpZmllZCIsICJkZXNjIildLCBwYWdpbmF0aW9uLCBFbnVtLCBFTlVNUykKCgpkZWYgbG9hZF9lbnVtX2xpc3QoY3VycmVudF91c2VyKToKICAgICMgcmV0dXJuIHRlbXBsYXRlLmZpbmRfYWxsKEVOVU1TLCBFbnVtKQogICAgcmV0dXJuIHN0b3JhZ2VfdGVtcGxhdGUuZmluZF8oeyJ0ZW5hbnRJZCI6IGN1cnJlbnRfdXNlci50ZW5hbnRJZH0sIEVudW0sIEVOVU1TKQo8fGZpbV9zdWZmaXh8PgogICAgIyByZXR1cm4gdGVtcGxhdGUuZmluZChFTlVNUywgeyJuYW1lIjogcmVnZXguUmVnZXgoZW51bV9uYW1lKX0sIEVudW0pCiAgICByZXR1cm4gc3RvcmFnZV90ZW1wbGF0ZS5maW5kXyh7ImFuZCI6IFt7Im5hbWUiOiB7Imxpa2UiOiBlbnVtX25hbWV9fSwgeyJ0ZW5hbnRJZCI6IGN1cnJlbnRfdXNlci50ZW5hbnRJZH1dfSwgRW51bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOVU1TKQoKPHxmaW1fZW5kfD4="]
["31f10a4b45a5921f0aebc223947ddd389971133c-2","31f10a4b45a5921f0aebc223947ddd389971133c","PHxmaW1fcHJlZml4fD4KIiIiCk9idGFpbiBjb25maWd1cmF0aW9uIHZhbHVlcyBmcm9tCnRoZSBlbnZpcm9ubWVudCBvciBhIGNvbmZpZ3VyYXRpb24gZmlsZS4KCktub3duIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGFyZToKICAgYXBwX2tleSAgKGEgc3RyaW5nIHVzZWQgdG8gY3J5cHRvZ3JhcGhpY2FsbHkgc2lnbiBjb29raWVzKQoKQXBwcm9hY2g6ICBFbnZpcm9ubWVudCB0YWtlcyBwcmVjZWRlbmNlLiAgV2UgcmVhZAogIGNvbmZpZ3VyYXRpb24gZmlsZSBvbmx5IGlmIHByZXNlbnQgaW4gImFwcC5jb25mIgoKIiIiCmltcG9ydCBvcwppbXBvcnQgbG9nZ2luZwppbXBvcnQgY29uZmlncGFyc2VyCgojIENvbmZpZ3VyYXRpb24gZmlsZXMsIGluIG9yZGVyIG9mIGFjY2Vzcy4gIExhdGVyIGluIG9yZGVyCiMgb3ZlcnJpZGVzIGVhcmxpZXIsIHNvIHN0YXJ0IHdpdGggcHVibGljIGRlZmF1bHRzIGFuZCB0aGVuCiMgdmlzaXQgcGVyLWluc3RhbGxhdGlvbiBhbmQvb3IgcGVyLXVzZXIgc2VjcmV0cyBmb3IgcGFzc3dvcmRzLAojIHRva2VucywgZXRjLgpDT05GSUdfRklMRVMgPSBbImNvbmZpZy5pbmkiXQoKbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5nLkRFQlVHKQoKY29uZmlnX2tleXMgPSBbICJhcHBfa2V5IiwgImRlYnVnIiwgInBvcnQiLCAiaG9zdCIgXQpjb25maWdfZGljdCA9IHsgfQoKdHJhbnNsYXRpb25zID0geyAidHJ1ZSI6IFRydWUsICJmYWxzZSI6IEZhbHNlIH0KCmNvbmZpZyA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmhhdmVfZmlsZSA9IEZhbHNlCmZvciBjb25maWdfZmlsZSBpbiBDT05GSUdfRklMRVM6CiAgICBjb25maWdfZmlsZV9wYXRoID0gZiJ7b3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKX0ve2NvbmZpZ19maWxlfSIKICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbmZpZ19maWxlX3BhdGgpOgo8fGZpbV9lbmR8Pg=="]
["eea9aed4a8150a51044a3b14c2b64ace3e8454d7-3","eea9aed4a8150a51044a3b14c2b64ace3e8454d7","PHxmaW1fcHJlZml4fD4KZnJvbSBBb0NVdGlscyBpbXBvcnQgKgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKcmVzdWx0ID0gMApwYXJ0TnVtYmVyID0gIjEiCjx8ZmltX2VuZHw+"]
["11ec329a16070be86ed42f3b89f1fd2bea3ef6a8-2","11ec329a16070be86ed42f3b89f1fd2bea3ef6a8","PHxmaW1fcHJlZml4fD4KZnJvbSByZXF1ZXN0cyBpbXBvcnQgZ2V0ICMgcmVxdWVzdHMKaW1wb3J0IHN5cyAjCmZyb20gYnM0IGltcG9ydCBCZWF1dGlmdWxTb3VwICMgYmVhdXRpZnVsc291cDQgLyBseG1sCmltcG9ydCB1cmxsaWIucGFyc2UgIwppbXBvcnQgb3MgIwpmcm9tIG1wZWdkYXNoLnBhcnNlciBpbXBvcnQgTVBFR0RBU0hQYXJzZXIgIyBtcGVnZGFzaApmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZXpvbmUKZnJvbSB0cWRtIGltcG9ydCB0cWRtICMgdHFkbQppbXBvcnQgcGxhdGZvcm0KaW1wb3J0IHNodXRpbAppbXBvcnQgcmUKaW1wb3J0IGFyZ3BhcnNlCgoKZGVmIGdldF9tcGRfZGF0YSh2aWRlb191cmwpOgogICAgcmF3X3BhZ2UgPSBnZXQodmlkZW9fdXJsKQogICAgc291cCA9IEJlYXV0aWZ1bFNvdXAocmF3X3BhZ2UudGV4dCwgJ2x4bWwnKQogICAgc2NyaXB0X29iaiA9IHN0cihzb3VwKGlkPSJwbGF5ZXItd3JhcCIpWzBdLmZpbmRfYWxsKCJzY3JpcHQiKVsxXSkuc3BsaXQoIlxcXCIiKQogICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNjcmlwdF9vYmopKToKICAgICAgICBpZiBzY3JpcHRfb2JqW2ldID09ICJkYXNoTWFuaWZlc3RVcmwiOgogICAgICAgICAgICBtcGRfdXJsID0gc2NyaXB0X29ialtpKzJdCiAgICAgICAgICAgIGJyZWFrCiAgICBtcGRfdXJsID0gdXJsbGliLnBhcnNlLnVucXVvdGUobXBkX3VybCkucmVwbGFjZSgiXC8iLCAiLyIpCiAgICBtcGRfZmlsZV9jb250ZW50ID0gZ2V0KG1wZF91cmwpCiAgICByZXR1cm4gbXBkX2ZpbGVfY29udGVudC50ZXh0CgpkZWYgZ2V0X2Jlc3RfcmVwcmVzZW50YXRpb24obXBkX2RhdGEpOgogICAgYmVzdF92aWRlbyA9IE5vbmUKICAgIGJlc3RfdmlkZW9fcmVzID0gMAogICAgYmVzdF9hdWRpbyA9IE5vbmUKICAgIGJlc3RfYXVkaW9fc2FtcGxlID0gMAogICAgbXBkID0gTVBFR0RBU0hQYXJzZXIucGFyc2UobXBkX2RhdGEpCiAgICBmb3IgcGVyaW9kIGluIG1wZC5wZXJpb2RzOgogICAgICAgIGZvciBhZGFwdGF0aW9uc2V0IGluIHBlcmlvZC5hZGFwdGF0aW9uX3NldHM6CiAgICAgICAgICAgIGZvciByZXAgaW4gYWRhcHRhdGlvbnNldC5yZXByZXNlbnRhdGlvbnM6CiAgICAgICAgICAgICAgICBpZiByZXAuaGVpZ2h0ID09IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgaWYgaW50KHJlcC5hdWRpb19zYW1wbGluZ19yYXRlKSA+PSBiZXN0X2F1ZGlvX3NhbXBsZToKICAgICAgICAgICAgICAgICAgICAgICAgYmVzdF9hdWRpbyA9IHJlcAogICAgICAgICAgICAgICAgICAgICAgICBiZXN0X2F1ZGlvX3NhbXBsZSA9IGludChyZXAuYXVkaW9fc2FtcGxpbmdfcmF0ZSkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgaWYgaW50KHJlcC5oZWlnaHQpID49IGJlc3RfdmlkZW9fcmVzOgogICAgICAgICAgICAgICAgICAgICAgICBiZXN0X3ZpZGVvID0gcmVwCiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RfdmlkZW9fcmVzID0gaW50KHJlcC5oZWlnaHQpCiAgICByZXR1cm4gYmVzdF92aWRlbywgYmVzdF9hdWRpbwoKZGVmIHBhcnNlX2RhdGV0aW1lKHMpOgogICAgZGVmIHRyeV9zdHJwdGltZShzLCBmbXQpOgogICAgICAgIHRyeToKICAgICAgICAgICAgcmV0dXJuIGRhdGV0aW1lLnN0cnB0aW1lKHMsIGZtdCkKICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgIGR0ID0gdHJ5X3N0cnB0aW1lKHMsICclSDolTScpCjx8ZmltX2hvbGV8PgogICAgaWYgZHQ6CiAgICAgICAgdG9kYXkgPSBkYXRldGltZS50b2RheSgpCiAgICAgICAgcmV0dXJuIGR0LnJlcGxhY2UoeWVhcj10b2RheS55ZWFyLCBtb250aD10b2RheS5tb250aCwgZGF5PXRvZGF5LmRheSkKICAgIGR0ID0gdHJ5X3N0cnB0aW1lKHMsICclZC4lbSAlSDolTScpCiAgICBpZiBkdDoKICAgICAgICByZXR1cm4gZHQucmVwbGFjZSh5ZWFyPWRhdGV0aW1lLnRvZGF5KCkueWVhcikKICAgIGR0ID0gdHJ5X3N0cnB0aW1lKHMsICclZC4lbS4lWSAlSDolTScpCiAgICBpZiBkdDoKICAgICAgICByZXR1cm4gZHQKICAgIGR0ID0gdHJ5X3N0cnB0aW1lKHMsICclZC4lbSAlSDolTTolUycpCiAgICBpZiBkdDoKICAgICAgICByZXR1cm4gZHQucmVwbGFjZSh5ZWFyPWRhdGV0aW1lLnRvZGF5KCkueWVhcikKICAgIGR0ID0gdHJ5X3N0cnB0aW1lKHMsICclZC4lbS4lWSAlSDolTTolUycpCiAgICBpZiBkdDoKICAgICAgICByZXR1cm4gZHQKICAgIGR0ID0gdHJ5X3N0cnB0aW1lKHMsICclWS0lbS0lZFQlSDolTTolUycpCiAgICBpZiBkdDoKICAgICAgICByZXR1cm4gZHQKICAgIHJldHVybiBOb25lCgpkZWYgcGFyc2VfZHVyYXRpb24ocyk6CiAgICBtID0gcmUubWF0Y2gocideKCg/UDxoPlxkKyloKT8oKD9QPG0+XGQrKW0pPygoP1A8cz5cZCspcyk/JCcsIHMpCiAgICBpZiBub3QgbToKICAgICAgICByZXR1cm4gTm9uZQogICAgaCwgbSwgcyA9IG0uZ3JvdXBkaWN0KCkudmFsdWVzKCkKICAgIGlmIG5vdCBoIGFuZCBub3QgbSBhbmQgbm90IHM6CiAgICAgICAgcmV0dXJuIE5vbmUKICAgIHNlY3MgPSAwCiAgICBpZiBoOgogICAgICAgIHNlY3MgKz0gaW50KGgpICogMzYwMAogICAgaWYgbToKICAgICAgICBzZWNzICs9IGludChtKSAqIDYwCiAgICBpZiBzOgogICAgICAgIHNlY3MgKz0gaW50KHMpCiAgICByZXR1cm4gc2VjcwoKZGVmIG1haW4oZmZtcGVnX2V4ZWN1dGFibGUpOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLW8nLCAnLS1vdXRwdXQnLCBtZXRhdmFyPSdPVVRQVVRfRklMRScsIGFjdGlvbj0nc3RvcmUnLCBoZWxwPSdUaGUgb3V0cHV0IGZpbGVuYW1lJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1zJywgJy0tc3RhcnQnLCBtZXRhdmFyPSdTVEFSVF9USU1FJywgYWN0aW9uPSdzdG9yZScsIGhlbHA9J1RoZSBzdGFydCB0aW1lIChwb3NzaWJsZSBmb3JtYXRzID0gIjEyOjM0IiwgIjEyOjM0OjU2IiwgIjcuOC4yMDA5IDEyOjM0OjU2IiwgIjIwMDktMDgtMDdUMTI6MzQ6NTYiKScpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZScsICctLWVuZCcsIG1ldGF2YXI9J0VORF9USU1FJywgYWN0aW9uPSdzdG9yZScsIGhlbHA9J1RoZSBlbmQgdGltZSAoc2FtZSBmb3JtYXQgYXMgc3RhcnQgdGltZSknKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kdXJhdGlvbicsIGFjdGlvbj0nc3RvcmUnLCBoZWxwPSdUaGUgZHVyYXRpb24gKHBvc3NpYmxlIGZvcm1hdHMgPSAiMTJoMzRtNTZzIiwgIjEybTM0cyIsICIxMjNzIiwgIjEyM20iLCAiMTIzaCIsIC4uLiknKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXUnLCAnLS11dGMnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdVc2UgVVRDIGluc3RlYWQgb2YgbG9jYWwgdGltZSBmb3Igc3RhcnQgYW5kIGVuZCB0aW1lJywgZGVmYXVsdD1GYWxzZSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy15JywgJy0tb3ZlcndyaXRlJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nT3ZlcndyaXRlIGZpbGUgd2l0aG91dCBhc2tpbmcnLCBkZWZhdWx0PUZhbHNlKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgndXJsJywgbWV0YXZhcj0nVVJMJywgYWN0aW9uPSdzdG9yZScsIGhlbHA9J1RoZSBVUkwgb2YgdGhlIFlvdVR1YmUgc3RyZWFtJykKICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCiAgICB1cmwgPSBhcmdzLnVybAogICAgb3V0cHV0X3BhdGggPSBhcmdzLm91dHB1dAogICAgc3RhcnRfdGltZSA9IE5vbmUKICAgIGR1cmF0aW9uX3NlY3MgPSBOb25lCgogICAgZGVmIGFyZ19mYWlsKG1lc3NhZ2UpOgogICAgICAgIHByaW50KG1lc3NhZ2UsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCiAgICAgICAgc3lzLmV4aXQoMSkKCiAgICBpZiBhcmdzLnN0YXJ0OgogICAgICAgIHN0YXJ0X3RpbWUgPSBwYXJzZV9kYXRldGltZShhcmdzLnN0YXJ0KQogICAgICAgIGlmIG5vdCBzdGFydF90aW1lOgogICAgICAgICAgICBhcmdfZmFpbCgnSW52YWxpZCBzdGFydCB0aW1lIGZvcm1hdCcpCiAgICAgICAgc3RhcnRfdGltZSA9IHN0YXJ0X3RpbWUucmVwbGFjZSh0emluZm89dGltZXpvbmUudXRjIGlmIGFyZ3MudXRjIGVsc2UgTm9uZSkuYXN0aW1lem9uZSgpCgogICAgaWYgYXJncy5kdXJhdGlvbiBhbmQgYXJncy5lbmQ6CiAgICAgICAgYXJnX2ZhaWwoJ1NwZWNpZnkgZW5kIHRpbWUgb3IgZHVyYXRpb24sIG5vdCBib3RoJykKCiAgICBpZiBhcmdzLmR1cmF0aW9uOgogICAgICAgIGR1cmF0aW9uX3NlY3MgPSBwYXJzZV9kdXJhdGlvbihhcmdzLmR1cmF0aW9uKQogICAgICAgIGlmIG5vdCBkdXJhdGlvbl9zZWNzOgogICAgICAgICAgICBhcmdfZmFpbCgnSW52YWxpZCBkdXJhdGlvbiBmb3JtYXQnKQogICAgICAgIGlmIGR1cmF0aW9uX3NlY3MgPT0gMDoKICAgICAgICAgICAgYXJnX2ZhaWwoJ0R1cmF0aW9uIGNhbm5vdCBiZSAwJykKCiAgICBpZiBhcmdzLmVuZDoKICAgICAgICBlbmRfdGltZSA9IHBhcnNlX2RhdGV0aW1lKGFyZ3MuZW5kKQogICAgICAgIGlmIG5vdCBlbmRfdGltZToKICAgICAgICAgICAgYXJnX2ZhaWwoJ0ludmFsaWQgZW5kIHRpbWUgZm9ybWF0IScpCiAgICAgICAgZW5kX3RpbWUgPSBlbmRfdGltZS5yZXBsYWNlKHR6aW5mbz10aW1lem9uZS51dGMgaWYgYXJncy51dGMgZWxzZSBOb25lKS5hc3RpbWV6b25lKCkKICAgICAgICBkdXJhdGlvbl9zZWNzID0gKGVuZF90aW1lIC0gc3RhcnRfdGltZSkudG90YWxfc2Vjb25kcygpCiAgICAgICAgaWYgZHVyYXRpb25fc2VjcyA9PSAwOgogICAgICAgICAgICBhcmdfZmFpbCgnRHVyYXRpb24gY2Fubm90IGJlIDAnKQoKICAgIGRhdGEgPSBnZXRfbXBkX2RhdGEodXJsKQogICAgdmlkZW8sIGF1ZGlvID0gZ2V0X2Jlc3RfcmVwcmVzZW50YXRpb24oZGF0YSkKCiAgICB2aWRlb19iYXNlID0gdmlkZW8uYmFzZV91cmxzWzBdLmJhc2VfdXJsX3ZhbHVlICsgIi8iLmpvaW4odmlkZW8uc2VnbWVudF9saXN0c1swXS5zZWdtZW50X3VybHNbMF0ubWVkaWEuc3BsaXQoJy8nKVs6LTNdKQogICAgYXVkaW9fYmFzZSA9IGF1ZGlvLmJhc2VfdXJsc1swXS5iYXNlX3VybF92YWx1ZSArICIvIi5qb2luKGF1ZGlvLnNlZ21lbnRfbGlzdHNbMF0uc2VnbWVudF91cmxzWzBdLm1lZGlhLnNwbGl0KCcvJylbOi0zXSkKICAgIG1heF9zZWcgPSBpbnQodmlkZW8uc2VnbWVudF9saXN0c1swXS5zZWdtZW50X3VybHNbLTFdLm1lZGlhLnNwbGl0KCcvJylbLTNdKQoKICAgIGlmIG5vdCBvdXRwdXRfcGF0aDoKICAgICAgICBwcmludChmIllvdSBjYW4gZ28gYmFjayB7aW50KG1heF9zZWcqMi82MC82MCl9IGhvdXJzIGFuZCB7aW50KG1heF9zZWcqMi82MCU2MCl9IG1pbnV0ZXMgYmFjay4uLiIpCiAgICAgICAgZXhpdCgwKQoKICAgIGlmIG9zLnBhdGguZXhpc3RzKG91dHB1dF9wYXRoKToKICAgICAgICBpZiBhcmdzLm92ZXJ3cml0ZToKICAgICAgICAgICAgb3MucmVtb3ZlKG91dHB1dF9wYXRoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICBwcmludChmJ0ZpbGUgIntvdXRwdXRfcGF0aH0iIGFscmVhZHkgZXhpc3RzISBPdmVyd3JpdGU/IFt5L05dICcsIGVuZD0nJykKICAgICAgICAgICAgICAgIHluID0gaW5wdXQoKS5sb3dlcigpCiAgICAgICAgICAgICAgICBpZiB5biA9PSAnJyBvciB5biA9PSAnbic6CiAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMCkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKG91dHB1dF9wYXRoKQogICAgICAgICAgICAgICAgICAgIGJyZWFrCgogICAgdmlkZW9fZmlsZSA9IG9wZW4oInZpZGVvLnRzIiwgIndiIikKICAgIGF1ZGlvX2ZpbGUgPSBvcGVuKCJhdWRpby50cyIsICJ3YiIpCgogICAgaWYgc3RhcnRfdGltZToKICAgICAgICByZXFfdGltZSA9IGRhdGV0aW1lLnN0cnB0aW1lKGRhdGEuc3BsaXQoInl0Om1wZFJlcXVlc3RUaW1lPVwiIilbLTFdLnNwbGl0KCJcIiIpWzBdLCAiJVktJW0tJWRUJUg6JU06JVMuJWYiKS5yZXBsYWNlKHR6aW5mbz10aW1lem9uZS51dGMpLmFzdGltZXpvbmUoKQogICAgICAgIHNlZ21lbnRzX2JhY2sgPSByb3VuZCgocmVxX3RpbWUgLSBzdGFydF90aW1lKS50b3RhbF9zZWNvbmRzKCkgLyAyKQogICAgICAgIHNlZ21lbnRzX2JhY2sgPSBzZWdtZW50c19iYWNrIGlmIHNlZ21lbnRzX2JhY2sgPCBtYXhfc2VnIGVsc2UgbWF4X3NlZwogICAgICAgIGR1cl9zZWdtZW50cyA9IHJvdW5kKGR1cmF0aW9uX3NlY3MgLyAyKQogICAgICAgIHN0YXJ0X3NlZ21lbnQgPSBtYXhfc2VnIC0gc2VnbWVudHNfYmFjawogICAgICAgIGVuZF9zZWdtZW50ID0gc3RhcnRfc2VnbWVudCArIGR1cl9zZWdtZW50cwogICAgICAgIHRvdGFsX3NlZ21lbnRzID0gcmFuZ2Uoc3RhcnRfc2VnbWVudCwgZW5kX3NlZ21lbnQpCiAgICBlbHNlOgogICAgICAgIHRvdGFsX3NlZ21lbnRzID0gcmFuZ2UobWF4X3NlZykKCiAgICBmb3IgaSBpbiB0cWRtKHRvdGFsX3NlZ21lbnRzKToKICAgICAgICB2aWRlb19maWxlLndyaXRlKGdldChmInt2aWRlb19iYXNlfS97aX0iKS5jb250ZW50KQogICAgICAgIGF1ZGlvX2ZpbGUud3JpdGUoZ2V0KGYie2F1ZGlvX2Jhc2V9L3tpfSIpLmNvbnRlbnQpCgogICAgdmlkZW9fZmlsZS5jbG9zZSgpCiAgICBhdWRpb19maWxlLmNsb3NlKCkKCiAgICBvcy5zeXN0ZW0oZiJ7ZmZtcGVnX2V4ZWN1dGFibGV9IC1oaWRlX2Jhbm5lciAtbG9nbGV2ZWwgMCAtaSBhdWRpby50cyAtaSB2aWRlby50cyAtYyBjb3B5IHtvdXRwdXRfcGF0aH0iKQogICAgb3MucmVtb3ZlKCJ2aWRlby50cyIpCiAgICBvcy5yZW1vdmUoImF1ZGlvLnRzIikKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBwbHQgPSBwbGF0Zm9ybS5zeXN0ZW0oKQogICAgaWYgcGx0ID09ICJXaW5kb3dzIjoKICAgICAgICBpZiBub3QgKG9zLnBhdGguZXhpc3RzKCIuL2Jpbi9mZm1wZWcuZXhlIikgb3Igc2h1dGlsLndoaWNoKCJmZm1wZWciKSk6CiAgICAgICAgICAgIHByaW50KCJSdW4gJ3B5dGhvbiBkb3dubG9hZC5weScgZmlyc3QhIikKICAgICAgICAgICAgZXhpdCgxKQogICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoIi4vYmluL2ZmbXBlZy5leGUiKToKICAgICAgICAgICAgbWFpbigiLlxcYmluXFxmZm1wZWcuZXhlIikKICAgICAgICBlbHNlOgogICAgICAgICAgICBtYWluKCJmZm1wZWciKQogICAgZWxpZiBwbHQgPT0gIkxpbnV4IiBvciBwbHQgPT0gIkRhcndpbiI6CiAgICAgICAgaWYgbm90IHNodXRpbC53aGljaCgiZmZtcGVnIik6CiAgICAgICAgICAgIHByaW50KCJJbnN0YWxsIGZmbXBlZyB0byBwYXRoISIpCiAgICAgICAgICAgIGV4aXQoMSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBtYWluKCJmZm1wZWciKQo8fGZpbV9zdWZmaXh8PgogICAgaWYgZHQ6CiAgICAgICAgdG9kYXkgPSBkYXRldGltZS50b2RheSgpCiAgICAgICAgcmV0dXJuIGR0LnJlcGxhY2UoeWVhcj10b2RheS55ZWFyLCBtb250aD10b2RheS5tb250aCwgZGF5PXRvZGF5LmRheSkKICAgIGR0ID0gdHJ5X3N0cnB0aW1lKHMsICclSDolTTolUycpCjx8ZmltX2VuZHw+"]
["14f288b13c1672290d4369c74b728c8a5b02ec1b-1","14f288b13c1672290d4369c74b728c8a5b02ec1b","PHxmaW1fcHJlZml4fD4KIiIiU29tZSBzaW1wbGUgdW5pdCB0ZXN0cyBmb3IgYml0cyBvZiBjb2RlIHRoYXQgZG8gcXVhbnRpemF0aW9uLiIiIgoKIyBDaHVhbi1aaGVuZyBMZWUgPGN6bGVlQHN0YW5mb3JkLmVkdT4KIyBKdWx5IDIwMjEKCmltcG9ydCB1bml0dGVzdAoKaW1wb3J0IHRvcmNoCgpmcm9tIGV4cGVyaW1lbnRzLmRpZ2l0YWwgaW1wb3J0IFF1YW50aXphdGlvbldpdGhFcXVhbEJpbnNNaXhpbgoKCmNsYXNzIFRlc3RRdWFudGl6YXRpb25NaXhpbih1bml0dGVzdC5UZXN0Q2FzZSk6CgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIHNlbGYubWl4aW4gPSBRdWFudGl6YXRpb25XaXRoRXF1YWxCaW5zTWl4aW4oKQogICAgICAgIHNlbGYubWl4aW4ucGFyYW1zID0gc2VsZi5taXhpbi5kZWZhdWx0X3BhcmFtc190b19hZGQuY29weSgpCgogICAgZGVmIHNldF96ZXJvX2JpdHNfc3RyYXRlZ3koc2VsZiwgc3RyYXRlZ3kpOgogICAgICAgIHNlbGYubWl4aW4ucGFyYW1zWyd6ZXJvX2JpdHNfc3RyYXRlZ3knXSA9IHN0cmF0ZWd5CgogICAgZGVmIHNldF9yb3VuZGluZ19tZXRob2Qoc2VsZiwgbWV0aG9kKToKICAgICAgICBzZWxmLm1peGluLnBhcmFtc1sncm91bmRpbmdfbWV0aG9kJ10gPSBtZXRob2QKCiAgICBkZWYgdGVzdF9xdWFudGl6ZV9zdG9jaGFzdGljX2Jhc2ljKHNlbGYpOgogICAgICAgIHNlbGYuc2V0X3JvdW5kaW5nX21ldGhvZCgnc3RvY2hhc3RpYycpCiAgICAgICAgdmFsdWVzID0gdG9yY2gudGVuc29yKFswLCAzLCA4LCAwLCAzLCAtMV0sIGR0eXBlPXRvcmNoLmZsb2F0NjQpCiAgICAgICAgbmJpdHMgPSB0b3JjaC50ZW5zb3IoWzEsIDEsIDEsIDIsIDIsIDNdLCBkdHlwZT10b3JjaC5pbnQ2NCkKICAgICAgICBpbmRpY2VzID0gc2VsZi5taXhpbi5xdWFudGl6ZSh2YWx1ZXMsIG5iaXRzLCBxcmFuZ2U9NSkKCiAgICAgICAgIyBUaGlzIHNhbml0eSBjaGVjayBqdXN0IGNoZWNrcyB0aGlzIG9uY2UuIFRoZQogICAgICAgICMgYHRlc3RfcXVhbnRpemF0aW9uX3N0b2NoYXN0aWNhbGx5YCB0ZXN0IGJlbG93IGNoZWNrcyB0aGF0IHRoZQogICAgICAgICMgcXVhbnRpemVkIHZhbHVlcyBkaWZmZXIgYmV0d2VlbiBjYWxscywgc2luY2UgdGhlIGF2ZXJhZ2UgY2FuIG9ubHkKICAgICAgICAjIGFwcHJveGltYXRlbHkgbWF0Y2ggdGhlIHRydWUgdmFsdWUgaWYgdGhhdCBoYXBwZW5zLgogICAgICAgIHNlbGYuYXNzZXJ0SW4oaW5kaWNlc1swXSwgWzAsIDFdKQogICAgICAgIHNlbGYuYXNzZXJ0SW4oaW5kaWNlc1sxXSwgWzAsIDFdKQogICAgICAgIHNlbGYuYXNzZXJ0SW4oaW5kaWNlc1syXSwgWzFdKQogICAgICAgIHNlbGYuYXNzZXJ0SW4oaW5kaWNlc1szXSwgWzEsIDJdKQogICAgICAgIHNlbGYuYXNzZXJ0SW4oaW5kaWNlc1s0XSwgWzIsIDNdKQogICAgICAgIHNlbGYuYXNzZXJ0SW4oaW5kaWNlc1s1XSwgWzIsIDNdKQoKICAgIGRlZiB0ZXN0X3F1YW50aXplX2RldGVybWluaXN0aWNfYmFzaWMoc2VsZik6CiAgICAgICAgc2VsZi5zZXRfcm91bmRpbmdfbWV0aG9kKCdkZXRlcm1pbmlzdGljJykKCiAgICAgICAgIyBkbyB0aGlzIGxvdHMgb2YgdGltZXMgdG8gbWFrZSBzdXJlIGl0IGlzIGFjdHVhbGx5IGRldGVybWluaXN0aWMKICAgICAgICBmb3IgaSBpbiByYW5nZSgzMCk6CiAgICAgICAgICAgIHZhbHVlcyA9IHRvcmNoLnRlbnNvcihbMCwgMywgOCwgMCwgMywgLTFdLCBkdHlwZT10b3JjaC5mbG9hdDY0KQogICAgICAgICAgICBuYml0cyA9IHRvcmNoLnRlbnNvcihbMSwgMSwgMSwgMiwgMiwgM10sIGR0eXBlPXRvcmNoLmludDY0KQogICAgICAgICAgICBpbmRpY2VzID0gc2VsZi5taXhpbi5xdWFudGl6ZSh2YWx1ZXMsIG5iaXRzLCBxcmFuZ2U9NSkKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmRpY2VzWzBdLCAwKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZGljZXNbMV0sIDEpCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5kaWNlc1syXSwgMSkKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmRpY2VzWzNdLCAyKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZGljZXNbNF0sIDIpCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5kaWNlc1s1XSwgMykKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiB0ZXN0X3VucXVhbnRpemVfYmFzaWMoc2VsZik6CiAgICAgICAgaW5kaWNlcyA9IHRvcmNoLnRlbnNvcihbMCwgMSwgMCwgMSwgMiwgMywgMSwgNCwgN10sIGR0eXBlPXRvcmNoLmludDY0KQogICAgICAgIG5iaXRzID0gdG9yY2gudGVuc29yKFsxLCAxLCAyLCAyLCAyLCAyLCAzLCAzLCAzXSwgZHR5cGU9dG9yY2guaW50NjQpCiAgICAgICAgdmFsdWVzID0gc2VsZi5taXhpbi51bnF1YW50aXplKGluZGljZXMsIG5iaXRzLCBxcmFuZ2U9NSkKPHxmaW1fZW5kfD4="]
["88d933442089b2af6b249985586181d4e0953985-1","88d933442089b2af6b249985586181d4e0953985","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGF0ZXhpdAppbXBvcnQgc3VicHJvY2VzcwoKaW1wb3J0IG9zCmZyb20gdGVsZWdyYW0uZXh0IGltcG9ydCBVcGRhdGVyLCBQaWNrbGVQZXJzaXN0ZW5jZSwgQ29tbWFuZEhhbmRsZXIsIENhbGxiYWNrUXVlcnlIYW5kbGVyLCBNZXNzYWdlSGFuZGxlciwgRmlsdGVycwpmcm9tIHRlbGVncmFtIGltcG9ydCBUZWxlZ3JhbUVycm9yCgpmcm9tIGNvbnN0YW50cy5jb25zdGFudHMgaW1wb3J0IEpPQl9JTlRFUlZBTF9JTl9TRUNPTkRTLCBzZXNzaW9uX2RhdGFfcGF0aApmcm9tIGNvbnN0YW50cy5lbnZfdmFyaWFibGVzIGltcG9ydCBURUxFR1JBTV9CT1RfVE9LRU4sIFNMQUNLX1dFQkhPT0ssIFNFTlRSWV9OT0RFUywgREVCVUcsIExDRF9FTkRQT0lOVCwgTk9ERV9JUApmcm9tIGNvbnN0YW50cy5sb2dnZXIgaW1wb3J0IGxvZ2dlcgpmcm9tIGNvbnN0YW50cy5tZXNzYWdlcyBpbXBvcnQgQk9UX1NUQVJUVVBfTVNHLCBCT1RfUkVTVEFSVEVEX01TRwpmcm9tIGpvYnMuc2VudHJ5X2pvYnMgaW1wb3J0IHNldHVwX3NlbnRyeV9qb2JzCmZyb20gam9icy5qb2JzIGltcG9ydCBub2RlX2NoZWNrcwpmcm9tIGhhbmRsZXJzLm1lc3NhZ2VfaGFuZGxlcnMgaW1wb3J0IHN0YXJ0LCBjYW5jZWwsIGRpc3BhdGNoX3F1ZXJ5LCBwbGFpbl9pbnB1dAoKIiIiCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpEZWJ1ZyBQcm9jZXNzZXMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiIiIgoKaWYgREVCVUc6CiAgICBjdXJyZW50X2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkKICAgIHRlc3RfZGlyID0gb3Muc2VwLmpvaW4oW2N1cnJlbnRfZGlyLCBvcy5wYXRoLnBhcmRpciwgInRlc3QiXSkKICAgIG1vY2tfYXBpX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKFsncHl0aG9uMycsICctbScsICdodHRwLnNlcnZlcicsICc4MDAwJywgJy0tYmluZCcsICcxMjcuMC4wLjEnXSwgY3dkPXRlc3RfZGlyKQogICAgaW5jcmVhc2VfYmxvY2tfaGVpZ2h0X3BhdGggPSBvcy5zZXAuam9pbihbdGVzdF9kaXIsICJpbmNyZWFzZV9ibG9ja19oZWlnaHQucHkiXSkKICAgIHVwZGF0ZV9sb2NhbF9wcmljZV9mZWVkX3BhdGggPSBvcy5zZXAuam9pbihbdGVzdF9kaXIsICJ1cGRhdGVfcHJpY2VfZmVlZC5weSJdKQoKICAgIGluY3JlYXNlX2Jsb2NrX2hlaWdodF9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihbJ3B5dGhvbjMnLCBpbmNyZWFzZV9ibG9ja19oZWlnaHRfcGF0aF0sIGN3ZD10ZXN0X2RpcikKICAgIHVwZGF0ZV9sb2NhbF9wcmljZV9mZWVkID0gc3VicHJvY2Vzcy5Qb3BlbihbJ3B5dGhvbjMnLCB1cGRhdGVfbG9jYWxfcHJpY2VfZmVlZF9wYXRoXSwgY3dkPXRlc3RfZGlyKQoKCiAgICBkZWYgY2xlYW51cCgpOgogICAgICAgIG1vY2tfYXBpX3Byb2Nlc3MudGVybWluYXRlKCkKICAgICAgICBpbmNyZWFzZV9ibG9ja19oZWlnaHRfcHJvY2Vzcy50ZXJtaW5hdGUoKQogICAgICAgIHVwZGF0ZV9sb2NhbF9wcmljZV9mZWVkLnRlcm1pbmF0ZSgpCgoKICAgIGF0ZXhpdC5yZWdpc3RlcihjbGVhbnVwKQoiIiIKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkJPVCBSRVNUQVJUIFNFVFVQCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoiIiIKCgpkZWYgc2V0dXBfZXhpc3RpbmdfdXNlcihkaXNwYXRjaGVyKToKICAgICIiIgogICAgVGFza3MgdG8gZW5zdXJlIHNtb290aCB1c2VyIGV4cGVyaWVuY2UgZm9yIGV4aXN0aW5nIHVzZXJzIHVwb24gQm90IHJlc3RhcnQKICAgICIiIgoKICAgIGNoYXRfaWRzID0gZGlzcGF0Y2hlci51c2VyX2RhdGEua2V5cygpCiAgICBkZWxldGVfY2hhdF9pZHMgPSBbXQogICAgZm9yIGNoYXRfaWQgaW4gY2hhdF9pZHM6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBkaXNwYXRjaGVyLmJvdC5zZW5kX21lc3NhZ2UoY2hhdF9pZCwgQk9UX1JFU1RBUlRFRF9NU0cpCiAgICAgICAgICAgIGRpc3BhdGNoZXIuam9iX3F1ZXVlLnJ1bl9yZXBlYXRpbmcobm9kZV9jaGVja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWw9Sk9CX0lOVEVSVkFMX0lOX1NFQ09ORFMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dD17CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjaGF0X2lkJzogY2hhdF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZXJfZGF0YSc6IGRpc3BhdGNoZXIudXNlcl9kYXRhW2NoYXRfaWRdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICBleGNlcHQgVGVsZWdyYW1FcnJvciBhcyBlOgogICAgICAgICAgICBpZiAnYm90IHdhcyBibG9ja2VkIGJ5IHRoZSB1c2VyJyBpbiBlLm1lc3NhZ2U6CiAgICAgICAgICAgICAgICBkZWxldGVfY2hhdF9pZHMuYXBwZW5kKGNoYXRfaWQpCiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJHb3QgRXJyb3JcbiIgKyBzdHIoZSkgKyAiXG53aXRoIHRlbGVncmFtIHVzZXIgIiArIHN0cihjaGF0X2lkKSkKCiAgICBmb3IgY2hhdF9pZCBpbiBkZWxldGVfY2hhdF9pZHM6CiAgICAgICAgbG9nZ2VyLmluZm8oIlRlbGVncmFtIHVzZXIgIiArIHN0cihjaGF0X2lkKSArICIgYmxvY2tlZCBtZTsgcmVtb3ZpbmcgaGltIGZyb20gdGhlIHVzZXIgbGlzdCIpCiAgICAgICAgZGVsIGRpc3BhdGNoZXIudXNlcl9kYXRhW2NoYXRfaWRdCiAgICAgICAgZGVsIGRpc3BhdGNoZXIuY2hhdF9kYXRhW2NoYXRfaWRdCiAgICAgICAgZGVsIGRpc3BhdGNoZXIucGVyc2lzdGVuY2UudXNlcl9kYXRhW2NoYXRfaWRdCiAgICAgICAgZGVsIGRpc3BhdGNoZXIucGVyc2lzdGVuY2UuY2hhdF9kYXRhW2NoYXRfaWRdCgogICAgICAgICMgU29tZWhvdyBzZXNzaW9uLmRhdGEgZG9lcyBub3QgZ2V0IHVwZGF0ZWQgaWYgYWxsIHVzZXJzIGJsb2NrIHRoZSBib3QuCiAgICAgICAgIyBUaGF0J3Mgd2h5IHdlIGRlbGV0ZSB0aGUgZmlsZSBvdXJzZWx2ZXMuCiAgICAgICAgaWYgbGVuKGRpc3BhdGNoZXIucGVyc2lzdGVuY2UudXNlcl9kYXRhKSA9PSAwIGFuZCBvcy5wYXRoLmV4aXN0cyhzZXNzaW9uX2RhdGFfcGF0aCk6CiAgICAgICAgICAgIG9zLnJlbW92ZShzZXNzaW9uX2RhdGFfcGF0aCkKCgpkZWYgbWFpbigpOgogICAgIiIiCiAgICBJbml0IHRlbGVncmFtIGJvdCwgYXR0YWNoIGhhbmRsZXJzIGFuZCB3YWl0IGZvciBpbmNvbWluZyByZXF1ZXN0cy4KICAgICIiIgoKICAgICMgSW5pdCB0ZWxlZ3JhbSBib3QKICAgIGJvdCA9IFVwZGF0ZXIoVEVMRUdSQU1fQk9UX1RPS0VOLCBwZXJzaXN0ZW5jZT1QaWNrbGVQZXJzaXN0ZW5jZShmaWxlbmFtZT1zZXNzaW9uX2RhdGFfcGF0aCksIHVzZV9jb250ZXh0PVRydWUpCiAgICBkaXNwYXRjaGVyID0gYm90LmRpc3BhdGNoZXIKCiAgICBzZXR1cF9leGlzdGluZ191c2VyKGRpc3BhdGNoZXI9ZGlzcGF0Y2hlcikKICAgIHNldHVwX3NlbnRyeV9qb2JzKGRpc3BhdGNoZXI9ZGlzcGF0Y2hlcikKCiAgICBkaXNwYXRjaGVyLmFkZF9oYW5kbGVyKENvbW1hbmRIYW5kbGVyKCdzdGFydCcsIHN0YXJ0LCBydW5fYXN5bmM9VHJ1ZSkpCiAgICBkaXNwYXRjaGVyLmFkZF9oYW5kbGVyKENvbW1hbmRIYW5kbGVyKCdjYW5jZWwnLCBjYW5jZWwsIHJ1bl9hc3luYz1UcnVlKSkKICAgIGRpc3BhdGNoZXIuYWRkX2hhbmRsZXIoQ2FsbGJhY2tRdWVyeUhhbmRsZXIoZGlzcGF0Y2hfcXVlcnksIHJ1bl9hc3luYz1UcnVlKSkKICAgIGRpc3BhdGNoZXIuYWRkX2hhbmRsZXIoTWVzc2FnZUhhbmRsZXIoRmlsdGVycy50ZXh0LCBwbGFpbl9pbnB1dCwgcnVuX2FzeW5jPVRydWUpKQoKICAgICMgU3RhcnQgdGhlIGJvdAogICAgYm90LnN0YXJ0X3BvbGxpbmcoKQogICAgbG9nZ2VyLmluZm8oQk9UX1NUQVJUVVBfTVNHKQogICAgbG9nZ2VyLmluZm8oZiIiIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIERlYnVnOiB7REVCVUd9CiAgICBUZWxlZ3JhbSBib3QgdG9rZW46IHsiU0VUIiBpZiBURUxFR1JBTV9CT1RfVE9LRU4gZWxzZSAiTUlTU0lORyEifQo8fGZpbV9lbmR8Pg=="]
["ee16dc82718961763242639183734a1e1cdc60dd-2","ee16dc82718961763242639183734a1e1cdc60dd","PHxmaW1fcHJlZml4fD4KVFJFRV9DSEFSQUNURVIgPSAiIyIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCmRlZiB0cmVlc19mb3Jfc2xvcGUoc2xvcGUsIG1hcCk6CiAgICB0cmVlcyA9IDAKPHxmaW1fZW5kfD4="]
["79dbff9582b8c5a482164d4b504899c24c9ce284-1","79dbff9582b8c5a482164d4b504899c24c9ce284","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBnbG9iCmltcG9ydCBvcwoKaW1wb3J0IHNraW1hZ2UuaW8Kb3MuZW52aXJvblsiTUtMX05VTV9USFJFQURTIl0gPSAiMSIKb3MuZW52aXJvblsiTlVNRVhQUl9OVU1fVEhSRUFEUyJdID0gIjEiCm9zLmVudmlyb25bIk9NUF9OVU1fVEhSRUFEUyJdID0gIjEiCmZyb20gc2NpcHkuc3BhdGlhbC5kaXN0YW5jZSBpbXBvcnQgZXVjbGlkZWFuCgpmcm9tIGZ1bmN0b29scyBpbXBvcnQgcGFydGlhbApmcm9tIG11bHRpcHJvY2Vzc2luZy5wb29sIGltcG9ydCBQb29sCgppbXBvcnQgY3YyCmltcG9ydCBwYW5kYXMgYXMgcGQKCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcHlnZW9pZgppbXBvcnQgdHFkbQoKCmRlZiBzdHJldGNoXzhiaXQoYmFuZHMsIGxvd2VyX3BlcmNlbnQ9MSwgaGlnaGVyX3BlcmNlbnQ9OTkpOgogICAgb3V0ID0gbnAuemVyb3NfbGlrZShiYW5kcykuYXN0eXBlKG5wLmZsb2F0MzIpCiAgICBmb3IgaSBpbiByYW5nZShiYW5kcy5zaGFwZVstMV0pOgogICAgICAgIGEgPSAwCiAgICAgICAgYiA9IDEKICAgICAgICBiYW5kID0gYmFuZHNbOiwgOiwgaV0uZmxhdHRlbigpCiAgICAgICAgZmlsdGVyZWQgPSBiYW5kW2JhbmQgPiAwXQogICAgICAgIGlmIGxlbihmaWx0ZXJlZCkgPT0gMDoKICAgICAgICAgICAgY29udGludWUKICAgICAgICBjID0gbnAucGVyY2VudGlsZShmaWx0ZXJlZCwgbG93ZXJfcGVyY2VudCkKICAgICAgICBkID0gbnAucGVyY2VudGlsZShmaWx0ZXJlZCwgaGlnaGVyX3BlcmNlbnQpCiAgICAgICAgdCA9IGEgKyAoYmFuZHNbOiwgOiwgaV0gLSBjKSAqIChiIC0gYSkgLyAoZCAtIGMpCiAgICAgICAgdFt0IDwgYV0gPSBhCiAgICAgICAgdFt0ID4gYl0gPSBiCiAgICAgICAgb3V0WzosIDosIGldID0gdAogICAgcmV0dXJuIG91dC5hc3R5cGUobnAuZmxvYXQzMikKCgpkZWYgY29udmVydF9pbWFnZSh0aWZfaW1hZ2UsIGRhdGFzZXRfdmVyc2lvbik6CiAgICBpZiBkYXRhc2V0X3ZlcnNpb24gPiAzOgogICAgICAgIHJldHVybiB0aWZfaW1hZ2UKICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIHN0cmV0Y2hfOGJpdCh0aWZfaW1hZ2UpICogMjU1CgoKZGVmIGNyZWF0ZV9tYXNrKGxpbmVzLCB0aGlja25lc3M9MTYpOgogICAgbWFzayA9IG5wLnplcm9zKCgxMzAwLCAxMzAwKSkKICAgIGZvciBsaW5lIGluIGxpbmVzOgogICAgICAgIHdrdF9waXggPSBsaW5lWyJ3a3RfcGl4Il0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGlmICJFTVBUWSIgbm90IGluIHdrdF9waXg6CiAgICAgICAgICAgIGxpbmUgPSB3a3RfcGl4CiAgICAgICAgICAgIHBvaW50cyA9IHB5Z2VvaWYuZnJvbV93a3QobGluZSkuY29vcmRzCiAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihwb2ludHMpKToKPHxmaW1fZW5kfD4="]
["09fe72d7ff75455f2444550cc94414aa92a75b87-4","09fe72d7ff75455f2444550cc94414aa92a75b87","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zLCB1dGlscywgZ2xvYiwgbG9zc2VzCmltcG9ydCBwaWNrbGUKZnJvbSB0b3JjaC51dGlscy5kYXRhIGltcG9ydCBEYXRhTG9hZGVyCmZyb20gZGF0YSBpbXBvcnQgZGF0YXNldHMsIHRyYW5zCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgdG9yY2gsIFRyYW5zTW9yaF9hZmZpbmUKZnJvbSB0b3JjaHZpc2lvbiBpbXBvcnQgdHJhbnNmb3JtcwppbXBvcnQgdG9yY2gubm4gYXMgbm4KZnJvbSBUcmFuc01vcmhfYWZmaW5lIGltcG9ydCBDT05GSUdTIGFzIENPTkZJR1NfVE0KZnJvbSBuYXRzb3J0IGltcG9ydCBuYXRzb3J0ZWQKCmRlZiBzYXZlcGtsKGRhdGEsIHBhdGgpOgogICAgd2l0aCBvcGVuKHBhdGgsICd3YicpIGFzIGY6CiAgICAgICAgcGlja2xlLmR1bXAoZGF0YSwgZikKCmRlZiBtYWluKCk6CiAgICB0ZXN0X2RpciA9ICdEOi9EQVRBL0R1a2UvQWxsX2FkdWx0LycKCgogICAgQWZmSW5mZXIgPSBUcmFuc01vcmhfYWZmaW5lLkFwcGx5QWZmaW5lKCkKICAgIEFmZkluZmVyLmN1ZGEoKQogICAgQWZmSW5mZXJOTiA9IFRyYW5zTW9yaF9hZmZpbmUuQXBwbHlBZmZpbmUobW9kZT0nbmVhcmVzdCcpCiAgICBBZmZJbmZlck5OLmN1ZGEoKQoKICAgIGNvbmZpZyA9IENPTkZJR1NfVE1bJ1RyYW5zTW9ycGgtQWZmaW5lJ10KICAgIEFmZk1vZGVsID0gVHJhbnNNb3JoX2FmZmluZS5UcmFuc01vcnBoQWZmaW5lKGNvbmZpZykKICAgIEFmZk1vZGVsLmxvYWRfc3RhdGVfZGljdCh0b3JjaC5sb2FkKCdleHBlcmltZW50cy9UcmFuc01vcnBoX0FmZmluZS8nICsgbmF0c29ydGVkKG9zLmxpc3RkaXIoJ2V4cGVyaW1lbnRzL1RyYW5zTW9ycGhfQWZmaW5lLycpKVswXSlbJ3N0YXRlX2RpY3QnXSkKICAgIEFmZk1vZGVsLmN1ZGEoKQoKICAgIHJlZ19tb2RlbF9iaWxpbiA9IHV0aWxzLnJlZ2lzdGVyX21vZGVsKCgxNjAsIDE2MCwgMTYwKSwgJ2JpbGluZWFyJykKICAgIHJlZ19tb2RlbF9iaWxpbi5jdWRhKCkKICAgIHJlZ19tb2RlbF9OTiA9IHV0aWxzLnJlZ2lzdGVyX21vZGVsKCgxNjAsIDE2MCwgMTYwKSwgJ25lYXJlc3QnKQogICAgcmVnX21vZGVsX05OLmN1ZGEoKQoKICAgIHRlc3RfY29tcG9zZWQgPSB0cmFuc2Zvcm1zLkNvbXBvc2UoW3RyYW5zLlBhZDNESWZOZWVkZWQoKDE4MCwgMTgwLCAxODApKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnMuQ2VudGVyQ3JvcEJ5U2l6ZSgoMTYwLCAxNjAsIDE2MCkpLAo8fGZpbV9ob2xlfD4KICAgIGZpbGVzID0gZ2xvYi5nbG9iKHRlc3RfZGlyICsgJyoucGtsJykKICAgIHRlc3Rfc2V0ID0gZGF0YXNldHMuQ1RTZWdEYXRhc2V0KGdsb2IuZ2xvYih0ZXN0X2RpciArICcqLnBrbCcpLCB0cmFuc2Zvcm1zPXRlc3RfY29tcG9zZWQpCiAgICB0ZXN0X2xvYWRlciA9IERhdGFMb2FkZXIodGVzdF9zZXQsIGJhdGNoX3NpemU9MSwgc2h1ZmZsZT1GYWxzZSwgbnVtX3dvcmtlcnM9NCwgcGluX21lbW9yeT1UcnVlKQogICAgaWR4ID0gMAogICAgZm9yIGRhdGEgaW4gdGVzdF9sb2FkZXI6CiAgICAgICAgcHJpbnQoZmlsZXNbaWR4XS5zcGxpdCgnXFwnKVstMV0uc3BsaXQoJy4nKVswXSkKICAgICAgICBmaWxlX25hbWUgPSBmaWxlc1tpZHhdLnNwbGl0KCdcXCcpWy0xXS5zcGxpdCgnLicpWzBdCiAgICAgICAgQWZmTW9kZWwuZXZhbCgpCiAgICAgICAgZGF0YSA9IFt0LmN1ZGEoKSBmb3IgdCBpbiBkYXRhXQoKICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgICAgICMgQWZmaW5lIHRyYW5zZm9ybQogICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAgICAgeCA9IGRhdGFbMF07IHhfc2VnID0gZGF0YVsyXQogICAgICAgIHkgPSBkYXRhWzFdOyB5X3NlZyA9IGRhdGFbM10KICAgICAgICB4X2luID0gdG9yY2guY2F0KCh4LCB5KSwgZGltPTEpCiAgICAgICAgY3RfYWZmLCBtYXRzLCBpbnZfbWF0cyA9IEFmZk1vZGVsKHhfaW4pCiAgICAgICAgcGhhbiA9IHkuZGV0YWNoKCkuY2xvbmUoKTsgcGhhbl9zZWcgPSB5X3NlZwogICAgICAgIHBoYW5fc2VnID0gbm4uZnVuY3Rpb25hbC5vbmVfaG90KHBoYW5fc2VnLmxvbmcoKSwgbnVtX2NsYXNzZXM9MTYpCiAgICAgICAgcGhhbl9zZWcgPSB0b3JjaC5zcXVlZXplKHBoYW5fc2VnLCAxKQogICAgICAgIHBoYW5fc2VnID0gcGhhbl9zZWcucGVybXV0ZSgwLCA0LCAxLCAyLCAzKS5jb250aWd1b3VzKCkKICAgICAgICBjdF90YXJfc2VnID0gQWZmSW5mZXJOTih4X3NlZy5mbG9hdCgpLCBtYXRzLmZsb2F0KCkpCiAgICAgICAgY3RfYWZmID0gY3RfYWZmLmNwdSgpLmRldGFjaCgpLm51bXB5KClbMCwgMCwgOiwgOiwgOl0KICAgICAgICBjdF90YXJfc2VnID0gY3RfdGFyX3NlZy5jcHUoKS5kZXRhY2goKS5udW1weSgpWzAsIDAsIDosIDosIDpdCiAgICAgICAgc2F2ZXBrbChkYXRhPShjdF9hZmYsIGN0X3Rhcl9zZWcpLCBwYXRoPSdEOi9EQVRBL0R1a2UvQWxsX2FkdWx0X2FmZmluZS8nICsgZmlsZV9uYW1lICsgJy5wa2wnKQogICAgICAgIGlkeCArPSAxCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgJycnCiAgICBHUFUgY29uZmlndXJhdGlvbgogICAgJycnCiAgICBHUFVfaWRlbiA9IDEKICAgIEdQVV9udW0gPSB0b3JjaC5jdWRhLmRldmljZV9jb3VudCgpCiAgICBwcmludCgnTnVtYmVyIG9mIEdQVTogJyArIHN0cihHUFVfbnVtKSkKICAgIGZvciBHUFVfaWR4IGluIHJhbmdlKEdQVV9udW0pOgogICAgICAgIEdQVV9uYW1lID0gdG9yY2guY3VkYS5nZXRfZGV2aWNlX25hbWUoR1BVX2lkeCkKICAgICAgICBwcmludCgnICAgICBHUFUgIycgKyBzdHIoR1BVX2lkeCkgKyAnOiAnICsgR1BVX25hbWUpCiAgICB0b3JjaC5jdWRhLnNldF9kZXZpY2UoR1BVX2lkZW4pCiAgICBHUFVfYXZhaSA9IHRvcmNoLmN1ZGEuaXNfYXZhaWxhYmxlKCkKICAgIHByaW50KCdDdXJyZW50bHkgdXNpbmc6ICcgKyB0b3JjaC5jdWRhLmdldF9kZXZpY2VfbmFtZShHUFVfaWRlbikpCiAgICBwcmludCgnSWYgdGhlIEdQVSBpcyBhdmFpbGFibGU/ICcgKyBzdHIoR1BVX2F2YWkpKQogICAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zLk51bXB5VHlwZSgobnAuZmxvYXQzMiwgbnAuZmxvYXQzMikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQo8fGZpbV9lbmR8Pg=="]
["14ebe14bdee5fc2d69e0693755161ef7c9e32550-2","14ebe14bdee5fc2d69e0693755161ef7c9e32550","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNzdgppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CgpkZWYgcmVhZF9maWxlKGZpbGUpOgogICAgY2l0aWVzX2RhdGEgPSBbXQogICAgd2l0aCBvcGVuKGZpbGUsICdyJywgZW5jb2Rpbmc9J0lTTy04ODU5LTEnKSBhcyBmOgogICAgICAgIHJvd3MgPSBjc3YuRGljdFJlYWRlcihmKQogICAgICAgIGZvciByIGluIHJvd3M6CiAgICAgICAgICAgIGNpdGllc19kYXRhLmFwcGVuZChyKQogICAgcmV0dXJuIGNpdGllc19kYXRhCgpkZWYgZXh0cmFjdF90b19saXN0KGRhdGEsdHlwZSk6CiAgICBsc3QgPSBbXQogICAgZm9yIGkgaW4gcmFuZ2UobGVuKGRhdGEpKToKICAgICAgICBsc3QuYXBwZW5kKGRhdGFbaV1bdHlwZV0pCiAgICByZXR1cm4gbHN0CgoKY2l0aWVzX2RhdGEgPSByZWFkX2ZpbGUoJ2NpdGllcy5jc3YnKQpsYXQgPSBleHRyYWN0X3RvX2xpc3QoY2l0aWVzX2RhdGEsJ2xhdGl0dWRlJykKbG9uZyA9IGV4dHJhY3RfdG9fbGlzdChjaXRpZXNfZGF0YSwnbG9uZ2l0dWRlJykKPHxmaW1faG9sZXw+CiMgY29sb3I9bG9uZ2l0dWRlCnBsdC5zY2F0dGVyKGxhdCx0ZW1wcyxjPWxvbmcpCiMgQWRkIHgtYXhpcyBsYWJlbApwbHQueGxhYmVsKCdMYXRpdHVkZScpCiMgQWRkIHktYXhpcyBsYWJlbApwbHQueWxhYmVsKCdUZW1wZXJhdHVyZXMnKQojIEFkZCBsYWJlbCBmb3IgY29sb3IgYmFyCnBsdC5jb2xvcmJhcigpLmF4LnNldF90aXRsZSgnTG9uZ3RpdHVkZScpCiMgU2F2ZSBwbG90IGFzIGltYWdlIGZpbGUKcGx0LnNhdmVmaWcoJ2xhdF90ZW1wc19sb25nLnBuZycpCiMgU2hvdyBwbG90CnBsdC5zaG93KCkKcGx0LnNjYXR0ZXIobG9uZyx0ZW1wcyxjPWxhdCkKcGx0LnhsYWJlbCgnTG9uZ2l0dWRlJykKcGx0LnlsYWJlbCgnVGVtcGVyYXR1cmVzJykKcGx0LmNvbG9yYmFyKCkuYXguc2V0X3RpdGxlKCdMYXRpdHVkZScpCiMgU2V0IGNvbG9ybWFwIHRvIHRoZSBzZWxlY3RlZCBvbmUKIyBTZWUgbW9yZSBjb2xvcm1hcCBzZWxlY3Rpb24gaW4gdGhlIHJlZmVyZW5jZSBhdCB0aGUgZW5kIG9mIEV4ZXJjaXNlIDUKcGx0LnNldF9jbWFwKCdSZEJ1JykKcGx0LnNhdmVmaWcoJ2xvbmdfdGVtcHNfbGF0LnBuZycpCnBsdC5zaG93KCkKPHxmaW1fc3VmZml4fD4KdGVtcHMgPSBleHRyYWN0X3RvX2xpc3QoY2l0aWVzX2RhdGEsJ3RlbXBlcmF0dXJlJykKaGlnaCA9IGV4dHJhY3RfdG9fbGlzdChjaXRpZXNfZGF0YSwnaGlnaGVzdCcpCiMgUGxvdCBzY2F0dGVyIHBsb3QgdXNpbmcgeCA9IGxhdGl0dWRlLAojICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSB0ZW1wZXJhdHVyZSwKPHxmaW1fZW5kfD4="]
["0669b26844d8e76a9295a08fd710e08f279c1875-3","0669b26844d8e76a9295a08fd710e08f279c1875","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoKaW1wb3J0IG9zLCBzeXMKaW1wb3J0IHJhbmRvbQppbXBvcnQgbnVtcHkgYXMgbnAKCmltcG9ydCB0b3JjaApmcm9tIHRvcmNoLmF1dG9ncmFkIGltcG9ydCBWYXJpYWJsZQppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm5uLmZ1bmN0aW9uYWwgYXMgRgppbXBvcnQgdG9yY2gub3B0aW0gYXMgb3B0aW0KCicnJwpCYXNpY2FsbHkgdGhlIG1vZGVsIGlzIGluc3BpcmVkIGJ5IHRoZSBWYXJpYXRpb25hbCBSZWN1cnJlbnQgTmV1cmFsIE5ldHdvcmsgKFZSTk4pCmZyb20gaHR0cHM6Ly9hcnhpdi5vcmcvYWJzLzE1MDYuMDIyMTYuCicnJwoKY2xhc3MgTW9kZWwobm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4X2RpbSwgYV9kaW0sIGhfZGltLCB6X2RpbSwgbl9sYXllcnMsIGRldmljZSwgYmlhcz1GYWxzZSk6CiAgICAgICAgc3VwZXIoTW9kZWwsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLnhfZGltID0geF9kaW0KICAgICAgICBzZWxmLmFfZGltID0gYV9kaW0KICAgICAgICBzZWxmLmhfZGltID0gaF9kaW0KICAgICAgICBzZWxmLnpfZGltID0gel9kaW0KICAgICAgICBzZWxmLm5fbGF5ZXJzID0gbl9sYXllcnMKICAgICAgICBzZWxmLmRldmljZSA9IGRldmljZQogICAgICAgIAogICAgICAgICNmZWF0dXJlLWV4dHJhY3RpbmcgdHJhbnNmb3JtYXRpb25zCiAgICAgICAgc2VsZi5waGlfeCA9IG5uLlNlcXVlbnRpYWwoCiAgICAgICAgICAgIG5uLkxpbmVhcih4X2RpbSwgaF9kaW0pLAogICAgICAgICAgICBubi5SZUxVKCksCiAgICAgICAgICAgIG5uLkxpbmVhcihoX2RpbSwgaF9kaW0pLAogICAgICAgICAgICBubi5SZUxVKCkKICAgICAgICApCiAgICAgICAgc2VsZi5waGlfeiA9IG5uLlNlcXVlbnRpYWwoCiAgICAgICAgICAgIG5uLkxpbmVhcih6X2RpbSwgaF9kaW0pLAogICAgICAgICAgICBubi5SZUxVKCkKICAgICAgICApCiAgICAgICAgCiAgICAgICAgI2VuY29kZXIKICAgICAgICBzZWxmLmVuYyA9IG5uLlNlcXVlbnRpYWwoCiAgICAgICAgICAgIG5uLkxpbmVhcihoX2RpbSArIGhfZGltICsgYV9kaW0sIGhfZGltKSwKICAgICAgICAgICAgbm4uUmVMVSgpLAogICAgICAgICAgICBubi5MaW5lYXIoaF9kaW0sIGhfZGltKSwKICAgICAgICAgICAgbm4uUmVMVSgpCiAgICAgICAgKQogICAgICAgIHNlbGYuZW5jX21lYW4gPSBubi5MaW5lYXIoaF9kaW0sIHpfZGltKQogICAgICAgIHNlbGYuZW5jX3N0ZCA9IG5uLlNlcXVlbnRpYWwoCiAgICAgICAgICAgIG5uLkxpbmVhcihoX2RpbSwgel9kaW0pLAogICAgICAgICAgICBubi5Tb2Z0cGx1cygpCiAgICAgICAgKQogICAgICAgIAogICAgICAgICNwcmlvcgogICAgICAgIHNlbGYucHJpb3IgPSBubi5TZXF1ZW50aWFsKAogICAgICAgICAgICBubi5MaW5lYXIoaF9kaW0gKyBhX2RpbSwgaF9kaW0pLAogICAgICAgICAgICBubi5SZUxVKCkKICAgICAgICApCiAgICAgICAgc2VsZi5wcmlvcl9tZWFuID0gbm4uTGluZWFyKGhfZGltLCB6X2RpbSkKICAgICAgICBzZWxmLnByaW9yX3N0ZCA9IG5uLlNlcXVlbnRpYWwoCiAgICAgICAgICAgIG5uLkxpbmVhcihoX2RpbSwgel9kaW0pLAogICAgICAgICAgICBubi5Tb2Z0cGx1cygpCiAgICAgICAgKQoKCQkjZGVjb2RlcgogICAgICAgIHNlbGYuZGVjID0gbm4uU2VxdWVudGlhbCgKICAgICAgICAgICAgbm4uTGluZWFyKGhfZGltICsgaF9kaW0gKyBhX2RpbSwgaF9kaW0pLAogICAgICAgICAgICBubi5SZUxVKCksCiAgICAgICAgICAgIG5uLkxpbmVhcihoX2RpbSwgaF9kaW0pLAogICAgICAgICAgICBubi5SZUxVKCksCiAgICAgICAgICAgIG5uLkxpbmVhcihoX2RpbSwgeF9kaW0pCiAgICAgICAgKQoKCQkjcmVjdXJyZW5jZSAoUG9saWN5IE5ldHdvcmshKQogICAgICAgIHNlbGYucm5uID0gbm4uR1JVKGhfZGltICsgaF9kaW0sIGhfZGltLCBuX2xheWVycywgYmlhcykKICAgICAgICBzZWxmLnBvbGljeSA9IG5uLlNlcXVlbnRpYWwoCiAgICAgICAgICAgIG5uLkxpbmVhcihoX2RpbSwgYV9kaW0pLAogICAgICAgICAgICBubi5UYW5oKCkKICAgICAgICApCgogICAgICAgIHNlbGYucGhpX3gudG8oc2VsZi5kZXZpY2UpCiAgICAgICAgc2VsZi5waGlfei50byhzZWxmLmRldmljZSkKICAgICAgICBzZWxmLmVuYy50byhzZWxmLmRldmljZSkKICAgICAgICBzZWxmLmVuY19tZWFuLnRvKHNlbGYuZGV2aWNlKQogICAgICAgIHNlbGYuZW5jX3N0ZC50byhzZWxmLmRldmljZSkKICAgICAgICBzZWxmLnByaW9yLnRvKHNlbGYuZGV2aWNlKQogICAgICAgIHNlbGYucHJpb3JfbWVhbi50byhzZWxmLmRldmljZSkKICAgICAgICBzZWxmLnByaW9yX3N0ZC50byhzZWxmLmRldmljZSkKICAgICAgICBzZWxmLmRlYy50byhzZWxmLmRldmljZSkKICAgICAgICBzZWxmLnJubi50byhzZWxmLmRldmljZSkKICAgICAgICBzZWxmLnBvbGljeS50byhzZWxmLmRldmljZSkKICAgICAgICAKICAgICAgICBzZWxmLmFsbF9lbmNfbWVhbiA9IFtdCiAgICAgICAgc2VsZi5hbGxfZW5jX3N0ZCA9IFtdCiAgICAgICAgc2VsZi5hbGxfZGVjID0gW10KICAgICAgICBzZWxmLmtsZF9sb3NzID0gMAogICAgICAgIHNlbGYubmxsX2xvc3MgPSAwCiAgICAKICAgIGRlZiBpbml0X3N0YXRlcyhzZWxmLCBoPU5vbmUsIHByZXZfYT1Ob25lKToKICAgICAgICBpZiBoIGlzIE5vbmU6CiAgICAgICAgICAgIGggPSB0b3JjaC56ZXJvcyhzZWxmLm5fbGF5ZXJzLCAxLCBzZWxmLmhfZGltLCBkZXZpY2U9c2VsZi5kZXZpY2UsIGR0eXBlPXRvcmNoLmZsb2F0MzIpLnJlcXVpcmVzX2dyYWRfKCkKICAgICAgICAgICAgcHJldl9hID0gdG9yY2guemVyb3MoMSwgc2VsZi5hX2RpbSwgZGV2aWNlPXNlbGYuZGV2aWNlLCBkdHlwZT10b3JjaC5mbG9hdDMyKS5yZXF1aXJlc19ncmFkXygpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaCA9IGguY2xvbmUoKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHByZXZfYSA9IHByZXZfYS5jbG9uZSgpCjx8ZmltX2VuZHw+"]
["aeeec53e8b436b82316b5364af3ac7a04ef9e2ae-2","aeeec53e8b436b82316b5364af3ac7a04ef9e2ae","PHxmaW1fcHJlZml4fD4KZnJvbSBobW1sZWFybiBpbXBvcnQgaG1tCmZyb20gc2tsZWFybi5iYXNlIGltcG9ydCBCYXNlRXN0aW1hdG9yCmltcG9ydCBudW1weSBhcyBucAoKIyBsYW1iZGEgd2hpY2ggZmxhdHRlbnMgbGlzdCBvZiBsaXN0cwpmbGF0dGVuID0gbGFtYmRhIGw6IFtpdGVtIGZvciBzdWJsaXN0IGluIGwgZm9yIGl0ZW0gaW4gc3VibGlzdF0KCmNsYXNzIEhNTShCYXNlRXN0aW1hdG9yKToKICAgICIiIlNpbmdsZSBzcGFjZWQgaGlkZGVuIG1hcmtvdiBtb2RlbCBjbGFzc2lmaWVyLiIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbXBvbmVudHMpOgogICAgICAgIHNlbGYuY29tcG9uZW50cyA9IGNvbXBvbmVudHMKICAgICAgICBzZWxmLmZsYXR0ZW4gPSBsYW1iZGEgbDogW2l0ZW0gZm9yIHN1Ymxpc3QgaW4gbCBmb3IgaXRlbSBpbiBzdWJsaXN0XQoKICAgIGRlZiBmaXQoc2VsZiwgWCwgeSk6Cjx8ZmltX2hvbGV8PgogICAgICAgICAgICBpZiB5W2ldIG5vdCBpbiBkaWN0X3k6CiAgICAgICAgICAgICAgICBkaWN0X3lbeVtpXV0gPSBbXQogICAgICAgICAgICAKICAgICAgICAgICAgZGljdF95W3lbaV1dLmFwcGVuZChYW2ldKQogICAgICAgIAogICAgICAgIHNlbGYubW9kZWxzID0gZGljdCgpCgogICAgICAgICMgTWFrZSBhbmQgZml0IG1vZGVsIGZvciBlYWNoIGxhYmVsCiAgICAgICAgZm9yIHlfaywgWF9saXN0IGluIGRpY3RfeS5pdGVtcygpOgogICAgICAgICAgICBYX2xlbiA9IFtsZW4oeCkgZm9yIHggaW4gWF9saXN0XQogICAgICAgICAgICBYX3RtcCA9IG5wLmFycmF5KGZsYXR0ZW4oWF9saXN0KSkucmVzaGFwZSgtMSwgMSkKICAgICAgICAgICAgCiAgICAgICAgICAgIHNlbGYubW9kZWxzW3lfa10gPSBobW0uR2F1c3NpYW5ITU0obl9jb21wb25lbnRzPXNlbGYuY29tcG9uZW50cykuZml0KFhfdG1wLCBsZW5ndGhzPVhfbGVuKQogICAgICAgIAogICAgICAgIHJldHVybiBzZWxmCiAgICAgICAgCiAgICBkZWYgcHJlZGljdChzZWxmLCBYKToKICAgICAgICBwcmVkaWN0cyA9IFtdCiAgICAgICAgZm9yIGJyYW5jaCBpbiBYOgogICAgICAgICAgICAjIGdldCBsZW4gb2YgYnJhbmNoIGFuZCByZXNoYXBlIGl0CiAgICAgICAgICAgIGJfbGVuID0gbGVuKGJyYW5jaCkKICAgICAgICAgICAgYnJhbmNoID0gbnAuYXJyYXkoYnJhbmNoKS5yZXNoYXBlKC0xLCAxKQogICAgICAgICAgICBiZXN0X3kgPSAtMQogICAgICAgICAgICBiZXN0X3Njb3JlID0gTm9uZQogICAgICAgICAgICBmb3IgeSwgbW9kZWwgaW4gc2VsZi5tb2RlbHMuaXRlbXMoKToKICAgICAgICAgICAgICAgIHNjb3JlID0gbW9kZWwuc2NvcmUoYnJhbmNoLCBsZW5ndGhzPVtiX2xlbl0pCiAgICAgICAgICAgICAgICBpZiBiZXN0X3Njb3JlIGlzIE5vbmUgb3Igc2NvcmUgPiBiZXN0X3Njb3JlOgogICAgICAgICAgICAgICAgICAgIGJlc3RfeSA9IHkKICAgICAgICAgICAgICAgICAgICBiZXN0X3Njb3JlID0gc2NvcmUKICAgICAgICAgICAgCiAgICAgICAgICAgIHByZWRpY3RzLmFwcGVuZChiZXN0X3kpCiAgICAgICAgCiAgICAgICAgcmV0dXJuIHByZWRpY3RzCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZGljdF95ID0gZGljdCgpCgogICAgICAgICMgUGFydGl0aW9uIGRhdGEgaW4gbGFiZWxzCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKFgpKToKPHxmaW1fZW5kfD4="]
["6d7471a9b00f33640d22b3e0f85dbdd842b30f5d-1","6d7471a9b00f33640d22b3e0f85dbdd842b30f5d","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgQ29weXJpZ2h0IChjKSAyMDE4IFRoZSBaY2FzaCBkZXZlbG9wZXJzCiMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBzb2Z0d2FyZSBsaWNlbnNlLCBzZWUgdGhlIGFjY29tcGFueWluZwojIGZpbGUgQ09QWUlORyBvciBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocC4KCjx8ZmltX2VuZHw+"]
["1160f4123f8845544b624449f0f7917892d84488-5","1160f4123f8845544b624449f0f7917892d84488","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCgojRXhhbXBsZTogIG51bWJlci5udW1iZXIgKyBudW1iZXIubnVtYmVyCiMgMC4xICsgMC4yID0gMC4zMDAwMDAwMDAwMDAwMDAwNAoKcGFydHMgPSByZS5jb21waWxlKHInKFswLTkuXSopKFsrKi0vXVswLTkuXSopJykKCmRlZiBiYWRQYXJzZXIodXNlcl9pbnB1dCk6CiAgICAjIFJlbW92ZSBzcGFjZXMgZnJvbSB1c2VyX2lucHV0CiAgICB1c2VyX2lucHV0ID0gdXNlcl9pbnB1dC5yZXBsYWNlKCIgIiwgIiIpCiAgICBzdGF0ZSA9IEZhbHNlCiAgICAjIFJlZ3VsYXIgZXhwcmVzc2lvbi4uLiBzb3JyeQogICAgZm9yIChncm91cDEsIGNoYW5nZSkgaW4gcmUuZmluZGFsbChwYXJ0cywgdXNlcl9pbnB1dCk6CiAgICAgICAgaWYoc3RhdGUgPT0gRmFsc2UpOgogICAgICAgICAgICAjIFNldCBJbml0aWFsIG51bWJlcgogICAgICAgICAgICBzdGF0ZSA9IGdldE51bWJlcihncm91cDEpCiAgICAgICAgc3RhdGUgPSBwYXJzZUNoYW5nZShzdGF0ZSwgY2hhbmdlKQogICAgcmV0dXJuIGdldE51bWJlcihzdGF0ZSkKCmRlZiBwYXJzZUNoYW5nZShzdGF0ZSwgY2hhbmdlKToKICAgICMgYWN0aW9uIGNhbiBiZSArIC0gKiAvCiAgICBhY3Rpb24gPSBjaGFuZ2VbMF0KICAgICMgcmVtb3ZlIGFjdGlvbiBmcm9tIGNoYW5nZQogICAgbnVtYmVyMiA9IGdldE51bWJlcihjaGFuZ2VbMTpdKQogICAgaWYoYWN0aW9uID09ICIqIik6CiAgICAgICAgcmV0dXJuIHN0YXRlICogbnVtYmVyMgogICAgaWYoYWN0aW9uID09ICIrIik6CiAgICAgICAgcmV0dXJuIHN0YXRlICsgbnVtYmVyMgogICAgaWYoYWN0aW9uID09ICIvIik6CiAgICAgICAgaWYobnVtYmVyMiA9PSAwKToKICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiBDYW5ub3QgZGl2aWRlIGJ5IDAiKQogICAgICAgICAgICByZXR1cm4gc3RhdGUKICAgICAgICByZXR1cm4gc3RhdGUgLyBudW1iZXIyCiAgICBpZihhY3Rpb24gPT0gIi0iKToKICAgICAgICByZXR1cm4gc3RhdGUgLSBudW1iZXIyCiAgICAKZGVmIGdldE51bWJlcihzdHJpbmcpOgogICAgI0Zsb2F0IG9yIGludCAoSXRzIGEgbWVzcykKICAgIGlmICIuIiBpbiBzdHIoc3RyaW5nKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJldHVybiBmbG9hdChzdHJpbmcpCiAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgIHJldHVybiAwCiAgICBlbHNlOgogICAgICAgIHRyeToKICAgICAgICAgICAgcmV0dXJuIGludChzdHJpbmcpCiAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Cjx8ZmltX2hvbGV8PgpkZWYgaGVhZGVyKCk6CiAgICBwcmludCgiQSBDYWxjdWxhdG9yXG5BY3Rpb25zOiAqICsgLSAvIikKCmhlYWRlcigpCndoaWxlIFRydWU6CiAgICB1c2VyX2lucHV0ID0gaW5wdXQoIlF1ZXN0aW9uOiAiKQogICAgYW5zd2VyID0gYmFkUGFyc2VyKHVzZXJfaW5wdXQpCiAgICBwcmludChhbnN3ZXIpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHJldHVybiAwCgo8fGZpbV9lbmR8Pg=="]
["badf9a7f9c8c00a121a0ea9762f49ce471ae8ba8-4","badf9a7f9c8c00a121a0ea9762f49ce471ae8ba8","PHxmaW1fcHJlZml4fD4KJycnCk1ldGhvZHMgZm9yIG1hcHBpbmcgYmFzZWxpbmUgVDEsIGN1cnJlbnRseSBvbiB2YXJpYWJsZSBmbGlwIGFuZ2xlIChWRkEpIHN1cHBvcnRlZAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CicnJwpfX2FsbF9fID0gWydWRkEnXQo8fGZpbV9lbmR8Pg=="]
["307cbfd6a4c427fcf9dd6ca3056d586f796baee2-1","307cbfd6a4c427fcf9dd6ca3056d586f796baee2","PHxmaW1fcHJlZml4fD4KIyBJbnN0YWxsIHJlcXVpcmVkIHBhY2thZ2VzOiAKIyAKIyAgIHBpcDMgaW5zdGFsbCBweW1hdmxpbmsKIyAgIHBpcDMgaW5zdGFsbCBhcHNjaGVkdWxlcgojICAgcGlwMyBpbnN0YWxsIG9wZW5jdi1weXRob24KIyAgIHBpcDMgaW5zdGFsbCBhaXJzaW0KIyAgIHBpcDMgaW5zdGFsbCBudW1weQojICAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgcHl0aG9uLVBJTAoKaW1wb3J0IG1hdGgKaW1wb3J0IHN5cwppbXBvcnQgdGltZQppbXBvcnQgYWlyc2ltCmZyb20gY3YyIGltcG9ydCBjdjIKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gUElMIGltcG9ydCBJbWFnZQppbXBvcnQgdGhyZWFkaW5nCmZyb20gdGltZSBpbXBvcnQgc2xlZXAKZnJvbSBhcHNjaGVkdWxlci5zY2hlZHVsZXJzLmJhY2tncm91bmQgaW1wb3J0IEJhY2tncm91bmRTY2hlZHVsZXIKZnJvbSBweW1hdmxpbmsgaW1wb3J0IG1hdnV0aWwKaW1wb3J0IGFyZ3BhcnNlCgpzeXMucGF0aC5hcHBlbmQoIi91c3IvbG9jYWwvbGliLyIpCgojIFNldCBNQVZMaW5rIHByb3RvY29sIHRvIDIuCmltcG9ydCBvcwoKb3MuZW52aXJvblsiTUFWTElOSzIwIl0gPSAiMSIKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgUGFyc2luZyB1c2VyJyBpbnB1dHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nUmVib290cyB2ZWhpY2xlJykKcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1jb25uZWN0JywKICAgICAgICAgICAgICAgICAgICBoZWxwPSJWZWhpY2xlIGNvbm5lY3Rpb24gdGFyZ2V0IHN0cmluZy4gSWYgbm90IHNwZWNpZmllZCwgYSBkZWZhdWx0IHN0cmluZyB3aWxsIGJlIHVzZWQuIikKcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1iYXVkcmF0ZScsIHR5cGU9ZmxvYXQsCiAgICAgICAgICAgICAgICAgICAgaGVscD0iVmVoaWNsZSBjb25uZWN0aW9uIGJhdWRyYXRlLiBJZiBub3Qgc3BlY2lmaWVkLCBhIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSB1c2VkLiIpCnBhcnNlci5hZGRfYXJndW1lbnQoJy0tb2JzdGFjbGVfZGlzdGFuY2VfbXNnX2h6JywgdHlwZT1mbG9hdCwKICAgICAgICAgICAgICAgICAgICBoZWxwPSJVcGRhdGUgZnJlcXVlbmN5IGZvciBPQlNUQUNMRV9ESVNUQU5DRSBtZXNzYWdlLiBJZiBub3Qgc3BlY2lmaWVkLCBhIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSB1c2VkLiIpCgphcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQoKIyBEZWZhdWx0IGNvbmZpZ3VyYXRpb25zIGZvciBjb25uZWN0aW9uIHRvIHRoZSBGQ1UKaWYgbm90IGFyZ3MuY29ubmVjdDoKICAgIGNvbm5lY3Rpb25fc3RyaW5nID0gJ2xvY2FsaG9zdDoxNDU1MScKZWxzZToKICAgIGNvbm5lY3Rpb25fc3RyaW5nID0gYXJncy5jb25uZWN0CgppZiBub3QgYXJncy5iYXVkcmF0ZToKICAgIGNvbm5lY3Rpb25fYmF1ZHJhdGUgPSA5MjE2MDAKZWxzZToKICAgIGNvbm5lY3Rpb25fYmF1ZHJhdGUgPSBhcmdzLmJhdWRyYXRlCgppZiBub3QgYXJncy5vYnN0YWNsZV9kaXN0YW5jZV9tc2dfaHo6CiAgICBvYnN0YWNsZV9kaXN0YW5jZV9tc2dfaHogPSAxNQplbHNlOgogICAgb2JzdGFjbGVfZGlzdGFuY2VfbXNnX2h6ID0gYXJncy5vYnN0YWNsZV9kaXN0YW5jZV9tc2dfaHoKCiMgQWlyU2ltIEFQSQpjbGllbnQgPSBhaXJzaW0uTXVsdGlyb3RvckNsaWVudCgpCmNsaWVudC5jb25maXJtQ29ubmVjdGlvbigpCmNsaWVudC5lbmFibGVBcGlDb250cm9sKFRydWUpCgpERVBUSF9SQU5HRV9NID0gWzAuMywgMTJdICMgZGVwdGggcmFuZ2UsIHRvIGJlIGNoYW5nZWQgYXMgcGVyIHJlcXVpcmVtZW50cwpNQVhfREVQVEggPSA5OTk5ICMgYXJiaXRyYXJ5IGxhcmdlIG51bWJlciAKCiNudW1weSBhcnJheSB0byBzaGFyZSBvYnN0YWNsZSBjb29yZGluYXRlcyBiZXR3ZWVuIG1haW4gdGhyZWFkIGFuZCBtYXZsaW5rIHRocmVhZAptYXZsaW5rX29ic3RhY2xlX2Nvb3JkaW5hdGVzID0gbnAub25lcygoOSwzKSwgZHR5cGUgPSBucC5mbG9hdCkgKiAoTUFYX0RFUFRIKQoKIyBnZXQgdGltZSBpbiBjb3JyZWN0IGZvcm1hdApzdGFydF90aW1lID0gIGludChyb3VuZCh0aW1lLnRpbWUoKSAqIDEwMDApKQpjdXJyZW50X21pbGxpX3RpbWUgPSBsYW1iZGE6IGludChyb3VuZCh0aW1lLnRpbWUoKSAqIDEwMDApIC0gc3RhcnRfdGltZSkKCiMgZ2V0IGRlcHRoIGZyb20gYWlyc2ltIGJhY2tlbmQKZGVmIGdldF9kZXB0aChjbGllbnQpOgogICAgcmVxdWVzdHMgPSBbXQogICAgcmVxdWVzdHMuYXBwZW5kKGFpcnNpbS5JbWFnZVJlcXVlc3QoCiAgICAgICAgICAgICAgICAnZnJvbnRfY2VudGVyJywgYWlyc2ltLkltYWdlVHlwZS5EZXB0aFBsYW5uZXIsIHBpeGVsc19hc19mbG9hdD1UcnVlLCBjb21wcmVzcz1GYWxzZSkpCgogICAgcmVzcG9uc2VzID0gY2xpZW50LnNpbUdldEltYWdlcyhyZXF1ZXN0cykKICAgIGRlcHRoID0gYWlyc2ltLmxpc3RfdG9fMmRfZmxvYXRfYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VzWzBdLmltYWdlX2RhdGFfZmxvYXQsIHJlc3BvbnNlc1swXS53aWR0aCwgcmVzcG9uc2VzWzBdLmhlaWdodCkKICAgIGRlcHRoID0gbnAuZXhwYW5kX2RpbXMoZGVwdGgsIGF4aXM9MikKICAgIGRlcHRoID0gZGVwdGguc3F1ZWV6ZSgpCiAgICByZXR1cm4gZGVwdGgsIHJlc3BvbnNlc1swXS53aWR0aCwgcmVzcG9uc2VzWzBdLmhlaWdodAoKIyB0aGlzIG1ldGhvZCBjb252ZXJ0cywgKHgseSkgZnJvbSBkZXB0aCBtYXRyaXggdG8gTkVVIDMtRCB2ZWN0b3IgaW4gYm9keSBmcmFtZQpkZWYgY29udmVydF9kZXB0aF8zRF92ZWMoeF9kZXB0aCwgeV9kZXB0aCwgZGVwdGgsIGZvdik6CiAgICAjIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzYyMDQ2NjY2L2ZpbmQtM2QtY29vcmRpbmF0ZS13aXRoLXJlc3BlY3QtdG8tdGhlLWNhbWVyYS11c2luZy0yZC1pbWFnZS1jb29yZGluYXRlcwogICAgaCwgdyA9IGRlcHRoLnNoYXBlCiAgICBjZW50ZXJfeCA9IHcgLy8gMgogICAgY2VudGVyX3kgPSBoIC8vIDIKICAgIGZvY2FsX2xlbiA9IHcgLyAoMiAqIG5wLnRhbihmb3YgLyAyKSkKICAgIHggPSBkZXB0aFt5X2RlcHRoLCB4X2RlcHRoXQogICAgeSA9ICh4X2RlcHRoIC0gY2VudGVyX3gpICogeCAvIGZvY2FsX2xlbgogICAgeiA9IC0xICogKHlfZGVwdGggLSBjZW50ZXJfeSkgKiB4IC8gZm9jYWxfbGVuCiAgICByZXR1cm4geCx5LHoKCiMgZGl2aWRlIHRoZSBkZXB0aCBkYXRhIGludG8gYSAzeDMgZ3JpZC4gUGljayBvdXQgdGhlIHNtYWxsZXN0IGRpc3RhbmNlIGluIGVhY2ggZ3JpZAojIHN0b3JlIHRoZSB4LHkgb2YgdGhlIGRlcHRoIG1hdHJpeCwgdGhlIDkgZGVwdGhzLCBhbmQgY29udmVydCB0aGVtIGludG8gYm9keS1mcmFtZSB4LHksegpkZWYgZGlzdGFuY2VzX2Zyb21fZGVwdGhfaW1hZ2UoZGVwdGhfbWF0LCBtaW5fZGVwdGhfbSwgbWF4X2RlcHRoX20sIGRlcHRoLCBkZXB0aF9jb29yZGluYXRlcywgb2JzdGFjbGVfY29vcmRpbmF0ZXMsIHZhbGlkX2RlcHRoKToKICAgICMgUGFyYW1ldGVycyBmb3IgZGVwdGggaW1hZ2UKICAgIGRlcHRoX2ltZ193aWR0aCAgPSBkZXB0aF9tYXQuc2hhcGVbMV0KICAgIGRlcHRoX2ltZ19oZWlnaHQgPSBkZXB0aF9tYXQuc2hhcGVbMF0KICAgIAogICAgIyBQYXJhbWV0ZXJzIGZvciBvYnN0YWNsZSBkaXN0YW5jZSBtZXNzYWdlCiAgICBzdGVwX3ggPSBkZXB0aF9pbWdfd2lkdGggLyAyMAogICAgc3RlcF95ID0gZGVwdGhfaW1nX2hlaWdodC8gMjAKCiAgICAKICAgIHNhbXBsaW5nX3dpZHRoID0gaW50KDEvMyAqIGRlcHRoX2ltZ193aWR0aCkKICAgIHNhbXBsaW5nX2hlaWdodCA9IGludCgxLzMqIGRlcHRoX2ltZ19oZWlnaHQpCiAgICAjIGRpdmlkZSB0aGUgZnJhbWUgaW50byAzeDMgZ3JpZCB0byBmaW5kIHRoZSBtaW5pbXVtIGRlcHRoIHZhbHVlIGluICI5IGJveGVzIgogICAgZm9yIGkgaW4gcmFuZ2UoOSk6CiAgICAgICAgaWYgaSUzID09IDAgYW5kIGkgIT0gMDogCiAgICAgICAgICAgIHNhbXBsaW5nX3dpZHRoID0gaW50KDEvMyogZGVwdGhfaW1nX3dpZHRoKQogICAgICAgICAgICBzYW1wbGluZ19oZWlnaHQgPSBzYW1wbGluZ19oZWlnaHQgKyBpbnQoMS8zICogZGVwdGhfaW1nX2hlaWdodCkKCiAgICAgICAgeCx5ID0gMCwwCiAgICAgICAgeCA9IHNhbXBsaW5nX3dpZHRoIC0gaW50KDEvMyAqIGRlcHRoX2ltZ193aWR0aCkKCiAgICAgICAgd2hpbGUgeCA8IHNhbXBsaW5nX3dpZHRoOgogICAgICAgICAgICB4ID0geCArIHN0ZXBfeAogICAgICAgICAgICB5ID0gc2FtcGxpbmdfaGVpZ2h0IC0gaW50KDEvMyogZGVwdGhfaW1nX2hlaWdodCkKICAgICAgICAgICAgd2hpbGUgeSA8IHNhbXBsaW5nX2hlaWdodDoKICAgICAgICAgICAgICAgIHkgPSB5ICsgc3RlcF95CiAgICAgICAgICAgICAgICAjIG1ha2Ugc3VyZSBjb29yZGluYXRlcyBzdGF5IHdpdGhpbiBtYXRyaXggbGltaXRzCiAgICAgICAgICAgICAgICB4X3BpeGVsID0gMCBpZiB4IDwgMCBlbHNlIGRlcHRoX2ltZ193aWR0aC0xIGlmIHggPiBkZXB0aF9pbWdfd2lkdGggLTEgZWxzZSBpbnQoeCkKICAgICAgICAgICAgICAgIHlfcGl4ZWwgPSAwIGlmIHkgPCAwIGVsc2UgZGVwdGhfaW1nX2hlaWdodC0xIGlmIHkgPiBkZXB0aF9pbWdfaGVpZ2h0IC0xIGVsc2UgaW50KHkpCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICNjb252ZXJ0IGRlcHRoIHRvIGJvZHktZnJhbWUgeCx5LHogCiAgICAgICAgICAgICAgICB4X29iaix5X29iaix6X29iaiA9IGNvbnZlcnRfZGVwdGhfM0RfdmVjKHhfcGl4ZWwsIHlfcGl4ZWwsIGRlcHRoX21hdCwgbWF0aC5yYWRpYW5zKDkwKSkKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIyBhY3R1YWwgZXVjbGlkZWFuIGRpc3RhbmNlIHRvIG9ic3RhY2xlCiAgICAgICAgICAgICAgICBwb2ludF9kZXB0aCA9ICh4X29iaip4X29iaiArIHlfb2JqKnlfb2JqICsgel9vYmoqel9vYmopKiowLjUKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIyBpZiB3aXRoaW4gdmFsaWQgcmFuZ2UsIG1hcmsgdGhpcyBkZXB0aCBhcyB2YWxpZCBhbmQgc3RvcmUgYWxsIHRoZSBpbmZvCiAgICAgICAgICAgICAgICBpZiBwb2ludF9kZXB0aCA8PSBkZXB0aFtpXSBhbmQgcG9pbnRfZGVwdGggPiBtaW5fZGVwdGhfbSBhbmQgcG9pbnRfZGVwdGggPCBtYXhfZGVwdGhfbToKICAgICAgICAgICAgICAgICAgICBkZXB0aFtpXSA9IHBvaW50X2RlcHRoCiAgICAgICAgICAgICAgICAgICAgZGVwdGhfY29vcmRpbmF0ZXNbaV0gPSBbeF9waXhlbCx5X3BpeGVsXQogICAgICAgICAgICAgICAgICAgIG9ic3RhY2xlX2Nvb3JkaW5hdGVzW2ldID0gW3hfb2JqLCB5X29iaiwgel9vYmpdCiAgICAgICAgICAgICAgICAgICAgdmFsaWRfZGVwdGhbaV0gPSBUcnVlCiAgICAgICAgCiAgICAgICAgc2FtcGxpbmdfd2lkdGggPSBzYW1wbGluZ193aWR0aCArIGludCgxLzMqIGRlcHRoX2ltZ193aWR0aCkKICAgICAgICAKIyBkaXNwbGF5IGRlcHRoIGltYWdlIGZyb20gQWlyU2ltLiBUaGUgZGF0YSByZWNlaXZlZCBmcm9tIEFpclNpbSBuZWVkcyB0byBiZSBwcm9jZWVkZWQgZm9yIGEgZ29vZCB2aWV3IAojIGFsc28gZGl2aWRlcyB0aGUgdmlldyBpbnRvIDN4MyBncmlkIGFuZCBwcmludHMgc21hbGxlc3QgZGVwdGggdmFsdWUgaW4gZWFjaCBncmlkCiMgcHV0cyBhIGNpcmNsZSBvbiB0aGUgc21hbGxlc3QgZm91bmQgZGVwdGggdmFsdWUKZGVmIGdldFNjcmVlbkRlcHRoVmlzKGNsaWVudCwgZGVwdGhfY29vcmRpbmF0ZXMsIGRlcHRoX2xpc3QpOgogICAgI2dldCBpbWFnZSBmcm9tIGFpcnNpbQogICAgcmVzcG9uc2VzID0gY2xpZW50LnNpbUdldEltYWdlcyhbYWlyc2ltLkltYWdlUmVxdWVzdCgwLCBhaXJzaW0uSW1hZ2VUeXBlLkRlcHRoUGxhbm5lciwgVHJ1ZSwgRmFsc2UpXSkKICAgICMgY29uZGl0aW9uIHRoZSBkYXRhCiAgICBpbWcxZCA9IG5wLmFycmF5KHJlc3BvbnNlc1swXS5pbWFnZV9kYXRhX2Zsb2F0LCBkdHlwZT1ucC5mbG9hdCkKICAgIGltZzFkID0gMjU1L25wLm1heGltdW0obnAub25lcyhpbWcxZC5zaXplKSwgaW1nMWQpCiAgICBpbWcyZCA9IG5wLnJlc2hhcGUoaW1nMWQsIChyZXNwb25zZXNbMF0uaGVpZ2h0LCByZXNwb25zZXNbMF0ud2lkdGgpKQogICAgaW1hZ2UgPSBucC5pbnZlcnQobnAuYXJyYXkoSW1hZ2UuZnJvbWFycmF5KGltZzJkLmFzdHlwZShucC51aW50OCksIG1vZGU9J0wnKSkpCiAgICAKICAgIGZhY3RvciA9IDEwCiAgICBtYXhJbnRlbnNpdHkgPSAyNTUuMCAjIGRlcGVuZHMgb24gZHR5cGUgb2YgaW1hZ2UgZGF0YQogICAgCiAgICAjIERlY3JlYXNlIGludGVuc2l0eSBzdWNoIHRoYXQgZGFyayBwaXhlbHMgYmVjb21lIG11Y2ggZGFya2VyLCBicmlnaHQgcGl4ZWxzIGJlY29tZSBzbGlnaHRseSBkYXJrIAogICAgbmV3SW1hZ2UxID0gKG1heEludGVuc2l0eSkqKGltYWdlL21heEludGVuc2l0eSkqKmZhY3RvcgogICAgbmV3SW1hZ2UxID0gbmV3SW1hZ2UxLmFzdHlwZShucC51aW50OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICBjb2xvcl9pbWcgPSBjdjIuYXBwbHlDb2xvck1hcChuZXdJbWFnZTEsIGN2Mi5DT0xPUk1BUF9KRVQpCiAgICAjIGRpdmlkZSB2aWV3IGludG8gM3gzIG1hdHJpeAogICAgcHhzdGVwID0gaW50KG5ld0ltYWdlMS5zaGFwZVsxXS8zKQogICAgcHlzdGVwID0gaW50KG5ld0ltYWdlMS5zaGFwZVswXS8zKQogICAgZ3ggPSBweHN0ZXAKICAgIGd5ID0gcHlzdGVwCiAgICB3aGlsZSBneCA8IG5ld0ltYWdlMS5zaGFwZVsxXToKICAgICAgICBjdjIubGluZShjb2xvcl9pbWcsIChneCwgMCksIChneCwgbmV3SW1hZ2UxLnNoYXBlWzBdKSwgY29sb3I9KDAsIDAsIDApLCB0aGlja25lc3M9MSkKICAgICAgICBneCArPSBweHN0ZXAKICAgIHdoaWxlIGd5IDwgbmV3SW1hZ2UxLnNoYXBlWzBdOgogICAgICAgIGN2Mi5saW5lKGNvbG9yX2ltZywgKDAsIGd5KSwgKG5ld0ltYWdlMS5zaGFwZVsxXSwgZ3kpLCBjb2xvcj0oMCwgMCwgMCksdGhpY2tuZXNzPTEpCiAgICAgICAgZ3kgKz0gcHlzdGVwCiAgICAKICAgICMgcHJpbnQgY2lyY2xlLCBhbmQgZGVwdGggdmFsdWVzIG9uIHRoZSBzY3JlZW4KICAgIGZvciBpIGluIHJhbmdlKGxlbihkZXB0aF9saXN0KSk6CiAgICAgICAgaWYgZGVwdGhfbGlzdFtpXSA8PSBERVBUSF9SQU5HRV9NWzFdOgogICAgICAgICAgICBjb2xvcl9pbWcgPSBjdjIuY2lyY2xlKGNvbG9yX2ltZywgKGludChkZXB0aF9jb29yZGluYXRlc1tpXVswXSksaW50KGRlcHRoX2Nvb3JkaW5hdGVzW2ldWzFdKSksIDUsICgwLCAwLCAwKSwgNSkKICAgICAgICAgICAgY29sb3JfaW1nID0gY3YyLnB1dFRleHQoY29sb3JfaW1nLCBzdHIocm91bmQoZGVwdGhfbGlzdFtpXSwyKSksIChpbnQocHhzdGVwKigxLzQgKyBpJTMpKSxpbnQocHlzdGVwKigxLzMgKyBtYXRoLmZsb29yKGkvMykpKSksIGN2Mi5GT05UX0hFUlNIRVlfU0lNUExFWCwgMC43NSwgKDAsMCwyNTUpLCAyKQogICAgCiAgICBjdjIuaW1zaG93KCJEZXB0aCBWaXMiLCBjb2xvcl9pbWcpCiAgICBjdjIud2FpdEtleSgxKQoKCmRlZiBtYXZsaW5rX2xvb3AoY29ubiwgY2FsbGJhY2tzKToKICAgICcnJ2EgbWFpbiByb3V0aW5lIGZvciBhIHRocmVhZDsgcmVhZHMgZGF0YSBmcm9tIGEgbWF2bGluayBjb25uZWN0aW9uLAogICAgY2FsbGluZyBjYWxsYmFja3MgYmFzZWQgb24gbWVzc2FnZSB0eXBlIHJlY2VpdmVkLgogICAgJycnCiAgICBpbnRlcmVzdGluZ19tZXNzYWdlcyA9IGxpc3QoY2FsbGJhY2tzLmtleXMoKSkKICAgIHdoaWxlIFRydWU6CiAgICAgICAgIyBzZW5kIGEgaGVhcnRiZWF0IG1zZwogICAgICAgIGNvbm4ubWF2LmhlYXJ0YmVhdF9zZW5kKG1hdnV0aWwubWF2bGluay5NQVZfVFlQRV9PTkJPQVJEX0NPTlRST0xMRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF2dXRpbC5tYXZsaW5rLk1BVl9BVVRPUElMT1RfR0VORVJJQywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkKICAgICAgICBtID0gY29ubi5yZWN2X21hdGNoKHR5cGU9aW50ZXJlc3RpbmdfbWVzc2FnZXMsIHRpbWVvdXQ9MSwgYmxvY2tpbmc9VHJ1ZSkKICAgICAgICBpZiBtIGlzIE5vbmU6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgY2FsbGJhY2tzW20uZ2V0X3R5cGUoKV0obSkKCiMgc2VuZCBtYXZsaW5rIG1lc3NhZ2UgdG8gU0lUTApkZWYgc2VuZF9vYnN0YWNsZV9kaXN0YW5jZV8zRF9tZXNzYWdlKCk6CiAgICBnbG9iYWwgY29ubgogICAgdGltZSA9IGN1cnJlbnRfbWlsbGlfdGltZSgpCiAgICAjIHByaW50KG1hdmxpbmtfb2JzdGFjbGVfY29vcmRpbmF0ZXMpCiAgICBmb3IgaSBpbiByYW5nZSg5KToKICAgICAgICBjb25uLm1hdi5vYnN0YWNsZV9kaXN0YW5jZV8zZF9zZW5kKAogICAgICAgICAgICB0aW1lLCAgICAjIHVzIFRpbWVzdGFtcCAoVU5JWCB0aW1lIG9yIHRpbWUgc2luY2Ugc3lzdGVtIGJvb3QpCiAgICAgICAgICAgIDAsICAgICAgICMgbm90IGltcGxlbWVudGVkIGluIEFyZHVQaWxvdCAgICAgICAgICAgIAogICAgICAgICAgICAwLCAgICAgICAjIG5vdCBpbXBsZW1lbnRlZCBpbiBBcmR1UGlsb3QgICAgICAgICAgIAogICAgICAgICAgICA2NTUzNSwgICAjIHVua25vd24gSUQgb2YgdGhlIG9iamVjdC4gV2UgYXJlIG5vdCByZWFsbHkgZGV0ZWN0aW5nIHRoZSB0eXBlIG9mIG9ic3RhY2xlICAgICAgICAgICAKICAgICAgICAgICAgZmxvYXQobWF2bGlua19vYnN0YWNsZV9jb29yZGluYXRlc1tpXVswXSksCSAgICMgWCBpbiBORVUgYm9keSBmcmFtZSAKICAgICAgICAgICAgZmxvYXQobWF2bGlua19vYnN0YWNsZV9jb29yZGluYXRlc1tpXVsxXSksICAgICAjIFkgaW4gTkVVIGJvZHkgZnJhbWUgIAogICAgICAgICAgICBmbG9hdChtYXZsaW5rX29ic3RhY2xlX2Nvb3JkaW5hdGVzW2ldWzJdKSwJICAgIyBaIGluIE5FVSBib2R5IGZyYW1lICAKICAgICAgICAgICAgZmxvYXQoREVQVEhfUkFOR0VfTVswXSksICMgbWluIHJhbmdlIG9mIHNlbnNvcgogICAgICAgICAgICBmbG9hdChERVBUSF9SQU5HRV9NWzFdKSAgIyBtYXggcmFuZ2Ugb2Ygc2Vuc29yCiAgICAgICAgKQoKY29ubiA9IG1hdnV0aWwubWF2bGlua19jb25uZWN0aW9uKAogICAgZGV2aWNlID0gc3RyKGNvbm5lY3Rpb25fc3RyaW5nKSwKICAgIGF1dG9yZWNvbm5lY3QgPSBUcnVlLAogICAgc291cmNlX3N5c3RlbSA9IDEsCiAgICBzb3VyY2VfY29tcG9uZW50ID0gOTMsCiAgICBiYXVkPWNvbm5lY3Rpb25fYmF1ZHJhdGUsCiAgICBmb3JjZV9jb25uZWN0ZWQ9VHJ1ZSwKKQoKbWF2bGlua19jYWxsYmFja3MgPSB7Cn0KbWF2bGlua190aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1tYXZsaW5rX2xvb3AsIGFyZ3M9KGNvbm4sIG1hdmxpbmtfY2FsbGJhY2tzKSkKbWF2bGlua190aHJlYWQuc3RhcnQoKQoKIyBTZW5kIE1BVmxpbmsgbWVzc2FnZXMgaW4gdGhlIGJhY2tncm91bmQgYXQgcHJlLWRldGVybWluZWQgZnJlcXVlbmNpZXMKc2NoZWQgPSBCYWNrZ3JvdW5kU2NoZWR1bGVyKCkKc2NoZWQuYWRkX2pvYihzZW5kX29ic3RhY2xlX2Rpc3RhbmNlXzNEX21lc3NhZ2UsICdpbnRlcnZhbCcsIHNlY29uZHMgPSAxL29ic3RhY2xlX2Rpc3RhbmNlX21zZ19oeikKc2NoZWQuc3RhcnQoKQoKIyBtYWluIGxvb3AKd2hpbGUgVHJ1ZToKICAgICNkZXB0aCBpbWFnZSBmcm9tIGFpcnNpbQogICAgZGVwdGhfbWF0LHdpZHRoLGhlaWdodCA9IGdldF9kZXB0aChjbGllbnQpCiAgICAjIFdpbGwgYmUgcG9wdWxhdGVkIHdpdGggc21hbGxlc3QgZGVwdGggaW4gZWFjaCBncmlkIAogICAgZGVwdGhfbGlzdCA9IG5wLm9uZXMoKDksKSwgZHR5cGU9bnAuZmxvYXQpICogKERFUFRIX1JBTkdFX01bMV0gKyAxKQogICAgIyBWYWxpZCBkZXB0aCBpbiBlYWNoIGdyaWQgd2lsbCBiZSBtYXJrZWQgVHJ1ZQogICAgdmFsaWRfZGVwdGggPSBucC5vbmVzKCg5LCksIGR0eXBlPW5wLmJvb2wpICogRmFsc2UKICAgICMgTWF0cml4IENvb3JkaW5hdGVkIG9mIHRoZSBzbWFsbGVzdCBkZXB0aCBpbiBlYWNoIGdyaWQKICAgIGRlcHRoX2Nvb3JkaW5hdGVzID0gbnAub25lcygoOSwyKSwgZHR5cGU9bnAudWludDE2KSAqIChNQVhfREVQVEgpIAogICAgIyBCb2R5IGZyYW1lIE5FVSBYWVogY29vcmRpbmF0ZXMgb2Ygb2JzdGFjbGVzIHRvIGJlIHNlbnQgdG8gdmVoaWNsZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBvYnN0YWNsZV9jb29yZGluYXRlcyA9IG5wLm9uZXMoKDksMyksZHR5cGU9bnAuZmxvYXQpICogKE1BWF9ERVBUSCkKICAgIAogICAgI2dldCB0aGUgb2JzdGFjbGVzCiAgICBkaXN0YW5jZXNfZnJvbV9kZXB0aF9pbWFnZShkZXB0aF9tYXQsIERFUFRIX1JBTkdFX01bMF0sIERFUFRIX1JBTkdFX01bMV0sIGRlcHRoX2xpc3QsIGRlcHRoX2Nvb3JkaW5hdGVzLCBvYnN0YWNsZV9jb29yZGluYXRlcywgdmFsaWRfZGVwdGgpCjx8ZmltX2VuZHw+"]
["118b38f70fab3f7b555e08c22164ec199b96e561-3","118b38f70fab3f7b555e08c22164ec199b96e561","PHxmaW1fcHJlZml4fD4KIyBXcml0ZSBhIGZ1bmN0aW9uIHRoYXQgcm90YXRlcyBhIG1hcnRpeCBvZiBOIGJ5IE4KaW1wb3J0IHVuaXR0ZXN0CmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IENvdW50ZXIKCgpkZWYgcm90YXRlKG0pOgogIG4gPSBsZW4obVswXSkKICBzdGFydCA9IDAKPHxmaW1faG9sZXw+CiAgICAgIG1bc3RhcnRdW3N0YXJ0ICsgaV0gPSBtW2VuZC0xLWldW3N0YXJ0XQogICAgICBtW2VuZC0xLWldW3N0YXJ0XSA9IG1bZW5kLTFdW2VuZCAtIDEgLSBpXQogICAgICBtW2VuZC0xXVtlbmQgLSAxIC0gaV0gPSBtW3N0YXJ0ICsgaV1bZW5kIC0gMV0KICAgICAgbVtzdGFydCArIGldW2VuZCAtIDFdID0gdGVtcAogICAgc3RhcnQgKz0gMSAKICAgIGVuZCAtPSAxIAogIHJldHVybiBtCgpjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICB2YWxpZCA9ICgKICAgIChbWzEsMl0sCiAgICAgIFszLDRdXSwgW1szLDFdLAogICAgICAgICAgICAgIFs0LDJdXSksCiAgICAoW1sxLDIsM10sCiAgICAgIFs0LDUsNl0sCiAgICAgIFs3LDgsOV1dLCBbWzcsNCwxXSwKICAgICAgICAgICAgICAgIFs4LDUsMl0sCiAgICAgICAgICAgICAgICBbOSw2LDNdXSksCiAgICAoW1sxLDIsMyw0XSwKICAgICAgWzUsNiw3LDhdLAogICAgICBbOSwxMCwxMSwxMl0sCiAgICAgIFsxMywxNCwxNSwxNl1dLCBbIFsxMyw5LCA1LDFdLAogICAgICAgICAgICAgICAgICAgICAgICBbMTQsMTAsNiwyXSwKICAgICAgICAgICAgICAgICAgICAgICAgWzE1LDExLDcsM10sCiAgICAgICAgICAgICAgICAgICAgICAgIFsxNiwxMiw4LDRdXSkKICApCgogIGRlZiB0ZXN0KHNlbGYpOgogICAgZm9yIFtpbnB1dCwgZXhwZWN0ZWRdIGluIHNlbGYudmFsaWQ6CiAgICAgIHByaW50KGlucHV0LCcgdnMgJyxleHBlY3RlZCkKICAgICAgcmVzdWx0ID0gcm90YXRlKGlucHV0KQogICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCiAgICAKICAgIAoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICB1bml0dGVzdC5tYWluKCkKPHxmaW1fc3VmZml4fD4KICBlbmQgPSBuCiAgd2hpbGUgc3RhcnQgPCBlbmQ6CiAgICBmb3IgaSBpbiByYW5nZShlbmQtc3RhcnQtMSk6CiAgICAgIHRlbXA9bVtzdGFydF1bc3RhcnQgKyBpXQo8fGZpbV9lbmR8Pg=="]
["28b7a4ad266160e15ef8c80b7dc88a93bbd2f589-1","28b7a4ad266160e15ef8c80b7dc88a93bbd2f589","PHxmaW1fcHJlZml4fD4KZnJvbSB0ZWxlZ3JhbSBpbXBvcnQgSW5saW5lS2V5Ym9hcmRCdXR0b24sIElubGluZUtleWJvYXJkTWFya3VwCgpmcm9tIGJvdC5oYW5kbGVycy5zdGF0aWNfdGV4dCBpbXBvcnQgKAogICAgQlVUVE9OX0FMRVJUSU5HLAogICAgQlVUVE9OX0NPTkZJUk0sCiAgICBCVVRUT05fREVDTElORSwKICAgIEJVVFRPTl9TVEFUUywKICAgIGNvbmZpcm0sCiAgICBkZWNsaW5lLAogICAgZGlzYWJsZWQsCiAgICBlbmFibGVkLAogICAgcHJvdG9jb2xzLAogICAgc3RhcnQsCiAgICBzdGF0cywKICAgIHN1YnNjcmlwdGlvbnMsCiAgICB0b2dnbGVfYWxlcnRpbmcsCiAgICB0b3BfcHJvcG9zYWxzLAogICAgdG9wX3Byb3RvY29scywKICAgIHZvdGVycywKKQpmcm9tIGJvdC5tb2RlbHMgaW1wb3J0IEJvdENoYXRVc2VyCmZyb20gLmJ1dHRvbl9oYW5kbGVycyBpbXBvcnQgKAogICAgUHJvdG9jb2xzVGdWaWV3LAogICAgU3Vic2NyaXB0aW9uc1RnVmlldywKICAgIFRvcFByb3Bvc2Fsc1RnVmlldywKICAgIFRvcFByb3RvY29sc1RnVmlldywKICAgIFZvdGVyc1RnVmlldywKKQpmcm9tIC51dGlscyBpbXBvcnQgVGdVcmwKCgpkZWYgY29tbWFuZF9zdGFydCh1cGRhdGUsIGNvbnRleHQpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICB1LCBfID0gQm90Q2hhdFVzZXIuZ2V0X3VzZXJfYW5kX2NyZWF0ZWQodXBkYXRlLCBjb250ZXh0KQogICAgdGV4dCA9IHN0YXJ0LmZvcm1hdCh1c2VybmFtZT11LnVzZXJuYW1lLCBhbGVydGluZz1lbmFibGVkIGlmIHUuYWxlcnRpbmcgZWxzZSBkaXNhYmxlZCkKCiAgICBjb250ZXh0LmJvdC5zZW5kX21lc3NhZ2UodS51c2VyX2lkLCB0ZXh0PXRleHQsIHJlcGx5X21hcmt1cD1tYWtlX2tleWJvYXJkX2Zvcl9zdGFydF9jb21tYW5kKCkpCjx8ZmltX2VuZHw+"]
["d6f1695bbcddb4706c0d767dd03a68117f1a837e-1","d6f1695bbcddb4706c0d767dd03a68117f1a837e","PHxmaW1fcHJlZml4fD4KZGVmIHJlbW92ZUR1cGxpY2F0ZShzKToKCSNzPXNldChzdHIpCgkjcz0iIi5qb2luKHMpCgkjcHJpbnQoIldpdGhvdXQgT3JkZXI6IixzKQoJdD0iIgoJZm9yIGkgaW4gczoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoJCWlmKGkgaW4gdCk6CgkJCXBhc3MKCQllbHNlOgoJCQl0PXQraQo8fGZpbV9lbmR8Pg=="]
["28cc6d233c40b0ee35843502e409c749f9b09941-1","28cc6d233c40b0ee35843502e409c749f9b09941",{"$cut":{"chars":28036,"head":"PHxmaW1fcHJlZml4fD4K77u/aW1wb3J0IHBsb3RseS5ncmFwaF9vYmplY3RzIGFzIGdvCmltcG9ydCBwbG90bHkuZXhwcmVzcyBhcyBweAoKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKCmltcG9ydCBzdHJlYW1saXQgYXMgc3QKCnN0LnNldF9wYWdlX2NvbmZpZygKICAgIHBhZ2VfdGl0bGU9ItCm0J8gMjAyMTog0JHQuNC30L3QtdGBLdC/0LvQsNC90LXRgCIsCiAgICBsYXlvdXQ9J3dpZGUnLAogICAgaW5pdGlhbF9zaWRlYmFyX3N0YXRlPSdhdXRvJywKKQoKc3QubWFya2Rvd24oCiAgICAiIiIKICAgIDxzdHlsZT4KICAgICNNYWluTWVudSB7dmlzaWJpbGl0eTogaGlkZGVuOyB9CiAgICBmb290ZXIge3Zpc2liaWxpdHk6IGhpZGRlbjt9PC9zdHlsZT4KICAgICIiIiwKICAgIHVuc2FmZV9hbGxvd19odG1sPVRydWUKKQoKY3VsdHVyZXMgPSB7CiAgICAn0JrQsNGA0YLQvtGE0LXQu9GMJzogewogICAgICAgICdpZCc6IDAsCiAgICAgICAgJ3RfbWluJzogMTYsCiAgICAgICAgJ3RfbWF4JzogMjUsCiAgICAgICAgJ9CS0LvQsNC20L3QvtGB0YLRjF9taW4nOiAwLjQsCiAgICAgICAgJ9CS0LvQsNC20L3QvtGB0YLRjF9tYXgnOiAwLjgsCiAgICAgICAgJ9Ce0YHQsNC00LrQuF9taW4nOiAzMDAsCiAgICAgICAgJ9Ce0YHQsNC00LrQuF9tYXgnOiA0NTAsCiAgICAgICAgJ9Cf0L7Rh9Cy0LAnOiBbJ9Ch0YPQs9C70LjQvdC40YHRgtGL0LUnLCAn0J/QtdGB0YfQsNC90YvQtSDRgdGD0LPQu9C40L3QutC4J10sCiAgICAgICAgJ3BIX21pbic6IDQuNSwKICAgICAgICAncEhfbWF4JzogNy41LAogICAgfSwKICAgICfQmtCw0L/Rg9GB0YLQsCc6IHsKICAgICAgICAnaWQnOiAxLAogICAgICAgICd0X21pbic6IDIwLAogICAgICAgICd0X21heCc6IDI1LAogICAgICAgICfQktC70LDQttC90L7RgdGC0YxfbWluJzogMC43LAogICAgICAgICfQktC70LDQttC90L7RgdGC0YxfbWF4JzogMC44LAogICAgICAgICfQntGB0LDQtNC60LhfbWluJzogMjUwLAogICAgICAgICfQntGB0LDQtNC60LhfbWF4JzogNDUwLAogICAgICAgICfQn9C+0YfQstCwJzogWyfQodGD0LPQu9C40L3QuNGB0YLRi9C1J10sCiAgICAgICAgJ3BIX21pbic6IDUuNiwKICAgICAgICAncEhfbWF4JzogNy4wLAogICAgfSwKICAgICfQnNC+0YDQutC+0LLRjCc6IHsKICAgICAgICAnaWQnOiAyLAogICAgICAgICd0X21pbic6IDE4LAogICAgICAgICd0X21heCc6IDI1LAogICAgICAgICfQktC70LDQttC90L7RgdGC0YxfbWluJzogMC43LAogICAgICAgICfQktC70LDQttC90L7RgdGC0YxfbWF4JzogMC44LAogICAgICAgICfQntGB0LDQtNC60LhfbWluJzogMzM0LAogICAgICAgICfQntGB0LDQtNC60LhfbWF4JzogNDUwLAogICAgICAgICfQn9C+0YfQstCwJzogWyfQn9C10YHRh9Cw0L3Ri9C1JywgJ9Ch0YPQv9C10YHRh9Cw0L3Ri9C1JywgJ9Cb0LXQs9C60L7RgdGD0LPQu9C40L3QuNGB0YLRi9C1J10sCiAgICAgICAgJ3BIX21pbic6IDQuNSwKICAgICAgICAncEhfbWF4JzogNy41LAogICAgfSwKICAgICfQodCy0LXQutC70LAnOiB7CiAgICAgICAgJ2lkJzogMywKICAgICAgICAndF9taW4nOiAxNSwKICAgICAgICAndF9tYXgnOiAyOSwKICAgICAgICAn0JLQu9Cw0LbQvdC+0YHRgtGMX21pbic6IDAuNywKICAgICAgICAn0JLQu9Cw0LbQvdC+0YHRgtGMX21heCc6IDAuOCwKICAgICAgICAn0J7RgdCw0LTQutC4X21pbic6IDMzNCwKICAgICAgICAn0J7RgdCw0LTQutC4X21heCc6IDQ1MCwKICAgICAgICAn0J/QvtGH0LLQsCc6IFsn0J/QtdGB0YfQsNC90YvQtScsICfQodGD0L/QtdGB0YfQsNC90YvQtScsICfQm9C10LPQutC+0YHRg9Cz0LvQuNC90LjRgdGC0YvQtSddLAogICAgICAgICdwSF9taW4nOiA1LjAsCiAgICAgICAgJ3BIX21heCc6IDguMCwKICAgIH0sCiAgICAn0J7Qs9GD0YDQtdGGJzogewogICAgICAgICdpZCc6IDQsCiAgICAgICAgJ3RfbWluJzogMjIsCiAgICAgICAgJ3RfbWF4JzogMjUsCiAgICAgICAgJ9CS0LvQsNC20L3QvtGB0YLRjF9taW4nOiAwLjgsCiAgICAgICAgJ9CS0LvQsNC20L3QvtGB0YLRjF9tYXgnOiAwLjgsCiAgICAgICAgJ9Ce0YHQsNC00LrQuF9taW4nOiAyMDAsCiAgICAgICAgJ9Ce0YHQsNC00LrQuF9tYXgnOiA0MDAsCiAgICAgICAgJ9Cf0L7Rh9Cy0LAnOiBbJ9Ch0YPQv9C10YHRh9Cw0L3Ri9C1JywgJ9Cb0LXQs9C60L7RgdGD0LPQu9C40L3QuNGB0YLRi9C1JywgJ9Ch0YDQtdC00L3QtdGB0YPQs9C70LjQvdC40YHRgtGL0LUnXSwKICAgICAgICAncEhfbWluJzogNi41LAogICAgICAgICdwSF9tYXgnOiA3LjQsCiAgICB9LAogICAgJ9CU0YvQvdGPJzogewogICAgICAgICdpZCc6IDUsCiAgICAgICAgJ3RfbWluJzogMjUsCiAgICAgICAgJ3RfbWF4JzogMzAsCiAgICAgICAgJ9CS0LvQsNC20L3QvtGB0YLRjF9taW4nOiAwLjYsCiAgICAgICAgJ9CS0LvQsNC20L3QvtGB0YLRjF9tYXgnOiAwLjgsCiAgICAgICAgJ9Ce0YHQsNC00LrQuF9taW4nOiAzMDAsCiAgICAgICAgJ9Ce0YHQsNC00LrQuF9tYXgnOiA0NTAsCiAgICAgICAgJ9Cf0L7Rh9Cy0LAnOiBbJ9Cb0LXQs9C60L7RgdGD0LPQu9C40L3QuNGB0YLRi9C1J10sCiAgICAgICAgJ3BIX21pbic6IDYuNSwKICAgICAgICAncEhfbWF4JzogNy4wLAogICAgfSwKICAgICfQkNGA0LHRg9C3JzogewogICAgICAgICdpZCc6IDYsCiAgICAgICAgJ3RfbWluJzogMjUsCiAgICAgICAgJ3RfbWF4JzogMzAsCiAgICAgICAgJ9CS0LvQsNC20L3QvtGB0YLRjF9taW4nOiAwLjYsCiAgICAgICAgJ9CS0LvQsNC20L3QvtGB0YLRjF9tYXgnOiAwLjgsCiAgICAgICAgJ9Ce0YHQsNC00LrQuF9taW4nOiAzMDAsCiAgICAgICAgJ9Ce0YHQsNC00LrQuF9tYXgnOiA0NTAsCiAgICAgICAgJ9Cf0L7Rh9Cy0LAnOiBbJ9Cb0LXQs9C60L7RgdGD0LPQu9C40L3QuNGB0YLRi9C1J10sCiAgICAgICAgJ3BIX21pbic6IDYuNSwKICAgICAgICAncEhfbWF4JzogNy4wLAogICAgfSwKICAgICfQoNC40YEnOiB7CiAgICAgICAgJ2lkJzogNywKICAgICAgICAndF9taW4nOiAyNSwKICAgICAgICAndF9tYXgnOiAyOCwKICAgICAgICAn0JLQu9Cw0LbQvdC+"}}]
["0167f1110b997f3499497c79e939bda32204bdb9-1","0167f1110b997f3499497c79e939bda32204bdb9","PHxmaW1fcHJlZml4fD4KIiIiClRyYWlucyBhIE5ldXJhbCBOZXR3b3JrIHByZWRpY3RvciB3aXRoIGJpbmFyeSBvdXRwdXQuCgpAY29weXJpZ2h0OiBUaGUgQnJvYWQgSW5zdGl0dXRlIG9mIE1JVCBhbmQgSGFydmFyZCAyMDE1CiIiIgoKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBzeXMKaW1wb3J0IG1hdGgKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBzY2lweS5vcHRpbWl6ZSBpbXBvcnQgZm1pbl9iZmdzCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKZnJvbSB1dGlscyBpbXBvcnQgdGhldGFNYXRyaXgsIGdyYWRpZW50QXJyYXksIHNpZ21vaWQsIGZvcndhcmRQcm9wLCBiYWNrd2FyZFByb3AsIHByZWRpY3QKCmRlZiBwcmVmaXgoKToKICAgIHJldHVybiAibm5ldCIKCmRlZiB0aXRsZSgpOgogICAgcmV0dXJuICJOZXVyYWwgTmV0d29yayIKCiIiIkV2YWx1YXRlcyB0aGUgY29zdCBmdW5jdGlvbgoiIiIKZGVmIGNvc3QodGhldGEsIFgsIHksIE4sIEwsIFMsIEssIGdhbW1hKToKICAgIE0gPSBYLnNoYXBlWzBdCgogICAgIyBUaGUgY29zdCBhcmd1bWVudCBpcyBhIDFELWFycmF5IHRoYXQgbmVlZHMgdG8gYmUgcmVzaGFwZWQgaW50byB0aGUKICAgICMgcGFyYW1ldGVyIG1hdHJpeCBmb3IgZWFjaCBsYXllcjoKICAgIHRoZXRhbSA9IHRoZXRhTWF0cml4KHRoZXRhLCBOLCBMLCBTLCBLKQoKICAgIGggPSBucC56ZXJvcyhNKQogICAgdGVybXMgPSBucC56ZXJvcyhNKQogICAgZm9yIGkgaW4gcmFuZ2UoMCwgTSk6CiAgICAgICAgYSA9IGZvcndhcmRQcm9wKFhbaSw6XSwgdGhldGFtLCBMKQogICAgICAgIGhbaV0gPSBhW0xdCiAgICAgICAgdDAgPSAteVtpXSAqIG5wLmxvZyhoW2ldKSBpZiAwIDwgeVtpXSBlbHNlIDAKICAgICAgICB0MSA9IC0oMS15W2ldKSAqIG5wLmxvZygxLWhbaV0pIGlmIHlbaV0gPCAxIGVsc2UgMAogICAgICAgIGlmIG1hdGguaXNuYW4odDApIG9yIG1hdGguaXNuYW4odDEpOgogICAgICAgICAgICAjcHJpbnQgIk5hTiBkZXRlY3RlZCB3aGVuIGNhbGN1bGF0aW5nIGNvc3QgY29udHJpYnV0aW9uIG9mIG9ic2VydmF0aW9uIixpCiAgICAgICAgICAgIHRlcm1zW2ldID0gMTAKICAgICAgICBlbHNlOgogICAgICAgICAgICB0ZXJtc1tpXSA9IHQwICsgdDEgCgogICAgIyBSZWd1bGFyaXphdGlvbiBwZW5hbHR5CiAgICBwZW5hbHR5ID0gKGdhbW1hLzIpICogbnAuc3VtKHRoZXRhICogdGhldGEpCgogICAgcmV0dXJuIHRlcm1zLm1lYW4oKSArIHBlbmFsdHk7CgoiIiJDb21wdXRlcyB0aGUgZ3JhZGllbnQgb2YgdGhlIGNvc3QgZnVuY3Rpb24KIiIiCmRlZiBncmFkaWVudCh0aGV0YSwgWCwgeSwgTiwgTCwgUywgSywgZ2FtbWEpOgogICAgTSA9IFguc2hhcGVbMF0KCiAgICAjIFRoZSBjb3N0IGFyZ3VtZW50IGlzIGEgMUQtYXJyYXkgdGhhdCBuZWVkcyB0byBiZSByZXNoYXBlZCBpbnRvIHRoZQogICAgIyBwYXJhbWV0ZXIgbWF0cml4IGZvciBlYWNoIGxheWVyOgogICAgdGhldGFtID0gdGhldGFNYXRyaXgodGhldGEsIE4sIEwsIFMsIEspCgogICAgIyBJbml0IGF1eGlsaWFyeSBkYXRhIHN0cnVjdHVyZXMKICAgIGRlbHRhID0gW05vbmVdICogTAogICAgRCA9IFtOb25lXSAqIEwKICAgIGRlbHRhWzBdID0gbnAuemVyb3MoKFMgLSAxLCBOKSkKICAgIERbMF0gPSBucC56ZXJvcygoUyAtIDEsIE4pKQogICAgZm9yIGwgaW4gcmFuZ2UoMSwgTCAtIDEpOgogICAgICAgIGRlbHRhW2xdID0gbnAuemVyb3MoKFMgLSAxLCBTKSkKICAgICAgICBEW2xdID0gbnAuemVyb3MoKFMgLSAxLCBTKSkKICAgIGRlbHRhW0wgLSAxXSA9IG5wLnplcm9zKChLLCBTKSkKICAgIERbTCAtIDFdID0gbnAuemVyb3MoKEssIFMpKQoKICAgIGZvciBpIGluIHJhbmdlKDAsIE0pOgogICAgICAgIGEgPSBmb3J3YXJkUHJvcChYW2ksOl0sIHRoZXRhbSwgTCkKICAgICAgICBlcnIgPSBiYWNrd2FyZFByb3AoeVtpXSwgYSwgdGhldGFtLCBMLCBOKQogICAgICAgIGZvciBsIGluIHJhbmdlKDAsIEwpOgogICAgICAgICAgICAjIE5vdGVzIGFib3V0IG11bHRpcGx5aW5nIG51bXB5IGFycmF5czogZXJyW2wrMV0gaXMgYSAxLWRpbWVuc2lvbmFsCiAgICAgICAgICAgICMgYXJyYXkgc28gaXQgbmVlZHMgdG8gYmUgbWFkZSBpbnRvIGEgMkQgYXJyYXkgYnkgcHV0dGluZyBpbnNpZGUgW10sCiAgICAgICAgICAgICMgYW5kIHRoZW4gdHJhbnNwb3NlZCBzbyBpdCBiZWNvbWVzIGEgY29sdW1uIHZlY3Rvci4KICAgICAgICAgICAgcHJvZCA9IG5wLmFycmF5KFtlcnJbbCsxXV0pLlQgKiBucC5hcnJheShbYVtsXV0pCiAgICAgICAgICAgIGRlbHRhW2xdID0gZGVsdGFbbF0gKyBwcm9kCgogICAgZm9yIGwgaW4gcmFuZ2UoMCwgTCk6CiAgICAgICAgRFtsXSA9ICgxLjAgLyBNKSAqIGRlbHRhW2xdICsgZ2FtbWEgKiB0aGV0YW1bbF0KICAgIAogICAgZ3JhZCA9IGdyYWRpZW50QXJyYXkoRCwgTiwgTCwgUywgSykKCiAgICBnbG9iYWwgZ2NoZWNrCiAgICBpZiBnY2hlY2s6CiAgICAgICAgb2sgPSBUcnVlCiAgICAgICAgc2l6ZSA9IHRoZXRhLnNoYXBlWzBdIAogICAgICAgIGVwc2lsb24gPSAxRS01CiAgICAgICAgbWF4ZXJyID0gMC4wMQogICAgICAgIGdyYWQxID0gbnAuemVyb3Moc2l6ZSk7CiAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgc2l6ZSk6CiAgICAgICAgICAgIHRoZXRhMCA9IG5wLmNvcHkodGhldGEpCiAgICAgICAgICAgIHRoZXRhMSA9IG5wLmNvcHkodGhldGEpCgogICAgICAgICAgICB0aGV0YTBbaV0gPSB0aGV0YTBbaV0gLSBlcHNpbG9uCiAgICAgICAgICAgIHRoZXRhMVtpXSA9IHRoZXRhMVtpXSArIGVwc2lsb24KCiAgICAgICAgICAgIGMwID0gY29zdCh0aGV0YTAsIFgsIHksIE4sIEwsIFMsIEssIGdhbW1hKQogICAgICAgICAgICBjMSA9IGNvc3QodGhldGExLCBYLCB5LCBOLCBMLCBTLCBLLCBnYW1tYSkKICAgICAgICAgICAgZ3JhZDFbaV0gPSAoYzEgLSBjMCkgLyAoMiAqIGVwc2lsb24pCiAgICAgICAgICAgIGRpZmYgPSBhYnMoZ3JhZDFbaV0gLSBncmFkW2ldKQogICAgICAgICAgICBpZiBtYXhlcnIgPCBkaWZmOgogICAgICAgICAgICAgICAgcHJpbnQgIk51bWVyaWNhbCBhbmQgYW5hbHl0aWNhbCBncmFkaWVudHMgZGlmZmVyIGJ5IixkaWZmLCJhdCBhcmd1bWVudCIsaSwiLyIsc2l6ZQogICAgICAgICAgICAgICAgb2sgPSBGYWxzZQogICAgICAgIGlmIG9rOgogICAgICAgICAgICBwcmludCAiTnVtZXJpY2FsIGFuZCBhbmFseXRpY2FsIGdyYWRpZW50cyBjb2luY2lkZSB3aXRoaW4gdGhlIGdpdmVuIHByZWNpc2lvbiBvZiIsbWF4ZXJyCgogICAgcmV0dXJuIGdyYWQKCiIiIkFkZHMgdGhlIGN1cnJlbnQgY29zdCB0byB0aGUgdmVjdG9yIG9mIHZhbHVlcwoiIiIKZGVmIGFkZF92YWx1ZSh0aGV0YSk6CiAgICBnbG9iYWwgcGFyYW1zCiAgICBnbG9iYWwgdmFsdWVzCiAgICAoWCwgeSwgTiwgTCwgUywgSywgZ2FtbWEpID0gcGFyYW1zCiAgICB2YWx1ZSA9IGNvc3QodGhldGEsIFgsIHksIE4sIEwsIFMsIEssIGdhbW1hKTsKICAgIHZhbHVlcyA9IG5wLmFwcGVuZCh2YWx1ZXMsIFt2YWx1ZV0pCgoiIiIKQ2FsY3VsYXRpbmcgdGhlIHByZWRpY3Rpb24gcmF0ZSBieSBhcHBseWluZyB0aGUgdHJhaW5lZCBtb2RlbCBvbiB0aGUgcmVtYWluaW5nIGZyYWN0aW9uIApvZiB0aGUgZGF0YSAodGhlIHRlc3Qgc2V0KSwgYW5kIGNvbXBhcmluZyB3aXRoIHJhbmRvbSBzZWxlY3Rpb24KIiIiCmRlZiBldmFsdWF0ZShYLCB5LCBpdHJhaW4sIHRoZXRhKToKICAgIG50b3QgPSAwCiAgICBuaGl0ID0gMAogICAgbm51bCA9IDAKICAgIGZvciBpIGluIHJhbmdlKDAsIE0pOgogICAgICAgIGlmIG5vdCBpIGluIGl0cmFpbjoKICAgICAgICAgICAgbnRvdCA9IG50b3QgKyAxCiAgICAgICAgICAgIHAgPSBwcmVkaWN0KFhbaSw6XSwgdGhldGEsIE4sIEwsIFMsIEspCiAgICAgICAgICAgIGlmICh5W2ldID09IDEpID09ICgwLjUgPCBwKToKICAgICAgICAgICAgICAgIG5oaXQgPSBuaGl0ICsgMQogICAgICAgICAgICBpZiB5W2ldID09IDE6CiAgICAgICAgICAgICAgICBubnVsID0gbm51bCArIDEKCiAgICByYXRlID0gZmxvYXQobmhpdCkgLyBmbG9hdChudG90KQogICAgcnJhdGUgPSBmbG9hdChubnVsKSAvIGZsb2F0KG50b3QpCiAgICAKICAgIHByaW50ICIiCiAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICAgcHJpbnQgIlByZWRpY3RvciBzdWNjZXNzIHJhdGUgb24gdGVzdCBzZXQ6Iiwgc3RyKG5oaXQpICsgIi8iICsgc3RyKG50b3QpLCByb3VuZCgxMDAgKiByYXRlLCAyKSwgIiUiCiAgICBwcmludCAiTnVsbCBzdWNjZXNzIHJhdGUgb24gdGVzdCBzZXQgICAgIDoiLCBzdHIobm51bCkgKyAiLyIgKyBzdHIobnRvdCksIHJvdW5kKDEwMCAqIHJyYXRlLCAyKSwgIiUiCiAgICAKICAgIHJldHVybiBbcmF0ZSwgcnJhdGVdCgoiIiJQcmludHMgdGhlIG5ldXJhbCBuZXQgcGFyYW1ldGVycwoiIiIKZGVmIHByaW50X3RoZXRhKHRoZXRhLCBOLCBMLCBTLCBLKToKICAgIHRoZXRhbSA9IHRoZXRhTWF0cml4KHRoZXRhLCBOLCBMLCBTLCBLKQoKICAgICMgQ29lZmZpY2llbnRzIG9mIGZpcnN0IGxheWVyCiAgICB0aGV0YTAgPSB0aGV0YW1bMF0KICAgIGZvciBpMSBpbiByYW5nZSgwLCBTIC0gMSk6CiAgICAgICAgZm9yIGkwIGluIHJhbmdlKDAsIE4pOgogICAgICAgICAgICBwcmludCAiezo1c30gezoxLjBmfSwgezo0c30gezoxLjBmfSwgezo1c30gezoxLjBmfTogezozLjVmfSIuZm9ybWF0KCJsYXllciIsIDAsICJub2RlIiwgaTEsICJpbnB1dCIsIGkwLCB0aGV0YTBbaTFdW2kwXSkKICAgICAgICAgICAgCiAgICBmb3IgbCBpbiByYW5nZSgxLCBMIC0gMSk6CiAgICAgICAgdGhldGFsID0gdGhldGFtW2xdCiAgICAgICAgIyBDb2VmZmljaWVudHMgb2YgbC10aCBsYXllciAKICAgICAgICBmb3IgaTEgaW4gcmFuZ2UoMCwgUyAtIDEpOgogICAgICAgICAgICBmb3IgaTAgaW4gcmFuZ2UoMCwgUyk6CiAgICAgICAgICAgICAgICBwcmludCAiezo1c30gezoxLjBmfSwgezo0c30gezoxLjBmfSwgezo1c30gezoxLjBmfTogezozLjVmfSIuZm9ybWF0KCJsYXllciIsIGwsICJub2RlIiwgaTEsICJpbnB1dCIsIGkwLCB0aGV0YWxbaTFdW2kwXSkKCiAgICAjIENvZWZmaWNpZW50cyBvZiBvdXRwdXQgdW5pdAogICAgdGhldGFmID0gdGhldGFtW0wgLSAxXQogICAgZm9yIGkxIGluIHJhbmdlKDAsIEspOgogICAgICAgIGZvciBpMCBpbiByYW5nZSgwLCBTKToKICAgICAgICAgICAgcHJpbnQgIns6NXN9IHs6MS4wZn0sIHs6NHN9IHs6MS4wZn0sIHs6NXN9IHs6MS4wZn06IHs6My41Zn0iLmZvcm1hdCgibGF5ZXIiLCBMIC0gMSwgIm5vZGUiLCBpMSwgImlucHV0IiwgaTAsIHRoZXRhZltpMV1baTBdKQoKIiIiU2F2ZXMgdGhlIG5ldXJhbCBuZXQgcGFyYW1ldGVycyB0byB0aGUgc3BlY2lmaWVkIGZpbGUKIiIiCmRlZiBzYXZlX3RoZXRhKGZpbGVuYW1lLCB0aGV0YSwgTiwgTCwgUywgSyk6CiAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJ3YiIpIGFzIHBmaWxlOgogICAgICAgIHRoZXRhbSA9IHRoZXRhTWF0cml4KHRoZXRhLCBOLCBMLCBTLCBLKQogICAgICAgIHBmaWxlLndyaXRlKCJOdW1iZXIgb2YgaW5kZXBlbmRlbnQgdmFyaWFibGVzIDogIiArIHN0cihOLTEpICsgIlxuIikKICAgICAgICBwZmlsZS53cml0ZSgiTnVtYmVyIG9mIGhpZGRlbiBsYXllcnMgICAgICAgICA6ICIgKyBzdHIoTC0xKSArICJcbiIpCiAgICAgICAgcGZpbGUud3JpdGUoIk51bWJlciBvZiB1bml0cyBwZXIgaGlkZGVuIGxheWVyOiAiICsgc3RyKFMtMSkgKyAiXG4iKQogICAgICAgIHBmaWxlLndyaXRlKCJOdW1iZXIgb2Ygb3V0cHV0IGNsYXNzZXMgICAgICAgIDogIiArIHN0cihLKSArICJcbiIpCgogICAgICAgICMgQ29lZmZpY2llbnRzIG9mIGZpcnN0IGxheWVyCiAgICAgICAgdGhldGEwID0gdGhldGFtWzBdCiAgICAgICAgZm9yIGkxIGluIHJhbmdlKDAsIFMgLSAxKToKICAgICAgICAgICAgZm9yIGkwIGluIHJhbmdlKDAsIE4pOgogICAgICAgICAgICAgICAgcGZpbGUud3JpdGUoImxheWVyIDAsIG5vZGUgIiArIHN0cihpMSkgKyAiLCBpbnB1dCAiICsgc3RyKGkwKSArICI6ICIgKyBzdHIodGhldGEwW2kxXVtpMF0pICsgIlxuIikKICAgICAgICAgICAgCiAgICAgICAgZm9yIGwgaW4gcmFuZ2UoMSwgTCAtIDEpOgogICAgICAgICAgICB0aGV0YWwgPSB0aGV0YW1bbF0KICAgICAgICAgICAgIyBDb2VmZmljaWVudHMgb2YgbC10aCBsYXllciAKICAgICAgICAgICAgZm9yIGkxIGluIHJhbmdlKDAsIFMgLSAxKToKICAgICAgICAgICAgICAgIGZvciBpMCBpbiByYW5nZSgwLCBTKToKICAgICAgICAgICAgICAgICAgICBwZmlsZS53cml0ZSgibGF5ZXIgIiArIHN0cihsKSArICIsIG5vZGUgIiArIHN0cihpMSkgKyAiLCBpbnB1dCAiICsgc3RyKGkwKSArICI6ICIgKyBzdHIodGhldGFsW2kxXVtpMF0pICsgIlxuIikKCiAgICAgICAgIyBDb2VmZmljaWVudHMgb2Ygb3V0cHV0IHVuaXQKICAgICAgICB0aGV0YWYgPSB0aGV0YW1bTCAtIDFdCiAgICAgICAgZm9yIGkxIGluIHJhbmdlKDAsIEspOiAgICAKICAgICAgICAgICAgZm9yIGkwIGluIHJhbmdlKDAsIFMpOgogICAgICAgICAgICAgICAgcGZpbGUud3JpdGUoImxheWVyICIgKyBzdHIoTCAtIDEpICsgIiwgbm9kZSAiICsgc3RyKGkxKSArICIsIGlucHV0ICIgKyBzdHIoaTApICsgIjogIiArIHN0cih0aGV0YWZbaTFdW2kwXSkgKyAiXG4iKQoKIiIiClRyYWlucyB0aGUgbmV1cmFsIG5ldCBnaXZlbiB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMKCjogcGFyYW0gdHJhaW5fZmlsZW5hbWU6IG5hbWUgb2YgZmlsZSBjb250YWluaW5nIHRyYWluaW5nIHNldAo6IHBhcmFtIHBhcmFtX2ZpbGVuYW1lOiBuYW1lIG9mIGZpbGUgdG8gc3RvcmUgcmVzdWx0aW5nIG5ldXJhbCBuZXR3b3JrIHBhcmFtZXRlcnMKOiBwYXJhbSBrd3BhcmFtczogY3VzdG9tIGFyZ3VtZW50cyBmb3IgbmV1cmFsIG5ldHdvcms6IEwgKG51bWJlciBvZiBoaWRkZW4gbGF5ZXJzKSwgaGYgCiAgICAgICAgICAgICAgICAgIChmYWN0b3IgdG8gY2FsY3VsYXRlIG51bWJlciBvZiBoaWRkZW4gdW5pdHMgZ2l2ZW4gdGhlIG51bWJlciBvZiB2YXJpYWJsZXMpLAogICAgICAgICAgICAgICAgICBpbnZfcmVnIChpbnZlcnNlIG9mIHJlZ3VsYXJpemF0aW9uIGNvZWZmaWNpZW50KSwgdGhyZXNob2xkIAogICAgICAgICAgICAgICAgICAoZGVmYXVsdCBjb252ZXJnZW5jZSB0aHJlc2hvbGQpLCBzaG93IChzaG93IG1pbmltaXphdGlvbiBwbG90KSwgZGVidWcgCiAgICAgICAgICAgICAgICAgIChncmFkaWVudCBjaGVjaykKIiIiCmRlZiB0cmFpbih0cmFpbl9maWxlbmFtZSwgcGFyYW1fZmlsZW5hbWUsICoqa3dwYXJhbXMpOgogICAgaWYgImxheWVycyIgaW4ga3dwYXJhbXM6CiAgICAgICAgTCA9IGludChrd3BhcmFtc1sibGF5ZXJzIl0pCiAgICBlbHNlOgogICAgICAgIEwgPSAxCgogICAgaWYgImhmYWN0b3IiIGluIGt3cGFyYW1zOgogICAgICAgIGhmID0gZmxvYXQoa3dwYXJhbXNbImhmYWN0b3IiXSkKICAgIGVsc2U6CiAgICAgICAgaGYgPSAxCgogICAgaWYgImludl9yZWciIGluIGt3cGFyYW1zOgogICAgICAgIGdhbW1hID0gMS4wIC8gZmxvYXQoa3dwYXJhbXNbImludl9yZWciXSkKICAgIGVsc2U6CiAgICAgICAgZ2FtbWEgPSAwLjAwNQoKICAgIGlmICJ0aHJlc2hvbGQiIGluIGt3cGFyYW1zOgogICAgICAgIHRocmVzaG9sZCA9IGZsb2F0KGt3cGFyYW1zWyJ0aHJlc2hvbGQiXSkKICAgIGVsc2U6CiAgICAgICAgdGhyZXNob2xkID0gMUUtNQoKICAgIGlmICJzaG93IiBpbiBrd3BhcmFtczoKICAgICAgICBzaG93ID0gVHJ1ZSBpZiBrd3BhcmFtc1sic2hvdyJdLmxvd2VyKCkgPT0gInRydWUiIGVsc2UgRmFsc2UKICAgIGVsc2U6CiAgICAgICAgc2hvdyA9IEZhbHNlCgogICAgaWYgImRlYnVnIiBpbiBrd3BhcmFtczoKICAgICAgICBkZWJ1ZyA9IFRydWUgaWYga3dwYXJhbXNbImRlYnVnIl0ubG93ZXIoKSA9PSAidHJ1ZSIgZWxzZSBGYWxzZQogICAgZWxzZToKICAgICAgICBkZWJ1ZyA9IEZhbHNlCgogICAgZ2xvYmFsIGdjaGVjawogICAgZ2xvYmFsIHBhcmFtcwogICAgZ2xvYmFsIHZhbHVlcwogICAgZ2NoZWNrID0gZGVidWcKICAgIEsgPSAxCgogICAgaWYgTCA8IDE6CiAgICAgICAgcHJpbnQgIk5lZWQgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgaGlkZGVuIGxheWVyIgogICAgICAgIHN5cy5leGl0KDEpCgogICAgTCA9IEwgKyAxCgogICAgIyBMb2FkaW5nIGRhdGEgZnJhbWUgYW5kIGluaXRhbGl6aW5nIGRpbWVuc2lvbnMKICAgIGRmID0gcGQucmVhZF9jc3YodHJhaW5fZmlsZW5hbWUsIGRlbGltaXRlcj0iLCIsIG5hX3ZhbHVlcz0iPyIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIE0gPSBkZi5zaGFwZVswXQogICAgTiA9IGRmLnNoYXBlWzFdCiAgICBTID0gaW50KE4gKiBoZikgIyBpbmNsdWRlcyB0aGUgYmlhcyB1bml0IG9uIGVhY2ggbGF5ZXIsIHNvIHRoZSBudW1iZXIgb2YgdW5pdHMgaXMgUy0xCiAgICBwcmludCAiTnVtYmVyIG9mIGRhdGEgc2FtcGxlcyAgICAgICAgICA6IiwgTQo8fGZpbV9lbmR8Pg=="]
["0921d65d284e1db70f2d3db8e461d0f0c2c92cf2-4","0921d65d284e1db70f2d3db8e461d0f0c2c92cf2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJhbmRvbQppbXBvcnQgcHlnbGV0CmZyb20geWFmZi5zY2VuZSBpbXBvcnQgU2NlbmUKPHxmaW1faG9sZXw+CgogICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CgogICAgICAgIHN1cGVyKEdhbWVTY2VuZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQoKICAgICAgICBhaW1faW1hZ2UgPSBweWdsZXQucmVzb3VyY2UuaW1hZ2UoJ3Jlcy9pbWFnZXMvc3ByaXRlcy9haW0ucG5nJykKICAgICAgICBwaWdfaW1hZ2UgPSBweWdsZXQucmVzb3VyY2UuaW1hZ2UoJ3Jlcy9pbWFnZXMvc3ByaXRlcy9waWcucG5nJykKCiAgICAgICAgc2VsZi5iYXRjaCA9IHB5Z2xldC5ncmFwaGljcy5CYXRjaCgpCgogICAgICAgIHNlbGYuYWltID0gcHlnbGV0LnNwcml0ZS5TcHJpdGUoYWltX2ltYWdlLCB4PTEwMCwgeT0wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2g9c2VsZi5iYXRjaCkKCiAgICAgICAgc2VsZi5waWcgPSBQaWcocGlnX2ltYWdlLCB4PTEwMCwgeT0wLAogICAgICAgICAgICAgICAgICAgICAgIGJhdGNoPXNlbGYuYmF0Y2gpCgogICAgICAgIHNlbGYuYmFja2dyb3VuZCA9IHB5Z2xldC5yZXNvdXJjZS5pbWFnZSgncmVzL2ltYWdlcy9iZy9iZy5qcGcnKQoKICAgIGRlZiBzcGF3bl9waWcoc2VsZik6CiAgICAgICAgaWYgcmFuZG9tLnJhbmRpbnQoMTAwKSA+IDUwOgogICAgICAgICAgICBzaWRlID0gUGlnLlNUQVJUX0xFRlQKICAgICAgICBlbHNlOgogICAgICAgICAgICBzaWRlID0gUGlnLlNUQVJUX1JJR1RICiAgICAgICAgc2VsZi5waWcuc3BhdyhzaWRlKQoKICAgIGRlZiBvbl91cGRhdGUoc2VsZiwgZHQpOgogICAgICAgIHNlbGYucGlnLm9uX3VwZGF0ZShkdCkKCiAgICBkZWYgb25fbW91c2VfbW90aW9uKHNlbGYsIHgsIHksIGR4LCBkeSk6CiAgICAgICAgc2VsZi5haW0uc2V0X3Bvc2l0aW9uKHgsIHkpCgogICAgZGVmIG9uX2tleV9wcmVzcyhzZWxmLCBzeW1ib2wsIG1vZGlmaWVyKToKICAgICAgICBzZWxmLnNwYXduX3BpZygpCgogICAgZGVmIG9uX2RyYXcoc2VsZiwgd2luZG93KToKCiAgICAgICAgc3VwZXIoR2FtZVNjZW5lLCBzZWxmKS5vbl9kcmF3KHdpbmRvdykKCiAgICAgICAgc2VsZi5iYWNrZ3JvdW5kLmJsaXQoMCwgMCkKICAgICAgICBzZWxmLmJhdGNoLmRyYXcoKQo8fGZpbV9zdWZmaXh8Pgpmcm9tIC5waWcgaW1wb3J0IFBpZwoKCmNsYXNzIEdhbWVTY2VuZShTY2VuZSk6Cjx8ZmltX2VuZHw+"]
["6d75f95d30692a90ed8e1a937366da127f32b534-1","6d75f95d30692a90ed8e1a937366da127f32b534","PHxmaW1fcHJlZml4fD4KCiIiIklNUE9SVCBERVBFTkRFTkNJRVMiIiIKaW1wb3J0IHN5cwppbXBvcnQgcHlhdXRvZ3VpCmZyb20gdGltZSBpbXBvcnQgc2xlZXAsIHRpbWUKZnJvbSBwb3dpLmVxdWlwbWVudCBpbXBvcnQgQUNTb3VyY2UsIFBvd2VyTWV0ZXIsIEVsZWN0cm9uaWNMb2FkLCBPc2NpbGxvc2NvcGUKZnJvbSBwb3dpLmVxdWlwbWVudCBpbXBvcnQgaGVhZGVycywgY3JlYXRlX2ZvbGRlciwgZm9vdGVycywgd2F2ZWZvcm1fY291bnRlciwgc29haywgY29udmVydF9hcmd2X3RvX2ludF9saXN0CmZyb20gcG93aS5lcXVpcG1lbnQgaW1wb3J0ICoKZnJvbSB0aW1lIGltcG9ydCBzbGVlcCwgdGltZQppbXBvcnQgb3MKIyBpbXBvcnQgY3YyCiMgd2F2ZWZvcm1fY291bnRlciA9IDAKCiMgIiIiSU5JVElBTElaRSBFUVVJUE1FTlQiIiIKCgojIHByaW50KCJJbnRpYWxpemUgZXF1aXBtZW50LiIpCiMgYWMgPSBBQ1NvdXJjZShhY19zb3VyY2VfYWRkcmVzcykKIyBlbG9hZCA9IEVsZWN0cm9uaWNMb2FkKGVsb2FkX2FkZHJlc3MpCiMgc2NvcGUgPSBPc2NpbGxvc2NvcGUoc2NvcGVfYWRkcmVzcykKIyAjIHBtcyA9IFBvd2VyTWV0ZXIoc291cmNlX3Bvd2VyX21ldGVyX2FkZHJlc3MpCiMgIyBwbWwgPSBQb3dlck1ldGVyKGxvYWRfcG93ZXJfbWV0ZXJfYWRkcmVzcykKCmNsYXNzIEluaXRpYWxpemUoKToKCjx8ZmltX2hvbGV8PgogICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKCdjb21tX2FkZHJlc3MudHh0Jyk6CiAgICAgICAgICAgIHNlbGYuY2FsaWJyYXRpb25fc3RhdHVzID0gVHJ1ZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYuY2FsaWJyYXRpb25fc3RhdHVzID0gRmFsc2UKICAgICAgICAgICAgCgogICAgICAgICAgICBzZWxmLnNhdmVfc2V0dGluZ3MoKQoKICAgIGRlZiBpbml0aWFsaXplX3ZhcmlhYmxlcyhzZWxmKToKICAgICAgICBzZWxmLmNvbW1fYWRkcmVzcyA9IHt9CgogICAgZGVmIGNhbGlicmF0ZShzZWxmKToKICAgICAgICBzZWxmLmluaXRpYWxpemVfdmFyaWFibGVzKCkKICAgICAgICBzZWxmLmNvbW1fYWRkcmVzc1siYWNfc291cmNlX2FkZHJlc3MiXSA9IGlucHV0KCJFbnRlciBBQyBTT1VSQ0UgQWRkcmVzczogIikKICAgICAgICBzZWxmLmNvbW1fYWRkcmVzc1siZWxvYWRfYWRkcmVzcyJdID0gaW5wdXQoIkVudGVyIEVMT0FEIEFkZHJlc3M6ICIpCiAgICAgICAgc2VsZi5jb21tX2FkZHJlc3NbInNjb3BlX2FkZHJlc3MiXSA9IGlucHV0KCJFbnRlciBTQ09QRSBBZGRyZXNzOiAiKQogICAgICAgIHNlbGYuY29tbV9hZGRyZXNzWyJzb3VyY2VfcG93ZXJfbWV0ZXJfYWRkcmVzcyJdID0gaW5wdXQoIlNPVVJDRSBQT1dFUiBNRVRFUiBBZGRyZXNzOiAiKQogICAgICAgIHNlbGYuY29tbV9hZGRyZXNzWyJsb2FkX3Bvd2VyX21ldGVyX2FkZHJlc3MiXSA9IGlucHV0KCJMT0FEIFBPV0VSIE1FVEVSIEFkZHJlc3M6ICIpCiAgICAKICAgIGRlZiBzYXZlX3NldHRpbmdzKHNlbGYpOgogICAgICAgIGlmIHNlbGYuY2FsaWJyYXRpb25fc3RhdHVzID09IEZhbHNlOgogICAgICAgICAgICBzZWxmLmNhbGlicmF0ZSgpCiAgICAgICAgICAgIHdpdGggb3BlbignY29tbV9hZGRyZXNzLnR4dCcsICd3JykgYXMgZjoKICAgICAgICAgICAgICAgIGYud3JpdGUoc3RyKHNlbGYuY29tbV9hZGRyZXNzKSkKICAgIAogICAgZGVmIGxvYWRfc2V0dGluZ3Moc2VsZik6CiAgICAgICAgd2l0aCBvcGVuKCdjb21tX2FkZHJlc3MudHh0JywgJ3InKSBhcyBmOgogICAgICAgICAgICBzdHJfZGljdCA9IGYucmVhZCgpCiAgICAgICAgICAgIHNlbGYuY29tbV9hZGRyZXNzID0gZXZhbChzdHJfZGljdCkKICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tbV9hZGRyZXNzCgogICAgZGVmIHJlY2FsaWJyYXRlKHNlbGYpOgogICAgICAgIHByaW50KCJSZWNhbGlicmF0aW5nLi4uIikKICAgICAgICBzZWxmLmNhbGlicmF0aW9uX3N0YXR1cyA9IEZhbHNlCiAgICAgICAgc2VsZi5zYXZlX3NldHRpbmdzKCkKICAgICAgICBwcmludCgiUmVjYWxpYnJhdGlvbiBjb21wbGV0ZS4iKQoKICAgIGRlZiBFcXVpcG1lbnQoc2VsZik6CiAgICAgICAgc2VsZi5jb21tX2FkZHJlc3MgPSBzZWxmLmxvYWRfc2V0dGluZ3MoKQogICAgICAgICMgc2VsZi5hYyA9IEFDU291cmNlKHNlbGYuY29tbV9hZGRyZXNzWyJhY19zb3VyY2VfYWRkcmVzcyJdKQo8fGZpbV9zdWZmaXh8PgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIGltcG9ydCBvcy5wYXRoCiAgICAgICAgZnJvbSBvcyBpbXBvcnQgcGF0aAogICAgICAgIAo8fGZpbV9lbmR8Pg=="]
["c9cd44cc6b75b76121a62abd8edb89e4cbbc841f-2","c9cd44cc6b75b76121a62abd8edb89e4cbbc841f","PHxmaW1fcHJlZml4fD4KIyAoQykgRGF0YWRvZywgSW5jLiAyMDE4LXByZXNlbnQKIyBBbGwgcmlnaHRzIHJlc2VydmVkCiMgTGljZW5zZWQgdW5kZXIgYSAzLWNsYXVzZSBCU0Qgc3R5bGUgbGljZW5zZSAoc2VlIExJQ0VOU0UpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBpbyBpbXBvcnQgb3Blbgpmcm9tIG9zIGltcG9ydCBwYXRoCgpmcm9tIHNldHVwdG9vbHMgaW1wb3J0IHNldHVwCjx8ZmltX2VuZHw+"]
["8824f5b84c1612b976092ee326880ba742fafaa3-5","8824f5b84c1612b976092ee326880ba742fafaa3","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyA9ICdheW1nYWwnCgojIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBTTElUIGFsZ29yaXRobQoKaW1wb3J0IGNvcHkKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRoIGFzIG1hCgpmcm9tIHNsaXRyb25vbXkuT3B0aW1pemF0aW9uLnNvbHZlcl9iYXNlIGltcG9ydCBTcGFyc2VTb2x2ZXJCYXNlCmZyb20gc2xpdHJvbm9teS5PcHRpbWl6YXRpb24gaW1wb3J0IGFsZ29yaXRobXMKZnJvbSBzbGl0cm9ub215LlV0aWwgaW1wb3J0IHV0aWwKCgpjbGFzcyBTcGFyc2VTb2x2ZXJMZW5zKFNwYXJzZVNvbHZlckJhc2UpOgoKICAgICIiIlNvbHZlIGZvciB0aGUgbGVucyBsaWdodCBvbiBhIHBpeGVsYXRlZCBncmlkLCByZWd1bGFyaXplZCB3aXRoIHN0YXJsZXRzIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGFfY2xhc3MsIGltYWdlX251bWVyaWNzX2NsYXNzLCBzb3VyY2VfbnVtZXJpY3NfY2xhc3MsIGxlbnNfbGlnaHRfbW9kZWxfY2xhc3MsCiAgICAgICAgICAgICAgICAgbGVuc19saWdodF9tb2RlbF9tYXA9Tm9uZSwgbnVtX2l0ZXJfbGVucz0xMCwgbnVtX2l0ZXJfd2VpZ2h0cz0zLCAqKmJhc2Vfa3dhcmdzKToKICAgICAgICAiIiIKICAgICAgICA6cGFyYW0gZGF0YV9jbGFzczogbGVuc3Ryb25vbXkuaW1hZ2luZ19kYXRhLkltYWdlRGF0YSBpbnN0YW5jZSBkZXNjcmliaW5nIHRoZSBkYXRhLgogICAgICAgIDpwYXJhbSBpbWFnZV9udW1lcmljc19jbGFzczogbGVuc3Ryb25vbXkuSW1TaW0uTnVtZXJpY3MubnVtZXJpY3Nfc3ViZnJhbWUuTnVtZXJpY3NTdWJGcmFtZSBpbnN0YW5jZSBmb3IgaW1hZ2UgcGxhbmUuCiAgICAgICAgOnBhcmFtIHNvdXJjZV9udW1lcmljc19jbGFzczogbGVuc3Ryb25vbXkuSW1TaW0uTnVtZXJpY3MubnVtZXJpY3Nfc3ViZnJhbWUuTnVtZXJpY3NTdWJGcmFtZSBpbnN0YW5jZSBmb3Igc291cmNlIHBsYW5lLgogICAgICAgIDpwYXJhbSBzb3VyY2VfbW9kZWxfY2xhc3M6IGxlbnN0cm9ub215LmxpZ2h0X21vZGVsLkxpZ2h0TW9kZWwgaW5zdGFuY2UgZGVzY3JpYmluZyB0aGUgc291cmNlIGxpZ2h0LgogICAgICAgIDpwYXJhbSBudW1faXRlcl9sZW5zOiBudW1iZXIgb2YgaXRlcmF0aW9ucyBmb3Igc3BhcnNlIG9wdGltaXphdGlvbiBpbiB0aGUgbWFpbiBsb29wLiAgCiAgICAgICAgOnBhcmFtIG51bV9pdGVyX3dlaWdodHM6IG51bWJlciBvZiBpdGVyYXRpb25zIGZvciBsMS1ub3JtIHJlLXdlaWdodGluZyBzY2hlbWUuCiAgICAgICAgOnBhcmFtIGJhc2Vfa3dhcmdzOiBrZXl3b3JkIGFyZ3VtZW50cyBmb3IgU3BhcnNlU29sdmVyQmFzZS4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICAgICBJZiBub3Qgc2V0IG9yIHNldCB0byBOb25lLCAndGhyZXNob2xkX2RlY3JlYXNlX3R5cGUnIGluIGJhc2Vfa3dhcmdzIGRlZmF1bHRzIHRvICdleHBvbmVudGlhbCcuCiAgICAgICAgIiIiCiAgICAgICAgc3VwZXIoU3BhcnNlU29sdmVyTGVucywgc2VsZikuX19pbml0X18oZGF0YV9jbGFzcywgaW1hZ2VfbnVtZXJpY3NfY2xhc3MsIHNvdXJjZV9udW1lcmljc19jbGFzcywgCjx8ZmltX2VuZHw+"]
["3a3e2798cc1c1034d18e2636c6871b796549aa35-1","3a3e2798cc1c1034d18e2636c6871b796549aa35","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwpmcm9tIGRqYW5nby5jb25mIGltcG9ydCBzZXR0aW5ncwoKCmNsYXNzIE9ubGluZVByb2dyYW0obW9kZWxzLk1vZGVsKToKICAgIHVzZXJuYW1lID0gbW9kZWxzLk9uZVRvT25lRmllbGQoc2V0dGluZ3MuQVVUSF9VU0VSX01PREVMLCBvbl9kZWxldGU9bW9kZWxzLkNBU0NBREUsIHJlbGF0ZWRfbmFtZT0ib25saW5lcHJvZ3JhbSIsIGJsYW5rPUZhbHNlKQogICAgdGl0bGUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjU1LCBkZWZhdWx0PSIiLCBibGFuaz1UcnVlKQogICAgYWJvdXQgPSBtb2RlbHMuVGV4dEZpZWxkKGRlZmF1bHQ9IiIsIGJsYW5rPVRydWUpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi51c2VybmFtZQoKPHxmaW1fZW5kfD4="]
["0965d7f58e605a3961b5e5a9fc83d3ba12205bf1-1","0965d7f58e605a3961b5e5a9fc83d3ba12205bf1","PHxmaW1fcHJlZml4fD4KZnJvbSBtb2xzeXNtdC5fcHJpdmF0ZV90b29scy5leGNlcHRpb25zIGltcG9ydCAqCmZyb20gbW9sc3lzbXQuZm9ybXMuY29tbW9uX2dldHMgaW1wb3J0ICoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBpbXBvcnRsaWIKaW1wb3J0IHN5cwpmcm9tIG1vbHN5c210Lm5hdGl2ZS5tb2xlY3VsYXJfc3lzdGVtIGltcG9ydCBtb2xlY3VsYXJfc3lzdGVtX2NvbXBvbmVudHMKZnJvbSBtb2xzeXNtdC5fcHJpdmF0ZV90b29scy5maWxlc19hbmRfZGlyZWN0b3JpZXMgaW1wb3J0IHRlbXBfZmlsZW5hbWUKCmZvcm1fbmFtZT0nZmlsZTp4dGMnCgppc19mb3JtID0gewogICAgICAgICdmaWxlOnh0Yyc6Zm9ybV9uYW1lCiAgICB9CgppbmZvPVsiIiwiIl0KCmhhcyA9IG1vbGVjdWxhcl9zeXN0ZW1fY29tcG9uZW50cy5jb3B5KCkKZm9yIGlpIGluIFsnY29vcmRpbmF0ZXMnLCAnYm94J106CiAgICBoYXNbaWldPVRydWUKCmRlZiB0b19tb2xzeXNtdF9UcmFqZWN0b3J5KGl0ZW0sIG1vbGVjdWxhcl9zeXN0ZW09Tm9uZSwgYXRvbV9pbmRpY2VzPSdhbGwnLCBmcmFtZV9pbmRpY2VzPSdhbGwnKToKCiAgICBmcm9tIG1vbHN5c210Lm5hdGl2ZS5pby50cmFqZWN0b3J5IGltcG9ydCBmcm9tX2ZpbGVfeHRjIGFzIGZpbGVfeHRjX3RvX21vbHN5c210X1RyYWplY3RvcnkKCiAgICB0bXBfaXRlbSwgdG1wX21vbGVjdWxhcl9zeXN0ZW0gPSBmaWxlX3h0Y190b19tb2xzeXNtdF9UcmFqZWN0b3J5KGl0ZW0sIG1vbGVjdWxhcl9zeXN0ZW09bW9sZWN1bGFyX3N5c3RlbSwgYXRvbV9pbmRpY2VzPWF0b21faW5kaWNlcywgZnJhbWVfaW5kaWNlcz1mcmFtZV9pbmRpY2VzKQoKICAgIHJldHVybiB0bXBfaXRlbSwgdG1wX21vbGVjdWxhcl9zeXN0ZW0KCmRlZiB0b19tZHRyYWpfWFRDVHJhamVjdG9yeUZpbGUoaXRlbSwgbW9sZWN1bGFyX3N5c3RlbT1Ob25lLCBhdG9tX2luZGljZXM9J2FsbCcsIGZyYW1lX2luZGljZXM9J2FsbCcpOgoKICAgIGZyb20gbWR0cmFqLmZvcm1hdHMgaW1wb3J0IFhUQ1RyYWplY3RvcnlGaWxlCgogICAgdG1wX2l0ZW0gPSBYVENUcmFqZWN0b3J5RmlsZShpdGVtKQogICAgaWYgbW9sZWN1bGFyX3N5c3RlbSBpcyBub3QgTm9uZToKICAgICAgICB0bXBfbW9sZWN1bGFyX3N5c3RlbSA9IG1vbGVjdWxhcl9zeXN0ZW0uY29tYmluZV93aXRoX2l0ZW1zKHRtcF9pdGVtKQogICAgZWxzZToKICAgICAgICB0bXBfbW9sZWN1bGFyX3N5c3RlbSA9IE5vbmUKCiAgICByZXR1cm4gdG1wX2l0ZW0sIHRtcF9tb2xlY3VsYXJfc3lzdGVtCgpkZWYgdG9fbWR0cmFqX1RyYWplY3RvcnkoaXRlbSwgbW9sZWN1bGFyX3N5c3RlbT1Ob25lLCBhdG9tX2luZGljZXM9J2FsbCcsIGZyYW1lX2luZGljZXM9J2FsbCcpOgoKICAgIGZyb20gbW9sc3lzbXQuZm9ybXMuYXBpX21kdHJhal9UcmFqZWN0b3J5IGltcG9ydCB0b19tZHRyYWpfVHJhamVjdG9yeSBhcyBtZHRyYWpfVHJhamVjdG9yeV90b19tZHRyYWpfVHJhamVjdG9yeQoKICAgIHRtcF9pdGVtLCBfID0gdG9fbWR0cmFqX1hUQ1RyYWplY3RvcnlGaWxlKGl0ZW0pCgogICAgaWYgbW9sZWN1bGFyX3N5c3RlbS5lbGVtZW50c19pdGVtIGlzIG5vdCBOb25lOgogICAgICAgIGlmIG1vbGVjdWxhcl9zeXN0ZW0uZWxlbWVudHNfZm9ybSA9PSAnbWR0cmFqLlRvcG9sb2d5JzoKICAgICAgICAgICAgdG9wID0gbW9sZWN1bGFyX3N5c3RlbS5lbGVtZW50c19pdGVtCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZnJvbSBtb2xzeXNtdC5mb3JtcyBpbXBvcnQgZGljdF9jb252ZXJ0CiAgICAgICAgICAgIGF1eF9pdGVtID0gbW9sZWN1bGFyX3N5c3RlbS5lbGVtZW50c19pdGVtCiAgICAgICAgICAgIGF1eF9pdGVtX2Zvcm0gPSBtb2xlY3VsYXJfc3lzdGVtLmVsZW1lbnRzX2Zvcm0KICAgICAgICAgICAgYXV4X2l0ZW0sIF8gPSBkaWN0X2NvbnZlcnRbYXV4X2l0ZW1fZm9ybV1bJ21kdHJhai5Ub3BvbG9neSddKGF1eF9pdGVtKQogICAgICAgICAgICB0b3AgPSBhdXhfaXRlbQogICAgZWxzZToKICAgICAgICByYWlzZSBOb3RXaXRoVGhpc01vbGVjdWxhclN5c3RlbUVycm9yKCkKCiAgICBhdXhfYXRvbV9pbmRpY2VzPWF0b21faW5kaWNlcwogICAgaWYgYXV4X2F0b21faW5kaWNlcz09J2FsbCc6CiAgICAgICAgYXV4X2F0b21faW5kaWNlcz1Ob25lCgogICAgdG1wX2l0ZW0gPSB0bXBfaXRlbS5yZWFkX2FzX3RyYWoodG9wLCBhdG9tX2luZGljZXM9YXV4X2F0b21faW5kaWNlcykKCiAgICBpZiBtb2xlY3VsYXJfc3lzdGVtIGlzIG5vdCBOb25lOgogICAgICAgIHRtcF9tb2xlY3VsYXJfc3lzdGVtID0gbW9sZWN1bGFyX3N5c3RlbS5jb21iaW5lX3dpdGhfaXRlbXModG1wX2l0ZW0pCiAgICBlbHNlOgogICAgICAgIHRtcF9tb2xlY3VsYXJfc3lzdGVtID0gTm9uZQoKICAgIHRtcF9pdGVtLCB0bXBfbW9sZWN1bGFyX3N5c3RlbSA9IG1kdHJhal9UcmFqZWN0b3J5X3RvX21kdHJhal9UcmFqZWN0b3J5KHRtcF9pdGVtLAogICAgICAgICAgICBtb2xlY3VsYXJfc3lzdGVtPXRtcF9tb2xlY3VsYXJfc3lzdGVtLCBmcmFtZV9pbmRpY2VzPWZyYW1lX2luZGljZXMsIGNvcHlfaWZfYWxsPUZhbHNlKQoKICAgIHJldHVybiB0bXBfaXRlbSwgdG1wX21vbGVjdWxhcl9zeXN0ZW0KCmRlZiB0b19maWxlX3h0YyhpdGVtLCBtb2xlY3VsYXJfc3lzdGVtLCBhdG9tX2luZGljZXM9J2FsbCcsIGZyYW1lX2luZGljZXM9J2FsbCcsIG91dHB1dF9maWxlbmFtZT1Ob25lLCBjb3B5X2lmX2FsbD1UcnVlKToKCiAgICB0bXBfbW9sZWN1bGFyX3N5c3RlbSA9IE5vbmUKCiAgICBpZiAoYXRvbV9pbmRpY2VzIGlzICdhbGwnKSBhbmQgKGZyYW1lX2luZGljZXMgaXMgJ2FsbCcpOgogICAgICAgIGlmIGNvcHlfaWZfYWxsOgogICAgICAgICAgICB0bXBfaXRlbSA9IGV4dHJhY3QoaXRlbSwgb3V0cHV0X2ZpbGVuYW1lPW91dHB1dF9maWxlbmFtZSkKICAgICAgICAgICAgaWYgbW9sZWN1bGFyX3N5c3RlbSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgIHRtcF9tb2xlY3VsYXJfc3lzdGVtID0gbW9sZWN1bGFyX3N5c3RlbS5jb21iaW5lX3dpdGhfaXRlbXModG1wX2l0ZW0pCiAgICAgICAgZWxzZToKICAgICAgICAgICAgdG1wX2l0ZW0gPSBpdGVtCiAgICAgICAgICAgIGlmIG1vbGVjdWxhcl9zeXN0ZW0gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICB0bXBfbW9sZWN1bGFyX3N5c3RlbSA9IG1vbGVjdWxhcl9zeXN0ZW0KICAgIGVsc2U6CiAgICAgICAgdG1wX2l0ZW0gPSBleHRyYWN0KGl0ZW0sIGF0b21faW5kaWNlcz1hdG9tX2luZGljZXMsIGZyYW1lX2luZGljZXM9ZnJhbWVfaW5kaWNlcywgb3V0cHV0X2ZpbGVuYW1lPW91dHB1dF9maWxlbmFtZSkKICAgICAgICBpZiBtb2xlY3VsYXJfc3lzdGVtIGlzIG5vdCBOb25lOgogICAgICAgICAgICB0bXBfbW9sZWN1bGFyX3N5c3RlbSA9IG1vbGVjdWxhcl9zeXN0ZW0uY29tYmluZV93aXRoX2l0ZW1zKHRtcF9pdGVtLCBhdG9tX2luZGljZXM9YXRvbV9pbmRpY2VzLCBmcmFtZV9pbmRpY2VzPWZyYW1lX2luZGljZXMpCgogICAgcmV0dXJuIHRtcF9pdGVtLCB0bXBfbW9sZWN1bGFyX3N5c3RlbQoKZGVmIGV4dHJhY3QoaXRlbSwgYXRvbV9pbmRpY2VzPSdhbGwnLCBmcmFtZV9pbmRpY2VzPSdhbGwnLCBvdXRwdXRfZmlsZW5hbWU9Tm9uZSk6CgogICAgaWYgb3V0cHV0X2ZpbGVuYW1lIGlzIE5vbmU6CiAgICAgICAgb3V0cHV0X2ZpbGVuYW1lID0gdGVtcF9maWxlbmFtZShleHRlbnNpb249J3h0YycpCgogICAgaWYgKGF0b21faW5kaWNlcyBpcyAnYWxsJykgYW5kIChmcmFtZV9pbmRpY2VzIGlzICdhbGwnKToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKICAgIGVsc2U6CiAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCgogICAgcmV0dXJuIHRtcF9pdGVtCgpkZWYgbWVyZ2UoaXRlbV8xLCBpdGVtXzIpOgoKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCmRlZiBhZGQodG9faXRlbSwgaXRlbSk6CgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKZGVmIGFwcGVuZF9mcmFtZXMoaXRlbSwgc3RlcD1Ob25lLCB0aW1lPU5vbmUsIGNvb3JkaW5hdGVzPU5vbmUsIGJveD1Ob25lKToKCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgpkZWYgY29uY2F0ZW5hdGVfZnJhbWVzKGl0ZW0sIHN0ZXA9Tm9uZSwgdGltZT1Ob25lLCBjb29yZGluYXRlcz1Ob25lLCBib3g9Tm9uZSk6CgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKIyMjIyBHZXQKCmRlZiBhdXhfZ2V0KGl0ZW0sIGluZGljZXM9J2FsbCcsIGZyYW1lX2luZGljZXM9J2FsbCcpOgo8fGZpbV9ob2xlfD4KCiAgICBpZiAnbWR0cmFqLlhUQ1RyYWplY3RvcnlGaWxlJyBpbiBmb3JtczoKCiAgICAgICAgdG1wX2l0ZW0sIF8gPSB0b19tZHRyYWpfWFRDVHJhamVjdG9yeUZpbGUoaXRlbSkKICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnbW9sc3lzbXQuZm9ybXMuYXBpX21kdHJhal9YVENUcmFqZWN0b3J5RmlsZScpCiAgICAgICAgX2dldCA9IGdldGF0dHIobW9kdWxlLCBtZXRob2RfbmFtZSkKICAgICAgICBvdXRwdXQgPSBfZ2V0KHRtcF9pdGVtLCBpbmRpY2VzPWluZGljZXMsIGZyYW1lX2luZGljZXM9ZnJhbWVfaW5kaWNlcykKCiAgICBlbHNlOgoKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogICAgcmV0dXJuIG91dHB1dAoKIyMgYXRvbQoKZGVmIGdldF9hdG9tX2luZGV4X2Zyb21fYXRvbShpdGVtLCBpbmRpY2VzPSdhbGwnLCBmcmFtZV9pbmRpY2VzPSdhbGwnKToKCiAgICByYWlzZSBOb3RXaXRoVGhpc0Zvcm1FcnJvcigpCgpkZWYgZ2V0X2F0b21faWRfZnJvbV9hdG9tKGl0ZW0sIGluZGljZXM9J2FsbCcsIGZyYW1lX2luZGljZXM9J2FsbCcpOgoKICAgIHJhaXNlIE5vdFdpdGhUaGlzRm9ybUVycm9yKCkKCmRlZiBnZXRfYXRvbV9uYW1lX2Zyb21fYXRvbShpdGVtLCBpbmRpY2VzPSdhbGwnLCBmcmFtZV9pbmRpY2VzPSdhbGwnKToKCiAgICByYWlzZSBOb3RXaXRoVGhpc0Zvcm1FcnJvcigpCgpkZWYgZ2V0X2F0b21fdHlwZV9mcm9tX2F0b20oaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmFpc2UgTm90V2l0aFRoaXNGb3JtRXJyb3IoKQoKZGVmIGdldF9ncm91cF9pbmRleF9mcm9tX2F0b20gKGl0ZW0sIGluZGljZXM9J2FsbCcsIGZyYW1lX2luZGljZXM9J2FsbCcpOgoKICAgIHJhaXNlIE5vdFdpdGhUaGlzRm9ybUVycm9yKCkKCmRlZiBnZXRfY29tcG9uZW50X2luZGV4X2Zyb21fYXRvbSAoaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmFpc2UgTm90V2l0aFRoaXNGb3JtRXJyb3IoKQoKZGVmIGdldF9jaGFpbl9pbmRleF9mcm9tX2F0b20gKGl0ZW0sIGluZGljZXM9J2FsbCcsIGZyYW1lX2luZGljZXM9J2FsbCcpOgoKICAgIHJhaXNlIE5vdFdpdGhUaGlzRm9ybUVycm9yKCkKCmRlZiBnZXRfbW9sZWN1bGVfaW5kZXhfZnJvbV9hdG9tIChpdGVtLCBpbmRpY2VzPSdhbGwnLCBmcmFtZV9pbmRpY2VzPSdhbGwnKToKCiAgICByYWlzZSBOb3RXaXRoVGhpc0Zvcm1FcnJvcigpCgpkZWYgZ2V0X2VudGl0eV9pbmRleF9mcm9tX2F0b20gKGl0ZW0sIGluZGljZXM9J2FsbCcsIGZyYW1lX2luZGljZXM9J2FsbCcpOgoKICAgIHJhaXNlIE5vdFdpdGhUaGlzRm9ybUVycm9yKCkKCmRlZiBnZXRfaW5uZXJfYm9uZGVkX2F0b21zX2Zyb21fYXRvbSAoaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmFpc2UgTm90V2l0aFRoaXNGb3JtRXJyb3IoKQoKZGVmIGdldF9uX2lubmVyX2JvbmRzX2Zyb21fYXRvbSAoaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmFpc2UgTm90V2l0aFRoaXNGb3JtRXJyb3IoKQoKZGVmIGdldF9uX2lubmVyX2JvbmRzX2Zyb21fYXRvbSAoaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmFpc2UgTm90V2l0aFRoaXNGb3JtRXJyb3IoKQoKZGVmIGdldF9jb29yZGluYXRlc19mcm9tX2F0b20oaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmV0dXJuIGF1eF9nZXQoaXRlbSwgaW5kaWNlcz1pbmRpY2VzLCBmcmFtZV9pbmRpY2VzPWZyYW1lX2luZGljZXMpCgpkZWYgZ2V0X2ZyYW1lX2Zyb21fYXRvbShpdGVtLCBpbmRpY2VzPSdhbGwnLCBmcmFtZV9pbmRpY2VzPSdhbGwnKToKCiAgICByZXR1cm4gYXV4X2dldChpdGVtLCBpbmRpY2VzPWluZGljZXMsIGZyYW1lX2luZGljZXM9ZnJhbWVfaW5kaWNlcykKCiMjIGdyb3VwCgpkZWYgZ2V0X2dyb3VwX2lkX2Zyb21fZ3JvdXAoaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmV0dXJuIGF1eF9nZXQoaXRlbSwgaW5kaWNlcz1pbmRpY2VzLCBmcmFtZV9pbmRpY2VzPWZyYW1lX2luZGljZXMpCgpkZWYgZ2V0X2dyb3VwX25hbWVfZnJvbV9ncm91cChpdGVtLCBpbmRpY2VzPSdhbGwnLCBmcmFtZV9pbmRpY2VzPSdhbGwnKToKCiAgICByZXR1cm4gYXV4X2dldChpdGVtLCBpbmRpY2VzPWluZGljZXMsIGZyYW1lX2luZGljZXM9ZnJhbWVfaW5kaWNlcykKCmRlZiBnZXRfZ3JvdXBfdHlwZV9mcm9tX2dyb3VwKGl0ZW0sIGluZGljZXM9J2FsbCcsIGZyYW1lX2luZGljZXM9J2FsbCcpOgoKICAgIHJldHVybiBhdXhfZ2V0KGl0ZW0sIGluZGljZXM9aW5kaWNlcywgZnJhbWVfaW5kaWNlcz1mcmFtZV9pbmRpY2VzKQoKIyMgY29tcG9uZW50CgpkZWYgZ2V0X2NvbXBvbmVudF9pZF9mcm9tX2NvbXBvbmVudCAoaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmV0dXJuIGF1eF9nZXQoaXRlbSwgaW5kaWNlcz1pbmRpY2VzLCBmcmFtZV9pbmRpY2VzPWZyYW1lX2luZGljZXMpCgpkZWYgZ2V0X2NvbXBvbmVudF9uYW1lX2Zyb21fY29tcG9uZW50IChpdGVtLCBpbmRpY2VzPSdhbGwnLCBmcmFtZV9pbmRpY2VzPSdhbGwnKToKCiAgICByZXR1cm4gYXV4X2dldChpdGVtLCBpbmRpY2VzPWluZGljZXMsIGZyYW1lX2luZGljZXM9ZnJhbWVfaW5kaWNlcykKCmRlZiBnZXRfY29tcG9uZW50X3R5cGVfZnJvbV9jb21wb25lbnQgKGl0ZW0sIGluZGljZXM9J2FsbCcsIGZyYW1lX2luZGljZXM9J2FsbCcpOgoKICAgIHJldHVybiBhdXhfZ2V0KGl0ZW0sIGluZGljZXM9aW5kaWNlcywgZnJhbWVfaW5kaWNlcz1mcmFtZV9pbmRpY2VzKQoKIyMgbW9sZWN1bGUKCmRlZiBnZXRfbW9sZWN1bGVfaWRfZnJvbV9tb2xlY3VsZSAoaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmV0dXJuIGF1eF9nZXQoaXRlbSwgaW5kaWNlcz1pbmRpY2VzLCBmcmFtZV9pbmRpY2VzPWZyYW1lX2luZGljZXMpCgpkZWYgZ2V0X21vbGVjdWxlX25hbWVfZnJvbV9tb2xlY3VsZSAoaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmV0dXJuIGF1eF9nZXQoaXRlbSwgaW5kaWNlcz1pbmRpY2VzLCBmcmFtZV9pbmRpY2VzPWZyYW1lX2luZGljZXMpCgpkZWYgZ2V0X21vbGVjdWxlX3R5cGVfZnJvbV9tb2xlY3VsZSAoaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmV0dXJuIGF1eF9nZXQoaXRlbSwgaW5kaWNlcz1pbmRpY2VzLCBmcmFtZV9pbmRpY2VzPWZyYW1lX2luZGljZXMpCgojIyBjaGFpbgoKZGVmIGdldF9jaGFpbl9pZF9mcm9tX2NoYWluIChpdGVtLCBpbmRpY2VzPSdhbGwnLCBmcmFtZV9pbmRpY2VzPSdhbGwnKToKCiAgICByZXR1cm4gYXV4X2dldChpdGVtLCBpbmRpY2VzPWluZGljZXMsIGZyYW1lX2luZGljZXM9ZnJhbWVfaW5kaWNlcykKCmRlZiBnZXRfY2hhaW5fbmFtZV9mcm9tX2NoYWluIChpdGVtLCBpbmRpY2VzPSdhbGwnLCBmcmFtZV9pbmRpY2VzPSdhbGwnKToKCiAgICByZXR1cm4gYXV4X2dldChpdGVtLCBpbmRpY2VzPWluZGljZXMsIGZyYW1lX2luZGljZXM9ZnJhbWVfaW5kaWNlcykKCmRlZiBnZXRfY2hhaW5fdHlwZV9mcm9tX2NoYWluIChpdGVtLCBpbmRpY2VzPSdhbGwnLCBmcmFtZV9pbmRpY2VzPSdhbGwnKToKCiAgICByZXR1cm4gYXV4X2dldChpdGVtLCBpbmRpY2VzPWluZGljZXMsIGZyYW1lX2luZGljZXM9ZnJhbWVfaW5kaWNlcykKCiMjIGVudGl0eQoKZGVmIGdldF9lbnRpdHlfaWRfZnJvbV9lbnRpdHkgKGl0ZW0sIGluZGljZXM9J2FsbCcsIGZyYW1lX2luZGljZXM9J2FsbCcpOgoKICAgIHJldHVybiBhdXhfZ2V0KGl0ZW0sIGluZGljZXM9aW5kaWNlcywgZnJhbWVfaW5kaWNlcz1mcmFtZV9pbmRpY2VzKQoKZGVmIGdldF9lbnRpdHlfbmFtZV9mcm9tX2VudGl0eSAoaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmV0dXJuIGF1eF9nZXQoaXRlbSwgaW5kaWNlcz1pbmRpY2VzLCBmcmFtZV9pbmRpY2VzPWZyYW1lX2luZGljZXMpCgpkZWYgZ2V0X2VudGl0eV90eXBlX2Zyb21fZW50aXR5IChpdGVtLCBpbmRpY2VzPSdhbGwnLCBmcmFtZV9pbmRpY2VzPSdhbGwnKToKCiAgICByZXR1cm4gYXV4X2dldChpdGVtLCBpbmRpY2VzPWluZGljZXMsIGZyYW1lX2luZGljZXM9ZnJhbWVfaW5kaWNlcykKCiMjIHN5c3RlbQoKZGVmIGdldF9uX2F0b21zX2Zyb21fc3lzdGVtKGl0ZW0sIGluZGljZXM9J2FsbCcsIGZyYW1lX2luZGljZXM9J2FsbCcpOgoKICAgIHJldHVybiBhdXhfZ2V0KGl0ZW0sIGluZGljZXM9aW5kaWNlcywgZnJhbWVfaW5kaWNlcz1mcmFtZV9pbmRpY2VzKQoKZGVmIGdldF9uX2dyb3Vwc19mcm9tX3N5c3RlbShpdGVtLCBpbmRpY2VzPSdhbGwnLCBmcmFtZV9pbmRpY2VzPSdhbGwnKToKCiAgICByYWlzZSBOb3RXaXRoVGhpc0Zvcm1FcnJvcigpCgpkZWYgZ2V0X25fY29tcG9uZW50c19mcm9tX3N5c3RlbShpdGVtLCBpbmRpY2VzPSdhbGwnLCBmcmFtZV9pbmRpY2VzPSdhbGwnKToKCiAgICByYWlzZSBOb3RXaXRoVGhpc0Zvcm1FcnJvcigpCgpkZWYgZ2V0X25fY2hhaW5zX2Zyb21fc3lzdGVtKGl0ZW0sIGluZGljZXM9J2FsbCcsIGZyYW1lX2luZGljZXM9J2FsbCcpOgoKICAgIHJhaXNlIE5vdFdpdGhUaGlzRm9ybUVycm9yKCkKCmRlZiBnZXRfbl9tb2xlY3VsZXNfZnJvbV9zeXN0ZW0oaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmFpc2UgTm90V2l0aFRoaXNGb3JtRXJyb3IoKQoKZGVmIGdldF9uX2VudGl0aWVzX2Zyb21fc3lzdGVtKGl0ZW0sIGluZGljZXM9J2FsbCcsIGZyYW1lX2luZGljZXM9J2FsbCcpOgoKICAgIHJhaXNlIE5vdFdpdGhUaGlzRm9ybUVycm9yKCkKCmRlZiBnZXRfbl9ib25kc19mcm9tX3N5c3RlbShpdGVtLCBpbmRpY2VzPSdhbGwnLCBmcmFtZV9pbmRpY2VzPSdhbGwnKToKCiAgICByYWlzZSBOb3RXaXRoVGhpc0Zvcm1FcnJvcigpCgpkZWYgZ2V0X2Nvb3JkaW5hdGVzX2Zyb21fc3lzdGVtKGl0ZW0sIGluZGljZXM9J2FsbCcsIGZyYW1lX2luZGljZXM9J2FsbCcpOgoKICAgIHJldHVybiBhdXhfZ2V0KGl0ZW0sIGluZGljZXM9aW5kaWNlcywgZnJhbWVfaW5kaWNlcz1mcmFtZV9pbmRpY2VzKQoKZGVmIGdldF9ib3hfZnJvbV9zeXN0ZW0oaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmV0dXJuIGF1eF9nZXQoaXRlbSwgaW5kaWNlcz1pbmRpY2VzLCBmcmFtZV9pbmRpY2VzPWZyYW1lX2luZGljZXMpCgpkZWYgZ2V0X2JveF9zaGFwZV9mcm9tX3N5c3RlbShpdGVtLCBpbmRpY2VzPSdhbGwnLCBmcmFtZV9pbmRpY2VzPSdhbGwnKToKCiAgICByZXR1cm4gYXV4X2dldChpdGVtLCBpbmRpY2VzPWluZGljZXMsIGZyYW1lX2luZGljZXM9ZnJhbWVfaW5kaWNlcykKCmRlZiBnZXRfYm94X2xlbmd0aHNfZnJvbV9zeXN0ZW0oaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmV0dXJuIGF1eF9nZXQoaXRlbSwgaW5kaWNlcz1pbmRpY2VzLCBmcmFtZV9pbmRpY2VzPWZyYW1lX2luZGljZXMpCgpkZWYgZ2V0X2JveF9hbmdsZXNfZnJvbV9zeXN0ZW0oaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmV0dXJuIGF1eF9nZXQoaXRlbSwgaW5kaWNlcz1pbmRpY2VzLCBmcmFtZV9pbmRpY2VzPWZyYW1lX2luZGljZXMpCgpkZWYgZ2V0X2JveF92b2x1bWVfZnJvbV9zeXN0ZW0oaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmV0dXJuIGF1eF9nZXQoaXRlbSwgaW5kaWNlcz1pbmRpY2VzLCBmcmFtZV9pbmRpY2VzPWZyYW1lX2luZGljZXMpCgpkZWYgZ2V0X3RpbWVfZnJvbV9zeXN0ZW0oaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmV0dXJuIGF1eF9nZXQoaXRlbSwgaW5kaWNlcz1pbmRpY2VzLCBmcmFtZV9pbmRpY2VzPWZyYW1lX2luZGljZXMpCgpkZWYgZ2V0X3N0ZXBfZnJvbV9zeXN0ZW0oaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmV0dXJuIGF1eF9nZXQoaXRlbSwgaW5kaWNlcz1pbmRpY2VzLCBmcmFtZV9pbmRpY2VzPWZyYW1lX2luZGljZXMpCgpkZWYgZ2V0X25fZnJhbWVzX2Zyb21fc3lzdGVtKGl0ZW0sIGluZGljZXM9J2FsbCcsIGZyYW1lX2luZGljZXM9J2FsbCcpOgoKICAgIHJldHVybiBhdXhfZ2V0KGl0ZW0sIGluZGljZXM9aW5kaWNlcywgZnJhbWVfaW5kaWNlcz1mcmFtZV9pbmRpY2VzKQoKZGVmIGdldF9ib25kZWRfYXRvbXNfZnJvbV9zeXN0ZW0oaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmFpc2UgTm90V2l0aFRoaXNGb3JtRXJyb3IoKQoKIyMgYm9uZAoKZGVmIGdldF9ib25kX29yZGVyX2Zyb21fYm9uZChpdGVtLCBpbmRpY2VzPSdhbGwnLCBmcmFtZV9pbmRpY2VzPSdhbGwnKToKCiAgICByYWlzZSBOb3RXaXRoVGhpc0Zvcm1FcnJvcigpCgpkZWYgZ2V0X2JvbmRfdHlwZV9mcm9tX2JvbmQoaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJyk6CgogICAgcmFpc2UgTm90V2l0aFRoaXNGb3JtRXJyb3IoKQoKZGVmIGdldF9hdG9tX2luZGV4X2Zyb21fYm9uZChpdGVtLCBpbmRpY2VzPSdhbGwnLCBmcmFtZV9pbmRpY2VzPSdhbGwnKToKCiAgICByYWlzZSBOb3RXaXRoVGhpc0Zvcm1FcnJvcigpCgojIyMjIyMgU2V0CgpkZWYgc2V0X2JveF90b19zeXN0ZW0oaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJywgdmFsdWU9Tm9uZSk6CgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKZGVmIHNldF9jb29yZGluYXRlc190b19zeXN0ZW0oaXRlbSwgaW5kaWNlcz0nYWxsJywgZnJhbWVfaW5kaWNlcz0nYWxsJywgdmFsdWU9Tm9uZSk6CgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKPHxmaW1fc3VmZml4fD4KCiAgICBmcm9tIG1vbHN5c210LmZvcm1zIGltcG9ydCBmb3JtcwoKICAgIG1ldGhvZF9uYW1lID0gc3lzLl9nZXRmcmFtZSgxKS5mX2NvZGUuY29fbmFtZQo8fGZpbV9lbmR8Pg=="]
["3a96716214f1e45aea8cb590bbbeb18d80f5b59f-4","3a96716214f1e45aea8cb590bbbeb18d80f5b59f","PHxmaW1fcHJlZml4fD4KCgpjbGFzcyBIdW1pZGl0eVBJRERhdGE6CiAgICAiIiIgQ2FwdHVyZXMgZGF0YSBmcm9tIEh1bWlkaXR5UElEQ29udHJvbGxlciAiIiIKCjx8ZmltX2hvbGV8PgogICAgICAgIHJldHVybiAnZmVlZGJhY2s9e30nLmZvcm1hdChzZWxmLmZlZWRiYWNrKQo8fGZpbV9zdWZmaXh8PgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGZlZWRiYWNrKToKICAgICAgICBzZWxmLmZlZWRiYWNrID0gZmVlZGJhY2sKCiAgICBkZWYgX19zdHJfXyhzZWxmKToKPHxmaW1fZW5kfD4="]
["fed3d9c0ce7de1d43815f43a42144e347ba8216f-4","fed3d9c0ce7de1d43815f43a42144e347ba8216f","PHxmaW1fcHJlZml4fD4KYmVnaW5fdW5pdApjb21tZW50fCcjIENvcHlyaWdodCAyMDExIE9wZW5TdGFjayBGb3VuZGF0aW9uJwpubHwnXG4nCmNvbW1lbnR8JyMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4nCm5sfCdcbicKY29tbWVudHwnIycKbmx8J1xuJwpjb21tZW50fCcjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5JwpubHwnXG4nCmNvbW1lbnR8JyMgICAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4nCm5sfCdcbicKY29tbWVudHwnIyAgICBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQnCm5sfCdcbicKY29tbWVudHwnIycKbmx8J1xuJwpjb21tZW50fCcjICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wJwpubHwnXG4nCmNvbW1lbnR8JyMnCm5sfCdcbicKY29tbWVudHwnIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlJwpubHwnXG4nCmNvbW1lbnR8JyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCcKbmx8J1xuJwpjb21tZW50fCcjICAgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZScKbmx8J1xuJwpjb21tZW50fCcjICAgIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zJwpubHwnXG4nCmNvbW1lbnR8JyMgICAgdW5kZXIgdGhlIExpY2Vuc2UuJwpubHwnXG4nCm5sfCdcbicKbmFtZXwnaW1wb3J0JwpuYW1lfCdtb2NrJwpuZXdsaW5lfCdcbicKbmFtZXwnaW1wb3J0JwpuYW1lfCd3ZWJvYicKbmV3bGluZXwnXG4nCm5sfCdcbicKbmFtZXwnZnJvbScKbmFtZXwnbm92YScKb3B8Jy4nCm5hbWV8J2FwaScKb3B8Jy4nCm5hbWV8J29wZW5zdGFjaycKb3B8Jy4nCm5hbWV8J2NvbXB1dGUnCm5hbWV8J2ltcG9ydCcKbmFtZXwnbXVsdGluaWMnCm5hbWV8J2FzJwpuYW1lfCdtdWx0aW5pY192MjEnCm5ld2xpbmV8J1xuJwpuYW1lfCdmcm9tJwpuYW1lfCdub3ZhJwpuYW1lfCdpbXBvcnQnCm5hbWV8J2NvbXB1dGUnCm5ld2xpbmV8J1xuJwpuYW1lfCdmcm9tJwpuYW1lfCdub3ZhJwpuYW1lfCdpbXBvcnQnCm5hbWV8J2V4Y2VwdGlvbicKbmV3bGluZXwnXG4nCm5hbWV8J2Zyb20nCm5hbWV8J25vdmEnCm5hbWV8J2ltcG9ydCcKbmFtZXwnb2JqZWN0cycKbmV3bGluZXwnXG4nCm5hbWV8J2Zyb20nCm5hbWV8J25vdmEnCm5hbWV8J2ltcG9ydCcKbmFtZXwndGVzdCcKbmV3bGluZXwnXG4nCm5hbWV8J2Zyb20nCm5hbWV8J25vdmEnCm9wfCcuJwpuYW1lfCd0ZXN0cycKb3B8Jy4nCm5hbWV8J3VuaXQnCm9wfCcuJwpuYW1lfCdhcGknCm9wfCcuJwpuYW1lfCdvcGVuc3RhY2snCm5hbWV8J2ltcG9ydCcKbmFtZXwnZmFrZXMnCm5ld2xpbmV8J1xuJwpubHwnXG4nCm5sfCdcbicKREVDTHx2YXJpYWJsZXxVVUlECm5hbWV8J1VVSUQnCm9wfCc9JwpzdHJpbmd8Iic3MGY2ZGIzNC1kZThkLTRmYmQtYWFmYi00MDY1YmRmYTYxMTQnIgpuZXdsaW5lfCdcbicKREVDTHx2YXJpYWJsZXxsYXN0X2FkZF9maXhlZF9pcApuYW1lfCdsYXN0X2FkZF9maXhlZF9pcCcKb3B8Jz0nCm9wfCcoJwpuYW1lfCdOb25lJwpvcHwnLCcKbmFtZXwnTm9uZScKb3B8JyknCm5ld2xpbmV8J1xuJwpERUNMfHZhcmlhYmxlfGxhc3RfcmVtb3ZlX2ZpeGVkX2lwCm5hbWV8J2xhc3RfcmVtb3ZlX2ZpeGVkX2lwJwpvcHwnPScKb3B8JygnCm5hbWV8J05vbmUnCm9wfCcsJwpuYW1lfCdOb25lJwpvcHwnKScKbmV3bGluZXwnXG4nCm5sfCdcbicKbmx8J1xuJwpERUNMfGZ1bmN0aW9ufGNvbXB1dGVfYXBpX2FkZF9maXhlZF9pcApuYW1lfCdkZWYnCm5hbWV8J2NvbXB1dGVfYXBpX2FkZF9maXhlZF9pcCcKb3B8JygnCm5hbWV8J3NlbGYnCm9wfCcsJwpuYW1lfCdjb250ZXh0JwpvcHwnLCcKbmFtZXwnaW5zdGFuY2UnCm9wfCcsJwpuYW1lfCduZXR3b3JrX2lkJwpvcHwnKScKb3B8JzonCm5ld2xpbmV8J1xuJwppbmRlbnR8JyAgICAnCm5hbWV8J2dsb2JhbCcKbmFtZXwnbGFzdF9hZGRfZml4ZWRfaXAnCm5ld2xpbmV8J1xuJwpubHwnXG4nCm5hbWV8J2xhc3RfYWRkX2ZpeGVkX2lwJwpvcHwnPScKb3B8JygnCm5hbWV8J2luc3RhbmNlJwpvcHwnWycKc3RyaW5nfCIndXVpZCciCm9wfCddJwpvcHwnLCcKbmFtZXwnbmV0d29ya19pZCcKb3B8JyknCm5ld2xpbmV8J1xuJwpubHwnXG4nCm5sfCdcbicKREVDTHxmdW5jdGlvbnxjb21wdXRlX2FwaV9yZW1vdmVfZml4ZWRfaXAKZGVkZW50fCcnCm5hbWV8J2RlZicKbmFtZXwnY29tcHV0ZV9hcGlfcmVtb3ZlX2ZpeGVkX2lwJwpvcHwnKCcKbmFtZXwnc2VsZicKb3B8JywnCm5hbWV8J2NvbnRleHQnCm9wfCcsJwpuYW1lfCdpbnN0YW5jZScKb3B8JywnCm5hbWV8J2FkZHJlc3MnCm9wfCcpJwpvcHwnOicKbmV3bGluZXwnXG4nCmluZGVudHwnICAgICcKbmFtZXwnZ2xvYmFsJwpuYW1lfCdsYXN0X3JlbW92ZV9maXhlZF9pcCcKbmV3bGluZXwnXG4nCm5sfCdcbicKbmFtZXwnbGFzdF9yZW1vdmVfZml4ZWRfaXAnCm9wfCc9JwpvcHwnKCcKbmFtZXwnaW5zdGFuY2UnCm9wfCdbJwpzdHJpbmd8Iid1dWlkJyIKb3B8J10nCm9wfCcsJwpuYW1lfCdhZGRyZXNzJwpvcHwnKScKbmV3bGluZXwnXG4nCm5sfCdcbicKbmx8J1xuJwpERUNMfGZ1bmN0aW9ufGNvbXB1dGVfYXBpX2dldApkZWRlbnR8JycKbmFtZXwnZGVmJwpuYW1lfCdjb21wdXRlX2FwaV9nZXQnCm9wfCcoJwpuYW1lfCdzZWxmJwpvcHwnLCcKbmFtZXwnY29udGV4dCcKb3B8JywnCm5hbWV8J2luc3RhbmNlX2lkJwpvcHwnLCcKbmFtZXwnd2FudF9vYmplY3RzJwpvcHwnPScKbmFtZXwnRmFsc2UnCm9wfCcsJwpubHwnXG4nCm5hbWV8J2V4cGVjdGVkX2F0dHJzJwpvcHwnPScKbmFtZXwnTm9uZScKb3B8JyknCm9wfCc6JwpuZXdsaW5lfCdcbicKaW5kZW50fCcgICAgJwpuYW1lfCdpbnN0YW5jZScKb3B8Jz0nCm5hbWV8J29iamVjdHMnCm9wfCcuJwpuYW1lfCdJbnN0YW5jZScKb3B8JygnCm9wfCcpJwpuZXdsaW5lfCdcbicKbmFtZXwnaW5zdGFuY2UnCm9wfCcuJwpuYW1lfCd1dWlkJwpvcHwnPScKbmFtZXwnaW5zdGFuY2VfaWQnCm5ld2xpbmV8J1xuJwpuYW1lfCdpbnN0YW5jZScKb3B8Jy4nCm5hbWV8J2lkJwpvcHwnPScKbnVtYmVyfCcxJwpuZXdsaW5lfCdcbicKbmFtZXwnaW5zdGFuY2UnCm9wfCcuJwpuYW1lfCd2bV9zdGF0ZScKb3B8Jz0nCnN0cmluZ3wiJ2Zha2UnIgpuZXdsaW5lfCdcbicKbmFtZXwnaW5zdGFuY2UnCm9wfCcuJwpuYW1lfCd0YXNrX3N0YXRlJwpvcHwnPScKc3RyaW5nfCInZmFrZSciCm5ld2xpbmV8J1xuJwpuYW1lfCdpbnN0YW5jZScKb3B8Jy4nCm5hbWV8J29ial9yZXNldF9jaGFuZ2VzJwpvcHwnKCcKb3B8JyknCm5ld2xpbmV8J1xuJwpuYW1lfCdyZXR1cm4nCm5hbWV8J2luc3RhbmNlJwpuZXdsaW5lfCdcbicKbmx8J1xuJwpubHwnXG4nCkRFQ0x8Y2xhc3N8Rml4ZWRJcFRlc3RWMjEKZGVkZW50fCcnCm5hbWV8J2NsYXNzJwpuYW1lfCdGaXhlZElwVGVzdFYyMScKb3B8JygnCm5hbWV8J3Rlc3QnCm9wfCcuJwpuYW1lfCdOb0RCVGVzdENhc2UnCm9wfCcpJwpvcHwnOicKbmV3bGluZXwnXG4nCkRFQ0x8dmFyaWFibGV8Y29udHJvbGxlcl9jbGFzcwppbmRlbnR8JyAgICAnCm5hbWV8J2NvbnRyb2xsZXJfY2xhc3MnCm9wfCc9JwpuYW1lfCdtdWx0aW5pY192MjEnCm5ld2xpbmV8J1xuJwpERUNMfHZhcmlhYmxlfHZhbGlkYXRpb25fZXJyb3IKbmFtZXwndmFsaWRhdGlvbl9lcnJvcicKb3B8Jz0nCm5hbWV8J2V4Y2VwdGlvbicKb3B8Jy4nCm5hbWV8J1ZhbGlkYXRpb25FcnJvcicKbmV3bGluZXwnXG4nCm5sfCdcbicKREVDTHxtZW1iZXJ8c2V0VXAKbmFtZXwnZGVmJwpuYW1lfCdzZXRVcCcKb3B8JygnCm5hbWV8J3NlbGYnCm9wfCcpJwpvcHwnOicKbmV3bGluZXwnXG4nCmluZGVudHwnICAgICAgICAnCm5hbWV8J3N1cGVyJwpvcHwnKCcKbmFtZXwnRml4ZWRJcFRlc3RWMjEnCm9wfCcsJwpuYW1lfCdzZWxmJwpvcHwnKScKb3B8Jy4nCm5hbWV8J3NldFVwJwpvcHwnKCcKb3B8JyknCm5ld2xpbmV8J1xuJwpuYW1lfCdmYWtlcycKb3B8Jy4nCm5hbWV8J3N0dWJfb3V0X25ldHdvcmtpbmcnCm9wfCcoJwpuYW1lfCdzZWxmJwpvcHwnKScKbmV3bGluZXwnXG4nCm5hbWV8J2Zha2VzJwpvcHwnLicKbmFtZXwnc3R1Yl9vdXRfcmF0ZV9saW1pdGluZycKb3B8JygnCm5hbWV8J3NlbGYnCm9wfCcuJwpuYW1lfCdzdHVicycKb3B8JyknCm5ld2xpbmV8J1xuJwpuYW1lfCdzZWxmJwpvcHwnLicKbmFtZXwnc3R1Yl9vdXQnCm9wfCcoJwpzdHJpbmd8Iidub3ZhLmNvbXB1dGUuYXBpLkFQSS5hZGRfZml4ZWRfaXAnIgpvcHwnLCcKbmx8J1xuJwpuYW1lfCdjb21wdXRlX2FwaV9hZGRfZml4ZWRfaXAnCm9wfCcpJwpuZXdsaW5lfCdcbicKbmFtZXwnc2VsZicKb3B8Jy4nCm5hbWV8J3N0dWJfb3V0JwpvcHwnKCcKc3RyaW5nfCInbm92YS5jb21wdXRlLmFwaS5BUEkucmVtb3ZlX2ZpeGVkX2lwJyIKb3B8JywnCm5sfCdcbicKbmFtZXwnY29tcHV0ZV9hcGlfcmVtb3ZlX2ZpeGVkX2lwJwpvcHwnKScKbmV3bGluZXwnXG4nCm5hbWV8J3NlbGYnCm9wfCcuJwpuYW1lfCdzdHViX291dCcKb3B8JygnCnN0cmluZ3wiJ25vdmEuY29tcHV0ZS5hcGkuQVBJLmdldCciCm9wfCcsJwpuYW1lfCdjb21wdXRlX2FwaV9nZXQnCm9wfCcpJwpuZXdsaW5lfCdcbicKbmFtZXwnc2VsZicKb3B8Jy4nCm5hbWV8J2NvbnRyb2xsZXInCm9wfCc9JwpuYW1lfCdzZWxmJwpvcHwnLicKbmFtZXwnY29udHJvbGxlcl9jbGFzcycKb3B8Jy4nCm5hbWV8J011bHRpbmljQ29udHJvbGxlcicKb3B8JygnCm9wfCcpJwpuZXdsaW5lfCdcbicKbmFtZXwnc2VsZicKb3B8Jy4nCm5hbWV8J2Zha2VfcmVxJwpvcHwnPScKbmFtZXwnZmFrZXMnCm9wfCcuJwpuYW1lfCdIVFRQUmVxdWVzdCcKb3B8Jy4nCm5hbWV8J2JsYW5rJwpvcHwnKCcKc3RyaW5nfCInJyIKb3B8JyknCm5ld2xpbmV8J1xuJwpubHwnXG4nCkRFQ0x8bWVtYmVyfHRlc3RfYWRkX2ZpeGVkX2lwCmRlZGVudHwnJwpuYW1lfCdkZWYnCm5hbWV8J3Rlc3RfYWRkX2ZpeGVkX2lwJwpvcHwnKCcKbmFtZXwnc2VsZicKb3B8JyknCm9wfCc6JwpuZXdsaW5lfCdcbicKaW5kZW50fCcgICAgICAgICcKbmFtZXwnZ2xvYmFsJwpuYW1lfCdsYXN0X2FkZF9maXhlZF9pcCcKbmV3bGluZXwnXG4nCm5hbWV8J2xhc3RfYWRkX2ZpeGVkX2lwJwpvcHwnPScKb3B8JygnCm5hbWV8J05vbmUnCm9wfCcsJwpuYW1lfCdOb25lJwpvcHwnKScKbmV3bGluZXwnXG4nCm5sfCdcbicKbmFtZXwnYm9keScKb3B8Jz0nCm5hbWV8J2RpY3QnCm9wfCcoJwpuYW1lfCdhZGRGaXhlZElwJwpvcHwnPScKbmFtZXwnZGljdCcKb3B8JygnCm5hbWV8J25ldHdvcmtJZCcKb3B8Jz0nCnN0cmluZ3wiJ3Rlc3RfbmV0JyIKb3B8JyknCm9wfCcpJwpuZXdsaW5lfCdcbicKbmFtZXwncmVzcCcKb3B8Jz0nCm5hbWV8J3NlbGYnCm9wfCcuJwpuYW1lfCdjb250cm9sbGVyJwpvcHwnLicKbmFtZXwnX2FkZF9maXhlZF9pcCcKb3B8JygnCm5hbWV8J3NlbGYnCm9wfCcuJwpuYW1lfCdmYWtlX3JlcScKb3B8JywnCm5hbWV8J1VVSUQnCm9wfCcsJwpuYW1lfCdib2R5JwpvcHwnPScKbmFtZXwnYm9keScKb3B8JyknCm5ld2xpbmV8J1xuJwpjb21tZW50fCcjIE5PVEU6IG9uIHYyLjEsIGh0dHAgc3RhdHVzIGNvZGUgaXMgc2V0IGFzIHdzZ2lfY29kZSBvZiBBUEknCm5sfCdcbicKY29tbWVudHwnIyBtZXRob2QgaW5zdGVhZCBvZiBzdGF0dXNfaW50IGluIGEgcmVzcG9uc2Ugb2JqZWN0LicKbmx8J1xuJwpuYW1lfCdpZicKbmFtZXwnaXNpbnN0YW5jZScKb3B8JygnCm5hbWV8J3NlbGYnCm9wfCcuJwpuYW1lfCdjb250cm9sbGVyJwpvcHwnLCcKbmx8J1xuJwpuYW1lfCdtdWx0aW5pY192MjEnCm9wfCcuJwpuYW1lfCdNdWx0aW5pY0NvbnRyb2xsZXInCm9wfCcpJwpvcHwnOicKbmV3bGluZXwnXG4nCmluZGVudHwnICAgICAgICAgICAgJwpuYW1lfCdzdGF0dXNfaW50JwpvcHwnPScKbmFtZXwnc2VsZicKb3B8Jy4nCm5hbWV8J2NvbnRyb2xsZXInCm9wfCcuJwpuYW1lfCdfYWRkX2ZpeGVkX2lwJwpvcHwnLicKbmFtZXwnd3NnaV9jb2RlJwpuZXdsaW5lfCdcbicKZGVkZW50fCcnCm5hbWV8J2Vsc2UnCm9wfCc6JwpuZXdsaW5lfCdcbicKaW5kZW50fCcgICAgICAgICAgICAnCm5hbWV8J3N0YXR1c19pbnQnCm9wfCc9JwpuYW1lfCdyZXNwJwpvcHwnLicKbmFtZXwnc3RhdHVzX2ludCcKbmV3bGluZXwnXG4nCmRlZGVudHwnJwpuYW1lfCdzZWxmJwpvcHwnLicKbmFtZXwnYXNzZXJ0RXF1YWwnCm9wfCcoJwpuYW1lfCdzdGF0dXNfaW50JwpvcHwnLCcKbnVtYmVyfCcyMDInCm9wfCcpJwpuZXdsaW5lfCdcbicKbmFtZXwnc2VsZicKb3B8Jy4nCm5hbWV8J2Fzc2VydEVxdWFsJwpvcHwnKCcKbmFtZXwnbGFzdF9hZGRfZml4ZWRfaXAnCm9wfCcsJwpvcHwnKCcKbmFtZXwnVVVJRCcKb3B8JywnCnN0cmluZ3wiJ3Rlc3RfbmV0JyIKb3B8JyknCm9wfCcpJwpuZXdsaW5lfCdcbicKbmx8J1xuJwpERUNMfG1lbWJlcnxfdGVzdF9hZGRfZml4ZWRfaXBfYmFkX3JlcXVlc3QKZGVkZW50fCcnCm5hbWV8J2RlZicKbmFtZXwnX3Rlc3RfYWRkX2ZpeGVkX2lwX2JhZF9yZXF1ZXN0JwpvcHwnKCcKbmFtZXwnc2VsZicKb3B8JywnCm5hbWV8J2JvZHknCm9wfCcpJwpvcHwnOicKbmV3bGluZXwnXG4nCmluZGVudHwnICAgICAgICAnCm5hbWV8J3NlbGYnCm9wfCcuJwpuYW1lfCdhc3NlcnRSYWlzZXMnCm9wfCcoJwpuYW1lfCdzZWxmJwpvcHwnLicKbmFtZXwndmFsaWRhdGlvbl9lcnJvcicKb3B8JywnCm5sfCdcbicKbmFtZXwnc2VsZicKb3B8Jy4nCm5hbWV8J2NvbnRyb2xsZXInCm9wfCcuJwpuYW1lfCdfYWRkX2ZpeGVkX2lwJwpvcHwnLCcKbmx8J1xuJwpuYW1lfCdzZWxmJwpvcHwnLicKbmFtZXwnZmFrZV9yZXEnCm9wfCcsJwpubHwnXG4nCm5hbWV8J1VVSUQnCm9wfCcsJwpuYW1lfCdib2R5JwpvcHwnPScKbmFtZXwnYm9keScKb3B8JyknCm5ld2xpbmV8J1xuJwpubHwnXG4nCkRFQ0x8bWVtYmVyfHRlc3RfYWRkX2ZpeGVkX2lwX2VtcHR5X25ldHdvcmtfaWQKZGVkZW50fCcnCm5hbWV8J2RlZicKbmFtZXwndGVzdF9hZGRfZml4ZWRfaXBfZW1wdHlfbmV0d29ya19pZCcKb3B8JygnCm5hbWV8J3NlbGYnCm9wfCcpJwpvcHwnOicKbmV3bGluZXwnXG4nCmluZGVudHwnICAgICAgICAnCm5hbWV8J2JvZHknCm9wfCc9JwpvcHwneycKc3RyaW5nfCInYWRkRml4ZWRJcCciCm9wfCc6JwpvcHwneycKc3RyaW5nfCInbmV0d29ya19pZCciCm9wfCc6JwpzdHJpbmd8IicnIgpvcHwnfScKb3B8J30nCm5ld2xpbmV8J1xuJwpuYW1lfCdzZWxmJwpvcHwnLicKbmFtZXwnX3Rlc3RfYWRkX2ZpeGVkX2lwX2JhZF9yZXF1ZXN0JwpvcHwnKCcKbmFtZXwnYm9keScKb3B8JyknCm5ld2xpbmV8J1xuJwpubHwnXG4nCkRFQ0x8bWVtYmVyfHRlc3RfYWRkX2ZpeGVkX2lwX25ldHdvcmtfaWRfYmlnZ2VyX3RoYW5fMzYKZGVkZW50fCcnCm5hbWV8J2RlZicKbmFtZXwndGVzdF9hZGRfZml4ZWRfaXBfbmV0d29ya19pZF9iaWdnZXJfdGhhbl8zNicKb3B8JygnCm5hbWV8J3NlbGYnCm9wfCcpJwpvcHwnOicKbmV3bGluZXwnXG4nCmluZGVudHwnICAgICAgICAnCm5hbWV8J2JvZHknCm9wfCc9JwpvcHwneycKc3RyaW5nfCInYWRkRml4ZWRJcCciCm9wfCc6JwpvcHwneycKc3RyaW5nfCInbmV0d29ya19pZCciCm9wfCc6JwpzdHJpbmd8IidhJyIKb3B8JyonCm51bWJlcnwnMzcnCm9wfCd9JwpvcHwnfScKbmV3bGluZXwnXG4nCm5hbWV8J3NlbGYnCm9wfCcuJwpuYW1lfCdfdGVzdF9hZGRfZml4ZWRfaXBfYmFkX3JlcXVlc3QnCm9wfCcoJwpuYW1lfCdib2R5JwpvcHwnKScKbmV3bGluZXwnXG4nCm5sfCdcbicKREVDTHxtZW1iZXJ8dGVzdF9hZGRfZml4ZWRfaXBfbm9fbmV0d29yawpkZWRlbnR8JycKbmFtZXwnZGVmJwpuYW1lfCd0ZXN0X2FkZF9maXhlZF9pcF9ub19uZXR3b3JrJwpvcHwnKCcKbmFtZXwnc2VsZicKb3B8JyknCm9wfCc6JwpuZXdsaW5lfCdcbicKaW5kZW50fCcgICAgICAgICcKbmFtZXwnZ2xvYmFsJwpuYW1lfCdsYXN0X2FkZF9maXhlZF9pcCcKbmV3bGluZXwnXG4nCm5hbWV8J2xhc3RfYWRkX2ZpeGVkX2lwJwpvcHwnPScKb3B8JygnCm5hbWV8J05vbmUnCm9wfCcsJwpuYW1lfCdOb25lJwpvcHwnKScKbmV3bGluZXwnXG4nCm5sfCdcbicKbmFtZXwnYm9keScKb3B8Jz0nCm5hbWV8J2RpY3QnCm9wfCcoJwpuYW1lfCdhZGRGaXhlZElwJwpvcHwnPScKbmFtZXwnZGljdCcKb3B8JygnCm9wfCcpJwpvcHwnKScKbmV3bGluZXwnXG4nCm5hbWV8J3NlbGYnCm9wfCcuJwpuYW1lfCdfdGVzdF9hZGRfZml4ZWRfaXBfYmFkX3JlcXVlc3QnCm9wfCcoJwpuYW1lfCdib2R5JwpvcHwnKScKbmV3bGluZXwnXG4nCm5hbWV8J3NlbGYnCm9wfCcuJwpuYW1lfCdhc3NlcnRFcXVhbCcKb3B8JygnCm5hbWV8J2xhc3RfYWRkX2ZpeGVkX2lwJwpvcHwnLCcKb3B8JygnCm5hbWV8J05vbmUnCm9wfCcsJwpuYW1lfCdOb25lJwpvcHwnKScKb3B8JyknCm5ld2xpbmV8J1xuJwpubHwnXG4nCmRlZGVudHwnJwpvcHwnQCcKbmFtZXwnbW9jaycKb3B8Jy4nCm5hbWV8J3BhdGNoJwpvcHwnLicKbmFtZXwnb2JqZWN0JwpvcHwnKCcKbmFtZXwnY29tcHV0ZScKb3B8Jy4nCm5hbWV8J2FwaScKb3B8Jy4nCm5hbWV8J0FQSScKb3B8JywnCnN0cmluZ3wiJ2FkZF9maXhlZF9pcCciCm9wfCcpJwpuZXdsaW5lfCdcbicKREVDTHxtZW1iZXJ8dGVzdF9hZGRfZml4ZWRfaXBfbm9fbW9yZV9pcHNfYXZhaWxhYmxlCm5hbWV8J2RlZicKbmFtZXwndGVzdF9hZGRfZml4ZWRfaXBfbm9fbW9yZV9pcHNfYXZhaWxhYmxlJwpvcHwnKCcKbmFtZXwnc2VsZicKb3B8JywnCm5hbWV8J21vY2tfYWRkX2ZpeGVkX2lwJwpvcHwnKScKb3B8JzonCm5ld2xpbmV8J1xuJwppbmRlbnR8JyAgICAgICAgJwpuYW1lfCdtb2NrX2FkZF9maXhlZF9pcCcKb3B8Jy4nCm5hbWV8J3NpZGVfZWZmZWN0JwpvcHwnPScKbmFtZXwnZXhjZXB0aW9uJwpvcHwnLicKbmFtZXwnTm9Nb3JlRml4ZWRJcHMnCm9wfCcoJwpuYW1lfCduZXQnCm9wfCc9JwpzdHJpbmd8IiduZXRpZCciCm9wfCcpJwpuZXdsaW5lfCdcbicKbmx8J1xuJwpuYW1lfCdib2R5JwpvcHwnPScKbmFtZXwnZGljdCcKb3B8JygnCm5hbWV8J2FkZEZpeGVkSXAnCm9wfCc9JwpuYW1lfCdkaWN0JwpvcHwnKCcKbmFtZXwnbmV0d29ya0lkJwpvcHwnPScKc3RyaW5nfCIndGVzdF9uZXQnIgpvcHwnKScKb3B8JyknCm5ld2xpbmV8J1xuJwpuYW1lfCdzZWxmJwpvcHwnLicKbmFtZXwnYXNzZXJ0UmFpc2VzJwpvcHwnKCcKbmFtZXwnd2Vib2InCm9wfCcuJwpuYW1lfCdleGMnCm9wfCcuJwpuYW1lfCdIVFRQQmFkUmVxdWVzdCcKb3B8JywnCm5sfCdcbicKbmFtZXwnc2VsZicKb3B8Jy4nCm5hbWV8J2NvbnRyb2xsZXInCm9wfCcuJwpuYW1lfCdfYWRkX2ZpeGVkX2lwJwpvcHwnLCcKbmx8J1xuJwpuYW1lfCdzZWxmJwpvcHwnLicKbmFtZXwnZmFrZV9yZXEnCm9wfCcsJwpubHwnXG4nCm5hbWV8J1VVSUQnCm9wfCcsJwpuYW1lfCdib2R5JwpvcHwnPScKbmFtZXwnYm9keScKb3B8JyknCm5ld2xpbmV8J1xuJwpubHwnXG4nCkRFQ0x8bWVtYmVyfHRlc3RfcmVtb3ZlX2ZpeGVkX2lwCmRlZGVudHwnJwpuYW1lfCdkZWYnCm5hbWV8J3Rlc3RfcmVtb3ZlX2ZpeGVkX2lwJwpvcHwnKCcKbmFtZXwnc2VsZicKb3B8JyknCm9wfCc6JwpuZXdsaW5lfCdcbicKaW5kZW50fCcgICAgICAgICcKbmFtZXwnZ2xvYmFsJwpuYW1lfCdsYXN0X3JlbW92ZV9maXhlZF9pcCcKbmV3bGluZXwnXG4nCm5hbWV8J2xhc3RfcmVtb3ZlX2ZpeGVkX2lwJwpvcHwnPScKb3B8JygnCm5hbWV8J05vbmUnCm9wfCcsJwpuYW1lfCdOb25lJwpvcHwnKScKbmV3bGluZXwnXG4nCm5sfCdcbicKbmFtZXwnYm9keScKb3B8Jz0nCm5hbWV8J2RpY3QnCm9wfCcoJwpuYW1lfCdyZW1vdmVGaXhlZElwJwpvcHwnPScKbmFtZXwnZGljdCcKb3B8JygnCm5hbWV8J2FkZHJlc3MnCm9wfCc9JwpzdHJpbmd8IicxMC4xMC4xMC4xJyIKb3B8JyknCm9wfCcpJwpuZXdsaW5lfCdcbicKbmFtZXwncmVzcCcKb3B8Jz0nCm5hbWV8J3NlbGYnCm9wfCcuJwpuYW1lfCdjb250cm9sbGVyJwpvcHwnLicKbmFtZXwnX3JlbW92ZV9maXhlZF9pcCcKb3B8JygnCm5hbWV8J3NlbGYnCm9wfCcuJwpuYW1lfCdmYWtlX3JlcScKb3B8JywnCm5hbWV8J1VVSUQnCm9wfCcsJwpuYW1lfCdib2R5JwpvcHwnPScKbmFtZXwnYm9keScKb3B8JyknCm5ld2xpbmV8J1xuJwpjb21tZW50fCcjIE5PVEU6IG9uIHYyLjEsIGh0dHAgc3RhdHVzIGNvZGUgaXMgc2V0IGFzIHdzZ2lfY29kZSBvZiBBUEknCm5sfCdcbicKY29tbWVudHwnIyBtZXRob2QgaW5zdGVhZCBvZiBzdGF0dXNfaW50IGluIGEgcmVzcG9uc2Ugb2JqZWN0LicKbmx8J1xuJwpuYW1lfCdpZicKbmFtZXwnaXNpbnN0YW5jZScKb3B8JygnCm5hbWV8J3NlbGYnCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4Kb3B8Jy4nCm5hbWV8J2NvbnRyb2xsZXInCm9wfCcsJwpubHwnXG4nCjx8ZmltX2VuZHw+"]
["ae053b610945d93096406c3494e601095849c0ee-3","ae053b610945d93096406c3494e601095849c0ee","PHxmaW1fcHJlZml4fD4KIyMgbW9kdWxlIGJpc2VjdAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CicnJyByb290ID0gYmlzZWN0KGYseDEseDIsc3dpdGNoPTAsdG9sPTEuMGUtOSkuCiAgICBGaW5kcyBhIHJvb3Qgb2YgZih4KSA9IDAgYnkgYmlzZWN0aW9uLgogICAgVGhlIHJvb3QgbXVzdCBiZSBicmFja2V0ZWQgaW4gKHgxLHgyKS4KICAgIFNldHRpbmcgc3dpdGNoID0gMSByZXR1cm5zIHJvb3QgPSBOb25lIGlmCjx8ZmltX2VuZHw+"]
["3a4cb7944c8eeada333c667e509a12704af64e38-1","3a4cb7944c8eeada333c667e509a12704af64e38","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KZnJvbSBkamFuZ28udGVzdCBpbXBvcnQgVGVzdENhc2UKCiMgQ3JlYXRlIHlvdXIgdGVzdHMgaGVyZS4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKYSA9ICIxMTEiCmpzb24ubG9hZHMoYSkKPHxmaW1fZW5kfD4="]
["09d3ff5195d1108a91cfdc941df6ddfd77f58dfa-1","09d3ff5195d1108a91cfdc941df6ddfd77f58dfa","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBkamFuZ28uYXBwcyBpbXBvcnQgQXBwQ29uZmlnCgoKY2xhc3MgUmF0ZWxpbWl0aW5nc2VydmljZUNvbmZpZyhBcHBDb25maWcpOgo8fGZpbV9lbmR8Pg=="]
["61f62a88d6bd3559867ae49416e004d6cd8706b6-3","61f62a88d6bd3559867ae49416e004d6cd8706b6","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFzayBpbXBvcnQgRmxhc2ssIHJlbmRlcl90ZW1wbGF0ZSwganNvbmlmeQppbXBvcnQgYm9hcmQKaW1wb3J0IG5lb3BpeGVsCmZyb20gdGltZSBpbXBvcnQgc2xlZXAKZnJvbSBuZW9waXhlbCBpbXBvcnQgKgoKcGl4ZWxzID0gbmVvcGl4ZWwuTmVvUGl4ZWwoYm9hcmQuRDE4LCAxNTApCgphcHAgPSBGbGFzayhfX25hbWVfXykKCmZhZGluZyA9IEZhbHNlCgpAYXBwLnJvdXRlKCcvJykKZGVmIGluZGV4KCk6CiAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKCdpbmRleC5odG1sJykKCkBhcHAucm91dGUoJy9saWdodC88Y29sb3I+JykKZGVmIGNvbG9yX2NoYW5nZShjb2xvcik6CiAgICBjaGFuZ2VfY29sb3IgPSBUcnVlCiAgICBnbG9iYWwgZmFkaW5nCiAgICBpZiBmYWRpbmc6CiAgICAgICAgcmV0dXJuIHJlbmRlcl90ZW1wbGF0ZSgnaW5kZXguaHRtbCcpCgogICAgaWYgY29sb3IgPT0gJ2Zhdmljb24uaWNvJzoKICAgICAgICBjaGFuZ2VfY29sb3IgPSBGYWxzZQogICAgZWxzZToKICAgICAgICBmYWRpbmcgPSBUcnVlCiAgICAgICAgaWYgY29sb3IgPT0gJzEnOgogICAgICAgICAgICBjb2xvciA9ICgyNTUsMCwwKQogICAgICAgIGVsaWYgY29sb3IgPT0gJzInOgo8fGZpbV9ob2xlfD4KICAgICAgICBlbGlmIGNvbG9yID09ICczJzoKICAgICAgICAgICAgY29sb3IgPSAoMCwwLDI1NSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBjb2xvciA9ICgwLDAsMCkKICAgIAogICAgaWYgY2hhbmdlX2NvbG9yOgogICAgICAgICNwaXhlbHMuZmlsbCgoMCwwLDApKSAKICAgICAgICBwaXhlbHMuYnJpZ2h0bmVzcyA9IC4wMDEKICAgICAgICBwaXhlbHMuZmlsbChjb2xvcikKICAgICAgICBwaXhlbHMuc2hvdygpCiAgICAgICAgc2xlZXAoLjIpCgoKICAgICAgICBicmlnaHQgPSAuMDAxCiAgICAgICAgd2hpbGUgYnJpZ2h0ICsgLjAxIDw9IDE6CiAgICAgICAgICAgIGJyaWdodCArPSAuMDEKICAgICAgICAgICAgcGl4ZWxzLmJyaWdodG5lc3MgPSBicmlnaHQKICAgICAgICAgICAgc2xlZXAoLjAwNSkKCiAgICAgICAgcHJpbnQoJ2RvbmUnKQoKICAgICAgICBwaXhlbHMuc2hvdygpCiAgICAgICAgZmFkaW5nID0gRmFsc2UKCiAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKCdpbmRleC5odG1sJykKICAgIAoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGFwcC5ydW4oZGVidWc9VHJ1ZSwgaG9zdD0nMC4wLjAuMCcpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGNvbG9yID0gKDAsMjU1LDApCjx8ZmltX2VuZHw+"]
["0161f8eec48e6fb4db2f626b25cf3fbeeb5b0bbc-4","0161f8eec48e6fb4db2f626b25cf3fbeeb5b0bbc","PHxmaW1fcHJlZml4fD4KIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR0JJIHByb2plY3QuCiMgQ29weXJpZ2h0IChDKSAyMDEyIE9tbmlzY2FsZSBHbWJIICYgQ28uIEtHIDxodHRwOi8vb21uaXNjYWxlLmNvbT4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKaW1wb3J0IHRocmVhZGluZwppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IHdlcmt6ZXVnLnNlcnZpbmcKCmltcG9ydCBsb2dnaW5nCgojIHJlcXVlc3QgaGFuZGxlciB0aGF0IHVzZXMgb3VyIGxvZ2dlcgpjbGFzcyBXU0dJUmVxdWVzdEhhbmRsZXIod2Vya3pldWcuc2VydmluZy5XU0dJUmVxdWVzdEhhbmRsZXIpOgogICAgZGVmIGxvZyhzZWxmLCB0eXBlLCBtZXNzYWdlLCAqYXJncyk6CiAgICAgICAgbHZsID0gbG9nZ2luZy5nZXRMZXZlbE5hbWUodHlwZS51cHBlcigpKQogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGx2bCwgaW50KToKICAgICAgICAgICAgbHZsID0gbG9nZ2luZy5JTkZPCiAgICAgICAgc2VsZi5zZXJ2ZXIubG9nZ2VyLmxvZyhsdmwsIG1lc3NhZ2UsICphcmdzKQoKY2xhc3MgV2ViU2VydmVyVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgIiIiCiAgICBXU0dJIHNlcnZlciB0aGF0IHJ1bnMgaW4gYSBzZXBlcmF0ZSB0aHJlYWQgYW5kIHN1cHBvcnQgZ3JhY2VmdWwKICAgIHNodXRkb3duLgogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCwgYXBwLCBsb2dnZXJfbmFtZT1fX25hbWVfXyk6CiAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQogICAgICAgIHNlbGYuYXBwID0gYXBwCiAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAogICAgICAgIHNlbGYucG9ydCA9IHBvcnQKICAgICAgICBzZWxmLnNlcnZlciA9IHdlcmt6ZXVnLnNlcnZpbmcuVGhyZWFkZWRXU0dJU2VydmVyKHNlbGYuaG9zdCwgc2VsZi5wb3J0LAogICAgICAgICAgICBzZWxmLmFwcCwgaGFuZGxlcj1XU0dJUmVxdWVzdEhhbmRsZXIpCiAgICAgICAgc2VsZi5zZXJ2ZXIubG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIobG9nZ2VyX25hbWUpCgogICAgZGVmIHJ1bihzZWxmKToKICAgICAgICBzZWxmLnNlcnZlci5zZXJ2ZV9mb3JldmVyKCkKCiAgICBkZWYgc2h1dGRvd24oc2VsZik6CiAgICAgICAgc2VsZi5zZXJ2ZXIuc2h1dGRvd25fc2lnbmFsID0gVHJ1ZQogICAgICAgICMgbWFrZSByZXF1ZXN0IHRvIHNlcnZlciBzbyB0aGF0IGl0IGNhbiBoYW5kbGUgdGhlIHNodXRkb3duX3NpZ25hbAogICAgICAgIHRyeToKPHxmaW1faG9sZXw+CiAgICAgICAgZXhjZXB0IHJlcXVlc3RzLmV4Y2VwdGlvbnMuUmVxdWVzdEV4Y2VwdGlvbjoKICAgICAgICAgICAgcGFzcwo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICByZXF1ZXN0cy5nZXQoJ2h0dHA6Ly8lczolZC9fXycgJSAoc2VsZi5ob3N0LCBzZWxmLnBvcnQpLCB0aW1lb3V0PTEpCjx8ZmltX2VuZHw+"]
["01088be233b3a9a4fa7b3c023f1dcda86b706c6f-1","01088be233b3a9a4fa7b3c023f1dcda86b706c6f","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgogICAgc3VtbWF0aW9uID0gc3VtKG51bSkKICAgIHZhbHVlcyA9IGxlbihudW0pCiAgICByZXR1cm4gcm91bmQoZGl2aXNpb24oc3VtbWF0aW9uLCB2YWx1ZXMpLCA0KQo8fGZpbV9zdWZmaXh8Pgpmcm9tIENhbGN1bGF0b3IuRGl2aXNpb24gaW1wb3J0IGRpdmlzaW9uCgoKZGVmIG1lYW4obnVtKToKPHxmaW1fZW5kfD4="]
["fec8f0b95b9ea6e983154f217fac5a52a1e0d997-2","fec8f0b95b9ea6e983154f217fac5a52a1e0d997","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKZnJvbSBzcmMub3BlcmF0aW5nX3N5c3RlbV9jb21wb25lbnRzLm1lbW9yeV9tYW5nZW1lbnRfdW5pdC5wYWdlX3RhYmxlIGltcG9ydCBQYWdlVGFibGUKZnJvbSBzcmMub3BlcmF0aW5nX3N5c3RlbV9jb21wb25lbnRzLm1lbW9yeV9tYW5nZW1lbnRfdW5pdC5wYWdlX3RhYmxlX3BhZ2UgaW1wb3J0IFBhZ2VUYWJsZVBhZ2UKCgpjbGFzcyBNTVVRdWV1ZToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2aXJ0dWFsX2FkZHJlc3NfYml0cz0xNiwgcGFnZXM9NjQpOgogICAgICAgIHNlbGYucGFnZV90YWJsZSA9IFBhZ2VUYWJsZSgoUGFnZVRhYmxlUGFnZSgpIGZvciBfIGluIHJhbmdlKDY0KSkpCiAgICAgICAgc2VsZi5wYWdlX2ZyYW1lcyA9IFtGYWxzZV0gKiAyKiozCiAgICAgICAgc2VsZi5jb3VudGVyID0gMAoKICAgIGRlZiBleHRlbmRlZChzZWxmLCB2YWx1ZSwgc2l6ZSk6CiAgICAgICAgIiIiVW5zaWduZWQgZXh0ZW5zaW9uIG9mIHNvbWUgbnVtYmVyIHRvIHRoZSBkZXNpZ25hdGVkIHNpemUKCiAgICAgICAgOnBhcmFtIHZhbHVlOgogICAgICAgIDpwYXJhbSBzaXplOgogICAgICAgIDpyZXR1cm46CiAgICAgICAgIiIiCiAgICAgICAgZGlmZiA9IHNpemUgLSBsZW4odmFsdWUpCiAgICAgICAgcmV0dXJuICcwJyAqIGRpZmYgKyB2YWx1ZQoKICAgIGRlZiByZWFkKHNlbGYsIHZpcnR1YWxfYWRkcmVzcyk6CiAgICAgICAgcHJpbnQoJ1JlYWQgaXMgY2FsbGVkIHdpdGggdmlydHVhbCBhZGRyZXNzOiAge30nLmZvcm1hdCgKICAgICAgICAgICAgaGV4KHZpcnR1YWxfYWRkcmVzcykpKQogICAgICAgIHRhYmxlX2luZGV4LCBfID0gc2VsZi5fcGFydGl0aW9uX3ZpcnR1YWxfYWRkcmVzcyh2aXJ0dWFsX2FkZHJlc3MpCiAgICAgICAgc2VsZi5wYWdlX3RhYmxlW3RhYmxlX2luZGV4XS5sYXN0X3JlZmVyZW5jZWQgPSBzZWxmLmNvdW50ZXIKICAgICAgICByZXR1cm4gc2VsZi5fdHJhbnNsYXRlX3ZpcnR1YWxfYWRkcmVzcyh2aXJ0dWFsX2FkZHJlc3MpCgogICAgZGVmIF90cmFuc2xhdGVfdmlydHVhbF9hZGRyZXNzKHNlbGYsIHZpcnR1YWxfYWRkcmVzcyk6CiAgICAgICAgIiIiQnJlYWtzIGEgdmlydHVhbCBhZGRyZXNzIGRvd24gaW50byB0aGUgcGFnZV90YWJsZV9pbmRleCBhbmQKICAgICAgICB0aGUgb2Zmc2V0IGZvciB0aGUgcGFnZSBmcmFtZS4gVGhlbiBzZWxlY3RzIGFuZCBzdG9yZXMgdGhlIHBhZ2UKICAgICAgICBpbiBhIGZyYW1lLgoKICAgICAgICA6cGFyYW0gdmlydHVhbF9hZGRyZXNzOgogICAgICAgIDpyZXR1cm46CiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5jb3VudGVyICs9IDEKCiAgICAgICAgcGFnZV90YWJsZV9pbmRleCwgb2Zmc2V0ID0gc2VsZi5fcGFydGl0aW9uX3ZpcnR1YWxfYWRkcmVzcyh2aXJ0dWFsX2FkZHJlc3MpCgogICAgICAgIGZyYW1lX2luZGV4ID0gc2VsZi5fc2VsZWN0X2ZyYW1lX2FuZF9zdG9yZShwYWdlX3RhYmxlX2luZGV4KQogICAgICAgIGZyYW1lX2luZGV4ID0gYmluKGZyYW1lX2luZGV4KQoKICAgICAgICBwaHlzaWNhbF9hZGRyZXNzID0gZnJhbWVfaW5kZXggKyBvZmZzZXRbMjpdCgogICAgICAgIHByaW50KCcuLiB0aGlzIGJlY29tZXMgcGh5c2ljYWwgYWRkcmVzczoge317fScKICAgICAgICAgICAgICAuZm9ybWF0KCcgJyAqIDQsIGhleChldmFsKHBoeXNpY2FsX2FkZHJlc3MpKSkpCgogICAgICAgICMgdXBwZXIgYml0cyBmb3IgcGFnZSBmcmFtZSBpbmRleCwgbG93ZXIgYml0cyBmb3Igb2Zmc2V0CiAgICAgICAgcmV0dXJuIHBoeXNpY2FsX2FkZHJlc3NbOjIgKyAzXSwgJzBiJyArIHBoeXNpY2FsX2FkZHJlc3NbMiArIDU6XQoKICAgIGRlZiBfcGFydGl0aW9uX3ZpcnR1YWxfYWRkcmVzcyhzZWxmLCB2X2FkZHIpOgogICAgICAgICIiIgoKICAgICAgICA6cGFyYW0gdl9hZGRyOgogICAgICAgIDpyZXR1cm46IHR1cGxlIG9mIGludCBhbmQgc3RyLiBwYWdlIHRhYmxlIGluZGV4IChkZWNpbWFsKSBhbmQgXG4KICAgICAgICAgICAgb2Zmc2V0IChiaW5hcnkpCiAgICAgICAgIiIiCiAgICAgICAgIyBjb252ZXJ0IGFuIGludCBvZiBiYXNlIDEwIHRvIGJhc2UgMiAodHlwZSBzdHIsIHdpdGhvdXQgMGIpCiAgICAgICAgYml0cyA9IHNlbGYuZXh0ZW5kZWQoYmluKHZfYWRkcilbMjpdLCAxNikKCiAgICAgICAgcGFnZV90YWJsZV9pbmRleCA9IGV2YWwoJzBiJyArIGJpdHNbOjZdKQogICAgICAgIHJldHVybiBwYWdlX3RhYmxlX2luZGV4LCAnMGInICsgYml0c1s2Ol0KCiAgICBkZWYgX3NlbGVjdF9mcmFtZV9hbmRfc3RvcmUoc2VsZiwgdmlydHVhbF9wYWdlX2luZGV4KToKICAgICAgICAiIiJDaGVja3MgaWYgcGFnZSB3aXRoIHRoaXMgaW5kZXggZm9yIHBhZ2UgdGFibGUgaXMgYWxyZWFkeSBwcmVzZW50LgogICAgICAgIElmIG5vdCBwcmVzZW50LCB0cmllcyB0byBzZWxlY3QgdGhlIGZpcnN0IHBhZ2UgZnJhbWUgYXZhaWxhYmxlLgogICAgICAgIFRoZW4gbm9uZSBhcmUgYXZhaWxhYmxlLCB0aGVuIGl0IGNhbGxzIHRoZSByZXBsYWNlbWVudCBhbGdvcml0aG0KICAgICAgICBtZXRob2QsIF9wYWdlX2ZyYW1lX3JlcGxhY2VtZW50CgogICAgICAgIDpwYXJhbSB2aXJ0dWFsX3BhZ2VfaW5kZXg6CiAgICAgICAgOnJldHVybjoKICAgICAgICAiIiIKICAgICAgICBwYWdlID0gc2VsZi5wYWdlX3RhYmxlW3ZpcnR1YWxfcGFnZV9pbmRleF0KICAgICAgICAjIHBhZ2Ugd2FzIGFscmVhZHkgbG9hZGVkIGludG8gbWVtb3J5CiAgICAgICAgaWYgcGFnZS5wcmVzZW50OgogICAgICAgICAgICByZXR1cm4gcGFnZS5wYWdlX2ZyYW1lX2luZGV4CgogICAgICAgIHByaW50KCcuLiBwYWdlIGZhdWx0JykKICAgICAgICAjIGZpbmQgZW1wdHkgc3BvdCBhbmQgbG9hZCBpdCBpbiB0aGF0IGZyYW1lCiAgICAgICAgZm9yIGluZGV4LCBpbl91c2UgaW4gZW51bWVyYXRlKHNlbGYucGFnZV9mcmFtZXMpOgogICAgICAgICAgICBpZiBub3QgaW5fdXNlOgogICAgICAgICAgICAgICAgc2VsZi5wYWdlX2ZyYW1lc1tpbmRleF0gPSBUcnVlCiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3RvcmVfaW5fZnJhbWUodmlydHVhbF9wYWdlX2luZGV4LCBpbmRleCkKCiAgICAgICAgIyBubyB1bnVzZWQgcGFnZSBmcmFtZSBpbiBtZW1vcnkKICAgICAgICBwcmludCgnLi4gdGhlcmVcJ3Mgbm8gb3BlbiBwYWdlIGZyYW1lLCByZXBsYWNpbmcgYSBwYWdlJykKCiAgICAgICAgcmV0dXJuIHNlbGYuX3BhZ2VfZnJhbWVfcmVwbGFjZW1lbnQodmlydHVhbF9wYWdlX2luZGV4KQoKICAgIGRlZiBfc3RvcmVfaW5fZnJhbWUoc2VsZiwgdmlydHVhbF9wYWdlX2luZGV4LCBmcmFtZV9pbmRleCk6CiAgICAgICAgIiIiUHV0cyBhIHZpcnR1YWwgcGFnZSBmcm9tIHBhZ2UgdGFibGUgaW50byBhIHBhZ2UgZnJhbWUgaW4gbWVtb3J5LgoKICAgICAgICA6cGFyYW0gdmlydHVhbF9wYWdlX2luZGV4OgogICAgICAgIDpwYXJhbSBmcmFtZV9pbmRleDoKICAgICAgICA6cmV0dXJuOgogICAgICAgICIiIgogICAgICAgIHBhZ2UgPSBzZWxmLnBhZ2VfdGFibGVbdmlydHVhbF9wYWdlX2luZGV4XQogICAgICAgIHBhZ2UucGFnZV9mcmFtZV9pbmRleCA9IGZyYW1lX2luZGV4CiAgICAgICAgcGFnZS5wcmVzZW50ID0gMQoKICAgICAgICBwYWdlLnRpbWVfd2hlbl9sb2FkZWQgPSBzZWxmLmNvdW50ZXIKCiAgICAgICAgcHJpbnQoJy4uIHN0b3JlZCBpbiBwYWdlIGZyYW1lIHt9OiB7fScuZm9ybWF0KGZyYW1lX2luZGV4LCBwYWdlKSkKCiAgICAgICAgcmV0dXJuIGZyYW1lX2luZGV4Cgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgX3BhZ2VfZnJhbWVfcmVwbGFjZW1lbnQoc2VsZiwgdmlydHVhbF9wYWdlX2luZGV4KToKICAgICAgICAiIiJBbGdvcml0aG0gZm9yIGRldGVybWluaW5nIHdoaWNoIHBhZ2UgZnJhbWUgd2lsbCBiZSByZXBsYWNlZAoKICAgICAgICA6cGFyYW0gdmlydHVhbF9wYWdlX2luZGV4Ogo8fGZpbV9lbmR8Pg=="]
["14d4fbbd74e0ed6323408517cee54770366b294b-4","14d4fbbd74e0ed6323408517cee54770366b294b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCmltcG9ydCBvcwpmcm9tIHJlcXVlc3RzIGltcG9ydCBhcGkKPHxmaW1faG9sZXw+CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5iYXNlX3VybCA9ICdodHRwczovL3d3dy53b3JsZG9tZXRlcnMuaW5mby9jb3JvbmF2aXJ1cy8nCgogICAgZGVmIGdldF9pbmZvKHNlbGYsIGNvdW50cnk9Tm9uZSk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICB1cmwgPSBzZWxmLmJhc2VfdXJsCiAgICAgICAgICAgIGlmIGNvdW50cnk6CiAgICAgICAgICAgICAgICB1cmwgKz0gZidjb3VudHJ5L3tjb3VudHJ5fS8nCgogICAgICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmdldCh1cmwpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdTb21ldGhpbmcgZ29uZSBiYWQgb24gY29yb25hIHJlcXVlc3QnKQoKICAgICAgICBzb3VwID0gQmVhdXRpZnVsU291cChyZXNwb25zZS50ZXh0LCAnaHRtbC5wYXJzZXInKQogICAgICAgIGNvbnRhaW5lciA9IHNvdXAuZmluZEFsbCgnZGl2JywgeyAiY2xhc3MiOiAibWFpbmNvdW50ZXItbnVtYmVyIiB9KQoKICAgICAgICBpZiBub3QgY29udGFpbmVyIG9yIGxlbihjb250YWluZXIpIDwgMToKICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdDb3JvbmEgc2NyYXBwZXIgcmV0dXJuIG5vdGhpbmcgOignKQoKICAgICAgICByZXR1cm4gZGljdCgKICAgICAgICAgICAgY2FzZXM9c2VsZi5mb3JtYXRfY291bnRlcihjb250YWluZXJbMF0pLAogICAgICAgICAgICBkZWF0aHM9c2VsZi5mb3JtYXRfY291bnRlcihjb250YWluZXJbMV0pLAogICAgICAgICAgICByZWNvdmVyZWQ9c2VsZi5mb3JtYXRfY291bnRlcihjb250YWluZXJbMl0pLAogICAgICAgICAgICBjb3VudHJ5PWNvdW50cnkKICAgICAgICApCgogICAgZGVmIGZvcm1hdF9jb3VudGVyKHNlbGYsIGNvbnRhaW5lcik6CiAgICAgICAgY291bnRlciA9IGNvbnRhaW5lci50ZXh0CiAgICAgICAgaWYgbm90IGNvdW50ZXI6CiAgICAgICAgICAgIHJldHVybiAnMCcKICAgICAgICByZXR1cm4gY291bnRlci5zdHJpcCgpCgpjbGFzcyBUd2VldFNlcnZpY2U6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5zZXJ2aWNlID0gTm9uZQogICAgICAgIHNlbGYuYXV0aGVudGljYXRlKCkKCiAgICBkZWYgYXV0aGVudGljYXRlKHNlbGYpOgogICAgICAgIGFwaV9rZXkgPSBvcy5lbnZpcm9uLmdldCgnVFdFRVRfQVBJX0tFWScpCiAgICAgICAgYXBpX3NlY3JldCA9IG9zLmVudmlyb24uZ2V0KCdUV0VFVF9BUElfU0VDUkVUJykKICAgICAgICBhY2Nlc3NfdG9rZW4gPSBvcy5lbnZpcm9uLmdldCgnVFdFRVRfQVBJX0FDQ0VTU19UT0tFTicpCiAgICAgICAgYWNjZXNzX3NlY3JldCA9IG9zLmVudmlyb24uZ2V0KCdUV0VFVF9BUElfQUNDRVNTX1NFQ1JFVCcpCgogICAgICAgIGF1dGggPSB0d2VlcHkuT0F1dGhIYW5kbGVyKGFwaV9rZXksIGFwaV9zZWNyZXQpCiAgICAgICAgYXV0aC5zZXRfYWNjZXNzX3Rva2VuKGFjY2Vzc190b2tlbiwgYWNjZXNzX3NlY3JldCkKCiAgICAgICAgdHJ5OgogICAgICAgICAgICBhcGkgPSB0d2VlcHkuQVBJKGF1dGgpCiAgICAgICAgICAgIGFwaS52ZXJpZnlfY3JlZGVudGlhbHMoKQogICAgICAgICAgICBzZWxmLnNlcnZpY2UgPSBhcGkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1NvbWV0aGluZyBnb25lIGJhZCBvbiB0d2VldCBzZXJ2aWNlIGF1dGgnKQoKICAgIGRlZiB0d2VldChzZWxmLCBtZXNzYWdlKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYuc2VydmljZS51cGRhdGVfc3RhdHVzKG1lc3NhZ2UpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdTb21ldGhpbmcgZ29uZSBiYWQgd2hlbiBjcmVhdGluZyBhIHR3ZWV0JykKPHxmaW1fc3VmZml4fD4KaW1wb3J0IHR3ZWVweQpmcm9tIGJzNCBpbXBvcnQgQmVhdXRpZnVsU291cAoKY2xhc3MgQ29yb25hU2VydmljZToKPHxmaW1fZW5kfD4="]
["ee859a8461b7fe673669a5243655ae8b005de346-1","ee859a8461b7fe673669a5243655ae8b005de346","PHxmaW1fcHJlZml4fD4KZnJvbSAubWZjYyBpbXBvcnQgbWZjYwoKZnJvbSAuLiBpbXBvcnQgY29sbGVjdGluZywgdG9vbGtpdAoKTUZDQyA9ICJtZmNjIgpUSU1JVF9TQU1QTEVSQVRFID0gMTYwMDAKV0lOTEVOID0gMC4wMjUKV0lOU1RFUCA9IDAuMDEKTlVNQ0VQID0gMTYKTkZJTFQgPSAxMjgKTkZGVCA9IDIwNDgKTE9XRlJFUSA9IDAKSElHSEZSRVEgPSBOb25lClBSRUVNUEggPSAwLjk3CkNFUExJRlRFUiA9IDIyCkFQUEVOREVORVJHWSA9IFRydWUKCmRlZiBwcmVwcm9jZXNzKHNhdmVwYXRoLCBrZWVwd2F2ZSk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRhdGEsIHRlc3QgPSB0b29sa2l0LnNhdmUubG9hZChzYXZlcGF0aCkKICAgIHJldHVybiBfcHJlcHJvY2VzcyhkYXRhLCBrZWVwd2F2ZSksIF9wcmVwcm9jZXNzKHRlc3QsIGtlZXB3YXZlKQoKPHxmaW1fZW5kfD4="]
["3a502b10b5960e312f55e8fd3f5717810a12be6e-5","3a502b10b5960e312f55e8fd3f5717810a12be6e","PHxmaW1fcHJlZml4fD4KCmZyb20gcHlweS5tb2R1bGUubWljcm9udW1weS50ZXN0LnRlc3RfYmFzZSBpbXBvcnQgQmFzZU51bXB5QXBwVGVzdAoKY2xhc3MgQXBwVGVzdE51bVN1cHBvcnQoQmFzZU51bXB5QXBwVGVzdCk6CiAgICBkZWYgdGVzdF93aGVyZShzZWxmKToKICAgICAgICBmcm9tIF9udW1weXB5IGltcG9ydCB3aGVyZSwgb25lcywgemVyb3MsIGFycmF5CiAgICAgICAgYSA9IFsxLCAyLCAzLCAwLCAtM10KICAgICAgICBhID0gd2hlcmUoYXJyYXkoYSkgPiAwLCBvbmVzKDUpLCB6ZXJvcyg1KSkKICAgICAgICBhc3NlcnQgKGEgPT0gWzEsIDEsIDEsIDAsIDBdKS5hbGwoKQoKICAgIGRlZiB0ZXN0X3doZXJlX2RpZmZlcmluZ19kdHlwZXMoc2VsZik6CiAgICAgICAgZnJvbSBfbnVtcHlweSBpbXBvcnQgYXJyYXksIG9uZXMsIHplcm9zLCB3aGVyZQogICAgICAgIGEgPSBbMSwgMiwgMywgMCwgLTNdCiAgICAgICAgYSA9IHdoZXJlKGFycmF5KGEpID4gMCwgb25lcyg1LCBkdHlwZT1pbnQpLCB6ZXJvcyg1LCBkdHlwZT1mbG9hdCkpCiAgICAgICAgYXNzZXJ0IChhID09IFsxLCAxLCAxLCAwLCAwXSkuYWxsKCkKCiAgICBkZWYgdGVzdF93aGVyZV9icm9hZGNhc3Qoc2VsZik6CiAgICAgICAgZnJvbSBfbnVtcHlweSBpbXBvcnQgYXJyYXksIHdoZXJlCiAgICAgICAgYSA9IHdoZXJlKGFycmF5KFtbMSwgMiwgM10sIFs0LCA1LCA2XV0pID4gMywgWzEsIDEsIDFdLCAyKQo8fGZpbV9ob2xlfD4KICAgIGRlZiB0ZXN0X3doZXJlX2Vycm9ycyhzZWxmKToKICAgICAgICBmcm9tIF9udW1weXB5IGltcG9ydCB3aGVyZSwgYXJyYXkKICAgICAgICByYWlzZXMoVmFsdWVFcnJvciwgIndoZXJlKFsxLCAyLCAzXSwgWzMsIDQsIDVdKSIpCiAgICAgICAgcmFpc2VzKFZhbHVlRXJyb3IsICJ3aGVyZShbMSwgMiwgM10sIFszLCA0LCA1XSwgWzYsIDddKSIpCiAgICAgICAgYXNzZXJ0IHdoZXJlKFRydWUsIDEsIDIpID09IGFycmF5KDEpCiAgICAgICAgYXNzZXJ0IHdoZXJlKEZhbHNlLCAxLCAyKSA9PSBhcnJheSgyKQogICAgICAgIGFzc2VydCAod2hlcmUoVHJ1ZSwgWzEsIDIsIDNdLCAyKSA9PSBbMSwgMiwgM10pLmFsbCgpCiAgICAgICAgYXNzZXJ0ICh3aGVyZShGYWxzZSwgMSwgWzEsIDIsIDNdKSA9PSBbMSwgMiwgM10pLmFsbCgpCiAgICAgICAgYXNzZXJ0ICh3aGVyZShbMSwgMiwgM10sIFRydWUsIEZhbHNlKSA9PSBbVHJ1ZSwgVHJ1ZSwgVHJ1ZV0pLmFsbCgpCgogICAgI2RlZiB0ZXN0X3doZXJlXzFfYXJnKHNlbGYpOgogICAgIyAgICB4eHgKCiAgICBkZWYgdGVzdF93aGVyZV9pbnZhbGlkYXRlcyhzZWxmKToKICAgICAgICBmcm9tIF9udW1weXB5IGltcG9ydCB3aGVyZSwgb25lcywgemVyb3MsIGFycmF5CiAgICAgICAgYSA9IGFycmF5KFsxLCAyLCAzLCAwLCAtM10pCiAgICAgICAgYiA9IHdoZXJlKGEgPiAwLCBvbmVzKDUpLCB6ZXJvcyg1KSkKICAgICAgICBhWzBdID0gMAogICAgICAgIGFzc2VydCAoYiA9PSBbMSwgMSwgMSwgMCwgMF0pLmFsbCgpCgoKICAgIGRlZiB0ZXN0X2RvdChzZWxmKToKICAgICAgICBmcm9tIF9udW1weXB5IGltcG9ydCBhcnJheSwgZG90LCBhcmFuZ2UKICAgICAgICBhID0gYXJyYXkocmFuZ2UoNSkpCiAgICAgICAgYXNzZXJ0IGRvdChhLCBhKSA9PSAzMC4wCgogICAgICAgIGEgPSBhcnJheShyYW5nZSg1KSkKICAgICAgICBhc3NlcnQgYS5kb3QocmFuZ2UoNSkpID09IDMwCiAgICAgICAgYXNzZXJ0IGRvdChyYW5nZSg1KSwgcmFuZ2UoNSkpID09IDMwCiAgICAgICAgYXNzZXJ0IChkb3QoNSwgWzEsIDIsIDNdKSA9PSBbNSwgMTAsIDE1XSkuYWxsKCkKCiAgICAgICAgYSA9IGFyYW5nZSgxMikucmVzaGFwZSgzLCA0KQogICAgICAgIGIgPSBhcmFuZ2UoMTIpLnJlc2hhcGUoNCwgMykKICAgICAgICBjID0gYS5kb3QoYikKICAgICAgICBhc3NlcnQgKGMgPT0gW1sgNDIsIDQ4LCA1NF0sIFsxMTQsIDEzNiwgMTU4XSwgWzE4NiwgMjI0LCAyNjJdXSkuYWxsKCkKCiAgICAgICAgYSA9IGFyYW5nZSgyNCkucmVzaGFwZSgyLCAzLCA0KQogICAgICAgIHJhaXNlcyhWYWx1ZUVycm9yLCAiYS5kb3QoYSkiKQogICAgICAgIGIgPSBhWzAsIDosIDpdLlQKICAgICAgICAjU3VwZXJmbHVvdXMgc2hhcGUgdGVzdCBtYWtlcyB0aGUgaW50ZW50aW9uIG9mIHRoZSB0ZXN0IGNsZWFyZXIKICAgICAgICBhc3NlcnQgYS5zaGFwZSA9PSAoMiwgMywgNCkKICAgICAgICBhc3NlcnQgYi5zaGFwZSA9PSAoNCwgMykKICAgICAgICBjID0gZG90KGEsIGIpCiAgICAgICAgYXNzZXJ0IChjID09IFtbWzE0LCAzOCwgNjJdLCBbMzgsIDEyNiwgMjE0XSwgWzYyLCAyMTQsIDM2Nl1dLAogICAgICAgICAgICAgICAgICAgW1s4NiwgMzAyLCA1MThdLCBbMTEwLCAzOTAsIDY3MF0sIFsxMzQsIDQ3OCwgODIyXV1dKS5hbGwoKQogICAgICAgIGMgPSBkb3QoYSwgYls6LCAyXSkKICAgICAgICBhc3NlcnQgKGMgPT0gW1s2MiwgMjE0LCAzNjZdLCBbNTE4LCA2NzAsIDgyMl1dKS5hbGwoKQogICAgICAgIGEgPSBhcmFuZ2UoMyoyKjYpLnJlc2hhcGUoKDMsMiw2KSkKICAgICAgICBiID0gYXJhbmdlKDMqMio2KVs6Oi0xXS5yZXNoYXBlKCgyLDYsMykpCiAgICAgICAgYXNzZXJ0IGRvdChhLCBiKVsyLDAsMSwyXSA9PSAxMTQwCiAgICAgICAgYXNzZXJ0IChkb3QoW1sxLDJdLFszLDRdXSxbNSw2XSkgPT0gWzE3LCAzOV0pLmFsbCgpCgogICAgZGVmIHRlc3RfZG90X2NvbnN0YW50KHNlbGYpOgogICAgICAgIGZyb20gX251bXB5cHkgaW1wb3J0IGFycmF5LCBkb3QKICAgICAgICBhID0gYXJyYXkocmFuZ2UoNSkpCiAgICAgICAgYiA9IGEuZG90KDIuNSkKICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoNSk6CiAgICAgICAgICAgIGFzc2VydCBiW2ldID09IDIuNSAqIGFbaV0KICAgICAgICBjID0gZG90KDQsIDMuMCkKICAgICAgICBhc3NlcnQgYyA9PSAxMi4wCiAgICAgICAgYyA9IGFycmF5KDMuMCkuZG90KGFycmF5KDQpKQogICAgICAgIGFzc2VydCBjID09IDEyLjAKPHxmaW1fc3VmZml4fD4KICAgICAgICBhc3NlcnQgKGEgPT0gW1syLCAyLCAyXSwgWzEsIDEsIDFdXSkuYWxsKCkKICAgICAgICBhID0gd2hlcmUoVHJ1ZSwgWzEsIDEsIDFdLCAyKQogICAgICAgIGFzc2VydCAoYSA9PSBbMSwgMSwgMV0pLmFsbCgpCgo8fGZpbV9lbmR8Pg=="]
["c903f1c139fa750f4b96152b1613ef6eebf10b34-3","c903f1c139fa750f4b96152b1613ef6eebf10b34","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOnV0Zi04OyBweXRob24taW5kZW50OjI7IGluZGVudC10YWJzLW1vZGU6bmlsIC0qLQoKIyBDb3B5cmlnaHQgMjAxMyBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCjx8ZmltX2VuZHw+"]
["11cce0d57c4e691d6d9e3ab4a2c30987d90b37a4-2","11cce0d57c4e691d6d9e3ab4a2c30987d90b37a4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN1YnByb2Nlc3MKaW1wb3J0IG9zCmltcG9ydCBkYXRldGltZQpmcm9tIGZsYXNrIGltcG9ydCBGbGFzaywgcmVuZGVyX3RlbXBsYXRlLCByZWRpcmVjdCwgdXJsX2ZvciwgcmVxdWVzdCwgc2VuZF9maWxlCmZyb20gdXNhX3dlYXRoZXIgaW1wb3J0IHVzYV93ZWF0aGVyCmZyb20gc2V0dGluZ3MgaW1wb3J0IHJmY29kZXMsIGxlZF9zZXR0aW5ncywgY29kZXNlbmQsIGJ1c19zdG9wcywgd2VhdGhlcl9zZXR0aW5ncwppbXBvcnQgcGljYW1lcmEKZnJvbSB0aW1lIGltcG9ydCBzbGVlcAoKCmFwcCA9IEZsYXNrKF9fbmFtZV9fKQoKCmRlZiByZl9zZW5kKG51bSwgc3RhdGUpOgogICAgaWYgbnVtID09ICcwJzoKICAgICAgICBmb3Igb3V0bGV0IGluIFsnMScsICcyJywgJzMnLCAnNCcsICc1J106CiAgICAgICAgICAgIGNvZGUgPSByZmNvZGVzW291dGxldF1bc3RhdGVdCiAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbY29kZXNlbmRbJ2V4ZWMnXSwgY29kZSwgJy1wJywgY29kZXNlbmRbJ3BpbiddLCAnLWwnLCBjb2Rlc2VuZFsnbGVuZ3RoJ11dKQogICAgZWxpZiBudW0gPT0gJzEwJzoKICAgICAgICBmb3Igb3V0bGV0IGluIFsnNicsICc3JywgJzgnLCAnOSddOgogICAgICAgICAgICBjb2RlID0gcmZjb2Rlc1tvdXRsZXRdW3N0YXRlXQogICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoW2NvZGVzZW5kWydleGVjJ10sIGNvZGUsICctcCcsIGNvZGVzZW5kWydwaW4nXSwgJy1sJywgY29kZXNlbmRbJ2xlbmd0aCddXSkKICAgIGVsc2U6CiAgICAgICAgY29kZSA9IHJmY29kZXNbbnVtXVtzdGF0ZV0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHN1YnByb2Nlc3MuY2FsbChbY29kZXNlbmRbJ2V4ZWMnXSwgY29kZSwgJy1wJywgY29kZXNlbmRbJ3BpbiddLCAnLWwnLCBjb2Rlc2VuZFsnbGVuZ3RoJ11dKQoKCjx8ZmltX2VuZHw+"]
["9d75906d0dd39743f4b1195f4a412d7abc1a74a9-4","9d75906d0dd39743f4b1195f4a412d7abc1a74a9","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgb3MKaW1wb3J0IHN5cwpmcm9tIGRpc3R1dGlscy5zeXNjb25maWcgaW1wb3J0IGdldF9weXRob25fbGliCgpmcm9tIHNldHVwdG9vbHMgaW1wb3J0IGZpbmRfcGFja2FnZXMsIHNldHVwCgojIFdhcm4gaWYgd2UgYXJlIGluc3RhbGxpbmcgb3ZlciB0b3Agb2YgYW4gZXhpc3RpbmcgaW5zdGFsbGF0aW9uLiAKb3ZlcmxheV93YXJuaW5nID0gRmFsc2UKaWYgImluc3RhbGwiIGluIHN5cy5hcmd2OgogICAgbGliX3BhdGhzID0gW2dldF9weXRob25fbGliKCldCiAgICBpZiBsaWJfcGF0aHNbMF0uc3RhcnRzd2l0aCgiL3Vzci9saWIvIik6CiAgICAgICAgIyBXZSBoYXZlIHRvIHRyeSBhbHNvIHdpdGggYW4gZXhwbGljaXQgcHJlZml4IG9mIC91c3IvbG9jYWwgaW4gb3JkZXIgdG8KICAgICAgICAjIGNhdGNoIERlYmlhbidzIGN1c3RvbSB1c2VyIHNpdGUtcGFja2FnZXMgZGlyZWN0b3J5LgogICAgICAgIGxpYl9wYXRocy5hcHBlbmQoZ2V0X3B5dGhvbl9saWIocHJlZml4PSIvdXNyL2xvY2FsIikpCiAgICBmb3IgbGliX3BhdGggaW4gbGliX3BhdGhzOgogICAgICAgIGV4aXN0aW5nX3BhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKGxpYl9wYXRoLCAiY291cmllciIpKQogICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGV4aXN0aW5nX3BhdGgpOgogICAgICAgICAgICAjIFdlIG5vdGUgdGhlIG5lZWQgZm9yIHRoZSB3YXJuaW5nIGhlcmUsIGJ1dCBwcmVzZW50IGl0IGFmdGVyIHRoZQogICAgICAgICAgICAjIGNvbW1hbmQgaXMgcnVuLCBzbyBpdCdzIG1vcmUgbGlrZWx5IHRvIGJlIHNlZW4uCiAgICAgICAgICAgIG92ZXJsYXlfd2FybmluZyA9IFRydWUKICAgICAgICAgICAgYnJlYWsKCgojIEFueSBwYWNrYWdlcyBpbnNpZGUgdGhlIGNvdXJpZXIgc291cmNlIGZvbGRlciB3ZSBkb250IHdhbnQgaW4gdGhlIHBhY2thZ2VzCkVYQ0xVREVfRlJPTV9QQUNLQUdFUyA9IFsgXQoKIyBEeW5hbWljYWxseSBjYWxjdWxhdGUgdGhlIHZlcnNpb24gYmFzZWQgb24gY291cmllci5WRVJTSU9OLgp2ZXJzaW9uID0gX19pbXBvcnRfXygnY291cmllcicpLmdldF92ZXJzaW9uKCkKCnByaW50ICI9IiAqIDgwCnByaW50ICJQYWNrYWdlczogIiwgZmluZF9wYWNrYWdlcyhleGNsdWRlPUVYQ0xVREVfRlJPTV9QQUNLQUdFUykKcHJpbnQgIj0iICogODAKCnNldHVwKAogICAgbmFtZT0nY291cmllcmxpYicsCiAgICB2ZXJzaW9uPXZlcnNpb24sCiAgICB1cmw9J2h0dHBzOi8vZ2l0aHViLmNvbS9wYW55YW0vY291cmllcicsCiAgICBhdXRob3I9J1NyaXJhbSBQYW55YW0nLAogICAgYXV0aG9yX2VtYWlsPSdzcmkucGFueWFtQGdtYWlsLmNvbScsCiAgICBkZXNjcmlwdGlvbj0oIk1vZGVybiBkYXRhIGludGVyY2hhbmdlIHN5c3RlbSBmb3Igd2ViICsgbW9iaWxlIHN0YWNrcyAiCiAgICAgICAgICAgICAgICAgInRoYXQgY29tYmluZXMgYW4gZXhwcmVzc2l2ZSBzY2hlbWEgbGFuZ3VhZ2Ugd2l0aCBsYW5ndWFnZSAiCiAgICAgICAgICAgICAgICAgImlkaW9tYXRpYyBkYXRhIGJpbmRpbmcgZ2VuZXJhdG9ycy4gIiksCiAgICBsaWNlbnNlPSdCU0QnLAogICAgcGFja2FnZXM9ZmluZF9wYWNrYWdlcyhleGNsdWRlPUVYQ0xVREVfRlJPTV9QQUNLQUdFUyksCiAgICBpbmNsdWRlX3BhY2thZ2VfZGF0YT1UcnVlLAogICAgc2NyaXB0cz1bJ2Jpbi9jbGVhbl9pbnN0YWxsLnNoJywgJ2Jpbi9wYWNrYWdlLnNoJ10sCiAgICBjbGFzc2lmaWVycz1bCiAgICAgICAgJ0RldmVsb3BtZW50IFN0YXR1cyA6OiAyIC0gUHJlLUFscGhhJywKICAgICAgICAnRW52aXJvbm1lbnQgOjogV2ViIEVudmlyb25tZW50JywKICAgICAgICAnSW50ZW5kZWQgQXVkaWVuY2UgOjogRGV2ZWxvcGVycycsCiAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEJTRCBMaWNlbnNlJywKICAgICAgICAnT3BlcmF0aW5nIFN5c3RlbSA6OiBPUyBJbmRlcGVuZGVudCcsCiAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbicsCiAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyJywKICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNycsCiAgICAgICAgJ1RvcGljIDo6IEludGVybmV0IDo6IFdXVy9IVFRQJywKICAgICAgICAnVG9waWMgOjogSW50ZXJuZXQgOjogV1dXL0hUVFAgOjogRHluYW1pYyBDb250ZW50JywKICAgICAgICAnVG9waWMgOjogSW50ZXJuZXQgOjogV1dXL0hUVFAgOjogV1NHSScsCiAgICAgICAgJ1RvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IExpYnJhcmllcyA6OiBBcHBsaWNhdGlvbiBGcmFtZXdvcmtzJywKICAgICAgICAnVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzIDo6IFB5dGhvbiBNb2R1bGVzJywKICAgIF0sCikKCgppZiBvdmVybGF5X3dhcm5pbmc6CiAgICBzeXMuc3RkZXJyLndyaXRlKCIiIgoKPHxmaW1faG9sZXw+CllvdSBoYXZlIGp1c3QgaW5zdGFsbGVkIENvdXJpZXIgb3ZlciB0b3Agb2YgYW4gZXhpc3RpbmcKaW5zdGFsbGF0aW9uLCB3aXRob3V0IHJlbW92aW5nIGl0IGZpcnN0LiBCZWNhdXNlIG9mIHRoaXMsCnlvdXIgaW5zdGFsbCBtYXkgbm93IGluY2x1ZGUgZXh0cmFuZW91cyBmaWxlcyBmcm9tIGEKcHJldmlvdXMgdmVyc2lvbiB0aGF0IGhhdmUgc2luY2UgYmVlbiByZW1vdmVkIGZyb20KQ291cmllci4gVGhpcyBpcyBrbm93biB0byBjYXVzZSBhIHZhcmlldHkgb2YgcHJvYmxlbXMuIFlvdQpzaG91bGQgbWFudWFsbHkgcmVtb3ZlIHRoZQoKJShleGlzdGluZ19wYXRoKXMKCmRpcmVjdG9yeSBhbmQgcmUtaW5zdGFsbCBDb3VyaWVyLgoKIiIiICUgeyJleGlzdGluZ19wYXRoIjogZXhpc3RpbmdfcGF0aH0pCjx8ZmltX3N1ZmZpeHw+Cj09PT09PT09CldBUk5JTkchCj09PT09PT09Cgo8fGZpbV9lbmR8Pg=="]
["eec02ec3ad819f7ff41bfc6d2f3f4a0d14eba757-1","eec02ec3ad819f7ff41bfc6d2f3f4a0d14eba757","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgKGMpIFN0ZWZhbiBDb3VudHJ5bWFuLCAyMDE3CiMgV3JpdGUgYSB0aW1pbmcgd2l0bmVzcyBwYXBlciB0ZW1wbGF0ZQoKaW1wb3J0IHN5cwppbXBvcnQgb3MKaW1wb3J0IGdsb2IKaW1wb3J0IGd3cHkudGltZQppbXBvcnQgc2h1dGlsCmltcG9ydCBzdWJwcm9jZXNzCgpTQ1JJUFRESVIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpClRFTVBMQVRFRElSTkFNRSA9ICd0aW1pbmdfY2hlY2tzLmQnClRFTVBMQVRFUEFUSCA9IG9zLnBhdGguam9pbihTQ1JJUFRESVIsIFRFTVBMQVRFRElSTkFNRSwgJ21haW4udGV4JykKQVVYRElSID0gb3MucGF0aC5qb2luKFNDUklQVERJUiwgVEVNUExBVEVESVJOQU1FLCAnYXV4aWxpYXJ5X2ZpbGVzJykKVVNBR0UgPSAiIiJVU0FHRToKCiAgIiIiICsgc3lzLmFyZ3ZbMF0gKyAiIiIgR1JBQ0VJRCBHUFNUSU1FIE9VVERJUgoKICBPdXRwdXRzIGEgdGltaW5nIHdpdG5lc3MgVEVYIGZpbGUgaW50byB0aGUgc3BlY2lmaWVkIG91dHB1dAogIGRpcmVjdG9yeS4gVGhlIG91dHB1dCBkaXJlY3RvcnkgbXVzdCBoYXZlIHRoZSByZXF1aXJlZCBwbG90cywKICB3aGljaCBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSB0aW1pbmdfY2hlY2tzLnB5IHNjcmlwdC4gVGhlIHRpbWluZwogIHdpdG5lc3MgcGFwZXIgaXMgZ2VuZXJhdGVkIGZvciB0aGUgZ2l2ZW4gR1BTIHRpbWUgYW5kIEdyYWNlSUQuCiIiIgoKaWYgKGxlbihzeXMuYXJndikgPT0gMCkgb3IgKCItaCIgaW4gc3lzLmFyZ3YpOgogICAgcHJpbnQoVVNBR0UpCiAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDA6CiAgICAgICAgZXhpdCgxKQogICAgZWxzZToKICAgICAgICBleGl0KDApCmVsc2U6CiAgICBncmFjZWlkID0gc3lzLmFyZ3ZbMV0KICAgIGdwc3RpbWUgPSBzeXMuYXJndlsyXQogICAgb3V0ZGlyICA9IG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlszXSkKICAgIHV0Y3RpbWUgPSBnd3B5LnRpbWUudGNvbnZlcnQoaW50KGdwc3RpbWUpKS5zdHJmdGltZSgiJWMgVVRDIikKICAgIG91dGZpbGVwYXRoID0gb3MucGF0aC5qb2luKG91dGRpciwgIm1haW4udGV4IikKCiMgZGVmaW5lIHNvbWUgc3RyYWlnaHRmb3J3YXJkIHRleHQgc3Vic3RpdHV0aW9ucyBmb3IgdGhlIHRlbXBsYXRlIFRFWCBmaWxlClNVQlNUSVRVVElPTlMgPSB7CiAgICAiJEdSQUNFSUQiOiBncmFjZWlkLAogICAgIiRHUFNUSU1FIjogc3RyKGdwc3RpbWUpLAogICAgIiRVVENUSU1FIjogdXRjdGltZQp9CgojIHRoZXNlIGFyZSB0aGUgZmlsZSBuYW1lIGdsb2JzIGZvciB0aGUgcGxvdHMgbWFkZSBmb3IgZWFjaCBldmVudC4gdGhlc2UgbmFtZQojIHN1YnN0aXR1dGlvbnMgZGVwZW5kIG9uIHRoZSBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5LiB0aGlzIGlzIG15IGxhenkgc29sdXRpb24KIyB0aGF0IGF2b2lkcyBoYXZpbmcgdG8gZmlndXJlIG91dCB0aGUgYWN0dWFsIGZpbGVuYW1lcyBzaW5jZSB0aGUgcGxvdHRpbmcKIyBsaWJyYXJpZXMgSSB3cm90ZSBhcmUgYSBtZXNzIGFuZCBkb24ndCBoYXZlIGVhc2lseSBjYWxsYWJsZSBmdW5jdGlvbnMgZm9yCiMgdGhlc2UuCkdMT0JfU1VCU1RJVFVUSU9OUyA9IHsKICAgICIkTEhPX1hfRFQiOiAiSDEuLkNBTC1QQ0FMWF9GUEdBX0RUT05FX0lOMV9EUS1PdmVybGF5LSoucG5nIiwKICAgICIkTEhPX1lfRFQiOiAiSDEuLkNBTC1QQ0FMWV9GUEdBX0RUT05FX0lOMV9EUS1PdmVybGF5LSoucG5nIiwKICAgICIkTExPX1lfRFQiOiAiTDEuLkNBTC1QQ0FMWV9GUEdBX0RUT05FX0lOMV9EUS1PdmVybGF5LSoucG5nIiwKICAgICIkTExPX1hfRFQiOiAiTDEuLkNBTC1QQ0FMWF9GUEdBX0RUT05FX0lOMV9EUS1PdmVybGF5LSoucG5nIiwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgIiRIWF9EVF9GVUxMIjogIkgxLi5DQUwtUENBTFhfRlBHQV9EVE9ORV9JTjFfRFEtRHVvVG9uZS1TdGF0aXN0aWNzLWZ1bGwtKi5wbmciLAogICAgIiRIWV9EVF9GVUxMIjogIkgxLi5DQUwtUENBTFlfRlBHQV9EVE9ORV9JTjFfRFEtRHVvVG9uZS1TdGF0aXN0aWNzLWZ1bGwtKi5wbmciLAogICAgIiRMWV9EVF9GVUxMIjogIkwxLi5DQUwtUENBTFlfRlBHQV9EVE9ORV9JTjFfRFEtRHVvVG9uZS1TdGF0aXN0aWNzLWZ1bGwtKi5wbmciLAogICAgIiRMWF9EVF9GVUxMIjogIkwxLi5DQUwtUENBTFhfRlBHQV9EVE9ORV9JTjFfRFEtRHVvVG9uZS1TdGF0aXN0aWNzLWZ1bGwtKi5wbmciLAo8fGZpbV9lbmR8Pg=="]
["000b14db12bcb520d0960b8205c1604aff76a92d-3","000b14db12bcb520d0960b8205c1604aff76a92d","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiIgoKVGhpcyBmaWxlIGlzIGZvciBwdWxsaW5nIE1hdGVyaWFscyBQcm9qZWN0IGRhdGEgaW50byB0aGUgU2ltbWF0ZSBkYXRhYmFzZS4gClB5TWF0R2VuIG9mZmVycyBhbiBlYXN5IHdheSB0byBkbyB0aGlzIGluIHB5dGhvbiAtLSB0aGUgTVBSZXN0ZXIgY2xhc3MuIEFsbCB5b3UKbmVlZCBpcyBhbiBBUEkga2V5IGZyb20gaHR0cHM6Ly9tYXRlcmlhbHNwcm9qZWN0Lm9yZy9vcGVuIGFuZCBweW1hdGdlbiBpbnN0YWxsZWQuCkZvciBub3csIHdlIG9ubHkgcHVsbCB0aGUgbXAtaWQsIHN0cnVjdHVyZSwgZmluYWwgZW5lcmd5LCBhbmQgZW5lcmd5IGFib3ZlIGh1bGwuCgpOb3RlLCB0aGF0IHRoZSBzdHJ1Y3R1cmVzIHdlIHB1bGwgaW50byBvdXIgZGF0YWJhc2UgbWF5IG5vdCBiZSBleGFjdCBtYXRjaGVzIHRvCndoYXQncyBzaG93biBpbiB0aGVpciBkYXRhYmFzZS4gVGhpcyBpcyBiZWFjdXNlIHdlIHJ1biBzeW1tZXRyeSBhbmFseXNpcyBvbiB0aGUKc3RydWN0dXJlIGFuZCBjb252ZXJ0IHRvIGEgTExMIHJlZHVjZWQgY2VsbC4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIiIiCgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgdHJhbnNhY3Rpb24KCjx8ZmltX2VuZHw+"]
["567da1130ac1770324f8bf55a61d0df0eb3b0871-1","567da1130ac1770324f8bf55a61d0df0eb3b0871","PHxmaW1fcHJlZml4fD4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgojIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBHZW5lcmF0ZWQgZmlsZSwgRE8gTk9UIEVESVQKIyBDaGFuZ2VzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IgYW5kIHdpbGwgYmUgbG9zdCBpZiB0aGUgY29kZSBpcyByZWdlbmVyYXRlZC4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKZnJvbSBtc3Jlc3Quc2VyaWFsaXphdGlvbiBpbXBvcnQgTW9kZWwKCgpjbGFzcyBQcm9maWxlUmVnaW9uKE1vZGVsKToKICAgICIiIlByb2ZpbGVSZWdpb24uCgogICAgOnBhcmFtIGNvZGU6IFRoZSB0d28tbGV0dGVyIGNvZGUgZGVmaW5lZCBpbiBJU08gMzE2NiBmb3IgdGhlIGNvdW50cnkvcmVnaW9uLgogICAgOnR5cGUgY29kZTogc3RyCiAgICA6cGFyYW0gbmFtZTogTG9jYWxpemVkIGNvdW50cnkvcmVnaW9uIG5hbWUKICAgIDp0eXBlIG5hbWU6IHN0cgogICAgIiIiCgogICAgX2F0dHJpYnV0ZV9tYXAgPSB7CiAgICAgICAgJ2NvZGUnOiB7J2tleSc6ICdjb2RlJywgJ3R5cGUnOiAnc3RyJ30sCiAgICAgICAgJ25hbWUnOiB7J2tleSc6ICduYW1lJywgJ3R5cGUnOiAnc3RyJ30KICAgIH0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2RlPU5vbmUsIG5hbWU9Tm9uZSk6CiAgICAgICAgc3VwZXIoUHJvZmlsZVJlZ2lvbiwgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYuY29kZSA9IGNvZGUKPHxmaW1fZW5kfD4="]
["c96f41904a6cc69eaa99c8069379dee910be94d2-2","c96f41904a6cc69eaa99c8069379dee910be94d2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNvY2tldCAKaW1wb3J0IHNzbCAKCiNjcmVhdGluZyBzb2NrZXQgCnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCgojIFdSQVAgU09DS0VUCndyYXBwZWRTb2NrZXQgPSBzc2wud3JhcF9zb2NrZXQoc29jaywgc3NsX3ZlcnNpb249c3NsLlBST1RPQ09MX1RMU3YxKQoKCiMgQ09OTkVDVCBBTkQgUFJJTlQgUkVQTFkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgp3cmFwcGVkU29ja2V0LmNvbm5lY3QoKEhPU1QsIFBPUlQpKQp3cmFwcGVkU29ja2V0LnNlbmQocGFja2V0KQpwcmludCB3cmFwcGVkU29ja2V0LnJlY3YoMTI4MCkKCjx8ZmltX2VuZHw+"]
["28a735e9853831c3b0a9a293a3631c2990074143-4","28a735e9853831c3b0a9a293a3631c2990074143","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgppbXBvcnQgdGVuc29yZmxvdyBhcyB0Zgpmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBwYW5kYXMgYXMgcGQKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQgY3N2CmltcG9ydCBvcwppbXBvcnQgc3lzCnByb2plY3RfcGF0aCA9IFBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnRzWzJdCnN5cy5wYXRoLmFwcGVuZChzdHIocHJvamVjdF9wYXRoKSkKaW1wb3J0IG15Z2VuZQoKIyBTZXR0aW5ncwpmbGFncyA9IHRmLmNvbXBhdC52MS5mbGFncwpGTEFHUyA9IGZsYWdzLkZMQUdTCmZsYWdzLkRFRklORV9zdHJpbmcoJ2RhdGFzZXQnLCAnYnJjX21pY3JvYXJyYXlfbmV0aGVybGFuZHMnLCAnRGF0YXNldCBzdHJpbmcuJykKZmxhZ3MuREVGSU5FX3N0cmluZygnZ2VuZV9leHByZXNzaW9uJywgJ1RhYmxlX05LSV8yOTUnLCAnR2VuZSBleHByZXNzaW9uIHByZWZpeC4nKQpmbGFncy5ERUZJTkVfc3RyaW5nKCdjbGluaWNhbF9pbmZvJywgJ1RhYmxlMV9DbGluaWNhbERhdGFfVGFibGUueGxzJywgJ0NsaW5pY2FsIHN0YXR1cyBmaWxlLicpCmZsYWdzLkRFRklORV9zdHJpbmcoJ25vZGVfaWRzJywgJ3BwaS5pZHMudHh0JywgJ0Vuc2VtYmwgdW5pcXVlIGlkcyBmaWxlLicpCmZsYWdzLkRFRklORV9saXN0KCdsYWJlbHMnLCBbImZyZWUiLCAibWV0YXN0YXNpcyJdLCAnTGlzdCBvZiBjbGFzcyBsYWJlbHMuJykKCmNsaW5pY2FsX2NvbHVtbnMgPSAoMSw0KQpjbGluaWNhbF9za2lwX2hlYWRlcj0gMwpnZV9za2lwX2hlYWRlciA9IDIKCiNDaGVjayBkYXRhIGF2YWlsYWJpbGl0eQppZiBub3Qgb3MucGF0aC5pc2Rpcigie30vZGF0YS9yYXdfaW5wdXQve30iLmZvcm1hdChwcm9qZWN0X3BhdGgsIEZMQUdTLmRhdGFzZXQpKToKICAgIG9zLm1ha2VkaXJzKCJ7fS9kYXRhL3Jhd19pbnB1dC97fSIuZm9ybWF0KHByb2plY3RfcGF0aCwgRkxBR1MuZGF0YXNldCkpCgppZiBub3Qgb3MucGF0aC5pc2Rpcigie30vZGF0YS9wYXJzZWRfaW5wdXQve30iLmZvcm1hdChwcm9qZWN0X3BhdGgsIEZMQUdTLmRhdGFzZXQpKToKICAgIG9zLm1ha2VkaXJzKCJ7fS9kYXRhL3BhcnNlZF9pbnB1dC97fSIuZm9ybWF0KHByb2plY3RfcGF0aCwgRkxBR1MuZGF0YXNldCkpCiAgICAKaWYgbm90IG9zLnBhdGguaXNmaWxlKCJ7fS9kYXRhL291dHB1dC9uZXR3b3JrL3t9Ii5mb3JtYXQocHJvamVjdF9wYXRoLCBGTEFHUy5ub2RlX2lkcykpOgogICAgc3lzLmV4aXQoInt9IG1hcHBpbmcgZmlsZSBpcyBub3QgYXZhaWxhYmxlIHVuZGVyIC9kYXRhL291dHB1dC9uZXR3b3JrLyIuZm9ybWF0KEZMQUdTLm5vZGVfaWRzKSkKCnByaW50KCJHZW5lcmF0ZSBnZW5lIGV4cHJlc3Npb24gbWF0cml4Li4uIikgICAgCgpzYW1wbGVfY2xpbmljYWwgPSB7fQpjbGluaWNhbF9pbmZvID0gcGQucmVhZF9leGNlbCgie30vZGF0YS9yYXdfaW5wdXQve30ve30iLmZvcm1hdChwcm9qZWN0X3BhdGgsIEZMQUdTLmRhdGFzZXQsIEZMQUdTLmNsaW5pY2FsX2luZm8pLCB1c2Vjb2xzPWNsaW5pY2FsX2NvbHVtbnMsIHNraXByb3dzPWNsaW5pY2FsX3NraXBfaGVhZGVyKQpmb3IgaSxqIGluIHppcChjbGluaWNhbF9pbmZvWyJTYW1wbGVJRCJdLCBjbGluaWNhbF9pbmZvWyJFVkVOVG1ldGEiXSk6CiAgICBzYW1wbGVfY2xpbmljYWxbaV0gPSBqCiAgICAKICAgICAKY2xpbmljYWxfc3RhdHVzID0gY2xpbmljYWxfaW5mb1siRVZFTlRtZXRhIl0udG9fbnVtcHkoZHR5cGU9bnAuZHR5cGUoc3RyKSkKY2xpbmljYWxfc3RhdHVzW2NsaW5pY2FsX3N0YXR1cyA9PSAiMCJdID0gRkxBR1MubGFiZWxzWzBdCmNsaW5pY2FsX3N0YXR1c1tjbGluaWNhbF9zdGF0dXMgPT0gIjEiXSA9IEZMQUdTLmxhYmVsc1sxXQoKc2l6ZV9zYW1wbGVzID0gWzUwLCA1MCwgNTAsIDUwLCA1MCwgNDVdCmdlX29mZnNldCA9IDIKc3pfY29sdW1uID0gNQpHRV9maWxlcyA9IE9yZGVyZWREaWN0KCkKc3RhcnRfY2xpbmljYWxfc3RhdHVzID0gMApmb3IgbnVtX2ZpbGUgaW4gcmFuZ2UobGVuKHNpemVfc2FtcGxlcykpOgogICAgI0VhY2ggc2FtcGxlIGhhcyA1IGNvbHVtbnMKICAgICNXZSBzZWxlY3QgY29sdW1ucyAxIChsb2cgcmF0aW8pIGFuZCA1IChmbGFnKSBvZiBlYWNoIHNhbXBsZQogICAgI05vdGUgdGhhdCBmaXJzdCB0d28gY29sdW1ucyBhcmUgZm9yIGdlbmUgbmFtZXMKICAgIHNlbGVjdGVkX2ZsYWdzID0gW2kgZm9yIGkgaW4gcmFuZ2UoZ2Vfb2Zmc2V0LGdlX29mZnNldCsoc2l6ZV9zYW1wbGVzW251bV9maWxlXSpzel9jb2x1bW4pKSBpZiBpJTUgPT0gMV0gICAgICAgIAogICAgc2VsZWN0ZWRfY29sdW1ucyA9IFtpIGZvciBpIGluIHJhbmdlKGdlX29mZnNldCxnZV9vZmZzZXQrKHNpemVfc2FtcGxlc1tudW1fZmlsZV0qc3pfY29sdW1uKSkgaWYgaSU1ID09IDJdCiAgICBzZWxlY3RlZF9pZHMgPSBbaSBmb3IgaSBpbiByYW5nZShnZV9vZmZzZXQsZ2Vfb2Zmc2V0KyhzaXplX3NhbXBsZXNbbnVtX2ZpbGVdKnN6X2NvbHVtbikpIGlmIGklNSA9PSAyXQogICAgaWR4X3Byb2JlID0gMAogICAgc2VsZWN0ZWRfY29sdW1ucy5pbnNlcnQoMCxpZHhfcHJvYmUpICNBZGQgaW5kZXggb2YgZmlyc3QgY29sdW1uIHRoYXQgY29udGFpbnMgdGhlIHByb2JlCiAgICBHRV91bmZpbHRlcmVkID0gbnAuZ2VuZnJvbXR4dCgie30vZGF0YS9yYXdfaW5wdXQve30ve31fe30udHh0Ii5mb3JtYXQocHJvamVjdF9wYXRoLCBGTEFHUy5kYXRhc2V0LCBGTEFHUy5nZW5lX2V4cHJlc3Npb24sbnVtX2ZpbGUrMSksIHNraXBfaGVhZGVyPWdlX3NraXBfaGVhZGVyLCB1c2Vjb2xzPXR1cGxlKHNlbGVjdGVkX2NvbHVtbnMpLCBkdHlwZT1ucC5kdHlwZShzdHIpLCBkZWxpbWl0ZXI9Ilx0IikKICAgIHNwb3RfZmxhZ3MgPSBucC5nZW5mcm9tdHh0KCJ7fS9kYXRhL3Jhd19pbnB1dC97fS97fV97fS50eHQiLmZvcm1hdChwcm9qZWN0X3BhdGgsIEZMQUdTLmRhdGFzZXQsIEZMQUdTLmdlbmVfZXhwcmVzc2lvbiwgbnVtX2ZpbGUrMSksIHNraXBfaGVhZGVyPWdlX3NraXBfaGVhZGVyLCB1c2Vjb2xzPXR1cGxlKHNlbGVjdGVkX2ZsYWdzKSwgZHR5cGU9bnAuaW50MzIsIGRlbGltaXRlcj0iXHQiKQogICAgCiAgICAjTWFrZSBzdXJlIHRoZSBzYW1wbGVzIGFyZSBjb3JyZWN0bHkgbGFiZWxlZAogICAgZmlsZV9zYW1wbGVzID0gbnAuZ2VuZnJvbXR4dCgie30vZGF0YS9yYXdfaW5wdXQve30ve31fe30udHh0Ii5mb3JtYXQocHJvamVjdF9wYXRoLCBGTEFHUy5kYXRhc2V0LCBGTEFHUy5nZW5lX2V4cHJlc3Npb24sIG51bV9maWxlKzEpLCBtYXhfcm93cz0xLCB1c2Vjb2xzPXR1cGxlKHNlbGVjdGVkX2lkcyksIGR0eXBlPW5wLmR0eXBlKHN0ciksIGRlbGltaXRlcj0iXHQiKQogICAgZmlsZV9zYW1wbGVzID0gW2lkLnJlcGxhY2UoJ1NhbXBsZSAnLCAnJykgZm9yIGlkIGluIGZpbGVfc2FtcGxlc10KICAgIHNhbXBsZV9sYWJlbHMgPSBbRkxBR1MubGFiZWxzW3NhbXBsZV9jbGluaWNhbFtpbnQoaWQpXV0gZm9yIGlkIGluIGZpbGVfc2FtcGxlc10KICAgIHJlZl9hcnJheSA9IGNsaW5pY2FsX3N0YXR1c1tzdGFydF9jbGluaWNhbF9zdGF0dXM6c3RhcnRfY2xpbmljYWxfc3RhdHVzK3NpemVfc2FtcGxlc1tudW1fZmlsZV1dCiAgICBucC50ZXN0aW5nLmFzc2VydF9hcnJheV9lcXVhbChzYW1wbGVfbGFiZWxzLCByZWZfYXJyYXkpCiAgICBzdGFydF9jbGluaWNhbF9zdGF0dXMgKz0gc2l6ZV9zYW1wbGVzW251bV9maWxlXQogICAgCiAgICB2YWxpZF9tZWFzdXJlbWVudF9pZHggPSBucC53aGVyZShucC5hbGwoc3BvdF9mbGFncyA9PSAxLCBheGlzPTEpKQogICAgZXhwcmVzc2lvbl9tYXRyaXggPSBucC5zcXVlZXplKEdFX3VuZmlsdGVyZWRbdmFsaWRfbWVhc3VyZW1lbnRfaWR4LDpdKQogICAgR0VfZmlsZXNbbnVtX2ZpbGVdID0gcGQuRGF0YUZyYW1lKGRhdGE9ZXhwcmVzc2lvbl9tYXRyaXhbOiwxOl0sIGluZGV4PWV4cHJlc3Npb25fbWF0cml4WzosMF0pCgpHRV9kZiA9IHBkLmNvbmNhdChbR0VfZmlsZXNbMF0sIEdFX2ZpbGVzWzFdLCBHRV9maWxlc1syXSwgR0VfZmlsZXNbM10sIEdFX2ZpbGVzWzRdLCBHRV9maWxlc1s1XV0sIGF4aXM9MSwgam9pbj0naW5uZXInKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCnByb2JlcyA9IEdFX2RmLmluZGV4LnRvX251bXB5KCkKCm1nID0gbXlnZW5lLk15R2VuZUluZm8oKQogIAptYXBfZW5zZW1ibD17fQojIENoZWNrIHRoZSBhdmFpbGFibGUgZmllbGRzIGZyb206CiNodHRwczovL2RvY3MubXlnZW5lLmluZm8vZW4vbGF0ZXN0L2RvYy9kYXRhLmh0bWwjYXZhaWxhYmxlLWZpZWxkcwphbm5vdGF0aW9ucyA9IG1nLnF1ZXJ5bWFueShwcm9iZXMsIHNjb3Blcz0nYWNjZXNzaW9uLCBlbnNlbWJsJywgZmllbGRzPSdlbnNlbWJsLnByb3RlaW4nLCBzcGVjaWVzPSdodW1hbicpCiNGb3IgZWFjaCBxdWVyeSBtYXAgRU5TUHMgdG8gdGhlIHJlcG9ydGVyIHdpdGggaGlnaGVzdCBzY29yZQpmb3IgcmVzcG9uc2UgaW4gYW5ub3RhdGlvbnM6CiAgICBpZignZW5zZW1ibCcgaW4gcmVzcG9uc2UpOgogICAgICAgIG1hdGNoaW5nX3Njb3JlID0gcmVzcG9uc2VbJ19zY29yZSddCiAgICAgICAgc2NvcGUgPSByZXNwb25zZVsncXVlcnknXQogICAgICAgIGlmKGlzaW5zdGFuY2UocmVzcG9uc2VbJ2Vuc2VtYmwnXSxsaXN0KSk6CiAgICAgICAgICAgIGZvciBwcm90X2RpY3QgaW4gcmVzcG9uc2VbJ2Vuc2VtYmwnXToKICAgICAgICAgICAgICAgIGlmKGlzaW5zdGFuY2UocHJvdF9kaWN0Wydwcm90ZWluJ10sbGlzdCkpOgogICAgICAgICAgICAgICAgICAgIGZvciBlbnNwIGluIHByb3RfZGljdFsncHJvdGVpbiddOgogICAgICAgICAgICAgICAgICAgICAgICBpZiBlbnNwIGluIG1hcF9lbnNlbWJsOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2NvcGUgbm90IGluIG1hcF9lbnNlbWJsW2Vuc3BdKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBfZW5zZW1ibFtlbnNwXSA9IFtzY29wZSwgbWF0Y2hpbmdfc2NvcmVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1hcF9lbnNlbWJsW2Vuc3BdWzFdIDwgbWF0Y2hpbmdfc2NvcmUpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBfZW5zZW1ibFtlbnNwXSA9IFtzY29wZSwgbWF0Y2hpbmdfc2NvcmVdCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBfZW5zZW1ibFtlbnNwXSA9IFtzY29wZSwgbWF0Y2hpbmdfc2NvcmVdCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIGVuc3AgPSBwcm90X2RpY3RbJ3Byb3RlaW4nXQogICAgICAgICAgICAgICAgICAgIGlmIGVuc3AgaW4gbWFwX2Vuc2VtYmw6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNjb3BlIG5vdCBpbiBtYXBfZW5zZW1ibFtlbnNwXSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBfZW5zZW1ibFtlbnNwXSA9IFtzY29wZSwgbWF0Y2hpbmdfc2NvcmVdCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihtYXBfZW5zZW1ibFtlbnNwXVsxXSA8IG1hdGNoaW5nX3Njb3JlKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBfZW5zZW1ibFtlbnNwXSA9IFtzY29wZSwgbWF0Y2hpbmdfc2NvcmVdCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgbWFwX2Vuc2VtYmxbZW5zcF0gPSBbc2NvcGUsIG1hdGNoaW5nX3Njb3JlXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICBlbGlmKGlzaW5zdGFuY2UocmVzcG9uc2VbJ2Vuc2VtYmwnXSxkaWN0KSk6CiAgICAgICAgICAgIHByb3RfZGljdCA9IHJlc3BvbnNlWydlbnNlbWJsJ10KICAgICAgICAgICAgaWYoaXNpbnN0YW5jZShwcm90X2RpY3RbJ3Byb3RlaW4nXSxsaXN0KSk6CiAgICAgICAgICAgICAgICBmb3IgZW5zcCBpbiBwcm90X2RpY3RbJ3Byb3RlaW4nXToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgIGlmIGVuc3AgaW4gbWFwX2Vuc2VtYmw6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNjb3BlIG5vdCBpbiBtYXBfZW5zZW1ibFtlbnNwXSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBfZW5zZW1ibFtlbnNwXSA9IFtzY29wZSwgbWF0Y2hpbmdfc2NvcmVdCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Cjx8ZmltX2VuZHw+"]
["e93ca7ed5e3c6665a1518c1406e7eac6d9463a92-1","e93ca7ed5e3c6665a1518c1406e7eac6d9463a92","PHxmaW1fcHJlZml4fD4KI3NldHVwLnB5IGlzIHRoZSBidWlsZCBzY3JpcHQgZm9yIHNldHVwdG9vbHMuIEl0IHRlbGxzIHNldHVwdG9vbHMgYWJvdXQgeW91ciBwYWNrYWdlIChzdWNoIGFzIHRoZSBuYW1lIGFuZCB2ZXJzaW9uKSBhcyB3ZWxsIGFzIHdoaWNoIGNvZGUgZmlsZXMgdG8gaW5jbHVkZS4KCgppbXBvcnQgc2V0dXB0b29scwoKd2l0aCBvcGVuKCJSRUFETUUubWQiLCAiciIpIGFzIGZoOgogICAgbG9uZ19kZXNjcmlwdGlvbiA9IGZoLnJlYWQoKQojIHNldHVwdG9vbHMuZmluZF9wYWNrYWdlcyhleGNsdWRlPVsnY29udHJpYicsICdkb2NzJ10pIHBhY2thZ2VzPSxbInRlc3QiLCJ0ZXN0Lm1vZHVsZTEiXQo8fGZpbV9ob2xlfD4KICAgIGF1dGhvcl9lbWFpbD0iNTI0NjMxMjY2QHFxLmNvbSIsCiAgICBkZXNjcmlwdGlvbj0iQSBzbWFsbCBleGFtcGxlIHBhY2thZ2UiLAogICAgbG9uZ19kZXNjcmlwdGlvbj1sb25nX2Rlc2NyaXB0aW9uLAogICAgbG9uZ19kZXNjcmlwdGlvbl9jb250ZW50X3R5cGU9InRleHQvbWFya2Rvd24iLAogICAgdXJsPSJodHRwczovL2dpdGh1Yi5jb20vYTUyNDYzMTI2Ni9weXBpX3Rlc3QuZ2l0IiwKICAgIHBhY2thZ2VzPXNldHVwdG9vbHMuZmluZF9wYWNrYWdlcygpLAogICAgY2xhc3NpZmllcnM9WwogICAgICAgICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMyIsCiAgICAgICAgIkxpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1JVCBMaWNlbnNlIiwKICAgICAgICAiT3BlcmF0aW5nIFN5c3RlbSA6OiBPUyBJbmRlcGVuZGVudCIsCiAgICBdLAogICAgZW50cnlfcG9pbnRzPXsKICAgICAgICAnY29uc29sZV9zY3JpcHRzJzpbCiAgICAgICAgICAgICd0ZXN0MT1weXBpX3Rlc3QubW9kdWxlMTpydW5jbWQnCiAgICAgICAgXQogICAgfQopCjx8ZmltX3N1ZmZpeHw+CnNldHVwdG9vbHMuc2V0dXAoCiAgICBuYW1lPSJ0ZXN0IiwKICAgIHZlcnNpb249IjAuMC4xIiwKICAgIGF1dGhvcj0iemhhbmdsbCIsCjx8ZmltX2VuZHw+"]
["3a040c9b74cbef873d3af3e1cb102adeb004d027-3","3a040c9b74cbef873d3af3e1cb102adeb004d027","PHxmaW1fcHJlZml4fD4KJycnCkNvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMKCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCicnJwoKaW1wb3J0IG9zCmltcG9ydCB0cmFjZWJhY2sKCmZyb20gZmxhc2sgaW1wb3J0IEZsYXNrCjx8ZmltX2hvbGV8PgpAYXBwLnJvdXRlKCcvJykKZGVmIGdldCgpOgogIHRhcmdldCA9IG9zLmVudmlyb24uZ2V0KCdUQVJHRVQnKSBvciAnTk9UIFNQRUNJRklFRCcKICByZXR1cm4gJ0hlbGxvIFdvcmxkIGZyb20gUHl0aG9uOiAlcyFcbicgJSB0YXJnZXQKCkBhcHAucm91dGUoJy9lcnJvcicpCmRlZiBnZXRFcnJvcigpOgogIHRyeToKICAgIHByaW50KHVuZGVmaW5lZCkKICBleGNlcHQgRXhjZXB0aW9uOgogICAgd2l0aCBvcGVuKCcvdmFyL2xvZy9lcnJvci5sb2cnLCAnYScpIGFzIGY6CiAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1mKQogICAgdHJhY2ViYWNrLnByaW50X2V4YygpCiAgICByZXR1cm4gJ2V4Y2VwdGlvbiBzdGFjayB0cmFjZSBsb2dzIHdlcmUgc2VuZCB0byBzdGRlcnIgYW5kIC92YXIvbG9nL2Vycm9yLmxvZ1xuJwoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICBhcHAucnVuKGhvc3Q9JzEyNy4wLjAuMScsIHBvcnQ9ODA4MCwgZGVidWc9VHJ1ZSkKPHxmaW1fc3VmZml4fD4KCmFwcCA9IEZsYXNrKF9fbmFtZV9fKQoKCjx8ZmltX2VuZHw+"]
["116cad4fc3c1377a7900529650fee5927c2ac793-1","116cad4fc3c1377a7900529650fee5927c2ac793","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBwYW5kYXMgYXMgcGQKCmZyb20gam9ibGliIGltcG9ydCBkZWxheWVkCmZyb20gc2tsZWFybi5wcmVwcm9jZXNzaW5nIGltcG9ydCBub3JtYWxpemUKZnJvbSBqb2JsaWIgaW1wb3J0IFBhcmFsbGVsCgppbXBvcnQgc3BhbXMKCmZyb20gZmVhdHVyZSBpbXBvcnQgQzNEIGFzIEZlYXRIZWxwZXIKCiIiIiAKVGhpcyBpbnRlcmZhY2UgYWxsb3dzIHRvIHJldHJpZXZlIGFjdGlvbiBwcm9wb3NhbHMgdXNpbmcgYSBDbGFzcy1JbmRlcGVkZW50IApvciBDbGFzcy1JbmR1Y2VkIG1vZGVscyAtIENhYmEgZXQgYWwuIENWUFIgMjAxNi4KIiIiCgpkZWYgZ2VuZXJhdGVfY2FuZGlkYXRlX3Byb3Bvc2Fscyh2aWRlb19pbmZvLCBwcm9wb3NhbF9zaXplcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdF9zaXplPTE2LCBzdHJpZGVfaW50ZXJzZWN0aW9uPTAuMSk6CiAgICAiIiJSZXR1cm5zIGEgc2V0IG9mIGNhbmRpZGF0ZSBwcm9wb3NhbHMgZm9yIGEgZ2l2ZW4gdmlkZW8uCiAgICAKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHZpZGVvX2luZm8gOiBEYXRhRnJhbWUKICAgICAgICBEYXRhRnJhbWUgY29udGFpbmluZyB0aGUgJ3ZpZGVvLW5hbWUnIGFuZCAndmlkZW8tZnJhbWVzJy4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcHJvcG9zYWxfc2l6ZXMgOiAxZGFycmF5CiAgICAgICAgbnAgYXJyYXkgY29udGFpbmluZyBsaXN0IG9mIHByb3Bvc2FsIHNpemVzLgogICAgZmVhdF9zaXplIDogaW50LCBvcHRpb25hbAogICAgICAgIFNpemUgb2YgdGhlIHRlbXBvcmFsIGV4dGVuc2lvbiBvZiB0aGUgZmVhdHVyZXMuCjx8ZmltX2VuZHw+"]
["3a5ddb1c77d4f93e0a7e86512e0e2fd7f63c5782-2","3a5ddb1c77d4f93e0a7e86512e0e2fd7f63c5782","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uYXBwcyBpbXBvcnQgQXBwQ29uZmlnCjx8ZmltX2hvbGV8PgogICAgbmFtZSA9ICdpbnRlcm1lZGlhcnlfdjInCjx8ZmltX3N1ZmZpeHw+CgoKY2xhc3MgSW50ZXJtZWRpYXJ5VjJDb25maWcoQXBwQ29uZmlnKToKICAgIGRlZmF1bHRfYXV0b19maWVsZCA9ICdkamFuZ28uZGIubW9kZWxzLkJpZ0F1dG9GaWVsZCcKPHxmaW1fZW5kfD4="]
["fecec8ed7de9f09636babc2fe202324ee739dc45-3","fecec8ed7de9f09636babc2fe202324ee739dc45","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYi5zeW5kaWNhdGlvbi52aWV3cyBpbXBvcnQgRmVlZApmcm9tIGRqYW5nby5jb3JlLnVybHJlc29sdmVycyBpbXBvcnQgcmV2ZXJzZQpmcm9tIC5tb2RlbHMgaW1wb3J0IFBvc3QKCgpjbGFzcyBMYXRlc3RFbnRyaWVzRmVlZChGZWVkKToKICAgIHRpdGxlID0gIlRyYW5zdmVyYmlzIGJsb2ciCiAgICBsaW5rID0gIi8iCiAgICBkZXNjcmlwdGlvbiA9ICJUcmFuc3ZlcmJpcyB1cGRhdGVzIgoKICAgIGRlZiBpdGVtcyhzZWxmKToKICAgICAgICByZXR1cm4gUG9zdC5vYmplY3RzLmZpbHRlcihwdWJsaXNoZWRfZGF0ZV9faXNudWxsPUZhbHNlKS5vcmRlcl9ieSgnLXB1Ymxpc2hlZF9kYXRlJylbOjEwXQoKICAgIGRlZiBpdGVtX3RpdGxlKHNlbGYsIGl0ZW0pOgogICAgICAgIHJldHVybiBpdGVtLnRpdGxlCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBkZWYgaXRlbV9kZXNjcmlwdGlvbihzZWxmLCBpdGVtKToKICAgICAgICByZXR1cm4gaXRlbS50ZXh0Cgo8fGZpbV9lbmR8Pg=="]
["aaf829504f60faba1d07c4241647f0042b89c446-2","aaf829504f60faba1d07c4241647f0042b89c446","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKZnJvbSBncmFwaGVuZV9kamFuZ28gaW1wb3J0IERqYW5nb09iamVjdFR5cGUKaW1wb3J0IGdyYXBoZW5lCmZyb20gLm1vZGVscyBpbXBvcnQgUG9rZW1vbiwgVXNlcnMsIEFyZWFzLCBQb2tlYmFsbHMKCmNsYXNzIFVzZXJUeXBlKERqYW5nb09iamVjdFR5cGUpOgogICAgY2xhc3MgTWV0YToKICAgICAgICBtb2RlbCA9IFVzZXJzCiAgICAgICAgaW50ZXJmYWNlcyA9IChncmFwaGVuZS5yZWxheS5Ob2RlLCkKCmNsYXNzIFBva2Vtb25UeXBlKERqYW5nb09iamVjdFR5cGUpOgoKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgbW9kZWwgPSBQb2tlbW9uCiAgICAgICAgaW50ZXJmYWNlcyA9IChncmFwaGVuZS5yZWxheS5Ob2RlLCkKCmNsYXNzIFBva2ViYWxsVHlwZShEamFuZ29PYmplY3RUeXBlKToKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIG1vZGVsID0gUG9rZWJhbGxzCiAgICAgICAgaW50ZXJmYWNlcyA9IChncmFwaGVuZS5yZWxheS5Ob2RlLCkKCmNsYXNzIEFyZWFUeXBlKERqYW5nb09iamVjdFR5cGUpOgoKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgbW9kZWwgPSBBcmVhcwogICAgICAgIGludGVyZmFjZXMgPSAoZ3JhcGhlbmUucmVsYXkuTm9kZSwpCgpjbGFzcyBDcmVhdGVVc2VyKGdyYXBoZW5lLk11dGF0aW9uKToKICAgIHVzZXIgPSBncmFwaGVuZS5GaWVsZChVc2VyVHlwZSkKCiAgICBjbGFzcyBBcmd1bWVudHM6CiAgICAgICAgdXNlcm5hbWUgPSBncmFwaGVuZS5TdHJpbmcocmVxdWlyZWQ9VHJ1ZSkKICAgICAgICBwYXNzd29yZCA9IGdyYXBoZW5lLlN0cmluZyhyZXF1aXJlZD1UcnVlKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIG11dGF0ZShzZWxmLCBpbmZvLCB1c2VybmFtZSwgcGFzc3dvcmQpOgogICAgICAgIHVzZXIgPSBVc2VycygKICAgICAgICAgICAgdXNlcm5hbWU9dXNlcm5hbWUsCjx8ZmltX2VuZHw+"]
["0194ed6cc88a00b829ae01643c991e7750e828e5-1","0194ed6cc88a00b829ae01643c991e7750e828e5","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNvcHkKCicnJwo8fGZpbV9ob2xlfD4KJycnCgoKZGVmIG5lbGRlcl9tZWFkKGYsIHhfc3RhcnQsCiAgICAgICAgICAgICAgICBzdGVwPTAuMSwgbm9faW1wcm92ZV90aHI9MTBlLTYsCiAgICAgICAgICAgICAgICBub19pbXByb3ZfYnJlYWs9MTAsIG1heF9pdGVyPTAsCiAgICAgICAgICAgICAgICBhbHBoYT0xLiwgZ2FtbWE9Mi4sIHJobz0tMC41LCBzaWdtYT0wLjUsIHZlcmJvc2U9RmFsc2UpOgogICAgJycnCiAgICAgICAgQHBhcmFtIGYgKGZ1bmN0aW9uKTogZnVuY3Rpb24gdG8gb3B0aW1pemUsIG11c3QgcmV0dXJuIGEgc2NhbGFyIHNjb3JlCiAgICAgICAgICAgIGFuZCBvcGVyYXRlIG92ZXIgYSBudW1weSBhcnJheSBvZiB0aGUgc2FtZSBkaW1lbnNpb25zIGFzIHhfc3RhcnQKICAgICAgICBAcGFyYW0geF9zdGFydCAobnVtcHkgYXJyYXkpOiBpbml0aWFsIHBvc2l0aW9uCiAgICAgICAgQHBhcmFtIHN0ZXAgKGZsb2F0KTogbG9vay1hcm91bmQgcmFkaXVzIGluIGluaXRpYWwgc3RlcAogICAgICAgIEBub19pbXByb3ZfdGhyLCAgbm9faW1wcm92X2JyZWFrIChmbG9hdCwgaW50KTogYnJlYWsgYWZ0ZXIgbm9faW1wcm92X2JyZWFrIGl0ZXJhdGlvbnMgd2l0aAogICAgICAgICAgICBhbiBpbXByb3ZlbWVudCBsb3dlciB0aGFuIG5vX2ltcHJvdl90aHIKICAgICAgICBAbWF4X2l0ZXIgKGludCk6IGFsd2F5cyBicmVhayBhZnRlciB0aGlzIG51bWJlciBvZiBpdGVyYXRpb25zLgogICAgICAgICAgICBTZXQgaXQgdG8gMCB0byBsb29wIGluZGVmaW5pdGVseS4KICAgICAgICBAYWxwaGEsIGdhbW1hLCByaG8sIHNpZ21hIChmbG9hdHMpOiBwYXJhbWV0ZXJzIG9mIHRoZSBhbGdvcml0aG0KICAgICAgICAgICAgKHNlZSBXaWtpcGVkaWEgcGFnZSBmb3IgcmVmZXJlbmNlKQogICAgICAgIEB2ZXJib3NlIChib29sKTogdGFsayBtb3JlCgogICAgICAgIHJldHVybjogdHVwbGUgKGJlc3QgcGFyYW1ldGVyIGFycmF5LCBiZXN0IHNjb3JlKQogICAgJycnCgogICAgZnJvbSBudW1weSBpbXBvcnQgb25lc19saWtlLCBhc2FycmF5CiAgICAjIC4uLgogICAgaWYgaXNpbnN0YW5jZShhbHBoYSwgZmxvYXQpOgogICAgICAgIGFscGhhID0gYWxwaGEgKiBvbmVzX2xpa2UoeF9zdGFydCkKCiAgICBlbGlmIGlzaW5zdGFuY2UoYWxwaGEsIChsaXN0LCB0dXBsZSkpOgogICAgICAgIGFscGhhID0gYXNhcnJheShhbHBoYSkKICAgICMgLi4uCgogICAgIyAuLi4KICAgIGlmIGlzaW5zdGFuY2UoZ2FtbWEsIGZsb2F0KToKICAgICAgICBnYW1tYSA9IGdhbW1hICogb25lc19saWtlKHhfc3RhcnQpCgogICAgZWxpZiBpc2luc3RhbmNlKGdhbW1hLCAobGlzdCwgdHVwbGUpKToKICAgICAgICBnYW1tYSA9IGFzYXJyYXkoZ2FtbWEpCiAgICAjIC4uLgoKICAgICMgLi4uCiAgICBpZiBpc2luc3RhbmNlKHJobywgZmxvYXQpOgogICAgICAgIHJobyA9IHJobyAqIG9uZXNfbGlrZSh4X3N0YXJ0KQoKICAgIGVsaWYgaXNpbnN0YW5jZShyaG8sIChsaXN0LCB0dXBsZSkpOgogICAgICAgIHJobyA9IGFzYXJyYXkocmhvKQogICAgIyAuLi4KCiAgICAjIC4uLgogICAgaWYgaXNpbnN0YW5jZShzaWdtYSwgZmxvYXQpOgogICAgICAgIHNpZ21hID0gc2lnbWEgKiBvbmVzX2xpa2UoeF9zdGFydCkKCiAgICBlbGlmIGlzaW5zdGFuY2Uoc2lnbWEsIChsaXN0LCB0dXBsZSkpOgogICAgICAgIHNpZ21hID0gYXNhcnJheShzaWdtYSkKICAgICMgLi4uCgogICAgIyBpbml0CiAgICBkaW0gPSBsZW4oeF9zdGFydCkKICAgIHByZXZfYmVzdCA9IGYoeF9zdGFydCkKICAgIG5vX2ltcHJvdiA9IDAKICAgIHJlcyA9IFtbeF9zdGFydCwgcHJldl9iZXN0XV0KCiAgICBmb3IgaSBpbiByYW5nZShkaW0pOgogICAgICAgIHggPSBjb3B5LmNvcHkoeF9zdGFydCkKICAgICAgICB4W2ldID0geFtpXSArIHN0ZXAKICAgICAgICBzY29yZSA9IGYoeCkKICAgICAgICByZXMuYXBwZW5kKFt4LCBzY29yZV0pCgogICAgIyBzaW1wbGV4IGl0ZXIKICAgIGl0ZXJzID0gMAogICAgd2hpbGUgMToKICAgICAgICAjIG9yZGVyCiAgICAgICAgcmVzLnNvcnQoa2V5PWxhbWJkYSB4OiB4WzFdKQogICAgICAgIGJlc3QgPSByZXNbMF1bMV0KCiAgICAgICAgIyBicmVhayBhZnRlciBtYXhfaXRlcgogICAgICAgIGlmIG1heF9pdGVyIGFuZCBpdGVycyA+PSBtYXhfaXRlcjoKICAgICAgICAgICAgcmV0dXJuIHJlc1swXQogICAgICAgIGl0ZXJzICs9IDEKCiAgICAgICAgIyBicmVhayBhZnRlciBub19pbXByb3ZfYnJlYWsgaXRlcmF0aW9ucyB3aXRoIG5vIGltcHJvdmVtZW50CiAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgcHJpbnQoJy4uLmJlc3Qgc28gZmFyOicsIGJlc3QpCgogICAgICAgIGlmIGJlc3QgPCBwcmV2X2Jlc3QgLSBub19pbXByb3ZlX3RocjoKICAgICAgICAgICAgbm9faW1wcm92ID0gMAogICAgICAgICAgICBwcmV2X2Jlc3QgPSBiZXN0CiAgICAgICAgZWxzZToKICAgICAgICAgICAgbm9faW1wcm92ICs9IDEKCiAgICAgICAgaWYgbm9faW1wcm92ID49IG5vX2ltcHJvdl9icmVhazoKICAgICAgICAgICAgcmV0dXJuIHJlc1swXQoKICAgICAgICAjIGNlbnRyb2lkCiAgICAgICAgeDAgPSBbMC5dICogZGltCiAgICAgICAgZm9yIHR1cCBpbiByZXNbOi0xXToKICAgICAgICAgICAgZm9yIGksIGMgaW4gZW51bWVyYXRlKHR1cFswXSk6CiAgICAgICAgICAgICAgICB4MFtpXSArPSBjIC8gKGxlbihyZXMpLTEpCgogICAgICAgICMgcmVmbGVjdGlvbgogICAgICAgIHhyID0geDAgKyBhbHBoYSooeDAgLSByZXNbLTFdWzBdKQogICAgICAgIHJzY29yZSA9IGYoeHIpCiAgICAgICAgaWYgcmVzWzBdWzFdIDw9IHJzY29yZSA8IHJlc1stMl1bMV06CiAgICAgICAgICAgIGRlbCByZXNbLTFdCiAgICAgICAgICAgIHJlcy5hcHBlbmQoW3hyLCByc2NvcmVdKQogICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAjIGV4cGFuc2lvbgogICAgICAgIGlmIHJzY29yZSA8IHJlc1swXVsxXToKICAgICAgICAgICAgeGUgPSB4MCArIGdhbW1hKih4MCAtIHJlc1stMV1bMF0pCiAgICAgICAgICAgIGVzY29yZSA9IGYoeGUpCiAgICAgICAgICAgIGlmIGVzY29yZSA8IHJzY29yZToKICAgICAgICAgICAgICAgIGRlbCByZXNbLTFdCiAgICAgICAgICAgICAgICByZXMuYXBwZW5kKFt4ZSwgZXNjb3JlXSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBkZWwgcmVzWy0xXQogICAgICAgICAgICAgICAgcmVzLmFwcGVuZChbeHIsIHJzY29yZV0pCiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAjIGNvbnRyYWN0aW9uCiAgICAgICAgeGMgPSB4MCArIHJobyooeDAgLSByZXNbLTFdWzBdKQogICAgICAgIGNzY29yZSA9IGYoeGMpCiAgICAgICAgaWYgY3Njb3JlIDwgcmVzWy0xXVsxXToKICAgICAgICAgICAgZGVsIHJlc1stMV0KICAgICAgICAgICAgcmVzLmFwcGVuZChbeGMsIGNzY29yZV0pCiAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICMgcmVkdWN0aW9uCiAgICAgICAgeDEgPSByZXNbMF1bMF0KICAgICAgICBucmVzID0gW10KICAgICAgICBmb3IgdHVwIGluIHJlczoKICAgICAgICAgICAgcmVkeCA9IHgxICsgc2lnbWEqKHR1cFswXSAtIHgxKQogICAgICAgICAgICBzY29yZSA9IGYocmVkeCkKICAgICAgICAgICAgbnJlcy5hcHBlbmQoW3JlZHgsIHNjb3JlXSkKICAgICAgICByZXMgPSBucmVzCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICMgdGVzdAogICAgaW1wb3J0IG1hdGgKICAgIGltcG9ydCBudW1weSBhcyBucAoKICAgIGRlZiBmKHgpOgogICAgICAgIHJldHVybiBtYXRoLnNpbih4WzBdKSAqIG1hdGguY29zKHhbMV0pICogKDEuIC8gKGFicyh4WzJdKSArIDEpKQoKICAgIHByaW50KG5lbGRlcl9tZWFkKGYsIG5wLmFycmF5KFswLiwgMC4sIDAuXSkpKQo8fGZpbV9zdWZmaXh8PgogICAgUHVyZSBQeXRob24vTnVtcHkgaW1wbGVtZW50YXRpb24gb2YgdGhlIE5lbGRlci1NZWFkIGFsZ29yaXRobS4KICAgIFJlZmVyZW5jZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTmVsZGVyJUUyJTgwJTkzTWVhZF9tZXRob2QKPHxmaW1fZW5kfD4="]
["d1c199b5d7293ed9f85edaafe0fa7845b69a0452-4","d1c199b5d7293ed9f85edaafe0fa7845b69a0452","PHxmaW1fcHJlZml4fD4KCiMgICAgCQlBCQojICAgRQkJCQlCCiMgICAgCUQJCUMJCgojIHsKIyAgICAgJ0EnOiBbJ0InLCAnRSddLAojICAgICAnQic6IFsnQScsICdDJ10sCiMgICAgICdDJzogWydCJywgJ0QnXSwKIyAgICAgJ0QnOiBbJ0MnLCAnRSddLAojICAgICAnRSc6IFsnRCcsICdBJ10KIyB9CgojIHsKIyAgICAgJ0EnOiBbXQojIH0KCmNsYXNzIEdyYXBoOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYuYWRqX2xpc3QgPSB7fSAjIENyZWF0aW5nIGFuIGVtcHR5IGRpY3Rpb25hcnkuCgogICAgZGVmIHByaW50X2dyYXBoKHNlbGYpOgogICAgICAgIGZvciB2ZXJ0ZXggaW4gc2VsZi5hZGpfbGlzdDoKICAgICAgICAgICAgcHJpbnQodmVydGV4LCAnOicsIHNlbGYuYWRqX2xpc3RbdmVydGV4XSkKCiAgICBkZWYgYWRkX3ZlcnRleChzZWxmLCB2ZXJ0ZXgpOgogICAgICAgICMgT25seSBhZGQgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0IChjaGVja2luZyB0aGUga2V5cykKICAgICAgICBpZiB2ZXJ0ZXggbm90IGluIHNlbGYuYWRqX2xpc3Qua2V5cygpOgogICAgICAgICAgICBzZWxmLmFkal9saXN0W3ZlcnRleF0gPSBbXQogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIHJldHVybiBGYWxzZQogICAgCiAgICBkZWYgYWRkX2VkZ2Uoc2VsZiwgdjEsIHYyKToKCiAgICAgICAgIyBIbS4uLiBFcnJvciBjaGVja2luZyBmaXJzdCAtLSBpZiBib3RoIGV4aXN0cwogICAgICAgICMgKHJldHVybnMgdHJ1ZSBpbiB0aGUgaWYgc3RhdGVtZW50KQogICAgICAgIGlmIHYxIGluIHNlbGYuYWRqX2xpc3Qua2V5cygpIGFuZCB2MiBpbiBzZWxmLmFkal9saXN0LmtleXMoKToKCiAgICAgICAgICAgIHNlbGYuYWRqX2xpc3RbdjFdLmFwcGVuZCh2MikKICAgICAgICAgICAgc2VsZi5hZGpfbGlzdFt2Ml0uYXBwZW5kKHYxKQogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIHJldHVybiBGYWxzZQogICAgCiAgICBkZWYgcmVtb3ZlX2VkZ2Uoc2VsZiwgdjEsIHYyKToKCiAgICAgICAgIyBPbmUgcHJvYmxlbSAtLSBUcnlpbmcgdG8gcmVtb3ZlIGFuIGVkZ2UgdGhhdCBkb2Vzbid0IGV4aXN0CiAgICAgICAgIyBpbiB0aGUgYWRqYWNlbmN5IGxpc3QuCgogICAgICAgIGlmIHYxIGluIHNlbGYuYWRqX2xpc3Qua2V5cygpIGFuZCB2MiBpbiBzZWxmLmFkal9saXN0LmtleXMoKToKICAgICAgICAgICAgdHJ5OiAjIGRldGVjdHMgZXJyb3JzIGlmIGFueS4KICAgICAgICAgICAgICAgIHNlbGYuYWRqX2xpc3RbdjFdLnJlbW92ZSh2MikKICAgICAgICAgICAgICAgIHNlbGYuYWRqX2xpc3RbdjJdLnJlbW92ZSh2MSkKICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgcGFzcyAjIGlnbm9yaW5nIHRoZSBlcnJvciBhbmQgbW92ZSBvbgogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIHJldHVybiBGYWxzZQoKICAgICMgRWZmaWNpZW5jeTogU28gd2hlbiByZW1vdmluZyBhIHZlcnRleCwgZmlyc3QsIHJlbW92ZSBhbGwKICAgICMgZWRnZXMgYmV0d2VlbiBpdCBhbmQgb3RoZXIgdmVydGljZXMuIFRoZW4sIHlvdSBjYW4gcmVtb3ZlIGl0LgogICAgZGVmIHJlbW92ZV92ZXJ0ZXgoc2VsZiwgdmVydGV4KToKICAgICAgICAKICAgICAgICAjIEZpcnN0LCBjaGVja2luZyBpZiB0aGUgdmVydGV4IGV4aXN0cyBpbiB0aGUga2V5czoKICAgICAgICBpZiB2ZXJ0ZXggaW4gc2VsZi5hZGpfbGlzdC5rZXlzKCk6CiAgICAgICAgICAgICMgVGhlbiwgbG9vcGluZyBiZXR3ZWVuIHRoZSB2ZXJ0aWNlcyBjb25uZWN0ZWQKICAgICAgICAgICAgIyB0byB0aGUgdmVydGV4IHdlIHdpc2ggdG8gcmVtb3ZlOgogICAgICAgICAgICBmb3Igb3RoZXJfdmVydGV4IGluIHNlbGYuYWRqX2xpc3RbdmVydGV4XToKICAgICAgICAgICAgICAgICMgUmVtb3ZlIHRoZSB2ZXJ0ZXggZnJvbSB0aGUgb3RoZXIgdmVydGljZXMKICAgICAgICAgICAgICAgICMgKGluIG9yZGVyIHRvIHJlbW92ZSBlZGdlcyB3aXRoIGl0KS4KICAgICAgICAgICAgICAgIHNlbGYuYWRqX2xpc3Rbb3RoZXJfdmVydGV4XS5yZW1vdmUodmVydGV4KQogICAgICAgICAgICBkZWwgc2VsZi5hZGpfbGlzdFt2ZXJ0ZXhdCiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAKICAgICAgICByZXR1cm4gRmFsc2UgIyBJZiB0aGUgdmVydGV4IGRvZXNuJ3QgZXhpc3QuCiAgICAKbXlfZ3JhcGggPSBHcmFwaCgpCgojIG15X2dyYXBoLmFkZF92ZXJ0ZXgoJ0EnKQojIG15X2dyYXBoLnByaW50X2dyYXBoKCkgIyBBIDogW10KCiMgMTogYWRkIGVkZ2UKCiMgbXlfZ3JhcGguYWRkX3ZlcnRleCgxKQojIG15X2dyYXBoLmFkZF92ZXJ0ZXgoMikKCiMgbXlfZ3JhcGguYWRkX2VkZ2UoMSwgMikKIyBteV9ncmFwaC5wcmludF9ncmFwaCgpCgojIDI6IHJlbW92ZSBlZGdlCgojIG15X2dyYXBoLmFkZF92ZXJ0ZXgoJ0EnKQojIG15X2dyYXBoLmFkZF92ZXJ0ZXgoJ0InKQojIG15X2dyYXBoLmFkZF92ZXJ0ZXgoJ0MnKQojIG15X2dyYXBoLmFkZF92ZXJ0ZXgoJ0QnKQoKPHxmaW1faG9sZXw+CiMgbXlfZ3JhcGgucmVtb3ZlX2VkZ2UoJ0EnLCAnRCcpCgojIG15X2dyYXBoLnByaW50X2dyYXBoKCkKCiMgMzogUmVtb3ZlIHZlcnRleAoKbXlfZ3JhcGguYWRkX3ZlcnRleCgnQScpCm15X2dyYXBoLmFkZF92ZXJ0ZXgoJ0InKQpteV9ncmFwaC5hZGRfdmVydGV4KCdDJykKbXlfZ3JhcGguYWRkX3ZlcnRleCgnRCcpCgpteV9ncmFwaC5hZGRfZWRnZSgnQScsICdCJykKbXlfZ3JhcGguYWRkX2VkZ2UoJ0EnLCAnQycpCm15X2dyYXBoLmFkZF9lZGdlKCdBJywgJ0QnKQpteV9ncmFwaC5hZGRfZWRnZSgnQicsICdEJykKbXlfZ3JhcGguYWRkX2VkZ2UoJ0MnLCAnRCcpCgojIG15X2dyYXBoLnByaW50X2dyYXBoKCkKCm15X2dyYXBoLnJlbW92ZV92ZXJ0ZXgoJ0QnKQoKbXlfZ3JhcGgucHJpbnRfZ3JhcGgoKQo8fGZpbV9zdWZmaXh8PgojIG15X2dyYXBoLmFkZF9lZGdlKCdBJywgJ0InKQojIG15X2dyYXBoLmFkZF9lZGdlKCdCJywgJ0MnKQojIG15X2dyYXBoLmFkZF9lZGdlKCdDJywgJ0EnKQoKPHxmaW1fZW5kfD4="]
["a3620069c8cb4d961a3321b8dac679d692ce24bb-2","a3620069c8cb4d961a3321b8dac679d692ce24bb","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KYSA9IDEKYiA9IDIKcHJpbnQoYSArIGIpCjx8ZmltX2VuZHw+"]
["d1896247fd9ffe32fb2c2e7d079dec590955f99d-2","d1896247fd9ffe32fb2c2e7d079dec590955f99d","PHxmaW1fcHJlZml4fD4KIyBlbmNvZGluZzogdXRmLTgKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbiwgcHJpbnRfZnVuY3Rpb24sIHVuaWNvZGVfbGl0ZXJhbHMKaW1wb3J0IG9iamMsIHRyYWNlYmFjawpmcm9tIEdseXBoc0FwcCBpbXBvcnQgKgpmcm9tIEdseXBoc0FwcC5wbHVnaW5zIGltcG9ydCAqCmZyb20gRm91bmRhdGlvbiBpbXBvcnQgTlNNZW51SXRlbQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCiMKIwlSZXBvcnRlciBQbHVnaW4KIwojCVJlYWQgdGhlIGRvY3M6CiMJaHR0cHM6Ly9naXRodWIuY29tL3NjaHJpZnRnZXN0YWx0L0dseXBoc1NESy90cmVlL21hc3Rlci9QeXRob24lMjBUZW1wbGF0ZXMvUmVwb3J0ZXIKIwojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoKCgpjbGFzcyBzaG93VHJ1ZVR5cGVDdXJ2ZXMoUmVwb3J0ZXJQbHVnaW4pOgoKCUBvYmpjLnB5dGhvbl9tZXRob2QKCWRlZiBzZXR0aW5ncyhzZWxmKToKCQlzZWxmLm1lbnVOYW1lID0gR2x5cGhzLmxvY2FsaXplKHsKCQkJJ2VuJzogdSdUcnVlVHlwZSBDdXJ2ZXMnLAoJCQkncHQnOiB1J0N1cnZhcyBUcnVlVHlwZScsCgkJfSkKCQlzZWxmLnRoaXNNZW51VGl0bGUgPSB7Im5hbWUiOiB1IiVzOiIgJSBzZWxmLm1lbnVOYW1lLCAiYWN0aW9uIjogTm9uZSB9CgkJc2VsZi5tYXN0ZXJJZHMgPSBbXQoJCU5TVXNlckRlZmF1bHRzLnN0YW5kYXJkVXNlckRlZmF1bHRzKCkucmVnaXN0ZXJEZWZhdWx0c18oewoJCQkJImNvbS5oYXJib3J0eXBlLnNob3dUcnVlVHlwZUN1cnZlcy5kcmF3T3V0bGluZXMiOiAxLAoJCQkJImNvbS5oYXJib3J0eXBlLnNob3dUcnVlVHlwZUN1cnZlcy51c2VWYXJpYWJsZUNvbnZlcnNpb24iOiAwLAoJCQl9KQoJCXNlbGYubGFzdE9wZXJhdGlvbiA9IE5vbmUKCQlzZWxmLmN1cnJlbnRMYXllciA9IE5vbmUKCQlzZWxmLmN1cnJlbnRHbHlwaCA9IE5vbmUKCgoJQG9iamMucHl0aG9uX21ldGhvZAoJZGVmIGNvbmRpdGlvbmFsQ29udGV4dE1lbnVzKHNlbGYpOgoJCXJldHVybiBbCgkJCXsKCQkJCSduYW1lJzogR2x5cGhzLmxvY2FsaXplKHsKCQkJCQknZW4nOiB1IlNob3cgVHJ1ZVR5cGUgQ3VydmVzOiIsCgkJCQkJJ3B0JzogdSJFeGliaXIgQ3VydmFzIFRydWVUeXBlOiIsCgkJCQkJfSksIAoJCQkJJ2FjdGlvbic6IE5vbmUsCgkJCX0sCgkJCXsKCQkJCSduYW1lJzogR2x5cGhzLmxvY2FsaXplKHsKCQkJCQknZW4nOiB1IkRyYXcgb3V0bGluZXMiLCAKCQkJCQkncHQnOiB1IkRlc2VuaGFyIGNvbnRvcm5vcyIsIAoJCQkJCX0pLCAKCQkJCSdhY3Rpb24nOiBzZWxmLnRvZ2dsZURyYXdPdXRsaW5lc18sCgkJCQknc3RhdGUnOiBHbHlwaHMuZGVmYXVsdHNbImNvbS5oYXJib3J0eXBlLnNob3dUcnVlVHlwZUN1cnZlcy5kcmF3T3V0bGluZXMiXSwKCQkJfSwKCQkJewoJCQkJJ25hbWUnOiBHbHlwaHMubG9jYWxpemUoewoJCQkJCSdlbic6IHUiVXNlIHZhcmlhYmxlIGZvbnQgY29udmVyc2lvbiIsIAoJCQkJCSdwdCc6IHUiVXNhciBjb252ZXJzw6NvIHBhcmEgZm9udGVzIHZhcmnDoXZlaXMiLCAKCQkJCQl9KSwgCgkJCQknYWN0aW9uJzogc2VsZi50b2dnbGVWYXJpYWJsZUNvbnZlcnNpb25fLAoJCQkJJ3N0YXRlJzogR2x5cGhzLmRlZmF1bHRzWyJjb20uaGFyYm9ydHlwZS5zaG93VHJ1ZVR5cGVDdXJ2ZXMudXNlVmFyaWFibGVDb252ZXJzaW9uIl0sCgkJCX0sCgkJXQoKCUBvYmpjLnB5dGhvbl9tZXRob2QKCWRlZiBhZGRNZW51SXRlbXNGb3JFdmVudF90b01lbnVfKHNlbGYsIGV2ZW50LCBjb250ZXh0TWVudSk6CgkJJycnCgkJVGhlIGV2ZW50IGNhbiB0ZWxsIHlvdSB3aGVyZSB0aGUgdXNlciBoYWQgY2xpY2tlZC4KCQknJycKCQl0cnk6CgkJCQoJCQlpZiBzZWxmLmdlbmVyYWxDb250ZXh0TWVudXM6CgkJCQlzZXRVcE1lbnVIZWxwZXIoY29udGV4dE1lbnUsIHNlbGYuZ2VuZXJhbENvbnRleHRNZW51cywgc2VsZikKCQkJCgkJCW5ld1NlcGFyYXRvciA9IE5TTWVudUl0ZW0uc2VwYXJhdG9ySXRlbSgpCgkJCWNvbnRleHRNZW51LmFkZEl0ZW1fKG5ld1NlcGFyYXRvcikKCQkJCgkJCWNvbnRleHRNZW51cyA9IHNlbGYuY29uZGl0aW9uYWxDb250ZXh0TWVudXMoKQoJCQlpZiBjb250ZXh0TWVudXM6CgkJCQlzZXRVcE1lbnVIZWxwZXIoY29udGV4dE1lbnUsIGNvbnRleHRNZW51cywgc2VsZikKCQkKCQlleGNlcHQgRXhjZXB0aW9uIGFzIGU6CgkJCU5TTG9nKHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCgoKCWRlZiB0b2dnbGVWYXJpYWJsZUNvbnZlcnNpb25fKHNlbGYsIHNlbmRlcik6CgkJc2VsZi50b2dnbGVTZXR0aW5nXygidXNlVmFyaWFibGVDb252ZXJzaW9uIikKCgkKCWRlZiB0b2dnbGVEcmF3T3V0bGluZXNfKHNlbGYsIHNlbmRlcik6CgkJc2VsZi50b2dnbGVTZXR0aW5nXygiZHJhd091dGxpbmVzIikKCgkKCUBvYmpjLnB5dGhvbl9tZXRob2QKCWRlZiB0b2dnbGVTZXR0aW5nXyhzZWxmLCBwcmVmTmFtZSk6CgkJcHJlZiA9ICJjb20uaGFyYm9ydHlwZS5zaG93VHJ1ZVR5cGVDdXJ2ZXMuJXMiICUgKHByZWZOYW1lKQoJCW9sZFNldHRpbmcgPSBib29sKEdseXBocy5kZWZhdWx0c1twcmVmXSkKCQlHbHlwaHMuZGVmYXVsdHNbcHJlZl0gPSBpbnQobm90IG9sZFNldHRpbmcpCgkJc2VsZi5yZWZyZXNoVmlldygpCgkJc2VsZi5sYXN0T3BlcmF0aW9uID0gTm9uZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKCUBvYmpjLnB5dGhvbl9tZXRob2QKCWRlZiByZWZyZXNoVmlldyhzZWxmKToKPHxmaW1fZW5kfD4="]
["a320cdd8182de9d657faa0676999708535750604-1","a320cdd8182de9d657faa0676999708535750604","PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZQpwZXJmaWwgPSB7fQpwZXJmaWxbJ25vbWUnXSA9IHN0cihpbnB1dCgnTm9tZTogJykpLnN0cmlwKCkuY2FwaXRhbGl6ZSgpCmFubyA9IGludChpbnB1dCgnQW5vIGRlIE5hc2NpbWVudG86ICcpKQpwZXJmaWxbJ2lkYWRlJ10gPSBkYXRlLnRvZGF5KCkueWVhciAtIGFubwpwZXJmaWxbJ2N0cHMnXSA9IGludChpbnB1dCgnQ2FydGVpcmEgZGUgVHJhYmFsaG86ICgwIG7Do28gdGVtKSAnKSkKaWYgcGVyZmlsWydjdHBzJ10gPT0gMDoKICAgIHByaW50KCctPScqMzApCiAgICBwcmludChwZXJmaWwpCiAgICBmb3IgaywgdiBpbiBwZXJmaWwuaXRlbXMoKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHByaW50KGYne2t9IHRlbSBvIHZhbG9yIGRlIHt2fScpCjx8ZmltX2VuZHw+"]
["ee2f71cd513f840fc44a8f5e0386a3635f1140b8-2","ee2f71cd513f840fc44a8f5e0386a3635f1140b8","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBleHBlY3QKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBvcwppbXBvcnQgb3MucGF0aAoKZGVmIG5vdGlmeShtc2cpOgogICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5leHBhbmR1c2VyKCJ+L2FyYW50Z2JvdCIpKTogI0FyYW46IFRoaXMgc2VuZCBub3RpZmljYXRpb25zIHRvIG15IHBob25lLCBpdCB3aWxsIG5vdCB3b3JrIGZvciBvdGhlciBwZW9wbGUKICAgICAgICBpZiBub3QgYiJsYXB0b3AiIGluIHBleHBlY3QucnVuKCdob3N0bmFtZScpOgogICAgICAgICAgICBwZXhwZWN0LnJ1bignYmFzaCAtYyAifi9hcmFudGdib3QvdGdfc2VuZG1zZy5weSBbYGhvc3RuYW1lYF0gJyArIG1zZyArICciJykKCgpkZWYgcHJvcHMoeCwgZSk6CiAgICBwID0geC5jb3VudChlKQogICAgbiA9IGxlbih4KQogICAgcmV0dXJuICIlMi4yZiIgJSAoZmxvYXQocCkgLyBmbG9hdChuKSkKPHxmaW1faG9sZXw+CiAgICByZXR1cm4gZV94IC8gZV94LnN1bShheGlzPTEpCjx8ZmltX3N1ZmZpeHw+CgoKZGVmIHNvZnRtYXgoeCk6CiAgICBlX3ggPSBucC5leHAoeCAtIG5wLm1heCh4KSkKPHxmaW1fZW5kfD4="]
["ae6ca5976b9185aea57dc57006934ed84f53a79e-4","ae6ca5976b9185aea57dc57006934ed84f53a79e","PHxmaW1fcHJlZml4fD4KIiIiVXRpbGl0eSBsaWJyYXJ5IGZvciBIVENvbmRvci1DRSB0b29scyIiIgoKaW1wb3J0IGVycm5vCmltcG9ydCBvcwppbXBvcnQgdGVtcGZpbGUKaW1wb3J0IHRleHR3cmFwCmltcG9ydCB0aW1lCmZyb20gc3VicHJvY2VzcyBpbXBvcnQgUG9wZW4sIFBJUEUKCkhFTFBfRU1BSUwgPSAnaHRjb25kb3ItdXNlcnNAY3Mud2lzYy5lZHUnCgojIEV4Y2x1ZGluZyBzdWJtaXQgZmlsZSBzbyB0aGUgcmVzcGVjdGl2ZSBzY3JpcHRzCiMgY2FuIGdlbmVyYXRlIGl0IGFzIHRoZXkgc2VlIGZpdApKT0JfRklMRVMgPSBbJ3N0ZG91dCcsICdzdGRlcnInLCAnbG9nJ10KCmNsYXNzIENvbmRvclJ1bkV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgIiIiRXhjZXB0aW9uIGZvciBoYW5kbGluZyBlcnJvcnMgZnJvbSBIVENvbmRvciIiIgogICAgcGFzcwoKY2xhc3MgQ29uZG9yVXNlckV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgIiIiRXhjZXB0aW9uIGZvciBoYW5kbGluZyB1c2VyIGVycm9ycyIiIgogICAgcGFzcwoKZGVmIHByaW50X2Zvcm1hdHRlZF9tc2cobXNnKToKICAgICIiIkxpbWl0IG91dHB1dCBtZXNzYWdlcyB0byA4MCBjaGFyYWN0ZXJzIGluIHdpZHRoIiIiCiAgICBwcmludCgiKiIqODApCiAgICB3cmFwcGVyID0gdGV4dHdyYXAuVGV4dFdyYXBwZXIod2lkdGg9ODApCiAgICBmb3IgbGluZSBpbiBtc2cuc3BsaXQoJ1xuJyk6CiAgICAgICAgcHJpbnQod3JhcHBlci5maWxsKGxpbmUpKQogICAgcHJpbnQoIioiKjgwKQoKZGVmIHByaW50X3RpbWVzdGFtcGVkX21zZyhtc2cpOgogICAgIiIiUHJlcGVuZCB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIHRvIGEgbWVzc2FnZSIiIgogICAgcHJpbnRfZm9ybWF0dGVkX21zZygiJXMgJXMiICUgKHRpbWUuc3RyZnRpbWUoJyVGICVUJyksIG1zZykpCgpkZWYgcnVuX2NvbW1hbmQoY29tbWFuZCk6CiAgICAiIiJSdW4gYSBjb21tYW5kIGFuZCByZXR1cm4gaXRzIHJldHVybiBjb2RlLCBzdGRvdXQsIGFuZCBzdGRlcnIiIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcCA9IFBvcGVuKGNvbW1hbmQsIHN0ZG91dD1QSVBFLCBzdGRlcnI9UElQRSkKICAgIHN0ZG91dCwgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCiAgICByZXR1cm4gcC5yZXR1cm5jb2RlLCB0b19zdHIoc3Rkb3V0KSwgdG9fc3RyKHN0ZGVycikKCjx8ZmltX2VuZHw+"]
["a331a806b3b0866f67658a47e012e14bcecbfef4-2","a331a806b3b0866f67658a47e012e14bcecbfef4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gdG9yY2gub3B0aW0gaW1wb3J0IGxyX3NjaGVkdWxlcgoKd2FybV9yZXN0YXJ0X2Vwb2NocyA9IFswLCAxMCwgMzAsIDcwLCAxNTAsIDMxMF0KCmRlZiBfY29zaW5lX2FubmVhbGluZyhzdGVwLCBscl9tYXgsIGxyX21pbik6CiAgICBmb3IgaSwgZXBvY2ggaW4gZW51bWVyYXRlKHdhcm1fcmVzdGFydF9lcG9jaHMpOgogICAgICAgIGlmIHN0ZXAgPj0gZXBvY2g6CiAgICAgICAgICAgIHVwZGF0ZV9jeWNsZV9sZW4gPSB3YXJtX3Jlc3RhcnRfZXBvY2hzW2krMV0gLSB3YXJtX3Jlc3RhcnRfZXBvY2hzW2ktMV0KICAgICAgICAgICAgc3RlcCAtPSB3YXJtX3Jlc3RhcnRfZXBvY2hzW2ldCiAgICAgICAgICAgIGJyZWFrCgogICAgbmV3X2xyID0gbHJfbWluICsgKGxyX21heCAtIGxyX21pbikgKiAwLjUgKiAoCiAgICAgICAgICAgICAxICsgbnAuY29zKHN0ZXAgLyB1cGRhdGVfY3ljbGVfbGVuICogbnAucGkpKQogICAgcmV0dXJuIG5ld19scgoKCmRlZiBjb3NpbmVfYW5uZWFsaW5nX3NjaGVkdWxlcihvcHRpbWl6ZXIsIGxyKToKICAgIHNjaGVkdWxlciA9IGxyX3NjaGVkdWxlci5MYW1iZGFMUigKICAgICAgICBvcHRpbWl6ZXIsCiAgICAgICAgbHJfbGFtYmRhPWxhbWJkYSBzdGVwOiBfY29zaW5lX2FubmVhbGluZygKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBzdGVwPXN0ZXAsCiAgICAgICAgICAgIGxyX21heD1sciwgICMgc2luY2UgbHJfbGFtYmRhIGNvbXB1dGVzIG11bHRpcGxpY2F0aXZlIGZhY3RvcgogICAgICAgICAgICBscl9taW49MC4wMDEpKQoKPHxmaW1fZW5kfD4="]
["c9f01030cbe04c2720244fb600068e2bb2b4e666-1","c9f01030cbe04c2720244fb600068e2bb2b4e666","PHxmaW1fcHJlZml4fD4KIwojIENvcHlyaWdodCAyMDE1IFJlZCBIYXQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQojIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluCiMgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKIyBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKIyBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwojIHVuZGVyIHRoZSBMaWNlbnNlLgoKIiIiRml4dHVyZXMgdXNlZCBkdXJpbmcgR2FiYmktYmFzZWQgdGVzdCBydW5zLiIiIgoKaW1wb3J0IG9zCgpmcm9tIGdhYmJpIGltcG9ydCBmaXh0dXJlCmltcG9ydCBtb2NrCmZyb20gb3Nsb19jb25maWcgaW1wb3J0IGNmZwpmcm9tIG9zbG9fY29uZmlnIGltcG9ydCBmaXh0dXJlIGFzIGZpeHR1cmVfY29uZmlnCmZyb20gb3Nsb19wb2xpY3kgaW1wb3J0IG9wdHMKZnJvbSBvc2xvX3V0aWxzIGltcG9ydCB1dWlkdXRpbHMKZnJvbSBzaXgubW92ZXMudXJsbGliIGltcG9ydCBwYXJzZSBhcyB1cmxwYXJzZQppbXBvcnQgc3FsYWxjaGVteV91dGlscwoKZnJvbSBhb2RoLmFwaSBpbXBvcnQgYXBwCmZyb20gYW9kaCBpbXBvcnQgc2VydmljZQpmcm9tIGFvZGggaW1wb3J0IHN0b3JhZ2UKCgojIE5PVEUoY2hkZW50KTogSGFjayB0byByZXN0b3JlIHNlbWJsYW5jZSBvZiBnbG9iYWwgY29uZmlndXJhdGlvbiB0bwojIHBhc3MgdG8gdGhlIFdTR0kgYXBwIHVzZWQgcGVyIHRlc3Qgc3VpdGUuIExPQURfQVBQX0tXQVJHUyBhcmUgdGhlIG9sc28KIyBjb25maWd1cmF0aW9uLCBhbmQgdGhlIHBlY2FuIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gb2YKIyB3aGljaCB0aGUgY3JpdGljYWwgcGFydCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBpbmRleGVyLgpMT0FEX0FQUF9LV0FSR1MgPSBOb25lCgoKZGVmIHNldHVwX2FwcCgpOgogICAgZ2xvYmFsIExPQURfQVBQX0tXQVJHUwogICAgcmV0dXJuIGFwcC5sb2FkX2FwcCgqKkxPQURfQVBQX0tXQVJHUykKCgpjbGFzcyBDb25maWdGaXh0dXJlKGZpeHR1cmUuR2FiYmlGaXh0dXJlKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgIiIiRXN0YWJsaXNoIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGZvciBhIHRlc3QgcnVuLiIiIgoKICAgIGRlZiBzdGFydF9maXh0dXJlKHNlbGYpOgogICAgICAgICIiIlNldCB1cCBjb25maWcuIiIiCjx8ZmltX2VuZHw+"]
["c972d473f171757aabe4e082268ca2c189508383-3","c972d473f171757aabe4e082268ca2c189508383","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgcmVxdWVzdHMKZnJvbSAuIGltcG9ydCBBUElfVVJMLCBEaWZmLCBUcmFuc2FjdGlvbiwgWmVuTW9uZXlFeGNlcHRpb24KCgpjbGFzcyBSZXF1ZXN0KG9iamVjdCk6CiAgICAnJycKICAgIFRoZSBtYWluIGNsYXNzIHRvIGNvbW11bmljYXRlIHdpdGggWmVuTW9uZXkgQVBJCiAgICBTZWUgdGhlIG1hbnVhbCBvbgogICAgaHR0cHM6Ly9naXRodWIuY29tL3plbm1vbmV5L1plblBsdWdpbnMvd2lraS9aZW5Nb25leS1BUEkjcHJpbmNpcGxlcwogICAgJycnCgogICAgdXJpX2RpZmYgPSBBUElfVVJMICsgJy92OC9kaWZmLycKICAgIHVyaV9zdWdnZXN0ID0gQVBJX1VSTCArICcvdjgvc3VnZ2VzdC8nCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHRva2VuOiBzdHIpOgogICAgICAgIHNlbGYucyA9IHJlcXVlc3RzLlNlc3Npb24oKQogICAgICAgIHNlbGYucy5oZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSAnQmVhcmVyIHt9Jy5mb3JtYXQodG9rZW4pCiAgICAgICAgc2VsZi5zLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nCgogICAgZGVmIGRpZmYoc2VsZiwgZGlmZjogRGlmZiwgZGVidWc9RmFsc2UpIC0+IERpZmY6CiAgICAgICAgJycnCiAgICAgICAgQWNjZXB0IHRoZSBEaWZmIG9iamVjdCBhbmQgcmV0dXJucyBEaWZmIG9iamVjdAogICAgICAgICcnJwogICAgICAgIHJlc3BvbnNlID0gc2VsZi5fX3Bvc3Qoc2VsZi51cmlfZGlmZiwganNvbj1EaWZmLnRvX2RpY3QoZGlmZikpCiAgICAgICAgaWYgZGVidWc6CiAgICAgICAgICAgIHNlbGYuX3BsYWluX2RpZmYgPSByZXNwb25zZS5qc29uKCkKCiAgICAgICAgcmV0dXJuIERpZmYoKipyZXNwb25zZS5qc29uKCkpCgogICAgZGVmIHN1Z2dlc3Qoc2VsZiwgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSAtPiBUcmFuc2FjdGlvbjoKICAgICAgICAnJycKICAgICAgICBBY2NlcHQgb25lIG9yIFplbk9iamVjdHNMaXN0IG9mIFRyYW5zYWN0aW9ucwogICAgICAgIHJldHVybnMgdGhlIHNhbWUgZGF0YSB3aXRoIHN1Z2dlc3Rpb25zCiAgICAgICAgJycnCiAgICAgICAgcmVzcG9uc2UgPSBzZWxmLl9fcG9zdChzZWxmLnVyaV9zdWdnZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbj17J3RyYW5zYWN0aW9uJzogdHJhbnNhY3Rpb24udG9fZGljdCgpfSkKICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpCgogICAgZGVmIF9fcG9zdChzZWxmLCB1cmk6IHN0ciwgKiprd2FyZ3MpOgo8fGZpbV9ob2xlfD4KICAgICAgICBpZiBub3QgcmVzcG9uc2Uub2s6CiAgICAgICAgICAgIHJhaXNlIFplbk1vbmV5RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1BPU1QgcmVxdWVzdCB0byB7fSB3YXNuXCd0IHN1Y2Nlc3NmdWwsIGNvZGU9e30nCiAgICAgICAgICAgICAgICAuZm9ybWF0KHVyaSwgcmVzcG9uc2Uuc3RhdHVzX2NvZGUpLAogICAgICAgICAgICAgICAgdXJpPXVyaSwgcmVzcG9uc2U9cmVzcG9uc2UKICAgICAgICAgICAgKQogICAgICAgIHJldHVybiByZXNwb25zZQo8fGZpbV9zdWZmaXh8PgogICAgICAgICcnJwogICAgICAgIFdyYXBwZXIgZm9yIHJlcXVlc3QucG9zdCwgd2hpY2ggcmFpc2VzIGV4Y2VwdGlvbiBvbiBub24gb2sgcmVzdWx0cwogICAgICAgICcnJwogICAgICAgIHJlc3BvbnNlID0gc2VsZi5zLnBvc3QodXJpLCAqKmt3YXJncykKPHxmaW1fZW5kfD4="]
["88bda458031f8e0d4bcd04e9f3f01f65b4f9570b-5","88bda458031f8e0d4bcd04e9f3f01f65b4f9570b","PHxmaW1fcHJlZml4fD4KZnJvbSBza2xlYXJuLmRhdGFzZXRzLnNhbXBsZXNfZ2VuZXJhdG9yIGltcG9ydCBtYWtlX2Jsb2JzLCBtYWtlX2NsYXNzaWZpY2F0aW9uCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgY29kZWNzCmltcG9ydCBwaWNrbGUKZnJvbSBza2xlYXJuLmNsdXN0ZXIgaW1wb3J0IE1lYW5TaGlmdCwgZXN0aW1hdGVfYmFuZHdpZHRoCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IHJhbmRvbQoKY2xhc3MgTWVhblNoaWZ0QW5hbW9seSgpOgoKCglkZWYgX19pbml0X18oc2VsZiwgVywgdGhyZXMpOgoJCXNlbGYuc2FtcGxlID0gW10KCQlzZWxmLlcgPSBXCgkJc2VsZi5zID0gMAoJCXNlbGYudGhyZXMgPSB0aHJlcwoKCgoJZGVmIHJlc2Vydm9pcl9zYW1wbGUoc2VsZiwgbmV3X3BvaW50KToKCQlpZihsZW4oc2VsZi5zYW1wbGUpIDwgc2VsZi5XKToKCQkJc2VsZi5zYW1wbGUuYXBwZW5kKG5ld19wb2ludCkKCQkJc2VsZi5zICs9IDEKCQkJcmV0dXJuCgkJc2VsZi5zICs9IDEKCQlqID0gcmFuZG9tLnJhbmRpbnQoMSxzZWxmLnMpCgkJaWYoaiA8IHNlbGYuVyk6CgkJCXNlbGYuc2FtcGxlW2pdID0gbmV3X3BvaW50CgoKCWRlZiBub3ZlbHR5X2RldGVjdG9yKHNlbGYsIG5ld3BvaW50cyk6CgoKCQlzdG9yZWQgPSBucC5hc2FycmF5KHNlbGYuc2FtcGxlKQoJCW5ld3BvaW50cyA9IG5wLmFzYXJyYXkobmV3cG9pbnRzKQoJCXByaW50KG5wLnNoYXBlKHN0b3JlZCkpCgkJcHJpbnQobnAuc2hhcGUobmV3cG9pbnRzKSkKCgkJWCA9IG5wLmFwcGVuZChzdG9yZWQsIG5ld3BvaW50cywgYXhpcz0wKQoKCQkKCgkJYmFuZHdpZHRoID0gZXN0aW1hdGVfYmFuZHdpZHRoKFgsIHF1YW50aWxlPTAuMiwgbl9zYW1wbGVzPTEwMDApCgkJbXMgPSBNZWFuU2hpZnQoYmFuZHdpZHRoPTUqYmFuZHdpZHRoLCBiaW5fc2VlZGluZz1UcnVlKQoJCW1zLmZpdChYKQoKCQlsYWJlbHMgPSBtcy5sYWJlbHNfCjx8ZmltX2hvbGV8PgoKCQlwcmludChuX2NsdXN0ZXJzXykKCgkJY2x1c3Rlcl93ZWlnaHRzID0gbnAuYmluY291bnQobGFiZWxzKQoKCQl0b3RhbF93aWVnaHQgPSBucC5zdW0oY2x1c3Rlcl93ZWlnaHRzKQoKCQljbHVzdGVyX25vdmVsdHkgPSAxIC0gY2x1c3Rlcl93ZWlnaHRzIC8gdG90YWxfd2llZ2h0CgoJCXByaW50KGNsdXN0ZXJfbm92ZWx0eSkKCgkJbm92ZWx0aWVzID0gW2NsdXN0ZXJfbm92ZWx0eVtjXSBmb3IgYyBpbiBsYWJlbHNbOi1sZW4obmV3cG9pbnRzKV1dCgoJCSMgIyBQbG90IHJlc3VsdAoJCSMgaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAoJCSMgZnJvbSBpdGVydG9vbHMgaW1wb3J0IGN5Y2xlCgoJCSMgcGx0LmZpZ3VyZSgxKQoJCSMgcGx0LmNsZigpCgoJCSMgY29sb3JzID0gY3ljbGUoJ2JncmNteWtiZ3JjbXlrYmdyY215a2JncmNteWsnKQoJCSMgZm9yIGssIGNvbCBpbiB6aXAocmFuZ2Uobl9jbHVzdGVyc18pLCBjb2xvcnMpOgoJCSMgICAgIG15X21lbWJlcnMgPSBsYWJlbHMgPT0gawoJCSMgICAgIGNsdXN0ZXJfY2VudGVyID0gY2x1c3Rlcl9jZW50ZXJzW2tdCgkJIyAgICAgcGx0LnBsb3QoWFtteV9tZW1iZXJzLCAwXSwgWFtteV9tZW1iZXJzLCAxXSwgY29sICsgJy4nKQoJCSMgICAgIHBsdC5wbG90KGNsdXN0ZXJfY2VudGVyWzBdLCBjbHVzdGVyX2NlbnRlclsxXSwgJ28nLCBtYXJrZXJmYWNlY29sb3I9Y29sLAoJCSMgICAgICAgICAgICAgIG1hcmtlcmVkZ2Vjb2xvcj0naycsIG1hcmtlcnNpemU9MTQpCgkJIyBwbHQudGl0bGUoJ0VzdGltYXRlZCBudW1iZXIgb2YgY2x1c3RlcnM6ICVkJyAlIG5fY2x1c3RlcnNfKQoJCSMgcGx0LnNob3coKQoKCQlmb3IgcHQgaW4gbmV3cG9pbnRzOgoJCQlzZWxmLnJlc2Vydm9pcl9zYW1wbGUocHQpCgoJCXJldHVybiBub3ZlbHRpZXMKCgoJZGVmIG9ubGluZV9kZXRlY3Qoc2VsZiwgbmV3X3BvaW50cyk6CgoJCW5vdmVsdGllcyA9IHNlbGYubm92ZWx0eV9kZXRlY3RvcihuZXdfcG9pbnRzKQoKCQlyZXR1cm4gbm92ZWx0aWVzCgoJCWFuYW1vbHkgPSBucC56ZXJvcyhsZW4obmV3X3BvaW50cykpCgoJCWZvciBpIGluIHJhbmdlKGxlbihuZXdfcG9pbnRzKSk6CgkJCWlmKG5vdmVsdGllc1tpXSA8IHNlbGYudGhyZXMpOgoJCQkJYW5hbW9seVtpXSA9IDAKCQkJZWxzZToKCQkJCWFuYW1vbHlbaV0gPSAxCgoJCXJldHVybiBhbmFtb2x5LCBub3ZlbHRpZXMKCgoKZGVmIHRlc3QoKToKCWRldGVjdG9yID0gIE1lYW5TaGlmdEFuYW1vbHkoNjAwLCAwLjUpCgoJbm92ZWx0eSA9IFtdCgoJcHJpbnQoIkxvYWRpbmciKQoJdHJhaW5maWxlID0gb3BlbignbWF0cml4X3RyYWluLnBrbCcsICJyYiIpCgoJCgl0ZXN0ZmlsZSA9IG9wZW4oJ21hdHJpeF90ZXN0X2xhYmVsbGVkLnBrbCcsInJiIikKCgl0cmFpbnNldCA9IHBpY2tsZS5sb2FkKHRyYWluZmlsZSkKCXByaW50KCJUcmFpbiBsb2FkZWQiKQoJdGVzdHNldCA9IHBpY2tsZS5sb2FkKHRlc3RmaWxlKQoKCXByaW50KCdBbGwgbG9hZGVkJykKCglwcmludChucC5zaGFwZSh0ZXN0c2V0KSkKCWV4aXQoMCkKCgoJZm9yIGZyYW1lIGluIHRyYWluc2V0Wzo2MDBdOgoJCWRldGVjdG9yLnJlc2Vydm9pcl9zYW1wbGUoZnJhbWUpCgoKCWFsbGwgPSBucC5hcHBlbmQodHJhaW5zZXRbOjYwMF0sIHRlc3RzZXQsIGF4aXM9MCkKCglub3ZlbHR5X2FsbCA9IGRldGVjdG9yLm9ubGluZV9kZXRlY3QoYWxsbCkKCglwbHQucGxvdChub3ZlbHR5X2FsbCkKCXBsdC5zaG93KCkKCglleGl0KDApCgoKCWZvciBmcmFtZSBpbiB0cmFpbnNldFs2MDA6XToKCQlub3ZlbHR5LmFwcGVuZChkZXRlY3Rvci5vbmxpbmVfZGV0ZWN0KFtmcmFtZV0pWzFdWzBdKQoKCWZvciBmcmFtZSBpbiB0ZXN0c2V0OgoJCW5vdmVsdHkuYXBwZW5kKGRldGVjdG9yLm9ubGluZV9kZXRlY3QoW2ZyYW1lXSlbMV1bMF0pCgoJcHJpbnQobm92ZWx0eVs1OjEwXSkKCglwbHQucGxvdChub3ZlbHR5KQoJcGx0LnNob3coKQoKCgoKZGVmIHRlc3Rfb25fc3ludGhldGljX2RhdGEoKToKCVgsIF8gPSBtYWtlX2NsYXNzaWZpY2F0aW9uKG5fc2FtcGxlcz0xMDAwMCxuX2ZlYXR1cmVzPTIsIG5fcmVkdW5kYW50PTAsIHdlaWdodHM9WzAuOTksMC4wMV0pCgoJZm9yIGkgaW4gWzEwMDAsMjAwMCwzMDAwLDQwMDAsNTAwMCw2MDAwLDcwMDAsODAwMCw5MDAwXToKCgoKCQlsYWJlbHMsIGNsdXN0ZXJfbm92ZWx0eSA9IG5vdmVsdHlfZGV0ZWN0b3IoWFs6aV0sIFhbaTppKzEwMDBdKQoJIyBwdF9ub3ZlbHR5ID0gY2x1c3Rlcl9ub3ZlbHR5W2xhYmVsc10KCgkjIGltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKCgkjIHBsdC5wbG90KFgsIHB0X25vdmVsdHksICdybycpCgkjIHBsdC5zaG93KCkKCgp0ZXN0KCkKCjx8ZmltX3N1ZmZpeHw+CgkJY2x1c3Rlcl9jZW50ZXJzID0gbXMuY2x1c3Rlcl9jZW50ZXJzXwoKCQlsYWJlbHNfdW5pcXVlID0gbnAudW5pcXVlKGxhYmVscykKCQluX2NsdXN0ZXJzXyA9IGxlbihsYWJlbHNfdW5pcXVlKQo8fGZpbV9lbmR8Pg=="]
["64e65fdb5bbe1033fabc1d98db93390bee657d15-1","64e65fdb5bbe1033fabc1d98db93390bee657d15","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKZnJvbSBIeXBhcmFtcyBpbXBvcnQgSHlwYXJhbXMgYXMgaHAKaW1wb3J0IG9zCmltcG9ydCBwaWNrbGUKCmRhdGFwYXRoID0gIi9Vc2Vycy9saXVob25nYmluZy9Eb2N1bWVudHMvdGVuc29yZmxvdy9naXQvcmVjb21tZW5kX3N5c3RlbS9ESU4vRGluLyIKCmNsYXNzIE1vZGVsKG9iamVjdCk6CiAgICAKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICB3aXRoIG9wZW4oZGF0YXBhdGggKyAnY2F0ZV9saXN0LnBrbCcsJ3JiJykgYXMgZjoKICAgICAgICAgICAgc2VsZi5jYXRlX2xpc3QgPSBwaWNrbGUubG9hZChmKQogICAgICAgIHNlbGYuX2J1aWxkX2dyYXBoKCkKICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaHAuc2F2ZV9kaXIpOgogICAgICAgICAgICBvcy5ta2RpcihocC5zYXZlX2RpcikKICAgICAgICBzZWxmLnNhdmVyID0gdGYudHJhaW4uU2F2ZXIodGYuZ2xvYmFsX3ZhcmlhYmxlcygpKQogICAgICAgIHNlbGYudHJhaW5lZCA9IEZhbHNlCgogICAgZGVmIF9jcmVhdGVfaW5wdXRfdGVuc29yKHNlbGYpOgogICAgICAgIHNlbGYudSA9IHRmLnBsYWNlaG9sZGVyKHRmLmludDMyLCBbTm9uZSxdLG5hbWU9InVzZXJfaWQiKSAjIFtCXQogICAgICAgIHNlbGYuaSA9IHRmLnBsYWNlaG9sZGVyKHRmLmludDMyLCBbTm9uZSxdLG5hbWU9Iml0ZW1faSIpICAjIFtCXQogICAgICAgIHNlbGYueSA9IHRmLnBsYWNlaG9sZGVyKHRmLmZsb2F0MzIsIFtOb25lLF0sbmFtZT0ibGFiZWwiKSAjIFtCXQogICAgICAgIHNlbGYuaGlzdF9pID0gdGYucGxhY2Vob2xkZXIodGYuaW50MzIsIFtOb25lLCBOb25lXSxuYW1lPSJoaXN0b3J5IikgIyBbQiwgVF0KICAgICAgICBzZWxmLnNsID0gdGYucGxhY2Vob2xkZXIodGYuaW50MzIsIFtOb25lLF0sbmFtZT0ic2VxdWVuY2VfbGVuZ3RoIikgICMgW0JdCiAgICAgICAgc2VsZi5sciA9IHRmLnBsYWNlaG9sZGVyKHRmLmZsb2F0NjQsIFtdLG5hbWU9ImxlYXJuaW5nX3JhdGUiKQoKICAgIGRlZiBfY3JlYXRlX3dlaWdodF9tYXRyaXgoc2VsZik6CiAgICAgICAgIyB1c2VyX2VtYmVkZGluZzogMTkyNDAzICogSAogICAgICAgICN1c2VyX2VtYl93ID0gdGYuZ2V0X3ZhcmlhYmxlKCJ1c2VyX2VtYl93IiwgW3VzZXJfY291bnQsIGhpZGRlbl91bml0c10pCiAgICAgICAgIyBpdGVtX2VtYmVkZGluZzogNjMwMDEgKiBILy8yCiAgICAgICAgc2VsZi5pdGVtX2VtYl93ID0gdGYuZ2V0X3ZhcmlhYmxlKCJpdGVtX2VtYl93IiwgW2hwLml0ZW1fY291bnQsIGhwLmhpZGRlbl91bml0cyAvLyAyXSkKICAgICAgICAjIGl0ZW0gYmlhcyA6IDYzMDAxCiAgICAgICAgc2VsZi5pdGVtX2IgPSB0Zi5nZXRfdmFyaWFibGUoIml0ZW1fYiIsIFtocC5pdGVtX2NvdW50XSxpbml0aWFsaXplcj10Zi5jb25zdGFudF9pbml0aWFsaXplcigwLjApKQogICAgICAgICMgaXRlbV9lbWJlZGRpbmcgOiA4MDEgKiBILy8yCiAgICAgICAgc2VsZi5jYXRlX2VtYl93ID0gdGYuZ2V0X3ZhcmlhYmxlKCJjYXRlX2VtYl93IiwgW2hwLmNhdGVfY291bnQsIGhwLmhpZGRlbl91bml0cyAvLyAyXSkKCiAgICAgICAgc2VsZi5jYXRlX2xpc3QgPSB0Zi5jb252ZXJ0X3RvX3RlbnNvcihzZWxmLmNhdGVfbGlzdCwgZHR5cGU9dGYuaW50NjQpCgogICAgICAgIAogICAgZGVmIF90cmFpbl9tb2RlbChzZWxmKToKICAgICAgICAnJycKICAgICAgICDorqHnrpcgdXNlckVtYmVkZGluZ++8mumAmui/h+mihOa1i+W5v+WRimlk5LiO5Y6G5Y+y6KGM5Li655qEZW1iZWRkaW5nIOWKoOadg+axguWSjAogICAgICAgICcnJwogICAgICAgICMgaXRlbV9pX2VtYmVkICsgY2F0ZV9pX2VtYmVkIC0tLT4gQiAqIEgKICAgICAgICBpYyA9IHRmLmdhdGhlcihzZWxmLmNhdGVfbGlzdCwgc2VsZi5pKQogICAgICAgIHNlbGYuaV9lbWIgPSB0Zi5jb25jYXQodmFsdWVzID0gWwogICAgICAgICAgICAgICAgdGYubm4uZW1iZWRkaW5nX2xvb2t1cChzZWxmLml0ZW1fZW1iX3csIHNlbGYuaSksCiAgICAgICAgICAgICAgICB0Zi5ubi5lbWJlZGRpbmdfbG9va3VwKHNlbGYuY2F0ZV9lbWJfdywgaWMpLAogICAgICAgICAgICAgICAgXSwgYXhpcz0xKQogICAgICAgIHNlbGYuaV9iID0gdGYuZ2F0aGVyKHNlbGYuaXRlbV9iLCBzZWxmLmkpCiAgICAgICAgCiAgICAgICAgIyBpdGVtX2hpc3RfaV9lbWJlZCArIGNhdGVfaGlzdF9pX2VtYmVkIC0tLT4gQiAqIHNsICogSAogICAgICAgIGhjID0gdGYuZ2F0aGVyKHNlbGYuY2F0ZV9saXN0LCBzZWxmLmhpc3RfaSkKCiAgICAgICAgc2VsZi5oX2VtYiA9IHRmLmNvbmNhdChbCiAgICAgICAgICAgICAgICB0Zi5ubi5lbWJlZGRpbmdfbG9va3VwKHNlbGYuaXRlbV9lbWJfdywgc2VsZi5oaXN0X2kpLAogICAgICAgICAgICAgICAgdGYubm4uZW1iZWRkaW5nX2xvb2t1cChzZWxmLmNhdGVfZW1iX3csIGhjKSwKICAgICAgICAgICAgICAgIF0sIGF4aXM9MikKICAgICAgICAjLS0gc3VtIGJlZ2luIEROTl9maXJzdF9sYXllcnMgPT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICMgbWFzayB0aGUgemVybyBwYWRkaW5nIHBhcnQKICAgICAgICBtYXNrID0gdGYuc2VxdWVuY2VfbWFzayhzZWxmLnNsLCB0Zi5zaGFwZShzZWxmLmhfZW1iKVsxXSwgZHR5cGU9dGYuZmxvYXQzMikgIyBbQiwgVF0KICAgICAgICBtYXNrID0gdGYuZXhwYW5kX2RpbXMobWFzaywgLTEpICMgW0IsIFQsIDFdCiAgICAgICAgbWFzayA9IHRmLnRpbGUobWFzaywgWzEsIDEsIHRmLnNoYXBlKHNlbGYuaF9lbWIpWzJdXSkgIyBbQiwgVCwgSF0KICAgICAgICBzZWxmLmhfZW1iICo9IG1hc2sgIyBbQiwgVCwgSF0KICAgICAgICBoaXN0ID0gc2VsZi5oX2VtYgogICAgICAgIGhpc3QgPSB0Zi5yZWR1Y2Vfc3VtKGhpc3QsIDEpICAjIEIgKiBIIAogICAgICAgIHRtcCA9IHRmLmNhc3QodGYudGlsZSh0Zi5leHBhbmRfZGltcyhzZWxmLnNsLDEpLCBbMSwgaHAuaGlkZGVuX3VuaXRzXSksIHRmLmZsb2F0MzIpICMgQiAqIEgKICAgICAgICBoaXN0ID0gdGYuZGl2KGhpc3QsIHRtcCkKICAgICAgICBwcmludChzZWxmLmhfZW1iLmdldF9zaGFwZSgpLmFzX2xpc3QoKSkKICAgICAgICAjLS0gc3VtIGVuZCAtLS0tLS0tLS0KICAgICAgICAKICAgICAgICBoaXN0ID0gdGYubGF5ZXJzLmJhdGNoX25vcm1hbGl6YXRpb24oaW5wdXRzID0gaGlzdCkgIyAgQiAqIEgKICAgICAgICBoaXN0ID0gdGYucmVzaGFwZShoaXN0LCBbLTEsIGhwLmhpZGRlbl91bml0c10pICAgICAgICAgIyBCICogSAogICAgICAgIGhpc3QgPSB0Zi5sYXllcnMuZGVuc2UoaGlzdCwgaHAuaGlkZGVuX3VuaXRzKSAgICAgICAgICAjIEIgKiBICiAgICAgICAgc2VsZi51X2VtYiA9IGhpc3QKICAgICAgICAjLS0gZmNuIGJlZ2luIC0tLS0tLS0KICAgICAgICBkaW5faSA9IHRmLmNvbmNhdChbc2VsZi51X2VtYiwgc2VsZi5pX2VtYl0sIGF4aXM9LTEpICAjIEIgKiAySAogICAgICAgIGRpbl9pID0gdGYubGF5ZXJzLmJhdGNoX25vcm1hbGl6YXRpb24oaW5wdXRzPWRpbl9pLCBuYW1lPSdiMScpCiAgICAgICAgZF9sYXllcl8xX2kgPSB0Zi5sYXllcnMuZGVuc2UoZGluX2ksIDgwLCBhY3RpdmF0aW9uPXRmLm5uLnNpZ21vaWQsIG5hbWU9J2YxJykgIyBCICogODAKICAgICAgICBkX2xheWVyXzJfaSA9IHRmLmxheWVycy5kZW5zZShkX2xheWVyXzFfaSwgNDAsIGFjdGl2YXRpb249dGYubm4uc2lnbW9pZCwgbmFtZT0nZjInKSAgIyBCICogODAKICAgICAgICBzZWxmLmRfbGF5ZXJfM19pID0gdGYubGF5ZXJzLmRlbnNlKGRfbGF5ZXJfMl9pLCAxLCBhY3RpdmF0aW9uPU5vbmUsIG5hbWU9J2YzJykgCiAgICAgICAgc2VsZi5kX2xheWVyXzNfaSA9IHRmLnJlc2hhcGUoc2VsZi5kX2xheWVyXzNfaSwgWy0xXSkKICAgICAgICAjIEROTiBlbmQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgIyBmbSBwYXJ0CiAgICAgICAgIyA8VyxYPiArIHNpZ21hIHNpZ21hPHZpIHZqPnhpIHhqCiAgICAgICAgc2VsZi5kX2xheWVyX2ZtX2kgPSB0Zi5jb25jYXQoW3RmLnJlZHVjZV9zdW0oc2VsZi51X2VtYipzZWxmLmlfZW1iLCBheGlzPS0xLCBrZWVwX2RpbXM9VHJ1ZSksICAjIEIqMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGYuZ2F0aGVyKHNlbGYudV9lbWIsIFswXSwgYXhpcz0tMSkgKyB0Zi5nYXRoZXIoc2VsZi5pX2VtYiwgWzBdLCBheGlzPS0xKV0sIGF4aXM9LTEpCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgc2VsZi5kX2xheWVyX2ZtX2kgPSB0Zi5sYXllcnMuZGVuc2Uoc2VsZi5kX2xheWVyX2ZtX2ksIDEsIGFjdGl2YXRpb249Tm9uZSwgbmFtZT0nZl9mbScpCiAgICAgICAgCiAgICAgICAgc2VsZi5kX2xheWVyX2ZtX2kgPSB0Zi5yZXNoYXBlKHNlbGYuZF9sYXllcl9mbV9pLCBbLTFdKQoKICAgICAgICBzZWxmLmxvZ2l0cyA9IHNlbGYuaV9iICsgc2VsZi5kX2xheWVyXzNfaSArIHNlbGYuZF9sYXllcl9mbV9pICNbQl0KCiAgICAgICAgc2VsZi5zY29yZV9pID0gdGYuc2lnbW9pZChzZWxmLmlfYiArIHNlbGYuZF9sYXllcl8zX2kgKyBzZWxmLmRfbGF5ZXJfZm1faSkKICAgICAgICBzZWxmLnNjb3JlX2kgPSB0Zi5yZXNoYXBlKHNlbGYuc2NvcmVfaSwgWy0xLCAxXSkKCgogICAgZGVmIF90cmFpbl9vcHRpbWl6ZShzZWxmKToKICAgICAgICAnJycKICAgICAgICDmqKHlnovkvJjljJbnm67moIflh73mlbAKICAgICAgICAnJycKICAgICAgICAjIFN0ZXAgdmFyaWFibGUKICAgICAgICBzZWxmLmdsb2JhbF9zdGVwID0gdGYuVmFyaWFibGUoMCwgdHJhaW5hYmxlPUZhbHNlLCBuYW1lPSdnbG9iYWxfc3RlcCcpCiAgICAgICAgc2VsZi5nbG9iYWxfZXBvY2hfc3RlcCA9IHRmLlZhcmlhYmxlKDAsIHRyYWluYWJsZT1GYWxzZSwgbmFtZT0nZ2xvYmFsX2Vwb2NoX3N0ZXAnKQogICAgICAgIHNlbGYuZ2xvYmFsX2Vwb2NoX3N0ZXBfb3AgPSB0Zi5hc3NpZ24oc2VsZi5nbG9iYWxfZXBvY2hfc3RlcCwgc2VsZi5nbG9iYWxfZXBvY2hfc3RlcCsxKQoKICAgICAgICBzZWxmLmxvc3MgPSB0Zi5yZWR1Y2VfbWVhbigKICAgICAgICAgICAgICAgIHRmLm5uLnNpZ21vaWRfY3Jvc3NfZW50cm9weV93aXRoX2xvZ2l0cygKICAgICAgICAgICAgICAgICAgICAgICAgbG9naXRzPXNlbGYubG9naXRzLAogICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHM9c2VsZi55KQogICAgICAgICAgICAgICAgKQoKICAgICAgICB0cmFpbmFibGVfcGFyYW1zID0gdGYudHJhaW5hYmxlX3ZhcmlhYmxlcygpCiAgICAgICAgc2VsZi5vcHQgPSB0Zi50cmFpbi5HcmFkaWVudERlc2NlbnRPcHRpbWl6ZXIobGVhcm5pbmdfcmF0ZT1zZWxmLmxyKQogICAgICAgIGdyYWRpZW50cyA9IHRmLmdyYWRpZW50cyhzZWxmLmxvc3MsIHRyYWluYWJsZV9wYXJhbXMpCiAgICAgICAgCiAgICAgICAgY2xpcF9ncmFkaWVudHMsIF8gPSB0Zi5jbGlwX2J5X2dsb2JhbF9ub3JtKGdyYWRpZW50cywgNSkKICAgICAgICAKICAgICAgICBzZWxmLnRyYWluX29wID0gc2VsZi5vcHQuYXBwbHlfZ3JhZGllbnRzKHppcChjbGlwX2dyYWRpZW50cywgdHJhaW5hYmxlX3BhcmFtcyksIGdsb2JhbF9zdGVwPXNlbGYuZ2xvYmFsX3N0ZXApCgogICAgICAgIAogICAgZGVmIF9idWlsZF9ncmFwaChzZWxmKToKICAgICAgICBwcmludCgic3RhcnQgZ2VuIGlucHV0IHRlbnNvci4uLiIpCiAgICAgICAgc2VsZi5fY3JlYXRlX2lucHV0X3RlbnNvcigpCiAgICAgICAgcHJpbnQoInN0YXJ0IGdlbiB3ZWlnaHQgbWF0cml4Li4uIikKICAgICAgICBzZWxmLl9jcmVhdGVfd2VpZ2h0X21hdHJpeCgpCiAgICAgICAgcHJpbnQoInN0YXJ0IGdlbiB0cmFpbiBtb2RlbC4uLiIpCiAgICAgICAgc2VsZi5fdHJhaW5fbW9kZWwoKQogICAgICAgIHByaW50KCJzdGFydCBnZW4gZXZhbCBtb2RlbC4uLiIpCiAgICAgICAgc2VsZi5fZXZhbF9tb2RlbCgpCiAgICAgICAgcHJpbnQoInN0YXJ0IGdlbiBvcHRpbWl6ZSAuLi4iKQogICAgICAgIHNlbGYuX3RyYWluX29wdGltaXplKCkKICAgICAgICBwcmludCgiZ3JhcGggZ2VuIGVuZCAuLi4iKQoKICAgICAgICAnJycKICAgICAgICDmqKHlnovor4Tku7cgZXZhbOmYtuautQogICAgICAgIOavj+S4qmVwb2No77yM6L+b6KGM5qih5Z6L6aqM6K+BCiAgICAgICAgJycnCiAgICAgICAgCiAgICBkZWYgX2V2YWxfbW9kZWwoc2VsZik6ICAgICAgIAogICAgICAgIAogICAgICAgIHNlbGYuaiA9IHRmLnBsYWNlaG9sZGVyKHRmLmludDMyLCBbTm9uZSxdKQogICAgICAgIAogICAgICAgIGpjID0gdGYuZ2F0aGVyKHNlbGYuY2F0ZV9saXN0LCBzZWxmLmopCiAgICAgICAgal9lbWIgPSB0Zi5jb25jYXQoWwogICAgICAgICAgICAgICAgdGYubm4uZW1iZWRkaW5nX2xvb2t1cChzZWxmLml0ZW1fZW1iX3csIHNlbGYuaiksCiAgICAgICAgICAgICAgICB0Zi5ubi5lbWJlZGRpbmdfbG9va3VwKHNlbGYuY2F0ZV9lbWJfdywgamMpLAogICAgICAgICAgICAgICAgXSwgYXhpcz0xKQogICAgICAgIGpfYiA9IHRmLmdhdGhlcihzZWxmLml0ZW1fYiwgc2VsZi5qKQogICAgICAgIGRpbl9qID0gdGYuY29uY2F0KFtzZWxmLnVfZW1iLCBqX2VtYl0sIGF4aXM9LTEpCiAgICAgICAgZGluX2ogPSB0Zi5sYXllcnMuYmF0Y2hfbm9ybWFsaXphdGlvbihpbnB1dHM9ZGluX2osIG5hbWU9J2IxJywgcmV1c2U9VHJ1ZSkKICAgICAgICBkX2xheWVyXzFfaiA9IHRmLmxheWVycy5kZW5zZShkaW5faiwgODAsIGFjdGl2YXRpb249dGYubm4uc2lnbW9pZCwgbmFtZT0nZjEnLCByZXVzZT1UcnVlKQogICAgICAgIGRfbGF5ZXJfMl9qID0gdGYubGF5ZXJzLmRlbnNlKGRfbGF5ZXJfMV9qLCA0MCwgYWN0aXZhdGlvbj10Zi5ubi5zaWdtb2lkLCBuYW1lPSdmMicsIHJldXNlPVRydWUpCiAgICAgICAgZF9sYXllcl8zX2ogPSB0Zi5sYXllcnMuZGVuc2UoZF9sYXllcl8yX2osIDEsIGFjdGl2YXRpb249Tm9uZSwgbmFtZT0nZjMnLCByZXVzZT1UcnVlKQogICAgICAgIGRfbGF5ZXJfZm1faiA9IHRmLmNvbmNhdChbdGYucmVkdWNlX3N1bShzZWxmLnVfZW1iKmpfZW1iLCBheGlzPS0xLCBrZWVwX2RpbXM9VHJ1ZSksIHRmLmdhdGhlcihzZWxmLnVfZW1iLCBbMF0sIGF4aXM9LTEpICsgdGYuZ2F0aGVyKGpfZW1iLCBbMF0sIGF4aXM9LTEpXSwgYXhpcz0tMSkKICAgICAgICBkX2xheWVyX2ZtX2ogPSB0Zi5sYXllcnMuZGVuc2UoZF9sYXllcl9mbV9qLCAxLCBhY3RpdmF0aW9uPU5vbmUsIG5hbWU9J2ZfZm0nLCByZXVzZT1UcnVlKQogICAgICAgIGRfbGF5ZXJfM19qID0gdGYucmVzaGFwZShkX2xheWVyXzNfaiwgWy0xXSkKICAgICAgICBkX2xheWVyX2ZtX2ogPSB0Zi5yZXNoYXBlKGRfbGF5ZXJfZm1faiwgWy0xXSkKICAgICAgICB4ID0gc2VsZi5pX2IgLSBqX2IgKyBzZWxmLmRfbGF5ZXJfM19pIC0gZF9sYXllcl8zX2ogKyBzZWxmLmRfbGF5ZXJfZm1faSAtIGRfbGF5ZXJfZm1faiAjIFtCXQoKICAgICAgICBzZWxmLm1mX2F1YyA9IHRmLnJlZHVjZV9tZWFuKHRmLnRvX2Zsb2F0KHggPiAwKSkKICAgICAgICBzZWxmLnNjb3JlX2ogPSB0Zi5zaWdtb2lkKGpfYiArIGRfbGF5ZXJfM19qICsgZF9sYXllcl9mbV9qKQogICAgICAgIHNlbGYuc2NvcmVfaiA9IHRmLnJlc2hhcGUoc2VsZi5zY29yZV9qLCBbLTEsIDFdKQogICAgICAgIHNlbGYucF9hbmRfbiA9IHRmLmNvbmNhdChbc2VsZi5zY29yZV9pLCBzZWxmLnNjb3JlX2pdLCBheGlzPS0xKQogICAgICAgIHByaW50KHNlbGYucF9hbmRfbi5nZXRfc2hhcGUoKS5hc19saXN0KCkpCiAgICAgICAgCiAgICBkZWYgX2luaXRpYWxpemVfc2Vzc2lvbihzZWxmLCBzZXNzaW9uKToKICAgICAgICBjaGVja3BvaW50ID0gdGYudHJhaW4uZ2V0X2NoZWNrcG9pbnRfc3RhdGUoaHAuc2F2ZV9kaXIpCiAgICAgICAgaWYgbm90IGNoZWNrcG9pbnQgb3Igbm90IGNoZWNrcG9pbnQubW9kZWxfY2hlY2twb2ludF9wYXRoOgogICAgICAgICAgICBpbml0X29wID0gdGYuZ3JvdXAodGYuZ2xvYmFsX3ZhcmlhYmxlc19pbml0aWFsaXplcigpLHRmLmxvY2FsX3ZhcmlhYmxlc19pbml0aWFsaXplcigpKQogICAgICAgICAgICBzZXNzaW9uLnJ1bihpbml0X29wKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYuc2F2ZXIucmVzdG9yZShzZXNzaW9uLCBjaGVja3BvaW50Lm1vZGVsX2NoZWNrcG9pbnRfcGF0aCkKICAgICAgICAgICAgc2VsZi50cmFpbmVkID0gVHJ1ZQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiB0cmFpbihzZWxmLCBzZXNzLCB1aWosIGwpOgogICAgICAgIGxvc3MsIF8gPSBzZXNzLnJ1bihbc2VsZi5sb3NzLCBzZWxmLnRyYWluX29wXSwgZmVlZF9kaWN0PXsKICAgICAgICAgICAgICAgIHNlbGYudTogdWlqWzBdLAo8fGZpbV9lbmR8Pg=="]
["28d112162a3f0a1ee59e8dd36abc9cc219195b06-1","28d112162a3f0a1ee59e8dd36abc9cc219195b06","PHxmaW1fcHJlZml4fD4KIiIiVXNhZ2U6IHBsYW5ldGFyeXVtIFstLWhlbHBdIFs8Y29tbWFuZD5dIFs8YXJncz4uLi5dCgpPcHRpb25zOgogICAtaCwgLS1oZWxwICBQcmludCB0aGlzIGhlbHAgbWVzc2FnZQoKQ29tbWFuZHM6CiAgIGhlbHAgICAgc2hvdyBoZWxwIG9uIGEgY29tbWFuZAogICBzdGF0aWMgIGdlbmVyYXRlIHN0YXRpYyB3ZWJzaXRlCiIiIgoKZnJvbSBkb2NvcHQgaW1wb3J0IGRvY29wdApmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IGNhbGwKCmNsYXNzIFVua25vd25Db21tYW5kKFJ1bnRpbWVFcnJvcik6CiAgICBwYXNzCgpkZWYgcnVuX3N1YihjbWQsIGFyZ3MpOgogICAgaWYgY21kID09ICdzdGF0aWMnOgogICAgICAgIGZyb20gLmFwcHMgaW1wb3J0IHN0YXRpY19nZW4KICAgICAgICByZXR1cm4gc3RhdGljX2dlbi5jbGkoZG9jb3B0KHN0YXRpY19nZW4uY2xpLl9fZG9jX18sIGFyZ3Y9YXJncykpCiAgICBlbHNlOgogICAgICAgIHJhaXNlIFVua25vd25Db21tYW5kCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmRlZiBtYWluKCk6CiAgICBhcmdzID0gZG9jb3B0KF9fZG9jX18sIGhlbHA9RmFsc2UsIG9wdGlvbnNfZmlyc3Q9VHJ1ZSkKICAgIAo8fGZpbV9lbmR8Pg=="]
["11c71737d3d76d1379ff65e31f506be85764ed0b-4","11c71737d3d76d1379ff65e31f506be85764ed0b","PHxmaW1fcHJlZml4fD4KCmZyb20gbWF0cGxvdGxpYi5weXBsb3QgaW1wb3J0ICoKZnJvbSBudW1weSBpbXBvcnQgYXJyYXkKCmZyb20gcmF5c2VjdC5wcmltaXRpdmUgaW1wb3J0IFNwaGVyZSwgQm94LCBDeWxpbmRlciwgVW5pb24sIEludGVyc2VjdCwgU3VidHJhY3QKZnJvbSByYXlzZWN0Lm9wdGljYWwgaW1wb3J0IFdvcmxkLCB0cmFuc2xhdGUsIHJvdGF0ZSwgUG9pbnQzRCwgZDY1X3doaXRlLCBJbnRlcnBvbGF0ZWRTRgpmcm9tIHJheXNlY3Qub3B0aWNhbC5tYXRlcmlhbC5lbWl0dGVyIGltcG9ydCBVbmlmb3JtU3VyZmFjZUVtaXR0ZXIsIENoZWNrZXJib2FyZApmcm9tIHJheXNlY3Qub3B0aWNhbC5tYXRlcmlhbC5kaWVsZWN0cmljIGltcG9ydCBEaWVsZWN0cmljLCBTZWxsbWVpZXIKZnJvbSByYXlzZWN0Lm9wdGljYWwubGlicmFyeSBpbXBvcnQgc2Nob3R0CmZyb20gcmF5c2VjdC5vcHRpY2FsLm9ic2VydmVyIGltcG9ydCBQaW5ob2xlQ2FtZXJhLCBSR0JQaXBlbGluZTJELCBTcGVjdHJhbFBvd2VyUGlwZWxpbmUyRAoKCjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNtaXNzaW9uPUludGVycG9sYXRlZFNGKFszMDAsIDQ5MCwgNTEwLCA1OTAsIDYxMCwgODAwXSwgYXJyYXkoWzAuMCwgMC4wLCAxLjAsIDEuMCwgMC4wLCAwLjBdKSowLjcpKQoKYmx1ZV9nbGFzcyA9IERpZWxlY3RyaWMoaW5kZXg9U2VsbG1laWVyKDEuMDM5NjEyMTIsIDAuMjMxNzkyMzQ0LCAxLjAxMDQ2OTQ1LCA2LjAwMDY5ODY3ZS0zLCAyLjAwMTc5MTQ0ZS0yLCAxLjAzNTYwNjUzZTIpLAogICAgICAgICAgICAgICAgICAgICAgICB0cmFuc21pc3Npb249SW50ZXJwb2xhdGVkU0YoWzMwMCwgNDkwLCA1MTAsIDU5MCwgNjEwLCA4MDBdLCBhcnJheShbMS4wLCAxLjAsIDAuMCwgMC4wLCAwLjAsIDAuMF0pKjAuNykpCgp3b3JsZCA9IFdvcmxkKCkKCmN5bF94ID0gQ3lsaW5kZXIoMSwgNC4yLCB0cmFuc2Zvcm09cm90YXRlKDkwLCAwLCAwKSp0cmFuc2xhdGUoMCwgMCwgLTIuMSkpCmN5bF95ID0gQ3lsaW5kZXIoMSwgNC4yLCB0cmFuc2Zvcm09cm90YXRlKDAsIDkwLCAwKSp0cmFuc2xhdGUoMCwgMCwgLTIuMSkpCmN5bF96ID0gQ3lsaW5kZXIoMSwgNC4yLCB0cmFuc2Zvcm09cm90YXRlKDAsIDAsIDApKnRyYW5zbGF0ZSgwLCAwLCAtMi4xKSkKY3ViZSA9IEJveChQb2ludDNEKC0xLjUsIC0xLjUsIC0xLjUpLCBQb2ludDNEKDEuNSwgMS41LCAxLjUpKQpzcGhlcmUgPSBTcGhlcmUoMi4wKQoKSW50ZXJzZWN0KHNwaGVyZSwgU3VidHJhY3QoY3ViZSwgVW5pb24oVW5pb24oY3lsX3gsIGN5bF95KSwgY3lsX3opKSwgd29ybGQsIHRyYW5zbGF0ZSgtMi4xLDIuMSwyLjUpKnJvdGF0ZSgzMCwgLTIwLCAwKSwgc2Nob3R0KCJOLUxBSzkiKSkKSW50ZXJzZWN0KHNwaGVyZSwgU3VidHJhY3QoY3ViZSwgVW5pb24oVW5pb24oY3lsX3gsIGN5bF95KSwgY3lsX3opKSwgd29ybGQsIHRyYW5zbGF0ZSgyLjEsMi4xLDIuNSkqcm90YXRlKC0zMCwgLTIwLCAwKSwgc2Nob3R0KCJTRjYiKSkKSW50ZXJzZWN0KHNwaGVyZSwgU3VidHJhY3QoY3ViZSwgVW5pb24oVW5pb24oY3lsX3gsIGN5bF95KSwgY3lsX3opKSwgd29ybGQsIHRyYW5zbGF0ZSgyLjEsLTIuMSwyLjUpKnJvdGF0ZSgtMzAsIDIwLCAwKSwgc2Nob3R0KCJMRjVHMTkiKSkKSW50ZXJzZWN0KHNwaGVyZSwgU3VidHJhY3QoY3ViZSwgVW5pb24oVW5pb24oY3lsX3gsIGN5bF95KSwgY3lsX3opKSwgd29ybGQsIHRyYW5zbGF0ZSgtMi4xLC0yLjEsMi41KSpyb3RhdGUoMzAsIDIwLCAwKSwgc2Nob3R0KCJOLUJLNyIpKQoKczEgPSBTcGhlcmUoMS4wLCB0cmFuc2Zvcm09dHJhbnNsYXRlKDAsIDAsIDEuMC0wLjAxKSkKczIgPSBTcGhlcmUoMC41LCB0cmFuc2Zvcm09dHJhbnNsYXRlKDAsIDAsIC0wLjUrMC4wMSkpCkludGVyc2VjdChzMSwgczIsIHdvcmxkLCB0cmFuc2xhdGUoMCwwLC0zLjYpKnJvdGF0ZSg1MCw1MCwwKSwgc2Nob3R0KCJOLUJLNyIpKQoKQm94KFBvaW50M0QoLTUwLCAtNTAsIDUwKSwgUG9pbnQzRCg1MCwgNTAsIDUwLjEpLCB3b3JsZCwgbWF0ZXJpYWw9Q2hlY2tlcmJvYXJkKDQsIGQ2NV93aGl0ZSwgZDY1X3doaXRlLCAwLjQsIDAuOCkpCkJveChQb2ludDNEKC0xMDAsIC0xMDAsIC0xMDApLCBQb2ludDNEKDEwMCwgMTAwLCAxMDApLCB3b3JsZCwgbWF0ZXJpYWw9VW5pZm9ybVN1cmZhY2VFbWl0dGVyKGQ2NV93aGl0ZSwgMC4xKSkKCmlvbigpCgojIGNyZWF0ZSBhbmQgc2V0dXAgdGhlIGNhbWVyYQpyZ2IgPSBSR0JQaXBlbGluZTJEKCkKcmdiLmFjY3VtdWxhdGUgPSBUcnVlCgpzcGVjdHJhbCA9IFNwZWN0cmFsUG93ZXJQaXBlbGluZTJEKCkKc3BlY3RyYWwuYWNjdW11bGF0ZSA9IFRydWUKCnBpcGVsaW5lcyA9IFtyZ2JdCgpjYW1lcmEgPSBQaW5ob2xlQ2FtZXJhKCgyNTYsIDI1NiksIHBhcmVudD13b3JsZCwgdHJhbnNmb3JtPXRyYW5zbGF0ZSgwLCAwLCAtNCkgKiByb3RhdGUoMCwgMCwgMCksIHBpcGVsaW5lcz1waXBlbGluZXMpCmNhbWVyYS5waXhlbF9zYW1wbGVzID0gMjUwCmNhbWVyYS5mb3YgPSA3NQpjYW1lcmEuc3BlY3RyYWxfYmlucyA9IDE1CmNhbWVyYS5zcGVjdHJhbF9yYXlzID0gMQoKY2FtZXJhLm9ic2VydmUoKQoKaW9mZigpCiMgY2FtZXJhLnBpcGVsaW5lc1swXS5zYXZlKCJyZW5kZXIucG5nIikKY2FtZXJhLnBpcGVsaW5lc1swXS5kaXNwbGF5KCkKc2hvdygpCgo8fGZpbV9zdWZmaXh8PgpyZWRfZ2xhc3MgPSBEaWVsZWN0cmljKGluZGV4PVNlbGxtZWllcigxLjAzOTYxMjEyLCAwLjIzMTc5MjM0NCwgMS4wMTA0Njk0NSwgNi4wMDA2OTg2N2UtMywgMi4wMDE3OTE0NGUtMiwgMS4wMzU2MDY1M2UyKSwKICAgICAgICAgICAgICAgICAgICAgICB0cmFuc21pc3Npb249SW50ZXJwb2xhdGVkU0YoWzMwMCwgNDkwLCA1MTAsIDU5MCwgNjEwLCA4MDBdLCBhcnJheShbMC4wLCAwLjAsIDAuMCwgMC4wLCAxLjAsIDEuMF0pKjAuNykpCgpncmVlbl9nbGFzcyA9IERpZWxlY3RyaWMoaW5kZXg9U2VsbG1laWVyKDEuMDM5NjEyMTIsIDAuMjMxNzkyMzQ0LCAxLjAxMDQ2OTQ1LCA2LjAwMDY5ODY3ZS0zLCAyLjAwMTc5MTQ0ZS0yLCAxLjAzNTYwNjUzZTIpLAo8fGZpbV9lbmR8Pg=="]
["c90794f32248310de016f25fcf2963b97cd270bd-1","c90794f32248310de016f25fcf2963b97cd270bd","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDEuOS44IG9uIDIwMTYtMDgtMTAgMTA6MjgKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucywgbW9kZWxzCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBpbml0aWFsID0gVHJ1ZQoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgIF0KCiAgICBvcGVyYXRpb25zID0gWwogICAgICAgIG1pZ3JhdGlvbnMuQ3JlYXRlTW9kZWwoCiAgICAgICAgICAgIG5hbWU9J2RheScsCiAgICAgICAgICAgIGZpZWxkcz1bCiAgICAgICAgICAgICAgICAoJ2lkJywgbW9kZWxzLkF1dG9GaWVsZChhdXRvX2NyZWF0ZWQ9VHJ1ZSwgcHJpbWFyeV9rZXk9VHJ1ZSwgc2VyaWFsaXplPUZhbHNlLCB2ZXJib3NlX25hbWU9J0lEJykpLAogICAgICAgICAgICAgICAgKCdwcmlvcml0eScsIG1vZGVscy5JbnRlZ2VyRmllbGQoZGVmYXVsdD0wKSksCiAgICAgICAgICAgICAgICAoJ2RhdGUnLCBtb2RlbHMuRGF0ZUZpZWxkKGF1dG9fbm93X2FkZD1UcnVlKSksCiAgICAgICAgICAgICAgICAoJ3N0YXJ0dGltZScsIG1vZGVscy5EZWNpbWFsRmllbGQoZGVjaW1hbF9wbGFjZXM9MiwgbWF4X2RpZ2l0cz01KSksCiAgICAgICAgICAgICAgICAoJ3QxJywgbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTIwMCkpLAogICAgICAgICAgICAgICAgKCd0MicsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yMDApKSwKICAgICAgICAgICAgICAgICgndDMnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjAwKSksCiAgICAgICAgICAgICAgICAoJ3Q0JywgbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTIwMCkpLAogICAgICAgICAgICAgICAgKCd0NScsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yMDApKSwKICAgICAgICAgICAgICAgICgndDYnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjAwKSksCiAgICAgICAgICAgICAgICAoJ3Q3JywgbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTIwMCkpLAogICAgICAgICAgICAgICAgKCd0OCcsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yMDApKSwKICAgICAgICAgICAgICAgICgndDknLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjAwKSksCiAgICAgICAgICAgICAgICAoJ3QxMCcsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yMDApKSwKICAgICAgICAgICAgICAgICgndDExJywgbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTIwMCkpLAogICAgICAgICAgICAgICAgKCd0MTInLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjAwKSksCiAgICAgICAgICAgICAgICAoJ3QxMycsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yMDApKSwKICAgICAgICAgICAgICAgICgndDE0JywgbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTIwMCkpLAogICAgICAgICAgICAgICAgKCd0MTUnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjAwKSksCiAgICAgICAgICAgICAgICAoJ3QxNicsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yMDApKSwKICAgICAgICAgICAgXSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQ3JlYXRlTW9kZWwoCiAgICAgICAgICAgIG5hbWU9J3Rhc2snLAogICAgICAgICAgICBmaWVsZHM9WwogICAgICAgICAgICAgICAgKCdpZCcsIG1vZGVscy5BdXRvRmllbGQoYXV0b19jcmVhdGVkPVRydWUsIHByaW1hcnlfa2V5PVRydWUsIHNlcmlhbGl6ZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdJRCcpKSwKICAgICAgICAgICAgICAgICgndGV4dCcsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yMDApKSwKICAgICAgICAgICAgICAgICgndG9wYnJhbmNoJywgbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTIwMCkpLAogICAgICAgICAgICAgICAgKCduZXh0JywgbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTIwMCkpLAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgICgncHJvZ3Jlc3N2YWx1ZScsIG1vZGVscy5JbnRlZ2VyRmllbGQoZGVmYXVsdD0wKSksCiAgICAgICAgICAgICAgICAoJ2F1ZGlvJywgbW9kZWxzLkZpbGVGaWVsZChibGFuaz1UcnVlLCB1cGxvYWRfdG89J2dvYWwvbWVkaWEnKSksCiAgICAgICAgICAgIF0sCiAgICAgICAgKSwKICAgIF0KPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICgncHJldmlvdXMnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjAwKSksCiAgICAgICAgICAgICAgICAoJ3N0YXJ0ZGF0ZScsIG1vZGVscy5EYXRlRmllbGQoKSksCiAgICAgICAgICAgICAgICAoJ3N0b3BkYXRlJywgbW9kZWxzLkRhdGVGaWVsZCgpKSwKICAgICAgICAgICAgICAgICgndHJlZXZhbHVlJywgbW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0PTApKSwKPHxmaW1fZW5kfD4="]
["febada5ebf700ecd78f7a6dc985b11c833b0972d-2","febada5ebf700ecd78f7a6dc985b11c833b0972d","PHxmaW1fcHJlZml4fD4KZnJvbSBzcmMuYXV4aWxpYXJ5LmNvbW1hbmRfbGluZSBpbXBvcnQgZ2V0X2NvbW1hbmRsaW5lX3BhcmFtZXRlcnMKZnJvbSBzcmMudmlzdWFsaXplX2RmZ193aXRoX2NvbnN0cmFpbnRzIGltcG9ydCB2aXN1YWxpemVfZGZnX3dpdGhfY29uc3RyYWludHMKCmZpbGVNbmdtLCBhbGdvUHJtdHMgPSBnZXRfY29tbWFuZGxpbmVfcGFyYW1ldGVycygpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCnZpc3VhbGl6ZV9kZmdfd2l0aF9jb25zdHJhaW50cyhmaWxlTW5nbSkKCjx8ZmltX2VuZHw+"]
["ebb3d982b8ae9d512cfd0ab018b52977b245c8ad-2","ebb3d982b8ae9d512cfd0ab018b52977b245c8ad","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAoKPHxmaW1faG9sZXw+CkBweXRlc3QuZml4dHVyZShzY29wZT0iZnVuY3Rpb24iKQpkZWYgaWRfdGVzdF93cmFwcGVyKHJlcXVlc3QpOgogICAgcmVxdWVzdC5jbHMuaWQgPSBJZChpZHN0cj0ncGFja2FnZS5PYmplY3QlM0FpZGVudGlmaWVyJTQwQVVUSE9SSVRZJykKCgpAcHl0ZXN0Lm1hcmsudXNlZml4dHVyZXMoImlkX3Rlc3Rfd3JhcHBlciIpCmNsYXNzIFRlc3RJZChvYmplY3QpOgogICAgZGVmIHRlc3RfY2FuX2NyZWF0ZV9pZF93aXRoX2lkc3RyKHNlbGYpOgogICAgICAgIHJlc3VsdCA9IElkKGlkc3RyPSdwYWNrYWdlLk9iamVjdCUzQWlkZW50aWZpZXIlNDBBVVRIT1JJVFknKQogICAgICAgIGFzc2VydCByZXN1bHQuX2F1dGhvcml0eSA9PSAnQVVUSE9SSVRZJwogICAgICAgIGFzc2VydCByZXN1bHQuX2lkZW50aWZpZXIgPT0gJ2lkZW50aWZpZXInCiAgICAgICAgYXNzZXJ0IHJlc3VsdC5fbmFtZXNwYWNlID09ICdwYWNrYWdlLk9iamVjdCcKCiAgICBkZWYgdGVzdF9jYW5fY3JlYXRlX2lkX3dpdGhfa3dhcmdzKHNlbGYpOgogICAgICAgIHJlc3VsdCA9IElkKGF1dGhvcml0eT0nQVVUSE9SSVRZJywgbmFtZXNwYWNlPSdwYWNrYWdlLk9iamVjdCcsIGlkZW50aWZpZXI9J2lkZW50aWZpZXInKQogICAgICAgIGFzc2VydCByZXN1bHQuX2F1dGhvcml0eSA9PSAnQVVUSE9SSVRZJwogICAgICAgIGFzc2VydCByZXN1bHQuX2lkZW50aWZpZXIgPT0gJ2lkZW50aWZpZXInCiAgICAgICAgYXNzZXJ0IHJlc3VsdC5fbmFtZXNwYWNlID09ICdwYWNrYWdlLk9iamVjdCcKCiAgICBkZWYgdGVzdF9pbml0ZXJfcmFpc2VzX251bGxfYXJndW1lbnQoc2VsZik6CiAgICAgICAgd2l0aCBweXRlc3QucmFpc2VzKGVycm9ycy5OdWxsQXJndW1lbnQpOgogICAgICAgICAgICBJZCgpCgogICAgZGVmIHRlc3RfY2FuX2dldF9zdHJpbmdfcmVwcmVzZW50YXRpb24oc2VsZik6CiAgICAgICAgcmVzdWx0ID0gSWQoaWRzdHI9J3BhY2thZ2UuT2JqZWN0JTNBaWRlbnRpZmllciU0MEFVVEhPUklUWScpCiAgICAgICAgYXNzZXJ0IHN0cihyZXN1bHQpID09ICdwYWNrYWdlLk9iamVjdCUzQWlkZW50aWZpZXIlNDBBVVRIT1JJVFknCgogICAgZGVmIHRlc3RfY2FuX2dldF9hdXRob3JpdHkoc2VsZik6CiAgICAgICAgYXNzZXJ0IHNlbGYuaWQuYXV0aG9yaXR5ID09ICdBVVRIT1JJVFknCgogICAgZGVmIHRlc3RfY2FuX2dldF9uYW1lc3BhY2Uoc2VsZik6CiAgICAgICAgYXNzZXJ0IHNlbGYuaWQubmFtZXNwYWNlID09ICdwYWNrYWdlLk9iamVjdCcKCiAgICBkZWYgdGVzdF9jYW5fZ2V0X2lkZW50aWZpZXJfbmFtZXNwYWNlKHNlbGYpOgogICAgICAgIGFzc2VydCBzZWxmLmlkLmlkZW50aWZpZXJfbmFtZXNwYWNlID09ICdwYWNrYWdlLk9iamVjdCcKCiAgICBkZWYgdGVzdF9jYW5fZ2V0X2lkZW50aWZpZXIoc2VsZik6CiAgICAgICAgYXNzZXJ0IHNlbGYuaWQuaWRlbnRpZmllciA9PSAnaWRlbnRpZmllcicKPHxmaW1fc3VmZml4fD4KZnJvbSBkbGtpdC5hYnN0cmFjdF9vc2lkLm9zaWQgaW1wb3J0IGVycm9ycwpmcm9tIGRsa2l0LnByaW1vcmRpdW0uaWQucHJpbWl0aXZlcyBpbXBvcnQgSWQKCgo8fGZpbV9lbmR8Pg=="]
["096b5c085081f7e61c0c7b13d064c60a87191979-3","096b5c085081f7e61c0c7b13d064c60a87191979","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cAoKIyBMb2FkIFJFQURNRQpmcm9tIG9zIGltcG9ydCBwYXRoCnRoaXNfZGlyZWN0b3J5ID0gcGF0aC5hYnNwYXRoKHBhdGguZGlybmFtZShfX2ZpbGVfXykpCndpdGggb3BlbihwYXRoLmpvaW4odGhpc19kaXJlY3RvcnksICdSRUFETUUucnN0JyksIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CiAgICBsb25nX2Rlc2NyaXB0aW9uID0gZi5yZWFkKCkKCnNldHVwKAoJbmFtZT0naW50b3VjaF9xdWVyeXNldF9jc3YnLAoJdmVyc2lvbj0nMC4zLjEnLAoJZGVzY3JpcHRpb249J01vZHVsZSB0byBleHBvcnQgZGphbmdvIHF1ZXJ5c2V0cyBhcyBjc3YgZmlsZXMnLAoJbWFpbnRhaW5lcj0nSmFtZXMgQ2hlZXNlJywKCW1haW50YWluZXJfZW1haWw9J2phbWVzLmNoZWVzZUBpbnRvdWNoLWx0ZC5jb20nLAoJdXJsPSdodHRwczovL2dpdGh1Yi5jb20vaW50b3VjaC1zbWFydHdhdGVyL3F1ZXJ5c2V0LWNzdicsCglwYWNrYWdlcz1bJ2ludG91Y2gnLCAnaW50b3VjaC5xdWVyeXNldF9jc3YnXSwKCWtleXdvcmRzPSdkamFuZ28gcXVlcnlzZXQgY3N2JywKICAgIGxvbmdfZGVzY3JpcHRpb249bG9uZ19kZXNjcmlwdGlvbiwKICAgIGxvbmdfZGVzY3JpcHRpb25fY29udGVudF90eXBlPSd0ZXh0L3gtcnN0JywKCWNsYXNzaWZpZXJzID0gWwoJCSdEZXZlbG9wbWVudCBTdGF0dXMgOjogMyAtIEFscGhhJywKCQknRW52aXJvbm1lbnQgOjogUGx1Z2lucycsCgkJJ0ZyYW1ld29yayA6OiBEamFuZ28nLAoJCSdJbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzJywKPHxmaW1faG9sZXw+CgldLAoJaW5zdGFsbF9yZXF1aXJlcz1bJ2RqYW5nbz49MS43J10KKQo8fGZpbV9zdWZmaXh8PgoJCSdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNSVQgTGljZW5zZScsCgkJJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzLjQnLAoJCSdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy41JywKCQknUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMuNicsCjx8ZmltX2VuZHw+"]
["c9371dff38fb2989bbf1d164dee82eccb2e90dec-3","c9371dff38fb2989bbf1d164dee82eccb2e90dec","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc6IHV0Zi04Cgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlLCBkYXRldGltZSAgIyBub3FhOiBGNDAxCgpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCwgRGljdCAgIyBub3FhOiBGNDAxCgpmcm9tIG1vZGVscy50ZW1wbGF0ZV9jb2x1bW4gaW1wb3J0IFRlbXBsYXRlQ29sdW1uCmZyb20gbW9kZWxzLmJhc2VfbW9kZWxfIGltcG9ydCBNb2RlbApmcm9tIHN3YWdnZXJfc2VydmVyIGltcG9ydCB1dGlsCgoKY2xhc3MgTWFwVGVtcGxhdGVDb2x1bW4oTW9kZWwpOgogICAgIiIiTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc3dhZ2dlciBjb2RlIGdlbmVyYXRvciBwcm9ncmFtLgoKICAgIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS4KICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcmVlX3RleHRfY29sdW1uOiBzdHI9Tm9uZSwgdGVtcGxhdGVfY29sdW1uOiBUZW1wbGF0ZUNvbHVtbj1Ob25lKTogICMgbm9xYTogRTUwMQogICAgICAgICIiIk1hcFRlbXBsYXRlQ29sdW1uIC0gYSBtb2RlbCBkZWZpbmVkIGluIFN3YWdnZXIKCiAgICAgICAgOnBhcmFtIGZyZWVfdGV4dF9jb2x1bW46IFRoZSBmcmVlX3RleHRfY29sdW1uIG9mIHRoaXMgTWFwVGVtcGxhdGVDb2x1bW4uICAjIG5vcWE6IEU1MDEKPHxmaW1faG9sZXw+CiAgICAgICAgc2VsZi5zd2FnZ2VyX3R5cGVzID0gewogICAgICAgICAgICAnZnJlZV90ZXh0X2NvbHVtbic6IHN0ciwKICAgICAgICAgICAgJ3RlbXBsYXRlX2NvbHVtbic6IFRlbXBsYXRlQ29sdW1uCiAgICAgICAgfQoKICAgICAgICBzZWxmLmF0dHJpYnV0ZV9tYXAgPSB7CiAgICAgICAgICAgICdmcmVlX3RleHRfY29sdW1uJzogJ2ZyZWVUZXh0Q29sdW1uJywKICAgICAgICAgICAgJ3RlbXBsYXRlX2NvbHVtbic6ICd0ZW1wbGF0ZUNvbHVtbicKICAgICAgICB9CgogICAgICAgIHNlbGYuX2ZyZWVfdGV4dF9jb2x1bW4gPSBmcmVlX3RleHRfY29sdW1uCiAgICAgICAgc2VsZi5fdGVtcGxhdGVfY29sdW1uID0gdGVtcGxhdGVfY29sdW1uCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgZnJvbV9kaWN0KGNscywgZGlrdCkgLT4gJ01hcFRlbXBsYXRlQ29sdW1uJzoKICAgICAgICAiIiJSZXR1cm5zIHRoZSBkaWN0IGFzIGEgbW9kZWwKCiAgICAgICAgOnBhcmFtIGRpa3Q6IEEgZGljdC4KICAgICAgICA6dHlwZTogZGljdAogICAgICAgIDpyZXR1cm46IFRoZSBNYXBUZW1wbGF0ZUNvbHVtbiBvZiB0aGlzIE1hcFRlbXBsYXRlQ29sdW1uLiAgIyBub3FhOiBFNTAxCiAgICAgICAgOnJ0eXBlOiBNYXBUZW1wbGF0ZUNvbHVtbgogICAgICAgICIiIgogICAgICAgIHJldHVybiB1dGlsLmRlc2VyaWFsaXplX21vZGVsKGRpa3QsIGNscykKCiAgICBAcHJvcGVydHkKICAgIGRlZiBmcmVlX3RleHRfY29sdW1uKHNlbGYpIC0+IHN0cjoKICAgICAgICAiIiJHZXRzIHRoZSBmcmVlX3RleHRfY29sdW1uIG9mIHRoaXMgTWFwVGVtcGxhdGVDb2x1bW4uCgogICAgICAgIGNoYXJhY3RlcmlzdGljc1tvcmdhbmlzbV0gICMgbm9xYTogRTUwMQoKICAgICAgICA6cmV0dXJuOiBUaGUgZnJlZV90ZXh0X2NvbHVtbiBvZiB0aGlzIE1hcFRlbXBsYXRlQ29sdW1uLgogICAgICAgIDpydHlwZTogc3RyCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuX2ZyZWVfdGV4dF9jb2x1bW4KCiAgICBAZnJlZV90ZXh0X2NvbHVtbi5zZXR0ZXIKICAgIGRlZiBmcmVlX3RleHRfY29sdW1uKHNlbGYsIGZyZWVfdGV4dF9jb2x1bW46IHN0cik6CiAgICAgICAgIiIiU2V0cyB0aGUgZnJlZV90ZXh0X2NvbHVtbiBvZiB0aGlzIE1hcFRlbXBsYXRlQ29sdW1uLgoKICAgICAgICBjaGFyYWN0ZXJpc3RpY3Nbb3JnYW5pc21dICAjIG5vcWE6IEU1MDEKCiAgICAgICAgOnBhcmFtIGZyZWVfdGV4dF9jb2x1bW46IFRoZSBmcmVlX3RleHRfY29sdW1uIG9mIHRoaXMgTWFwVGVtcGxhdGVDb2x1bW4uCiAgICAgICAgOnR5cGUgZnJlZV90ZXh0X2NvbHVtbjogc3RyCiAgICAgICAgIiIiCiAgICAgICAgaWYgZnJlZV90ZXh0X2NvbHVtbiBpcyBOb25lOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHZhbHVlIGZvciBgZnJlZV90ZXh0X2NvbHVtbmAsIG11c3Qgbm90IGJlIGBOb25lYCIpICAjIG5vcWE6IEU1MDEKCiAgICAgICAgc2VsZi5fZnJlZV90ZXh0X2NvbHVtbiA9IGZyZWVfdGV4dF9jb2x1bW4KCiAgICBAcHJvcGVydHkKICAgIGRlZiB0ZW1wbGF0ZV9jb2x1bW4oc2VsZikgLT4gVGVtcGxhdGVDb2x1bW46CiAgICAgICAgIiIiR2V0cyB0aGUgdGVtcGxhdGVfY29sdW1uIG9mIHRoaXMgTWFwVGVtcGxhdGVDb2x1bW4uCgoKICAgICAgICA6cmV0dXJuOiBUaGUgdGVtcGxhdGVfY29sdW1uIG9mIHRoaXMgTWFwVGVtcGxhdGVDb2x1bW4uCiAgICAgICAgOnJ0eXBlOiBUZW1wbGF0ZUNvbHVtbgogICAgICAgICIiIgogICAgICAgIHJldHVybiBzZWxmLl90ZW1wbGF0ZV9jb2x1bW4KCiAgICBAdGVtcGxhdGVfY29sdW1uLnNldHRlcgogICAgZGVmIHRlbXBsYXRlX2NvbHVtbihzZWxmLCB0ZW1wbGF0ZV9jb2x1bW46IFRlbXBsYXRlQ29sdW1uKToKICAgICAgICAiIiJTZXRzIHRoZSB0ZW1wbGF0ZV9jb2x1bW4gb2YgdGhpcyBNYXBUZW1wbGF0ZUNvbHVtbi4KCgogICAgICAgIDpwYXJhbSB0ZW1wbGF0ZV9jb2x1bW46IFRoZSB0ZW1wbGF0ZV9jb2x1bW4gb2YgdGhpcyBNYXBUZW1wbGF0ZUNvbHVtbi4KICAgICAgICA6dHlwZSB0ZW1wbGF0ZV9jb2x1bW46IFRlbXBsYXRlQ29sdW1uCiAgICAgICAgIiIiCgogICAgICAgIHNlbGYuX3RlbXBsYXRlX2NvbHVtbiA9IHRlbXBsYXRlX2NvbHVtbgo8fGZpbV9zdWZmaXh8PgogICAgICAgIDp0eXBlIGZyZWVfdGV4dF9jb2x1bW46IHN0cgogICAgICAgIDpwYXJhbSB0ZW1wbGF0ZV9jb2x1bW46IFRoZSB0ZW1wbGF0ZV9jb2x1bW4gb2YgdGhpcyBNYXBUZW1wbGF0ZUNvbHVtbi4gICMgbm9xYTogRTUwMQogICAgICAgIDp0eXBlIHRlbXBsYXRlX2NvbHVtbjogVGVtcGxhdGVDb2x1bW4KICAgICAgICAiIiIKPHxmaW1fZW5kfD4="]
["a39c386e85319f586368e6f170a94092f785b729-3","a39c386e85319f586368e6f170a94092f785b729","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBqc29uCmltcG9ydCByZXF1ZXN0cwppbXBvcnQgbG9nZ2luZwppbXBvcnQgaW8KaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgYmFzZTY0CgppbXBvcnQgdG9yY2gKaW1wb3J0IHRvcmNoLm5uIGFzIG5uCmltcG9ydCB0b3JjaC51dGlscy5kYXRhCmZyb20gc2tsZWFybi5wcmVwcm9jZXNzaW5nIGltcG9ydCBNaW5NYXhTY2FsZXIKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAoKCmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpkZXZpY2UgPSB0b3JjaC5kZXZpY2UoJ2N1ZGE6MCcgaWYgdG9yY2guY3VkYS5pc19hdmFpbGFibGUoKSBlbHNlICdjcHUnKQoKY2xhc3MgTFNUTShubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGlucHV0X3NpemU9MSwgaGlkZGVuX2xheWVyX3NpemU9NTAsIG91dHB1dF9zaXplPTEsIGxheWVycz0xKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLmhpZGRlbl9sYXllcl9zaXplID0gaGlkZGVuX2xheWVyX3NpemUKICAgICAgICBzZWxmLmlucHV0X3NpemUgPSBpbnB1dF9zaXplCiAgICAgICAgc2VsZi5sc3RtID0gbm4uTFNUTShpbnB1dF9zaXplLCBzZWxmLmhpZGRlbl9sYXllcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2xheWVycz1sYXllcnMpLnRvKGRldmljZSkKICAgICAgICBzZWxmLmxpbmVhciA9IG5uLkxpbmVhcihoaWRkZW5fbGF5ZXJfc2l6ZSwgb3V0cHV0X3NpemUpLnRvKGRldmljZSkKCiAgICBkZWYgZm9yd2FyZChzZWxmLCBpbnB1dF9zZXEpOgogICAgICAgIGxzdG1fb3V0LCBfID0gc2VsZi5sc3RtKGlucHV0X3NlcSkKICAgICAgICBwcmVkaWN0aW9ucyA9IHNlbGYubGluZWFyKGxzdG1fb3V0KQogICAgICAgIHJldHVybiBwcmVkaWN0aW9ucwoKCmRlZiBtb2RlbF9mbihtb2RlbF9kaXIpOgogICAgbG9nZ2VyLmluZm8oJ0xvYWRpbmcgdGhlIG1vZGVsLicpCiAgICBwcmludCgnISEhISEhISEhISEhIE1vZGVsIGRpcjonKQogICAgcHJpbnQobW9kZWxfZGlyKQogICAgbW9kZWwgPSBMU1RNKCkKICAgIHdpdGggb3BlbignbW9kZWwucHRoJywgJ3JiJykgYXMgZjoKICAgICAgICBtb2RlbC5sb2FkX3N0YXRlX2RpY3QodG9yY2gubG9hZChmLCBtYXBfbG9jYXRpb249dG9yY2guZGV2aWNlKGRldmljZSkpKQogICAgbW9kZWwudG8oZGV2aWNlKS5ldmFsKCkKICAgIGxvZ2dlci5pbmZvKCdEb25lIGxvYWRpbmcgbW9kZWwnKQogICAgcmV0dXJuIG1vZGVsCgoKZGVmIGlucHV0X2ZuKHJlcXVlc3RfYm9keSwgY29udGVudF90eXBlPSd0ZXh0L2NzdicpOgogICAgcHJpbnQoJyEhISEhISEhISEhISEhISEhISBEZXNlcmlhbGl6aW5nIHRoZSBpbnB1dCBkYXRhLicpCiAgICBwcmludChyZXF1ZXN0X2JvZHkpCiAgICBpZiBjb250ZW50X3R5cGUgPT0gJ3RleHQvY3N2JzoKICAgICAgICBkZiA9IHBkLnJlYWRfY3N2KGlvLkJ5dGVzSU8ocmVxdWVzdF9ib2R5LmVuY29kZSgndXRmLTgnKSksIGVuY29kaW5nPSd1dGY4JywgaGVhZGVyPU5vbmUpCiAgICAgICAgY29uY2F0X2RhdGEgPSBOb25lCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGRmLmR0eXBlcykpOgogICAgICAgICAgICBwcmludChpKQogICAgICAgICAgICBpZiBkZi5kdHlwZXNbaV0gPT0gJ2Zsb2F0NjQnOgogICAgICAgICAgICAgICAgaWYgY29uY2F0X2RhdGEgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICBjb25jYXRfZGF0YSA9IHRvcmNoLkZsb2F0VGVuc29yKGRmLmlsb2NbOixpXSkudmlldygxLCBkZi5pbG9jWzosaV0uc2hhcGVbMF0pCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHByaW50KGNvbmNhdF9kYXRhLnNoYXBlKQogICAgICAgICAgICAgICAgICAgIHByaW50KHRvcmNoLkZsb2F0VGVuc29yKGRmLmlsb2NbOixpXSkudmlldygxLCBkZi5pbG9jWzosaV0uc2hhcGVbMF0pLnNoYXBlKQogICAgICAgICAgICAgICAgICAgIGNvbmNhdF9kYXRhID0gdG9yY2guY2F0KChjb25jYXRfZGF0YSwgdG9yY2guRmxvYXRUZW5zb3IoZGYuaWxvY1s6LGldKS52aWV3KDEsIGRmLmlsb2NbOixpXS5zaGFwZVswXSkgKSwgMCkKICAgICAgICBkYXRhX291dCA9IGNvbmNhdF9kYXRhLnRyYW5zcG9zZSgwLDEpLnZpZXcoY29uY2F0X2RhdGEuc2hhcGVbMV0gLGNvbmNhdF9kYXRhLnNoYXBlWzBdKQogICAgICAgIHJldHVybiBkYXRhX291dAogICAgcmFpc2UgRXhjZXB0aW9uKGYnUmVxdWVzdGVkIHVuc3VwcG9ydGVkIENvbnRlbnRUeXBlIGluIGNvbnRlbnRfdHlwZSB7Y29udGVudF90eXBlfScpCgpkZWYgcHJlZGljdF9mbihpbnB1dF9kYXRhLCBtb2RlbCk6CiAgICBpZiAoaW5wdXRfZGF0YSBpcyBOb25lIG9yIG1vZGVsIGlzIE5vbmUpOgogICAgICAgIGxvZ2dlci5pbmZvKGlucHV0X2RhdGEpCiAgICAgICAgbG9nZ2VyLmluZm8obW9kZWwpCiAgICAgICAgbG9nZ2VyLmluZm8oJ0VtcHR5IGlucHV0IGRhdGEgb3IgbW9kZWwuJykKICAgIHNjYWxlciA9IE1pbk1heFNjYWxlcihmZWF0dXJlX3JhbmdlPSgtMSwgMSkpCiAgICBub3JtYWxpemVkX2lucHV0ID0gdG9yY2guRmxvYXRUZW5zb3Ioc2NhbGVyLmZpdF90cmFuc2Zvcm0oaW5wdXRfZGF0YSkpCiAgICBwcmludChub3JtYWxpemVkX2lucHV0KQogICAgbm9ybWFsaXplZF9pbnB1dCA9IG5vcm1hbGl6ZWRfaW5wdXQudmlldyhub3JtYWxpemVkX2lucHV0LnNoYXBlWzBdICxub3JtYWxpemVkX2lucHV0LnNoYXBlWzFdLCAxKQogICAgIyBwcmludChub3JtYWxpemVkX2lucHV0KQogICAgcmVhZGluZ3NfZGF0YSA9IG5vcm1hbGl6ZWRfaW5wdXRbOi0xLCA6LCA6XQogICAgcmVhZGluZ3NfbGFiZWxzID0gbm9ybWFsaXplZF9pbnB1dFsxOiwgOiwgOl0KICAgIGRhdGFfbG9zcyA9IFtdCiAgICBwcmludChyZWFkaW5nc19kYXRhLnNoYXBlLCByZWFkaW5nc19sYWJlbHMuc2hhcGUpCiAgICAjICAgICByZXR1cm4gTm9uZQogICAgaWYgdG9yY2guY3VkYS5pc19hdmFpbGFibGUoKToKICAgICAgICByZWFkaW5nc19kYXRhID0gcmVhZGluZ3NfZGF0YS50byhkZXZpY2UpCiAgICAgICAgcmVhZGluZ3NfbGFiZWxzID0gcmVhZGluZ3NfbGFiZWxzLnRvKGRldmljZSkKICAgIHRlc3RfcHJlZCA9IG1vZGVsKHJlYWRpbmdzX2RhdGEpCiAgICBsb3NzX2Z1bmN0aW9uID0gbm4uTVNFTG9zcygpCiAgICBmb3IgaSBpbiByYW5nZShyZWFkaW5nc19sYWJlbHMuc2hhcGVbMV0pOgogICAgICAgIGRhdGFfbG9zcy5hcHBlbmQobG9zc19mdW5jdGlvbih0ZXN0X3ByZWRbOiwgaSwgOl0sIHJlYWRpbmdzX2xhYmVsc1s6LCBpLCA6XSkuaXRlbSgpKQogICAgcmV0dXJuICh0ZXN0X3ByZWQsIHJlYWRpbmdzX2xhYmVscywgZGF0YV9sb3NzKQoKZGVmIG91dHB1dF9mbihwcmVkaWN0aW9uX291dHB1dCwgYWNjZXB0PSdhcHBsaWNhdGlvbi9qc29uJyk6CiAgICB0ZXN0X3ByZWQsIHJlYWRpbmdzX2xhYmVscywgZGF0YV9sb3NzID0gcHJlZGljdGlvbl9vdXRwdXQKICAgIHBsdC5maWd1cmUoZmlnc2l6ZT0oMTAsNSkpCiAgICBwbHQuZ3JpZChUcnVlKQogICAgcGx0LnRpdGxlKCdJbmdlc3RlZCBEYXRhIGFuZCBQcmVkaWN0aW9uIFBsb3QnKQogICAgcGx0LmF1dG9zY2FsZShheGlzPSd4JywgdGlnaHQ9VHJ1ZSkKICAgIGxlZ2VuZF9oYW5kbGVzID0gW10KICAgIGZvciBpIGluIHJhbmdlKHJlYWRpbmdzX2xhYmVscy5zaGFwZVsxXSk6CiAgICAgICAgbm9ybWFsX3JlYWwsID0gcGx0LnBsb3QocmVhZGluZ3NfbGFiZWxzLmNwdSgpLmRldGFjaCgpWzosIGksIDpdLCBsYWJlbD0nUmVhbF97fScuZm9ybWF0KGkpKQogICAgICAgIG5vcm1hbF9wcmVkLCA9IHBsdC5wbG90KHRlc3RfcHJlZC5jcHUoKS5kZXRhY2goKVs6LCBpLCA6XSwgbGFiZWw9J1ByZWRpY3RlZF97fScuZm9ybWF0KGkpKQogICAgICAgIGxlZ2VuZF9oYW5kbGVzLmFwcGVuZChub3JtYWxfcmVhbCkKICAgICAgICBsZWdlbmRfaGFuZGxlcy5hcHBlbmQobm9ybWFsX3ByZWQpCiAgICBwbHQubGVnZW5kKGhhbmRsZXM9bGVnZW5kX2hhbmRsZXMpCiAgICBidWYgPSBpby5CeXRlc0lPKCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcGx0LnNhdmVmaWcoYnVmLCBmb3JtYXQ9J3BuZycpCiAgICBidWYuc2VlaygwKQogICAgcmVzdWx0ID0gewogICAgICAgICJwcmVkaWN0aW9uX2xvc3NfYnlfY29sdW1faW5kZXgiOiBkYXRhX2xvc3MsCjx8ZmltX2VuZHw+"]
["09aa2bcb176970b5bc9f96e6f21b63d937311f47-4","09aa2bcb176970b5bc9f96e6f21b63d937311f47","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIHdhaS5jb21tb24uY2xpLm9wdGlvbnMgaW1wb3J0IEZsYWdPcHRpb24KCmZyb20gLi4uLmNvcmUuY29tcG9uZW50IGltcG9ydCBQcm9jZXNzb3JDb21wb25lbnQKZnJvbSAuLi4uY29yZS5zdHJlYW0gaW1wb3J0IFRoZW5GdW5jdGlvbiwgRG9uZUZ1bmN0aW9uCmZyb20gLi4uLmNvcmUuc3RyZWFtLnV0aWwgaW1wb3J0IFByb2Nlc3NTdGF0ZSwgUmVxdWlyZXNOb0ZpbmFsaXNhdGlvbgpmcm9tIC4uLi5kb21haW4uaW1hZ2Uub2JqZWN0X2RldGVjdGlvbiBpbXBvcnQgSW1hZ2VPYmplY3REZXRlY3Rpb25JbnN0YW5jZQpmcm9tIC4uLi5kb21haW4uaW1hZ2Uub2JqZWN0X2RldGVjdGlvbi51dGlsIGltcG9ydCBnZXRfb2JqZWN0X2xhYmVsCmZyb20gLi4uLmRvbWFpbi5pbWFnZS5zZWdtZW50YXRpb24gaW1wb3J0IEltYWdlU2VnbWVudGF0aW9uSW5zdGFuY2UsIEltYWdlU2VnbWVudGF0aW9uQW5ub3RhdGlvbgpmcm9tIC4uLi5kb21haW4uaW1hZ2Uuc2VnbWVudGF0aW9uLnV0aWwgaW1wb3J0IFVubGFiZWxsZWRJbnB1dE1peGluLCBtYXNrX2Zyb21fcmVjdGFuZ2xlLCBtYXNrX2Zyb21fcG9seWdvbgoKCmNsYXNzIE9EMklTWERDKAogICAgUmVxdWlyZXNOb0ZpbmFsaXNhdGlvbiwKICAgIFVubGFiZWxsZWRJbnB1dE1peGluLAogICAgUHJvY2Vzc29yQ29tcG9uZW50W0ltYWdlT2JqZWN0RGV0ZWN0aW9uSW5zdGFuY2UsIEltYWdlU2VnbWVudGF0aW9uSW5zdGFuY2VdCik6CiAgICAiIiIKICAgIENyb3NzLWRvbWFpbiBjb252ZXJ0ZXIgZnJvbSB0aGUgaW1hZ2Ugb2JqZWN0LWRldGVjdGlvbiBkb21haW4gdG8gdGhlCiAgICBpbWFnZSBzZWdtZW50YXRpb24gZG9tYWluLgogICAgIiIiCiAgICBlcnJvcl9vbl91bnNwZWNpZmllZF9sYWJlbDogYm9vbCA9IEZsYWdPcHRpb24oCiAgICAgICAgIi0tbGFiZWwtZXJyb3IiLAogICAgICAgIGhlbHA9IndoZXRoZXIgdG8gcmFpc2UgZXJyb3JzIHdoZW4gYW4gdW5zcGVjaWZpZWQgbGFiZWwgaXMgZW5jb3VudGVyZWQgIgogICAgICAgICAgICAgIihkZWZhdWx0IGlzIHRvIGlnbm9yZSkiCiAgICApCgogICAgZGVmIHByb2Nlc3NfZWxlbWVudCgKICAgICAgICAgICAgc2VsZiwKICAgICAgICAgICAgZWxlbWVudDogSW1hZ2VPYmplY3REZXRlY3Rpb25JbnN0YW5jZSwKICAgICAgICAgICAgdGhlbjogVGhlbkZ1bmN0aW9uW0ltYWdlU2VnbWVudGF0aW9uSW5zdGFuY2VdLAogICAgICAgICAgICBkb25lOiBEb25lRnVuY3Rpb24KICAgICk6CiAgICAgICAgIyBJZiB0aGUgaW5zdGFuY2UgaXMgYSBuZWdhdGl2ZSwgbGVhdmUgaXQgYXMgb25lCiAgICAgICAgaWYgZWxlbWVudC5hbm5vdGF0aW9ucyBpcyBOb25lOgogICAgICAgICAgICByZXR1cm4gdGhlbihJbWFnZVNlZ21lbnRhdGlvbkluc3RhbmNlKGVsZW1lbnQuZGF0YSwgTm9uZSkpCgogICAgICAgICMgQ3JlYXRlIGFuIGVtcHR5IHNlZ21lbnRhdGlvbiBhbm5vdGF0aW9uCiAgICAgICAgYW5ub3RhdGlvbiA9IEltYWdlU2VnbWVudGF0aW9uQW5ub3RhdGlvbihzZWxmLmxhYmVscywgZWxlbWVudC5kYXRhLnNpemUpCgogICAgICAgICMgU2VnbWVudCBsYWJlbHMgaW4gcmV2ZXJzZSBkZWZpbml0aW9uIG9yZGVyIHNvIHRoYXQgbG93ZXItcHJpb3JpdHkgYW5ub3RhdGlvbnMKICAgICAgICAjIGFyZSBvdmVycmlkZGVuIGJ5IGhpZ2hlci1wcmlvcml0eSBvbmVzCiAgICAgICAgZm9yIGxhYmVsIGluIHJldmVyc2VkKHNlbGYubGFiZWxzKToKICAgICAgICAgICAgZm9yIGxvY2F0ZWRfb2JqZWN0IGluIGVsZW1lbnQuYW5ub3RhdGlvbnM6CiAgICAgICAgICAgICAgICAjIEdldCB0aGUgbGFiZWwgZm9yIHRoZSBsb2NhdGVkIG9iamVjdAogICAgICAgICAgICAgICAgbG9jYXRlZF9vYmplY3RfbGFiZWwgPSBnZXRfb2JqZWN0X2xhYmVsKGxvY2F0ZWRfb2JqZWN0KQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgIyBDaGVjayBmb3IgdW5zcGVjaWZpZWQgbGFiZWxzCiAgICAgICAgICAgICAgICBpZiBzZWxmLmVycm9yX29uX3Vuc3BlY2lmaWVkX2xhYmVsIGFuZCBsb2NhdGVkX29iamVjdF9sYWJlbCBub3QgaW4gc2VsZi5sYWJlbF9sb29rdXA6CiAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKGYiVW5zcGVjaWZpZWQgbGFiZWwgJ3tsb2NhdGVkX29iamVjdF9sYWJlbH0nIikKCjx8ZmltX2VuZHw+"]
["3aaa7e64079dc80d56c42ed8f2b7be21c41ab838-2","3aaa7e64079dc80d56c42ed8f2b7be21c41ab838","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIGdyaWQobD00LGM9NCk6CiAgbDEgPSAnKycgKyAnLScgKiBjICsgJysnICsgJy0nICogYyArICcrJwogIGxuID0gJ3wnICsgJyAnICogYyArICd8JyArICcgJyAqIGMgKyAnfCcKICBwcmludChsMSkKPHxmaW1fZW5kfD4="]
["aaf36a3c1afa8caabb6642fff09d5887c6441e64-1","aaf36a3c1afa8caabb6642fff09d5887c6441e64","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMCBQb2xvIERpZ2l0YWwgQXNzZXRzLCBMdGQuCiMKIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CiMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAojIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwojIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiMKIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgojIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAojIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQojIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAojIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCiMgU09GVFdBUkUKCmltcG9ydCBhc3luY2lvCmltcG9ydCBvcwoKZnJvbSBwb2xvZnV0dXJlcyBpbXBvcnQgV3NDbGllbnQKCgojIEFjY291bnQgS2V5cwpBUElfS0VZID0gb3MuZW52aXJvblsnUEZfQVBJX0tFWSddClNFQ1JFVCA9IG9zLmVudmlyb25bJ1BGX1NFQ1JFVCddCkFQSV9QQVNTID0gb3MuZW52aXJvblsnUEZfUEFTUyddCgpTWU1CT0wgPSAnQlRDVVNEVFBFUlAnCjx8ZmltX2hvbGV8PgogICAgICAgIGlmIG1zZ1sndG9waWMnXSA9PSBmJy9jb250cmFjdC9pbnN0cnVtZW50OntTWU1CT0x9JzoKICAgICAgICAgICAgcHJpbnQoZidHZXQge1NZTUJPTH0gSW5kZXggUHJpY2U6IHttc2dbImRhdGEiXX0nKQogICAgICAgIGVsaWYgbXNnWyd0b3BpYyddID09IGYnL2NvbnRyYWN0TWFya2V0L2V4ZWN1dGlvbjp7U1lNQk9MfSc6CiAgICAgICAgICAgIHByaW50KGYnTGFzdCBFeGVjdXRpb246IHttc2dbImRhdGEiXX0nKQogICAgICAgIGVsaWYgbXNnWyd0b3BpYyddID09IGYnL2NvbnRyYWN0TWFya2V0L2xldmVsMjp7U1lNQk9MfSc6CiAgICAgICAgICAgIHByaW50KGYnR2V0IHtTWU1CT0x9IExldmVsIDIgOnttc2dbImRhdGEiXX0nKQoKICAgIHdzX2NsaWVudCA9IFdzQ2xpZW50KG9uX21lc3NhZ2UsIEFQSV9LRVksIFNFQ1JFVCwgQVBJX1BBU1MpCgogICAgYXdhaXQgd3NfY2xpZW50LmNvbm5lY3QoKQoKICAgIGF3YWl0IHdzX2NsaWVudC5zdWJzY3JpYmUoZicvY29udHJhY3QvaW5zdHJ1bWVudDp7U1lNQk9MfScpCiAgICBhd2FpdCB3c19jbGllbnQuc3Vic2NyaWJlKGYnL2NvbnRyYWN0TWFya2V0L2V4ZWN1dGlvbjp7U1lNQk9MfScpCiAgICBhd2FpdCB3c19jbGllbnQuc3Vic2NyaWJlKGYnL2NvbnRyYWN0TWFya2V0L2xldmVsMjp7U1lNQk9MfScpCgogICAgYXdhaXQgYXN5bmNpby5zbGVlcCgzMCkKCiAgICBhd2FpdCB3c19jbGllbnQuZGlzY29ubmVjdCgpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGFzeW5jaW8ucnVuKHdzX3N0cmVhbSgpKQo8fGZpbV9zdWZmaXh8PgoKCmFzeW5jIGRlZiB3c19zdHJlYW0oKToKICAgIGRlZiBvbl9tZXNzYWdlKG1zZyk6Cjx8ZmltX2VuZHw+"]
["a35174ef149b0c573015c73b9abf0bad5fd15ac6-3","a35174ef149b0c573015c73b9abf0bad5fd15ac6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGVlCmltcG9ydCB1bml0dGVzdApmcm9tIGVlbW9udCBpbXBvcnQgZWVMaXN0CgplZS5Jbml0aWFsaXplKCkKCmNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIiIiVGVzdHMgZm9yIGBlZW1vbnRgIHBhY2thZ2UuIiIiCiAgICAKICAgICMgT1ZFUkxPQURFRCBPUEVSQVRJT05TCiAgICAKPHxmaW1faG9sZXw+CiAgICAgICAgCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICB1bml0dGVzdC5tYWluKCkKPHxmaW1fc3VmZml4fD4KICAgIGRlZiB0ZXN0X2JpbmFyeTEoc2VsZik6CiAgICAgICAgIiIiVGVzdCB0aGUgZWVMaXN0IG1vZHVsZSBmb3IgYmluYXJ5IG9wZXJhdG9ycyAxIiIiCiAgICAgICAgYmluYXJ5MV90ZXN0ZWQgPSBlZS5MaXN0KFsxLDIsM10pICsgZWUuTGlzdChbNCw1LDZdKSAqIDUKICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYmluYXJ5MV90ZXN0ZWQsIGVlLmVlX2xpc3QuTGlzdCkKPHxmaW1fZW5kfD4="]
["6e9689816ef41a1a822dc74b84af7fa8734789d6-5","6e9689816ef41a1a822dc74b84af7fa8734789d6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCmZyb20gbWF0aCBpbXBvcnQgbG9nCmZyb20gY29weSBpbXBvcnQgY29weQpmcm9tIHJhbmRvbSBpbXBvcnQgc2h1ZmZsZSwgcmFuZHJhbmdlLCBzZWVkCgoKc2VlZCg0MikKCk5VTV9ESUdJVFMgPSA0CgoKZGVmIGlzX2FsbG93ZWRfbnVtYmVyKG51bWJlcik6CiAgICByZXR1cm4gbGVuKHN0cihudW1iZXIpKSA9PSBOVU1fRElHSVRTIGFuZCBsZW4oc2V0KHN0cihudW1iZXIpKSkgPT0gTlVNX0RJR0lUUwoKCkFMTF9OVU1CRVJTID0gW251bWJlciBmb3IgbnVtYmVyIGluIHJhbmdlKDEwMDAsIDEwMDAwKSBpZiBpc19hbGxvd2VkX251bWJlcihudW1iZXIpXQpQT1RFTlRJQUxfQU5TV0VSUyA9IFsoMCwgMSksICgwLCAyKSwgKDEsIDEpLCAoMSwgMCksICgwLCAwKSwgKDAsIDMpLCAoMSwgMiksICgyLCAwKSwgKDIsIDEpLCAoMywgMCksICgwLCA0KSwgKDEsIDMpLCAoMiwgMiksICg0LCAwKV0KIyB0aGlzIG9yZGVyIHNob3VsZCBhY2NlbGVyYXRlIHRoZSBleGVjdXRpb24gb2YgcXVlc3Rpb25fZW50cm9weSgpCgoKZGVmIGNvdW50X2J1bGxzX2FuZF9jb3dzKG51bWJlciwgcXVlc3Rpb24pOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBudW1iZXIgPSBzdHIobnVtYmVyKQogICAgcXVlc3Rpb24gPSBzdHIocXVlc3Rpb24pCiAgICBidWxscyA9IDAKICAgIGNvd3MgPSAwCjx8ZmltX2VuZHw+"]
["6e6d6ba097f152191820153e69491eb4e0aa39c5-4","6e6d6ba097f152191820153e69491eb4e0aa39c5","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgoiIiIKQnJpbmcgbW9kdWxlLXNwZWNpZmljIGRhdGEgaW50byBjb25mb3JtYW5jZSB3aXRoIGV4aXN0aW5nIEwxME4uCiIiIgo8fGZpbV9ob2xlfD4KaW1wb3J0IHlhbWwKCmdsb2JhbF9maWxlX2NvdW50ID0gMApnbG9iYWxfZW50cnlfY291bnQgPSAwCgpmaWxlX25hbWUgPSBzeXMuYXJndlsxXQp0b3BfbGV2ZWxfbmFtZSA9IHN5cy5hcmd2WzJdCgp3aXRoIG9wZW4oZmlsZV9uYW1lKSBhcyBpbl9maWxlOgogICAgaW5fZGF0YSA9IGpzb24ubG9hZChpbl9maWxlKQoKICAgIGRkID0ge30KICAgIGZvciBkYXR1bSBpbiBpbl9kYXRhOgogICAgICAgIGxkID0ge30KICAgICAgICBkZFtkYXR1bVsiY29kZSJdXSA9IGxkCiAgICAgICAgZm9yIGxvY2FsZSBpbiBkYXR1bVsnbG9jYWxlcyddOgogICAgICAgICAgICBsZFtsb2NhbGVbImxvY2FsZV9jb2RlIl1dID0gbG9jYWxlWyJuYW1lIl0KICAgIHByaW50KHlhbWwuZHVtcCh7dG9wX2xldmVsX25hbWU6IGRkfSkpCjx8ZmltX3N1ZmZpeHw+CgppbXBvcnQganNvbgppbXBvcnQgc3lzCgo8fGZpbV9lbmR8Pg=="]
["a326b007977200ae9ab95ddd6d078f14f79fb9b3-1","a326b007977200ae9ab95ddd6d078f14f79fb9b3","PHxmaW1fcHJlZml4fD4KCgpmcm9tIGJlcnQtc2VydmluZy5jbGllbnQgaW1wb3J0IEJlcnRDbGllbnQKaW1wb3J0IG51bXB5IGFzIG5wCjx8ZmltX2hvbGV8PgoKCmRlZiBjb3NpbmVfc2ltKHMxLCBzMik6CiAgICByZXR1cm4gbnAuZG90KHMxWzAsOl0sczJbMCw6XSkvKG5wLmxpbmFsZy5ub3JtKHMxKSpucC5saW5hbGcubm9ybShzMikrMWUtOSkKPHxmaW1fc3VmZml4fD4KCmJjID0gQmVydENsaWVudCgpCnN0cmluZ3MgPSBbJ2hlaiBob3BwJywgJ2hlaiBob3BwJ10KZW5jID0gYmMuZW5jb2RlKHN0cmluZ3MpCjx8ZmltX2VuZHw+"]
["61cafa3720dba7cb5ce2f3b9a347d1aa3a28438a-3","61cafa3720dba7cb5ce2f3b9a347d1aa3a28438a","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMTggQklSU0F4Mi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIwojIEdvb2dsZSBDb2RlIEphbSAyMDE3IFF1YWxpZmljYXRpb24gUm91bmQgLSBQcm9ibGVtIEEuIE92ZXJzaXplZCBQYW5jYWtlIEZsaXBwZXIKIyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9jb2RlamFtL2NvbnRlc3QvMzI2NDQ4Ni9kYXNoYm9hcmQjcz1wMwoKIwppbXBvcnQgb3MKZnJvbSBhcmdwYXJzZSBpbXBvcnQgQXJndW1lbnRQYXJzZXIKIyB1bmNvbXBsZXRlCgpkZWYgc2hvdyhOLE0sc2hvdyk6CiAgICAKCmRlZiByZWFkX2RhdGEoZmlsZW5hbWUpOgogICAgIyByZWFkIGlucHV0CiAgICBkYXRhID0gb3BlbihmaWxlbmFtZSkKICAgIGNvbnRlbnQgPSBbXQogICAgc2hvdyA9IFtdCiAgICBmb3IgbGluZSBpbiBkYXRhOgogICAgICAgIGNvbnRlbnQuYXBwZW5kKGxpbmUucnN0cmlwKCdcbicpLnNwbGl0KCIgIikpCgogICAgZm9yIGNhc2UgaW4gY29udGVudFsxOl06CiAgICAgICAgaWYgY2FzZVswXS5pc2RpZ2l0KCk6CiAgICAgICAgICAgIE4gPSBpbnQoY2FzZVswXSkKICAgICAgICAgICAgTSA9IGludChjYXNlWzFdKQogICAgICAgICAgICBzaG93ID0gW2kgZm9yIGkgaW4gY29udGVudFtjb250ZW50LmluZGV4KGNhc2UpKzE6Y29udGVudC5pbmRleChjYXNlKStNKzFdXSBpZiBNICE9IDAgZWxzZSBbXQogICAgICAgICAgICBzaG93KE4sTSxzaG93KQoKZGVmIGlzX3ZhbGlkX2ZpbGUocGFyc2VyLCBhcmcpOgogICAgIyBjaGVjayBpZiB0aGUgZmlsZSBleGlzdHMKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXJzZXIpOgogICAgICAgIHBhcnNlci5lcnJvcigiVGhlIGZpbGUgJXMgZG9lcyBub3QgZXhpc3QiICUgKGFyZykpCiAgICBlbHNlOgogICAgICAgIHJldHVybiBvcGVuKGFyZywgJ3InKQoKCmRlZiBtYWluKCk6CiAgICAjIHJlYWRpbmcgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKICAgIHBhcnNlciA9IEFyZ3VtZW50UGFyc2VyKHVzYWdlPSdmYXNoaW9uX3Nob3cgLWkgZmlsZW5hbWUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J1NvbHV0aW9uIHRvIEdvb2dsZSBDb2RlIEphbSAyMDE3IFF1YWxpZmljYXRpb24gUm91bmQgLSBQcm9ibGVtIEQuIEZhc2hpb24gU2hvdycpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctaScsIHJlcXVpcmVkPVRydWUsIGhlbHA9J0lucHV0IGZpbGUgbmFtZScsIGRlc3Q9J2ZpbGVfbmFtZScsCiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9J2ZpbGVuYW1lJywgdHlwZT1sYW1iZGEgeDogaXNfdmFsaWRfZmlsZShwYXJzZXIsIHgpKQogICAgYXJndW1lbnRzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQo8fGZpbV9ob2xlfD4KaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHJlYWRfZGF0YSgKICAgICAgICAiL2hvbWUvbW91aGllZGRpbmUvU2NyaXZhbmlhL0NvZGVKYW0vMjAxNy9RdWFsaWZpY2F0aW9uL0Zhc2hpb24gU2hvdy90ZXN0LmluIikKPHxmaW1fc3VmZml4fD4KICAgIHJlYWRfZGF0YShhcmd1bWVudHMuZmlsZV9uYW1lLm5hbWUpCgoKPHxmaW1fZW5kfD4="]
["ee9bc01b18e8da948f924e5ebac24a47dfcd8b19-2","ee9bc01b18e8da948f924e5ebac24a47dfcd8b19","PHxmaW1fcHJlZml4fD4KZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybGpvaW4KCmZyb20gZmxhc2sgaW1wb3J0IEZsYXNrLCByZXF1ZXN0LCByZWRpcmVjdCwgYWJvcnQsIGpzb25pZnksIHJlbmRlcl90ZW1wbGF0ZSwgdXJsX2ZvcgoKZnJvbSBzaG9ydC5kYiBpbXBvcnQgRHluYW1vVGFibGUKCmFwcCA9IEZsYXNrKF9fbmFtZV9fKQoKCkBhcHAucm91dGUoIi8iLCBtZXRob2RzPVsiR0VUIl0pCmRlZiBnZXRfZm9ybSgpOgogICAgcmV0dXJuIHJlbmRlcl90ZW1wbGF0ZSgKICAgICAgICAic2hvcnRlbl9mb3JtLmppbmphMiIsCiAgICApCgoKQGFwcC5yb3V0ZSgiLyIsIG1ldGhvZHM9WyJQT1NUIl0pCmRlZiBwb3N0X2Zvcm0oKToKICAgIGxvbmdfdXJsID0gcmVxdWVzdC5mb3JtLmdldCgibG9uZ191cmwiKQogICAgZGJyZXNwb25zZSA9IGRicmVzcG9uc2VfZm9yX2xvbmdfdXJsKGxvbmdfdXJsKQogICAgcmV0dXJuIHJlbmRlcl90ZW1wbGF0ZSgKICAgICAgICAic2hvcnRfZGlzcGxheS5qaW5qYTIiLAogICAgICAgICoqZGJyZXNwb25zZSwKICAgICkKCgpAYXBwLnJvdXRlKCIvYXBpZG9jIikKZGVmIGFwaWRvYygpOgogICAgaG9zdF91cmwgPSByZXF1ZXN0Lmhvc3RfdXJsCiAgICBjcmVhdGVfZW5kcG9pbnQgPSB1cmxqb2luKGhvc3RfdXJsLCB1cmxfZm9yKCJjcmVhdGUiKSkKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoCiAgICAgICAgImFwaWRvYy5qaW5qYTIiLAogICAgICAgIGhvc3RfdXJsPWhvc3RfdXJsLAogICAgICAgIGNyZWF0ZV9lbmRwb2ludD1jcmVhdGVfZW5kcG9pbnQsCiAgICApCgoKQGFwcC5yb3V0ZSgiL2NyZWF0ZSIsIG1ldGhvZHM9WyJQT1NUIl0pCmRlZiBjcmVhdGUoKToKICAgIGxvbmdfdXJsID0gcmVxdWVzdC5nZXRfanNvbigpLmdldCgibG9uZ191cmwiKQogICAgZGJyZXNwb25zZSA9IGRicmVzcG9uc2VfZm9yX2xvbmdfdXJsKGxvbmdfdXJsKQogICAgcmV0dXJuIGpzb25pZnkoZGJyZXNwb25zZSkKCgpkZWYgZGJyZXNwb25zZV9mb3JfbG9uZ191cmwobG9uZ191cmwpOgogICAgIiIiQ29udmVydCBwb3N0IHJlcXVlc3QgaW50byBkYnJlc3BvbnNlLiIiIgogICAgdGFibGUgPSBEeW5hbW9UYWJsZSgpCiAgICBpZiBub3QgbG9uZ191cmw6CiAgICAgICAgYWJvcnQoNDAwKQogICAgZGJyZXNwb25zZSA9IHRhYmxlLnNhdmVfbG9uZ191cmwobG9uZ191cmwuc3RyaXAoKSkKICAgIGRicmVzcG9uc2VbInNob3J0Il0gPSB1cmxqb2luKHJlcXVlc3QuaG9zdF91cmwsIGRicmVzcG9uc2VbInNob3J0Il0pCiAgICByZXR1cm4gZGJyZXNwb25zZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKQGFwcC5yb3V0ZSgiLzxzaG9ydGxpbms+IikKZGVmIHJlZGlyZWN0X3RvX2xvbmcoc2hvcnRsaW5rKToKPHxmaW1fZW5kfD4="]
["3a35c678e5d00a185666fd77a2ed3ad7bedf72ef-2","3a35c678e5d00a185666fd77a2ed3ad7bedf72ef","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKCmNsYXNzIEZpbmRlcihvYmplY3QpOgogICAgIiIiCiAgICBDdXN0b20gaW1wb3J0ZXIgdGhhdCBzaG91bGQgZm9sbG93IDMwMi4KCiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWdfZmlsZW5hbWUpOgogICAgICAgICIiIgogICAgICAgIEluaXRzIHRoZSBmaW5kZXIuIEFjY2VwdHMgYSBmaWxlIG5hbWUgY29udGFpbmluZyB5YW1sIGRpY3Rpb25hcnkKICAgICAgICBkZXNjcmliaW5nIGhvdyB0byBkZWNvcmF0ZSBpbXBvcnRzLgoKICAgICAgICAiIiIKICAgICAgICBzZWxmLmNvbmZpZ19maWxlbmFtZSA9IGNvbmZpZ19maWxlbmFtZQogICAgICAgIHNlbGYuY29uZmlnID0gbG9hZF9jb25maWcoc2VsZi5jb25maWdfZmlsZW5hbWUpCgogICAgICAgIGNhbGxhYmxlX2xvYWRlciA9IENhbGxhYmxlTG9hZGVyKCkKICAgICAgICBzZWxmLmNhbGxhYmxlcyA9IHt9CiAgICAgICAgZm9yIG1vZHVsZV9uYW1lLCBtb2R1bGVfY29uZmlnIGluIHNlbGYuY29uZmlnLml0ZW1zKCk6CiAgICAgICAgICAgIHNlbGYuY2FsbGFibGVzW21vZHVsZV9uYW1lXSA9IFwKICAgICAgICAgICAgICAgIGNhbGxhYmxlX2xvYWRlci5sb2FkKG1vZHVsZV9jb25maWdbJ2NhbGxhYmxlJ10pCgogICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgogICAgICAgICIiIgogICAgICAgIE1ldGhvZCB0byBmaW5kIGEgbW9kdWxlLiBDaGVjayBpZiBtb2R1bGUgaXMgb25lIHdlIGFyZSBpbnRyZXN0ZWQgaW4uCiAgICAgICAgUmV0dXJuIE5vbmUgaWYgbm90IGludGVyZXN0ZWQuIEEgZmluZGVyIGlmIGludGVyZXN0ZWQKCiAgICAgICAgIiIiCiAgICAgICAgaWYgZnVsbG5hbWUgaW4gc2VsZi5jb25maWc6CiAgICAgICAgICAgIHJldHVybiBMb2FkZXIocGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbGxhYmxlc1tmdWxsbmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdbZnVsbG5hbWVdLmdldCgnY29uZmlnJykpCiAgICAgICAgcmV0dXJuIE5vbmUKCgpjbGFzcyBMb2FkZXIob2JqZWN0KToKICAgICIiIgogICAgQ3VzdG9tIGxvYWRlciB0aGF0IHNob3VsZCBmb2xsb3cgMzAyLgoKICAgICIiIgogICAgZGVjb3JhdGVkX2tleSA9ICdfX21hZ2ljX3RoZV9kZWNvcmF0ZWRfXycKCiAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgY2FsbGFibGVfLCBjYWxsYWJsZV9jb25maWcpOgogICAgICAgICIiIgogICAgICAgIEBwYXJhbSBwYXRoIC0gUGF0aCBwYXNzZWQgdG8gZmluZCBtb2R1bGUKICAgICAgICBAcGFyYW0gY2FsbGFibGVfIC0gQ2FsbGFibGUgdG8gYXBwbHkgdG8gbW9kdWxlCiAgICAgICAgQHBhcmFtIGNhbGxhYmxlX2NvbmZpZyAtIERpY3Rpb25hcnkgdG8gY29uZmlndXJlIGNhbGxhYmxlCgogICAgICAgICIiIgogICAgICAgIHNlbGYuX3BhdGggPSBwYXRoCiAgICAgICAgc2VsZi5fY2FsbGFibGUgPSBjYWxsYWJsZV8KICAgICAgICBzZWxmLl9jYWxsYWJsZV9jb25maWcgPSBjYWxsYWJsZV9jb25maWcKCiAgICBkZWYgaXNfZGVjb3JhdGVkKHNlbGYsIG1vZHVsZSk6CiAgICAgICAgIiIiCiAgICAgICAgUmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBvYmplY3QgaGFkIGFuIGF0dHJpYnV0ZSBzZXQgaW5kaWNhdGluZwogICAgICAgIHRoYXQgaXQgaGFzIGFscmVhZHkgYmVlbiBkZWNvcmF0ZWQuCgogICAgICAgIEBwYXJhbSBtb2R1bGUgLSBNb2R1bGUgdG8gY2hlY2sKICAgICAgICBAcmV0dXJuIEJvb2xlYW4KCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIGhhc2F0dHIobW9kdWxlLCBzZWxmLmRlY29yYXRlZF9rZXkpCgogICAgZGVmIHNldF9kZWNvcmF0ZWQoc2VsZiwgbW9kdWxlKToKICAgICAgICAiIiIKICAgICAgICBTZXRzIHRoZSBkZWNvcmF0ZWQgYXR0cmlidXRlLgoKICAgICAgICBAcGFyYW0gbW9kdWxlIC0gTW9kdWxlIHRvIGZsYWcgYXMgZGVjb3JhdGVkCgogICAgICAgICIiIgogICAgICAgIHNldGF0dHIobW9kdWxlLCBzZWxmLmRlY29yYXRlZF9rZXksIFRydWUpCgogICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAiIiIKICAgICAgICBJZiBhbiBleGlzdGluZyBvYmplY3QgbmFtZWQgZnVsbG5hbWUgaXMgaW4gc3lzLm1vZHVsZXMsCiAgICAgICAgdGhlIGxvYWRlciBtdXN0IHVzZSB0aGF0IG1vZHVsZSBiZWZvcmUgcnVubmluZyBjb2RlLgoKICAgICAgICBJZiBzeXMubW9kdWxlcyBkb2VzIG5vdCBjb250YWluIGZ1bGxuYW1lLCB0aGVuIGEgbmV3IG1vZHVsZQogICAgICAgIG9iamVjdCBtdXN0IGJlIGFkZGVkIHRvIHN5cy5tb2R1bGVzIGJlZm9yZSBydW5uaW5nIGFueSBjb2RlLgoKICAgICAgICBJZiB0aGUgbG9hZCBmYWlscywgdGhlIGxvYWRlciBuZWVkcyB0byByZW1vdmUgYW55IG1vZHVsZSB0aGF0IG1heQogICAgICAgIGhhdmUgYmVlbiBpbnNlcnRlZCBpbnRvIHN5cy5tb2R1bGVzLiBJZiB0aGUgbW9kdWxlIHdhcyBhbHJlYWR5CiAgICAgICAgaW4gc3lzLm1vZHVsZXMsIHRoZSBsb2FkZXIgbmVlZHMgdG8gbGVhdmUgaXQgYWxvbmUuCgogICAgICAgIEEgbG9hZGVkIG1vZHVsZSBtdXN0IGhhdmUgdGhlIF9fZmlsZV9fIGF0dHJpYnV0ZSBzZXQKICAgICAgICBBIGxvYWRlZCBtb2R1bGUgbXVzdCBoYXZlIHRoZSBfX25hbWVfXyBhdHRyaWJ1dGUgc2V0CiAgICAgICAgQSBsb2FkZWQgbW9kdWxlIG11c3QgaGF2ZSB0aGUgX19sb2FkZXJfXyBhdHRyaWJ1dGUgc2V0CiAgICAgICAgICAgIC0gc2hvdWxkIGJlIHRoaXMgbW9kdWxlCgogICAgICAgIFRoZSBwYWNrYWdlIGF0dHJpYnV0ZSBzaG91bGQgYmUgc2V0CiAgICAgICAgIiIiCiAgICAgICAgaWYgZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXM6CiAgICAgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQogICAgICAgICAgICBleGlzdGluZyA9IFRydWUKICAgICAgICBlbHNlOgogICAgICAgICAgICBtb2R1bGUgPSBNb2R1bGVMb2FkZXIoKS5sb2FkKGZ1bGxuYW1lLCBzZWxmLl9wYXRoKQogICAgICAgICAgICBleGlzdGluZyA9IEZhbHNlCgogICAgICAgIGlmIG5vdCBzZWxmLmlzX2RlY29yYXRlZChtb2R1bGUpOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9jYWxsYWJsZShtb2R1bGUsIHNlbGYuX2NhbGxhYmxlX2NvbmZpZykKICAgICAgICAgICAgICAgIHNlbGYuc2V0X2RlY29yYXRlZChtb2R1bGUpCiAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICBpZiBmdWxsbmFtZSBpbiBzeXMubW9kdWxlcyBhbmQgbm90IGV4aXN0aW5nOgogICAgICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tmdWxsbmFtZV0KICAgICAgICByZXR1cm4gbW9kdWxlCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBzeXMKCmZyb20gY29uZmlnIGltcG9ydCBsb2FkIGFzIGxvYWRfY29uZmlnCmZyb20gbG9hZGVycyBpbXBvcnQgQ2FsbGFibGVMb2FkZXIsIE1vZHVsZUxvYWRlcgo8fGZpbV9lbmR8Pg=="]
["3a35c678e5d00a185666fd77a2ed3ad7bedf72ef-4","3a35c678e5d00a185666fd77a2ed3ad7bedf72ef","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKZnJvbSBjb25maWcgaW1wb3J0IGxvYWQgYXMgbG9hZF9jb25maWcKZnJvbSBsb2FkZXJzIGltcG9ydCBDYWxsYWJsZUxvYWRlciwgTW9kdWxlTG9hZGVyCgoKY2xhc3MgRmluZGVyKG9iamVjdCk6CiAgICAiIiIKICAgIEN1c3RvbSBpbXBvcnRlciB0aGF0IHNob3VsZCBmb2xsb3cgMzAyLgoKICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZ19maWxlbmFtZSk6CiAgICAgICAgIiIiCiAgICAgICAgSW5pdHMgdGhlIGZpbmRlci4gQWNjZXB0cyBhIGZpbGUgbmFtZSBjb250YWluaW5nIHlhbWwgZGljdGlvbmFyeQogICAgICAgIGRlc2NyaWJpbmcgaG93IHRvIGRlY29yYXRlIGltcG9ydHMuCgogICAgICAgICIiIgogICAgICAgIHNlbGYuY29uZmlnX2ZpbGVuYW1lID0gY29uZmlnX2ZpbGVuYW1lCiAgICAgICAgc2VsZi5jb25maWcgPSBsb2FkX2NvbmZpZyhzZWxmLmNvbmZpZ19maWxlbmFtZSkKCiAgICAgICAgY2FsbGFibGVfbG9hZGVyID0gQ2FsbGFibGVMb2FkZXIoKQogICAgICAgIHNlbGYuY2FsbGFibGVzID0ge30KICAgICAgICBmb3IgbW9kdWxlX25hbWUsIG1vZHVsZV9jb25maWcgaW4gc2VsZi5jb25maWcuaXRlbXMoKToKICAgICAgICAgICAgc2VsZi5jYWxsYWJsZXNbbW9kdWxlX25hbWVdID0gXAogICAgICAgICAgICAgICAgY2FsbGFibGVfbG9hZGVyLmxvYWQobW9kdWxlX2NvbmZpZ1snY2FsbGFibGUnXSkKCiAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CiAgICAgICAgIiIiCiAgICAgICAgTWV0aG9kIHRvIGZpbmQgYSBtb2R1bGUuIENoZWNrIGlmIG1vZHVsZSBpcyBvbmUgd2UgYXJlIGludHJlc3RlZCBpbi4KICAgICAgICBSZXR1cm4gTm9uZSBpZiBub3QgaW50ZXJlc3RlZC4gQSBmaW5kZXIgaWYgaW50ZXJlc3RlZAoKICAgICAgICAiIiIKICAgICAgICBpZiBmdWxsbmFtZSBpbiBzZWxmLmNvbmZpZzoKICAgICAgICAgICAgcmV0dXJuIExvYWRlcihwYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsbGFibGVzW2Z1bGxuYW1lXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1tmdWxsbmFtZV0uZ2V0KCdjb25maWcnKSkKICAgICAgICByZXR1cm4gTm9uZQoKCmNsYXNzIExvYWRlcihvYmplY3QpOgogICAgIiIiCiAgICBDdXN0b20gbG9hZGVyIHRoYXQgc2hvdWxkIGZvbGxvdyAzMDIuCgogICAgIiIiCiAgICBkZWNvcmF0ZWRfa2V5ID0gJ19fbWFnaWNfdGhlX2RlY29yYXRlZF9fJwoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoLCBjYWxsYWJsZV8sIGNhbGxhYmxlX2NvbmZpZyk6CiAgICAgICAgIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBAcGFyYW0gcGF0aCAtIFBhdGggcGFzc2VkIHRvIGZpbmQgbW9kdWxlCiAgICAgICAgQHBhcmFtIGNhbGxhYmxlXyAtIENhbGxhYmxlIHRvIGFwcGx5IHRvIG1vZHVsZQogICAgICAgIEBwYXJhbSBjYWxsYWJsZV9jb25maWcgLSBEaWN0aW9uYXJ5IHRvIGNvbmZpZ3VyZSBjYWxsYWJsZQoKPHxmaW1fZW5kfD4="]
["e90ac34d0b283838b7d261ad0a7724a10f1b80e7-1","e90ac34d0b283838b7d261ad0a7724a10f1b80e7","PHxmaW1fcHJlZml4fD4KIyBQbG90IGEgZGVmYXVsdCBhcnJvdy4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojCmltcG9ydCBweXZpc3RhCm1lc2ggPSBweXZpc3RhLkFycm93KCkKbWVzaC5wbG90KHNob3dfZWRnZXM9VHJ1ZSkKPHxmaW1fZW5kfD4="]
["fef7d861e56ab8c02d9395d2b43c72ebab45a2a2-4","fef7d861e56ab8c02d9395d2b43c72ebab45a2a2","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFzayBpbXBvcnQgbWFrZV9yZXNwb25zZSwgcmVxdWVzdApmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQpmcm9tIGZsYXNrLmpzb24gaW1wb3J0IGpzb25pZnkKZnJvbSBhcHAubW9kdWxlcy5ncmFwaHFsIGltcG9ydCBncmFwaHFsCmZyb20gYXBwLm1vZHVsZXMubG9naW5fbWFuYWdlciBpbXBvcnQgbG9naW5fcmVxdWlyZWQKZnJvbSAuIGltcG9ydCBoZWFsdGhyZWNvcmQKaW1wb3J0IGpzb24KCgpAaGVhbHRocmVjb3JkLnJvdXRlKCcvPGhlYWx0aHJlY29yZF9pZD4nLCBtZXRob2RzPVsiR0VUIl0pCkBsb2dpbl9yZXF1aXJlZCgpCmRlZiBnZXRfaGVhbHRocmVjb3JkKGhlYWx0aHJlY29yZF9pZCk6CiAgICBociA9IGdyYXBocWwuZXhlY3V0ZSgKICAgICAgICAnJycKICAgICAgICBxdWVyeSB7CiAgICAgICAgaGVhbHRoUmVjb3JkKGlkOiAlcykgewogICAgICAgICAgICBpZAogICAgICAgICAgICBwYXRpZW50SWQKICAgICAgICAgICAgY29kZQogICAgICAgICAgICBtZWRpY2F0aW9uCiAgICAgICAgICAgIGRhdGUKICAgICAgICAgICAgaWRlbnRpZmllcgogICAgICAgICAgICBuYW1lCiAgICAgICAgfQogICAgfQogICAgJycnICUgaGVhbHRocmVjb3JkX2lkCiAgICApLmRhdGFbJ2hlYWx0aFJlY29yZCddCgogICAgcmV0dXJuIG1ha2VfcmVzcG9uc2UoCiAgICAgICAganNvbmlmeSh7CiAgICAgICAgICAgICdvayc6IFRydWUgaWYgaHIgIT0gTm9uZSBlbHNlIEZhbHNlLAogICAgICAgICAgICAnaGVhbHRoUmVjb3JkJzogaHIKICAgICAgICB9KSwgMjAwIGlmIGhyICE9IE5vbmUgZWxzZSA0MDAKICAgICkKCgpAaGVhbHRocmVjb3JkLnJvdXRlKCcvYWxsJywgbWV0aG9kcz1bIkdFVCJdKQpAbG9naW5fcmVxdWlyZWQoKQpkZWYgZ2V0X2FsbCgpOgogICAgb2Zmc2V0ID0gcmVxdWVzdC5hcmdzLmdldCgnb2Zmc2V0JywgZGVmYXVsdD0wLCB0eXBlPWludCkKICAgIGNvdW50ID0gcmVxdWVzdC5hcmdzLmdldCgnY291bnQnLCBkZWZhdWx0PTIwLCB0eXBlPWludCkKICAgIHBhdGllbnRfaWQgPSByZXF1ZXN0LmFyZ3MuZ2V0KCdwYXRpZW50SWQnLCBkZWZhdWx0PU5vbmUsIHR5cGU9aW50KQoKICAgIHJlc3VsdCA9IE5vbmUKICAgIGlmIHBhdGllbnRfaWQgPT0gTm9uZToKICAgICAgICByZXN1bHQgPSBncmFwaHFsLmV4ZWN1dGUoCiAgICAgICAgICAgICcnJwogICAgICAgIHF1ZXJ5IHsKICAgICAgICAgICAgaGVhbHRoUmVjb3JkcyhvZmZzZXQ6ICVzLCBjb3VudDogJXMpewogICAgICAgICAgICAgICAgdG90YWwKICAgICAgICAgICAgICAgIGVudHJ5ewogICAgICAgICAgICAgICAgICAgIGlkCiAgICAgICAgICAgICAgICAgICAgcGF0aWVudElkCiAgICAgICAgICAgICAgICAgICAgY29kZQogICAgICAgICAgICAgICAgICAgIG1lZGljYXRpb24KICAgICAgICAgICAgICAgICAgICBkYXRlCiAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcgogICAgICAgICAgICAgICAgICAgIG5hbWUKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG9mZnNldAogICAgICAgICAgICAgICAgY291bnQKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAnJycgJSAob2Zmc2V0LCBjb3VudCkKICAgICAgICApLmRhdGFbJ2hlYWx0aFJlY29yZHMnXQogICAgZWxzZToKICAgICAgICByZXN1bHQgPSBncmFwaHFsLmV4ZWN1dGUoCiAgICAgICAgICAgICcnJwogICAgICAgIHF1ZXJ5IHsKICAgICAgICAgICAgaGVhbHRoUmVjb3JkcyhvZmZzZXQ6ICVzLCBjb3VudDogJXMsIHBhdGllbnRJZDogJXMpewogICAgICAgICAgICAgICAgdG90YWwKICAgICAgICAgICAgICAgIGVudHJ5ewogICAgICAgICAgICAgICAgICAgIGlkCiAgICAgICAgICAgICAgICAgICAgcGF0aWVudElkCiAgICAgICAgICAgICAgICAgICAgY29kZQogICAgICAgICAgICAgICAgICAgIG1lZGljYXRpb24KICAgICAgICAgICAgICAgICAgICBkYXRlCiAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcgogICAgICAgICAgICAgICAgICAgIG5hbWUKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG9mZnNldAogICAgICAgICAgICAgICAgY291bnQKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAnJycgJSAob2Zmc2V0LCBjb3VudCwgcGF0aWVudF9pZCkKICAgICAgICApLmRhdGFbJ2hlYWx0aFJlY29yZHMnXQogICAgcmV0dXJuIG1ha2VfcmVzcG9uc2UoanNvbmlmeSh7J29rJzogVHJ1ZSwgJ2hlYWx0aHJlY29yZHMnOiByZXN1bHR9KSwgMjAwKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKQGhlYWx0aHJlY29yZC5yb3V0ZSgnJywgbWV0aG9kcz1bIlBPU1QiXSkKQGxvZ2luX3JlcXVpcmVkKCkKZGVmIGNyZWF0ZSgpOgo8fGZpbV9lbmR8Pg=="]
["6ecef1b9e4a6326580296849df70dc0e818e80f0-3","6ecef1b9e4a6326580296849df70dc0e818e80f0","PHxmaW1fcHJlZml4fD4KIiIiCglTbGVla1hNUFA6IFRoZSBTbGVlayBYTVBQIExpYnJhcnkKCUNvcHlyaWdodCAoQykgMjAxMCAgTmF0aGFuYWVsIEMuIEZyaXR6CglUaGlzIGZpbGUgaXMgcGFydCBvZiBTbGVla1hNUFAuCgogICAgU2VlIHRoZSBmaWxlIExJQ0VOU0UgZm9yIGNvcHlpbmcgcGVybWlzc2lvbi4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50LCB1bmljb2RlX2xpdGVyYWxzCgppbXBvcnQgc3lzCmltcG9ydCBjb3B5CmltcG9ydCBsb2dnaW5nCgppbXBvcnQgc2xlZWt4bXBwCmZyb20gc2xlZWt4bXBwIGltcG9ydCBwbHVnaW5zCgpmcm9tIHNsZWVreG1wcC5zdGFuemEgaW1wb3J0IE1lc3NhZ2UsIFByZXNlbmNlLCBJcSwgRXJyb3IKZnJvbSBzbGVla3htcHAuc3RhbnphLnJvc3RlciBpbXBvcnQgUm9zdGVyCmZyb20gc2xlZWt4bXBwLnN0YW56YS5uaWNrIGltcG9ydCBOaWNrCmZyb20gc2xlZWt4bXBwLnN0YW56YS5odG1saW0gaW1wb3J0IEhUTUxJTQoKZnJvbSBzbGVla3htcHAueG1sc3RyZWFtIGltcG9ydCBYTUxTdHJlYW0sIEpJRCwgdG9zdHJpbmcKZnJvbSBzbGVla3htcHAueG1sc3RyZWFtIGltcG9ydCBFVCwgcmVnaXN0ZXJfc3RhbnphX3BsdWdpbgpmcm9tIHNsZWVreG1wcC54bWxzdHJlYW0ubWF0Y2hlciBpbXBvcnQgKgpmcm9tIHNsZWVreG1wcC54bWxzdHJlYW0uaGFuZGxlciBpbXBvcnQgKgoKCmxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKIyBJbiBvcmRlciB0byBtYWtlIHN1cmUgdGhhdCBVbmljb2RlIGlzIGhhbmRsZWQgcHJvcGVybHkKIyBpbiBQeXRob24gMi54LCByZXNldCB0aGUgZGVmYXVsdCBlbmNvZGluZy4KaWYgc3lzLnZlcnNpb25faW5mbyA8ICgzLCAwKToKICAgIHJlbG9hZChzeXMpCiAgICBzeXMuc2V0ZGVmYXVsdGVuY29kaW5nKCd1dGY4JykKCgpjbGFzcyBCYXNlWE1QUChYTUxTdHJlYW0pOgoKICAgICIiIgogICAgVGhlIEJhc2VYTVBQIGNsYXNzIGFkYXB0cyB0aGUgZ2VuZXJpYyBYTUxTdHJlYW0gY2xhc3MgZm9yIHVzZQogICAgd2l0aCBYTVBQLiBJdCBhbHNvIHByb3ZpZGVzIGEgcGx1Z2luIG1lY2hhbmlzbSB0byBlYXNpbHkgZXh0ZW5kCiAgICBhbmQgYWRkIHN1cHBvcnQgZm9yIG5ldyBYTVBQIGZlYXR1cmVzLgoKICAgIEF0dHJpYnV0ZXM6CiAgICAgICBhdXRvX2F1dGhvcml6ZSAgIC0tIE1hbmFnZSBhdXRvbWF0aWNhbGx5IGFjY2VwdGluZyByb3N0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy4KICAgICAgIGF1dG9fc3Vic2NyaWJlICAgLS0gTWFuYWdlIGF1dG9tYXRpY2FsbHkgcmVxdWVzdGluZyBtdXR1YWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy4KICAgICAgIGlzX2NvbXBvbmVudCAgICAgLS0gSW5kaWNhdGVzIGlmIHRoaXMgc3RyZWFtIGlzIGZvciBhbiBYTVBQIGNvbXBvbmVudC4KICAgICAgIGppZCAgICAgICAgICAgICAgLS0gVGhlIFhNUFAgSklEIGZvciB0aGlzIHN0cmVhbS4KICAgICAgIHBsdWdpbiAgICAgICAgICAgLS0gQSBkaWN0aW9uYXJ5IG9mIGxvYWRlZCBwbHVnaW5zLgogICAgICAgcGx1Z2luX2NvbmZpZyAgICAtLSBBIGRpY3Rpb25hcnkgb2YgcGx1Z2luIGNvbmZpZ3VyYXRpb25zLgogICAgICAgcGx1Z2luX3doaXRlbGlzdCAtLSBBIGxpc3Qgb2YgYXBwcm92ZWQgcGx1Z2lucy4KICAgICAgIHNlbnRwcmVzZW5jZSAgICAgLS0gSW5kaWNhdGVzIGlmIGFuIGluaXRpYWwgcHJlc2VuY2UgaGFzIGJlZW4gc2VudC4KICAgICAgIHJvc3RlciAgICAgICAgICAgLS0gQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgc3Vic2NyaWJlZCBKSURzIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVpciBwcmVzZW5jZSBzdGF0dXNlcy4KCiAgICBNZXRob2RzOgogICAgICAgSXEgICAgICAgICAgICAgICAgICAgICAgLS0gRmFjdG9yeSBmb3IgY3JlYXRpbmcgYW4gSXEgc3Rhbnphcy4KICAgICAgIE1lc3NhZ2UgICAgICAgICAgICAgICAgIC0tIEZhY3RvcnkgZm9yIGNyZWF0aW5nIE1lc3NhZ2Ugc3Rhbnphcy4KICAgICAgIFByZXNlbmNlICAgICAgICAgICAgICAgIC0tIEZhY3RvcnkgZm9yIGNyZWF0aW5nIFByZXNlbmNlIHN0YW56YXMuCiAgICAgICBnZXQgICAgICAgICAgICAgICAgICAgICAtLSBSZXR1cm4gYSBwbHVnaW4gZ2l2ZW4gaXRzIG5hbWUuCiAgICAgICBtYWtlX2lxICAgICAgICAgICAgICAgICAtLSBDcmVhdGUgYW5kIGluaXRpYWxpemUgYW4gSXEgc3RhbnphLgogICAgICAgbWFrZV9pcV9lcnJvciAgICAgICAgICAgLS0gQ3JlYXRlIGFuIElxIHN0YW56YSBvZiB0eXBlICdlcnJvcicuCiAgICAgICBtYWtlX2lxX2dldCAgICAgICAgICAgICAtLSBDcmVhdGUgYW4gSXEgc3RhbnphIG9mIHR5cGUgJ2dldCcuCiAgICAgICBtYWtlX2lxX3F1ZXJ5ICAgICAgICAgICAtLSBDcmVhdGUgYW4gSXEgc3RhbnphIHdpdGggYSBnaXZlbiBxdWVyeS4KICAgICAgIG1ha2VfaXFfcmVzdWx0ICAgICAgICAgIC0tIENyZWF0ZSBhbiBJcSBzdGFuemEgb2YgdHlwZSAncmVzdWx0Jy4KICAgICAgIG1ha2VfaXFfc2V0ICAgICAgICAgICAgIC0tIENyZWF0ZSBhbiBJcSBzdGFuemEgb2YgdHlwZSAnc2V0Jy4KICAgICAgIG1ha2VfbWVzc2FnZSAgICAgICAgICAgIC0tIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIE1lc3NhZ2Ugc3RhbnphLgogICAgICAgbWFrZV9wcmVzZW5jZSAgICAgICAgICAgLS0gQ3JlYXRlIGFuZCBpbml0aWFsaXplIGEgUHJlc2VuY2Ugc3RhbnphLgogICAgICAgbWFrZV9xdWVyeV9yb3N0ZXIgICAgICAgLS0gQ3JlYXRlIGEgcm9zdGVyIHF1ZXJ5LgogICAgICAgcHJvY2VzcyAgICAgICAgICAgICAgICAgLS0gT3ZlcnJpZGVzIFhNTFN0cmVhbS5wcm9jZXNzLgogICAgICAgcmVnaXN0ZXJfcGx1Z2luICAgICAgICAgLS0gTG9hZCBhbmQgY29uZmlndXJlIGEgcGx1Z2luLgogICAgICAgcmVnaXN0ZXJfcGx1Z2lucyAgICAgICAgLS0gTG9hZCBhbmQgY29uZmlndXJlIG11bHRpcGxlIHBsdWdpbnMuCiAgICAgICBzZW5kX21lc3NhZ2UgICAgICAgICAgICAtLSBDcmVhdGUgYW5kIHNlbmQgYSBNZXNzYWdlIHN0YW56YS4KICAgICAgIHNlbmRfcHJlc2VuY2UgICAgICAgICAgIC0tIENyZWF0ZSBhbmQgc2VuZCBhIFByZXNlbmNlIHN0YW56YS4KICAgICAgIHNlbmRfcHJlc2VuY2Vfc3Vic2NyaWJlIC0tIFNlbmQgYSBzdWJzY3JpcHRpb24gcmVxdWVzdC4KICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZWZhdWx0X25zPSdqYWJiZXI6Y2xpZW50Jyk6CiAgICAgICAgIiIiCiAgICAgICAgQWRhcHQgYW4gWE1MIHN0cmVhbSBmb3IgdXNlIHdpdGggWE1QUC4KCiAgICAgICAgQXJndW1lbnRzOgogICAgICAgICAgICBkZWZhdWx0X25zIC0tIEVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IGRlZmF1bHQgWE1MIG5hbWVzcGFjZQogICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHVzZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgogICAgICAgICIiIgogICAgICAgIFhNTFN0cmVhbS5fX2luaXRfXyhzZWxmKQoKICAgICAgICAjIFRvIGNvbXBseSB3aXRoIFBFUDgsIG1ldGhvZCBuYW1lcyBub3cgdXNlIHVuZGVyc2NvcmVzLgogICAgICAgICMgRGVwcmVjYXRlZCBtZXRob2QgbmFtZXMgYXJlIHJlLW1hcHBlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCiAgICAgICAgc2VsZi5yZWdpc3RlclBsdWdpbiA9IHNlbGYucmVnaXN0ZXJfcGx1Z2luCiAgICAgICAgc2VsZi5tYWtlSXEgPSBzZWxmLm1ha2VfaXEKICAgICAgICBzZWxmLm1ha2VJcUdldCA9IHNlbGYubWFrZV9pcV9nZXQKICAgICAgICBzZWxmLm1ha2VJcVJlc3VsdCA9IHNlbGYubWFrZV9pcV9yZXN1bHQKICAgICAgICBzZWxmLm1ha2VJcVNldCA9IHNlbGYubWFrZV9pcV9zZXQKICAgICAgICBzZWxmLm1ha2VJcUVycm9yID0gc2VsZi5tYWtlX2lxX2Vycm9yCiAgICAgICAgc2VsZi5tYWtlSXFRdWVyeSA9IHNlbGYubWFrZV9pcV9xdWVyeQogICAgICAgIHNlbGYubWFrZVF1ZXJ5Um9zdGVyID0gc2VsZi5tYWtlX3F1ZXJ5X3Jvc3RlcgogICAgICAgIHNlbGYubWFrZU1lc3NhZ2UgPSBzZWxmLm1ha2VfbWVzc2FnZQogICAgICAgIHNlbGYubWFrZVByZXNlbmNlID0gc2VsZi5tYWtlX3ByZXNlbmNlCiAgICAgICAgc2VsZi5zZW5kTWVzc2FnZSA9IHNlbGYuc2VuZF9tZXNzYWdlCiAgICAgICAgc2VsZi5zZW5kUHJlc2VuY2UgPSBzZWxmLnNlbmRfcHJlc2VuY2UKICAgICAgICBzZWxmLnNlbmRQcmVzZW5jZVN1YnNjcmlwdGlvbiA9IHNlbGYuc2VuZF9wcmVzZW5jZV9zdWJzY3JpcHRpb24KCiAgICAgICAgc2VsZi5kZWZhdWx0X25zID0gZGVmYXVsdF9ucwogICAgICAgIHNlbGYuc3RyZWFtX25zID0gJ2h0dHA6Ly9ldGhlcnguamFiYmVyLm9yZy9zdHJlYW1zJwoKICAgICAgICBzZWxmLmJvdW5kamlkID0gSklEKCIiKQoKICAgICAgICBzZWxmLnBsdWdpbiA9IHt9CiAgICAgICAgc2VsZi5yb3N0ZXIgPSB7fQogICAgICAgIHNlbGYuaXNfY29tcG9uZW50ID0gRmFsc2UKICAgICAgICBzZWxmLmF1dG9fYXV0aG9yaXplID0gVHJ1ZQogICAgICAgIHNlbGYuYXV0b19zdWJzY3JpYmUgPSBUcnVlCgogICAgICAgIHNlbGYuc2VudHByZXNlbmNlID0gRmFsc2UKCiAgICAgICAgc2VsZi5yZWdpc3Rlcl9oYW5kbGVyKAogICAgICAgICAgICBDYWxsYmFjaygnSU0nLAogICAgICAgICAgICAgICAgICAgICBNYXRjaFhQYXRoKCd7JXN9bWVzc2FnZS97JXN9Ym9keScgJSAoc2VsZi5kZWZhdWx0X25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWZhdWx0X25zKSksCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9tZXNzYWdlKSkKICAgICAgICBzZWxmLnJlZ2lzdGVyX2hhbmRsZXIoCiAgICAgICAgICAgIENhbGxiYWNrKCdQcmVzZW5jZScsCiAgICAgICAgICAgICAgICAgICAgIE1hdGNoWFBhdGgoInslc31wcmVzZW5jZSIgJSBzZWxmLmRlZmF1bHRfbnMpLAogICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfcHJlc2VuY2UpKQoKICAgICAgICBzZWxmLmFkZF9ldmVudF9oYW5kbGVyKCdwcmVzZW5jZV9zdWJzY3JpYmUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX3N1YnNjcmliZSkKICAgICAgICBzZWxmLmFkZF9ldmVudF9oYW5kbGVyKCdkaXNjb25uZWN0ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2Rpc2Nvbm5lY3RlZCkKCiAgICAgICAgIyBTZXQgdXAgdGhlIFhNTCBzdHJlYW0gd2l0aCBYTVBQJ3Mgcm9vdCBzdGFuemFzLgogICAgICAgIHNlbGYucmVnaXN0ZXJTdGFuemEoTWVzc2FnZSkKICAgICAgICBzZWxmLnJlZ2lzdGVyU3RhbnphKElxKQogICAgICAgIHNlbGYucmVnaXN0ZXJTdGFuemEoUHJlc2VuY2UpCgogICAgICAgICMgSW5pdGlhbGl6ZSBhIGZldyBkZWZhdWx0IHN0YW56YSBwbHVnaW5zLgogICAgICAgIHJlZ2lzdGVyX3N0YW56YV9wbHVnaW4oSXEsIFJvc3RlcikKICAgICAgICByZWdpc3Rlcl9zdGFuemFfcGx1Z2luKE1lc3NhZ2UsIE5pY2spCiAgICAgICAgcmVnaXN0ZXJfc3RhbnphX3BsdWdpbihNZXNzYWdlLCBIVE1MSU0pCgogICAgZGVmIHByb2Nlc3Moc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAiIiIKICAgICAgICBFbnN1cmUgdGhhdCBwbHVnaW4gaW50ZXItZGVwZW5kZW5jaWVzIGFyZSBoYW5kbGVkIGJlZm9yZSBzdGFydGluZwogICAgICAgIGV2ZW50IHByb2Nlc3NpbmcuCgogICAgICAgIE92ZXJyaWRlcyBYTUxTdHJlYW0ucHJvY2Vzcy4KICAgICAgICAiIiIKICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLnBsdWdpbjoKICAgICAgICAgICAgaWYgbm90IHNlbGYucGx1Z2luW25hbWVdLnBvc3RfaW5pdGVkOgogICAgICAgICAgICAgICAgc2VsZi5wbHVnaW5bbmFtZV0ucG9zdF9pbml0KCkKICAgICAgICByZXR1cm4gWE1MU3RyZWFtLnByb2Nlc3Moc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQoKICAgIGRlZiByZWdpc3Rlcl9wbHVnaW4oc2VsZiwgcGx1Z2luLCBwY29uZmlnPXt9LCBtb2R1bGU9Tm9uZSk6CiAgICAgICAgIiIiCiAgICAgICAgUmVnaXN0ZXIgYW5kIGNvbmZpZ3VyZSAgYSBwbHVnaW4gZm9yIHVzZSBpbiB0aGlzIHN0cmVhbS4KCiAgICAgICAgQXJndW1lbnRzOgogICAgICAgICAgICBwbHVnaW4gIC0tIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW4gY2xhc3MuIFBsdWdpbiBuYW1lcyBtdXN0CiAgICAgICAgICAgICAgICAgICAgICAgYmUgdW5pcXVlLgogICAgICAgICAgICBwY29uZmlnIC0tIEEgZGljdGlvbmFyeSBvZiBjb25maWd1cmF0aW9uIGRhdGEgZm9yIHRoZSBwbHVnaW4uCiAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gYW4gZW1wdHkgZGljdGlvbmFyeS4KICAgICAgICAgICAgbW9kdWxlICAtLSBPcHRpb25hbCByZWZlbmNlIHRvIHRoZSBtb2R1bGUgY29udGFpbmluZyB0aGUgcGx1Z2luCiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgaWYgdXNpbmcgY3VzdG9tIHBsdWdpbnMuCiAgICAgICAgIiIiCiAgICAgICAgdHJ5OgogICAgICAgICAgICAjIEltcG9ydCB0aGUgZ2l2ZW4gbW9kdWxlIHRoYXQgY29udGFpbnMgdGhlIHBsdWdpbi4KICAgICAgICAgICAgaWYgbm90IG1vZHVsZToKICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNsZWVreG1wcC5wbHVnaW5zCiAgICAgICAgICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKCIlcy4lcyIgJSAobW9kdWxlLl9fbmFtZV9fLCBwbHVnaW4pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxzKCksIGxvY2FscygpLCBbcGx1Z2luXSkKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtb2R1bGUsIHN0cik6CiAgICAgICAgICAgICAgICAjIFdlIHByb2JhYmx5IHdhbnQgdG8gbG9hZCBhIG1vZHVsZSBmcm9tIG91dHNpZGUKICAgICAgICAgICAgICAgICMgdGhlIHNsZWVreG1wcCBwYWNrYWdlLCBzbyBsZWF2ZSBvdXQgdGhlIGdsb2JhbHMoKS4KICAgICAgICAgICAgICAgIG1vZHVsZSA9IF9faW1wb3J0X18obW9kdWxlLCBmcm9tbGlzdD1bcGx1Z2luXSkKCiAgICAgICAgICAgICMgTG9hZCB0aGUgcGx1Z2luIGNsYXNzIGZyb20gdGhlIG1vZHVsZS4KICAgICAgICAgICAgc2VsZi5wbHVnaW5bcGx1Z2luXSA9IGdldGF0dHIobW9kdWxlLCBwbHVnaW4pKHNlbGYsIHBjb25maWcpCgogICAgICAgICAgICAjIExldCBYRVAgaW1wbGVtZW50aW5nIHBsdWdpbnMgaGF2ZSBzb21lIGV4dHJhIGxvZ2dpbmcgaW5mby4KICAgICAgICAgICAgeGVwID0gJycKICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLnBsdWdpbltwbHVnaW5dLCAneGVwJyk6CiAgICAgICAgICAgICAgICB4ZXAgPSAiKFhFUC0lcykgIiAlIHNlbGYucGx1Z2luW3BsdWdpbl0ueGVwCgogICAgICAgICAgICBkZXNjID0gKHhlcCwgc2VsZi5wbHVnaW5bcGx1Z2luXS5kZXNjcmlwdGlvbikKICAgICAgICAgICAgbG9nLmRlYnVnKCJMb2FkZWQgUGx1Z2luICVzJXMiICUgZGVzYykKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIGxvZy5leGNlcHRpb24oIlVuYWJsZSB0byBsb2FkIHBsdWdpbjogJXMiLCBwbHVnaW4pCgogICAgZGVmIHJlZ2lzdGVyX3BsdWdpbnMoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgUmVnaXN0ZXIgYW5kIGluaXRpYWxpemUgYWxsIGJ1aWx0LWluIHBsdWdpbnMuCgogICAgICAgIE9wdGlvbmFsbHksIHRoZSBsaXN0IG9mIHBsdWdpbnMgbG9hZGVkIG1heSBiZSBsaW1pdGVkIHRvIHRob3NlCiAgICAgICAgY29udGFpbmVkIGluIHNlbGYucGx1Z2luX3doaXRlbGlzdC4KCiAgICAgICAgUGx1Z2luIGNvbmZpZ3VyYXRpb25zIHN0b3JlZCBpbiBzZWxmLnBsdWdpbl9jb25maWcgd2lsbCBiZSB1c2VkLgogICAgICAgICIiIgogICAgICAgIGlmIHNlbGYucGx1Z2luX3doaXRlbGlzdDoKICAgICAgICAgICAgcGx1Z2luX2xpc3QgPSBzZWxmLnBsdWdpbl93aGl0ZWxpc3QKICAgICAgICBlbHNlOgogICAgICAgICAgICBwbHVnaW5fbGlzdCA9IHBsdWdpbnMuX19hbGxfXwoKICAgICAgICBmb3IgcGx1Z2luIGluIHBsdWdpbl9saXN0OgogICAgICAgICAgICBpZiBwbHVnaW4gaW4gcGx1Z2lucy5fX2FsbF9fOgogICAgICAgICAgICAgICAgc2VsZi5yZWdpc3Rlcl9wbHVnaW4ocGx1Z2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wbHVnaW5fY29uZmlnLmdldChwbHVnaW4sIHt9KSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJhaXNlIE5hbWVFcnJvcigiUGx1Z2luICVzIG5vdCBpbiBwbHVnaW5zLl9fYWxsX18uIiAlIHBsdWdpbikKCiAgICAgICAgIyBSZXNvbHZlIHBsdWdpbiBpbnRlci1kZXBlbmRlbmNpZXMuCiAgICAgICAgZm9yIHBsdWdpbiBpbiBzZWxmLnBsdWdpbjoKICAgICAgICAgICAgc2VsZi5wbHVnaW5bcGx1Z2luXS5wb3N0X2luaXQoKQoKICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgogICAgICAgICIiIgogICAgICAgIFJldHVybiBhIHBsdWdpbiBnaXZlbiBpdHMgbmFtZSwgaWYgaXQgaGFzIGJlZW4gcmVnaXN0ZXJlZC4KICAgICAgICAiIiIKICAgICAgICBpZiBrZXkgaW4gc2VsZi5wbHVnaW46CiAgICAgICAgICAgIHJldHVybiBzZWxmLnBsdWdpbltrZXldCiAgICAgICAgZWxzZToKICAgICAgICAgICAgbG9nLndhcm5pbmcoIiIiUGx1Z2luICIlcyIgaXMgbm90IGxvYWRlZC4iIiIgJSBrZXkpCiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0KToKICAgICAgICAiIiIKICAgICAgICBSZXR1cm4gYSBwbHVnaW4gZ2l2ZW4gaXRzIG5hbWUsIGlmIGl0IGhhcyBiZWVuIHJlZ2lzdGVyZWQuCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYucGx1Z2luLmdldChrZXksIGRlZmF1bHQpCgogICAgZGVmIE1lc3NhZ2Uoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAiIiJDcmVhdGUgYSBNZXNzYWdlIHN0YW56YSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdHJlYW0uIiIiCiAgICAgICAgcmV0dXJuIE1lc3NhZ2Uoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQoKICAgIGRlZiBJcShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICIiIkNyZWF0ZSBhbiBJcSBzdGFuemEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3RyZWFtLiIiIgogICAgICAgIHJldHVybiBJcShzZWxmLCAqYXJncywgKiprd2FyZ3MpCgogICAgZGVmIFByZXNlbmNlKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIiIiQ3JlYXRlIGEgUHJlc2VuY2Ugc3RhbnphIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN0cmVhbS4iIiIKICAgICAgICByZXR1cm4gUHJlc2VuY2Uoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQoKICAgIGRlZiBtYWtlX2lxKHNlbGYsIGlkPTAsIGlmcm9tPU5vbmUpOgogICAgICAgICIiIgogICAgICAgIENyZWF0ZSBhIG5ldyBJcSBzdGFuemEgd2l0aCBhIGdpdmVuIElkIGFuZCBmcm9tIEpJRC4KCiAgICAgICAgQXJndW1lbnRzOgogICAgICAgICAgICBpZCAgICAtLSBBbiBpZGVhbGx5IHVuaXF1ZSBJRCB2YWx1ZSBmb3IgdGhpcyBzdGFuemEgdGhyZWFkLgogICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byAwLgogICAgICAgICAgICBpZnJvbSAtLSBUaGUgZnJvbSBKSUQgdG8gdXNlIGZvciB0aGlzIHN0YW56YS4KICAgICAgICAiIiIKICAgICAgICByZXR1cm4gc2VsZi5JcSgpLl9zZXRfc3RhbnphX3ZhbHVlcyh7J2lkJzogc3RyKGlkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zyb20nOiBpZnJvbX0pCgogICAgZGVmIG1ha2VfaXFfZ2V0KHNlbGYsIHF1ZXJ5eG1sbnM9Tm9uZSk6CiAgICAgICAgIiIiCiAgICAgICAgQ3JlYXRlIGFuIElxIHN0YW56YSBvZiB0eXBlICdnZXQnLgoKICAgICAgICBPcHRpb25hbGx5LCBhIHF1ZXJ5IGVsZW1lbnQgbWF5IGJlIGFkZGVkLgoKICAgICAgICBBcmd1bWVudHM6CiAgICAgICAgICAgIHF1ZXJ5eG1sbnMgLS0gVGhlIG5hbWVzcGFjZSBvZiB0aGUgcXVlcnkgdG8gdXNlLgogICAgICAgICIiIgogICAgICAgIHJldHVybiBzZWxmLklxKCkuX3NldF9zdGFuemFfdmFsdWVzKHsndHlwZSc6ICdnZXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncXVlcnknOiBxdWVyeXhtbG5zfSkKCiAgICBkZWYgbWFrZV9pcV9yZXN1bHQoc2VsZiwgaWQpOgogICAgICAgICIiIgogICAgICAgIENyZWF0ZSBhbiBJcSBzdGFuemEgb2YgdHlwZSAncmVzdWx0JyB3aXRoIHRoZSBnaXZlbiBJRCB2YWx1ZS4KCiAgICAgICAgQXJndW1lbnRzOgogICAgICAgICAgICBpZCAtLSBBbiBpZGVhbGx5IHVuaXF1ZSBJRCB2YWx1ZS4gTWF5IHVzZSBzZWxmLm5ld19pZCgpLgogICAgICAgICIiIgogICAgICAgIHJldHVybiBzZWxmLklxKCkuX3NldF9zdGFuemFfdmFsdWVzKHsnaWQnOiBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiAncmVzdWx0J30pCgogICAgZGVmIG1ha2VfaXFfc2V0KHNlbGYsIHN1Yj1Ob25lKToKICAgICAgICAiIiIKICAgICAgICBDcmVhdGUgYW4gSXEgc3RhbnphIG9mIHR5cGUgJ3NldCcuCgogICAgICAgIE9wdGlvbmFsbHksIGEgc3Vic3RhbnphIG1heSBiZSBnaXZlbiB0byB1c2UgYXMgdGhlCiAgICAgICAgc3RhbnphJ3MgcGF5bG9hZC4KCiAgICAgICAgQXJndW1lbnRzOgogICAgICAgICAgICBzdWIgLS0gQSBzdGFuemEgb3IgWE1MIG9iamVjdCB0byB1c2UgYXMgdGhlIElxJ3MgcGF5bG9hZC4KICAgICAgICAiIiIKICAgICAgICBpcSA9IHNlbGYuSXEoKS5fc2V0X3N0YW56YV92YWx1ZXMoeyd0eXBlJzogJ3NldCd9KQogICAgICAgIGlmIHN1YiAhPSBOb25lOgogICAgICAgICAgICBpcS5hcHBlbmQoc3ViKQogICAgICAgIHJldHVybiBpcQoKICAgIGRlZiBtYWtlX2lxX2Vycm9yKHNlbGYsIGlkLCB0eXBlPSdjYW5jZWwnLAogICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uPSdmZWF0dXJlLW5vdC1pbXBsZW1lbnRlZCcsIHRleHQ9Tm9uZSk6CiAgICAgICAgIiIiCiAgICAgICAgQ3JlYXRlIGFuIElxIHN0YW56YSBvZiB0eXBlICdlcnJvcicuCgogICAgICAgIEFyZ3VtZW50czoKICAgICAgICAgICAgaWQgICAgICAgIC0tIEFuIGlkZWFsbHkgdW5pcXVlIElEIHZhbHVlLiBNYXkgdXNlIHNlbGYubmV3X2lkKCkuCiAgICAgICAgICAgIHR5cGUgICAgICAtLSBUaGUgdHlwZSBvZiB0aGUgZXJyb3IsIHN1Y2ggYXMgJ2NhbmNlbCcgb3IgJ21vZGlmeScuCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvICdjYW5jZWwnLgo8fGZpbV9lbmR8Pg=="]
["c9229a1c8d77b93e09566377d7113a09823941df-2","c9229a1c8d77b93e09566377d7113a09823941df","PHxmaW1fcHJlZml4fD4KIiIiCkNvbG9ycyB0aGF0IHlvdSBjYW4gaW1wb3J0IGFuZCBtYWtlIHRoZSB0ZXh0IGxvb2sgcHJldHR5CgpTb3VyY2U6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI4Nzg3MS9wcmludC1pbi10ZXJtaW5hbC13aXRoLWNvbG9ycwoiIiIKaW1wb3J0IG9zCmltcG9ydCBzeXMKZnJvbSAucm9iX2Vycm9yIGltcG9ydCBDb2xvck5vdEZvdW5kRXJyb3IKCl9fYXV0aG9yX18gPSAnUm9iIEVkd2FyZHMnCgoKY2xhc3MgY29sb3VycyhvYmplY3QpOgogICAgSEVBREVSID0gJ1wwMzNbOTVtJwogICAgT0tCTFVFID0gJ1wwMzNbOTRtJwogICAgT0tHUkVFTiA9ICdcMDMzWzkybScKICAgIFdBUk5JTkcgPSAnXDAzM1s5M20nCiAgICBGQUlMID0gJ1wwMzNbOTFtJwogICAgRU5EQyA9ICdcMDMzWzBtJwogICAgQk9MRCA9ICdcMDMzWzFtJwogICAgVU5ERVJMSU5FID0gJ1wwMzNbNG0nCgogICAgUElOSyA9ICdcMDMzWzk1bScKICAgIEJMVUUgPSAnXDAzM1s5NG0nCiAgICBHUkVFTiA9ICdcMDMzWzkybScKICAgIFlFTExPVyA9ICdcMDMzWzkzbScKICAgIFJFRCA9ICdcMDMzWzkxbScKICAgIFdISVRFID0gJ1wwMzNbMG0nCgoKY2xhc3MgY29sb3JzKG9iamVjdCk6CiAgICAKICAgICMgdGhlc2UgYXJlIGhlcmUgZm9yIGxlZ2FjeSByZWFzb25zCiAgICBIRUFERVIgPSAnXDAzM1s5NW0nCiAgICBPS0JMVUUgPSAnXDAzM1s5NG0nCiAgICBPS0dSRUVOID0gJ1wwMzNbOTJtJwogICAgV0FSTklORyA9ICdcMDMzWzkzbScKICAgIEZBSUwgPSAnXDAzM1s5MW0nCiAgICBFTkRDID0gJ1wwMzNbMG0nCiAgICBCT0xEID0gJ1wwMzNbMW0nCiAgICBVTkRFUkxJTkUgPSAnXDAzM1s0bScKCiAgICBQSU5LID0gJ1wwMzNbOTVtJwogICAgQkxVRSA9ICdcMDMzWzk0bScKICAgIEdSRUVOID0gJ1wwMzNbOTJtJwogICAgWUVMTE9XID0gJ1wwMzNbOTNtJwogICAgUkVEID0gJ1wwMzNbOTFtJwogICAgV0hJVEUgPSAnXDAzM1swbScKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGNvbG9yID0gewogICAgICAgICdIRUFERVInOiAnXDAzM1s5NW0nLAogICAgICAgICdPS0JMVUUnOiAnXDAzM1s5NG0nLAo8fGZpbV9lbmR8Pg=="]
["118f2b6c3a079d1cd4e55516fb6f18b69c5891a0-2","118f2b6c3a079d1cd4e55516fb6f18b69c5891a0","PHxmaW1fcHJlZml4fD4KIyFlbnYgcHl0aG9uCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KI2NvZGluZz11dGYtOAojQXV0aG9yOiAgam9zaHVhX3plcm9Ab3V0bG9vay5jb20KCgo8fGZpbV9lbmR8Pg=="]
["6e5ef776f23a540e71fc09399cb4b7d0c9ed4a29-1","6e5ef776f23a540e71fc09399cb4b7d0c9ed4a29","PHxmaW1fcHJlZml4fD4KZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCmltcG9ydCBvcwppbXBvcnQgbG9nZ2luZy5jb25maWcKaW1wb3J0IHlhbWwKCmZyb20gZG90ZW52IGltcG9ydCBsb2FkX2RvdGVudgoKREVGQVVMVF9MT0dHSU5HX0NPTkZJRyA9ICIiIgotLS0KCnZlcnNpb246IDEKZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzOiBmYWxzZQpoYW5kbGVyczoKICBzdGRlcnI6CiAgICBjbGFzczogbG9nZ2luZy5TdHJlYW1IYW5kbGVyCiAgICBzdHJlYW06IGV4dDovL3N5cy5zdGRlcnIKICAgIGxldmVsOiBERUJVRwpsb2dnZXJzOgogIHB5ZG9jdGV1cjoKICAgIGxldmVsOiBERUJVRwogICAgaGFuZGxlcnM6IFtzdGRlcnJdCiAgdXJsbGliMzoKICAgIGxldmVsOiBJTkZPCiAgICBoYW5kbGVyczogW3N0ZGVycl0KICByZXFlc3RzOgogICAgbGV2ZWw6IElORk8KICAgIGhhbmRsZXJzOiBbc3RkZXJyXQogIGdpdGh1YjoKICAgIGxldmVsOiBJTkZPCiAgICBoYW5kbGVyczogW3N0ZGVycl0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoiIiIKCmxvYWRfZG90ZW52KCkKCjx8ZmltX2VuZHw+"]
["42f88d403a82cb0ca1fc4a4dea9ffa51374103ba-3","42f88d403a82cb0ca1fc4a4dea9ffa51374103ba","PHxmaW1fcHJlZml4fD4KIyBTUEkgZG90c3RhcnMKIyBOQ1NTIDIwMTggU3VtbWVyIFNjaG9vbAojIEF1dGhvcnM6IFNvZmlhLCBPd2VuLCBNb3NzCgpmcm9tIG1pY3JvYml0IGltcG9ydCAqCgpOX1BJWEVMUyA9IDE1Cgo8fGZpbV9ob2xlfD4KZGVmIHJnYl90b19mcmFtZXMocmdiKToKICAgIGZyYW1lcyA9IFswXSo0CgogICAgZm9yIHIsIGcsIGIgaW4gcmdiOgogICAgICAgIGZyYW1lcyArPSBbMGIxMTExMTExMSwgYiwgZywgcl0KCiAgICBmcmFtZXMgKz0gWzB4ZmZdKjQKCiAgICByZXR1cm4gZnJhbWVzCgpkZWYgbWFpbigpOgogICAgc3BpLmluaXQoYmF1ZHJhdGU9MTAwMDAwMCxtb3NpPXBpbjEzLHNjbGs9cGluMCkKCiAgICByZ2IgPSBbKDI1NSwgMCwgMCksCiAgICAgICAgICAgKDAsIDI1NSwgMCksCiAgICAgICAgICAgKDAsIDAsIDI1NSksCiAgICAgICAgICAgKDI1NSwgMCwgMCksCiAgICAgICAgICAgKDAsIDI1NSwgMCksCiAgICAgICAgICAgKDAsIDAsIDI1NSksCiAgICAgICAgICAgKDI1NSwgMCwgMCksCiAgICAgICAgICAgKDAsIDI1NSwgMCksCiAgICAgICAgICAgKDAsIDAsIDI1NSksCiAgICAgICAgICAgKDI1NSwgMCwgMCksCiAgICAgICAgICAgKDAsIDI1NSwgMCksCiAgICAgICAgICAgKDAsIDAsIDI1NSldCgogICAgZnJhbWVzID0gcmdiX3RvX2ZyYW1lcyhyZ2IpCiAgICB3cml0ZV9mcmFtZXMoZnJhbWVzKQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIG1haW4oKQo8fGZpbV9zdWZmaXh8PgoKZGVmIHdyaXRlX2ZyYW1lcyhmcmFtZXMpOgogICAgc3BpLndyaXRlKGJ5dGVzKGZyYW1lcykpCgo8fGZpbV9lbmR8Pg=="]
["3a3c698cf9586a5428f3d9559baca73b7d65b77a-3","3a3c698cf9586a5428f3d9559baca73b7d65b77a",{"$cut":{"chars":113860,"head":"PHxmaW1fcHJlZml4fD4KIiIiU2ltcGxlIFdpa2kgLSDRjdGC0L4g0LLQuNC60Lgg0LTQstC40LbQvtC6LCDQvtGC0L7QsdGA0LDQttCw0Y7RidC40Lkg0YTQsNC50LvQvtCy0YPRjiDRgdGC0YDRg9C60YLRg9GA0YMg0LIg0LLQtdCxLdGN0L3RhtC40LrQu9C+0L/QtdC00LjRjjsg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINGB0YLQsNGC0YzQuCDQsiDRhNC+0YDQvNCw0YLQsNGFIC5odG1sLCAubWQuIFNpbXBsZSBXaWtpINC90LDQv9C40YHQsNC90LAg0L3QsCDRj9C30YvQutC1IHB5dGhvbiwg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINCz0LjQsdC60L7QtSDRgNCw0YHRiNC40YDQtdC90LjQtSDQuCDRgdGC0LjQu9C40LfQsNGG0LjRji4iIiIKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKaW1wb3J0IGpzb24KaW1wb3J0IG1pbWV0eXBlcwppbXBvcnQgcmFuZG9tCmltcG9ydCByZQpmcm9tIGRhdGFjbGFzc2VzIGltcG9ydCBkYXRhY2xhc3MKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbCwgVHVwbGUsIExpc3QsIENhbGxhYmxlCgppbXBvcnQgY2hhcmRldAppbXBvcnQgamluamEyCmltcG9ydCB0eXBlcgpmcm9tIGF0dHJpYnV0ZWRpY3QuY29sbGVjdGlvbnMgaW1wb3J0IEF0dHJpYnV0ZURpY3QKZnJvbSBtYXJrZG93biBpbXBvcnQgbWFya2Rvd24KCmZyb20gd2Vic2VydmVyIGltcG9ydCBzZXJ2ZSwgZGVmYXVsdF9yZXNwb25zZV9jYWxsYmFjawoKX192ZXJzaW9uX18gPSAnMC4xLjInCnRlbXBsYXRlcyA9IGppbmphMi5FbnZpcm9ubWVudChsb2FkZXI9amluamEyLkZpbGVTeXN0ZW1Mb2FkZXIoJ3RlbXBsYXRlcycpLCBhdXRvZXNjYXBlPVsnaHRtbCddKQptaW1ldHlwZXMuYWRkX3R5cGUoJ3RleHQvbWFya2Rvd24nLCAnLm1kJywgc3RyaWN0PUZhbHNlKQptaW1ldHlwZXMuYWRkX3R5cGUoJ2ZvbnQvd29mZicsICcud29mZicsIHN0cmljdD1GYWxzZSkKbWltZXR5cGVzLmFkZF90eXBlKCdmb250L3dvZmYyJywgJy53b2ZmMicsIHN0cmljdD1GYWxzZSkKY29uZmlnID0gQXR0cmlidXRlRGljdChqc29uLmxvYWRzKChQYXRoLmN3ZCgpIC8gJ2NvbmZpZy5qc29uJykucmVhZF90ZXh0KCkpKQpwYXJzZXJzID0gewoJJy5tZCc6IGxhbWJkYSB0ZXh0OiBtYXJrZG93bih0ZXh0LCBleHRlbnNpb25zPVsnZXh0cmEnLCAnbWR4X21hdGgnLCAnYWRtb25pdGlvbicsICd0b2MnLCAnaW50ZXJuYWxsaW5rcyddICsgY29uZmlnWydtYXJrZG93bl9leHRlbnNpb25zJ10sIGV4dGVuc2lvbl9jb25maWdzPXsKCQknZXh0cmEnICAgICAgICA6IHsKCQkJJ2Zvb3Rub3RlcycgIDogewoJCQkJJ1VOSVFVRV9JRFMnOiBUcnVlCgkJCX0sCgkJCSdmZW5jZWRfY29kZSc6IHsKCQkJCSdsYW5nX3ByZWZpeCc6ICdsYW5nLScKCQkJfQoJCX0sCgkJJ21keF9tYXRoJyAgICAgOiB7CgkJCSdlbmFibGVfZG9sbGFyX2RlbGltaXRlcic6IFRydWUsCgkJCSdhZGRfcHJldmlldycgICAgICAgICAgICA6IFRydWUKCQl9LAoJCSdpbnRlcm5hbGxpbmtzJzogewoJCQkncGF0dGVybicgIDogcidcW1xbKFtcdzAtOV8gLS8jXSspXF1cXScsCgkJCSdlbmRfdXJsJyAgOiAnJywKCQkJJ2J1aWxkX3VybCc6IG1ha2VfaW50ZXJuYWxfbGluawoJCX0KCX0pLAp9CgojIHJlZ2lvbiBkZWZhdWx0IGltYWdlcwoKZGVmYXVsdF9pY29uID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRUFBQUFCQUNBWUFBQUNxYVhIZUFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFGeUdsVVdIUllUVXc2WTI5dExtRmtiMkpsTG5odGNBQUFBQUFBUEQ5NGNHRmphMlYwSUdKbFoybHVQU0x2dTc4aUlHbGtQU0pYTlUwd1RYQkRaV2hwU0hweVpWTjZUbFJqZW10ak9XUWlQejRnUEhnNmVHMXdiV1YwWVNCNGJXeHVjenA0UFNKaFpHOWlaVHB1Y3pwdFpYUmhMeUlnZURwNGJYQjBhejBpUVdSdlltVWdXRTFRSUVOdmNtVWdOaTR3TFdNd01ETWdOemt1TVRZME5USTNMQ0F5TURJd0x6RXdMekUxTFRFM09qUTRPak15SUNBZ0lDQWdJQ0FpUGlBOGNtUm1PbEpFUmlCNGJXeHVjenB5WkdZOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6RTVPVGt2TURJdk1qSXRjbVJtTFhONWJuUmhlQzF1Y3lNaVBpQThjbVJtT2tSbGMyTnlhWEIwYVc5dUlISmtaanBoWW05MWREMGlJaUI0Yld4dWN6cDRiWEE5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM4aUlIaHRiRzV6T25odGNFMU5QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2YlcwdklpQjRiV3h1Y3pwemRFVjJkRDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDNOVWVYQmxMMUpsYzI5MWNtTmxSWFpsYm5RaklpQjRiV3h1Y3pwa1l6MGlhSFIwY0RvdkwzQjFjbXd1YjNKbkwyUmpMMlZzWlcxbGJuUnpMekV1TVM4aUlIaHRiRzV6T25Cb2IzUnZjMmh2Y0QwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOXdhRzkwYjNOb2IzQXZNUzR3THlJZ2VHMXdPa055WldGMGIzSlViMjlzUFNKQlpHOWlaU0JRYUc5MGIzTm9iM0FnTWpJdU1TQW9WMmx1Wkc5M2N5a2lJSGh0Y0RwRGNtVmhkR1ZFWVhSbFBTSXlNREl4TFRBMExUQTFWREV4T2pRek9qRTBLekF6T2pBd0lpQjRiWEE2VFdWMFlXUmhkR0ZFWVhSbFBTSXlNREl4TFRBMExUQTFWREV4T2pRek9qRTBLekF6T2pBd0lpQjRiWEE2VFc5a2FXWjVSR0YwWlQwaU1qQXlNUzB3TkMwd05WUXhNVG8wTXpveE5Dc3dNem93TUNJZ2VHMXdUVTA2U1c1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRveE0ySmpOalExTUMwNE9EVmtMV0kwTkRndFlXWmlNUzFsTURaa1lqTXpPVFkyT1dNaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUltRmtiMkpsT21SdlkybGtPbkJvYjNSdmMyaHZjRHBqTURGa1pHVXhZaTAyTmpBekxUZ3dORE10T0dRNVpTMDRZbVpoWkRZM05qTTNabUlpSUhodGNFMU5Pazl5YVdkcGJtRnNSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG81TnpKbE1UUTBaUzFtTnpKakxUVmlOREV0WVdFME1DMDVNell3TW1KbU1URXlPR1FpSUdSak9tWnZjbTFoZEQwaWFXMWhaMlV2Y0c1bklpQndhRzkwYjNOb2IzQTZRMjlzYjNKTmIy"}}]
["3ab98e1df0b1e47da1feba7e5f3df0ec08e58df8-2","3ab98e1df0b1e47da1feba7e5f3df0ec08e58df8","PHxmaW1fcHJlZml4fD4KZnJvbSBCaW8gaW1wb3J0IEVudHJlegppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IGpzb24sIHRpbWUKaW1wb3J0IHBhbmRhcyBhcyBwZApmcm9tIHRxZG0gaW1wb3J0IHRxZG0KCkVudHJlei5lbWFpbCA9ICJ5b3VyZW1haWxAZG90LmNvbSIgICMgQWx3YXlzIHRlbGwgTkNCSSB3aG8geW91IGFyZQp1cmwgPSAiaHR0cDovL2Jlcm4yLmtvcmVhLmFjLmtyL3B1Ym1lZCIgICMgUmVtZW1iZXIgMTAwIHJlcXVlc3RzIGZvciAxMDAgc2Vjb25kcwoKCmRlZiBnZXRfcG1pZChxdWVyeSwgbnVtX2xpc3QpOgogICAgIiIiCiAgICBudW1fbGlzdCBzaG91bGQgYmUgYmVsb3cgMTAwMDAKICAgICIiIgogICAgaGFuZGxlID0gRW50cmV6LmVzZWFyY2goCiAgICAgICAgZGI9InB1Ym1lZCIsIHRlcm09cXVlcnksIHJldG1heD1udW1fbGlzdCwgc29ydD0icHViK2RhdGUiLCByZXRtb2RlPSJ4bWwiCiAgICApCiAgICByZWNvcmRzID0gRW50cmV6LnJlYWQoaGFuZGxlKQogICAgcmV0dXJuIHJlY29yZHNbIklkTGlzdCJdCgoKZGVmIHF1ZXJ5X3BtaWQocG1pZHMsIHVybD0iaHR0cDovL2Jlcm4yLmtvcmVhLmFjLmtyL3B1Ym1lZCIpOgogICAgIyBoZWFkZXJzID0geyJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIsICJjaGFyc2V0IjogIlVURi04IiwgIkFjY2VwdCI6ICIqLyoifQogICAgdHJ5OgogICAgICAgIHJldHVybiByZXF1ZXN0cy5nZXQodXJsICsgIi8iICsgIiwiLmpvaW4ocG1pZHMpKS5qc29uKCkKICAgIGV4Y2VwdDoKICAgICAgICBwYXNzCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpkZWYgbWFrZV90YWJsZShqc29uX2xpc3QpOgogICAgdHJ5OgogICAgICAgIGRmID0gcGQuanNvbl9ub3JtYWxpemUoanNvbl9saXN0LCByZWNvcmRfcGF0aD1bImFubm90YXRpb25zIl0sIG1ldGE9WyJwbWlkIl0pCiAgICAgICAgcmVmaW5lX2RmID0gZGZbWyJtZW50aW9uIiwgIm9iaiIsICJwcm9iIiwgInBtaWQiXV0KPHxmaW1fZW5kfD4="]
["a3492b058a3b4c728c02d66b8babf31fa0d62432-2","a3492b058a3b4c728c02d66b8babf31fa0d62432","PHxmaW1fcHJlZml4fD4KZnJvbSAucHJvZ3Jlc3Npb25fY2xhc3MgaW1wb3J0IFByb2dyZXNzaW9uQ2xhc3MKCgo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLm4gPSBuCiAgICAgICAgc2VsZi5jYWxjdWxhdGUoKQoKICAgIGRlZiBjYWxjdWxhdGUoc2VsZik6CiAgICAgICAgc2VsZi5zID0gKHNlbGYuYTEgKyBzZWxmLmEyKSAqIHNlbGYubiAvIDIKCiAgICBkZWYgaW5mbyhzZWxmKToKICAgICAgICByZXR1cm4gKAogICAgICAgICAgICAiW9CQ0YDQuNGE0LzQtdGC0LjRh9C10YHQutCw0Y8g0L/RgNC+0LPRgNC10YHRgdC40Y9dXG4xLdC5INGN0LvQtdC80LXQvdGCOiAiCiAgICAgICAgICAgICsgc3RyKHNlbGYuYTEpCiAgICAgICAgICAgICsgIlxuMi3QuSDRjdC70LXQvNC10L3RgjogIgogICAgICAgICAgICArIHN0cihzZWxmLmEyKQogICAgICAgICAgICArICJcbtCo0LDQszogIgogICAgICAgICAgICArIHN0cihzZWxmLm4pCiAgICAgICAgICAgICsgIlxu0KHRg9C80LzQsDogIgogICAgICAgICAgICArIHN0cihzZWxmLnMpCiAgICAgICAgKQo8fGZpbV9zdWZmaXh8PgpjbGFzcyBBcml0aG1ldGljQ2xhc3MoUHJvZ3Jlc3Npb25DbGFzcyk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgYTEsIGEyLCBuKToKICAgICAgICBzZWxmLmExID0gYTEKICAgICAgICBzZWxmLmEyID0gYTIKPHxmaW1fZW5kfD4="]
["6de2f9a99e76f6c13b2d250ae3857c215acd8465-2","6de2f9a99e76f6c13b2d250ae3857c215acd8465","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN1YnByb2Nlc3MKaW1wb3J0IHN5cwppbXBvcnQgb3MKaW1wb3J0IHRpbWUKCmltcG9ydCB0aW1lCnN0YXJ0VGltZSA9IHRpbWUudGltZSgpCnByaW50KCdOdW1iZXIgb2YgYXJndW1lbnRzOicsIGxlbihzeXMuYXJndiksICdhcmd1bWVudHMuJykKcHJpbnQoJ0FyZ3VtZW50IExpc3Q6Jywgc3RyKHN5cy5hcmd2KSkKcHJpbnQoc3lzLmFyZ3ZbMV0uc3BsaXQoJz0nKVsxXSkKcHJpbnQoc3lzLmFyZ3ZbMl0uc3BsaXQoJz0nKVsxXSkKcHJpbnQoc3lzLmFyZ3ZbM10uc3BsaXQoJz0nKVsxXSkKcHJpbnQoc3lzLmFyZ3ZbNF0uc3BsaXQoJz0nKVsxXSkKcHJpbnQoc3lzLmFyZ3ZbNV0uc3BsaXQoJz0nKVsxXSkKcHJpbnQoc3lzLmFyZ3ZbNl0uc3BsaXQoJz0nKVsxXSkKcHJpbnQoc3lzLmFyZ3ZbN10uc3BsaXQoJz0nKVsxXSkKCmZhaWxlZF9jb3VudCA9IHt9CmZhaWxlZCA9IFtdCnRocmVzaG9sZCA9Mgpjb29sZG93bj0xMApwdXBfZXJyb3I9RmFsc2UKcGF0aF90b190b2RvbXZjID0gc3lzLmFyZ3ZbMV0uc3BsaXQoJz0nKVsxXQpwYXRoX3RvX3RvZG9tdmNfZnJhbWV3b3JrcyA9ICBwYXRoX3RvX3RvZG9tdmMgKyAnZXhhbXBsZXMvJwpwYXRoX3RvX2phbGFuZ2kgPSBzeXMuYXJndlsyXS5zcGxpdCgnPScpWzFdCnBhdGhfdG9fZXhwZXJpbWVudHMgPSBzeXMuYXJndlsyXS5zcGxpdCgnPScpWzFdICsgJ2V4cGVyaW1lbnRzLycKcGF0aF90b193YWxhX2FjZyA9IHN5cy5hcmd2WzNdLnNwbGl0KCc9JylbMV0KcGF0aF90b193YWxhX3Byb3BzcmMgPSBzeXMuYXJndls0XS5zcGxpdCgnPScpWzFdCm91dHBhdGggPSBzeXMuYXJndls1XS5zcGxpdCgnPScpWzFdCmNob3Nlbl9mcmFtZXdvcmtzID0gKHN5cy5hcmd2WzZdLnNwbGl0KCc9JylbMV0pLnNwbGl0KCcsJykKdHlwX3NjZyA9IHN5cy5hcmd2WzddLnNwbGl0KCc9JylbMV0KbGlzdF9vZl9leGVyY2lzZWRfZnJhbWV3b3JrcyA9IFtdCmlmIGNob3Nlbl9mcmFtZXdvcmtzWzBdLmxvd2VyKCkgPT0gJ2FsbCc6CiAgICBsaXN0X29mX2V4ZXJjaXNlZF9mcmFtZXdvcmtzID0gWyJhbmd1bGFyanMiLCAiYmFja2JvbmUiLCAia25vY2tiYWNrIiwgImtub2Nrb3V0anMiLCAiY2FuanMiLCAicmVhY3QiLCAibWl0aHJpbCIsICJ2dWUiLCAidmFuaWxsYWpzIiwgImpxdWVyeSJdCmVsc2U6CiAgICBsaXN0X29mX2V4ZXJjaXNlZF9mcmFtZXdvcmtzLmV4dGVuZChjaG9zZW5fZnJhbWV3b3JrcykKaWYgdHlwX3NjZyA9PSAnUEVTJzoKICAgIHR5cF9vdXRwdXQgPSAiUGVzc2ltaXN0aWNSZXN1bHRzIgplbHNlOgogICAgdHlwX291dHB1dCA9ICJPcHRpbWlzdGljUmVzdWx0cyIKaWYgbm90IG9zLnBhdGguZXhpc3RzKGYne291dHBhdGh9e3R5cF9vdXRwdXR9Jyk6CiAgICBvcy5ta2RpcihmJ3tvdXRwYXRofXt0eXBfb3V0cHV0fScpCmZvciBmcmFtZXdvcmsgaW4gbGlzdF9vZl9leGVyY2lzZWRfZnJhbWV3b3JrczoKICAgIHBhdGhfdG9fY3VycmVudF9mcmFtZXdvcmsgPSBwYXRoX3RvX3RvZG9tdmNfZnJhbWV3b3JrcyArIGZyYW1ld29yayArICIvIgogICAgcHJpbnQoZidFeGVjdXRpbmcgc2NyaXB0cyBmb3Ige2ZyYW1ld29ya30nKQoKICAgIG91dF9wYXRoID0gZid7b3V0cGF0aH17dHlwX291dHB1dH0vdG9kb197ZnJhbWV3b3JrfScKICAgICNmdWxsX291dF9wYXRoID0gb3V0X3BhdGggKyAnLycKICAgIGNkX3dhbGFhY2c9IHBhdGhfdG9fd2FsYV9hY2cjZidjZCB7cGF0aF90b193YWxhX2FjZ30nCiAgICAjb3MuY2hkaXIocGF0aF90b193YWxhX2FjZykKICAgIG9wdF9jbWQgPSBmJ3twYXRoX3RvX3dhbGFfYWNnfWdyYWRsZXcgcnVuIC0tYXJncz0ie3BhdGhfdG9fY3VycmVudF9mcmFtZXdvcmt9IHtvdXRfcGF0aH0ge3R5cF9zY2d9IicKICAgIGNkX3dhbGFwcm9wc3JjPSBwYXRoX3RvX3dhbGFfcHJvcHNyYwogICAgcHJvcHNyY19jbWQgPSBmJ3twYXRoX3RvX3dhbGFfcHJvcHNyY31ncmFkbGV3IHJ1biAtLWFyZ3M9IntwYXRoX3RvX2N1cnJlbnRfZnJhbWV3b3JrfSB7b3V0X3BhdGh9IicKICAgIGNkX2phbGFuZ2lleHAgPSBwYXRoX3RvX2phbGFuZ2kKCiAgICBwdXBzZXJ2X2NtZCA9IGYnbm9kZSAtLW1heC1vbGQtc3BhY2Utc2l6ZT04MTkyIC0tdW5oYW5kbGVkLXJlamVjdGlvbnM9c3RyaWN0IHtwYXRoX3RvX2V4cGVyaW1lbnRzfXB1cFNlcnYuanMge3BhdGhfdG9fdG9kb212Y31leGFtcGxlcy97ZnJhbWV3b3JrfS8ge291dF9wYXRofS9EQ0cuanNvbicKICAgIHB1cHNlcnYyX2NtZCA9IGYnbm9kZSAtLW1heC1vbGQtc3BhY2Utc2l6ZT04MTkyIC0tdW5oYW5kbGVkLXJlamVjdGlvbnM9c3RyaWN0IHtwYXRoX3RvX2V4cGVyaW1lbnRzfXB1cFNlcnYyLmpzIHtwYXRoX3RvX3RvZG9tdmN9ZXhhbXBsZXMve2ZyYW1ld29ya30vIHtvdXRfcGF0aH0vdG9kb197ZnJhbWV3b3JrfV90cmFjZS5qc29uIHtvdXRfcGF0aH0vY2FsbGVlTWFwLmpzb24nCiAgICAjcHVwc2Vydl9jbWQgPSBmJ25vZGUgLS1tYXgtb2xkLXNwYWNlLXNpemU9ODE5MiB7cGF0aF90b19leHBlcmltZW50c31wdXBTZXJ2LmpzIHtwYXRoX3RvX3RvZG9tdmN9ZXhhbXBsZXMve2ZyYW1ld29ya30vIHtvdXRfcGF0aH0vRENHLmpzb24nCiAgICBzdGF0X2R5bl9kaWZmX2NtZCA9IGYnbm9kZSB7cGF0aF90b19leHBlcmltZW50c31tZXRyaWNzL1N0YXRWU0R5bkRpZmZDYWxsZWUuanMge291dF9wYXRofS9EQ0cuanNvbiB7b3V0X3BhdGh9L1NDR197dHlwX3NjZ30uanNvbiB7cGF0aF90b190b2RvbXZjfWV4YW1wbGVzL3tmcmFtZXdvcmt9LyB7b3V0X3BhdGh9LycKICAgIG1ldHJpYzFfY21kID0gZidub2RlIHtwYXRoX3RvX2V4cGVyaW1lbnRzfW1ldHJpY3MvbWV0cmljMS5qcyB7b3V0X3BhdGh9L0RDRy5qc29uIHtvdXRfcGF0aH0vU0NHX3t0eXBfc2NnfS5qc29uIHtwYXRoX3RvX3RvZG9tdmN9ZXhhbXBsZXMve2ZyYW1ld29ya30vIHtvdXRwYXRofWFuYWx5c2lzX3Jlc3VsdHMuanNvbiB7ZnJhbWV3b3JrfScKICAgIG1ldHJpYzJfY21kID0gZidub2RlIHtwYXRoX3RvX2V4cGVyaW1lbnRzfW1ldHJpY3MvbWV0cmljMi5qcyB7b3V0X3BhdGh9L0RDRy5qc29uIHtvdXRfcGF0aH0vU0NHX3t0eXBfc2NnfS5qc29uIHtwYXRoX3RvX3RvZG9tdmN9ZXhhbXBsZXMve2ZyYW1ld29ya30vIHtvdXRwYXRofWFuYWx5c2lzX3Jlc3VsdHMuanNvbiB7ZnJhbWV3b3JrfScKICAgIG1ldHJpYzNfY21kID0gZidub2RlIHtwYXRoX3RvX2V4cGVyaW1lbnRzfW1ldHJpY3MvbWV0cmljMy5qcyB7b3V0X3BhdGh9L0RDRy5qc29uIHtvdXRfcGF0aH0vU0NHX3t0eXBfc2NnfS5qc29uIHtwYXRoX3RvX3RvZG9tdmN9ZXhhbXBsZXMve2ZyYW1ld29ya30vIHtvdXRwYXRofWFuYWx5c2lzX3Jlc3VsdHMuanNvbiB7ZnJhbWV3b3JrfScKICAgICNwdXBzZXJ2Ml9jbWQgPSBmJ25vZGUgLS1tYXgtb2xkLXNwYWNlLXNpemU9ODE5MiB7cGF0aF90b19leHBlcmltZW50c31wdXBTZXJ2Mi5qcyB7cGF0aF90b190b2RvbXZjfWV4YW1wbGVzL3tmcmFtZXdvcmt9LyB7b3V0X3BhdGh9L3RvZG9fe2ZyYW1ld29ya31fdHJhY2UuanNvbiB7b3V0X3BhdGh9L2NhbGxlZU1hcC5qc29uJwogICAgcGFyc2VfY2FsbF9jbWQgPSBmJ25vZGUgLS1tYXgtb2xkLXNwYWNlLXNpemU9NDA5NiB7cGF0aF90b19leHBlcmltZW50c31wYXJzZV9jYWxsLmpzIHtvdXRfcGF0aH0vZGlmZi5qc29uIHtvdXRfcGF0aH0vdG9kb197ZnJhbWV3b3JrfV90cmFjZS5qc29uICB7cGF0aF90b190b2RvbXZjfWV4YW1wbGVzL3tmcmFtZXdvcmt9LyB7b3V0X3BhdGh9L0ZHX3t0eXBfc2NnfS5qc29uIHtvdXRfcGF0aH0vU0NHX3t0eXBfc2NnfS5qc29uIHtvdXRfcGF0aH0vRENHX0VESVQuanNvbiB7dHlwX3NjZ30nCiAgICBmaW5kX3Byb3BfcmVhc29uc19jbWQgPSBmJ25vZGUge3BhdGhfdG9fZXhwZXJpbWVudHN9ZmluZFByb3BSZWFzb25zLmpzIHtvdXRfcGF0aH0vU3RhdGljUHJvcHMuanNvbiB7b3V0X3BhdGh9L3RvZG9fe2ZyYW1ld29ya31fcHJvcHMuanNvbiB7b3V0X3BhdGh9JwogICAgY291bnRfY21kID0gZidub2RlIHtwYXRoX3RvX2V4cGVyaW1lbnRzfWNvdW50LmpzIHtvdXRfcGF0aH0vdG9kb197ZnJhbWV3b3JrfV9jYXVzZXMuanNvbiB7b3V0X3BhdGh9JwogICAgbGlzdF9vZl9jbWRzID0gW2NkX3dhbGFhY2csIG9wdF9jbWQsIGNkX3dhbGFwcm9wc3JjLCBwcm9wc3JjX2NtZCxjZF9qYWxhbmdpZXhwLCBwdXBzZXJ2X2NtZCwgbWV0cmljMV9jbWQsIG1ldHJpYzJfY21kLCBtZXRyaWMzX2NtZCwgc3RhdF9keW5fZGlmZl9jbWQsIHB1cHNlcnYyX2NtZCwgcGFyc2VfY2FsbF9jbWQsIGZpbmRfcHJvcF9yZWFzb25zX2NtZCwgY291bnRfY21kXQogICAKICAgIGZvciBjbWQgaW4gbGlzdF9vZl9jbWRzOgogICAgICAgIGlmIG9zLnBhdGguaXNkaXIoY21kKToKICAgICAgICAgICAgb3MuY2hkaXIoY21kKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50KCdFeGVjdXRpbmcgY29tbWFuZCAnICsgY21kKQogICAgICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsIHNoZWxsPVRydWUpCiAgICAgICAgICAgIG91dHB1dCwgZXJyb3IgPSBwcm9jZXNzLmNvbW11bmljYXRlKCkKICAgICAgICAgICAgaWYgb3V0cHV0OgogICAgICAgICAgICAgICAgcHJpbnQoJ1xuLS0tLS1IZXJlIGlzIHRoZSBvdXRwdXQtLS0tLScpCiAgICAgICAgICAgICAgICBwcmludChvdXRwdXQuc3RyaXAoKSkKICAgICAgICAgICAgICAgIHByaW50KCctLS0tLUVuZCBvZiBvdXRwdXQtLS0tLVxuJykKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIGVycm9yOgogICAgICAgICAgICAgICAgcHJpbnQoJ1xuLS0tLS1IZXJlIGlzIHRoZSBlcnJvci0tLS0tJykKICAgICAgICAgICAgICAgIHByaW50KGVycm9yLnN0cmlwKCkpCiAgICAgICAgICAgICAgICBpZiAndGhyb3cgZXJyJyBpbiBzdHIoZXJyb3Iuc3RyaXAoKSk6CiAgICAgICAgICAgICAgICAgICAgcHJpbnQoZidcbldlIGhhdmUgZW5jb3VudGVyZWQgYW4gdW5oYW5kbGVkIHByb21pc2UgZXJyb3IgZnJvbSBwdXBwZXRlZXIgd2hpbGUgZXhlcmNpc2luZyB7ZnJhbWV3b3JrfVxuJykKICAgICAgICAgICAgICAgICAgICBwcmludChmJ1dlIHdpbGwgYXR0ZW1wdCB0byBydW4ge2ZyYW1ld29ya30gYWdhaW5cbicpCiAgICAgICAgICAgICAgICAgICAgcHJpbnQoZidXZSB3aWxsIGFsc28gY29vbCBkb3duIGZvciB7Y29vbGRvd259IHNlY29uZHNcbicpCiAgICAgICAgICAgICAgICAgICAgcHVwX2Vycm9yID0gVHJ1ZQogICAgICAgICAgICAgICAgICAgIGlmIGZyYW1ld29yayBpbiBmYWlsZWRfY291bnQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZhaWxlZF9jb3VudFtmcmFtZXdvcmtdID09IHRocmVzaG9sZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICNXZSBoYXZlIHJlYWNoZWQgdGhlIHRocmVzaG9sZCBzdG9wIGV4ZWN1dGluZyB0aGlzIGZyYW1ld29yawogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkLmFwcGVuZChmcmFtZXdvcmspCjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgICAgICAgICBpZiBmYWlsZWRfY291bnRbZnJhbWV3b3JrXSA8IHRocmVzaG9sZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICN3ZSBhcmUgbGVzcyB0aGFuIHRoZSB0aHJlc2hvbGQgY29udGludWUgdG8gdHJ5IGZyYW1ld29yawogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9vZl9leGVyY2lzZWRfZnJhbWV3b3Jrcy5hcHBlbmQoZnJhbWV3b3JrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkX2NvdW50W2ZyYW1ld29ya10gKz0gMQogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICNGcmFtZXdvcmsgaGFzIGZhaWxlZCBmb3IgdGhlIGZpcnN0IHRpbWUsIHRyeSBpdCBhZ2FpbgogICAgICAgICAgICAgICAgICAgICAgICBsaXN0X29mX2V4ZXJjaXNlZF9mcmFtZXdvcmtzLmFwcGVuZChmcmFtZXdvcmspCiAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZF9jb3VudFtmcmFtZXdvcmtdID0gMQogICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoY29vbGRvd24pCiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgIHByaW50KCctLS0tLUVuZCBvZiBlcnJvci0tLS0tXG4nKQogICAgaWYgcHVwX2Vycm9yOgogICAgICAgIHByaW50KCdDb29saW5nIGRvd24gYmV0d2VlbiBydW5zIGR1ZSB0byBwdXAgZXJyb3IuJykKICAgICAgICB0aW1lLnNsZWVwKGNvb2xkb3duKQogICAgICAgIHB1cF9lcnJvcj1GYWxzZQppZiBsZW4oZmFpbGVkKT4wOgogICAgcHJpbnQoJ1RoZSBmb2xsb3dpbmcgZnJhbWV3b3JrcyBoYXZlIGZhaWxlZDonKQogICAgcHJpbnQoZmFpbGVkKQogICAgcHJpbnQoJ1BsZWFzZSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyB0byBydW4gdGhlbSBzZXBhcmF0ZWx5JykKZWxzZToKICAgIHByaW50KGYnQWxsIGZyYW1ld29ya3MgaGF2ZSBiZWVuIGV4ZWN1dGVkIGFuZCB5b3UgY2FuIGZpbmQgdGhlIG91dHB1dCBmaWxlcyBoZXJlOiB7b3V0cGF0aH17dHlwX291dHB1dH0nKQpleGVjdXRpb25UaW1lID0gKHRpbWUudGltZSgpIC0gc3RhcnRUaW1lKQpwcmludCgnRXhlY3V0aW9uIHRpbWUgaW4gc2Vjb25kczogJyArIHN0cihleGVjdXRpb25UaW1lKSkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGYne2ZyYW1ld29ya30gZmFpbGVkIG1vcmUgdGhhbiB7dGhyZXNob2xkfScpCiAgICAgICAgICAgICAgICAgICAgICAgIAo8fGZpbV9lbmR8Pg=="]
["61d116a40b08425c9325f453cbe21d82f23acd40-2","61d116a40b08425c9325f453cbe21d82f23acd40","PHxmaW1fcHJlZml4fD4KIiIiQWN0aW9ucyBhZG1pbi4iIiIKCiMgRGphbmdvCmZyb20gZGphbmdvLmNvbnRyaWIgaW1wb3J0IG1lc3NhZ2VzCmZyb20gZGphbmdvLmh0dHAgaW1wb3J0IEh0dHBSZXNwb25zZQoKIyBVdGlsaXRpZXMKaW1wb3J0IGNzdgoKCmNsYXNzIEFjdGlvbkRvd25sb2FkRGF0YToKICAgICIiIkFjdGlvbiBkb3dubG9hZCBkYXRhLiIiIgoKICAgIGRlZiBkb3dubG9hZF9kYXRhX2Nzdihtb2RlbF9hZG1pbiwgcmVxdWVzdCwgcXVlcnlzZXQpOgogICAgICAgICIiIkRvd25sb2FkIGRhdGEgaW4gY3N2IGZvciBhbnkgbW9kZWxzLiIiIgogICAgICAgIAogICAgICAgIGlmIG5vdCBxdWVyeXNldC5jb3VudCgpID4gMDoKICAgICAgICAgICAgbGV2ZWwgPSBtZXNzYWdlcy5XQVJOSU5HCiAgICAgICAgICAgIG1zZyA9ICdObyBoYXkgZGF0b3MgcGFyYSBkZXNjYXJnYXIuJwogICAgICAgICAgICByZXR1cm4gbW9kZWxfYWRtaW4ubWVzc2FnZV91c2VyKHJlcXVlc3QsIG1zZywgbGV2ZWwpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmVzcG9uc2UgPSBIdHRwUmVzcG9uc2UoY29udGVudF90eXBlPSd0ZXh0L2NzdicpCiAgICAgICAgICAgIHJlc3BvbnNlWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSAnYXR0YWNobWVudDsgZmlsZW5hbWU9Int9LmNzdiInLmZvcm1hdChtb2RlbF9hZG1pbi5tb2RlbC5fbWV0YS5tb2RlbF9uYW1lKQogICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKHJlc3BvbnNlKQoKICAgICAgICAgICAgIyBXcml0ZSBoZWFkZXIKICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KAogICAgICAgICAgICAgICAgW2ZpZWxkX25hbWUgZm9yIGZpZWxkX25hbWUgaW4gcXVlcnlzZXRbMF0uZ2V0X2RpY3RfZmllbGRzX2FuZF92YWx1ZXMoKV0gIyBOYW1lIGZpZWxkcyAgICAgICAgICAgCiAgICAgICAgICAgICkKCiAgICAgICAgICAgIGZvciByb3dfbW9kZWwgaW4gcXVlcnlzZXQ6CiAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3coCiAgICAgICAgICAgICAgICAgICAgW2ZpZWxkX3ZhbHVlIGZvciBmaWVsZF92YWx1ZSBpbiByb3dfbW9kZWwuZ2V0X2RpY3RfZmllbGRzX2FuZF92YWx1ZXMoKS52YWx1ZXMoKV0gIyBWYWx1ZSBGaWVsZHMKICAgICAgICAgICAgICAgICkKCiAgICAgICAgcmV0dXJuIHJlc3BvbnNlCiAgICBkb3dubG9hZF9kYXRhX2Nzdi5zaG9ydF9kZXNjcmlwdGlvbiA9ICJEZXNjYXJnYXIgZGF0b3MgZW4gQ1NWIgoKCjx8ZmltX2hvbGV8PgogICAgICAgIHF1ZXJ5c2V0LnVwZGF0ZShpc19maXNjYWw9VHJ1ZSkKICAgIGZpc2NhbF9lbWl0ZWQuc2hvcnRfZGVzY3JpcHRpb24gPSAnTm90YSBmaXNjYWwgZW1pdGlkYScKCiAgICBkZWYgZmlzY2FsX25vdF9lbWl0ZWQobW9kZWxfYWRtaW4sIHJlcXVlc3QsIHF1ZXJ5c2V0KToKICAgICAgICBxdWVyeXNldC51cGRhdGUoaXNfZmlzY2FsPUZhbHNlKQogICAgZmlzY2FsX25vdF9lbWl0ZWQuc2hvcnRfZGVzY3JpcHRpb24gPSAnTm90YSBmaXNjYWwgc2luIGVtaXRpcicKCjx8ZmltX3N1ZmZpeHw+CmNsYXNzIEFjdGlvbkZpc2NhbFN0YXR1czoKICAgICIiIkFjdGlvbiBmaXNjYWwgc3RhdHVzLiIiIgoKICAgIGRlZiBmaXNjYWxfZW1pdGVkKG1vZGVsX2FkbWluLCByZXF1ZXN0LCBxdWVyeXNldCk6Cjx8ZmltX2VuZHw+"]
["6e319a3aea258ceedd87b5fd497e98fbf2e794f9-1","6e319a3aea258ceedd87b5fd497e98fbf2e794f9","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHJlcXVlc3RzCmltcG9ydCB0aHJlYWRpbmcKaW1wb3J0IHJlCmltcG9ydCB0aW1lCmltcG9ydCBwYWhvLm1xdHQuY2xpZW50IGFzIG1xdHQKZnJvbSBjb25maWcgaW1wb3J0ICoKCk1TR19MSU1JVF9QRVJfTUlOID0gNjAKTVNHX0xJTUlUX1BFUl9IT1VSID0gMzAwCk1TR19MSU1JVF9QRVJfREFZID0gMTUwMAoKc2VuZENvdW50ZXIgPSB7fQp0aXRsZUNvdW50ZXIgPSAwCgpJUCA9ICcxMjcuMC4wLjEnCgpkZWYgZ2V0X3B1YmxpY19pcCgpOgogICAgZ2xvYmFsIElQCiAgICB0cnk6CiAgICAgICAganNvbiA9IHJlcXVlc3RzLmdldCgnaHR0cDovL2lwLWFwaS5jb20vanNvbicpLmpzb24oKQogICAgICAgIElQID0gIGpzb25bJ3F1ZXJ5J10KICAgICAgICBsb2dnZXIuaW5mbygnUHVibGljIElQOicsIElQKQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIGxvZ2dlci5lcnJvcihlKQoKZGVmIGdldF9mdWxsX2NsYXNzX25hbWUob2JqKToKICAgIG1vZHVsZSA9IG9iai5fX2NsYXNzX18uX19tb2R1bGVfXwogICAgaWYgbW9kdWxlIGlzIE5vbmUgb3IgbW9kdWxlID09IHN0ci5fX2NsYXNzX18uX19tb2R1bGVfXzoKICAgICAgICByZXR1cm4gb2JqLl9fY2xhc3NfXy5fX25hbWVfXwogICAgcmV0dXJuIG1vZHVsZSArICcuJyArIG9iai5fX2NsYXNzX18uX19uYW1lX18KCgpkZWYgZ2V0X2xvZ19maWxlbmFtZSgpOgogICAgZHQgPSBkYXRldGltZS5ub3coKS5zdHJmdGltZSgiJVklbSVkIikKICAgIHJldHVybiAnL3RtcC9tcXR0LW1vbml0b3Ite30ubG9nJy5mb3JtYXQoZHQpCgoKZGVmIGxvZ2dpbmdfY29uZmlnKCk6CiAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuSU5GTywKICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSdbJShhc2N0aW1lKXNdWyUobGV2ZWxuYW1lKXNdICUobWVzc2FnZSlzJywKICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZWZtdD0nJW0lZF8lSCVNJVMnLAogICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZT1nZXRfbG9nX2ZpbGVuYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVtb2RlPSdhJykKICAgIGNvbnNvbGUgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQogICAgY29uc29sZS5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQogICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoCiAgICAgICAgJ1slKGFzY3RpbWUpc11bJShuYW1lKXNdWyUobGV2ZWxuYW1lKXNdICUobWVzc2FnZSlzJykKICAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCcnKS5hZGRIYW5kbGVyKGNvbnNvbGUpCgoKPHxmaW1faG9sZXw+CmRlZiBzZW5kX2lvc19yZXBvcnQoZGF0YSk6CiAgICB0cnk6CiAgICAgICAgdXJsID0gQkFSS19SRVBPUlRfVVJMLmZvcm1hdChkYXRhWyd0aXRsZSddLCBkYXRhWydkZXNwJ10pCiAgICAgICAgciA9IHJlcXVlc3RzLnBvc3QodXJsLCB0aW1lb3V0PTEwKQogICAgICAgIGlmIHIub2s6CiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiaU9TIHNlbnQ6ICVzIiwgZGF0YVsidGl0bGUiXSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBsb2dnZXIud2FybmluZygiaU9TIHNlbmQgZm9yICVzIGZhaWxlZCwgZXJyb3I6ICVzICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZGVyLCByLnN0YXR1c19jb2RlLCByLnRleHQpCiAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ2lvcyBzZW5kIGZhaWxlZCcpCgoKZGVmIHNlbmRfcmVwb3J0KHNlbmRlciwgbXNnKToKICAgIGdsb2JhbCBzZW5kQ291bnRlcgogICAgZ2xvYmFsIHRpdGxlQ291bnRlcgogICAgbm93ID0gZGF0ZXRpbWUubm93KCkKICAgIG1pbl9rZXkgPSBub3cuc3RyZnRpbWUoIk1pbjolWS0lbS0lZCAlSDolTSIpCiAgICBkYXlfa2V5ID0gbm93LnN0cmZ0aW1lKCJEYXk6JVktJW0tJWQiKQogICAgbWluX3ZhbHVlID0gc2VuZENvdW50ZXIuZ2V0KG1pbl9rZXksIDApCiAgICBkYXlfdmFsdWUgPSBzZW5kQ291bnRlci5nZXQoZGF5X2tleSwgMCkKICAgIGlmIG1pbl92YWx1ZSA+IE1TR19MSU1JVF9QRVJfTUlOOgogICAgICAgIGxvZ2dlci53YXJuaW5nKAogICAgICAgICAgICAnUmVwb3J0IGV4Y2VlZCBsaW1pdHM6IHt9ID0ge30nLmZvcm1hdChtaW5fa2V5LCBtaW5fdmFsdWUpKQogICAgICAgIHJldHVybgogICAgaWYgZGF5X3ZhbHVlID4gTVNHX0xJTUlUX1BFUl9EQVk6CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoCiAgICAgICAgICAgICdSZXBvcnQgZXhjZWVkIGxpbWl0czoge30gPSB7fScuZm9ybWF0KGRheV9rZXksIGRheV92YWx1ZSkpCiAgICAgICAgcmV0dXJuCiAgICBzZW5kQ291bnRlclttaW5fa2V5XSA9IG1pbl92YWx1ZSArIDEKICAgIHNlbmRDb3VudGVyW2RheV9rZXldID0gZGF5X3ZhbHVlICsgMQogICAgdGl0bGVDb3VudGVyICs9IDEKICAgIGRhdGEgPSB7CiAgICAgICAgInRpdGxlIjogIkRldmljZV97fV9NZXNzYWdlX3t9Ii5mb3JtYXQoc2VuZGVyLCB0aXRsZUNvdW50ZXIpLAogICAgICAgICJkZXNwIjogbXNnLAogICAgfQogICAgdHJ5OgogICAgICAgIHIgPSByZXF1ZXN0cy5wb3N0KFdYX1JFUE9SVF9VUkwsIHBhcmFtcz1kYXRhLCB0aW1lb3V0PTEwKQogICAgICAgIGlmIHIub2s6CiAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJTZW50OiBbJXNdIiwgZGF0YVsidGl0bGUiXSkKICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJTZW5kIHJlcG9ydCBmb3IgJXMgc3VjY2Vzc2Z1bCIsIHNlbmRlcikKICAgICAgICBlbHNlOgogICAgICAgICAgICBsb2dnZXIud2FybmluZygiU2VuZCByZXBvcnQgZm9yICVzIGZhaWxlZCwgZXJyb3I6ICVzICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZGVyLCByLnN0YXR1c19jb2RlLCByLnRleHQpCiAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ3NlbmQgcmVwb3J0IGZhaWxlZCcpCiAgICB0aW1lLnNsZWVwKDEpCiAgICBzZW5kX2lvc19yZXBvcnQoZGF0YSkKCmRlZiBzZW5kX29ubGluZSgpOgogICAgdGltZS5zbGVlcCgxKQogICAgbG9nZ2VyLmluZm8oJ1NlbmQgbW9uaXRvciBvbmxpbmUnKQogICAgY2xpZW50LnB1Ymxpc2goImRldmljZS9vbmxpbmUiLCAiTVFUVCBNb25pdG9yL09ubGluZSB7fSIuZm9ybWF0KElQKSwgcmV0YWluPVRydWUpCiAgICBzZW5kX3JlcG9ydCgibW9uaXRvciIsICJNUVRUIE1vbml0b3IvT25saW5lIHt9Ii5mb3JtYXQoSVApKQogICAgCmRlZiBvbl9tZXNzYWdlKGNsaWVudCwgdXNlcmRhdGEsIG1zZyk6CiAgICB0b3BpYyA9IG1zZy50b3BpYwogICAgbWVzc2FnZSA9IG1zZy5wYXlsb2FkLmRlY29kZSgndXRmOCcpCiAgICBsb2dNc2cgPSAiW3t9XTo8e30+ICh7fSx7fSkiLmZvcm1hdCh0b3BpYywgbWVzc2FnZSwgbXNnLnFvcywgbXNnLnJldGFpbikKICAgIGxvZ2dlci5pbmZvKGxvZ01zZykKICAgIGlmIHRvcGljID09ICdkZXZpY2UvbW9uaXRvci9zdGF0dXMnOgogICAgICAgIHJldHVybgogICAgaWYgdG9waWMgPT0gJ2RldmljZS9jaGVjayc6CiAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbmRfb25saW5lKQogICAgICAgIHQuc3RhcnQoKQogICAgICAgIHJldHVybgogICAgbSA9IHJlLm1hdGNoKHIiXmRldmljZS8oXFMrKS9zdGF0dXMkIiwgdG9waWMpCiAgICBpZiBtIGFuZCBtLmdyb3VwKDEpOgogICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZW5kX3JlcG9ydCwgYXJncz0gKG0uZ3JvdXAoMSksIG1lc3NhZ2UsKSkKICAgICAgICB0LnN0YXJ0KCkKIyAgICAgICAgIHNlbmRfcmVwb3J0KG0uZ3JvdXAoMSksIG1lc3NhZ2UpCgoKZGVmIG9uX2Nvbm5lY3QoY2xpZW50LCB1c2VyZGF0YSwgZmxhZ3MsIHJjKToKICAgIGxvZ2dlci5pbmZvKCJDb25uZWN0ZWQgd2l0aCByZXN1bHQ6ICIgKyBtcXR0LmVycm9yX3N0cmluZyhyYykpCiAgICAjIGNsaWVudC5zdWJzY3JpYmUoIiRTWVMvIyIpCiAgICBjbGllbnQuc3Vic2NyaWJlKCJkZXZpY2UvIyIpCiAgICBfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQoc2VuZF9vbmxpbmUpCgpkZWYgb25fZGlzY29ubmVjdChjbGllbnQsIHVzZXJkYXRhLCByYyk6CiAgICBsb2dnZXIuaW5mbygiRGlzY29ubmVjdGVkIHdpdGggcmVzdWx0OiAiICsgbXF0dC5lcnJvcl9zdHJpbmcocmMpKQoKCmRlZiBjcmVhdGVfY2xpZW50KCk6CiAgICBjbGllbnQgPSBtcXR0LkNsaWVudChjbGllbnRfaWQ9TVFUVF9DTElFTlRfSUQsIGNsZWFuX3Nlc3Npb249RmFsc2UpCiAgICAjIGNsaWVudC5lbmFibGVfbG9nZ2VyKCkKICAgICMgY2xpZW50Lm9uX2xvZyA9IG9uX2xvZwogICAgY2xpZW50Lm9uX2Nvbm5lY3QgPSBvbl9jb25uZWN0CiAgICBjbGllbnQub25fZGlzY29ubmVjdCA9IG9uX2Rpc2Nvbm5lY3QKICAgIGNsaWVudC5vbl9tZXNzYWdlID0gb25fbWVzc2FnZQogICAgY2xpZW50LnVzZXJuYW1lX3B3X3NldChNUVRUX1VTRVIsIE1RVFRfUEFTUykKICAgIGNsaWVudC53aWxsX3NldCgiZGV2aWNlL29ubGluZSIsIHBheWxvYWQ9Ik1RVFQgTW9uaXRvci9PZmZsaW5lIHt9Ii5mb3JtYXQoSVApLCByZXRhaW49VHJ1ZSkKICAgIGNsaWVudC5jb25uZWN0KE1RVFRfU0VSVkVSLCBwb3J0PU1RVFRfUE9SVCwga2VlcGFsaXZlPTYwKQogICAgcmV0dXJuIGNsaWVudAoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBnZXRfcHVibGljX2lwKCkKICAgIGNsaWVudCA9IGNyZWF0ZV9jbGllbnQoKQogICAgbG9nZ2VyLmluZm8oIj09PT09PT09PT09PT09PT09PT09IikKICAgIGxvZ2dlci5pbmZvKCJNUVRUIE1vbml0b3IgU3RhcnRlZCIpCiAgICBjbGllbnQubG9vcF9mb3JldmVyKCkKPHxmaW1fc3VmZml4fD4KbG9nZ2luZ19jb25maWcoKQpsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigibW9uaXRvciIpCgoKPHxmaW1fZW5kfD4="]
["9deeef9ca97c7dae9293af39bb39345d56e572c5-2","9deeef9ca97c7dae9293af39bb39345d56e572c5","PHxmaW1fcHJlZml4fD4KYmFzZSA9IGZsb2F0KGlucHV0KCJCYXNlOiAiKSkKaGVpZ2h0ID0gZmxvYXQoaW5wdXQoIkhlaWdodDogIikpCgo8fGZpbV9ob2xlfD4KCmRlZiBhcmVhX29mX3NxdWFyZShzaWRlKToKICAgIGFyZWEgPSBzaWRlICoqIDIKICAgIHJldHVybiBhcmVhCgp1c2VyX3Jlc3VsdCA9IGFyZWFfb2ZfdHJpYW5nbGUoYmFzZSxoZWlnaHQpCmZpeGVkX3Jlc3VsdCA9IGFyZWFfb2ZfdHJpYW5nbGUoMTIsMTApCgpwcmludCgiVXNlcjogIix1c2VyX3Jlc3VsdCwiXG4gRml4ZWQ6ICIsZml4ZWRfcmVzdWx0KQo8fGZpbV9zdWZmaXh8PgpkZWYgYXJlYV9vZl90cmlhbmdsZShiYXNlLGhlaWdodCk6CiAgICBhcmVhID0gYmFzZSAqIGhlaWdodAoJYXJlYSA9IGFyZWEgLyAyCiAgICByZXR1cm4gYXJlYQo8fGZpbV9lbmR8Pg=="]
["6e9b9eb77f0cfc6d9e3038a67d171d6dc83fd4e6-3","6e9b9eb77f0cfc6d9e3038a67d171d6dc83fd4e6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IEFNQwoKaW1wb3J0IHRpbWUKCklQID0gIjE5Mi4xNjguMS4xIgoKIyBTZXR1cCBjb25uZWN0aW9uIHRvIEFNQwphbWMgPSBBTUMuRGV2aWNlKElQKQphbWMuY29ubmVjdCgpCgojIEFjdGl2YXRlIGF4aXMgMQojIEludGVybmFsbHksIGF4ZXMgYXJlIG51bWJlcmVkIDAgdG8gMgpheGlzID0gMCAjIEF4aXMgMQphbWMuY29udHJvbC5zZXRDb250cm9sT3V0cHV0KGF4aXMsIFRydWUpCgojIENoZWNrIGlmIG9wZW4gbG9vcCBwb3NpdGlvbmVyIGlzIGNvbm5lY3RlZApPTCA9IDEKaWYgYW1jLnN0YXR1cy5nZXRPbFN0YXR1cyhheGlzKSA9PSBPTDoKICAgICMgQ29udGludW91cyBvcGVuIGxvb3AgZHJpdmUgZm9yd2FyZCBmb3IgMSBzZWNvbmQKICAgICMgU3RhcnQKICAgIGFtYy5tb3ZlLnNldENvbnRyb2xDb250aW51b3VzRndkKGF4aXMsIFRydWUpCiAgICB0aW1lLnNsZWVwKDEpCiAgICAjIFN0b3AKICAgIGFtYy5tb3ZlLnNldENvbnRyb2xDb250aW51b3VzRndkKGF4aXMsIEZhbHNlKQoKICAgICMgU3RlcHdpc2Ugb3BlbiBsb29wIGRyaXZlIGZvcndhcmQKICAgIG5TdGVwcyA9IDEwICMgTnVtYmVyIG9mIHN0ZXBzLCAvUFJPLWZlYXR1cmUgcmVxdWlyZWQgZm9yIG5TdGVwcyA+IDEKICAgIGJhY2t3YXJkcyA9IEZhbHNlCiAgICAjIFBlcmZvcm0gblN0ZXBzIHN0ZXBzCiAgICBhbWMubW92ZS5zZXROU3RlcHMoYXhpcywgYmFja3dhcmRzLCBuU3RlcHMpCmVsc2U6CiAgICAjIENsb3NlZCBsb29wIGRyaXZlIDEwMDAwbm0gaW4gZm9yd2FyZCBkaXJlY3Rpb24KICAgIHBvc2l0aW9uID0gYW1jLm1vdmUuZ2V0UG9zaXRpb24oYXhpcykKICAgIGFtYy5tb3ZlLnNldENvbnRyb2xUYXJnZXRQb3NpdGlvbihheGlzLCBwb3NpdGlvbiArIDEwMDAwKQogICAgYW1jLmNvbnRyb2wuc2V0Q29udHJvbE1vdmUoYXhpcywgVHJ1ZSkKCiAgICB3aGlsZSBub3QgYW1jLnN0YXR1cy5nZXRTdGF0dXNUYXJnZXRSYW5nZShheGlzKToKICAgICAgICAjIFJlYWQgb3V0IHBvc2l0aW9uIGluIG5tCiAgICAgICAgcG9zaXRpb24gPSBhbWMubW92ZS5nZXRQb3NpdGlvbihheGlzKQogICAgICAgIHByaW50KHBvc2l0aW9uKQogICAgICAgIHRpbWUuc2xlZXAoMC4xKQoKICAgICMgU3RvcCBhcHByb2FjaAogICAgYW1jLmNvbnRyb2wuc2V0Q29udHJvbE1vdmUoYXhpcywgRmFsc2UpCjx8ZmltX2hvbGV8PgojIENsb3NlIGNvbm5lY3Rpb24KYW1jLmNsb3NlKCkKPHxmaW1fc3VmZml4fD4KCiMgRGVhdGl2YXRlIGF4aXMKYW1jLmNvbnRyb2wuc2V0Q29udHJvbE91dHB1dChheGlzLCBGYWxzZSkKCjx8ZmltX2VuZHw+"]
["014db4be2857dd49264985207c2dd345fe4a3c63-4","014db4be2857dd49264985207c2dd345fe4a3c63","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KJycnCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkF1dGhvcjogICAgICAgICB6aGxpbmgKPHxmaW1fZW5kfD4="]
["113733957c0583ed56487b816cd3389dca5aa40e-1","113733957c0583ed56487b816cd3389dca5aa40e","PHxmaW1fcHJlZml4fD4KIiIiCkNvbnZlcnQgdGhlIHNvdXJjZSBmaWxlIGZvciB0aGUgS2FnZ2xlIFJvc3NtYW4gU3RvcmUgU2FsZXMgcHJlZGljdGlvbiBkYXRhc2V0IHRvCnRoZSBzdGFuZGFyZGl6ZWQgZm9ybWF0LiBBbHNvIGNyZWF0ZSBhIHRyYWluLXRlc3Qgc3BsaXQuCgpOb3RlOiBkdWUgdG8gdGhlIHJlcXVpcmVtZW50cyBvZiBLYWdnbGUsIHRoZSBgdHJhaW4uY3N2YCBmaWxlIG11c3QgYmUgZG93bmxvYWRlZApiZWZvcmUgcnVubmluZyB0aGlzIHNjcmlwdC4KIiIiCgppbXBvcnQgb3MKCmltcG9ydCBzaW1wbGVqc29uIGFzIGpzb24KZnJvbSBza2xlYXJuLm1vZGVsX3NlbGVjdGlvbiBpbXBvcnQgdHJhaW5fdGVzdF9zcGxpdAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cgpmcm9tIHV0aWxzIGltcG9ydCBjb2x1bW5fbmFtZV9hcnJheSwgY29udmVydF9jYXRlZ29yaWNhbCwgY3JlYXRlX2Nzdl9yZWFkZXIsIGRlZmF1bHRfY29uZmlnLCBcCiAgICBnZW5lcmF0ZV9wcm9maWxlLCBzYXZlX2pzb24sIHNhdmVfbnB6LCBzcGxpdF9ieV9sYWJlbAoKPHxmaW1fZW5kfD4="]
["eec39c167be8afd810bb185fbc7df2d45b451a30-1","eec39c167be8afd810bb185fbc7df2d45b451a30","PHxmaW1fcHJlZml4fD4KZnJvbSBtb2R1bGVzLmFuZHJvaWQuc3VwZXJfYmFzZSBpbXBvcnQgU3VwZXJfYmFzZQpmcm9tIG1vZHVsZXMuc3RpeC5zdGl4X2Jhc2UgaW1wb3J0IEJ1bmRsZWQKZnJvbSB1dGlscy5sb2dnZXIgaW1wb3J0IExvZ2dlcgpmcm9tIHV0aWxzLm1pdGlnYXRpb25zIGltcG9ydCBsb2FkX21pdGlnYXRpb24KCgpjbGFzcyBXZWJ2aWV3X3NzbF9lcnJvcnMoU3VwZXJfYmFzZSk6CiAgICAiIiIKICAgIENoZWNrIGlmIHRoZSBXZWJWaWV3IGlnbm9yZXMgU1NMIEVycm9ycy4KICAgICIiIgoKICAgIHN0aXggPSBCdW5kbGVkKG1pdGlnYXRpb25fb2JqZWN0PWxvYWRfbWl0aWdhdGlvbigiV0VCVklFV19JR05PUkVTX1NTTF9FUlJPUlMiKSkKCiAgICBkZWYgX2dldF9sb2dnZXIoc2VsZik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAiIiIKICAgICAgICBHZXQgdGhlIG1vZHVsZSBsb2dnZXIgbmFtZWQgYWZ0ZXIgdGhlIG1vZHVsZS4KCiAgICAgICAgOnJldHVybjogbG9nZ2VyCjx8ZmltX2VuZHw+"]
["09cc45635b45fca0983c371eb829d9e29a966588-2","09cc45635b45fca0983c371eb829d9e29a966588","PHxmaW1fcHJlZml4fD4KZnJhc2UgPSAiQSBnZW50ZSB2YWkgYmVtIG1haXMgbG9uZ2UgcXVhbmRvIGVzdHVkYW1vcyIKcHJpbnQoZnJhc2UpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcHJpbnQoIiIpCnByaW50KCJBIGZyYXNlIHRlbSIsIGxlbihmcmFzZSksICJjYXJhY3RlcmVzIikKPHxmaW1fZW5kfD4="]
["282f6e5e08b53b1f58355317aeb8aa13565b0705-3","282f6e5e08b53b1f58355317aeb8aa13565b0705","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KIiIiQSBzY3JpcHQgdG8gZmV0Y2ggYWxsIGRieHJlZiBhbm5vdGF0aW9ucyBvZiBhIGNlcnRhaW4gdHlwZSBmcm9tIGEgZ2ZmIGZpbGUiIiIKCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgcmUKClRZUEVfUkVHUyA9IHsgIlBGQU0iOiAnRGJ4cmVmPXBmYW0oWzAtOV0rKScsCiAgICAgICAgICAgICAgIkNPRyI6ICAnRGJ4cmVmPUNPRyhbMC05XSspJywKPHxmaW1faG9sZXw+ClRZUEVfUkVHU19XSVRIX0VWQUxVRSA9IHsgIlBGQU0iOiAnRGJ4cmVmPXBmYW0oWzAtOV0rKSxldmFsdWU6KFtlXC1cZFwuXSopLCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIkNPRyI6ICdEYnhyZWY9Q09HKFswLTldKyksZXZhbHVlOihbZVwtXGRcLl0qKSwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICJUSUdSIjogJ0RieHJlZj1USUdSKFswLTldKyksZXZhbHVlOihbZVwtXGRcLl0qKSwnfQoKZGVmIG1haW4oYXJncyk6CiAgICBpZiBhcmdzLndpdGhfZXZhbHVlOgogICAgICAgIHJlZ19zID0gVFlQRV9SRUdTX1dJVEhfRVZBTFVFW2FyZ3MudHlwZV0KICAgIGVsc2U6CiAgICAgICAgcmVnX3MgPSBUWVBFX1JFR1NbYXJncy50eXBlXQoKICAgIHJlZyA9IHJlLmNvbXBpbGUocmVnX3MpCiAgICBnZW5lX3JlZyA9IHJlLmNvbXBpbGUoJ0lEPShbXjtdKyknKQoKICAgIHNraXBfcmVzdCA9IEZhbHNlCiAgICBtYXRjaGVzID0gW10KICAgIHdpdGggb3BlbihhcmdzLmluZmlsZSwgJ3InKSBhcyBmaDoKICAgICAgICBmb3IgbGluZSBpbiBmaDoKICAgICAgICAgICAgaWYgc2tpcF9yZXN0OgogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCc+Jyk6CiAgICAgICAgICAgICAgICBza2lwX3Jlc3QgPSBUcnVlCiAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCcjJyk6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgZ2VuZV9tYXRjaCA9IGdlbmVfcmVnLnNlYXJjaChsaW5lKQogICAgICAgICAgICAgICAgaWYgZ2VuZV9tYXRjaCBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgIHByaW50KGxpbmUpCiAgICAgICAgICAgICAgICAgICAgZXhpdCgtMSkKICAgICAgICAgICAgICAgIGdlbmVfaWQgPSBnZW5lX21hdGNoLmdyb3VwKDEpCiAgICAgICAgICAgICAgICBmb3IgbWF0Y2ggaW4gcmVnLmZpbmRhbGwobGluZSk6CiAgICAgICAgICAgICAgICAgICAgaWYgYXJncy53aXRoX2V2YWx1ZToKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlx0Ii5qb2luKFtnZW5lX2lkLCBzdHIoYXJncy50eXBlICsgbWF0Y2hbMF0pLCBtYXRjaFsxXV0pKQogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJcdCIuam9pbihbZ2VuZV9pZCwgc3RyKGFyZ3MudHlwZSArIG1hdGNoKV0pKSAKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj1fX2RvY19fKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiaW5maWxlIiwgCiAgICAgICAgICAgIGhlbHA9KCJHZmYgZmlsZSB3aXRoIGFubm90YXRpb25zIGFzIGRieHJlZiIpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgidHlwZSIsIGNob2ljZXM9WyJQRkFNIiwgIlRJR1IiLCAiQ09HIiwgIkVDIl0sCiAgICAgICAgICAgIGhlbHA9KCJUaGUgYW5ub3RhdGlvbiB0eXBlIHRvIGZldGNoIikpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLXdpdGhfZXZhbHVlIiwgYWN0aW9uPSdzdG9yZV90cnVlJykKICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCiAgICBtYWluKGFyZ3MpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgIlRJR1IiOiAnRGJ4cmVmPVRJR1IoWzAtOV0rKSd9Cgo8fGZpbV9lbmR8Pg=="]
["6e230b79d387d79de5ed812317a193e1c259cc9d-4","6e230b79d387d79de5ed812317a193e1c259cc9d","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgogICAgCWlmICd1c2VybmFtZScgbm90IGluIHJlcXVlc3Quc2Vzc2lvbjoKICAgIAkJcmV0dXJuIEh0dHBSZXNwb25zZVJlZGlyZWN0KCcvcm9hZHMvbG9naW4vJykKICAgIAlyZXR1cm4gZnVuY3Rpb24ocmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKQogICAgd3JhcC5fX2RvY19fID0gZnVuY3Rpb24uX19kb2NfXwogICAgd3JhcC5fX25hbWVfXyA9IGZ1bmN0aW9uLl9fbmFtZV9fCiAgICByZXR1cm4gd3JhcAo8fGZpbV9zdWZmaXh8Pgpmcm9tIGRqYW5nby5zaG9ydGN1dHMgaW1wb3J0IEh0dHBSZXNwb25zZVJlZGlyZWN0CgpkZWYgdXNlcl9zZXNzaW9uX3NldChmdW5jdGlvbik6CiAgICBkZWYgd3JhcChyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgo8fGZpbV9lbmR8Pg=="]
["3ad08e96d9b8b25df4ae64e5d4210a2e3989cd37-5","3ad08e96d9b8b25df4ae64e5d4210a2e3989cd37","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGJweQpmcm9tIGJweS5wcm9wcyBpbXBvcnQgKgpmcm9tIC4uLm5vZGVzLkJBU0Uubm9kZV9iYXNlIGltcG9ydCBSZW5kZXJOb2RlQmFzZQoKCmNsYXNzIFJlbmRlck5vZGVTZXRTY2VuZVZpZXdMYXllcihSZW5kZXJOb2RlQmFzZSk6CiAgICAiIiJBIHNpbXBsZSBpbnB1dCBub2RlIiIiCiAgICBibF9pZG5hbWUgPSAnUmVuZGVyTm9kZVNldFNjZW5lVmlld0xheWVyJwogICAgYmxfbGFiZWwgPSAnU2V0IFNjZW5lIFZpZXcgTGF5ZXInCgogICAgZGVmIGluaXQoc2VsZiwgY29udGV4dCk6CiAgICAgICAgc2VsZi5jcmVhdGVfaW5wdXQoJ1JlbmRlck5vZGVTb2NrZXRUYXNrJywgJ3Rhc2snLCAnVGFzaycpCiAgICAgICAgc2VsZi5jcmVhdGVfb3V0cHV0KCdSZW5kZXJOb2RlU29ja2V0VGFzaycsICd0YXNrJywgJ1Rhc2snKQoKICAgICAgICBzZWxmLmNyZWF0ZV9pbnB1dCgnUmVuZGVyTm9kZVNvY2tldFZpZXdMYXllcicsICJ2aWV3X2xheWVyIiwgJ1ZpZXdMYXllcicpCiAgICAgICAgc2VsZi5jcmVhdGVfaW5wdXQoJ1JlbmRlck5vZGVTb2NrZXRCb29sJywgJ3VzZV9mb3JfcmVuZGVyJywgJ1VzZSBmb3IgUmVuZGVyaW5nJywgZGVmYXVsdF92YWx1ZT1UcnVlKQogICAgICAgIHNlbGYuY3JlYXRlX2lucHV0KCdSZW5kZXJOb2RlU29ja2V0Qm9vbCcsICdvdXRwdXRfY29tcG9zaXRlX3Bhc3NlcycsICdPdXRwdXQgQ29tcG9zaXRlIFBhc3NlcycpCgogICAgZGVmIHByb2Nlc3Moc2VsZiwgY29udGV4dCwgaWQsIHBhdGgpOgogICAgICAgIGlmIG5vdCBzZWxmLnByb2Nlc3NfdGFzaygpOiByZXR1cm4KCiAgICAgICAgdmlld19sYXllcl9uYW1lID0gc2VsZi5pbnB1dHNbJ3ZpZXdfbGF5ZXInXS5nZXRfdmFsdWUoKQogICAgICAgIHZpZXdfbGF5ZXIgPSBjb250ZXh0LnNjZW5lLnZpZXdfbGF5ZXJzLmdldCh2aWV3X2xheWVyX25hbWUpCgogICAgICAgIGlmIHZpZXdfbGF5ZXI6CiAgICAgICAgICAgIHNlbGYuY29tcGFyZShjb250ZXh0LndpbmRvdywgJ3ZpZXdfbGF5ZXInLCB2aWV3X2xheWVyKQogICAgICAgICAgICBzZWxmLmNvbXBhcmUodmlld19sYXllciwgJ3VzZScsIHNlbGYuaW5wdXRzWyd1c2VfZm9yX3JlbmRlciddLmdldF92YWx1ZSgpKQoKICAgICAgICAgICAgIyBjcmVhdGUgY29tcCBub2RlIHRyZWUKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgYnB5Lm9wcy5yc24uY3JlYXRlX2NvbXBvc2l0b3Jfbm9kZSgKICAgICAgICAgICAgICAgICAgICB2aWV3X2xheWVyPXZpZXdfbGF5ZXJfbmFtZSwKICAgICAgICAgICAgICAgICAgICB1c2VfcGFzc2VzPXNlbGYuaW5wdXRzWydvdXRwdXRfY29tcG9zaXRlX3Bhc3NlcyddLmdldF92YWx1ZSgpKQogICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAgICBwcmludChmJ1ZpZXcgTGF5ZXIgUGFzc2VzIHtzZWxmLm5hbWV9IGVycm9yOntlfScpCgoKIyBbCiMgICAgIGF0dHIKIyAgICAgZm9yIGF0dHIgaW4gZGlyKEMudmlld19sYXllcikKIyAgICAgaWYgYXR0ci5zdGFydHN3aXRoKCJ1c2VfcGFzcyIpIGFuZCBnZXRhdHRyKEMudmlld19sYXllciwgYXR0cikgPT0gVHJ1ZQojIF0KPHxmaW1faG9sZXw+CiMgICAgIGlmIGdldGF0dHIoQy52aWV3X2xheWVyLCBhdHRyKSA9PSBUcnVlCiMgXQoKCmRlZiByZWdpc3RlcigpOgogICAgYnB5LnV0aWxzLnJlZ2lzdGVyX2NsYXNzKFJlbmRlck5vZGVTZXRTY2VuZVZpZXdMYXllcikKCgpkZWYgdW5yZWdpc3RlcigpOgogICAgYnB5LnV0aWxzLnVucmVnaXN0ZXJfY2xhc3MoUmVuZGVyTm9kZVNldFNjZW5lVmlld0xheWVyKQo8fGZpbV9zdWZmaXh8PgoKIyBbCiMgICAgIGF0dHIKIyAgICAgZm9yIGF0dHIgaW4gZGlyKEMudmlld19sYXllcikKPHxmaW1fZW5kfD4="]
["6eaa4b7d880ddbb385bcf13a131708e98b5c0e8a-1","6eaa4b7d880ddbb385bcf13a131708e98b5c0e8a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNsaWNrCgpmcm9tIC5jb21tb24gaW1wb3J0ICgKICAgIGNoZWNrX2luc3RhbGxhdGlvbiwgZ2V0X2FjdGl2ZV9uYW1lcywgZ2V0X3ZlcnNpb25zLCB2ZXJzaW9uX2NvbW1hbmQsCikKCgpAdmVyc2lvbl9jb21tYW5kKCkKZGVmIHdoZXJlKHZlcnNpb24pOgogICAgaW5zdGFsbGF0aW9uID0gY2hlY2tfaW5zdGFsbGF0aW9uKHZlcnNpb24pCiAgICBjbGljay5lY2hvKHN0cihpbnN0YWxsYXRpb24ucHl0aG9uKSkKCgpkZWYgbGlzdF8obGlzdF9hbGwpOgogICAgdmVycyA9IGdldF92ZXJzaW9ucyhpbnN0YWxsZWRfb25seT0obm90IGxpc3RfYWxsKSkKICAgIGFjdGl2ZV9uYW1lcyA9IHNldChnZXRfYWN0aXZlX25hbWVzKCkpCgogICAgZm9yIHYgaW4gdmVyczoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIG1hcmtlciA9ICcgJwogICAgICAgIGlmIHYubmFtZSBpbiBhY3RpdmVfbmFtZXM6CiAgICAgICAgICAgIG1hcmtlciA9ICcqJwogICAgICAgIGVsaWYgdi5pc19pbnN0YWxsZWQoKToKPHxmaW1fZW5kfD4="]
["a374ca3303dafa5aa2f6817328f42cdc4728bbab-1","a374ca3303dafa5aa2f6817328f42cdc4728bbab","PHxmaW1fcHJlZml4fD4KaW50Zl9kZXNjX1N0b3JlID0gW10KRGV2aWNlX1N0b3JlID0gW10KQXJwX1N0b3JlID0gW10KY2RwX1N0b3JlID0gW10KbWFjX1N0b3JlID0gW10KZXRoZXJjaGFubmVsX1N0b3JlID0gW10KcGNfbWVtYmVyID0gW10KcGNfZmxhZ3MgPSBbXQppbnRmX2JyaWVmX1N0b3JlID0gW10KaW50Zl9zdGF0dXNfU3RvcmUgPSBbXQogIApkZWYgdmVyX2Z1bmMoc3BlY2lhbF9vdXRwdXQsZGV2aWNlKToKICAgICAgICAgICAgICAgICAgICAKICAgIHN5c192ZXJzaW9uID0gc3BlY2lhbF9vdXRwdXRbJ3ZlcnNpb24nXVsndmVyc2lvbiddCiAgICBzeXNfaW1hZ2UgPSBzcGVjaWFsX291dHB1dFsndmVyc2lvbiddWydzeXN0ZW1faW1hZ2UnXQogICAgc3lzX21vZGVsID0gc3BlY2lhbF9vdXRwdXRbJ3ZlcnNpb24nXVsnY2hhc3NpcyddCiAgICBzeXNfbWVtb3J5ID0gc3BlY2lhbF9vdXRwdXRbJ3ZlcnNpb24nXVsnbWFpbl9tZW0nXQogICAgCiAgICBzeXNfbGljID0gc3BlY2lhbF9vdXRwdXRbJ3ZlcnNpb24nXVsnbGljZW5zZV9sZXZlbCddCiAgICAjc3lzX2xpYyA9ICdOL0EnCiAgICBzeXNfc2VyaWFsID0gc3BlY2lhbF9vdXRwdXRbJ3ZlcnNpb24nXVsnY2hhc3Npc19zbiddICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAKICAgIERldmljZV9BdWRpdCA9IHsiU3dpdGNoIjogZGV2aWNlLmFsaWFzLCAiVmVyc2lvbiI6IHN5c192ZXJzaW9uLCAiSW1hZ2UiOiBzeXNfaW1hZ2UsICJNb2RlbCI6IHN5c19tb2RlbCwgIk1lbW9yeSI6IHN5c19tZW1vcnksICJMaWNlbnNlIjogc3lzX2xpYywgIlNlcmlhbCBOdW1iZXIiOiBzeXNfc2VyaWFsfSAgICAgICAgICAgICAgICAgICAKICAgIERldmljZV9TdG9yZS5hcHBlbmQoRGV2aWNlX0F1ZGl0KSAgICAgICAgICAgICAgICAKICAgIHJldHVybiBEZXZpY2VfU3RvcmUKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6IAogICAgdmVyX2Z1bmMoKSgpICAgICAgIAoKZGVmIGludGZfZnVuYyhpbnRmX2Rlc2MsZGV2aWNlKToKICAgICAgCiAgICBmb3IgaW50ZiBpbiBpbnRmX2Rlc2NbJ2ludGVyZmFjZXMnXS5rZXlzKCk6CiAgICAgICAgaW50Zl9kZXNjX3BvcnQgPSBpbnRmCiAgICAgICAgaW50Zl9kZXNjX25hbWUgPSBpbnRmX2Rlc2NbJ2ludGVyZmFjZXMnXVtpbnRmXVsnZGVzY3JpcHRpb24nXQogICAgICAgIGludGZfZGVzY19zdGF0dXMgPSBpbnRmX2Rlc2NbJ2ludGVyZmFjZXMnXVtpbnRmXVsnc3RhdHVzJ10KICAgICAgICBpbnRmX2Rlc2NfcHJvdG9jb2wgPSBpbnRmX2Rlc2NbJ2ludGVyZmFjZXMnXVtpbnRmXVsncHJvdG9jb2wnXQogICAgICAgIGludGZfZGVzY19BdWRpdCA9IHsiU3dpdGNoIjogZGV2aWNlLmFsaWFzLCAiSU5URVJGQUNFIjogaW50Zl9kZXNjX3BvcnQsICJEZXNjcmlwdGlvbiI6IGludGZfZGVzY19uYW1lLCAiU3RhdHVzIjogaW50Zl9kZXNjX3N0YXR1cywgIlBST1RPQ09MIjogaW50Zl9kZXNjX3Byb3RvY29sfQogICAgICAgIGludGZfZGVzY19TdG9yZS5hcHBlbmQoaW50Zl9kZXNjX0F1ZGl0KSAKICAgIHJldHVybiBpbnRmX2Rlc2NfU3RvcmUKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6IAogICAgaW50Zl9mdW5jKCkKICAgICAgICAgICAgCmRlZiBhcnBfZnVuYyhhcnAsZGV2aWNlKTogICAgCiAgICAKICAgIGZvciBpbnRmIGluIGFycFsnaW50ZXJmYWNlcyddLmtleXMoKToKICAgICAgICBmb3IgYXJwX2ludGYgaW4gYXJwWydpbnRlcmZhY2VzJ11baW50Zl1bJ2lwdjQnXVsnbmVpZ2hib3JzJ10ua2V5cygpOgogICAgICAgICAgICBhcnBfaXAgPSBhcnBbJ2ludGVyZmFjZXMnXVtpbnRmXVsnaXB2NCddWyduZWlnaGJvcnMnXVthcnBfaW50Zl1bJ2lwJ10KICAgICAgICAgICAgYXJwX21hYyA9IGFycFsnaW50ZXJmYWNlcyddW2ludGZdWydpcHY0J11bJ25laWdoYm9ycyddW2FycF9pbnRmXVsnbGlua19sYXllcl9hZGRyZXNzJ10KICAgICAgICAgICAgYXJwX3R5cGUgPSBhcnBbJ2ludGVyZmFjZXMnXVtpbnRmXVsnaXB2NCddWyduZWlnaGJvcnMnXVthcnBfaW50Zl1bJ3R5cGUnXQogICAgICAgICAgICBhcnBfb3JpZ2luID0gYXJwWydpbnRlcmZhY2VzJ11baW50Zl1bJ2lwdjQnXVsnbmVpZ2hib3JzJ11bYXJwX2ludGZdWydvcmlnaW4nXQogICAgICAgICAgICBhcnBfYWdlID0gYXJwWydpbnRlcmZhY2VzJ11baW50Zl1bJ2lwdjQnXVsnbmVpZ2hib3JzJ11bYXJwX2ludGZdWydhZ2UnXQoKICAgICAgICAgICAgQXJwX0F1ZGl0ID0geyJTd2l0Y2giOiBkZXZpY2UuYWxpYXMsICJJUCI6IGFycF9pcCwgIk1BQyI6IGFycF9tYWMsICJJTlRFUkZBQ0UiOiBhcnBfdHlwZSwgIk9SSUdJTiI6IGFycF9vcmlnaW4sICJBR0UiOiBhcnBfYWdlfQogICAgICAgICAgICBBcnBfU3RvcmUuYXBwZW5kKEFycF9BdWRpdCkKICAgIHJldHVybiBBcnBfU3RvcmUKICAgIAogICAgICAgICAgICAgICAgCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6IAogICAgYXJwX2Z1bmMoKQogICAgCiAgICAKZGVmIGNkcF9mdW5jKGNkcF9uZWksZGV2aWNlKTogCgogICAgaiA9IDEKICAgIHdoaWxlIGogPCBsZW4oY2RwX25laVsnaW5kZXgnXS5rZXlzKCkpOgogICAgICAgIGNkcF9yZW1vdGVfZGV2aWNlID0gY2RwX25laVsnaW5kZXgnXVtqXVsnZGV2aWNlX2lkJ10gCiAgICAgICAgY2RwX3JlbW90ZV9uYXRpdmV2bGFuID0gcHJpbnQoY2RwX25laVsnaW5kZXgnXVtqXVsnbmF0aXZlX3ZsYW4nXSkgICAKICAgICAgICBjZHBfcmVtb3RlX21ndGlwID0gY2RwX25laVsnaW5kZXgnXVtqXVsnbWFuYWdlbWVudF9hZGRyZXNzZXMnXQogICAgICAgIGNkcF9yZW1vdGVfcG9ydCA9IGNkcF9uZWlbJ2luZGV4J11bal1bJ3BvcnRfaWQnXQogICAgICAgIGNkcF9sb2NhbF9wb3J0ID0gY2RwX25laVsnaW5kZXgnXVtqXVsnbG9jYWxfaW50ZXJmYWNlJ10KICAgICAgICBqKz0xICAgICAKCiAgICAgICAgY2RwX0F1ZGl0ID0geyJTd2l0Y2giOiBkZXZpY2UuYWxpYXMsICJSRU1PVEVfREVWSUNFIjogY2RwX3JlbW90ZV9kZXZpY2UsICJSRU1PVEVfTkFUSVZFVkxBTiI6IGNkcF9yZW1vdGVfbmF0aXZldmxhbiwgIlJFTU9URV9ERVZJQ0VfTUdUSVAiOiBjZHBfcmVtb3RlX21ndGlwLCAiUkVNT1RFX1BPUlQiOiBjZHBfcmVtb3RlX3BvcnQsICJMT0NBTF9QT1JUIjogY2RwX2xvY2FsX3BvcnR9CiAgICAgICAgY2RwX1N0b3JlLmFwcGVuZChjZHBfQXVkaXQpCiAgICByZXR1cm4gY2RwX1N0b3JlCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOiAKICAgIGNkcF9mdW5jKCkKICAgIAogICAgCmRlZiBtYWNfZnVuYyhtYWMsZGV2aWNlKTogIAogICAgCiAgICBmb3IgbWFjX2ludCBpbiBtYWNbJ21hY190YWJsZSddWyd2bGFucyddLmtleXMoKToKICAgICAgICBtYWNfdmxhbiA9IG1hY1snbWFjX3RhYmxlJ11bJ3ZsYW5zJ11bbWFjX2ludF1bJ3ZsYW4nXQogICAgICAgIGZvciBtYWNfYWRkIGluIG1hY1snbWFjX3RhYmxlJ11bJ3ZsYW5zJ11bbWFjX2ludF1bJ21hY19hZGRyZXNzZXMnXS5rZXlzKCk6CiAgICAgICAgICAgIG1hY19od2FkZCA9IG1hY1snbWFjX3RhYmxlJ11bJ3ZsYW5zJ11bbWFjX2ludF1bJ21hY19hZGRyZXNzZXMnXVttYWNfYWRkXVsnbWFjX2FkZHJlc3MnXQogICAgICAgICAgICBmb3IgaW50ZXJmYWNlIGluIG1hY1snbWFjX3RhYmxlJ11bJ3ZsYW5zJ11bbWFjX2ludF1bJ21hY19hZGRyZXNzZXMnXVttYWNfYWRkXVsnaW50ZXJmYWNlcyddLmtleXMoKToKICAgICAgICAgICAgICAgIG1hY19wb3J0ID0gbWFjWydtYWNfdGFibGUnXVsndmxhbnMnXVttYWNfaW50XVsnbWFjX2FkZHJlc3NlcyddW21hY19hZGRdWydpbnRlcmZhY2VzJ11baW50ZXJmYWNlXVsnaW50ZXJmYWNlJ10KICAgICAgICAgICAgICAgIG1hY190eXBlID0gbWFjWydtYWNfdGFibGUnXVsndmxhbnMnXVttYWNfaW50XVsnbWFjX2FkZHJlc3NlcyddW21hY19hZGRdWydpbnRlcmZhY2VzJ11baW50ZXJmYWNlXVsnZW50cnlfdHlwZSddICAgIAoKICAgICAgICAgICAgICAgIG1hY19BdWRpdCA9IHsiU3dpdGNoIjogZGV2aWNlLmFsaWFzLCAiTUFDX0FERFJFU1MiOiBtYWNfaHdhZGQsICJNQUNfVFlQRSI6IG1hY190eXBlLCAiTUFDX1ZMQU4iOiBtYWNfdmxhbiwgIk1BQ19QT1JUIjogbWFjX3BvcnR9CiAgICAgICAgICAgICAgICBtYWNfU3RvcmUuYXBwZW5kKG1hY19BdWRpdCkKCiAgICByZXR1cm4gbWFjX1N0b3JlCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOiAKICAgIG1hY19mdW5jKCkgICAgCiAgICAKICAgICAgICAKZGVmIGV0aGVyY2hhbm5lbF9mdW5jKHBvcnRfY2hhbm5lbCxkZXZpY2UpOgogICAgcG9ydGNoYW5uZWxfbGFncyA9IHBvcnRfY2hhbm5lbFsnbnVtYmVyX29mX2xhZ19pbl91c2UnXQogICAgcG9ydGNoYW5uZWxfYWdnID0gcG9ydF9jaGFubmVsWydudW1iZXJfb2ZfYWdncmVnYXRvcnMnXQogICAgZm9yIHBvcnRfaW50ZiBpbiBwb3J0X2NoYW5uZWxbJ2ludGVyZmFjZXMnXS5rZXlzKCk6CiAgICAgICAgcG9ydGNoYW5uZWxfbmFtZSA9IHBvcnRfY2hhbm5lbFsnaW50ZXJmYWNlcyddW3BvcnRfaW50Zl1bJ25hbWUnXQogICAgICAgIHBvcnRjaGFubmVsX2lkID0gcG9ydF9jaGFubmVsWydpbnRlcmZhY2VzJ11bcG9ydF9pbnRmXVsnYnVuZGxlX2lkJ10KICAgICAgICBwb3J0Y2hhbm5lbF9vcGVyc3RhdHVzID0gcG9ydF9jaGFubmVsWydpbnRlcmZhY2VzJ11bcG9ydF9pbnRmXVsnb3Blcl9zdGF0dXMnXQogICAgICAgIGZvciBtZW1iZXIgaW4gcG9ydF9jaGFubmVsWydpbnRlcmZhY2VzJ11bcG9ydF9pbnRmXVsnbWVtYmVycyddLmtleXMoKToKICAgICAgICAgICAgcGNfbWVtYmVyLmFwcGVuZChtZW1iZXIpCiAgICAgICAgICAgIHBjX2ZsYWdzLmFwcGVuZChwb3J0X2NoYW5uZWxbJ2ludGVyZmFjZXMnXVtwb3J0X2ludGZdWydtZW1iZXJzJ11bbWVtYmVyXVsnZmxhZ3MnXSkKICAgICAgICBwb3J0Y2hhbm5lbF9mbGFncyA9IHBjX2ZsYWdzCiAgICAgICAgcG9ydGNoYW5uZWxfbWVtYmVycyA9IHBjX21lbWJlcgoKICAgICAgICBldGhlcmNoYW5uZWxfQXVkaXQgPSB7IlN3aXRjaCI6IGRldmljZS5hbGlhcywgIkNIQU5ORUxfTEFHUyI6IHBvcnRjaGFubmVsX2xhZ3MsICJDSEFOTkVMX0FHRyI6IHBvcnRjaGFubmVsX2FnZywgIkNIQU5ORUxfTkFNRSI6IHBvcnRjaGFubmVsX25hbWUsICJDSEFOTkVMX0lEIjogcG9ydGNoYW5uZWxfaWQsICJDSEFOTkVMX1NUQVRVUyI6IHBvcnRjaGFubmVsX29wZXJzdGF0dXMsICJDSEFOTkVMX01FTUJFUlMiOnBvcnRjaGFubmVsX21lbWJlcnMsICJDSEFOTkVMX0ZMQUdTIjogcG9ydGNoYW5uZWxfZmxhZ3N9CiAgICAgICAgZXRoZXJjaGFubmVsX1N0b3JlLmFwcGVuZChldGhlcmNoYW5uZWxfQXVkaXQpIAoKICAgIHJldHVybiBldGhlcmNoYW5uZWxfU3RvcmUKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjogCiAgICBldGhlcmNoYW5uZWxfZnVuYygpIAoKCmRlZiBpbnRmX2JyaWVmX2Z1bmMoaW50Zl9icmllZixkZXZpY2UpOgogICAgZm9yIHNldCBpbiBpbnRmX2JyaWVmWydpbnRlcmZhY2UnXS5rZXlzKCk6CiAgICAgICAgaWYgJ3ZsYW5faWQnIGluIGludGZfYnJpZWZbJ2ludGVyZmFjZSddW3NldF0ua2V5cygpOgogICAgICAgICAgICBmb3Iga2V5IGluIGludGZfYnJpZWZbJ2ludGVyZmFjZSddW3NldF1bJ3ZsYW5faWQnXToKICAgICAgICAgICAgICAgIGludGZiX25hbWUgPSBzZXQKICAgICAgICAgICAgICAgIGludGZiX2lwID0gaW50Zl9icmllZlsnaW50ZXJmYWNlJ11bc2V0XVsndmxhbl9pZCddW2tleV1bJ2lwX2FkZHJlc3MnXQogICAgICAgICAgICAgICAgaW50ZmJfc3RhdHVzID0gaW50Zl9icmllZlsnaW50ZXJmYWNlJ11bc2V0XVsndmxhbl9pZCddW2tleV1bJ3N0YXR1cyddCiAgICAgICAgZWxpZiAnaXBfYWRkcmVzcycgaW4gaW50Zl9icmllZlsnaW50ZXJmYWNlJ11bc2V0XS5rZXlzKCk6CiAgICAgICAgICAgIGludGZiX25hbWUgPSBzZXQKICAgICAgICAgICAgaW50ZmJfaXAgPSBpbnRmX2JyaWVmWydpbnRlcmZhY2UnXVtzZXRdWydpcF9hZGRyZXNzJ10KICAgICAgICAgICAgaW50ZmJfc3RhdHVzID0gaW50Zl9icmllZlsnaW50ZXJmYWNlJ11bc2V0XVsnc3RhdHVzJ10KICAgICAgICAgICAgICAKICAgICAgICBpbnRmX2JyaWVmX0F1ZGl0ID0geyJTd2l0Y2giOiBkZXZpY2UuYWxpYXMsICJJTlRFUkZBQ0VfTkFNRSI6IGludGZiX25hbWUsICJJUF9BRERSRVNTIjogaW50ZmJfaXAsICJJTlRFUkZBQ0VfU1RBVFVTIjogaW50ZmJfc3RhdHVzfQogICAgICAgIGludGZfYnJpZWZfU3RvcmUuYXBwZW5kKGludGZfYnJpZWZfQXVkaXQpCgogICAgcmV0dXJuIGludGZfYnJpZWZfU3RvcmUKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjogCiAgICBpbnRmX2JyaWVmX2Z1bmMoKQogICAgCgpkZWYgaW50Zl9zdGF0dXNfZnVuYyhpbnRmX3N0YXR1cyxkZXZpY2UpOgogICAgZm9yIGludGYgaW4gaW50Zl9zdGF0dXNbJ2ludGVyZmFjZXMnXS5rZXlzKCk6CiAgICAgICAgaWYgJ25hbWUnIGluIGludGZfc3RhdHVzWydpbnRlcmZhY2VzJ11baW50Zl0ua2V5cygpOgogICAgICAgICAgICBpbnRmYV9kZXNjID0gaW50Zl9zdGF0dXNbJ2ludGVyZmFjZXMnXVtpbnRmXVsnbmFtZSddCiAgICAgICAgICAgIGludGZhX3N0YXR1cyA9IGludGZfc3RhdHVzWydpbnRlcmZhY2VzJ11baW50Zl1bJ3N0YXR1cyddCiAgICAgICAgICAgIGludGZhX3ZsYW4gPSBpbnRmX3N0YXR1c1snaW50ZXJmYWNlcyddW2ludGZdWyd2bGFuJ10KICAgICAgICAgICAgaW50ZmFfZHVwbGV4ID0gaW50Zl9zdGF0dXNbJ2ludGVyZmFjZXMnXVtpbnRmXVsnZHVwbGV4X2NvZGUnXQogICAgICAgICAgICBpbnRmYV9zcGVlZCA9IGludGZfc3RhdHVzWydpbnRlcmZhY2VzJ11baW50Zl1bJ3BvcnRfc3BlZWQnXQogICAgICAgICAgICBpbnRmYV90eXBlID0gaW50Zl9zdGF0dXNbJ2ludGVyZmFjZXMnXVtpbnRmXVsndHlwZSddCiAgICAgICAgCiAgICAgICAgZWxpZiAndHlwZScgaW4gaW50Zl9zdGF0dXNbJ2ludGVyZmFjZXMnXVtpbnRmXS5rZXlzKCk6CiAgICAgICAgICAgIGludGZhX2Rlc2MgPSAnTi9BJwogICAgICAgICAgICBpbnRmYV9zdGF0dXMgPSBpbnRmX3N0YXR1c1snaW50ZXJmYWNlcyddW2ludGZdWydzdGF0dXMnXQogICAgICAgICAgICBpbnRmYV92bGFuID0gaW50Zl9zdGF0dXNbJ2ludGVyZmFjZXMnXVtpbnRmXVsndmxhbiddCiAgICAgICAgICAgIGludGZhX2R1cGxleCA9IGludGZfc3RhdHVzWydpbnRlcmZhY2VzJ11baW50Zl1bJ2R1cGxleF9jb2RlJ10KICAgICAgICAgICAgaW50ZmFfc3BlZWQgPSBpbnRmX3N0YXR1c1snaW50ZXJmYWNlcyddW2ludGZdWydwb3J0X3NwZWVkJ10KICAgICAgICAgICAgaW50ZmFfdHlwZSA9IGludGZfc3RhdHVzWydpbnRlcmZhY2VzJ11baW50Zl1bJ3R5cGUnXQogICAgICAgIAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGludGZhX2Rlc2MgPSAnTi9BJwogICAgICAgICAgICBpbnRmYV9zdGF0dXMgPSBpbnRmX3N0YXR1c1snaW50ZXJmYWNlcyddW2ludGZdWydzdGF0dXMnXQogICAgICAgICAgICBpbnRmYV92bGFuID0gaW50Zl9zdGF0dXNbJ2ludGVyZmFjZXMnXVtpbnRmXVsndmxhbiddCiAgICAgICAgICAgIGludGZhX2R1cGxleCA9IGludGZfc3RhdHVzWydpbnRlcmZhY2VzJ11baW50Zl1bJ2R1cGxleF9jb2RlJ10KICAgICAgICAgICAgaW50ZmFfc3BlZWQgPSBpbnRmX3N0YXR1c1snaW50ZXJmYWNlcyddW2ludGZdWydwb3J0X3NwZWVkJ10KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBpbnRmYV90eXBlID0gJ04vQScKICAgIAo8fGZpbV9lbmR8Pg=="]
["a39740eeb7928df347f4e0dda85076c5d7ac7c42-2","a39740eeb7928df347f4e0dda85076c5d7ac7c42","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uYXBwcyBpbXBvcnQgQXBwQ29uZmlnCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpjbGFzcyBTdG9yeWFwcENvbmZpZyhBcHBDb25maWcpOgogICAgbmFtZSA9ICdTdG9yeUFwcCcKPHxmaW1fZW5kfD4="]
["74246eb6d2ed53f1bc2c7267c838aa30d2b7ffe7-4","74246eb6d2ed53f1bc2c7267c838aa30d2b7ffe7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKY2xhc3MgUG9pbnQ6CiAgICBkZWYgX19pbml0X18oc2VsZix4LHkpOgogICAgICAgIHNlbGYueD14CiAgICAgICAgc2VsZi55PXkKCmNsYXNzIExpbmU6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBnZXRsZW4oc2VsZixQb2ludCxQb2ludDIpOgogICAgICAgIHJlc3VsdD1tYXRoLnNxcnQoKFBvaW50LngtUG9pbnQyLngpKioyKyhQb2ludC55LVBvaW50Mi55KSoqMikKICAgICAgICByZXR1cm4gcmVzdWx0Cgo8fGZpbV9lbmR8Pg=="]
["c963cb25de7a4c4e7d2bd11d338bd110a36ff548-1","c963cb25de7a4c4e7d2bd11d338bd110a36ff548","PHxmaW1fcHJlZml4fD4KI2VuY29kaW5nOiB1dGYtOAoKZnJvbSBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKaW1wb3J0IHJlCmltcG9ydCByZXF1ZXN0cwppbXBvcnQgZmlsZWNtcAppbXBvcnQgdGltZQppbXBvcnQgdGVsZWJvdAppbXBvcnQgb3MKaW1wb3J0IHN5cwoKIyBFTlRSQURBCmluZm8gPSBzdHIoc3lzLmFyZ3ZbMV0pCmZpbGUgPSBvcGVuKGluZm8sICdyJykKCnNpdGUgPSBmaWxlLnJlYWRsaW5lKClbOi0xXQptYXRlcmlhID0gZmlsZS5yZWFkbGluZSgpWzotMV0KdGVtcG8gPSBmaWxlLnJlYWRsaW5lKCkKZGlhID0gbGlzdChmaWxlLnJlYWRsaW5lKCkpCgpmaWxlLmNsb3NlKCkKCgojIENPTVVOSUNBw4fDg08gRE8gQk9UIENPTSBPIFRFTEVHUkFNCmJvdCA9IHRlbGVib3QuVGVsZUJvdCgnS2V5Qm90VGVsZWdyYW0nKQoKIyBGVU7Dh8OVRVMKCmRlZiBzZW5kVG9Vc2VyKG1lc3NhZ2UpOgoJYm90LnNlbmRfbWVzc2FnZSgnSWRDaGF0JywgbWVzc2FnZSkKCndoaWxlIFRydWU6CgljdXJyZW50VGltZSA9ICJbIiArIHRpbWUuc3RyZnRpbWUoIiVkLyVtLyVZICVIOiVNOiVTIikgKyAiXSIKCQoJIyBDcmlhciBhcnF1aXZvIGRlIGxvZwoJdHJ5OgoJCWxvZyA9IG9wZW4obWF0ZXJpYSsiLmxvZyIsJ3InKSAjIEFicmUgbyBhcnF1aXZvIGNhc28gZWxlIGrDoSBleGlzdGEKCQkjdGV4dExvZyA9IGxvZy5yZWFkbGluZXMoKSAjIENhcnJlZ2FyIGxvZ3MgYW50aWdvcwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgkJdGV4dExvZyA9IFtdICMgU29icmVwb3IgbG9ncyBhbnRpZ29zCgkJbG9nLmNsb3NlKCkKPHxmaW1fZW5kfD4="]
["28a3cd8bb5de654d2c2d437c2c0e4bc9d7f919c5-3","28a3cd8bb5de654d2c2d437c2c0e4bc9d7f919c5","PHxmaW1fcHJlZml4fD4KIyBDYXJvbGluZSBOaW5nYW5nYQojIFByb2plY3QwOSAKIyBWZXJzaW9uIDMgCiMgMDMvMjkvMjAyMQoKaW1wb3J0IGxzeXN0ZW0gYXMgbHMKaW1wb3J0IHNoYXBlcyBhcyBzaHAKaW1wb3J0IHR1cnRsZV9pbnRlcnByZXRlciBhcyB0aQoKIyBjcmVhdGUgYSBjbGFzcyB0cmVlIApjbGFzcyBUcmVlKHNocC5TaGFwZSk6CgogICAgI2RlZmluZSB0aGUgaW5pdCBtZXRob2Qgd2l0aCB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMgd2hpY2ggYXJlIGFsc28ga25vd24gYXMgdGhlIG9iamVjdHMgb2YgdGhlIGZpZWxkCiAgICBkZWYgX19pbml0X18oc2VsZiwgZGlzdGFuY2U9NSwgYW5nbGU9MjIuNSwgY29sb3I9KDAuNSwgMC40LCAwLjMpLCBpdGVyYXRpb25zPTMsIGZpbGVuYW1lPU5vbmUpOgogICAgICAgIHNocC5TaGFwZS5fX2luaXRfXyhzZWxmLCBkaXN0YW5jZSwgYW5nbGUsIGNvbG9yKSAjIGNhbGwgdGhlIHBhcmVudCBzaGFwZSBpbml0IG1ldGhvZCB3aXRoIGRpc3RhbmNlLCBhbmdsZSBhbmQgY29sb3IKICAgICAgICBzZWxmLml0ZXJhdGlvbnMgPSBpdGVyYXRpb25zCiAgICAgICAgc2VsZi5scyA9IGxzLkxzeXN0ZW0oZmlsZW5hbWUpIAogICAgCiAgICBkZWYgc2V0SXRlcmF0aW9ucyhzZWxmLCBOKToKICAgICAgICAjIGdpdmVuIGEgbmV3IG51bWJlciBvZiBpdGVyYXRpb25zIGluIE4sIGFzc2lnbiBpdCB0byB0aGUgaXRlcmF0aW9ucyBmaWVsZCBvZiB0aGUgb2JqZWN0CiAgICAgICAgc2VsZi5pdGVyYXRpb25zID0gTgoKICAgIGRlZiByZWFkKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAjIHVzZSB0aGUgTHN5c3RlbSBvYmplY3QgY3JlYXRlZCBhbmQgc3RvcmVkIGluIHRoZSBsc3lzdGVtIGZpZWxkIHRvIGNhbGwgdGhlIHJlYWQgbWV0aG9kCiAgICAgICAgc2VsZi5scy5yZWFkKGZpbGVuYW1lKQoKICAgICN1c2UgdGhlIGxzeXN0ZW0gZHJhdyBtZXRob2QKICAgIGRlZiBkcmF3KHNlbGYsIHhwb3MsIHlwb3MsIHNjYWxlPTEuMCwgb3JpZW50YXRpb249OTApOgogICAgICAgICMgdXNlIHRoZSBidWlsZHN0cmluZyBtZXRob2QgdG8gZnJvbSB0aGUgbHN5c3RlbSBmaWxlIGFuZCBhc2lnbiBuZXdTdHIgdG8gbWV0aG9kCiAgICAgICAgbmV3U3RyID0gc2VsZi5scy5idWlsZFN0cmluZyhzZWxmLml0ZXJhdGlvbnMpCiAgICAgICAgc2VsZi5zdHJpbmcgPSBuZXdTdHIKICAgICAgICBzaHAuU2hhcGUuZHJhdyhzZWxmLCB4cG9zLCB5cG9zLCBzY2FsZSwgb3JpZW50YXRpb24pCgojVGVzdCBmdW5jdGlvbiBmb3IgdGhlIHRyZWUgc2hhcGUgaW4gMyBkaWZmZXJlbnQgbG9jYXRpb25zLiBlc3QgbWV0aG9kIHNob3VsZCB0YWtlIGluIGFuIExzeXN0ZW0gZmlsZW5hbWUgYXMgYSBwYXJhbWV0ZXIsIAojY3JlYXRlIGEgVHJlZSBvYmplY3QsIGFuZCB0aGVuIHVzZSB0aGUgVHJlZSBvYmplY3QncyBkcmF3IG1ldGhvZCB0byBkcmF3IGF0IGxlYXN0IDMgdHJlZXMgaW4gZGlmZmVyZW50IGxvY2F0aW9ucy4gCmRlZiB0ZXN0KCk6Cgo8fGZpbV9ob2xlfD4KICAgIHRyLmRyYXcoMzAwLCAtMTUwLCBzY2FsZT0yLCBvcmllbnRhdGlvbj05MCkgIyBjYWxsIHRoZSBkcmF3IGZ1bmN0aW9uIGZvciB0aGUgdGhpcmQgdHJlZSAKCiAgICAgIyB3YWl0CiAgICB0aS5UdXJ0bGVJbnRlcnByZXRlcigpLmhvbGQoKQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHRlc3QoKQoKCgo8fGZpbV9zdWZmaXh8PgogICAgdHIgPSBUcmVlKCBmaWxlbmFtZT0nc3lzdGVtSi50eHQnKSAjIGFzaWduIHRyIHRvIHRoZSB0cmVlIG9iamVjdCAKICAgIHRyLnNldENvbG9yKCAoMC41LCAwLjMsIDAuNCkgKQogICAgdHIuZHJhdygtMjAwLCAtMjAwLCBzY2FsZT0yLCBvcmllbnRhdGlvbj05MCkgIyBjYWxsIHRoZSBkcmF3IGZ1bmN0aW9uIGZvciB0aGUgZmlyc3QgdHJlZSAKICAgIHRyLmRyYXcoNTAsIDEwMCwgc2NhbGU9Miwgb3JpZW50YXRpb249OTApICMgY2FsbCB0aGUgZHJhdyBmdW5jdGlvbiBmb3IgdGhlIHNlY29uZCB0cmVlIAo8fGZpbV9lbmR8Pg=="]
["ae9e5d2273a7f5b759278684d8c1bc13489233f7-1","ae9e5d2273a7f5b759278684d8c1bc13489233f7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKZnJvbSBkamFuZ28uY29udHJpYi5hdXRoIGltcG9ydCBnZXRfdXNlcl9tb2RlbApmcm9tIGRqYW5nby5jb250cmliLnNpdGVzLnNob3J0Y3V0cyBpbXBvcnQgZ2V0X2N1cnJlbnRfc2l0ZQpmcm9tIGRqYW5nby5jb250cmliLmh1bWFuaXplLnRlbXBsYXRldGFncyBpbXBvcnQgaHVtYW5pemUKZnJvbSBkamFuZ28uY29yZS5tYWlsIGltcG9ydCBFbWFpbE11bHRpQWx0ZXJuYXRpdmVzCmZyb20gZGphbmdvLmh0dHAgaW1wb3J0IEpzb25SZXNwb25zZQpmcm9tIGRqYW5nby5odHRwLnJlc3BvbnNlIGltcG9ydCBIdHRwUmVzcG9uc2VCYWRSZXF1ZXN0LCBIdHRwUmVzcG9uc2VOb3RGb3VuZApmcm9tIGRqYW5nby5zaG9ydGN1dHMgaW1wb3J0IHJlZGlyZWN0CmZyb20gZGphbmdvLnRlbXBsYXRlIGltcG9ydCBsb2FkZXIKZnJvbSBkamFuZ28udmlld3MuZ2VuZXJpYyBpbXBvcnQgVGVtcGxhdGVWaWV3CmZyb20gZGphbmdvLnZpZXdzLmdlbmVyaWMuZWRpdCBpbXBvcnQgRm9ybVZpZXcKZnJvbSByZWdpc3RyYXRpb24uYmFja2VuZHMuZGVmYXVsdC52aWV3cyBpbXBvcnQgUmVnaXN0cmF0aW9uVmlldwpmcm9tIGZpcmVjYXJlcy5maXJlY2FyZXNfY29yZS5taXhpbnMgaW1wb3J0IExvZ2luUmVxdWlyZWRNaXhpbiwgU3VwZXJVc2VyUmVxdWlyZWRNaXhpbgpmcm9tIGZpcmVjYXJlcy5maXJlY2FyZXNfY29yZS5tb2RlbHMgaW1wb3J0IFByZWRldGVybWluZWRVc2VyLCBEZXBhcnRtZW50QXNzb2NpYXRpb25SZXF1ZXN0CmZyb20gZmlyZWNhcmVzLmZpcmVjYXJlc19jb3JlLmZvcm1zIGltcG9ydCBBY2NvdW50UmVxdWVzdEZvcm0KZnJvbSBmaXJlY2FyZXMuZmlyZXN0YXRpb24ubW9kZWxzIGltcG9ydCBGaXJlRGVwYXJ0bWVudApmcm9tIGZpcmVjYXJlcy50YXNrcy5lbWFpbCBpbXBvcnQgc2VuZF9tYWlsCmZyb20gLmZvcm1zIGltcG9ydCBDaG9vc2VEZXBhcnRtZW50Rm9ybQoKClVzZXJNb2RlbCA9IGdldF91c2VyX21vZGVsKCkKU0VTU0lPTl9FTUFJTF9XSElURUxJU1RFRCA9ICdlbWFpbF93aGl0ZWxpc3RlZCcKCgpjbGFzcyBSZWdpc3RyYXRpb25QcmVyZWdpc3RlclZpZXcoRm9ybVZpZXcpOgogICAgdGVtcGxhdGVfbmFtZSA9ICdyZWdpc3RyYXRpb24vcmVnaXN0cmF0aW9uX3ByZXJlZ2lzdGVyLmh0bWwnCiAgICBmb3JtX2NsYXNzID0gQWNjb3VudFJlcXVlc3RGb3JtCgogICAgZGVmIGdldChzZWxmLCByZXF1ZXN0KToKICAgICAgICBpZiAnZGVwYXJ0bWVudCcgaW4gcmVxdWVzdC5HRVQ6CiAgICAgICAgICAgIGZkID0gRmlyZURlcGFydG1lbnQub2JqZWN0cy5nZXQoaWQ9cmVxdWVzdC5HRVRbJ2RlcGFydG1lbnQnXSkKICAgICAgICAgICAgYWRtaW5zID0gZmQuZ2V0X2RlcGFydG1lbnRfYWRtaW5zKCkKICAgICAgICAgICAgaWYgbm90IGFkbWluczoKICAgICAgICAgICAgICAgIHJlcXVlc3Quc2Vzc2lvblsnbWVzc2FnZSddID0gJ1dlXCdyZSBzb3JyeSwgYSBJQUZDIE9mZmljaWFsIG9yIExvY2FsIE9mZmljZXIgbmVlZHMgdG8gZW5hYmxlIEZpcmVDQVJFUyBvbiB0aGlzIGRlcGFydG1lbnQgYmVmb3JlIHlvdXIgYWNjb3VudCBjYW4gYmUgYXBwcm92ZWQgYnkgdGhlIGRlcGFydG1lbnQuJwogICAgICAgICAgICAgICAgcmVxdWVzdC5zZXNzaW9uWydtZXNzYWdlX3RpdGxlJ10gPSAnRmlyZUNBUkVTIG5vdCBlbmFibGVkIGZvciB7fScuZm9ybWF0KGZkLm5hbWUpCiAgICAgICAgICAgICAgICByZXR1cm4gcmVkaXJlY3QoJ3Nob3dfbWVzc2FnZScpCiAgICAgICAgcmV0dXJuIHN1cGVyKFJlZ2lzdHJhdGlvblByZXJlZ2lzdGVyVmlldywgc2VsZikuZ2V0KHJlcXVlc3QpCgoKY2xhc3MgTGltaXRlZFJlZ2lzdHJhdGlvblZpZXcoUmVnaXN0cmF0aW9uVmlldyk6CiAgICBkZWYgZGlzcGF0Y2goc2VsZiwgcmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBpZiBTRVNTSU9OX0VNQUlMX1dISVRFTElTVEVEIG5vdCBpbiByZXF1ZXN0LnNlc3Npb246CiAgICAgICAgICAgIHJldHVybiByZWRpcmVjdCgncmVnaXN0cmF0aW9uX3ByZXJlZ2lzdGVyJykKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gc3VwZXIoTGltaXRlZFJlZ2lzdHJhdGlvblZpZXcsIHNlbGYpLmRpc3BhdGNoKHJlcXVlc3QsICphcmdzLCAqKmt3YXJncykKCiAgICBkZWYgZ2V0X2Zvcm0oc2VsZiwgZm9ybV9jbGFzcz1Ob25lKToKICAgICAgICBpZiBmb3JtX2NsYXNzIGlzIE5vbmU6CiAgICAgICAgICAgIGZvcm1fY2xhc3MgPSBzZWxmLmdldF9mb3JtX2NsYXNzKCkKICAgICAgICBrd2FyZ3MgPSBzZWxmLmdldF9mb3JtX2t3YXJncygpCiAgICAgICAgaWYgJ2RhdGEnIGluIGt3YXJnczoKICAgICAgICAgICAgIyBGb3JjZSBlbWFpbCB0byBjb21lIGZyb20gc2Vzc2lvbgogICAgICAgICAgICBkYXRhID0ga3dhcmdzLmdldCgnZGF0YScpLmNvcHkoKQogICAgICAgICAgICBkYXRhWydlbWFpbCddID0gc2VsZi5yZXF1ZXN0LnNlc3Npb25bU0VTU0lPTl9FTUFJTF9XSElURUxJU1RFRF0KICAgICAgICAgICAga3dhcmdzWydkYXRhJ10gPSBkYXRhCgogICAgICAgIHJldCA9IGZvcm1fY2xhc3MoKiprd2FyZ3MpCiAgICAgICAgcmV0dXJuIHJldAoKICAgIGRlZiBnZXRfaW5pdGlhbChzZWxmKToKICAgICAgICBpbml0aWFsID0gc3VwZXIoTGltaXRlZFJlZ2lzdHJhdGlvblZpZXcsIHNlbGYpLmdldF9pbml0aWFsKCkKICAgICAgICBlbWFpbCA9IHNlbGYucmVxdWVzdC5zZXNzaW9uLmdldChTRVNTSU9OX0VNQUlMX1dISVRFTElTVEVEKQogICAgICAgIGluaXRpYWxbJ2VtYWlsJ10gPSBlbWFpbAogICAgICAgICMgUHJlLWZpbGwgZmlyc3QgbmFtZSBhbmQgbGFzdCBuYW1lIGZvciB1c2VycyB0aGF0IGFyZSBmcm9tIHRoZSBwcmVkZXRlcm1pbmVkIGFkbWlucy4uLgogICAgICAgIGlmIGVtYWlsIGluIFByZWRldGVybWluZWRVc2VyLm9iamVjdHMudmFsdWVzX2xpc3QoJ2VtYWlsJywgZmxhdD1UcnVlKToKICAgICAgICAgICAgcGR1ID0gUHJlZGV0ZXJtaW5lZFVzZXIub2JqZWN0cy5nZXQoZW1haWw9ZW1haWwpCiAgICAgICAgICAgIGluaXRpYWxbJ2ZpcnN0X25hbWUnXSA9IHBkdS5maXJzdF9uYW1lCiAgICAgICAgICAgIGluaXRpYWxbJ2xhc3RfbmFtZSddID0gcGR1Lmxhc3RfbmFtZQogICAgICAgIHJldHVybiBpbml0aWFsCgoKY2xhc3MgQ2hvb3NlRGVwYXJ0bWVudFZpZXcoTG9naW5SZXF1aXJlZE1peGluLCBGb3JtVmlldyk6CiAgICB0ZW1wbGF0ZV9uYW1lID0gJ3JlZ2lzdHJhdGlvbi9yZWdpc3RyYXRpb25fY2hvb3NlX2RlcGFydG1lbnQuaHRtbCcKICAgIGZvcm1fY2xhc3MgPSBDaG9vc2VEZXBhcnRtZW50Rm9ybQoKPHxmaW1faG9sZXw+CgogICAgZGVmIGZvcm1fdmFsaWQoc2VsZiwgZm9ybSk6CiAgICAgICAgZGVwYXJ0bWVudCA9IEZpcmVEZXBhcnRtZW50Lm9iamVjdHMuZ2V0KGlkPWZvcm0uZGF0YS5nZXQoJ2RlcGFydG1lbnQnKSkKICAgICAgICBhc3NvY2lhdGlvbiA9IERlcGFydG1lbnRBc3NvY2lhdGlvblJlcXVlc3Qub2JqZWN0cy5jcmVhdGUoZGVwYXJ0bWVudD1kZXBhcnRtZW50LCB1c2VyPXNlbGYucmVxdWVzdC51c2VyKQoKICAgICAgICAjIFNlbmQgZW1haWwgdG8gREVQQVJUTUVOVF9BRE1JTl9WRVJJRklFUlMKICAgICAgICBjb250ZXh0ID0gZGljdChhc3NvY2lhdGlvbj1hc3NvY2lhdGlvbiwgZW1haWw9YXNzb2NpYXRpb24udXNlci5lbWFpbCwgdXNlcm5hbWU9YXNzb2NpYXRpb24udXNlci51c2VybmFtZSwgc2l0ZT1nZXRfY3VycmVudF9zaXRlKHNlbGYucmVxdWVzdCkpCiAgICAgICAgYm9keSA9IGxvYWRlci5yZW5kZXJfdG9fc3RyaW5nKCdyZWdpc3RyYXRpb24vdmVyaWZ5X2FkbWluX2VtYWlsLnR4dCcsIGNvbnRleHQpCiAgICAgICAgc3ViamVjdCA9ICdEZXBhcnRtZW50IGFkbWluaXN0cmF0b3IgcmVxdWVzdCAtIHtlbWFpbH0nLmZvcm1hdChlbWFpbD1hc3NvY2lhdGlvbi51c2VyLmVtYWlsKQogICAgICAgIGVtYWlsX21lc3NhZ2UgPSBFbWFpbE11bHRpQWx0ZXJuYXRpdmVzKHN1YmplY3QsIGJvZHksIHNldHRpbmdzLkRFRkFVTFRfRlJPTV9FTUFJTCwgW3hbMV0gZm9yIHggaW4gc2V0dGluZ3MuREVQQVJUTUVOVF9BRE1JTl9WRVJJRklFUlNdKQogICAgICAgIHNlbmRfbWFpbC5kZWxheShlbWFpbF9tZXNzYWdlKQoKICAgICAgICBzZWxmLnJlcXVlc3Quc2Vzc2lvblsnbWVzc2FnZSddID0gJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiByZWNlaXZlZCwgYW4gYWRtaW5pc3RyYXRvciB3aWxsIGNvbnRhY3QgeW91IHNob3J0bHkgdG8gdmVyaWZ5IHlvdXIgaW5mb3JtYXRpb24uICBJbiB0aGUgbWVhbnRpbWUsIGZlZWwgZnJlZSB0byBwZXJ1c2UgdGhlIEZpcmVDQVJFUyBzaXRlIScKICAgICAgICByZXR1cm4gcmVkaXJlY3QoJ3Nob3dfbWVzc2FnZScpCgoKZGVmIHNlcmlhbGl6ZV9hc3NvY2lhdGlvbl9yZXF1ZXN0KHJlcSk6CiAgICByZXR1cm4gZGljdChpZD1yZXEuaWQsCiAgICAgICAgICAgICAgICBkZXBhcnRtZW50PWRpY3QobmFtZT1yZXEuZGVwYXJ0bWVudC5uYW1lLCBzdGF0ZT1yZXEuZGVwYXJ0bWVudC5zdGF0ZSksCiAgICAgICAgICAgICAgICBhcHByb3ZlZF9ieT1kaWN0KG5hbWU9cmVxLmFwcHJvdmVkX2J5LnVzZXJuYW1lLCBlbWFpbD1yZXEuYXBwcm92ZWRfYnkuZW1haWwpIGlmIHJlcS5hcHByb3ZlZF9ieSBlbHNlIE5vbmUsCiAgICAgICAgICAgICAgICBkZW5pZWRfYnk9ZGljdChuYW1lPXJlcS5kZW5pZWRfYnkudXNlcm5hbWUsIGVtYWlsPXJlcS5kZW5pZWRfYnkuZW1haWwpIGlmIHJlcS5kZW5pZWRfYnkgZWxzZSBOb25lLAogICAgICAgICAgICAgICAgcGVybWlzc2lvbj1yZXEucGVybWlzc2lvbiwKICAgICAgICAgICAgICAgIGFwcHJvdmVkX2F0PWh1bWFuaXplLm5hdHVyYWx0aW1lKHJlcS5hcHByb3ZlZF9hdCksCiAgICAgICAgICAgICAgICBkZW5pZWRfYXQ9aHVtYW5pemUubmF0dXJhbHRpbWUocmVxLmRlbmllZF9hdCksCiAgICAgICAgICAgICAgICBpc19hcHByb3ZlZD1yZXEuaXNfYXBwcm92ZWQsCiAgICAgICAgICAgICAgICBpc19kZW5pZWQ9cmVxLmlzX2RlbmllZCkKCgpjbGFzcyBWZXJpZnlBc3NvY2lhdGlvblJlcXVlc3QoU3VwZXJVc2VyUmVxdWlyZWRNaXhpbiwgVGVtcGxhdGVWaWV3KToKICAgIHRlbXBsYXRlX25hbWUgPSAncmVnaXN0cmF0aW9uL3ZlcmlmeV9hc3NvY2lhdGlvbl9yZXF1ZXN0Lmh0bWwnCgogICAgZGVmIGdldF9jb250ZXh0X2RhdGEoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgIGNvbnRleHQgPSBzdXBlcihWZXJpZnlBc3NvY2lhdGlvblJlcXVlc3QsIHNlbGYpLmdldF9jb250ZXh0X2RhdGEoKiprd2FyZ3MpCiAgICAgICAgZW1haWwgPSBzZWxmLnJlcXVlc3QuR0VULmdldCgnZW1haWwnKQogICAgICAgIHJlcXMgPSBbXQogICAgICAgIGZvciByZXEgaW4gRGVwYXJ0bWVudEFzc29jaWF0aW9uUmVxdWVzdC5maWx0ZXJfYnlfZW1haWwoZW1haWwpLm9yZGVyX2J5KCctY3JlYXRlZF9hdCcpOgogICAgICAgICAgICBpdGVtID0gc2VyaWFsaXplX2Fzc29jaWF0aW9uX3JlcXVlc3QocmVxKQogICAgICAgICAgICByZXFzLmFwcGVuZChpdGVtKQoKICAgICAgICBjb250ZXh0Wyd1c2VyJ10gPSBVc2VyTW9kZWwub2JqZWN0cy5nZXQoZW1haWw9ZW1haWwpCiAgICAgICAgY29udGV4dFsncmVxdWVzdHMnXSA9IHJlcXMKICAgICAgICByZXR1cm4gY29udGV4dAoKICAgIGRlZiBnZXQoc2VsZiwgcmVxdWVzdCk6CiAgICAgICAgZW1haWwgPSByZXF1ZXN0LkdFVC5nZXQoJ2VtYWlsJykKICAgICAgICB1c2VyID0gVXNlck1vZGVsLm9iamVjdHMuZmlsdGVyKGVtYWlsPWVtYWlsKS5maXJzdCgpCiAgICAgICAgaWYgbm90IGVtYWlsIG9yIHVzZXIgaXMgTm9uZToKICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZUJhZFJlcXVlc3QoJ3ZhbGlkIGVtYWlsIGFkZHJlc3MgcmVxdWlyZWQnKQogICAgICAgIGVsaWYgdXNlci5kZXBhcnRtZW50YXNzb2NpYXRpb25yZXF1ZXN0X3NldC5jb3VudCgpIGlzIDA6CiAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2VOb3RGb3VuZCgnbm8gcmVxdWVzdHMgd2l0aCB0aGlzIGVtYWlsIGFkZHJlc3MnKQogICAgICAgIHJldHVybiBzdXBlcihWZXJpZnlBc3NvY2lhdGlvblJlcXVlc3QsIHNlbGYpLmdldChyZXF1ZXN0KQoKICAgIGRlZiBwb3N0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgYm9keSA9IGpzb24ubG9hZHMoc2VsZi5yZXF1ZXN0LmJvZHkpCiAgICAgICAgcmVxID0gRGVwYXJ0bWVudEFzc29jaWF0aW9uUmVxdWVzdC5vYmplY3RzLmdldChpZD1ib2R5LmdldCgnaWQnKSkKICAgICAgICBpZiBib2R5LmdldCgnYXBwcm92ZScsIEZhbHNlKToKICAgICAgICAgICAgcmVxLmFwcHJvdmUoc2VsZi5yZXF1ZXN0LnVzZXIpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmVxLmRlbnkoc2VsZi5yZXF1ZXN0LnVzZXIpCgogICAgICAgICMgU2VuZCBlbWFpbCByZXBvbnNlIHRvIHJlcXVlc3RpbmcgdXNlciBvZiBhY2NlcHRhbmNlIG9yIGRlbmlhbAogICAgICAgIGNvbnRleHQgPSBkaWN0KGFzc29jaWF0aW9uPXJlcSwgbWVzc2FnZT1ib2R5LmdldCgnbWVzc2FnZScpLCBzaXRlPWdldF9jdXJyZW50X3NpdGUoc2VsZi5yZXF1ZXN0KSkKICAgICAgICBib2R5ID0gbG9hZGVyLnJlbmRlcl90b19zdHJpbmcoJ3JlZ2lzdHJhdGlvbi9hc3NvY2lhdGlvbl9yZXNwb25zZV9lbWFpbC50eHQnLCBjb250ZXh0KQogICAgICAgIHN1YmplY3QgPSAnRGVwYXJ0bWVudCBhZG1pbmlzdHJhdG9yIHJlcXVlc3QnCiAgICAgICAgZW1haWxfbWVzc2FnZSA9IEVtYWlsTXVsdGlBbHRlcm5hdGl2ZXMoc3ViamVjdCwgYm9keSwgc2V0dGluZ3MuREVGQVVMVF9GUk9NX0VNQUlMLCBbcmVxLnVzZXIuZW1haWxdKQogICAgICAgIHNlbmRfbWFpbC5kZWxheShlbWFpbF9tZXNzYWdlKQoKICAgICAgICByZXEucmVmcmVzaF9mcm9tX2RiKCkKCiAgICAgICAgcmV0dXJuIEpzb25SZXNwb25zZShzZXJpYWxpemVfYXNzb2NpYXRpb25fcmVxdWVzdChyZXEpKQo8fGZpbV9zdWZmaXh8PgogICAgZGVmIGdldF9jb250ZXh0X2RhdGEoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgIGNvbnRleHQgPSBzdXBlcihDaG9vc2VEZXBhcnRtZW50Vmlldywgc2VsZikuZ2V0X2NvbnRleHRfZGF0YSgqKmt3YXJncykKICAgICAgICBjb250ZXh0WydzdGF0ZXMnXSA9IGxpc3QoRmlyZURlcGFydG1lbnQub2JqZWN0cy5leGNsdWRlKHN0YXRlX19pc251bGw9VHJ1ZSkuZXhjbHVkZShhcmNoaXZlZD1UcnVlKS5leGNsdWRlKHN0YXRlX19leGFjdD0nJykub3JkZXJfYnkoJ3N0YXRlJykuZGlzdGluY3QoJ3N0YXRlJykudmFsdWVzX2xpc3QoJ3N0YXRlJywgZmxhdD1UcnVlKSkKICAgICAgICByZXR1cm4gY29udGV4dAo8fGZpbV9lbmR8Pg=="]
["a37255182297514cd2d849786fb20444628b46ed-3","a37255182297514cd2d849786fb20444628b46ed","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBweXNwYXJrLnNxbCBpbXBvcnQgU3BhcmtTZXNzaW9uLCB0eXBlcywgZnVuY3Rpb25zIGFzIEYKaW1wb3J0IHRlbXBmaWxlCgpmcm9tIHN0cmVhbXByb2Nlc3Nvci5jbGllbnQuYmFzZSBpbXBvcnQgUGFyc2VkVVJMCjx8ZmltX2VuZHw+"]
["954461920f98c9f83877b13eb0c4eea3eca048a0-1","954461920f98c9f83877b13eb0c4eea3eca048a0","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgppbXBvcnQgY2Fpcm8KZnJvbSBtYXRoIGltcG9ydCBwaSwgc3FydAoKY2xhc3MgRGlhZ3JhbShvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB3aWR0aCwgaGVpZ2h0KToKICAgICAgICBzZWxmLnN1cmZhY2UgPSBjYWlyby5TVkdTdXJmYWNlKGZpbGVuYW1lICsgJy5zdmcnLCB3aWR0aCwgaGVpZ2h0KQogICAgICAgIGNyID0gc2VsZi5jciA9IGNhaXJvLkNvbnRleHQoc2VsZi5zdXJmYWNlKQoKICAgICAgICBjci5zY2FsZSh3aWR0aCwgaGVpZ2h0KQogICAgICAgIGNyLnNldF9saW5lX3dpZHRoKDAuMDEpCgogICAgICAgIGNyLnJlY3RhbmdsZSgwLCAwLCAxLCAxKQogICAgICAgIGNyLnNldF9zb3VyY2VfcmdiKDEsIDEsIDEpCiAgICAgICAgY3IuZmlsbCgpCgogICAgICAgIHNlbGYuZHJhd19kZXN0KGNyKQoKICAgICAgICBjci5zZXRfbGluZV93aWR0aCggbWF4KGNyLmRldmljZV90b191c2VyX2Rpc3RhbmNlKDIsIDIpKSApCiAgICAgICAgY3Iuc2V0X3NvdXJjZV9yZ2IoMCwgMCwgMCkKICAgICAgICBjci5yZWN0YW5nbGUoMCwgMCwgMSwgMSkKICAgICAgICBjci5zdHJva2UoKQoKICAgICAgICBzZWxmLnN1cmZhY2Uud3JpdGVfdG9fcG5nKGZpbGVuYW1lICsgJy5wbmcnKQogICAgICAgIGNyLnNob3dfcGFnZSgpCiAgICAgICAgc2VsZi5zdXJmYWNlLmZpbmlzaCgpCgpjbGFzcyBTZXRTb3VyY2VSR0JBKERpYWdyYW0pOgogICAgZGVmIGRyYXdfZGVzdChzZWxmLCBjcik6CiAgICAgICAgY3Iuc2V0X3NvdXJjZV9yZ2IoMCwgMCwgMCkgICAgICAgICAjcmdiYQogICAgICAgIGNyLm1vdmVfdG8oMCwgMCkgICAgICAgICAgICAgICAgICAgI3JnYmEKICAgICAgICBjci5saW5lX3RvKDEsIDEpICAgICAgICAgICAgICAgICAgICNyZ2JhCiAgICAgICAgY3IubW92ZV90bygxLCAwKSAgICAgICAgICAgICAgICAgICAjcmdiYQogICAgICAgIGNyLmxpbmVfdG8oMCwgMSkgICAgICAgICAgICAgICAgICAgI3JnYmEKICAgICAgICBjci5zZXRfbGluZV93aWR0aCgwLjIpICAgICAgICAgICAgICNyZ2JhCiAgICAgICAgY3Iuc3Ryb2tlKCkgICAgICAgICAgICAgICAgICAgICAgICAjcmdiYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3JnYmEKICAgICAgICBjci5yZWN0YW5nbGUoMCwgMCwgMC41LCAwLjUpICAgICAgICNyZ2JhCiAgICAgICAgY3Iuc2V0X3NvdXJjZV9yZ2JhKDEsIDAsIDAsIDAuODApICAjcmdiYQogICAgICAgIGNyLmZpbGwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgI3JnYmEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNyZ2JhCiAgICAgICAgY3IucmVjdGFuZ2xlKDAsIDAuNSwgMC41LCAwLjUpICAgICAjcmdiYQogICAgICAgIGNyLnNldF9zb3VyY2VfcmdiYSgwLCAxLCAwLCAwLjYwKSAgI3JnYmEKICAgICAgICBjci5maWxsKCkgICAgICAgICAgICAgICAgICAgICAgICAgICNyZ2JhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjcmdiYQogICAgICAgIGNyLnJlY3RhbmdsZSgwLjUsIDAsIDAuNSwgMC41KSAgICAgI3JnYmEKICAgICAgICBjci5zZXRfc291cmNlX3JnYmEoMCwgMCwgMSwgMC40MCkgICNyZ2JhCiAgICAgICAgY3IuZmlsbCgpICAgICAgICAgICAgICAgICAgICAgICAgICAjcmdiYQoKY2xhc3MgU2V0U291cmNlR3JhZGllbnQoRGlhZ3JhbSk6CiAgICBkZWYgZHJhd19kZXN0KHNlbGYsIGNyKToKICAgICAgICByYWRpYWwgPSBjYWlyby5SYWRpYWxHcmFkaWVudCgwLjI1LCAwLjI1LCAwLjEsICAwLjUsIDAuNSwgMC41KSAjZ3JhZGllbnQKICAgICAgICByYWRpYWwuYWRkX2NvbG9yX3N0b3BfcmdiKDAsICAxLjAsIDAuOCwgMC44KSAgICAgICAgICAgICAgICAgICAjZ3JhZGllbnQKICAgICAgICByYWRpYWwuYWRkX2NvbG9yX3N0b3BfcmdiKDEsICAwLjksIDAuMCwgMC4wKSAgICAgICAgICAgICAgICAgICAjZ3JhZGllbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZ3JhZGllbnQKICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCAxMCk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZ3JhZGllbnQKICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoMSwgMTApOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZ3JhZGllbnQKICAgICAgICAgICAgICAgIGNyLnJlY3RhbmdsZShpLzEwLjAgLSAwLjA0LCBqLzEwLjAgLSAwLjA0LCAwLjA4LCAwLjA4KSAjZ3JhZGllbnQKICAgICAgICBjci5zZXRfc291cmNlKHJhZGlhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZ3JhZGllbnQKICAgICAgICBjci5maWxsKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZ3JhZGllbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZ3JhZGllbnQKICAgICAgICBsaW5lYXIgPSBjYWlyby5MaW5lYXJHcmFkaWVudCgwLjI1LCAwLjM1LCAwLjc1LCAwLjY1KSAgICAgICAgICAjZ3JhZGllbnQKICAgICAgICBsaW5lYXIuYWRkX2NvbG9yX3N0b3BfcmdiYSgwLjAwLCAgMSwgMSwgMSwgMCkgICAgICAgICAgICAgICAgICAjZ3JhZGllbnQKICAgICAgICBsaW5lYXIuYWRkX2NvbG9yX3N0b3BfcmdiYSgwLjI1LCAgMCwgMSwgMCwgMC41KSAgICAgICAgICAgICAgICAjZ3JhZGllbnQKICAgICAgICBsaW5lYXIuYWRkX2NvbG9yX3N0b3BfcmdiYSgwLjUwLCAgMSwgMSwgMSwgMCkgICAgICAgICAgICAgICAgICAjZ3JhZGllbnQKICAgICAgICBsaW5lYXIuYWRkX2NvbG9yX3N0b3BfcmdiYSgwLjc1LCAgMCwgMCwgMSwgMC41KSAgICAgICAgICAgICAgICAjZ3JhZGllbnQKICAgICAgICBsaW5lYXIuYWRkX2NvbG9yX3N0b3BfcmdiYSgxLjAwLCAgMSwgMSwgMSwgMCkgICAgICAgICAgICAgICAgICAjZ3JhZGllbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZ3JhZGllbnQKICAgICAgICBjci5yZWN0YW5nbGUoMC4wLCAwLjAsIDEsIDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZ3JhZGllbnQKICAgICAgICBjci5zZXRfc291cmNlKGxpbmVhcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZ3JhZGllbnQKICAgICAgICBjci5maWxsKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZ3JhZGllbnQKCmNsYXNzIFBhdGhEaWFncmFtKERpYWdyYW0pOgogICAgZGVmIGRyYXdfZGVzdChzZWxmLCBjcik6CiAgICAgICAgc2VsZi5kcmF3X2Rlc3RfcGF0aChjcikKCiAgICAgICAgcGF0aCA9IGxpc3QoY3IuY29weV9wYXRoX2ZsYXQoKSkKCiAgICAgICAgY3Iuc2V0X2xpbmVfd2lkdGgobWF4KGNyLmRldmljZV90b191c2VyX2Rpc3RhbmNlKDMsIDMpKSkKICAgICAgICBjci5zZXRfc291cmNlX3JnYigwLCAwLjYsIDApCiAgICAgICAgY3Iuc3Ryb2tlKCkKCiAgICAgICAgaWYgbGVuKHBhdGgpIGFuZCBwYXRoWy0xXVswXSAhPSBjYWlyby5QQVRIX0NMT1NFX1BBVEg6CiAgICAgICAgICAgIHgsIHkgPSBwYXRoWzBdWzFdCiAgICAgICAgICAgIGNyLmFyYyh4LCB5LCBtYXgoY3IuZGV2aWNlX3RvX3VzZXJfZGlzdGFuY2UoNSwgNSkpLCAwLCAyKnBpKQogICAgICAgICAgICBjci5zZXRfc291cmNlX3JnYmEoMC4wLCAwLjYsIDAuMCwgMC41KQogICAgICAgICAgICBjci5maWxsKCkKCiAgICAgICAgICAgIHgsIHkgPSBwYXRoWy0xXVsxXQogICAgICAgICAgICBjci5hcmMoeCwgeSwgbWF4KGNyLmRldmljZV90b191c2VyX2Rpc3RhbmNlKDUsIDUpKSwgMCwgMipwaSkKICAgICAgICAgICAgY3Iuc2V0X3NvdXJjZV9yZ2JhKDAuMCwgMC4wLCAwLjc1LCAwLjUpCiAgICAgICAgICAgIGNyLmZpbGwoKQoKY2xhc3MgUGF0aERpYWdyYW1Nb3ZlVG8oUGF0aERpYWdyYW0pOgogICAgZGVmIGRyYXdfZGVzdF9wYXRoKHNlbGYsIGNyKToKICAgICAgICBjci5tb3ZlX3RvKDAuMjUsIDAuMjUpICAgICAgICAgICAgICAgICAgICAgI21vdmV0bwoKY2xhc3MgUGF0aERpYWdyYW1MaW5lVG8oUGF0aERpYWdyYW1Nb3ZlVG8pOgogICAgZGVmIGRyYXdfZGVzdF9wYXRoKHNlbGYsIGNyKToKICAgICAgICBQYXRoRGlhZ3JhbU1vdmVUby5kcmF3X2Rlc3RfcGF0aChzZWxmLCBjcikKICAgICAgICBjci5saW5lX3RvKDAuNSwgMC4zNzUpICAgICAgICAgICAgICAgICAgICAgI2xpbmV0bwogICAgICAgIGNyLnJlbF9saW5lX3RvKDAuMjUsIC0wLjEyNSkgICAgICAgICAgICAgICAjbGluZXRvCgpjbGFzcyBQYXRoRGlhZ3JhbUFyY1RvKFBhdGhEaWFncmFtTGluZVRvKToKICAgIGRlZiBkcmF3X2Rlc3RfcGF0aChzZWxmLCBjcik6CiAgICAgICAgUGF0aERpYWdyYW1MaW5lVG8uZHJhd19kZXN0X3BhdGgoc2VsZiwgY3IpCiAgICAgICAgY3IuYXJjKDAuNSwgMC41LCAwLjI1ICogc3FydCgyKSwgLTAuMjUgKiBwaSwgMC4yNSAqIHBpKSAjYXJjCgpjbGFzcyBQYXRoRGlhZ3JhbUN1cnZlVG8oUGF0aERpYWdyYW1BcmNUbyk6CiAgICBkZWYgZHJhd19kZXN0X3BhdGgoc2VsZiwgY3IpOgogICAgICAgIGlmIHR5cGUoc2VsZikgPT0gUGF0aERpYWdyYW1DdXJ2ZVRvOgogICAgICAgICAgICBjci5zYXZlKCkKICAgICAgICAgICAgZm9yIHgsIHkgaW4gKCgwLjUsIDAuNjI1KSwgKDAuNSwgMC44NzUpKToKICAgICAgICAgICAgICAgIGNyLm5ld19zdWJfcGF0aCgpCiAgICAgICAgICAgICAgICBjci5hcmMoeCwgeSwgbWF4KGNyLmRldmljZV90b191c2VyX2Rpc3RhbmNlKDMsIDMpKSwgMCwgMipwaSkKICAgICAgICAgICAgICAgIGNyLnNldF9zb3VyY2VfcmdiYSgwLjUsIDAsIDAsIDAuNSkKICAgICAgICAgICAgICAgIGNyLmZpbGwoKQogICAgICAgICAgICBmb3IgKHgsIHksIHcsIGgpIGluICgoMC4yNSwgMC43NSwgMC4yNSwgMC4xMjUpLAogICAgICAgICAgICAgICAgICAgICgwLjc1LCAwLjc1LCAtMC4yNSwgLTAuMTI1KSk6CiAgICAgICAgICAgICAgICBjci5tb3ZlX3RvKHgsIHkpCiAgICAgICAgICAgICAgICBjci5yZWxfbGluZV90byh3LCBoKQogICAgICAgICAgICAgICAgY3Iuc2V0X2xpbmVfd2lkdGgobWF4KGNyLmRldmljZV90b191c2VyX2Rpc3RhbmNlKDIsIDIpKSkKICAgICAgICAgICAgICAgIGNyLnNldF9zb3VyY2VfcmdiYSgwLjUsIDAsIDAsIDAuMjUpCiAgICAgICAgICAgICAgICBjci5zdHJva2UoKQogICAgICAgICAgICBjci5yZXN0b3JlKCkKICAgICAgICBQYXRoRGlhZ3JhbUFyY1RvLmRyYXdfZGVzdF9wYXRoKHNlbGYsIGNyKQogICAgICAgIGNyLnJlbF9jdXJ2ZV90bygtMC4yNSwgLTAuMTI1LCAtMC4yNSwgMC4xMjUsIC0wLjUsIDApICAjY3VydmV0bwoKY2xhc3MgUGF0aERpYWdyYW1DbG9zZShQYXRoRGlhZ3JhbUN1cnZlVG8pOgogICAgZGVmIGRyYXdfZGVzdF9wYXRoKHNlbGYsIGNyKToKICAgICAgICBQYXRoRGlhZ3JhbUN1cnZlVG8uZHJhd19kZXN0X3BhdGgoc2VsZiwgY3IpCiAgICAgICAgY3IuY2xvc2VfcGF0aCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNjbG9zZXBhdGgKCmNsYXNzIFRleHRFeHRlbnRzKERpYWdyYW0pOgogICAgZGVmIGRyYXdfZGVzdChzZWxmLCBjcik6CiAgICAgICAgdGV4dCA9ICdqQXknCiAgICAgICAgY3Iuc2VsZWN0X2ZvbnRfZmFjZSgnR2VvcmdpYScsIGNhaXJvLkZPTlRfU0xBTlRfTk9STUFMLCBjYWlyby5GT05UX1dFSUdIVF9CT0xEKQogICAgICAgIGNyLnNldF9mb250X3NpemUoMC41KQogICAgICAgIHB4ID0gbWF4KGNyLmRldmljZV90b191c2VyX2Rpc3RhbmNlKDEsIDEpKQogICAgICAgIGZhc2NlbnQsIGZkZXNjZW50LCBmaGVpZ2h0LCBmeGFkdmFuY2UsIGZ5YWR2YW5jZSA9IGNyLmZvbnRfZXh0ZW50cygpCiAgICAgICAgcHJpbnQoZmFzY2VudCwgZmRlc2NlbnQsIGZoZWlnaHQpCiAgICAgICAgeGJlYXJpbmcsIHliZWFyaW5nLCB3aWR0aCwgaGVpZ2h0LCB4YWR2YW5jZSwgeWFkdmFuY2UgPSBcCiAgICAgICAgICAgICAgICBjci50ZXh0X2V4dGVudHModGV4dCkKICAgICAgICB4ID0gMC41IC0geGJlYXJpbmcgLSB3aWR0aCAvIDIKICAgICAgICB5ID0gMC41IC0gZmRlc2NlbnQgKyBmaGVpZ2h0IC8gMgoKICAgICAgICAjIGJhc2VsaW5lLCBkZXNjZW50LCBhc2NlbnQsIGhlaWdodAogICAgICAgIGNyLnNldF9saW5lX3dpZHRoKDEgKiBweCkKICAgICAgICBjci5zZXRfZGFzaChbMyAqIHB4XSwgMCkKICAgICAgICBjci5zZXRfc291cmNlX3JnYmEoMCwgMC42LCAwLCAwLjUpCiAgICAgICAgY3IubW92ZV90byh4ICsgeGJlYXJpbmcsIHkpCiAgICAgICAgY3IucmVsX2xpbmVfdG8od2lkdGgsIDApCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBjci5tb3ZlX3RvKHggKyB4YmVhcmluZywgeSArIGZkZXNjZW50KQogICAgICAgIGNyLnJlbF9saW5lX3RvKHdpZHRoLCAwKQogICAgICAgIGNyLm1vdmVfdG8oeCArIHhiZWFyaW5nLCB5IC0gZmFzY2VudCkKICAgICAgICBjci5yZWxfbGluZV90byh3aWR0aCwgMCkKPHxmaW1fZW5kfD4="]
["3a40893c0bd29c14e7f4fa387c435d88778355bd-1","3a40893c0bd29c14e7f4fa387c435d88778355bd","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KbmFtZSA9ICJxYXdzIgo8fGZpbV9lbmR8Pg=="]
["285b46cd8106a00af9e8ba90fe47924298cac266-2","285b46cd8106a00af9e8ba90fe47924298cac266","PHxmaW1fcHJlZml4fD4KIyBNYXJjZWxvIENhbXBvcyBkZSBNZWRlaXJvcwojIEFEUyBVTklGSVAKIyBSRVZJU8ODTyBERSBQWVRIT04KIyBBVUxBIDA3IEdVU1RBVk8gR1VBTkFCQVJBCicnJwpGYcOnYSB1bSBwcm9ncmFtYSBxdWUgbGVpYSB1bWEgbsO6bWVybyBpbnRlaXJvIGUgbW9zdHJlIHN1YSB0YWJ1YWRhLiAKJycnCnByaW50KCc9JyozMCkKcHJpbnQoJ3s6Kl4zMH0nLmZvcm1hdCgnICBUQUJVQURBICAnKSkKcHJpbnQoJz0nKjMwKQoKbnVtID0gaW50KGlucHV0KCdJbmZvcm1lIHVtIG7Dum1lcm86JykpCnByaW50KCd7fSBYIDEgPSB7fVxuJy5mb3JtYXQobnVtLCBudW0qMSkpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcHJpbnQoJ3t9IFggMiA9IHt9XG4nLmZvcm1hdChudW0sIG51bSoyKSkKcHJpbnQoJ3t9IFggMyA9IHt9XG4nLmZvcm1hdChudW0sIG51bSozKSkKcHJpbnQoJ3t9IFggNCA9IHt9XG4nLmZvcm1hdChudW0sIG51bSo0KSkKcHJpbnQoJ3t9IFggNSA9IHt9XG4nLmZvcm1hdChudW0sIG51bSo1KSkKPHxmaW1fZW5kfD4="]
["3a68e6e9c538870a23db695c7fe27a3f01ff98e3-4","3a68e6e9c538870a23db695c7fe27a3f01ff98e3","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgppbXBvcnQgdGltZXIKCkRFU0MgPSAnU3VtIHNxdWFyZSBkaWZmZXJlbmNlJwpTT0xVVElPTiA9IDI1MTY0MTUwCgoKZGVmIHN1bV9vZl9zcXVhcmVzKGxpbWl0KToKICAgICIiIiBSZXR1cm5zIHRoZSBzdW0gb2YgYWxsIHNxdWFyZXMgaW4gdGhlIHJhbmdlIDEgdXAgdG8gYW5kIGluY2x1ZGluZyBsaW1pdC4gIiIiCiAgICByZXR1cm4gc3VtKFtpICoqIDIgZm9yIGkgaW4gcmFuZ2UobGltaXQrMSldKQoKCmRlZiBzcXVhcmVfb2Zfc3VtKGxpbWl0KToKICAgICIiIiBSZXR1cm5zIHRoZSBzcXVhcmUgb2YgdGhlIHN1bSBvZiBhbGwgaW50ZWdlcnMgaW4gdGhlIHJhbmdlIDEgdXAgdG8gYW5kCiAgICAgICAgaW5jbHVkaW5nIGxpbWl0LgogICAgIiIiCiAgICByZXR1cm4gc3VtKFtpIGZvciBpIGluIHJhbmdlKGxpbWl0ICsgMSldKSAqKiAyCgoKQHRpbWVyLnRpbWVpdApkZWYgc29sdmUoKToKICAgIHVwdG8gPSAxMDAKICAgIHN1bV9vZl9zcSA9IHN1bV9vZl9zcXVhcmVzKHVwdG8pCiAgICBzcV9vZl9zdW0gPSBzcXVhcmVfb2Zfc3VtKHVwdG8pCgogICAgcmV0dXJuIGFicyhzcV9vZl9zdW0gLSBzdW1fb2Zfc3EpCjx8ZmltX3N1ZmZpeHw+CiIiIkV1bGFyIFByb2JsZW0gNiAtIFN1bSBzcXVhcmUgZGlmZmVyZW5jZToKICAgIEZpbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc3VtIG9mIHRoZSBzcXVhcmVzIG9mIHRoZSBmaXJzdCBvbmUKICAgIGh1bmRyZWQgbmF0dXJhbCBudW1iZXJzIGFuZCB0aGUgc3F1YXJlIG9mIHRoZSBzdW0uCiIiIgo8fGZpbV9lbmR8Pg=="]
["3a6b06027f5d36e8e4f0018c00c99173a8550b7f-3","3a6b06027f5d36e8e4f0018c00c99173a8550b7f",{"$cut":{"chars":43584,"head":"PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiMgRm9ybSBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZWQgZnJvbSByZWFkaW5nIHVpIGZpbGUgJ2ZpcnN0X3BhZ2UudWknCiMKIyBDcmVhdGVkIGJ5OiBQeVF0NSBVSSBjb2RlIGdlbmVyYXRvciA1LjE1LjQKIwojIFdBUk5JTkc6IEFueSBtYW51YWwgY2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Qgd2hlbiBweXVpYzUgaXMKIyBydW4gYWdhaW4uICBEbyBub3QgZWRpdCB0aGlzIGZpbGUgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KCgpmcm9tIFB5UXQ1IGltcG9ydCBRdENvcmUsIFF0R3VpLCBRdFdpZGdldHMKCgpjbGFzcyBVaV9NYWluV2luZG93KG9iamVjdCk6CiAgICBkZWYgc2V0dXBVaShzZWxmLCBNYWluV2luZG93KToKICAgICAgICBNYWluV2luZG93LnNldE9iamVjdE5hbWUoIk1haW5XaW5kb3ciKQogICAgICAgIE1haW5XaW5kb3cucmVzaXplKDExMDMsIDcyMCkKICAgICAgICBNYWluV2luZG93LnNldE1pbmltdW1TaXplKFF0Q29yZS5RU2l6ZSgxMDAwLCA3MjApKQogICAgICAgIHBhbGV0dGUgPSBRdEd1aS5RUGFsZXR0ZSgpCiAgICAgICAgYnJ1c2ggPSBRdEd1aS5RQnJ1c2goUXRHdWkuUUNvbG9yKDI1NSwgMjU1LCAyNTUpKQogICAgICAgIGJydXNoLnNldFN0eWxlKFF0Q29yZS5RdC5Tb2xpZFBhdHRlcm4pCiAgICAgICAgcGFsZXR0ZS5zZXRCcnVzaChRdEd1aS5RUGFsZXR0ZS5BY3RpdmUsIFF0R3VpLlFQYWxldHRlLldpbmRvd1RleHQsIGJydXNoKQogICAgICAgIGJydXNoID0gUXRHdWkuUUJydXNoKFF0R3VpLlFDb2xvcigwLCAwLCAwLCAwKSkKICAgICAgICBicnVzaC5zZXRTdHlsZShRdENvcmUuUXQuU29saWRQYXR0ZXJuKQogICAgICAgIHBhbGV0dGUuc2V0QnJ1c2goUXRHdWkuUVBhbGV0dGUuQWN0aXZlLCBRdEd1aS5RUGFsZXR0ZS5CdXR0b24sIGJydXNoKQogICAgICAgIGJydXNoID0gUXRHdWkuUUJydXNoKFF0R3VpLlFDb2xvcig2NiwgNzMsIDkwKSkKICAgICAgICBicnVzaC5zZXRTdHlsZShRdENvcmUuUXQuU29saWRQYXR0ZXJuKQogICAgICAgIHBhbGV0dGUuc2V0QnJ1c2goUXRHdWkuUVBhbGV0dGUuQWN0aXZlLCBRdEd1aS5RUGFsZXR0ZS5MaWdodCwgYnJ1c2gpCiAgICAgICAgYnJ1c2ggPSBRdEd1aS5RQnJ1c2goUXRHdWkuUUNvbG9yKDU1LCA2MSwgNzUpKQogICAgICAgIGJydXNoLnNldFN0eWxlKFF0Q29yZS5RdC5Tb2xpZFBhdHRlcm4pCiAgICAgICAgcGFsZXR0ZS5zZXRCcnVzaChRdEd1aS5RUGFsZXR0ZS5BY3RpdmUsIFF0R3VpLlFQYWxldHRlLk1pZGxpZ2h0LCBicnVzaCkKICAgICAgICBicnVzaCA9IFF0R3VpLlFCcnVzaChRdEd1aS5RQ29sb3IoMjIsIDI0LCAzMCkpCiAgICAgICAgYnJ1c2guc2V0U3R5bGUoUXRDb3JlLlF0LlNvbGlkUGF0dGVybikKICAgICAgICBwYWxldHRlLnNldEJydXNoKFF0R3VpLlFQYWxldHRlLkFjdGl2ZSwgUXRHdWkuUVBhbGV0dGUuRGFyaywgYnJ1c2gpCiAgICAgICAgYnJ1c2ggPSBRdEd1aS5RQnJ1c2goUXRHdWkuUUNvbG9yKDI5LCAzMiwgNDApKQogICAgICAgIGJydXNoLnNldFN0eWxlKFF0Q29yZS5RdC5Tb2xpZFBhdHRlcm4pCiAgICAgICAgcGFsZXR0ZS5zZXRCcnVzaChRdEd1aS5RUGFsZXR0ZS5BY3RpdmUsIFF0R3VpLlFQYWxldHRlLk1pZCwgYnJ1c2gpCiAgICAgICAgYnJ1c2ggPSBRdEd1aS5RQnJ1c2goUXRHdWkuUUNvbG9yKDIxMCwgMjEwLCAyMTApKQogICAgICAgIGJydXNoLnNldFN0eWxlKFF0Q29yZS5RdC5Tb2xpZFBhdHRlcm4pCiAgICAgICAgcGFsZXR0ZS5zZXRCcnVzaChRdEd1aS5RUGFsZXR0ZS5BY3RpdmUsIFF0R3VpLlFQYWxldHRlLlRleHQsIGJydXNoKQogICAgICAgIGJydXNoID0gUXRHdWkuUUJydXNoKFF0R3VpLlFDb2xvcigyNTUsIDI1NSwgMjU1KSkKICAgICAgICBicnVzaC5zZXRTdHlsZShRdENvcmUuUXQuU29saWRQYXR0ZXJuKQogICAgICAgIHBhbGV0dGUuc2V0QnJ1c2goUXRHdWkuUVBhbGV0dGUuQWN0aXZlLCBRdEd1aS5RUGFsZXR0ZS5CcmlnaHRUZXh0LCBicnVzaCkKICAgICAgICBicnVzaCA9IFF0R3VpLlFCcnVzaChRdEd1aS5RQ29sb3IoMjU1LCAyNTUsIDI1NSkpCiAgICAgICAgYnJ1c2guc2V0U3R5bGUoUXRDb3JlLlF0LlNvbGlkUGF0dGVybikKICAgICAgICBwYWxldHRlLnNldEJydXNoKFF0R3VpLlFQYWxldHRlLkFjdGl2ZSwgUXRHdWkuUVBhbGV0dGUuQnV0dG9uVGV4dCwgYnJ1c2gpCiAgICAgICAgYnJ1c2ggPSBRdEd1aS5RQnJ1c2goUXRHdWkuUUNvbG9yKDAsIDAsIDAsIDApKQogICAgICAgIGJydXNoLnNldFN0eWxlKFF0Q29yZS5RdC5Tb2xpZFBhdHRlcm4pCiAgICAgICAgcGFsZXR0ZS5zZXRCcnVzaChRdEd1aS5RUGFsZXR0ZS5BY3RpdmUsIFF0R3VpLlFQYWxldHRlLkJhc2UsIGJydXNoKQogICAgICAgIGJydXNoID0gUXRHdWkuUUJydXNoKFF0R3VpLlFDb2xvcigwLCAwLCAwLCAwKSkKICAgICAgICBicnVzaC5zZXRTdHlsZShRdENvcmUuUXQuU29saWRQYXR0ZXJuKQogICAgICAgIHBhbGV0dGUuc2V0QnJ1c2goUXRHdWkuUVBhbGV0dGUuQWN0aXZlLCBRdEd1aS5RUGFsZXR0ZS5XaW5kb3csIGJydXNoKQogICAgICAgIGJydXNoID0gUXRHdWkuUUJydXNoKFF0R3VpLlFDb2xvcigwLCAwLCAwKSkKICAgICAgICBicnVzaC5zZXRTdHlsZShRdENvcmUuUXQuU29saWRQYXR0ZXJuKQogICAgICAgIHBhbGV0dGUuc2V0QnJ1c2goUXRHdWkuUVBhbGV0dGUuQWN0aXZlLCBRdEd1aS5RUGFsZXR0ZS5TaGFkb3csIGJydXNoKQogICAgICAgIGJydXNoID0gUXRHdWkuUUJydXNoKFF0R3VpLlFDb2xvcig4NSwgMTcwLCAyNTUpKQogICAgICAgIGJydXNoLnNldFN0eWxlKFF0Q29yZS5RdC5Tb2xpZFBhdHRlcm4pCiAgICAgICAgcGFsZXR0ZS5zZXRCcnVzaChRdEd1aS5RUGFsZXR0ZS5BY3RpdmUsIFF0R3VpLlFQYWxldHRlLkhpZ2hsaWdodCwgYnJ1c2gpCiAgICAgICAgYnJ1c2ggPSBRdEd1aS5RQnJ1c2goUXRHdWkuUUNvbG9yKDg1LCAxNzAsIDI1NSkpCiAgICAgICAgYnJ1c2guc2V0U3R5bGUoUXRDb3JlLlF0LlNvbGlkUGF0dGVybikKICAgICAgICBwYWxldHRl"}}]
["a36df558c71caf79ec4de796be47416693c8cef3-2","a36df558c71caf79ec4de796be47416693c8cef3","PHxmaW1fcHJlZml4fD4KZnJvbSBtcXR0X2lvdCBpbXBvcnQgTVFUVElPVEJhc2UKCmNsYXNzIEVtcXhJT1QoTVFUVElPVEJhc2UpOgogICAgJycnCiAgICBlbXF4LmNsb3VkIG1xdHQgY2xpZW50CiAgICAnJycKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBicm9rZXIgPSAncGFiODAwYTAuY24uZW1xeC5jbG91ZCcKICAgICAgICBwb3J0ID0gMTI4NzAKICAgICAgICBjbGllbnRfaWQgPSAnaHVheWlfcGlfZGh0MTEnCiAgICAgICAgdXNlcm5hbWUgPSAne3VzZXJuYW1lfScgICAjIHlvdXIgdXNlcm5hbWUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHBhc3N3b3JkID0gJ3twYXNzd29yZH0nICAgIyB5b3VyIHBhc3N3b3JkCgogICAgICAgIHN1cGVyKCkuX19pbml0X18oYnJva2VyLCBwb3J0LCB1c2VybmFtZSwgcGFzc3dvcmQsIGNsaWVudF9pZCwgY2xlYW5fc2Vzc2lvbj1UcnVlKQo8fGZpbV9lbmR8Pg=="]
["3a03acc392fd54d59ff2114d4081291e07138058-5","3a03acc392fd54d59ff2114d4081291e07138058","PHxmaW1fcHJlZml4fD4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBidWlsdC1pbnMKaW1wb3J0IHVuaXR0ZXN0CgojIGxvY2FsCmZyb20gdXRpbHMuYmFzZSBpbXBvcnQgVGVzdFBvc3RnYXBCYXNlCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojIEdSQ2gzNyBNSEMgcmVnaW9uIGNocjY6MjgsNDc3LDc5Ny0zMyw0NDgsMzU0CiMgKHNlZSBodHRwczovL3d3dy5uY2JpLm5sbS5uaWguZ292L2dyYy9odW1hbi9yZWdpb25zL01IQz9hc209R1JDaDM3KQpNSENfU1RBUlRfR1JDSDM3ID0gMjg0Nzc3OTcKTUhDX0VORF9HUkNIMzcgPSAzMzQ0ODM1NAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgojIEdSQ2gzOCBNSEMgcmVnaW9uIGNocjY6MjgsNTEwLDEyMC0zMyw0ODAsNTc3CiMgKHNlZSBodHRwczovL3d3dy5uY2JpLm5sbS5uaWguZ292L2dyYy9odW1hbi9yZWdpb25zL01IQz9hc209R1JDaDM4KQpNSENfU1RBUlRfR1JDSDM4ID0gMjg1MTAxMjAKPHxmaW1fZW5kfD4="]
["6e6113e69971ee6a6d9d91959645a21a6f28ee42-3","6e6113e69971ee6a6d9d91959645a21a6f28ee42","PHxmaW1fcHJlZml4fD4KZnJvbSBlbmdpbmUuYWN0aW9uIGltcG9ydCBBY3Rpb24sIFN0YXRzCmZyb20gZW5naW5lLnBsYXllciBpbXBvcnQgUGxheWVyCgpkZWYgcHJvY2Vzc0lucHV0KCk6CiAgICB1c2VyVGV4dCA9IGlucHV0KCJFbnRlciBjb21tYW5kIFtBZGQgcGxheWVyXSBbVGVhbSBwbGF5ZXJdIFtTcG90XSBbV2ViIHNwb3RdIFtGbGVlIGphaWxdIFtQcmludF0gW3RlYW1DaGF0XTogXG4iKQogICAgaWYgJ2YnIGluIHVzZXJUZXh0OgogICAgICAgIGphaWxDb2RlID0gaW5wdXQoImVudGVyIGphaWwgY29kZTogIikKICAgICAgICBBY3Rpb24uZmxlZVBsYXllcldpdGhDb2RlKGphaWxDb2RlKQogICAgICAgIFN0YXRzLnByaW50UGxheWVyc0RldGFpbGVkKCkKICAgIGVsaWYgJ3MnIGluIHVzZXJUZXh0OgogICAgICAgIG1vYmlsZSA9IGlucHV0KCJlbnRlciBtb2JpbGU6ICIpCiAgICAgICAgY29kZSA9IGlucHV0KCJlbnRlciBjb2RlOiAiKQogICAgICAgIEFjdGlvbi5oYW5kbGVTbXMobW9iaWxlLCBjb2RlKQogICAgICAgIFN0YXRzLnByaW50UGxheWVyc0RldGFpbGVkKCkKICAgIGVsaWYgJ2EnIGluIHVzZXJUZXh0OgogICAgICAgIG5hbWUgPSBpbnB1dCgiZW50ZXIgbmFtZTogIikKICAgICAgICBtb2JpbGUgPSBpbnB1dCgiZW50ZXIgbW9iaWxlOiAiKQogICAgICAgICNlbWFpbCA9IGlucHV0KCJlbnRlciBlbWFpbDogIikKICAgICAgICBBY3Rpb24uYWRkUGxheWVyKG5hbWUsIG1vYmlsZSwgIiIpCiAgICAgICAgU3RhdHMucHJpbnRQbGF5ZXJzRGV0YWlsZWQoKQogICAgZWxpZiAndycgaW4gdXNlclRleHQ6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBoYXNoID0gaW5wdXQoImVudGVyIHBsYXllciBoYXNoOiAiKQogICAgICAgIGNvZGUgPSBpbnB1dCgiZW50ZXIgY29kZTogIikKICAgICAgICBBY3Rpb24uaGFuZGxlV2ViKGhhc2gsIGNvZGUpCiAgICAgICAgU3RhdHMucHJpbnRQbGF5ZXJzRGV0YWlsZWQoKQo8fGZpbV9lbmR8Pg=="]
["a33717d6ec9f683c8f4d519e5fbbb1a18f18fd5e-1","a33717d6ec9f683c8f4d519e5fbbb1a18f18fd5e","PHxmaW1fcHJlZml4fD4KIiIiClRoaXMgcHJvZ3JhbSB1c2VzIGZvciBsb29wcyB0byBpdGVyYXRlIHRocm91Z2ggYSBsaXN0IGFuZCB1c2VzIHRoZSByYW5nZQp2YWx1ZXMgaW4gdGhlIGZvciBsb29wIGFzIHRoZSBpbmRleCB2YWx1ZXMgdG8gcHJpbnQgZWFjaCBsaXN0IGVsZW1lbnQuCiIiIgoKZmlyc3RfbGlzdCA9IFsxLCAxMCwgM10Kc2Vjb25kX2xpc3QgPSBbMiwgNSwgNl0KCiMgVGhpcyBmb3IgbG9vcCB1c2VzIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgdG8gZGV0ZXJtaW5lIHRoZSBpbmRleCB2YWx1ZXMKZm9yIGluZGV4IGluIHJhbmdlKGxlbihmaXJzdF9saXN0KSk6CiAgICBwcmludCgiTG9va2luZyBhdCBpbmRleDogIiArIHN0cihpbmRleCkpCjx8ZmltX2hvbGV8PgogICAgcHJpbnQoIiAgIDJuZCBsaXN0IGhhczogIiArIHN0cih0aGluZ19pbl9zZWNvbmRfbGlzdCkpCiAgICBpZiAodGhpbmdfaW5fZmlyc3RfbGlzdCA+IHRoaW5nX2luX3NlY29uZF9saXN0KToKICAgICAgICBwcmludCgiICAgICAgdGhpbmcgaW4gMXN0IGxpc3Qgd2FzIGJpZ2dlciIpCiAgICBlbGlmICh0aGluZ19pbl9zZWNvbmRfbGlzdCA+IHRoaW5nX2luX2ZpcnN0X2xpc3QpOgogICAgICAgIHByaW50KCIgICAgICB0aGluZyBpbiAybmQgbGlzdCB3YXMgYmlnZ2VyIikKPHxmaW1fc3VmZml4fD4KICAgIHRoaW5nX2luX2ZpcnN0X2xpc3QgPSBmaXJzdF9saXN0W2luZGV4XQogICAgdGhpbmdfaW5fc2Vjb25kX2xpc3QgPSBzZWNvbmRfbGlzdFtpbmRleF0KICAgIAogICAgcHJpbnQoIiAgIDFzdCBsaXN0IGhhczogIiArIHN0cih0aGluZ19pbl9maXJzdF9saXN0KSkKPHxmaW1fZW5kfD4="]
["3a7cb490152d5bf37094a9707cdeb3816df5fc89-4","3a7cb490152d5bf37094a9707cdeb3816df5fc89","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJhbmRvbQppbXBvcnQgbWF0aAoKY2xhc3MgQUk6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi50aWNrID0gMAogICAgICAgIHNlbGYuc3RhdHVzID0gewogICAgICAgICAgICAnaHVuZ3JpbmVzcyc6IDUwLAogICAgICAgICAgICAnaGVhbHRoJzogNTAsCiAgICAgICAgICAgICdoYXBwaW5lc3MnOiA1MAogICAgICAgIH0KICAgICAgICBzZWxmLmJlZm9yZVN0YXR1cyA9IHNlbGYuc3RhdHVzOwogICAgICAgIHNlbGYuY29zdEVhdCA9IDAuNQoKICAgIGRlZiBfX2VhdF9kaWV0KHNlbGYpOgogICAgICAgIHNlbGYuc3RhdHVzWydodW5ncmluZXNzJ10gKz0gMTAKCiAgICBkZWYgX19lYXRfc25hY2soc2VsZik6CiAgICAgICAgc2VsZi5zdGF0dXNbJ2h1bmdyaW5lc3MnXSArPSAyCiAgICAgICAgc2VsZi5zdGF0dXNbJ2hhcHBpbmVzcyddICs9IDEwCgogICAgZGVmIGRyYXdTdGF0dXMoc2VsZik6CiAgICAgICAgcHJpbnQgJ25vdyBzdGF0dXMgaXMgLi4uLi4uJwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZm9yIHBhcmFtIGluIHNlbGYuc3RhdHVzOgogICAgICAgICAgICBwcmludCBwYXJhbS5sanVzdCgxNSwgIiAiKSArICI6IiArIHN0cihzZWxmLnN0YXR1c1twYXJhbV0pLnJqdXN0KDQsICIgIikKCjx8ZmltX2VuZHw+"]
["eedbd982608c082a2ad62be8fd5524c43b47e22a-2","eedbd982608c082a2ad62be8fd5524c43b47e22a","PHxmaW1fcHJlZml4fD4KX19hbGxfXyA9IFsgImF1dGgiLAogICAgICAgICAgICAiYXV0aF9nb29nbGVfY29ubmVjdCIsCiAgICAgICAgICAgICJ1cGxvYWQiLAogICAgICAgICAgICAiY2F0ZWdvcnkiLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICJtZnciLAogICAgICAgICAgICAiZWxlbWVudCIsCiAgICAgICAgICAgICJhcGkiIF0KPHxmaW1fZW5kfD4="]
["9562894fb828c986c69b8f2678a956349690442f-2","9562894fb828c986c69b8f2678a956349690442f","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KaW1wb3J0IG9zCmltcG9ydCB1aQppbXBvcnQgdW5pdHRlc3QKCmZyb20gcGF0aHMgaW1wb3J0IElNQUdFX0ZPTERFUl9QQVRURVJOCgoKZGVmIGltYWdlX3BhdGgobmFtZSwgdGhlbWUpOgogICAgZm9sZGVyID0gSU1BR0VfRk9MREVSX1BBVFRFUk4uZm9ybWF0KHRoZW1lKQogICAgcmV0dXJuIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oZm9sZGVyLCBuYW1lKSkKCgpkZWYgaWNvbl9maWxlbmFtZShjYXBhY2l0eSwgaXNfY2hhcmdpbmcpOgogICAgZmlsZW5hbWUgPSAnYmF0dGVyeS0nCiAgICBpZiBjYXBhY2l0eSA+PSA5MDoKICAgICAgICBmaWxlbmFtZSArPSAnMTAwJwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBlbGlmIGNhcGFjaXR5ID49IDcwOgogICAgICAgIGZpbGVuYW1lICs9ICcwODAnCiAgICBlbGlmIGNhcGFjaXR5ID49IDUwOgogICAgICAgIGZpbGVuYW1lICs9ICcwNjAnCjx8ZmltX2VuZHw+"]
["6d80f1a15199d8a8850a6de37cc2d5c7a0745c3b-1","6d80f1a15199d8a8850a6de37cc2d5c7a0745c3b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gdXVpZCBpbXBvcnQgdXVpZDQKCmltcG9ydCBweW15c3FsCmltcG9ydCBkamFuZ28KZnJvbSBkamFuZ28uZGIgaW1wb3J0IGNvbm5lY3Rpb25zLCBjbG9zZV9vbGRfY29ubmVjdGlvbnMKCmZyb20gLiBpbXBvcnQgc2V0dGluZ3MKCiMgcmVwbGFjZSBteXNxbGRiIHdpdGggcHlteXNxbApweW15c3FsLmluc3RhbGxfYXNfTXlTUUxkYigpCgojIHNldCBvcyBlbnYgZGphbmdvIHNldHRpbmdzIGFuZCBkamFuZ28gc2V0dXAKb3MuZW52aXJvbi5zZXRkZWZhdWx0KCdESkFOR09fU0VUVElOR1NfTU9EVUxFJywgc2V0dGluZ3MuX19uYW1lX18pCmRqYW5nby5zZXR1cCgpCgoKY2xhc3MgUm91dGVyKG9iamVjdCk6CiAgICBhcHBfbGFiZWwgPSAnJwoKICAgIGRlZiBkYl9mb3JfcmVhZChzZWxmLCBtb2RlbCwgKipoaW50cyk6CiAgICAgICAgaWYgbW9kZWwuX21ldGEuYXBwX2xhYmVsID09IHNlbGYuYXBwX2xhYmVsOgogICAgICAgICAgICByZXR1cm4gc2VsZi5hcHBfbGFiZWwKICAgICAgICByZXR1cm4gTm9uZQoKICAgIGRlZiBkYl9mb3Jfd3JpdGUoc2VsZiwgbW9kZWwsICoqaGludHMpOgogICAgICAgIGlmIG1vZGVsLl9tZXRhLmFwcF9sYWJlbCA9PSBzZWxmLmFwcF9sYWJlbDoKICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXBwX2xhYmVsCiAgICAgICAgcmV0dXJuIE5vbmUKCiAgICBkZWYgYWxsb3dfcmVsYXRpb24oc2VsZiwgb2JqMSwgb2JqMiwgKipoaW50cyk6CiAgICAgICAgaWYgb2JqMS5fbWV0YS5hcHBfbGFiZWwgPT0gc2VsZi5hcHBfbGFiZWwgb3Igb2JqMi5fbWV0YS5hcHBfbGFiZWwgPT0gc2VsZi5hcHBfbGFiZWw6CiAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICByZXR1cm4gTm9uZQoKICAgIGRlZiBhbGxvd19taWdyYXRlKHNlbGYsIGRiLCBhcHBfbGFiZWwsIG1vZGVsPU5vbmUsICoqaGludHMpOgogICAgICAgIGlmIGFwcF9sYWJlbCA9PSBzZWxmLmFwcF9sYWJlbDoKICAgICAgICAgICAgcmV0dXJuIGRiID09IHNlbGYuYXBwX2xhYmVsCiAgICAgICAgcmV0dXJuIE5vbmUKCgpkZWYgYWRkX2RiKGRiX2NvbmYpOgogICAgYXBwX2xhYmVsID0gJ2FsXycgKyBzdHIodXVpZDQoKSkKCiAgICBzZXR0aW5ncy5EQVRBQkFTRVNbYXBwX2xhYmVsXSA9IGRiX2NvbmYKCiAgICByb3V0ZXJfY2xhc3NfbmFtZSA9ICdSb3V0ZXInICsgYXBwX2xhYmVsLmNhcGl0YWxpemUoKQogICAgc2V0YXR0cigKICAgICAgICBzZXR0aW5ncywKICAgICAgICByb3V0ZXJfY2xhc3NfbmFtZSwKICAgICAgICB0eXBlKHJvdXRlcl9jbGFzc19uYW1lLCAoUm91dGVyLCksIGRpY3QoYXBwX2xhYmVsPWFwcF9sYWJlbCkpLAogICAgKQogICAgc2V0dGluZ3MuREFUQUJBU0VfUk9VVEVSUy5hcHBlbmQoCiAgICAgICAgJy4nLmpvaW4oW3NldHRpbmdzLl9fbmFtZV9fLCByb3V0ZXJfY2xhc3NfbmFtZV0pCiAgICApCiAgICBjb25uZWN0aW9ucy5jbG9zZV9hbGwoKQogICAgcmV0dXJuIGFwcF9sYWJlbAoKCmRlZiBjcmVhdGVfbW9kZWwobW9kZWwpOgogICAgd2l0aCBjb25uZWN0aW9uc1ttb2RlbC5fbWV0YS5hcHBfbGFiZWxdLnNjaGVtYV9lZGl0b3IoKSBhcyBzY2hlbWFfZWRpdG9yOgogICAgICAgIHNjaGVtYV9lZGl0b3IuY3JlYXRlX21vZGVsKG1vZGVsKQoKCmRlZiBkZWxldGVfbW9kZWwobW9kZWwpOgogICAgd2l0aCBjb25uZWN0aW9uc1ttb2RlbC5fbWV0YS5hcHBfbGFiZWxdLnNjaGVtYV9lZGl0b3IoKSBhcyBzY2hlbWFfZWRpdG9yOgogICAgICAgIHNjaGVtYV9lZGl0b3IuZGVsZXRlX21vZGVsKG1vZGVsKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZGVmIGNoZWNrX3RhYmxlX2V4aXN0cyhtb2RlbCk6CiAgICBjb25uID0gY29ubmVjdGlvbnNbbW9kZWwuX21ldGEuYXBwX2xhYmVsXQogICAgY3Vyc29yID0gY29ubi5jdXJzb3IoKQo8fGZpbV9lbmR8Pg=="]
["25412227fb31f15ea45b6008e97902c0452de952-4","25412227fb31f15ea45b6008e97902c0452de952","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gY29sb3JhbWEgaW1wb3J0IEZvcmUgYXMgY2xyLCBTdHlsZQo8fGZpbV9ob2xlfD4KcmVkID0gY2xyLlJFRApicmlnaHQgPSBTdHlsZS5CUklHSFQKYmx1ZSA9IGNsci5CTFVFIApyZXNldCA9IFN0eWxlLlJFU0VUX0FMTAoKYmFubmVyID0gZiIiIiAgICAgICAgICAgICAgICAgICAgICAgCiBfX19fX18gICAgIF9fX19fXyAgICAgX18gICAgICAgICBfX19fX18gICBfX19fX18gICAgIF9fICBfXyAgICAgX18gICAgIF9fX19fXyAgIF9fX19fXyAgICAKL1wgIF9fX1wgICAvXCAgPT0gXCAgIC9cIFwgICAgICAgL1wgIF9fX1wgL1wgIF9fX1wgICAvXCBcL1wgXCAgIC9cIFwgICAvXF9fICBfXCAvXCAgX19fXCAgIApcIFwgXF9fX18gIFwgXCAgX188ICAgXCBcIFxfX19fICBcIFwgIF9fXCBcIFxfX18gIFwgIFwgXCBcX1wgXCAgXCBcIFwgIFwvXy9cIFwvIFwgXCAgX19cICAgCiBcIFxfX19fX1wgIFwgXF9cIFxfXCAgXCBcX19fX19cICBcIFxfXCAgICBcL1xfX19fX1wgIFwgXF9fX19fXCAgXCBcX1wgICAgXCBcX1wgIFwgXF9fX19fXCAKICBcL19fX19fLyAgIFwvXy8gL18vICAgXC9fX19fXy8gICBcL18vICAgICBcL19fX19fLyAgIFwvX19fX18vICAgXC9fLyAgICAgXC9fLyAgIFwvX19fX18vIHYxLjQuMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7Z3JlZW59XHgxQlszbUJ5IE5lZmNvcmUgU2VjdXJpdHlceDFCWzBte3Jlc2V0fSkKIiIiCgpkZWYgZ29vZChtc2cpOgogICAgcHJpbnQoIlsiICsgZ3JlZW4gKyBicmlnaHQgKydWTE4nICsgcmVzZXQgKyAnXSAnK21zZykKCmRlZiBiYWQobXNnKToKICAgIHByaW50KCJbIiArIGNsci5MSUdIVE1BR0VOVEFfRVggKyBicmlnaHQgKyAnTk9UIFZMTicgKyByZXNldCArICddICcrbXNnKQoKZGVmIGVycm9yKG1zZyk6CiAgICBwcmludCgiWyIgKyByZWQgKyBicmlnaHQgKydFUlInICsgcmVzZXQgKyAnXScsbXNnKQoKZGVmIGluZm8obXNnKToKICAgIHByaW50KCJbIiArIGJsdWUgKyAnSU5GJyArIHJlc2V0ICsgIl0gIittc2cpCgpkZWYgd2Fybihtc2cpOgogICAgcHJpbnQoIlsiICsgeWVsbG93ICsgJ1dSTicgKyByZXNldCArICJdICIrbXNnKQoKZGVmIGFyZ3NfaW5mbyh1cmwsIHVybHMsIHN0ZGluLCBvdXRwdXQsIG1ldGhvZCwgZGF0YSwgY29va2llcywgdGltZW91dCwgdXNlcl9hZ2VudCwgdmVyaWZ5LCB0aHJlYWRzKToKICAgIGlmIHVybDoKICAgICAgICBwcmludCgnOjogVEFSR0VUICAgICA6ICVzJyAlIHVybCkKICAgIGVsaWYgdXJsczoKICAgICAgICBwcmludCgnOjogVEFSR0VUICAgICA6ICVzJyAlIHVybHMpIAogICAgZWxpZiBzdGRpbjoKICAgICAgICBwcmludCgnOjogVEFSR0VUICAgICA6IFN0ZGluJykKICAgIGVsc2U6CiAgICAgICAgcHJpbnQoJzo6IFRBUkdFVCAgICAgOiBOb25lJykKICAgIAogICAgcHJpbnQoJzo6IE9VVFBVVCAgICAgOiAlcycgJSBvdXRwdXQpCgogICAgcHJpbnQoJzo6IFRIUkVBRFMgICAgOiAlaScgJSB0aHJlYWRzKQogICAgcHJpbnQoJzo6IE1FVEhPRCAgICAgOiAlcycgJSBtZXRob2QpCiAgICAKICAgIGlmIGRhdGE6CiAgICAgICAgcHJpbnQoJzo6IERBVEEgICAgICAgOiAlcycgJSBkYXRhKQoKICAgIGlmIGNvb2tpZXM6CiAgICAgICAgcHJpbnQoJzo6IENPT0tJRVMgICAgOiAlcycgJSBjb29raWVzKQogICAgCiAgICBwcmludCgnOjogVElNRU9VVCAgICA6ICVpJyAlIHRpbWVvdXQpCiAgICBwcmludCgnOjogVVNFUi1BR0VOVCA6ICVzJyAlIHVzZXJfYWdlbnQpCiAgICAKICAgIGlmIHZlcmlmeToKICAgICAgICBwcmludCgnOjogVkVSSUZZICAgICA6IFRydWUnKQogICAgZWxzZToKICAgICAgICBwcmludCgnOjogVkVSSUZZICAgICA6IEZhbHNlJykKICAgIHByaW50KCcnKQoKZGVmIHNob3dfcGF5bG9hZHNfbG9nKCk6CiAgICBwcmludCgnJykKICAgIHByaW50KCdJTkpFQ1RJT04nKQogICAgcHJpbnQoJz09PT09PT09PScrJ1xuJykKICAgIHByaW50KGYne2JyaWdodH1be2dyZWVufSt7cmVzZXR9e2JyaWdodH1de3Jlc2V0fScsJ1NldC1Db29raWU6cGFyYW09Y3JsZnN1aXRlOycpCiAgICBwcmludCgnXG4nKydBUFBFTkQgU1RSSU5HUycpCiAgICBwcmludCgnPT09PT09PT09PT09PT0nKydcbicpCiAgICBmb3IgYXBwc3RyIGluIHN0YXJ0aW5nX3N0cmluZ3M6CiAgICAgICAgcHJpbnQoZid7YnJpZ2h0fVt7Z3JlZW59K3tyZXNldH17YnJpZ2h0fV17cmVzZXR9JyxhcHBzdHIpCiAgICBwcmludCgnXG4nKydFU0NBUEUgQ0hBUlMnKQogICAgcHJpbnQoJz09PT09PT09PT09PScrJ1xuJykKICAgIGZvciBjaGFyIGluIGVzY2FwZV9jaGFyczoKICAgICAgICBwcmludChmJ3ticmlnaHR9W3tncmVlbn0re3Jlc2V0fXticmlnaHR9XXtyZXNldH0nLGNoYXIpCjx8ZmltX3N1ZmZpeHw+CmZyb20gY3JsZnN1aXRlLmNvcmUuY29uZmlnIGltcG9ydCBlc2NhcGVfY2hhcnMsIHN0YXJ0aW5nX3N0cmluZ3MKY3lhbiA9IGNsci5DWUFOCmdyZWVuID0gY2xyLkxJR0hUR1JFRU5fRVgKeWVsbG93ID0gY2xyLkxJR0hUWUVMTE9XX0VYCjx8ZmltX2VuZHw+"]
["95560018dd5c907fc50804bc1619c4b552f6b881-1","95560018dd5c907fc50804bc1619c4b552f6b881","PHxmaW1fcHJlZml4fD4KZnJvbSBiZWFuY291bnQuaW5nZXN0IGltcG9ydCBpbXBvcnRlcgoKCmNsYXNzIEltcG9ydGVyKGltcG9ydGVyLkltcG9ydGVyUHJvdG9jb2wpOgogICAgIiIiQW4gaW1wb3J0ZXIgdGhhdCBkb2VzIG5vdGhpbmcuIiIiCjx8ZmltX2hvbGV8PgogICAgZGVmIGlkZW50aWZ5KHNlbGYsIGZpbGUpOgogICAgICAgIHJldHVybiBGYWxzZQoKICAgIGRlZiBmaWxlX2FjY291bnQoc2VsZiwgXyk6CiAgICAgICAgcmV0dXJuIHNlbGYuYWNjb3VudAo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhY2NvdW50KToKICAgICAgICBzZWxmLmFjY291bnQgPSBhY2NvdW50Cgo8fGZpbV9lbmR8Pg=="]
["6e976b5b835b38818090ff9810971809f857fe0e-1","6e976b5b835b38818090ff9810971809f857fe0e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gZmxhc2sgaW1wb3J0IEZsYXNrLCByZXF1ZXN0CmZyb20gZmJtZXNzZW5nZXIgaW1wb3J0IEJhc2VNZXNzZW5nZXIKZnJvbSBmYm1lc3NlbmdlciBpbXBvcnQgcXVpY2tfcmVwbGllcwpmcm9tIGZibWVzc2VuZ2VyLmVsZW1lbnRzIGltcG9ydCBUZXh0CmZyb20gZmJtZXNzZW5nZXIudGhyZWFkX3NldHRpbmdzIGltcG9ydCBHcmVldGluZ1RleHQsIEdldFN0YXJ0ZWRCdXR0b24sIE1lc3NlbmdlclByb2ZpbGUKZnJvbSBmYm1lc3NlbmdlciBpbXBvcnQgZWxlbWVudHMKZnJvbSBmYm1lc3NlbmdlciBpbXBvcnQgdGVtcGxhdGVzCgpBQ0NFU1NfVE9LRU4gPSAiQmFpc2lhaSBzbGFwdGFzIgpWRVJJRllfVE9LRU4gPSAiRGFyIHNsYXB0ZXNuaXMiCgpjbGFzcyBNZXNzZW5nZXIoQmFzZU1lc3Nlbmdlcik6CiAgICBkZWYgX19pbml0X18oc2VsZiwgcGFnZV9hY2Nlc3NfdG9rZW4pOgogICAgICAgIHNlbGYucGFnZV9hY2Nlc3NfdG9rZW4gPSBwYWdlX2FjY2Vzc190b2tlbgogICAgICAgIHN1cGVyKE1lc3Nlbmdlciwgc2VsZikuX19pbml0X18oc2VsZi5wYWdlX2FjY2Vzc190b2tlbikKCiAgICBkZWYgbWVzc2FnZShzZWxmLCBtZXNzYWdlKToKICAgICAgICByZXNwb25zZSA9IFRleHQodGV4dD0gc3RyKG1lc3NhZ2VbIm1lc3NhZ2UiXVsidGV4dCJdKSkKICAgICAgICBhY3Rpb24gPSByZXNwb25zZS50b19kaWN0KCkKICAgICAgICByZXMgPSBzZWxmLnNlbmQoYWN0aW9uKQogICAgICAgIGFwcC5sb2dnZXIuZGVidWcoIlJlc3BvbnNlOiB7fSIuZm9ybWF0KHJlcykpCgogICAgZGVmIGRlbGl2ZXJ5KHNlbGYsIG1lc3NhZ2UpOgogICAgICAgIHBhc3MKCiAgICBkZWYgcmVhZChzZWxmLCBtZXNzYWdlKToKICAgICAgICBwYXNzCgogICAgZGVmIGFjY291bnRfbGlua2luZyhzZWxmLCBtZXNzYWdlKToKICAgICAgICBwYXNzCgogICAgZGVmIHBvc3RiYWNrKHNlbGYsIG1lc3NhZ2UpOgogICAgICAgIHBheWxvYWQgPSBtZXNzYWdlWyJwb3N0YmFjayJdWyJwYXlsb2FkIl0KICAgICAgICBwcmludChtZXNzYWdlWyJwb3N0YmFjayJdWyJwYXlsb2FkIl0pCiAgICAgICAgaWYgInN0YXJ0IiBpbiBwYXlsb2FkOgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgYnRuMyA9IGVsZW1lbnRzLkJ1dHRvbihidXR0b25fdHlwZSA9ICJwb3N0YmFjayIsIHRpdGxlPSJTdHVkaWpvcytGaW5hbnNhaSIsIHBheWxvYWQ9IlN0dWRpam9zK0ZpbmFuc2FpIikKICAgICAgICAgICAgYnRucyA9IHRlbXBsYXRlcy5CdXR0b25UZW1wbGF0ZSgKICAgICAgICAgICAgICAgIHRleHQgPSAiRFVLIHRlbW9zIiwKICAgICAgICAgICAgICAgIGJ1dHRvbnMgPSBbYnRuMSwgYnRuMiwgYnRuM10KICAgICAgICAgICAgKQogICAgICAgICAgICBzZWxmLnNlbmQoYnRucy50b19kaWN0KCksIlJFU1BPTlNFIikKICAgICAgICBpZiAiVlUgU0ErTFNQK0FwZWxpYWNpam9zIiA9PSBwYXlsb2FkOgogICAgICAgICAgICBidG4xID0gZWxlbWVudHMuQnV0dG9uKGJ1dHRvbl90eXBlID0gInBvc3RiYWNrIiwgdGl0bGU9IlZVIFNBIiwgcGF5bG9hZD0iVlUgU0EiKQogICAgICAgICAgICBidG4yID0gZWxlbWVudHMuQnV0dG9uKGJ1dHRvbl90eXBlID0gInBvc3RiYWNrIiwgdGl0bGU9IkxTUCIsIHBheWxvYWQ9IkxTUCIpCiAgICAgICAgICAgIGJ0bjMgPSBlbGVtZW50cy5CdXR0b24oYnV0dG9uX3R5cGUgPSAicG9zdGJhY2siLCB0aXRsZT0iQXBlbGlhY2lqb3MiLCBwYXlsb2FkPSJBcGVsaWFjaWpvcyIpCiAgICAgICAgICAgIGJ0bnMgPSB0ZW1wbGF0ZXMuQnV0dG9uVGVtcGxhdGUoCiAgICAgICAgICAgICAgICB0ZXh0ID0gIlBvdGVtxJdzIiwKICAgICAgICAgICAgICAgIGJ1dHRvbnMgPSBbYnRuMSwgYnRuMiwgYnRuM10KICAgICAgICAgICAgKQogICAgICAgICAgICBzZWxmLnNlbmQoYnRucy50b19kaWN0KCksIlJFU1BPTlNFIikKICAgICAgICBpZiAiQlVTK1BEIiA9PSBwYXlsb2FkOgogICAgICAgICAgICBidG4xID0gZWxlbWVudHMuQnV0dG9uKGJ1dHRvbl90eXBlID0gInBvc3RiYWNrIiwgdGl0bGU9IkJVUyIsIHBheWxvYWQ9IkJVUyIpCiAgICAgICAgICAgIGJ0bjIgPSBlbGVtZW50cy5CdXR0b24oYnV0dG9uX3R5cGUgPSAicG9zdGJhY2siLCB0aXRsZT0iUEQiLCBwYXlsb2FkPSJQRCIpCiAgICAgICAgICAgIGJ0bnMgPSB0ZW1wbGF0ZXMuQnV0dG9uVGVtcGxhdGUoCiAgICAgICAgICAgICAgICB0ZXh0ID0gIlBvdGVtxJdzIiwKICAgICAgICAgICAgICAgIGJ1dHRvbnMgPSBbYnRuMSwgYnRuMl0KICAgICAgICAgICAgKQogICAgICAgICAgICBzZWxmLnNlbmQoYnRucy50b19kaWN0KCksIlJFU1BPTlNFIikKICAgICAgICBpZiAiU3R1ZGlqb3MrRmluYW5zYWkiID09IHBheWxvYWQ6CiAgICAgICAgICAgIGJ0bjEgPSBlbGVtZW50cy5CdXR0b24oYnV0dG9uX3R5cGUgPSAicG9zdGJhY2siLCB0aXRsZT0iU3R1ZGlqb3MiLCBwYXlsb2FkPSJTdHVkaWpvcyIpCiAgICAgICAgICAgIGJ0bjIgPSBlbGVtZW50cy5CdXR0b24oYnV0dG9uX3R5cGUgPSAicG9zdGJhY2siLCB0aXRsZT0iRmluYW5zYWkiLCBwYXlsb2FkPSJGaW5hbnNhaSIpCiAgICAgICAgICAgIGJ0bnMgPSB0ZW1wbGF0ZXMuQnV0dG9uVGVtcGxhdGUoCiAgICAgICAgICAgICAgICB0ZXh0ID0gIlBvdGVtxJdzIiwKICAgICAgICAgICAgICAgIGJ1dHRvbnMgPSBbYnRuMSwgYnRuMl0KICAgICAgICAgICAgKQogICAgICAgICAgICBzZWxmLnNlbmQoYnRucy50b19kaWN0KCksIlJFU1BPTlNFIikKICAgICAgICBpZiAiU3R1ZGlqb3MiID09IHBheWxvYWQ6CiAgICAgICAgICAgIGJ0bjEgPSBlbGVtZW50cy5CdXR0b24oCiAgICAgICAgICAgIGJ1dHRvbl90eXBlID0gIndlYl91cmwiLAogICAgICAgICAgICB0aXRsZT0iQXRzYWt5bWFpIiwgCiAgICAgICAgICAgIHVybD0iaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xZV8xalNzZGpsZm9JWUpySXVDWkVMSlgwbnY0RjVJSXAyYXItQ01VbW45OC9lZGl0IgogICAgICAgICAgICApCiAgICAgICAgICAgIGJ0bnMgPSB0ZW1wbGF0ZXMuQnV0dG9uVGVtcGxhdGUoCiAgICAgICAgICAgICAgICB0ZXh0ID0gIk51b3JvZGEgxK8gRFVLIGFwaWUgU3R1ZGlqxbMgcHJvZ3JhbcWzIC8gZGFseWvFsyBrZWl0aW3EhSBiZWkgZ3JldHV0aW5lcyBzdHVkaWphcyAvIGluZGl2aWR1YWzFsyBzdHVkaWrFsyBwbGFuxIUiLAogICAgICAgICAgICAgICAgYnV0dG9ucyA9IFtidG4xXQogICAgICAgICAgICApCiAgICAgICAgICAgIHByaW50KHNlbGYuc2VuZChidG5zLnRvX2RpY3QoKSwiUkVTUE9OU0UiKSkKICAgICAgICBpZiAiRmluYW5zYWkiID09IHBheWxvYWQ6CiAgICAgICAgICAgIGJ0bjEgPSBlbGVtZW50cy5CdXR0b24oCiAgICAgICAgICAgIGJ1dHRvbl90eXBlID0gIndlYl91cmwiLAogICAgICAgICAgICB0aXRsZT0iQXRzYWt5bWFpIiwgCiAgICAgICAgICAgIHVybD0iaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xZV8xalNzZGpsZm9JWUpySXVDWkVMSlgwbnY0RjVJSXAyYXItQ01VbW45OC9lZGl0IgogICAgICAgICAgICApCiAgICAgICAgICAgIGJ0bnMgPSB0ZW1wbGF0ZXMuQnV0dG9uVGVtcGxhdGUoCiAgICAgICAgICAgICAgICB0ZXh0ID0gIk51b3JvZGEgxK8gRFVLIGFwaWUgbW9rZXPEjWl1cyB1xb4gbW9rc2zEhSBiZWkgc3RpcGVuZGlqYXMiLAogICAgICAgICAgICAgICAgYnV0dG9ucyA9IFtidG4xXQogICAgICAgICAgICApCiAgICAgICAgICAgIHByaW50KHNlbGYuc2VuZChidG5zLnRvX2RpY3QoKSwiUkVTUE9OU0UiKSkKICAgICAgICBpZiAiQlVTIiA9PSBwYXlsb2FkOgogICAgICAgICAgICBidG4xID0gZWxlbWVudHMuQnV0dG9uKAogICAgICAgICAgICBidXR0b25fdHlwZSA9ICJ3ZWJfdXJsIiwKICAgICAgICAgICAgdGl0bGU9IkF0c2FreW1haSIsIAogICAgICAgICAgICB1cmw9Imh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMWVfMWpTc2RqbGZvSVlKckl1Q1pFTEpYMG52NEY1SUlwMmFyLUNNVW1uOTgvZWRpdCIKICAgICAgICAgICAgKQogICAgICAgICAgICBidG5zID0gdGVtcGxhdGVzLkJ1dHRvblRlbXBsYXRlKAogICAgICAgICAgICAgICAgdGV4dCA9ICJOdW9yb2RhIMSvIERVSyBhcGllIEJlbmRyYXNpYXMgdW5pdmVyc2l0ZXRpbmVzIHN0dWRpamFzIiwKICAgICAgICAgICAgICAgIGJ1dHRvbnMgPSBbYnRuMV0KICAgICAgICAgICAgKQogICAgICAgICAgICBwcmludChzZWxmLnNlbmQoYnRucy50b19kaWN0KCksIlJFU1BPTlNFIikpCiAgICAgICAgaWYgIlBEIiA9PSBwYXlsb2FkOgogICAgICAgICAgICBidG4xID0gZWxlbWVudHMuQnV0dG9uKAogICAgICAgICAgICBidXR0b25fdHlwZSA9ICJ3ZWJfdXJsIiwKICAgICAgICAgICAgdGl0bGU9IkF0c2FreW1haSIsIAogICAgICAgICAgICB1cmw9Imh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMWVfMWpTc2RqbGZvSVlKckl1Q1pFTEpYMG52NEY1SUlwMmFyLUNNVW1uOTgvZWRpdCIKICAgICAgICAgICAgKQogICAgICAgICAgICBidG5zID0gdGVtcGxhdGVzLkJ1dHRvblRlbXBsYXRlKAogICAgICAgICAgICAgICAgdGV4dCA9ICJOdW9yb2RhIMSvIERVSyBhcGllIFBhc2lyZW5rYW11b3NpdXMgZGFseWt1cyIsCiAgICAgICAgICAgICAgICBidXR0b25zID0gW2J0bjFdCiAgICAgICAgICAgICkKICAgICAgICAgICAgcHJpbnQoc2VsZi5zZW5kKGJ0bnMudG9fZGljdCgpLCJSRVNQT05TRSIpKQogICAgICAgIGlmICJWVSBTQSIgPT0gcGF5bG9hZDoKICAgICAgICAgICAgYnRuMSA9IGVsZW1lbnRzLkJ1dHRvbigKICAgICAgICAgICAgYnV0dG9uX3R5cGUgPSAid2ViX3VybCIsCiAgICAgICAgICAgIHRpdGxlPSJBdHNha3ltYWkiLCAKICAgICAgICAgICAgdXJsPSJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFlXzFqU3Nkamxmb0lZSnJJdUNaRUxKWDBudjRGNUlJcDJhci1DTVVtbjk4L2VkaXQiCiAgICAgICAgICAgICkKICAgICAgICAgICAgYnRucyA9IHRlbXBsYXRlcy5CdXR0b25UZW1wbGF0ZSgKICAgICAgICAgICAgICAgIHRleHQgPSAiTnVvcm9kYSDEryBEVUsgYXBpZSBWVSBTQSBiZWkgVlUgU0EgTUlGIiwKICAgICAgICAgICAgICAgIGJ1dHRvbnMgPSBbYnRuMV0KICAgICAgICAgICAgKQogICAgICAgICAgICBwcmludChzZWxmLnNlbmQoYnRucy50b19kaWN0KCksIlJFU1BPTlNFIikpCiAgICAgICAgaWYgIkxTUCIgPT0gcGF5bG9hZDoKICAgICAgICAgICAgYnRuMSA9IGVsZW1lbnRzLkJ1dHRvbigKICAgICAgICAgICAgYnV0dG9uX3R5cGUgPSAid2ViX3VybCIsCiAgICAgICAgICAgIHRpdGxlPSJBdHNha3ltYWkiLCAKICAgICAgICAgICAgdXJsPSJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFlXzFqU3Nkamxmb0lZSnJJdUNaRUxKWDBudjRGNUlJcDJhci1DTVVtbjk4L2VkaXQiCiAgICAgICAgICAgICkKICAgICAgICAgICAgYnRucyA9IHRlbXBsYXRlcy5CdXR0b25UZW1wbGF0ZSgKICAgICAgICAgICAgICAgIHRleHQgPSAiTnVvcm9kYSDEryBEVUsgYXBpZSBMU1AiLAogICAgICAgICAgICAgICAgYnV0dG9ucyA9IFtidG4xXQogICAgICAgICAgICApCiAgICAgICAgICAgIHByaW50KHNlbGYuc2VuZChidG5zLnRvX2RpY3QoKSwiUkVTUE9OU0UiKSkKICAgICAgICBpZiAiQXBlbGlhY2lqb3MiID09IHBheWxvYWQ6CiAgICAgICAgICAgIGJ0bjEgPSBlbGVtZW50cy5CdXR0b24oCiAgICAgICAgICAgIGJ1dHRvbl90eXBlID0gIndlYl91cmwiLAogICAgICAgICAgICB0aXRsZT0iQXRzYWt5bWFpIiwgCiAgICAgICAgICAgIHVybD0iaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xZV8xalNzZGpsZm9JWUpySXVDWkVMSlgwbnY0RjVJSXAyYXItQ01VbW45OC9lZGl0IgogICAgICAgICAgICApCiAgICAgICAgICAgIGJ0bnMgPSB0ZW1wbGF0ZXMuQnV0dG9uVGVtcGxhdGUoCiAgICAgICAgICAgICAgICB0ZXh0ID0gIk51b3JvZGEgxK8gRFVLIGFwaWUgQXBlbGlhY2lqYXMgYmVpIHNrdW5kdXMiLAogICAgICAgICAgICAgICAgYnV0dG9ucyA9IFtidG4xXQogICAgICAgICAgICApCiAgICAgICAgICAgIHByaW50KHNlbGYuc2VuZChidG5zLnRvX2RpY3QoKSwiUkVTUE9OU0UiKSkKCiAgICBkZWYgb3B0aW4oc2VsZiwgbWVzc2FnZSk6CiAgICAgICAgcGFzcwoKICAgIGRlZiBpbml0X2JvdChzZWxmKToKICAgICAgICBncmVldGluZ190ZXh0ID0gR3JlZXRpbmdUZXh0KCJWVSBTQSBNSUYga29uc3VsdGF2aW1hcyIpCiAgICAgICAgbWVzc2VuZ2VyX3Byb2ZpbGUgPSBNZXNzZW5nZXJQcm9maWxlKGdyZWV0aW5ncz1bZ3JlZXRpbmdfdGV4dF0pCiAgICAgICAgbWVzc2VuZ2VyLnNldF9tZXNzZW5nZXJfcHJvZmlsZShtZXNzZW5nZXJfcHJvZmlsZS50b19kaWN0KCkpCgogICAgICAgIGdldF9zdGFydGVkID0gR2V0U3RhcnRlZEJ1dHRvbihwYXlsb2FkPSJzdGFydCIpCgogICAgICAgIG1lc3Nlbmdlcl9wcm9maWxlID0gTWVzc2VuZ2VyUHJvZmlsZShnZXRfc3RhcnRlZD1nZXRfc3RhcnRlZCkKICAgICAgICBtZXNzZW5nZXIuc2V0X21lc3Nlbmdlcl9wcm9maWxlKG1lc3Nlbmdlcl9wcm9maWxlLnRvX2RpY3QoKSkKCgphcHAgPSBGbGFzayhfX25hbWVfXykKYXBwLmRlYnVnID0gVHJ1ZQptZXNzZW5nZXIgPSBNZXNzZW5nZXIoQUNDRVNTX1RPS0VOKQoKCkBhcHAucm91dGUoIi8iLCBtZXRob2RzPVsiR0VUIiwgIlBPU1QiXSkKZGVmIHdlYmhvb2soKToKICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICJHRVQiOgogICAgICAgIGlmIHJlcXVlc3QuYXJncy5nZXQoImh1Yi52ZXJpZnlfdG9rZW4iKSA9PSBWRVJJRllfVE9LRU46CiAgICAgICAgICAgIG1lc3Nlbmdlci5pbml0X2JvdCgpCiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0LmFyZ3MuZ2V0KCJodWIuY2hhbGxlbmdlIikKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJGQl9WRVJJRllfVE9LRU4gZG9lcyBub3QgbWF0Y2guIikKICAgIGVsaWYgcmVxdWVzdC5tZXRob2QgPT0gIlBPU1QiOgogICAgICAgIG1lc3Nlbmdlci5oYW5kbGUocmVxdWVzdC5nZXRfanNvbihmb3JjZT1UcnVlKSkKICAgIHJldHVybiAiIgoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBhcHAucnVuKGhvc3Q9IjAuMC4wLjAiKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBlbGVtID0gZWxlbWVudHMuVGV4dCgiU3ZlaWtpLCBub3LEl2RhbWkgcGFzaW5hdWRvdGkgVlUgU0EgTUlGIERVSyBza2lsdGltaSwgcGFzaXJpbmtpdGUgdmllbsSFIGnFoSDFvmVtaWF1IHBhdGVpa3TFsyB0ZW3Fsywga2l0dSBhdHZlanUgdcW+ZHVva2l0ZSBzYXZvIGtsYXVzaW3EhS4iKQogICAgICAgICAgICBzZWxmLnNlbmQoZWxlbS50b19kaWN0KCksIlJFU1BPTlNFIikKICAgICAgICAgICAgYnRuMSA9IGVsZW1lbnRzLkJ1dHRvbihidXR0b25fdHlwZSA9ICJwb3N0YmFjayIsIHRpdGxlPSJWVSBTQStMU1ArQXBlbGlhY2lqb3MiLCBwYXlsb2FkPSJWVSBTQStMU1ArQXBlbGlhY2lqb3MiKQogICAgICAgICAgICBidG4yID0gZWxlbWVudHMuQnV0dG9uKGJ1dHRvbl90eXBlID0gInBvc3RiYWNrIiwgdGl0bGU9IkJVUytQRCIsIHBheWxvYWQ9IkJVUytQRCIpCjx8ZmltX2VuZHw+"]
["6e7f71e47be45df5eacaf19db8a2ef047d388cdd-1","6e7f71e47be45df5eacaf19db8a2ef047d388cdd","PHxmaW1fcHJlZml4fD4K77u/CiMgU3RhbmRhcmQgTGlicmFyeSBpbXBvcnRzCmltcG9ydCBhcnJvdwpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQpmcm9tIGl0ZXJ0b29scyBpbXBvcnQgY3ljbGUKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBwcHJpbnQgaW1wb3J0IHBwcmludCBhcyBwcAppbXBvcnQgc3RhdGlzdGljcwppbXBvcnQgc3lzCmltcG9ydCB0aW1lCgojIFRoaXJkIHBhcnR5IGltcG9ydHMKaW1wb3J0IG1hdHBsb3RsaWIKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgbWF0cGxvdGxpYi50aWNrZXIgYXMgdGlja2VyCmltcG9ydCBtYXRwbG90bGliLmRhdGVzIGFzIGRhdGVzCgojIExvYWQgQXBwbGljYXRpb24gaW1wb3J0cwpmcm9tIGRteXBsYW50Mi5kUmVsaWFiaWxpdHkgaW1wb3J0IGRlbW9uc3RyYXRlZF9yZWxpYWJpbGl0eV9zcgoKCmRlZiBpZHgobiwgcywgZSwgeCk6CiAgICByZXR1cm4gaW50KG4gKiAoeCAtIHMpIC8gKGUgLSBzKSsxKQoKCmRlZiBkZW1vbnN0cmF0ZWRfUmVsaWFiaWxsaXR5X1Bsb3QodmwsIGJldGE9MS4yMSwgVD0zMDAwMCwgcz0xMDAwLCBmdD1wZC5EYXRhRnJhbWUsIGNsPVsxMCwgNTAsIDkwXSwgeG1pbj1Ob25lLCB4bWF4PU5vbmUsIGZhY3Rvcj0yLjAsIHltYXg9MjQwMDApOgoKICAgICMgZGVmaW5lIG1pbGVzdG9uZXMKICAgIHN0YXJ0X3RzID0gdmwudmFsc3RhcnRfdHMgaWYgeG1pbiA9PSBOb25lIGVsc2UgeG1pbiAgIyB2YWwgc3RhcnQKCiAgICAjIHRoZSBlbmQgb2YgdGhlIFBsb3R0aW5nIGludGVydmFsCiAgICBpZiB4bWF4OgogICAgICAgIGxhc3RfdHMgPSB4bWF4CiAgICBlbHNlOgogICAgICAgIGlmIGZhY3RvcjoKICAgICAgICAgICAgZmFjdG9yID0gbWF4KGZhY3RvciwgMS4wKSAgIyBubyBmYWN0b3IgPCAxLjAgYWxsb3dlZAogICAgICAgICAgICBlbGFwc2VkID0gdmwubm93X3RzIC0gc3RhcnRfdHMKICAgICAgICAgICAgbGFzdF90cyA9IHN0YXJ0X3RzICsgZmFjdG9yICogZWxhcHNlZAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkVycm9yIGluIHRpbWVyYW5nZSBzcGVjaWZpY2F0aW9uLiIpCgogICAgZmNvbCA9ICdncmV5JwoKICAgICMgY2FsY3VsYXRlIHRoZSB4IGF4aXMgdGltZXJhbmdlIGZpcnN0CiAgICB0ciA9IGRlbW9uc3RyYXRlZF9yZWxpYWJpbGl0eV9zcih2bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3RzLCBsYXN0X3RzLCBiZXRhPWJldGEsIHNpemU9cywgZnQ9ZnQpWzBdICAjIHRpbWVzdGFtcCB4IGF4aXMgc3RhcnQgLi4gZW5kCgogICAgIyBkZXRlcm1pbmUgdGhlIGFycmF5IC0gaW5kZXggb2YgJ25vdycKICAgIG5faSA9IGlkeChzLCBzdGFydF90cywgbGFzdF90cywgdmwubm93X3RzKQoKICAgICMgY3JlYXRlIFRpbWVyb3cgZnJvbSBTdGFydCB0byAnbm93JwogICAgbl90ciA9IHRyWzA6bl9pOjFdCgogICAgIyBjb252ZXJ0IHRvIGRhdGV0aW1lIGRhdGVzIC0gc3RhcnQgLi4gbGFzdAogICAgZHRyID0gW2RhdGV0aW1lLmZyb210aW1lc3RhbXAodCkgZm9yIHQgaW4gdHJdCiAgICAjIGNhbGN1bGF0ZSBkZW1vbnN0cmF0ZWQgcmVsaWFiaWxpdHkgY3VydmVzIGZvciB0aGUgY29tcGxldGUgcGVyaW9kLAogICAgIyBjb25maWRlbmNlIGludGVydmFscyBDTCA6CiAgICByZWwgPSB7YzogZGVtb25zdHJhdGVkX3JlbGlhYmlsaXR5X3NyKHZsLCBzdGFydF90cywgbGFzdF90cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0w9Yy8xMDAuMCwgYmV0YT1iZXRhLCBzaXplPXMsIGZ0PWZ0LCBUPVQpWzFdIGZvciBjIGluIGNsfQoKICAgICMgY29udmVydCB0byBkYXRldGltZSBkYXRlcyAtIHN0YXJ0IC4uIG5vdwogICAgbl9kdHIgPSBbZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCh0KSBmb3IgdCBpbiBuX3RyXQogICAgIyBjb3B5IGRlbW9udHJhdGVkIHJlbGlhYmlsaXR5IHZhbHVlcyBmb3IgdGhlIHZhbGlkYXRpb24gcGVyaW9kIHVwIHRvIG5vdzoKICAgIG5fcmVsID0ge2M6IHJlbFtjXVswOm5faToxXSBmb3IgYyBpbiBjbH0KCiAgICAjIGRlZmluZSB0aGUgUExPVAogICAgZmlnLCBheDEgPSBwbHQuc3VicGxvdHMoICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtdmFyaWFibGUKICAgICAgICBmaWdzaXplPSgxMiwgOCksIGNvbnN0cmFpbmVkX2xheW91dD1UcnVlKQogICAgI2ZpZywgKGF4MSwgYXgzKSA9IHBsdC5zdWJwbG90cygyLCBmaWdzaXplPSg2LCA2KSkKCiAgICBjb2xvciA9ICd0YWI6cmVkJwogICAgYXgxLnNldF94bGFiZWwoJ2RhdGUnKQogICAgYXgxLnNldF95bGFiZWwoJ0RlbW9uc3RyYXRlZCBSZWxpYWJpbGl0eSBbJV0nLCBjb2xvcj1jb2xvcikKICAgIGF4MS5zZXRfdGl0bGUoJ0RlbW9uc3RyYXRlZCBSZWxpYWJpbGl0eSBbJV0nKQoKICAgICMgbm93IHBsb3QgdGhlIGRlbW9uc3RyYXRlZCByZWxpYWJpbGl0eSBjdXJ2ZXM6CiAgICBmb3IgQ0wgaW4gY2w6CiAgICAgICAgIyBjb21wbGV0ZSBpbnRlcnZhbCBpbiBjb2xvciBmY2FsCiAgICAgICAgYXgxLnBsb3QoZHRyLCByZWxbQ0xdLCBjb2xvcj1mY29sLCBsaW5lc3R5bGU9Jy0nLCBsaW5ld2lkdGg9MC41KQogICAgICAgICMgdGhlIGN1cnJlbnQgdmFsaWRhdGlvbiBpbnRlcnZhbCBpbiBtdWx0aXBsZSBjb2xvcnMKICAgICAgICBheDEucGxvdChuX2R0ciwgbl9yZWxbQ0xdLCBjb2xvcj0ncmVkJywgbGluZXN0eWxlPSctJywgbGluZXdpZHRoPTAuNykKCiAgICAjIGRlZmluZSB0aGUgYXhpcyB0aWNrcwogICAgYXgxLnRpY2tfcGFyYW1zKGF4aXM9J3knLCBsYWJlbGNvbG9yPWNvbG9yKQoKICAgICMgYW5kIHRoZSBheGlzIHNjYWxlcwogICAgYXgxLmF4aXMoKGRhdGV0aW1lLmZyb210aW1lc3RhbXAoc3RhcnRfdHMpLAogICAgICAgICAgICAgIGRhdGV0aW1lLmZyb210aW1lc3RhbXAobGFzdF90cyksIDAsIDEwMCkpCgogICAgIyBkZWZpbmUgYXhpcyBpbnRlcnZhbHMgeSAuLi4KICAgIGF4MS55YXhpcy5zZXRfbWFqb3JfbG9jYXRvcih0aWNrZXIuTGluZWFyTG9jYXRvcigxMykpCgogICAgIyBhbmQgeCAtIGF4aXMKICAgIGxvY2F0b3IgPSBkYXRlcy5BdXRvRGF0ZUxvY2F0b3IoKQogICAgbG9jYXRvci5pbnRlcnZhbGRbZGF0ZXMuTU9OVEhMWV0gPSBbMV0KICAgIGF4MS54YXhpcy5zZXRfbWFqb3JfbG9jYXRvcihsb2NhdG9yKQoKICAgICMgc2hvdyBhIGdyaWQKICAgIGF4MS5ncmlkKGNvbG9yPSdsaWdodGdyZXknKQoKICAgICMgaW5zdGFudGlhdGUgYSBzZWNvbmQgYXhlcyB0aGF0IHNoYXJlcyB0aGUgc2FtZSB4LWF4aXMKICAgIGF4MiA9IGF4MS50d2lueCgpCiAgICBheDIuYXhpcygoZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChzdGFydF90cyksCiAgICAgICAgICAgICAgZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChsYXN0X3RzKSwgMCwgeW1heCkpCiAgICBjb2xvciA9ICd0YWI6Ymx1ZScKICAgICMgdGhlIHgtbGFiZWwgd2FzIGhhbmRsZWQgd2l0aCBheDEKICAgIGF4Mi5zZXRfeWxhYmVsKCdob3VycyBbaF0nLCBjb2xvcj1jb2xvcikKICAgIGF4Mi50aWNrX3BhcmFtcyhheGlzPSd5JywgbGFiZWxjb2xvcj1jb2xvcikKICAgIGF4Mi55YXhpcy5zZXRfbWFqb3JfbG9jYXRvcih0aWNrZXIuTGluZWFyTG9jYXRvcigxMykpCgogICAgIyBhbmQgcGxvdCB0aGUgbGluZWFyaXplZCBlbmdpbmUgcnVudGltZSBsaW5lcyB2cyB0aGUgMm5kIGF4aXMKICAgIGZvciBlIGluIHZsLmVuZ2luZXNbOl06CiAgICAgICAgI3ByaW50KGUuTmFtZSwgZS5fZFsnRW5naW5lIElEJ10sIGUuX2RbJ3ZhbCBzdGFydCddLCBlLl9kWydvcGggcGFydHMnXSkKICAgICAgICAjIGNvbXBsZXRlIGludGVydmFsIGluIGNvbG9yIGZjYWwKICAgICAgICB5ID0gW2Uub3BoKHQpIGZvciB0IGluIHRyXQogICAgICAgIGF4Mi5wbG90KGR0ciwgeSwgbGluZXdpZHRoPTAuNSwgY29sb3I9ZmNvbCkKICAgICAgICAjIHRoZSBjdXJyZW50IHZhbGlkYXRpb24gaW50ZXJ2YWwgaW4gbXVsdGlwbGUgY29sb3JzCiAgICAgICAgbl95ID0gW2Uub3BoKHQpIGZvciB0IGluIG5fdHJdCiAgICAgICAgYXgyLnBsb3Qobl9kdHIsIG5feSwgbGFiZWw9ZiJ7ZS5OYW1lfSB7ZS5fZFsnRW5naW5lIElEJ119IikKCiAgICAjIE5PVyBwbG90IHNvbWUgT3JpZW50YXRpb24gTGluZXMgYW5kIFRlc3QgaW50byB0aGUgUGxvdAoKICAgICMgcG9zc2libGUgcnVudGltZSBsaW5lCiAgICB5ID0gWyh0LXN0YXJ0X3RzKSAvIDM2MDAuMCBmb3IgdCBpbiB0cl0KICAgIGF4Mi5wbG90KGR0ciwgeSwgY29sb3I9J2dyZXknLCBsaW5lc3R5bGU9Jy0tJywgbGluZXdpZHRoPTAuNykKCiAgICAjIHRvZGF5IGxpbmUKICAgIGF4MS5heHZsaW5lKGRhdGV0aW1lLm5vdygpLCBjb2xvcj0ncmVkJywKICAgICAgICAgICAgICAgIGxpbmVzdHlsZT0nLS0nLCBsaW5ld2lkdGg9MC43KQoKICAgICMgUG9pbnQgb2YgZGVtb25zdHJhdGVkIHJlbGlhYmlsaXR5IGF0CiAgICAjIGhpZ2hlc3QgQ29uZmlkZW5jZSBMZXZlbCwgdG9kYXkKICAgIG15cmVsX3kgPSBmbG9hdCgKICAgICAgICByZWxbbWF4KGNsKV1baW50KCh2bC5ub3dfdHMtc3RhcnRfdHMpLyhsYXN0X3RzIC0gc3RhcnRfdHMpKnMtMSldKQogICAgbXlyZWxfeCA9IGRhdGV0aW1lLmZyb210aW1lc3RhbXAodmwubm93X3RzKQogICAgYXgxLnNjYXR0ZXIobXlyZWxfeCwgbXlyZWxfeSwgbWFya2VyPSdvJywgY29sb3I9J2JsYWNrJywgbGFiZWw9J3BvaW50JykKICAgIHR4dCA9IGYiQ0wge21heChjbCl9JUB7VH1cbmJldGE9e2JldGF9XG5SPXtteXJlbF95Oi4xZn0lIgoKICAgICMgc29tZSBzdGF0aXN0aWNhbCBJbmZvcm1hdGlvbi4KICAgIG15cmVsX3R4dF94ID0gZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCh2bC5ub3dfdHMgKyAyMDAwMDApCiAgICBheDEudGV4dChteXJlbF90eHRfeCwgbXlyZWxfeSAtIDksIHR4dCkKICAgIGF4MS5heGlzKChkYXRldGltZS5mcm9tdGltZXN0YW1wKHN0YXJ0X3RzKSwKICAgICAgICAgICAgICBkYXRldGltZS5mcm9tdGltZXN0YW1wKGxhc3RfdHMpLCAwLCAxMjApKQogICAgIyBvcGggRmxlZXQgTGVhZGVyCiAgICBmbCA9IFtlLm9waDIodmwubm93X3RzKSBmb3IgZSBpbiB2bC5lbmdpbmVzXQogICAgZmxfcG9pbnRfeCA9IGRhdGV0aW1lLmZyb210aW1lc3RhbXAodmwubm93X3RzKQogICAgYXgyLnNjYXR0ZXIoZmxfcG9pbnRfeCwgbWF4KGZsKSwgbWFya2VyPSdvJywgY29sb3I9J2JsYWNrJywgbGFiZWw9J3BvaW50JykKICAgIGZsX3R4dF94ID0gZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCh2bC5ub3dfdHMgKyAyMDAwMDApCiAgICB0eHQgPSBmJ3tsZW4oZmwpfSBlbmdpbmVzXG5tYXgge21heChmbCk6LjBmfWhcbmN1bSB7c3VtKGZsKTouMGZ9aFxuYXZnIHtzdGF0aXN0aWNzLm1lYW4oZmwpOi4wZn1oXG57YXJyb3cubm93KCJFdXJvcGUvVmllbm5hIikuZm9ybWF0KCJERC5NTS5ZWVlZIEhIOm1tIil9JwogICAgYXgyLnRleHQoZmxfdHh0X3gsIG1heChmbCkgLSBULzcsIHR4dCkKCiAgICAjIGRlZiBvbl9wbG90X2hvdmVyKGV2ZW50KToKICAgICMgICAgICMgSXRlcmF0aW5nIG92ZXIgZWFjaCBkYXRhIG1lbWJlciBwbG90dGVkCiAgICAjICAgICBmb3IgY3VydmUgaW4gYXgyLmdldF9saW5lcygpOgogICAgIyAgICAgICAgICMgU2VhcmNoaW5nIHdoaWNoIGRhdGEgbWVtYmVyIGNvcnJlc3BvbmRzIHRvIGN1cnJlbnQgbW91c2UgcG9zaXRpb24KICAgICMgICAgICAgICBpZiBjdXJ2ZS5jb250YWlucyhldmVudClbMF06CiAgICAjICAgICAgICAgICAgIHByaW50KCJvdmVyICVzIiAlIGN1cnZlLmdldF9naWQoKSkKCiAgICAjIHBsdC5sZWdlbmQoKQogICAgI2ZpZy5jYW52YXMubXBsX2Nvbm5lY3QoJ21vdGlvbl9ub3RpZnlfZXZlbnQnLCBvbl9wbG90X2hvdmVyKQoKICAgICMgVEFUQUFBQUghCiAgICBwbHQuc2hvdygpCgoKZGVmIGNoYXJ0KGQsIHlzKToKICAgIGZpZywgYXggPSBwbHQuc3VicGxvdHMoZmlnc2l6ZT0oMjAsIDEyKSkKCiAgICBheGVzID0gW2F4XQogICAgZm9yIHkgaW4geXNbMTpdOgogICAgICAgICMgVHdpbiB0aGUgeC1heGlzIHR3aWNlIHRvIG1ha2UgaW5kZXBlbmRlbnQgeS1heGVzLgogICAgICAgIGF4ZXMuYXBwZW5kKGF4LnR3aW54KCkpCgogICAgZXh0cmFfeXMgPSBsZW4oYXhlc1syOl0pCgogICAgIyBNYWtlIHNvbWUgc3BhY2Ugb24gdGhlIHJpZ2h0IHNpZGUgZm9yIHRoZSBleHRyYSB5LWF4ZXMuCiAgICBpZiBleHRyYV95cyA+IDA6CiAgICAgICAgdGVtcCA9IDAuOTUKICAgICAgICBpZiBleHRyYV95cyA8PSAyOgogICAgICAgICAgICB0ZW1wID0gMC44NQogICAgICAgIGVsaWYgZXh0cmFfeXMgPD0gNDoKICAgICAgICAgICAgdGVtcCA9IDAuNjAKICAgICAgICBpZiBleHRyYV95cyA+IDU6CiAgICAgICAgICAgIHByaW50KCd5b3UgYXJlIGJlaW5nIHJpZGljdWxvdXMnKQogICAgICAgIGZpZy5zdWJwbG90c19hZGp1c3QocmlnaHQ9dGVtcCkKICAgICAgICByaWdodF9hZGRpdGl2ZSA9ICgwLjk4LXRlbXApL2Zsb2F0KGV4dHJhX3lzKQogICAgIyBNb3ZlIHRoZSBsYXN0IHktYXhpcyBzcGluZSBvdmVyIHRvIHRoZSByaWdodCBieSB4JSBvZiB0aGUgd2lkdGggb2YgdGhlIGF4ZXMKICAgIGkgPSAxLgogICAgZm9yIGF4IGluIGF4ZXNbMjpdOgogICAgICAgIGF4LnNwaW5lc1sncmlnaHQnXS5zZXRfcG9zaXRpb24oKCdheGVzJywgMS4rcmlnaHRfYWRkaXRpdmUqaSkpCiAgICAgICAgYXguc2V0X2ZyYW1lX29uKFRydWUpCiAgICAgICAgYXgucGF0Y2guc2V0X3Zpc2libGUoRmFsc2UpCiAgICAgICAgYXgueWF4aXMuc2V0X21ham9yX2Zvcm1hdHRlcihtYXRwbG90bGliLnRpY2tlci5TY2FsYXJGb3JtYXR0ZXIoKSkKICAgICAgICBpICs9IDEuCiAgICAjIFRvIG1ha2UgdGhlIGJvcmRlciBvZiB0aGUgcmlnaHQtbW9zdCBheGlzIHZpc2libGUsIHdlIG5lZWQgdG8gdHVybiB0aGUgZnJhbWUKICAgICMgb24uIFRoaXMgaGlkZXMgdGhlIG90aGVyIHBsb3RzLCBob3dldmVyLCBzbyB3ZSBuZWVkIHRvIHR1cm4gaXRzIGZpbGwgb2ZmLgoKICAgIGNvbHMgPSBbXQogICAgbGluZXMgPSBbXQogICAgbGluZV9zdHlsZXMgPSBjeWNsZShbJy0nLCAnLScsICctJywgJy0tJywgJy0uJywgJzonLCAnLicsICcsJywgJ28nLCAndicsICdeJywgJzwnLCAnPicsCiAgICAgICAgICAgICAgICAgICAgICAgICAnMScsICcyJywgJzMnLCAnNCcsICdzJywgJ3AnLCAnKicsICdoJywgJ0gnLCAnKycsICd4JywgJ0QnLCAnZCcsICd8JywgJ18nXSkKICAgIGNvbG9ycyA9IGN5Y2xlKG1hdHBsb3RsaWIucmNQYXJhbXNbJ2F4ZXMucHJvcF9jeWNsZSddKQogICAgZm9yIGF4LCB5IGluIHppcChheGVzLCB5cyk6CiAgICAgICAgbHMgPSBuZXh0KGN5Y2xlKGxpbmVfc3R5bGVzKSkKICAgICAgICBpZiBsZW4oeSkgPT0gMToKICAgICAgICAgICAgY29sID0geVswXQogICAgICAgICAgICBjb2xzLmFwcGVuZChjb2wpCiAgICAgICAgICAgIGNvbG9yID0gbmV4dChjeWNsZShjb2xvcnMpKVsnY29sb3InXQogICAgICAgICAgICBsaW5lcy5hcHBlbmQoYXgucGxvdChkW2NvbF0sIGxpbmVzdHlsZT1scywgbGFiZWw9Y29sLCBjb2xvcj1jb2xvcikpCgogICAgICAgICAgICBheC5zZXRfeWxhYmVsKGNvbCwgY29sb3I9Y29sb3IpCiAgICAgICAgICAgIGF4LnRpY2tfcGFyYW1zKGF4aXM9J3knLCBjb2xvcnM9Y29sb3IpCjx8ZmltX2hvbGV8PgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGZvciBjb2wgaW4geToKICAgICAgICAgICAgICAgIGNvbG9yID0gbmV4dChjeWNsZShjb2xvcnMpKVsnY29sb3InXQogICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgIGF4LnBsb3QoZFtjb2xdLCBsaW5lc3R5bGU9bHMsIGxhYmVsPWNvbCwgY29sb3I9Y29sb3IpKQogICAgICAgICAgICAgICAgY29scy5hcHBlbmQoY29sKQogICAgICAgICAgICBheC5zZXRfeWxhYmVsKCcsICcuam9pbih5KSkKICAgICAgICAgICAgYXgudGlja19wYXJhbXMoYXhpcz0neScpCiAgICBheGVzWzBdLnNldF94bGFiZWwoZC5pbmRleC5uYW1lKQogICAgbG5zID0gbGluZXNbMF0KICAgIGZvciBsIGluIGxpbmVzWzE6XToKICAgICAgICBsbnMgKz0gbAogICAgbGFicyA9IFtsLmdldF9sYWJlbCgpIGZvciBsIGluIGxuc10KICAgIGF4ZXNbMF0ubGVnZW5kKGxucywgbGFicywgbG9jPTApCgogICAgcGx0LnNob3coKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBwYXNzCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGF4LnNwaW5lc1sncmlnaHQnXS5zZXRfY29sb3IoY29sb3IpCjx8ZmltX2VuZHw+"]
["e91acf845c0f28007e12cf7338cfa2c2e0a0d6d8-5","e91acf845c0f28007e12cf7338cfa2c2e0a0d6d8","PHxmaW1fcHJlZml4fD4KIiIiClN1cGVyY2xhc3MgZm9yIHJlY2VpdmVyIGZyb250IGVuZHMKIiIiCmltcG9ydCBsb2dnaW5nCgppbXBvcnQgTW9uaXRvckNvbnRyb2wgYXMgTUMKPHxmaW1faG9sZXw+CiAgIiIiCiAgRGV2aWNlIHdoaWNoIGNvbnZlcnRzIEVNIHJhZGlhdGlvbiB0byBlbGVjdHJpY2FsIHNpZ25hbHMuCgogIFRoaXMgaXMgdGhlIHN1cGVyY2xhc3MgZm9yIGFsbCBmcm9udCBlbmQgaW1wbGVtZW50YXRpb25zCgogIEVhY2ggUkYgYmFuZCAoTCwgUywgWCwgS3UsIEssIEthLCBRKSBpcyBoYW5kbGVkIGJ5IGEgc2VwYXJhdGUgZnJvbnQgZW5kLgogIFRoZSBiYW5kcyBhcmUgZGVmaW5lZCBpbiBzaWduYWxfcHJvcGVydHlbImJhbmQiXSBpbiB0aGUgTW9uaXRvckNvbnRyb2wKICBtb2R1bGUuCgogIEZvciBtdWx0aS1mZWVkIGZyb250IGVuZHMsIGEgY2hhbm5lbCBpcyBhc3NpZ25lZCB0byBlYWNoIGZlZWQuIEVhY2ggZnJvbnQKICBlbmQgb3IgZnJvbnQgZW5kIGNoYW5uZWwgbWF5IHB1dCBvdXQgb25lIG9yIHR3byBvcnRob2dvbmFsIHBvbGFyaXphdGlvbnMsCiAgTCBhbmQgUiBvciBYIGFuZCBZIG9yIEggYW5kIFYgLlRoZSBwb2xhcml6YXRpb25zIGFyZSBkZWZpbmVkIGluCiAgc2lnbmFsX3Byb3BlcnR5WyJwb2xfdHlwZSJdIGluIHRoZSBNb25pdG9yQ29udHJvbCBtb2R1bGUuCgogIFRoZSBpbnB1dCBjaGFubmVscyBoYW5kbGUgQmVhbSBjbGFzcyBzaWduYWxzLCB0aGF0IGlzLCBhIHNpZ25hbCBpbiB3aGljaAogIGJvdGggcG9sYXJpemF0aW9ucyBhcmUgcHJlc2VudC4gVGhlIG91dHB1dCBjaGFubmVscyBwcm92aWRlCiAgQ29tcGxleFNpZ25hbCBjbGFzcyBzaWduYWxzLCB0aGF0IGlzLCB0d28gZmx1Y3R1YXRpbmcgdm9sdGFnZXMgd2hvc2UKICBmcmVxdWVuY3kgY29tcG9uZW50cyBhcmUgOTAgZGVnIGFwYXJ0IChpbiBxdWFkcmF0dXJlIHBoYXNlKS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgaW5wdXRzPU5vbmUsIG91dHB1dF9uYW1lcz1Ob25lLCBhY3RpdmU9VHJ1ZSk6CiAgICAiIiIKICAgIENyZWF0ZXMgYSBGcm9udEVuZCBvYmplY3QKCiAgICBJbiBnZW5lcmFsLCBhIEZyb250RW5kIG9iamVjdCB3aWxsIGhhdmUgb25lIGlucHV0IGFuZCB0d28gb3V0cHV0cwogICAgYnV0IGZvciBhIG11bHRpLWZlZWQgZnJvbnQgZW5kLCBpZiBlYWNoIGZlZWQgcHJvZHVjZXMgdHdvIHBvbHMsIGFuZCB0aGUKICAgIGltcGxpY2l0IHBvbGFyaXphdGlvbiBlbmNvZGluZyBpcyB1c2VkLCBlYWNoIG91dHB1dCBwYWlyIGZvciBhIGdpdmVuIGZlZWQKICAgIGlzIGEgbGlzdC4gIEZvciBwb2xzX291dCBpdCBpcyBhIGxpc3Qgb2YgbGlzdHMgZGljdHMgYW5kIGZvcgogICAgb3V0cHV0X25hbWVzIGl0IGlzIGEgbGlzdCBvZiBsaXN0IG9mIHN0ci4KICAgIAogICAgQHBhcmFtIG5hbWUgOiB1bmlxdWUgbmFtZSB0byBpZGVudGlmeSB0aGlzIGluc3RhbmNlCiAgICBAdHlwZSAgbmFtZSA6IHN0cgoKICAgIEBwYXJhbSBpbnB1dHMgOiB1cHN0cmVhbSBQb3J0IG9iamVjdHMgcHJvdmlkaW5nIHRoZSBzaWduYWxzCiAgICBAdHlwZSAgaW5wdXRzIDogZGljdCBvZiBQb3J0IGluc3RhbmNlcwoKICAgIEBwYXJhbSBiYW5kIDogb3B0aW9uYWwgd2F2ZWd1aWRlIGJhbmQgaW4gd2hpY2ggdGhlIGZyb250IGVuZCBvcGVyYXRlcy4KICAgIEB0eXBlICBiYW5kIDogc3RyCgogICAgQHBhcmFtIHBvbHNfb3V0IDogb3B0aW9uYWwgcG9sYXJpemF0aW9uIHNwZWMgZm9yIHRoZSBvdXRwdXRzIChzZWUgZG9jc3RyKQogICAgQHR5cGUgIHBvbHNfb3V0IDogZGljdCBvZiBzdHIKICAgIAogICAgQHBhcmFtIG91dHB1dF9uYW1lcyA6IG9wdGlvbmFsIG5hbWVzIHRvIGJlIGFzc2lnbmVkIHRvIG91dHB1dCBwb3J0cwogICAgQHR5cGUgIG91dHB1dF9uYW1lcyA6IGxpc3Qgb2Ygc3RyCgogICAgQHBhcmFtIGFjdGl2ZSA6IFRydWUgaXMgdGhlIEZyb250RW5kIGluc3RhbmNlIGlzIGZ1bmN0aW9uYWwKICAgIEB0eXBlICBhY3RpdmUgOiBib29sCiAgICAiIiIKICAgIG15bG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIobW9kdWxlX2xvZ2dlci5uYW1lKyIuRnJvbnRFbmQiKQogICAgIyBpbml0aWFsaXplIHRoZSBzdXBlcmNsYXNzCiAgICBNQy5EZXZpY2UuX19pbml0X18oc2VsZiwgbmFtZSwgaW5wdXRzPWlucHV0cywKICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfbmFtZXM9b3V0cHV0X25hbWVzLCBhY3RpdmU9YWN0aXZlKQogICAgc2VsZi5sb2dnZXIgPSBteWxvZ2dlcgogICAgc2VsZi5uYW1lID0gbmFtZQogICAgc2VsZi5sb2dnZXIuZGVidWcoIiBpbml0aWFsaXplZCAgZm9yICVzIixzZWxmKQoKICBjbGFzcyBDaGFubmVsKE1DLkRldmljZSk6CiAgICAiIiIKICAgIFByb3ZpZGVzIG91dHB1dCBmcm9tIG9uZSBmZWVkCiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQsIG5hbWUsIGlucHV0cz1Ob25lLCBvdXRwdXRfbmFtZXM9Tm9uZSwKICAgICAgICAgICAgICAgICBhY3RpdmU9VHJ1ZSk6CiAgICAgICIiIgogICAgICBJbml0aWFsaXplIGEgRnJvbnRFbmQuQ2hhbm5lbAogICAgICAiIiIKICAgICAgc2VsZi5sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihwYXJlbnQubG9nZ2VyLm5hbWUrIi5DaGFubmVsIikKICAgICAgTUMuRGV2aWNlLl9faW5pdF9fKHNlbGYsIG5hbWUsIGlucHV0cz1pbnB1dHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X25hbWVzPW91dHB1dF9uYW1lcywgYWN0aXZlPWFjdGl2ZSkKICAgICAgc2VsZi5uYW1lPW5hbWUKICAgICAgc2VsZi5sb2dnZXIgPSBzZWxmLmxvZ2dlcgoKICBkZWYgc2V0X05EKHNlbGYpOgogICAgcGFzcwoKICBkZWYgc2V0X2NhbF9zaWduYWwoc2VsZik6CiAgICBwYXNzCjx8ZmltX3N1ZmZpeHw+Cgptb2R1bGVfbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgpjbGFzcyBGcm9udEVuZChNQy5EZXZpY2UpOgo8fGZpbV9lbmR8Pg=="]
["a390c230e350dd8659168b30a3bb0326b392a046-4","a390c230e350dd8659168b30a3bb0326b392a046","PHxmaW1fcHJlZml4fD4KIyAtLS0KIyBqdXB5dGVyOgojICAganVweXRleHQ6CiMgICAgIGZvcm1hdHM6IGlweW5iLHNjcmlwdHMvL3B5CiMgICAgIHRleHRfcmVwcmVzZW50YXRpb246CiMgICAgICAgZXh0ZW5zaW9uOiAucHkKIyAgICAgICBmb3JtYXRfbmFtZTogbGlnaHQKIyAgICAgICBmb3JtYXRfdmVyc2lvbjogJzEuNScKIyAgICAgICBqdXB5dGV4dF92ZXJzaW9uOiAxLjMuNAojICAga2VybmVsc3BlYzoKIyAgICAgZGlzcGxheV9uYW1lOiBQeXRob24gMwojICAgICBsYW5ndWFnZTogcHl0aG9uCiMgICAgIG5hbWU6IHB5dGhvbjMKIyAtLS0KPHxmaW1faG9sZXw+CgojICsKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gdHFkbSBpbXBvcnQgdHFkbQppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmZyb20gc2NyaXB0cyBpbXBvcnQgaXNpbmcKZnJvbSBzY3JpcHRzIGltcG9ydCB0b3JjaF9pc2luZwpmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUG9vbAoKIyAlbG9hZF9leHQgYXV0b3JlbG9hZAojICVhdXRvcmVsb2FkIDIKCiMgSW5zaWdodCBmcm9tIHVzaW5nIGZ1bGwgZW5lcmd5Cm5wLnNldGVycihvdmVyPSdyYWlzZScpCgoKIyAtCgojICMjIFNpbXBsZSBmaXJzdCBydW4KIwojIDEuIEluaWF0aWxpemUgTnhOIGdyaWQKIyAyLiBDb21wdXRlIHRoZSBpbml0aWFsIGVuZXJneSAkRSQKIyAzLiBGbGlwIHJhbmRvbSBzcGluIGFuZCBjb21wdXRlICRcRGVsdGEgRSQKIyA0LiBBY2NlcHQgb3IgcmVqZWN0IGJhc2VkIG9uIGNyaXRlcmlhCiMgNS4gQ29udGludWUgdG8gMwoKI0Bwcm9maWxlCmRlZiByYW5kb21faXgoTiwgc3RlcHMpOgogICAgcmFuZGl4ID0gKG5wLnJhbmRvbS5yYW5kaW50KDAsIE4sIHNpemU9KHN0ZXBzLDIpKSkKICAgIHJldHVybiByYW5kaXgKCgoKTiA9IDYwCmdyaWQgPSBpc2luZy5nZXRfcmFuZG9tX2dyaWQoTikKCgojICMjIFVzZSBweXRvcmNoIGNvbnZvbHV0aW9uCgojICsKZGVmIHNpbXVsYXRlX3RvcmNoKFQsZ3JpZCwgSixtdSxOLCB0aGVybV9zd2VlcHM9MTUwMCwgbWVhc3VyZV9zd2VlcHM9ODAwKToKICAgIGJldGEgPSAxL1QKCiAgICAjIFRoZXJtYWxpc2UgICAgCiAgICBtYXNrID0gdG9yY2hfaXNpbmcuZ2V0X2FuaXNvdHJvcGljX21hc2soSiwgbXUsIDAuOTgpCiAgICAjbWFzayA9IHRvcmNoX2lzaW5nLmdldF9kaWFnb25hbF9tYXNrKEosIG11KQogICAgY29udiA9IHRvcmNoX2lzaW5nLmdldF9jb252X3RvcmNoKG1hc2spCiAgICAKICAgIGZvciBpeCBpbiByYW5nZSg5KnRoZXJtX3N3ZWVwcyk6CiAgICAgICAgZ3JpZCwgZEUsIGRNID0gdG9yY2hfaXNpbmcubWV0cm9wX3N0ZXAoZ3JpZCwgY29udiwgYmV0YSkKICAgIAogICAgRSA9IFtpc2luZy5pc2luZ19lbmVyZ3koZ3JpZFswXVswXSwgSiwgbXUpLmNwdSgpLm51bXB5KCldCiAgICBNID0gW2dyaWQuc3VtKCkuY3B1KCkubnVtcHkoKV0KICAgICNncmlkID0gZ3JpZC5jcHUoKS5udW1weSgpWzAsMF0KICAgIGZvciBpeCBpbiByYW5nZSg5Km1lYXN1cmVfc3dlZXBzKToKICAgICAgICAjZEUgPSBpc2luZy5tZXRyb3Bfc3RlcChncmlkLCBpeCwgSiwgbXUsIGJldGEsIE4pCiAgICAgICAgZ3JpZCwgZEUsIGRNID0gdG9yY2hfaXNpbmcubWV0cm9wX3N0ZXAoZ3JpZCwgY29udiwgYmV0YSkKICAgICAgICBkRSA9IGRFIG9yIDAKICAgICAgICBFLmFwcGVuZCggRVstMV0gKyBkRSApCiAgICAgICAgTS5hcHBlbmQoIE1bLTFdICsgZE0gKQogICAgcmV0dXJuIEUsIE0sIGdyaWQKCmRlZiBzaW11bGF0ZV90b3JjaF9zZXEodGVtcHMsIGdyaWQsIEosIG11LCBOLCB0aGVybV9zd2VlcHM9MTUwMCwgbWVhc3VyZV9zd2VlcHM9ODAwKToKICAgIGVtID0gW10KICAgIGdyaWRzID0gW10KICAgIGZvciBUIGluIHRxZG0odGVtcHMpOgogICAgICAgIGE9IChULCBncmlkLCBKLG11LE4sIHRoZXJtX3N3ZWVwcywgbWVhc3VyZV9zd2VlcHMpCiAgICAgICAgRSwgTSwgZ3JpZCA9IHNpbXVsYXRlX3RvcmNoKCphKQogICAgICAgIGdyaWRzLmFwcGVuZChncmlkKQogICAgICAgIGVtLmFwcGVuZCgoRSxNKSkKICAgIHJldHVybiBlbSwgZ3JpZHMKCiMgKwpKID0gMC41Cm11ID0gMC4KCnRlbXBzID0gbnAubGluc3BhY2UoMC4wNSwgMywgMTUpCnRlbXBzID0gbnAuY29uY2F0ZW5hdGUoKHRlbXBzLCBucC5saW5zcGFjZSgwLjQ1LCAxLjMsIDMwKSkpCnRlbXBzID0gbnAuY29uY2F0ZW5hdGUoKHRlbXBzLCBucC5saW5zcGFjZSgwLjUsIDAuOCAsIDEwKSkpCnRlbXBzID0gbnAuc29ydCh0ZW1wcykKCmdyaWQgPSB0b3JjaF9pc2luZy5nZXRfcmFuZG9tX2dyaWQoTiwgZGV2aWNlPSdjcHUnKQpwb29sID0gUG9vbChwcm9jZXNzZXM9MikKdGhlcm1fc3dlZXBzID0gMjUwMAptZWFzdXJlX3N3ZWVwcyA9IDEyMDAKCmFyZ3MgPSBbKFQsIGdyaWQsIEosbXUsTix0aGVybV9zd2VlcHMsIG1lYXN1cmVfc3dlZXBzKSBmb3IgVCBpbiB0ZW1wc10KIyBUbyBydW4gaW4gcGFyYWxsZWwsIHVzZSBzLXRhcm1hcAojZW1zID0gcG9vbC5zdGFybWFwKHNpbXVsYXRlX3RvcmNoLCBhcmdzKQplbXMsIGdyaWRzID0gc2ltdWxhdGVfdG9yY2hfc2VxKHRlbXBzLCBncmlkLCBKLCBtdSwgTiwgdGhlcm1fc3dlZXBzLCBtZWFzdXJlX3N3ZWVwcykKZW5lZ190bSwgbWFnX3RtID0gemlwKCplbXMpCiMgLQoKIyBDbGVhciB0cWRtCmZvciBpbnN0YW5jZSBpbiBsaXN0KHRxZG0uX2luc3RhbmNlcyk6CiAgICB0cWRtLl9kZWNyX2luc3RhbmNlcyhpbnN0YW5jZSkKCiMgIyMgU2F2ZSBkYXRhIGZvciBsYXRlciBhbmFseXNpcyBhbmQgcGxvdHRpbmcKCiMgKwplbmVyZ2llcyA9IG5wLm1lYW4oZW5lZ190bSwgYXhpcz0xKQpoZWF0ID0gbnAuc3RkKGVuZWdfdG0sIGF4aXM9MSkKbWFnbmV0aXphdGlvbnMgPSBucC5tZWFuKG1hZ190bSwgYXhpcz0xKQpzdXNjID0gbnAuc3RkKG1hZ190bSwgYXhpcz0xKQphbiA9IC45NQpSID0gKDErYW4pLygxLWFuKQoKZXhwID0gewogICAgJ04nOk4KICAgICwnSic6SgogICAgLCdtdSc6bXUKICAgICwndGhlcm1fc3dlZXBzJzp0aGVybV9zd2VlcHMKICAgICwnbWVhc3VyZV9zd2VlcHMnOm1lYXN1cmVfc3dlZXBzCiAgICAsJ3RlbXBzJzogdGVtcHMKICAgICwnZW5lcmdpZXMnOmVuZXJnaWVzCiAgICAsJ21hZ24nOm1hZ25ldGl6YXRpb25zCiAgICAsJ2hlYXQnOmhlYXQKICAgICwnc3VzYyc6c3VzYwogICAgCiAgICAsJ2FuJzphbgogICAgCn0KCmZuID0gZicuLi9kYXRhL2V4cF9Oe059X3N3ZWVwe3RoZXJtX3N3ZWVwc31fbXV7bXV9X3RlbXAyX2FuaXNvdHIuOTgnCnByaW50KGZuKQpucC5zYXZlKGZuLCBleHApCiMgLQoKCnBsdC5wbG90KG1hZ190bVsyMF0pCgojIHNtb290aGluZwpwbHQucGxvdChucC5jb252b2x2ZShlbmVyZ2llcywgbnAub25lcygoTioqMiwpKS9OKioyLCBtb2RlPSd2YWxpZCcpKQoKbl8gPSAxMAphbiA9IC45NQpSID0gKDErYW4pLygxLWFuKQpwbHQudGl0bGUoZidKXCcvSj17UjouNH0gVD17dGVtcHNbbl9dOi4yfScpCnBsdC5pbXNob3coZ3JpZHNbbl9dWzAsMF0pCgpwbHQuc2F2ZWZpZyhmJy4uL2RhdGEvZmlndXJlcy9HcmlkX2FuaXNvdHJvcHl7YW59X1QuNTIucG5nJykKCiNncmlkID0gZ2V0X3JhbmRvbV9ncmlkKDUwKQptYXNrID0gdG9yY2hfaXNpbmcuZ2V0X2FuaXNvdHJvcGljX21hc2soSiwgbXUsIDAuNSkKcGx0Lmltc2hvdyhtYXNrLCBjb2xvcm1hcD0nZ3JheXNjYWxlJykKCgoKIyAjIyBVc2Ugc2ltcGxlIHNlcmlhbCBhbGdvcml0aG0KCiMgKwpKID0gMC41Cm11ID0gMAoKdGVtcHMgPSBucC5saW5zcGFjZSgwLjA1LCAzLCAxMDApCmVuZWdfdG0gPSBbXQptYWdfdG0gPSBbXQpmb3IgVCBpbiB0ZW1wczoKICAgIGJldGEgPSAxL1QKICAgIGdyaWQgPSBpc2luZy5nZXRfcmFuZG9tX2dyaWQoTikKICAgIAogICAgIyBUaGVybWFsaXNlICAgIAogICAgdGhlcm1fc3dlZXBzID0gMjAwCiAgICBmb3IgaXggaW4gcmFuZG9tX2l4KE4sIHN0ZXBzPU4qKjIqdGhlcm1fc3dlZXBzKToKICAgICAgICBkRSA9IGlzaW5nLm1ldHJvcF9zdGVwKGdyaWQsIGl4LCBKLCBtdSwgYmV0YSwgTikKICAgIAogICAgRSA9IFtpc2luZy5pc2luZ19lbmVyZ3koZ3JpZCwgSiwgbXUpXQogICAgTSA9IFtucC5tZWFuKGdyaWQpXQogICAgcHJpbnQoJ21lYXN1cmUgdD0nLFQpCiAgICBmb3IgaXggaW4gcmFuZG9tX2l4KE4sIHN0ZXBzPU4qKjIqMTAwKToKICAgICAgICByYWlzZQogICAgICAgIGRFID0gaXNpbmcubWV0cm9wX3N0ZXAoZ3JpZCwgaXgsIEosIG11LCBiZXRhLCBOKQogICAgICAgIGRFID0gZEUgb3IgMAogICAgICAgIEUuYXBwZW5kKCBFWy0xXSArIGRFICkKICAgICAgICBNLmFwcGVuZChucC5tZWFuKGdyaWQpKQogICAgICAgIAogICAgcHJpbnQoJ2RvbmUgbWVhc3VyZScpCiAgICBlbmVnX3RtLmFwcGVuZChFKQogICAgbWFnX3RtLmFwcGVuZChNKQoKCiMgKwpmaWcsIGF4cyA9IHBsdC5zdWJwbG90cygyLDIsIGZpZ3NpemU9KDgsNikpCgpbYXguc2V0X3RpdGxlKHQpIGZvciBheCwgdCBpbiB6aXAoc3VtKG1hcChsaXN0LCBheHMpLFtdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydFbmVyZ3knLCdTcGVjaWZpYyBIZWF0JywgJ01hZ25ldGl6YXRpb24nLCAnU3VzY2VwdGliaWxpdHknXSldCgpheHNbMCwwXS5wbG90KHRlbXBzLCBsaXN0KG1hcChucC5tZWFuLCBlbmVnX3RtKSkpCmF4c1swLDFdLnBsb3QodGVtcHMsIGxpc3QobWFwKG5wLnN0ZCwgZW5lZ190bSkpKQpheHNbMSwwXS5wbG90KHRlbXBzLCBsaXN0KG1hcChucC5tZWFuLCBtYWdfdG0pKSkKYXhzWzEsMV0ucGxvdCh0ZW1wcywgbGlzdChtYXAobnAuc3RkLCBtYWdfdG0pKSkKCjx8ZmltX3N1ZmZpeHw+CgojICsgW21hcmtkb3duXSB0b2M9dHJ1ZQojIDxoMT5UYWJsZSBvZiBDb250ZW50czxzcGFuIGNsYXNzPSJ0b2NTa2lwIj48L3NwYW4+PC9oMT4KIyA8ZGl2IGNsYXNzPSJ0b2MiPjx1bCBjbGFzcz0idG9jLWl0ZW0iPjxsaT48c3Bhbj48YSBocmVmPSIjU2ltcGxlLWZpcnN0LXJ1biIgZGF0YS10b2MtbW9kaWZpZWQtaWQ9IlNpbXBsZS1maXJzdC1ydW4tMSI+PHNwYW4gY2xhc3M9InRvYy1pdGVtLW51bSI+MSZuYnNwOyZuYnNwOzwvc3Bhbj5TaW1wbGUgZmlyc3QgcnVuPC9hPjwvc3Bhbj48L2xpPjxsaT48c3Bhbj48YSBocmVmPSIjVXNlLXB5dG9yY2gtY29udm9sdXRpb24iIGRhdGEtdG9jLW1vZGlmaWVkLWlkPSJVc2UtcHl0b3JjaC1jb252b2x1dGlvbi0yIj48c3BhbiBjbGFzcz0idG9jLWl0ZW0tbnVtIj4yJm5ic3A7Jm5ic3A7PC9zcGFuPlVzZSBweXRvcmNoIGNvbnZvbHV0aW9uPC9hPjwvc3Bhbj48L2xpPjxsaT48c3Bhbj48YSBocmVmPSIjU2F2ZS1kYXRhLWZvci1sYXRlci1hbmFseXNpcy1hbmQtcGxvdHRpbmciIGRhdGEtdG9jLW1vZGlmaWVkLWlkPSJTYXZlLWRhdGEtZm9yLWxhdGVyLWFuYWx5c2lzLWFuZC1wbG90dGluZy0zIj48c3BhbiBjbGFzcz0idG9jLWl0ZW0tbnVtIj4zJm5ic3A7Jm5ic3A7PC9zcGFuPlNhdmUgZGF0YSBmb3IgbGF0ZXIgYW5hbHlzaXMgYW5kIHBsb3R0aW5nPC9hPjwvc3Bhbj48L2xpPjxsaT48c3Bhbj48YSBocmVmPSIjVXNlLXNpbXBsZS1zZXJpYWwtYWxnb3JpdGhtIiBkYXRhLXRvYy1tb2RpZmllZC1pZD0iVXNlLXNpbXBsZS1zZXJpYWwtYWxnb3JpdGhtLTQiPjxzcGFuIGNsYXNzPSJ0b2MtaXRlbS1udW0iPjQmbmJzcDsmbmJzcDs8L3NwYW4+VXNlIHNpbXBsZSBzZXJpYWwgYWxnb3JpdGhtPC9hPjwvc3Bhbj48L2xpPjwvdWw+PC9kaXY+Cjx8ZmltX2VuZHw+"]
["a3a5bce5552c5864cf8e4cdd697027151ba095e6-1","a3a5bce5552c5864cf8e4cdd697027151ba095e6","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgojIEEgbG9nRmlsZVBhcnNlciBjbGFzcyB0byBwYXJzZSBYSU5ERVggbG9nIGZpbGVzIGFuZCBnZW5lcmF0ZSB0aGUgcm91dGluZS9wYWNrYWdlIGluZm9ybWF0aW9uIGluIENyb3NzUmVmZXJlbmNlIFN0cnVjdHVyZQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ29weXJpZ2h0IDIwMTIgVGhlIE9wZW4gU291cmNlIEVsZWN0cm9uaWMgSGVhbHRoIFJlY29yZCBBZ2VudAojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgo8fGZpbV9ob2xlfD4KIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpmcm9tIENyb3NzUmVmZXJlbmNlIGltcG9ydCBHbG9iYWwsIFJvdXRpbmUsIFBhY2thZ2UKZnJvbSBMb2dNYW5hZ2VyIGltcG9ydCBsb2dnZXIsIGluaXRDb25zb2xlTG9nZ2luZwoKY2xhc3MgQ3Jvc3NSZWZlcmVuY2VEaWZmKG9iamVjdCk6CiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgcGFzcwogIGRlZiBnZW5lcmF0ZURpZmZSZXBvcnQoc2VsZiwgQ3Jvc3NSZWZBLCBDcm9zc1JlZkIpOgogICAgcGFzcwo8fGZpbV9zdWZmaXh8PgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCjx8ZmltX2VuZHw+"]
["09da2861054c12f5a0ff3114b15d22d0ec8e78a6-2","09da2861054c12f5a0ff3114b15d22d0ec8e78a6","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogVVRGLTggLSotCiMKIyBDb3B5cmlnaHQgKGMpIDIwMTcgQVNNbG92ZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKIyBhcmUgbWV0OgojCiMgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZmNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KIwojICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiMgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFsc3Byb3ZpZGVkIHdpdGggdGhlCiMgICAgZGlzdHJpYnV0aW9uLgojCiMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwojICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQojIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCiMgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKIyBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CiMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgojIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAojIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCiMgQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCgpBT0lfRElTVEFOQ0UgPSA1CgpjbGFzcyBBcmVhT2JqZWN0KG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgaWQsIHgsIHksIHJhZGl1cyk6CiAgICAgICAgc2VsZi5pZCA9IGlkCiAgICAgICAgc2VsZi54ID0geAogICAgICAgIHNlbGYueSA9IHkKICAgICAgICBzZWxmLnJhZGl1cyA9IHJhZGl1cwogICAgICAgIHNlbGYueF9wb3MgPSAwCiAgICAgICAgc2VsZi55X3BvcyA9IDAKCmNsYXNzIEFyZWFTcGFjZShvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYuX3hfb2JqcyA9IFtdCiAgICAgICAgc2VsZi5feV9vYmpzID0gW10KICAgICAgICBzZWxmLl9vYmpzX21hcCA9IHt9CiAgICAgICAgc2VsZi5fbW92ZV9tYXAgPSB7fQogICAgICAgIHNlbGYuX2VudGVyX21hcCA9IHt9CiAgICAgICAgc2VsZi5fbGVhdmVfbWFwID0ge30KCiAgICBkZWYgYWRkKHNlbGYsIGlkLCB4LCB5LCByYWRpdXMpOgogICAgICAgIGlmIGlkIG5vdCBpbiBzZWxmLl9vYmpzX21hcDoKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIG5ld19vYmogPSBBcmVhT2JqZWN0KGlkLCB4LCB5LCByYWRpdXMpCiAgICAgICAgc2VsZi5fb2Jqc19tYXBbaWRdID0gbmV3X29iagoKICAgICAgICB4X3NldCA9IHt9CiAgICAgICAgZmxhZyA9IEZhbHNlCiAgICAgICAgcG9zID0gTm9uZQogICAgICAgIGZvciBpLCBvYmogaW4gZW51bWVyYXRlKHNlbGYuX3hfb2Jqcyk6CiAgICAgICAgICAgIGRpZmYgPSBhYnMob2JqLnggLSBuZXdfb2JqLngpCiAgICAgICAgICAgIGlmIGRpZmYgPD0gcmFkaXVzOgogICAgICAgICAgICAgICAgeF9zZXRbb2JqLmlkXSA9IG9iagogICAgICAgICAgICBpZiBub3QgZmxhZyBhbmQgZGlmZiA+IDA6CiAgICAgICAgICAgICAgICBwb3MgPSBpCiAgICAgICAgICAgICAgICBmbGFnID0gVHJ1ZQogICAgICAgICAgICBpZiBkaWZmID4gcmFkaXVzOgogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICBpZiBmbGFnOgogICAgICAgICAgICBzZWxmLl94X29ianMuaW5zZXJ0KHBvcywgbmV3X29iaikKICAgICAgICAgICAgbmV3X29iai54X3BvcyA9IC0tcG9zCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5feF9vYmpzLmluc2VydCgwLCBuZXdfb2JqKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGZsYWcgPSBGYWxzZQogICAgICAgIGZvciBpLCBvYmogaW4gZW51bWVyYXRlKHNlbGYuX3lfb2Jqcyk6CiAgICAgICAgICAgIGRpZmYgPSBhYnMob2JqLnkgLSBuZXdfb2JqLnkpCiAgICAgICAgICAgIGlmIGRpZmYgPD0gcmFkaXVzIGFuZCBvYmouaWQgaW4geF9zZXQ6Cjx8ZmltX2VuZHw+"]
["252cb73021adc31fcf3d5799f6de2cfe99c85ee1-3","252cb73021adc31fcf3d5799f6de2cfe99c85ee1","PHxmaW1fcHJlZml4fD4KIwojIGV4YW1wbGUgb2YgdXNpbmcgeHJheWxpYiB0byBnZXQgY3J5c3RhbCBkYXRhCiMKIyBzZWU6IAojICAgICAgIGh0dHA6Ly9keC5kb2kub3JnLzEwLjEwMTYvai5zYWIuMjAxMS4wOS4wMTEgICAocGFwZXIpIAojICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS90c2Nob29uai94cmF5bGliLyAgICAgICAgICAoY29kZSkgCiMgICAgICAgaHR0cDovL2x2c2VydmVyLnVnZW50LmJlL3hyYXlsaWItd2ViICAgICAgICAgICh3ZWIgaW50ZXJmYWNlLCBidXQgY3J5c3RhbHMgbm90IGluY2x1ZGVkISkKIwoKCgojCiMgIGltcG9ydCBibG9jayAKIwppbXBvcnQgeHJheWxpYgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHNjaXB5CmltcG9ydCBzY2lweS5jb25zdGFudHMgYXMgY29kYXRhCmZyb20gc2NpcHkuc3BlY2lhbCBpbXBvcnQganYKCmRlZiBnZXRfd2F2ZWxlbmd0aChlbmVyKToKICAgIGV2Mm1ldGVyID0gY29kYXRhLmgqY29kYXRhLmMvY29kYXRhLmUKICAgIHJldHVybiBldjJtZXRlci8oZW5lcioxZTMpCgpkZWYgZ2V0X3dhdmV2ZWN0b3IoZW5lcik6CiAgICByZXR1cm4gMiAqIG5wLnBpIC8gZ2V0X3dhdmVsZW5ndGgoZW5lcikKCmRlZiBnZXRfY2hpKGVuZXI9MTcuMCxoaD0xLGtrPTEsbGw9MSxjcnlzdGFsPSJTaSIpOgogICAgIwogICAgIyBnZXQgY3J5c3RhbCBkYXRhIGZvciBzaWxpY29uIGNyeXN0YWwKICAgICMKICAgIGNyeXN0ID0geHJheWxpYi5DcnlzdGFsX0dldENyeXN0YWwoY3J5c3RhbCkKCiAgICAjCiAgICAjIGRlZmluZSBtaWxsZXIgaW5kaWNlcyBhbmQgY29tcHV0ZSBkU3BhY2luZwogICAgIwogICAgZGVieWVXYWxsZXIgPSAxLjAKICAgIHJlbF9hbmdsZSA9IDEuMCAgIyByYXRpbyBvZiAoaW5jaWRlbnQgYW5nbGUpLyhicmFnZyBhbmdsZSkgLT4gd2Ugd29yayBhdCBCcmFnZyBhbmdsZQogICAgIwogICAgIyBnZXQgdGhlIHN0cnVjdHVyZSBmYWN0b3IgKGF0IGEgZ2l2ZW4gZW5lcmd5KQogICAgIwoKICAgIGZIID0geHJheWxpYi5DcnlzdGFsX0ZfSF9TdHJ1Y3R1cmVGYWN0b3IoY3J5c3QsIGVuZXIsIGhoLCBraywgbGwsIGRlYnllV2FsbGVyLCByZWxfYW5nbGUpCgogICAgIwogICAgIyBjb252ZXJ0IHN0cnVjdHVyZSBmYWN0b3IgaW4gY2hpIChvciBwc2kpID0gLSBjbGFzc2ljYWxfZV9yYWRpdXMgd2F2ZWxlbmd0aF4yIGZIIC8ocGkgdm9sdW1lKQogICAgIwogICAgZWxlY3Ryb25fciwgdG1wMSwgdG1wMiA9IHNjaXB5LmNvbnN0YW50cy5jb2RhdGEucGh5c2ljYWxfY29uc3RhbnRzWyJjbGFzc2ljYWwgZWxlY3Ryb24gcmFkaXVzIl0KCiAgICAjIGV2Mm1ldGVyID0gY29kYXRhLmgqY29kYXRhLmMvY29kYXRhLmUKICAgICMgd2F2ZWxlbmd0aCA9IGV2Mm1ldGVyLyhlbmVyKjFlMykKICAgIHdhdmVsZW5ndGggPSBnZXRfd2F2ZWxlbmd0aChlbmVyKQogICAgIyBwcmludCgid2F2ZWxlbmd0aDogIix3YXZlbGVuZ3RoKQoKCiAgICB2b2x1bWUgPSBjcnlzdFsndm9sdW1lJ10gKjFlLTEwKjFlLTEwKjFlLTEwICMgdm9sdW1lIG9mIHNpbGljb24gdW5pdCBjZWxsIGluIG1eMwogICAgY3RlID0gLSBlbGVjdHJvbl9yICogd2F2ZWxlbmd0aCp3YXZlbGVuZ3RoLyhucC5waSAqIHZvbHVtZSkKICAgIGNoaUggPSBjdGUqZkgKCiAgICByZXR1cm4gY2hpSAoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKCiAgICBmcm9tIHNyeHJheWxpYi5wbG90LmdvbCBpbXBvcnQgcGxvdAoKICAgIHByaW50KCI+Pj4+IDEgMSAxLCIsZ2V0X2NoaSgxNy4wLDEsMSwxLCJTaSIpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBwcmludCgiPj4+Pi0xLTEtMSwiLGdldF9jaGkoMTcuMCwtMSwtMSwtMSwiU2kiKSkKICAgIHByaW50KCI+Pj4+IDAgMCAwLCIsZ2V0X2NoaSgxNy4wLDAsMCwwLCJTaSIpKQoKICAgIGVuZXIgPSAxNy4wCjx8ZmltX2VuZHw+"]
["6ed6536d9e8801e4040416317e07ed422fab5ab0-5","6ed6536d9e8801e4040416317e07ed422fab5ab0","PHxmaW1fcHJlZml4fD4KIiIiClByb2plY3QgYW5kIHZpc3VhbGl6ZSBhIHNpbXBsZXggZ3JpZCBvbiB0aGUgMy1zaW1wbGV4LgoKIiIiCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KCmltcG9ydCBkaXQKaW1wb3J0IG51bXB5IGFzIG5wCgppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmZyb20gbXBsX3Rvb2xraXRzLm1wbG90M2QgaW1wb3J0IEF4ZXMzRAoKZGVmIHNpbXBsZXgzX3ZlcnRpY2VzKCk6CiAgICAiIiIKICAgIFJldHVybnMgdGhlIHZlcnRpY2VzIG9mIHRoZSBzdGFuZGFyZCAzLXNpbXBsZXguIEVhY2ggY29sdW1uIGlzIGEgdmVydGV4LgoKICAgICIiIgogICAgdiA9IG5wLmFycmF5KFsKICAgICAgICBbMSwgMCwgMF0sCiAgICAgICAgWy0xLzMsICtucC5zcXJ0KDgpLzMsIDBdLAogICAgICAgIFstMS8zLCAtbnAuc3FydCgyKS8zLCArbnAuc3FydCgyLzMpXSwKICAgICAgICBbLTEvMywgLW5wLnNxcnQoMikvMywgLW5wLnNxcnQoMi8zKV0sCiAgICBdKQogICAgcmV0dXJuIHYudHJhbnNwb3NlKCkKCmRlZiBwbG90X3NpbXBsZXhfdmVydGljZXMoYXg9Tm9uZSk6CiAgICBpZiBheCBpcyBOb25lOgogICAgICAgIGYgPSBwbHQuZmlndXJlKCkKPHxmaW1faG9sZXw+CiAgICB2ZXJ0aWNlcyA9IHNpbXBsZXgzX3ZlcnRpY2VzKCkKICAgIGxpbmVzID0gbnAuYXJyYXkoWwogICAgICAgIHZlcnRpY2VzWzosMF0sCiAgICAgICAgdmVydGljZXNbOiwxXSwKICAgICAgICB2ZXJ0aWNlc1s6LDJdLAogICAgICAgIHZlcnRpY2VzWzosMF0sCiAgICAgICAgdmVydGljZXNbOiwzXSwKICAgICAgICB2ZXJ0aWNlc1s6LDFdLAogICAgICAgIHZlcnRpY2VzWzosM10sCiAgICAgICAgdmVydGljZXNbOiwyXQogICAgXSkKICAgIGxpbmVzID0gbGluZXMudHJhbnNwb3NlKCkKICAgIG91dCA9IGF4LnBsb3QobGluZXNbMF0sIGxpbmVzWzFdLCBsaW5lc1syXSkKICAgIGF4LnNldF9heGlzX29mZigpCiAgICBheC5zZXRfYXNwZWN0KCdlcXVhbCcpCiAgICByZXR1cm4gYXgsIG91dCwgdmVydGljZXMKCmRlZiBwbG90X3NpbXBsZXhfZ3JpZChzdWJkaXZpc2lvbnMsIGF4PU5vbmUpOgoKICAgIGF4LCBvdXQsIHZlcnRpY2VzID0gcGxvdF9zaW1wbGV4X3ZlcnRpY2VzKGF4PWF4KQoKICAgIGdyaWQgPSBkaXQuc2ltcGxleF9ncmlkKDQsIHN1YmRpdmlzaW9ucykKICAgIHByb2plY3Rpb25zID0gW10KICAgIGZvciBkaXN0IGluIGdyaWQ6CiAgICAgICAgcG1mID0gZGlzdC5wbWYKICAgICAgICBwcm9qID0gKHBtZiAqIHZlcnRpY2VzKS5zdW0oYXhpcz0xKQogICAgICAgIHByb2plY3Rpb25zLmFwcGVuZChwcm9qKQoKICAgIHByb2plY3Rpb25zID0gbnAuYXJyYXkocHJvamVjdGlvbnMpCiAgICBwcm9qZWN0aW9ucyA9IHByb2plY3Rpb25zLnRyYW5zcG9zZSgpCiAgICBvdXQgPSBheC5zY2F0dGVyKHByb2plY3Rpb25zWzBdLCBwcm9qZWN0aW9uc1sxXSwgcHJvamVjdGlvbnNbMl0sIHM9MTApCiAgICByZXR1cm4gYXgsIG91dCwgcHJvamVjdGlvbnMKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBwbG90X3NpbXBsZXhfZ3JpZCg5KQogICAgcGx0LnNob3coKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGF4ID0gZi5hZGRfc3VicGxvdCgxMTEsIHByb2plY3Rpb249JzNkJykKCjx8ZmltX2VuZHw+"]
["c9220889b609f4ba2e30c6876a564cefc8d003bf-2","c9220889b609f4ba2e30c6876a564cefc8d003bf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNldHRpbmdzCmZyb20gaW5pdGlhbGl6ZSBpbXBvcnQgZGIKCmNsYXNzIFVzZXIoZGIuTW9kZWwpOgogICAgX190YWJsZW5hbWVfXyA9ICd1c2VycycKCiAgICBpZCA9IGRiLkNvbHVtbihkYi5CaWdJbnRlZ2VyLCBwcmltYXJ5X2tleT1UcnVlKQogICAgbmFtZSA9IGRiLkNvbHVtbihkYi5TdHJpbmcpCiAgICBzY3JlZW5fbmFtZSA9IGRiLkNvbHVtbihkYi5TdHJpbmcpCiAgICBkZXNjcmlwdGlvbiA9IGRiLkNvbHVtbihkYi5TdHJpbmcpCiAgICBwcm9maWxlX2ltYWdlX3VybF9odHRwcyA9IGRiLkNvbHVtbihkYi5TdHJpbmcpCiAgICB0d2VldHNfY291bnQgPSBkYi5Db2x1bW4oZGIuSW50ZWdlcikKICAgIHR3ZWV0cyA9IGRiLnJlbGF0aW9uc2hpcCgnVHdlZXQnLCBiYWNrcmVmPSd1c2VyJywgbGF6eT1UcnVlKQoKY2xhc3MgVHdlZXQoZGIuTW9kZWwpOgogICAgX190YWJsZW5hbWVfXyA9ICd0d2VldHMnCgogICAgaWQgPSBkYi5Db2x1bW4oZGIuQmlnSW50ZWdlciwgcHJpbWFyeV9rZXk9VHJ1ZSkKICAgIGNhdGVnb3J5ID0gZGIuQ29sdW1uKGRiLlN0cmluZywgc2VydmVyX2RlZmF1bHQ9c2V0dGluZ3MuREVGQVVMVF9DQVRFR09SWSkKICAgIHVzZXJfaWQgPSBkYi5Db2x1bW4oZGIuQmlnSW50ZWdlciwgZGIuRm9yZWlnbktleSgndXNlcnMuaWQnKSkKICAgIHVzZXJfbmFtZSA9IGRiLkNvbHVtbihkYi5TdHJpbmcpCiAgICB1c2VyX3NjcmVlbl9uYW1lID0gZGIuQ29sdW1uKGRiLlN0cmluZykKICAgIHVzZXJfZGVzY3JpcHRpb24gPSBkYi5Db2x1bW4oZGIuU3RyaW5nKQogICAgdXNlcl9wcm9maWxlX2ltYWdlX3VybF9odHRwcyA9IGRiLkNvbHVtbihkYi5TdHJpbmcpCiAgICBiYW4gPSBkYi5Db2x1bW4oZGIuQm9vbGVhbikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgdGV4dCA9IGRiLkNvbHVtbihkYi5TdHJpbmcpCiAgICBjcmVhdGVkX2F0ID0gZGIuQ29sdW1uKGRiLkRhdGVUaW1lKQo8fGZpbV9lbmR8Pg=="]
["61dfa403e68f3691c49eb2e0e653ad598780dad8-2","61dfa403e68f3691c49eb2e0e653ad598780dad8",{"$cut":{"chars":18796,"head":"PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFzayBpbXBvcnQgRmxhc2ssIHJlZGlyZWN0LCByZXF1ZXN0LCBSZXNwb25zZQpmcm9tIGZsYXNrX2NvcnMgaW1wb3J0IGNyb3NzX29yaWdpbgpmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKaW1wb3J0IHBhaG8ubXF0dC5jbGllbnQgYXMgbXF0dAppbXBvcnQgcGFoby5tcXR0LnB1Ymxpc2ggYXMgcHVibGlzaAppbXBvcnQgcGFoby5tcXR0LnN1YnNjcmliZSBhcyBzdWJzY3JpYmUKaW1wb3J0IHNpbXBsZW9ic3dzCmltcG9ydCBhc3luY2lvCmltcG9ydCBqc29uCmZyb20gY29uZmlnIGltcG9ydCAoCiAgICBBUElfVVJMLAogICAgQVBJX1BPUlQsCiAgICBNUVRUX0hPU1QsCiAgICBNUVRUX1BPUlQsCiAgICBNUVRUX0FVVEgsCiAgICBPQlNfSE9TVCwKICAgIE9CU19QT1JULAogICAgT0JTX1BBU1NXT1JELAogICAgKQpmcm9tIHRlbXBsYXRlcyBpbXBvcnQgKAogICAgc2Nyb2xsYmFyX3RlbXBsYXRlCikKCkJBRFJFUSA9IFJlc3BvbnNlKHN0YXR1cz00MDApCkdPT0RSRVEgPSBSZXNwb25zZShzdGF0dXM9MjAwKQpURUFQT1RSRVEgPSBSZXNwb25zZShzdGF0dXM9NDE4KQojIEJBRFJFUSA9IDQwMAojIEdPT0RSRVEgPSAyMDAKIyBURUFQT1RSRVEgPSA0MTgKCmFwcCA9IEZsYXNrKF9fbmFtZV9fKQpsb29wID0gYXN5bmNpby5uZXdfZXZlbnRfbG9vcCgpCmFzeW5jaW8uc2V0X2V2ZW50X2xvb3AobG9vcCkKCm9icyA9IHNpbXBsZW9ic3dzLm9ic3dzKGhvc3Q9T0JTX0hPU1QsIHBvcnQ9T0JTX1BPUlQsIHBhc3N3b3JkPU9CU19QQVNTV09SRCwgbG9vcD1sb29wKQoKYXN5bmMgZGVmIG1ha2VfcmVxdWVzdChjYWxsLCBkYXRhPU5vbmUpOgogICAgdHJ5OgogICAgICAgIGRlc3RpbmF0aW9uID0gZGF0YVsncmVmJ10KICAgIGV4Y2VwdCAoS2V5RXJyb3IsIFR5cGVFcnJvcik6CiAgICAgICAgZGVzdGluYXRpb24gPSBOb25lCiAgICBhd2FpdCBvYnMuY29ubmVjdCgpCiAgICByZXN1bHQgPSBhd2FpdCBvYnMuY2FsbChjYWxsLCBkYXRhPWRhdGEpCiAgICBhd2FpdCBvYnMuZGlzY29ubmVjdCgpCiAgICByZXR1cm4gcmVzdWx0CgpkZWYgYXV0b21hdGlvbl9zdGFydF9zdHJlYW0oKToKICAgIGRhdGFfbGlzdCA9IFsKICAgICAgICB7InNvdXJjZSI6Ik1pYy9BdXgiLCAibXV0ZSI6IFRydWV9LAogICAgICAgIE5vbmUsCiAgICAgICAgeyJzb3VyY2UiOiJEZXNrdG9wIEF1ZGlvIiwgInZvbHVtZSI6LTksICJ1c2VEZWNpYmVsIjogVHJ1ZX0sCiAgICAgICAgeyJzb3VyY2UiOiJNaWMvQXV4IiwgInZvbHVtZSI6LTcuMSwgInVzZURlY2liZWwiOiBUcnVlfSwKICAgICAgICB7J3NjZW5lLW5hbWUnOiAnU3RhcnRpbmcgU29vbid9LAogICAgXQoKICAgIGNhbGxfbGlzdCA9IFsKICAgICAgICAiU2V0TXV0ZSIsCiAgICAgICAgIlN0YXJ0U3RyZWFtaW5nIiwKICAgICAgICAiU2V0Vm9sdW1lIiwKICAgICAgICAiU2V0Vm9sdW1lIiwKICAgICAgICAiU2V0Q3VycmVudFNjZW5lIiwKICAgIF0KCiAgICBmb3IgbiBpbiByYW5nZSgwLCBsZW4oZGF0YV9saXN0KSk6CiAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUobWFrZV9yZXF1ZXN0KGNhbGxfbGlzdFtuXSwgZGF0YT1kYXRhX2xpc3Rbbl0pKQoKZGVmIGF1dG9tYXRpb25fc3RhcnRfY291bnRkb3duKHRpbWU9MzAwKToKICAgIHB1Ymxpc2guc2luZ2xlKAogICAgICAgICAgICAgICAgJ2NvdW50ZG93bicsIAogICAgICAgICAgICAgICAgc3RyKHRpbWUpLAogICAgICAgICAgICAgICAgcW9zPTAsIAogICAgICAgICAgICAgICAgcmV0YWluPUZhbHNlLCAKICAgICAgICAgICAgICAgIGhvc3RuYW1lPU1RVFRfSE9TVCwKICAgICAgICAgICAgICAgIHBvcnQ9TVFUVF9QT1JULCAKICAgICAgICAgICAgICAgIGNsaWVudF9pZD0iIiwgCiAgICAgICAgICAgICAgICBrZWVwYWxpdmU9NjAsCiAgICAgICAgICAgICAgICB3aWxsPU5vbmUsCiAgICAgICAgICAgICAgICBhdXRoPU1RVFRfQVVUSCwKICAgICAgICAgICAgICAgIHRscz1Ob25lLAogICAgICAgICAgICAgICAgcHJvdG9jb2w9bXF0dC5NUVRUdjMxMSwKICAgICAgICAgICAgICAgIHRyYW5zcG9ydD0idGNwIiwKICAgICAgICAgICAgICAgICkKICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKG1ha2VfcmVxdWVzdCgiU2V0Q3VycmVudFNjZW5lIiwgZGF0YT17J3NjZW5lLW5hbWUnOiAnQ291bnRkb3duJ30pKQoKZGVmIGF1dG9tYXRpb25fb25fY2FtZXJhKCk6CiAgICBkYXRhX2xpc3QgPSBbCiAgICAgICAgeyJzb3VyY2UiOiJNaWMvQXV4IiwgIm11dGUiOiBGYWxzZX0sCiAgICAgICAgeyJzb3VyY2UiOiJEZXNrdG9wIEF1ZGlvIiwgInZvbHVtZSI6LTI1LjIsICJ1c2VEZWNpYmVsIjogVHJ1ZX0sCiAgICAgICAgeyJzb3VyY2UiOiJNaWMvQXV4IiwgInZvbHVtZSI6LTcuMSwgInVzZURlY2liZWwiOiBUcnVlfSwKICAgICAgICB7J3NjZW5lLW5hbWUnOiAnTWFpbid9LAogICAgXQoKICAgIGNhbGxfbGlzdCA9IFsKICAgICAgICAiU2V0TXV0ZSIsCiAgICAgICAgIlNldFZvbHVtZSIsCiAgICAgICAgIlNldFZvbHVtZSIsCiAgICAgICAgIlNldEN1cnJlbnRTY2VuZSIsCiAgICBdCgogICAgZm9yIG4gaW4gcmFuZ2UoMCwgbGVuKGRhdGFfbGlzdCkpOgogICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKG1ha2VfcmVxdWVzdChjYWxsX2xpc3Rbbl0sIGRhdGE9ZGF0YV9saXN0W25dKSkKCmRlZiBhdXRvbWF0aW9uX3N0aXJfYnJvd3NlcigpOgogICAgZGF0YV9saXN0ID0gWwogICAgICAgIHsnc2NlbmUtbmFtZSc6ICdNYWluJ30sCiAgICAgICAgeydzY2VuZS1uYW1lJzogJ01haW4gMid9LAogICAgICAgIHsnc2NlbmUtbmFtZSc6ICdNYWluJ30sCiAgICBdCgogICAgY2FsbF9saXN0ID0gWwogICAgICAgICJTZXRDdXJyZW50U2NlbmUiLAogICAgICAgICJTZXRDdXJyZW50U2NlbmUiLAogICAgICAgICJTZXRDdXJyZW50U2NlbmUiLAogICAgXQoKICAgIGZvciBuIGluIHJhbmdlKDAsIGxlbihkYXRhX2xpc3QpKToKICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShtYWtlX3JlcXVlc3QoY2FsbF9saXN0W25dLCBkYXRhPWRhdGFfbGlzdFtuXSkpCgpkZWYgYXV0b21hdGlv"}}]
["6e49d8bfbedcb136020b972f40f8d62448f52382-4","6e49d8bfbedcb136020b972f40f8d62448f52382","PHxmaW1fcHJlZml4fD4KIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KT1JNIGZvciB0aGUgaW5wdXQgZGF0YQoiIiIKCiMgIENvcHlyaWdodCDCqSAyMDIxIFRlY2huaXNjaGUgVW52ZXJzaXTDpHQgQmVybGluLCBTZXJ2aWNlLWNlbnRyaWMgTmV0d29ya2luZyAoU05FVCkgaHR0cHM6Ly9zbmV0LnR1LWJlcmxpbi5kZS8KPHxmaW1fZW5kfD4="]
["6e6c2a5a46c761f30e50bc906d8c9f50d81dc7ba-2","6e6c2a5a46c761f30e50bc906d8c9f50d81dc7ba","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIE9wZW5NTUxhYi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KZnJvbSAuLmJ1aWxkZXIgaW1wb3J0IERFVEVDVE9SUwpmcm9tIC5kZXRyIGltcG9ydCBERVRSCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpAREVURUNUT1JTLnJlZ2lzdGVyX21vZHVsZSgpCmNsYXNzIERlZm9ybWFibGVERVRSKERFVFIpOgoKPHxmaW1fZW5kfD4="]
["aaffb041047c6ab743326c817e640e1d9a2ce137-4","aaffb041047c6ab743326c817e640e1d9a2ce137","PHxmaW1fcHJlZml4fD4KIwojIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMjEgU2F0b3J1IFNBVE9IIDxzYXRvcnUuc2F0b2ggQCBnbWFpbC5jb20+CiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAojCnIiIiJBYnN0cmFjdCBhbmQgYmFzaWMgbG9hZGVycy4KIiIiCmltcG9ydCBjb2xsZWN0aW9ucwppbXBvcnQgaW8KaW1wb3J0IHBhdGhsaWIKaW1wb3J0IHR5cGluZwoKZnJvbSAuLi51dGlscyBpbXBvcnQgKAogICAgZmlsdGVyX29wdGlvbnMsIGlzX3N0cmVhbV9pb2luZm8KKQpmcm9tIC5kYXRhdHlwZXMgaW1wb3J0ICgKICAgIEluRGF0YUV4VCwgSW9pVCwgR2VuQ29udGFpbmVyVCwgT3B0aW9uc1QKKQpmcm9tIC5taXhpbnMgaW1wb3J0IFRleHRGaWxlc01peGluCmZyb20gLnV0aWxzIGltcG9ydCBub3RfaW1wbGVtZW50ZWQKCgpEQVRBX0RFRkFVTFQ6IEluRGF0YUV4VCA9IGRpY3QoKQoKCmNsYXNzIExvYWRlck1peGluOgogICAgIiIiCiAgICBNaXhpbiBjbGFzcyB0byBsb2FkIGRhdGEuCgogICAgSW5oZXJpdGVkIGNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZXRob2RzLgoKICAgIC0gOm1ldGg6YGxvYWRfZnJvbV9zdHJpbmdgOiBMb2FkIGNvbmZpZyBmcm9tIHN0cmluZwogICAgLSA6bWV0aDpgbG9hZF9mcm9tX3N0cmVhbWA6IExvYWQgY29uZmlnIGZyb20gYSBmaWxlIG9yIGZpbGUtbGlrZSBvYmplY3QKICAgIC0gOm1ldGg6YGxvYWRfZnJvbV9wYXRoYDogTG9hZCBjb25maWcgZnJvbSBmaWxlIG9mIGdpdmVuIHBhdGgKCiAgICBNZW1iZXIgdmFyaWFibGVzOgoKICAgIC0gX2xvYWRfb3B0czogQmFja2VuZCBzcGVjaWZpYyBvcHRpb25zIG9uIGxvYWQKICAgIC0gX29yZGVyZWQ6IFRydWUgaWYgdGhlIHBhcnNlciBrZWVwIHRoZSBvcmRlciBvZiBpdGVtcyBieSBkZWZhdWx0CiAgICAtIF9hbGxvd19wcmltaXRpdmVzOiBUcnVlIGlmIHRoZSBwYXJzZXIubG9hZCogbWF5IHJldHVybiBvYmplY3RzIG9mCiAgICAgIHByaW1pdGl2ZSBkYXRhIHR5cGVzIG90aGVyIHRoYW4gbWFwcGluZyB0eXBlcyBzdWNoIGxpa2UgSlNPTiBwYXJzZXIKICAgIC0gX2RpY3Rfb3B0czogQmFja2VuZCBvcHRpb25zIHRvIGN1c3RvbWl6ZSBkaWN0IGNsYXNzIHRvIG1ha2UgcmVzdWx0cwogICAgIiIiCiAgICBfbG9hZF9vcHRzOiB0eXBpbmcuTGlzdFtzdHJdID0gW10KICAgIF9vcmRlcmVkOiBib29sID0gRmFsc2UKICAgIF9hbGxvd19wcmltaXRpdmVzOiBib29sID0gRmFsc2UKICAgIF9kaWN0X29wdHM6IHR5cGluZy5MaXN0W3N0cl0gPSBbXQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIG9yZGVyZWQoY2xzKSAtPiBib29sOgogICAgICAgICIiIgogICAgICAgIDpyZXR1cm46IFRydWUgaWYgcGFyc2VyIGNhbiBrZWVwIHRoZSBvcmRlciBvZiBrZXlzIGVsc2UgRmFsc2UuCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIGNscy5fb3JkZXJlZAoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGFsbG93X3ByaW1pdGl2ZXMoY2xzKSAtPiBib29sOgogICAgICAgICIiIgogICAgICAgIDpyZXR1cm46CiAgICAgICAgICAgIFRydWUgaWYgdGhlIHBhcnNlci5sb2FkKiBtYXkgcmV0dXJuIG9iamVjdHMgb2YgcHJpbWl0aXZlIGRhdGEgdHlwZXMKICAgICAgICAgICAgb3RoZXIgdGhhbiBtYXBwaW5nIHR5cGVzIHN1Y2ggbGlrZSBKU09OIHBhcnNlcgogICAgICAgICIiIgogICAgICAgIHJldHVybiBjbHMuX2FsbG93X3ByaW1pdGl2ZXMKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBkaWN0X29wdGlvbnMoY2xzKSAtPiB0eXBpbmcuTGlzdFtzdHJdOgogICAgICAgICIiIgogICAgICAgIDpyZXR1cm46IExpc3Qgb2YgZGljdCBmYWN0b3J5IG9wdGlvbnMKICAgICAgICAiIiIKICAgICAgICByZXR1cm4gY2xzLl9kaWN0X29wdHMKCiAgICBkZWYgX2NvbnRhaW5lcl9mYWN0b3J5KHNlbGYsICoqb3B0aW9ucykgLT4gR2VuQ29udGFpbmVyVDoKICAgICAgICAiIiIKICAgICAgICBUaGUgb3JkZXIgb2YgcHJpcm9yaXRpZXMgYXJlIGFjX2RpY3QsIGJhY2tlbmQgc3BlY2lmaWMgZGljdCBjbGFzcwogICAgICAgIG9wdGlvbiwgYWNfb3JkZXJlZC4KCiAgICAgICAgOnBhcmFtIG9wdGlvbnM6IEtleXdvcmQgb3B0aW9ucyBtYXkgY29udGFpbiAnYWNfb3JkZXJlZCcuCiAgICAgICAgOnJldHVybjogRmFjdG9yeSAoY2xhc3Mgb3IgZnVuY3Rpb24pIHRvIG1ha2UgYW4gY29udGFpbmVyLgogICAgICAgICIiIgogICAgICAgIGFjX2RpY3QgPSBvcHRpb25zLmdldCgiYWNfZGljdCIsIEZhbHNlKQogICAgICAgIF9kaWN0cyA9IFt4IGZvciB4IGluIChvcHRpb25zLmdldChvKSBmb3IgbyBpbiBzZWxmLmRpY3Rfb3B0aW9ucygpKQogICAgICAgICAgICAgICAgICBpZiB4XQoKICAgICAgICBpZiBzZWxmLmRpY3Rfb3B0aW9ucygpIGFuZCBhY19kaWN0IGFuZCBjYWxsYWJsZShhY19kaWN0KToKICAgICAgICAgICAgcmV0dXJuIGFjX2RpY3QgICMgSGlnaGVyIHByaW9yaXR5IHRoYW4gYWNfb3JkZXJlZC4KICAgICAgICBpZiBfZGljdHMgYW5kIGNhbGxhYmxlKF9kaWN0c1swXSk6CiAgICAgICAgICAgIHJldHVybiBfZGljdHNbMF0KICAgICAgICBpZiBzZWxmLm9yZGVyZWQoKSBhbmQgb3B0aW9ucy5nZXQoImFjX29yZGVyZWQiLCBGYWxzZSk6CiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdAoKICAgICAgICByZXR1cm4gZGljdAoKICAgIGRlZiBfbG9hZF9vcHRpb25zKHNlbGYsIGNvbnRhaW5lcjogR2VuQ29udGFpbmVyVCwgKipvcHRpb25zKSAtPiBPcHRpb25zVDoKICAgICAgICAiIiIKICAgICAgICBTZWxlY3QgYmFja2VuZCBzcGVjaWZpYyBsb2FkaW5nIG9wdGlvbnMuCiAgICAgICAgIiIiCiAgICAgICAgIyBGb3JjZSBzZXQgZGljdCBvcHRpb24gaWYgYXZhaWxhYmxlIGluIGJhY2tlbmQuIEZvciBleGFtcGxlLAogICAgICAgICMgb3B0aW9uc1sib2JqZWN0X2hvb2siXSB3aWxsIGJlIE9yZGVyZWREaWN0IGlmICdjb250YWluZXInIHdhcwogICAgICAgICMgT3JkZXJlZERpY3QgaW4gSlNPTiBiYWNrZW5kLgogICAgICAgIGZvciBvcHQgaW4gc2VsZi5kaWN0X29wdGlvbnMoKToKICAgICAgICAgICAgb3B0aW9ucy5zZXRkZWZhdWx0KG9wdCwgY29udGFpbmVyKQoKICAgICAgICByZXR1cm4gZmlsdGVyX29wdGlvbnMoc2VsZi5fbG9hZF9vcHRzLCBvcHRpb25zKQoKICAgIGRlZiBsb2FkX2Zyb21fc3RyaW5nKHNlbGYsIGNvbnRlbnQ6IHN0ciwgY29udGFpbmVyOiBHZW5Db250YWluZXJULAogICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpIC0+IEluRGF0YUV4VDoKICAgICAgICAiIiIKICAgICAgICBMb2FkIGNvbmZpZyBmcm9tIGdpdmVuIHN0cmluZyAnY29udGVudCcuCgogICAgICAgIDpwYXJhbSBjb250ZW50OiBDb25maWcgY29udGVudCBzdHJpbmcKICAgICAgICA6cGFyYW0gY29udGFpbmVyOiBjYWxsYmxlIHRvIG1ha2UgYSBjb250YWluZXIgb2JqZWN0IGxhdGVyCiAgICAgICAgOnBhcmFtIGt3YXJnczogb3B0aW9uYWwga2V5d29yZCBwYXJhbWV0ZXJzIHRvIGJlIHNhbml0aXplZCA6OiBkaWN0CgogICAgICAgIDpyZXR1cm46IERpY3QtbGlrZSBvYmplY3QgaG9sZGluZyBjb25maWcgcGFyYW1ldGVycwogICAgICAgICIiIgogICAgICAgIG5vdF9pbXBsZW1lbnRlZChzZWxmLCBjb250ZW50LCBjb250YWluZXIsICoqa3dhcmdzKQogICAgICAgIHJldHVybiBEQVRBX0RFRkFVTFQKCiAgICBkZWYgbG9hZF9mcm9tX3BhdGgoc2VsZiwgZmlsZXBhdGg6IHN0ciwgY29udGFpbmVyOiBHZW5Db250YWluZXJULAogICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKSAtPiBJbkRhdGFFeFQ6CiAgICAgICAgIiIiCiAgICAgICAgTG9hZCBjb25maWcgZnJvbSBnaXZlbiBmaWxlIHBhdGggJ2ZpbGVwYXRoYC4KCiAgICAgICAgOnBhcmFtIGZpbGVwYXRoOiBDb25maWcgZmlsZSBwYXRoCiAgICAgICAgOnBhcmFtIGNvbnRhaW5lcjogY2FsbGJsZSB0byBtYWtlIGEgY29udGFpbmVyIG9iamVjdCBsYXRlcgogICAgICAgIDpwYXJhbSBrd2FyZ3M6IG9wdGlvbmFsIGtleXdvcmQgcGFyYW1ldGVycyB0byBiZSBzYW5pdGl6ZWQgOjogZGljdAoKICAgICAgICA6cmV0dXJuOiBEaWN0LWxpa2Ugb2JqZWN0IGhvbGRpbmcgY29uZmlnIHBhcmFtZXRlcnMKICAgICAgICAiIiIKICAgICAgICBub3RfaW1wbGVtZW50ZWQoc2VsZiwgZmlsZXBhdGgsIGNvbnRhaW5lciwgKiprd2FyZ3MpCiAgICAgICAgcmV0dXJuIERBVEFfREVGQVVMVAoKICAgIGRlZiBsb2FkX2Zyb21fc3RyZWFtKHNlbGYsIHN0cmVhbTogdHlwaW5nLklPLCBjb250YWluZXI6IEdlbkNvbnRhaW5lclQsCiAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykgLT4gSW5EYXRhRXhUOgogICAgICAgICIiIgogICAgICAgIExvYWQgY29uZmlnIGZyb20gZ2l2ZW4gZmlsZSBsaWtlIG9iamVjdCAnc3RyZWFtYC4KCiAgICAgICAgOnBhcmFtIHN0cmVhbTogIENvbmZpZyBmaWxlIG9yIGZpbGUgbGlrZSBvYmplY3QKICAgICAgICA6cGFyYW0gY29udGFpbmVyOiBjYWxsYmxlIHRvIG1ha2UgYSBjb250YWluZXIgb2JqZWN0IGxhdGVyCiAgICAgICAgOnBhcmFtIGt3YXJnczogb3B0aW9uYWwga2V5d29yZCBwYXJhbWV0ZXJzIHRvIGJlIHNhbml0aXplZCA6OiBkaWN0CgogICAgICAgIDpyZXR1cm46IERpY3QtbGlrZSBvYmplY3QgaG9sZGluZyBjb25maWcgcGFyYW1ldGVycwogICAgICAgICIiIgogICAgICAgIG5vdF9pbXBsZW1lbnRlZChzZWxmLCBzdHJlYW0sIGNvbnRhaW5lciwgKiprd2FyZ3MpCiAgICAgICAgcmV0dXJuIERBVEFfREVGQVVMVAoKICAgIGRlZiBsb2FkcyhzZWxmLCBjb250ZW50OiBzdHIsICoqb3B0aW9ucykgLT4gSW5EYXRhRXhUOgogICAgICAgICIiIgogICAgICAgIExvYWQgY29uZmlnIGZyb20gZ2l2ZW4gc3RyaW5nICdjb250ZW50JyBhZnRlciBzb21lIGNoZWNrcy4KCiAgICAgICAgOnBhcmFtIGNvbnRlbnQ6ICBDb25maWcgZmlsZSBjb250ZW50CiAgICAgICAgOnBhcmFtIG9wdGlvbnM6CiAgICAgICAgICAgIG9wdGlvbnMgd2lsbCBiZSBwYXNzZWQgdG8gYmFja2VuZCBzcGVjaWZpYyBsb2FkaW5nIGZ1bmN0aW9ucy4KICAgICAgICAgICAgcGxlYXNlIG5vdGUgdGhhdCBvcHRpb25zIGhhdmUgdG8gYmUgc2FuaXRpemVkIHcvCiAgICAgICAgICAgIDpmdW5jOmBhbnljb25maWcudXRpbHMuZmlsdGVyX29wdGlvbnNgIGxhdGVyIHRvIGZpbHRlciBvdXQgb3B0aW9ucwogICAgICAgICAgICBub3QgaW4gX2xvYWRfb3B0cy4KCiAgICAgICAgOnJldHVybjogZGljdCBvciBkaWN0LWxpa2Ugb2JqZWN0IGhvbGRpbmcgY29uZmlndXJhdGlvbnMKICAgICAgICAiIiIKICAgICAgICBjb250YWluZXIgPSBzZWxmLl9jb250YWluZXJfZmFjdG9yeSgqKm9wdGlvbnMpCiAgICAgICAgaWYgbm90IGNvbnRlbnQgb3IgY29udGVudCBpcyBOb25lOgogICAgICAgICAgICByZXR1cm4gY29udGFpbmVyKCkKCiAgICAgICAgb3B0aW9ucyA9IHNlbGYuX2xvYWRfb3B0aW9ucyhjb250YWluZXIsICoqb3B0aW9ucykKICAgICAgICByZXR1cm4gc2VsZi5sb2FkX2Zyb21fc3RyaW5nKGNvbnRlbnQsIGNvbnRhaW5lciwgKipvcHRpb25zKQoKICAgIGRlZiBsb2FkKHNlbGYsIGlvaTogSW9pVCwgYWNfaWdub3JlX21pc3Npbmc6IGJvb2wgPSBGYWxzZSwKICAgICAgICAgICAgICoqb3B0aW9ucykgLT4gSW5EYXRhRXhUOgogICAgICAgICIiIgogICAgICAgIExvYWQgY29uZmlnIGZyb20gYSBmaWxlIHBhdGggb3IgYSBmaWxlIC8gZmlsZS1saWtlIG9iamVjdCB3aGljaCAnaW9pJwogICAgICAgIHJlZmVyaW5nIGFmdGVyIHNvbWUgY2hlY2tzLgoKICAgICAgICA6cGFyYW0gaW9pOgogICAgICAgICAgICAnYW55Y29uZmlnLmNvbW1vbi5JT0luZm8nIG5hbWVkdHVwbGUgb2JqZWN0IHByb3ZpZGVzIHZhcmlvdXMgaW5mbwogICAgICAgICAgICBvZiBpbnB1dCBvYmplY3QgdG8gbG9hZCBkYXRhIGZyb20KCiAgICAgICAgOnBhcmFtIGFjX2lnbm9yZV9taXNzaW5nOgogICAgICAgICAgICBJZ25vcmUgYW5kIGp1c3QgcmV0dXJuIGVtcHR5IHJlc3VsdCBpZiBnaXZlbiBgaW9pYCBvYmplY3QgZG9lcyBub3QKICAgICAgICAgICAgZXhpc3QgaW4gYWN0dWFsLgogICAgICAgIDpwYXJhbSBvcHRpb25zOgogICAgICAgICAgICBvcHRpb25zIHdpbGwgYmUgcGFzc2VkIHRvIGJhY2tlbmQgc3BlY2lmaWMgbG9hZGluZyBmdW5jdGlvbnMuCiAgICAgICAgICAgIHBsZWFzZSBub3RlIHRoYXQgb3B0aW9ucyBoYXZlIHRvIGJlIHNhbml0aXplZCB3LwogICAgICAgICAgICA6ZnVuYzpgYW55Y29uZmlnLnV0aWxzLmZpbHRlcl9vcHRpb25zYCBsYXRlciB0byBmaWx0ZXIgb3V0IG9wdGlvbnMKICAgICAgICAgICAgbm90IGluIF9sb2FkX29wdHMuCgogICAgICAgIDpyZXR1cm46IGRpY3Qgb3IgZGljdC1saWtlIG9iamVjdCBob2xkaW5nIGNvbmZpZ3VyYXRpb25zCiAgICAgICAgIiIiCiAgICAgICAgY29udGFpbmVyID0gc2VsZi5fY29udGFpbmVyX2ZhY3RvcnkoKipvcHRpb25zKQogICAgICAgIG9wdGlvbnMgPSBzZWxmLl9sb2FkX29wdGlvbnMoY29udGFpbmVyLCAqKm9wdGlvbnMpCgogICAgICAgIGlmIG5vdCBpb2k6CiAgICAgICAgICAgIHJldHVybiBjb250YWluZXIoKQoKICAgICAgICBpZiBpc19zdHJlYW1faW9pbmZvKGlvaSk6CiAgICAgICAgICAgIGNuZiA9IHNlbGYubG9hZF9mcm9tX3N0cmVhbSgKICAgICAgICAgICAgICAgIHR5cGluZy5jYXN0KHR5cGluZy5JTywgaW9pLnNyYyksIGNvbnRhaW5lciwgKipvcHRpb25zCiAgICAgICAgICAgICkKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiBhY19pZ25vcmVfbWlzc2luZyBhbmQgbm90IHBhdGhsaWIuUGF0aChpb2kucGF0aCkuZXhpc3RzKCk6CiAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbmVyKCkKCiAgICAgICAgICAgIGNuZiA9IHNlbGYubG9hZF9mcm9tX3BhdGgoaW9pLnBhdGgsIGNvbnRhaW5lciwgKipvcHRpb25zKQoKICAgICAgICByZXR1cm4gY25mCgoKY2xhc3MgRnJvbVN0cmluZ0xvYWRlck1peGluKExvYWRlck1peGluLCBUZXh0RmlsZXNNaXhpbik6CiAgICAiIiIKICAgIEFic3RyYWN0IGNvbmZpZyBwYXJzZXIgcHJvdmlkZXMgYSBtZXRob2QgdG8gbG9hZCBjb25maWd1cmF0aW9uIGZyb20gc3RyaW5nCiAgICBjb250ZW50IHRvIGhlbHAgaW1wbGVtZW50IHBhcnNlciBvZiB3aGljaCBiYWNrZW5kIGxhY2tzIG9mIHN1Y2ggZnVuY3Rpb24uCgogICAgUGFyc2VyIGNsYXNzZXMgaW5oZXJpdCB0aGlzIGNsYXNzIGhhdmUgdG8gb3ZlcnJpZGUgdGhlIG1ldGhvZAogICAgOm1ldGg6YGxvYWRfZnJvbV9zdHJpbmdgIGF0IGxlYXN0LgogICAgIiIiCiAgICBkZWYgbG9hZF9mcm9tX3N0cmVhbShzZWxmLCBzdHJlYW06IHR5cGluZy5JTywgY29udGFpbmVyOiBHZW5Db250YWluZXJULAogICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpIC0+IEluRGF0YUV4VDoKICAgICAgICAiIiIKICAgICAgICBMb2FkIGNvbmZpZyBmcm9tIGdpdmVuIHN0cmVhbSAnc3RyZWFtJy4KCiAgICAgICAgOnBhcmFtIHN0cmVhbTogQ29uZmlnIGZpbGUgb3IgZmlsZS1saWtlIG9iamVjdAogICAgICAgIDpwYXJhbSBjb250YWluZXI6IGNhbGxibGUgdG8gbWFrZSBhIGNvbnRhaW5lciBvYmplY3QgbGF0ZXIKICAgICAgICA6cGFyYW0ga3dhcmdzOiBvcHRpb25hbCBrZXl3b3JkIHBhcmFtZXRlcnMgdG8gYmUgc2FuaXRpemVkIDo6IGRpY3QKCiAgICAgICAgOnJldHVybjogRGljdC1saWtlIG9iamVjdCBob2xkaW5nIGNvbmZpZyBwYXJhbWV0ZXJzCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYubG9hZF9mcm9tX3N0cmluZyhzdHJlYW0ucmVhZCgpLCBjb250YWluZXIsICoqa3dhcmdzKQoKICAgIGRlZiBsb2FkX2Zyb21fcGF0aChzZWxmLCBmaWxlcGF0aDogc3RyLCBjb250YWluZXI6IEdlbkNvbnRhaW5lclQsCiAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpIC0+IEluRGF0YUV4VDoKICAgICAgICAiIiIKICAgICAgICBMb2FkIGNvbmZpZyBmcm9tIGdpdmVuIGZpbGUgcGF0aCAnZmlsZXBhdGgnLgoKICAgICAgICA6cGFyYW0gZmlsZXBhdGg6IENvbmZpZyBmaWxlIHBhdGgKICAgICAgICA6cGFyYW0gY29udGFpbmVyOiBjYWxsYmxlIHRvIG1ha2UgYSBjb250YWluZXIgb2JqZWN0IGxhdGVyCiAgICAgICAgOnBhcmFtIGt3YXJnczogb3B0aW9uYWwga2V5d29yZCBwYXJhbWV0ZXJzIHRvIGJlIHNhbml0aXplZCA6OiBkaWN0CgogICAgICAgIDpyZXR1cm46IERpY3QtbGlrZSBvYmplY3QgaG9sZGluZyBjb25maWcgcGFyYW1ldGVycwogICAgICAgICIiIgogICAgICAgIHdpdGggc2VsZi5yb3BlbihmaWxlcGF0aCkgYXMgaW5wOgogICAgICAgICAgICByZXR1cm4gc2VsZi5sb2FkX2Zyb21fc3RyZWFtKGlucCwgY29udGFpbmVyLCAqKmt3YXJncykKCgpjbGFzcyBGcm9tU3RyZWFtTG9hZGVyTWl4aW4oTG9hZGVyTWl4aW4sIFRleHRGaWxlc01peGluKToKICAgICIiIgogICAgQWJzdHJhY3QgY29uZmlnIHBhcnNlciBwcm92aWRlcyBhIG1ldGhvZCB0byBsb2FkIGNvbmZpZ3VyYXRpb24gZnJvbSBzdHJpbmcKICAgIGNvbnRlbnQgdG8gaGVscCBpbXBsZW1lbnQgcGFyc2VyIG9mIHdoaWNoIGJhY2tlbmQgbGFja3Mgb2Ygc3VjaCBmdW5jdGlvbi4KCiAgICBQYXJzZXIgY2xhc3NlcyBpbmhlcml0IHRoaXMgY2xhc3MgaGF2ZSB0byBvdmVycmlkZSB0aGUgbWV0aG9kCiAgICA6bWV0aDpgbG9hZF9mcm9tX3N0cmVhbWAgYXQgbGVhc3QuCiAgICAiIiIKICAgIGRlZiBsb2FkX2Zyb21fc3RyaW5nKHNlbGYsIGNvbnRlbnQ6IHN0ciwgY29udGFpbmVyOiBHZW5Db250YWluZXJULAogICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpIC0+IEluRGF0YUV4VDoKICAgICAgICAiIiIKICAgICAgICBMb2FkIGNvbmZpZyBmcm9tIGdpdmVuIHN0cmluZyAnY25mX2NvbnRlbnQnLgoKICAgICAgICA6cGFyYW0gY29udGVudDogQ29uZmlnIGNvbnRlbnQgc3RyaW5nCiAgICAgICAgOnBhcmFtIGNvbnRhaW5lcjogY2FsbGJsZSB0byBtYWtlIGEgY29udGFpbmVyIG9iamVjdCBsYXRlcgogICAgICAgIDpwYXJhbSBrd2FyZ3M6IG9wdGlvbmFsIGtleXdvcmQgcGFyYW1ldGVycyB0byBiZSBzYW5pdGl6ZWQgOjogZGljdAoKICAgICAgICA6cmV0dXJuOiBEaWN0LWxpa2Ugb2JqZWN0IGhvbGRpbmcgY29uZmlnIHBhcmFtZXRlcnMKICAgICAgICAiIiIKICAgICAgICByZXR1cm4gc2VsZi5sb2FkX2Zyb21fc3RyZWFtKGlvLlN0cmluZ0lPKGNvbnRlbnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLCAqKmt3YXJncykKCiAgICBkZWYgbG9hZF9mcm9tX3BhdGgoc2VsZiwgZmlsZXBhdGg6IHN0ciwgY29udGFpbmVyOiBHZW5Db250YWluZXJULAogICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKSAtPiBJbkRhdGFFeFQ6CiAgICAgICAgIiIiCiAgICAgICAgTG9hZCBjb25maWcgZnJvbSBnaXZlbiBmaWxlIHBhdGggJ2ZpbGVwYXRoJy4KCiAgICAgICAgOnBhcmFtIGZpbGVwYXRoOiBDb25maWcgZmlsZSBwYXRoCjx8ZmltX2hvbGV8PgogICAgICAgICIiIgogICAgICAgIHdpdGggc2VsZi5yb3BlbihmaWxlcGF0aCkgYXMgaW5wOgogICAgICAgICAgICByZXR1cm4gc2VsZi5sb2FkX2Zyb21fc3RyZWFtKGlucCwgY29udGFpbmVyLCAqKmt3YXJncykKCiMgdmltOnN3PTQ6dHM9NDpldDoKPHxmaW1fc3VmZml4fD4KICAgICAgICA6cGFyYW0gY29udGFpbmVyOiBjYWxsYmxlIHRvIG1ha2UgYSBjb250YWluZXIgb2JqZWN0IGxhdGVyCiAgICAgICAgOnBhcmFtIGt3YXJnczogb3B0aW9uYWwga2V5d29yZCBwYXJhbWV0ZXJzIHRvIGJlIHNhbml0aXplZCA6OiBkaWN0CgogICAgICAgIDpyZXR1cm46IERpY3QtbGlrZSBvYmplY3QgaG9sZGluZyBjb25maWcgcGFyYW1ldGVycwo8fGZpbV9lbmR8Pg=="]
["aeb66102fedae47d2daa16eae9c3e87701c005ec-1","aeb66102fedae47d2daa16eae9c3e87701c005ec","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRhdGV0aW1lCmZyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKCgpjbGFzcyBQdXJjaGFzZVJlcXVlc3QobW9kZWxzLk1vZGVsKToKICAgICIiIuivt+i0reWNlSAiIiIKCiAgICBQUlFfU1RBVFVTX0NIT0lDRVMgPSAoCiAgICAgICAgKDAsICfojYnnqL8nKSwKICAgICAgICAoMSwgJ+W3suWuoeaJuScpLAogICAgICAgICgyLCAn5bey5YWz6ZetJykKICAgICkKICAgIGlkID0gbW9kZWxzLkF1dG9GaWVsZChwcmltYXJ5X2tleT1UcnVlKQogICAgcHJxX2lkZW50aWZ5ID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTE1LCB2ZXJib3NlX25hbWU9J+ivt+i0reWNlee8luWPtycpCiAgICBwcnFfc2VyaWFsID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTQsIHZlcmJvc2VfbmFtZT0n6K+36LSt5Y2V5rWB5rC0JykKICAgIG9yZ2FuaXphdGlvbiA9IG1vZGVscy5Gb3JlaWduS2V5KCdiYXNlLk9yZ2FuaXphdGlvbicsIHJlbGF0ZWRfbmFtZT0nb3JnX3BycScsIHZlcmJvc2VfbmFtZT0n57uE57uHJywgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFKQogICAgcHJxX3R5cGUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjAsIHZlcmJvc2VfbmFtZT0n6ZyA5rGC57G75Z6LJykKICAgIG1hdGVyaWFsX3R5cGUgPSBtb2RlbHMuRm9yZWlnbktleSgnYmFzZS5NYXRlcmlhbFR5cGUnLCB2ZXJib3NlX25hbWU9J+eJqeaWmeexu+WIqycsIG9uX2RlbGV0ZT1tb2RlbHMuQ0FTQ0FERSkKICAgIHBycV9kZXBhcnRtZW50ID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTIwLCB2ZXJib3NlX25hbWU9J+ivt+i0remDqOmXqCcpCiAgICBwcnFfZGF0ZSA9IG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGF0ZXRpbWUuZGF0ZXRpbWUubm93LCB2ZXJib3NlX25hbWU9J+ivt+i0reaXpeacnycpCiAgICBwcnFfcmVtYXJrcyA9IG1vZGVscy5UZXh0RmllbGQobWF4X2xlbmd0aD00MDAsIHZlcmJvc2VfbmFtZT0n6K+36LSt5aSH5rOoJywgbnVsbD1UcnVlKQogICAgcHJxX3N0YXR1cyA9IG1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcz1QUlFfU1RBVFVTX0NIT0lDRVMsIHZlcmJvc2VfbmFtZT0n6K+36LSt54q25oCBJykKICAgIHBycV9jcmVhdG9yID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTIwLCB2ZXJib3NlX25hbWU9J+ivt+i0reWIm+W7uuWQjeWtlycpCiAgICBwcnFfY3JlYXRvcl9pZGVudGlmeSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yMCwgdmVyYm9zZV9uYW1lPSLor7fotK3ljZXliJvlu7rogIXlt6Xlj7ciKQogICAgcHJxX2NyZWF0ZWRfYXQgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChhdXRvX25vd19hZGQ9VHJ1ZSwgdmVyYm9zZV9uYW1lPSfor7fotK3liJvlu7rml7bpl7QnKQogICAgcHJxX2Nsb3NlciA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yMCwgdmVyYm9zZV9uYW1lPSfor7fotK3lhbPpl63ogIUnLCBudWxsPVRydWUpCiAgICBwcnFfY2xvc2VyX2lkZW50aWZ5ID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTIwLCB2ZXJib3NlX25hbWU9J+ivt+i0reWFs+mXreiAheW3peWPtycsIG51bGw9VHJ1ZSkKICAgIHBycV9jbG9zZWRfYXQgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChhdXRvX25vd19hZGQ9VHJ1ZSwgdmVyYm9zZV9uYW1lPSfor7fotK3lhbPpl63ml7bpl7QnLCBudWxsPVRydWUpCiAgICBwcnFfY2xvc2VSZWFzb24gPSBtb2RlbHMuVGV4dEZpZWxkKG1heF9sZW5ndGg9MjAwLCB2ZXJib3NlX25hbWU9J+ivt+i0reWFs+mXreWOn+WboCcsIG51bGw9VHJ1ZSkKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIGRiX3RhYmxlID0gJ2RiX3B1cmNoYXNlX3JlcXVlc3QnCiAgICAgICAgdmVyYm9zZV9uYW1lID0gIuivt+i0reWNlSIKICAgICAgICB2ZXJib3NlX25hbWVfcGx1cmFsID0gdmVyYm9zZV9uYW1lCgogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYucHJxX2lkZW50aWZ5CgoKY2xhc3MgUHVyY2hhc2VSZXF1ZXN0RGV0YWlsKG1vZGVscy5Nb2RlbCk6CiAgICAiIiLor7fotK3ljZXnianmlpnmmI7nu4YiIiIKICAgICMg6L+Z6YeM6L+Y5rKh5a6M5ZaE77yM6ZyA6KaB5bu656uL5LiO54mp5paZ5bqT5a2Y55qE5YWz57O7CiAgICBQUkRfVVNFX1NUQVRVU19DSE9JQ0VTID0gKAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgKDAsICfmnKrkvb/nlKgnKSwKICAgICAgICAoMSwgJ+W3suS9v+eUqCcpCjx8ZmltX2VuZHw+"]
["95f311672e253fce309ab36a85fa1c2502c3c532-2","95f311672e253fce309ab36a85fa1c2502c3c532","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCB0aW1lCmltcG9ydCBqc29uCmltcG9ydCB1bml0dGVzdApmcm9tIGNvbmZpZ3BhcnNlciBpbXBvcnQgQ29uZmlnUGFyc2VyCgpmcm9tIGluc3RhbGxlZF9jbGllbnRzLkRhdGFGaWxlVXRpbENsaWVudCBpbXBvcnQgRGF0YUZpbGVVdGlsCmZyb20gR2Vub21lRmlsZVV0aWwuR2Vub21lRmlsZVV0aWxJbXBsIGltcG9ydCBHZW5vbWVGaWxlVXRpbApmcm9tIEdlbm9tZUZpbGVVdGlsLkdlbm9tZUZpbGVVdGlsU2VydmVyIGltcG9ydCBNZXRob2RDb250ZXh0CmZyb20gaW5zdGFsbGVkX2NsaWVudHMuV29ya3NwYWNlQ2xpZW50IGltcG9ydCBXb3Jrc3BhY2UgYXMgd29ya3NwYWNlU2VydmljZQoKCmNsYXNzIEdlbm9tZUZpbGVVdGlsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CiAgICAgICAgdG9rZW4gPSBvcy5lbnZpcm9uLmdldCgnS0JfQVVUSF9UT0tFTicsIE5vbmUpCiAgICAgICAgIyBXQVJOSU5HOiBkb24ndCBjYWxsIGFueSBsb2dnaW5nIG1ldGhvZHMgb24gdGhlIGNvbnRleHQgb2JqZWN0LAogICAgICAgICMgaXQnbGwgcmVzdWx0IGluIGEgTm9uZVR5cGUgZXJyb3IKICAgICAgICBjbHMuY3R4ID0gTWV0aG9kQ29udGV4dChOb25lKQogICAgICAgIGNscy5jdHgudXBkYXRlKHsndG9rZW4nOiB0b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3ZlbmFuY2UnOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3NlcnZpY2UnOiAnR2Vub21lRmlsZVV0aWwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXRob2QnOiAncGxlYXNlX25ldmVyX3VzZV9pdF9pbl9wcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWV0aG9kX3BhcmFtcyc6IFtdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0sCiAgICAgICAgICAgICAgICAgICAgICAgICdhdXRoZW50aWNhdGVkJzogMX0pCiAgICAgICAgY29uZmlnX2ZpbGUgPSBvcy5lbnZpcm9uLmdldCgnS0JfREVQTE9ZTUVOVF9DT05GSUcnLCBOb25lKQogICAgICAgIGNscy5jZmcgPSB7fQogICAgICAgIGNvbmZpZyA9IENvbmZpZ1BhcnNlcigpCiAgICAgICAgY29uZmlnLnJlYWQoY29uZmlnX2ZpbGUpCiAgICAgICAgZm9yIG5hbWV2YWwgaW4gY29uZmlnLml0ZW1zKCdHZW5vbWVGaWxlVXRpbCcpOgogICAgICAgICAgICBjbHMuY2ZnW25hbWV2YWxbMF1dID0gbmFtZXZhbFsxXQogICAgICAgIGNscy53c1VSTCA9IGNscy5jZmdbJ3dvcmtzcGFjZS11cmwnXQogICAgICAgIGNscy53c0NsaWVudCA9IHdvcmtzcGFjZVNlcnZpY2UoY2xzLndzVVJMLCB0b2tlbj10b2tlbikKICAgICAgICBjbHMuc2VydmljZUltcGwgPSBHZW5vbWVGaWxlVXRpbChjbHMuY2ZnKQogICAgICAgICMgZ2V0IG1ldGFnZW5vbWUgZGF0YS4KICAgICAgICBjbHMuZ2ZmX3BhdGggPSAiZGF0YS9tZXRhZ2Vub21lcy90b3kvbWV0YWdlbm9tZS5nZmYiCiAgICAgICAgY2xzLmZhc3RhX3BhdGggPSAiZGF0YS9tZXRhZ2Vub21lcy90b3kvbWV0YWdlbm9tZS5mYSIKICAgICAgICAjIGNscy5nZmZfcGF0aCA9ICJkYXRhL21ldGFnZW5vbWVzL3RveS9UZXN0X3YxLjAuZ2VuZS5nZmYiCiAgICAgICAgIyBjbHMuZmFzdGFfcGF0aCA9ICJkYXRhL21ldGFnZW5vbWVzL3RveS9UZXN0X3YxLjAuZmEiCiAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGNscy5mYXN0YV9wYXRoKSBvciBub3Qgb3MucGF0aC5pc2ZpbGUoY2xzLmdmZl9wYXRoKToKICAgICAgICAgICAgcmFpc2UgSW5wdXRFcnJvcihmJ0ZpbGVzIHtjbHMuZ2ZmX3BhdGh9IGFuZC9vciB7Y2xzLmZhc3RhX3BhdGh9IG5vdCBpbiB0ZXN0IGRpcmVjdG9yeSAnKQoKICAgICAgICBzdWZmaXggPSBpbnQodGltZS50aW1lKCkgKiAxMDAwKQogICAgICAgIGNscy53c05hbWUgPSAidGVzdF9HZW5vbWVGaWxlVXRpbF8iICsgc3RyKHN1ZmZpeCkKICAgICAgICBjbHMud3NDbGllbnQuY3JlYXRlX3dvcmtzcGFjZSh7J3dvcmtzcGFjZSc6IGNscy53c05hbWV9KQoKICAgICAgICBwcmludCgnVXBsb2FkaW5nIEdGRiBmaWxlJykKICAgICAgICByZXN1bHQgPSBjbHMuc2VydmljZUltcGwuZmFzdGFfZ2ZmX3RvX21ldGFnZW5vbWUoY2xzLmN0eCwgewogICAgICAgICAgICAnd29ya3NwYWNlX25hbWUnOiBjbHMud3NOYW1lLAogICAgICAgICAgICAnZ2Vub21lX25hbWUnOiAnTXlNZXRhZ2Vub21lJywKICAgICAgICAgICAgJ2Zhc3RhX2ZpbGUnOiB7J3BhdGgnOiBjbHMuZmFzdGFfcGF0aH0sCiAgICAgICAgICAgICdnZmZfZmlsZSc6IHsncGF0aCc6IGNscy5nZmZfcGF0aH0sCiAgICAgICAgICAgICdzb3VyY2UnOiAnR0ZGJywKICAgICAgICAgICAgJ3RheG9uX2lkJzogJzM3MDInLAogICAgICAgICAgICAndHlwZSc6ICdSZWZlcmVuY2UnLAogICAgICAgICAgICAnZ2Vub21lX3R5cGUnOiAnTWV0YWdlbm9tZScsCiAgICAgICAgICAgICdnZW5lcmF0ZV9taXNzaW5nX2dlbmVzJzogVHJ1ZQogICAgICAgIH0pWzBdCiAgICAgICAgZGF0YV9maWxlX2NsaSA9IERhdGFGaWxlVXRpbChvcy5lbnZpcm9uWydTREtfQ0FMTEJBQ0tfVVJMJ10pCiAgICAgICAgY2xzLm1ldGFnZW5vbWVfcmVmID0gcmVzdWx0WydtZXRhZ2Vub21lX3JlZiddCiAgICAgICAgY2xzLmdlbm9tZV9vcmlnID0gZGF0YV9maWxlX2NsaS5nZXRfb2JqZWN0cygKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICB7J29iamVjdF9yZWZzJzogW3Jlc3VsdFsnbWV0YWdlbm9tZV9yZWYnXV19KVsnZGF0YSddWzBdWydkYXRhJ10KCjx8ZmltX2VuZHw+"]
["95eae071e825cefd83245d8f66b5502f68e969aa-3","95eae071e825cefd83245d8f66b5502f68e969aa","PHxmaW1fcHJlZml4fD4KIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgY2xhY2tzIGZyYW1ld29yay4KIwojICBodHRwOi8vY2xhY2tzLXByb2plY3Qub3JnCiMKIyBDb3B5cmlnaHQ6CiMgIChDKSAyMDEwLTIwMTIgR09OSUNVUyBHbWJILCBHZXJtYW55LCBodHRwOi8vd3d3LmdvbmljdXMuZGUKIwojIExpY2Vuc2U6CiMgIEdQTC0yOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1sCiMKIyBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcHJvamVjdCdzIHRvcC1sZXZlbCBkaXJlY3RvcnkgZm9yIGRldGFpbHMuCgppbXBvcnQgbGRhcApmcm9tIGNsYWNrcy5hZ2VudC5sZGFwX3V0aWxzIGltcG9ydCBMREFQSGFuZGxlcgpmcm9tIGNsYWNrcy5waG9uZS5yZXNvbHZlciBpbXBvcnQgUGhvbmVOdW1iZXJSZXNvbHZlcgpmcm9tIGNsYWNrcy5jb21tb24uY29tcG9uZW50cy5jYWNoZSBpbXBvcnQgY2FjaGUKCgpjbGFzcyBMREFQTnVtYmVyUmVzb2x2ZXIoUGhvbmVOdW1iZXJSZXNvbHZlcik6CiAgICAiIiIKICAgIENvbmZpZ3VyYXRpb24ga2V5cyBmb3Igc2VjdGlvbiAqKnJlc29sdmVyLWxkYXAqKgoKICAgICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICArIEtleSAgICAgICAgICAgICAgfCBGb3JtYXQgICAgICsgIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgKz09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKICAgICsgcHJpb3JpdHkgICAgICAgICB8IEludGVnZXIgICAgKyBQcmlvcml0eSBmb3IgdGhpcyByZXNvbHZlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKICAgICIiIgogICAgcHJpb3JpdHkgPSA0CgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHN1cGVyKExEQVBOdW1iZXJSZXNvbHZlciwgc2VsZikuX19pbml0X18oKQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYucHJpb3JpdHkgPSBmbG9hdChzZWxmLmVudi5jb25maWcuZ2V0KCJyZXNvbHZlci1sZGFwLnByaW9yaXR5IiwKICAgICAgICAgICAgICAgIGRlZmF1bHQ9c3RyKHNlbGYucHJpb3JpdHkpKSkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICMgbGVhdmUgZGVmYXVsdCBwcmlvcml0eQogICAgICAgICAgICBwYXNzCgogICAgQGNhY2hlKHR0bD0zNjAwKQogICAgZGVmIHJlc29sdmUoc2VsZiwgbnVtYmVyKToKICAgICAgICBudW1iZXIgPSBzZWxmLnJlcGxhY2VOdW1iZXIobnVtYmVyKQoKICAgICAgICBmaWx0ciA9IGxkYXAuZmlsdGVyLmZpbHRlcl9mb3JtYXQoIigmKHVpZD0qKSh0ZWxlcGhvbmVOdW1iZXI9JXMpKSIsIFtzdHIobnVtYmVyKV0pCiAgICAgICAgYXR0cnMgPSBbJ2NuJywgJ3VpZCcsICd0ZWxlcGhvbmVOdW1iZXInLCAnanBlZ1Bob3RvJ10KCiAgICAgICAgIyBzZWFyY2ggbGRhcAogICAgICAgIGxoID0gTERBUEhhbmRsZXIuZ2V0X2luc3RhbmNlKCkKICAgICAgICB3aXRoIGxoLmdldF9oYW5kbGUoKSBhcyBjb25uOgogICAgICAgICAgICByZXMgPSBjb25uLnNlYXJjaF9zKGxoLmdldF9iYXNlKCksIGxkYXAuU0NPUEVfU1VCVFJFRSwgZmlsdHIsIGF0dHJzKQogICAgICAgICAgICBpZiBsZW4ocmVzKSA9PSAxOgogICAgICAgICAgICAgICAgcmVzdWx0ID0gewogICAgICAgICAgICAgICAgICAgICAgICAnY29tcGFueV9pZCc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAnY29tcGFueV9uYW1lJzogJ0ludGVybicsCiAgICAgICAgICAgICAgICAgICAgICAgICdjb21wYW55X3Bob25lJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICdjb21wYW55X2RldGFpbF91cmwnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRhY3RfaWQnOiByZXNbMF1bMV1bJ3VpZCddWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAnY29udGFjdF9uYW1lJzogdW5pY29kZShyZXNbMF1bMV1bJ2NuJ11bMF0sICdVVEYtOCcpLAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc291cmNlJzogJ2xkYXAnLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRhY3RfcGhvbmUnOiByZXNbMF1bMV1bJ3RlbGVwaG9uZU51bWJlciddWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAnY29udGFjdF9kZXRhaWxfdXJsJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICdhdmF0YXInOiByZXNbMF1bMV1bJ2pwZWdQaG90byddWzBdIGlmICdqcGVnUGhvdG8nIGluIHJlc1swXVsxXSBlbHNlIE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICdsZGFwX3VpZCc6IHJlc1swXVsxXVsndWlkJ11bMF0sCjx8ZmltX2VuZHw+"]
["255c3f90d5ac529edca356d96601922e4e6aa00a-1","255c3f90d5ac529edca356d96601922e4e6aa00a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgcGlrYQppbXBvcnQgdGltZQppbXBvcnQgZGF0ZXRpbWUKCmNvbm4gPSBwaWthLkJsb2NraW5nQ29ubmVjdGlvbigKICAgIHBpa2EuQ29ubmVjdGlvblBhcmFtZXRlcnMoaG9zdD0nbG9jYWxob3N0JykpCmNoID0gY29ubi5jaGFubmVsKCkKCmV4Y2hhbmdlX25hbWUgPSAnY3M1MDJfMTgwMl9leCcKcXVldWVfbmFtZV93YXJuaW5nID0gJ3Ffcm9ja2V0X3dhcm5pbmcnCnF1ZXVlX25hbWVfZXJyb3IgPSAncV9yb2NrZXRfZXJyb3InCgoKZGVmIGNhbGxiYWNrKGNoLCBtZXRob2QsIHByb3BlcnRpZXMsIGJvZHkpOgogICAgdGltZS5zbGVlcCgyKQogICAgY2guYmFzaWNfYWNrKGRlbGl2ZXJ5X3RhZz1tZXRob2QuZGVsaXZlcnlfdGFnKQogICAgcHJpbnQoJyBbeF0gRE9ORSAlcyBmcm9tICVzJyAlIChib2R5LCBtZXRob2Qucm91dGluZ19rZXkpKQoKCnByaW50KCcgWypdIFdhaXRpbmcgZm9yIG1lc3NhZ2VzLicpCmNoLmJhc2ljX3FvcyhwcmVmZXRjaF9jb3VudD0xKQpjaC5iYXNpY19jb25zdW1lKGNhbGxiYWNrLCBxdWV1ZT1xdWV1ZV9uYW1lX3dhcm5pbmcpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2guYmFzaWNfY29uc3VtZShjYWxsYmFjaywgcXVldWU9cXVldWVfbmFtZV9lcnJvcikKY2guc3RhcnRfY29uc3VtaW5nKCkKPHxmaW1fZW5kfD4="]
["3ad2251677f3117365cc4d48ac37adf8a0231a7f-3","3ad2251677f3117365cc4d48ac37adf8a0231a7f","PHxmaW1fcHJlZml4fD4KY2xhc3MgQmFzZVNlZWtTZXQob2JqZWN0KToKICBkZWYgX19pbml0X18oc2VsZiwgc2V0cyk6CiAgICBzZWxmLl9zZXRzID0gbGlzdChzZXRzKQoKICBkZWYgX19jb250YWluc19fKHNlbGYsIGl0ZW0pOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCgogIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBzZWVrKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgIiIiVXNlIGBzZWVrYCB0byBpbmRleCBpbnRvIGBzZWxmYCBhbmQgcmV0dXJuIHNldCBvZiBhdmFpbGFibGUgbGV0dGVycy4iIiIKICAgIGlmIGlzaW5zdGFuY2Uoc2Vlaywgc2xpY2UpOgogICAgICBzdGFydCwgc3RvcCwgc3RlcCA9IHNlZWsuc3RhcnQsIHNlZWsuc3RvcCwgc2Vlay5zdGVwCiAgICBlbGlmIGlzaW5zdGFuY2Uoc2VlaywgaW50KToKPHxmaW1fZW5kfD4="]
["e90a831a87f595b267712ff12d31e84189e5878a-1","e90a831a87f595b267712ff12d31e84189e5878a","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwppbXBvcnQgZGF0ZXRpbWUKZnJvbSBseG1sIGltcG9ydCBldHJlZQpmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IFN1bQoKY2xhc3MgTWl4KG1vZGVscy5Nb2RlbCk6CiAgICB0aXRsZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNTUpCiAgICBzbHVnID0gbW9kZWxzLlNsdWdGaWVsZCgpCiAgICBpY29uID0gbW9kZWxzLkltYWdlRmllbGQodXBsb2FkX3RvPSJpY29ucy8iKQogICAgc3RhcnQgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChkZWZhdWx0PWxhbWJkYTogZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkucmVwbGFjZShob3VyPTEyLCBtaW51dGU9MzAsIHNlY29uZD0wLCBtaWNyb3NlY29uZD0wKSkKICAgIGVuZCA9IG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9bGFtYmRhOiBkYXRldGltZS5kYXRldGltZS5ub3coKS5yZXBsYWNlKGhvdXI9MTQsIG1pbnV0ZT0wMCwgc2Vjb25kPTAsIG1pY3Jvc2Vjb25kPTApKQogICAgcGxheWxpc3QgPSBtb2RlbHMuVVJMRmllbGQodmVyaWZ5X2V4aXN0cz1UcnVlKQogICAgdHJhY2tzX2lucHV0ID0gbW9kZWxzLlRleHRGaWVsZChibGFuaz1UcnVlLCBudWxsPVRydWUpCiAgICB0cmFja3MgPSBtb2RlbHMuTWFueVRvTWFueUZpZWxkKCdUcmFjaycsIHRocm91Z2g9J01peFRyYWNrJykKICAgIAogICAgY2xhc3MgTWV0YToKICAgICAgICBvcmRlcmluZyA9ICgnLXN0YXJ0JywpCiAgICAKICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi50aXRsZQogICAgICAgIAogICAgZGVmIHNhdmUoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBpZiBzZWxmLnRyYWNrc19pbnB1dDoKICAgICAgICAgICAgIyBkZWxldGUgYWxsCiAgICAgICAgICAgIHNlbGYudHJhY2tzLmNsZWFyKCkKICAgICAgICAgICAgCiAgICAgICAgICAgIGZvciBjb3VudGVyLCB0cmFjayBpbiBlbnVtZXJhdGUoc2VsZi50cmFja3NfaW5wdXQuc3BsaXQoJ1xyXG4nKSk6CiAgICAgICAgICAgICAgICB0cmFjaywgY3JlYXRlZCA9IFRyYWNrLm9iamVjdHMuZ2V0X29yX2NyZWF0ZSh0cmFja191cmk9dHJhY2spCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmIG5vdCB0cmFjay5jb21wbGV0ZWQ6CiAgICAgICAgICAgICAgICAgICAgdHJhY2suY29tcGxldGUoKQogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgTWl4VHJhY2sub2JqZWN0cy5jcmVhdGUobWl4PXNlbGYsIHRyYWNrPXRyYWNrLCBtaXh0cmFja19udW1iZXI9Y291bnRlcikKCiAgICAgICAgICAgIHNlbGYudHJhY2tzX2lucHV0ID0gTm9uZQogICAgICAgIHJldHVybiBzdXBlcihNaXgsIHNlbGYpLnNhdmUoKmFyZ3MsICoqa3dhcmdzKQogICAgCiAgICBAbW9kZWxzLnBlcm1hbGluawo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgZ2V0X2Fic29sdXRlX3VybChzZWxmKToKICAgICAgICByZXR1cm4gKCdtaXgnLCAoKSwgeyAnc2x1Zyc6IHNlbGYuc2x1ZyB9KQogICAgCiAgICBAcHJvcGVydHkKPHxmaW1fZW5kfD4="]
["112e8bdf43faf21e787cc32e5f94b4693cd1be4a-4","112e8bdf43faf21e787cc32e5f94b4693cd1be4a","PHxmaW1fcHJlZml4fD4KZnJvbSAucDMxaV93YXNfbW9kaWZpZWRfYnkgaW1wb3J0IFAzMWlXYXNNb2RpZmllZEJ5CmZyb20gZGF0YWNsYXNzZXMgaW1wb3J0IGRhdGFjbGFzcwoKCkBkYXRhY2xhc3MKY2xhc3MgUDExMGlXYXNBdWdtZW50ZWRCeShQMzFpV2FzTW9kaWZpZWRCeSk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIFVSSSA9ICJodHRwOi8vZXJsYW5nZW4tY3JtLm9yZy9jdXJyZW50L1AxMTBpX3dhc19hdWdtZW50ZWRfYnkiCjx8ZmltX2VuZHw+"]
["3aed2f9990c8ab2a4c2437f4069cb302c77223a6-3","3aed2f9990c8ab2a4c2437f4069cb302c77223a6","PHxmaW1fcHJlZml4fD4KJycnCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcmVxdWVzdCB1dGlsaXR5IGZ1bmN0aW9ucy4KJycnCgoKPHxmaW1fZW5kfD4="]
["255854bb7b7e13efd58629bb3236208d5af3d5b8-5","255854bb7b7e13efd58629bb3236208d5af3d5b8","PHxmaW1fcHJlZml4fD4KIiIiCkFib3V0TWUgRGF0YXNldCBkZXRhaWxzIGNhbiBiZSBmb3VuZCBvbmxpbmUgYXRgYGh0dHBzOi8vd3d3LnN5bmFwc2Uub3JnLyMhU3luYXBzZTpzeW4xODQ5MjgzNy93aWtpLzU5MjU4MWBgLgoKU29tZSBpbXBvcnRhbnQgc3RhdHM6CiAgICAtIFRoaXMgZGF0YXNldCBjb250YWlucyB1bmlxdWUgZGF0YSBmb3IgMzQ0OCBwYXJ0aWNpcGFudHMuCiAgICAtIGBgYWxjb2hvbGBgIGhhcyAxMCBOQXMgKDEwLzM0NDggPSAwLjI5JSkKICAgIC0gYGBiYXNpY19leHBlbnNlc2BgIGhhcyAyMCBOQXMgKDIwLzM0NDggPSAwLjU4JSkKICAgIC0gYGBjYWZmZWluZWBgIGhhcyAzMCBOQXMgKDMwLzM0NDggPSAwLjg3JSkKICAgIC0gYGBkYWlseV9hY3Rpdml0aWVzYGAgaGFzIDYgTkFzICg2LzM0NDggPSAwLjE3JSkKICAgIC0gYGBkYWlseV9zbW9raW5nYGAgaGFzIDExIE5BcyAoMTEvMzQ0OCA9IDAuMzIlKQogICAgLSBgYGVkdWNhdGlvbmBgIGhhcyAxNyBOQXMgKDE3LzM0NDggPSAwLjQ5JSkKICAgIC0gYGBmbGV4aWJsZV93b3JrX2hvdXJzYGAgaGFzIDEwNSBOQXMgKDEwNS8zNDQ4ID0gMy4wNSUpCiAgICAtIGBgZ2VuZGVyYGAgaGFzIDggTkFzICg4LzM0NDggPSAwLjIzJSkKICAgIC0gYGBnb29kX2xpZmVgYCBoYXMgMTAgTkFzICgxMC8zNDQ4ID0gMC4yOSUpCiAgICAtIGBgaGlzcGFuaWNgYCBoYXMgNyBOQXMgKDcvMzQ0OCA9IDAuMjAlKQogICAgLSBgYGluY29tZWBgIGhhcyAyOCBOQXMgKDI4LzM0NDggPSAwLjgxJSkKICAgIC0gYGBtYXJpdGFsYGAgaGFzIDcgTkFzICg3LzM0NDggPSAwLjIwJSkKICAgIC0gYGByYWNlYGAgaGFzIDggTkFzICg4LzM0NDggPSAwLjIzJSkKICAgIC0gYGBzbW9raW5nX3N0YXR1c2BgIGhhcyAyMSBOQXMgKDIxLzM0NDggPSAwLjYxJSkKPHxmaW1faG9sZXw+CiAgICAtIGBgd29ya19zY2hlZHVsZWBgIGhhcyAxMTAgTkFzICgxMTAvMzQ0OCA9IDMuMTklKQoKVGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhpcyBtb2R1bGUgaXMgdG86CiAxLiByZW1vdmUgTkFzIGZvciBwYXJ0aWNpcGFudHMgaW4gYWxsIGNvbHVtbnMsIGJ1dGBgbWVub3BhdXNlYGAsIGBgcmVjZW50X2JpcnRoc2BgIGFuZGBgY3VycmVudF9wcmVnbmFudGBgLgogMi4gRHJvcCBkdXBsaWNhdGVzIGJhc2VkIG9uIHBhcnRpY2lwYW50IGlkLCByZXRhaW5pbmcgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhIHBhcnRpY2lwYW50IGlkLgoKVGhlIGRlZmF1bHQgZmluYWwgZGF0YXNldCBzaXplIGlzIDMwMTkuCgoiIiIKaW1wb3J0IG9zCgpmcm9tIHRhc3JpZi5kYXRhX3JlYWRlcnMuc2xlZXBfaGVhbHRoIGltcG9ydCBTbGVlcEhlYWx0aERhdGFzZXQKZnJvbSB0YXNyaWYucHJvY2Vzc2luZ19waXBlbGluZSBpbXBvcnQgU2VxdWVuY2VPcGVyYXRvcgpmcm9tIHRhc3JpZi5wcm9jZXNzaW5nX3BpcGVsaW5lLnBhbmRhcyBpbXBvcnQgRHJvcER1cGxpY2F0ZXNPcGVyYXRvciwgRHJvcE5BT3BlcmF0b3IKCnNsZWVwaGVhbHRoX3BhdGggPSBvcy5lbnZpcm9uWyJTTEVFUEhFQUxUSCJdCgpwaXBlbGluZSA9IFNlcXVlbmNlT3BlcmF0b3IoCiAgICBbCiAgICAgICAgU2xlZXBIZWFsdGhEYXRhc2V0KHNsZWVwaGVhbHRoX3BhdGgsICJhYm91dG1lIiksCiAgICAgICAgRHJvcE5BT3BlcmF0b3IoCiAgICAgICAgICAgIHN1YnNldD1bCiAgICAgICAgICAgICAgICAiYWxjb2hvbCIsCiAgICAgICAgICAgICAgICAiYmFzaWNfZXhwZW5zZXMiLAogICAgICAgICAgICAgICAgImNhZmZlaW5lIiwKICAgICAgICAgICAgICAgICJkYWlseV9hY3Rpdml0aWVzIiwKICAgICAgICAgICAgICAgICJkYWlseV9zbW9raW5nIiwKICAgICAgICAgICAgICAgICJlZHVjYXRpb24iLAogICAgICAgICAgICAgICAgImZsZXhpYmxlX3dvcmtfaG91cnMiLAogICAgICAgICAgICAgICAgImdlbmRlciIsCiAgICAgICAgICAgICAgICAiZ29vZF9saWZlIiwKICAgICAgICAgICAgICAgICJoaXNwYW5pYyIsCiAgICAgICAgICAgICAgICAiaW5jb21lIiwKICAgICAgICAgICAgICAgICJyYWNlIiwKICAgICAgICAgICAgICAgICJ3b3JrX3NjaGVkdWxlIiwKICAgICAgICAgICAgICAgICJ3ZWlnaHQiLAogICAgICAgICAgICAgICAgInNtb2tpbmdfc3RhdHVzIiwKICAgICAgICAgICAgICAgICJtYXJpdGFsIiwKICAgICAgICAgICAgXQogICAgICAgICksCiAgICAgICAgRHJvcER1cGxpY2F0ZXNPcGVyYXRvcihzdWJzZXQ9InBhcnRpY2lwYW50SWQiLCBrZWVwPSJsYXN0IiksCiAgICBdCikKCmRmID0gcGlwZWxpbmUucHJvY2VzcygpCgpwcmludChkZikKPHxmaW1fc3VmZml4fD4KICAgIC0gYGB3ZWlnaHRgYCBoYXMgNTkgTkFzICg1OS8zNDQ4ID0gMS43MSUpCiAgICAtIGBgbWVub3BhdXNlYGAgaGFzIDIzNDAgTkFzICgyMzQwLzM0NDggPSA2Ny44NyUpCiAgICAtIGBgcmVjZW50X2JpcnRoc2BgIGhhcyAyMzA5IE5BcyAoMjMwOS8zNDQ4ID0gNjYuOTclKQogICAgLSBgYGN1cnJlbnRfcHJlZ25hbnRgYCBoYXMgMzQzOCBOQXMgKDM0MzgvMzQ0OCA9IDk5LjcxJSkKPHxmaW1fZW5kfD4="]
["2867f41016fe8ff79b82b105e2be402187375f38-2","2867f41016fe8ff79b82b105e2be402187375f38","PHxmaW1fcHJlZml4fD4KaW5wdXQoKQp4PXNvcnRlZChtYXAoaW50LGlucHV0KCkuc3BsaXQoKSkpCjx8ZmltX2hvbGV8PgpwcmludChhKzEpCjx8ZmltX3N1ZmZpeHw+CmE9MApmb3IgaSBpbiB4OgogIGlmIGk+YSsxOiBicmVhawogIGErPWkKPHxmaW1fZW5kfD4="]
["c2975746851743bdec04e0be4b6a7f7e2a07407e-2","c2975746851743bdec04e0be4b6a7f7e2a07407e","PHxmaW1fcHJlZml4fD4KCmltcG9ydCBwYXRobGliCmltcG9ydCBvcwppbXBvcnQgbWF0aAppbXBvcnQgZ2xvYgppbXBvcnQgcmFuZG9tCmltcG9ydCB3YXJuaW5ncwoKaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gdGVuc29yZmxvdy5rZXJhcyBpbXBvcnQgZGF0YXNldHMsIGxheWVycywgbW9kZWxzCmZyb20gdGVuc29yZmxvdy5rZXJhcy5jYWxsYmFja3MgaW1wb3J0IENhbGxiYWNrCgpucC5zZXRfcHJpbnRvcHRpb25zKHByZWNpc2lvbj0xMCkKCndhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCdpZ25vcmUnKQoKCgpXX0g9MjQwCgoKd2VpZ3Roc19wYXRoID0gb3MucGF0aC5hYnNwYXRoKCIuLi93ZWlnaHRzL0RZbmFtaWNDTk4vIikKCgoKZGVmIHBsb3RBY2MoaGlzdG9yeSxuYW1lKToKICAgIHBsdC5maWd1cmUoKQogICAgcGx0LnBsb3QoaGlzdG9yeS5oaXN0b3J5WydiaW5hcnlfYWNjdXJhY3knXSkKICAgIHBsdC5wbG90KGhpc3RvcnkuaGlzdG9yeVsndmFsX2JpbmFyeV9hY2N1cmFjeSddKQogICAgcGx0LnRpdGxlKCdtb2RlbCBhY2N1cmFjeScpCiAgICBwbHQueWxhYmVsKCdhY2N1cmFjeScpCiAgICBwbHQueGxhYmVsKCdlcG9jaCcpCiAgICBwbHQubGVnZW5kKFsndHJhaW4nLCAndmFsJ10sIGxvYz0ndXBwZXIgbGVmdCcpCiAgICBwbHQuc2F2ZWZpZygiLi4vcGxvdHMvIituYW1lKyJfYWNjdXJhY3kucG5nIikKCmRlZiBwbG90TG9zcyhoaXN0b3J5LG5hbWUpOgogICAgcGx0LmZpZ3VyZSgpCiAgICBwbHQucGxvdChoaXN0b3J5Lmhpc3RvcnlbJ2xvc3MnXSkKICAgIHBsdC5wbG90KGhpc3RvcnkuaGlzdG9yeVsndmFsX2xvc3MnXSkKICAgIHBsdC50aXRsZSgnbW9kZWwgbG9zcycpCiAgICBwbHQueWxhYmVsKCdsb3NzJykKICAgIHBsdC54bGFiZWwoJ2Vwb2NoJykKICAgIHBsdC5sZWdlbmQoWyd0cmFpbicsICd2YWwnXSwgbG9jPSd1cHBlciBsZWZ0JykKICAgIHBsdC5zYXZlZmlnKCIuLi9wbG90cy8iK25hbWUrIl9sb3NzLnBuZyIpCgppbXBvcnQgcGFuZGFzIGFzIHBkCmRlZiBzYXZlSGlzdG9yeShoaXN0b3J5LCBuYW1lKTogCiAgICBwYXRoID0gIi4uL2hpc3RvcnkvIiArIG5hbWUgKyAnLmNzdicKICAgIGRpY3Rpb25hcnkgPSBoaXN0b3J5Lmhpc3RvcnkKICAgIHRhbSA9IGxlbiggZGljdGlvbmFyeVsnbG9zcyddICkKICAgIHdoaWxlIGxlbihkaWN0aW9uYXJ5Wyd2YWxfbG9zcyddKSAhPSB0YW06CiAgICAgIGRpY3Rpb25hcnlbJ3ZhbF9sb3NzJ10uYXBwZW5kKDApCiAgICAgIGRpY3Rpb25hcnlbJ3ZhbF9iaW5hcnlfYWNjdXJhY3knXS5hcHBlbmQoMCkKICAgIHBkLkRhdGFGcmFtZS5mcm9tX2RpY3QoaGlzdG9yeS5oaXN0b3J5KS50b19jc3YocGF0aCxpbmRleD1GYWxzZSkKCgpkZWYgZ2V0TW9kZWwocmVndWxhcml6ZWQgPSBGYWxzZSk6CiAgICBpZiByZWd1bGFyaXplZDoKICAgICAgaW5wdXRBID0gdGYua2VyYXMuSW5wdXQoc2hhcGU9KDEwMSxXX0gsV19ILDEpLCBuYW1lPSJJbnB1dCIpCiAgICAgICNDTk4KCiAgICAgIHggPSB0Zi5rZXJhcy5sYXllcnMuQ29udjNEKAogICAgICAgICAgICAgIGZpbHRlcnMgPSAzMiwgCiAgICAgICAgICAgICAga2VybmVsX3NpemUgPSAoMSwzLDMpLCAKICAgICAgICAgICAgICBhY3RpdmF0aW9uID0gJ3JlbHUnLCAKICAgICAgICAgICAgICBzdHJpZGVzID0gKDEsMiwyKSwgCiAgICAgICAgICAgICAgcGFkZGluZyA9ICdzYW1lJywKICAgICAgICAgICAgICBkYXRhX2Zvcm1hdCA9ICdjaGFubmVsc19sYXN0JywKICAgICAgICAgICAgICB1c2VfYmlhcz1UcnVlLAogICAgICAgICAgICAgIGtlcm5lbF9yZWd1bGFyaXplcj10Zi5rZXJhcy5yZWd1bGFyaXplcnMubDIobD0wLjAxKSwKICAgICAgICAgICAgICBuYW1lPSJJbnB1dFJlcy8yXzMyRiIKICAgICAgICAgICkoaW5wdXRBKQogICAgICB4ID0gdGYua2VyYXMubGF5ZXJzLkJhdGNoTm9ybWFsaXphdGlvbiggbmFtZT0iQk5fMSIpKHgpCiAgICAgIHggPSB0Zi5rZXJhcy5sYXllcnMuQWN0aXZhdGlvbigncmVsdScsIG5hbWU9IlJlbHVfMSIpKHgpCiAgICAgIHggPSB0Zi5rZXJhcy5sYXllcnMuQ29udjNEKAogICAgICAgICAgICAgIGZpbHRlcnMgPSA2NCwKICAgICAgICAgICAgICBrZXJuZWxfc2l6ZSA9ICgxLDMsMyksCiAgICAgICAgICAgICAgYWN0aXZhdGlvbiA9ICdyZWx1JywKICAgICAgICAgICAgICBzdHJpZGVzID0gKDEsMywzKSwKICAgICAgICAgICAgICBwYWRkaW5nID0gJ3NhbWUnLAogICAgICAgICAgICAgIGRhdGFfZm9ybWF0ID0gJ2NoYW5uZWxzX2xhc3QnLAogICAgICAgICAgICAgIHVzZV9iaWFzPVRydWUsCiAgICAgICAgICAgICAga2VybmVsX3JlZ3VsYXJpemVyPXRmLmtlcmFzLnJlZ3VsYXJpemVycy5sMihsPTAuMDEpLAogICAgICAgICAgICAgIG5hbWU9IklucHV0UmVzLzNfNjRGIgogICAgICAgICAgKSh4KQogICAgICB4ID0gdGYua2VyYXMubGF5ZXJzLkNvbnYzRCgKICAgICAgICAgICAgICBmaWx0ZXJzID0gMTI4LAogICAgICAgICAgICAgIGtlcm5lbF9zaXplID0gKDEsMywzKSwKICAgICAgICAgICAgICBhY3RpdmF0aW9uID0gJ3JlbHUnLAogICAgICAgICAgICAgIHN0cmlkZXMgPSAoMSw0LDQpLAogICAgICAgICAgICAgIHBhZGRpbmcgPSAnc2FtZScsCiAgICAgICAgICAgICAgZGF0YV9mb3JtYXQgPSAnY2hhbm5lbHNfbGFzdCcsCiAgICAgICAgICAgICAgdXNlX2JpYXM9VHJ1ZSwKICAgICAgICAgICAgICBrZXJuZWxfcmVndWxhcml6ZXI9dGYua2VyYXMucmVndWxhcml6ZXJzLmwyKGw9MC4wMSksCiAgICAgICAgICAgICAgbmFtZT0iSW5wdXRSZXMvNF8xMjhGIgogICAgICAgICAgKSh4KQogICAgICB4ID0gdGYua2VyYXMubGF5ZXJzLkJhdGNoTm9ybWFsaXphdGlvbiggbmFtZT0iQk5fMiIpKHgpCiAgICAgIHggPSB0Zi5rZXJhcy5sYXllcnMuQWN0aXZhdGlvbigncmVsdScsIG5hbWU9IlJlbHVfMiIpKHgpCiAgICAgIHggPSB0Zi5rZXJhcy5sYXllcnMuQ29udjNEKAogICAgICAgICAgICAgIGZpbHRlcnMgPSA2NCwKICAgICAgICAgICAgICBrZXJuZWxfc2l6ZSA9ICgxLDMsMyksCiAgICAgICAgICAgICAgYWN0aXZhdGlvbiA9ICdyZWx1JywKICAgICAgICAgICAgICBzdHJpZGVzID0gKDEsMiwyKSwKICAgICAgICAgICAgICBwYWRkaW5nID0gJ3NhbWUnLAogICAgICAgICAgICAgIGRhdGFfZm9ybWF0ID0gJ2NoYW5uZWxzX2xhc3QnLAogICAgICAgICAgICAgIHVzZV9iaWFzPVRydWUsCiAgICAgICAgICAgICAga2VybmVsX3JlZ3VsYXJpemVyPXRmLmtlcmFzLnJlZ3VsYXJpemVycy5sMihsPTAuMDEpLAogICAgICAgICAgICAgIG5hbWU9IklucHV0UmVzLzJfNjRGIgogICAgICAgICAgKSh4KQogICAgICB4ID0gdGYua2VyYXMubGF5ZXJzLkJhdGNoTm9ybWFsaXphdGlvbiggbmFtZT0iQk5fMyIpKHgpCiAgICAgIHggPSB0Zi5rZXJhcy5sYXllcnMuQWN0aXZhdGlvbigncmVsdScsIG5hbWU9IlJlbHVfMyIpKHgpCiAgICAgIHggPSB0Zi5rZXJhcy5sYXllcnMuQ29udjNEKAogICAgICAgICAgICAgIGZpbHRlcnMgPSAzMiwKICAgICAgICAgICAgICBrZXJuZWxfc2l6ZSA9ICgxLDMsMyksCiAgICAgICAgICAgICAgYWN0aXZhdGlvbiA9ICdyZWx1JywKICAgICAgICAgICAgICBzdHJpZGVzID0gKDEsMSwxKSwKICAgICAgICAgICAgICBwYWRkaW5nID0gJ3NhbWUnLAogICAgICAgICAgICAgIGRhdGFfZm9ybWF0ID0gJ2NoYW5uZWxzX2xhc3QnLAogICAgICAgICAgICAgIHVzZV9iaWFzPVRydWUsCiAgICAgICAgICAgICAga2VybmVsX3JlZ3VsYXJpemVyPXRmLmtlcmFzLnJlZ3VsYXJpemVycy5sMihsPTAuMDEpLAogICAgICAgICAgICAgIG5hbWU9IklucHV0UmVzLzFfMzJGIgogICAgICAgICAgKSh4KQogICAgICB4ID0gdGYua2VyYXMubGF5ZXJzLkJhdGNoTm9ybWFsaXphdGlvbiggbmFtZT0iQk5fNCIpKHgpCiAgICAgIHggPSB0Zi5rZXJhcy5sYXllcnMuQWN0aXZhdGlvbigncmVsdScsIG5hbWU9IlJlbHVfNCIpKHgpCiAgICAgIHggPSB0Zi5rZXJhcy5sYXllcnMuRHJvcG91dCgwLjIsIG5hbWU9IkRyb3BPdXRfMSIpKHgpCiAgICAgIHggPSB0Zi5rZXJhcy5sYXllcnMuRmxhdHRlbihuYW1lID0gIkZsYXR0ZW4iKSh4KQogICAgICB4ID0gdGYua2VyYXMubGF5ZXJzLkRlbnNlKAogICAgICAgICAgICAgIDUxMiwKICAgICAgICAgICAgICBhY3RpdmF0aW9uPSdyZWx1JywKICAgICAgICAgICAgICB1c2VfYmlhcz1UcnVlLAogICAgICAgICAgICAgIGtlcm5lbF9yZWd1bGFyaXplcj10Zi5rZXJhcy5yZWd1bGFyaXplcnMubDIobD0wLjAxKSwKICAgICAgICAgICAgICBuYW1lPSJEZW5zZV9SZWx1IgogICAgICAgICAgKSh4KQogICAgICB4ID0gdGYua2VyYXMubGF5ZXJzLkRyb3BvdXQoMC4yLCBuYW1lPSJEcm9wT3V0XzIiKSh4KQogICAgICB4ID0gdGYua2VyYXMubGF5ZXJzLkRlbnNlKAogICAgICAgICAgICAgIDEwMCwKICAgICAgICAgICAgICBhY3RpdmF0aW9uPSdzaWdtb2lkJywKICAgICAgICAgICAgICB1c2VfYmlhcz1UcnVlLAogICAgICAgICAgICAgIG5hbWU9IkRlbnNlX1NpZ21vaWQiCiAgICAgICAgICApKHgpCiAgICAgIHggPSB0Zi5rZXJhcy5Nb2RlbChpbnB1dHMgPSBpbnB1dEEsIG91dHB1dHMgPSB4KQoKICAgICAgCiAgICAgIHRmLmtlcmFzLnV0aWxzLnBsb3RfbW9kZWwoCiAgICAgICAgICB4LAogICAgICAgICAgdG9fZmlsZT0ibW9kZWwyLnBuZyIsCiAgICAgICAgICBzaG93X3NoYXBlcz1UcnVlLAogICAgICAgICAgc2hvd19sYXllcl9uYW1lcz1UcnVlLAogICAgICAgICAgcmFua2Rpcj0iTFIiLAogICAgICAgICAgZXhwYW5kX25lc3RlZD1GYWxzZSwKICAgICAgICAgIGRwaT05NiwKICAgICAgKQoKCiAgICAgIHJldHVybiB4CiAgICBlbHNlOgogICAgICAgIGlucHV0QSA9IHRmLmtlcmFzLklucHV0KHNoYXBlPSgxMDEsV19ILFdfSCwxKSkKICAgICAgICAjQ05OCgogICAgICAgIHggPSB0Zi5rZXJhcy5sYXllcnMuQ29udjNEKAogICAgICAgICAgICAgICAgZmlsdGVycyA9IDMyLCAKICAgICAgICAgICAgICAgIGtlcm5lbF9zaXplID0gKDEsMywzKSwgCiAgICAgICAgICAgICAgICBhY3RpdmF0aW9uID0gJ3JlbHUnLCAKICAgICAgICAgICAgICAgIHN0cmlkZXMgPSAoMSwyLDIpLCAKICAgICAgICAgICAgICAgIHBhZGRpbmcgPSAnc2FtZScsCiAgICAgICAgICAgICAgICBkYXRhX2Zvcm1hdCA9ICdjaGFubmVsc19sYXN0JywKICAgICAgICAgICAgICAgIHVzZV9iaWFzPVRydWUKICAgICAgICAgICAgKShpbnB1dEEpCiAgICAgICAgeCA9IHRmLmtlcmFzLmxheWVycy5CYXRjaE5vcm1hbGl6YXRpb24oKSh4KQogICAgICAgIHggPSB0Zi5rZXJhcy5sYXllcnMuQWN0aXZhdGlvbigncmVsdScpKHgpCiAgICAgICAgeCA9IHRmLmtlcmFzLmxheWVycy5Db252M0QoCiAgICAgICAgICAgICAgICBmaWx0ZXJzID0gMzIsCiAgICAgICAgICAgICAgICBrZXJuZWxfc2l6ZSA9ICgxLDMsMyksCiAgICAgICAgICAgICAgICBhY3RpdmF0aW9uID0gJ3JlbHUnLAogICAgICAgICAgICAgICAgc3RyaWRlcyA9ICgxLDMsMyksCiAgICAgICAgICAgICAgICBwYWRkaW5nID0gJ3NhbWUnLAogICAgICAgICAgICAgICAgZGF0YV9mb3JtYXQgPSAnY2hhbm5lbHNfbGFzdCcsCiAgICAgICAgICAgICAgICB1c2VfYmlhcz1UcnVlLAogICAgICAgICAgICApKHgpCiAgICAgICAgeCA9IHRmLmtlcmFzLmxheWVycy5Db252M0QoCiAgICAgICAgICAgICAgICBmaWx0ZXJzID0gMzIsCiAgICAgICAgICAgICAgICBrZXJuZWxfc2l6ZSA9ICgxLDMsMyksCiAgICAgICAgICAgICAgICBhY3RpdmF0aW9uID0gJ3JlbHUnLAogICAgICAgICAgICAgICAgc3RyaWRlcyA9ICgxLDQsNCksCiAgICAgICAgICAgICAgICBwYWRkaW5nID0gJ3NhbWUnLAogICAgICAgICAgICAgICAgZGF0YV9mb3JtYXQgPSAnY2hhbm5lbHNfbGFzdCcsCiAgICAgICAgICAgICAgICB1c2VfYmlhcz1UcnVlLAogICAgICAgICAgICApKHgpCiAgICAgICAgeCA9IHRmLmtlcmFzLmxheWVycy5CYXRjaE5vcm1hbGl6YXRpb24oKSh4KQogICAgICAgIHggPSB0Zi5rZXJhcy5sYXllcnMuQWN0aXZhdGlvbigncmVsdScpKHgpCiAgICAgICAgeCA9IHRmLmtlcmFzLmxheWVycy5Ecm9wb3V0KDAuMikoeCkKICAgICAgICB4ID0gdGYua2VyYXMubGF5ZXJzLkZsYXR0ZW4oKSh4KQogICAgICAgIHggPSB0Zi5rZXJhcy5sYXllcnMuRGVuc2UoCiAgICAgICAgICAgICAgICAxMDAsCiAgICAgICAgICAgICAgICBhY3RpdmF0aW9uPSdzaWdtb2lkJywKICAgICAgICAgICAgICAgIHVzZV9iaWFzPVRydWUKICAgICAgICAgICAgKSh4KQogICAgICAgIHggPSB0Zi5rZXJhcy5Nb2RlbChpbnB1dHMgPSBpbnB1dEEsIG91dHB1dHMgPSB4KQogICAgICAgIAogICAgICAgIHJldHVybiB4CgoKCgpkZWYgdHJhaW4odHJhaW4sIHRlc3QsIHZhbCwgYmF0Y2hfc2l6ZSA9IDIsIGVwb2NocyA9IDEwLCBsciA9IDAuMDA1LCBtb2RlbE5hbWU9Im1vZGVsIiwgcmVndWxhcml6ZWQ9RmFsc2UsIGZyZXEgPSBOb25lKToKCgogIGlmIGZyZXEgPT0gTm9uZToKICAgIGZyZXEgPSAxCgogIHdpdGggdGYuZGV2aWNlKCcvZGV2aWNlOkdQVTowJyk6CiAgICB0cmFpbl9zaXplID0gdGYuZGF0YS5leHBlcmltZW50YWwuY2FyZGluYWxpdHkodHJhaW4pLm51bXB5KCkgICAgCiAgICB2YWxfc2l6ZSA9IHRmLmRhdGEuZXhwZXJpbWVudGFsLmNhcmRpbmFsaXR5KHZhbCkubnVtcHkoKQogICAgdGVzdF9zaXplID0gdGYuZGF0YS5leHBlcmltZW50YWwuY2FyZGluYWxpdHkodGVzdCkubnVtcHkoKQoKICAgIHByaW50KCJUcmFpbmluZyBpbmZvOiIsIAogICAgICAgICAgIlxuXHRUcmFpbiBkcyBzaXplID0iLCB0cmFpbl9zaXplLAogICAgICAgICAgIlxuXHRWYWwgZHMgc2l6ZSA9IiwgdmFsX3NpemUsCiAgICAgICAgICAiXG5cdFRlc3QgZHMgc2l6ZSA9IiwgdGVzdF9zaXplLAogICAgICAgICAgIlxuXHROdW0gZXBvY2hzID0iLCBlcG9jaHMsCiAgICAgICAgICAiXG5cdEJhdGNoIHNpemUgPSIsIGJhdGNoX3NpemUsCiAgICAgICAgICAiXG5cdExlYXJuaW5nIHJhdGUgPSIsIGxyKQogICAgCgogICAgdHJhaW4gPSB0cmFpbi5iYXRjaChiYXRjaF9zaXplKQogICAgdHJhaW4gPSB0cmFpbi5yZXBlYXQoZXBvY2hzKQogICAgdHJhaW4gPSB0cmFpbi5zaHVmZmxlKGJhdGNoX3NpemUpCiAgICB0cmFpbiA9IHRyYWluLnByZWZldGNoKGJhdGNoX3NpemUpCgogICAgdmFsID0gdmFsLmJhdGNoKGJhdGNoX3NpemUpCiAgICB2YWwgPSB2YWwucmVwZWF0KGVwb2NocykKICAgIHZhbCA9IHZhbC5zaHVmZmxlKGJhdGNoX3NpemUpCiAgICB2YWwgPSB2YWwucHJlZmV0Y2goYmF0Y2hfc2l6ZSkKCiAgICB0ZXN0ID0gdGVzdC5iYXRjaChiYXRjaF9zaXplKQogICAgdGVzdCA9IHRlc3QucmVwZWF0KGVwb2NocykKICAgIHRlc3QgPSB0ZXN0LnNodWZmbGUoYmF0Y2hfc2l6ZSkKICAgIHRlc3QgPSB0ZXN0LnByZWZldGNoKGJhdGNoX3NpemUpCiAgICAKICAgIG1vZGVsID0gZ2V0TW9kZWwocmVndWxhcml6ZWQpCiAgICBtb2RlbC5zdW1tYXJ5KCkKCiAgICBtb2RlbC5jb21waWxlKAogICAgICAgIG9wdGltaXplcj10Zi5rZXJhcy5vcHRpbWl6ZXJzLkFkYW0obGVhcm5pbmdfcmF0ZT1sciwgYW1zZ3JhZD1UcnVlKSwKICAgICAgICBsb3NzPXRmLmtlcmFzLmxvc3Nlcy5CaW5hcnlDcm9zc2VudHJvcHkoZnJvbV9sb2dpdHM9RmFsc2UpLAogICAgICAgIG1ldHJpY3M9W3RmLmtlcmFzLm1ldHJpY3MuQmluYXJ5QWNjdXJhY3koKV0KICAgICAgICApCgogICAgZXNfY2FsbGJhY2sgPSB0Zi5rZXJhcy5jYWxsYmFja3MuRWFybHlTdG9wcGluZygKICAgICAgICBtb25pdG9yPSd2YWxfYmluYXJ5X2FjY3VyYWN5JywgbW9kZT0nbWF4JywgcGF0aWVuY2U9NQogICAgKSAgICAKCiAgICBoaXN0b3J5ID0gbW9kZWwuZml0KCAgdHJhaW4sCiAgICAgICAgICAgICAgICBiYXRjaF9zaXplID0gYmF0Y2hfc2l6ZSwKICAgICAgICAgICAgICAgIHN0ZXBzX3Blcl9lcG9jaCA9IHRyYWluX3NpemUgLy8gYmF0Y2hfc2l6ZSwKICAgICAgICAgICAgICAgIHZhbGlkYXRpb25fZGF0YSA9IHZhbCwKICAgICAgICAgICAgICAgIHZhbGlkYXRpb25fYmF0Y2hfc2l6ZSA9IGJhdGNoX3NpemUsCiAgICAgICAgICAgICAgICB2YWxpZGF0aW9uX3N0ZXBzID0gdmFsX3NpemUgLy8gYmF0Y2hfc2l6ZSwKICAgICAgICAgICAgICAgIHZhbGlkYXRpb25fZnJlcSA9IGZyZXEsCiAgICAgICAgICAgICAgICBlcG9jaHMgPSBlcG9jaHMsCiAgICAgICAgICAgICAgICB2ZXJib3NlID0gMQogICAgICAgICAgICApCiAgICBzYXZlSGlzdG9yeShoaXN0b3J5LCBtb2RlbE5hbWUpCiAgICBpZihub3QgcmVndWxhcml6ZWQpOgogICAgICBzYXZlQWNjKGhpc3RvcnksIG1vZGVsTmFtZSkKICAgICAgc2F2ZUxvc3MoaGlzdG9yeSwgbW9kZWxOYW1lKQoKICAgIHByaW50KCJzYXZpbmcgbW9kZWwiKQoKICAgIG1vZGVsLnNhdmUod2VpZ3Roc19wYXRoICsgIi8iK21vZGVsTmFtZSsiLmg1IikKICAgIG1vZGVsID0gdGYua2VyYXMubW9kZWxzLmxvYWRfbW9kZWwod2VpZ3Roc19wYXRoKyIvIittb2RlbE5hbWUrIi5oNSIpCgoKICAgIHByaW50KCJFdmFsdWF0aW5nIHRoZSB0cmFpbmVkIG1vZGVsIikKICAgIGxvc3MsIGFjYyA9IG1vZGVsLmV2YWx1YXRlKHRlc3QsIHZlcmJvc2U9MSwgc3RlcHMgPSB0ZXN0X3NpemUgLy8gYmF0Y2hfc2l6ZSkKICAgIHByaW50KCJUcmFpbmVkIG1vZGVsLCBhY2N1cmFjOiB7OjUuMmZ9JSIuZm9ybWF0KDEwMCphY2MpKQoKCmRlZiBsb2FkRGF0YXNldChwYXRoPSIuLi9kYXRhc2V0L2RhdGFzZXQiLCBwYXJ0cz01LCBsaW1pdCA9IE5vbmUpOgogICAgaWYgcGFydHMgPD0gMDoKICAgICAgICBleGl0KCJQYXJ0cyBtdXN0IGJlID49IDEiKQogICAgaWYgbGltaXQ9PU5vbmU6CiAgICAgIGxpbWl0PXBhcnRzCiAgICBwYXJ0c19wYXRoID0gW10KICAgIGZvciBpIGluIHJhbmdlKHBhcnRzKToKPHxmaW1faG9sZXw+CiAgICBpID0gMAoKICAKICAKICAgIGRzID0gbG9hZChwYXRoID0gcGFydHNfcGF0aFtpXSwgCiAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfc3BlYyA9ICh0Zi5UZW5zb3JTcGVjKHNoYXBlPSgxMDEsIDI0MCwgMjQwLCAxKSwgZHR5cGU9dGYuZmxvYXQzMiwgbmFtZT1Ob25lKSwgdGYuVGVuc29yU3BlYyhzaGFwZT0oMTAwLCksIGR0eXBlPXRmLmZsb2F0MzIsIG5hbWU9Tm9uZSkpLAogICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbiA9ICdHWklQJykKICAKICAgIHdoaWxlIGkgPCBwYXJ0cyAtIDE6CiAgICAgICAgaSArPTEKICAgICAgICBhdXggPSBsb2FkKCBwYXRoID0gcGFydHNfcGF0aFtpXSwgCiAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9zcGVjID0gKHRmLlRlbnNvclNwZWMoc2hhcGU9KDEwMSwgMjQwLCAyNDAsIDEpLCBkdHlwZT10Zi5mbG9hdDMyLCBuYW1lPU5vbmUpLCB0Zi5UZW5zb3JTcGVjKHNoYXBlPSgxMDAsKSwgZHR5cGU9dGYuZmxvYXQzMiwgbmFtZT1Ob25lKSksCiAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb24gPSAnR1pJUCcpCiAgICAgICAgZHMgPSBkcy5jb25jYXRlbmF0ZShhdXgpCiAgICAgICAgCiAgICBEQVRBU0VUX1NJWkUgPSB0Zi5kYXRhLmV4cGVyaW1lbnRhbC5jYXJkaW5hbGl0eShkcykubnVtcHkoKQoKICAgIHRyYWluX3NpemUgPSBpbnQoMC43ICogREFUQVNFVF9TSVpFKQogICAgdmFsX3NpemUgPSBpbnQoMC4yICogREFUQVNFVF9TSVpFKQogICAgdGVzdF9zaXplID0gaW50KDAuMSAqIERBVEFTRVRfU0laRSkKCiAgICB0cmFpbl9kcyA9IGRzLnRha2UodHJhaW5fc2l6ZSkKICAgIHRlc3RfZHMgPSBkcy5za2lwKHRyYWluX3NpemUpCiAgICB2YWxfZHMgPSB0ZXN0X2RzLnNraXAodGVzdF9zaXplKQogICAgdGVzdF9kcyA9IHRlc3RfZHMudGFrZSh0ZXN0X3NpemUpCgogICAgcHJpbnQoIlNlIGhhIGNhcmdhZG8gdW4gZGF0YXNldCBkZSB0YW1hw7FvICIgKyAgc3RyKERBVEFTRVRfU0laRSkgKyAiLiIpCiAgICAKICAgIHJldHVybiB0cmFpbl9kcywgdmFsX2RzLCB0ZXN0X2RzCgpzbWFsbF90cmFpbl9kcywgc21hbGxfdmFsX2RzLCBzbWFsbF90ZXN0X2RzID0gbG9hZERhdGFzZXQoIi4uL2RhdGFzZXRfMjMvZnVsbERTL2RhdGFzZXQiLDEwLDEwMCkKbWVkaXVtX3RyYWluX2RzLCBtZWRpdW1fdmFsX2RzLCBtZWRpdW1fdGVzdF9kcyA9IGxvYWREYXRhc2V0KCIuLi9kYXRhc2V0XzIzL2Z1bGxEUy9kYXRhc2V0Iiw1MCwxMDApCgoiIiIKCnByaW50KCJUcmFpbmluZyB1bnJlZ3VsYXJpemVkIG1vZGVscyIpCnRyYWluKAogIHNtYWxsX3RyYWluX2RzLAogIHNtYWxsX3Rlc3RfZHMsCiAgc21hbGxfdmFsX2RzLCAKICBiYXRjaF9zaXplID0gOCwKICBlcG9jaHMgPSA1LAogIGxyID0gNWUtNCwKICBtb2RlbE5hbWU9Im9yaWdfc21hbGxfdjIiLAogIHJlZ3VsYXJpemVkID0gRmFsc2UpCgp0cmFpbigKICBtZWRpdW1fdHJhaW5fZHMsCiAgbWVkaXVtX3Rlc3RfZHMsCiAgbWVkaXVtX3ZhbF9kcywgCiAgYmF0Y2hfc2l6ZSA9IDgsCiAgZXBvY2hzID0gNSwKICBsciA9IDVlLTQsCiAgbW9kZWxOYW1lPSJvcmlnX21lZGl1bV92MiIsCiAgcmVndWxhcml6ZWQgPSBGYWxzZSkKCgoKcHJpbnQoIlRyYWluaW5nIHJlZ3VsYXJpemVkIG1vZGVscyIpCnRyYWluKAogIHNtYWxsX3RyYWluX2RzLAogIHNtYWxsX3Rlc3RfZHMsCiAgc21hbGxfdmFsX2RzLCAKICBiYXRjaF9zaXplID0gMTAsCiAgZXBvY2hzID0gNTAsCiAgbHIgPSA1ZS01LAogIG1vZGVsTmFtZT0icmVnX3NtYWxsXzUwXzVlLTUiLAogIHJlZ3VsYXJpemVkID0gVHJ1ZSwKICBmcmVxID0gIDEwKQoKIiIiCnRyYWluKAogIG1lZGl1bV90cmFpbl9kcywKICBtZWRpdW1fdGVzdF9kcywKICBtZWRpdW1fdmFsX2RzLCAKICBiYXRjaF9zaXplID0gMTAsCiAgZXBvY2hzID0gNTAsCiAgbHIgPSA1ZS01LAogIG1vZGVsTmFtZT0icmVnX21lZGl1bV81MF81ZS01IiwKICByZWd1bGFyaXplZCA9IFRydWUsCiAgZnJlcSA9IDEwKQogICAgCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgbnVtID0gaSsxCiAgICAgICAgYWN0ID0gcGF0aCsgIi0iICsgc3RyKG51bSkgKyAiXyIgKyBzdHIobGltaXQpCiAgICAgICAgcGFydHNfcGF0aC5hcHBlbmQoYWN0KQo8fGZpbV9lbmR8Pg=="]
["3a8c89f787912537a578dc4281c38e2b9e6e55b3-4","3a8c89f787912537a578dc4281c38e2b9e6e55b3","PHxmaW1fcHJlZml4fD4KZnJvbSBkZXRlY3RvcnMuZ2FtZV9vYmplY3RzLmdhbWVfb2JqZWN0IGltcG9ydCAqCgo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLl9feCA9IHgKICAgICAgICBzZWxmLl9feSA9IHkKCiAgICBkZWYgZmxhdHRlbihzZWxmLCBmbGF0dGVuZXIpOgogICAgICAgIGxvY2F0aW9uID0gZmxhdHRlbmVyLmZsYXR0ZW4oW3NlbGYuX194LCBzZWxmLl9feV0pCiAgICAgICAgc2VsZi5fX3JlYWxfeCA9IGxvY2F0aW9uWzBdCiAgICAgICAgc2VsZi5fX3JlYWxfeSA9IGxvY2F0aW9uWzFdCjx8ZmltX3N1ZmZpeHw+CmNsYXNzIFJvYm90KEdhbWVPYmplY3QpOgoKICAgICMgWCBhbmQgWSBmcm9tIHRoZSB0b3AgbGVmdCBjb3JuZXIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4LCB5KToKPHxmaW1fZW5kfD4="]
["6c2776d185d6a0a2f513946ea9d3bf75fa7f400f-1","6c2776d185d6a0a2f513946ea9d3bf75fa7f400f","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgoKZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBmaW5kX3BhY2thZ2VzLCBzZXR1cAoKCmRlZiBzZXR1cF9wYWNrYWdlKCkgLT4gTm9uZToKICAgIHNldHVwKAogICAgICAgIG5hbWU9Im5lcnB5IiwKICAgICAgICB2ZXJzaW9uPSIwLjEuMC1kZXYiLAogICAgICAgIHBhY2thZ2VzPWZpbmRfcGFja2FnZXMoaW5jbHVkZT0oIm5lcnB5IiwgIm5lcnB5LioiKSksCiAgICAgICAgIyBQYWNrYWdlIHR5cGUgaW5mb3JtYXRpb24KICAgICAgICBwYWNrYWdlX2RhdGE9eyJuZXJweSI6IFsicHkudHlwZWQiXX0sCiAgICAgICAgIyAzLjcgYW5kIHVwLCBidXQgbm90IFB5dGhvbiA0CiAgICAgICAgcHl0aG9uX3JlcXVpcmVzPSJ+PTMuNyIsCiAgICAgICAgbGljZW5zZT0iTUlUIiwKICAgICAgICBsb25nX2Rlc2NyaXB0aW9uPSJQeXRob24gbGlicmFyeSBmb3IgbmFtZWQgZW50aXR5IHJlY29nbml0aW9uIChORVIpIiwKICAgICAgICBpbnN0YWxsX3JlcXVpcmVzPVsKICAgICAgICAgICAgImF0dHJzPj0xOS4yLjAiLAogICAgICAgICAgICAicHl0aG9uLWNyZnN1aXRlPj0wLjkuNiIsCiAgICAgICAgICAgICJyZWdleCIsCiAgICAgICAgICAgICJpbW11dGFibGVkaWN0IiwKICAgICAgICAgICAgIm51bXB5IiwKICAgICAgICAgICAgInF1aWNrdmVjIEAgaHR0cHM6Ly9naXRodWIuY29tL0NvbnN0YW50aW5lTGlnbm9zL3F1aWNrdmVjL2FyY2hpdmUvZmVmMzdkNTZhZjAzMjg4Y2VlNzU4YTJhYjZmOWQ3MGNjMDM1ZjBkNS56aXAjZWdnPXF1aWNrdmVjLTAuMi4wLWRldiIsCiAgICAgICAgXSwKICAgICAgICBleHRyYXNfcmVxdWlyZT17CiAgICAgICAgICAgICJkZXYiOiBbCiAgICAgICAgICAgICAgICAicHl0ZXN0IiwKICAgICAgICAgICAgICAgICJweXRlc3QtY292IiwKICAgICAgICAgICAgICAgICJibGFjaz09MTkuMTBiMCIsCiAgICAgICAgICAgICAgICAiaXNvcnQiLAogICAgICAgICAgICAgICAgImZsYWtlOCIsCiAgICAgICAgICAgICAgICAiZmxha2U4LWJ1Z2JlYXIiLAogICAgICAgICAgICAgICAgIm15cHk9PTAuNzcwIiwKICAgICAgICAgICAgICAgICJ0b3giLAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgXSwKICAgICAgICAgICAgIyBUT0RPOiBBZGQgZXh0cmFzIGZvciBzZXF1ZW5jZW1vZGVscwogICAgICAgIH0sCiAgICAgICAgY2xhc3NpZmllcnM9WwogICAgICAgICAgICAiRGV2ZWxvcG1lbnQgU3RhdHVzIDo6IDIgLSBQcmUtQWxwaGEiLAogICAgICAgICAgICAiTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTUlUIExpY2Vuc2UiLAogICAgICAgICAgICAiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMuNyIsCiAgICAgICAgICAgICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy44IiwKICAgICAgICAgICAgIlRvcGljIDo6IFNjaWVudGlmaWMvRW5naW5lZXJpbmcgOjogQXJ0aWZpY2lhbCBJbnRlbGxpZ2VuY2UiLAogICAgICAgIF0sCiAgICAgICAgcHJvamVjdF91cmxzPXsiU291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9Db25zdGFudGluZUxpZ25vcy9uZXJweSJ9LAogICAgKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBzZXR1cF9wYWNrYWdlKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICJzcGhpbngiLAo8fGZpbV9lbmR8Pg=="]
["a3784b343ec15dc17d923f6a42280855322138b2-1","a3784b343ec15dc17d923f6a42280855322138b2","PHxmaW1fcHJlZml4fD4KIiIiCkRqYW5nbyBzZXR0aW5ncyBmb3IgaGJhcGkgcHJvamVjdC4KCkdlbmVyYXRlZCBieSAnZGphbmdvLWFkbWluIHN0YXJ0cHJvamVjdCcgdXNpbmcgRGphbmdvIDEuOS43LgoKRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBmaWxlLCBzZWUKaHR0cHM6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuLzEuOS90b3BpY3Mvc2V0dGluZ3MvCgpGb3IgdGhlIGZ1bGwgbGlzdCBvZiBzZXR0aW5ncyBhbmQgdGhlaXIgdmFsdWVzLCBzZWUKaHR0cHM6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuLzEuOS9yZWYvc2V0dGluZ3MvCiIiIgoKaW1wb3J0IG9zCmltcG9ydCByZWRpcwoKIyBCdWlsZCBwYXRocyBpbnNpZGUgdGhlIHByb2plY3QgbGlrZSB0aGlzOiBvcy5wYXRoLmpvaW4oQkFTRV9ESVIsIC4uLikKQkFTRV9ESVIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKQoKCiMgUXVpY2stc3RhcnQgZGV2ZWxvcG1lbnQgc2V0dGluZ3MgLSB1bnN1aXRhYmxlIGZvciBwcm9kdWN0aW9uCiMgU2VlIGh0dHBzOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi8xLjkvaG93dG8vZGVwbG95bWVudC9jaGVja2xpc3QvCgojIFNFQ1VSSVRZIFdBUk5JTkc6IGtlZXAgdGhlIHNlY3JldCBrZXkgdXNlZCBpbiBwcm9kdWN0aW9uIHNlY3JldCEKU0VDUkVUX0tFWSA9ICdmOHY5KyN6djg4ajZ5cXg2dHAxdmhiM2J6I25eMmFqXik9bDRjISFzY212NTQmcHp5MScKCiMgU0VDVVJJVFkgV0FSTklORzogZG9uJ3QgcnVuIHdpdGggZGVidWcgdHVybmVkIG9uIGluIHByb2R1Y3Rpb24hCkRFQlVHID0gVHJ1ZQoKQUxMT1dFRF9IT1NUUyA9IFtdCgoKIyBBcHBsaWNhdGlvbiBkZWZpbml0aW9uCgpJTlNUQUxMRURfQVBQUyA9IFsKICAgICdkamFuZ28uY29udHJpYi5hZG1pbicsCiAgICAnZGphbmdvLmNvbnRyaWIuYXV0aCcsCiAgICAnZGphbmdvLmNvbnRyaWIuY29udGVudHR5cGVzJywKICAgICdkamFuZ28uY29udHJpYi5zZXNzaW9ucycsCiAgICAnZGphbmdvLmNvbnRyaWIubWVzc2FnZXMnLAogICAgJ2RqYW5nby5jb250cmliLnN0YXRpY2ZpbGVzJywKICAgICdyZXN0X2ZyYW1ld29yaycsCiAgICAnZGptb25leScsCiAgICAncmVjb3Jkcy5hcHBzLlJlY29yZHNDb25maWcnLAogICAgJ2J1ZGdldHMuYXBwcy5CdWRnZXRzQ29uZmlnJywKICAgICd1c2VycHJvZmlsZS5hcHBzLlVzZXJwcm9maWxlQ29uZmlnJywKICAgICdib290c3RyYXA0JywKICAgICdkam9zZXInLApdCgpNSURETEVXQVJFID0gWwogICAgJ2RqYW5nby5taWRkbGV3YXJlLnNlY3VyaXR5LlNlY3VyaXR5TWlkZGxld2FyZScsCiAgICAnd2hpdGVub2lzZS5taWRkbGV3YXJlLldoaXRlTm9pc2VNaWRkbGV3YXJlJywKICAgICdkamFuZ28uY29udHJpYi5zZXNzaW9ucy5taWRkbGV3YXJlLlNlc3Npb25NaWRkbGV3YXJlJywKICAgICdkamFuZ28ubWlkZGxld2FyZS5jb21tb24uQ29tbW9uTWlkZGxld2FyZScsCiAgICAnZGphbmdvLm1pZGRsZXdhcmUuY3NyZi5Dc3JmVmlld01pZGRsZXdhcmUnLAogICAgJ2RqYW5nby5jb250cmliLmF1dGgubWlkZGxld2FyZS5BdXRoZW50aWNhdGlvbk1pZGRsZXdhcmUnLAogICAgJ2RqYW5nby5jb250cmliLm1lc3NhZ2VzLm1pZGRsZXdhcmUuTWVzc2FnZU1pZGRsZXdhcmUnLAogICAgJ2RqYW5nby5taWRkbGV3YXJlLmNsaWNramFja2luZy5YRnJhbWVPcHRpb25zTWlkZGxld2FyZScsCl0KClJPT1RfVVJMQ09ORiA9ICdoYmFwaS51cmxzJwoKVEVNUExBVEVTID0gWwogICAgewogICAgICAgICdCQUNLRU5EJzogJ2RqYW5nby50ZW1wbGF0ZS5iYWNrZW5kcy5kamFuZ28uRGphbmdvVGVtcGxhdGVzJywKICAgICAgICAnRElSUyc6IFtdLAogICAgICAgICdBUFBfRElSUyc6IFRydWUsCiAgICAgICAgJ09QVElPTlMnOiB7CiAgICAgICAgICAgICdjb250ZXh0X3Byb2Nlc3NvcnMnOiBbCiAgICAgICAgICAgICAgICAnZGphbmdvLnRlbXBsYXRlLmNvbnRleHRfcHJvY2Vzc29ycy5kZWJ1ZycsCiAgICAgICAgICAgICAgICAnZGphbmdvLnRlbXBsYXRlLmNvbnRleHRfcHJvY2Vzc29ycy5yZXF1ZXN0JywKICAgICAgICAgICAgICAgICdkamFuZ28uY29udHJpYi5hdXRoLmNvbnRleHRfcHJvY2Vzc29ycy5hdXRoJywKICAgICAgICAgICAgICAgICdkamFuZ28uY29udHJpYi5tZXNzYWdlcy5jb250ZXh0X3Byb2Nlc3NvcnMubWVzc2FnZXMnLAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICB9LApdCgpXU0dJX0FQUExJQ0FUSU9OID0gJ2hiYXBpLndzZ2kuYXBwbGljYXRpb24nCgoKIyBEYXRhYmFzZQojIGh0dHBzOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi8xLjkvcmVmL3NldHRpbmdzLyNkYXRhYmFzZXMKCkRBVEFCQVNFUyA9IHt9CkRFRkFVTFRfQVVUT19GSUVMRCA9ICdkamFuZ28uZGIubW9kZWxzLkF1dG9GaWVsZCcKCkFVVEhfVVNFUl9NT0RFTCA9ICd1c2VycHJvZmlsZS5Vc2VyJwoKIyBQYXNzd29yZCB2YWxpZGF0aW9uCiMgaHR0cHM6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuLzEuOS9yZWYvc2V0dGluZ3MvI2F1dGgtcGFzc3dvcmQtdmFsaWRhdG9ycwoKQVVUSF9QQVNTV09SRF9WQUxJREFUT1JTID0gWwogICAgewogICAgICAgICdOQU1FJzogJ2RqYW5nby5jb250cmliLmF1dGgucGFzc3dvcmRfdmFsaWRhdGlvbi5Vc2VyQXR0cmlidXRlU2ltaWxhcml0eVZhbGlkYXRvcicsCiAgICB9LAogICAgewogICAgICAgICdOQU1FJzogJ2RqYW5nby5jb250cmliLmF1dGgucGFzc3dvcmRfdmFsaWRhdGlvbi5NaW5pbXVtTGVuZ3RoVmFsaWRhdG9yJywKICAgIH0sCiAgICB7Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAnTkFNRSc6ICdkamFuZ28uY29udHJpYi5hdXRoLnBhc3N3b3JkX3ZhbGlkYXRpb24uQ29tbW9uUGFzc3dvcmRWYWxpZGF0b3InLAo8fGZpbV9lbmR8Pg=="]
["3acc607887dc6b36ce5ecd49d5ec3842f0dbf2db-2","3acc607887dc6b36ce5ecd49d5ec3842f0dbf2db","PHxmaW1fcHJlZml4fD4KIiIiVFdFRVBTLCBieSBKb2hhbiBNYXJlcwpLZWVwaW5nIHRyYWNrIG9mIHlvdXIgVHdpdHRlciBmb2xsb3dlcnMgYW5kIGZyaWVuZHMuIiIiCgpmcm9tIHR3aXR0ZXIgaW1wb3J0ICoKaW1wb3J0IHNxbGl0ZTMKZnJvbSBzcWxpdGUzIGltcG9ydCBFcnJvcgppbXBvcnQgc3lzCmltcG9ydCBvcwpmcm9tIGNvbmZpZyBpbXBvcnQgKgppbXBvcnQgbG9nZ2luZwpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQppbXBvcnQgdGltZQoKZGVmIGNyZWF0ZV9kYmNvbm5lY3Rpb24oZGJfZmlsZSk6CiAgICAiIiIgCiAgICBDcmVhdGUgYSBkYXRhYmFzZSBjb25uZWN0aW9uIHRvIHRoZSBTUUxpdGUgZGF0YWJhc2Ugc3BlY2lmaWVkIGJ5IGRiX2ZpbGUKICAgIAogICAgUGFyYW1ldGVyczoKICAgIGRiX2ZpbGUgKHN0cik6IHBhdGggdG8gZGF0YWJhc2UgZmlsZQogICAgCiAgICBSZXR1cm5zOiAKICAgIFNRTGl0ZTMgY29ubmVjdGlvbiBvciBOb25lCiAgICAiIiIKICAgIHRoaXNfZnVuY3Rpb24gPSBzeXMuX2dldGZyYW1lKCkuZl9jb2RlLmNvX25hbWUKICAgIGxvZ2dpbmcuZGVidWcoZiJ7dGhpc19mdW5jdGlvbn06IHN0YXJ0IikKICAgIGNvbm4gPSBOb25lCgogICAgdHJ5OgogICAgICAgIGNvbm4gPSBzcWxpdGUzLmNvbm5lY3QoZGJfZmlsZSkKICAgICAgICBsb2dnaW5nLmRlYnVnKGYie3RoaXNfZnVuY3Rpb259OiBjb25uZWN0ZWQgdG8gZGF0YWJhc2Uge2RiX2ZpbGV9IikKICAgICAgICByZXR1cm4gY29ubgogICAgZXhjZXB0IEVycm9yIGFzIGU6CiAgICAgICAgbG9nZ2luZy5jcml0aWNhbChmInt0aGlzX2Z1bmN0aW9ufTogY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgLSB7ZX0iKQogICAgICAgIHN5cy5leGl0KDEpCgogICAgcmV0dXJuIGNvbm4KCgpkZWYgZ2V0X3VzZXJzKHR3aXRjb24sIHVzZXJfdHlwZSk6CiAgICAiIiIgCiAgICBHZXQgbGlzdCB3aXRoIHVzZXIgaWRzIGZvciBUd2l0dGVyIGZyaWVuZHMgb3IgZm9sbG93ZXJzCgogICAgUGFyYW1ldGVyczoKICAgIHR3aXRjb246IFR3aXR0ZXIgY29ubmVjdGlvbgogICAgdXNlcl90eXBlIChzdHIpOiBUd2l0dGVyIHVzZXIgdHlwZSAoJ2ZyaWVuZHMnIG9yICdmb2xsb3dlcnMnKQoKICAgIFJldHVybnM6IAogICAgbGlzdDogbGlzdCB3aXRoIFR3aXR0ZXIgaWRzCiAgICAiIiIKICAgIHRoaXNfZnVuY3Rpb24gPSBzeXMuX2dldGZyYW1lKCkuZl9jb2RlLmNvX25hbWUKICAgIGxvZ2dpbmcuZGVidWcoZiJ7dGhpc19mdW5jdGlvbn0gLSB7dXNlcl90eXBlfSIpCgogICAgaWYgdXNlcl90eXBlID09ICdmcmllbmRzJzoKICAgICAgICByZXNwID0gdHdpdGNvbi5mcmllbmRzLmlkcyhjb3VudD01MDAwKQogICAgZWxpZiB1c2VyX3R5cGUgPT0gJ2ZvbGxvd2Vycyc6CiAgICAgICAgcmVzcCA9IHR3aXRjb24uZm9sbG93ZXJzLmlkcyhjb3VudD01MDAwKQogICAgZWxzZToKICAgICAgICBtc2cgPSBmIlVua25vdyBUd2l0dGVyIHVzZXIgdHlwZToge3N0cih1c2VyX3R5cGUpfS4gVmFsaWQgdHlwZXM6IGZyaWVuZHMgYW5kIGZvbGxvd2Vycy4iCiAgICAgICAgbG9nZ2luZy5lcnJvcihtc2cpCiAgICAgICAgcmFpc2UgRXhjZXB0aW9uKG1zZykKCiAgICByZXR1cm4gcmVzcFsnaWRzJ10KCgpkZWYgdXBkYXRlX3VzZXJzKGRiY29uLCB0d2l0Y29uLCB1c2VyX3R5cGUpOgogICAgIiIiCiAgICBVcGRhdGUgVHdpdHRlciB1c2VycyBsaXN0OiBpbnNlcnQgaWYgbmV3IHVzZXIgYW5kIHVwZGF0ZSB3aGVuIGV4aXN0aW5nIHVzZXIKCiAgICBQYXJhbWV0ZXJzOgogICAgZGJjb246IERhdGFiYXNlIGNvbm5lY3Rpb24KICAgIHR3aXRjb246IFR3aXR0ZXIgY29ubmVjdGlvbgogICAgdXNlcl90eXBlIChzdHIpOiBUd2l0dGVyIHVzZXIgdHlwZSAoJ2ZyaWVuZHMnIG9yICdmb2xsb3dlcnMnKQoKICAgIFJldHVybnM6CiAgICAiIiIKICAgIHRoaXNfZnVuY3Rpb24gPSBzeXMuX2dldGZyYW1lKCkuZl9jb2RlLmNvX25hbWUKICAgIGxvZ2dpbmcuZGVidWcoZiJ7dGhpc19mdW5jdGlvbn0gLSB7dXNlcl90eXBlfSIpCiAgICBjdXIgPSBkYmNvbi5jdXJzb3IoKQoKICAgIHRyeToKICAgICAgICB1c2VycyA9IGdldF91c2Vycyh0d2l0Y29uLCB1c2VyX3R5cGUpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgbG9nZ2luZy5lcnJvcihmInt0aGlzX2Z1bmN0aW9ufSAtIHt1c2VyX3R5cGV9OiB7ZX0iKQogICAgICAgIHN5cy5leGl0KDEpCgogICAgY291bnQgPSAwCgogICAgZm9yIGlkIGluIHVzZXJzOgogICAgICAgICMgVGVzdCBpZiB0aGUgZm9sbG93ZXIgYWxyZWFkeSBleGlzdHMKICAgICAgICBzcWxfdGVzdCA9IGYnJydTRUxFQ1QgMSBGUk9NIHt1c2VyX3R5cGV9IFdIRVJFIHR3aXR0ZXJfaWQgPSA/JycnCiAgICAgICAgY291bnQgKz0gMQoKICAgICAgICBpZiBjdXIuZXhlY3V0ZShzcWxfdGVzdCwgKGlkLCApKS5mZXRjaG9uZSgpOgogICAgICAgICAgICBsb2dnaW5nLmRlYnVnKGYie3RoaXNfZnVuY3Rpb259IHt1c2VyX3R5cGV9OiB1cGRhdGUgaWQge3N0cihpZCl9IikKPHxmaW1faG9sZXw+CiAgICAgICAgZWxzZToKICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZyhmInt0aGlzX2Z1bmN0aW9ufSB7dXNlcl90eXBlfTogaW5zZXJ0IGlkIHtzdHIoaWQpfSIpCiAgICAgICAgICAgIHNxbCA9IGYnJydJTlNFUlQgSU5UTyB7dXNlcl90eXBlfSAodHdpdHRlcl9pZCwgc3RhcnRfZGF0ZSwgbGFzdF9kYXRlKQogICAgICAgICAgICAgICAgVkFMVUVTKD8sIGRhdGV0aW1lKENVUlJFTlRfVElNRVNUQU1QLCAnbG9jYWx0aW1lJyksIAogICAgICAgICAgICAgICAgZGF0ZXRpbWUoQ1VSUkVOVF9USU1FU1RBTVAsICdsb2NhbHRpbWUnKSknJycKICAgICAgICAgICAgY3VyLmV4ZWN1dGUoc3FsLCAoaWQsICkpCgogICAgICAgIGRiY29uLmNvbW1pdCgpCiAgICAKICAgIGxvZ2dpbmcuaW5mbyhmInt0aGlzX2Z1bmN0aW9ufToge3N0cihjb3VudCl9IHt1c2VyX3R5cGV9IikKCgpkZWYgZ2V0X21ldGFkYXRhX3VzZXJzKGRiY29uLCB0d2l0Y29uLCB1c2VyX3R5cGUpOgogICAgIiIiCiAgICBHZXQgbWV0YWRhdGEgZm9yIHRoZSB1c2VycyB3aXRoIG1pc3NpbmcgbWV0YWRhdGEKCiAgICBQYXJhbWV0ZXJzOgogICAgZGJjb246IERhdGFiYXNlIGNvbm5lY3Rpb24KICAgIHR3aXRjb246IFR3aXR0ZXIgY29ubmVjdGlvbgogICAgdXNlcl90eXBlIChzdHIpOiBUd2l0dGVyIHVzZXIgdHlwZSAoJ2ZyaWVuZHMnIG9yICdmb2xsb3dlcnMnKQoKICAgIFJldHVybnM6IAogICAgIiIiCiAgICB0aGlzX2Z1bmN0aW9uID0gc3lzLl9nZXRmcmFtZSgpLmZfY29kZS5jb19uYW1lCiAgICBsb2dnaW5nLmRlYnVnKGYie3RoaXNfZnVuY3Rpb259IC0ge3VzZXJfdHlwZX0iKQogICAgY3VyID0gZGJjb24uY3Vyc29yKCkKCiAgICAjIEdldCB1c2VycyB3aXRoIG1pc3NpbmcgbWV0YWRhdGEgKGN1cnJlbnRseSBvbmx5IHNjcmVlbi1uYW1lKQogICAgc3FsID0gZicnJ1NFTEVDVCB0d2l0dGVyX2lkIEZST00ge3VzZXJfdHlwZX0gV0hFUkUgc2NyZWVuX25hbWUgSVMgTlVMTCcnJwoKICAgIHJlcyA9IGN1ci5leGVjdXRlKHNxbCkKICAgIGZvciB0d2l0dGVyX2lkLCBpbiByZXM6CiAgICAgICAgdHJ5OgogICAgICAgICAgICB1c2VyID0gdHdpdGNvbi51c2Vycy5sb29rdXAodXNlcl9pZD10d2l0dGVyX2lkKQogICAgICAgICAgICBsb2dnaW5nLmRlYnVnKGYie3RoaXNfZnVuY3Rpb259IC0ge3VzZXJfdHlwZX06IHtzdHIodXNlclswXVsnaWQnXSl9IHt1c2VyWzBdWydzY3JlZW5fbmFtZSddfSIpCiAgICAgICAgICAgIGFkZF9tZXRhZGF0YV91c2VyKGRiY29uLCB1c2VyWzBdLCB1c2VyX3R5cGUpCiAgICAgICAgZXhjZXB0IFR3aXR0ZXJIVFRQRXJyb3IgYXMgZToKICAgICAgICAgICAgbG9nZ2luZy5lcnJvcihmInt0aGlzX2Z1bmN0aW9ufSAtIHt1c2VyX3R5cGV9OiBleGNlZWRlZCByYXRlIGxpbWl0IHtlfSIpCiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBsb2dnaW5nLmVycm9yKGYie3RoaXNfZnVuY3Rpb259IC0ge3VzZXJfdHlwZX06IHVuZXhwZWN0ZWQgZXJyb3Ige2V9IikKICAgICAgICAgICAgY29udGludWUKCgpkZWYgYWRkX21ldGFkYXRhX3VzZXIoZGJjb24sIHVzZXIsIHVzZXJfdHlwZSk6CiAgICAiIiIKICAgIEFkZCBtZXRhZGF0YSBmb3IgYSBzcGVjaWZpYyB1c2VyIChjdXJyZW50bHkgb25seSBzY3JlZW5uYW1lKQoKICAgIFBhcmFtZXRlcnMgCiAgICBkYmNvbjogRGF0YWJhc2UgY29ubmVjdGlvbgogICAgdXNlciAoZGljdGlvbmFyeSk6IHVzZXIgZGF0YQogICAgdXNlcl90eXBlIChzdHIpOiBUd2l0dGVyIHVzZXIgdHlwZSAoJ2ZyaWVuZHMnIG9yICdmb2xsb3dlcnMnKQogICAgCiAgICBSZXR1cm5zOiAKICAgICIiIgogICAgdGhpc19mdW5jdGlvbiA9IHN5cy5fZ2V0ZnJhbWUoKS5mX2NvZGUuY29fbmFtZQogICAgbG9nZ2luZy5kZWJ1ZyhmInt0aGlzX2Z1bmN0aW9ufSAtIHt1c2VyX3R5cGV9IikKICAgIGN1ciA9IGRiY29uLmN1cnNvcigpCgogICAgdXBkYXRlID0gZicnJ1VQREFURSB7dXNlcl90eXBlfSBTRVQgc2NyZWVuX25hbWUgPSA/IFdIRVJFIHR3aXR0ZXJfaWQgPSA/JycnCiAgICBsb2dnaW5nLmRlYnVnKGYie3RoaXNfZnVuY3Rpb259IC0ge3VzZXJfdHlwZX06IHtzdHIodXNlclsnaWQnXSl9IHt1c2VyWydzY3JlZW5fbmFtZSddfSIpCiAgICBjdXIuZXhlY3V0ZSh1cGRhdGUsICh1c2VyWydzY3JlZW5fbmFtZSddLCB1c2VyWydpZCddKSkKICAgIGRiY29uLmNvbW1pdCgpCgoKZGVmIGdldF9sb2dfZmlsZV9tb2RlKGxvZ19maWxlKToKICAgICIiIgogICAgRGV0ZXJtaW5lIHRoZSBmaWxlLW1vZGUgZm9yIHRoZSBsb2ctZmlsZSBmb3Igd2Vla2RheSByb3RhdGlvbgoKICAgIFBhcmFtZXRlcnM6CiAgICBsb2dfZmlsZSAoc3RyKTogcGF0aCBmb3IgdGhlIGxvZy1maWxlCgogICAgUmV0dXJuczogCiAgICBzdHJpbmc6IGZpbGUtbW9kZSBhcHBlbmQgKCdhJykgb3Igd3JpdGUgKCd3JykKICAgICIiIgogICAgbm93ID0gZGF0ZXRpbWUubm93KCkKICAgICMgY2hlY2sgaWYgbG9nLWZpbGUgZXhpc3RzIAogICAgaWYgb3MucGF0aC5pc2ZpbGUobG9nX2ZpbGUpOgogICAgICAgICMgaWYgdGhlIGxvZy1maWxlIGV4aXN0cywgY29tcGFyZSB0aGUgbW9kaWZpZWQgZGF0ZSB0byB0aGUgY3VycmVudCBkYXRlCiAgICAgICAgZmlsZV9kYXRlID0gdGltZS5zdHJmdGltZSgiJVktJW0tJWQiLCB0aW1lLmxvY2FsdGltZShvcy5wYXRoLmdldG10aW1lKGxvZ19maWxlKSkpCiAgICAgICAgaWYgZmlsZV9kYXRlID09IG5vdy5zdHJmdGltZSgiJVktJW0tJWQiKToKICAgICAgICAgICAgIyBpZiB0aGUgbW9kaWZpZWQgZGF0ZSBlcXVhbHMgdGhlIGN1cnJlbnQgZGF0ZSwgc2V0IGZpbGUtbW9kZSB0byBhcHBlbmQKICAgICAgICAgICAgZmlsZV9tb2RlID0gJ2EnCiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyBpZiB0aGUgbW9kaWZpZWQgZGF0ZSBpcyBkaWZmZXJlbnQgKG9sZGVyKSwgc2V0IGZpbGUtbW9kZSB0byAob3Zlcil3cml0ZQogICAgICAgICAgICBmaWxlX21vZGUgPSAndycKICAgIGVsc2U6CiAgICAgICAgIyBpZiB0aGUgbG9nLWZpbGUgZG9lc24ndCBleGlzdCwgc2V0IGZpbGUtbW9kZSB0byB3cml0ZQogICAgICAgIGZpbGVfbW9kZSA9ICd3JwoKICAgIHJldHVybiBmaWxlX21vZGUKCgpkZWYgbWFpbigpOgogICAgIiIiCiAgICBBZGRzIGFuZCB1cGRhdGVzIHlvdXIgVHdpdHRlciB1c2VycyAoZnJpZW5kcyAmIGZvbGxvd2VycykgaW4gU1FMaXRlMyBkYXRhYmFzZQogICAgIiIiCgogICAgdGhpc19mdW5jdGlvbiA9IHN5cy5fZ2V0ZnJhbWUoKS5mX2NvZGUuY29fbmFtZQogICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCiAgICBub3cgPSBkYXRldGltZS5ub3coKQogICAgIyBjcmVhdGUgbG9nLWZpbGUgcGVyIHdlZWtkYXk6IHR3ZWVwc19XZWQubG9nCiAgICBsb2dfZmlsZSA9IExPR19ESVIgKyAndHdlZXBzXycgKyBub3cuc3RyZnRpbWUoJyVhJykgKyAnLmxvZycKICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuSU5GTwoKICAgIGZpbGVfbW9kZSA9IGdldF9sb2dfZmlsZV9tb2RlKGxvZ19maWxlKQogICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZT1sb2dfZmlsZSwgZmlsZW1vZGU9ZmlsZV9tb2RlLCBmb3JtYXQ9JyUoYXNjdGltZSlzIC0gJShsZXZlbG5hbWUpcyA6ICUobWVzc2FnZSlzJywgbGV2ZWw9bG9nX2xldmVsKQoKICAgIGxvZ2dpbmcuaW5mbyhmInt0aGlzX2Z1bmN0aW9ufTogc3RhcnQiKQoKICAgICMgY3JlYXRlIGEgU1FMaXRlIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgIHRyeToKICAgICAgICBkYmNvbm4gPSBjcmVhdGVfZGJjb25uZWN0aW9uKERCX0ZJTEUpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgbG9nZ2luZy5jcml0aWNhbChmInt0aGlzX2Z1bmN0aW9ufTogY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2U6IHtlfSIpCiAgICAgICAgc3lzLmV4aXQoMSkKICAgIAogICAgIyBjcmVhdGUgYSBUd2l0dGVyIGNvbm5lY3Rpb24KICAgIHRyeToKICAgICAgICB0d2l0Y29ubiA9IFR3aXR0ZXIoYXV0aD1PQXV0aChUT0tFTiwgVE9LRU5fU0VDUkVULCBDT05TVU1FUl9LRVksIENPTlNVTUVSX1NFQ1JFVCkpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgbG9nZ2luZy5jcml0aWNhbChmInt0aGlzX2Z1bmN0aW9ufTogY291bGQgbm90IGNvbm5lY3QgdG8gVHdpdHRlcjoge2V9IiApCiAgICAgICAgc3lzLmV4aXQoMSkKCiAgICB1cGRhdGVfdXNlcnMoZGJjb25uLCB0d2l0Y29ubiwgJ2ZvbGxvd2VycycpCiAgICB1cGRhdGVfdXNlcnMoZGJjb25uLCB0d2l0Y29ubiwgJ2ZyaWVuZHMnKQogICAgZ2V0X21ldGFkYXRhX3VzZXJzKGRiY29ubiwgdHdpdGNvbm4sICdmb2xsb3dlcnMnKQogICAgZ2V0X21ldGFkYXRhX3VzZXJzKGRiY29ubiwgdHdpdGNvbm4sICdmcmllbmRzJykKCiAgICBlbmRfdGltZSA9IHRpbWUudGltZSgpCiAgICBkdXJhdGlvbiA9IHN0cihyb3VuZChlbmRfdGltZSAtIHN0YXJ0X3RpbWUsIDMpKQogICAgbG9nZ2luZy5pbmZvKGYie3RoaXNfZnVuY3Rpb259OiB0aW1lIG5lZWRlZCBmb3Igc2NyaXB0IHtkdXJhdGlvbn0gc2Vjb25kc1xuIikKICAgIGxvZ2dpbmcuZGVidWcoZiJ7dGhpc19mdW5jdGlvbn06IGVuZGluZyBleGVjdXRpb25cbiIpCgoKIyBJZiB0aGlzIHByb2dyYW0gd2FzIHJ1biAoaW5zdGVhZCBvZiBpbXBvcnRlZCksIHJ1bjoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIG1haW4oKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBzcWwgPSBmJycnVVBEQVRFIHt1c2VyX3R5cGV9IAogICAgICAgICAgICAgICAgU0VUIGxhc3RfZGF0ZSA9IGRhdGV0aW1lKENVUlJFTlRfVElNRVNUQU1QLCAnbG9jYWx0aW1lJykgCiAgICAgICAgICAgICAgICBXSEVSRSB0d2l0dGVyX2lkID0gPycnJwogICAgICAgICAgICBjdXIuZXhlY3V0ZShzcWwsIChpZCwgKSkKPHxmaW1fZW5kfD4="]
["3aed9c5a473baabd60c1680c65c7d4a90e771ded-3","3aed9c5a473baabd60c1680c65c7d4a90e771ded","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKaW1wb3J0IG51bXB5IGFzIG5wCgoKY2xhc3MgT3B0aW1pemVyKG9iamVjdCk6CiAgICAiIiIKICAgIFdpbGwgZXZlbnR1YWxseSBhbGxvdyBmb3IgbW9yZSBnZW5lcmFsIGltcGxlbWVudGF0aW9ucyBvZiBvcHRpbWl6ZXJzCiAgICAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5sZWFybmluZ19yYXRlID0gMWUtMgoKICAgICAgICAjIGRldGVybWluZXMgY2hhbmdpbmcgb2YgdGhlIGxlYXJuaW5nIHN0ZXAKICAgICAgICBzZWxmLnNjaGVkdWxlX211bHRpcGxpZXIgPSAiZml4ZWQiCgogICAgICAgIGlmIHNlbGYuc2NoZWR1bGVfbXVsdGlwbGllciAhPSAiZml4ZWQiIGFuZCBcCiAgICAgICAgICAgICAgICBzZWxmLnNjaGVkdWxlX211bHRpcGxpZXIgIT0gImRlY2F5ZWQiOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGYnUGxlYXNlIGNob29zZSBhIHNjaGVkdWxlIG11bHRpcGxpZXIgZnJvbTogZml4ZWQgb3IgZGVjYXllZCcpCgogICAgICAgICMgcGFyYW1ldGVyIHRoYXQgZGVjYXlzIHRoZSBsZWFybmluZyBzdGVwIGVhY2ggaXRlcmF0aW9uCiAgICAgICAgc2VsZi5kZWNheV9mYWN0b3IgPSAzLzQKCiAgICAgICAgIyBpZiBUcnVlLCBvcHRpbWl6ZXIgdXNlcyBzdG9jaGFzdGljLXJlY29uZmlndXJhdGlvbiBtZXRob2QuCiAgICAgICAgc2VsZi5TUiA9IFRydWUKCiAgICAgICAgIyByZWd1bGFyaXphdGlvbiBwYXJhbWV0ZXJzIGZvciBTUiBtZXRob2QKICAgICAgICBzZWxmLmxhbWJkMCA9IDEwMC4KICAgICAgICBzZWxmLmIgPSAwLjkKICAgICAgICBzZWxmLmxhbWJkTWluID0gMWUtNAoKICAgICAgICAjIGlmIFRydWUsIG9wdGltaXplciB1c2VzIEwyIHJlZ3VsYXJpemF0aW9uIG1ldGhvZAogICAgICAgIHNlbGYuTDIgPSBUcnVlCgogICAgICAgIHNlbGYuTDJfZmFjdG9yID0gMWUtNAoKICAgIGRlZiBjb21wdXRlX3VwZGF0ZShzZWxmLCBucXMsIHNhbXBsZXIsIGl0ZXJhdGlvbik6CiAgICAgICAgcGFzcwoKICAgIGRlZiBjb21wdXRlX2dyYWQoc2VsZiwgbnFzLCBzYW1wbGVyKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICIiIgogICAgICAgIENvbXB1dGVzIHN0b2NoYXN0aWMgZ3JhZGllbnRzIGJhc2VkIG9uIHRoZSBwYXJhbWV0ZXJzIGRlcml2YXRpdmVzLAogICAgICAgIHVzaW5nIEwyIHJlZ3VsYXJpemF0aW9uIG1ldGhvZCwgb3B0aW9uYWwuCiAgICAgICAgIiIiCjx8ZmltX2VuZHw+"]
["9591778e1c381a06c338de130a0484e04e2e9986-1","9591778e1c381a06c338de130a0484e04e2e9986","PHxmaW1fcHJlZml4fD4KZnJvbSAuY21fbmV3cyBpbXBvcnQgQ01OZXdzICAjIG5vcWEKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIC5jbV9uZXdzX2ZhY3RvcnkgaW1wb3J0IENNTmV3c0ZhY3RvcnkgICMgbm9xYQo8fGZpbV9lbmR8Pg=="]
["6c06b4caad4e55f18cae8db75accf28877379a6f-1","6c06b4caad4e55f18cae8db75accf28877379a6f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKZnJvbSB0ZW5zb3JmbG93IGltcG9ydCBrZXJhcwppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSB0ZW5zb3JmbG93LmtlcmFzLm1vZGVscyBpbXBvcnQgU2VxdWVudGlhbAppbXBvcnQgb3MKaW1wb3J0IHJhbmRvbQoKCmRlZiBfYnl0ZXNfZmVhdHVyZSh2YWx1ZSk6CiAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgdHlwZSh0Zi5jb25zdGFudCgwKSkpOgogICAgdmFsdWUgPSB2YWx1ZS5udW1weSgpCiAgcmV0dXJuIHRmLnRyYWluLkZlYXR1cmUoYnl0ZXNfbGlzdD10Zi50cmFpbi5CeXRlc0xpc3QodmFsdWU9W3ZhbHVlXSkpCgpkZWYgc2VyaWFsaXplX2V4YW1wbGUoeCx5KToKICBmZWF0dXJlID0gewogICAgICAneCc6IF9ieXRlc19mZWF0dXJlKHRmLmlvLnNlcmlhbGl6ZV90ZW5zb3IoeCkpLAogICAgICAneSc6IF9ieXRlc19mZWF0dXJlKHRmLmlvLnNlcmlhbGl6ZV90ZW5zb3IoeSkpLAogIH0KCiAgIyBDcmVhdGUgYSBGZWF0dXJlcyBtZXNzYWdlIHVzaW5nIHRmLnRyYWluLkV4YW1wbGUuCgogIGV4YW1wbGVfcHJvdG8gPSB0Zi50cmFpbi5FeGFtcGxlKGZlYXR1cmVzPXRmLnRyYWluLkZlYXR1cmVzKGZlYXR1cmU9ZmVhdHVyZSkpCiAgcmV0dXJuIGV4YW1wbGVfcHJvdG8uU2VyaWFsaXplVG9TdHJpbmcoKQoKCmRlZiByZWFkX3RmcmVjb3JkKGV4YW1wbGUpOgogICAgdGZyZWNvcmRfZm9ybWF0ID0gKAogICAgICAgIHsKICAgICAgICAgICAgIngiOiB0Zi5pby5GaXhlZExlbkZlYXR1cmUoW10sIHRmLnN0cmluZyksCiAgICAgICAgICAgICJ5IjogdGYuaW8uRml4ZWRMZW5GZWF0dXJlKFtdLCB0Zi5zdHJpbmcpLAogICAgICAgIH0KICAgICkKICAgIGV4YW1wbGUgPSB0Zi5pby5wYXJzZV9zaW5nbGVfZXhhbXBsZShleGFtcGxlLCB0ZnJlY29yZF9mb3JtYXQpCgogICAgeCA9IHRmLmlvLnBhcnNlX3RlbnNvcihleGFtcGxlWyd4J10sIG91dF90eXBlPXRmLmZsb2F0MzIpCiAgICB5ID0gdGYuaW8ucGFyc2VfdGVuc29yKGV4YW1wbGVbJ3knXSwgb3V0X3R5cGU9dGYuZG91YmxlKQoKICAgIHJldHVybiB4LCB5CgpkZWYgc3BhcnNlX3RlbnNvcihNLCBOLCBDPTEpOgogICAgIyBHZW5lcmF0ZXMgYW4gTSB4IE4gbWF0cml4IHRvIGJlIHVzZWQgYXMgc3BhcnNlIChpbnB1dCkga2VybmVsCiAgICAjIEZvciBlYWNoIHJvdyBvbmx5IEMgZWxlbWVudHMgYXJlIG5vbi16ZXJvCiAgICAjIChpLmUuLCBlYWNoIGlucHV0IGRpbWVuc2lvbiBpcyBwcm9qZWN0ZWQgb25seSB0byBDIG5ldXJvbnMpLgogICAgIyBUaGUgbm9uLXplcm8gZWxlbWVudHMgYXJlIGdlbmVyYXRlZCByYW5kb21seSBmcm9tIGEgdW5pZm9ybSBkaXN0cmlidXRpb24gaW4gWy0xLDFdCgogICAgZGVuc2Vfc2hhcGUgPSAoTSwgTikgICMgdGhlIHNoYXBlIG9mIHRoZSBkZW5zZSB2ZXJzaW9uIG9mIHRoZSBtYXRyaXgKCiAgICBpbmRpY2VzID0gbnAuemVyb3MoKE0gKiBDLCAyKSkgICMgaW5kaWNlcyBvZiBub24temVybyBlbGVtZW50cyBpbml0aWFsaXphdGlvbgogICAgayA9IDAKICAgIGZvciBpIGluIHJhbmdlKE0pOgogICAgICAgICMgdGhlIGluZGljZXMgb2Ygbm9uLXplcm8gZWxlbWVudHMgaW4gdGhlIGktdGggcm93IG9mIHRoZSBtYXRyaXgKICAgICAgICBpZHggPSBucC5yYW5kb20uY2hvaWNlKE4sIHNpemU9QywgcmVwbGFjZT1GYWxzZSkKICAgICAgICBmb3IgaiBpbiByYW5nZShDKToKICAgICAgICAgICAgaW5kaWNlc1trLCA6XSA9IFtpLCBpZHhbal1dCiAgICAgICAgICAgIGsgPSBrICsgMQogICAgdmFsdWVzID0gMiAqICgyICogbnAucmFuZG9tLnJhbmQoTSAqIEMpLmFzdHlwZSgnZicpIC0gMSkKICAgIFcgPSAodGYuc3BhcnNlLnJlb3JkZXIodGYuU3BhcnNlVGVuc29yKGluZGljZXM9aW5kaWNlcywgdmFsdWVzPXZhbHVlcywgZGVuc2Vfc2hhcGU9ZGVuc2Vfc2hhcGUpKSkKICAgIHJldHVybiBXCgpjbGFzcyBSZXNlcnZvaXJDZWxsKGtlcmFzLmxheWVycy5MYXllcik6CiAgICAjIEltcGxlbWVudGF0aW9uIG9mIGEgc2hhbGxvdyByZXNlcnZvaXIgdG8gYmUgdXNlZCBhcyBjZWxsIG9mIGEgUmVjdXJyZW50IE5ldXJhbCBOZXR3b3JrCiAgICAjIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBwYXJhbWV0cml6ZWQgYnk6CiAgICAjIHVuaXRzIC0gdGhlIG51bWJlciBvZiByZWN1cnJlbnQgbmV1cm9ucyBpbiB0aGUgcmVzZXJ2b2lyCiAgICAjIGlucHV0X3NjYWxpbmcgLSB0aGUgbWF4IGFicyB2YWx1ZSBvZiBhIHdlaWdodCBpbiB0aGUgaW5wdXQtcmVzZXJ2b2lyIGNvbm5lY3Rpb25zCiAgICAjICAgICAgICAgICAgICAgICBub3RlIHRoYXQgd2hpcyB2YWx1ZSBhbHNvIHNjYWxlcyB0aGUgdW5pdGFyeSBpbnB1dCBiaWFzCiAgICAjIHNwZWN0cmFsX3JhZGl1cyAtIHRoZSBtYXggYWJzIGVpZ2VudmFsdWUgb2YgdGhlIHJlY3VycmVudCB3ZWlnaHQgbWF0cml4CiAgICAjIGxlYWt5IC0gdGhlIGxlYWtpbmcgcmF0ZSBjb25zdGFudCBvZiB0aGUgcmVzZXJ2b2lyCiAgICAjIGNvbm5lY3Rpdml0eV9pbnB1dCAtIG51bWJlciBvZiBvdXRnb2luZyBjb25uZWN0aW9ucyBmcm9tIGVhY2ggaW5wdXQgdW5pdCB0byB0aGUgcmVzZXJ2b2lyCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHVuaXRzLCBTRUVELAogICAgICAgICAgICAgICAgIGlucHV0X3NjYWxpbmc9MS4sIHNwZWN0cmFsX3JhZGl1cz0wLjk5LCBsZWFreT0xLAogICAgICAgICAgICAgICAgIGNvbm5lY3Rpdml0eV9pbnB1dD0xMCwKICAgICAgICAgICAgICAgICAqKmt3YXJncyk6CgogICAgICAgIHNlbGYudW5pdHMgPSB1bml0cwogICAgICAgIHNlbGYuc3RhdGVfc2l6ZSA9IHVuaXRzCiAgICAgICAgc2VsZi5pbnB1dF9zY2FsaW5nID0gaW5wdXRfc2NhbGluZwogICAgICAgIHNlbGYuc3BlY3RyYWxfcmFkaXVzID0gc3BlY3RyYWxfcmFkaXVzCiAgICAgICAgc2VsZi5sZWFreSA9IGxlYWt5CiAgICAgICAgc2VsZi5jb25uZWN0aXZpdHlfaW5wdXQgPSBjb25uZWN0aXZpdHlfaW5wdXQKICAgICAgICBzZWxmLlNFRUQgPSBTRUVECiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqKmt3YXJncykKCiAgICBkZWYgYnVpbGQoc2VsZiwgaW5wdXRfc2hhcGUpOgogICAgICAgICMgYnVpbGQgdGhlIGlucHV0IHdlaWdodCBtYXRyaXgKICAgICAgICBzZWxmLmtlcm5lbCA9IHNwYXJzZV90ZW5zb3IoaW5wdXRfc2hhcGVbLTFdLCBzZWxmLnVuaXRzLCBzZWxmLmNvbm5lY3Rpdml0eV9pbnB1dCkgKiBzZWxmLmlucHV0X3NjYWxpbmcKICAgICAgICAjIGJ1aWxkIHRoZSByZWN1cnJlbnQgd2VpZ2h0IG1hdHJpeAogICAgICAgICMgdXNlcyBjaXJjdWxhciBsYXcgdG8gZGV0ZXJtaW5lIHRoZSB2YWx1ZXMgb2YgdGhlIHJlY3VycmVudCB3ZWlnaHQgbWF0cml4CiAgICAgICAgdmFsdWUgPSAoc2VsZi5zcGVjdHJhbF9yYWRpdXMgLyBucC5zcXJ0KHNlbGYudW5pdHMpKSAqICg2IC8gbnAuc3FydCgxMikpCiAgICAgICAgVyA9IHRmLnJhbmRvbS51bmlmb3JtKHNoYXBlPShzZWxmLnVuaXRzLCBzZWxmLnVuaXRzKSwgbWludmFsPS12YWx1ZSwgbWF4dmFsPXZhbHVlLCBzZWVkPXNlbGYuU0VFRCkKICAgICAgICBzZWxmLnJlY3VycmVudF9rZXJuZWwgPSBXCgogICAgICAgIHNlbGYuYmlhcyA9IHRmLnJhbmRvbS51bmlmb3JtKHNoYXBlPShzZWxmLnVuaXRzLCksIG1pbnZhbD0tMSwgbWF4dmFsPTEpICogc2VsZi5pbnB1dF9zY2FsaW5nCgogICAgICAgIHNlbGYuYnVpbHQgPSBUcnVlCgogICAgZGVmIGNhbGwoc2VsZiwgaW5wdXRzLCBzdGF0ZXMpOgogICAgICAgICMgY29tcHV0ZXMgdGhlIG91dHB1dCBvZiB0aGUgY2VsbCBnaXZlbiB0aGUgaW5wdXQgYW5kIHByZXZpb3VzIHN0YXRlCiAgICAgICAgcHJldl9vdXRwdXQgPSBzdGF0ZXNbMF0KICAgICAgICBpbnB1dF9wYXJ0ID0gdGYuc3BhcnNlLnNwYXJzZV9kZW5zZV9tYXRtdWwoaW5wdXRzLCBzZWxmLmtlcm5lbCkKICAgICAgICBzdGF0ZV9wYXJ0ID0gdGYubWF0bXVsKHByZXZfb3V0cHV0LCBzZWxmLnJlY3VycmVudF9rZXJuZWwpCiAgICAgICAgb3V0cHV0ID0gcHJldl9vdXRwdXQgKiAoMSAtIHNlbGYubGVha3kpICsgdGYubm4udGFuaChpbnB1dF9wYXJ0ICsgc2VsZi5iaWFzICsgc3RhdGVfcGFydCkgKiBzZWxmLmxlYWt5CgogICAgICAgIHJldHVybiBvdXRwdXQsIFtvdXRwdXRdCgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgICJ1bml0cyI6IHNlbGYudW5pdHMsCiAgICAgICAgICAgICAgICAic3BlY3RyYWxfcmFkaXVzIjogc2VsZi5zcGVjdHJhbF9yYWRpdXMsCiAgICAgICAgICAgICAgICAibGVha3kiOiBzZWxmLmxlYWt5LAogICAgICAgICAgICAgICAgImlucHV0X3NjYWxpbmciOiBzZWxmLmlucHV0X3NjYWxpbmcsCiAgICAgICAgICAgICAgICAiY29ubmVjdGl2aXR5X2lucHV0Ijogc2VsZi5jb25uZWN0aXZpdHlfaW5wdXQsCiAgICAgICAgICAgICAgICAic3RhdGVfc2l6ZSI6IHNlbGYuc3RhdGVfc2l6ZQogICAgICAgICAgICAgICAgfQoKICAgIGRlZiBmcm9tX2NvbmZpZyhjbHMsIGNvbmZpZyk6CiAgICAgICAgcmV0dXJuIGNscygqKmNvbmZpZykKCmNsYXNzIFNpbXBsZUVTTihrZXJhcy5Nb2RlbCk6CiAgICBkZWYgX19pbml0X18oc2VsZix1bml0cz0xMDAsIGlucHV0X3NjYWxpbmc9MSwKICAgICAgICAgICAgICAgICBzcGVjdHJhbF9yYWRpdXM9MC45OSwgbGVha3k9MSxjb25uZWN0aXZpdHlfaW5wdXQ9MTAsCiAgICAgICAgICAgICAgICAgY29uZmlnID0gTm9uZSwgU0VFRD00MiwKICAgICAgICAgICAgICAgICAqKmt3YXJncyk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqKmt3YXJncykKCiAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKICAgICAgICBzZWxmLmNvbm5lY3Rpdml0eV9pbnB1dCA9IGNvbm5lY3Rpdml0eV9pbnB1dAogICAgICAgIHNlbGYudW5pdHMgPSB1bml0cwogICAgICAgIHNlbGYuaW5wdXRfc2NhbGluZyA9IGlucHV0X3NjYWxpbmcKICAgICAgICBzZWxmLnNwZWN0cmFsX3JhZGl1cyA9IHNwZWN0cmFsX3JhZGl1cwogICAgICAgIHNlbGYubGVha3kgPSBsZWFreQoKICAgICAgICBzZWxmLlNFRUQgPSBTRUVECgogICAgICAgIGlmIHNlbGYuU0VFRCA9PSA0MjoKICAgICAgICAgICAgb3MuZW52aXJvblsnVEZfQ1VETk5fREVURVJNSU5JU1RJQyddID0gJzEnCgogICAgICAgIG9zLmVudmlyb25bJ1BZVEhPTkhBU0hTRUVEJ10gPSBzdHIoc2VsZi5TRUVEKQoKICAgICAgICByYW5kb20uc2VlZChzZWxmLlNFRUQpCiAgICAgICAgbnAucmFuZG9tLnNlZWQoc2VsZi5TRUVEKQogICAgICAgIHRmLnJhbmRvbS5zZXRfc2VlZChzZWxmLlNFRUQpCgoKICAgICAgICBzZWxmLnJlc2Vydm9pciA9IFNlcXVlbnRpYWwoKQogICAgICAgIHNlbGYucmVzZXJ2b2lyLmFkZCh0Zi5rZXJhcy5sYXllcnMuUk5OKGNlbGw9UmVzZXJ2b2lyQ2VsbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHM9dW5pdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN0cmFsX3JhZGl1cz1zcGVjdHJhbF9yYWRpdXMsIGxlYWt5PWxlYWt5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aXZpdHlfaW5wdXQgPSBjb25uZWN0aXZpdHlfaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3NjYWxpbmc9aW5wdXRfc2NhbGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VFRD1zZWxmLlNFRUQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgc2VsZi5yZWFkb3V0ID0gU2VxdWVudGlhbCgpCiAgICAgICAgc2VsZi5yZWFkb3V0LmFkZCh0Zi5rZXJhcy5sYXllcnMuRGVuc2UoY29uZmlnLm5fcHJlZGljdGlvbnMpKQogICAgICAgIHNlbGYucmVhZG91dC5jb21waWxlKGxvc3M9Y29uZmlnLmxvc3NfbWV0cmljLCBvcHRpbWl6ZXI9Y29uZmlnLm9wdGltaXplcikKCiAgICBkZWYgY2FsbChzZWxmLCBpbnB1dHMpOgogICAgICAgIHIgPSBzZWxmLnJlc2Vydm9pcihpbnB1dHMpCiAgICAgICAgeSA9IHNlbGYucmVhZG91dChyKQogICAgICAgIHJldHVybiB5CgogICAgZGVmIGdldF9jb25maWcoc2VsZik6CiAgICAgICAgcmV0dXJuIHsiY29ubmVjdGl2aXR5X2lucHV0Ijogc2VsZi5jb25uZWN0aXZpdHlfaW5wdXQsCiAgICAgICAgICAgICAgICAidW5pdHMiOiBzZWxmLnVuaXRzLAogICAgICAgICAgICAgICAgImlucHV0X3NjYWxpbmciOiBzZWxmLmlucHV0X3NjYWxpbmcsCiAgICAgICAgICAgICAgICAic3BlY3RyYWxfcmFkaXVzIjogc2VsZi5zcGVjdHJhbF9yYWRpdXMsCiAgICAgICAgICAgICAgICAibGVha3kiOiBzZWxmLmxlYWt5LAogICAgICAgICAgICAgICAgImNvbmZpZyI6IHNlbGYuY29uZmlnfQoKICAgIGRlZiBmcm9tX2NvbmZpZyhjbHMsIGNvbmZpZyk6CiAgICAgICAgcmV0dXJuIGNscygqKmNvbmZpZykKCiAgICBkZWYgZ2VuZXJhdG9yKHNlbGYsIGRhdGFzZXQsIGJhdGNoX3NpemUpOgogICAgICAgIGRzID0gZGF0YXNldC5yZXBlYXQoKS5wcmVmZXRjaCh0Zi5kYXRhLkFVVE9UVU5FKQogICAgICAgIGl0ZXJhdG9yID0gaXRlcihkcykKICAgICAgICB4LCB5ID0gaXRlcmF0b3IuZ2V0X25leHQoKQoKICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICB5aWVsZCB4LCB5CgogICAgZGVmIGZpdChzZWxmLCB4LCB5LCAqKmt3YXJncyk6CiAgICAgICAgI1BFUiBNSUdMSU9SQVJFIEkgVEVNUEkgTEEgU0NSSVRUVVJBIFNVIEZJTEUgU0kgUE9UUkVCQkUgRkFSRSBTT0xPIFBFUiBBTENVTkkKICAgICAgICBOID0gc2VsZi5jb25maWcuZXNuX2JhdGNoX251bWJlcgogICAgICAgIHRyYWluaW5nX3N0ZXBzID0geC5zaGFwZVswXS8vTgogICAgICAgIHRyYWluX3Jlc2Vydm9pciA9ICIuL3RlbXBfZmlsZXMvdHJhaW5fcmVzZXJ2b2lyLnRmcmVjb3JkIgoKICAgICAgICB3aXRoIHRmLmlvLlRGUmVjb3JkV3JpdGVyKHRyYWluX3Jlc2Vydm9pcikgYXMgZmlsZV93cml0ZXI6CiAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKE4pOgogICAgICAgICAgICAgICAgWF90cmFpbiA9IHNlbGYucmVzZXJ2b2lyKHhbaSAqIHRyYWluaW5nX3N0ZXBzOihpICsgMSkgKiB0cmFpbmluZ19zdGVwc10pCiAgICAgICAgICAgICAgICB5X3RyYWluID0geVtpICogdHJhaW5pbmdfc3RlcHM6KGkgKyAxKSAqIHRyYWluaW5nX3N0ZXBzXQoKICAgICAgICAgICAgICAgIGV4YW1wbGUgPSBzZXJpYWxpemVfZXhhbXBsZShYX3RyYWluLCB5X3RyYWluKQoKICAgICAgICAgICAgICAgIGZpbGVfd3JpdGVyLndyaXRlKGV4YW1wbGUpCgogICAgICAgICN2YWxpZGF0aW9uIGRhdGEKICAgICAgICB4X3ZhbCwgeV92YWwgPSBrd2FyZ3NbJ3ZhbGlkYXRpb25fZGF0YSddCiAgICAgICAgdmFsaWRhdGlvbl9zdGVwcyA9IHhfdmFsLnNoYXBlWzBdIC8vIE4KICAgICAgICB2YWxpZF9yZXNlcnZvaXIgPSAiLi90ZW1wX2ZpbGVzL3ZhbGlkX3Jlc2Vydm9pci50ZnJlY29yZCIKCiAgICAgICAgI2NoYW5uZWwgZC0xMiBoYXMgdmFsaWRhdGlvbiBzaGFwZSAoOSwyNTAsMjUpCiAgICAgICAgaWYgdmFsaWRhdGlvbl9zdGVwcyA9PSAwOgogICAgICAgICAgICB0cmFpbl9kcyA9ICh0Zi5kYXRhLlRGUmVjb3JkRGF0YXNldCh0cmFpbl9yZXNlcnZvaXIpCiAgICAgICAgICAgICAgICAgIC5tYXAocmVhZF90ZnJlY29yZCkpCiAgICAgICAgICAgIGl0ZXJhdG9yID0gdHJhaW5fZHMucmVwZWF0KCkucHJlZmV0Y2godGYuZGF0YS5BVVRPVFVORSkuYXNfbnVtcHlfaXRlcmF0b3IoKQoKICAgICAgICAgICAgeF92YWxfMSA9IHNlbGYucmVzZXJ2b2lyKHhfdmFsKQogICAgICAgICAgICBrd2FyZ3NbJ3ZhbGlkYXRpb25fZGF0YSddID0gKHhfdmFsXzEsIHlfdmFsKQogICAgICAgICAgICByZXR1cm4gc2VsZi5yZWFkb3V0LmZpdChpdGVyYXRvciwgc3RlcHNfcGVyX2Vwb2NoPU4sICoqa3dhcmdzKQoKICAgICAgICBlbHNlOgogICAgICAgICAgICB3aXRoIHRmLmlvLlRGUmVjb3JkV3JpdGVyKHZhbGlkX3Jlc2Vydm9pcikgYXMgZmlsZV93cml0ZXI6CiAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShOKToKICAgICAgICAgICAgICAgICAgICB4X3ZhbF8xID0gc2VsZi5yZXNlcnZvaXIoeF92YWxbaSAqIHZhbGlkYXRpb25fc3RlcHM6KGkgKyAxKSAqIHZhbGlkYXRpb25fc3RlcHNdKQogICAgICAgICAgICAgICAgICAgIHlfdmFsXzEgPSB5X3ZhbFtpICogdmFsaWRhdGlvbl9zdGVwczooaSArIDEpICogdmFsaWRhdGlvbl9zdGVwc10KCiAgICAgICAgICAgICAgICAgICAgZXhhbXBsZSA9IHNlcmlhbGl6ZV9leGFtcGxlKHhfdmFsXzEsIHlfdmFsXzEpCgogICAgICAgICAgICAgICAgICAgIGZpbGVfd3JpdGVyLndyaXRlKGV4YW1wbGUpCgogICAgICAgICMgcmVhZGluZyB0ZnJlY29yZCBmaWxlcwogICAgICAgIHRyYWluX2RhdGFzZXQgPSB0Zi5kYXRhLlRGUmVjb3JkRGF0YXNldCh0cmFpbl9yZXNlcnZvaXIpLm1hcChyZWFkX3RmcmVjb3JkKQogICAgICAgIHRyYWluX2RzID0gc2VsZi5nZW5lcmF0b3IodHJhaW5fZGF0YXNldCwgTikKICAgICAgICB2YWxpZGF0aW9uX2RhdGFzZXQgPSB0Zi5kYXRhLlRGUmVjb3JkRGF0YXNldCh2YWxpZF9yZXNlcnZvaXIpLm1hcChyZWFkX3RmcmVjb3JkKQogICAgICAgIHZhbGlkX2RzID0gc2VsZi5nZW5lcmF0b3IodmFsaWRhdGlvbl9kYXRhc2V0LCBOKQoKICAgICAgICBrd2FyZ3NbJ3ZhbGlkYXRpb25fZGF0YSddID0gKHZhbGlkX2RzKQoKCiAgICAgICAgcmV0dXJuIHNlbGYucmVhZG91dC5maXQodHJhaW5fZHMsIHN0ZXBzX3Blcl9lcG9jaD1OLCB2YWxpZGF0aW9uX3N0ZXBzID0gdmFsaWRhdGlvbl9zdGVwcywgKiprd2FyZ3MpCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgZ2V0X2NvbmZpZyhzZWxmKToKICAgICAgICBiYXNlX2NvbmZpZyA9IHN1cGVyKCkuZ2V0X2NvbmZpZygpCgogICAgICAgIHJldHVybiB7KipiYXNlX2NvbmZpZywKPHxmaW1fZW5kfD4="]
["c95ac51fb49fbf58d2e2902c0a5d5d5b20c46305-1","c95ac51fb49fbf58d2e2902c0a5d5d5b20c46305","PHxmaW1fcHJlZml4fD4KZGVmIGdldF9pbnN0X3R5cGUoaW5zdCk6CiAgICBkaXZfaW5zdCA9IGluc3Quc3BsaXQoIiAiKQogICAgcmV0dXJuIGRpdl9pbnN0WzBdCgpkZWYgZ2V0X2luc3RfZGVzdChpbnN0KToKICAgIGRpdl9pbnN0ID0gaW5zdC5zcGxpdCgiICIpCiAgICBkaXZfaW5zdCA9IGRpdl9pbnN0WzFdLnNwbGl0KCIsIikKICAgIHJldHVybiBkaXZfaW5zdFswXQoKY2xhc3MgUk9COgogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgICAgc2VsZi5oZWFkID0gMAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2VsZi5zaXplKToKICAgICAgICAgICAgICAgIGJ1ZmZlcl9lbnRyeSA9IHt9CiAgICAgICAgICAgICAgICBidWZmZXJfZW50cnlbIlR5cGUiXSA9ICJpbml0IgogICAgICAgICAgICAgICAgYnVmZmVyX2VudHJ5WyJEZXN0Il0gPSAiaW5pdCIKICAgICAgICAgICAgICAgIGJ1ZmZlcl9lbnRyeVsiVmFsdWUiXSA9ICJpbml0IgogICAgICAgICAgICAgICAgYnVmZmVyX2VudHJ5WyJSZWFkeSJdID0gRmFsc2UKICAgICAgICAgICAgICAgIHNlbGYuYnVmZmVyLmFwcGVuZChidWZmZXJfZW50cnkpCgoKICAgICAgICBkZWYgY2hlY2tfYXZhaWxhYmxlKHNlbGYpOgogICAgICAgICAgICByZXR1cm4gc2VsZi5hdmFpbGFibGUgCgogICAgICAgIGRlZiBpbml0aWF0ZV9lbnRyeShzZWxmLCBpbnN0KToKICAgICAgICAgICAgc2VsZi5idWZmZXJbc2VsZi50YWlsXVsiVHlwZSJdID0gaW5zdC5pbnN0VHlwZQogICAgICAgICAgICBzZWxmLmJ1ZmZlcltzZWxmLnRhaWxdWyJEZXN0Il0gPSBpbnN0LnIxCiAgICAgICAgICAgIHNlbGYuYnVmZmVyW3NlbGYudGFpbF1bIlZhbHVlIl0gPSAidW5rb3duIgogICAgICAgICAgICBzZWxmLnRhaWwgPSAoc2VsZi50YWlsKzEpJTgKICAgICAgICAgICAgc2VsZi5hdmFpbGFibGUtPTEKICAgICAgICAgICAgcmV0dXJuIChzZWxmLnRhaWwtMSkKICAgICAgICBkZWYgcmVtb3ZlX2VudHJ5KHNlbGYpOgogICAgICAgICAgICBzZWxmLmJ1ZmZlcltzZWxmLmhlYWRdWyJUeXBlIl0gPSAiaW5pdCIKICAgICAgICAgICAgc2VsZi5idWZmZXJbc2VsZi5oZWFkXVsiRGVzdCJdID0gImluaXQiCiAgICAgICAgICAgIHNlbGYuYnVmZmVyW3NlbGYuaGVhZF1bIlZhbHVlIl0gPSAiaW5pdCIKICAgICAgICAgICAgc2VsZi5idWZmZXJbc2VsZi5oZWFkXVsiUmVhZHkiXSA9IEZhbHNlCiAgICAgICAgICAgIHNlbGYuaGVhZCA9IChzZWxmLmhlYWQrMSklOAogICAgICAgICAgICBzZWxmLmF2YWlsYWJsZSs9MQogICAgICAgICAgICAKICAgICAgICBkZWYgdXBkX2VudHJ5KHNlbGYsIGluZGV4LCByZXMpOgogICAgICAgICAgICBzZWxmLmJ1ZmZlcltpbmRleF1bIlZhbHVlIl09cmVzCiAgICAgICAgICAgIHNlbGYuYnVmZmVyW2luZGV4XVsiUmVhZHkiXT1UcnVlCgogICAgICAgIGRlZiBjaGVja0hlYWQoc2VsZik6CiAgICAgICAgICAgIGlmKHNlbGYuYnVmZmVyW3NlbGYuaGVhZF1bIlJlYWR5Il0pOgogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnVmZmVyW3NlbGYuaGVhZF0KICAgICAgICAgICAgZWxpZihzZWxmLmJ1ZmZlcltzZWxmLmhlYWRdWyJUeXBlIl0gPT0gImVicmVhayIpOgogICAgICAgICAgICAgICAgcmV0dXJuICJlYnJlYWsiCiAgICAgICAgICAgIGVsc2U6IHJldHVybiBOb25lCgogICAgICAgIGRlZiBmbHVzaChzZWxmKToKICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UgKHNlbGYuc2l6ZSk6CiAgICAgICAgICAgICAgICBzZWxmLmJ1ZmZlcltpXVsiVHlwZSJdID0gImluaXQiCiAgICAgICAgICAgICAgICBzZWxmLmJ1ZmZlcltpXVsiRGVzdCJdID0gImluaXQiCiAgICAgICAgICAgICAgICBzZWxmLmJ1ZmZlcltpXVsiVmFsdWUiXSA9ICJpbml0IgogICAgICAgICAgICAgICAgc2VsZi5idWZmZXJbaV1bIlJlYWR5Il0gPSBGYWxzZQogICAgICAgICAgICAgICAgc2VsZi5oZWFkID0gMAogICAgICAgICAgICAgICAgc2VsZi50YWlsID0gMAogICAgICAgICAgICAgICAgc2VsZi5hdmFpbGFibGUgPSBzZWxmLnNpemUKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgc2VsZi50YWlsID0gMAogICAgICAgICAgICBzZWxmLnNpemUgPSA4CiAgICAgICAgICAgIHNlbGYuYXZhaWxhYmxlID0gc2VsZi5zaXplCiAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gW10KPHxmaW1fZW5kfD4="]
["c2b30d080fce0a09640aa0c271bc13041d75be9a-3","c2b30d080fce0a09640aa0c271bc13041d75be9a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmltcG9ydCBobW10b3AKaW1wb3J0IG1hdHBsb3RsaWIKbWF0cGxvdGxpYi51c2UoJ0FnZycpCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IG9zCmltcG9ydCBzeXMKI2ltcG9ydCBudW1weS5udW1hcnJheSBhcyBuYQppbXBvcnQgbnVtcHkgYXMgbmEKCmRlZiBjYWxjdWxhdGUoZmFzdGEsbGFiZWwsb3V0KToKICAgICNvcy5lbnZpcm9uWydCSU9WX0RFQlVHJ10gPSAnVHJ1ZScKICAgIGh0ID0gaG1tdG9wLnRvb2xzKCkKICAgIGh0LmFkZF9saWJyYXJ5KCdjJyxmYXN0YSkKICAgIGh0LnNjYW5fbGlicmFyaWVzKCkKICAgIHRtcyA9IGh0LnJlc3VsdHNbJ2MnXQogICAgdG90YWwgPSBvcGVuKGZhc3RhLCdyJykucmVhZCgpLmNvdW50KCc+JykKICAgIHplcm9zID0gdG90YWwtbGVuKHRtcy5rZXlzKCkpCiAgICB0YWJzID0ge30KICAgIGZvciBpIGluIHRtcy52YWx1ZXMoKToKICAgICAgICBjb3VudCA9IGxlbihpKQogICAgICAgIHRhYnMuc2V0ZGVmYXVsdChjb3VudCwwKQogICAgICAgIHRhYnNbY291bnRdKz0xCiAgICB0YWJzLnNldGRlZmF1bHQoMCx6ZXJvcykKICAgIGJpZ2dlc3QgPSB0YWJzLmtleXMoKQo8fGZpbV9ob2xlfD4KICAgIHBsdC54dGlja3MoeGxvY2F0aW9ucysgMC4zLzIsIHhsb2NhdGlvbnMpCiAgICBwbHQuYmFyKHhsb2NhdGlvbnMsdGFicy52YWx1ZXMoKSx3aWR0aD0wLjMpCiAgICBwbHQudGl0bGUobGFiZWwpCiAgICBwbHQuc2F2ZWZpZyhvdXQsIGRwaT04MCwgZm9ybWF0PSJwbmciKQogICAgcmV0dXJuIHRhYnMsdG1zCgppZiBfX25hbWVfXz09J19fbWFpbl9fJzoKICAgIHRyeToKICAgICAgICAoZmFzdGEsbGFiZWwsb3V0KSA9IHN5cy5hcmd2WzE6NF0KICAgICAgICB0YWJzLHRtcz1jYWxjdWxhdGUoZmFzdGEsbGFiZWwsb3V0KQogICAgICAgIHByaW50ICdUTVNzXHRPY2N1cmVuY2VzJwogICAgICAgIGZvciBrLHYgaW4gdGFiczoKICAgICAgICAgICAgcHJpbnQgJyVpXHQlaSclKGssdikKICAgIGV4Y2VwdDoKICAgICAgICBwcmludCAnVXNhZ2U6IHRtc3RhdHMucHkgPGZhc3RhX2ZpbGU+IDx0aXRsZT4gPG91dHB1dD4nCjx8ZmltX3N1ZmZpeHw+CiAgICBiaWdnZXN0LnNvcnQoKQogICAgYmlnZ2VzdD1iaWdnZXN0Wy0xXQogICAgW3RhYnMuc2V0ZGVmYXVsdChpLDApIGZvciBpIGluIHJhbmdlKGJpZ2dlc3QpXQogICAgeGxvY2F0aW9ucyA9IG5hLmFycmF5KHJhbmdlKGxlbih0YWJzLmtleXMoKSkpKQo8fGZpbV9lbmR8Pg=="]
["a39e726e9a04fd8c3dd89b31538be0e169554fc7-2","a39e726e9a04fd8c3dd89b31538be0e169554fc7","PHxmaW1fcHJlZml4fD4KIyB0ZXJyYXNjcmlwdC9uZXRhcHBfY2xvdWRtYW5hZ2VyL3IucHkKIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSB0b29scy9tYWtlY29kZS5weSAoKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppbXBvcnQgd2FybmluZ3MKCndhcm5pbmdzLndhcm4oCiAgICAidXNpbmcgdGhlICdsZWdhY3kgbGF5b3V0JyBpcyBkZXByZWNhdGVkIiwgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIKPHxmaW1fZW5kfD4="]
["669d6a9332c20d13b909bffacc1e85e8bda1608a-1","669d6a9332c20d13b909bffacc1e85e8bda1608a","PHxmaW1fcHJlZml4fD4KIyEvYmluL3B5dGhvbgoKIyBUaGlzIHNjcmlwdCBlbGltaW5hdGVzIHNwYWNlcyBpbiBzZXF1ZW5jZSBuYW1lcyBhbmQgcHV0IGFsbCByZXNpZHVlIGluZm9ybWF0aW9uIG9uIGEgc2luZ2xlIGxpbmUgcGVyIGVudHJ5CiMgVVNBR0U6IGZvcm1hdF9mYXN0YS5weSBpbnB1dF9maWxlIG91dHB1dF9maWxlCgppbXBvcnQgc3lzCgppbmZpbGUgPSBvcGVuKHN5cy5hcmd2WzFdLCAncicpCgp0ZW1wX3NlcSA9ICcnCmN1cnJlbnQgPSAwCgp3aXRoIG9wZW4oc3lzLmFyZ3ZbMl0sICd3JykgYXMgb3V0ZmlsZToKCWZvciBsaW5lIGluIGluZmlsZToKCgkJaWYgbGluZSA9PSAnXG4nOiBjb250aW51ZQoJCgkJbGluZSA9IGxpbmUuc3RyaXAoKQoJCQoJCWlmIGxpbmVbMF0gPT0gJz4nOgoJCQlpZiBjdXJyZW50ICE9IDA6IG91dGZpbGUud3JpdGUodGVtcF9zZXEgKyAnXG4nKQoJCQlzZXFfbmFtZSA9ICd8Jy5qb2luKGxpbmUuc3BsaXQoJyAgJykpCgkJCXNlcV9uYW1lID0gc2VxX25hbWUucmVwbGFjZSgnICcsICdfJykKCQkJb3V0ZmlsZS53cml0ZShzZXFfbmFtZSArICdcbicpCgkJCXRlbXBfc2VxID0gJycKCQkJY3VycmVudCArPSAxCgkJCWNvbnRpbnVlCgkJCQoJCWVsc2U6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCQkJdGVtcF9zZXEgPSB0ZW1wX3NlcSArIGxpbmUudXBwZXIoKQoJCQo8fGZpbV9lbmR8Pg=="]
["a3026e710e728443471b284eb9a618162d5cc5f7-1","a3026e710e728443471b284eb9a618162d5cc5f7","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQojICovQUlQTkQtcmV2aXNpb24vaW50cm9weXByb2plY3QtY2xhc3NpZnktcGV0LWltYWdlcy9nZXRfaW5wdXRfYXJncy5weQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIyBQUk9HUkFNTUVSOiBBbGlyZXphIFBhcmFuZGVoCiMgREFURSBDUkVBVEVEOiAxMi4wNS4yMDE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAojIFJFVklTRUQgREFURTogCiMgUFVSUE9TRTogQ3JlYXRlIGEgZnVuY3Rpb24gdGhhdCByZXRyaWV2ZXMgdGhlIGZvbGxvd2luZyAzIGNvbW1hbmQgbGluZSBpbnB1dHMgCiMgICAgICAgICAgZnJvbSB0aGUgdXNlciB1c2luZyB0aGUgQXJncGFyc2UgUHl0aG9uIG1vZHVsZS4gSWYgdGhlIHVzZXIgZmFpbHMgdG8gCiMgICAgICAgICAgcHJvdmlkZSBzb21lIG9yIGFsbCBvZiB0aGUgMyBpbnB1dHMsIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWVzIGFyZQojICAgICAgICAgIHVzZWQgZm9yIHRoZSBtaXNzaW5nIGlucHV0cy4gQ29tbWFuZCBMaW5lIEFyZ3VtZW50czoKIyAgICAgMS4gSW1hZ2UgRm9sZGVyIGFzIC0tZGlyIHdpdGggZGVmYXVsdCB2YWx1ZSAncGV0X2ltYWdlcycKIyAgICAgMi4gQ05OIE1vZGVsIEFyY2hpdGVjdHVyZSBhcyAtLWFyY2ggd2l0aCBkZWZhdWx0IHZhbHVlICd2Z2cnCiMgICAgIDMuIFRleHQgRmlsZSB3aXRoIERvZyBOYW1lcyBhcyAtLWRvZ2ZpbGUgd2l0aCBkZWZhdWx0IHZhbHVlICdkb2duYW1lcy50eHQnCiMKIyMKIyBJbXBvcnRzIHB5dGhvbiBtb2R1bGVzCiMgQ2hlY2sgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwgZm9yIHVzYWdlIG9mIHRoaXMgbW9kdWxlCgppbXBvcnQgYXJncGFyc2UKCiMgUHVycG9zZQojIFRoZSBwdXJwb3NlIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgaXMgdG8gcHJvdmlkZSBhIHdheSBmb3IgeW91ciBwcm9ncmFtcyB0byBiZSBtb3JlIGZsZXhpYmxlIGJ5IGFsbG93aW5nIGV4dGVybmFsIGlucHV0cyAoY29tbWFuZCBsaW5lIGFyZ3VtZW50cykgdG8gYmUgaW5wdXQgaW50byBhIHByb2dyYW0uIFRoZSBrZXkgaXMgdGhhdCB0aGVzZSBleHRlcm5hbCBhcmd1bWVudHMgY2FuIGNoYW5nZSBhcyB0byBhbGxvdyBtb3JlIGZsZXhpYmlsaXR5IGluIHRoZSBwcm9ncmFtLgojIEZvciBleGFtcGxlLCBpbWFnaW5lIHlvdSB3cm90ZSBhIHByb2dyYW0gdGhhdCBzaW1wbHkgY291bnRzIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gYSBmaWxlIGFuZCBwcmludHMgb3V0IHRoYXQgbnVtYmVyIHRvIHRoZSBzY3JlZW4uIFRvIGFsbG93IHRoZSB1c2VyIHRvIGVudGVyIGluIGFueSBmaWxlIHdpdGhvdXQgaGF2aW5nIHRvIGNoYW5nZSB0aGUgcHJvZ3JhbSwgb25lIHdvdWxkIHdhbnQgdG8gcGFzcyBpbiB0aGUgZmlsZSBsb2NhdGlvbiBhcyBhIGNvbW1hbmQgbGluZSBhcmd1bWVudC4gSW4gdGhpcyB3YXksIHRoZSBwcm9ncmFtIGNvdWxkIGJlIHVzZWQgb24gYW55IGZpbGUgc2luY2UgdGhlIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBleHRlcm5hbCBpbnB1dCBhdCBydW50aW1lLgoKIyBVc2UgYXJncGFyc2UgRXhwZWN0ZWQgQ2FsbCB3aXRoIDw+IGluZGljYXRpbmcgZXhwZWN0ZWQgdXNlciBpbnB1dDoKIyAgICAgIHB5dGhvbiBjaGVja19pbWFnZXMucHkgLS1kaXIgPGRpcmVjdG9yeSB3aXRoIGltYWdlcz4gLS1hcmNoIDxtb2RlbD4KIyAgICAgICAgICAgICAtLWRvZ2ZpbGUgPGZpbGUgdGhhdCBjb250YWlucyBkb2duYW1lcz4KIyAgIEV4YW1wbGUgY2FsbDoKIyAgICBweXRob24gY2hlY2tfaW1hZ2VzLnB5IC0tZGlyIHBldF9pbWFnZXMvIC0tYXJjaCB2Z2cgLS1kb2dmaWxlIGRvZ25hbWVzLnR4dAoKIyBUT0RPIDE6IERlZmluZSBnZXRfaW5wdXRfYXJncyBmdW5jdGlvbiBiZWxvdyBwbGVhc2UgYmUgY2VydGFpbiB0byByZXBsYWNlIE5vbmUKIyAgICAgICBpbiB0aGUgcmV0dXJuIHN0YXRlbWVudCB3aXRoIHBhcnNlci5wYXJzZV9hcmdzKCkgcGFyc2VkIGFyZ3VtZW50IAojICAgICAgIGNvbGxlY3Rpb24gdGhhdCB5b3UgY3JlYXRlZCB3aXRoIHRoaXMgZnVuY3Rpb24KIyAKZGVmIGdldF9pbnB1dF9hcmdzKCk6CiAgICAiIiIKICAgIFJldHJpZXZlcyBhbmQgcGFyc2VzIHRoZSAzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgcHJvdmlkZWQgYnkgdGhlIHVzZXIgd2hlbgogICAgdGhleSBydW4gdGhlIHByb2dyYW0gZnJvbSBhIHRlcm1pbmFsIHdpbmRvdy4gVGhpcyBmdW5jdGlvbiB1c2VzIFB5dGhvbidzIAogICAgYXJncGFyc2UgbW9kdWxlIHRvIGNyZWF0ZWQgYW5kIGRlZmluZWQgdGhlc2UgMyBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiBJZiAKICAgIHRoZSB1c2VyIGZhaWxzIHRvIHByb3ZpZGUgc29tZSBvciBhbGwgb2YgdGhlIDMgYXJndW1lbnRzLCB0aGVuIHRoZSBkZWZhdWx0IAogICAgdmFsdWVzIGFyZSB1c2VkIGZvciB0aGUgbWlzc2luZyBhcmd1bWVudHMuIAo8fGZpbV9ob2xlfD4KICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGVzZSBhcmd1bWVudHMgYXMgYW4gQXJndW1lbnRQYXJzZXIgb2JqZWN0LgogICAgUGFyYW1ldGVyczoKICAgICBOb25lIC0gc2ltcGx5IHVzaW5nIGFyZ3BhcnNlIG1vZHVsZSB0byBjcmVhdGUgJiBzdG9yZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCiAgICBSZXR1cm5zOgogICAgIHBhcnNlX2FyZ3MoKSAtZGF0YSBzdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgb2JqZWN0IAogICAgIiIiCiAgICAjIENyZWF0ZSBQYXJzZSB1c2luZyBBcmd1bWVudFBhcnNlcgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb24gPSAiUHJvY2VzcyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBwcm92aWRlZCBieSB0aGUgdXNlciIpCiAgICAjIENyZWF0ZSAzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYXMgbWVudGlvbmVkIGFib3ZlIHVzaW5nIGFkZF9hcmd1bWVudCgpIGZyb20gQXJndWVtZW50UGFyc2VyIG1ldGhvZAogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1kaXIiLCB0eXBlID0gc3RyLCBkZWZhdWx0ID0gInBldF9pbWFnZXMvIiwgaGVscCA9ICJwYXRoIHRvIHRoZSBmb2xkZXIgb2YgcGV0IGltYWdlcyIgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1hcmNoIiwgdHlwZSA9IHN0ciwgZGVmYXVsdCA9ICJ2Z2ciLCBoZWxwID0gIlR5cGUgb2YgQ05OIE1vZGVsIEFyY2hpdGVjdHVyZSB0byB1c2UiICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tZG9nZmlsZSIsIHR5cGUgPSBzdHIsIGRlZmF1bHQgPSAiZG9nbmFtZXMudHh0IiwgaGVscCA9ICJwYXRoIHRvIHRoZSB0ZXh0IGZpbGUgd2l0aCBEb2cgTmFtZXMiICkKICAgICMgUmVwbGFjZSBOb25lIHdpdGggcGFyc2VyLnBhcnNlX2FyZ3MoKSBwYXJzZWQgYXJndW1lbnQgY29sbGVjdGlvbiB0aGF0IAogICAgIyB5b3UgY3JlYXRlZCB3aXRoIHRoaXMgZnVuY3Rpb24gIFRoaXMgY29udmVydHMgYXJndW1lbnQgc3RyaW5ncyB0byBvYmplY3RzIGFuZCBhc3NpZ24gdGhlbSBhcyBhdHRyaWJ1dGVzIG9mIHRoZSBuYW1lc3BhY2UuIFJldHVybiB0aGUgcG9wdWxhdGVkIG5hbWVzcGFjZS4KICAgIHJldHVybiBwYXJzZXIucGFyc2VfYXJncygpCjx8ZmltX3N1ZmZpeHw+CiAgICBDb21tYW5kIExpbmUgQXJndW1lbnRzOgogICAgICAxLiBJbWFnZSBGb2xkZXIgYXMgLS1kaXIgd2l0aCBkZWZhdWx0IHZhbHVlICdwZXRfaW1hZ2VzJwogICAgICAyLiBDTk4gTW9kZWwgQXJjaGl0ZWN0dXJlIGFzIC0tYXJjaCB3aXRoIGRlZmF1bHQgdmFsdWUgJ3ZnZycKICAgICAgMy4gVGV4dCBGaWxlIHdpdGggRG9nIE5hbWVzIGFzIC0tZG9nZmlsZSB3aXRoIGRlZmF1bHQgdmFsdWUgJ2RvZ25hbWVzLnR4dCcKPHxmaW1fZW5kfD4="]
["fec269e00db093277f103b57ed39173e0dd0c803-1","fec269e00db093277f103b57ed39173e0dd0c803","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCjx8ZmltX2hvbGV8PgogICAgIiIiCiAgICBHZW5lcmF0ZXMgYW5kIGltcG9ydHMgbG9jYWwga2V5IG1hdGVyaWFsIHRvIENsb3VkIEtNUy4KCiAgICBBcmdzOgogICAgICAgIHByb2plY3RfaWQgKHN0cmluZyk6IEdvb2dsZSBDbG91ZCBwcm9qZWN0IElEIChlLmcuICdteS1wcm9qZWN0JykuCiAgICAgICAgbG9jYXRpb25faWQgKHN0cmluZyk6IENsb3VkIEtNUyBsb2NhdGlvbiAoZS5nLiAndXMtZWFzdDEnKS4KICAgICAgICBrZXlfcmluZ19pZCAoc3RyaW5nKTogSUQgb2YgdGhlIENsb3VkIEtNUyBrZXkgcmluZyAoZS5nLiAnbXkta2V5LXJpbmcnKS4KICAgICAgICBjcnlwdG9fa2V5X2lkIChzdHJpbmcpOiBJRCBvZiB0aGUga2V5IHRvIGltcG9ydCAoZS5nLiAnbXktYXN5bW1ldHJpYy1zaWduaW5nLWtleScpLgogICAgICAgIGltcG9ydF9qb2JfaWQgKHN0cmluZyk6IElEIG9mIHRoZSBpbXBvcnQgam9iIChlLmcuICdteS1pbXBvcnQtam9iJykuCiAgICAiIiIKCiAgICAjIEltcG9ydCB0aGUgY2xpZW50IGxpYnJhcnkgYW5kIFB5dGhvbiBzdGFuZGFyZCBjcnlwdG9ncmFwaGljIGxpYnJhcmllcy4KICAgIGltcG9ydCBvcwogICAgZnJvbSBjcnlwdG9ncmFwaHkuaGF6bWF0IGltcG9ydCBiYWNrZW5kcwogICAgZnJvbSBjcnlwdG9ncmFwaHkuaGF6bWF0LnByaW1pdGl2ZXMgaW1wb3J0IGhhc2hlcywga2V5d3JhcCwgc2VyaWFsaXphdGlvbgogICAgZnJvbSBjcnlwdG9ncmFwaHkuaGF6bWF0LnByaW1pdGl2ZXMuYXN5bW1ldHJpYyBpbXBvcnQgZWMsIHBhZGRpbmcKICAgIGZyb20gZ29vZ2xlLmNsb3VkIGltcG9ydCBrbXMKCiAgICAjIEdlbmVyYXRlIHNvbWUga2V5IG1hdGVyaWFsIGluIFB5dGhvbiBhbmQgZm9ybWF0IGl0IGluIFBLQ1MgIzggREVSIGFzCiAgICAjIHJlcXVpcmVkIGJ5IEdvb2dsZSBDbG91ZCBLTVMuCiAgICBrZXkgPSBlYy5nZW5lcmF0ZV9wcml2YXRlX2tleShlYy5TRUNQMjU2UjEsIGJhY2tlbmRzLmRlZmF1bHRfYmFja2VuZCgpKQogICAgZm9ybWF0dGVkX2tleSA9IGtleS5wcml2YXRlX2J5dGVzKAogICAgICAgIHNlcmlhbGl6YXRpb24uRW5jb2RpbmcuREVSLAogICAgICAgIHNlcmlhbGl6YXRpb24uUHJpdmF0ZUZvcm1hdC5QS0NTOCwKICAgICAgICBzZXJpYWxpemF0aW9uLk5vRW5jcnlwdGlvbigpKQoKICAgIHByaW50KCdHZW5lcmF0ZWQga2V5IGJ5dGVzOiB7fScuZm9ybWF0KGZvcm1hdHRlZF9rZXkpKQoKICAgICMgQ3JlYXRlIHRoZSBjbGllbnQuCiAgICBjbGllbnQgPSBrbXMuS2V5TWFuYWdlbWVudFNlcnZpY2VDbGllbnQoKQoKICAgICMgUmV0cmlldmUgdGhlIGZ1bGx5LXF1YWxpZmllZCBjcnlwdG9fa2V5IGFuZCBpbXBvcnRfam9iIHN0cmluZy4KICAgIGNyeXB0b19rZXlfbmFtZSA9IGNsaWVudC5jcnlwdG9fa2V5X3BhdGgoCiAgICAgICAgcHJvamVjdF9pZCwgbG9jYXRpb25faWQsIGtleV9yaW5nX2lkLCBjcnlwdG9fa2V5X2lkKQogICAgaW1wb3J0X2pvYl9uYW1lID0gY2xpZW50LmltcG9ydF9qb2JfcGF0aCgKICAgICAgICBwcm9qZWN0X2lkLCBsb2NhdGlvbl9pZCwga2V5X3JpbmdfaWQsIGltcG9ydF9qb2JfaWQpCgogICAgIyBHZW5lcmF0ZSBhIHRlbXBvcmFyeSAzMi1ieXRlIGtleSBmb3IgQUVTLUtXUCBhbmQgd3JhcCB0aGUga2V5IG1hdGVyaWFsLgogICAga3dwX2tleSA9IG9zLnVyYW5kb20oMzIpCiAgICB3cmFwcGVkX3RhcmdldF9rZXkgPSBrZXl3cmFwLmFlc19rZXlfd3JhcF93aXRoX3BhZGRpbmcoCiAgICAgICAga3dwX2tleSwgZm9ybWF0dGVkX2tleSwgYmFja2VuZHMuZGVmYXVsdF9iYWNrZW5kKCkpCgogICAgIyBSZXRyaWV2ZSB0aGUgcHVibGljIGtleSBmcm9tIHRoZSBpbXBvcnQgam9iLgogICAgaW1wb3J0X2pvYiA9IGNsaWVudC5nZXRfaW1wb3J0X2pvYihuYW1lPWltcG9ydF9qb2JfbmFtZSkKICAgIGltcG9ydF9qb2JfcHViID0gc2VyaWFsaXphdGlvbi5sb2FkX3BlbV9wdWJsaWNfa2V5KAogICAgICAgIGJ5dGVzKGltcG9ydF9qb2IucHVibGljX2tleS5wZW0sICdVVEYtOCcpLCBiYWNrZW5kcy5kZWZhdWx0X2JhY2tlbmQoKSkKCiAgICAjIFdyYXAgdGhlIEtXUCBrZXkgdXNpbmcgdGhlIGltcG9ydCBqb2Iga2V5LgogICAgd3JhcHBlZF9rd3Bfa2V5ID0gaW1wb3J0X2pvYl9wdWIuZW5jcnlwdCgKICAgICAgICBrd3Bfa2V5LAogICAgICAgIHBhZGRpbmcuT0FFUCgKICAgICAgICAgICAgbWdmPXBhZGRpbmcuTUdGMShhbGdvcml0aG09aGFzaGVzLlNIQTEoKSksCiAgICAgICAgICAgIGFsZ29yaXRobT1oYXNoZXMuU0hBMSgpLAogICAgICAgICAgICBsYWJlbD1Ob25lKSkKCiAgICAjIEltcG9ydCB0aGUgd3JhcHBlZCBrZXkgbWF0ZXJpYWwuCiAgICBjbGllbnQuaW1wb3J0X2NyeXB0b19rZXlfdmVyc2lvbih7CiAgICAgICAgInBhcmVudCI6IGNyeXB0b19rZXlfbmFtZSwKICAgICAgICAiaW1wb3J0X2pvYiI6IGltcG9ydF9qb2JfbmFtZSwKICAgICAgICAiYWxnb3JpdGhtIjoga21zLkNyeXB0b0tleVZlcnNpb24uQ3J5cHRvS2V5VmVyc2lvbkFsZ29yaXRobS5FQ19TSUdOX1AyNTZfU0hBMjU2LAogICAgICAgICJyc2FfYWVzX3dyYXBwZWRfa2V5Ijogd3JhcHBlZF9rd3Bfa2V5ICsgd3JhcHBlZF90YXJnZXRfa2V5LAogICAgfSkKCiAgICBwcmludCgnSW1wb3J0ZWQ6IHt9Jy5mb3JtYXQoaW1wb3J0X2pvYi5uYW1lKSkKIyBbRU5EIGttc19pbXBvcnRfbWFudWFsbHlfd3JhcHBlZF9rZXldCjx8ZmltX3N1ZmZpeHw+CgoKIyBbU1RBUlQga21zX2ltcG9ydF9tYW51YWxseV93cmFwcGVkX2tleV0KZGVmIGltcG9ydF9tYW51YWxseV93cmFwcGVkX2tleShwcm9qZWN0X2lkLCBsb2NhdGlvbl9pZCwga2V5X3JpbmdfaWQsIGNyeXB0b19rZXlfaWQsIGltcG9ydF9qb2JfaWQpOgo8fGZpbV9lbmR8Pg=="]
["6672c6a9169081275caa2b4c919c470c124cc186-1","6672c6a9169081275caa2b4c919c470c124cc186","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgogICAgcGFzcwo8fGZpbV9zdWZmaXh8Pgpmcm9tIC5wZXJzb24gaW1wb3J0IFBlcnNvbgoKCmNsYXNzIFBpbG90KFBlcnNvbik6Cjx8ZmltX2VuZHw+"]
["ee9b0c1baa0f5c68eb2b98c40dcc9e1acaf25e6f-2","ee9b0c1baa0f5c68eb2b98c40dcc9e1acaf25e6f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmZyb20gbGluZV9vdmVybGFwIGltcG9ydCBjaGVja19vdmVybGFwCmZyb20gLnRlc3RfY2FzZXMgaW1wb3J0IHZhbGlkX3Rlc3RfY2FzZXMsIGludmFsaWRfdGVzdF9jYXNlcwoKCmNsYXNzIFRlc3RMaW5lT3ZlckxhcCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICBkZWYgdGVzdF9pbnZhbGlkX2lucHV0KHNlbGYpOgogICAgCWZvciBwb2ludHMsIGV4cGVjdGVkIGluIGludmFsaWRfdGVzdF9jYXNlczoKICAgIAkJd2l0aCBzZWxmLnN1YlRlc3QoKToKICAgIAkJCXdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKPHxmaW1faG9sZXw+CiAgICBkZWYgdGVzdF92YWxpZF9pbnB1dChzZWxmKToKICAgIAlmb3IgcG9pbnRzLCBleHBlY3RlZCBpbiB2YWxpZF90ZXN0X2Nhc2VzOgogICAgCQl3aXRoIHNlbGYuc3ViVGVzdCgpOgogICAgCQkJc2VsZi5hc3NlcnRFcXVhbChjaGVja19vdmVybGFwKHBvaW50c1swXSwgcG9pbnRzWzFdKSwgZXhwZWN0ZWQpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHVuaXR0ZXN0Lm1haW4oKQo8fGZpbV9zdWZmaXh8PgogICAgCQkJCWNoZWNrX292ZXJsYXAocG9pbnRzWzBdLCBwb2ludHNbMV0pCgo8fGZpbV9lbmR8Pg=="]
["6ee058dbb36550189bb78c395f179de955553d00-5","6ee058dbb36550189bb78c395f179de955553d00","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcmVfcGF0aAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cgpmcm9tIC52aWV3cyBpbXBvcnQgbGlzdF90YWdzCgoKPHxmaW1fZW5kfD4="]
["115e2c090f80457abea73f002d0eb7dddff0ac20-1","115e2c090f80457abea73f002d0eb7dddff0ac20","PHxmaW1fcHJlZml4fD4KIyBEZWZpbml0aW9uIGZvciBzaW5nbHktbGlua2VkIGxpc3QuCmNsYXNzIExpc3ROb2RlOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbD0wLCBuZXh0PU5vbmUpOgogICAgICAgIHNlbGYudmFsID0gdmFsCiAgICAgICAgc2VsZi5uZXh0ID0gbmV4dApjbGFzcyBTb2x1dGlvbjoKICAgIGRlZiBhZGRUd29OdW1iZXJzKHNlbGYsIGwxOiBMaXN0Tm9kZSwgbDI6IExpc3ROb2RlKSAtPiBMaXN0Tm9kZToKICAgICAgICBsMyA9IGwxCiAgICAgICAgY2FycnkgPSAwCiAgICAgICAgd2hpbGUgbDIgIT0gTm9uZToKICAgICAgICAgICAgbDFfbnVtID0gbDEudmFsCiAgICAgICAgICAgIGwyX251bSA9IGwyLnZhbAogICAgICAgICAgICBsMS52YWwgPSAoY2FycnkgKyBsMV9udW0gKyBsMl9udW0pJTEwCiAgICAgICAgICAgIGNhcnJ5ID0gKGNhcnJ5ICsgbDFfbnVtICsgbDJfbnVtKS8vMTAKCiAgICAgICAgICAgIGlmIGNhcnJ5ICE9IDA6CiAgICAgICAgICAgICAgICBpZiBsMi5uZXh0ID09IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgbDIubmV4dCA9IExpc3ROb2RlKDAsIE5vbmUpCiAgICAgICAgICAgICAgICBpZiBsMS5uZXh0ID09IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgbDEubmV4dCA9IExpc3ROb2RlKDAsIE5vbmUpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBpZiBsMi5uZXh0ICE9IE5vbmUgYW5kIGwxLm5leHQgPT0gTm9uZToKICAgICAgICAgICAgICAgICAgICBsMS5uZXh0ID0gTGlzdE5vZGUoMCwgTm9uZSkKICAgICAgICAgICAgICAgIGlmIGwxLm5leHQgIT0gTm9uZSBhbmQgbDIubmV4dCA9PSBOb25lOgogICAgICAgICAgICAgICAgICAgIGwyLm5leHQgPSBMaXN0Tm9kZSgwLCBOb25lKQogICAgICAgICAgICAKICAgICAgICAgICAgbDEgPSBsMS5uZXh0CiAgICAgICAgICAgIGwyID0gbDIubmV4dAogICAgICAgIAogICAgICAgIHJldHVybiBsMwoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBzID0gU29sdXRpb24oKQogICAgbDEgPSBMaXN0Tm9kZSgyLCBMaXN0Tm9kZSg0LCBMaXN0Tm9kZSgzLCBOb25lKSkpCiAgICBsMiA9IExpc3ROb2RlKDUsIExpc3ROb2RlKDYsIExpc3ROb2RlKDQsIE5vbmUpKSkKICAgIGwzID0gcy5hZGRUd29OdW1iZXJzKGwxLCBsMikKICAgIHdoaWxlIGwzICE9IE5vbmU6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBwcmludChsMy52YWwpCiAgICAgICAgbDMgPSBsMy5uZXh0Cjx8ZmltX2VuZHw+"]
["6c3b3de449b99dfcdb208a1fb931507f2c27b2f2-4","6c3b3de449b99dfcdb208a1fb931507f2c27b2f2","PHxmaW1fcHJlZml4fD4KZnJvbSBjb3B5IGltcG9ydCBkZWVwY29weQpmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdApmcm9tIG51bXB5LmZmdCBpbXBvcnQgZmZ0ZnJlcSwgZmZ0c2hpZnQKZnJvbSBzY2lweS5mZnRwYWNrIGltcG9ydCBmZnQKZnJvbSBzY2lweS5uZGltYWdlIGltcG9ydCBjb252b2x2ZTFkCmZyb20gc2NpcHkuc2lnbmFsIGltcG9ydCB3ZWxjaApmcm9tIHNjaXB5IGltcG9ydCBzaWduYWwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZnJvbSBzb3VuZHNpZy5zaWduYWwgaW1wb3J0IGNvcnJlbGF0aW9uX2Z1bmN0aW9uLCBiYW5kcGFzc19maWx0ZXIsIGNvaGVyZW5jeQpmcm9tIHNvdW5kc2lnLmNvaGVyZW5jZSBpbXBvcnQgX3JlcGxhY2VfaW5mX3dpdGhfMCwgY2h1bmssIG11bHRpdGFwZXJlZF9jb2hlcmVuY2UKCjx8ZmltX2VuZHw+"]
["e914a4a531a337125143082e7b997e3d4e08504c-2","e914a4a531a337125143082e7b997e3d4e08504c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgb3MKc3lzLnBhdGguYXBwZW5kKG9zLmdldGN3ZCgpKQpmcm9tIHRyYWluaW5nX3N0cnVjdHVyZXMuTVZBRV9taXhlZCBpbXBvcnQgdHJhaW5fTVZBRSx0ZXN0X01WQUUKZnJvbSBmdXNpb25zLk1WQUUgaW1wb3J0IFByb2R1Y3RPZkV4cGVydHMKZnJvbSB1bmltb2RhbHMuTVZBRSBpbXBvcnQgTUxQRW5jb2RlcixUU0VuY29kZXIsVFNEZWNvZGVyCmZyb20gdW5pbW9kYWxzLmNvbW1vbl9tb2RlbHMgaW1wb3J0IE1MUApmcm9tIHRvcmNoIGltcG9ydCBubgppbXBvcnQgdG9yY2gKZnJvbSBvYmplY3RpdmVfZnVuY3Rpb25zLnJlY29uIGltcG9ydCBlbGJvX2xvc3Msc2lnbWxvc3MxZApmcm9tIGRhdGFzZXRzLm1pbWljLmdldF9kYXRhIGltcG9ydCBnZXRfZGF0YWxvYWRlcgoKCnRyYWluZGF0YSwgdmFsaWRkYXRhLCB0ZXN0ZGF0YSA9IGdldF9kYXRhbG9hZGVyKDcsIGltcHV0ZWRfcGF0aD0nZGF0YXNldHMvbWltaWMvaW0ucGsnLGZsYXR0ZW5fdGltZV9zZXJpZXM9VHJ1ZSkKY2xhc3Nlcz0yCjx8ZmltX2hvbGV8PgplbmNvZGVycz1bTUxQRW5jb2Rlcig1LDIwLG5fbGF0ZW50KS5jdWRhKCksVFNFbmNvZGVyKHNlcmllc19kaW0sMzAsbl9sYXRlbnQsdGltZXN0ZXApLmN1ZGEoKV0KZGVjb2RlcnM9W01MUChuX2xhdGVudCwyMCw1KS5jdWRhKCksVFNEZWNvZGVyKHNlcmllc19kaW0sMzAsbl9sYXRlbnQsdGltZXN0ZXApLmN1ZGEoKV0KaGVhZD1NTFAobl9sYXRlbnQsMjAsY2xhc3NlcykuY3VkYSgpCmVsYm89ZWxib19sb3NzKFtzaWdtbG9zczFkLHNpZ21sb3NzMWRdLFsxLjAsMS4wXSwwLjApCnRyYWluX01WQUUoZW5jb2RlcnMsZGVjb2RlcnMsaGVhZCxmdXNlLHRyYWluZGF0YSx2YWxpZGRhdGEsZWxibywzMCkKbXZhZT10b3JjaC5sb2FkKCdiZXN0MS5wdCcpCmhlYWQ9dG9yY2gubG9hZCgnYmVzdDIucHQnKQp0ZXN0X01WQUUobXZhZSxoZWFkLHRlc3RkYXRhKQo8fGZpbV9zdWZmaXh8PgpuX2xhdGVudD0yMDAKc2VyaWVzX2RpbT0xMgp0aW1lc3RlcD0yNApmdXNlPVByb2R1Y3RPZkV4cGVydHMoKDEsNDAsbl9sYXRlbnQpKQo8fGZpbV9lbmR8Pg=="]
["28f4bbcf92b95a04dd31abe9269587c40323aefd-5","28f4bbcf92b95a04dd31abe9269587c40323aefd","PHxmaW1fcHJlZml4fD4KJycnClRoZSBlbnRyeSBwb2ludCBvZiBTTE0gTGFiClNwZWNpZnkgd2hhdCB0byBydW4gaW4gYGNvbmZpZy9leHBlcmltZW50cy5qc29uYApUaGVuIHJ1biBgeWFybiBzdGFydGAgb3IgYHB5dGhvbiBydW5fbGFiLnB5YAonJycKaW1wb3J0IG9zCiMgTk9URSBpbmNyZWFzZSBpZiBuZWVkZWQuIFB5dG9yY2ggdGhyZWFkIG92ZXJ1c2FnZSBodHRwczovL2dpdGh1Yi5jb20vcHl0b3JjaC9weXRvcmNoL2lzc3Vlcy85NzUKb3MuZW52aXJvblsnT01QX05VTV9USFJFQURTJ10gPSAnMScKZnJvbSBzbG1fbGFiLmV4cGVyaW1lbnQuY29udHJvbCBpbXBvcnQgU2Vzc2lvbiwgVHJpYWwsIEV4cGVyaW1lbnQKZnJvbSBzbG1fbGFiLmxpYiBpbXBvcnQgbG9nZ2VyLCB1dGlsCmZyb20gc2xtX2xhYi5zcGVjIGltcG9ydCBzcGVjX3V0aWwsIGJlbmNobWFya2VyCgoKZGVidWdfbW9kdWxlcyA9IFsKICAgICMgJ2FsZ29yaXRobScsCl0KZGVidWdfbGV2ZWwgPSAnREVCVUcnCmxvZ2dlci50b2dnbGVfZGVidWcoZGVidWdfbW9kdWxlcywgZGVidWdfbGV2ZWwpCgoKZGVmIHJ1bl9iZW5jaG1hcmsoc3BlYywgY29uc3QpOgogICAgYmVuY2htYXJrX3NwZWNzID0gYmVuY2htYXJrZXIuZ2VuZXJhdGVfc3BlY3Moc3BlYywgY29uc3QpCiAgICBsb2dnZXIuaW5mbygnUnVubmluZyBiZW5jaG1hcmsnKQogICAgZm9yIHNwZWNfbmFtZSwgYmVuY2htYXJrX3NwZWMgaW4gYmVuY2htYXJrX3NwZWNzLml0ZW1zKCk6CiAgICAgICAgIyBydW4gb25seSBpZiBub3QgYWxyZWFkeSBleGlzdDsgYmVuY2htYXJrIG1vZGUgb25seQogICAgICAgIGlmIG5vdCBhbnkoc3BlY19uYW1lIGluIGZpbGVuYW1lIGZvciBmaWxlbmFtZSBpbiBvcy5saXN0ZGlyKCdkYXRhJykpOgogICAgICAgICAgICBFeHBlcmltZW50KGJlbmNobWFya19zcGVjKS5ydW4oKQoKCmRlZiBydW5fYnlfbW9kZShzcGVjX2ZpbGUsIHNwZWNfbmFtZSwgbGFiX21vZGUpOgogICAgbG9nZ2VyLmluZm8oZidSdW5uaW5nIGxhYiBpbiBtb2RlOiB7bGFiX21vZGV9JykKICAgIHNwZWMgPSBzcGVjX3V0aWwuZ2V0KHNwZWNfZmlsZSwgc3BlY19uYW1lKQogICAgIyBleHBvc2UgdG8gcnVudGltZSwgJ0AnIGlzIHJlc2VydmVkIGZvciAnZW5qb3lAe3ByZXBhdGh9JwogICAgb3MuZW52aXJvblsnbGFiX21vZGUnXSA9IGxhYl9tb2RlLnNwbGl0KCdAJylbMF0KICAgIGlmIGxhYl9tb2RlID09ICdzZWFyY2gnOgogICAgICAgIEV4cGVyaW1lbnQoc3BlYykucnVuKCkKICAgIGVsaWYgbGFiX21vZGUgPT0gJ3RyYWluJzoKICAgICAgICBUcmlhbChzcGVjKS5ydW4oKQogICAgZWxpZiBsYWJfbW9kZS5zdGFydHN3aXRoKCdlbmpveScpOgogICAgICAgIHByZXBhdGggPSBsYWJfbW9kZS5zcGxpdCgnQCcpWzFdCiAgICAgICAgc3BlYywgaW5mb19zcGFjZSA9IHV0aWwucHJlcGF0aF90b19zcGVjX2luZm9fc3BhY2UocHJlcGF0aCkKICAgICAgICBTZXNzaW9uKHNwZWMsIGluZm9fc3BhY2UpLnJ1bigpCiAgICBlbGlmIGxhYl9tb2RlID09ICdnZW5lcmF0ZV9iZW5jaG1hcmsnOgogICAgICAgIGJlbmNobWFya2VyLmdlbmVyYXRlX3NwZWNzKHNwZWMsIGNvbnN0PSdhZ2VudCcpCiAgICBlbGlmIGxhYl9tb2RlID09ICdiZW5jaG1hcmsnOgogICAgICAgICMgVE9ETyBhbGxvdyBjaGFuZ2luZyBjb25zdCB0byBlbnYKICAgICAgICBydW5fYmVuY2htYXJrKHNwZWMsIGNvbnN0PSdhZ2VudCcpCiAgICBlbGlmIGxhYl9tb2RlID09ICdkZXYnOgogICAgICAgIHNwZWMgPSB1dGlsLm92ZXJyaWRlX2Rldl9zcGVjKHNwZWMpCiAgICAgICAgVHJpYWwoc3BlYykucnVuKCkKICAgIGVsc2U6CiAgICAgICAgbG9nZ2VyLndhcm4oJ2xhYl9tb2RlIG5vdCByZWNvZ25pemVkOyBtdXN0IGJlIG9uZSBvZiBgc2VhcmNoLCB0cmFpbiwgZW5qb3ksIGJlbmNobWFyaywgZGV2YC4nKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKZGVmIG1haW4oKToKICAgIGV4cGVyaW1lbnRzID0gdXRpbC5yZWFkKCdjb25maWcvZXhwZXJpbWVudHMuanNvbicpCjx8ZmltX2VuZHw+"]
["11d305535de17264e7c362d58c3ce279fd443bff-3","11d305535de17264e7c362d58c3ce279fd443bff","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFzayBpbXBvcnQgRmxhc2sKCjx8ZmltX2hvbGV8PgojIEluaXRpYWxpemUgc3VibW9kdWxlcwppbXBvcnQgc3Rhc2guY29yZQppbXBvcnQgc3Rhc2gubW9kZWxzCmltcG9ydCBzdGFzaC5yb3V0ZXMKPHxmaW1fc3VmZml4fD4KYXBwID0gRmxhc2soX19uYW1lX18pCmFwcC5jb25maWcuZnJvbV9vYmplY3QoJ2NvbmZpZycpCmFwcC51cmxfbWFwLnN0cmljdF9zbGFzaGVzID0gRmFsc2UKCQo8fGZpbV9lbmR8Pg=="]
["09b2b4d2f6b9a8a59bb14e97aa1e6232aee904bd-4","09b2b4d2f6b9a8a59bb14e97aa1e6232aee904bd","PHxmaW1fcHJlZml4fD4KIiIiVGhpcyBtb2R1bGUgZGVmaW5lIFRyYW5zY3JpcHRpb25zV2lkZ2V0IGFuZCBUcmFuc2NyaXB0aW9uc01vZGVsLiIiIgpmcm9tIGFxdC5xdCBpbXBvcnQgUXQKZnJvbSAubW92YWJsZWxpc3QgaW1wb3J0IE1vdmFibGVMaXN0TW9kZWwsIE1vdmFibGVMaXN0V2lkZ2V0CmZyb20gLmh0bWxkZWxlZ2F0ZSBpbXBvcnQgSHRtbERlbGVnYXRlCgpjbGFzcyBUcmFuc2NyaXB0aW9uc0RlbGVnYXRlKEh0bWxEZWxlZ2F0ZSk6CiAgICAiIiJTcGVjaWFsIGRlbGVnYXRlIHRvIGRlYWwgd2l0aCAocmVnaW9uLCB0cmFuc2NyaXB0aW9uKSBmb3JtYXQgb2YgZW50cmllcwogICAgaW4gdHJhbnNjcmlwdGlvbnMuIiIiCgogICAgZGVmIHNldEVkaXRvckRhdGEoc2VsZiwgd2lkZ2V0LCBpbmRleCk6CiAgICAgICAgIiIiT3ZlcnJpZGVkLiIiIgogICAgICAgIHJlZ2lvbiwgdHJhbnNjcmlwdGlvbiA9IGluZGV4LmRhdGEoUXQuRWRpdFJvbGUpCiAgICAgICAgd2lkZ2V0LnNldFRleHQodHJhbnNjcmlwdGlvbikKCiAgICBkZWYgc2V0TW9kZWxEYXRhKHNlbGYsIHdpZGdldCwgbW9kZWwsIGluZGV4KToKICAgICAgICAiIiJPdmVycmlkZWQuIiIiCiAgICAgICAgcmVnaW9uLCB0cmFuc2NyaXB0aW9uID0gaW5kZXguZGF0YShRdC5FZGl0Um9sZSkKICAgICAgICBuZXdFbnRyeSA9IChyZWdpb24sIHN0cih3aWRnZXQudGV4dCgpKSkKICAgICAgICBtb2RlbC5zZXREYXRhKGluZGV4LCBuZXdFbnRyeSwgUXQuRWRpdFJvbGUpCgpjbGFzcyBUcmFuc2NyaXB0aW9uc1dpZGdldChNb3ZhYmxlTGlzdFdpZGdldCk6CiAgICAiIiJTdWJjbGFzcyBvZiBNb3ZhYmxlTGlzdFdpZGdldCwgdGhlIG9ubHkgcHVycG9zZSAtIHNldCBUcmFuc2NyaXB0aW9uc01vZGVsIGFzIG1vZGVsLiIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQ9Tm9uZSk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhwYXJlbnQpCiAgICAgICAgc2VsZi5zZXRNb2RlbChUcmFuc2NyaXB0aW9uc01vZGVsKCkpCiAgICAgICAgc2VsZi5zZXRJdGVtRGVsZWdhdGUoVHJhbnNjcmlwdGlvbnNEZWxlZ2F0ZSgpKQoKY2xhc3MgVHJhbnNjcmlwdGlvbnNNb2RlbChNb3ZhYmxlTGlzdE1vZGVsKToKICAgICIiIlN1YmNsYXNzIG9mIE1vdmFibGVMaXN0TW9kZWwuIE92ZXJyaWRlIGRlZmF1bHRFbnRyeSwgZGF0YSwgc2V0RGF0YSB0byBjb25maXJtCiAgICB0cmFuc2NyaXB0aW9uIGZvcm1hdC4iIiIKCiAgICBkZWZhdWx0RW50cnkgPSAoJycsICcnKQoKICAgIGRlZiBfZm9ybWF0RW50cnkoc2VsZiwgcm93KToKICAgICAgICByZWdpb24sIHRyYW5zY3JpcHRpb24gPSBzZWxmLl9lbnRyaWVzW3Jvd10KICAgICAgICByZXR1cm4gJzxiPnswfTo8L2I+IHsxfScuZm9ybWF0KHJlZ2lvbiwgdHJhbnNjcmlwdGlvbikKCiAgICBkZWYgZGF0YShzZWxmLCBpbmRleCwgcm9sZSk6CiAgICAgICAgIiIiT3ZlcnJpZGVkLiIiIgogICAgICAgIGlmIG5vdCBpbmRleC5pc1ZhbGlkKCk6CiAgICAgICAgICAgIHJldHVybiAnJwoKICAgICAgICBpZiByb2xlID09IFF0LkRpc3BsYXlSb2xlOgogICAgICAgICAgICBpZiBpbmRleC5yb3coKSA8IDE6CiAgICAgICAgICAgICAgICByZXR1cm4gJzxpPih7MH0pPC9pPiB7MX0nLmZvcm1hdChpbmRleC5yb3coKSArIDEsIHNlbGYuX2Zvcm1hdEVudHJ5KGluZGV4LnJvdygpKSkKICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Zvcm1hdEVudHJ5KGluZGV4LnJvdygpKQoKICAgICAgICBpZiByb2xlID09IFF0LkVkaXRSb2xlOgogICAgICAgICAgICByZXR1cm4gc2VsZi5fZW50cmllc1tpbmRleC5yb3coKV0KICAgICAgICByZXR1cm4gTm9uZQoKCiAgICBkZWYgc2V0RGF0YShzZWxmLCBpbmRleCwgdmFsdWUsIHJvbGUpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIiIiT3ZlcnJpZGVkLiIiIgogICAgICAgIGlmIG5vdCBpbmRleC5pc1ZhbGlkKCk6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKPHxmaW1fZW5kfD4="]
["c2f274dcb96e470e0b6ab5b4d68359844b77f50b-1","c2f274dcb96e470e0b6ab5b4d68359844b77f50b","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgc3luZWRfaW5wdXRfZGF0YShjbHMpOgogICAgICAgIHJldHVybiBbKCJTeW5lZERhdGEiLCBCZWFtbGluZSwgInJlY2VpdmVfc3luZWRfZGF0YSIpXQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGFwcGVuZF9zeW5lZF9pbnB1dF9kYXRhKGNscywgaW5wdXRzKToKICAgICAgICBmb3IgaW5wdXQgaW4gV2lkZ2V0RGVjb3JhdG9yLnN5bmVkX2lucHV0X2RhdGEoKToKICAgICAgICAgICAgaW5wdXRzLmFwcGVuZChpbnB1dCkKCiAgICBkZWYgcmVjZWl2ZV9zeW5lZF9kYXRhKHNlbGYsIGRhdGEpOgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIlNob3VsZCBiZSBpbXBsZW1lbnRlZCIpCjx8ZmltX3N1ZmZpeHw+CmZyb20gc3luZWQuYmVhbWxpbmUuYmVhbWxpbmUgaW1wb3J0IEJlYW1saW5lCgpjbGFzcyBXaWRnZXREZWNvcmF0b3Iob2JqZWN0KToKCjx8ZmltX2VuZHw+"]
["66e6bb4a7a3b77a9a51256fff99c62e1a71d6cdf-2","66e6bb4a7a3b77a9a51256fff99c62e1a71d6cdf","PHxmaW1fcHJlZml4fD4KCmZyb20gLnRmbGl0ZV9tb2RlbCBpbXBvcnQgKFRmbGl0ZU1vZGVsLCBUZmxpdGVPcENvZGUpCmZyb20gLnRmbGl0ZV9sYXllciBpbXBvcnQgKAogICAgVGZsaXRlTGF5ZXIsCiAgICBUZmxpdGVMYXllck9wdGlvbnMsCiAgICBUZmxpdGVBZGRMYXllciwKICAgIFRmbGl0ZUFkZExheWVyT3B0aW9ucywKICAgIFRmbGl0ZUNvbnYyZExheWVyLAogICAgVGZsaXRlQ29udjJETGF5ZXJPcHRpb25zLAogICAgVGZsaXRlVHJhbnNwb3NlQ29udkxheWVyLAogICAgVGZsaXRlVHJhbnNwb3NlQ29udkxheWVyT3B0aW9ucywKICAgIFRmbGl0ZUZ1bGx5Q29ubmVjdGVkTGF5ZXIsCiAgICBUZmxpdGVGdWxseUNvbm5lY3RlZExheWVyT3B0aW9ucywKICAgIFRmbGl0ZURlcHRod2lzZUNvbnYyZExheWVyLAogICAgVGZsaXRlRGVwdGh3aXNlQ29udjJETGF5ZXJPcHRpb25zLAogICAgVGZsaXRlUG9vbGluZzJkTGF5ZXIsCiAgICBUZmxpdGVQb29sMkRMYXllck9wdGlvbnMsCjx8ZmltX2hvbGV8PgogICAgVGZsaXRlTXVsTGF5ZXJPcHRpb25zLAopCmZyb20gLnRmbGl0ZV90ZW5zb3IgaW1wb3J0IChUZmxpdGVUZW5zb3IsIFRmbGl0ZVF1YW50aXphdGlvbiwgVGZsaXRlU2hhcGUpCjx8ZmltX3N1ZmZpeHw+CiAgICBUZmxpdGVSZXNoYXBlTGF5ZXIsCiAgICBUZmxpdGVRdWFudGl6ZUxheWVyLAogICAgVGZsaXRlRGVxdWFudGl6ZUxheWVyLAogICAgVGZsaXRlTXVsTGF5ZXIsCjx8ZmltX2VuZHw+"]
["2823d0ad060949bb7a0a3b21c94efcda5675a4bc-3","2823d0ad060949bb7a0a3b21c94efcda5675a4bc","PHxmaW1fcHJlZml4fD4KZnJvbSBweWNvcmQuY2xpZW50IGltcG9ydCBQeWNvcmRFeHRlbnRzaW9uCjx8ZmltX2hvbGV8PgoKICAgIEBQeWNvcmRFeHRlbnRzaW9uLmNvbW1hbmQoInBpbmciLCAiKnxuYW1lL3N0cnwgfHRoaW5nL2ludHwiKQogICAgYXN5bmMgZGVmIHRlc3QobmFtZTogc3RyLCB0aGluZzogaW50PU5vbmUpOgogICAgICAgIHByaW50KE1lc3NhZ2UuY29udGVudCwgTWVzc2FnZS5pZCwgTWVzc2FnZS5tZXNzYWdlX3R5cGUpCiAgICAgICAgcHJpbnQoVXNlci5wcmVtaXVtX3R5cGUpCiAgICAgICAgcHJpbnQoVXNlci5uYW1lLCBVc2VyLmhhcyhQcmVtaXVtVHlwZXMuTklUUk8pKQogICAgICAgIHByaW50KG5hbWUsIHRoaW5nKQo8fGZpbV9zdWZmaXh8Pgpmcm9tIHB5Y29yZC5tb2RlbHMgaW1wb3J0IE1lc3NhZ2UsIFVzZXIsIFByZW1pdW1UeXBlcwoKCmNsYXNzIFRlc3RFeHRlbnNpb24oUHljb3JkRXh0ZW50c2lvbik6Cjx8ZmltX2VuZHw+"]
["dd04474f530c966923ff3a8d68c06b17bd3dcfe5-2","dd04474f530c966923ff3a8d68c06b17bd3dcfe5","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJhbmRvbQppbXBvcnQgaXRlcnRvb2xzCmZyb20gY29weSBpbXBvcnQgZGVlcGNvcHkKCmltcG9ydCB0b3JjaAppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBzY2lweS5zcGF0aWFsIGltcG9ydCBkaXN0YW5jZQpmcm9tIHRodW5kZXJzdm0gaW1wb3J0IE9uZUNsYXNzU1ZNLCBTVkMKCmZyb20gaHJsLmFnZW50LmR5bmFtaWNzLm1wYyBpbXBvcnQgTVBDCmZyb20gaHJsLmFnZW50LnRkMy5URDNBZ2VudENsYXNzIGltcG9ydCBURDMKCgpjbGFzcyBNb2RlbEJhc2VkT3B0aW9uKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgbmFtZSwgcGFyZW50LCBtZHAsIGdsb2JhbF9zb2x2ZXIsIGdsb2JhbF92YWx1ZV9sZWFybmVyLCBidWZmZXJfbGVuZ3RoLCBnbG9iYWxfaW5pdCwKICAgICAgICAgICAgICAgICBnZXN0YXRpb25fcGVyaW9kLCB0aW1lb3V0LCBtYXhfc3RlcHMsIGRldmljZSwgdXNlX3ZmLCB1c2VfZ2xvYmFsX3ZmLCB1c2VfbW9kZWwsIGRlbnNlX3Jld2FyZCwKICAgICAgICAgICAgICAgICBvcHRpb25faWR4LCBscl9jLCBscl9hLCBtYXhfbnVtX2NoaWxkcmVuPTEsIGluaXRfc2FsaWVudF9ldmVudD1Ob25lLCB0YXJnZXRfc2FsaWVudF9ldmVudD1Ob25lLAogICAgICAgICAgICAgICAgIHBhdGhfdG9fbW9kZWw9IiIsIG11bHRpdGhyZWFkX21wYz1GYWxzZSk6CiAgICAgICAgc2VsZi5tZHAgPSBtZHAKICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgc2VsZi5scl9jID0gbHJfYwogICAgICAgIHNlbGYubHJfYSA9IGxyX2EKICAgICAgICBzZWxmLnBhcmVudCA9IHBhcmVudAogICAgICAgIHNlbGYuZGV2aWNlID0gZGV2aWNlCiAgICAgICAgc2VsZi51c2VfdmYgPSB1c2VfdmYKICAgICAgICBzZWxmLmdsb2JhbF9zb2x2ZXIgPSBnbG9iYWxfc29sdmVyCiAgICAgICAgc2VsZi51c2VfZ2xvYmFsX3ZmID0gdXNlX2dsb2JhbF92ZgogICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKICAgICAgICBzZWxmLnVzZV9tb2RlbCA9IHVzZV9tb2RlbAogICAgICAgIHNlbGYubWF4X3N0ZXBzID0gbWF4X3N0ZXBzCiAgICAgICAgc2VsZi5nbG9iYWxfaW5pdCA9IGdsb2JhbF9pbml0CiAgICAgICAgc2VsZi5kZW5zZV9yZXdhcmQgPSBkZW5zZV9yZXdhcmQKICAgICAgICBzZWxmLmJ1ZmZlcl9sZW5ndGggPSBidWZmZXJfbGVuZ3RoCiAgICAgICAgc2VsZi5tYXhfbnVtX2NoaWxkcmVuID0gbWF4X251bV9jaGlsZHJlbgogICAgICAgIHNlbGYuaW5pdF9zYWxpZW50X2V2ZW50ID0gaW5pdF9zYWxpZW50X2V2ZW50CiAgICAgICAgc2VsZi50YXJnZXRfc2FsaWVudF9ldmVudCA9IHRhcmdldF9zYWxpZW50X2V2ZW50CiAgICAgICAgc2VsZi5tdWx0aXRocmVhZF9tcGMgPSBtdWx0aXRocmVhZF9tcGMKCiAgICAgICAgIyBUT0RPCiAgICAgICAgc2VsZi5vdmVyYWxsX21kcCA9IG1kcAogICAgICAgIHNlbGYuc2VlZCA9IDAKICAgICAgICBzZWxmLm9wdGlvbl9pZHggPSBvcHRpb25faWR4CgogICAgICAgIHNlbGYubnVtX2dvYWxfaGl0cyA9IDAKICAgICAgICBzZWxmLm51bV9leGVjdXRpb25zID0gMAogICAgICAgIHNlbGYuZ2VzdGF0aW9uX3BlcmlvZCA9IGdlc3RhdGlvbl9wZXJpb2QKCiAgICAgICAgc2VsZi5wb3NpdGl2ZV9leGFtcGxlcyA9IFtdCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLm5lZ2F0aXZlX2V4YW1wbGVzID0gW10KICAgICAgICBzZWxmLm9wdGltaXN0aWNfY2xhc3NpZmllciA9IE5vbmUKICAgICAgICBzZWxmLnBlc3NpbWlzdGljX2NsYXNzaWZpZXIgPSBOb25lCgo8fGZpbV9lbmR8Pg=="]
["2876f2ce3bbade9381629f8ec97bb542c59017a1-2","2876f2ce3bbade9381629f8ec97bb542c59017a1","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMS40IG9uIDIwMTgtMTItMjIgMDM6MTQKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsoImNtcyIsICIwMDAyX2luZm9wYW5lbCIpXQoKICAgIG9wZXJhdGlvbnMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5DcmVhdGVNb2RlbCgKICAgICAgICAgICAgbmFtZT0iQWxidW0iLAogICAgICAgICAgICBmaWVsZHM9WwogICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICJpZCIsCiAgICAgICAgICAgICAgICAgICAgbW9kZWxzLkF1dG9GaWVsZCgKICAgICAgICAgICAgICAgICAgICAgICAgYXV0b19jcmVhdGVkPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlfa2V5PVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZT1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZV9uYW1lPSJJRCIsCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgImNyZWF0ZWQiLAogICAgICAgICAgICAgICAgICAgIG1vZGVscy5EYXRlVGltZUZpZWxkKAogICAgICAgICAgICAgICAgICAgICAgICBhdXRvX25vd19hZGQ9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJUaGUgdGltZSB0aGUgYWxidW0gd2FzIGNyZWF0ZWQgYXQuIiwKICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZV9uYW1lPSJjcmVhdGlvbiB0aW1lIiwKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iLAogICAgICAgICAgICAgICAgICAgIG1vZGVscy5UZXh0RmllbGQoCiAgICAgICAgICAgICAgICAgICAgICAgIGJsYW5rPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0iQSBkZXNjcmlwdGlvbiBvZiB0aGUgYWxidW0uIiwKICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZV9uYW1lPSJkZXNjcmlwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgInNsdWciLAogICAgICAgICAgICAgICAgICAgIG1vZGVscy5TbHVnRmllbGQoCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0iQSB1bmlxdWUgc2x1ZyBpZGVudGlmeWluZyB0aGUgYWxidW0uIiwKICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlPVRydWUsCjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICJ0aXRsZSIsCiAgICAgICAgICAgICAgICAgICAgbW9kZWxzLkNoYXJGaWVsZCgKICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJUaGUgdGl0bGUgb2YgdGhlIGFsYnVtLiIsCiAgICAgICAgICAgICAgICAgICAgICAgIG1heF9sZW5ndGg9MTAwLAogICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NlX25hbWU9InRpdGxlIiwKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgb3B0aW9ucz17CiAgICAgICAgICAgICAgICAidmVyYm9zZV9uYW1lIjogImFsYnVtIiwKICAgICAgICAgICAgICAgICJ2ZXJib3NlX25hbWVfcGx1cmFsIjogImFsYnVtcyIsCiAgICAgICAgICAgICAgICAib3JkZXJpbmciOiAoIi1jcmVhdGVkIiwpLAogICAgICAgICAgICB9LAogICAgICAgICkKICAgIF0KPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZV9uYW1lPSJzbHVnIiwKPHxmaW1fZW5kfD4="]
["066179708c3a9286f074eca49b4618cbc950b4de-3","066179708c3a9286f074eca49b4618cbc950b4de","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc9dXRmLTgKIyBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBQb3dlckxaWS4KIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBCb2xkLUZhbGNvbiAtIGh0dHBzOi8vZ2l0aHViLmNvbS9Qb3dlckxaWS9Cb2xkLUZhbGNvbgojIFNlZSB0aGUgZmlsZSAnZG9jcy9MSUNFTlNFJyBmb3IgY29weWluZyBwZXJtaXNzaW9uLgoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm5uLmZ1bmN0aW9uYWwgYXMgRgpmcm9tIHRvcmNoLnV0aWxzLmRhdGEgaW1wb3J0IERhdGFzZXQKCmNsYXNzIE1hbENvbnYobm4uTW9kdWxlKToKCglkZWYgX19pbml0X18oc2VsZixpbnB1dF9sZW5ndGg9MjAwMDAwMCx3aW5kb3dfc2l6ZT01MDApOgoJCXN1cGVyKE1hbENvbnYsIHNlbGYpLl9faW5pdF9fKCkKCgkJc2VsZi5lbWJlZCA9IG5uLkVtYmVkZGluZygyNTcsIDgsIHBhZGRpbmdfaWR4PTApCgoJCXNlbGYuY29udl8xID0gbm4uQ29udjFkKDQsIDEyOCwgd2luZG93X3NpemUsIHN0cmlkZT13aW5kb3dfc2l6ZSwgYmlhcz1UcnVlKQoJCXNlbGYuY29udl8yID0gbm4uQ29udjFkKDQsIDEyOCwgd2luZG93X3NpemUsIHN0cmlkZT13aW5kb3dfc2l6ZSwgYmlhcz1UcnVlKQoKCQlzZWxmLkJhdGNoTm9ybTFkID0gbm4uQmF0Y2hOb3JtMWQoMTI4KQoKCQlzZWxmLnBvb2xpbmcgPSBubi5NYXhQb29sMWQoaW50KGlucHV0X2xlbmd0aC93aW5kb3dfc2l6ZSkpCgoJCXNlbGYuZmNfMSA9IG5uLkxpbmVhcigxMjgsMTI4KQoJCXNlbGYuZmNfMiA9IG5uLkxpbmVhcigxMjgsMSkKCgkJI3NlbGYuQmF0Y2hOb3JtMWQgPSBubi5CYXRjaE5vcm0xZCgxMjgpCgoJCXNlbGYuc2lnbW9pZCA9IG5uLlNpZ21vaWQoKQoKCQkjc2VsZi5zb2Z0bWF4ID0gbm4uU29mdG1heCgpCgoKCWRlZiBmb3J3YXJkKHNlbGYseCk6CgkJeCA9IHNlbGYuZW1iZWQoeCkKCQkjIENoYW5uZWwgZmlyc3QKCQl4ID0gdG9yY2gudHJhbnNwb3NlKHgsLTEsLTIpCgoJCWNubl92YWx1ZSA9IHNlbGYuY29udl8xKHgubmFycm93KC0yLCAwLCA0KSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoJCWNubl92YWx1ZSA9IHNlbGYuQmF0Y2hOb3JtMWQoY25uX3ZhbHVlKQoJCWdhdGluZ193ZWlnaHQgPSBzZWxmLnNpZ21vaWQoc2VsZi5jb252XzIoeC5uYXJyb3coLTIsIDQsIDQpKSkKCgkJeCA9IGNubl92YWx1ZSAqIGdhdGluZ193ZWlnaHQKPHxmaW1fZW5kfD4="]
["280c67c47eeb8754115d77b6a1d5b002069648c8-1","280c67c47eeb8754115d77b6a1d5b002069648c8","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVybGxpYi5yZXF1ZXN0CmZyb20gYnM0IGltcG9ydCBCZWF1dGlmdWxTb3VwCmltcG9ydCBvcwppbXBvcnQgdGltZQp1cmw9J2h0dHA6Ly93d3cueGlhbm52a3UuY29tL3RhZ3MvY2hhb2R1YW5xdW4tMS5odG1sJyAgICAgICAgICAgI+agueaNrumcgOimgeabtOaUuQpGb2xkZXIgPSfotoXnn63oo5kvJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI+agueaNrumcgOimgeabtOaUuQplbmRwYWdlPTUKCmhlYWRlciA9IHsKICAgICJVc2VyLUFnZW50IjonTW96aWxsYS81LjAgKFgxMTsgTGludXggeDg2XzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNDguMC4yNTY0LjExNiBTYWZhcmkvNTM3LjM2JywKICAgICdBY2NlcHQnOiAnKi8qJywKICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiAnZW4tVVMsZW47cT0wLjgnLAogICAgJ0NhY2hlLUNvbnRyb2wnOiAnbWF4LWFnZT0wJywKICAgICdDb25uZWN0aW9uJzogJ2tlZXAtYWxpdmUnCiAgICB9CiNyZWNlaXZlIHVybCBhbmQgZG93bmxvYWQgdG8gc3BlY2lmaWMgcGF0aApkZWYgRG93bmxvYWQodXJsLHBpY0FsdCxuYW1lKToKICAgIHBhdGg9Rm9sZGVyK3BpY0FsdCsnLycgICAgICAgICAgICAgICAjZm9sZGVyIGFkZHJlc3MKICAgIHVybGxpYi5yZXF1ZXN0LnVybHJldHJpZXZlKCB1cmwsICd7MH17MX0uanBnJy5mb3JtYXQocGF0aCwgbmFtZSkpICAgI2Rvd25sb2FkIHRvIHNwZWNpZmllZCBwYXRoCiAgICByZXR1cm4KI+Wll+WbvuS4i+i9veWHveaVsApkZWYgY3ljbGVfZG93bmxvYWQodGFyZ2V0VXJsLEFsYnVtX3RpdGxlLG51bWJlcik6CiAgICByZXEgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KHVybD10YXJnZXRVcmwsaGVhZGVycz1oZWFkZXIpCiAgICB0aW1lLnNsZWVwKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICPorr/pl67lgZzpob8KICAgIHJlc3BvbnNlID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihyZXEpICAgICAgICAgICAgICAj5Lul5qCH562+5pa55byP5omT5byA572R5Z2ACiAgICBodG1sID0gcmVzcG9uc2UucmVhZCgpLmRlY29kZSgndXRmLTgnLCdpZ25vcmUnKSAgICAgI+S7pXV0Zi045pa55byP6Kej56CBcmVhZCzpgYfliLDplJnor69pZ25vcmUKICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKGh0bWwsICdodG1sLnBhcnNlcicpICAgICAgICAgICAjcGFyc2Vy6KGo56S6QlM055qEaHRtbOino+aekOWZqAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBEaXZzID0gc291cC5maW5kX2FsbCgnaW1nJyxhdHRycz17J2NsYXNzJzonY29udGVudF9pbWcnIH0pICPmib7liLDlr7nlupTmoIfnrb7lr7nlupTlsZ7mgKfnmoTlm77niYcs5Zyo5q2k5Li65bGF5Lit5pS+572u55qE5aSn5Zu+CiAgICBub3dwYWdlTGluayA9IHRhcmdldFVybCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj5b2T5YmN6aG156CB6ZO+5o6lCiAgICBuZXh0UGFnZUxpbmsgPSBzb3VwLmZpbmQoJ2EnLGF0dHJzPXsnY2xhc3MnOidhMSd9LHRleHQ9J+S4i+S4gOmhtScpWydocmVmJ10gICAjJ+S4i+S4gOmhtSfmjInpkq7lr7nlupTnmoTpk77mjqUKICAgIGZvciBkaXYgaW4gRGl2czoKPHxmaW1fZW5kfD4="]
["aae5911023caf8c6853b337ffea6634855cbfb95-5","aae5911023caf8c6853b337ffea6634855cbfb95","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGhhc2hsaWIKaW1wb3J0IGpzb24KaW1wb3J0IHBwcmludAppbXBvcnQgcmFuZG9tCmltcG9ydCBzdHJpbmcKaW1wb3J0IHRleHR3cmFwCmltcG9ydCByZQpmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCgpjbGFzcyBNaXNjOgoKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgYXJyYXlfYWRkKGFycmF5LCB2YWx1ZSk6CiAgICAgICAgYXJyYXkuYXBwZW5kKHZhbHVlKQogICAgICAgIHJldHVybiB2YWx1ZQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBhcnJheV9maW5kKGFycmF5LCBpdGVtKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJldHVybiBhcnJheS5pbmRleChpdGVtKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcmV0dXJuIE5vbmUKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgYXJyYXlfZ2V0KGFycmF5LCBwb3NpdGlvbj1Ob25lKToKICAgICAgICBpZiBhcnJheSBhbmQgbGVuKGFycmF5KSA+IDA6CiAgICAgICAgICAgIGlmIChwb3NpdGlvbiBpcyBub3QgTm9uZSkgYW5kIGxlbihhcnJheSkgPiBwb3NpdGlvbjoKICAgICAgICAgICAgICAgIHJldHVybiBhcnJheVtwb3NpdGlvbl0KCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgYXJyYXlfcG9wKGFycmF5LCBwb3NpdGlvbj1Ob25lKToKICAgICAgICBpZiBhcnJheSBhbmQgbGVuKGFycmF5KSA+MDoKICAgICAgICAgICAgaWYgKHBvc2l0aW9uIGlzIG5vdCBOb25lKSBhbmQgbGVuKGFycmF5KSA+IHBvc2l0aW9uOgogICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5LnBvcChwb3NpdGlvbikKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJldHVybiBhcnJheS5wb3AoKQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBhcnJheV9wb3BfYW5kX3RyaW0oYXJyYXksIHBvc2l0aW9uPU5vbmUpOgogICAgICAgIHZhbHVlID0gTWlzYy5hcnJheV9wb3AoYXJyYXkscG9zaXRpb24pCiAgICAgICAgcmV0dXJuIE1pc2MudHJpbSh2YWx1ZSkKCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGNodW5rcyhpdGVtcywgc3BsaXQpOgogICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihpdGVtcyksIHNwbGl0KToKICAgICAgICAgICAgeWllbGQgaXRlbXNbaTppICsgc3BsaXRdCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGNsYXNzX25hbWUodGFyZ2V0KToKICAgICAgICBpZiB0YXJnZXQ6CiAgICAgICAgICAgIHJldHVybiB0eXBlKHRhcmdldCkuX19uYW1lX18KICAgICAgICByZXR1cm4gTm9uZQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBnZXRfdmFsdWUodGFyZ2V0LCBrZXksIGRlZmF1bHQ9Tm9uZSk6CiAgICAgICAgaWYgdGFyZ2V0IGlzIG5vdCBOb25lOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRhcmdldC5nZXQoa2V5KQogICAgICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICByZXR1cm4gZGVmYXVsdAoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBnZXRfcmFuZG9tX2NvbG9yKG1heD01KToKICAgICAgICBpZiBtYXggPiA1OiBtYXggPSA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWRkIHN1cHBvcnQgZm9yIG1vcmUgdGhhbiA1IGNvbG9ycwogICAgICAgIGNvbG9ycyA9IFsnc2t5Ymx1ZScsICdkYXJrc2VhZ3JlZW4nLCAncGFsZXZpb2xldHJlZCcsICdjb3JhbCcsICdkYXJrZ3JheSddCiAgICAgICAgcmV0dXJuIGNvbG9yc1tNaXNjLnJhbmRvbV9udW1iZXIoMCwgbWF4LTEpXQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBpc19udW1iZXIodmFsdWUpOgogICAgICAgIHRyeToKICAgICAgICAgICAgaW50KHZhbHVlKQogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcGFzcwogICAgICAgIHJldHVybiBGYWxzZQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBqc29uX2R1bXBzKHRhcmdldCwgbWVzc2FnZT1Ob25lKToKICAgICAgICBpZiB0YXJnZXQ6CiAgICAgICAgICAgIHJldHVybiBqc29uLmR1bXBzKHRhcmdldCwgaW5kZW50PTQpCiAgICAgICAgcmV0dXJuIG1lc3NhZ2UKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYganNvbl9mb3JtYXQodGFyZ2V0LCBtZXNzYWdlPU5vbmUpOgogICAgICAgIGlmIHRhcmdldDoKICAgICAgICAgICAgcmV0dXJuIGpzb24uZHVtcHModGFyZ2V0LCBpbmRlbnQ9NCkKICAgICAgICByZXR1cm4gbWVzc2FnZQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBqc29uX2xvYWQodGFyZ2V0KToKICAgICAgICBpZiB0YXJnZXQ6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHJldHVybiBqc29uLmxvYWRzKHRhcmdldCkKICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgcGFzcwogICAgICAgIHJldHVybiBOb25lCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIG5vbmVfb3JfZW1wdHkodGFyZ2V0LGZpZWxkKToKICAgICAgICBpZiB0YXJnZXQ6CiAgICAgICAgICAgIHZhbHVlID0gdGFyZ2V0LmdldChmaWVsZCkKICAgICAgICAgICAgcmV0dXJuICh2YWx1ZSBpcyBOb25lKSBvciB2YWx1ZSA9PSAnJwogICAgICAgIHJldHVybiBUcnVlCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIG9iamVjdF9kYXRhKHRhcmdldCk6CiAgICAgICAgI2ZpZWxkcyA9IFtmaWVsZCBmb3IgZmllbGQgaW4gZGlyKHRhcmdldCkgaWYgbm90IGNhbGxhYmxlKGdldGF0dHIodGFyZ2V0LCBmaWVsZCkpIGFuZCBub3QgZmllbGQuc3RhcnRzd2l0aCgiYV9fIildCiAgICAgICAgcmV0dXJuIHRhcmdldC5fX2RpY3RfXyAjIHRoaXMgb25lIHNlZW1zIHRvIGRvIHRoZSB0cmljayAoaWYgbm90IGxvb2sgYXQgdGhlIGNvZGUgc2FtcGxlIGFib3ZlKQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiByYW5kb21fZmlsZW5hbWUoZXh0ZW5zaW9uPScudG1wJywgbGVuZ3RoPTEwKToKICAgICAgICBpZiBsZW4oZXh0ZW5zaW9uKSA+IDAgYW5kICBleHRlbnNpb25bMF0gIT0gJy4nIDogZXh0ZW5zaW9uID0gJy4nICsgZXh0ZW5zaW9uCiAgICAgICAgcmV0dXJuICd7MH17MX0nLmZvcm1hdCgnJy5qb2luKHJhbmRvbS5jaG9pY2VzKHN0cmluZy5hc2NpaV9sb3dlcmNhc2UgKyBzdHJpbmcuZGlnaXRzLCBrPWxlbmd0aCkpICwgIGV4dGVuc2lvbikKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgcmFuZG9tX251bWJlcihtaW49MSxtYXg9NjUwMDApOgogICAgICAgIHJldHVybiByYW5kb20ucmFuZGludChtaW4sIG1heCkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiByYW5kb21fc3RyaW5nX2FuZF9udW1iZXJzKGxlbmd0aD02LHByZWZpeD0nJyk6CiAgICAgICAgcmV0dXJuIHByZWZpeCArICcnLmpvaW4ocmFuZG9tLmNob2ljZXMoc3RyaW5nLmFzY2lpX3VwcGVyY2FzZSArIHN0cmluZy5kaWdpdHMsIGs9bGVuZ3RoKSkKCjx8ZmltX2VuZHw+"]
["11420f0af1d8000bb7aac74553a4ff4c17883787-2","11420f0af1d8000bb7aac74553a4ff4c17883787","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGdsb2IKaW1wb3J0IHN5cwoKZnJvbSBzaHV0aWwgaW1wb3J0IGNvcHlmaWxlCgoKIiIiCkNvbGxhcHNlIGZyYW1lcyBmcm9tIGEgZGlyIHRvIGEgdmlkZW8KYXJnIDE6IGlucHV0IGZvbGRlciBwYXRoCmFyZyAyOiBvdXRwdXQgdmlkZW8gZm9sZGVyCiIiIgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGlucHV0X2RpciA9IHN5cy5hcmd2WzFdCiAgICBvdXRwdXRfZm9sZGVyID0gc3lzLmFyZ3ZbMl0KCiAgICBmaWxlcyA9IGdsb2IuZ2xvYihpbnB1dF9kaXIgKyAiKi5qcGciKQoKICAgIGZvciBmIGluIGZpbGVzOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZmlsZV9udW1iZXIgPSAnJy5qb2luKGMgZm9yIGMgaW4gZiBpZiBjLmlzZGlnaXQoKSkKICAgICAgICBuZXdfZmlsZV9uYW1lID0gJ291dHB1dF9mcmFtZS0nICsgInswOjA9NWR9Ii5mb3JtYXQoaW50KGZpbGVfbnVtYmVyKSkgKyAnLmpwZycKICAgICAgICBjb3B5ZmlsZShmLCBvdXRwdXRfZm9sZGVyICsgbmV3X2ZpbGVfbmFtZSkKPHxmaW1fZW5kfD4="]
["66d611171dcc5f757cb31a8ba73484882bbe6fa6-3","66d611171dcc5f757cb31a8ba73484882bbe6fa6","PHxmaW1fcHJlZml4fD4KIyBDb3BpZWQgJiBtb2RpZmllZCBmcm9tIGh0dHBzOi8vd3d3LmRhY29uLmlvL2NvbXBldGl0aW9ucy9vZmZpY2lhbC8yMzU3NTcvY29kZXNoYXJlLzMyNDQ/cGFnZT0xJmR0eXBlPXJlY2VudAoKCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgdG9yY2gKaW1wb3J0IHRvcmNoLm5uIGFzIG5uCmltcG9ydCB0b3JjaC5ubi5mdW5jdGlvbmFsIGFzIEYKCgpkZWYgZ2V0X3NpbnVzb2lkX2VuY29kaW5nX3RhYmxlKG5fc2VxLCBoaWRuKToKICAgIAogICAgZGVmIGNhbF9hbmdsZShwb3NpdGlvbiwgaV9oaWRuKToKICAgICAgICByZXR1cm4gcG9zaXRpb24gLyBucC5wb3dlcigxMDAwMCwgMiAqIChpX2hpZG4gLy8gMikgLyBoaWRuKQoKICAgIGRlZiBnZXRfcG9zaV9hbmdsZV92ZWMocG9zaXRpb24pOgogICAgICAgIHJldHVybiBbY2FsX2FuZ2xlKHBvc2l0aW9uLCBpX2hpZG4pIGZvciBpX2hpZG4gaW4gcmFuZ2UoaGlkbildCiAgICAKICAgIHNpbnVzb2lkX3RhYmxlID0gbnAuYXJyYXkoW2dldF9wb3NpX2FuZ2xlX3ZlYyhpX3NlcSkgZm9yIGlfc2VxIGluIHJhbmdlKG5fc2VxKV0pCiAgICBzaW51c29pZF90YWJsZVs6LCAwOjoyXSA9IG5wLnNpbihzaW51c29pZF90YWJsZVs6LCAwOjoyXSkgICMgZXZlbiBpbmRleCBzaW4KICAgIHNpbnVzb2lkX3RhYmxlWzosIDE6OjJdID0gbnAuY29zKHNpbnVzb2lkX3RhYmxlWzosIDE6OjJdKSAgIyBvZGQgaW5kZXggY29zCgogICAgcmV0dXJuIHNpbnVzb2lkX3RhYmxlCjx8ZmltX2hvbGV8PgogICAgc3Vic2VxdWVudF9tYXNrID0gdG9yY2gub25lcygoYmF0Y2gsIHdpbmRvd19zaXplLCB3aW5kb3dfc2l6ZSksIGRldmljZT1zZXEuZGV2aWNlKQogICAgc3Vic2VxdWVudF9tYXNrID0gc3Vic2VxdWVudF9tYXNrLnRyaXUoZGlhZ29uYWw9MSkKICAgIHJldHVybiBzdWJzZXF1ZW50X21hc2sKCgpjbGFzcyBzY2FsZWRfZG90X3Byb2R1Y3RfYXR0ZW50aW9uKG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgYXJncyk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5hcmdzID0gYXJncwogICAgICAgIHNlbGYuZHJvcG91dCA9IG5uLkRyb3BvdXQoc2VsZi5hcmdzLmRyb3BvdXQpCiAgICAgICAgc2VsZi5zY2FsZSA9IDEgLyAoc2VsZi5hcmdzLmRfaGVhZCAqKiAwLjUpCgogICAgZGVmIGZvcndhcmQoc2VsZiwgcSwgaywgdiwgYXR0bl9tYXNrPUZhbHNlKToKICAgICAgICBzY29yZXMgPSB0b3JjaC5tYXRtdWwocSwgay50cmFuc3Bvc2UoLTEsIC0yKSkKICAgICAgICBzY29yZXMgPSBzY29yZXMubXVsXyhzZWxmLnNjYWxlKQoKICAgICAgICBpZiBhdHRuX21hc2sgaXMgbm90IEZhbHNlOgogICAgICAgICAgICBzY29yZXMubWFza2VkX2ZpbGxfKGF0dG5fbWFzaywgLTFlOSkKICAgICAgICAgICAgYXR0bl9wcm9iID0gbm4uU29mdG1heChkaW09LTEpKHNjb3JlcykKICAgICAgICAgICAgYXR0bl9wcm9iID0gc2VsZi5kcm9wb3V0KGF0dG5fcHJvYikKICAgICAgICAgICAgY29udGV4dCA9IHRvcmNoLm1hdG11bChhdHRuX3Byb2IsIHYpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgYXR0bl9wcm9iID0gbm4uU29mdG1heChkaW09LTEpKHNjb3JlcykKICAgICAgICAgICAgYXR0bl9wcm9iID0gc2VsZi5kcm9wb3V0KGF0dG5fcHJvYikKICAgICAgICAgICAgY29udGV4dCA9IHRvcmNoLm1hdG11bChhdHRuX3Byb2IsIHYpCiAgICAKICAgICAgICByZXR1cm4gY29udGV4dCwgYXR0bl9wcm9iCgoKY2xhc3MgbXVsdGloZWFkX2F0dGVudGlvbihubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ3MpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKICAgICAgICBzZWxmLldfUSA9IG5uLkxpbmVhcihzZWxmLmFyZ3MuZF9oaWRuLCBzZWxmLmFyZ3Mubl9oZWFkICogc2VsZi5hcmdzLmRfaGVhZCkKICAgICAgICBzZWxmLldfSyA9IG5uLkxpbmVhcihzZWxmLmFyZ3MuZF9oaWRuLCBzZWxmLmFyZ3Mubl9oZWFkICogc2VsZi5hcmdzLmRfaGVhZCkKICAgICAgICBzZWxmLldfViA9IG5uLkxpbmVhcihzZWxmLmFyZ3MuZF9oaWRuLCBzZWxmLmFyZ3Mubl9oZWFkICogc2VsZi5hcmdzLmRfaGVhZCkKCiAgICAgICAgc2VsZi5zY2FsZWRfZG90X2F0dG4gPSBzY2FsZWRfZG90X3Byb2R1Y3RfYXR0ZW50aW9uKHNlbGYuYXJncykKICAgICAgICBzZWxmLmxpbmVhciA9IG5uLkxpbmVhcihzZWxmLmFyZ3Mubl9oZWFkICogc2VsZi5hcmdzLmRfaGVhZCwgc2VsZi5hcmdzLmRfaGlkbikKICAgICAgICBzZWxmLmRyb3BvdXQgPSBubi5Ecm9wb3V0KHNlbGYuYXJncy5kcm9wb3V0KQogICAgCiAgICBkZWYgZm9yd2FyZChzZWxmLCBxLCBrLCB2LCBhdHRuX21hc2s9RmFsc2UpOgogICAgICAgIGJhdGNoX3NpemUgPSBxLnNpemUoMCkKICAgICAgICBxX3MgPSBzZWxmLldfUShxKS52aWV3KGJhdGNoX3NpemUsIC0xLCBzZWxmLmFyZ3Mubl9oZWFkLCBzZWxmLmFyZ3MuZF9oZWFkKS50cmFuc3Bvc2UoMSwgMikKICAgICAgICBrX3MgPSBzZWxmLldfSyhrKS52aWV3KGJhdGNoX3NpemUsIC0xLCBzZWxmLmFyZ3Mubl9oZWFkLCBzZWxmLmFyZ3MuZF9oZWFkKS50cmFuc3Bvc2UoMSwgMikKICAgICAgICB2X3MgPSBzZWxmLldfVih2KS52aWV3KGJhdGNoX3NpemUsIC0xLCBzZWxmLmFyZ3Mubl9oZWFkLCBzZWxmLmFyZ3MuZF9oZWFkKS50cmFuc3Bvc2UoMSwgMikKCiAgICAgICAgaWYgYXR0bl9tYXNrIGlzIG5vdCBGYWxzZToKICAgICAgICAgICAgYXR0bl9tYXNrID0gYXR0bl9tYXNrLnVuc3F1ZWV6ZSgxKS5yZXBlYXQoMSwgc2VsZi5hcmdzLm5faGVhZCwgMSwgMSkKICAgICAgICAgICAgY29udGV4dCwgYXR0bl9wcm9iID0gc2VsZi5zY2FsZWRfZG90X2F0dG4ocV9zLCBrX3MsIHZfcywgYXR0bl9tYXNrKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGNvbnRleHQsIGF0dG5fcHJvYiA9IHNlbGYuc2NhbGVkX2RvdF9hdHRuKHFfcywga19zLCB2X3MpCiAgICAgICAgY29udGV4dCA9IGNvbnRleHQudHJhbnNwb3NlKDEsIDIpLmNvbnRpZ3VvdXMoKS52aWV3KGJhdGNoX3NpemUsIC0xLCBzZWxmLmFyZ3Mubl9oZWFkICogc2VsZi5hcmdzLmRfaGVhZCkKCiAgICAgICAgb3V0cHV0ID0gc2VsZi5saW5lYXIoY29udGV4dCkKICAgICAgICBvdXRwdXQgPSBzZWxmLmRyb3BvdXQob3V0cHV0KQoKICAgICAgICByZXR1cm4gb3V0cHV0LCBhdHRuX3Byb2IKCgpjbGFzcyBwb3N3aXNlX2ZlZWRmb3J3YXJkX25ldChubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ3MpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKICAgICAgICBzZWxmLmNvbnYxID0gbm4uQ29udjFkKGluX2NoYW5uZWxzPXNlbGYuYXJncy5kX2hpZG4sIG91dF9jaGFubmVscz1zZWxmLmFyZ3MuZF9mZiwga2VybmVsX3NpemU9MSkKICAgICAgICBzZWxmLmNvbnYyID0gbm4uQ29udjFkKGluX2NoYW5uZWxzPXNlbGYuYXJncy5kX2ZmLCBvdXRfY2hhbm5lbHM9c2VsZi5hcmdzLmRfaGlkbiwga2VybmVsX3NpemU9MSkKICAgICAgICBzZWxmLmFjdGl2ZSA9IEYuZ2VsdQogICAgICAgIHNlbGYuZHJvcG91dCA9IG5uLkRyb3BvdXQoc2VsZi5hcmdzLmRyb3BvdXQpCgogICAgZGVmIGZvcndhcmQoc2VsZiwgaW5wdXRzKToKICAgICAgICBvdXRwdXQgPSBzZWxmLmNvbnYxKGlucHV0cy50cmFuc3Bvc2UoMSwgMikuY29udGlndW91cygpKQogICAgICAgIG91dHB1dCA9IHNlbGYuYWN0aXZlKG91dHB1dCkKICAgICAgICBvdXRwdXQgPSBzZWxmLmNvbnYyKG91dHB1dCkudHJhbnNwb3NlKDEsIDIpLmNvbnRpZ3VvdXMoKQogICAgICAgIG91dHB1dCA9IHNlbGYuZHJvcG91dChvdXRwdXQpCgogICAgICAgIHJldHVybiBvdXRwdXQKCmNsYXNzIGVuY29kZXJsYXllcihubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ3MpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKICAgICAgICBzZWxmLnNlbGZfYXR0biA9IG11bHRpaGVhZF9hdHRlbnRpb24oc2VsZi5hcmdzKQogICAgICAgIHNlbGYucG9zX2ZmbiA9IHBvc3dpc2VfZmVlZGZvcndhcmRfbmV0KHNlbGYuYXJncykKCiAgICBkZWYgZm9yd2FyZChzZWxmLCBpbnB1dHMpOgogICAgICAgIGF0dF9vdXRwdXRzLCBhdHRuX3Byb2IgPSBzZWxmLnNlbGZfYXR0bihpbnB1dHMsIGlucHV0cywgaW5wdXRzKQogICAgICAgIGF0dF9vdXRwdXRzID0gYXR0X291dHB1dHMgKyBpbnB1dHMKCiAgICAgICAgZmZuX291dHB1dHMgPSBzZWxmLnBvc19mZm4oYXR0X291dHB1dHMpCiAgICAgICAgZmZuX291dHB1dHMgPSBmZm5fb3V0cHV0cyArIGF0dF9vdXRwdXRzCgogICAgICAgIHJldHVybiBmZm5fb3V0cHV0cywgYXR0bl9wcm9iCgoKY2xhc3MgZW5jb2Rlcihubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ3MpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKICAgICAgICBzZWxmLmVuY19lbWIgPSBubi5MaW5lYXIoaW5fZmVhdHVyZXM9c2VsZi5hcmdzLndpbmRvd19zaXplLCBvdXRfZmVhdHVyZXM9c2VsZi5hcmdzLmRfaGlkbiwgYmlhcz1GYWxzZSkKICAgICAgICBzaW51c29pZF90YWJsZSA9IHRvcmNoLkZsb2F0VGVuc29yKGdldF9zaW51c29pZF9lbmNvZGluZ190YWJsZShzZWxmLmFyZ3MuZV9mZWF0dXJlcywgc2VsZi5hcmdzLmRfaGlkbikpCiAgICAgICAgc2VsZi5wb3NfZW1iID0gbm4uRW1iZWRkaW5nLmZyb21fcHJldHJhaW5lZChzaW51c29pZF90YWJsZSwgZnJlZXplPVRydWUpCiAgICAgICAgc2VsZi5sYXllcnMgPSBubi5Nb2R1bGVMaXN0KFtlbmNvZGVybGF5ZXIoc2VsZi5hcmdzKSBmb3IgXyBpbiByYW5nZShzZWxmLmFyZ3Mubl9sYXllcildKQogICAgICAgIHNlbGYuZW5jX2F0dG5fcHJvYnMgPSBOb25lCgogICAgZGVmIGZvcndhcmQoc2VsZiwgaW5wdXRzKTogICMgaW5wdXRzLnNoYXBlID0gKGJhdGNoX3NpemUsIHdpbmRvd19zaXplLCBuX2ZlYXR1cmVzKSAgZXgpICgxMjgsIDEwICwgNCkKICAgICAgICBzZWxmLmVuY19hdHRuX3Byb2JzID0gW10KICAgICAgICBwb3NpdGlvbnMgPSB0b3JjaC5hcmFuZ2UoaW5wdXRzLnNpemUoMiksIGRldmljZT1pbnB1dHMuZGV2aWNlKS5leHBhbmQoaW5wdXRzLnNpemUoMCksIGlucHV0cy5zaXplKDIpKS5jb250aWd1b3VzKCkgICMgKGJhdGNoX3NpemUsIG5fZmVhdHVyZXMpICBleCkgKDEyOCwgNCkKICAgICAgICBvdXRwdXRzID0gc2VsZi5lbmNfZW1iKGlucHV0cy50cmFuc3Bvc2UoMiwgMSkuY29udGlndW91cygpKSArIHNlbGYucG9zX2VtYihwb3NpdGlvbnMpICAjIChiYXRjaF9zaXplLCBuX2ZlYXR1cmVzLCBuX2hpZG4pICBleCkgKDEyOCwgNCwgMjU2KQoKICAgICAgICBmb3IgbGF5ZXIgaW4gc2VsZi5sYXllcnM6CiAgICAgICAgICAgIG91dHB1dHMsIGVuY19hdHRuX3Byb2IgPSBsYXllcihvdXRwdXRzKQogICAgICAgICAgICBzZWxmLmVuY19hdHRuX3Byb2JzLmFwcGVuZChlbmNfYXR0bl9wcm9iKQoKICAgICAgICByZXR1cm4gb3V0cHV0cwoKICAgIApjbGFzcyBkZWNvZGVybGF5ZXIobm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCiAgICAgICAgc2VsZi5zZWxmX2F0dG4gPSBtdWx0aWhlYWRfYXR0ZW50aW9uKHNlbGYuYXJncykKICAgICAgICBzZWxmLmRlY19lbmNfYXR0biA9IG11bHRpaGVhZF9hdHRlbnRpb24oc2VsZi5hcmdzKQogICAgICAgIHNlbGYucG9zX2ZmbiA9IHBvc3dpc2VfZmVlZGZvcndhcmRfbmV0KHNlbGYuYXJncykKCiAgICBkZWYgZm9yd2FyZChzZWxmLCBkZWNfaW5wdXRzLCBlbmNfb3V0cHV0cywgYXR0bl9tYXNrKToKICAgICAgICBzZWxmX2F0dF9vdXRwdXRzLCBkZWNfYXR0bl9wcm9iID0gc2VsZi5zZWxmX2F0dG4oZGVjX2lucHV0cywgZGVjX2lucHV0cywgZGVjX2lucHV0cywgYXR0bl9tYXNrKQogICAgICAgIHNlbGZfYXR0X291dHB1dHMgPSBzZWxmX2F0dF9vdXRwdXRzICsgZGVjX2lucHV0cwoKICAgICAgICBkZWNfZW5jX2F0dF9vdXRwdXRzLCBkZWNfZW5jX2F0dG5fcHJvYiA9IHNlbGYuZGVjX2VuY19hdHRuKHNlbGZfYXR0X291dHB1dHMsIGVuY19vdXRwdXRzLCBlbmNfb3V0cHV0cykKICAgICAgICBkZWNfZW5jX2F0dF9vdXRwdXRzID0gZGVjX2VuY19hdHRfb3V0cHV0cyArIHNlbGZfYXR0X291dHB1dHMKICAgICAgICAKICAgICAgICBmZm5fb3V0cHV0cyA9IHNlbGYucG9zX2ZmbihkZWNfZW5jX2F0dF9vdXRwdXRzKQogICAgICAgIGZmbl9vdXRwdXRzID0gZmZuX291dHB1dHMgKyBkZWNfZW5jX2F0dF9vdXRwdXRzCgogICAgICAgIHJldHVybiBmZm5fb3V0cHV0cywgZGVjX2F0dG5fcHJvYiwgZGVjX2VuY19hdHRuX3Byb2IKCgoKY2xhc3MgZGVjb2Rlcihubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ3MpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKICAgICAgICBzZWxmLmRlY19lbWIgPSBubi5MaW5lYXIoaW5fZmVhdHVyZXM9c2VsZi5hcmdzLmRfZmVhdHVyZXMsIG91dF9mZWF0dXJlcz1zZWxmLmFyZ3MuZF9oaWRuLCBiaWFzPUZhbHNlKQogICAgICAgIHNpbnVzb2lkX3RhYmxlID0gdG9yY2guRmxvYXRUZW5zb3IoZ2V0X3NpbnVzb2lkX2VuY29kaW5nX3RhYmxlKHNlbGYuYXJncy53aW5kb3dfc2l6ZSAsIHNlbGYuYXJncy5kX2hpZG4pKQogICAgICAgIHNlbGYucG9zX2VtYiA9IG5uLkVtYmVkZGluZy5mcm9tX3ByZXRyYWluZWQoc2ludXNvaWRfdGFibGUsIGZyZWV6ZT1UcnVlKQogICAgICAgIHNlbGYubGF5ZXJzID0gbm4uTW9kdWxlTGlzdChbZGVjb2RlcmxheWVyKHNlbGYuYXJncykgZm9yIF8gaW4gcmFuZ2Uoc2VsZi5hcmdzLm5fbGF5ZXIpXSkKICAgICAgICBzZWxmLmRlY19hdHRuX3Byb2JzID0gTm9uZQogICAgICAgIHNlbGYuZGVjX2VuY19hdHRuX3Byb2JzID0gTm9uZQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIGRlY19pbnB1dHMsIGVuY19vdXRwdXRzKToKICAgICAgICBzZWxmLmRlY19hdHRuX3Byb2JzID0gW10gIAogICAgICAgIHNlbGYuZGVjX2VuY19hdHRuX3Byb2JzID0gW10KICAgICAgICBwb3NpdGlvbnMgPSB0b3JjaC5hcmFuZ2UoZGVjX2lucHV0cy5zaXplKDEpLCBkZXZpY2U9ZGVjX2lucHV0cy5kZXZpY2UpLmV4cGFuZChkZWNfaW5wdXRzLnNpemUoMCksIGRlY19pbnB1dHMuc2l6ZSgxKSkuY29udGlndW91cygpCiAgICAgICAgZGVjX291dHB1dCA9IHNlbGYuZGVjX2VtYihkZWNfaW5wdXRzKSArIHNlbGYucG9zX2VtYihwb3NpdGlvbnMpCiAgICAgICAgCiAgICAgICAgYXR0bl9tYXNrID0gdG9yY2guZ3QoZ2V0X2F0dG5fZGVjb2Rlcl9tYXNrKGRlY19pbnB1dHMpLCAwKQoKICAgICAgICBmb3IgbGF5ZXIgaW4gc2VsZi5sYXllcnM6CiAgICAgICAgICAgIGRlY19vdXRwdXRzLCBkZWNfYXR0bl9wcm9iLCBkZWNfZW5jX2F0dG5fcHJvYiA9IGxheWVyKGRlY19vdXRwdXQsIGVuY19vdXRwdXRzLCBhdHRuX21hc2spCiAgICAgICAgICAgIHNlbGYuZGVjX2F0dG5fcHJvYnMuYXBwZW5kKGRlY19hdHRuX3Byb2IpCiAgICAgICAgICAgIHNlbGYuZGVjX2VuY19hdHRuX3Byb2JzLmFwcGVuZChkZWNfZW5jX2F0dG5fcHJvYikKICAgICAgICAKICAgICAgICByZXR1cm4gZGVjX291dHB1dHMKCgpjbGFzcyBUaW1lRGlzdHJpYnV0ZWQobm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2R1bGUpOgogICAgICAgIHN1cGVyKFRpbWVEaXN0cmlidXRlZCwgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYubW9kdWxlID0gbW9kdWxlCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeCk6CgogICAgICAgIGlmIGxlbih4LnNpemUoKSkgPD0gMjogICMgKGJhdGNoX3NpemUsIHdpbmRvd19zaXplICogZF9oaWRuKSAgZXgpICgxMjgsIDI1NjApCiAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZSh4KQogICAgICAgIAogICAgICAgIHhfcmVzaGFwZSA9IHguY29udGlndW91cygpLnZpZXcoLTEsIHguc2l6ZSgtMSkpICAjIChzYW1wbGVzICogdGltZXN0ZXBzLCBpbnB1dF9zaXplKQogICAgICAgIHkgPSBzZWxmLm1vZHVsZSh4X3Jlc2hhcGUpCgogICAgICAgIGlmIGxlbih4LnNpemUoKSkgPT0gMzoKICAgICAgICAgICAgeSA9IHkuY29udGlndW91cygpLnZpZXcoeC5zaXplKDApLCAtMSwgeS5zaXplKC0xKSkKCiAgICAgICAgcmV0dXJuIHkKCgpjbGFzcyB0cmFuc2Zvcm1lcihubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ3MpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKICAgICAgICBzZWxmLmVuY29kZXIgPSBlbmNvZGVyKHNlbGYuYXJncykKICAgICAgICBzZWxmLmRlY29kZXIgPSBkZWNvZGVyKHNlbGYuYXJncykKICAgICAgICBzZWxmLmZjMSA9IFRpbWVEaXN0cmlidXRlZChubi5MaW5lYXIoaW5fZmVhdHVyZXM9c2VsZi5hcmdzLndpbmRvd19zaXplKnNlbGYuYXJncy5kX2hpZG4sIG91dF9mZWF0dXJlcz1zZWxmLmFyZ3MuZGVuc2VfaCkpCiAgICAgICAgc2VsZi5mYzIgPSBUaW1lRGlzdHJpYnV0ZWQobm4uTGluZWFyKGluX2ZlYXR1cmVzPXNlbGYuYXJncy5kZW5zZV9oLCBvdXRfZmVhdHVyZXM9c2VsZi5hcmdzLmFoZWFkICogc2VsZi5hcmdzLm91dHB1dF9zaXplKSkKICAgICAgICBzZWxmLmFjdGl2YXRpb24gPSBubi5TRUxVKCkKCiAgICBkZWYgZm9yd2FyZChzZWxmLCBlbmNfaW5wdXRzLCBkZWNfaW5wdXRzKToKICAgICAgICBlbmNfb3V0cHV0cyA9IHNlbGYuZW5jb2RlcihlbmNfaW5wdXRzKSAgIyAoYmF0Y2hfc2l6ZSwgbl9mZWF0dXJlcywgZF9oaWRuKSAgZXgpICgxMjgsIDQsIDI1NikKICAgICAgICBkZWNfb3V0cHV0cyA9IHNlbGYuZGVjb2RlcihkZWNfaW5wdXRzLCBlbmNfb3V0cHV0cykgICMgKGJhdGNoX3NpemUsIHdpbmRvd19zaXplLCBkX2hpZG4pICBleCkgKDEyOCwgMTAsIDI1NikKICAgICAgICAKICAgICAgICAjIGRlY19vdXRwdXRzLnZpZXcoZGVjX291dHB1dHMuc2l6ZSgwKSwgLTEpLnNoYXBlID0gKGJhdGNoX3NpemUsIHdpbmRvd19zaXplICogZF9oaWRuKSAgZXgpICgxMjgsIDI1NjApCiAgICAgICAgZGVjX291dHB1dHMgPSBzZWxmLmZjMShkZWNfb3V0cHV0cy52aWV3KGRlY19vdXRwdXRzLnNpemUoMCksIC0xKSkgICMgKGJhdGNoX3NpemUsIGRlbnNlX2gpICAgZXgpICgxMjgsIDEyOCkKICAgICAgICBkZWNfb3V0cHV0cyA9IHNlbGYuYWN0aXZhdGlvbihkZWNfb3V0cHV0cykKICAgICAgICBkZWNfb3V0cHV0cyA9IHNlbGYuZmMyKGRlY19vdXRwdXRzKSAgIyAoYmF0Y2hfc2l6ZSwgYWhlYWQgKiBvdXRwdXRfc2l6ZSkgIGV4KSAoMTI4LCA4KSAgICAgICAgICAgICAgICAKICAgICAgICBkZWNfb3V0cHV0cyA9IGRlY19vdXRwdXRzLnZpZXcoZGVjX291dHB1dHMuc2l6ZSgwKSwgc2VsZi5hcmdzLmFoZWFkLCBzZWxmLmFyZ3Mub3V0cHV0X3NpemUpICAjICBleCkgKDEyOCwgMiwgNCkKCiAgICAgICAgcmV0dXJuIGRlY19vdXRwdXRzCjx8ZmltX3N1ZmZpeHw+CgoKZGVmIGdldF9hdHRuX2RlY29kZXJfbWFzayhzZXEpOgogICAgYmF0Y2gsIHdpbmRvd19zaXplLCBkX2hpZG4gPSBzZXEuc2l6ZSgpCjx8ZmltX2VuZHw+"]
["9569e42a33a7fd0331ea9098384e9531920eab67-3","9569e42a33a7fd0331ea9098384e9531920eab67","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgbGljZW5zZSByZW1vdmVkIGZvciBicmV2aXR5CmltcG9ydCBvcwppbXBvcnQgc3lzCmN1cnJlbnRfZm9sZGVyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQpzeXMucGF0aC5hcHBlbmQoY3VycmVudF9mb2xkZXIpCgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKCmRlZiBvcHRpbWl6ZXJfbWluaW1pemUob3B0aW1pemVyLCB0ZW5zb3JfbG9zcywKICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsX3N0ZXA9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgdmFyX2xpc3Q9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgZ2F0ZV9ncmFkaWVudHM9MSwjR0FURV9OT05FID0gMCwgR0FURV9PUCA9IDEsIEdBVEVfR1JBUEggPSAyCiAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uX21ldGhvZD1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICBjb2xvY2F0ZV9ncmFkaWVudHNfd2l0aF9vcHM9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZF9sb3NzPU5vbmUpOgogICAgc3RlcCA9IG9wdGltaXplci5taW5pbWl6ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3NzPXRlbnNvcl9sb3NzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbF9zdGVwPWdsb2JhbF9zdGVwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcl9saXN0PXZhcl9saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhdGVfZ3JhZGllbnRzPWdhdGVfZ3JhZGllbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uX21ldGhvZD1hZ2dyZWdhdGlvbl9tZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb2NhdGVfZ3JhZGllbnRzX3dpdGhfb3BzPWNvbG9jYXRlX2dyYWRpZW50c193aXRoX29wcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZF9sb3NzPWdyYWRfbG9zcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgcmV0dXJuIHN0ZXAKIApkZWYgb3B0aW1pemVyX3NnZChsZWFybmluZ19yYXRlPTAuMDAxLCB1c2VfbG9ja2luZz1GYWxzZSwgbmFtZT0nR3JhZGllbnREZXNjZW50Jyk6CiAgICByZXR1cm4gdGYudHJhaW4uR3JhZGllbnREZXNjZW50T3B0aW1pemVyKGxlYXJuaW5nX3JhdGUsIHVzZV9sb2NraW5nLCBuYW1lKQogICAgIApkZWYgb3B0aW1pemVyX2FkYW0obGVhcm5pbmdfcmF0ZT0wLjAwMSwgYmV0YTE9MC45LCBiZXRhMj0wLjk5OSwgZXBzaWxvbj0xZS0wOCwgdXNlX2xvY2tpbmc9RmFsc2UsbmFtZT0nQWRhbScpOgogICAgcmV0dXJuIHRmLnRyYWluLkFkYW1PcHRpbWl6ZXIobGVhcm5pbmdfcmF0ZSwgYmV0YTEsIGJldGEyLCBlcHNpbG9uLCB1c2VfbG9ja2luZywgbmFtZSkKICAgICAKZGVmIG9wdGltaXplcl9hZGFncmFkKGxlYXJuaW5nX3JhdGU9MC4wMDEsIGluaXRpYWxfYWNjdW11bGF0b3JfdmFsdWU9MC4xLCB1c2VfbG9ja2luZz1GYWxzZSwgbmFtZT0nQWRhZ3JhZCcpOgogICAgcmV0dXJuIHRmLnRyYWluLkFkYWdyYWRPcHRpbWl6ZXIobGVhcm5pbmdfcmF0ZSwgaW5pdGlhbF9hY2N1bXVsYXRvcl92YWx1ZSwgdXNlX2xvY2tpbmcsIG5hbWUpCiAgICAKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpkZWYgb3B0aW1pemVyX2FkYWdyYWRkYSgKICAgICAgICAgICAgICAgICAgICAgICAgbGVhcm5pbmdfcmF0ZSwjMC4wMDEKICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfZ3JhZGllbnRfc3F1YXJlZF9hY2N1bXVsYXRvcl92YWx1ZT0wLjEsCjx8ZmltX2VuZHw+"]
["dd6d46279de8ba9f1f41c41f48585162af028b09-2","dd6d46279de8ba9f1f41c41f48585162af028b09","PHxmaW1fcHJlZml4fD4KIyBzZXJ2ZXIvdmVuZG9yLnB5Cgpmcm9tIGZsYXNrIGltcG9ydCBCbHVlcHJpbnQsIGpzb25pZnksIHJlcXVlc3QsIG1ha2VfcmVzcG9uc2UKZnJvbSBmbGFzay52aWV3cyBpbXBvcnQgTWV0aG9kVmlldwpmcm9tIHNlcnZlci5tb2RlbHMgaW1wb3J0IFZlbmRvciwgUG9zdAoKdmVuZG9yX2JwID0gQmx1ZXByaW50KCd2ZW5kb3InLCBfX25hbWVfXywgdXJsX3ByZWZpeD0iL3ZlbmRvciIpCgoKZGVmIGpzb25fcmVzcG9uc2UocmVzLCBzdGF0dXMpOgogICAgcmV0dXJuIG1ha2VfcmVzcG9uc2UoanNvbmlmeShyZXMpKSwgc3RhdHVzCgoKY2xhc3MgVmVuZG9yc0FQSShNZXRob2RWaWV3KToKICAgICIiIiBWZW5kb3JzIFJlc291cmNlICIiIgoKICAgIGRlZiBnZXQoc2VsZik6CiAgICAgICAgdmVuZG9ycyA9IFZlbmRvci5nZXRfdmVuZG9yX2xpc3QoKQogICAgICAgIGlmIG5vdCB2ZW5kb3JzOgogICAgICAgICAgICByZXMgPSB7InN0YXR1cyI6ICJmYWlsdXJlIiwgIm1lc3NhZ2UiOiAiRXJyb3Igb2NjdXJyZWQifQogICAgICAgICAgICByZXR1cm4ganNvbl9yZXNwb25zZShyZXMsIDQwMikKCiAgICAgICAgcmVzID0gW10KICAgICAgICBmb3IgdiBpbiB2ZW5kb3JzOgogICAgICAgICAgICByZXMuYXBwZW5kKHsKICAgICAgICAgICAgICAgICJ2ZW5kb3JfaWQiOiB2LmlkLAogICAgICAgICAgICAgICAgImVtYWlsIjogdi5lbWFpbCwKICAgICAgICAgICAgICAgICJyZWdpc3RlcmVkX29uIjogdi5yZWdpc3RlcmVkX29uCiAgICAgICAgICAgIH0pCiAgICAgICAgcmV0dXJuIGpzb25fcmVzcG9uc2UocmVzLCAyMDApCgogICAgZGVmIHBvc3Qoc2VsZik6CiAgICAgICAgcG9zdF9kYXRhID0gcmVxdWVzdC5mb3JtCiAgICAgICAgaWYgVmVuZG9yLmdldF92ZW5kb3JfYnlfZW1haWwocG9zdF9kYXRhLmdldCgnZW1haWwnKSkgIT0gTm9uZToKICAgICAgICAgICAgcmVzID0geyJzdGF0dXMiOiAiZmFpbHVyZSIsICJtZXNzYWdlIjogIlVzZXIgYWxyZWFkeSBleGlzdHMuIn0KICAgICAgICAgICAgcmV0dXJuIGpzb25fcmVzcG9uc2UocmVzLCAyMDIpCgogICAgICAgIHZlbmRvciA9IFZlbmRvci5hZGRfdmVuZG9yKHBvc3RfZGF0YSkKICAgICAgICBpZiB2ZW5kb3I6CiAgICAgICAgICAgIHJlcyA9IHsic3RhdHVzIjogInN1Y2Nlc3MiLCAiaWQiOiB2ZW5kb3IuaWR9CiAgICAgICAgICAgIHJldHVybiBqc29uX3Jlc3BvbnNlKHJlcywgMjAxKQoKICAgICAgICByZXMgPSB7InN0YXR1cyI6ICJmYWlsdXJlIiwgIm1lc3NhZ2UiOiAiRXJyb3Igb2NjdXJyZWQifQogICAgICAgIHJldHVybiBqc29uX3Jlc3BvbnNlKHJlcywgNDAxKQoKCmNsYXNzIFZlbmRvckFQSShNZXRob2RWaWV3KToKICAgICIiIiBWZW5kb3IgUmVzb3VyY2UiIiIKCiAgICBkZWYgZ2V0KHNlbGYsIHZlbmRvcl9pZCk6CiAgICAgICAgdmVuZG9yID0gVmVuZG9yLmdldF92ZW5kb3IodmVuZG9yX2lkKQogICAgICAgIGlmIG5vdCB2ZW5kb3I6CiAgICAgICAgICAgIHJlcyA9IHsic3RhdHVzIjogImZhaWx1cmUiLCAibWVzc2FnZSI6ICJFcnJvciBvY2N1cnJlZCJ9CiAgICAgICAgICAgIHJldHVybiBqc29uX3Jlc3BvbnNlKHJlcywgNDA0KQoKICAgICAgICByZXMgPSB7CiAgICAgICAgICAgICJ2ZW5kb3JfaWQiOiB2ZW5kb3IuaWQsCiAgICAgICAgICAgICJuYW1lIjogdmVuZG9yLm5hbWUsCiAgICAgICAgICAgICJlbWFpbCI6IHZlbmRvci5lbWFpbCwKICAgICAgICAgICAgInJlZ2lzdGVyZWRfb24iOiB2ZW5kb3IucmVnaXN0ZXJlZF9vbgogICAgICAgIH0KICAgICAgICByZXR1cm4ganNvbl9yZXNwb25zZShyZXMsIDIwMCkKCgpjbGFzcyBWZW5kb3JQb3N0QVBJKE1ldGhvZFZpZXcpOgogICAgZGVmIGdldChzZWxmLCB2ZW5kb3JfaWQpOgogICAgICAgIHRyeToKICAgICAgICAgICAgbnVtYmVyID0gaW50KHJlcXVlc3QuYXJncy5nZXQoIm51bSIsICIxIikpCiAgICAgICAgICAgIGlmIG51bWJlciA8IDA6CiAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCiAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgIHJldHVybiBqc29uX3Jlc3BvbnNlKHsKICAgICAgICAgICAgICAgICJzdGF0dXMiOiAiZmFpbHVyZSIsCiAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJJbnZhbGlkIGFyZ3VtZW50IgogICAgICAgICAgICB9LCA0MDApCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgcG9saWN5ID0gcmVxdWVzdC5lbnZpcm9uLmdldCgicG9saWN5IikKICAgICAgICBpZiBwb2xpY3kgaXMgTm9uZSBvciBwb2xpY3lbInJvbGUiXSAhPSAidmVuZG9yIiBvciBwb2xpY3lbInZlbmRvcl9pZCJdICE9IHZlbmRvcl9pZDoKICAgICAgICAgICAgIyBvdGhlciB2ZW5kb3IvY3VzdG9tZXIgY2FuIG9ubHkgdmlldyB0aGUgbGF0ZXN0IHBvc3QKPHxmaW1fZW5kfD4="]
["6696af45f67e49b9fbdc9971a0d9144c418906af-1","6696af45f67e49b9fbdc9971a0d9144c418906af","PHxmaW1fcHJlZml4fD4KY2xhc3MgQ2hhbm5lbDoKICAgICIiIkNsYXNzIGNvbnRhaW5pbmcgY2hhbm5lbCBudW1iZXIsIHNlbnNpdGl2aXR5IChtVi91bml0KSBhbmQgCiAgICB3aGV0aGVyIGlucHV0IGlucHV0IGlzIHBvd2VyZWQgKGllcGVfZW5hYmxlID0gVHJ1ZSkKICAgIAogICAgY2hhbm5lbCBudW1iZXIgKGludCkgOiAwLCAxLCAuLi4gKG51bWJlciBvZiBoYXRzICogMiAtIDEpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHNlbnNpdGl2aXR5IChmbG9hdCk6IFNlbnNpdGl2aXR5IG9mIHNlbnNvciBpbiBtVi91bml0CiAgICBpZXBlX2VuYWJsZSAoYm9vbCk6IEVuYWJsZSBJRVBFIGlmIHRydWUKPHxmaW1fZW5kfD4="]
["42e4979a608f76a820beda4ed8c33f5343bd3bd1-2","42e4979a608f76a820beda4ed8c33f5343bd3bd1",{"$cut":{"chars":24924,"head":"PHxmaW1fcHJlZml4fD4KIiIiUXVhbGl0eSBDb250cm9sIiIiCgppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBzY2lweS5zcGFyc2UgaW1wb3J0ICgKICAgIGlzc3BhcnNlLAogICAgY3NyX21hdHJpeCwKKQppbXBvcnQgcmUKCgpkZWYgY2FsX3FjKGFkYXRhLCBleHByX2N1dG9mZj0xKToKICAgICIiIkNhbGN1bGF0ZSBxdWFsaXR5IGNvbnRyb2wgbWV0cmljcy4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBhZGF0YTogQW5uRGF0YQogICAgICAgIEFubm90YXRlZCBkYXRhIG1hdHJpeC4KICAgIGV4cHJfY3V0b2ZmOiBgZmxvYXRgLCBvcHRpb25hbCAoZGVmYXVsdDogMSkKICAgICAgICBFeHByZXNzaW9uIGN1dG9mZi4KICAgICAgICBJZiBncmVhdGVyIHRoYW4gZXhwcl9jdXRvZmYsdGhlIGZlYXR1cmUgaXMgY29uc2lkZXJlZCAnZXhwcmVzc2VkJwogICAgYXNzYXk6IGBzdHJgLCBvcHRpb25hbCAoZGVmYXVsdDogJ3JuYScpCiAgICAgICAgICAgIENob29zZSBmcm9tIHsncm5hJywnYXRhYyd9LGNhc2UgaW5zZW5zaXRpdmUKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHVwZGF0ZXMgYGFkYXRhYCB3aXRoIHRoZSBmb2xsb3dpbmcgZmllbGRzLgogICAgbl9jb3VudHM6IGBwYW5kYXMuU2VyaWVzYCAoYGFkYXRhLnZhclsnbl9jb3VudHMnXWAsZHR5cGUgYGludGApCiAgICAgICBUaGUgbnVtYmVyIG9mIHJlYWQgY291bnQgZWFjaCBnZW5lIGhhcy4KICAgIG5fY2VsbHM6IGBwYW5kYXMuU2VyaWVzYCAoYGFkYXRhLnZhclsnbl9jZWxscyddYCxkdHlwZSBgaW50YCkKICAgICAgIFRoZSBudW1iZXIgb2YgY2VsbHMgaW4gd2hpY2ggZWFjaCBnZW5lIGlzIGV4cHJlc3NlZC4KICAgIHBjdF9jZWxsczogYHBhbmRhcy5TZXJpZXNgIChgYWRhdGEudmFyWydwY3RfY2VsbHMnXWAsZHR5cGUgYGZsb2F0YCkKICAgICAgIFRoZSBwZXJjZW50YWdlIG9mIGNlbGxzIGluIHdoaWNoIGVhY2ggZ2VuZSBpcyBleHByZXNzZWQuCiAgICBuX2NvdW50czogYHBhbmRhcy5TZXJpZXNgIChgYWRhdGEub2JzWyduX2NvdW50cyddYCxkdHlwZSBgaW50YCkKICAgICAgIFRoZSBudW1iZXIgb2YgcmVhZCBjb3VudCBlYWNoIGNlbGwgaGFzLgogICAgbl9nZW5lczogYHBhbmRhcy5TZXJpZXNgIChgYWRhdGEub2JzWyduX2dlbmVzJ11gLGR0eXBlIGBpbnRgKQogICAgICAgVGhlIG51bWJlciBvZiBnZW5lcyBleHByZXNzZWQgaW4gZWFjaCBjZWxsLgogICAgcGN0X2dlbmVzOiBgcGFuZGFzLlNlcmllc2AgKGBhZGF0YS5vYnNbJ3BjdF9nZW5lcyddYCxkdHlwZSBgZmxvYXRgKQogICAgICAgVGhlIHBlcmNlbnRhZ2Ugb2YgZ2VuZXMgZXhwcmVzc2VkIGluIGVhY2ggY2VsbC4KICAgIG5fcGVha3M6IGBwYW5kYXMuU2VyaWVzYCAoYGFkYXRhLm9ic1snbl9wZWFrcyddYCxkdHlwZSBgaW50YCkKICAgICAgIFRoZSBudW1iZXIgb2YgcGVha3MgZXhwcmVzc2VkIGluIGVhY2ggY2VsbC4KICAgIHBjdF9wZWFrczogYHBhbmRhcy5TZXJpZXNgIChgYWRhdGEub2JzWydwY3RfcGVha3MnXWAsZHR5cGUgYGludGApCiAgICAgICBUaGUgcGVyY2VudGFnZSBvZiBwZWFrcyBleHByZXNzZWQgaW4gZWFjaCBjZWxsLgogICAgcGN0X210OiBgcGFuZGFzLlNlcmllc2AgKGBhZGF0YS5vYnNbJ3BjdF9tdCddYCxkdHlwZSBgZmxvYXRgKQogICAgICAgdGhlIHBlcmNlbnRhZ2Ugb2YgY291bnRzIGluIG1pdG9jaG9uZHJpYWwgZ2VuZXMKICAgICIiIgoKICAgIGlmKG5vdCBpc3NwYXJzZShhZGF0YS5YKSk6CiAgICAgICAgYWRhdGEuWCA9IGNzcl9tYXRyaXgoYWRhdGEuWCkKCiAgICBuX2NvdW50cyA9IGFkYXRhLlguc3VtKGF4aXM9MCkuQTEKICAgIGFkYXRhLnZhclsnbl9jb3VudHMnXSA9IG5fY291bnRzCiAgICBuX3NhbXBsZXMgPSAoYWRhdGEuWCA+PSBleHByX2N1dG9mZikuc3VtKGF4aXM9MCkuQTEKICAgIGFkYXRhLnZhclsnbl9zYW1wbGVzJ10gPSBuX3NhbXBsZXMKICAgIGFkYXRhLnZhclsncGN0X3NhbXBsZXMnXSA9IG5fc2FtcGxlcy9hZGF0YS5zaGFwZVswXQoKICAgIG5fY291bnRzID0gYWRhdGEuWC5zdW0oYXhpcz0xKS5BMQogICAgYWRhdGEub2JzWyduX2NvdW50cyddID0gbl9jb3VudHMKICAgIG5fZmVhdHVyZXMgPSAoYWRhdGEuWCA+PSBleHByX2N1dG9mZikuc3VtKGF4aXM9MSkuQTEKICAgIGFkYXRhLm9ic1snbl9mZWF0dXJlcyddID0gbl9mZWF0dXJlcwogICAgYWRhdGEub2JzWydwY3RfZmVhdHVyZXMnXSA9IG5fZmVhdHVyZXMvYWRhdGEuc2hhcGVbMV0KCgpkZWYgY2FsX3FjX3JuYShhZGF0YSwgZXhwcl9jdXRvZmY9MSk6CiAgICAiIiJDYWxjdWxhdGUgcXVhbGl0eSBjb250cm9sIG1ldHJpY3MuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgYWRhdGE6IEFubkRhdGEKICAgICAgICBBbm5vdGF0ZWQgZGF0YSBtYXRyaXguCiAgICBleHByX2N1dG9mZjogYGZsb2F0YCwgb3B0aW9uYWwgKGRlZmF1bHQ6IDEpCiAgICAgICAgRXhwcmVzc2lvbiBjdXRvZmYuCiAgICAgICAgSWYgZ3JlYXRlciB0aGFuIGV4cHJfY3V0b2ZmLHRoZSBmZWF0dXJlIGlzIGNvbnNpZGVyZWQgJ2V4cHJlc3NlZCcKICAgIGFzc2F5OiBgc3RyYCwgb3B0aW9uYWwgKGRlZmF1bHQ6ICdybmEnKQogICAgICAgICAgICBDaG9vc2UgZnJvbSB7J3JuYScsJ2F0YWMnfSxjYXNlIGluc2Vuc2l0aXZlCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICB1cGRhdGVzIGBhZGF0YWAgd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkcy4KICAgIG5fY291bnRzOiBgcGFuZGFzLlNlcmllc2AgKGBhZGF0YS52YXJbJ25fY291bnRzJ11gLGR0eXBlIGBpbnRgKQogICAgICAgVGhlIG51bWJlciBvZiByZWFkIGNvdW50IGVhY2ggZ2VuZSBoYXMuCiAgICBuX2NlbGxzOiBgcGFuZGFzLlNlcmllc2AgKGBhZGF0YS52YXJbJ25fY2VsbHMnXWAsZHR5cGUgYGludGApCiAgICAgICBUaGUgbnVtYmVyIG9mIGNlbGxzIGluIHdoaWNoIGVhY2ggZ2VuZSBpcyBleHByZXNzZWQuCiAgICBwY3RfY2VsbHM6IGBwYW5kYXMuU2VyaWVzYCAoYGFkYXRhLnZhclsncGN0X2NlbGxzJ11gLGR0eXBlIGBmbG9hdGApCiAgICAgICBUaGUgcGVyY2VudGFnZSBvZiBjZWxscyBpbiB3"}}]
["dd7c6f31fb5703bb378f88ca697d70591995a371-2","dd7c6f31fb5703bb378f88ca697d70591995a371","PHxmaW1fcHJlZml4fD4KIiIiCgogICAgKkYgLSBMZXZlbCA2KgoKIiIiCgpmcm9tIC4uX3BpdGNoIGltcG9ydCBQaXRjaAoKX19hbGxfXyA9IFsiRl82Il0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCmNsYXNzIEZfNigKICAgIFBpdGNoLAo8fGZpbV9lbmR8Pg=="]
["c27f51c78bcbec52abc038df8cbff6a2e1dc0bc1-1","c27f51c78bcbec52abc038df8cbff6a2e1dc0bc1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFzeW5jaW8KaW1wb3J0IGpzb24KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IGJvdG8zCmltcG9ydCBvcwppbXBvcnQgdXRpbHMKaW1wb3J0IGRhdGV0aW1lCmltcG9ydCB1dmxvb3AKaW1wb3J0IHdhcm5pbmdzCndhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCBtZXNzYWdlPSJudW1weS5kdHlwZSBzaXplIGNoYW5nZWQiKQp3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgbWVzc2FnZT0ibnVtcHkudWZ1bmMgc2l6ZSBjaGFuZ2VkIikKCmZyb20gdHJhZGluZyBpbXBvcnQgRWRnYXJQYXJhbXMsIFNjaGVkdWxlciwgRmlsZVR5cGUKCgphc3luYyBkZWYgbWFpbihsb29wLCBsb2dnZXIsIGl0ZW1zLCB0b2RheSwgcmVxdWVzdElkLCBjaHVua19pZCk6CiAgICB0cnk6CiAgICAgICAgcGFyYW1zID0gRWRnYXJQYXJhbXMoKQogICAgICAgIHBhcmFtcy5VcmwgPSBvcy5lbnZpcm9uWydFREdBUl9VUkwnXQogICAgICAgIHBhcmFtcy5QYWdlU2l6ZSA9IG9zLmVudmlyb25bJ1BBR0VfU0laRSddCiAgICAgICAgcGFyYW1zLlRpbWVvdXQgPSBpbnQob3MuZW52aXJvblsnVElNRU9VVCddKQogICAgICAgIHBhcmFtcy5TdGFydFllYXIgPSBvcy5lbnZpcm9uWydTVEFSVF9ZRUFSJ10KCiAgICAgICAgbm90aWZ5ID0gJycKCiAgICAgICAgYXN5bmMgd2l0aCBTY2hlZHVsZXIobm90aWZ5LCBwYXJhbXMsIGxvZ2dlciwgbG9vcCkgYXMgc2NoZWR1bGVyOgogICAgICAgICAgICBpZiBzY2hlZHVsZXIuQ2hlY2tJZlByb2Nlc3NlZChpdGVtcywgdG9kYXksIHJlcXVlc3RJZCwgY2h1bmtfaWQpOgogICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1N0b3AgcHJvY2Vzc2luZycpCiAgICAgICAgICAgICAgICByZXR1cm4KCiAgICAgICAgICAgIHJlcywgc3RhdHMgPSBhd2FpdCBzY2hlZHVsZXIuU3luY1RyYW5zYWN0aW9ucyhpdGVtcywgRmlsZVR5cGUuSVNTVUVSKQogICAgICAgICAgICBzY2hlZHVsZXIuU2F2ZSh7J1JlY2VpdmVkJzogaXRlbXMsICdQcm9jZXNzZWQnOiByZXMsICdDb2Rlcyc6IHN0YXRzfSwgdG9kYXksICdJU1NVRVJTJywgbGVuKGl0ZW1zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NJS3MgdGhhdCByZXBvcnRlZCBvbiB0aGUgZGF5IGFuZCBoYWQgZGlyZWN0IHB1cmNoYXNlcyBpbiB0aGUgcGFzdCcsIHJlcXVlc3RJZCwgY2h1bmtfaWQpCiAgICAgICAgICAgIGxvZ2dlci5pbmZvKCclcyBpc3N1ZXJzIGxvYWRlZCBpbiBkYiByZXFJZDogJXMnICUgKGxlbihyZXMpLCByZXF1ZXN0SWQpKQogICAgICAgICAgICByZXMsIHN0YXRzID0gYXdhaXQgc2NoZWR1bGVyLlN5bmNUcmFuc2FjdGlvbnMoaXRlbXMsIEZpbGVUeXBlLk9XTkVSKQogICAgICAgICAgICBzY2hlZHVsZXIuU2F2ZSh7J1JlY2VpdmVkJzogaXRlbXMsICdQcm9jZXNzZWQnOiByZXMsICdDb2Rlcyc6IHN0YXRzfSwgdG9kYXksICdPV05FUlMnLCBsZW4oaXRlbXMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnQ0lLcyB0aGF0IHJlcG9ydGVkIG9uIHRoZSBkYXkgYW5kIGhhZCBkaXJlY3QgcHVyY2hhc2VzIGluIHRoZSBwYXN0JywgcmVxdWVzdElkLCBjaHVua19pZCkKICAgICAgICAgICAgbG9nZ2VyLmluZm8oJyVzIG93bmVycyBsb2FkZWQgaW4gZGIgcmVxSWQ6ICVzJyAlIChsZW4ocmVzKSwgcmVxdWVzdElkKSkKICAgICAgICAgICAgbG9nZ2VyLmluZm8oJyVzIHRyYW5zYWN0aW9ucyBsb2FkZWQgaW4gZGInICUgbGVuKGl0ZW1zKSkKCiAgICAgICAgICAgIHNjaGVkdWxlci5VcGRhdGVQcm9jZXNzZWQodG9kYXksIHJlcXVlc3RJZCwgY2h1bmtfaWQpCiAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdVcGRhdGVQcm9jZXNzZWQnKQoKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBsb2dnZXIuZXJyb3IoZSkKPHxmaW1faG9sZXw+CiAgICBsZXZlbCA9IGxvZ2dpbmcuREVCVUcgaWYgJ0xPR0dJTkdfTEVWRUwnIGluIG9zLmVudmlyb24gYW5kIG9zLmVudmlyb25bJ0xPR0dJTkdfTEVWRUwnXSA9PSAnREVCVUcnIGVsc2UgbG9nZ2luZy5JTkZPCgogICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQogICAgbG9nZ2VyLnNldExldmVsKGxldmVsKQogICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmb3JtYXQ9JyUoYXNjdGltZSlzIC0gJShsZXZlbG5hbWUpcyAtICUodGhyZWFkTmFtZSlzIC0gJShtZXNzYWdlKXMnKQoKICAgIGxvZ2dlci5pbmZvKCdldmVudCAlcycgJSBldmVudCkKICAgIGxvZ2dlci5pbmZvKCdjb250ZXh0ICVzJyAlIGNvbnRleHQpCiAgICBmaXhlZCA9IGV2ZW50WydSZWNvcmRzJ11bMF1bJ2JvZHknXSBpZiBpc2luc3RhbmNlKGV2ZW50LCBkaWN0KSBlbHNlIGV2ZW50LmJvZHkKICAgIGxvZ2dlci5pbmZvKGZpeGVkKQogICAgZml4ZWRfanNvbiA9IGpzb24ubG9hZHMoZml4ZWQsIHBhcnNlX2Zsb2F0PXV0aWxzLkRlY2ltYWxFbmNvZGVyKQogICAgaXRlbXMgPSBmaXhlZF9qc29uWydDSUsnXQogICAgdG9kYXkgPSBzdHIoZml4ZWRfanNvblsnRGF0ZSddKS5zdHJpcCgpCiAgICB0b2RheSA9IGRhdGV0aW1lLmRhdGV0aW1lLnN0cnB0aW1lKHRvZGF5LCAnJVklbSVkJykKICAgIHJlcXVlc3RJZCA9IGZpeGVkX2pzb25bJ1JlcXVlc3RJZCddCiAgICBjaHVua19pZCA9IGZpeGVkX2pzb25bJ0NodW5rSWQnXQoKICAgIGlmICdFREdBUl9VUkwnIG5vdCBpbiBvcy5lbnZpcm9uIG9yICdQQUdFX1NJWkUnIG5vdCBpbiBvcy5lbnZpcm9uIG9yICdUSU1FT1VUJyBub3QgaW4gb3MuZW52aXJvbiBcCiAgICAgICAgICAgIG9yICdTVEFSVF9ZRUFSJyBub3QgaW4gb3MuZW52aXJvbjoKICAgICAgICBsb2dnZXIuZXJyb3IoJ0VOVklST05NRU5UIFZBUlMgYXJlIG5vdCBzZXQnKQogICAgICAgIHJldHVybiBqc29uLmR1bXBzKHsnU3RhdGUnOiAnRVJST1InfSkKCiAgICBhc3luY2lvLnNldF9ldmVudF9sb29wX3BvbGljeSh1dmxvb3AuRXZlbnRMb29wUG9saWN5KCkpCiAgICBhcHBfbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQogICAgYXBwX2xvb3AucnVuX3VudGlsX2NvbXBsZXRlKG1haW4oYXBwX2xvb3AsIGxvZ2dlciwgaXRlbXMsIHRvZGF5LCByZXF1ZXN0SWQsIGNodW5rX2lkKSkKCiAgICByZXR1cm4ganNvbi5kdW1wcyh7J1N0YXRlJzogJ09LJ30pCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGlmICdERVBMT1lNRU5UX01PREUnIG5vdCBpbiBvcy5lbnZpcm9uIG9yICdUUk5fRk9VTkRfQVJOJyBub3QgaW4gb3MuZW52aXJvbjoKICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0RFUExPWU1FTlRfTU9ERSBvciBUUk5fRk9VTkRfQVJOIGlzIG5vdCBzZXQnKQoKICAgIGlmIG9zLmVudmlyb25bJ0RFUExPWU1FTlRfTU9ERSddID09ICdMQU1CREEnOgogICAgICAgIHdpdGggb3BlbigiZXZlbnRzL3NhdmUuanNvbiIpIGFzIGpzb25fZmlsZToKICAgICAgICAgICAgdGVzdF9ldmVudCA9IGpzb24ubG9hZChqc29uX2ZpbGUsIHBhcnNlX2Zsb2F0PXV0aWxzLkRlY2ltYWxFbmNvZGVyKQoKICAgICAgICBsYW1iZGFfaGFuZGxlcih0ZXN0X2V2ZW50LCBOb25lKQogICAgZWxzZToKICAgICAgICAjIEdldCB0aGUgc2VydmljZSByZXNvdXJjZQogICAgICAgIHNxcyA9IGJvdG8zLnJlc291cmNlKCdzcXMnKQoKICAgICAgICAjIEdldCB0aGUgcXVldWUKICAgICAgICBxdWV1ZSA9IHNxcy5nZXRfcXVldWVfYnlfbmFtZShRdWV1ZU5hbWU9b3MuZW52aXJvblsnVFJOX0ZPVU5EX0FSTiddKQoKICAgICAgICBtZXNzYWdlcyA9IHF1ZXVlLnJlY2VpdmVfbWVzc2FnZXMoTWF4TnVtYmVyT2ZNZXNzYWdlcz0xLCBXYWl0VGltZVNlY29uZHM9MjAsIFZpc2liaWxpdHlUaW1lb3V0PTM2MDApCiAgICAgICAgd2hpbGUgbWVzc2FnZXM6CiAgICAgICAgICAgIGZvciBtZXNzYWdlIGluIG1lc3NhZ2VzOgogICAgICAgICAgICAgICAgbGFtYmRhX2hhbmRsZXIobWVzc2FnZSwgTm9uZSkKICAgICAgICAgICAgICAgICMgTGV0IHRoZSBxdWV1ZSBrbm93IHRoYXQgdGhlIG1lc3NhZ2UgaXMgcHJvY2Vzc2VkCiAgICAgICAgICAgICAgICBtZXNzYWdlLmRlbGV0ZSgpCiAgICAgICAgICAgIG1lc3NhZ2VzID0gcXVldWUucmVjZWl2ZV9tZXNzYWdlcyhNYXhOdW1iZXJPZk1lc3NhZ2VzPTEsIFdhaXRUaW1lU2Vjb25kcz0yMCwgVmlzaWJpbGl0eVRpbWVvdXQ9MzYwMCkKPHxmaW1fc3VmZml4fD4KCgpkZWYgbGFtYmRhX2hhbmRsZXIoZXZlbnQsIGNvbnRleHQpOgoKPHxmaW1fZW5kfD4="]
["6ebd4772d37731c7764192ef2cea331839300aac-2","6ebd4772d37731c7764192ef2cea331839300aac","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNxbGl0ZTMKY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgnL2hvbWUvdmlrYXMvQm9vay1SZWNvbW1lbmRhdGlvbi1BbmFseXNpcy9kYi5zcWxpdGUnKQpjID0gY29ubi5jdXJzb3IoKQoKaW1wb3J0IHBhbmRhcyBhcyBwZAoKcGF0aF9mb3JfcGtsPSIvaG9tZS92aWthcy9Eb3dubG9hZHMvcmVjX2RhdGEucGtsIgpkZl9kYXRhPXBkLnJlYWRfcGlja2xlKHBhdGhfZm9yX3BrbCkKcHJpbnQoZGZfZGF0YS5oZWFkKCkpCmxpPShkZl9kYXRhLmNvbHVtbnMpI2Jvb2tzCmxpMT0oZGZfZGF0YS5pbmRleCkjCiMgbG9hZCB0aGUgZGF0YSBpbnRvIGEgUGFuZGFzIERhdGFGcmFtZQp1c2VycyA9IHBkLnJlYWRfY3N2KHInL2hvbWUvdmlrYXMvRG93bmxvYWRzL0JYLVVzZXJzLmNzdicsIGVuY29kaW5nPSAndW5pY29kZV9lc2NhcGUnLGxvd19tZW1vcnk9RmFsc2Usc2VwPSc7JykKPHxmaW1faG9sZXw+CnVzZXJzPXVzZXJzLmxvY1t1c2Vyc1snVXNlci1JRCddLmlzaW4obGkxKV0KcHJpbnQodXNlcnMuY29sdW1ucykKdXNlcnMuY29sdW1ucz1bJ2lkJywnbG9jYXRpb24nLCdhZ2UnXQp1c2Vyc1snZW1haWwnXT0gJ3Rlc3QnK3N0cihNYXRoLnJhbmRvbSgxLDYwKSkrJ0BnbWFpbC5jb20nCnVzZXJzWyduYW1lJ109J2NsaWVudCcKdXNlcnNbJ3Bhc3N3b3JkJ109J2Zvb2JhcjEyMycKCgpib29rcz1ib29rcy5sb2NbYm9va3NbJ0lTQk4nXS5pc2luKGxpKV0KYm9va3MuY29sdW1ucz1bJ0lTQk4nLCd0aXRsZScsJ2F1dGhvcicsJ3B1YkRhdGUnLCdwdWJsaXNoZXInLCdkJywnZGEnLCdib29rSW1hZ2UnXQoKYm9va3MuZHJvcChbJ2QnLCAnZGEnXSwgYXhpcz0xLCBpbnBsYWNlPVRydWUpCmJvb2tzWydib29rX2Nvc3QnXT0xMTAKdXNlcnMudG9fc3FsKCd1c2VyJywgY29ubiwgaWZfZXhpc3RzPSdhcHBlbmQnLCBpbmRleCA9IEZhbHNlKQpib29rcy50b19zcWwoJ2Jvb2tzJywgY29ubiwgaWZfZXhpc3RzPSdhcHBlbmQnLCBpbmRleCA9IEZhbHNlKQo8fGZpbV9zdWZmaXh8Pgpib29rcyA9IHBkLnJlYWRfY3N2KHInL2hvbWUvdmlrYXMvRG93bmxvYWRzL0JYX0Jvb2tzLmNzdicsIGVuY29kaW5nPSAndW5pY29kZV9lc2NhcGUnLGxvd19tZW1vcnk9RmFsc2Usc2VwPSc7JykKCgoKPHxmaW1fZW5kfD4="]
["6ee5dddca00e3a35b9dbd108bc4f9dd9245cd228-2","6ee5dddca00e3a35b9dbd108bc4f9dd9245cd228","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyB2aW06IHRhYnN0b3A9NCBzaGlmdHdpZHRoPTQgc29mdHRhYnN0b3A9NAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpWRVJTSU9OID0gIjEuMC4wIgo8fGZpbV9lbmR8Pg=="]
["6c4df26a95a6e6915c45ac1e4382282d0c856210-1","6c4df26a95a6e6915c45ac1e4382282d0c856210","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMC41IG9uIDIwMTgtMDUtMTAgMTQ6MTMKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVwZW5kZW5jaWVzID0gWwogICAgICAgICgnZWRpdG9yJywgJzAwMzBfY3VzdG9tcGFydHR5cGVfY29weV9vZicpLAogICAgXQo8fGZpbV9lbmR8Pg=="]
["6c863140c86137dae75f2422a1e3418c87639dfc-2","6c863140c86137dae75f2422a1e3418c87639dfc",{"$cut":{"chars":36800,"head":"PHxmaW1fcHJlZml4fD4KCmltcG9ydCBTeXN0ZW1fQ29tcG9uZW50cwppbXBvcnQgRW52aXJvbm1lbnQKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IG1hdHBsb3RsaWIuc3R5bGUgYXMgc3R5bGUKaW1wb3J0IGNvcHkKaW1wb3J0IHV1aWQKaW1wb3J0IG9zCnN0eWxlLnVzZSgnZ2dwbG90JykKCgoKCiMgRVJST1JTIENPTVBVVEFUSU9OUyBBTkQgT1RIRVIgRlVOQ1RJT05TIC0tLS0tLS0tLS0tLS0tLS0tLQoKZGVmIEV4dGVybmFsX29wZXJhdG9yX2ZlZWRiYWNrKGV4dGVybmFsX3J1bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNrX2NhcmRfYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2NhcmRfYXR0cmlidXRlcyk6CgogICAgIyMjIEVYVEVSTkFMIE9QRVJBVE9SIEFDVElPTiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKICAgIGNvbW1vbl9hdHRyaWJ1dGVzID0gMAogICAgcXVhbGl0YXRpdmVfY29tbW9uX2F0dHJpYnV0ZXMgPSBbXQoKICAgIGZvciBpIGluIHJhbmdlKDAsIHRhYmxlX2NhcmRfYXR0cmlidXRlcy5zaGFwZVsxXSk6Cjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgICAgIHF1YWxpdGF0aXZlX2NvbW1vbl9hdHRyaWJ1dGVzLmFwcGVuZCgxKQogICAgICAgICAgICAgICAgZWxpZiBpIGluIHJhbmdlKDQsIDgpOgogICAgICAgICAgICAgICAgICAgIHF1YWxpdGF0aXZlX2NvbW1vbl9hdHRyaWJ1dGVzLmFwcGVuZCgyKQogICAgICAgICAgICAgICAgZWxpZiBpIGluIHJhbmdlKDgsIDEyKToKICAgICAgICAgICAgICAgICAgICBxdWFsaXRhdGl2ZV9jb21tb25fYXR0cmlidXRlcy5hcHBlbmQoMykKCiAgICBpZiBleHRlcm5hbF9ydWxlIGluIHF1YWxpdGF0aXZlX2NvbW1vbl9hdHRyaWJ1dGVzOgogICAgICAgIGZlZWRiYWNrID0gMQogICAgZWxzZToKICAgICAgICBmZWVkYmFjayA9IDAKCiAgICByZXR1cm4gZmVlZGJhY2ssIGxlbihxdWFsaXRhdGl2ZV9jb21tb25fYXR0cmlidXRlcykKCgpkZWYgV0NTVF9vbmxpbmVfZXJyb3JzX2NvbXB1dGF0aW9uKGFjdGlvbnNfbWFkZSwgY29ycmVjdF9ydWxlLCBtYXRjaGVzLCBwZXJzZXZlcmF0aXZlX2Vycm9ycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90X3BlcnNldmVyYXRpdmVfZXJyb3JzLCBkaXN0cmFpYmlsaXR5X2Vycm9ycywgdG90YWxfZXJyb3JzLCBQZXJzZXZlcmF0aXZlX3ByaW5jaXBsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfY2FyZF9hdHRyaWJ1dGVzLCBkZWNrX2NhcmRfYXR0cmlidXRlcywgcmVzcG9uc2VzX2xpc3QpOgoKICAgICMgQ0hFQ0sgQ09NTU9OIEFUVFJJQlVURVMgQkVUV0VFTiBUQUJMRVQgQ0FSRCBBTkQgREVDSyBDQVJECiAgICBjb21tb25fYXR0cmlidXRlcyA9IDAKICAgIHF1YWxpdGF0aXZlX2NvbW1vbl9hdHRyaWJ1dGVzID0gW10KICAgIHJlc3BvbnNlc19saXN0LmFwcGVuZChbXSkKCiAgICBmb3IgaSBpbiByYW5nZSgwLCB0YWJsZV9jYXJkX2F0dHJpYnV0ZXMuc2hhcGVbMV0pOgogICAgICAgIGlmIHRhYmxlX2NhcmRfYXR0cmlidXRlc1swLCBpXSA+IDA6CiAgICAgICAgICAgIGlmIHRhYmxlX2NhcmRfYXR0cmlidXRlc1swLCBpXSA9PSBkZWNrX2NhcmRfYXR0cmlidXRlc1swLCBpXToKICAgICAgICAgICAgICAgIGNvbW1vbl9hdHRyaWJ1dGVzICs9IDEKICAgICAgICAgICAgICAgIGlmIGkgaW4gcmFuZ2UoMCwgNCk6CiAgICAgICAgICAgICAgICAgICAgcXVhbGl0YXRpdmVfY29tbW9uX2F0dHJpYnV0ZXMuYXBwZW5kKDEpCiAgICAgICAgICAgICAgICBlbGlmIGkgaW4gcmFuZ2UoNCwgOCk6CiAgICAgICAgICAgICAgICAgICAgcXVhbGl0YXRpdmVfY29tbW9uX2F0dHJpYnV0ZXMuYXBwZW5kKDIpCiAgICAgICAgICAgICAgICBlbGlmIGkgaW4gcmFuZ2UoOCwgMTIpOgogICAgICAgICAgICAgICAgICAgIHF1YWxpdGF0aXZlX2NvbW1vbl9hdHRyaWJ1dGVzLmFwcGVuZCgzKQoKICAgIHF1YWxpdGF0aXZlX2NvbW1vbl9hdHRyaWJ1dGVzID0gbGlzdChxdWFsaXRhdGl2ZV9jb21tb25fYXR0cmlidXRlcykKCiAgICBpZiBjb3JyZWN0X3J1bGUgbm90IGluIHF1YWxpdGF0aXZlX2NvbW1vbl9hdHRyaWJ1dGVzOgoKICAgICAgICBFcnJvciA9IFRydWUKICAgICAgICBzaW5nbGVfcGVyc19yZXNwb25zZSA9IEZhbHNlCiAgICAgICAgQW1iaWd1aXR5ID0gRmFsc2UKICAgICAgICBzaW5nbGVfZGlzdHJhaWJpbGl0eV9lcnJvciA9IEZhbHNlCgogICAgICAgIGlmIGNvbW1vbl9hdHRyaWJ1dGVzID09IDE6CgogICAgICAgICAgICBpZiBQZXJzZXZlcmF0aXZlX3ByaW5jaXBsZSA9PSBbMF06CiAgICAgICAgICAgICAgICBQZXJzZXZlcmF0aXZlX3ByaW5jaXBsZVswXSA9IHF1YWxpdGF0aXZlX2NvbW1vbl9hdHRyaWJ1dGVzWzBdCgoKICAgICAgICAgICAgZWxpZiBxdWFsaXRhdGl2ZV9jb21tb25fYXR0cmlidXRlc1swXSA9PSBQZXJzZXZlcmF0aXZlX3ByaW5jaXBsZVswXTogICMgUEVSU0VWRVJBVElWRSBFUlJPUgoKICAgICAgICAgICAgICAgIHNpbmdsZV9wZXJzX3Jlc3BvbnNlID0gVHJ1ZQoKCgogICAgICAgIGVsaWYgY29tbW9uX2F0dHJpYnV0ZXMgPiAxOgoKICAgICAgICAgICAgQW1iaWd1aXR5ID0gVHJ1ZQoKICAgICAgICBpZiBtYXRjaGVzID4gNToKICAgICAgICAgICAgc2luZ2xlX2Rpc3RyYWliaWxpdHlfZXJyb3IgPSBUcnVlCgogICAgICAgIG1hdGNoZXMgPSAwCgogICAgZWxpZiBjb3JyZWN0X3J1bGUgaW4gcXVhbGl0YXRpdmVfY29tbW9uX2F0dHJpYnV0ZXM6CgogICAgICAgIG1hdGNoZXMgKz0gMQogICAgICAgIHJlc3BvbnNlc19saXN0W2FjdGlvbnNfbWFkZSAtIDFdLmFwcGVuZChbMV0pCiAgICAgICAgRXJyb3IgPSBGYWxzZQogICAgICAgIEFtYmlndWl0eSA9IEZhbHNlCiAgICAgICAgc2luZ2xlX2Rpc3RyYWliaWxpdHlfZXJyb3IgPSBGYWxzZQogICAgICAgIHNpbmdsZV9wZXJzX3Jlc3BvbnNlID0gRmFsc2UKCiAgICAgICAgIyBpZiBQZXJzZXZlcmF0aXZlX3ByaW5jaXBsZVswXSBpbiBxdWFsaXRhdGl2ZV9jb21tb25f"}}]
["662d646e1d69b4484b70a818c149da8b385f1d71-4","662d646e1d69b4484b70a818c149da8b385f1d71","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGN2MiBhcyBjdgppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSB0ZW5zb3JmbG93LmtlcmFzLm1vZGVscyBpbXBvcnQgbG9hZF9tb2RlbApmcm9tIHhjYXB0Y2hhLmRlZmF1bHRzIGltcG9ydCBDSEFSU0VUX0FMUEhBTlVNRVJJQywgRk9OVFMKPHxmaW1faG9sZXw+CgojIExvYWQgdGhlIHRocmVlIG1vZGVscwptYXNrc19tb2RlbCA9IGxvYWRfbW9kZWwoTUFTS1NfTU9ERUxfRklMRSkKbWFza19zZWdtZW50c19tb2RlbCA9IGxvYWRfbW9kZWwoTUFTS19TRUdNRU5UU19NT0RFTF9GSUxFKQpjaGFyc19tb2RlbCA9IGxvYWRfbW9kZWwoQ0hBUlNfTU9ERUxfRklMRSkKCiMgR2VuZXJhdGUgb3VyIGlucHV0IGRhdGEKZ2VuZXJhdG9yID0gQ0FQVENIQUdlbmVyYXRvcigKICAgIENIQVJTRVRfQUxQSEFOVU1FUklDLCBJTUFHRV9ESU1FTlNJT05TLCBJTUFHRV9ESU1FTlNJT05TLCBOX0NIQVJBQ1RFUlMsIE5fQ0hBUkFDVEVSUywgRk9OVFMpCgpjYXB0Y2hhID0gbmV4dChnZW5lcmF0b3IpCmN2Lmltd3JpdGUoIm91dC9pbmZlcmVuY2VfaW5wdXQucG5nIiwgY2FwdGNoYS5pbWFnZSkKCiMgQ29udmVydCB0aGUgaW1hZ2UgdG8gZ3JleXNjYWxlCmltZyA9IGN2LmN2dENvbG9yKGNhcHRjaGEuaW1hZ2UsIGN2LkNPTE9SX0JHUjJHUkFZKQoKIyBUaGUgaW5wdXQgc2hhcGUgb2YgdGhlIG1vZGVscwptb2RlbF9pbnB1dF9kaW1zID0gKDEsIElNQUdFX0RJTUVOU0lPTlNbMF0sIElNQUdFX0RJTUVOU0lPTlNbMV0sIDEpCgojIEluZmVyZW5jaW5nCm1hc2tfcHJlZCA9IG1hc2tzX21vZGVsLnByZWRpY3QobnAucmVzaGFwZShpbWcsIG1vZGVsX2lucHV0X2RpbXMpKQoKbWFza19zZWdtZW50c19wcmVkID0gbWFza19zZWdtZW50c19tb2RlbC5wcmVkaWN0KAogICAgbnAucmVzaGFwZShtYXNrX3ByZWQsIG1vZGVsX2lucHV0X2RpbXMpKQptYXNrX3NlZ21lbnRzX3ByZWQgPSBucC5yZXNoYXBlKG5wLmNlaWwobWFza19zZWdtZW50c19wcmVkKSwgSU1BR0VfRElNRU5TSU9OUykKbWFza19zZWdtZW50c19wcmVkID0gdGhyZXNob2xkX21hc2tzKG1hc2tfc2VnbWVudHNfcHJlZCkKCiMgUmVzY2FsZSB0aGUgcHJlZGljdGVkIG1hc2sgc2VnbWVudHMgaW50byBvdXIgZXhwZWN0ZWQgaW5wdXQgcmFuZ2UKbWFza19zZWdtZW50c19wcmVkID0gZGlzY3JldGl6ZV9tYXNrX3NlZ21lbnRzX3ByZWRpY3Rpb24oCiAgICBtYXNrX3NlZ21lbnRzX3ByZWQsIE5fQ0hBUkFDVEVSUykKCiMgUHJlZGljdCBlYWNoIGNoYXJhY3RlciBzZXBhcmF0ZWx5IHVzaW5nIGl0cyBtYXNrCnByZWRpY3Rpb24gPSAiIgpmb3IgaSBpbiByYW5nZSgxLCBOX0NIQVJBQ1RFUlMgKyAxKToKICAgICMgRmlsdGVyIG92ZXJsYWluIG1hc2tzIGZvciB0aGlzIGNoYXJhY3RlcidzIG1hc2sKICAgIGNoYXJfbWFzayA9IG5wLndoZXJlKG1hc2tfc2VnbWVudHNfcHJlZCA9PSBpLCBucC5vbmVzKAogICAgICAgIElNQUdFX0RJTUVOU0lPTlMpLCBucC56ZXJvcyhJTUFHRV9ESU1FTlNJT05TKSkKCiAgICAjIFRoZSBmaW5hbCBsYXllciBvZiB0aGlzIG1vZGVsIGlzIGFuIGFyZ21heCBsYXllciwgc28gdGhpcyBwcm9kdWNlcyBhIHZlY3RvciBvZiBzY29yZXMKICAgIGNoYXJfc2NvcmVzID0gY2hhcnNfbW9kZWwucHJlZGljdChucC5yZXNoYXBlKGNoYXJfbWFzaywgbW9kZWxfaW5wdXRfZGltcykpCgogICAgIyBHZXQgdGhlIHByZWRpY3Rpb24gYnkgcGlja2luZyBvdXQgdGhlIGhpZ2hlc3Qgc2NvcmUKICAgIGNoYXJfcHJlZCA9IENIQVJTRVRfQUxQSEFOVU1FUklDW25wLmFyZ21heChjaGFyX3Njb3JlcyldCgogICAgIyBBZGQgdGhlIHByZWRpY3RlZCBjaGFyYWN0ZXIgdG8gb3VyIHRvdGFsIHByZWRpY3Rpb24KICAgIHByZWRpY3Rpb24gKz0gY2hhcl9wcmVkCgojIE91dHB1dCBmaW5hbCBwcmVkaWN0aW9uCnByaW50KGYiUHJlZGljdGVkOiB7cHJlZGljdGlvbn0gLSBBY3R1YWw6IHsnJy5qb2luKGNhcHRjaGEuc29sdXRpb24pfSIpCjx8ZmltX3N1ZmZpeHw+CmZyb20geGNhcHRjaGEuZ2VuZXJhdG9yIGltcG9ydCBDQVBUQ0hBR2VuZXJhdG9yCgpmcm9tIG1vZGVsX3Bvc3Rwcm9jZXNzaW5nIGltcG9ydCBkaXNjcmV0aXplX21hc2tfc2VnbWVudHNfcHJlZGljdGlvbiwgdGhyZXNob2xkX21hc2tzCmZyb20gb3B0aW9ucyBpbXBvcnQgSU1BR0VfRElNRU5TSU9OUywgTUFTS1NfTU9ERUxfRklMRSwgTUFTS19TRUdNRU5UU19NT0RFTF9GSUxFLCBDSEFSU19NT0RFTF9GSUxFLCBOX0NIQVJBQ1RFUlMKPHxmaW1fZW5kfD4="]
["dd8635d4276e390d7f0650fff4f001de06594c30-5","dd8635d4276e390d7f0650fff4f001de06594c30","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAoKZnJvbSB0YXJ0aWZsZXR0ZSBpbXBvcnQgUmVzb2x2ZXIsIGNyZWF0ZV9lbmdpbmUKCl9TREwgPSAiIiIKdHlwZSBVc2VyU3RhdHNWaWV3cyB7CiAgdG90YWw6IEludAogIEs6IEludAogIEM6IEludAp9Cgp0eXBlIFVzZXJTdGF0cyB7CiAgdmlld3M6IFVzZXJTdGF0c1ZpZXdzCn0KCnR5cGUgVXNlciB7CiAgbmFtZTogU3RyaW5nCiAgc3RhdHM6IFVzZXJTdGF0cwp9Cgp0eXBlIFF1ZXJ5IHsKICB2aWV3ZXI6IFVzZXIKfQoiIiIKCgpAcHl0ZXN0LmZpeHR1cmUoc2NvcGU9Im1vZHVsZSIpCmFzeW5jIGRlZiB0dGZ0dF9lbmdpbmUoKToKICAgIEBSZXNvbHZlcigiUXVlcnkudmlld2VyIiwgc2NoZW1hX25hbWU9InRlc3RfaXNzdWU3NiIpCiAgICBhc3luYyBkZWYgcmVzb2x2ZXJfcXVlcnlfdmlld2VyKCpfLCAqKl9fKToKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAidmlld2VyIjogewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTjEiLAogICAgICAgICAgICAgICAgInN0YXRzIjogeyJ2aWV3cyI6IHsidG90YWwiOiAxLCAiSyI6IDIsICJDIjogM319LAogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgIHJldHVybiBhd2FpdCBjcmVhdGVfZW5naW5lKHNkbD1fU0RMLCBzY2hlbWFfbmFtZT0idGVzdF9pc3N1ZTc2IikKCgpAcHl0ZXN0Lm1hcmsuYXN5bmNpbwphc3luYyBkZWYgdGVzdF9pc3N1ZTc2X3Jhdyh0dGZ0dF9lbmdpbmUpOgogICAgcXVlcnkgPSAiIiIKICAgIHF1ZXJ5IHsKICAgICAgdmlld2VyIHsKICAgICAgICBuYW1lCiAgICAgICAgc3RhdHMgewogICAgICAgICAgdmlld3MgewogICAgICAgICAgICB0b3RhbAogICAgICAgICAgICB1bmtub3duRmllbGQ0CiAgICAgICAgICB9CiAgICAgICAgICB1bmtub3duRmllbGQzCiAgICAgICAgfQogICAgICAgIHVua25vd25GaWVsZDIKICAgICAgfQogICAgICB1bmtub3duRmllbGQxCiAgICB9CiAgICAiIiIKCiAgICByZXN1bHRzID0gYXdhaXQgdHRmdHRfZW5naW5lLmV4ZWN1dGUocXVlcnkpCiAgICBhc3NlcnQgcmVzdWx0cyA9PSB7CiAgICAgICAgImRhdGEiOiBOb25lLAogICAgICAgICJlcnJvcnMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJtZXNzYWdlIjogIkZpZWxkIHVua25vd25GaWVsZDQgZG9lc24ndCBleGlzdCBvbiBVc2VyU3RhdHNWaWV3cyIsCiAgICAgICAgICAgICAgICAicGF0aCI6IFsidmlld2VyIiwgInN0YXRzIiwgInZpZXdzIiwgInVua25vd25GaWVsZDQiXSwKICAgICAgICAgICAgICAgICJsb2NhdGlvbnMiOiBbeyJsaW5lIjogOCwgImNvbHVtbiI6IDEzfV0sCiAgICAgICAgICAgICAgICAiZXh0ZW5zaW9ucyI6IHsKICAgICAgICAgICAgICAgICAgICAicnVsZSI6ICI1LjMuMSIsCiAgICAgICAgICAgICAgICAgICAgInNwZWMiOiAiSnVuZSAyMDE4IiwKICAgICAgICAgICAgICAgICAgICAiZGV0YWlscyI6ICJodHRwczovL2dyYXBocWwuZ2l0aHViLmlvL2dyYXBocWwtc3BlYy9KdW5lMjAxOC8jc2VjLUZpZWxkLVNlbGVjdGlvbnMtb24tT2JqZWN0cy1JbnRlcmZhY2VzLWFuZC1VbmlvbnMtVHlwZXMiLAogICAgICAgICAgICAgICAgICAgICJ0YWciOiAiZmllbGQtc2VsZWN0aW9ucy1vbi1vYmplY3RzLWludGVyZmFjZXMtYW5kLXVuaW9ucy10eXBlcyIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJGaWVsZCB1bmtub3duRmllbGQzIGRvZXNuJ3QgZXhpc3Qgb24gVXNlclN0YXRzIiwKICAgICAgICAgICAgICAgICJwYXRoIjogWyJ2aWV3ZXIiLCAic3RhdHMiLCAidW5rbm93bkZpZWxkMyJdLAogICAgICAgICAgICAgICAgImxvY2F0aW9ucyI6IFt7ImxpbmUiOiAxMCwgImNvbHVtbiI6IDExfV0sCiAgICAgICAgICAgICAgICAiZXh0ZW5zaW9ucyI6IHsKICAgICAgICAgICAgICAgICAgICAicnVsZSI6ICI1LjMuMSIsCiAgICAgICAgICAgICAgICAgICAgInNwZWMiOiAiSnVuZSAyMDE4IiwKICAgICAgICAgICAgICAgICAgICAiZGV0YWlscyI6ICJodHRwczovL2dyYXBocWwuZ2l0aHViLmlvL2dyYXBocWwtc3BlYy9KdW5lMjAxOC8jc2VjLUZpZWxkLVNlbGVjdGlvbnMtb24tT2JqZWN0cy1JbnRlcmZhY2VzLWFuZC1VbmlvbnMtVHlwZXMiLAogICAgICAgICAgICAgICAgICAgICJ0YWciOiAiZmllbGQtc2VsZWN0aW9ucy1vbi1vYmplY3RzLWludGVyZmFjZXMtYW5kLXVuaW9ucy10eXBlcyIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJGaWVsZCB1bmtub3duRmllbGQyIGRvZXNuJ3QgZXhpc3Qgb24gVXNlciIsCiAgICAgICAgICAgICAgICAicGF0aCI6IFsidmlld2VyIiwgInVua25vd25GaWVsZDIiXSwKICAgICAgICAgICAgICAgICJsb2NhdGlvbnMiOiBbeyJsaW5lIjogMTIsICJjb2x1bW4iOiA5fV0sCiAgICAgICAgICAgICAgICAiZXh0ZW5zaW9ucyI6IHsKICAgICAgICAgICAgICAgICAgICAicnVsZSI6ICI1LjMuMSIsCiAgICAgICAgICAgICAgICAgICAgInNwZWMiOiAiSnVuZSAyMDE4IiwKICAgICAgICAgICAgICAgICAgICAiZGV0YWlscyI6ICJodHRwczovL2dyYXBocWwuZ2l0aHViLmlvL2dyYXBocWwtc3BlYy9KdW5lMjAxOC8jc2VjLUZpZWxkLVNlbGVjdGlvbnMtb24tT2JqZWN0cy1JbnRlcmZhY2VzLWFuZC1VbmlvbnMtVHlwZXMiLAogICAgICAgICAgICAgICAgICAgICJ0YWciOiAiZmllbGQtc2VsZWN0aW9ucy1vbi1vYmplY3RzLWludGVyZmFjZXMtYW5kLXVuaW9ucy10eXBlcyIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJGaWVsZCB1bmtub3duRmllbGQxIGRvZXNuJ3QgZXhpc3Qgb24gUXVlcnkiLAogICAgICAgICAgICAgICAgInBhdGgiOiBbInVua25vd25GaWVsZDEiXSwKICAgICAgICAgICAgICAgICJsb2NhdGlvbnMiOiBbeyJsaW5lIjogMTQsICJjb2x1bW4iOiA3fV0sCiAgICAgICAgICAgICAgICAiZXh0ZW5zaW9ucyI6IHsKICAgICAgICAgICAgICAgICAgICAicnVsZSI6ICI1LjMuMSIsCiAgICAgICAgICAgICAgICAgICAgInNwZWMiOiAiSnVuZSAyMDE4IiwKICAgICAgICAgICAgICAgICAgICAiZGV0YWlscyI6ICJodHRwczovL2dyYXBocWwuZ2l0aHViLmlvL2dyYXBocWwtc3BlYy9KdW5lMjAxOC8jc2VjLUZpZWxkLVNlbGVjdGlvbnMtb24tT2JqZWN0cy1JbnRlcmZhY2VzLWFuZC1VbmlvbnMtVHlwZXMiLAogICAgICAgICAgICAgICAgICAgICJ0YWciOiAiZmllbGQtc2VsZWN0aW9ucy1vbi1vYmplY3RzLWludGVyZmFjZXMtYW5kLXVuaW9ucy10eXBlcyIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9CgoKQHB5dGVzdC5tYXJrLmFzeW5jaW8KYXN5bmMgZGVmIHRlc3RfaXNzdWU3Nl9mcmFnbWVudCh0dGZ0dF9lbmdpbmUpOgogICAgcXVlcnkgPSAiIiIKICAgIGZyYWdtZW50IFVzZXJTdGF0c1ZpZXdzRmllbGRzIG9uIFVzZXJTdGF0c1ZpZXdzIHsKICAgICAgdG90YWwKICAgICAgdW5rbm93bkZpZWxkNAogICAgfQoKICAgIGZyYWdtZW50IFVzZXJTdGF0c0ZpZWxkcyBvbiBVc2VyU3RhdHMgewogICAgICB2aWV3cyB7CiAgICAgICAgLi4uVXNlclN0YXRzVmlld3NGaWVsZHMKICAgICAgfQogICAgICB1bmtub3duRmllbGQzCiAgICB9CgogICAgZnJhZ21lbnQgVXNlckZpZWxkcyBvbiBVc2VyIHsKICAgICAgbmFtZQogICAgICBzdGF0cyB7CiAgICAgICAgLi4uVXNlclN0YXRzRmllbGRzCiAgICAgIH0KICAgICAgdW5rbm93bkZpZWxkMgogICAgfQoKICAgIHF1ZXJ5IHsKICAgICAgdmlld2VyIHsKICAgICAgICAuLi5Vc2VyRmllbGRzCiAgICAgIH0KICAgICAgdW5rbm93bkZpZWxkMQogICAgfQogICAgIiIiCgogICAgcmVzdWx0cyA9IGF3YWl0IHR0ZnR0X2VuZ2luZS5leGVjdXRlKHF1ZXJ5KQogICAgYXNzZXJ0IHJlc3VsdHMgPT0gewogICAgICAgICJkYXRhIjogTm9uZSwKICAgICAgICAiZXJyb3JzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJGaWVsZCB1bmtub3duRmllbGQ0IGRvZXNuJ3QgZXhpc3Qgb24gVXNlclN0YXRzVmlld3MiLAogICAgICAgICAgICAgICAgInBhdGgiOiBbInVua25vd25GaWVsZDQiXSwKICAgICAgICAgICAgICAgICJsb2NhdGlvbnMiOiBbeyJsaW5lIjogNCwgImNvbHVtbiI6IDd9XSwKICAgICAgICAgICAgICAgICJleHRlbnNpb25zIjogewogICAgICAgICAgICAgICAgICAgICJydWxlIjogIjUuMy4xIiwKICAgICAgICAgICAgICAgICAgICAic3BlYyI6ICJKdW5lIDIwMTgiLAogICAgICAgICAgICAgICAgICAgICJkZXRhaWxzIjogImh0dHBzOi8vZ3JhcGhxbC5naXRodWIuaW8vZ3JhcGhxbC1zcGVjL0p1bmUyMDE4LyNzZWMtRmllbGQtU2VsZWN0aW9ucy1vbi1PYmplY3RzLUludGVyZmFjZXMtYW5kLVVuaW9ucy1UeXBlcyIsCiAgICAgICAgICAgICAgICAgICAgInRhZyI6ICJmaWVsZC1zZWxlY3Rpb25zLW9uLW9iamVjdHMtaW50ZXJmYWNlcy1hbmQtdW5pb25zLXR5cGVzIiwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJtZXNzYWdlIjogIkZpZWxkIHVua25vd25GaWVsZDMgZG9lc24ndCBleGlzdCBvbiBVc2VyU3RhdHMiLAogICAgICAgICAgICAgICAgInBhdGgiOiBbInVua25vd25GaWVsZDMiXSwKICAgICAgICAgICAgICAgICJsb2NhdGlvbnMiOiBbeyJsaW5lIjogMTEsICJjb2x1bW4iOiA3fV0sCiAgICAgICAgICAgICAgICAiZXh0ZW5zaW9ucyI6IHsKICAgICAgICAgICAgICAgICAgICAicnVsZSI6ICI1LjMuMSIsCiAgICAgICAgICAgICAgICAgICAgInNwZWMiOiAiSnVuZSAyMDE4IiwKICAgICAgICAgICAgICAgICAgICAiZGV0YWlscyI6ICJodHRwczovL2dyYXBocWwuZ2l0aHViLmlvL2dyYXBocWwtc3BlYy9KdW5lMjAxOC8jc2VjLUZpZWxkLVNlbGVjdGlvbnMtb24tT2JqZWN0cy1JbnRlcmZhY2VzLWFuZC1VbmlvbnMtVHlwZXMiLAogICAgICAgICAgICAgICAgICAgICJ0YWciOiAiZmllbGQtc2VsZWN0aW9ucy1vbi1vYmplY3RzLWludGVyZmFjZXMtYW5kLXVuaW9ucy10eXBlcyIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJGaWVsZCB1bmtub3duRmllbGQyIGRvZXNuJ3QgZXhpc3Qgb24gVXNlciIsCiAgICAgICAgICAgICAgICAicGF0aCI6IFsidW5rbm93bkZpZWxkMiJdLAogICAgICAgICAgICAgICAgImxvY2F0aW9ucyI6IFt7ImxpbmUiOiAxOSwgImNvbHVtbiI6IDd9XSwKICAgICAgICAgICAgICAgICJleHRlbnNpb25zIjogewogICAgICAgICAgICAgICAgICAgICJydWxlIjogIjUuMy4xIiwKICAgICAgICAgICAgICAgICAgICAic3BlYyI6ICJKdW5lIDIwMTgiLAogICAgICAgICAgICAgICAgICAgICJkZXRhaWxzIjogImh0dHBzOi8vZ3JhcGhxbC5naXRodWIuaW8vZ3JhcGhxbC1zcGVjL0p1bmUyMDE4LyNzZWMtRmllbGQtU2VsZWN0aW9ucy1vbi1PYmplY3RzLUludGVyZmFjZXMtYW5kLVVuaW9ucy1UeXBlcyIsCiAgICAgICAgICAgICAgICAgICAgInRhZyI6ICJmaWVsZC1zZWxlY3Rpb25zLW9uLW9iamVjdHMtaW50ZXJmYWNlcy1hbmQtdW5pb25zLXR5cGVzIiwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJtZXNzYWdlIjogIkZpZWxkIHVua25vd25GaWVsZDEgZG9lc24ndCBleGlzdCBvbiBRdWVyeSIsCiAgICAgICAgICAgICAgICAicGF0aCI6IFsidW5rbm93bkZpZWxkMSJdLAogICAgICAgICAgICAgICAgImxvY2F0aW9ucyI6IFt7ImxpbmUiOiAyNiwgImNvbHVtbiI6IDd9XSwKICAgICAgICAgICAgICAgICJleHRlbnNpb25zIjogewogICAgICAgICAgICAgICAgICAgICJydWxlIjogIjUuMy4xIiwKICAgICAgICAgICAgICAgICAgICAic3BlYyI6ICJKdW5lIDIwMTgiLAogICAgICAgICAgICAgICAgICAgICJkZXRhaWxzIjogImh0dHBzOi8vZ3JhcGhxbC5naXRodWIuaW8vZ3JhcGhxbC1zcGVjL0p1bmUyMDE4LyNzZWMtRmllbGQtU2VsZWN0aW9ucy1vbi1PYmplY3RzLUludGVyZmFjZXMtYW5kLVVuaW9ucy1UeXBlcyIsCiAgICAgICAgICAgICAgICAgICAgInRhZyI6ICJmaWVsZC1zZWxlY3Rpb25zLW9uLW9iamVjdHMtaW50ZXJmYWNlcy1hbmQtdW5pb25zLXR5cGVzIiwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgIH0KCgpAcHl0ZXN0Lm1hcmsuYXN5bmNpbwphc3luYyBkZWYgdGVzdF9pc3N1ZTc2X2Fub3RoZXJfb3JkZXIodHRmdHRfZW5naW5lKToKICAgIHF1ZXJ5ID0gIiIiCiAgICBxdWVyeSB7CiAgICAgIHZpZXdlciB7CiAgICAgICAgbmFtZQogICAgICAgIHN0YXRzIHsKICAgICAgICAgIHVua25vd25GaWVsZDMKICAgICAgICAgIHZpZXdzIHsKICAgICAgICAgICAgdG90YWwKICAgICAgICAgICAgdW5rbm93bkZpZWxkNAogICAgICAgICAgICBDCiAgICAgICAgICAgIEsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdW5rbm93bkZpZWxkMiB7CiAgICAgICAgICAgIHVua25vd25GaWVsZDUKICAgICAgICB9CiAgICAgIH0KICAgICAgdW5rbm93bkZpZWxkMQogICAgfQogICAgIiIiCgogICAgcmVzdWx0cyA9IGF3YWl0IHR0ZnR0X2VuZ2luZS5leGVjdXRlKHF1ZXJ5KQogICAgYXNzZXJ0IHJlc3VsdHMgPT0gewogICAgICAgICJkYXRhIjogTm9uZSwKICAgICAgICAiZXJyb3JzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJGaWVsZCB1bmtub3duRmllbGQzIGRvZXNuJ3QgZXhpc3Qgb24gVXNlclN0YXRzIiwKICAgICAgICAgICAgICAgICJwYXRoIjogWyJ2aWV3ZXIiLCAic3RhdHMiLCAidW5rbm93bkZpZWxkMyJdLAogICAgICAgICAgICAgICAgImxvY2F0aW9ucyI6IFt7ImxpbmUiOiA2LCAiY29sdW1uIjogMTF9XSwKICAgICAgICAgICAgICAgICJleHRlbnNpb25zIjogewogICAgICAgICAgICAgICAgICAgICJydWxlIjogIjUuMy4xIiwKICAgICAgICAgICAgICAgICAgICAic3BlYyI6ICJKdW5lIDIwMTgiLAogICAgICAgICAgICAgICAgICAgICJkZXRhaWxzIjogImh0dHBzOi8vZ3JhcGhxbC5naXRodWIuaW8vZ3JhcGhxbC1zcGVjL0p1bmUyMDE4LyNzZWMtRmllbGQtU2VsZWN0aW9ucy1vbi1PYmplY3RzLUludGVyZmFjZXMtYW5kLVVuaW9ucy1UeXBlcyIsCiAgICAgICAgICAgICAgICAgICAgInRhZyI6ICJmaWVsZC1zZWxlY3Rpb25zLW9uLW9iamVjdHMtaW50ZXJmYWNlcy1hbmQtdW5pb25zLXR5cGVzIiwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJtZXNzYWdlIjogIkZpZWxkIHVua25vd25GaWVsZDQgZG9lc24ndCBleGlzdCBvbiBVc2VyU3RhdHNWaWV3cyIsCiAgICAgICAgICAgICAgICAicGF0aCI6IFsidmlld2VyIiwgInN0YXRzIiwgInZpZXdzIiwgInVua25vd25GaWVsZDQiXSwKICAgICAgICAgICAgICAgICJsb2NhdGlvbnMiOiBbeyJsaW5lIjogOSwgImNvbHVtbiI6IDEzfV0sCiAgICAgICAgICAgICAgICAiZXh0ZW5zaW9ucyI6IHsKICAgICAgICAgICAgICAgICAgICAicnVsZSI6ICI1LjMuMSIsCiAgICAgICAgICAgICAgICAgICAgInNwZWMiOiAiSnVuZSAyMDE4IiwKICAgICAgICAgICAgICAgICAgICAiZGV0YWlscyI6ICJodHRwczovL2dyYXBocWwuZ2l0aHViLmlvL2dyYXBocWwtc3BlYy9KdW5lMjAxOC8jc2VjLUZpZWxkLVNlbGVjdGlvbnMtb24tT2JqZWN0cy1JbnRlcmZhY2VzLWFuZC1VbmlvbnMtVHlwZXMiLAogICAgICAgICAgICAgICAgICAgICJ0YWciOiAiZmllbGQtc2VsZWN0aW9ucy1vbi1vYmplY3RzLWludGVyZmFjZXMtYW5kLXVuaW9ucy10eXBlcyIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJGaWVsZCB1bmtub3duRmllbGQ1IGRvZXNuJ3QgZXhpc3Qgb24gUm9vdCIsCiAgICAgICAgICAgICAgICAicGF0aCI6IFsidmlld2VyIiwgInVua25vd25GaWVsZDIiLCAidW5rbm93bkZpZWxkNSJdLAogICAgICAgICAgICAgICAgImxvY2F0aW9ucyI6IFt7ImxpbmUiOiAxNSwgImNvbHVtbiI6IDEzfV0sCiAgICAgICAgICAgICAgICAiZXh0ZW5zaW9ucyI6IHsKICAgICAgICAgICAgICAgICAgICAicnVsZSI6ICI1LjMuMSIsCiAgICAgICAgICAgICAgICAgICAgInNwZWMiOiAiSnVuZSAyMDE4IiwKICAgICAgICAgICAgICAgICAgICAiZGV0YWlscyI6ICJodHRwczovL2dyYXBocWwuZ2l0aHViLmlvL2dyYXBocWwtc3BlYy9KdW5lMjAxOC8jc2VjLUZpZWxkLVNlbGVjdGlvbnMtb24tT2JqZWN0cy1JbnRlcmZhY2VzLWFuZC1VbmlvbnMtVHlwZXMiLAogICAgICAgICAgICAgICAgICAgICJ0YWciOiAiZmllbGQtc2VsZWN0aW9ucy1vbi1vYmplY3RzLWludGVyZmFjZXMtYW5kLXVuaW9ucy10eXBlcyIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJGaWVsZCB1bmtub3duRmllbGQyIGRvZXNuJ3QgZXhpc3Qgb24gVXNlciIsCiAgICAgICAgICAgICAgICAicGF0aCI6IFsidmlld2VyIiwgInVua25vd25GaWVsZDIiXSwKICAgICAgICAgICAgICAgICJsb2NhdGlvbnMiOiBbeyJsaW5lIjogMTQsICJjb2x1bW4iOiA5fV0sCiAgICAgICAgICAgICAgICAiZXh0ZW5zaW9ucyI6IHsKICAgICAgICAgICAgICAgICAgICAicnVsZSI6ICI1LjMuMSIsCiAgICAgICAgICAgICAgICAgICAgInNwZWMiOiAiSnVuZSAyMDE4IiwKICAgICAgICAgICAgICAgICAgICAiZGV0YWlscyI6ICJodHRwczovL2dyYXBocWwuZ2l0aHViLmlvL2dyYXBocWwtc3BlYy9KdW5lMjAxOC8jc2VjLUZpZWxkLVNlbGVjdGlvbnMtb24tT2JqZWN0cy1JbnRlcmZhY2VzLWFuZC1VbmlvbnMtVHlwZXMiLAogICAgICAgICAgICAgICAgICAgICJ0YWciOiAiZmllbGQtc2VsZWN0aW9ucy1vbi1vYmplY3RzLWludGVyZmFjZXMtYW5kLXVuaW9ucy10eXBlcyIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJGaWVsZCB1bmtub3duRmllbGQxIGRvZXNuJ3QgZXhpc3Qgb24gUXVlcnkiLAogICAgICAgICAgICAgICAgInBhdGgiOiBbInVua25vd25GaWVsZDEiXSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgImxvY2F0aW9ucyI6IFt7ImxpbmUiOiAxOCwgImNvbHVtbiI6IDd9XSwKICAgICAgICAgICAgICAgICJleHRlbnNpb25zIjogewogICAgICAgICAgICAgICAgICAgICJydWxlIjogIjUuMy4xIiwKICAgICAgICAgICAgICAgICAgICAic3BlYyI6ICJKdW5lIDIwMTgiLAo8fGZpbV9lbmR8Pg=="]
["a343e2df166b19db0757a7f19c959c04fce7d079-4","a343e2df166b19db0757a7f19c959c04fce7d079","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKaW1wb3J0IGVudW0KCmNsYXNzIE1hcHBpbmdUeXBlKGVudW0uRW51bSk6CiAgICBJZGVudGl0eSA9IDAKICAgIExpbmVhciA9IDEKICAgIEFmZmluZSA9IDIKCgpjbGFzcyBPREVTb2x2ZXIoZW51bS5FbnVtKToKICAgIFNlbWlJbXBsaWNpdCA9IDAKICAgIEV4cGxpY2l0ID0gMQogICAgUnVuZ2VLdXR0YSA9IDIKICAgIAoKY2xhc3MgTFRDQ2VsbCh0Zi5rZXJhcy5sYXllcnMuQWJzdHJhY3RSTk5DZWxsKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1bml0cywgb2RlX3N0ZXBzPTYsICoqa3dhcmdzKToKICAgICAgICBzZWxmLnVuaXRzID0gdW5pdHMKICAgICAgICBzdXBlcihMVENDZWxsLCBzZWxmKS5fX2luaXRfXygqKmt3YXJncykKICAgICAgICAjIE51bWJlciBvZiBPREUgc29sdmVyIHN0ZXBzIGluIG9uZSBSTk4gc3RlcAogICAgICAgIHNlbGYub2RlX3NvbHZlcl91bmZvbGRzID0gb2RlX3N0ZXBzCiAgICAgICAgc2VsZi5zb2x2ZXIgPSBPREVTb2x2ZXIuU2VtaUltcGxpY2l0CgogICAgICAgIHNlbGYuaW5wdXRfbWFwcGluZyA9IE1hcHBpbmdUeXBlLkFmZmluZQoKICAgICAgICBzZWxmLmVyZXZfaW5pdF9mYWN0b3IgPSAxCgogICAgICAgIHNlbGYud19pbml0X21heCA9IDEuMAogICAgICAgIHNlbGYud19pbml0X21pbiA9IDAuMDEKICAgICAgICBzZWxmLmNtX2luaXRfbWluID0gMC41CiAgICAgICAgc2VsZi5jbV9pbml0X21heCA9IDAuNQogICAgICAgIHNlbGYuZ2xlYWtfaW5pdF9taW4gPSAxCiAgICAgICAgc2VsZi5nbGVha19pbml0X21heCA9IDEKCiAgICAgICAgc2VsZi53X21pbl92YWx1ZSA9IDFlLTUKICAgICAgICBzZWxmLndfbWF4X3ZhbHVlID0gMWUzCiAgICAgICAgc2VsZi5nbGVha19taW5fdmFsdWUgPSAxZS01CiAgICAgICAgc2VsZi5nbGVha19tYXhfdmFsdWUgPSAxZTMKICAgICAgICBzZWxmLmNtX3RfbWluX3ZhbHVlID0gMWUtNgogICAgICAgIHNlbGYuY21fdF9tYXhfdmFsdWUgPSAxZTMKCiAgICAgICAgc2VsZi5maXhfY20gPSBOb25lCiAgICAgICAgc2VsZi5maXhfZ2xlYWsgPSBOb25lCiAgICAgICAgc2VsZi5maXhfdmxlYWsgPSBOb25lCgoKICAgIEBwcm9wZXJ0eQogICAgZGVmIHN0YXRlX3NpemUoc2VsZik6CiAgICAgICAgCiAgICAgICAgcmV0dXJuIChzZWxmLnVuaXRzKQogICAgCgogICAgZGVmIGJ1aWxkKHNlbGYsIGlucHV0X3NoYXBlKToKICAgICAgICAKICAgICAgICBzZWxmLmlucHV0X3NpemUgPSBpbnB1dF9zaGFwZVstMV0KICAgICAgICAKICAgICAgICBzaGFwZSA9IChzZWxmLmlucHV0X3NpemUsKQogICAgICAgIGlmIHNlbGYuaW5wdXRfbWFwcGluZyBpbiAoTWFwcGluZ1R5cGUuQWZmaW5lLCBNYXBwaW5nVHlwZS5MaW5lYXIpOgogICAgICAgICAgICBzZWxmLmlucHV0X3cgPSB0Zi5WYXJpYWJsZSgKICAgICAgICAgICAgICAgIG5hbWU9ImlucHV0X3ciLCAKICAgICAgICAgICAgICAgIHNoYXBlPXNoYXBlLCAKICAgICAgICAgICAgICAgIHRyYWluYWJsZT1UcnVlLCAKICAgICAgICAgICAgICAgIGluaXRpYWxfdmFsdWU9dGYub25lcyhzaGFwZSkKICAgICAgICAgICAgKQogICAgICAgICAgICAKICAgICAgICBzaGFwZSA9IChzZWxmLmlucHV0X3NpemUsKQogICAgICAgIGlmIHNlbGYuaW5wdXRfbWFwcGluZyA9PSBNYXBwaW5nVHlwZS5BZmZpbmU6CiAgICAgICAgICAgIHNlbGYuaW5wdXRfYiA9IHRmLlZhcmlhYmxlKAogICAgICAgICAgICAgICAgbmFtZT0iaW5wdXRfYiIsCiAgICAgICAgICAgICAgICBzaGFwZT1zaGFwZSwKICAgICAgICAgICAgICAgIHRyYWluYWJsZT1UcnVlLAogICAgICAgICAgICAgICAgaW5pdGlhbF92YWx1ZT10Zi56ZXJvcyhzaGFwZSkKICAgICAgICAgICAgKQogICAgICAgIAogICAgICAgIHNoYXBlID0gKHNlbGYuaW5wdXRfc2l6ZSwgc2VsZi51bml0cykKICAgICAgICBzZWxmLnNlbnNvcnlfbXUgPSB0Zi5WYXJpYWJsZSgKICAgICAgICAgICAgbmFtZT0ic2Vuc29yeV9tdSIsCiAgICAgICAgICAgIHNoYXBlPXNoYXBlLAogICAgICAgICAgICB0cmFpbmFibGU9VHJ1ZSwKICAgICAgICAgICAgaW5pdGlhbF92YWx1ZT10Zi5yYW5kb20udW5pZm9ybShzaGFwZSwgbWludmFsPTAuMywgbWF4dmFsPTAuOCkKICAgICAgICApCiAgICAgICAgCiAgICAgICAgc2hhcGUgPSAoc2VsZi5pbnB1dF9zaXplLCBzZWxmLnVuaXRzKQogICAgICAgIHNlbGYuc2Vuc29yeV9zaWdtYSA9IHRmLlZhcmlhYmxlKAogICAgICAgICAgICBuYW1lPSJzZW5zb3J5X3NpZ21hIiwKICAgICAgICAgICAgc2hhcGU9c2hhcGUsCiAgICAgICAgICAgIHRyYWluYWJsZT1UcnVlLAogICAgICAgICAgICBpbml0aWFsX3ZhbHVlPXRmLnJhbmRvbS51bmlmb3JtKHNoYXBlLCBtaW52YWw9My4wLCBtYXh2YWw9OC4wKQogICAgICAgICkKICAgICAgICAKICAgICAgICBzaGFwZSA9IChzZWxmLmlucHV0X3NpemUsIHNlbGYudW5pdHMpCiAgICAgICAgc2VsZi5zZW5zb3J5X1cgPSB0Zi5WYXJpYWJsZSgKICAgICAgICAgICAgbmFtZT0ic2Vuc29yeV9XIiwKICAgICAgICAgICAgc2hhcGU9c2hhcGUsCiAgICAgICAgICAgIHRyYWluYWJsZT1UcnVlLAogICAgICAgICAgICBpbml0aWFsX3ZhbHVlPXRmLnJhbmRvbS51bmlmb3JtKAogICAgICAgICAgICAgICAgc2hhcGUsIAogICAgICAgICAgICAgICAgbWludmFsPXNlbGYud19pbml0X21pbiwgCiAgICAgICAgICAgICAgICBtYXh2YWw9c2VsZi53X2luaXRfbWF4CiAgICAgICAgICAgICkKICAgICAgICApCiAgICAgICAgCiAgICAgICAgc2hhcGUgPSAoc2VsZi5pbnB1dF9zaXplLCBzZWxmLnVuaXRzKQogICAgICAgIHNlbnNvcnlfZXJldl9pbml0ID0gMiAqIHRmLnJhbmRvbS51bmlmb3JtKAogICAgICAgICAgICBzaGFwZSwgCiAgICAgICAgICAgIG1pbnZhbD0wLCAKICAgICAgICAgICAgbWF4dmFsPTIsIAogICAgICAgICAgICBkdHlwZT10Zi5kdHlwZXMuaW50MzIKICAgICAgICApIC0gMQogICAgICAgIHNlbnNvcnlfZXJldl9pbml0ID0gdGYuY2FzdChzZW5zb3J5X2VyZXZfaW5pdCwgdGYuZHR5cGVzLmZsb2F0MzIpCiAgICAgICAgc2VsZi5zZW5zb3J5X2VyZXYgPSB0Zi5WYXJpYWJsZSgKICAgICAgICAgICAgbmFtZT0ic2Vuc29yeV9lcmV2IiwKICAgICAgICAgICAgc2hhcGU9c2hhcGUsCiAgICAgICAgICAgIHRyYWluYWJsZT1UcnVlLAogICAgICAgICAgICBpbml0aWFsX3ZhbHVlPXNlbnNvcnlfZXJldl9pbml0KnNlbGYuZXJldl9pbml0X2ZhY3RvcgogICAgICAgICkKCiAgICAgICAgc2hhcGUgPSAoc2VsZi51bml0cywgc2VsZi51bml0cykKICAgICAgICBzZWxmLm11ID0gdGYuVmFyaWFibGUoCiAgICAgICAgICAgIG5hbWU9Im11IiwKICAgICAgICAgICAgc2hhcGU9c2hhcGUsCiAgICAgICAgICAgIHRyYWluYWJsZT1UcnVlLAogICAgICAgICAgICBpbml0aWFsX3ZhbHVlPXRmLnJhbmRvbS51bmlmb3JtKHNoYXBlLCBtaW52YWw9MC4zLCBtYXh2YWw9MC44KQogICAgICAgICkKICAgICAgICAKICAgICAgICBzaGFwZSA9IChzZWxmLnVuaXRzLCBzZWxmLnVuaXRzKQogICAgICAgIHNlbGYuc2lnbWEgPSB0Zi5WYXJpYWJsZSgKICAgICAgICAgICAgbmFtZT0ic2lnbWEiLAogICAgICAgICAgICBzaGFwZT1zaGFwZSwKICAgICAgICAgICAgdHJhaW5hYmxlPVRydWUsCiAgICAgICAgICAgIGluaXRpYWxfdmFsdWU9dGYucmFuZG9tLnVuaWZvcm0oc2hhcGUsIG1pbnZhbD0zLjAsIG1heHZhbD04LjApCiAgICAgICAgKQogICAgICAgIAogICAgICAgIHNoYXBlID0gKHNlbGYudW5pdHMsIHNlbGYudW5pdHMpCiAgICAgICAgc2VsZi5XID0gdGYuVmFyaWFibGUoCiAgICAgICAgICAgIG5hbWU9IlciLAogICAgICAgICAgICBzaGFwZT1zaGFwZSwKICAgICAgICAgICAgdHJhaW5hYmxlPVRydWUsCiAgICAgICAgICAgIGluaXRpYWxfdmFsdWU9dGYucmFuZG9tLnVuaWZvcm0oCiAgICAgICAgICAgICAgICBzaGFwZSwKICAgICAgICAgICAgICAgIG1pbnZhbD1zZWxmLndfaW5pdF9taW4sCiAgICAgICAgICAgICAgICBtYXh2YWw9c2VsZi53X2luaXRfbWF4CiAgICAgICAgICAgICkKICAgICAgICApCgogICAgICAgIHNoYXBlID0gKHNlbGYudW5pdHMsIHNlbGYudW5pdHMpCiAgICAgICAgZXJldl9pbml0ID0gMiAqIHRmLnJhbmRvbS51bmlmb3JtKAogICAgICAgICAgICBzaGFwZSwgCiAgICAgICAgICAgIG1pbnZhbD0wLCAKICAgICAgICAgICAgbWF4dmFsPTIsIAogICAgICAgICAgICBkdHlwZT10Zi5kdHlwZXMuaW50MzIKICAgICAgICApIC0gMQogICAgICAgIGVyZXZfaW5pdCA9IHRmLmNhc3QoZXJldl9pbml0LCB0Zi5kdHlwZXMuZmxvYXQzMikKICAgICAgICBzZWxmLmVyZXYgPSB0Zi5WYXJpYWJsZSgKICAgICAgICAgICAgbmFtZT0iZXJldiIsCiAgICAgICAgICAgIHNoYXBlPXNoYXBlLAogICAgICAgICAgICB0cmFpbmFibGU9VHJ1ZSwKICAgICAgICAgICAgaW5pdGlhbF92YWx1ZT1lcmV2X2luaXQqc2VsZi5lcmV2X2luaXRfZmFjdG9yCiAgICAgICAgKQoKICAgICAgICBzaGFwZSA9IChzZWxmLnVuaXRzLCkKICAgICAgICBpZiBzZWxmLmZpeF92bGVhayBpcyBOb25lOgogICAgICAgICAgICBzZWxmLnZsZWFrID0gdGYuVmFyaWFibGUoCiAgICAgICAgICAgICAgICBuYW1lPSJ2bGVhayIsCiAgICAgICAgICAgICAgICBzaGFwZT1zaGFwZSwKICAgICAgICAgICAgICAgIHRyYWluYWJsZT1UcnVlLAogICAgICAgICAgICAgICAgaW5pdGlhbF92YWx1ZT10Zi5yYW5kb20udW5pZm9ybShzaGFwZSwgbWludmFsPS0wLjIsIG1heHZhbD0wLjIpCiAgICAgICAgICAgICkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLnZsZWFrID0gdGYuVmFyaWFibGUoCiAgICAgICAgICAgICAgICBuYW1lPSJ2bGVhayIsCiAgICAgICAgICAgICAgICBzaGFwZT1zaGFwZSwKICAgICAgICAgICAgICAgIHRyYWluYWJsZT1GYWxzZSwKICAgICAgICAgICAgICAgIGluaXRpYWxfdmFsdWU9c2VsZi5maXhfdmxlYWsqdGYub25lcyhzaGFwZSkKICAgICAgICAgICAgKQogICAgICAgICAgICAKICAgICAgICBzaGFwZSA9IChzZWxmLnVuaXRzLCkKICAgICAgICBpZiBzZWxmLmZpeF9nbGVhayBpcyBOb25lOgogICAgICAgICAgICBpZiBzZWxmLmdsZWFrX2luaXRfbWF4ID4gc2VsZi5nbGVha19pbml0X21pbjoKICAgICAgICAgICAgICAgIGluaXRpYWxfdmFsdWUgPSB0Zi5yYW5kb20udW5pZm9ybSgKICAgICAgICAgICAgICAgICAgICBzaGFwZSwKICAgICAgICAgICAgICAgICAgICBtaW52YWw9c2VsZi5nbGVha19pbml0X21pbiwgCiAgICAgICAgICAgICAgICAgICAgbWF4dmFsPXNlbGYuZ2xlYWtfaW5pdF9tYXgKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGluaXRpYWxfdmFsdWUgPSBzZWxmLmdsZWFrX2luaXRfbWluICogdGYub25lcyhzaGFwZSkKICAgICAgICAgICAgc2VsZi5nbGVhayA9IHRmLlZhcmlhYmxlKAogICAgICAgICAgICAgICAgbmFtZT0iZ2xlYWsiLAogICAgICAgICAgICAgICAgc2hhcGU9c2hhcGUsCiAgICAgICAgICAgICAgICB0cmFpbmFibGU9VHJ1ZSwKICAgICAgICAgICAgICAgIGluaXRpYWxfdmFsdWU9aW5pdGlhbF92YWx1ZQogICAgICAgICAgICApCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5nbGVhayA9IHRmLlZhcmlhYmxlKAogICAgICAgICAgICAgICAgbmFtZT0iZ2xlYWsiLAogICAgICAgICAgICAgICAgc2hhcGU9c2hhcGUsCiAgICAgICAgICAgICAgICB0cmFpbmFibGU9RmFsc2UsCiAgICAgICAgICAgICAgICBpbml0aWFsX3ZhbHVlPXNlbGYuZml4X2dsZWFrKnRmLm9uZXMoc2hhcGUpCiAgICAgICAgICAgICkKCiAgICAgICAgc2hhcGUgPSAoc2VsZi51bml0cywpCiAgICAgICAgaWYgc2VsZi5maXhfY20gaXMgTm9uZToKICAgICAgICAgICAgaWYgc2VsZi5jbV9pbml0X21heCA+IHNlbGYuY21faW5pdF9taW46CiAgICAgICAgICAgICAgICBpbml0aWFsX3ZhbHVlID0gdGYucmFuZG9tLnVuaWZvcm0oCiAgICAgICAgICAgICAgICAgICAgc2hhcGUsCiAgICAgICAgICAgICAgICAgICAgbWludmFsPXNlbGYuY21faW5pdF9taW4sIAogICAgICAgICAgICAgICAgICAgIG1heHZhbD1zZWxmLmNtX2luaXRfbWF4CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBpbml0aWFsX3ZhbHVlID0gc2VsZi5jbV9pbml0X21pbip0Zi5vbmVzKHNoYXBlKQogICAgICAgICAgICBzZWxmLmNtX3QgPSB0Zi5WYXJpYWJsZSgKICAgICAgICAgICAgICAgIG5hbWU9ImNtX3QiLAogICAgICAgICAgICAgICAgc2hhcGU9c2hhcGUsCiAgICAgICAgICAgICAgICB0cmFpbmFibGU9VHJ1ZSwKICAgICAgICAgICAgICAgIGluaXRpYWxfdmFsdWU9aW5pdGlhbF92YWx1ZQogICAgICAgICAgICApCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5jbV90ID0gdGYuVmFyaWFibGUoCiAgICAgICAgICAgICAgICBuYW1lPSJjbV90IiwKICAgICAgICAgICAgICAgIHNoYXBlPXNoYXBlLAogICAgICAgICAgICAgICAgdHJhaW5hYmxlPUZhbHNlLAogICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXI9c2VsZi5maXhfY20qdGYub25lcyhzaGFwZSksCiAgICAgICAgICAgICkKICAgICAgICAgICAgCgo8fGZpbV9ob2xlfD4KICAgIGRlZiBjYWxsKHNlbGYsIGlucHV0cywgc3RhdGVzKToKICAgICAgICAKICAgICAgICBzdGF0ZSA9IHN0YXRlc1swXQogICAgICAgIAogICAgICAgIGlucHV0cyA9IHNlbGYubWFwX2lucHV0cyhpbnB1dHMpCiAgICAgICAgCiAgICAgICAgaWYgc2VsZi5zb2x2ZXIgPT0gT0RFU29sdmVyLkV4cGxpY2l0OgogICAgICAgICAgICBuZXh0X3N0YXRlID0gc2VsZi5vZGVfc3RlcF9leHBsaWNpdCgKICAgICAgICAgICAgICAgIGlucHV0cywgc3RhdGUsIG9kZV9zb2x2ZXJfdW5mb2xkcz1zZWxmLm9kZV9zb2x2ZXJfdW5mb2xkcwogICAgICAgICAgICApCgogICAgICAgIGVsaWYgc2VsZi5zb2x2ZXIgPT0gT0RFU29sdmVyLlNlbWlJbXBsaWNpdDoKICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IHNlbGYub2RlX3N0ZXAoaW5wdXRzLCBzdGF0ZSkKCiAgICAgICAgZWxpZiBzZWxmLnNvbHZlciA9PSBPREVTb2x2ZXIuUnVuZ2VLdXR0YToKICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IHNlbGYub2RlX3N0ZXBfcnVuZ2Vfa3V0dGEoaW5wdXRzLCBzdGF0ZSkKCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihmIlVua25vd24gT0RFIHNvbHZlciAne3N0cihzZWxmLnNvbHZlcil9JyIpCgogICAgICAgIG91dHB1dHMgPSBuZXh0X3N0YXRlCgogICAgICAgIHJldHVybiAob3V0cHV0cywgbmV4dF9zdGF0ZSkKCgogICAgZGVmIGdldF9jb25maWcoc2VsZik6CiAgICAgICAgY29uZmlnID0gc3VwZXIoTFRDQ2VsbCwgc2VsZikuZ2V0X2NvbmZpZygpCiAgICAgICAgY29uZmlnLnVwZGF0ZSh7CiAgICAgICAgICAgICJ1bml0cyI6IHNlbGYudW5pdHMsIAogICAgICAgICAgICAib2RlX3N0ZXBzIjogc2VsZi5vZGVfc29sdmVyX3VuZm9sZHMKICAgICAgICB9KQoKICAgICAgICByZXR1cm4gKGNvbmZpZykKICAgIAogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgZnJvbV9jb25maWcoY2xzLCBjb25maWcpOgogICAgICAgIHJldHVybiAoY2xzKCoqY29uZmlnKSkKICAgICAgICAKCgogICAgZGVmIGdldF9wYXJhbV9jb25zdHJhaW5fb3Aoc2VsZik6CgogICAgICAgIGNtX2NsaXBwaW5nX29wID0gc2VsZi5jbV90LmFzc2lnbigKICAgICAgICAgICAgdGYuY2xpcF9ieV92YWx1ZShzZWxmLmNtX3QsIHNlbGYuY21fdF9taW5fdmFsdWUsIHNlbGYuY21fdF9tYXhfdmFsdWUpCiAgICAgICAgKQogICAgICAgIGdsZWFrX2NsaXBwaW5nX29wID0gc2VsZi5nbGVhay5hc3NpZ24oCiAgICAgICAgICAgIHRmLmNsaXBfYnlfdmFsdWUoc2VsZi5nbGVhaywgc2VsZi5nbGVha19taW5fdmFsdWUsIHNlbGYuZ2xlYWtfbWF4X3ZhbHVlKQogICAgICAgICkKICAgICAgICB3X2NsaXBwaW5nX29wID0gc2VsZi5XLmFzc2lnbigKICAgICAgICAgICAgdGYuY2xpcF9ieV92YWx1ZShzZWxmLlcsIHNlbGYud19taW5fdmFsdWUsIHNlbGYud19tYXhfdmFsdWUpCiAgICAgICAgKQogICAgICAgIHNlbnNvcnlfd19jbGlwcGluZ19vcCA9IHNlbGYuc2Vuc29yeV9XLmFzc2lnbigKICAgICAgICAgICAgdGYuY2xpcF9ieV92YWx1ZShzZWxmLnNlbnNvcnlfVywgc2VsZi53X21pbl92YWx1ZSwgc2VsZi53X21heF92YWx1ZSkKICAgICAgICApCgogICAgICAgIHJldHVybiAoY21fY2xpcHBpbmdfb3AsIGdsZWFrX2NsaXBwaW5nX29wLCB3X2NsaXBwaW5nX29wLCBzZW5zb3J5X3dfY2xpcHBpbmdfb3ApCgoKICAgIGRlZiBtYXBfaW5wdXRzKHNlbGYsIGlucHV0cyk6CiAgICAgICAgCiAgICAgICAgaWYgc2VsZi5pbnB1dF9tYXBwaW5nIGluIChNYXBwaW5nVHlwZS5BZmZpbmUsIE1hcHBpbmdUeXBlLkxpbmVhcik6CiAgICAgICAgICAgIGlucHV0cyA9IGlucHV0cyAqIHNlbGYuaW5wdXRfdwogICAgICAgIGlmIHNlbGYuaW5wdXRfbWFwcGluZyA9PSBNYXBwaW5nVHlwZS5BZmZpbmU6CiAgICAgICAgICAgIGlucHV0cyA9IGlucHV0cyArIHNlbGYuaW5wdXRfYgogICAgICAgICAgICAKICAgICAgICByZXR1cm4gKGlucHV0cykKICAgIAogICAgIyBIeWJyaWQgZXVsZXIgbWV0aG9kCiAgICBkZWYgb2RlX3N0ZXAoc2VsZiwgaW5wdXRzLCBzdGF0ZSk6CiAgICAgICAgdl9wcmUgPSBzdGF0ZQoKICAgICAgICBzZW5zb3J5X3dfYWN0aXZhdGlvbiA9IHNlbGYuc2Vuc29yeV9XICogc2VsZi5zaWdtb2lkKAogICAgICAgICAgICBpbnB1dHMsIAogICAgICAgICAgICBzZWxmLnNlbnNvcnlfbXUsIAogICAgICAgICAgICBzZWxmLnNlbnNvcnlfc2lnbWEKICAgICAgICApCiAgICAgICAgCiAgICAgICAgc2Vuc29yeV9yZXZfYWN0aXZhdGlvbiA9IHNlbnNvcnlfd19hY3RpdmF0aW9uICogc2VsZi5zZW5zb3J5X2VyZXYKCiAgICAgICAgd19udW1lcmF0b3Jfc2Vuc29yeSA9IHRmLnJlZHVjZV9zdW0oc2Vuc29yeV9yZXZfYWN0aXZhdGlvbiwgYXhpcz0xKQogICAgICAgIHdfZGVub21pbmF0b3Jfc2Vuc29yeSA9IHRmLnJlZHVjZV9zdW0oc2Vuc29yeV93X2FjdGl2YXRpb24sIGF4aXM9MSkKCiAgICAgICAgZm9yIHQgaW4gcmFuZ2Uoc2VsZi5vZGVfc29sdmVyX3VuZm9sZHMpOgogICAgICAgICAgICB3X2FjdGl2YXRpb24gPSBzZWxmLlcgKiBzZWxmLnNpZ21vaWQodl9wcmUsIHNlbGYubXUsIHNlbGYuc2lnbWEpCgogICAgICAgICAgICByZXZfYWN0aXZhdGlvbiA9IHdfYWN0aXZhdGlvbiAqIHNlbGYuZXJldgoKICAgICAgICAgICAgd19udW1lcmF0b3IgPSB0Zi5yZWR1Y2Vfc3VtKHJldl9hY3RpdmF0aW9uLCBheGlzPTEpICsgd19udW1lcmF0b3Jfc2Vuc29yeQogICAgICAgICAgICB3X2Rlbm9taW5hdG9yID0gdGYucmVkdWNlX3N1bSh3X2FjdGl2YXRpb24sIGF4aXM9MSkgKyB3X2Rlbm9taW5hdG9yX3NlbnNvcnkKCiAgICAgICAgICAgIG51bWVyYXRvciA9IHNlbGYuY21fdCAqIHZfcHJlICsgc2VsZi5nbGVhayAqIHNlbGYudmxlYWsgKyB3X251bWVyYXRvcgogICAgICAgICAgICBkZW5vbWluYXRvciA9IHNlbGYuY21fdCArIHNlbGYuZ2xlYWsgKyB3X2Rlbm9taW5hdG9yCgogICAgICAgICAgICB2X3ByZSA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yCgogICAgICAgIHJldHVybiAodl9wcmUpCiAgICAKCiAgICBkZWYgc2lnbW9pZChzZWxmLCB2X3ByZSwgbXUsIHNpZ21hKToKICAgICAgICB2X3ByZSA9IHRmLnJlc2hhcGUodl9wcmUsICgtMSwgdl9wcmUuc2hhcGVbLTFdLCAxKSkKICAgICAgICAKICAgICAgICByZXR1cm4gKHRmLm5uLnNpZ21vaWQoc2lnbWEgKiAodl9wcmUgLSBtdSkpKQoKCmNsYXNzIExUQ0xheWVyKHRmLmtlcmFzLmxheWVycy5STk4pOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHVuaXRzLCAqYXJncywgb2RlX3N0ZXBzPTYsICoqa3dhcmdzKToKICAgICAgICBpZiAidGltZV9tYWpvciIgbm90IGluIGt3YXJnczoKICAgICAgICAgICAgcHJpbnQoIkRlZmF1bHRpbmcgdG8gdGltZV9tYWpvcj1UcnVlIGZvciBMVENMYXllci4iKQogICAgICAgICAgICBrd2FyZ3NbInRpbWVfbWFqb3IiXSA9IFRydWUKICAgICAgICBlbGlmIGt3YXJnc1sidGltZV9tYWpvciJdIGlzIEZhbHNlOgogICAgICAgICAgICByYWlzZSAoTm90SW1wbGVtZW50ZWRFcnJvcigKICAgICAgICAgICAgICAgICJ0aW1lX21ham9yPUZhbHNlIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZCBmb3IgTFRDTGF5ZXIuIgogICAgICAgICAgICApKQogICAgICAgIHNlbGYudW5pdHMgPSB1bml0cwogICAgICAgIHNlbGYub2RlX3N0ZXBzID0gb2RlX3N0ZXBzCiAgICAgICAgCiAgICAgICAgc3VwZXIoTFRDTGF5ZXIsIHNlbGYpLl9faW5pdF9fKAogICAgICAgICAgICBMVENDZWxsKHVuaXRzLCBvZGVfc3RlcHM9b2RlX3N0ZXBzKSwKICAgICAgICAgICAgKmFyZ3MsCiAgICAgICAgICAgICoqa3dhcmdzCiAgICAgICAgKQoKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBmcm9tX2NvbmZpZyhjbHMsIGNvbmZpZyk6CiAgICAgICAgZGVsIChjb25maWdbImNlbGwiXSkKICAgICAgICByZXR1cm4gKGNscygqKmNvbmZpZykpCgoKICAgIGRlZiBnZXRfY29uZmlnKHNlbGYpOgogICAgICAgIGNvbmZpZyA9IHN1cGVyKExUQ0xheWVyLCBzZWxmKS5nZXRfY29uZmlnKCkKICAgICAgICBjb25maWcudXBkYXRlKHsKICAgICAgICAgICAgInVuaXRzIjogc2VsZi51bml0cywKICAgICAgICAgICAgIm9kZV9zdGVwcyI6IHNlbGYub2RlX3N0ZXBzCiAgICAgICAgfSkKICAgICAgICByZXR1cm4gKGNvbmZpZykKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmJ1aWx0ID0gVHJ1ZQoKCjx8ZmltX2VuZHw+"]
["2552a5e6b5ecdcb03c2f3dda2cd8f790a0c1a058-1","2552a5e6b5ecdcb03c2f3dda2cd8f790a0c1a058","PHxmaW1fcHJlZml4fD4KZGVmIG9ic3Qoa2V5cywgZnJlcSwgbik6Cgljb3N0ID0gW1swIGZvciB4IGluIHJhbmdlKG4pXSBmb3IgeSBpbiByYW5nZShuKV0KCWZvciBpIGluIHJhbmdlKG4pOgoJCWNvc3RbaV1baV0gPSBmcmVxW2ldCglmb3IgTCBpbiByYW5nZSgyLCBuICsgMSk6CgkJZm9yIGkgaW4gcmFuZ2UobiAtIEwgKyAyKToKCQkJaiA9IGkgKyBMIC0gMQoJCQlpZiBpID49IG4gb3IgaiA+PSBuOgoJCQkJYnJlYWsKCQkJY29zdFtpXVtqXSA9IDEwMDIzOTA4MzQ5MDM0NTk4NzgKCQkJZm9yIHIgaW4gcmFuZ2UoaSwgaiArIDEpOgoJCQkJYyA9IDAKCQkJCWlmIChyID4gaSk6CgkJCQkJYyArPSBjb3N0W2ldW3IgLSAxXQoJCQkJaWYgKHIgPCBqKToKCQkJCQljICs9IGNvc3RbciArIDFdW2pdCgkJCQljICs9IHN1bShmcmVxLCBpLCBqKQoJCQkJaWYgKGMgPCBjb3N0W2ldW2pdKToKCQkJCQljb3N0W2ldW2pdID0gYwoJcmV0dXJuIGNvc3RbMF1bbiAtIDFdCmRlZiBzdW0oZnJlcSwgaSwgaik6CgoJcyA9IDAKCWZvciBrIGluIHJhbmdlKGksIGogKyAxKToKCQlzICs9IGZyZXFba10KPHxmaW1faG9sZXw+CmtleXMgPSBsaXN0KG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkpCmZyZXEgPSBsaXN0KG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkpCm4gPSBsZW4oa2V5cykKcHJpbnQob2JzdChrZXlzLCBmcmVxLCBuKSkKPHxmaW1fc3VmZml4fD4KCXJldHVybiBzCgo8fGZpbV9lbmR8Pg=="]
["25337a3d870e87526576d58073dcbcf58a4ba766-1","25337a3d870e87526576d58073dcbcf58a4ba766","PHxmaW1fcHJlZml4fD4KIyBUaGlyZApmcm9tIGZsYXNrX21hcnNobWFsbG93IGltcG9ydCBNYXJzaG1hbGxvdwojIEFwcHMKZnJvbSBhcHBzLnVzZXJzIGltcG9ydCBtb2RlbHMKCm1hID0gTWFyc2htYWxsb3coKQoKCmRlZiBjb25maWd1cmVfbWEoYXBwKToKICAgIG1hLmluaXRfYXBwKGFwcCkKCgpjbGFzcyBVc2VyUmVnaXN0cmF0aW9uU2NoZW1hKG1hLlNRTEFsY2hlbXlBdXRvU2NoZW1hKToKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgbW9kZWwgPSBtb2RlbHMuVXNlck1peGluCiAgICAgICAgaW5jbHVkZV9mayA9IFRydWUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCmNsYXNzIFVzZXJTY2hlbWEobWEuU1FMQWxjaGVteUF1dG9TY2hlbWEpOgogICAgY2xhc3MgTWV0YToKPHxmaW1fZW5kfD4="]
["09b1f1ba9d5f379189dbc0da1d5ca338ee3b5ea0-1","09b1f1ba9d5f379189dbc0da1d5ca338ee3b5ea0","PHxmaW1fcHJlZml4fD4KIyBUaGUgZm9sbG93aW5nIHNjcmlwdCB3aWxsIHNlbmQgYSBxdW90ZSB0byBhIExvZyBhbmQgU3BlZWNoIHNlcnZpY2UgZXZlcnkgbWludXRlLgoKc3BlZWNoID0gUnVudGltZS5jcmVhdGVBbmRTdGFydCgic3BlZWNoIiwiU3BlZWNoIikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpjcm9uICAgPSAgUnVudGltZS5jcmVhdGVBbmRTdGFydCgiY3JvbiIsICJDcm9uIikKbG9nICAgPSAgUnVudGltZS5jcmVhdGVBbmRTdGFydCgibG9nIiwgIkxvZyIpCmNyb24uYWRkU2NoZWR1bGVkRXZlbnQoIiogKiAqICogKiIsInNwZWVjaCIsInNwZWFrIiwgImhlbGxvIHNpciwgdGltZSBmb3IgeW91ciBjb2ZmZWUiKQpjcm9uLmFkZFNjaGVkdWxlZEV2ZW50KCIqICogKiAqICoiLCJsb2ciLCJsb2ciLCAiaGVsbG8gc2lyLCB0aW1lIGZvciB5b3VyIGNvZmZlZSIpCjx8ZmltX2VuZHw+"]
["6c88a0a54b18de4abe5fb9bab6b7e931d33ca8af-4","6c88a0a54b18de4abe5fb9bab6b7e931d33ca8af","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAubW9uaXRvciBpbXBvcnQgKgo8fGZpbV9lbmR8Pg=="]
["254ecc1cf6dccded37aace51cde224e6597a1a19-3","254ecc1cf6dccded37aace51cde224e6597a1a19",{"$cut":{"chars":60044,"head":"PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiTWFudGFycmF5IE1pY3JvY29udHJvbGxlciBTaW11bGF0b3IuIiIiCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYW5ub3RhdGlvbnMKCmltcG9ydCBjc3YKaW1wb3J0IGxvZ2dpbmcKZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFF1ZXVlCmZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBxdWV1ZXMgYXMgbXBxdWV1ZXMKaW1wb3J0IG9zCmltcG9ydCBxdWV1ZQppbXBvcnQgcmFuZG9tCmZyb20gdGltZSBpbXBvcnQgcGVyZl9jb3VudGVyCmZyb20gdGltZSBpbXBvcnQgcGVyZl9jb3VudGVyX25zCmZyb20gdHlwaW5nIGltcG9ydCBBbnkKZnJvbSB0eXBpbmcgaW1wb3J0IERpY3QKZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsCmZyb20gdHlwaW5nIGltcG9ydCBVbmlvbgpmcm9tIHV1aWQgaW1wb3J0IFVVSUQKCmZyb20gaW1tdXRhYmxlZGljdCBpbXBvcnQgaW1tdXRhYmxlZGljdApmcm9tIG1hbnRhcnJheV9maWxlX21hbmFnZXIgaW1wb3J0IEJPT1RVUF9DT1VOVEVSX1VVSUQKZnJvbSBtYW50YXJyYXlfZmlsZV9tYW5hZ2VyIGltcG9ydCBNQUlOX0ZJUk1XQVJFX1ZFUlNJT05fVVVJRApmcm9tIG1hbnRhcnJheV9maWxlX21hbmFnZXIgaW1wb3J0IE1BTlRBUlJBWV9OSUNLTkFNRV9VVUlECmZyb20gbWFudGFycmF5X2ZpbGVfbWFuYWdlciBpbXBvcnQgTUFOVEFSUkFZX1NFUklBTF9OVU1CRVJfVVVJRApmcm9tIG1hbnRhcnJheV9maWxlX21hbmFnZXIgaW1wb3J0IFBDQl9TRVJJQUxfTlVNQkVSX1VVSUQKZnJvbSBtYW50YXJyYXlfZmlsZV9tYW5hZ2VyIGltcG9ydCBUQU1QRVJfRkxBR19VVUlECmZyb20gbWFudGFycmF5X2ZpbGVfbWFuYWdlciBpbXBvcnQgVE9UQUxfV09SS0lOR19IT1VSU19VVUlECmZyb20gbnB0eXBpbmcgaW1wb3J0IE5EQXJyYXkKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gc2NpcHkgaW1wb3J0IGludGVycG9sYXRlCmZyb20gc3RkbGliX3V0aWxzIGltcG9ydCBkcmFpbl9xdWV1ZQpmcm9tIHN0ZGxpYl91dGlscyBpbXBvcnQgZ2V0X2N1cnJlbnRfZmlsZV9hYnNfZGlyZWN0b3J5CmZyb20gc3RkbGliX3V0aWxzIGltcG9ydCBJbmZpbml0ZVByb2Nlc3MKZnJvbSBzdGRsaWJfdXRpbHMgaW1wb3J0IHJlc291cmNlX3BhdGgKCmZyb20gLmNvbnN0YW50cyBpbXBvcnQgREVGQVVMVF9TQU1QTElOR19QRVJJT0QKZnJvbSAuY29uc3RhbnRzIGltcG9ydCBHRU5FUklDXzI0X1dFTExfREVGSU5JVElPTgpmcm9tIC5jb25zdGFudHMgaW1wb3J0IE1BWF9NQ19SRUJPT1RfRFVSQVRJT05fU0VDT05EUwpmcm9tIC5jb25zdGFudHMgaW1wb3J0IE1JQ1JPX1RPX0JBU0VfQ09OVkVSU0lPTgpmcm9tIC5jb25zdGFudHMgaW1wb3J0IE1JQ1JPU0VDT05EU19QRVJfQ0VOVElNSUxMSVNFQ09ORApmcm9tIC5jb25zdGFudHMgaW1wb3J0IE1JQ1JPU0VDT05EU19QRVJfTUlMTElTRUNPTkQKZnJvbSAuY29uc3RhbnRzIGltcG9ydCBTRVJJQUxfQ09NTV9BRERJVElPTkFMX0JZVEVTX0lOREVYCmZyb20gLmNvbnN0YW50cyBpbXBvcnQgU0VSSUFMX0NPTU1fQk9PVF9VUF9DT0RFCmZyb20gLmNvbnN0YW50cyBpbXBvcnQgU0VSSUFMX0NPTU1fQ0hFQ0tTVU1fRkFJTFVSRV9QQUNLRVRfVFlQRQpmcm9tIC5jb25zdGFudHMgaW1wb3J0IFNFUklBTF9DT01NX0NIRUNLU1VNX0xFTkdUSF9CWVRFUwpmcm9tIC5jb25zdGFudHMgaW1wb3J0IFNFUklBTF9DT01NX0NPTU1BTkRfUkVTUE9OU0VfUEFDS0VUX1RZUEUKZnJvbSAuY29uc3RhbnRzIGltcG9ydCBTRVJJQUxfQ09NTV9EVU1QX0VFUFJPTV9DT01NQU5EX0JZVEUKZnJvbSAuY29uc3RhbnRzIGltcG9ydCBTRVJJQUxfQ09NTV9GQVRBTF9FUlJPUl9DT0RFCmZyb20gLmNvbnN0YW50cyBpbXBvcnQgU0VSSUFMX0NPTU1fR0VUX01FVEFEQVRBX0NPTU1BTkRfQllURQpmcm9tIC5jb25zdGFudHMgaW1wb3J0IFNFUklBTF9DT01NX0hBTkRTSEFLRV9QQUNLRVRfVFlQRQpmcm9tIC5jb25zdGFudHMgaW1wb3J0IFNFUklBTF9DT01NX0hBTkRTSEFLRV9QRVJJT0RfU0VDT05EUwpmcm9tIC5jb25zdGFudHMgaW1wb3J0IFNFUklBTF9DT01NX0hBTkRTSEFLRV9USU1FT1VUX0NPREUKZnJvbSAuY29uc3RhbnRzIGltcG9ydCBTRVJJQUxfQ09NTV9IQU5EU0hBS0VfVElNRU9VVF9TRUNPTkRTCmZyb20gLmNvbnN0YW50cyBpbXBvcnQgU0VSSUFMX0NPTU1fSURMRV9SRUFEWV9DT0RFCmZyb20gLmNvbnN0YW50cyBpbXBvcnQgU0VSSUFMX0NPTU1fTUFHSUNfV09SRF9CWVRFUwpmcm9tIC5jb25zdGFudHMgaW1wb3J0IFNFUklBTF9DT01NX01BR05FVE9NRVRFUl9DT05GSUdfQ09NTUFORF9CWVRFCmZyb20gLmNvbnN0YW50cyBpbXBvcnQgU0VSSUFMX0NPTU1fTUFHTkVUT01FVEVSX0RBVEFfUEFDS0VUX1RZUEUKZnJvbSAuY29uc3RhbnRzIGltcG9ydCBTRVJJQUxfQ09NTV9NQUlOX01PRFVMRV9JRApmcm9tIC5jb25zdGFudHMgaW1wb3J0IFNFUklBTF9DT01NX01FVEFEQVRBX0JZVEVTX0xFTkdUSApmcm9tIC5jb25zdGFudHMgaW1wb3J0IFNFUklBTF9DT01NX01PRFVMRV9JRF9JTkRFWApmcm9tIC5jb25zdGFudHMgaW1wb3J0IFNFUklBTF9DT01NX01PRFVMRV9JRF9UT19XRUxMX0lEWApmcm9tIC5jb25zdGFudHMgaW1wb3J0IFNFUklBTF9DT01NX05VTV9BTExPV0VEX01JU1NFRF9IQU5EU0hBS0VTCmZyb20gLmNvbnN0YW50cyBpbXBvcnQgU0VSSUFMX0NPTU1fTlVNX0NIQU5ORUxTX1BFUl9TRU5TT1IKZnJvbSAuY29uc3RhbnRzIGltcG9ydCBTRVJJQUxfQ09NTV9OVU1fREFUQV9DSEFOTkVMUwpmcm9tIC5jb25zdGFudHMgaW1wb3J0IFNFUklBTF9DT01NX05VTV9TRU5TT1JTX1BFUl9XRUxMCmZyb20gLmNvbnN0YW50cyBpbXBvcnQgU0VSSUFMX0NPTU1fUEFDS0VUX1RZUEVfSU5ERVgKZnJvbSAuY29uc3RhbnRzIGltcG9ydCBTRVJJQUxfQ09NTV9QTEFURV9FVkVOVF9QQUNLRVRfVFlQRQpmcm9tIC5jb25zdGFudHMgaW1wb3J0IFNFUklBTF9DT01NX1JFQk9PVF9DT01NQU5EX0JZVEUKZnJvbSAuY29uc3RhbnRzIGltcG9ydCBTRVJJQUxfQ09NTV9TRVRf"}}]
["667e6197f0d95a482b906e636c5ea3b4f7f4bd5c-3","667e6197f0d95a482b906e636c5ea3b4f7f4bd5c","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmNsYXNzIHBhcnRpYWw6CgogICAgZGVmIF9fbmV3X18oKmFyZ3MpOgogICAgICAgIGlmIG5vdCBhcmdzOgogICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImRlc2NyaXB0b3IgJ19fbmV3X18nIG9mIHBhcnRpYWwgbmVlZHMgYW4gYXJndW1lbnQiKQogICAgICAgIGlmIGxlbihhcmdzKSA8IDI6CiAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidHlwZSAncGFydGlhbCcgdGFrZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IikKICAgICAgICBjbHMsIGZ1bmMsICpmdW5jYXJncyA9IGFyZ3MKICAgICAgICBpZiBub3QgY2FsbGFibGUoZnVuYyk6CiAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgY2FsbGFibGUiKQogICAgICAgIGFyZ3MgPSB0dXBsZShmdW5jYXJncykKCiAgICAgICAgc2VsZiA9IHN1cGVyKHBhcnRpYWwsIGNscykuX19uZXdfXyhjbHMpCgogICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMKICAgICAgICBzZWxmLmZ1bmNhcmdzID0gZnVuY2FyZ3MKICAgICAgICByZXR1cm4gc2VsZgogICAgCiAgICBkZWYgX19jYWxsX18oKmFyZ3MpOgogICAgICAgIGlmIG5vdCBhcmdzOgogICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImRlc2NyaXB0b3IgJ19fY2FsbF9fJyBvZiBwYXJ0aWFsIG5lZWRzIGFuIGFyZ3VtZW50IikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYsICphcmdzID0gYXJncwogICAgICAgIHJldHVybiBzZWxmLmZ1bmMoKnNlbGYuZnVuY2FyZ3MsICphcmdzKQoKPHxmaW1fZW5kfD4="]
["6ed4a95b129510dadd11faf8494bb85555e09c13-1","6ed4a95b129510dadd11faf8494bb85555e09c13","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojIENvcHlyaWdodCAoYykgMjAxOCwgRE9LT1MgYW5kIENvbnRyaWJ1dG9ycwojIFNlZSBsaWNlbnNlLnR4dApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKCjx8ZmltX2VuZHw+"]
["a36f07c47cfd678734da6f1d461422248b0e0296-4","a36f07c47cfd678734da6f1d461422248b0e0296","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KZnJvbSBGTFRDIGltcG9ydCBGTFRDCmZyb20gZXhjZWxwYXJzZXIgaW1wb3J0IHBhcnNlX2V4Y2VsCmltcG9ydCBzcWxpdGUzCgojIHRvIGJlIGNhbGxlZCBvbmNlIHdoaWxlIHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50CmRlZiBpbml0aWFsaXNlX2RiKCk6CiAgICBjb24gPSBzcWxpdGUzLmNvbm5lY3QoJ2RhdGEvZmxjLmRiJykKICAgIGN1ciA9IGNvbi5jdXJzb3IoKQogICAgY3VyLmV4ZWN1dGUoJycnZHJvcCB0YWJsZSBpZiBleGlzdHMgRkxDJycnKQogICAgY3VyLmV4ZWN1dGUoJycnY3JlYXRlIHRhYmxlIGlmIG5vdCBleGlzdHMgRkxDCiAgICAgICAgICAgICAgIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsCiAgICAgICAgICAgICAgIG5hbWUgVEVYVCBOT1QgTlVMTCwgCiAgICAgICAgICAgICAgIGFyZWEgVEVYVCwgCiAgICAgICAgICAgICAgIGRpc3RyaWN0IFRFWFQgTk9UIE5VTEwsIAogICAgICAgICAgICAgICBhZGRyZXNzIFRFWFQsIAogICAgICAgICAgICAgICB0b3RhbF9ub3JtYWxfYmVkIElOVEVHRVIsIAogICAgICAgICAgICAgICB0b3RhbF9veHlnZW5fYmVkIElOVEVHRVIsIAogICAgICAgICAgICAgICBvY2N1cGllZF9ub3JtYWxfYmVkIElOVEVHRVIsCiAgICAgICAgICAgICAgIG9jY3VwaWVkX294eWdlbl9iZWQgSU5URUdFUiwgCiAgICAgICAgICAgICAgIGxvY2F0aW9uIFRFWFQpJycnKQogICAgbGlzdF9vZl9mbHRjID0gcGFyc2VfZXhjZWwoKQogICAgZm9yIGZsdGMgaW4gbGlzdF9vZl9mbHRjOgogICAgICAgIGN1ci5leGVjdXRlKCcnJyBpbnNlcnQgaW50byBGTEMKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAoJ25hbWUnLCAnYXJlYScsICdkaXN0cmljdCcsICdhZGRyZXNzJywgJ3RvdGFsX25vcm1hbF9iZWQnLCAKICAgICAgICAgICAgICAgICAgICAndG90YWxfb3h5Z2VuX2JlZCcsICdvY2N1cGllZF9ub3JtYWxfYmVkJywgJ29jY3VwaWVkX294eWdlbl9iZWQnCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIHZhbHVlcyAoPywgPywgPywgPywgPywgPywgPywgPykKICAgICAgICAgICAgICAgICAgICAnJycsIChmbHRjLmZsY19uYW1lLCBmbHRjLmFyZWEsIGZsdGMuZGlzdHJpY3QsIGZsdGMuYWRyZXNzLCBmbHRjLkFiZWRzLCBmbHRjLkFveHliZWRzLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBmbHRjLk9iZWRzLCBmbHRjLk9PeWJlZHMpKQogICAgY29uLmNvbW1pdCgpCgpkZWYgcXVlcnlfZm9yX2ZsYyhkaXN0cmljdD1Ob25lKToKICAgIGNvbiA9IHNxbGl0ZTMuY29ubmVjdCgnZGF0YS9mbGMuZGInKQogICAgY29uLnJvd19mYWN0b3J5ID0gc3FsaXRlMy5Sb3cKICAgIGN1ciA9IGNvbi5jdXJzb3IoKQogICAgCiAgICBzcWxfcmVzdWx0ID0gW10KICAgIGlmIChkaXN0cmljdCBpcyBOb25lKToKICAgICAgICBzcWxfcmVzdWx0ID0gY3VyLmV4ZWN1dGUoIlNFTEVDVCAqIEZST00gRkxDIikKICAgIGVsc2U6CiAgICAgICAgc3FsX3Jlc3VsdCA9IGN1ci5leGVjdXRlKCJTRUxFQ1QgKiBGUk9NIEZMQyB3aGVyZSBkaXN0cmljdCA9ID8iLCAoZGlzdHJpY3QsKSkKICAgIGZsdGNfbGlzdCA9IFtdCiAgICBmb3Igcm93IGluIHNxbF9yZXN1bHQ6CiAgICAgICAgZmx0YyA9IEZMVEMocm93WyJpZCJdLCByb3dbImRpc3RyaWN0Il0scm93WyJhcmVhIl0gLHJvd1sibmFtZSJdLCByb3dbImFkZHJlc3MiXSwKICAgICAgICAgICAgIHJvd1sidG90YWxfbm9ybWFsX2JlZCJdLHJvd1sidG90YWxfb3h5Z2VuX2JlZCJdLAogICAgICAgICAgICAgcm93WyJvY2N1cGllZF9ub3JtYWxfYmVkIl0scm93WyJvY2N1cGllZF9veHlnZW5fYmVkIl0gKQo8fGZpbV9ob2xlfD4KICAgIHMgPSBqc29uLmR1bXBzKGZsdGNfbGlzdCkKICAgIHJldHVybiBzCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZmx0Y19saXN0LmFwcGVuZChmbHRjLl9fZGljdF9fKQo8fGZpbV9lbmR8Pg=="]
["c91b8087c0558bf5c6bc466d06b2b527233c961f-1","c91b8087c0558bf5c6bc466d06b2b527233c961f","PHxmaW1fcHJlZml4fD4KZnJvbSBtYXRoIGltcG9ydCBjZWlsCgppbXBvcnQgbnVtcHkgYXMgbnAKCgpkZWYgZm9sbG93X3dhbGwoZnJvbnQsIGxlZnQsIHJpZ2h0KToKICAgICIiIlNpbXBsZSBmb2xsb3cgd2FsbCBjb250cm9sbGVyLiIiIgogICAgY2hhbmdlX2RpcmVjdGlvbiA9IDAKCiAgICBGID0gKDAgPCBmcm9udCA8IDQpCiAgICBMID0gKDAgPCBsZWZ0IDwgNCkKICAgIFIgPSAoMCA8IHJpZ2h0IDwgNCkKCiAgICBpZiAwIDwgZnJvbnQgPCAzOgogICAgICAgIGNoYW5nZV9kaXJlY3Rpb24gPSAtMTAKICAgIGVsaWYgMS4wIDw9IGxlZnQgPD0gMi4wOgogICAgICAgICMgd2UncmUgZ29vZAogICAgICAgIGNoYW5nZV9kaXJlY3Rpb24gPSAwCiAgICBlbGlmIDAgPCBsZWZ0IDwgMS4wOgogICAgICAgIGNoYW5nZV9kaXJlY3Rpb24gPSAtMTAKICAgIGVsaWYgbGVmdCA+IDIuMDoKPHxmaW1faG9sZXw+CiAgICByZXR1cm4gY2hhbmdlX2RpcmVjdGlvbgoKCmRlZiBtb3ZlKHBvc2UsIG51bWJlcl9vZl9zdGVwcywgZGlyZWN0aW9uKToKICAgICIiIk1vdmUgdGhlIHJvYm90IGluIHRoZSB3b3JsZC4KCiAgICBBcmdzOgogICAgICAgIHBvc2U6ICAgICAgICAgICBSb2JvdHMgY3VycmVudCBwb3NlICh4LCB5LCB0aGV0YSkKICAgICAgICBudW1iZXJfb2Zfc3RlcHM6ICAgIE51bWJlciBvZiBzdGVwcyAoaS5lLiBjZWxscykgdG8gbW92ZS4KICAgICAgICBkaXJlY3Rpb246ICAgICAgICAgIERpcmVjdGlvbiBvZiBtb3ZlbWVudAoKICAgIFJldHVybnM6CiAgICAgICAgVGhlIG5ldyBwb3NlIG9mIHRoZSByb2JvdC4KICAgICIiIgoKICAgIHhfciwgeV9yLCB0aGV0YV9yID0gcG9zZQoKICAgIHRoZXRhX3IgKz0gZGlyZWN0aW9uCgogICAgeF9uZXcgPSBjZWlsKG51bWJlcl9vZl9zdGVwcyAqIG5wLmNvcyh0aGV0YV9yKSkgKyB4X3IKICAgIHlfbmV3ID0gY2VpbChudW1iZXJfb2Zfc3RlcHMgKiBucC5zaW4odGhldGFfcikpICsgeV9yCgogICAgcmV0dXJuICh4X25ldywgeV9uZXcsIHRoZXRhX3IpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgY2hhbmdlX2RpcmVjdGlvbiA9IDEwCgo8fGZpbV9lbmR8Pg=="]
["e92346da0582abafc8b06a68833ec919b3eac4e8-1","e92346da0582abafc8b06a68833ec919b3eac4e8","PHxmaW1fcHJlZml4fD4KZnJvbSBldmVudHMuaGFuZGxlcnMuYmFzZSBpbXBvcnQgRXZlbnRIYW5kbGVyCgoKY2xhc3MgQ3JlYXRlQ2xhc3NIYW5kbGVyKEV2ZW50SGFuZGxlcik6CiAgICAiIiJUYWtlIGNhcmUgb2YgYWxsIGV2ZW50cyBhbmQgcHVzaCBldmVudCBmb3IgcHJvZmlsZSB1cGRhdGUgY2hhbmdlcyIiIgoKICAgIGV2ZW50X3R5cGVzID0gWyJjcmVhdGVkX2NsYXNzIiwgXQoKICAgIGRlZiBoYW5kbGUoc2VsZik6CiAgICAgICAgZnJvbSBnYXRla2VlcGVyLnRhc2tzIGltcG9ydCBub3RpZnlfbmV3X2NsYXNzCgogICAgICAgIHNlbGYuYWRkX3RvX2J1ZGRpZXNfbmV3c19mZWVkKCkKICAgICAgICBzY2hvb2xfaWQgPSBzZWxmLmNsZWFuZWRfZXZlbnRbImRhdGEiXVsic2Nob29sX2lkIl0KICAgICAgICBzZWxmLmFkZF90b19zY2hvb2xtYXRlc19uZXdzX2ZlZWQoc2Nob29sX2lkKQogICAgICAgIGNsYXNzX2lkID0gc2VsZi5jbGVhbmVkX2V2ZW50WyJkYXRhIl1bImlkIl0KICAgICAgICBzZWxmLmFkZF90b19jbGFzc19uZXdzX2ZlZWQoY2xhc3NfaWQpCgogICAgICAgIHNlbGYuaW5jcmVtZW50KCJ0b3RhbF9jbGFzc2VzIikKCiAgICAgICAgbm90aWZ5X25ld19jbGFzcyhzZWxmLmNsZWFuZWRfZXZlbnRbImNyZWF0b3IiXSwgc2VsZi5jbGVhbmVkX2V2ZW50KQoKCmNsYXNzIEFkZENsYXNzSGFuZGxlcihFdmVudEhhbmRsZXIpOgogICAgIiIiVGFrZSBjYXJlIG9mIGFsbCBldmVudHMgYW5kIHB1c2ggZXZlbnQgZm9yIGNsYXNzIGFkZHMiIiIKCiAgICBldmVudF90eXBlcyA9IFsiYWRkZWRfY2xhc3MiLCBdCgogICAgZGVmIGhhbmRsZShzZWxmKToKICAgICAgICBzZWxmLmFkZF90b19teV9uZXdzX2ZlZWQoKQoKICAgICAgICAjIE1haW4gZXZlbnQgYWRkcyB0byAvdXNlcnMvbWUvY2xhc3NlcwogICAgICAgIGNsYXNzX2lkID0gc2VsZi5jbGVhbmVkX2V2ZW50WyJkYXRhIl1bImNvdXJzZV9pZCJdCgogICAgICAgIHNlbGYuYWRkX3RvX2NsYXNzX3N0dWRlbnRzKGNsYXNzX2lkKQogICAgICAgIHNlbGYuYWRkX3RvX2NsYXNzX25ld3NfZmVlZChjbGFzc19pZCkKICAgICAgICBzZWxmLmFkZF90b19idWRkaWVzX25ld3NfZmVlZCgpCgoKY2xhc3MgRHJvcENsYXNzSGFuZGxlcihFdmVudEhhbmRsZXIpOgogICAgIiIiVGFrZSBjYXJlIG9mIGFsbCBldmVudHMgYW5kIHB1c2ggZXZlbnQgZm9yIGNsYXNzIGRyb3BzIiIiCgogICAgZXZlbnRfdHlwZXMgPSBbImRyb3BwZWRfY2xhc3MiLCBdCgogICAgZGVmIGhhbmRsZShzZWxmKToKICAgICAgICBjbGFzc19pZCA9IHNlbGYuY2xlYW5lZF9ldmVudFsiZGF0YSJdWyJjb3Vyc2VfaWQiXQogICAgICAgIHNlbGYucmVtb3ZlX2Zyb21fY2xhc3Nfc3R1ZGVudHMoY2xhc3NfaWQpCgogICAgICAgICMgV2UgY291bGQsIGJ1dCBJJ20gbm90IGNvbnZpY2VkIHdlIHNob3VsZCBkbyBhbnl0aGluZyBxdWl0ZSB5ZXQuCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAjIHNlbGYuYWRkX3RvX2NsYXNzX25ld3NfZmVlZCgpCiAgICAgICAgIyBzZWxmLmFkZF90b19idWRkaWVzX25ld3NfZmVlZCgpCiAgICAgICAgcGFzcwo8fGZpbV9lbmR8Pg=="]
["4ebeba53b91b92a4d61b385fbae94e5f31ade7a5-1","4ebeba53b91b92a4d61b385fbae94e5f31ade7a5","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKZGVmIHNheV9oZWxsbygpOgogICAgcHJpbnQoJ0hlbGxvIGZyb20gYSBtb2R1bGUnKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKc2F5X2hlbGxvKCkKPHxmaW1fZW5kfD4="]
["6c0d920744613d93578a19e4230768b450fcdbc2-2","6c0d920744613d93578a19e4230768b450fcdbc2","PHxmaW1fcHJlZml4fD4KZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZQppbXBvcnQganNvbgppbXBvcnQgc2l4Cgpyb21hbl9udW1lcmFsX2NvbnZlcnNpb25zID0gewogICAgImkiOiAxLAogICAgInYiOiA1LAogICAgIngiOiAxMCwKICAgICJsIjogNTAsCiAgICAiYyI6IDEwMCwKICAgICJkIjogNTAwLAogICAgIm0iOiAxMDAwLAogICAgIkkiOiAxLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAiViI6IDUsCiAgICAiWCI6IDEwLAogICAgIkwiOiA1MCwKICAgICJDIjogMTAwLAo8fGZpbV9lbmR8Pg=="]
["6e00e765ee6273e2529da129412537785a36ff3b-1","6e00e765ee6273e2529da129412537785a36ff3b","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBmaW5kX3BhY2thZ2VzLCBzZXR1cAoKd2l0aCBvcGVuKCJSRUFETUUubWQiLCAiciIsIGVuY29kaW5nPSJ1dGYtOCIpIGFzIGZoOgogICAgbG9uZ19kZXNjcmlwdGlvbiA9IGZoLnJlYWQoKQoKd2l0aCBvcGVuKCIuL3JlcXVpcmVtZW50cy50eHQiLCAiciIpIGFzIGY6CiAgICByZXF1aXJlZCA9IGYucmVhZCgpLnNwbGl0bGluZXMoKQoKdmVyc2lvbl9maWxlID0gInJsX2FsZ29yaXRobXMvdmVyc2lvbiIKCgpkZWYgZ2V0X3ZlcnNpb24oKToKICAgIHZlcnNpb24gPSBvcGVuKHZlcnNpb25fZmlsZSwgInIiLCBlbmNvZGluZz0idXRmLTgiKS5yZWFkKCkuc3RyaXAoKQogICAgcmV0dXJuIHZlcnNpb24KCgpzZXR1cCgKICAgIG5hbWU9InJsX2FsZ29yaXRobXMiLAogICAgdmVyc2lvbj1nZXRfdmVyc2lvbigpLAogICAgYXV0aG9yPSJtZWRpcGl4ZWwiLAogICAgYXV0aG9yX2VtYWlsPSJraC5raW1AbWVkaXBpeGVsLmlvIiwKICAgIGRlc2NyaXB0aW9uPSJSZWluZm9yY2VtZW50IExlYXJuaW5nIGFsZ29yaXRobXMgd2hpY2ggYXJlIGJlaW5nIHVzZWQgZm9yIHJlc2VhcmNoIFwKICAgICAgICBhY3Rpdml0aWVzIGF0IE1lZGlwaXhlbC4iLAogICAgbG9uZ19kZXNjcmlwdGlvbj1sb25nX2Rlc2NyaXB0aW9uLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBsb25nX2Rlc2NyaXB0aW9uX2NvbnRlbnRfdHlwZT0idGV4dC9tYXJrZG93biIsCiAgICB1cmw9Imh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpcGl4ZWwvcmxfYWxnb3JpdGhtcy5naXQiLAogICAga2V5d29yZHM9InJlaW5mb3JjZW1lbnQtbGVhcm5pbmcgcHl0aG9uIG1hY2hpbmUgbGVhcm5pbmciLAogICAgcGFja2FnZXM9ZmluZF9wYWNrYWdlcygpLAo8fGZpbV9lbmR8Pg=="]
["b0f28de63424712d260e9391dcda7f900c003c00-1","b0f28de63424712d260e9391dcda7f900c003c00","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKCmZyb20gcGVzdG8ud3MuY29yZS5wZXN0b19mZWF0dXJlIGltcG9ydCBQZXN0b0ZlYXR1cmUKCmxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgUGF5bG9hZERlYnVnKFBlc3RvRmVhdHVyZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgc2NoZW1hOiBkaWN0KToKICAgICAgICBzZWxmLnNjaGVtYSA9IHNjaGVtYQo8fGZpbV9lbmR8Pg=="]
["95a9f29463e7b77f5a3ed8db2652d510d59acfa9-1","95a9f29463e7b77f5a3ed8db2652d510d59acfa9","PHxmaW1fcHJlZml4fD4KIyFmbGFzay9iaW4vcHl0aG9uCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBiaV91aSBpbXBvcnQgYXBwCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgYXBwLnJ1bigpCjx8ZmltX2VuZHw+"]
["a006bc9b15f317cc4ceb88474f3d35b885b617cc-1","a006bc9b15f317cc4ceb88474f3d35b885b617cc","PHxmaW1fcHJlZml4fD4KZnJvbSAuYmFja2VuZCBpbXBvcnQgSW50ZXJhY3RpdmVCYWNrZW5kCgppbXBvcnQgbnVtcHkgYXMgbnAKCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IHBsb3RseS5ncmFwaF9vYmpzIGFzIGdvCgoKCmNsYXNzIEludGVyYWN0aXZlQmFja2VuZFBsb3RseShJbnRlcmFjdGl2ZUJhY2tlbmQpOgogICAgIiIiCiAgICBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW50ZXJhY3RpdmUgcGxvdHRpbmcgYmFja2VuZCBmb3IgUGxvdGx5LgogICAgIiIiCiAgICAKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIG1ha2Vfc2NhdHRlcmdsX21hcChjbHMsIHhzLCB5cyk6CiAgICAgICAgIiIiCiAgICAgICAgTWFrZXMgYSBQbG90bHkgU2NhdHRlcmdsIG9iamVjdCBmb3IgY29hc3RsaW5lcyBhbmQgY291bnRyeSBib3JkZXJzLgoKICAgICAgICBQYXJhbWV0ZXJzCiAgICAgICAgLS0tLS0tLS0tLQogICAgICAgIHhzLCB5cyA6IGxpc3Qgb2YgbGlzdHMKICAgICAgICAgICAgTGlzdHMgb2YgbGlzdHMgY29udGFpbiBzZXBhcmF0ZWQgWC0gb3IgWS1jb29yZGluYXRlcyBvZiBwYXRocy4KCiAgICAgICAgUmV0dXJucwogICAgICAgIC0tLS0tLS0KICAgICAgICBsaXN0CiAgICAgICAgICAgIExpc3QgY29udGFpbnMgYSBQbG90bHkgU2NhdHRlcmdsIG9iamVjdHMuIAogICAgICAgICIiIgogICAgICAgIAogICAgICAgIHRyYWNlcyA9IFtdCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHhzKSk6CiAgICAgICAgICAgIHRyYWNlcy5hcHBlbmQoZ28uU2NhdHRlcmdsKHg9eHNbaV0sIHk9eXNbaV0sIG1vZGU9J2xpbmVzJywgbGluZT1nby5zY2F0dGVyZ2wuTGluZShjb2xvcj0iYmxhY2siLCB3aWR0aD0wLjcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSdtYXAnLCBzaG93bGVnZW5kPUZhbHNlLCBvcGFjaXR5PTAuNykpCiAgICAgICAgcmV0dXJuIHRyYWNlcwogICAgCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIEBjbGFzc21ldGhvZAogICAgZGVmIG1ha2VfZmlsbGVkX2NvbnRvdXIoY2xzLCB4LCB5LCB6LCB2YXJpYWJsZV9uYW1lLCBjb2xvcm1hcCwgeF9jb2xvcmJhcik6CiAgICAgICAgIiIiCiAgICAgICAgQ3JlYXRlcyBmaWxsZWQgY29udG91cnMgdXNpbmcgc3BlY2lhbGl6ZWQgUGxvdGx5IGZ1bmN0aW9uLgo8fGZpbV9lbmR8Pg=="]
["dd7e2f3f355ed4988dfb6d34a9d6c38b5675359d-4","dd7e2f3f355ed4988dfb6d34a9d6c38b5675359d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmZyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgTW9jawpmcm9tIHVuaXR0ZXN0Lm1vY2sgaW1wb3J0IGNhbGwKZnJvbSB2bSBpbXBvcnQgbGlidmlydGRpc2tfYmFja2VuZApmcm9tIHNoZWxsIGltcG9ydCBsb2NhbAoKIyBOT1RFIFRIRVNFIFRFU1RTIEFSRSBOT1QgRklOSVNIRUQgQU5EIE5PVCBQQVJUSUNVTEFSTFkgVVNFRlVMIFlFVAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKY2xhc3MgTGliVmlydERpc2tCYWNrRW5kKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiB0ZXN0X2Rpc2tDcmVhdGUoc2VsZik6Cjx8ZmltX2VuZHw+"]
["dd94eaa46ae56e56d4fc2e3aa8f35c0a841ab9cd-3","dd94eaa46ae56e56d4fc2e3aa8f35c0a841ab9cd","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuIGltcG9ydCB1c2VyX21vZGVscwo8fGZpbV9lbmR8Pg=="]
["9578061f3accc77b74b3d00746c310f7730b99e3-1","9578061f3accc77b74b3d00746c310f7730b99e3","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuIGltcG9ydCBtZW1laW5pdAo8fGZpbV9lbmR8Pg=="]
["660c5ab29f7b971a069e195f43a54cad0a057642-4","660c5ab29f7b971a069e195f43a54cad0a057642","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgcHByaW50CmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgb3MKaW1wb3J0IGdsb2IKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKCmZyb20gLiBpbXBvcnQgcGxvdF91dGlscwo8fGZpbV9lbmR8Pg=="]
["9ff68f28ed966a50a8ffb2d77872b99c40aa9fa2-3","9ff68f28ed966a50a8ffb2d77872b99c40aa9fa2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gZGphbmdvIGltcG9ydCBmb3JtcwoKPHxmaW1faG9sZXw+CiAgICBpbml0aWFsX3RleHQgPSAn5b2T5YmNJwogICAgd2lkdGggPSBOb25lCiAgICBoZWlnaHQgPSBOb25lCiAgICBzaXplID0gTm9uZQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhdHRycz1Ob25lKToKICAgICAgICAiIiIKICAgICAgICBzaXplOiBsYXJnZXxtZWRpdW18dGh1bWJuYWlsfE5vbmUob3JpZ2luYWwpCiAgICAgICAgIiIiCiAgICAgICAgaWYgYXR0cnM6CiAgICAgICAgICAgIHNlbGYud2lkdGggPSBhdHRycy5wb3AoJ3dpZHRoJywgTm9uZSkKICAgICAgICAgICAgc2VsZi5oZWlnaHQgPSBhdHRycy5wb3AoJ2hlaWdodCcsIE5vbmUpCiAgICAgICAgICAgIHNlbGYuc2l6ZSA9IGF0dHJzLnBvcCgnc2l6ZScsIE5vbmUpCiAgICAgICAgc3VwZXIoVGh1bWJuYWlsSW1hZ2VJbnB1dCwgc2VsZikuX19pbml0X18oYXR0cnMpCgogICAgZGVmIGdldF9jb250ZXh0KHNlbGYsIG5hbWUsIHZhbHVlLCBhdHRycyk6CiAgICAgICAgb3JpZ2luYWxfdmFsdWUgPSB2YWx1ZQogICAgICAgIGlmIHZhbHVlOgogICAgICAgICAgICBpZiBzZWxmLnNpemUgPT0gJ3RodW1ibmFpbCc6CiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRodW1ibmFpbAogICAgICAgICAgICBlbGlmIHNlbGYuc2l6ZSA9PSAnbWVkaXVtJzoKICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUubWVkaXVtCiAgICAgICAgICAgIGVsaWYgc2VsZi5zaXplID09ICdsYXJnZSc6CiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmxhcmdlCgogICAgICAgIGNvbnRleHQgPSBzdXBlcihUaHVtYm5haWxJbWFnZUlucHV0LCBzZWxmKS5nZXRfY29udGV4dChuYW1lLCB2YWx1ZSwgYXR0cnMpCiAgICAgICAgY29udGV4dFsnd2lkZ2V0J10udXBkYXRlKHsKICAgICAgICAgICAgJ3dpZHRoJzogc2VsZi53aWR0aCwKICAgICAgICAgICAgJ2hlaWdodCc6IHNlbGYuaGVpZ2h0LAogICAgICAgICAgICAnb3JpZ2luYWxfdmFsdWUnOiBvcmlnaW5hbF92YWx1ZSwKICAgICAgICAgICAgJ2Rvd25sb2FkX2ZpbGVuYW1lJzogc2VsZi5nZXRfZG93bmxvYWRfZmlsZW5hbWUob3JpZ2luYWxfdmFsdWUpCiAgICAgICAgfSkKICAgICAgICByZXR1cm4gY29udGV4dAoKICAgIGRlZiBnZXRfZG93bmxvYWRfZmlsZW5hbWUoc2VsZiwgdmFsdWUpOgogICAgICAgIGlmIHZhbHVlIGFuZCB2YWx1ZS5wYXRoOgogICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodmFsdWUucGF0aCkKICAgICAgICAgICAgcmV0dXJuIGZpbGVuYW1lCiAgICAgICAgcmV0dXJuIE5vbmUKCgpjbGFzcyBJRFRodW1ibmFpbEltYWdlSW5wdXQoVGh1bWJuYWlsSW1hZ2VJbnB1dCk6CiAgICBkZWYgZ2V0X2Rvd25sb2FkX2ZpbGVuYW1lKHNlbGYsIHZhbHVlKToKICAgICAgICBpZiB2YWx1ZToKICAgICAgICAgICAgc2lkZSA9ICfmraPpnaInIGlmICdmcm9udCcgaW4gdmFsdWUuZmllbGQubmFtZSBlbHNlICflj43pnaInCiAgICAgICAgICAgIGZpbGVuYW1lLCBmaWxlX2V4dCA9IG9zLnBhdGguc3BsaXRleHQodmFsdWUubmFtZSkKICAgICAgICAgICAgcmV0dXJuICclc18lcyVzJyAlICh2YWx1ZS5pbnN0YW5jZS5uYW1lLCBzaWRlLCBmaWxlX2V4dCkKICAgICAgICByZXR1cm4gc3VwZXIoSURUaHVtYm5haWxJbWFnZUlucHV0LCBzZWxmKS5nZXRfZG93bmxvYWRfZmlsZW5hbWUodmFsdWUpCjx8ZmltX3N1ZmZpeHw+CgpjbGFzcyBUaHVtYm5haWxJbWFnZUlucHV0KGZvcm1zLkNsZWFyYWJsZUZpbGVJbnB1dCk6CiAgICB0ZW1wbGF0ZV9uYW1lID0gJ3dpZGdldHMvdGh1bWJuYWlsX2ltYWdlX2ZpbGVfaW5wdXQuaHRtbCcKICAgIGlucHV0X3RleHQgPSAn5pu05o2iJwo8fGZpbV9lbmR8Pg=="]
["d672322371f76800b0cce9c233dcddd15421c56c-5","d672322371f76800b0cce9c233dcddd15421c56c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCmZyb20gcHByaW50IGltcG9ydCBwcHJpbnQKCmZyb20gd293YXBpIGltcG9ydCBXb3dBcGkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCd3b3dhcGknKQpsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQpoYW5kbGVyID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKPHxmaW1fZW5kfD4="]
["2513acb4c3e2fcb18c3ece0d13e5cccbb9557c5e-5","2513acb4c3e2fcb18c3ece0d13e5cccbb9557c5e","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiIiIgpEb3dubG9hZCBwb3N0cyBmcm9tIG9uZSBvciBzZXZlcmFsIHVzZXJzIGFuZCBleHBvcnQgaXQgaW4geGxzeCBvciBjc3YuCiIiIgoKaW1wb3J0IHByYXcKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCB0aW1lCmltcG9ydCBsb2dnaW5nCmltcG9ydCBwYW5kYXMgYXMgcGQKZnJvbSB0cWRtIGltcG9ydCB0cWRtCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQp0ZW1wc19kZWJ1dCA9IHRpbWUudGltZSgpCgoKZGVmIG1haW4oYXJncyk6CiAgICBmb2xkZXIgPSAiVXNlciIKICAgIFBhdGgoZm9sZGVyKS5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpCgogICAgaWYgYXJncy51c2VybmFtZToKICAgICAgICB1c2VybmFtZSA9IFt4LnN0cmlwKCkgZm9yIHggaW4gYXJncy51c2VybmFtZS5zcGxpdCgiLCIpXQogICAgZWxzZToKICAgICAgICBsb2dnZXIuZXJyb3IoIlVzZSAtdSB0byBzZXQgdGhlIHVzZXJuYW1lIikKICAgICAgICBleGl0KCkKCiAgICBmb3IgaSBpbiB0cWRtKHVzZXJuYW1lKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIGRmID0gZmV0Y2hfcG9zdHMoaSkKICAgICAgICAgICAgZGZbIkRhdGUiXSA9IHBkLnRvX2RhdGV0aW1lKGRmWyJEYXRlIl0sIHVuaXQ9InMiKQogICAgICAgICAgICBmaWxlbmFtZSA9IGYie2ZvbGRlcn0vcG9zdHNfe2ludCh0aW1lLnRpbWUoKSl9X3tpfSIKICAgICAgICAgICAgaWYgYXJncy5leHBvcnRfZm9ybWF0ID09ICJ4bHN4IjoKICAgICAgICAgICAgICAgIHdyaXRlciA9IHBkLkV4Y2VsV3JpdGVyKAogICAgICAgICAgICAgICAgICAgIGYie2ZpbGVuYW1lfS54bHN4IiwKICAgICAgICAgICAgICAgICAgICBlbmdpbmU9Inhsc3h3cml0ZXIiLAogICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9eyJzdHJpbmdzX3RvX3VybHMiOiBGYWxzZX0sCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICBkZi50b19leGNlbCh3cml0ZXIsIHNoZWV0X25hbWU9IlNoZWV0MSIpCiAgICAgICAgICAgICAgICB3cml0ZXIuc2F2ZSgpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBkZi50b19jc3YoZiJ7ZmlsZW5hbWV9LmNzdiIsIGluZGV4PUZhbHNlLCBzZXA9Ilx0IikKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRG9lcyB0aGF0IHVzZXIgaGF2ZSBtYWRlIGFueSBwb3N0ID8gQ29tcGxldGUgZXJyb3IgOiAlcyIsIGUpCgogICAgbG9nZ2VyLmluZm8oIlJ1bnRpbWUgOiAlLjJmIHNlY29uZHMiICUgKHRpbWUudGltZSgpIC0gdGVtcHNfZGVidXQpKQoKCmRlZiBmZXRjaF9wb3N0cyh1c2VybmFtZSk6CiAgICByZWRkaXQgPSByZWRkaXRjb25uZWN0KCJib3QiKQogICAgcG9zdHMgPSBbXQogICAgdXNlciA9IHJlZGRpdC5yZWRkaXRvcih1c2VybmFtZSkKICAgIGZvciBpbmRleCwgc3VibWlzc2lvbiBpbiBlbnVtZXJhdGUodXNlci5zdWJtaXNzaW9ucy5uZXcobGltaXQ9Tm9uZSksIDEpOgogICAgICAgIHBvc3RzLmFwcGVuZCgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIklEIjogc3VibWlzc2lvbi5uYW1lLAogICAgICAgICAgICAgICAgIlRpdGxlIjogc3VibWlzc2lvbi50aXRsZSwKICAgICAgICAgICAgICAgICJVUkwiOiBzdWJtaXNzaW9uLnVybCwKICAgICAgICAgICAgICAgICJDb21tZW50cyI6IHN1Ym1pc3Npb24ubnVtX2NvbW1lbnRzLAogICAgICAgICAgICAgICAgIlNjb3JlIjogc3VibWlzc2lvbi5zY29yZSwKICAgICAgICAgICAgICAgICJSYXRpbyI6IHN1Ym1pc3Npb24udXB2b3RlX3JhdGlvLAogICAgICAgICAgICAgICAgIkF1dGhvciI6IHN0cihzdWJtaXNzaW9uLmF1dGhvciksCiAgICAgICAgICAgICAgICAiQXV0aG9yIENTUyBGbGFpciI6IHN0cihzdWJtaXNzaW9uLmF1dGhvcl9mbGFpcl9jc3NfY2xhc3MpLAogICAgICAgICAgICAgICAgIkF1dGhvciBUZXh0IEZsYWlyIjogc3RyKHN1Ym1pc3Npb24uYXV0aG9yX2ZsYWlyX3RleHQpLAogICAgICAgICAgICAgICAgIlBlcm1hbGluayI6IGYiaHR0cHM6Ly9yZWRkaXQuY29te3N1Ym1pc3Npb24ucGVybWFsaW5rfSIsCiAgICAgICAgICAgICAgICAiRGF0ZSI6IHN1Ym1pc3Npb24uY3JlYXRlZF91dGMsCiAgICAgICAgICAgICAgICAiRmxhaXIiOiBzdHIoc3VibWlzc2lvbi5saW5rX2ZsYWlyX3RleHQpLAogICAgICAgICAgICAgICAgIlRleHQiOiBzdHIoc3VibWlzc2lvbi5zZWxmdGV4dCksCiAgICAgICAgICAgICAgICAiRG9tYWluIjogc3VibWlzc2lvbi5kb21haW4sCiAgICAgICAgICAgICAgICAiR2lsZGVkIjogc3VibWlzc2lvbi5naWxkZWQsCiAgICAgICAgICAgICAgICAiSGlkZGVuIjogc3VibWlzc2lvbi5oaWRkZW4sCiAgICAgICAgICAgICAgICAiQXJjaGl2ZWQiOiBzdWJtaXNzaW9uLmFyY2hpdmVkLAogICAgICAgICAgICAgICAgIkNhbiBHaWxkIjogc3VibWlzc2lvbi5jYW5fZ2lsZCwKICAgICAgICAgICAgICAgICJDYW4gQ3Jvc3Nwb3N0Ijogc3VibWlzc2lvbi5pc19jcm9zc3Bvc3RhYmxlLAogICAgICAgICAgICAgICAgIlN1YnJlZGRpdCI6IHN1Ym1pc3Npb24uc3VicmVkZGl0LmRpc3BsYXlfbmFtZSwKICAgICAgICAgICAgfQogICAgICAgICkKICAgIGRmID0gcGQuRGF0YUZyYW1lKHBvc3RzKQogICAgcmV0dXJuIGRmCgoKZGVmIHJlZGRpdGNvbm5lY3QoYm90KToKICAgIHVzZXJfYWdlbnQgPSAicHl0aG9uOnNjcmlwdDpkb3dubG9hZF9wb3N0c191c2VyIgoKICAgIHJlZGRpdCA9IHByYXcuUmVkZGl0KGJvdCwgdXNlcl9hZ2VudD11c2VyX2FnZW50KQogICAgcmV0dXJuIHJlZGRpdAoKCmRlZiBwYXJzZV9hcmdzKCk6CiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKICAgICAgICBkZXNjcmlwdGlvbj0iRG93bmxvYWQgYWxsIHRoZSBwb3N0cyBvZiBvbmUgb3Igc2V2ZXJhbCB1c2VycyIKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tZGVidWciLAogICAgICAgIGhlbHA9IkRpc3BsYXkgZGVidWdnaW5nIGluZm9ybWF0aW9uIiwKICAgICAgICBhY3Rpb249InN0b3JlX2NvbnN0IiwKICAgICAgICBkZXN0PSJsb2dsZXZlbCIsCiAgICAgICAgY29uc3Q9bG9nZ2luZy5ERUJVRywKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGRlZmF1bHQ9bG9nZ2luZy5JTkZPLAo8fGZpbV9lbmR8Pg=="]
["2880605fbf15c0e681b76653e076ec6988392636-1","2880605fbf15c0e681b76653e076ec6988392636","PHxmaW1fcHJlZml4fD4KZnJvbSBmYWN0b3JpemF0aW9uLm1hdHJpeHRvb2xzIGltcG9ydCBNYXR0b29scwpmcm9tIGZhY3Rvcml6YXRpb24ucXJfZmFjdG9yaXphdGlvbiBpbXBvcnQgaG91c2Vob2xkZXIKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBjb3B5CgoKY2xhc3MgVVJWKE1hdHRvb2xzKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXQpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18obWF0KQoKICAgIGRlZiBVUlZfZmFjdG9yaXphdGlvbihzZWxmKToKICAgICAgICAnJycKICAgICAgICBGb3IgdGhlIFVSViBmYWN0b3JpemF0aW9uIG9mIGFueSBtYXRyaXgKCjx8ZmltX2hvbGV8PgogICAgICAgID4+PmEgPSBucC5hcnJheShbWzQsOCwxMiwtOF0sWzIsMywyLDFdLFstMywtMSwxLC00XV0pCiAgICAgICAgPj4+dGVzdF9vYmplY3QgPSBNYXRyaXgoYSkKICAgICAgICA+Pj50ZXN0X29iamVjdC5VUlZfZmFjdG9yaXphdGlvbigpCgogICAgICAgIGFycmF5KFtbIDAuOTczNzI4OTksICAwLjIwNDYyNDY2LCAgMC4wMjk0Mjk3OSwgLTAuMDk1NDY5ODRdLAogICAgICAgIFstMC4xODI1NzQxOSwgIDAuOTYzNjMxNCAsIC0wLjAzOTI3MTU5LCAgMC4xOTExNTE1OV0sCiAgICAgICAgWyAwLjA2MDg1ODA2LCAtMC4wNjQyODc3NywgLTAuOTc5NDk0NjgsICAwLjE4MDk3OTQ1XSwKICAgICAgICBbIDAuMTIxNzE2MTIsIC0wLjE1OTQwNjI2LCAgMC4xOTU0MDE2NywgIDAuOTU5OTk2MzZdXSksCiAgICAgICAgIGFycmF5KFtbIDEuMzU5MTg2MjNlKzAxLCAtMi43MDEwMDYxM2UtMTYsICA5LjMwNDA5NTEwZS0xNiwKICAgICAgICAgICAgICAgICAgNy45OTQ0MDgxMmUtMTZdLAogICAgICAgICAgICAgICAgWyAxLjY3NDg2Mjc1ZSswMSwgIDcuNDU2OTc0NjdlKzAwLCAtMS43MDA0ODA3NGUtMTcsCiAgICAgICAgICAgICAgICAgLTEuMDk3MTIyOTdlLTE2XSwKICAgICAgICAgICAgICAgIFsgNi4zNjY2ODkxMGUrMDAsICA0LjI5MDA0NTYyZSswMCwgIDIuNTMzNDg4NTRlKzAwLAogICAgICAgICAgICAgICAgIC03LjIxNjQ0OTY2ZS0xNl0sCiAgICAgICAgICAgICAgICBbLTMuNjE5MjExODFlLTAxLCAtNi4xMDUyMjE3N2UtMDEsIC0xLjUwMTYyMTY4ZS0wMiwKICAgICAgICAgICAgICAgICAtNS41MDE0NzQ3MGUtMDFdXSksCiAgICAgICAgIGFycmF5KFtbIDAuMzAyMjMzNzMsICAwLjUwNDE3MDYzLCAgMC43MDE0ODA3NSwgLTAuNDAyOTc4MyBdLAogICAgICAgICAgICAgICAgWy0wLjY3ODgyNzU4LCAtMC4yNjI0NTYzOCwgIDAuMDkwNTk0NTYsIC0wLjY3OTc4MTEzXSwKICAgICAgICAgICAgICAgIFsgMC4zODk5NjU1ICwgLTAuODIyNTYwNTksICAwLjQxMzU3MTU3LCAtMC4wMTY3MTk2OV0sCiAgICAgICAgICAgICAgICBbIDAuNTQzODUxODEsIC0wLjAxNzk2Mzk5LCAtMC41NzMzMDI2NiwgLTAuNjEyNTU3MzldXSkKCiAgICAgICAgU2VlIGFsc2UKICAgICAgICA9PT09PT09PQoKICAgICAgICBVUlYoTWF0dG9vbHMpCiAgICAgICAgJycnCiAgICAgICAgcmVzdWx0X21hdCA9IGNvcHkuZGVlcGNvcHkoc2VsZi5tYXQpCiAgICAgICAgUCwgUjEgPSBob3VzZWhvbGRlcihyZXN1bHRfbWF0KQogICAgICAgIHIgPSBzZWxmLnJhbmsoKQogICAgICAgIEIgPSBSMVs6ciwgOl0KICAgICAgICBRLCBSMiA9IGhvdXNlaG9sZGVyKEIuVCkKICAgICAgICBUID0gUjJbOnIsIDpyXQogICAgICAgIFIgPSBucC56ZXJvcyhyZXN1bHRfbWF0LnNoYXBlKQogICAgICAgIFJbOnIsIDpyXSA9IFQuVAogICAgICAgIHJldHVybiBQLlQsIFIsIFEKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgcGFzcwo8fGZpbV9zdWZmaXh8PgogICAgICAgIEV4YW1wbGUKICAgICAgICA9PT09PT09PQogICAgICAgID4+PmZyb20gZmFjdG9yaXphdGlvbiBpbXBvcnQgTWF0cml4CiAgICAgICAgPj4+aW1wb3J0IG51bXB5IGFzIG5wCjx8ZmltX2VuZHw+"]
["c29b722f6a3427be61bbbdbc713758d3240392d2-1","c29b722f6a3427be61bbbdbc713758d3240392d2","PHxmaW1fcHJlZml4fD4KIyBUaGlzIFNvZnR3YXJlIChEaW9wdHJhKSBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhcyBhIHB1YmxpYyBzZXJ2aWNlIGJ5IHRoZQojIE5hdGlvbmFsIEluc3RpdHV0ZSBvZiBTdGFuZGFyZHMgYW5kIFRlY2hub2xvZ3kgKE5JU1QpLCBhbiBBZ2VuY3kgb2YgdGhlIFVuaXRlZAojIFN0YXRlcyBEZXBhcnRtZW50IG9mIENvbW1lcmNlLiBUaGlzIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQgaW4gcGFydCBieSBlbXBsb3llZXMgb2YKIyBOSVNUIGFuZCBpbiBwYXJ0IGJ5IE5JU1QgY29udHJhY3RvcnMuIENvcHlyaWdodCBpbiBwb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIHRoYXQKIyB3ZXJlIGRldmVsb3BlZCBieSBOSVNUIGNvbnRyYWN0b3JzIGhhcyBiZWVuIGxpY2Vuc2VkIG9yIGFzc2lnbmVkIHRvIE5JU1QuIFB1cnN1YW50CiMgdG8gVGl0bGUgMTcgVW5pdGVkIFN0YXRlcyBDb2RlIFNlY3Rpb24gMTA1LCB3b3JrcyBvZiBOSVNUIGVtcGxveWVlcyBhcmUgbm90CiMgc3ViamVjdCB0byBjb3B5cmlnaHQgcHJvdGVjdGlvbiBpbiB0aGUgVW5pdGVkIFN0YXRlcy4gSG93ZXZlciwgTklTVCBtYXkgaG9sZAo8fGZpbV9ob2xlfD4KIyBsaWNlbnNlIChDQyBCWSA0LjApLiBUaGUgZGlzY2xhaW1lcnMgb2YgdGhlIENDIEJZIDQuMCBsaWNlbnNlIGFwcGx5IHRvIGFsbCBwYXJ0cwojIG9mIHRoZSBzb2Z0d2FyZSBkZXZlbG9wZWQgb3IgbGljZW5zZWQgYnkgTklTVC4KIwojIEFDQ0VTUyBUSEUgRlVMTCBDQyBCWSA0LjAgTElDRU5TRSBIRVJFOgojIGh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS80LjAvbGVnYWxjb2RlCiIiIkEgdGFzayBwbHVnaW4gbW9kdWxlIGZvciBtYW5hZ2luZyByYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFubm90YXRpb25zCgpmcm9tIHR5cGluZyBpbXBvcnQgVHVwbGUKCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgc3RydWN0bG9nCmZyb20gbnVtcHkucmFuZG9tLl9nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciBhcyBSTkdlbmVyYXRvcgpmcm9tIHN0cnVjdGxvZy5zdGRsaWIgaW1wb3J0IEJvdW5kTG9nZ2VyCgpmcm9tIG1pdHJlLnNlY3VyaW5nYWkgaW1wb3J0IHB5cGx1Z3MKCkxPR0dFUjogQm91bmRMb2dnZXIgPSBzdHJ1Y3Rsb2cuc3RkbGliLmdldF9sb2dnZXIoKQoKCkBweXBsdWdzLnJlZ2lzdGVyCkBweXBsdWdzLnRhc2tfbm91dCgyKQpkZWYgaW5pdF9ybmcoc2VlZDogaW50ID0gLTEpIC0+IFR1cGxlW2ludCwgUk5HZW5lcmF0b3JdOgogICAgIiIiQ29uc3RydWN0cyBhIG5ldyByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KCiAgICBBcmdzOgogICAgICAgIHNlZWQ6IEEgc2VlZCB0byBpbml0aWFsaXplIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4gSWYgdGhlIHZhbHVlIGlzIGxlc3MKICAgICAgICAgICAgdGhhbiB6ZXJvLCB0aGVuIHRoZSBzZWVkIGlzIGdlbmVyYXRlZCBieSBwdWxsaW5nIGZyZXNoLCB1bnByZWRpY3RhYmxlCiAgICAgICAgICAgIGVudHJvcHkgZnJvbSB0aGUgT1MuIFRoZSBkZWZhdWx0IGlzIGAtMWAuCgogICAgUmV0dXJuczoKICAgICAgICBBIHR1cGxlIGNvbnRhaW5pbmcgdGhlIHNlZWQgYW5kIHRoZSBpbml0aWFsaXplZCByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4gSWYgYQogICAgICAgIGBzZWVkIDwgMGAgd2FzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCwgdGhlbiB0aGUgc2VlZCBnZW5lcmF0ZWQgYnkgdGhlIE9TIHdpbGwgYmUKICAgICAgICByZXR1cm5lZC4KCiAgICBTZWUgQWxzbzoKICAgICAgICAtIDpweTpmdW5jOmBudW1weS5yYW5kb20uZGVmYXVsdF9ybmdgCiAgICAiIiIKICAgIHJuZyA9IG5wLnJhbmRvbS5kZWZhdWx0X3JuZyhzZWVkIGlmIHNlZWQgPj0gMCBlbHNlIE5vbmUpCgogICAgaWYgc2VlZCA8IDA6CiAgICAgICAgc2VlZCA9IHJuZy5iaXRfZ2VuZXJhdG9yLl9zZWVkX3NlcS5lbnRyb3B5CgogICAgcmV0dXJuIGludChzZWVkKSwgcm5nCjx8ZmltX3N1ZmZpeHw+CiMgaW50ZXJuYXRpb25hbCBjb3B5cmlnaHQgaW4gc29mdHdhcmUgY3JlYXRlZCBieSBpdHMgZW1wbG95ZWVzIGFuZCBkb21lc3RpYwojIGNvcHlyaWdodCAob3IgbGljZW5zaW5nIHJpZ2h0cykgaW4gcG9ydGlvbnMgb2Ygc29mdHdhcmUgdGhhdCB3ZXJlIGFzc2lnbmVkIG9yCiMgbGljZW5zZWQgdG8gTklTVC4gVG8gdGhlIGV4dGVudCB0aGF0IE5JU1QgaG9sZHMgY29weXJpZ2h0IGluIHRoaXMgc29mdHdhcmUsIGl0IGlzCiMgYmVpbmcgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gNC4wIEludGVybmF0aW9uYWwKPHxmaW1fZW5kfD4="]
["b0f04703ed9778d14f04c9461f15bd656c65d0fd-1","b0f04703ed9778d14f04c9461f15bd656c65d0fd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzeXMKaW1wb3J0IHdnZXQKaW1wb3J0IHdpbnJlZwppbXBvcnQgYXJncGFyc2UKaW1wb3J0IHRlbXBmaWxlCmltcG9ydCBzdWJwcm9jZXNzCmZyb20gemlwZmlsZSBpbXBvcnQgWmlwRmlsZQoKClhWTV9VUkwgPSAiaHR0cHM6Ly9uaWdodGx5Lm1vZHh2bS5jb20vZG93bmxvYWQvbWFzdGVyL3h2bV9sYXRlc3QuemlwIgpTRVRUSU5HU19GSUxFID0gInNldHRpbmdzLmNmZyIKRExfRFNUID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpClRISVNfU0NSSVBUX0RJUiA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkKCgpkZWYgZXhpdChtc2csIGV4PU5vbmUpOgogICAgcHJpbnQobXNnKQogICAgaWYgZXg6CiAgICAgICAgcHJpbnQoZXgpCiAgICBzeXMuZXhpdCgxKQoKCmRlZiBkb3dubG9hZF9maWxlKHVybCwgZHN0KToKICAgIHByaW50KGYiRG93bmxvYWRpbmcge3VybH0gdG8ge2RzdH0gLi4uIikKICAgIHRyeToKICAgICAgICBmaWxlX3BhdGggPSB3Z2V0LmRvd25sb2FkKHVybCwgZHN0KQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleDoKICAgICAgICBleGl0KCJGYWlsZWQgdG8gZG93bmxvYWQhIiwgZXgpCiAgICBlbHNlOgogICAgICAgIHByaW50KCJEb3dubG9hZGluZyBPSyEiKQogICAgICAgIHJldHVybiBmaWxlX3BhdGgKCgpkZWYgZ2V0X3dvdF9pbnN0YWxsX3BhdGgoKToKICAgIHNldHRpbmdzX3BhdGggPSBvcy5wYXRoLmpvaW4oVEhJU19TQ1JJUFRfRElSLCBTRVRUSU5HU19GSUxFKQoKICAgIHRyeToKICAgICAgICB3aXRoIG9wZW4oc2V0dGluZ3NfcGF0aCwgInIiKSBhcyBmaWxlOgogICAgICAgICAgICBwcmludCgiU2V0dGluZ3MgZmlsZSBmb3VuZCwgcmVhZGluZyBXb1QgcGF0aC4uLiIpCiAgICAgICAgICAgIGRhdGEgPSBmaWxlLnJlYWRsaW5lcygpCiAgICAgICAgICAgIHJldHVybiBkYXRhWzBdCiAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CiAgICAgICAgcHJpbnQoIlNldHRpbmdzIGZpbGUgbm90IGZvdW5kLiBTZWFyY2hpbmcgV29UIHBhdGggaW4gUmVnaXN0cnkuLi4iKQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleDoKICAgICAgICBleGl0KCJTZXR0aW5ncyBmaWxlIHJlYWQgZmFpbGVkISIsIGV4KQoKICAgIHRyeToKICAgICAgICBrZXkgPSB3aW5yZWcuT3BlbktleSh3aW5yZWcuSEtFWV9DVVJSRU5UX1VTRVIsIHIiU29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXFdPVC5FVS5QUk9EVUNUSU9OIikKPHxmaW1faG9sZXw+CgogICAgICAgIHByaW50KGYiV29UIHBhdGggZm91bmQgaW4gUmVnaXN0cnksIHNhdmluZyB0bzoge3NldHRpbmdzX3BhdGh9IikKICAgICAgICByZXR1cm4gd290X3BhdGgKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6CiAgICAgICAgZXhpdCgiUmVnaXN0cnkgc2VhcmNoaW5nIGZhaWxlZCEiLCBleCkKCgpkZWYgZXh0cmFjdF94dm0oc3JjLCBkc3QpOgogICAgdHJ5OgogICAgICAgIHByaW50KGYiRXh0cmFjdGluZyB4dm0gdG86IHtkc3R9Li4uIikKICAgICAgICB3aXRoIFppcEZpbGUoc3JjLCAiciIpIGFzIGFyY2hpdmU6CiAgICAgICAgICAgIGFyY2hpdmUuZXh0cmFjdGFsbChkc3QpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgogICAgICAgIGV4aXQoIkV4dHJhY3RpbmcgZmFpbGVkISIsIGV4KQoKCmRlZiBjbGVhbnVwKHppcF9wYXRoKToKICAgIHRyeToKICAgICAgICBvcy5yZW1vdmUoemlwX3BhdGgpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgogICAgICAgIGV4aXQoIkNsZWFudXAgZmFpbGVkISIsIGV4KQoKICAgIHByaW50KCJDbGVhbnVwIE9LISIpCgoKZGVmIHJ1bl9wb3N0X3NjcmlwdF9hY3Rpb25zKGFjdGlvbnMpOgogICAgaWYgYWN0aW9uczoKICAgICAgICBwcmludCgiUnVubmluZyBwb3N0IHNjcmlwdCBhY3Rpb25zLi4uIikKICAgICAgICBmb3IgYWN0aW9uIGluIGFjdGlvbnM6CiAgICAgICAgICAgIHByaW50KGYiYWN0aW9uOiB7YWN0aW9ufSIpCiAgICAgICAgICAgIHN1YnByb2Nlc3MucnVuKGFjdGlvbiwgc2hlbGw9VHJ1ZSkKCgpkZWYgbWFpbigpOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXAiLCAiLS1wb3N0X3NjcmlwdHMiLCBuYXJncz0iKyIsIGhlbHA9IlBvc3Qgc2NyaXB0IGFjdGlvbnMiKQogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCiAgICAjIERvd25sb2FkIHh2bSBwYWNrYWdlCiAgICB4dm1femlwX3BhdGggPSBkb3dubG9hZF9maWxlKFhWTV9VUkwsIERMX0RTVCkKCiAgICAjIEdldCBXb1QgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeQogICAgd290X3BhdGggPSBnZXRfd290X2luc3RhbGxfcGF0aCgpCgogICAgIyBWYWxpZGF0ZSBwYXRoCiAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMod290X3BhdGgpOgogICAgICAgIGV4aXQoZiJQYXRoIGRvZXNuJ3QgZXhpc3Q6IHt3b3RfcGF0aH0iKQoKICAgICMgQXBwbHkgeHZtCiAgICBleHRyYWN0X3h2bSh4dm1femlwX3BhdGgsIHdvdF9wYXRoKQoKICAgICMgQ2xlYW51cAogICAgY2xlYW51cCh4dm1femlwX3BhdGgpCgogICAgcHJpbnQoIlhWTSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgaW5zdGFsbGVkISIpCgogICAgcnVuX3Bvc3Rfc2NyaXB0X2FjdGlvbnMoYXJncy5wb3N0X3NjcmlwdHMpCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgd290X3BhdGggPSAgd2lucmVnLlF1ZXJ5VmFsdWVFeChrZXksICJJbnN0YWxsTG9jYXRpb24iKVswXQoKICAgICAgICB3aXRoIG9wZW4oc2V0dGluZ3NfcGF0aCwgInciKSBhcyBmaWxlOgogICAgICAgICAgICBmaWxlLndyaXRlKHdvdF9wYXRoKQo8fGZpbV9lbmR8Pg=="]
["c940b7f24fdab4945d45180d55115e6c6df9c187-3","c940b7f24fdab4945d45180d55115e6c6df9c187","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGY4IC0qLQoiIiIKLi4gbW9kdWxlOjogYnVycHVpLmZvcm1zCiAgICA6cGxhdGZvcm06IFVuaXgKICAgIDpzeW5vcHNpczogQnVycC1VSSBmb3JtcyBtb2R1bGUuCgouLiBtb2R1bGVhdXRob3I6OiBaaWlyaXNoIDxoaStidXJwdWlAemlpcmlzaC5tZT4KCiIiIgpmcm9tIC5leHQuaTE4biBpbXBvcnQgTEFOR1VBR0VTLCBnZXRfbG9jYWxlCgpmcm9tIGZsYXNrX3d0ZiBpbXBvcnQgRmxhc2tGb3JtCmZyb20gZmxhc2tfYmFiZWwgaW1wb3J0IGxhenlfZ2V0dGV4dCBhcyBfXwpmcm9tIHd0Zm9ybXMgaW1wb3J0IFN0cmluZ0ZpZWxkLCBQYXNzd29yZEZpZWxkLCBCb29sZWFuRmllbGQsIFNlbGVjdEZpZWxkLCB2YWxpZGF0b3JzCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpjbGFzcyBMb2dpbkZvcm0oRmxhc2tGb3JtKToKICAgIHVzZXJuYW1lID0gU3RyaW5nRmllbGQoX18oIlVzZXJuYW1lIiksIFt2YWxpZGF0b3JzLkRhdGFSZXF1aXJlZCgpXSkKICAgIHBhc3N3b3JkID0gUGFzc3dvcmRGaWVsZChfXygiUGFzc3dvcmQiKSwgW3ZhbGlkYXRvcnMuRGF0YVJlcXVpcmVkKCldKQogICAgbGFuZ3VhZ2UgPSBTZWxlY3RGaWVsZCgKPHxmaW1fZW5kfD4="]
["660fbcb6e07ef83fe79d2085580d316ce71080a8-1","660fbcb6e07ef83fe79d2085580d316ce71080a8","PHxmaW1fcHJlZml4fD4KI2V4MDE0OiBFc2NyZXZhIHVtIHByb2dyYW1hIHF1ZSBjb252ZXJ0YSB1bWEgdGVtcGVyYXR1cmEgZGlnaXRhbmRvIGVtIGdyYXVzIENlbHNpdXMgZSBjb252ZXJ0YSBwYXJhIGdyYXVzIEZhaHJlbmhlaXQuCgpjID0gZmxvYXQoaW5wdXQoJ0luZm9ybWUgYSB0ZW1wZXJhdHVyYSBlbSDCukM6XG4nKSkKZiA9ICgoOSAqIGMpIC8gNSkgKyAzMgpwcmludCgnQSB0ZW1wZXJhdHVyYSBkZSB7fcK6QyBjb3JyZXNwb25kZSBhIHt9wrpGJyAuZm9ybWF0KGMsIGYpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgojT3MgcGFyw6pudGVzZXMgc2VydmVtIHBhcmEgZGVsaW1pdGFyIGEgb3JkZW0gZGEgY29udGEsIG91IHNlamEsIG8gcXVlIHZhaSBzZXIgcmVhbGl6YWRvIHByaW1laXJvLiAKPHxmaW1fZW5kfD4="]
["c283010ac735d31d29fbe4aa9a6630b96d613294-3","c283010ac735d31d29fbe4aa9a6630b96d613294","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKCmZyb20gand0IGltcG9ydCBJbnZhbGlkVG9rZW5FcnJvcgoKZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKZnJvbSBkamFuZ28uY29udHJpYi5zZXNzaW9ucy5iYWNrZW5kcy5zaWduZWRfY29va2llcyBpbXBvcnQgU2Vzc2lvblN0b3JlIGFzIFNpZ25lZENvb2tpZXNTZXNzaW9uU3RvcmUKZnJvbSBkamFuZ28uY29yZSBpbXBvcnQgc2lnbmluZwpmcm9tIHNzby5vYXV0aDIuY3J5cHQgaW1wb3J0IGxvYWRzX2p3dCwgbWFrZV9qd3QKZnJvbSBzc28uc2Vzc2lvbnMuYmFja2VuZHMgaW1wb3J0IG1hcF9rZXlzLCBpbnZfa2V5X21hcCwga2V5X21hcApmcm9tIHNzby51dGlscy51cmwgaW1wb3J0IGdldF9iYXNlX3VybAoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKY2xhc3MgU2Vzc2lvblN0b3JlKFNpZ25lZENvb2tpZXNTZXNzaW9uU3RvcmUpOgoKICAgIGRlZiBsb2FkKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFdlIGxvYWQgdGhlIGRhdGEgZnJvbSB0aGUga2V5IGl0c2VsZiBpbnN0ZWFkIG9mIGZldGNoaW5nIGZyb20KICAgICAgICBzb21lIGV4dGVybmFsIGRhdGEgc3RvcmUuIE9wcG9zaXRlIG9mIF9nZXRfc2Vzc2lvbl9rZXkoKSwKICAgICAgICByYWlzZXMgQmFkU2lnbmF0dXJlIGlmIHNpZ25hdHVyZSBmYWlscy4KICAgICAgICAiIiIKICAgICAgICB0cnk6CiAgICAgICAgICAgIHBhcnNlZCA9IGxvYWRzX2p3dChzZWxmLnNlc3Npb25fa2V5LCBhbGdvcml0aG09IkhTMjU2IikKICAgICAgICAgICAgcGFyc2VkID0gbWFwX2tleXMocGFyc2VkLCBpbnZfa2V5X21hcCkKICAgICAgICAgICAgaWYgIl9hdXRoX3VzZXJfYmFja2VuZCIgbm90IGluIHBhcnNlZDoKICAgICAgICAgICAgICAgIHBhcnNlZFsiX2F1dGhfdXNlcl9iYWNrZW5kIl0gPSAic3NvLmF1dGguYmFja2VuZHMuRW1haWxCYWNrZW5kIgogICAgICAgICAgICByZXR1cm4gcGFyc2VkCiAgICAgICAgZXhjZXB0IChzaWduaW5nLkJhZFNpZ25hdHVyZSwgVmFsdWVFcnJvciwgSW52YWxpZFRva2VuRXJyb3IpIGFzIGU6CiAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJsb2FkIGVycm9yOiAlcyIsIGUpCiAgICAgICAgICAgIHNlbGYuY3JlYXRlKCkKICAgICAgICByZXR1cm4ge30KCiAgICBkZWYgX2dldF9zZXNzaW9uX2tleShzZWxmKToKICAgICAgICAiIiIKICAgICAgICBNb3N0IHNlc3Npb24gYmFja2VuZHMgZG9uJ3QgbmVlZCB0byBvdmVycmlkZSB0aGlzIG1ldGhvZCwgYnV0IHdlIGRvLAogICAgICAgIGJlY2F1c2UgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcmFuZG9tIHN0cmluZywgd2Ugd2FudCB0byBhY3R1YWxseQogICAgICAgIGdlbmVyYXRlIGEgc2VjdXJlIHVybC1zYWZlIEJhc2U2NC1lbmNvZGVkIHN0cmluZyBvZiBkYXRhIGFzIG91cgogICAgICAgIHNlc3Npb24ga2V5LgogICAgICAgICIiIgogICAgICAgIHNlc3Npb25fY2FjaGUgPSBnZXRhdHRyKHNlbGYsICdfc2Vzc2lvbl9jYWNoZScsIHt9KQogICAgICAgIHNlc3Npb25fY2FjaGUgPSBtYXBfa2V5cyhzZXNzaW9uX2NhY2hlLCBrZXlfbWFwKQogICAgICAgIGlmICJfYXV0aF91c2VyX2JhY2tlbmQiIGluIHNlc3Npb25fY2FjaGU6CiAgICAgICAgICAgIGRlbCBzZXNzaW9uX2NhY2hlWyJfYXV0aF91c2VyX2JhY2tlbmQiXQogICAgICAgIHNlc3Npb25fY2FjaGVbImlzcyJdID0gZ2V0X2Jhc2VfdXJsKCkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICByZXR1cm4gbWFrZV9qd3Qoc2Vzc2lvbl9jYWNoZSwgbWF4X2FnZT1zZXR0aW5ncy5TRVNTSU9OX0NPT0tJRV9BR0UsIGFsZ29yaXRobT0iSFMyNTYiKQo8fGZpbV9lbmR8Pg=="]
["b063cefeba8582b97f373b8905695b1cd1a7bedf-1","b063cefeba8582b97f373b8905695b1cd1a7bedf","PHxmaW1fcHJlZml4fD4KJycnCkNvcHlyaWdodCAyMDE4IEVzcmkKCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS7igIsKJycnCgppbXBvcnQgYXJjcHkKaW1wb3J0IHJlcXVlc3RzCmltcG9ydCB0ZW1wZmlsZQppbXBvcnQganNvbgo8fGZpbV9ob2xlfD4KCmNsYXNzIFRvb2xib3gob2JqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAiIiJEZWZpbmUgdGhlIHRvb2xib3ggKHRoZSBuYW1lIG9mIHRoZSB0b29sYm94IGlzIHRoZSBuYW1lIG9mIHRoZQogICAgICAgIC5weXQgZmlsZSkuIiIiCiAgICAgICAgc2VsZi5sYWJlbCA9ICJTdGRHZW9RdWVyeVRvb2xib3giCiAgICAgICAgc2VsZi5hbGlhcyA9ICIiCgogICAgICAgICMgTGlzdCBvZiB0b29sIGNsYXNzZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdG9vbGJveAogICAgICAgIHNlbGYudG9vbHMgPSBbU3RkR2VvZ3JhcGh5UXVlcnlUb29sXQoKJycnIEVuY2Fwc3VsYXRlcyBjYWxscyB0byBHZW9lbnJpY2htZW50IHNlcnZpY2UnJycKY2xhc3MgR2VvZW5yaWNobWVudChvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICMgZGlzY292ZXIgR2VvZW5yaWNobWVudCBVUkwKICAgICAgICBwb3J0YWwgPSBhcmNweS5HZXRBY3RpdmVQb3J0YWxVUkwoKQogICAgICAgIHBvcnRhbF9zZWxmX3VybCA9IHBvcnRhbCArICIvc2hhcmluZy9wb3J0YWxzL3NlbGYiCiAgICAgICAgZGF0YSA9IHsiZiI6Impzb24iLCAidG9rZW4iOnNlbGYuZ2V0VG9rZW4oKX0KICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLnBvc3QocG9ydGFsX3NlbGZfdXJsLCBkYXRhKQoKICAgICAgICByZXNwb25zZV9qc29uID0gcmVzcG9uc2UuanNvbigpCgogICAgICAgIHNlbGYuZ2VfdXJsID0gcmVzcG9uc2VfanNvblsiaGVscGVyU2VydmljZXMiXVsiZ2VvZW5yaWNobWVudCJdWyJ1cmwiXQogICAgICAgIHNlbGYudXNlcm5hbWUgPSByZXNwb25zZV9qc29uWyJ1c2VyIl1bInVzZXJuYW1lIl0KICAgIAogICAgJycnIFJldHVybnMgbGlzdCBvZiBjb3VudHJpZXMgYXZhaWxhYmxlIGluIEdlb2VucmljaG1lbnQgc2VydmljZSAnJycKICAgIGRlZiBnZXRDb3VudHJpZXMoc2VsZik6CiAgICAgICAgY291bnRyaWVzX3VybCA9IHNlbGYuZ2VfdXJsICsgIi9HZW9lbnJpY2htZW50L0NvdW50cmllcyIKICAgICAgICBkYXRhID0geyJmIjoianNvbiIsICJ0b2tlbiI6c2VsZi5nZXRUb2tlbigpfQogICAgICAgIGNvdW50cmllc19qc29uID0gcmVxdWVzdHMucG9zdChjb3VudHJpZXNfdXJsLCBkYXRhKS5qc29uKCkKICAgICAgICBjb3VudHJpZXNfbGlzdCA9IGNvdW50cmllc19qc29uWyJjb3VudHJpZXMiXQogICAgICAgIGNvdW50cmllc19pZHNfbmFtZXMgPSBbKGNbImlkIl0sIGNbIm5hbWUiXSkgZm9yIGMgaW4gY291bnRyaWVzX2xpc3RdCiAgICAgICAgcmV0dXJuIGNvdW50cmllc19pZHNfbmFtZXMKCiAgICBkZWYgZ2V0R2VvZ3JhcGh5TGV2ZWxzKHNlbGYsIGNvdW50cnkpOgogICAgICAgIGdlb19sZXZlbHNfdXJsID0gc2VsZi5nZV91cmwgKyAiL0dlb2VucmljaG1lbnQvU3RhbmRhcmRHZW9ncmFwaHlMZXZlbHMvIiArIGNvdW50cnkKICAgICAgICBkYXRhID0geyJmIjoianNvbiIsICJ0b2tlbiI6c2VsZi5nZXRUb2tlbigpfQogICAgICAgIGdlb19sZXZlbHNfanNvbiA9IHJlcXVlc3RzLnBvc3QoZ2VvX2xldmVsc191cmwsIGRhdGEpLmpzb24oKQogICAgICAgIGhpZXJhcmNoaWVzX2pzb24gPSBnZW9fbGV2ZWxzX2pzb25bImdlb2dyYXBoeUxldmVscyJdWzBdWyJoaWVyYXJjaGllcyJdCiAgICAgICAgaGllcmFyY2h5X2NlbnN1c19qc29uID0gaGllcmFyY2hpZXNfanNvblswXQogICAgICAgIGxldmVsc19qc29uID0gaGllcmFyY2h5X2NlbnN1c19qc29uWyJsZXZlbHMiXQogICAgICAgIHJldHVybiBbbFsiaWQiXSBmb3IgbCBpbiBsZXZlbHNfanNvbl0KCiAgICBkZWYgcGVyZm9ybUdlb2dyYXBoeVF1ZXJ5KHNlbGYsIGNvdW50cnksIGxldmVsLCBxdWVyeSk6CiAgICAgICAgc3RkX2dlb19xdWVyeV91cmwgPSBzZWxmLmdlX3VybCArICIvU3RhbmRhcmRHZW9ncmFwaHlRdWVyeS9leGVjdXRlIgogICAgICAgIGRhdGEgPSB7ImYiOiJqc29uIiwgInNvdXJjZUNvdW50cnkiOiBjb3VudHJ5LCAiZ2VvZ3JhcGh5bGF5ZXJzIjogW2xldmVsXSwgInJldHVybkdlb21ldHJ5IjogVHJ1ZSwgImdlb2dyYXBoeVF1ZXJ5IjogcXVlcnksICJnZW5lcmFsaXphdGlvbkxldmVsIjoyLCAidG9rZW4iOnNlbGYuZ2V0VG9rZW4oKX0KICAgICAgICByZXN1bHRfanNvbiA9IHJlcXVlc3RzLnBvc3Qoc3RkX2dlb19xdWVyeV91cmwsIGRhdGEpLmpzb24oKQogICAgICAgIHJldHVybiByZXN1bHRfanNvblsicmVzdWx0cyJdWzBdWyJ2YWx1ZSJdCgoKCiAgICAnJycgRGlzcGxheXMgYSBXaW5kb3dzIG1lc3NhZ2UgYm94IC0gZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBvbmx5JycnICAKICAgIGRlZiBNYm94KHNlbGYsIHRleHQsIHRpdGxlID0gIlNhbXBsZSIsIHN0eWxlID0gMCk6CiAgICAgICAgY3R5cGVzLndpbmRsbC51c2VyMzIuTWVzc2FnZUJveFcoMCwgdGV4dCwgdGl0bGUsIHN0eWxlKQogICAgCiAgICAnJycgUmV0dXJucyBjdXJyZW50IFNpZ24gSW4gVG9rZW4gZnJvbSBBcmNHSVMgUHJvICcnJyAgICAKICAgIGRlZiBnZXRUb2tlbihzZWxmKToKICAgICAgICB0b2tlbl9kaWN0aW9uYXJ5ID0gYXJjcHkuR2V0U2lnbmluVG9rZW4oKQogICAgICAgIHJldHVybiB0b2tlbl9kaWN0aW9uYXJ5WyJ0b2tlbiJdCgogICAgJycnIFJldHVybnMgcmVxdWVzdCBpbiAicmVxdWVzdHMiIGZvcm1hdCAodXJsICsgZGF0YSkgaW4gImJyb3dzZXIiIGZvcm1hdCAoZW5kcG9pbnQgdXJsIGFuZCBwYXJhbWV0ZXJzIGluIGEgc2luZ2xlIHVybCknJycKICAgIGRlZiBnZXRfcmVxdWVzdF9hc19zdHJpbmcoc2VsZiwgcXVlcnlfdXJsLCBkYXRhKToKICAgICAgICBnZXRfcmVxdWVzdF9kYXRhID0gW2sgKyAiPSIgKyByZXF1ZXN0cy51dGlscy5xdW90ZShzdHIodikpIGZvciBrLCB2IGluIGRhdGEuaXRlbXMoKV0KICAgICAgICByZXR1cm4gcXVlcnlfdXJsICsgIj8iICsgZnVuY3Rvb2xzLnJlZHVjZShsYW1iZGEgYSxiOmEgKyAiJiIgKyBiLCBnZXRfcmVxdWVzdF9kYXRhKSAgICAgICAgCgpjbGFzcyBTdGRHZW9ncmFwaHlRdWVyeVRvb2wob2JqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmxhYmVsID0gIkdlbmVyYXRlIFN0YW5kYXJkIEdlb2dyYXBoeSBMYXllciIKICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gIiIKICAgICAgICBzZWxmLmNhblJ1bkluQmFja2dyb3VuZCA9IFRydWUKICAgICAgICBzZWxmLmdlID0gR2VvZW5yaWNobWVudCgpCgogICAgZGVmIGdldFBhcmFtZXRlckluZm8oc2VsZik6CiAgICAgICAgIyBJbnB1dCBDb3VudHJ5CiAgICAgICAgaW5fY291bnRyeSA9IGFyY3B5LlBhcmFtZXRlcigKICAgICAgICAgICAgZGlzcGxheU5hbWU9IkNvdW50cnkiLAogICAgICAgICAgICBuYW1lPSJpbl9jb3VudHJ5IiwKICAgICAgICAgICAgZGF0YXR5cGU9IkdQU3RyaW5nIiwKICAgICAgICAgICAgcGFyYW1ldGVyVHlwZT0iUmVxdWlyZWQiLAogICAgICAgICAgICBkaXJlY3Rpb249IklucHV0IikKCiAgICAgICAgIyBnZXQgbGlzdCBvZiBjb3VudHJpZXMgZnJvbSBHZW9lbnJpY2htZW50IGFuZCBzZXQgdGhlIGxpc3Qgb2YgY291bnRyaWVzIElEcwogICAgICAgICMgYXMgYSBmaWx0ZXIgZm9yIGluX2NvdW50cnkgcGFyYW1ldGVyCiAgICAgICAgaW5fY291bnRyeS5maWx0ZXIubGlzdCA9IFtjIGZvciBjLCBfIGluIHNlbGYuZ2UuZ2V0Q291bnRyaWVzKCldCiAgICAgICAgaW5fY291bnRyeS52YWx1ZSA9ICJVUyIKICAgICAgICAKICAgICAgICAjIElucHV0IEdlb2dyYXBoeSBMZXZlbCBwYXJhbWV0ZXIKICAgICAgICBpbl9nbCA9IGFyY3B5LlBhcmFtZXRlcigKICAgICAgICAgICAgZGlzcGxheU5hbWU9Ikdlb2dyYXBoeSBMZXZlbCIsCiAgICAgICAgICAgIG5hbWU9ImluX2dsIiwKICAgICAgICAgICAgZGF0YXR5cGU9IkdQU3RyaW5nIiwKICAgICAgICAgICAgcGFyYW1ldGVyVHlwZT0iUmVxdWlyZWQiLAogICAgICAgICAgICBkaXJlY3Rpb249IklucHV0IikKCgogICAgICAgICMgSW5wdXQgU2VhcmNoIFF1ZXJ5IHBhcmFtZXRlcgogICAgICAgIGluX3F1ZXJ5ID0gYXJjcHkuUGFyYW1ldGVyKAogICAgICAgICAgICBkaXNwbGF5TmFtZT0iU2VhcmNoIFF1ZXJ5IiwKICAgICAgICAgICAgbmFtZT0iaW5fcXVlcnkiLAogICAgICAgICAgICBkYXRhdHlwZT0iR1BTdHJpbmciLAogICAgICAgICAgICBwYXJhbWV0ZXJUeXBlPSJSZXF1aXJlZCIsCiAgICAgICAgICAgIGRpcmVjdGlvbj0iSW5wdXQiKQoKICAgICAgICAjIElucHV0IFNlYXJjaCBRdWVyeSBwYXJhbWV0ZXIKICAgICAgICBvdXRfZmMgPSBhcmNweS5QYXJhbWV0ZXIoCiAgICAgICAgICAgIGRpc3BsYXlOYW1lPSJPdXRwdXQgRmVhdHVyZUNsYXNzIiwKICAgICAgICAgICAgbmFtZT0ib3V0X2ZjIiwKICAgICAgICAgICAgZGF0YXR5cGU9IkRFRmVhdHVyZUNsYXNzIiwKICAgICAgICAgICAgcGFyYW1ldGVyVHlwZT0iUmVxdWlyZWQiLAogICAgICAgICAgICBkaXJlY3Rpb249Ik91dHB1dCIpCiAgICAgICAgICAgIAogICAgICAgIHNlbGYucGFyYW1zID0gW2luX2NvdW50cnksIGluX2dsLCBpbl9xdWVyeSwgb3V0X2ZjXQogICAgICAgIAogICAgICAgIHJldHVybiBzZWxmLnBhcmFtcwkJCgogICAgZGVmIGlzTGljZW5zZWQoc2VsZik6CiAgICAgICAgIiIiU2V0IHdoZXRoZXIgdG9vbCBpcyBsaWNlbnNlZCB0byBleGVjdXRlLiIiIgogICAgICAgIHJldHVybiBUcnVlCgogICAgZGVmIHVwZGF0ZVBhcmFtZXRlcnMoc2VsZiwgcGFyYW1ldGVycyk6CiAgICAgICAgY291bnRyeSA9IHBhcmFtZXRlcnNbMF0udmFsdWUKICAgICAgICAKICAgICAgICBpZiBwYXJhbWV0ZXJzWzBdLmFsdGVyZWQ6CiAgICAgICAgICAgIHBhcmFtZXRlcnNbMV0uZmlsdGVyLmxpc3QgPSBzZWxmLmdlLmdldEdlb2dyYXBoeUxldmVscyhjb3VudHJ5KQoKICAgICAgICByZXR1cm4KCiAgICBkZWYgdXBkYXRlTWVzc2FnZXMoc2VsZiwgcGFyYW1ldGVycyk6CiAgICAgICAgIiIiTW9kaWZ5IHRoZSBtZXNzYWdlcyBjcmVhdGVkIGJ5IGludGVybmFsIHZhbGlkYXRpb24gZm9yIGVhY2ggdG9vbAogICAgICAgIHBhcmFtZXRlci4gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhZnRlciBpbnRlcm5hbCB2YWxpZGF0aW9uLiIiIgogICAgICAgIHJldHVybgoKICAgIGRlZiBleGVjdXRlKHNlbGYsIHBhcmFtZXRlcnMsIG1lc3NhZ2VzKToKICAgICAgICAjIGdldCBwYXJhbWV0ZXIgdmFsdWVzCiAgICAgICAgaW5fY291bnRyeSA9ICBwYXJhbWV0ZXJzWzBdLnZhbHVlQXNUZXh0CiAgICAgICAgaW5fZ2wgPSAgcGFyYW1ldGVyc1sxXS52YWx1ZUFzVGV4dAogICAgICAgIGluX3F1ZXJ5ID0gIHBhcmFtZXRlcnNbMl0udmFsdWVBc1RleHQKICAgICAgICBvdXRfZmMgPSAgcGFyYW1ldGVyc1szXS52YWx1ZUFzVGV4dAogICAgICAgIAogICAgICAgIGlmIGFyY3B5LkV4aXN0cyhvdXRfZmMpOgogICAgICAgICAgICBhcmNweS5EZWxldGVfbWFuYWdlbWVudChvdXRfZmMpCiAgICAgICAgCiAgICAgICAgZmVhdHVyZV9zZXRfanNvbiA9IHNlbGYuZ2UucGVyZm9ybUdlb2dyYXBoeVF1ZXJ5KGluX2NvdW50cnksIGluX2dsLCBpbl9xdWVyeSkKICAgICAgICAKICAgICAgICAjIGNvbnZlcnQgaW5wdXQgdG8gSlNPTgogICAgICAgIHRlbXBfZm9sZGVyID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICAgICAgdGVtcF9maWxlID0gb3MucGF0aC5qb2luKHRlbXBfZm9sZGVyLCAic3RkZ2VvLmpzb24iKQogICAgICAgIAogICAgICAgICMgd3JpdGUgZmVhdHVyZSBzZXQKICAgICAgICB3aXRoIG9wZW4odGVtcF9maWxlLCAndycpIGFzIGpzb25fZmlsZToKICAgICAgICAgICAganNvbl9maWxlLndyaXRlKGpzb24uZHVtcHMoZmVhdHVyZV9zZXRfanNvbikpCiAgICAgICAgCiAgICAgICAgYXJjcHkuY29udmVyc2lvbi5KU09OVG9GZWF0dXJlcyh0ZW1wX2ZpbGUsIG91dF9mYykKCiAgICAgICAgCiAgICAgICAgCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBmdW5jdG9vbHMKaW1wb3J0IHNodXRpbAppbXBvcnQgY3R5cGVzCmltcG9ydCBvcwo8fGZpbV9lbmR8Pg=="]
["665f7d09df0b9d8bf801b9ea6884d82802fd76a7-2","665f7d09df0b9d8bf801b9ea6884d82802fd76a7","PHxmaW1fcHJlZml4fD4KIyBMaW50IGFzOiBweXRob24zCiMgQ29weXJpZ2h0IDIwMjEgVGhlIFRlbnNvckZsb3cgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIiIiQSBiYXNlIGNsYXNzIGZvciB0ZXN0IFN0cmVhbVN0ZXAoKSBvZiByZWxhdGVkIGxheWVycy4KCkFzIG9mIEp1biAyMDIxIGl0J3Mgd3JpdHRlbiBmb3IgY29uZm9ybWVyIChodHRwczovL2FyeGl2Lm9yZy9hYnMvMjAwNS4wODEwMCkKcmVsYXRlZCBsYXllcnMuCiIiIgoKaW1wb3J0IG1hdGgKZnJvbSBhYnNsLnRlc3RpbmcgaW1wb3J0IHBhcmFtZXRlcml6ZWQKZnJvbSBsaW5ndm8gaW1wb3J0IGNvbXBhdCBhcyB0Zgpmcm9tIGxpbmd2by5jb3JlIGltcG9ydCBweV91dGlscwpmcm9tIGxpbmd2by5jb3JlIGltcG9ydCB0ZXN0X3V0aWxzCmltcG9ydCBudW1weSBhcyBucAoKCmNsYXNzIFN0cmVhbVN0ZXBUZXN0QmFzZSh0ZXN0X3V0aWxzLlRlc3RDYXNlLCBwYXJhbWV0ZXJpemVkLlRlc3RDYXNlKToKICAiIiJDb21tb24gYmFzZSBmb3IgdGVzdGluZyBTdHJlYW1TdGVwKCkuCgogIFN1YiBjbGFzc2VzIHdpbGwgbmVlZCB0byBkZWZpbmUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CgogIGlucHV0X3JhbmsoKQogIF9HZXRQYXJhbXMoKQogIF9GUHJvcCgpCiAgX0dldEZQcm9wT3V0cHV0KCkKICAiIiIKCiAgQHByb3BlcnR5CiAgZGVmIGlucHV0X3Jhbmsoc2VsZik6CiAgICByZXR1cm4gMwoKICBkZWYgX0dldElucHV0cyhzZWxmLCBiYXRjaF9zaXplLCBtYXhfc2VxbGVuLCBpbnB1dF9kaW0sIGZ1bGxfc2VxPUZhbHNlKToKICAgICMgUHJlcGFyZXMgaW5wdXRzLgogICAgbnAucmFuZG9tLnNlZWQoTm9uZSkKICAgIGlmIHNlbGYuaW5wdXRfcmFuayA9PSAzOgogICAgICBpbnB1dHMgPSBucC5yYW5kb20ubm9ybWFsKAogICAgICAgICAgMC41LCAxLCBbYmF0Y2hfc2l6ZSwgbWF4X3NlcWxlbiwgaW5wdXRfZGltXSkuYXN0eXBlKG5wLmZsb2F0MzIpCiAgICBlbHNlOgogICAgICBhc3NlcnQgc2VsZi5pbnB1dF9yYW5rID09IDQKICAgICAgaW5wdXRzID0gbnAucmFuZG9tLm5vcm1hbCgKICAgICAgICAgIDAuNSwgMSwgW2JhdGNoX3NpemUsIG1heF9zZXFsZW4sIDEsIGlucHV0X2RpbV0pLmFzdHlwZShucC5mbG9hdDMyKQogICAgcHJpbnQoZiducC5zdW0oaW5wdXRzKToge25wLnN1bShpbnB1dHMpfScpCiAgICBpbnB1dHMgPSB0Zi5jb252ZXJ0X3RvX3RlbnNvcihpbnB1dHMpCgogICAgaWYgbm90IGZ1bGxfc2VxOgogICAgICBzZXFsZW4gPSBucC5yYW5kb20ucmFuZGludCgKICAgICAgICAgIGxvdz1tYXhfc2VxbGVuIC8vIDIsCiAgICAgICAgICBoaWdoPW1heF9zZXFsZW4gKyAxLAogICAgICAgICAgc2l6ZT0oYmF0Y2hfc2l6ZSwpLAogICAgICAgICAgZHR5cGU9bnAuaW50MzIpCiAgICBlbHNlOgogICAgICBzZXFsZW4gPSBucC5mdWxsKChiYXRjaF9zaXplLCksIG1heF9zZXFsZW4sIGR0eXBlPW5wLmludDMyKQogICAgcHJpbnQoZidzZXFsZW46IHtzZXFsZW59JykKCiAgICBzZXFsZW4gPSB0Zi5jb252ZXJ0X3RvX3RlbnNvcihzZXFsZW4pCiAgICBwYWRkaW5ncyA9IHB5X3V0aWxzLlBhZGRpbmdzRnJvbUxlbmd0aHMoc2VxbGVuLCBtYXhfc2VxbGVuKQogICAgcmV0dXJuIGlucHV0cywgcGFkZGluZ3MKCiAgZGVmIF9QYWRJbnB1dChzZWxmLCBpbnB1dHMsIHBhZGRpbmdzLCBudW1fZnJhbWVzKToKICAgIGlmIHNlbGYuaW5wdXRfcmFuayA9PSAzOgogICAgICBpbnB1dHMgPSB0Zi5wYWQoaW5wdXRzLCBbWzAsIDBdLCBbMCwgbnVtX2ZyYW1lc10sIFswLCAwXV0pCiAgICBlbHNlOgogICAgICBpbnB1dHMgPSB0Zi5wYWQoaW5wdXRzLCBbWzAsIDBdLCBbMCwgbnVtX2ZyYW1lc10sIFswLCAwXSwgWzAsIDBdXSkKICAgIHBhZGRpbmdzID0gdGYucGFkKHBhZGRpbmdzLCBbWzAsIDBdLCBbMCwgbnVtX2ZyYW1lc11dLCBjb25zdGFudF92YWx1ZXM9MSkKICAgIHJldHVybiBpbnB1dHMsIHBhZGRpbmdzCgogIGRlZiBfTm9ybWFsaXplU3RyZWFtU3RlcE91dHB1dChzZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRfY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3NlcWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2xheWVycz0xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeV9mdW5uZWxfcG9vbF9zdHJpZGU9MSk6CiAgICByaWdodF9jb250ZXh0ID0gcmlnaHRfY29udGV4dCAvLyBxdWVyeV9mdW5uZWxfcG9vbF9zdHJpZGUKICAgIG1heF9zZXFsZW4gPSBtYXhfc2VxbGVuIC8vIHF1ZXJ5X2Z1bm5lbF9wb29sX3N0cmlkZQogICAgIyBvdXRwdXRzIGhhcyByaWdodF9jb250ZXh0ICogbnVtX2xheWVycy1mcmFtZXMgZGVsYXkgZnJvbSBpbnB1dHMuCiAgICBvdXRwdXRzID0gb3V0cHV0c1s6LCByaWdodF9jb250ZXh0ICogbnVtX2xheWVyczpdCiAgICAjIGxhdGVyIG91dHB1dHMgY29ycmVzcG9uZHMgdG8gcGFkZGVkIGlucHV0cyB0byBjb21wbGV0ZSB0aGUgbGFzdCBmcmFtZSdzCiAgICAjIHJpZ2h0IGNvbnRleHQuCiAgICBvdXRwdXRzID0gb3V0cHV0c1s6LCA6bWF4X3NlcWxlbl0KICAgIG91dF9yYW5rID0gcHlfdXRpbHMuR2V0UmFuayhvdXRwdXRzKQogICAgcGFkZGluZ3MgPSBwYWRkaW5nc1s6LCA6bWF4X3NlcWxlbl0KICAgIHJldHVybiBvdXRwdXRzICogcHlfdXRpbHMuQXBwZW5kRGltcygxLiAtIHBhZGRpbmdzLCBvdXRfcmFuayAtIDIpCgogIGRlZiBfR2V0UGFyYW1zKHNlbGYsICoqa3dhcmdzKToKICAgICIiIlJldHVybnMgbGF5ZXIgcGFyYW1zLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCgogIGRlZiBfRlByb3Aoc2VsZiwgbGF5ZXIsIGlucHV0cywgcGFkZGluZ3MpOgogICAgIiIiUmV0dXJucyBsYXllciBmcHJvcCByZXN1bHRzLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCgogIGRlZiBfU3RyZWFtU3RlcChzZWxmLCBsYXllciwgc3RlcF9pbnB1dHMsIHN0ZXBfcGFkZGluZ3MsIHN0YXRlKToKICAgICIiIlJldHVybnMgbGF5ZXIgU3RyZWFtU3RlcCByZXN1bHRzLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCgogIGRlZiBfR2V0RlByb3BPdXRwdXQoc2VsZiwgZnByb3Bfb3V0KToKICAgICIiIlJldHVybnMga2V5IGxheWVyIG91dHB1dCBhbmQgcGFkZGluZ3MuIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICBkZWYgX1Rlc3RTdHJlYW1TdGVwSGVscGVyKHNlbGYsICoqa3dhcmdzKToKICAgICIiIk1haW4gaGVscGVyIG1ldGhvZC4iIiIKICAgIGJhdGNoX3NpemUsIG1heF9zZXFsZW4sIGlucHV0X2RpbSA9IDIsIDMyLCBrd2FyZ3NbJ2lucHV0X2RpbSddCjx8ZmltX2VuZHw+"]
["3ab741d74633a14a54922dc0dccedc30c115eabd-3","3ab741d74633a14a54922dc0dccedc30c115eabd","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgonJycKSW50ZXJwb2xhdGUgc29tZXRoaW5nLiBXaXRob3V0IGFuIG91dHB1dCBmaWxlLCBpbnRlcnBvbGF0ZSBpbiBwbGFjZS4KVGhlcmUgaXMgdGhlIG9wdGlvbiBvZiBnZW5lcmF0aW5nIG5lYXJlc3QgaW50ZXJwb2xhdGlvbiBzYW1wbGUgZmlsZXMKYW5kIHJldXNpbmcgdGhlc2UgaW5kZXggZmlsZXMgdG8gc2F2ZSB0aW1lIG9uIHNhbXBsZSBmdXJ0aGVyIGZpbGVzLgpJIGludGVuZCB0byBpbmNsdWRlIHRoaXMgc2FtcGxpbmcgaW4gcGJzIHNjcmlwdHMgc28gdGhhdCB0aGV5IHNhbXBsZQp0aGUgZmlyc3QgdGltZSBzdGVwIG9uY2UsIGFuZCB0aGVuIHBlcmZvcm0gd2hhdCBJIGhvcGUgaXMgYSBjb25zdGFudAp0aW1lIGNvbnN0cnVjdGlvbiBmb3IgbGF0ZXIgZmlsZXMuIFNlZSB0aGUgLS1nZW4tc2FtcGxlcyBhbmQgLS1zYW1wbGUKb3B0aW9ucy4KClVzYWdlOgogIGludGVycC5weSBbb3B0aW9uc10gPGlucHV0PiBbPG91dHB1dD4gWzx2YXI+Li4uXV0KICBpbnRlcnAucHkgW29wdGlvbnNdIFstLWdlbi1zYW1wbGVzIHwgLUcgXSA8aW5wdXQ+IDxvdXRwdXQ+CgpPcHRpb25zOgogIC1oIC0taGVscCAgICAgICAgICAgICAgICAgICBTaG93IHRoaXMgaGVscC4KICAtdiAtLXZlcmJvc2UgICAgICAgICAgICAgICAgVHVybiBvbiB2ZXJib3NpdHkuCiAgLXggLS1YICAgICAgICAgICAgICAgICAgICAgIFVzZSBYIGluIGludGVycG9sYXRpb24uCiAgLXkgLS1ZICAgICAgICAgICAgICAgICAgICAgIFVzZSBZIGluIGludGVycG9sYXRpb24uCiAgLXogLS1aICAgICAgICAgICAgICAgICAgICAgIFVzZSBaIGluIGludGVycG9sYXRpb24uCiAgLS14cmVzPVhSRVMgICAgICAgICAgICAgICAgIFNldCB0aGUgcmVzb2x1dGlvbiBhbG9uZyB0aGUgeCBkaXJlY3Rpb24gW2RlZmF1bHQ6IDEwMF0uCiAgLS15cmVzPVhSRVMgICAgICAgICAgICAgICAgIFNldCB0aGUgcmVzb2x1dGlvbiBhbG9uZyB0aGUgeSBkaXJlY3Rpb24gW2RlZmF1bHQ6IDEwMF0uCiAgLS16cmVzPVhSRVMgICAgICAgICAgICAgICAgIFNldCB0aGUgcmVzb2x1dGlvbiBhbG9uZyB0aGUgeiBkaXJlY3Rpb24gW2RlZmF1bHQ6IDEwMF0uCiAgLS1wZXJtdXRlIC1wICAgICAgICAgICAgICAgIFN3YXAgdGhlIG9yZGVyIG9mIGF4ZXMgZm9yIDJEIGRhdGEuCiAgLS1nZW4tc2FtcGxlcyAtRyAgICAgICAgICAgIEluc3RlYWQgb2YgaW50ZXJwb2xhdGluZywgZ2VuZXJhdGUgYSBzYW1wbGUgZmlsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgb3V0cHV0IHRvIDxvdXRwdXQ+LgogIC0tc2FtcGxlPVMgLXMgUyAgICAgICAgICAgICBMb2FkIHRoZSBzYW1wbGUgZmlsZSBTIGFuZCB1c2UgdGhlc2UgaW5kaWNlcyB0byBzYW1wbGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGlucHV0IGZpbGUgdG8gY3JlYXRlIGEgaW50ZXJwb2xhdGVkIGZpbGUuCiAgLS16aXAgLXogICAgICAgICAgICAgICAgICAgIENvbXByZXNzIGZvciBoZGY1LgonJycKCmZyb20gbHNwcmVhZGVyIGltcG9ydCBsc3ByZWFkZXIgYXMgcmQ7CmZyb20gbHNwcmVhZGVyLm5lYXJlc3QgaW1wb3J0IHNpbXBsZV9uZWFyZXN0X2luZGljZXM7CmltcG9ydCBudW1weSBhcyBucDsKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdDsKZnJvbSBzY2lweS5zcGF0aWFsIGltcG9ydCBjS0RUcmVlOwpmcm9tIHNjaXB5LmludGVycG9sYXRlLmludGVycG5kIGltcG9ydCBfbmRpbV9jb29yZHNfZnJvbV9hcnJheXMsTkRJbnRlcnBvbGF0b3JCYXNlOwpmcm9tIHRpbWUgaW1wb3J0IHRpbWU7CmRlZiBoYW5kbGVfZGltcyhvcHRzKToKICAgICcnJwogICAgU2NyaXB0IG9wdGlvbiBoYW5kbGluZy4KICAgICcnJwogICAgdXNlLHJlcyA9IFtdLFtdOwogICAgaWYgb3B0c1snLS1YJ106CiAgICAgICAgdXNlLmFwcGVuZCgneCcpOwogICAgICAgIHJlcy5hcHBlbmQoaW50KG9wdHNbJy0teHJlcyddKSk7CiAgICBpZiBvcHRzWyctLVknXToKICAgICAgICB1c2UuYXBwZW5kKCd5Jyk7CiAgICAgICAgcmVzLmFwcGVuZChpbnQob3B0c1snLS15cmVzJ10pKTsKICAgIGlmIG9wdHNbJy0tWiddOgogICAgICAgIHVzZS5hcHBlbmQoJ3onKTsKICAgICAgICByZXMuYXBwZW5kKGludChvcHRzWyctLXpyZXMnXSkpOwogICAgaWYgdXNlID09IFtdOgogICAgICAgIHVzZSA9IFsneCcsJ3knLCd6J107CiAgICAgICAgcmVzID0gbWFwKGxhbWJkYSBrOiBpbnQob3B0c1trXSksWyctLXhyZXMnLCctLXlyZXMnLCctLXpyZXMnXSk7CiAgICAjIEEgY291cGxlIG9mIHRoaW5ncyB0byBub3RlOyB3cml0dGVuIGluIHRoaXMgd2F5LCB3aGF0ZXZlcgogICAgIyB0aGlzIGxpc3QgKGFuZCB0aHVzLCB3aGF0IGlzIHJlYWQpIGJlY29tZXMsIGl0IGlzIG9yZGVyZWQKICAgICMgYWxwaGFiZXRpY2FsbHkuIFRoaXMgaXMgaW1wb3J0YW50LCBhcyB0aGlzIGRldGVybWluZXMgd2hhdAogICAgIyBlYWNoIHJlc3VsdGluZyByb3cgYW5kIGNvbHVtbiBhbmQgYnJlYWR0aCBpbiB0aGUgb3V0cHV0CiAgICAjIGFycmF5IGNvcnJlc3BvbmRzIHRvIGZyb20gdGhlIGFjdHVhbCBzaW11bGF0aW9uLgogICAgIwogICAgIyBJdCBpcyBwcm9iYWJseSB3b3J0aCBtZW50aW9uaW5nIHRoYXQgdGhlIHh6IGluIHNpbXVsYXRpb24KICAgICMgYXhlcyB3aWxsIGJlIFswLDFdIGluIG51bXB5IGF4ZXMsIHRoYXQgaXMsIGl0IHdpbGwgYmUgbGVmdC1oYW5kZWQuCjx8ZmltX2hvbGV8PgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgZnJvbSBkb2NvcHQgaW1wb3J0IGRvY29wdDsKICAgIGZyb20gbWlzYyBpbXBvcnQgcmVhZGZpbGUsIG1rdnByaW50LCBkdW1wX3BpY2tsZTsKICAgIG9wdHM9ZG9jb3B0KF9fZG9jX18saGVscD1UcnVlKTsKICAgIGRpbXMscmVzID0gaGFuZGxlX2RpbXMob3B0cyk7CiAgICB2cHJpbnQgPSBta3ZwcmludDsKICAgIHZhciA9IG9wdHNbJzx2YXI+J107CiAgICByZWFkdmFycyA9IGxpc3QodmFyKTsKICAgIGlmIHJlYWR2YXJzOgogICAgICAgIHJlYWR2YXJzKz1kaW1zOwogICAgaWYgb3B0c1snLS1nZW4tc2FtcGxlcyddOgogICAgICAgIHhzID0gdHVwbGUoW2RbbF0gZm9yIGwgaW4gZGltc10pOwogICAgICAgIGkgPSBzaW1wbGVfbmVhcmVzdF9pbmRpY2VzKHhzLHJlcyk7CiAgICAgICAgZHVtcF9waWNrbGUob3B0c1siPG91dHB1dD4iXSwoaSx4cykpOwogICAgICAgIGV4aXQoMSk7CiAgICBpZiBvcHRzWyctLXNhbXBsZSddOgogICAgICAgIGkseHMgPSByZWFkZmlsZShvcHRzWyctLXNhbXBsZSddLCBkdW1wZnVsbD1UcnVlKTsKICAgIGVsc2U6CiAgICAgICAgeHMgPSB0dXBsZShbZFtsXSBmb3IgbCBpbiBkaW1zXSk7CiAgICAgICAgaSA9IHNpbXBsZV9uZWFyZXN0X2luZGljZXMoeHMscmVzKTsKICAgIGRpZCA9IHt2OmRbdl1baV0gZm9yIHYgaW4gdmFyfTsKICAgICNIYXMgX0RfIGJlZW4gX0lfbnRlcnBvbGF0ZV9EXz8gIFllcyBpdCBESUQuCiAgICBkaWQudXBkYXRlKHtsOnggZm9yIGwseCBpbiB6aXAoZGltcyx4cyl9KTsKICAgICNnZXQgaXQ/CiAgICAjYWxyaWdodCBJJ2xsIHN0b3AKICAgIGR1bXBfcGlja2xlKG9wdHNbJzxvdXRwdXQ+J10sIGRpZCk7Cgo8fGZpbV9zdWZmaXh8PgogICAgIyBVc2luZyB4eiBsZWFkcyB0byB0aGlzIGFueXdheSwgYnV0IGl0J3Mgd29ydGggcmVtaW5kaW5nIHRoZSByZWFkZXIuCiAgICAjIFRvIHBlcm11dGUgaW4gMkQsIHVzZSB0aGUgLS1wZXJtdXRlIGZsYWcuCiAgICByZXR1cm4gdXNlLHJlczsKPHxmaW1fZW5kfD4="]
["a3a02dbbb6220a3ea4e4b3acb73e79c15c44cbf1-3","a3a02dbbb6220a3ea4e4b3acb73e79c15c44cbf1","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0gIwojIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIiIiQ29kZSB0aGF0J3Mgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgb3JnIHNlY3VyaXR5IHBvbGljaWVzIHN1YmNvbW1hbmRzLiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKCmltcG9ydCByZQppbXBvcnQgc3lzCgpmcm9tIGdvb2dsZWNsb3Vkc2RrLmNvcmUgaW1wb3J0IGxvZwoKT1JHQU5JWkFUSU9OX1BSRUZJWCA9ICdvcmdhbml6YXRpb25zLycKCgpkZWYgUmVzb2x2ZU9yZ2FuaXphdGlvblNlY3VyaXR5UG9saWN5SWQob3JnX3NlY3VyaXR5X3BvbGljeSwgZGlzcGxheV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnYW5pemF0aW9uX2lkKToKICAiIiJSZXR1cm5zIHRoZSBzZWN1cml0eSBwb2xpY3kgaWQgdGhhdCBtYXRjaGVzIHRoZSBkaXNwbGF5X25hbWUgaW4gdGhlIG9yZy4KCiAgQXJnczoKICAgIG9yZ19zZWN1cml0eV9wb2xpY3k6IHRoZSBvcmdhbml6YXRpb24gc2VjdXJpdHkgcG9saWN5LgogICAgZGlzcGxheV9uYW1lOiB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzZWN1cml0eSBwb2xpY3kgdG8gYmUgcmVzb2x2ZWQuCiAgICBvcmdhbml6YXRpb25faWQ6IHRoZSBvcmdhbml6YXRpb24gSUQgd2hpY2ggdGhlIHNlY3VyaXR5IHBvbGljeSBiZWxvbmdzIHRvLgoKICBSZXR1cm5zOgogICAgU2VjdXJpdHkgcG9saWN5IHJlc291cmNlIElELgogICIiIgoKICByZXNwb25zZSA9IG9yZ19zZWN1cml0eV9wb2xpY3kuTGlzdCgKICAgICAgcGFyZW50X2lkPW9yZ2FuaXphdGlvbl9pZCwgb25seV9nZW5lcmF0ZV9yZXF1ZXN0PUZhbHNlKQogIHNwX2lkID0gTm9uZQogIGZvciBzcCBpbiByZXNwb25zZVswXS5pdGVtczoKICAgIGlmIHNwLmRpc3BsYXlOYW1lID09IGRpc3BsYXlfbmFtZToKICAgICAgc3BfaWQgPSBzcC5uYW1lCiAgICAgIGJyZWFrCiAgaWYgc3BfaWQgaXMgTm9uZToKICAgIGxvZy5lcnJvcigKICAgICAgICAnSW52YWxpZCBkaXNwbGF5IG5hbWU6IHswfS4gTm8gU2VjdXJpdHkgUG9saWN5IHdpdGggdGhpcyBkaXNwbGF5IG5hbWUgZXhpc3RzLicKICAgICAgICAuZm9ybWF0KGRpc3BsYXlfbmFtZSkpCiAgICBzeXMuZXhpdCgpCiAgcmV0dXJuIHNwX2lkCgoKZGVmIEdldFNlY3VyaXR5UG9saWN5SWQob3JnX3NlY3VyaXR5X3BvbGljeV9jbGllbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5X3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgb3JnYW5pemF0aW9uPU5vbmUpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgIiIiUmV0dXJucyB0aGUgc2VjdXJpdHkgcG9saWN5IGlkIHRoYXQgbWF0Y2hlcyB0aGUgZGlzcGxheV9uYW1lIGluIHRoZSBvcmcuCgogIEFyZ3M6CiAgICBvcmdfc2VjdXJpdHlfcG9saWN5X2NsaWVudDogdGhlIG9yZ2FuaXphdGlvbiBzZWN1cml0eSBwb2xpY3kgY2xpZW50Lgo8fGZpbV9lbmR8Pg=="]
["c269557fa7280d6a41eaa282281016dbd7d5da3f-1","c269557fa7280d6a41eaa282281016dbd7d5da3f","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBzeXMKaW1wb3J0IG9zCmltcG9ydCByb3NweQppbXBvcnQgcm9zYmFnCmltcG9ydCB0ZgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHByaW50IDEKICAgICMgcGFyc2UgY29tbWFuZCBsaW5lCiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nJydiYWcgZmlsZSB0byB0eHQgZmlsZScnJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2lucHV0YmFnJywgaGVscD0naW5wdXQgYmFnIGZpbGUnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnb3V0cHV0dHh0JywgaGVscD0nb3V0IHRleHQgZmlsZScpCiAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQoKICAgIHByaW50ICJQcm9jZXNzaW5nIGJhZyBmaWxlOiIKICAgIHByaW50ICIgIGluOiIsYXJncy5pbnB1dGJhZwogICAgcHJpbnQgIiAgb3V0OiIsYXJncy5vdXRwdXR0eHQKCiAgICBpbmJhZyA9IHJvc2JhZy5CYWcoYXJncy5pbnB1dGJhZywncicpCiAgICBvdXR0eHQgPSBvcGVuKGFyZ3Mub3V0cHV0dHh0LCd3JykKICAgIG91dHR4dC53cml0ZSgnIyB0ZXh0IGZpbGUgZm9yICcrIGFyZ3MuaW5wdXRiYWcgKyAnXG4jIGZvcm1hdDogdGltZSBzdGFtcCB4IHkgeiBxeCBxeSBxeiBxd1xuJykKCiAgICBmb3IgdG9waWMsIG1zZywgdCBpbiBpbmJhZy5yZWFkX21lc3NhZ2VzKCk6CiAgICAgICAgaWYgdG9waWMgPT0gIi9weDRmbG93L29wdF9mbG93IjoKICAgICAgICAgICAgIyBxID0gKG1zZy5wb3NlLm9yaWVudGF0aW9uLngsCiAgICAgICAgICAgICMgICAgIG1zZy5wb3NlLm9yaWVudGF0aW9uLnksCiAgICAgICAgICAgICMgICAgIG1zZy5wb3NlLm9yaWVudGF0aW9uLnosCiAgICAgICAgICAgICMgICAgIG1zZy5wb3NlLm9yaWVudGF0aW9uLncpCiAgICAgICAgICAgICMgeWF3ID0gdGYudHJhbnNmb3JtYXRpb25zLmV1bGVyX2Zyb21fcXVhdGVybmlvbihxKVsyXQogICAgICAgICAgICBvdXR0eHQud3JpdGUoc3RyLmZvcm1hdCgiezA6LjlmfSAiLCB0LnRvX3NlYygpKSkKICAgICAgICAgICAgb3V0dHh0LndyaXRlKHN0ci5mb3JtYXQoInswOi45Zn0gIiwgbXNnLnZlbG9jaXR5X3gpKQo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgb3V0dHh0LndyaXRlKCcwICcpCiAgICAgICAgICAgIG91dHR4dC53cml0ZSgnMCAnKQogICAgICAgICAgICBvdXR0eHQud3JpdGUoJzBcbicpCiAgICAgICAgICAgICMgb3V0dHh0LndyaXRlKHN0ci5mb3JtYXQoInswOi45Zn0gIiwgbXNnLnBvc2Uub3JpZW50YXRpb24ueCkpCiAgICAgICAgICAgICMgb3V0dHh0LndyaXRlKHN0ci5mb3JtYXQoInswOi45Zn0gIiwgbXNnLnBvc2Uub3JpZW50YXRpb24ueSkpCiAgICAgICAgICAgICMgb3V0dHh0LndyaXRlKHN0ci5mb3JtYXQoInswOi45Zn0gIiwgbXNnLnBvc2Uub3JpZW50YXRpb24ueikpCiAgICAgICAgICAgICMgb3V0dHh0LndyaXRlKHN0ci5mb3JtYXQoInswOi45Zn1cbiIsIG1zZy5wb3NlLm9yaWVudGF0aW9uLncpKQoKIyB0b3BpYyA9ICIvcHg0Zmxvdy9vcHRfZmxvdyIKIyBoZWFkZXIgZ3JvdW5kX2Rpc3RhbmNlIGZsb3dfeCBmbG93X3kgdmVsb2NpdHlfeCB2ZWxvY2l0eV95IHF1YWxpdHkKIyB0b3BpYyA9ICIvdmljb25feGIvdmljb25Qb3NlVG9waWMiCiMgaGVhZGVyIHBvc2UucG9zaXRpb24oeCwgeSwgeikgcG9zZS5vcmllbnRhdGlvbih4LCB5LCB6LCB3KSB2ZWwoeCwgeSwgeikKIyB0b3BpYyA9ICIvY29ycmVsYXRpb25fZmxvd19ub2RlL2NvcnJGbG93X3ZlbG9jaXR5IgojIG1zZy50d2lzdC5saW5lYXIueCBtc2cudHdpc3QubGluZWFyLnkKCiMgdXNlIHQudG9fc2VjKCkgb3IgbXNnLmhlYWRlci5zdGFtcC50b19zZWMoKSA/Pz8KCiMgZXVsZXIgPSB0Zi50cmFuc2Zvcm1hdGlvbnMuZXVsZXJfZnJvbV9xdWF0ZXJuaW9uKHF1YXRlcm5pb24pCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIG91dHR4dC53cml0ZShzdHIuZm9ybWF0KCJ7MDouOWZ9ICIsIG1zZy52ZWxvY2l0eV95KSkKICAgICAgICAgICAgIyBvdXR0eHQud3JpdGUoc3RyLmZvcm1hdCgiezA6LjlmfSAiLCB5YXcpKQogICAgICAgICAgICBvdXR0eHQud3JpdGUoJzAgJykKICAgICAgICAgICAgb3V0dHh0LndyaXRlKCcwICcpCjx8ZmltX2VuZHw+"]
["c2b1b48b7029588e631fa7edf0ae377eb25c5801-4","c2b1b48b7029588e631fa7edf0ae377eb25c5801","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiIgpDQm90IENvbnN0YW50cwoiIiIKCicnJwrmr4/kuKrlj6XlrZDmnIDlpKfplb/luqYKJycnClNUQVRFTUVOVF9URVhUX01BWF9MRU5HVEggPSA0MDAKCiMg5qCH562+55qE5pyA5aSn6ZW/5bqmClRBR19OQU1FX01BWF9MRU5HVEggPSA1MAoKREVGQVVMVF9TVE9SQUdFX0FEQVBURVIgPSAnY2JvdC5hZGFwdGVycy5zdG9yYWdlYWRhcHRlcnMuU1FMU3RvcmFnZUFkYXB0ZXInCkRFRkFVTFRfTk9fS05PV0xFREdFX0FEQVBURVIgPSAnY2JvdC5hZGFwdGVycy5ub2tub3dsZWRnZWFkYXB0ZXJzLk5vS25vd2xlZGdlQWRhcHRlcicKREVGQVVMVF9DT1JFX0FEQVBURVIgPSAnY2JvdC5hZGFwdGVycy5jb3JlYWRhcHRlcnMuQmVzdE1hdGNoJwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CkRFRkFVTFRfSU5QVVRfQURBUFRFUiA9ICdjYm90LmFkYXB0ZXJzLmlucHV0YWRhcHRlcnMuVmFyaWFibGVJbnB1dFR5cGVBZGFwdGVyJwpERUZBVUxUX09VVFBVVF9BREFQVEVSID0gJ2Nib3QuYWRhcHRlcnMub3V0cHV0YWRhcHRlcnMuT3V0cHV0QWRhcHRlcicKREVGQVVMVF9UUkFJTkVSID0gJ2Nib3QubWFpbi50cmFpbmVycy5MaXN0VHJhaW5lcicKCjx8ZmltX2VuZHw+"]
["66729c941d7f4290ea6cfd0eb5ee7e470fe01a6e-5","66729c941d7f4290ea6cfd0eb5ee7e470fe01a6e","PHxmaW1fcHJlZml4fD4KIiIiClJFU1QgQVBJIFJlc291cmNlIFJvdXRpbmcKaHR0cDovL2ZsYXNrLXJlc3RwbHVzLnJlYWR0aGVkb2NzLmlvCiIiIgoKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKZnJvbSBmbGFzayBpbXBvcnQgcmVxdWVzdApmcm9tIGZsYXNrX3Jlc3RwbHVzIGltcG9ydCBSZXNvdXJjZQoKZnJvbSAuc2VjdXJpdHkgaW1wb3J0IHJlcXVpcmVfYXV0aApmcm9tIC4gaW1wb3J0IGFwaV9yZXN0Cgpmcm9tIC4ubW9kZWxzIGltcG9ydCBVc2VyLCBMYWJlbCwgTWVhbAoKY2xhc3MgU2VjdXJlUmVzb3VyY2UoUmVzb3VyY2UpOgogICAgIiIiIENhbGxzIHJlcXVpcmVfYXV0aCBkZWNvcmF0b3Igb24gYWxsIHJlcXVlc3RzICIiIgogICAgbWV0aG9kX2RlY29yYXRvcnMgPSBbcmVxdWlyZV9hdXRoXQoKQGFwaV9yZXN0LnJvdXRlKCIvdXNlcnMiKQpjbGFzcyBVc2VycyhSZXNvdXJjZSk6CiAgICBkZWYgZ2V0KHNlbGYpOgogICAgICAgIHJldHVybiBbby5kaWN0KCkgZm9yIG8gaW4gVXNlci5xdWVyeS5hbGwoKV0KCkBhcGlfcmVzdC5yb3V0ZSgiL2xhYmVscyIpCmNsYXNzIExhYmVscyhSZXNvdXJjZSk6CiAgICBkZWYgZ2V0KHNlbGYpOgogICAgICAgIHJldHVybiBbby5kaWN0KCkgZm9yIG8gaW4gTGFiZWwucXVlcnkuYWxsKCldCgpAYXBpX3Jlc3Qucm91dGUoIi9tZWFscyIpCmNsYXNzIE1lYWxzKFJlc291cmNlKToKICAgIGRlZiBnZXQoc2VsZik6CiAgICAgICAgcmV0dXJuIFtvLmRpY3QoKSBmb3IgbyBpbiBNZWFsLnF1ZXJ5LmFsbCgpXQoKIyBAYXBpX3Jlc3Qucm91dGUoJy9yZXNvdXJjZS88c3RyaW5nOnJlc291cmNlX2lkPicpCiMgY2xhc3MgUmVzb3VyY2VPbmUoUmVzb3VyY2UpOgojICAgICAiIiIgVW5zZWN1cmUgUmVzb3VyY2UgQ2xhc3M6IEluaGVyaXQgZnJvbSBSZXNvdXJjZSAiIiIKIwojICAgICBkZWYgZ2V0KHNlbGYsIHJlc291cmNlX2lkKToKIyAgICAgICAgIHRpbWVzdGFtcCA9IGRhdGV0aW1lLnV0Y25vdygpLmlzb2Zvcm1hdCgpCiMgICAgICAgICByZXR1cm4geyd0aW1lc3RhbXAnOiB0aW1lc3RhbXB9CiMKIyAgICAgZGVmIHBvc3Qoc2VsZiwgcmVzb3VyY2VfaWQpOgojICAgICAgICAganNvbl9wYXlsb2FkID0gcmVxdWVzdC5qc29uCiMgICAgICAgICByZXR1cm4geyd0aW1lc3RhbXAnOiBqc29uX3BheWxvYWR9LCAyMDEKIwojCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBAYXBpX3Jlc3Qucm91dGUoJy9zZWN1cmUtcmVzb3VyY2UvPHN0cmluZzpyZXNvdXJjZV9pZD4nKQojIGNsYXNzIFNlY3VyZVJlc291cmNlT25lKFNlY3VyZVJlc291cmNlKToKIyAgICAgIiIiIFVuc2VjdXJlIFJlc291cmNlIENsYXNzOiBJbmhlcml0IGZyb20gUmVzb3VyY2UgIiIiCiMKPHxmaW1fZW5kfD4="]
["9fcffb49669687c0507069450ce2097cc2c77c1b-1","9fcffb49669687c0507069450ce2097cc2c77c1b","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgb3MKaW1wb3J0IHBsYXRmb3JtCmltcG9ydCBzaHV0aWwKaW1wb3J0IHN5cwpmcm9tIGRpc3R1dGlscy5jb21tYW5kLmNvbmZpZyBpbXBvcnQgY29uZmlnIGFzIF9jb25maWcKZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBjaGVja19vdXRwdXQKZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKCmZyb20gc2V0dXB0b29scyBpbXBvcnQgQ29tbWFuZCwgZmluZF9wYWNrYWdlcywgc2V0dXAKZnJvbSBzZXR1cHRvb2xzLmNvbW1hbmQuYnVpbGRfZXh0IGltcG9ydCBidWlsZF9leHQgYXMgX2J1aWxkX2V4dApmcm9tIHNldHVwdG9vbHMuZXh0ZW5zaW9uIGltcG9ydCBFeHRlbnNpb24KCmltcG9ydCB2ZXJzaW9uZWVyCgoKY2xhc3MgY29uZmlnKF9jb25maWcpOgogICAgZGVmIHJ1bihzZWxmKSAtPiBOb25lOgogICAgICAgIGZyb20gYm5fY29uZmlnIGltcG9ydCBjcmVhdGVfY29uZmlnX2gKCiAgICAgICAgY3JlYXRlX2NvbmZpZ19oKHNlbGYpCgoKY2xhc3MgY2xlYW4oQ29tbWFuZCk6CiAgICB1c2VyX29wdGlvbnMgPSBbKCJhbGwiLCAiYSIsICIiKV0KCiAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpIC0+IE5vbmU6CiAgICAgICAgc2VsZi5hbGwgPSBUcnVlCiAgICAgICAgc2VsZi5kZWxldGVfZGlycyA9IFtdCiAgICAgICAgc2VsZi5kZWxldGVfZmlsZXMgPSBbXQoKICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsaygiYm90dGxlbmVjayIpOgogICAgICAgICAgICBmb3IgZCBpbiBkaXJzOgogICAgICAgICAgICAgICAgaWYgZCA9PSAiX19weWNhY2hlX18iOgogICAgICAgICAgICAgICAgICAgIHNlbGYuZGVsZXRlX2RpcnMuYXBwZW5kKG9zLnBhdGguam9pbihyb290LCBkKSkKCiAgICAgICAgICAgIGlmICJfX3B5Y2FjaGVfXyIgaW4gcm9vdDoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKICAgICAgICAgICAgICAgIGlmIGYuZW5kc3dpdGgoIi5weWMiKSBvciBmLmVuZHN3aXRoKCIuc28iKToKICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbGV0ZV9maWxlcy5hcHBlbmQob3MucGF0aC5qb2luKHJvb3QsIGYpKQoKICAgICAgICAgICAgICAgIGlmIGYuZW5kc3dpdGgoIi5jIikgYW5kICJ0ZW1wbGF0ZSIgaW4gZjoKICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWRfZmlsZSA9IG9zLnBhdGguam9pbihyb290LCBmLnJlcGxhY2UoIl90ZW1wbGF0ZSIsICIiKSkKICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhnZW5lcmF0ZWRfZmlsZSk6CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVsZXRlX2ZpbGVzLmFwcGVuZChnZW5lcmF0ZWRfZmlsZSkKCiAgICAgICAgY29uZmlnX2ggPSAiYm90dGxlbmVjay9pbmNsdWRlL2JuX2NvbmZpZy5oIgogICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbmZpZ19oKToKICAgICAgICAgICAgc2VsZi5kZWxldGVfZmlsZXMuYXBwZW5kKGNvbmZpZ19oKQoKICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiYnVpbGQiKToKICAgICAgICAgICAgc2VsZi5kZWxldGVfZGlycy5hcHBlbmQoImJ1aWxkIikKCiAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKSAtPiBOb25lOgogICAgICAgIHBhc3MKCiAgICBkZWYgcnVuKHNlbGYpIC0+IE5vbmU6CiAgICAgICAgZm9yIGRlbGV0ZV9kaXIgaW4gc2VsZi5kZWxldGVfZGlyczoKICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkZWxldGVfZGlyKQogICAgICAgIGZvciBkZWxldGVfZmlsZSBpbiBzZWxmLmRlbGV0ZV9maWxlczoKICAgICAgICAgICAgb3MudW5saW5rKGRlbGV0ZV9maWxlKQoKCiMgd29ya2Fyb3VuZCBmb3IgaW5zdGFsbGluZyBib3R0bGVuZWNrIHdoZW4gbnVtcHkgaXMgbm90IHByZXNlbnQKY2xhc3MgYnVpbGRfZXh0KF9idWlsZF9leHQpOgogICAgIyB0YWtlbiBmcm9tOiBzdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTk5MTk5MDUvCiAgICAjIGhvdy10by1ib290c3RyYXAtbnVtcHktaW5zdGFsbGF0aW9uLWluLXNldHVwLXB5IzIxNjIxNjg5CiAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKSAtPiBOb25lOgogICAgICAgIF9idWlsZF9leHQuZmluYWxpemVfb3B0aW9ucyhzZWxmKQogICAgICAgICMgcHJldmVudCBudW1weSBmcm9tIHRoaW5raW5nIGl0IGlzIHN0aWxsIGluIGl0cyBzZXR1cCBwcm9jZXNzCiAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgzLCk6CiAgICAgICAgICAgIGltcG9ydCBfX2J1aWx0aW5fXyBhcyBidWlsdGlucwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGltcG9ydCBidWlsdGlucwogICAgICAgIGJ1aWx0aW5zLl9fTlVNUFlfU0VUVVBfXyA9IEZhbHNlCiAgICAgICAgaW1wb3J0IG51bXB5CgogICAgICAgICMgcGxhY2UgbnVtcHkgaW5jbHVkZXMgZmlyc3QsIHNlZSBnaCAjMTU2CiAgICAgICAgc2VsZi5pbmNsdWRlX2RpcnMuaW5zZXJ0KDAsIG51bXB5LmdldF9pbmNsdWRlKCkpCiAgICAgICAgc2VsZi5pbmNsdWRlX2RpcnMuYXBwZW5kKCJib3R0bGVuZWNrL3NyYyIpCiAgICAgICAgc2VsZi5pbmNsdWRlX2RpcnMuYXBwZW5kKCJib3R0bGVuZWNrL2luY2x1ZGUiKQoKICAgIGRlZiBidWlsZF9leHRlbnNpb25zKHNlbGYpIC0+IE5vbmU6CiAgICAgICAgZnJvbSBibl90ZW1wbGF0ZSBpbXBvcnQgbWFrZV9jX2ZpbGVzCgogICAgICAgIHNlbGYucnVuX2NvbW1hbmQoImNvbmZpZyIpCiAgICAgICAgbWFrZV9jX2ZpbGVzKCkKCiAgICAgICAgX2J1aWxkX2V4dC5idWlsZF9leHRlbnNpb25zKHNlbGYpCgoKY21kY2xhc3MgPSB2ZXJzaW9uZWVyLmdldF9jbWRjbGFzcygpCmNtZGNsYXNzWyJidWlsZF9leHQiXSA9IGJ1aWxkX2V4dApjbWRjbGFzc1siY2xlYW4iXSA9IGNsZWFuCmNtZGNsYXNzWyJjb25maWciXSA9IGNvbmZpZwoKCmRlZiBpc19vbGRfZ2NjKCkgLT4gYm9vbDoKICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAid2luMzIiOgogICAgICAgIGdjY192ZXJzaW9uID0gY2hlY2tfb3V0cHV0KFsiZ2NjIiwgIi1kdW1wdmVyc2lvbiJdKS5kZWNvZGUoInV0ZjgiKS5zcGxpdCgiLiIpWzBdCiAgICAgICAgaWYgaW50KGdjY192ZXJzaW9uKSA8IDU6CiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICByZXR1cm4gRmFsc2UKCgpJU19PTERfR0NDID0gaXNfb2xkX2djYygpCkRFRkFVTFRfRkxBR1MgPSBbIi1PMiJdCmlmIElTX09MRF9HQ0M6CiAgICBERUZBVUxUX0ZMQUdTLmFwcGVuZCgiLXN0ZD1nbnUxMSIpCgojIEFkZCBvdXIgdGVtcGxhdGUgcGF0aCB0byB0aGUgcGF0aCBzbyB0aGF0IHdlIGRvbid0IGhhdmUgYSBjaXJjdWxhciByZWZlcmVuY2UKIyBvZiB3b3JraW5nIGluc3RhbGwgdG8gYmUgYWJsZSB0byByZS1jb21waWxlCnN5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgImJvdHRsZW5lY2svc3JjIikpCgoKZGVmIGdldF9jcHVfYXJjaF9mbGFncygpIC0+IExpc3Rbc3RyXToKICAgIGlmIHBsYXRmb3JtLnByb2Nlc3NvcigpID09ICJwcGM2NGxlIjoKICAgICAgICAjIE5lZWRlZCB0byBzdXBwb3J0IFNTRTIgaW50cmluc2ljcwogICAgICAgIHJldHVybiBbIi1ETk9fV0FSTl9YODZfSU5UUklOU0lDUyJdCiAgICBlbHNlOgogICAgICAgIHJldHVybiBbXQoKCmRlZiBwcmVwYXJlX21vZHVsZXMoKSAtPiBMaXN0W0V4dGVuc2lvbl06CiAgICBiYXNlX2luY2x1ZGVzID0gWwogICAgICAgICJib3R0bGVuZWNrL2luY2x1ZGUvYm90dGxlbmVjay5oIiwKICAgICAgICAiYm90dGxlbmVjay9pbmNsdWRlL2JuX2NvbmZpZy5oIiwKICAgICAgICAiYm90dGxlbmVjay9pbmNsdWRlL2l0ZXJhdG9ycy5oIiwKICAgIF0KCiAgICBhcmNoX2ZsYWdzID0gZ2V0X2NwdV9hcmNoX2ZsYWdzKCkKCiAgICBleHQgPSBbCiAgICAgICAgRXh0ZW5zaW9uKAogICAgICAgICAgICAiYm90dGxlbmVjay5yZWR1Y2UiLAogICAgICAgICAgICBzb3VyY2VzPVsiYm90dGxlbmVjay9zcmMvcmVkdWNlLmMiXSwKICAgICAgICAgICAgZGVwZW5kcz1iYXNlX2luY2x1ZGVzLAogICAgICAgICAgICBleHRyYV9jb21waWxlX2FyZ3M9REVGQVVMVF9GTEFHUyArIGFyY2hfZmxhZ3MsCiAgICAgICAgKQogICAgXQogICAgZXh0ICs9IFsKICAgICAgICBFeHRlbnNpb24oCiAgICAgICAgICAgICJib3R0bGVuZWNrLm1vdmUiLAogICAgICAgICAgICBzb3VyY2VzPVsKICAgICAgICAgICAgICAgICJib3R0bGVuZWNrL3NyYy9tb3ZlLmMiLAogICAgICAgICAgICAgICAgImJvdHRsZW5lY2svc3JjL21vdmVfbWVkaWFuL21vdmVfbWVkaWFuLmMiLAogICAgICAgICAgICBdLAogICAgICAgICAgICBkZXBlbmRzPWJhc2VfaW5jbHVkZXMgKyBbImJvdHRsZW5lY2svc3JjL21vdmVfbWVkaWFuL21vdmVfbWVkaWFuLmgiXSwKICAgICAgICAgICAgZXh0cmFfY29tcGlsZV9hcmdzPURFRkFVTFRfRkxBR1MgKyBhcmNoX2ZsYWdzLAogICAgICAgICkKICAgIF0KICAgIGV4dCArPSBbCiAgICAgICAgRXh0ZW5zaW9uKAogICAgICAgICAgICAiYm90dGxlbmVjay5ub25yZWR1Y2UiLAogICAgICAgICAgICBzb3VyY2VzPVsiYm90dGxlbmVjay9zcmMvbm9ucmVkdWNlLmMiXSwKICAgICAgICAgICAgZGVwZW5kcz1iYXNlX2luY2x1ZGVzLAogICAgICAgICAgICBleHRyYV9jb21waWxlX2FyZ3M9REVGQVVMVF9GTEFHUyArIGFyY2hfZmxhZ3MsCiAgICAgICAgKQogICAgXQogICAgZXh0ICs9IFsKICAgICAgICBFeHRlbnNpb24oCiAgICAgICAgICAgICJib3R0bGVuZWNrLm5vbnJlZHVjZV9heGlzIiwKICAgICAgICAgICAgc291cmNlcz1bImJvdHRsZW5lY2svc3JjL25vbnJlZHVjZV9heGlzLmMiXSwKICAgICAgICAgICAgZGVwZW5kcz1iYXNlX2luY2x1ZGVzLAogICAgICAgICAgICBleHRyYV9jb21waWxlX2FyZ3M9REVGQVVMVF9GTEFHUyArIGFyY2hfZmxhZ3MsCiAgICAgICAgKQogICAgXQogICAgcmV0dXJuIGV4dAoKCmRlZiBnZXRfbG9uZ19kZXNjcmlwdGlvbigpIC0+IHN0cjoKICAgIHdpdGggb3BlbigiUkVBRE1FLnJzdCIsICJyIikgYXMgZmlkOgogICAgICAgIGxvbmdfZGVzY3JpcHRpb24gPSBmaWQucmVhZCgpCiAgICBpZHggPSBtYXgoMCwgbG9uZ19kZXNjcmlwdGlvbi5maW5kKCJCb3R0bGVuZWNrIGlzIGEgY29sbGVjdGlvbiIpKQogICAgbG9uZ19kZXNjcmlwdGlvbiA9IGxvbmdfZGVzY3JpcHRpb25baWR4Ol0KICAgIHJldHVybiBsb25nX2Rlc2NyaXB0aW9uCgoKQ0xBU1NJRklFUlMgPSBbCiAgICAiRGV2ZWxvcG1lbnQgU3RhdHVzIDo6IDUgLSBQcm9kdWN0aW9uL1N0YWJsZSIsCiAgICAiRW52aXJvbm1lbnQgOjogQ29uc29sZSIsCiAgICAiSW50ZW5kZWQgQXVkaWVuY2UgOjogU2NpZW5jZS9SZXNlYXJjaCIsCiAgICAiSW50ZW5kZWQgQXVkaWVuY2UgOjogRmluYW5jaWFsIGFuZCBJbnN1cmFuY2UgSW5kdXN0cnkiLAogICAgIkxpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEJTRCBMaWNlbnNlIiwKICAgICJPcGVyYXRpbmcgU3lzdGVtIDo6IE9TIEluZGVwZW5kZW50IiwKICAgICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBDIiwKICAgICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24iLAogICAgIlByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzIiwKICAgICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy42IiwKICAgICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy43IiwKICAgICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy44IiwKICAgICJUb3BpYyA6OiBTY2llbnRpZmljL0VuZ2luZWVyaW5nIiwKICAgICJUb3BpYyA6OiBTY2llbnRpZmljL0VuZ2luZWVyaW5nIiwKXQoKCm1ldGFkYXRhID0gZGljdCgKICAgIG5hbWU9IkJvdHRsZW5lY2siLAogICAgbWFpbnRhaW5lcj0iQ2hyaXN0b3BoZXIgV2hlbGFuIiwKICAgIG1haW50YWluZXJfZW1haWw9ImJvdHRsZS1uZWNrQGdvb2dsZWdyb3Vwcy5jb20iLAogICAgZGVzY3JpcHRpb249IkZhc3QgTnVtUHkgYXJyYXkgZnVuY3Rpb25zIHdyaXR0ZW4gaW4gQyIsCiAgICBsb25nX2Rlc2NyaXB0aW9uPWdldF9sb25nX2Rlc2NyaXB0aW9uKCksCiAgICBsb25nX2Rlc2NyaXB0aW9uX2NvbnRlbnRfdHlwZT0idGV4dC94LXJzdCIsCiAgICB1cmw9Imh0dHBzOi8vZ2l0aHViLmNvbS9weWRhdGEvYm90dGxlbmVjayIsCiAgICBkb3dubG9hZF91cmw9Imh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Cb3R0bGVuZWNrIiwKICAgIGxpY2Vuc2U9IlNpbXBsaWZpZWQgQlNEIiwKICAgIGNsYXNzaWZpZXJzPUNMQVNTSUZJRVJTLAogICAgcGxhdGZvcm1zPSJPUyBJbmRlcGVuZGVudCIsCiAgICB2ZXJzaW9uPXZlcnNpb25lZXIuZ2V0X3ZlcnNpb24oKSwKPHxmaW1faG9sZXw+CiAgICAgICAgImRvYyI6IFsibnVtcHlkb2MiLCAic3BoaW54IiwgImdpdHB5dGhvbiJdLAogICAgICAgICJ0ZXN0IjogWyJoeXBvdGhlc2lzIiwgInB5dGVzdCJdLAogICAgfSwKICAgIGNtZGNsYXNzPWNtZGNsYXNzLAogICAgc2V0dXBfcmVxdWlyZXM9WyJudW1weSJdLAogICAgZXh0X21vZHVsZXM9cHJlcGFyZV9tb2R1bGVzKCksCiAgICBweXRob25fcmVxdWlyZXM9Ij49My42IiwKICAgIHppcF9zYWZlPUZhbHNlLAopCgoKc2V0dXAoKiptZXRhZGF0YSkKPHxmaW1fc3VmZml4fD4KICAgIHBhY2thZ2VzPWZpbmRfcGFja2FnZXMoKSwKICAgIHBhY2thZ2VfZGF0YT17ImJvdHRsZW5lY2siOiBbIkxJQ0VOU0UiLCAidGVzdHMvZGF0YS8qKi8qLmMiXX0sCiAgICBpbnN0YWxsX3JlcXVpcmVzPVsibnVtcHkiXSwKICAgIGV4dHJhc19yZXF1aXJlPXsKPHxmaW1fZW5kfD4="]
["b0ad99968fd91a3a62160f0fa9b5ab602efa43dd-2","b0ad99968fd91a3a62160f0fa9b5ab602efa43dd","PHxmaW1fcHJlZml4fD4KJycnCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyAgICAgIEZpbGVOYW1lOiBjb2xvcl9wcmludC5weQojICAgICAgICAgIERlc2M6IFRvIGdldCBjb2xvcmVkIG91dHB1dCBvbiB0aGUgdGVybWluYWwKIyAgICAgICAgQXV0aG9yOiBWaWthcyBHdXB0YQojICAgICAgICAgRW1haWw6IHZpa2FzZ3VwdGEubml0QGdtYWlsLmNvbQojICAgICAgSG9tZVBhZ2U6CiMgICAgICAgVmVyc2lvbjogMC4wLjEKIyAgICBMYXN0Q2hhbmdlOiAyMDE2LTAxLTA3IDE5OjEyOjQ2CiMgICAgICAgSGlzdG9yeToKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CicnJwoKCmNsYXNzIEJDb2xvcnM6Cjx8ZmltX2VuZHw+"]
["6c057b824018f2f56397cb812ea86620e5356cd9-2","6c057b824018f2f56397cb812ea86620e5356cd9","PHxmaW1fcHJlZml4fD4KIyBNSVQgTGljZW5zZQoKIyBDb3B5cmlnaHQgKGMpIDIwMjIgWmVuaXRzdSBQcmprdOKEogoKIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CiMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPHxmaW1fZW5kfD4="]
["b063b38676a9dcbd7019e7623e6433cd2dd22a6e-4","b063b38676a9dcbd7019e7623e6433cd2dd22a6e","PHxmaW1fcHJlZml4fD4KIiIiaW5pdGlhbGl6ZS4iIiIKIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDEuMTEuNSBvbiAyMDE3LTA5LTIyIDA4OjA5CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscwoKZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMsIG1vZGVscwppbXBvcnQgZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbgppbXBvcnQgZGphbmdvLnV0aWxzLnRpbWV6b25lCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKICAgICIiIk1pZ2ZyYXRpb25zLiIiIgoKICAgIGluaXRpYWwgPSBUcnVlCgogICAgZGVwZW5kZW5jaWVzID0gWwogICAgXQoKICAgIG9wZXJhdGlvbnMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5DcmVhdGVNb2RlbCgKICAgICAgICAgICAgbmFtZT0nVGFzaycsCiAgICAgICAgICAgIGZpZWxkcz1bCiAgICAgICAgICAgICAgICAoJ2lkJywgbW9kZWxzLkF1dG9GaWVsZChhdXRvX2NyZWF0ZWQ9VHJ1ZSwgcHJpbWFyeV9rZXk9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdJRCcpKSwKICAgICAgICAgICAgICAgICgndGFza19qb2InLCBtb2RlbHMuVGV4dEZpZWxkKCkpLAogICAgICAgICAgICAgICAgKCdjb21wbGV0ZScsIG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdD1GYWxzZSkpLAogICAgICAgICAgICBdLAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5DcmVhdGVNb2RlbCgKICAgICAgICAgICAgbmFtZT0nVXNlcicsCiAgICAgICAgICAgIGZpZWxkcz1bCiAgICAgICAgICAgICAgICAoJ2lkJywgbW9kZWxzLkF1dG9GaWVsZChhdXRvX2NyZWF0ZWQ9VHJ1ZSwgcHJpbWFyeV9rZXk9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdJRCcpKSwKICAgICAgICAgICAgICAgICgnZmlyc3RfTmFtZScsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNTUpKSwKICAgICAgICAgICAgICAgICgnbGFzdF9OYW1lJywgbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSkpLAogICAgICAgICAgICAgICAgKCdlbWFpbCcsIG1vZGVscy5FbWFpbEZpZWxkKG1heF9sZW5ndGg9MjU1KSksCiAgICAgICAgICAgICAgICAoJ3Bhc3N3b3JkJywgbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTIwMCkpLAogICAgICAgICAgICAgICAgKCdqb2luX2RhdGUnLAogICAgICAgICAgICAgICAgICAgIG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGphbmdvLnV0aWxzLnRpbWV6b25lLm5vdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZT1GYWxzZSkpLAogICAgICAgICAgICBdLAogICAgICAgICksCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBtaWdyYXRpb25zLkFkZEZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSd0YXNrJywKICAgICAgICAgICAgbmFtZT0ndXNlcicsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5Gb3JlaWduS2V5KAo8fGZpbV9lbmR8Pg=="]
["06d1c1edc1d7dc6099f2b6a71498d3db33681c0e-2","06d1c1edc1d7dc6099f2b6a71498d3db33681c0e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGZ1bmN0b29scwoKaW1wb3J0IGRhc2hfY29yZV9jb21wb25lbnRzIGFzIGRjYwppbXBvcnQgZGFzaF9ib290c3RyYXBfY29tcG9uZW50cyBhcyBkYmMKaW1wb3J0IGRhc2hfaHRtbF9jb21wb25lbnRzIGFzIGh0bWwKZnJvbSBkYXNoLmRlcGVuZGVuY2llcyBpbXBvcnQgT3V0cHV0LCBJbnB1dCwgU3RhdGUKZnJvbSBzcWxhbGNoZW15Lm9ybSBpbXBvcnQgU2Vzc2lvbgpmcm9tIGNvdmlnYXRvci5kYXNoYm9hcmQuZmlndXJlcy5zYW1wbGVzIGltcG9ydCBTYW1wbGVGaWd1cmVzCmZyb20gY292aWdhdG9yLmRhdGFiYXNlLm1vZGVsIGltcG9ydCBEYXRhU291cmNlCmZyb20gY292aWdhdG9yLmRhdGFiYXNlLnF1ZXJpZXMgaW1wb3J0IFF1ZXJpZXMKCklEX0FQUExZX0JVVFRPTSA9ICdzLWFwcGx5LWJ1dHRvbScKCkRFRkFVTFRfREFUQV9TT1VSQ0UgPSBEYXRhU291cmNlLkVOQS5uYW1lCgpJRF9TTElERVJfTUlOX1NBTVBMRVMgPSAnc2xpZGVyLW1pbi1zYW1wbGVzLXBlci1jb3VudHJ5JwpJRF9EUk9QRE9XTl9EQVRBX1NPVVJDRSA9ICJkcm9wZG93bi1kYXRhLXNvdXJjZSIKSURfRFJPUERPV05fQ09VTlRSWSA9ICdkcm9wZG93bi1jb3VudHJ5JwpJRF9EUk9QRE9XTl9HRU5FID0gJ2Ryb3Bkb3duLWdlbmUtb3ZlcmFsbC1tdXRhdGlvbnMnCklEX0FDQ1VNVUxBVEVEX1NBTVBMRVNfR1JBUEggPSAnYWNjdW11bGF0ZWQtc2FtcGxlcy1wZXItY291bnRyeScKSURfRE5fRFNfR1JBUEggPSAnZG5fZHNfZ3JhcGgnCgoKQGZ1bmN0b29scy5scnVfY2FjaGUoKQpkZWYgZ2V0X3RhYl9zYW1wbGVzKHF1ZXJpZXM6IFF1ZXJpZXMpOgogICAgcmV0dXJuIGRiYy5DYXJkQm9keSgKICAgICAgICAgICAgY2hpbGRyZW49WwogICAgICAgICAgICAgICAgZ2V0X3NhbXBsZXNfdGFiX2xlZnRfYmFyKHF1ZXJpZXMpLAogICAgICAgICAgICAgICAgaHRtbC5EaXYoCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPSJvbmUgY29sdW1uIiwKICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbj1baHRtbC5CcigpXSksCiAgICAgICAgICAgICAgICBnZXRfc2FtcGxlc190YWJfZ3JhcGhzKCkKICAgICAgICBdKQoKCmRlZiBnZXRfc2FtcGxlc190YWJfZ3JhcGhzKCk6CiAgICByZXR1cm4gaHRtbC5EaXYoCiAgICAgICAgY2xhc3NOYW1lPSJuaW5lIGNvbHVtbnMiLAogICAgICAgIGNoaWxkcmVuPVsKICAgICAgICAgICAgaHRtbC5CcigpLAogICAgICAgICAgICBodG1sLkRpdihpZD1JRF9BQ0NVTVVMQVRFRF9TQU1QTEVTX0dSQVBIKSwKICAgICAgICAgICAgaHRtbC5CcigpLAogICAgICAgICAgICBodG1sLkRpdihpZD1JRF9ETl9EU19HUkFQSCksCiAgICAgICAgXSkKCgpkZWYgZ2V0X3NhbXBsZXNfdGFiX2xlZnRfYmFyKHF1ZXJpZXM6IFF1ZXJpZXMpOgogICAgcmV0dXJuIGh0bWwuRGl2KAogICAgICAgIGNsYXNzTmFtZT0idHdvIGNvbHVtbnMiLAogICAgICAgIGNoaWxkcmVuPVsKICAgICAgICAgICAgaHRtbC5CcigpLAogICAgICAgICAgICBkY2MuTWFya2Rvd24oIiIiU2VsZWN0IGRhdGEgc291cmNlIiIiKSwKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICB2YWx1ZT1ERUZBVUxUX0RBVEFfU09VUkNFLAogICAgICAgICAgICAgICAgY2xlYXJhYmxlPUZhbHNlLAogICAgICAgICAgICAgICAgbXVsdGk9RmFsc2UKICAgICAgICAgICAgKSwKICAgICAgICAgICAgaHRtbC5CcigpLAogICAgICAgICAgICBkY2MuTWFya2Rvd24oIiIiU2VsZWN0IG9uZSBvciBtb3JlIGNvdW50cmllcyIiIiksCiAgICAgICAgICAgIGRjYy5Ecm9wZG93bigKICAgICAgICAgICAgICAgIGlkPUlEX0RST1BET1dOX0NPVU5UUlksCiAgICAgICAgICAgICAgICBvcHRpb25zPVt7J2xhYmVsJzogYywgJ3ZhbHVlJzogY30gZm9yIGMgaW4gcXVlcmllcy5nZXRfY291bnRyaWVzKERFRkFVTFRfREFUQV9TT1VSQ0UpXSwKICAgICAgICAgICAgICAgIHZhbHVlPU5vbmUsCiAgICAgICAgICAgICAgICBtdWx0aT1UcnVlCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGh0bWwuQnIoKSwKICAgICAgICAgICAgZGNjLk1hcmtkb3duKCIiIk1pbmltdW0gbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGNvdW50cnkiIiIpLAogICAgICAgICAgICBkY2MuU2xpZGVyKAogICAgICAgICAgICAgICAgaWQ9SURfU0xJREVSX01JTl9TQU1QTEVTLAogICAgICAgICAgICAgICAgbWluPTAsCiAgICAgICAgICAgICAgICBtYXg9MTAwMDAsCiAgICAgICAgICAgICAgICBzdGVwPTEwMCwKICAgICAgICAgICAgICAgIHZhbHVlPTEwMCwKICAgICAgICAgICAgICAgIGRvdHM9RmFsc2UsCiAgICAgICAgICAgICAgICBtYXJrcz17aTogJ3t9Jy5mb3JtYXQoaSkgZm9yIGkgaW4gWzAsIDI1MDAsIDUwMDAsIDc1MDAsIDEwMDAwXX0sCiAgICAgICAgICAgICAgICB0b29sdGlwPWRpY3QoYWx3YXlzX3Zpc2libGU9VHJ1ZSwgcGxhY2VtZW50PSJyaWdodCIpCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGh0bWwuQnIoKSwKICAgICAgICAgICAgZGNjLk1hcmtkb3duKCIiIlNlbGVjdCBvbmUgb3IgbW9yZSBnZW5lcyB0byBzaG93IHRoZSBkTi9kUyByYXRpbyBvbiBwcm90ZWluIGRvbWFpbnMiIiIpLAogICAgICAgICAgICBkY2MuRHJvcGRvd24oCiAgICAgICAgICAgICAgICBpZD1JRF9EUk9QRE9XTl9HRU5FLAogICAgICAgICAgICAgICAgb3B0aW9ucz1beydsYWJlbCc6IGcyLCAndmFsdWUnOiBnMn0gZm9yIGcyIGluIHNvcnRlZChbZy5uYW1lIGZvciBnIGluIHF1ZXJpZXMuZ2V0X2dlbmVzKCldKV0sCiAgICAgICAgICAgICAgICB2YWx1ZT1Ob25lLAogICAgICAgICAgICAgICAgbXVsdGk9VHJ1ZQogICAgICAgICAgICApLAogICAgICAgICAgICBodG1sLkJyKCksCiAgICAgICAgICAgIGh0bWwuQnV0dG9uKCdBcHBseScsIGlkPUlEX0FQUExZX0JVVFRPTSksCiAgICAgICAgXSkKCgpkZWYgc2V0X2NhbGxiYWNrc19zYW1wbGVzX3RhYihhcHAsIHNlc3Npb246IFNlc3Npb24pOgoKICAgIHF1ZXJpZXMgPSBRdWVyaWVzKHNlc3Npb249c2Vzc2lvbikKICAgIGZpZ3VyZXMgPSBTYW1wbGVGaWd1cmVzKHF1ZXJpZXMpCgogICAgY291bnRyaWVzX2VuYSA9IHF1ZXJpZXMuZ2V0X2NvdW50cmllcyhEYXRhU291cmNlLkVOQS5uYW1lKQogICAgY291bnRyaWVzX2dpc2FpZCA9IHF1ZXJpZXMuZ2V0X2NvdW50cmllcyhEYXRhU291cmNlLkdJU0FJRC5uYW1lKQoKICAgIEBhcHAuY2FsbGJhY2soCiAgICAgICAgT3V0cHV0KElEX0RST1BET1dOX0NPVU5UUlksICdvcHRpb25zJyksCiAgICAgICAgSW5wdXQoSURfRFJPUERPV05fREFUQV9TT1VSQ0UsICd2YWx1ZScpKQogICAgZGVmIHNldF9jb3VudHJpZXMoc291cmNlKToKICAgICAgICAiIiIKICAgICAgICBVcGRhdGVzIHRoZSBjb3VudHJ5IGRyb3AgZG93biBsaXN0IHdoZW4gdGhlIGRhdGEgc291cmNlIGlzIGNoYW5nZWQKICAgICAgICAiIiIKICAgICAgICBjb3VudHJpZXMgPSBbXQogICAgICAgIGlmIHNvdXJjZSA9PSBEYXRhU291cmNlLkVOQS5uYW1lOgogICAgICAgICAgICBjb3VudHJpZXMgPSBbeydsYWJlbCc6IGMsICd2YWx1ZSc6IGN9IGZvciBjIGluIGNvdW50cmllc19lbmFdCiAgICAgICAgZWxpZiBzb3VyY2UgPT0gRGF0YVNvdXJjZS5HSVNBSUQubmFtZToKICAgICAgICAgICAgY291bnRyaWVzID0gW3snbGFiZWwnOiBjLCAndmFsdWUnOiBjfSBmb3IgYyBpbiBjb3VudHJpZXNfZ2lzYWlkXQogICAgICAgIHJldHVybiBjb3VudHJpZXMKCiAgICBAYXBwLmNhbGxiYWNrKAogICAgICAgIE91dHB1dChJRF9TTElERVJfTUlOX1NBTVBMRVMsICdkaXNhYmxlZCcpLAogICAgICAgIElucHV0KElEX0RST1BET1dOX0NPVU5UUlksICd2YWx1ZScpKQogICAgZGVmIGRpc2FibGVfbWluaW11bV9udW1iZXJfc2FtcGxlcyhjb3VudHJpZXMpOgogICAgICAgICIiIgogICAgICAgIERpc2FibGVzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBzYW1wbGVzIG9wdGlvbiB3aGVuIGNvdW50cmllcyBhcmUgcHJvdmlkZWQKICAgICAgICAiIiIKICAgICAgICByZXR1cm4gY291bnRyaWVzIGlzIG5vdCBOb25lCgogICAgQGFwcC5jYWxsYmFjaygKICAgICAgICBPdXRwdXQoSURfQUNDVU1VTEFURURfU0FNUExFU19HUkFQSCwgJ2NoaWxkcmVuJyksCiAgICAgICAgW0lucHV0KElEX0FQUExZX0JVVFRPTSwgJ25fY2xpY2tzJyldLAogICAgICAgIHN0YXRlPVsKICAgICAgICAgICAgU3RhdGUoSURfRFJPUERPV05fREFUQV9TT1VSQ0UsICd2YWx1ZScpLAogICAgICAgICAgICBTdGF0ZShJRF9EUk9QRE9XTl9DT1VOVFJZLCAndmFsdWUnKSwKICAgICAgICAgICAgU3RhdGUoSURfU0xJREVSX01JTl9TQU1QTEVTLCAndmFsdWUnKQogICAgICAgIF0sCiAgICAgICAgc3VwcHJlc3NfY2FsbGJhY2tfZXhjZXB0aW9ucz1UcnVlCiAgICApCiAgICBkZWYgdXBkYXRlX2FjY3VtdWxhdGVkX3NhbXBsZXNfYnlfY291bnRyeShfLCBkYXRhX3NvdXJjZSwgY291bnRyaWVzLCBtaW5fc2FtcGxlcyk6CiAgICAgICAgcmV0dXJuIGh0bWwuRGl2KGNoaWxkcmVuPWZpZ3VyZXMuZ2V0X2FjY3VtdWxhdGVkX3NhbXBsZXNfYnlfY291bnRyeV9wbG90KAogICAgICAgICAgICBkYXRhX3NvdXJjZT1kYXRhX3NvdXJjZSwgY291bnRyaWVzPWNvdW50cmllcywgbWluX3NhbXBsZXM9bWluX3NhbXBsZXMgaWYgY291bnRyaWVzIGlzIE5vbmUgZWxzZSAwKSkKCiAgICBAYXBwLmNhbGxiYWNrKAogICAgICAgIE91dHB1dChJRF9ETl9EU19HUkFQSCwgJ2NoaWxkcmVuJyksCiAgICAgICAgW0lucHV0KElEX0FQUExZX0JVVFRPTSwgJ25fY2xpY2tzJyldLAogICAgICAgIHN0YXRlPVsKICAgICAgICAgICAgU3RhdGUoSURfRFJPUERPV05fREFUQV9TT1VSQ0UsICd2YWx1ZScpLAogICAgICAgICAgICBTdGF0ZShJRF9EUk9QRE9XTl9DT1VOVFJZLCAndmFsdWUnKSwKICAgICAgICAgICAgU3RhdGUoSURfRFJPUERPV05fR0VORSwgJ3ZhbHVlJyksCiAgICAgICAgXSwKICAgICAgICBzdXBwcmVzc19jYWxsYmFja19leGNlcHRpb25zPVRydWUKICAgICkKICAgIGRlZiB1cGRhdGVfZG5fZHNfZ3JhcGgoXywgZGF0YV9zb3VyY2UsIGNvdW50cmllcywgZ2VuZXMpOgogICAgICAgIHJldHVybiBodG1sLkRpdihjaGlsZHJlbj1maWd1cmVzLmdldF9kbmRzX2J5X2dlbmVfcGxvdCgKICAgICAgICAgICAgZGF0YV9zb3VyY2U9ZGF0YV9zb3VyY2UsIGNvdW50cmllcz1jb3VudHJpZXMsIGdlbmVzPWdlbmVzKSkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgZGNjLkRyb3Bkb3duKAogICAgICAgICAgICAgICAgaWQ9SURfRFJPUERPV05fREFUQV9TT1VSQ0UsCiAgICAgICAgICAgICAgICBvcHRpb25zPVt7J2xhYmVsJzogRGF0YVNvdXJjZS5FTkEubmFtZSwgJ3ZhbHVlJzogRGF0YVNvdXJjZS5FTkEubmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICB7J2xhYmVsJzogRGF0YVNvdXJjZS5HSVNBSUQubmFtZSwgJ3ZhbHVlJzogRGF0YVNvdXJjZS5HSVNBSUQubmFtZX1dLAo8fGZpbV9lbmR8Pg=="]
["6c2a73957b9d06e30903e6876ec3344dc4aa1064-4","6c2a73957b9d06e30903e6876ec3344dc4aa1064","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzeXMKCmRlZiBtYWluKCphcmdzLCAqKmt3YXJncyk6CiAgICBmcGF0aCA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgYXJnc1stMV0pCiAgICBmID0gb3BlbihmcGF0aCwgJ3InKQogICAgbiA9IGludChmLnJlYWRsaW5lKCkuc3RyaXAoKSkKICAgIGRuYSA9IGYucmVhZGxpbmUoKS5zdHJpcCgpCiAgICBBID0gbWFwKGZsb2F0LCBmLnJlYWRsaW5lKCkuc3RyaXAoKS5zcGxpdCgpKQogICAgZi5jbG9zZSgpCgogICAgY291bnRzID0geydHQyc6ZG5hLmNvdW50KCJHIikrZG5hLmNvdW50KCdDJyksCiAgICAgICAgICAgICAgJ0FUJzpkbmEuY291bnQoJ0EnKStkbmEuY291bnQoJ1QnKSwKICAgICAgICAgICAgICB9Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHN1YnN0cl9sZW4gPSBuIC0gbGVuKGRuYSkgKyAxCgogICAgcmVzID0gW10KICAgIGZvciBpLCBwcm9iX2djIGluIGVudW1lcmF0ZShBKToKPHxmaW1fZW5kfD4="]
["c9339c4fc35d1deb909a2304c7024a18f3fc7891-1","c9339c4fc35d1deb909a2304c7024a18f3fc7891","PHxmaW1fcHJlZml4fD4KZnJvbSBzcWxhbGNoZW15LnNxbCBpbXBvcnQgY29sdW1uCmZyb20gY2loYWkuY29yZSBpbXBvcnQgQ2loYWkKZnJvbSBjaWhhaS5ib290c3RyYXAgaW1wb3J0IGJvb3RzdHJhcF91bmloYW4KZnJvbSB1dGlscyBpbXBvcnQgcGFyc2VfdmFycwoKcHJpbnQoIlJlZmVyZW5jZXMgZnJvbSBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzgvI04xMDIxMSIpCgpjaWhhbiA9IENpaGFpKCkKaWYgbm90IGNpaGFuLmlzX2Jvb3RzdHJhcHBlZDoKICAgIGJvb3RzdHJhcF91bmloYW4oY2loYW4ubWV0YWRhdGEpCgpjaWhhbi5yZWZsZWN0X2RiKCkKCgpkb3VibGVfdmFyID0gKAogICAgY2loYW4uc2Vzc2lvbi5xdWVyeShjaWhhbi5iYXNlLmNsYXNzZXMuVW5paGFuKQogICAgLmZpbHRlcihjb2x1bW4oImtUcmFkaXRpb25hbFZhcmlhbnQiKS5pc25vdChOb25lKSkKICAgIC5maWx0ZXIoY29sdW1uKCJrU2ltcGxpZmllZFZhcmlhbnQiKS5pc25vdChOb25lKSkKICAgIC5hbGwoKQopCgoKcHJpbnQoIiMjIDMuNy4xIGJ1bGxldCA0IikKCmZvciBjIGluIGRvdWJsZV92YXI6CiAgICBwcmludCgiQ2hhcmFjdGVyOiB7fSIuZm9ybWF0KGMuY2hhcikpCiAgICB0cmFkID0gcGFyc2VfdmFycyhjLmtUcmFkaXRpb25hbFZhcmlhbnQpCiAgICBzaW1wID0gcGFyc2VfdmFycyhjLmtTaW1wbGlmaWVkVmFyaWFudCkKPHxmaW1faG9sZXw+CiAgICBmb3IgdHJhZF92YXIgaW4gdHJhZDoKICAgICAgICBwcmludCgiczJ0OiB7fSIuZm9ybWF0KHRyYWRfdmFyKSkKICAgIGZvciBzaW1wX3ZhciBpbiBzaW1wOgogICAgICAgIHByaW50KCJ0MnM6IHt9Ii5mb3JtYXQoc2ltcF92YXIpKQoKCmRlZiBtdWx0aV9saXN0KGZpZWxkLCBtYXhfZnJlcV9yYW5rPTEpOgogICAgbXVsdGlfcSA9ICgKICAgICAgICBjaWhhbi5zZXNzaW9uLnF1ZXJ5KGNpaGFuLmJhc2UuY2xhc3Nlcy5VbmloYW4pCiAgICAgICAgLmZpbHRlcihjb2x1bW4oZmllbGQpLmxpa2UoIiUgJSIpKQogICAgICAgIC5maWx0ZXIoY29sdW1uKCJrRnJlcXVlbmN5IikgPD0gbWF4X2ZyZXFfcmFuaykKICAgICkKICAgIG11bHRpID0gbXVsdGlfcS5hbGwoKQoKICAgIGZvciBjIGluIG11bHRpOgogICAgICAgIHByaW50KCJDaGFyYWN0ZXI6IHt9Ii5mb3JtYXQoYy5jaGFyKSkKICAgICAgICB2YXJzID0gcGFyc2VfdmFycyhnZXRhdHRyKGMsIGZpZWxkKSkKICAgICAgICBmb3IgdmFyIGluIHZhcnM6CiAgICAgICAgICAgIHByaW50KHZhcikKCgpwcmludCgia1RyYWRpdGlvbmFsVmFyaWFudCIpCm11bHRpX2xpc3QoImtUcmFkaXRpb25hbFZhcmlhbnQiKQoKcHJpbnQoImtTaW1wbGlmaWVkVmFyaWFudCIpCm11bHRpX2xpc3QoImtTaW1wbGlmaWVkVmFyaWFudCIsIG1heF9mcmVxX3Jhbms9MykKPHxmaW1fc3VmZml4fD4KICAgIGlmIGMuY2hhciBpbiB0cmFkIGFuZCBjLmNoYXIgaW4gc2ltcDoKICAgICAgICBwcmludCgiQ2FzZSAxIikKICAgIGVsc2U6CiAgICAgICAgcHJpbnQoIkNhc2UgMiAobm9uLWlkZW1wb3RlbnQpIikKPHxmaW1fZW5kfD4="]
["6c0900f8073cf628f61cfe0071860beb621a9819-2","6c0900f8073cf628f61cfe0071860beb621a9819","PHxmaW1fcHJlZml4fD4KIiIiUGVyZm9ybSBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgYG9yaW9uLmFsZ28uYXhgLiIiIgppbXBvcnQgc3RhdGlzdGljcyBhcyBzdGF0cwoKaW1wb3J0IG51bXB5CmltcG9ydCBweXRlc3QKZnJvbSBib3RvcmNoLnRlc3RfZnVuY3Rpb25zLm11bHRpX29iamVjdGl2ZSBpbXBvcnQgQnJhbmluQ3VycmluCmZyb20gb3Jpb24uYmVuY2htYXJrLnRhc2suYmFzZSBpbXBvcnQgQmVuY2htYXJrVGFzawpmcm9tIG9yaW9uLmNvcmUudXRpbHMgaW1wb3J0IGJhY2t3YXJkCmZyb20gb3Jpb24udGVzdGluZy5hbGdvIGltcG9ydCBCYXNlQWxnb1Rlc3RzLCBwaGFzZQpmcm9tIHRvcmNoIGltcG9ydCBUZW5zb3IKCk5fSU5JVCA9IDUKVE9MID0gMC4xCgoKY2xhc3MgQnJhbmluQ3VycmluVGFzayhCZW5jaG1hcmtUYXNrKToKICAgIHIiIiJUd28gb2JqZWN0aXZlIHByb2JsZW0gY29tcG9zZWQgb2YgdGhlIEJyYW5pbiBhbmQgQ3VycmluIGZ1bmN0aW9ucy4KCiAgICBCcmFuaW4gKHJlc2NhbGVkKToKCiAgICAgICAgZih4KSA9ICgKICAgICAgICAxNSp4XzEgLSA1LjEgKiAoMTUgKiB4XzAgLSA1KSAqKiAyIC8gKDQgKiBwaSAqKiAyKSArIDUgKiAoMTUgKiB4XzAgLSA1KQogICAgICAgIC8gcGkgLSA1CiAgICAgICAgKSAqKiAyICsgKDEwIC0gMTAgLyAoOCAqIHBpKSkgKiBjb3MoMTUgKiB4XzAgLSA1KSkKCiAgICBDdXJyaW46CgogICAgICAgIGYoeCkgPSAoMSAtIGV4cCgtMSAvICgyICogeF8xKSkpICogKAogICAgICAgIDIzMDAgKiB4XzAgKiogMyArIDE5MDAgKiB4XzAgKiogMiArIDIwOTIgKiB4XzAgKyA2MAogICAgICAgICkgLyAxMDAgKiB4XzAgKiogMyArIDUwMCAqIHhfMCAqKiAyICsgNCAqIHhfMCArIDIwCgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heF90cmlhbHM9MjApOgogICAgICAgIHNlbGYuX2JyYW5pbmN1cnJpbiA9IEJyYW5pbkN1cnJpbigpCiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhtYXhfdHJpYWxzPW1heF90cmlhbHMpCgogICAgIyBweWxpbnQ6IGRpc2FibGU9YXJndW1lbnRzLWRpZmZlcgogICAgZGVmIGNhbGwoc2VsZiwgeCk6CiAgICAgICAgIiIiRXZhbHVhdGUgMi1EIGJyYW5pbiBhbmQgY3VycmluIGZ1bmN0aW9ucy4iIiIKICAgICAgICBfeSA9IHNlbGYuX2JyYW5pbmN1cnJpbihUZW5zb3IoeCkpCiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgZGljdChuYW1lPSJicmFuaW4iLCB0eXBlPSJvYmplY3RpdmUiLCB2YWx1ZT1feVswXS5pdGVtKCkpLAogICAgICAgICAgICBkaWN0KG5hbWU9ImN1cnJpbiIsIHR5cGU9InN0YXRpc3RpYyIsIHZhbHVlPV95WzFdLml0ZW0oKSksCiAgICAgICAgXQoKICAgIGRlZiBnZXRfc2VhcmNoX3NwYWNlKHNlbGYpOgogICAgICAgICIiIlJldHVybiB0aGUgc2VhcmNoIHNwYWNlIGZvciB0aGUgdGFzayBvYmplY3RpdmUgZnVuY3Rpb24iIiIKICAgICAgICByc3BhY2UgPSB7IngiOiAidW5pZm9ybSgwLCAxLCBzaGFwZT0yLCBwcmVjaXNpb249MTApIn0KCiAgICAgICAgcmV0dXJuIHJzcGFjZQoKCmNsYXNzIFRlc3RBeE9wdGltaXplcihCYXNlQWxnb1Rlc3RzKToKICAgICIiIlRlc3Qgc3VpdGUgZm9yIGFsZ29yaXRobSBBeE9wdGltaXplciIiIgoKICAgIGFsZ29fbmFtZSA9ICJheG9wdGltaXplciIKICAgIG1heF90cmlhbHMgPSAyMAogICAgY29uZmlnID0gewogICAgICAgICJzZWVkIjogMTIzNCwgICMgQmVjYXVzZSB0aGlzIGlzIHNvIHJhbmRvbQogICAgICAgICJuX2luaXRpYWxfdHJpYWxzIjogTl9JTklULAogICAgICAgICJleHRyYV9vYmplY3RpdmVzIjogc2V0KCksCiAgICAgICAgImNvbnN0cmFpbnRzIjogW10sCiAgICB9CgogICAgZGVmIHRlc3RfY29uZmlndXJhdGlvbl9mYWlsKHNlbGYpOgogICAgICAgICIiIlRlc3QgdGhhdCBBeCBjb25maWd1cmF0aW9uIGlzIHZhbGlkIiIiCiAgICAgICAgd2l0aCBweXRlc3QucmFpc2VzKEFzc2VydGlvbkVycm9yKSBhcyBleGNfaW5mbzoKICAgICAgICAgICAgc2VsZi5jcmVhdGVfYWxnbygKICAgICAgICAgICAgICAgIGNvbmZpZz17KipzZWxmLmNvbmZpZywgImNvbnN0cmFpbnRzIjogWyJjb25zdHJhaW50ID0gMyJdfSwKICAgICAgICAgICAgKQogICAgICAgIGFzc2VydCBleGNfaW5mby52YWx1ZQogICAgICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhBc3NlcnRpb25FcnJvcikgYXMgZXhjX2luZm86CiAgICAgICAgICAgIHNlbGYuY3JlYXRlX2FsZ28oCiAgICAgICAgICAgICAgICBjb25maWc9eyoqc2VsZi5jb25maWcsICJjb25zdHJhaW50cyI6IFsiY29uc3RyYWludCA8IDEwIl19LAogICAgICAgICAgICApCiAgICAgICAgYXNzZXJ0IGV4Y19pbmZvLnZhbHVlCgogICAgZGVmIHRlc3RfaXNfZG9uZV9jYXJkaW5hbGl0eShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICMgU2V0IGhpZ2hlciBtYXhfdHJpYWxzIHRvIGV4cGxvcmUgYWxsIGNhcmRpbmFsaXR5IHNwYWNlCiAgICAgICAgX21heF90cmlhbHMgPSBzZWxmLm1heF90cmlhbHMKICAgICAgICBzZWxmLm1heF90cmlhbHMgPSAyMDAKICAgICAgICBzdXBlcigpLnRlc3RfaXNfZG9uZV9jYXJkaW5hbGl0eSgqYXJncywgKiprd2FyZ3MpCiAgICAgICAgc2VsZi5tYXhfdHJpYWxzID0gX21heF90cmlhbHMKCiAgICBkZWYgdGVzdF9zZWVkX3JuZyhzZWxmLCBtb2NrZXIsIG51bSwgYXR0cik6CiAgICAgICAgIiIiVGVzdCB0aGF0IHRoZSBzZWVkaW5nIGdpdmVzIHJlcHJvZHVjaWJpbGUgcmVzdWx0cy4iIiIKICAgICAgICBhbGdvID0gc2VsZi5jcmVhdGVfYWxnbygpCgogICAgICAgIHNlZWQgPSBudW1weS5yYW5kb20ucmFuZGludCgxMDAwMCkKICAgICAgICBhbGdvLnNlZWRfcm5nKHNlZWQpCiAgICAgICAgc3B5ID0gc2VsZi5zcHlfcGhhc2UobW9ja2VyLCBudW0sIGFsZ28sIGF0dHIpCiAgICAgICAgdHJpYWxzID0gYWxnby5zdWdnZXN0KDEpCiAgICAgICAgdHJpYWxzWzBdLmlkICE9IGFsZ28uc3VnZ2VzdCgxKVswXS5pZAoKICAgICAgICBuZXdfYWxnbyA9IHNlbGYuY3JlYXRlX2FsZ28oKQogICAgICAgIG5ld19hbGdvLnNlZWRfcm5nKHNlZWQpCiAgICAgICAgc2VsZi5mb3JjZV9vYnNlcnZlKGFsZ28ubl9vYnNlcnZlZCwgbmV3X2FsZ28pCiAgICAgICAgbnVtcHkudGVzdGluZy5hc3NlcnRfYWxsY2xvc2UoCiAgICAgICAgICAgIG51bXB5LmFycmF5KGxpc3QodHJpYWxzWzBdLnBhcmFtcy52YWx1ZXMoKSkpLmFzdHlwZShmbG9hdCksCiAgICAgICAgICAgIG51bXB5LmFycmF5KGxpc3QobmV3X2FsZ28uc3VnZ2VzdCgxKVswXS5wYXJhbXMudmFsdWVzKCkpKS5hc3R5cGUoZmxvYXQpLAogICAgICAgICAgICBhdG9sPVRPTCwKICAgICAgICAgICAgcnRvbD1UT0wsCiAgICAgICAgKQoKICAgICAgICBzZWxmLmFzc2VydF9jYWxsYmFja3Moc3B5LCBudW0gKyAxLCBuZXdfYWxnbykKCiAgICBkZWYgdGVzdF9zZWVkX3JuZ19pbml0KHNlbGYsIG1vY2tlciwgbnVtLCBhdHRyKToKICAgICAgICAiIiJUZXN0IHRoYXQgdGhlIHNlZWRpbmcgZ2l2ZXMgcmVwcm9kdWNpYmlsZSByZXN1bHRzLiIiIgogICAgICAgIGFsZ28gPSBzZWxmLmNyZWF0ZV9hbGdvKHNlZWQ9MSkKCiAgICAgICAgc3B5ID0gc2VsZi5zcHlfcGhhc2UobW9ja2VyLCBudW0sIGFsZ28sIGF0dHIpCiAgICAgICAgdHJpYWxzID0gYWxnby5zdWdnZXN0KDEpCiAgICAgICAgYWxnby5zdWdnZXN0KDEpWzBdLmlkICE9IHRyaWFsc1swXS5pZAoKICAgICAgICBuZXdfYWxnbyA9IHNlbGYuY3JlYXRlX2FsZ28oc2VlZD0yKQogICAgICAgIHNlbGYuZm9yY2Vfb2JzZXJ2ZShhbGdvLm5fb2JzZXJ2ZWQsIG5ld19hbGdvKQogICAgICAgIGFzc2VydCBuZXdfYWxnby5zdWdnZXN0KDEpWzBdLmlkICE9IHRyaWFsc1swXS5pZAoKICAgICAgICBuZXdfYWxnbyA9IHNlbGYuY3JlYXRlX2FsZ28oc2VlZD0xKQogICAgICAgIHNlbGYuZm9yY2Vfb2JzZXJ2ZShhbGdvLm5fb2JzZXJ2ZWQsIG5ld19hbGdvKQogICAgICAgIG51bXB5LnRlc3RpbmcuYXNzZXJ0X2FsbGNsb3NlKAogICAgICAgICAgICBudW1weS5hcnJheShsaXN0KHRyaWFsc1swXS5wYXJhbXMudmFsdWVzKCkpKS5hc3R5cGUoZmxvYXQpLAogICAgICAgICAgICBudW1weS5hcnJheShsaXN0KG5ld19hbGdvLnN1Z2dlc3QoMSlbMF0ucGFyYW1zLnZhbHVlcygpKSkuYXN0eXBlKGZsb2F0KSwKICAgICAgICAgICAgYXRvbD1UT0wsCiAgICAgICAgICAgIHJ0b2w9VE9MLAogICAgICAgICkKCiAgICAgICAgc2VsZi5hc3NlcnRfY2FsbGJhY2tzKHNweSwgbnVtICsgMSwgbmV3X2FsZ28pCgogICAgQHBoYXNlCiAgICBkZWYgdGVzdF9zdGF0ZV9kaWN0KHNlbGYsIG1vY2tlciwgbnVtLCBhdHRyKToKICAgICAgICAiIiJWZXJpZnkgdGhhdCByZXNldHRpbmcgc3RhdGUgbWFrZXMgc2FtcGxpbmcgZGV0ZXJtaW5pc3RpYyIiIgogICAgICAgIGFsZ28gPSBzZWxmLmNyZWF0ZV9hbGdvKCkKCiAgICAgICAgc2VlZCA9IG51bXB5LnJhbmRvbS5yYW5kaW50KDEwMDAwKQogICAgICAgIGFsZ28uc2VlZF9ybmcoc2VlZCkKICAgICAgICBzcHkgPSBzZWxmLnNweV9waGFzZShtb2NrZXIsIG1heChudW0sIDEpLCBhbGdvLCBhdHRyKQogICAgICAgIHN0YXRlID0gYWxnby5zdGF0ZV9kaWN0CiAgICAgICAgdHJpYWwgPSBhbGdvLnN1Z2dlc3QoMSlbMF0KCiAgICAgICAgYWxnby5zZXRfc3RhdGUoc3RhdGUpCiAgICAgICAgbnVtcHkudGVzdGluZy5hc3NlcnRfYWxsY2xvc2UoCiAgICAgICAgICAgIG51bXB5LmFycmF5KGxpc3QodHJpYWwucGFyYW1zLnZhbHVlcygpKSkuYXN0eXBlKGZsb2F0KSwKICAgICAgICAgICAgbnVtcHkuYXJyYXkobGlzdChhbGdvLnN1Z2dlc3QoMSlbMF0ucGFyYW1zLnZhbHVlcygpKSkuYXN0eXBlKGZsb2F0KSwKICAgICAgICAgICAgYXRvbD1UT0wsCiAgICAgICAgICAgIHJ0b2w9VE9MLAogICAgICAgICkKCiAgICAgICAgbmV3X2FsZ28gPSBzZWxmLmNyZWF0ZV9hbGdvKCkKICAgICAgICBhc3NlcnQgdHJpYWwuaWQgIT0gbmV3X2FsZ28uc3VnZ2VzdCgxKVswXS5pZAoKICAgICAgICBuZXdfYWxnby5zZXRfc3RhdGUoc3RhdGUpCiAgICAgICAgbnVtcHkudGVzdGluZy5hc3NlcnRfYWxsY2xvc2UoCiAgICAgICAgICAgIG51bXB5LmFycmF5KGxpc3QodHJpYWwucGFyYW1zLnZhbHVlcygpKSkuYXN0eXBlKGZsb2F0KSwKICAgICAgICAgICAgbnVtcHkuYXJyYXkobGlzdChuZXdfYWxnby5zdWdnZXN0KDEpWzBdLnBhcmFtcy52YWx1ZXMoKSkpLmFzdHlwZShmbG9hdCksCiAgICAgICAgICAgIGF0b2w9VE9MLAogICAgICAgICAgICBydG9sPVRPTCwKICAgICAgICApCgogICAgICAgIHNlbGYuYXNzZXJ0X2NhbGxiYWNrcyhzcHksIG51bSArIDEsIGFsZ28pCgogICAgZGVmIHRlc3Rfb3B0aW1pemVfbXVsdGlfb2JqZWN0aXZlcyhzZWxmKToKICAgICAgICAiIiJUZXN0IHRoYXQgYWxnb3JpdGhtIG9wdGltaXplcyBzb21laG93ICh0aGlzIGlzIG9uLXBhciB3aXRoIHJhbmRvbSBzZWFyY2gpIiIiCiAgICAgICAgX21heF90cmlhbHMgPSAyMAogICAgICAgIHRhc2sgPSBCcmFuaW5DdXJyaW5UYXNrKCkKICAgICAgICBzcGFjZSA9IHNlbGYuY3JlYXRlX3NwYWNlKHRhc2suZ2V0X3NlYXJjaF9zcGFjZSgpKQogICAgICAgIGFsZ28gPSBzZWxmLmNyZWF0ZV9hbGdvKAogICAgICAgICAgICBjb25maWc9eyoqc2VsZi5jb25maWcsICJleHRyYV9vYmplY3RpdmVzIjogWyJzdGF0aXN0aWMiXX0sIHNwYWNlPXNwYWNlCiAgICAgICAgKQogICAgICAgIGFsZ28uYWxnb3JpdGhtLm1heF90cmlhbHMgPSBfbWF4X3RyaWFscwogICAgICAgIHNhZmVfZ3VhcmQgPSAwCiAgICAgICAgdHJpYWxzID0gW10KICAgICAgICBvYmplY3RpdmVzID0gW10KICAgICAgICB3aGlsZSB0cmlhbHMgb3Igbm90IGFsZ28uaXNfZG9uZToKICAgICAgICAgICAgaWYgc2FmZV9ndWFyZCA+PSBfbWF4X3RyaWFsczoKICAgICAgICAgICAgICAgIGJyZWFrCgogICAgICAgICAgICBpZiBub3QgdHJpYWxzOgogICAgICAgICAgICAgICAgdHJpYWxzID0gYWxnby5zdWdnZXN0KF9tYXhfdHJpYWxzIC0gbGVuKG9iamVjdGl2ZXMpKQoKICAgICAgICAgICAgdHJpYWwgPSB0cmlhbHMucG9wKDApCiAgICAgICAgICAgIHJlc3VsdHMgPSB0YXNrKHRyaWFsLnBhcmFtc1sieCJdKQogICAgICAgICAgICBvYmplY3RpdmVzLmFwcGVuZCgocmVzdWx0c1swXVsidmFsdWUiXSwgcmVzdWx0c1sxXVsidmFsdWUiXSkpCiAgICAgICAgICAgIGJhY2t3YXJkLmFsZ29fb2JzZXJ2ZSgKICAgICAgICAgICAgICAgIGFsZ28sCiAgICAgICAgICAgICAgICBbdHJpYWxdLAogICAgICAgICAgICAgICAgW2RpY3Qob2JqZWN0aXZlPW9iamVjdGl2ZXNbLTFdWzBdLCBzdGF0aXN0aWM9b2JqZWN0aXZlc1stMV1bMV0pXSwKICAgICAgICAgICAgKQogICAgICAgICAgICBzYWZlX2d1YXJkICs9IDEKCiAgICAgICAgcmFuZF9vYmplY3RpdmVzID0gW10KICAgICAgICBmb3IgdHJpYWwgaW4gYWxnby5zcGFjZS5zYW1wbGUobGVuKG9iamVjdGl2ZXMpKToKICAgICAgICAgICAgcmVzdWx0cyA9IHRhc2sodHJpYWwucGFyYW1zWyJ4Il0pCiAgICAgICAgICAgIHJhbmRfb2JqZWN0aXZlcy5hcHBlbmQoKHJlc3VsdHNbMF1bInZhbHVlIl0sIHJlc3VsdHNbMV1bInZhbHVlIl0pKQoKICAgICAgICBvYmplY3RpdmVzX2JyYW5pbiwgb2JqZWN0aXZlc19jdXJyaW4gPSBsaXN0KHppcCgqb2JqZWN0aXZlcykpCiAgICAgICAgXywgcmFuZF9vYmplY3RpdmVzX2N1cnJpbiA9IGxpc3QoemlwKCpyYW5kX29iamVjdGl2ZXMpKQoKICAgICAgICBhc3NlcnQgYWxnby5pc19kb25lCiAgICAgICAgIyBicmFuaW4KICAgICAgICBhc3NlcnQgbWluKG9iamVjdGl2ZXNfYnJhbmluKSA8PSAxMAogICAgICAgICMgY3VycmluCiAgICAgICAgYXNzZXJ0IG1pbihvYmplY3RpdmVzX2N1cnJpbikgPD0gbWluKHJhbmRfb2JqZWN0aXZlc19jdXJyaW4pCgogICAgZGVmIHRlc3Rfb2JqZWN0aXZlc19jb25zdHJhaW50cyhzZWxmKToKICAgICAgICAiIiJUZXN0IHRoYXQgYWxnb3JpdGhtIG9wdGltaXplcyBzb21laG93ICh0aGlzIGlzIG9uLXBhciB3aXRoIHJhbmRvbSBzZWFyY2gpIiIiCiAgICAgICAgX21heF90cmlhbHMgPSAyMAogICAgICAgIHRhc2sgPSBCcmFuaW5DdXJyaW5UYXNrKCkKICAgICAgICBzcGFjZSA9IHNlbGYuY3JlYXRlX3NwYWNlKHRhc2suZ2V0X3NlYXJjaF9zcGFjZSgpKQogICAgICAgIGFsZ28gPSBzZWxmLmNyZWF0ZV9hbGdvKAogICAgICAgICAgICBjb25maWc9ewogICAgICAgICAgICAgICAgKipzZWxmLmNvbmZpZywKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNwYWNlPXNwYWNlLAogICAgICAgICkKICAgICAgICBhbGdvLmFsZ29yaXRobS5tYXhfdHJpYWxzID0gX21heF90cmlhbHMKICAgICAgICBzYWZlX2d1YXJkID0gMAogICAgICAgIHRyaWFscyA9IFtdCiAgICAgICAgb2JqZWN0aXZlcyA9IFtdCiAgICAgICAgd2hpbGUgdHJpYWxzIG9yIG5vdCBhbGdvLmlzX2RvbmU6CiAgICAgICAgICAgIGlmIHNhZmVfZ3VhcmQgPj0gX21heF90cmlhbHM6CiAgICAgICAgICAgICAgICBicmVhawoKICAgICAgICAgICAgaWYgbm90IHRyaWFsczoKICAgICAgICAgICAgICAgIHRyaWFscyA9IGFsZ28uc3VnZ2VzdChfbWF4X3RyaWFscyAtIGxlbihvYmplY3RpdmVzKSkKCiAgICAgICAgICAgIHRyaWFsID0gdHJpYWxzLnBvcCgwKQogICAgICAgICAgICByZXN1bHRzID0gdGFzayh0cmlhbC5wYXJhbXNbIngiXSkKICAgICAgICAgICAgb2JqZWN0aXZlcy5hcHBlbmQoKHJlc3VsdHNbMF1bInZhbHVlIl0sIHJlc3VsdHNbMV1bInZhbHVlIl0pKQogICAgICAgICAgICBiYWNrd2FyZC5hbGdvX29ic2VydmUoCiAgICAgICAgICAgICAgICBhbGdvLAogICAgICAgICAgICAgICAgW3RyaWFsXSwKICAgICAgICAgICAgICAgIFtkaWN0KG9iamVjdGl2ZT1vYmplY3RpdmVzWy0xXVswXSwgY29uc3RyYWludD1vYmplY3RpdmVzWy0xXVsxXSldLAogICAgICAgICAgICApCiAgICAgICAgICAgIHNhZmVfZ3VhcmQgKz0gMQoKICAgICAgICBvYmplY3RpdmVzX2JyYW5pbiwgb2JqZWN0aXZlc19jdXJyaW4gPSBsaXN0KHppcCgqb2JqZWN0aXZlcykpCgogICAgICAgIGFzc2VydCBhbGdvLmlzX2RvbmUKICAgICAgICAjIGJyYW5pbgogICAgICAgIGFzc2VydCAoCiAgICAgICAgICAgIG1pbihvYmplY3RpdmVzX2JyYW5pbikKICAgICAgICAgICAgPD0gc3RhdHMubWVhbihvYmplY3RpdmVzX2JyYW5pbikgLSBzdGF0cy5zdGRldihvYmplY3RpdmVzX2JyYW5pbikgKiAwLjcKICAgICAgICApCiAgICAgICAgIyBjdXJyaW4KICAgICAgICBhc3NlcnQgMyA8PSBzdGF0cy5tZWFuKG9iamVjdGl2ZXNfY3VycmluWy01Ol0pIDw9IDEwCgoKIyBZb3UgbWF5IGFkZCBvdGhlciBwaGFzZXMgZm9yIHRlc3QuCiMgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9FcGlzdGltaW8vb3Jpb24uYWxnby5za29wdC9ibG9iL21hc3Rlci90ZXN0cy9pbnRlZ3JhdGlvbl90ZXN0LnB5CiMgZm9yIGFuIGV4YW1wbGUgd2hlcmUgdHdvIHBoYXNlcyBhcmUgcmVnaXN0ZXJlZCwgb25lIGZvciB0aGUgaW5pdGlhbCByYW5kb20gc3RlcCwgYW5kCiMgYW5vdGhlciBmb3IgdGhlIG9wdGltaXphdGlvbiBzdGVwIHdpdGggYSBHYXVzc2lhbiBQcm9jZXNzLgpUZXN0QXhPcHRpbWl6ZXIuc2V0X3BoYXNlcygKICAgIFsoIlNvYm9sIiwgMCwgInNwYWNlLnNhbXBsZSIpLCAoIkJPIiwgTl9JTklULCAic3BhY2Uuc2FtcGxlIildCikKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICJjb25zdHJhaW50cyI6IFsiY29uc3RyYWludCA+PSAzIiwgImNvbnN0cmFpbnQgPD0gMTAiXSwKPHxmaW1fZW5kfD4="]
["6c71a07becd0f6518ef45f781c063a97785ea0e5-1","6c71a07becd0f6518ef45f781c063a97785ea0e5","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAubXB2X3NpbXBsZXNlcnZlciBpbXBvcnQgKiAgIyBub3FhOiBGNDAzIEY0MDEKPHxmaW1fZW5kfD4="]
["66ed03d4c4bef5eead558096a44d59fe8cc0d732-1","66ed03d4c4bef5eead558096a44d59fe8cc0d732","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KbG9hZCgiLy9mb28vYmFyOmxpYiIsICJiYXJfbGliIikKCmRlZiBteV90YXJnZXQoKiprd2FyZ3MpOgogICAgbmF0aXZlLm15X3RhcmdldCgqKmt3YXJncykKPHxmaW1fZW5kfD4="]
["b004b52a7e3e5f34764e4e91410888e118194e4c-1","b004b52a7e3e5f34764e4e91410888e118194e4c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCByZQpmcm9tIGZ1bmN0b29scyBpbXBvcnQgbHJ1X2NhY2hlCmZyb20gdHlwaW5nIGltcG9ydCBBbnksIERpY3QsIExpc3QKCmltcG9ydCB5YW1sCmZyb20ganNvbnNjaGVtYSBpbXBvcnQgRHJhZnQ0VmFsaWRhdG9yLCBSZWZSZXNvbHZlciwgVmFsaWRhdGlvbkVycm9yCgpmcm9tIC5leGNzIGltcG9ydCBWYWxpZGF0aW9uRXJyb3JzCmZyb20gLnR5cGVzIGltcG9ydCBZYW1sUmVhZGFibGUKZnJvbSAudXRpbHMgaW1wb3J0IHJlYWRfeWFtbAoKU0NIRU1BVEFfRElSRUNUT1JZID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdzY2hlbWEnKQoKCmNsYXNzIExvY2FsUmVmUmVzb2x2ZXIoUmVmUmVzb2x2ZXIpOiAgIyB0eXBlOiBpZ25vcmVbbWlzY10KICAgICIiIkxvYWRzIHJlbGF0aXZlIFVSTHMgKGFzIGl0IHdlcmUpIGZyb20gdGhlIGBzY2hlbWFgIGRpcmVjdG9yeS4iIiIKCiAgICBsb2NhbF9zY29wZV9yZSA9IHJlLmNvbXBpbGUocideaHR0cHM/Oi8vdmFsb2hhaS5jb20vKC4rXC5qc29uKSQnKQoKICAgIGRlZiByZXNvbHZlX2Zyb21fdXJsKHNlbGYsIHVybDogc3RyKSAtPiBEaWN0W0FueSwgQW55XToKICAgICAgICBsb2NhbF9tYXRjaCA9IHNlbGYubG9jYWxfc2NvcGVfcmUubWF0Y2godXJsKQogICAgICAgIGlmIGxvY2FsX21hdGNoOgogICAgICAgICAgICBzY2hlbWEgPSBnZXRfc2NoZW1hKG5hbWU9bG9jYWxfbWF0Y2guZ3JvdXAoMSkpCiAgICAgICAgICAgIHNlbGYuc3RvcmVbdXJsXSA9IHNjaGVtYQogICAgICAgICAgICByZXR1cm4gc2NoZW1hICAjIG5vcWE6IFI1MDQKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdyZW1vdGUgVVJMIHJlc29sdXRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3Igc2VjdXJpdHkgcmVhc29ucycpICAjIHByYWdtYTogbm8gY292ZXIKCgpAbHJ1X2NhY2hlKCkKZGVmIGdldF9zY2hlbWEobmFtZTogc3RyKSAtPiBEaWN0W0FueSwgQW55XToKICAgIGpzb25fZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oU0NIRU1BVEFfRElSRUNUT1JZLCBuYW1lKQogICAgeWFtbF9maWxlbmFtZSA9IG9zLnBhdGguc3BsaXRleHQoanNvbl9maWxlbmFtZSlbMF0gKyAnLnlhbWwnCiAgICBmb3IgZmlsZW5hbWUsIGxvYWRlciBpbiBbCiAgICAgICAgKGpzb25fZmlsZW5hbWUsIGpzb24ubG9hZCksCiAgICAgICAgKHlhbWxfZmlsZW5hbWUsIHlhbWwuc2FmZV9sb2FkKSwKICAgIF06CiAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUpOgogICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGluZnA6CiAgICAgICAgICAgICAgICByZXR1cm4gbG9hZGVyKGluZnApICAjIHR5cGU6IGlnbm9yZQogICAgcmFpc2UgVmFsdWVFcnJvcihmJ3VuYWJsZSB0byByZWFkIHNjaGVtYSB7bmFtZX0nKSAgIyBwcmFnbWE6IG5vIGNvdmVyCgoKZGVmIGdldF92YWxpZGF0b3IoKSAtPiBEcmFmdDRWYWxpZGF0b3I6CiAgICBzY2hlbWEgPSBnZXRfc2NoZW1hKCdiYXNlLmpzb24nKQogICAgY2xzID0gRHJhZnQ0VmFsaWRhdG9yCiAgICBjbHMuY2hlY2tfc2NoZW1hKHNjaGVtYSkKICAgIHJldHVybiBjbHMoc2NoZW1hLCByZXNvbHZlcj1Mb2NhbFJlZlJlc29sdmVyLmZyb21fc2NoZW1hKHNjaGVtYSkpCgoKZGVmIHZhbGlkYXRlKHlhbWw6IFlhbWxSZWFkYWJsZSwgcmFpc2VfZXhjOiBib29sID0gVHJ1ZSkgLT4gTGlzdFtWYWxpZGF0aW9uRXJyb3JdOgogICAgIiIiCiAgICBWYWxpZGF0ZSB0aGUgZ2l2ZW4gWUFNTCBkb2N1bWVudCBhbmQgcmV0dXJuIGEgbGlzdCBvZiBlcnJvcnMuCgogICAgOnBhcmFtIHlhbWw6IFlBTUwgZGF0YSAoZWl0aGVyIGEgc3RyaW5nLCBhIHN0cmVhbSwgb3IgcHJlLXBhcnNlZCBQeXRob24gZGljdC9saXN0KQogICAgOnBhcmFtIHJhaXNlX2V4YzogV2hldGhlciB0byByYWlzZSBhIG1ldGEtZXhjZXB0aW9uIGNvbnRhaW5pbmcgYWxsIGRpc2NvdmVyZWQgZXJyb3JzIGFmdGVyIHZhbGlkYXRpb24uCiAgICA6cmV0dXJuOiBBIGxpc3Qgb2YgZXJyb3JzIGVuY291bnRlcmVkLgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAiIiIKICAgIGRhdGEgPSByZWFkX3lhbWwoeWFtbCkKICAgIHZhbGlkYXRvciA9IGdldF92YWxpZGF0b3IoKQogICAgIyBOYjogdGhpcyB1c2VzIGEgbGlzdCBpbnN0ZWFkIG9mIGJlaW5nIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uIGluIG9yZGVyIHRvIGJlCjx8ZmltX2VuZHw+"]
["95b0f057e65c9ee79d258c97420fbccee8c0b30f-2","95b0f057e65c9ee79d258c97420fbccee8c0b30f","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiIiIkZhY2Vib29rIE9BdXRoIGludGVyZmFjZS4iIiIKCiMgU3lzdGVtIGltcG9ydHMKaW1wb3J0IGpzb24KaW1wb3J0IGxvZ2dpbmcKdHJ5OgogICAgZnJvbSB1cmxsaWIgaW1wb3J0IHF1b3RlX3BsdXMKZXhjZXB0IEltcG9ydEVycm9yOgogICAgZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHF1b3RlX3BsdXMKCmltcG9ydCBvYXV0aDIgYXMgb2F1dGgKZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKCiMgUHJvamVjdCBpbXBvcnRzCmZyb20gLmJhc2VfYXV0aCBpbXBvcnQgQmFzZTNyZFBhcnR5QXV0aAoKCmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCkZBQ0VCT09LX1JFUVVFU1RfVE9LRU5fVVJMID0gJ2h0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9kaWFsb2cvb2F1dGgnCkZBQ0VCT09LX0FDQ0VTU19UT0tFTl9VUkwgPSAnaHR0cHM6Ly9ncmFwaC5mYWNlYm9vay5jb20vb2F1dGgvYWNjZXNzX3Rva2VuJwpGQUNFQk9PS19DSEVDS19BVVRIID0gJ2h0dHBzOi8vZ3JhcGguZmFjZWJvb2suY29tL21lJwoKPHxmaW1faG9sZXw+CmNsYXNzIEZhY2Vib29rT0F1dGgoQmFzZTNyZFBhcnR5QXV0aCk6CiAgICBQUk9WSURFUiA9ICdmYWNlYm9vaycKICAgIEJBQ0tFTkQgPSAnZHJhYWxjb3JlLmF1dGguYmFja2VuZC5GYWNlYm9va09BdXRoQmFja2VuZCcKCiAgICBkZWYgZ2V0X2F1dGhvcml6ZV91cmwoc2VsZiwgcmVxdWVzdCk6CiAgICAgICAgIiIiUmVxdWVzdCBhbmQgcHJlcGFyZSBVUkwgZm9yIGxvZ2luIHVzaW5nIEZhY2Vib29rIGFjY291bnQuIiIiCiAgICAgICAgYmFzZV91cmwgPSAne30/Y2xpZW50X2lkPXt9JnJlZGlyZWN0X3VyaT17fSZzY29wZT17fScKICAgICAgICByZXR1cm4gYmFzZV91cmwuZm9ybWF0KEZBQ0VCT09LX1JFUVVFU1RfVE9LRU5fVVJMLCBzZXR0aW5ncy5GQUNFQk9PS19BUFBfSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZV9wbHVzKHNlbGYuZ2V0X2NhbGxiYWNrX3VybCgpKSwgJ2VtYWlsJykKCiAgICBkZWYgc2V0X3VzZXIoc2VsZiwgcmVzcG9uc2UpOgogICAgICAgIHJldHVybiBzZWxmLmdldF91c2VyKHsKICAgICAgICAgICAgJ3VzZXJuYW1lJzogJ2ZiLXt9Jy5mb3JtYXQocmVzcG9uc2VbJ2lkJ10pLAogICAgICAgICAgICAnZW1haWwnOiByZXNwb25zZVsnZW1haWwnXSwKICAgICAgICAgICAgJ2ZpcnN0X25hbWUnOiByZXNwb25zZVsnZmlyc3RfbmFtZSddLAogICAgICAgICAgICAnbGFzdF9uYW1lJzogcmVzcG9uc2VbJ2xhc3RfbmFtZSddLAogICAgICAgIH0pCgogICAgZGVmIGF1dGhvcml6ZShzZWxmLCByZXF1ZXN0KToKCiAgICAgICAgYmFzZV91cmwgPSAne30/Y2xpZW50X2lkPXt9JnJlZGlyZWN0X3VyaT17fSZjbGllbnRfc2VjcmV0PXt9JmNvZGU9e30nCiAgICAgICAgcmVxdWVzdF91cmwgPSBiYXNlX3VybC5mb3JtYXQoRkFDRUJPT0tfQUNDRVNTX1RPS0VOX1VSTCwgc2V0dGluZ3MuRkFDRUJPT0tfQVBQX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0X2NhbGxiYWNrX3VybCgpLCBzZXR0aW5ncy5GQUNFQk9PS19BUFBfU0VDUkVULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuR0VULmdldCgnY29kZScpKQoKICAgICAgICAjIEdldCB0aGUgYWNjZXNzIHRva2VuIGZyb20gRmFjZWJvb2sKICAgICAgICBjbGllbnQgPSBvYXV0aC5DbGllbnQoY29uc3VtZXIpCiAgICAgICAgcmVzcG9uc2UsIGNvbnRlbnQgPSBjbGllbnQucmVxdWVzdChyZXF1ZXN0X3VybCwgJ0dFVCcpCiAgICAgICAgaWYgcmVzcG9uc2VbJ3N0YXR1cyddID09ICcyMDAnOgoKICAgICAgICAgICAgIyBHZXQgcHJvZmlsZSBpbmZvIGZyb20gRmFjZWJvb2sKICAgICAgICAgICAgYmFzZV91cmwgPSAne30/YWNjZXNzX3Rva2VuPXt9JmZpZWxkcz1pZCxmaXJzdF9uYW1lLGxhc3RfbmFtZSxlbWFpbCcKICAgICAgICAgICAgYWNjZXNzX3Rva2VuID0ganNvbi5sb2Fkcyhjb250ZW50KVsnYWNjZXNzX3Rva2VuJ10KICAgICAgICAgICAgcmVxdWVzdF91cmwgPSBiYXNlX3VybC5mb3JtYXQoRkFDRUJPT0tfQ0hFQ0tfQVVUSCwgYWNjZXNzX3Rva2VuKQogICAgICAgICAgICByZXNwb25zZSwgY29udGVudCA9IGNsaWVudC5yZXF1ZXN0KHJlcXVlc3RfdXJsLCAnR0VUJykKICAgICAgICAgICAgaWYgcmVzcG9uc2VbJ3N0YXR1cyddID09ICcyMDAnOgogICAgICAgICAgICAgICAgdXNlcl9kYXRhID0ganNvbi5sb2Fkcyhjb250ZW50KQoKICAgICAgICAgICAgICAgICMgQXV0aGVudGljYXRlIHVzZXIKICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zyh1c2VyX2RhdGEpCiAgICAgICAgICAgICAgICB1c2VyID0gc2VsZi5zZXRfdXNlcih1c2VyX2RhdGEpCiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5hdXRoZW50aWNhdGUocmVxdWVzdCwgdXNlci51c2VybmFtZSkKCiAgICAgICAgc2VsZi5sb2dpbl9mYWlsdXJlKCkKPHxmaW1fc3VmZml4fD4KCmNvbnN1bWVyID0gb2F1dGguQ29uc3VtZXIoa2V5PXNldHRpbmdzLkZBQ0VCT09LX0FQUF9JRCwgc2VjcmV0PXNldHRpbmdzLkZBQ0VCT09LX0FQUF9TRUNSRVQpCgoKPHxmaW1fZW5kfD4="]
["9594347c5458d0537507ad4991189831c5433b2c-1","9594347c5458d0537507ad4991189831c5433b2c","PHxmaW1fcHJlZml4fD4KZnJvbSBjbGljay50ZXN0aW5nIGltcG9ydCBDbGlSdW5uZXIKZnJvbSBtaWIubWFpbiBpbXBvcnQgaW5pdAoKZGVmIHRlc3RfaGVsbG9fd29ybGQoKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogIHJ1bm5lciA9IENsaVJ1bm5lcigpCiAgcmVzdWx0ID0gcnVubmVyLmludm9rZShpbml0LCBbXSkKICAKPHxmaW1fZW5kfD4="]
["dd1536f843cdf1f9b768c86d8f587e313c569f59-3","dd1536f843cdf1f9b768c86d8f587e313c569f59","PHxmaW1fcHJlZml4fD4KCmNsYXNzIFNvbHV0aW9uKG9iamVjdCk6CiAgICBkZWYgaXNQYWxpbmRyb21lKHNlbGYsIGhlYWQpOgogICAgICAgICIiIgogICAgICAgIDp0eXBlIGhlYWQ6IExpc3ROb2RlCiAgICAgICAgOnJ0eXBlOiBib29sCiAgICAgICAgIiIiCiAgICAgICAgdmFscyA9IFtdCiAgICAgICAgd2hpbGUgaGVhZDoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICB2YWxzLmFwcGVuZChoZWFkLnZhbCkKICAgICAgICAgICAgaGVhZCA9IGhlYWQubmV4dAo8fGZpbV9lbmR8Pg=="]
["ba920e26a9481b2d0c25686f46b673e23050f21d-4","ba920e26a9481b2d0c25686f46b673e23050f21d","PHxmaW1fcHJlZml4fD4KZnJvbSBwcHR4IGltcG9ydCBQcmVzZW50YXRpb24KaW1wb3J0IG9zCgpjdXJfZGlyZWN0b3J5ID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aCggX19maWxlX18gKSkKZmlsZXMgPSBbeCBmb3IgeCBpbiBvcy5saXN0ZGlyKGN1cl9kaXJlY3RvcnkpIGlmIHguZW5kc3dpdGgoIi5wcHR4IildCgo8fGZpbV9ob2xlfD4KICAgICAgICBwcmludChlYWNoZmlsZSkKICAgICAgICBwcmludCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpCiAgICAgICAgZm9yIHNsaWRlIGluIHBycy5zbGlkZXM6CiAgICAgICAgICAgIGZvciBzaGFwZSBpbiBzbGlkZS5zaGFwZXM6CiAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHNoYXBlLCAidGV4dCIpOgogICAgICAgICAgICAgICAgICAgIHJhd190ZXh0LmFwcGVuZChzaGFwZS50ZXh0KQogICAgcmV0dXJuIHN0cihyYXdfdGV4dCkKICAgIAo8fGZpbV9zdWZmaXh8PgpyYXdfdGV4dCA9IFtdCmRlZiBwcHRfdG9fdGV4dCgpOgogICAgZm9yIGVhY2hmaWxlIGluIGZpbGVzOgogICAgICAgIHBycyA9IFByZXNlbnRhdGlvbihlYWNoZmlsZSkKPHxmaW1fZW5kfD4="]
["c6dbf3a2483c5b6d4373017e2a0da3779e9feaf8-4","c6dbf3a2483c5b6d4373017e2a0da3779e9feaf8","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCmZyb20gY29weSBpbXBvcnQgY29weQoKaW1wb3J0IG51bXB5IGFzIG5tCgpmcm9tIHNmZXB5LmJhc2UuYmFzZSBpbXBvcnQgKGFzX2Zsb2F0X29yX2NvbXBsZXgsIGdldF9kZWZhdWx0LCBhc3NlcnRfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRhaW5lciwgU3RydWN0LCBiYXNlc3RyLCBnb3B0aW9ucykKZnJvbSBzZmVweS5iYXNlLmNvbXBhdCBpbXBvcnQgaW4xZAoKIyBVc2VkIGZvciBpbXBvcnRzIGluIHRlcm0gZmlsZXMuCmZyb20gc2ZlcHkudGVybXMuZXh0bW9kcyBpbXBvcnQgdGVybXMKCmZyb20gc2ZlcHkubGluYWxnIGltcG9ydCBzcGxpdF9yYW5nZQoKX21hdGNoX2FyZ3MgPSByZS5jb21waWxlKCdeKFteXChcfV0qKVwoKC4qKVwpJCcpLm1hdGNoCl9tYXRjaF92aXJ0dWFsID0gcmUuY29tcGlsZSgnXnZpcnR1YWwkJykubWF0Y2gKX21hdGNoX3N0YXRlID0gcmUuY29tcGlsZSgnXnN0YXRlKF9bX2EtekEtWjAtOV0rKT8kJykubWF0Y2gKX21hdGNoX3BhcmFtZXRlciA9IHJlLmNvbXBpbGUoJ15wYXJhbWV0ZXIoX1tfYS16QS1aMC05XSspPyQnKS5tYXRjaApfbWF0Y2hfbWF0ZXJpYWwgPSByZS5jb21waWxlKCdebWF0ZXJpYWwoX1tfYS16QS1aMC05XSspPyQnKS5tYXRjaApfbWF0Y2hfbWF0ZXJpYWxfb3B0ID0gcmUuY29tcGlsZSgnXm9wdF9tYXRlcmlhbChfW19hLXpBLVowLTldKyk/JCcpLm1hdGNoCl9tYXRjaF9tYXRlcmlhbF9yb290ID0gcmUuY29tcGlsZSgnKC4rKVwuKC4qKScpLm1hdGNoCgpkZWYgZ2V0X2FyZ19raW5kcyhhcmdfdHlwZXMpOgogICAgIiIiCiAgICBUcmFuc2xhdGUgYGFyZ190eXBlc2Agb2YgYSBUZXJtIHRvIGEgY2Fub25pY2FsIGZvcm0uCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgYXJnX3R5cGVzIDogdHVwbGUgb2Ygc3RyaW5ncwogICAgICAgIFRoZSB0ZXJtIGFyZ3VtZW50IHR5cGVzLCBhcyBnaXZlbiBpbiB0aGUgYGFyZ190eXBlc2AgYXR0cmlidXRlLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIGFyZ19raW5kcyA6IGxpc3Qgb2Ygc3RyaW5ncwogICAgICAgIFRoZSBhcmd1bWVudCBraW5kcyAtIG9uZSBvZiAndmlydHVhbF92YXJpYWJsZScsICdzdGF0ZV92YXJpYWJsZScsCiAgICAgICAgJ3BhcmFtZXRlcl92YXJpYWJsZScsICdvcHRfbWF0ZXJpYWwnLCAndXNlcicuCiAgICAiIiIKICAgIGFyZ19raW5kcyA9IFtdCiAgICBmb3IgaWksIGFyZ190eXBlIGluIGVudW1lcmF0ZShhcmdfdHlwZXMpOgogICAgICAgIGlmIF9tYXRjaF92aXJ0dWFsKGFyZ190eXBlKToKICAgICAgICAgICAgYXJnX2tpbmRzLmFwcGVuZCgndmlydHVhbF92YXJpYWJsZScpCgogICAgICAgIGVsaWYgX21hdGNoX3N0YXRlKGFyZ190eXBlKToKICAgICAgICAgICAgYXJnX2tpbmRzLmFwcGVuZCgnc3RhdGVfdmFyaWFibGUnKQoKICAgICAgICBlbGlmIF9tYXRjaF9wYXJhbWV0ZXIoYXJnX3R5cGUpOgogICAgICAgICAgICBhcmdfa2luZHMuYXBwZW5kKCdwYXJhbWV0ZXJfdmFyaWFibGUnKQoKICAgICAgICBlbGlmIF9tYXRjaF9tYXRlcmlhbChhcmdfdHlwZSk6CiAgICAgICAgICAgIGFyZ19raW5kcy5hcHBlbmQoJ21hdGVyaWFsJykKCiAgICAgICAgZWxpZiBfbWF0Y2hfbWF0ZXJpYWxfb3B0KGFyZ190eXBlKToKICAgICAgICAgICAgYXJnX2tpbmRzLmFwcGVuZCgnb3B0X21hdGVyaWFsJykKICAgICAgICAgICAgaWYgaWkgPiAwOgogICAgICAgICAgICAgICAgbXNnID0gJ29wdF9tYXRlcmlhbCBhdCBwb3NpdGlvbiAlZCwgbXVzdCBiZSBhdCAwIScgJSBpaQogICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgYXJnX2tpbmRzLmFwcGVuZCgndXNlcicpCgogICAgcmV0dXJuIGFyZ19raW5kcwoKZGVmIGdldF9zaGFwZV9raW5kKGludGVncmF0aW9uKToKICAgICIiIgogICAgR2V0IGRhdGEgc2hhcGUga2luZCBmb3IgZ2l2ZW4gaW50ZWdyYXRpb24gdHlwZS4KICAgICIiIgogICAgaWYgaW50ZWdyYXRpb24gPT0gJ3N1cmZhY2UnOgogICAgICAgIHNoYXBlX2tpbmQgPSAnc3VyZmFjZScKCiAgICBlbGlmIGludGVncmF0aW9uIGluICgndm9sdW1lJywgJ3BsYXRlJywgJ3N1cmZhY2VfZXh0cmEnKToKICAgICAgICBzaGFwZV9raW5kID0gJ3ZvbHVtZScKCiAgICBlbGlmIGludGVncmF0aW9uID09ICdwb2ludCc6CiAgICAgICAgc2hhcGVfa2luZCA9ICdwb2ludCcKCiAgICBlbHNlOgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ3Vuc3VwcG9ydGVkIHRlcm0gaW50ZWdyYXRpb24hICglcyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGludGVncmF0aW9uKQoKICAgIHJldHVybiBzaGFwZV9raW5kCgpkZWYgc3BsaXRfY29tcGxleF9hcmdzKGFyZ3MpOgogICAgIiIiCiAgICBTcGxpdCBjb21wbGV4IGFyZ3VtZW50cyB0byByZWFsIGFuZCBpbWFnaW5hcnkgcGFydHMuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgbmV3YXJncyA6IGRpY3Rpb25hcnkKICAgICAgICBEaWN0aW9uYXJ5IHdpdGggbGlzdHMgY29ycmVzcG9uZGluZyB0byBgYXJnc2Agc3VjaCB0aGF0IGVhY2gKICAgICAgICBhcmd1bWVudCBvZiBudW1weS5jb21wbGV4MTI4IGRhdGEgdHlwZSBpcyBzcGxpdCB0byBpdHMgcmVhbCBhbmQKICAgICAgICBpbWFnaW5hcnkgcGFydC4gVGhlIG91dHB1dCBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YgY29tcGxleAogICAgICAgIGFyZ3VtZW50cyBpbiAnYXJncyc6CgogICAgICAgICAgLSAwOiBsaXN0IChrZXkgJ3InKSBpZGVudGljYWwgdG8gaW5wdXQgb25lCgogICAgICAgICAgLSAxOiB0d28gbGlzdHMgd2l0aCBrZXlzICdyJywgJ2knIGNvcnJlc3BvbmRpbmcgdG8gcmVhbAogICAgICAgICAgICBhbmQgaW1hZ2luYXJ5IHBhcnRzCgogICAgICAgICAgLSAyOiBvdXRwdXQgZGljdGlvbmFyeSBjb250YWlucyBmb3VyIGxpc3RzOgoKICAgICAgICAgICAgLSAncicgLSByZWFsKGFyZzEpLCByZWFsKGFyZzIpCiAgICAgICAgICAgIC0gJ2knIC0gaW1hZyhhcmcxKSwgaW1hZyhhcmcyKQogICAgICAgICAgICAtICdyaScgLSByZWFsKGFyZzEpLCBpbWFnKGFyZzIpCiAgICAgICAgICAgIC0gJ2lyJyAtIGltYWcoYXJnMSksIHJlYWwoYXJnMikKICAgICIiIgogICAgbmV3YXJncyA9IHt9CiAgICBjYWkgPSBbXQoKICAgIGZvciBpaSwgYXJnIGluIGVudW1lcmF0ZShhcmdzKToKICAgICAgICBpZiBpc2luc3RhbmNlKGFyZywgbm0ubmRhcnJheSkgYW5kIChhcmcuZHR5cGUgPT0gbm0uY29tcGxleDEyOCk6CiAgICAgICAgICAgIGNhaS5hcHBlbmQoaWkpCgogICAgaWYgbGVuKGNhaSkgPiAwOgogICAgICAgIG5ld2FyZ3NbJ3InXSA9IGxpc3QoYXJnc1s6XSkKICAgICAgICBuZXdhcmdzWydpJ10gPSBsaXN0KGFyZ3NbOl0pCgogICAgICAgIGFyZzEgPSBjYWlbMF0KICAgICAgICBuZXdhcmdzWydyJ11bYXJnMV0gPSBhcmdzW2FyZzFdLnJlYWwuY29weSgpCiAgICAgICAgbmV3YXJnc1snaSddW2FyZzFdID0gYXJnc1thcmcxXS5pbWFnLmNvcHkoKQoKICAgICAgICBpZiBsZW4oY2FpKSA9PSAyOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGFyZzIgPSBjYWlbMV0KICAgICAgICAgICAgbmV3YXJnc1snciddW2FyZzJdID0gYXJnc1thcmcyXS5yZWFsLmNvcHkoKQogICAgICAgICAgICBuZXdhcmdzWydpJ11bYXJnMl0gPSBhcmdzW2FyZzJdLmltYWcuY29weSgpCgo8fGZpbV9lbmR8Pg=="]
["05d774404cd0e24e2afa6e6126cd10de7f9401ab-1","05d774404cd0e24e2afa6e6126cd10de7f9401ab","PHxmaW1fcHJlZml4fD4KZnJvbSBlbnVtIGltcG9ydCBFbnVtCmZyb20gdHlwaW5nIGltcG9ydCBVbmlvbgoKaW1wb3J0IHJlcXVlc3RzCmZyb20gZ3FsIGltcG9ydCBDbGllbnQsIGdxbApmcm9tIGdxbC50cmFuc3BvcnQucmVxdWVzdHMgaW1wb3J0IFJlcXVlc3RzSFRUUFRyYW5zcG9ydApmcm9tIHJldHJ5aW5nIGltcG9ydCByZXRyeQoKaW1wb3J0IHNyYy5jbGkuY29uc29sZSBhcyBjb25zb2xlCmZyb20gc3JjIGltcG9ydCBzZXR0aW5ncwoKCiMgRW52aXJvbm1lbnRUeXBlCmNsYXNzIEVudmlyb25tZW50VHlwZShFbnVtKToKICAgIExPQ0FMID0gIkxPQ0FMIgogICAgUkVNT1RFID0gIlJFTU9URSIKCgpjbGFzcyBSZXRyeUV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgcGFzcwoKCiMgcmV0cnkgZXhjZXB0aW9uIGxvZ2ljCmRlZiByZXRyeV9leGNlcHRpb24oZXhjZXB0aW9uKToKICAgIHJldHVybiBpc2luc3RhbmNlKGV4Y2VwdGlvbiwgUmV0cnlFeGNlcHRpb24pCgoKY2xhc3MgR3JhcGhRTDoKICAgIGRlZiBfX2luaXRfXygKICAgICAgICBzZWxmLAogICAgICAgIGF1dGhlbnRpY2F0aW9uLAogICAgICAgIHVybD1zZXR0aW5ncy5HUkFQSFFMX1VSTCwKICAgICAgICB0aW1lb3V0PXNldHRpbmdzLkdSQVBIUUxfVElNRU9VVCwKICAgICk6CiAgICAgICAgc2VsZi51cmwgPSB1cmwKICAgICAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0CgogICAgICAgICMgYXV0b21hdGljIHRva2VuIHJlZnJlc2gKICAgICAgICBzZWxmLmF1dGhlbnRpY2F0aW9uID0gYXV0aGVudGljYXRpb24KICAgICAgICBzZWxmLmFjY2Vzc190b2tlbiA9IHN0cihhdXRoZW50aWNhdGlvbi5nZW5lcmFsX2RhdGEuYXV0aGVudGljYXRpb24uYWNjZXNzX3Rva2VuKQoKICAgICAgICAjIGNsaWVudAogICAgICAgIHNlbGYuY2xpZW50ID0gc2VsZi5fY2xpZW50KCkKCiAgICBkZWYgX2NsaWVudChzZWxmKToKICAgICAgICAjIGhlYWRlcgogICAgICAgIGhlYWRlcnMgPSB7CiAgICAgICAgICAgICJDb250ZW50LXR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIsCiAgICAgICAgICAgICJBdXRob3JpemF0aW9uIjogIkJlYXJlciAiICsgc3RyKHNlbGYuYWNjZXNzX3Rva2VuKSwKICAgICAgICB9CgogICAgICAgICMgdHJhbnNwb3J0CiAgICAgICAgdHJhbnNwb3J0ID0gUmVxdWVzdHNIVFRQVHJhbnNwb3J0KAogICAgICAgICAgICB1cmw9c2VsZi51cmwsCiAgICAgICAgICAgIHVzZV9qc29uPVRydWUsCiAgICAgICAgICAgIGhlYWRlcnM9aGVhZGVycywKICAgICAgICAgICAgdmVyaWZ5PUZhbHNlLAogICAgICAgICAgICByZXRyaWVzPTMsCiAgICAgICAgICAgIHRpbWVvdXQ9c2VsZi50aW1lb3V0LAogICAgICAgICkKCiAgICAgICAgIyBjbGllbnQKICAgICAgICBjbGllbnQgPSBDbGllbnQodHJhbnNwb3J0PXRyYW5zcG9ydCkKCiAgICAgICAgcmV0dXJuIGNsaWVudAoKICAgIEByZXRyeShyZXRyeV9vbl9leGNlcHRpb249cmV0cnlfZXhjZXB0aW9uLCBzdG9wX21heF9hdHRlbXB0X251bWJlcj0yKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgcXVlcnkoCiAgICAgICAgc2VsZiwKICAgICAgICBxdWVyeTogc3RyLAogICAgICAgIHF1ZXJ5X3ZhcmlhYmxlczogZGljdCA9IE5vbmUsCjx8ZmltX2VuZHw+"]
["eed2c2bf7762d296c054ed069d7a6ff1301f16ac-3","eed2c2bf7762d296c054ed069d7a6ff1301f16ac","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQgdGhyZWFkaW5nCgppbXBvcnQgcGtnX3Jlc291cmNlcwoKZnJvbSB6b3BlLmludGVyZmFjZSBpbXBvcnQgaW1wbGVtZW50ZXIKCjx8ZmltX2hvbGV8PgogICAgKQoKZnJvbSBweXJhbWlkX2NoYW1lbGVvbi5pbnRlcmZhY2VzIGltcG9ydCAoCiAgICBJQ2hhbWVsZW9uTG9va3VwLAogICAgSUNoYW1lbGVvblRyYW5zbGF0ZSwKICAgIElUZW1wbGF0ZVJlbmRlcmVyLAogICAgKQoKCkBpbXBsZW1lbnRlcihJQ2hhbWVsZW9uTG9va3VwKQpjbGFzcyBDaGFtZWxlb25SZW5kZXJlckxvb2t1cChvYmplY3QpOgogICAgc3BlY19yZSA9IHJlLmNvbXBpbGUoCiAgICAgICAgcicoP1A8YXNzZXQ+W1x3Xy46Ly1dKyknCiAgICAgICAgcicoPzpcIyg/UDxkZWZuYW1lPltcd19dKykpPycKICAgICAgICByJyhcLig/UDxleHQ+LiopKScKICAgICAgICApCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGltcGwsIHJlZ2lzdHJ5KToKICAgICAgICBzZWxmLmltcGwgPSBpbXBsCiAgICAgICAgc2VsZi5yZWdpc3RyeSA9IHJlZ2lzdHJ5CiAgICAgICAgc2VsZi5sb2NrID0gdGhyZWFkaW5nLkxvY2soKQoKICAgIGRlZiBnZXRfc3BlYyhzZWxmLCBuYW1lLCBwYWNrYWdlKToKICAgICAgICBpZiBub3QgcGFja2FnZToKICAgICAgICAgICAgIyBpZiB0aGVyZSdzIG5vIHBhY2thZ2UsIHdlIGNhbid0IGRvIGFueSBjb252ZXJzaW9uCiAgICAgICAgICAgIHJldHVybiBuYW1lCgogICAgICAgIHNwZWMgPSBuYW1lCiAgICAgICAgaXNhYnNwYXRoID0gb3MucGF0aC5pc2FicyhuYW1lKQogICAgICAgIGNvbG9uX2luX25hbWUgPSAnOicgaW4gbmFtZQogICAgICAgIGlzYWJzc3BlYyA9IGNvbG9uX2luX25hbWUgYW5kIChub3QgaXNhYnNwYXRoKQogICAgICAgIGlzcmVsc3BlYyA9IChub3QgaXNhYnNzcGVjKSBhbmQgKG5vdCBpc2Fic3BhdGgpCgogICAgICAgICMgaWYgaXQncyBhbHJlYWR5IGFuIGFic29sdXRlIHNwZWMsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcsCiAgICAgICAgIyBidXQgaWYgaXQncyBhIHJlbGF0aXZlIHNwZWMgb3IgYW4gYWJzb2x1dGUgcGF0aCwgd2UgbmVlZCB0byB0cnkKICAgICAgICAjIHRvIGNvbnZlcnQgaXQgdG8gYW4gYWJzb2x1dGUgc3BlYwoKICAgICAgICBpZiBpc3JlbHNwZWM6CiAgICAgICAgICAgICMgY29udmVydCByZWxhdGl2ZSBhc3NldCBzcGVjIHRvIGFic29sdXRlIGFzc2V0IHNwZWMKICAgICAgICAgICAgcHAgPSBwYWNrYWdlX3BhdGgocGFja2FnZSkKICAgICAgICAgICAgc3BlYyA9IG9zLnBhdGguam9pbihwcCwgc3BlYykKICAgICAgICAgICAgc3BlYyA9IGFzc2V0X3NwZWNfZnJvbV9hYnNwYXRoKHNwZWMsIHBhY2thZ2UpCgogICAgICAgIGVsaWYgaXNhYnNwYXRoOgogICAgICAgICAgICAjIGNvbnZlcnQgYWJzb2x1dGUgcGF0aCB0byBhYnNvbHV0ZSBhc3NldCBzcGVjCiAgICAgICAgICAgIHNwZWMgPSBhc3NldF9zcGVjX2Zyb21fYWJzcGF0aChzcGVjLCBwYWNrYWdlKQoKICAgICAgICByZXR1cm4gc3BlYwoKICAgIEBwcm9wZXJ0eSAjIHdhaXQgdW50aWwgY29tcGxldGVseSBuZWNlc3NhcnkgdG8gbG9vayB1cCB0cmFuc2xhdG9yCiAgICBkZWYgdHJhbnNsYXRlKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnJlZ2lzdHJ5LnF1ZXJ5VXRpbGl0eShJQ2hhbWVsZW9uVHJhbnNsYXRlKQoKICAgIEBwcm9wZXJ0eSAjIHdhaXQgdW50aWwgY29tcGxldGVseSBuZWNlc3NhcnkgdG8gbG9vayB1cCBkZWJ1Z190ZW1wbGF0ZXMKICAgIGRlZiBkZWJ1ZyhzZWxmKToKICAgICAgICBzZXR0aW5ncyA9IHNlbGYucmVnaXN0cnkuc2V0dGluZ3MKICAgICAgICBpZiBzZXR0aW5ncyBpcyBOb25lOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICByZXR1cm4gc2V0dGluZ3MuZ2V0KCdkZWJ1Z190ZW1wbGF0ZXMnLCBGYWxzZSkKCiAgICBAcHJvcGVydHkgIyB3YWl0IHVudGlsIGNvbXBsZXRlbHkgbmVjZXNzYXJ5IHRvIGxvb2sgdXAgcmVsb2FkX3RlbXBsYXRlcwogICAgZGVmIGF1dG9fcmVsb2FkKHNlbGYpOgogICAgICAgIHNldHRpbmdzID0gc2VsZi5yZWdpc3RyeS5zZXR0aW5ncwogICAgICAgIGlmIHNldHRpbmdzIGlzIE5vbmU6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgIHJldHVybiBzZXR0aW5ncy5nZXQoJ3JlbG9hZF90ZW1wbGF0ZXMnLCBGYWxzZSkKCiAgICBkZWYgX2NyYWNrX3NwZWMoc2VsZiwgc3BlYyk6CiAgICAgICAgYXNzZXQsIG1hY3JvLCBleHQgPSBzZWxmLnNwZWNfcmUubWF0Y2goc3BlYykuZ3JvdXAoCiAgICAgICAgICAgICdhc3NldCcsICdkZWZuYW1lJywgJ2V4dCcKICAgICAgICAgICAgKQogICAgICAgIHJldHVybiBhc3NldCwgbWFjcm8sIGV4dAoKICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBpbmZvKToKICAgICAgICBzcGVjID0gc2VsZi5nZXRfc3BlYyhpbmZvLm5hbWUsIGluZm8ucGFja2FnZSkKICAgICAgICByZWdpc3RyeSA9IGluZm8ucmVnaXN0cnkKCiAgICAgICAgaWYgb3MucGF0aC5pc2FicyhzcGVjKToKICAgICAgICAgICAgIyAnc3BlYycgaXMgYW4gYWJzb2x1dGUgZmlsZW5hbWUKICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNwZWMpOgogICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignTWlzc2luZyB0ZW1wbGF0ZSBmaWxlOiAlcycgJSBzcGVjKQogICAgICAgICAgICByZW5kZXJlciA9IHJlZ2lzdHJ5LnF1ZXJ5VXRpbGl0eShJVGVtcGxhdGVSZW5kZXJlciwgbmFtZT1zcGVjKQogICAgICAgICAgICBpZiByZW5kZXJlciBpcyBOb25lOgogICAgICAgICAgICAgICAgcmVuZGVyZXIgPSBzZWxmLmltcGwoc3BlYywgc2VsZiwgbWFjcm89Tm9uZSkKICAgICAgICAgICAgICAgICMgY2FjaGUgdGhlIHRlbXBsYXRlCiAgICAgICAgICAgICAgICB3aXRoIHNlbGYubG9jazoKICAgICAgICAgICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlclV0aWxpdHkocmVuZGVyZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElUZW1wbGF0ZVJlbmRlcmVyLCBuYW1lPXNwZWMpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyBzcGVjIGlzIGEgcGFja2FnZTpyZWxwYXRoIGFzc2V0IHNwZWMKICAgICAgICAgICAgcmVuZGVyZXIgPSByZWdpc3RyeS5xdWVyeVV0aWxpdHkoSVRlbXBsYXRlUmVuZGVyZXIsIG5hbWU9c3BlYykKICAgICAgICAgICAgaWYgcmVuZGVyZXIgaXMgTm9uZToKICAgICAgICAgICAgICAgIGFzc2V0LCBtYWNybywgZXh0ID0gc2VsZi5fY3JhY2tfc3BlYyhzcGVjKQogICAgICAgICAgICAgICAgc3BlY193aXRob3V0X21hY3JvID0gJyVzLiVzJyAlIChhc3NldCwgZXh0KQogICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgIHBhY2thZ2VfbmFtZSwgZmlsZW5hbWUgPSBzcGVjX3dpdGhvdXRfbWFjcm8uc3BsaXQoJzonLCAxKQogICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6ICMgcHJhZ21hOiBubyBjb3ZlcgogICAgICAgICAgICAgICAgICAgICMgc29tZWhvdyB3ZSB3ZXJlIHBhc3NlZCBhIHJlbGF0aXZlIHBhdGhuYW1lOyB0aGlzCiAgICAgICAgICAgICAgICAgICAgIyBzaG91bGQgZGllCiAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9uYW1lID0gY2FsbGVyX3BhY2thZ2UoNCkuX19uYW1lX18KICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IHNwZWNfd2l0aG91dF9tYWNybwogICAgICAgICAgICAgICAgYWJzcGF0aCA9IHBrZ19yZXNvdXJjZXMucmVzb3VyY2VfZmlsZW5hbWUocGFja2FnZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpCiAgICAgICAgICAgICAgICBpZiBub3QgcGtnX3Jlc291cmNlcy5yZXNvdXJjZV9leGlzdHMocGFja2FnZV9uYW1lLCBmaWxlbmFtZSk6CiAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgJ01pc3NpbmcgdGVtcGxhdGUgYXNzZXQ6ICVzICglcyknICUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY193aXRob3V0X21hY3JvLCBhYnNwYXRoKQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICByZW5kZXJlciA9IHNlbGYuaW1wbChhYnNwYXRoLCBzZWxmLCBtYWNybz1tYWNybykKICAgICAgICAgICAgICAgIHNldHRpbmdzID0gaW5mby5zZXR0aW5ncwogICAgICAgICAgICAgICAgaWYgbm90IHNldHRpbmdzLmdldCgncmVsb2FkX2Fzc2V0cycpOgogICAgICAgICAgICAgICAgICAgICMgY2FjaGUgdGhlIHRlbXBsYXRlCiAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmxvY2s6CiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyVXRpbGl0eShyZW5kZXJlciwgSVRlbXBsYXRlUmVuZGVyZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXNwZWMpCgogICAgICAgIHJldHVybiByZW5kZXJlcgoKcmVnaXN0cnlfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKCmRlZiB0ZW1wbGF0ZV9yZW5kZXJlcl9mYWN0b3J5KGluZm8sIGltcGwsIGxvY2s9cmVnaXN0cnlfbG9jayk6CiAgICByZWdpc3RyeSA9IGluZm8ucmVnaXN0cnkKICAgIGxvb2t1cCA9IHJlZ2lzdHJ5LnF1ZXJ5VXRpbGl0eShJQ2hhbWVsZW9uTG9va3VwLCBuYW1lPWluZm8udHlwZSkKICAgIGlmIGxvb2t1cCBpcyBOb25lOgogICAgICAgIGxvb2t1cCA9IENoYW1lbGVvblJlbmRlcmVyTG9va3VwKGltcGwsIHJlZ2lzdHJ5KQogICAgICAgIHdpdGggbG9jazoKICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJVdGlsaXR5KGxvb2t1cCwgSUNoYW1lbGVvbkxvb2t1cCwgbmFtZT1pbmZvLnR5cGUpCiAgICByZXR1cm4gbG9va3VwKGluZm8pCgo8fGZpbV9zdWZmaXh8Pgpmcm9tIHB5cmFtaWQuYXNzZXQgaW1wb3J0IGFzc2V0X3NwZWNfZnJvbV9hYnNwYXRoCmZyb20gcHlyYW1pZC5wYXRoIGltcG9ydCAoCiAgICBjYWxsZXJfcGFja2FnZSwKICAgIHBhY2thZ2VfcGF0aAo8fGZpbV9lbmR8Pg=="]
["b0b1d785701727c14c9785c92b82f199d13ffa31-4","b0b1d785701727c14c9785c92b82f199d13ffa31","PHxmaW1fcHJlZml4fD4KIiIiCuS6uuawkeaXpeaKpeaVsOaNrumihOWkhOeQhgoK5pWw5o2u5bey57uP6KKr5Yid5q2l5aSE55CG5LqG44CC546w5Zyo5pWw5o2u5qC85byP5Li6OgogICAg5LitL0JfbnQg5YWxL01fbnQg5LitL01fbnQg5aSuL0VfbnQg5oC7L08g5LmmL08g6K6wL08g44CBL08KICAgIOWbvS9PIOWuti9PIOS4uy9PIOW4rS9PIOaxny9CX25yIOazvS9NX25yIOawkS9FX25yCgrph4zpnaLnmoTlrp7kvZPmnInvvJrkurrlkI3jgIHlnLDlkI3jgIHmnLrmnoTlkI3np7AKICAgIOS6uuWQje+8miBCX25yIE1fbnIgRV9ucgogICAg5Zyw5ZCN77yaIEJfbnMgTV9ucyBFX25zCiAgICDmnLrmnoTlkI3np7A6IEJfbnQgTV9udCBFX250CgrnlLHkuo7ov5nkuKrmlbDmja7nmoTlpITnkIbpnIDopoHlpITnkIbmiJA6CuS6uuWQje+8mgogICAgQl9uciAtPiBCLVBFUgogICAgTV9uciAtPiBJLVBFUgogICAgRV9uciAtPiBJLVBFUgoK5Zyw5ZCN77yaCiAgICBCX25zIC0+IEItTE9DCiAgICBNX25zIC0+IEktTE9DCiAgICBFX25zIC0+IEktTE9DCgrmnLrmnoTlkI3np7A6CiAgICBCX250IC0+IEItT1JHCiAgICBNX250IC0+IEktT1JHCiAgICBFX250IC0+IEktT1JHCgoK5bCGcmVubWluMy50eHQg5paH5Lu25YiG5Ymy5oiQ5Lik5Lu95YiG5Yir5Li66K6t57uD6ZuG5ZKM5rWL6K+V6ZuG77yM5YiG5Ymy5q+U5L6L5oyJ54WnODoy6L+b6KGM5YiG5Ymy44CCCuWIhuWJsuWQjuWtmOWCqOWQjeensOS4ujogdHJhaW4udHh0ICAgdGVzdC50eHQKCuWtmOWCqOagvOW8jzoo5q+P5Liq5a2X56ym5ZKM5qCH5b+X5Li65LiA6KGM77yM5a2X56ym5ZKM5qCH5b+X56m65qC856ym5Y+36ZqU5byA44CC5q+P5LiA5Y+l55So5Zue6L2m6ZqU5byAKQpjaGFyIHRhZwrmoJEgTwrnq4sgTwrkvIEgTwrkuJogTwrlvaIgTwrosaEgTwrnmoQgTwrpnIAgTwropoEgTwoK5aSnIEItT1JHCui/niBJLU9SRwrmtbcgSS1PUkcK5a+MIEktT1JHCumbhiBJLU9SRwrlm6IgSS1PUkcKCiIiIgoKZnJvbSBQdWJsaWMucGF0aCBpbXBvcnQgcGF0aF9yZW5taW5fZGlyCmltcG9ydCBvcwoKCiMg6K+75Y+W5pWw5o2uCmRlZiByZWFkX2ZpbGUoZmlsZV9wYXRoOiBzdHIpIC0+IFtzdHJdOgogICAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3InKSBhcyBmOgogICAgICAgIHRleHRzID0gZi5yZWFkKCkuc3BsaXQoJ1xuJykKICAgIHJldHVybiB0ZXh0cwoKCiMg5paH5pys5pig5bCECmRlZiB0ZXh0X21hcCh0ZXh0czogW3N0cl0pIC0+IFtzdHJdOgogICAgIiIiCiAgICDmlofmnKzmmKDlsITlpITnkIYKICAgIOWkhOeQhuWlveeahOaVsOaNruagvOW8jzoKICAgICAgIFsn6ZyAIE8nCiAgICAgICAgJ+imgSBPJwogICAgICAgICflpKcgQi1PUkcnCiAgICAgICAgJ+i/niBJLU9SRycKICAgICAgICAn5rW3IEktT1JHJwogICAgICAgICflr4wgSS1PUkcnCiAgICAgICAgJ+mbhiBJLU9SRycKICAgICAgICAn5ZuiIEktT1JHJ10KCiAgICA6cGFyYW0gdGV4dHM6ICDkvovlpoIg5LitL0JfbnQg5YWxL01fbnQg5LitL01fbnQg5aSuL0VfbnQg5oC7L08gIOeahOaWh+acrAogICAgOnJldHVybjogW3N0cl0g5aSE55CG5aW955qE5pWw5o2uCiAgICAiIiIKICAgIG1hcHBpbmcgPSB7J08nOiAnTycsCiAgICAgICAgICAgICAgICdCX25yJzogJ0ItUEVSJywKICAgICAgICAgICAgICAgJ01fbnInOiAnSS1QRVInLAogICAgICAgICAgICAgICAnRV9ucic6ICdJLVBFUicsCiAgICAgICAgICAgICAgICdCX25zJzogJ0ItTE9DJywKICAgICAgICAgICAgICAgJ01fbnMnOiAnSS1MT0MnLAogICAgICAgICAgICAgICAnRV9ucyc6ICdJLUxPQycsCiAgICAgICAgICAgICAgICdCX250JzogJ0ItT1JHJywKICAgICAgICAgICAgICAgJ01fbnQnOiAnSS1PUkcnLAogICAgICAgICAgICAgICAnRV9udCc6ICdJLU9SRycKICAgICAgICAgICAgICB9CiAgICBkZWFsX3RleHRzID0gW10KICAgIGZvciBsaW5lIGluIHRleHRzOgogICAgICAgIHN1Yl9saW5lID0gc3RyKGxpbmUpLnNwbGl0KCcgJykKICAgICAgICBmb3IgaXRlbSBpbiBzdWJfbGluZToKICAgICAgICAgICAgaXRlbV9saXN0ID0gc3RyKGl0ZW0pLnNwbGl0KCcvJykKICAgICAgICAgICAgaWYgbGVuKGl0ZW1fbGlzdCkgPT0gMjoKICAgICAgICAgICAgICAgIGEgPSBpdGVtX2xpc3RbMF0KICAgICAgICAgICAgICAgIGIgPSBpdGVtX2xpc3RbMV0KICAgICAgICAgICAgICAgIGZsYWcgPSBtYXBwaW5nLmdldChiLCAnTycpCiAgICAgICAgICAgICAgICBkZWFsX3RleHRzLmFwcGVuZChmInthfSB7ZmxhZ31cbiIpCiAgICAgICAgZGVhbF90ZXh0cy5hcHBlbmQoJ1xuJykKICAgIHJldHVybiBkZWFsX3RleHRzCgoKIyDmlbDmja7pooTlpITnkIYKZGVmIHJlbm1pbnJpYmFvX3ByZXByb2Nlc3Npbmcoc3BsaXRfcmF0ZTogZmxvYXQgPSAwLjgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZV9leGlzdDogYm9vbCA9IEZhbHNlKSAtPiBOb25lOgogICAgIiIiCiAgICDkurrlkI3ml6XmiqXmlbDmja7pooTlpITnkIYKICAgIDpwYXJhbSBzcGxpdF9yYXRlOuaVsOaNruWIhuWJsuavlOS+i++8jOm7mOiupOS4uiAwLjgKICAgIDpwYXJhbSBpZ25vcmVfZXhpc3Qg5b+955Wl5bey57uP5a2Y5YKo55qE5pWw5o2u77yM5YiZ5LiN6ZyA6KaB5Zyo5Yik5pat5Lul5Y+K5a2Y5aW955qE5pWw5o2uCiAgICA6cmV0dXJuOk5vbmUKICAgICIiIgogICAgcGF0aF90cmFpbiA9IG9zLnBhdGguam9pbihwYXRoX3Jlbm1pbl9kaXIsICJ0cmFpbi50eHQiKQogICAgcGF0aF90ZXN0ID0gb3MucGF0aC5qb2luKHBhdGhfcmVubWluX2RpciwgInRlc3QudHh0IikKICAgIGlmIG5vdCBpZ25vcmVfZXhpc3QgYW5kIG9zLnBhdGguZXhpc3RzKHBhdGhfdHJhaW4pIGFuZCBvcy5wYXRoLmV4aXN0cyhwYXRoX3Rlc3QpOgogICAgICAgIHByaW50KCLkurrmsJHml6XmiqXmlbDmja7pooTlpITnkIblt7Lnu4/lrozmiJAiKQogICAgICAgIHJldHVybgogICAgZWxzZToKICAgICAgICBwcmludCgi5q2j5Zyo5a+55Lq65rCR5pel5oql5pWw5o2u6L+b6KGM6aKE5aSE55CGLi4uLi4uIikKICAgIHBhdGhfb3JnID0gb3MucGF0aC5qb2luKHBhdGhfcmVubWluX2RpciwgInJlbm1pbjMudHh0IikKICAgIHRleHRzID0gcmVhZF9maWxlKHBhdGhfb3JnKQoKICAgICMg5a+55pWw5o2u6L+b6KGM5YiG5Ymy5aSE55CGCiAgICBpZiBzcGxpdF9yYXRlID49IDEuMDogICMg5YiG5Ymy5q+U5L6L5LiN5b6X5aSn5LqOMS4wCiAgICAgICAgc3BsaXRfcmF0ZSA9IDAuOAogICAgc3BsaXRfaW5kZXggPSBpbnQobGVuKHRleHRzKSAqIHNwbGl0X3JhdGUpCiAgICB0cmFpbl90ZXh0cyA9IHRleHRzWzpzcGxpdF9pbmRleF0KICAgIHRlc3RfdGV4dHMgPSB0ZXh0c1tzcGxpdF9pbmRleDpdCgogICAgIyDlr7nmlbDmja7ov5vooYzmmKDlsITlpITnkIYKICAgIHRlc3RfdGV4dHMgPSB0ZXh0X21hcCh0ZXN0X3RleHRzKQogICAgdHJhaW5fdGV4dHMgPSB0ZXh0X21hcCh0cmFpbl90ZXh0cykKCiAgICAjIOaVsOaNruWGmeWFpeWIsOacrOWcsOaWh+S7tgogICAgd2l0aCBvcGVuKHBhdGhfdHJhaW4sICd3JykgYXMgZjoKICAgICAgICBmLndyaXRlKCIiLmpvaW4odHJhaW5fdGV4dHMpKQogICAgd2l0aCBvcGVuKHBhdGhfdGVzdCwgJ3cnKSBhcyBmOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZi53cml0ZSgiIi5qb2luKHRlc3RfdGV4dHMpKQo8fGZpbV9lbmR8Pg=="]
["c6a53fb25a198f376b45e2725e39880a8d00c096-3","c6a53fb25a198f376b45e2725e39880a8d00c096","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMS42IG9uIDIwMjEtMDItMTYgMDg6MzgKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgKCJhdXRoZW50aWtfZmxvd3MiLCAiMDAxNl9hdXRvXzIwMjAxMjAyXzEzMDciKSwKICAgICAgICAoImF1dGhlbnRpa19zdGFnZXNfYXV0aGVudGljYXRvcl92YWxpZGF0ZSIsICIwMDAxX2luaXRpYWwiKSwKICAgIF0KCiAgICBvcGVyYXRpb25zID0gWwogICAgICAgIG1pZ3JhdGlvbnMuUmVuYW1lTW9kZWwoCiAgICAgICAgICAgIG9sZF9uYW1lPSJPVFBWYWxpZGF0ZVN0YWdlIiwKICAgICAgICAgICAgbmV3X25hbWU9IkF1dGhlbnRpY2F0b3JWYWxpZGF0ZVN0YWdlIiwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJNb2RlbE9wdGlvbnMoCiAgICAgICAgICAgIG5hbWU9ImF1dGhlbnRpY2F0b3J2YWxpZGF0ZXN0YWdlIiwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBvcHRpb25zPXsKICAgICAgICAgICAgICAgICJ2ZXJib3NlX25hbWUiOiAiQXV0aGVudGljYXRvciBWYWxpZGF0aW9uIFN0YWdlIiwKICAgICAgICAgICAgICAgICJ2ZXJib3NlX25hbWVfcGx1cmFsIjogIkF1dGhlbnRpY2F0b3IgVmFsaWRhdGlvbiBTdGFnZXMiLAogICAgICAgICAgICB9LAo8fGZpbV9lbmR8Pg=="]
["06d377f8550d3cb83f2d91cc11290002bd537f02-5","06d377f8550d3cb83f2d91cc11290002bd537f02","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KX19hdXRob3JfXyA9ICJULiBUZWlqZWlybyIKX19kYXRlX18gPSAiJDI4LW5vdi0yMDExIDEwOjA0OjEzJCIKPHxmaW1fZW5kfD4="]
["c69db658b3f16b7aa6b81f3b68b6c93e849e8d8e-4","c69db658b3f16b7aa6b81f3b68b6c93e849e8d8e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFzdApmcm9tIGFzdCBpbXBvcnQgQXN5bmNGdW5jdGlvbkRlZiwgQ29uc3RhbnQsIEV4cHIsIFJldHVybiwgdW5wYXJzZSAgIyB0eXBlOiBpZ25vcmUKZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKCmZyb20gb3BlbmFweS5wYXJzZXIgaW1wb3J0IFR5cGVBc3NpZ25zLCBUeXBlRnVuY3Rpb25zLCBUeXBlSW1wb3J0cwpmcm9tIG9wZW5hcHkudGVtcGxhdGUgaW1wb3J0IE5PUUEKCgpjbGFzcyBGaWxlUGVyRnVuY3Rpb246CiAgICBkZWYgX19pbml0X18oCiAgICAgICAgc2VsZiwKICAgICAgICBpbXBvcnRzOiBMaXN0W1R5cGVJbXBvcnRzXSwKICAgICAgICBhc3NpZ25zOiBMaXN0W1R5cGVBc3NpZ25zXSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGZ1bmN0aW9uOiBUeXBlRnVuY3Rpb25zLAogICAgICAgIGltcG9ydF9zdWZmaXg6IHN0ciA9IE5PUUEuRjQwMS52YWx1ZSwKPHxmaW1fZW5kfD4="]
["6c727a19c778569876b6674c8fc8a81694caf39b-4","6c727a19c778569876b6674c8fc8a81694caf39b","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IHB5dGVzdApmcm9tIGZ1bmN0aW9ucy52ZXJpZnlfaW5wdXRzIGltcG9ydCAqCgoKPHxmaW1fZW5kfD4="]
["66911a3592eb2d3fe831d8dc0e389e7e73aa82ec-2","66911a3592eb2d3fe831d8dc0e389e7e73aa82ec","PHxmaW1fcHJlZml4fD4KIyB2aW06IHNldCBzeW50YXg9cHl0aG9uOgojIHZpbTogc2V0IHRzPTQgc3RzPTQgc3c9NCBldDoKIyBBR09SQSBBbm90aGVyIEdlbmVyYXRvciBPZiBSZXN0IEFwaQojIENvcHlyaWdodCAoYykgMjAxOCwgMjAxOSAtIGJlZzAKIwoKIiIiIEhhbmRsZSBTd2FnZ2VyIDIuMCBmaWxlcyBpbiBBR09SQS4gIiIiCgppbXBvcnQgcmUKaW1wb3J0IGZsZXgKaW1wb3J0IGZsZXguY29yZQoKZnJvbSBhZ29yYS5JbnRlcm5hbE5vZGUgaW1wb3J0IEludGVybmFsTm9kZQoKU1dBR0dFUl9WQVJOQU1FX1JFID0gcmUuY29tcGlsZSgiXlxceyguKilcXH0kIikKCmNsYXNzIFN3YWdnZXJQYXJzZXIob2JqZWN0KToKICAgICIiIiBBIHBhcnNlciBmb3IgU3dhZ2dlciAyLjAgZmlsZQoKICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFN3YWdnZXIsIHNlZToKICAgICAtIGh0dHBzOi8vc3dhZ2dlci5pby8KICAgICAtIGh0dHBzOi8vZ2l0aHViLmNvbS9PQUkvT3BlbkFQSS1TcGVjaWZpY2F0aW9uL2Jsb2IvbWFzdGVyL3ZlcnNpb25zLzIuMC5tZAoKICAgICIiIgo8fGZpbV9ob2xlfD4KICAgIGRlZiBwYXJzZShzZWxmKToKICAgICAgICAiIiIgUGFyc2UgdGhlIFN3YWdlciBmaWxlIGFuZCByZXR1cm4gdGhlIEludGVybmFsTm9kZSBoaWVyYXJjaHkgZnJvbSBpdCAiIiIKICAgICAgICBzY2hlbWEgPSBmbGV4LmxvYWQoc2VsZi5maWxlKQogICAgICAgIHBhdGhzID0gc2NoZW1hWydwYXRocyddCgogICAgICAgIHJvb3QgPSBJbnRlcm5hbE5vZGUoIiIsIE5vbmUpCgogICAgICAgIGRlZiByZXF1ZXN0X3ZhbGlkYXRvcihyZXEpOgogICAgICAgICAgICAiIiIgY2FsbGJhY2sgdXNlZCB0byB2YWxpZGF0ZSBhIHJlcXVlc3QgIiIiCiAgICAgICAgICAgIGZsZXguY29yZS52YWxpZGF0ZV9hcGlfcmVxdWVzdChzY2hlbWEsIHJlcSkKCiAgICAgICAgZGVmIHJlc3BvbnNlX3ZhbGlkYXRvcihyZXBseSwgcmVxdWVzdF9tZXRob2Q9J2dldCcsIHJhd19yZXF1ZXN0PU5vbmUpOgogICAgICAgICAgICAiIiIgY2FsbGJhY2sgdXNlZCB0byB2YWxpZGF0ZSBhIHNlcnZlciByZXNwb25zZSAiIiIKICAgICAgICAgICAgZmxleC5jb3JlLnZhbGlkYXRlX2FwaV9yZXNwb25zZShzY2hlbWEsIHJlcGx5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RfbWV0aG9kPXJlcXVlc3RfbWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd19yZXF1ZXN0PXJhd19yZXF1ZXN0KQoKICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoKCiAgICAgICAgICAgIHVybF9wYXJ0cyA9IHBhdGguc3BsaXQoIi8iKQoKICAgICAgICAgICAgIyBnZXQgdGhlIGZpbmFsIG5vZGUKICAgICAgICAgICAgI1RPRE86IHJlc29sdmUgJyRyZWYnIGluIHBhdGgKICAgICAgICAgICAgcGFyZW50ID0gcm9vdAogICAgICAgICAgICBmb3IgcGFydCBpbiB1cmxfcGFydHM6CiAgICAgICAgICAgICAgICBpZiBub3QgcGFydDoKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgICAgICNpZiBwYXJ0ID09ICckcmVmJzoKICAgICAgICAgICAgICAgICMgICAgcmFpc2UgVW5pbXBsZW1lbnRlZEVycm9yKCJTd2FnZ2VyIFBhcnNlciBkb2VzIG5vdCBzdXBwb3J0ICRyZWYiKQoKICAgICAgICAgICAgICAgICNJbnRlcm5hbCBOb2RlIGlkZW50aWZ5IHZhcmlhYmxlIHdpdGggJyR7Lip9JywgU3dhZ2dlciB3aXRoICcvey4qfScKICAgICAgICAgICAgICAgIHBhcnQgPSBTV0FHR0VSX1ZBUk5BTUVfUkUuc3ViKCIke1xcMX0iLCBwYXJ0KQoKICAgICAgICAgICAgICAgIGNoaWxkID0gcGFyZW50LmFkZF9jaGlsZChwYXJ0KQogICAgICAgICAgICAgICAgcGFyZW50ID0gY2hpbGQKCiAgICAgICAgICAgIHJlc291cmNlID0gcGF0aHNbcGF0aF0KICAgICAgICAgICAgZm9yIHZlcmIgaW4gcmVzb3VyY2U6CiAgICAgICAgICAgICAgICBwYXJlbnQuYWRkX21ldGhvZCh2ZXJiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF92YWxpZGF0b3I9cmVxdWVzdF92YWxpZGF0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZV92YWxpZGF0b3I9cmVzcG9uc2VfdmFsaWRhdG9yKQogICAgICAgIHJldHVybiByb290Cjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlc2NyaXB0aW9uKToKICAgICAgICBzZWxmLmZpbGUgPSBkZXNjcmlwdGlvbgoKPHxmaW1fZW5kfD4="]
["9fdda3b867b2c5131de6e19f76a208bfd3faa16a-2","9fdda3b867b2c5131de6e19f76a208bfd3faa16a","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKX19hdXRob3JfXyA9ICdBbnRvaW5lIENlemFyJwpfX2VtYWlsX18gPSAnYW50b2luZUBjZXphci5mcicKX192ZXJzaW9uX18gPSAnMC4zLjEnCjx8ZmltX2VuZHw+"]
["663486fa058531862d66f33064429931f24c2e36-1","663486fa058531862d66f33064429931f24c2e36","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCkNyZWF0ZWQgb24gVGh1IEp1bCAgMSAxMTo0Mzo0MiAyMDIxCgpAYXV0aG9yOiBiZWNjYW1heWVycwoiIiIKCmZyb20gZGF0YV9nZW5lcmF0b3IgaW1wb3J0IGdlbmVyYXRlX2RhdGEKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgcGF0aGxpYgoKZGVmIGdldF92YXJpYWJsZXMoKToKICAgIAogICAgI3BhdGhzCiAgICBiYXNlX2ZvbGRlcl9wYXRoID0gc3RyKHBhdGhsaWIuUGF0aChfX2ZpbGVfXykucGFyZW50LmFic29sdXRlKCkpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIAogICAgI2RldGVybWluZSBpZiB0aGlzIGlzIGFuIG9kZCBvciBhbiBldmVuIG1vbnRoCiAgICBjdXJyZW50X21vbnRoID0gZGF0ZXRpbWUudG9kYXkoKS5tb250aAogICAgCjx8ZmltX2VuZHw+"]
["05b32a7f07ef6e892927ddf021e5d2ca257acf3e-3","05b32a7f07ef6e892927ddf021e5d2ca257acf3e",{"$cut":{"chars":16560,"head":"PHxmaW1fcHJlZml4fD4KCiMgY29kaW5nOiB1dGYtOAoKIyAjIExpbmVwbG90cyAoMTUpIC0gQ3JlYXRpbmcgYSBzdGFja2VkIHByb3BvcnRpb25hbCBhcmVhIHBsb3Qgd2l0aCBhIGZ1bmN0aW9uCiMgCiMgSW4gdGhlIGxhc3QgbGVzc29uIHdlIHNhdyBob3cgdG8gcHJlcGFyZSB0aGUgZGF0YSB0byBhbGxvdyB1cyB0byBlYXNpbHkgbWFrZSBhIHN0YWNrZWQgcHJvcG9ydGlvbmFsIGFyZWEgcGxvdC4gCiMgCiMgSW4gdGhpcyBsZXNzb24gd2UncmUgZ29pbmcgdG8gd3JhcCB0aGUgY29kZSB3ZSB3cm90ZSBpbiBhIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYWxsb3cgdXMgdG8gY2hvb3NlIHdoaWNoIGNvdW50cmllcyBhcmUgZGlzcGxheWVkIGluIHdoYXQgb3JkZXIgb24gdGhlIGNoYXJ0LgojIAojIFRoaXMgd2lsbCBiZSB0aGUgbW9zdCBkaWZmaWN1bHQgcGllY2Ugb2YgY29kZSB3ZSdsbCBoYXZlIHdyaXR0ZW4gc28gZmFyIC0gaXQncyBtZWFudCB0byBiZSBjaGFsbGVuZ2luZy4gSWYgeW91IGRvbid0IHVuZGVyc3RhbmQgb3IgZ2V0IHN0dWNrIGFsb25nIHRoZSB3YXksIHBsZWFzZSBhc2sgaW4gdGhlIGNvbW1lbnRzIHNlY3Rpb24gb3IgZW1haWwgPGEgaHJlZj0ibWFpbHRvOm1lQHJpY2hhcmQtbXVpci5jb20iPm1lQHJpY2hhcmQtbXVpci5jb208L2E+LgoKIyAjIyBNb2R1bGUgSW1wb3J0cwoKIyBJblsxXToKCiNwbG90bHkub2ZmbGluZSBkb2Vzbid0IHB1c2ggeW91ciBjaGFydHMgdG8gdGhlIGNsb3VkcwppbXBvcnQgcGxvdGx5Lm9mZmxpbmUgYXMgcHlvCiNhbGxvd3MgdXMgdG8gY3JlYXRlIHRoZSBEYXRhIGFuZCBGaWd1cmUgb2JqZWN0cwpmcm9tIHBsb3RseS5ncmFwaF9vYmpzIGltcG9ydCAqCiNwbG90bHkucGxvdGx5IHB1c2hlcyB5b3VyIGNoYXJ0cyB0byB0aGUgY2xvdWQgIAppbXBvcnQgcGxvdGx5LnBsb3RseSBhcyBweQoKI3BhbmRhcyBpcyBhIGRhdGEgYW5hbHlzaXMgbGlicmFyeQppbXBvcnQgcGFuZGFzIGFzIHBkCmZyb20gcGFuZGFzIGltcG9ydCBEYXRhRnJhbWUKCgojIFdlJ2xsIGFsc28gaW1wb3J0IHRoZSA8Y29kZT5yYW5kb208L2NvZGU+IGxpYnJhcnkgd2hpY2ggd2UnbGwgdXNlIGF0IHRoZSBlbmQgb2YgdGhpcyBsZXNzb24gdG8gaGVscCB1cyB0ZXN0IG91ciBmdW5jdGlvbi4KCiMgSW5bMl06CgppbXBvcnQgcmFuZG9tCgoKIyBJblszXToKCiNsZXRzIHVzIHNlZSB0aGUgY2hhcnRzIGluIGFuIGlQeXRob24gTm90ZWJvb2sKcHlvLm9mZmxpbmUuaW5pdF9ub3RlYm9va19tb2RlKCkgIyBydW4gYXQgdGhlIHN0YXJ0IG9mIGV2ZXJ5IGlweXRob24gCgoKIyAjIyBHZXR0aW5nIHRoZSBkYXRhCiMgCiMgSSdsbCBnZXQgdGhlIGRhdGEgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBwcmV2aW91cyBsZXNzb246CgojIEluWzRdOgoKZW1pc3Npb25zID0gcGQucmVhZF9jc3YoImh0dHA6Ly9yaWNoYXJkLW11aXIuY29tL2RhdGEvcHVibGljL2Nzdi9Ub3RhbENvMkVtaXNzaW9uc0J5Q291bnRyeS5jc3YiLCBpbmRleF9jb2w9MCkKZW1pc3Npb25zLmhlYWQoKQoKCiMgIyMjIFdyaXRpbmcgdGhlIGZ1bmN0aW9uCiMgCiMgVGhlIGZ1bmN0aW9uIHdlJ3JlIGdvaW5nIHRvIHdyaXRlIHdpbGwgbm90IG9ubHkgcGxvdCB0aGUgY2hhcnQsIGJ1dCB3aWxsIGFsc28gZG8gYWxsIG9mIHRoZSBkYXRhIG1hbmlwdWxhdGlvbiBhbmQgY2FsY3VsYXRpb24uIFRoZSBmdW5jdGlvbiB3aWxsIHRha2UgNSBhcmd1bWVudHM6CiMgLSBhIERhdGFGcmFtZQojIC0gdGhlIGNvbHVtbiBuYW1lIG9mIHRoZSB0aW1lIGVsZW1lbnQgaW4gdGhlIGRhdGEgYXMgYSBzdHJpbmcKIyAtIGEgbGlzdCBvZiBjb2x1bW5zIHdoaWNoIGNvbnRhaW4gdGhlIHZhcmlhYmxlcyB3ZSB3YW50IHRvIGluY2x1ZGUgaW4gdGhlIGNoYXJ0ICh0aGUgY29sdW1ucyBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIERhdGFGcmFtZSkKIyAtIFRoZSB0aXRsZSBvZiB0aGUgY2hhcnQKIyAtIFRoZSB5LWF4aXMgdGl0bGUgKHRoZSB4LWF4aXMgdGl0bGUgd2lsbCBiZSB0aGUgdGltZSBlbGVtZW50IG9mIHRoZSBEYXRhRnJhbWUpCiMgCiMgQXQgZWFjaCBzdGFnZSBvZiBtYWtpbmcgdGhpcyBmdW5jdGlvbiB3ZSdyZSBnb2luZyB0byByZXR1cm4gYW4gb2JqZWN0IHRoYXQgd2lsbCBhbGxvdyB1cyB0byBjaGVjayBpZiB0aGUgY29kZSB3ZSd2ZSB3cml0dGVuIHdvcmtzIGFzIGV4cGVjdGVkLgojIAojIEJlZm9yZSB3ZSBiZWdpbiB3cml0aW5nIHRoZSBmdW5jdGlvbiwgaXQncyBpbXBvcnRhbnQgdG8gd3JpdGUgYSBkb2NzdHJpbmcsIGVzcGVjaWFsbHkgZm9yIGEgbGFyZ2UgZnVuY3Rpb24gc3VjaCBhcyB0aGlzLiBXcml0aW5nIGEgZG9jc3RyaW5nIG1lYW5zIHRoYXQgd2hlbiB5b3UgY29tZSBiYWNrIHRvIHVzZSB0aGUgZnVuY3Rpb24sIHlvdSBkb24ndCBoYXZlIHRvIGZpZ3VyZSBvdXQgd2hhdCBlYWNoIHZhcmlhYmxlIGRvZXMgYW5kIHdoYXQgdHlwZSBvZiB2YXJpYWJsZSB5b3UgbmVlZCB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbi4gSSdsbCB3cml0ZSB0aGlzIG5vdywgYW5kIHRoZW4gaW5jbHVkZSBpdCBpbiB0aGUgZmluaXNoZWQgdmVyc2lvbiB0byBzYXZlIG9uIHNwYWNlLgoKIyBJbls1XToKCmRlZiBjcmVhdGVTdGFja2VkUHJvcEFyZWEoZGYsIHRpbWUsIGNvbHMsIHRpdGxlLCB5YXhpc1RpdGxlKToKICAgICIiIgogICAgQSBmdW5jdGlvbiB3aGljaCBtYW5pcHVsYXRlcyB0aGUgZGF0YSBpbnRvIHRoZSBjb3JyZWN0IGZvcm1hdCB0byBwcm9kdWNlIGEgc3RhY2tlZCBwcm9wb3J0aW9uYWwgYXJlYSBwbG90IHdpdGggUGxvdGx5LgogICAgCiAgICBUYWtlcyBmaXZlIGFyZ3VtZW50czoKICAgIAogICAgZGYgLSBhIHBhbmRhcyBEYXRhRnJhbWUKICAgIHRpbWUgLSB0aGUgdGltZSBlbGVtZW50IG9mIHRoZSBkYXRhLCBtdXN0IGJlIGEgY29sdW1uIGluIHRoZSBEYXRhRnJhbWUgYXMgYSBzdHJpbmcKICAgIGNvbHMgLSB0aGUgbmFtZSBvZiB0aGUgY29sdW1ucyBpbiB0aGUgRGF0YUZyYW1lIHdoaWNoIHlvdSB3YW50IHRvIGluY2x1ZGUgaW4gdGhlIGFyZWEgcGxvdCBhcyBsaXN0CiAgICB0aXRsZSAtIHRoZSB0aXRsZSBvZiB0aGUgY2hhcnQKICAg"}}]
["b0579923579375a3048866d8b8cc563047d555d9-3","b0579923579375a3048866d8b8cc563047d555d9","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cAoKREVTQ1JJUFRJT04gPSAiIiIKR0xQbG90TGliIGlzIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBQeVF0R3JhcGggd2l0aCBNYXRwbG90bGliIHN0eWxlIEFQSS4KCkdMUGxvdExpYiBsYXVuY2hlcyAzRCBPcGVuR0wgdmlzdWFsaXphdGlvbnMgb2YgUHlRdEdyYXBoIGluIGEgc2VwYXJhdGUgdGhyZWFkLCBhbGxvd2luZyAKaXQgdG8gYmUgdXNlZCBpbiBhIGludGVyYWN0aXZlIHB5dGhvbiBzaGVsbCwgd2l0aG91dCBibG9ja2luZyB0aGUgbWFpbiB0aHJlYWQuCiIiIgoKCjx8ZmltX2hvbGV8PgogICAgbGljZW5zZT0nTUlUJywKICAgIHVybD0naHR0cHM6Ly9naXRodWIuY29tL2NoaWNoZW5ndW1pY2gvZ2xwbG90bGliJywKICAgIGF1dGhvcj0nQ2hlbmcgQ2hpJywKICAgIGF1dGhvcl9lbWFpbD0nY2hpY2hlbmdAdW1pY2guZWR1JywKKQoKCnNldHVwKAogICAgdmVyc2lvbj0nMC4xLjEnLAogICAgcGFja2FnZXM9WydnbHBsb3RsaWInXSwKICAgIGluY2x1ZGVfcGFja2FnZV9kYXRhPVRydWUsCiAgICBpbnN0YWxsX3JlcXVpcmVzPVsKICAgICAgICAibnVtcHkiLAogICAgICAgICJweW9wZW5nbCIsCiAgICAgICAgInB5cXQ1PT01LjEwLjEiLAogICAgICAgICJweXF0Z3JhcGgiCiAgICBdLAogICAgKipzZXR1cE9wdHMKKQo8fGZpbV9zdWZmaXh8PgpzZXR1cE9wdHMgPSBkaWN0KAogICAgbmFtZT0nZ2xwbG90bGliJywKICAgIGRlc2NyaXB0aW9uPSdhIHRoaW4gd3JhcHBlciBhcm91bmQgUHlRdEdyYXBoIHdpdGggTWF0cGxvdGxpYiBzdHlsZSBBUEknLAogICAgbG9uZ19kZXNjcmlwdGlvbj1ERVNDUklQVElPTiwKPHxmaW1fZW5kfD4="]
["66b979915c76093e1ea4b94001ff20ed8e354a72-4","66b979915c76093e1ea4b94001ff20ed8e354a72","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIGZpbmRfbmVlZGxlKGhheXN0YWNrKToKICAgIHJldHVybiBmImZvdW5kIHRoZSBuZWVkbGUgYXQgcG9zaXRpb24ge2hheXN0YWNrLmluZGV4KCduZWVkbGUnKX0iCjx8ZmltX2VuZHw+"]
["6c89db1ec5ab43ce14d2e5d7ee8df5fff63b1259-3","6c89db1ec5ab43ce14d2e5d7ee8df5fff63b1259","PHxmaW1fcHJlZml4fD4KIy0tLS0tLS0tLS1JbXBvcnQtTW9kdWxlcy1TVEFSVC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZyb20gbGliMi5zY3JhcHBlcjJfdXRpbHMgaW1wb3J0ICoKaW1wb3J0IGxpYjIuc2NyYXBwZXIyX3RlbXBsYXRlcyBhcyB0ZW1wbGF0ZXMKCmltcG9ydCByZXF1ZXN0cwpmcm9tIHJlcXVlc3RzLnBhY2thZ2VzLnVybGxpYjMudXRpbC5yZXRyeSBpbXBvcnQgUmV0cnkgYXMgcmVxdWVzdF9yZXRyeQpmcm9tIHJlcXVlc3RzLmFkYXB0ZXJzIGltcG9ydCBIVFRQQWRhcHRlcgoKaW1wb3J0IHRocmVhZGluZwppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IHRpbWUKaW1wb3J0IHNpZ25hbAppbXBvcnQgaW5zcGVjdAppbXBvcnQgc3lzCiMtLS0tLS0tLS0tSW1wb3J0LU1vZHVsZXMtRU5ELS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCiMtLS0tLS0tLS0tR2xvYmFsLVZhcmlhYmxlcy1TVEFSVC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpfdmFsaWRfdHJhdmVyc2FsX21vZGVzID0gKCJERlMiLCAiQkZTIikKX3ZhbGlkX3Rhc2tzID0gKCJ2aXNpdCIsICJkb3dubG9hZCIsICJib3RoIikKX2h0dHBfT0sgPSAyMDAKIy0tLS0tLS0tLS1HbG9iYWwtVmFyaWFibGVzLUVORC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKIy0tLS0tLS0tLS1FeGNlcHRpb24tRGVmaW5pdGlvbnMtU1RBUlQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmNsYXNzIFNjcmFwcGVyRXhjZXB0aW9uKEV4Y2VwdGlvbik6CiAgICBwYXNzCiMtLS0tLS0tLS0tRXhjZXB0aW9uLURlZmluaXRpb25zLVNUQVJULS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCiMtLS0tLS0tLS0tU2NyYXBwZXItQ2xhc3MtRGVmaW5pdGlvbi1TVEFSVC0tLS0tLS0tLS0tLS0tLS0tLQpjbGFzcyBTY3JhcHBlcjoKCiAgICAjLS0tLS0tLS1TY3JhcHBlci1DbGFzcy1VdGlsaXRpZXMtU1RBUlQtLS0tLS0tLS0tLQogICAgZGVmIHBvc3Qoc2VsZiwgbXNnX2Z1bmMsICphcmdzKToKICAgICAgICAnJycKICAgICAgICBTeW5jaHJvbml6ZWQgd3JhcHBlciBmb3IgdGhlIG1lc3NhZ2UgcHJpbnRpbmcgZnVuY3Rpb25zLgoKICAgICAgICBEbyBub3QgdXNlIGVycm9yX291dCB3aXRoIHRoaXMgZnVuY3Rpb24hCiAgICAgICAgJycnCiAgICAgICAgYXNzZXJ0IG1zZ19mdW5jICE9IGVycm9yX291dAoKICAgICAgICBzZWxmLl9fcG9zdF9sb2NrLmFjcXVpcmUoKQogICAgICAgIGlmIG5vdCBzZWxmLl9fc2lsZW50OgogICAgICAgICAgICBtc2dfZnVuYygqYXJncywgZW5fY29sb3VyPXNlbGYuX19jb2xvdXIpCiAgICAgICAgaWYgc2VsZi5fX2xvZzoKICAgICAgICAgICAgbXNnX2Z1bmMoKmFyZ3MsIGZpbGU9c2VsZi5fX2xvZ19maWxlLCBlbl9jb2xvdXI9RmFsc2UpCiAgICAgICAgc2VsZi5fX3Bvc3RfbG9jay5yZWxlYXNlKCkKCiAgICBkZWYgc2lnaW50X2hhbmRsZXIoc2VsZiwgc2lnbmFsLCBmcmFtZSk6CiAgICAgICAgc2VsZi5wb3N0KHBvc3Rfd2FybmluZywgIlNJR0lOVCByZWNlaXZlZCIpCiAgICAgICAgc2VsZi5zaWduYWxfZXhpdCgpCiAgICAjLS0tLS0tLS1TY3JhcHBlci1DbGFzcy1VdGlsaXRpZXMtRU5ELS0tLS0tLS0tLS0tLQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCByb290X2pvYnMsIHByZXByb2Nlc3NfZnVuYz10ZW1wbGF0ZXMuc3RkX3ByZXByb2Nlc3MsIHRyYXZlcnNhbD0iREZTIiwgbnVtX3RocmVhZHM9MSwKICAgICAgICAgICAgICAgICBzaWxlbnQ9RmFsc2UsIGxvZz1UcnVlLCBjb2xvdXI9VHJ1ZSwgdGVuYWNpb3VzPVRydWUsIGFkZGl0aW9uYWxfaGVhZGVyPU5vbmUsIGlwdGNfdGFncz1kaWN0KCkpOgoKICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShyb290X2pvYnMsIGxpc3QpIG9yIFwKICAgICAgICAgICBhbnkobm90IChpc2luc3RhbmNlKGVudHJ5LCB0dXBsZSkgYW5kIGxlbihlbnRyeSkgPT0gMykgZm9yIGVudHJ5IGluIHJvb3Rfam9icykgb3IgXAogICAgICAgICAgIG5vdCB2YWxpZF9yb290X3VybHMocm9vdF9qb2JzKToKICAgICAgICAgICAgZXJyb3Jfb3V0KCJJbnZhbGlkIHJvb3Qgam9icyIpCgogICAgICAgIGlmIGlzaW5zdGFuY2UodHJhdmVyc2FsLCBzdHIpOgogICAgICAgICAgICBpZiB0cmF2ZXJzYWwgbm90IGluIF92YWxpZF90cmF2ZXJzYWxfbW9kZXM6CiAgICAgICAgICAgICAgICBlcnJvcl9vdXQoIkludmFsaWQgdHJhdmVyc2FsIG1vZGUiKQogICAgICAgICAgICBzZWxmLl9fc2NyYXBwZXJfam9icyA9IFNjcmFwcGVySm9icyhyb290X2pvYnMsIHRyYXZlcnNhbCkKICAgICAgICAgICAgcG9zdF9pbmZvKCJKb2IgbGlzdCBjcmVhdGVkIikKICAgICAgICBlbHNlOgogICAgICAgICAgICBlcnJvcl9vdXQoIlRyYXZlcnNhbCBtb2RlIG11c3QgYmUgYSBzdHJpbmciKQoKICAgICAgICBwcmVwcm9jZXNzX2Z1bmMocm9vdF9qb2JzKQoKICAgICAgICBpZiBudW1fdGhyZWFkcyA8IDEgb3Igbm90IGlzaW5zdGFuY2UobnVtX3RocmVhZHMsIGludCk6CiAgICAgICAgICAgIHJhaXNlIFNjcmFwcGVyRXhjZXB0aW9uKCJudW1fdGhyZWFkcyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIpCgogICAgICAgIHNlbGYuX19udW1fdGhyZWFkcyA9IG51bV90aHJlYWRzCiAgICAgICAgc2VsZi5fX3NpbGVudCA9IHNpbGVudAogICAgICAgIHNlbGYuX19sb2cgPSBsb2cKICAgICAgICBzZWxmLl9fY29sb3VyID0gY29sb3VyCiAgICAgICAgc2VsZi5fX3RlbmFjaW91cyA9IHRlbmFjaW91cwoKICAgICAgICBzZWxmLl9fdmlzaXRfZnVuYyA9IHRlbXBsYXRlcy5zdGRfdmlzaXQKICAgICAgICBzZWxmLl9fZG93bmxvYWRfZnVuYyA9IHRlbXBsYXRlcy5zdGRfZG93bmxvYWQKICAgICAgICBzZWxmLl9fbW9kaWZ5X2hlYWRlcl9mdW5jID0gdGVtcGxhdGVzLnN0ZF9tb2RpZnlfaGVhZGVyCiAgICAgICAgc2VsZi5fX3JlcG9ydF9oZWFkZXJfZnVuYyA9IHRlbXBsYXRlcy5zdGRfcmVwb3J0X2hlYWRlcgogICAgICAgIHNlbGYuX19ub2tfZnVuYyA9IHRlbXBsYXRlcy5zdGRfbm9rCiAgICAgICAgc2VsZi5fX2lwdGNfdGFncyA9IGlwdGNfdGFncwogICAgICAgIHNlbGYuX19yZXRyaWVzID0gcmVxdWVzdF9yZXRyeSh0b3RhbD0yLCBiYWNrb2ZmX2ZhY3Rvcj0wLjEpCiAgICAgICAgc2VsZi5fX3RpbWVvdXQgPSA3CgogICAgICAgIHNlbGYuX19nZW5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKICAgICAgICBzZWxmLl9fcG9zdF9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQogICAgICAgIGlmIHNlbGYuX19sb2c6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHNlbGYuX19sb2dfZmlsZSA9IG9wZW4oInNjcmFwcGVyMl8iICsgdGltZS5zdHJmdGltZSgiJVklbSVkXyVIJU0lUyIpICsgIi5sb2ciLCAidyIpCiAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICAgIGVycm9yX291dChzdHIoZSkpCgogICAgICAgIHNlbGYuX190aHJlYWRzX3N0YXJ0ZWQgPSBGYWxzZQogICAgICAgIHNlbGYuX19zaWduYWxfZXhpdCA9IEZhbHNlCiAgICAgICAgc2VsZi5fX3RocmVhZF9wb29sID0gW10KICAgICAgICB0cnk6CiAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYuX19udW1fdGhyZWFkcyk6CiAgICAgICAgICAgICAgICBzZWxmLl9fdGhyZWFkX3Bvb2wuYXBwZW5kKHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuc2NyYXBlLCBhcmdzPShpLCBhZGRpdGlvbmFsX2hlYWRlcikpKQogICAgICAgICAgICAgICAgcG9zdF9pbmZvKCJTcGF3bmluZyB0aHJlYWQgIiArIHN0cihpKSkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgIGVycm9yX291dChzdHIoZSkpCgogICAgZGVmIHN0YXJ0KHNlbGYpOgogICAgICAgIGZvciB0IGluIHNlbGYuX190aHJlYWRfcG9vbDoKICAgICAgICAgICAgdC5zdGFydCgpCgogICAgICAgIHNlbGYuX190aHJlYWRzX3N0YXJ0ZWQgPSBUcnVlCgogICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgc2VsZi5zaWdpbnRfaGFuZGxlcikKICAgICAgICB3aGlsZSBub3Qgc2VsZi5leGl0X3Bvc3RlZCgpIGFuZCBub3Qgc2VsZi5fX3NjcmFwcGVyX2pvYnMuaXNfZG9uZToKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxKQogICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKICAgICAgICAgICAgICAgIHBhc3MKCiAgICAgICAgZm9yIHQgaW4gc2VsZi5fX3RocmVhZF9wb29sOgogICAgICAgICAgICB0LmpvaW4oKQoKICAgICAgICByZW1haW5pbmdfam9icyA9IHNlbGYuX19zY3JhcHBlcl9qb2JzLmN1cnJfam9icygpCiAgICAgICAgaWYgbGVuKHJlbWFpbmluZ19qb2JzKSA+IDA6CiAgICAgICAgICAgIHBvc3Rfd2FybmluZygiVW5jb21wbGV0ZWQgam9iczogIikKICAgICAgICAgICAgZm9yIGpvYiBpbiByZW1haW5pbmdfam9iczoKICAgICAgICAgICAgICAgIHBvc3Rfd2FybmluZygiICAgICAgIiArIHN0cihqb2JbMF0pICsgIiAtICIgKyBzdHIoam9iWzFdKSkKCiAgICBkZWYgc2NyYXBlKHNlbGYsIGksIGFkZGl0aW9uYWxfaGVhZGVyKToKICAgICAgICBzZWxmLnBvc3QocG9zdF9pbmZvLCAidGhyZWFkICIgKyBzdHIoaSkgKyAiIHN0YXJ0aW5nIikKCiAgICAgICAgY3Vycl9zZXNzaW9uID0gU2NyYXBwZXJTZXNzaW9uKGFkZGl0aW9uYWxfaGVhZGVyLCBzZWxmLl9fcmV0cmllcykKICAgICAgICB1cmwsIHRhc2ssIGlkID0gTm9uZSwgTm9uZSwgTm9uZQogICAgICAgIGN1cnJfaGVhZGVyID0gTm9uZQoKICAgICAgICB3aGlsZSBub3Qgc2VsZi5leGl0X3Bvc3RlZCgpOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBpZiAodXJsLCB0YXNrLCBpZCkgPT0gKE5vbmUsIE5vbmUsIE5vbmUpOgogICAgICAgICAgICAgICAgICAgIGpvYiA9IHNlbGYuX19zY3JhcHBlcl9qb2JzLmdldF9qb2IoKQogICAgICAgICAgICAgICAgICAgIGlmIGpvYiBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICAgICBicmVhawoKICAgICAgICAgICAgICAgICAgICB1cmwsIHRhc2ssIGlkID0gam9iCgogICAgICAgICAgICAgICAgc2VsZi5wb3N0KHBvc3RfaW5mbywgInRocmVhZCAiICsgc3RyKGkpICsgIiBwZXJmb3JtaW5nICIgKyBzdHIoaWQpICsgIiAtICIgKyB0YXNrICsgIiAiICsgdXJsKQoKICAgICAgICAgICAgICAgIGN1cnJfaGVhZGVyID0gY3Vycl9zZXNzaW9uLmdldF9oZWFkZXIoKQogICAgICAgICAgICAgICAgc2VsZi5fX21vZGlmeV9oZWFkZXJfZnVuYyhjdXJyX2hlYWRlciwgdXJsLCB0YXNrLCBpZCkKCiAgICAgICAgICAgICAgICByID0gY3Vycl9zZXNzaW9uLmdldCh1cmwsIHNlbGYuX190aW1lb3V0KQoKICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSByLnN0YXR1c19jb2RlID09IF9odHRwX09LCiAgICAgICAgICAgICAgICBpZiBzdWNjZXNzOgogICAgICAgICAgICAgICAgICAgIGlmIHRhc2sgPT0gInZpc2l0IiBvciB0YXNrID09ICJib3RoIjoKICAgICAgICAgICAgICAgICAgICAgICAgam9icyA9IFtdCiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzIGFuZCBzZWxmLl9fdmlzaXRfZnVuYyhyLCB1cmwsIGlkLCBqb2JzKQogICAgICAgICAgICAgICAgICAgICAgICBpZiBqb2JzICE9IFtdOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX3NjcmFwcGVyX2pvYnMuYWRkX2pvYihqb2JzKQogICAgICAgICAgICAgICAgICAgIGlmIHRhc2sgPT0gImRvd25sb2FkIiBvciB0YXNrID09ICJib3RoIjoKICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgYW5kIHNlbGYuX19kb3dubG9hZF9mdW5jKHIsIHVybCwgaWQsIHNlbGYuX19pcHRjX3RhZ3MpCgogICAgICAgICAgICAgICAgY3Vycl9oZWFkZXIgPSBjdXJyX3Nlc3Npb24uZ2V0X2hlYWRlcigpCiAgICAgICAgICAgICAgICBzZWxmLl9fcmVwb3J0X2hlYWRlcl9mdW5jKGN1cnJfaGVhZGVyLCBzdWNjZXNzLCB1cmwsIHRhc2ssIGlkKQoKICAgICAgICAgICAgICAgIHJlZG8gPSBGYWxzZQogICAgICAgICAgICAgICAgaWYgbm90IHN1Y2Nlc3M6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5wb3N0KHBvc3RfZmFpbHVyZSwgInRocmVhZCAiICsgc3RyKGkpICsgIiBmYWlsZWQgdG8gcGVyZm9ybSAiICsgc3RyKGlkKSArICIgLSAiICsgdGFzayArICIgb24gIiArIHVybCArICcgKCcgKyBzdHIoci5zdGF0dXNfY29kZSkgKyAnKScpCiAgICAgICAgICAgICAgICAgICAgcmVkbyA9IHNlbGYuX19ub2tfZnVuYyhyLnN0YXR1c19jb2RlLCB1cmwsIHRhc2ssIGlkKQoKICAgICAgICAgICAgICAgIGlmIG5vdCByZWRvOgogICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdWNjZXNzOgogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBvc3QocG9zdF93YXJuaW5nLCAiam9iIHNraXBwZWQgIiArIHN0cihpZCkgKyAiIC0gIiArIHRhc2sgKyAiIG9uICIgKyB1cmwpCiAgICAgICAgICAgICAgICAgICAgc2VsZi5fX3NjcmFwcGVyX2pvYnMuZG9uZV9qb2IoKHVybCwgdGFzaywgaWQpKQogICAgICAgICAgICAgICAgICAgIHVybCwgdGFzaywgaWQgPSBOb25lLCBOb25lLCBOb25lCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHNlbGYucG9zdChwb3N0X2luZm8sICJ0aHJlYWQgIiArIHN0cihpKSArICIgd2lsbCByZWRvICIgKyBzdHIoaWQpICsgIiAtICIgKyB0YXNrICsgIiBvbiAiICsgdXJsKQoKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlLCBBc3NlcnRpb25FcnJvcik6CiAgICAgICAgICAgICAgICAgICAgXywgXywgZXhjX3RiID0gc3lzLmV4Y19pbmZvKCkKICAgICAgICAgICAgICAgICAgICBlcnJfbXNnID0gIkFzc2VydGlvbkVycm9yIGF0IGxpbmUgIiArIHN0cihleGNfdGIudGJfbGluZW5vKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBlcnJfbXNnID0gc3RyKGUpCgogICAgICAgICAgICAgICAgam9iX2luZm8gPSAnJwogICAgICAgICAgICAgICAgaWYgKHVybCwgdGFzaywgaWQpICE9IChOb25lLCBOb25lLCBOb25lKToKICAgICAgICAgICAgICAgICAgICBqb2JfaW5mbyA9ICcgKCcgKyBzdHIoaWQpICsgIiAtICIgKyB0YXNrICsgIiBvbiAiICsgdXJsICsgJyknCgogICAgICAgICAgICAgICAgc2VsZi5wb3N0KHBvc3RfZXJyb3IsICJ0aHJlYWQgIiArIHN0cihpKSArICIgZW5jb3VudGVyZWQgZXJyb3IgIiArIGVycl9tc2cgKyBqb2JfaW5mbykKICAgICAgICAgICAgICAgIGlmIHNlbGYuX190ZW5hY2lvdXM6CiAgICAgICAgICAgICAgICAgICAgY3Vycl9zZXNzaW9uID0gU2NyYXBwZXJTZXNzaW9uKGN1cnJfaGVhZGVyLCBzZWxmLl9fcmV0cmllcykKICAgICAgICAgICAgICAgICAgICBzZWxmLnBvc3QocG9zdF93YXJuaW5nLCAidGhyZWFkICIgKyBzdHIoaSkgKyAiIGlzIGNyZWF0aW5nIGEgbmV3IFNlc3Npb24iKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBzZWxmLnNpZ25hbF9leGl0KCkKCiAgICAgICAgc2VsZi5wb3N0KHBvc3RfaW5mbywgInRocmVhZCAiICsgc3RyKGkpICsgIiBleGl0aW5nIikKCiAgICBkZWYgc2lnbmFsX2V4aXQoc2VsZik6CiAgICAgICAgc2VsZi5fX2dlbl9sb2NrLmFjcXVpcmUoKQogICAgICAgIHNlbGYuX19zaWduYWxfZXhpdCA9IFRydWUKICAgICAgICBzZWxmLl9fc2NyYXBwZXJfam9icy5zaWduYWxfZXhpdCgpCiAgICAgICAgc2VsZi5wb3N0KHBvc3RfaW5mbywgIlNpZ25hbGxpbmcgYWxsIHRocmVhZHMgdG8gZXhpdC4uLiIpCiAgICAgICAgc2VsZi5fX2dlbl9sb2NrLnJlbGVhc2UoKQoKICAgIGRlZiBleGl0X3Bvc3RlZChzZWxmKToKICAgICAgICBzZWxmLl9fZ2VuX2xvY2suYWNxdWlyZSgpCiAgICAgICAgcmV0ID0gc2VsZi5fX3NpZ25hbF9leGl0CiAgICAgICAgc2VsZi5fX2dlbl9sb2NrLnJlbGVhc2UoKQogICAgICAgIHJldHVybiByZXQKCiAgICBkZWYgc2V0X3Zpc2l0X2Z1bmMoc2VsZiwgZnVuYyk6CiAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9fdGhyZWFkc19zdGFydGVkCiAgICAgICAgaWYgbGVuKGluc3BlY3QuZ2V0YXJnc3BlYyhmdW5jKVswXSkgIT0gNDoKICAgICAgICAgICAgZXJyb3Jfb3V0KCJWaXNpdCBjYWxsYmFjayBmdW5jdGlvbiBpcyBub3Qgd2VsbCBmb3JtZWQiKQogICAgICAgIHNlbGYuX192aXNpdF9mdW5jID0gZnVuYwoKICAgIGRlZiBzZXRfZG93bmxvYWRfZnVuYyhzZWxmLCBmdW5jKToKICAgICAgICBhc3NlcnQgbm90IHNlbGYuX190aHJlYWRzX3N0YXJ0ZWQKICAgICAgICBpZiBsZW4oaW5zcGVjdC5nZXRhcmdzcGVjKGZ1bmMpWzBdKSAhPSA0OgogICAgICAgICAgICBlcnJvcl9vdXQoIkRvd25sb2FkIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIG5vdCB3ZWxsIGZvcm1lZCIpCiAgICAgICAgc2VsZi5fX2Rvd25sb2FkX2Z1bmMgPSBmdW5jCgogICAgZGVmIHNldF9tb2RpZnlfaGVhZGVyX2Z1bmMoc2VsZiwgZnVuYyk6CiAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9fdGhyZWFkc19zdGFydGVkCiAgICAgICAgaWYgbGVuKGluc3BlY3QuZ2V0YXJnc3BlYyhmdW5jKVswXSkgIT0gNDoKICAgICAgICAgICAgZXJyb3Jfb3V0KCJNb2RpZnkgaGVhZGVyIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIG5vdCB3ZWxsIGZvcm1lZCIpCiAgICAgICAgc2VsZi5fX21vZGlmeV9oZWFkZXJfZnVuYyA9IGZ1bmMKCiAgICBkZWYgc2V0X3JlcG9ydF9oZWFkZXJfZnVuYyhzZWxmLCBmdW5jKToKICAgICAgICBhc3NlcnQgbm90IHNlbGYuX190aHJlYWRzX3N0YXJ0ZWQKICAgICAgICBpZiBsZW4oaW5zcGVjdC5nZXRhcmdzcGVjKGZ1bmMpWzBdKSAhPSA1OgogICAgICAgICAgICBlcnJvcl9vdXQoIlJlcG9ydCBoZWFkZXIgY2FsbGJhY2sgZnVuY3Rpb24gaXMgbm90IHdlbGwgZm9ybWVkIikKICAgICAgICBzZWxmLl9fcmVwb3J0X2hlYWRlcl9mdW5jID0gZnVuYwoKICAgIGRlZiBzZXRfbm9rX2Z1bmMoc2VsZiwgZnVuYyk6CiAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9fdGhyZWFkc19zdGFydGVkCiAgICAgICAgaWYgbGVuKGluc3BlY3QuZ2V0YXJnc3BlYyhmdW5jKVswXSkgIT0gNDoKICAgICAgICAgICAgZXJyb3Jfb3V0KCJub3QgT0sgY2FsbGJhY2sgZnVuY3Rpb24gaXMgbm90IHdlbGwgZm9ybWVkIikKICAgICAgICBzZWxmLl9fbm9rX2Z1bmMgPSBmdW5jCgogICAgZGVmIHNldF9yZXRyaWVzX2FuZF90aW1lb3V0KHNlbGYsIHJldHJ5X251bSwgYmFja29mZl9mYWN0b3IsIHRpbWVvdXQpOgogICAgICAgIGFzc2VydCBub3Qgc2VsZi5fX3RocmVhZHNfc3RhcnRlZAogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHJldHJ5X251bSwgaW50KSBvciByZXRyeV9udW0gPCAwIG9yIGJhY2tvZmZfZmFjdG9yIDw9MDoKICAgICAgICAgICAgZXJyb3Jfb3V0KCJSZXRyaWVzIGlzIG5vdCB3ZWxsIGZvcm1lZCIpCiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodGltZW91dCwgdHVwbGUpIG9yIGxlbih0aW1lb3V0KSAhPSAyOgogICAgICAgICAgICBlcnJvcl9vdXQoIlRpbWVvdXQgaXMgbm90IHdlbGwgZm9ybWVkIikKCiAgICAgICAgc2VsZi5fX3JldHJpZXMgPSByZXF1ZXN0X3JldHJ5KHRvdGFsPXJldHJ5X251bSwgYmFja29mZl9mYWN0b3I9YmFja29mZl9mYWN0b3IpCiAgICAgICAgc2VsZi5fX3RpbWVvdXQgPSB0aW1lb3V0CiMtLS0tLS0tLS0tU2NyYXBwZXItQ2xhc3MtRGVmaW5pdGlvbi1FTkQtLS0tLS0tLS0tLS0tLS0tLS0tLQoKCiMtLS0tLS0tLS0tU2NyYXBwZXJTZXNzaW9uLUNsYXNzLURlZmluaXRpb24tU1RBUlQtLS0tLS0tLS0tLQpjbGFzcyBTY3JhcHBlclNlc3Npb246CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZGl0aW9uYWxfaGVhZGVyLCByZXRyaWVzKToKICAgICAgICBzZWxmLl9fc2Vzc2lvbiA9IHJlcXVlc3RzLlNlc3Npb24oKQogICAgICAgIHNlbGYuX19zZXNzaW9uLm1vdW50KCJodHRwOi8vIiwgSFRUUEFkYXB0ZXIobWF4X3JldHJpZXM9cmV0cmllcykpCiAgICAgICAgaWYgYWRkaXRpb25hbF9oZWFkZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHNlbGYuX19zZXNzaW9uLmhlYWRlcnMudXBkYXRlKGFkZGl0aW9uYWxfaGVhZGVyKQoKICAgIGRlZiBnZXQoc2VsZiwgdXJsLCB0aW1lb3V0KToKICAgICAgICByZXR1cm4gc2VsZi5fX3Nlc3Npb24uZ2V0KHVybCwgdGltZW91dD10aW1lb3V0KQoKICAgIGRlZiBnZXRfaGVhZGVyKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl9fc2Vzc2lvbi5oZWFkZXJzCgogICAgZGVmIGdldF9jb29raWVzKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl9fc2Vzc2lvbi5jb29raWVzCgogICAgZGVmIGNsZWFyX2hlYWRlcnMoc2VsZik6CiAgICAgICAgc2VsZi5fX3Nlc3Npb24uaGVhZGVycy5jbGVhcigpCgogICAgZGVmIGNsZWFyX2Nvb2tpZXMoc2VsZik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLl9fc2Vzc2lvbi5jb29raWVzLmNsZWFyKCkKPHxmaW1fZW5kfD4="]
["66440ff7b2fadee896d447a01a5d0a09f7b91db3-1","66440ff7b2fadee896d447a01a5d0a09f7b91db3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KCmZyb20gZmFrZV9sb2NrIGltcG9ydCBfQmFzZVVuc2VyaWFsaXplZE9iamVjdCwgX0Jhc2VXcmFwcGVyCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpjbGFzcyBUcmFmZmljKF9CYXNlVW5zZXJpYWxpemVkT2JqZWN0KToKCiAgICBGSUVMRFMgPSB7J2xlZnQnLCAnYnl0ZXMnLCAnbGlua3MnLCAnbGltaXQnLCAndHlwZScsICdleHRyYScsICdyZXNldCd9Cgo8fGZpbV9lbmR8Pg=="]
["c6dd3951549803300569603fea8f569b997b9768-1","c6dd3951549803300569603fea8f569b997b9768","PHxmaW1fcHJlZml4fD4KZGVmIGthcmF0c3ViYSh4LCB5KToKICAgICIiIgogICAgSW5wdXQ6IHR3byBuLWRpZ2l0IHBvc2l0aXZlIGludGVnZXJzIHggYW5kIHkKICAgIE91dHB1dDogbXVsdGlwbGljYXRpb24gb2YgeCBhbmQgeQogICAgQXNzdW1wdGlvbjogbiBpcyBhIHBvd2VyIG9mIDIKICAgICIiIgogICAgeCA9IHN0cih4KQogICAgeSA9IHN0cih5KQoKICAgIGlmIGxlbihzdHIoeCkpID09IDEgb3IgbGVuKHN0cih5KSkgPT0gMToKICAgICAgICByZXR1cm4geCAqIHkKCiAgICBuID0gbWF4KGxlbihzdHIoeCkpLCBsZW4oc3RyKHkpKSkKICAgIG5ieTIgPSBuIC8vIDIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGEgPSBpbnQoeFs6bmJ5Ml0pCiAgICBiID0gaW50KHhbbmJ5MjpdKQogICAgYyA9IGludCh5WzpuYnkyXSkKPHxmaW1fZW5kfD4="]
["ae3e7a348705240604544bb6813f7014fb2670d8-1","ae3e7a348705240604544bb6813f7014fb2670d8","PHxmaW1fcHJlZml4fD4KZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKCmltcG9ydCBsb2dnaW5nLmNvbmZpZwpmcm9tIHBwcmludCBpbXBvcnQgcGZvcm1hdAoKIyBpbXBvcnQganNvbiA7IGxvZ2dpbmcuYWRkTGV2ZWxOYW1lKDUsICdUUkFDRScpIDsgbG9nZ2luZy5jb25maWcuZGljdENvbmZpZyhqc29uLmxvYWQob3BlbignLi4vbG9nZ2VyX2NvbmZpZy5qc29uJywgJ3InKSkpCgpsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCmltcG9ydCBuaWFzY2FwZQpmcm9tIG5pYXNjYXBlLnJlcG9zaXRvcnkgaW1wb3J0IGJhc2VkYXRhCmZyb20gbmlhc2NhcGUudXRpbGl0eS5kYXRhYmFzZSBpbXBvcnQgZ2V0X2RiCgoKY2xhc3MgVGVzdEJhc2VkYXRhKFRlc3RDYXNlKToKCV9kYiA9IE5vbmUKCglAY2xhc3NtZXRob2QKCWRlZiBzZXRVcENsYXNzKGNscyk6CgkJZGIgPSBnZXRfZGIobmlhc2NhcGUuX3JlYWRfaW5pKCdjb25maWcuaW5pLnNhbXBsZScpWydkYXRhYmFzZSddKQoJCSMgZGIgPSBnZXRfZGIoKQoJCWxvZ2dlci5kZWJ1ZyhkYi5kYm1zKQoKCQljcmVhdGVfc3FsID0gIiIiCgkJQ1JFQVRFIFRBQkxFICJiYXNlZGF0YSIgKAoJCQkic2l0ZSIJdmFyY2hhcig2MyksCgkJCSJpZGVudGlmaWVyIgl2YXJjaGFyKDIwKSwKCQkJImRhdGV0aW1lIgl0aW1lc3RhbXAgTk9UIE5VTEwsCgkJCSJ0aXRsZSIJVEVYVCBOT1QgTlVMTCBERUZBVUxUICcnLAoJCQkidGFncyIJVEVYVCBOT1QgTlVMTCBERUZBVUxUICcnLAoJCQkiYm9keSIJVEVYVCBOT1QgTlVMTCBERUZBVUxUICcnLAoJCQlQUklNQVJZIEtFWSgic2l0ZSIsImlkZW50aWZpZXIiKQoJCSk7CgkJIiIiCgkJcmV0ID0gZGIuZXhlY3V0ZShjcmVhdGVfc3FsKQoJCWxvZ2dlci5kZWJ1ZyhyZXQpCgkJaW5zZXJ0X3NxbCA9ICdJTlNFUlQgSU5UTyAiYmFzZWRhdGEiIFZBTFVFUyg/LCA/LCA/LCA/LCA/LCA/KTsnCgo8fGZpbV9ob2xlfD4KCQlyZXQgPSBkYi5leGVjdXRlKGluc2VydF9zcWwsICgnZHVtbXknLCAnMjAxODAxMDExMjM0NTY3ODkwMDAnLCAnMjAxOC0wMS0wMSAxMjozNDo1Ni43ODknLCAnZHVtbXknLCAnJywgJ2R1bW15JykpCgkJbG9nZ2VyLmRlYnVnKHJldCkKCQljbHMuX2RiID0gZGIKCglAY2xhc3NtZXRob2QKCWRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CgkJY2xzLl9kYi5jbG9zZSgpCgoJZGVmIHRlc3RfZ2V0KHNlbGYpOgoJCWRiID0gc2VsZi5fZGIKCQlyZWYgPSBiYXNlZGF0YS5nZXQoZGIsICcyMDE3MDEwMTIzNTk1OTk5OTAwMCcsICd0ZXN0JykKCQlzZWxmLmFzc2VydEVxdWFsKCcyMDE3MDEwMTIzNTk1OTk5OTAwMCcsIHJlZi5pZGVudGlmaWVyKQoKCQlyZWYgPSBiYXNlZGF0YS5nZXQoZGIsICcyMDE3MDEwMTIzNTk1OTk5OTAwMScsICd0ZXN0JykKCQlzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHJlZikKCgoJZGVmIHRlc3RfdGltZWxpbmUoc2VsZik6CgkJZGIgPSBzZWxmLl9kYgoKCQlyZWYgPSBiYXNlZGF0YS50aW1lbGluZShkYikKCQlsb2dnZXIuZGVidWcoImJhc2VkYXRhXG4lcyIsIHBmb3JtYXQocmVmWzo1XSkpCgkJc2VsZi5hc3NlcnRFcXVhbCgnMjAxNzAxMDEyMzU5NTk5OTkwMDAnLCByZWZbMF0uaWRlbnRpZmllcikKCgkJcmVmID0gYmFzZWRhdGEudGltZWxpbmUoZGIsICd0ZXN0JywgMikKCQlsb2dnZXIuZGVidWcoImJhc2VkYXRhXG4lcyIsIHBmb3JtYXQocmVmWzo1XSkpCgkJc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVmKQoKCQlyZWYgPSBiYXNlZGF0YS50aW1lbGluZShkYiwgJ2R1bW15JykKCQlsb2dnZXIuZGVidWcoImJhc2VkYXRhXG4lcyIsIHBmb3JtYXQocmVmWzo1XSkpCgkJc2VsZi5hc3NlcnRFcXVhbCgnMjAxODAxMDExMjM0NTY3ODkwMDAnLCByZWZbMF0uaWRlbnRpZmllcikKCgkJIyBGVVRVUkUg44KE44Gj44Gk44GRIOOCqOODs+ODhuOCo+ODhuOCo+OBruODhuOCueODiOabuOOBhOOBn+OCieenu+WLlQoJCWRpYyA9IHJlZlswXS5fYXNkaWN0KCkKCQlzZWxmLmFzc2VydEVxdWFsKCcyMDE4MDEwMTEyMzQ1Njc4OTAwMCcsIGRpY1siaWRlbnRpZmllciJdKQoKCWRlZiB0ZXN0X3RhZ3RpbWVsaW5lKHNlbGYpOgoJCWRiID0gc2VsZi5fZGIKCgkJcmVmID0gYmFzZWRhdGEudGFndGltZWxpbmUoZGIsIHNpdGU9J3Rlc3QnLCB0YWc9J3RhZycpCgkJc2VsZi5hc3NlcnRFcXVhbCgnMjAxNzAxMDEyMzU5NTk5OTkwMDAnLCByZWZbMF0uaWRlbnRpZmllcikKCgkJcmVmID0gYmFzZWRhdGEudGFndGltZWxpbmUoZGIsIHNpdGU9J3Rlc3QnLCB0YWc9J3RhZycsIG9yZGVyPSdBU0MnKQoJCXNlbGYuYXNzZXJ0RXF1YWwoJzIwMTcwMTAxMjM1OTU5OTk5MDAwJywgcmVmWzJdLmlkZW50aWZpZXIpCgoJZGVmIHRlc3Rfc2VhcmNoX2JvZHkoc2VsZik6CgkJZGIgPSBzZWxmLl9kYgoKCQlyZWYgPSBiYXNlZGF0YS5zZWFyY2hfYm9keShkYiwgc2l0ZT0ndGVzdCcsIHNlYXJjaGJvZHk9J2JvZHknKQoJCXNlbGYuYXNzZXJ0RXF1YWwoJzEyMzQ1Njc4OTAxMjM0NTY3ODkwJywgcmVmWzBdLmlkZW50aWZpZXIpCgoJCXJlZiA9IGJhc2VkYXRhLnNlYXJjaF9ib2R5KGRiLCBzaXRlPSd0ZXN0Jywgc2VhcmNoYm9keT0naG9nZScsIG9yZGVyPSdBU0MnKQoJCXNlbGYuYXNzZXJ0RXF1YWwoJzIwMTcwMTAxMDAwMDAwMDAwMDAwJywgcmVmWzBdLmlkZW50aWZpZXIpCgoJZGVmIHRlc3RfZGF5X3RpbWVsaW5lKHNlbGYpOgoJCWRiID0gc2VsZi5fZGIKCgkJcmVmID0gYmFzZWRhdGEuZGF5X3RpbWVsaW5lKGRiLCBzaXRlPSd0ZXN0JywgZGF0ZT0nMjAxNycpCgkJc2VsZi5hc3NlcnRFcXVhbCgnMjAxNzAxMDEwMDAwMDAwMDAwMDAnLCByZWZbMF0uaWRlbnRpZmllcikKCQlzZWxmLmFzc2VydEVxdWFsKCcyMDE3MDEwMTIzNTk1OTk5OTAwMCcsIHJlZlsxXS5pZGVudGlmaWVyKQoKCQlyZWYgPSBiYXNlZGF0YS5kYXlfdGltZWxpbmUoZGIsIHNpdGU9J3Rlc3QnLCBkYXRlPScyMDE3Jywgb3JkZXI9J0RFU0MnKQoJCXNlbGYuYXNzZXJ0RXF1YWwoJzIwMTcwMTAxMjM1OTU5OTk5MDAwJywgcmVmWzBdLmlkZW50aWZpZXIpCgoJZGVmIHRlc3RfbmV4dF9pZGVudGlmaWVyKHNlbGYpOgoJCWRiID0gc2VsZi5fZGIKCQlyZWYgPSBiYXNlZGF0YS5uZXh0X2lkZW50aWZpZXIoZGIsIHNpdGU9J3Rlc3QnLCBkYXRlPScyMDE2MDEwMScpCgkJc2VsZi5hc3NlcnRFcXVhbCgnMjAxNzAxMDEwMDAwMDAwMDAwMDAnLCByZWYpCgoJCXJlZiA9IGJhc2VkYXRhLm5leHRfaWRlbnRpZmllcihkYiwgc2l0ZT0ndGVzdCcsIGRhdGU9Jzk5OTk5OTk5JykKCQlzZWxmLmFzc2VydEVxdWFsKCcnLCByZWYpCgoJZGVmIHRlc3RfcHJldl9pZGVudGlmaWVyKHNlbGYpOgoJCWRiID0gc2VsZi5fZGIKCQlyZWYgPSBiYXNlZGF0YS5wcmV2X2lkZW50aWZpZXIoZGIsIHNpdGU9J3Rlc3QnLCBkYXRlPScyMDE2MDEwMScpCgkJc2VsZi5hc3NlcnRFcXVhbCgnMTk3MDAxMDExMjM0NTY3ODkwMDAnLCByZWYpCgoJCXJlZiA9IGJhc2VkYXRhLnByZXZfaWRlbnRpZmllcihkYiwgc2l0ZT0ndGVzdCcsIGRhdGU9JzAwMDAwMDAwJykKCQlzZWxmLmFzc2VydEVxdWFsKCcnLCByZWYpCjx8ZmltX3N1ZmZpeHw+CgkJcmV0ID0gZGIuZXhlY3V0ZShpbnNlcnRfc3FsLCAoJ3Rlc3QnLCAnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAnLCAnMjAxOC0wMS0wMSAwMDowMDowMC4wMDAnLCAndGl0bGUnLCAnICN0YWcgJywgJ2JvZHknKSkKCQlyZXQgPSBkYi5leGVjdXRlKGluc2VydF9zcWwsICgndGVzdCcsICcxOTcwMDEwMTEyMzQ1Njc4OTAwMCcsICcxOTcwLTAxLTAxIDEyOjM0OjU2Ljc4OScsICcxOTcwMDEwMTEyMzQ1Njc4OTAwMCcsICcnLCAndGVzdCcpKQoJCXJldCA9IGRiLmV4ZWN1dGUoaW5zZXJ0X3NxbCwgKCd0ZXN0JywgJzIwMTcwMTAxMjM1OTU5OTk5MDAwJywgJzIwMTctMDEtMDEgMjM6NTk6NTkuOTk5JywgJzIwMTcwMTAxMjM1OTU5OTk5MDAwJywgJyAjdGFnIHN5c3RlbToxMjM0ICcsICdob2dlJykpCgkJcmV0ID0gZGIuZXhlY3V0ZShpbnNlcnRfc3FsLCAoJ3Rlc3QnLCAnMjAxNzAxMDEwMDAwMDAwMDAwMDAnLCAnMjAxNy0wMS0wMSAwMDowMDowMC4wMDAnLCAnMjAxNzAxMDEwMDAwMDAwMDAwMDAnLCAnICN0YWcgc3lzdGVtOjEyMzQgJywgJ2hvZ2UyJykpCjx8ZmltX2VuZHw+"]
["af168289556f01aa70a5036197009a91ec1eef28-4","af168289556f01aa70a5036197009a91ec1eef28","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc9dXRmLTgKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENvZGUgZ2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgQXV0b1Jlc3QgQ29kZSBHZW5lcmF0b3IuCiMgQ2hhbmdlcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgaWYgdGhlIGNvZGUgaXMKIyByZWdlbmVyYXRlZC4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKZnJvbSBtc3Jlc3Quc2VyaWFsaXphdGlvbiBpbXBvcnQgTW9kZWwKCgpjbGFzcyBNaWNyb3NvZnRncmFwaGNob2ljZUNvbHVtbihNb2RlbCk6CiAgICAiIiJjaG9pY2VDb2x1bW4uCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICA6cGFyYW0gYWxsb3dfdGV4dF9lbnRyeToKICAgIDp0eXBlIGFsbG93X3RleHRfZW50cnk6IGJvb2wKICAgIDpwYXJhbSBjaG9pY2VzOgo8fGZpbV9lbmR8Pg=="]
["2531b79e956f12a3da92f44279a54056aa0164f8-1","2531b79e956f12a3da92f44279a54056aa0164f8","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGd5bQppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gZmFjdG9yZWRfZ3ltIGltcG9ydCBBY3Rpb25UcmFuc2Zvcm0KZnJvbSBmYWN0b3JlZF9neW0ucHJvY2VzcyBpbXBvcnQgUHJvY2Vzcwpmcm9tIGtfcm9hZC5jb25zdGFudHMgaW1wb3J0IENvbnN0YW50cwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20ga19yb2FkLnV0aWwgaW1wb3J0ICgKICAgIGNsYW1wLAogICAgaGluZ2VfdHJhbnNmb3JtLAopCjx8ZmltX2VuZHw+"]
["9549eb58dca921605968d94a608da300a8c1e4b2-1","9549eb58dca921605968d94a608da300a8c1e4b2","PHxmaW1fcHJlZml4fD4KZGVmIHNvbHZlKGE6IGludCwgYjogaW50LCBjOmludCkgLT4gaW50Ogo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICByZXR1cm4gc3VtKFthLCBiLCBjXSkKPHxmaW1fZW5kfD4="]
["b062117d3c10b33466f970a3ff4f3df152972ee4-2","b062117d3c10b33466f970a3ff4f3df152972ee4","PHxmaW1fcHJlZml4fD4KIiIiCkdlbmVyYXRlcyBCVEMgV2FsbGV0cwoiIiIKZnJvbSBrZXlzIGltcG9ydCBCaXRjb2luS2V5cwpmcm9tIGVuY29kaW5nLmJhc2U1OF9jaGVjayBpbXBvcnQgQmFzZTU4Q2hlY2tBZGRyZXNzCgpwcmludCgiR2VuZXJhdGluZyBhIG5ldyBrZXlwYWlyIikKCm15X2tleXMgPSBCaXRjb2luS2V5cygpCm15X2tleXMuZ2VuX2tleV9wYWlyKCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKYnRjID0gIEJhc2U1OENoZWNrQWRkcmVzcyhteV9rZXlzLnB1YmxpY19rZXkpCgpwcmludCgiUHJpdmF0ZSBrZXk6IHt9Ii5mb3JtYXQobXlfa2V5cy5wcml2YXRlX2tleV9oYXNoKCkpKQo8fGZpbV9lbmR8Pg=="]
["b04894d852dec769faf8b27bd8859422c1e6e92d-2","b04894d852dec769faf8b27bd8859422c1e6e92d","PHxmaW1fcHJlZml4fD4KZnJvbSBkaXNjb3JkLmV4dCBpbXBvcnQgY29tbWFuZHMKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IGNvbmZpZwoKCmNsYXNzIERhdGFiYXNlQ29nKGNvbW1hbmRzLkNvZyk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgYm90KToKICAgICAgICBzZWxmLmJvdCA9IGJvdAoKICAgIEBjb21tYW5kcy5Db2cubGlzdGVuZXIoKQogICAgYXN5bmMgZGVmIG9uX2d1aWxkX2pvaW4oc2VsZiwgZ3VpbGQpOgogICAgICAgIGxvZ2dpbmcuaW5mbyhmIkpvaW5pbmcgZ3VpbGQ6IHtndWlsZC5uYW1lfSIpCiAgICAgICAgZ3VpbGRzX2NvbCA9IGNvbmZpZy5kYlsiZ3VpbGRzIl0KICAgICAgICB1c2Vyc19jb2wgPSBjb25maWcuZGJbInVzZXJzIl0KCiAgICAgICAgZ3VpbGRfaW5mbyA9IHsKICAgICAgICAgICAgImd1aWxkX2lkIjogZ3VpbGQuaWQsCiAgICAgICAgICAgICJwcmVmaXgiOiAiPz0iLAogICAgICAgIH0KICAgICAgICBhd2FpdCBndWlsZHNfY29sLmluc2VydF9vbmUoZ3VpbGRfaW5mbykKCiAgICAgICAgdXNlcnNfbGlzdCA9IFtdCiAgICAgICAgZm9yIG1lbWJlciBpbiBndWlsZC5tZW1iZXJzOgogICAgICAgICAgICB1c2Vyc19saXN0LmFwcGVuZCgKICAgICAgICAgICAgICAgIHsKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkKCiAgICAgICAgZ3VpbGRfdXNlcnMgPSBhd2FpdCB1c2Vyc19jb2wuaW5zZXJ0X21hbnkodXNlcnNfbGlzdCkKICAgICAgICBsb2dnaW5nLmluZm8oZiJJbnNlcnRlZCB7bGVuKGd1aWxkX3VzZXJzLmluc2VydGVkX2lkcyl9IG5ldyB1c2VycyIpCgogICAgQGNvbW1hbmRzLkNvZy5saXN0ZW5lcigpCiAgICBhc3luYyBkZWYgb25fZ3VpbGRfcmVtb3ZlKHNlbGYsIGd1aWxkKToKICAgICAgICBsb2dnaW5nLmluZm8oZiJMZWF2aW5nIGd1aWxkOiB7Z3VpbGQubmFtZX0iKQogICAgICAgIGd1aWxkc19jb2wgPSBjb25maWcuZGJbImd1aWxkcyJdCiAgICAgICAgdXNlcnNfY29sID0gY29uZmlnLmRiWyJ1c2VycyJdCgogICAgICAgIGF3YWl0IGd1aWxkc19jb2wuZGVsZXRlX29uZSh7Imd1aWxkX2lkIjogZ3VpbGQuaWR9KQogICAgICAgIGd1aWxkX3VzZXJzID0gYXdhaXQgdXNlcnNfY29sLmRlbGV0ZV9tYW55KHsiZ3VpbGRfaWQiOiBndWlsZC5pZH0pCgogICAgICAgIGxvZ2dpbmcuaW5mbyhmIkRlbGV0ZWQge2d1aWxkX3VzZXJzLmRlbGV0ZWRfY291bnR9IHVzZXJzIikKCiAgICBAY29tbWFuZHMuQ29nLmxpc3RlbmVyKCkKICAgIGFzeW5jIGRlZiBvbl9tZW1iZXJfam9pbihzZWxmLCBtZW1iZXIpOgogICAgICAgIHVzZXJzX2NvbCA9IGNvbmZpZy5kYlsidXNlcnMiXQogICAgICAgIHVzZXJfZGljdCA9IHsKICAgICAgICAgICAgInVzZXJfaWQiOiBtZW1iZXIuaWQsCiAgICAgICAgICAgICJndWlsZF9pZCI6IG1lbWJlci5ndWlsZC5pZCwKICAgICAgICAgICAgImJvdCI6IG1lbWJlci5ib3QsCiAgICAgICAgfQogICAgICAgIGF3YWl0IHVzZXJzX2NvbC5pbnNlcnRfb25lKHVzZXJfZGljdCkKCiAgICBAY29tbWFuZHMuQ29nLmxpc3RlbmVyKCkKICAgIGFzeW5jIGRlZiBvbl9tZW1iZXJfbGVhdmUoc2VsZiwgbWVtYmVyKToKICAgICAgICB1c2Vyc19jb2wgPSBjb25maWcuZGJbInVzZXJzIl0KICAgICAgICB1c2VyX2RpY3QgPSB7CiAgICAgICAgICAgICJ1c2VyX2lkIjogbWVtYmVyLmlkLAogICAgICAgICAgICAiZ3VpbGRfaWQiOiBtZW1iZXIuZ3VpbGQuaWQsCiAgICAgICAgICAgICJib3QiOiBtZW1iZXIuYm90LAogICAgICAgIH0KICAgICAgICBhd2FpdCB1c2Vyc19jb2wuZGVsZXRlX29uZSh1c2VyX2RpY3QpCgoKZGVmIHNldHVwKGJvdCk6CiAgICAjIEFkZHMgY29nIHRvIGJvdCBmcm9tIG1haW4ucHkKICAgIGJvdC5hZGRfY29nKERhdGFiYXNlQ29nKGJvdCkpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgInVzZXJfaWQiOiBtZW1iZXIuaWQsCiAgICAgICAgICAgICAgICAgICAgImd1aWxkX2lkIjogZ3VpbGQuaWQsCiAgICAgICAgICAgICAgICAgICAgImJvdCI6IG1lbWJlci5ib3QsCjx8ZmltX2VuZHw+"]
["bb6aa379887d298448cbbdbd125fd85a9e5b72eb-4","bb6aa379887d298448cbbdbd125fd85a9e5b72eb","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IG9zCmltcG9ydCBqc29uCmltcG9ydCBjb3B5CmltcG9ydCBhcmdwYXJzZQpmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMgaW1wb3J0IFRocmVhZFBvb2xFeGVjdXRvcgpmcm9tIHRxZG0gaW1wb3J0IHRxZG0KZnJvbSBjaGFpbmVyY3YuZGF0YXNldHMgaW1wb3J0IENPQ09CYm94RGF0YXNldApmcm9tIGNoYWluZXJjdi5kYXRhc2V0cy5jb2NvLmNvY29fdXRpbHMgaW1wb3J0IGdldF9jb2NvCmZyb20gdHlwaW5nIGltcG9ydCBMaXN0Cgpmcm9tIGFiZWphY2xpLmNvbmZpZyBpbXBvcnQgKAogICAgQUJFSkFfUExBVEZPUk1fVVNFUl9JRCwKICAgIEFCRUpBX1BMQVRGT1JNX1RPS0VOCikKZnJvbSBhYmVqYS5kYXRhbGFrZSBpbXBvcnQgQ2xpZW50IGFzIERhdGFsYWtlQ2xpZW50CmZyb20gYWJlamEuZGF0YWxha2UuZmlsZSBpbXBvcnQgRGF0YWxha2VGaWxlCmZyb20gYWJlamEuZGF0YWxha2UuY2hhbm5lbCBpbXBvcnQgQ2hhbm5lbApmcm9tIGFiZWphLmRhdGFsYWtlLnN0b3JhZ2VfdHlwZSBpbXBvcnQgU3RvcmFnZVR5cGUKZnJvbSBhYmVqYS5kYXRhc2V0cyBpbXBvcnQgQ2xpZW50IGFzIERhdGFzZXRDbGllbnQKZnJvbSBhYmVqYS5kYXRhc2V0cy5kYXRhc2V0X2l0ZW0gaW1wb3J0IERhdGFzZXRJdGVtcywgRGF0YXNldEl0ZW0KCmNyZWRlbnRpYWwgPSB7CiAgICAndXNlcl9pZCc6IEFCRUpBX1BMQVRGT1JNX1VTRVJfSUQsCiAgICAncGVyc29uYWxfYWNjZXNzX3Rva2VuJzogQUJFSkFfUExBVEZPUk1fVE9LRU4KfQoKCmNsYXNzIENPQ09Cb2J4RGF0YXNldE1vZChDT0NPQmJveERhdGFzZXQpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhX2Rpcj0nYXV0bycsIHNwbGl0PSd0cmFpbicsIHllYXI9JzIwMTcnLAogICAgICAgICAgICAgICAgIHVzZV9jcm93ZGVkPUZhbHNlLCByZXR1cm5fYXJlYT1GYWxzZSwgcmV0dXJuX2Nyb3dkZWQ9RmFsc2UpOgogICAgICAgIHN1cGVyKENPQ09Cb2J4RGF0YXNldE1vZCwgc2VsZikuX19pbml0X18oZGF0YV9kaXIsIHNwbGl0LCB5ZWFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX2Nyb3dkZWQsIHJldHVybl9hcmVhLCByZXR1cm5fY3Jvd2RlZCkKICAgICAgICBpZiBzcGxpdCBpbiBbJ3ZhbCcsICdtaW5pdmFsJywgJ3ZhbG1pbnVzbWluaXZhbCddOgogICAgICAgICAgICBpbWdfc3BsaXQgPSAndmFsJwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGltZ19zcGxpdCA9ICd0cmFpbicKICAgICAgICBpZiBkYXRhX2RpciA9PSAnYXV0byc6CiAgICAgICAgICAgIGRhdGFfZGlyID0gZ2V0X2NvY28oc3BsaXQsIGltZ19zcGxpdCwgeWVhcikKICAgICAgICBhbm5vX3BhdGggPSBvcy5wYXRoLmpvaW4oCiAgICAgICAgICAgIGRhdGFfZGlyLCAnYW5ub3RhdGlvbnMnLCAnaW5zdGFuY2VzX3t9e30uanNvbicuZm9ybWF0KHNwbGl0LCB5ZWFyKSkKCiAgICAgICAgc2VsZi5hbm5vdGF0aW9ucyA9IGpzb24ubG9hZChvcGVuKGFubm9fcGF0aCwgJ3InKSkKICAgICAgICBzZWxmLmNhdGVnb3JpZXMgPSBjb3B5LmNvcHkoc2VsZi5hbm5vdGF0aW9uc1snY2F0ZWdvcmllcyddKQoKICAgICAgICAjIGNhdGVnb3J5IGlkIHVzZSBzcGFyc2UgaWRzICguLiwgODEsIDgyLCA4NCwgLi4pCiAgICAgICAgc2VsZi5jYXRlZ29yaWVzLnNvcnQoa2V5PWxhbWJkYSB4OiB4WydpZCddKQoKICAgICAgICAjIGNvbnZlcnQgbGFiZWwgZm9ybWF0IGFkYXB0IHRvIEFCRUpBIFBsYXRmb3JtIERhdGFzZXRzCiAgICAgICAgZm9yIGxhYmVsIGluIHNlbGYuY2F0ZWdvcmllczoKICAgICAgICAgICAgbGFiZWxbJ2xhYmVsX2lkJ10gPSBsYWJlbFsnaWQnXQogICAgICAgICAgICBsYWJlbFsnbGFiZWwnXSA9IGxhYmVsLnBvcCgnbmFtZScpICAjIGlmIG5vIGxhYmVsIGF0dHJpYnV0ZSwgcGxhdGZvcm0gVUkgZG9lcyBub3QgcHJldmlldyBsYWJlbCBuYW1lCgogICAgZGVmIF9nZXRfaW1hZ2Uoc2VsZiwgaSk6CiAgICAgICAgIyBmaWxlbmFtZXMgYXJlIG5vdCBkdXBsaWNhdGVkIGluIHRyYWluIGFuZCB2YWwgYXQgMjAxNwogICAgICAgIHJldHVybiBQYXRoKHNlbGYuaW1nX3Jvb3QpIC8gUGF0aChzZWxmLmlkX3RvX3Byb3Bbc2VsZi5pZHNbaV1dWydmaWxlX25hbWUnXSkKPHxmaW1faG9sZXw+CiAgICAiIiIgY3JlYXRlcyBuZXcgZGF0YXNldCBmb3IgQUJFSkEgcGxhdGZvcm0sIHJldHVybnMgaXQncyBpZCAiIiIKICAgIGlmIG92ZXJyaWRlOgogICAgICAgIHJlc3BvbnNlID0gY2xpZW50LmRhdGFzZXRzLmxpc3QoKQogICAgICAgIGRhdGFzZXRzID0ge3IubmFtZTogci5kYXRhc2V0X2lkIGZvciByIGluIHJlc3BvbnNlfQogICAgICAgIGlmIG5hbWUgaW4gZGF0YXNldHM6CiAgICAgICAgICAgIGNsaWVudC5kYXRhc2V0cy5kZWxldGUoZGF0YXNldHNbbmFtZV0pCiAgICByZXNwb25zZSA9IGNsaWVudC5kYXRhc2V0cy5jcmVhdGUobmFtZSwgZGF0YXNldF90eXBlLCBwcm9wcz1wcm9wcykKICAgIGRhdGFzZXRfaWQgPSByZXNwb25zZS5kYXRhc2V0X2lkCiAgICByZXR1cm4gZGF0YXNldF9pZAoKCmRlZiBidWlsZF9wcm9wcyhjYXRlZ29yaWVzOiBMaXN0W2RpY3RdKSAtPiBkaWN0OgogICAgcHJvcHMgPSB7CiAgICAgICAgJ2NhdGVnb3JpZXMnOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICdjYXRlZ29yeV9pZCc6IDAsCiAgICAgICAgICAgICAgICAnbGFiZWxzJzogY2F0ZWdvcmllcywKICAgICAgICAgICAgICAgICduYW1lJzogJ21zLWNvY28nCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9CiAgICByZXR1cm4gcHJvcHMKCgpkZWYgYnVpbGRfYXR0cmlidXRlcyhiYm94ZXM6IGxpc3QsIGxhYmVsczogbGlzdCwgY2F0ZWdvcmllczogbGlzdCkgLT4gZGljdDoKICAgIGF0dHJpYnV0ZXMgPSBkaWN0KGRldGVjdGlvbj1bXSkKICAgIGZvciBiYm94LCBsYWJlbCBpbiB6aXAoYmJveGVzLCBsYWJlbHMpOgogICAgICAgIGRldGVjdGlvbiA9IHsKICAgICAgICAgICAgJ2NhdGVnb3J5X2lkJzogMCwKICAgICAgICAgICAgJ3JlY3QnOiB7CiAgICAgICAgICAgICAgICAneW1pbic6IGZsb2F0KGJib3hbMF0pLAogICAgICAgICAgICAgICAgJ3htaW4nOiBmbG9hdChiYm94WzFdKSwKICAgICAgICAgICAgICAgICd5bWF4JzogZmxvYXQoYmJveFsyXSksCiAgICAgICAgICAgICAgICAneG1heCc6IGZsb2F0KGJib3hbM10pLAogICAgICAgICAgICB9LAogICAgICAgICAgICAqKmNhdGVnb3JpZXNbbGFiZWxdCiAgICAgICAgfQogICAgICAgIGF0dHJpYnV0ZXNbJ2RldGVjdGlvbiddLmFwcGVuZChkZXRlY3Rpb24pCiAgICByZXR1cm4gYXR0cmlidXRlcwoKCmRlZiB1cGxvYWRfZGF0YXNldChkYXRhc2V0X2NsaWVudDogRGF0YXNldENsaWVudCwgZGF0YXNldF9pZDogc3RyLAogICAgICAgICAgICAgICAgICAgZGF0YXNldF9saXN0OiBsaXN0LCBtYXhfd29ya2VyczogaW50ID0gNCk6CiAgICAiIiIgdXBsb2FkcyBmaWxlIGluZm8gbGlzdCB0byBkYXRhc2V0IHVzaW5nIGFiZWphJ3MgZGF0YXNldCBjbGllbnQgIiIiCiAgICBkYXRhc2V0ID0gZGF0YXNldF9jbGllbnQuZ2V0X2RhdGFzZXQoZGF0YXNldF9pZCkKCiAgICBkZWYgX2YoZGF0YXNldF9pdGVtKToKICAgICAgICBzb3VyY2VfZGF0YSA9IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJ2RhdGFfdXJpJzogZGF0YXNldF9pdGVtLnNvdXJjZV9kYXRhWzBdLnVyaSwKICAgICAgICAgICAgICAgICdkYXRhX3R5cGUnOiBkYXRhc2V0X2l0ZW0uc291cmNlX2RhdGFbMF0udHlwZQogICAgICAgICAgICB9CiAgICAgICAgXSAgIyBUT0RPOiBvbmx5IG9uZSB1cmwgdG8gYmUgdXBsb2FkZWQKICAgICAgICBhdHRyaWJ1dGVzID0gZGF0YXNldF9pdGVtLmF0dHJpYnV0ZXMKICAgICAgICBkYXRhc2V0LmRhdGFzZXRfaXRlbXMuY3JlYXRlKHNvdXJjZV9kYXRhPXNvdXJjZV9kYXRhLCBhdHRyaWJ1dGVzPWF0dHJpYnV0ZXMpCgogICAgaWYgbWF4X3dvcmtlcnMgPiAxOgogICAgICAgIHdpdGggVGhyZWFkUG9vbEV4ZWN1dG9yKG1heF93b3JrZXJzKSBhcyBleGVjdXRvcjoKICAgICAgICAgICAgcmVzdWx0cyA9IGxpc3QodHFkbShleGVjdXRvci5tYXAoX2YsIGRhdGFzZXRfbGlzdCksIHRvdGFsPWxlbihkYXRhc2V0X2xpc3QpKSkKICAgICAgICByZXR1cm4gcmVzdWx0cwogICAgcmV0dXJuIFtfZih4KSBmb3IgeCBpbiB0cWRtKGRhdGFzZXRfbGlzdCldCgoKZGVmIHVwbG9hZF9pbWFnZV9hbmRfYXR0cmlidXRlcyhjaGFubmVsOiBDaGFubmVsLCBkYXRhc2V0X2l0ZW1zOiBEYXRhc2V0SXRlbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXBhdGg6IFBhdGgsIGJib3hlczogbGlzdCwgbGFiZWxzOiBsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXM6IExpc3RbZGljdF0pIC0+IERhdGFzZXRJdGVtOgogICAgYXR0aWJ1dGVzID0gYnVpbGRfYXR0cmlidXRlcyhiYm94ZXMsIGxhYmVscywgY2F0ZWdvcmllcykKICAgIGRhdGFsYWtlX2ZpbGUgPSB1cGxvYWRfaW1hZ2VfdG9fZGF0YWxha2UoY2hhbm5lbCwgZmlsZXBhdGgpCiAgICBzb3VyY2VfZGF0YSA9IFsKICAgICAgICB7CiAgICAgICAgICAgICdkYXRhX3VyaSc6IGRhdGFsYWtlX2ZpbGUudXJpLAogICAgICAgICAgICAnZGF0YV90eXBlJzogZGF0YWxha2VfZmlsZS5jb250ZW50X3R5cGUKICAgICAgICB9CiAgICBdCiAgICBkYXRhc2V0X2l0ZW0gPSBkYXRhc2V0X2l0ZW1zLmNyZWF0ZShzb3VyY2VfZGF0YT1zb3VyY2VfZGF0YSwgYXR0cmlidXRlcz1hdHRpYnV0ZXMpCiAgICByZXR1cm4gZGF0YXNldF9pdGVtCgoKZGVmIHVwbG9hZF9pbWFnZV90b19kYXRhbGFrZShjaGFubmVsOiBDaGFubmVsLCBmaWxlcGF0aDogUGF0aCkgLT4gRGF0YWxha2VGaWxlOgogICAgaWYgZmlsZXBhdGguc3VmZml4IG5vdCBpbiBbJy5qcGcnLCAnLmpwZWcnLCAnLkpQRycsICcuanBlZyddOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZidpbnZhbGlkIGZpbGUgZm9ybWF0OiB7ZmlsZXBhdGh9LCBpdCBpcyBub3QganBlZyBmaWxlJykKICAgIGNvbnRlbnRfdHlwZSA9ICdpbWFnZS9qcGVnJwogICAgbWV0YWRhdGEgPSB7J2ZpbGVuYW1lJzogZmlsZXBhdGgubmFtZX0KICAgIHJldHVybiBjaGFubmVsLnVwbG9hZF9maWxlKHN0cihmaWxlcGF0aCksIG1ldGFkYXRhPW1ldGFkYXRhLCBjb250ZW50X3R5cGU9Y29udGVudF90eXBlKQoKCmRlZiB1cGxvYWRfY29jb19kYXRhc2V0KGNvY29fZGF0YXNldDogQ09DT0JvYnhEYXRhc2V0TW9kLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsOiBDaGFubmVsLCBkYXRhc2V0X2l0ZW1zOiBEYXRhc2V0SXRlbXMsIG1heF93b3JrZXJzOiBpbnQpOgogICAgY2F0ZWdvcmllcyA9IGNvY29fZGF0YXNldC5jYXRlZ29yaWVzCgogICAgZGVmIF9mKHgpOgogICAgICAgIGZpbGVwYXRoLCBiYm94ZXMsIGxhYmVscyA9IHgKICAgICAgICByZXR1cm4gdXBsb2FkX2ltYWdlX2FuZF9hdHRyaWJ1dGVzKGNoYW5uZWwsIGRhdGFzZXRfaXRlbXMsIGZpbGVwYXRoLCBiYm94ZXMsIGxhYmVscywgY2F0ZWdvcmllcykKCiAgICBpZiBtYXhfd29ya2VycyA+IDE6CiAgICAgICAgd2l0aCBUaHJlYWRQb29sRXhlY3V0b3IobWF4X3dvcmtlcnMpIGFzIGV4ZWN1dG9yOgogICAgICAgICAgICByZXN1bHRzID0gbGlzdCh0cWRtKGV4ZWN1dG9yLm1hcChfZiwgY29jb19kYXRhc2V0KSwgdG90YWw9bGVuKGNvY29fZGF0YXNldCkpKQogICAgICAgIHJldHVybiByZXN1bHRzCiAgICByZXR1cm4gW19mKHgpIGZvciB4IGluIHRxZG0oY29jb19kYXRhc2V0KV0KCgpkZWYgbWFpbihvcmdhbml6YXRpb25faWQsIGRhdGFzZXRfbmFtZSwgbWF4X3dvcmtlcnMpOgogICAgY29jb19kYXRhc2V0X3RyYWluID0gQ09DT0JvYnhEYXRhc2V0TW9kKAogICAgICAgIHNwbGl0PSd0cmFpbicsIHllYXI9JzIwMTcnLCB1c2VfY3Jvd2RlZD1GYWxzZSwKICAgICkKICAgIGNvY29fZGF0YXNldF92YWwgPSBDT0NPQm9ieERhdGFzZXRNb2QoCiAgICAgICAgc3BsaXQ9J3ZhbCcsIHllYXI9JzIwMTcnLCB1c2VfY3Jvd2RlZD1GYWxzZSwKICAgICkKICAgIGNhdGVnb3JpZXMgPSBjb2NvX2RhdGFzZXRfdmFsLmNhdGVnb3JpZXMKICAgIHByb3BzID0gYnVpbGRfcHJvcHMoY2F0ZWdvcmllcykKCiAgICBkYXRhbGFrZV9jbGllbnQgPSBEYXRhbGFrZUNsaWVudChvcmdhbml6YXRpb25faWQ9b3JnYW5pemF0aW9uX2lkLCBjcmVkZW50aWFsPWNyZWRlbnRpYWwpCiAgICBkYXRhc2V0X2NsaWVudCA9IERhdGFzZXRDbGllbnQob3JnYW5pemF0aW9uX2lkPW9yZ2FuaXphdGlvbl9pZCwgY3JlZGVudGlhbD1jcmVkZW50aWFsKQoKICAgIGRlc2NyaXB0aW9uID0gZidNUy1DT0NPIGRldGVjdGlvbiBjcmVhdGVkIHdpdGggZGF0YXNldDoge2RhdGFzZXRfbmFtZX0nCiAgICBjaGFubmVsID0gZGF0YWxha2VfY2xpZW50LmNoYW5uZWxzLmNyZWF0ZSgnJywgZGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdG9yYWdlVHlwZS5EQVRBTEFLRS52YWx1ZSkKICAgIHByaW50KGYnY2hhbm5lbCBpcyBjcmVhdGVkOiB7Y2hhbm5lbC5jaGFubmVsX2lkfScpCgogICAgcHJpbnQoJ3VwbG9hZCB0cmFpbiBkYXRhc2V0Li4uJykKICAgIGRhdGFzZXRfaWRfdHJhaW4gPSBjcmVhdGVfZGF0YXNldChkYXRhc2V0X2NsaWVudCwgZGF0YXNldF9uYW1lICsgJy10cmFpbicsIHByb3BzPXByb3BzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXRfdHlwZT0nZGV0ZWN0aW9uJywgb3ZlcnJpZGU9VHJ1ZSkKICAgIGRhdGFzZXRfdHJhaW4gPSBkYXRhc2V0X2NsaWVudC5nZXRfZGF0YXNldChkYXRhc2V0X2lkX3RyYWluKQogICAgdXBsb2FkX2NvY29fZGF0YXNldChjb2NvX2RhdGFzZXRfdHJhaW4sIGNoYW5uZWwsIGRhdGFzZXRfdHJhaW4uZGF0YXNldF9pdGVtcywgbWF4X3dvcmtlcnMpCgogICAgcHJpbnQoJ3VwbG9hZCB2YWwgZGF0YXNldC4uLicpCiAgICBkYXRhc2V0X2lkX3ZhbCA9IGNyZWF0ZV9kYXRhc2V0KGRhdGFzZXRfY2xpZW50LCBkYXRhc2V0X25hbWUgKyAnLXZhbCcsIHByb3BzPXByb3BzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0X3R5cGU9J2RldGVjdGlvbicsIG92ZXJyaWRlPVRydWUpCiAgICBkYXRhc2V0X3ZhbCA9IGRhdGFzZXRfY2xpZW50LmdldF9kYXRhc2V0KGRhdGFzZXRfaWRfdmFsKQogICAgdXBsb2FkX2NvY29fZGF0YXNldChjb2NvX2RhdGFzZXRfdmFsLCBjaGFubmVsLCBkYXRhc2V0X3ZhbC5kYXRhc2V0X2l0ZW1zLCBtYXhfd29ya2VycykKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J1VwbG9hZCBNUy1DT0NPIERhdGFzZXQnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1vcmdhbml6YXRpb25faWQnLCAnLW8nLCB0eXBlPXN0ciwgcmVxdWlyZWQ9VHJ1ZSwgaGVscD0nb3JnYW5pemF0aW9uX2lkJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZGF0YXNldF9uYW1lJywgJy1kJywgdHlwZT1zdHIsIHJlcXVpcmVkPVRydWUsIGhlbHA9J2RhdGFzZXRfbmFtZScpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW1heF93b3JrZXJzJywgJy13JywgdHlwZT1pbnQsIGRlZmF1bHQ9NCkKICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCgogICAgb3JnYW5pemF0aW9uX2lkID0gYXJncy5vcmdhbml6YXRpb25faWQKICAgIGRhdGFzZXRfbmFtZSA9IGFyZ3MuZGF0YXNldF9uYW1lCiAgICBtYXhfd29ya2VycyA9IGFyZ3MubWF4X3dvcmtlcnMKICAgIG1haW4ob3JnYW5pemF0aW9uX2lkLCBkYXRhc2V0X25hbWUsIG1heF93b3JrZXJzKQo8fGZpbV9zdWZmaXh8PgoKCmRlZiBjcmVhdGVfZGF0YXNldChjbGllbnQ6IERhdGFzZXRDbGllbnQsIG5hbWU6IHN0ciwgcHJvcHM6IGRpY3QsCiAgICAgICAgICAgICAgICAgICBkYXRhc2V0X3R5cGU6IHN0ciwgb3ZlcnJpZGU6IGJvb2wgPSBUcnVlKToKPHxmaW1fZW5kfD4="]
["b0e23408c4db751ae82a6fcfd89527c53e85cfbc-2","b0e23408c4db751ae82a6fcfd89527c53e85cfbc","PHxmaW1fcHJlZml4fD4KIiIiXApQRVAgSU5GTwoKUEVQIDM0OSAtLSBBbGxvdyBzdHIoKSB0byByZXR1cm4gdW5pY29kZSBzdHJpbmdzClN0YXR1czogUmVqZWN0ZWQKQ3JlYXRlZDogMjAwNS0wOC0wMgoKTU9EVUxFIElORk8KClRoaXMgbW9kdWxlIGNoYW5nZXMgc3RyKCkgdG8gYWxsb3cgcmV0dXJuaW5nICoqYnl0ZXMqKi4gClNpbmNlIGFsbCBzdHJpbmdzIGFyZSB1bmljb2RlIHN0YXJ0aW5nIGZyb20gUHl0aG9uIDMsIAp0aGUgdGl0bGUgaXMgY2hhbmdlZC4gTm90ZSB0aGF0IHN0cigpIGlzIG1hZGUgYSBmdW5jdGlvbiwgCmFuZCB0aGUgdGhyZWUgYXJndW1lbnQgZm9ybSBpcyBkaXNhbGxvd2VkLgoKUkVGRVJFTkNFUwoKUEVQIDM0OTogPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTAzNDkvPgoiIiIKUEVQID0gMzQ5CmltcG9ydCBidWlsdGlucyBhcyBfYgpmcm9tIHR5cGluZyBpbXBvcnQgVW5pb24gYXMgX1UKIyBOT1RFOiBieXRlYXJyYXlzIG1heSBiZSBzdXBwb3J0ZWQgdG9vLCBidXQgbm90IGRvIGl0IHlldC4gPDIwMjEtMDgtMDg+CgpkZWYgc3RyKG9iamVjdD0nJykgLT4gX1VbX2Iuc3RyLCBieXRlc106CiAgICBpZiBpc2luc3RhbmNlKG9iamVjdCwgKF9iLnN0ciwgYnl0ZXMpKToKICAgICAgICByZXR1cm4gb2JqZWN0CiAgICByID0gb2JqZWN0Ll9fc3RyX18oKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBpZiBub3QgaXNpbnN0YW5jZShyLCAoX2Iuc3RyLCBieXRlcykpOgogICAgICAgIHJhaXNlIFR5cGVFcnJvcignX19zdHJfXyByZXR1cm5lZCBub24tc3RyaW5nIG9yIG5vbi1ieXRlcycpCiAgICByZXR1cm4gcgo8fGZpbV9lbmR8Pg=="]
["c69ab512f30a6ef5491c65458ebf4c160c437e12-4","c69ab512f30a6ef5491c65458ebf4c160c437e12","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCBsb2dnaW5nCgpmcm9tIHNodXRpbCBpbXBvcnQgY29weTIKZnJvbSB0aW1lIGltcG9ydCBzdHJmdGltZSwgZ210aW1lCgpmcm9tIGNvbmZpZ3VyYXRpb25zIGltcG9ydCBDT05GSUdfRElSCmZyb20gZGF0YSBpbXBvcnQgRVhQRVJJTUVOVFNfUlVOU19ESVIsIFZFQ1RPUlNfRElSCgpwYXJhbWV0ZXJzID0ge30KCgpjbGFzcyBQYXJhbWV0ZXJTdG9yZSh0eXBlKToKICAgIGRlZiBfX2dldGl0ZW1fXyhjbHMsIGtleTogc3RyKToKICAgICAgICBnbG9iYWwgcGFyYW1ldGVycwogICAgICAgIHJldHVybiBwYXJhbWV0ZXJzW2tleV0KCiAgICBkZWYgX19zZXRpdGVtX18oY2xzLCBrZXksIHZhbHVlKToKICAgICAgICBnbG9iYWwgcGFyYW1ldGVycwogICAgICAgIHBhcmFtZXRlcnNba2V5XSA9IHZhbHVlCgogICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBpdGVtKToKICAgICAgICBnbG9iYWwgcGFyYW1ldGVycwogICAgICAgIHJldHVybiBpdGVtIGluIHBhcmFtZXRlcnMKCgpjbGFzcyBDb25maWd1cmF0aW9uKG9iamVjdCwgbWV0YWNsYXNzPVBhcmFtZXRlclN0b3JlKToKICAgICIiIgogICAgQ29uZmlndXJhdGlvbiBjbGFzcyB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZXhwZXJpbWVudC4KICAgIFRoZSBleHBlcmltZW50IHBhcmFtZXRlcnMgYXJlIGxvYWRlZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGNvbmZpZ3VyYXRpb24gZmlsZQogICAgKGUuZy4gImZpbmVyX3RyYW5zZm9ybWVyLmpzb24pCgogICAgSXQgaW5zdGFudGlhdGVzIHRoZSBleHBlcmltZW50IGxvZ2dlci4KICAgIFRoZSBvdXRwdXQgb2YgdGhlIGV4cGVyaW1lbnQgaXMgc2F2ZWQgYXQgdGhlIEVYUEVSSU1FTlRTX1JVTlNfRElSIChkYXRhL2V4cGVyaW1lbnRzX3J1bnMpCiAgICAiIiIKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgY29uZmlndXJlKG1ldGhvZCwgbW9kZSk6CiAgICAgICAgZ2xvYmFsIHBhcmFtZXRlcnMKCiAgICAgICAgb3MubWFrZWRpcnMobmFtZT1vcy5wYXRoLmpvaW4oRVhQRVJJTUVOVFNfUlVOU19ESVIpLCBleGlzdF9vaz1UcnVlKQogICAgICAgIG9zLm1ha2VkaXJzKG5hbWU9b3MucGF0aC5qb2luKFZFQ1RPUlNfRElSKSwgZXhpc3Rfb2s9VHJ1ZSkKCiAgICAgICAgaWYgbWV0aG9kIGluIFsndHJhbnNmb3JtZXInLCAnYmlsc3RtJ106CiAgICAgICAgICAgIGNvbmZpZ19maWxlcGF0aCA9IG9zLnBhdGguam9pbihDT05GSUdfRElSLCBmJ3ttZXRob2R9Lmpzb24nKQogICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb25maWdfZmlsZXBhdGgpOgogICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNvbmZpZ19maWxlcGF0aCkgYXMgY29uZmlnX2ZpbGU6CiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IGpzb24ubG9hZChjb25maWdfZmlsZSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihmJ0NvbmZpZ3VyYXRpb24gZmlsZSAie21ldGhvZH0uanNvbiIgZG9lcyBub3QgZXhpc3QnKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoZiciRklORVItMTM5IiBleHBlcmltZW50IGRvZXMgbm90IHN1cHBvcnQgInttZXRob2R9IiBtZXRob2QnKQoKICAgICAgICBwYXJhbWV0ZXJzWyd0YXNrJ10gPSB7fQogICAgICAgIHBhcmFtZXRlcnNbJ3Rhc2snXVsnbW9kZWwnXSA9IG1ldGhvZAogICAgICAgIHBhcmFtZXRlcnNbJ3Rhc2snXVsnbW9kZSddID0gbW9kZQogICAgICAgIHBhcmFtZXRlcnNbJ2NvbmZpZ3VyYXRpb25fZmlsZW5hbWUnXSA9IGYne21ldGhvZH0uanNvbicKCiAgICAgICAgIyBTZXR1cCBMb2dnaW5nCiAgICAgICAgdGltZXN0YW1wID0gc3RyZnRpbWUoIiVZXyVtXyVkXyVIXyVNXyVTIiwgZ210aW1lKCkpCiAgICAgICAgbG9nX25hbWUgPSBmIkZJTkVSMTM5X3t0aW1lc3RhbXB9IgoKICAgICAgICAjIFNldCBleHBlcmltZW50X3BhdGggYW5kIGNyZWF0ZSBuZWNlc3NhcnkgZGlyZWN0b3JpZXMKICAgICAgICBpZiBtb2RlID09ICd0cmFpbic6CiAgICAgICAgICAgIGV4cGVyaW1lbnRfcGF0aCA9IG9zLnBhdGguam9pbihFWFBFUklNRU5UU19SVU5TX0RJUiwgbG9nX25hbWUpCiAgICAgICAgICAgIG9zLm1ha2VkaXJzKG5hbWU9b3MucGF0aC5qb2luKGV4cGVyaW1lbnRfcGF0aCwgJ21vZGVsJyksIGV4aXN0X29rPVRydWUpCiAgICAgICAgICAgIGNvcHkyKHNyYz1vcy5wYXRoLmpvaW4oQ09ORklHX0RJUiwgZid7bWV0aG9kfS5qc29uJyksCiAgICAgICAgICAgICAgICAgIGRzdD1vcy5wYXRoLmpvaW4oZXhwZXJpbWVudF9wYXRoLCBmJ3ttZXRob2R9Lmpzb24nKSkKCiAgICAgICAgZWxpZiBtb2RlID09ICdldmFsdWF0ZSc6CiAgICAgICAgICAgIHByZXRyYWluZWRfbW9kZWwgPSBwYXJhbWV0ZXJzWydldmFsdWF0aW9uJ11bJ3ByZXRyYWluZWRfbW9kZWwnXQogICAgICAgICAgICBpZiBwcmV0cmFpbmVkX21vZGVsIGlzIE5vbmUgb3IgcHJldHJhaW5lZF9tb2RlbC5zdHJpcCgpID09ICcnOgogICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKGYnTm8gcHJldHJhaW5lZF9tb2RlbCBwcm92aWRlZCBpbiBjb25maWd1cmF0aW9uJykKICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKEVYUEVSSU1FTlRTX1JVTlNfRElSLCBwcmV0cmFpbmVkX21vZGVsLCAnbW9kZWwnKSk6CiAgICAgICAgICAgICAgICBleHBlcmltZW50X3BhdGggPSBvcy5wYXRoLmpvaW4oRVhQRVJJTUVOVFNfUlVOU19ESVIsIHByZXRyYWluZWRfbW9kZWwpCiAgICAgICAgICAgICAgICBwcmV0cmFpbmVkX21vZGVsX3BhdGggPSBvcy5wYXRoLmpvaW4oZXhwZXJpbWVudF9wYXRoLCAnbW9kZWwnKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKGYnTW9kZWwgIntwcmV0cmFpbmVkX21vZGVsfSIgZG9lcyBub3QgZXhpc3QnKQoKICAgICAgICAgICAgY29uZmlndXJhdGlvbl9wYXRoID0gb3MucGF0aC5qb2luKGV4cGVyaW1lbnRfcGF0aCwgZid7bWV0aG9kfS5qc29uJykKICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29uZmlndXJhdGlvbl9wYXRoKToKICAgICAgICAgICAgICAgIHdpdGggb3Blbihjb25maWd1cmF0aW9uX3BhdGgpIGFzIGZpbjoKICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbF9wYXJhbWV0ZXJzID0ganNvbi5sb2FkKGZpbikKICAgICAgICAgICAgICAgICAgICBmb3Iga2V5IGluIFsndHJhaW5fcGFyYW1ldGVycycsICdnZW5lcmFsX3BhcmFtZXRlcnMnLCAnaHlwZXJfcGFyYW1ldGVycyddOgogICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW2tleV0gPSBvcmlnaW5hbF9wYXJhbWV0ZXJzW2tleV0KICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzWyd0YXNrJ11bJ21vZGUnXSA9IG1vZGUKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihmJ0NvbmZpZ3VyYXRpb24gIntjb25maWd1cmF0aW9uX3BhdGh9IiBkb2VzIG5vdCBleGlzdCcpCgogICAgICAgICAgICBwYXJhbWV0ZXJzWydldmFsdWF0aW9uJ11bJ3ByZXRyYWluZWRfbW9kZWxfcGF0aCddID0gcHJldHJhaW5lZF9tb2RlbF9wYXRoCiAgICAgICAgICAgIGxvZ19uYW1lID0gZiJ7bG9nX25hbWV9X0VWQUxVQVRFX3snXycuam9pbihwYXJhbWV0ZXJzWydldmFsdWF0aW9uJ11bJ3ByZXRyYWluZWRfbW9kZWwnXS5zcGxpdChvcy5zZXApKX0iCgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihmJ01vZGUgInttb2RlfSIgaXMgbm90IHN1cHBvcnRlZCcpCgogICAgICAgIHBhcmFtZXRlcnNbJ3Rhc2snXVsnbG9nX25hbWUnXSA9IGxvZ19uYW1lCiAgICAgICAgcGFyYW1ldGVyc1snZXhwZXJpbWVudF9wYXRoJ10gPSBleHBlcmltZW50X3BhdGgKCiAgICAgICAgIyBJZiBpbiBkZWJ1ZyBtb2RlIHNldCB3b3JrZXJzIGFuZCBtYXhfcXVldWVfc2l6ZSB0byBtaW5pbXVtIGFuZCBtdWx0aXByb2Nlc3NpbmcgdG8gRmFsc2UKICAgICAgICBpZiBwYXJhbWV0ZXJzWydnZW5lcmFsX3BhcmFtZXRlcnMnXVsnZGVidWcnXToKICAgICAgICAgICAgcGFyYW1ldGVyc1snZ2VuZXJhbF9wYXJhbWV0ZXJzJ11bJ3dvcmtlcnMnXSA9IDEKICAgICAgICAgICAgcGFyYW1ldGVyc1snZ2VuZXJhbF9wYXJhbWV0ZXJzJ11bJ21heF9xdWV1ZV9zaXplJ10gPSAxCiAgICAgICAgICAgIHBhcmFtZXRlcnNbJ2dlbmVyYWxfcGFyYW1ldGVycyddWyd1c2VfbXVsdGlwcm9jZXNzaW5nJ10gPSBGYWxzZQogICAgICAgICAgICBwYXJhbWV0ZXJzWydnZW5lcmFsX3BhcmFtZXRlcnMnXVsncnVuX2VhZ2VybHknXSA9IFRydWUKCiAgICAgICAgIyBDbGVhbiBsb2dnZXJzCiAgICAgICAgcm9vdCA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKICAgICAgICBpZiByb290LmhhbmRsZXJzOgogICAgICAgICAgICBmb3IgaGFuZGxlciBpbiByb290LmhhbmRsZXJzOgogICAgICAgICAgICAgICAgcm9vdC5yZW1vdmVIYW5kbGVyKGhhbmRsZXIpCgogICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5JTkZPLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSclKG1lc3NhZ2UpcycsCjx8ZmltX2hvbGV8PgogICAgICAgICMgZGVmaW5lIGEgSGFuZGxlciB3aGljaCB3cml0ZXMgSU5GTyBtZXNzYWdlcyBvciBoaWdoZXIgdG8gdGhlIHN5cy5zdGRlcnIKICAgICAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKICAgICAgICBjb25zb2xlLnNldExldmVsKGxvZ2dpbmcuSU5GTykKICAgICAgICAjIHNldCBhIGZvcm1hdCB3aGljaCBpcyBzaW1wbGVyIGZvciBjb25zb2xlIHVzZQogICAgICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKCclKG1lc3NhZ2UpcycpCiAgICAgICAgIyB0ZWxsIHRoZSBoYW5kbGVyIHRvIHVzZSB0aGlzIGZvcm1hdAogICAgICAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKICAgICAgICAjIGFkZCB0aGUgaGFuZGxlciB0byB0aGUgcm9vdCBsb2dnZXIKICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignJykuYWRkSGFuZGxlcihjb25zb2xlKQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIF9fZ2V0aXRlbV9fKGNscywgaXRlbTogc3RyKToKICAgICAgICBnbG9iYWwgcGFyYW1ldGVycwogICAgICAgIHJldHVybiBwYXJhbWV0ZXJzW2l0ZW1dCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlZm10PSclbS0lZCAlSDolTScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZT1vcy5wYXRoLmpvaW4oZXhwZXJpbWVudF9wYXRoLCBmJ3tsb2dfbmFtZX0udHh0JyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbW9kZT0nYScpCgo8fGZpbV9lbmR8Pg=="]
["af0c900cfed875ecacdf092017521bf1a58f7c40-2","af0c900cfed875ecacdf092017521bf1a58f7c40","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBudW1weQoKZnJvbSBrZXJhcy5kYXRhc2V0cyBpbXBvcnQgYm9zdG9uX2hvdXNpbmcKZnJvbSBrZXJhcyBpbXBvcnQgdXRpbHMKZnJvbSBpbmdpbmUgaW1wb3J0IGFubgoKb3MuZW52aXJvblsnS0VSQVNfQkFDS0VORCddID0gJ3RoZWFubycKCiMg0JfQsNCz0YDRg9C20LDQtdC8INC00LDQvdC90YvQtQooeF90cmFpbiwgeV90cmFpbiksICh4X3Rlc3QsIHlfdGVzdCkgPSBib3N0b25faG91c2luZy5sb2FkX2RhdGEoKQoKIyDQodGA0LXQtNC90LXQtSDQt9C90LDRh9C10L3QuNC1Cm1lYW4gPSB4X3RyYWluLm1lYW4oYXhpcz0wKQojINCh0YLQsNC90LTQsNGA0YLQvdC+0LUg0L7RgtC60LvQvtC90LXQvdC40LUKc3RkID0geF90cmFpbi5zdGQoYXhpcz0wKQp4X3RyYWluIC09IG1lYW4KeF90cmFpbiAvPSBzdGQKeF90ZXN0IC09IG1lYW4KeF90ZXN0IC89IHN0ZAoKcmVncmVzc2lvbiA9IGFubi5nZXRfcmVncmVzc2lvbih4X3RyYWluLCB5X3RyYWluLCBlcG9jaHMgPSAxMDEsIGxvc3MgPSAnbXNlJykKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcHJpbnQocmVncmVzc2lvbih4X3Rlc3RbNTBdLnJlc2hhcGUoMSwgMTMpKVswXSwgeV90ZXN0WzUwXSkKPHxmaW1fZW5kfD4="]
["c286ada2a855774bcaec6393e4ea39ee9a1beecc-3","c286ada2a855774bcaec6393e4ea39ee9a1beecc","PHxmaW1fcHJlZml4fD4KZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMgaW1wb3J0IFRocmVhZFBvb2xFeGVjdXRvcgoKZnJvbSBwYXJhbWV0ZXJpemVkIGltcG9ydCBwYXJhbWV0ZXJpemVkCgpmcm9tIHByb3RvY29sX2NvbnRyb2xsZXIucGx1Z2lucy5jYnNkX3Nhcy50ZXN0cy5hcHBfdGVzdGNhc2UgaW1wb3J0IEFwcFRlc3RDYXNlCmZyb20gcHJvdG9jb2xfY29udHJvbGxlci5wbHVnaW5zLmNic2Rfc2FzLnRlc3RzLmZpeHR1cmVzLmZha2VfcmVxdWVzdHMuZGVyZWdpc3RyYXRpb25fcmVxdWVzdHMgaW1wb3J0IFwKICAgIGRlcmVnaXN0cmF0aW9uX3JlcXVlc3RzCmZyb20gcHJvdG9jb2xfY29udHJvbGxlci5wbHVnaW5zLmNic2Rfc2FzLnRlc3RzLmZpeHR1cmVzLmZha2VfcmVxdWVzdHMuZ3JhbnRfcmVxdWVzdHMgaW1wb3J0IGdyYW50X3JlcXVlc3RzCmZyb20gcHJvdG9jb2xfY29udHJvbGxlci5wbHVnaW5zLmNic2Rfc2FzLnRlc3RzLmZpeHR1cmVzLmZha2VfcmVxdWVzdHMuaGVhcnRiZWF0X3JlcXVlc3RzIGltcG9ydCBoZWFydGJlYXRfcmVxdWVzdHMKZnJvbSBwcm90b2NvbF9jb250cm9sbGVyLnBsdWdpbnMuY2JzZF9zYXMudGVzdHMuZml4dHVyZXMuZmFrZV9yZXF1ZXN0cy5yZWdpc3RyYXRpb25fcmVxdWVzdHMgaW1wb3J0IFwKICAgIHJlZ2lzdHJhdGlvbl9yZXF1ZXN0cwpmcm9tIHByb3RvY29sX2NvbnRyb2xsZXIucGx1Z2lucy5jYnNkX3Nhcy50ZXN0cy5maXh0dXJlcy5mYWtlX3JlcXVlc3RzLnJlbGlucXVpc2htZW50X3JlcXVlc3RzIGltcG9ydCBcCiAgICByZWxpbnF1aXNobWVudF9yZXF1ZXN0cwpmcm9tIHByb3RvY29sX2NvbnRyb2xsZXIucGx1Z2lucy5jYnNkX3Nhcy50ZXN0cy5maXh0dXJlcy5mYWtlX3JlcXVlc3RzLnNwZWN0cnVtX2lucXVpcnlfcmVxdWVzdHMgaW1wb3J0IFwKICAgIHNwZWN0cnVtX2lucXVpcnlfcmVxdWVzdHMKCmluY29ycmVjdF9yZXF1ZXN0X3BheWxvYWQgPSB7ImluY29ycmVjdCI6IFsicGF5bG9hZCJdfQoKCmNsYXNzIFJlcXVlc3RSb3V0aW5nVGVzdENhc2UoQXBwVGVzdENhc2UpOgoKICAgIEBwYXJhbWV0ZXJpemVkLmV4cGFuZChbCiAgICAgICAgKCdyZWdpc3RyYXRpb24nLCByZWdpc3RyYXRpb25fcmVxdWVzdHNbMF0sIDEpLAogICAgICAgICgncmVnaXN0cmF0aW9uJywgcmVnaXN0cmF0aW9uX3JlcXVlc3RzWzFdLCAyKSwKICAgICAgICAoJ2RlcmVnaXN0cmF0aW9uJywgZGVyZWdpc3RyYXRpb25fcmVxdWVzdHNbMF0sIDEpLAogICAgICAgICgncmVsaW5xdWlzaG1lbnQnLCByZWxpbnF1aXNobWVudF9yZXF1ZXN0c1swXSwgMSksCiAgICAgICAgKCdncmFudCcsIGdyYW50X3JlcXVlc3RzWzBdLCAxKSwKICAgICAgICAoJ2hlYXJ0YmVhdCcsIGhlYXJ0YmVhdF9yZXF1ZXN0c1swXSwgMSksCiAgICAgICAgKCdzcGVjdHJ1bUlucXVpcnknLCBzcGVjdHJ1bV9pbnF1aXJ5X3JlcXVlc3RzWzBdLCAxKSwKICAgIF0pCiAgICBkZWYgdGVzdF9jYnNkX2dldHNfcmVzcG9uc2VfZnJvbV9zYXMoc2VsZiwgcm91dGUsIHJlcXVlc3RfcGF5bG9hZCwgZXhwZWN0ZWRfcmVzcF9sZW4pOgogICAgICAgICMgR2l2ZW4gLyBXaGVuCiAgICAgICAgcmVzcCA9IHNlbGYuY2xpZW50LnBvc3QoCiAgICAgICAgICAgIGYnL3Nhcy92MS97cm91dGV9JywKICAgICAgICAgICAgZm9sbG93X3JlZGlyZWN0cz1UcnVlLAogICAgICAgICAgICBqc29uPXJlcXVlc3RfcGF5bG9hZAogICAgICAgICkKCiAgICAgICAgIyBUaGVuCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9yZXNwX2xlbiwgbGVuKHJlc3AuanNvbltmIntyb3V0ZX1SZXNwb25zZSJdKSkKCiAgICBAcGFyYW1ldGVyaXplZC5leHBhbmQoWwo8fGZpbV9ob2xlfD4KICAgICAgICAoJ2hlYXJ0YmVhdCcsIGluY29ycmVjdF9yZXF1ZXN0X3BheWxvYWQpLAogICAgICAgICgnc3BlY3RydW1JbnF1aXJ5JywgaW5jb3JyZWN0X3JlcXVlc3RfcGF5bG9hZCksCiAgICBdKQogICAgZGVmIHRlc3RfZHBfcmFpc2VzXzQwMF93aGVuX3BheWxvYWRfZG9lbnRfcGFzc192YWxpZGF0aW9uKHNlbGYsIHJvdXRlLCBwYXlsb2FkKToKICAgICAgICAjIEdpdmVuIC8gV2hlbgogICAgICAgIHJlc3AgPSBzZWxmLmNsaWVudC5wb3N0KAogICAgICAgICAgICBmJy9zYXMvdjEve3JvdXRlfScsCiAgICAgICAgICAgIGZvbGxvd19yZWRpcmVjdHM9VHJ1ZSwKICAgICAgICAgICAganNvbj1wYXlsb2FkCiAgICAgICAgKQoKICAgICAgICAjIFRoZW4KICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQwMCwgcmVzcC5zdGF0dXNfY29kZSkKCiAgICBkZWYgdGVzdF9jYnNkX29ubHlfZ2V0c19yZXNwb25zZV9mcm9tX3Nhc19mb3JfdGhlX3JlcXVlc3RfaXRfc2VudChzZWxmKToKICAgICAgICAjIEdpdmVuIC8gV2hlbgogICAgICAgIHJlc3BvbnNlX25hbWUgPSAicmVnaXN0cmF0aW9uUmVzcG9uc2UiCiAgICAgICAgd2l0aCBUaHJlYWRQb29sRXhlY3V0b3IoKSBhcyBleGVjdXRvcjoKICAgICAgICAgICAgcmVzcHMgPSBleGVjdXRvci5tYXAobGFtYmRhIHBheWxvYWQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50LnBvc3QoZicvc2FzL3YxL3JlZ2lzdHJhdGlvbicsIGZvbGxvd19yZWRpcmVjdHM9VHJ1ZSwganNvbj1wYXlsb2FkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uX3JlcXVlc3RzKQoKICAgICAgICByZXNwcyA9IGxpc3QocmVzcHMpCiAgICAgICAgcmVzcHMuc29ydChrZXk9bGFtYmRhIHJlc3A6IGxlbihyZXNwLmpzb25bcmVzcG9uc2VfbmFtZV0pKQoKICAgICAgICAjIFRoZW4KICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihyZXNwcykpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4ocmVzcHNbMF0uanNvbltyZXNwb25zZV9uYW1lXSkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4ocmVzcHNbMV0uanNvbltyZXNwb25zZV9uYW1lXSkpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgKCdyZWdpc3RyYXRpb24nLCBpbmNvcnJlY3RfcmVxdWVzdF9wYXlsb2FkKSwKICAgICAgICAoJ2RlcmVnaXN0cmF0aW9uJywgaW5jb3JyZWN0X3JlcXVlc3RfcGF5bG9hZCksCiAgICAgICAgKCdyZWxpbnF1aXNobWVudCcsIGluY29ycmVjdF9yZXF1ZXN0X3BheWxvYWQpLAogICAgICAgICgnZ3JhbnQnLCBpbmNvcnJlY3RfcmVxdWVzdF9wYXlsb2FkKSwKPHxmaW1fZW5kfD4="]
["bb992f97e499396b6fdbda9c0509fdf2f1119c43-1","bb992f97e499396b6fdbda9c0509fdf2f1119c43","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc9dXRmLTgKCmltcG9ydCBvcwpmcm9tIC5iYXRjaGVyIGltcG9ydCBCYXRjaGVyCmZyb20gcXVldWUgaW1wb3J0IFF1ZXVlCmZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQKaW1wb3J0IHRocmVhZGluZwppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRvcmNoCmZyb20gdHFkbSBpbXBvcnQgdHFkbQppbXBvcnQgcmFuZG9tCgpzY3JpcHRfYWJzX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pClJPT1RfRElSID0gb3MucGF0aC5qb2luKHNjcmlwdF9hYnNfcGF0aCwgJy4uLy4uLy4uLycpCkRBVEFfRElSID0gb3MucGF0aC5qb2luKFJPT1RfRElSLCAnZGF0YXNldCcpClJBV19EQVRBID0gb3MucGF0aC5qb2luKERBVEFfRElSLCAncmF3X2RhdGEnLCAnbGF3JykKCmltcG9ydCBsb2dnaW5nCgpsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiR2VuZXJhdG9yIikKbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCgpQQURfVE9LRU4gPSAnW1BBRF0nClVOS19UT0tFTiA9ICdbVU5LXScKU0VQX1RPS0VOID0gJ1tTRVBdJwpDTFNfVE9LRU4gPSAnW0NMU10nCgoKY2xhc3MgVG9CZXJ0SW5wdXQoKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgYXJncywgdG9rZW5pemVyKToKICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCiAgICAgICAgc2VsZi50b2tlbml6ZXIgPSB0b2tlbml6ZXIKCgogICAgZGVmIF9fY2FsbF9fKHNlbGYsIGJhdGNoX2RhdGEpOgogICAgICAgIHRleHRfaW5wdXQgPSBbXQogICAgICAgIG1hc2tfaW5wdXQgPSBbXQogICAgICAgIHR5cGVfaW5wdXQgPSBbXQogICAgICAgIHkgPSBbXQoKICAgICAgICBmb3IgaWQsIGRpZCwgaW5wdXRfaWRzLCBpbnB1dF9zZWdtZW50cywgaW5wdXRfbWFza3MsIGxhYmVsIGluIGJhdGNoX2RhdGE6CgogICAgICAgICAgICBhc3NlcnQgbGVuKGlucHV0X2lkcykgPT0gbGVuKGlucHV0X3NlZ21lbnRzKSA9PSBsZW4oaW5wdXRfbWFza3MpID09IHNlbGYuYXJncy5tYXhfc2VxX2xlbgoKICAgICAgICAgICAgdGV4dF9pbnB1dC5hcHBlbmQoaW5wdXRfaWRzKQogICAgICAgICAgICBtYXNrX2lucHV0LmFwcGVuZChpbnB1dF9tYXNrcykKICAgICAgICAgICAgdHlwZV9pbnB1dC5hcHBlbmQoaW5wdXRfc2VnbWVudHMpCiAgICAgICAgICAgIHkuYXBwZW5kKGxhYmVsKQoKICAgICAgICB0ZXh0X2lucHV0ID0gbnAuYXJyYXkodGV4dF9pbnB1dCkgIyBbYiwgc2VxX2xlbl0KICAgICAgICBtYXNrX2lucHV0ID0gbnAuYXJyYXkobWFza19pbnB1dCkgIyBbYiwgc2VxX2xlbl0KICAgICAgICB0eXBlX2lucHV0ID0gbnAuYXJyYXkodHlwZV9pbnB1dCkgIyBbYiwgc2VxX2xlbl0KICAgICAgICB5ID0gbnAuYXJyYXkoeSkgIyBbYl0KICAgICAgICBpZiBzZWxmLmFyZ3MuY2xhc3NfbnVtID09IDE6CiAgICAgICAgICAgIHkgPSBucC5leHBhbmRfZGltcyh5LCBheGlzPS0xKSAjIFtiLCAxXQogICAgICAgICAgICAjIHlbeSA+IDAuNV0gPSAxLjAgICMg5bCG5qCH562+5LuOIDAgMei9rOWMluS4uiAtMSAxICwg54S25ZCO6L6T5YWlIHNpZ21vZCDlh73mlbDvvIzlvpfliLAgMCAxIOi+k+WHugogICAgICAgICAgICAjIHlbeSA8IDAuNV0gPSAtMS4wCgogICAgICAgICcnJyDmlbDmja7lpoLmnpzkuI3otrPku6XlubbooYzvvIzliJnpnIDopoHph43lpI0gJycnCiAgICAgICAgYmF0Y2hfc2l6ZSA9IHkuc2hhcGVbMF0KICAgICAgICByYXRpbyA9IDEKICAgICAgICBpZiBiYXRjaF9zaXplID4gc2VsZi5hcmdzLm1pbl9iel9wZXJfZ3B1KnNlbGYuYXJncy5ncHVfbnVtOgogICAgICAgICAgICBvdmVyX251bSA9IGJhdGNoX3NpemUgJSAoc2VsZi5hcmdzLm1pbl9iel9wZXJfZ3B1KnNlbGYuYXJncy5ncHVfbnVtKQogICAgICAgIGVsaWYgYmF0Y2hfc2l6ZSA8IHNlbGYuYXJncy5taW5fYnpfcGVyX2dwdSpzZWxmLmFyZ3MuZ3B1X251bToKICAgICAgICAgICAgb3Zlcl9udW0gPSBiYXRjaF9zaXplCiAgICAgICAgZWxzZToKICAgICAgICAgICAgb3Zlcl9udW0gPSAwCiAgICAgICAgaWYgb3Zlcl9udW0gPiAwOgogICAgICAgICAgICBhc3NlcnQgb3Zlcl9udW0gJSBzZWxmLmFyZ3MubWluX2J6X3Blcl9ncHUgPT0gMAogICAgICAgICAgICByZW1haW5fbnVtID0gc2VsZi5hcmdzLm1pbl9iel9wZXJfZ3B1KnNlbGYuYXJncy5ncHVfbnVtIC0gb3Zlcl9udW0KICAgICAgICAgICAgYXNzZXJ0IHJlbWFpbl9udW0gJSBzZWxmLmFyZ3MubWluX2J6X3Blcl9ncHUgPT0gMAoKICAgICAgICAgICAgdGV4dF9pbnB1dCA9IG5wLnBhZCh0ZXh0X2lucHV0LCAoKDAsIHJlbWFpbl9udW0pLCgwLDApKSwgJ2NvbnN0YW50JywgY29uc3RhbnRfdmFsdWVzPSgxLDEpKSAgIyBbKGIrcmVtYWluX251bSksIHNlcV9sZW5dCiAgICAgICAgICAgIG1hc2tfaW5wdXQgPSBucC5wYWQobWFza19pbnB1dCwgKCgwLCByZW1haW5fbnVtKSwoMCwwKSksICdjb25zdGFudCcsIGNvbnN0YW50X3ZhbHVlcz0oMSwxKSkgICMgWyhiK3JlbWFpbl9udW0pLCBzZXFfbGVuXQogICAgICAgICAgICB0eXBlX2lucHV0ID0gbnAucGFkKHR5cGVfaW5wdXQsICgoMCwgcmVtYWluX251bSksKDAsMCkpLCAnY29uc3RhbnQnLCBjb25zdGFudF92YWx1ZXM9KDEsMSkpICAjIFsoYityZW1haW5fbnVtKSwgc2VxX2xlbl0KICAgICAgICAgICAgaWYgc2VsZi5hcmdzLmNsYXNzX251bSA9PSAxOgogICAgICAgICAgICAgICAgeSA9IG5wLnBhZCh5LCAoKDAsIHJlbWFpbl9udW0pLCgwLDApKSwgJ2NvbnN0YW50JywgY29uc3RhbnRfdmFsdWVzPSgxLCAxKSkgICMgWyhiK3JlbWFpbl9udW0pLCAxXQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgeSA9IG5wLnBhZCh5LCAoMCwgcmVtYWluX251bSksICdjb25zdGFudCcsIGNvbnN0YW50X3ZhbHVlcz0oMSwgMSkpICAjIFsoYityZW1haW5fbnVtKSwgMV0KICAgICAgICAgICAgcGFkZGVkX2JhdGNoX3NpemUgPSB5LnNoYXBlWzBdCiAgICAgICAgICAgIHJhdGlvID0gYmF0Y2hfc2l6ZS9wYWRkZWRfYmF0Y2hfc2l6ZQoKICAgICAgICB0ZXh0X2lucHV0ID0gIHRvcmNoLlRlbnNvcih0ZXh0X2lucHV0KS5sb25nKCkKICAgICAgICBtYXNrX2lucGl0ID0gdG9yY2guVGVuc29yKG1hc2tfaW5wdXQpLmZsb2F0KCkKICAgICAgICB0eXBlX2lucHV0ID0gdG9yY2guVGVuc29yKHR5cGVfaW5wdXQpLmxvbmcoKQoKICAgICAgICBpZiBzZWxmLmFyZ3MuY2xhc3NfbnVtID09IDE6CiAgICAgICAgICAgIHkgPSB0b3JjaC5UZW5zb3IoeSkuZmxvYXQoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHkgPSB0b3JjaC5UZW5zb3IoeSkubG9uZygpICAjIFtiLF0KCiAgICAgICAgcmV0dXJuICh0ZXh0X2lucHV0LCB0eXBlX2lucHV0LCBtYXNrX2lucGl0LCB5LCB5LCB5LCB5KSwgcmF0aW8KCgpjbGFzcyBUcmFpbkRhdGFHZW5lcmF0b3IoKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YXNldF9tb2RlbCwgZGF0YXNldF9uYW1lLCB0b2tlbml6ZXIsIGFyZ3MsIHRyYW5zZm9ybT1Ob25lKToKICAgICAgICAiIiJJbml0LiIiIgogICAgICAgIHNlbGYudHJhbnNmb3JtID0gdHJhbnNmb3JtCiAgICAgICAgc2VsZi5kYXRhc2V0X21vZGVsID0gZGF0YXNldF9tb2RlbAogICAgICAgIHNlbGYuZGF0YXNldF9uYW1lID0gZGF0YXNldF9uYW1lCiAgICAgICAgc2VsZi5iYXRjaF9zaXplID0gYXJncy5iYXRjaF9zaXplCiAgICAgICAgc2VsZi50b2tlbml6ZXIgPSB0b2tlbml6ZXIKICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCiAgICAgICAgc2VsZi5tYXhfcV9sZW4gPSBzZWxmLmFyZ3MubWF4X3FfbGVuCiAgICAgICAgc2VsZi5tYXhfZF9sZW4gPSBzZWxmLmFyZ3MubWF4X2RfbGVuCiAgICAgICAgc2VsZi5tYXhfc2VxX2xlbiA9IHNlbGYuYXJncy5tYXhfc2VxX2xlbgogICAgICAgIHNlbGYubWF4X3BhcmFfbnVtID0gc2VsZi5hcmdzLm1heF9wYXJhX251bQogICAgICAgIHNlbGYuYmF0Y2hlciA9IEJhdGNoZXIoZGF0YXNldF9uYW1lPWRhdGFzZXRfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuaXplcj10b2tlbml6ZXIpCiAgICAgICAgc2VsZi5idWZmZXIgPSBRdWV1ZShtYXhzaXplPXNlbGYuYmF0Y2hfc2l6ZSkKICAgICAgICBzZWxmLmZ1bGxfc2VtID0gdGhyZWFkaW5nLlNlbWFwaG9yZSgwKQogICAgICAgIHNlbGYuZW1wdHlfc2VtID0gdGhyZWFkaW5nLlNlbWFwaG9yZSgxKQogICAgICAgIHNlbGYuZGF0YV9idWZmX3RocmVhZCA9IFRocmVhZCh0YXJnZXQ9c2VsZi5nZXRfZGF0YV93b3JrZXIpCiAgICAgICAgc2VsZi5kYXRhX2J1ZmZfdGhyZWFkLnN0YXJ0KCkKCiAgICAgICAgc2VsZi5mbGFnX2RhdGFfb3V0ID0gRmFsc2UKCgoKICAgIGRlZiBnZXRfZGF0YV93b3JrZXIoc2VsZik6CgogICAgICAgIHNlbGYuZmxhZ19kYXRhX291dCA9IEZhbHNlCiAgICAgICAgaSA9IDAKICAgICAgICBiYXRjaGVzID0gMAogICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgIHFpZCwgZGlkLCBsYWJlbCA9IHNlbGYuYmF0Y2hlci5xZF9wYWlyc19pZFtpXSAjIOW+l+WIsCBxaWQgZGlkIGxhYmVsCgogICAgICAgICAgICBxdWVyeSA9IHNlbGYuYmF0Y2hlci5nZXRfcXVlcnkocWlkKSAjIOW+l+WIsCBxIOWGheWuuQogICAgICAgICAgICBkb2MgPSBzZWxmLmJhdGNoZXIuZ2V0X2RvYyhkaWQpICMg5b6X5YiwIGQg5YaF5a65CgogICAgICAgICAgICBpZiBiYXRjaGVzID09IDA6CiAgICAgICAgICAgICAgICBzZWxmLmVtcHR5X3NlbS5hY3F1aXJlKCkgIyDor7fmsYLkuIDkuKrmibnmrKHkvY3nva4KCiAgICAgICAgICAgIGlucHV0cyA9IHNlbGYuYmF0Y2hlci50b2tlbml6ZXIuZW5jb2RlX3BsdXMocXVlcnksIGRvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfc3BlY2lhbF90b2tlbnM9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGVuZ3RoPXNlbGYubWF4X3NlcV9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1bmNhdGlvbj0nbG9uZ2VzdF9maXJzdCcpCgogICAgICAgICAgICBpbnB1dF9pZHMgPSBpbnB1dHNbImlucHV0X2lkcyJdCiAgICAgICAgICAgIGlucHV0X21hc2tzID0gWzFdICogbGVuKGlucHV0X2lkcykKICAgICAgICAgICAgaW5wdXRfc2VnbWVudHMgPSBpbnB1dHNbInRva2VuX3R5cGVfaWRzIl0KICAgICAgICAgICAgcGFkZGluZ19sZW5ndGggPSBzZWxmLm1heF9zZXFfbGVuIC0gbGVuKGlucHV0X2lkcykKICAgICAgICAgICAgcGFkZGluZ19pZCA9IHNlbGYuYmF0Y2hlci50b2tlbml6ZXIucGFkX3Rva2VuX2lkCiAgICAgICAgICAgIGlucHV0X2lkcyA9IGlucHV0X2lkcyArIChbcGFkZGluZ19pZF0gKiBwYWRkaW5nX2xlbmd0aCkgICMgW21heF9zZXFdCiAgICAgICAgICAgIGlucHV0X21hc2tzID0gaW5wdXRfbWFza3MgKyAoWzBdICogcGFkZGluZ19sZW5ndGgpICAjIFttYXhfc2VxXQogICAgICAgICAgICBpbnB1dF9zZWdtZW50cyA9IGlucHV0X3NlZ21lbnRzICsgKFswXSAqIHBhZGRpbmdfbGVuZ3RoKSAgIyBbbWF4X3NlcV0KCgogICAgICAgICAgICBzZWxmLmJ1ZmZlci5wdXQoKHFpZCwgZGlkLCBpbnB1dF9pZHMsIGlucHV0X3NlZ21lbnRzLCBpbnB1dF9tYXNrcywgbGFiZWwpKQoKICAgICAgICAgICAgYmF0Y2hlcyArPSAxCiAgICAgICAgICAgIGlmIGJhdGNoZXMgPj0gc2VsZi5iYXRjaF9zaXplOiAgIyDmr4/lrozmiJDkuIDkuKpiYXRjaCDph4rmlL7kuIDkuKrkv6Hlj7fph48KICAgICAgICAgICAgICAgIHNlbGYuZnVsbF9zZW0ucmVsZWFzZSgpICAjIOmHiuaUvuS4gOS4qmJhdGNo5L+h5Y+36YePCiAgICAgICAgICAgICAgICBiYXRjaGVzID0gMAoKICAgICAgICAgICAgaSArPSAxCiAgICAgICAgICAgIGlmIGkgPj0gbGVuKHNlbGYuYmF0Y2hlci5xZF9wYWlyc19pZCk6ICAjIOWmguaenOayoeWkhOeQhua7oeS4gOS4qmJhdGNo5L2G5aSE55CG5a6M5omA5pyJ55qE5pWw5o2uCiAgICAgICAgICAgICAgICBpID0gMAogICAgICAgICAgICAgICAgc2VsZi5mbGFnX2RhdGFfb3V0ID0gVHJ1ZQogICAgICAgICAgICAgICAgc2VsZi5mdWxsX3NlbS5yZWxlYXNlKCkgICMg5a6M5oiQ5pyA5ZCO5LiA5LiqYmF0Y2jvvIzph4rmlL7kuIDkuKrkv6Hlj7fph48KICAgICAgICAgICAgICAgIGJhdGNoZXMgPSAwCgoKICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpdGVtOiBpbnQpOgoKICAgICAgICBzZWxmLmZ1bGxfc2VtLmFjcXVpcmUoKSAgIyDor7fmsYLkuIDkuKrmibnmrKEKCiAgICAgICAgaWYgc2VsZi5mbGFnX2RhdGFfb3V0ID09IFRydWU6CgogICAgICAgICAgICBzZWxmLmZsYWdfZGF0YV9vdXQgPSBGYWxzZQogICAgICAgICAgICBiYXRjaF9kYXRhID0gW10KICAgICAgICAgICAgcmVtYWluID0gc2VsZi5idWZmZXIucXNpemUoKQogICAgICAgICAgICBmb3IgXyBpbiByYW5nZShyZW1haW4pOgogICAgICAgICAgICAgICAgYmF0Y2hfZGF0YS5hcHBlbmQoc2VsZi5idWZmZXIuZ2V0KCkpCgogICAgICAgICAgICBmb3IgdHJhbiBpbiBzZWxmLnRyYW5zZm9ybToKICAgICAgICAgICAgICAgIGJhdGNoX2RhdGEgPSB0cmFuKGJhdGNoX2RhdGEpCgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGFzc2VydCBzZWxmLmJ1ZmZlci5xc2l6ZSgpID09IHNlbGYuYmF0Y2hfc2l6ZQogICAgICAgICAgICBiYXRjaF9kYXRhID0gW10KICAgICAgICAgICAgZm9yIF8gaW4gcmFuZ2Uoc2VsZi5iYXRjaF9zaXplKToKICAgICAgICAgICAgICAgIGJhdGNoX2RhdGEuYXBwZW5kKHNlbGYuYnVmZmVyLmdldCgpKQoKICAgICAgICAgICAgZm9yIHRyYW4gaW4gc2VsZi50cmFuc2Zvcm06CiAgICAgICAgICAgICAgICBiYXRjaF9kYXRhID0gdHJhbihiYXRjaF9kYXRhKQoKICAgICAgICBzZWxmLmVtcHR5X3NlbS5yZWxlYXNlKCkgICMg6YeK5pS+5LiA5Liq56m65om55qyhCgogICAgICAgIHJldHVybiBiYXRjaF9kYXRhCgogICAgZGVmIF9fbGVuX18oc2VsZikgLT4gaW50OgoKICAgICAgICBudW1fYmF0Y2ggPSAobGVuKHNlbGYuYmF0Y2hlci5xZF9wYWlyc19pZCkgLy8gc2VsZi5hcmdzLmJhdGNoX3NpemUpCiAgICAgICAgcmVtYWluID0gbGVuKHNlbGYuYmF0Y2hlci5xZF9wYWlyc19pZCkgJSBzZWxmLmFyZ3MuYmF0Y2hfc2l6ZQogICAgICAgIGlmIHJlbWFpbiA+IDA6CiAgICAgICAgICAgIG51bV9iYXRjaCArPSAxCgogICAgICAgIHJldHVybiBudW1fYmF0Y2gKCiAgICBkZWYgb25fZXBvY2hfZW5kX2NhbGxiYWNrKHNlbGYsIGNhbGxiYWNrPU5vbmUpOgogICAgICAgICIiIlJlb3JnYW5pemUgdGhlIGRhdGFfYmVydCB3aGlsZSBlcG9jaCBpcyBlbmRlZC4iIiIKICAgICAgICBpZiBjYWxsYmFjazoKICAgICAgICAgICAgY2FsbGJhY2soKQoKICAgIGRlZiBnZXRfYWxsKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmJhdGNoZXIuZ2V0X2FsbCgpCgoKY2xhc3MgRGV2VGVzdEdlbmVyYXRvcigpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhc2V0X21vZGVsLCBkYXRhc2V0X25hbWUsIHRva2VuaXplciwgYXJncywgdHJhbnNmb3JtPU5vbmUpOgogICAgICAgICIiIkluaXQuIiIiCiAgICAgICAgc2VsZi50cmFuc2Zvcm0gPSB0cmFuc2Zvcm0KICAgICAgICBzZWxmLmRhdGFzZXRfbW9kZWwgPSBkYXRhc2V0X21vZGVsCiAgICAgICAgc2VsZi5kYXRhc2V0X25hbWUgPSBkYXRhc2V0X25hbWUKICAgICAgICBzZWxmLmJhdGNoX3NpemUgPSBhcmdzLmJhdGNoX3NpemUKICAgICAgICBzZWxmLnRva2VuaXplciA9IHRva2VuaXplcgogICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKICAgICAgICBzZWxmLm1heF9xX2xlbiA9IHNlbGYuYXJncy5tYXhfcV9sZW4KICAgICAgICBzZWxmLm1heF9kX2xlbiA9IHNlbGYuYXJncy5tYXhfZF9sZW4KICAgICAgICBzZWxmLm1heF9zZXFfbGVuID0gc2VsZi5hcmdzLm1heF9zZXFfbGVuCiAgICAgICAgc2VsZi5tYXhfcGFyYV9udW0gPSBzZWxmLmFyZ3MubWF4X3BhcmFfbnVtCiAgICAgICAgc2VsZi5iYXRjaGVyID0gQmF0Y2hlcihkYXRhc2V0X25hbWU9ZGF0YXNldF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz1hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5pemVyPXRva2VuaXplcikKICAgICAgICBzZWxmLmJ1ZmZlciA9IFF1ZXVlKG1heHNpemU9c2VsZi5iYXRjaF9zaXplKQogICAgICAgIHNlbGYuZnVsbF9zZW0gPSB0aHJlYWRpbmcuU2VtYXBob3JlKDApCiAgICAgICAgc2VsZi5lbXB0eV9zZW0gPSB0aHJlYWRpbmcuU2VtYXBob3JlKDEpCiAgICAgICAgc2VsZi5kYXRhX2J1ZmZfdGhyZWFkID0gVGhyZWFkKHRhcmdldD1zZWxmLmdldF9kYXRhX3dvcmtlcikKICAgICAgICBzZWxmLmRhdGFfYnVmZl90aHJlYWQuc3RhcnQoKQoKICAgICAgICBzZWxmLmZsYWdfZGF0YV9vdXQgPSBGYWxzZQogICAgICAgIHNlbGYuZmxhZ19kYXRhX291dF9vbmNlID0gRmFsc2UKCgoKCiAgICBkZWYgZ2V0X2RhdGFfd29ya2VyKHNlbGYpOgoKICAgICAgICBzZWxmLmZsYWdfZGF0YV9vdXQgPSBGYWxzZQogICAgICAgIGkgPSAwCiAgICAgICAgYmF0Y2hlcyA9IDAKICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICBxaWQsIGRpZCwgbGFiZWwgPSBzZWxmLmJhdGNoZXIucWRfcGFpcnNfaWRbaV0gIyDlvpfliLAgcWlkIGRpZCBsYWJlbAoKICAgICAgICAgICAgcXVlcnkgPSBzZWxmLmJhdGNoZXIuZ2V0X3F1ZXJ5KHFpZCkgIyDlvpfliLAgcSDlhoXlrrkKICAgICAgICAgICAgZG9jID0gc2VsZi5iYXRjaGVyLmdldF9kb2MoZGlkKSAjIOW+l+WIsCBkIOWGheWuuQoKICAgICAgICAgICAgaWYgYmF0Y2hlcyA9PSAwOgogICAgICAgICAgICAgICAgc2VsZi5lbXB0eV9zZW0uYWNxdWlyZSgpICMg6K+35rGC5LiA5Liq5om55qyh5L2N572uCgogICAgICAgICAgICBpbnB1dHMgPSBzZWxmLmJhdGNoZXIudG9rZW5pemVyLmVuY29kZV9wbHVzKHF1ZXJ5LCBkb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkX3NwZWNpYWxfdG9rZW5zPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xlbmd0aD1zZWxmLm1heF9zZXFfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydW5jYXRpb249J2xvbmdlc3RfZmlyc3QnKQoKICAgICAgICAgICAgaW5wdXRfaWRzID0gaW5wdXRzWyJpbnB1dF9pZHMiXQogICAgICAgICAgICBpbnB1dF9tYXNrcyA9IFsxXSAqIGxlbihpbnB1dF9pZHMpCiAgICAgICAgICAgIGlucHV0X3NlZ21lbnRzID0gaW5wdXRzWyJ0b2tlbl90eXBlX2lkcyJdCiAgICAgICAgICAgIHBhZGRpbmdfbGVuZ3RoID0gc2VsZi5tYXhfc2VxX2xlbiAtIGxlbihpbnB1dF9pZHMpCiAgICAgICAgICAgIHBhZGRpbmdfaWQgPSBzZWxmLmJhdGNoZXIudG9rZW5pemVyLnBhZF90b2tlbl9pZAogICAgICAgICAgICBpbnB1dF9pZHMgPSBpbnB1dF9pZHMgKyAoW3BhZGRpbmdfaWRdICogcGFkZGluZ19sZW5ndGgpICAjIFttYXhfc2VxXQogICAgICAgICAgICBpbnB1dF9tYXNrcyA9IGlucHV0X21hc2tzICsgKFswXSAqIHBhZGRpbmdfbGVuZ3RoKSAgIyBbbWF4X3NlcV0KICAgICAgICAgICAgaW5wdXRfc2VnbWVudHMgPSBpbnB1dF9zZWdtZW50cyArIChbMF0gKiBwYWRkaW5nX2xlbmd0aCkgICMgW21heF9zZXFdCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgogICAgICAgICAgICBzZWxmLmJ1ZmZlci5wdXQoKHFpZCwgZGlkLCBpbnB1dF9pZHMsIGlucHV0X3NlZ21lbnRzLCBpbnB1dF9tYXNrcywgbGFiZWwpKQoKPHxmaW1fZW5kfD4="]
["dd24bed635ec4b6eb4c0f79d84f6c0b3f2c8470c-1","dd24bed635ec4b6eb4c0f79d84f6c0b3f2c8470c","PHxmaW1fcHJlZml4fD4KIiIiUHJvYmFiaWxpdHkgdGVzdHMuIiIiCmltcG9ydCBkb2tpIGFzIGRva2kKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBvcwppbXBvcnQgc3lzCgpmcm9tIHJlZ19jcmVhdGlvbl90ZXN0cyBpbXBvcnQgZG9raV90b19ucAoKCmRlZiBSeV9kb2tpKGFuZ2xlKToKICAgICIiIlJldHVybiBhIFJ5IGdhdGUuIiIiCiAgICBucGdhdGUgPSBucC5hcnJheShbW25wLmNvcyhhbmdsZSAvIDIpLCAtbnAuc2luKGFuZ2xlIC8gMildLAogICAgICAgICAgICAgICAgICAgICAgIFtucC5zaW4oYW5nbGUgLyAyKSwgIG5wLmNvcyhhbmdsZSAvIDIpXV0sIGR0eXBlPWNvbXBsZXgpCiAgICByZXR1cm4gZG9raS5nYXRlX25ldygxLCBucGdhdGUudG9saXN0KCksIEZhbHNlKQoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIHRlc3RfcHJvYmFiaWxpdHkobnEsIHJ0b2wsIGF0b2wsIG51bV90aHJlYWRzKToKICAgICIiIlRlc3QgcHJvYmFiaWxpdHkgbWV0aG9kIHdpdGggbnEgcXViaXRzIHJlZ2lzdHJ5LiIiIgogICAgc3RlcCA9IDIgKiBucC5waSAvIG5xCiAgICBnYXRlcyA9IFtSeV9kb2tpKHN0ZXAgKiBpKSBmb3IgaSBpbiByYW5nZShucSldCjx8ZmltX2VuZHw+"]
["3aa6ca44d0a30eda83e471fe23fd05975e7fa1d9-1","3aa6ca44d0a30eda83e471fe23fd05975e7fa1d9","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gLi4uLi5GdW5jdGlvbnMuUGxvdC5wbG90X0Ffc3BhY2UgaW1wb3J0IHBsb3RfQV9zcGFjZSBhcyBwbG90X0Ffc3BhY2VfZmN0CgoKZGVmIHBsb3RfQV9zcGFjZSgKICAgIHNlbGYsCiAgICBEYXRhX3N0ciwKICAgIGluZGV4X2xpc3Q9WzBdLAogICAgdD1Ob25lLAogICAgdF9pbmRleD0wLAogICAgaXNfZGVnPVRydWUsCjx8ZmltX2hvbGV8PgogICAgaXNfbm9ybT1GYWxzZSwKICAgIHVuaXQ9IlNJIiwKICAgIGRhdGFfbGlzdD1bXSwKICAgIGxlZ2VuZF9saXN0PVtdLAogICAgY29sb3JfbGlzdD1bXSwKICAgIHNhdmVfcGF0aD1Ob25lLAogICAgeV9taW49Tm9uZSwKICAgIHlfbWF4PU5vbmUsCiAgICBtYWdfbWF4PU5vbmUsCiAgICBpc19hdXRvX3RpY2tzPVRydWUsCiAgICBmaWc9Tm9uZSwKKToKICAgICIiIlBsb3RzIGEgZmllbGQgYXMgYSBmdW5jdGlvbiBvZiBzcGFjZSAoYW5nbGUpCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgc2VsZiA6IE91dHB1dAogICAgICAgIGFuIE91dHB1dCBvYmplY3QKICAgIERhdGFfc3RyIDogc3RyCiAgICAgICAgbmFtZSBvZiB0aGUgRGF0YSBvYmplY3QgdG8gcGxvdCAoZS5nLiAibWFnLkJyIikKICAgIGluZGV4X2xpc3QgOiBsaXN0CiAgICAgICAgbGlzdCBvZiBpbmRpY2VzIHRvIHRha2UgZnJvbSBhIGNvbXBvbmVudHMgYXhpcwogICAgdCA6IGZsb2F0CiAgICAgICAgdGltZSB2YWx1ZSBhdCB3aGljaCB0byBzbGljZQogICAgdF9pbmRleCA6IGludAogICAgICAgIHRpbWUgaW5kZXggYXQgd2hpY2ggdG8gc2xpY2UKICAgIGlzX2RlZyA6IGJvb2wKICAgICAgICBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGFuZ2xlIG11c3QgYmUgY29udmVydGVkIHRvIGRlZ3JlZXMKICAgIGlzX2ZmdCA6IGJvb2wKICAgICAgICBib29sZWFuIGluZGljYXRpbmcgaWYgd2Ugd2FudCB0byBwbG90IHRoZSBzcGFjZS1mZnQgYmVsb3cgdGhlIHBsb3QKICAgIGlzX3NwYWNlb3JkZXIgOiBib29sCiAgICAgICAgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHdlIHdhbnQgdG8gdXNlIHRoZSBzcGF0aWFsIG9yZGVyIGZvciB0aGUgZmZ0IGF4aXMKICAgIHJfbWF4IDogaW50CiAgICAgICAgbWF4aW11bSB2YWx1ZSBvZiB0aGUgd2F2ZW51bWJlciBmb3IgdGhlIGZmdCBheGlzCiAgICBmdW5kX2hhcm0gOiBmbG9hdAogICAgICAgIGZyZXF1ZW5jeSBvZiB0aGUgZnVuZGFtZW50YWwgaGFybW9uaWMKICAgIGlzX25vcm0gOiBib29sCiAgICAgICAgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBmaWVsZCBtdXN0IGJlIG5vcm1hbGl6ZWQKICAgIHVuaXQgOiBzdHIKICAgICAgICB1bml0IGluIHdoaWNoIHRvIHBsb3QgdGhlIGZpZWxkCiAgICBkYXRhX2xpc3QgOiBsaXN0CiAgICAgICAgbGlzdCBvZiBEYXRhIG9iamVjdHMgdG8gY29tcGFyZQogICAgbGVnZW5kX2xpc3QgOiBsaXN0CiAgICAgICAgbGlzdCBvZiBsZWdlbmRzIHRvIHVzZSBmb3IgZWFjaCBEYXRhIG9iamVjdCAoaW5jbHVkaW5nIHJlZmVyZW5jZSBvbmUpIGluc3RlYWQgb2YgZGF0YS5uYW1lCiAgICBjb2xvcl9saXN0IDogbGlzdAogICAgICAgIGxpc3Qgb2YgY29sb3JzIHRvIHVzZSBmb3IgZWFjaCBEYXRhIG9iamVjdAogICAgc2F2ZV9wYXRoIDogc3RyCiAgICAgICAgcGF0aCBhbmQgbmFtZSBvZiB0aGUgcG5nIGZpbGUgdG8gc2F2ZQogICAgeV9taW4gOiBmbG9hdAogICAgICAgIG1pbmltdW0gdmFsdWUgZm9yIHRoZSB5LWF4aXMKICAgIHlfbWF4IDogZmxvYXQKICAgICAgICBtYXhpbXVtIHZhbHVlIGZvciB0aGUgeS1heGlzCiAgICBtYWdfbWF4IDogZmxvYXQKICAgICAgICBtYXhpbXVtIGFsdWUgZm9yIHRoZSB5LWF4aXMgb2YgdGhlIGZmdAogICAgaXNfYXV0b190aWNrcyA6IGJvb2wKICAgICAgICBpbiBmZnQsIGFkanVzdCB0aWNrcyB0byB3YXZlbnVtYmVycyAoZGVhY3RpdmF0ZSBpZiB0b28gY2xvc2UpCiAgICBmaWcgOiBNYXRwbG90bGliLmZpZ3VyZS5GaWd1cmUKICAgICAgICBleGlzdGluZyBmaWd1cmUgdG8gdXNlIGlmIE5vbmUgY3JlYXRlIGEgbmV3IG9uZQogICAgIiIiCgogICAgIyBHZXQgRGF0YSBvYmplY3QgbmFtZXMKICAgIHBoeXMgPSBnZXRhdHRyKHNlbGYsIERhdGFfc3RyLnNwbGl0KCIuIilbMF0pCiAgICBkYXRhID0gZ2V0YXR0cihwaHlzLCBEYXRhX3N0ci5zcGxpdCgiLiIpWzFdKQoKICAgICMgQ2FsbCB0aGUgcGxvdCBmdW5jdGlvbgogICAgcGxvdF9BX3NwYWNlX2ZjdCgKICAgICAgICBkYXRhLAogICAgICAgIGluZGV4X2xpc3Q9aW5kZXhfbGlzdCwKICAgICAgICB0PXQsCiAgICAgICAgdF9pbmRleD10X2luZGV4LAogICAgICAgIGlzX2RlZz1pc19kZWcsCiAgICAgICAgaXNfZmZ0PWlzX2ZmdCwKICAgICAgICBpc19zcGFjZW9yZGVyPWlzX3NwYWNlb3JkZXIsCiAgICAgICAgcl9tYXg9cl9tYXgsCiAgICAgICAgZnVuZF9oYXJtPWZ1bmRfaGFybSwKICAgICAgICBpc19ub3JtPWlzX25vcm0sCiAgICAgICAgdW5pdD11bml0LAogICAgICAgIGRhdGFfbGlzdD1kYXRhX2xpc3QsCiAgICAgICAgbGVnZW5kX2xpc3Q9bGVnZW5kX2xpc3QsCiAgICAgICAgY29sb3JfbGlzdD1jb2xvcl9saXN0LAogICAgICAgIHNhdmVfcGF0aD1zYXZlX3BhdGgsCiAgICAgICAgeV9taW49eV9taW4sCiAgICAgICAgeV9tYXg9eV9tYXgsCiAgICAgICAgbWFnX21heD1tYWdfbWF4LAogICAgICAgIGlzX2F1dG9fdGlja3M9aXNfYXV0b190aWNrcywKICAgICAgICBmaWc9ZmlnLAogICAgKQo8fGZpbV9zdWZmaXh8PgogICAgaXNfZmZ0PUZhbHNlLAogICAgaXNfc3BhY2VvcmRlcj1GYWxzZSwKICAgIHJfbWF4PTEwMCwKICAgIGZ1bmRfaGFybT1Ob25lLAo8fGZpbV9lbmR8Pg=="]
["9fe29852651c2ffd12eeb7d382afb30ec810538f-1","9fe29852651c2ffd12eeb7d382afb30ec810538f","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSwyMDEzIFR1cmJ1bGVueiBMaW1pdGVkCjx8ZmltX2VuZHw+"]
["c6aaa77fec09a9a0ec2cc569896f995d6237b816-1","c6aaa77fec09a9a0ec2cc569896f995d6237b816","PHxmaW1fcHJlZml4fD4KZnJvbSBwcm9maWxlaG9va3MgaW1wb3J0IHByb2ZpbGUKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgZGF0ZXRpbWUKZnJvbSBwdWxsX2RhdGFjYiBpbXBvcnQgZ2V0Q0JIaXN0b3J5CgpjbGFzcyBNYXhNaW46CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRmOiBwZC5EYXRhRnJhbWUsIHBlcmlvZDogaW50KToKICAgICAgICBzZWxmLnBlcmlvZCA9IHBlcmlvZAogICAgICAgIHNlbGYuZGYgICAgID0gZGYKCiAgICBkZWYgdXBkYXRlX2NlcnQoc2VsZiwgY2VydCwgaW5kZXgsIGRmKToKICAgICAgICAjVE9ETzogSW1wbGVtZW50IGl0dGVydG9vbCBtb2R1bGUKICAgICAgICAjIENyZWF0ZSBjZXJ0aWZ5aW5nIGNhbmRsZQogICAgICAgICMgY291bnQgbnVtYmVyIG9mIG51bGwgdmFsdWVzIHRvIHNlZSBpZiBpcyBmaXJzdCByb3cKICAgICAgICAjIHByaW50KGluZGV4KQogICAgICAgIG51bGxfY291bnQgPSAwCiAgICAgICAgZm9yIHZhbHVlIGluIGNlcnQudmFsdWVzKCk6CiAgICAgICAgICAgIGlmIHZhbHVlID09IE5vbmU6CiAgICAgICAgICAgICAgICBudWxsX2NvdW50ICs9IDEKICAgICAgICAKICAgICAgICAjIHVwZGF0ZSBwcmV2IGRpY3Rpb25hcnkgaWYgYWxsIG51bGwgdmFsdWVzCiAgICAgICAgIyBpZiBmaXJzdCByb3cgaXQgd2lsbCB1cGRhdGUgd2l0aCB0aG9zZSB2YWx1ZXMKICAgICAgICBpZiBudWxsX2NvdW50ID09IDU6CiAgICAgICAgICAgIGNlcnRbJ3QnXSA9IGluZGV4CiAgICAgICAgICAgIGNlcnRbJ28nXSA9IGZsb2F0KGRmLmxvY1tpbmRleF1bJ09wZW4nXSkKICAgICAgICAgICAgY2VydFsnYyddID0gZmxvYXQoZGYubG9jW2luZGV4XVsnQ2xvc2UnXSkKICAgICAgICAgICAgY2VydFsnaCddID0gZmxvYXQoZGYubG9jW2luZGV4XVsnSGlnaCddKQogICAgICAgICAgICBjZXJ0WydsJ10gPSBmbG9hdChkZi5sb2NbaW5kZXhdWydMb3cnXSkKICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiBjZXJ0CiAgICAgICAgCiAgICAgICAgIyB1cGRhdGUgcHJldiB3aXRoIG5ldyBwcmV2IHZhbHVlcyAobmV3IHByZXYgaXMgb2xkIGN1cnIpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgaW5kZXggKyBkYXRldGltZS50aW1lZGVsdGEoc2Vjb25kcz1zZWxmLnBlcmlvZCk6CiAgICAgICAgICAgICAgICBjZXJ0Wyd0J10gPSAoaW5kZXgpCiAgICAgICAgICAgICAgICBjZXJ0WydvJ10gPSBmbG9hdChkZi5sb2NbaW5kZXhdWydPcGVuJ10pCiAgICAgICAgICAgICAgICBjZXJ0WydjJ10gPSBmbG9hdChkZi5sb2NbaW5kZXhdWydDbG9zZSddKQogICAgICAgICAgICAgICAgY2VydFsnaCddID0gZmxvYXQoZGYubG9jW2luZGV4XVsnSGlnaCddKQogICAgICAgICAgICAgICAgY2VydFsnbCddID0gZmxvYXQoZGYubG9jW2luZGV4XVsnTG93J10pCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgcmV0dXJuIGNlcnQKCgogICAgZGVmIHVwZGF0ZV9jdXJyKHNlbGYsIGN1cnIsIGluZGV4LCBkZik6CiAgICAgICAgIyBmb3JtYXQgZGF0ZXRpbWUgaW5kZXgKICAgICAgICAjIHByaW50KGluZGV4KQogICAgICAgIGR0X29iamVjdCA9IChpbmRleCAtIGRhdGV0aW1lLnRpbWVkZWx0YShzZWNvbmRzPXNlbGYucGVyaW9kKSkudG9fZGF0ZXRpbWU2NCgpCiAgICAgICAgCiAgICAgICAgaWYgKGRmLmluZGV4ID09IGR0X29iamVjdCkuYW55KCk6CiAgICAgICAgICAgIGluZGV4IC09IGRhdGV0aW1lLnRpbWVkZWx0YShzZWNvbmRzPXNlbGYucGVyaW9kKQogICAgICAgICAgICBjdXJyWyd0J10gPSAoaW5kZXgpCiAgICAgICAgICAgIGN1cnJbJ28nXSA9IGZsb2F0KGRmLmxvY1tpbmRleF1bJ09wZW4nXSkKICAgICAgICAgICAgY3VyclsnYyddID0gZmxvYXQoZGYubG9jW2luZGV4XVsnQ2xvc2UnXSkKICAgICAgICAgICAgY3VyclsnaCddID0gZmxvYXQoZGYubG9jW2luZGV4XVsnSGlnaCddKQogICAgICAgICAgICBjdXJyWydsJ10gPSBmbG9hdChkZi5sb2NbaW5kZXhdWydMb3cnXSkKICAgICAgICAgICAgCiAgICAgICAgICAgICMgcmV0dXJuIHRoZSBjdXJyZW50IGNhbmRsZSBkaWN0aW9uYXJ5CiAgICAgICAgICAgIHJldHVybiBjdXJyCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcGFzcwoKCiAgICBkZWYgdXBkYXRlX3ByZXYoc2VsZiwgcHJldiwgaW5kZXgsIGRmKToKICAgICAgICAjIHByaW50KGluZGV4KQogICAgICAgIGR0X29iamVjdCA9IChpbmRleCAtIGRhdGV0aW1lLnRpbWVkZWx0YShzZWNvbmRzPTIqc2VsZi5wZXJpb2QpKS50b19kYXRldGltZTY0KCkKCiAgICAgICAgaWYgKGRmLmluZGV4ID09IGR0X29iamVjdCkuYW55KCk6CiAgICAgICAgICAgIGluZGV4IC09IGRhdGV0aW1lLnRpbWVkZWx0YShzZWNvbmRzPTIqc2VsZi5wZXJpb2QpCiAgICAgICAgICAgIHByZXZbJ3QnXSA9IChpbmRleCkKICAgICAgICAgICAgcHJldlsnbyddID0gZmxvYXQoZGYubG9jW2luZGV4XVsnT3BlbiddKQogICAgICAgICAgICBwcmV2WydjJ10gPSBmbG9hdChkZi5sb2NbaW5kZXhdWydDbG9zZSddKQogICAgICAgICAgICBwcmV2WydoJ10gPSBmbG9hdChkZi5sb2NbaW5kZXhdWydIaWdoJ10pCiAgICAgICAgICAgIHByZXZbJ2wnXSA9IGZsb2F0KGRmLmxvY1tpbmRleF1bJ0xvdyddKQogICAgICAgICAgICAKICAgICAgICAgICAgIyByZXR1cm4gdGhlIHByZXZpb3VzIGNhbmRsZSBkaWN0aW9uYXJ5CiAgICAgICAgICAgIHJldHVybiBwcmV2CiAgICAgICAgZWxzZToKICAgICAgICAgICAgcGFzcwoKCiAgICBkZWYgZmluZF9tYXgoc2VsZiwgY2VydF9jYW5kbGUsIGN1cnJfY2FuZGxlLCBwcmV2X2NhbmRsZSk6CiAgICAgICAgIyBnZXQgbG9jYWwgbWF4CiAgICAgICAgbWF4X2RpY3QgPSB7fQogICAgICAgIGlmIGN1cnJfY2FuZGxlIGFuZCBwcmV2X2NhbmRsZTogICAgICAgCiAgICAgICAgICAgIGlmIChjdXJyX2NhbmRsZVsnYyddID4gY2VydF9jYW5kbGVbJ2MnXSkgJiAoY3Vycl9jYW5kbGVbJ2MnXSA+IHByZXZfY2FuZGxlWydjJ10pOgogICAgICAgICAgICAgICAgbWF4X2RpY3QgPSBjdXJyX2NhbmRsZQogICAgICAgICAgICAgICAgcmV0dXJuIG1heF9kaWN0CiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQoKCiAgICBkZWYgZmluZF9taW4oc2VsZiwgY2VydF9jYW5kbGUsIGN1cnJfY2FuZGxlLCBwcmV2X2NhbmRsZSk6ICAgCiAgICAgICAgIyBnZXQgbG9jYWwgbWluCiAgICAgICAgbWluX2RpY3QgPSB7fQogICAgICAgIGlmIGN1cnJfY2FuZGxlIGFuZCBwcmV2X2NhbmRsZToKICAgICAgICAgICAgaWYgKGN1cnJfY2FuZGxlWydjJ10gPCBjZXJ0X2NhbmRsZVsnYyddKSAmIChjdXJyX2NhbmRsZVsnYyddIDwgcHJldl9jYW5kbGVbJ2MnXSk6CiAgICAgICAgICAgICAgICBtaW5fZGljdCA9IGN1cnJfY2FuZGxlCiAgICAgICAgICAgICAgICByZXR1cm4gbWluX2RpY3QKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJldHVybiBOb25lCgoKICAgIGRlZiBjcmVhdGVfZGF0YWZyYW1lKHNlbGYsIGRmKToKICAgICAgICAiIiIKICAgICAgICBDcmVhdGUgRGF0YUZyYW1lIHdpdGggbG9jYWwgbWluaW11bXMgYW5kIG1heGltdW1zIHRvIGNyZWF0ZSBzaWduYWxzIGZvciBkb3VibGUgYm90dG9tIGNyZWF0aW9uCiAgICAgICAgQWNjZXB0cyBEYXRhRnJhbWVzIHdpdGggY29sdW1ucyBmb3JtYXR0ZWQgYXMgJ09wZW4nLCAnQ2xvc2UnLCAnSGlnaCcsICdMb3cnLgogICAgICAgIE1vcmUgY29sdW1ucyBjYW4gYmUgYWRkZWQuCjx8ZmltX2hvbGV8PgogICAgICAgICAgICAndCcgOiBOb25lLAogICAgICAgICAgICAnbycgOiBOb25lLAogICAgICAgICAgICAnYycgOiBOb25lLAogICAgICAgICAgICAnaCcgOiBOb25lLAogICAgICAgICAgICAnbCcgOiBOb25lICAgCiAgICAgICAgfQoKICAgICAgICAjIHN0b3JlIGN1cnJlbnQgY2FuZGxlCiAgICAgICAgY3VyciA9IHsKICAgICAgICAgICAgJ3QnIDogTm9uZSwKICAgICAgICAgICAgJ28nIDogTm9uZSwKICAgICAgICAgICAgJ2MnIDogTm9uZSwKICAgICAgICAgICAgJ2gnIDogTm9uZSwKICAgICAgICAgICAgJ2wnIDogTm9uZSAKICAgICAgICB9CgogICAgICAgICMgc3RvcmUgY2VydGlmeWluZyBjYW5kbGUgKGNlcnRpZmllcyBpZiB0aGUgbWF4L21pbiBpcyBjcmVhdGVkKQogICAgICAgIGNlcnQgPSB7CiAgICAgICAgICAgICd0JyA6IE5vbmUsCiAgICAgICAgICAgICdvJyA6IE5vbmUsCiAgICAgICAgICAgICdjJyA6IE5vbmUsCiAgICAgICAgICAgICdoJyA6IE5vbmUsCiAgICAgICAgICAgICdsJyA6IE5vbmUgCiAgICAgICAgfQoKICAgICAgICAjIEluaXQgbGlzdHMgZm9yIG1heCBhbmQgbWluIGV2ZW50cwogICAgICAgIG1heF8gPSBbXQogICAgICAgIG1pbl8gPSBbXQoKICAgICAgICAjIEl0ZXJyYXRlIHRocm91Z2ggZGF0YWZyYW1lcyBpbmRleGVzCiAgICAgICAgZm9yIGluZGV4LCByb3cgaW4gZGYuaXRlcnJvd3MoKToKICAgICAgICAgICAgIyBpbmRleCA9IHBkLlRpbWVkZWx0YShpbmRleCkKICAgICAgICAgICAgIyBwcmludChpbmRleCkKICAgICAgICAgICAgY2VydF9jYW5kbGUgPSBzZWxmLnVwZGF0ZV9jZXJ0KGNlcnQsIGluZGV4LCBkZikKICAgICAgICAgICAgY3Vycl9jYW5kbGUgPSBzZWxmLnVwZGF0ZV9jdXJyKGN1cnIsIGluZGV4LCBkZikKICAgICAgICAgICAgcHJldl9jYW5kbGUgPSBzZWxmLnVwZGF0ZV9wcmV2KHByZXYsIGluZGV4LCBkZikKICAgICAgICAgICAgCiAgICAgICAgICAgIG14ID0gc2VsZi5maW5kX21heChjZXJ0X2NhbmRsZSwgY3Vycl9jYW5kbGUsIHByZXZfY2FuZGxlKQogICAgICAgICAgICBtbiA9IHNlbGYuZmluZF9taW4oY2VydF9jYW5kbGUsIGN1cnJfY2FuZGxlLCBwcmV2X2NhbmRsZSkKCiAgICAgICAgICAgICMgbWF4IHN0b3JlcyBjbG9zZSBhbmQgaGlnaAogICAgICAgICAgICAjIG1pbiBzdG9yZXMgY2xvc2UgYW5kIGxvdwogICAgICAgICAgICBpZiBteCA9PSBOb25lOgogICAgICAgICAgICAgICAgbWF4Xy5hcHBlbmQoMCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIG1heF8uYXBwZW5kKDEpCgogICAgICAgICAgICBpZiBtbiA9PSBOb25lOgogICAgICAgICAgICAgICAgbWluXy5hcHBlbmQoMCkgICAgICAKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIG1pbl8uYXBwZW5kKDEpCgogICAgICAgICMgQWRkaW5nIG1pbi9tYXggZXZlbnRzIHRvIG9yaWdpbmFsIGRhdGFmcmFtZSB0aGVuIGNyZWF0aW5nIGEgY29weSB3aXRoIGNvbHVtbnMgZm9yIGRvdWJsZSBib3R0b20gZXZlbnRzCiAgICAgICAgbWF4X21pbl9kZiA9IHBkLkRhdGFGcmFtZSh7J01heCc6IG1heF8sICdNaW4nOiBtaW5ffSkKICAgICAgICBtYXhfbWluX2RmID0gbWF4X21pbl9kZltbJ01heCcsICdNaW4nXV0uc2hpZnQoLTEpCiAgICAgICAgbWF4X21pbl9kZlsnRGF0ZSddID0gZGYuaW5kZXgKICAgICAgICBtYXhfbWluX2RmLnNldF9pbmRleCgnRGF0ZScsIGlucGxhY2U9VHJ1ZSkKICAgICAgICBkZl9mZWF0dXJlcyA9IHBkLmNvbmNhdChbZGYsIG1heF9taW5fZGZdLCBheGlzPTEpCiAgICAgICAgCiAgICAgICAgcmV0dXJuIGRmX2ZlYXR1cmVzCgogICAgCiAgICBkZWYgb3V0cHV0KHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmNyZWF0ZV9kYXRhZnJhbWUoc2VsZi5kZikKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbWluICAgICAgICA9IDYwCiAgICBmaXZlX21pbiAgID0gMzAwCiAgICBmaWZ0ZW5fbWluID0gOTAwCiAgICBob3VyICAgICAgID0gMzYwMAogICAgZm91cl9ob3VyICA9IDIxNjAwCiAgICBkYXkgICAgICAgID0gODY0MDAKCiAgICBkZWYgZ2V0X21heG1pbihzeW1ib2wsIHBlcmlvZCwgY3ljbGVzKToKCiAgICAgICAgZGYgICAgICA9IGdldENCSGlzdG9yeShzeW1ib2wsIHBlcmlvZCwgY3ljbGVzPWN5Y2xlcykKICAgICAgICBtYXhfbWluID0gTWF4TWluKGRmLCBwZXJpb2QpCiAgICAgICAgcmV0dXJuIG1heF9taW4ub3V0cHV0KCkKCgogICAgZGF0YWZyYW1lID0gZ2V0X21heG1pbignQlRDJywgbWluLCAyKQoKICAgICMgbWluaW11bXMgPSBkYXRhZnJhbWUubG9jW2RhdGFmcmFtZVsnTWluJ10gPT0gMV0KICAgIHByaW50KGRhdGFmcmFtZSkKPHxmaW1fc3VmZml4fD4KICAgICAgICAiIiIKICAgICAgICAKICAgICAgICAjICMgc3RvcmUgcHJldmlvdXMgY2FuZGxlCiAgICAgICAgcHJldiA9IHsKPHxmaW1fZW5kfD4="]
["bb85ecd255c3fe634532f04d4cbedac702100c3b-2","bb85ecd255c3fe634532f04d4cbedac702100c3b","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmltcG9ydCB0a2ludGVyIGFzIHRrCmZyb20gdGtpbnRlciBpbXBvcnQgdHRrCgppbXBvcnQgdHJhbnNmb3JtYXRpb24KZnJvbSB1dGlsIGltcG9ydCAqCmZyb20gaTE4biBpbXBvcnQgaTE4bgoKZGVmIGRpc3BsYXlfc3RkX2Rldih2KToKICAgIHJldHVybiAnJS4xZicgJSAodikKCmNsYXNzIEdhdXNzaWFuRmlsdGVyRGlhbG9nOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCk6CiAgICAgICAgc2VsZi5pbml0X3N0YXRlKHBhcmVudCkKICAgICAgICBzZWxmLmluaXRfd2luZG93KCkKICAgICAgICBzZWxmLmluaXRfY29vcmRzKCkKICAgICAgICBzZWxmLmluaXRfd2lkZ2V0cygpCiAgICAgICAgc2VsZi51cGRhdGVfaW1hZ2Vfc2hvdygpCgogICAgZGVmIGluaXRfc3RhdGUoc2VsZiwgcGFyZW50KToKICAgICAgICBzZWxmLnBhcmVudCA9IHBhcmVudAogICAgICAgIHNlbGYub2xkX2ltID0gcGFyZW50LmltCjx8ZmltX2hvbGV8PgogICAgZGVmIGluaXRfd2luZG93KHNlbGYpOgogICAgICAgIHNlbGYud2luZG93ID0gdGsuVG9wbGV2ZWwoc2VsZi5wYXJlbnQud2luZG93KQogICAgICAgIHNlbGYud2luZG93LnRpdGxlKGkxOG5bJ2dhdXNzaWFuJ10pCiAgICAgICAgc2VsZi53aW5kb3cuZ2VvbWV0cnkoJzM0MHgxNTAnKQogICAgICAgIHNlbGYud2luZG93LnJlc2l6YWJsZShGYWxzZSwgRmFsc2UpCiAgICAgICAgc2VsZi53aW5kb3cucHJvdG9jb2woIldNX0RFTEVURV9XSU5ET1ciLCBzZWxmLm9uX2NhbmNlbCkKICAgICAgICBzZWxmLndpbmRvdy5iaW5kKCc8RXNjYXBlPicsIHNlbGYub25fY2FuY2VsKQogICAgICAgIGNlbnRlcl93aW5kb3coc2VsZi53aW5kb3cpCiAgICAgICAgc2VsZi53aW5kb3cuZ3JhYl9zZXQoKQoKICAgIGRlZiBpbml0X2Nvb3JkcyhzZWxmKToKICAgICAgICBzZWxmLngxID0gMTAKICAgICAgICBzZWxmLngyID0gODAKICAgICAgICBzZWxmLngzID0gMjg1CiAgICAgICAgc2VsZi5ib3R0b21feDEgPSA3NwogICAgICAgIHNlbGYuYm90dG9tX3gyID0gMTc3CiAgICAgICAgc2VsZi55ZCA9IDMwCiAgICAgICAgc2VsZi55MSA9IDIwCiAgICAgICAgc2VsZi55MiA9IHNlbGYueTEgKyBzZWxmLnlkCiAgICAgICAgc2VsZi5ib3R0b21feSA9IDEwMAogICAgICAgIHNlbGYudzEgPSAyMDAKICAgICAgICBzZWxmLncyID0gNQoKICAgIGRlZiBpbml0X3dpZGdldHMoc2VsZik6CiAgICAgICAgc2VsZi5rd19sYWJlbCA9IHR0ay5MYWJlbChzZWxmLndpbmRvdywgdGV4dCA9IGkxOG5bJ2tlcm5lbF93aWR0aCddKQogICAgICAgIHNlbGYua3dfbGFiZWwucGxhY2UoeCA9IHNlbGYueDEsIHkgPSBzZWxmLnkxKQogICAgICAgIHNlbGYua3dfc2NhbGVfdmFyID0gdGsuSW50VmFyKCkKICAgICAgICBzZWxmLmt3X3NjYWxlX3Zhci5zZXQoc2VsZi5rdykKICAgICAgICBzZWxmLmt3X3NjYWxlID0gdHRrLlNjYWxlKHNlbGYud2luZG93LCBmcm9tXyA9IDAsIHRvID0gNSwgbGVuZ3RoID0gc2VsZi53MSwgdmFyaWFibGUgPSBzZWxmLmt3X3NjYWxlX3ZhciwKICAgICAgICAgICAgY29tbWFuZCA9IHNlbGYub25fa3dfc2NhbGVfY2hhbmdlKQogICAgICAgIHNlbGYua3dfc2NhbGUucGxhY2UoeCA9IHNlbGYueDIsIHkgPSBzZWxmLnkxKQogICAgICAgIHNlbGYua3dfZW50cnlfdmFyID0gdGsuU3RyaW5nVmFyKCkKICAgICAgICBzZWxmLmt3X2VudHJ5X3Zhci5zZXQoc3RyKHNlbGYua3cpKQogICAgICAgIHNlbGYua3dfZW50cnkgPSB0dGsuRW50cnkoc2VsZi53aW5kb3csIHdpZHRoID0gc2VsZi53MiwgdGV4dHZhcmlhYmxlID0gc2VsZi5rd19lbnRyeV92YXIpCiAgICAgICAgc2VsZi5rd19lbnRyeS5iaW5kKCc8UmV0dXJuPicsIHNlbGYub25fa3dfZW50cnlfY2hhbmdlKQogICAgICAgIHNlbGYua3dfZW50cnkucGxhY2UoeCA9IHNlbGYueDMsIHkgPSBzZWxmLnkxKQoKICAgICAgICBzZWxmLnN0ZF9kZXZfbGFiZWwgPSB0dGsuTGFiZWwoc2VsZi53aW5kb3csIHRleHQgPSBpMThuWydzdGRfZGV2J10pCiAgICAgICAgc2VsZi5zdGRfZGV2X2xhYmVsLnBsYWNlKHggPSBzZWxmLngxLCB5ID0gc2VsZi55MikKICAgICAgICBzZWxmLnN0ZF9kZXZfc2NhbGVfdmFyID0gdGsuRG91YmxlVmFyKCkKICAgICAgICBzZWxmLnN0ZF9kZXZfc2NhbGVfdmFyLnNldChzZWxmLnN0ZF9kZXYpCiAgICAgICAgc2VsZi5zdGRfZGV2X3NjYWxlID0gdHRrLlNjYWxlKHNlbGYud2luZG93LCBmcm9tXyA9IC0wLjEsIHRvID0gNSwgbGVuZ3RoID0gc2VsZi53MSwgdmFyaWFibGUgPSBzZWxmLnN0ZF9kZXZfc2NhbGVfdmFyLAogICAgICAgICAgICBjb21tYW5kID0gc2VsZi5vbl9zdGRfZGV2X3NjYWxlX2NoYW5nZSkKICAgICAgICBzZWxmLnN0ZF9kZXZfc2NhbGUucGxhY2UoeCA9IHNlbGYueDIsIHkgPSBzZWxmLnkyKQogICAgICAgIHNlbGYuc3RkX2Rldl9lbnRyeV92YXIgPSB0ay5TdHJpbmdWYXIoKQogICAgICAgIHNlbGYuc3RkX2Rldl9lbnRyeV92YXIuc2V0KGRpc3BsYXlfc3RkX2RldihzZWxmLnN0ZF9kZXYpKQogICAgICAgIHNlbGYuc3RkX2Rldl9lbnRyeSA9IHR0ay5FbnRyeShzZWxmLndpbmRvdywgd2lkdGggPSBzZWxmLncyLCB0ZXh0dmFyaWFibGUgPSBzZWxmLnN0ZF9kZXZfZW50cnlfdmFyKQogICAgICAgIHNlbGYuc3RkX2Rldl9lbnRyeS5iaW5kKCc8UmV0dXJuPicsIHNlbGYub25fc3RkX2Rldl9lbnRyeV9jaGFuZ2UpCiAgICAgICAgc2VsZi5zdGRfZGV2X2VudHJ5LnBsYWNlKHggPSBzZWxmLngzLCB5ID0gc2VsZi55MikKCiAgICAgICAgc2VsZi5hcHBseV9idXR0b24gPSB0dGsuQnV0dG9uKHNlbGYud2luZG93LCB0ZXh0ID0gaTE4blsnYXBwbHknXSwgY29tbWFuZCA9IHNlbGYub25fYXBwbHkpCiAgICAgICAgc2VsZi5hcHBseV9idXR0b24ucGxhY2UoeCA9IHNlbGYuYm90dG9tX3gxLCB5ID0gc2VsZi5ib3R0b21feSkKCiAgICAgICAgc2VsZi5jYW5jZWxfYnV0dG9uID0gdHRrLkJ1dHRvbihzZWxmLndpbmRvdywgdGV4dCA9IGkxOG5bJ2NhbmNlbCddLCBjb21tYW5kID0gc2VsZi5vbl9jYW5jZWwpCiAgICAgICAgc2VsZi5jYW5jZWxfYnV0dG9uLnBsYWNlKHggPSBzZWxmLmJvdHRvbV94MiwgeSA9IHNlbGYuYm90dG9tX3kpCgogICAgZGVmIHVwZGF0ZV9pbWFnZV9zaG93KHNlbGYpOgogICAgICAgIHNlbGYucGFyZW50LmltID0gdHJhbnNmb3JtYXRpb24uZ2F1c3NpYW5fZmlsdGVyKHNlbGYub2xkX2ltLCBzZWxmLmt3LCBzZWxmLnN0ZF9kZXYpCgogICAgZGVmIG9uX2t3X2VudHJ5X2NoYW5nZShzZWxmLCBldmVudCA9IE5vbmUpOgogICAgICAgIHRyeToKICAgICAgICAgICAgbmsgPSBpbnQoc2VsZi5rd19lbnRyeV92YXIuZ2V0KCkpCiAgICAgICAgICAgIGFzc2VydCBuayA+PSAwIGFuZCBuayA8PSA1CiAgICAgICAgICAgIHNlbGYua3cgPSBuawogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcGFzcwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYua3dfc2NhbGVfdmFyLnNldChzZWxmLmt3KQogICAgICAgICAgICBzZWxmLnVwZGF0ZV9pbWFnZV9zaG93KCkKICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICBzZWxmLmt3X2VudHJ5X3Zhci5zZXQoc3RyKHNlbGYua3cpKQoKICAgIGRlZiBvbl9rd19zY2FsZV9jaGFuZ2Uoc2VsZiwgZXZlbnQgPSBOb25lKToKICAgICAgICBzZWxmLmt3ID0gc2VsZi5rd19zY2FsZV92YXIuZ2V0KCkKICAgICAgICBzZWxmLmt3X2VudHJ5X3Zhci5zZXQoc3RyKHNlbGYua3cpKQogICAgICAgIHNlbGYudXBkYXRlX2ltYWdlX3Nob3coKQoKICAgIGRlZiBvbl9zdGRfZGV2X2VudHJ5X2NoYW5nZShzZWxmLCBldmVudCA9IE5vbmUpOgogICAgICAgIHRyeToKICAgICAgICAgICAgbnMgPSBmbG9hdChzZWxmLnN0ZF9kZXZfZW50cnlfdmFyLmdldCgpKQogICAgICAgICAgICBhc3NlcnQgbnMgPj0gMC4xIGFuZCBucyA8PSA1CiAgICAgICAgICAgIHNlbGYuc3RkX2RldiA9IG5zCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICBwYXNzCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5zdGRfZGV2X3NjYWxlX3Zhci5zZXQoc2VsZi5zdGRfZGV2KQogICAgICAgICAgICBzZWxmLnVwZGF0ZV9pbWFnZV9zaG93KCkKICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICBzZWxmLnN0ZF9kZXZfZW50cnlfdmFyLnNldChkaXNwbGF5X3N0ZF9kZXYoc2VsZi5zdGRfZGV2KSkKCiAgICBkZWYgb25fc3RkX2Rldl9zY2FsZV9jaGFuZ2Uoc2VsZiwgZXZlbnQgPSBOb25lKToKICAgICAgICBzZWxmLnN0ZF9kZXYgPSBzZWxmLnN0ZF9kZXZfc2NhbGVfdmFyLmdldCgpCiAgICAgICAgc2VsZi5zdGRfZGV2X2VudHJ5X3Zhci5zZXQoZGlzcGxheV9zdGRfZGV2KHNlbGYuc3RkX2RldikpCiAgICAgICAgc2VsZi51cGRhdGVfaW1hZ2Vfc2hvdygpCgogICAgZGVmIG9uX2FwcGx5KHNlbGYsIGV2ZW50ID0gTm9uZSk6CiAgICAgICAgc2VsZi5hcHBseSA9IFRydWUKICAgICAgICBzZWxmLndpbmRvdy5xdWl0KCkKICAgICAgICBzZWxmLndpbmRvdy5kZXN0cm95KCkKCiAgICBkZWYgb25fY2FuY2VsKHNlbGYsIGV2ZW50ID0gTm9uZSk6CiAgICAgICAgc2VsZi5hcHBseSA9IEZhbHNlCiAgICAgICAgc2VsZi53aW5kb3cucXVpdCgpCiAgICAgICAgc2VsZi53aW5kb3cuZGVzdHJveSgpCgogICAgZGVmIF9fY2FsbF9fKHNlbGYpOgogICAgICAgIHNlbGYud2luZG93Lm1haW5sb29wKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmt3ID0gMgogICAgICAgIHNlbGYuc3RkX2RldiA9IDEKICAgICAgICBzZWxmLmFwcGx5ID0gTm9uZQoKPHxmaW1fZW5kfD4="]
["afb6655649380cf670f8b60b3581ab18f95ac511-3","afb6655649380cf670f8b60b3581ab18f95ac511","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGl0ZXJ0b29scwoKaW1wb3J0IG51bXB5IGFzIG5wCgpkZWYgX2NvbmZpZ3VyZV9ncmlkKHZuYW1lLCB2X2dyaWQsIGR2LCB2X3JhbmdlLCBudik6CgogICAgIyBDaGVjayBpbnB1dCBjb25zaXN0ZW5jeQogICAgaWYgdl9ncmlkIGlzIG5vdCBOb25lOgogICAgICAgIGFzc2VydCBkdiBpcyBOb25lLCAoZidke3ZuYW1lfSBjYW5ub3QgYmUgZ2l2ZW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZidpZiB7dm5hbWV9X2dyaWQgaXMgcHJvdmlkZWQgJykKICAgICAgICBhc3NlcnQgbnYgaXMgTm9uZSwgKGYnbnt2bmFtZX0gY2Fubm90IGJlIGdpdmVuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYnaWYge3ZuYW1lfV9ncmlkIGlzIHByb3ZpZGVkICcpCiAgICAgICAgYXNzZXJ0IHZfcmFuZ2UgaXMgTm9uZSwgKGYne3ZuYW1lfV9yYW5nZSBjYW5ub3QgYmUgZ2l2ZW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmJ2lmIHt2bmFtZX1fZ3JpZCBpcyBwcm92aWRlZCcpCiAgICAgICAgZGRkID0gbnAuZGlmZih2X2dyaWQpCiAgICAgICAgYXNzZXJ0IG5wLmFsbGNsb3NlKGRkZCxkZGRbMF0pLCAoZid7dm5hbWV9X2dyaWQgbXVzdCBiZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1bmlmaXJtbHkgc3BhY2VkJykKICAgIGVsc2U6CiAgICAgICAgYXNzZXJ0IHZfcmFuZ2UgaXMgbm90IE5vbmUsIChmJ3t2bmFtZX1fZ3JpZCBvciB7dm5hbWV9X3JhbmdlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYnbXVzdCBiZSBwcm92aWRlZCcpCiAgICAgICAgYXNzZXJ0IGxlbih2X3JhbmdlKT09MiwgKGYne3ZuYW1lfV9yYW5nZSBtdXN0IGJlIGluIHRoZSBmb3JtICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZicoe3ZuYW1lfV9taW4sIHt2bmFtZX1fbWF4KScpCiAgICAgICAgaWYgZHYgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIGFzc2VydCBudiBpcyBOb25lLCAoZidue3ZuYW1lfSBjYW5ub3QgYmUgZ2l2ZW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmJ2lmIGR7dm5hbWV9IGlzIHByb3ZpZGVkICcpCiAgICAgICAgICAgIHZfZ3JpZCA9IG5wLmFyYW5nZSh2X3JhbmdlWzBdLCB2X3JhbmdlWzFdKzAuMSpkdiwgZHYpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgYXNzZXJ0IG52IGlzIG5vdCBOb25lLCAoZidue3ZuYW1lfSBtdXN0IGJlIGdpdmVuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZidpZiBke3ZuYW1lfSBpcyBub3QgcHJvdmlkZWQgJykKICAgICAgICAgICAgdl9ncmlkID0gbnAubGluc3BhY2Uodl9yYW5nZVswXSwgdl9yYW5nZVsxXSwgbnYpCgogICAgcmV0dXJuIHZfZ3JpZAoKCmRlZiBnZW5lcmF0ZV8yRF9wb2xhcl9ncmlkKAogICAgICAgIHJfcmFuZ2U9Tm9uZSwgcl9ncmlkPU5vbmUsIGRyPU5vbmUsIG5yPU5vbmUsCiAgICAgICAgdGhldGFfcmFuZ2U9Tm9uZSwgdGhldGFfZ3JpZD1Ob25lLCBkdGhldGE9Tm9uZSwgbnRoZXRhPU5vbmUpOgoKICAgIF9yX2dyaWQgPSBfY29uZmlndXJlX2dyaWQoJ3InLCByX2dyaWQsIGRyLCByX3JhbmdlLCBucikKICAgIF90aGV0YV9ncmlkID0gX2NvbmZpZ3VyZV9ncmlkKCd0aGV0YScsIHRoZXRhX2dyaWQsIGR0aGV0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXRhX3JhbmdlLCBudGhldGEpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICB0ZW1wID0gbnAuYXJyYXkoWyhpaVswXSwgaWlbMV0pIGZvciBpaSBpbgogICAgICAgICAgICAgICAgICAgIGl0ZXJ0b29scy5wcm9kdWN0KF9yX2dyaWQsIF90aGV0YV9ncmlkKV0pCgo8fGZpbV9lbmR8Pg=="]
["af1fda11d9f7b53f62c12ef3c24ebf93783bcd7e-3","af1fda11d9f7b53f62c12ef3c24ebf93783bcd7e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNzdgppbXBvcnQgcmFuZG9tCmltcG9ydCBzdGF0aXN0aWNzCmltcG9ydCBtYXRoCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKCiNHZW5lcmF0ZSB2YXJpYW50cyBiYXNlZCBvbiBmcmVxdWVuY3kgYW5kIGdlbmVyYXRlIHBsb3QgZnJvbSB0aGF0CgojdXNpbmcgYSBwcm9iYWJpbGl0eSwgaWYgcmFuZG9tIG51bWJlciBpcyBsZXNzIHRoYW4sIHRydWUsIGlmIGdyZWF0ZXIgdGhhbiwgZmFsc2UKZGVmIGRlY2lzaW9uKHByb2JhYmlsaXR5KToKICAgIHByb2JhYmxlID0gZmxvYXQocHJvYmFiaWxpdHkpOwogICAgcmFuZE51bSA9IHJhbmRvbS51bmlmb3JtKDAsIDEpOwogICAgCiAgICBpZiByYW5kTnVtIDwgcHJvYmFibGU6CiAgICAgICAgcmV0dXJuIDEKICAgIGVsc2U6CiAgICAgICAgcmFuZE51bSA9IHJhbmRvbS51bmlmb3JtKDAsIDEpOwogICAgICAgIGlmIHJhbmROdW0gPCBwcm9iYWJsZToKICAgICAgICAgICAgcmV0dXJuIDEKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gMAoKI2NhbGN1bGF0ZSB0aGUgZGVjaXNpb25zIGJhc2VkIG9uIGxpc3Qgb2YgZnJlcXVlbmNpZXMgcGFzc2VkIApkZWYgY2FsY3VsYXRvcihsaXN0X29mX2ZyZXEpOgogICAgdmFyaWFudHMgPSAwCiAgICBmb3IgaSBpbiByYW5nZShsZW4obGlzdF9vZl9mcmVxKSk6CiAgICAgICAgaWYoZGVjaXNpb24obGlzdF9vZl9mcmVxW2ldKSA9PSAxKToKICAgICAgICAgICAgdmFyaWFudHMgKz0gMQogICAgcmV0dXJuIHZhcmlhbnRzCgojVXNlZCB0byBsYWJlbCB0aGUgbnVtYmVyIGFib3ZlIGVhY2ggYmFyIGluIHRoZSBjaGFydApkZWYgYXV0b2xhYmVsKHJlY3RzKToKICAgIGZvciByZWN0IGluIHJlY3RzOgogICAgICAgIGhlaWdodCA9IHJlY3QuZ2V0X2hlaWdodCgpCiAgICAgICAgcGx0LnRleHQocmVjdC5nZXRfeCgpK3JlY3QuZ2V0X3dpZHRoKCkvMi4sIDEuMCpoZWlnaHQsICclZCclaW50KGhlaWdodCksCiAgICAgICAgICAgICAgICBoYT0nY2VudGVyJywgdmE9J2JvdHRvbScpCgojcGxvdCB0aGUgbGlzdCBvZiB2YXJpYW50cyByZXN1bHRlZCBmcm9tIGNhbGN1bGF0aW9ucyBhbmQgZ2VuZXJhdGUgaGlzdG9ncmFtCmRlZiBwbG90KGxpc3Rfb2ZfcmVzdWx0cywgcG9zc2libGUsIGNzdl9maWxlLCB2YXJpYW50X3R5cGUgKToKICAgIAogICAgcGxvdF9kYXRhID0gWzBdICogcG9zc2libGUKICAgIGZvciB4IGluIGxpc3Rfb2ZfcmVzdWx0czoKICAgICAgICBwbG90X2RhdGFbeF0gPSBwbG90X2RhdGFbeF0gKyAxCgogICAgcmVjdCA9IHBsdC5iYXIocmFuZ2UobGVuKHBsb3RfZGF0YSkpLCBwbG90X2RhdGEsIGFsaWduPSdjZW50ZXInLCBhbHBoYT0wLjUpCgogICAgcGx0LnlsYWJlbCgnTnVtYmVyIG9mIE9jY3VyYW5jZXMgd2l0aCAxMDAwMCBSdW5zJykKICAgIHBsdC54bGFiZWwoJ051bWJlciBvZiBWYXJpYW50cyBTZWVuJykKICAgIGlmICh2YXJpYW50X3R5cGUgPT0gIjEiKToKICAgICAgICBwbHQudGl0bGUoJ0Rpc3RyaWJ1dGlvbiBvZiAjIG9mIFZhcmlhbnRzIFNlZW4gZm9yICcgKyBzdHIoY3N2X2ZpbGUpICsgJyBHZW5lJykKICAgIGVsaWYgKHZhcmlhbnRfdHlwZSA9PSAiMiIpOgogICAgICAgIHBsdC50aXRsZSgnRGlzdHJpYnV0aW9uIG9mICMgb2YgUmFyZSBWYXJpYW50cyBTZWVuIGZvciAnICsgc3RyKGNzdl9maWxlKSArICcgR2VuZScpCiAgICAgICAgCiAgICBwbHQueHRpY2tzKHJhbmdlKDAsIHBvc3NpYmxlLCAxKSkKICAgIAogICAgYXV0b2xhYmVsKHJlY3QpCiAgICAKICAgIHBsdC5zaG93KCkKCiNDYWxjdWxhdGUgYXZlcmFnZSB2YXJpYW50cywgc3RkZXYsIGZvciByYXJlIHZhcmlhbnRzIGFuZCB2YXJpYW50cwpkZWYgYXZlcmFnZV92YXJpYW50cyhzdGFydCwgZW5kLCByYWNlLCBjc3ZfZmlsZSk6CiAgICB3aXRoIG9wZW4oY3N2X2ZpbGUsJ3J0JykgYXMgZmlsZToKICAgICAgICByZWFkZXIgPSBjc3YucmVhZGVyKGZpbGUpCiAgICAgICAgbXlfbGlzdCA9IFtdCiAgICAgICAgZmlyc3RMaW5lID0gVHJ1ZQoKICAgICAgICAjRm9yIGVhY2ggcm93LCBhZGQgdGhlIGluZm9ybWF0aW9uIHdlIHdpbGwgYmUgdXNpbmcsIHNvcnJ5IGZvciBoYXJkIGNvZGVkIG51bWJlcnMgaGVyZQogICAgICAgIGZvciByb3cgaW4gcmVhZGVyOgogICAgICAgICAgICBpZiBmaXJzdExpbmU6CiAgICAgICAgICAgICAgICBwcmludCgiWW91IGFyZSBsb29raW5nIGF0Iiwgcm93WzMgKiBpbnQocmFjZSkgKyAxMiBdLHJvd1szICogaW50KHJhY2UpICsgMTMgXSkKICAgICAgICAgICAgICAgIGZpcnN0TGluZSA9IEZhbHNlCiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAjVGhpcyBjYWxjdWxhdGVzIHdoaWNoIGNvbHVtbiBmb3IgZWFjaCByYWNlCiAgICAgICAgICAgIHBvc2l0aW9uID0gKDMgKiBpbnQocmFjZSkpICsgMTEgCiAgICAgICAgICAgIG15X2xpc3QuYXBwZW5kKFtyb3dbMV0sIHJvd1s5XSwgcm93W3Bvc2l0aW9uXSwgcm93W3Bvc2l0aW9uKzFdLCByb3dbcG9zaXRpb24rMl0sIHJvd1twb3NpdGlvbiszXV0pCgogICAgaW5fcmFuZ2UgPSBGYWxzZQogICAgZnJlcXVlbmN5X2xpc3QgPSBbXQogICAgbnVtX2ludHJvbnMgPSAwCgogICAgI2dlbmVyYXRlIGZyZXF1ZW5jaWVzIGZyb20gYWxsZWxlIG51bWJlciBhbmQgdmFyaWFudHMgY291bnRlZAogICAgZm9yIHJvdyBpbiBteV9saXN0OgogICAgICAgICNzdGFydCBhZGRpbmcgd2hlbiBpbiByYW5nZSwgb3IgaWYgLTcgdGhlbiBtZWFucyBsb29rIGF0IGVudGlyZSBnZW5lCiAgICAgICAgaWYgKHJvd1swXSA9PSBzdGFydCBvciBzdGFydD09LTcpOgogICAgICAgICAgICBpbl9yYW5nZSA9IFRydWUKCiAgICAgICAgI1RoaXMgcGFydCB3aWxsIHNraXAgb3ZlciBpbnRyb25pYyBhbmQgZXhvbmljIHBhcnRzIHdlIHdpbGwgbm90IGxvb2sgYXQKICAgICAgICBpZihyb3dbMV09PSI1XCcgVVRSIiBvciByb3dbMV09PSJpbnRyb24iIG9yIHJvd1sxXT09IjNcJyBVVFIiKToKICAgICAgICAgICAgbnVtX2ludHJvbnMgKz0gMQogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGlmKHJvd1sxXT09InVwc3RyZWFtIGdlbmUiIG9yIHJvd1sxXT09ImRvd25zdHJlYW0gZ2VuZSIgb3Igcm93WzFdPT0ibm9uIGNvZGluZyB0cmFuc2NyaXB0IGV4b24iKToKICAgICAgICAgICAgbnVtX2ludHJvbnMgKz0gMQogICAgICAgICAgICBjb250aW51ZQogICAgICAgIAogICAgICAgICNhZGQgZnJlcXVlbmN5IGlmIGluIHJhbmdlCiAgICAgICAgaWYoaW5fcmFuZ2UpOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBpZihyYWNlPT0wKToKICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY3lfbGlzdC5hcHBlbmQoKGZsb2F0KHJvd1syXSkvZmxvYXQocm93WzNdKSkpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jeV9saXN0LmFwcGVuZCgoZmxvYXQocm93WzNdKS9mbG9hdChyb3dbNF0pKSkKICAgICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgogICAgICAgICAgICAgICAgcHJpbnQoIkhhZCAwIGNhc2VzIG9mIHZhcmlhbnQiLCByb3dbMF0scm93WzFdLHJvd1syXSwgcm93WzNdLCByb3dbNF0pCiAgICAgICAgICAgICAgICAKICAgICAgICAjc3RvcCB3aGVuIG91dCBvZiByYW5nZQogICAgICAgIGlmIHJvd1swXSA9PSBlbmQ6CiAgICAgICAgICAgIGluX3JhbmdlID0gRmFsc2UKICAgICAgICAgICAgICAgIAogICAgcHJpbnQoIkZyZXF1ZW5jeSBMaXN0IikKICAgIHByaW50KGxlbihmcmVxdWVuY3lfbGlzdCkpCiAgICAKICAgIHJhcmVfZnJlcXVlbmN5X2xpc3QgPSBbXQoKICAgICNUSElTIElTIFdIRVJFIFRPIENIQU5HRSBXSEFUIEZSRVFVRU5DWSBDVVQgT0ZGIFRPIExPT0sgQVQgQ1VSUkVOVExZIDwgMSUKICAgIGZvciBmcmVxdWVuY3kgaW4gZnJlcXVlbmN5X2xpc3Q6CiAgICAgICAgaWYgKCBmcmVxdWVuY3kgPCAuMDEgKToKICAgICAgICAgICAgcmFyZV9mcmVxdWVuY3lfbGlzdC5hcHBlbmQoZnJlcXVlbmN5KQoKICAgIHByaW50KCJcblJhcmUgRnJlcXVlbmN5IExpc3QiKQogICAgcHJpbnQobGVuKHJhcmVfZnJlcXVlbmN5X2xpc3QpKQogICAgcHJpbnQoKQogICAgICAgICAgICAKICAgIHRvdGFsID0gMDsKICAgIHJhcmVfdG90YWwgPSAwCiAgICBydW5zID0gMTAwMDA7CiAgICB2YXJfZWFjaF9ydW5fbGlzdCA9IFtdCiAgICByYXJlX3Zhcl9lYWNoX3J1biA9IFtdCiAgICAjUnVuIDEwLDAwMCB0aW1lcyBhbmQga2VlcCB0cmFjayBvZiBhbGwgcnVucyBoZXJlCiAgICBmb3IgeCBpbiByYW5nZShydW5zKToKICAgICAgICBydW5Db3VudCA9IGNhbGN1bGF0b3IoZnJlcXVlbmN5X2xpc3QpCiAgICAgICAgdmFyX2VhY2hfcnVuX2xpc3QuYXBwZW5kKHJ1bkNvdW50KQogICAgICAgIHJhcmVSdW5Db3VudCA9IGNhbGN1bGF0b3IocmFyZV9mcmVxdWVuY3lfbGlzdCkKICAgICAgICByYXJlX3Zhcl9lYWNoX3J1bi5hcHBlbmQocmFyZVJ1bkNvdW50KQoKICAgICAgICB0b3RhbCArPSBydW5Db3VudAogICAgICAgIHJhcmVfdG90YWwgKz0gcmFyZVJ1bkNvdW50CiAgICAKICAgIGF2ZXJhZ2UgPSAoZmxvYXQodG90YWwpIC8gZmxvYXQocnVucykpCiAgICByYXJlX2F2ZXJhZ2UgPSAoZmxvYXQocmFyZV90b3RhbCkgLyBmbG9hdChydW5zKSkKICAgIHByaW50KCAiVG90YWwgVmFyaWFudHMgT3ZlciAxMDAwMCBSdW5zOiAiLCB0b3RhbCApCiAgICBwcmludCggIlRvdGFsIFJhcmUgVmFyaWFudHMgb3ZlciAxMDAwMCBSdW5zICIsIHJhcmVfdG90YWwpCiAgICBwcmludCggIkF2ZXJhZ2Ugb2YgVmFyaWFudHMgb3ZlciAxMDAwMCBSdW5zOiAiICsgc3RyKGF2ZXJhZ2UpKQogICAgcHJpbnQoICJBdmVyYWdlIFJhcmUgVmFyaWFudHMgb3ZlciAxMDAwMCBSdW5zOiAiICsgc3RyKHJhcmVfYXZlcmFnZSkpCiAgICBwcmludCggIlN0YW5kYXJkIERldmlhdGlvbiBvZiBQb3B1bGF0aW9uOiAiICsgc3RyKHN0YXRpc3RpY3MucHN0ZGV2KHZhcl9lYWNoX3J1bl9saXN0KSkpCiAgICBwcmludCggIlN0YW5kYXJkIERldmlhdGlvbiBvZiBSYXJlIFBvcHVsYXRpb246ICIgKyBzdHIoc3RhdGlzdGljcy5wc3RkZXYocmFyZV92YXJfZWFjaF9ydW4pKSkKCiAgICAjQ2FsY3VsYXRlIENvbmZpZGVuY2UgSW50ZXJ2YWwKICAgICNzcXJ0X3NhbXBsZV9zaXplID0gbWF0aC5zcXJ0KGxlbihmcmVxdWVuY3lfbGlzdCkpCiAgICAjZmlyc3Rfc3RlcCA9IChzdGF0aXN0aWNzLnBzdGRldih2YXJfZWFjaF9ydW5fbGlzdCkgLyBzcXJ0X3NhbXBsZV9zaXplKQogICAgI2RldmlhdGlvbiA9ICgxLjk2ICogZmlyc3Rfc3RlcCkKICAgICNsYXN0X3N0ZXBfcG9zID0gKGF2ZXJhZ2UgKyBkZXZpYXRpb24pCiAgICAjbGFzdF9zdGVwX25lZyA9IChhdmVyYWdlIC0gZGV2aWF0aW9uKQogICAgI3ByaW50ICgiQ29uZmlkZW5jZSBJbnRlcnZhbCBvZiA5NSU6IExvdzogIiArIHN0cihsYXN0X3N0ZXBfbmVnKSArICIgSGlnaDogIiArIHN0cihsYXN0X3N0ZXBfcG9zKSkKICAgICNwcmludCgpCgogICAgI0FzayBpZiB5b3Ugd2FudCB0byBwbG90CiAgICBjaG9pY2UgPSBpbnB1dCgiUGxvdCAxLiBBbGwgdmFyaWFudHMgMi4gUmFyZSBWYXJpYW50cyAzLiBOb25lXG4iKQogICAgaWYoIGNob2ljZSA9PSAiMSIgKToKICAgICAgICBwbG90KHZhcl9lYWNoX3J1bl9saXN0LCBsZW4oZnJlcXVlbmN5X2xpc3QpLCBjc3ZfZmlsZSwgJzEnKQogICAgZWxpZiggY2hvaWNlID09ICIyIik6CiAgICAgICAgcGxvdChyYXJlX3Zhcl9lYWNoX3J1biwgbGVuKGZyZXF1ZW5jeV9saXN0KSwgY3N2X2ZpbGUsICcyJykKCiAgICAgICAgCiNDaG9pY2VzIGZvciBnZW5lIHdpdGhpbiBhSFVTIFBhbmVsCmRlZiBhaHVzX2Nob2ljZSgpOgogICAgZ2VuZV9jaG9pY2UgPSBpbnB1dCgiV2hhdCBHZW5lP1xuMS5DRkhcbjIuQ0ZIUjFcbjMuQ0ZIUjNcbjQuQ0ZIUjRcbjUuQ0ZIUjVcbjYuQzNcbjcuQ0ZCXG44LkNGSVxuOS5USEJEXG4xMC5ER1JFXG4xMS5DRDQ2XG4xMi5QTEdcbiIpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBpZiBnZW5lX2Nob2ljZSA9PSAiMSI6CiAgICAgICAgZ2VuZV9jaG9pY2UgPSAnQ0ZILmNzdicKICAgIGVsaWYgZ2VuZV9jaG9pY2UgPT0gIjIiOgogICAgICAgIGdlbmVfY2hvaWNlID0gJ0NGSFIxLmNzdicKPHxmaW1fZW5kfD4="]
["afbb657f1aa042aae6d8d0fd68c53fa334c4b4a7-1","afbb657f1aa042aae6d8d0fd68c53fa334c4b4a7","PHxmaW1fcHJlZml4fD4KZnJvbSB0a2ludGVyIGltcG9ydCAqCgpyb290ID0gVGsoKQoKcm9vdC5nZW9tZXRyeSgiNTAweDUwMCIpCnJvb3QucmVzaXphYmxlKDAsMCkKCiNkZWYgc2hvdygpOgojICAgIHByaW50KCJMb2dpbiBEb25lIikKIyAgICByb290LmNvbmZpZ3VyZShiYWNrZ3JvdW5kPSJncmVlbiIpCgoKc2hvdyA9IGxhbWJkYSBlOnJvb3QuY29uZmlndXJlKGJhY2tncm91bmQ9InBpbmsiKQoKIAoKdW4gPSBMYWJlbChyb290LHRleHQ9IkVudGVyIE5hbWUiLGZvbnQ9KCJBcmlhbCIsMjApKQp1bi5ncmlkKHJvdz0wLGNvbHVtbj0wLHBhZHk9MjUsc3RpY2t5PVcpCgplMSA9IEVudHJ5KHJvb3QsZm9udD0oIkFyaWFsIiwyMCkpCmUxLmdyaWQocm93PTAsY29sdW1uPTEscGFkeT0yNSkKCnVwID0gTGFiZWwocm9vdCx0ZXh0PSJFbnRlciBQYXNzd29yZCIsZm9udD0oIkFyaWFsIiwyMCkpCnVwLmdyaWQocm93PTEsY29sdW1uPTAscGFkeT0yNSkKCng9U3RyaW5nVmFyKCkKCmUyID0gRW50cnkocm9vdCxzaG93PSIqIixmb250PSgiQXJpYWwiLDIwKSx0ZXh0dmFyaWFibGU9eCkKZTIuZ3JpZChyb3c9MSxjb2x1bW49MSxwYWR5PTI1KQoKPHxmaW1faG9sZXw+CiAgICBwcmludChzMSkKICAgIHguc2V0KCIiKQpnZXR2YWx1ZSgpCgpkZWYgYnNob3coYjEpOgogICAgYjFbInRleHQiXT0iRG9uZSIKICAgIGIxWyJiZyJdPSJjeWFuIiAgICN3aWR0aCxoZWlnaHQsZmcKICAgIAoKI2IxID0gQnV0dG9uKHJvb3QsdGV4dD0iTG9naW4iLGZvbnQ9KCJBcmlhbCIsMjApLGNvbW1hbmQ9c2hvdyxjb21tYW5kPWdldHZhbHVlKQoKYjEgPSBCdXR0b24ocm9vdCx0ZXh0PSJMb2dpbiIsZm9udD0oIkFyaWFsIiwyMCksY29tbWFuZD1sYW1iZGE6YnNob3coYjEpKQoKI2IxLmJpbmQoIjxCdXR0b24+IixzaG93KSNMCiNFbnRlciAjIExlYXZlICNLZXktYSAjU2hpZnQtVXAsRG93bixMZWZ0LFJpZ2h0LEFsdC1VcCxDb250cm9sLVVwI2J1dHRvbi1yZWxlYXNlCmIxLmJpbmQoIjxEb3VibGUtMT4iLHNob3cpI0wKCnJvb3QuYmluZCgiPEYxPiIsbGFtYmRhIGU6cm9vdC5jb25maWd1cmUoYmFja2dyb3VuZD0iYmx1ZSIpKQpiMS5ncmlkKHJvdz0yLGNvbHVtbj0wLGNvbHVtbnNwYW49MikKCmNoZWNrYm94ID0gQ2hlY2tidXR0b24ocm9vdCwgdGV4dD0iS2VlcCBtZSBsb2dnZWQgaW4iKQpjaGVja2JveC5ncmlkKGNvbHVtbnNwYW49MikKCgoKcm9vdC5tYWlubG9vcCgpCgoKPHxmaW1fc3VmZml4fD4KZGVmIGdldHZhbHVlKCk6CiAgICBzPWUxLmdldCgpCiAgICBzMT1lMi5nZXQoKQogICAgcHJpbnQocykKPHxmaW1fZW5kfD4="]
["6dd9db2ade27c84cc11bcdbe809f096f2fb36824-3","6dd9db2ade27c84cc11bcdbe809f096f2fb36824","PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKCmZyb20gdGVzdHMudXRpbHMgaW1wb3J0IHJlYWRfZml4dHVyZQpmcm9tIHdob2lzX3BhcnNlci5wYXJzZXIgaW1wb3J0IFdob2lzUGFyc2VyCgoKZGVmIHRlc3RfcGFyc2UoKToKICAgIGhvc3RuYW1lID0gImdvb2dsZS5jby5qcCIKPHxmaW1faG9sZXw+CiAgICBwYXJzZXIgPSBXaG9pc1BhcnNlcigpCiAgICByZXN1bHQgPSBwYXJzZXIucGFyc2UoaG9zdG5hbWU9aG9zdG5hbWUsIHJhd190ZXh0PXJhd190ZXh0KQoKICAgIGFzc2VydCByZXN1bHQucmVnaXN0cmFudC5vcmdhbml6YXRpb24gPT0gIuOCsOODvOOCsOODq+WQiOWQjOS8muekviIKCiAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXN1bHQucmVnaXN0ZXJlZF9hdCwgZGF0ZXRpbWUpCiAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXN1bHQudXBkYXRlZF9hdCwgZGF0ZXRpbWUpCjx8ZmltX3N1ZmZpeHw+CiAgICBmaWxlbmFtZSA9IGYie2hvc3RuYW1lfS50eHQiCgogICAgcmF3X3RleHQgPSByZWFkX2ZpeHR1cmUoZmlsZW5hbWUpCgo8fGZpbV9lbmR8Pg=="]
["bbbeb3a78072c6934899e5cda542a621435b59c1-1","bbbeb3a78072c6934899e5cda542a621435b59c1","PHxmaW1fcHJlZml4fD4KZnJvbSBNb2RlbC5DbGVhbmluZ0RhdGEgaW1wb3J0ICoKZnJvbSBweV92b2xsaWIuYmxhY2tfc2Nob2xlcyBpbXBvcnQgYmxhY2tfc2Nob2xlcyBhcyBicwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gcHlfdm9sbGliLmJsYWNrX3NjaG9sZXMuZ3JlZWtzLmFuYWx5dGljYWwgaW1wb3J0IGRlbHRhLCBnYW1tYSwgdGhldGEsIHZlZ2EsIHJobwoKYnNfcHJpY2VzID0gW10KCjx8ZmltX2VuZHw+"]
["b08c8f96837fb7d7a85481338180a9156ca981c6-2","b08c8f96837fb7d7a85481338180a9156ca981c6","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nOnV0Zi04CiIiIgoKQHZlcnNpb246ICAzLjQuNApAYXV0aG9yOiAgbGluZmVuZwpAZmlsZTogIGJhc2VfY3Jhd2wucHkKQHRpbWU6IDIwMTkvMy8xNiAxNjo0NQoiIiIKaW1wb3J0IG9zCmltcG9ydCBzeXMKCgpjbGFzcyBCYXNlQ3Jhd2wob2JqZWN0KToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdF9pZCkgLT4gTm9uZToKICAgICAgICBzZWxmLmhlYWRlcnMgPSBzZWxmLm1ha2VfaGVhZGVycygpCiAgICAgICAgc2VsZi5kb3dubG9hZF9wYXRoID0gc2VsZi5fX21ha2VfcGF0aChob3N0X2lkKQoKICAgIGRlZiBtYWtlX2hlYWRlcnMoc2VsZik6CiAgICAgICAgaGVhZGVycyA9IGRpY3QoKQogICAgICAgIGhlYWRlcnNbIlJlZmVyZXIiXSA9ICJodHRwczovL3YucGFuZGEudHYvdmlkZW8vNzA0NTAiCiAgICAgICAgaGVhZGVyc1sKICAgICAgICAgICAgIlVzZXItQWdlbnQiXSA9ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNzEuMC4zNTc4LjgwIFNhZmFyaS81MzcuMzYiCiAgICAgICAgcmV0dXJuIGhlYWRlcnMKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgX19tYWtlX3BhdGgoaG9zdF9pZCk6CiAgICAgICAgcHJvamVjdF9wYXRoID0gb3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKQogICAgICAgIGRvd25sb2FkX3BhdGggPSBvcy5wYXRoLmpvaW4ocHJvamVjdF9wYXRoLCAiZG93bmxvYWQiKQogICAgICAgIGRvd25sb2FkX3BhdGggPSBvcy5wYXRoLmpvaW4oZG93bmxvYWRfcGF0aCwgc3RyKGhvc3RfaWQpKQogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkb3dubG9hZF9wYXRoKToKPHxmaW1faG9sZXw+CiAgICAgICAgcmV0dXJuIGRvd25sb2FkX3BhdGgKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgb3MubWFrZWRpcnMoZG93bmxvYWRfcGF0aCkKPHxmaW1fZW5kfD4="]
["a53421aa547eceeed6515b5ce1ac425f67a31b6b-3","a53421aa547eceeed6515b5ce1ac425f67a31b6b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHlhbWwKaW1wb3J0IG9zCmltcG9ydCBsb2dnaW5nCmZyb20gc25vd2ZsYWtlIGltcG9ydCBjb25uZWN0b3IKCgpjbGFzcyBTbm93Zmxha2VPYmplY3Q6CiAgICAiIiJCYXNlIGNsYXNzIGZvciBhbGwgU25vd2ZsYWtlIE9iamVjdCB0eXBlcy4KICAgIFRoaXMgb2JqZWN0IGhvbGRzIHRoZSBtZXRob2RzIG5lZWRlZCB0byBjb25uZWN0IHRvIFNub3dmbGFrZSBhbmQgY29uZmlndXJlIFNub3dmbGFrZSBjcmVkZW50aWFscy4iIiIKCiAgICAjIFRydWUgb25jZSBTbm93Zmxha2UgY29uZmlndXJlZCBhbmQgY29ubmVjdGlvbiBlc3RhYmxpc2hlZAogICAgaW5pdGlhbGl6ZWQgPSBGYWxzZQogICAgIyBjcmVkZW50aWFscyB1c2VkIHRvIGVzdGFibGlzaCBTbm93Zmxha2UgY29ubmVjdGlvbgogICAgc2ZfY3JlZGVudGlhbHMgPSBOb25lCiAgICAjIFNub3dmbGFrZSBjb25uZWN0aW9uIG9iamVjdAogICAgY29ubmVjdGlvbiA9IEZhbHNlCiAgICAjIGN1cnNvciBvYmplY3QKICAgIGN1cnNvciA9IEZhbHNlCiAgICAjIGxvZ2dlciBvYmplY3QKICAgIF9sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCiAgICAjIGxvZyBtZXNzYWdlCiAgICBsb2dfbWVzc2FnZSA9IHN0cgoKICAgIGRlZiBpbml0aWFsaXplX3Nub3dmbGFrZShzZWxmLCBkYXRhYmFzZTogc3RyID0gTm9uZSwgc2NoZW1hOiBzdHIgPSBOb25lLCB1c2VybmFtZTogc3RyID0gTm9uZSwgcGFzc3dvcmQ6IHN0ciA9IE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudDogc3RyID0gTm9uZSwgcm9sZTogc3RyID0gTm9uZSwgd2FyZWhvdXNlOiBzdHIgPSBOb25lKToKICAgICAgICAiIiJtZXRob2QgdGhhdCBjcmVhdGVzIFNub3dmbGFrZSBjb25uZWN0aW9uIGFuZCBjb25maWd1cmVzIFNub3dmbGFrZSBjcmVkZW50aWFscyIiIgoKICAgICAgICBpZiBub3Qgc2VsZi5pbml0aWFsaXplZDoKICAgICAgICAgICAgIyBjYWxscyBtZXRob2QgdG8gY29uZmlndXJlIFNub3dmbGFrZSBjcmVkZW50aWFscwogICAgICAgICAgICBzZWxmLmNvbmZpZ3VyZV9jcmVkZW50aWFscygKICAgICAgICAgICAgICAgIHVzZXJuYW1lPXVzZXJuYW1lLAogICAgICAgICAgICAgICAgcGFzc3dvcmQ9cGFzc3dvcmQsCiAgICAgICAgICAgICAgICBhY2NvdW50PWFjY291bnQsCiAgICAgICAgICAgICAgICByb2xlPXJvbGUsCiAgICAgICAgICAgICAgICB3YXJlaG91c2U9d2FyZWhvdXNlLAogICAgICAgICAgICAgICAgZGF0YWJhc2U9ZGF0YWJhc2UsCiAgICAgICAgICAgICAgICBzY2hlbWE9c2NoZW1hCiAgICAgICAgICAgICkKICAgICAgICAgICAgIyBjYWxscyBtZXRob2QgdG8gY29ubmVjdCB0byBTbm93Zmxha2UgdXNpbmcgdGhlIHNmX2NyZWRlbnRpYWxzIHZhcmlhYmxlCiAgICAgICAgICAgIHNlbGYuZ2V0X3Nub3dmbGFrZV9jb25uZWN0aW9uKAogICAgICAgICAgICAgICAgdXNlcj1zZWxmLnNmX2NyZWRlbnRpYWxzWyd1c2VyJ10sCiAgICAgICAgICAgICAgICBwc3dkPXNlbGYuc2ZfY3JlZGVudGlhbHNbJ3Bhc3MnXSwKICAgICAgICAgICAgICAgIGFjY3Q9c2VsZi5zZl9jcmVkZW50aWFsc1snYWNjdCddLAogICAgICAgICAgICAgICAgZGF0YWJhc2U9c2VsZi5zZl9jcmVkZW50aWFsc1snZGF0YWJhc2UnXSwKICAgICAgICAgICAgICAgIHNjaGVtYT1zZWxmLnNmX2NyZWRlbnRpYWxzWydzY2hlbWEnXQogICAgICAgICAgICApCgogICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSBUcnVlCgogICAgZGVmIGNvbmZpZ3VyZV9jcmVkZW50aWFscyhzZWxmLCB1c2VybmFtZTogc3RyID0gTm9uZSwgcGFzc3dvcmQ6IHN0ciA9IE5vbmUsIGFjY291bnQ6IHN0ciA9IE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU6IHN0ciA9IE5vbmUsIHdhcmVob3VzZTogc3RyID0gTm9uZSwgZGF0YWJhc2U6IHN0ciA9IE5vbmUsIHNjaGVtYTogc3RyID0gTm9uZSk6CiAgICAgICAgIiIiY29uZmlndXJlcyBTbm93Zmxha2UgY3JlZGVudGlhbHMgZm9yIHNlc3Npb24iIiIKCiAgICAgICAgIyBQYXRoIHRvIFNub3dmbGFrZSBjcmVkZW50aWFscyBmaWxlCiAgICAgICAgX19wcm9maWxlX3BhdGg6IHN0ciA9IG9zLnBhdGguam9pbihvcy5nZXRlbnYoIkNMT1VEWV9IT01FIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLmNsb3VkeV93YXJlaG91c2VzL2NvbmZpZ3VyYXRpb25fcHJvZmlsZXMueW1sJykKICAgICAgICB3aXRoIG9wZW4oX19wcm9maWxlX3BhdGgsICdyJykgYXMgc3RyZWFtOgogICAgICAgICAgICBzZWxmLnNmX2NyZWRlbnRpYWxzID0geWFtbC5zYWZlX2xvYWQoc3RyZWFtKVsncHJvZmlsZXMnXVsnc25vd2ZsYWtlJ10KCiAgICAgICAgIyBvdmVyd3JpdGUgZGVmYXVsdCBjcmVkZW50aWFscyB3aXRoIHBhc3NlZCBpbiBjcmVkZW50aWFscyBpZiBhcHBsaWNhYmxlCiAgICAgICAgaWYgdXNlcm5hbWU6CiAgICAgICAgICAgIHNlbGYuc2ZfY3JlZGVudGlhbHNbJ3VzZXInXSA9IHVzZXJuYW1lCiAgICAgICAgaWYgcGFzc3dvcmQ6CiAgICAgICAgICAgIHNlbGYuc2ZfY3JlZGVudGlhbHNbJ3Bhc3MnXSA9IHBhc3N3b3JkCiAgICAgICAgaWYgYWNjb3VudDoKICAgICAgICAgICAgc2VsZi5zZl9jcmVkZW50aWFsc1snYWNjdCddID0gYWNjb3VudAogICAgICAgIGlmIGRhdGFiYXNlOgogICAgICAgICAgICBzZWxmLnNmX2NyZWRlbnRpYWxzWydkYXRhYmFzZSddID0gZGF0YWJhc2UKICAgICAgICBpZiBzY2hlbWE6CiAgICAgICAgICAgIHNlbGYuc2ZfY3JlZGVudGlhbHNbJ3NjaGVtYSddID0gc2NoZW1hCgogICAgICAgICMgcm9sZSBpcyBOb25lIGlmIG5vbmUgaXMgZ2l2ZW4gb3IgY29uZmlndXJlZCBhcyBkZWZhdWx0CiAgICAgICAgaWYgcm9sZSBvciBzZWxmLnNmX2NyZWRlbnRpYWxzWydyb2xlJ10gPT0gJzx5b3VyIHNub3dmbGFrZSByb2xlPic6CiAgICAgICAgICAgIHNlbGYuc2ZfY3JlZGVudGlhbHNbJ3JvbGUnXSA9IHJvbGUKCiAgICAgICAgIyB3YXJlaG91c2UgaXMgTm9uZSBpZiBub25lIGlzIGdpdmVuIG9yIGNvbmZpZ3VyZWQgYXMgZGVmYXVsdAogICAgICAgIGlmIHdhcmVob3VzZSBvciBzZWxmLnNmX2NyZWRlbnRpYWxzWyd3YXJlaG91c2UnXSA9PSAnPHlvdXIgc25vd2ZsYWtlIHdhcmVob3VzZT4nOgogICAgICAgICAgICBzZWxmLnNmX2NyZWRlbnRpYWxzWyd3YXJlaG91c2UnXSA9IHdhcmVob3VzZQoKICAgICAgICAjIGNoZWNrcyBpZiB1c2VyIGhhcyBjb25maWd1cmVkIG9yIHBhc3NlZCBjcmVkZW50aWFscwogICAgICAgIGlmIHNlbGYuc2ZfY3JlZGVudGlhbHNbJ3VzZXInXSA9PSAnPHlvdXIgc25vd2ZsYWtlIHVzZXJuYW1lPicgb3Igc2VsZi5zZl9jcmVkZW50aWFsc1sncGFzcyddID09IFwKICAgICAgICAgICAgICAgICc8eW91ciBzbm93Zmxha2UgcGFzc3dvcmQ+JyBvciBzZWxmLnNmX2NyZWRlbnRpYWxzWydhY2N0J10gPT0gJzx5b3VyIHNub3dmbGFrZSBhY2NvdW50Picgb3IgXAogICAgICAgICAgICAgICAgc2VsZi5zZl9jcmVkZW50aWFsc1snZGF0YWJhc2UnXSA9PSAnPHlvdXIgc25vd2ZsYWtlIGRhdGFiYXNlPic6CgogICAgICAgICAgICBzZWxmLmxvZ19tZXNzYWdlID0gZiJQbGVhc2UgY29uZmlndXJlIHlvdXIgY3JlZGVudGlhbHMgYXQge19fcHJvZmlsZV9wYXRofSBvciBwYXNzIHlvdXIgY3JlZGVudGlhbHMgIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmImFzIGFyZ3VtZW50cyB3aGVuIGNhbGxpbmcgdGhpcyBtZXRob2QuIgogICAgICAgICAgICBzZWxmLl9sb2dnZXIuZXJyb3Ioc2VsZi5sb2dfbWVzc2FnZSkKICAgICAgICAgICAgc2VsZi5zZl9jcmVkZW50aWFscyA9IE5vbmUKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICAgIHJldHVybiBUcnVlCgogICAgZGVmIGdldF9zbm93Zmxha2VfY29ubmVjdGlvbihzZWxmLCB1c2VyLCBwc3dkLCBhY2N0LCBkYXRhYmFzZT1Ob25lLCBzY2hlbWE9Tm9uZSwgcm9sZT1Ob25lKToKICAgICAgICAiIiJlc3RhYmxpc2hlcyBhIGNvbm5lY3Rpb24gd2l0aCBzbm93Zmxha2UiIiIKICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBjb25uZWN0b3IuY29ubmVjdCgKICAgICAgICAgICAgdXNlcj11c2VyLAogICAgICAgICAgICBwYXNzd29yZD1wc3dkLAogICAgICAgICAgICBhY2NvdW50PWFjY3QsCiAgICAgICAgICAgIHJvbGU9cm9sZSwKICAgICAgICAgICAgZGF0YWJhc2U9ZGF0YWJhc2UsCiAgICAgICAgICAgIHNjaGVtYT1zY2hlbWEsCgogICAgICAgICkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICAgICByZXR1cm4gVHJ1ZQo8fGZpbV9lbmR8Pg=="]
["663739eaa870a5438c6d0e6c89eed3ba2dd5aec3-5","663739eaa870a5438c6d0e6c89eed3ba2dd5aec3","PHxmaW1fcHJlZml4fD4KIyAtKi0gZW5jb2Rpbmc6IHV0Zi04IC0qLQoiIiIKUHJvZ3JhbWEgZGUgTWVudG9yaWEgRFNBIDIwMjEKIiIiCgpmcm9tIGZsYXNrIGltcG9ydCBqc29uaWZ5LCByZW5kZXJfdGVtcGxhdGUsIHJlZGlyZWN0LCByZXF1ZXN0LCB1cmxfZm9yCmZyb20gZmxhc2tfbG9naW4gaW1wb3J0KGN1cnJlbnRfdXNlciwKICAgICAgICAgICAgICAgICAgICAgICAgbG9naW5fcmVxdWlyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2luX3VzZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ291dF91c2VyKQpmcm9tIGFwcCBpbXBvcnQgZGIsIGxvZ2luX21hbmFnZXIKZnJvbSBhcHAuYmFzZSBpbXBvcnQgYmx1ZXByaW50CmZyb20gYXBwLmJhc2UuZm9ybXMgaW1wb3J0IExvZ2luRm9ybSwgQ3JlYXRlQWNjb3VudEZvcm0KZnJvbSBhcHAuYmFzZS5tb2RlbHMgaW1wb3J0IFVzZXIKZnJvbSBhcHAuYmFzZS51dGlsIGltcG9ydCB2ZXJpZnlfcGFzcwoKCiMgUm90YSBwYXJhIExvZ2luCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAYmx1ZXByaW50LnJvdXRlKCcvJykKZGVmIHJvdXRlX2RlZmF1bHQoKToKICAgIHJldHVybiByZWRpcmVjdCh1cmxfZm9yKCdiYXNlX2JsdWVwcmludC5sb2dpbicpKQoKIyBNw6l0b2RvcyBkZSBMb2dpbiwgUmVnaXN0cmF0aW9uIGUgTG9nb3V0CiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAYmx1ZXByaW50LnJvdXRlKCcvbG9naW4nLCBtZXRob2RzPVsnR0VUJywgJ1BPU1QnXSkKZGVmIGxvZ2luKCk6CiAgICBsb2dpbl9mb3JtID0gTG9naW5Gb3JtKHJlcXVlc3QuZm9ybSkKICAgIGlmICdsb2dpbicgaW4gcmVxdWVzdC5mb3JtOgogICAgICAgIAogICAgICAgICMgcmVhZCBmb3JtIGRhdGEKICAgICAgICB1c2VybmFtZSA9IHJlcXVlc3QuZm9ybVsndXNlcm5hbWUnXQogICAgICAgIHBhc3N3b3JkID0gcmVxdWVzdC5mb3JtWydwYXNzd29yZCddCgogICAgICAgICMgTG9jYXRlIHVzZXIKICAgICAgICB1c2VyID0gVXNlci5xdWVyeS5maWx0ZXJfYnkodXNlcm5hbWU9dXNlcm5hbWUpLmZpcnN0KCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIAogICAgICAgICMgQ2hlY2sgdGhlIHBhc3N3b3JkCiAgICAgICAgaWYgdXNlciBhbmQgdmVyaWZ5X3Bhc3MoIHBhc3N3b3JkLCB1c2VyLnBhc3N3b3JkKToKCjx8ZmltX2VuZHw+"]
["42d44e03ffea4fb65e96ac416d049175b74ffc14-2","42d44e03ffea4fb65e96ac416d049175b74ffc14","PHxmaW1fcHJlZml4fD4KIiIiCmFpb3Fpd2kud2FsbGV0IGVudW1zLCBjb25zdGFudHMgYW5kIGNvbnN0cmFpbnRzCiIiIgoKZnJvbSBhaW9xaXdpLnR5cGVzIGltcG9ydCBOYW1lZEVudW0sIG5hbWUKCmZyb20gLnR5cGVzLnBheW1lbnQgaW1wb3J0IFBheW1lbnRNZXRob2QgYXMgX1BheW1lbnRNZXRob2QKCgpQYXltZW50TWV0aG9kQ29uc3QgPSBfUGF5bWVudE1ldGhvZCgKICAgIHR5cGU9IkFjY291bnQiLAogICAgYWNjb3VudElkPSI2NDMiCikKCgpjbGFzcyBQYXltZW50VHlwZXMoTmFtZWRFbnVtKToKICAgIElOID0gbmFtZSgpCiAgICBPVVQgPSBuYW1lKCkKICAgIFFJV0lfQ0FSRCA9IG5hbWUoKQogICAgQUxMID0gbmFtZSgpCgoKY2xhc3MgUGF5bWVudFNvdXJjZXMoTmFtZWRFbnVtKToKICAgIFFXX1JVQiA9IG5hbWUoKQogICAgUVdfVVNEID0gbmFtZSgpCiAgICBRV19FVVIgPSBuYW1lKCkKICAgIENBUkQgPSBuYW1lKCkKICAgIE1LID0gbmFtZSgpCgoKY2xhc3MgUHJvdmlkZXI6CiAgICAiIiIKICAgIDk5IC0g0J/QtdGA0LXQstC+0LQg0L3QsCBRSVdJIFdhbGxldAoKICAgIDE5NjMgLSDQn9C10YDQtdCy0L7QtCDQvdCwINC60LDRgNGC0YMgVmlzYSAo0LrQsNGA0YLRiyDRgNC+0YHRgdC40LnRgdC60LjRhSDQsdCw0L3QutC+0LIpCiAgICAyMTAxMyAtINCf0LXRgNC10LLQvtC0INC90LAg0LrQsNGA0YLRgyBNYXN0ZXJDYXJkICjQutCw0YDRgtGLINGA0L7RgdGB0LjQudGB0LrQuNGFINCx0LDQvdC60L7QsikKICAgINCU0LvRjyDQutCw0YDRgiwg0LLRi9C/0YPRidC10L3QvdGL0YUg0LHQsNC90LrQsNC80Lgg0YHRgtGA0LDQvSDQkNC30LXRgNCx0LDQudC00LbQsNC9LCDQkNGA0LzQtdC90LjRjywg0JHQtdC70L7RgNGD0YHRgdC40Y8sINCT0YDRg9C30LjRjywg0JrQsNC30LDRhdGB0YLQsNC9LCDQmtC40YDQs9C40LfQuNGPLCDQnNC+0LvQtNCw0LLQuNGPLAogICAg0KLQsNC00LbQuNC60LjRgdGC0LDQvSwg0KLRg9GA0LrQvNC10L3QuNGB0YLQsNC9LCDQo9C60YDQsNC40L3QsCwg0KPQt9Cx0LXQutC40YHRgtCw0L06CiAgICAgICAgMTk2MCDigJMg0J/QtdGA0LXQstC+0LQg0L3QsCDQutCw0YDRgtGDIFZpc2EKICAgICAgICAyMTAxMiDigJMg0J/QtdGA0LXQstC+0LQg0L3QsCDQutCw0YDRgtGDIE1hc3RlckNhcmQKCiAgICAzMTY1MiAtINCf0LXRgNC10LLQvtC0INC90LAg0LrQsNGA0YLRgyDQvdCw0YbQuNC+0L3QsNC70YzQvdC+0Lkg0L/Qu9Cw0YLQtdC20L3QvtC5INGB0LjRgdGC0LXQvNGLINCc0JjQoAo8fGZpbV9ob2xlfD4KICAgINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0Ysg0L7Qv9C10YDQsNGC0L7RgNC+0LIg0LzQvtCx0LjQu9GM0L3QvtC5INGB0LLRj9C30LgKICAgINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0Ysg0LTRgNGD0LPQuNGFINC/0YDQvtCy0LDQudC00LXRgNC+0LIKICAgIDE3MTcgLSDQv9C70LDRgtC10LYg0L/QviDQsdCw0L3QutC+0LLRgdC60LjQvCDRgNC10LrQstC40LfQuNGC0LDQvCIiIgoKICAgIFFJV0lfV0FMTEVUID0gOTkKCiAgICBWSVNBX1JVID0gMTk2MwogICAgVklTQV9GT1JFSUdOID0gMTk2MAoKICAgIE1BU1RFUkNBUkRfUlUgPSAyMTAxMwogICAgTUFTVEVSQ0FSRF9GT1JFSUdOID0gMjEwMTIKCiAgICBNSVJfQ0FSRCA9IDMxNjUyCgogICAgVElOS09GRl9CQU5LID0gNDY2CiAgICBBTFBIQV9CQU5LID0gNDY0CiAgICBQUk9TVllBWl9CQU5LID0gODIxCiAgICBSVVNTS0lZX1NUQU5EQVJUID0gODE1CgogICAgQ1VTVE9NID0gMTcxNwoKCmNsYXNzIENoZXF1ZVR5cGVzKE5hbWVkRW51bSk6CiAgICAiIiIKICAgIENoZWNrIFtDaGVxdWVdJ3Mgb3V0cHV0IHR5cGUKICAgICIiIgoKICAgIEpQRUcgPSBuYW1lKCkKICAgIFBERiA9IG5hbWUoKQo8fGZpbV9zdWZmaXh8PgogICAgNDY2IC0g0KLQuNC90YzQutC+0YTRhCDQkdCw0L3QugogICAgNDY0IC0g0JDQu9GM0YTQsC3QkdCw0L3QugogICAgODIxIC0g0J/RgNC+0LzRgdCy0Y/Qt9GM0LHQsNC90LoKICAgIDgxNSAtINCg0YPRgdGB0LrQuNC5INCh0YLQsNC90LTQsNGA0YIKPHxmaW1fZW5kfD4="]
["af97d47fea3bd335d00b223f003c98dfdb6db67d-1","af97d47fea3bd335d00b223f003c98dfdb6db67d","PHxmaW1fcHJlZml4fD4KZnJvbSB0aW1lIGltcG9ydCBzbGVlcAoKZnJvbSBhdXRvX2V2ZXJ5dGhpbmcuYmFzZSBpbXBvcnQgVGVybWluYWwKdCA9IFRlcm1pbmFsKCkKCmZyb20gYXV0b19ldmVyeXRoaW5nLmd1aSBpbXBvcnQgR1VJCmd1aSA9IEdVSSgpCnB5YXV0b2d1aSA9IGd1aS5hdXRvZ3VpCgoKcHJpbnQoIllvdSBoYXZlIHRvIG1ha2Ugc3VyZSB5b3UgZ290IGNocm9tZSBhbmQgdGVybWluYXRvciBpbnN0YWxsZWQuIChQcmVzcyBlbnRlciB0byBjb250aW51ZSkiKQoKCiMgMS4gc3RhcnQgY2hyb21lCnQua2lsbCgiY2hyb21lIikKdC5ydW5fcHJvZ3JhbSgiZ29vZ2xlLWNocm9tZS1zdGFibGUgLS1mb3JjZS1kZXZpY2Utc2NhbGUtZmFjdG9yPTEuNSIpCnNsZWVwKDIpCnB5YXV0b2d1aS5wcmVzcygiZjExIikKIiIiCnB5YXV0b2d1aS5tb3ZlVG8oMCwwKQp3aGlsZSAxOgogICAgaWYgZ3VpLmV4aXN0cygiY2hyb21lX25ld190YWIiKToKICAgICAgICBndWkuY2xpY2tfYWZ0ZXJfZXhpc3RzKCJjaHJvbWVfbmV3X3RhYiIpCjx8ZmltX2hvbGV8PgogICAgaWYgZ3VpLmV4aXN0cygiY2hyb21lX3VudGl0bGVkIik6CiAgICAgICAgZ3VpLmNsaWNrX2FmdGVyX2V4aXN0cygiY2hyb21lX3VudGl0bGVkIikKICAgICAgICBicmVhawpweWF1dG9ndWkudHlwZXdyaXRlKCJodHRwczovL2dvb2dsZS5jb20iKQpweWF1dG9ndWkucHJlc3MoImVudGVyIikKaWYgZ3VpLmV4aXN0cygiY2hyb21lX3giKToKICAgIGd1aS5jbGlja19hZnRlcl9leGlzdHMoImNocm9tZV94IikKIiIiCgoKIyAyLiBydW4gdGVybWluYXRvcgp0LnJ1bigidGVybWluYXRvciAtLXByb2ZpbGU9bWluZSIsIGN3ZD10LmZpeF9wYXRoKCJ+IiksIHdhaXQ9RmFsc2UpCnNsZWVwKDIpCnB5YXV0b2d1aS5wcmVzcygiZjExIikKCgpwcmludCgiRG9uZSEiKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGJyZWFrCjx8ZmltX2VuZHw+"]
["b0e81b4b3e029b9ddd40003c43d5f7699004e354-1","b0e81b4b3e029b9ddd40003c43d5f7699004e354","PHxmaW1fcHJlZml4fD4KZnJvbSBhc3Ryb3B5LnRpbWUgaW1wb3J0IFRpbWUKZGVmIGNhbGNfZGF0ZV9mcm9tX2RveShkb3ksIHllYXIpOgogICAgYmVnaW5uaW5nID0gVGltZSgne30tMTItMzEgMDA6MDA6MDAnLmZvcm1hdCh5ZWFyLTEpLCBmb3JtYXQ9J2lzbycpCiAgICBuZXdfZGF0ZSA9IFRpbWUoYmVnaW5uaW5nLm1qZCtkb3ksIGZvcm1hdD0nbWpkJykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcmV0dXJuIG5ld19kYXRlLmlzbwo8fGZpbV9lbmR8Pg=="]
["dd6f83a6ce918364c38cff1fe096c48936c1d737-2","dd6f83a6ce918364c38cff1fe096c48936c1d737","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBuX3NwaGVyZS5uX3NwaGVyZSBpbXBvcnQgKgpuYW1lID0gIm5fc3BoZXJlIgpfX2FsbF9fID0gIm5fc3BoZXJlIgo8fGZpbV9lbmR8Pg=="]
["6e59f1c0b35ef4ed06010de3b8790f3413874804-1","6e59f1c0b35ef4ed06010de3b8790f3413874804","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRlZiBnZXRfZGF0YV9wYXRoc19saXN0KGltYWdlX2ZvbGRlciwgbWFza19mb2xkZXIsIGltYWdlX3N1ZmZpeD0ncG5nJyk6CiAgICAiIiJSZXR1cm5zIGxpc3RzIG9mIHBhdGhzIHRvIGVhY2ggaW1hZ2UgYW5kIG1hc2suIiIiCgogICAgaW1hZ2VfcGF0aHMgPSBbb3MucGF0aC5qb2luKGltYWdlX2ZvbGRlciwgeCkgZm9yIHggaW4gb3MubGlzdGRpcigKPHxmaW1fZW5kfD4="]
["a565c71aff0b172f800d4bc1180cb8890cc16595-2","a565c71aff0b172f800d4bc1180cb8890cc16595","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29uZi51cmxzIGltcG9ydCB1cmwsIGluY2x1ZGUKCmZyb20gcmV2aWV3LnZpZXdzIGltcG9ydCAoSG9tZVZpZXcsIEFydGljbGVDcmVhdGUsIEFydGljbGVFZGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgIEFydGljbGVMaXN0LCApCgo8fGZpbV9ob2xlfD4KICAgICN1cmwocideYWNjb3VudHMvbG9naW4vJywgTG9naW5WaWV3LmFzX3ZpZXcoCiAgICAjICAgIHRlbXBsYXRlX25hbWU9J2xvZ2luLmh0bWwnKSwgbmFtZT0nbG9naW4nKSwKICAgIHVybCgnXicsIGluY2x1ZGUoJ2RqYW5nby5jb250cmliLmF1dGgudXJscycpKSwKICAgIHVybCgnYXJ0aWNsZS9jcmVhdGUvJCcsIEFydGljbGVDcmVhdGUuYXNfdmlldygpLCBuYW1lPSdhcnRpY2xlLWNyZWF0ZScpLAogICAgdXJsKCdhcnRpY2xlLyg/UDxwaz5bMC05XSspLycsIEFydGljbGVFZGl0LmFzX3ZpZXcoKSwgbmFtZT0nYXJ0aWNsZS1lZGl0JyksCiAgICB1cmwoJ2FydGljbGVzLycsIEFydGljbGVMaXN0LmFzX3ZpZXcoKSwgbmFtZT0nYXJ0aWNsZS1saXN0JyksICAgICAgICAgICAgICAKICAgIHVybChyJ14nLCBIb21lVmlldy5hc192aWV3KCksIG5hbWU9J2hvbWUnKSwKICAgIApdCjx8ZmltX3N1ZmZpeHw+CgoKdXJscGF0dGVybnMgPSBbCiAgICAKPHxmaW1fZW5kfD4="]
["bb69825c6a596098a4dcec2f2b678ce8ac29bdff-2","bb69825c6a596098a4dcec2f2b678ce8ac29bdff","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcGF0aCwgaW5jbHVkZQoKCnVybHBhdHRlcm5zID0gWwogICAgcGF0aCgncG9zdHMvJywgaW5jbHVkZSgiYXBpLmJsb2cudXJscyIpKSwKPHxmaW1faG9sZXw+Cl0KPHxmaW1fc3VmZml4fD4KICAgIHBhdGgoJ3VzZXJzLycsIGluY2x1ZGUoImFwaS51c2Vycy51cmxzIikpLAo8fGZpbV9lbmR8Pg=="]
["b07bda7ee0034ba5a431354a137e96cc0ec0309c-5","b07bda7ee0034ba5a431354a137e96cc0ec0309c","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcGF0aCwgaW5jbHVkZQpmcm9tIC52aWV3cyBpbXBvcnQgQWNjb3VudFN1YlR5cGVMaXN0Q3JlYXRlQVBJVmlldywgQWNjb3VudFN1YlR5cGVSZXRyaWV2ZVVwZGF0ZUFQSVZpZXcsIEFjY291bnRMaXN0Q3JlYXRlQVBJVmlldywgXAogICAgQWNjb3VudFJldHJpZXZlVXBkYXRlQVBJVmlldwoKCnN1YnR5cGVfdXJscGF0dGVybnMgPSBbCiAgICBwYXRoKCcnLCBBY2NvdW50U3ViVHlwZUxpc3RDcmVhdGVBUElWaWV3LmFzX3ZpZXcoKSwgbmFtZT0nbGlzdC1jcmVhdGUnKSwKICAgIHBhdGgoJzxpbnQ6cGs+LycsIEFjY291bnRTdWJUeXBlUmV0cmlldmVVcGRhdGVBUElWaWV3LmFzX3ZpZXcoKSwgbmFtZT0nZGV0YWlsLXVwZGF0ZScpLApdCgp1cmxwYXR0ZXJucyA9IFsKICAgIHBhdGgoJ3N1YnR5cGUvJywgaW5jbHVkZSgoc3VidHlwZV91cmxwYXR0ZXJucywgJ3N1YnR5cGUnKSkpLAoKICAgIHBhdGgoJycsIEFjY291bnRMaXN0Q3JlYXRlQVBJVmlldy5hc192aWV3KCksIG5hbWU9J2xpc3QtY3JlYXRlJyksCjx8ZmltX2hvbGV8PgpdCjx8ZmltX3N1ZmZpeHw+CiAgICBwYXRoKCc8aW50OnBrPi8nLCBBY2NvdW50UmV0cmlldmVVcGRhdGVBUElWaWV3LmFzX3ZpZXcoKSwgbmFtZT0nZGV0YWlsLXVwZGF0ZScpLAo8fGZpbV9lbmR8Pg=="]
["dd5f85aa5b2d8752beaacacd35c6f1d4707e58f7-1","dd5f85aa5b2d8752beaacacd35c6f1d4707e58f7","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IHRyYW5zYWN0aW9uCgpmcm9tIGFwaS5tYW5hZ2VtZW50LmRhdGFfc2NyaXB0IGltcG9ydCBPcGVyYXRpb25hbERhdGFTY3JpcHQKZnJvbSBhcGkubW9kZWxzLmFkZHJlc3NfdHlwZSBpbXBvcnQgQWRkcmVzc1R5cGUKCgpjbGFzcyBBZGRBZGRyZXNzVHlwZXMoT3BlcmF0aW9uYWxEYXRhU2NyaXB0KToKICAgICIiIgogICAgQWRkcyB0aGUgYWRkcmVzcyB0eXBlczogUmVjb3JkcyBhZGRyZXNzIGFuZCBTZXJ2aWNlIGFkZHJlc3MKICAgICIiIgogICAgaXNfcmV2ZXJ0YWJsZSA9IEZhbHNlCiAgICBjb21tZW50ID0gJ0FkZHMgdGhlIGFkZHJlc3MgdHlwZXM6IFJlY29yZHMgYWRkcmVzcyBhbmQgU2VydmljZSBhZGRyZXNzJwoKICAgIGRlZiBjaGVja19ydW5fcHJlY29uZGl0aW9ucyhzZWxmKToKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIEB0cmFuc2FjdGlvbi5hdG9taWMKICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgQWRkcmVzc1R5cGUub2JqZWN0cy5nZXRfb3JfY3JlYXRlKAo8fGZpbV9ob2xlfD4KICAgICAgICApCiAgICAgICAgQWRkcmVzc1R5cGUub2JqZWN0cy5nZXRfb3JfY3JlYXRlKAogICAgICAgICAgICBhZGRyZXNzX3R5cGU9J1NlcnZpY2UnLAogICAgICAgICAgICBkZWZhdWx0cz17CiAgICAgICAgICAgICAgICAnZWZmZWN0aXZlX2RhdGUnOiAiMjAxOC0wMS0wMSIKICAgICAgICAgICAgfQogICAgICAgICkKCgpzY3JpcHRfY2xhc3MgPSBBZGRBZGRyZXNzVHlwZXMKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgYWRkcmVzc190eXBlPSdSZWNvcmRzJywKICAgICAgICAgICAgZGVmYXVsdHM9ewogICAgICAgICAgICAgICAgJ2VmZmVjdGl2ZV9kYXRlJzogIjIwMTgtMDEtMDEiCiAgICAgICAgICAgIH0KPHxmaW1fZW5kfD4="]
["6c2d2cb1b004bb3922fc4f9522080bb0a70863fa-1","6c2d2cb1b004bb3922fc4f9522080bb0a70863fa","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KZnJvbSBpbGxuZXNzLm1vZGVscyBpbXBvcnQgKgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCmZyb20gZGphbmdvIGltcG9ydCBmb3JtcwoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgSWxsbmVzc0FkbWluKGFkbWluLk1vZGVsQWRtaW4pOgogICAgZmllbGRzZXRzID0gWyhOb25lLCB7J2ZpZWxkcyc6IFsnY29kZScsICduYW1lJywgJ3N1cnZleXMnXX0pXQogICAgbGlzdF9kaXNwbGF5ID0gKCdjb2RlJywgJ25hbWUnKQo8fGZpbV9lbmR8Pg=="]
["bba00289c05379a0cd8292d079d773d7f0a7525b-1","bba00289c05379a0cd8292d079d773d7f0a7525b","PHxmaW1fcHJlZml4fD4KIiIiRGVmaW5lIGJhc2UgcGFnZSBtb2RlbC4iIiIKCgpjbGFzcyBCYXNlUGFnZToKICAgICIiIkJhc2UgcGFnZSBwcm92aWRpbmcgYSBicm93c2VyLCBhIHVybCBhbmQgYmFzaWMgaW50ZXJhY3Rpb25zLiIiIgoKICAgIHVybCA9IE5vbmUKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0LCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICIiIkluaXRpYWxpemUgdGhlIGJyb3dzZXIuIiIiCiAgICAgICAgc2VsZi5icm93c2VyID0gY29udGV4dC5icm93c2VyCjx8ZmltX2VuZHw+"]
["3c19bc3fae2eccab6a9516119cd9345da3bc11bc-1","3c19bc3fae2eccab6a9516119cd9345da3bc11bc","PHxmaW1fcHJlZml4fD4KZnJvbSAuLi5pc2EuaW5zdCBpbXBvcnQgKgppbXBvcnQgbnVtcHkgYXMgbnAKCmNsYXNzIFZhZGNfdmltKEluc3QpOgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgcmV0dXJuIHNlbGZbJ29yaSddCiAgICAgICAgcmVzdWx0ID0gc2VsZlsnb3JpJ10uY29weSgpCiAgICAgICAgdnN0YXJ0ID0gc2VsZlsndnN0YXJ0J10gaWYgJ3ZzdGFydCcgaW4gc2VsZiBlbHNlIDAgCiAgICAgICAgbWFzayA9IG5wLnVucGFja2JpdHMoc2VsZlsnbWFzayddLCBiaXRvcmRlcj0nbGl0dGxlJylbMDogc2VsZlsndmwnXV0gCiAgICAgICAgZm9yIGlpIGluIHJhbmdlKHZzdGFydCwgc2VsZlsndmwnXSk6IAogICAgICAgICAgICByZXN1bHRbaWldID0gc2VsZlsndnMyJ11baWldLmFzdHlwZShvYmplY3QpICsgc2VsZlsnaW1tJ10gKyBtYXNrW2lpXQogICAgICAgIHJldHVybiByZXN1bHQgCgoKY2xhc3MgVm1lcmdlX3ZpbShJbnN0KToKICAgIG5hbWUgPSAndm1lcmdlLnZpbScKICAgICMgdm1lcmdlLnZpbSB2ZCwgdnMyLCBpbW0sIHYwICAgCiAgICBkZWYgZ29sZGVuKHNlbGYpOiAgICAgCiAgICAgICAgaWYgc2VsZlsndmwnXT09MDoKICAgICAgICAgICAgcmV0dXJuIHNlbGZbJ29yaSddCiAgICAgICAgcmVzdWx0ID0gc2VsZlsnb3JpJ10uY29weSgpCiAgICAgICAgdnN0YXJ0ID0gc2VsZlsndnN0YXJ0J10gaWYgJ3ZzdGFydCcgaW4gc2VsZiBlbHNlIDAgCiAgICAgICAgbWFzayA9IG5wLnVucGFja2JpdHMoc2VsZlsnbWFzayddLCBiaXRvcmRlcj0nbGl0dGxlJylbMDogc2VsZlsndmwnXV0KICAgICAgICBmb3IgaWkgaW4gcmFuZ2UodnN0YXJ0LCBzZWxmWyd2bCddKTogCiAgICAgICAgICAgIHJlc3VsdFtpaV0gPSBzZWxmWydpbW0nXSBpZiBtYXNrW2lpXSBlbHNlIHNlbGZbJ3ZzMiddW2lpXQogICAgICAgIHJldHVybiByZXN1bHQgCgo8fGZpbV9zdWZmaXh8PgogICAgbmFtZSA9ICd2YWRjLnZpbScKICAgICMgdmFkYy52aW0gdmQsIHZzMiwgaW1tLCB2MCAgIAogICAgZGVmIGdvbGRlbihzZWxmKTogICAgIAogICAgICAgIGlmIHNlbGZbJ3ZsJ109PTA6Cjx8ZmltX2VuZHw+"]
["2841dc0af3401276cefbd8cbc907b138bd25ae02-3","2841dc0af3401276cefbd8cbc907b138bd25ae02","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwojIHB5dGhvbiBhZGRfbGFiZWxfZWxlbWVudC5weSA8IGluLmpzb25sID4gb3V0Lmpzb25sCiMKPHxmaW1fZW5kfD4="]
["af545c870615058f3b591fe3209ea2f6778949d6-1","af545c870615058f3b591fe3209ea2f6778949d6","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKCgpjbGFzcyBTb2x1dGlvbjoKICAgIGRlZiBudW1iZXJPZkFyaXRobWV0aWNTbGljZXMoc2VsZiwgQTogTGlzdFtpbnRdKSAtPiBpbnQ6CiAgICAgICAgbGUgPSBsZW4oQSkKICAgICAgICBsID0gWzBdICogKGxlKQogICAgICAgIGZvciBpIGluIHJhbmdlKDIsIGxlKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBpZiBBW2ldIC0gQVtpIC0gMV0gPT0gQVtpIC0gMV0gLSBBW2kgLSAyXToKICAgICAgICAgICAgICAgIGxbaV0gPSAxICsgbFtpIC0gMV0KPHxmaW1fZW5kfD4="]
["dd2ba9fa73228c2273403c889e8bf0febd7d5118-2","dd2ba9fa73228c2273403c889e8bf0febd7d5118","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcGF0aAoKZnJvbSBwZW5uZGF0YS52aWV3cyBpbXBvcnQgQ2FsZW5kYXIsIEV2ZW50cywgSG9tZVBhZ2UsIE5ld3MKCgp1cmxwYXR0ZXJucyA9IFsKICAgIHBhdGgoIm5ld3MvIiwgTmV3cy5hc192aWV3KCksIG5hbWU9Im5ld3MiKSwKICAgIHBhdGgoImNhbGVuZGFyLyIsIENhbGVuZGFyLmFzX3ZpZXcoKSwgbmFtZT0iY2FsZW5kYXIiKSwKICAgIHBhdGgoImhvbWVwYWdlIiwgSG9tZVBhZ2UuYXNfdmlldygpLCBuYW1lPSJob21lcGFnZSIpLAo8fGZpbV9ob2xlfD4KXQo8fGZpbV9zdWZmaXh8PgogICAgcGF0aCgiZXZlbnRzLzx0eXBlPi8iLCBFdmVudHMuYXNfdmlldygpLCBuYW1lPSJldmVudHMiKSwKPHxmaW1fZW5kfD4="]
["af0de80dd9777b87cc8c32b0b4e769a466bb68fb-2","af0de80dd9777b87cc8c32b0b4e769a466bb68fb","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFzayBpbXBvcnQgRmxhc2ssIHJlcXVlc3QKaW1wb3J0IHRlbGVncmFtCmltcG9ydCBvcwppbXBvcnQgdGltZQppbXBvcnQgZGF0ZXRpbWUKZnJvbSBmbGFza19zcWxhbGNoZW15IGltcG9ydCBTUUxBbGNoZW15CgpUT0tFTiA9IG9zLmVudmlyb24uZ2V0KCdURUxFR1JBTV9UT0tFTicpCkhPU1QgPSBvcy5lbnZpcm9uLmdldCgnSE9TVF9VUkwnKQpQT1JUID0gaW50KG9zLmVudmlyb24uZ2V0KCdQT1JUJywgJzg0NDMnKSkKCmRiID0gU1FMQWxjaGVteSgpCmJvdCA9IHRlbGVncmFtLkJvdChUT0tFTikKCgpkZWYgY3JlYXRlX2FwcCgpOgogICAgYXBwID0gRmxhc2soX19uYW1lX18pCiAgICBhcHAuY29uZmlnWydTUUxBTENIRU1ZX1RSQUNLX01PRElGSUNBVElPTlMnXSA9IEZhbHNlCiAgICBhcHAuY29uZmlnWydTUUxBTENIRU1ZX0RBVEFCQVNFX1VSSSddID0gb3MuZW52aXJvblsnREFUQUJBU0VfVVJMJ10KICAgIGRiLmluaXRfYXBwKGFwcCkKCiAgICByZXR1cm4gYXBwCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHRpbWUuc2xlZXAoMSkKICAgIGJvdC5zZXRXZWJob29rKHVybD0nJXMvJXMnICUgKEhPU1QsIFRPS0VOKSkKICAgIGFwcCA9IGNyZWF0ZV9hcHAoKQoKICAgIEBhcHAucm91dGUoJy8nICsgVE9LRU4sIG1ldGhvZHM9WydQT1NUJ10pCiAgICBkZWYgd2ViaG9vaygpOgogICAgICAgIGZyb20gbW9kZWxzIGltcG9ydCBVc2VyCgogICAgICAgIHVwZGF0ZSA9IHRlbGVncmFtLnVwZGF0ZS5VcGRhdGUuZGVfanNvbihyZXF1ZXN0LmdldF9qc29uKGZvcmNlPVRydWUpLCBib3QpCiAgICAgICAgY2hhdF9pZCA9IHVwZGF0ZS5tZXNzYWdlLmNoYXRfaWQKCiAgICAgICAgdXNlciA9IFVzZXIucXVlcnkuZmlsdGVyX2J5KGNoYXRfaWQ9Y2hhdF9pZCkuZmlyc3QoKQogICAgICAgIGlmIG5vdCB1c2VyOgogICAgICAgICAgICB1c2VyID0gVXNlcihjaGF0X2lkPWNoYXRfaWQpCiAgICAgICAgdXNlci51cGRhdGVfZGF0ZSA9IGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpCiAgICAgICAgdXNlci5zYXZlKCkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBib3Quc2VuZF9tZXNzYWdlKGNoYXRfaWQ9Y2hhdF9pZCwgdGV4dD0nR2lmIGV2ZXJ5IG1vcm5pbmcnKQoKICAgICAgICByZXR1cm4gJ09LJwoKPHxmaW1fZW5kfD4="]
["06bfd781817471e0fa714f9ae85428bbeac28a2c-2","06bfd781817471e0fa714f9ae85428bbeac28a2c","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMS4xIG9uIDIwMTgtMTAtMjMgMTg6NDIKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ3dhaXR0aW1lcycsICcwMDAzX3JpZGVjdXJyZW50c3RhdHVzJyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkNyZWF0ZU1vZGVsKAogICAgICAgICAgICBuYW1lPSdUb2RheVdhaXRzUHJlZGljdGVkJywKICAgICAgICAgICAgZmllbGRzPVsKICAgICAgICAgICAgICAgICgnaWQnLCBtb2RlbHMuQXV0b0ZpZWxkKGF1dG9fY3JlYXRlZD1UcnVlLCBwcmltYXJ5X2tleT1UcnVlLCBzZXJpYWxpemU9RmFsc2UsIHZlcmJvc2VfbmFtZT0nSUQnKSksCiAgICAgICAgICAgICAgICAoJ3RpbWUnLCBtb2RlbHMuVGV4dEZpZWxkKGRiX2NvbHVtbj0nVGltZScpKSwKICAgICAgICAgICAgICAgICgncHJlZGljdGVkd2FpdCcsIG1vZGVscy5JbnRlZ2VyRmllbGQoZGJfY29sdW1uPSdQcmVkaWN0ZWRXYWl0JykpLAogICAgICAgICAgICBdLAogICAgICAgICAgICBvcHRpb25zPXsKICAgICAgICAgICAgICAgICdkYl90YWJsZSc6ICdSaWRlX1dhaXRzX1RvZGF5X1ByZWRpY3RlZCcsCiAgICAgICAgICAgICAgICAnbWFuYWdlZCc6IEZhbHNlLAogICAgICAgICAgICB9LAogICAgICAgICksCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIF0KPHxmaW1fZW5kfD4="]
["05a1be5bdac28b30f9efa8927f307f3f9a26d549-1","05a1be5bdac28b30f9efa8927f307f3f9a26d549","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmZyb20gY29sb3JleGxpYi5jb2xvcmV4bGliLndyaXRlcnMuSGVhdE1hcFdpbmRvdyBpbXBvcnQgSGVhdE1hcFdpbmRvdwpmcm9tIGNvbG9yZXhsaWIuY29sb3JleGxpYi5jb21tb24uZGF0YXN0cnVjdHVyZXMgaW1wb3J0IEhlYXRNYXAsIERhdGEKZnJvbSBjb2xvcmV4bGliLmNvbG9yZXhsaWIuY29tbW9uLmRhdGFzdHJ1Y3R1cmVzIGltcG9ydCBEYXRhR3JpZCwgVGlsZQpmcm9tIGNvbG9yZXhsaWIuY29sb3JleGxpYi5jb21tb24uc3R5bGluZyBpbXBvcnQgU3R5bGVTaGVldApmcm9tIGNvbG9yZXhsaWIuY29sb3JleGxpYi5jb21tb24uc3R5bGluZyBpbXBvcnQgVGhlbWUKZnJvbSB0a2ludGVyIGltcG9ydCBUawoKCmNsYXNzIFRlc3RJbml0KHVuaXR0ZXN0LlRlc3RDYXNlKToKCWRlZiBzZXRVcChzZWxmKToKCQlzZWxmLnBhcmVudCA9IFRrKCkKCglkZWYgdGVzdF9fX2luaXRfX0Eoc2VsZik6CgkJc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLEhlYXRNYXBXaW5kb3cpCgkJc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLEhlYXRNYXBXaW5kb3csCgkJCXNlbGYucGFyZW50KQoKCWRlZiB0ZXN0X19faW5pdF9fQihzZWxmKToKCQltb2NrX2RhdGEgPSBbCgkJCVsiTW9udGgiLCJXZWIgVHJhZmZpYyIsIkNhbGwgdG8gYWN0aW9ucyJdLAoJCQlbIkphbnVhcnkiLFRpbGUoeyd2YWx1ZSc6IDYwLCAncmdiJzogJyNhNDVhZmYnLCAnYWxwaGEnOiAwLjU2fSksVGlsZSh7J3ZhbHVlJzogNjAsICdyZ2InOiAnI2E0NWFmZicsICdhbHBoYSc6IDAuNTZ9KV0sCgkJCVsiRmVicnVhcnkiLFRpbGUoeyd2YWx1ZSc6IDYwLCAncmdiJzogJyNhNDVhZmYnLCAnYWxwaGEnOiAwLjU2fSksVGlsZSh7J3ZhbHVlJzogNjAsICdyZ2InOiAnI2E0NWFmZicsICdhbHBoYSc6IDAuNTZ9KV0sCgkJCVsiTWFyY2giLFRpbGUoeyd2YWx1ZSc6IDYwLCAncmdiJzogJyNhNDVhZmYnLCAnYWxwaGEnOiAwLjU2fSksVGlsZSh7J3ZhbHVlJzogNjAsICdyZ2InOiAnI2E0NWFmZicsICdhbHBoYSc6IDAuNTZ9KV0sCgkJCVsiQXByaWwiLFRpbGUoeyd2YWx1ZSc6IDYwLCAncmdiJzogJyNhNDVhZmYnLCAnYWxwaGEnOiAwLjU2fSksVGlsZSh7J3ZhbHVlJzogNjAsICdyZ2InOiAnI2E0NWFmZicsICdhbHBoYSc6IDAuNTZ9KV0sCgkJCVsiTWF5IixUaWxlKHsndmFsdWUnOiA2MCwgJ3JnYic6ICcjYTQ1YWZmJywgJ2FscGhhJzogMC41Nn0pLFRpbGUoeyd2YWx1ZSc6IDYwLCAncmdiJzogJyNhNDVhZmYnLCAnYWxwaGEnOiAwLjU2fSldLAoJCQlbIkp1bmUiLFRpbGUoeyd2YWx1ZSc6IDYwLCAncmdiJzogJyNhNDVhZmYnLCAnYWxwaGEnOiAwLjU2fSksVGlsZSh7J3ZhbHVlJzogNjAsICdyZ2InOiAnI2E0NWFmZicsICdhbHBoYSc6IDAuNTZ9KV0sCgkJCVsiSnVseSIsVGlsZSh7J3ZhbHVlJzogNjAsICdyZ2InOiAnI2E0NWFmZicsICdhbHBoYSc6IDAuNTZ9KSxUaWxlKHsndmFsdWUnOiA2MCwgJ3JnYic6ICcjYTQ1YWZmJywgJ2FscGhhJzogMC41Nn0pXSwKCQkJWyJBdWd1c3QiLFRpbGUoeyd2YWx1ZSc6IDYwLCAncmdiJzogJyNhNDVhZmYnLCAnYWxwaGEnOiAwLjU2fSksVGlsZSh7J3ZhbHVlJzogNjAsICdyZ2InOiAnI2E0NWFmZicsICdhbHBoYSc6IDAuNTZ9KV0sCgkJCVsiU2VwdGVtYmVyIixUaWxlKHsndmFsdWUnOiA2MCwgJ3JnYic6ICcjYTQ1YWZmJywgJ2FscGhhJzogMC41Nn0pLFRpbGUoeyd2YWx1ZSc6IDYwLCAncmdiJzogJyNhNDVhZmYnLCAnYWxwaGEnOiAwLjU2fSldLAoJCQlbIk9jdG9iZXIiLFRpbGUoeyd2YWx1ZSc6IDYwLCAncmdiJzogJyNhNDVhZmYnLCAnYWxwaGEnOiAwLjU2fSksVGlsZSh7J3ZhbHVlJzogNjAsICdyZ2InOiAnI2E0NWFmZicsICdhbHBoYSc6IDAuNTZ9KV0sCgkJCVsiTm92ZW1iZXIiLFRpbGUoeyd2YWx1ZSc6IDYwLCAncmdiJzogJyNhNDVhZmYnLCAnYWxwaGEnOiAwLjU2fSksVGlsZSh7J3ZhbHVlJzogNjAsICdyZ2InOiAnI2E0NWFmZicsICdhbHBoYSc6IDAuNTZ9KV0sCgkJCVsiRGVjZW1iZXIiLFRpbGUoeyd2YWx1ZSc6IDYwLCAncmdiJzogJyNhNDVhZmYnLCAnYWxwaGEnOiAwLjU2fSksVGlsZSh7J3ZhbHVlJzogNjAsICdyZ2InOiAnI2E0NWFmZicsICdhbHBoYSc6IDAuNTZ9KV0KCQldCgkJb3B0aW9ucyA9IHsKCQkJJ2RhdGEnOiBtb2NrX2RhdGEsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCQkJJ3RpdGxlJzogJ015IEZpcnN0IEhlYXRtYXAgdGl0bGUnLAoJCQknc3VidGl0bGUnOiAnVGhlIGZpcnN0IGhlYXRtYXAgc3VidGl0bGUnLAoJCQkndGhlbWUnOiBUaGVtZSgpLAoJCQknc3R5bGVzaGVldCc6IFN0eWxlU2hlZXQoKSwKPHxmaW1fZW5kfD4="]
["bb9dcde847b2b90a34695dfa2b136fa7a7d9476a-1","bb9dcde847b2b90a34695dfa2b136fa7a7d9476a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBnbG9iCmltcG9ydCBzaHV0aWwKCgojIyMjIERvd25sb2FkIFNoYWtlc3BlYXJlIGZpbGUgIyMjIwoKb3Muc3lzdGVtKCd3Z2V0IC1PIHNoYWtlc3BlYXJlLnR4dCBodHRwczovL2NzLnN0YW5mb3JkLmVkdS9wZW9wbGUva2FycGF0aHkvY2hhci1ybm4vc2hha2VzcGVhcmVfaW5wdXQudHh0JykKCgojIyMjIERvd25sb2FkIGRhdGEgZmlsZXMgZm9yIGNsYXNzaWZpY2F0aW9uIHRhc2sgIyMjIwoKbGFuZ3VhZ2VzID0gWygnYWxiYW5pYW4nLCAnYWxiYW5pYW4nKSwgCiAgICAgICAgICAgICAoJ2FzdicsICdlbmdsaXNoJyksIAogICAgICAgICAgICAgKCdjemVjaF9jZXAnLCAnY3plY2gnKSwgCiAgICAgICAgICAgICAoJ2RhbmlzaCcsICdkYW5pc2gnKSwgCiAgICAgICAgICAgICAoJ2VzcGVyYW50bycsICdlc3BlcmFudG8nKSwgCiAgICAgICAgICAgICAoJ2Zpbm5pc2hfcHJfMTk5MicsICdmaW5uaXNoJyksIAogICAgICAgICAgICAgKCdmcmVuY2hfb3N0ZXJ2YWxkXzE5OTYnLCAnZnJlbmNoJyksIAogICAgICAgICAgICAgKCdnZXJtYW5fc2NobGFjaHRlcl8xOTUxJywgJ2dlcm1hbicpLCAKICAgICAgICAgICAgICgnaHVuZ2FyaWFuX2thcm9saScsICdodW5nYXJpYW4nKSwgCiAgICAgICAgICAgICAoJ2l0YWxpYW5fcml2ZWR1dGFfMTkyNycsICdpdGFsaWFuJyksIAogICAgICAgICAgICAgKCdsaXRodWFuaWFuJywgJ2xpdGh1YW5pYW4nKSwgCiAgICAgICAgICAgICAoJ21hb3JpJywgJ21hb3JpJyksIAogICAgICAgICAgICAgKCdub3J3ZWdpYW4nLCAnbm9yd2VnaWFuJyksIAogICAgICAgICAgICAgKCdwb3J0dWd1ZXNlJywgJ3BvcnR1Z3Vlc2UnKSwgCiAgICAgICAgICAgICAoJ3JvbWFuaWFuX2Nvcm5pbGVzY3UnLCAncm9tYW5pYW4nKSwgCiAgICAgICAgICAgICAoJ3NwYW5pc2hfcmVpbmFfdmFsZXJhXzE5MDknLCAnc3BhbmlzaCcpLCAKICAgICAgICAgICAgICgnc3dlZGlzaF8xOTE3JywgJ3N3ZWRpc2gnKSwgCiAgICAgICAgICAgICAoJ3R1cmtpc2gnLCAndHVya2lzaCcpLCAKICAgICAgICAgICAgICgndmlldG5hbWVzZV8xOTM0JywgJ3ZpZXRuYW1lc2UnKSwgCiAgICAgICAgICAgICAoJ3hob3NhJywgJ3hob3NhJyldCgpvcy5ta2RpcignLi9sYW5ndWFnZV9kYXRhJykKCmRhdGFfZGlyX2Jhc2UgPSAnLi9sYW5ndWFnZV9kYXRhLycKCmZvciAoZG93bmxvYWRfbmFtZSwgZGVzdF9uYW1lKSBpbiBsYW5ndWFnZXM6CiAgICAjIGRvd25sb2FkCiAgICBwYXRoX2Jhc2UgPSAnaHR0cDovL3VuYm91bmQuYmlvbGEuZWR1L2Rvd25sb2Fkcy9iaWJsZXMvJyArIGRvd25sb2FkX25hbWUgKyAnLnppcCcKICAgIHByaW50KCdkb3dubG9hZGluZyBmcm9tOiAnLCBwYXRoX2Jhc2UpCiAgICBvcy5zeXN0ZW0oJ3dnZXQgJysgcGF0aF9iYXNlKQogICAgCiAgICAjIHVuemlwIAogICAgdW56aXBfZGlyID0gZGF0YV9kaXJfYmFzZStkb3dubG9hZF9uYW1lKydfdW56aXBwZWQnCiAgICBwcmludCgndW56aXBwaW5nIHRvOiAnLCB1bnppcF9kaXIpCiAgICBvcy5tYWtlZGlycyh1bnppcF9kaXIpCiAgICBvcy5zeXN0ZW0oJ3VuemlwICcrIChkb3dubG9hZF9uYW1lICsgJy56aXAnKSArICcgLWQgJyArIHVuemlwX2RpcikKICAgIAogICAgIyBtb3ZlIHRleHQgZmlsZSB0byBuZXcgZmlsZSBuYW1lCiAgICB0ZXh0X2ZpbGVfcGF0aCA9IHVuemlwX2RpcisnLycrZG93bmxvYWRfbmFtZSsnX3V0ZjgudHh0JwogICAgbmV3X3RleHRfZmlsZV9wYXRoID0gZGF0YV9kaXJfYmFzZStkZXN0X25hbWUrJy50eHQnCiAgICBwcmludCgna2VlcGluZyBmaWxlOiAnLCBuZXdfdGV4dF9maWxlX3BhdGgpCiAgICBvcy5zeXN0ZW0oJ212JyArICcgJyArIHRleHRfZmlsZV9wYXRoICsgJyAnICsgbmV3X3RleHRfZmlsZV9wYXRoKQogICAgCiAgICAjIHJlbW92ZSB6aXAgZmlsZSBhbmQgaW5mbGF0ZWQgCiAgICBwcmludCgnY2xlYW5pbmcgdXAgZGlyZWN0b3J5JykKICAgIG9zLnJlbW92ZShkb3dubG9hZF9uYW1lKycuemlwJykKICAgIHNodXRpbC5ybXRyZWUodW56aXBfZGlyKQoKCiMjIyBTcGxpdCBsYW5ndWFnZSBmaWxlcyBpbnRvIHRyYWluIGFuZCB0ZXN0ICMjIwoKZmlsZXNfbGlzdCA9IGdsb2IuZ2xvYignbGFuZ3VhZ2VfZGF0YS8qLnR4dCcpCgppZiBub3Qgb3MucGF0aC5leGlzdHMoJ2xhbmd1YWdlX2RhdGEvdGVzdCcpOgogICAgb3MubWFrZWRpcnMoJ2xhbmd1YWdlX2RhdGEvdGVzdCcpCmlmIG5vdCBvcy5wYXRoLmV4aXN0cygnbGFuZ3VhZ2VfZGF0YS90cmFpbicpOgogICAgb3MubWFrZWRpcnMoJ2xhbmd1YWdlX2RhdGEvdHJhaW4nKQoKZm9yIGZpbGUgaW4gZmlsZXNfbGlzdDoKICAgIGJpYmxlX3RyYWluX3RleHQgPSAiIgogICAgYmlibGVfdGVzdF90ZXh0ID0gIiIKICAKICAgIG5ld190cmFpbl9maWxlX25hbWUgPSAnbGFuZ3VhZ2VfZGF0YS90cmFpbi8nK29zLnBhdGguYmFzZW5hbWUoZmlsZSkuc3BsaXQoIi4iKVswXSArICJfdHJhaW4udHh0IgogICAgbmV3X3Rlc3RfZmlsZV9uYW1lID0gJ2xhbmd1YWdlX2RhdGEvdGVzdC8nK29zLnBhdGguYmFzZW5hbWUoZmlsZSkuc3BsaXQoIi4iKVswXSArICJfdGVzdC50eHQiCiAgICB3aXRoIG9wZW4oZmlsZSkgYXMgaW5wOgogICAgICAgIGZvciBfIGluIHJhbmdlKDgpOgogICAgICAgICAgICBuZXh0KGlucCkKCiAgICAgICAgIyBDcmVhdGUgdHJhaW5pbmcgc2V0IHRleHQgZmlsZQogICAgICAgIGZvciBpIGluIHJhbmdlKDgsMjc5OTUpOgogICAgICAgICAgICBsaW5lID0gbmV4dChpbnApCiAgICAgICAgICAgIHRhYl9zZXAgPSBsaW5lLnN0cmlwKCkucmVwbGFjZSgnXHRcdCcsICdcdCcpLnNwbGl0KCdcdCcpCiAgICAgICAgICAgIHdvcmRzID0gdGFiX3NlcFstMV0KICAgICAgICAgICAgYmlibGVfdHJhaW5fdGV4dCArPSAiICIgKyB3b3JkcwoKICAgICAgICB3aXRoIG9wZW4obmV3X3RyYWluX2ZpbGVfbmFtZSwgJ3cnKSBhcyBmOgogICAgICAgICAgICBmLndyaXRlKGJpYmxlX3RyYWluX3RleHQuc3RyaXAoKSkKCiAgICAgICAgIyBDcmVhdGUgdGVzdGluZyBzZXQgdGV4dCBmaWxlCiAgICAgICAgZm9yIHRlc3RfbGluZXMgaW4gaW5wOgogICAgICAgICAgICB0YWJfc2VwX3Rlc3QgPSB0ZXN0X2xpbmVzLnN0cmlwKCkucmVwbGFjZSgnXHRcdCcsICdcdCcpLnNwbGl0KCdcdCcpCiAgICAgICAgICAgIHdvcmRzX3Rlc3QgPSB0YWJfc2VwX3Rlc3RbLTFdCiAgICAgICAgICAgIGJpYmxlX3Rlc3RfdGV4dCArPSAiICIgKyB3b3Jkc190ZXN0Cjx8ZmltX2hvbGV8PgogICAgIyBSZW1vdmUgb2xkIGNvbWJpbmVkIHRleHQgZmlsZQogICAgb3MucmVtb3ZlKGZpbGUpCgoKIyMjIyBEb3dubG9hZCB0ZXN0IGxhbmd1YWdlIGZpbGUgZm9yIEthZ2dsZSBzdWJtaXNzaW9uICMjIyMgCgpvcy5zeXN0ZW0oJ3dnZXQgLU8gbGFuZ3VhZ2VfZGF0YS9rYWdnbGVfcm5uX2xhbmd1YWdlX2NsYXNzaWZpY2F0aW9uX3Rlc3QudHh0IGh0dHBzOi8vdW9maS5ib3guY29tL3NoYXJlZC9zdGF0aWMvMDk0cmIwbjBzZXJmYjFzMTlpd3J2azB2d2hmOGJnNnAudHh0JykKCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgIHdpdGggb3BlbihuZXdfdGVzdF9maWxlX25hbWUsICd3JykgYXMgZjoKICAgICAgICAgICAgZi53cml0ZShiaWJsZV90ZXN0X3RleHQuc3RyaXAoKSkKICAgIAo8fGZpbV9lbmR8Pg=="]
["3c6b3a4b5c967ff01d4234c24218d6e02f2786c6-2","3c6b3a4b5c967ff01d4234c24218d6e02f2786c6","PHxmaW1fcHJlZml4fD4KIiIiClRoaXMgbW9kdWxlIGNvbnRhaW5zIGdsb2JhbCB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgcHlhdGxhcy4KIiIiCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpkZWYgaGVsbG9fYXRsYXMoKToKICAgICIiIgogICAgUHJpbnQgYSB3ZWxjb21lIG1lc3NhZ2UhCjx8ZmltX2VuZHw+"]
["05f56147f253b7bfdf42e50b2d775237c45c61dd-1","05f56147f253b7bfdf42e50b2d775237c45c61dd","PHxmaW1fcHJlZml4fD4KZnJvbSBtb2R1bGVzLmNhbGN1bGF0b3IuYWN0aW9ucy5jYWxjdWxhdG9yX29wZXJhdG9yIGltcG9ydCBDYWxjdWxhdG9yU3RyYXRlZ3kKZnJvbSBtb2R1bGVzLmNhbGN1bGF0b3IudXRpbHMudXRpbCBpbXBvcnQgcmVhZF9leGNlbF9maWxlLCBjcmVhdGVfZXhjZWxfZmlsZSwgY29udmVydF9yZXN1bHQKZnJvbSBzZXR0aW5ncy5jb25maWcgaW1wb3J0IGxvZ2dlcgpmcm9tIHNldHRpbmdzLm9wdGlvbnMgaW1wb3J0IGZpbGVfc3RvcmFnZV9wYXRoLCBpbnB1dF9maWxlCgoKY2xhc3MgRXhlY3V0ZVJlcG9ydEV4Y2VsRmlsZToKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5maWxlID0gTm9uZQogICAgICAgIHNlbGYucmVzdWx0cyA9IFtdCgogICAgZGVmIGNyZWF0ZV9leGNlbChzZWxmKToKICAgICAgICAiIiIKICAgICAgICBGdW5jdGlvbiBjYWxsIHRvIGNyZWF0ZSBleGNlbCBmaWxlLgogICAgICAgICIiIgogICAgICAgIGxvZ2dlci5pbmZvKGYiQ3JlYXRpbmcgU3VibWlzc2lvbiBPdXRwdXQgaW4ge2ZpbGVfc3RvcmFnZV9wYXRofS4iKQogICAgICAgIGNyZWF0ZV9leGNlbF9maWxlKHsneCc6IHNlbGYuZmlsZVsneCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAneSc6IHNlbGYuZmlsZVsneSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnb3BlcmF0aW9uJzogc2VsZi5maWxlWydvcGVyYXRpb24nXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3VsdCc6IHNlbGYucmVzdWx0c30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zdG9yYWdlX3BhdGgpCgogICAgZGVmIGl0ZXJhdGVfZmlsZShzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUaGlzIGZ1bmN0aW9ucyByZWFkcyB0aGUgcm93cyBvZiB0aGUgZmlsZSBhbmQgcGFzc2VzIHRoZSB4LCB5LCBhbmQgb3BlcmF0aW9uIHBhcmFtZXRlcnMgdG8gZ2V0IHRoZSByZXN1bHQuCiAgICAgICAgSXRlcmF0ZXMgb3ZlciB0aGUgcm93cyBpbiB0aGUgZmlsZSBhbmQgc2VuZHMgaXQgdG8gdGhlIHN0cmF0ZWd5IGNsYXNzLgogICAgICAgIFJlc3VsdHMgYXJlIGRpc3BsYXllZCB1cHRvIDIgZGVjaW1hbCBwbGFjZXMuIEZpbmFsbHksIEFwcGVuZHMgdGhlIHJlc3VsdHMgaW4gbGlzdC4KICAgICAgICBBZGRpdGlvbmFsbHksIGl0IHByaW50cyBvdXQgdGhlIGxvZy4KICAgICAgICAiIiIKICAgICAgICBmb3IgaWR4LCByb3cgaW4gc2VsZi5maWxlLml0ZXJyb3dzKCk6CiAgICAgICAgICAgIGNhbGN1bGF0b3IgPSBDYWxjdWxhdG9yU3RyYXRlZ3kocm93WydvcGVyYXRpb24nXSwgcm93Wyd4J10sIHJvd1sneSddKQogICAgICAgICAgICByZXN1bHQgPSBjb252ZXJ0X3Jlc3VsdChjYWxjdWxhdG9yLmdldF9yZXN1bHQoKSkKICAgICAgICAgICAgc2VsZi5yZXN1bHRzLmFwcGVuZChyZXN1bHQpCiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGYiRXhlY3V0ZWQgUm93IHtpZHggKyAxfSwgeDoge3Jvd1sneCddfSwgeToge3Jvd1sneSddfSwgIgogICAgICAgICAgICAgICAgICAgICAgICBmIm9wZXJhdGlvbjoge3Jvd1snb3BlcmF0aW9uJ119LCByZXN1bHQ6IHtyZXN1bHR9IikKCiAgICBkZWYgZG9fYWN0aW9uKHNlbGYpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIiIiCiAgICAgICAgRG8gYWN0aW9uIGNhbGxzIGFsbCB0aGUgbmVjZXNzYXJ5IGZ1bmN0aW9uIHJlcXVpcmVkIGZvciB0aGUgcHJvY2Vzcy4KICAgICAgICAiIiIKICAgICAgICBzZWxmLmZpbGUgPSByZWFkX2V4Y2VsX2ZpbGUoaW5wdXRfZmlsZSkKPHxmaW1fZW5kfD4="]
["660829cea59270716cc1cc4ad286dcaf19ccaa01-3","660829cea59270716cc1cc4ad286dcaf19ccaa01","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKd2hpbGUgVHJ1ZToKICAgIHIgPSByZXF1ZXN0cy5nZXQoImh0dHBzOi8vbWFya2V0cy5idXNpbmVzc2luc2lkZXIuY29tL2luZGV4L2Rvd19qb25lcyIpCiAgICBzb3VwID0gQmVhdXRpZnVsU291cChyLnRleHQsICJodG1sLnBhcnNlciIpCgogICAgI0RvdyBKb25lcyAzMCBDdXJyZW50IEluZGV4IFByaWNlCiAgICBESkNQID0gc3RyKHNvdXAuZmluZChjbGFzc189InByaWNlLXNlY3Rpb25fX2N1cnJlbnQtdmFsdWUiKSkKICAgIERKQ1AgPSAocmUuc3ViKCc8W14+XSs+JywnJyxESkNQKSkuc3RyaXAoKQoKICAgICNEb3cgSm9uZXMgMzAgUG9pbnRzCiAgICBESlAgPSBzdHIoc291cC5maW5kKGNsYXNzXz0icHJpY2Utc2VjdGlvbl9fYWJzb2x1dGUtdmFsdWUiKSkKICAgIERKUCA9IChyZS5zdWIoJzxbXj5dKz4nLCcnLERKUCkpLnN0cmlwKCkKCiAgICAjRG93IEpvbmVzIDMwIFBlcmNlbnRhZ2UKICAgIERKUFAgPSBzdHIoc291cC5maW5kKGNsYXNzXz0icHJpY2Utc2VjdGlvbl9fcmVsYXRpdmUtdmFsdWUiKSkKICAgIERKUFAgPSAocmUuc3ViKCc8W14+XSs+JywnJyxESlBQKSkuc3RyaXAoKQogICAgCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgogICAgciA9IHJlcXVlc3RzLmdldCgiaHR0cHM6Ly9tYXJrZXRzLmJ1c2luZXNzaW5zaWRlci5jb20vaW5kZXgvcyZwXzUwMCIpCiAgICBzb3VwID0gQmVhdXRpZnVsU291cChyLnRleHQsICJodG1sLnBhcnNlciIpCiAgICAKICAgICNTJlAgNTAwIEN1cnJlbnQgSW5kZXggUHJpY2UKICAgIFNQQ1AgPSBzdHIoc291cC5maW5kKGNsYXNzXz0icHJpY2Utc2VjdGlvbl9fY3VycmVudC12YWx1ZSIpKQogICAgU1BDUCA9IChyZS5zdWIoJzxbXj5dKz4nLCcnLFNQQ1ApKS5zdHJpcCgpCgogICAgI1MmUCA1MDAgUG9pbnRzCiAgICBTUFAgPSBzdHIoc291cC5maW5kKGNsYXNzXz0icHJpY2Utc2VjdGlvbl9fYWJzb2x1dGUtdmFsdWUiKSkKICAgIFNQUCA9IChyZS5zdWIoJzxbXj5dKz4nLCcnLFNQUCkpLnN0cmlwKCkKCiAgICAjUyZQIDUwMCBQZXJjZW50YWdlCiAgICBTUFBQID0gc3RyKHNvdXAuZmluZChjbGFzc189InByaWNlLXNlY3Rpb25fX3JlbGF0aXZlLXZhbHVlIikpCiAgICBTUFBQID0gKHJlLnN1YignPFtePl0rPicsJycsU1BQUCkpLnN0cmlwKCkKICAgIAogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKICAgIHIgPSByZXF1ZXN0cy5nZXQoImh0dHBzOi8vbWFya2V0cy5idXNpbmVzc2luc2lkZXIuY29tL2luZGV4L25hc2RhcV8xMDAiKQogICAgc291cCA9IEJlYXV0aWZ1bFNvdXAoci50ZXh0LCAiaHRtbC5wYXJzZXIiKQogICAgCiAgICAjTkFTREFRIDEwMCBDdXJyZW50IEluZGV4IFByaWNlCiAgICBOQ1AgPSBzdHIoc291cC5maW5kKGNsYXNzXz0icHJpY2Utc2VjdGlvbl9fY3VycmVudC12YWx1ZSIpKQogICAgTkNQID0gKHJlLnN1YignPFtePl0rPicsJycsTkNQKSkuc3RyaXAoKQoKICAgICNOQVNEQVEgMTAwIFBvaW50cwogICAgTlBQID0gc3RyKHNvdXAuZmluZChjbGFzc189InByaWNlLXNlY3Rpb25fX2Fic29sdXRlLXZhbHVlIikpCiAgICBOUFAgPSAocmUuc3ViKCc8W14+XSs+JywnJyxOUFApKS5zdHJpcCgpCgogICAgI05BU0RBUSAxMDAgUGVyY2VudGFnZQogICAgTlBQUCA9IHN0cihzb3VwLmZpbmQoY2xhc3NfPSJwcmljZS1zZWN0aW9uX19yZWxhdGl2ZS12YWx1ZSIpKQogICAgTlBQUCA9IChyZS5zdWIoJzxbXj5dKz4nLCcnLE5QUFApKS5zdHJpcCgpCiAgICAKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiAgICBpZihESlAuZmluZCgiLSIpICE9IDApOgogICAgICAgIERKUCA9ICIrIiArIERKUAogICAgaWYoU1BQLmZpbmQoIi0iKSAhPSAwKToKICAgICAgICBTUFAgPSAiKyIgKyBTUFAKICAgIGlmKE5QUC5maW5kKCItIikgIT0gMCk6CiAgICAgICAgTlBQID0gIisiICsgTlBQCgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKICAgIGlmKERKUFAuZmluZCgiLSIpICE9IDApOgogICAgICAgIERKUFAgPSAiKyIgKyBESlBQCiAgICBpZihTUFBQLmZpbmQoIi0iKSAhPSAwKToKICAgICAgICBTUFBQID0gIisiICsgU1BQUAogICAgaWYoTlBQUC5maW5kKCItIikgIT0gMCk6CiAgICAgICAgTlBQUCA9ICIrIiArIE5QUFAKICAgIHByaW50KCIrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyIpCiAgICBwcmludCgifCBbREpJQV0gRG93IEpvbmVzIDMwOiAiICsgREpDUCArICIsICIgKyBESlAgKyAiLCAiICsgREpQUCArICIgfCIpCiAgICBwcmludCgifCBbSU5YXSBTJlAgNTAwOiAiICsgU1BDUCArICIsICIgKyBTUFAgKyAiLCAiICsgU1BQUCArICIgICAgICAgICB8IikKICAgIHByaW50KCJ8IFtORFhdIE5BU0RBUSAxMDA6ICIgKyBOQ1AgKyAiLCAiICsgTlBQICsgIiwgIiArIE5QUFAgKyAiICAgICB8IikKICAgIHByaW50KCIrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyIpCiAgICB0aW1lLnNsZWVwKDUpCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCByZXF1ZXN0cwppbXBvcnQgdGltZQppbXBvcnQgcmUKZnJvbSBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKPHxmaW1fZW5kfD4="]
["66d696d6b90d20dd40ee07aaeefc7ad4a57bff3f-2","66d696d6b90d20dd40ee07aaeefc7ad4a57bff3f","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBUaGlzIGZpbGUgYXMgd2VsbCBhcyB0aGUgd2hvbGUgdHNmcmVzaCBwYWNrYWdlIGFyZSBsaWNlbmNlZCB1bmRlciB0aGUgTUlUIGxpY2VuY2UgKHNlZSB0aGUgTElDRU5DRS50eHQpCiMgTWF4aW1pbGlhbiBDaHJpc3QgKG1heGltaWxpYW5jaHJpc3QuY29tKSwgQmx1ZSBZb25kZXIgR21iaCwgMjAxNgppbXBvcnQgcHl0ZXN0CmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCgpmcm9tIHRzZnJlc2guZGVmYXVsdHMgaW1wb3J0IFRFU1RfRk9SX0JJTkFSWV9UQVJHRVRfUkVBTF9GRUFUVVJFCmZyb20gdHNmcmVzaC5mZWF0dXJlX3NlbGVjdGlvbi5zaWduaWZpY2FuY2VfdGVzdHMgaW1wb3J0IHRhcmdldF9iaW5hcnlfZmVhdHVyZV9iaW5hcnlfdGVzdCwgXAogICAgdGFyZ2V0X2JpbmFyeV9mZWF0dXJlX3JlYWxfdGVzdCwgdGFyZ2V0X3JlYWxfZmVhdHVyZV9yZWFsX3Rlc3QsIHRhcmdldF9yZWFsX2ZlYXR1cmVfYmluYXJ5X3Rlc3QKCgpAcHl0ZXN0LmZpeHR1cmUoKQpkZWYgc2V0X3JhbmRvbV9zZWVkKCk6CiAgICBucC5yYW5kb20uc2VlZChzZWVkPTQyKQoKCkBweXRlc3QuZml4dHVyZSgpCmRlZiBiaW5hcnlfZmVhdHVyZShzZXRfcmFuZG9tX3NlZWQpOgogICAgcmV0dXJuIHBkLlNlcmllcyhucC5yYW5kb20uYmlub21pYWwoMSwgMC41LCAyNTApLCBuYW1lPSJURVNUIikKCgpAcHl0ZXN0LmZpeHR1cmUoKQpkZWYgYmluYXJ5X3RhcmdldF9ub3RfcmVsYXRlZChzZXRfcmFuZG9tX3NlZWQpOgogICAgcmV0dXJuIHBkLlNlcmllcyhucC5yYW5kb20uYmlub21pYWwoMSwgMC41LCAyNTApKQoKCkBweXRlc3QuZml4dHVyZSgpCmRlZiByZWFsX2ZlYXR1cmUoc2V0X3JhbmRvbV9zZWVkKToKICAgIHJldHVybiBwZC5TZXJpZXMobnAucmFuZG9tLm5vcm1hbCgwLCAxLCAyNTApLCBuYW1lPSJURVNUIikKCgpAcHl0ZXN0LmZpeHR1cmUoKQpkZWYgcmVhbF90YXJnZXRfbm90X3JlbGF0ZWQoc2V0X3JhbmRvbV9zZWVkKToKICAgIHJldHVybiBwZC5TZXJpZXMobnAucmFuZG9tLm5vcm1hbCgwLCAxLCAyNTApKQoKCmNsYXNzIFRlc3RVbnNpZ25pZmljYW50OgogICAgQHB5dGVzdC5maXh0dXJlKCkKICAgIGRlZiBtaW5pbWFsX3BfdmFsdWVfZm9yX3Vuc2lnbmlmaWNhbnRfZmVhdHVyZXMoc2VsZik6CiAgICAgICAgcmV0dXJuIDAuMDUKCgogICAgZGVmIHRlc3RfZmVhdHVyZV9zZWxlY3Rpb25fdGFyZ2V0X2JpbmFyeV9mZWF0dXJlc19iaW5hcnkoc2VsZiwgbWluaW1hbF9wX3ZhbHVlX2Zvcl91bnNpZ25pZmljYW50X2ZlYXR1cmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlfZmVhdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5X3RhcmdldF9ub3RfcmVsYXRlZCk6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCBpZiB0aGUgcF92YWx1ZSByZXR1cm5lZCBieSB0YXJnZXRfYmluYXJ5X2ZlYXR1cmVfYmluYXJ5X3Rlc3QgaXMKICAgICAgICBsYXJnZSBlbm91Z2ggZm9yIGhpZ2hseSB1bnNpZ25pZmljYW50IGZlYXR1cmVzLgogICAgICAgICIiIgogICAgICAgIHBfdmFsdWUgPSB0YXJnZXRfYmluYXJ5X2ZlYXR1cmVfYmluYXJ5X3Rlc3QoYmluYXJ5X2ZlYXR1cmUsIGJpbmFyeV90YXJnZXRfbm90X3JlbGF0ZWQpCiAgICAgICAgYXNzZXJ0IG1pbmltYWxfcF92YWx1ZV9mb3JfdW5zaWduaWZpY2FudF9mZWF0dXJlcyA8IHBfdmFsdWUKCgogICAgZGVmIHRlc3RfZmVhdHVyZV9zZWxlY3Rpb25fdGFyZ2V0X2JpbmFyeV9mZWF0dXJlc19yZWFsdmFsdWVkKHNlbGYsIG1pbmltYWxfcF92YWx1ZV9mb3JfdW5zaWduaWZpY2FudF9mZWF0dXJlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxfZmVhdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyeV90YXJnZXRfbm90X3JlbGF0ZWQpOgogICAgICAgICIiIgogICAgICAgIFRlc3QgaWYgdGhlIHBfdmFsdWUgcmV0dXJuZWQgYnkgdGFyZ2V0X2JpbmFyeV9mZWF0dXJlX2JpbmFyeV90ZXN0IGlzCiAgICAgICAgbGFyZ2UgZW5vdWdoIGZvciBoaWdobHkgdW5zaWduaWZpY2FudCBmZWF0dXJlcy4KICAgICAgICAiIiIKICAgICAgICBwX3ZhbHVlID0gdGFyZ2V0X2JpbmFyeV9mZWF0dXJlX3JlYWxfdGVzdChyZWFsX2ZlYXR1cmUsIGJpbmFyeV90YXJnZXRfbm90X3JlbGF0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVF9GT1JfQklOQVJZX1RBUkdFVF9SRUFMX0ZFQVRVUkUpCiAgICAgICAgYXNzZXJ0IG1pbmltYWxfcF92YWx1ZV9mb3JfdW5zaWduaWZpY2FudF9mZWF0dXJlcyA8IHBfdmFsdWUKCgogICAgZGVmIHRlc3RfZmVhdHVyZV9zZWxlY3Rpb25fdGFyZ2V0X3JlYWx2YWx1ZWRfZmVhdHVyZXNfYmluYXJ5KHNlbGYsIG1pbmltYWxfcF92YWx1ZV9mb3JfdW5zaWduaWZpY2FudF9mZWF0dXJlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyeV9mZWF0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbF90YXJnZXRfbm90X3JlbGF0ZWQpOgogICAgICAgICIiIgogICAgICAgIFRlc3QgaWYgdGhlIHBfdmFsdWUgcmV0dXJuZWQgYnkgdGFyZ2V0X3JlYWxfZmVhdHVyZV9iaW5hcnlfdGVzdCBpcwogICAgICAgIGxhcmdlIGVub3VnaCBmb3IgaGlnaGx5IHVuc2lnbmlmaWNhbnQgZmVhdHVyZXMuIiIiCiAgICAgICAgcF92YWx1ZSA9IHRhcmdldF9yZWFsX2ZlYXR1cmVfYmluYXJ5X3Rlc3QoYmluYXJ5X2ZlYXR1cmUsIHJlYWxfdGFyZ2V0X25vdF9yZWxhdGVkKQogICAgICAgIGFzc2VydCBtaW5pbWFsX3BfdmFsdWVfZm9yX3Vuc2lnbmlmaWNhbnRfZmVhdHVyZXMgPCBwX3ZhbHVlCgoKICAgIGRlZiB0ZXN0X2ZlYXR1cmVfc2VsZWN0aW9uX3RhcmdldF9yZWFsdmFsdWVkX2ZlYXR1cmVzX3JlYWx2YWx1ZWQoc2VsZiwgbWluaW1hbF9wX3ZhbHVlX2Zvcl91bnNpZ25pZmljYW50X2ZlYXR1cmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxfZmVhdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsX3RhcmdldF9ub3RfcmVsYXRlZCk6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCBpZiB0aGUgcF92YWx1ZSByZXR1cm5lZCBieSB0YXJnZXRfcmVhbF9mZWF0dXJlX3JlYWxfdGVzdCBpcwogICAgICAgIGxhcmdlIGVub3VnaCBmb3IgaGlnaGx5IHVuc2lnbmlmaWNhbnQgZmVhdHVyZXMuCiAgICAgICAgIiIiCiAgICAgICAgcF92YWx1ZSA9IHRhcmdldF9yZWFsX2ZlYXR1cmVfcmVhbF90ZXN0KHJlYWxfZmVhdHVyZSwgcmVhbF90YXJnZXRfbm90X3JlbGF0ZWQpCiAgICAgICAgYXNzZXJ0IG1pbmltYWxfcF92YWx1ZV9mb3JfdW5zaWduaWZpY2FudF9mZWF0dXJlcyA8IHBfdmFsdWUKCgpjbGFzcyBUZXN0U2lnbmlmaWNhbnQ6CiAgICBAcHl0ZXN0LmZpeHR1cmUoKQogICAgZGVmIG1heGltYWxfcF92YWx1ZV9mb3Jfc2lnbmlmaWNhbnRfZmVhdHVyZXMoc2VsZik6CiAgICAgICAgcmV0dXJuIDAuMTUKCiAgICBkZWYgdGVzdF9mZWF0dXJlX3NlbGVjdGlvbl90YXJnZXRfYmluYXJ5X2ZlYXR1cmVzX2JpbmFyeShzZWxmLCBtYXhpbWFsX3BfdmFsdWVfZm9yX3NpZ25pZmljYW50X2ZlYXR1cmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlfZmVhdHVyZSk6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCBpZiB0aGUgcF92YWx1ZSByZXR1cm5lZCBieSB0YXJnZXRfYmluYXJ5X2ZlYXR1cmVfYmluYXJ5X3Rlc3QgaXMKICAgICAgICBsb3cgZW5vdWdoIGZvciBoaWdobHkgc2lnbmlmaWNhbnQgZmVhdHVyZXMuCiAgICAgICAgIiIiCiAgICAgICAgeSA9IGJpbmFyeV9mZWF0dXJlIC0gcGQuU2VyaWVzKG5wLnJhbmRvbS5iaW5vbWlhbCgxLCAwLjEsIDI1MCkgKyBucC5yYW5kb20uYmlub21pYWwoMSwgMC4xLCAyNTApKQogICAgICAgIHlbeSA9PSAtMV0gPSAwCiAgICAgICAgeVt5ID09IC0yXSA9IDAKICAgICAgICB5W3kgPT0gMl0gPSAxCgogICAgICAgIHBfdmFsdWUgPSB0YXJnZXRfYmluYXJ5X2ZlYXR1cmVfYmluYXJ5X3Rlc3QoYmluYXJ5X2ZlYXR1cmUsIHkpCiAgICAgICAgYXNzZXJ0IG1heGltYWxfcF92YWx1ZV9mb3Jfc2lnbmlmaWNhbnRfZmVhdHVyZXMgPiBwX3ZhbHVlCgoKICAgIGRlZiB0ZXN0X2ZlYXR1cmVfc2VsZWN0aW9uX3RhcmdldF9iaW5hcnlfZmVhdHVyZXNfcmVhbHZhbHVlZF9tYW5uKHNlbGYsIG1heGltYWxfcF92YWx1ZV9mb3Jfc2lnbmlmaWNhbnRfZmVhdHVyZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxfZmVhdHVyZSk6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCBpZiB0aGUgcF92YWx1ZSByZXR1cm5lZCBieSB0YXJnZXRfYmluYXJ5X2ZlYXR1cmVfcmVhbF90ZXN0IGlzCiAgICAgICAgbG93IGVub3VnaCBmb3IgaGlnaGx5IHNpZ25pZmljYW50IGZlYXR1cmVzLgogICAgICAgICIiIgogICAgICAgIHkgPSBwZC5TZXJpZXMobnAubmRhcnJheSgyNTApKQogICAgICAgIHlbcmVhbF9mZWF0dXJlID49IDAuM10gPSAxCiAgICAgICAgeVtyZWFsX2ZlYXR1cmUgPCAwLjNdID0gMAogICAgICAgIHkgLT0gcGQuU2VyaWVzKG5wLnJhbmRvbS5iaW5vbWlhbCgxLCAwLjEsIDI1MCkpCiAgICAgICAgeVt5ID09IC0xXSA9IDAKICAgICAgICB5W3kgPT0gMl0gPSAxCgogICAgICAgIHBfdmFsdWUgPSB0YXJnZXRfYmluYXJ5X2ZlYXR1cmVfcmVhbF90ZXN0KHJlYWxfZmVhdHVyZSwgeSwgVEVTVF9GT1JfQklOQVJZX1RBUkdFVF9SRUFMX0ZFQVRVUkUpCiAgICAgICAgYXNzZXJ0IG1heGltYWxfcF92YWx1ZV9mb3Jfc2lnbmlmaWNhbnRfZmVhdHVyZXMgPiBwX3ZhbHVlCgoKICAgIGRlZiB0ZXN0X2ZlYXR1cmVfc2VsZWN0aW9uX3RhcmdldF9iaW5hcnlfZmVhdHVyZXNfcmVhbHZhbHVlZF9zbWlyKHNlbGYsIG1heGltYWxfcF92YWx1ZV9mb3Jfc2lnbmlmaWNhbnRfZmVhdHVyZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxfZmVhdHVyZSk6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCBpZiB0aGUgcF92YWx1ZSByZXR1cm5lZCBieSB0YXJnZXRfYmluYXJ5X2ZlYXR1cmVfcmVhbF90ZXN0IGlzCiAgICAgICAgbG93IGVub3VnaCBmb3IgaGlnaGx5IHNpZ25pZmljYW50IGZlYXR1cmVzLgogICAgICAgICIiIgogICAgICAgIHkgPSBwZC5TZXJpZXMobnAubmRhcnJheSgyNTApKQogICAgICAgIHlbcmVhbF9mZWF0dXJlID49IDAuM10gPSAxCiAgICAgICAgeVtyZWFsX2ZlYXR1cmUgPCAwLjNdID0gMAogICAgICAgIHkgLT0gcGQuU2VyaWVzKG5wLnJhbmRvbS5iaW5vbWlhbCgxLCAwLjIsIDI1MCkpCiAgICAgICAgeVt5ID09IC0xXSA9IDAKICAgICAgICB5W3kgPT0gMl0gPSAxCgogICAgICAgIHBfdmFsdWUgPSB0YXJnZXRfYmluYXJ5X2ZlYXR1cmVfcmVhbF90ZXN0KHJlYWxfZmVhdHVyZSwgeSwgdGVzdD0ic21pciIpCiAgICAgICAgYXNzZXJ0IG1heGltYWxfcF92YWx1ZV9mb3Jfc2lnbmlmaWNhbnRfZmVhdHVyZXMgPiBwX3ZhbHVlCgoKICAgIGRlZiB0ZXN0X2ZlYXR1cmVfc2VsZWN0aW9uX3RhcmdldF9yZWFsdmFsdWVkX2ZlYXR1cmVzX2JpbmFyeShzZWxmLCBtYXhpbWFsX3BfdmFsdWVfZm9yX3NpZ25pZmljYW50X2ZlYXR1cmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5X2ZlYXR1cmUpOgogICAgICAgICIiIgogICAgICAgIFRlc3QgaWYgdGhlIHBfdmFsdWUgcmV0dXJuZWQgYnkgdGFyZ2V0X3JlYWxfZmVhdHVyZV9iaW5hcnlfdGVzdCBpcwogICAgICAgIGxvdyBlbm91Z2ggZm9yIGhpZ2hseSBzaWduaWZpY2FudCBmZWF0dXJlcy4KICAgICAgICAiIiIKICAgICAgICB5ID0gYmluYXJ5X2ZlYXR1cmUgKiBwZC5TZXJpZXMobnAucmFuZG9tLm5vcm1hbCgwLCAxLCAyNTApKSArIHBkLlNlcmllcyhucC5yYW5kb20ubm9ybWFsKDAsIDAuMjUsIDI1MCkpCgogICAgICAgIHBfdmFsdWUgPSB0YXJnZXRfcmVhbF9mZWF0dXJlX2JpbmFyeV90ZXN0KGJpbmFyeV9mZWF0dXJlLCB5KQogICAgICAgIGFzc2VydCBtYXhpbWFsX3BfdmFsdWVfZm9yX3NpZ25pZmljYW50X2ZlYXR1cmVzID4gcF92YWx1ZQoKCiAgICBkZWYgdGVzdF9mZWF0dXJlX3NlbGVjdGlvbl90YXJnZXRfcmVhbHZhbHVlZF9mZWF0dXJlc19yZWFsdmFsdWVkKHNlbGYsIG1heGltYWxfcF92YWx1ZV9mb3Jfc2lnbmlmaWNhbnRfZmVhdHVyZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbF9mZWF0dXJlKToKICAgICAgICAiIiIKICAgICAgICBUZXN0IGlmIHRoZSBwX3ZhbHVlIHJldHVybmVkIGJ5IHRhcmdldF9yZWFsX2ZlYXR1cmVfcmVhbF90ZXN0IGlzCiAgICAgICAgbG93IGVub3VnaCBmb3IgaGlnaGx5IHNpZ25pZmljYW50IGZlYXR1cmVzLgogICAgICAgICIiIgogICAgICAgIHkgPSByZWFsX2ZlYXR1cmUgKyBwZC5TZXJpZXMobnAucmFuZG9tLm5vcm1hbCgwLCAxLCAyNTApKQoKICAgICAgICBwX3ZhbHVlID0gdGFyZ2V0X3JlYWxfZmVhdHVyZV9yZWFsX3Rlc3QocmVhbF9mZWF0dXJlLCB5KQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGFzc2VydCBtYXhpbWFsX3BfdmFsdWVfZm9yX3NpZ25pZmljYW50X2ZlYXR1cmVzID4gcF92YWx1ZQo8fGZpbV9lbmR8Pg=="]
["a52e36f3352c417da91a2b87f9e0e369a0eb4922-1","a52e36f3352c417da91a2b87f9e0e369a0eb4922","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoKZnJvbSAuZXJyb3JfY29kZXMgaW1wb3J0ICoKCmNsYXNzIHN5c3RlbV9kZWY6CiAgICAKICAgIF9fSUJDPTAgI0lCQyBpcyB0aGUgc3lzdGVtJ3MgYmFyeWNlbnRyZS4gRGVmYXVsdCB2YWx1ZSBpcyAwLCB3aGljaCBpcyB0aGUgc29sYXIgc3lzdGVtIGJhcnljZW50cmUuCiAgICAKICAgIF9fSVBCPS05OTkgIyBOQUlGIElEIG9mIHByaW1hcnkgYm9keS4gLTk5OSBpbXBsaWVzIHN5c3RlbSBoYXMgbm90IGJlZW4gaW5pdGlhbGlzZWQuCiAgICAKICAgIF9fSVNCPS05OTkgIyAgTkFJRiBJRCBvZiBTZWNvbmRhcnkgYm9keS4gLTk5OSBpbXBsaWVzIDJuZCBib2R5IGhhcyBub3QgYmVlbiBpbml0aWFsaXNlZC4KICAgIAogICAgX19JU19SVEJQPUZhbHNlCiAgICAKICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CiAgICAgICAgIyBFbXB0eSBjb25zdHVjdG9yLiBDYWxsZWQgb24gZmlyc3QgaW5pdGlsaXNhdGlvbiBvZiBzcHljZV9jb3JlIG9iamVjdC4KICAgICAgICAKICAgICAgICBpZiBsZW4oYXJncyk9PTA6CiAgICAgICAgICAgIHJldHVybgogICAgICAgIGVsaWYgbGVuKGFyZ3MpPj0yOgogICAgICAgICAgICAKICAgICAgICAgICAgIyMgMmJvZHkgc3lzdGVtIGNvbnN0cnVjdG9yLgogICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShhcmdzWzBdLCBpbnQpKSAmIChpc2luc3RhbmNlKGFyZ3NbMV0sIGludCkpOgogICAgICAgICAgICAgICAgc2VsZi5fX0lQQj1hcmdzWzBdCiAgICAgICAgICAgICAgICBzZWxmLl9fSVNCPWFyZ3NbMV0KICAgICAgICAgICAgICAgIGlmKGxlbihhcmdzKT49Myk6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5fX0lTX1JUQlA9VHJ1ZQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGV4aXQoZXJyb3JfY29kZXMuc3lzdGVtX2RlZl8yYm9keV9lcnJvcikKICAgICAgICAKICAgICAgICBlbHNlOgogICAgICAgICAgICBleGl0KGVycm9yX2NvZGVzLnN5c3RlbV9kZWZfY29uc3RydWN0b3JfZXJyb3IpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgCiAgICAgICAgcmV0dXJuCiAgICAKICAgIAo8fGZpbV9lbmR8Pg=="]
["c6f2d2b67b2872de2ce96aba6263af2dcf643891-2","c6f2d2b67b2872de2ce96aba6263af2dcf643891","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgppbXBvcnQgdGVuc29yZmxvdyBhcyB0Zgpmcm9tIHRlbnNvcmZsb3cucHl0aG9uLmVhZ2VyIGltcG9ydCBjb250ZXh0CmZyb20gdGVuc29yZmxvdy5weXRob24uZnJhbWV3b3JrIGltcG9ydCBvcHMKZnJvbSB0ZW5zb3JmbG93LnB5dGhvbi5vcHMgaW1wb3J0IGNvbnRyb2xfZmxvd19vcHMKZnJvbSB0ZW5zb3JmbG93LnB5dGhvbi50cmFpbmluZyBpbXBvcnQgb3B0aW1pemVyCgoKY2xhc3MgTG9va2FoZWFkKG9wdGltaXplci5PcHRpbWl6ZXIpOgogICAgJycnVGVuc29yZmxvdyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbG9va2FoZWFkIHdyYXBwZXIuCgogICAgTG9va2FoZWFkIE9wdGltaXplcjogaHR0cHM6Ly9hcnhpdi5vcmcvYWJzLzE5MDcuMDg2MTAKICAgICcnJwoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpbWl6ZXIsIGxhX3N0ZXBzPTUsIGxhX2FscGhhPTAuOCwgdXNlX2xvY2tpbmc9RmFsc2UsIG5hbWU9Ikxvb2thaGVhZCIpOgogICAgICAgICIiIm9wdGltaXplcjogaW5uZXIgb3B0aW1pemVyCiAgICAgICAgbGFfc3RlcHMgKGludCk6IG51bWJlciBvZiBsb29rYWhlYWQgc3RlcHMKICAgICAgICBsYV9hbHBoYSAoZmxvYXQpOiBsaW5lYXIgaW50ZXJwb2xhdGlvbiBmYWN0b3IuIDEuMCByZWNvdmVycyB0aGUgaW5uZXIgb3B0aW1pemVyLgogICAgICAgICIiIgogICAgICAgIHN1cGVyKExvb2thaGVhZCwgc2VsZikuX19pbml0X18odXNlX2xvY2tpbmcsIG5hbWUpCiAgICAgICAgc2VsZi5vcHRpbWl6ZXIgPSBvcHRpbWl6ZXIKICAgICAgICBzZWxmLl9sYV9zdGVwID0gMAogICAgICAgIHNlbGYuX2xhX2FscGhhID0gbGFfYWxwaGEKICAgICAgICBzZWxmLl90b3RhbF9sYV9zdGVwcyA9IGxhX3N0ZXBzCgogICAgZGVmIF9jcmVhdGVfc2xvdHMoc2VsZiwgdmFyX2xpc3QpOgogICAgICAgIHNlbGYub3B0aW1pemVyLl9jcmVhdGVfc2xvdHModmFyX2xpc3QpCgogICAgICAgIHNlbGYuX3Zhcl9saXN0ID0gdmFyX2xpc3QKICAgICAgICBmaXJzdF92YXIgPSBtaW4odmFyX2xpc3QsIGtleT1sYW1iZGEgeDogeC5uYW1lKQogICAgICAgIHNlbGYuX2NyZWF0ZV9ub25fc2xvdF92YXJpYWJsZShpbml0aWFsX3ZhbHVlPXNlbGYuX2xhX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ImxhX3N0ZXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvY2F0ZV93aXRoPWZpcnN0X3ZhcikKCiAgICAgICAgIyBDcmVhdGUgc2xvdHMgZm9yIHRoZSBjYWNoZWQgcGFyYW1ldGVycy4KICAgICAgICBmb3IgdiBpbiB2YXJfbGlzdDoKICAgICAgICAgICAgc2VsZi5femVyb3Nfc2xvdCh2LCAiY2FjaGVkX3BhcmFtcyIsIHNlbGYuX25hbWUpCgogICAgZGVmIF9wcmVwYXJlKHNlbGYpOgogICAgICAgIHNlbGYub3B0aW1pemVyLl9wcmVwYXJlKCkKCiAgICAgICAgbGFfYWxwaGEgPSBzZWxmLl9jYWxsX2lmX2NhbGxhYmxlKHNlbGYuX2xhX2FscGhhKQogICAgICAgIHRvdGFsX2xhX3N0ZXBzID0gc2VsZi5fY2FsbF9pZl9jYWxsYWJsZShzZWxmLl90b3RhbF9sYV9zdGVwcykKCiAgICAgICAgc2VsZi5fbGFfYWxwaGFfdCA9IG9wcy5jb252ZXJ0X3RvX3RlbnNvcihsYV9hbHBoYSwgbmFtZT0ibGFfYWxwaGEiKQogICAgICAgIHNlbGYuX3RvdGFsX2xhX3N0ZXBzX3QgPSBvcHMuY29udmVydF90b190ZW5zb3IodG90YWxfbGFfc3RlcHMsIG5hbWU9InRvdGFsX2xhX3N0ZXBzIikKCiAgICBkZWYgX2dldF9sYV9zdGVwX2FjY3VtdWxhdG9ycyhzZWxmKToKICAgICAgICB3aXRoIG9wcy5pbml0X3Njb3BlKCk6CiAgICAgICAgICAgIGlmIGNvbnRleHQuZXhlY3V0aW5nX2VhZ2VybHkoKToKICAgICAgICAgICAgICAgIGdyYXBoID0gTm9uZQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgZ3JhcGggPSBvcHMuZ2V0X2RlZmF1bHRfZ3JhcGgoKQogICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X25vbl9zbG90X3ZhcmlhYmxlKCJsYV9zdGVwIiwgZ3JhcGg9Z3JhcGgpCgogICAgZGVmIF9hcHBseV9kZW5zZShzZWxmLCBncmFkLCB2YXIpOgogICAgICAgIHJldHVybiBzZWxmLm9wdGltaXplci5fYXBwbHlfZGVuc2UoZ3JhZCwgdmFyKQoKICAgIGRlZiBfcmVzb3VyY2VfYXBwbHlfZGVuc2Uoc2VsZiwgZ3JhZCwgdmFyKToKICAgICAgICByZXR1cm4gc2VsZi5vcHRpbWl6ZXIuX3Jlc291cmNlX2FwcGx5X2RlbnNlKGdyYWQsIHZhcikKCiAgICBkZWYgX2FwcGx5X3NwYXJzZV9zaGFyZWQoc2VsZiwgZ3JhZCwgdmFyLCBpbmRpY2VzLCBzY2F0dGVyX2FkZCk6CiAgICAgICAgcmV0dXJuIHNlbGYub3B0aW1pemVyLl9hcHBseV9zcGFyc2Vfc2hhcmVkKGdyYWQsIHZhciwgaW5kaWNlcywgc2NhdHRlcl9hZGQpCgogICAgZGVmIF9hcHBseV9zcGFyc2Uoc2VsZiwgZ3JhZCwgdmFyKToKICAgICAgICByZXR1cm4gc2VsZi5vcHRpbWl6ZXIuX2FwcGx5X3NwYXJzZShncmFkLCB2YXIpCgogICAgZGVmIF9yZXNvdXJjZV9zY2F0dGVyX2FkZChzZWxmLCB4LCBpLCB2KToKICAgICAgICByZXR1cm4gc2VsZi5vcHRpbWl6ZXIuX3Jlc291cmNlX3NjYXR0ZXJfYWRkKHgsIGksIHYpCgogICAgZGVmIF9yZXNvdXJjZV9hcHBseV9zcGFyc2Uoc2VsZiwgZ3JhZCwgdmFyLCBpbmRpY2VzKToKICAgICAgICByZXR1cm4gc2VsZi5vcHRpbWl6ZXIuX3Jlc291cmNlX2FwcGx5X3NwYXJzZShncmFkLCB2YXIsIGluZGljZXMpCgogICAgZGVmIF9maW5pc2goc2VsZiwgdXBkYXRlX29wcywgbmFtZV9zY29wZSk6CiAgICAgICAgIyBmaXggIkR1cGxpY2F0ZSBub2RlIG5hbWUgaW4gZ3JhcGgiIGlzc3VlCiAgICAgICAgIyBpbm5lcl9maW5pc2hfb3AgPSBzZWxmLm9wdGltaXplci5fZmluaXNoKHVwZGF0ZV9vcHMsIG5hbWVfc2NvcGUpCiAgICAgICAgaW5uZXJfZmluaXNoX29wID0gc2VsZi5vcHRpbWl6ZXIuX2ZpbmlzaCh1cGRhdGVfb3BzLCBuYW1lX3Njb3BlK3NlbGYub3B0aW1pemVyLl9uYW1lKycvJykKCiAgICAgICAgd2l0aCBvcHMuY29udHJvbF9kZXBlbmRlbmNpZXMoW2lubmVyX2ZpbmlzaF9vcCwgXSk6CiAgICAgICAgICAgIGxhX3N0ZXAgPSBzZWxmLl9nZXRfbGFfc3RlcF9hY2N1bXVsYXRvcnMoKQogICAgICAgICAgICB3aXRoIG9wcy5jb2xvY2F0ZV93aXRoKGxhX3N0ZXApOgogICAgICAgICAgICAgICAgZGVmIHVwZGF0ZV9sYV9zdGVwX2Z1bmMoKToKICAgICAgICAgICAgICAgICAgICAjIHVwZGF0ZSB0aGUgbGFfc3RlcAogICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sX2Zsb3dfb3BzLmdyb3VwKFtsYV9zdGVwLmFzc2lnbigKICAgICAgICAgICAgICAgICAgICAgICAgbGFfc3RlcCArIDEsIHVzZV9sb2NraW5nPXNlbGYuX3VzZV9sb2NraW5nKSwgXSkKCiAgICAgICAgICAgICAgICBkZWYgcHVsbF9iYWNrX2Z1bmMoKToKICAgICAgICAgICAgICAgICAgICAjIHVwZGF0ZSB0aGUgbGFfc3RlcAogICAgICAgICAgICAgICAgICAgIHVwZGF0ZV9sYV9zdGVwID0gbGFfc3RlcC5hc3NpZ24oCiAgICAgICAgICAgICAgICAgICAgICAgIDAsIHVzZV9sb2NraW5nPXNlbGYuX3VzZV9sb2NraW5nKQogICAgICAgICAgICAgICAgICAgICMgaW50ZXJwb2xhdGUgdGhlIHZhcmlhYmxlcwogICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRpb24gPSBbdi5hc3NpZ24oCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0X3Nsb3QodiwgImNhY2hlZF9wYXJhbXMiKSArIHNlbGYuX2xhX2FscGhhX3QgKiAodiAtIHNlbGYuZ2V0X3Nsb3QodiwgImNhY2hlZF9wYXJhbXMiKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdiBpbiBzZWxmLl92YXJfbGlzdF0KCiAgICAgICAgICAgICAgICAgICAgIyB1cGRhdGUgdGhlIGNhY2hlZCBwYXJhbXMKICAgICAgICAgICAgICAgICAgICB3aXRoIG9wcy5jb250cm9sX2RlcGVuZGVuY2llcyhpbnRlcnBvbGF0aW9uKToKICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlX2NhY2hlZF9wYXJhbXMgPSBbc2VsZi5nZXRfc2xvdCh2LCAiY2FjaGVkX3BhcmFtcyIpLmFzc2lnbih1cGRhdGVkX3YpIGZvciB2LCB1cGRhdGVkX3YgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwKHNlbGYuX3Zhcl9saXN0LCBpbnRlcnBvbGF0aW9uKV0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udHJvbF9mbG93X29wcy5ncm91cChbdXBkYXRlX2xhX3N0ZXAsIF0gKyBpbnRlcnBvbGF0aW9uICsgdXBkYXRlX2NhY2hlZF9wYXJhbXMpCgogICAgICAgICAgICAgICAgIyBjb25kaXRpb24gZm9yIHdoZW4gdG8gcHVsbCBiYWNrIHRoZSBwYXJhbXMKICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRmLmdyZWF0ZXJfZXF1YWwobGFfc3RlcCwgc2VsZi5fdG90YWxfbGFfc3RlcHNfdCkKICAgICAgICAgICAgICAgIHVwZGF0ZV9sb29rYWhlYWRfc3RhdGVzID0gdGYuY29uZChjb25kaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVsbF9iYWNrX2Z1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlX2xhX3N0ZXBfZnVuYywKPHxmaW1faG9sZXw+CiAgICAgICAgcmV0dXJuIGNvbnRyb2xfZmxvd19vcHMuZ3JvdXAoW2lubmVyX2ZpbmlzaF9vcCwgdXBkYXRlX2xvb2thaGVhZF9zdGF0ZXNdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bmFtZV9zY29wZSkKCiAgICBkZWYgX2NhbGxfaWZfY2FsbGFibGUoc2VsZiwgcGFyYW0pOgogICAgICAgICIiIkNhbGwgdGhlIGZ1bmN0aW9uIGlmIHBhcmFtIGlzIGNhbGxhYmxlLiIiIgogICAgICAgIHJldHVybiBwYXJhbSgpIGlmIGNhbGxhYmxlKHBhcmFtKSBlbHNlIHBhcmFtCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQoKPHxmaW1fZW5kfD4="]
["6c4c266982a608d9a1cced77584f463ea93ceaf3-1","6c4c266982a608d9a1cced77584f463ea93ceaf3","PHxmaW1fcHJlZml4fD4KZnJvbSBqYXguY29uZmlnIGltcG9ydCBjb25maWcKY29uZmlnLnVwZGF0ZSgiamF4X2VuYWJsZV94NjQiLCBUcnVlKQoKaW1wb3J0IGpheC5udW1weSBhcyBqbnAKZnJvbSBqYXggaW1wb3J0IGppdCwgZ3JhZCwgdm1hcApmcm9tIGpheCBpbXBvcnQgcmFuZG9tCmZyb20gamF4IGltcG9ydCBsYXgKZnJvbSBqYXggaW1wb3J0IGN1c3RvbV92anAKZnJvbSBqYXgub3BzIGltcG9ydCBpbmRleCwgaW5kZXhfdXBkYXRlCmZyb20gamF4LmZsYXR0ZW5fdXRpbCBpbXBvcnQgcmF2ZWxfcHl0cmVlCmZyb20gZnVuY3Rvb2xzIGltcG9ydCBwYXJ0aWFsCgpmcm9tIHNsaWNlcmVwYXJhbS5yb290ZmluZGVyIGltcG9ydCBkdWFsX2Jpc2VjdF9tZXRob2QsIFwKICAgIGJpc2VjdF9tZXRob2QsIGNob29zZV9zdGFydCwgc2luZ2xlX2Nob29zZV9zdGFydAoKZnJvbSBpbnNwZWN0IGltcG9ydCBzaWduYXR1cmUKaW1wb3J0IHdhcm5pbmdzIAoKZGVmIHNldHVwX3JlZmxlY3RpdmUobG9nX3BkZiwgRCwgUywgbnVtX2NoYWlucz0xLCB3PTEuMCwgcmVzZXRfaXRlcnM9MTApOgogICAgIyB3IGlzIHN0ZXAgc2l6ZQogICAgIyByZXNhbXBsZSBtb21lbnR1bSBldmVyeSBgcmVzYW1wbGVgIHN0ZXBzCgogICAgIyBzZXQgdXAgZm9yIGJhY2t3YXJkcyBwYXNzCiAgICAjIGNvbXB1dGUgbmVjZXNzYXJ5IGdyYWRpZW50cwogICAgIyBUT0RPIC0gbW9kaWZ5IGNvZGUgc28gbG9nX3BkZiBpcyBhbHdheXMgY2FsbGVkIGluIHNhbWUgb3JkZXIgKGZpeCB0aGUgdGhldGEgc3dpdGNoLCBqdXN0IHRha2UgZ3JhZCBkaWZmZXJlbnRseSkuCiAgICBkZWYgbG9nX3BkZl90aGV0YSh0aGV0YSwgeCk6ICAgIHJldHVybiBsb2dfcGRmKHgsIHRoZXRhKQogICAgZGVmIGxvZ19wZGZfeCh4LCB0aGV0YSk6ICAgICAgICByZXR1cm4gbG9nX3BkZih4LCB0aGV0YSkKICAgIGRlZiBsb2dfcGRmX2FkKHgsIHRoZXRhLCBhLCBkKTogcmV0dXJuIGxvZ19wZGYoeCArIGEgKiBkLCB0aGV0YSkKICAgIGdyYWRfeCA9IGppdChncmFkKGxvZ19wZGZfeCkpCiAgICBncmFkX3RoZXRhID0gaml0KGdyYWQobG9nX3BkZl90aGV0YSkpCiAgICBncmFkX3hfYWQgPSBqaXQoZ3JhZChsb2dfcGRmX2FkKSkKCiAgICBkZWYgZm9yd2FyZHNfc3RlcCh4LCB0aGV0YSwgdTEsIHAsIHcsIG1heGl0ZXI9MTAwKToKICAgICAgICB3cCA9IHcgKyAwLjAgIyB3cHJpbWUgaXMgY3VycmVudCBzdGVwIHNpemUKICAgICAgICB3dCA9IDAuMCAjIHd0IHRyYWNrcyBhY2N1bXVsYXRlZCBkaXN0YW5jZQogICAgICAgIHhwID0geCArIDAuMCAjIHhwcmltZSB0cmFja3MgY3VycmVudCBzdGF0ZQogICAgICAgICMgaW5pdF92YWwgPSBbeHAsIHAsIHdwLCB3dF0KICAgICAgICBpbml0X3ZhbCA9IFt4cCwgcCwgd3BdCgogICAgICAgICMgVE9ETzogYWxzbyBrZWVwIHRyYWNrIG9mIGxpc3Qgb2YgeCBib3VuZGFyeSBoaXRzLCBoJ3MsIHcncz8gYmFzaWNhbGx5LCB0aGUgcGF0aD8gCgogICAgICAgIGRlZiBjb25kX2Z1bih2YWwpOgogICAgICAgICAgICAjIHJ1biB3aGlsZSB3IDwgYWxwaGEKICAgICAgICAgICAgIyB4cCwgcCwgd3AsIHd0ID0gdmFsIAogICAgICAgICAgICAjIHJldHVybiB3dCA8IHcgCiAgICAgICAgICAgIHhwLCBwLCB3cCA9IHZhbCAKICAgICAgICAgICAgcmV0dXJuIHdwID4gMAoKICAgICAgICBkZWYgdXBkYXRlX2Z1bih2YWwpOgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgIyByZXR1cm4gW3hwLCBwLCB3cCwgd3QsIGFscGhhXQogICAgICAgICAgICB3cCA9IDAuMAogICAgICAgICAgICByZXR1cm4gW3hwLCBwLCB3cCwgYWxwaGFdCgogICAgICAgIGRlZiByZWZsZWN0X2Z1bih2YWwpOgogICAgICAgICAgICAjIHhwLCBwLCB3cCwgd3QsIGFscGhhID0gdmFsCiAgICAgICAgICAgIHhwLCBwLCB3cCwgYWxwaGEgPSB2YWwKICAgICAgICAgICAgeHAgPSB4cCArIGFscGhhICogcCAKICAgICAgICAgICAgaCA9IGdyYWRfeCh4cCwgdGhldGEpCiAgICAgICAgICAgICMgcCA9IHAgLSAyLiAqIGggKiBqbnAuZG90KHAsIGgpIC8gKGpucC5kb3QoaCwgaCkqKjIpCiAgICAgICAgICAgIHAgPSBwIC0gMi4gKiBoICogam5wLmRvdChwLCBoKSAvIChqbnAuZG90KGgsIGgpKQogICAgICAgICAgICB3cCA9IHdwIC0gYWxwaGEgCiAgICAgICAgICAgICMgd3QgPSB3dCArIGFscGhhIAogICAgICAgICAgICAjIHJldHVybiBbeHAsIHAsIHdwLCB3dCwgYWxwaGFdCiAgICAgICAgICAgIHJldHVybiBbeHAsIHAsIHdwLCBhbHBoYV0KCiAgICAgICAgZGVmIGJvZHlfZnVuKHZhbCk6CiAgICAgICAgICAgICMgeHAsIHAsIHdwLCB3dCA9IHZhbCAjIHVucGFjawogICAgICAgICAgICB4cCwgcCwgd3AgPSB2YWwgIyB1bnBhY2sKICAgICAgICAgICAgIyBpbml0IHJvb3QgZmluZGluZyBmdW5jdGlvbgogICAgICAgICAgICAjIHdlIGtlZXAgeCBpbiBzZWNvbmQgdGVybSBiZWNhdXNlIGl0IGRlZmluZXMgc2xpY2UgaGVpZ2h0CiAgICAgICAgICAgIGZ1bmMgPSBsYW1iZGEgYWxwaGEgOiBsb2dfcGRmKHhwICsgYWxwaGEgKiBwLCB0aGV0YSkgLSBsb2dfcGRmKHgsIHRoZXRhKSAtIGpucC5sb2codTEpICMgcm9vdAogICAgICAgICAgICAjIGNob29zZSBzdGFydAogICAgICAgICAgICBiID0gc2luZ2xlX2Nob29zZV9zdGFydChmdW5jKQogICAgICAgICAgICAjIGJpc2VjdCAoc2luZ2xlIGJpc2VjdGlvbiksIGJyYWNrZXQgaXMgW2EwLCBiXQogICAgICAgICAgICBhbHBoYSA9IGJpc2VjdF9tZXRob2QoZnVuYywgYj1iLCBhPTFlLTEwKQoKICAgICAgICAgICAgIyB1cGRhdGUKICAgICAgICAgICAgIyBjb25kX3ZhbCA9IFt4cCwgcCwgd3AsIHd0LCBhbHBoYV0KICAgICAgICAgICAgY29uZF92YWwgPSBbeHAsIHAsIHdwLCBhbHBoYV0KICAgICAgICAgICAgY29uZF92YWwgPSBsYXguY29uZCh3cCA8IGFscGhhLCB1cGRhdGVfZnVuLCByZWZsZWN0X2Z1biwgY29uZF92YWwpCiAgICAgICAgICAgICMgW3hwLCBwLCB3cCwgd3QsIGFscGhhXSA9IGNvbmRfdmFsCiAgICAgICAgICAgIFt4cCwgcCwgd3AsIGFscGhhXSA9IGNvbmRfdmFsCgogICAgICAgICAgICAjIHJldHVybiBbeHAsIHAsIHdwLCB3dF0KICAgICAgICAgICAgcmV0dXJuIFt4cCwgcCwgd3BdCgogICAgICAgIHZhbCA9IGxheC53aGlsZV9sb29wKGNvbmRfZnVuLCBib2R5X2Z1biwgaW5pdF92YWwpCiAgICAgICAgIyB1bnBhY2sgdmFsCiAgICAgICAgIyBbeHAsIHAsIHdwLCB3dF0gPSB2YWwKICAgICAgICBbeHAsIHAsIHdwXSA9IHZhbAoKICAgICAgICAjIHJldHVybiB4cCwgcCwgd3AsIHd0CiAgICAgICAgIyByZXR1cm4gY3VycmVudCBsb2NhdGlvbiBhbmQgbW9tZW50dW0gCiAgICAgICAgcmV0dXJuIHhwLCBwCgogICAgQGppdCAKICAgIGRlZiBmb3J3YXJkc19zYW1wbGUodGhldGEsIHgwLCBrZXkpOgogICAgICAgICMgZm9yd2FyZHNfc3RlcCh4LCB0aGV0YSwgdTEsIHAsIHcsIG1heGl0ZXI9MTAwKToKICAgICAgICAjIGhlcmUsIHJ1biBmb3J3YXJkcyBzdGVwIG11bHRpcGxlIHRpbWVzCiAgICAgICAgIyBlYWNoIHRpbWUsIHNhbXBsZSBuZXcgdmFsdWUgZm9yIHA/CiAgICAgICAgIyBidXQga2VlcCB3IHRoZSBzYW1lLiAKCiAgICAgICAgIyBnZW5lcmF0ZSByYW5kb21uZXNzIC0gdTFzLCBkcwogICAgICAgIGtleSwgKnN1YmtleXMgPSByYW5kb20uc3BsaXQoa2V5LCAzKQogICAgICAgIHVzID0gcmFuZG9tLnVuaWZvcm0oc3Via2V5c1swXSwgKG51bV9jaGFpbnMsIFMpKQogICAgICAgICMgVE9ETyAtIGNvdWxkIGRlY3JlYXNlIG51bWJlciBvZiBkJ3Mgc2FtcGxlZCBoZXJlLiAKICAgICAgICBkc191bm5vcm0gPSByYW5kb20ubm9ybWFsKHN1YmtleXNbMV0sIChTICogbnVtX2NoYWlucywgRCkpCiAgICAgICAgZHMgPSBkc191bm5vcm0gLyBqbnAuc3FydChqbnAuc3VtKGRzX3Vubm9ybSoqMiwgYXhpcz0xKSlbOixOb25lXQogICAgICAgIGRzID0gZHMucmVzaGFwZSgobnVtX2NoYWlucywgUywgRCkpCgogICAgICAgICMgaW5pdGlhbGl6ZSB2YXJpYWJsZXMKICAgICAgICB4cyA9IGpucC56ZXJvcygobnVtX2NoYWlucywgUysxLCBEKSkKICAgICAgICB4cyA9IGluZGV4X3VwZGF0ZSh4cywgaW5kZXhbOiwgMCwgOl0sIHgwKQogICAgICAgIHAgPSBkc1s6LCAwLCA6XSAjIGluaXRpYWwgcAogICAgICAgIGluaXRfdmFsID0gW3hzLCBwLCB4MF0KCiAgICAgICAgIyBkZWYgcmVzZXRfbW9tZW50dW0oaSwgcmVzZXRfaXRlcnMpOgogICAgICAgICMgICAgICIiIlJldHVybnMgdHJ1ZSBpZiByZXNldCBtb21lbnR1bS4KICAgICAgICAjICAgICBSZXNldF9pdGVycyBpcyBudW1iZXIgb2YgaXRlcnMgYmVmb3JlIHJlc2V0dGluZyBtb21lbnR1bS4iIiIKICAgICAgICAjICAgICBpZiBqbnAubW9kKGksIHJlc2V0X2l0ZXJzKSA9PSAwOgogICAgICAgICMgICAgICAgICByZXR1cm4gVHJ1ZSAKICAgICAgICAjICAgICBlbHNlOgogICAgICAgICMgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICAgICAgZGVmIGJvZHlfZnVuKGksIHZhbCk6CiAgICAgICAgICAgIHhzLCBwLCB4ID0gdmFsIAogICAgICAgICAgICAjIHhwLCBwID0gZm9yd2FyZHNfc3RlcCh4LCB0aGV0YSwgdTEsIHAsIHcsIG1heGl0ZXI9MTAwKQogICAgICAgICAgICAjIG5lZWQgYSBuZXcgdTEgYXQgZWFjaCBpdGVyYXRpb24sIGJ1dCBjYW4ga2VlcCBhcm91bmQgcC4KICAgICAgICAgICAgeCwgcCA9IHZtYXAoZm9yd2FyZHNfc3RlcCwgKDAsTm9uZSwwLDAsTm9uZSkpKHgsIHRoZXRhLCB1c1s6LGldLCBwLCB3KQogICAgICAgICAgICB4cyA9IGluZGV4X3VwZGF0ZSh4cywgaW5kZXhbOiwgaSsxLCA6XSwgeCkKICAgICAgICAgICAgIyByZXNldCBtb21lbnR1bSBldmVyeSByZXNldF9pdGVycyAKICAgICAgICAgICAgcCA9IGxheC5jb25kKGpucC5tb2QoaSsxLCByZXNldF9pdGVycykgPT0gMCwgCiAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgcCA6IGRzWzosIGksIDpdLAogICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHAgOiBwLAogICAgICAgICAgICAgICAgICAgICAgICAgcCkKICAgICAgICAgICAgdmFsID0gW3hzLCBwLCB4XQogICAgICAgICAgICByZXR1cm4gdmFsCiAgICAgICAgCiAgICAgICAgeHMsIHAsIHggPSBsYXguZm9yaV9sb29wKDAsIFMsIGJvZHlfZnVuLCBpbml0X3ZhbCkKICAgICAgICAKICAgICAgICByZXR1cm4geHMKCiAgICByZXR1cm4gZm9yd2FyZHNfc2FtcGxlIAo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAjIHhwLCBwLCB3cCwgd3QsIGFscGhhID0gdmFsCiAgICAgICAgICAgIHhwLCBwLCB3cCwgYWxwaGEgPSB2YWwKICAgICAgICAgICAgeHAgPSB4cCArIHdwICogcCAKICAgICAgICAgICAgIyB3dCA9IHd0ICsgd3AgCjx8ZmltX2VuZHw+"]
["a583b7defeecaa193e50902e61ca363ba15f1dc8-2","a583b7defeecaa193e50902e61ca363ba15f1dc8","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KZnJvbSAuIGltcG9ydCBtb2RlbHMKCiMgUmVnaXN0ZXIgeW91ciBtb2RlbHMgaGVyZS4KCmNsYXNzIFVzZXJBZG1pbihhZG1pbi5Nb2RlbEFkbWluKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgbGlzdF9kaXNwbGF5ID0gWydlbWFpbCcsJ3Bhc3N3b3JkJywnY190aW1lJywnaXAnXQoKPHxmaW1fZW5kfD4="]
["c6b832e34e489699a3b03b4f07e13255fa061b1c-2","c6b832e34e489699a3b03b4f07e13255fa061b1c","PHxmaW1fcHJlZml4fD4KIyBydW46IHB5dGhvbiBCb3NvbkpvYk1hc3Rlci5weSAxIGJvb3RzdHJhcC1weS1qb2JzIDQgMCAwIHMzOi8vYm9zb24tYmFzZS9weWJvc29uLXRlc3QvCiMgcnVuOiBweXRob24gQm9zb25Kb2JNYXN0ZXIucHkgMSBydW4tcHktdGFza3MgNCAxIDEsMiwzLDQgczM6Ly9ib3Nvbi1iYXNlL3B5Ym9zb24tdGVzdC8KCmltcG9ydCBzeXMKaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIHMzdXRpbHMgaW1wb3J0ICogCmZyb20gQVdTQmF0Y2hVdGlscyBpbXBvcnQgKgoKIyBwYXJzZSBhcmd1bWVudHMKYXJndW1lbnRzID0gc3lzLmFyZ3ZbMTpdCnByaW50ICdSZWFkaW5nIGpvYiBhcmd1bWVudHM6XG4ge30nLmZvcm1hdChhcmd1bWVudHMpCgppZiAobGVuKGFyZ3VtZW50cykgPT0gNik6CgliYXRjaF9pZCAgPSBhcmd1bWVudHNbMF0KCWpvYl90eXBlICA9IGFyZ3VtZW50c1sxXQoJbmpvYnMgICAgID0gaW50KGFyZ3VtZW50c1syXSkKCWpvYl9pZCAgICA9IGludChhcmd1bWVudHNbM10pCgl0YXNrX2lkcyAgPSBtYXAoaW50LCBhcmd1bWVudHNbNF0uc3BsaXQoIiwiKSkKCXMzX3BhdGggICA9IGFyZ3VtZW50c1s1XQoJcHJpbnQgYmF0Y2hfaWQsIGpvYl90eXBlLCBuam9icywgam9iX2lkLCB0YXNrX2lkcywgczNfcGF0aCAKZWxzZSA6CglwcmludCAiTmVlZCB0byBwYXNzIDYgYXJndW1lbnRzIgoJc3lzLmV4aXQoKQoKIyBnZXQgbWV0YWRhdGEgYW5kIGxvYWQgaW4gZW52aXJvbm1lbnQKcHJpbnQoJ0xvYWRpbmcgaW5wdXRzOicpCm1ldGEgPSBMb2FkT2JqZWN0c0Zyb21TMyhzM19wYXRoID0gczNfcGF0aCwgCglrZXlzID0gWydiYXRjaF97fV9pbicuZm9ybWF0KGJhdGNoX2lkKSxdKVswXQpGVU4gPSBtZXRhWydGVU4nXQpYICAgPSBtZXRhWydYJ10KZXh0cmFfYXJncyA9IHtrZXk6IG1ldGFba2V5XSBmb3Iga2V5IGluIG1ldGEua2V5cygpIGlmIGtleSBub3QgaW4gWydGVU4nLCAnWCddfQoKaWYgKGpvYl90eXBlID09ICdib290c3RyYXAtcHktam9icycpIDoKCSMjIGJvb3RzdHJhcCBweS1qb2JzICMjCgludW1fdGFza3MgPSBsZW4oWCkKCWlmIChudW1fdGFza3MgPT0gMSkgOgoJCXRhc2tfcGFydGl0aW9ucyA9IFtbMSxdLF0KCWVsc2UgOgoJCXRhc2tzID0gbnAuYXJhbmdlKG51bV90YXNrcykKCQl0YXNrX3BhcnRpdGlvbnMgPSBucC5zcGxpdCh0YXNrcywgbmpvYnMpCgoJb3V0ID0ge30KCWpvYl9pZHggPSAwCgoJZm9yIHQgaW4gdGFza19wYXJ0aXRpb25zIDoKCQlqb2JfaWR4ICs9IDEKCQl0YXNrX2lkcyA9ICcsJy5qb2luKG1hcChzdHIsIHQpKQoJCXByaW50ICdTdWJtaXR0aW5nIHRhc2tzOiB7fScuZm9ybWF0KHRhc2tfaWRzKQoJCW91dFtzdHIoam9iX2lkeCldID0gU3VibWl0QmF0Y2hKb2JzKAoJCQliYXRjaF9pZCA9IGJhdGNoX2lkLAoJCQluam9icyA9IDEsCgkJCXMzX3BhdGggPSBzM19wYXRoLAoJCQlqb2JfdHlwZSA9ICdydW4tcHktdGFza3MnLAoJCQlqb2JfaWQgPSBzdHIoam9iX2lkeCksCgkJCXRhc2tfaWRzID0gdGFza19pZHMpCgoJU2F2ZU9iamVjdGVzSW5TMygKCQlzM19wYXRoID0gczNfcGF0aCwKCQlrZXkgPSAnYmF0Y2hfe31fam9iaWRzJy5mb3JtYXQoYmF0Y2hfaWQpLAoJCW91dCA9IG91dCkKCmVsaWYgKGpvYl90eXBlID09ICdydW4tcHktdGFza3MnKToKCSMgcnVuIHB5LWpvYnMgCgkjIHJ1biBhc3NpZ25lZCBqb2JzCglvdXQgPSB7fQoKCWZvciBpIGluIHRhc2tfaWRzIDoKCQlwcmludCAnKiogU3RhcnRpbmcgdGFza3t9ICoqXG4nLmZvcm1hdChpKQoJCXRyeToKCQkJYWxsX2FyZ3MgPSBkaWN0KFhbaV0sICoqZXh0cmFfYXJncykKCQkJb3V0W3N0cihpKV0gPSBGVU4oKiphbGxfYXJncykKCQlleGNlcHQ6CgkJCXByaW50KCdlcnJvciBpbiB0YXNrJyArIHN0cihpKSkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAJIyBzYXZlIG91dGNvbWUgaW4gUzMKICAJU2F2ZU9iamVjdGVzSW5TMygKICAJCXMzX3BhdGggPSBzM19wYXRoLAogIAkJa2V5ID0gJ2JhdGNoX3t9X291dF97fScuZm9ybWF0KGJhdGNoX2lkLGpvYl9pZCksCjx8ZmltX2VuZHw+"]
["3c7cf7c76b8b77ab74660a836cec8b2011d18b33-2","3c7cf7c76b8b77ab74660a836cec8b2011d18b33","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IERpY3QsIExpc3QsIENhbGxhYmxlLCBPcHRpb25hbApmcm9tIC4uY29yZS5kZWZhdWx0RGF0YSBpbXBvcnQgQ0lPX1NJU08sIENJT19TSUZPLCBDSU9fRklTTywgQ0lPX0ZJRk8sIENJT19UeXBlcwoKCmRlZiBydW5Db21tYW5kcyhpbzogc3RyLCBjb21tYW5kczogTGlzdFtzdHJdLCB2YXJpYWJsZXM6IERpY3Rbc3RyLCBzdHJdLCB3ZGlyOiBzdHIsIGdldFN5c3RlbUNvbW1hbmQ6IENhbGxhYmxlW1tzdHJdLCBzdHJdLCBpbnB1dEZpbGU6IHN0ciwgb3V0cHV0RmlsZTogc3RyLCBkZWZhdWx0VGltZUxpbWl0OiBPcHRpb25hbFtpbnRdID0gTm9uZSwgc2hvd0xvZzogYm9vbCA9IFRydWUpIC0+IGJvb2w6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGZyb20gLi5jb3JlLm1hbmFnZXIgaW1wb3J0IHJ1bkNvbW1hbmRzIGFzIGludGVybmFsX3JjCiAgICByZXR1cm4gaW50ZXJuYWxfcmMoaW8sIGNvbW1hbmRzLCB2YXJpYWJsZXMsIHdkaXIsIGdldFN5c3RlbUNvbW1hbmQsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRGaWxlLCBvdXRwdXRGaWxlLCBkZWZhdWx0VGltZUxpbWl0LCBzaG93TG9nKQo8fGZpbV9lbmR8Pg=="]
["663a57d392f5ed94b67e61ee8a016d89402858b7-1","663a57d392f5ed94b67e61ee8a016d89402858b7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKCmltcG9ydCBudW1weSBhcyBucAoKZnJvbSBwZ2RyaXZlLmNvbXBvbmVudC5ibG9ja3MuY3JlYXRlX2Jsb2NrX3V0aWxzIGltcG9ydCBFeHRlbmRTdHJhaWdodExhbmUsIENyZWF0ZVJvYWRGcm9tLCBDcmVhdGVBZHZlcnNlUm9hZCwgXAogICAgY3JlYXRlX2JlbmRfc3RyYWlnaHQKZnJvbSBwZ2RyaXZlLmNvbXBvbmVudC5ibG9ja3MucGdfYmxvY2sgaW1wb3J0IFBHQmxvY2sKZnJvbSBwZ2RyaXZlLmNvbXBvbmVudC5sYW5lLnN0cmFpZ2h0X2xhbmUgaW1wb3J0IFN0cmFpZ2h0TGFuZQpmcm9tIHBnZHJpdmUuY29tcG9uZW50LnJvYWQucm9hZCBpbXBvcnQgUm9hZApmcm9tIHBnZHJpdmUuY29uc3RhbnRzIGltcG9ydCBEZWNvcmF0aW9uLCBMaW5lVHlwZQpmcm9tIHBnZHJpdmUudXRpbHMuc2NlbmVfdXRpbHMgaW1wb3J0IGNoZWNrX2xhbmVfb25fcm9hZApmcm9tIHBnZHJpdmUudXRpbHMuc3BhY2UgaW1wb3J0IFBhcmFtZXRlclNwYWNlLCBQYXJhbWV0ZXIsIEJsb2NrUGFyYW1ldGVyU3BhY2UKCgpjbGFzcyBSYW1wKFBHQmxvY2spOgogICAgIiIiCiAgICAgICAgICAgICAgICAgICAgSW5SYW1wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0UmFtcAogICAgCiAgICAgc3RhcnQgLS0tLS0tLS0tLS0gZW5kIC0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgc3RhcnQgLS0tLS0tLS0tLS0gZW5kIC0tLS0tLS0tLS0tLS0tLS0tLQogICAgIHN0YXJ0IC0tLS0tLS0tLS0tIGVuZCAtLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgIHN0YXJ0IC0tLS0tLS0tLS0tIGVuZCAtLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgIAogICAgKHN0YXJ0IC0tLS0tLS0tLS0tIGVuZClbLS0tLS0tLS0tLS0tLS0tLV0gICAgICAgICAgIHN0YXJ0IC0tLS0tLS0tLS0tIGVuZCBbLS0tLS0tLS0tLS0tLS0tLV0KICAgICAgICAgICAgICAgICAgICAgICBlbmQgLS0tLS0tLS0tLS0tLS0tLS19ICAgICAgICAgIChzdGFydCAtLS0tLS0tLS0tIHtlbmQpIAogICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgeyAtLS0tLS0tLS0tLS0tLS0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFwtLS0tLS0tLS0tLS0tLS19ICAgIAogICAgIiIiCiAgICBQQVJBTUVURVJfU1BBQ0UgPSBQYXJhbWV0ZXJTcGFjZShCbG9ja1BhcmFtZXRlclNwYWNlLlJBTVBfUEFSQU1FVEVSKQogICAgU09DS0VUX05VTSA9IDEKCiAgICAjIGNhbiBiZSBhZGRlZCB0byBwYXJhbWV0ZXIgc3BhY2UgaW4gdGhlIGZ1dHVyZQogICAgUkFESVVTID0gNDAgICMgbWV0ZXJzCiAgICBBTkdMRSA9IDEwICAjIGRlZ3JlZQogICAgTEFORV9UWVBFID0gKExpbmVUeXBlLkNPTlRJTlVPVVMsIExpbmVUeXBlLkNPTlRJTlVPVVMpCiAgICBTUEVFRF9MSU1JVCA9IDEyICAjIDEyIG0vcyB+PSA0MCBrbS9oCiAgICBDT05ORUNUX1BBUlRfTEVOID0gMjAKICAgIFJBTVBfTEVOID0gMTUKCgpjbGFzcyBJblJhbXBPblN0cmFpZ2h0KFJhbXApOgogICAgSUQgPSAiciIKICAgIEVYVFJBX1BBUlQgPSAxMAogICAgU09DS0VUX0xFTiA9IDIwCgogICAgZGVmIF90cnlfcGx1Z19pbnRvX3ByZXZpb3VzX2Jsb2NrKHNlbGYpIC0+IGJvb2w6CiAgICAgICAgYWNjX2xhbmVfbGVuID0gc2VsZi5nZXRfY29uZmlnKClbUGFyYW1ldGVyLmxlbmd0aF0KICAgICAgICBub19jcm9zcyA9IFRydWUKCiAgICAgICAgIyBleHRlbmQgcm9hZCBhbmQgYWNjIHJhb2QgcGFydCwgcGFydCAwCiAgICAgICAgc2VsZi5zZXRfcGFydF9pZHgoMCkKICAgICAgICBzaW5fYW5nbGUgPSBtYXRoLnNpbihucC5kZWcycmFkKHNlbGYuQU5HTEUpKQogICAgICAgIGNvc19hbmdsZSA9IG1hdGguY29zKG5wLmRlZzJyYWQoc2VsZi5BTkdMRSkpCiAgICAgICAgbG9uZ2l0dWRlX2xlbiA9IHNpbl9hbmdsZSAqIHNlbGYuUkFESVVTICogMiArIGNvc19hbmdsZSAqIHNlbGYuQ09OTkVDVF9QQVJUX0xFTiArIHNlbGYuUkFNUF9MRU4KCiAgICAgICAgZXh0ZW5kX2xhbmUgPSBFeHRlbmRTdHJhaWdodExhbmUoCiAgICAgICAgICAgIHNlbGYucG9zaXRpdmVfYmFzaWNfbGFuZSwgbG9uZ2l0dWRlX2xlbiArIHNlbGYuRVhUUkFfUEFSVCwgW0xpbmVUeXBlLkJST0tFTiwgTGluZVR5cGUuQ09OVElOVU9VU10KICAgICAgICApCiAgICAgICAgZXh0ZW5kX3JvYWQgPSBSb2FkKHNlbGYucHJlX2Jsb2NrX3NvY2tldC5wb3NpdGl2ZV9yb2FkLmVuZF9ub2RlLCBzZWxmLmFkZF9yb2FkX25vZGUoKSkKICAgICAgICBub19jcm9zcyA9IENyZWF0ZVJvYWRGcm9tKAogICAgICAgICAgICBleHRlbmRfbGFuZSwKICAgICAgICAgICAgc2VsZi5wb3NpdGl2ZV9sYW5lX251bSwKICAgICAgICAgICAgZXh0ZW5kX3JvYWQsCiAgICAgICAgICAgIHNlbGYuYmxvY2tfbmV0d29yaywKICAgICAgICAgICAgc2VsZi5fZ2xvYmFsX25ldHdvcmssCiAgICAgICAgICAgIHNpZGVfbGFuZV9saW5lX3R5cGU9TGluZVR5cGUuQ09OVElOVU9VUywKICAgICAgICAgICAgaWdub3JlX2ludGVyc2VjdGlvbl9jaGVja2luZz1zZWxmLmlnbm9yZV9pbnRlcnNlY3Rpb25fY2hlY2tpbmcKICAgICAgICApIGFuZCBub19jcm9zcwogICAgICAgIGV4dGVuZF9yb2FkLmdldF9sYW5lcyhzZWxmLmJsb2NrX25ldHdvcmspWy0xXS5saW5lX3R5cGVzID0gWwogICAgICAgICAgICBMaW5lVHlwZS5CUk9LRU4gaWYgc2VsZi5wb3NpdGl2ZV9sYW5lX251bSAhPSAxIGVsc2UgTGluZVR5cGUuQ09OVElOVU9VUywgTGluZVR5cGUuQ09OVElOVU9VUwogICAgICAgIF0KICAgICAgICBub19jcm9zcyA9IENyZWF0ZUFkdmVyc2VSb2FkKAogICAgICAgICAgICBleHRlbmRfcm9hZCwKICAgICAgICAgICAgc2VsZi5ibG9ja19uZXR3b3JrLAogICAgICAgICAgICBzZWxmLl9nbG9iYWxfbmV0d29yaywKICAgICAgICAgICAgaWdub3JlX2ludGVyc2VjdGlvbl9jaGVja2luZz1zZWxmLmlnbm9yZV9pbnRlcnNlY3Rpb25fY2hlY2tpbmcKICAgICAgICApIGFuZCBub19jcm9zcwogICAgICAgIF9leHRlbmRfcm9hZCA9IC1leHRlbmRfcm9hZAogICAgICAgIGxlZnRfbGFuZV9saW5lID0gTGluZVR5cGUuTk9ORSBpZiBzZWxmLnBvc2l0aXZlX2xhbmVfbnVtID09IDEgZWxzZSBMaW5lVHlwZS5CUk9LRU4KICAgICAgICBfZXh0ZW5kX3JvYWQuZ2V0X2xhbmVzKHNlbGYuYmxvY2tfbmV0d29yaylbLTFdLmxpbmVfdHlwZXMgPSBbbGVmdF9sYW5lX2xpbmUsIExpbmVUeXBlLlNJREVdCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgIyBtYWluIGFjYyBwYXJ0CiAgICAgICAgYWNjX3NpZGVfbGFuZSA9IEV4dGVuZFN0cmFpZ2h0TGFuZSgKICAgICAgICAgICAgZXh0ZW5kX2xhbmUsIGFjY19sYW5lX2xlbiArIHNlbGYubGFuZV93aWR0aCwgW2V4dGVuZF9sYW5lLmxpbmVfdHlwZXNbMF0sIExpbmVUeXBlLlNJREVdCjx8ZmltX2VuZHw+"]
["bbc9e23407979664155049b210f51ad7577c259d-4","bbc9e23407979664155049b210f51ad7577c259d","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMTMsIEZpbkJ5eiBhbmQgY29udHJpYnV0b3JzCiMgRm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgbGljZW5zZS50eHQKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscwppbXBvcnQgZnJhcHBlCmltcG9ydCBkYXRldGltZQpmcm9tIGZyYXBwZSBpbXBvcnQgXwpmcm9tIGZyYXBwZS51dGlscyBpbXBvcnQgZ2V0ZGF0ZQoKCmRlZiBleGVjdXRlKGZpbHRlcnM9Tm9uZSk6Cgljb2x1bW5zLCBkYXRhID0gW10sIFtdCgljb2x1bW5zID0gZ2V0X2NvbHVtbnMoKQoJZGF0YSA9IGdldF9kYXRhKGZpbHRlcnMpCgljaGFydCA9IGdldF9jaGFydF9kYXRhKGRhdGEpCglyZXR1cm4gY29sdW1ucywgZGF0YSwgTm9uZSwgY2hhcnQKCmRlZiBnZXRfY29sdW1ucygpOgoJY29sdW1ucyA9IFtfKCJTYWxlcyBPcmRlciIpICsgIjpMaW5rL1NhbGVzIE9yZGVyOjEyMCIsICAKCQkJCV8oIkRhdGUiKSArICI6RGF0ZToxMDAiLAoJCQkJXygiQ3VzdG9tZXIiKSArICI6TGluay9DdXN0b21lcjoxODAiLAoJCQkJZGljdChmaWVsZG5hbWUgPSAiY2N5IiwKCQkJCQlsYWJlbCA9IF8oIkNDWSIpLAoJCQkJCWZpZWxkdHlwZSA9ICJMaW5rIiwKCQkJCQlvcHRpb25zID0gIkN1cnJlbmN5IiwKCQkJCQl3aWR0aCA9IDUwKSwKCQkJCWRpY3QobGFiZWwgPSBfKCJUb3RhbCBBbW91bnQiKSwgCgkJCQkJZmllbGR0eXBlID0gIkN1cnJlbmN5IiwgCgkJCQkJb3B0aW9ucyA9ICJjY3kiLCAKCQkJCQl3aWR0aCA9IDEwMCksCgkJCQlfKCJSYXRlIikgKyAiOkZsb2F0OjgwIiwKCQkJCV8oIklOUiBBbW91bnQiKSArICI6Q3VycmVuY3k6MTAwIiwKCQkJCWRpY3QobGFiZWwgPSBfKCJBbW91bnQgSGVkZ2VkIiksIAoJCQkJCWZpZWxkdHlwZSA9ICJDdXJyZW5jeSIsIAoJCQkJCW9wdGlvbnMgPSAiY2N5IiwgCgkJCQkJd2lkdGggPSAxMDApLAoJCQkJZGljdChsYWJlbCA9IF8oIkFtb3VudCBVbmhlZGdlZCIpLCAKCQkJCQlmaWVsZHR5cGUgPSAiQ3VycmVuY3kiLCAKCQkJCQlvcHRpb25zID0gImNjeSIsIAoJCQkJCXdpZHRoID0gMTAwKSwKCQkJCV8oIk5hdHVyYWwgSGVkZ2UiKSArICI6OjgwIiwKCQkJCV8oIkRlbGl2ZXJ5IERhdGUiKSArICI6RGF0ZToxMDAiLAoJCQkJXygiU3RhdHVzIikgKyAiOjoxNTAiLAoJXQoJcmV0dXJuIGNvbHVtbnMKCQpkZWYgZ2V0X2RhdGEoZmlsdGVycyk6CgoJd2hlcmVfY2xhdXNlID0gJycKCXdoZXJlX2NsYXVzZSArPSBmaWx0ZXJzLmN1cnJlbmN5IGFuZCAiIGFuZCBzby5jdXJyZW5jeSA9ICclcyciICUgXAoJCWZpbHRlcnMuY3VycmVuY3kucmVwbGFjZSgiJyIsIlwnIikgb3IgIiBhbmQgc28uY3VycmVuY3kgIT0gJ0lOUiciCgkKCWRhdGEgPSBmcmFwcGUuZGIuc3FsKCIiIgoJCXNlbGVjdCAKCQkJc28ubmFtZSBhcyAiU2FsZXMgT3JkZXIiLAoJCQlzby50cmFuc2FjdGlvbl9kYXRlIGFzICJEYXRlIiwKCQkJc28uY3VzdG9tZXIgYXMgIkN1c3RvbWVyIiwKCQkJc28uY3VycmVuY3kgYXMgImNjeSIsCgkJCShzby5ncmFuZF90b3RhbC0oc28uYWR2YW5jZV9wYWlkL3NvLmNvbnZlcnNpb25fcmF0ZSkpIGFzICJUb3RhbCBBbW91bnQiLAoJCQlzby5jb252ZXJzaW9uX3JhdGUgYXMgIlJhdGUiLAoJCQlzby5iYXNlX2dyYW5kX3RvdGFsIGFzICJJTlIgQW1vdW50IiwKCQkJc28uYW1vdW50X2NvdmVyZWQgYXMgIkFtb3VudCBIZWRnZWQiLAoJCQlzby5hbW91bnRfdW5oZWRnZWQgYXMgIkFtb3VudCBVbmhlZGdlZCIsCgkJCXNvLm5hdHVyYWxfaGVkZ2UgYXMgIk5hdHVyYWwgSGVkZ2UiLAoJCQlzby5kZWxpdmVyeV9kYXRlIGFzICJEZWxpdmVyeSBEYXRlIiwKCQkJc28uc3RhdHVzIGFzICJTdGF0dXMiCgkJZnJvbQkKCQkJYHRhYlNhbGVzIE9yZGVyYCBzbwoJCXdoZXJlCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCQkJc28uZG9jc3RhdHVzID0gMQoJCQlhbmQgc28uc3RhdHVzICE9ICdDbG9zZWQnCgkJCWFuZCBzby5zdGF0dXMgIT0gJ0NvbXBsZXRlZCcKCQkJYW5kIHNvLmFtb3VudF9jb3ZlcmVkIDwgc28uZ3JhbmRfdG90YWwKPHxmaW1fZW5kfD4="]
["95c3b6916711a965526b53d4f818be45cb4ad545-4","95c3b6916711a965526b53d4f818be45cb4ad545","PHxmaW1fcHJlZml4fD4KIyB2aW06IHRzPTQgc3RzPTQgc3c9NCBldAojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBQYWNoaSBDb3VudGVyCiMgQ29weXJpZ2h0IChjKSAyMDExLTIwMjAsIFl1c3VrZSBPaHNoaW1hIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKIyBMaWNlbnNlOiBNSVQuCiMgRm9yIGRldGFpbHMsIHBsZWFzZSBzZWUgTElDRU5TRSBmaWxlLgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmltcG9ydCBpbXBvcnRsaWIKZnJvbSB0eXBpbmcgaW1wb3J0IFR1cGxlCgpmcm9tIHBhY2hpY291bnRlci51dGlsIGltcG9ydCBjYWxjTHBzT25Ob3JtLCBjYWxjTHBzT25DaGFuY2UKCgpjbGFzcyBQbHVnaW5Mb2FkZXI6CiAgICBkZWYgZ2V0Q2xhc3Moc2VsZiwgcGx1Z2lubmFtZSk6CiAgICAgICAgIiIiIOaMh+WumuOBleOCjOOBn+ODl+ODqeOCsOOCpOODs+OCkuOCpOODs+ODneODvOODiOOBl+OBpuOBneOBruWei+OCkui/lOOBmSAiIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIG1vZG5hbWUgPSAiLiIuam9pbigoInBhY2hpY291bnRlciIsICJtYWNoaW5lIiwgcGx1Z2lubmFtZSkpCiAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobW9kbmFtZSkKICAgICAgICByZXR1cm4gZ2V0YXR0cihtb2R1bGUsIHBsdWdpbm5hbWUpCgo8fGZpbV9lbmR8Pg=="]
["6685b3ee6b89cb2887328104c81189a243041c28-2","6685b3ee6b89cb2887328104c81189a243041c28","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNxbGl0ZTMKCgpkZWYgbWFpbigpOgogICAgaW5pdGlhbGl6ZV9kYXRhYmFzZSgiZmlsZS5kYiIpCgoKZGVmIGluaXRpYWxpemVfZGF0YWJhc2UoZGJfZmlsZV9uYW1lKToKICAgICMgU2V0IHVwIHRoZSBzcWxpdGUgREIgaW5zdGFuY2UKICAgIGNvbm4gPSBzcWxpdGUzLmNvbm5lY3QoZGJfZmlsZV9uYW1lKQogICAgYyA9IGNvbm4uY3Vyc29yKCkKICAgICMgQ3JlYXRlIHRhYmxlIGZvciBmaWxlIG91dHB1dCByZXN1bHRzCiAgICBjLmV4ZWN1dGUoIiIiQ1JFQVRFIFRBQkxFIGZpbGVzIChzaGFfaGFzaCB0ZXh0LCBmaWxlX3NpemUgcmVhbCwgZmlsZXBhdGggdGV4dCkiIiIpCiAgICBwcmludCgiSW5pdGlhbGl6ZWQgbmV3IHNxbGl0ZSBkYXRhYmFzZSBmaWxlIHt9Ii5mb3JtYXQoZGJfZmlsZV9uYW1lKSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgY29ubi5jbG9zZSgpCgoKPHxmaW1fZW5kfD4="]
["3c50504eaef7e73361d580088023d0cb57dd48f2-3","3c50504eaef7e73361d580088023d0cb57dd48f2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCB0aW1lCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CgppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gZW52LmphY28udHdvX2phY28gaW1wb3J0IFR3b0phY29FbnYKZnJvbSBlbnYudHJhbnNmb3JtX3V0aWxzIGltcG9ydCBxdWF0X2Rpc3QKCgpjbGFzcyBUd29KYWNvUGlja1B1c2hQbGFjZUVudihUd29KYWNvRW52KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgc2VsZi5uYW1lID0gJ3R3by1qYWNvLXBpY2stcHVzaC1wbGFjZScKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCd0d29famFjb19wcHAueG1sJywgKiprd2FyZ3MpCgogICAgICAgICMgY29uZmlnCiAgICAgICAgc2VsZi5fZW52X2NvbmZpZy51cGRhdGUoewogICAgICAgICAgICAidHJhaW5fbGVmdCI6IFRydWUsCiAgICAgICAgICAgICJ0cmFpbl9yaWdodCI6IFRydWUsCiAgICAgICAgICAgICJzdWNjZXNzX3Jld2FyZCI6IDUwLAogICAgICAgICAgICAKICAgICAgICAgICAgIyBkZW5zZSByZXdhcmQKICAgICAgICAgICAgInJlYWNoX3Jld2FyZCI6IDEwLAogICAgICAgICAgICAiZ3JpcHBlcl9yZXdhcmQiOiAxMCwKICAgICAgICAgICAgInBpY2tfcmV3YXJkIjogMTAsCiAgICAgICAgICAgICJwdXNoX3Jld2FyZCI6IDMwLAogICAgICAgICAgICAicGxhY2VfcmV3YXJkIjogMTAsCiAgICAgICAgICAgICJjdHJsX3Jld2FyZCI6IDAsCiAgICAgICAgICAgICJyZWFjaF9kdXJhdGlvbiI6IDI1LAogICAgICAgICAgICAicGlja19kdXJhdGlvbiI6IDI1LAogICAgICAgICAgICAicGxhY2VfZHVyYXRpb24iOiAyNSwKICAgICAgICAgICAgInBpY2tfaGVpZ2h0IjogMC4xMiwKCiAgICAgICAgICAgICJpbml0X3JhbmRvbW5lc3MiOiAwLjAwNSwKICAgICAgICAgICAgIm1heF9lcGlzb2RlX3N0ZXBzIjogMTUwLAoKICAgICAgICAgICAgIyByYW5kb21uZXNzIHNldHRpbmdzCiAgICAgICAgICAgICJpbml0X3JhZGl1cyI6IDAuMCwKICAgICAgICAgICAgImluaXRfcXVhdF9yYW5kb21uZXNzIjogMCwKCiAgICAgICAgICAgICMgZGlheW4gcmV3YXJkIG92ZXJyaWRlCiAgICAgICAgICAgICJkaWF5bl9yZXdhcmQiOiAwLjAxCiAgICAgICAgfSkKICAgICAgICBzZWxmLl9lbnZfY29uZmlnLnVwZGF0ZSh7IGs6diBmb3Igayx2IGluIGt3YXJncy5pdGVtcygpIGlmIGsgaW4gc2VsZi5fZW52X2NvbmZpZyB9KQoKICAgICAgICAjIHN0YXRlCiAgICAgICAgc2VsZi5faG9sZF9kdXJhdGlvbiA9IFswLCAwXQogICAgICAgIHNlbGYuX2JveF96ID0gWzAsIDBdCiAgICAgICAgc2VsZi5fdCA9IDAKICAgICAgICBzZWxmLl9waWNrX3N1Y2Nlc3MgPSBGYWxzZQoKICAgICAgICBzZWxmLl9nZXRfcmVmZXJlbmNlKCkKCiAgICBkZWYgX2dldF9yZWZlcmVuY2Uoc2VsZik6CiAgICAgICAgc2VsZi5jdWJlX2JvZHlfaWQgPSBbc2VsZi5zaW0ubW9kZWwuYm9keV9uYW1lMmlkKCJjdWJle30iLmZvcm1hdChpKSkgZm9yIGkgaW4gWzEsIDJdXQogICAgICAgIHNlbGYuY3ViZV9nZW9tX2lkID0gW3NlbGYuc2ltLm1vZGVsLmdlb21fbmFtZTJpZCgiY3ViZXt9Ii5mb3JtYXQoaSkpIGZvciBpIGluIFsxLCAyXV0KCiAgICAgICAgbGVmdF9hcm1fZ2VvbXMgPSBbImphY29fbF9saW5rXzEiLCAiamFjb19sX2xpbmtfMiIsICJqYWNvX2xfbGlua18zIiwgImphY29fbF9saW5rXzQiLCAiamFjb19sX2xpbmtfNSIsICJqYWNvX2xfbGlua19oYW5kIiwgImphY29fbF9saW5rX2Zpbmdlcl8xIiwgImphY29fbF9saW5rX2Zpbmdlcl8yIiwgImphY29fbF9saW5rX2Zpbmdlcl8zIl0KICAgICAgICByaWdodF9hcm1fZ2VvbXMgPSBbImphY29fcl9saW5rXzEiLCAiamFjb19yX2xpbmtfMiIsICJqYWNvX3JfbGlua18zIiwgImphY29fcl9saW5rXzQiLCAiamFjb19yX2xpbmtfNSIsICJqYWNvX3JfbGlua19oYW5kIiwgImphY29fcl9saW5rX2Zpbmdlcl8xIiwgImphY29fcl9saW5rX2Zpbmdlcl8yIiwgImphY29fcl9saW5rX2Zpbmdlcl8zIl0KICAgICAgICBzZWxmLmxlZnRfYXJtX2dlb21faWRzID0gW3NlbGYuc2ltLm1vZGVsLmdlb21fbmFtZTJpZCh4KSBmb3IgeCBpbiBsZWZ0X2FybV9nZW9tc10KICAgICAgICBzZWxmLnJpZ2h0X2FybV9nZW9tX2lkcyA9IFtzZWxmLnNpbS5tb2RlbC5nZW9tX25hbWUyaWQoeCkgZm9yIHggaW4gcmlnaHRfYXJtX2dlb21zXQoKICAgICAgICBjb250YWluZXJfZ2VvbSA9ICJjdWJlMV9pbnNpZGUiCiAgICAgICAgYmFyX2dlb20gPSAiY3ViZTIiCiAgICAgICAgc2VsZi5iYXJfZ2VvbV9pZCA9IHNlbGYuc2ltLm1vZGVsLmdlb21fbmFtZTJpZChiYXJfZ2VvbSkKICAgICAgICBzZWxmLmNvbnRhaW5lcl9nZW9tX2lkID0gc2VsZi5zaW0ubW9kZWwuZ2VvbV9uYW1lMmlkKGNvbnRhaW5lcl9nZW9tKQoKICAgIGRlZiBfY29zX3ZlYyhzZWxmLCBzLCBlMSwgZTIpOgogICAgICAgIHZlYzEgPSBucC5hcnJheShlMSkgLSBzCiAgICAgICAgdmVjMiA9IG5wLmFycmF5KGUyKSAtIHMKICAgICAgICB2MXUgPSB2ZWMxIC8gbnAubGluYWxnLm5vcm0odmVjMSkKICAgICAgICB2MnUgPSB2ZWMyIC8gbnAubGluYWxnLm5vcm0odmVjMikKICAgICAgICByZXR1cm4gbnAuY2xpcChucC5kb3QodjF1LCB2MnUpLCAtMS4wLCAxLjApCgogICAgZGVmIF9jb21wdXRlX3Jld2FyZChzZWxmKToKICAgICAgICAnJycgQ3ViZSAxIGlzIHRoZSBiYXIsIGN1YmUgMiBpcyB0aGUgY29udGFpbmVyLgogICAgICAgICAgICBSZXdhcmQgaGFzIDQgY29tcG9uZW50cyAtLSByZWFjaCwgcGljaywgcHVzaCwgcGxhY2UuCiAgICAgICAgICAgIFB1c2ggcmV3YXJkIGlzIGJhc2VkIG9uIGRpc3RhbmNlIHRvIGJhcidzIHh5IHBvc2l0aW9uLgogICAgICAgICAgICBQaWNrIGFuZCBwbGFjZSByZXdhcmRzIGFyZSBtYW5hZ2VkIGluIHR3by1zdGFnZWQgbWFubmVyLgogICAgICAgICcnJwogICAgICAgIGRvbmUgPSBGYWxzZQogICAgICAgIG9uX2dyb3VuZCA9IFtGYWxzZSwgRmFsc2VdCiAgICAgICAgb2ZmX3RhYmxlID0gW0ZhbHNlLCBGYWxzZV0KICAgICAgICBpbmZvID0ge30KCiAgICAgICAgIyBjb21wdXRlIGdyaXBwZXIgY2VudGVyIHBvc2l0aW9ucwogICAgICAgIGdyaXBwZXJfY2VudGVyID0gc2VsZi5fZ2V0X2dyaXBwZXJfY2VudGVycygpCiAgICAgICAgbGVmdF9ncmlwcGVyX2NlbnRlciwgcmlnaHRfZ3JpcHBlcl9jZW50ZXIgPSBncmlwcGVyX2NlbnRlcgoKICAgICAgICAjIGNvbXB1dGUgaW5pdCBncmlwcGVyIGRpc3QgYXQgZmlyc3QgdGltZSBzdGVwCiAgICAgICAgaWYgc2VsZi5fdCA9PSAwOgogICAgICAgICAgICBzZWxmLl9pbml0X2dyaXBwZXJfZGlzdHMgPSBbbnAubGluYWxnLm5vcm0oZ3JpcHBlcl9jZW50ZXJbaV0gLSBzZWxmLl9pbml0X2JveF9wb3NbaV0pIGZvciBpIGluIHJhbmdlKDIpXQoKICAgICAgICAjIGNvbXB1dGUgY3JpdGVyaWFzIGZvciBzdWNjZXNzCiAgICAgICAgY29udGFpbmVyX2hlaWdodCA9IHNlbGYuX2dldF9wb3MoImN1YmUxIilbLTFdCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBiYXJfaGVpZ2h0ID0gc2VsZi5fZ2V0X3BvcygiY3ViZTIiKVstMV0KCiAgICAgICAgIyBjaGVjayBjb250YWluZXIgaXMgb24gdGFibGUKICAgICAgICBjb250YWluZXJfb25fdGFibGUgPSBucC5hYnMoY29udGFpbmVyX2hlaWdodCAtIHNlbGYuX2luaXRfYm94X3Bvc1swXVstMV0pLml0ZW0oKSA8IDAuMDAzCjx8ZmltX2VuZHw+"]
["3c4ef269308abd499d8ee1c1b8dd9a91836164f3-3","3c4ef269308abd499d8ee1c1b8dd9a91836164f3","PHxmaW1fcHJlZml4fD4KIyBkYXRlIHV0aWxpdGllcwojCiMgcnVsZXM6CiMgICAxLiBhbHdheXMgdXNlIGRhdGVzIHdpdGggdGltZXpvbmU9VVRDCiMgICAyLiBpbnRlcm5hbCBzdGF0ZSB1c2VzIFVUQwojICAgMy4gZW5kLXVzZXIgdmlzaWJsZSBkYXRlcyB1c2UgRVQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojCgpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZXpvbmUsIHRpbWVkZWx0YQppbXBvcnQgcHl0ego8fGZpbV9lbmR8Pg=="]
["af98e831d4045769bda2cb064ec07be9fe63d481-2","af98e831d4045769bda2cb064ec07be9fe63d481","PHxmaW1fcHJlZml4fD4KIyBub3cgaXQgd29ya3Mgb25seSB3aXRoIG9uZSB2YXJpYWJsZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgphID0gMQoKaWYgYSA+IDEwIG9yIGEgPCAyMDoKPHxmaW1fZW5kfD4="]
["bbe16ed96dafe42c1f43fd158e52e68509705cc8-3","bbe16ed96dafe42c1f43fd158e52e68509705cc8","PHxmaW1fcHJlZml4fD4KCiMxLlJlYWQgdGhlIGNvZGUgYmVsb3cgYW5kIHRyeSB0byBpZGVudGlmeSB3aGF0IHRoZSBlcnJvcnMgYXJlIHdpdGhvdXQgcnVubmluZyBpdC4KIzIuUnVuIHRoZSBjb2RlLCBhbmQgcmVhZCB0aGUgZXJyb3IgbWVzc2FnZS4gV2hhdCB0eXBlIG9mIGVycm9yIGlzIGl0PwojMy5GaXggdGhlIGVycm9yLgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpzZWFzb25zID0gWydTcHJpbmcnLCAnU3VtbWVyJywgJ0ZhbGwnLCAnV2ludGVyJ10KcHJpbnQoJ015IGZhdm9yaXRlIHNlYXNvbiBpcyAnLCBzZWFzb25zWzRdKQo8fGZpbV9lbmR8Pg=="]
["a52f6b7296b5d06f68069b5b7eee16d41977c234-1","a52f6b7296b5d06f68069b5b7eee16d41977c234","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KX192ZXJzaW9uX18gPSAiMC45NjIiCjx8ZmltX2VuZHw+"]
["bbb7820515825a39bbc1ccea1a9612921486db1c-4","bbb7820515825a39bbc1ccea1a9612921486db1c","PHxmaW1fcHJlZml4fD4KCmZyb20gZGF0ZXV0aWwgaW1wb3J0IHBhcnNlcgoKCmNsYXNzIENvbmRpdGlvbihvYmplY3QpOgogICAgIiIiCiAgICBUaGUgY3VycmVudCB3ZWF0aGVyIGNvbmRpdGlvbnMuCgogICAgQXR0cmlidXRlczoKICAgICAgICBjb2RlOiBUaGUgY29uZGl0aW9uIGNvZGUgZm9yIHRoZSBmb3JlY2FzdC4gVGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlCiAgICAgICAgICAgIGNvZGUgYXJlIGRlc2NyaWJlZCBhdCB0aGUgZm9sbG93aW5nIFVSTCAoaW50ZWdlcikuCiAgICAgICAgICAgIGh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL3dlYXRoZXIvI2NvZGVzCiAgICAgICAgICAgIElmIG5vIGNvZGUgaXMgZm91bmQgY29kZSB3aWxsIGJlIE5vbmUuCiAgICAgICAgZGF0ZTogVGhlIGRhdGUgYW5kIHRpbWUgdGhlIGZvcmVjYXN0IHdhcyBwb3N0ZWQsIHRpbWUtem9uZSB1bmF3YXJlCiAgICAgICAgICAgIChkYXRldGltZSkuCiAgICAgICAgdGVtcGVyYXR1cmU6IFRoZSBjdXJyZW50IHRlbXBlcmF0dXJlIGluIHRoZSB1bml0cyBzcGVjaWZpZWQgaW4gdGhlCiAgICAgICAgICAgIHRlbXBlcmF0dXJlIHZhcmlhYmxlIG9mIHRoZSBVbml0cyBjbGFzcyAoaW50ZWdlcikuIElmIG5vIHZhbHVlIGZvciB0aGUKICAgICAgICAgICAgdGVtcGVyYXR1cmUgaXMgZm91bmQsIHRlbXBlcmF0dXJlIHdpbGwgYmUgTm9uZS4KICAgICAgICB0ZXh0OiBBIHRleHR1YWwgZGVzY3JpcHRpb24gb2YgdGhlIGNvbmRpdGlvbnMuIEUuZy4gUGFydGx5IENsb3VkeQo8fGZpbV9ob2xlfD4KICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25kaXRpb24pOgogICAgICAgIHRyeToKICAgICAgICAgICAgc2VsZi50ZW1wZXJhdHVyZSA9IGludChjb25kaXRpb25bJ3RlbXAnXSkKICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgc2VsZi50ZW1wZXJhdHVyZSA9IE5vbmUKICAgICAgICBzZWxmLmRhdGUgPSBwYXJzZXIucGFyc2UoY29uZGl0aW9uWydkYXRlJ10sIGlnbm9yZXR6PVRydWUpCiAgICAgICAgc2VsZi50ZXh0ID0gY29uZGl0aW9uWyd0ZXh0J10KICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYuY29kZSA9IGludChjb25kaXRpb25bJ2NvZGUnXSkKICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgc2VsZi5jb2RlID0gTm9uZQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAoc3RyaW5nKS4KPHxmaW1fZW5kfD4="]
["61f9196db2ffcdeed31540765e5d817648adbe0b-2","61f9196db2ffcdeed31540765e5d817648adbe0b","PHxmaW1fcHJlZml4fD4KJycnU3VwcG9ydCBtb2R1bGUgZm9yIENHSSBhcHBsaWNhdGlvbnMuCgpUaGlzIG1vZHVsZXMgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBIVE1MX1RhYmxlIGFuZCBIVE1MX01vbnRoCmNsYXNzZXMgd2hpY2ggcHJvdmlkZSBhYnN0cmFjdGlvbnMgdG8gdGhlIEhUTUwgY29kZSBpbnZvbHZlZC4nJycKCl9fdmVyc2lvbl9fID0gMS4xCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKaW1wb3J0IGNhbGVuZGFyCmltcG9ydCB6X21hdHJpeAoKY2xhc3MgSFRNTF9UYWJsZToKCiAgICAnSFRNTF9UYWJsZShyb3dzLCBjb2x1bW5zLCBpbmRlbnRfbGV2ZWwsIGluZGVudF9zdHlsZSkgLT4gbmV3IEhUTUxfVGFibGUnCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvd3MsIGNvbHVtbnMsIGluZGVudF9sZXZlbCwgaW5kZW50X3N0eWxlKToKICAgICAgICAneC5fX2luaXRfXyguLi4pIGluaXRpYWxpemVzIHgnCiAgICAgICAgc2VsZi5fX21hdHJpeCA9IHpfbWF0cml4Lk1hdHJpeChyb3dzLCBjb2x1bW5zLCAnJykKICAgICAgICBzZWxmLl9faW5kZW50X2xldmVsID0gaW5kZW50X2xldmVsCiAgICAgICAgc2VsZi5fX2luZGVudF9zdHlsZSA9IGluZGVudF9zdHlsZQogICAgICAgIHNlbGYuX190YWJsZV9hdHRyaWJ1dGVzID0gJycKICAgICAgICBzZWxmLl9fcm93X2F0dHJpYnV0ZXMgPSAnJwogICAgICAgIHNlbGYuX19jZWxsX2F0dHJpYnV0ZXMgPSAnJwoKICAgIGRlZiBtdXRhdGUoc2VsZiwgcm93LCBjb2x1bW4sIHRleHQpOgogICAgICAgICdNdXRhdGVzIGEgY2VsbCBpbiB0aGUgSFRNTCB0YWJsZS4nCiAgICAgICAgYXNzZXJ0IHR5cGUodGV4dCkgaXMgc3RyCiAgICAgICAgc2VsZi5fX21hdHJpeFtyb3ddW2NvbHVtbl0gPSB0ZXh0CiAgICAgICAgcmV0dXJuIHNlbGYKCiAgICBkZWYgYWNjZXNzKHNlbGYsIHJvdywgY29sdW1uKToKICAgICAgICAnQWNjZXNzZXMgYSBjZWxsIGluIHRoZSBIVE1MIHRhYmxlLicKICAgICAgICByZXR1cm4gc2VsZi5fX21hdHJpeFtyb3ddW2NvbHVtbl0KCiAgICBkZWYgc2V0X3RhYmxlKHNlbGYsICphdHRyaWJ1dGVzKToKICAgICAgICAnU2V0cyB0aGUgYXR0cmlidXRlcyBmb3IgdGhlIHRhYmxlLicKICAgICAgICBzZWxmLl9fdGFibGVfYXR0cmlidXRlcyA9IHNlbGYuX19wYXJzZShhdHRyaWJ1dGVzKQogICAgICAgIHJldHVybiBzZWxmCgogICAgZGVmIHNldF9yb3coc2VsZiwgKmF0dHJpYnV0ZXMpOgogICAgICAgICdTZXRzIHRoZSBhdHRyaWJ1dGVzIGZvciBlYWNoIHJvdy4nCiAgICAgICAgc2VsZi5fX3Jvd19hdHRyaWJ1dGVzID0gc2VsZi5fX3BhcnNlKGF0dHJpYnV0ZXMpCiAgICAgICAgcmV0dXJuIHNlbGYKCiAgICBkZWYgc2V0X2NlbGwoc2VsZiwgKmF0dHJpYnV0ZXMpOgogICAgICAgICdTZXRzIHRoZSBhdHRyaWJ1dGVzIGZvciBlYWNoIGNlbGwuJwogICAgICAgIHNlbGYuX19jZWxsX2F0dHJpYnV0ZXMgPSBzZWxmLl9fcGFyc2UoYXR0cmlidXRlcykKICAgICAgICByZXR1cm4gc2VsZgoKICAgIGRlZiBfX3BhcnNlKHNlbGYsIGF0dHJpYnV0ZXMpOgogICAgICAgICdQYXJzZXMgdGhlIGF0dHJpYnV0ZXMgaW50byBhIHN0cmluZy4nCiAgICAgICAgcmV0dXJuICcnLmpvaW4oWycgJXM9IiVzIicgJSAocGFyYW1ldGVyLCB2YWx1ZSkgZm9yIHBhcmFtZXRlciwgdmFsdWUgaW4gYXR0cmlidXRlc10pCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgaHRtbChzZWxmKToKICAgICAgICAnUmV0dXJucyB0aGUgSFRNTCBjb2RlIGZvciB0aGUgY3VycmVudCB0YWJsZS4nCiAgICAgICAgaHRtbCA9IHNlbGYuX19pbmRlbnRfc3R5bGUgKiBzZWxmLl9faW5kZW50X2xldmVsICsgJzx0YWJsZScgKyBzZWxmLl9fdGFibGVfYXR0cmlidXRlcyArICc+XG4nCiAgICAgICAgZm9yIHJvdyBpbiBzZWxmLl9fbWF0cml4Ogo8fGZpbV9lbmR8Pg=="]
["bb9b548d16205b3679abd71e18f619addc0c5ede-3","bb9b548d16205b3679abd71e18f619addc0c5ede","PHxmaW1fcHJlZml4fD4KZGVwZW5kZW5jeV9maWVsZHMgPSBbCiAgICAnZGVwZW5kZW5jaWVzJywKICAgICdkZXZEZXBlbmRlbmNpZXMnLAogICAgJ3BlZXJEZXBlbmRlbmNpZXMnLAogICAgJ29wdGlvbmFsRGVwZW5kZW5jaWVzJywKXQpzdXBwb3J0ZWRfZmlsZW5hbWVzID0gWydwYWNrYWdlLmpzb24nXQpkZWZhdWx0X3JlZ2lzdHJ5ID0gJ2h0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnJzsKCmRlZmF1bHRfZGlzdHJpYnV0aW9uX21vZGUgPSAnbGF0ZXN0JyAjIGNvdWxkIGJlIG5leHQKVkVSU0lPTl9NT0RFUyA9ICgKICAgICgnbGF0ZXN0JywgJ1Nob3cgcmVsZWFzZWQgdmVyc2lvbnMgb25seScpLAogICAgKCduZXh0JywgJ1Nob3cgdXBjb21pbmcgKGFscGhhLCBiZXRhKSB2ZXJzaW9ucycpCikKZGVmYXVsdF90b29sdGlwID0gVHJ1ZQp0b29sdGlwX3N0eWxlcyA9IHsKICAgICd2ZXJzaW9uX2NvbG9yJzogJyNGRkZGRkYnLAogICAgJ3BhY2thZ2VfY29sb3InOiAnIzc2QzFCQScsCiAgICAnYmFja2dyb3VuZCc6ICcjMjUzMjM4Jwp9OwoKZGVmIGdldF9yZWdpc3RyeSgpOgogICAgcmV0dXJuIGRlZmF1bHRfcmVnaXN0cnkKCmRlZiBnZXRfZGlzdHJpYnV0aW9uX21vZGUoKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcmV0dXJuIGRlZmF1bHRfZGlzdHJpYnV0aW9uX21vZGUKCjx8ZmltX2VuZHw+"]
["af7d8809cbcce5ba50fd77c36d671053f31234ef-4","af7d8809cbcce5ba50fd77c36d671053f31234ef","PHxmaW1fcHJlZml4fD4KIyBmbGFrZTg6IG5vcWEKCiIiIgogICAgR3JhcGhTZW5zZSBBUEkKPHxmaW1faG9sZXw+CiAgICBHZW5lcmF0ZWQgYnk6IGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaAoiIiIKCgpfX3ZlcnNpb25fXyA9ICIwLjUiCgojIGltcG9ydCBBcGlDbGllbnQKZnJvbSBncmFwaHNlbnNlLmFwaV9jbGllbnQgaW1wb3J0IEFwaUNsaWVudAoKIyBpbXBvcnQgQ29uZmlndXJhdGlvbgpmcm9tIGdyYXBoc2Vuc2UuY29uZmlndXJhdGlvbiBpbXBvcnQgQ29uZmlndXJhdGlvbgoKIyBpbXBvcnQgZXhjZXB0aW9ucwpmcm9tIGdyYXBoc2Vuc2UuZXhjZXB0aW9ucyBpbXBvcnQgT3BlbkFwaUV4Y2VwdGlvbgpmcm9tIGdyYXBoc2Vuc2UuZXhjZXB0aW9ucyBpbXBvcnQgQXBpQXR0cmlidXRlRXJyb3IKZnJvbSBncmFwaHNlbnNlLmV4Y2VwdGlvbnMgaW1wb3J0IEFwaVR5cGVFcnJvcgpmcm9tIGdyYXBoc2Vuc2UuZXhjZXB0aW9ucyBpbXBvcnQgQXBpVmFsdWVFcnJvcgpmcm9tIGdyYXBoc2Vuc2UuZXhjZXB0aW9ucyBpbXBvcnQgQXBpS2V5RXJyb3IKZnJvbSBncmFwaHNlbnNlLmV4Y2VwdGlvbnMgaW1wb3J0IEFwaUV4Y2VwdGlvbgo8fGZpbV9zdWZmaXh8PgoKICAgIEdyYXBoU2Vuc2UgQVBJICAjIG5vcWE6IEU1MDEKCiAgICBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMC41Cjx8ZmltX2VuZHw+"]
["b088cfbb4ed5d367740bc077f7bd746459e0445e-2","b088cfbb4ed5d367740bc077f7bd746459e0445e","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKaW1wb3J0IG51bXB5IGFzIG5tCgpmcm9tIHNmZXB5LmJhc2UuYmFzZSBpbXBvcnQgb3V0cHV0LCBhc3NlcnRfLCBnZXRfZGVmYXVsdCwgU3RydWN0CmZyb20gc2ZlcHkuaG9tb2dlbml6YXRpb24uY29lZnNfYmFzZSBpbXBvcnQgQ29yclNvbHV0aW9uLCBcCiAgICAgVENvcnJlY3RvcnNWaWFQcmVzc3VyZUVWUCwgQ29yck1pbmlBcHAKZnJvbSBzZmVweS5zb2x2ZXJzLnRzIGltcG9ydCBUaW1lU3RlcHBlcgpmcm9tIHNpeC5tb3ZlcyBpbXBvcnQgcmFuZ2UKCmNsYXNzIFByZXNzdXJlUkhTVmVjdG9yKCBDb3JyTWluaUFwcCApOgogICAgCiAgICBkZWYgX19jYWxsX18oIHNlbGYsIHByb2JsZW0gPSBOb25lLCBkYXRhID0gTm9uZSApOgogICAgICAgIHByb2JsZW0gPSBnZXRfZGVmYXVsdCggcHJvYmxlbSwgc2VsZi5wcm9ibGVtICkKCiAgICAgICAgcHJvYmxlbS5zZWxlY3RfdmFyaWFibGVzKCBzZWxmLnZhcmlhYmxlcyApCiAgICAgICAgcHJvYmxlbS5zZXRfZXF1YXRpb25zKCBzZWxmLmVxdWF0aW9ucyApCiAgICAgICAgcHJvYmxlbS5zZWxlY3RfYmNzKGViY19uYW1lcyA9IHNlbGYuZWJjcywgZXBiY19uYW1lcyA9IHNlbGYuZXBiY3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxjYmNfbmFtZXM9c2VsZi5nZXQoJ2xjYmNzJywgW10pKQoKICAgICAgICBzdGF0ZSA9IHByb2JsZW0uY3JlYXRlX3N0YXRlKCkKICAgICAgICBzdGF0ZS5hcHBseV9lYmMoKQoKICAgICAgICBlcXMgPSBwcm9ibGVtLmVxdWF0aW9ucwogICAgICAgIGVxcy5zZXRfdmFyaWFibGVzX2Zyb21fc3RhdGUoc3RhdGUudmVjKQogICAgICAgIHZlYyA9IGVxcy5jcmVhdGVfc3RyaXBwZWRfc3RhdGVfdmVjdG9yKCkKICAgICAgICBlcXMudGltZV91cGRhdGVfbWF0ZXJpYWxzKHByb2JsZW0uZ2V0X3RpbWVzdGVwcGVyKCkpCiAgICAgICAgZXFzLmV2YWx1YXRlKG1vZGU9J3dlYWsnLCBkd19tb2RlPSd2ZWN0b3InLCBhc21fb2JqPXZlYykKCiAgICAgICAgcmV0dXJuIHZlYwoKY2xhc3MgVENvcnJlY3RvcnNSU1ZpYVByZXNzdXJlRVZQKCBUQ29ycmVjdG9yc1ZpYVByZXNzdXJlRVZQICk6CgogICAgZGVmIF9fY2FsbF9fKCBzZWxmLCBwcm9ibGVtID0gTm9uZSwgZGF0YSA9IE5vbmUgKToKICAgICAgICAiIiJkYXRhOiBjb3Jyc19ycywgZXZwIiIiCiAgICAgICAgcHJvYmxlbSA9IGdldF9kZWZhdWx0KCBwcm9ibGVtLCBzZWxmLnByb2JsZW0gKQo8fGZpbV9ob2xlfD4KCiAgICAgICAgYXNzZXJ0XyggZXZwLmViY3MgPT0gc2VsZi5lYmNzICkKICAgICAgICBhc3NlcnRfKCBldnAuZXBiY3MgPT0gc2VsZi5lcGJjcyApCgogICAgICAgIGRpbSA9IHByb2JsZW0uZ2V0X2RpbSgpCgogICAgICAgIHNlbGYuc2V0dXBfZXF1YXRpb25zKHNlbGYuZXF1YXRpb25zKQoKICAgICAgICBzb2x2ZSA9IHNlbGYuY29tcHV0ZV9jb3JyZWN0b3JzCiAgICAgICAgc3RhdGVzID0gbm0uemVyb3MoKGRpbSwgZGltKSwgZHR5cGU9bm0ub2JqZWN0KQogICAgICAgIGNsaXN0ID0gW10KICAgICAgICBmb3IgaXIgaW4gcmFuZ2UoIGRpbSApOgogICAgICAgICAgICBmb3IgaWMgaW4gcmFuZ2UoIGRpbSApOgogICAgICAgICAgICAgICAgc3RhdGVzW2lyLGljXSA9IHNvbHZlKGV2cCwgLTEuMCwgY29ycnMuc3RhdGVzW2lyLGljXSwgdHMpCiAgICAgICAgICAgICAgICBjbGlzdC5hcHBlbmQoKGlyLCBpYykpCgogICAgICAgIGNvcnJfc29sID0gQ29yclNvbHV0aW9uKG5hbWU9c2VsZi5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlcz1zdGF0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9zdGVwPXRzLm5fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzPWNsaXN0KQoKICAgICAgICBzZWxmLnNhdmUoY29ycl9zb2wsIHByb2JsZW0sIHRzKQoKICAgICAgICByZXR1cm4gY29ycl9zb2wKCgpjbGFzcyBUQ29ycmVjdG9yc1ByZXNzdXJlVmlhUHJlc3N1cmVFVlAoIFRDb3JyZWN0b3JzVmlhUHJlc3N1cmVFVlAgKToKCiAgICBkZWYgX19jYWxsX18oIHNlbGYsIHByb2JsZW0gPSBOb25lLCBkYXRhID0gTm9uZSwgc2F2ZV9ob29rID0gTm9uZSApOgogICAgICAgICIiImRhdGE6IGNvcnJzX3ByZXNzdXJlLCBldnAsIG9wdGlvbmFsbHkgdmVjX2ciIiIKICAgICAgICBwcm9ibGVtID0gZ2V0X2RlZmF1bHQoIHByb2JsZW0sIHNlbGYucHJvYmxlbSApCiAgICAgICAgc2VsZi5pbml0X3NvbHZlcnMocHJvYmxlbSkKICAgICAgICB0cyA9IHByb2JsZW0uZ2V0X3RpbWVzdGVwcGVyKCkKCiAgICAgICAgY29ycnMsIGV2cCA9IFtkYXRhW2lpXSBmb3IgaWkgaW4gc2VsZi5yZXF1aXJlc1s6Ml1dCiAgICAgICAgaWYgbGVuKHNlbGYucmVxdWlyZXMpID09IDM6CiAgICAgICAgICAgIHZlY19nID0gZGF0YVtzZWxmLnJlcXVpcmVzWzJdXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHZlY19nID0gTm9uZQoKICAgICAgICBhc3NlcnRfKCBldnAuZWJjcyA9PSBzZWxmLmViY3MgKQogICAgICAgIGFzc2VydF8oIGV2cC5lcGJjcyA9PSBzZWxmLmVwYmNzICkKCiAgICAgICAgc2VsZi5zZXR1cF9lcXVhdGlvbnMoc2VsZi5lcXVhdGlvbnMpCgogICAgICAgIHNvbHZlID0gc2VsZi5jb21wdXRlX2NvcnJlY3RvcnMKICAgICAgICBzdGF0ZSA9IHNvbHZlKGV2cCwgMS4wLCBjb3Jycy5zdGF0ZSwgdHMsIHZlY19nPXZlY19nKQoKICAgICAgICBjb3JyX3NvbCA9IENvcnJTb2x1dGlvbihuYW1lPXNlbGYubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZT1zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX3N0ZXA9dHMubl9zdGVwKQoKICAgICAgICBzZWxmLnNhdmUoY29ycl9zb2wsIHByb2JsZW0sIHRzKQoKICAgICAgICByZXR1cm4gY29ycl9zb2wKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmluaXRfc29sdmVycyhwcm9ibGVtKQogICAgICAgIHRzID0gcHJvYmxlbS5nZXRfdGltZXN0ZXBwZXIoKQoKICAgICAgICBjb3JycywgZXZwID0gW2RhdGFbaWldIGZvciBpaSBpbiBzZWxmLnJlcXVpcmVzXQo8fGZpbV9lbmR8Pg=="]
["287d4ff5d7cdeb2bfaacaff15e77a53eb4641f3a-1","287d4ff5d7cdeb2bfaacaff15e77a53eb4641f3a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRpc2NvcmQKZnJvbSBjb3B5IGltcG9ydCBkZWVwY29weQpmcm9tIGRpc2NvcmQuZXh0IGltcG9ydCBjb21tYW5kcwpmcm9tIGRpc2xhc2ggaW1wb3J0IHNsYXNoX2NvbW1hbmQsIHVzZXJfY29tbWFuZCwgT3B0aW9uLCBPcHRpb25UeXBlCgp0ZW1wbGF0ZV9lbWJlZCA9IE5vbmUKZGIgPSBOb25lCmN1cnNvciA9IE5vbmUKCmNsYXNzIFBvaW50cyhjb21tYW5kcy5Db2cpOgoJZGVmIF9faW5pdF9fKHNlbGYsIGJvdCwgY3RlbXBsYXRlX2VtYmVkLCBjZGIsIGNjdXJzb3IpOgoJCXNlbGYuYm90ID0gYm90CgkJZ2xvYmFsIHRlbXBsYXRlX2VtYmVkLCBkYiwgY3Vyc29yCgkJdGVtcGxhdGVfZW1iZWQgPSBjdGVtcGxhdGVfZW1iZWQKCQlkYiA9IGNkYgoJCWN1cnNvciA9IGNjdXJzb3IKCQoJQHNsYXNoX2NvbW1hbmQoZGVzY3JpcHRpb249IlNlZSBob3cgbWFueSBwb2ludHMgYSB1c2VyIGhhcyIsIG9wdGlvbnM9WwoJCU9wdGlvbigidXNlciIsICJVc2VyIiwgT3B0aW9uVHlwZS5VU0VSKQoJXSkKCWFzeW5jIGRlZiBwb2ludHMoc2VsZiwgY3R4LCB1c2VyPU5vbmUpOgoJCXVzZXIgPSB1c2VyIG9yIGN0eC5hdXRob3IKCQljdXJzb3IuZXhlY3V0ZSgiU0VMRUNUIFBvaW50cyBGUk9NIFBvaW50cyBXSEVSRSBJRCA9ID8iLCAodXNlci5pZCwpKQoJCWlmIGN1cnNvci5mZXRjaG9uZSgpIGlzIE5vbmU6IGN1cnNvci5leGVjdXRlKCIiIklOU0VSVCBJTlRPIFBvaW50cyhJRCwgUG9pbnRzKQoJCVZBTFVFUyg/LD8pIiIiLCAodXNlci5pZCwgMCkpCgkJZW1iZWQgPSBkZWVwY29weSh0ZW1wbGF0ZV9lbWJlZCkKCQljdXJzb3IuZXhlY3V0ZSgiU0VMRUNUIFBvaW50cyBmcm9tIFBvaW50cyBXSEVSRSBJRCA9ID8iLCAodXNlci5pZCwpKQoJCWVtYmVkLmFkZF9maWVsZChuYW1lID0gIlBvaW50cyIsIHZhbHVlID0gZiJ7dXNlci5uYW1lfSN7dXNlci5kaXNjcmltaW5hdG9yfSIgKyBmIiBoYXMge2N1cnNvci5mZXRjaG9uZSgpWzBdfSBwb2ludHMuIiwgaW5saW5lID0gRmFsc2UpCgkJYXdhaXQgY3R4LnNlbmQoZW1iZWQgPSBlbWJlZCkKCglAdXNlcl9jb21tYW5kKG5hbWU9ImZydWl0eSBwb2ludHMiKQoJYXN5bmMgZGVmIGNvbnRleHRfcG9pbnRzKHNlbGYsIGN0eCk6IGF3YWl0IHNlbGYucG9pbnRzKHNlbGYsIGN0eCwgY3R4LnVzZXIpCgoJQHNsYXNoX2NvbW1hbmQoZGVzY3JpcHRpb249IlZpZXcgdGhlIHRvcCAxMCBwbGF5ZXJzIGZvciBwb2ludHMiKQoJYXN5bmMgZGVmIGxlYWRlcmJvYXJkKHNlbGYsIGN0eCk6CgkJc3RyaW5ncyA9IFtdCgkJZW1iZWQgPSBkZWVwY29weSh0ZW1wbGF0ZV9lbWJlZCkKCQljdXJzb3IuZXhlY3V0ZSgiU0VMRUNUICogRlJPTSBQb2ludHMgT1JERVIgQlkgUG9pbnRzIERFU0MgTElNSVQgMTAiKQoJCXBsYWNlID0gMQoJCWZvciB4IGluIGN1cnNvci5mZXRjaGFsbCgpOgoJCQl1c2VyID0gYXdhaXQgc2VsZi5ib3QuZmV0Y2hfdXNlcih4WzBdKQoJCQlzdHJpbmdzLmFwcGVuZChmIntwbGFjZX0uIHt1c2VyLm5hbWV9I3t1c2VyLmRpc2NyaW1pbmF0b3J9OiB7eFsxXX0iKQoJCQlwbGFjZSA9IHBsYWNlICsgMQoJCWVtYmVkLmFkZF9maWVsZChuYW1lID0gIkxlYWRlcmJvYXJkIiwgdmFsdWUgPSAiXG4iLmpvaW4oc3RyaW5ncyksIGlubGluZSA9IEZhbHNlKQoJCWF3YWl0IGN0eC5zZW5kKGVtYmVkID0gZW1iZWQpCgoJZGVmIHVubG9ja2VkKHNlbGYsIHBvaW50cywgcmVxdWlyZW1lbnQpOgoJICBpZiAocmVxdWlyZW1lbnQgLSBwb2ludHMpID4gMDogcmV0dXJuIGYie3JlcXVpcmVtZW50IC0gcG9pbnRzfSBwb2ludHMgdG8gZ28iCgkgIGVsc2U6IHJldHVybiAiKipVbmxvY2tlZCoqIgoKCUBzbGFzaF9jb21tYW5kKGRlc2NyaXB0aW9uPSJTaGlueSBiYWRnZXMiKQoJYXN5bmMgZGVmIGJhZGdlcyhzZWxmLCBjdHgpOgoJCWN1cnNvci5leGVjdXRlKCJTRUxFQ1QgUG9pbnRzIEZST00gUG9pbnRzIFdIRVJFIElEID0gPyIsIChjdHguYXV0aG9yLmlkLCkpCgkJaWYgY3Vyc29yLmZldGNob25lKCkgaXMgTm9uZTogY3Vyc29yLmV4ZWN1dGUoIiIiSU5TRVJUIElOVE8gUG9pbnRzKElELCBQb2ludHMpCgkJVkFMVUVTKD8sPykiIiIsIChjdHguYXV0aG9yLmlkLCAwKSkKCQllbWJlZCA9IGRlZXBjb3B5KHRlbXBsYXRlX2VtYmVkKQoJCWN1cnNvci5leGVjdXRlKCJTRUxFQ1QgUG9pbnRzIGZyb20gUG9pbnRzIFdIRVJFIElEID0gPyIsIChjdHguYXV0aG9yLmlkLCkpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCQlwb2ludHMgPSBjdXJzb3IuZmV0Y2hvbmUoKVswXQoJCWJhZGdlcyA9IFtdCgkJY29udHJpYnV0b3JzID0gWzgwNjU1MDI2MDEyNjE4NzU2MCwgODY1MjkwNTI1MjU4NTQ3MjIwXQoJCWlmIHBvaW50cyA+PSA1MDA6IGJhZGdlcy5hcHBlbmQoIjw6RnJ1aXR5QmFkZ2U1MDA6ODk5MjI2NDk5MjU5OTkwMDU3PiIpCjx8ZmltX2VuZHw+"]
["bb8c9d83e1a2cb6c246c3978cd73ba43a16985d4-2","bb8c9d83e1a2cb6c246c3978cd73ba43a16985d4","PHxmaW1fcHJlZml4fD4KIiIiTWl4aW4gZm9yIHNlbmRfdG9fYnVndHJhY2tlcigpLiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmZyb20gLiBpbXBvcnQgYmFzZQoKCmNsYXNzIE1peGluKGJhc2UuQmFzZU1peGluKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgIiIiTWl4aW4gZm9yIHNlbmRfdG9fYnVndHJhY2tlcigpLiIiIgoKICAgIGRlZiBzZW5kX3RvX2J1Z3RyYWNrZXIoc2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdF9uYW1lPU5vbmUsCjx8ZmltX2VuZHw+"]
["3cbdec2a5fb2ec56495e837a4c9cbf477377ad0a-5","3cbdec2a5fb2ec56495e837a4c9cbf477377ad0a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IGNvcHkKaW1wb3J0IGFwb2dlZV90b29scyBhcyBhcAoKCmRlZiBjb250aW51dW0oZGF0YSwgbWRsLCAqKmt3YXJncyk6CiAgICAKICAgICIiIgogICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgY29udGludXVtIG11bHRpcGxpZWQgbW9kZWwuCiAgICBASmVzc2ljYSBCaXJreSwgRGlubyBDaGloLUNodW4gSHN1CgogICAgSW5wdXQ6ICAnZGF0YScgIDogdGhlIGRhdGEgdXNlZCBpbiB0aGUgZml0dGluZyBhcyBhIHBvbHlub21pYWwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAnbWRsJyAgIDogdGhlIG1vZGVsIGJlaW5nIGNvcnJlY3RlZAogICAgICAgICAgICAnZGVnJyAgIDogdGhlIGRlZ3JlZSBvZiB0aGUgZml0dGluZyBwb2x5bm9taWFsLiBUaGUgZGVmYXVsdCB2YXVsZSBpcyA1LgogICAgICAgICAgICAnYmFuZHMnIDogbGlzdCBvZiB3YXZlbGVudGggcmFuZ2VzIGluIG92ZXIgd2hpY2ggc2VwYXJhdGUgcG9seW5vbWlhbHMgd2lsbCBiZSBmaXQ7CiAgICAgICAgICAgICAgICAgICAgICBhbnkgd2F2ZWxlbmd0aHMgb3V0c2lkZSBvZiB0aGVzZSByYW5nZXMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIG5hbiBpbiB0aGUgcmV0dXJuZWQgbW9kZWwKPHxmaW1fZW5kfD4="]
["955c2df2bdbd33f4349760623a5ecff8658eb323-3","955c2df2bdbd33f4349760623a5ecff8658eb323","PHxmaW1fcHJlZml4fD4KZnJvbSBubHRrLmNvcnB1cyBpbXBvcnQgIHdvcmRuZXQKCnN5bnMgPSB3b3JkbmV0LnN5bnNldHMoInByb2dyYW0iKQpwcmludChzeW5zWzBdLm5hbWUoKSkKcHJpbnQoc3luc1swXS5sZW1tYXMoKVswXS5uYW1lKCkpCnByaW50KHN5bnNbMF0uZGVmaW5pdGlvbigpKQpwcmludChzeW5zWzBdLmV4YW1wbGVzKCkpICAgCgpzeW5vbnltcyA9IFtdCmFudG9ueW1zID0gW10KCmZvciBzeW4gaW4gd29yZG5ldC5zeW5zZXRzKCJjb29sIik6CiAgICBmb3IgbCBpbiBzeW4ubGVtbWFzKCk6CiAgICAgICAgI3ByaW50KCJsOiIsIGwpCjx8ZmltX2hvbGV8PgpwcmludChzZXQoc3lub255bXMpKQpwcmludChzZXQoYW50b255bXMpKQoKdzEgPSB3b3JkbmV0LnN5bnNldCgnc2hpcC5uLjAxJykKdzIgPSB3b3JkbmV0LnN5bnNldCgnYm9hdC5uLjAxJykKcHJpbnQodzEud3VwX3NpbWlsYXJpdHkodzIpKQoKdzEgPSB3b3JkbmV0LnN5bnNldCgnc2hpcC5uLjAxJykKdzIgPSB3b3JkbmV0LnN5bnNldCgndHJ1Y2subi4wMScpCnByaW50KHcxLnd1cF9zaW1pbGFyaXR5KHcyKSkKCncxID0gd29yZG5ldC5zeW5zZXQoJ2hlbGxvLm4uMDEnKQp3MiA9IHdvcmRuZXQuc3luc2V0KCdwaG9uZS5uLjAxJykKcHJpbnQodzEud3VwX3NpbWlsYXJpdHkodzIpKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHN5bm9ueW1zLmFwcGVuZChsLm5hbWUoKSkKICAgICAgICBpZiBsLmFudG9ueW1zKCk6CiAgICAgICAgICAgIGFudG9ueW1zLmFwcGVuZChsLmFudG9ueW1zKClbMF0ubmFtZSgpKQoKPHxmaW1fZW5kfD4="]
["66bccae41d65f56acfc6e7e8be8e7303cab6f41f-2","66bccae41d65f56acfc6e7e8be8e7303cab6f41f","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgQ29udHJpYnV0b3JzIHRvIHRoZSBQYWNraXQgcHJvamVjdC4KIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCgppbXBvcnQganNvbgoKaW1wb3J0IHB5dGVzdApmcm9tIGNlbGVyeS5jYW52YXMgaW1wb3J0IFNpZ25hdHVyZQpmcm9tIGZsZXhtb2NrIGltcG9ydCBmbGV4bW9jawoKZnJvbSBvZ3Iuc2VydmljZXMucGFndXJlIGltcG9ydCBQYWd1cmVQcm9qZWN0CmZyb20gcGFja2l0LmNvbmZpZyBpbXBvcnQgSm9iQ29uZmlnVHJpZ2dlclR5cGUKZnJvbSBwYWNraXRfc2VydmljZS5tb2RlbHMgaW1wb3J0IEdpdEJyYW5jaE1vZGVsLCBLb2ppQnVpbGRUYXJnZXRNb2RlbCwgUGlwZWxpbmVNb2RlbApmcm9tIHBhY2tpdF9zZXJ2aWNlLndvcmtlci5qb2JzIGltcG9ydCBTdGV2ZUpvYnMKZnJvbSBwYWNraXRfc2VydmljZS53b3JrZXIubW9uaXRvcmluZyBpbXBvcnQgUHVzaGdhdGV3YXkKZnJvbSBwYWNraXRfc2VydmljZS53b3JrZXIudGFza3MgaW1wb3J0ICgKICAgIHJ1bl9kb3duc3RyZWFtX2tvamlfYnVpbGRfcmVwb3J0LAopCmZyb20gdGVzdHMuY29uZnRlc3QgaW1wb3J0IGtvamlfYnVpbGRfY29tcGxldGVkX3Jhd2hpZGUsIGtvamlfYnVpbGRfc3RhcnRfcmF3aGlkZQpmcm9tIHRlc3RzLnNwZWxsYm9vayBpbXBvcnQgZmlyc3RfZGljdF92YWx1ZSwgZ2V0X3BhcmFtZXRlcnNfZnJvbV9yZXN1bHRzCgoKQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAogICAgImtvamlfYnVpbGRfZml4dHVyZSIsIFtrb2ppX2J1aWxkX3N0YXJ0X3Jhd2hpZGUsIGtvamlfYnVpbGRfY29tcGxldGVkX3Jhd2hpZGVdCikKZGVmIHRlc3RfZG93bnN0cmVhbV9rb2ppX2J1aWxkX3JlcG9ydF9rbm93bl9idWlsZChrb2ppX2J1aWxkX2ZpeHR1cmUsIHJlcXVlc3QpOgogICAga29qaV9idWlsZF9ldmVudCA9IHJlcXVlc3QuZ2V0Zml4dHVyZXZhbHVlKGtvamlfYnVpbGRfZml4dHVyZS5fX25hbWVfXykKICAgIHBhY2tpdF95YW1sID0gKAogICAgICAgICJ7J3NwZWNmaWxlX3BhdGgnOiAncHl0aG9uLW9nci5zcGVjJywgJ3N5bmNlZF9maWxlcyc6IFtdLCIKICAgICAgICAiJ2pvYnMnOiBbeyd0cmlnZ2VyJzogJ2NvbW1pdCcsICdqb2InOiAna29qaV9idWlsZCd9XSwiCiAgICAgICAgIidkb3duc3RyZWFtX3BhY2thZ2VfbmFtZSc6ICdweXRob24tb2dyJ30iCiAgICApCiAgICBwYWd1cmVfcHJvamVjdCA9IGZsZXhtb2NrKAogICAgICAgIFBhZ3VyZVByb2plY3QsCiAgICAgICAgZnVsbF9yZXBvX25hbWU9InJwbXMvcHl0aG9uLW9nciIsCiAgICAgICAgZ2V0X3dlYl91cmw9bGFtYmRhOiAiaHR0cHM6Ly9zcmMuZmVkb3JhcHJvamVjdC5vcmcvcnBtcy9weXRob24tb2dyIiwKICAgICAgICBkZWZhdWx0X2JyYW5jaD0ibWFpbiIsCiAgICApCiAgICBwYWd1cmVfcHJvamVjdC5zaG91bGRfcmVjZWl2ZSgiZ2V0X2ZpbGVzIikud2l0aF9hcmdzKAogICAgICAgIHJlZj0iZTAyOWRkNTI1MGRkZTlhMzdhMmNkZGRiNmQ4MjJkOTczYjA5ZTVkYSIsIGZpbHRlcl9yZWdleD1yIi4rXC5zcGVjJCIKICAgICkuYW5kX3JldHVybihbInB5dGhvbi1vZ3Iuc3BlYyJdKQogICAgcGFndXJlX3Byb2plY3Quc2hvdWxkX3JlY2VpdmUoImdldF9maWxlX2NvbnRlbnQiKS53aXRoX2FyZ3MoCiAgICAgICAgcGF0aD0iLmRpc3Ryby9zb3VyY2UtZ2l0LnlhbWwiLCByZWY9ImUwMjlkZDUyNTBkZGU5YTM3YTJjZGRkYjZkODIyZDk3M2IwOWU1ZGEiCiAgICApLmFuZF9yYWlzZShGaWxlTm90Rm91bmRFcnJvciwgIk5vdCBmb3VuZC4iKQogICAgcGFndXJlX3Byb2plY3Quc2hvdWxkX3JlY2VpdmUoImdldF9maWxlX2NvbnRlbnQiKS53aXRoX2FyZ3MoCiAgICAgICAgcGF0aD0iLnBhY2tpdC55YW1sIiwgcmVmPSJlMDI5ZGQ1MjUwZGRlOWEzN2EyY2RkZGI2ZDgyMmQ5NzNiMDllNWRhIgogICAgKS5hbmRfcmV0dXJuKHBhY2tpdF95YW1sKQoKICAgIGZsZXhtb2NrKEdpdEJyYW5jaE1vZGVsKS5zaG91bGRfcmVjZWl2ZSgiZ2V0X29yX2NyZWF0ZSIpLndpdGhfYXJncygKICAgICAgICBicmFuY2hfbmFtZT0ibWFpbiIsCiAgICAgICAgbmFtZXNwYWNlPSJycG1zIiwKICAgICAgICByZXBvX25hbWU9InB5dGhvbi1vZ3IiLAogICAgICAgIHByb2plY3RfdXJsPSJodHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1zL3B5dGhvbi1vZ3IiLAogICAgKS5hbmRfcmV0dXJuKGZsZXhtb2NrKGlkPTksIGpvYl9jb25maWdfdHJpZ2dlcl90eXBlPUpvYkNvbmZpZ1RyaWdnZXJUeXBlLmNvbW1pdCkpCgogICAgIyAxKktvamlCdWlsZFJlcG9ydEhhbmRsZXIKICAgIGZsZXhtb2NrKFNpZ25hdHVyZSkuc2hvdWxkX3JlY2VpdmUoImFwcGx5X2FzeW5jIikub25jZSgpCiAgICBmbGV4bW9jayhQdXNoZ2F0ZXdheSkuc2hvdWxkX3JlY2VpdmUoInB1c2giKS5vbmNlKCkuYW5kX3JldHVybigpCgogICAgIyBEYXRhYmFzZQogICAgZmxleG1vY2soS29qaUJ1aWxkVGFyZ2V0TW9kZWwpLnNob3VsZF9yZWNlaXZlKCJnZXRfYnlfYnVpbGRfaWQiKS53aXRoX2FyZ3MoCiAgICAgICAgYnVpbGRfaWQ9MTg3NDA3NAogICAgKS5hbmRfcmV0dXJuKAogICAgICAgIGZsZXhtb2NrKAogICAgICAgICAgICB0YXJnZXQ9InRhcmdldCIsCiAgICAgICAgICAgIHN0YXR1cz0icGVuZGluZyIsCiAgICAgICAgICAgIHdlYl91cmw9InNvbWUtdXJsIiwKICAgICAgICAgICAgYnVpbGRfbG9nc191cmw9Tm9uZSwKICAgICAgICAgICAgZ2V0X3RyaWdnZXJfb2JqZWN0PWxhbWJkYTogZmxleG1vY2soCiAgICAgICAgICAgICAgICBpZD0xLCBqb2JfY29uZmlnX3RyaWdnZXJfdHlwZT1Kb2JDb25maWdUcmlnZ2VyVHlwZS5jb21taXQKICAgICAgICAgICAgKSwKICAgICAgICApCiAgICAgICAgLnNob3VsZF9yZWNlaXZlKCJzZXRfYnVpbGRfbG9nc191cmwiKQogICAgICAgIC53aXRoX2FyZ3MoKQogICAgICAgIC5hbmRfcmV0dXJuKCkKICAgICAgICAubW9jaygpCiAgICApLm9uY2UoKSAgIyBvbmx5IHdoZW4gcnVubmluZyBhIGhhbmRsZXIKCiAgICBwcm9jZXNzaW5nX3Jlc3VsdHMgPSBTdGV2ZUpvYnMoKS5wcm9jZXNzX21lc3NhZ2Uoa29qaV9idWlsZF9ldmVudCkKICAgICMgMSpLb2ppQnVpbGRSZXBvcnRIYW5kbGVyCiAgICBldmVudF9kaWN0LCBqb2IsIGpvYl9jb25maWcsIHBhY2thZ2VfY29uZmlnID0gZ2V0X3BhcmFtZXRlcnNfZnJvbV9yZXN1bHRzKAogICAgICAgIHByb2Nlc3NpbmdfcmVzdWx0cwogICAgKQogICAgYXNzZXJ0IGpzb24uZHVtcHMoZXZlbnRfZGljdCkKICAgIHJlc3VsdHMgPSBydW5fZG93bnN0cmVhbV9rb2ppX2J1aWxkX3JlcG9ydCgKICAgICAgICBwYWNrYWdlX2NvbmZpZz1wYWNrYWdlX2NvbmZpZywKICAgICAgICBldmVudD1ldmVudF9kaWN0LAogICAgICAgIGpvYl9jb25maWc9am9iX2NvbmZpZywKICAgICkKCiAgICBhc3NlcnQgZmlyc3RfZGljdF92YWx1ZShyZXN1bHRzWyJqb2IiXSlbInN1Y2Nlc3MiXQoKCkBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKICAgICJrb2ppX2J1aWxkX2ZpeHR1cmUiLCBba29qaV9idWlsZF9zdGFydF9yYXdoaWRlLCBrb2ppX2J1aWxkX2NvbXBsZXRlZF9yYXdoaWRlXQopCmRlZiB0ZXN0X2Rvd25zdHJlYW1fa29qaV9idWlsZF9yZXBvcnRfdW5rbm93bl9idWlsZChrb2ppX2J1aWxkX2ZpeHR1cmUsIHJlcXVlc3QpOgogICAga29qaV9idWlsZF9ldmVudCA9IHJlcXVlc3QuZ2V0Zml4dHVyZXZhbHVlKGtvamlfYnVpbGRfZml4dHVyZS5fX25hbWVfXykKCiAgICBwYWNraXRfeWFtbCA9ICgKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICJ7J3NwZWNmaWxlX3BhdGgnOiAncHl0aG9uLW9nci5zcGVjJywgJ3N5bmNlZF9maWxlcyc6IFtdLCIKICAgICAgICAiJ2pvYnMnOiBbeyd0cmlnZ2VyJzogJ2NvbW1pdCcsICdqb2InOiAna29qaV9idWlsZCd9XSwiCiAgICAgICAgIidkb3duc3RyZWFtX3BhY2thZ2VfbmFtZSc6ICdweXRob24tb2dyJ30iCjx8ZmltX2VuZHw+"]
["af4d998a1ef04465639ddd0dc96aafd444e8df12-2","af4d998a1ef04465639ddd0dc96aafd444e8df12","PHxmaW1fcHJlZml4fD4KZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZAppbXBvcnQgdGltZQppbXBvcnQgcHl0ZXN0CmZyb20gcGljbWQuX2NvbW11bmljYXRvciBpbXBvcnQgQ29tbXVuaWNhdG9yCmZyb20gcGljbWQuX2NvbnN0IGltcG9ydCBQSUNNRF9OT19FUlJPUiwgXAogICAgICAgIFBJQ01EX0lOVkFMSURfUEFSSVRZX0VSUk9SLCBcCiAgICAgICAgUElDTURfQ09NTUFORF9GQUlMX0VSUk9SCmZyb20gcGljbWQuX2RhdGEgaW1wb3J0IENvbW1hbmRSZXF1ZXN0CmZyb20gcGljbWQuX2V4Y2VwdGlvbiBpbXBvcnQgQ29tbWFuZE5vdEZvdW5kRXhjZXB0aW9uCmZyb20gcGljbWQuX3BpY21kIGltcG9ydCBQaUNtZApmcm9tIHBpY21kLl9yZWdpc3RlciBpbXBvcnQgSGFuZGxlclJlZ2lzdGVyCmZyb20gLm1vY2sgaW1wb3J0IE1vY2tTZXJpYWwKCgpjbGFzcyBEb21haW5FeGNlcHRpb24oRXhjZXB0aW9uKToKICAgIHN0YXR1c19jb2RlID0gMHhmZgogICAgZGVzY3JpcHRpb24gPSAnZG9tYWluIGVycm9yJwoKY2xhc3MgSW52YWxpZFN0YXR1c0NvZGVFeGNlcHRpb24oRXhjZXB0aW9uKToKICAgIHN0YXR1c19jb2RlID0gMHhmZiArIDEKCmNsYXNzIEludmFsaWREZXNjcmlwdGlvbkV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgZGVzY3JpcHRpb24gPSBiJ1x4MDAnICogKDB4ZmZmZiArIDEpCgpkZWYgdGVzdF9oYW5kbGVyKCk6CiAgICBwID0gUGlDbWQoQ29tbXVuaWNhdG9yKE1vY2tTZXJpYWwoKSkpCgogICAgQHAuaGFuZGxlcigweDAxKQogICAgZGVmIGgxKGRhdGEsIHNpemUpOgogICAgICAgIHBhc3MKCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgQHAuaGFuZGxlcigyNTYpCiAgICAgICAgZGVmIGgyKGRhdGEsIHNpemUpOgogICAgICAgICAgICBwYXNzCgpkZWYgdGVzdF9leGVjdXRlX2NvbW1hbmQoKToKICAgIHAgPSBQaUNtZChDb21tdW5pY2F0b3IoTW9ja1NlcmlhbCgpKSkKCiAgICBAcC5oYW5kbGVyKDB4MDEpCiAgICBkZWYgaDEoZGF0YSwgc2l6ZSk6CiAgICAgICAgcmV0dXJuIDEKCiAgICBAcC5oYW5kbGVyKDB4MDIpCiAgICBkZWYgaDIoZGF0YSk6CiAgICAgICAgcmFpc2UgRXhjZXB0aW9uCgogICAgQHAuaGFuZGxlcigweDAzKQogICAgZGVmIGgzKHNpemUpOgogICAgICAgIHJhaXNlIERvbWFpbkV4Y2VwdGlvbgoKICAgIEBwLmhhbmRsZXIoMHgwNCkKICAgIGRlZiBoNCgpOgogICAgICAgIHJldHVybiAyCgogICAgYzEgPSBDb21tYW5kUmVxdWVzdCgweDAxLCAxLCBiJ1x4MDEnLCAweDAxKQogICAgcjEgPSBwLmV4ZWN1dGVfY29tbWFuZChjMSkKICAgIGFzc2VydCByMS5zdGF0dXMgPT0gUElDTURfTk9fRVJST1IKICAgIGFzc2VydCByMS5kYXRhID09IGInXHgwMVx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnCgogICAgYzIgPSBDb21tYW5kUmVxdWVzdCgweDAxLCAwLCBiJycsIDB4MDIpICMgaW52YWxpZCBwYXJpdHkKICAgIHIyID0gcC5leGVjdXRlX2NvbW1hbmQoYzIpCiAgICBhc3NlcnQgcjIuc3RhdHVzID09IFBJQ01EX0lOVkFMSURfUEFSSVRZX0VSUk9SCiAgICBhc3NlcnQgcjIuZGF0YSA9PSBiJycKCiAgICBjMyA9IENvbW1hbmRSZXF1ZXN0KDB4MDIsIDAsIGInJywgMHgwMikKICAgIHIzID0gcC5leGVjdXRlX2NvbW1hbmQoYzMpCiAgICBhc3NlcnQgcjMuc3RhdHVzID09IFBJQ01EX0NPTU1BTkRfRkFJTF9FUlJPUgogICAgYXNzZXJ0IHIzLmRhdGEgPT0gYicnCgogICAgYzQgPSBDb21tYW5kUmVxdWVzdCgweDAzLCAwLCBiJycsIDB4MDMpCiAgICByNCA9IHAuZXhlY3V0ZV9jb21tYW5kKGM0KQogICAgYXNzZXJ0IHI0LnN0YXR1cyA9PSAweGZmCiAgICBhc3NlcnQgcjQuZGF0YSA9PSBiJ2RvbWFpbiBlcnJvcicKCiAgICBjNSA9IENvbW1hbmRSZXF1ZXN0KDB4MDQsIDAsIGInJywgMHgwNCkKICAgIHI1ID0gcC5leGVjdXRlX2NvbW1hbmQoYzUpCiAgICBhc3NlcnQgcjUuc3RhdHVzID09IFBJQ01EX05PX0VSUk9SCiAgICBhc3NlcnQgcjUuZGF0YSA9PSBiJ1x4MDJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJwoKZGVmIHRlc3RfZXhlY3V0ZV9jb21tYW5kX3doZW5faW52YWxpZF9yZXN1bHRfZm9ybWF0KCk6CiAgICBwID0gUGlDbWQoQ29tbXVuaWNhdG9yKE1vY2tTZXJpYWwoKSkpCgogICAgQHAuaGFuZGxlcigweDAxKQogICAgZGVmIGgxKCk6CiAgICAgICAgcmV0dXJuIGInXHgwMCcgKiAoMHhmZmZmICsgMSkgIyBvdmVyIGRhdGEgc2l6ZQoKICAgIEBwLmhhbmRsZXIoMHgwMikKICAgIGRlZiBoMihkYXRhLCBzaXplKToKICAgICAgICByYWlzZSBJbnZhbGlkU3RhdHVzQ29kZUV4Y2VwdGlvbgoKICAgIEBwLmhhbmRsZXIoMHgwMykKICAgIGRlZiBoMyhkYXRhLCBzaXplKToKICAgICAgICByYWlzZSBJbnZhbGlkRGVzY3JpcHRpb25FeGNlcHRpb24KCiAgICByMSA9IHAuZXhlY3V0ZV9jb21tYW5kKENvbW1hbmRSZXF1ZXN0KDB4MDEsIDAsIGInJywgMHgwMSkpCiAgICBhc3NlcnQgcjEuc3RhdHVzID09IFBJQ01EX0NPTU1BTkRfRkFJTF9FUlJPUgogICAgYXNzZXJ0IHIxLmRhdGEgPT0gYicnCgogICAgcjIgPSBwLmV4ZWN1dGVfY29tbWFuZChDb21tYW5kUmVxdWVzdCgweDAyLCAwLCBiJycsIDB4MDIpKQogICAgYXNzZXJ0IHIyLnN0YXR1cyA9PSBQSUNNRF9DT01NQU5EX0ZBSUxfRVJST1IKICAgIGFzc2VydCByMi5kYXRhID09IGInJwoKICAgIHIzID0gcC5leGVjdXRlX2NvbW1hbmQoQ29tbWFuZFJlcXVlc3QoMHgwMywgMCwgYicnLCAweDAzKSkKICAgIGFzc2VydCByMy5zdGF0dXMgPT0gUElDTURfQ09NTUFORF9GQUlMX0VSUk9SCiAgICBhc3NlcnQgcjMuZGF0YSA9PSBiJycKCmRlZiB0ZXN0X2dldF9oYW5kbGVyKCk6CiAgICBwID0gUGlDbWQoQ29tbXVuaWNhdG9yKE1vY2tTZXJpYWwoKSkpCgogICAgQHAuaGFuZGxlcigweDAxKQogICAgZGVmIGgxKGRhdGEsIHNpemUpOgogICAgICAgIHJldHVybiAxCgogICAgYXNzZXJ0IHAuZ2V0X2hhbmRsZXIoQ29tbWFuZFJlcXVlc3QoMHgwMSwgMCwgYicnLCAweDAxKSkgaXMgbm90IE5vbmUKCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoQ29tbWFuZE5vdEZvdW5kRXhjZXB0aW9uKToKICAgICAgICBwLmdldF9oYW5kbGVyKENvbW1hbmRSZXF1ZXN0KDB4MDIsIDAsIGInJywgMHgwMikpCgpkZWYgdGVzdF9waWNtZF9ydW5uZXIoKToKICAgIHMgPSBNb2NrU2VyaWFsKFsKICAgICAgICBiJ0FUKlBJQz1ceDAxXHgwMVx4MDBceDAyXHgwMlxyXG4nCiAgICAgICAgXSkKICAgIGMgPSBDb21tdW5pY2F0b3IocykKICAgIHAgPSBQaUNtZChjKQoKICAgIEBwLmhhbmRsZXIoMHgwMSkKICAgIGRlZiBoMSgpOgogICAgICAgIHJldHVybiAxCgogICAgVGhyZWFkKHRhcmdldD1wLnJ1biwgZGFlbW9uPVRydWUpLnN0YXJ0KCkKICAgIHRpbWUuc2xlZXAoMC4xKQogICAgYy5zdG9wKCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGFzc2VydCBzLndyaXR0ZW5fZGF0YSA9PSBiJypQSUM6XHgwMVx4MDhceDAwXHgwMVx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDA4XHJcbk9LXHJcbicKCmRlZiB0ZXN0X3Byb3ZpZGUoKToKPHxmaW1fZW5kfD4="]
["dd3a4e2b718a22871eb653a8a0802b7e16008517-2","dd3a4e2b718a22871eb653a8a0802b7e16008517","PHxmaW1fcHJlZml4fD4KZnJvbSByYW5kYXVnbWVudCBpbXBvcnQgUmFuZEF1Z21lbnQKZnJvbSB0cmFuc2Zvcm1lcnMgaW1wb3J0IFdhdjJWZWMyRm9yQ1RDLCBXYXYyVmVjMlByb2Nlc3Nvcgpmcm9tIHV1aWQgaW1wb3J0IHV1aWQ0CmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCByb2NfYXVjX3Njb3JlCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gdGltbSBpbXBvcnQgY3JlYXRlX21vZGVsCmZyb20gbW9kdWxlcyBpbXBvcnQgTmV0LCBMU1RNQ2xhc3NpZmllcgppbXBvcnQgdG9yY2gKaW1wb3J0IHRvcmNodmlzaW9uCmZyb20gdG9yY2gudXRpbHMuZGF0YSBpbXBvcnQgRGF0YUxvYWRlcgpmcm9tIHRxZG0gaW1wb3J0IHRxZG0KZnJvbSB1dGlscyBpbXBvcnQgTnVtcHlJbWFnZXNDU1ZEYXRhc2V0CmZyb20gbm5BdWRpby5TcGVjdHJvZ3JhbSBpbXBvcnQgQ1FUMTk5MnYyCgpkZWYgX3NwbGl0dGVyKGRhdGFzZXQsIHBhcnRpdGlvbiA6IGludCk6CiAgICB0cmFpbl9zcGxpdCA9IGludChwYXJ0aXRpb24gKiBsZW4oZGF0YXNldCkpCiAgICBldmFsX3NwbGl0ID0gaW50KGxlbihkYXRhc2V0KSAtIHRyYWluX3NwbGl0KQo8fGZpbV9ob2xlfD4KZGVmIF9sb2FkKGRpcmVjdG9yeSwgbW9kZWxfbmFtZSk6CiAgICBtb2RlbCA9IE5ldCgxKSNjcmVhdGVfbW9kZWwobW9kZWxfbmFtZSwgbnVtX2NsYXNzZXM9MSwgcHJldHJhaW5lZD1UcnVlLCBpbl9jaGFucz0xKQogICAgbW9kZWwgPSB0b3JjaC5ubi5EYXRhUGFyYWxsZWwobW9kZWwuY3VkYSgpKQogICAgbW9kZWwubG9hZF9zdGF0ZV9kaWN0KHRvcmNoLmxvYWQoZGlyZWN0b3J5KSkKICAgIHJldHVybiBtb2RlbAoKZGVmIF9zYXZlKGRpcmVjdG9yeSwgbW9kZWwsIGVwb2NoKToKICAgIHRvcmNoLnNhdmUobW9kZWwuc3RhdGVfZGljdCgpLCAie30vLi97fS5wdGgiLmZvcm1hdChkaXJlY3RvcnksIGYiZzJuZXRfY3VzdG9tX25ldF97ZXBvY2h9X3t1dWlkNCgpfSIpKQogICAgICAgICAgICAgICAgCmRlZiB1cGRhdGUobW9kZSA6IHN0ciwgKiprd2FyZ3MpOgogICAgY29ycmVjdCwgcnVubmluZ19sb3NzLCB0b3RhbCwgaXRlcmF0aW9ucywgcm9jX2F1YyA9IDAsIDAsIDAsIDAsIDAKICAgIGZvciB4LCB5IGluIHRxZG0oa3dhcmdzW21vZGVdKToKICAgICAgICB4ID0ga3dhcmdzWyd0cmFuc2Zvcm1zJ10oeC5jdWRhKCkpLnVuc3F1ZWV6ZSgxKQogICAgICAgIGlmIG1vZGUgPT0gJ3RyYWluJzoKICAgICAgICAgICAgc2VlZCA9IHRvcmNoLnJhbmRwZXJtKHguc2l6ZSgwKS8vMikKICAgICAgICAgICAgeFtzZWVkXSA9IHRvcmNodmlzaW9uLnRyYW5zZm9ybXMuZnVuY3Rpb25hbC5oZmxpcCh4W3NlZWRdKQogICAgICAgICAgICBoID0gdG9yY2guc2lnbW9pZChrd2FyZ3NbJ21vZGVsJ10oeC5jdWRhKCkpKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGggPSB0b3JjaC5zaWdtb2lkKGt3YXJnc1snbW9kZWwnXSh4LmN1ZGEoKSkpCiAgICAgICAgbG9zcyA9IGt3YXJnc1snbG9zcyddKGgudmlldygtMSkuY3B1KCksIHkuZmxvYXQoKSkKICAgICAgICBpZiBtb2RlID09ICd0cmFpbic6CiAgICAgICAgICAgIGt3YXJnc1snbW9kZWwnXS56ZXJvX2dyYWQoKQogICAgICAgICAgICBsb3NzLmJhY2t3YXJkKCkKICAgICAgICAgICAga3dhcmdzWydvcHRpbSddLnN0ZXAoKQogICAgICAgICAgICBrd2FyZ3NbJ3NjaGVkdWxlciddLnN0ZXAoKQogICAgICAgIHJ1bm5pbmdfbG9zcyArPSBsb3NzLmNwdSgpLml0ZW0oKQogICAgICAgIHJvY19hdWMgKz0gcm9jX2F1Y19zY29yZSh5LmNwdSgpLmRldGFjaCgpLm51bXB5KCksIGgudmlldygtMSkuY3B1KCkuZGV0YWNoKCkubnVtcHkoKSkKICAgICAgICB5XyA9IHRvcmNoLndoZXJlKGggPj0gMC41LCAxLCAwKS5mbG9hdCgpCiAgICAgICAgdG90YWwgKz0geS5zaXplKDApCiAgICAgICAgaXRlcmF0aW9ucyArPSAxCiAgICAgICAgY29ycmVjdCArPSAoeV8udmlldygtMSkuY3B1KCk9PXkuY3B1KCkpLnN1bSgpLml0ZW0oKQogICAgICAgIGlmIGl0ZXJhdGlvbnMla3dhcmdzWydsb2dfc3RlcCddPT0wOgogICAgICAgICAgICBwcmludChjb3JyZWN0L3RvdGFsLCByb2NfYXVjL2l0ZXJhdGlvbnMpCiAgICAgICAgdG9yY2guY3VkYS5lbXB0eV9jYWNoZSgpCiAgICByZXR1cm4gZmxvYXQoY29ycmVjdC90b3RhbCksIGZsb2F0KHJ1bm5pbmdfbG9zcy9pdGVyYXRpb25zKSwgZmxvYXQocm9jX2F1Yy9pdGVyYXRpb25zKQoKZGVmIF93ZWlnaHRfY2FsYyhkaXN0cmlidXRpb24pOgogICAgcmV0dXJuIDEuL3RvcmNoLnRlbnNvcihkaXN0cmlidXRpb24pLmZsb2F0KCkKCmRlZiB0cmFpbigqKmt3YXJncyk6CiAgICAjdG9yY2guZGlzdHJpYnV0ZWQuaW5pdF9wcm9jZXNzX2dyb3VwKGJhY2tlbmQ9J25jY2wnLCB3b3JsZF9zaXplPU4sIGluaXRfbWV0aG9kPScuLi4nKQogICAgcXRyYW5zZm9ybV9wYXJhbXM9eyJzciI6IDIwNDgsICJmbWluIjogMjAsICJmbWF4IjogMTAyNCwgImhvcF9sZW5ndGgiOiAzMiwgImJpbnNfcGVyX29jdGF2ZSI6IDh9CiAgICAKICAgIG1vZGVsID0gTmV0KDEpIyBjcmVhdGVfbW9kZWwoa3dhcmdzWydtb2RlbCddLCBudW1fY2xhc3Nlcz0xLCBwcmV0cmFpbmVkPVRydWUsIGluX2NoYW5zPTEpIwogICAgI21vZGVsLmhlYWQuZmMgPSB0b3JjaC5ubi5MaW5lYXIobW9kZWwuY2xhc3NpZmllci5pbl9mZWF0dXJlcywgMSkKICAgICIiIgogICAgbW9kZWwgPSBXYXYyVmVjMkZvckNUQy5mcm9tX3ByZXRyYWluZWQoInRlY2hpYWl0aC93YXYydmVjMi14bHNyLWZ0LWN5IiwgbnVtX2xhYmVscz0xKQogICAgbW9kZWwubG1faGVhZCA9IHRvcmNoLm5uLkxpbmVhcigxMDI0LCAxKQogICAgIiIiCiAgICBtb2RlbCA9IHRvcmNoLm5uLkRhdGFQYXJhbGxlbChtb2RlbC5jdWRhKCkpCiAgICBpZiBrd2FyZ3NbJ3RyYWluX2NoZWNrcG9pbnQnXToKICAgICAgICBtb2RlbC5sb2FkX3N0YXRlX2RpY3QodG9yY2gubG9hZChrd2FyZ3NbJ2NoZWNrcG9pbnQnXSkpCiAgICBjcXQgPSBDUVQxOTkydjIoKipxdHJhbnNmb3JtX3BhcmFtcywgdmVyYm9zZT1GYWxzZSkuY3VkYSgpCiAgICB0cmFuc2Zvcm1zID0gdG9yY2h2aXNpb24udHJhbnNmb3Jtcy5Db21wb3NlKFt0b3JjaHZpc2lvbi50cmFuc2Zvcm1zLlRvUElMSW1hZ2UoKSwgUmFuZEF1Z21lbnQoKSwgdG9yY2h2aXNpb24udHJhbnNmb3Jtcy5Ub1RlbnNvcigpXSkKICAgIGRhdGFzZXQgPSBOdW1weUltYWdlc0NTVkRhdGFzZXQoa3dhcmdzWydyb290J10sIGt3YXJnc1snY3N2J10sIFRydWUsIHRyYW5zZm9ybXMpCiAgICB0cmFpbl9zcGxpdCwgdmFsX3NwbGl0ID0gX3NwbGl0dGVyKGRhdGFzZXQsIDAuOSkKICAgIGNvbmZpZyA9IHsib3B0aW0iIDogdG9yY2gub3B0aW0uUk1TcHJvcChtb2RlbC5wYXJhbWV0ZXJzKCksIGxyPTFlLTMsIG1vbWVudHVtPTAuOSwgYWxwaGE9MC45KSwKICAgICAgICAgICAgICAibG9zcyIgOiB0b3JjaC5ubi5CQ0VMb3NzKCksCiAgICAgICAgICAgICAgInRyYWluIiA6IERhdGFMb2FkZXIodHJhaW5fc3BsaXQsIGt3YXJnc1snYmF0Y2hfc2l6ZSddLCBzaHVmZmxlPVRydWUsIG51bV93b3JrZXJzPTQpLAogICAgICAgICAgICAgICJ2YWwiIDogRGF0YUxvYWRlcih2YWxfc3BsaXQsIGt3YXJnc1snYmF0Y2hfc2l6ZSddLCBzaHVmZmxlPVRydWUsIG51bV93b3JrZXJzPTQpLAogICAgICAgICAgICAgICJsb2dfc3RlcCI6IGt3YXJnc1snbG9nX3N0ZXAnXQogICAgICAgICAgICAgIH0KICAgIGNvbmZpZ1snbW9kZWwnXSA9IG1vZGVsLmN1ZGEoKQogICAgY29uZmlnWyJzY2hlZHVsZXIiXSA9IHRvcmNoLm9wdGltLmxyX3NjaGVkdWxlci5TdGVwTFIoY29uZmlnWydvcHRpbSddLCBzdGVwX3NpemU9Mi40LCBnYW1tYT0wLjk3KQogICAgY29uZmlnWyd0cmFuc2Zvcm1zJ10gPSBjcXQKICAgIGZsYWcgPSBUcnVlCiAgICBmb3IgaSBpbiByYW5nZShrd2FyZ3NbJ2Vwb2NocyddKToKICAgICAgICBwcmludChmJ3RyYWluaW5nIHtpKzF9IDpcbicpCiAgICAgICAgY29uZmlnWydtb2RlbCddLnRyYWluKCkKICAgICAgICBtZXRyaWNzID0gdXBkYXRlKCd0cmFpbicsICoqY29uZmlnKQogICAgICAgIGlmIG1ldHJpY3NbMF0gPj0ga3dhcmdzWydvcHRpbV90aHJlc2hvbGQnXSBhbmQgZmxhZzoKICAgICAgICAgICAgY29uZmlnWydvcHRpbSddID0gdG9yY2gub3B0aW0uU0dEKG1vZGVsLnBhcmFtZXRlcnMoKSwgbHI9MWUtMywgbW9tZW50dW09MC45LCB3ZWlnaHRfZGVjYXk9MWUtNSkKICAgICAgICAgICAgY29uZmlnWydzY2hlZHVsZXInXSA9IHRvcmNoLm9wdGltLmxyX3NjaGVkdWxlci5TdGVwTFIoY29uZmlnWydvcHRpbSddLCBzdGVwX3NpemU9Mi40LCBnYW1tYT0wLjk3KQogICAgICAgICAgICBmbGFnID0gRmFsc2UKICAgICAgICAgICAgcHJpbnQoIlN3aXRjaGluZyBPcHRpbWl6ZXIgZnJvbSBSTVNwcm9wIHRvIFNHRCIpCiAgICAgICAgcHJpbnQobWV0cmljcykKICAgICAgICB3aXRoIHRvcmNoLm5vX2dyYWQoKToKICAgICAgICAgICAgI2NvbmZpZ1snbW9kZWwnXS5ldmFsKCkKICAgICAgICAgICAgcHJpbnQoZidldmFsdWF0aW5nIHtpKzF9OlxuJykKICAgICAgICAgICAgcHJpbnQodXBkYXRlKCd2YWwnLCAqKmNvbmZpZykpCiAgICAgICAgaWYgKGkrMSklNT09MDoKICAgICAgICAgICBfc2F2ZSgiY2hlY2twb2ludHMiLCBjb25maWdbJ21vZGVsJ10sIGkrMSkKCmRlZiBfc3VibWlzc2lvbigqKmt3YXJncyk6CiAgICBxdHJhbnNmb3JtX3BhcmFtcz17InNyIjogMjA0OCwgImZtaW4iOiAyMCwgImZtYXgiOiAxMDI0LCAiaG9wX2xlbmd0aCI6IDMyLCAiYmluc19wZXJfb2N0YXZlIjogOH0KICAgIHRyYW5zZm9ybXMgPSBDUVQxOTkydjIoKipxdHJhbnNmb3JtX3BhcmFtcywgdmVyYm9zZT1GYWxzZSkuY3VkYSgpCiAgICBkYXRhc2V0ID0gTnVtcHlJbWFnZXNDU1ZEYXRhc2V0KGt3YXJnc1sncm9vdF90ZXN0J10sIGt3YXJnc1snY3N2J10sIEZhbHNlLCB0cmFuc2Zvcm1zKQogICAgbW9kZWwgPSBfbG9hZChrd2FyZ3NbJ2NoZWNrcG9pbnQnXSwga3dhcmdzWydtb2RlbCddKQogICAgbG9hZGVyID0gRGF0YUxvYWRlcihkYXRhc2V0LCBrd2FyZ3NbJ2JhdGNoX3NpemUnXSwgc2h1ZmZsZT1GYWxzZSwgbnVtX3dvcmtlcnM9NCkKICAgIGRmID0gcGQuRGF0YUZyYW1lKGNvbHVtbnM9WydpZCcsICd0YXJnZXQnXSkKICAgICNtb2RlbC5ldmFsKCkKICAgIHdpdGggdG9yY2gubm9fZ3JhZCgpOgogICAgICAgIGZvciB4LCBuYW1lIGluIHRxZG0obG9hZGVyKToKICAgICAgICAgICAgaCA9IHRvcmNoLnNpZ21vaWQobW9kZWwodHJhbnNmb3Jtcyh4LmN1ZGEoKSkudW5zcXVlZXplKDEpKSkKICAgICAgICAgICAgZGYgPSBwZC5jb25jYXQoW2RmLCBwZC5EYXRhRnJhbWUuZnJvbV9kaWN0KHsiaWQiOiBsaXN0KG5hbWUpLCAidGFyZ2V0IjogaC52aWV3KC0xKS5jcHUoKS50b2xpc3QoKX0pXSkKICAgICAgICAgICAgI3ByaW50KGRmLmhlYWQoKSkKICAgIGRmLnRvX2Nzdihrd2FyZ3NbJ3N1Ym1pc3Npb25fcGF0aCddLCBpbmRleD1GYWxzZSkKCgpjb25maWcgPSB7CiAgICAgICAgJ21vZGVsJyA6ICJjdXN0b21fbmV0IiwKICAgICAgICAgICAncm9vdCcgOiAiL2hvbWUvZnJhdWx0eS9nMm5ldF9kYXRhc2V0L3RyYWluIiwKICAgICAgICAgICAnY3N2JyA6ICIvaG9tZS9mcmF1bHR5L2cybmV0X2RhdGFzZXQvdHJhaW5pbmdfbGFiZWxzLmNzdiIsCiAgICAgICAgICAgJ3Jvb3RfdGVzdCcgOiAiL2hvbWUvZnJhdWx0eS9nMm5ldF9kYXRhc2V0L3Rlc3QiLAogICAgICAgICAgICdlcG9jaHMnIDogMTUsCiAgICAgICAgICAgJ2NoZWNrcG9pbnQnOiIvaG9tZS9mcmF1bHR5L2cybmV0L2NoZWNrcG9pbnRzL2cybmV0X2N1c3RvbV9uZXRfMTVfMzA3ZjYzY2UtZjhiNy00ZDIwLTk2YzYtZTYzMTg0YTM0ODEzLnB0aCIsCiAgICAgICAgICAgJ3N1Ym1pc3Npb25fcGF0aCc6ICIvaG9tZS9mcmF1bHR5L2cybmV0L3N1Ym1pc3Npb25zL3N1Ym1pc3Npb25fOF9nMm5ldF9jdXN0b21fbmV0X2V2YWwuY3N2IiwKICAgICAgICAgICAndHJhaW5fY2hlY2twb2ludCc6IEZhbHNlLAogICAgICAgICAgICdsb2dfc3RlcCc6IDI1LAogICAgICAgICAgICdiYXRjaF9zaXplJzogMjA0OCwKICAgICAgICAgICAnb3B0aW1fdGhyZXNob2xkJzogMC43NwogICAgICAgICB9CiN0cmFpbigqKmNvbmZpZykKX3N1Ym1pc3Npb24oKipjb25maWcpCjx8ZmltX3N1ZmZpeHw+CiAgICBzcGxpdHMgPSBbdHJhaW5fc3BsaXQsIGV2YWxfc3BsaXRdCiAgICByZXR1cm4gdG9yY2gudXRpbHMuZGF0YS5kYXRhc2V0LnJhbmRvbV9zcGxpdChkYXRhc2V0LCBzcGxpdHMpCgo8fGZpbV9lbmR8Pg=="]
["bb7e6233840f0c7c921c1829f0e4ce97705e1163-1","bb7e6233840f0c7c921c1829f0e4ce97705e1163","PHxmaW1fcHJlZml4fD4KIiIiYWlyYnVzYmFjayBVUkwgQ29uZmlndXJhdGlvbgoKVGhlIGB1cmxwYXR0ZXJuc2AgbGlzdCByb3V0ZXMgVVJMcyB0byB2aWV3cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHNlZToKICAgIGh0dHBzOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi8zLjIvdG9waWNzL2h0dHAvdXJscy8KRXhhbXBsZXM6CkZ1bmN0aW9uIHZpZXdzCiAgICAxLiBBZGQgYW4gaW1wb3J0OiAgZnJvbSBteV9hcHAgaW1wb3J0IHZpZXdzCiAgICAyLiBBZGQgYSBVUkwgdG8gdXJscGF0dGVybnM6ICBwYXRoKCcnLCB2aWV3cy5ob21lLCBuYW1lPSdob21lJykKQ2xhc3MtYmFzZWQgdmlld3MKICAgIDEuIEFkZCBhbiBpbXBvcnQ6ICBmcm9tIG90aGVyX2FwcC52aWV3cyBpbXBvcnQgSG9tZQogICAgMi4gQWRkIGEgVVJMIHRvIHVybHBhdHRlcm5zOiAgcGF0aCgnJywgSG9tZS5hc192aWV3KCksIG5hbWU9J2hvbWUnKQpJbmNsdWRpbmcgYW5vdGhlciBVUkxjb25mCiAgICAxLiBJbXBvcnQgdGhlIGluY2x1ZGUoKSBmdW5jdGlvbjogZnJvbSBkamFuZ28udXJscyBpbXBvcnQgaW5jbHVkZSwgcGF0aAogICAgMi4gQWRkIGEgVVJMIHRvIHVybHBhdHRlcm5zOiAgcGF0aCgnYmxvZy8nLCBpbmNsdWRlKCdibG9nLnVybHMnKSkKIiIiCmZyb20gZGphbmdvLmNvbnRyaWIgaW1wb3J0IGFkbWluCmZyb20gZGphbmdvLnVybHMgaW1wb3J0IHBhdGgKZnJvbSBkamFuZ28udXJscy5jb25mIGltcG9ydCBpbmNsdWRlCiMgZnJvbSByZXN0X2ZyYW1ld29ya19zd2FnZ2VyLnZpZXdzIGltcG9ydCBnZXRfc3dhZ2dlcl92aWV3CgojIFVzZXJuYW1lOiBhZG1pbgojIFBhc3N3b3JkOiBBaXJidXNBaXJnbGlkZXJzCjx8ZmltX2hvbGV8PgogICAgcGF0aCgnYWRtaW4vJywgYWRtaW4uc2l0ZS51cmxzKSwKICAgIHBhdGgoJycsaW5jbHVkZSgnbWFpbi51cmxzJyksbmFtZT0nbWFpbi1wYWdlJyksCiAgICBwYXRoKCdmZWVkYmFjay8nLGluY2x1ZGUoJ2ZlZWRiYWNrLnVybHMnKSksCiAgICBwYXRoKCdhbm5vdW5jZW1lbnQvJyxpbmNsdWRlKCdhbm5vdW5jZW1lbnQudXJscycpKSwKICAgIHBhdGgoJ2NoYXRib3QvJyxpbmNsdWRlKCdjaGF0Ym90LnVybHMnKSksCiAgICBwYXRoKCdzZWFyY2gvJyxpbmNsdWRlKCdzZWFyY2gudXJscycpKSwKXQo8fGZpbV9zdWZmaXh8PgojIHNjaGVtYV92aWV3ID0gZ2V0X3N3YWdnZXJfdmlldyh0aXRsZT0nQUlSQlVTIEFQSScpCgp1cmxwYXR0ZXJucyA9IFsKICAgICMgcGF0aCgnYXBpLycsc2NoZW1hX3ZpZXcpLAo8fGZpbV9lbmR8Pg=="]
["c6fcbf0db6e3cc9b2fdc31cdeea75adde9ece3fe-5","c6fcbf0db6e3cc9b2fdc31cdeea75adde9ece3fe","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KX192ZXJzaW9uX18gPSAnMC45LjIuMicKPHxmaW1fZW5kfD4="]
["bbd94e14e0fdb771015706b0309fefb42f242f03-1","bbd94e14e0fdb771015706b0309fefb42f242f03","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJhbmRvbQppbXBvcnQgdGVuc29yZmxvdy5jb21wYXQudjEgYXMgdGYKdGYuZGlzYWJsZV92Ml9iZWhhdmlvcigpCmltcG9ydCBudW1weSBhcyBucAoKTUFYX0RPQ19MRU5HVEggPSA1MDAKTlVNX0NMQVNTRVMgPSAyMAoKIyBCdWlsZCB0aGUgY29tcHV0YXRpb24gZ3JhcGggUk5OCmNsYXNzIFJOTjoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2b2NhYl9zaXplLCBlbWJlZGRpbmdfc2l6ZSwgbHN0bV9zaXplLCBiYXRjaF9zaXplKToKICAgICAgICBzZWxmLl92b2NhYl9zaXplID0gdm9jYWJfc2l6ZQogICAgICAgIHNlbGYuX2VtYmVkZGluZ19zaXplID0gZW1iZWRkaW5nX3NpemUKICAgICAgICBzZWxmLl9sc3RtX3NpemUgPSBsc3RtX3NpemUKICAgICAgICBzZWxmLl9iYXRjaF9zaXplID0gYmF0Y2hfc2l6ZQoKICAgICAgICBzZWxmLl9kYXRhID0gdGYucGxhY2Vob2xkZXIodGYuaW50MzIsIHNoYXBlPVtiYXRjaF9zaXplLCBNQVhfRE9DX0xFTkdUSF0pCiAgICAgICAgc2VsZi5fbGFiZWxzID0gdGYucGxhY2Vob2xkZXIodGYuaW50MzIsIHNoYXBlPVtiYXRjaF9zaXplLCBdKQogICAgICAgIHNlbGYuX3NlbnRlbmNlX2xlbmd0aHMgPSB0Zi5wbGFjZWhvbGRlcih0Zi5pbnQzMiwgc2hhcGU9W2JhdGNoX3NpemUsIF0pCiAgICAgICAgc2VsZi5fZmluYWxfdG9rZW5zID0gdGYucGxhY2Vob2xkZXIodGYuaW50MzIsIHNoYXBlPVtiYXRjaF9zaXplLCBdKQoKICAgIGRlZiBlbWJlZGRpbmdfbGF5ZXIoc2VsZiwgaW5kaWNlcyk6CiAgICAgICAgcHJldHJhaW5lZF92ZWN0b3JzID0gW25wLnplcm9zKHNlbGYuX2VtYmVkZGluZ19zaXplKV0KICAgICAgICBucC5yYW5kb20uc2VlZCgyMDIxKQogICAgICAgIGZvciBfIGluIHJhbmdlKHNlbGYuX3ZvY2FiX3NpemUgKyAxKToKICAgICAgICAgICAgcHJldHJhaW5lZF92ZWN0b3JzLmFwcGVuZChucC5yYW5kb20ubm9ybWFsKGxvYz0wLiwgc2NhbGU9MS4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPXNlbGYuX2VtYmVkZGluZ19zaXplKSkKCiAgICAgICAgcHJldHJhaW5lZF92ZWN0b3JzID0gbnAuYXJyYXkocHJldHJhaW5lZF92ZWN0b3JzKQoKICAgICAgICBzZWxmLl9lbWJlZGRpbmdfbWF0cml4ID0gdGYuZ2V0X3ZhcmlhYmxlKAogICAgICAgICAgICBuYW1lPSdlbWJlZGRpbmcnLAogICAgICAgICAgICBzaGFwZT0oc2VsZi5fdm9jYWJfc2l6ZSArIDIsIHNlbGYuX2VtYmVkZGluZ19zaXplKSwKICAgICAgICAgICAgaW5pdGlhbGl6ZXI9dGYuY29uc3RhbnRfaW5pdGlhbGl6ZXIocHJldHJhaW5lZF92ZWN0b3JzKQogICAgICAgICkKICAgICAgICByZXR1cm4gdGYubm4uZW1iZWRkaW5nX2xvb2t1cChzZWxmLl9lbWJlZGRpbmdfbWF0cml4LCBpbmRpY2VzKQoKICAgIGRlZiBMU1RNX2xheWVyKHNlbGYsIGVtYmVkZGluZ3MpOgogICAgICAgIGxzdG1fY2VsbCA9IHRmLm5uLnJubl9jZWxsLkJhc2ljTFNUTUNlbGwoc2VsZi5fbHN0bV9zaXplKQogICAgICAgIHplcm9fc3RhdGUgPSB0Zi56ZXJvcyhzaGFwZT0oc2VsZi5fYmF0Y2hfc2l6ZSwgc2VsZi5fbHN0bV9zaXplKSkKICAgICAgICBpbml0aWFsX3N0YXRlID0gdGYubm4ucm5uX2NlbGwuTFNUTVN0YXRlVHVwbGUoemVyb19zdGF0ZSwgemVyb19zdGF0ZSkKCiAgICAgICAgbHN0bV9pbnB1dHMgPSB0Zi51bnN0YWNrKAogICAgICAgICAgICB0Zi50cmFuc3Bvc2UoZW1iZWRkaW5ncywgcGVybT1bMSwgMCwgMl0pCiAgICAgICAgKQogICAgICAgIGxzdG1fb3V0cHV0cywgbGFzdF9zdGF0ZSA9IHRmLm5uLnN0YXRpY19ybm4oCiAgICAgICAgICAgIGNlbGw9bHN0bV9jZWxsLAogICAgICAgICAgICBpbnB1dHM9bHN0bV9pbnB1dHMsCiAgICAgICAgICAgIGluaXRpYWxfc3RhdGU9aW5pdGlhbF9zdGF0ZSwKICAgICAgICAgICAgc2VxdWVuY2VfbGVuZ3RoPXNlbGYuX3NlbnRlbmNlX2xlbmd0aHMKICAgICAgICApICAjIGEgbGVuZ3RoLTUwMCBsaXN0IG9mIFtudW1fZG9jcywgbHN0bV9zaXplXQogICAgICAgIGxzdG1fb3V0cHV0cyA9IHRmLnVuc3RhY2soCiAgICAgICAgICAgIHRmLnRyYW5zcG9zZShsc3RtX291dHB1dHMsIHBlcm09WzEsIDAsIDJdKQogICAgICAgICkKICAgICAgICBsc3RtX291dHB1dHMgPSB0Zi5jb25jYXQobHN0bV9vdXRwdXRzLCBheGlzPTApICAjIFtudW1fZG9jcyAqIE1BWF9TRU5UX0xFTkdUSCwgbHN0bV9zaXplXQogICAgICAgICMgc2VsZi5fbWFzayA6IFtudW1fZG9jcyAqIE1BWF9TRU5UX0xFTkdUSCwgXQogICAgICAgIG1hc2sgPSB0Zi5zZXF1ZW5jZV9tYXNrKAogICAgICAgICAgICBsZW5ndGhzPXNlbGYuX3NlbnRlbmNlX2xlbmd0aHMsCiAgICAgICAgICAgIG1heGxlbj1NQVhfRE9DX0xFTkdUSCwKICAgICAgICAgICAgZHR5cGU9dGYuZmxvYXQzMgogICAgICAgICkgICMgW251bV9kb2NzLCBNQVhfU0VOVF9MRU5HVEhdCiAgICAgICAgbWFzayA9IHRmLmNvbmNhdCh0Zi51bnN0YWNrKG1hc2ssIGF4aXM9MCksIGF4aXM9MCkKPHxmaW1faG9sZXw+CiAgICAgICAgbHN0bV9vdXRwdXRzX2F2ZXJhZ2UgPSBsc3RtX291dHB1dHNfc3VtIC8gdGYuZXhwYW5kX2RpbXMoCiAgICAgICAgICAgIHRmLmNhc3Qoc2VsZi5fc2VudGVuY2VfbGVuZ3RocywgdGYuZmxvYXQzMiksCiAgICAgICAgICAgICMgZXhwYW5kX2RpbXMgb25seSB3b3JrcyB3aXRoIHRlbnNvciBvciBmbG9hdCB0eXBlCiAgICAgICAgICAgIC0xKSAgIyBbbnVtX2RvY3MsIGxzdG1fc2l6ZV0KICAgICAgICByZXR1cm4gbHN0bV9vdXRwdXRzX2F2ZXJhZ2UKCiAgICBkZWYgYnVpbGRfZ3JhcGgoc2VsZik6CiAgICAgICAgZW1iZWRkaW5ncyA9IHNlbGYuZW1iZWRkaW5nX2xheWVyKHNlbGYuX2RhdGEpCiAgICAgICAgbHN0bV9vdXRwdXRzID0gc2VsZi5MU1RNX2xheWVyKGVtYmVkZGluZ3MpCgogICAgICAgIHdlaWdodHMgPSB0Zi5nZXRfdmFyaWFibGUoCiAgICAgICAgICAgIG5hbWU9J2ZpbmFsX2xheWVyX3dlaWdodHMnLAogICAgICAgICAgICBzaGFwZT0oc2VsZi5fbHN0bV9zaXplLCBOVU1fQ0xBU1NFUyksCiAgICAgICAgICAgIGluaXRpYWxpemVyPXRmLnJhbmRvbV9ub3JtYWxfaW5pdGlhbGl6ZXIoc2VlZD0yMDIxKQogICAgICAgICkKICAgICAgICBiaWFzZXMgPSB0Zi5nZXRfdmFyaWFibGUoCiAgICAgICAgICAgIG5hbWU9J2ZpbmFsX2xheWVyX2JpYXNlcycsCiAgICAgICAgICAgIHNoYXBlPShOVU1fQ0xBU1NFUyksCiAgICAgICAgICAgIGluaXRpYWxpemVyPXRmLnJhbmRvbV9ub3JtYWxfaW5pdGlhbGl6ZXIoc2VlZD0yMDIxKQogICAgICAgICkKICAgICAgICBsb2dpdHMgPSB0Zi5tYXRtdWwobHN0bV9vdXRwdXRzLCB3ZWlnaHRzKSArIGJpYXNlcwogICAgICAgIGxhYmVsc19vbmVfaG90ID0gdGYub25lX2hvdCgKICAgICAgICAgICAgaW5kaWNlcz1zZWxmLl9sYWJlbHMsCiAgICAgICAgICAgIGRlcHRoPU5VTV9DTEFTU0VTLAogICAgICAgICAgICBkdHlwZT10Zi5mbG9hdDMyCiAgICAgICAgKQoKICAgICAgICBsb3NzID0gdGYubm4uc29mdG1heF9jcm9zc19lbnRyb3B5X3dpdGhfbG9naXRzKAogICAgICAgICAgICBsYWJlbHM9bGFiZWxzX29uZV9ob3QsCiAgICAgICAgICAgIGxvZ2l0cz1sb2dpdHMKICAgICAgICApCiAgICAgICAgbG9zcyA9IHRmLnJlZHVjZV9tZWFuKGxvc3MpCiAgICAgICAgcHJvYnMgPSB0Zi5ubi5zb2Z0bWF4KGxvZ2l0cykKICAgICAgICBwcmVkaWN0ZWRfbGFiZWxzID0gdGYuYXJnbWF4KHByb2JzLCBheGlzPTEpCiAgICAgICAgcHJlZGljdGVkX2xhYmVscyA9IHRmLnNxdWVlemUocHJlZGljdGVkX2xhYmVscykKICAgICAgICByZXR1cm4gcHJlZGljdGVkX2xhYmVscywgbG9zcwoKICAgIGRlZiB0cmFpbmVyKHNlbGYsIGxvc3MsIGxlYXJuaW5nX3JhdGUpOgogICAgICAgIHRyYWluX29wID0gdGYudHJhaW4uQWRhbU9wdGltaXplcihsZWFybmluZ19yYXRlKS5taW5pbWl6ZShsb3NzKQogICAgICAgIHJldHVybiB0cmFpbl9vcAoKCmNsYXNzIERhdGFSZWFkZXI6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YV9wYXRoLCBiYXRjaF9zaXplKToKICAgICAgICBzZWxmLl9iYXRjaF9zaXplID0gYmF0Y2hfc2l6ZQogICAgICAgIHdpdGggb3BlbihkYXRhX3BhdGgpIGFzIGY6CiAgICAgICAgICAgIGRfbGluZXMgPSBmLnJlYWQoKS5zcGxpdGxpbmVzKCkKCiAgICAgICAgc2VsZi5fZGF0YSA9IFtdCiAgICAgICAgc2VsZi5fbGFiZWxzID0gW10KICAgICAgICBzZWxmLl9maW5hbF90b2tlbnMgPSBbXQogICAgICAgIHNlbGYuX3NlbnRlbmNlX2xlbmd0aHMgPSBbXQogICAgICAgIGZvciBkYXRhX2lkLCBsaW5lIGluIGVudW1lcmF0ZShkX2xpbmVzKToKICAgICAgICAgICAgZmVhdHVyZXMgPSBsaW5lLnNwbGl0KCc8ZmZmPicpCiAgICAgICAgICAgIGxhYmVsLCBkb2NfaWQsIHNlbnRlbmNlX2xlbmd0aCA9IGludChmZWF0dXJlc1swXSksIGludChmZWF0dXJlc1sxXSksIGludChmZWF0dXJlc1syXSkKICAgICAgICAgICAgdG9rZW5zID0gZmVhdHVyZXNbM10uc3BsaXQoKQogICAgICAgICAgICBzZWxmLl9kYXRhLmFwcGVuZCh0b2tlbnMpCiAgICAgICAgICAgIHNlbGYuX2xhYmVscy5hcHBlbmQobGFiZWwpCiAgICAgICAgICAgIHNlbGYuX3NlbnRlbmNlX2xlbmd0aHMuYXBwZW5kKHNlbnRlbmNlX2xlbmd0aCkKICAgICAgICAgICAgc2VsZi5fZmluYWxfdG9rZW5zLmFwcGVuZCh0b2tlbnNbLTFdKQogICAgICAgIHNlbGYuX2RhdGEgPSBucC5hcnJheShzZWxmLl9kYXRhKQogICAgICAgIHNlbGYuX2xhYmVscyA9IG5wLmFycmF5KHNlbGYuX2xhYmVscykKICAgICAgICBzZWxmLl9zZW50ZW5jZV9sZW5ndGhzID0gbnAuYXJyYXkoc2VsZi5fc2VudGVuY2VfbGVuZ3RocykKICAgICAgICBzZWxmLl9maW5hbF90b2tlbnMgPSBucC5hcnJheShzZWxmLl9maW5hbF90b2tlbnMpCiAgICAgICAgc2VsZi5fbnVtX2Vwb2NoID0gMAogICAgICAgIHNlbGYuX2JhdGNoX2lkID0gMAoKICAgIGRlZiBuZXh0X2JhdGNoKHNlbGYpOgogICAgICAgIHN0YXJ0ID0gc2VsZi5fYmF0Y2hfaWQgKiBzZWxmLl9iYXRjaF9zaXplCiAgICAgICAgZW5kID0gc3RhcnQgKyBzZWxmLl9iYXRjaF9zaXplCiAgICAgICAgc2VsZi5fYmF0Y2hfaWQgKz0gMQoKICAgICAgICBpZiBlbmQgKyBzZWxmLl9iYXRjaF9zaXplID4gbGVuKHNlbGYuX2RhdGEpOgogICAgICAgICAgICBzZWxmLl9udW1fZXBvY2ggKz0gMSAgIyBUdXJuIHRvIG5ldyBlcG9jaAogICAgICAgICAgICBzZWxmLl9iYXRjaF9pZCA9IDAKICAgICAgICAgICAgIyBTaHVmZmxlIGRhdGEKICAgICAgICAgICAgaW5kaWNlcyA9IGxpc3QocmFuZ2UobGVuKHNlbGYuX2RhdGEpKSkKICAgICAgICAgICAgcmFuZG9tLnNlZWQoMjAxOCkKICAgICAgICAgICAgcmFuZG9tLnNodWZmbGUoaW5kaWNlcykKICAgICAgICAgICAgc2VsZi5fZGF0YSwgc2VsZi5fbGFiZWxzLCBzZWxmLl9zZW50ZW5jZV9sZW5ndGhzLCBzZWxmLl9maW5hbF90b2tlbnMgPSBcCiAgICAgICAgICAgICAgICBzZWxmLl9kYXRhW2luZGljZXNdLCBzZWxmLl9sYWJlbHNbaW5kaWNlc10sIHNlbGYuX3NlbnRlbmNlX2xlbmd0aHNbaW5kaWNlc10sIHNlbGYuX2ZpbmFsX3Rva2Vuc1tpbmRpY2VzXQoKICAgICAgICByZXR1cm4gc2VsZi5fZGF0YVtzdGFydDplbmRdLCBzZWxmLl9sYWJlbHNbc3RhcnQ6ZW5kXSwgc2VsZi5fc2VudGVuY2VfbGVuZ3Roc1tzdGFydDplbmRdLCBzZWxmLl9maW5hbF90b2tlbnNbc3RhcnQ6ZW5kXQoKCiMgVHJhaW4gYW5kIGV2YWx1YXRlIHRoZSBtb2RlbCBpbiB0aGUgdGVzdCBkYXRhCmRlZiB0cmFpbl9hbmRfZXZhbHVhdGVfUk5OKCk6CiAgICB3aXRoIG9wZW4oJy4uL2RhdGFzZXRzL3cydi92b2NhYi1yYXcudHh0JykgYXMgZjoKICAgICAgICB2b2NhYl9zaXplID0gbGVuKGYucmVhZCgpLnNwbGl0bGluZXMoKSkKCiAgICB0Zi5zZXRfcmFuZG9tX3NlZWQoMjAyMSkKICAgIHJubiA9IFJOTigKICAgICAgICB2b2NhYl9zaXplPXZvY2FiX3NpemUsCiAgICAgICAgZW1iZWRkaW5nX3NpemU9MzAwLAogICAgICAgIGxzdG1fc2l6ZT01MCwKICAgICAgICBiYXRjaF9zaXplPTUwCiAgICApCiAgICBwcmVkaWN0ZWRfbGFiZWxzLCBsb3NzID0gcm5uLmJ1aWxkX2dyYXBoKCkKICAgIHRyYWluX29wID0gcm5uLnRyYWluZXIobG9zcz1sb3NzLCBsZWFybmluZ19yYXRlPTAuMDEpCiAgICB3aXRoIHRmLlNlc3Npb24oKSBhcyBzZXNzOgogICAgICAgIHRyYWluX2RhdGFfcmVhZGVyID0gRGF0YVJlYWRlcigKICAgICAgICAgICAgZGF0YV9wYXRoPScuLi9kYXRhc2V0cy93MnYvMjBuZXdzLXRyYWluLWVuY29kZWQudHh0JywKICAgICAgICAgICAgYmF0Y2hfc2l6ZT01MAogICAgICAgICkKICAgICAgICB0ZXN0X2RhdGFfcmVhZGVyID0gRGF0YVJlYWRlcigKICAgICAgICAgICAgZGF0YV9wYXRoPScuLi9kYXRhc2V0cy93MnYvMjBuZXdzLXRlc3QtZW5jb2RlZC50eHQnLAogICAgICAgICAgICBiYXRjaF9zaXplPTUwCiAgICAgICAgKQogICAgICAgIHN0ZXAgPSAwCiAgICAgICAgTUFYX1NURVAgPSAxMDAwCgogICAgICAgIHNlc3MucnVuKHRmLmdsb2JhbF92YXJpYWJsZXNfaW5pdGlhbGl6ZXIoKSkKICAgICAgICB3aGlsZSBzdGVwIDwgTUFYX1NURVA6CiAgICAgICAgICAgIG5leHRfdHJhaW5fYmF0Y2ggPSB0cmFpbl9kYXRhX3JlYWRlci5uZXh0X2JhdGNoKCkKICAgICAgICAgICAgdHJhaW5fZGF0YSwgdHJhaW5fbGFiZWxzLCB0cmFpbl9zZW50ZW5jZV9sZW5ndGhzLCB0cmFpbl9maW5hbF90b2tlbnMgPSBuZXh0X3RyYWluX2JhdGNoCiAgICAgICAgICAgIHBsYWJlbHNfZXZhbCwgbG9zc19ldmFsLCBfID0gc2Vzcy5ydW4oCiAgICAgICAgICAgICAgICBbcHJlZGljdGVkX2xhYmVscywgbG9zcywgdHJhaW5fb3BdLAogICAgICAgICAgICAgICAgZmVlZF9kaWN0PXsKICAgICAgICAgICAgICAgICAgICBybm4uX2RhdGE6IHRyYWluX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgcm5uLl9sYWJlbHM6IHRyYWluX2xhYmVscywKICAgICAgICAgICAgICAgICAgICBybm4uX3NlbnRlbmNlX2xlbmd0aHM6IHRyYWluX3NlbnRlbmNlX2xlbmd0aHMsCiAgICAgICAgICAgICAgICAgICAgcm5uLl9maW5hbF90b2tlbnM6IHRyYWluX2ZpbmFsX3Rva2VucwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApCiAgICAgICAgICAgIHN0ZXAgKz0gMQogICAgICAgICAgICBpZiBzdGVwICUgMjAgPT0gMDoKICAgICAgICAgICAgICAgIHByaW50KCdsb3NzOicsIGxvc3NfZXZhbCkKICAgICAgICAgICAgaWYgdHJhaW5fZGF0YV9yZWFkZXIuX2JhdGNoX2lkID09IDA6CiAgICAgICAgICAgICAgICBudW1fdHJ1ZV9wcmVkcyA9IDAKICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgICAgbmV4dF90ZXN0X2JhdGNoID0gdGVzdF9kYXRhX3JlYWRlci5uZXh0X2JhdGNoKCkKICAgICAgICAgICAgICAgICAgICB0ZXN0X2RhdGEsIHRlc3RfbGFiZWxzLCB0ZXN0X3NlbnRlbmNlX2xlbmd0aHMsIHRlc3RfZmluYWxfdG9rZW5zID0gbmV4dF90ZXN0X2JhdGNoCiAgICAgICAgICAgICAgICAgICAgdGVzdF9wbGFiZWxzX2V2YWwgPSBzZXNzLnJ1bigKICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljdGVkX2xhYmVscywKICAgICAgICAgICAgICAgICAgICAgICAgZmVlZF9kaWN0PXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJubi5fZGF0YTogdGVzdF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcm5uLl9sYWJlbHM6IHRlc3RfbGFiZWxzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcm5uLl9zZW50ZW5jZV9sZW5ndGhzOiB0ZXN0X3NlbnRlbmNlX2xlbmd0aHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBybm4uX2ZpbmFsX3Rva2VuczogdGVzdF9maW5hbF90b2tlbnMKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0gbnAuZXF1YWwodGVzdF9wbGFiZWxzX2V2YWwsIHRlc3RfbGFiZWxzKQogICAgICAgICAgICAgICAgICAgIG51bV90cnVlX3ByZWRzICs9IG5wLnN1bShtYXRjaGVzLmFzdHlwZShmbG9hdCkpCgogICAgICAgICAgICAgICAgICAgIGlmIHRlc3RfZGF0YV9yZWFkZXIuX2JhdGNoX2lkID09IDA6CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICBwcmludCgnRXBvY2g6JywgdHJhaW5fZGF0YV9yZWFkZXIuX251bV9lcG9jaCkKICAgICAgICAgICAgICAgIHByaW50KCdBY2N1cmFjeSBvbiB0ZXN0IGRhdGE6JywgbnVtX3RydWVfcHJlZHMgKiAxMDAuIC8gbGVuKHRlc3RfZGF0YV9yZWFkZXIuX2RhdGEpKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICB0cmFpbl9hbmRfZXZhbHVhdGVfUk5OKCkKCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgbWFzayA9IHRmLmV4cGFuZF9kaW1zKG1hc2ssIC0xKQogICAgICAgIGxzdG1fb3V0cHV0cyA9IG1hc2sgKiBsc3RtX291dHB1dHMKICAgICAgICBsc3RtX291dHB1dHNfc3BsaXQgPSB0Zi5zcGxpdChsc3RtX291dHB1dHMsIG51bV9vcl9zaXplX3NwbGl0cz1zZWxmLl9iYXRjaF9zaXplKQogICAgICAgIGxzdG1fb3V0cHV0c19zdW0gPSB0Zi5yZWR1Y2Vfc3VtKGxzdG1fb3V0cHV0c19zcGxpdCwgYXhpcz0xKSAgIyBbbnVtX2RvY3MsIGxzdG1fc2l6ZV0KPHxmaW1fZW5kfD4="]
["a59f492a6aa7dd5ba46aa8b4685462139e63cbe7-2","a59f492a6aa7dd5ba46aa8b4685462139e63cbe7","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyA9ICJCYWlzaGFsaSBEdXR0YSIKX19jb3B5cmlnaHRfXyA9ICJDb3B5cmlnaHQgKEMpIDIwMjEgQmFpc2hhbGkgRHV0dGEiCl9fbGljZW5zZV9fID0gIkFwYWNoZSBMaWNlbnNlIDIuMCIKX192ZXJzaW9uX18gPSAiMC4xIgoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBJbXBvcnQgTGlicmFyaWVzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmcm9tIHNvdXJjZS5jbGFzc2lmaWVyLmNsYXNzaWZpZXJfY2xhc3NpY2FsX21sIGltcG9ydCBEZWNpc2lvblRyZWVNb2RlbENsYXNzaWZpZXIsIEtlcm5lbFN2bUNsYXNzaWZpZXIsIFwKICAgIExpbmVhclN2Q2xhc3NpZmllciwgTG9naXN0aWNSZWdyZXNzaW9uQ2xhc3NpZmllciwgTmFpdmVCYXllc0NsYXNzaWZpZXIsIFJhbmRvbUZvcmVzdE1vZGVsQ2xhc3NpZmllciwgXAogICAgWGdCb29zdENsYXNzaWZpZXIKZnJvbSBzb3VyY2UuY2xhc3NpZmllci5jbGFzc2lmaWVyX2xzdG0gaW1wb3J0IExzdG1DbGFzc2lmaWVyCgpjbGFzc2ljYWxfbWxfY2xhc3NpZmllcnMgPSB7CiAgICAxOiBOYWl2ZUJheWVzQ2xhc3NpZmllcigpLAogICAgMjogRGVjaXNpb25UcmVlTW9kZWxDbGFzc2lmaWVyKCksCiAgICAzOiBMb2dpc3RpY1JlZ3Jlc3Npb25DbGFzc2lmaWVyKCksCiAgICA0OiBSYW5kb21Gb3Jlc3RNb2RlbENsYXNzaWZpZXIoKSwKICAgIDU6IExpbmVhclN2Q2xhc3NpZmllcigpLAogICAgNjogS2VybmVsU3ZtQ2xhc3NpZmllcigpLAogICAgNzogWGdCb29zdENsYXNzaWZpZXIoKQp9Cgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRlZXBfbGVhcm5pbmdfY2xhc3NpZmllcnMgPSB7CiAgICA4OiBMc3RtQ2xhc3NpZmllcigpCn0KCjx8ZmltX2VuZHw+"]
["b0f7c8f198a358cacbce4e42b3f0a594b498a7f7-4","b0f7c8f198a358cacbce4e42b3f0a594b498a7f7","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFzayBpbXBvcnQgQmx1ZXByaW50CmZyb20gcGFzdGFzdG9yZS5sb2dnZXIgaW1wb3J0IGxvZ2dlcgoKcm9vdF9hcGkgPSBCbHVlcHJpbnQoJ3Jvb3RfYXBpJywgX19uYW1lX18pCgoKPHxmaW1faG9sZXw+CiAgICAnJycKICAgIGxvZ2dlci5pbmZvKCIvIikKCiAgICBtc2cgPSAiV2VsY29tZSB0byBQYXN0YVN0b3JlISIKICAgIGxvZ2dlci5pbmZvKG1zZykKICAgIHJldHVybiBtc2cKPHxmaW1fc3VmZml4fD4KQHJvb3RfYXBpLnJvdXRlKCcvJywgbWV0aG9kcz1bJ0dFVCddKQpkZWYgcm9vdCgpOgogICAgJycnCiAgICBIYW5kbGluZyB0aGUgLyBlbmRwb2ludAo8fGZpbV9lbmR8Pg=="]
["c9c0d527883904868ce75f2e56e53de099ff4b14-5","c9c0d527883904868ce75f2e56e53de099ff4b14","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMgX19MSUNFTlNFX18KIiIiClNpbXVsYXRlIGRpc3RyaWJ1dGlvbiBvZiB0ZXN0IHJlc3VsdHMgZnJvbSBhIG1pY3JvcGxhdGUgYXNzYXksIGZvbGxvd2luZyBSZWYuIFsxXQoKVXNhZ2UKLS0tLS0KCnB5dGhvbiBzaW11bGF0ZS5weSAtLW91dHB1dCAnL3BhdGgvdG8vcmVzdWx0cy5jc3YnCiAgICAgICAgICAgICAgICAgICAtLW1pY3JvcGxhdGVzIDEwMDAwCiAgICAgICAgICAgICAgICAgICAtLXNoYXBlICcoOCwgMTIpJwogICAgICAgICAgICAgICAgICAgLS1wcmV2YWxlbmNlIDAuMTYKICAgICAgICAgICAgICAgICAgIC0tY29udHJvbHMgNgogICAgICAgICAgICAgICAgICAgLS1jb250cm9scy1wb3NpdGlvbiAndG9wLWxlZnQnCgpSZWZlcmVuY2VzCi0tLS0tLS0tLS0KWzFdIEJleWxlcmlhbiBldCBhbCwgX1N0YXRpc3RpY2FsIE1vZGVsaW5nIGZvciBRdWFsaXR5IEFzc3VyYW5jZSBvZiBIdW1hbiBQYXBpbGxvbWF2aXJ1cwpETkEgQmF0Y2ggVGVzdGluZ18gKDIwMTgpIChodHRwczovL3B1Ym1lZC5uY2JpLm5sbS5uaWguZ292LzI5NTcwMTM3LykKIiIiCgpfX2F1dGhvcl9fID0gImFuZHJlYXNmcmFnbmVyIgpfX2NvbnRyaWJ1dG9yc19fID0gW19fYXV0aG9yX19dCgppbXBvcnQgYXJncGFyc2UKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCmZyb20gYXN0IGltcG9ydCBsaXRlcmFsX2V2YWwKZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IGNwdV9jb3VudApmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwsIFR1cGxlLCBVbmlvbgoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBwYW5kYXMgYXMgcGQKZnJvbSBqb2JsaWIgaW1wb3J0IFBhcmFsbGVsLCBkZWxheWVkCmZyb20gc2NpcHkgaW1wb3J0IG5kaW1hZ2UKCgpkZWYgYW5hbHl6ZV9tYXRyaXgobWF0cml4OiBucC5uZGFycmF5LCBtaW5fc2l6ZTogaW50ID0gMikgLT4gVHVwbGU6CiAgICAiIiIKICAgIEFuYWx5emUgY2VsbCBjbHVzdGVycyBvbiBhIG1pY3JvcGxhdGUgbWF0cml4CgogICAgQ2x1c3RlcnMgYXJlIGRlZmluZWQgYXMgZ3JvdXBzIG9mIGBtaW5fc2l6ZWAgb3IgbW9yZSBob3Jpem9udGFsbHkgb3IgdmVydGljYWxseQogICAgYWRqYWNlbnQgcG9zaXRpdmUgY2VsbHMKCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBtYXRyaXggOiBucC5uZGFycmF5CiAgICAgICAgYSAyRCBiaW5hcnkgbWF0cml4IHJlcHJlc2VudGluZyBhIG1pY3JvcGxhdGUgYXNzYXkKCiAgICBtaW5fc2l6ZSA6IGludAogICAgICAgIG1pbmltdW0gbnVtYmVyIG9mIGhvcml6b250YWxseSBvciB2ZXJ0aWNhbGx5IGFkamFjZW50IHBvc2l0aXZlIGNlbGxzIHRvIGNvdW50CiAgICAgICAgYXMgYSBjbHVzdGVyCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgdHVwbGUKICAgICAgICAodG90YWwgbnVtYmVyIG9mIHBvc2l0aXZlIGNlbGxzLCBudW1iZXIgb2YgY2x1c3RlcnMsIHNpemUgb2YgbGFyZ2VzdCBjbHVzdGVyKQogICAgIiIiCiAgICBpZiBtYXRyaXguc2l6ZSA9PSAwOgogICAgICAgIHJldHVybiAoMCwgMCwgMCkKCiAgICBtYXRyaXggPSBucC5uYW5fdG9fbnVtKG1hdHJpeCwgMCkKICAgIHN0cnVjdHVyZSA9IG5kaW1hZ2UuZ2VuZXJhdGVfYmluYXJ5X3N0cnVjdHVyZSgyLCAxKQoKICAgIGNsdXN0ZXJzLCBudW1fY2x1c3RlcnMgPSBuZGltYWdlLmxhYmVsKG1hdHJpeCwgc3RydWN0dXJlKQogICAgY2x1c3Rlcl9zaXplcyA9IG5kaW1hZ2Uuc3VtKG1hdHJpeCwgY2x1c3RlcnMsIHJhbmdlKDAsIG51bV9jbHVzdGVycyArIDEpKQoKICAgIG1hc2sgPSAoY2x1c3Rlcl9zaXplcyA+PSBtaW5fc2l6ZSlbY2x1c3RlcnNdCiAgICBjbHVzdGVycyA9IGNsdXN0ZXJzW21hc2tdCgogICAgdW5pcXVlX2xhYmVscywgbGFiZWxfY291bnRzID0gbnAudW5pcXVlKGNsdXN0ZXJzLCByZXR1cm5fY291bnRzPVRydWUpCiAgICBtYXhfY2x1c3Rlcl9zaXplID0gbGFiZWxfY291bnRzLm1heCgpIGlmIGxhYmVsX2NvdW50cy5zaXplID4gMCBlbHNlIDAKCiAgICByZXR1cm4gaW50KG5wLnN1bShtYXRyaXgpKSwgbGVuKHVuaXF1ZV9sYWJlbHMpLCBtYXhfY2x1c3Rlcl9zaXplCgoKZGVmIGFuYWx5emVfdmVjdG9yKHZlY3RvciwgcGFkZGluZywgc2hhcGUpOgogICAgbWF0cml4ID0gbnAucGFkKHZlY3RvciwgcGFkZGluZywgY29uc3RhbnRfdmFsdWVzPTApCiAgICBtYXRyaXggPSBucC5yZXNoYXBlKG1hdHJpeCwgc2hhcGUpCiAgICByZXR1cm4gYW5hbHl6ZV9tYXRyaXgobWF0cml4KQoKCmRlZiBnZXRfbG9nZ2VyKGxldmVsPSJJTkZPIik6CiAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCiAgICBsb2dnZXIuc2V0TGV2ZWwobGV2ZWwpCiAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcigKICAgICAgICAiJShhc2N0aW1lKXMgJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiLCBkYXRlZm10PSIlSDolTTolUyIKICAgICkKICAgIGhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQogICAgaGFuZGxlci5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQogICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKICAgIHJldHVybiBsb2dnZXIKCgpjbGFzcyBTaW11bGF0b3I6CiAgICAiIiIKICAgIFNpbXVsYXRlIGRpc3RyaWJ1dGlvbiBvZiB0ZXN0IHJlc3VsdHMgZm9yIGJpbmFyeSBtaWNyb3BsYXRlIGFzc2F5cwogICAgIiIiCgogICAgQ09OVFJPTF9QT1NJVE9OUyA9IFsidG9wLWxlZnQiLCAiYm90dG9tLXJpZ2h0Il0KICAgIE9VVFBVVF9DT0xVTU5TID0gKCJudW1fcG9zaXRpdmVfY2VsbHMiLCAibnVtX2NsdXN0ZXJzIiwgIm1heF9jbHVzdGVyX3NpemUiKQoKICAgIGRlZiBfX2luaXRfXygKICAgICAgICBzZWxmLAogICAgICAgIG1pY3JvcGxhdGVzOiBpbnQsCiAgICAgICAgc2hhcGU6IHR1cGxlLAogICAgICAgIHByZXZhbGVuY2U6IGZsb2F0LAogICAgICAgIGNvbnRyb2xzOiBpbnQsCiAgICAgICAgY29udHJvbHNfcG9zaXRpb246IE9wdGlvbmFsW3N0cl0gPSAidG9wLWxlZnQiLAogICAgICAgIGxvZ19sZXZlbDogT3B0aW9uYWxbc3RyXSA9ICJJTkZPIiwKICAgICk6CgogICAgICAgIHNlbGYubG9nZ2VyID0gZ2V0X2xvZ2dlcihsb2dfbGV2ZWwpCiAgICAgICAgc2VsZi5taWNyb3BsYXRlcyA9IG1pY3JvcGxhdGVzCiAgICAgICAgc2VsZi5jb250cm9scyA9IGNvbnRyb2xzCgogICAgICAgIGlmIG5vdCAocHJldmFsZW5jZSA+IDAgYW5kIHByZXZhbGVuY2UgPD0gMSk6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZiJFeHBlY3RlZCBwcmV2YWxlbmNlIGluIFswLCAxXSwgZ290IHtwcmV2YWxlbmNlfS4iKQogICAgICAgIHNlbGYucHJldmFsZW5jZSA9IHByZXZhbGVuY2UKCiAgICAgICAgaWYgbGVuKHNoYXBlKSAhPSAyOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGYiRXhwZWN0ZWQgdHVwbGUgb2YgbGVuZ3RoIDIsIGdvdCAne3NoYXBlfScuIikKICAgICAgICBzZWxmLnNoYXBlID0gc2hhcGUKCiAgICAgICAgaWYgY29udHJvbHNfcG9zaXRpb24gPT0gInRvcC1sZWZ0IjoKICAgICAgICAgICAgc2VsZi5wYWRkaW5nID0gKGNvbnRyb2xzLCAwKQogICAgICAgIGVsaWYgY29udHJvbHNfcG9zaXRpb24gPT0gImJvdHRvbV9yaWdodCI6CiAgICAgICAgICAgIHNlbGYucGFkZGluZyA9ICgwLCBjb250cm9scykKICAgICAgICBlbHNlOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAgICAgZiJFeHBlY3RlZCBvbmUgb2Yge3NlbGYuQ09OVFJPTF9QT1NJVE9OU30sIGdvdCB7Y29udHJvbHNfcG9zaXRpb259LiIKICAgICAgICAgICAgKQogICAgICAgIHNlbGYuY29udHJvbHNfcG9zaXRpb24gPSBjb250cm9sc19wb3NpdGlvbgoKICAgIGRlZiBzaW11bGF0ZSgKICAgICAgICBzZWxmLCBzZWVkOiBPcHRpb25hbFtpbnRdID0gTm9uZSwgcHJvY2Vzc2VzOiBPcHRpb25hbFtpbnRdID0gMQogICAgKSAtPiBwZC5EYXRhRnJhbWU6CiAgICAgICAgIiIiCiAgICAgICAgUnVuIHNpbXVsYXRpb24KCiAgICAgICAgUmV0dXJucwogICAgICAgIC0tLS0tLS0KICAgICAgICBwZC5EYXRhRnJhbWUKICAgICAgICAgICAgd2l0aCBzaGFwZSBgKHNlbGYubWljcm9wbGF0ZXMsIDMpYAogICAgICAgICIiIgoKICAgICAgICBpZiBzZWVkIGlzIG5vdCBOb25lOgogICAgICAgICAgICBucC5yYW5kb20uc2VlZChzZWVkKQoKICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKAogICAgICAgICAgICAiU2ltdWxhdGluZyAlaSBtaWNyb3BsYXRlcyB3aXRoIHNoYXBlICVzIGFuZCAlaSBjb250cm9sIHdlbGxzIiwKICAgICAgICAgICAgc2VsZi5taWNyb3BsYXRlcywKICAgICAgICAgICAgc2VsZi5zaGFwZSwKICAgICAgICAgICAgc2VsZi5jb250cm9scywKICAgICAgICApCgogICAgICAgIG51bV9zYW1wbGVzID0gc2VsZi5taWNyb3BsYXRlcyAqIChzZWxmLnNoYXBlWzBdICogc2VsZi5zaGFwZVsxXSAtIHNlbGYuY29udHJvbHMpCiAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygKICAgICAgICAgICAgIkdlbmVyYXRpbmcgJWkgYmlub21pYWwgc2FtcGxlcyB3aXRoIHByb2JhYmlsaXR5ICUuMmYgLi4uIiwKICAgICAgICAgICAgbnVtX3NhbXBsZXMsCiAgICAgICAgICAgIHNlbGYucHJldmFsZW5jZSwKICAgICAgICApCgogICAgICAgIHNhbXBsZXMgPSBucC5yYW5kb20uYmlub21pYWwoMSwgc2VsZi5wcmV2YWxlbmNlLCBzaXplPW51bV9zYW1wbGVzKQogICAgICAgIHZlY3RvcnMgPSBucC5zcGxpdChzYW1wbGVzLCBzZWxmLm1pY3JvcGxhdGVzKQoKICAgICAgICByZXN1bHRzID0gUGFyYWxsZWwobl9qb2JzPXByb2Nlc3NlcywgdmVyYm9zZT0xKSgKICAgICAgICAgICAgZGVsYXllZChhbmFseXplX3ZlY3RvcikodmVjdG9yLCBzZWxmLnBhZGRpbmcsIHNlbGYuc2hhcGUpCiAgICAgICAgICAgIGZvciB2ZWN0b3IgaW4gdmVjdG9ycwogICAgICAgICkKCiAgICAgICAgcmV0dXJuIHBkLkRhdGFGcmFtZShyZXN1bHRzLCBjb2x1bW5zPXNlbGYuT1VUUFVUX0NPTFVNTlMpCgoKY2xhc3MgVHVwbGVQYXJzZXIoYXJncGFyc2UuQWN0aW9uKToKICAgICIiIgogICAgQXJncGFyc2UgaGFuZGxlciBmb3IgcGFyc2luZyBhIHN0ciB0byBhIFB5dGhvbiAyLXR1cGxlCiAgICAiIiIKCiAgICBkZWYgX19jYWxsX18oCiAgICAgICAgc2VsZiwKICAgICAgICBwYXJzZXI6IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLAogICAgICAgIG5hbWVzcGFjZTogYXJncGFyc2UuTmFtZXNwYWNlLAogICAgICAgIHZhbHVlOiBzdHIsCiAgICAgICAgb3B0aW9uX3N0cmluZz1Ob25lLAogICAgKToKCiAgICAgICAgdHJ5OgogICAgICAgICAgICByZXN1bHQgPSB0dXBsZShsaXRlcmFsX2V2YWwodmFsdWUpKQogICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGYiRmFpbGVkIHRvIHBhcnNlIHt2YWx1ZX0gdG8gMi10dXBsZSIpCgogICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRlc3QsIHJlc3VsdCkKCgpjbGFzcyBOdW1Qcm9jZXNzZXNQYXJzZXIoYXJncGFyc2UuQWN0aW9uKToKICAgIGRlZiBfX2NhbGxfXygKICAgICAgICBzZWxmLAogICAgICAgIHBhcnNlcjogYXJncGFyc2UuQXJndW1lbnRQYXJzZXIsCiAgICAgICAgbmFtZXNwYWNlOiBhcmdwYXJzZS5OYW1lc3BhY2UsCiAgICAgICAgdmFsdWU6IFVuaW9uW3N0ciwgaW50XSwKICAgICAgICBvcHRpb25fc3RyaW5nPU5vbmUsCiAgICApOgogICAgICAgIGlmIHZhbHVlID09ICJhdXRvIjoKICAgICAgICAgICAgdmFsdWUgPSBjcHVfY291bnQoKQogICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGludCk6CiAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICAgICAgIGYiR290IGludmFsaWQgdmFsdWUgZm9yIG51bV9wcm9jZXNzZXMgJ3t2YWx1ZX0nLCBtdXN0ICIKICAgICAgICAgICAgICAgICJiZSBpbnRlZ2VyIG9yICdhdXRvJy4iCiAgICAgICAgICAgICkKICAgICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgc2VsZi5kZXN0LCB2YWx1ZSkKCgpjbGFzcyBJbnRlcmZhY2U6CiAgICAiIiIKICAgIENvbW1hbmQgbGluZSBpbnRlcmZhY2UgZm9yIHNpbXVsYXRvcgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYubmFtZSA9IHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCiAgICAgICAgc2VsZi5wYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKICAgICAgICAgICAgcHJvZz1zZWxmLm5hbWUsCiAgICAgICAgICAgIGFkZF9oZWxwPVRydWUsCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPV9fZG9jX18sCiAgICAgICAgICAgIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5SYXdUZXh0SGVscEZvcm1hdHRlciwKICAgICAgICApCiAgICAgICAgc2VsZi5wYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICAgICAiLS1taWNyb3BsYXRlcyIsCiAgICAgICAgICAgIHR5cGU9aW50LAogICAgICAgICAgICByZXF1aXJlZD1UcnVlLAogICAgICAgICAgICBoZWxwPSJ0aGUgbnVtYmVyIG9mIG1pY3JvcGxhdGVzIHRvIHNpbXVsYXRlIiwKICAgICAgICApCiAgICAgICAgc2VsZi5wYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICAgICAiLS1zaGFwZSIsCiAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICByZXF1aXJlZD1UcnVlLAogICAgICAgICAgICBhY3Rpb249VHVwbGVQYXJzZXIsCiAgICAgICAgICAgIGhlbHA9Im1pY3JvcGxhdGUgc2hhcGUsIGEgc3RyaW5nIG9mIHRoZSBmb3JtIGAobnJvd3MsIG5jb2xzKWAiLAogICAgICAgICkKICAgICAgICBzZWxmLnBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgICAgICItLXByZXZhbGVuY2UiLAogICAgICAgICAgICB0eXBlPWZsb2F0LAogICAgICAgICAgICByZXF1aXJlZD1UcnVlLAogICAgICAgICAgICBoZWxwPSJwb3B1bGF0aW9uIHByZXZhbGVuY2UsIGJpbm9taWFsIHN1Y2Nlc3MgcHJvYmFiaWxpdHkiLAogICAgICAgICkKICAgICAgICBzZWxmLnBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgICAgICItLWNvbnRyb2xzIiwKICAgICAgICAgICAgdHlwZT1pbnQsCiAgICAgICAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgICAgICAgIGhlbHA9InRoZSBudW1iZXIgb2YgY29udHJvbCB3ZWxscyBvbiBlYWNoIG1pY3JvcGxhdGUiLAogICAgICAgICkKICAgICAgICBzZWxmLnBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgICAgICItLWNvbnRyb2xzLXBvc2l0aW9uIiwKICAgICAgICAgICAgY2hvaWNlcz1bInRvcC1sZWZ0IiwgImJvdHRvbS1yaWdodCJdLAogICAgICAgICAgICBkZWZhdWx0PSJ0b3AtbGVmdCIsCiAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlLAogICAgICAgICAgICBoZWxwPSJ0aGUgcG9zaXRpb24gb2YgdGhlIGNvbnRyb2wgd2VsbHMgb24gZWFjaCBtaWNyb3BsYXRlICIKICAgICAgICAgICAgIihkZWZhdWx0OiAlKGRlZmF1bHQpcykiLAogICAgICAgICkKICAgICAgICBzZWxmLnBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgICAgICItLW91dHB1dCIsCiAgICAgICAgICAgIHR5cGU9b3MucGF0aC5hYnNwYXRoLAogICAgICAgICAgICByZXF1aXJlZD1UcnVlLAogICAgICAgICAgICBoZWxwPSJPdXRwdXQgZmlsZXBhdGguIFJlc3VsdHMgYXJlIHdyaXR0ZW4gdG8gYSBjc3YgZmlsZSB3aXRoIGNvbHVtbnMgIgogICAgICAgICAgICBmIntTaW11bGF0b3IuT1VUUFVUX0NPTFVNTlN9IHdpdGggb25lIHJvdyBwZXIgbWljcm9wbGF0ZS4iLAogICAgICAgICkKICAgICAgICBzZWxmLnBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgICAgICItLXByb2Nlc3NlcyIsCiAgICAgICAgICAgIGFjdGlvbj1OdW1Qcm9jZXNzZXNQYXJzZXIsCiAgICAgICAgICAgIGRlZmF1bHQ9MSwKICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCiAgICAgICAgICAgIGhlbHA9Ik51bWJlciBvZiBwcm9jZXNzZXMgZm9yIHBhcmFsbGVsIHNpbXVsYXRpb24gKGRlZmF1bHQ6ICUoZGVmYXVsdClzKS4gIgogICAgICAgICAgICAiVXNlICdhdXRvJyBmb3IgbnVtYmVyIG9mIENQVXMuIiwKICAgICAgICApCjx8ZmltX2hvbGV8PgogICAgICAgICAgICByZXF1aXJlZD1GYWxzZSwKICAgICAgICAgICAgaGVscD0icGFzc2VkIHRvIG5wLnJhbmRvbS5zZWVkIChkZWZhdWx0OiAlKGRlZmF1bHQpcykiLAogICAgICAgICkKCiAgICAgICAgc2VsZi5wYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICAgICAiLS1sb2ctbGV2ZWwiLAogICAgICAgICAgICBkZWZhdWx0PSJJTkZPIiwKICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCiAgICAgICAgICAgIGNob2ljZXM9WyJJTkZPIiwgIkRFQlVHIiwgIldBUk5JTkciLCAiRVJST1IiLCAiQ1JJVElDQUwiXSwKICAgICAgICAgICAgaGVscD0iTG9nIGxldmVsIChkZWZhdWx0ICUoZGVmYXVsdClzKSIsCiAgICAgICAgKQogICAgICAgIHNlbGYubG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoc2VsZi5uYW1lKQoKICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgYXJncyA9IHNlbGYucGFyc2VyLnBhcnNlX2FyZ3MoKQoKICAgICAgICBwYXJhbXMgPSB2YXJzKGFyZ3MpCiAgICAgICAgc2VlZCA9IHBhcmFtcy5wb3AoInNlZWQiKQogICAgICAgIHByb2Nlc3NlcyA9IHBhcmFtcy5wb3AoInByb2Nlc3NlcyIpCiAgICAgICAgb3V0cHV0ID0gcGFyYW1zLnBvcCgib3V0cHV0IikKCiAgICAgICAgc2ltdWxhdG9yID0gU2ltdWxhdG9yKCoqcGFyYW1zKQogICAgICAgIHJlc3VsdHMgPSBzaW11bGF0b3Iuc2ltdWxhdGUoc2VlZD1zZWVkLCBwcm9jZXNzZXM9cHJvY2Vzc2VzKQoKICAgICAgICBzaW11bGF0b3IubG9nZ2VyLmluZm8oIldyaXRpbmcgcmVzdWx0cyB0byBmaWxlICVzIiwgb3V0cHV0KQogICAgICAgIHJlc3VsdHMudG9fY3N2KG91dHB1dCwgaW5kZXhfbGFiZWw9J21pY3JvcGxhdGVfaWQnKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBhcHAgPSBJbnRlcmZhY2UoKQogICAgYXBwLnJ1bigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5wYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICAgICAiLS1zZWVkIiwKICAgICAgICAgICAgdHlwZT1pbnQsCiAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKPHxmaW1fZW5kfD4="]
["3cda8a4dba50d4da42dea2d0f227e2ba88191b08-2","3cda8a4dba50d4da42dea2d0f227e2ba88191b08","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gb3BlbnByb2N1cmVtZW50LmFwaS51dGlscyBpbXBvcnQgZ2V0X25vdwpmcm9tIG9wZW5wcm9jdXJlbWVudC5hcGkudXRpbHMgaW1wb3J0ICgKICAgIGNvbnRleHRfdW5wYWNrLAogICAgc2V0X293bmVyc2hpcCwKICAgIGRlY3J5cHQsCiAgICBlbmNyeXB0LAogICAgZ2VuZXJhdGVfaWQsCiAgICBqc29uX3ZpZXcsCiAgICBBUElSZXNvdXJjZSwKICAgIEFQSVJlc291cmNlTGlzdGluZwopCgpmcm9tIG9wZW5wcm9jdXJlbWVudC5hdWN0aW9ucy5jb3JlLmRlc2lnbiBpbXBvcnQgKAogICAgRklFTERTLAogICAgYXVjdGlvbnNfYnlfZGF0ZU1vZGlmaWVkX3ZpZXcsCiAgICBhdWN0aW9uc19yZWFsX2J5X2RhdGVNb2RpZmllZF92aWV3LAogICAgYXVjdGlvbnNfdGVzdF9ieV9kYXRlTW9kaWZpZWRfdmlldywKICAgIGF1Y3Rpb25zX2J5X2xvY2FsX3NlcV92aWV3LAogICAgYXVjdGlvbnNfcmVhbF9ieV9sb2NhbF9zZXFfdmlldywKICAgIGF1Y3Rpb25zX3Rlc3RfYnlfbG9jYWxfc2VxX3ZpZXcsCikKZnJvbSBvcGVucHJvY3VyZW1lbnQuYXVjdGlvbnMuY29yZS5pbnRlcmZhY2VzIGltcG9ydCAoCiAgICBJQXVjdGlvbk1hbmFnZXIsCiAgICBJTWFuYWdlciwKKQpmcm9tIG9wZW5wcm9jdXJlbWVudC5hdWN0aW9ucy5jb3JlLnV0aWxzIGltcG9ydCAoCiAgICBnZW5lcmF0ZV9hdWN0aW9uX2lkLAogICAgc2F2ZV9hdWN0aW9uLAogICAgYXVjdGlvbl9zZXJpYWxpemUsCiAgICBvcHJlc291cmNlLAogICAgZ2V0X2F1Y3Rpb25fcm91dGVfbmFtZSkKZnJvbSBvcGVucHJvY3VyZW1lbnQuYXVjdGlvbnMuY29yZS52YWxpZGF0aW9uIGltcG9ydCB2YWxpZGF0ZV9hdWN0aW9uX2RhdGEKCgpWSUVXX01BUCA9IHsKICAgIHUnJzogYXVjdGlvbnNfcmVhbF9ieV9kYXRlTW9kaWZpZWRfdmlldywKICAgIHUndGVzdCc6IGF1Y3Rpb25zX3Rlc3RfYnlfZGF0ZU1vZGlmaWVkX3ZpZXcsCiAgICB1J19hbGxfJzogYXVjdGlvbnNfYnlfZGF0ZU1vZGlmaWVkX3ZpZXcsCn0KQ0hBTkdFU19WSUVXX01BUCA9IHsKICAgIHUnJzogYXVjdGlvbnNfcmVhbF9ieV9sb2NhbF9zZXFfdmlldywKICAgIHUndGVzdCc6IGF1Y3Rpb25zX3Rlc3RfYnlfbG9jYWxfc2VxX3ZpZXcsCiAgICB1J19hbGxfJzogYXVjdGlvbnNfYnlfbG9jYWxfc2VxX3ZpZXcsCn0KRkVFRCA9IHsKICAgIHUnZGF0ZU1vZGlmaWVkJzogVklFV19NQVAsCiAgICB1J2NoYW5nZXMnOiBDSEFOR0VTX1ZJRVdfTUFQLAp9CgoKQG9wcmVzb3VyY2UobmFtZT0nQXVjdGlvbnMnLAogICAgICAgICAgICBwYXRoPScvYXVjdGlvbnMnLAogICAgICAgICAgICBkZXNjcmlwdGlvbj0iT3BlbiBDb250cmFjdGluZyBjb21wYXRpYmxlIGRhdGEgZXhjaGFuZ2UgZm9ybWF0LiBTZWUgaHR0cDovL29jZHMub3Blbi1jb250cmFjdGluZy5vcmcvc3RhbmRhcmQvci9tYXN0ZXIvI2F1Y3Rpb24gZm9yIG1vcmUgaW5mbyIpCmNsYXNzIEF1Y3Rpb25zUmVzb3VyY2UoQVBJUmVzb3VyY2VMaXN0aW5nKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICAgICAgc3VwZXIoQXVjdGlvbnNSZXNvdXJjZSwgc2VsZikuX19pbml0X18ocmVxdWVzdCwgY29udGV4dCkKICAgICAgICAjIHBhcmFtcyBmb3IgbGlzdGluZwogICAgICAgIHNlbGYuVklFV19NQVAgPSBWSUVXX01BUAogICAgICAgIHNlbGYuQ0hBTkdFU19WSUVXX01BUCA9IENIQU5HRVNfVklFV19NQVAKICAgICAgICBzZWxmLkZFRUQgPSBGRUVECiAgICAgICAgc2VsZi5GSUVMRFMgPSBGSUVMRFMKICAgICAgICBzZWxmLnNlcmlhbGl6ZV9mdW5jID0gYXVjdGlvbl9zZXJpYWxpemUKICAgICAgICBzZWxmLm9iamVjdF9uYW1lX2Zvcl9saXN0aW5nID0gJ0F1Y3Rpb25zJwogICAgICAgIHNlbGYubG9nX21lc3NhZ2VfaWQgPSAnYXVjdGlvbl9saXN0X2N1c3RvbScKCiAgICBAanNvbl92aWV3KGNvbnRlbnRfdHlwZT0iYXBwbGljYXRpb24vanNvbiIsIHBlcm1pc3Npb249J2NyZWF0ZV9hdWN0aW9uJywgdmFsaWRhdG9ycz0odmFsaWRhdGVfYXVjdGlvbl9kYXRhLCkpCiAgICBkZWYgcG9zdChzZWxmKToKICAgICAgICAiIiJUaGlzIEFQSSByZXF1ZXN0IGlzIHRhcmdldGVkIHRvIGNyZWF0aW5nIG5ldyBBdWN0aW9ucyBieSBwcm9jdXJpbmcgb3JnYW5pemF0aW9ucy4KICAgICAgICAiIiIKICAgICAgICBhdWN0aW9uID0gc2VsZi5yZXF1ZXN0LnZhbGlkYXRlZFsnYXVjdGlvbiddCgogICAgICAgIGlmIGF1Y3Rpb25bJ19pbnRlcm5hbF90eXBlJ10gPT0gJ2dlYic6CiAgICAgICAgICAgIG1hbmFnZXIgPSBzZWxmLnJlcXVlc3QucmVnaXN0cnkucXVlcnlNdWx0aUFkYXB0ZXIoKHNlbGYucmVxdWVzdCwgYXVjdGlvbiksIElNYW5hZ2VyKQogICAgICAgICAgICBhcHBsaWNhbnQgPSBzZWxmLnJlcXVlc3QudmFsaWRhdGVkWydhdWN0aW9uJ10KICAgICAgICAgICAgYXVjdGlvbiA9IG1hbmFnZXIuY3JlYXRlKGFwcGxpY2FudCkKICAgICAgICAgICAgaWYgbm90IGF1Y3Rpb246CiAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLnJlcXVlc3QucmVnaXN0cnkuZ2V0QWRhcHRlcihhdWN0aW9uLCBJQXVjdGlvbk1hbmFnZXIpLmNyZWF0ZV9hdWN0aW9uKHNlbGYucmVxdWVzdCkKICAgICAgICAgICAgYXVjdGlvbl9pZCA9IGdlbmVyYXRlX2lkKCkKICAgICAgICAgICAgYXVjdGlvbi5pZCA9IGF1Y3Rpb25faWQKICAgICAgICAgICAgYXVjdGlvbi5hdWN0aW9uSUQgPSBnZW5lcmF0ZV9hdWN0aW9uX2lkKGdldF9ub3coKSwgc2VsZi5kYiwgc2VsZi5zZXJ2ZXJfaWQpCiAgICAgICAgICAgIGlmIGhhc2F0dHIoYXVjdGlvbiwgImluaXRpYWxpemUiKToKICAgICAgICAgICAgICAgIGF1Y3Rpb24uaW5pdGlhbGl6ZSgpCiAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYucmVxdWVzdC5qc29uX2JvZHlbJ2RhdGEnXS5nZXQoJ3N0YXR1cycpCiAgICAgICAgICAgIGlmIHN0YXR1cyBhbmQgc3RhdHVzIGluIFsnZHJhZnQnLCAncGVuZGluZy52ZXJpZmljYXRpb24nXToKICAgICAgICAgICAgICAgIGF1Y3Rpb24uc3RhdHVzID0gc3RhdHVzCiAgICAgICAgYWNjID0gc2V0X293bmVyc2hpcChhdWN0aW9uLCBzZWxmLnJlcXVlc3QpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLnJlcXVlc3QudmFsaWRhdGVkWydhdWN0aW9uJ10gPSBhdWN0aW9uCiAgICAgICAgc2VsZi5yZXF1ZXN0LnZhbGlkYXRlZFsnYXVjdGlvbl9zcmMnXSA9IHt9CiAgICAgICAgaWYgc2F2ZV9hdWN0aW9uKHNlbGYucmVxdWVzdCk6CiAgICAgICAgICAgIHNlbGYuTE9HR0VSLmluZm8oJ0NyZWF0ZWQgYXVjdGlvbiB7fSAoe30pJy5mb3JtYXQoYXVjdGlvblsnaWQnXSwgYXVjdGlvbi5hdWN0aW9uSUQpLAo8fGZpbV9lbmR8Pg=="]
["3c1550c871e3baadd0656a9d3e325129be08db8f-2","3c1550c871e3baadd0656a9d3e325129be08db8f","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24sIHByaW50X2Z1bmN0aW9uCgppbXBvcnQgZmludWZmdApmcm9tIGZpbnVmZnQgaW1wb3J0IGludGVyZmFjZQoKaW1wb3J0IG51bXB5IGFzIG5wCgppbXBvcnQgcHl0ZXN0CgpfX2FsbF9fID0gWwogICAgInRlc3RfbnVmZnQxZDEiLCAidGVzdF9udWZmdDFkMiIsICJ0ZXN0X251ZmZ0MWQzIiwKXQoKZGVmIHRlc3RfbnVmZnQxZDEoc2VlZD00MiwgaWZsYWc9MSk6Cjx8ZmltX2hvbGV8PgogICAgdG9sID0gMS4wZS05CgogICAgeCA9IG5wLnJhbmRvbS51bmlmb3JtKC1ucC5waSwgbnAucGksIG4pCiAgICBjID0gbnAucmFuZG9tLnVuaWZvcm0oLTEuMCwgMS4wLCBuKSArIDEuMGoqbnAucmFuZG9tLnVuaWZvcm0oLTEuMCwgMS4wLCBuKQogICAgZiA9IGZpbnVmZnQubnVmZnQxZDEoeCwgYywgbXMsIGVwcz10b2wsIGlmbGFnPWlmbGFnKQoKICAgICMgTWFrZSBzdXJlIHRoYXQgdGhpcyBhbHNvIHdvcmtzIHdpdGggb3RoZXIgdmFsdWVzIG9mICdmZnR3JwogICAgZiA9IGZpbnVmZnQubnVmZnQxZDEoeCwgYywgbXMsIGVwcz10b2wsIGlmbGFnPWlmbGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgZmZ0dz1pbnRlcmZhY2UuRkZUV09wdGlvbnMubWVhc3VyZSkKCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVHlwZUVycm9yKToKICAgICAgICBmID0gZmludWZmdC5udWZmdDFkMSh4LCBjLCBtcywgZXBzPXRvbCwgaWZsYWc9aWZsYWcsIGZmdHc9MTAwKQoKICAgIGYwID0gaW50ZXJmYWNlLmRpcmZ0MWQxKHgsIGMsIG1zLCBpZmxhZz1pZmxhZykKICAgIGFzc2VydCBucC5hbGwobnAuYWJzKChmIC0gZjApIC8gZjApIDwgMWUtNikKCgpkZWYgdGVzdF9udWZmdDFkMihzZWVkPTQyLCBpZmxhZz0xKToKICAgIG5wLnJhbmRvbS5zZWVkKHNlZWQpCgogICAgbXMgPSBpbnQoMWUzKQogICAgbiA9IGludCgyZTMpCiAgICB0b2wgPSAxLjBlLTkKCiAgICB4ID0gbnAucmFuZG9tLnVuaWZvcm0oLW5wLnBpLCBucC5waSwgbikKICAgIGMgPSBucC5yYW5kb20udW5pZm9ybSgtMS4wLCAxLjAsIG4pICsgMS4waipucC5yYW5kb20udW5pZm9ybSgtMS4wLCAxLjAsIG4pCiAgICBmID0gZmludWZmdC5udWZmdDFkMSh4LCBjLCBtcywgZXBzPXRvbCwgaWZsYWc9aWZsYWcpCgogICAgYyA9IGZpbnVmZnQubnVmZnQxZDIoeCwgZiwgZXBzPXRvbCwgaWZsYWc9aWZsYWcpCiAgICBjMCA9IGludGVyZmFjZS5kaXJmdDFkMih4LCBmLCBpZmxhZz1pZmxhZykKICAgIGFzc2VydCBucC5hbGwobnAuYWJzKChjIC0gYzApIC8gYzApIDwgMWUtNikKCgpkZWYgdGVzdF9udWZmdDFkMyhzZWVkPTQyLCBpZmxhZz0xKToKICAgIG5wLnJhbmRvbS5zZWVkKHNlZWQpCgogICAgbXMgPSBpbnQoMWUzKQogICAgbiA9IGludCgyZTMpCiAgICB0b2wgPSAxLjBlLTkKCiAgICB4ID0gbnAucmFuZG9tLnVuaWZvcm0oLW5wLnBpLCBucC5waSwgbikKICAgIGMgPSBucC5yYW5kb20udW5pZm9ybSgtMS4wLCAxLjAsIG4pICsgMS4waipucC5yYW5kb20udW5pZm9ybSgtMS4wLCAxLjAsIG4pCiAgICBzID0gMC41ICogbiAqICgxLjcgKyBucC5yYW5kb20udW5pZm9ybSgtMS4wLCAxLjAsIG1zKSkKCiAgICBmID0gZmludWZmdC5udWZmdDFkMyh4LCBjLCBzLCBlcHM9dG9sLCBpZmxhZz1pZmxhZykKICAgIGYwID0gaW50ZXJmYWNlLmRpcmZ0MWQzKHgsIGMsIHMsIGlmbGFnPWlmbGFnKQogICAgYXNzZXJ0IG5wLmFsbChucC5hYnMoKGYgLSBmMCkgLyBmMCkgPCAxZS02KQo8fGZpbV9zdWZmaXh8PgogICAgbnAucmFuZG9tLnNlZWQoc2VlZCkKCiAgICBtcyA9IGludCgxZTMpCiAgICBuID0gaW50KDJlMykKPHxmaW1fZW5kfD4="]
["a55735b3e4fdbde19935a22531ebaca635ee4354-2","a55735b3e4fdbde19935a22531ebaca635ee4354","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRpc2NvcmQKZnJvbSBkaXNjb3JkLmV4dCBpbXBvcnQgY29tbWFuZHMKaW1wb3J0IGFzeW5jaW8KZnJvbSBtYWluIGltcG9ydCAqCmZyb20gdHlwaW5nIGltcG9ydCBDb3VudGVyCmltcG9ydCB3aWtpcGVkaWEKaW1wb3J0IHJhbmRvbQoKY2xhc3MgVXNlZnVsKGNvbW1hbmRzLkNvZyk6CiAgICAiIiJVc2VmdWwgY29tbWFuZHMiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBib3QpOgogICAgICAgIHNlbGYuYm90ID0gYm90CgogICAgZGlzcGxheV9lbW9qaSA9ICLwn5K+IgogICAgCiAgICBkZWYgZWMoc2VsZik6CiAgICAgICAgICAgIHJldHVybiByYW5kb20uY2hvaWNlKFsweDlFQ0ZGQywgMHhERTJFNDMsIDB4NzlCMTVBXSkKICAKICAgICNhdmF0YXIKICAgIEBjb21tYW5kcy5jb21tYW5kKG5hbWU9ImF2YXRhciIsCiAgICAgICAgICAgICAgICAgICAgICBhbGlhc2VzPVsiYXYiLCAicGZwIiwgInByb2ZpbGVwaWN0dXJlIl0sCiAgICAgICAgICAgICAgICAgICAgICBicmllZj0iQXZhdGFyIHVybCIsCiAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTZW5kcyB0aGUgYXZhdGFyIHVybCBvZiBhdXRob3IvbWVudGlvbmVkIG1lbWJlci4iKQogICAgYXN5bmMgZGVmIGF2YXRhcihzZWxmLCBjdHgsIG1lbWJlcjogZGlzY29yZC5NZW1iZXI9Tm9uZSk6CiAgICAgICAgbWVtYmVyID0gbWVtYmVyIG9yIGN0eC5hdXRob3IKICAgICAgICBlbWJlZCA9IGRpc2NvcmQuRW1iZWQodGl0bGU9ZiJBdmF0YXIgb2Yge21lbWJlcn0iLCBjb2xvcj1yYW5kb20uY2hvaWNlKFsweDlFQ0ZGQywgMHhERTJFNDMsIDB4NzlCMTVBXSkpI2VtYmVkX2NvbG91cikKICAgICAgICBlbWJlZC5zZXRfaW1hZ2UodXJsPW1lbWJlci5hdmF0YXIudXJsKQogICAgICAgIGF3YWl0IGN0eC5zZW5kKGVtYmVkPWVtYmVkKQogIAogICAgI3dpa2kKICAgIEBjb21tYW5kcy5jb21tYW5kKG5hbWU9Indpa2kiLAogICAgICAgICAgICAgICAgICAgICAgYWxpYXNlcz1bIndpa2lwZWRpYSJdLAogICAgICAgICAgICAgICAgICAgICAgYnJpZWY9IlNlYXJjaGVzIHdpa2lwZWRpYSBmb3IgaW5mby4iLAogICAgICAgICAgICAgICAgICAgICAgaGVscD0iVXNlIHRoaXMgY29tbWFuZCB0byBsb29rIHVwIGFueXRoaW5nIG9uIHdpa2lwZWRpYS4gU2VuZHMgdGhlIGZpcnN0IDEwIHNlbnRlbmNlcyBmcm9tIHdpa2lwZWRpYS4iKQogICAgYXN5bmMgZGVmIHdpa2koc2VsZiwgY3R4LCAqLCBhcmc9Tm9uZSk6CiAgICAgIHRyeToKICAgICAgICAgIGlmIGFyZyA9PSBOb25lOgogICAgICAgICAgICAgIGF3YWl0IGN0eC5zZW5kKCJQbGVhc2UsIHNwZWNpZnkgd2hhdCBkbyB5b3Ugd2FudCBtZSB0byBzZWFyY2guIikKICAgICAgICAgIGVsaWYgYXJnOgogICAgICAgICAgICAgIG1zZyA9IGF3YWl0IGN0eC5zZW5kKCJGZXRjaGluZy4uLiIpCiAgICAgICAgICAgICAgc3RhcnQgPSBhcmcucmVwbGFjZSgiICIsICIiKQogICAgICAgICAgICAgIGVuZCA9IHdpa2lwZWRpYS5zdW1tYXJ5KHN0YXJ0KQogICAgICAgICAgICAgIGF3YWl0IG1zZy5lZGl0KGNvbnRlbnQgPSBmImBgYHB5XG57ZW5kfVxuYGBgIikKICAgICAgZXhjZXB0OgogICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIHN0YXJ0ID0gYXJnLnJlcGxhY2UoIiAiLCAiIikKICAgICAgICAgICAgICBlbmQgPSB3aWtpcGVkaWEuc3VtbWFyeShzdGFydCwgc2VudGVuY2VzPTEwKQogICAgICAgICAgICAgIGF3YWl0IG1zZy5lZGl0KGNvbnRlbnQgPSBmImBgYHB5XG57ZW5kfVxuYGBgIikKICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICBhd2FpdCBtc2cuZWRpdChjb250ZW50ID0gIk5vdCBmb3VuZC4iKQoKICAgICMgdGltZXIKICAgIGdsb2JhbCBtYXhfdGltZQogICAgbWF4X3RpbWUgPSA2MDAKICAgIHRpbWUgPSAiIgogICAgbWlucyA9ICIiCiAgICB0cl9zdGFydF91c2VyID0gIiIKICAgIG1zZyA9ICIiCiAgICBzZWNvbmRpbnQgPSAiIgogIAogICAgQGNvbW1hbmRzLmdyb3VwKG5hbWUgPSAidGltZXIiLAogICAgICAgICAgICAgICAgICAgIGFsaWFzZXMgPSBbInRyIiwgImNvdW50ZG93biIsICJjZCJdLAogICAgICAgICAgICAgICAgICAgIGJyaWVmID0gIlNldHMgYSB0aW1lciIsCiAgICAgICAgICAgICAgICAgICAgaGVscCA9ICJTZXRzIGEgdGltZXIsIHdoaWNoIHRoZSBib3Qgd2lsbCBjb3VudCBkb3duIGZyb20gYW5kIHBpbmcgYXQgdGhlIGVuZC4iLAogICAgICAgICAgICAgICAgICAgIGludm9rZV93aXRob3V0X2NvbW1hbmQ9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICBjYXNlX2luc2Vuc2l0aXZlPVRydWUpCiAgICBhc3luYyBkZWYgdGltZXIoc2VsZiwgY3R4KToKICAgICAgICBhd2FpdCBjdHguc2VuZF9oZWxwKGN0eC5jb21tYW5kKQoKICAgICN0aW1lciBzdGFydAogICAgQHRpbWVyLmNvbW1hbmQobmFtZT0ic3RhcnQiLAogICAgICAgICAgICAgICAgICAgYWxpYXNlcz1bInMiXSwKICAgICAgICAgICAgICAgICAgIGJyaWVmPSJTdGFydHMgdGltZXIuIiwKICAgICAgICAgICAgICAgICAgIGhlbHA9ZiJTZXRzIGEgdGltZXIgZm9yIDxzZWNvbmRzPiBhbmQgY291bnRzIGRvd24gZnJvbSBpdChtYXgge3JvdW5kKG1heF90aW1lLzYwLCAyKX1taW5zIG9yIHttYXhfdGltZX1zZWNvbmRzKS4gT25lIHRpbWVyIHBlciB1c2VyIGF0IGEgdGltZS4gU3RvcCBhIHJ1bm5pbmcgdGltZXIgYnkgdXNpbmcgdGhlIHtwcmVmaXh9dGltZXIgc3RvcCBjb21tYW5kLiIpCiAgICBAY29tbWFuZHMubWF4X2NvbmN1cnJlbmN5KDEsIHBlcj1jb21tYW5kcy5CdWNrZXRUeXBlLnVzZXIsIHdhaXQgPSBGYWxzZSkKICAgIGFzeW5jIGRlZiBfdGltZXJfc3RhcnQoc2VsZiwgY3R4LCBzZWNvbmRzOiBpbnQpOgogICAgCiAgICAgICAgZ2xvYmFsIHRpbWUKICAgICAgICB0aW1lID0gcm91bmQoc2Vjb25kcywgMikKICAgICAgICBnbG9iYWwgbWlucwogICAgICAgIG1pbnMgPSByb3VuZChzZWNvbmRzLzYwLCAyKQogICAgICAgIGdsb2JhbCB0cl9zdGFydF91c2VyCiAgICAgICAgdHJfc3RhcnRfdXNlciA9IGN0eC5hdXRob3IKICAgICAgICBnbG9iYWwgbXNnCiAgICAgICAgbXNnID0gZiJ7Y3R4LmF1dGhvci5tZW50aW9ufSB0aW1lJ3MgdXAhICh7bWluc31taW5zIG9yIHtzZWNvbmRzfXNlY29uZHMpIgogICAgICAgIGdsb2JhbCBzZWNvbmRpbnQKICAgICAgICBzZWNvbmRpbnQgPSBzZWNvbmRzCgogICAgICAgIGNsYXNzIFRpbWVyU3RvcFZpZXcoZGlzY29yZC51aS5WaWV3KToKICAgICAgICAgICAgQGRpc2NvcmQudWkuYnV0dG9uKGxhYmVsPSJTdG9wIiwgc3R5bGU9ZGlzY29yZC5CdXR0b25TdHlsZS5kYW5nZXIpCiAgICAgICAgICAgIGFzeW5jIGRlZiBjb25maXJtKF9zZWxmLCBidXR0b246IGRpc2NvcmQudWkuQnV0dG9uLCBpbnRlcmFjdGlvbjogZGlzY29yZC5JbnRlcmFjdGlvbik6CiAgICAgICAgICAgICAgICBpZiBpbnRlcmFjdGlvbi51c2VyICE9IGN0eC5hdXRob3I6CiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaW50ZXJhY3Rpb24ucmVzcG9uc2Uuc2VuZF9tZXNzYWdlKCJUaGlzIHRpbWVyIGRvZXMgbm90IGJlbG9uZyB0byB5b3UhIiwgZXBoZW1lcmFsPVRydWUpCiAgICAgICAgICAgICAgICBfc2VsZi5zdG9wKCkKICAgICAgICAgICAgICAgIGdsb2JhbCBzZWNvbmRpbnQKICAgICAgICAgICAgICAgIGdsb2JhbCBtaW5zCiAgICAgICAgICAgICAgICBnbG9iYWwgdGltZQogICAgICAgICAgICAgICAgZ2xvYmFsIG1zZwogICAgICAgICAgICAgICAgbXNnID0gZiJ7Y3R4LmF1dGhvci5tZW50aW9ufSB0aW1lciBzdG9wcGVkISBTdG9wcGVkIGF0IHtyb3VuZChzZWNvbmRpbnQvNjAsIDIpfW1pbnMve3NlY29uZGludH1zZWNvbmRzICoqb3V0IG9mKioge21pbnN9bWlucy97dGltZX1zZWNvbmRzIgogICAgICAgICAgICAgICAgc2Vjb25kaW50ID0gMQogICAgICAgIHZpZXcgPSBUaW1lclN0b3BWaWV3KCkKICAgICAgICBpZiBzZWNvbmRzID4gbWF4X3RpbWU6CiAgICAgICAgICAgIGF3YWl0IGN0eC5zZW5kKGYiVGltZXIgY2FuIGJlIHNldCBmb3IgbWF4ICoqe21heF90aW1lLzYwfSoqIG1pbnV0ZXMgb3IgKip7bWF4X3RpbWV9Kiogc2Vjb25kcyIpCiAgICAgICAgZWxpZiBzZWNvbmRzIDw9IDA6CiAgICAgICAgICAgIGF3YWl0IGN0eC5zZW5kKCJQbGVhc2UgaW5wdXQgYSBwb3NpdGl2ZSB3aG9sZSBudW1iZXIuIikKICAgICAgICBlbHNlOgogICAgICAgICAgICBtZXNzYWdlID0gYXdhaXQgY3R4LnNlbmQoZiJUaW1lcjoge3NlY29uZGludH0gc2Vjb25kcyIsIHZpZXc9dmlldykKICAgICAgICAgICAgd2hpbGUgc2Vjb25kaW50ID4gMDoKICAgICAgICAgICAgICAgIHNlY29uZGludCAtPSAxCiAgICAgICAgICAgICAgICBpZiBzZWNvbmRpbnQgPT0gMDoKICAgICAgICAgICAgICAgICAgICBhd2FpdCBtZXNzYWdlLmVkaXQoY29udGVudD1tc2csIHZpZXc9Tm9uZSkKICAgICAgICAgICAgICAgICAgICBicmVhawo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICBhd2FpdCBtZXNzYWdlLmVkaXQoY29udGVudD1mIlRpbWVyOiB7c2Vjb25kaW50fSBzZWNvbmRzLiIpCiAgICAgICAgICAgICAgICBhd2FpdCBhc3luY2lvLnNsZWVwKDEpCiAgICAKPHxmaW1fZW5kfD4="]
["af25ec5ad5a00e196901f1ba53c96a93a2059eec-1","af25ec5ad5a00e196901f1ba53c96a93a2059eec","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG5sdGsKaW1wb3J0IHJlCm5sdGsuZG93bmxvYWQoJ3B1bmt0JykKbmx0ay5kb3dubG9hZCgnc3RvcHdvcmRzJykKbmx0ay5kb3dubG9hZCgnd29yZG5ldCcpCm5sdGsuZG93bmxvYWQoJ2F2ZXJhZ2VkX3BlcmNlcHRyb25fdGFnZ2VyJykKbmx0ay5kb3dubG9hZCgnbWF4ZW50X25lX2NodW5rZXInKQpubHRrLmRvd25sb2FkKCd3b3JkcycpCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gbmx0ay50b2tlbml6ZSBpbXBvcnQgd29yZF90b2tlbml6ZSwgc2VudF90b2tlbml6ZQpmcm9tIG5sdGsuY29ycHVzIGltcG9ydCBzdG9wd29yZHMKZnJvbSBubHRrLnN0ZW0ud29yZG5ldCBpbXBvcnQgV29yZE5ldExlbW1hdGl6ZXIKZnJvbSBubHRrIGltcG9ydCBwb3NfdGFnLCBuZV9jaHVuawpmcm9tIHNrbGVhcm4ubXVsdGlvdXRwdXQgaW1wb3J0IE11bHRpT3V0cHV0Q2xhc3NpZmllcgpmcm9tIHNrbGVhcm4ucGlwZWxpbmUgaW1wb3J0IFBpcGVsaW5lLCBGZWF0dXJlVW5pb24KZnJvbSBza2xlYXJuLmJhc2UgaW1wb3J0IEJhc2VFc3RpbWF0b3IsIFRyYW5zZm9ybWVyTWl4aW4KCgoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdG9rZW5pemUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGVmIHRva2VuaXplKHRleHQpOgogICAgJycnQ2xlYW5zLCByZW1vdmVzIHB1bmN0dWF0aW9uLCB0b2tlbml6ZSwgcmVtb3ZlIHN0b3Agd29yZHMgYW5kCiAgICBsZW1tYXRpemUKICAgIAogICAgQXJnczoKICAgICAgICB0ZXh0IChzdHIpOiB0ZXh0IGRhdGEgdG8gYmUgdG9rZW5pemVkCiAgICAKICAgIFJldHVybnM6CiAgICAgICAgd29yZHMgKHN0cik6IGxpc3Qgb2YgdG9rZW5pemVkIHdvcmRzCiAgICAnJycKICAgIAogICAgIyBwdW5jdHVhdGlvbiByZW1vdmFsCiAgICB0ZXh0ID0gdGV4dC5sb3dlcigpLnJlcGxhY2UocidbXmEtekEtWjAtOV0nLCAiICIpCiAgICB3b3JkcyA9IHdvcmRfdG9rZW5pemUodGV4dCkgIyB0b2tlbml6YXRpb24KICAgIAogICAgI3JlbW92aW5nIHN0b3Agd29yZHMgYW5kIGxlbW1hdGl6YXRpb24KICAgIHdvcmRzID0gW3cgZm9yIHcgaW4gd29yZHMgaWYgdyBub3QgaW4gc3RvcHdvcmRzLndvcmRzKCdlbmdsaXNoJyldCiAgICB3b3JkcyA9IFtXb3JkTmV0TGVtbWF0aXplcigpLmxlbW1hdGl6ZSh3LCBwb3MgPSAndicpIGZvciB3IGluIHdvcmRzXQogICAgCiAgICByZXR1cm4gd29yZHMKCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbGVuZ3RoIGV4dHJhY3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpjbGFzcyBMZW5ndGhFeHRyYWN0b3IoQmFzZUVzdGltYXRvciwgVHJhbnNmb3JtZXJNaXhpbik6CiAgICAnJydMZW5ndGggRXh0cmFjdG9yIHRyYW5zZm9ybWVyCiAgICBBdHRyaWJ1dGVzOgogICAgICAgIAogICAgCiAgICAnJycKICAgIGRlZiBfX2ludF9fKHNlbGYpOgogICAgICAgIHBhc3MKICAgIAogICAgZGVmIGZ1bmMoc2VsZiwgdGV4dCk6CiAgICAgICAgJycnR2l2ZXMgdGhlIG51bWJlciBvZiBzZW50ZW5jZXMgYW5kIHRoZSBudW1iZXIgb2Ygd29yZHMgaW4gdGhlIHRleHQKICAgICAgICAKICAgICAgICBBcmdzOgogICAgICAgICAgICB0ZXh0IChzdHIpOiBsaW5lcyBvZiBzdHJpbmcgdG8gYmUgZ2V0IGZlYXR1cmUtZXh0cmFjdGVkCiAgICAgICAgICAgIAogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIFtzZW50X2xlbiwgd29yZF9sZW5dIDogbGlzdCBvZCBpbnRlZ2VycyByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZiAKICAgICAgICAgICAgc2VudGVuY2VzIGFuZCB0aGUgbnVtYmVyIG9mIHdvcmRzCiAgICAgICAgJycnCiAgICAgICAgc2VudHMgPSBzZW50X3Rva2VuaXplKHRleHQpCiAgICAgICAgc2VudF9sZW4gPSBsZW4oc2VudHMpCiAgICAgICAgCiAgICAgICAgdGV4dCA9IHRleHQubG93ZXIoKS5yZXBsYWNlKHInW15hLXpBLVowLTldJywgJyAnKQogICAgICAgIHdvcmRzID0gd29yZF90b2tlbml6ZSh0ZXh0KQogICAgICAgIHdvcmRfbGVuID0gbGVuKHdvcmRzKQogICAgICAgIAogICAgICAgIHJldHVybiBbc2VudF9sZW4sIHdvcmRfbGVuXQogICAgCiAgICBkZWYgZml0KHNlbGYsIFgsIHkgPSBOb25lKToKICAgICAgICByZXR1cm4gc2VsZgogICAgCiAgICBkZWYgdHJhbnNmb3JtKHNlbGYsIFgpOgogICAgICAgICcnJ1RyYW5zZm9ybXMgZGF0YSB0byBkYXRhZnJhbWUgb2YgMiBjb2x1bW5zIGdpdmluZyB0aGUgbnVtYmVyCiAgICAgICAgb2Ygc2VudGVuY2VzIG9mIHRoZSBudW1iZXIgb2Ygd29yZHMgaW4gdGhlIGRhdGEKICAgICAgICAKICAgICAgICBBcmdzOgogICAgICAgICAgICBYIChzdHIpOiBkYXRhIHRvIGJlIGZlYXR1cmUtZXh0cmFjdGVkCiAgICAgICAgICAgIAogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIGRmIDogZGF0YWZyYW1lIG9mIDIgY29sdW1ucwogICAgICAgICcnJwogICAgICAgIAogICAgICAgIFhfbGVuID0gcGQuU2VyaWVzKFgpLmFwcGx5KHNlbGYuZnVuYykKICAgICAgICAKICAgICAgICByZXR1cm4gcGQuRGF0YUZyYW1lKFhfbGVuLnRvbGlzdCgpKQogICAgCiAgICBkZWYgZml0X3RyYW5zZm9ybShzZWxmLCBYLCB5ID0gTm9uZSk6CiAgICAgICAgJycnZml0IGFuZCB0cmFuc2Zvcm0gdGhlIGRhdGEKICAgICAgICAnJycKICAgICAgICBYID0gcGQuU2VyaWVzKFgpLmFwcGx5KHNlbGYuZnVuYykKICAgICAgICAKICAgICAgICByZXR1cm4gcGQuRGF0YUZyYW1lKFgudG9saXN0KCkpCiAgICAKICAgIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBkaWdpdCBleHRyYWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmNsYXNzIERpZ2l0RXh0cmFjdG9yKEJhc2VFc3RpbWF0b3IsIFRyYW5zZm9ybWVyTWl4aW4pOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHBhc3MKICAgIAogICAgZGVmIGlzRGlnaXQoc2VsZiwgdGV4dCk6CiAgICAgICAgJycnRnVuY3Rpb24gdG8gZ2l2ZSBpZiBhIHRleHQgaW5jbHVkZXMgYSBkaWdpdCBvciBub3QKICAgICAgICAKICAgICAgICBBcmdzOgogICAgICAgICAgICB0ZXh0IChzdHIpOiB0ZXh0IGRhdGEgdG8gYmUgZmVhdHVyZS1leHRyYWN0ZWQKICAgICAgICAgICAgCiAgICAgICAgUmV0dXJuczoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBib29sIDogUmV0dXJuIHZhbHVlLiBUcnVlIGlmIHN1Y2Nlc3NmdWwsIEZhbHNlIG90aGVyd2lzZQo8fGZpbV9lbmR8Pg=="]
["3c3f060164b1895303f8f3fb7c302bd36cd27654-1","3c3f060164b1895303f8f3fb7c302bd36cd27654","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCByYW5kb20KaW1wb3J0IHN5cwppbXBvcnQgb3MKCnBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSJDb252ZXJ0IHJhdyBuYW1lcyB0byBlbWJlZGRlZCBpZHMiKQoKcGFyc2VyLmFkZF9hcmd1bWVudCgnZGF0YXBhdGgnKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCctbWF4JywgJy0tbWF4LXNwZWNpZXMnLCB0eXBlID0gaW50LCBkZWZhdWx0ID0gMCwgaGVscCA9ICJNYXggc3BlY2llcyB0byBiZSBlbWJlZGRlZCwgMCA9IG5vIGxpbWl0LiBtb3N0IE4tMSB1c2VkIHBva2Vtb25zIHdpbGwgYmUgZW1iZWRkZWQgaW50byBjb3JyZXNwb25kaW5nIG9uZS1ob3QsIG90aGVyIHBva2Vtb25zIHNoYXJlIGEgc2luZ2xlIE50aCBlbnRyeS4iKQoKYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCmRhdGFfRmlsZSA9IG9wZW4oYXJncy5kYXRhcGF0aCwgJ3InKQpkYXRhX2ZpbGVDb250ZW50ID0gW2xpbmUucnN0cmlwKCdcbicpIGZvciBsaW5lIGluIGRhdGFfRmlsZV0KCnByZWZpeCA9IGFyZ3MuZGF0YXBhdGguc3BsaXQoJy4nKVswXQoKb3V0X2ZpbGUgPSBvcGVuKHByZWZpeCArICdfdHJhaW5fZW1iLnR4dCcsICd3JykKb3V0X3ZhbF9maWxlID0gb3BlbihwcmVmaXggKyAnX3ZhbGlkYXRpb25fZW1iLnR4dCcsICd3JykKZGljdF9maWxlID0gb3BlbihwcmVmaXggKyAnX2RpY3QudHh0JywgJ3cnKQoKZGF0YUNvdW50ID0gbGVuKGRhdGFfZmlsZUNvbnRlbnQpIC8vIDQKCnBrbW5fZGljdCA9IHt9CnBrbW5fY250ID0gMAoKZm9yIGkgaW4gcmFuZ2UobGVuKGRhdGFfZmlsZUNvbnRlbnQpIC8vIDQpOgogICAgCiAgICBwMXBrbW4gPSBkYXRhX2ZpbGVDb250ZW50W2kgKiA0ICsgMV0uc3BsaXQoJywnKVs6LTFdCiAgICBwMnBrbW4gPSBkYXRhX2ZpbGVDb250ZW50W2kgKiA0ICsgMl0uc3BsaXQoJywnKVs6LTFdCgogICAgcDFwa21uX2lkID0gW10KICAgIHAycGttbl9pZCA9IFtdCgogICAgZm9yIGogaW4gcmFuZ2UoNik6CgogICAgICAgIGlmIHAxcGttbltqXSBub3QgaW4gcGttbl9kaWN0OgogICAgICAgICAgICBwa21uX2NudCArPSAxCiAgICAgICAgICAgIHBrbW5fZGljdFtwMXBrbW5bal1dID0gMAogICAgICAgIAogICAgICAgIGlmIHAycGttbltqXSBub3QgaW4gcGttbl9kaWN0OgogICAgICAgICAgICBwa21uX2NudCArPSAxCiAgICAgICAgICAgIHBrbW5fZGljdFtwMnBrbW5bal1dID0gMAogICAgICAgIAogICAgICAgICMgQ291bnQgdXNhZ2UKICAgICAgICBwa21uX2RpY3RbcDFwa21uW2pdXSArPSAxCiAgICAgICAgcGttbl9kaWN0W3AycGttbltqXV0gKz0gMQoKIyBTb3J0IGRpY3QgKCBtb3JlIHVzZWQgLT4gbmV2ZXIgdXNlZCApCnNvcnRlZF9lbnRyaWVzID0gWyhrLCBwa21uX2RpY3Rba10pIGZvciBrIGluIHNvcnRlZChwa21uX2RpY3QsIGtleSA9IHBrbW5fZGljdC5nZXQsIHJldmVyc2UgPSBUcnVlKV0KCiMgQXNzaWduIGVudHJpZXMKaSA9IDAKZm9yIGssIHYgaW4gc29ydGVkX2VudHJpZXM6CiAgICBwa21uX2RpY3Rba10gPSAobWluKGksIGFyZ3MubWF4X3NwZWNpZXMgLSAxKSwgdikKICAgIGkgKz0gMQoKZm9yIGkgaW4gcmFuZ2UobGVuKGRhdGFfZmlsZUNvbnRlbnQpIC8vIDQpOgoKICAgIHAxcGttbiA9IGRhdGFfZmlsZUNvbnRlbnRbaSAqIDQgKyAxXS5zcGxpdCgnLCcpWzotMV0KICAgIHAycGttbiA9IGRhdGFfZmlsZUNvbnRlbnRbaSAqIDQgKyAyXS5zcGxpdCgnLCcpWzotMV0KCjx8ZmltX2hvbGV8PgoKICAgICAgICBwMXBrbW5faWQuYXBwZW5kKHN0cihwa21uX2RpY3RbcDFwa21uW2pdXVswXSkpCiAgICAgICAgcDJwa21uX2lkLmFwcGVuZChzdHIocGttbl9kaWN0W3AycGttbltqXV1bMF0pKQogICAgCiAgICBpZiByYW5kb20ucmFuZG9tKCkgPCAwLjI6CiAgICAgICAgb3V0X3ZhbF9maWxlLndyaXRlKCIlc1xuJXNcbiVzXG4lc1xuIiAlIChcCiAgICAgICAgICAgIGRhdGFfZmlsZUNvbnRlbnRbaSAqIDRdLFwKICAgICAgICAgICAgJywnLmpvaW4ocDFwa21uX2lkKSxcCiAgICAgICAgICAgICcsJy5qb2luKHAycGttbl9pZCksXAogICAgICAgICAgICBkYXRhX2ZpbGVDb250ZW50W2kgKiA0ICsgM10pKQogICAgZWxzZToKICAgICAgICBvdXRfZmlsZS53cml0ZSgiJXNcbiVzXG4lc1xuJXNcbiIgJSAoXAogICAgICAgICAgICBkYXRhX2ZpbGVDb250ZW50W2kgKiA0XSxcCiAgICAgICAgICAgICcsJy5qb2luKHAxcGttbl9pZCksXAogICAgICAgICAgICAnLCcuam9pbihwMnBrbW5faWQpLFwKICAgICAgICAgICAgZGF0YV9maWxlQ29udGVudFtpICogNCArIDNdKSkKCmRpY3RfZmlsZS53cml0ZSgiJWRcbiIgJSBtaW4oYXJncy5tYXhfc3BlY2llcywgcGttbl9jbnQpKQpmb3IgaywgdiBpbiBzb3J0ZWRfZW50cmllczoKICAgIGRpY3RfZmlsZS53cml0ZSgiJWQsJXNcbiIgJSAocGttbl9kaWN0W2tdWzBdLCBrKSkKCm91dF9maWxlLmNsb3NlKCkKZGljdF9maWxlLmNsb3NlKCkKPHxmaW1fc3VmZml4fD4KICAgIHAxcGttbl9pZCA9IFtdCiAgICBwMnBrbW5faWQgPSBbXQoKICAgIGZvciBqIGluIHJhbmdlKDYpOgo8fGZpbV9lbmR8Pg=="]
["a59f21f4ae1d6c994385d72b910c9cf4dcd702ab-1","a59f21f4ae1d6c994385d72b910c9cf4dcd702ab","PHxmaW1fcHJlZml4fD4KIiIiVGhlIEFiZmFsbHBsdXMgaW50ZWdyYXRpb24uIiIiCmltcG9ydCBsb2dnaW5nCmltcG9ydCBkYXRldGltZQoKZnJvbSBob21lYXNzaXN0YW50LmNvbmZpZ19lbnRyaWVzIGltcG9ydCBDb25maWdFbnRyeQpmcm9tIGhvbWVhc3Npc3RhbnQuY29yZSBpbXBvcnQgSG9tZUFzc2lzdGFudApmcm9tIGhvbWVhc3Npc3RhbnQuaGVscGVycy5ldmVudCBpbXBvcnQgYXN5bmNfdHJhY2tfdXRjX3RpbWVfY2hhbmdlCgpmcm9tIC5jb25zdCBpbXBvcnQgRE9NQUlOCgpmcm9tIC5hYmZhbGxwbHVzX2FwcF9saWIgaW1wb3J0IEFiZmFsbHBsdXNBcHAKCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgphc3luYyBkZWYgYXN5bmNfc2V0dXBfZW50cnkoaGFzczogSG9tZUFzc2lzdGFudCwgZW50cnk6IENvbmZpZ0VudHJ5KToKICAgICIiIlNldCB1cCBBYmZhbGxwbHVzIGZyb20gYSBjb25maWcgZW50cnkuIiIiCgogICAgIyBDcmVhdGUgYW5kIHN0b3JlIGhhbmRsZXIKICAgIGFiZmFsbHBsdXMgPSBBYmZsbGFwbHVzQXBwSGFuZGxlcihoYXNzLCBBYmZhbGxwbHVzQXBwKGVudHJ5LmRhdGEpKQogICAgaGFzcy5kYXRhLnNldGRlZmF1bHQoRE9NQUlOLCB7fSkKPHxmaW1faG9sZXw+CgogICAgIyBTZXR1cCBzZW5zb3JzCiAgICBoYXNzLmFzeW5jX2NyZWF0ZV90YXNrKAogICAgICAgIGhhc3MuY29uZmlnX2VudHJpZXMuYXN5bmNfZm9yd2FyZF9lbnRyeV9zZXR1cChlbnRyeSwgInNlbnNvciIpCiAgICApCgogICAgIyBTdGFydCBwZXJpb2RpYyB1cGRhdGVzCiAgICBhYmZhbGxwbHVzLnN0YXJ0X3BlcmlvZGljX3JlcXVlc3QoKQoKICAgICMgSW5pdGlhbCByZXF1ZXN0CiAgICBhd2FpdCBhYmZhbGxwbHVzLnVwZGF0ZV9zZW5zb3JzKCkKICAgIHJldHVybiBUcnVlCgoKYXN5bmMgZGVmIGFzeW5jX3VubG9hZF9lbnRyeShoYXNzOiBIb21lQXNzaXN0YW50LCBlbnRyeTogQ29uZmlnRW50cnkpOgogICAgIiIiVW5sb2FkIGEgY29uZmlnIGVudHJ5LiIiIgoKICAgIHVubG9hZF9vayA9IGF3YWl0IGhhc3MuY29uZmlnX2VudHJpZXMuYXN5bmNfZm9yd2FyZF9lbnRyeV91bmxvYWQoZW50cnksICJzZW5zb3IiKQoKICAgIGlmIHVubG9hZF9vazoKICAgICAgICBoYXNzLmRhdGFbRE9NQUlOXS5wb3AoZW50cnkuZW50cnlfaWQpCgogICAgcmV0dXJuIHVubG9hZF9vawoKCmNsYXNzIEFiZmxsYXBsdXNBcHBIYW5kbGVyOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGhhc3MsIGFwaSk6CiAgICAgICAgIiIiSW5pdGlhbGl6ZSBjaGFyZ2luZyBzdGF0aW9uIGNvbm5lY3Rpb24uIiIiCgogICAgICAgIHNlbGYuX3VwZGF0ZV9saXN0ZW5lcnMgPSBbXQogICAgICAgIHNlbGYuX2hhc3MgPSBoYXNzCiAgICAgICAgc2VsZi5hcGkgPSBhcGkKICAgICAgICBzZWxmLmRldmljZV9uYW1lID0gImFiZmFsbHBsdXMiICAjIGNvcnJlY3QgZGV2aWNlIG5hbWUgd2lsbCBiZSBzZXQgaW4gc2V0dXAoKQogICAgICAgIHNlbGYuZGV2aWNlX2lkID0gImFiZmFsbHBsdXNfIiAgIyBjb3JyZWN0IGRldmljZSBpZCB3aWxsIGJlIHNldCBpbiBzZXR1cCgpCiAgICAgICAgc2VsZi5kYXRhID0gTm9uZQoKICAgIGRlZiBzdGFydF9wZXJpb2RpY19yZXF1ZXN0KHNlbGYpOgogICAgICAgICIiIlN0YXJ0IHBlcmlvZGljIGRhdGEgcG9sbGluZy4iIiIKCiAgICAgICAgbm93ID0gZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkKICAgICAgICBhc3luY190cmFja191dGNfdGltZV9jaGFuZ2UoCiAgICAgICAgICAgIHNlbGYuX2hhc3MsCiAgICAgICAgICAgIHNlbGYudXBkYXRlX3NlbnNvcnMsCiAgICAgICAgICAgIGhvdXI9MCwKICAgICAgICAgICAgbWludXRlPW5vdy5taW51dGUsCiAgICAgICAgICAgIHNlY29uZD1ub3cuc2Vjb25kLAogICAgICAgICAgICBsb2NhbD1UcnVlLAogICAgICAgICkKCiAgICBhc3luYyBkZWYgdXBkYXRlX3NlbnNvcnMoc2VsZiwgKmFyZ3MpOgogICAgICAgICIiIkZldGNoIG5ldyBkYXRhIGFuZCB1cGRhdGUgbGlzdGVuZXJzLiIiIgogICAgICAgIF9MT0dHRVIuZGVidWcoIlVwZGF0ZSB3YXN0ZSBjb2xsZWN0aW9uIHNlbnNvcnMiKQoKICAgICAgICBzZWxmLmRhdGEgPSBhd2FpdCBzZWxmLmFwaS5nZXRfcGlja3VwX3RpbWVzKCkKCiAgICAgICAgIyBJbmZvcm0gZW50aXRpZXMgYWJvdXQgdXBkYXRlZCB2YWx1ZXMKICAgICAgICBmb3IgbGlzdGVuZXIgaW4gc2VsZi5fdXBkYXRlX2xpc3RlbmVyczoKICAgICAgICAgICAgbGlzdGVuZXIoKQoKICAgICAgICBfTE9HR0VSLmRlYnVnKCJOb3RpZnlpbmcgJWQgbGlzdGVuZXJzIiwgbGVuKHNlbGYuX3VwZGF0ZV9saXN0ZW5lcnMpKQoKICAgIGRlZiBhZGRfdXBkYXRlX2xpc3RlbmVyKHNlbGYsIGxpc3RlbmVyKToKICAgICAgICAiIiJBZGQgYSBsaXN0ZW5lciBmb3IgdXBkYXRlIG5vdGlmaWNhdGlvbnMuIiIiCiAgICAgICAgc2VsZi5fdXBkYXRlX2xpc3RlbmVycy5hcHBlbmQobGlzdGVuZXIpCgogICAgICAgICMgaW5pdGlhbCBkYXRhIGlzIGFscmVhZHkgbG9hZGVkLCB0aHVzIHVwZGF0ZSB0aGUgY29tcG9uZW50CiAgICAgICAgbGlzdGVuZXIoKQoKICAgIGFzeW5jIGRlZiBhc3luY19mZXRjaChzZWxmLCBwYXJhbT1Ob25lKToKICAgICAgICAiIiJTZXQgZmFpbHNhZmUgbW9kZSBpbiBhc3luYyB3YXkuIiIiCiAgICAgICAgYXdhaXQgc2VsZi51cGRhdGVfc2Vuc29ycygpCjx8ZmltX3N1ZmZpeHw+CiAgICBoYXNzLmRhdGFbRE9NQUlOXVtlbnRyeS5lbnRyeV9pZF0gPSBhYmZhbGxwbHVzCgogICAgIyBSZWdpc3RlciBmb3JjZSB1cGRhdGUgc2VydmljZQogICAgaGFzcy5zZXJ2aWNlcy5hc3luY19yZWdpc3RlcihET01BSU4sICJ1cGRhdGVfc2Vuc29ycyIsIGFiZmFsbHBsdXMudXBkYXRlX3NlbnNvcnMpCjx8ZmltX2VuZHw+"]
["66399b01fa001644340a6656d5bc23ddbb3f79f5-1","66399b01fa001644340a6656d5bc23ddbb3f79f5","PHxmaW1fcHJlZml4fD4KZnJvbSBnaXRodWIgaW1wb3J0IEdpdGh1Ygpmcm9tIGxvY2FsX3NldHRpbmdzIGltcG9ydCBHSVRIVUJfUFJPRklMRSwgUkVQT1NJVE9SSUVTCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CgpfX2F1dGhvcl9fID0gJ3JiYW5zYWwnCgoKY2xhc3MgUHJvamVjdENhcmRXYWxsKG9iamVjdCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgc2VsZi5yZXBvX2xpc3QgPSBbXQogICAgICAgIHNlbGYuc29ydGVkX2lzc3Vlc19kaWN0ID0gZGVmYXVsdGRpY3QobGlzdCkKPHxmaW1fZW5kfD4="]
["bbe6f9910d826b18c2df7ee9f45c2613e25a0ace-2","bbe6f9910d826b18c2df7ee9f45c2613e25a0ace","PHxmaW1fcHJlZml4fD4KZnJvbSBtYXRwbG90bGliLnB5cGxvdCBpbXBvcnQgc2NhdHRlciwgYXhobGluZSwgeGxhYmVsLCB5bGFiZWwsIGxlZ2VuZCwgcGxvdCxmaWd1cmUsc2hvdwpmcm9tIG1wbF90b29sa2l0cy5tcGxvdDNkIGltcG9ydCBBeGVzM0QKZnJvbSBzY2lweS5pbnRlcnBvbGF0ZSBpbXBvcnQgQ3ViaWNTcGxpbmUsIGludGVycDFkCmZyb20gbnVtcHkgaW1wb3J0IGxpbnNwYWNlLCBsb2cxMCwgYXJyYXksIGFyYW5nZSwgYXBwZW5kLHplcm9zCmZyb20gLmVxdWlsaWJyaXVtIGltcG9ydCBzb2x2ZV9lb3MsIHNvbHZlX1ZMRQpmcm9tIG1wbF90b29sa2l0cy5tcGxvdDNkIGltcG9ydCBBeGVzM0QKI2ltcG9ydCBwbG90bHkKI2ltcG9ydCBwbG90bHkuZ3JhcGhfb2JqcyBhcyBnbwoKZGVmIHB2KFQsdGMscGMsYWNlbnRyaWMscF8wPTEsbWV0aG9kPSdwcicsYWxmYV9mdW5jdGlvbj0nYWxmYV9wZW5nX3JvYmluc29uJyxwdnQ9RmFsc2UpOgogICAgdm9sdW1lcyA9IFtdCiAgICBwcmVzID0gbGluc3BhY2UocF8wLHBjKQogICAgUj04My4xNAogICAgcHJlc3N1cmVzPVtdCiAgICBmb3IgcCBpbiBwcmVzOgogICAgICAgIHg9c29sdmVfZW9zKFQscCx0YyxwYyxhY2VudHJpYyxtZXRob2Q9bWV0aG9kLGFsZmFfZnVuY3Rpb249YWxmYV9mdW5jdGlvbixkaWFncmFtPVRydWUpCiAgICAgICAgaWYoaXNpbnN0YW5jZSh4LHR1cGxlKSk6CiAgICAgICAgICAgIHZvbHVtZXMuYXBwZW5kKHhbMF0qUipUL3ApCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgdm9sdW1lcy5hcHBlbmQoeFsxXSpSKlQvcCkKICAgICAgICAgICAgdm9sdW1lcy5hcHBlbmQoeFsyXSpSKlQvcCkKICAgICAgICAgICAgcHJlc3N1cmVzLmFwcGVuZChwKQogICAgICAgICAgICBwcmVzc3VyZXMuYXBwZW5kKHApCjx8ZmltX2VuZHw+"]
["5906bacdecaa77bcee484b553f28a3087909d611-4","5906bacdecaa77bcee484b553f28a3087909d611",{"$cut":{"chars":39412,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojICRJZDogcGxvdF9hbHRfcHJvZmlsZXMucHksdiAxLjIgMjAxNC8wMi8xNyAxNjo1NzoyOSBhZ2J1cnIgRXhwICQKIyBwbG90X2FsdF9wcm9maWxlcwojCiMgQXV0aG9yOiBBbmdlbGluZSBHLiBCdXJyZWxsLCBVTWljaGlnYW4sIE9jdCAyMDEzCiMKIyBEYXJyZW4gRGUgWmVldXcgKEREWikgLSAwNi8yNC8xOTogVXBkYXRlZCBjb2RlIHRvIHB5dGhvbjMsIAojICAgICAgICAgICAgICAgICBBYXJvbiBSaWRsZXkgYXBwcm92ZWQgcmVhZGVyIGZvciBvcGVuIHNvdXJjZSB1c2UgaW4gS2Ftb2RvCiMKIyBDb21tZW50czogUm91dGluZXMgdG8gbWFrZSBsaW5lYXIgYW5kIGNvbnRvdXIgYWx0aXR1ZGUgcGxvdHMuCiMKIyBJbmNsdWRlczogcGxvdF9zaW5nbGVfYWx0X2ltYWdlIC0gcGxvdHMgYSBzaW5nbGUgbGluZWFyIG9yIGxvY2F0aW9uIHNsaWNlIGFzCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgZnVuY3Rpb24gb2YgYWx0aXR1ZGUKIyAgICAgICAgICAgcGxvdF9tdWx0X2FsdF9pbWFnZXMgIC0gcGxvdCBtdWx0aXBsZSBsb2NhdGlvbnMgb2YgbGluZWFyIG9yIDNECiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdGl0dWRlIHNsaWNlcwojICAgICAgICAgICBwbG90X2FsdF9zbGljZXMgICAgICAgLSBwbG90IGEgc2luZ2xlIDNEIGFsdGl0dWRlIGNvbnRvdXIgd2l0aAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXZlcmFsIGxpbmVhciBzbGljZXMKIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyAgICAgICAgICAgcGxvdF9saW5lYXJfYWx0ICAgICAgIC0gcGxvdCB0aGUgbGluZWFyIGFsdGl0dWRlIGRlcGVuZGVuY2Ugb2YgYQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eQojICAgICAgICAgICBwbG90XzNEX2FsdCAgICAgICAgICAgLSBwbG90IHRoZSBhbHRpdHVkZSBkZXBlbmRlbmNlIG9mIGEgcXVhbnRpdHkKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdGhlIGZ1bmN0aW9uIG9mIGFub3RoZXIgc3BhdGlvdGVtcG9yYWwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKJycnClBsb3QgZGF0YSBmcm9tIGEgM0QgR0lUTSBmaWxlIGZvciBkaWZmZXJlbnQgc3BhdGlvdGVtcG9yYWwgY29vcmRpbmF0ZXMKJycnCgojIEltcG9ydCBtb2R1bGVzCmltcG9ydCBzeXMKaW1wb3J0IHN0cmluZyAKaW1wb3J0IG1hdGgKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IG1hdHBsb3RsaWIuZ3JpZHNwZWMgYXMgZ3JpZHNwZWMKZnJvbSBtYXRwbG90bGliLmNtIGltcG9ydCBnZXRfY21hcApmcm9tIG1hdHBsb3RsaWIuY29sb3JzIGltcG9ydCBMb2dOb3JtCmZyb20gbWF0cGxvdGxpYi50aWNrZXIgaW1wb3J0IEZvcm1hdFN0ckZvcm1hdHRlcixNdWx0aXBsZUxvY2F0b3IKZnJvbSAuIGltcG9ydCBnaXRtX3Bsb3Rfcm91dCBhcyBncHIKCmRlZiBwbG90X3NpbmdsZV9hbHRfaW1hZ2UocGxvdF90eXBlLCB4X2RhdGEsIGFsdF9kYXRhLCB6X2RhdGEsIHhfbmFtZSwgeF9zY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB4X3VuaXRzLCBhbHRfdW5pdHMsIHpfbmFtZT0iIiwgel9zY2FsZT0iIiwgel91bml0cz0iIiwKICAgICAgICAgICAgICAgICAgICAgICAgICB4bWluPU5vbmUsIHhtYXg9Tm9uZSwgYW1pbj1Ob25lLCBhbWF4PU5vbmUsIHptaW49Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB6bWF4PU5vbmUsIHhpbmM9NiwgYWluYz02LCB6aW5jPTYsIHRpdGxlPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGxvYz0idCIsIGZpZ25hbWU9Tm9uZSwgZHJhdz1UcnVlLCBjb2xvcjE9ImIiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMj0ibyIsIGNvbG9yMz0iOiIsIHhsPVRydWUsIHh0PVRydWUsIHlsPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgeXQ9VHJ1ZSwgKmFyZ3MsICoqa3dhcmdzKToKICAgICcnJwogICAgQ3JlYXRlcyBhIHJlY3Rhbmd1bGFyIG9yIHBvbGFyIG1hcCBwcm9qZWN0aW9uIHBsb3QgZm9yIGEgc3BlY2lmaWVkIGxhdGl0dWRlCiAgICByYW5nZS4KICAgIElucHV0OiBwbG90X3R5cGUgPSBrZXkgdG8gZGV0ZXJtaW5lIHBsb3QgdHlwZSAobGluZWFyLCBjb250b3VyLCBzY2F0dGVyKQogICAgICAgICAgIHhfZGF0YSAgICA9IDJEIG51bXB5IGFycmF5IGNvbnRhaW5pbmcgeC1heGlzIGRhdGEKICAgICAgICAgICBhbHRfZGF0YSAgPSAyRCBudW1weSBhcnJheSBjb250YWluaW5nIHktYXhpcyBhbHRpdHVkZSBkYXRhCiAgICAgICAgICAgel9kYXRhICAgID0gMUQgb3IgMkQgbnVtcHkgYXJyYXkgY29udGFpbmluZyBkYXRhIHRvIHBsb3QgdXNpbmcgYQogICAgICAgICAgICAgICAgICAgICAgIGNvbG9yIHNjYWxlIG9yIGFuIGVtcHR5IGxpc3QgZm9yIGEgbGluZWFyIHBsb3QKICAgICAgICAgICB4X25hbWUgICAgPSBOYW1lIG9mIHgtYXhpcyBkYXRhCiAgICAgICAgICAgeF9zY2FsZSAgID0gUGxvdCB4LWF4aXMgZGF0YSB1c2luZyBhIGxpbmVhciBvciBleHBvbmV0aWFsIHNjYWxlPwogICAgICAgICAgIHhfdW5pdHMgICA9IHgtYXhpcyBkYXRhIHVuaXRzCiAgICAgICAgICAgYWx0X3VuaXRzID0geS1heGlzIGFsdGl0dWRlIHVuaXRzIChtIG9yIGttKQogICAgICAgICAgIHpfbmFtZSAgICA9IE5hbWUgb2Ygei1heGlzIGRhdGEgKGRlZmF1bHQ9IiIpCiAgICAgICAgICAgel9zY2FsZSAgID0gUGxvdCB6LWF4aXMgZGF0YSB1c2luZyBhIGxpbmVhciBvciBleHBvbmV0aWFsIHNjYWxlPwogICAgICAg"}}]
["a735eabd2ca17411953d0adb6ea86db2d5b89a62-1","a735eabd2ca17411953d0adb6ea86db2d5b89a62","PHxmaW1fcHJlZml4fD4KIiIiClBhZ2VQbG90IExpYnJhcnkKClVzZWQgZm9yIG5vLWNvZGUgcGxvdHRpbmcuCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIiIiCjx8ZmltX2VuZHw+"]
["599afa7a832e72811c770a710bfa7c4dbbb81ac1-1","599afa7a832e72811c770a710bfa7c4dbbb81ac1","PHxmaW1fcHJlZml4fD4KIyBTUEVDIGNvbGxhYm9yYXRpdmUKIwojIEdyYWhhbSBTY2hlZHVsZXIgY29kZSBiYXNlZCBvbiBNRVNBCiMKIyAyMDIxCgpmcm9tIG1lc2EudGltZSBpbXBvcnQgQmFzZVNjaGVkdWxlcgpmcm9tIG1lc2EubW9kZWwgaW1wb3J0IE1vZGVsCjx8ZmltX2hvbGV8PgogICAgcG9ja2V0cyBvZiBhZ2VudHMuIEFnZW50cyBoYXZlICdlYXJtYXJrcycsIGlkZW50aWZpZXJzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBsb2NhbAogICAgb3JkZXJpbmcgb2YgZXZlbnRzIHdpdGhpbiBvbmUgc2luZ2xlIHRpbWVzdGVwLgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsOiBNb2RlbCwgcGFydGl0aW9uczogaW50KToKICAgICAgICAiIiJDcmVhdGUgYW4gZW1wdHkgU3RhZ2VkIEFjdGl2YXRpb24gc2NoZWR1bGUuCiAgICAgICAgQXJnczoKICAgICAgICAgICAgbW9kZWw6IE1vZGVsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIHNjaGVkdWxlLgogICAgICAgICAgICBwYXJ0aXRpb25zOiBudW1iZXIgb2YgcGFydGl0aW9ucyBpbmRpY2F0aW5nIGhvdyBhZ2VudHMgCiAgICAgICAgICAgIGNhbiBiZSBkaXZpZGVkIGludG8gb3JkZXJlZCBjbGFzc2VzLgogICAgICAgICIiIgogICAgICAgIHN1cGVyKCkuX19pbml0X18obW9kZWwpCiAgICAgICAgc2VsZi5zdGFnZXMgPSB7fQogICAgICAgIHNlbGYucGFydGl0aW9ucyA9IHBhcnRpdGlvbnMKCgogICAgZGVmIHN0ZXAoc2VsZikgLT4gTm9uZToKICAgICAgICAiIiJFeGVjdXRlcyB0aGUgc3RlcCBvZiBhbGwgYWdlbnRzIGFjY29yZGluZyB0byB0aGVpciBlYXJtYXJrcywgcmFuZG9tbHkKICAgICAgICBmb3IgZWFjaCBlYXJtYXJrLgogICAgICAgICIiIgoKICAgICAgICBmb3IgcCBpbiByYW5nZSgwLCBzZWxmLnBhcnRpdGlvbnMpOgogICAgICAgICAgICBzZWxmLnN0YWdlc1twXSA9IFtdCgogICAgICAgIGZvciBhZ2VudCBpbiBzZWxmLl9hZ2VudHMudmFsdWVzKCk6IAogICAgICAgICAgICBzZWxmLnN0YWdlc1thZ2VudC5lYXJtYXJrXS5hcHBlbmQoYWdlbnQudW5pcXVlX2lkKQogICAgICAgICAgIAogICAgICAgIGZvciBlYXJtYXJrIGluIHNlbGYuc3RhZ2VzLmtleXMoKToKICAgICAgICAgICAgc2VsZi5tb2RlbC5yYW5kb20uc2h1ZmZsZShzZWxmLnN0YWdlc1tlYXJtYXJrXSkKCiAgICAgICAgICAgIGZvciB1bmlxdWVfaWQgaW4gc2VsZi5zdGFnZXNbZWFybWFya106CiAgICAgICAgICAgICAgICBzZWxmLl9hZ2VudHNbdW5pcXVlX2lkXS5zdGVwKCkKCiAgICAgICAgc2VsZi5zdGVwcyArPSAxCiAgICAgICAgc2VsZi50aW1lICs9IDEKPHxmaW1fc3VmZml4fD4KCgpjbGFzcyBHcmFoYW1BY3RpdmF0aW9uKEJhc2VTY2hlZHVsZXIpOgogICAgIiIiQSBzY2hlZHVsZXIgZGV2aXNlZCBieSBKZWZmIEdyYWhhbSB0aGUgc2ltdWxhdGVzIGNvbmN1cnJlbnQsIHJhbmRvbSBhY3RpdmF0aW9uIG9mIAo8fGZpbV9lbmR8Pg=="]
["59026497ed141b2a1428c5dd340f99d2e20013dc-4","59026497ed141b2a1428c5dd340f99d2e20013dc","PHxmaW1fcHJlZml4fD4KY2xhc3MgU2V0dGluZ3M6CgogICAgQVVESU9fRk9STUFUUyA9IHsKICAgICAgICAiMCI6IHsKICAgICAgICAgICAgIm1pbWVfdHlwZSI6ICJhdWRpby9vZ2c7IGNvZGVjcz1cIm9wdXNcIiIsCiAgICAgICAgICAgICJwcm90b2NvbCI6ICJobHMiLAogICAgICAgIH0sCiAgICAgICAgIjEiOiB7CiAgICAgICAgICAgICJtaW1lX3R5cGUiOiAiYXVkaW8vbXBlZyIsCiAgICAgICAgICAgICJwcm90b2NvbCI6ICJobHMiLAogICAgICAgIH0sCiAgICAgICAgIjIiOiB7CiAgICAgICAgICAgICJtaW1lX3R5cGUiOiAiYXVkaW8vbXBlZyIsCiAgICAgICAgICAgICJwcm90b2NvbCI6ICJwcm9ncmVzc2l2ZSIsCiAgICAgICAgfQogICAgfQoKICAgIEFQSVYyX0xPQ0FMRSA9IHsKICAgICAgICAiYXV0byI6ICIwIiwKICAgICAgICAiZGlzYWJsZWQiOiAiMSIKICAgIH0KCiAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkb24pOgogICAgICAgIHNlbGYuYWRkb24gPSBhZGRvbgoKICAgIGRlZiBnZXQoc2VsZiwgaWQpOgogICAgICAgIHJldHVybiBzZWxmLmFkZG9uLmdldFNldHRpbmcoaWQpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBkZWYgc2V0KHNlbGYsIGlkLCB2YWx1ZSk6CiAgICAgICAgcmV0dXJuIHNlbGYuYWRkb24uc2V0U2V0dGluZyhpZCwgdmFsdWUpCjx8ZmltX2VuZHw+"]
["3cabc51fdf4498758052f90ab2e7168e66f89170-2","3cabc51fdf4498758052f90ab2e7168e66f89170","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCiMjIEJyaW5ncyBldmVyeXRoaW5nIHRvZ2V0aGVyCgppbXBvcnQgbG9nX3RlbXBlcmF0dXJlCmltcG9ydCB2ZXJpZnlfZW1haWxfYWRkcmVzcwppbXBvcnQgc2VuZF9lbWFpbHNfd2l0aF9pbmkKaW1wb3J0IHNlbmRfc21zX3dpdGhfaW5pCgpmcm9tIGFwc2NoZWR1bGVyLnNjaGVkdWxlcnMuYmxvY2tpbmcgaW1wb3J0IEJsb2NraW5nU2NoZWR1bGVyCmltcG9ydCB0aW1lCgpkZWYga2VlcF9sYXRlc3RfMl90ZW1wcygpOgogICAgJycnS2VlcHMgdGhlIGxhc3QgMiB0ZW1wZXJhdHVyZXMsIHRvIHByZXZlbnQgZmFsc2UgcG9zaXRpdmUgZW1haWxzLiBXaWxsIG9ubHkgc2VuZCBlbWFpbCB3aGVuIGJvdGggYXJlIGFib3ZlIGEgdGhyZXNob2xkCiAgICAnJycKICAgIGlmIGxlbihsYXRlc3RfMl90ZW1wcykgPT0gMjoKICAgICAgICBsYXRlc3RfMl90ZW1wcy5wb3AoMCkKICAgICAgICBsYXRlc3RfMl90ZW1wcy5hcHBlbmQobG9nX3RlbXBlcmF0dXJlLnJlYWRfdGVtcCgpKQogICAgZWxzZToKICAgICAgICBsYXRlc3RfMl90ZW1wcy5hcHBlbmQobG9nX3RlbXBlcmF0dXJlLnJlYWRfdGVtcCgpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgcmV0dXJuKGxhdGVzdF8yX3RlbXBzKQoKCjx8ZmltX2VuZHw+"]
["59dc2cc5da092a44c643644cd0db9eb01625d341-1","59dc2cc5da092a44c643644cd0db9eb01625d341","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc6IFVURi04CiMKPHxmaW1faG9sZXw+CiMgUHVibGlzaGVkIHdpdGggQ0MwIGxpY2Vuc2UKIwoKIyBNb2R1bGVzIGltcG9ydGluZwppbXBvcnQgZGlzY29yZAoKCiMgTWVzc2FnZXMgZGVmaW5pdGlvbnMKSEVMUF9NRVNfU0NNRCA9IFwKIiIiYGggICAgICAgICAgICwgaGVscCAgICAgICAgICAgYCBQcmludCB0aGlzIGhlbHAKYGMgW3ZvbF0gICAgICwgY29ubmVjdCBbdm9sXSAgYCBDb25uZWN0IGFuZCBzdGFydCBtdXNpYyBwbGF5aW5nCmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAgKHdpdGggc2V0dGluZyB2b2x1bWUgdG8gW3ZvbF0pCmBwIFt2b2xdICAgICAsIHBsYXkgW3ZvbF0gICAgIGAgLSAoc2FtZSBhcyBgY2ApCmBkYyAgICAgICAgICAsIGRpc2Nvbm5lY3QgICAgIGAgU3RvcCBtdXNpYyBwbGF5aW5nIGFuZCBkaXNjb25uZWN0CmBzdCAgICAgICAgICAsIHN0b3AgICAgICAgICAgIGAgLSAoc2FtZSBhcyBgZGNgKQpgc2sgICAgICAgICAgLCBza2lwICAgICAgICAgICBgIFNraXAgYW5kIHBsYXkgbmV4dCBtdXNpYwpgdiBbdm9sXSAgICAgLCB2b2x1bWUgW3ZvbF0gICBgIFByaW50IGN1cnJlbnQgdm9sdW1lIG9yIHNldCB2b2x1bWUgdG8gW3ZvbF0KYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCAoYWNjZXB0IGZyb20gbmV4dCBtdXNpYykKYGkgICAgICAgICAgICwgaW5mbyAgICAgICAgICAgYCBQcmludCBjdXJyZW50IG11c2ljIGluZm9ybWF0aW9uCmBjbCBbc3RdIFtlZF0sIGNsb3NlIFtzdF0gW2VkXWAgUHJpbnQgY3VycmVudCBjbG9zZWQgdGltZSBvciBzZXQgY2xvc2VkIHRpbWUKYHIgW3N0XSBbZWRdICwgcmVzdCBbc3RdIFtlZF0gYCAtIChzYW1lIGFzIGBjbGApIiIiCgpIRUxQX01FU19DTFRNID0gXAoiIiJCZXR3ZWVuIHRoZSB0aW1lIFtzdF0gdG8gW2VkXSwgbXVzaWMgd2lsbCBiZSBwbGF5IG9ubHkgY2xvc2luZyBtdXNpYy4KQXJndW1lbnQgZm9ybWF0IG9mIFtzdF0gW2VkXSBpcyBgSEg6TU1gLgotLSBleGFtcGxlOiBge30gY2wgMTowMCA3OjAwYApUbyBkaXNhYmxlIGNsb3NpbmcgdGltZSwgc3BlY2lmeSBzYW1lIHRpbWUuCi0tIGV4YW1wbGU6IGB7fSBjbCAwOjAwIDA6MDBgIiIiCgoKIyBGdW5jdGlvbiBkZWZpbml0aW9ucwphc3luYyBkZWYgaGVscChtZXNzYWdlOiBkaXNjb3JkLk1lc3NhZ2UsIG5hbWU6IHN0ciwgcHJlZml4OiBzdHIpOgogIG1lcyA9IGRpc2NvcmQuRW1iZWQodGl0bGU9RiI6bm90ZWJvb2s6IEhlbHAgb2Yge25hbWV9IDptdXNpY2FsX25vdGU6IiwgY29sb3I9MHhhM2ZmNjYpCgogIG1lcy5hZGRfZmllbGQobmFtZT0iOmRlc2t0b3A6IFVzZWFnZSIsICAgICAgICAgICAgICAgICAgICAgdmFsdWU9RiJge3ByZWZpeH0gPHN1YiBjb21tYW5kPmAiLCBpbmxpbmU9RmFsc2UpCiAgbWVzLmFkZF9maWVsZChuYW1lPSI6cGFnZV93aXRoX2N1cmw6IExpc3Qgb2Ygc3ViY29tbWFuZHMiLCB2YWx1ZT1IRUxQX01FU19TQ01ELCBpbmxpbmU9RmFsc2UpCiAgbWVzLmFkZF9maWVsZChuYW1lPSI6dTU1YjY6IEFib3V0IGNsb3NlZCB0aW1lIiwgICAgICAgICAgICB2YWx1ZT1IRUxQX01FU19DTFRNLmZvcm1hdChwcmVmaXgsIHByZWZpeCksIGlubGluZT1GYWxzZSkKCiAgbWVzLnNldF9mb290ZXIodGV4dD1uYW1lKQoKICBhd2FpdCBtZXNzYWdlLnJlcGx5KGVtYmVkPW1lcykKICByZXR1cm4KPHxmaW1fc3VmZml4fD4KIyBkY29tbWFuZHMvaGVscC5weQojCiMgQXV0aG9yOiBhS3VhZAojCjx8ZmltX2VuZHw+"]
["af9e5507e52728a8342def9e47a94bebaeae2521-1","af9e5507e52728a8342def9e47a94bebaeae2521","PHxmaW1fcHJlZml4fD4KdGhvID0gWwogICAgIj4gU2FvIGFuaCBraMO0bmcgduG7gSBjaMahaSB0aMO0biBWxKk/XG4+IE5ow6xuIG7huq9uZyBow6BuZyBjYXUgbuG6r25nIG3hu5tpIGzDqm4uXG4+IFbGsOG7nW4gYWkgbcaw4bubdCBxdcOhIHhhbmggbmjGsCBuZ+G7jWNcbj4gTMOhIHRyw7pjIGNoZSBuZ2FuZyBt4bq3dCBjaOG7ryDEkWnhu4FuLiIsCiAgICAiPiBN4buXaSBuxINtIGhvYSDEkcOgbyBu4bufXG4+IEzhuqFpIHRo4bqleSDDtG5nIMSR4buTIGdpw6Bcbj4gQsOgeSBt4buxYyB0w6B1LCBnaeG6pXkgxJHhu49cbj4gQsOqbiBwaOG7kSDEkcO0bmcgbmfGsOG7nWkgcXVhIiwKICAgICI+IFRyxINtIG7Eg20gdHJvbmcgY8O1aSBuZ8aw4budaSB0YSxcbj4gQ2jhu68gdMOgaSBjaOG7ryBt4buHbmgga2jDqW8gbMOgIGdow6l0IG5oYXUuXG4+IFRy4bqjaSBxdWEgbeG7mXQgY3Xhu5ljIGLhu4MgZMOidSxcbj4gTmjhu69uZyDEkWnhu4F1IHRyw7RuZyB0aOG6pXkgbcOgIMSRYXUgxJHhu5tuIGzDsm5nLiIsCiAgICAiPiBN4buZdCBjaMOgbmcgduG7q2EgdHLhuqFjIHRoYW5oIHh1w6JuLFxuPiBIw6xuaCBkb25nIGNo4bqjaSBjaHXhu5F0LCDDoW8ga2jEg24gZOG7i3UgZMOgbmcuXG4+IE5naMSpIHLhurFuZyBjxaluZyBt4bqhY2ggdGjGsCBoxrDGoW5nLFxuPiBI4buPaSByYSBt4bubaSBiaeG6v3QgcuG6sW5nIGNow6BuZyBT4bufIEtoYW5oLlxuPiBCw7NuZyBOZ2EgdGjhuqVwIHRob8OhbmcgZMaw4bubaSBtw6BuaCxcbj4gVHLDtG5nIG7DoG5nLCBjaMOgbmcgY8WpbmcgcmEgdMOsbmggxJFlbyDEkWFpLiIsCiAgICAiPiBTw7NuZyBn4bujbiB0csOgbmcgZ2lhbmcgYnXhu5NuIMSRaeG7h3AgxJFp4buHcCxcbj4gQ29uIHRodXnhu4FuIHh1w7RpIG3DoWkgbsaw4bubYyBzb25nIHNvbmcuXG4+IFRodXnhu4FuIHbhu4Egbsaw4bubYyBs4bqhaSwgc+G6p3UgdHLEg20gbmfhuqM7XG4+IEPhu6dpIG3hu5l0IGPDoG5oIGtow7QgbOG6oWMgbeG6pXkgZMOybmciLAogICAgIj4gR+G6rW0gbeG7mXQga2jhu5FpIGPEg20gaOG7nW4gdHJvbmcgY8WpaSBz4bqvdCxcbj4gVGEgbuG6sW0gZMOgaSwgdHLDtG5nIG5nw6B5IHRow6FuZyBk4bqnbiBxdWEuXG4+IEtoaW5oIGzFqSBuZ8aw4budaSBraWEgbmfhuqFvIG3huqFuLCBuZ+G6qW4gbmfGoSxcbj4gR2nGsMahbmcgbeG6r3QgYsOpIGRp4buFdSBvYWkgbGluaCBy4burbmcgdGjhurNtIiwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgIj4gQ8OzIGJp4bq/dCBjaMSDbmcgdHJvbmcgbmjhu69uZyBuZ8OgeSBuZ2FvIG5nw6FuLFxuPiBUYSDEkcawxqFuZyB0aGVvIGdp4bqlYyBt4buZbmcgbmfDoG4gdG8gbOG7m25cbj4gxJDhu4MgaOG7k24gdGEgcGjhuqNuZyBwaOG6pXQgxJHGsOG7o2MgZ+G6p24gbmfGsMahaSxcbj4gSOG7oWkgY+G6o25oIHLhu6tuZyBnaMOqIGfhu5ttIGPhu6dhIHRhIMahaSEiLAogICAgIj4gQ8OgbmggYsOgbmcgdGjhuqMgbMOhIGhlbyBtYXlcbj4gTeG6uSBn4bqneSwgY8OhaSBkw6FuZyBraMO0IGfhuqd5IGPDoG5oIHRyZVxuPiBHw7N0IGNoYWkgbuG7qXQgbuG6uyDEkcO0bmcgaMOoXG4+IFJ14buZbmcgc8OidSBi4bqlbSBtw6NpIMSRw6MgdMOyZSBuZ8OzbiBjaMOibiIsCiAgICAiPiBMw6puIGLhu5FuIHR14buVaSBjaMOhdSDEkcOjIHF1ZW4gbcO5aSBraMOzaVxuPiBOxINtIOG6pXkgbMOgIG7Eg20gxJHDs2kgbcOybiDEkcOzaSBt4buPaSxcbj4gQuG7kSDEkWkgxJHDoW5oIHhlLCBraMO0IHLhuqFjIG5n4buxYSBn4bqneSxcbj4gQ2jhu4kgbmjhu5sga2jDs2kgaHVuIG5ow6htIG3huq90IGNow6F1XG4+IE5naMSpIGzhuqFpIMSR4bq/biBnaeG7nSBz4buRbmcgbcWpaSBjw7JuIGNheSEiLAogICAgIj4gU8O0bmcgbsO6aSB2xrDGoW4gZMOgaSB0aeG6v3AgbsO6aSBzw7RuZ1xuPiBDw7IgYmF5IHRo4bqzbmcgY8OhbmggbuG7kWkgxJHhu5NuZyBraMO0bmdcbj4gQ8OzIG5nxrDhu51pIGLhuqNvIEh14bq/IHhhLCB4YSBs4bqvbVxuPiBOaMawbmcgSHXhur8gcXXDqiB0w7RpIOG7nyBnaeG7r2EgbMOybmciLAo8fGZpbV9lbmR8Pg=="]
["3c12bc756f2d5dd646b6bb161923874d2c6f52e9-3","3c12bc756f2d5dd646b6bb161923874d2c6f52e9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgb3MKCnN5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmFic3BhdGgoIi4iKSkKc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBUcnVlCgpfX2F1dGhvcl9fID0gImJpZ2ZhdG5vb2IiCgpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAppbXBvcnQgcGFuZGFzIGFzIHBkCgpmcm9tIG1pc2NvbmNlcHRpb25zLmNvbW1vbiBpbXBvcnQgbW9uZ29fZHJpdmVyLCBwcm9wcywgc3ludGFjdGljCmZyb20gdXRpbHMgaW1wb3J0IGxvZ2dlciwgY2FjaGUKCgpMT0dHRVIgPSBsb2dnZXIuZ2V0X2xvZ2dlcihvcy5wYXRoLmJhc2VuYW1lKF9fZmlsZV9fLnNwbGl0KCIuIilbMF0pKQoKCmRlZiBleHBvcnRfc2ltaWxhcl9kaWZmZXJlbmNlcyhzaW0sIHN5biwgeGxfd3JpdGVyLCBzaGVldF9uYW1lLCBzeW5fa2V5KToKICBMT0dHRVIuaW5mbygiUnVubmluZyBmb3IgJXMgLi4uICIgJSBzaGVldF9uYW1lKQogIHF1ZXJ5ID0geyJuX2JvdGhfZW1wdHkiOiB7IiRlcSI6IDB9fQogIGlmIHNpbSA+IDA6CiAgICBxdWVyeVsic2VtYW50aWNfc2NvcmUiXSA9IHsiJGd0ZSI6IGFicyhzaW0pfQogIGVsaWYgc2ltIDwgMDoKICAgIHF1ZXJ5WyJzZW1hbnRpY19zY29yZSJdID0geyIkbHRlIjogYWJzKHNpbSl9CiAgaWYgc3luID4gMDoKICAgIHF1ZXJ5W3N5bl9rZXldID0geyIkZ3RlIjogYWJzKHN5bil9CiAgZWxpZiBzeW4gPCAwOgogICAgcXVlcnlbc3luX2tleV0gPSB7IiRsdGUiOiBhYnMoc3luKX0KICBwcm9qZWN0aW9ucyA9IHsicHlfaWQiOiAxLAogICAgICAgICAgICAgICAgICJyX2lkIjogMSwKICAgICAgICAgICAgICAgICAicl9zbmlwcGV0IjogMSwKICAgICAgICAgICAgICAgICAicl9yZXR1cm4iOiAxLAogICAgICAgICAgICAgICAgICJweV9yZXR1cm4iOiAxLAogICAgICAgICAgICAgICAgICJweV9zbmlwcGV0IjogMSwKICAgICAgICAgICAgICAgICAiX2lkIjogMCwKICAgICAgICAgICAgICAgICAicm93X2RpZmYiOiAxLAogICAgICAgICAgICAgICAgICJjb2xfZGlmZiI6IDEsCiAgICAgICAgICAgICAgICAgImRfbl9ncmFtIjogMSwKICAgICAgICAgICAgICAgICAiZF9hc3QiOiAxLAogICAgICAgICAgICAgICAgICJkX2xldmVuc2h0ZWluIjogMSwKICAgICAgICAgICAgICAgICAic2l6ZV9kaWZmIjogMSwKICAgICAgICAgICAgICAgICAic2VtYW50aWNfc2NvcmUiOiAxfQogIHN0b3JlID0gbW9uZ29fZHJpdmVyLk1vbmdvU3RvcmUocHJvcHMuREFUQVNFVCkKICBkaWZmcyA9IFtkIGZvciBkIGluIHN0b3JlLmxvYWRfZGlmZmVyZW5jZXMoYWRkaXRpb25hbF9xdWVyaWVzPXF1ZXJ5LCBwcm9qZWN0aW9uPXByb2plY3Rpb25zKV0KICByX3N0bXRzID0gW10KICBweV9zdG10cyA9IFtdCiAgbl9ncmFtcyA9IFtdCiAgbGV2ZW5zaHRlaW5zID0gW10KICBhc3RzID0gW10KICBzZW1hbnRpY3MgPSBbXQogIHJvd19kaWZmcyA9IFtdCiAgY29sX2RpZmZzID0gW10KICBzaXplX2RpZmZzID0gW10KICBmb3IgZGlmZiBpbiBkaWZmczoKICAgICMgaWYgZGlmZlsicl9yZXR1cm4iXSA9PSBwcm9wcy5BVVRPX1JFVFVSTjoKICAgICMgICByX3N0bXRzLmFwcGVuZChkaWZmWyJyX3NuaXBwZXQiXSkKICAgICMgZWxzZToKICAgICMgICByX3N0bXRzLmFwcGVuZCgiJXM7ICVzIiAlIChkaWZmWyJyX3NuaXBwZXQiXSwgZGlmZlsicl9yZXR1cm4iXSkpCiAgICAjIGlmIGRpZmZbInB5X3JldHVybiJdID09IHByb3BzLkFVVE9fUkVUVVJOOgogICAgIyAgIHB5X3N0bXRzLmFwcGVuZChkaWZmWyJweV9zbmlwcGV0Il0pCiAgICAjIGVsaWYgZGlmZlsicHlfcmV0dXJuIl0gPT0gcHJvcHMuU0VMRjoKICAgICMgICBweV9zdG10cy5hcHBlbmQoInJldHVybiAlcyIgJSBkaWZmWyJweV9zbmlwcGV0Il0pCiAgICAjIGVsc2U6CiAgICAjICAgcHlfc3RtdHMuYXBwZW5kKCIlczsgcmV0dXJuICVzIiAlIChkaWZmWyJweV9zbmlwcGV0Il0sIGRpZmZbInB5X3JldHVybiJdKSkKICAgIHJfc3RtdCA9IHN5bnRhY3RpYy5yX25vcm1hbGl6ZShzdG9yZS5sb2FkX3N0bXQoZGlmZlsicl9pZCJdLCB1c2Vfbm9ybWFsaXplZD1UcnVlKSkucmVwbGFjZShzeW50YWN0aWMuUkVOQU1FRF9WQVJJQUJMRSwgImRmIikKICAgIHB5X3N0bXQgPSBzeW50YWN0aWMucHlfbm9ybWFsaXplKHN0b3JlLmxvYWRfc3RtdChkaWZmWyJweV9pZCJdLCB1c2Vfbm9ybWFsaXplZD1UcnVlKSkucmVwbGFjZShzeW50YWN0aWMuUkVOQU1FRF9WQVJJQUJMRSwgImRmIikKICAgIHJfc3RtdHMuYXBwZW5kKHJfc3RtdCkKICAgIHB5X3N0bXRzLmFwcGVuZChweV9zdG10KQogICAgbl9ncmFtcy5hcHBlbmQoZGlmZi5nZXQoImRfbl9ncmFtIiwgTm9uZSkpCiAgICBsZXZlbnNodGVpbnMuYXBwZW5kKGRpZmYuZ2V0KCJkX2xldmVuc2h0ZWluIiwgTm9uZSkpCiAgICBhc3RzLmFwcGVuZChkaWZmLmdldCgiZF9hc3QiLCBOb25lKSkKICAgIHNlbWFudGljcy5hcHBlbmQoZGlmZi5nZXQoInNlbWFudGljX3Njb3JlIiwgTm9uZSkpCiAgICByb3dfZGlmZnMuYXBwZW5kKGRpZmYuZ2V0KCJyb3dfZGlmZiIsIE5vbmUpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBjb2xfZGlmZnMuYXBwZW5kKGRpZmYuZ2V0KCJjb2xfZGlmZiIsIE5vbmUpKQogICAgc2l6ZV9kaWZmcy5hcHBlbmQoZGlmZi5nZXQoInNpemVfZGlmZiIsIE5vbmUpKQo8fGZpbV9lbmR8Pg=="]
["b1bb13c3cfb219ea7bb804a06ec3730a10125b4c-3","b1bb13c3cfb219ea7bb804a06ec3730a10125b4c","PHxmaW1fcHJlZml4fD4KIyBUaGlzIGNvZGUgaXMgcGFydCBvZiBPcGVuRkUgYW5kIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KIyBGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuRnJlZUVuZXJneS9ndWZlCgpmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwsIEl0ZXJhYmxlCgpmcm9tIG9wZW5mZi50b29sa2l0LnV0aWxzLnNlcmlhbGl6YXRpb24gaW1wb3J0IFNlcmlhbGl6YWJsZQoKZnJvbSAuLmNoZW1pY2Fsc3lzdGVtIGltcG9ydCBDaGVtaWNhbFN5c3RlbQpmcm9tIC4ucHJvdG9jb2xzIGltcG9ydCBQcm90b2NvbCwgUHJvdG9jb2xEQUcsIFByb3RvY29sUmVzdWx0LCBQcm90b2NvbERBR1Jlc3VsdApmcm9tIC4ubWFwcGluZyBpbXBvcnQgTWFwcGluZwoKCmNsYXNzIFRyYW5zZm9ybWF0aW9uKFNlcmlhbGl6YWJsZSk6CiAgICAiIiJBbiBlZGdlIG9mIGFuIGFsY2hlbWljYWwgbmV0d29yay4KCiAgICBDb25uZWN0cyB0d28gYENoZW1pY2FsU3lzdGVtYHMsIHdpdGggZGlyZWN0aW9uYWxpdHkuCgogICAgQXR0cmlidXRlcwogICAgLS0tLS0tLS0tLQogICAgc3RhdGVBIDogQ2hlbWljYWxTeXN0ZW0KICAgICAgICBUaGUgc3RhcnRpbmcgYENoZW1pY2FsU3lzdGVtYCBmb3IgdGhlIHRyYW5zZm9ybWF0aW9uLgogICAgc3RhdGVCIDogQ2hlbWljYWxTeXN0ZW0KICAgICAgICBUaGUgZW5kaW5nIGBDaGVtaWNhbFN5c3RlbWAgZm9yIHRoZSB0cmFuc2Zvcm1hdGlvbi4KICAgIHByb3RvY29sIDogUHJvdG9jb2wKICAgICAgICBUaGUgcHJvdG9jb2wgdXNlZCB0byBwZXJmb3JtIHRoZSB0cmFuc2Zvcm1hdGlvbi4KICAgICAgICBJbmNsdWRlcyBhbGwgZGV0YWlscyBuZWVkZWQgdG8gcGVyZm9ybSByZXF1aXJlZAogICAgICAgIHNpbXVsYXRpb25zL2NhbGN1bGF0aW9ucyBhbmQgZW5jb2RlcyB0aGUgYWxjaGVtaWNhbCBwYXRod2F5IHVzZWQuCiAgICAgICAgTWF5IGFsc28gY29ycmVzcG9uZCB0byBhbiBleHBlcmltZW50YWwgcmVzdWx0LgogICAgbWFwcGluZyA6IE9wdGlvbmFsW01hcHBpbmddCiAgICAgICAgTWFwcGluZyBvZiBlLmcuIGF0b21zIGJldHdlZW4gdGhlIGBzdGF0ZUFgIGFuZCBgc3RhdGVCYAogICAgICAgIGBDaGVtaWNhbFN5c3RlbWBzLgogICAgbmFtZSA6IE9wdGlvbmFsW3N0cl0KICAgICAgICBPcHRpb25hbCBpZGVudGlmaWVyIGZvciB0aGUgdHJhbnNmb3JtYXRpb247IHNldCB0aGlzIHRvIGEgdW5pcXVlIHZhbHVlCiAgICAgICAgaWYgYWRkaW5nIG11bHRpcGxlLCBvdGhlcndpc2UgaWRlbnRpY2FsIHRyYW5zZm9ybWF0aW9ucyB0byB0aGUgc2FtZQogICAgICAgIGBBbGNoZW1pY2FsTmV0d29ya2AgdG8gYXZvaWQgZGVkdXBsaWNhdGlvbgoKICAgICIiIgoKICAgIGRlZiBfX2luaXRfXygKICAgICAgICBzZWxmLAogICAgICAgIHN0YXRlQTogQ2hlbWljYWxTeXN0ZW0sCiAgICAgICAgc3RhdGVCOiBDaGVtaWNhbFN5c3RlbSwKICAgICAgICBwcm90b2NvbDogUHJvdG9jb2wsCiAgICAgICAgbWFwcGluZzogT3B0aW9uYWxbTWFwcGluZ10gPSBOb25lLAogICAgICAgIG5hbWU6IE9wdGlvbmFsW3N0cl0gPSBOb25lLAogICAgKToKCiAgICAgICAgc2VsZi5fc3RhdGVBID0gc3RhdGVBCiAgICAgICAgc2VsZi5fc3RhdGVCID0gc3RhdGVCCiAgICAgICAgc2VsZi5fbWFwcGluZyA9IG1hcHBpbmcKICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQoKICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCgogICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgIHJldHVybiBmIntzZWxmLl9fY2xhc3NfXy5fX25hbWVfX30oc3RhdGVBPXtzZWxmLnN0YXRlQX0sICJcCiAgICAgICAgICAgICAgIGYic3RhdGVCPXtzZWxmLnN0YXRlQn0sIHByb3RvY29sPXtzZWxmLnByb3RvY29sfSkiCgogICAgQHByb3BlcnR5CiAgICBkZWYgc3RhdGVBKHNlbGYpOgogICAgICAgICIiIlRoZSBzdGFydGluZyBgQ2hlbWljYWxTeXN0ZW1gIGZvciB0aGUgdHJhbnNmb3JtYXRpb24uIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuX3N0YXRlQQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIHN0YXRlQihzZWxmKToKICAgICAgICAiIiJUaGUgZW5kaW5nIGBDaGVtaWNhbFN5c3RlbWAgZm9yIHRoZSB0cmFuc2Zvcm1hdGlvbi4iIiIKICAgICAgICByZXR1cm4gc2VsZi5fc3RhdGVCCgogICAgQHByb3BlcnR5CiAgICBkZWYgcHJvdG9jb2woc2VsZik6CiAgICAgICAgIiIiVGhlIHByb3RvY29sIGZvciBzYW1wbGluZyB0aGUgdHJhbnNmb3JtYXRpb24gdG8gZGVyaXZlIGZyZWUgZW5lcmd5CiAgICAgICAgZGlmZmVyZW5jZXMgYmV0d2VlbiBgc3RhdGVBYCBhbmQgYHN0YXRlQmAgYENoZW1pY2FsU3lzdGVtYHMuCgogICAgICAgICIiIgogICAgICAgIHJldHVybiBzZWxmLl9wcm90b2NvbAoKICAgIEBwcm9wZXJ0eQogICAgZGVmIG1hcHBpbmcoc2VsZik6CiAgICAgICAgIiIiVGhlIG1hcHBpbmcgYmV0d2VlbiBhdG9tcyBpbiBgc3RhdGVBYCB0byBgc3RhdGVCYCIiIgogICAgICAgIHJldHVybiBzZWxmLl9tYXBwaW5nCgogICAgQHByb3BlcnR5CiAgICBkZWYgbmFtZShzZWxmKToKICAgICAgICAiIiJVc2VyLXNwZWNpZmllZCBmb3IgdGhlIHRyYW5zZm9ybWF0aW9uOyB1c2VkIGFzIHBhcnQgb2YgaXRzIGhhc2guIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKCiAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKICAgICAgICByZXR1cm4gaGFzaChzZWxmKSA8IGhhc2gob3RoZXIpCgogICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIHNlbGYuX19jbGFzc19fKToKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgaWYgc2VsZi5fbmFtZSAhPSBvdGhlci5uYW1lOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICBpZiBzZWxmLl9wcm90b2NvbCAhPSBvdGhlci5wcm90b2NvbDoKPHxmaW1faG9sZXw+CiAgICAgICAgaWYgc2VsZi5fbWFwcGluZyAhPSBvdGhlci5tYXBwaW5nOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICBpZiBzZWxmLl9zdGF0ZUIgIT0gb3RoZXIuc3RhdGVCOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICBpZiBzZWxmLl9zdGF0ZUEgIT0gb3RoZXIuc3RhdGVBOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICAgICAgcmV0dXJuIFRydWUKCiAgICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAgICAgcmV0dXJuIGhhc2goCiAgICAgICAgICAgICgKICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlQSwKICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlQiwKICAgICAgICAgICAgICAgIHNlbGYuX21hcHBpbmcsCiAgICAgICAgICAgICAgICBzZWxmLl9uYW1lLAogICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wsCiAgICAgICAgICAgICkKICAgICAgICApCgogICAgIyBUT0RPOiBicm9rZW4gd2l0aG91dCBhIGBQcm90b2NvbGAgcmVnaXN0cnkgb2Ygc29tZSBraW5kCiAgICAjIHNob3VsZCB0aGVuIGJlIGNoYW5nZWQgdG8gdXNlIHRoZSByZWdpc3RyeQogICAgZGVmIHRvX2RpY3Qoc2VsZikgLT4gZGljdDoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAic3RhdGVBIjogc2VsZi5zdGF0ZUEudG9fZGljdCgpLAogICAgICAgICAgICAic3RhdGVCIjogc2VsZi5zdGF0ZUIudG9fZGljdCgpLAogICAgICAgICAgICAicHJvdG9jb2wiOiBzZWxmLnByb3RvY29sLnRvX2RpY3QoKSwKICAgICAgICAgICAgIm1hcHBpbmciOiBzZWxmLm1hcHBpbmcudG9fZGljdCgpLAogICAgICAgIH0KCiAgICAjIFRPRE86IGJyb2tlbiB3aXRob3V0IGEgYFByb3RvY29sYCByZWdpc3RyeSBvZiBzb21lIGtpbmQKICAgICMgc2hvdWxkIHRoZW4gYmUgY2hhbmdlZCB0byB1c2UgdGhlIHJlZ2lzdHJ5CiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBmcm9tX2RpY3QoY2xzLCBkOiBkaWN0KToKICAgICAgICByZXR1cm4gY2xzKAogICAgICAgICAgICBzdGF0ZUE9Q2hlbWljYWxTeXN0ZW0uZnJvbV9kaWN0KGRbInN0YXRlQSJdKSwKICAgICAgICAgICAgc3RhdGVCPUNoZW1pY2FsU3lzdGVtLmZyb21fZGljdChkWyJzdGF0ZUIiXSksCiAgICAgICAgICAgIHByb3RvY29sPVByb3RvY29sLmZyb21fZGljdChkWyJwcm90b2NvbCJdKSwKICAgICAgICAgICAgbWFwcGluZz1NYXBwaW5nLmZyb21fZGljdChkWyJtYXBwaW5nIl0pLAogICAgICAgICkKCiAgICBkZWYgY3JlYXRlKHNlbGYpIC0+IFByb3RvY29sREFHOgogICAgICAgICIiIlJldHVybnMgYSBgUHJvdG9jb2xEQUdgIGV4ZWN1dGluZyB0aGlzIGBUcmFuc2Zvcm1hdGlvbi5wcm90b2NvbGAuIiIiCiAgICAgICAgcmV0dXJuIHNlbGYucHJvdG9jb2wuY3JlYXRlKAogICAgICAgICAgICBzdGF0ZUE9c2VsZi5zdGF0ZUEsCiAgICAgICAgICAgIHN0YXRlQj1zZWxmLnN0YXRlQiwKICAgICAgICAgICAgbWFwcGluZz1zZWxmLm1hcHBpbmcsCiAgICAgICAgICAgIG5hbWU9c3RyKHNlbGYuX19oYXNoX18oKSksCiAgICAgICAgKQoKICAgIGRlZiBnYXRoZXIoCiAgICAgICAgc2VsZiwgcHJvdG9jb2xfZGFnX3Jlc3VsdHM6IEl0ZXJhYmxlW1Byb3RvY29sREFHUmVzdWx0XQogICAgKSAtPiBQcm90b2NvbFJlc3VsdDoKICAgICAgICAiIiJHYXRoZXIgbXVsdGlwbGUgYFByb3RvY29sREFHUmVzdWx0YHMgaW50byBhIHNpbmdsZSBgUHJvdG9jb2xSZXN1bHRgLgoKICAgICAgICBQYXJhbWV0ZXJzCiAgICAgICAgLS0tLS0tLS0tLQogICAgICAgIHByb3RvY29sX2RhZ19yZXN1bHRzIDogSXRlcmFibGVbUHJvdG9jb2xEQUdSZXN1bHRdCiAgICAgICAgICAgIFRoZSBgUHJvdG9jb2xEQUdSZXN1bHRgcyB0byBhc3NlbWJsZSBhZ2dyZWdhdGUgcXVhbnRpdGllcyBmcm9tLgoKICAgICAgICBSZXR1cm5zCiAgICAgICAgLS0tLS0tLQogICAgICAgIFByb3RvY29sUmVzdWx0CiAgICAgICAgICAgIEFnZ3JlZ2F0ZWQgcmVzdWx0cyBmcm9tIG1hbnkgYFByb3RvY29sREFHUmVzdWx0YHMgZnJvbSBhIGdpdmVuIGBQcm90b2NvbGAuCgogICAgICAgICIiIgogICAgICAgIHJldHVybiBzZWxmLnByb3RvY29sLmdhdGhlcihwcm90b2NvbF9kYWdfcmVzdWx0cz1wcm90b2NvbF9kYWdfcmVzdWx0cykKCgojIHdlIHN1YmNsYXNzIGBUcmFuc2Zvcm1hdGlvbmAgaGVyZSBmb3IgdHlwaW5nIHNpbXBsaWNpdHkKY2xhc3MgTm9uVHJhbnNmb3JtYXRpb24oVHJhbnNmb3JtYXRpb24pOgogICAgIiIiQSBub24tYWxjaGVtaWNhbCBlZGdlIG9mIGFuIGFsY2hlbWljYWwgbmV0d29yay4KCiAgICBBICJ0cmFuc2Zvcm1hdGlvbiIgdGhhdCBwZXJmb3JtcyBubyB0cmFuc2Zvcm1hdGlvbiBhdCBhbGwuCiAgICBUZWNobmljYWxseSBhIHNlbGYtbG9vcCwgb3IgYW4gZWRnZSB3aXRoIHRoZSBzYW1lIGBDaGVtaWNhbFN5c3RlbWAgYXQKICAgIGVpdGhlciBlbmQuCgogICAgRnVuY3Rpb25hbGx5IHVzZWQgZm9yIGFwcGx5aW5nIGEgZHluYW1pY3MgcHJvdG9jb2wgdG8gYSBgQ2hlbWljYWxTeXN0ZW1gCiAgICB0aGF0IHBlcmZvcm1zIG5vIGFsY2hlbWljYWwgdHJhbnNmb3JtYXRpb24gYXQgYWxsLiBUaGlzIGFsbG93cyBlLmcuCiAgICBlcXVpbGlicml1bSBNRCB0byBiZSBwZXJmb3JtZWQgb24gYSBgQ2hlbWljYWxTeXN0ZW1gIGFzIGRlc2lyZWQgYWxvbmdzaWRlCiAgICBhbGNoZW1pY2FsIHByb3RvY29scyBiZXR3ZWVuIGl0IGFuZCBhbmQgb3RoZXIgYENoZW1pY2FsU3lzdGVtYHMuCgogICAgQXR0cmlidXRlcwogICAgLS0tLS0tLS0tLQogICAgc3lzdGVtIDogQ2hlbWljYWxTeXN0ZW0KICAgIHByb3RvY29sIDogUHJvdG9jb2wKICAgICAgICBUaGUgcHJvdG9jb2wgdXNlZCB0byBwZXJmb3JtIHRoZSBkeW5hbWljcy4gSW5jbHVkZXMgYWxsIGRldGFpbHMgbmVlZGVkCiAgICAgICAgdG8gcGVyZm9ybSByZXF1aXJlZCBzaW11bGF0aW9ucy9jYWxjdWxhdGlvbnMuCiAgICBuYW1lIDogT3B0aW9uYWxbc3RyXQogICAgICAgIE9wdGlvbmFsIGlkZW50aWZpZXIgZm9yIHRoZSBub250cmFuc2Zvcm1hdGlvbjsgc2V0IHRoaXMgdG8gYSB1bmlxdWUKICAgICAgICB2YWx1ZSBpZiBhZGRpbmcgbXVsdGlwbGUsIG90aGVyd2lzZSBpZGVudGljYWwgdHJhbnNmb3JtYXRpb25zIHRvIHRoZQogICAgICAgIHNhbWUgYEFsY2hlbWljYWxOZXR3b3JrYCB0byBhdm9pZCBkZWR1cGxpY2F0aW9uCgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKAogICAgICAgIHNlbGYsCiAgICAgICAgc3lzdGVtOiBDaGVtaWNhbFN5c3RlbSwKICAgICAgICBwcm90b2NvbDogUHJvdG9jb2wsCiAgICAgICAgbmFtZTogT3B0aW9uYWxbc3RyXSA9IE5vbmUsCiAgICApOgoKICAgICAgICBzZWxmLl9zeXN0ZW0gPSBzeXN0ZW0KICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQogICAgICAgIHNlbGYuX3Byb3RvY29sID0gcHJvdG9jb2wKCiAgICBAcHJvcGVydHkKICAgIGRlZiBzdGF0ZUEoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX3N5c3RlbQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIHN0YXRlQihzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5fc3lzdGVtCgogICAgQHByb3BlcnR5CiAgICBkZWYgc3lzdGVtKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl9zeXN0ZW0KCiAgICBAcHJvcGVydHkKICAgIGRlZiBwcm90b2NvbChzZWxmKToKICAgICAgICAiIiJUaGUgcHJvdG9jb2wgZm9yIHNhbXBsaW5nIGR5bmFtaWNzIG9mIHRoZSBgQ2hlbWljYWxTeXN0ZW1gLiIiIgogICAgICAgIHJldHVybiBzZWxmLl9wcm90b2NvbAoKICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBzZWxmLl9fY2xhc3NfXyk6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgIGlmIHNlbGYuX25hbWUgIT0gb3RoZXIubmFtZToKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgaWYgc2VsZi5fcHJvdG9jb2wgIT0gb3RoZXIucHJvdG9jb2w6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgIGlmIHNlbGYuX3N5c3RlbSAhPSBvdGhlci5zeXN0ZW06CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICAgICByZXR1cm4gaGFzaCgKICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgc2VsZi5fbmFtZSwKICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLAogICAgICAgICAgICAgICAgc2VsZi5fc3lzdGVtLAogICAgICAgICAgICApCiAgICAgICAgKQoKICAgICMgVE9ETzogYnJva2VuIHdpdGhvdXQgYSBgUHJvdG9jb2xgIHJlZ2lzdHJ5IG9mIHNvbWUga2luZAogICAgIyBzaG91bGQgdGhlbiBiZSBjaGFuZ2VkIHRvIHVzZSB0aGUgcmVnaXN0cnkKICAgIGRlZiB0b19kaWN0KHNlbGYpIC0+IGRpY3Q6CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgInN5c3RlbSI6IHNlbGYuc3lzdGVtLnRvX2RpY3QoKSwKICAgICAgICAgICAgInByb3RvY29sIjogc2VsZi5wcm90b2NvbC50b19kaWN0KCksCiAgICAgICAgfQoKICAgICMgVE9ETzogYnJva2VuIHdpdGhvdXQgYSBgUHJvdG9jb2xgIHJlZ2lzdHJ5IG9mIHNvbWUga2luZAogICAgIyBzaG91bGQgdGhlbiBiZSBjaGFuZ2VkIHRvIHVzZSB0aGUgcmVnaXN0cnkKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGZyb21fZGljdChjbHMsIGQ6IGRpY3QpOgogICAgICAgIHJldHVybiBjbHMoCiAgICAgICAgICAgIHN5c3RlbT1DaGVtaWNhbFN5c3RlbS5mcm9tX2RpY3QoZFsic3lzdGVtIl0pLAogICAgICAgICAgICBwcm90b2NvbD1Qcm90b2NvbC5mcm9tX2RpY3QoZFsicHJvdG9jb2wiXSksCiAgICAgICAgKQoKICAgIGRlZiBjcmVhdGUoc2VsZikgLT4gUHJvdG9jb2xEQUc6CiAgICAgICAgIiIiUmV0dXJucyBhIGBQcm90b2NvbERBR2AgZXhlY3V0aW5nIHRoaXMgYFRyYW5zZm9ybWF0aW9uLnByb3RvY29sYC4iIiIKICAgICAgICByZXR1cm4gc2VsZi5wcm90b2NvbC5jcmVhdGUoCiAgICAgICAgICAgIHN0YXRlQT1zZWxmLnN5c3RlbSwgc3RhdGVCPXNlbGYuc3lzdGVtLCBuYW1lPXN0cihzZWxmLl9faGFzaF9fKCkpCiAgICAgICAgKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICByZXR1cm4gRmFsc2UKPHxmaW1fZW5kfD4="]
["ab8b59ead5f7ee7f83fe7c21f9f8e7a33cab54e9-5","ab8b59ead5f7ee7f83fe7c21f9f8e7a33cab54e9","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbiwgYWJzb2x1dGVfaW1wb3J0CmltcG9ydCBvcwpmcm9tIFBJTCBpbXBvcnQgSW1hZ2UKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCByYW5kb20KaW1wb3J0IHRvcmNoCmZyb20gdG9yY2gudXRpbHMuZGF0YSBpbXBvcnQgRGF0YXNldAppbXBvcnQgcmFuZG9tCgoKZGVmIHJlYWRfaW1hZ2UoaW1nX3BhdGgpOgogICAgIiIiS2VlcCByZWFkaW5nIGltYWdlIHVudGlsIHN1Y2NlZWQuCiAgICBUaGlzIGNhbiBhdm9pZCBJT0Vycm9yIGluY3VycmVkIGJ5IGhlYXZ5IElPIHByb2Nlc3MuIiIiCiAgICBnb3RfaW1nID0gRmFsc2UKICAgIHdoaWxlIG5vdCBnb3RfaW1nOgogICAgICAgIHRyeToKICAgICAgICAgICAgaW1nID0gSW1hZ2Uub3BlbihpbWdfcGF0aCkuY29udmVydCgnUkdCJykKICAgICAgICAgICAgZ290X2ltZyA9IFRydWUKPHxmaW1faG9sZXw+CiAgICByZXR1cm4gaW1nCgoKY2xhc3MgVmlkZW9EYXRhc2V0KERhdGFzZXQpOgogICAgIiIiVmlkZW8gUGVyc29uIFJlSUQgRGF0YXNldC4KICAgIE5vdGUgYmF0Y2ggZGF0YSBoYXMgc2hhcGUgKGJhdGNoLCBzZXFfbGVuLCBjaGFubmVsLCBoZWlnaHQsIHdpZHRoKS4KICAgICIiIgogICAgc2FtcGxlX21ldGhvZHMgPSBbJ2NvbnN0cmFpbl9yYW5kb20nLCAnZXZlbmx5J10KCiAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YXNldCwgc2VxX2xlbj0xNSwgc2FtcGxlPSdldmVubHknLCB0cmFuc2Zvcm09Tm9uZSk6CiAgICAgICAgc2VsZi5kYXRhc2V0ID0gZGF0YXNldAogICAgICAgIHNlbGYuc2VxX2xlbiA9IHNlcV9sZW4KICAgICAgICBzZWxmLnNhbXBsZSA9IHNhbXBsZQogICAgICAgIHNlbGYudHJhbnNmb3JtID0gdHJhbnNmb3JtCgogICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgcmV0dXJuIGxlbihzZWxmLmRhdGFzZXQpCgogICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKICAgICAgICBpbWdfcGF0aHMsIHBpZCwgY2FtaWQgPSBzZWxmLmRhdGFzZXRbaW5kZXhdCiAgICAgICAgbnVtID0gbGVuKGltZ19wYXRocykKICAgICAgICBpZiBzZWxmLnNhbXBsZSA9PSAnY29uc3RyYWluX3JhbmRvbSc6CiAgICAgICAgICAgICIiIgogICAgICAgICAgICBFdmVubHkgYW5kIHJhbmRvbWx5IHNhbXBsZSBzZXFfbGVuIGl0ZW1zIGZyb20gbnVtIGl0ZW1zIC4KICAgICAgICAgICAgIiIiCiAgICAgICAgICAgIGRlZiByYW5kb21faW50X2xpc3Qoc3RhcnQsIHN0b3AsIGxlbmd0aCk6CiAgICAgICAgICAgICAgICBzdGFydCwgc3RvcCA9IChpbnQoc3RhcnQpLCBpbnQoc3RvcCkpIGlmIHN0YXJ0IDw9IHN0b3AgZWxzZSAoaW50KHN0b3ApLCBpbnQoc3RhcnQpKQogICAgICAgICAgICAgICAgbGVuZ3RoID0gaW50KGFicyhsZW5ndGgpKSBpZiBsZW5ndGggZWxzZSAwCiAgICAgICAgICAgICAgICByYW5kb21fbGlzdCA9IFtdCiAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW5ndGgpOgogICAgICAgICAgICAgICAgICAgIHJhbmRvbV9saXN0LmFwcGVuZChyYW5kb20ucmFuZGludChzdGFydCwgc3RvcCkpCiAgICAgICAgICAgICAgICByZXR1cm4gcmFuZG9tX2xpc3QKICAgICAgICAgICAgaWYgbnVtID49IHNlbGYuc2VxX2xlbjoKICAgICAgICAgICAgICAgIHIgPSBudW0gJSBzZWxmLnNlcV9sZW4KICAgICAgICAgICAgICAgIHN0cmlkZSA9IG51bSAvLyBzZWxmLnNlcV9sZW4KICAgICAgICAgICAgICAgIGlmIHIgIT0gMDoKICAgICAgICAgICAgICAgICAgICBzdHJpZGUgKz0gMQogICAgICAgICAgICAgICAgYmlhc19pbmRpY2VzPXJhbmRvbV9pbnRfbGlzdCgwLHN0cmlkZS0xLHNlbGYuc2VxX2xlbikKICAgICAgICAgICAgICAgIGFjaF9pbmRpY2VzPW5wLmFyYW5nZSgwLHNlbGYuc2VxX2xlbikqc3RyaWRlCiAgICAgICAgICAgICAgICBpbmRpY2VzID0gYmlhc19pbmRpY2VzICsgYWNoX2luZGljZXMKICAgICAgICAgICAgICAgIGluZGljZXMgPSBpbmRpY2VzLmNsaXAobWF4PW51bSAtIDEpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAjIGlmIG51bSBpcyBzbWFsbGVyIHRoYW4gc2VxX2xlbiwgc2ltcGx5IHJlcGxpY2F0ZSB0aGUgbGFzdCBpbWFnZQogICAgICAgICAgICAgICAgIyB1bnRpbCB0aGUgc2VxX2xlbiByZXF1aXJlbWVudCBpcyBzYXRpc2ZpZWQKICAgICAgICAgICAgICAgIGluZGljZXMgPSBucC5hcmFuZ2UoMCwgbnVtKQogICAgICAgICAgICAgICAgbnVtX3BhZHMgPSBzZWxmLnNlcV9sZW4gLSBudW0KICAgICAgICAgICAgICAgIGluZGljZXMgPSBucC5jb25jYXRlbmF0ZShbaW5kaWNlcywgbnAub25lcyhudW1fcGFkcykuYXN0eXBlKG5wLmludDMyKSAqIChudW0gLSAxKV0pCgogICAgICAgICAgICBpbWdzID0gW10KICAgICAgICAgICAgZm9yIGluZGV4IGluIGluZGljZXM6CiAgICAgICAgICAgICAgICBpbWdfcGF0aCA9IGltZ19wYXRoc1tpbnQoaW5kZXgpXQogICAgICAgICAgICAgICAgaW1nID0gcmVhZF9pbWFnZShpbWdfcGF0aCkKICAgICAgICAgICAgICAgIGlmIHNlbGYudHJhbnNmb3JtIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgIGltZyA9IHNlbGYudHJhbnNmb3JtKGltZykKICAgICAgICAgICAgICAgIGltZyA9IGltZy51bnNxdWVlemUoMCkKICAgICAgICAgICAgICAgIGltZ3MuYXBwZW5kKGltZykKICAgICAgICAgICAgaW1ncyA9IHRvcmNoLmNhdChpbWdzLCBkaW09MCkKICAgICAgICAgICAgcmV0dXJuIGltZ3MsIHBpZCwgY2FtaWQKICAgICAgICBlbGlmIHNlbGYuc2FtcGxlID09ICdldmVubHknOgogICAgICAgICAgICAiIiIKICAgICAgICAgICAgRXZlbmx5IHNhbXBsZSBzZXFfbGVuIGl0ZW1zIGZyb20gbnVtIGl0ZW1zLgogICAgICAgICAgICAiIiIKICAgICAgICAgICAgaW5kaWNlc19saXN0ID0gW10KICAgICAgICAgICAgaWYgbnVtID49IHNlbGYuc2VxX2xlbjoKICAgICAgICAgICAgICAgIHIgPSBudW0gJSBzZWxmLnNlcV9sZW4KICAgICAgICAgICAgICAgIHN0cmlkZSA9IG51bSAvLyBzZWxmLnNlcV9sZW4KICAgICAgICAgICAgICAgIGlmIHIgIT0gMDoKICAgICAgICAgICAgICAgICAgICBzdHJpZGUgKz0gMQogICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc3RyaWRlKToKICAgICAgICAgICAgICAgICAgICBpbmRpY2VzID0gbnAuYXJhbmdlKGksIHN0cmlkZSpzZWxmLnNlcV9sZW4sIHN0cmlkZSkKICAgICAgICAgICAgICAgICAgICBpbmRpY2VzID0gaW5kaWNlcy5jbGlwKG1heD1udW0tMSkKICAgICAgICAgICAgICAgICAgICBpbmRpY2VzX2xpc3QuYXBwZW5kKGluZGljZXMpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAjIGlmIG51bSBpcyBzbWFsbGVyIHRoYW4gc2VxX2xlbiwgc2ltcGx5IHJlcGxpY2F0ZSB0aGUgbGFzdCBpbWFnZQogICAgICAgICAgICAgICAgIyB1bnRpbCB0aGUgc2VxX2xlbiByZXF1aXJlbWVudCBpcyBzYXRpc2ZpZWQKICAgICAgICAgICAgICAgIGluZGljZXMgPSBucC5hcmFuZ2UoMCwgbnVtKQogICAgICAgICAgICAgICAgbnVtX3BhZHMgPSBzZWxmLnNlcV9sZW4gLSBudW0KICAgICAgICAgICAgICAgIGluZGljZXMgPSBucC5jb25jYXRlbmF0ZShbaW5kaWNlcywgbnAub25lcyhudW1fcGFkcykuYXN0eXBlKG5wLmludDMyKSoobnVtLTEpXSkKICAgICAgICAgICAgICAgIGluZGljZXNfbGlzdC5hcHBlbmQoaW5kaWNlcykKCiAgICAgICAgICAgIGlmIGxlbihpbmRpY2VzX2xpc3QpID4gNTA6CiAgICAgICAgICAgICAgICBpbmRpY2VzX2xpc3QgPSBpbmRpY2VzX2xpc3RbOjUwXQoKICAgICAgICAgICAgaW1nc19saXN0PVtdCiAgICAgICAgICAgIGZvciBpbmRpY2VzIGluIGluZGljZXNfbGlzdDoKICAgICAgICAgICAgICAgIGltZ3MgPSBbXQogICAgICAgICAgICAgICAgZm9yIGluZGV4IGluIGluZGljZXM6CiAgICAgICAgICAgICAgICAgICAgaW1nX3BhdGggPSBpbWdfcGF0aHNbaW50KGluZGV4KV0KICAgICAgICAgICAgICAgICAgICBpbWcgPSByZWFkX2ltYWdlKGltZ19wYXRoKQogICAgICAgICAgICAgICAgICAgIGlmIHNlbGYudHJhbnNmb3JtIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICAgICBpbWcgPSBzZWxmLnRyYW5zZm9ybShpbWcpCiAgICAgICAgICAgICAgICAgICAgaW1nID0gaW1nLnVuc3F1ZWV6ZSgwKQogICAgICAgICAgICAgICAgICAgIGltZ3MuYXBwZW5kKGltZykKICAgICAgICAgICAgICAgIGltZ3MgPSB0b3JjaC5jYXQoaW1ncywgZGltPTApCiAgICAgICAgICAgICAgICBpbWdzX2xpc3QuYXBwZW5kKGltZ3MpCiAgICAgICAgICAgIGltZ3NfYXJyYXkgPSB0b3JjaC5zdGFjayhpbWdzX2xpc3QpCiAgICAgICAgICAgIHJldHVybiBpbWdzX2FycmF5LCBwaWQsIGNhbWlkCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoIlVua25vd24gc2FtcGxlIG1ldGhvZDoge30uIEV4cGVjdGVkIG9uZSBvZiB7fSIuZm9ybWF0KHNlbGYuc2FtcGxlLCBzZWxmLnNhbXBsZV9tZXRob2RzKSkKCgoKCgoKCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgICAgIHByaW50KCJJT0Vycm9yIGluY3VycmVkIHdoZW4gcmVhZGluZyAne30nLiBXaWxsIHJlZG8uIERvbid0IHdvcnJ5LiBKdXN0IGNoaWxsLiIuZm9ybWF0KGltZ19wYXRoKSkKICAgICAgICAgICAgcGFzcwo8fGZpbV9lbmR8Pg=="]
["06ea5780ae50a79aaf03570dd2fc69c7ddd5ac5c-2","06ea5780ae50a79aaf03570dd2fc69c7ddd5ac5c","PHxmaW1fcHJlZml4fD4KZnJvbSBwc3ljb3BnMi5leHRlbnNpb25zIGltcG9ydCBBc0lzCgpmcm9tIHNreWdlYXIuY29udGFpbmVyIGltcG9ydCBTa3lnZWFyQ29udGFpbmVyCmZyb20gc2t5Z2Vhci5lcnJvciBpbXBvcnQgUmVzb3VyY2VOb3RGb3VuZApmcm9tIHNreWdlYXIubW9kZWxzIGltcG9ydCBSZWNvcmQsIFJlY29yZElELCBSZWZlcmVuY2UKZnJvbSBza3lnZWFyLm9wdGlvbnMgaW1wb3J0IG9wdGlvbnMgYXMgc2t5b3B0aW9ucwpmcm9tIHNreWdlYXIudHJhbnNtaXR0ZXIuZW5jb2RpbmcgaW1wb3J0IGRlc2VyaWFsaXplX3JlY29yZCwgc2VyaWFsaXplX3JlY29yZApmcm9tIHNreWdlYXIudXRpbHMgaW1wb3J0IGRiCmZyb20gc2t5Z2Vhci51dGlscy5jb250ZXh0IGltcG9ydCBjdXJyZW50X3VzZXJfaWQKCmZyb20gLmV4YyBpbXBvcnQgU2t5Z2VhckNoYXRFeGNlcHRpb24KZnJvbSAucHVic3ViIGltcG9ydCBfcHVibGlzaF9yZWNvcmRfZXZlbnQKZnJvbSAudXRpbHMgaW1wb3J0IF9nZXRfY29udmVyc2F0aW9uLCBfZ2V0X3NjaGVtYV9uYW1lLCB0b19yZmMzMzM5X29yX25vbmUKCgpjbGFzcyBNZXNzYWdlOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYucmVjb3JkID0gTm9uZQogICAgICAgIHNlbGYuY29udmVyc2F0aW9uUmVjb3JkID0gTm9uZQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGZldGNoKGNscywgbWVzc2FnZV9pZDogc3RyKToKICAgICAgICAiIiIKICAgICAgICBGZXRjaCB0aGUgbWVzc2FnZSBmcm9tIHNreWdlYXIuCgogICAgICAgIFRoZSBjb252ZXJzYXRpb24gcmVjb3JkIGlzIGFsc28gZmV0Y2hlZCB1c2luZyBlYWdlciBsb2FkLgogICAgICAgICIiIgogICAgICAgICMgRklYTUUgY2hlY2tpbmcgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnksIHBhc3NpbmcgY29ycmVjdCB0eXBlCiAgICAgICAgIyBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlci4KICAgICAgICAjIG1lc3NhZ2VfaWQgY2FuIGJlIFJlZmVyZW5jZSwgcmVjb3JkSUQgb3Igc3RyaW5nCiAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlX2lkLCBSZWZlcmVuY2UpOgogICAgICAgICAgICBtZXNzYWdlX2lkID0gbWVzc2FnZV9pZC5yZWNvcmRJRC5rZXkKICAgICAgICBpZiBpc2luc3RhbmNlKG1lc3NhZ2VfaWQsIFJlY29yZElEKToKICAgICAgICAgICAgbWVzc2FnZV9pZCA9IG1lc3NhZ2VfaWQua2V5CiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobWVzc2FnZV9pZCwgc3RyKToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigpCgogICAgICAgIGNvbnRhaW5lciA9IFNreWdlYXJDb250YWluZXIoYXBpX2tleT1za3lvcHRpb25zLm1hc3RlcmtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfaWQ9Y3VycmVudF91c2VyX2lkKCkpCiAgICAgICAgcmVzcG9uc2UgPSBjb250YWluZXIuc2VuZF9hY3Rpb24oCiAgICAgICAgICAgICdyZWNvcmQ6cXVlcnknLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAnZGF0YWJhc2VfaWQnOiAnX3VuaW9uJywKICAgICAgICAgICAgICAgICdyZWNvcmRfdHlwZSc6ICdtZXNzYWdlJywKICAgICAgICAgICAgICAgICdsaW1pdCc6IDEsCiAgICAgICAgICAgICAgICAnc29ydCc6IFtdLAogICAgICAgICAgICAgICAgJ2NvdW50JzogRmFsc2UsCiAgICAgICAgICAgICAgICAncHJlZGljYXRlJzogWwogICAgICAgICAgICAgICAgICAgICdlcScsIHsKICAgICAgICAgICAgICAgICAgICAgICAgJyR0eXBlJzogJ2tleXBhdGgnLAogICAgICAgICAgICAgICAgICAgICAgICAnJHZhbCc6ICdfaWQnCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2lkCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0KICAgICAgICApCgogICAgICAgIGlmICdlcnJvcicgaW4gcmVzcG9uc2U6CiAgICAgICAgICAgIHJhaXNlIFNreWdlYXJDaGF0RXhjZXB0aW9uKHJlc3BvbnNlWydlcnJvciddKQoKICAgICAgICBpZiBsZW4ocmVzcG9uc2VbJ3Jlc3VsdCddKSA9PSAwOgogICAgICAgICAgICByYWlzZSBTa3lnZWFyQ2hhdEV4Y2VwdGlvbignbm8gbWVzc2FnZXMgZm91bmQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlPVJlc291cmNlTm90Rm91bmQpCgogICAgICAgIG9iaiA9IGNscygpCiAgICAgICAgbWVzc2FnZURpY3QgPSByZXNwb25zZVsncmVzdWx0J11bMF0KICAgICAgICBvYmoucmVjb3JkID0gZGVzZXJpYWxpemVfcmVjb3JkKG1lc3NhZ2VEaWN0KQogICAgICAgICMgQ29udmVyc2F0aW9uIGlzIGluIHB1YmxpY0RCLCBkbyBjYW5ub3QgdHJhbnNpZW50IGluY2x1ZGUKICAgICAgICBwcmludChvYmoucmVjb3JkWydjb252ZXJzYXRpb25faWQnXS5yZWNvcmRJRC5rZXkpCiAgICAgICAgcmVzcG9uc2UgPSBjb250YWluZXIuc2VuZF9hY3Rpb24oCiAgICAgICAgICAgICdyZWNvcmQ6cXVlcnknLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAnZGF0YWJhc2VfaWQnOiAnX3B1YmxpYycsCiAgICAgICAgICAgICAgICAncmVjb3JkX3R5cGUnOiAnY29udmVyc2F0aW9uJywKICAgICAgICAgICAgICAgICdsaW1pdCc6IDEsCiAgICAgICAgICAgICAgICAnc29ydCc6IFtdLAogICAgICAgICAgICAgICAgJ2NvdW50JzogRmFsc2UsCiAgICAgICAgICAgICAgICAncHJlZGljYXRlJzogWwogICAgICAgICAgICAgICAgICAgICdlcScsIHsKICAgICAgICAgICAgICAgICAgICAgICAgJyR0eXBlJzogJ2tleXBhdGgnLAogICAgICAgICAgICAgICAgICAgICAgICAnJHZhbCc6ICdfaWQnCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBvYmoucmVjb3JkWydjb252ZXJzYXRpb25faWQnXS5yZWNvcmRJRC5rZXkKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfQogICAgICAgICkKICAgICAgICBpZiBsZW4ocmVzcG9uc2VbJ3Jlc3VsdCddKSA9PSAwOgogICAgICAgICAgICByYWlzZSBTa3lnZWFyQ2hhdEV4Y2VwdGlvbigibm8gY29udmVyc2F0aW9uIGZvdW5kIikKICAgICAgICBjb252ZXJzYXRpb25EaWN0ID0gcmVzcG9uc2VbJ3Jlc3VsdCddWzBdCiAgICAgICAgb2JqLmNvbnZlcnNhdGlvblJlY29yZCA9IGRlc2VyaWFsaXplX3JlY29yZChjb252ZXJzYXRpb25EaWN0KQogICAgICAgIHJldHVybiBvYmoKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBmcm9tX3JlY29yZChjbHMsIHJlY29yZCk6CiAgICAgICAgIiIiCiAgICAgICAgQ3JlYXRlIGEgbWVzc2FnZSBmcm9tIGEgcmVjb3JkLiBUaGlzIGZ1bmN0aW9uIGRvIG5vdCBtYWtlCiAgICAgICAgZXh0ZXJuYWwgY2FsbHMuCiAgICAgICAgIiIiCiAgICAgICAgb2JqID0gY2xzKCkKICAgICAgICBvYmoucmVjb3JkID0gcmVjb3JkCiAgICAgICAgcmV0dXJuIG9iagoKICAgIGRlZiBmZXRjaENvbnZlcnNhdGlvblJlY29yZChzZWxmKSAtPiBSZWNvcmQ6CiAgICAgICAgIiIiCiAgICAgICAgRmV0Y2ggY29udmVyc2F0aW9uIHJlY29yZC4gVGhpcyBpcyByZXF1aXJlZCBpZiB0aGUgTWVzc2FnZQogICAgICAgIGlzIGNyZWF0ZWQgdXNpbmcgYSBSZWNvcmQgcmF0aGVyIHRoYW4gZmV0Y2hpbmcgdGhlIFJlY29yZAogICAgICAgIGZyb20gdGhlIGRhdGFiYXNlLgogICAgICAgICIiIgogICAgICAgIGNvbnZlcnNhdGlvbl9pZCA9IHNlbGYucmVjb3JkWydjb252ZXJzYXRpb25faWQnXS5yZWNvcmRJRC5rZXkKICAgICAgICBzZWxmLmNvbnZlcnNhdGlvblJlY29yZCA9IF9nZXRfY29udmVyc2F0aW9uKGNvbnZlcnNhdGlvbl9pZCkKICAgICAgICByZXR1cm4gc2VsZi5jb252ZXJzYXRpb25SZWNvcmQKCiAgICBkZWYgZ2V0UmVjZWlwdExpc3Qoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgUmV0dXJucyBhIGxpc3Qgb2YgbWVzc2FnZSByZWNlaXB0IHN0YXR1c2VzLgogICAgICAgICIiIgogICAgICAgIHJlY2VpcHRzID0gbGlzdCgpCiAgICAgICAgd2l0aCBkYi5jb25uKCkgYXMgY29ubjoKICAgICAgICAgICAgY3VyID0gY29ubi5leGVjdXRlKCcnJwogICAgICAgICAgICAgICAgU0VMRUNUIHVzZXJfaWQsIHJlYWRfYXQsIGRlbGl2ZXJlZF9hdAogICAgICAgICAgICAgICAgRlJPTSAlKHNjaGVtYV9uYW1lKXMucmVjZWlwdAogICAgICAgICAgICAgICAgV0hFUkUKICAgICAgICAgICAgICAgICAgICAibWVzc2FnZV9pZCIgPSAlKG1lc3NhZ2VfaWQpcwogICAgICAgICAgICAgICAgJycnLCB7CiAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9uYW1lJzogQXNJcyhfZ2V0X3NjaGVtYV9uYW1lKCkpLAogICAgICAgICAgICAgICAgICAgICdtZXNzYWdlX2lkJzogc2VsZi5yZWNvcmQuaWQua2V5CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkKCiAgICAgICAgICAgIGZvciByb3cgaW4gY3VyOgogICAgICAgICAgICAgICAgcmVjZWlwdHMuYXBwZW5kKHsKICAgICAgICAgICAgICAgICAgICAndXNlcl9pZCc6IHJvd1sndXNlcl9pZCddLAogICAgICAgICAgICAgICAgICAgICdyZWFkX2F0JzogdG9fcmZjMzMzOV9vcl9ub25lKHJvd1sncmVhZF9hdCddKSwKICAgICAgICAgICAgICAgICAgICAnZGVsaXZlcmVkX2F0JzogdG9fcmZjMzMzOV9vcl9ub25lKHJvd1snZGVsaXZlcmVkX2F0J10pCiAgICAgICAgICAgICAgICB9KQogICAgICAgIHJldHVybiByZWNlaXB0cwoKICAgIGRlZiB1cGRhdGVDb252ZXJzYXRpb25TdGF0dXMoc2VsZiwgY29ubikgLT4gYm9vbDoKICAgICAgICAiIiIKICAgICAgICBVcGRhdGUgdGhlIGNvbnZlcnNhdGlvbiBzdGF0dXMgZmllbGQgYnkgcXVlcnlpbmcgdGhlIGRhdGFiYXNlIGZvcgogICAgICAgIGFsbCByZWNlaXB0IHN0YXR1c2VzLgogICAgICAgICIiIgogICAgICAgIGlmIG5vdCBzZWxmLmNvbnZlcnNhdGlvblJlY29yZDoKICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdubyBjb252ZXJzYXRpb24gcmVjb3JkJykKCiAgICAgICAgY3VyID0gY29ubi5leGVjdXRlKCcnJwogICAgICAgICAgICBXSVRICiAgICAgICAgICAgICAgcmVhZF9jb3VudCBBUyAoCiAgICAgICAgICAgICAgICBTRUxFQ1QgRElTVElOQ1QgQ09VTlQodXNlcl9pZCkgYXMgY291bnQKICAgICAgICAgICAgICAgIEZST00gJShzY2hlbWFfbmFtZSlzLnJlY2VpcHQKICAgICAgICAgICAgICAgIFdIRVJFIG1lc3NhZ2VfaWQgPSAlKG1lc3NhZ2VfaWQpcwogICAgICAgICAgICAgICAgICAgIEFORCByZWFkX2F0IElTIE5PVCBOVUxMCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBwYXJ0aWNpcGFudF9jb3VudCBBUyAoCiAgICAgICAgICAgICAgICBTRUxFQ1QgcGFydGljaXBhbnRfY291bnQgYXMgY291bnQKICAgICAgICAgICAgICAgIEZST00gJShzY2hlbWFfbmFtZSlzLmNvbnZlcnNhdGlvbgogICAgICAgICAgICAgICAgV0hFUkUgX2lkID0gJShjb252ZXJzYXRpb25faWQpcwogICAgICAgICAgICAgICkKICAgICAgICAgICAgVVBEQVRFICUoc2NoZW1hX25hbWUpcy5tZXNzYWdlCiAgICAgICAgICAgIFNFVCBfdXBkYXRlZF9hdCA9IE5PVygpLAogICAgICAgICAgICAgICAgY29udmVyc2F0aW9uX3N0YXR1cyA9CiAgICAgICAgICAgICAgICAgIENBU0UKICAgICAgICAgICAgICAgICAgICBXSEVOIHJlYWRfY291bnQuY291bnQgPSAwIFRIRU4gJ2RlbGl2ZXJlZCcKICAgICAgICAgICAgICAgICAgICBXSEVOIHJlYWRfY291bnQuY291bnQgPCBwYXJ0aWNpcGFudF9jb3VudC5jb3VudAogICAgICAgICAgICAgICAgICAgICAgICBUSEVOICdzb21lX3JlYWQnCiAgICAgICAgICAgICAgICAgICAgRUxTRSAnYWxsX3JlYWQnCiAgICAgICAgICAgICAgICAgIEVORAogICAgICAgICAgICBGUk9NIHJlYWRfY291bnQsIHBhcnRpY2lwYW50X2NvdW50CiAgICAgICAgICAgIFdIRVJFIF9pZCA9ICUobWVzc2FnZV9pZClzCiAgICAgICAgICAgIFJFVFVSTklORyBfdXBkYXRlZF9hdCwgY29udmVyc2F0aW9uX3N0YXR1cwogICAgICAgICAgICAnJycsIHsKICAgICAgICAgICAgICAgICdzY2hlbWFfbmFtZSc6IEFzSXMoX2dldF9zY2hlbWFfbmFtZSgpKSwKICAgICAgICAgICAgICAgICdtZXNzYWdlX2lkJzogc2VsZi5yZWNvcmQuaWQua2V5LAogICAgICAgICAgICAgICAgJ2NvbnZlcnNhdGlvbl9pZCc6IHNlbGYuY29udmVyc2F0aW9uUmVjb3JkLmlkLmtleQogICAgICAgICAgICB9CiAgICAgICAgKQoKICAgICAgICByb3cgPSBjdXIuZmV0Y2hvbmUoKQogICAgICAgIGlmIHJvdyBpcyBub3QgTm9uZToKICAgICAgICAgICAgc2VsZi5yZWNvcmRbJ191cGRhdGVkX2F0J10gPSByb3dbMF0KICAgICAgICAgICAgc2VsZi5yZWNvcmRbJ2NvbnZlcnNhdGlvbl9zdGF0dXMnXSA9IHJvd1sxXQoKICAgIGRlZiBub3RpZnlQYXJ0aWNpcGFudHMoc2VsZiwgZXZlbnRfdHlwZT0ndXBkYXRlJykgLT4gTm9uZToKICAgICAgICBpZiBub3Qgc2VsZi5jb252ZXJzYXRpb25SZWNvcmQ6CiAgICAgICAgICAgIGZldGNoZWQgPSBzZWxmLmZldGNoQ29udmVyc2F0aW9uUmVjb3JkKCkKICAgICAgICAgICAgaWYgZmV0Y2hlZCBpcyBOb25lOgogICAgICAgICAgICAgICAgcmFpc2UgU2t5Z2VhckNoYXRFeGNlcHRpb24oJ25vIGNvbnZlcnNhdGlvbiByZWNvcmQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZT1SZXNvdXJjZU5vdEZvdW5kKQogICAgICAgIHBhcnRpY2lwYW50cyA9IHNldChzZWxmLmNvbnZlcnNhdGlvblJlY29yZFsncGFydGljaXBhbnRfaWRzJ10pCiAgICAgICAgZm9yIGVhY2hfcGFydGljaXBhbnQgaW4gcGFydGljaXBhbnRzOgogICAgICAgICAgICBfcHVibGlzaF9yZWNvcmRfZXZlbnQoZWFjaF9wYXJ0aWNpcGFudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXNzYWdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlY29yZCkKCiAgICBkZWYgc2F2ZShzZWxmKSAtPiBOb25lOgogICAgICAgICIiIgogICAgICAgIFNhdmUgdGhlIE1lc3NhZ2UgcmVjb3JkIHRvIHRoZSBkYXRhYmFzZS4KICAgICAgICAiIiIKICAgICAgICBjb250YWluZXIgPSBTa3lnZWFyQ29udGFpbmVyKGFwaV9rZXk9c2t5b3B0aW9ucy5tYXN0ZXJrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2lkPWN1cnJlbnRfdXNlcl9pZCgpKQogICAgICAgIGNvbnRhaW5lci5zZW5kX2FjdGlvbigncmVjb3JkOnNhdmUnLCB7CiAgICAgICAgICAgICdkYXRhYmFzZV9pZCc6ICdfcHVibGljJywKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAncmVjb3Jkcyc6IFtzZXJpYWxpemVfcmVjb3JkKHNlbGYucmVjb3JkKV0sCiAgICAgICAgICAgICdhdG9taWMnOiBUcnVlCjx8ZmltX2VuZHw+"]
["59da0272f5543cb7a3da139bbf5e70dbcaa46e99-1","59da0272f5543cb7a3da139bbf5e70dbcaa46e99",{"$cut":{"chars":99368,"head":"PHxmaW1fcHJlZml4fD4KIiIiCk1haW4gZXhwZXJpbWVudGFsIHBpcGVsaW5lcy4KIiIiCmltcG9ydCBtYXRwbG90bGliCmltcG9ydCByZXBvcnRfZmlsZV9vYmplY3RfY2xhc3MgYXMgcmZvCmltcG9ydCBuZXR3b3JreCBhcyBueAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBzZWFib3JuIGFzIHNucwppbXBvcnQgcGlja2xlCmltcG9ydCBzeXMKaW1wb3J0IG1hdGgKaW1wb3J0IG9zCmltcG9ydCBjc3YKaW1wb3J0IGNvcHkKaW1wb3J0IGJ1aWxkX2Nvc3BvbnNvcnNoaXAgYXMgY29zcG9uc29yc2hpcAppbXBvcnQgYnVpbGRfZGJscCBhcyBkYmxwCmltcG9ydCBidWlsZF90d2l0Y2hfbmV0d29yayBhcyB0d2l0Y2gKZnJvbSBza2xlYXJuLmNsdXN0ZXIgaW1wb3J0IEtNZWFucywgU3BlY3RyYWxDbHVzdGVyaW5nCmZyb20gc2NpcHkgaW1wb3J0IHN0YXRzCmZyb20gaGVscGVyX3BpcGVsaW5lcyBpbXBvcnQgcmVhZF9jb2F1dGhvcnNoaXAgYXMgcmVhZApmcm9tIGhlbHBlcl9waXBlbGluZXMgaW1wb3J0IGNsdXN0ZXJpbmdfcGlwZWxpbmUgYXMgY3AKZnJvbSBoZWxwZXJfcGlwZWxpbmVzIGltcG9ydCBlaWdlbmdhcF9jYWxjdWxhdG9yIGFzIGVpZ2VuCmltcG9ydCBweXJlYWRyCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IGJ1aWxkX2dlbmVyaWNfbmV0d29yayBhcyBiZ24KaW1wb3J0IHN0YXRpc3RpY3MKZnJvbSBza2xlYXJuLm1ldHJpY3MgaW1wb3J0IHBhaXJ3aXNlX2Rpc3RhbmNlcwpmcm9tIHNrbGVhcm4uZGF0YXNldHMgaW1wb3J0IG1ha2VfYmxvYnMKZnJvbSBza2xlYXJuLmNsdXN0ZXIgaW1wb3J0IEtNZWFucwpmcm9tIHNrbGVhcm4ubWV0cmljcyBpbXBvcnQgc2lsaG91ZXR0ZV9zYW1wbGVzLCBzaWxob3VldHRlX3Njb3JlCmltcG9ydCBtYXRwbG90bGliLmNtIGFzIGNtCmZyb20gY2x1c3Rlcl9jb25zaXN0ZW5jeSBpbXBvcnQgY2x1c3Rlcl9sYWJlbGluZwpmcm9tIGthcmF0ZWNsdWIgaW1wb3J0IFJvbGUyVmVjCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CmltcG9ydCBjcG5ldAppbXBvcnQgbnVtcHkgYXMgbnAKCgojID09PT0gSURFTlRJRklFUjogPT09PSAjCiMgVW5pcXVlIGlkZW50aWZpZXIgc3RyaW5nIGZvciBlYWNoIGRhdGEgc2V0LgojIE11c3QgYmUgZWl0aGVyIG9uZSB3b3JkIChlZy4gInR3aXRjaCIpIG9yIHNldmVyYWwgd29yZHMgdXNpbmcgYSBoeXBoZW4KIyAoZWcuICJzdHJvbmctaG91c2UiKS4gRG8gTk9UIHVzZSAiXyIgKHVuZGVyc2NvcmUpLgpJREVOVElGSUVSX1NUUklORyA9ICJ0d2l0Y2giCgoKIyA9PT09IFBBUkFNRVRFUlMgRk9SIFRVTklORyBLID0gTlVNQkVSIE9GIENMVVNURVJTOiA9PT09ICMKTUlOX0NMVVNURVJTID0gMQpNQVhfQ0xVU1RFUlMgPSAxNgpOX1JFRlMgPSA0CgoKIyA9PT09IFBJUEVMSU5FIEFGVEVSX1ZFQ1RPUlMgUEFSQU1FVEVSUzogPT09PSAjCksgPSAtMSAgIyBIeXBlcnBhcmFtZXRlciBrLgpBVFRSSUJVVEUgPSAiIiAgIyBOb2RlIGF0dHJpYnV0ZSwgYWJvdXQgd2hpY2ggdG8gY3JlYXRlIGRpc3RyaWJ1dGlvbiBvciBiYXIgZ3JhcGhzLgpJTlBVVF9QSUNLTEVEX0dSQVBIID0gIiIgICMgUGF0aCB0byBhIHBpY2tsZWQgZ3JhcGggd2l0aCBub2RlcyBhbmQgcmVsZXZhbnQgYXR0cmlidXRlcy4KVkVDVE9SX0ZJTEVfSU5WQVJJQU5UID0gIiIgICMgSW52YXJpYW50IGZvciB0aGUgdmVjdG9yIHR4dCBmaWxlcyBmb3IgZGlmZmVyZW50IGFscGhhIHZhbHVlcy4KUkVQT1JUX0ZJTEVfUEFUSCA9ICIiICAjIEZpbGUgdG8gd2hpY2ggd3JpdGUgdGhlIHJlc3VsdHMgb2YgdGhlIGNsdXN0ZXJpbmcgZXhwZXJpbWVudC4KUkVQT1JUX0ZJTEUgPSByZm8uUmVwb3J0RmlsZU9iamVjdChSRVBPUlRfRklMRV9QQVRIKSAgIyBJbnN0YW5jZSBvZiB0aGUgcmVwb3J0IGZpbGUgKGZvciBjb252ZW5pZW5jZSBpbiB3cml0aW5nIHRvIGl0KS4KCiMgQWxwaGEgdmFsdWVzIGZvciBvdGhlciBkYXRhIHNldHM6CkFMUEhBX1ZBTFVFUyA9IFtdICAjIE11c3QgbWF0Y2ggdGhlIGFscGhhIHZhbHVlcyB1c2VkIGZvciBjcmVhdGluZyB0aGUgdmVjdG9yIGZpbGVzLgoKUExPVF9QREYgPSAxICAjIFdoZXRoZXIgdGhlIGF0dHJpYnV0ZSBpcyBmb3IgcGxvdHRpbmcgYSBQREYgb3Igbm90OyBpZiAxLCBwbG90X2F0dHJpYnV0ZV9kaXN0cmlidXRpb25zKCkgd2lsbCBiZSBydW47CiMgaWYgMCwgcGxvdF9hdHRyaWJ1dGVfYmFyKCkuClBERl9MT0cgPSAwICAjIElmIFBMT1RfUERGID0gMSwgd2hlbiBkcmF3aW5nIGEgUERGLCBzaG91bGQgd2UgdGFrZSBsb2coYXR0cmlidXRlKT8KTE9HX0JBU0UgPSAxMCAgIyBJZiBQREZfTE9HID0gMSwgd2hhdCBpcyB0aGUgYmFzZSBmb3IgbG9nIHVzZWQgaW4gY3JlYXRpbmcgYSBQREYuCgojIChPcHRpb25hbCkgcGFyYW1ldGVyIGZvciBkYXRhc2V0X3BkZigpLCB3aGljaCBwbG90cyB0aGUgUERGIG9mIHRoZSBlbnRpcmUgZGF0YXNldC4KREFUQVNFVF9MT0cgPSAxICAjIElmIDAsIGlucHV0IG51bWJlcnMgZm9yIFBERiBhcmUgcmF3OyBpZiAxLCBsb2cgb2YgTE9HX0JBU0UgaXMgdGFrZW4gb2YgdGhlbS4KCiMgKE9wdGlvbmFsKSBDb2xvcnMgdXNlZCBmb3IgdGhlIGdyYXBocy4KQ09MT1JfUEFMRVRURSA9IFsiI0ZGQzEwNyIsICIjMUU4OEU1IiwgIiMyRUNFNTQiLCAiI0VDMDlENyIsICIjRERFQzRFIiwgIiNEODFCNTAiLCAiI0NDRDg1RCIsICIjMzcwMUZBIiwgIiNEMzlDQTciLCAiIzI3RUE5RiIsICIjNUQ1NjEzIiwgIiNEQzY0NjQiXQpCQVJfR1JBUEhfQ09MT1JfUEFMRVRURSA9IFsiI0JBNjVBNCIsICIjMUE0RDY4Il0KCgojID09PT0gUEFSQU1FVEVSUyBGT1IgQ0xVU1RFUklORyBNRVRIT0RTIEJFWU9ORCBJTkZPUk1BVElPTiBBQ0NFU1MgQU5EIFNQRUNUUkFMOiA9PT09ICMKSUFDX0xBQkVMSU5HX0ZJTEUgPSAiIgpMQUJFTElOR19GSUxFID0gIiIKRVhQRVJJTUVOVCA9ICIiCgojIFJlcGVhdGVkIGZsdWlkIGNvbW11bml0aWVzIGNsdXN0ZXJpbmcgcGlwZWxpbmUgaHlwZXJwYXJhbWV0ZXJzOgpTRUVEUyA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMF0gICMgU2VlZHMg"}}]
["a57474c85100727bc48ffb86eb76899a1af6dfd2-5","a57474c85100727bc48ffb86eb76899a1af6dfd2","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgpmcm9tIC5yZXNvdXJjZSBpbXBvcnQgUmVzb3VyY2UKCgpjbGFzcyBTbGVlcERhdGEoUmVzb3VyY2UpOgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIGxpc3Qoc2VsZiwgYWNjZXNzX3Rva2VuKToKICAgICAgICByZXR1cm4gc2VsZi5fZ2V0KGVuZHBvaW50PSIvdXNlcnMvc2xlZXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzX3Rva2VuPWFjY2Vzc190b2tlbikKPHxmaW1fZW5kfD4="]
["b05d4799d51003954cfb1f4829d09507d4aa1aff-4","b05d4799d51003954cfb1f4829d09507d4aa1aff",{"$cut":{"chars":141164,"head":"PHxmaW1fcHJlZml4fD4KJycnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkhpQ1Bsb3R0ZXI6IHBsb3R0aW5nIEhpLUMgZGF0YSB3aXRoIGFkZGl0aW9uYWwgZGF0YXNldHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJycnCgppbXBvcnQgb3Msc3lzCgppbXBvcnQgcGxhdGZvcm0KaWYgcGxhdGZvcm0ucGxhdGZvcm0oKS5zcGxpdCgnLScpWzBdPT0nTGludXgnIG9yIHBsYXRmb3JtLnBsYXRmb3JtKCkuc3BsaXQoJy0nKVswXT09J1dpbmRvd3MnOgoJaW1wb3J0IG1hdHBsb3RsaWIKCW1hdHBsb3RsaWIudXNlKCdBZ2cnKQoKZnJvbSBtYXRoICBpbXBvcnQgc3FydCwgaXNuYW4sIGZsb29yLCBjZWlsLCBwaQpmcm9tIG51bXB5IGltcG9ydCBsb2cyLCBhcnJheSwgbWF4CmZyb20gbXBsX3Rvb2xraXRzLmF4ZXNfZ3JpZDEgaW1wb3J0IG1ha2VfYXhlc19sb2NhdGFibGUKZnJvbSBtYXRwbG90bGliLnRpY2tlciAgaW1wb3J0IE11bHRpcGxlTG9jYXRvcgpmcm9tIG1hdHBsb3RsaWIucGF0Y2hlcyBpbXBvcnQgUG9seWdvbiwgUmVjdGFuZ2xlLCBDaXJjbGUKZnJvbSBzY2lweS5zaWduYWwgaW1wb3J0IGFyZ3JlbGV4dHJlbWEKZnJvbSBzY2lweSBpbXBvcnQgbmRpbWFnZQppbXBvcnQgc2NpcHkuc3BhcnNlIGFzIHNwcwppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgYXJncGFyc2UKaW1wb3J0IGJpc2VjdAppbXBvcnQgd2FybmluZ3MKaW1wb3J0IGxvZ2dpbmcKCnZlcnNpb24gPSAiMC44LjEiCgpkZWYgcmVhZF9IaUNkYXRhKGZpbGVuYW1lLGhlYWRlcj0wLGZvb3Rlcj0wLGNsZWFuX25hbnM9VHJ1ZSxzbW9vdGhfbm9pc2U9MC41LGluc193aW5kb3c9NSxyZWxfd2luZG93PTgscGxvdEluc3VsYXRpb249VHJ1ZSxwbG90VGFkRG9tYWlucz1GYWxzZSxyYW5kb21CaW5zPUZhbHNlKToKCQoJJycnCiAgICBsb2FkIEhpLUMgaW50ZXJhY3Rpb24gbWF0cml4IGZyb20gdGV4dCBmaWxlCiAgICAKICAgIHBhcmFtZXRlcnM6CgogICAgZmlsZW5hbWU6IGZpbGUgbmFtZS4gZm9ybWF0ICJjaHJcdHN0YXJ0XHRlbmRcdGRhdGExXHRkYXRhMlx0Li4uIgogICAgY2xlYW5fbmFuczogcmVwbGFjZSBuYW4gd2l0aCAwJ3MgaW4gcm93cy9jb2x1bW5zIGZyb20gYWxsIG1hdHJpeAogICAgc21vb3RoX25vaXNlOiB2YXJpYWJsZSB2YWx1ZXMgdW5kZXIgd2lsbCBiZSByZXBsYWNlIHdpdGggMCdzIHRvIGNsZWFuIG5vaXNlIGluIHRoZSBtYXRyaXgKICAgIGluc193aW5kb3c6IHdpbmRvdyBzaXplIGZvciBzY2FubmluZyBkaWFnb25hbCBvZiB0aGUgbWF0cml4IGZvciBpbnN1bGF0aW9uIHNjb3JlcwogICAgcmVsX3dpbmRvdzogcmVsYXRpdmUgZXh0cmFtYSBleHRlbnNpb24gc2l6ZSAtIHdpbGwgYmUgZXh0ZW5kIHRvIGJvdGggZGlyZWN0aW9ucwogICAgCiAgICByZXR1cm5zOgogICAgCiAgICBtYXRyaXg6IGRhdGEgbWF0cml4IG92ZXIgdGhlIHNlbGVjdGVkIHNldCBvZiBjaHJvbW9zb21lLgogICAgbnVtczogaW5zdWxhdGlvbiBzY29yZXMgYXJyYXkuCiAgICB0cmlja3M6IHB1dGF0aXZlIGluc3VsYXRvciBzaXRlcwoKICAgICcnJwoJCgl0cnk6CgkJbWF0cml4ID0gbnAuZ2VuZnJvbXR4dChmaWxlbmFtZSxza2lwX2hlYWRlcj1oZWFkZXIsZmlsbGluZ192YWx1ZXM9JzAnLHNraXBfZm9vdGVyPWZvb3RlcikgCglleGNlcHQgSU9FcnJvcjoKCQlwcmludCA+PnN5cy5zdGRlcnIsICdjYW5ub3Qgb3BlbicsIGZpbGVuYW1lCgkJcmFpc2UgU3lzdGVtRXhpdAoJCglpZiBub3QgcmFuZG9tQmlucyBhbmQgbGVuKG1hdHJpeFs6LDFdKSAhPSBsZW4obWF0cml4WzEsOl0pOgoJCXByaW50IGxlbihtYXRyaXhbOiwxXSksbGVuKG1hdHJpeFsxLDpdKQoJCXByaW50ID4+c3lzLnN0ZGVyciwgJ3VuYmFsYW5jZWQgbWF0cml4KCcrZmlsZW5hbWUrJykhIGlucHV0IHNob3VsZCBiZSBhIHNxdWFyZSBtYXRyaXgnCgkJcmFpc2UgU3lzdGVtRXhpdAoJCglpZiBwbG90SW5zdWxhdGlvbiBvciBwbG90VGFkRG9tYWlucyBhbmQgbm90IHJhbmRvbUJpbnM6IG51bXMsdHJpY2tzPWluc3VsYXRpb24obWF0cml4LGluc193aW5kb3cscmVsX3dpbmRvdykKCWVsc2U6IG51bXM9W107dHJpY2tzPVtdOwoJCglpZiBjbGVhbl9uYW5zOiBtYXRyaXhbbnAuaXNuYW4obWF0cml4KV09MAoJbWF0cml4W21hdHJpeDxzbW9vdGhfbm9pc2VdPTAKCXJldHVybiBtYXRyaXgsbnVtcyx0cmlja3MKCgpkZWYgcmVhZF9zcGFyc2VIaUNkYXRhKGZpbGVuYW1lLGNocm9tb3NvbWUsYmVkRmlsZSxzdGFydEJpbixlbmRCaW4sd2hvbGVHZW5vbWU9RmFsc2Usc21vb3RoX25vaXNlPTAuNSxpbnNfd2luZG93PTUscmVsX3dpbmRvdz04LHBsb3RJbnN1bGF0aW9uPVRydWUscGxvdFRhZERvbWFpbnM9RmFsc2UscmFuZG9tQmlucz1GYWxzZSxhbmNob3I9MCk6CgkJCQkJCQoJJycnCiAgICBsb2FkIEhpLUMgaW50ZXJhY3Rpb24gbWF0cml4IGZyb20gdHJpcGxlLWNvbHVtbiBzcGFyc2UgZmlsZQogICAgCiAgICBwYXJhbWV0ZXJzOgoKICAgIGZpbGVuYW1lOiBmaWxlIG5hbWUuIGZvcm1hdCAiYmluMVx0YmluMlx0ZGF0YVxuLi4uIgogICAgY2hyb21vc29tZTogcGxvdHRpbmcgd2hpY2ggY2hyb21vc29tZQogICAgYmVkRmlsZTogYSBiZWQgZmlsZSBmb3IgbG9jYXRpb25zIG9mIGJpbnMKICAgIHN0YXJ0QmluOiBzdGFydGluZyBiaW4gLSAwIHplcm8tYmFzZWQKICAgIGVuZEJpbjogZW5kIHBvaW50IGZvciB0aGUgcGxvdAogICAgd2hvbGVHZW5vbWU6IGZvciBwbG90dGluZyBtb3JlIHRoYW4gb25lIGNocm9tb3NvbWUgaW50ZXJhY3Rpb25zLiBjaHJvbW9zb21lIHBhcmFtZXRlciB3aWxsIGJlIHVzZWQgZm9yIHVudGlsIHdoaWNoIGNocm9tb3NvbWUgaW50ZXJhY3Rpb25zIHdpbGwgYmUgcGxvdHRlZC4KICAgIHNtb290aF9ub2lzZTogdmFyaWFibGUgdmFsdWVzIHVuZGVyIHdpbGwgYmUgcmVwbGFjZSB3"}}]
["a573f76f599eae27b6d4b96e159fccb6e1d6b75f-5","a573f76f599eae27b6d4b96e159fccb6e1d6b75f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBwYW5kYXMgYXMgcGQKCmRlZiBMb2FkRGF0YSgpOgoJcGFzcwoKIyBUaGlzIGZ1Y250aW9uIGNyZWF0ZXMgYV9paiBtYXRyaXgJCmRlZiBDcmVhdGVUcmFuc2l0aW9uUHJvYnMoKToKCXBhc3MKCQpkZWYgQ3JlYXRlRW1pdGlvblByb2JzKCk6CglwYXNzCgpkZWYgQ3JlYXRlQWxwaGFzKCk6CglwYXNzCgkJCmRlZiBSdW5WZXJ0aWJyaSgpOgoJcGFzcwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoJCiMgTG9hZCBEYXRhCiMgQXNzdW1lIHRoZSBsYXN0IG9ic2VydmF0aW9uIGlzIGZvciB0b2RheQo8fGZpbV9lbmR8Pg=="]
["59c48c39bd31b36345dca8fcc1e54a7f1fa2c6c3-2","59c48c39bd31b36345dca8fcc1e54a7f1fa2c6c3","PHxmaW1fcHJlZml4fD4KZnJvbSBnbG9iIGltcG9ydCBnbG9iCmZyb20gbmF0c29ydCBpbXBvcnQgbmF0c29ydGVkCmltcG9ydCBvcwppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKaW1wb3J0IGZ1bmN0b29scwpmcm9tIG1wbF90b29sa2l0cyBpbXBvcnQgbXBsb3QzZAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CgpiYXRjaF9zaXplID0gMTYKCmRlZiBmZXRjaF9kYXRhKHBhdGgsIGNhdF9kaWN0KToKCXBhdGggPSBwYXRoLm51bXB5KCkuZGVjb2RlKCd1dGYtOCcpCglYICAgID0gbnAubG9hZChwYXRoKQoJWSAgICA9IGNhdF9kaWN0W3BhdGguc3BsaXQob3MucGF0aC5zZXApWzFdXQoJcmV0dXJuIFgsIFkKCmRlZiBsb2FkX2JhdGNoKHBhdGgsIGJhdGNoX3NpemU9MTYpOgoJcmV0dXJuIHRmLmRhdGEuRGF0YXNldC5mcm9tX3RlbnNvcl9zbGljZXMoKHBhdGgpKS5zaHVmZmxlKGxlbihwYXRoKSkuYmF0Y2goYmF0Y2hfc2l6ZSwgZHJvcF9yZW1haW5kZXI9VHJ1ZSkKCmRlZiBsb2FkX2RhdGEocGF0aCwgY2F0X2RpY3QpOgoJWCwgWSA9IGxpc3QoemlwKCptYXAoZnVuY3Rvb2xzLnBhcnRpYWwoZmV0Y2hfZGF0YSwgY2F0X2RpY3Q9Y2F0X2RpY3QpLCBwYXRoKSkpCjx8ZmltX2hvbGV8PgpkZWYgdmlld19kYXRhKFgsIFksIGNhdF9kaWN0LCByZXZfY2F0X2RpY3QpOgoJaWYgbm90IG9zLnBhdGguaXNkaXIoJ3NhdmVfZmlnJyk6CgkJb3MubWFrZWRpcnMoJ3NhdmVfZmlnJykKCglmb3IgaWR4LCAoc2hhcGUsIGNhdCkgaW4gZW51bWVyYXRlKHppcChYLCBZKSk6CgkJc2hhcGUgPSBzaGFwZS5udW1weSgpCgkJY2F0ICAgPSBjYXQubnVtcHkoKQoJCWF4ICAgID0gcGx0LmF4ZXMocHJvamVjdGlvbj0nM2QnKQoJCWF4LnNjYXR0ZXIzRChzaGFwZVs6LCAwXSwgc2hhcGVbOiwgMV0sIHNoYXBlWzosIDJdKQoJCXBsdC50aXRsZSgnQ2F0ZWdvcnk6IHswfScuZm9ybWF0KHJldl9jYXRfZGljdFtjYXRdKSkKCQlwbHQuc2F2ZWZpZygnc2F2ZV9maWcvezB9LnBuZycuZm9ybWF0KGlkeCkpCgpkZWYgdmlld19yZXN1bHRzKG1vZGVsLCBsYXRlbnRfZGltLCBiYXRjaF9zaXplLCBjYXRlZywgZmlsZW5vKToKCWlmIG5vdCBvcy5wYXRoLmlzZGlyKCdyZXN1bHRzJyk6CgkJb3MubWFrZWRpcnMoJ3Jlc3VsdHMvdHJhaW4vJykKCQlvcy5tYWtlZGlycygncmVzdWx0cy92YWwvJykKCWlkeCAgID0gbnAucmFuZG9tLnJhbmRpbnQoMCwgYmF0Y2hfc2l6ZS0xKQoJdHJlZSAgPSBbdGYucmFuZG9tLnVuaWZvcm0oc2hhcGU9W2JhdGNoX3NpemUsIDEsIGxhdGVudF9kaW1dKV0KCVggICAgID0gbW9kZWwuZ2VuKHRyZWUsIHRyYWluaW5nPUZhbHNlKVtpZHhdCglheCAgICA9IHBsdC5heGVzKHByb2plY3Rpb249JzNkJykKCWF4LnNjYXR0ZXIzRChYWzosIDBdLCBYWzosIDFdLCBYWzosIDJdKQoJcGx0LnNhdmVmaWcoJ3Jlc3VsdHMvezB9L3sxfS5wbmcnLmZvcm1hdChjYXRlZywgZmlsZW5vKSkKPHxmaW1fc3VmZml4fD4KCVggICAgPSB0Zi5jb252ZXJ0X3RvX3RlbnNvcihYLCBkdHlwZT0nZmxvYXQzMicpCglZICAgID0gdGYuY29udmVydF90b190ZW5zb3IoWSwgZHR5cGU9J2ludDMyJykKCXJldHVybiBYLCBZCgo8fGZpbV9lbmR8Pg=="]
["05be785647553646c4fe7b12f8124b5f23cdcad1-4","05be785647553646c4fe7b12f8124b5f23cdcad1","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gb2RvbyBpbXBvcnQgbW9kZWxzLCBmaWVsZHMsIGFwaQoKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IGxydV9jYWNoZQoKCmNsYXNzIEFjY291bnRJbnZvaWNlUmVwb3J0KG1vZGVscy5Nb2RlbCk6CiAgICBfbmFtZSA9ICJhY2NvdW50Lmludm9pY2UucmVwb3J0IgogICAgX2Rlc2NyaXB0aW9uID0gIkludm9pY2VzIFN0YXRpc3RpY3MiCiAgICBfYXV0byA9IEZhbHNlCiAgICBfcmVjX25hbWUgPSAnaW52b2ljZV9kYXRlJwogICAgX29yZGVyID0gJ2ludm9pY2VfZGF0ZSBkZXNjJwoKICAgICMgPT09PSBJbnZvaWNlIGZpZWxkcyA9PT09CiAgICBtb3ZlX2lkID0gZmllbGRzLk1hbnkyb25lKCdhY2NvdW50Lm1vdmUnLCByZWFkb25seT1UcnVlKQogICAgam91cm5hbF9pZCA9IGZpZWxkcy5NYW55Mm9uZSgnYWNjb3VudC5qb3VybmFsJywgc3RyaW5nPSdKb3VybmFsJywgcmVhZG9ubHk9VHJ1ZSkKICAgIGNvbXBhbnlfaWQgPSBmaWVsZHMuTWFueTJvbmUoJ3Jlcy5jb21wYW55Jywgc3RyaW5nPSdDb21wYW55JywgcmVhZG9ubHk9VHJ1ZSkKICAgIGNvbXBhbnlfY3VycmVuY3lfaWQgPSBmaWVsZHMuTWFueTJvbmUoJ3Jlcy5jdXJyZW5jeScsIHN0cmluZz0nQ29tcGFueSBDdXJyZW5jeScsIHJlYWRvbmx5PVRydWUpCiAgICBwYXJ0bmVyX2lkID0gZmllbGRzLk1hbnkyb25lKCdyZXMucGFydG5lcicsIHN0cmluZz0nUGFydG5lcicsIHJlYWRvbmx5PVRydWUpCiAgICBjb21tZXJjaWFsX3BhcnRuZXJfaWQgPSBmaWVsZHMuTWFueTJvbmUoJ3Jlcy5wYXJ0bmVyJywgc3RyaW5nPSdQYXJ0bmVyIENvbXBhbnknLCBoZWxwPSJDb21tZXJjaWFsIEVudGl0eSIpCiAgICBjb3VudHJ5X2lkID0gZmllbGRzLk1hbnkyb25lKCdyZXMuY291bnRyeScsIHN0cmluZz0iQ291bnRyeSIpCiAgICBpbnZvaWNlX3VzZXJfaWQgPSBmaWVsZHMuTWFueTJvbmUoJ3Jlcy51c2VycycsIHN0cmluZz0nU2FsZXNwZXJzb24nLCByZWFkb25seT1UcnVlKQogICAgbW92ZV90eXBlID0gZmllbGRzLlNlbGVjdGlvbihbCiAgICAgICAgKCdvdXRfaW52b2ljZScsICdDdXN0b21lciBJbnZvaWNlJyksCiAgICAgICAgKCdpbl9pbnZvaWNlJywgJ1ZlbmRvciBCaWxsJyksCiAgICAgICAgKCdvdXRfcmVmdW5kJywgJ0N1c3RvbWVyIENyZWRpdCBOb3RlJyksCiAgICAgICAgKCdpbl9yZWZ1bmQnLCAnVmVuZG9yIENyZWRpdCBOb3RlJyksCiAgICAgICAgXSwgcmVhZG9ubHk9VHJ1ZSkKICAgIHN0YXRlID0gZmllbGRzLlNlbGVjdGlvbihbCiAgICAgICAgKCdkcmFmdCcsICdEcmFmdCcpLAogICAgICAgICgncG9zdGVkJywgJ09wZW4nKSwKICAgICAgICAoJ2NhbmNlbCcsICdDYW5jZWxsZWQnKQogICAgICAgIF0sIHN0cmluZz0nSW52b2ljZSBTdGF0dXMnLCByZWFkb25seT1UcnVlKQogICAgcGF5bWVudF9zdGF0ZSA9IGZpZWxkcy5TZWxlY3Rpb24oc2VsZWN0aW9uPVsKICAgICAgICAoJ25vdF9wYWlkJywgJ05vdCBQYWlkJyksCiAgICAgICAgKCdpbl9wYXltZW50JywgJ0luIFBheW1lbnQnKSwKICAgICAgICAoJ3BhaWQnLCAncGFpZCcpCiAgICBdLCBzdHJpbmc9J1BheW1lbnQgU3RhdHVzJywgcmVhZG9ubHk9VHJ1ZSkKICAgIGZpc2NhbF9wb3NpdGlvbl9pZCA9IGZpZWxkcy5NYW55Mm9uZSgnYWNjb3VudC5maXNjYWwucG9zaXRpb24nLCBzdHJpbmc9J0Zpc2NhbCBQb3NpdGlvbicsIHJlYWRvbmx5PVRydWUpCiAgICBpbnZvaWNlX2RhdGUgPSBmaWVsZHMuRGF0ZShyZWFkb25seT1UcnVlLCBzdHJpbmc9Ikludm9pY2UgRGF0ZSIpCgogICAgIyA9PT09IEludm9pY2UgbGluZSBmaWVsZHMgPT09PQogICAgcXVhbnRpdHkgPSBmaWVsZHMuRmxvYXQoc3RyaW5nPSdQcm9kdWN0IFF1YW50aXR5JywgcmVhZG9ubHk9VHJ1ZSkKICAgIHByb2R1Y3RfaWQgPSBmaWVsZHMuTWFueTJvbmUoJ3Byb2R1Y3QucHJvZHVjdCcsIHN0cmluZz0nUHJvZHVjdCcsIHJlYWRvbmx5PVRydWUpCiAgICBwcm9kdWN0X3VvbV9pZCA9IGZpZWxkcy5NYW55Mm9uZSgndW9tLnVvbScsIHN0cmluZz0nVW5pdCBvZiBNZWFzdXJlJywgcmVhZG9ubHk9VHJ1ZSkKICAgIHByb2R1Y3RfY2F0ZWdfaWQgPSBmaWVsZHMuTWFueTJvbmUoJ3Byb2R1Y3QuY2F0ZWdvcnknLCBzdHJpbmc9J1Byb2R1Y3QgQ2F0ZWdvcnknLCByZWFkb25seT1UcnVlKQogICAgaW52b2ljZV9kYXRlX2R1ZSA9IGZpZWxkcy5EYXRlKHN0cmluZz0nRHVlIERhdGUnLCByZWFkb25seT1UcnVlKQogICAgYWNjb3VudF9pZCA9IGZpZWxkcy5NYW55Mm9uZSgnYWNjb3VudC5hY2NvdW50Jywgc3RyaW5nPSdSZXZlbnVlL0V4cGVuc2UgQWNjb3VudCcsIHJlYWRvbmx5PVRydWUsIGRvbWFpbj1bKCdkZXByZWNhdGVkJywgJz0nLCBGYWxzZSldKQogICAgYW5hbHl0aWNfYWNjb3VudF9pZCA9IGZpZWxkcy5NYW55Mm9uZSgnYWNjb3VudC5hbmFseXRpYy5hY2NvdW50Jywgc3RyaW5nPSdBbmFseXRpYyBBY2NvdW50JywgZ3JvdXBzPSJhbmFseXRpYy5ncm91cF9hbmFseXRpY19hY2NvdW50aW5nIikKICAgIHByaWNlX3N1YnRvdGFsID0gZmllbGRzLkZsb2F0KHN0cmluZz0nVW50YXhlZCBUb3RhbCcsIHJlYWRvbmx5PVRydWUpCiAgICBwcmljZV9hdmVyYWdlID0gZmllbGRzLkZsb2F0KHN0cmluZz0nQXZlcmFnZSBQcmljZScsIHJlYWRvbmx5PVRydWUsIGdyb3VwX29wZXJhdG9yPSJhdmciKQoKICAgIF9kZXBlbmRzID0gewogICAgICAgICdhY2NvdW50Lm1vdmUnOiBbCiAgICAgICAgICAgICduYW1lJywgJ3N0YXRlJywgJ21vdmVfdHlwZScsICdwYXJ0bmVyX2lkJywgJ2ludm9pY2VfdXNlcl9pZCcsICdmaXNjYWxfcG9zaXRpb25faWQnLAogICAgICAgICAgICAnaW52b2ljZV9kYXRlJywgJ2ludm9pY2VfZGF0ZV9kdWUnLCAnaW52b2ljZV9wYXltZW50X3Rlcm1faWQnLCAncGFydG5lcl9iYW5rX2lkJywKICAgICAgICBdLAogICAgICAgICdhY2NvdW50Lm1vdmUubGluZSc6IFsKICAgICAgICAgICAgJ3F1YW50aXR5JywgJ3ByaWNlX3N1YnRvdGFsJywgJ2Ftb3VudF9yZXNpZHVhbCcsICdiYWxhbmNlJywgJ2Ftb3VudF9jdXJyZW5jeScsCiAgICAgICAgICAgICdtb3ZlX2lkJywgJ3Byb2R1Y3RfaWQnLCAncHJvZHVjdF91b21faWQnLCAnYWNjb3VudF9pZCcsICdhbmFseXRpY19hY2NvdW50X2lkJywKICAgICAgICAgICAgJ2pvdXJuYWxfaWQnLCAnY29tcGFueV9pZCcsICdjdXJyZW5jeV9pZCcsICdwYXJ0bmVyX2lkJywKICAgICAgICBdLAogICAgICAgICdwcm9kdWN0LnByb2R1Y3QnOiBbJ3Byb2R1Y3RfdG1wbF9pZCddLAogICAgICAgICdwcm9kdWN0LnRlbXBsYXRlJzogWydjYXRlZ19pZCddLAogICAgICAgICd1b20udW9tJzogWydjYXRlZ29yeV9pZCcsICdmYWN0b3InLCAnbmFtZScsICd1b21fdHlwZSddLAogICAgICAgICdyZXMuY3VycmVuY3kucmF0ZSc6IFsnY3VycmVuY3lfaWQnLCAnbmFtZSddLAogICAgICAgICdyZXMucGFydG5lcic6IFsnY291bnRyeV9pZCddLAogICAgfQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIF90YWJsZV9xdWVyeShzZWxmKToKICAgICAgICByZXR1cm4gJyVzICVzICVzJyAlIChzZWxmLl9zZWxlY3QoKSwgc2VsZi5fZnJvbSgpLCBzZWxmLl93aGVyZSgpKQoKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICBsaW5lLmlkLAogICAgICAgICAgICAgICAgbGluZS5tb3ZlX2lkLAogICAgICAgICAgICAgICAgbGluZS5wcm9kdWN0X2lkLAogICAgICAgICAgICAgICAgbGluZS5hY2NvdW50X2lkLAogICAgICAgICAgICAgICAgbGluZS5hbmFseXRpY19hY2NvdW50X2lkLAogICAgICAgICAgICAgICAgbGluZS5qb3VybmFsX2lkLAogICAgICAgICAgICAgICAgbGluZS5jb21wYW55X2lkLAogICAgICAgICAgICAgICAgbGluZS5jb21wYW55X2N1cnJlbmN5X2lkLAogICAgICAgICAgICAgICAgbGluZS5wYXJ0bmVyX2lkIEFTIGNvbW1lcmNpYWxfcGFydG5lcl9pZCwKICAgICAgICAgICAgICAgIG1vdmUuc3RhdGUsCiAgICAgICAgICAgICAgICBtb3ZlLm1vdmVfdHlwZSwKICAgICAgICAgICAgICAgIG1vdmUucGFydG5lcl9pZCwKICAgICAgICAgICAgICAgIG1vdmUuaW52b2ljZV91c2VyX2lkLAogICAgICAgICAgICAgICAgbW92ZS5maXNjYWxfcG9zaXRpb25faWQsCiAgICAgICAgICAgICAgICBtb3ZlLnBheW1lbnRfc3RhdGUsCiAgICAgICAgICAgICAgICBtb3ZlLmludm9pY2VfZGF0ZSwKICAgICAgICAgICAgICAgIG1vdmUuaW52b2ljZV9kYXRlX2R1ZSwKICAgICAgICAgICAgICAgIHVvbV90ZW1wbGF0ZS5pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTIHByb2R1Y3RfdW9tX2lkLAogICAgICAgICAgICAgICAgdGVtcGxhdGUuY2F0ZWdfaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVMgcHJvZHVjdF9jYXRlZ19pZCwKICAgICAgICAgICAgICAgIGxpbmUucXVhbnRpdHkgLyBOVUxMSUYoQ09BTEVTQ0UodW9tX2xpbmUuZmFjdG9yLCAxKSAvIENPQUxFU0NFKHVvbV90ZW1wbGF0ZS5mYWN0b3IsIDEpLCAwLjApICogKENBU0UgV0hFTiBtb3ZlLm1vdmVfdHlwZSBJTiAoJ2luX2ludm9pY2UnLCdvdXRfcmVmdW5kJywnaW5fcmVjZWlwdCcpIFRIRU4gLTEgRUxTRSAxIEVORCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTIHF1YW50aXR5LAogICAgICAgICAgICAgICAgLWxpbmUuYmFsYW5jZSAqIGN1cnJlbmN5X3RhYmxlLnJhdGUgICAgICAgICAgICAgICAgICAgICAgICAgQVMgcHJpY2Vfc3VidG90YWwsCiAgICAgICAgICAgICAgICAtQ09BTEVTQ0UoCiAgICAgICAgICAgICAgICAgICAtLSBBdmVyYWdlIGxpbmUgcHJpY2UKICAgICAgICAgICAgICAgICAgIChsaW5lLmJhbGFuY2UgLyBOVUxMSUYobGluZS5xdWFudGl0eSwgMC4wKSkKICAgICAgICAgICAgICAgICAgIC0tIGNvbnZlcnQgdG8gdGVtcGxhdGUgdW9tCiAgICAgICAgICAgICAgICAgICAqIChOVUxMSUYoQ09BTEVTQ0UodW9tX2xpbmUuZmFjdG9yLCAxKSwgMC4wKSAvIE5VTExJRihDT0FMRVNDRSh1b21fdGVtcGxhdGUuZmFjdG9yLCAxKSwgMC4wKSksCiAgICAgICAgICAgICAgICAgICAwLjApICogY3VycmVuY3lfdGFibGUucmF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUyBwcmljZV9hdmVyYWdlLAogICAgICAgICAgICAgICAgQ09BTEVTQ0UocGFydG5lci5jb3VudHJ5X2lkLCBjb21tZXJjaWFsX3BhcnRuZXIuY291bnRyeV9pZCkgQVMgY291bnRyeV9pZAogICAgICAgICcnJwoKICAgIEBhcGkubW9kZWwKICAgIGRlZiBfZnJvbShzZWxmKToKICAgICAgICByZXR1cm4gJycnCiAgICAgICAgICAgIEZST00gYWNjb3VudF9tb3ZlX2xpbmUgbGluZQogICAgICAgICAgICAgICAgTEVGVCBKT0lOIHJlc19wYXJ0bmVyIHBhcnRuZXIgT04gcGFydG5lci5pZCA9IGxpbmUucGFydG5lcl9pZAogICAgICAgICAgICAgICAgTEVGVCBKT0lOIHByb2R1Y3RfcHJvZHVjdCBwcm9kdWN0IE9OIHByb2R1Y3QuaWQgPSBsaW5lLnByb2R1Y3RfaWQKICAgICAgICAgICAgICAgIExFRlQgSk9JTiBhY2NvdW50X2FjY291bnQgYWNjb3VudCBPTiBhY2NvdW50LmlkID0gbGluZS5hY2NvdW50X2lkCiAgICAgICAgICAgICAgICBMRUZUIEpPSU4gYWNjb3VudF9hY2NvdW50X3R5cGUgdXNlcl90eXBlIE9OIHVzZXJfdHlwZS5pZCA9IGFjY291bnQudXNlcl90eXBlX2lkCiAgICAgICAgICAgICAgICBMRUZUIEpPSU4gcHJvZHVjdF90ZW1wbGF0ZSB0ZW1wbGF0ZSBPTiB0ZW1wbGF0ZS5pZCA9IHByb2R1Y3QucHJvZHVjdF90bXBsX2lkCiAgICAgICAgICAgICAgICBMRUZUIEpPSU4gdW9tX3VvbSB1b21fbGluZSBPTiB1b21fbGluZS5pZCA9IGxpbmUucHJvZHVjdF91b21faWQKICAgICAgICAgICAgICAgIExFRlQgSk9JTiB1b21fdW9tIHVvbV90ZW1wbGF0ZSBPTiB1b21fdGVtcGxhdGUuaWQgPSB0ZW1wbGF0ZS51b21faWQKICAgICAgICAgICAgICAgIElOTkVSIEpPSU4gYWNjb3VudF9tb3ZlIG1vdmUgT04gbW92ZS5pZCA9IGxpbmUubW92ZV9pZAogICAgICAgICAgICAgICAgTEVGVCBKT0lOIHJlc19wYXJ0bmVyIGNvbW1lcmNpYWxfcGFydG5lciBPTiBjb21tZXJjaWFsX3BhcnRuZXIuaWQgPSBtb3ZlLmNvbW1lcmNpYWxfcGFydG5lcl9pZAogICAgICAgICAgICAgICAgSk9JTiB7Y3VycmVuY3lfdGFibGV9IE9OIGN1cnJlbmN5X3RhYmxlLmNvbXBhbnlfaWQgPSBsaW5lLmNvbXBhbnlfaWQKICAgICAgICAnJycuZm9ybWF0KAogICAgICAgICAgICBjdXJyZW5jeV90YWJsZT1zZWxmLmVudlsncmVzLmN1cnJlbmN5J10uX2dldF9xdWVyeV9jdXJyZW5jeV90YWJsZSh7J211bHRpX2NvbXBhbnknOiBUcnVlLCAnZGF0ZSc6IHsnZGF0ZV90byc6IGZpZWxkcy5EYXRlLnRvZGF5KCl9fSksCiAgICAgICAgKQoKICAgIEBhcGkubW9kZWwKICAgIGRlZiBfd2hlcmUoc2VsZik6CiAgICAgICAgcmV0dXJuICcnJwogICAgICAgICAgICBXSEVSRSBtb3ZlLm1vdmVfdHlwZSBJTiAoJ291dF9pbnZvaWNlJywgJ291dF9yZWZ1bmQnLCAnaW5faW52b2ljZScsICdpbl9yZWZ1bmQnLCAnb3V0X3JlY2VpcHQnLCAnaW5fcmVjZWlwdCcpCiAgICAgICAgICAgICAgICBBTkQgbGluZS5hY2NvdW50X2lkIElTIE5PVCBOVUxMCiAgICAgICAgICAgICAgICBBTkQgTk9UIGxpbmUuZXhjbHVkZV9mcm9tX2ludm9pY2VfdGFiCiAgICAgICAgJycnCgoKY2xhc3MgUmVwb3J0SW52b2ljZVdpdGhvdXRQYXltZW50KG1vZGVscy5BYnN0cmFjdE1vZGVsKToKICAgIF9uYW1lID0gJ3JlcG9ydC5hY2NvdW50LnJlcG9ydF9pbnZvaWNlJwogICAgX2Rlc2NyaXB0aW9uID0gJ0FjY291bnQgcmVwb3J0IHdpdGhvdXQgcGF5bWVudCBsaW5lcycKCiAgICBAYXBpLm1vZGVsCiAgICBkZWYgX2dldF9yZXBvcnRfdmFsdWVzKHNlbGYsIGRvY2lkcywgZGF0YT1Ob25lKToKICAgICAgICBkb2NzID0gc2VsZi5lbnZbJ2FjY291bnQubW92ZSddLmJyb3dzZShkb2NpZHMpCgogICAgICAgIHFyX2NvZGVfdXJscyA9IHt9CiAgICAgICAgZm9yIGludm9pY2UgaW4gZG9jczoKICAgICAgICAgICAgaWYgaW52b2ljZS5kaXNwbGF5X3FyX2NvZGU6CiAgICAgICAgICAgICAgICBuZXdfY29kZV91cmwgPSBpbnZvaWNlLmdlbmVyYXRlX3FyX2NvZGUoKQogICAgICAgICAgICAgICAgaWYgbmV3X2NvZGVfdXJsOgogICAgICAgICAgICAgICAgICAgIHFyX2NvZGVfdXJsc1tpbnZvaWNlLmlkXSA9IG5ld19jb2RlX3VybAoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAnZG9jX2lkcyc6IGRvY2lkcywKICAgICAgICAgICAgJ2RvY19tb2RlbCc6ICdhY2NvdW50Lm1vdmUnLAogICAgICAgICAgICAnZG9jcyc6IGRvY3MsCiAgICAgICAgICAgICdxcl9jb2RlX3VybHMnOiBxcl9jb2RlX3VybHMsCiAgICAgICAgfQoKY2xhc3MgUmVwb3J0SW52b2ljZVdpdGhQYXltZW50KG1vZGVscy5BYnN0cmFjdE1vZGVsKToKICAgIF9uYW1lID0gJ3JlcG9ydC5hY2NvdW50LnJlcG9ydF9pbnZvaWNlX3dpdGhfcGF5bWVudHMnCiAgICBfZGVzY3JpcHRpb24gPSAnQWNjb3VudCByZXBvcnQgd2l0aCBwYXltZW50IGxpbmVzJwogICAgX2luaGVyaXQgPSAncmVwb3J0LmFjY291bnQucmVwb3J0X2ludm9pY2UnCgogICAgQGFwaS5tb2RlbAogICAgZGVmIF9nZXRfcmVwb3J0X3ZhbHVlcyhzZWxmLCBkb2NpZHMsIGRhdGE9Tm9uZSk6CiAgICAgICAgcnNsdCA9IHN1cGVyKCkuX2dldF9yZXBvcnRfdmFsdWVzKGRvY2lkcywgZGF0YSkKICAgICAgICByc2x0WydyZXBvcnRfdHlwZSddID0gZGF0YS5nZXQoJ3JlcG9ydF90eXBlJykgaWYgZGF0YSBlbHNlICcnCiAgICAgICAgcmV0dXJuIHJzbHQKPHxmaW1fc3VmZml4fD4KICAgIEBhcGkubW9kZWwKICAgIGRlZiBfc2VsZWN0KHNlbGYpOgogICAgICAgIHJldHVybiAnJycKICAgICAgICAgICAgU0VMRUNUCjx8ZmltX2VuZHw+"]
["95af5de35b0f23d589f8b2aae6e79e06b1d899b7-1","95af5de35b0f23d589f8b2aae6e79e06b1d899b7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCmltcG9ydCBvcwpmcm9tIHRvcmNodmlzaW9uIGltcG9ydCBkYXRhc2V0cwoKY2xhc3MgSW1hZ2VGb2xkZXJXaXRoUGF0aHMoZGF0YXNldHMuSW1hZ2VGb2xkZXIpOgoJZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKCQkKCQlvcmlnaW5hbF90dXBsZSA9IHN1cGVyKEltYWdlRm9sZGVyV2l0aFBhdGhzLCBzZWxmKS5fX2dldGl0ZW1fXyhpbmRleCkKCQkKCQlwYXRoID0gc2VsZi5pbWdzW2luZGV4XVswXQoJCQoJCXR1cGxlX3dpdGhfcGF0aCA9IChvcmlnaW5hbF90dXBsZSArIChwYXRoLCkpIAoJCQoJCXJldHVybiB0dXBsZV93aXRoX3BhdGgKCQoJZGVmIGluZGV4MmNsYXNzbGlzdChzZWxmKToKCQkKCQlyZXR1cm4gc2VsZi5fZmluZF9jbGFzc2VzXyhzZWxmLnJvb3QpCgoJZGVmIF9maW5kX2NsYXNzZXNfKHNlbGYsIGRpcik6CgkJIiIiCgkJbGlzdCA6IGluZGV4IG9mIGxpc3QgY29yZXNwb25kaW5nIHRvIGNsYXNzbmFtZQoJCSIiIgoJCQo8fGZpbV9ob2xlfD4KCQlyZXR1cm4gY2xhc3Nlc19saXN0Cjx8ZmltX3N1ZmZpeHw+CgkJY2xhc3Nlc19saXN0ID0gW2QgZm9yIGQgaW4gb3MubGlzdGRpcihkaXIpIGlmIG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKGRpciwgZCkpXQoJCQoJCWNsYXNzZXNfbGlzdC5zb3J0KCkKCQkKPHxmaW1fZW5kfD4="]
["280baefd3be65fff5a019309edfa1ed526f5923c-2","280baefd3be65fff5a019309edfa1ed526f5923c",{"$cut":{"chars":18144,"head":"PHxmaW1fcHJlZml4fD4KREVCVUcgPSBGYWxzZQpVTklUX1RFU1RfREVCVUcgPSBGYWxzZQoKUEFDS0FHRV9OQU1FID0gIkNsYXNzZXNBbmRUZXN0cyIKUEFDS0FHRV9WRVJTSU9OID0gIjAuNS4wIgoKaW1wb3J0IG9zCnRyeToKICAgIGltcG9ydCBzdWJsaW1lCiAgICBpbXBvcnQgc3VibGltZV9wbHVnaW4KZXhjZXB0IEltcG9ydEVycm9yOgogICAgZnJvbSBzcmMubW9ja2luZy5zdWJsaW1lIGltcG9ydCBzdWJsaW1lCiAgICBmcm9tIHNyYy5tb2NraW5nIGltcG9ydCBzdWJsaW1lX3BsdWdpbgogICAgaWYgVU5JVF9URVNUX0RFQlVHOgogICAgICAgIERFQlVHID0gVHJ1ZQogICAgICAgIHByaW50KCJDbGFzc2VzQW5kVGVzdHNDb21tYW5kOiBzdWJsaW1lIGFuZCBzdWJsaW1lX3BsdWdpbiBub3QgaW1wb3J0ZWQgaW4gIiArIF9fZmlsZV9fKQogICAgZWxzZToKICAgICAgICBERUJVRyA9IEZhbHNlCgpkZWYgcGx1Z2luX2xvYWRlZCgpOgogICAgZ2xvYmFsIHNldHRpbmdzCiAgICBnbG9iYWwgUEFDS0FHRV9ESVIKICAgIGdsb2JhbCBURU1QTEFURVNfRElSCiAgICBzZXR0aW5ncyA9IHN1YmxpbWUubG9hZF9zZXR0aW5ncyhQQUNLQUdFX05BTUUrICcuc3VibGltZS1zZXR0aW5ncycpCiAgICBQQUNLQUdFX0RJUiA9IG9zLnBhdGguam9pbihzdWJsaW1lLnBhY2thZ2VzX3BhdGgoKSwgUEFDS0FHRV9OQU1FKQogICAgVEVNUExBVEVTX0RJUiA9IG9zLnBhdGguam9pbihQQUNLQUdFX0RJUiwgInRlbXBsYXRlcyIpCgp0cnk6CiAgICBmcm9tIHNyYy5UZW1wbGF0ZUZpbGVDcmVhdG9yIGltcG9ydCBUZW1wbGF0ZUZpbGVDcmVhdG9yCiAgICBmcm9tIHNyYy5GaWxlQ29tcG9uZW50cyBpbXBvcnQgRmlsZUNvbXBvbmVudHMKICAgIGZyb20gc3JjLklucHV0UGFuZWwgaW1wb3J0IElucHV0UGFuZWwKICAgIGZyb20gc3JjLlN1YmxpbWVXaW5kb3dNYW5pcHVsYXRvciBpbXBvcnQgU3VibGltZVdpbmRvd01hbmlwdWxhdG9yCiAgICBmcm9tIHNyYy5GaWxlU3lzdGVtIGltcG9ydCBGaWxlU3lzdGVtCiAgICBmcm9tIHNyYy5NaXJyb3JlZERpcmVjdG9yeSBpbXBvcnQgTWlycm9yZWREaXJlY3RvcnkKICAgIGZyb20gc3JjLlN0ZCBpbXBvcnQgU3RkCiAgICBmcm9tIHNyYy5Vc2VyU2V0dGluZ3NTZXR0ZXIgaW1wb3J0IFVzZXJTZXR0aW5nc1NldHRlcgpleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBmcm9tIC5zcmMuVGVtcGxhdGVGaWxlQ3JlYXRvciBpbXBvcnQgVGVtcGxhdGVGaWxlQ3JlYXRvcgogICAgZnJvbSAuc3JjLkZpbGVDb21wb25lbnRzIGltcG9ydCBGaWxlQ29tcG9uZW50cwogICAgZnJvbSAuc3JjLklucHV0UGFuZWwgaW1wb3J0IElucHV0UGFuZWwKICAgIGZyb20gLnNyYy5TdWJsaW1lV2luZG93TWFuaXB1bGF0b3IgaW1wb3J0IFN1YmxpbWVXaW5kb3dNYW5pcHVsYXRvcgogICAgZnJvbSAuc3JjLkZpbGVTeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KICAgIGZyb20gLnNyYy5NaXJyb3JlZERpcmVjdG9yeSBpbXBvcnQgTWlycm9yZWREaXJlY3RvcnkKICAgIGZyb20gLnNyYy5TdGQgaW1wb3J0IFN0ZAogICAgZnJvbSAuc3JjLlVzZXJTZXR0aW5nc1NldHRlciBpbXBvcnQgVXNlclNldHRpbmdzU2V0dGVyCmVsc2U6CiAgICBwbHVnaW5fbG9hZGVkKCkKClVTRVJfU0VUVElOR1NfVE9fQkVfSU5JVElBTElaRUQgPSBbImF1dGhvciIsICJiYXNlX3BhdGgiLCAicGhwX2F1dG9sb2FkZXJfcGF0aCJdClVTRVJfU0VUVElOR1NfVE9fQkVfSU5JVElBTElaRURfUFJPTVBUUyA9IFsiRW50ZXIgYXV0aG9yIG5hbWU6IiwgIkVudGVyIGRlZmF1bHQgZGlyZWN0b3J5OiIsICJJZiBhdXRvLWxvYWRpbmcgcGhwIGNsYXNzZXMsIHByb3ZpZGUgcGF0aCB0byBhdXRvbG9hZGVyIGNsYXNzIGZpbGU6Il0KCmNsYXNzIENsYXNzZXNBbmRUZXN0c0NvbW1hbmQoc3VibGltZV9wbHVnaW4uV2luZG93Q29tbWFuZCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzdWJsaW1lX3BsdWdpbi5XaW5kb3dDb21tYW5kLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKCiAgICBkZWYgX2luaXRpYWxpemVEZXBlbmRlbmNpZXMoc2VsZik6CiAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgInN1YmxpbWUiKToKICAgICAgICAgICAgc2VsZi5zdWJsaW1lID0gc3VibGltZQogICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICJzZXR0aW5ncyIpOgogICAgICAgICAgICBzZWxmLnNldHRpbmdzID0gc2V0dGluZ3MKICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAid2luZG93TWFuaXB1bGF0b3IiKToKICAgICAgICAgICAgc2VsZi53aW5kb3dNYW5pcHVsYXRvciA9IFN1YmxpbWVXaW5kb3dNYW5pcHVsYXRvcihzZWxmLndpbmRvdywgc2VsZi5zZXR0aW5ncykKICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAiZmlsZVN5c3RlbSIpOgogICAgICAgICAgICBzZWxmLmZpbGVTeXN0ZW0gPSBGaWxlU3lzdGVtKCkKICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAibWlycm9yZWREaXJlY3RvcnkiKToKICAgICAgICAgICAgc2VsZi5taXJyb3JlZERpcmVjdG9yeSA9IE1pcnJvcmVkRGlyZWN0b3J5KCkKICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAidGVtcGxhdGVGaWxlQ3JlYXRvciIpOgogICAgICAgICAgICBzZWxmLnRlbXBsYXRlRmlsZUNyZWF0b3IgPSBUZW1wbGF0ZUZpbGVDcmVhdG9yKCkKCiAgICAgICAgc2VsZi5taXJyb3JlZERpcmVjdG9yeS5maWxlU3lzdGVtID0gc2VsZi5maWxlU3lzdGVtCiAgICAgICAgc2VsZi5taXJyb3JlZERpcmVjdG9yeS5zZXREZWZhdWx0RXh0ZW5zaW9uKHNlbGYuc2V0dGluZ3MuZ2V0KCdkZWZhdWx0X2ZpbGVfZXh0ZW5zaW9uJykpCgogICAgICAgIHNlbGYuc3BsaXRWaWV3ID0gc2VsZi5zZXR0aW5ncy5nZXQoInNlcGVyYXRlX3Rlc3RzX2FuZF9zb3VyY2VzX2J5X3NwbGl0X3ZpZXciKQoKICAgICAgICBzZWxmLnRlbXBsYXRlRmlsZUNyZWF0b3IuZmlsZVN5c3RlbSA9IHNlbGYuZmlsZVN5c3RlbQogICAgICAgIHNlbGYudGVtcGxhdGVGaWxlQ3JlYXRvci5zZXRTZXR0aW5ncyhzZWxmLnNldHRpbmdzKQogICAgICAgIHNlbGYudGVtcGxhdGVGaWxl"}}]
["c671fdd0b09d5615496a41ad4b2ad4924354b399-1","c671fdd0b09d5615496a41ad4b2ad4924354b399","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNvbGxlY3Rpb25zCmZyb20gYW1pdG9vbHMudmFtb3MubGliLkV4ZWNMaWJyYXJ5IGltcG9ydCBFeGVjTGlicmFyeQpmcm9tIGFtaXRvb2xzLnZhbW9zLmxpYi5WYW1vc1Rlc3RMaWJyYXJ5IGltcG9ydCBWYW1vc1Rlc3RMaWJyYXJ5CmZyb20gYW1pdG9vbHMudmFtb3MubGliLlZhbW9zVGVzdERldmljZSBpbXBvcnQgVmFtb3NUZXN0RGV2aWNlCmZyb20gYW1pdG9vbHMudmFtb3MubGliY29yZSBpbXBvcnQgVkxpYk1hbmFnZXIsIExpYlJlZ2lzdHJ5LCBMaWJDdHhNYXAKZnJvbSBhbWl0b29scy52YW1vcy5tYWNoaW5lIGltcG9ydCBNYWNoaW5lCmZyb20gYW1pdG9vbHMudmFtb3MubWVtIGltcG9ydCBNZW1vcnlBbGxvYwpmcm9tIGFtaXRvb2xzLnZhbW9zLmxpYi5sZXhlYy5FeGVjTGliQ3R4IGltcG9ydCBFeGVjTGliQ3R4CmZyb20gYW1pdG9vbHMudmFtb3MubG9hZGVyIGltcG9ydCBTZWdtZW50TG9hZGVyCgoKZGVmIHNldHVwKG1haW5fcHJvZmlsZXI9Tm9uZSwgcHJvZl9uYW1lcz1Ob25lLCBwcm9mX2NhbGxzPUZhbHNlKToKICAgIG1hY2hpbmUgPSBNYWNoaW5lKCkKICAgIGFsbG9jID0gTWVtb3J5QWxsb2MobWFjaGluZS5nZXRfbWVtKCksIG1hY2hpbmUuZ2V0X3JhbV9iZWdpbigpKQogICAgbWdyID0gVkxpYk1hbmFnZXIoCiAgICAgICAgbWFjaGluZSwKICAgICAgICBhbGxvYywKICAgICAgICBtYWluX3Byb2ZpbGVyPW1haW5fcHJvZmlsZXIsCiAgICAgICAgcHJvZl9uYW1lcz1wcm9mX25hbWVzLAogICAgICAgIHByb2ZfY2FsbHM9cHJvZl9jYWxscywKICAgICkKICAgICMgc2V0dXAgY3R4IG1hcAogICAgY3B1ID0gbWFjaGluZS5nZXRfY3B1KCkKICAgIG1lbSA9IG1hY2hpbmUuZ2V0X21lbSgpCiAgICBjcHVfdHlwZSA9IG1hY2hpbmUuZ2V0X2NwdV90eXBlKCkKICAgIHNlZ2xvYWRlciA9IFNlZ21lbnRMb2FkZXIoYWxsb2MpCiAgICBleGVjX2N0eCA9IEV4ZWNMaWJDdHgobWFjaGluZSwgYWxsb2MsIHNlZ2xvYWRlciwgTm9uZSkKICAgIG1nci5hZGRfY3R4KCJleGVjLmxpYnJhcnkiLCBleGVjX2N0eCkKICAgIG1nci5hZGRfaW1wbF9jbHMoImV4ZWMubGlicmFyeSIsIEV4ZWNMaWJyYXJ5KQogICAgbWdyLmFkZF9pbXBsX2NscygidmFtb3N0ZXN0LmxpYnJhcnkiLCBWYW1vc1Rlc3RMaWJyYXJ5KQogICAgbWdyLmFkZF9pbXBsX2NscygidmFtb3N0ZXN0ZGV2LmRldmljZSIsIFZhbW9zVGVzdERldmljZSkKICAgIHJldHVybiBtYWNoaW5lLCBhbGxvYywgbWdyCgoKZGVmIGxpYmNvcmVfbWdyX2Jvb3RzdHJhcF9zaHV0ZG93bl90ZXN0KCk6CiAgICBtYWNoaW5lLCBhbGxvYywgbWdyID0gc2V0dXAoKQogICAgIyBib290c3RyYXAgZXhlYwogICAgZXhlY192bGliID0gbWdyLmJvb3RzdHJhcF9leGVjKCkKICAgIGV4ZWNfYmFzZSA9IGV4ZWNfdmxpYi5nZXRfYWRkcigpCiAgICBleGVjX2xpYiA9IGV4ZWNfdmxpYi5nZXRfbGlicmFyeSgpCiAgICAjIG1ha2Ugc3VyZSBleGVjIGlzIGluIHBsYWNlCiAgICBhc3NlcnQgbWdyLmdldF92bGliX2J5X25hbWUoImV4ZWMubGlicmFyeSIpID09IGV4ZWNfdmxpYgogICAgYXNzZXJ0IG1nci5nZXRfdmxpYl9ieV9hZGRyKGV4ZWNfYmFzZSkgPT0gZXhlY192bGliCiAgICBhc3NlcnQgZXhlY19saWIub3Blbl9jbnQgPT0gMQogICAgYXNzZXJ0IG1hY2hpbmUuZ2V0X21lbSgpLnIzMig0KSA9PSBleGVjX2Jhc2UKICAgICMgd2UgY2FuJ3QgZXhwdW5nZSBleGVjCiAgICBhc3NlcnQgbm90IG1nci5leHB1bmdlX2xpYihleGVjX3ZsaWIpCiAgICAjIHNodXRkb3duCiAgICBsZWZ0ID0gbWdyLnNodXRkb3duKCkKICAgIGFzc2VydCBsZWZ0ID09IDAKICAgICMgZXhlYyBpcyBub3cgZ29uZSBhbmQgbWVtIGlzIHNhbmUKICAgIGFzc2VydCBhbGxvYy5pc19hbGxfZnJlZSgpCgoKZGVmIGxpYmNvcmVfbWdyX21ha2VfdGVzdCgpOgogICAgbWFjaGluZSwgYWxsb2MsIG1nciA9IHNldHVwKCkKICAgIGV4ZWNfdmxpYiA9IG1nci5ib290c3RyYXBfZXhlYygpCiAgICAjIG1ha2UgdmFtb3MgdGVzdCBsaWIKICAgIHRlc3RfdmxpYiA9IG1nci5tYWtlX2xpYl9uYW1lKCJ2YW1vc3Rlc3QubGlicmFyeSIpCiAgICB0ZXN0X2Jhc2UgPSB0ZXN0X3ZsaWIuZ2V0X2FkZHIoKQogICAgYXNzZXJ0IHRlc3RfdmxpYgogICAgYXNzZXJ0IG1nci5nZXRfdmxpYl9ieV9uYW1lKCJ2YW1vc3Rlc3QubGlicmFyeSIpID09IHRlc3RfdmxpYgogICAgYXNzZXJ0IG1nci5nZXRfdmxpYl9ieV9hZGRyKHRlc3RfYmFzZSkgPT0gdGVzdF92bGliCiAgICBpbXBsID0gdGVzdF92bGliLmdldF9pbXBsKCkKICAgIGFzc2VydCBpbXBsCiAgICBhc3NlcnQgaW1wbC5nZXRfY250KCkgPT0gMAogICAgbGliID0gdGVzdF92bGliLmdldF9saWJyYXJ5KCkKICAgIGFzc2VydCBsaWIudmVyc2lvbiA9PSBpbXBsLmdldF92ZXJzaW9uKCkKICAgICMgc2h1dGRvd24KICAgIGxlZnQgPSBtZ3Iuc2h1dGRvd24oKQogICAgYXNzZXJ0IGxlZnQgPT0gMAogICAgYXNzZXJ0IGFsbG9jLmlzX2FsbF9mcmVlKCkKCgpkZWYgbGliY29yZV9tZ3JfbWFrZV92ZXJzaW9uX3JldmlzaW9uX3Rlc3QoKToKICAgIG1hY2hpbmUsIGFsbG9jLCBtZ3IgPSBzZXR1cCgpCiAgICBleGVjX3ZsaWIgPSBtZ3IuYm9vdHN0cmFwX2V4ZWMoKQogICAgIyBtYWtlIHZhbW9zIHRlc3QgbGliCiAgICB0ZXN0X3ZsaWIgPSBtZ3IubWFrZV9saWJfbmFtZSgidmFtb3N0ZXN0LmxpYnJhcnkiLCB2ZXJzaW9uPTExLCByZXZpc2lvbj0yMykKICAgIHRlc3RfYmFzZSA9IHRlc3RfdmxpYi5nZXRfYWRkcigpCiAgICBhc3NlcnQgdGVzdF92bGliCiAgICBhc3NlcnQgbWdyLmdldF92bGliX2J5X25hbWUoInZhbW9zdGVzdC5saWJyYXJ5IikgPT0gdGVzdF92bGliCiAgICBhc3NlcnQgbWdyLmdldF92bGliX2J5X2FkZHIodGVzdF9iYXNlKSA9PSB0ZXN0X3ZsaWIKICAgIGltcGwgPSB0ZXN0X3ZsaWIuZ2V0X2ltcGwoKQogICAgYXNzZXJ0IGltcGwKICAgIGFzc2VydCBpbXBsLmdldF9jbnQoKSA9PSAwCiAgICBsaWIgPSB0ZXN0X3ZsaWIuZ2V0X2xpYnJhcnkoKQogICAgYXNzZXJ0IGxpYi52ZXJzaW9uID09IDExCiAgICBhc3NlcnQgbGliLnJldmlzaW9uID09IDIzCiAgICAjIHNodXRkb3duCiAgICBsZWZ0ID0gbWdyLnNodXRkb3duKCkKICAgIGFzc2VydCBsZWZ0ID09IDAKICAgIGFzc2VydCBhbGxvYy5pc19hbGxfZnJlZSgpCgoKZGVmIGxpYmNvcmVfbWdyX21ha2VfcHJvZmlsZV90ZXN0KCk6CiAgICBtYWNoaW5lLCBhbGxvYywgbWdyID0gc2V0dXAocHJvZl9uYW1lcz1bImFsbCJdKQogICAgcHJvZmlsZXIgPSBtZ3IuZ2V0X3Byb2ZpbGVyKCkKICAgIGFzc2VydCBwcm9maWxlcgogICAgcHJvZmlsZXIuc2V0dXAoKQogICAgZXhlY192bGliID0gbWdyLmJvb3RzdHJhcF9leGVjKCkKICAgICMgbWFrZSB2YW1vcyB0ZXN0IGxpYgogICAgdGVzdF92bGliID0gbWdyLm1ha2VfbGliX25hbWUoInZhbW9zdGVzdC5saWJyYXJ5IikKICAgIHRlc3RfYmFzZSA9IHRlc3RfdmxpYi5nZXRfYWRkcigpCiAgICBhc3NlcnQgdGVzdF92bGliCiAgICBhc3NlcnQgbWdyLmdldF92bGliX2J5X25hbWUoInZhbW9zdGVzdC5saWJyYXJ5IikgPT0gdGVzdF92bGliCiAgICBhc3NlcnQgbWdyLmdldF92bGliX2J5X2FkZHIodGVzdF9iYXNlKSA9PSB0ZXN0X3ZsaWIKICAgIGltcGwgPSB0ZXN0X3ZsaWIuZ2V0X2ltcGwoKQogICAgYXNzZXJ0IGltcGwKICAgIGFzc2VydCBpbXBsLmdldF9jbnQoKSA9PSAwCiAgICBwcm9mID0gdGVzdF92bGliLnByb2ZpbGUKICAgIGFzc2VydCBwcm9mCiAgICBhc3NlcnQgcHJvZmlsZXIuZ2V0X3Byb2ZpbGUoInZhbW9zdGVzdC5saWJyYXJ5IikgPT0gcHJvZgogICAgIyBzaHV0ZG93bgogICAgbGVmdCA9IG1nci5zaHV0ZG93bigpCiAgICBhc3NlcnQgbGVmdCA9PSAwCiAgICBhc3NlcnQgYWxsb2MuaXNfYWxsX2ZyZWUoKQogICAgIyBwcm9maWxlIHN1cnZpdmVzCiAgICBhc3NlcnQgcHJvZmlsZXIuZ2V0X3Byb2ZpbGUoInZhbW9zdGVzdC5saWJyYXJ5IikgPT0gcHJvZgoKCmRlZiBsaWJjb3JlX21ncl9tYWtlX2Zha2Vfd2l0aF9mZF90ZXN0KCk6CiAgICBtYWNoaW5lLCBhbGxvYywgbWdyID0gc2V0dXAoKQogICAgZXhlY192bGliID0gbWdyLmJvb3RzdHJhcF9leGVjKCkKICAgICMgbWFrZSB2YW1vcyB0ZXN0IGxpYgogICAgdGVzdF92bGliID0gbWdyLm1ha2VfbGliX25hbWUoInRlc3RuaXgubGlicmFyeSIpCiAgICBhc3NlcnQgdGVzdF92bGliIGlzIE5vbmUKICAgIHRlc3RfdmxpYiA9IG1nci5tYWtlX2xpYl9uYW1lKCJ0ZXN0bml4LmxpYnJhcnkiLCBmYWtlPVRydWUpCiAgICB0ZXN0X2Jhc2UgPSB0ZXN0X3ZsaWIuZ2V0X2FkZHIoKQogICAgYXNzZXJ0IHRlc3RfdmxpYgogICAgYXNzZXJ0IG1nci5nZXRfdmxpYl9ieV9uYW1lKCJ0ZXN0bml4LmxpYnJhcnkiKSA9PSB0ZXN0X3ZsaWIKICAgIGFzc2VydCBtZ3IuZ2V0X3ZsaWJfYnlfYWRkcih0ZXN0X2Jhc2UpID09IHRlc3RfdmxpYgogICAgaW1wbCA9IHRlc3RfdmxpYi5nZXRfaW1wbCgpCiAgICBhc3NlcnQgaW1wbCBpcyBOb25lCiAgICAjIHNodXRkb3duCiAgICBsZWZ0ID0gbWdyLnNodXRkb3duKCkKICAgIGFzc2VydCBsZWZ0ID09IDAKICAgIGFzc2VydCBhbGxvYy5pc19hbGxfZnJlZSgpCgoKZGVmIGxpYmNvcmVfbWdyX21ha2VfZmFrZV93aXRob3V0X2ZkX3Rlc3QoKToKICAgIG1hY2hpbmUsIGFsbG9jLCBtZ3IgPSBzZXR1cCgpCiAgICBleGVjX3ZsaWIgPSBtZ3IuYm9vdHN0cmFwX2V4ZWMoKQogICAgIyBtYWtlIHZhbW9zIHRlc3QgbGliCiAgICB0ZXN0X3ZsaWIgPSBtZ3IubWFrZV9saWJfbmFtZSgiZm9vLmxpYnJhcnkiKQogICAgYXNzZXJ0IHRlc3RfdmxpYiBpcyBOb25lCiAgICB0ZXN0X3ZsaWIgPSBtZ3IubWFrZV9saWJfbmFtZSgiZm9vLmxpYnJhcnkiLCBmYWtlPVRydWUpCiAgICB0ZXN0X2Jhc2UgPSB0ZXN0X3ZsaWIuZ2V0X2FkZHIoKQogICAgYXNzZXJ0IHRlc3RfdmxpYgogICAgYXNzZXJ0IG1nci5nZXRfdmxpYl9ieV9uYW1lKCJmb28ubGlicmFyeSIpID09IHRlc3RfdmxpYgogICAgYXNzZXJ0IG1nci5nZXRfdmxpYl9ieV9hZGRyKHRlc3RfYmFzZSkgPT0gdGVzdF92bGliCiAgICBpbXBsID0gdGVzdF92bGliLmdldF9pbXBsKCkKICAgIGFzc2VydCBpbXBsIGlzIE5vbmUKICAgIGFzc2VydCB0ZXN0X3ZsaWIuZ2V0X2ZkKCkuZ2V0X25lZ19zaXplKCkgPT0gMzAKICAgIGFzc2VydCB0ZXN0X3ZsaWIuZ2V0X2xpYnJhcnkoKS5uZWdfc2l6ZSA9PSAzMgogICAgIyBzaHV0ZG93bgogICAgbGVmdCA9IG1nci5zaHV0ZG93bigpCiAgICBhc3NlcnQgbGVmdCA9PSAwCiAgICBhc3NlcnQgYWxsb2MuaXNfYWxsX2ZyZWUoKQoKCmRlZiBsaWJjb3JlX21ncl9tYWtlX2Zha2Vfd2l0aG91dF9mZF9jZmdfdGVzdCgpOgogICAgbWFjaGluZSwgYWxsb2MsIG1nciA9IHNldHVwKCkKICAgIGV4ZWNfdmxpYiA9IG1nci5ib290c3RyYXBfZXhlYygpCiAgICAjIGxpYl9jZmcKICAgIENmZyA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoIkNmZyIsIFsibnVtX2Zha2VfZnVuY3MiXSkKICAgIGxpYl9jZmcgPSBDZmcoMTApCiAgICAjIG1ha2UgdmFtb3MgdGVzdCBsaWIKICAgIHRlc3RfdmxpYiA9IG1nci5tYWtlX2xpYl9uYW1lKCJmb28ubGlicmFyeSIsIGxpYl9jZmc9bGliX2NmZykKICAgIGFzc2VydCB0ZXN0X3ZsaWIgaXMgTm9uZQogICAgdGVzdF92bGliID0gbWdyLm1ha2VfbGliX25hbWUoImZvby5saWJyYXJ5IiwgZmFrZT1UcnVlLCBsaWJfY2ZnPWxpYl9jZmcpCiAgICB0ZXN0X2Jhc2UgPSB0ZXN0X3ZsaWIuZ2V0X2FkZHIoKQogICAgYXNzZXJ0IHRlc3RfdmxpYgogICAgYXNzZXJ0IG1nci5nZXRfdmxpYl9ieV9uYW1lKCJmb28ubGlicmFyeSIpID09IHRlc3RfdmxpYgogICAgYXNzZXJ0IG1nci5nZXRfdmxpYl9ieV9hZGRyKHRlc3RfYmFzZSkgPT0gdGVzdF92bGliCiAgICBpbXBsID0gdGVzdF92bGliLmdldF9pbXBsKCkKICAgIGFzc2VydCBpbXBsIGlzIE5vbmUKICAgIGFzc2VydCB0ZXN0X3ZsaWIuZ2V0X2ZkKCkuZ2V0X25lZ19zaXplKCkgPT0gNjYKICAgIGFzc2VydCB0ZXN0X3ZsaWIuZ2V0X2xpYnJhcnkoKS5uZWdfc2l6ZSA9PSA2OAogICAgIyBzaHV0ZG93bgogICAgbGVmdCA9IG1nci5zaHV0ZG93bigpCiAgICBhc3NlcnQgbGVmdCA9PSAwCiAgICBhc3NlcnQgYWxsb2MuaXNfYWxsX2ZyZWUoKQoKCmRlZiBsaWJjb3JlX21ncl9tYWtlX29wZW5fdGVzdCgpOgogICAgbWFjaGluZSwgYWxsb2MsIG1nciA9IHNldHVwKCkKICAgIGV4ZWNfdmxpYiA9IG1nci5ib290c3RyYXBfZXhlYygpCiAgICAjIG1ha2UgdmFtb3MgdGVzdCBsaWIKICAgIHRlc3RfdmxpYiA9IG1nci5tYWtlX2xpYl9uYW1lKCJ2YW1vc3Rlc3QubGlicmFyeSIpCiAgICB0ZXN0X2Jhc2UgPSB0ZXN0X3ZsaWIuZ2V0X2FkZHIoKQogICAgaW1wbCA9IHRlc3RfdmxpYi5nZXRfaW1wbCgpCiAgICBsaWIgPSB0ZXN0X3ZsaWIuZ2V0X2xpYnJhcnkoKQogICAgYXNzZXJ0IGxpYi52ZXJzaW9uID09IGltcGwuZ2V0X3ZlcnNpb24oKQogICAgYXNzZXJ0IGltcGwuZ2V0X2NudCgpID09IDAKICAgIGFzc2VydCBtZ3Iub3Blbl9saWJfbmFtZSgidmFtb3N0ZXN0LmxpYnJhcnkiKSA9PSB0ZXN0X3ZsaWIKICAgIGFzc2VydCBpbXBsLmdldF9jbnQoKSA9PSAxCiAgICBhc3NlcnQgbm90IG1nci5leHB1bmdlX2xpYih0ZXN0X3ZsaWIpCiAgICBhc3NlcnQgbWdyLmNsb3NlX2xpYih0ZXN0X3ZsaWIpCiAgICBhc3NlcnQgaW1wbC5nZXRfY250KCkgaXMgTm9uZQogICAgIyBzaHV0ZG93bgogICAgbGVmdCA9IG1nci5zaHV0ZG93bigpCiAgICBhc3NlcnQgbGVmdCA9PSAwCiAgICBhc3NlcnQgYWxsb2MuaXNfYWxsX2ZyZWUoKQoKCmRlZiBsaWJjb3JlX21ncl9vcGVuX3Rlc3QoKToKICAgIG1hY2hpbmUsIGFsbG9jLCBtZ3IgPSBzZXR1cCgpCiAgICBleGVjX3ZsaWIgPSBtZ3IuYm9vdHN0cmFwX2V4ZWMoKQogICAgIyBtYWtlIHZhbW9zIHRlc3QgbGliCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHRlc3RfdmxpYiA9IG1nci5vcGVuX2xpYl9uYW1lKCJ2YW1vc3Rlc3QubGlicmFyeSIpCiAgICBpbXBsID0gdGVzdF92bGliLmdldF9pbXBsKCkKICAgIGxpYiA9IHRlc3RfdmxpYi5nZXRfbGlicmFyeSgpCiAgICBhc3NlcnQgbGliLnZlcnNpb24gPT0gaW1wbC5nZXRfdmVyc2lvbigpCjx8ZmltX2VuZHw+"]
["abd3009d9cb4a62dd5238f8813d5c3e64387589c-3","abd3009d9cb4a62dd5238f8813d5c3e64387589c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGN2MgppbXBvcnQgbnVtcHkgYXMgbnAKCgpjbGFzcyByb2k6Cjx8ZmltX2hvbGV8PgoKICAgIGRlZiByb2koc2VsZiwgaW1hZ2UpOgogICAgICAgIGhlaWdodCA9IGltYWdlLnNoYXBlWzBdCiAgICAgICAgd2lkdGggPSBpbWFnZS5zaGFwZVsxXQojICAgICAgIHByaW50KHdpZHRoKQogICAgICAgIHBvbHkgPSBucC5hcnJheShbCiAgICAgICAgICAgIFsoMTAwLCBoZWlnaHQpLCAod2lkdGgsIGhlaWdodCksICg1MzAsIDM1MCldCiAgICAgICAgXSkKICAgICAgICBtYXNrID0gbnAuemVyb3NfbGlrZShpbWFnZSkKICAgICAgICBjdjIuZmlsbFBvbHkobWFzaywgcG9seSwgMjU1KQogICAgICAgIG1hc2tlZF9pbWcgPSBjdjIuYml0d2lzZV9hbmQoaW1hZ2UsIG1hc2spCiAgICAgICAgcmV0dXJuIG1hc2tlZF9pbWcKPHxmaW1fc3VmZml4fD4KICAgICIiImRvY3N0cmluZyBmb3Igcm9pLiIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzdXBlcihyb2ksIHNlbGYpLl9faW5pdF9fKCkKPHxmaW1fZW5kfD4="]
["abd3009d9cb4a62dd5238f8813d5c3e64387589c-5","abd3009d9cb4a62dd5238f8813d5c3e64387589c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGN2MgppbXBvcnQgbnVtcHkgYXMgbnAKCgpjbGFzcyByb2k6CiAgICAiIiJkb2NzdHJpbmcgZm9yIHJvaS4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc3VwZXIocm9pLCBzZWxmKS5fX2luaXRfXygpCgogICAgZGVmIHJvaShzZWxmLCBpbWFnZSk6CiAgICAgICAgaGVpZ2h0ID0gaW1hZ2Uuc2hhcGVbMF0KICAgICAgICB3aWR0aCA9IGltYWdlLnNoYXBlWzFdCiMgICAgICAgcHJpbnQod2lkdGgpCiAgICAgICAgcG9seSA9IG5wLmFycmF5KFsKICAgICAgICAgICAgWygxMDAsIGhlaWdodCksICh3aWR0aCwgaGVpZ2h0KSwgKDUzMCwgMzUwKV0KPHxmaW1faG9sZXw+CiAgICAgICAgcmV0dXJuIG1hc2tlZF9pbWcKPHxmaW1fc3VmZml4fD4KICAgICAgICBdKQogICAgICAgIG1hc2sgPSBucC56ZXJvc19saWtlKGltYWdlKQogICAgICAgIGN2Mi5maWxsUG9seShtYXNrLCBwb2x5LCAyNTUpCiAgICAgICAgbWFza2VkX2ltZyA9IGN2Mi5iaXR3aXNlX2FuZChpbWFnZSwgbWFzaykKPHxmaW1fZW5kfD4="]
["05f2cb77af5f068f778f8f4ae5467997a4a056a1-4","05f2cb77af5f068f778f8f4ae5467997a4a056a1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5Y29kZXN0eWxlCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAoKCmNsYXNzIFRlc3RDb2Rlc3R5bGU6CiAgICBkZWYgdGVzdF9jb2Rlc3R5bGUoc2VsZik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBwcm9qZWN0X3Jvb3QgPSBQYXRoKF9fZmlsZV9fKS5wYXJlbnQucGFyZW50CiAgICAgICAgc3R5bGUgPSBweWNvZGVzdHlsZS5TdHlsZUd1aWRlKGlnbm9yZT1bIkU1MDEiLCAiVzUwMyJdKQogICAgICAgIHJlc3VsdCA9IHN0eWxlLmNoZWNrX2ZpbGVzKFtzdHIocHJvamVjdF9yb290KV0pCiAgICAgICAgYXNzZXJ0IHJlc3VsdC50b3RhbF9lcnJvcnMgPT0gMAo8fGZpbV9lbmR8Pg=="]
["59c4fe84e895c46df8d03fb14163501ff2db8b89-2","59c4fe84e895c46df8d03fb14163501ff2db8b89","PHxmaW1fcHJlZml4fD4KCiMjIyMjIyMjIyMjIwojIyBTb2x1dGlvbgojIyMjIyMjIyMjIyMKc2F2ZV92YWxzID0gW10KbGxzID0gW10KZm9yIGUgaW4gcmFuZ2UoZXBvY2hzKToKICAgICMgUnVuIEUtc3RlcAogICAgbGwsIGdhbW1hLCB4aSA9IGVfc3RlcChZLCBwc2ksIEEsIEwsIGR0KSAgICAKICAgIGxscy5hcHBlbmQobGwpICAjIGxvZyB0aGUgZGF0YSBsb2cgbGlrZWxpaG9vZCBmb3IgY3VycmVudCBjeWNsZQoKICAgIGlmIGUgJSBwcmludF9ldmVyeSA9PSAwOiBwcmludChmJ2Vwb2NoOiB7ZTozZH0sIGxsID0ge2xsfScpICAjIGxvZyBwcm9ncmVzcwoKICAgICMgQ2FsY3VsYXRlIG5ldyBpbml0aWFsIHByb2JhYmlsaXRpZXMKICAgIHBzaV9uZXcgPSBnYW1tYVs6LCAwXS5zdW0oMCkgLyBuX3RyaWFscyAKICAgIHBzaV9uZXcgLz0gcHNpX25ldy5zdW0oKQogICAgIyBDYWxjdWxhdGUgbmV3IHRyYW5zaXRpb24gbWF0cml4CiAgICBBX25ldyA9IHhpLnN1bSgwKS5zdW0oMCkgLyBnYW1tYVs6LCA6LTFdLnN1bSgwKS5zdW0oMClbOixOb25lXQogICAgIyBDYWxjdWxhdGUgbmV3IGZpcmluZyByYXRlcwogICAgTF9uZXcgPSAobnAuc3dhcGF4ZXMoWSwgLTEsIC0yKSBAIGdhbW1hKS5zdW0oMCkgLyBnYW1tYS5zdW0oMCkuc3VtKDApIC8gZHQKCiAgICBkcCwgZEEsIGRMID0gcHNpX25ldyAtIHBzaSwgQV9uZXcgLSBBLCBMX25ldyAtIEwgIyBDYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2Ugb2YgcGFyYW1ldGVycyBmb3IgbGF0ZXIgaW50ZXJwb2xhdGlvbi9leHRyYXBvbGF0aW9uCiAgICAjIENhbGN1bGF0ZSBMTHMgYW5kIEVDTExzIGZvciBsYXRlciBwbG90dGluZwogICAgaWYgZSBpbiBwbG90X2Vwb2NoczogICAgICAgIAogICAgICAgIGJfbWluID0gLW1pbihbbnAubWluKHBzaVtkcCA+IDBdIC8gZHBbZHAgPiAwXSksIG5wLm1pbihBW2RBID4gMF0gLyBkQVtkQSA+IDBdKSwgbnAubWluKExbZEwgPiAwXSAvIGRMW2RMID4gMF0pXSkKICAgICAgICBiX21heCA9IC1tYXgoW25wLm1heChwc2lbZHAgPCAwXSAvIGRwW2RwIDwgMF0pLCBucC5tYXgoQVtkQSA8IDBdIC8gZEFbZEEgPCAwXSksIG5wLm1heChMW2RMIDwgMF0gLyBkTFtkTCA8IDBdKV0pCjx8ZmltX2hvbGV8PgogICAgICAgIGJzID0gbnAuYXJyYXkoYnMpCiAgICAgICAgbGxzX2Zvcl9wbG90ID0gW10KICAgICAgICBlY2xsc19mb3JfcGxvdCA9IFtdCiAgICAgICAgZm9yIGksIGIgaW4gZW51bWVyYXRlKGJzKToKICAgICAgICAgICAgcHJpbnQoZicgIHNhdmluZyBmb3IgcGxvdDoge2JfbWluOjUuMmZ9IOKJpCB7Yjo1LjJmfSDiiaQge2JfbWF4OjUuMmZ9ICh7aSArIDF9IG9mIHtsZW4oYnMpfSlccicsIGVuZD0nJykKICAgICAgICAgICAgbGwgPSBlX3N0ZXAoWSwgcHNpICsgYiAqIGRwLCBBICsgYiAqIGRBLCBMICsgYiAqIGRMLCBkdClbMF0KICAgICAgICAgICAgbGxzX2Zvcl9wbG90LmFwcGVuZChsbCkKICAgICAgICAgICAgZWNsbCA9IChnYW1tYVs6LCAwXSBAIG5wLmxvZyhwc2kgKyBiICogZHApICsgKHhpICogbnAubG9nKEEgKyBiICogZEEpKS5zdW0oLTEpLnN1bSgtMSkuc3VtKC0xKSArIChnYW1tYSAqIHNzLnBvaXNzb24oKEwgKyBiICogZEwpICogZHQpLmxvZ3BtZihZWy4uLiwgTm9uZV0pLnN1bSgtMikpLnN1bSgtMSkuc3VtKC0xKSkubWVhbigpIC8gVCAvIGR0CiAgICAgICAgICAgIGVjbGxzX2Zvcl9wbG90LmFwcGVuZChlY2xsKQogICAgICAgICAgICBpZiBiID09IDA6CiAgICAgICAgICAgICAgICBkaWZmX2xsID0gbGwgLSBlY2xsCiAgICAgICAgbGxzX2Zvcl9wbG90ID0gbnAuYXJyYXkobGxzX2Zvcl9wbG90KQogICAgICAgIGVjbGxzX2Zvcl9wbG90ID0gbnAuYXJyYXkoZWNsbHNfZm9yX3Bsb3QpICsgZGlmZl9sbAogICAgICAgIHNhdmVfdmFscy5hcHBlbmQoKGJzLCBsbHNfZm9yX3Bsb3QsIGVjbGxzX2Zvcl9wbG90KSkKICAgICAgICBwcmludCgnJykKICAgICMgcmV0dXJuIG5ldyBwYXJhbWV0ZXIgCiAgICBwc2ksIEEsIEwgPSBwc2lfbmV3LCBBX25ldywgTF9uZXcKICAgIApsbCA9IGVfc3RlcChZLCBwc2ksIEEsIEwsIGR0KVswXQpsbHMuYXBwZW5kKGxsKQpwcmludChmJ2Vwb2NoOiB7ZXBvY2hzOjNkfSwgbGwgPSB7bGx9JykKPHxmaW1fc3VmZml4fD4KICAgICAgICBiX21pbiA9IG5wLm1heChbLjk5ICogYl9taW4sIGJfbGltc1swXV0pCiAgICAgICAgYl9tYXggPSBucC5taW4oWy45OSAqIGJfbWF4LCBiX2xpbXNbMV1dKSAgICAKICAgICAgICBicyA9IG5wLmxpbnNwYWNlKGJfbWluLCBiX21heCwgbnVtX3Bsb3RfdmFscykKICAgICAgICBicyA9IHNvcnRlZChsaXN0KHNldChucC5oc3RhY2soKGJzLCBbMCwgMV0pKSkpKQo8fGZpbV9lbmR8Pg=="]
["3cfda7d7e0c481711263917493c5911f09a20ceb-2","3cfda7d7e0c481711263917493c5911f09a20ceb","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAxNiBPcGVuU3RhY2sgRm91bmRhdGlvbgojIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiMKIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgICAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4KIyAgICBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCjx8ZmltX2VuZHw+"]
["b1ee30ff0ca4c665805e3c0a929677186c906c50-4","b1ee30ff0ca4c665805e3c0a929677186c906c50","PHxmaW1fcHJlZml4fD4KZnJvbSBqaXRjYWNoZSBpbXBvcnQgQ2FjaGUKaW1wb3J0IHRpbWUKCgpjYWNoZSA9IENhY2hlKCkKCgpAY2FjaGUubWVtb2l6ZQpkZWYgc2xvd19mbihpbnB1dF8xLCBpbnB1dF8yLCBpbnB1dF8zPTEwKToKPHxmaW1faG9sZXw+CgpwcmludChzbG93X2ZuKDEwLCAyKSkKPHxmaW1fc3VmZml4fD4KICAgIHByaW50KCJTbG93IEZ1bmN0aW9uIENhbGxlZCIpCiAgICB0aW1lLnNsZWVwKDEpCiAgICByZXR1cm4gaW5wdXRfMSAqIGlucHV0XzIgKiBpbnB1dF8zCgo8fGZpbV9lbmR8Pg=="]
["b066f347fee0ef8498e609777e9afd607cb6b808-4","b066f347fee0ef8498e609777e9afd607cb6b808","PHxmaW1fcHJlZml4fD4KIyBMaWJyYXJpZXMKaW1wb3J0IHBhbmRhcyBhcyBwZApmcm9tIGFscGhhX3ZhbnRhZ2UudGltZXNlcmllcyBpbXBvcnQgVGltZVNlcmllcwpmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCgpkZWYgZmV0Y2hfc3RvY2tfZGF0YShzdG9ja3MpOgogICAgIiIiCiAgICBGZXRjaGVzIHN0b2NrIGRhdGEgKHBlciBtaW4pIGZvciBsYXN0IDE0IGRheXMuCiAgICBJTlBVVDogTGlzdCBvZiBzdG9ja3MKICAgIE9VVFBVVDogQ1NWIGZpbGVzIGdlbmVyYXRlZCBpbiBkYXRhIGZvbGRlciBmb3IgYWxsIHRoZSBzdG9ja3MKICAgICIiIgogICAgY250PTAKICAgIGZvciBzdG9jayBpbiBzdG9ja3M6CiAgICAgICAgdGltZT1UaW1lU2VyaWVzKGtleT0iRW50ZXIgYWxwaGF2YW50YWdlIGtleSIsb3V0cHV0X2Zvcm1hdD0ncGFuZGFzJykKICAgICAgICBkYXRhPXRpbWUuZ2V0X2ludHJhZGF5KHN5bWJvbD1zdG9jayxpbnRlcnZhbD0nMW1pbicsb3V0cHV0c2l6ZT0iZnVsbCIpCiAgICAgICAgc3RvY2tfZGY9ZGF0YVswXQogICAgICAgIHN0b2NrX2RmLnRvX2NzdigiLi4vZGF0YS9IaXN0b3JpY2FsX0RhdGEvIitzdG9jaysiLmNzdiIpCiAgICAgICAgCiAgICAgICAgIyMgQVBJIGNhbiBvbmx5IGZldGNoIGRhdGEgZm9yIDUgc3RvY2tzIGluIGEgbWludXRlIAogICAgICAgIGNudCs9MQogICAgICAgIGlmIGNudD09NDoKICAgICAgICAgICAgY250PTAKICAgICAgICAgICAgc2xlZXAoNjApCgkJCQpkZWYgc3RvY2tfZGF0YV9kYWlseShzdG9ja3MsZGF0ZSk6CgkiIiIKICAgIFVwZGF0ZXMgdGhlIGNzdiBmaWxlcyB3aXRoIHRoZSBjdXJyZW50IGRhdGUncyBkYXRhCiAgICBJTlBVVDogTGlzdCBvZiBzdG9ja3MgYW5kIHRvZGF5J3MgZGF0ZQogICAgT1VUUFVUOiBDU1YgZmlsZXMgZ2VuZXJhdGVkIGluIGRhdGEgZm9sZGVyIGZvciBhbGwgdGhlIHN0b2NrcwoJCglTaW11bGF0aW9uIERhdGEgY29uc2lzdHMgb2YgbGFzdCB0cmFkaW5nIGRheSBhbmQgSGlzdG9yaWNhbCBEYXRhIGNvbnNpc3RzIG9mIHN0b2NrIGRhdGEgYmVmb3JlIHRoYXQgZGF5LgoJCiAgICAiIiIKCWNudD0wCglmb3Igc3RvY2sgaW4gc3RvY2tzOgoJCWRmPXBkLnJlYWRfY3N2KCIuLi9kYXRhL0hpc3RvcmljYWxfRGF0YS8iK3N0b2NrKyIuY3N2IixpbmRleF9jb2w9MCkKCQlkZj1kZi5zb3J0X2luZGV4KCkKCQl0aW1lPVRpbWVTZXJpZXMoa2V5PSJFbnRlciBhbHBoYXZhbnRhZ2Uga2V5IixvdXRwdXRfZm9ybWF0PSdwYW5kYXMnKQoJCWRhdGE9dGltZS5nZXRfaW50cmFkYXkoc3ltYm9sPXN0b2NrLGludGVydmFsPScxbWluJyxvdXRwdXRzaXplPSJmdWxsIikKCQlzdG9ja19kZj1kYXRhWzBdLmxvY1tkYXRlXQoJCXN0b2NrX2RmPXN0b2NrX2RmLnNvcnRfaW5kZXgoKQoJCXN0b2NrX2RmPXN0b2NrX2RmLnJlc2V0X2luZGV4KCkKCQlzdG9ja19kZj1zdG9ja19kZi5yZW5hbWUoY29sdW1ucz17JzEuIG9wZW4nOidvcGVuJywnMi4gaGlnaCc6J2hpZ2gnLCczLiBsb3cnOidsb3cnLCc0LiBjbG9zZSc6J2Nsb3NlJywnNS4gdm9sdW1lJzondm9sdW1lJ30pCgkJc3RvY2tfZGZbJ2RhdGUnXSA9IHBkLnRvX2RhdGV0aW1lKHN0b2NrX2RmWydkYXRlJ10pCgkJc3RvY2tfZGY9c3RvY2tfZGZbc3RvY2tfZGYuZGF0ZS5kdC5zdHJmdGltZSgnJUg6JU06JVMnKS5iZXR3ZWVuKCcwOTozMCcsJzE2OjAwJyldCgkJc3RvY2tfZGYgPSBzdG9ja19kZi5yZXNldF9pbmRleChkcm9wID0gVHJ1ZSkKCQlmaW5hbF9kZj1wZC5jb25jYXQoW2RmLHN0b2NrX2RmXSxheGlzPTApCgkJCgoJCSMjQ29tbWVudCB0aGUgYmVsb3cgbGluZSB3aGVuIHVwZGF0aW5nIHNpbXVsYXRpb24gZGF0YQo8fGZpbV9ob2xlfD4KCQkKCQkjIyBBUEkgY2FuIG9ubHkgZmV0Y2ggZGF0YSBmb3IgNSBzdG9ja3MgaW4gYSBtaW51dGUgCgkJY250Kz0xCgkJaWYgY250PT00OgoJCQljbnQ9MAoJCQlzbGVlcCg2MCkKICAKZGVmIG1haW4oKToKCSIiIgoJVXBkYXRlIHRoZSBzdG9ja3MgbGlzdCBmb3IgdGhlIHN0b2NrcyBmb3Igd2hpY2ggeW91IHdhbnQgaGlzdG9yaWNhbCBkYXRhLgoJUnVuIGZldGNoX3N0b2NrX2RhdGEgdG8gZmV0Y2ggbGFzdCAxNSBkYXlzIGRhdGEgZnJvbSB0aGUgcHJlc2VudCBkYXkuCglSdW4gc3RvY2tfZGF0YV9kYWlseSB0byBnZXQgZGF0YSBmb3IgdGhlIHF1ZXJ5IGRhdGUuCgkKCSIiIgoKCXN0b2Nrcz1bIk5LRSIsIkVYUEUiXQoJcHJlc2VudF9kYXk9JzIwMjAtMDktMTgnCgoJc3RvY2tfZGF0YV9kYWlseShzdG9ja3MscHJlc2VudF9kYXkpCgkKbWFpbigpCjx8ZmltX3N1ZmZpeHw+CgkJZmluYWxfZGYudG9fY3N2KCIuLi9kYXRhL0hpc3RvcmljYWxfRGF0YS8iK3N0b2NrKyIuY3N2IixpbmRleD1GYWxzZSkKCQkjI0NvbW1lbnQgdGhlIGJlbG93IGxpbmUgd2hlbiB1cGRhdGluZyBoaXN0b3JpY2FsIGRhdGEKCQkjc3RvY2tfZGYudG9fY3N2KCIuLi9kYXRhL1NpbXVsYXRpb25fRGF0YS8iK3N0b2NrKyIuY3N2IixpbmRleD1GYWxzZSkKCQkKPHxmaW1fZW5kfD4="]
["e6266fe5c717d1b06964ed0b61e78b26e5a57265-2","e6266fe5c717d1b06964ed0b61e78b26e5a57265","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCkNyZWF0ZWQgb24gTW9uIE1heSAxMSAxMjo0MzowMCAyMDE1Cgo8fGZpbV9ob2xlfD4KCmZyb20gcHllbXRvLmNvbW1vbi5jb21tb24gaW1wb3J0ICoKPHxmaW1fc3VmZml4fD4KQGF1dGhvcjogTWF0dGkgUm9wbwpAYXV0aG9yOiBIZW5yaWsgTGV2w6Rtw6RraQoKIiIiCjx8ZmltX2VuZHw+"]
["b1fc601ef7aeeaac2f1af85cfd38d1bed1aa27bb-1","b1fc601ef7aeeaac2f1af85cfd38d1bed1aa27bb","PHxmaW1fcHJlZml4fD4KZnJvbSAuLiBpbXBvcnQgRUZBCmZyb20gLi4uIGltcG9ydCBjYWNoZWRfcHJvcGVydHksIHBhcnNlcl9wcm9wZXJ0eQpmcm9tIC4uLi5tb2RlbHMgaW1wb3J0IFBPSSwgQWRkcmVzcywgQ2l0eSwgU3RvcApmcm9tIC4uLi50eXBlcyBpbXBvcnQgQ29vcmRpbmF0ZXMsIEZyb3plbklEcwoKCmNsYXNzIE9tY1BhcnNlck1peGluOgogICAgIiIiCiAgICBNaXhpbiBmb3IgQ2l0eSBwYXJzZXJzIHRoYXQgaGF2ZSBhbiBvbWMgeG1sIGF0dHJpYnV0ZQogICAgIiIiCiAgICBAY2FjaGVkX3Byb3BlcnR5CiAgICBkZWYgX29tYyhzZWxmLCBkYXRhLCAqKmt3YXJncyk6CiAgICAgICAgcmV0dXJuIHNlbGYuYXBpLl9wYXJzZV9vbWMoZGF0YS5hdHRyaWJbJ29tYyddKQoKICAgIEBwYXJzZXJfcHJvcGVydHkKICAgIGRlZiBpZHMoc2VsZiwgZGF0YSwgKiprd2FyZ3MpOgogICAgICAgIHJldHVybiBGcm96ZW5JRHMoe3NlbGYuY291bnRyeTogc2VsZi5fb21jWzJdfSkKCiAgICBAcGFyc2VyX3Byb3BlcnR5CiAgICBkZWYgY291bnRyeShzZWxmLCBkYXRhLCBjb3VudHJ5PU5vbmUsICoqa3dhcmdzKToKICAgICAgICByZXR1cm4gY291bnRyeSBpZiBjb3VudHJ5IGVsc2Ugc2VsZi5fb21jWzBdCgogICAgQHBhcnNlcl9wcm9wZXJ0eQogICAgZGVmIHN0YXRlKHNlbGYsIGRhdGEsICoqa3dhcmdzKToKICAgICAgICByZXR1cm4gc2VsZi5fb21jWzFdCgoKY2xhc3MgT2R2UGxhY2VFbGVtQ2l0eShPbWNQYXJzZXJNaXhpbiwgRUZBLlBhcnNlciwgQ2l0eS5YTUxQYXJzZXIpOgogICAgIiIiCiAgICBQYXJzZSBhbiA8b2R2UGxhY2VFbGVtPiBFbGVtZW50IGludG8gYSBDaXR5CiAgICAiIiIKICAgIEBwYXJzZXJfcHJvcGVydHkKICAgIGRlZiBpZHMoc2VsZiwgZGF0YSwgKiprd2FyZ3MpOgogICAgICAgIHJldHVybiBzdXBlcigpLmlkcyB8IEZyb3plbklEcyh7c2VsZi5hcGkubmFtZTogZGF0YS5hdHRyaWIuZ2V0KCdzdGF0ZWxlc3MnKX0pCgogICAgQHBhcnNlcl9wcm9wZXJ0eQogICAgZGVmIG5hbWUoc2VsZiwgZGF0YSwgKiprd2FyZ3MpOgogICAgICAgIHJldHVybiBkYXRhLnRleHQKCgpjbGFzcyBPZHZOYW1lRWxlbUNpdHkoT21jUGFyc2VyTWl4aW4sIEVGQS5QYXJzZXIsIENpdHkuWE1MUGFyc2VyKToKICAgICIiIgogICAgUGFyc2UgdGhlIGNpdHkgcGFydCBvZiBhbiA8b2R2TmFtZUVsZW0+IEVsZW1lbnQgaW50byBhIENpdHkKICAgICIiIgogICAgQHBhcnNlcl9wcm9wZXJ0eQogICAgZGVmIG5hbWUoc2VsZiwgZGF0YSwgKiprd2FyZ3MpOgogICAgICAgIHJldHVybiBkYXRhLmF0dHJpYi5nZXQoJ2xvY2FsaXR5JykKCgpjbGFzcyBMb2NhdGlvblBhcnNlck1peGluOgogICAgIiIiCiAgICBNaXhpbiBjbGFzcyBmb3IgYW55dGhpbmcgdGhhdCBwYXJzZXMgYW4gPG9kdk5hbWVFbGVtPiBFbGVtZW50IGludG8gYSBMb2NhdGlvbiBzdWJjbGFzcwogICAgIiIiCiAgICBAcGFyc2VyX3Byb3BlcnR5CiAgICBkZWYgaWRzKHNlbGYsIGRhdGEsICoqa3dhcmdzKToKICAgICAgICBteWlkID0gZGF0YS5hdHRyaWIuZ2V0KCdzdG9wSUQnKSBvciBkYXRhLmF0dHJpYi5nZXQoJ2lkJykKICAgICAgICByZXR1cm4gbXlpZCBhbmQgRnJvemVuSURzKHtzZWxmLmFwaS5uYW1lOiBteWlkfSkKCiAgICBkZWYgX2NpdHlfcGFyc2Uoc2VsZiwgZGF0YSwgY291bnRyeSwgKiprd2FyZ3MpOgogICAgICAgIGNpdHkgPSBkYXRhLmZpbmQoJy4vb2R2UGxhY2VFbGVtJykKICAgICAgICBpZiBjaXR5IGlzIG5vdCBOb25lOgogICAgICAgICAgICByZXR1cm4gT2R2UGxhY2VFbGVtQ2l0eShzZWxmLCBjaXR5LCBjb3VudHJ5PWNvdW50cnkpCiAgICAgICAgcmV0dXJuIE9kdk5hbWVFbGVtQ2l0eShzZWxmLCBkYXRhLCBjb3VudHJ5PWNvdW50cnkpCgogICAgQHBhcnNlcl9wcm9wZXJ0eQogICAgZGVmIGNpdHkoc2VsZiwgZGF0YSwgICoqa3dhcmdzKToKICAgICAgICByZXR1cm4gc2VsZi5fY2l0eV9wYXJzZShkYXRhKQoKICAgIEBwYXJzZXJfcHJvcGVydHkKICAgIGRlZiBuYW1lKHNlbGYsIGRhdGEsICoqa3dhcmdzKToKICAgICAgICByZXR1cm4gZGF0YS5hdHRyaWIuZ2V0KCdvYmplY3ROYW1lJywgZGF0YS5hdHRyaWIuZ2V0KCdjaG9vLXRleHQnKSkKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgcmV0dXJuIENvb3JkaW5hdGVzKGZsb2F0KGRhdGEuYXR0cmliWyd5J10pIC8gMTAwMDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQoZGF0YS5hdHRyaWJbJ3gnXSkgLyAxMDAwMDAwKQoKCmNsYXNzIE9kdk5hbWVFbGVtQWRkcmVzcyhMb2NhdGlvblBhcnNlck1peGluLCBFRkEuUGFyc2VyLCBBZGRyZXNzLlhNTFBhcnNlcik6CiAgICAiIiIKICAgIFBhcnNlcyBhbiA8b2R2TmFtZUVsZW0+IEVsZW1lbnQgaW50byBhbiBBZGRyZXNzCiAgICAiIiIKICAgIEBwYXJzZXJfcHJvcGVydHkKICAgIGRlZiBzdHJlZXQoc2VsZiwgZGF0YSwgKiprd2FyZ3MpOgogICAgICAgIHJldHVybiBkYXRhLmF0dHJpYi5nZXQoJ3N0cmVldE5hbWUnKQoKICAgIEBwYXJzZXJfcHJvcGVydHkKICAgIGRlZiBudW1iZXIoc2VsZiwgZGF0YSwgKiprd2FyZ3MpOgogICAgICAgIHJldHVybiBkYXRhLmF0dHJpYi5nZXQoJ2J1aWxkaW5nTnVtYmVyJykgb3IgZGF0YS5hdHRyaWIuZ2V0KCdob3VzZU51bWJlcicpCgogICAgQHBhcnNlcl9wcm9wZXJ0eQogICAgZGVmIHBvc3Rjb2RlKHNlbGYsIGRhdGEsICoqa3dhcmdzKToKICAgICAgICByZXR1cm4gZGF0YS5hdHRyaWIuZ2V0KCdwb3N0Q29kZScpCgogICAgQHBhcnNlcl9wcm9wZXJ0eQogICAgZGVmIG5hbWUoc2VsZiwgZGF0YSwgKiprd2FyZ3MpOgogICAgICAgIG5hbWUgPSBkYXRhLmF0dHJpYi5nZXQoJ29iamVjdE5hbWUnLCBkYXRhLnRleHQpCiAgICAgICAgaWYgbmFtZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgbnVtYmVyID0gc2VsZi5udW1iZXIKICAgICAgICAgICAgaWYgbnVtYmVyIGFuZCBudW1iZXIgbm90IGluIG5hbWU6CiAgICAgICAgICAgICAgICBuYW1lID0gJyVzICVzJyAlIChuYW1lLCBudW1iZXIpCiAgICAgICAgICAgIHJldHVybiBuYW1lCiAgICAgICAgcmV0dXJuICclcyAlcycgJSAoc2VsZi5zdHJlZXQsIHNlbGYubnVtYmVyKQoKCmNsYXNzIE9kdk5hbWVFbGVtU3RvcChMb2NhdGlvblBhcnNlck1peGluLCBFRkEuUGFyc2VyLCBTdG9wLlhNTFBhcnNlcik6CiAgICAiIiIKICAgIFBhcnNlcyBhbiA8b2R2TmFtZUVsZW0+IEVsZW1lbnQgaW50byBhIFN0b3AKICAgICIiIgogICAgQHBhcnNlcl9wcm9wZXJ0eQogICAgZGVmIGlkcyhzZWxmLCBkYXRhLCAqKmt3YXJncyk6CiAgICAgICAgcmV0dXJuIHN1cGVyKCkuaWRzIHwgRnJvemVuSURzKHsnaWZvcHQnOiBkYXRhLmF0dHJpYi5nZXQoJ2dpZCcpfSkKCiAgICBAcGFyc2VyX3Byb3BlcnR5CiAgICBkZWYgY2l0eShzZWxmLCBkYXRhLCAqKmt3YXJncyk6CiAgICAgICAgaWZvcHQgPSBzZWxmLmlkcy5nZXQoJ2lmb3B0JykKICAgICAgICByZXR1cm4gc2VsZi5fY2l0eV9wYXJzZShkYXRhLCBpZm9wdC5zcGxpdCgnOicsIDEpWzBdIGlmIGlmb3B0IGVsc2UgTm9uZSkKCgpjbGFzcyBPZHZOYW1lRWxlbVBPSShMb2NhdGlvblBhcnNlck1peGluLCBFRkEuUGFyc2VyLCBQT0kuWE1MUGFyc2VyKToKICAgICIiIgogICAgUGFyc2VzIGFuIDxvZHZOYW1lRWxlbT4gRWxlbWVudCBpbnRvIGFuIFBPSQogICAgIiIiCiAgICBwYXNzCjx8ZmltX3N1ZmZpeHw+CgogICAgQHBhcnNlcl9wcm9wZXJ0eQogICAgZGVmIGNvb3JkcyhzZWxmLCBkYXRhLCAqKmt3YXJncyk6CiAgICAgICAgaWYgJ3gnIG5vdCBpbiBkYXRhLmF0dHJpYjoKPHxmaW1fZW5kfD4="]
["ab6ce490c71d4b4be9b58707caed4db8a53a035f-3","ab6ce490c71d4b4be9b58707caed4db8a53a035f","PHxmaW1fcHJlZml4fD4KIyBpbXBvcnQgb3Jqc29uCgojIGZyb20gZGphbmdvLmNvbnRyaWIuZ2lzLmZvcm1zIGltcG9ydCBQb2ludEZpZWxkCmZyb20gZGphbmdvLmNvcmUuZXhjZXB0aW9ucyBpbXBvcnQgSW1wcm9wZXJseUNvbmZpZ3VyZWQKCmZyb20gZGphZXN5LmFjdGlvbnMuZm9ybXMgaW1wb3J0IEJhc2VBY3Rpb25Gb3JtCmZyb20gZGphZXN5LnNlY3VyaXR5LnBlcm1pc3Npb24gaW1wb3J0IGdldF9wZXJtaXNzaW9uCgoKIyBmcm9tIGRqYW5nby50ZW1wbGF0ZS5yZXNwb25zZSBpbXBvcnQgVGVtcGxhdGVSZXNwb25zZQojIGZyb20gZGphbmdvLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IG1ldGhvZF9kZWNvcmF0b3IKIyBmcm9tIGRqYW5nby52aWV3cy5kZWNvcmF0b3JzLmd6aXAgaW1wb3J0IGd6aXBfcGFnZQojIGZyb20gZGpnZW9qc29uIGltcG9ydCBHRU9KU09OX0RFRkFVTFRfU1JJRAojIGZyb20gZGpnZW9qc29uLmh0dHAgaW1wb3J0IEh0dHBHZW9KU09OUmVzcG9uc2UKIyBmcm9tIGRqZ2VvanNvbi5zZXJpYWxpemVycyBpbXBvcnQgRGphbmdvR2VvSlNPTkVuY29kZXIKIyBmcm9tIGRqZ2VvanNvbi52aWV3cyBpbXBvcnQgR2VvSlNPTlJlc3BvbnNlTWl4aW4KIyBmcm9tIG51bXB5IGltcG9ydCBkYXRldGltZTY0CgpjbGFzcyBBY3Rpb246CgogICAgZGVmIF9faW5pdF9fKAogICAgICAgICAgICBzZWxmLCBsYWJlbCwgYWN0aW9uLCBwZXJtaXNzaW9uPU5vbmUsIG1heF9zZWxlY3RlZD0wLCBpY29uPU5vbmUsIGZvcm09Tm9uZSwgbW9kYWxfdGl0bGU9Tm9uZSwgbW9kYWxfdGV4dD1Ob25lLCBpdGVtPUZhbHNlKToKCiAgICAgICAgc2VsZi5hY3Rpb24gPSBOb25lCiAgICAgICAgc2VsZi5mb3JtID0gTm9uZQogICAgICAgIHNlbGYuZm9ybV9pbnN0YW5jZSA9IE5vbmUKICAgICAgICBzZWxmLnBlcm1pc3Npb24gPSBwZXJtaXNzaW9uCgogICAgICAgIGN1c3RvbV9mb3JtID0gRmFsc2UKICAgICAgICBmb3JtX2luc3RhbmNlID0gTm9uZQoKICAgICAgICBpZiBub3QgY2FsbGFibGUoYWN0aW9uKSBhbmQgbm90IGlzaW5zdGFuY2UoYWN0aW9uLCBzdHIpOgogICAgICAgICAgICByYWlzZSBJbXByb3Blcmx5Q29uZmlndXJlZCgKICAgICAgICAgICAgICAgICdBY3Rpb24gbXVzdCBiZSBhIGNhbGxhYmxlIG9yIHN0cmluZyBvZiB0aGUgbWV0aG9kIG5hbWUnCiAgICAgICAgICAgICkKICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShtYXhfc2VsZWN0ZWQsIGludCk6CiAgICAgICAgICAgIHJhaXNlIEltcHJvcGVybHlDb25maWd1cmVkKAogICAgICAgICAgICAgICAgJ01heCBTZWxlY3Rpb24gb3B0aW9ucyBhcmU6IC0xOiBubyBzZWxlY3Rpb24gbmVlZGVkLiAwOiBvbmUgb3IgbW9yZSwgTjogbWF4IE4gaXRlbXMgc2VsZWN0ZWQnCiAgICAgICAgICAgICkKCiAgICAgICAgaWYgZm9ybToKICAgICAgICAgICAgaWYgbm90IGlzc3ViY2xhc3MoZm9ybSwgQmFzZUFjdGlvbkZvcm0pOgogICAgICAgICAgICAgICAgcmFpc2UgSW1wcm9wZXJseUNvbmZpZ3VyZWQoJ0FjdGlvbiBGb3JtIG11c3QgYmUgZXh0ZW5kZWQgZnJvbSBCYXNlQWN0aW9uRm9ybS4nKQogICAgICAgICAgICBjdXN0b21fZm9ybSA9IFRydWUKICAgICAgICBlbHNlOgogICAgICAgICAgICBmb3JtID0gQmFzZUFjdGlvbkZvcm0KCiAgICAgICAgc2VsZi5fYXJnc19saXN0ID0gW10KICAgICAgICBsb2NhbF92YXJzID0gbG9jYWxzKCkuY29weSgpLml0ZW1zKCkKICAgICAgICBmb3IgYXJnLCB2YWx1ZSBpbiBsb2NhbF92YXJzOgogICAgICAgICAgICBpZiBub3QgYXJnID09ICdzZWxmJzoKICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgYXJnLCB2YWx1ZSkKICAgICAgICAgICAgICAgIHNlbGYuX2FyZ3NfbGlzdC5hcHBlbmQoYXJnKQoKICAgIGRlZiBzZXRfdmlldyhzZWxmLCB2aWV3X29iaiwgYWN0aW9uX2lkKToKICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuYWN0aW9uLCBzdHIpOgogICAgICAgICAgICBzZWxmLmFjdGlvbiA9IGdldGF0dHIodmlld19vYmosIHNlbGYuYWN0aW9uKQoKICAgICAgICBzZWxmLmZvcm1faW5zdGFuY2UgPSBzZWxmLmZvcm0oaW5pdGlhbD17J2FjdGlvbl9mb3JtJzogYWN0aW9uX2lkfSkKCiAgICBkZWYgYXNfZGljdChzZWxmLCBhY3Rpb25faWQpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgYXNfZGljdCA9IHsnaWQnOiBhY3Rpb25faWR9CiAgICAgICAgZm9yIGFyZyBpbiBzZWxmLl9hcmdzX2xpc3Q6CiAgICAgICAgICAgIGFzX2RpY3RbYXJnXSA9IGdldGF0dHIoc2VsZiwgYXJnKQogICAgICAgIGFzX2RpY3RbJ2FjdGlvbl9uYW1lJ10gPSBhc19kaWN0WydhY3Rpb24nXS5fX25hbWVfXwo8fGZpbV9lbmR8Pg=="]
["ab84c346d07ec4739cf411aca67494be3a96eaae-2","ab84c346d07ec4739cf411aca67494be3a96eaae","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgppbXBvcnQgbG9nZ2luZwppbXBvcnQgb3MKaW1wb3J0IHN5cwoKZ2l0cGF0aD1vcy5wYXRoLmV4cGFuZHVzZXIoIn4vZ2l0L2NhZmE0IikKc3lzLnBhdGguYXBwZW5kKGdpdHBhdGgpCgpmcm9tIGZhc3RjYWZhLmZhc3RjYWZhIGltcG9ydCAqCgpnaXRwYXRoPW9zLnBhdGguZXhwYW5kdXNlcigifi9naXQvcHlFR0FEIikKc3lzLnBhdGguYXBwZW5kKGdpdHBhdGgpCgpmcm9tIGVnYWQuZWdhZCBpbXBvcnQgKgoKI1NBTE1PTl9ORVQ9b3MucGF0aC5leHBhbmR1c2VyKCd+L2RhdGEvY29jb2NvbmV0L2F0bGFudGljc2FsbW9uX3ByaW9BZ2dOZXQuaGRmNScpCiNTQUxNT05fTkVUPW9zLnBhdGguZXhwYW5kdXNlcignfi9kYXRhL2NvY29jb25ldC9hdGxhbnRpY3NhbG1vbl9tZXRhQWdnTmV0LlJkYXRhJykKSFVNQU5fTkVUPW9zLnBhdGguZXhwYW5kdXNlcignfi9kYXRhL2NvY29jb25ldC9odW1hbl9wcmlvQWdnTmV0LmhkZjUnKQoKSFVNQU5fR09BPW9zLnBhdGguZXhwYW5kdXNlcignfi9kYXRhL2dvYS9nb2FfaHVtYW5fZ29tYXRyaXguY3N2JykKCgpQUkVET1VUPW9zLnBhdGguZXhwYW5kdXNlcignfi9wbGF5L2pvbmVzL2dpbGxpc19zZXFzLnByZWRvdXQnKQojICBHODAzMDAwMDAwMDAxICAgIEdPOjAwMDU2NjcgICAgMC4xMAojICBHODAzMDAwMDAwMDAxICAgIEdPOjAwNDM5NjYgICAgMC4xMAojICBHODAzMDAwMDAwMDAxICAgIEdPOjAwNDU4OTMgICAgMC4xMAoKU0VRX0lETUFQPW9zLnBhdGguZXhwYW5kdXNlcignfi9wbGF5L2pvbmVzL3NhbG1vbl9oaXByaW9fc2VxbWFwLnRzdicpCiMgIEc4MDMwMDAwMDAwMDEgQTBBMVMzU0swNF9TQUxTQQojICBHODAzMDAwMDAwMDAyIEEwQTFTM1JBMTRfU0FMU0EKIyAgRzgwMzAwMDAwMDAwMyBBMEExUzNSRFEzX1NBTFNBCgojIFVJRF9HTl9NQVA9b3MucGF0aC5leHBhbmR1c2VyKCd+L3BsYXkvam9uZXMvdW5pcHJvdC10cmVtYmwtc2FsbW9uLjgwMzAubWFwLnRzdicpCiMgIGRiICBhY2MgICAgICAgICAgdWlkICAgICAgICAgICAgICAgICBnbgojICB0ciAgQTBBMVMzUklENSAgIEEwQTFTM1JJRDVfU0FMU0EgICAgTE9DMTA2NjAyOTc2CiMgIHRyICBCNVhGRjQgICAgICAgQjVYRkY0X1NBTFNBICAgICAgICBXUkIKIwoKVUlEX0dOX01BUD1vcy5wYXRoLmV4cGFuZHVzZXIoJ34vZGF0YS9jb2NvY29uZXQvaHVtYW5fdWlkX21hcC50c3YnKQoKCk9VVEZJTEU9b3MucGF0aC5leHBhbmR1c2VyKCd+L3BsYXkvam9uZXMvaHVtYW5fZ29hX3Jlc3VsdHMudHN2JykgCgoKZGVmIHJlYWRfbmV0d29ya19oZGY1KGZpbGVuYW1lKToKICAgICIiIgogICAgTG9hZHMgZGF0YSBpbiBmaWxlIHRvIGRhdGFmcmFtZS4KICAgICIiIgogICAgd2l0aCBoNXB5LkZpbGUoZmlsZW5hbWUsICdyJykgYXMgZjoKICAgICAgICBsb2dnaW5nLmRlYnVnKCJyZWFkaW5nIG1hdHJpeC4uLiIpCiAgICAgICAgbWF0cml4ID0gZlsnYWdnJ11bOl0KICAgICAgICBsb2dnaW5nLmRlYnVnKCJyZWFkaW5nIHJvd3MuIGNvbnZlcnRpbmcgdG8gdW5pY29kZS4iKQogICAgICAgIHJvd3MgPSBbIHMuZGVjb2RlKCkgZm9yIHMgaW4gIGZbJ3JvdyddWzpdIF0KICAgICAgICBsb2dnaW5nLmRlYnVnKCJyZWFkaW5nIGNvbHVtbnMuIGNvbnZlcnRpbmcgdG8gdW5pY29kZSIpCiAgICAgICAgY29sdW1ucyA9IFsgcy5kZWNvZGUoKSBmb3IgcyBpbiAgZlsnY29sJ11bOl0gXQogICAgICAgIGxvZ2dpbmcuZGVidWcoIm1ha2luZyBkYXRhZnJhbWUuLi4iKQogICAgICAgIGRmID0gcGQuRGF0YUZyYW1lKG1hdHJpeCwgIGluZGV4PXJvd3MsIGNvbHVtbnMgPSBjb2x1bW5zICkKICAgICAgICBsb2dnaW5nLmRlYnVnKGYibmV0d29yayBzaGFwZToge2RmLnNoYXBlfSIpCiAgICAgICAgbG9nZ2luZy5kZWJ1ZyhmIm5ldHdvcms6XG4ge2RmfSIpICAgICAgICAKICAgIHJldHVybiBkZiAgICAgICAgCiAgICAKCmRlZiByZWFkX3ByZWRvdXQocHJlZG91dCwgc2VxaWRtYXApOgogICAgY29sdW1ucyA9IFsnc2VxaWQnLCdnb3Rlcm0nLCdwcm9iJ10gCiAgICBkZiA9IHBkLnJlYWRfY3N2KHByZWRvdXQsIHNlcD0nXHQnLCBoZWFkZXI9Tm9uZSwgbmFtZXM9Y29sdW1ucykKICAgIGxvZ2dpbmcuZGVidWcoZiJwcmVkb3V0IHNoYXBlOiB7ZGYuc2hhcGV9IikKICAgIGNvbHVtbnMgPSBbJ3NlcWlkJywndWlkJ10gCiAgICBzbWRmID0gcGQucmVhZF9jc3Yoc2VxaWRtYXAsIHNlcD0nXHQnLCBoZWFkZXI9Tm9uZSwgbmFtZXM9Y29sdW1ucykgCiAgICBsb2dnaW5nLmRlYnVnKGYic2VxbWFwIHNoYXBlOiB7c21kZi5zaGFwZX0iKQogICAgbG9nZ2luZy5kZWJ1ZyhmInNlcW1hcDpcbntzbWRmfSIpCgogICAgZml4ZWRwcmVkb3V0ID0gcGQubWVyZ2UoZGYsIHNtZGYsICBob3c9J2xlZnQnLCBvbj1bJ3NlcWlkJ10pCiAgICBmaXhlZHByZWRvdXQuZHJvcChbJ3NlcWlkJ10sIGlucGxhY2U9VHJ1ZSwgYXhpcz0xKQogICAgbG9nZ2luZy5kZWJ1ZyhmImZpeGVkIHByZWQgb3V0IGlzIFxue2ZpeGVkcHJlZG91dH0iKQoKICAgICAgICAKICAgIHJldHVybiBmaXhlZHByZWRvdXQKCmRlZiBmaXhfcm93Y29sX25hbWVzKG5ldHdvcmssIG1hcGZpbGUpOgogICAgdWdtID0gcGQucmVhZF9jc3YobWFwZmlsZSwgc2VwPSdcdCcsIGhlYWRlcj0wLCBpbmRleF9jb2w9MCkKICAgIGxvZ2dpbmcuZGVidWcoZiJ1aWRfZ25fbWFwOlxue3VnbX0iKQogICAgI21hcGRpY3QgPSBwZC5TZXJpZXModWdtLnVpZC52YWx1ZXMsIGluZGV4PXVnbS5nbikudG9fZGljdCgpCiAgICBtYXBkaWN0ID0gcGQuU2VyaWVzKHVnbS5nbi52YWx1ZXMsIGluZGV4PXVnbS51aWQpLnRvX2RpY3QoKQogICAgbG9nZ2luZy5kZWJ1ZyhmIm1hcGRpY3Q9e21hcGRpY3R9IikKICAgIGduY29sdW1ucyA9IGxpc3QobmV0d29yay5jb2x1bW5zKQogICAgbG9nZ2luZy5kZWJ1ZyhmImNvbHVtbmxpc3Q9e2duY29sdW1uc30iKQogICAgbmV3Y29scyA9IFtdCiAgICBmb3IgZyBpbiBnbmNvbHVtbnM6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBuID0gbWFwZGljdFtnXQogICAgICAgICAgICBsb2dnaW5nLmRlYnVnKGYiZ290IG1hcHBpbmcge2d9IC0+e259IikKICAgICAgICAgICAgaWYgcGQuaXNuYShuKToKICAgICAgICAgICAgICAgIG5ld2NvbHMuYXBwZW5kKGcpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBuZXdjb2xzLmFwcGVuZChuKQogICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZyhmIm1hcHBpbmcgZXJyb3Igd2l0aCB7Z30iKQogICAgICAgICAgICBuZXdjb2xzLmFwcGVuZChnKQogICAgCiAgICBsb2dnaW5nLmRlYnVnKGYibmV3Y29scz17bmV3Y29sc1s6MTBdfSBsZW5ndGg9e2xlbihuZXdjb2xzKX0iKQogICAgbG9nZ2luZy5kZWJ1ZyhmIm5ldHdvcmsgc2hhcGU9e25ldHdvcmsuc2hhcGV9IGFzc2lnbmluZyBjb2x1bW5zLi4iKQogICAgbmV0d29yay5jb2x1bW5zPW5ld2NvbHMKICAgIGxvZ2dpbmcuZGVidWcoImFzc2lnbmluZyByb3cgaW5kZXguLiIpCiAgICBuZXR3b3JrLmluZGV4ID0gbmV3Y29scwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBsb2dnaW5nLmRlYnVnKCJkb25lLiIpCiAgICByZXR1cm4gbmV0d29yawogICAgCgo8fGZpbV9lbmR8Pg=="]
["e60ada5a3327e96ba2b3b6f1ed2bf5bcc234366c-1","e60ada5a3327e96ba2b3b6f1ed2bf5bcc234366c","PHxmaW1fcHJlZml4fD4KZnJvbSAuYWNyb2JvdCBpbXBvcnQgQWNyb2JvdEVudgpmcm9tIC5jYXJ0cG9sZSBpbXBvcnQgQ2FydFBvbGVFbnYKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIC5sdW5hcmxhbmRlciBpbXBvcnQgTHVuYXJMYW5kZXJFbnYKZnJvbSAubW91bnRhaW5jYXIgaW1wb3J0IE1vdW50YWluQ2FyRW52CmZyb20gLnBlbmR1bHVtIGltcG9ydCBQZW5kdWx1bUVudgo8fGZpbV9lbmR8Pg=="]
["e60ada5a3327e96ba2b3b6f1ed2bf5bcc234366c-3","e60ada5a3327e96ba2b3b6f1ed2bf5bcc234366c","PHxmaW1fcHJlZml4fD4KZnJvbSAuYWNyb2JvdCBpbXBvcnQgQWNyb2JvdEVudgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gLmNhcnRwb2xlIGltcG9ydCBDYXJ0UG9sZUVudgpmcm9tIC5sdW5hcmxhbmRlciBpbXBvcnQgTHVuYXJMYW5kZXJFbnYKZnJvbSAubW91bnRhaW5jYXIgaW1wb3J0IE1vdW50YWluQ2FyRW52CmZyb20gLnBlbmR1bHVtIGltcG9ydCBQZW5kdWx1bUVudgo8fGZpbV9lbmR8Pg=="]
["b0450f35eda9226ad2d42fc359455d1f45745124-1","b0450f35eda9226ad2d42fc359455d1f45745124","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNoaXB3aGlzcGVyZXIgYXMgY3cKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdApmcm9tIHRxZG0gaW1wb3J0IHRxZG0KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0aW1lCmZyb20gc2NpcHkgaW1wb3J0IHN0YXRzCgojI1VTRVIgREVGSU5FRCBQQVJBTUVURVJTCm1heF90cmFjZV9sZW5ndGggPSA1MDAKCiNJdGVyYXRpdmUgcHJvY2Vzc2luZyBvZiBlYWNoIHRyYWNlCmRlZiBzZWNvbmRfb3JkZXIodHJhY2UsIG4sIG0sIGMyLCBjMywgYzQpOgogICAgZGVsdGExID0gbnAuemVyb3MoKGxlbih0cmFjZSksbGVuKHRyYWNlKSkpCjx8ZmltX2hvbGV8PgogICAgICAgICAgICBkZWx0YTFbaSwgal0gPSB0ZW1wCgogICAgZGVsdGEyID0gbnAudHJhbnNwb3NlKGRlbHRhMSkKCiAgICAgICAgICAgICMgYzRbaSwgal0gPSBjNFtpLCBqXSAtIDIgKiBjM1swLCBpLCBqXSAqIGRlbHRhMiAvIG4gLSAyICogYzNbMSwgaSwgal0gKiBkZWx0YTEgLyBuICsgYzJbMCwgaSwgal0gXAogICAgICAgICAgICAjICAgICAgICAgICAqIChkZWx0YTIgKiogMikgLyAobiAqKiAyKSArIDQgKiBjMlsxLCBpLCBqXSAqIGRlbHRhMSAqIGRlbHRhMiAvIChuICoqIDIpICsgYzJbMiwgaSwgal0gXAogICAgICAgICAgICAgIyAgICAgICAgICAqIChkZWx0YTEgKiogMikgLyAobiAqKiAyKSArIChkZWx0YTEgKiogMikgKiAoZGVsdGEyICoqIDIpICogKAogICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICBuICoqIDMgLSA0ICogbiAqKiAyICsgNiAqIG4gLSAzKSAvIG4gKiogMwogICAgYzRbOiw6XSA9IGM0IC0gMiAqIGMzWzAsIDosIDpdICogZGVsdGEyIC8gbiAtIDIgKiBjM1sxLCA6LCA6XSAqIGRlbHRhMSAvIG4gKyBjMlswLCA6LCA6XSBcCiAgICAqIChkZWx0YTIgKiogMikgLyAobiAqKiAyKSArIDQgKiBjMlsxLCA6LCA6XSAqIGRlbHRhMSAqIGRlbHRhMiAvIChuICoqIDIpICsgYzJbMiwgOiwgOl0gXAogICAgKiAoZGVsdGExICoqIDIpIC8gKG4gKiogMikgKyAoZGVsdGExICoqIDIpICogKGRlbHRhMiAqKiAyKSAqICggXAogICAgICAgICAgICAgICAgbiAqKiAzIC0gNCAqIG4gKiogMiArIDYgKiBuIC0gMykgLyBuICoqIDMKICAgICNjM1sxLCBpLCBqXSA9IGMzWzEsIGksIGpdIC0gMiAqIGMyWzEsIGksIGpdICogZGVsdGEyIC8gbiAtIGMyWzIsIGksIGpdICogZGVsdGExIC8gbiBcCiAgICAgIyAgICAgICAgICAgICArIGRlbHRhMSAqIChkZWx0YTIgKiogMikgKiAobiAqKiAyIC0gMyAqIG4gKyAyKSAvIG4gKiogMgogICAgI2MzWzAsIGksIGpdID0gYzNbMCwgaSwgal0gLSAyICogYzJbMSwgaSwgal0gKiBkZWx0YTEgLyBuIC0gYzJbMCwgaSwgal0gKiBkZWx0YTEgLyBuIFwKICAgICAjICAgICAgICAgICAgICsgZGVsdGExICoqIDIgKiBkZWx0YTIgKiAobiAqKiAyIC0gMyAqIG4gKyAyKSAvIG4gKiogMgogICAgYzNbMSwgOiw6XSA9IGMzWzEsIDosOl0gLSAyICogYzJbMSwgOiw6XSAqIGRlbHRhMiAvIG4gLSBjMlsyLCA6LDpdICogZGVsdGExIC8gbiBcCiAgICAgICAgICAgICAgICAgICsgZGVsdGExICogKGRlbHRhMiAqKiAyKSAqIChuICoqIDIgLSAzICogbiArIDIpIC8gbiAqKiAyCiAgICBjM1swLCA6LDpdID0gYzNbMCwgOiw6XSAtIDIgKiBjMlsxLCA6LDpdICogZGVsdGExIC8gbiAtIGMyWzAsIDosOl0gKiBkZWx0YTEgLyBuIFwKICAgICAgICAgICAgICAgICAgKyBkZWx0YTEgKiogMiAqIGRlbHRhMiAqIChuICoqIDIgLSAzICogbiArIDIpIC8gbiAqKiAyCiAgICAjIGMyWzIsIGksIGpdID0gYzJbMiwgaSwgal0gKyAoZGVsdGEyICoqIDIpICogKG4gLSAxKSAvIG4KICAgICMgYzJbMSwgaSwgal0gPSBjMlsxLCBpLCBqXSArIGRlbHRhMiAqIGRlbHRhMSAqIChuIC0gMSkgLyBuCiAgICAjIGMyWzAsIGksIGpdID0gYzJbMCwgaSwgal0gKyAoZGVsdGExICoqIDIpICogKG4gLSAxKSAvIG4KICAgIGMyWzIsIDosIDpdID0gYzJbMiwgOiwgOl0gKyAoZGVsdGEyICoqIDIpICogKG4gLSAxKSAvIG4KICAgIGMyWzEsIDosIDpdID0gYzJbMSwgOiwgOl0gKyBkZWx0YTIgKiBkZWx0YTEgKiAobiAtIDEpIC8gbgogICAgYzJbMCwgOiwgOl0gPSBjMlswLCA6LCA6XSArIChkZWx0YTEgKiogMikgKiAobiAtIDEpIC8gbgogICAgZm9yIGkgaW4gcmFuZ2UobGVuKHRyYWNlKSk6CiAgICAgICAgZGVsdGEgPSB0cmFjZVtpXSAtIG1baV0KICAgICAgICBtW2ldID0gbVtpXSArIGRlbHRhIC8gbgoKI1Rha2VzIGV2ZXJ5IG4tdGggc2FtcGxlIHBvaW50IGZyb20gdGhlIGlucHV0IHRyYWNlLCByZWR1Y2VzIHRoZSBudW1iZXIgb2Ygc2FtcGxlIHBvaW50cwpkZWYgZG93bnNhbXBsZSh0cmFjZSwgbik6CiAgICBuZXdfdHJhY2UgPSBucC56ZXJvcyhpbnQobGVuKHRyYWNlKS9uKSkKICAgIGZvciBpIGluIHJhbmdlKGludChsZW4odHJhY2UpL24pKToKICAgICAgICBuZXdfdHJhY2VbaV0gPSB0cmFjZVtpKm5dCiAgICByZXR1cm4gbmV3X3RyYWNlCgpmaXhlZFRyYWNlcyA9IG5wLmxvYWQocicuL1RyYWNlcy9meFRyYWNlcy0wLm5weScpCmRvd25zYW1wbGVfZmFjdG9yID0gaW50KGZpeGVkVHJhY2VzLnNoYXBlWzFdL21heF90cmFjZV9sZW5ndGgpCnNhbXBsZV9zaXplID0gaW50KGZpeGVkVHJhY2VzLnNoYXBlWzFdL2Rvd25zYW1wbGVfZmFjdG9yKQoKI1BhcmFtZXRlcnMgZm9yIHNlY29uZCBvcmRlciB0LVRlc3QKdEFycmF5ID0gbnAuemVyb3MoKHNhbXBsZV9zaXplLCBzYW1wbGVfc2l6ZSkpCm1fZnggPSBucC56ZXJvcyhzYW1wbGVfc2l6ZSkKYzJfZnggPSBucC56ZXJvcygoMywgc2FtcGxlX3NpemUsIHNhbXBsZV9zaXplKSkKYzNfZnggPSBucC56ZXJvcygoMiwgc2FtcGxlX3NpemUsIHNhbXBsZV9zaXplKSkKYzRfZnggPSBucC56ZXJvcygoc2FtcGxlX3NpemUsIHNhbXBsZV9zaXplKSkKbV9ybmQgPSBucC56ZXJvcyhzYW1wbGVfc2l6ZSkKYzJfcm5kID0gbnAuemVyb3MoKDMsIHNhbXBsZV9zaXplLCBzYW1wbGVfc2l6ZSkpCmMzX3JuZCA9IG5wLnplcm9zKCgyLCBzYW1wbGVfc2l6ZSwgc2FtcGxlX3NpemUpKQpjNF9ybmQgPSBucC56ZXJvcygoc2FtcGxlX3NpemUsIHNhbXBsZV9zaXplKSkKY250X2Z4ID0gMApjbnRfcm5kID0gMAoKZm9yIG11bHRpcGxlIGluIHRxZG0ocmFuZ2UoMTApKToKICAgIGZpeGVkVHJhY2VzID0gbnAubG9hZChyJy4vVHJhY2VzL2Z4VHJhY2VzLXt9Lm5weScuZm9ybWF0KG11bHRpcGxlKSkKICAgIHJhbmRvbVRyYWNlcyA9IG5wLmxvYWQocicuL1RyYWNlcy9ybmRUcmFjZXMte30ubnB5Jy5mb3JtYXQobXVsdGlwbGUpKQoKICAgIGZvciBpIGluIHRxZG0ocmFuZ2UoZml4ZWRUcmFjZXMuc2hhcGVbMF0pKToKICAgICAgICBjbnRfZnggKz0gMQogICAgICAgIHNtYWxsVHJhY2UgPSBkb3duc2FtcGxlKGZpeGVkVHJhY2VzW2ksOl0sZG93bnNhbXBsZV9mYWN0b3IpCiAgICAgICAgc2Vjb25kX29yZGVyKHNtYWxsVHJhY2UsIGNudF9meCwgbV9meCwgYzJfZngsIGMzX2Z4LCBjNF9meCkKICAgIGZvciBpIGluIHRxZG0ocmFuZ2UocmFuZG9tVHJhY2VzLnNoYXBlWzBdKSk6CiAgICAgICAgY250X3JuZCArPSAxCiAgICAgICAgc21hbGxUcmFjZSA9IGRvd25zYW1wbGUocmFuZG9tVHJhY2VzW2ksIDpdLCBkb3duc2FtcGxlX2ZhY3RvcikKICAgICAgICBzZWNvbmRfb3JkZXIoc21hbGxUcmFjZSwgY250X3JuZCwgbV9ybmQsIGMyX3JuZCwgYzNfcm5kLCBjNF9ybmQpCgptdV9meCA9IGMyX2Z4WzEsIDosIDpdIC8gY250X2Z4CnZhcl9meCA9IGM0X2Z4WzosIDpdIC8gY250X2Z4IC0gKG11X2Z4ICoqIDIpCm11X3JuZCA9IGMyX3JuZFsxLCA6LCA6XSAvIGNudF9ybmQKdmFyX3JuZCA9IGM0X3JuZFs6LCA6XSAvIGNudF9ybmQgLSAobXVfcm5kICoqIDIpCnRBcnJheSA9IChtdV9meCAtIG11X3JuZCkgLyBucC5zcXJ0KCh2YXJfZnggLyBjbnRfZngpICsgKHZhcl9ybmQgLyBjbnRfcm5kKSkKbnAuc2F2ZSgndEFycmF5X2dlbmVyaWMubnB5JywgdEFycmF5KQoKPHxmaW1fc3VmZml4fD4KICAgIGRlbHRhMiA9IG5wLnplcm9zKChsZW4odHJhY2UpLCBsZW4odHJhY2UpKSkKICAgIGZvciBpIGluIHJhbmdlKGxlbih0cmFjZSkpOgogICAgICAgIHRlbXAgPSB0cmFjZVtpXSAtIG1baV0KICAgICAgICBmb3IgaiBpbiByYW5nZShsZW4odHJhY2UpKToKPHxmaW1fZW5kfD4="]
["6edd34f54c01bbe4723cdc01658f4540b41d9863-3","6edd34f54c01bbe4723cdc01658f4540b41d9863","PHxmaW1fcHJlZml4fD4KIiIiCiAgUHlFYXJ0aFNjaWVuY2U6IENhcnRvcHkgY29udG91ciBwbG90IGV4YW1wbGUKICAKICAgLSBmaWxsZWQgY29udG91ciBvdmVyIG1hcCBwbG90CiAgIC0gcmVjdGlsaW5lYXIgZ3JpZCAobGF0L2xvbikKICAgLSBjb2xvcmJhcgogICAKICAgMTAuMTEuMTUgIGttZgoiIiIKaW1wb3J0IG5ldENERjQgYXMgbmMKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IGNhcnRvcHkuY3JzIGFzIGNjcnMKCgpkZWYgcmVhZF9uZXRDREZfZmlsZSgpOgogICAiIiJSZWFkIG5ldGNkZiBmaWxlIGFuZCByZXR1cm4gYXJyYXlzOiBgYGxhdGBgLGBgbG9uYGAsIGBgdmFyYGAuIiIiCiAgIAogICBmaWxlX25hbWUgPSAnL1VzZXJzL2syMDQwNDUvTkNML2dlbmVyYWwvZGF0YS9uZXdfZGF0YS9yZWN0aWxpbmVhcl9ncmlkXzJELm5jJwogICAKICAgd2l0aCBuYy5EYXRhc2V0KGZpbGVfbmFtZSkgYXMgbmNvOgogICAgICAgdmFyICAgPSBuY28udmFyaWFibGVzWyd0c3VyZiddWzAsOiw6XQogICAgICAgbGF0ICAgPSBuY28udmFyaWFibGVzWydsYXQnXVs6XQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICBsb24gICA9IG5jby52YXJpYWJsZXNbJ2xvbiddWzpdCgo8fGZpbV9lbmR8Pg=="]
["256b135af9f32fec236798312f6e612bb29aef9a-4","256b135af9f32fec236798312f6e612bb29aef9a","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KdHJ5OgogICAgZnJvbSBwYXJzZXIuYmVuY2htYXJrIGltcG9ydCBCZW5jaG1hcmsKZXhjZXB0OgogICAgZnJvbSBiZW5jaG1hcmsgaW1wb3J0IEJlbmNobWFyawo8fGZpbV9lbmR8Pg=="]
["b067a474a833863a6d14c8d3042cb3a6f4966b4c-5","b067a474a833863a6d14c8d3042cb3a6f4966b4c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKaW1wb3J0IHB5dGVzdApmcm9tIHNlbGVuaXVtIGltcG9ydCB3ZWJkcml2ZXIKZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIuY29tbW9uLmJ5IGltcG9ydCBCeQpmcm9tIHNlbGVuaXVtLndlYmRyaXZlci5zdXBwb3J0LndhaXQgaW1wb3J0IFdlYkRyaXZlcldhaXQKZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIuc3VwcG9ydCBpbXBvcnQgZXhwZWN0ZWRfY29uZGl0aW9ucyBhcyBFQwoKCmJyb3dzZXIgPSB3ZWJkcml2ZXIuQ2hyb21lKCIvdXNyL2Jpbi9jaHJvbWVkcml2ZXIiKQpicm93c2VyLmdldCgiaHR0cDovL2xvY2FsaG9zdDoxNjY3IikKCgoKCmFzc2VydCBicm93c2VyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgnLy8qW0BpZD0iYXBwIl0vZGl2L2RpdlsxXS9kaXYvaDEnKS50ZXh0ID09ICJjb25kdWl0Igphc3NlcnQgYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoJy8vKltAaWQ9ImFwcCJdL2Rpdi9kaXZbMV0vZGl2L3AnKS50ZXh0ID09ICJBIHBsYWNlIHRvIHNoYXJlIHlvdXIga25vd2xlZGdlLiIKCiAgICAjICMgVGVzdDMgQUNDRVBUIENPT0tJRVMKIyAgICBkZWYgdGVzdF9fYWNjZXB0X2Nvb2tpZXMoc2VsZik6Cgpicm93c2VyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgnLy8qW0BpZD0iY29va2llLXBvbGljeS1wYW5lbCJdL2Rpdi9kaXZbMl0vYnV0dG9uWzJdL2RpdicpLmNsaWNrKCkKdGltZS5zbGVlcCgyKQoKICAgICMgIyBUZXN0NCBSRUdJU1RSQVRJT04KCmJyb3dzZXIubWF4aW1pemVfd2luZG93KCkKYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoJy8vKltAaWQ9ImFwcCJdL25hdi9kaXYvdWwvbGlbM10vYScpLmNsaWNrKCkKdXNlcm5hbWUgPSBicm93c2VyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgnLy8qW0BpZD0iYXBwIl0vZGl2L2Rpdi9kaXYvZGl2L2Zvcm0vZmllbGRzZXRbMV0vaW5wdXQnKQplbWFpbCA9IGJyb3dzZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCcvLypbQGlkPSJhcHAiXS9kaXYvZGl2L2Rpdi9kaXYvZm9ybS9maWVsZHNldFsyXS9pbnB1dCcpCnBhc3N3b3JkID0gYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoJy8vKltAaWQ9ImFwcCJdL2Rpdi9kaXYvZGl2L2Rpdi9mb3JtL2ZpZWxkc2V0WzNdL2lucHV0JykKCnVzZXJuYW1lLnNlbmRfa2V5cygidXNlcjEiKQplbWFpbC5zZW5kX2tleXMoInVzZXIxQGhvdG1haWwuY29tIikKcGFzc3dvcmQuc2VuZF9rZXlzKCJVc2VycGFzczEiKQo8fGZpbV9ob2xlfD4KI3JlZl90ZXh0ID0gIlJlZ2lzdHJhdGlvbiBmYWlsZWQhIgojcmVmX3RleHQgPSAiV2VsY29tZSIKd2VsY29tZSA9IFdlYkRyaXZlcldhaXQoYnJvd3NlciwgNSkudW50aWwoCiAgICBFQy52aXNpYmlsaXR5X29mX2VsZW1lbnRfbG9jYXRlZCgoQnkuQ1NTX1NFTEVDVE9SLCAiLnN3YWwtdGl0bGUiKSkKICAgICkKcHJpbnQod2VsY29tZS50ZXh0KQojYXNzZXJ0ICh3ZWxjb21lLnRleHQgPT0gcmVmX3RleHQpCiMgICAgICAgIHByaW50KGFsZXJ0LnRleHQpCiMgICAgICAgIHNlbGYuYnJvd3Nlci5zd2l0Y2hfdG8uYWxlcnQoKQojICAgICAgICBhc3NlcnQgc2VsZi5icm93c2VyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgnL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlsyXScpLnRleHQgPT0gcmVmX3RleHQKICAgICAgICAgICAgICAgICMoL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlszXSkudGV4dCA9PSAiRW1haWwgYWxyZWFkeSB0YWtlbi4iCiMgICAgICAgIHNlbGYuYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoJy9odG1sL2JvZHkvZGl2WzJdL2Rpdi9kaXZbNF0vZGl2L2J1dHRvbicpLmNsaWNrKCkKIyByZWZfdGV4dCAnL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlsyXScgV2VsY29tZQoKdGltZS5zbGVlcCgyKQo8fGZpbV9zdWZmaXh8Pgp0aW1lLnNsZWVwKDIpCmJyb3dzZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCcvLypbQGlkPSJhcHAiXS9kaXYvZGl2L2Rpdi9kaXYvZm9ybS9idXR0b24nKS5jbGljaygpCnRpbWUuc2xlZXAoMikKICAgICAgICAjIHRlc3RpbmcgcG9wdXAgd2luZG93Ogo8fGZpbV9lbmR8Pg=="]
["abfd67d9f65e4ffd9037a311f83252989c0c7a4b-2","abfd67d9f65e4ffd9037a311f83252989c0c7a4b","PHxmaW1fcHJlZml4fD4KZnJvbSBzY3JlZW5wbGF5IGltcG9ydCBBY3Rpb24sIEFjdG9yLCBsb2dfbWVzc2FnZQpmcm9tIGFiaWxpdGllcy5icm93c2VfdGhlX3dlYiBpbXBvcnQgd2FpdGluZ19icm93c2VyX2Zvcgpmcm9tIHNlbGVuaXVtLmNvbW1vbi5leGNlcHRpb25zIGltcG9ydCBTdGFsZUVsZW1lbnRSZWZlcmVuY2VFeGNlcHRpb24sIE5vU3VjaEVsZW1lbnRFeGNlcHRpb24KCmNsYXNzIGNsaWNrX29uKEFjdGlvbik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NhdG9yKToKICAgICAgICBzZWxmLl9sb2NhdG9yID0gbG9jYXRvcgoKICAgIEBsb2dfbWVzc2FnZSgiQ2xpY2tzIG9uIHtzZWxmLl9sb2NhdG9yWzFdfSIpCjx8ZmltX2VuZHw+"]
["dd427c33baee73bcac0f577a8c7883f09ce481ee-3","dd427c33baee73bcac0f577a8c7883f09ce481ee","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmltcG9ydCBweXRlc3QKZnJvbSBsaW5kaC5qc29ub2JqZWN0IGltcG9ydCBQcm9wZXJ0eVNldCwgUHJvcGVydHkKCgpkZWYgdGVzdF9zZXRfdmlhX2NvbnN0cnVjdG9yKCk6CiAgICBjbGFzcyBPKFByb3BlcnR5U2V0KToKICAgICAgICBzID0gUHJvcGVydHkobGlzdCkKCiAgICBvID0gTyhzPVsxLCAyLCAzXSkKCiAgICBhc3NlcnQgby5zID09IFsxLCAyLCAzXQoKCmRlZiB0ZXN0X3NldF92aWFfYXR0cmlidXRlKCk6CiAgICBjbGFzcyBPKFByb3BlcnR5U2V0KToKICAgICAgICBzID0gUHJvcGVydHkobGlzdCkKCiAgICBvID0gTygpCiAgICBvLnMgPSBbMSwgMiwgM10KCiAgICBhc3NlcnQgby5zID09IFsxLCAyLCAzXQoKCmRlZiB0ZXN0X3NldF9yZXF1aXJlZF9taXNzaW5nKCk6CiAgICBjbGFzcyBPKFByb3BlcnR5U2V0KToKICAgICAgICBzID0gUHJvcGVydHkobGlzdCwgcmVxdWlyZWQ9VHJ1ZSkKCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgbyA9IE8ocz1Ob25lKQoKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICBvID0gTyhzPVsxLCAyLCAzXSkKICAgICAgICBvLnMgPSBOb25lCgoKZGVmIHRlc3Rfc2V0X3JlcXVpcmVkX3ByZXNlbnQoKToKICAgIGNsYXNzIE8oUHJvcGVydHlTZXQpOgogICAgICAgIHMgPSBQcm9wZXJ0eShsaXN0LCByZXF1aXJlZD1UcnVlKQoKICAgIG8gPSBPKHM9WzEsIDIsIDNdKQoKICAgIGFzc2VydCBvLnMgPT0gWzEsIDIsIDNdCgoKZGVmIHRlc3RfZXh0ZXJuYWxfdmFsaWRhdG9yKCk6CiAgICBkZWYgdmFsaWRhdG9yKHZhbHVlKToKICAgICAgICBpZiBsZW4odmFsdWUpICE9IDE6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKCiAgICBjbGFzcyBPKFByb3BlcnR5U2V0KToKICAgICAgICBzID0gUHJvcGVydHkobGlzdCwgdmFsaWRhdG9yPXZhbGlkYXRvcikKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIG8gPSBPKHM9WzFdKQoKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICBvLnMgPSBbMSwgMl0KPHxmaW1fZW5kfD4="]
["f9f0f1ad8961981d743a6a71787c8926bc4b63c2-1","f9f0f1ad8961981d743a6a71787c8926bc4b63c2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCgpudW0gPSBbMF0KbnVtWzBdID0gZmxvYXQoaW5wdXQoJ0RpZ2l0ZSB1bSBuw7ptZXJvIHF1YWxxdWVyOiAnKSkKCnByaW50KGYnTyBuw7ptZXJvIGluZm9ybWFkbyBmb2kge251bX0nKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpvcy5zeXN0ZW0oInBhdXNlIikKPHxmaW1fZW5kfD4="]
["69626325d673605d88d2e74de6ccec8060312d30-3","69626325d673605d88d2e74de6ccec8060312d30","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IHN5cwoKCmNsYXNzIE91dGNvbWU6CiAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dCwga2V5KToKICAgICAgICBzZWxmLnRleHQgPSB0ZXh0CiAgICAgICAgc2VsZi5rZXkgPSBrZXkKCiAgICAgICAgbGluZXMgPSB0ZXh0LnNwbGl0KCJcbiIpCiAgICAgICAgbGluZXMgPSBsaXN0KGZpbHRlcihsYW1iZGEgeDogeCBhbmQgeFswXSAhPSAiIyIsIGxpbmVzKSkKCiAgICAgICAgIyBUZXN0IENvUlcxK2ZlbmNlLnJ3LnJ3cyBBbGxvd2VkCiAgICAgICAgdGVzdF9saXQsIHNlbGYudGl0bGUsIHNlbGYuZXhwZWN0YXRpb24gPSBsaW5lc1swXS5zdHJpcCgpLnNwbGl0KCIgIikKICAgICAgICBhc3NlcnQgdGVzdF9saXQgPT0gIlRlc3QiCgogICAgICAgICMgU3RhdGVzIDEKICAgICAgICBzdGF0ZXNfbGl0LCBzdGF0ZV9jb3VudCA9IGxpbmVzWzFdLnN0cmlwKCkuc3BsaXQoIiAiKQogICAgICAgIGFzc2VydCBzdGF0ZXNfbGl0ID09ICJTdGF0ZXMiCiAgICAgICAgc2VsZi5zdGF0ZV9jb3VudCA9IGludChzdGF0ZV9jb3VudCkKCiAgICAgICAgIyAwOng1PTA7IHg9MTsKICAgICAgICBzdGF0ZXMgPSBbXQogICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYuc3RhdGVfY291bnQpOgogICAgICAgICAgICBzdGF0ZV9jb250ZW50cyA9IGxpbmVzWzIgKyBpXS5zdHJpcCgpLnNwbGl0KCIgIikKICAgICAgICAgICAgc3RhdGVfZWxlbWVudHMgPSBbXQogICAgICAgICAgICBmb3IgaSBpbiBzdGF0ZV9jb250ZW50czoKICAgICAgICAgICAgICAgIGtleSwgdmFsID0gaS5yc3RyaXAoIjsiKS5zcGxpdCgiPSIpCiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgdmFsID0gc3RyKGhleChpbnQodmFsKSkpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gc3RyKGhleChpbnQodmFsLCAxNikpKQogICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgo8fGZpbV9lbmR8Pg=="]
["595daaf8ce4606917dd753e4cb40e80798a60576-4","595daaf8ce4606917dd753e4cb40e80798a60576","PHxmaW1fcHJlZml4fD4Kb3V0cHV0ID0gIiIiCntzdGFydH0gc3VwcG9zZWQgdG8gYmUgYSB7cH0uCntzdGFydH0gcHJldHR5IHVzZWxlc3MsIGFuZCBhbm5veWluZyB0byB0eXBlLgp7c3RhcnR9IGxpbmUgMiBvZiB0aGUge3B9Lgp7c3RhcnR9IGlzIHNvbWV0aGluZyBAeGVsZHJhZ28gd2FudHMgdXMgdG8gZG8uClx0VG8gd3JpdGUgYSB7cH0gYW5kIHVzZSB7c3RyZn0gaW4gd3JpdGluZyB0aGUge3B9Cgp7c3RhcnR9IGlzIHBvaW50bGVzcy4KVGhlIGNvbmNlcHQgb2Yge3N0cmZ9IGlzIG5vdCB2ZXJ5IHVzZWZ1bC4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpBdCBsZWFzdCBub3QgdGhlIHtzdHJmfSBmdW5jdGlvbiBvZiB0aGUgY2xhc3Mgc3RyLgp7c3RhcnR9IGJlY2F1c2UgdGhlcmUgaXMgYSBuZWVkIHRvIHJlcGV0aXRpdmVseSBkZWZpbmUgdGhlIGZvcm1hdCBieSB1c2luZyBtdXRsaXBsZSBicmFjZXMuCkFuZCB0aGVuIHRvIGFkZCB0byB0aGUgcGFpbiwgb25lIG5lZWRzIHRvIGRlZmluZSB0aGUgdmFsdWUgb2YgZWFjaCBicmFjZS4KVGhleSByZWFsbHkgZG8gbm90IG1ha2UgYW55dGhpbmcgZWFzaWVyIGZvciBhbnlvbmUuIEkgaGF2ZSBuZXZlciBzZWVuIGFueSBwcm9ncmFtbWVyIG5lZWQgdG8gdHlwZSBzdWNoIGEgbG9uZyB7cH0uCjx8ZmltX2VuZHw+"]
["592f749e81b1ea9c07d01230a53a054b96ab8d9d-4","592f749e81b1ea9c07d01230a53a054b96ab8d9d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdApmcm9tIG1vY2sgaW1wb3J0IE1vY2sKCmZyb20gc2lnb3B0Lm9yY2hlc3RyYXRlLmNsdXN0ZXIuZXJyb3JzIGltcG9ydCAoCiAgQWxyZWFkeUNvbm5lY3RlZEV4Y2VwdGlvbiwKICBNdWx0aXBsZUNsdXN0ZXJzQ29ubmVjdGlvbkVycm9yLAogIE5vdENvbm5lY3RlZEVycm9yLAogIFBsZWFzZURpc2Nvbm5lY3RFcnJvciwKKQpmcm9tIHNpZ29wdC5vcmNoZXN0cmF0ZS5jbHVzdGVyLm9iamVjdCBpbXBvcnQgQVdTQ2x1c3RlciwgQ3VzdG9tQ2x1c3Rlcgpmcm9tIHNpZ29wdC5vcmNoZXN0cmF0ZS5jbHVzdGVyLnNlcnZpY2UgaW1wb3J0IENsdXN0ZXJTZXJ2aWNlCmZyb20gc2lnb3B0Lm9yY2hlc3RyYXRlLmN1c3RvbV9jbHVzdGVyLnNlcnZpY2UgaW1wb3J0IEN1c3RvbUNsdXN0ZXJTZXJ2aWNlCmZyb20gc2lnb3B0Lm9yY2hlc3RyYXRlLmV4Y2VwdGlvbnMgaW1wb3J0IE9yY2hlc3RyYXRlRXhjZXB0aW9uCmZyb20gc2lnb3B0Lm9yY2hlc3RyYXRlLnByb3ZpZGVyLmNvbnN0YW50cyBpbXBvcnQgUHJvdmlkZXIKCgpjbGFzcyBUZXN0Q2x1c3RlclNlcnZpY2Uob2JqZWN0KToKICBAcHl0ZXN0LmZpeHR1cmUKICBkZWYgc2VydmljZXMoc2VsZik6CiAgICBtb2NrX3NlcnZpY2VzID0gTW9jaygpCiAgICBtb2NrX3NlcnZpY2VzLmdldF9vcHRpb24gPSBNb2NrKHJldHVybl92YWx1ZT0nYmFyJykKCiAgICBkZWYgZmFrZV9nZXRfcHJvdmlkZXJfc2VydmljZShwcm92aWRlcik6CiAgICAgIGlmIHByb3ZpZGVyID09IFByb3ZpZGVyLkFXUzoKICAgICAgICByZXR1cm4gTW9jaygKICAgICAgICAgIGNyZWF0ZV9rdWJlcm5ldGVzX2NsdXN0ZXI9TW9jayhyZXR1cm5fdmFsdWU9QVdTQ2x1c3RlcigKICAgICAgICAgICAgc2VydmljZXM9bW9ja19zZXJ2aWNlcywKICAgICAgICAgICAgbmFtZT0nZm9vYmFyJywKICAgICAgICAgICAgcmVnaXN0cnk9Tm9uZSwKICAgICAgICAgICkpCiAgICAgICAgKQogICAgICBlbGlmIHByb3ZpZGVyID09IFByb3ZpZGVyLkNVU1RPTToKICAgICAgICByZXR1cm4gQ3VzdG9tQ2x1c3RlclNlcnZpY2UobW9ja19zZXJ2aWNlcykKICAgICAgZWxzZToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKCiAgICBtb2NrX3NlcnZpY2VzLnByb3ZpZGVyX2Jyb2tlci5nZXRfcHJvdmlkZXJfc2VydmljZSA9IGZha2VfZ2V0X3Byb3ZpZGVyX3NlcnZpY2UKICAgIHJldHVybiBtb2NrX3NlcnZpY2VzCgogIEBweXRlc3QuZml4dHVyZQogIGRlZiBjbHVzdGVyX3NlcnZpY2Uoc2VsZiwgc2VydmljZXMpOgogICAgY2x1c3Rlcl9zZXJ2aWNlID0gQ2x1c3RlclNlcnZpY2Uoc2VydmljZXMpCiAgICBzZXJ2aWNlcy5jbHVzdGVyX3NlcnZpY2UgPSBjbHVzdGVyX3NlcnZpY2UKICAgIHJldHVybiBjbHVzdGVyX3NlcnZpY2UKCiAgZGVmIHRlc3RfY29ubmVjdGVkX2NsdXN0ZXJzKHNlbGYsIGNsdXN0ZXJfc2VydmljZSk6CiAgICBjbHVzdGVyX3NlcnZpY2Uuc2VydmljZXMua3ViZXJuZXRlc19zZXJ2aWNlLmdldF9jbHVzdGVyX25hbWVzLnJldHVybl92YWx1ZSA9IFtdCiAgICBhc3NlcnQgY2x1c3Rlcl9zZXJ2aWNlLmNvbm5lY3RlZF9jbHVzdGVycygpID09IFtdCiAgICBjbHVzdGVyX3NlcnZpY2Uuc2VydmljZXMua3ViZXJuZXRlc19zZXJ2aWNlLmdldF9jbHVzdGVyX25hbWVzLnJldHVybl92YWx1ZSA9IFsnZm9vJ10KICAgIGFzc2VydCBjbHVzdGVyX3NlcnZpY2UuY29ubmVjdGVkX2NsdXN0ZXJzKCkgPT0gWydmb28nXQogICAgY2x1c3Rlcl9zZXJ2aWNlLnNlcnZpY2VzLmt1YmVybmV0ZXNfc2VydmljZS5nZXRfY2x1c3Rlcl9uYW1lcy5yZXR1cm5fdmFsdWUgPSBbJ2ZvbycsICdiYXInXQogICAgYXNzZXJ0IHNvcnRlZChjbHVzdGVyX3NlcnZpY2UuY29ubmVjdGVkX2NsdXN0ZXJzKCkpID09IFsnYmFyJywgJ2ZvbyddCgogIGRlZiB0ZXN0X211bHRpcGxlX2NsdXN0ZXJzKHNlbGYsIGNsdXN0ZXJfc2VydmljZSk6CiAgICBjbHVzdGVyX3NlcnZpY2UuY29ubmVjdGVkX2NsdXN0ZXJzID0gTW9jayhyZXR1cm5fdmFsdWU9WydiYXInLCAnZm9vJ10pCgogICAgd2l0aCBweXRlc3QucmFpc2VzKE11bHRpcGxlQ2x1c3RlcnNDb25uZWN0aW9uRXJyb3IpOgogICAgICBjbHVzdGVyX3NlcnZpY2UuYXNzZXJ0X2lzX2Nvbm5lY3RlZCgpCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoTXVsdGlwbGVDbHVzdGVyc0Nvbm5lY3Rpb25FcnJvcik6CiAgICAgIGNsdXN0ZXJfc2VydmljZS5hc3NlcnRfaXNfZGlzY29ubmVjdGVkKCkKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhNdWx0aXBsZUNsdXN0ZXJzQ29ubmVjdGlvbkVycm9yKToKICAgICAgY2x1c3Rlcl9zZXJ2aWNlLmNvbm5lY3QoCiAgICAgICAgY2x1c3Rlcl9uYW1lPU5vbmUsCiAgICAgICAgcHJvdmlkZXJfc3RyaW5nPSdhd3MnLAogICAgICAgIGt1YmVjb25maWc9Tm9uZSwKICAgICAgICByZWdpc3RyeT1Ob25lLAogICAgICApCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoTXVsdGlwbGVDbHVzdGVyc0Nvbm5lY3Rpb25FcnJvcik6CiAgICAgIGNsdXN0ZXJfc2VydmljZS5jcmVhdGUoTm9uZSkKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhNdWx0aXBsZUNsdXN0ZXJzQ29ubmVjdGlvbkVycm9yKToKICAgICAgY2x1c3Rlcl9zZXJ2aWNlLmRpc2Nvbm5lY3QoJ2JhcicsIE5vbmUpCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoTXVsdGlwbGVDbHVzdGVyc0Nvbm5lY3Rpb25FcnJvcik6CiAgICAgIGNsdXN0ZXJfc2VydmljZS50ZXN0KCkKCiAgICBjbHVzdGVyX3NlcnZpY2UuZGlzY29ubmVjdChjbHVzdGVyX25hbWU9Tm9uZSwgZGlzY29ubmVjdF9hbGw9VHJ1ZSkKCiAgICAjIFRPRE8oYWxleGFuZHJhKTogZGVjaWRlIHdoaWNoIHBlcm1pc3Npb25zIHRvIHZhbGlkYXRlIGZvciBjbHVzdGVyIGRlc3Ryb3kKICAgIGNsdXN0ZXJfc2VydmljZS5kZXN0cm95KE5vbmUsICdhd3MnKQoKICBkZWYgdGVzdF9ub19jbHVzdGVycyhzZWxmLCBjbHVzdGVyX3NlcnZpY2UpOgogICAgY2x1c3Rlcl9zZXJ2aWNlLmNvbm5lY3RlZF9jbHVzdGVycyA9IE1vY2socmV0dXJuX3ZhbHVlPVtdKQoKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhOb3RDb25uZWN0ZWRFcnJvcik6CiAgICAgIGNsdXN0ZXJfc2VydmljZS5hc3NlcnRfaXNfY29ubmVjdGVkKCkKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhOb3RDb25uZWN0ZWRFcnJvcik6CiAgICAgIGNsdXN0ZXJfc2VydmljZS5kaXNjb25uZWN0KCdiYXInLCBOb25lKQogICAgd2l0aCBweXRlc3QucmFpc2VzKE5vdENvbm5lY3RlZEVycm9yKToKICAgICAgY2x1c3Rlcl9zZXJ2aWNlLmRpc2Nvbm5lY3QoY2x1c3Rlcl9uYW1lPU5vbmUsIGRpc2Nvbm5lY3RfYWxsPVRydWUpCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoTm90Q29ubmVjdGVkRXJyb3IpOgogICAgICBjbHVzdGVyX3NlcnZpY2UudGVzdCgpCgogICAgY2x1c3Rlcl9zZXJ2aWNlLmFzc2VydF9pc19kaXNjb25uZWN0ZWQoKQogICAgY2x1c3Rlcl9zZXJ2aWNlLnRlc3QgPSBNb2NrKCkKICAgIGNsdXN0ZXJfc2VydmljZS5jb25uZWN0KAogICAgICBjbHVzdGVyX25hbWU9J2NsdXN0ZXJfbmFtZScsCiAgICAgIHByb3ZpZGVyX3N0cmluZz0nYXdzJywKICAgICAga3ViZWNvbmZpZz1Ob25lLAogICAgICByZWdpc3RyeT1Ob25lLAogICAgKQogICAgYXNzZXJ0IGNsdXN0ZXJfc2VydmljZS50ZXN0LmNhbGxfY291bnQgPT0gMQogICAgY2x1c3Rlcl9zZXJ2aWNlLmNyZWF0ZShkaWN0KHByb3ZpZGVyPSdhd3MnKSkKCiAgICAjIFRPRE8oYWxleGFuZHJhKTogZGVjaWRlIHdoaWNoIHBlcm1pc3Npb25zIHRvIHZhbGlkYXRlIGZvciBjbHVzdGVyIGRlc3Ryb3kKICAgIGNsdXN0ZXJfc2VydmljZS5kZXN0cm95KE5vbmUsICdhd3MnKQoKICBkZWYgdGVzdF9vbmVfY2x1c3RlcnMoc2VsZiwgY2x1c3Rlcl9zZXJ2aWNlKToKICAgIGNsdXN0ZXJfc2VydmljZS5jb25uZWN0ZWRfY2x1c3RlcnMgPSBNb2NrKHJldHVybl92YWx1ZT1bJ2ZvbyddKQogICAgY2x1c3Rlcl9zZXJ2aWNlLnNlcnZpY2VzLmNsdXN0ZXJfbWV0YWRhdGFfc2VydmljZS5yZWFkX21ldGFkYXRhID0gTW9jaygKICAgICAgcmV0dXJuX3ZhbHVlPUN1c3RvbUNsdXN0ZXIoCiAgICAgICAgc2VydmljZXM9Y2x1c3Rlcl9zZXJ2aWNlLnNlcnZpY2VzLAogICAgICAgIG5hbWU9J2ZvbycsCiAgICAgICAgcmVnaXN0cnk9Tm9uZSwKICAgICAgKQogICAgKQoKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhQbGVhc2VEaXNjb25uZWN0RXJyb3IpOgogICAgICBjbHVzdGVyX3NlcnZpY2UuYXNzZXJ0X2lzX2Rpc2Nvbm5lY3RlZCgpCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoUGxlYXNlRGlzY29ubmVjdEVycm9yKToKICAgICAgY2x1c3Rlcl9zZXJ2aWNlLmNvbm5lY3QoCiAgICAgICAgY2x1c3Rlcl9uYW1lPSdiYXInLAogICAgICAgIHByb3ZpZGVyX3N0cmluZz0nYXdzJywKICAgICAgICBrdWJlY29uZmlnPU5vbmUsCiAgICAgICAgcmVnaXN0cnk9Tm9uZSwKICAgICAgKQogICAgd2l0aCBweXRlc3QucmFpc2VzKFBsZWFzZURpc2Nvbm5lY3RFcnJvcik6CiAgICAgIGNsdXN0ZXJfc2VydmljZS5jcmVhdGUoZGljdChjbHVzdGVyX25hbWU9J2JhcicpKQogICAgd2l0aCBweXRlc3QucmFpc2VzKFBsZWFzZURpc2Nvbm5lY3RFcnJvcik6CiAgICAgIGNsdXN0ZXJfc2VydmljZS5kaXNjb25uZWN0KCdiYXInLCBOb25lKQoKICAgIGNsdXN0ZXJfc2VydmljZS5hc3NlcnRfaXNfY29ubmVjdGVkKCkKCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoQWxyZWFkeUNvbm5lY3RlZEV4Y2VwdGlvbik6CiAgICAgIGNsdXN0ZXJfc2VydmljZS5jb25uZWN0KAogICAgICAgIGNsdXN0ZXJfbmFtZT0nZm9vJywKICAgICAgICBwcm92aWRlcl9zdHJpbmc9J2F3cycsCiAgICAgICAga3ViZWNvbmZpZz1Ob25lLAogICAgICAgIHJlZ2lzdHJ5PU5vbmUsCiAgICAgICkKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhBbHJlYWR5Q29ubmVjdGVkRXhjZXB0aW9uKToKICAgICAgY2x1c3Rlcl9zZXJ2aWNlLmNyZWF0ZShkaWN0KGNsdXN0ZXJfbmFtZT0nZm9vJykpCgogICAgY2x1c3Rlcl9zZXJ2aWNlLmRpc2Nvbm5lY3QoJ2ZvbycsIE5vbmUpCiAgICBjbHVzdGVyX3NlcnZpY2UuZGlzY29ubmVjdChjbHVzdGVyX25hbWU9Tm9uZSwgZGlzY29ubmVjdF9hbGw9VHJ1ZSkKICAgIGNsdXN0ZXJfc2VydmljZS5kZXN0cm95KCdmb28nLCAnYXdzJykKICAgIGNsdXN0ZXJfc2VydmljZS50ZXN0KCkKCiAgICAjIFRPRE8oYWxleGFuZHJhKTogZGVjaWRlIHdoaWNoIHBlcm1pc3Npb25zIHRvIHZhbGlkYXRlIGZvciBjbHVzdGVyIGRlc3Ryb3kKICAgIGNsdXN0ZXJfc2VydmljZS5kZXN0cm95KCdiYXInLCAnYXdzJykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICBkZWYgdGVzdF9jcmVhdGVfY2x1c3RlcihzZWxmLCBjbHVzdGVyX3NlcnZpY2UpOgogICAgY2x1c3Rlcl9zZXJ2aWNlLmNvbm5lY3RlZF9jbHVzdGVycyA9IE1vY2socmV0dXJuX3ZhbHVlPVtdKQogICAgY2x1c3Rlcl9uYW1lID0gY2x1c3Rlcl9zZXJ2aWNlLmNyZWF0ZShkaWN0KHByb3ZpZGVyPSdhd3MnKSkKPHxmaW1fZW5kfD4="]
["b08ace63698b09a9cecc4def6314bc6dede42cd0-2","b08ace63698b09a9cecc4def6314bc6dede42cd0","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgbGlic2luYW4uanNheAoKY2xhc3MgU2ltcGxlVGFza0hhbmRsZXIob2JqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmV2ZW50X3R5cGUgPSBOb25lCiAgICAgICAgc2VsZi50eXBlID0gTm9uZQogICAgICAgIHNlbGYuZGVzYyA9IE5vbmUKICAgICAgICBzZWxmLnRhc2sgPSBOb25lCiAgICAgICAgc2VsZi5mYXVsdCA9IE5vbmUKCiAgICBkZWYgc2V0X2V2ZW50X3R5cGUoc2VsZiwgdmFsdWUpOgogICAgICAgIHNlbGYuZXZlbnRfdHlwZSA9IHZhbHVlCgogICAgZGVmIHNldF90eXBlKHNlbGYsIHZhbHVlKToKICAgICAgICBzZWxmLnR5cGUgPSB2YWx1ZQoKICAgIGRlZiBzZXRfZGVzYyhzZWxmLCB2YWx1ZSk6CiAgICAgICAgc2VsZi5kZXNjID0gdmFsdWUKCiAgICBkZWYgc2V0X3Rhc2soc2VsZiwgdmFsdWUpOgogICAgICAgIHNlbGYudGFzayA9IHZhbHVlCgogICAgZGVmIG9iamVjdF9iZWdpbihzZWxmKToKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIGRlZiBrZXkoc2VsZiwgdmFsdWUpOgogICAgICAgIGlmIHZhbHVlID09ICJldmVudF90eXBlIjoKICAgICAgICAgICAgc2VsZi5uZXh0ID0gc2VsZi5zZXRfZXZlbnRfdHlwZQogICAgICAgIGVsaWYgdmFsdWUgPT0gInR5cGUiOgogICAgICAgICAgICBzZWxmLm5leHQgPSBzZWxmLnNldF90eXBlCiAgICAgICAgZWxpZiB2YWx1ZSA9PSAiZGVzYyI6CiAgICAgICAgICAgIHNlbGYubmV4dCA9IHNlbGYuc2V0X2Rlc2MKICAgICAgICBlbGlmIHZhbHVlID09ICJ0YXNrIjoKICAgICAgICAgICAgc2VsZi5uZXh0ID0gc2VsZi5zZXRfdGFzawoKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIGRlZiB2YWx1ZV9iZWdpbihzZWxmKToKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIGRlZiBzdHJpbmcoc2VsZiwgdmFsdWUpOgogICAgICAgIHNlbGYubmV4dCh2YWx1ZSkKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIGRlZiBudW1iZXIoc2VsZiwgdmFsdWUpOgogICAgICAgIHNlbGYubmV4dCh2YWx1ZSkKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIGRlZiB0cnVlKHNlbGYpOgogICAgICAgIHNlbGYubmV4dChUcnVlKQogICAgICAgIHJldHVybiBUcnVlCgogICAgZGVmIGZhbHNlKHNlbGYpOgogICAgICAgIHNlbGYubmV4dChGYWxzZSkKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIGRlZiBudWxsKHNlbGYpOgo8fGZpbV9ob2xlfD4KICAgIGRlZiBhcnJheV9iZWdpbihzZWxmKToKICAgICAgICBzZWxmLmFycmF5ID0gW10KICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIGRlZiBhcnJheV9lbmQoc2VsZik6CiAgICAgICAgc2VsZi5uZXh0KHNlbGYuYXJyYXkpCiAgICAgICAgc2VsZi5hcnJheSA9IE5vbmUKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIGRlZiBvYmplY3RfZW5kKHNlbGYpOgogICAgICAgICIiIiBXZSBvbmx5IGdldCBvbmUgb2JqZWN0IHBlciByaWdodCBub3cgc28KICAgICAgICBsZXRzIHByaW50IGl0IG91dCB3aGVuIHdlIGdldCBpdCAiIiIKCiAgICAgICAgaWYgKHNlbGYudHlwZSA9PSAidGFza19ldmVudCIgYW5kIHNlbGYuZGVzYyBhbmQKICAgICAgICAgICAgKHNlbGYuZXZlbnRfdHlwZSA9PSAiaW8iCiAgICAgICAgICAgICBvciBzZWxmLmV2ZW50X3R5cGUgPT0gIndpcCIpKToKICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShzZWxmLmRlc2MpCiAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgIGVsaWYgc2VsZi50eXBlID09ICJ0YXNrX2V2ZW50IiBhbmQgc2VsZi5kZXNjOgogICAgICAgICAgICBhZGRpdGlvbiA9ICIiCiAgICAgICAgICAgIGlmIHNlbGYuZXZlbnRfdHlwZSA9PSAiZmF1bHQiOgogICAgICAgICAgICAgICAgYWRkaXRpb24gPSAiIGZhdWx0ISEiCiAgICAgICAgICAgICAgICBzZWxmLmZhdWx0ID0gVHJ1ZQoKICAgICAgICAgICAgcHJpbnQgIlsiICsgc2VsZi50YXNrICsgYWRkaXRpb24gKyAiXSIsIHNlbGYuZGVzYwogICAgICAgIGVsaWYgc2VsZi50eXBlID09ICJ0YXNrX2V2ZW50IjoKICAgICAgICAgICAgcHJpbnQgIlsiICsgc2VsZi50YXNrICsgIl0iLCBzZWxmLmV2ZW50X3R5cGUKICAgICAgICBlbGlmIHNlbGYudHlwZSA9PSAicnVuX2V2ZW50IiBhbmQgc2VsZi5ldmVudF90eXBlID09ICJzdG9wIiBhbmQgc2VsZi5kZXNjOgogICAgICAgICAgICBwcmludCAic3RvcHBpbmcsICIgKyBzZWxmLmRlc2MKICAgICAgICBlbGlmIHNlbGYudHlwZSA9PSAicnVuX2V2ZW50IiBhbmQgc2VsZi5ldmVudF90eXBlID09ICJmYXVsdCI6CiAgICAgICAgICAgIHNlbGYuZmF1bHQgPSBUcnVlCiAgICAgICAgICAgIGlmIHNlbGYuZGVzYzoKICAgICAgICAgICAgICAgIHByaW50IHNlbGYuZGVzYwogICAgICAgICAgICBwcmludCAicnVuIGNvbXBsZXRlIHdpdGggZmF1bHRzIgoKICAgICAgICBzZWxmLmV2ZW50X3R5cGUgPSBOb25lCiAgICAgICAgc2VsZi50eXBlID0gTm9uZQogICAgICAgIHNlbGYuZGVzYyA9IE5vbmUKICAgICAgICBzZWxmLnRhc2sgPSBOb25lCiAgICAgICAgc2VsZi5uZXh0ID0gTm9uZQogICAgICAgIHJldHVybiBUcnVlCgogICAgZGVmIHZhbHVlX2VuZChzZWxmKToKICAgICAgICByZXR1cm4gVHJ1ZQoKZGVmIGhhbmRsZSh0YXNrLCBjb25uKToKICAgICIiIiBIYW5kbGVzIG91dHB1dCBmcm9tIHRoZSBzZXJ2ZXIuIEZvciB0aGUgbW9zdCBwYXJ0IHRoaXMganVzdAogICAgcGFyc2VzIHRoZSBkZWZhdWx0IHR5cGVzIG9mIGV2ZW50IGxheW91dCBhbmQgcHJpbnRzIGl0IHRvIHN0YW5kYXJkIG91dAogICAgaW4gc3BlY2lhbCBjYXNlcyBpdCBtYXkgZG8gc29tZXRoaW5nIGVsc2UgIiIiCiAgICBpZiBjb25uLnN0YXR1cyA9PSAyMDA6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBoYW5kbGVyID0gU2ltcGxlVGFza0hhbmRsZXIoKQogICAgICAgICAgICBsaWJzaW5hbi5qc2F4LnBhcnNlKGNvbm4sIFNpbXBsZVRhc2tIYW5kbGVyKCkpCiAgICAgICAgICAgIGlmIGhhbmRsZXIuZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gMQogICAgICAgICAgICByZXR1cm4gMAogICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBtc2c6CiAgICAgICAgICAgIHByaW50ICJHb3QgYW4gZXJyb3IgYmFjayBmcm9tIHNpbmFuLiBDaGVjayB0aGUgbG9ncyBhdCB+Ly5zaW5hbi9sb2dzL2tlcm5lbC5sb2ciCiAgICBlbHNlOgogICAgICAgIHByaW50IGNvbm4ucmVhZCgpCiAgICAgICAgcmV0dXJuIDEKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLm5leHQoTm9uZSkKICAgICAgICByZXR1cm4gVHJ1ZQoKPHxmaW1fZW5kfD4="]
["3cca4d6e5c5bbcd4ad20b25b82d1cffa16322e33-3","3cca4d6e5c5bbcd4ad20b25b82d1cffa16322e33","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzeXMKCiNjb25zdGFudCBmb3IgdmFyaWZ5IGNvbm5lY3Rpb24KRlRSQUNLX0NPTk5FQ1RFRCA9IEZhbHNlCgpzeXMucGF0aCArPSBbIkQ6L3NlcnZlci9hcHBzLzNyZHBhcnR5L2Z0cmFjay1weXRob24iXQoKb3MuZW52aXJvblsnRlRSQUNLX1NFUlZFUiddID0gJ2h0dHBzOi8vY2FzLmZ0cmFja2FwcC5jb20nCgppbXBvcnQgZnRyYWNrCgpGVFJBQ0tfQ09OTkVDVEVEID0gVHJ1ZQoKCmNsYXNzIENvbm5lY3RvcihvYmplY3QpOgogICAgIiIiY2xhc3MgZm9yIENvbm5lY3RvcgogICAgQXJnCiAgICAgICAgdXNlcihPcHRpb25hbFtzdHJdKTogdXNlciBuYW1lLGFuZCB1c2VyIHN5c3RlbSB1c2VybmFtZSBpZiBOb25lCiAgICAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgdXNlcj1Ob25lKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHN1cGVyKENvbm5lY3Rvciwgc2VsZikuX19pbml0X18oKQoKICAgICAgICBzZWxmLnVzZXIgPSB1c2VyCiAgICAgICAgc2VsZi51c2VyRGV0YWlscyA9IE5vbmUKPHxmaW1fZW5kfD4="]
["553fb437d81fa00f5c56f4d25458fb97f0fc5365-2","553fb437d81fa00f5c56f4d25458fb97f0fc5365","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBmaXh0dXJlLm9ybSBpbXBvcnQgT1JNRml4dHVyZQpmcm9tIG1vZGVsLmNvbnRhY3QgaW1wb3J0IENvbnRhY3QKaW1wb3J0IHJlCmltcG9ydCBhbGx1cmUKCgpkZWYgdGVzdF9jaGVja19hbGxfY29udGFjdHNfZGF0YShhcHApOgogICAgaWYgYXBwLmNvbnRhY3QuY291bnQoKSA9PSAwOgogICAgICAgIGFwcC5jb250YWN0LmNyZWF0ZShDb250YWN0KGZpcnN0bmFtZT0iZmlyc3RuYW1lIiwgbGFzdG5hbWU9Imxhc3RuYW1lIiwgYWRkcmVzcz0iYWRkcmVzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvbWVfcGhvbmU9IjEyMyIsIHdvcmtfcGhvbmU9IjQ1NiIsIG1vYmlsZV9waG9uZT0iNzg5Iiwgc2Vjb25kYXJ5X3Bob25lPSIxMzUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1haWwxPSIxQGdtYWlsLmNvbSIsIGVtYWlsMj0iMkBnbWFpbC5jb20iLCBlbWFpbDM9IjNAZ21haWwuY29tIikpCiAgICB3aXRoIGFsbHVyZS5zdGVwKCdHaXZlbiBjb250YWN0IGxpc3QgZnJvbSBkYiBhbmQgZnJvbSBob21lcGFnZScpOgogICAgICAgIGNvbnRhY3RzX2Zyb21faG9tZXBhZ2UgPSBzb3J0ZWQoYXBwLmNvbnRhY3QuZ2V0X2NvbnRhY3RfbGlzdCgpLGtleT1Db250YWN0LmlkX29yX21heCkKICAgICAgICBkYiA9IE9STUZpeHR1cmUoaG9zdCA9ICIxMjcuMC4wLjEiLCBuYW1lID0gImFkZHJlc3Nib29rIiwgdXNlciA9ICJyb290IiwgcGFzc3dvcmQgPSAiIikKICAgICAgICBjb250YWN0c19mcm9tX2RiID0gc29ydGVkKGRiLmdldF9jb250YWN0X2xpc3QoKSwga2V5PUNvbnRhY3QuaWRfb3JfbWF4KQogICAgd2l0aCBhbGx1cmUuc3RlcCgnV2hlbiBJIGdldCBjb250YWN0IGVtYWlsIGFuZCBwaG9uZXMgZnJvbSBkYiBhbmQgaG9tZXBhZ2UnKToKICAgICAgICBmb3IgYyBpbiBjb250YWN0c19mcm9tX2RiOgogICAgICAgICAgICBjLmFsbF9waG9uZXNfZnJvbV9ob21lX3BhZ2UgPSBtZXJnZV9waG9uZXNfbGlrZV9vbl9ob21lX3BhZ2UoYykKICAgICAgICAgICAgYy5hbGxfZW1haWxzX2Zyb21faG9tZV9wYWdlID0gbWVyZ2VfZW1haWxzX2xpa2Vfb25faG9tZV9wYWdlKGMpCiAgICAgICAgbGlzdF9vZl9waG9uZXNfZnJvbV9kYj1bXQogICAgICAgIGxpc3Rfb2ZfZW1haWxzX2Zyb21fZGI9W10KICAgICAgICBsaXN0X29mX3Bob25lc19mcm9tX2hvbWVfcGFnZSA9IFtdCiAgICAgICAgbGlzdF9vZl9lbWFpbHNfZnJvbV9ob21lX3BhZ2UgPSBbXQogICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihjb250YWN0c19mcm9tX2RiKSk6CiAgICAgICAgICAgIGxpc3Rfb2ZfcGhvbmVzX2Zyb21fZGIuYXBwZW5kKGNvbnRhY3RzX2Zyb21fZGJbaV0uYWxsX3Bob25lc19mcm9tX2hvbWVfcGFnZSkKICAgICAgICAgICAgbGlzdF9vZl9lbWFpbHNfZnJvbV9kYi5hcHBlbmQoY29udGFjdHNfZnJvbV9kYltpXS5hbGxfZW1haWxzX2Zyb21faG9tZV9wYWdlKQogICAgICAgICAgICBsaXN0X29mX3Bob25lc19mcm9tX2hvbWVfcGFnZS5hcHBlbmQoY29udGFjdHNfZnJvbV9ob21lcGFnZVtpXS5hbGxfcGhvbmVzX2Zyb21faG9tZV9wYWdlKQogICAgICAgICAgICBsaXN0X29mX2VtYWlsc19mcm9tX2hvbWVfcGFnZS5hcHBlbmQoY29udGFjdHNfZnJvbV9ob21lcGFnZVtpXS5hbGxfZW1haWxzX2Zyb21faG9tZV9wYWdlKQogICAgd2l0aCBhbGx1cmUuc3RlcCgnVGhlbiBjb250YWN0IGRhdGEgZnJvbSBkYiBzaG91bGQgYmUgZXF1YWwgdG8gY29udGFjdCBkYXRhIGZyb20gaG9tZSBwYWdlJyk6CiAgICAgICAgYXNzZXJ0IGNvbnRhY3RzX2Zyb21fZGIgPT0gY29udGFjdHNfZnJvbV9ob21lcGFnZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgYXNzZXJ0IGxpc3Rfb2ZfcGhvbmVzX2Zyb21fZGIgPT0gbGlzdF9vZl9waG9uZXNfZnJvbV9ob21lX3BhZ2UKICAgICAgICBhc3NlcnQgbGlzdF9vZl9lbWFpbHNfZnJvbV9kYiA9PSBsaXN0X29mX2VtYWlsc19mcm9tX2hvbWVfcGFnZQoKPHxmaW1fZW5kfD4="]
["0501de348c4211cc53d119007aee9e0b8bf9e028-4","0501de348c4211cc53d119007aee9e0b8bf9e028","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgaW8KaW1wb3J0IG9zCmZyb20gcWlmcWlmIGltcG9ydCBjb25maWcsIHFpZmlsZQoKClRBR1MgPSB7IkJhcnMiOiBbIkFydCBCcnV0IiwgIlN1bGx5Il0sICJDbG90aGVzIjogWyJBcnQgQnJ1dCBTaG9wIl19ClRSQU5TQUNUSU9OID0gewogICAgInBheWVlIjogIkNBUlRFIDE2LzAyLzIwMTQgU3VsbHkgYmFyIiwKICAgICJkYXRlIjogIjE2LzAyLzIwMTQiLAogICAgIm1lbW8iOiAiY2hvdWZmZSIsCiAgICAiXiI6ICJeIiwKfQpRSUZfRklMRSA9IG9zLnBhdGguam9pbigKICAgIG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSksICJyc3JjIiwgInRyYW5zYWMucWlmIgopCkNGR19GSUxFID0gb3MucGF0aC5qb2luKAogICAgb3MucGF0aC5yZWFscGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKSwgInJzcmMiLCAiY29uZmlnLmpzb24iCikKCgpkZWYgZ2VuZXJhdGVfbGluZXMoa2luZHMpOgo8fGZpbV9ob2xlfD4KICAgIHJldHVybiByZXMKCgpkZWYgdHJhbnNhY3Rpb25zKCk6CiAgICB3aXRoIGlvLm9wZW4oUUlGX0ZJTEUsICJyIiwgZW5jb2Rpbmc9InV0Zi04IikgYXMgZmluOgogICAgICAgIGxpbmVzID0gZmluLnJlYWRsaW5lcygpCiAgICAgICAgcmV0dXJuIHFpZmlsZS5wYXJzZV9saW5lcyhsaW5lcyksIGxpbmVzCjx8ZmltX3N1ZmZpeHw+CiAgICAiIiJSZXR1cm4gbGluZXMgY29ycmVzcG9uZGluZyB0byBnaXZlbiBmaWVsZHMgaWRzIHNlcXVlbmNlLiIiIgogICAgcmVzID0gW10KICAgIGZvciBrIGluIGtpbmRzOgogICAgICAgIHJlcy5hcHBlbmQoayArIFRSQU5TQUNUSU9OW2NvbmZpZy5GSUVMRFMuZ2V0KGssIGspXSkKPHxmaW1fZW5kfD4="]
["b06805534c88f67fc08633568cfd71ad2e63a889-3","b06805534c88f67fc08633568cfd71ad2e63a889","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KZnJvbSAubW9kZWxzIGltcG9ydCBUYXNrCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpjbGFzcyBUYXNrQWRtaW4oYWRtaW4uTW9kZWxBZG1pbik6CiAgICBmaWVsZHMgPSAoJ3RpdGxlJywgJ2Rlc2NyaXB0aW9uJykKICAgIGxpc3RfZGlzcGxheSA9ICgndGl0bGUnLCAnZGVzY3JpcHRpb24nLCAnY3JlYXRlZF9hdCcsICd1cGRhdGVkX2F0JykKPHxmaW1fZW5kfD4="]
["abe2e20ccf986908f4c64f7c51b186b8c705f8e9-2","abe2e20ccf986908f4c64f7c51b186b8c705f8e9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAoKZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcmV2ZXJzZQoKcHl0ZXN0bWFyayA9IFsKICAgIHB5dGVzdC5tYXJrLmRqYW5nb19kYiwKICAgIHB5dGVzdC5tYXJrLnVzZWZpeHR1cmVzKCdzaXRlJyksCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KXQoKCkBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgndXNlcl9faXNfc3VwZXJ1c2VyJywgW1RydWVdKQo8fGZpbV9lbmR8Pg=="]
["c6fefe3f32937161efa524a79b356e2ad3e5dc52-1","c6fefe3f32937161efa524a79b356e2ad3e5dc52","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIgYXMgbXBsdAppbXBvcnQgY3YyCgppbWcxID0gY3YyLmltcmVhZCgnaW1hZ2VzL1doaXRlX3RpZ2Vycy5wbmcnLCBjdjIuSU1SRUFEX0NPTE9SKQo8fGZpbV9lbmR8Pg=="]
["556dd48c6c38b181ff25728b09327c9a53ba75fd-5","556dd48c6c38b181ff25728b09327c9a53ba75fd","PHxmaW1fcHJlZml4fD4KCiMgR2V0SWRyYWNMY0xvZ3NSRURGSVNILiBQeXRob24gc2NyaXB0IHVzaW5nIFJlZGZpc2ggQVBJIHRvIGdldCBpRFJBQyBMQyBsb2dzLgojCiMgX2F1dGhvcl8gPSBUZXhhcyBSb2VtZXIgPFRleGFzX1JvZW1lckBEZWxsLmNvbT4KIyBfdmVyc2lvbl8gPSAxLjAKIwojIENvcHlyaWdodCAoYykgMjAxNywgRGVsbCwgSW5jLgojCiMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAojIHZlcnNpb24gMiAoR1BMdjIpLiBUaGVyZSBpcyBOTyBXQVJSQU5UWSBmb3IgdGhpcyBzb2Z0d2FyZSwgZXhwcmVzcyBvcgojIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIEdQTHYyCiMgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHNlZQojIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCiMKCmltcG9ydCByZXF1ZXN0cwppbXBvcnQganNvbgppbXBvcnQgc3lzCmltcG9ydCByZQppbXBvcnQgdGltZQppbXBvcnQgb3MKaW1wb3J0IHdhcm5pbmdzCmZyb20gZWxhc3RpY3NlYXJjaCBpbXBvcnQgRWxhc3RpY3NlYXJjaApmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQoKd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIpCgp0cnk6CiAgICBpZHJhY19pcCA9ICcxMDAuOTguMjQuMTA1JwogICAgaWRyYWNfdXNlcm5hbWUgPSAncm9vdCcKICAgIGlkcmFjX3Bhc3N3b3JkID0gJ2NhbHZpbicKICAgIGVzID0gRWxhc3RpY3NlYXJjaChbJzEwMC45OC4yNi4xODEnXSwKICAgICAgICAgICAgICAgICAgICAgICBodHRwX2F1dGg9KCdlbGFzdGljJywgJ2NoYW5nZW1lJyksCiAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1lPSJodHRwIiwKICAgICAgICAgICAgICAgICAgICAgICBwb3J0PTkyMDAsCiAgICAgICAgICAgICAgICAgICAgICAgKQoKCmV4Y2VwdDoKICAgIHByaW50KCItIEZBSUw6IFlvdSBtdXN0IHBhc3MgaW4gc2NyaXB0IG5hbWUgYWxvbmcgd2l0aCBpRFJBQyBJUCAvIGlEUkFDIHVzZXJuYW1lIC8gaURSQUMgcGFzc3dvcmQiKQogICAgc3lzLmV4aXQoKQoKdHJ5OgogICAgb3MucmVtb3ZlKCJsY19sb2dzLnR4dCIpCiAgICAjIG9zLnJlbW92ZSgibGNfbG9ncy50eHQiKQogICAgcGFzcwpleGNlcHQ6CiAgICBwYXNzCgojIEZ1bmN0aW9uIHRvIGdldCBsaWZlY3ljbGUgbG9ncyAoTEMpCgoKZGVmIGdldEpTT05SZXNwb25zZShuZXh0X3VybCk6CiAgICByZXNwb25zZSA9IHJlcXVlc3RzLmdldCgnaHR0cHM6Ly8lcyVzJyUoaWRyYWNfaXAsbmV4dF91cmwpLCB2ZXJpZnk9RmFsc2UsIGF1dGg9KGlkcmFjX3VzZXJuYW1lLCBpZHJhY19wYXNzd29yZCkpCiAgICBkYXRhID0gcmVzcG9uc2UuanNvbigpCgogICAgcmV0dXJuIGRhdGEKCgpkZWYgZ2V0X0xDX2xvZ3MoKToKCiAgICBmID0gb3BlbigibGNfbG9ncy50eHQiLCAidysiKQogICAgZCA9IGRhdGV0aW1lLm5vdygpCiAgICBjdXJyZW50X2RhdGVfdGltZSA9ICItIERhdGEgY29sbGVjdGlvbiB0aW1lc3RhbXA6ICVzLSVzLSVzICAlczolczolc1xuIiAlICgKICAgICAgICBkLm1vbnRoLCBkLmRheSwgZC55ZWFyLCBkLmhvdXIsIGQubWludXRlLCBkLnNlY29uZCkKICAgIGYud3JpdGVsaW5lcyhjdXJyZW50X2RhdGVfdGltZSkKICAgICMgcmVzcG9uc2UgPSByZXF1ZXN0cy5nZXQoJ2h0dHBzOi8vJXMvcmVkZmlzaC92MS9NYW5hZ2Vycy9pRFJBQy5FbWJlZGRlZC4xL0xvZ3MvTGNsb2cnICUKICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgaWRyYWNfaXAsIHZlcmlmeT1GYWxzZSwgYXV0aD0oaWRyYWNfdXNlcm5hbWUsIGlkcmFjX3Bhc3N3b3JkKSkKICAgIAogICAgZGF0YSA9IGdldEpTT05SZXNwb25zZSgnL3JlZGZpc2gvdjEvTWFuYWdlcnMvaURSQUMuRW1iZWRkZWQuMS9Mb2dzL0xjbG9nJykKICAgIAogICAgdHJ5OgoKICAgICAgICB3aGlsZShkYXRhW3UnTWVtYmVyc0BvZGF0YS5uZXh0TGluayddICE9IE5vbmUpOgogICAgICAgIAogICAgICAgICAgICB0aW1lLnNsZWVwKDIpCiAgICAgICAgICAgIHByaW50KGRhdGFbdSdNZW1iZXJzQG9kYXRhLm5leHRMaW5rJ10pCgogICAgICAgICAgICBmb3IgaSBpbiBkYXRhW3UnTWVtYmVycyddOgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBwcmludCgiJXMgOiAlcyIlKCdJZCcsaVt1J0lkJ10pKQoKICAgICAgICAgICAgICAgIGRhdGFfZGljdCA9IHsKCiAgICAgICAgICAgICAgICAgICAgJ0NyZWF0ZWQnIDogaVt1J0NyZWF0ZWQnXSwKICAgICAgICAgICAgICAgICAgICAnRGVzY3JpcHRpb24nOiBpW3UnRGVzY3JpcHRpb24nXSwKICAgICAgICAgICAgICAgICAgICAnRW50cnlUeXBlJzogaVt1J0VudHJ5VHlwZSddLAogICAgICAgICAgICAgICAgICAgICdJZCc6IGlbdSdJZCddLAogICAgICAgICAgICAgICAgICAgICdNZXNzYWdlJzogaVt1J01lc3NhZ2UnXSwKICAgICAgICAgICAgICAgICAgICAnTWVzc2FnZUlkJzogaVt1J01lc3NhZ2VJZCddLAogICAgICAgICAgICAgICAgICAgICdOYW1lJzogaVt1J05hbWUnXSwKICAgICAgICAgICAgICAgICAgICAnT2VtUmVjb3JkRm9ybWF0JzogaVt1J09lbVJlY29yZEZvcm1hdCddLAogICAgICAgICAgICAgICAgICAgICdTZXZlcml0eSc6IGlbdSdTZXZlcml0eSddLAoKCgogICAgICAgICAgICAgICAgfQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgICAgICAgICAgZXMuY3JlYXRlKGluZGV4PSdsY19sb2dfaW5kZXgnLCBkb2NfdHlwZT0nbGNfZG9jdW1lbnQnLCBpZD1zdHIoCiAgICAgICAgICAgICAgICAgICAgaVt1J0lkJ10pLCBib2R5PWRhdGFfZGljdCkKCjx8ZmltX2VuZHw+"]
["591ac3c1177b5e874f2820a1388f24c08538d379-3","591ac3c1177b5e874f2820a1388f24c08538d379","PHxmaW1fcHJlZml4fD4KZnJvbSBzdGF0aXN0aWNzIGltcG9ydCBtZWFuCmltcG9ydCBqc29uCmltcG9ydCBkYXNoX2NvcmVfY29tcG9uZW50cyBhcyBkY2MKaW1wb3J0IGRhc2hfaHRtbF9jb21wb25lbnRzIGFzIGh0bWwKaW1wb3J0IGRhc2hfYm9vdHN0cmFwX2NvbXBvbmVudHMgYXMgZGJjCmZyb20gZGFzaC5kZXBlbmRlbmNpZXMgaW1wb3J0IElucHV0LCBPdXRwdXQsIFN0YXRlCmZyb20gZGFzaC5leGNlcHRpb25zIGltcG9ydCBQcmV2ZW50VXBkYXRlCiMgTG9jYWwgaW1wb3J0cwpmcm9tIGFwcCBpbXBvcnQgYXBwLCBkYiwgbG9nZ2VyCmZyb20gZ2V0X2Zpbl9yZXBvcnQgaW1wb3J0IGdldF9udW1iZXJfZnJvbV9zdHJpbmcKCmRlZiBnZXRfZGNmX2N1cnJlbnRfeWVhcl9pbnB1dF9vdmVycmlkZXMoKToKICAgIHJldHVybiBbZGJjLkZvcm0oW2RiYy5Gb3JtR3JvdXAoCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgZGJjLkxhYmVsKCJSZXZlbnVlIChNJCkiLCBodG1sX2Zvcj0ieWVhcjAtcmV2ZW51ZSIpLAogICAgICAgICAgICAgICAgICAgIGRiYy5JbnB1dCgKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgaWQ9InllYXIwLXJldmVudWUiLAogICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iRW50ZXIgbnVtYmVyIiwgZGVib3VuY2U9VHJ1ZQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdCiAgICAgICAgKSwKICAgICAgICBkYmMuRm9ybUdyb3VwKAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgIGRiYy5MYWJlbCgiUiZEIChNJCkiLCBodG1sX2Zvcj0ieWVhcjAtcmFuZGQiKSwKICAgICAgICAgICAgICAgICAgICBkYmMuSW5wdXQoCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im51bWJlciIsCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJ5ZWFyMC1yYW5kZCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJFbnRlciBudW1iZXIiLCBkZWJvdW5jZT1UcnVlCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIF0KICAgICAgICApLAogICAgICAgIGRiYy5Gb3JtR3JvdXAoCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgZGJjLkxhYmVsKCJDYXBFeCAoTSQpIiwgaHRtbF9mb3I9InllYXIwLWNhcGV4IiksCiAgICAgICAgICAgICAgICAgICAgZGJjLklucHV0KAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJudW1iZXIiLAogICAgICAgICAgICAgICAgICAgICAgICBpZD0ieWVhcjAtY2FwZXgiLAogICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iRW50ZXIgbnVtYmVyIiwgZGVib3VuY2U9VHJ1ZQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdCiAgICAgICAgKSwKICAgICAgICBkYmMuRm9ybUdyb3VwKAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgIGRiYy5MYWJlbCgiRUJJVCBleGNsLiBSZWludmVzdG1lbnQgKE0kKSIsIGh0bWxfZm9yPSJ5ZWFyMC1lYml0IiksCiAgICAgICAgICAgICAgICAgICAgZGJjLklucHV0KAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJudW1iZXIiLAogICAgICAgICAgICAgICAgICAgICAgICBpZD0ieWVhcjAtZWJpdCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJFbnRlciBudW1iZXIiLCBkZWJvdW5jZT1UcnVlCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIF0KICAgICAgICApLAogICAgICAgIGRiYy5Gb3JtR3JvdXAoCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgZGJjLkxhYmVsKCJQYXN0IFJldmVudWUgQ0FHUiAoJSkiLCBodG1sX2Zvcj0ieWVhcjAtcmdyIiksCiAgICAgICAgICAgICAgICAgICAgZGJjLklucHV0KAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJudW1iZXIiLAogICAgICAgICAgICAgICAgICAgICAgICBpZD0ieWVhcjAtcmdyIiwKICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgXQogICAgICAgICksCiAgICAgICAgZGJjLkZvcm1Hcm91cCgKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICBkYmMuTGFiZWwoIkNhc2ggYW5kIEVxdWl2YWxlbnRzIChNJCkiLCBodG1sX2Zvcj0iY2FzaCIpLAogICAgICAgICAgICAgICAgICAgIGRiYy5JbnB1dCgKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIiwgdmFsdWU9MCwKICAgICAgICAgICAgICAgICAgICAgICAgaWQ9ImNhc2giLAogICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iRW50ZXIgbnVtYmVyIiwgZGVib3VuY2U9VHJ1ZQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdCiAgICAgICAgKSwKICAgICAgICBkYmMuRm9ybUdyb3VwKAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgIGRiYy5MYWJlbCgiQ29tbW9uIFNoYXJlcyBPdXRzdGFuZGluZyAoTWlsbGlvbnMpIiwgaHRtbF9mb3I9InNoYXJlcy1vdXRzdGFuZGluZyIpLAogICAgICAgICAgICAgICAgICAgIGRiYy5JbnB1dCgKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIiwgdmFsdWU9MCwKICAgICAgICAgICAgICAgICAgICAgICAgaWQ9InNoYXJlcy1vdXRzdGFuZGluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJFbnRlciBudW1iZXIiLCBkZWJvdW5jZT1UcnVlCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIF0KICAgICAgICApLAogICAgICAgIGRiYy5Gb3JtR3JvdXAoCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgZGJjLkxhYmVsKCJNaW5vcml0eSBJbnRlcmVzdHMgKE0kKSIsIGh0bWxfZm9yPSJtaW5vcml0eS1pbnRlcmVzdHMiKSwKICAgICAgICAgICAgICAgICAgICBkYmMuSW5wdXQoCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im51bWJlciIsIHZhbHVlPTAsCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJtaW5vcml0eS1pbnRlcmVzdHMiLAogICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iRW50ZXIgbnVtYmVyIiwgZGVib3VuY2U9VHJ1ZQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdCiAgICAgICAgKSwKICAgICAgICBkYmMuRm9ybUdyb3VwKAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgIGRiYy5MYWJlbCgiTm9ub3BlcmF0aW5nIEFzc2V0cyAoTSQpIiwgaHRtbF9mb3I9Im5vbm9wZXJhdGluZy1hc3NldHMiKSwKICAgICAgICAgICAgICAgICAgICBkYmMuSW5wdXQoCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im51bWJlciIsIHZhbHVlPTAsCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJub25vcGVyYXRpbmctYXNzZXRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IkVudGVyIG51bWJlciIsIGRlYm91bmNlPVRydWUKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgXQogICAgICAgICksCiAgICAgICAgZGJjLkZvcm1Hcm91cCgKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICBkYmMuTGFiZWwoIkVtcGxveWVlIE9wdGlvbnMgVmFsdWUgKE0kKSIsIGh0bWxfZm9yPSJvcHRpb25zLXZhbHVlIiksCiAgICAgICAgICAgICAgICAgICAgZGJjLklucHV0KAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJudW1iZXIiLCB2YWx1ZT0wLAogICAgICAgICAgICAgICAgICAgICAgICBpZD0ib3B0aW9ucy12YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJFbnRlciBudW1iZXIiLCBkZWJvdW5jZT1UcnVlCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIF0KICAgICAgICApLAogICAgICAgIGRiYy5Gb3JtR3JvdXAoCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgZGJjLkxhYmVsKCJCb29rIFZhbHVlIG9mIExvbmd0ZXJtIERlYnQgKE0kKSIsIGh0bWxfZm9yPSJkZWJ0LWJvb2stdmFsdWUiKSwKICAgICAgICAgICAgICAgICAgICBkYmMuSW5wdXQoCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im51bWJlciIsIHZhbHVlPTAsCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJkZWJ0LWJvb2stdmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iRW50ZXIgbnVtYmVyIiwgZGVib3VuY2U9VHJ1ZQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdCiAgICAgICAgKSwKICAgICAgICBkYmMuRm9ybUdyb3VwKAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgIGRiYy5MYWJlbCgiSW50ZXJlc3QgRXhwZW5zZSAoTSQpIiwgaHRtbF9mb3I9ImludGVyZXN0LWV4cGVuc2UiKSwKICAgICAgICAgICAgICAgICAgICBkYmMuSW5wdXQoCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im51bWJlciIsIHZhbHVlPTAsCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJpbnRlcmVzdC1leHBlbnNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IkVudGVyIG51bWJlciIsIGRlYm91bmNlPVRydWUKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgXQogICAgICAgICksCiAgICAgICAgZGJjLkZvcm1Hcm91cCgKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICBkYmMuTGFiZWwoIkNvbnZlcnRpYmxlIERlYnQgQm9vayBWYWx1ZSAoTSQpIiwgaHRtbF9mb3I9ImNvbnZlcnRpYmxlLWRlYnQtYm9vay12YWx1ZSIpLAogICAgICAgICAgICAgICAgICAgIGRiYy5JbnB1dCgKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIiwgdmFsdWU9MCwKICAgICAgICAgICAgICAgICAgICAgICAgaWQ9ImNvbnZlcnRpYmxlLWRlYnQtYm9vay12YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJFbnRlciBudW1iZXIiLCBkZWJvdW5jZT1UcnVlCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIF0KICAgICAgICApLAogICAgICAgIGRiYy5Gb3JtR3JvdXAoCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgZGJjLkxhYmVsKCJDb252ZXJ0aWJsZSBNYXJrZXQgVmFsdWUgKE0kKSIsIGh0bWxfZm9yPSJjb252ZXJ0aWJsZS1tYXJrZXQtdmFsdWUiKSwKICAgICAgICAgICAgICAgICAgICBkYmMuSW5wdXQoCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im51bWJlciIsIHZhbHVlPTAsCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJjb252ZXJ0aWJsZS1tYXJrZXQtdmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iRW50ZXIgbnVtYmVyIiwgZGVib3VuY2U9VHJ1ZQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdCiAgICAgICAgKSwKICAgICAgICBkYmMuRm9ybUdyb3VwKAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgIGRiYy5MYWJlbCgiUHJlZmVycmVkIEVxdWl0eSBOdW1iZXIgb2YgU2hhcmVzIChNaWxsaW9ucykiLCBodG1sX2Zvcj0icHJlZmVycmVkLW51bS1zaGFyZXMiKSwKICAgICAgICAgICAgICAgICAgICBkYmMuSW5wdXQoCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im51bWJlciIsIHZhbHVlPTAsCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJwcmVmZXJyZWQtbnVtLXNoYXJlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJFbnRlciBudW1iZXIiLCBkZWJvdW5jZT1UcnVlCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIF0KICAgICAgICApLAogICAgICAgIGRiYy5Gb3JtR3JvdXAoCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgZGJjLkxhYmVsKCJQcmVmZXJyZWQgUHJpY2UgcGVyIHNoYXJlICgkKSIsIGh0bWxfZm9yPSJwcmVmZXJyZWQtcHJpY2UtcGVyc2hhcmUiKSwKICAgICAgICAgICAgICAgICAgICBkYmMuSW5wdXQoCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im51bWJlciIsIHZhbHVlPTcwLAogICAgICAgICAgICAgICAgICAgICAgICBpZD0icHJlZmVycmVkLXByaWNlLXBlcnNoYXJlIiwKICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IkVudGVyIG51bWJlciIsIGRlYm91bmNlPVRydWUKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgXQogICAgICAgICksCiAgICAgICAgZGJjLkZvcm1Hcm91cCgKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICBkYmMuTGFiZWwoIlByZWZlcnJlZCBEaXZpZGVuZCBwZXIgc2hhcmUgKCQpIiwgaHRtbF9mb3I9InByZWZlcnJlZC1kaXZpZGVuZC1wZXJzaGFyZSIpLAogICAgICAgICAgICAgICAgICAgIGRiYy5JbnB1dCgKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIiwgdmFsdWU9NSwgbWluPTAuMDEsIHN0ZXA9MC4wMSwKICAgICAgICAgICAgICAgICAgICAgICAgaWQ9InByZWZlcnJlZC1kaXZpZGVuZC1wZXJzaGFyZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJFbnRlciBudW1iZXIiLCBkZWJvdW5jZT1UcnVlCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIF0KICAgICAgICApLAogICAgICAgIGRiYy5Gb3JtR3JvdXAoCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgZGJjLkxhYmVsKCJEZWJ0IFZhbHVlIG9mIE9wZXJhdGluZyBMZWFzZXMgKE0kKSIsIGh0bWxfZm9yPSJkZWJ0LXZhbHVlLW9wLWxlYXNlcyIpLAogICAgICAgICAgICAgICAgICAgIGRiYy5JbnB1dCgKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIiwgdmFsdWU9MCwKICAgICAgICAgICAgICAgICAgICAgICAgaWQ9ImRlYnQtdmFsdWUtb3AtbGVhc2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IkVudGVyIG51bWJlciIsIGRlYm91bmNlPVRydWUKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgXQogICAgICAgICksCiAgICAgICAgXSwgaW5saW5lPVRydWUpLAogICAgICAgIGRiYy5Gb3JtKFtkYmMuRm9ybUdyb3VwKAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgIGRiYy5MYWJlbCgiQXZlcmFnZSBNYXR1cml0eSBEdXJhdGlvbiAoeWVhcnMpIiwgaHRtbF9mb3I9ImF2ZXJhZ2UtbWF0dXJpdHkiKSwKICAgICAgICAgICAgICAgICAgICBkY2MuU2xpZGVyKGlkPSJhdmVyYWdlLW1hdHVyaXR5IiwgbWluPTIsIG1heD0xMCwgc3RlcD0wLjI1LCB2YWx1ZT0zLAogICAgICAgICAgICAgICAgICAgIG1hcmtzPXt2OiBzdHIodikgZm9yIHYgaW4gcmFuZ2UoMiwgMTEpfSwKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICBdCiAgICAgICAgKSwKICAgICAgICBkYmMuRm9ybUdyb3VwKAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgIGRiYy5MYWJlbCgiUHJldGF4IENvc3Qgb2YgRGVidCAoJSkiLCBodG1sX2Zvcj0icHJldGF4LWNvc3QtZGVidCIpLAogICAgICAgICAgICAgICAgICAgIGRjYy5TbGlkZXIoaWQ9InByZXRheC1jb3N0LWRlYnQiLCBtaW49MiwgbWF4PTEwLCBzdGVwPTAuMjUsIHZhbHVlPTQsCiAgICAgICAgICAgICAgICAgICAgbWFya3M9e3Y6IHN0cih2KSBmb3IgdiBpbiByYW5nZSgyLCAxMSl9LAogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIF0KICAgICAgICApLAogICAgICAgIGRiYy5Gb3JtR3JvdXAoCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgZGJjLkxhYmVsKCJDb252ZXJ0aWJsZSBEZWJ0IFBvcnRpb24gb2YgTWFya2V0IFZhbHVlICglKSIsIGh0bWxfZm9yPSJjb252ZXJ0aWJsZS1kZWJ0LXBvcnRpb24iKSwKICAgICAgICAgICAgICAgICAgICBkY2MuU2xpZGVyKGlkPSJjb252ZXJ0aWJsZS1kZWJ0LXBvcnRpb24iLCBtaW49MCwgbWF4PTEwMCwgc3RlcD01LCB2YWx1ZT0wLAogICAgICAgICAgICAgICAgICAgIG1hcmtzPXt2OiBzdHIodikgZm9yIHYgaW4gcmFuZ2UoMCwgMTAxLCA1KX0sCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgXQogICAgICAgICksCiAgICAgICAgXSldCgpkZWYgZ2V0X290aGVyX2lucHV0X292ZXJyaWRlcygpOgogICAgcmV0dXJuIGRiYy5Gb3JtKFtkYmMuRm9ybUdyb3VwKAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgIGRiYy5MYWJlbCgiQ29udmVyZ2VuY2UgWWVhciIsIGh0bWxfZm9yPSJjb252ZXJnZW5jZS15ZWFyIiksCiAgICAgICAgICAgICAgICAgICAgZGNjLlNsaWRlcihpZD0iY29udmVyZ2VuY2UteWVhciIsIG1pbj0yLCBtYXg9OCwgc3RlcD0xLCB2YWx1ZT0zLAogICAgICAgICAgICAgICAgICAgIG1hcmtzPXt2OiBzdHIodikgZm9yIHYgaW4gcmFuZ2UoMiwgOSl9LAogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIF0KICAgICAgICApLAogICAgICAgIGRiYy5Gb3JtR3JvdXAoCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgZGJjLkxhYmVsKCJNYXJnaW5hbCBUYXggUmF0ZSglKSIsIGh0bWxfZm9yPSJtYXJnaW5hbC10YXgiKSwKICAgICAgICAgICAgICAgICAgICBkY2MuU2xpZGVyKGlkPSJtYXJnaW5hbC10YXgiLCBtaW49MTUsIG1heD01MCwgc3RlcD0xLCB2YWx1ZT0yOSwKICAgICAgICAgICAgICAgICAgICBtYXJrcz17djogc3RyKHYpIGZvciB2IGluIHJhbmdlKDE1LCA1MCwgNSl9LAogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIF0KICAgICAgICApLAogICAgICAgIGRiYy5Gb3JtR3JvdXAoCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgZGJjLkxhYmVsKCJQcm9iYWJpbGl0eSBvZiBGYWlsdXJlKCUpIiwgaHRtbF9mb3I9InByb2ItZmFpbHVyZSIpLAogICAgICAgICAgICAgICAgICAgIGRjYy5TbGlkZXIoaWQ9InByb2ItZmFpbHVyZSIsIG1pbj0wLCBtYXg9OTksIHN0ZXA9NSwgdmFsdWU9MCwKICAgICAgICAgICAgICAgICAgICBtYXJrcz17djogc3RyKHYpIGZvciB2IGluIHJhbmdlKDAsIDEwMSwgNSl9LAogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIF0KICAgICAgICApLAogICAgICAgIGRiYy5Gb3JtR3JvdXAoCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgZGJjLkxhYmVsKCJPdmVycmlkZSBkZWZhdWx0IGFzc3VtcHRpb25zOiIpLAogICAgICAgICAgICAgICAgICAgIGRiYy5DaGVja2xpc3QoCiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz1bCiAgICAgICAgICAgICAgICAgICAgICAgIHsibGFiZWwiOiAiVGVybWluYWwgR3Jvd3RoIFJhdGUgPSBSaXNrZnJlZSBSYXRlPyIsICJ2YWx1ZSI6IDF9LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9W10sCiAgICAgICAgICAgICAgICAgICAgaWQ9Im92ZXJyaWRlLWRlZmF1bHQtYXNzdW1wdGlvbnMiLAogICAgICAgICAgICAgICAgICAgIHN3aXRjaD1UcnVlLAogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdCiAgICAgICAgKSwKICAgIF0pCgpAYXBwLmNhbGxiYWNrKFtPdXRwdXQoJ3llYXIwLXJldmVudWUnLCAndmFsdWUnKSwKT3V0cHV0KCd5ZWFyMC1yYW5kZCcsICd2YWx1ZScpLApPdXRwdXQoJ3llYXIwLWNhcGV4JywgJ3ZhbHVlJyksCk91dHB1dCgneWVhcjAtZWJpdCcsICd2YWx1ZScpLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Ck91dHB1dCgneWVhcjAtcmdyJywgJ3ZhbHVlJyksCk91dHB1dCgncmdyLW5leHQnLCAndmFsdWUnKSwKT3V0cHV0KCdvcG0tbmV4dCcsICd2YWx1ZScpLApPdXRwdXQoJ2NhZ3ItMi01JywgJ3ZhbHVlJyksCjx8ZmltX2VuZHw+"]
["555d37a619a77563a91f55d6b0f11c5b7b3dafd4-2","555d37a619a77563a91f55d6b0f11c5b7b3dafd4","PHxmaW1fcHJlZml4fD4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENsYXNzZXMgRnByQm9hcmRpbmdQYXNzLAojIE5hbWU6IEFydGh1ciBUcnVqaWxsbyBWaXJ6aW4KIyBEYXRlOiAyNi8xMS8xNwojIFRpbWU6IDIxOjM5CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmZyb20gd2FsbGV0Lm1vZGVscyBpbXBvcnQgUGFzcywgQmFyY29kZSwgQm9hcmRpbmdQYXNzLCBCYXJjb2RlRm9ybWF0LCBBbGlnbm1lbnQKZnJvbSBjb25maWcgaW1wb3J0IENvbmZpZwppbXBvcnQgcmFuZG9tCmltcG9ydCBzdHJpbmcKaW1wb3J0IGRhdGV0aW1lCmltcG9ydCBkYXRldXRpbC5wYXJzZXIKaW1wb3J0IGJvdG8zCmltcG9ydCBvcwoKCmNsYXNzIEZwckJvYXJkaW5nUGFzcyhCb2FyZGluZ1Bhc3MpOgoKICAgICMgQ29uc3RydWN0b3IKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqc29uX2NvbnRlbnQpOgogICAgICAgICIiIgoKICAgICAgICA6cGFyYW0ganNvbl9jb250ZW50OiBSZXF1ZXN0IGNvbnRlbnQgYXMgUHl0aG9uIG9iamVjdAogICAgICAgICIiIgogICAgICAgIEJvYXJkaW5nUGFzcy5fX2luaXRfXyhzZWxmKQoKICAgICAgICBzZWxmLmNvbmZpZyA9IENvbmZpZygpCgogICAgICAgICMgRmllbGRzCiAgICAgICAgc2VsZi5yZWxldmFudF9kYXRlID0gTm9uZQogICAgICAgIHNlbGYubG9jYXRpb25zID0gW10KICAgICAgICBzZWxmLmZ1bGxfbmFtZSA9IE5vbmUKICAgICAgICBzZWxmLmZsaWdodF9udW1iZXIgPSBOb25lCiAgICAgICAgc2VsZi5kZXBhcnRpbmdfdGltZSA9IE5vbmUKICAgICAgICBzZWxmLmJvYXJkaW5nX3RpbWUgPSBOb25lCiAgICAgICAgc2VsZi5kZXBhcnR1cmVfcGxhY2UgPSBOb25lCiAgICAgICAgc2VsZi5kZXBhcnR1cmVfY29kZSA9IE5vbmUKICAgICAgICBzZWxmLmFycml2YWxfcGxhY2UgPSBOb25lCiAgICAgICAgc2VsZi5hcnJpdmFsX2NvZGUgPSBOb25lCiAgICAgICAgc2VsZi5zZWF0c19xdHkgPSBOb25lCiAgICAgICAgc2VsZi5haXJjcmFmdF9wcmVmaXggPSBOb25lCiAgICAgICAgc2VsZi5haXJjcmFmdF9tb2RlbCA9IE5vbmUKICAgICAgICBzZWxmLm9wZXJhdG9yX25hbWUgPSBOb25lCiAgICAgICAgc2VsZi5wYXNzZW5nZXJzID0gW10KICAgICAgICBzZWxmLmRlcGFydHVyZV9kZXRhaWxzID0gTm9uZQogICAgICAgIHNlbGYuYmFyY29kZSA9IE5vbmUKCiAgICAgICAgIyBJbml0aWFsaXplcyBwcm9wZXJ0aWVzCiAgICAgICAgc2VsZi5fX2luaXRfYm9hcmRpbmdfcGFzcyhqc29uX2NvbnRlbnQpCgogICAgZGVmIF9faW5pdF9ib2FyZGluZ19wYXNzKHNlbGYsIGpzb25fY29udGVudCk6CiAgICAgICAgIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBGaWxscyBvYmplY3QgcHJvcGVydGllcyB1c2luZyByZWNlaXZlZCByZXF1ZXN0CiAgICAgICAgOnBhcmFtIGpzb25fY29udGVudDogUmVxdWVzdCBjb250ZW50IGFzIFB5dGhvbiBvYmplY3QKICAgICAgICAiIiIKICAgICAgICBzZWxmLmZsaWdodF9udW1iZXIgPSBqc29uX2NvbnRlbnQuZ2V0KCdmbGlnaHROdW1iZXInKQo8fGZpbV9lbmR8Pg=="]
["3c3ff2a98b43a57184dae15bc612cd6ddb9c88bb-2","3c3ff2a98b43a57184dae15bc612cd6ddb9c88bb","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCgpmcm9tIGJldmFsLmNyaXRlcmlhIGltcG9ydCBDdHgsIE5vdEluLCB0b19jcml0ZXJpYSwgdW5pdmVyc2FsCmZyb20gdGVzdF9oZWxwZXIgaW1wb3J0IGFjdXJhX3NtYWxsCgoKY2xhc3MgVGVzdE5vdEluKFRlc3RDYXNlKToKCiAgICBkZWYgdGVzdF9pbl9zaW1wbGUoc2VsZik6CgogICAgICAgIHdpdGggYWN1cmFfc21hbGwgYXMgYWN1cmE6CiAgICAgICAgICAgIGN0eCA9IEN0eChhY3VyYSkKICAgICAgICAgICAgbm90X2luXyA9IE5vdEluKCJtYWtlIiwgIkFjdXJhIikKICAgICAgICAgICAgKGFucywgZXJyKSA9IG5vdF9pbl8oY3R4KQogICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFucykKICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZXJyKQoKICAgICAgICAgICAgbm90X2luXyA9IE5vdEluKCJtYWtlIiwgJ0ZvcmQnLCdDaHJ5c2xlcicsJ0VhZ2xlJywnSG9uZGEnLCdNYXpkYScsICdBY3VyYScpCiAgICAgICAgICAgIChhbnMsIGVycikgPSBub3RfaW5fKGN0eCkKICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhbnMpCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGVycikKCiAgICAgICAgICAgIG5vdF9pbl8gPSBOb3RJbigibWFrZSIsICdGb3JkJywgJ0NocnlzbGVyJywgJ0VhZ2xlJywgJ0hvbmRhJywgJ01hemRhJykKICAgICAgICAgICAgKGFucywgZXJyKSA9IG5vdF9pbl8oY3R4KQogICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYW5zKQogICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShlcnIpCgogICAgZGVmIHRlc3Rfc2VyX25vdF9pbihzZWxmKToKCiAgICAgICAgd2l0aCBhY3VyYV9zbWFsbCBhcyBhY3VyYToKICAgICAgICAgICAgY3R4ID0gQ3R4KGFjdXJhKQoKICAgICAgICAgICAgZm9yIGV4cGVjdGVkIGluICgibWFrZSBub3QgaW4gKCdBY3VyYScsKSIsICJtYWtlIG5vdCBpbiAoJ0ZvcmQnLCdDaHJ5c2xlcicsJ0VhZ2xlJywnSG9uZGEnLCdBY3VyYScsKSIpOgogICAgICAgICAgICAgICAgbm90X2luXyA9IHRvX2NyaXRlcmlhKGV4cGVjdGVkKQogICAgICAgICAgICAgICAgdGV4dCA9IHN0cihub3RfaW5fKQogICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgdGV4dCkKICAgICAgICAgICAgICAgIChhbnMsIGVycikgPSBub3RfaW5fKGN0eCkKICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYW5zKQogICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZXJyKQoKICAgICAgICAgICAgZm9yIGV4cGVjdGVkIGluICgibWFrZSBub3QgaW4gKCdGb3JkJywpIiwgIm1ha2Ugbm90IGluICgnRm9yZCcsJ0NocnlzbGVyJywnRWFnbGUnLCdIb25kYScsJ01hemRhJywpIik6CiAgICAgICAgICAgICAgICBpbl8gPSB0b19jcml0ZXJpYShleHBlY3RlZCkKICAgICAgICAgICAgICAgIHRleHQgPSBzdHIoaW5fKQogICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgdGV4dCkKICAgICAgICAgICAgICAgIChhbnMsIGVycikgPSBpbl8oY3R4KQogICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFucykKICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGVycikKCiAgICBkZWYgdGVzdF91bml2ZXJzYWwoc2VsZik6CiAgICAgICAgbm90SW4gPSBOb3RJbigibWFrZSIsIHVuaXZlcnNhbCkKPHxmaW1faG9sZXw+CiAgICAgICAgc2VsZi5hc3NlcnRJbih1bml2ZXJzYWwsIG5vdEluLnJpZ2h0KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHN0cihub3RJbikpCgogICAgICAgIGZvciB2YWx1ZSBpbiAoInh5eiIsIDEsIDAsIDEwLjMsIEZhbHNlLCBUcnVlLCBvYmplY3QoKSwgIioiKToKICAgICAgICAgICAgY2FyID0geyJtYWtlIjogdmFsdWV9CiAgICAgICAgICAgIChhbnMsIGVycikgPSBub3RJbihjYXIpCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYW5zKQogICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShlcnIpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHVuaXR0ZXN0Lm1haW4oKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGV4cGVjdGVkID0gIm1ha2Ugbm90IGluICgnKicsKSIKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBzdHIobm90SW4pKQoKICAgICAgICBub3RJbiA9IHRvX2NyaXRlcmlhKGV4cGVjdGVkKQo8fGZpbV9lbmR8Pg=="]
["ab92e45f8429781faa0e546f3ad75a6d69a4f84c-1","ab92e45f8429781faa0e546f3ad75a6d69a4f84c","PHxmaW1fcHJlZml4fD4KZnJvbSBsaWIuc2V0dGluZ3NfYmFzZSBpbXBvcnQgKgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpST09UX1VSTENPTkYgPSAnZGVmYXVsdC51cmxzJwo8fGZpbV9lbmR8Pg=="]
["05c7de1e857b27873319a9ff44292946958e2d7f-2","05c7de1e857b27873319a9ff44292946958e2d7f","PHxmaW1fcHJlZml4fD4KIiIiQSByYWRpYWwgZGlzdHJpYnV0aW9uIGZ1bmN0aW9uIG9ic2VydmVyLiIiIgoKaW1wb3J0IG51bXB5CmltcG9ydCBhc2FwMwpmcm9tIGFzYXAzLkludGVybmFsLlN1YmplY3QgaW1wb3J0IFN1YmplY3QKZnJvbSBhc2FwMy5JbnRlcm5hbC5MaXN0T2ZFbGVtZW50cyBpbXBvcnQgTGlzdE9mRWxlbWVudHMKaW1wb3J0IGNQaWNrbGUKaW1wb3J0IG5ldwppbXBvcnQgc3lzCgpjbGFzcyBSYWRpYWxEaXN0cmlidXRpb25GdW5jdGlvbihTdWJqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhdG9tcywgck1heCwgbkJpbnMsIGdyb3Vwcz1Ob25lLCBpbnRlcnZhbD0xLCBhdmVyYWdlPTEsCiAgICAgICAgICAgICAgICAgYXV0b2NsZWFyPUZhbHNlLCB2ZXJib3NlPUZhbHNlKToKICAgICAgICAiIiJDcmVhdGUgYSBSYWRpYWxEaXN0cmlidXRpb25GdW5jdGlvbiBvYnNlcnZlci4KCiAgICAgICAgQXJndW1lbnRzOgogICAgICAgIAogICAgICAgIGF0b21zOiBUaGUgYXRvbXMgYmVpbmcgb2JzZXJ2ZWQuCiAgICAgICAgCiAgICAgICAgck1heDogVGhlIG1heGltdW0gZGlzdGFuY2UgaW4gdGhlIFJERi4KICAgICAgICAKICAgICAgICBuQmluczogVGhlIG51bWJlciBvZiBiaW5zIGluIHRoZSBoaXN0b2dyYW1zLgogICAgICAgIAogICAgICAgIGdyb3VwcyAob3B0aW9uYWwpOiBBIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHBlciBhdG9tLCB1c2VkIHRvCiAgICAgICAgY2xhc3NpZnkgYXRvbXMgaW50byBncm91cHMsIHRoZSBSREYgaXMgY2FsY3VsYXRlZCBmb3IgZWFjaAogICAgICAgIGdyb3VwLgoKICAgICAgICBpbnRlcnZhbCAob3B0aW9uYWwsIGRlZmF1bHQ9MSk6IEhvdyBvZnRlbiBzaG91bGQgdGhlIFJERiBiZQogICAgICAgIGNhbGN1bGF0ZWQuICBERVBSRUNBVEVEOiBVc2UgaW50ZXJ2YWwgYXJndW1lbnQgd2hlbiBhdHRhY2hpbmcKICAgICAgICB0byBkeW5hbWljcyBpbnN0ZWFkLgoKICAgICAgICBhdmVyYWdlIChvcHRpb25hbCwgZGVmYXVsdD0xKTogSG93IG1hbnkgdGltZXMgc2hvdWxkIHRoZSBSREYKICAgICAgICBiZSBjYWxjdWxhdGVkIGFuZCBhdmVyYWdlZCBiZWZvcmUgYW55IG9ic2VydmVyIG9mIHRoaXMgb2JqZWN0CiAgICAgICAgaXMgbm90aWZpZWQgYW5kL29yIHRoZSBSREYgaXMgc2F2ZWQgdG8gYSBmaWxlLgoKICAgICAgICBhdXRvY2xlYXIgKG9wdGlvbmFsLCBkZWZhdWx0PUZhbHNlKTogU2hvdWxkIHRoZSBSREYgYmUgY2xlYXJlZAogICAgICAgIGFmdGVyIHRoZSBSREYgaGFzIGJlZW4gcHJvY2Vzc2VkIGJ5IG9ic2VydmVycyBhbmQvb3Igd3JpdHRlbgogICAgICAgIHRvIGEgZmlsZT8gIFRoZSBkZWZhdWx0IGlzIHRvIGNvbnRpbnVlIHRvIGFjY3VtdWxhdGUgZGF0YS4KICAgICAgICAiIiIKICAgICAgICBTdWJqZWN0Ll9faW5pdF9fKHNlbGYpCiAgICAgICAgc2VsZi5hdG9tcyA9IGF0b21zCiAgICAgICAgc2VsZi5uYXRvbXMgPSBsZW4oYXRvbXMpCiAgICAgICAgc2VsZi5nbG9iYWxyZGYgPSBOb25lCiAgICAgICAgc2VsZi5yTWF4ID0gck1heCAqIDEuMCAgIyBHdWFyZCBhZ2FpbnN0IGludGVnZXIgZGl2aXNpb25zLgogICAgICAgIHNlbGYubkJpbnMgPSBuQmlucwogICAgICAgIHNlbGYuZHIgPSBzZWxmLnJNYXggLyBuQmlucwogICAgICAgIHNlbGYuaW50ZXJ2YWwgPSBpbnRlcnZhbAogICAgICAgIHNlbGYuYXZlcmFnZSA9IGF2ZXJhZ2UKICAgICAgICBzZWxmLmF1dG9jbGVhciA9IGF1dG9jbGVhcgogICAgICAgIHNlbGYudmVyYm9zZSA9IHZlcmJvc2UKICAgICAgICBzZWxmLmF1dG9zYXZlID0gRmFsc2UKICAgICAgICBzZWxmLm4xID0gMCAgIyBDb3VudGVyIGFzc29jaWF0ZWQgd2l0aCBpbnRlcnZhbAogICAgICAgIHNlbGYubjIgPSAwICAjIENvdW50ZXIgYXNzb2NpYXRlZCB3aXRoIGF2ZXJhZ2UKICAgICAgICBzZWxmLmNsZWFybmV4dCA9IEZhbHNlCiAgICAgICAgc2VsZi5jb3VudFJERiA9IDAKICAgICAgICBzZWxmLmxpc3RPZkVsZW1lbnRzID0gTGlzdE9mRWxlbWVudHMoYXRvbXMpCiAgICAgICAgCiAgICAgICAgaWYgZ3JvdXBzIGlzIE5vbmU6CiAgICAgICAgICAgIHNlbGYuZ3JvdXBzID0gbnVtcHkuemVyb3MobGVuKGF0b21zKSwgbnVtcHkuaW50MzIpCiAgICAgICAgICAgIHNlbGYubmdyb3VwcyA9IDEKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiBncm91cHMuc2hhcGUgIT0gKGxlbihhdG9tcyksKToKICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJncm91cHMgbXVzdCBiZSBhbiBpbnRlZ2VyIHBlciBhdG9tIgogICAgICAgICAgICBpZiBtaW4oZ3JvdXBzKSA8IDAgb3IgbWF4KGdyb3VwcykgPj0gbGVuKGF0b21zKToKICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJncm91cHMgYXJyYXkgaXMgdW5yZWFzb25hYmxlIgogICAgICAgICAgICBzZWxmLmdyb3VwcyA9IGdyb3Vwcy5hc3R5cGUobnVtcHkuaW50MzIpCiAgICAgICAgICAgIHNlbGYubmdyb3VwcyA9IG1heChzZWxmLmdyb3VwcykgKyAxCgogICAgZGVmIHVwZGF0ZShzZWxmLCBhdG9tcz1Ob25lKToKICAgICAgICAiIiJDYWxjdWxhdGUgdGhlIFJERiBvZiB0aGUgYXRvbXMuCgogICAgICAgIE1ha2UgYW4gUkRGIGNhbGN1bGF0aW9uIG5vdyAob3IgaWYgaW50ZXJ2YWw9biB3YXMgc3BlY2lmaWVkLAogICAgICAgIGV2ZXJ5IG4gdGltZSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuCgogICAgICAgIElmIGF2ZXJhZ2UgPSAxLCB0aGVuIGFueSBvYnNlcnZlcnMgb2YgdGhpcyBvYmplY3QgaXMgbm90aWZpZWQuCgogICAgICAgIElmIGF2ZXJhZ2UgPiAxLCB0aGUgY2FsY3VsYXRlZCBSREZzIGFyZSBhY2N1bXVsYXRlZCwgYW5kIG9uY2UKICAgICAgICBhIHN1ZmZpY2llbnQgbnVtYmVyIG9mIFJERnMgaGF2ZSBiZWVuIGFjY3VtdWxhdGVkLCB0aGUKICAgICAgICBvYnNlcnZlcnMgYXJlIG5vdGlmaWVkIGFuZCB0aGUgYXZlcmFnZWQgUkRGcyBhcmUgcmVhZHkuCiAgICAgICAgIiIiCiAgICAgICAgaWYgYXRvbXMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHNlbGYuYXRvbXMgPSBhdG9tcwoKICAgICAgICBzZWxmLm4xICs9IDEKICAgICAgICBpZiBzZWxmLm4xID49IHNlbGYuaW50ZXJ2YWw6CiAgICAgICAgICAgIGlmIHNlbGYuY2xlYXJuZXh0OgogICAgICAgICAgICAgICAgc2VsZi5jbGVhcigpCiAgICAgICAgICAgIHNlbGYubjEgPSAwCiAgICAgICAgICAgIHNlbGYuZG9fcmRmKCkKICAgICAgICAgICAgc2VsZi5uMiArPSAxCiAgICAgICAgICAgIGlmIHNlbGYubjIgPj0gc2VsZi5hdmVyYWdlOgogICAgICAgICAgICAgICAgc2VsZi5jbGVhcm5leHQgPSBzZWxmLmF1dG9jbGVhcgogICAgICAgICAgICAgICAgc2VsZi5jYWxsX29ic2VydmVycygpICAjIEkgaGF2ZSBkYXRhIHJlYWR5CiAgICAgICAgICAgICAgICBpZiBzZWxmLmF1dG9zYXZlOgogICAgICAgICAgICAgICAgICAgIHNlbGYuc2F2ZSgpCiAgICAgICAgICAgICAgICBzZWxmLm4yID0gMAoKICAgIGRlZiBkb19yZGYoc2VsZik6CiAgICAgICAgIiIiRG8gdGhlIGFjdHVhbCBSREYgY2FsY3VsYXRpb24uICBEbyBub3QgY2FsbCBkaXJlY3RseS4iIiIKICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CiAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIkNhbGN1bGF0aW5nIFJERiIKICAgICAgICBhc3NlcnQgc2VsZi5uYXRvbXMgPT0gbGVuKHNlbGYuYXRvbXMpCiAgICAgICAgZ3JkZiwgcmRmcywgY250cyA9IGFzYXAzLl9hc2FwLlJhd1JERihzZWxmLmF0b21zLCBzZWxmLnJNYXgsIHNlbGYubkJpbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdyb3Vwcywgc2VsZi5uZ3JvdXBzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saXN0T2ZFbGVtZW50cykKCiAgICAgICAgIyMjCiAgICAgICAgcHJpbnQgJ05hdG9tczonLCBzZWxmLm5hdG9tcwogICAgICAgIHByaW50ICdHbG9iYWwgUkRGIGNvdW50OicsIGdyZGYuc3VtKCkKICAgICAgICBmb3IgZyBpbiByYW5nZShsZW4ocmRmcykpOgogICAgICAgICAgICBwcmludCAnR3JvdXA6JywgZwogICAgICAgICAgICBmb3IgZSBpbiByZGZzW2ddLmtleXMoKToKICAgICAgICAgICAgICAgIHByaW50ICcgIFJERiBjb3VudCAlczogJWknICUgKGUsIHJkZnNbZ11bZV0uc3VtKCkpCiAgICAgICAgICAgIGZvciBlIGluIGNudHNbZ10ua2V5cygpOgogICAgICAgICAgICAgICAgcHJpbnQgJyAgQ291bnQgKCVpKTogJWknICUgKGUsIGNudHNbZ11bZV0pCiAgICAgICAgIyMjCgogICAgICAgICMgU2FuaXR5IGNoZWNrIG9uIGNvdW50cwogICAgICAgIGMgPSAwCiAgICAgICAgZm9yIGNudCBpbiBjbnRzOiAjIExvb3Agb3ZlciBncm91cHMKICAgICAgICAgICAgZm9yIHQgaW4gY250LmtleXMoKTogIyBMb29wIG92ZXIgZWxlbWVudHMKICAgICAgICAgICAgICAgIGMgKz0gY250W3RdCiAgICAgICAgYXNzZXJ0IGMgPT0gc2VsZi5uYXRvbXMKICAgICAgICAjIE5vdyBzdG9yZSB0aGUgZGF0YQogICAgICAgIGlmIHNlbGYuZ2xvYmFscmRmIGlzIE5vbmU6CiAgICAgICAgICAgIHNlbGYuZ2xvYmFscmRmID0gZ3JkZgogICAgICAgICAgICBzZWxmLnJkZnMgPSByZGZzCiAgICAgICAgICAgIHNlbGYuYXRvbWNvdW50cyA9IGNudHMKICAgICAgICAgICAgIyBFbnN1cmUgdGhhdCBhbGwgZWxlbWVudHMgYXJlIHJlcHJlc2VudGVkCiAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihyZGZzKSk6ICMgTG9vcCBvdmVyIGdyb3VwcwogICAgICAgICAgICAgICAgZm9yIGUgaW4gc2VsZi5saXN0T2ZFbGVtZW50czogIyBMb29wIG92ZXIgZWxlbWVudHMKICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5hdG9tY291bnRzW2ldLmhhc19rZXkoZSk6CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXRvbWNvdW50c1tpXVtlXSA9IDAKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLmdsb2JhbHJkZiArPSBncmRmCiAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihyZGZzKSk6ICMgTG9vcCBvdmVyIGdyb3VwcwogICAgICAgICAgICAgICAgZm9yIHQgaW4gcmRmc1tpXS5rZXlzKCk6ICMgTG9vcCBvdmVyIHBhaXJzCiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZGZzW2ldW3RdICs9IHJkZnNbaV1bdF0KICAgICAgICAgICAgICAgIGZvciB0IGluIGNudHNbaV0ua2V5cygpOiAjIExvb3Agb3ZlciBlbGVtZW50cwogICAgICAgICAgICAgICAgICAgIHNlbGYuYXRvbWNvdW50c1tpXVt0XSArPSBjbnRzW2ldW3RdCiAgICAgICAgc2VsZi5jb3VudFJERiArPSAxCiAgICAgICAgc2VsZi52b2x1bWUgPSBzZWxmLmF0b21zLmdldF92b2x1bWUoKQogICAgICAgIGlmIHNlbGYudmVyYm9zZToKICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiUkRGIGRvbmUhIgoKICAgIGRlZiBjbGVhcihzZWxmKToKICAgICAgICAiIiJDbGVhciB0aGUgYWNjdW11bGF0ZWQgUkRGcy4gIENhbGxlZCBhdXRvbWF0aWNhbGx5LiIiIgogICAgICAgIGlmIHNlbGYudmVyYm9zZToKICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiQ2xlYXJpbmcgUkRGIgogICAgICAgIHNlbGYuZ2xvYmFscmRmID0gc2VsZi5yZGZzID0gc2VsZi5hdG9tY291bnRzID0gTm9uZQogICAgICAgIHNlbGYuY291bnRSREYgPSAwCiAgICAgICAgCiAgICBkZWYgZ2V0X3JkZihzZWxmLCBncm91cHM9Tm9uZSwgZWxlbWVudHM9Tm9uZSwgbm9ybWFsaXplPSd2b2x1bWUnKToKICAgICAgICAiIiJHZXQgYW4gUkRGLgoKICAgICAgICBBcmd1bWVudHMgKGJvdGggb3B0aW9uYWwpOgogICAgICAgIAogICAgICAgIGdyb3VwczogT25seSBnZXQgdGhlIFJERiBmb3IgYXRvbXMgaW4gdGhlc2UgZ3JvdXBzLiBDYW4gZWl0aGVyIGJlIGFuCiAgICAgICAgaW50ZWdlciBvciBhIGxpc3QgaW50ZWdlciByZWZlcmluZyB0byB0aGUgZ3JvdXBzIChkZWZhdWx0OiBhbGwgZ3JvdXBzKQogICAgICAgIAogICAgICAgIGVsZW1lbnRzOiBHZXQgdGhlIHBhcnRpYWwgUkRGIGZvciB0aGVzZSB0d28gZWxlbWVudHMuCiAgICAgICAgZWxlbWVudHMgbXVzdCBiZSBhIHR1cGxlIG9mIHR3byBhdG9taWMgbnVtYmVycyAoYSwgYiksIHRoZQogICAgICAgIHJldHVybmVkIFJERiB0ZWxscyBob3cgbWFueSBiIG5laWdoYm9ycyBhbiBhIGF0b20gaGFzLgoKICAgICAgICBJZiBnZXRfcmRmIGlzIGNhbGxlZCBvbiBhIG5ld2x5IGNyZWF0ZWQKICAgICAgICBSYWRpYWxEaXN0cmlidXRpb25GdW5jdGlvbiBvYmplY3QsIGFuZCB0aGlzIG9iamVjdCBoYXMgYmVlbgogICAgICAgIGNyZWF0ZWQgd2l0aG91dCBzcGVjaWZ5aW5nIGludGVydmFsIGFuZCBhdmVyYWdlIHBhcmFtZXRlcnMsIGl0CiAgICAgICAgaXMgYXNzdW1lZCB0aGF0IHRoZSB1c2VyIGlzIG5vdCB1c2luZyB0aGUgb2JqZWN0IGFzIGFuCiAgICAgICAgb2JzZXJ2ZXIsIGJ1dCB3YW50cyBhbiBpbW1lZGlhdGUgY2FsY3VsYXRpb24gb2YgdGhlIFJERi4gIEluCiAgICAgICAgdGhhdCBjYXNlLCBjYWxsaW5nIGdldF9yZGYgdHJpZ2dlcnMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZQogICAgICAgIFJERnMuICBJbiBhbGwgb3RoZXIgY2FzZXMgcHJldmlvdXNseSBzdG9yZWQgUkRGcyBhcmUgcmV0dXJuZWQuCiAgICAgICAgIiIiCiAgICAgICAgaWYgc2VsZi5nbG9iYWxyZGYgaXMgTm9uZSBhbmQgc2VsZi5pbnRlcnZhbCA9PSAxIGFuZCBzZWxmLmF2ZXJhZ2UgPT0gMToKICAgICAgICAgICAgc2VsZi51cGRhdGUoKQogICAgICAgICAgICAKICAgICAgICBpZiBncm91cHMgaXMgTm9uZSBhbmQgZWxlbWVudHMgaXMgTm9uZToKICAgICAgICAgICAgIyBSZXR1cm4gZ2xvYmFsIFJERgogICAgICAgICAgICByZXR1cm4gc2VsZi5ub3JtYWxpemUoc2VsZi5nbG9iYWxyZGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50UkRGICogc2VsZi5uYXRvbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemUpCgogICAgICAgICMgRWl0aGVyIGEgZ3JvdXAgb3IgYSBwYWlyIG9mIGVsZW1lbnRzIGhhdmUgYmVlbiBzcGVjaWZpZWQuCiAgICAgICAgIyBTdW0gb3ZlciBzZWxlY3RlZCBncm91cHMKICAgICAgICBpZiBncm91cHMgaXMgTm9uZToKICAgICAgICAgICAgZ3JvdXBzID0gcmFuZ2UobGVuKHNlbGYucmRmcykpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZ3JvdXBzLCBsaXN0KToKICAgICAgICAgICAgICAgIGdyb3VwcyA9IFtncm91cHNdCgogICAgICAgIHJkZnMgPSBzZWxmLnJkZnNbZ3JvdXBzWzBdXS5jb3B5KCkgICMgU2hhbGxvdyBjb3B5CiAgICAgICAgYXRvbWNvdW50cyA9IHNlbGYuYXRvbWNvdW50c1tncm91cHNbMF1dLmNvcHkoKSAgIyBTaGFsbG93IGNvcHkKICAgICAgICBmb3IgaSBpbiBncm91cHNbMTpdOiAjIExvb3Agb3ZlciBncm91cHMKICAgICAgICAgICAgaWYgaSA+PSBsZW4oc2VsZi5yZGZzKToKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGZvciB0IGluIHNlbGYucmRmc1tpXS5rZXlzKCk6ICMgTG9vcCBvdmVyIHBhaXJzCiAgICAgICAgICAgICAgICByZGZzW3RdICs9IHNlbGYucmRmc1tpXVt0XQogICAgICAgICAgICBmb3IgdCBpbiBzZWxmLmF0b21jb3VudHNbaV0ua2V5cygpOiAjIExvb3Agb3ZlciBlbGVtZW50cwogICAgICAgICAgICAgICAgYXRvbWNvdW50c1t0XSArPSBzZWxmLmF0b21jb3VudHNbaV1bdF0KCiAgICAgICAgIyBTdW0gb3ZlciBzZWxlY3RlZCBlbGVtZW50IHBhaXJzCiAgICAgICAgZWxlbWVudHBhaXJzID0gZWxlbWVudHMKICAgICAgICBpZiBlbGVtZW50cGFpcnMgaXMgTm9uZToKICAgICAgICAgICAgZWxlbWVudHMgPSBzZWxmLmxpc3RPZkVsZW1lbnRzCiAgICAgICAgICAgIGVsZW1lbnRwYWlycyA9IHJkZnMua2V5cygpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlbGVtZW50cGFpcnMsIHR1cGxlKToKICAgICAgICAgICAgICAgIGVsZW1lbnRzID0gW2VsZW1lbnRwYWlyc1swXV0KICAgICAgICAgICAgICAgIGVsZW1lbnRwYWlycyA9IFtlbGVtZW50cGFpcnNdCiAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShlbGVtZW50cGFpcnMsIGludCk6CiAgICAgICAgICAgICAgICBlbGVtZW50cyA9IFtlbGVtZW50cGFpcnNdCiAgICAgICAgICAgICAgICBlbGVtZW50cGFpcnMgPSBbXQogICAgICAgICAgICAgICAgZm9yIGUxIGluIHNlbGYubGlzdE9mRWxlbWVudHM6CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHBhaXJzLmFwcGVuZCgoZWxlbWVudHNbMF0sIGUxKSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0VsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGFuIGludGVyZ2VyIG9yICcgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYSB0dXBsZSBvZiB0d28gaW50ZWdlcnMuJykKCiAgICAgICAgcmRmID0gTm9uZQogICAgICAgIGZvciBwYWlyIGluIGVsZW1lbnRwYWlyczoKICAgICAgICAgICAgaWYgcmRmIGlzIE5vbmU6CiAgICAgICAgICAgICAgICByZGYgPSBudW1weS5hcnJheShyZGZzW3BhaXJdKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmRmICs9IHJkZnNbcGFpcl0KCiAgICAgICAgIyBUaGUgYXRvbWNvdW50cyBzaG91bGQgYWx3YXlzIGJlIHN1bW1lZCBvdmVyIGVsZW1lbnRzIQogICAgICAgIGF0b21jb3VudCA9IE5vbmUKICAgICAgICBmb3IgdCBpbiBhdG9tY291bnRzLmtleXMoKToKICAgICAgICAgICAgaWYgYXRvbWNvdW50IGlzIE5vbmU6CiAgICAgICAgICAgICAgICBhdG9tY291bnQgPSBhdG9tY291bnRzW3RdCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBhdG9tY291bnQgKz0gYXRvbWNvdW50c1t0XQoKICAgICAgICAjIyMKICAgICAgICBhdG9tY291bnQgPSBOb25lCiAgICAgICAgZm9yIGUgaW4gZWxlbWVudHM6CiAgICAgICAgICAgIGlmIGF0b21jb3VudCBpcyBOb25lOgogICAgICAgICAgICAgICAgYXRvbWNvdW50ID0gYXRvbWNvdW50c1tlXQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgYXRvbWNvdW50ICs9IGF0b21jb3VudHNbZV0KICAgICAgICBwcmludCAnTnVtYmVyIG9mIHNlbGVjdGVkIGF0b21zOicsIGF0b21jb3VudAogICAgICAgICMjIwogICAgICAgIHJldHVybiBzZWxmLm5vcm1hbGl6ZShyZGYsIGF0b21jb3VudCwgbm9ybWFsaXplKQoKICAgIGRlZiBub3JtYWxpemUoc2VsZiwgcmRmLCBuY291bnQsIHR5cGUpOgogICAgICAgICIiIk5vcm1hbGl6ZSB0aGUgcmF3IFJERiByZXR1cm5lZCBieSB0aGUgQysrIG1vZHVsZS4iIiIKICAgICAgICBpZiB0eXBlID09ICd2b2x1bWUnOgogICAgICAgICAgICBmYWN0b3IgPSAoNCAqIG51bXB5LnBpIC8gMy4wKSAqIG5jb3VudCAqIHNlbGYubmF0b21zIC8gc2VsZi52b2x1bWUKICAgICAgICAgICAgciA9IG51bXB5LmFyYW5nZShzZWxmLm5CaW5zKSAqIHNlbGYuZHIKICAgICAgICAgICAgcjNsb3cgPSByICogciAqIHIKICAgICAgICAgICAgciArPSBzZWxmLmRyCiAgICAgICAgICAgIHIzaGlnaCA9IHIgKiByICogcgogICAgICAgICAgICBub3JtYWxpemF0aW9uID0gZmFjdG9yICogKHIzaGlnaCAtIHIzbG93KQogICAgICAgIGVsaWYgdHlwZSA9PSAnYXRvbXMnOgogICAgICAgICAgICBub3JtYWxpemF0aW9uID0gMS4wICogbmNvdW50CiAgICAgICAgZWxzZToKICAgICAgICAgICAgbm9ybWFsaXphdGlvbiA9IDEuMAogICAgICAgIHJldHVybiByZGYgLyBub3JtYWxpemF0aW9uCjx8ZmltX2hvbGV8PgogICAgICAgIHNlbGYuYXV0b3NhdmUgPSBUcnVlCiAgICAgICAgc2VsZi5zYXZlZmlsZWNvdW50ZXIgPSAwCiAgICAgICAgaWYgIiUiIGluIHByZWZpeDoKICAgICAgICAgICAgIyBBc3N1bWUgdGhlIHVzZXIga25vd3Mgd2hhdCAocyloZSBpcyBkb2luZwogICAgICAgICAgICBzZWxmLmZpbGVuYW1lcyA9IHByZWZpeAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYuZmlsZW5hbWVzID0gcHJlZml4ICsgIiUwNGQucmRmIgoKICAgIGRlZiBzYXZlKHNlbGYsIGZpbGVuYW1lPU5vbmUpOgogICAgICAgIGlmIHNlbGYudmVyYm9zZToKICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiU2F2aW5nIFJERiIKICAgICAgICBpZiBmaWxlbmFtZSA9PSBOb25lOgogICAgICAgICAgICBmaWxlbmFtZSA9IChzZWxmLmZpbGVuYW1lcyAlIChzZWxmLnNhdmVmaWxlY291bnRlciwpKQogICAgICAgICAgICBzZWxmLnNhdmVmaWxlY291bnRlciArPSAxCiAgICAgICAgZGF0YSA9IHsiZ2xvYmFscmRmIjogc2VsZi5nbG9iYWxyZGYsCiAgICAgICAgICAgICAgICAicmRmcyIgOiBzZWxmLnJkZnMsCiAgICAgICAgICAgICAgICAiYXRvbWNvdW50cyI6IHNlbGYuYXRvbWNvdW50cywKICAgICAgICAgICAgICAgICJjb3VudFJERiI6IHNlbGYuY291bnRSREYsCiAgICAgICAgICAgICAgICAick1heCI6IHNlbGYuck1heCwKICAgICAgICAgICAgICAgICJkciI6IHNlbGYuZHIsCiAgICAgICAgICAgICAgICAibkJpbnMiOiBzZWxmLm5CaW5zLAogICAgICAgICAgICAgICAgIm5hdG9tcyI6IHNlbGYubmF0b21zLAogICAgICAgICAgICAgICAgInZvbHVtZSI6IHNlbGYudm9sdW1lfQogICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAidyIpCiAgICAgICAgY1BpY2tsZS5kdW1wKGRhdGEsIGYsIDIpICMgUHJvdG9jb2wgMiAoZWZmaWNpZW50IGJpbiBmcm9tIFB5dGhvbiAyLjMpCiAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgCiAgICAjIE5vdCBzdXBwb3J0ZWQgaW4gcHl0aG9uIDIuMzogIEBjbGFzc21ldGhvZAogICAgI0BjbGFzc21ldGhvZAogICAgZGVmIGxvYWQoY2xzLCBmaWxlbmFtZSk6CiAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUpCiAgICAgICAgZGF0YSA9IGNQaWNrbGUubG9hZChmKQogICAgICAgIGYuY2xvc2UoKQogICAgICAgIG9iaiA9IG5ldy5pbnN0YW5jZShjbHMsIGRhdGEpCiAgICAgICAgcmV0dXJuIG9iagogICAgbG9hZD1jbGFzc21ldGhvZChsb2FkKQogICAgCjx8ZmltX3N1ZmZpeHw+CiAgICAKICAgICMgU2F2aW5nIGFuZCBsb2FkaW5nIFJERidzCiAgICBkZWYgb3V0cHV0X2ZpbGUoc2VsZiwgcHJlZml4KToKICAgICAgICAiIiJHaXZlIHRoZSBmaWxlIHByZWZpeCBmb3Igc2F2aW5nIFJERnMsIGFuZCB0dXJuIG9uIHNhdmluZy4iIiIKPHxmaW1fZW5kfD4="]
["e60b9462bebe66eee30ecd6b1be90071ac9ead5d-3","e60b9462bebe66eee30ecd6b1be90071ac9ead5d","PHxmaW1fcHJlZml4fD4KZGVmIHByZWZpeF9mdW5jdGlvbihsaW5lOiBzdHIpIC0+IGxpc3Q6CiAgICBsZW5ndGggPSBsZW4obGluZSkKICAgIFAgPSBbMCBmb3IgXyBpbiByYW5nZShsZW5ndGgpXQogICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuZ3RoKToKICAgICAgICBqID0gUFtpIC0gMV0KICAgICAgICB3aGlsZSBqID4gMCBhbmQgbGluZVtpXSAhPSBsaW5lW2pdOgogICAgICAgICAgICBqID0gUFtqIC0gMV0KICAgICAgICBpZiBsaW5lW2ldID09IGxpbmVbal06CiAgICAgICAgICAgIGogKz0gMQogICAgICAgIFBbaV0gPSBqCjx8ZmltX2hvbGV8PgpzdGFydCA9IGlucHV0KCkKZW5kID0gaW5wdXQoKQpwcmludChwcmVmaXhfZnVuY3Rpb24oZW5kICsgc3RhcnQpWy0xXSkKPHxmaW1fc3VmZml4fD4KICAgIHJldHVybiBQCgoKPHxmaW1fZW5kfD4="]
["0548162b725a4a88060f38ca285bf296dda2cb11-2","0548162b725a4a88060f38ca285bf296dda2cb11","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IGdpCmdpLnJlcXVpcmVfdmVyc2lvbignR3RrJywgJzMuMCcpCmZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR3RrCgpjbGFzcyBNZXNzYWdlRGlhbG9nKEd0ay5XaW5kb3cpOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIEd0ay5XaW5kb3cuX19pbml0X18oc2VsZikKICAgICAgICBzZWxmLnNldF90aXRsZSgiTWVzc2FnZURpYWxvZyIpCiAgICAgICAgc2VsZi5jb25uZWN0KCJkZXN0cm95IiwgR3RrLm1haW5fcXVpdCkKCiAgICAgICAgYnV0dG9uYm94ID0gR3RrLkJ1dHRvbkJveCgpCiAgICAgICAgc2VsZi5hZGQoYnV0dG9uYm94KQoKICAgICAgICBidXR0b25JbmZvcm1hdGlvbiA9IEd0ay5CdXR0b24obGFiZWw9IkluZm9ybWF0aW9uIikKICAgICAgICBidXR0b25JbmZvcm1hdGlvbi5tZXNzYWdlX3R5cGUgPSBHdGsuTWVzc2FnZVR5cGUuSU5GTwogICAgICAgIGJ1dHRvbkluZm9ybWF0aW9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLm9uX21lc3NhZ2VfY2xpY2tlZCkKICAgICAgICBidXR0b25ib3guYWRkKGJ1dHRvbkluZm9ybWF0aW9uKQogICAgICAgIGJ1dHRvbldhcm5pbmcgPSBHdGsuQnV0dG9uKGxhYmVsPSJXYXJuaW5nIikKICAgICAgICBidXR0b25XYXJuaW5nLm1lc3NhZ2VfdHlwZSA9IEd0ay5NZXNzYWdlVHlwZS5XQVJOSU5HCiAgICAgICAgYnV0dG9uV2FybmluZy5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5vbl9tZXNzYWdlX2NsaWNrZWQpCiAgICAgICAgYnV0dG9uYm94LmFkZChidXR0b25XYXJuaW5nKQogICAgICAgIGJ1dHRvblF1ZXN0aW9uID0gR3RrLkJ1dHRvbihsYWJlbD0iUXVlc3Rpb24iKQogICAgICAgIGJ1dHRvblF1ZXN0aW9uLm1lc3NhZ2VfdHlwZSA9IEd0ay5NZXNzYWdlVHlwZS5RVUVTVElPTgogICAgICAgIGJ1dHRvblF1ZXN0aW9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLm9uX21lc3NhZ2VfY2xpY2tlZCkKPHxmaW1faG9sZXw+CiAgICAgICAgYnV0dG9uYm94LmFkZChidXR0b25FcnJvcikKICAgICAgICBidXR0b25PdGhlciA9IEd0ay5CdXR0b24obGFiZWw9Ik90aGVyIikKICAgICAgICBidXR0b25PdGhlci5tZXNzYWdlX3R5cGUgPSBHdGsuTWVzc2FnZVR5cGUuT1RIRVIKICAgICAgICBidXR0b25PdGhlci5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5vbl9tZXNzYWdlX2NsaWNrZWQpCiAgICAgICAgYnV0dG9uYm94LmFkZChidXR0b25PdGhlcikKCiAgICAgICAgc2VsZi5tZXNzYWdlZGlhbG9nID0gR3RrLk1lc3NhZ2VEaWFsb2cobWVzc2FnZV9mb3JtYXQ9Ik1lc3NhZ2VEaWFsb2ciKQogICAgICAgIHNlbGYubWVzc2FnZWRpYWxvZy5zZXRfdHJhbnNpZW50X2ZvcihzZWxmKQogICAgICAgIHNlbGYubWVzc2FnZWRpYWxvZy5zZXRfdGl0bGUoIk1lc3NhZ2VEaWFsb2ciKQogICAgICAgIHNlbGYubWVzc2FnZWRpYWxvZy5zZXRfbWFya3VwKCI8c3BhbiBzaXplPScxMjAwMCc+PGI+VGhpcyBpcyBhIE1lc3NhZ2VEaWFsb2cgd2lkZ2V0LjwvYj48L3NwYW4+IikKICAgICAgICBzZWxmLm1lc3NhZ2VkaWFsb2cuZm9ybWF0X3NlY29uZGFyeV90ZXh0KCJUaGUgTWVzc2FnZURpYWxvZyBjYW4gZGlzcGxheSBhIG1haW4gbWVzc2FnZSwgYW5kIGZ1cnRoZXIgc2Vjb25kYXJ5IGNvbnRlbnQuIikKICAgICAgICBzZWxmLm1lc3NhZ2VkaWFsb2cuYWRkX2J1dHRvbigiX0Nsb3NlIiwgR3RrLlJlc3BvbnNlVHlwZS5DTE9TRSkKCiAgICBkZWYgb25fbWVzc2FnZV9jbGlja2VkKHNlbGYsIGJ1dHRvbik6CiAgICAgICAgc2VsZi5tZXNzYWdlZGlhbG9nLnNldF9wcm9wZXJ0eSgibWVzc2FnZS10eXBlIiwgYnV0dG9uLm1lc3NhZ2VfdHlwZSkKCiAgICAgICAgc2VsZi5tZXNzYWdlZGlhbG9nLnJ1bigpCiAgICAgICAgc2VsZi5tZXNzYWdlZGlhbG9nLmhpZGUoKQoKd2luZG93ID0gTWVzc2FnZURpYWxvZygpCndpbmRvdy5zaG93X2FsbCgpCgpHdGsubWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgYnV0dG9uYm94LmFkZChidXR0b25RdWVzdGlvbikKICAgICAgICBidXR0b25FcnJvciA9IEd0ay5CdXR0b24obGFiZWw9IkVycm9yIikKICAgICAgICBidXR0b25FcnJvci5tZXNzYWdlX3R5cGUgPSBHdGsuTWVzc2FnZVR5cGUuRVJST1IKICAgICAgICBidXR0b25FcnJvci5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5vbl9tZXNzYWdlX2NsaWNrZWQpCjx8ZmltX2VuZHw+"]
["c29c1bbd7883872c36d5888405fb63e37aa8cf02-2","c29c1bbd7883872c36d5888405fb63e37aa8cf02","PHxmaW1fcHJlZml4fD4KZnJvbSBVRTRQYXJzZS5CaW5hcnlSZWFkZXIgaW1wb3J0IEJpbmFyeVN0cmVhbQoKCmNsYXNzIEZHZW5lcmF0aW9uSW5mbzoKICAgIEV4cG9ydENvdW50OiBpbnQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgTmFtZUNvdW50OiBpbnQKCiAgICBkZWYgX19pbml0X18oc2VsZixyZWFkZXI6IEJpbmFyeVN0cmVhbSkgLT4gTm9uZToKICAgICAgICBzZWxmLkV4cG9ydENvdW50ID0gcmVhZGVyLnJlYWRJbnQzMigpCjx8ZmltX2VuZHw+"]
["bbc659044b8b050783a40b818a4b04c03d2d58fb-4","bbc659044b8b050783a40b818a4b04c03d2d58fb","PHxmaW1fcHJlZml4fD4KZnJvbSBkb3RlbnYgaW1wb3J0IGxvYWRfZG90ZW52CgppbXBvcnQgb3MKaW1wb3J0IHJhbmRvbQppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IHVybGxpYi5wYXJzZQppbXBvcnQgdXJsbGliMwoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgp1cmxsaWIzLmRpc2FibGVfd2FybmluZ3ModXJsbGliMy5leGNlcHRpb25zLkluc2VjdXJlUmVxdWVzdFdhcm5pbmcpCgpsb2FkX2RvdGVudigpCgo8fGZpbV9lbmR8Pg=="]
["59180d92fa33a57c85f2b4f58cc589a2ca7d4087-2","59180d92fa33a57c85f2b4f58cc589a2ca7d4087","PHxmaW1fcHJlZml4fD4KIyBJbXBvcnRzCmltcG9ydCBvcwpmcm9tIEtyYXRvc011bHRpcGh5c2ljcyBpbXBvcnQgKgpmcm9tIEtyYXRvc011bHRpcGh5c2ljcy5ERU1BcHBsaWNhdGlvbiBpbXBvcnQgKgpmcm9tIEtyYXRvc011bHRpcGh5c2ljcy5UaGVybWFsREVNQXBwbGljYXRpb24gaW1wb3J0ICoKCiMgSW1wb3J0IGNvcnJlY3QgREVNX3Byb2NlZHVyZXMgZmlsZSAoYXMgaXQgaXMgZG9uZSBpbiBERU1fYW5hbHlzaXNfc3RhZ2UgZm9yIGltcG9ydGluZyBwcm9jZWR1cmVzKQppZiBJc0Rpc3RyaWJ1dGVkUnVuKCk6CiAgICBpZiAiRE9fTk9UX1BBUlRJVElPTl9ET01BSU4iIGluIG9zLmVudmlyb246CiAgICAgICAgZnJvbSBLcmF0b3NNdWx0aXBoeXNpY3MubXBpIGltcG9ydCAqCiAgICAgICAgaW1wb3J0IEtyYXRvc011bHRpcGh5c2ljcy5ERU1BcHBsaWNhdGlvbi5ERU1fcHJvY2VkdXJlc19tcGlfbm9fcGFydGl0aW9ucyBhcyBERU1fcHJvY2VkdXJlcwogICAgZWxzZToKICAgICAgICBmcm9tIEtyYXRvc011bHRpcGh5c2ljcy5NZXRpc0FwcGxpY2F0aW9uIGltcG9ydCAqCiAgICAgICAgZnJvbSBLcmF0b3NNdWx0aXBoeXNpY3MuTVBJU2VhcmNoQXBwbGljYXRpb24gaW1wb3J0ICoKICAgICAgICBmcm9tIEtyYXRvc011bHRpcGh5c2ljcy5tcGkgaW1wb3J0ICoKICAgICAgICBpbXBvcnQgS3JhdG9zTXVsdGlwaHlzaWNzLkRFTUFwcGxpY2F0aW9uLkRFTV9wcm9jZWR1cmVzX21waSBhcyBERU1fcHJvY2VkdXJlcwplbHNlOgogICAgaW1wb3J0IEtyYXRvc011bHRpcGh5c2ljcy5ERU1BcHBsaWNhdGlvbi5ERU1fcHJvY2VkdXJlcyBhcyBERU1fcHJvY2VkdXJlcwoKIyBTZXQgYmFzZSBjbGFzcwpCYXNlSU8gPSBERU1fcHJvY2VkdXJlcy5ERU1JbwoKIyBBdXhpbGlhcnkgZnVuY3Rpb25zCmRlZiBHZXRCb29sUGFyYW1ldGVySWZJdEV4aXN0cyhwYXJhbWV0ZXJzLCBrZXkpOgogICAgaWYga2V5IGluIHBhcmFtZXRlcnMua2V5cygpOgogICAgICAgIHJldHVybiBwYXJhbWV0ZXJzW2tleV0uR2V0Qm9vbCgpCiAgICBlbHNlOgogICAgICAgIHJldHVybiBGYWxzZQoKIyBJTyBjbGFzcwpjbGFzcyBUaGVybWFsREVNSW8oQmFzZUlPKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIERFTV9wYXJhbWV0ZXJzLCBwb3N0X3BhdGgsIGFsbF9tb2RlbF9wYXJ0cyk6CiAgICAgICAgIyBTZXQgc3RhbmRhcmQgcG9zIG9wdGlvbnMKICAgICAgICBCYXNlSU8uX19pbml0X18oc2VsZiwgbW9kZWwsIERFTV9wYXJhbWV0ZXJzLCBwb3N0X3BhdGgsIGFsbF9tb2RlbF9wYXJ0cykKCiAgICAgICAgIyBTZXQgdGhlcm1hbCBwb3Mgb3B0aW9ucwogICAgICAgIHNlbGYuUG9zdFRlbXBlcmF0dXJlID0gR2V0Qm9vbFBhcmFtZXRlcklmSXRFeGlzdHMoc2VsZi5ERU1fcGFyYW1ldGVycywgIlBvc3RUZW1wZXJhdHVyZSIpCiAgICAgICAgc2VsZi5Qb3N0SGVhdEZsdXggICAgPSBHZXRCb29sUGFyYW1ldGVySWZJdEV4aXN0cyhzZWxmLkRFTV9wYXJhbWV0ZXJzLCAiUG9zdEhlYXRGbHV4IikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiBJbml0aWFsaXplKHNlbGYsIERFTV9wYXJhbWV0ZXJzKToKICAgICAgICAjIEFkZCBzdGFuZGFyZCBwb3MgdmFyaWFibGVzCiAgICAgICAgQmFzZUlPLkluaXRpYWxpemUoc2VsZiwgREVNX3BhcmFtZXRlcnMpCjx8ZmltX2VuZHw+"]
["55b08088944c7ba2c856eac6a303cb8efaa95ca9-3","55b08088944c7ba2c856eac6a303cb8efaa95ca9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBwaWNrbGUKCiNBID0gbnAubG9hZHR4dCgiUm9ja19QYXBlcl9TY2lzc29yc19SYXcudHh0IiwgZHR5cGUgPSBsaXN0LCBjb21tZW50cyA9ICcjJywgZGVsaW1pdGVyID0gJywnLCB1c2Vjb2xzID0gKDAsMSwyLDMpKQpBID0gbnAubG9hZHR4dCgiUm9ja19QYXBlcl9TY2lzc29yc19SYXcudHh0IiwgZHR5cGUgPSBpbnQsIGNvbW1lbnRzID0gJyMnLCBkZWxpbWl0ZXIgPSAnLCcsIHVzZWNvbHMgPSAoMCwxLDIsMyksIG5kbWluID0gMikKCndpdGggb3BlbignUm9ja19QYXBlcl9TY2lzc29yc19SYXcucGtsJywgJ3diJykgYXMgb3V0cHV0OgoJcGlja2xlLmR1bXAoQSwgb3V0cHV0LCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCkKPHxmaW1faG9sZXw+CldlIGRvIGtub3cgdGhhdCBnYW1lX3JvdW5kcyBjYW4ndCBlbmQgaW4gYSB0aWUsIGFuZCBhIGdhbWUgbGFzdHMgdW50aWwgdGhlcmUgYXJlIDMgd2lucywgb3Igc29tZW9uZSB3YWxrcyBhd2F5LicnJwo8fGZpbV9zdWZmaXh8PgoKJycnVGhlIGRhdGEgaXMgbm93IGluIGEgcGtsIGZpbGUsIHN0b3JlZCBhcyBhIGxpc3Qgb2YgbGlzdHMuIEVhY2ggcm93IGxvb2tzIGxpa2UgdGhpczogCltnYW1lX2lkLGdhbWVfcm91bmRfaWQscGxheWVyX29uZV90aHJvdyxwbGF5ZXJfdHdvX3Rocm93XQpXZSBkb24ndCBrbm93IHdoYXQgMSwgMiwgYW5kIDMgcmVwcmVzZW50LiBPciBldmVuIHdoaWNoIG9uZSBiZWF0cyB3aGljaC4KPHxmaW1fZW5kfD4="]
["55955252d3713b39084342bff8c667b0f0f7de74-4","55955252d3713b39084342bff8c667b0f0f7de74",{"$cut":{"chars":29812,"head":"PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IG9zCmltcG9ydCBzeXMKc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBUcnVlCmltcG9ydCBjYWZmZQoKZnJvbSBjYWZmZSBpbXBvcnQgbGF5ZXJzIGFzIEwKZnJvbSBjYWZmZSBpbXBvcnQgcGFyYW1zIGFzIFAKZnJvbSBjYWZmZS5wcm90byBpbXBvcnQgY2FmZmVfcGIyCgpzeXMucGF0aC5hcHBlbmQoJy4uLycpCmZyb20gUHlMaWIuTmV0TGliLllvbG9OZXQgaW1wb3J0ICoKZnJvbSBQeUxpYi5OZXRMaWIuQ29udkJOTGF5ZXIgaW1wb3J0ICoKZnJvbSBQeUxpYi5OZXRMaWIuTXVsdGlTY2FsZUxheWVyIGltcG9ydCAqCmZyb20gUHlMaWIuTmV0TGliLlNzZERldGVjdG9yX3IyIGltcG9ydCAqCmZyb20gbWFza19wYXJhbSBpbXBvcnQgKgoKZGVmIFNTREhlYWRlcihuZXQsZGF0YV9sYXllcj0iZGF0YSIsZnJvbV9sYXllcnM9W10saW5wdXRfaGVpZ2h0PTMwMCxpbnB1dF93aWR0aD0zMDAsbG9jX3Bvc3RmaXg9JycsKipzc2RwYXJhbSk6CgkjIENyZWF0ZSBTU0QgSGVhZGVyCgltYm94X2xheWVycyA9IFNzZERldGVjdG9ySGVhZGVycygKCQkJCSAgbmV0LCBcCiAgICAgICAgICAgICAgICAgIGJveHNpemVzPXNzZHBhcmFtLmdldCgiYm94c2l6ZXMiLFtdKSwgXAogICAgICAgICAgICAgICAgICBuZXRfd2lkdGg9aW5wdXRfd2lkdGgsIG5ldF9oZWlnaHQ9aW5wdXRfaGVpZ2h0LCBcCiAgICAgICAgICAgICAgICAgIGRhdGFfbGF5ZXI9ImRhdGEiLCBcCgkJCQkgIG51bV9jbGFzc2VzPXNzZHBhcmFtLmdldCgibnVtX2NsYXNzZXMiLDIpLCBcCiAgICAgICAgICAgICAgICAgIGZyb21fbGF5ZXJzPWZyb21fbGF5ZXJzLCBcCiAgICAgICAgICAgICAgICAgIHVzZV9iYXRjaG5vcm09c3NkcGFyYW0uZ2V0KCJ1c2VfYm4iLFRydWUpLCBcCiAgICAgICAgICAgICAgICAgIHByaW9yX3ZhcmlhbmNlPXNzZHBhcmFtLmdldCgicHJpb3JfdmFyaWFuY2UiLFswLjEsMC4xLDAuMiwwLjJdKSwgXAogICAgICAgICAgICAgICAgICBub3JtYWxpemF0aW9ucz1zc2RwYXJhbS5nZXQoIm5vcm1hbGl6YXRpb25zIixbXSksIFwKICAgICAgICAgICAgICAgICAgYXNwZWN0X3JhdGlvcz1zc2RwYXJhbS5nZXQoImFzcGVjdF9yYXRpb3MiLFtdKSwgXAogICAgICAgICAgICAgICAgICBmbGlwPXNzZHBhcmFtLmdldCgiZmxpcCIsVHJ1ZSksIFwKCQkJCSAgY2xpcD1zc2RwYXJhbS5nZXQoImNsaXAiLFRydWUpLCBcCiAgICAgICAgICAgICAgICAgIGludGVyX2xheWVyX2NoYW5uZWxzPXNzZHBhcmFtLmdldCgiaW50ZXJfbGF5ZXJfY2hhbm5lbHMiLFtdKSwgXAogICAgICAgICAgICAgICAgICBrZXJuZWxfc2l6ZT1zc2RwYXJhbS5nZXQoImtlcm5lbF9zaXplIiwzKSwgXAoJCQkJICBwYWQ9c3NkcGFyYW0uZ2V0KCJwYWQiLDEpLGxvY19wb3N0Zml4PWxvY19wb3N0Zml4KQoJcmV0dXJuIG1ib3hfbGF5ZXJzCgojIGRlZiBLcHNIZWFkZXIxKG5ldCxmcm9tX2xheWVyPSJyb2lfbWFwcyIsb3V0X2xheWVyPSJrcHNfbWFwcyIsdXNlX2xheWVycz01LG51bV9jaGFubmVscz0xMjgsIFwKIyAJCQkgIGtlcm5lbF9zaXplPTMscGFkPTEsdXNlX2RlY29udl9sYXllcnM9MSxscj0xLGRlY2F5PTEpOgojIAkjIHVzZSBjb252ICYgZGVjb252IG9wZXJhdGlvbnMKIyAJa3dhcmdzID0gewojICAgICAgICAncGFyYW0nOiBbZGljdChscl9tdWx0PWxyLCBkZWNheV9tdWx0PWRlY2F5KSwgZGljdChscl9tdWx0PTIqbHIsIGRlY2F5X211bHQ9MCldLAojICAgICAgICAnd2VpZ2h0X2ZpbGxlcic6IGRpY3QodHlwZT0neGF2aWVyJyksCiMgICAgICAgICdiaWFzX2ZpbGxlcic6IGRpY3QodHlwZT0nY29uc3RhbnQnLCB2YWx1ZT0wKQojIAl9CiMgCSMgY29udgojIAlzdGFydF9sYXllciA9IGZyb21fbGF5ZXIKIyAJZm9yIGxheWVyIGluIHJhbmdlKDEsIHVzZV9sYXllcnMpOgojIAkJY29udl9rcHMgPSAia3BzX2NvbnZ7fSIuZm9ybWF0KGxheWVyKQojIAkJbmV0W2NvbnZfa3BzXSA9IEwuQ29udm9sdXRpb24obmV0W3N0YXJ0X2xheWVyXSwgbnVtX291dHB1dD1udW1fY2hhbm5lbHMsIFwKIyAJCQlwYWQ9cGFkLCBrZXJuZWxfc2l6ZT1rZXJuZWxfc2l6ZSwgKiprd2FyZ3MpCiMgCQlyZWx1X2twcyA9ICJrcHNfcmVsdXt9Ii5mb3JtYXQobGF5ZXIpCiMgCQluZXRbcmVsdV9rcHNdID0gTC5SZUxVKG5ldFtjb252X2twc10sIGluX3BsYWNlPVRydWUpCiMgCQlzdGFydF9sYXllciA9IHJlbHVfa3BzCgojIAlpZiB1c2VfZGVjb252X2xheWVycyA+IDA6CiMgCQlzdGFydF9sYXllciA9IHJlbHVfa3BzCiMgCQkjIGRlY29udgojIAkJZGVjb252X2t3YXJncyA9IHsKIyAJCSAgICAncGFyYW0nOiBbZGljdChscl9tdWx0PWxyLCBkZWNheV9tdWx0PWRlY2F5KV0sCiMgCQkgICAgJ2NvbnZvbHV0aW9uX3BhcmFtJzogewojIAkJICAgICAgICAnbnVtX291dHB1dCc6IG51bV9jaGFubmVscywKIyAJCSAgICAgICAgJ2tlcm5lbF9zaXplJzogMiwKIyAJCSAgICAgICAgJ3BhZCc6IDAsCiMgCQkgICAgICAgICdzdHJpZGUnOiAyLAojIAkJICAgICAgICAnd2VpZ2h0X2ZpbGxlcic6IGRpY3QodHlwZT0neGF2aWVyJyksCiMgCQkgICAgICAgICdiaWFzX3Rlcm0nOiBUcnVlLAojIAkJICAgICAgICAnZ3JvdXAnOiAxLAojIAkJICAgICAgICAnYmlhc19maWxsZXInOiBkaWN0KHR5cGU9J2NvbnN0YW50JywgdmFsdWU9MC4wKSwKIyAJCSAgICAgICAgfQojIAkgICAgfQojIAkJZm9yIGxheWVyIGluIHJhbmdlKDEsIHVzZV9kZWNvbnZfbGF5ZXJzKzEpOgojIAkJCWRlY29udl9rcHMgPSAia3BzX2RlY29udnt9Ii5mb3JtYXQobGF5ZXIpCiMgCQkJbmV0W2RlY29udl9rcHNdID0gTC5EZWNvbnZvbHV0aW9uKG5ldFtzdGFydF9sYXllcl0sICoqZGVjb252X2t3YXJncykKIyAJCQlkZXJlbHVfa3BzID0gImtwc19kZXJlbHV7fSIuZm9ybWF0KGxheWVyKQojIAkJCW5ldFtkZXJlbHVfa3BzXSA9IEwuUmVMVShuZXRbZGVjb252X2twc10sIGluX3BsYWNlPVRydWUpCiMgCQkJc3RhcnRfbGF5ZXIgPSBkZXJlbHVfa3BzCiMgCSMgTGFzdCBMYXllcgojIAljb252X2twcyA9ICJrcHNfY29udnt9Ii5mb3JtYXQodXNl"}}]
["556f2c84de216a81f2a3f5ec4941070251fe58d8-1","556f2c84de216a81f2a3f5ec4941070251fe58d8","PHxmaW1fcHJlZml4fD4KIyB3ZWxjb21lICB0byB0aHJlYWRpbmcKZnJvbSAgdGhyZWFkaW5nIGltcG9ydCAqCgpkZWYgY3ViZSh4KToKICAgIHByaW50KCJDdWJlIG9mIHggaXMgezB9Ii5mb3JtYXQoeCoqMykpCmRlZiBzcXVhcmUoeCk6CiAgICBwcmludCgiU3F1YXJlIG9mIHggaXMgIHswfSAiLmZvcm1hdCh4KngpKQoKPHxmaW1faG9sZXw+CiAgICB0MS5zdGFydCgpCiAgICB0Mi5zdGFydCgpCjx8ZmltX3N1ZmZpeHw+CndoaWxlIFRydWU6CiAgICB4PWlucHV0KCkKICAgIHQxPVRocmVhZCh0YXJnZXQ9Y3ViZSxhcmdzPSh4LCkpCiAgICB0Mj1UaHJlYWQodGFyZ2V0PXNxdWFyZSxhcmdzPSh4LCkpCjx8ZmltX2VuZHw+"]
["c666999c07d9670578edc09483b1ed928c0ae2b6-1","c666999c07d9670578edc09483b1ed928c0ae2b6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGJpbmFzY2lpCmltcG9ydCBvcwpmcm9tIGJhc2U2NCBpbXBvcnQgYjY0ZGVjb2RlCmZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcwpmcm9tIHR5cGluZyBpbXBvcnQgRGljdCwgVGV4dCwgVHVwbGUsIFVuaW9uCgppbXBvcnQgYXN5bmNwZwpmcm9tIHBhc3NsaWIuaGFzaCBpbXBvcnQgcGJrZGYyX3NoYTI1Ngpmcm9tIHNhbmljIGltcG9ydCByZXNwb25zZSBhcyByCmZyb20gc2FuaWNfand0IGltcG9ydCBleGNlcHRpb25zCgpmcm9tIGdpbm9fYWRtaW4gaW1wb3J0IGNvbmZpZwpmcm9tIGdpbm9fYWRtaW4uaGlzdG9yeSBpbXBvcnQgbG9nX2hpc3RvcnlfZXZlbnQKZnJvbSBnaW5vX2FkbWluLnV0aWxzIGltcG9ydCBsb2dnZXIKCmNmZyA9IGNvbmZpZy5jZmcKCgpkZWYgdG9rZW5fdmFsaWRhdGlvbigpOgogICAgZGVmIGRlY29yYXRvcihyb3V0ZSk6CiAgICAgICAgQHdyYXBzKHJvdXRlKQogICAgICAgIGFzeW5jIGRlZiB2YWxpZGF0ZShyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAgICBpZiBub3Qgb3MuZ2V0ZW52KCJBRE1JTl9BVVRIX0RJU0FCTEUiKSA9PSAiMSI6CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgbm90IHJlcXVlc3QuY29va2llcwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgb3Igbm90IHJlcXVlc3QuY29va2llcy5nZXQoImF1dGgtdG9rZW4iKQogICAgICAgICAgICAgICAgICAgIG9yIHJlcXVlc3QuY29va2llcy5nZXQoImF1dGgtdG9rZW4iKSBub3QgaW4gY2ZnLnNlc3Npb25zCiAgICAgICAgICAgICAgICAgICAgb3IgKAogICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvb2tpZXNbImF1dGgtdG9rZW4iXSBpbiBjZmcuc2Vzc2lvbnMKPHxmaW1fZW5kfD4="]
["bb7a9a3f6bd7311f208b1b01ffac70bb0060e422-2","bb7a9a3f6bd7311f208b1b01ffac70bb0060e422",{"$cut":{"chars":17700,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRyYWNlYmFjawppbXBvcnQganNvbgppbXBvcnQgbWF0aApmcm9tIHN0cnVjdCBpbXBvcnQgKgppbXBvcnQgcmFuZG9tCmZyb20gZW1haWxhcHAuZGVjb3JhdGUgaW1wb3J0IGxvZ2luX3JlcXVpcmVkCmZyb20gZW1haWxhcHAuc3FsX2hlbHBlcnMgaW1wb3J0IHRlbXBsYXRlcywgYXV0aGVudGljYXRlLCB1c2VyLCBsaXN0cywgXAogICAgY2FtcGFpZ25faGVscGVyLCBlbWFpbF9yZXN1bHQsIHJlYWR5X3RvX3NlbmRfZW1haWxfaGVscGVyLCBcCiAgICBjYW1wYWlnbl9zdGF0cywgY2FtcGFpZ25fd2lubmluZ19jb21iaW5hdGlvbiwgZW1haWxzX3Vuc3Vic2NyaWJlLCBcCiAgICBjYW1wYWlnbl9zZXR1cCwgZW1haWxfc3ViamVjdCwgYWJfY2FtcGFpZ25zX2hlbHBlcgpmcm9tIGVtYWlsYXBwIGltcG9ydCBhcHAsIHNlc3Npb24sIHJlcXVlc3QsIHJlZGlyZWN0LCByZW5kZXJfdGVtcGxhdGUsIFwKICAgIHVybF9mb3IsIGpzb25pZnkKZnJvbSBjb25mLmNvbmZpZyBpbXBvcnQgRU1BSUxfT1BFTl9VUkwsIEFQUF9ST09ULCBBUFBfU1RBVElDCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lLCB0aW1lZGVsdGEKCgpjYW1wYWlnbl9zdGF0c19oZWxwZXIgPSBjYW1wYWlnbl9zdGF0cy5DYW1wYWlnblN0YXRzSGVscGVyKCkKdGVtcGxhdGVfaGVscGVyID0gdGVtcGxhdGVzLlRlbXBsYXRlcygpCnVzZXJfYXV0aGVudGljYXRlID0gYXV0aGVudGljYXRlLkF1dGhlbnRpY2F0ZSgpCmNhbXBhaWduX2hlbHBlcl9vYmogPSBjYW1wYWlnbl9oZWxwZXIuQ2FtcGFpZ25IZWxwZXIoKQplbWFpbF9yZXN1bHRfaGVscGVyID0gZW1haWxfcmVzdWx0LkVtYWlsUmVzdWx0SGVscGVyKCkKcmVhZHlfdG9fc2VuZF9lbWFpbF9oZWxwZXJfb2JqID0gcmVhZHlfdG9fc2VuZF9lbWFpbF9oZWxwZXIuXAogICAgUmVhZHlUb1NlbmRFbWFpbHNIZWxwZXIoKQplbWFpbF91c2VyID0gdXNlci5Vc2VyKCkKbGlzdF9oZWxwZXIgPSBsaXN0cy5MaXN0cygpCmNhbXBhaWduX3dpbm5pbmdfaGVscGVyID0gY2FtcGFpZ25fd2lubmluZ19jb21iaW5hdGlvbi5DYW1wYWlnbldpbm5pbmdIZWxwZXIoKQplbWFpbHNfdW5zdWJzY3JpYmVfb2JqID0gZW1haWxzX3Vuc3Vic2NyaWJlLkVtYWlsVW5zdWJzY3JpYmVIZWxwZXIoKQoKY2FtcGFpZ25fc2V0dXBfb2JqID0gY2FtcGFpZ25fc2V0dXAuQ2FtcGFpZ25TZXR1cEhlbHBlcigpCmVtYWlsX3N1YmplY3Rfb2JqID0gZW1haWxfc3ViamVjdC5FbWFpbFN1YmplY3RIZWxwZXIoKQphYl9jYW1wYWlnbnNfaGVscGVyX29iaiA9IGFiX2NhbXBhaWduc19oZWxwZXIuQWJDYW1wYWlnbnNIZWxwZXIoKQoKCkBsb2dpbl9yZXF1aXJlZApkZWYgY2FtcGFpZ25zKCk6CiAgICBlbWFpbF9jYW1wYWlnbiA9IGNhbXBhaWduX2hlbHBlcl9vYmouZ2V0X2NhbXBhaWducygpCiAgICBlbWFpbF9hYl9jYW1wYWlnbiA9IGFiX2NhbXBhaWduc19oZWxwZXJfb2JqLmdldF9hbGxfYWJfY2FtcGFpZ24oKQogICAgZW1haWxfY2FtcGFpZ25zID0gW10KICAgIGVtYWlsX2NhbXBhaWduX2RhdGEgPSBbXQogICAgZW1haWxfYWJfY2FtcGFpZ25fZGF0YSA9IFtdCgogICAgZm9yIGl0ZW0gaW4gZW1haWxfY2FtcGFpZ246CgogICAgICAgIGlkID0gaXRlbVsnaWQnXQogICAgICAgIG5hbWUgPSBpdGVtWyduYW1lJ10KICAgICAgICBjYW1wYWlnbl90eXBlID0gaXRlbVsnY2FtcGFpZ25fdHlwZSddCiAgICAgICAgc3RhdHVzID0gaXRlbVsnc3RhdHVzJ10KICAgICAgICBjYW1wYWlnbl9zdGF0ZSA9IGl0ZW1bJ2NhbXBhaWduX3N0YXRlJ10KCiAgICAgICAgbGlzdF9pZCA9IGl0ZW1bJ2xpc3RfaWQnXQogICAgICAgIHNlbmRfZW1haWxzID0gbGVuKHJlYWR5X3RvX3NlbmRfZW1haWxfaGVscGVyX29iai5nZXRfc2VuZF9lbWFpbHMoaWQpKQogICAgICAgIHVuc3Vic2NyaWJlX2VtYWlscyA9IGxlbihyZWFkeV90b19zZW5kX2VtYWlsX2hlbHBlcl9vYmouZ2V0X3Vuc3Vic2NyaWJlX2VtYWlscyhpZCkpCiAgICAgICAgc2VuZF91bnN1YnNjcmliZV9lbWFpbHMgPSBzZW5kX2VtYWlscyArIHVuc3Vic2NyaWJlX2VtYWlscwogICAgICAgIHRvdGFsX2VtYWlscyA9IGludChsaXN0X2hlbHBlci5nZXRfbGlzdHNlZ21lbnRfY291bnQobGlzdF9pZCkpCiAgICAgICAgYXZlcmFnZSA9IDAKICAgICAgICBpZiBzZW5kX3Vuc3Vic2NyaWJlX2VtYWlsczoKICAgICAgICAgICAgYXZnID0gKHNlbmRfdW5zdWJzY3JpYmVfZW1haWxzKjEwMCkvdG90YWxfZW1haWxzCiAgICAgICAgICAgIGF2ZXJhZ2UgPSBpbnQobWF0aC50cnVuYyhhdmcpKQoKICAgICAgICBjYW1wYWlnbl9kYXRhID0geyJpZCI6IGlkLCAibmFtZSI6IG5hbWUsICJjYW1wYWlnbl90eXBlIjogY2FtcGFpZ25fdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiBzdGF0dXMsICJjYW1wYWlnbl9zdGF0ZSI6IGNhbXBhaWduX3N0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgImF2ZXJhZ2UiOiBhdmVyYWdlfQogICAgICAgIGVtYWlsX2NhbXBhaWduX2RhdGEuYXBwZW5kKGNhbXBhaWduX2RhdGEpCiAgICAgICAgZW1haWxfY2FtcGFpZ25zLmFwcGVuZChjYW1wYWlnbl9kYXRhKQoKICAgICMgYWJfY2FtcGFpZ24gd29yawoKICAgIGNoaWxkX2NhbXBhaWduID0gW10KICAgIGZvciBhYl9kYXRhIGluIGVtYWlsX2FiX2NhbXBhaWduOgogICAgICAgIGNoaWxkX2lkID0gW10KICAgICAgICBpZCA9IGFiX2RhdGFbJ2lkJ10KICAgICAgICBuYW1lID0gYWJfZGF0YVsnbmFtZSddCiAgICAgICAgY2FtcGFpZ25fc3RhdGUgPSBhYl9kYXRhWydjYW1wYWlnbl9zdGF0ZSddCiAgICAgICAgc3RhdHVzID0gYWJfZGF0YVsnc3RhdHVzJ10KICAgICAgICBjYW1wYWlnbl90eXBlID0gYWJfZGF0YVsnY2FtcGFpZ25fdHlwZSddCiAgICAgICAgbGlzdF9pZCA9IGFiX2RhdGFbJ2xpc3RfaWQnXQogICAgICAgIHBhcmVudF9jb3VudCA9IGFiX2RhdGFbJ2FiX2NhbXBhaWduX2NvdW50J10KICAgICAgICB0ZXN0X3BlcmNlbnRhZ2UgPSBhYl9kYXRhWyd0ZXN0X3BlcmNlbnRhZ2UnXQogICAgICAgIGFiX2NhbWFwaWduID0gYWJfY2FtcGFpZ25z"}}]
["bb8bc5620e99bd314aee83fe8848c686d8c7defb-1","bb8bc5620e99bd314aee83fe8848c686d8c7defb","PHxmaW1fcHJlZml4fD4KX192ZXJzaW9uX18gPSAnMS4wLjAnCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIERBVEFCQVNFIENPTkZJRwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgICB1c2VkIGluIGRhdGFiYXNlLnB5CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmltcG9ydCB5YW1sCgo8fGZpbV9lbmR8Pg=="]
["c6945bde4aa051b76e53f33d66a38cf375a4002e-5","c6945bde4aa051b76e53f33d66a38cf375a4002e","PHxmaW1fcHJlZml4fD4KIiIiCkNsYXJpc3NlCgpBIGxpZ2h0LXdlaWdodGVkIEdVSSBmcmFtZXdvcmsgZm9yIFB5dGhvbiBwcm9ncmFtcy4KCmJ5IDFNTGlnaHR5ZWFyc0BnbWFpbC5jb20KCm9uIDIwMjAxMjA4CiIiIgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IG9zCmltcG9ydCBzeXMKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCgpmcm9tIC5HVUkgaW1wb3J0IENscnNHVUkKCmZyb20gLmFuYWx5emUgaW1wb3J0IEFuYWx5emVGdW5jCgoKX19hbGxfXyA9IFsiQ2xhcmlzc2UiLCAidmVyc2lvbiJdCgp2ZXJzaW9uID0gInYwLjAuNCIKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRlZiBDbGFyaXNzZSgqYXJncywgKiprd2FyZ3MpOgogICAgZGVmIG1pZGRsZShmdW5jKToKICAgICAgICBpZiBpc2luc3RhbmNlKGZ1bmMsIHR5cGUobGFtYmRhOiAwKSk6Cgo8fGZpbV9lbmR8Pg=="]
["c6f3528d90a9f9b6e4b6f70346c6c35fa107fbd0-2","c6f3528d90a9f9b6e4b6f70346c6c35fa107fbd0","PHxmaW1fcHJlZml4fD4KZnJvbSB3ZWJzb2NrZXQgaW1wb3J0IFdlYlNvY2tldEFwcApmcm9tIHRocmVhZGluZyBpbXBvcnQgVGhyZWFkCmltcG9ydCBqc29uCmltcG9ydCB0aW1lCmNsYXNzIFVwYml0V2ViU29ja2V0OgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3QsIGNhbGxiYWNrPXByaW50KToKICAgICAgICBzZWxmLnJlcXVlc3QgPSByZXF1ZXN0CiAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCiAgICAgICAgc2VsZi53cyA9IFdlYlNvY2tldEFwcCgKICAgICAgICAgICAgdXJsPSJ3c3M6Ly9hcGkudXBiaXQuY29tL3dlYnNvY2tldC92MSIsCiAgICAgICAgICAgIG9uX21lc3NhZ2U9bGFtYmRhIHdzLCBtc2c6IHNlbGYub25fbWVzc2FnZSh3cywgbXNnKSwKICAgICAgICAgICAgb25fZXJyb3I9bGFtYmRhIHdzLCBtc2c6IHNlbGYub25fZXJyb3Iod3MsIG1zZyksCiAgICAgICAgICAgIG9uX2Nsb3NlPWxhbWJkYSB3czogICAgIHNlbGYub25fY2xvc2Uod3MpLAogICAgICAgICAgICBvbl9vcGVuPWxhbWJkYSB3czogICAgIHNlbGYub25fb3Blbih3cykpCiAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKICAgIAogICAgZGVmIG9uX21lc3NhZ2Uoc2VsZiwgd3MsIG1zZyk6CiAgICAgICAgbXNnID0ganNvbi5sb2Fkcyhtc2cuZGVjb2RlKCd1dGYtOCcpKQogICAgICAgIHNlbGYuY2FsbGJhY2sobXNnKQogICAgCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBvbl9lcnJvcihzZWxmLCB3cywgbXNnKToKICAgICAgICBzZWxmLmNhbGxiYWNrKG1zZykKICAgIAogICAgZGVmIG9uX2Nsb3NlKHNlbGYsIHdzKToKPHxmaW1fZW5kfD4="]
["e625c5ae09b319a1907a035c112f4f04228e2278-1","e625c5ae09b319a1907a035c112f4f04228e2278","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIFNpbVBFRyBpbXBvcnQgU29sdmVyLCBTb2x2ZXJEaWFnLCBTb2x2ZXJDRywgU29sdmVyTFUKZnJvbSBkaXNjcmV0aXplIGltcG9ydCBUZW5zb3JNZXNoCmZyb20gU2ltUEVHLnV0aWxzIGltcG9ydCBzZGlhZwppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHNjaXB5LnNwYXJzZSBhcyBzcGFyc2UKClRPTEQgPSAxZS0xMApUT0xJID0gMWUtMwpudW1SSFMgPSA1CgpucC5yYW5kb20uc2VlZCg3NykKCgpkZWYgZG90ZXN0KE1ZU09MVkVSLCBtdWx0aT1GYWxzZSwgQT1Ob25lLCAqKnNvbHZlck9wdHMpOgogICAgaWYgQSBpcyBOb25lOgogICAgICAgIGgxID0gbnAub25lcygxMCkgKiAxMDAuMAogICAgICAgIGgyID0gbnAub25lcygxMCkgKiAxMDAuMAogICAgICAgIGgzID0gbnAub25lcygxMCkgKiAxMDAuMAoKICAgICAgICBoID0gW2gxLCBoMiwgaDNdCgogICAgICAgIE0gPSBUZW5zb3JNZXNoKGgpCgogICAgICAgIEQgPSBNLmZhY2VEaXYKICAgICAgICBHID0gLU0uZmFjZURpdi5UCiAgICAgICAgTXNpZyA9IE0uZ2V0RmFjZUlubmVyUHJvZHVjdCgpCiAgICAgICAgQSA9IEQgKiBNc2lnICogRwogICAgICAgIEFbLTEsIC0xXSAqPSAxIC8gTS52b2xbLTFdICAjIHJlbW92ZSB0aGUgY29uc3RhbnQgbnVsbCBzcGFjZSBmcm9tIHRoZSBtYXRyaXgKICAgIGVsc2U6CiAgICAgICAgTSA9IFRlbnNvck1lc2goW0Euc2hhcGVbMF1dKQoKICAgIEFpbnYgPSBNWVNPTFZFUihBLCAqKnNvbHZlck9wdHMpCiAgICBpZiBtdWx0aToKICAgICAgICBlID0gbnAub25lcyhNLm5DKQogICAgZWxzZToKICAgICAgICBlID0gbnAub25lcygoTS5uQywgbnVtUkhTKSkKICAgIHJocyA9IEEgKiBlCiAgICB4ID0gQWludiAqIHJocwogICAgQWludi5jbGVhbigpCiAgICByZXR1cm4gbnAubGluYWxnLm5vcm0oZSAtIHgsIG5wLmluZikKCgpjbGFzcyBUZXN0U29sdmVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiB0ZXN0X2RpcmVjdF9zcHNvbHZlXzEoc2VsZik6CiAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGRvdGVzdChTb2x2ZXIsIEZhbHNlKSwgVE9MRCkKCiAgICBkZWYgdGVzdF9kaXJlY3Rfc3Bzb2x2ZV9NKHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhkb3Rlc3QoU29sdmVyLCBUcnVlKSwgVE9MRCkKCiAgICBkZWYgdGVzdF9kaXJlY3Rfc3BsdV8xKHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhkb3Rlc3QoU29sdmVyTFUsIEZhbHNlKSwgVE9MRCkKCiAgICBkZWYgdGVzdF9kaXJlY3Rfc3BsdV9NKHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhkb3Rlc3QoU29sdmVyTFUsIFRydWUpLCBUT0xEKQoKICAgIGRlZiB0ZXN0X2l0ZXJhdGl2ZV9kaWFnXzEoc2VsZik6CiAgICAgICAgc2VsZi5hc3NlcnRMZXNzKAogICAgICAgICAgICBkb3Rlc3QoU29sdmVyRGlhZywgRmFsc2UsIEE9c2RpYWcobnAucmFuZG9tLnJhbmQoMTApICsgMS4wKSksIFRPTEkKICAgICAgICApCgogICAgZGVmIHRlc3RfaXRlcmF0aXZlX2RpYWdfTShzZWxmKToKICAgICAgICBzZWxmLmFzc2VydExlc3MoCiAgICAgICAgICAgIGRvdGVzdChTb2x2ZXJEaWFnLCBUcnVlLCBBPXNkaWFnKG5wLnJhbmRvbS5yYW5kKDEwKSArIDEuMCkpLCBUT0xJCiAgICAgICAgKQoKICAgIGRlZiB0ZXN0X2l0ZXJhdGl2ZV9jZ18xKHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhkb3Rlc3QoU29sdmVyQ0csIEZhbHNlKSwgVE9MSSkKCiAgICBkZWYgdGVzdF9pdGVyYXRpdmVfY2dfTShzZWxmKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhkb3Rlc3QoU29sdmVyQ0csIFRydWUpLCBUT0xJKQoKCjx8ZmltX2VuZHw+"]
["051ec03abaa40e919a65a1a00f7439ef70ae0209-3","051ec03abaa40e919a65a1a00f7439ef70ae0209","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxpYi5zdGF0ZQppbXBvcnQgdW5pdHRlc3QKCgpjbGFzcyBUZXN0U3RhdGVJdGFsaWNzV3JhcHBpbmcodW5pdHRlc3QuVGVzdENhc2UpOgoKICAgICIiIlRlc3RzIGZvciB0cmFja2luZyBzdGF0ZSBvZiBpYXRsaWNzIGJsb2NrcyBvdmVyIG11bHRpcGxlIGxpbmVzLiIiIgoKICAgIGRlZiB0ZXN0X2hhbmdpbmdfY2xvc2VkX2J5X2JvbGRfdG9rZW4oc2VsZik6CiAgICAgICAgIiIiV3JhcHMgbXVsdGlwbGUgbGluZXMgYW5kIGNsb3NlZCBieSB0b2tlbi4iIiIKICAgICAgICBzdGF0ZSA9IGxpYi5zdGF0ZS5TdGF0ZSgpCiAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdGF0ZS5pc19pdGFsaWNzKQogICAgICAgIHN0YXRlLnVwZGF0ZSgnKnRlc3QnKQogICAgICAgIHN0YXRlLnVwZGF0ZSgnbW9yZSBwcm96ZScpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhdGUuaXNfaXRhbGljcykKICAgICAgICBzdGF0ZS51cGRhdGUoJyonKQogICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3RhdGUuaXNfaXRhbGljcykKCjx8ZmltX2VuZHw+"]
["c6c0b073ef9519ff20586b926ef6fd207de69875-2","c6c0b073ef9519ff20586b926ef6fd207de69875","PHxmaW1fcHJlZml4fD4KIyBTdWEgdGFyZWZhIHNlcsOhIGxlciBhcyBtZWRpZGFzIGRlIHRlbXBvIGRlIHVtIGdydXBvIGRlIGNhcmFjw7NpcyBlIGluZGljYXIgKGkpCiMgcXVhbnRvcyBhbmltYWlzIGVzdMOjbyBlbSBjYWRhIHVtIGRvcyBuw612ZWlzIGRlZmluaWRvcywgKGlpKSBxdWFsIGZvaSBvIHRlbXBvCiMgbcOpZGlvIHBhcmEgYSByZWFsaXphw6fDo28gZG8gcGVyY3Vyc28sIChpaWkpIHF1YWwgZm9pIGEgbWFpb3IgdmVsb2NpZGFkZSBlIChpdikKIyBxdWFsIGZvaSBhIG1lbm9yIHZlbG9jaWRhZGUuIE9zIHZhbG9yZXMgZGUgdmVsb2NpZGFkZSBkZXZlcsOjbyBzZXIgZXhwcmVzc29zCiMgZW0gY20vbWluLgoKIyBEZXNjcmnDp8OjbyBkYSBlbnRyYWRhCiMgQSBlbnRyYWRhIHNlcsOhIGNvbXBvc3RhIHBvciB1bWEgb3UgbWFpcyBsaW5oYXMgY29udGVuZG8gY2FkYSB1bWEgZGVsYXMgdW1hCiMgbWVkaWRhIGRlIHRlbXBvIGVtIHNlZ3VuZG9zLiBPIHZhbG9yIC0xIGluZGljYXLDoSBvIGZpbmFsIGRhIGVudHJhZGEuCiMgVmVqYSBvIGV4ZW1wbG86CgojIDMyMAojIDE1OAojIDQwMAojIDE3NQojIDIwNQojIC0xCgojIERlc2NyacOnw6NvIGRhIHNhw61kYQojIEEgc2HDrWRhIHNlcsOhIGNvbXBvc3RhIHBvciBzZWlzIGxpbmhhcyBxdWUgc2Vyw6NvIGRlc2NyaXRhcyBhIHNlZ3Vpci4gTm90ZSBxdWUKIyBvcyBkYWRvcyBzZXLDo28gcHJlY2VkaWRvcyBwb3Igc3RyaW5ncyBleHBsaWNhdGl2YXMsIGVzY3JpdGFzIHByb3Bvc2l0YWxtZW50ZQojIHNlbSBhY2VudG9zLiBPIHRlbXBvIG3DqWRpbyBlIG9zIHZhbG9yZXMgZGUgdmVsb2NpZGFkZSBkZXZlbSBzZXIgZm9ybWF0YWRvcwojIGNvbSB1bWEgY2FzYSBkZWNpbWFsLiBWb2PDqiBwb2RlIGNvbmZlcmlyIGRpY2FzIHNvYnJlIGVzdGUgdGlwbyBkZSBmb3JtYXRhw6fDo28KIyBubyBlbnVuY2lhZG8gZGEgVGFyZWZhIGRlIExhYm9yYXTDs3JpbyAwMiBlIG5hIHDDoWdpbmEgRm9ybWF0YcOnw6NvIGVtIFB5dGhvbi4KIyBSZWxlbWJyYW1vcyBxdWUgYXMgdmVsb2NpZGFkZXMsIGVtIGNtL21pbiwgZGV2ZW0gc2VyIGNhbGN1bGFkYXMKIyBjb25zaWRlcmFuZG8tc2UgbyBwZXJjdXJzbyBkZSAzMyBjbS4KIwojIENhcmFjb2lzIG5vIG5pdmVsIDA6IDIKIyBDYXJhY29pcyBubyBuaXZlbCAxOiAxCiMgQ2FyYWNvaXMgbm8gbml2ZWwgMjogMgojIFRlbXBvIG1lZGlvOiAyNTEuNiBzCiMgVmVsb2NpZGFkZSBtYXhpbWE6IDEyLjUgY20vbWluCiMgVmVsb2NpZGFkZSBtaW5pbWE6IDUuMCBjbS9taW4KCgp0ZW1wbyA9IGludChpbnB1dCgpKQpuaXZlbDAgPSAwCm5pdmVsMSA9IDAKbml2ZWwyID0gMApzb21hX3RlbXBvID0gMAp0ZW1wb19tZWRpbyA9IDAKcXVhbnRpZGFkZV9jYXJhY29sID0gMAp2ZWxvY2lkYWRlX21heGltYSA9IC0xCnZlbG9jaWRhZGVfbWluaW1hID0gLTEKCgpkZWYgY2xhc3NpZmljYV9uaXZlbCh0ZW1wb19jYXJhY29sKToKICAgIGlmIHRlbXBvX2NhcmFjb2wgPCAxODA6CiAgICAgICAgcmV0dXJuIDAKICAgIGlmIDE4MCA8PSB0ZW1wb19jYXJhY29sIDwgMjQwOgogICAgICAgIHJldHVybiAxCiAgICByZXR1cm4gMgoKCmRlZiBjYWxjdWxhX3ZlbG9jaWRhZGUodGVtcG9fY2FyYWNvbCk6CiAgICByZXR1cm4gMzMgLyAodGVtcG9fY2FyYWNvbCAvIDYwKQoKCndoaWxlIHRlbXBvICE9IC0xOgogICAgbml2ZWwgPSBjbGFzc2lmaWNhX25pdmVsKHRlbXBvKQogICAgdmVsb2NpZGFkZV9hdHVhbCA9IGNhbGN1bGFfdmVsb2NpZGFkZSh0ZW1wbykKICAgIGlmIHZlbG9jaWRhZGVfbWF4aW1hIDwgdmVsb2NpZGFkZV9hdHVhbCBvciB2ZWxvY2lkYWRlX21heGltYSA9PSAtMToKICAgICAgICB2ZWxvY2lkYWRlX21heGltYSA9IHZlbG9jaWRhZGVfYXR1YWwKICAgIGlmIHZlbG9jaWRhZGVfbWluaW1hID4gdmVsb2NpZGFkZV9hdHVhbCBvciB2ZWxvY2lkYWRlX21pbmltYSA9PSAtMToKICAgICAgICB2ZWxvY2lkYWRlX21pbmltYSA9IHZlbG9jaWRhZGVfYXR1YWwKCiAgICBzb21hX3RlbXBvICs9IHRlbXBvCiAgICBxdWFudGlkYWRlX2NhcmFjb2wgKz0gMQoKICAgIGlmIG5pdmVsID09IDA6CiAgICAgICAgbml2ZWwwICs9IDEKICAgIGVsaWYgbml2ZWwgPT0gMToKICAgICAgICBuaXZlbDEgKz0gMQogICAgZWxzZToKICAgICAgICBuaXZlbDIgKz0gMQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgdGVtcG8gPSBpbnQoaW5wdXQoKSkKCgo8fGZpbV9lbmR8Pg=="]
["c6c0b073ef9519ff20586b926ef6fd207de69875-4","c6c0b073ef9519ff20586b926ef6fd207de69875","PHxmaW1fcHJlZml4fD4KIyBTdWEgdGFyZWZhIHNlcsOhIGxlciBhcyBtZWRpZGFzIGRlIHRlbXBvIGRlIHVtIGdydXBvIGRlIGNhcmFjw7NpcyBlIGluZGljYXIgKGkpCiMgcXVhbnRvcyBhbmltYWlzIGVzdMOjbyBlbSBjYWRhIHVtIGRvcyBuw612ZWlzIGRlZmluaWRvcywgKGlpKSBxdWFsIGZvaSBvIHRlbXBvCiMgbcOpZGlvIHBhcmEgYSByZWFsaXphw6fDo28gZG8gcGVyY3Vyc28sIChpaWkpIHF1YWwgZm9pIGEgbWFpb3IgdmVsb2NpZGFkZSBlIChpdikKIyBxdWFsIGZvaSBhIG1lbm9yIHZlbG9jaWRhZGUuIE9zIHZhbG9yZXMgZGUgdmVsb2NpZGFkZSBkZXZlcsOjbyBzZXIgZXhwcmVzc29zCiMgZW0gY20vbWluLgoKIyBEZXNjcmnDp8OjbyBkYSBlbnRyYWRhCiMgQSBlbnRyYWRhIHNlcsOhIGNvbXBvc3RhIHBvciB1bWEgb3UgbWFpcyBsaW5oYXMgY29udGVuZG8gY2FkYSB1bWEgZGVsYXMgdW1hCiMgbWVkaWRhIGRlIHRlbXBvIGVtIHNlZ3VuZG9zLiBPIHZhbG9yIC0xIGluZGljYXLDoSBvIGZpbmFsIGRhIGVudHJhZGEuCiMgVmVqYSBvIGV4ZW1wbG86CgojIDMyMAojIDE1OAojIDQwMAojIDE3NQojIDIwNQojIC0xCgojIERlc2NyacOnw6NvIGRhIHNhw61kYQojIEEgc2HDrWRhIHNlcsOhIGNvbXBvc3RhIHBvciBzZWlzIGxpbmhhcyBxdWUgc2Vyw6NvIGRlc2NyaXRhcyBhIHNlZ3Vpci4gTm90ZSBxdWUKIyBvcyBkYWRvcyBzZXLDo28gcHJlY2VkaWRvcyBwb3Igc3RyaW5ncyBleHBsaWNhdGl2YXMsIGVzY3JpdGFzIHByb3Bvc2l0YWxtZW50ZQojIHNlbSBhY2VudG9zLiBPIHRlbXBvIG3DqWRpbyBlIG9zIHZhbG9yZXMgZGUgdmVsb2NpZGFkZSBkZXZlbSBzZXIgZm9ybWF0YWRvcwojIGNvbSB1bWEgY2FzYSBkZWNpbWFsLiBWb2PDqiBwb2RlIGNvbmZlcmlyIGRpY2FzIHNvYnJlIGVzdGUgdGlwbyBkZSBmb3JtYXRhw6fDo28KIyBubyBlbnVuY2lhZG8gZGEgVGFyZWZhIGRlIExhYm9yYXTDs3JpbyAwMiBlIG5hIHDDoWdpbmEgRm9ybWF0YcOnw6NvIGVtIFB5dGhvbi4KIyBSZWxlbWJyYW1vcyBxdWUgYXMgdmVsb2NpZGFkZXMsIGVtIGNtL21pbiwgZGV2ZW0gc2VyIGNhbGN1bGFkYXMKIyBjb25zaWRlcmFuZG8tc2UgbyBwZXJjdXJzbyBkZSAzMyBjbS4KIwojIENhcmFjb2lzIG5vIG5pdmVsIDA6IDIKIyBDYXJhY29pcyBubyBuaXZlbCAxOiAxCiMgQ2FyYWNvaXMgbm8gbml2ZWwgMjogMgojIFRlbXBvIG1lZGlvOiAyNTEuNiBzCiMgVmVsb2NpZGFkZSBtYXhpbWE6IDEyLjUgY20vbWluCiMgVmVsb2NpZGFkZSBtaW5pbWE6IDUuMCBjbS9taW4KCgp0ZW1wbyA9IGludChpbnB1dCgpKQpuaXZlbDAgPSAwCm5pdmVsMSA9IDAKbml2ZWwyID0gMApzb21hX3RlbXBvID0gMAp0ZW1wb19tZWRpbyA9IDAKcXVhbnRpZGFkZV9jYXJhY29sID0gMAp2ZWxvY2lkYWRlX21heGltYSA9IC0xCnZlbG9jaWRhZGVfbWluaW1hID0gLTEKCgpkZWYgY2xhc3NpZmljYV9uaXZlbCh0ZW1wb19jYXJhY29sKToKICAgIGlmIHRlbXBvX2NhcmFjb2wgPCAxODA6CiAgICAgICAgcmV0dXJuIDAKICAgIGlmIDE4MCA8PSB0ZW1wb19jYXJhY29sIDwgMjQwOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcmV0dXJuIDEKPHxmaW1fZW5kfD4="]
["42d114be3ada5268f01a758fd1498bec825028b0-1","42d114be3ada5268f01a758fd1498bec825028b0","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGd5bQpmcm9tIGd5bSBpbXBvcnQgc3BhY2VzCmZyb20gZ3ltLnV0aWxzIGltcG9ydCBzZWVkaW5nCmltcG9ydCBudW1weSBhcyBucAoKZnJvbSBvcyBpbXBvcnQgcGF0aAppbXBvcnQgdGVuc29yZmxvdyBhcyB0Zgpmcm9tIHRlbnNvcmZsb3cua2VyYXMubW9kZWxzIGltcG9ydCBsb2FkX21vZGVsCgpST09UID0gcGF0aC5kaXJuYW1lKHBhdGguYWJzcGF0aChneW0uX19maWxlX18pKSsiL2VudnMvZW52X2FwcHJveC8iCmZyb20gdGVuc29yZmxvdy5rZXJhcyBpbXBvcnQgYmFja2VuZCBhcyBLCgoKCmltcG9ydCB0ZW5zb3JmbG93IGFzIHRmCmZyb20gdGVuc29yZmxvdy5rZXJhcy5tb2RlbHMgaW1wb3J0IGxvYWRfbW9kZWwKZnJvbSB0ZW5zb3JmbG93LmtlcmFzIGltcG9ydCBNb2RlbAoKaW1wb3J0IENvUmVjClJPT1QgPSBwYXRoLmRpcm5hbWUocGF0aC5hYnNwYXRoKENvUmVjLl9fZmlsZV9fKSkrIi9lbnZzL2d5bV9hcHByb3gvIgpmcm9tIHRlbnNvcmZsb3cua2VyYXMgaW1wb3J0IGJhY2tlbmQgYXMgSwoKCmNsYXNzIFBlbmR1bHVtRW52KGd5bS5FbnYpOgogICAgbWV0YWRhdGEgPSB7CiAgICAgICAgJ3JlbmRlci5tb2RlcycgOiBbJ2h1bWFuJywgJ3JnYl9hcnJheSddLAogICAgICAgICd2aWRlby5mcmFtZXNfcGVyX3NlY29uZCcgOiAzMAogICAgfQoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLm1heF9zcGVlZD04CiAgICAgICAgc2VsZi5tYXhfdG9ycXVlPTIuCiAgICAgICAgc2VsZi5kdD0uMDUKICAgICAgICBzZWxmLm9yaWdpbmFsID0gbnAuYXJyYXkoWzAuMCwgMC4wXSkKICAgICAgICBzZWxmLnZpZXdlciA9IE5vbmUKCiAgICAgICAgaGlnaCA9IG5wLmFycmF5KFsxLiwgMS4sIHNlbGYubWF4X3NwZWVkXSkKICAgICAgICBzZWxmLmFjdGlvbl9zcGFjZSA9IHNwYWNlcy5Cb3gobG93PS1zZWxmLm1heF90b3JxdWUsIGhpZ2g9c2VsZi5tYXhfdG9ycXVlLCBzaGFwZT0oMSwpLCBkdHlwZT1ucC5mbG9hdDMyKQogICAgICAgIHNlbGYub2JzZXJ2YXRpb25fc3BhY2UgPSBzcGFjZXMuQm94KGxvdz0taGlnaCwgaGlnaD1oaWdoLCBkdHlwZT1ucC5mbG9hdDMyKQogICAgICAgIGluaXRfaGlnaCA9IG5wLmFycmF5KFtucC5waSwgMV0pCiAgICAgICAgc2VsZi5pbml0aWFsX3NwYWNlID0gc3BhY2VzLkJveChsb3c9LWluaXRfaGlnaCwgaGlnaD1pbml0X2hpZ2gsIGR0eXBlPW5wLmZsb2F0MzIpCgogICAgICAgICMgc2VsZi5zZWVkKCkKCiAgICBkZWYgc2VlZChzZWxmLCBzZWVkPU5vbmUpOgogICAgICAgIHNlbGYubnBfcmFuZG9tLCBzZWVkID0gc2VlZGluZy5ucF9yYW5kb20oc2VlZCkKICAgICAgICByZXR1cm4gW3NlZWRdCgogICAgZGVmIHN0ZXAoc2VsZix1KToKICAgICAgICB0aCwgdGhkb3QgPSBzZWxmLnN0YXRlICMgdGggOj0gdGhldGEKCiAgICAgICAgZyA9IDEwLgogICAgICAgIG0gPSAxLgogICAgICAgIGwgPSAxLgogICAgICAgIGR0ID0gc2VsZi5kdAoKICAgICAgICB1ID0gbnAuY2xpcCh1LCAtc2VsZi5tYXhfdG9ycXVlLCBzZWxmLm1heF90b3JxdWUpWzBdCiAgICAgICAgc2VsZi5sYXN0X3UgPSB1ICMgZm9yIHJlbmRlcmluZwogICAgICAgIGNvc3RzID0gKGFuZ2xlX25vcm1hbGl6ZSh0aCkqKjIgKyAuMSp0aGRvdCoqMiArIC4wMDEqKHUqKjIpKS8xMDAwCgogICAgICAgIG5ld3RoZG90ID0gdGhkb3QgKyAoLTMqZy8oMipsKSAqIG5wLnNpbih0aCArIG5wLnBpKSArIDMuLyhtKmwqKjIpKnUpICogZHQKICAgICAgICBuZXd0aCA9IHRoICsgbmV3dGhkb3QqZHQKICAgICAgICBuZXd0aGRvdCA9IG5wLmNsaXAobmV3dGhkb3QsIC1zZWxmLm1heF9zcGVlZCwgc2VsZi5tYXhfc3BlZWQpICNweWxpbnQ6IGRpc2FibGU9RTExMTEKCiAgICAgICAgc2VsZi5zdGF0ZSA9IG5wLmFycmF5KFtuZXd0aCwgbmV3dGhkb3RdKQoKICAgICAgICAjIGlmIG5vdCBzZWxmLmNoZWNrX3NhZmUoc2VsZi5zdGF0ZSk6CiAgICAgICAgIyAgICAgcmV0dXJuIHNlbGYuX2dldF9vYnMoKSwgLTEuMCwgVHJ1ZSwge30KICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X29icygpLCAtY29zdHMsIEZhbHNlLCB7fQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIHJlc2V0KHNlbGYsIHgwPU5vbmUpOgogICAgICAgIHNlbGYuc2VlZCgpCiAgICAgICAgaGlnaCA9IG5wLmFycmF5KFtucC5waSwgMV0pCiAgICAgICAgaWYgeDAgaXMgTm9uZToKPHxmaW1fZW5kfD4="]
["e9ae10eba53119910e54144d9fea5dc9fd0e6b68-1","e9ae10eba53119910e54144d9fea5dc9fd0e6b68","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCgoKCgoKCmRlZiBzaW5ndXAoKToKICAgIGEgPSByZXF1ZXN0cy5wb3N0KCJodHRwczovL2NoaWNoaWFwcC5pcjozMDAyL3VzZXJzL3NpZ251cCIsanNvbj17IlBob25lTnVtYmVyIjoiMDkxMTk1MTg4NjciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlyc3ROYW1lIjon2KfZhduM2YYnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGFzdE5hbWUiOiLYrNmF2KfZhCJ9LHZlcmlmeT1GYWxzZSkuY29udGVudAogICAgcHJpbnQoYSkKCgpkZWYgdmVyaWZ5KCk6CiAgICBhID0gcmVxdWVzdHMuZ2V0KCJodHRwOi8vbG9jYWxob3N0OjMwMDIvdXNlcnMvcGhvbmVudW1iZXIvdmVyaWZpY2F0aW9uLzA5MTE5NTE4ODY3LzM3MTciKS5jb250ZW50CiAgICBwcmludChhKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHZlcmlmeSgpCjx8ZmltX2VuZHw+"]
["e6578baaf3ced708c68b50e1b8bd4908895ef353-3","e6578baaf3ced708c68b50e1b8bd4908895ef353","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmZyb20gcGFyYW1ldGVyaXplZCBpbXBvcnQgcGFyYW1ldGVyaXplZApmcm9tIHB5cGxnci5wbGdyY29udi5hcGkgaW1wb3J0IHRvX3BvbHl0b25pYwoKY2xhc3MgVG9Qb2x5dG9uaWNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIEBwYXJhbWV0ZXJpemVkLmV4cGFuZChbCiAgICAgICAgWyIiLCAiIl0sCgogICAgICAgIFsiQiIsICLOkiJdLAogICAgICAgIFsiRyIsICLOkyJdLAogICAgICAgIFsiRCIsICLOlCJdLAogICAgICAgIFsiWiIsICLOliJdLAogICAgICAgIFsiVGgiLCAizpgiXSwKICAgICAgICBbIksiLCAizpoiXSwKICAgICAgICBbIkwiLCAizpsiXSwKICAgICAgICBbIk0iLCAizpwiXSwKICAgICAgICBbIk4iLCAizp0iXSwKICAgICAgICBbIlgiLCAizp4iXSwKICAgICAgICBbIlAiLCAizqAiXSwKICAgICAgICBbIlMiLCAizqMiXSwKICAgICAgICBbIlQiLCAizqQiXSwKICAgICAgICBbIlBoIiwgIs6mIl0sCiAgICAgICAgWyJLaCIsICLOpyJdLAogICAgICAgIFsiUHMiLCAizqgiXSwKCiAgICAgICAgWyJiIiwgIs6yIl0sCiAgICAgICAgWyJnIiwgIs6zIl0sCiAgICAgICAgWyJkIiwgIs60Il0sCiAgICAgICAgWyJ6IiwgIs62Il0sCiAgICAgICAgWyJ0aCIsICLOuCJdLAogICAgICAgIFsiayIsICLOuiJdLAogICAgICAgIFsibCIsICLOuyJdLAogICAgICAgIFsibSIsICLOvCJdLAogICAgICAgIFsibiIsICLOvSJdLAogICAgICAgIFsieCIsICLOviJdLAogICAgICAgIFsicCIsICLPgCJdLAogICAgICAgIFsicyIsICLPgiJdLAogICAgICAgIFsiYyIsICLPgyJdLAogICAgICAgIFsidCIsICLPhCJdLAogICAgICAgIFsicGgiLCAiz4YiXSwKICAgICAgICBbImtoIiwgIs+HIl0sCiAgICAgICAgWyJwcyIsICLPiCJdLAoKICAgICAgICBbIkEiLCAizpEiXSwKICAgICAgICBbIkF8IiwgIuG+vCJdLAogICAgICAgIFsiJ0EiLCAi4b67Il0sCiAgICAgICAgWyJgQSIsICLhvroiXSwKICAgICAgICBbIjxBIiwgIuG8iSJdLAogICAgICAgIFsiPEF8IiwgIuG+iSJdLAogICAgICAgIFsiPCdBIiwgIuG8jSJdLAogICAgICAgIFsiPCdBfCIsICLhvo0iXSwKICAgICAgICBbIjxgQSIsICLhvIsiXSwKICAgICAgICBbIjxgQXwiLCAi4b6LIl0sCiAgICAgICAgWyI8fkEiLCAi4byPIl0sCiAgICAgICAgWyI8fkF8IiwgIuG+jyJdLAogICAgICAgIFsiPkEiLCAi4byIIl0sCiAgICAgICAgWyI+QXwiLCAi4b6IIl0sCiAgICAgICAgWyI+J0EiLCAi4byMIl0sCiAgICAgICAgWyI+J0F8IiwgIuG+jCJdLAogICAgICAgIFsiPmBBIiwgIuG8iiJdLAogICAgICAgIFsiPmBBfCIsICLhvooiXSwKICAgICAgICBbIj5+QSIsICLhvI4iXSwKICAgICAgICBbIj5+QXwiLCAi4b6OIl0sCiAgICAgICAgWyJFIiwgIs6VIl0sCiAgICAgICAgWyInRSIsICLhv4kiXSwKICAgICAgICBbImBFIiwgIuG/iCJdLAogICAgICAgIFsiPEUiLCAi4byZIl0sCiAgICAgICAgWyI8J0UiLCAi4bydIl0sCiAgICAgICAgWyI8YEUiLCAi4bybIl0sCiAgICAgICAgWyI+RSIsICLhvJgiXSwKICAgICAgICBbIj4nRSIsICLhvJwiXSwKICAgICAgICBbIj5gRSIsICLhvJoiXSwKICAgICAgICBbIl5FIiwgIs6XIl0sCiAgICAgICAgWyJeRXwiLCAi4b+MIl0sCiAgICAgICAgWyInXkUiLCAi4b+LIl0sCiAgICAgICAgWyJgXkUiLCAi4b+KIl0sCiAgICAgICAgWyI8XkUiLCAi4bypIl0sCiAgICAgICAgWyI8XkV8IiwgIuG+mSJdLAogICAgICAgIFsiPCdeRSIsICLhvK0iXSwKICAgICAgICBbIjwnXkV8IiwgIuG+nSJdLAogICAgICAgIFsiPGBeRSIsICLhvKsiXSwKICAgICAgICBbIjxgXkV8IiwgIuG+myJdLAogICAgICAgIFsiPH5eRSIsICLhvK8iXSwKICAgICAgICBbIjx+XkV8IiwgIuG+nyJdLAogICAgICAgIFsiPl5FIiwgIuG8qCJdLAogICAgICAgIFsiPl5FfCIsICLhvpgiXSwKICAgICAgICBbIj4nXkUiLCAi4bysIl0sCiAgICAgICAgWyI+J15FfCIsICLhvpwiXSwKICAgICAgICBbIj5gXkUiLCAi4byqIl0sCiAgICAgICAgWyI+YF5FfCIsICLhvpoiXSwKICAgICAgICBbIj5+XkUiLCAi4byuIl0sCiAgICAgICAgWyI+fl5FfCIsICLhvp4iXSwKICAgICAgICBbIkkiLCAizpkiXSwKICAgICAgICBbIidJIiwgIuG/myJdLAogICAgICAgIFsiYEkiLCAi4b+aIl0sCiAgICAgICAgWyI8SSIsICLhvLkiXSwKICAgICAgICBbIjwnSSIsICLhvL0iXSwKICAgICAgICBbIjxgSSIsICLhvLsiXSwKICAgICAgICBbIjx+SSIsICLhvL8iXSwKICAgICAgICBbIj5JIiwgIuG8uCJdLAogICAgICAgIFsiPidJIiwgIuG8vCJdLAogICAgICAgIFsiPmBJIiwgIuG8uiJdLAogICAgICAgIFsiPn5JIiwgIuG8viJdLAogICAgICAgIFsiXCJJIiwgIs6qIl0sCiAgICAgICAgWyJPIiwgIs6fIl0sCiAgICAgICAgWyInTyIsICLhv7kiXSwKICAgICAgICBbImBPIiwgIuG/uCJdLAogICAgICAgIFsiPE8iLCAi4b2JIl0sCiAgICAgICAgWyI8J08iLCAi4b2NIl0sCiAgICAgICAgWyI8YE8iLCAi4b2LIl0sCiAgICAgICAgWyI+TyIsICLhvYgiXSwKICAgICAgICBbIj4nTyIsICLhvYwiXSwKICAgICAgICBbIj5gTyIsICLhvYoiXSwKICAgICAgICBbIlIiLCAizqEiXSwKICAgICAgICBbIjxSIiwgIuG/rCJdLAogICAgICAgIFsiVSIsICLOpSJdLAogICAgICAgIFsiJ1UiLCAi4b+rIl0sCiAgICAgICAgWyJgVSIsICLhv6oiXSwKICAgICAgICBbIjxVIiwgIuG9mSJdLAogICAgICAgIFsiPCdVIiwgIuG9nSJdLAogICAgICAgIFsiPGBVIiwgIuG9myJdLAogICAgICAgIFsiPH5VIiwgIuG9nyJdLAogICAgICAgIFsiXCJVIiwgIs6rIl0sCiAgICAgICAgWyJZIiwgIs6lIl0sCiAgICAgICAgWyInWSIsICLhv6siXSwKICAgICAgICBbImBZIiwgIuG/qiJdLAogICAgICAgIFsiPFkiLCAi4b2ZIl0sCiAgICAgICAgWyI8J1kiLCAi4b2dIl0sCiAgICAgICAgWyI8YFkiLCAi4b2bIl0sCiAgICAgICAgWyI8flkiLCAi4b2fIl0sCiAgICAgICAgWyJcIlkiLCAizqsiXSwKICAgICAgICBbIl5PIiwgIs6pIl0sCiAgICAgICAgWyJeT3wiLCAi4b+8Il0sCiAgICAgICAgWyInXk8iLCAi4b+7Il0sCiAgICAgICAgWyJgXk8iLCAi4b+6Il0sCiAgICAgICAgWyI8Xk8iLCAi4b2pIl0sCiAgICAgICAgWyI8Xk98IiwgIuG+qSJdLAogICAgICAgIFsiPCdeTyIsICLhva0iXSwKICAgICAgICBbIjwnXk98IiwgIuG+rSJdLAogICAgICAgIFsiPGBeTyIsICLhvasiXSwKICAgICAgICBbIjxgXk98IiwgIuG+qyJdLAogICAgICAgIFsiPH5eTyIsICLhva8iXSwKICAgICAgICBbIjx+Xk98IiwgIuG+ryJdLAogICAgICAgIFsiPl5PIiwgIuG9qCJdLAo8fGZpbV9ob2xlfD4KICAgICAgICBbIj5gXk98IiwgIuG+qiJdLAogICAgICAgIFsiPn5eTyIsICLhva4iXSwKICAgICAgICBbIj5+Xk98IiwgIuG+riJdLAoKICAgICAgICBbImEiLCAizrEiXSwKICAgICAgICBbImF8IiwgIuG+syJdLAogICAgICAgIFsiJ2EiLCAi4b2xIl0sCiAgICAgICAgWyInYXwiLCAi4b60Il0sCiAgICAgICAgWyJgYSIsICLhvbAiXSwKICAgICAgICBbImBhfCIsICLhvrIiXSwKICAgICAgICBbIn5hIiwgIuG+tiJdLAogICAgICAgIFsifmF8IiwgIuG+tyJdLAogICAgICAgIFsiPGEiLCAi4byBIl0sCiAgICAgICAgWyI8YXwiLCAi4b6BIl0sCiAgICAgICAgWyI8J2EiLCAi4byFIl0sCiAgICAgICAgWyI8J2F8IiwgIuG+hSJdLAogICAgICAgIFsiPGBhIiwgIuG8gyJdLAogICAgICAgIFsiPGBhfCIsICLhvoMiXSwKICAgICAgICBbIjx+YSIsICLhvIciXSwKICAgICAgICBbIjx+YXwiLCAi4b6HIl0sCiAgICAgICAgWyI+YSIsICLhvIAiXSwKICAgICAgICBbIj5hfCIsICLhvoAiXSwKICAgICAgICBbIj4nYSIsICLhvIQiXSwKICAgICAgICBbIj4nYXwiLCAi4b6EIl0sCiAgICAgICAgWyI+YGEiLCAi4byCIl0sCiAgICAgICAgWyI+YGF8IiwgIuG+giJdLAogICAgICAgIFsiPn5hIiwgIuG8hiJdLAogICAgICAgIFsiPn5hfCIsICLhvoYiXSwKICAgICAgICBbImUiLCAizrUiXSwKICAgICAgICBbIidlIiwgIuG9syJdLAogICAgICAgIFsiYGUiLCAi4b2yIl0sCiAgICAgICAgWyI8ZSIsICLhvJEiXSwKICAgICAgICBbIjwnZSIsICLhvJUiXSwKICAgICAgICBbIjxgZSIsICLhvJMiXSwKICAgICAgICBbIj5lIiwgIuG8kCJdLAogICAgICAgIFsiPidlIiwgIuG8lCJdLAogICAgICAgIFsiPmBlIiwgIuG8kiJdLAogICAgICAgIFsiXmUiLCAizrciXSwKICAgICAgICBbIl5lfCIsICLhv4MiXSwKICAgICAgICBbIideZSIsICLhvbUiXSwKICAgICAgICBbIideZXwiLCAi4b+EIl0sCiAgICAgICAgWyJgXmUiLCAi4b20Il0sCiAgICAgICAgWyJgXmV8IiwgIuG/giJdLAogICAgICAgIFsifl5lIiwgIuG/hiJdLAogICAgICAgIFsifl5lfCIsICLhv4ciXSwKICAgICAgICBbIjxeZSIsICLhvKEiXSwKICAgICAgICBbIjxeZXwiLCAi4b6RIl0sCiAgICAgICAgWyI8J15lIiwgIuG8pSJdLAogICAgICAgIFsiPCdeZXwiLCAi4b6VIl0sCiAgICAgICAgWyI8YF5lIiwgIuG8oyJdLAogICAgICAgIFsiPGBeZXwiLCAi4b6TIl0sCiAgICAgICAgWyI8fl5lIiwgIuG8pyJdLAogICAgICAgIFsiPH5eZXwiLCAi4b6XIl0sCiAgICAgICAgWyI+XmUiLCAi4bygIl0sCiAgICAgICAgWyI+XmV8IiwgIuG+kCJdLAogICAgICAgIFsiPideZSIsICLhvKQiXSwKICAgICAgICBbIj4nXmV8IiwgIuG+lCJdLAogICAgICAgIFsiPmBeZSIsICLhvKIiXSwKICAgICAgICBbIj5gXmV8IiwgIuG+kiJdLAogICAgICAgIFsiPn5eZSIsICLhvKYiXSwKICAgICAgICBbIj5+XmV8IiwgIuG+liJdLAogICAgICAgIFsiaSIsICLOuSJdLAogICAgICAgIFsiJ2kiLCAi4b23Il0sCiAgICAgICAgWyJgaSIsICLhvbYiXSwKICAgICAgICBbIn5pIiwgIuG/liJdLAogICAgICAgIFsiPGkiLCAi4byxIl0sCiAgICAgICAgWyI8J2kiLCAi4by1Il0sCiAgICAgICAgWyI8YGkiLCAi4byzIl0sCiAgICAgICAgWyI8fmkiLCAi4by3Il0sCiAgICAgICAgWyI+aSIsICLhvLAiXSwKICAgICAgICBbIj4naSIsICLhvLQiXSwKICAgICAgICBbIj5gaSIsICLhvLIiXSwKICAgICAgICBbIj5+aSIsICLhvLYiXSwKICAgICAgICBbIlwiaSIsICLPiiJdLAogICAgICAgIFsiXCInaSIsICLhv5MiXSwKICAgICAgICBbIlwiYGkiLCAi4b+SIl0sCiAgICAgICAgWyJcIn5pIiwgIuG/lyJdLAogICAgICAgIFsibyIsICLOvyJdLAogICAgICAgIFsiJ28iLCAi4b25Il0sCiAgICAgICAgWyJgbyIsICLhvbgiXSwKICAgICAgICBbIjxvIiwgIuG9gSJdLAogICAgICAgIFsiPCdvIiwgIuG9hSJdLAogICAgICAgIFsiPGBvIiwgIuG9gyJdLAogICAgICAgIFsiPm8iLCAi4b2AIl0sCiAgICAgICAgWyI+J28iLCAi4b2EIl0sCiAgICAgICAgWyI+YG8iLCAi4b2CIl0sCiAgICAgICAgWyJyIiwgIs+BIl0sCiAgICAgICAgWyI8ciIsICLhv6UiXSwKICAgICAgICBbIj5yIiwgIuG/pCJdLAogICAgICAgIFsidSIsICLPhSJdLAogICAgICAgIFsiJ3UiLCAi4b27Il0sCiAgICAgICAgWyJgdSIsICLhvboiXSwKICAgICAgICBbIn51IiwgIuG/piJdLAogICAgICAgIFsiPHUiLCAi4b2RIl0sCiAgICAgICAgWyI8J3UiLCAi4b2VIl0sCiAgICAgICAgWyI8YHUiLCAi4b2TIl0sCiAgICAgICAgWyI8fnUiLCAi4b2XIl0sCiAgICAgICAgWyI+dSIsICLhvZAiXSwKICAgICAgICBbIj4ndSIsICLhvZQiXSwKICAgICAgICBbIj5gdSIsICLhvZIiXSwKICAgICAgICBbIj5+dSIsICLhvZYiXSwKICAgICAgICBbIlwidSIsICLPiyJdLAogICAgICAgIFsiXCIndSIsICLhv6MiXSwKICAgICAgICBbIlwiYHUiLCAi4b+iIl0sCiAgICAgICAgWyJcIn51IiwgIuG/pyJdLAogICAgICAgIFsieSIsICLPhSJdLAogICAgICAgIFsiJ3kiLCAi4b27Il0sCiAgICAgICAgWyJgeSIsICLhvboiXSwKICAgICAgICBbIn55IiwgIuG/piJdLAogICAgICAgIFsiPHkiLCAi4b2RIl0sCiAgICAgICAgWyI8J3kiLCAi4b2VIl0sCiAgICAgICAgWyI8YHkiLCAi4b2TIl0sCiAgICAgICAgWyI8fnkiLCAi4b2XIl0sCiAgICAgICAgWyI+eSIsICLhvZAiXSwKICAgICAgICBbIj4neSIsICLhvZQiXSwKICAgICAgICBbIj5geSIsICLhvZIiXSwKICAgICAgICBbIj5+eSIsICLhvZYiXSwKICAgICAgICBbIlwieSIsICLPiyJdLAogICAgICAgIFsiXCIneSIsICLhv6MiXSwKICAgICAgICBbIlwiYHkiLCAi4b+iIl0sCiAgICAgICAgWyJcIn55IiwgIuG/pyJdLAogICAgICAgIFsiXm8iLCAiz4kiXSwKICAgICAgICBbIl5vfCIsICLhv7MiXSwKICAgICAgICBbIidebyIsICLhvb0iXSwKICAgICAgICBbIideb3wiLCAi4b+0Il0sCiAgICAgICAgWyJgXm8iLCAi4b28Il0sCiAgICAgICAgWyJgXm98IiwgIuG/siJdLAogICAgICAgIFsifl5vIiwgIuG/tiJdLAogICAgICAgIFsifl5vfCIsICLhv7ciXSwKICAgICAgICBbIjxebyIsICLhvaEiXSwKICAgICAgICBbIjxeb3wiLCAi4b6hIl0sCiAgICAgICAgWyI8J15vIiwgIuG9pSJdLAogICAgICAgIFsiPCdeb3wiLCAi4b6lIl0sCiAgICAgICAgWyI8YF5vIiwgIuG9oyJdLAogICAgICAgIFsiPGBeb3wiLCAi4b6jIl0sCiAgICAgICAgWyI8fl5vIiwgIuG9pyJdLAogICAgICAgIFsiPH5eb3wiLCAi4b6nIl0sCiAgICAgICAgWyI+Xm8iLCAi4b2gIl0sCiAgICAgICAgWyI+Xm98IiwgIuG+oCJdLAogICAgICAgIFsiPidebyIsICLhvaQiXSwKICAgICAgICBbIj4nXm98IiwgIuG+pCJdLAogICAgICAgIFsiPmBebyIsICLhvaIiXSwKICAgICAgICBbIj5gXm98IiwgIuG+oiJdLAogICAgICAgIFsiPn5ebyIsICLhvaYiXSwKICAgICAgICBbIj5+Xm98IiwgIuG+piJdLAoKICAgICAgICBbInNhIiwgIs+DzrEiXSwKICAgICAgICBbInNzYSIsICLPg8+DzrEiXSwKICAgICAgICBbIm5nIiwgIs6zzrMiXSwKICAgICAgICBbIm5rIiwgIs6zzroiXSwKICAgICAgICBbIm54IiwgIs6zzr4iXSwKICAgICAgICBbIm5raCIsICLOs8+HIl0sCiAgICAgICAgWyJORyIsICLOk86TIl0sCiAgICAgICAgWyJOSyIsICLOk86aIl0sCiAgICAgICAgWyJOWCIsICLOk86eIl0sCiAgICAgICAgWyJOS2giLCAizpPOpyJdLAoKICAgICAgICBbIiwiLCAiLCJdLAogICAgICAgIFsiOyIsICLOhyJdLAogICAgICAgIFsiLiIsICIuIl0sCiAgICAgICAgWyI/IiwgIs2+Il0sCiAgICAgICAgWyJkJyciLCAizrQnIl0sCiAgICAgICAgWyI8PCIsICLCqyJdLAogICAgICAgIFsiPj4iLCAiwrsiXSwKICAgICAgICBbIi0tIiwgIuKAlCJdLAoKICAgICAgICBbIiAiLCAiICJdLAogICAgICAgIFsiXHQiLCAiXHQiXSwKICAgICAgICBbIlxuIiwgIlxuIl0sCiAgICAgICAgWyJcclxuIiwgIlxyXG4iXSwKCiAgICAgICAgW3IiLSIsICItIl0sCiAgICAgICAgW3IiKCIsICIoIl0sCiAgICAgICAgW3IiKSIsICIpIl0sCiAgICAgICAgW3IiWyIsICJbIl0sCiAgICAgICAgW3IiXSIsICJdIl0sCiAgICAgICAgW3IiPCIsICI8Il0sCiAgICAgICAgW3IiPiIsICI+Il0sCiAgICBdKQogICAgZGVmIHRlc3RfdG9fcG9seXRvbmljKHNlbGYsIHRleHQsIGV4cGVjdGVkKToKICAgICAgICBhY3R1YWwgPSB0b19wb2x5dG9uaWModGV4dCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdW5pdHRlc3QubWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgWyI+Xk98IiwgIuG+qCJdLAogICAgICAgIFsiPideTyIsICLhvawiXSwKICAgICAgICBbIj4nXk98IiwgIuG+rCJdLAogICAgICAgIFsiPmBeTyIsICLhvaoiXSwKPHxmaW1fZW5kfD4="]
["0564d1238b695961266b6ffb3b0265adc33a2e0f-2","0564d1238b695961266b6ffb3b0265adc33a2e0f","PHxmaW1fcHJlZml4fD4KIiIiCmRtYXJjYXAvYXV0aF9yZXN1bHRzLnB5IC0gRE1BUkMgYWdncmVnYXRlIHJlcG9ydCBBdXRoUmVzdWx0c1R5cGUgCnJlcHJlc2VudGF0aW9uLiBSZWYuIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NDg5I2FwcGVuZGl4LUMKIiIiCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApjbGFzcyBBdXRoZW50aWNhdGlvbihvYmplY3QpOgogICAgIiIiCiAgICBCYXNlIGNsYXNzIGZvciB2ZXJpZmljYXRpb24gcmVzdWx0cwogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgZG9tYWluPU5vbmUsIHJlc3VsdD1Ob25lKToKICAgICAgICAjOiBEb21haW4gbmFtZSByZXByZXNlbnRlZCBpbiB0aGlzIHZlcmlmaWNhdGlvbgogICAgICAgIHNlbGYuZG9tYWluID0gZG9tYWluCiAgICAgICAgIzogVmVyaWZpY2F0aW9uIHJlc3VsdAogICAgICAgIHNlbGYucmVzdWx0ID0gcmVzdWx0CgpjbGFzcyBEa2ltQXV0aGVudGljYXRpb24oQXV0aGVudGljYXRpb24pOgogICAgIiIiCiAgICBSZXByZXNlbnRhdGlvbiBvZiBEa2ltQXV0aFJlc3VsdFR5cGUKICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRvbWFpbj1Ob25lLCByZXN1bHQ9Tm9uZSk6CiAgICAgICAgQXV0aGVudGljYXRpb24uX19pbml0X18oc2VsZiwgZG9tYWluPWRvbWFpbiwgcmVzdWx0PXJlc3VsdCkKICAgICAgICAjOiBES0lNIHNlbGVjdG9yLCBlLmcuIGsxLCB1c2VkIGluIGF1dGhlbnRpY2F0aW9uCiAgICAgICAgc2VsZi5zZWxlY3RvciA9IE5vbmUKICAgICAgICAjOiBBbnkgZnJpZW5kbHksIGh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UuCiAgICAgICAgc2VsZi5odW1hbl9yZXN1bHQgPSBOb25lCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmNsYXNzIFNwZkF1dGhlbnRpY2F0aW9uKEF1dGhlbnRpY2F0aW9uKToKICAgICIiIgogICAgUmVwcmVzZW50YXRpb24gb2YgU3BmQXV0aFJlc3VsdFR5cGUKICAgICIiIgo8fGZpbV9lbmR8Pg=="]
["0593da69b7dcfdd4f7d650ced97bc83831a0358a-1","0593da69b7dcfdd4f7d650ced97bc83831a0358a","PHxmaW1fcHJlZml4fD4KCgojIOmao+aOpeihjOWIl+OBruWgtOWQiAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmNsYXNzIERpamtzdHJhOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGdyYXBoLCBzPTApOgogICAgICAgICIiImdyYXBo44Gr44Gv6Zqj5o6l6KGM5YiX44KS5YmN5o+Q77yI44Kz44K544OI77yJCgo8fGZpbV9lbmR8Pg=="]
["e95f32737ae4c8b837a9a157d043a57bbc879019-1","e95f32737ae4c8b837a9a157d043a57bbc879019","PHxmaW1fcHJlZml4fD4KZnJvbSBvcGVyYXRvciBpbXBvcnQgYWRkLCBtdWwKZnJvbSBtYXRoIGltcG9ydCBzcXJ0CmZyb20gc3NzLm1vZGVscy50cmFkZSBpbXBvcnQgVHJhZGUKZnJvbSBzc3MubW9kZWxzLnN0b2NrIGltcG9ydCBTdG9jawpmcm9tIHNzcy51dGlscy50aW1lX3V0aWxzIGltcG9ydCBnZXRfZGF0ZV90aW1lX3NpbmNlLCB0aW1lX25vdwoKCmNsYXNzIFN0b2NrTWFuYWdlcihvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYuc3RvY2tzID0gW10KICAgICAgICBzZWxmLnRyYWRlcyA9IFtdCgogICAgZGVmIGFkZF9zdG9jayhzZWxmLCBzeW1ib2wsIHN0b2NrX3R5cGUsIGxhc3RfZGl2aWRlbmQ9Tm9uZSwgZml4ZWRfZGl2aWRlbmQ9Tm9uZSwgcGFyX3ZhbHVlPU5vbmUsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgdGlja2VyX3ByaWNlPU5vbmUpOgo8fGZpbV9lbmR8Pg=="]
["75df77c87bd4d1e5ec9ba9856e7838979dc937ff-3","75df77c87bd4d1e5ec9ba9856e7838979dc937ff","PHxmaW1fcHJlZml4fD4KQUREX1NUT1JFID0gIvCfj6og0JLRi9Cx0YDQsNGC0Ywg0LzQsNCz0LDQt9C40L0iCk1ZX1NUT1JFID0gIvCfl4Qg0JzQvtC5INC80LDQs9Cw0LfQuNC9Igo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Ck1ZX1NLVVMgPSAi8J+bjSDQnNC+0Lgg0YLQvtCy0LDRgNGLIgpTRUFSQ0hfU0tVID0gIvCflI4g0J3QsNC50YLQuCDRgtC+0LLQsNGAIgoKQ0FOQ0VMID0gIuKdjCDQntGC0LzQtdC90LAiCjx8ZmltX2VuZHw+"]
["af29d1f1fbc825e98e8eab38b1221915ad87c744-1","af29d1f1fbc825e98e8eab38b1221915ad87c744","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyAgPSAiR3JlYXQgVG9tb3Jyb3coZ3I4Mm1vcm96ckBnbWFpbC5jb20pIgpfX2xpY2Vuc2VfXyA9ICJNSVQiCl9fdmVyc2lvbl9fID0gIjAuMS4xNCIKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAubXByb2MgICAgIGltcG9ydCAgKgo8fGZpbV9lbmR8Pg=="]
["b1daf6721fa50a49f21ee88c9f81c0caec889c02-3","b1daf6721fa50a49f21ee88c9f81c0caec889c02","PHxmaW1fcHJlZml4fD4KIyBUbyBzcGVjaWZpY2FsbHkgaWdub3JlIENvbnZlcmdlbmNlV2FybmluZ3M6CmltcG9ydCB3YXJuaW5ncwoKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKZnJvbSBqc29uIGltcG9ydCBsb2FkCmZyb20gb3MgaW1wb3J0IHBhdGgKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gdHNtb290aGllIGltcG9ydCBFeHBvbmVudGlhbFNtb290aGVyLCBDb252b2x1dGlvblNtb290aGVyCmltcG9ydCBkYXRldGltZQppbXBvcnQgdGhyZWFkaW5nCmZyb20gdGltZSBpbXBvcnQgc2xlZXAKZnJvbSBza2xlYXJuLmNsdXN0ZXIgaW1wb3J0IEtNZWFucwoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IGxvZ2dpbmcuY29uZmlnCmltcG9ydCBsb2dnaW5nLmhhbmRsZXJzCgpsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignc2VydmljZScpCmxvZ2NsZWFuID0gbG9nZ2luZy5nZXRMb2dnZXIoImNsZWFuaW5nIikKCgoKY2xhc3MgRGF0YUNsZWFuaW5nOgoJaW5kZXhPZkRldmljZU5hbWUgPSAwCglpbmRleE9mU2Vuc29yTmFtZSA9IDEKCWluZGV4T2ZUZWxlbWV0cnkgPSAyCglpbmRleE9mVGltZVNlcmllcyA9IDMKCWluZGV4T2ZTZXJpZXMgPSA0CglvYnZpb3VzT3V0bGllciA9IDk5OTk5OQoJY2xlYW5pbmdDb25maWcgPSBOb25lCgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCSMgc3RhcnQgdGhyZWFkCgkJdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuZ2V0X2NsZWFuaW5nX2NvbmZpZykKCQl0LnN0YXJ0KCkKCglkZWYgY3JlYXRlRGV2aWNlKHNlbGYsIGRldmljZUxpc3QsIGRhdGEpOgkKCQl0cnk6CgkJCW5ld0RldmljZVF1ZXVlID0gW10KCQkJIyBhZGQgZWFjaCBzZW5zb3IgaW4gaW5jb21pbmcgZGV2aWNlIHRvIHN1YiBhcnJheSBpbiBsaXN0X29mX2RldmljZXMgKHRoYXQgZXhpc3RzIGluIHRiX2dhdGV3YXlfc2VydmljZS5weSkKCQkJZm9yIHRlbGVtZXRyeSBpbiBkYXRhWyJ0ZWxlbWV0cnkiXVsidmFsdWVzIl06CgkJCQluZXdEZXZpY2VRdWV1ZS5hcHBlbmQoc2VsZi5nZXRUZWxlbWV0cnlEYXRhKGRhdGEsIHRlbGVtZXRyeSkpCgkJCXJldHVybiBuZXdEZXZpY2VRdWV1ZQoJCWV4Y2VwdCBFeGNlcHRpb24gYXMgZToKCQkJbG9nLmV4Y2VwdGlvbihlKQoJCQoJZGVmIGRvZXNEZXZpY2VFeGlzdChzZWxmLCBkZXZpY2VMaXN0LCBkYXRhKToKCQl0cnk6CgkJCWluZGV4ID0gLTEKCQkJIyBpZiBkZXZpY2UgZXhpc3RzIGluIGxpc3Rfb2ZfZGV2aWNlcyAoaW4gdGJfZ2F0ZXdheV9zZXJ2aWNlLnB5KSByZXR1cm4gdGhhdCBpbmRleCwgb3RoZXJ3aXNlIHJldHVybiAtMQoJCQlmb3IgaSBpbiByYW5nZShsZW4oZGV2aWNlTGlzdCkpOgoJCQkJaWYgZGF0YVsiZGV2aWNlTmFtZSJdID09IGRldmljZUxpc3RbaV1bMF1bc2VsZi5pbmRleE9mRGV2aWNlTmFtZV06CgkJCQkJaW5kZXggPSBpCgkJCXJldHVybiBpbmRleAoJCWV4Y2VwdCBFeGNlcHRpb24gYXMgZToKCQkJbG9nLmV4Y2VwdGlvbihlKQoKCWRlZiBnZXRUZWxlbWV0cnlEYXRhKHNlbGYsIGRhdGEsIHRlbGVtZXRyeSk6CgkJdHJ5OgoJCQkjIGNyZWF0ZSBzdWIgYXJyYXlzCgkJCWRldmljZUFycmF5ID0gW10KCQkJdGVsZW1ldHJ5QXJyYXkgPSBbXQoJCQl0aW1lc2VyaWVzQXJyYXkgPSBbXQoKCQkJIyBhZGQgbmFtZSBvZiBkZXZpY2UgYW5kIG5hbWUgc2Vuc29yCgkJCWRldmljZUFycmF5LmFwcGVuZChkYXRhWyJkZXZpY2VOYW1lIl0pCgkJCWRldmljZUFycmF5LmFwcGVuZCh0ZWxlbWV0cnkpCgoJCQkjIGFkZCBkYXRhIHBvaW50IGFuZCB0aGUgdGltZXN0YW1wCgkJCXRlbGVtZXRyeUFycmF5LmFwcGVuZChzZWxmLmNoZWNrX3R5cGUoZGF0YVsidGVsZW1ldHJ5Il1bInZhbHVlcyJdW3RlbGVtZXRyeV0pKQkJCSMgcmV0dXJuIG9idmlvdXMgZGV2aWF0aW9uIGlmIGRhdGEgcG9pbnQgaXMgTmFOCgkJCXRpbWVzZXJpZXNBcnJheS5hcHBlbmQoZGF0YVsidGVsZW1ldHJ5Il1bInRzIl0pCgoJCQkjIGFkZCBhIGRpY3Rpb25hcnkgaW4gd2hpY2ggY2xlYW5pbmcgcmVsYXRlZCBkYXRhIGlzIHN0b3JlZAoJCQlzZXJpZXMgPSBkZWZhdWx0ZGljdChwYXJ0aWFsKG5wLm5kYXJyYXksIHNoYXBlPSgxLCAxKSwgZHR5cGU9J2Zsb2F0MzInKSkKCgkJCWRldmljZUFycmF5LmFwcGVuZCh0ZWxlbWV0cnlBcnJheSkKCQkJZGV2aWNlQXJyYXkuYXBwZW5kKHRpbWVzZXJpZXNBcnJheSkKCQkJZGV2aWNlQXJyYXkuYXBwZW5kKHNlcmllcykKCgkJCXJldHVybiBkZXZpY2VBcnJheQoJCWV4Y2VwdCBFeGNlcHRpb24gYXMgZToKCQkJbG9nLmV4Y2VwdGlvbihlKQoKCWRlZiBhZGRUZWxlbWV0cnkoc2VsZiwgZGV2aWNlTGlzdCwgZGF0YSwgZGV2aWNlSW5kZXgpOgoJCXRyeToKCQkJaSA9IDAKCgkJCWZvciB0ZWxlbWV0cnkgaW4gZGF0YVsidGVsZW1ldHJ5Il1bInZhbHVlcyJdOgoJCQkJc2VyaWVzID0gZGV2aWNlTGlzdFtkZXZpY2VJbmRleF1baV1bc2VsZi5pbmRleE9mU2VyaWVzXQoKCQkJCSMgQ29udHJvbCBkYXRhIHR5cGUgZm9yIG9ic2VydmVkIHZhbHVlCgkJCQlkYXRhX3BvaW50ID0gc2VsZi5jaGVja190eXBlKGRhdGFbInRlbGVtZXRyeSJdWyJ2YWx1ZXMiXVt0ZWxlbWV0cnldKQoJCQkJIyBnZXQgbWV0aG9kIGFuZCBvdGhlciBwYXJhbXMgZnJvbSBjbGVhbmluZyBjb25maWcKCQkJCWNsZWFuaW5nTWV0aG9kLCB3aW5kb3dfbGVuLCBzdGQgPSBzZWxmLmdldF9jbGVhbmluZ19tZXRob2QoZGV2aWNlTGlzdCwgZGV2aWNlSW5kZXgsIHRlbGVtZXRyeSkKCQkJCWRlYnVnX2RhdGEgPSBbMF0KCgkJCQkjIGNvbnRyb2xzIHNpemUgb2YgbGlzdAoJCQkJd2hpbGUgKGxlbihkZXZpY2VMaXN0W2RldmljZUluZGV4XVtpXVtzZWxmLmluZGV4T2ZUZWxlbWV0cnldKSA+IHdpbmRvd19sZW4pOgoJCQkJCXNlbGYucmVtb3ZlRmlyc3RFbGVtZW50cyhkZXZpY2VMaXN0LCBkZXZpY2VJbmRleCwgdGVsZW1ldHJ5KQoKCQkJCSMgY2xlYW5pbmcgYmVnaW5zIHdoZW4gbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiBzcGVjaWZpZWQgd2luZG93c19sZW4KCQkJCWlmIChsZW4oZGV2aWNlTGlzdFtkZXZpY2VJbmRleF1baV1bc2VsZi5pbmRleE9mVGVsZW1ldHJ5XSkgPj0gd2luZG93X2xlbik6CgkJCQkJaWYoY2xlYW5pbmdNZXRob2QgPT0gImV4cG9uZW50aWFsU21vb3RoZXIiKToKCQkJCQkJZGF0YV9wb2ludCwgZGVidWdfZGF0YSA9IHNlbGYuX2V4cG9uZW50aWFsU21vb3RoZXIoZGF0YV9wb2ludCwgc2VyaWVzLCB3aW5kb3dfbGVuLCBzdGQpCgkJCQkJZWxpZihjbGVhbmluZ01ldGhvZCA9PSAiY29udm9sdXRpb25TbW9vdGhlciIpOgoJCQkJCQlkYXRhX3BvaW50LCBkZWJ1Z19kYXRhID0gc2VsZi5fY29udm9sdXRpb25TbW9vdGhlcihkYXRhX3BvaW50LCBzZXJpZXMsIHdpbmRvd19sZW4sIHN0ZCkKCQkJCQllbGlmIChjbGVhbmluZ01ldGhvZCA9PSAia21lYW5zIik6CgkJCQkJCWRhdGFfcG9pbnQsIGRlYnVnX2RhdGEgPSBzZWxmLl9rbWVhbnMoZGF0YV9wb2ludCwgc2VyaWVzLCB3aW5kb3dfbGVuLCBzdGQpCgoJCQkJCWlmIGRlYnVnX2RhdGFbMF0gPT0gMToKCQkJCQkJdGltZV9vZl9jbGVhbmluZyA9IGRhdGV0aW1lLmRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAoaW50KGRhdGFbInRlbGVtZXRyeSJdWyJ0cyJdKSAvIDEwMDApLnN0cmZ0aW1lKCclWS0lbS0lZCAlSDolTTolUycpCgkJCQkJCXN0cmVycm9yID0gIiMgLS0gT3V0bGllciBkZXRlY3RlZCAtICIgKyBzdHIodGltZV9vZl9jbGVhbmluZykrICIgIiArIHN0cihkZXZpY2VMaXN0W2RldmljZUluZGV4XVtpXVtzZWxmLmluZGV4T2ZEZXZpY2VOYW1lXSkrICIgIiArIHN0cihkZXZpY2VMaXN0W2RldmljZUluZGV4XVtpXVtzZWxmLmluZGV4T2ZTZW5zb3JOYW1lXSkgK1wKCQkJCQkJCQkgICAiXHRcdE9ic2VydmVkIHZhbHVlLSAiICsgc3RyKGRlYnVnX2RhdGFbMV0pICsgIiBMb3dlciBib3VuZGFyeS0gIiArIHN0cihkZWJ1Z19kYXRhWzJdKSArICIgVXBwZXIgYm91bmRhcnktICIgKyBzdHIoZGVidWdfZGF0YVszXSkgKyAiIENvcnJlY3RlZCB2YWx1ZSB0by0gIiArIHN0cihkZWJ1Z19kYXRhWzRdKQoJCQkJCQlsb2djbGVhbi5kZWJ1ZyhzdHIoc3RyZXJyb3IpKQoKCgkJCQlzZXJpZXNbJ29yaWdpbmFsJ10gPSBucC5pbnNlcnQoc2VyaWVzWydvcmlnaW5hbCddLCBzZXJpZXNbJ29yaWdpbmFsJ10uc2l6ZSwgW1tkYXRhX3BvaW50XV0pCgoJCQkJaWYgc2VyaWVzWydvcmlnaW5hbCddLnNpemUgPiB3aW5kb3dfbGVuICogMjoKCQkJCQlzZXJpZXNbJ29yaWdpbmFsJ10gPSBzZXJpZXNbJ29yaWdpbmFsJ11bc2VyaWVzWydvcmlnaW5hbCddLnNpemUgLSB3aW5kb3dfbGVuICogMjpdCgoJCQkJIyBhZGQgZGF0YSBwb2ludCB3aXRoIHRpbWVzdGFtcCB0byB0aW1lIHNlcmllcwoJCQkJZGV2aWNlTGlzdFtkZXZpY2VJbmRleF1baV1bc2VsZi5pbmRleE9mVGVsZW1ldHJ5XS5hcHBlbmQoZGF0YV9wb2ludCkKCQkJCWRldmljZUxpc3RbZGV2aWNlSW5kZXhdW2ldW3NlbGYuaW5kZXhPZlRpbWVTZXJpZXNdLmFwcGVuZChkYXRhWyJ0ZWxlbWV0cnkiXVsidHMiXSkgICMgYWRkaW5nIHRpbWVzZXJpZXMKCgkJCQlpICs9IDEKCgoJCWV4Y2VwdCBFeGNlcHRpb24gYXMgZToKCQkJbG9nLmV4Y2VwdGlvbihlKQoJCglkZWYgcmVtb3ZlRmlyc3RFbGVtZW50cyhzZWxmLCBkZXZpY2VMaXN0LCBkZXZpY2VJbmRleCwgdGVsZW1ldHJ5KToKCQl0cnk6CgkJCSMgcmVtb3ZlIGZpcnN0IGRhdGEgcG9pbnQgd2l0aCBpdHMnIHRpbWVzdGFtcAoJCQlpID0gMAoJCQlmb3Igc2Vuc29yIGluIGRldmljZUxpc3RbZGV2aWNlSW5kZXhdOgoJCQkJaWYgc2Vuc29yWzFdID09IHRlbGVtZXRyeToKCQkJCQlicmVhawoJCQkJZWxzZToKCQkJCQlpICs9IDEKCQkJZGV2aWNlTGlzdFtkZXZpY2VJbmRleF1baV1bc2VsZi5pbmRleE9mVGVsZW1ldHJ5XS5wb3AoMCkKCQkJZGV2aWNlTGlzdFtkZXZpY2VJbmRleF1baV1bc2VsZi5pbmRleE9mVGltZVNlcmllc10ucG9wKDApCgkJZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgoJCQlsb2cuZXhjZXB0aW9uKGUpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CglkZWYgY2hlY2tfdHlwZShzZWxmLCBkYXRhX3BvaW50KToKCQkjIGNoZWNrIGlmIGRhdGEgcG9pbnQgaXMgdmFsaWQgdHlwZSwgaWYgbm90IG1ha2UgaXQgdmFsaWQgYnV0IG9idmlvdXMgb3V0bGllcgoJCWlmIGlzaW5zdGFuY2UoZGF0YV9wb2ludCwgc3RyKToKCQkJaWYgZGF0YV9wb2ludCA9PSAiTmFOIjoKPHxmaW1fZW5kfD4="]
["bb70d16e3fead5f864f2cb52fb742647dfac8a5d-2","bb70d16e3fead5f864f2cb52fb742647dfac8a5d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCByZQoKZGVmIGNtc3N3UmVsZWFzZSgpOgogICAgI3JldHVybiBvcy5lbnZpcm9uWydDTVNTV19CQVNFJ10uc3BsaXQoJy8nKVstMV0KICAgICN0aGlzIGFsc28gd29ya3Mgd2hlbiB0aGUgQ01TU1cgZGlyZWN0b3J5IGlzIHJlbmFtZWQKICAgIHJldHVybiBvcy5lbnZpcm9uWydDTVNTV19WRVJTSU9OJ10KCmRlZiBjbXNzd0lzNDRYKCk6CiAgICByZXR1cm4gY21zc3dSZWxlYXNlKCkuZmluZCgnQ01TU1dfNF80XycpICE9IC0xCgpkZWYgY21zc3dJczUyWCgpOgogICAgaWYgY21zc3dSZWxlYXNlKCkuZmluZCgnQ01TU1dfNV8yXycpICE9IC0xIG9yIFwKICAgICAgICAgICAgY21zc3dSZWxlYXNlKCkuZmluZCgnQ01TU1dfNV8zXycpICE9IC0xOgogICAgICAgIHJldHVybiBUcnVlCiAgICBlbHNlOgogICAgICAgIHJldHVybiBGYWxzZQoKZGVmIHJlbGVhc2VOdW1iZXIocmVsZWFzZSA9IE5vbmUpOgogICAgIyBmaXJzdCBjaGVjayBpZiB0aGlzIGlzIGFuIGludGVncmF0aW9uIGJ1aWxkCiAgICBpZiByZWxlYXNlIGlzIE5vbmU6CiAgICAgICAgcmVsZWFzZSA9IGNtc3N3UmVsZWFzZSgpCiAgICBpYnJlbCA9IHJlLmNvbXBpbGUoJ15DTVNTV18oXGQrKV8oXGQrKV9YLiokJykKICAgIG0gPSBpYnJlbC5tYXRjaChyZWxlYXNlKQogICAgaWYgbToKICAgICAgICBiaWcgPSBpbnQobS5ncm91cCgxKSkKICAgICAgICBtZWRpdW0gPSBpbnQobS5ncm91cCgyKSkKICAgICAgICByZXR1cm4gYmlnLCBtZWRpdW0KICAgIHJlcmVsID0gcmUuY29tcGlsZSgnXkNNU1NXXyhcZCspXyhcZCspXyhcZCspKF9cUyspKiQnKQogICAgbSA9IHJlcmVsLm1hdGNoKHJlbGVhc2UpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGlmIG0gaXMgTm9uZToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdtYWxmb3JtZWQgcmVsZWFzZSBzdHJpbmcgJytyZWxlYXNlKQogICAgYmlnID0gaW50KG0uZ3JvdXAoMSkpCiAgICBtZWRpdW0gPSBpbnQobS5ncm91cCgyKSkKPHxmaW1fZW5kfD4="]
["595b0096dd5e6d322cfaf56bed34ea46167df457-1","595b0096dd5e6d322cfaf56bed34ea46167df457","PHxmaW1fcHJlZml4fD4KZnJvbSBwZXRpc2NvIGltcG9ydCBNZXNzYWdlLCBVdWlkCgoKY2xhc3MgU3B5TWVzc2FnZXM6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5jb3VudGVyX21lc3NhZ2VzID0ge30KICAgICAgICBzZWxmLm1lc3NhZ2VzID0gW10KCiAgICBkZWYgX19yZXByX18oc2VsZik6Cjx8ZmltX2hvbGV8PgogICAgZGVmIGFwcGVuZChzZWxmLCBtZXNzYWdlOiBNZXNzYWdlKToKICAgICAgICBzZWxmLm1lc3NhZ2VzLmFwcGVuZChtZXNzYWdlKQogICAgICAgIGlmIHN0cihtZXNzYWdlLm1lc3NhZ2VfaWQpIG5vdCBpbiBzZWxmLmNvdW50ZXJfbWVzc2FnZXM6CiAgICAgICAgICAgIHNlbGYuY291bnRlcl9tZXNzYWdlc1tzdHIobWVzc2FnZS5tZXNzYWdlX2lkKV0gPSB7ImNvdW50ZXIiOiAxfQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYuY291bnRlcl9tZXNzYWdlc1tzdHIobWVzc2FnZS5tZXNzYWdlX2lkKV1bImNvdW50ZXIiXSArPSAxCgogICAgZGVmIGFzc2VydF9udW1iZXJfdG90YWxfbWVzc2FnZXMoc2VsZiwgZXhwZWN0ZWRfbnVtYmVyX21lc3NhZ2VzOiBpbnQpOgogICAgICAgIGFjdHVhbF9udW1iZXJfdG90YWxfbWVzc2FnZXMgPSBsZW4oc2VsZi5tZXNzYWdlcykKICAgICAgICBhc3NlcnQgKAogICAgICAgICAgICBleHBlY3RlZF9udW1iZXJfbWVzc2FnZXMgPT0gYWN0dWFsX251bWJlcl90b3RhbF9tZXNzYWdlcwogICAgICAgICksIGYiRXhwZWN0ZWQgdG90YWwgbWVzc2FnZXMgaXMge2V4cGVjdGVkX251bWJlcl9tZXNzYWdlc30sIGFjdHVhbCB7YWN0dWFsX251bWJlcl90b3RhbF9tZXNzYWdlc30uIFt7c2VsZi5jb3VudGVyX21lc3NhZ2VzfV0iCgogICAgZGVmIGFzc2VydF9udW1iZXJfdW5pcXVlX21lc3NhZ2VzKHNlbGYsIGV4cGVjdGVkX251bWJlcl9tZXNzYWdlczogaW50KToKICAgICAgICBhY3R1YWxfbnVtYmVyX21lc3NhZ2VzID0gbGVuKHNlbGYuY291bnRlcl9tZXNzYWdlcy5rZXlzKCkpCiAgICAgICAgYXNzZXJ0ICgKICAgICAgICAgICAgYWN0dWFsX251bWJlcl9tZXNzYWdlcyA9PSBleHBlY3RlZF9udW1iZXJfbWVzc2FnZXMKICAgICAgICApLCBmIkV4cGVjdGVkIG51bWJlciBvZiB1bmlxdWUgbWVzc2FnZXMgaXMge2V4cGVjdGVkX251bWJlcl9tZXNzYWdlc30sIGFjdHVhbCB7YWN0dWFsX251bWJlcl9tZXNzYWdlc30uIFt7c2VsZi5jb3VudGVyX21lc3NhZ2VzfV0iCgogICAgZGVmIGdldF9jb3VudGVyX2J5X21lc3NhZ2VfaWQoc2VsZiwgbWVzc2FnZV9pZDogVXVpZCk6CiAgICAgICAgcmV0dXJuIHNlbGYuY291bnRlcl9tZXNzYWdlcy5nZXQoc3RyKG1lc3NhZ2VfaWQpLCB7fSkuZ2V0KCJjb3VudGVyIiwgMCkKCiAgICBkZWYgYXNzZXJ0X2NvdW50X2J5X21lc3NhZ2VfaWQoc2VsZiwgbWVzc2FnZV9pZDogVXVpZCwgZXhwZWN0ZWRfY291bnQ6IGludCk6CiAgICAgICAgYXNzZXJ0ICgKICAgICAgICAgICAgc2VsZi5nZXRfY291bnRlcl9ieV9tZXNzYWdlX2lkKG1lc3NhZ2VfaWQpID09IGV4cGVjdGVkX2NvdW50CiAgICAgICAgKSwgZiJFeHBlY3RlZCBldmVudHMgaXMge2V4cGVjdGVkX2NvdW50fSwgYWN0dWFsIHtzZWxmLmdldF9jb3VudGVyX2J5X21lc3NhZ2VfaWQobWVzc2FnZV9pZCl9LiBbe3NlbGYuY291bnRlcl9tZXNzYWdlc31dIgoKICAgIGRlZiBhc3NlcnRfZmlyc3RfbWVzc2FnZShzZWxmLCBleHBlY3RlZF9tZXNzYWdlOiBNZXNzYWdlKToKICAgICAgICBzZWxmLmFzc2VydF9udW1iZXJfdW5pcXVlX21lc3NhZ2VzKDEpCiAgICAgICAgZXZlbnQgPSBzZWxmLm1lc3NhZ2VzWzBdCiAgICAgICAgYXNzZXJ0IGV2ZW50ID09IGV4cGVjdGVkX21lc3NhZ2UKCiAgICBkZWYgYXNzZXJ0X2xhc3RfbWVzc2FnZShzZWxmLCBleHBlY3RlZF9tZXNzYWdlOiBNZXNzYWdlKToKICAgICAgICBzZWxmLmFzc2VydF9udW1iZXJfdW5pcXVlX21lc3NhZ2VzKDEpCiAgICAgICAgZXZlbnQgPSBzZWxmLm1lc3NhZ2VzWy0xXQogICAgICAgIGFzc2VydCBldmVudCA9PSBleHBlY3RlZF9tZXNzYWdlCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcmV0dXJuIGYiU3B5TWVzc2FnZXM6IHtzZWxmLm1lc3NhZ2VzfSIKCjx8ZmltX2VuZHw+"]
["3c3bcc2151307854d4e17dc82fea79265cc85a60-3","3c3bcc2151307854d4e17dc82fea79265cc85a60","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAoKZnJvbSBwZWV3ZWUgaW1wb3J0IFNxbGl0ZURhdGFiYXNlCmZyb20gY2FzaGl0Lm1vZGVsIGltcG9ydCBDYXRlZ29yeSwgSXRlbQpmcm9tIGNhc2hpdC51dGlscy5kYiBpbXBvcnQgKAogICAgZ2V0X2NhdGVnb3JpZXNfZnJvbV9kYXRhYmFzZSwKICAgIGNyZWF0ZV9uZXdfY2F0ZWdvcnksCiAgICBjcmVhdGVfZGF0YWJhc2UsCiAgICBhZGRfaXRlbV90b19kYXRhYmFzZSwKICAgIGdldF9pdGVtc19mcm9tX2RhdGFiYXNlLAopCgoKTU9ERUxTID0gW0NhdGVnb3J5LCBJdGVtXQojIHVzZSBhbiBpbi1tZW1vcnkgU1FMaXRlIGZvciB0ZXN0cy4KZGIgPSBTcWxpdGVEYXRhYmFzZSgiOm1lbW9yeToiKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKQHB5dGVzdC5maXh0dXJlCmRlZiB0ZXN0ZGIoKToKICAgIGRiLmJpbmQoTU9ERUxTLCBiaW5kX3JlZnM9RmFsc2UsIGJpbmRfYmFja3JlZnM9RmFsc2UpCjx8ZmltX2VuZHw+"]
["056ecba5dfea49cff92b9b64430c979d1901f0f4-2","056ecba5dfea49cff92b9b64430c979d1901f0f4","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgogICAgbmFtZSA9ICdjYXN0cGFnZScKPHxmaW1fc3VmZml4fD4KZnJvbSBkamFuZ28uYXBwcyBpbXBvcnQgQXBwQ29uZmlnCgoKY2xhc3MgQ2FzdHBhZ2VDb25maWcoQXBwQ29uZmlnKToKPHxmaW1fZW5kfD4="]
["e9a91a354a948485809c5314c3d5d1221a7d2fbb-4","e9a91a354a948485809c5314c3d5d1221a7d2fbb","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgbnVtcHkgYXMgbnAKCicnJwpJdCBpcyBwb3NzaWJsZSB0byBjaGFuZ2UgdGhlIGFwcGVhcmFuY2Ugb2YgYSBwbG90IG92ZXJhbGwgYnkgc2V0dGluZyB0aGUgc3R5bGUKd2l0aCBweXBsb3QsIHJhdGhlciB0aGFuIGNoYW5naW5nIGluZGl2aWR1YWwgZWxlbWVudHMgb2YgYSBwbG90IGFzIHlvdSBnby4KWW91IGNhbiBkbyB3aXRoIHRoZSBmb2xsb3dpbmcgc3ludGF4LgonJycKcGx0LnN0eWxlLnVzZSgnZ2dwbG90JykKCicnJwpDaGFuZ2luZyB0aGUgc3R5bGUgaW4gdGhpcyB3YXkgY2hhbmdlcyB0aGUgYXBwZWFyYW5jZSBvZiBhbGwgdmlzdWFsaXNhdGlvbnMgCmluIHRoZSBzZXNzaW9uLCBhbmQgd2lsbCByZW1haW4gdGhpcyB3YXkgdW50aWwgeW91IGNoYW5nZSBpdCBhZ2Fpbi4gCgpUaGVyZSBhcmUgbWFueSB0aGluZ3MgdGhhdCB5b3UgY2FuIGNvbnNpZGVyIHdoZW4geW91IGFyZSBjaG9vc2luZyBhIHN0eWxlLiAKSWYgY29sb3VyIGlzIGltcG9ydGFudCB0aGVuIGNvbnNpZGVyIGEgY29sb3VyYmxpbmQgcGFsZXR0ZSwgaWYgaXQgd2lsbCBiZSBwcmludGVkCnRoZW4gdXNlIGxpZ2h0ZXIgYmFja2dyb3VuZHMgdG8gYXZvaWQgaW5rIHVzZSBhbmQgZ3JheXNjYWxlIHdoZW4geW91IGtub3cgdGhlIAp2aXN1YWxpc2F0aW9uIGlzIGdvaW5nIHRvIGJlIHVzZWQgaW4gYmxhY2sgYW5kIHdoaXRlIChpLmUuIHByaW50ZWQgbm90IGluIGNvbG91cikKJycnCgpucC5yYW5kb20uc2VlZCgxOTY4MDgwMSkKCicnJwpMaW5lIGdyYXBocyB3aXRoIG1hdHBsb3RsaWIgaGF2ZSAzIGJhc2ljIGZlYXR1cmVzIHRoYXQgeW91IGNhbiBjaGFuZ2U6CjEuIENvbG91cgoyLiBNYXJrZXIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgozLiBMaW5lc3R5bGUgCgpUaGV5IGFyZSBjb250cm9sbGVkIGFuZCBzZXQgcmVzcGVjdGl2ZWx5IHdpdGggYGNvbG9yYCwgYG1hcmtlcmAgYW5kIGBsaW5lc3R5bGVgIGFyZ3VtZW50cy4gCicnJwo8fGZpbV9lbmR8Pg=="]
["59139a8890a6e2181096595cb84795998037760a-2","59139a8890a6e2181096595cb84795998037760a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGZsYXNrCmltcG9ydCBqc29uCmltcG9ydCBvcwppbXBvcnQgYWxzYWF1ZGlvCmltcG9ydCBtcHYKaW1wb3J0IHRocmVhZGluZwppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IHNpZ25hbAppbXBvcnQgc3VicHJvY2VzcwoKYXBwID0gZmxhc2suRmxhc2soX19uYW1lX18sIHN0YXRpY19mb2xkZXIgPSAnLi4vZ3VpL2J1aWxkLycsIHN0YXRpY191cmxfcGF0aD0iLyIpCgppZiBvcy5lbnZpcm9uLmdldCgnUElSQURJT19ERVYnKSBpcyBub3QgTm9uZToKICAgIGZyb20gZmxhc2tfY29ycyBpbXBvcnQgQ09SUwogICAgQ09SUyhhcHApCgpjb25mID0ganNvbi5sb2FkKG9wZW4oJy4uL2NvbmZpZy5qc29uJywgJ3InKSkKc2VsZWN0ZWRfcmFkaW8gPSAwCnN0b3BwZWQgPSBGYWxzZQptaXhlciA9IGFsc2FhdWRpby5NaXhlcihhbHNhYXVkaW8ubWl4ZXJzKClbMF0pCnBsYXlZVCA9IEZhbHNlCllUSGFuZGxpbmdUaHJlYWQgPSBOb25lCnBsYXlpbmdUaXRsZSA9ICIiCgpjbGFzcyBNUFY6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5wcm9jID0gTm9uZQoKICAgIGRlZiBwbGF5KHNlbGYsIHVybCk6CiAgICAgICAgc2VsZi5zdG9wKCkKICAgICAgICBzZWxmLnByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKAogICAgICAgICAgICBbJ21wdicsICctLW5vLXZpZGVvJywgdXJsXQogICAgICAgICkKCiAgICBkZWYgc3RvcChzZWxmKToKICAgICAgICBpZiBzZWxmLnByb2MgaXMgTm9uZToKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgc2VsZi5wcm9jLmtpbGwoKQoKICAgIGRlZiB3YWl0KHNlbGYpOgogICAgICAgIHNlbGYucHJvYy53YWl0KCkKCnBsYXllciA9IE1QVigpCgpAYXBwLnJvdXRlKCcvJykKZGVmIGluZGV4KCk6CiAgICByZXR1cm4gZmxhc2sucmVkaXJlY3QoJy9pbmRleC5odG1sJywgMzAxKQoKCkBhcHAucm91dGUoIi9zdGF0ZS8iKQpkZWYgc3RhdGUoKToKICAgIHJldHVybiBmbGFzay5qc29uaWZ5KHsKICAgICAgICAndGl0bGUnOnBsYXlpbmdUaXRsZSwKICAgICAgICAndm9sdW1lJzpnZXR2b2x1bWUoKSwKICAgICAgICAncGxheWluZyc6IG5vdCBzdG9wcGVkLAogICAgICAgICdyYWRpb0lkJzogLTEgaWYgcGxheVlUIGVsc2Ugc2VsZWN0ZWRfcmFkaW8sCiAgICB9KQoKCkBhcHAucm91dGUoIi9yYWRpb3MvIikKZGVmIGdldHJhZGlvcygpOgogICAgcmV0dXJuIGZsYXNrLmpzb25pZnkoeydyYWRpb3MnOmNvbmZbJ3JhZGlvcyddfSkKCgpAYXBwLnJvdXRlKCcvcmFkaW8vPHJhZGlvX2lkPi8nKQpkZWYgc2VsZWN0X3JhZGlvKHJhZGlvX2lkKToKICAgIGdsb2JhbCBwbGF5ZXIsIHNlbGVjdGVkX3JhZGlvLCBzdG9wcGVkLCBwbGF5aW5nVGl0bGUKICAgIHN0b3BwZWQgPSBGYWxzZQogICAgd2l0aCBvcGVuKCdkZWZhdWx0X3JhZGlvLnR4dCcsICd3JykgYXMgZjoKICAgICAgICBmLndyaXRlKHJhZGlvX2lkKQogICAgcmFkaW9faWQgPSBpbnQocmFkaW9faWQpCiAgICBwbGF5aW5nVGl0bGUgPSBjb25mWydyYWRpb3MnXVtyYWRpb19pZF1bJ25hbWUnXQogICAgc2VsZWN0ZWRfcmFkaW8gPSByYWRpb19pZAogICAgc3RvcFBsYXlpbmcoKQogICAgcGxheWVyLnBsYXkoY29uZlsncmFkaW9zJ11bcmFkaW9faWRdWyd1cmwnXSkKICAgIHJldHVybiAiIiwgMjAwCgoKQGFwcC5yb3V0ZSgnL3l0LycpCmRlZiB5b3V0dWJlKCk6CiAgICBnbG9iYWwgWVRIYW5kbGluZ1RocmVhZCwgcGxheWluZ1RpdGxlCiAgICB1cmwgPSBmbGFzay5yZXF1ZXN0LmFyZ3MuZ2V0KCd1cmwnKQogICAgaWYgdXJsLmVuZHN3aXRoKCcvJyk6IHVybCA9IHVybFs6LTFdCiAgICBwcmludCh1cmwpCiAgICBzdG9wUGxheWluZygpCiAgICB5dGlkID0gdXJsLnNwbGl0KCcvJylbLTFdLnNwbGl0KCc9JylbLTFdCiAgICBwbGF5aW5nVGl0bGUgPSBnZXRZVFRpdGxlKHl0aWQpCiAgICBZVEhhbmRsaW5nVGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9aGFuZGxlWVQsIGFyZ3M9KHl0aWQsKSkKICAgIFlUSGFuZGxpbmdUaHJlYWQuc3RhcnQoKQogICAgcmV0dXJuICIiLCAyMDAKCgpAYXBwLnJvdXRlKCcvc3RvcC8nKQpkZWYgc3RvcCgpOgogICAgc3RvcFBsYXlpbmcoKQogICAgcmV0dXJuICIiLCAyMDAKCgpAYXBwLnJvdXRlKCcvdm9sdW1ldXAvJykKZGVmIHZvbHVtZXVwKCk6CiAgICBzZXR2b2x1bWUoZ2V0dm9sdW1lKCkrMykKICAgIHJldHVybiAiIiwgMjAwCgoKQGFwcC5yb3V0ZSgnL3ZvbHVtZWRvd24vJykKZGVmIHZvbHVtZWRvd24oKToKICAgIHNldHZvbHVtZShnZXR2b2x1bWUoKS0zKQogICAgcmV0dXJuICIiLCAyMDAKCgpkZWYgaGFuZGxlWVQoeXRpZCk6CiAgICBnbG9iYWwgcGxheVlULCBwbGF5aW5nVGl0bGUKICAgIHBsYXlZVCA9IFRydWUKICAgIGZpcnN0VmlkZW8gPSBUcnVlCiAgICBwcmV2aW91c1lUSWQgPSBOb25lCiAgICB3aGlsZSBwbGF5WVQ6CiAgICAgICAgaWYgbm90IGZpcnN0VmlkZW86CiAgICAgICAgICAgIHBsYXlpbmdUaXRsZSA9IGdldFlUVGl0bGUoeXRpZCkKICAgICAgICBwbGF5ZXIuc3RvcCgpCiAgICAgICAgcGxheWVyLnBsYXkoImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9Iit5dGlkKQogICAgICAgIHBsYXllci53YWl0KCkKICAgICAgICBpdGVtcyA9IHJlcXVlc3RzLmdldCgKICAgICAgICAgICAgImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3lvdXR1YmUvdjMvc2VhcmNoP3BhcnQ9c25pcHBldCZyZWxhdGVkVG9WaWRlb0lkPXt9JnR5cGU9dmlkZW8ma2V5PXt9Ii5mb3JtYXQoCiAgICAgICAgICAgICAgICB5dGlkLCBjb25mWydZVF9BUElfS0VZJ10KICAgICAgICAgICAgKQogICAgICAgICkuanNvbigpWyJpdGVtcyJdCgogICAgICAgIHRlbXBZVElkID0gaXRlbXNbMF1bJ2lkJ11bJ3ZpZGVvSWQnXQogICAgICAgIGlmIG5vdCBmaXJzdFZpZGVvOgogICAgICAgICAgICBpZiB0ZW1wWVRJZCA9PSBwcmV2aW91c1lUSWQ6CiAgICAgICAgICAgICAgICB0ZW1wWVRJZCA9IGl0ZW1zWzFdWydpZCddWyd2aWRlb0lkJ10KICAgICAgICBwcmV2aW91c1lUSWQgPSB5dGlkCiAgICAgICAgeXRpZCA9IHRlbXBZVElkCiAgICAgICAgZmlyc3RWaWRlbyA9IEZhbHNlCiAgICByZXR1cm4KCgpkZWYgc3RvcFBsYXlpbmcoKToKICAgIGdsb2JhbCBwbGF5WVQsIFlUSGFuZGxpbmdUaHJlYWQsIHN0b3BwZWQKICAgIGlmIHBsYXlZVDoKICAgICAgICBwbGF5WVQgPSBGYWxzZQogICAgICAgIHBsYXllci5zdG9wKCkKICAgICAgICBZVEhhbmRsaW5nVGhyZWFkLmpvaW4oKQogICAgICAgIFlUSGFuZGxpbmdUaHJlYWQgPSBOb25lCiAgICBlbHNlOgogICAgICAgIHBsYXllci5zdG9wKCkKICAgIHN0b3BwZWQgPSBUcnVlCiAgICByZXR1cm4KCgpkZWYgZ2V0dm9sdW1lKCk6CiAgICBnbG9iYWwgbWl4ZXIKICAgIHJldHVybiBpbnQobWl4ZXIuZ2V0dm9sdW1lKClbMF0pCgoKZGVmIHNldHZvbHVtZSh2b2wpOgogICAgZ2xvYmFsIG1peGVyCiAgICBtaXhlci5zZXR2b2x1bWUobWF4KDAsbWluKDEwMCx2b2wpKSkKCgpkZWYgZ2V0WVRUaXRsZSh5dGlkKToKICAgIHJldHVybiByZXF1ZXN0cy5nZXQoCiAgICAgICAgImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3lvdXR1YmUvdjMvdmlkZW9zP3BhcnQ9c25pcHBldCZpZD17fSZrZXk9e30iLmZvcm1hdCgKICAgICAgICAgICAgeXRpZCwgY29uZlsnWVRfQVBJX0tFWSddCiAgICAgICAgKQogICAgKS5qc29uKClbJ2l0ZW1zJ11bMF1bJ3NuaXBwZXQnXVsndGl0bGUnXQoKCmlmIG9zLnBhdGguaXNmaWxlKCdkZWZhdWx0X3JhZGlvLnR4dCcpOgogICAgd2l0aCBvcGVuKCdkZWZhdWx0X3JhZGlvLnR4dCcsICdyJykgYXMgZjoKICAgICAgICBzZWxlY3RlZF9yYWRpbyA9IGYucmVhZGxpbmUoKQogICAgdHJ5OgogICAgICAgIHNlbGVjdGVkX3JhZGlvID0gaW50KHNlbGVjdGVkX3JhZGlvKQogICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgc2VsZWN0ZWRfcmFkaW8gPSAwCiAgICBpZiBzZWxlY3RlZF9yYWRpbz49bGVuKGNvbmZbJ3JhZGlvcyddKSBhbmQgc2VsZWN0ZWRfcmFkaW88MDoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGVjdGVkX3JhZGlvID0gMAo8fGZpbV9lbmR8Pg=="]
["597526a168a62c3f39278468524e963edeb36650-1","597526a168a62c3f39278468524e963edeb36650","PHxmaW1fcHJlZml4fD4KZnJvbSByZXN0X2ZyYW1ld29yay5yZXNwb25zZSBpbXBvcnQgUmVzcG9uc2UKCmZyb20gZGphbmdvX3NsYWNrX2V2ZW50X3dyYXBwZXIuY3VzdG9tX3NpZ25hbCBpbXBvcnQgc2xhY2tfZXZlbnRfZGF0YV9yZWNlaXZlZCwgc2xhc2hfZXZlbnRfZGF0YV9yZWNlaXZlZAoKCmRlZiBzbGFja19ldmVudF90cmlnZ2VyKGV2ZW50X3R5cGU6IHN0ciwgdGVhbV9pZDogc3RyLCBldmVudDogZGljdCk6CiAgICBzbGFja19ldmVudF9kYXRhX3JlY2VpdmVkLnNlbmQoCiAgICAgICAgc2VuZGVyPXNsYWNrX2V2ZW50X3RyaWdnZXIsIGV2ZW50X3R5cGU9ZXZlbnRfdHlwZSwgZXZlbnQ9ZXZlbnQsIHRlYW1faWQ9dGVhbV9pZCkKICAgIHJldHVybiBSZXNwb25zZShOb25lKQoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIHNsYXNoX2V2ZW50X3RyaWdnZXIodXNlcl9pZDogc3RyLCBjaGFubmVsX2lkOiBzdHIsIHNsYXNoX2V2ZW50X2RhdGE6IGRpY3QpOgogICAgc2xhc2hfZXZlbnRfZGF0YV9yZWNlaXZlZC5zZW5kKHNlbmRlcj1zbGFzaF9ldmVudF90cmlnZ2VyLCB1c2VyX2lkPXVzZXJfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbF9pZD1jaGFubmVsX2lkLCBzbGFzaF9ldmVudF9kYXRhPXNsYXNoX2V2ZW50X2RhdGEpCiAgICByZXR1cm4gUmVzcG9uc2UoTm9uZSkKPHxmaW1fZW5kfD4="]
["05dd308e20c983b06557afe65f8756ceaf3059b5-5","05dd308e20c983b06557afe65f8756ceaf3059b5","PHxmaW1fcHJlZml4fD4KIiIiVGVzdHMgZm9yIHJlZmVyZW5jZV9zY3JhcGVyLnB5IiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmltcG9ydCB1bml0dGVzdAoKZnJvbSByZWZlcmVuY2Vfc2NyYXBlciBpbXBvcnQgZ2V0X3VuaXF1ZV9uYW1lcwo8fGZpbV9lbmR8Pg=="]
["5982fe131f5304136c864a515c6e967ca5c1ab1a-5","5982fe131f5304136c864a515c6e967ca5c1ab1a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB2aXNpb24uZGVwdGhfY2FtZXJhLnN1cmZhY2UuX3N1cmZhY2UgYXMgc2ZjCmZyb20gc2NpcHkub3B0aW1pemUgaW1wb3J0IGN1cnZlX2ZpdAoKCmNsYXNzIE1peGVkR2F1c3NpYW5TdXJmYWNlKHNmYy5TdXJmYWNlKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICB4eWRhdGEsCiAgICAgICAgICAgICAgICAgemRhdGEsCiAgICAgICAgICAgICAgICAgbl9taXg9MSwKICAgICAgICAgICAgICAgICBpbml0X2d1ZXNzPVswLCAwLCAuMDUsIC4wNSwgLjAxXSk6CiAgICAgICAgIiIiCiAgICAgICAgOnBhcmFtIHh5ZGF0YToKICAgICAgICA6cGFyYW0gemRhdGE6CiAgICAgICAgOnBhcmFtIG5laWdoYm9yczoKICAgICAgICA6cGFyYW0gc21vb3RoaW5nOgogICAgICAgIDpwYXJhbSBrZXJuZWw6CiAgICAgICAgOnBhcmFtIGVwc2lsb246CiAgICAgICAgOnBhcmFtIGRlZ3JlZToKICAgICAgICA6cGFyYW0gcm5nOiBbW2EwbWluLCBhMG1heF0sIFthMW1pbiwgYTFtYXhdXSwKICAgICAgICAgICAgICAgICAgICBtaW4oZG9tYWluWzosMF0pLCBtYXgoZG9tYWluWzosMF0pIGFuZCBtaW4oZG9tYWluWzosMV0pLCBtYXgoZG9tYWluWzosMV0pIHdpbGwgYmUgdXNlZCBpbiBjYXNlIG9mIE5vbmUKICAgICAgICBhdXRob3I6IHdlaXdlaQogICAgICAgIGRhdGU6IDIwMjEwNjI0CiAgICAgICAgIiIiCiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyh4eWRhdGEsIHpkYXRhKQogICAgICAgIGd1ZXNzX3BybXMgPSBucC5hcnJheShbaW5pdF9ndWVzc10gKiBuX21peCkKICAgICAgICBzZWxmLnBvcHQsIHBjb3YgPSBjdXJ2ZV9maXQoTWl4ZWRHYXVzc2lhblN1cmZhY2UubWl4ZWRfZ2F1c3NpYW4sIHh5ZGF0YSwgemRhdGEsIGd1ZXNzX3BybXMucmF2ZWwoKSkKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgbWl4ZWRfZ2F1c3NpYW4oeHlkYXRhLCAqcGFyYW1ldGVycyk6CiAgICAgICAgIiIiCiAgICAgICAgOnBhcmFtIG5fbWl4OiBudW1iZXIgb2YgZ2F1c3NpYW4gZm9yIG1peGluZwogICAgICAgIDpwYXJhbSB4eToKICAgICAgICA6cGFyYW0gcGFyYW1ldGVyczogZmlyc3QgZ2F1c3NpYW4gcGFyYW1ldGVycywgc2Vjb25kIGdhdXNzaWFuIHBhcmFtZXRlcnMsIC4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIGluY2x1ZHM6IHhfbWVhbiwgeV9tZWFuLCB4X2RlbHRhLCB5X2RlbHRhLCBhdHRpdHVkZQogICAgICAgIDpyZXR1cm46CiAgICAgICAgYXV0aG9yOiB3ZWl3ZWkKICAgICAgICBkYXRlOyAyMDIxMDYyNAogICAgICAgICIiIgoKICAgICAgICBkZWYgZ2F1c3NpYW4oeGRhdGEsIHlkYXRhLCB4bWVhbiwgeW1lYW4sIHhkZWx0YSwgeWRlbHRhLCBhdHRpdHVkZSk6CiAgICAgICAgICAgIHJldHVybiBhdHRpdHVkZSAqIG5wLmV4cCgtKCh4ZGF0YSAtIHhtZWFuKSAvIHhkZWx0YSkgKiogMiAtICgoeWRhdGEgLSB5bWVhbikgLyB5ZGVsdGEpICoqIDIpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgeiA9IG5wLnplcm9zKGxlbih4eWRhdGEpKQogICAgICAgIGZvciBzaW5nbGVfcGFyYW1ldGVycyBpbiBucC5hcnJheShwYXJhbWV0ZXJzKS5yZXNoYXBlKC0xLCA1KToKICAgICAgICAgICAgeiArPSBnYXVzc2lhbih4eWRhdGFbOiwgMF0sIHh5ZGF0YVs6LCAxXSwgKnNpbmdsZV9wYXJhbWV0ZXJzKQogICAgICAgIHJldHVybiB6Cjx8ZmltX2VuZHw+"]
["e636811ab863d94110dfc55d02b8467b3e665a06-1","e636811ab863d94110dfc55d02b8467b3e665a06","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMi4xMCBvbiAyMDIwLTA0LTIxIDA3OjI2Cgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucywgbW9kZWxzCmltcG9ydCBkamFuZ28uZGIubW9kZWxzLmRlbGV0aW9uCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBpbml0aWFsID0gVHJ1ZQoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ3BlcnNvbnMnLCAnMDAwMl9hdXRvXzIwMjAwNDIxXzA0MjYnKSwKICAgIF0KCiAgICBvcGVyYXRpb25zID0gWwogICAgICAgIG1pZ3JhdGlvbnMuQ3JlYXRlTW9kZWwoCiAgICAgICAgICAgIG5hbWU9J1N1cHBsaWVyJywKICAgICAgICAgICAgZmllbGRzPVsKICAgICAgICAgICAgICAgICgncGVyc29uZmlzY2FsX3B0cicsIG1vZGVscy5PbmVUb09uZUZpZWxkKGF1dG9fY3JlYXRlZD1UcnVlLCBvbl9kZWxldGU9ZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbi5DQVNDQURFLCBwYXJlbnRfbGluaz1UcnVlLCBwcmltYXJ5X2tleT1UcnVlLCBzZXJpYWxpemU9RmFsc2UsIHRvPSdwZXJzb25zLlBlcnNvbkZpc2NhbCcpKSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgb3B0aW9ucz17CiAgICAgICAgICAgICAgICAndmVyYm9zZV9uYW1lJzogJ3BlcnNvbmEnLAogICAgICAgICAgICAgICAgJ3ZlcmJvc2VfbmFtZV9wbHVyYWwnOiAncGVyc29uYXMnLAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgfSwKICAgICAgICAgICAgYmFzZXM9KCdwZXJzb25zLnBlcnNvbmZpc2NhbCcsKSwKICAgICAgICApLAogICAgXQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgJ29yZGVyaW5nJzogWydsYXN0X25hbWUnLCAnZmlyc3RfbmFtZSddLAogICAgICAgICAgICAgICAgJ2Fic3RyYWN0JzogRmFsc2UsCjx8ZmltX2VuZHw+"]
["757fa7e03dd86b5d2dfe29ff23216e8ecb006a96-1","757fa7e03dd86b5d2dfe29ff23216e8ecb006a96","PHxmaW1fcHJlZml4fD4KZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgcGFnaW5hdGlvbgpmcm9tIHJlc3RfZnJhbWV3b3JrLnJlc3BvbnNlIGltcG9ydCBSZXNwb25zZQoKCmNsYXNzIFBhZ2luYXRpb24ocGFnaW5hdGlvbi5QYWdlTnVtYmVyUGFnaW5hdGlvbik6CiAgICBwYWdlX3NpemVfcXVlcnlfcGFyYW0gPSAicGFnZV9zaXplIgogICAgbWF4X3BhZ2Vfc2l6ZSA9IDEwMAoKICAgIGRlZiBnZXRfcGFnaW5hdGVkX3Jlc3BvbnNlKHNlbGYsIGRhdGEpOgogICAgICAgIG5leHRfcGFnZSA9IE5vbmUKICAgICAgICBpZiBzZWxmLnBhZ2UuaGFzX25leHQoKToKICAgICAgICAgICAgbmV4dF9wYWdlID0gc2VsZi5wYWdlLm5leHRfcGFnZV9udW1iZXIoKQogICAgICAgIHByZXZfcGFnZSA9IE5vbmUKICAgICAgICBpZiBzZWxmLnBhZ2UuaGFzX3ByZXZpb3VzKCk6CiAgICAgICAgICAgIHByZXZfcGFnZSA9IHNlbGYucGFnZS5wcmV2aW91c19wYWdlX251bWJlcigpCiAgICAgICAgcmV0dXJuIFJlc3BvbnNlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAicHJldl9wYWdlIjogcHJldl9wYWdlLAogICAgICAgICAgICAgICAgImN1cnJlbnRfcGFnZSI6IHNlbGYucGFnZS5udW1iZXIsCiAgICAgICAgICAgICAgICAibmV4dF9wYWdlIjogbmV4dF9wYWdlLAogICAgICAgICAgICAgICAgInRvdGFsX3BhZ2VzIjogc2VsZi5wYWdlLnBhZ2luYXRvci5udW1fcGFnZXMsCiAgICAgICAgICAgICAgICAicGFnZV9zaXplIjogc2VsZi5wYWdlX3NpemUsCiAgICAgICAgICAgICAgICAiY291bnQiOiBzZWxmLnBhZ2UucGFnaW5hdG9yLmNvdW50LAogICAgICAgICAgICAgICAgInJlc3VsdHMiOiBkYXRhLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIH0KPHxmaW1fZW5kfD4="]
["059934fec8281305e057615bc27738780d3cdead-2","059934fec8281305e057615bc27738780d3cdead","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0gCgppbXBvcnQgb3MKaW1wb3J0IG9zLnBhdGgKaW1wb3J0IHNodXRpbAppbXBvcnQgc3lzCmltcG9ydCBnZXRvcHQKaW1wb3J0IHN0cmluZyAgCmltcG9ydCBmbm1hdGNoCmltcG9ydCBoYXNobGliCmltcG9ydCBoYXNobGliCmltcG9ydCB6aXBmaWxlCmltcG9ydCB0aW1lCmltcG9ydCB0aHJlYWRpbmcKaW1wb3J0IHN0cnVjdAppbXBvcnQgcGxhdGZvcm0KZnJvbSBwcHJpbnQgaW1wb3J0IHBwcmludApmcm9tIHN0cnVjdCBpbXBvcnQgKgoKaW1wb3J0IHV0aWwKZnJvbSB1dGlsIGltcG9ydCBMb2cKCnRwRGlyID0gdXRpbC50b29sc1BhdGgKCjx8ZmltX2hvbGV8PgoKZGVmIHdvcmtfZmlsZV9HWklQKGZpbGVuYW1lLCBuYW1lVHlwZSA9IDEpOgogICAgZmlsZXBhdGggPSBvcy5wYXRoLnJlYWxwYXRoKGZpbGVuYW1lKQogICAgZmlsZWRpciA9IG9zLnBhdGguZGlybmFtZShmaWxlcGF0aCkKCiAgICBzeXMuc3Rkb3V0LmZsdXNoKCkgCiAgICAKICAgIHdpdGggb3BlbihmaWxlcGF0aCwgJ3JiJykgYXMgdG1wRmlsZToKICAgICAgICB0bXBDb250ZW50ID0gdG1wRmlsZS5yZWFkKDMpCiAgICAgICAgaWYgdG1wQ29udGVudFswOjJdID09IGInXHgxZlx4OGInOgogICAgICAgICAgICBMb2cucHJpbnREZXRhaWxsbigiR3ppcCBGaWxlLCBwYXNzLiIpCiAgICAgICAgICAgIHJldHVybiAwCiAKICAgIG9zLmNoZGlyKHRwRGlyKQogICAgCiAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZXBhdGgpOgogICAgICAgIExvZy5wcmludERldGFpbGxuKCJlcnJvciAhISEiLCBmaWxlcGF0aCwgImNhbm5vdCBjb252ZXJ0LiIpCiAgICAgICAgcmV0dXJuIDIKICAgIAogICAgZ3ppcF9jbWQgPSBnemlwQmluICsgZmlsZXBhdGggKyAiIC1uIC1mIC05IgogICAgb3Muc3lzdGVtKGd6aXBfY21kKQogICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZXBhdGgpOgogICAgICAgIG9zLnJlbW92ZShmaWxlcGF0aCkKICAgIG9zLnJlbmFtZShmaWxlcGF0aCArICIuZ3oiLCBmaWxlcGF0aCkKICAgIHJldHVybiAwCiAKCmRlZiBjb252ZXJ0KGZpbGVuYW1lLCBuYW1lVHlwZSA9IDEpOgogICAgcmV0ID0gd29ya19maWxlX0daSVAoZmlsZW5hbWUsIG5hbWVUeXBlKQogICAgcmV0dXJuIHJldAo8fGZpbV9zdWZmaXh8PgppZiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAiV2luZG93cyI6CiAgICBnemlwQmluID0gImd6aXAuZXhlICIKZWxzZToKICAgIGd6aXBCaW4gPSAiZ3ppcCAiCjx8ZmltX2VuZHw+"]
["6c0af50b0e539611d4649dfa602b78a2a0687aba-2","6c0af50b0e539611d4649dfa602b78a2a0687aba","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCBqc29uCgpmcm9tIGFsYnVtX2RldGVjdG9yIGltcG9ydCBta2FsYnVtCgpjbGFzcyBUZXN0QWxsKHVuaXR0ZXN0LlRlc3RDYXNlKToKPHxmaW1faG9sZXw+CiAgICAgICAgZiA9IG9wZW4oJ3Rlc3RkYXRhLmpzb24nLCAncicpCiAgICAgICAgdGVzdGRhdGEgPSBqc29uLmxvYWRzKGYucmVhZCgpKQogICAgICAgIGYuY2xvc2UoKQoKICAgICAgICBuX3RvdGFsID0gbGVuKHRlc3RkYXRhKQogICAgICAgIG5fcHJvY2Vzc2luZyA9IDAKICAgICAgICBmb3IgcGF0aCwgZ29sZGVuIGluIHRlc3RkYXRhLml0ZW1zKCk6CiAgICAgICAgICAgIG5fcHJvY2Vzc2luZyArPSAxCiAgICAgICAgICAgIHByaW50KGYnUHJvY2Vzc2luZyB7bl9wcm9jZXNzaW5nfS97bl90b3RhbH0uLi4nKQogICAgICAgICAgICBhbGJ1bSA9IG1rYWxidW0ocGF0aCkKICAgICAgICAgICAgY21kcyA9IGFsYnVtLmNtZHMoJy90bXAnLCBhdWRpb19vbmx5PUZhbHNlKQogICAgICAgICAgICBjbWRzID0gJ1xuJy5qb2luKGNtZHMpCiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kcywgZ29sZGVuKQogICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICB3aXRoIG9wZW4oJ2EnLCAndycpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgZi53cml0ZShjbWRzKQogICAgICAgICAgICAgICAgd2l0aCBvcGVuKCdiJywgJ3cnKSBhcyBmOgogICAgICAgICAgICAgICAgICAgIGYud3JpdGUoZ29sZGVuKQogICAgICAgICAgICAgICAgcmFpc2UKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICB1bml0dGVzdC5tYWluKCkKCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgc3VwZXIoKS5zZXRVcCgpCgogICAgZGVmIHRlc3RfYWxsKHNlbGYpOgo8fGZpbV9lbmR8Pg=="]
["75c6370e21e220468c7f590893ec03692e9c1d57-1","75c6370e21e220468c7f590893ec03692e9c1d57","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCBweXhiLmJpbmRpbmcuZGF0YXR5cGVzIGFzIHhzZAo8fGZpbV9ob2xlfD4KICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbCh2LnllYXIsIDIwMDIpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2Lm1vbnRoLCAxMCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYuZGF5LCAyNykKICAgICAgICB2ID0geHNkLmdNb250aERheSgxMCwgMjcpCiAgICAgICAgI3NlbGYuYXNzZXJ0RXF1YWwodi55ZWFyLCAyMDAyKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5tb250aCwgMTApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LmRheSwgMjcpCiAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB4c2QuZ01vbnRoRGF5LCAyMDAyKQoKICAgIGRlZiB0ZXN0WFNETGl0ZXJhbCAoc2VsZik6CiAgICAgICAgdiA9IHhzZC5nTW9udGhEYXkoMTAsIDI3KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzEwLTI3Jywgdi54c2RMaXRlcmFsKCkpCgogICAgZGVmIHRlc3RBY2Nlc3NvciAoc2VsZik6CiAgICAgICAgdiA9IHhzZC5nTW9udGhEYXkoMTAsIDI3KQogICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yKSwgZ2V0YXR0ciwgdiwgJ3llYXInKQogICAgICAgICNzZWxmLmFzc2VydFJhaXNlcygoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvciksIGdldGF0dHIsIHYsICdtb250aCcpCiAgICAgICAgI3NlbGYuYXNzZXJ0UmFpc2VzKChBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yKSwgZ2V0YXR0ciwgdiwgJ2RheScpCiAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IpLCBzZXRhdHRyLCB2LCAneWVhcicsIDUpCiAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IpLCBzZXRhdHRyLCB2LCAnbW9udGgnLCA1KQogICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yKSwgc2V0YXR0ciwgdiwgJ2RheScsIDUpCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdW5pdHRlc3QubWFpbigpCjx8ZmltX3N1ZmZpeHw+CgpjbGFzcyBUZXN0X2dNb250aERheSAodW5pdHRlc3QuVGVzdENhc2UpOgogICAgZGVmIHRlc3RCYXNpYyAoc2VsZik6CiAgICAgICAgdiA9IHhzZC5nTW9udGhEYXkoJzEwLTI3JykKPHxmaW1fZW5kfD4="]
["abbea2bae2c13516c1daae9bc4fa74240dad743c-3","abbea2bae2c13516c1daae9bc4fa74240dad743c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKZnJvbSB0b3JjaC5fQyBpbXBvcnQgZGV2aWNlCmltcG9ydCBjb25maWcKY29uZmlnLmluaXQoKQpmcm9tIGdsb2JhbF92YWx1ZXMgaW1wb3J0ICoKaW1wb3J0IGxpYnJvc2EKZnJvbSBjb3JlLmZlYXR1cmVfZXhyYWN0aW9uLmRhdGFfdG9fZGIgaW1wb3J0IGRhdGFfc2V0CmltcG9ydCBjb21tb24ubG9nX2hhbmRsZXIgYXMgbG9nX2hhbmRsZXIKbG9nZ2VyID0gbG9nX2hhbmRsZXIuZ2V0X2xvZ2dlcigpCmZyb20gY29yZS5mZWF0dXJlX2V4cmFjdGlvbiBpbXBvcnQgZXh0cmFjdApmcm9tIGNvcmUucHJlZGljdG9yLnRyYWluaW5nIGltcG9ydCBUcmFpbgppbXBvcnQgYXJncGFyc2UKcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW1vZGUnLCBoZWxwPSdmZWF0dXJlIGV4dHJhY3Rpb24gb3IgdHJhaW5pbmcnKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZlYXR1cmUnLCBoZWxwPSdjaG9vc2Ugd2hpY2ggZmVhdHVyZSB0byBleHRyYWN0IG9yIHRyYWluJykKcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mZWF0dXJlX3RhYmxlcycsIGhlbHA9J2Nob29zZSB0aGUgZmVhdHVyZSB0byB0cmFpbiB1c2luZyB0YWJsZXMgbmFtZScsCiAgICAgICAgICAgICAgICAgICAgdHlwZT1saXN0KQpwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW1vZGVsJywgaGVscD0nY2hvb3NlIHdoaWNoIHByZWRpY3RvciB0byB0cmFpbicpCnBhcnNlci5hZGRfYXJndW1lbnQoJy0tZ2VuZGVyJywgaGVscD0nd2V0aGVyIGNvbnNpZGVyIGdlbmRlciBvciBub3QnKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRiJywgaGVscD0nY2hvb3NlIHdoaWNoIGRhdGFiYXNlIHZlcnNpb24geW91IHVzZSwgc3FsaXRlIG9yIG15c3FsJykKcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1kZXZpY2UnLCAnLWQnLCBkZWZhdWx0PSdjcHUnLCBoZWxwPSJ3aGljaCBkZXZpY2UiKQoKYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCmlmIGFyZ3MuZGIgaXMgbm90IE5vbmU6CiAgICBjb25maWcuZGJfdHlwZSA9IGFyZ3MuZGIKCmlmIGFyZ3MubW9kZSA9PSAnZXh0cmFjdCc6CiAgICAjIGZlYV9leHQgPSBleHRyYWN0LkZlYXR1cmVFeHRyYXRpb24obW9kZWw9YXJncy5mZWF0dXJlKQogICAgZmVhX2V4dCA9IGV4dHJhY3QuRmVhdHVyZUV4dHJhdGlvbihmZWF0dXJlX25hbWU9YXJncy5mZWF0dXJlKQogICAgZmVhX2V4dC5nZW5fZmVhKCkKCmVsaWYgYXJncy5tb2RlID09ICd0cmFpbic6CiAgICBpZiBhcmdzLmZlYXR1cmUgaXMgbm90IE5vbmU6CiAgICAgICAgZmVhID0gYXJncy5mZWF0dXJlCiAgICAgICAgbW9kZWwgPSBhcmdzLm1vZGVsCiAgICAgICAgbG9nZ2VyLmluZm8oZidZb3UgYXJlIHRyYWluaW5nIHVzaW5nIG1vZGVsIHttb2RlbH0gdmlhIGZlYXR1cmUge2ZlYX0nKQogICAgICAgIHRyYWluaW5nID0gVHJhaW4obW9kZWxfbmFtZT1tb2RlbCwgZmVhdHVyZV9uYW1lPWZlYSwgZGV2aWNlPWFyZ3MuZGV2aWNlKQogICAgICAgIHRyYWluaW5nLnN0YXJ0KCkKICAgICAgICBpZiBhcmdzLmdlbmRlciA9PSAneSc6CiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGYnWW91IGFyZSB0cmFpbmluZyB1c2luZyBtb2RlbCB7bW9kZWx9IHZpYSBmZWF0dXJlIHtmZWF9IGFuZCBjb25zaWRlciBnZW5kZXIhJykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBUcmFpbihtb2RlbF9uYW1lPW1vZGVsLCBmZWF0dXJlX25hbWU9ZmVhLCBnZW5kZXI9VHJ1ZSwgZGV2Y2llPWFyZ3MuZGV2aWNlKS5zdGFydCgpCjx8ZmltX2VuZHw+"]
["06c14d544f93a78a1380d290e6331ab20a15c601-2","06c14d544f93a78a1380d290e6331ab20a15c601","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKCmZyb20gcmF5X3RyYWNlci5pbnRlcnNlY3Rpb25zIGltcG9ydCBJbnRlcnNlY3Rpb25zLCBJbnRlcnNlY3Rpb24KZnJvbSByYXlfdHJhY2VyLnRyYW5zZm9ybWF0aW9ucyBpbXBvcnQgSWRlbnRpdHkKZnJvbSByYXlfdHJhY2VyLnR1cGxlcyBpbXBvcnQgUG9pbnQsIGRvdAoKZnJvbSAuc2hhcGUgaW1wb3J0IFNoYXBlCmZyb20gLnRyYW5zZm9ybWVkX3NoYXBlIGltcG9ydCBUcmFuc2Zvcm1lZFNoYXBlCgoKY2xhc3MgVW5pdFNwaGVyZShTaGFwZSk6CiAgICBfX3Nsb3RzX18gPSAoKQoKICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgIHJldHVybiBpc2luc3RhbmNlKG90aGVyLCBzZWxmLl9fY2xhc3NfXykKCiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gIlNwaGVyZSgpIgo8fGZpbV9ob2xlfD4KICAgICAgICBzcGhlcmVfdG9fcmF5ID0gcmF5Lm9yaWdpbiAtIGNlbnRlcgogICAgICAgIGEgPSBkb3QocmF5LmRpcmVjdGlvbiwgcmF5LmRpcmVjdGlvbikKICAgICAgICBiID0gMiAqIGRvdChyYXkuZGlyZWN0aW9uLCBzcGhlcmVfdG9fcmF5KQogICAgICAgIGMgPSBkb3Qoc3BoZXJlX3RvX3JheSwgc3BoZXJlX3RvX3JheSkgLSByYWRpdXMKICAgICAgICBkaXNjcmltaW5hbnQgPSBiKioyIC0gNCAqIGEgKiBjCgogICAgICAgIGlmIGRpc2NyaW1pbmFudCA8IDA6CiAgICAgICAgICAgIHJldHVybiBJbnRlcnNlY3Rpb25zKCkKCiAgICAgICAgdDEgPSAoLWIgLSBtYXRoLnNxcnQoZGlzY3JpbWluYW50KSkgLyAoMiAqIGEpCiAgICAgICAgdDIgPSAoLWIgKyBtYXRoLnNxcnQoZGlzY3JpbWluYW50KSkgLyAoMiAqIGEpCiAgICAgICAgcmV0dXJuIEludGVyc2VjdGlvbnMoSW50ZXJzZWN0aW9uKHQxLCBzZWxmKSwgSW50ZXJzZWN0aW9uKHQyLCBzZWxmKSkKCiAgICBkZWYgbm9ybWFsX2F0KHNlbGYsIHBvaW50KToKICAgICAgICBvYmplY3Rfbm9ybWFsID0gcG9pbnQgLSBQb2ludCgwLCAwLCAwKQogICAgICAgIHJldHVybiBvYmplY3Rfbm9ybWFsCgoKZGVmIFNwaGVyZSgpOgogICAgcmV0dXJuIFRyYW5zZm9ybWVkU2hhcGUoVW5pdFNwaGVyZSgpLCBJZGVudGl0eSgpKQoKIyBDb3B5cmlnaHQgMjAyMCBCbG9vbWJlcmcgRmluYW5jZSBMLlAuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIGludGVyc2VjdChzZWxmLCByYXkpOgogICAgICAgIGNlbnRlciA9IFBvaW50KDAsIDAsIDApCiAgICAgICAgcmFkaXVzID0gMQo8fGZpbV9lbmR8Pg=="]
["6639105d39a0a7ad17cca0774cc6134d289c52b1-1","6639105d39a0a7ad17cca0774cc6134d289c52b1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cgpmcm9tIHZlbm4gaW1wb3J0IHZlbm4KZnJvbSBtYXRwbG90bGliLnB5cGxvdCBpbXBvcnQgc3VicGxvdHMKZnJvbSBtYXRwbG90bGliX3Zlbm4gaW1wb3J0IHZlbm4yLCB2ZW5uMl9jaXJjbGVzLCB2ZW5uMl91bndlaWdodGVkCjx8ZmltX2VuZHw+"]
["f9de109405fead93c645e84ffda1b849db00ab4c-2","f9de109405fead93c645e84ffda1b849db00ab4c","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMgQFRpbWUgICAgOiAyMDE3LzcvMjUgMDAyNSDkuIvljYggMzo1NgojIEBBdXRob3IgIDogRXhjaHJpcyBUc2FpCiMgQFNpdGUgICAgOiAKIyBARmlsZSAgICA6IGV4YW1wbGU2Ni5weQojIEBTb2Z0d2FyZTogUHlDaGFybQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpfX2F1dGhvcl9fID0gJ0V4Y2hyaXMgVHNhaScKCiMg6aKY55uuOiDovpPlhaUz5Liq5pWwYSxiLGMs5oyJ5aSn5bCP6aG65bqP6L6T5Ye6Cgo8fGZpbV9lbmR8Pg=="]
["f94e47e316439937c13d6bcd769aa4b0d9f18495-2","f94e47e316439937c13d6bcd769aa4b0d9f18495","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gZmxhc2tfc2NyaXB0IGltcG9ydCBNYW5hZ2VyCgpmcm9tIGFwcCBpbXBvcnQgb3NtX2FwcApmcm9tIGNhbXBhaWduX21hbmFnZXIuc2NyaXB0LmdlbmVyYXRlX2dlb21ldHJ5IGltcG9ydCAoCiAgICBnZW5lcmF0ZV9nZW9tZXRyeSBhcyBnZW5lcmF0ZV9nZW9tZXRyeV9zY3JpcHQKKQoKb3NtX2FwcC5jb25maWcuZnJvbV9vYmplY3Qob3MuZW52aXJvblsnQVBQX1NFVFRJTkdTJ10pCgptYW5hZ2VyID0gTWFuYWdlcihvc21fYXBwKQoKCkBtYW5hZ2VyLmNvbW1hbmQKZGVmIGdlbmVyYXRlX2dlb21ldHJ5KCk6CiAgICBnZW5lcmF0ZV9nZW9tZXRyeV9zY3JpcHQoKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIG1hbmFnZXIucnVuKCkKPHxmaW1fZW5kfD4="]
["f95fec038e56db00669e64fdade63b7dccd1f3a2-3","f95fec038e56db00669e64fdade63b7dccd1f3a2","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMi43Cgpmcm9tIHNldHVwdG9vbHMgaW1wb3J0IHNldHVwCgpjb25mID0gZGljdCgKICAgIG5hbWU9J29wZW5jYWNoZScsCiAgICB2ZXJzaW9uPScwLjAuMS1kZXYnLAogICAgZGVzY3JpcHRpb249J0FuIGV4cGVyaW1lbnRhbCBIVFRQIGNhY2hpbmcgcGxhdGZvcm0gdXRpbGlzaW5nIFNvZnR3YXJlIERlZmluZWQgTmV0d29ya2luZyB0ZWNobm9sb2d5LicsCiAgICBsb25nX2Rlc2NyaXB0aW9uPSdGb3IgbW9yZSBkZXRhaWxzIGFuZCB0aGUgUkVBRE1FLCBwbGVhc2Ugc2VlIG91ciBgR2l0SHViIHBhZ2UgPGh0dHBzOi8vZ2l0aHViLmNvbS9icm9hZGJlbnQvb3BlbmNhY2hlPmBfLicsCiAgICBhdXRob3I9J01hdHRoZXcgQnJvYWRiZW50JywKICAgIGF1dGhvcl9lbWFpbD0nbWF0dEBtYXR0aGV3YnJvYWRiZW50Lm5ldCcsCiAgICBwYWNrYWdlcz1bJ29wZW5jYWNoZScsICdvcGVuY2FjaGUubGliJywgJ29wZW5jYWNoZS5jb250cm9sbGVyJywgJ29wZW5jYWNoZS5ub2RlJywKICAgICdvcGVuY2FjaGUubm9kZS5zZXJ2ZXInLCAnb3BlbmNhY2hlLmNvbnRyb2xsZXIuYXBpJywgJ29wZW5jYWNoZS5jb250cm9sbGVyLnJlcXVlc3QnLAo8fGZpbV9ob2xlfD4KICAgIGxpY2Vuc2U9J0FwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCcsCiAgICBkb3dubG9hZF91cmw9J2h0dHBzOi8vZ2l0aHViLmNvbS9icm9hZGJlbnQvb3BlbmNhY2hlL2FyY2hpdmUvMC4wLjEtZGV2LnppcCcsCiAgICBjbGFzc2lmaWVycz1bCiAgICAgICAgJ0RldmVsb3BtZW50IFN0YXR1cyA6OiAzIC0gQWxwaGEnLAogICAgICAgICdJbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzJywKICAgICAgICAnSW50ZW5kZWQgQXVkaWVuY2UgOjogU2NpZW5jZS9SZXNlYXJjaCcsCiAgICAgICAgJ0xpY2Vuc2UgOjogREZTRyBhcHByb3ZlZCcsCiAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlJywKICAgICAgICAnT3BlcmF0aW5nIFN5c3RlbSA6OiBQT1NJWCcsCiAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbicsCiAgICAgICAgJ1RvcGljIDo6IFN5c3RlbSA6OiBOZXR3b3JraW5nJywKICAgICAgICAnVG9waWMgOjogU3lzdGVtIDo6IERpc3RyaWJ1dGVkIENvbXB1dGluZycsCiAgICAgICAgJ1RvcGljIDo6IFN5c3RlbSA6OiBMb2dnaW5nJywKICAgICAgICAnVG9waWMgOjogU3lzdGVtIDo6IE1vbml0b3JpbmcnCiAgICAgICAgXQopCgpzZXR1cCgqKmNvbmYpCjx8ZmltX3N1ZmZpeHw+CiAgICAnb3BlbmNhY2hlLmNvbnRyb2xsZXIuc3RhdGUnXSwKICAgIHNjcmlwdHM9WydzY3JpcHRzL29wZW5jYWNoZSddLAogICAgaW5zdGFsbF9yZXF1aXJlcz1bJ3B5bW9uZ28nLCAncHl6bXEnLCAnY29uZmlncGFyc2VyJ10sCiAgICB1cmw9J2h0dHBzOi8vZ2l0aHViLmNvbS9icm9hZGJlbnQvb3BlbmNhY2hlJywKPHxmaW1fZW5kfD4="]
["6d693e8a4665f7486d03f164ae9bb39231544efb-1","6d693e8a4665f7486d03f164ae9bb39231544efb","PHxmaW1fcHJlZml4fD4KZnJvbSBiZWhhdmUgaW1wb3J0ICoKZnJvbSBmZWF0dXJlcy5zZXJ2aWNlLm1vZGVsLnNlcnZpY2UgaW1wb3J0IFJlc291cmNlR2V0LCBSZXNvdXJjZUdldElkCgonJycKVGhpcyBzdGVwIGZpbGUgaXRzIHRoZSAiZ2x1ZSIgY29kZSBiZXR3ZWVuIEdoZXJraW5zIGZlYXR1cmUgZGVmaW5pdGlvbiBhbmQgdGhlIGNvZGluZyBpbnRvIFB5dGhvbgpCZWhhdmUgc2VhcmNoIHRoZSB0cmFuc2xhdGUgZnJvbSBmZWF0dXJlIGZpbGUgc2VhcmNoaW5nIHRoZSBtYXRjaGluZyBpbiB0aGUgc3RlcCBkaXJlY3RvcnkKV2UgdXNlIGEgY2xhc3MgbW9kZWwgYW5kICJtb3ZlIiB0aGUgZGF0YSBiZXR3ZWVuIHN0ZXBzIHdpdGggdGhlIGJlaGF2ZSBjb250ZXh0IG9iamVjdAonJycKCgojIEdFVApAZ2l2ZW4oImEgZ2V0IHJlc291cmNlIikKZGVmIHN0ZXBfaW1wbChjb250ZXh0KToKICAgIGNvbnRleHQuZ2V0X3Jlc291cmNlID0gUmVzb3VyY2VHZXQoY29udGV4dCkKCgpAd2hlbigidXNlciBzZW5kIHRoZSBnZXQgcmVzb3VyY2UgcmVxdWVzdCIpCmRlZiBzdGVwX2ltcGwoY29udGV4dCk6CiAgICBjb250ZXh0LmdldF9yZXNvdXJjZS5zZW5kX3Jlc291cmNlX2dldCgiU2VuZGluZyBHZXQgUmVzb3VyY2UiKQoKCkB0aGVuKCJ1c2VyIHJlY2VpdmUgdGhlIGdldCByZXNvdXJjZSByZXNwb25zZSIpCmRlZiBzdGVwX2ltcGwoY29udGV4dCk6CiAgICBjb250ZXh0LmdldF9yZXNvdXJjZS5jaGVja19yZXNvdXJjZV9nZXQoKQo8fGZpbV9ob2xlfD4KZGVmIHN0ZXBfaW1wbChjb250ZXh0LHJlc291cmNlX2lkKToKICAgIGNvbnRleHQuZ2V0X3Jlc291cmNlX2lkID0gUmVzb3VyY2VHZXRJZChjb250ZXh0LCByZXNvdXJjZV9pZCkKCgpAd2hlbigidXNlciBzZW5kIHRoZSBnZXQgcmVzb3VyY2VfaWQgcmVxdWVzdCIpCmRlZiBzdGVwX2ltcGwoY29udGV4dCk6CiAgICBjb250ZXh0LmdldF9yZXNvdXJjZV9pZC5zZW5kX3Jlc291cmNlX2dldF9pZCgiU2VuZGluZyBHZXQgUmVzb3VyY2UgSUQiKQoKCkB0aGVuKCJ1c2VyIHJlY2VpdmUgdGhlIGdldCByZXNvdXJjZV9pZCByZXNwb25zZSB7cmVzdWx0fSIpCmRlZiBzdGVwX2ltcGwoY29udGV4dCwgcmVzdWx0KToKCiAgICBjb250ZXh0LmdldF9yZXNvdXJjZV9pZC5jaGVja19yZXNvdXJjZV9nZXRfaWQocmVzdWx0KQo8fGZpbV9zdWZmaXh8PgoKCiMgR0VUIElECkBnaXZlbigiYSBnZXQge3Jlc291cmNlX2lkfSIpCjx8ZmltX2VuZHw+"]
["59248464fa7161a3efbae2c8a2a182cf70c815e1-1","59248464fa7161a3efbae2c8a2a182cf70c815e1","PHxmaW1fcHJlZml4fD4KIiIiClNlZSBodHRwczovL2dpdGh1Yi5jb20vbWl0c3VoaWtvL2ZsYXNrLW9hdXRoL2Jsb2IvbWFzdGVyL2V4YW1wbGUvZ29vZ2xlLnB5CiIiIgoKaW1wb3J0IGZsYXNrCmZyb20gZmxhc2tfb2F1dGggaW1wb3J0IE9BdXRoCmltcG9ydCByZXF1ZXN0cwoKZnJvbSBzaGFyZWJlYXJzIGltcG9ydCBhcHAKCgpfR09PR0xFX1JFRElSRUNUX1VSSSA9ICIvc2lnbl9pbl9nb29nbGVfY29tcGxldGUiCgpfb2F1dGggPSBPQXV0aCgpCl9nb29nbGUgPSBfb2F1dGgucmVtb3RlX2FwcCgiZ29vZ2xlIiwKICAgIGJhc2VfdXJsPSJodHRwczovL3d3dy5nb29nbGUuY29tL2FjY291bnRzLyIsCiAgICBhdXRob3JpemVfdXJsPSJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20vby9vYXV0aDIvYXV0aCIsCiAgICByZXF1ZXN0X3Rva2VuX3VybD1Ob25lLAogICAgcmVxdWVzdF90b2tlbl9wYXJhbXM9ewogICAgICAic2NvcGUiOiAiZW1haWwiLAogICAgICAicmVzcG9uc2VfdHlwZSI6ICJjb2RlIgogICAgfSwKICAgIGFjY2Vzc190b2tlbl91cmw9Imh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi90b2tlbiIsCiAgICBhY2Nlc3NfdG9rZW5fbWV0aG9kPSJQT1NUIiwKICAgIGFjY2Vzc190b2tlbl9wYXJhbXM9eyJncmFudF90eXBlIjogImF1dGhvcml6YXRpb25fY29kZSJ9LAogICAgY29uc3VtZXJfa2V5PWFwcC5jb25maWdbIkdPT0dMRV9DTElFTlRfSUQiXSwKICAgIGNvbnN1bWVyX3NlY3JldD1hcHAuY29uZmlnWyJHT09HTEVfQ0xJRU5UX1NFQ1JFVCJdKQoKCkBhcHAucm91dGUoIi9zaWduX2luX2dvb2dsZSIpCmRlZiBzaWduX2luX2dvb2dsZSgpOgogIGNhbGxiYWNrPWZsYXNrLnVybF9mb3IoInNpZ25faW5fZ29vZ2xlX2NvbXBsZXRlIiwgX2V4dGVybmFsPVRydWUpCiAgcmV0dXJuIF9nb29nbGUuYXV0aG9yaXplKGNhbGxiYWNrPWNhbGxiYWNrKQoKCmRlZiBfZ2V0X2NsaWVudF9qc29uKGFjY2Vzc190b2tlbik6CiAgaGVhZGVycyA9IHsgIkF1dGhvcml6YXRpb24iOiAiT0F1dGggJXMiICUgYWNjZXNzX3Rva2VuIH0KICByZXNwb25zZSA9IHJlcXVlc3RzLmdldCgiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vb2F1dGgyL3YxL3VzZXJpbmZvIiwgaGVhZGVycz1oZWFkZXJzKQogIHJlc3BvbnNlX2pzb24gPSByZXNwb25zZS5qc29uKCkKCiAgZG9tYWluID0gcmVzcG9uc2VfanNvbi5nZXQoImhkIiwgTm9uZSkKICBpZiBkb21haW4gIT0gYXBwLmNvbmZpZ1siR09PR0xFX0FQUF9ET01BSU4iXToKICAgICMgVGhpcyB1c2VyIGlzIG5vdCBwYXJ0IG9mIHRoaXMgb3JnYW5pemF0aW9uJ3MgZG9tYWluLgogICAgcmV0dXJuIE5vbmUKCiAgZ29vZ2xlX2lkID0gcmVzcG9uc2VfanNvblsiaWQiXQogIGRpc3BsYXllZF9uYW1lID0gcmVzcG9uc2VfanNvblsiZW1haWwiXQogIGNsaWVudCA9IHsKICAgICJhdXRoX21ldGhvZCI6ICJnb29nbGUiLAogICAgInVzZXJfaWQiOiAiZ29vZ2xlOiVzIiAlIGdvb2dsZV9pZCwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgImRpc3BsYXllZF9uYW1lIjogZGlzcGxheWVkX25hbWUKPHxmaW1fZW5kfD4="]
["3c3e56fc747e94c68711cd0ca4e602ad18fe26aa-2","3c3e56fc747e94c68711cd0ca4e602ad18fe26aa","PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMKIyBQeVJBSTJNRCAyIG1vZHVsZSBmb3IgZGl0cmlidXRpbmcgTk4gdHJhaW5pbmcKIwojIEF1dGhvciBKaW5nYmFpIExpCiMgU2VwIDI5IDIwMjEKIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmltcG9ydCBvcywgc3lzLCBzdWJwcm9jZXNzLCBqc29uLCB0aW1lCmltcG9ydCBudW1weSBhcyBucApmcm9tIFB5UkFJMk1ELlV0aWxzLnRpbWluZyBpbXBvcnQgV2hhdElzVGltZSwgSG93TG9uZwoKY2xhc3MgUmVtb3RlVHJhaW46CiAgICAiIiIgTk4gcmVtb3RlIHRyYWluaW5nIGNsYXNzCgogICAgICAgIFBhcmFtZXRlcnM6ICAgICAgICAgIFR5cGU6CiAgICAgICAgICAgIGtleXdvcmRzICAgICAgICAgZGljdCAgICAgICAga2V5d29yZCBkaWN0aW9uYXJ5CiAgICAgICAgICAgIGlkICAgICAgICAgICAgICAgc3RyICAgICAgICAgdHJhaW5pbmcgaWQgc3RyaW5nCgogICAgICAgIEF0dHJpYnV0ZTogICAgICAgICAgIFR5cGU6CiAgICAgICAgICAgIGtleXdvcmRzICAgICAgICAgZGljdCAgICAgICAga2V5d29yZCBkaWN0aW9uYXJ5CiAgICAgICAgICAgIHRpdGxlICAgICAgICAgICAgc3RyICAgICAgICAgY2FsY3VsYXRpb24gdGl0bGUKICAgICAgICAgICAgY2FjbGRpciAgICAgICAgICBzdHIgICAgICAgICBjYWxjdWxhdGlvbiBkaXJlY3RvcnkKICAgICAgICAgICAgcHlyYWkybWRkaXIgICAgICBzdHIgICAgICAgICBQeVJBSTJNRCBkaXJlY3RvcnkKICAgICAgICAgICAgdXNlX2hwYyAgICAgICAgICBpbnQgICAgICAgICB1c2UgSFBDICgxKSBmb3IgY2FsY3VsYXRpb24gb3Igbm90KDApLCBsaWtlIFNMVVJNLgoKICAgICAgICBGdW5jdGlvbnM6ICAgICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICB0cmFpbiAgICAgICAgICAgIGRpY3QgICAgICAgIHRyYWluaW5nIG1ldHJpY3MKICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBrZXl3b3JkcyA9IE5vbmUsIGlkID0gTm9uZSk6CiAgICAgICAgIyMgZ2V0IGtleXdvcmRzIGluZm8KICAgICAgICBzZWxmLmtleXdvcmRzID0ga2V5d29yZHMuY29weSgpCiAgICAgICAgc2VsZi50aXRsZSA9IGtleXdvcmRzWydjb250cm9sJ11bJ3RpdGxlJ10KICAgICAgICBzZWxmLnB5cmFpMm1kZGlyID0gb3MuZW52aXJvblsnUFlSQUkyTUQnXQogICAgICAgIHNlbGYua2V5d29yZHNbJ2NvbnRyb2wnXVsnam9idHlwZSddID0gJ3RyYWluJwogICAgICAgIHNlbGYudXNlX2hwYyA9IGtleXdvcmRzWydubiddWydzZWFyY2gnXVsndXNlX2hwYyddCiAgICAgICAgc2VsZi5yZXRyaWV2ZSA9IGtleXdvcmRzWydubiddWydzZWFyY2gnXVsncmV0cmlldmUnXQoKICAgICAgICBzZWxmLmNhbGNkaXIgPSAnJXMvZ3JpZC1zZWFyY2gvTk4tJXMtJXMnICUgKG9zLmdldGN3ZCgpLCBzZWxmLnRpdGxlLCBpZCkKCiAgICAgICAgc2VsZi5ydW5zY3JpcHQgPSAiIiJleHBvcnQgSU5QVVQ9aW5wdXQuanNvbgpleHBvcnQgV09SS0RJUj0lcwpleHBvcnQgUFlSQUkyTUQ9JXMKCmNkICRXT1JLRElSCnB5dGhvbjMgJFBZUkFJMk1EL3B5cmFpMm1kLnB5ICRJTlBVVAoiIiIgJSAoICAgICBzZWxmLmNhbGNkaXIsCiAgICAgICAgICAgIHNlbGYucHlyYWkybWRkaXIpCgogICAgZGVmIF9zZXR1cF9ocGMoc2VsZik6CiAgICAgICAgIyMgc2V0dXAgSFBDCiAgICAgICAgIyMgZ2V0IHB5dGhvbiBsb2NhdGlvbgogICAgICAgIHB5dGhvbmRpciA9IHN5cy5leGVjdXRhYmxlLnNwbGl0KCcvYmluJylbMF0KCiAgICAgICAgIyMgcmVhZCBzbHVybSB0ZW1wbGF0ZSBmcm9tIC5zbHVybSBmaWxlcwogICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCclcy5zbHVybScgJSAoc2VsZi50aXRsZSkpID09IFRydWU6CiAgICAgICAgICAgIHdpdGggb3BlbignJXMuc2x1cm0nICUgKHNlbGYudGl0bGUpKSBhcyB0ZW1wbGF0ZToKICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24gPSB0ZW1wbGF0ZS5yZWFkKCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzeXMuZXhpdCgnXG4gIEZpbGVOb3RGb3VuZEVycm9yXG4gIFB5UkFJMk1EOiBsb29raW5nIGZvciBzdWJtaXNzaW9uIGZpbGUgJXMuc2x1cm0nICUgKHNlbGYudGl0bGUpKQoKICAgICAgICBzdWJtaXNzaW9uICs9IHNlbGYucnVuc2NyaXB0CgogICAgICAgIHdpdGggb3BlbignJXMvJXMuc2JhdGNoJyAlIChzZWxmLmNhbGNkaXIsIHNlbGYudGl0bGUpLCAndycpIGFzIG91dDoKICAgICAgICAgICAgb3V0LndyaXRlKHN1Ym1pc3Npb24pCgogICAgICAgIHJldHVybiBzZWxmCgogICAgZGVmIF9zZXR1cF90cmFpbmluZyhzZWxmKToKICAgICAgICAjIyB3cml0ZSBQeVJBSTJNRCBpbnB1dAoKICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmNhbGNkaXIpID09IEZhbHNlOgogICAgICAgICAgICBvcy5tYWtlZGlycyhzZWxmLmNhbGNkaXIpCgogICAgICAgIHdpdGggb3BlbignJXMvaW5wdXQuanNvbicgJSAoc2VsZi5jYWxjZGlyKSwgJ3cnKSBhcyBvdXQ6CiAgICAgICAgICAgIGpzb24uZHVtcChzZWxmLmtleXdvcmRzLCBvdXQpCgogICAgICAgICMjIHdyaXRlIHJ1biBzY3JpcHQKICAgICAgICB3aXRoIG9wZW4oJyVzLyVzLnNoJyAlIChzZWxmLmNhbGNkaXIsIHNlbGYudGl0bGUpLCAndycpIGFzIG91dDoKICAgICAgICAgICAgb3V0LndyaXRlKHNlbGYucnVuc2NyaXB0KQoKICAgICAgICAjIyBzZXR1cCBIUEMgc2V0dGluZwogICAgICAgIGlmIHNlbGYudXNlX2hwYyA9PSAxOgogICAgICAgICAgICBzZWxmLl9zZXR1cF9ocGMoKQoKICAgICAgICByZXR1cm4gc2VsZgoKICAgIGRlZiBfc3RhcnRfdHJhaW5pbmcoc2VsZik6CiAgICAgICAgIyMgZGlzdHJpYnV0ZSBOTiB0cmFpbmluZwoKICAgICAgICBtYWluZGlyID0gb3MuZ2V0Y3dkKCkKICAgICAgICBvcy5jaGRpcihzZWxmLmNhbGNkaXIpCiAgICAgICAgaWYgc2VsZi51c2VfaHBjID09IDE6CiAgICAgICAgICAgIHN1YnByb2Nlc3MucnVuKFsnc2JhdGNoJywgJy1XJywgJyVzLyVzLnNiYXRjaCcgJSAoc2VsZi5jYWxjZGlyLCBzZWxmLnRpdGxlKV0pCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc3VicHJvY2Vzcy5ydW4oWydiYXNoJywgJyVzLyVzLnNoJyAlIChzZWxmLmNhbGNkaXIsIHNlbGYudGl0bGUpXSkKICAgICAgICBvcy5jaGRpcihtYWluZGlyKQoKICAgICAgICByZXR1cm4gc2VsZgoKICAgIGRlZiBfcmVhZF90cmFpbmluZyhzZWxmKToKICAgICAgICAjIyByZWFkIHRyYWluaW5nIG1ldHJpY3MKICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygnJXMvTk4tJXMubG9nJyAlIChzZWxmLmNhbGNkaXIsIHNlbGYudGl0bGUpKSA9PSBGYWxzZToKICAgICAgICAgICAgcmV0dXJuIHsncGF0aCcgOiBzZWxmLmNhbGNkaXIsICdzdGF0dXMnIDogMH0KCiAgICAgICAgd2l0aCBvcGVuKCclcy9OTi0lcy5sb2cnICUgKHNlbGYuY2FsY2Rpciwgc2VsZi50aXRsZSksICdyJykgYXMgb3V0OgogICAgICAgICAgICBsb2cgPSBvdXQucmVhZCgpLnNwbGl0bGluZXMoKQo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgIG5uMSA9IGxvZ1tuICsgNF0KICAgICAgICAgICAgICAgIG5uMiA9IGxvZ1tuICsgNV0KICAgICAgICBubjEgPSBbZmxvYXQgKHgpIGZvciB4IGluIG5uMS5zcGxpdCgpXQogICAgICAgIG5uMiA9IFtmbG9hdCAoeCkgZm9yIHggaW4gbm4yLnNwbGl0KCldCgogICAgICAgIG1ldHJpY3MgPSB7CiAgICAgICAgICAgICdwYXRoJyAgIDogc2VsZi5jYWxjZGlyLAogICAgICAgICAgICAnc3RhdHVzJyA6IDEsCiAgICAgICAgICAgICdlMScgICAgIDogbm4xWzBdLAogICAgICAgICAgICAnZzEnICAgICA6IG5uMVsxXSwKICAgICAgICAgICAgJ24xJyAgICAgOiBubjFbMl0sCiAgICAgICAgICAgICdzMScgICAgIDogbm4xWzNdLAogICAgICAgICAgICAnZTInICAgICA6IG5uMlswXSwKICAgICAgICAgICAgJ2cyJyAgICAgOiBubjJbMV0sCiAgICAgICAgICAgICduMicgICAgIDogbm4yWzJdLAogICAgICAgICAgICAnczInICAgICA6IG5uMlszXSwKICAgICAgICAgICAgfQoKICAgICAgICByZXR1cm4gbWV0cmljcwoKICAgIGRlZiB0cmFpbihzZWxmKToKICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCgogICAgICAgIGlmIHNlbGYucmV0cmlldmUgPT0gMDoKICAgICAgICAgICAgc2VsZi5fc2V0dXBfdHJhaW5pbmcoKQogICAgICAgICAgICBzZWxmLl9zdGFydF90cmFpbmluZygpCgogICAgICAgIG1ldHJpY3MgPSBzZWxmLl9yZWFkX3RyYWluaW5nKCkKCiAgICAgICAgZW5kID0gdGltZS50aW1lKCkKICAgICAgICB3YWxsdGltZSA9IEhvd0xvbmcoc3RhcnQsIGVuZCkKCiAgICAgICAgbWV0cmljc1sndGltZSddID0gZW5kIC0gc3RhcnQKICAgICAgICBtZXRyaWNzWyd3YWxsdGltZSddID0gd2FsbHRpbWUKCiAgICAgICAgcmV0dXJuIG1ldHJpY3MKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgbG9nID0gbG9nWy0xMDpdCiAgICAgICAgZm9yIG4sIGxpbmUgaW4gZW51bWVyYXRlKGxvZyk6CiAgICAgICAgICAgIGlmICIiIiZubiB2YWxpZGF0aW9uIG1lYW4gYWJzb2x1dGUgZXJyb3IiIiIgaW4gbGluZToKPHxmaW1fZW5kfD4="]
["abbe7a92c9b98452493e5aa8249cb7e9cc8ecb1c-2","abbe7a92c9b98452493e5aa8249cb7e9cc8ecb1c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRhdGFjbGFzc2VzCgoKQGRhdGFjbGFzc2VzLmRhdGFjbGFzcwpjbGFzcyBJbmhlcml0YW5jZToKICAgIGJhc2VfbmFtZTogc3RyCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGJhc2VfdXJpOiBzdHIKICAgIGNsYXNzX3VyaTogc3RyCiAgICBjbGFzc19uYW1lOiBzdHIKICAgIGRlcHJlY2F0ZWRfdmVyc2lvbjogc3RyCjx8ZmltX2VuZHw+"]
["75be3782349d831164926b99cdca41e414e53f3b-1","75be3782349d831164926b99cdca41e414e53f3b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIGNvbXBsZXhfbW9kZWwuUkZFeGNlcHRpb24gaW1wb3J0IFJGQmFzZUV4Y2VwdGlvbgoKCmNsYXNzIFJGQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiBhc3NlcnRSYWlzZXNXaXRoRXJyb3JDb2RlKHNlbGYsIGVycm9yX2NvZGUsIGZ1bmMsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgdHJ5Ogo8fGZpbV9ob2xlfD4KICAgICAgICBleGNlcHQgUkZCYXNlRXhjZXB0aW9uIGFzIGluc3Q6CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyb3JfY29kZSwgaW5zdC5lcnJvcl9jb2RlKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBmdW5jKCphcmdzLCAqKmt3YXJncykKICAgICAgICAgICAgc2VsZi5mYWlsKCkKPHxmaW1fZW5kfD4="]
["f9a7114eddc85a8138f19e52143ab7aa5db03980-4","f9a7114eddc85a8138f19e52143ab7aa5db03980","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uIC11IAoKIyBSZWZzOgojICAgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjY0ODE1MS9weXRob24tZnJlcXVlbmN5LWRldGVjdGlvbgojICAgaHR0cHM6Ly9wZW9wbGUuY3NhaWwubWl0LmVkdS9odWJlcnQvcHlhdWRpby9kb2NzLwoKIyBPbiBlYWNoIHN0cmluZywgbGlnaHQgZWFjaCBMRUQgaW4gc2VxdWVuY2UsIGFuZCByZXBlYXQuCgppbXBvcnQgc3lzCmltcG9ydCBzZWxlY3QKaW1wb3J0IG9wYywgdGltZQpmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZGludAppbXBvcnQgbWF0aApmcm9tIGFzdCBpbXBvcnQgbGl0ZXJhbF9ldmFsCgpjbGllbnQgPSBvcGMuQ2xpZW50KCdsb2NhbGhvc3Q6Nzg5MCcpCgojc3RhcnRfY29sb3IgPSAocmFuZGludCgwLDI1NSksIHJhbmRpbnQoMCwyNTUpLCByYW5kaW50KDAsMjU1KSkKc3RhcnRfY29sb3IgPSAoMjU1LDEyOCwwKQoKIyBmaWxlcyBtb25pdG9yZWQgZm9yIGlucHV0CnJlYWRfbGlzdCA9IFtzeXMuc3RkaW5dCgojIGdlbmVyYWwgY29uc3RhbnRzCmxlZHNfaW5fc3RyaW5nID0gNjQKdG90YWxfc3RyaW5ncyA9IDQKdG90YWxfbGVkcyA9IGxlZHNfaW5fc3RyaW5nICogdG90YWxfc3RyaW5ncwpzbGVlcHRpbWUgPSAwLjAyICNvcmlnIDAuMDEKCiMgcHVsc2UgY29uc3RhbnRzCndpZHRoX29mX3B1bHNlID0gNSAgICMgdGhpcyBzaG91bGQgYmUgYW4gb2RkIG51bWJlcgpwdWxzZV9kZWNheSA9IDAuNzUKcHVsc2VfYmtnZF9jb2xvciA9ICgzMiwzMiwzMikKCiMgaWRsZSBjb25zdGFudHMKbWluYnJpZ2h0ID0gMTYgICAjIG9yaWcgMS4yNQptYXhicmlnaHQgPSAxMjggICMgb3JpZyAyNTUKI3NsZWVwdGltZSA9IDAuMDUgICAgIyBvcmlnIDAuMDUKaWRsZV9pbmNyID0gMC4wNzUgIyBvcmlnIDAuNAoKY2xhc3MgRmllbGQob2JqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLl9wdWxzZXMgPSBbXQogICAgICAgIHNlbGYuX3BpeGVscyA9IFtdCiAgICAgICAgc2VsZi5faWRsZV9tYXJrZXIgPSAwCgogICAgZGVmIF9zZXRfcGl4ZWwoc2VsZiwgbGVkX2luZGV4LCBjb2xvcik6CiAgICAgICAgaWYgKDAgPD0gbGVkX2luZGV4IDw9IGxlZHNfaW5fc3RyaW5nLTEpOgogICAgICAgICAgICBmb3Igc3RyaW5nIGluIHJhbmdlKHRvdGFsX3N0cmluZ3MpOgogICAgICAgICAgICAgICAgaW5kZXggPSBzdHJpbmcgKiBsZWRzX2luX3N0cmluZyArIGxlZF9pbmRleAogICAgICAgICAgICAgICAgc2VsZi5fcGl4ZWxzW2luZGV4XSA9IGNvbG9yCgogICAgZGVmIF9zZXRfZmllbGQoc2VsZiwgY29sb3IpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5fcGl4ZWxzID0gWyBjb2xvciBdICogdG90YWxfbGVkcwoKPHxmaW1fZW5kfD4="]
["abe06abe8db5d7189a31d9bd9d6fd10426262597-1","abe06abe8db5d7189a31d9bd9d6fd10426262597","PHxmaW1fcHJlZml4fD4KIiIiVGVzdCB0aGUgYnVuZGxlZCBDeWNsZSBEYXRlIGFuYWx5emVyLiIiIgoKCmltcG9ydCBweXRlc3QKCgpAcHl0ZXN0LmZpeHR1cmUKZGVmIGtsYXNzKCk6CiAgICAiIiJSZXR1cm4gdGhlIENsYXNzIFVuZGVyIFRlc3QuIiIiCiAgICBmcm9tIGFnaWxlX2FuYWx5dGljcy5hbmFseXplcnMgaW1wb3J0IERhdGVBbmFseXplcgogICAgcmV0dXJuIERhdGVBbmFseXplcgoKCkBweXRlc3QuZml4dHVyZQpkZWYgYW5hbHl6ZXIoa2xhc3MpOgogICAgIiIiUmV0dXJuIGFuIGluc3RhbmNlIG9mIHRoZSBDVVQgd2l0aCBzb21lIGRlZmF1bHRzLiIiIgogICAgYSA9IGtsYXNzKAogICAgICAgIHN0YXJ0X3N0YXRlcz1bdSJJbiBQcm9ncmVzcyIsIF0sCiAgICAgICAgY29tbWl0X3N0YXRlcz1bdSJTZWxlY3RlZCIsIF0sCiAgICAgICAgZW5kX3N0YXRlcz1bdSJEb25lIiwgXQogICAgKQogICAgcmV0dXJuIGEKCgpkZWYgdGVzdF9jb25maWcoYW5hbHl6ZXIpOgogICAgIiIiRW5zdXJlIHRoZSBhbmFseXplciBpbml0cyBwcm9wZXJseS4iIiIKICAgIGFzc2VydCB1IkluIFByb2dyZXNzIiBpbiBhbmFseXplci5zdGFydF9zdGF0ZXMKCgpkZWYgdGVzdF9taXNzaW5nX2NvbmZpZyhrbGFzcyk6CiAgICAiIiJHZXQgYW4gZXJyb3IuIiIiCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVHlwZUVycm9yKToKICAgICAgICBrbGFzcygpCgoKZGVmIHRlc3RfYW5hbHl6ZV9ub19kYXRhKGFuYWx5emVyKToKICAgICIiIkdldCBhbiBlcnJvci4iIiIKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgIGFuYWx5emVyLmFuYWx5emUoKQoKCmRlZiB0ZXN0X2FuYWx5emVfZW50ZXJlZF9hdChhbmFseXplciwgVGlja2V0LCBkYXlzX2Fnbyk6CiAgICAiIiJBbmFseXplZCB0aWNrZXRzIHNob3VsZCBoYXZlIGVudGVyZWRfYXQgZGF0ZXMgZm9yIGFsbCAzIHN0YXRlcy4iIiIKICAgIHQgPSBUaWNrZXQoCiAgICAgICAga2V5PSJURVNULTEiLAogICAgICAgIGNyZWF0ZWRfYXQ9ZGF5c19hZ28oMTApLAogICAgICAgIHVwZGF0ZWRfYXQ9ZGF5c19hZ28oMCksCiAgICAgICAgZmxvd19sb2dzPVsKICAgICAgICAgICAgZGljdChlbnRlcmVkX2F0PWRheXNfYWdvKDcpLCBzdGF0ZT0iU2VsZWN0ZWQiKSwKICAgICAgICAgICAgZGljdChlbnRlcmVkX2F0PWRheXNfYWdvKDUpLCBzdGF0ZT0iSW4gUHJvZ3Jlc3MiKSwKICAgICAgICAgICAgZGljdChlbnRlcmVkX2F0PWRheXNfYWdvKDIpLCBzdGF0ZT0iRG9uZSIpCiAgICAgICAgXQogICAgKQogICAgcmVzdWx0cywgaWdub3JlZF9pc3N1ZXMgPSBhbmFseXplci5hbmFseXplKFt0LCBdKQogICAgYXNzZXJ0IHJlc3VsdHNbMF0uZW5kZWRbJ2VudGVyZWRfYXQnXSA9PSBkYXlzX2FnbygyKQogICAgYXNzZXJ0IHJlc3VsdHNbMF0uc3RhcnRlZFsnZW50ZXJlZF9hdCddID09IGRheXNfYWdvKDUpCiAgICBhc3NlcnQgcmVzdWx0c1swXS5jb21taXR0ZWRbJ2VudGVyZWRfYXQnXSA9PSBkYXlzX2Fnbyg3KQogICAgYXNzZXJ0IGxlbihpZ25vcmVkX2lzc3VlcykgPT0gMAoKCmRlZiB0ZXN0X2FuYWx5emVfbWlzc2luZ19jb21taXR0ZWRfc3RhdGUoYW5hbHl6ZXIsIFRpY2tldCwgZGF5c19hZ28pOgogICAgIiIiQSB0aWNrZXQgd2hpY2ggaXMgbWlzc2luZyBjb21taXR0ZWQsIHNob3VsZCBiZSBpZ25vcmVkLiIiIgogICAgdCA9IFRpY2tldCgKICAgICAgICBrZXk9IlRFU1QtMSIsCiAgICAgICAgY3JlYXRlZF9hdD1kYXlzX2FnbygxMCksCiAgICAgICAgdXBkYXRlZF9hdD1kYXlzX2FnbygwKSwKICAgICAgICBmbG93X2xvZ3M9WwogICAgICAgICAgICBkaWN0KGVudGVyZWRfYXQ9ZGF5c19hZ28oNyksIHN0YXRlPSJCYWNrbG9nIiksICAjIERvZXNuJ3QgbWF0Y2ggY29uZmlnCiAgICAgICAgICAgIGRpY3QoZW50ZXJlZF9hdD1kYXlzX2Fnbyg1KSwgc3RhdGU9IkluIFByb2dyZXNzIiksCiAgICAgICAgICAgIGRpY3QoZW50ZXJlZF9hdD1kYXlzX2FnbygyKSwgc3RhdGU9IkRvbmUiKQogICAgICAgIF0KICAgICkKICAgIHJlc3VsdHMsIGlnbm9yZWRfaXNzdWVzID0gYW5hbHl6ZXIuYW5hbHl6ZShbdCwgXSkKICAgIGFzc2VydCBsZW4oaWdub3JlZF9pc3N1ZXMpID09IDEKICAgIGFzc2VydCBpZ25vcmVkX2lzc3Vlc1swXVsndGlja2V0J10ua2V5ID09ICJURVNULTEiCiAgICBhc3NlcnQgaWdub3JlZF9pc3N1ZXNbMF1bJ3BoYXNlJ10gPT0gImNvbW1pdHRlZCIKCgpkZWYgdGVzdF9waWNrX29sZGVzdF9kYXRlKGFuYWx5emVyLCBUaWNrZXQsIGRheXNfYWdvKToKICAgICIiIlBpY2sgdGhlIG9sZGVzdCBlbnRlcmVkX2F0IGZyb20gdGhlIHRpY2tldCdzIGhpc3RvcnkuIiIiCiAgICB0ZXN0X2Zsb3dfbG9ncyA9IFsKICAgICAgICBkaWN0KGVudGVyZWRfYXQ9ZGF5c19hZ28oMTApLCBzdGF0ZT0iU2VsZWN0ZWQiKSwKICAgICAgICBkaWN0KGVudGVyZWRfYXQ9ZGF5c19hZ28oOSksIHN0YXRlPSJJbiBQcm9ncmVzcyIpLAogICAgICAgIGRpY3QoZW50ZXJlZF9hdD1kYXlzX2Fnbyg4KSwgc3RhdGU9IlNlbGVjdGVkIiksCiAgICAgICAgZGljdChlbnRlcmVkX2F0PWRheXNfYWdvKDUpLCBzdGF0ZT0iSW4gUHJvZ3Jlc3MiKSwKICAgICAgICBkaWN0KGVudGVyZWRfYXQ9ZGF5c19hZ28oMiksIHN0YXRlPSJEb25lIiksCiAgICBdCiAgICB0ID0gVGlja2V0KAogICAgICAgIGtleT0iVEVTVC0xIiwKICAgICAgICBjcmVhdGVkX2F0PWRheXNfYWdvKDE1KSwKICAgICAgICB1cGRhdGVkX2F0PWRheXNfYWdvKDApLAogICAgICAgIGZsb3dfbG9ncz10ZXN0X2Zsb3dfbG9ncwogICAgKQogICAgcmVzdWx0cywgaWdub3JlZF9pc3N1ZXMgPSBhbmFseXplci5hbmFseXplKFt0LCBdKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBhc3NlcnQgcmVzdWx0c1swXS5jb21taXR0ZWRbJ2VudGVyZWRfYXQnXSA9PSBkYXlzX2FnbygxMCkKICAgIGFzc2VydCByZXN1bHRzWzBdLnN0YXJ0ZWRbJ2VudGVyZWRfYXQnXSA9PSBkYXlzX2Fnbyg5KQoKCjx8ZmltX2VuZHw+"]
["c6fe9a351584666b109c6d42ba88e3bac7b67d9f-4","c6fe9a351584666b109c6d42ba88e3bac7b67d9f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZApmcm9tIHV0aWxpdGVzLnV0aWxpdHlfZnVuY3Rpb25zIGltcG9ydCBQaXRjaF9jbGFzcwpmcm9tIHV0aWxpdGVzLmRhdGFfbG9hZGluZyBpbXBvcnQgY2hvb3NlZF9tYXRjaF9kYXRhZnJhbWUKCmRlZiBzaG93X2dvYWxzX3Zpeihob21lX3RlYW0sYXdheV90ZWFtLGV2ZW50X3R5cGUpOgogICAgZGYgPSBjaG9vc2VkX21hdGNoX2RhdGFmcmFtZShob21lX3RlYW0sYXdheV90ZWFtLGV2ZW50X3R5cGUpCiAgICBnb2FscyA9IGRmLmxvY1tkZlsnc2hvdF9vdXRjb21lJ10gPT0gJ0dvYWwnXS5zZXRfaW5kZXgoJ2lkJykKICAgIGdvYWxzID0gZ29hbHNbZ29hbHNbJ3BlcmlvZCddIDwgNV0KICAgIG93bl9nb2FscyA9IGRmLmxvY1tkZlsndHlwZSddID09ICdPd24gR29hbCBBZ2FpbnN0J10uc2V0X2luZGV4KCdpZCcpCiAgICBnb2FscyA9IFtnb2Fscywgb3duX2dvYWxzXQogICAgZ29hbHMgPSBwZC5jb25jYXQoZ29hbHMpCiAgICBnb2Fscy5zb3J0X3ZhbHVlcyhieT0nbWludXRlJywgaW5wbGFjZT1UcnVlKQoKICAgIGlmIGxlbihnb2FscykgPT0gMDoKICAgICAgICByZXR1cm4KICAgICNDcmVhdGUgcGl0Y2hlcyBmb3IgdGhlIHRvdGFsIG51bWJlciBvZiBnb2FscwogICAgcGl0Y2ggPSBQaXRjaF9jbGFzcygpCiAgICBpZiBsZW4oZ29hbHMpID4gMToKICAgICAgICBwaXRjaCwgZmlnLCBheHMgPSBwaXRjaC5jcmVhdGVfcGl0Y2gobGVuKGdvYWxzKSwgMSkKICAgIGVsaWYgbGVuKGdvYWxzKSA9PSAxOgogICAgICAgIHBpdGNoLCBmaWcsIGF4ID0gcGl0Y2guY3JlYXRlX3BpdGNoKCkKCiAgICAjR29hbCBjb3VudCBmb3Igc2hvdyBjdXJyZW50IHNjb3JlCiAgICBob21lX2dvYWxfY291bnQgPSAwCiAgICBhd2F5X2dvYWxfY291bnQgPSAwCiAgICAgICAgCiAgICAjRWFjaCBpdGVyYXRpb24gd29ya3MgZm9yIGEgZ29hbAogICAgdHJ5OgogICAgICAgIGZvciBpZHgsIGF4IGluIGVudW1lcmF0ZShheHNbJ3BpdGNoJ10uZmxhdCk6CiAgICAKICAgICAgICAgICAgI0dvYWwncyBzdGFydCBwb3NpdGlvbnMKICAgICAgICAgICAgeF9zdGFydCA9IGdvYWxzWydsb2NhdGlvbiddW2lkeF1bMF0KICAgICAgICAgICAgeV9zdGFydCA9IGdvYWxzWydsb2NhdGlvbiddW2lkeF1bMV0KICAgICAgICAgICAgCiAgICAgICAgICAgICNUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGdvYWwuIEdvYWwgYW5kIE93biBHb2FsLgogICAgICAgICAgICAjTm9ybWFsIGdvYWxzJyB0eXBlIGFyZSAnU2hvdCcKICAgICAgICAgICAgaWYgIGdvYWxzWyd0eXBlJ11baWR4XSA9PSAnU2hvdCc6CiAgICAgICAgICAgICAgICAjR29hbCdzIGVuZCBsb2NhdGlvbnMKICAgICAgICAgICAgICAgIHhfZW5kID0gZ29hbHNbJ3Nob3RfZW5kX2xvY2F0aW9uJ11baWR4XVswXQogICAgICAgICAgICAgICAgeV9lbmQgPSBnb2Fsc1snc2hvdF9lbmRfbG9jYXRpb24nXVtpZHhdWzFdCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHRlYW1fbmFtZSA9IGdvYWxzWydwb3NzZXNzaW9uX3RlYW0nXVtpZHhdICNHZXQgdGhlIHNjb3JlciB0ZWFtCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICNTaG93IGFycm93cyBieSBkaWZmZXJlbnQgY29sb3JzLiBob21lIHRlYW0gLT4gZ3JlZW4uIGF3YXkgdGVhbSAtPiByZWQKICAgICAgICAgICAgICAgIGlmKHRlYW1fbmFtZSA9PSBob21lX3RlYW0pOgogICAgICAgICAgICAgICAgICAgIGhvbWVfZ29hbF9jb3VudCArPSAxCiAgICAgICAgICAgICAgICAgICAgcGl0Y2guYXJyb3dzKHhfc3RhcnQsIHlfc3RhcnQsIHhfZW5kLCB5X2VuZCwgYXg9YXgsIGNvbG9yPSdncmVlbicsIHdpZHRoPTEpCiAgICAgICAgICAgICAgICAgICAgYXgudGV4dCgwLCAtNSwgZ29hbHNbJ3BsYXllciddW2lkeF0gKyAiJ3MgR29hbCIsIGhhPSdsZWZ0JywgdmE9J2NlbnRlcicsIGZvbnRzaXplPTUpCiAgICAgICAgICAgICAgICAgICAgYXgudGV4dCgxMjAsIC01LCAnU2NvcmUgJyArIHN0cihob21lX2dvYWxfY291bnQpICsgIiAtICIgKyBzdHIoYXdheV9nb2FsX2NvdW50KSwgaGE9J3JpZ2h0JywgdmE9J2NlbnRlcicsIGZvbnRzaXplPTUpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIGF3YXlfZ29hbF9jb3VudCArPSAxCiAgICAgICAgICAgICAgICAgICAgcGl0Y2guYXJyb3dzKHhfc3RhcnQsIHlfc3RhcnQsIHhfZW5kLCB5X2VuZCwgYXg9YXgsIGNvbG9yPSdibHVlJywgd2lkdGg9MSkKICAgICAgICAgICAgICAgICAgICBheC50ZXh0KDAsIC01LCBnb2Fsc1sncGxheWVyJ11baWR4XSArICIncyBHb2FsIiwgaGE9J2xlZnQnLCB2YT0nY2VudGVyJywgZm9udHNpemU9NSkKICAgICAgICAgICAgICAgICAgICBheC50ZXh0KDEyMCwgLTUsICdTY29yZSAnICsgc3RyKGhvbWVfZ29hbF9jb3VudCkgKyAiIC0gIiArIHN0cihhd2F5X2dvYWxfY291bnQpLCBoYT0ncmlnaHQnLCB2YT0nY2VudGVyJywgZm9udHNpemU9NSkKICAgICAgICAgICAKICAgICAgICAgICAgI093biBnb2FscycgdHlwZSBhcmUgbm90ICdTaG90JwogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICNPd24gZ29hbHMgYXJlIG5vdCBtYWRlIGJ5IHNob3RzLiBTbyB0aGV5IGRvbid0IGhhdmUgYW55IGxvY2F0aW9uIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgIHRlYW1fbmFtZSA9IGdvYWxzWydwb3NzZXNzaW9uX3RlYW0nXVtpZHhdCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICNTaG93IGRvdHMgYnkgZGlmZmVyZW50IGNvbG9ycy4gaG9tZSB0ZWFtIC0+IGdyZWVuLiBhd2F5IHRlYW0gLT4gcmVkCiAgICAgICAgICAgICAgICAgaWYodGVhbV9uYW1lID09IGhvbWVfdGVhbSk6CiAgICAgICAgICAgICAgICAgICAgaG9tZV9nb2FsX2NvdW50ICs9IDEKICAgICAgICAgICAgICAgICAgICBwaXRjaC5zY2F0dGVyKHhfc3RhcnQsIHlfc3RhcnQsIGF4PWF4LCBjPSdncmVlbicsIHM9NikKICAgICAgICAgICAgICAgICAgICBheC50ZXh0KDAsIC01LCBnb2Fsc1sncGxheWVyJ11baWR4XSArICIncyBvd24gZ29hbCIsIGhhPSdsZWZ0JywgdmE9J2NlbnRlcicsIGZvbnRzaXplPTUpCiAgICAgICAgICAgICAgICAgICAgYXgudGV4dCgxMjAsIC01LCAnU2NvcmUgJyArIHN0cihob21lX2dvYWxfY291bnQpICsgIiAtICIgKyBzdHIoYXdheV9nb2FsX2NvdW50KSwgaGE9J3JpZ2h0JywgdmE9J2NlbnRlcicsIGZvbnRzaXplPTUpCiAgICAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIGF3YXlfZ29hbF9jb3VudCArPSAxCiAgICAgICAgICAgICAgICAgICAgcGl0Y2guc2NhdHRlcih4X3N0YXJ0LCB5X3N0YXJ0LCBheD1heCwgYz0nYmx1ZScsIHM9NikKICAgICAgICAgICAgICAgICAgICBheC50ZXh0KDAsIC01LCBnb2Fsc1sncGxheWVyJ11baWR4XSArICIncyBPd24gR29hbCIsIGhhPSdsZWZ0JywgdmE9J2NlbnRlcicsIGZvbnRzaXplPTUpCiAgICAgICAgICAgICAgICAgICAgYXgudGV4dCgxMjAsIC01LCAnU2NvcmUgJyArIHN0cihob21lX2dvYWxfY291bnQpICsgIiAtICIgKyBzdHIoYXdheV9nb2FsX2NvdW50KSwgaGE9J3JpZ2h0JywgdmE9J2NlbnRlcicsIGZvbnRzaXplPTUpCiAgICBleGNlcHQ6CiAgICAgICAgaWR4ID0gMAogICAgICAgICNHb2FsJ3Mgc3RhcnQgcG9zaXRpb25zCiAgICAgICAgeF9zdGFydCA9IGdvYWxzWydsb2NhdGlvbiddW2lkeF1bMF0KICAgICAgICB5X3N0YXJ0ID0gZ29hbHNbJ2xvY2F0aW9uJ11baWR4XVsxXQogICAgICAgIAogICAgICAgICNUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGdvYWwuIEdvYWwgYW5kIE93biBHb2FsLgogICAgICAgICNOb3JtYWwgZ29hbHMnIHR5cGUgYXJlICdTaG90JwogICAgICAgIGlmICBnb2Fsc1sndHlwZSddW2lkeF0gPT0gJ1Nob3QnOgogICAgICAgICAgICAjR29hbCdzIGVuZCBsb2NhdGlvbnMKICAgICAgICAgICAgeF9lbmQgPSBnb2Fsc1snc2hvdF9lbmRfbG9jYXRpb24nXVtpZHhdWzBdCjx8ZmltX2hvbGV8PgogICAgICAgICAgICAjU2hvdyBhcnJvd3MgYnkgZGlmZmVyZW50IGNvbG9ycy4gaG9tZSB0ZWFtIC0+IGdyZWVuLiBhd2F5IHRlYW0gLT4gcmVkCiAgICAgICAgICAgIGlmKHRlYW1fbmFtZSA9PSBob21lX3RlYW0pOgogICAgICAgICAgICAgICAgaG9tZV9nb2FsX2NvdW50ICs9IDEKICAgICAgICAgICAgICAgIHBpdGNoLmFycm93cyh4X3N0YXJ0LCB5X3N0YXJ0LCB4X2VuZCwgeV9lbmQsIGF4PWF4LCBjb2xvcj0nZ3JlZW4nLCB3aWR0aD0xKQogICAgICAgICAgICAgICAgYXgudGV4dCgwLCAtNSwgZ29hbHNbJ3BsYXllciddW2lkeF0gKyAiJ3MgR29hbCIsIGhhPSdsZWZ0JywgdmE9J2NlbnRlcicsIGZvbnRzaXplPTUpCiAgICAgICAgICAgICAgICBheC50ZXh0KDEyMCwgLTUsICdTY29yZSAnICsgc3RyKGhvbWVfZ29hbF9jb3VudCkgKyAiIC0gIiArIHN0cihhd2F5X2dvYWxfY291bnQpLCBoYT0ncmlnaHQnLCB2YT0nY2VudGVyJywgZm9udHNpemU9NSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGF3YXlfZ29hbF9jb3VudCArPSAxCiAgICAgICAgICAgICAgICBwaXRjaC5hcnJvd3MoeF9zdGFydCwgeV9zdGFydCwgeF9lbmQsIHlfZW5kLCBheD1heCwgY29sb3I9J2JsdWUnLCB3aWR0aD0xKQogICAgICAgICAgICAgICAgYXgudGV4dCgwLCAtNSwgZ29hbHNbJ3BsYXllciddW2lkeF0gKyAiJ3MgR29hbCIsIGhhPSdsZWZ0JywgdmE9J2NlbnRlcicsIGZvbnRzaXplPTUpCiAgICAgICAgICAgICAgICBheC50ZXh0KDEyMCwgLTUsICdTY29yZSAnICsgc3RyKGhvbWVfZ29hbF9jb3VudCkgKyAiIC0gIiArIHN0cihhd2F5X2dvYWxfY291bnQpLCBoYT0ncmlnaHQnLCB2YT0nY2VudGVyJywgZm9udHNpemU9NSkKICAgICAgICAKICAgICAgICAjT3duIGdvYWxzJyB0eXBlIGFyZSBub3QgJ1Nob3QnCiAgICAgICAgZWxzZToKICAgICAgICAgICAgICNPd24gZ29hbHMgYXJlIG5vdCBtYWRlIGJ5IHNob3RzLiBTbyB0aGV5IGRvbid0IGhhdmUgYW55IGxvY2F0aW9uIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgdGVhbV9uYW1lID0gZ29hbHNbJ3Bvc3Nlc3Npb25fdGVhbSddW2lkeF0KICAgICAgICAKICAgICAgICAgICAgICNTaG93IGRvdHMgYnkgZGlmZmVyZW50IGNvbG9ycy4gaG9tZSB0ZWFtIC0+IGdyZWVuLiBhd2F5IHRlYW0gLT4gcmVkCiAgICAgICAgICAgICBpZih0ZWFtX25hbWUgPT0gaG9tZV90ZWFtKToKICAgICAgICAgICAgICAgIGhvbWVfZ29hbF9jb3VudCArPSAxCiAgICAgICAgICAgICAgICBwaXRjaC5zY2F0dGVyKHhfc3RhcnQsIHlfc3RhcnQsIGF4PWF4LCBjPSdncmVlbicsIHM9NikKICAgICAgICAgICAgICAgIGF4LnRleHQoMCwgLTUsIGdvYWxzWydwbGF5ZXInXVtpZHhdICsgIidzIG93biBnb2FsIiwgaGE9J2xlZnQnLCB2YT0nY2VudGVyJywgZm9udHNpemU9NSkKICAgICAgICAgICAgICAgIGF4LnRleHQoMTIwLCAtNSwgJ1Njb3JlICcgKyBzdHIoaG9tZV9nb2FsX2NvdW50KSArICIgLSAiICsgc3RyKGF3YXlfZ29hbF9jb3VudCksIGhhPSdyaWdodCcsIHZhPSdjZW50ZXInLCBmb250c2l6ZT01KQogICAgICAgIAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGF3YXlfZ29hbF9jb3VudCArPSAxCiAgICAgICAgICAgICAgICBwaXRjaC5zY2F0dGVyKHhfc3RhcnQsIHlfc3RhcnQsIGF4PWF4LCBjPSdibHVlJywgcz02KQogICAgICAgICAgICAgICAgYXgudGV4dCgwLCAtNSwgZ29hbHNbJ3BsYXllciddW2lkeF0gKyAiJ3MgT3duIEdvYWwiLCBoYT0nbGVmdCcsIHZhPSdjZW50ZXInLCBmb250c2l6ZT01KQogICAgICAgICAgICAgICAgYXgudGV4dCgxMjAsIC01LCAnU2NvcmUgJyArIHN0cihob21lX2dvYWxfY291bnQpICsgIiAtICIgKyBzdHIoYXdheV9nb2FsX2NvdW50KSwgaGE9J3JpZ2h0JywgdmE9J2NlbnRlcicsIGZvbnRzaXplPTUpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHlfZW5kID0gZ29hbHNbJ3Nob3RfZW5kX2xvY2F0aW9uJ11baWR4XVsxXQogICAgICAgICAgICAKICAgICAgICAgICAgdGVhbV9uYW1lID0gZ29hbHNbJ3Bvc3Nlc3Npb25fdGVhbSddW2lkeF0gI0dldCB0aGUgc2NvcmVyIHRlYW0KICAgICAgICAgICAgCjx8ZmltX2VuZHw+"]
["55283a7ae9a7a0f916b246bc8410f82dbebe90a4-1","55283a7ae9a7a0f916b246bc8410f82dbebe90a4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBweWFiZgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcyBhcyBwZApmcm9tIHNjaXB5LnNpZ25hbCBpbXBvcnQgYnV0dGVyLCBmaWx0ZmlsdAppbXBvcnQgdXRpbHMKaW1wb3J0IGRhdGV0aW1lCgpjbGFzcyBDb252ZXJ0ZXI6CgogICAgZGVmIGNvbnZlcnQoc2VsZiwgYWJmKToKICAgICAgICBmcyA9IGFiZi5kYXRhUmF0ZQogICAgICAgIGNvbnZlcnRlZCA9IFtdCiAgICAgICAgZm9yIGRhdGEgaW4gYWJmLmRhdGE6CiAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9faGlnaF9wYXNzX2ZpbHRlcihkYXRhLCBmcykKICAgICAgICAgICAgZGF0YSA9IHNlbGYuX19yb290X21lYW5fc3F1YXJlKGRhdGEsIGZzKQogICAgICAgIHJldHVybiBkYXRhCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIF9faGlnaF9wYXNzX2ZpbHRlcih4LCBmcywgY3V0b2ZmPTEsIG9yZGVyPTUpOgogICAgICAgIGZueXEgPSAwLjUgKiBmcwogICAgICAgIG5vcm1hbF9jdXRvZmYgPSBjdXRvZmYvZm55cQogICAgICAgIGIsIGEgPSBidXR0ZXIoTj1vcmRlciwgV249bm9ybWFsX2N1dG9mZiwgYnR5cGU9J2hpZ2gnLGFuYWxvZz1GYWxzZSkKICAgICAgICByZXR1cm4gZmlsdGZpbHQoYiwgYSwgeCkKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgX19yb290X21lYW5fc3F1YXJlKHgsIHdpbmRvdyk6CiAgICAgICAgeCA9IG5wLmNvbnZvbHZlKHgqKjIsIG5wLm9uZXMoKHdpbmRvdywpKS93aW5kb3csIG1vZGU9J3ZhbGlkJykKICAgICAgICByZXR1cm4gbnAuc3FydCh4KQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBfX2ludGVncmFsX2F2ZXJhZ2UoeCwgd2luZG93KToKICAgICAgICByZXR1cm4gbnAuY29udm9sdmUoYWJzKHgpLCBucC5vbmVzKCh3aW5kb3csKSkvd2luZG93LCBtb2RlPSd2YWxpZCcpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGNvbnZlcnRlciA9IENvbnZlcnRlcigpCiAgICBhYmYgPSBweWFiZi5BQkYoJ3NhbXBsZS5hYmYnKQogICAgZGF0YSA9IGNvbnZlcnRlci5jb252ZXJ0KGFiZikKICAgIGltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKICAgICMgcGx0LnBsb3QoZGF0YSkKICAgICMgcGx0LnNob3coKQogICAgIyBwcmludChkYXRhKQogICAgcHJpbnQoYWJmLmFiZkRhdGVUaW1lKQogICAgZGYgPSBwZC5EYXRhRnJhbWUoZGF0YSkKICAgICMgZGF0ZXRpbWUudGltZWRlbHRhKHNlY29uZHM9MS8yMCkKICAgIHByaW50KAogICAgICAgIHBkLmRhdGVfcmFuZ2Uoc3RhcnQ9YWJmLmFiZkRhdGVUaW1lLCBwZXJpb2RzPWxlbihkYXRhKSkKICAgICkKICAgIHByaW50KGFiZi5kYXRhUG9pbnRDb3VudCkKICAgIHByaW50KGxlbihwZC5kYXRlX3JhbmdlKHN0YXJ0PSIyMDE4LTQtMSIsIHBlcmlvZHM9MzApKSkKICAgICMgZnJvbSBwcHJpbnQgaW1wb3J0IHBwcmludAo8fGZpbV9ob2xlfD4KICAgICMgIyBwcmludChjb252ZXJ0ZXIuY29udmVydChhYmYpLnNoYXBlKQo8fGZpbV9zdWZmaXh8PgogICAgIyBmb3IgaXRlbSBpbiBkaXIoYWJmKToKICAgICMgICAgIHByaW50KGl0ZW0sIGFiZi5fX2dldGF0dHJpYnV0ZV9fKGl0ZW0pKQogICAgIyBwcmludChhYmYuYWJmRGF0ZVRpbWUpCiAgICAjIHByaW50KGFiZi5hZGNOYW1lcykKPHxmaW1fZW5kfD4="]
["ddd4a452b9da80d28dda30d7cf63bf1490b0187a-2","ddd4a452b9da80d28dda30d7cf63bf1490b0187a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKc3VtVCA9IDAKbiA9IDUKY2hlY2sgPSAwCgojbWF4IGxvb3BzIGlzIG4qKjIvMiAocm91bmRlZCBpZiBvZGQpIC0xCgpkZWYgc3VtTG9vcChsaW1pdCxjb3VudCk6CiAgICBzdW1Ib2xkID0gW10KICAgIHN1bUQgPSAwCgogICAgZGVmIHJlY3VyKGxpbWl0LGNvdW50KTogICAgICAgIAogICAgICAgIGlmIGNvdW50IDw9MDoKICAgICAgICAgICAgI3ByaW50KCI6IitzdHIobGltaXQpKQogICAgICAgICAgICBzdW1Ib2xkLmFwcGVuZChsaW1pdCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxLGxpbWl0KToKICAgICAgICAgICAgICAgICNwcmludCgiLSIrc3RyKHN1bVQpKQogICAgICAgICAgICAgICAgcmVjdXIoaSxjb3VudC0xKQoKICAgIHJlY3VyKGxpbWl0LGNvdW50KQoKICAgIGZvciBpIGluIHN1bUhvbGQ6CiAgICAgICAgc3VtRCArPSBpCgogICAgcmV0dXJuIHN1bUQKCnByaW50KG1hdGguZmxvb3IobioqMi8yKS0xKQoKIzAKc3VtVCArPSAxCnByaW50KHN1bVQpCjx8ZmltX2hvbGV8PgoKaWYgKChuKioyKS8yKSUxPT0wOgogICAgY2hlY2sgPSAxCgojMiAKZm9yIGkgaW4gcmFuZ2UoMSxtYXRoLmZsb29yKG4qKjIvMiktY2hlY2spOgogICAgc3VtVCArPSBzdW1Mb29wKG4qKjIsaSkKICAgIHByaW50KHN1bVQpCgojZG91YmxlCnN1bVQgPSBzdW1UKjIKcHJpbnQoc3VtVCkKCmlmIGNoZWNrID09IDE6CiAgICBzdW1UICs9IHN1bUxvb3AobioqMiwgbWF0aC5mbG9vcihuKioyLzIpLWNoZWNrKQogICAgcHJpbnQoc3VtVCkKPHxmaW1fc3VmZml4fD4KCiMxCnN1bVQgKz0gbioqMgpwcmludChzdW1UKQo8fGZpbV9lbmR8Pg=="]
["e9bf285a555525da11f29ce1f15d097b420cebd9-3","e9bf285a555525da11f29ce1f15d097b420cebd9","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KJycnCkNhbGN1bGF0ZWQgMjUwYnAgd2luZG93ZWQgSDNLMjdhYyBzaWduYWwgc3Vycm91bmRpbmcgVFNTIGZvciAxMDAwMGJwCicnJwoKaW1wb3J0IG9zCmltcG9ydCB0aW1lCmltcG9ydCBtYXRoCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgcHlCaWdXaWcKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGVmIHBhcnNlQXJndW1lbnRzKCk6IAoJIyBDcmVhdGUgYXJndW1lbnQgcGFyc2VyCglwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpICAgCgkjIFBvc2l0aW9uYWwgbWFuZGF0b3J5IGFyZ3VtZW50cwoJcGFyc2VyLmFkZF9hcmd1bWVudCgiUmVzcFZhckZpbGVQYXRoIiwgCgkJaGVscD0iZnVsbCBwYXRoIHRvIHJlc3AgdmFyIGRhdGEuIiwgdHlwZT1zdHIpCglwYXJzZXIuYWRkX2FyZ3VtZW50KCJJbnB1dEZpbGVQYXRoIiwgCgkJaGVscD0iZnVsbCBwYXRoIHRvIGlucHV0IGRhdGEuIiwgdHlwZT1zdHIpCglwYXJzZXIuYWRkX2FyZ3VtZW50KCJPdXRwdXRGaWxlUGF0aCIsIAoJCWhlbHA9ImZ1bGwgcGF0aCB0byBvdXRwdXQuIiwgdHlwZT1zdHIpCQoJcGFyc2VyLmFkZF9hcmd1bWVudCgiVHJhbnNjcmlwdFBhdGgiLCAKCQloZWxwPSJmdWxsIHBhdGggdG8gdHJhbnNjcmlwdCBkZWZpbml0aW9ucy4iLCB0eXBlPXN0cikJCQkJCgkjIFBhcnNlIGFyZ3VtZW50cwoJYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCXJldHVybiBhcmdzCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRlZiBnZXRTaWduYWwoUm93LCBBY0JIVywgSW5wX0JIVywgQmluUmFuZ2VzKToKCVN0YXJ0ID0gaW50KFJvd1siUlN0YXJ0Il0pCglFbmQgPSBpbnQoUm93WyJSRW5kIl0pCglTdHJhbmQgPSBzdHIoUm93WyJTdHJhbmQiXSkKCUNociA9IHN0cihSb3dbIkNociJdKQoJIwoJaWYgU3RyYW5kID09ICIrIjoKCQlCaW5SYW5nZXMgPSBCaW5SYW5nZXMKCWVsc2U6CgkJQmluUmFuZ2VzID0gQmluUmFuZ2VzWzo6LTFdCgkjIENhbGN1bGF0ZSBlYWNoIGJpbiByYW5nZSwKCVJlc3VsdHNMaXN0ID0gW10KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoJZm9yIEJpblJhbmdlIGluIEJpblJhbmdlczoKCQlCaW5TdGFydCA9IEJpblJhbmdlWzBdK1N0YXJ0CgkJQmluRW5kID0gQmluUmFuZ2VbMV0rU3RhcnQKCQlBYyA9IG5wLmFycmF5KEFjQkhXLnZhbHVlcyhDaHIsIEJpblN0YXJ0LCBCaW5FbmQpKQo8fGZpbV9lbmR8Pg=="]
["b051dc522e130e9f28e851903a506c674704f2f8-3","b051dc522e130e9f28e851903a506c674704f2f8","PHxmaW1fcHJlZml4fD4KZnJvbSB0ZXJyYV9zZGsuY2xpZW50LmxjZCBpbXBvcnQgTENEQ2xpZW50Cgp0ZXJyYSA9IExDRENsaWVudChjaGFpbl9pZD0iYm9tYmF5LTEyIiwgdXJsPSJodHRwczovL2JvbWJheS1sY2QudGVycmEuZGV2IikKcHJpbnQoCiAgICB0ZXJyYS5kaXN0cmlidXRpb24udmFsaWRhdG9yX3Jld2FyZHMoCjx8ZmltX2hvbGV8PgogICAgKQopCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgInRlcnJhdmFsb3BlcjEyNTljbXU1enlrbHNka21nc3R4aHdxcGUwdXRmZTVoaHl0eTBhdCIKPHxmaW1fZW5kfD4="]
["59984b3cff5530b4ec1fd0229d9ce0480fe71511-3","59984b3cff5530b4ec1fd0229d9ce0480fe71511","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgRUJORlBhcnNlci4KZnJvbSBSdWlrb3dhLk9iamVjdFJlZ2V4LlRva2VuaXplciBpbXBvcnQgdW5pcXVlX2xpdGVyYWxfY2FjaGVfcG9vbCwgcmVnZXhfbWF0Y2hlciwgY2hhcl9tYXRjaGVyLCBzdHJfbWF0Y2hlciwgVG9rZW5pemVyCmZyb20gUnVpa293YS5PYmplY3RSZWdleC5Ob2RlIGltcG9ydCBBc3RQYXJzZXIsIFJlZiwgU2VxUGFyc2VyLCBMaXRlcmFsVmFsdWVQYXJzZXIgYXMgTCwgTGl0ZXJhbE5hbWVQYXJzZXIsIFVuZGVmCm5hbWVzcGFjZSA9IGdsb2JhbHMoKQo8fGZpbV9lbmR8Pg=="]
["f980d19d2d242ff9935b657e980fe69a3aa197e1-1","f980d19d2d242ff9935b657e980fe69a3aa197e1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm5uLmZ1bmN0aW9uYWwgYXMgRgppbXBvcnQgdG9yY2h2aXNpb24KZnJvbSB0b3JjaHZpc2lvbiBpbXBvcnQgdHJhbnNmb3Jtcwpmcm9tIHRvcmNodmlzaW9uLmlvIGltcG9ydCByZWFkX2ltYWdlLCBJbWFnZVJlYWRNb2RlCmZyb20gdG9yY2gudXRpbHMuZGF0YSBpbXBvcnQgRGF0YXNldCwgRGF0YUxvYWRlcgppbXBvcnQgY3YyCmltcG9ydCBvcwppbXBvcnQgdGltZQpmcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5CmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IG9zCgpmcm9tIC5QQVRIX18gaW1wb3J0ICoKCmRlZiBkZXB0aDJDdXRvZmYoZGVwdGhfbWFwLCBjdXRvZmYpOgogICAgJycnQHBhcmFtIGRlcHRoX21hcCB+IChIIHggVykgbmVlZHMgdG8gYmUgbnVtcHkgYXJyYXknJycKICAgIGhlYXRtYXAgPSBucC5vbmVzKCgqZGVwdGhfbWFwLnNoYXBlLCAzKSkKICAgIGhlYXRtYXBbZGVwdGhfbWFwIDwgY3V0b2ZmXSAqPSAxNTAKICAgIGhlYXRtYXBbZGVwdGhfbWFwID49IGN1dG9mZl0gKj0gNTAKICAgIHJldHVybiBoZWF0bWFwLmFzdHlwZShucC5pbnQ2NCkKCgpkZWYgZGVwdGgySGVhdG1hcChkZXB0aF9tYXAsIG1pbl9kaXNwbGF5PTFlLTQsIG1heF9kaXNwbGF5PTI1NSk6CiAgICAnJydAcGFyYW0gZGVwdGhfbWFwIH4gKEggeCBXKSBuZWVkcyB0byBiZSBudW1weSBhcnJheScnJwogICAgciA9IChucC5tYXgoZGVwdGhfbWFwKSAtIG5wLm1pbihkZXB0aF9tYXApKSAvIDEwCiAgICBoZWF0bWFwID0gbnAuemVyb3MoKCpkZXB0aF9tYXAuc2hhcGUsIDMpKQogICAgZm9yIGkgaW4gcmFuZ2UoZGVwdGhfbWFwLnNoYXBlWzBdKToKICAgICAgICBmb3IgaiBpbiByYW5nZShkZXB0aF9tYXAuc2hhcGVbMV0pOgogICAgICAgICAgICBpZiBub3QgbWluX2Rpc3BsYXkgPCBkZXB0aF9tYXBbaSxqXSA8IG1heF9kaXNwbGF5OgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgaWYgZGVwdGhfbWFwW2ksal0gPCByOgogICAgICAgICAgICAgICAgaGVhdG1hcFtpLGosMl0gPSAyNTUgLSBkZXB0aF9tYXBbaSxqXSAvIHIgKiAyNTUgICAgCiAgICAgICAgICAgICAgICBoZWF0bWFwW2ksaiwwXSA9IGRlcHRoX21hcFtpLGpdIC8gciAqIDI1NSAgICAgICAgICAgCiAgICAgICAgICAgIGVsaWYgciA8IGRlcHRoX21hcFtpLGpdIDwgNSpyOgogICAgICAgICAgICAgICAgaGVhdG1hcFtpLGosMF0gPSAyNTUgLSAoZGVwdGhfbWFwW2ksal0tcikgLyAoNCpyKSAqIDI1NSAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaGVhdG1hcFtpLGosMV0gPSAoZGVwdGhfbWFwW2ksal0tcikgLyAoNCpyKSAqIDI1NSAgCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBoZWF0bWFwW2ksaiwxXSA9IDI1NSAtIChkZXB0aF9tYXBbaSxqXS00KnIpIC8gKDYqcikgKiAyNTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBoZWF0bWFwW2ksaiwyXSA9IChkZXB0aF9tYXBbaSxqXS00KnIpIC8gKDYqcikgKiAyNTUgIAogICAgIyBoZWF0bWFwWzosOiwwXSAqPSAxNQogICAgcmV0dXJuIGhlYXRtYXAuYXN0eXBlKG5wLmludDY0KQoKCmRlZiBkcmF3SGVhdG1hcChkZXB0aF9tYXAsIG1pbl9kaXNwbGF5PTAsIG1heF9kaXNwbGF5PTEwMCk6CiAgICBoID0gZGVwdGgySGVhdG1hcChkZXB0aF9tYXAsIG1pbl9kaXNwbGF5PTAsIG1heF9kaXNwbGF5PTEwMCkKICAgIAogICAgcGx0LmZpZ3VyZShmaWdzaXplPSgyMCwxMCkpCiAgICBwbHQuaW1zaG93KGgpCiAgICBwbHQuc2F2ZWZpZygiaGVhdC5wbmciKQogICAgeCA9IG5wLmFyYW5nZSg3MCkucmVzaGFwZSgxLCAtMSkKICAgIHggPSBucC52c3RhY2soKHgseCx4KSkKICAgIGhiID0gZGVwdGgySGVhdG1hcCh4KQogICAgcGx0LmZpZ3VyZSgpCiAgICBwbHQuaW1zaG93KGhiKSAgICAKCgpkZWYgcGxvdF9kZXB0aF9tYXAoZG0sIHZhbGlkaXR5X21hc2ssIHNhdmVfcGF0aCk6CiAgICB2YWxpZGl0eV9tYXNrID0gdmFsaWRpdHlfbWFzayA+IDAKICAgIE1JTl9ERVBUSCA9IDAuNQogICAgTUFYX0RFUFRIID0gbWluKDMwMCwgbnAucGVyY2VudGlsZShkbSwgOTkpKQogICAgZG0gPSBucC5jbGlwKGRtLCBNSU5fREVQVEgsIE1BWF9ERVBUSCkKICAgIGRtID0gbnAubG9nKGRtLCB3aGVyZT12YWxpZGl0eV9tYXNrKQoKICAgIGRtID0gbnAubWEubWFza2VkX3doZXJlKH52YWxpZGl0eV9tYXNrLCBkbSkKICAgIGRtID0gZG0uc3F1ZWV6ZSgpCgogICAgY21hcCA9IHBsdC5jbS5qZXQKICAgIGNtYXAuc2V0X2JhZChjb2xvcj0nYmxhY2snKQogICAgcGx0Lmltc2hvdyhkbSwgY21hcD1jbWFwLCB2bWF4PW5wLmxvZyhNQVhfREVQVEgpKQogICAgcGx0LnNhdmVmaWcoc2F2ZV9wYXRoKQoKCjx8ZmltX2hvbGV8PgogICAgaW1nX3QgPSB0cmFuc2Zvcm0oaW1nX3QpICAKICAgIHJldHVybiBpbWdfdAoKZGVmIHJlYWRMYWJlbDJUZW5zb3IobGFiZWxfcGF0aCwgZGV2aWNlPXRvcmNoLmRldmljZSgiY3VkYSIgaWYgdG9yY2guY3VkYS5pc19hdmFpbGFibGUoKSBlbHNlICJjcHUiKSk6CiAgICAnJydpbWFnZSBwYXRoIC0+IGxvc3MgaW5wdXQgKDEgeCBIIHggVyknJycKCiAgICBsYWJlbF90ID0gcmVhZF9pbWFnZShsYWJlbF9wYXRoKS50byh0b3JjaC5mbG9hdDMyKS51bnNxdWVlemUoMCkudG8oZGV2aWNlKQogICAgdHJhbnNmb3JtID0gdHJhbnNmb3Jtcy5Db21wb3NlKFt0cmFuc2Zvcm1zLlJlc2l6ZSggKDEyMCwgNDgwKSApXSkKICAgIGxhYmVsX3QgPSB0cmFuc2Zvcm0obGFiZWxfdCkgIAogICAgcmV0dXJuIGxhYmVsX3QgICAgCgpkZWYgY2xzUHJlZDJJbWcocHJlZCk6CiAgICAnJydzaW5nbGV0b24gdW5ldCBvdXRwdXQgKDEgeCBLIHggSCB4IFcpIGluIFswLCBudW0gY2xhc3NdIC0+IHBsb3R0YWJsZSBncmF5c2NhbGUgaW1hZ2UgKEggeCBXKScnJwogICAgcHJlZCA9IHByZWQuc3F1ZWV6ZSgwKQogICAgcHJlZCA9IHByZWQuYXJnbWF4KDApCiAgICBwcmVkID0gcHJlZC5zcXVlZXplKDApCiAgICBwcmVkID0gcHJlZC50bygiY3B1IikudG8odG9yY2gubG9uZykKICAgIHJldHVybiBwcmVkCgpkZWYgcmVnUHJlZDJJbWcocHJlZCk6CiAgICAnJydzaW5nbGV0b24gdW5ldCBvdXRwdXQgKDEgeCAxIHggSCB4IFcpIGluIFstMSwgMV0gLT4gcGxvdHRhYmxlIGdyYXlzY2FsZSBpbWFnZSAoSCB4IFcpJycnCiAgICBwcmVkID0gcHJlZC5zcXVlZXplKDApCiAgICBwcmVkID0gcHJlZC5zcXVlZXplKDApCiAgICAjIHByZWQgPSAocHJlZCArIDEpICogMTAwCiAgICBwcmVkID0gcHJlZC50bygiY3B1IikudG8odG9yY2guZmxvYXQzMikKICAgIHJldHVybiBwcmVkICAgIAoKCmRlZiBkaXNwbGF5SW5mZXJlbmNlKGRhdGEsIHByZWQsIHNhdmVfZGlyLCBpLCBiYWNrZW5kPSJjbWFwIik6CiAgICBpbWFnZSA9IGRhdGFbJ3JnYiddCiAgICBsYWJlbCA9IGRhdGFbJ2xhYmVsJ10KICAgIG9yaWdpbmFsX2ltYWdlID0gZGF0YVsnb3JpZ2luYWxfcmdiJ10KICAgIG9yaWdpbmFsX2xhYmVsID0gZGF0YVsnb3JpZ2luYWxfbGFiZWwnXQogICAgcHJpbnQoImluZmVyZW5jZSBkYXRhIHNpemVzIiwgaW1hZ2Uuc2hhcGUsIGxhYmVsLnNoYXBlLCBvcmlnaW5hbF9pbWFnZS5zaGFwZSwgb3JpZ2luYWxfbGFiZWwuc2hhcGUpICAgICAgICAgICAKICAgIAogICAgaW1hZ2UgPSBpbWFnZS5wZXJtdXRlKDEsIDIsIDApLnRvKCJjcHUiKS50byh0b3JjaC51aW50OCkKICAgIGxhYmVsID0gbGFiZWwuc3F1ZWV6ZSgpLnRvKHRvcmNoLnVpbnQ4KS5jcHUoKS5udW1weSgpCiAgICBwcmVkID0gcHJlZC5udW1weSgpCiAgICAKICAgIGlmIGJhY2tlbmQgPT0gImNtYXAiOgogICAgICAgIGNtYXAgPSBwbHQuY20uamV0CiAgICAgICAgY21hcC5zZXRfYmFkKGNvbG9yPSJibGFjayIpCgogICAgICAgIHBsdC5maWd1cmUoKQogICAgICAgIHBsdC5pbXNob3coaW1hZ2UpCiAgICAgICAgcGx0LnNhdmVmaWcob3MucGF0aC5qb2luKHNhdmVfZGlyLCAiaW1nIitzdHIoaSkrIi5wbmciKSkKCiAgICAgICAgcGx0LmZpZ3VyZSgpCiAgICAgICAgcGx0Lmltc2hvdyhsYWJlbCwgY21hcD1jbWFwKQogICAgICAgIHBsdC5zYXZlZmlnKG9zLnBhdGguam9pbihzYXZlX2RpciwgImxhYmVsIitzdHIoaSkrIi5wbmciKSkKCiAgICAgICAgcGx0LmZpZ3VyZSgpCiAgICAgICAgcGx0Lmltc2hvdyhvcmlnaW5hbF9pbWFnZSkgICAgCiAgICAgICAgcGx0LnNhdmVmaWcob3MucGF0aC5qb2luKHNhdmVfZGlyLCAib2ltZyIrc3RyKGkpKyIucG5nIikpCgogICAgICAgIHBsdC5maWd1cmUoKQogICAgICAgIHBsdC5pbXNob3cob3JpZ2luYWxfbGFiZWwsIGNtYXA9Y21hcCkKICAgICAgICBwbHQuc2F2ZWZpZyhvcy5wYXRoLmpvaW4oc2F2ZV9kaXIsICJvbGFiZWwiK3N0cihpKSsiLnBuZyIpKQoKICAgICAgICBwbHQuZmlndXJlKCkKICAgICAgICBwbHQuaW1zaG93KHByZWQsIGNtYXA9Y21hcCkKICAgICAgICBwbHQuc2F2ZWZpZyhvcy5wYXRoLmpvaW4oc2F2ZV9kaXIsICJwcmVkIitzdHIoaSkrIi5wbmciKSkKICAgIGVsaWYgYmFja2VuZCA9PSAiaGVhdG1hcCI6CiAgICAgICAgcGx0LmZpZ3VyZSgpCiAgICAgICAgcGx0Lmltc2hvdyhpbWFnZSkKICAgICAgICBwbHQuc2F2ZWZpZyhvcy5wYXRoLmpvaW4oc2F2ZV9kaXIsICJpbWciK3N0cihpKSsiLnBuZyIpKQoKICAgICAgICBwbHQuZmlndXJlKCkKICAgICAgICBoID0gZGVwdGgySGVhdG1hcChsYWJlbCkKICAgICAgICBwbHQuaW1zaG93KGgpCiAgICAgICAgcGx0LnNhdmVmaWcob3MucGF0aC5qb2luKHNhdmVfZGlyLCAibGFiZWwiK3N0cihpKSsiLnBuZyIpKQoKICAgICAgICBwbHQuZmlndXJlKCkKICAgICAgICBwbHQuaW1zaG93KG9yaWdpbmFsX2ltYWdlKSAgICAKICAgICAgICBwbHQuc2F2ZWZpZyhvcy5wYXRoLmpvaW4oc2F2ZV9kaXIsICJvaW1nIitzdHIoaSkrIi5wbmciKSkKCiAgICAgICAgcGx0LmZpZ3VyZSgpCiAgICAgICAgaCA9IGRlcHRoMkhlYXRtYXAob3JpZ2luYWxfbGFiZWwpCiAgICAgICAgcGx0Lmltc2hvdyhoKQogICAgICAgIHBsdC5zYXZlZmlnKG9zLnBhdGguam9pbihzYXZlX2RpciwgIm9sYWJlbCIrc3RyKGkpKyIucG5nIikpCgogICAgICAgIHBsdC5maWd1cmUoKQogICAgICAgIGggPSBkZXB0aDJIZWF0bWFwKHByZWQpCiAgICAgICAgcGx0Lmltc2hvdyhoKQogICAgICAgIHBsdC5zYXZlZmlnKG9zLnBhdGguam9pbihzYXZlX2RpciwgInByZWQiK3N0cihpKSsiLnBuZyIpKSAgICAKICAgIGVsaWYgYmFja2VuZCA9PSAiRElPREUiOgogICAgICAgIHBsdC5maWd1cmUoKQogICAgICAgIHBsdC5pbXNob3coaW1hZ2UpCiAgICAgICAgcGx0LnNhdmVmaWcob3MucGF0aC5qb2luKHNhdmVfZGlyLCAiaW1nIitzdHIoaSkrIi5wbmciKSkKCiAgICAgICAgcGxvdF9kZXB0aF9tYXAobGFiZWwsIG5wLm9uZXNfbGlrZShsYWJlbCksIG9zLnBhdGguam9pbihzYXZlX2RpciwgImxhYmVsIitzdHIoaSkrIi5wbmciKSkKCiAgICAgICAgcGx0LmZpZ3VyZSgpCiAgICAgICAgcGx0Lmltc2hvdyhvcmlnaW5hbF9pbWFnZSkgICAgCiAgICAgICAgcGx0LnNhdmVmaWcob3MucGF0aC5qb2luKHNhdmVfZGlyLCAib2ltZyIrc3RyKGkpKyIucG5nIikpCgogICAgICAgIHBsb3RfZGVwdGhfbWFwKG9yaWdpbmFsX2xhYmVsLCBucC5vbmVzX2xpa2Uob3JpZ2luYWxfbGFiZWwpLCBvcy5wYXRoLmpvaW4oc2F2ZV9kaXIsICJvbGFiZWwiK3N0cihpKSsiLnBuZyIpKQoKICAgICAgICBwbG90X2RlcHRoX21hcChwcmVkLCBucC5vbmVzX2xpa2UocHJlZCksIG9zLnBhdGguam9pbihzYXZlX2RpciwgInByZWQiK3N0cihpKSsiLnBuZyIpKQogICAgZWxpZiBiYWNrZW5kID09ICJzZWciOgogICAgICAgIHBsdC5maWd1cmUoKQogICAgICAgIHBsdC5pbXNob3coaW1hZ2UpCiAgICAgICAgcGx0LnNhdmVmaWcob3MucGF0aC5qb2luKHNhdmVfZGlyLCAiaW1nIitzdHIoaSkrIi5wbmciKSkKCiAgICAgICAgcGx0LmZpZ3VyZSgpCiAgICAgICAgcGx0Lmltc2hvdyhsYWJlbCkKICAgICAgICBwbHQuc2F2ZWZpZyhvcy5wYXRoLmpvaW4oc2F2ZV9kaXIsICJsYWJlbCIrc3RyKGkpKyIucG5nIikpCgogICAgICAgIHBsdC5maWd1cmUoKQogICAgICAgIHBsdC5pbXNob3cob3JpZ2luYWxfaW1hZ2UpICAgIAogICAgICAgIHBsdC5zYXZlZmlnKG9zLnBhdGguam9pbihzYXZlX2RpciwgIm9pbWciK3N0cihpKSsiLnBuZyIpKQoKICAgICAgICBwbHQuZmlndXJlKCkKICAgICAgICBwbHQuaW1zaG93KG9yaWdpbmFsX2xhYmVsKQogICAgICAgIHBsdC5zYXZlZmlnKG9zLnBhdGguam9pbihzYXZlX2RpciwgIm9sYWJlbCIrc3RyKGkpKyIucG5nIikpCgogICAgICAgIHBsdC5maWd1cmUoKQogICAgICAgIHBsdC5pbXNob3cocHJlZCkKICAgICAgICBwbHQuc2F2ZWZpZyhvcy5wYXRoLmpvaW4oc2F2ZV9kaXIsICJwcmVkIitzdHIoaSkrIi5wbmciKSkKCgogICAgZGVmIGdldENsc0NvbG9yKGNscyk6CiAgICAgICAgcGFzcwogICAgCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgcGFzcwo8fGZpbV9zdWZmaXh8PgpkZWYgcmVhZDJUZW5zb3IoaW1nX3BhdGgsIGRldmljZT10b3JjaC5kZXZpY2UoImN1ZGEiIGlmIHRvcmNoLmN1ZGEuaXNfYXZhaWxhYmxlKCkgZWxzZSAiY3B1IiksIHRyYW5zZm9ybT1Ob25lKToKICAgICcnJ2ltYWdlIHBhdGggLT4gdW5ldCBpbnB1dCAoMSB4IDMgeCBIIHggVyknJycKCiAgICBpbWdfdCA9IHJlYWRfaW1hZ2UoaW1nX3BhdGgpLnRvKHRvcmNoLmZsb2F0MzIpLnVuc3F1ZWV6ZSgwKS50byhkZXZpY2UpCjx8ZmltX2VuZHw+"]
["3483e8980a228469227ba1519d142a3ff24a52ee-4","3483e8980a228469227ba1519d142a3ff24a52ee","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRraW50ZXIKZnJvbSB0a2ludGVyIGltcG9ydCB0dGsKPHxmaW1faG9sZXw+CmJpZ19mcmFtZS5wYWNrKGZpbGw9J2JvdGgnLCBleHBhbmQ9VHJ1ZSkKCmJ1dHRvbiA9IHR0ay5CdXR0b24oYmlnX2ZyYW1lLCB0ZXh0PSJUaGlzIHN0cmV0Y2hlcyIpCmxhYmVsID0gdHRrLkxhYmVsKGJpZ19mcmFtZSwgdGV4dD0iVGhpcyBkb2Vzbid0IHN0cmV0Y2giKQpzdGF0dXNiYXIgPSB0dGsuTGFiZWwoYmlnX2ZyYW1lLCB0ZXh0PSJUaGlzIGlzIGEgc3RhdHVzIGJhciIsIHJlbGllZj0nc3Vua2VuJykKCmJ1dHRvbi5ncmlkKHJvdz0wLCBjb2x1bW49MCwgc3RpY2t5PSduc3dlJykKbGFiZWwuZ3JpZChyb3c9MCwgY29sdW1uPTEpCnN0YXR1c2Jhci5ncmlkKHJvdz0xLCBjb2x1bW49MCwgY29sdW1uc3Bhbj0yLCBzdGlja3k9J3dlJykKCmJpZ19mcmFtZS5ncmlkX3Jvd2NvbmZpZ3VyZSgwLCB3ZWlnaHQ9MSkKYmlnX2ZyYW1lLmdyaWRfY29sdW1uY29uZmlndXJlKDAsIHdlaWdodD0xKQoKcm9vdC50aXRsZSgiR3JpZCBUZXN0IikKcm9vdC5nZW9tZXRyeSgnMzAweDE1MCcpCnJvb3QubWFpbmxvb3AoKQo8fGZpbV9zdWZmaXh8PgoKCnJvb3QgPSB0a2ludGVyLlRrKCkKYmlnX2ZyYW1lID0gdHRrLkZyYW1lKHJvb3QpCjx8ZmltX2VuZHw+"]
["f9b844afa46425058b11e1950b7cb85968f14f3a-3","f9b844afa46425058b11e1950b7cb85968f14f3a",{"$cut":{"chars":17028,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKZnJvbSBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKaW1wb3J0IG9zCmltcG9ydCBzeXMKaW1wb3J0IGRhdGV0aW1lCmltcG9ydCB0aW1lCmltcG9ydCBoYXNobGliCmltcG9ydCByZXF1ZXN0cwpmcm9tIHRocmVhZGluZyBpbXBvcnQgVGhyZWFkCmltcG9ydCBqc29uCmZyb20gaHR0cCBpbXBvcnQgY29va2llamFyCmltcG9ydCBmbm1hdGNoCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgc2h1dGlsCmltcG9ydCBwc3V0aWwKaW1wb3J0IHBhdGhsaWIKaW1wb3J0IGFzeW5jaW8KaW1wb3J0IHN1YnByb2Nlc3MKZnJvbSBkYXRldXRpbCBpbXBvcnQgcGFyc2VyCmltcG9ydCB1dmxvb3AKZnJvbSByYW5kb20gaW1wb3J0IHNodWZmbGUKZnJvbSBhc3luY2lvLnN1YnByb2Nlc3MgaW1wb3J0IFBJUEUKZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMgaW1wb3J0IFByb2Nlc3NQb29sRXhlY3V0b3IsIGFzX2NvbXBsZXRlZAoKIyBDb29raWVzIGdlbmVyYXRvcgpmcm9tIGNvb2tpZXNfZ2VuZXJhdG9yIGltcG9ydCBjb29raWVzX2luaXQKCiMgT3RoZXIgY29uZmlncwpmcm9tIENvbmZpZ3MgaW1wb3J0IExZTkRBX0NPT0tJRVMsIERPV05MT0FEX0RJUiwgTUFYX1dPUktFUlMsIEJBU0VfVVJMCgoKZGVmIHBhcnNlX2FyZ3VtZW50cygpOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J0x5bmRhIERvd25sb2FkZXInKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXUnLCAnLS11cmwnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1maWxlJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY29uY3VycmVudCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCiAgICByZXR1cm4gcGFyc2VyLCBwYXJzZXIucGFyc2VfYXJncygpCgoKZGVmIGRsX3R1dG9yaWFsKHVybCwgY29uY3VycmVudD1GYWxzZSk6CiAgICBzdGFydF90aW1lID0gdGltZS5wZXJmX2NvdW50ZXIoKQogICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKERPV05MT0FEX0RJUik6CiAgICAgICAgb3MubWtkaXIoRE9XTkxPQURfRElSKQogICAgdHV0b3JpYWwgPSBnZXRfdHV0b3JpYWxfZGF0YSh1cmwpCiAgICBjcmVhdGVfbG9jYWxfZm9sZGVycyh0dXRvcmlhbCkKICAgIGNyZWF0ZV9pbmZvX3R4dCh0dXRvcmlhbCkKICAgIGRsX3RodW1iKHR1dG9yaWFsKQogICAgaWYgY29uY3VycmVudDoKICAgICAgICBkbF92aWRlb3NfYXN5bmModHV0b3JpYWwpCiAgICBlbHNlOgogICAgICAgIGRsX3ZpZGVvc19zeW5jKHR1dG9yaWFsKQogICAgZGxfZXhlcmNpc2UodHV0b3JpYWwpCiAgICBlbmRfdGltZSA9IHRpbWUucGVyZl9jb3VudGVyKCkKICAgIHVzZWRfdGltZSA9IChlbmRfdGltZSAtIHN0YXJ0X3RpbWUpIC8gNjAKICAgIHByaW50KGYidXNlZCB7dXNlZF90aW1lOjAuMmZ9IG1pbnV0ZXMiKQogICAgcmV0dXJuIHR1dG9yaWFsCgoKZGVmIGdldF90dXRvcmlhbF9kYXRhKHVybCk6CiAgICAiIiJHZXQgYWxsIHRoZSBuZWNlc3NhcnkgaW5mbyBvZiBhIHR1dG9yaWFsLCBpbmNsdWRpbmcgdmlkZW8gdXJscyBhbmQgZXhlcmNpc2UiIiIKICAgICMgR2V0IHR1dG9yaWFsIGluZm8KICAgIHR1dG9yaWFsID0ge30KICAgIGNqID0gY29va2llamFyLk1vemlsbGFDb29raWVKYXIoTFlOREFfQ09PS0lFUykKICAgIGNqLmxvYWQoKQogICAgcyA9IHJlcXVlc3RzLlNlc3Npb24oKQogICAgcy5jb29raWVzID0gY2oKICAgIHJlcyA9IHMuZ2V0KHVybCwgdmVyaWZ5PUZhbHNlKQogICAgc291cCA9IEJlYXV0aWZ1bFNvdXAocmVzLnRleHQsICJodG1sLnBhcnNlciIpCiAgICB0aHVtbmFpbFVybCA9IHNvdXAuZmluZCgnaW1nJywgYXR0cnM9eydpdGVtcHJvcCc6ICd0aHVtYm5haWxVcmwnfSkgb3IgJycKICAgIHR1dG9yaWFsWyJ0aHVtYm5haWxVcmwiXSA9IHRodW1uYWlsVXJsWydkYXRhLWxhenktc3JjJ10gaWYgdGh1bW5haWxVcmwgZWxzZSAnJwogICAgdHV0b3JpYWxbInVybCJdID0gdXJsCiAgICB0aXRsZV9ub2RlID0gc291cC5maW5kKAogICAgICAgICdoMScsIGF0dHJzPXsnY2xhc3MnOiAnZGVmYXVsdC10aXRsZSd9KSBvciAnJwogICAgaWYgbm90IHRpdGxlX25vZGU6CiAgICAgICAgcmV0dXJuCiAgICB0dXRvcmlhbFsidGl0bGUiXSA9IHRpdGxlX25vZGUudGV4dC5yZXBsYWNlKAogICAgICAgICcvJywgJyAnKS5zdHJpcCgpIGlmIHRpdGxlX25vZGUgZWxzZSAnJwogICAgZm9yIGNoYXIgaW4gJz8uIS87OsO2w6QnOgogICAgICAgIHR1dG9yaWFsWyJ0aXRsZSJdID0gdHV0b3JpYWxbInRpdGxlIl0ucmVwbGFjZShjaGFyLCAnJykKICAgIHByaW50KGYiXG5cInt0dXRvcmlhbFsndGl0bGUnXX1cIiBpcyBmb3VuZC5cbiIpCiAgICB0dXRvcmlhbFsiaWQiXSA9IGhhc2hsaWIubWQ1KAogICAgICAgIHR1dG9yaWFsWyd0aXRsZSddLmVuY29kZShlbmNvZGluZz0nVVRGLTgnKSkuaGV4ZGlnZXN0KCkKICAgIHR1dG9yaWFsWyJhdXRob3IiXSA9IHNvdXAuZmluZCgKICAgICAgICAnY2l0ZScsIGF0dHJzPXsnZGF0YS1nYS1sYWJlbCc6ICdhdXRob3ItbmFtZSd9KS50ZXh0LnN0cmlwKCkKICAgIHJlbGVhc2VkX2F0ID0gc291cC5maW5kKAogICAgICAgICdzcGFuJywgYXR0cnM9eydpZCc6ICdyZWxlYXNlLWRhdGUnfSkudGV4dC5zdHJpcCgpIG9yICcnCiAgICB0dXRvcmlhbFsicmVsZWFzZWRfYXQiXSA9IHJlbGVhc2VkX2F0IG9yICcnCiAgICB0dXRvcmlhbFsiY29udmVydGVkX3JlbGVhc2VkX2F0Il0gPSBwYXJzZXIucGFyc2UoCiAgICAgICAgcmVsZWFzZWRfYXQpIGlmIHJlbGVhc2VkX2F0IGVsc2UgJycKICAgIHR1dG9yaWFsWyJ0aW1lX3JlcXVpcmVkIl0gPSBzb3VwLmZpbmQoCiAgICAgICAgJ3NwYW4nLCBhdHRycz17J2l0ZW1wcm9wJzogJ3RpbWVSZXF1aXJlZCd9KS50ZXh0LnN0cmlwKCkKICAgIHZpZXdzX25vZGUgPSBzb3VwLmZpbmQoCiAgICAgICAgJ3NwYW4nLCBhdHRycz17J2lkJzogJ2NvdXJzZS12aWV3ZXJzJ30pIG9yICcnCiAgICB2aWV3cyA9IHZpZXdzX25vZGUudGV4dC5zdHJpcCgpIGlmIHZpZXdzX25vZGUgZWxzZSAnMCcKICAgIHR1dG9yaWFsWyJ2"}}]
["3c9ac722df534682c1b3bf2224c0d1a20d9872be-1","3c9ac722df534682c1b3bf2224c0d1a20d9872be","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gcHlzcGFyay5zcWwgaW1wb3J0IFNwYXJrU2Vzc2lvbiwgU1FMQ29udGV4dApmcm9tIHB5c3Bhcmsuc3FsLnR5cGVzIGltcG9ydCAqCmZyb20gcHlzcGFyay5tbC5mZWF0dXJlIGltcG9ydCBWZWN0b3JBc3NlbWJsZXIsIFN0YW5kYXJkU2NhbGVyCmZyb20gcHlzcGFyay5tbC5yZWdyZXNzaW9uIGltcG9ydCBMaW5lYXJSZWdyZXNzaW9uCmZyb20gcHlzcGFyay5tbGxpYi5ldmFsdWF0aW9uIGltcG9ydCBSZWdyZXNzaW9uTWV0cmljcwoKaW1wb3J0IGhhbmR5c3BhcmsKCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IHBpY2tsZQppbXBvcnQgb3MKaW1wb3J0IHNodXRpbAoKCmRlZiBzdGFydF9zcGFyaygpOgogICAgYXBwTmFtZSA9ICJNTC1BbmFseXRpY3MiCiAgICBtYXN0ZXIgPSAibG9jYWwiCgogICAgc3BhcmsgPSBTcGFya1Nlc3Npb24uYnVpbGRlci5hcHBOYW1lKGFwcE5hbWUpLm1hc3RlcihtYXN0ZXIpLmdldE9yQ3JlYXRlKCkKICAgIHNjID0gc3Bhcmsuc3BhcmtDb250ZXh0CiAgICBzcWxDb250ZXh0ID0gU1FMQ29udGV4dChzcGFyay5zcGFya0NvbnRleHQpCiAgICBwcmludCgiU3BhcmtTZXNzaW9uIGluaXRpYWxpemVkIikKICAgIHJldHVybiBzcGFyawoKCiMgVE9ETzogUXVhbGl0eSBDaGVjayAtPiBEbyB0aGUgbmFtZXMgb2YgdGhlIGNvbHVtbnMgYWxpZ24/CmRlZiBpbXBvcnRfZGF0YXNldF9oZWFkZXJzKGFkbWluX2Rpcik6CiAgICBoZWFkZXJzID0gcGQucmVhZF9jc3Yob3MucGF0aC5qb2luKGFkbWluX2RpciwgImhlYWRlcnMuY3N2IiksIGhlYWRlcj1Ob25lLCBuYW1lcz1bImNvbHVtbl9uYW1lIl0pCiAgICBjb2x1bW5zID0gaGVhZGVyc1siY29sdW1uX25hbWUiXS52YWx1ZXMudG9saXN0KCkKCiAgICByZXR1cm4gY29sdW1ucwoKCiMgVE9ETzogQWRkIGRhdGF0eXBlIHJlcXVpcmVtZW50cyB0byB1c2VyIGhlYWRlcnMgQ1NWIG9mIG1ldGFkYXRhLgojICAgUmVhZCBkYXRhdHlwZSBmcm9tIGNzdiBhbmQgaXRlcmF0ZSB0aHJvdWdoIHNpbWlsYXIgdG8gb3RoZXIgZnVuY3Rpb25zLgojIGluZmVyU2NoZW1hPVRydWUgZHVyaW5nIGNzdiByZWFkIGNhbiByZWFkIHRvIGZhaWxlZCB0cmFpbmluZyBpZiBpbmZlcmVuY2UgaXMKIyBpbmNvcnJlY3QKZGVmIGRlZmluZV9kYXRhc2V0X3NjaGVtYShkYXRhX2xvY2F0aW9uLCBkYXRhc2V0LCBkYXRhX3R5cGUpOgogICAgc2NoZW1hID0gU3RydWN0VHlwZShbCiAgICAgICAgU3RydWN0RmllbGQoImFnZSIsIEZsb2F0VHlwZSgpLCBudWxsYWJsZT1UcnVlKSwKICAgICAgICBTdHJ1Y3RGaWVsZCgic2V4IiwgRmxvYXRUeXBlKCksIG51bGxhYmxlPVRydWUpLAogICAgICAgIFN0cnVjdEZpZWxkKCJjaGVzdF9wYWluX3R5cGUiLCBGbG9hdFR5cGUoKSwgbnVsbGFibGU9VHJ1ZSksCiAgICAgICAgU3RydWN0RmllbGQoInJlc3RpbmdfYmxvb2RfcHJlc3N1cmUiLCBGbG9hdFR5cGUoKSwgbnVsbGFibGU9VHJ1ZSksCiAgICAgICAgU3RydWN0RmllbGQoImNob2xlc3Rlcm9sIiwgRmxvYXRUeXBlKCksIG51bGxhYmxlPVRydWUpLAogICAgICAgIFN0cnVjdEZpZWxkKCJmYXN0aW5nX2Jsb29kX3N1Z2FyIiwgRmxvYXRUeXBlKCksIG51bGxhYmxlPVRydWUpLAogICAgICAgIFN0cnVjdEZpZWxkKCJyZXN0aW5nX2VsZWN0cm9jYXJkaW9ncmFwaGljIiwgRmxvYXRUeXBlKCksIG51bGxhYmxlPVRydWUpLAogICAgICAgIFN0cnVjdEZpZWxkKCJtYXhfaGVhcnRfcmF0ZV9hY2hpZXZlZCIsIEZsb2F0VHlwZSgpLCBudWxsYWJsZT1UcnVlKSwKICAgICAgICBTdHJ1Y3RGaWVsZCgiZXhlcmNpc2VfaW5kdWNlZF9hbmdpbmEiLCBGbG9hdFR5cGUoKSwgbnVsbGFibGU9VHJ1ZSksCiAgICAgICAgU3RydWN0RmllbGQoIlNUX2RlcHJlc3Npb25faW5kdWNlZF9ieV9leGVyY2lzZSIsIEZsb2F0VHlwZSgpLCBudWxsYWJsZT1UcnVlKSwKICAgICAgICBTdHJ1Y3RGaWVsZCgicGVha19leGVyY2lzZV9zdF9zbG9wZSIsIEZsb2F0VHlwZSgpLCBudWxsYWJsZT1UcnVlKSwKICAgICAgICBTdHJ1Y3RGaWVsZCgibWFqb3JfdmVzc2Vsc19jb3VudCIsIEZsb2F0VHlwZSgpLCBudWxsYWJsZT1UcnVlKSwKICAgICAgICBTdHJ1Y3RGaWVsZCgidGhhbGFzc2VtaWEiLCBGbG9hdFR5cGUoKSwgbnVsbGFibGU9VHJ1ZSksCiAgICAgICAgU3RydWN0RmllbGQoInRhcmdldCIsIEZsb2F0VHlwZSgpLCBudWxsYWJsZT1UcnVlKV0KICAgICkKICAgIHJldHVybiBzY2hlbWEKCgpkZWYgcmVhZF9kYXRhc2V0X2Zvcl9hbmFseXNpcyhzcGFya19zZXNzaW9uLCBkYXRhX2xvY2F0aW9uLCBzY2hlbWEpOgogICAgZGYgPSBzcGFya19zZXNzaW9uLnJlYWQuY3N2KHBhdGg9ZGF0YV9sb2NhdGlvbiwgc2NoZW1hPXNjaGVtYSwgaGVhZGVyPVRydWUpCiAgICBwcmludChmIkRhdGEgbG9hZGVkIGZyb20ge2RhdGFfbG9jYXRpb259IikKICAgIHJldHVybiBkZgoKCmRlZiByZWFkX3BhcnF1ZXRfZGF0YXNldF9mb3JfYW5hbHlzaXMoc3Bhcmtfc2Vzc2lvbiwgZGF0YV9sb2NhdGlvbik6CiAgICBkZiA9IHNwYXJrX3Nlc3Npb24ucmVhZC5wYXJxdWV0KGRhdGFfbG9jYXRpb24pCiAgICBkYXRhc2V0X3JkZCA9IGRmLnJkZC5tYXAobGFtYmRhIHg6ICh4WzBdKSkKICAgIGRmID0gZGF0YXNldF9yZGQudG9ERigpCgogICAgcHJpbnQoZiJQYXJxdWV0IGRhdGEgbG9hZGVkIGZyb20ge2RhdGFfbG9jYXRpb259IikKICAgIHJldHVybiBkZgoKCmRlZiBnZW5lcmF0ZV9kZXNjcmlwdGl2ZV9hbmFseXRpY3NfZmlsZXMoY29sdW1ucywgYW5hbHlzaXNfZGF0YWZyYW1lLCBhbmFseXRpY3Nfc2F2ZV9sb2NhdGlvbik6CiAgICBwcmludCgiQmVnaW5uaW5nIGRlc2NyaXB0aXZlIGFuYWx5dGljcyIpCgogICAgcGxvdHNfZGlyID0gb3MucGF0aC5qb2luKGFuYWx5dGljc19zYXZlX2xvY2F0aW9uLCAicGxvdHMiKQogICAgcGxvdHNfc2VyaWFsaXplZF9kaXIgPSBvcy5wYXRoLmpvaW4oYW5hbHl0aWNzX3NhdmVfbG9jYXRpb24sICJwbG90c19zZXJpYWxpemVkIikKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhbmFseXRpY3Nfc2F2ZV9sb2NhdGlvbik6ICAjIENoZWNrIGlmIGFuYWx5dGljcyBzYXZlIHBhdGggZXhpc3RzCiAgICAgICAgcGxvdHNfZGlyID0gb3MucGF0aC5qb2luKGFuYWx5dGljc19zYXZlX2xvY2F0aW9uLCAicGxvdHMiKQogICAgICAgIHBsb3RzX3NlcmlhbGl6ZWRfZGlyID0gb3MucGF0aC5qb2luKGFuYWx5dGljc19zYXZlX2xvY2F0aW9uLCAicGxvdHNfc2VyaWFsaXplZCIpCiAgICAgICAgIyBDcmVhdGUgYSBuZXcgZGlyZWN0b3J5IGlmIG5lZWRlZAogICAgICAgIG9zLm1ha2VkaXJzKHBsb3RzX2RpcikgICMgcGF0aCB3aGVyZSBoaXN0b2dyYW0gcGxvdHMgYXJlIHdyaXR0ZW4KICAgICAgICBvcy5tYWtlZGlycyhwbG90c19zZXJpYWxpemVkX2RpcikgICMgcGF0aCB3aGVyZSBzZXJpYWxpemVkIHBsb3RzIGFyZSB3cml0dGVuCiAgICAgICAgcHJpbnQoZiJOZXcgZGlyZWN0b3JpZXMgY3JlYXRlZDoiKQogICAgICAgIHByaW50KGYiICAgIHthbmFseXRpY3Nfc2F2ZV9sb2NhdGlvbn0iKQogICAgICAgIHByaW50KGYiICAgIHtwbG90c19kaXJ9IikKICAgICAgICBwcmludChmIiAgICB7cGxvdHNfc2VyaWFsaXplZF9kaXJ9IikKCiAgICBkZXNjcmliZV9maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oYW5hbHl0aWNzX3NhdmVfbG9jYXRpb24sICJkYXRhc2V0X2Rlc2NyaWJlLmNzdiIpCiAgICBhbmFseXNpc19kYXRhZnJhbWUuZGVzY3JpYmUoKS50b1BhbmRhcygpLnRvX2NzdihkZXNjcmliZV9maWxlX3BhdGgsIGluZGV4PUZhbHNlKSAgIyB3cml0ZSBkYXRhIHN1bW1hcnkgdG8gZmlsZQoKICAgIGhkZiA9IGFuYWx5c2lzX2RhdGFmcmFtZS50b0hhbmR5KCkgICMgSGFuZHlTcGFyayB1c2VkIGZvciB2aXN1YWxpemF0aW9ucyB3aGlsZSBwYXJhbGxlbGl6ZWQKCiAgICBmb3IgaW5kZXgsIGNvbHVtbk5hbWUgaW4gZW51bWVyYXRlKGNvbHVtbnMpOiAgIyBlYWNoIHBsb3Qgd3JpdHRlbiBpbmRpdmlkdWFsbHkKICAgICAgICBmaWd1cmUgPSBwbHQuZmlndXJlKCkKICAgICAgICBoZGYuY29sc1tjb2x1bW5OYW1lXS5oaXN0KCkKCiAgICAgICAgaGlzdF9maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4ocGxvdHNfZGlyLCBmIntjb2x1bW5OYW1lfV9oaXN0b2dyYW0ucG5nIikKICAgICAgICBwaWNrbGVfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHBsb3RzX3NlcmlhbGl6ZWRfZGlyLCBmIntjb2x1bW5OYW1lfV9oaXN0b2dyYW0ucGlja2xlIikKCiAgICAgICAgcGx0LnNhdmVmaWcoaGlzdF9maWxlX3BhdGgsIGRwaT1maWd1cmUuZHBpKSAgIyBzYXZlIGFzICIucG5nIGZpbGUiCiAgICAgICAgcGlja2xlLmR1bXAoZmlndXJlLCBvcGVuKHBpY2tsZV9maWxlX3BhdGgsICJ3YiIpKSAgIyBzYXZlIGFzIHNlcmlhbGl6YWJsZSAiLnBpY2tsZSIgZmlsZQogICAgICAgIHBsdC5jbG9zZSgnYWxsJykKICAgIHByaW50KGYiXG5EZXNjcmlwdGl2ZSBhbmFseXRpY3MgZmlndXJlcyBnZW5lcmF0ZWQgdG86IHthbmFseXRpY3Nfc2F2ZV9sb2NhdGlvbn0iKQogICAgcHJpbnQoIlRhcmdldCB2YXJpYWJsZSBjb3VudCBpczoiKQoKCiMjIyBEYXRhIHByZS1wcm9jZXNzaW5nCiMgQWxsIGRhdGEgc3VibWl0dGVkIG11c3QgYmUgZnJlZSBvZiBlbXB0eSB2YWx1ZXMgYW5kIHByZS1wcm9jZXNzZWQgYnkgdGhlIHVzZXIsIHNvIG5vdCBjbGVhbmluZywgbnVsbCB2YWx1ZSwKIyByZWZvcm1hdHRpbmcsIG9yIGltcHV0aW5nIHdpbGwgdGFrZSBwbGFjZS4KCiMgSGFuZHlTcGFyayBhbGxvd3MgdXMgdG8gbWFrZSB1c2Ugb2YgdmlzdWFsaXphdGlvbiBmdW5jdGlvbnMgd2l0aG91dCByZXNodWZmbGluZyBkYXRhIG9yIGJyaW5naW5nIGl0IGFsbCBpbnRvCiMgbWVtb3J5LiBJdCB3aWxsIHByb2Nlc3MgZGF0YSBpbiBkaXN0cmlidXRlZCB3YXkuCgoKZGVmIHRyYW5zZm9ybV9kYXRhX3RvX3RhcmdldF9zY2hlbWEoY29sdW1ucywgYW5hbHlzaXNfZGF0YWZyYW1lKToKICAgICMgbW92ZSB0YXJnZXQgdmFsdWUgdG8gYmVnaW5uaW5nIG9mIGRhdGFmcmFtZSBzbyB0aGF0IGl0IGlzbid0IGltcGFjdGVkIGJ5IHRyYW5zZm9ybQogICAgZmVhdHVyZV9jb2x1bW4gPSBjb2x1bW5zWzotMV0gICMgdGFyZ2V0IGlzIGFsd2F5cyB0aGUgbGFzdCBjb2x1bW4KICAgIGNvbHVtbnMgPSBbY29sdW1uc1stMV0sICpjb2x1bW5zWzotMV1dICAjIG1vdmUgbGFzdCBpdGVtICh0YXJnZXQpIHRvIGJlZ2lubmluZwoKICAgIGRmID0gYW5hbHlzaXNfZGF0YWZyYW1lLnNlbGVjdChjb2x1bW5zKQo8fGZpbV9ob2xlfD4KICAgIHNjYWxlZF9kZiA9IHN0YW5kYXJkU2NhbGVyLmZpdChhc3NlbWJsZWRfZGYpLnRyYW5zZm9ybShhc3NlbWJsZWRfZGYpICAjIHNjYWxpbmcgZGF0YQoKICAgIHRyYWluX2RhdGEsIHRlc3RfZGF0YSA9IHNjYWxlZF9kZi5yYW5kb21TcGxpdChbLjgsIC4yXSwgc2VlZD00MikgICMgY3JlYXRpbmcgdGVzdC90cmFpbiBzcGxpdAoKICAgIHByaW50KCJEYXRhc2V0IHRyYW5zZm9ybWVkIGFuZCBzcGxpdCBpbnRvIHRyYWluL3Rlc3Qgc2V0IikKICAgIHByaW50KGYiTnVtYmVyIG9mIGZlYXR1cmVzOiB7bGVuKGZlYXR1cmVfY29sdW1uKX0iKQogICAgcmV0dXJuIHRyYWluX2RhdGEsIHRlc3RfZGF0YSwgZmVhdHVyZV9jb2x1bW4KCgpkZWYgaW50ZWdyYXRlX3BhcmFtZXRlcnNfYW5kX2J1aWxkX0xSX21vZGVsKHBhcmFtZXRlcl9sb2NhdGlvbiwgdHJhaW5pbmdfZGF0YSwgYW5hbHl0aWNzX3NhdmVfbG9jYXRpb24pOgoKICAgIHBhcmFtZXRlcnMgPSBwZC5yZWFkX2NzdihwYXJhbWV0ZXJfbG9jYXRpb24pICAjIHBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIHRvIG1vZGVsCiAgICBwYXJhbWV0ZXJzX2RpY3QgPSBwYXJhbWV0ZXJzLnRvX2RpY3QoJ2xpc3QnKQoKICAgICMgZW5zdXJlIGVhY2ggcGFyYW1ldGVyIGlzIG9mIHRoZSBjb3JyZWN0IHR5cGUKICAgICMgVE9ETzogSXNzdWUgd2l0aCBzZXR0aW5nIHdlaWdodENvbD1Ob25lLCB0aHJvd2luZyBlcnJvci4gUmVtb3ZpbmcgdGhpcyBwYXJhbSBvcHRpb24gdW50aWwgZml4ZWQKICAgIG1heEl0ZXIgPSBpbnQocGFyYW1ldGVyc19kaWN0WyJtYXhJdGVyIl1bMF0pCiAgICByZWdQYXJhbSA9IGZsb2F0KHBhcmFtZXRlcnNfZGljdFsicmVnUGFyYW0iXVswXSkKICAgIGVsYXN0aWNOZXRQYXJhbSA9IGZsb2F0KHBhcmFtZXRlcnNfZGljdFsiZWxhc3RpY05ldFBhcmFtIl1bMF0pCiAgICB0b2wgPSBmbG9hdChwYXJhbWV0ZXJzX2RpY3RbInRvbCJdWzBdKQogICAgZml0SW50ZXJjZXB0ID0gYm9vbChwYXJhbWV0ZXJzX2RpY3RbImZpdEludGVyY2VwdCJdWzBdKQogICAgc3RhbmRhcmRpemF0aW9uID0gYm9vbChwYXJhbWV0ZXJzX2RpY3RbInN0YW5kYXJkaXphdGlvbiJdWzBdKQogICAgc29sdmVyID0gc3RyKHBhcmFtZXRlcnNfZGljdFsic29sdmVyIl1bMF0pCiAgICB3ZWlnaHRDb2wgPSBOb25lCiAgICAjIHdlaWdodENvbCA9IHN0cihwYXJhbWV0ZXJzX2RpY3RbIndlaWdodENvbCJdWzBdKQogICAgYWdncmVnYXRpb25EZXB0aCA9IGludChwYXJhbWV0ZXJzX2RpY3RbImFnZ3JlZ2F0aW9uRGVwdGgiXVswXSkKICAgIGxvc3MgPSBzdHIocGFyYW1ldGVyc19kaWN0WyJsb3NzIl1bMF0pCiAgICBlcHNpbG9uID0gZmxvYXQocGFyYW1ldGVyc19kaWN0WyJlcHNpbG9uIl1bMF0pCgogICAgbHIgPSAoTGluZWFyUmVncmVzc2lvbihmZWF0dXJlc0NvbD0nZmVhdHVyZXNfc2NhbGVkJywgbGFiZWxDb2w9InRhcmdldCIsIHByZWRpY3Rpb25Db2w9J25ld1ByZWRpY3Rpb24nKSkKICAgIGxyLnNldFBhcmFtcygKICAgICAgICBtYXhJdGVyPW1heEl0ZXIsCiAgICAgICAgcmVnUGFyYW09cmVnUGFyYW0sCiAgICAgICAgZWxhc3RpY05ldFBhcmFtPWVsYXN0aWNOZXRQYXJhbSwKICAgICAgICB0b2w9dG9sLAogICAgICAgIGZpdEludGVyY2VwdD1maXRJbnRlcmNlcHQsCiAgICAgICAgc3RhbmRhcmRpemF0aW9uPXN0YW5kYXJkaXphdGlvbiwKICAgICAgICBzb2x2ZXI9c29sdmVyLAogICAgICAgICMgd2VpZ2h0Q29sPU5vbmUsCiAgICAgICAgYWdncmVnYXRpb25EZXB0aD1hZ2dyZWdhdGlvbkRlcHRoLAogICAgICAgIGxvc3M9bG9zcywKICAgICAgICBlcHNpbG9uPWVwc2lsb24KICAgICkKICAgIGxpbmVhck1vZGVsID0gbHIuZml0KHRyYWluaW5nX2RhdGEpCgogICAgcHJpbnQoIkxpbmVhciByZWdyZXNzaW9uIG1vZGVsIHRyYWluZWQiKQoKICAgIG1vZGVsX2ZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihhbmFseXRpY3Nfc2F2ZV9sb2NhdGlvbiwgIm1vZGVsL0xSX21vZGVsIikKICAgIGlmIG9zLnBhdGguZXhpc3RzKG1vZGVsX2ZpbGVfcGF0aCk6CiAgICAgICAgc2h1dGlsLnJtdHJlZShtb2RlbF9maWxlX3BhdGgpICAjIHJlbW92ZSBleGlzdGluZyBtb2RlbCBpZiBjb2RlIHJlLXJ1bgogICAgbGluZWFyTW9kZWwuc2F2ZShtb2RlbF9maWxlX3BhdGgpCiAgICBwcmludChmIkxpbmVhciByZWdyZXNzaW9uIG1vZGVsIHNhdmVkIHRvOiB7bW9kZWxfZmlsZV9wYXRofSIpCgogICAgcmV0dXJuIGxpbmVhck1vZGVsCgoKZGVmIHZhbGlkYXRlX0xSX21vZGVsKExSX21vZGVsLCB0ZXN0aW5nX2RhdGEsIGFuYWx5dGljc19zYXZlX2xvY2F0aW9uKToKICAgIHByZWRpY3Rpb25zID0gTFJfbW9kZWwudHJhbnNmb3JtKHRlc3RpbmdfZGF0YSkKCiAgICBwcmVkYW5kbGFiZWxzID0gcHJlZGljdGlvbnMuc2VsZWN0KCJuZXdQcmVkaWN0aW9uIiwgInRhcmdldCIpCiAgICBwcmVkYW5kbGFiZWxzX1JERCA9IHByZWRhbmRsYWJlbHMucmRkCiAgICBwcmVkYW5kbGFiZWxzX1JERDIgPSBwcmVkYW5kbGFiZWxzX1JERC5tYXAobGFtYmRhIHg6ICh4WzBdLCBmbG9hdCh4WzFdKSkpICAjY29udmVydCBmaWxldHlwZSBmcm9tIGRvdWJsZSB0byBmbG9hdAoKICAgIG1ldHJpY3MgPSBSZWdyZXNzaW9uTWV0cmljcyhwcmVkYW5kbGFiZWxzX1JERDIpCgogICAgbWVhbkFic29sdXRlRXJyb3IgPSBtZXRyaWNzLm1lYW5BYnNvbHV0ZUVycm9yCiAgICBtZWFuU3F1YXJlZEVycm9yID0gbWV0cmljcy5tZWFuU3F1YXJlZEVycm9yCiAgICByb290TWVhblNxdWFyZWRFcnJvciA9IG1ldHJpY3Mucm9vdE1lYW5TcXVhcmVkRXJyb3IKICAgIHIyID0gbWV0cmljcy5yMgoKICAgIHN1bW1hcnlfaGVhZGVycyA9IFsibWVhbkFic29sdXRlRXJyb3IiLCAibWVhblNxdWFyZWRFcnJvciIsICJyb290TWVhblNxdWFyZWRFcnJvciIsICJyMiJdCiAgICBzdW1tYXJ5X3N0YXRzID0gW21lYW5BYnNvbHV0ZUVycm9yLCBtZWFuU3F1YXJlZEVycm9yLCByb290TWVhblNxdWFyZWRFcnJvciwgcjJdCiAgICBzdW1tYXJ5ID0gcGQuRGF0YUZyYW1lKGxpc3QoemlwKHN1bW1hcnlfaGVhZGVycywgc3VtbWFyeV9zdGF0cykpKQoKICAgIG1ldHJpY3NfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKGFuYWx5dGljc19zYXZlX2xvY2F0aW9uLCAiTFJfbW9kZWxfYWNjdXJhY3kuY3N2IikKICAgIHN1bW1hcnkudG9fY3N2KG1ldHJpY3NfZmlsZV9wYXRoLCBpbmRleD1GYWxzZSwgaGVhZGVyPU5vbmUpCgogICAgcHJpbnQoIlZhbGlkYXRpb24gZGF0YSBleHBvcnRlZCIpCgoKZGVmIHN0b3Bfc3Bhcmsoc3Bhcmtfc2Vzc2lvbik6CiAgICBzcGFya19zZXNzaW9uLnN0b3AoKQogICAgcHJpbnQoIlxuKioqU3Bhcmsgc2Vzc2lvbiBlbmRlZCoqKiIpCjx8ZmltX3N1ZmZpeHw+CiAgICBhc3NlbWJsZXIgPSBWZWN0b3JBc3NlbWJsZXIoaW5wdXRDb2xzPWZlYXR1cmVfY29sdW1uLCBvdXRwdXRDb2w9ImZlYXR1cmVzIikKICAgIGFzc2VtYmxlZF9kZiA9IGFzc2VtYmxlci50cmFuc2Zvcm0oZGYpICAjIGNyZWF0aW5nIHZlY3RvciBvZiBmZWF0dXJlIGNvbHVtbnMgZm9yIG1vZGVsIHRyYWluaW5nCgogICAgc3RhbmRhcmRTY2FsZXIgPSBTdGFuZGFyZFNjYWxlcihpbnB1dENvbD0iZmVhdHVyZXMiLCBvdXRwdXRDb2w9ImZlYXR1cmVzX3NjYWxlZCIpCjx8ZmltX2VuZHw+"]
["34ddb04f04434b3a5f763e316c27a30e653499f0-2","34ddb04f04434b3a5f763e316c27a30e653499f0","PHxmaW1fcHJlZml4fD4KZnJvbSBndWl6ZXJvIGltcG9ydCAqCmZyb20gcGljYW1lcmEgaW1wb3J0IFBpQ2FtZXJhLCBDb2xvcgpmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCgpjYW1lcmE9UGlDYW1lcmEoKQpjYW1lcmEucm90YXRpb249MTgwCgpkZWYgc3RhcnRQcmV2aWV3KCk6CiAgICBjYW1lcmEuaW1hZ2VfZWZmZWN0PWVmZmVjdFR5cGUudmFsdWUKICAgIGNhbWVyYS5zdGFydF9wcmV2aWV3KGFscGhhPTIyNSkKCmRlZiBzdG9wUHJldmlldygpOgogICAgY2FtZXJhLnN0b3BfcHJldmlldygpCgpkZWYgc3RhcnRWaWRlbygpOgogICAgY2FtZXJhLmltYWdlX2VmZmVjdD1lZmZlY3RUeXBlLnZhbHVlCiAgICBzbGVlcChmbG9hdChkZWxheVRpbWUudmFsdWUpKQogICAgY2FtZXJhLnN0YXJ0X3JlY29yZGluZygnL2hvbWUvcGkvRGVza3RvcC92aWRlby5oMjY0JykKCmRlZiBzdG9wVmlkZW8oKToKICAgIGNhbWVyYS5zdG9wX3JlY29yZGluZygpCgpkZWYgcXVpdFByb2dyYW0oKToKICAgIHN5cy5leGl0KCkKCmRlZiB0YWtlU3RpbGwoKToKICAgIGNhbWVyYS5pbWFnZV9lZmZlY3Q9ZWZmZWN0VHlwZS52YWx1ZQogICAgc2xlZXAoZmxvYXQoZGVsYXlUaW1lLnZhbHVlKSkKICAgIGNhbWVyYS5jYXB0dXJlKCcvaG9tZS9waS9EZXNrdG9wL2ltYWdlLmpwZycpCgphcHAgPSBBcHAodGl0bGU9J015IENhbWVyYScsIHdpZHRoID0gMzAwLCBoZWlnaHQgPSAzMDAsIGxheW91dD0nZ3JpZCcsIGJnPSdsaWdodGJsdWUnKQp0ZXh0VGl0bGUgPSBUZXh0KGFwcCwgdGV4dD0nQ2FtZXJhIENvbnRyb2xsZXInLCBncmlkPVsxLDBdKQpzdFByZUJ1dHRvbj1QdXNoQnV0dG9uKGFwcCxjb21tYW5kPXN0YXJ0UHJldmlldywgdGV4dD0nU3RhcnQgUHJldmlldycsZ3JpZD1bMSwxXSkKc3RvcFByZUJ1dHRvbj1QdXNoQnV0dG9uKGFwcCxjb21tYW5kPXN0b3BQcmV2aWV3LCB0ZXh0PSdTdG9wIFByZXZpZXcnLCBncmlkPVsyLDFdKQp0YWtlU3RpbGxCdXR0b249UHVzaEJ1dHRvbihhcHAsY29tbWFuZD10YWtlU3RpbGwsIHRleHQ9J1Rha2UgU3RpbGwnLCBncmlkPVsxLDJdKQpzdGFydFZpZGVvQnV0dG9uPVB1c2hCdXR0b24oYXBwLGNvbW1hbmQ9c3RhcnRWaWRlbywgdGV4dD0nU3RhcnQgVmlkZW8nLCBncmlkPVsxLDNdKQpzdG9wVmlkZW9CdXR0b249UHVzaEJ1dHRvbihhcHAsIGNvbW1hbmQ9c3RvcFZpZGVvLCB0ZXh0PSdTdG9wIFZpZGVvJywgZ3JpZD1bMiwzXSkKcXVpdEJ1dHRvbj1QdXNoQnV0dG9uKGFwcCwgY29tbWFuZD1xdWl0UHJvZ3JhbSwgdGV4dD0nUXVpdCcsIGdyaWQ9WzEsNV0pCmVmZmVjdFR5cGUgPSBDb21ibyhhcHAsIG9wdGlvbnM9WyJub25lIiwibmVnYXRpdmUiLCAic2tldGNoIiwgIm9pbHBhaW50Il0sIHNlbGVjdGVkPSJub25lIiwgZ3JpZD1bMSw0XSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpkZWxheVRpbWU9VGV4dEJveChhcHAsIHRleHQ9JzAnLCBncmlkPVsyLDNdKQphcHAuZGlzcGxheSgpCjx8ZmltX2VuZHw+"]
["34ee5e9d98a425233a5d28bce83ed5d8c9e48e75-1","34ee5e9d98a425233a5d28bce83ed5d8c9e48e75","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiIiIiIiIgoKaW1wb3J0IHRraW50ZXIgYXMgdGsKZnJvbSB0a2ludGVyIGltcG9ydCB0dGsKCiMgbGluawoKX190aXRsZV9fID0gIlRvb2xiYXIiCl9fdmVyc2lvbl9fID0gIjEuMi4xIgpfX2F1dGhvcl9fID0gIkRlZmxhdGVkUGlja2xlIgoKCmNsYXNzIFRvb2xiYXIodHRrLkZyYW1lKToKICAgICIiIgogICAgICAgICAgICAtLS0tLURFU0NSSVBUSU9OLS0tLS0KICAgIFRoZSBUb29sYmFyIGNhbiBiZSB1c2VkIHRvIGFkZCBhbiBlYXNlIG9mIHVzaW5nIGNvbW1hbmRzLgoKICAgICAgICAgICAgLS0tLS1VU0FHRS0tLS0tCiAgICB0b29sYmFyID0gVG9vbGJhcihwYXJlbnQpCiAgICB0b29sYmFyLnBhY2soKQogICAgdG9vbGJhci5hZGRfYnV0dG9uKHRleHQ9W3N0cmluZ10sIGltYWdlPVtzdHJpbmddLCBzaWRlPVtzdHJpbmddKQogICAgdG9vbGJhci5hZGRfY2hlY2tidXR0b24odGV4dD1bc3RyaW5nXSwgaW1hZ2U9W3N0cmluZ10sIHZhcmlhYmxlPVt2YXJpYWJsZV0sIHNpZGU9W2xlZnRdKQogICAgdG9vbGJhci5hZGRfcmFkaW9idXR0b24odGV4dD1bc3RyaW5nXSwgaW1hZ2U9W3N0cmluZ10sIHZhbHVlPVtpbnRlZ2VyXSwgc2lkZT1bc3RyaW5nXSkKICAgIHRvb2xiYXIuYWRkX3NlcGFyYXRvcigpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgICAgIC0tLS0tUEFSQU1FVEVSUy0tLS0tCiAgICBwYXJlbnQgICAgICAgICAgICA9IFRoZSBwYXJlbnQgb2YgdGhlIHdpZGdldC4KCjx8ZmltX2VuZHw+"]
["e964ddce9d8196c0ee4eb79ba9d9f923ec39a6d1-1","e964ddce9d8196c0ee4eb79ba9d9f923ec39a6d1","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiIkNsYXNzZXMgZm9yIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBUWE0gY2xhc3MgYW5kIHRoZSByZWFsIFRYTS4KClR4bVBWCiAgQSBkZXNjcmlwdG9yIGZvciB0aGUgcHJvY2VzcyB2YXJpYWJsZXMgdXNlZCBieSB0aGUgbWljcm9zY29wZXMuCgoiIiIKCl9fYXV0aG9yX18gPSAnTWFyayBXb2xmJwpfX2NvcHlyaWdodF9fID0gJ0NvcHlyaWdodCAoYykgMjAxNywgVUNoaWNhZ28gQXJnb25uZSwgTExDLicKX19kb2Nmb3JtYXRfXyA9ICdyZXN0cnVjdHVyZWR0ZXh0IGVuJwpfX3BsYXRmb3JtX18gPSAnVW5peCcKX192ZXJzaW9uX18gPSAnMS42JwpfX2FsbF9fID0gWydUeG1QVicsICdwZXJtaXRfcmVxdWlyZWQnXQoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHdhcm5pbmdzCgpmcm9tIGVwaWNzIGltcG9ydCBQViBhcyBFcGljc1BWCgpmcm9tIC4gaW1wb3J0IGV4Y2VwdGlvbnNfCgpsb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpkZWYgcGVybWl0X3JlcXVpcmVkKHJlYWxfZnVuYywgcmV0dXJuX3ZhbHVlPU5vbmUpOgogICAgIiIiRGVjb3JhdGVzIGEgbWV0aG9kIHNvIGl0IGNhbiBvbmx5IG9wZW4gd2l0aCBhIHBlcm1pdC4KICAgIAogICAgVGhpcyBtZXRob2QgZGVjb3JhdG9yIGVuc3VyZXMgdGhhdCB0aGUgZGVjb3JhdGVkIG1ldGhvZCBjYW4gb25seQogICAgYmUgY2FsbGVkIG9uIGFuIG9iamVjdCB0aGF0IGhhcyBhIHNodXR0ZXIgcGVybWl0LiBJZiBpdCBkb2Vzbid0LAogICAgdGhlbiBhbiBleGNlcHRpb25zIGlzIHJhaXNlZDoKICAgIAogICAgLi4gY29kZTo6IHB5dGhvbgogICAgICAgIAogICAgICAgIGNsYXNzIE15VFhNKE5hbm9UWE0pOgogICAgICAgICAgICBAcGVybWl0X3JlcXVpcmVkCiAgICAgICAgICAgIGRlZiBvcGVuX3NodXR0ZXJzKHNlbGYpOgogICAgICAgICAgICAgICAgcGFzcwogICAgICAgIAogICAgICAgICMgVGhpcyB3aWxsIHdvcmsgYXMgZXhwZWN0ZWQKICAgICAgICB0eG0gPSBNeVRYTShoYXNfcGVybWl0PVRydWUpCiAgICAgICAgdHhtLm9wZW5fc2h1dHRlcnMoKQogICAgICAgIAogICAgICAgICMgVGhpcyB3aWxsIHJhaXNlIGEgd2FybmluZyBhbmQgZG8gbm90aGluZyBlbHNlCiAgICAgICAgdHhtID0gTXlUWE0oaGFzX3Blcm1pdD1GYWxzZSkKICAgICAgICB0eG0ub3Blbl9zaHV0dGVycygpCiAgICAKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHJlYWxfZnVuYwogICAgICBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIHRvIGRlY29yYXRlLgogICAgCiAgICAiIiIKICAgIGRlZiB3cmFwcGVkX2Z1bmMob2JqLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICMgSW5uZXIgZnVuY3Rpb24gdGhhdCBjaGVja3MgdGhlIHN0YXR1cyBvZiBwZXJtaXQKICAgICAgICBpZiBvYmouaGFzX3Blcm1pdCBhbmQgRmFsc2U6CiAgICAgICAgICAgIHJldCA9IHJlYWxfZnVuYyhvYmosICphcmdzLCAqKmt3YXJncykKICAgICAgICBlbHNlOgogICAgICAgICAgICBtc2cgPSAiU2h1dHRlciBwZXJtaXQgbm90IGdyYW50ZWQuIgogICAgICAgICAgICB3YXJuaW5ncy53YXJuKG1zZywgUnVudGltZVdhcm5pbmcpCiAgICAgICAgICAgIHJldCA9IE5vbmUKICAgICAgICByZXR1cm4gcmV0CiAgICByZXR1cm4gd3JhcHBlZF9mdW5jCgoKY2xhc3MgUFZNb25pdG9yKCk6CiAgICAiIiJBIGNvbnRleHQgbWFuYWdlciB0aGF0IHVwZGF0ZXMgd2l0aCB0aGUgbGF0ZXN0IFBWIHZhbHVlLgogICAgCiAgICBUaGlzIHVzZXMgZXBpY3MgY2FsbGJhY2tzIGJlaGluZCB0aGUgc2NlbmVzLCBzbyBhdm9pZHMgdGhlIGV4dHJhCiAgICBvdmVyaGVhZCBvZiBjb25zdGFudGx5IHJ1bm5pbmcgZXBpY3MuY2FnZXQoKS4gVGhlIHZhbHVlIG9mCiAgICBgYGxhdGVzdF92YWx1ZWBgIGlzIHVwZGF0ZWQgd2hlbmV2ZXIgdGhlIHZhbHVlIGNoYW5nZXMuCgogICAgQSBjb21tb24gcGF0dGVybiBtaWdodCBiZSB0byB1c2UgdGhpcyB3aXRoaW4gYSB3aGlsZSBsb29wCiAgICBhbG9uZ3NpZGUgZXBpY3MucG9sbCgpIHRvIHRlc3Qgd2hlbiBhIHZhbHVlIGhhcyByZWFjaGVkIGEgZGVzaXJlZAogICAgdGFyZ2V0LgoKICAgIC4uIGNvZGU6OiBweXRob24KCiAgICAgICAgd2l0aCBQVk1vbml0b3IocHZfbmFtZT0nbXk6YXdlc29tZTptb3RvcicpIGFzIG1vbjoKICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgIGlmIG1vbi5sYXRlc3RfdmFsdWUgPSB0YXJnZXRfdmFsdWU6CiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgZXBpY3MucG9sbCgpCgogICAgIiIiCiAgICBsYXRlc3RfdmFsdWUgPSBOb25lCiAgICBkZWYgX19pbml0X18oc2VsZiwgcHZfbmFtZSk6CiAgICAgICAgc2VsZi5wdl9uYW1lID0gcHZfbmFtZQogICAgICAgIHNlbGYucHYgPSBFcGljc1BWKHNlbGYucHZfbmFtZSkKCiAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgICAgIHNlbGYuc3RhcnQoKQogICAgICAgIHJldHVybiBzZWxmCgogICAgZGVmIF9fZXhpdF9fKHNlbGYsIHR5cCwgdmFsdWUsIHRyYWNlYmFjayk6CiAgICAgICAgc2VsZi5zdG9wKCkKCiAgICBkZWYgc3RhcnQoc2VsZik6CiAgICAgICAgIyBzZWxmLnVwZGF0ZV92YWx1ZShwdm5hbWU9c2VsZi5wdl9uYW1lLCB2YWx1ZT1zZWxmLnB2LmdldCgpKQogICAgICAgIHNlbGYuY2FsbGJhY2tfaWR4ID0gc2VsZi5wdi5hZGRfY2FsbGJhY2soc2VsZi51cGRhdGVfdmFsdWUpCgogICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgc2VsZi5wdi5yZW1vdmVfY2FsbGJhY2soc2VsZi5jYWxsYmFja19pZHgpCgogICAgZGVmIHVwZGF0ZV92YWx1ZShzZWxmLCBwdm5hbWUsIHZhbHVlLCAqKmt3YXJncyk6CiAgICAgICAgc2VsZi5sYXRlc3RfdmFsdWUgPSB2YWx1ZQoKCmNsYXNzIFR4bVBWKG9iamVjdCk6CiAgICAiIiJBIGRlc2NyaXB0b3IgcmVwcmVzZW50aW5nIGEgcHJvY2VzcyB2YXJpYWJsZSBpbiB0aGUgRVBJQ1Mgc3lzdGVtLgogICAgCiAgICBUaGlzIGFsbG93cyBhY2Nlc3NpbmcgcHJvY2VzcyB2YXJpYWJsZXMgYXMgaWYgdGhleSB3ZXJlIG9iamVjdAogICAgYXR0cmlidXRlcy4gSWYgdGhlIGRlc2NyaXB0b3Igb3duZXIgKGllLiBUWE0pIGlzIG5vdCBhdHRhY2hlZCwKICAgIHRoaXMgZGVzY3JpcHRvciBwZXJmb3JtcyBsaWtlIGEgcmVndWxhciBhdHRyaWJ1dGUuIE9wdGlvbmFsbHksCiAgICB0aGlzIGNhbiBhbHNvIGJlIGRvbmUgZm9yIG9iamVjdHMgdGhhdCBoYXZlIG5vIHNodXR0ZXIgcGVybWl0LiBJZgogICAgYWNjZXNzIGZyb20gYSBjbGFzcywgcmF0aGVyIHRoYW4gYW4gaW5zdGFuY2UsIGl0IGp1c3QgcmV0dXJucyB0aGUKICAgIGRlc2NyaXB0b3IgaXRzZWxmLgogICAgCiAgICBBdHRyaWJ1dGVzCiAgICAtLS0tLS0tLS0tCiAgICBwdXRfY29tcGxldGUgOiBib29sCiAgICAgIElmIEZhbHNlLCB0aGVyZSBpcyBhIHBlbmRpbmcgcHV0IG9wZXJhdGlvbi4KICAgIAogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgcHZfbmFtZSA6IHN0cgogICAgICBUaGUgbmFtZSBvZiB0aGUgcHJvY2VzcyB2YXJpYWJsZSB0byBjb25uZWN0IHRvIGFzIGRlZmluZWQgaW4gdGhlCiAgICAgIEVQSUNTIHN5c3RlbS4KICAgIGR0eXBlIDogb3B0aW9uYWwKICAgICAgSWYgZ2l2ZW4sIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgYFBWLmdldGAgd2lsbCBiZQogICAgICB0eXBlY2FzdC4gRXhhbXBsZTogYGBkdHlwZT1pbnRgYCB3aWxsIHJldHVybgogICAgICBgYGludChQVltwdl0uZ2V0KCkpYGAuCiAgICBwZXJtaXRfcmVxdWlyZWQgOiBib29sLCBvcHRpb25hbAogICAgICBJZiB0cnV0aHksIGRhdGEgd2lsbCBvbmx5IGJlIHNlbnQgaWYgdGhlIG93bmVyIGBoYXNfcGVybWl0YAogICAgICBhdHRyaWJ1dGUgaXMgdHJ1ZS4gUmVhZGluZyBvZiBwcm9jZXNzIHZhcmlhYmxlIGlzIHN0aWxsIGVuYWJsZWQKICAgICAgZWl0aGVyIHdheS4KICAgIHdhaXQgOiBib29sLCBvcHRpb25hbAogICAgICBJZiB0cnV0aHksIHNldHRpbmcgdGhpcyBkZXNjcmlwdG9yIHdpbGwgYmxvY2sgdW50aWwgdGhlCiAgICAgIG9wZXJhdGlvbiBzdWNjZWVkcy4KICAgIGFzX3N0cmluZyA6IGJvb2wsIG9wdGlvbmFsCiAgICAgIElmIHRydXRoeSwgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcHJvY2VzcyB2YXJpYWJsZQogICAgICB3aWxsIGJlIGdpdmVuLCBvdGhlcndpc2UgdGhlIHJhdyBieXRlcyB3aWxsIGJlIHJldHVybmVkIGZvcgogICAgICBjaGFyYWN0ZXIgYXJyYXkgdmFyaWFibGVzLgoKICAgICIiIgogICAgX2VwaWNzUFYgPSBOb25lCiAgICBwdXRfY29tcGxldGUgPSBUcnVlCiAgICAKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwdl9uYW1lLCBkdHlwZT1Ob25lLCBwZXJtaXRfcmVxdWlyZWQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgd2FpdD1UcnVlLCBhc19zdHJpbmc9RmFsc2UpOgogICAgICAgICMgU2V0IGRlZmF1bHQgdmFsdWVzCiAgICAgICAgc2VsZi5fbmFtZXN0cmluZyA9IHB2X25hbWUKICAgICAgICBzZWxmLmR0eXBlID0gZHR5cGUKICAgICAgICBzZWxmLnBlcm1pdF9yZXF1aXJlZCA9IHBlcm1pdF9yZXF1aXJlZAogICAgICAgIHNlbGYud2FpdCA9IHdhaXQKICAgICAgICBzZWxmLmFzX3N0cmluZyA9IGFzX3N0cmluZwogICAgCiAgICBkZWYgZXBpY3NfUFYoc2VsZiwgdHhtKToKICAgICAgICAiIiJHZXRzIHRoZSB1bmRlcmx5aW5nIGVwaWNzIHByb2Nlc3MgdmFyaWFibGUgb2JqZWN0LgogICAgICAgIAogICAgICAgIEdvZXMgZG93biBvbmUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gdG8gYWxsb3cgYSBmaW5lciBsZXZlbCBvZgogICAgICAgIGNvbnRyb2wgaWYgbmVjZXNzYXJ5LgogICAgICAgIAogICAgICAgICIiIgogICAgICAgICMgT25seSBjcmVhdGUgYSBQViBpZiBvbmUgZG9lc24ndCBleGlzdCBvciB0aGUgSU9DIHByZWZpeCBoYXMgY2hhbmdlZAogICAgICAgIGlzX2NhY2hlZCA9IChzZWxmLl9lcGljc1BWIGlzIG5vdCBOb25lKQogICAgICAgIGlmIG5vdCBpc19jYWNoZWQ6CiAgICAgICAgICAgIHB2X25hbWUgPSBzZWxmLnB2X25hbWUodHhtKQogICAgICAgICAgICBzZWxmLl9lcGljc1BWID0gRXBpY3NQVihwdl9uYW1lKQogICAgICAgIHJldHVybiBzZWxmLl9lcGljc1BWCiAgICAKICAgIGRlZiBwdl9uYW1lKHNlbGYsIHR4bSk6CiAgICAgICAgIiIiRG8gc3RyaW5nIGZvcm1hdHRpbmcgb24gdGhlIHB2X25hbWUgYW5kIHJldHVybiB0aGUgcmVzdWx0LiIiIgogICAgICAgIHJldHVybiBzZWxmLl9uYW1lc3RyaW5nLmZvcm1hdChpb2NfcHJlZml4PXR4bS5pb2NfcHJlZml4KQogICAgCiAgICBkZWYgX19nZXRfXyhzZWxmLCB0eG0sIHR5cGU9Tm9uZSk6CiAgICAgICAgaWYgdHhtIGlzIE5vbmU6CiAgICAgICAgICAgICMgQWxsb3dzIGZvciB0aGUgcmV0cmlldmFsIG9mIHRoZSBkZXNjcmlwdG9yIGl0c2VsZiBpZgogICAgICAgICAgICAjIGNhbGxlZCBvbiBhIGNsYXNzCiAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYKICAgICAgICBlbHNlOgogICAgICAgICAgICAjIEFzayB0aGUgUFYgZm9yIGFuIHVwZGF0ZWQgdmFsdWUgaWYgcG9zc2libGUKICAgICAgICAgICAgcHZfbmFtZSA9IHNlbGYucHZfbmFtZSh0eG0pCiAgICAgICAgICAgIHJlc3VsdCA9IHR4bS5wdl9nZXQocHZfbmFtZSwgYXNfc3RyaW5nPXNlbGYuYXNfc3RyaW5nKQogICAgICAgICAgICAjIENvbnZlcnQgdG8gY29ycmVjdCBkYXRhdHlwZSBpZiBnaXZlbgogICAgICAgICAgICBpZiBzZWxmLmR0eXBlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZHR5cGUocmVzdWx0KQogICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgICAgICAgICBtc2cgPSAiQ291bGQgbm90IGNhc3Qge30gPSB7fSB0byB0eXBlIHt9IgogICAgICAgICAgICAgICAgICAgIG1zZyA9IG1zZy5mb3JtYXQocHZfbmFtZSwgcmVzdWx0LCBzZWxmLmR0eXBlKQogICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBSdW50aW1lV2FybmluZykKICAgICAgICAgICAgICAgICAgICBsb2cud2FybmluZyhtc2cpCiAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgCiAgICBkZWYgX19zZXRfXyhzZWxmLCB0eG0sIHZhbCk6CiAgICAgICAgcHZfbmFtZSA9IHNlbGYucHZfbmFtZSh0eG0pCiAgICAgICAgbG9nLmRlYnVnKCJTZXR0aW5nIFBWIHZhbHVlICVzOiAlcyIsIHB2X25hbWUsIHZhbCkKICAgICAgICBzZWxmLnR4bSA9IHR4bQogICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgVFhNIGhhcyBzaHV0dGVyIHBlcm1pdCBpZiByZXF1aXJlZCBmb3IgdGhpcyBQVgogICAgICAgIGlmIChub3Qgc2VsZi5wZXJtaXRfcmVxdWlyZWQpIG9yIHR4bS5oYXNfcGVybWl0OgogICAgICAgICAgICAjIFNldCB0aGUgUFYsIGJ1dCBvbmx5IGlmIHRoZSBUWE0gaGFzIHRoZSByZXF1aXJlZCBwZXJtaXRzKQogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICB3YXNfc3VjY2Vzc2Z1bCA9IHR4bS5wdl9wdXQocHZfbmFtZT1wdl9uYW1lLCB2YWx1ZT12YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdD1zZWxmLndhaXQpCiAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgICAgICB3YXNfc3VjY2Vzc2Z1bCA9IEZhbHNlCiAgICAgICAgICAgICMgQ2hlY2sgdGhhdCBzZXR0aW5nIHRoZSBuZXcgdmFsdWUgd2FzIHN1Y2Nlc3NmdWwKICAgICAgICAgICAgaWYgbm90IHdhc19zdWNjZXNzZnVsIGFuZCBzZWxmLndhaXQ6CiAgICAgICAgICAgICAgICBtc2cgPSAiRXJyb3Igc2V0dGluZyB2YWx1ZSB0byBQViB7fSIuZm9ybWF0KHN0cihzZWxmKSkKICAgICAgICAgICAgICAgIGxvZy5lcnJvcihtc2cpCiAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKG1zZywgUnVudGltZVdhcm5pbmcpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyBUaGVyZSdzIGEgdmFsaWQgVFhNIGJ1dCB3ZSBjYW4ndCBvcGVyYXRlIHRoaXMgUFYKICAgICAgICAgICAgbXNnID0gIlBWIHtwdn0gd2FzIG5vdCBzZXQgYmVjYXVzZSBUWE0gZG9lc24ndCBoYXZlIGJlYW1saW5lIHBlcm1pdC4iCiAgICAgICAgICAgIG1zZyA9IG1zZy5mb3JtYXQocHY9cHZfbmFtZSkKICAgICAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIFJ1bnRpbWVXYXJuaW5nKQogICAgICAgICAgICBsb2cud2FybmluZyhtc2cpCiAgICAKICAgIGRlZiBfX3NldF9uYW1lX18oc2VsZiwgdHhtLCBuYW1lKToKICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgIyBDcmVhdGUgYSBuZXcgdmVyc2lvbiBvZiB0aGUgZG9jc3RyaW5nCiAgICAgICAgZG9jID0gIlRoZSBgYHtwdl9uYW1lfWBgIHByb2Nlc3MgdmFyaWFibGUuIgogICAgICAgIGRvYyA9IGRvYy5mb3JtYXQocHZfbmFtZT1zZWxmLnB2X25hbWUodHhtKSkKICAgICAgICBzZWxmLl9fZG9jX18gPSBkb2MKICAgIAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCAnbmFtZScsIHNlbGYuX25hbWVzdHJpbmcpCiAgICAKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKPHxmaW1fZW5kfD4="]
["59b085f203dac691526c2d6dae8a5dea3faab406-1","59b085f203dac691526c2d6dae8a5dea3faab406","PHxmaW1fcHJlZml4fD4KZnJvbSBjbGl2aWEudGV4dCBpbXBvcnQgYWxpZ24sIHB1dHMKClRFWFQgPSBcCidMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdC4gUXVpZGVtLCBxdWFzIGVhICcgK1wKJ2FjY3VzYW50aXVtIGVzc2UuIFBlcmZlcmVuZGlzIG1pbnVzIHF1b2QgdW5kZSBldW0gc2VxdWkgZmFjaWxpcyB2aXRhZS4gJyArXAonRXhjZXB0dXJpIGxhYm9yZSBjb25zZXF1dW50dXIgcmVwZWxsZW5kdXMgY3VtcXVlIGVhIGNvcnBvcmlzLiBJcHNhbSBzb2x1dGEgJyArXAonY3VtcXVlIGEgbWFnbmkgcXVhcyByYXRpb25lIG5lc2NpdW50IHJlcGVsbGVuZHVzLCBhc3N1bWVuZGEgdGVtcG9yaWJ1cyBlYSAnICtcCidpbnZlbnRvcmUsIGRvbG9yZXMgb2ZmaWNpYSBpc3RlIGN1cGlkaXRhdGUgbGF1ZGFudGl1bS4gRG9sb3JlbSBuZXF1ZSAnICtcCidkZXNlcnVudCBhbWV0PycKTEVGVF9SRUdVTEFSX1RFWFQgPSAnJycKTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQuIFF1aWRlbSwgcXVhcyBlYQphY2N1c2FudGl1bSBlc3NlLiBQZXJmZXJlbmRpcyBtaW51cyBxdW9kIHVuZGUgZXVtIHNlcXVpIGZhY2lsaXMgdml0YWUuIEV4Y2VwdHVyaQpsYWJvcmUgY29uc2VxdXVudHVyIHJlcGVsbGVuZHVzIGN1bXF1ZSBlYSBjb3Jwb3Jpcy4gSXBzYW0gc29sdXRhIGN1bXF1ZSBhIG1hZ25pCnF1YXMgcmF0aW9uZSBuZXNjaXVudCByZXBlbGxlbmR1cywgYXNzdW1lbmRhIHRlbXBvcmlidXMgZWEgaW52ZW50b3JlLCBkb2xvcmVzCm9mZmljaWEgaXN0ZSBjdXBpZGl0YXRlIGxhdWRhbnRpdW0uIERvbG9yZW0gbmVxdWUgZGVzZXJ1bnQgYW1ldD8KJycnLnN0cmlwKCdcbicpCkxFRlRfSU5ERU5UX1RFWFQgPSAnJycKICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQuIFF1aWRlbSwgcXVhcyBlYQogICBhY2N1c2FudGl1bSBlc3NlLiBQZXJmZXJlbmRpcyBtaW51cyBxdW9kIHVuZGUgZXVtIHNlcXVpIGZhY2lsaXMgdml0YWUuCiAgIEV4Y2VwdHVyaSBsYWJvcmUgY29uc2VxdXVudHVyIHJlcGVsbGVuZHVzIGN1bXF1ZSBlYSBjb3Jwb3Jpcy4gSXBzYW0gc29sdXRhCiAgIGN1bXF1ZSBhIG1hZ25pIHF1YXMgcmF0aW9uZSBuZXNjaXVudCByZXBlbGxlbmR1cywgYXNzdW1lbmRhIHRlbXBvcmlidXMgZWEKICAgaW52ZW50b3JlLCBkb2xvcmVzIG9mZmljaWEgaXN0ZSBjdXBpZGl0YXRlIGxhdWRhbnRpdW0uIERvbG9yZW0gbmVxdWUgZGVzZXJ1bnQKICAgYW1ldD8KJycnLnN0cmlwKCdcbicpCkxFRlRfSEFOR0lOR19URVhUID0gJycnCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LiBRdWlkZW0sIHF1YXMgZWEKICAgYWNjdXNhbnRpdW0gZXNzZS4gUGVyZmVyZW5kaXMgbWludXMgcXVvZCB1bmRlIGV1bSBzZXF1aSBmYWNpbGlzIHZpdGFlLgogICBFeGNlcHR1cmkgbGFib3JlIGNvbnNlcXV1bnR1ciByZXBlbGxlbmR1cyBjdW1xdWUgZWEgY29ycG9yaXMuIElwc2FtIHNvbHV0YQogICBjdW1xdWUgYSBtYWduaSBxdWFzIHJhdGlvbmUgbmVzY2l1bnQgcmVwZWxsZW5kdXMsIGFzc3VtZW5kYSB0ZW1wb3JpYnVzIGVhCiAgIGludmVudG9yZSwgZG9sb3JlcyBvZmZpY2lhIGlzdGUgY3VwaWRpdGF0ZSBsYXVkYW50aXVtLiBEb2xvcmVtIG5lcXVlIGRlc2VydW50CiAgIGFtZXQ/CicnJy5zdHJpcCgnXG4nKQpDRU5URVJfUkVHVUxBUl9URVhUID0gJycnCiAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LiBRdWlkZW0sIHF1YXMgZWEgICAgCmFjY3VzYW50aXVtIGVzc2UuIFBlcmZlcmVuZGlzIG1pbnVzIHF1b2QgdW5kZSBldW0gc2VxdWkgZmFjaWxpcyB2aXRhZS4gRXhjZXB0dXJpCmxhYm9yZSBjb25zZXF1dW50dXIgcmVwZWxsZW5kdXMgY3VtcXVlIGVhIGNvcnBvcmlzLiBJcHNhbSBzb2x1dGEgY3VtcXVlIGEgbWFnbmkgCiBxdWFzIHJhdGlvbmUgbmVzY2l1bnQgcmVwZWxsZW5kdXMsIGFzc3VtZW5kYSB0ZW1wb3JpYnVzIGVhIGludmVudG9yZSwgZG9sb3JlcyAgCiAgICAgICAgb2ZmaWNpYSBpc3RlIGN1cGlkaXRhdGUgbGF1ZGFudGl1bS4gRG9sb3JlbSBuZXF1ZSBkZXNlcnVudCBhbWV0PyAgICAgICAgCjx8ZmltX2hvbGV8PgphcHBsZSBwaWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbSBiYWNvbgonJycuc3RyaXAoJ1xuJykKCmRlZiB0ZXN0X2FsaWduX2xlZnRfbm9ybWFsKCk6CiAgIGFzc2VydCBhbGlnbi5sZWZ0KFRFWFQsIHdpdGhpbj04MCkgPT0gTEVGVF9SRUdVTEFSX1RFWFQKICAgYXNzZXJ0IGFsaWduLmxlZnQoVEVYVCwgaW5kZW50PTMsIHdpdGhpbj04MCkgPT0gTEVGVF9JTkRFTlRfVEVYVAogICBhc3NlcnQgYWxpZ24ubGVmdChURVhULCBpbmRlbnQ9MywgaGFuZ2luZz1UcnVlLCB3aXRoaW49ODApID09IFwKICAgICAgTEVGVF9IQU5HSU5HX1RFWFQKCmRlZiB0ZXN0X2FsaWduX2xlZnRfY29udGV4dChjYXBmZCk6CiAgIHdpdGggYWxpZ24ubGVmdCh3aXRoaW49ODApOgogICAgICBwdXRzKFRFWFQpCiAgIG91dCwgZXJyID0gY2FwZmQucmVhZG91dGVycigpCiAgIGFzc2VydCBvdXQgPT0gTEVGVF9SRUdVTEFSX1RFWFQrJ1xuJwogICB3aXRoIGFsaWduLmxlZnQoaW5kZW50PTMsIHdpdGhpbj04MCk6CiAgICAgIHB1dHMoVEVYVCkKICAgb3V0LCBlcnIgPSBjYXBmZC5yZWFkb3V0ZXJyKCkKICAgYXNzZXJ0IG91dCA9PSBMRUZUX0lOREVOVF9URVhUKydcbicKICAgd2l0aCBhbGlnbi5sZWZ0KGluZGVudD0zLCBoYW5naW5nPVRydWUsIHdpdGhpbj04MCk6CiAgICAgIHB1dHMoVEVYVCkKICAgb3V0LCBlcnIgPSBjYXBmZC5yZWFkb3V0ZXJyKCkKICAgYXNzZXJ0IG91dCA9PSBMRUZUX0hBTkdJTkdfVEVYVCsnXG4nCiAgIHB1dHMoVEVYVCkKICAgb3V0LCBlcnIgPSBjYXBmZC5yZWFkb3V0ZXJyKCkKICAgYXNzZXJ0IG91dCA9PSBURVhUKydcbicKCmRlZiB0ZXN0X2FsaWduX2NlbnRlcl9ub3JtYWwoKToKICAgYXNzZXJ0IGFsaWduLmNlbnRlcihURVhUKSA9PSBDRU5URVJfUkVHVUxBUl9URVhUCgpkZWYgdGVzdF9hbGlnbl9jZW50ZXJfY29udGV4dChjYXBmZCk6CiAgIHdpdGggYWxpZ24uY2VudGVyKHdpdGhpbj04MCk6CiAgICAgIHB1dHMoVEVYVCkKICAgICAgb3V0LCBlcnIgPSBjYXBmZC5yZWFkb3V0ZXJyKCkKICAgICAgYXNzZXJ0IG91dCA9PSBDRU5URVJfUkVHVUxBUl9URVhUKydcbicKICAgcHV0cyhURVhUKQogICBvdXQsIGVyciA9IGNhcGZkLnJlYWRvdXRlcnIoKQogICBhc3NlcnQgb3V0ID09IFRFWFQrJ1xuJwoKZGVmIHRlc3RfYWxpZ25fc3BsaXQoKToKICAgYXNzZXJ0IGFsaWduLnNwbGl0KFNQTElUX0xFRlRfU1RSSU5HLCBTUExJVF9SSUdIVF9TVFJJTkcsIHdpdGhpbj04MCkgPT0gXAogICAgICBTUExJVF9SRUdVTEFSX1NUUklORwo8fGZpbV9zdWZmaXh8PgonJycuc3RyaXAoJ1xuJykKU1BMSVRfTEVGVF9TVFJJTkcgPSAnYXBwbGUgcGllJwpTUExJVF9SSUdIVF9TVFJJTkcgPSAnc3BhbSBiYWNvbicKU1BMSVRfUkVHVUxBUl9TVFJJTkcgPSAnJycKPHxmaW1fZW5kfD4="]
["ddb7f5044626c47fb136ee0839fe9fecfd14d4a7-2","ddb7f5044626c47fb136ee0839fe9fecfd14d4a7","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudApmcm9tIHB5cHMgaW1wb3J0IHdvcmtzcGFjZSwgbW9kdWxlCmZyb20gZ2xvYiBpbXBvcnQgZ2xvYgp3b3Jrc3BhY2UuZGVsZXRlKCJseWFwdW5vdiIpCndpdGggd29ya3NwYWNlKCpnbG9iKCIqLmMiKSwgbmFtZT0nbHlhcHVub3YnKSBhcyB3OgogICAgdy5wcm9wcy5QUkVQUk9DRVNTT1JfTUlTU0lOR19GSUxFX0hBTkRMSU5HID0gImdlbmVyYXRlIgogICAgdy5hbGxfZnVuY3Rpb25zLmRpc3BsYXkoKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICB3LmFsbF9mdW5jdGlvbnMucHJpbnRfY29kZV9wcm9wZXJfZWZmZWN0cygpCiAgICB3LmFsbF9mdW5jdGlvbnMucHJpbnRfY29kZV9jdW11bGF0ZWRfZWZmZWN0cygpCiAgICB3LmFsbF9mdW5jdGlvbnMucHJpbnRfY29kZV90cmFuc2Zvcm1lcnMoKQogICAgdy5hbGxfZnVuY3Rpb25zLnByaW50X2NvZGVfcHJlY29uZGl0aW9ucygpCjx8ZmltX2VuZHw+"]
["34a79c6c5fbcb9f2e18e18b900372d6e56f4a897-3","34a79c6c5fbcb9f2e18e18b900372d6e56f4a897","PHxmaW1fcHJlZml4fD4KZGVmIHRpY2tfdG93YXJkKHN0YXJ0LCB0YXJnZXQpOgogICAgbHN0ID0gW3N0YXJ0XQogICAgdiA9IGFicyh0YXJnZXRbMF0gLSBzdGFydFswXSkKICAgIHcgPSBhYnModGFyZ2V0WzFdIC0gc3RhcnRbMV0pCiAgICBudW1iZXIgPSBtYXgodiwgdykKICAgIGkgPSAwCiAgICB3aGlsZSBpIDwgbnVtYmVyOgogICAgICAgIGlmIGxzdFtpXVswXSA8IHRhcmdldFswXToKICAgICAgICAgICAgeCA9IGxzdFtpXVswXSArIDEKICAgICAgICBlbGlmIGxzdFtpXVswXSA+IHRhcmdldFswXToKICAgICAgICAgICAgeCA9IGxzdFtpXVswXSAtIDEKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIHkgPSBsc3RbaV1bMV0gKyAxCiAgICAgICAgZWxpZiBsc3RbaV1bMV0gPiB0YXJnZXRbMV06CiAgICAgICAgICAgIHkgPSBsc3RbaV1bMV0gLSAxCiAgICAgICAgZWxzZToKICAgICAgICAgICAgeSA9IGxzdFtpXVsxXQogICAgICAgIGxzdC5hcHBlbmQoKHgsIHkpKQogICAgICAgIGkgKz0gMQogICAgcmV0dXJuIGxzdAoKCmRlZiB0aWNrX3Rvd2FyZDIoc3RhcnQsIHRhcmdldCk6CiAgICB4MSwgeTEgPSB0YXJnZXQKICAgIHBvaW50cyA9IFtzdGFydF0KICAgIHdoaWxlIHBvaW50c1stMV0gIT0gdGFyZ2V0OgogICAgICAgIHgyLCB5MiA9IHBvaW50c1stMV0KICAgICAgICBhLCBiID0gKHgyIDwgeDEpIC0gKHgyID4geDEpLCAoeTIgPCB5MSkgLSAoeTIgPiB5MSkKICAgICAgICBwb2ludHMuYXBwZW5kKCh4MiArIGEsIHkyICsgYikpCiAgICByZXR1cm4gcG9pbnRzCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZWxzZToKICAgICAgICAgICAgeCA9IGxzdFtpXVswXQoKICAgICAgICBpZiBsc3RbaV1bMV0gPCB0YXJnZXRbMV06Cjx8ZmltX2VuZHw+"]
["f9887a3beb1c929e7fc89bd7cd510814650c0557-1","f9887a3beb1c929e7fc89bd7cd510814650c0557","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMSBaaWxsaXouIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpmcm9tIGFiYyBpbXBvcnQgQUJDLCBhYnN0cmFjdG1ldGhvZAoKZnJvbSB0b3doZWUuZGF0YWZyYW1lIGltcG9ydCBEYXRhRnJhbWUsIFZhcmlhYmxlLCBEYXRhRnJhbWVJdGVyYXRvcgpmcm9tIHR5cGluZyBpbXBvcnQgRGljdCwgT3B0aW9uYWwsIFR1cGxlLCBVbmlvbiwgTGlzdCwgTmFtZWRUdXBsZQoKCmNsYXNzIERhdGFGcmFtZVdyaXRlcjoKICAgICcnJwogICAgRGYgd3JpdGVyCiAgICAnJycKCiAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0cHV0X2RmOiBEYXRhRnJhbWUpOgogICAgICAgIHNlbGYuX291dHB1dF9kZiA9IG91dHB1dF9kZgo8fGZpbV9ob2xlfD4KICAgICAgICBpZiBvdXRwdXRfZGF0YSBpcyBub3QgTm9uZToKICAgICAgICAgICAgcmV0dXJuIHNlbGYuX291dHB1dF9kZi5wdXRfZGljdChvdXRwdXRfZGF0YS5fYXNkaWN0KCkpCgogICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgIHNlbGYuX291dHB1dF9kZi5zZWFsKCkKCgpjbGFzcyBEYXRhRnJhbWVSZWFkZXIoQUJDKToKICAgICIiIgogICAgUmVhZCBkYXRhIGZyb20gaW5wdXQgZGF0YWZyYW1lcywgdW5wYWNrIGFuZCBjb21iaW5lIGRhdGEuCiAgICBPbmUgb3BfY3R4IGhhcyBvbmUgZGF0YWZyYW1lIHJlYWRlci4KICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdDogRGF0YUZyYW1lSXRlcmF0b3IsIG9wX2lucHV0c19pbmRleDogRGljdFtzdHIsIGludF0pOgogICAgICAgIHNlbGYuX29wX2lucHV0c19pbmRleCA9IG9wX2lucHV0c19pbmRleAogICAgICAgIHNlbGYuX2l0ZXIgPSBpdAoKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIHJlYWQoc2VsZikgLT4gVW5pb25bRGljdFtzdHIsIGFueV0sIExpc3RbRGljdFtzdHIsIGFueV1dXToKICAgICAgICBwYXNzCgogICAgQHByb3BlcnR5CiAgICBkZWYgc2l6ZShzZWxmKSAtPiBpbnQ6CiAgICAgICAgcmV0dXJuIHNlbGYuX2l0ZXIuYWNjZXNzaWJsZV9zaXplCgogICAgZGVmIF90b19vcF9pbnB1dHMoc2VsZiwgY29sczogVHVwbGVbVmFyaWFibGVdKSAtPiBEaWN0W3N0ciwgYW55XToKICAgICAgICAiIiIKICAgICAgICBSZWFkIGZyb20gY29scywgY29tYmluZSBvcCBpbnB1dHMKICAgICAgICAiIiIKICAgICAgICByZXQgPSB7fQogICAgICAgIGZvciBrZXksIGluZGV4IGluIHNlbGYuX29wX2lucHV0c19pbmRleC5pdGVtcygpOgogICAgICAgICAgICByZXRba2V5XSA9IGNvbHNbaW5kZXhdLnZhbHVlCiAgICAgICAgcmV0dXJuIHJldAoKCmNsYXNzIE1hcERhdGFGcmFtZVJlYWRlcihEYXRhRnJhbWVSZWFkZXIpOgogICAgIiIiCiAgICBNYXAgZGF0YWZyYW1lIHJlYWRlcgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKAogICAgICAgIHNlbGYsCiAgICAgICAgaW5wdXRfZGY6IERhdGFGcmFtZSwKICAgICAgICBvcF9pbnB1dHNfaW5kZXg6IERpY3Rbc3RyLCBpbnRdCiAgICApOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oaW5wdXRfZGYubWFwX2l0ZXIoKSwgb3BfaW5wdXRzX2luZGV4KQoKICAgIGRlZiByZWFkKHNlbGYpIC0+IE9wdGlvbmFsW0RpY3Rbc3RyLCBhbnldXToKICAgICAgICAiIiIKICAgICAgICBSZWFkIGRhdGEgZnJvbSBkYXRhZnJhbWUsIGdldCBjb2xzIGJ5IG9wZXJhdG9yX3JlcHIgaW5mbwogICAgICAgICIiIgogICAgICAgIHRyeToKICAgICAgICAgICAgZGF0YSA9IG5leHQoc2VsZi5faXRlcikKICAgICAgICAgICAgaWYgbGVuKGRhdGEpID09IDA6CiAgICAgICAgICAgICAgICByZXR1cm4ge30KICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3RvX29wX2lucHV0cyhkYXRhWzBdKQoKICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKICAgICAgICAgICAgcmV0dXJuIE5vbmUKCgpkZWYgY3JlYXRlX3JlYWRlcigKICAgIGlucHV0czogTGlzdFtEYXRhRnJhbWVdLAogICAgaXRlcl90eXBlOiBzdHIsCiAgICBpbnB1dHNfaW5kZXg6IERpY3Rbc3RyLCBpbnRdCikgLT4gRGF0YUZyYW1lUmVhZGVyOgoKICAgIGlmIGl0ZXJfdHlwZS5sb3dlcigpID09ICJtYXAiOgogICAgICAgIGFzc2VydCBsZW4oaW5wdXRzKSA9PSAxLCAiJXMgaXRlciB0YWtlcyBvbmUgZGF0YWZyYW1lLCBidXQgJXMgZGF0YWZyYW1lcyBhcmUgZm91bmQiICUgKAogICAgICAgICAgICBpdGVyX3R5cGUsIGxlbihpbnB1dHMpCiAgICAgICAgKQogICAgICAgIHJldHVybiBNYXBEYXRhRnJhbWVSZWFkZXIoaW5wdXRzWzBdLCBpbnB1dHNfaW5kZXgpCiAgICBlbHNlOgogICAgICAgIHJhaXNlIE5hbWVFcnJvcigiQ2FuIG5vdCBmaW5kICVzIGl0ZXJzIiAlIGl0ZXJfdHlwZSkKCgpkZWYgY3JlYXRlX3dyaXRlcihvdXRwdXRzOiBMaXN0W0RhdGFGcmFtZV0pIC0+IERhdGFGcmFtZVdyaXRlcjoKICAgIGFzc2VydCBsZW4ob3V0cHV0cykgPT0gMQogICAgcmV0dXJuIERhdGFGcmFtZVdyaXRlcihvdXRwdXRzWzBdKQo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiB3cml0ZShzZWxmLCBvdXRwdXRfZGF0YTogTmFtZWRUdXBsZSkgLT4gYm9vbDoKCiAgICAgICAgIyBUT0RPIChqaWFuZ2p1bmppZSkgZGVhbCB3aXRoIHRhc2sgZXhjZXB0aW9uCjx8ZmltX2VuZHw+"]
["bbc2f1632459f220d21ca5cc8a04f04137918bd5-1","bbc2f1632459f220d21ca5cc8a04f04137918bd5","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZApmcm9tIHNrbGVhcm4ubW9kZWxfc2VsZWN0aW9uIGltcG9ydCB0cmFpbl90ZXN0X3NwbGl0CmltcG9ydCBudW1weSBhcyBucAo8fGZpbV9ob2xlfD4KZGYgPSBwZC5yZWFkX2NzdignLi4vZGF0YXNldC9pcmlzXzcwLmRhdGEnLCBuYW1lcz1bJ3NlcGFsX2xlbmd0aCcsICdzZXBhbF93aWR0aCcsICdwZXRhbF9sZW5ndGgnLCAncGV0YWxfd2lkdGgnLCAnY2xhc3NfbmFtZSddKQoKdHJhaW4sIHRlc3QgPSB0cmFpbl90ZXN0X3NwbGl0KGRmLCB0ZXN0X3NpemUgPSAwLjMsIHN0cmF0aWZ5ID0gZGZbJ2NsYXNzX25hbWUnXSwgcmFuZG9tX3N0YXRlID0gNDIpClhfdHJhaW4gPSB0cmFpbltbJ3NlcGFsX2xlbmd0aCcsJ3NlcGFsX3dpZHRoJywncGV0YWxfbGVuZ3RoJywncGV0YWxfd2lkdGgnXV0KeV90cmFpbiA9IHRyYWluLmNsYXNzX25hbWUKWF90ZXN0ID0gdGVzdFtbJ3NlcGFsX2xlbmd0aCcsJ3NlcGFsX3dpZHRoJywncGV0YWxfbGVuZ3RoJywncGV0YWxfd2lkdGgnXV0KeV90ZXN0ID0gdGVzdC5jbGFzc19uYW1lCgptb2RlbCA9IERlY2lzaW9uVHJlZUNsYXNzaWZpZXIoKQoKbW9kZWwuZml0KFhfdHJhaW4sIHlfdHJhaW4pCgpwcmVkaWN0aW9uID0gbW9kZWwucHJlZGljdChYX3Rlc3QpCnByaW50KCdUaGUgYWNjdXJhY3kgb2YgdGhlIG1vZGVsIGlzIHs6LjNmfScuZm9ybWF0KG1ldHJpY3MuYWNjdXJhY3lfc2NvcmUocHJlZGljdGlvbiwgeV90ZXN0KSkpCgpwcmludCgnU2F2aW5nIG1vZGVsLi4uJykKZHVtcChtb2RlbCwgJy4vaXJpc19kZWNpc2lvbl90cmVlLmpvYmxpYicpCiAgICAKcHJpbnQoJ01vZGVsIHNhdmVkIScpCnByaW50KCdEb25lIScpCjx8ZmltX3N1ZmZpeHw+CmZyb20gc2tsZWFybi50cmVlIGltcG9ydCBEZWNpc2lvblRyZWVDbGFzc2lmaWVyCmZyb20gc2tsZWFybiBpbXBvcnQgbWV0cmljcwpmcm9tIGpvYmxpYiBpbXBvcnQgZHVtcCwgbG9hZAoKPHxmaW1fZW5kfD4="]
["dda79ad5ac5f85888388098fb3e38ec9017e208f-3","dda79ad5ac5f85888388098fb3e38ec9017e208f","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nPXV0Zi04Cgpmcm9tIHVuaXR0ZXN0IGltcG9ydCBza2lwVW5sZXNzCmltcG9ydCBvcwppbXBvcnQgc3VicHJvY2VzcwppbXBvcnQganNvbgppbXBvcnQgZmlsZWNtcAppbXBvcnQgZGF0ZXRpbWUKCmZyb20gZGphbmdvLnRlc3QgaW1wb3J0IExpdmVTZXJ2ZXJUZXN0Q2FzZQpmcm9tIGRqYW5nby5jb25mIGltcG9ydCBzZXR0aW5ncwpmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKCmZyb20gYXBpLm1vZGVscyBpbXBvcnQgQXV0aFRva2VuCmZyb20gcGFsdmVsdXRvcmkubW9kZWxzIGltcG9ydCBVc2VyCmZyb20gb3JnYW5pc2F0aW9uLm1vZGVscyBpbXBvcnQgQ29tcGFueSwgUGljdHVyZSBhcyBDb21wYW55UGljdHVyZQpmcm9tIGNhbGVuZGFycy5tb2RlbHMgaW1wb3J0IENhbGVuZGFyRW50cnkKZnJvbSBzZXJ2aWNlcy5tb2RlbHMgaW1wb3J0IFNlcnZpY2VQYWNrYWdlCmZyb20gb3JkZXJzLm1vZGVscyBpbXBvcnQgT3JkZXIKCmNsYXNzIEN1cmxFcnJvcihFeGNlcHRpb24pOgogICAgcGFzcwoKQHNraXBVbmxlc3Moc2V0dGluZ3MuVEVTVF9FWEFNUExFUywgIkN1cmwgZXhhbXBsZSB0ZXN0cyBkaXNhYmxlZCIpCmNsYXNzIEN1cmxFeGFtcGxlVGVzdChMaXZlU2VydmVyVGVzdENhc2UpOgogICAgIiIiTWFrZSBzdXJlIHRoZSBjdXJsIEFQSSBleGFtcGxlcyB3b3JrLiIiIgoKICAgIGRlZiB0ZXN0X2xvZ2luKHNlbGYpOgogICAgICAgIHJlcGx5ID0gc2VsZi5fX2N1cmwoJ3VzZXItbG9naW4uc2gnKQoKICAgICAgICBzZWxmLmFzc2VydEluKCd0b2tlbicsIHJlcGx5KQoKICAgIGRlZiB0ZXN0X2xvZ291dChzZWxmKToKICAgICAgICByZXBseSA9IHNlbGYuX19jdXJsKCd1c2VyLWxvZ291dC5zaCcpCiAgICAgICAgc2VsZi5hc3NlcnRJbignc3RhdHVzJywgcmVwbHkpCgogICAgZGVmIHRlc3RfcGFzc3dvcmRfY2hhbmdlKHNlbGYpOgogICAgICAgIHJlcGx5ID0gc2VsZi5fX2N1cmwoJ3VzZXItY2hhbmdlLXBhc3N3b3JkLnNoJywgVVNFUl9JRD1zdHIoc2VsZi5fX3VzZXIuaWQpKQogICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3N0YXR1cycsIHJlcGx5KQoKICAgIGRlZiB0ZXN0X3Bhc3N3b3JkX3Jlc2V0X3ZldHVtYShzZWxmKToKICAgICAgICByZXBseSA9IHNlbGYuX19jdXJsKCd1c2VyLXJlc2V0LXBhc3N3b3JkLXZldHVtYS5zaCcsIFVTRVJfSUQ9c3RyKHNlbGYuX191c2VyLmlkKSkKICAgICAgICBzZWxmLmFzc2VydEluKCdzdGF0dXMnLCByZXBseSkKCiAgICBkZWYgdGVzdF9jYWxlbmRhcmVudHJ5X2NyZWF0ZShzZWxmKToKICAgICAgICByZXBseSA9IHNlbGYuX19jdXJsKCdjYWxlbmRhcmVudHJ5LWNyZWF0ZS5zaCcsIENPTVBBTllfSUQ9c3RyKHNlbGYuX19jb21wYW55LmlkKSkKICAgICAgICBzZWxmLmFzc2VydEluKCdpZCcsIHJlcGx5KQoKICAgIGRlZiB0ZXN0X2NhbGVuZGFyZW50cnlfZGVsZXRlKHNlbGYpOgogICAgICAgIGNhbCA9IENhbGVuZGFyRW50cnkub2JqZWN0cy5jcmVhdGUoCiAgICAgICAgICAgIHN0YXJ0PXRpbWV6b25lLm5vdygpLAogICAgICAgICAgICBlbmQ9dGltZXpvbmUubm93KCksCiAgICAgICAgICAgIGNvbXBhbnk9c2VsZi5fX2NvbXBhbnkKICAgICAgICApCgogICAgICAgIHJlcGx5ID0gc2VsZi5fX2N1cmwoJ2NhbGVuZGFyZW50cnktZGVsZXRlLnNoJywgZXhwZWN0X2pzb249RmFsc2UsIElEPXN0cihjYWwuaWQpKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihyZXBseSksIDApCgogICAgZGVmIHRlc3RfY29tcGFueV9waWN0dXJlX3VwbG9hZChzZWxmKToKICAgICAgICByZXBseSA9IHNlbGYuX19jdXJsKCdjb21wYW55LXBpY3R1cmUtdXBsb2FkLnNoJywgQ09NUEFOWV9JRD1zdHIoc2VsZi5fX2NvbXBhbnkuaWQpKQoKICAgICAgICBzZWxmLmFzc2VydEluKCdpbWFnZScsIHJlcGx5KQoKICAgICAgICAjIENvbXBhbnkgc2hvdWxkIG5vdyBoYXZlIHRoZSB0ZXN0MSBzYW1wbGUgaW1hZ2UKICAgICAgICBwaWMgPSBDb21wYW55UGljdHVyZS5vYmplY3RzLmZpbHRlcihjb21wYW55PXNlbGYuX19jb21wYW55KVswXQoKICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAocGljLmltYWdlLmltYWdlLnBhdGgsIG9zLnBhdGguam9pbihzZWxmLl9fdGVzdGltYWdlcm9vdCwgJ3Rlc3QxLnBuZycpLCBzaGFsbG93PUZhbHNlKSkKCiAgICBkZWYgdGVzdF9vcmRlcl9jcmVhdGUoc2VsZik6CiAgICAgICAgcmVwbHkgPSBzZWxmLl9fY3VybCgnb3JkZXItY3JlYXRlLnNoJywKICAgICAgICAgICAgVVNFUl9JRD1zdHIoc2VsZi5fX3VzZXIuaWQpLAogICAgICAgICAgICBDT01QQU5ZX0lEPXN0cihzZWxmLl9fY29tcGFueS5pZCksCiAgICAgICAgICAgIFNFUlZJQ0VfUEFDS0FHRV9JRD1zdHIoc2VsZi5fX3NlcnZpY2VfcGFja2FnZS5pZCkKICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRJbignaWQnLCByZXBseSkKCiAgICBkZWYgdGVzdF9vcmRlcl9saXN0X3VzZXIoc2VsZik6CiAgICAgICAgcmVwbHkgPSBzZWxmLl9fY3VybCgnb3JkZXItbGlzdC11c2VyLnNoJywKICAgICAgICAgICAgVVNFUl9JRD1zdHIoc2VsZi5fX3VzZXIuaWQpCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3Jlc3VsdHMnLCByZXBseSkKCiAgICBkZWYgdGVzdF9vcmRlcl9saXN0X2NvbXBhbnkoc2VsZik6CiAgICAgICAgcmVwbHkgPSBzZWxmLl9fY3VybCgnb3JkZXItbGlzdC1jb21wYW55LnNoJywKICAgICAgICAgICAgQ09NUEFOWV9JRD1zdHIoc2VsZi5fX2NvbXBhbnkuaWQpCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3Jlc3VsdHMnLCByZXBseSkKCiAgICBkZWYgdGVzdF9vcmRlcl9yYXRlKHNlbGYpOgogICAgICAgIHJlcGx5ID0gc2VsZi5fX2N1cmwoJ29yZGVyLXJhdGUuc2gnLAogICAgICAgICAgICBVU0VSX0lEPXN0cihzZWxmLl9fdXNlci5pZCksCiAgICAgICAgICAgIE9SREVSX0lEPXN0cihzZWxmLl9fb3JkZXIuaWQpCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2lkJywgcmVwbHkpCgogICAgZGVmIHRlc3RfZmVlZGJhY2tfc2VuZChzZWxmKToKICAgICAgICByZXBseSA9IHNlbGYuX19jdXJsKCdmZWVkYmFjay1zZW5kLnNoJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXBseVsnc3RhdHVzJ10sICdvaycpCgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICMgQ3JlYXRlIHRlc3Qgb2JqZWN0cwogICAgICAgIHNlbGYuX19jb21wYW55ID0gQ29tcGFueS5vYmplY3RzLmNyZWF0ZSgKICAgICAgICAgICAgbmFtZT0iSW1hZ2UgVGVzdCIsCiAgICAgICAgICAgIGJ1c2luZXNzaWQ9IjEyMzQ1Ni03IiwKICAgICAgICAgICAgc2VydmljZV9hcmVhcz1bIjIwMTAwIiwgIjIwMjAwIl0sCiAgICAgICAgICAgIHByaWNlX3Blcl9ob3VyPTEwLAogICAgICAgICAgICBwcmljZV9wZXJfaG91cl9jb250aW51aW5nPTksCiAgICAgICAgICAgICkKCiAgICAgICAgc2VsZi5fX3VzZXIgPSBVc2VyLm9iamVjdHMuY3JlYXRlX3VzZXIoCiAgICAgICAgICAgIGVtYWlsPSd0ZXN0QGV4YW1wbGUuY29tJywKICAgICAgICAgICAgcGFzc3dvcmQ9J2FiY2QxMjM0JywKICAgICAgICAgICAgZmlyc3RfbmFtZT0nVGVzdCcsCiAgICAgICAgICAgIGxhc3RfbmFtZT0nVXNlcicsCiAgICAgICAgICAgIGlzX3ZlcmlmaWVkPVRydWUsCiAgICAgICAgICAgIHZldHVtYT0ndmV0MzIxJywKICAgICAgICAgICAgY29tcGFueT1zZWxmLl9fY29tcGFueQogICAgICAgICAgICApCgogICAgICAgIHNlbGYuX19zZXJ2aWNlX3BhY2thZ2UgPSBTZXJ2aWNlUGFja2FnZS5vYmplY3RzLmNyZWF0ZSgKICAgICAgICAgICAgc2hvcnRuYW1lPSdwYWx2ZWx1LXBha2V0dGknLAogICAgICAgICAgICBwcmljaW5nX2Zvcm11bGE9Jz8/PycsCiAgICAgICAgICAgIHdlYnNpdGU9J2V4YW1wbGUuY29tJwogICAgICAgICkKCiAgICAgICAgc2VsZi5fX29yZGVyID0gT3JkZXIub2JqZWN0cy5jcmVhdGUoKip7CiAgICAgICAgICAgICJ1c2VyX2lkIjogc2VsZi5fX3VzZXIucGssCiAgICAgICAgICAgICJ1c2VyX2ZpcnN0X25hbWUiOiBzZWxmLl9fdXNlci5maXJzdF9uYW1lLAogICAgICAgICAgICAidXNlcl9sYXN0X25hbWUiOiBzZWxmLl9fdXNlci5sYXN0X25hbWUsCiAgICAgICAgICAgICJ1c2VyX2VtYWlsIjogc2VsZi5fX3VzZXIuZW1haWwsCiAgICAgICAgICAgICJ1c2VyX3Bob25lIjogIisxMjM0NTY3OCIsCgogICAgICAgICAgICAic2l0ZV9hZGRyZXNzX3N0cmVldCI6ICLDhMOka2vDtnNrYXR1IDMiLAogICAgICAgICAgICAic2l0ZV9hZGRyZXNzX3N0cmVldDIiOiAiIiwKICAgICAgICAgICAgInNpdGVfYWRkcmVzc19wb3N0YWxjb2RlIjogIjEyMzQ1IiwKICAgICAgICAgICAgInNpdGVfYWRkcmVzc19jaXR5IjogIkhlbHNpbmtpIiwKICAgICAgICAgICAgInNpdGVfcm9vbV9jb3VudCI6IDQsCiAgICAgICAgICAgICJzaXRlX3Nhbml0YXJ5X2NvdW50IjogMSwKICAgICAgICAgICAgInNpdGVfZmxvb3JfY291bnQiOiAxLAogICAgICAgICAgICAic2l0ZV9mbG9vcl9hcmVhIjogODAuNCwKCiAgICAgICAgICAgICJkdXJhdGlvbiI6IDQsCiAgICAgICAgICAgICJwcmljZSI6IDQwMCwKICAgICAgICAgICAgInRpbWVzbG90X3N0YXJ0IjogdGltZXpvbmUubm93KCkgLSBkYXRldGltZS50aW1lZGVsdGEoaG91cnM9MiksCiAgICAgICAgICAgICJ0aW1lc2xvdF9lbmQiOiB0aW1lem9uZS5ub3coKSAtIGRhdGV0aW1lLnRpbWVkZWx0YShob3Vycz0xKSwKICAgICAgICAgICAgImV4dHJhX2luZm8iOiAiIiwKCiAgICAgICAgICAgICJjb21wYW55X2lkIjogc2VsZi5fX2NvbXBhbnkucGssCiAgICAgICAgICAgICJzZXJ2aWNlX3BhY2thZ2VfaWQiOiBzZWxmLl9fc2VydmljZV9wYWNrYWdlLnBrLAogICAgICAgICAgICAic2VydmljZV9wYWNrYWdlX3Nob3J0bmFtZSI6IHNlbGYuX19zZXJ2aWNlX3BhY2thZ2Uuc2hvcnRuYW1lCjx8ZmltX2hvbGV8PgogICAgICAgICMgTG9jYXRpb24gb2Ygb3VyIGV4YW1wbGUgc2NyaXB0cwogICAgICAgIHNlbGYuX19zY3JpcHRyb290ID0gb3MucGF0aC5qb2luKAogICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSwKICAgICAgICAgICAgJ2V4YW1wbGVzJywKICAgICAgICAgICAgJ2N1cmwnCiAgICAgICAgICAgICkKICAgICAgICBzZWxmLl9fdGVzdGltYWdlcm9vdCA9IG9zLnBhdGguam9pbigKICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSksCiAgICAgICAgICAgICdtZWRpYScsCiAgICAgICAgICAgICd0ZXN0X2ltYWdlcycKICAgICAgICAgICAgKQoKICAgIGRlZiBfX2N1cmwoc2VsZiwgc2NyaXB0bmFtZSwgZXhwZWN0X2pzb249VHJ1ZSwgKipleHRyYV9lbnYpOgogICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fX3NjcmlwdHJvb3QsIHNjcmlwdG5hbWUpCiAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKICAgICAgICBlbnZbJ0FQSVJPT1QnXSA9IHNlbGYubGl2ZV9zZXJ2ZXJfdXJsCiAgICAgICAgZW52WydUT0tFTiddID0gc2VsZi5fX3Rva2VuLmtleQogICAgICAgIGVudi51cGRhdGUoZXh0cmFfZW52KQoKICAgICAgICB3aXRoIG9wZW4oJy9kZXYvbnVsbCcsICd3JykgYXMgZGV2bnVsbDoKICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oW3BhdGhdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9c2VsZi5fX3NjcmlwdHJvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1lbnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1kZXZudWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgIG91dCA9IHByb2MuY29tbXVuaWNhdGUoKVswXQoKICAgICAgICBpZiBwcm9jLnJldHVybmNvZGUgIT0gMDoKICAgICAgICAgICAgcmFpc2UgQ3VybEVycm9yKHNjcmlwdG5hbWUgKyAiIGZhaWxlZCIpCgogICAgICAgIGlmIGV4cGVjdF9qc29uOgogICAgICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhvdXQuZGVjb2RlKCd1dGYtOCcpKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBvdXQKPHxmaW1fc3VmZml4fD4KICAgICAgICB9KQoKICAgICAgICBzZWxmLl9fdG9rZW4gPSBBdXRoVG9rZW4ub2JqZWN0cy5jcmVhdGUoa2V5PSJ0ZXN0IiwgdXNlcj1zZWxmLl9fdXNlcikKCjx8ZmltX2VuZHw+"]
["f96680d021d4033d62c6cebda1dbacedcd9307fa-3","f96680d021d4033d62c6cebda1dbacedcd9307fa","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCiMgUXVvdGVfREIgUG9DCiMgQXV0aG9yOiBBcGV4UHJlZGF0b3IKIyBMaW5rIHRvIFZ1bG5lcmFibGUgQXBwOiBodHRwczovL2dpdGh1Yi5jb20vYm1keXkvc2lnbmF0dXMKIyBMaWNlbnNlOiBNSVQKIyBUaGlzIHNjcmlwdCBpcyBvbmUgcG9zc2libGUgc29sdXRpb24gdG8gYm1keXkncyBTaWduYXR1cyBjaGFsbGVuZ2UuCmltcG9ydCBzb2NrZXQKaW1wb3J0IHN5cwppbXBvcnQgdGltZQpmcm9tIGJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CmZyb20gc3RydWN0IGltcG9ydCBwYWNrCgoKZGVmIE9URCgpOgoKICAgIHRpbWVzID0gdGltZS50aW1lKCkKICAgICNwcmludCgiWytdIFRpbWUgaXMgbm93ICVkIiAldGltZXMpCiAgICB0aW1lZCA9IGhleChpbnQodGltZXMvMHhhKSkKICAgICNwcmludCgiWytdIFRpbWUgYWRqdXN0ZWQgZm9yIGRpdmlzaW9uIGJ5IDEwICVzIiAldGltZWQpCiAgICB0aW1lYSA9IGludChzdHIodGltZWQpWy0yOl0sMTYpCiAgICAjcHJpbnQoIlsrXSBMYXN0IHR3byBkaWdpdHMgb2YgdGltZSAleCIgJXRpbWVhKQogICAgdGltZWIgPSB0aW1lYSAqIHRpbWVhCiAgICAjcHJpbnQoIlsrXSBGaXJzdCBtdWx0aXBsaWNhdGlvbiAleCIgJXRpbWViKQogICAgdGltZWMgPSB0aW1lYSAqIHRpbWViCiAgICAjcHJpbnQoIlsrXSBTZWNvbmQgbXVsdGlwbGljYXRpb24gJXgiICV0aW1lYykKICAgIHRpbWVkID0gdGltZWEgKiB0aW1lYwogICAgI3ByaW50KCJbK10gVGhpcmQgbXVsdGlwbGljYXRpb24gJXgiICV0aW1lZCkKICAgIHRpbWVlID0gdGltZWMgJiAweDBGRkZGRkYwMAogICAgI3ByaW50KCJbK10gRmlyc3QgYW5kIG9wZXJhdGlvbiAleCIgJXRpbWVlKQogICAgdGltZWYgPSB0aW1lZTw8NAogICAgI3ByaW50KCJbK10gRmlyc3QgbGVmdCBzaGlmdCBvcGVyYXRpb24gJXgiICV0aW1lZikKICAgIHRpbWVnID0gdGltZWZ8dGltZWIKICAgICNwcmludCgiWytdIEZpcnN0IG9yIG9wZXJhdGlvbiAleCIgJXRpbWVnKQogICAgdGltZWggPSB0aW1lZyAmIDB4MEZGRkZGRkYwCiAgICAjcHJpbnQoIlsrXSBTZWNvbmQgYW5kIG9wZXJhdGlvbiAleCIgJXRpbWVoKQogICAgdGltZWogPSB0aW1lZCAmIDB4MEZGRkZGMDAwCiAgICAjcHJpbnQoIlsrXSBUaGlyZCBhbmQgb3BlcmF0aW9uICV4IiAldGltZWopCiAgICB0aW1layA9IHRpbWVqPDw4CiAgICAjcHJpbnQoIlsrXSBTZWNvbmQgc2hpZnQgb3BlcmF0aW9uICV4IiAldGltZWspCiAgICB0aW1lbCA9IHRpbWVrfHRpbWVoCiAgICAjcHJpbnQoIlsrXSBTZWNvbmQgb3Igb3BlcmF0aW9ucyAleCIgJXRpbWVsKQogICAgdGltZW0gPSB0aW1lbDw8NAogICAgI3ByaW50KCJbK10gVGhpcmQgc2hpZnQgb3BlcmF0aW9uICV4IiAldGltZW0pCiAgICB0aW1lbiA9IHRpbWVtfHRpbWVhCiAgICAjcHJpbnQoIlsrXSBUaGlyZCBvciBvcGVyYXRpb24gJXgiICV0aW1lbikKICAgIHRpbWVvID0gdGltZW5eMHg3NDgyOTcyNgogICAgI3ByaW50KCJbK10gWE9SIG9wZXJhdGlvbiB0byBkZXRlcm1pbmUgT1REICV4IiAldGltZW8pCiAgICB0aW1lcCA9IGhleCh0aW1lbylbLTg6XQogICAgcHJpbnQoIlsrXSBPVEQgZm9yIHBhY2tldCAlcyIgJXRpbWVwKQoKICAgIHJldHVybiB0aW1lcAoKZGVmIGNsZWFyX2xvZyhzZXJ2ZXIsIHBvcnQpOgoKICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICBzLmNvbm5lY3QoKHNlcnZlciwgcG9ydCkpCgogICAgcHJpbnQoIlsrXSBDbGVhcmluZyBsb2cgdG8gcHJlcCBleHBsb2l0Li4uLiIpCiAgICBvdGQgPSBPVEQoKQogICAgYnVmID0gcGFjaygiPEwiLCAoaW50KG90ZCwxNikpKQogICAgYnVmICs9IHBhY2soIjxMIiwgKDB4MDAwMDAwMDMpKQogICAgdHJ5OgogICAgICAgIHMuc2VuZChidWYpCiAgICAgICAgcHJpbnQoIlsrXSBMb2cgQ2xlYXJlZCIpCiAgICBleGNlcHQ6CiAgICAgICAgcHJpbnQoIlstXSBFcnJvciBzZW5kaW5nIHBhY2tldCwgbW9zdGx5IGxpa2VseSBPVEQgb2ZmLiBSZXJ1biBleHBsb2l0IikKICAgICAgICBzeXMuZXhpdCgtMSkKCiAgICByZXR1cm4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZGVmIHdyaXRlX2xvZyhzZXJ2ZXIsIHBvcnQpOgoKICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCjx8ZmltX2VuZHw+"]
["c25ef6ea5eaba40bb94bba8e35d66603cf70d89e-3","c25ef6ea5eaba40bb94bba8e35d66603cf70d89e","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBwcm94eSBtb2R1bGUKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBjaGFjby5jYW5kbGVfcGxvdCBpbXBvcnQgKgo8fGZpbV9lbmR8Pg=="]
["59c8237856f52ff0a6a0dfcc2db160a5e99079b6-1","59c8237856f52ff0a6a0dfcc2db160a5e99079b6","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBzdG9yY2gudXRpbHMgaW1wb3J0ICoKPHxmaW1fZW5kfD4="]
["abc5a23c6debe3845fd972d4865944eddbaa8947-1","abc5a23c6debe3845fd972d4865944eddbaa8947","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLm1vZGVscyBpbXBvcnQgVXNlcgpmcm9tIGRqYW5nby51cmxzIGltcG9ydCByZXZlcnNlCmZyb20gcmVzdF9mcmFtZXdvcmsgaW1wb3J0IHN0YXR1cwpmcm9tIHJlc3RfZnJhbWV3b3JrLnRlc3QgaW1wb3J0IEFQSVRlc3RDYXNlCmZyb20gdHdlZXRzLm1vZGVscyBpbXBvcnQgQ29tbWVudCwgTGlrZSwgVHdlZXQsIFJldHdlZXQKCmNsYXNzIFR3ZWV0VGVzdHMoQVBJVGVzdENhc2UpOgogICAgZGVmIHRlc3RfY3JlYXRlX3R3ZWV0KHNlbGYpOgogICAgICAgICIiIgogICAgICAgIEVuc3VyZSB3ZSBjYW4gY3JlYXRlIGEgbmV3IHR3ZWV0IG9iamVjdC4KICAgICAgICAiIiIKICAgICAgICB1c2VyID0gVXNlci5vYmplY3RzLmNyZWF0ZV91c2VyKHVzZXJuYW1lPSJkYXZpbmNoeSIsIHBhc3N3b3JkPSJqb2huc29uLnB5IikKCiAgICAgICAgdXJsID0gcmV2ZXJzZSgndHdlZXQtbGlzdCcpCiAgICAgICAgZGF0YSA9IHsndGV4dCc6ICdEYWJBcHBzJywgInVzZXIiOiB1c2VyLmlkfQogICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQucG9zdCh1cmwsIGRhdGEsIGZvcm1hdD0nanNvbicpCiAgICAgICAgcmVzcG9uc2VfZGF0YSA9IHJlc3BvbnNlLmpzb24oKQogICAgICAgIHByaW50KCJDT01QTEVURSIpCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIHN0YXR1cy5IVFRQXzIwMV9DUkVBVEVEKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHdlZXQub2JqZWN0cy5jb3VudCgpLCAxKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHdlZXQub2JqZWN0cy5nZXQoKS50ZXh0LCBkYXRhWyd0ZXh0J10pCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZV9kYXRhWyd0ZXh0J10sIGRhdGFbJ3RleHQnXSkKCiAgICBkZWYgdGVzdF9wdXRfdHdlZXQoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgRW5zdXJlIHdlIGNhbiBjcmVhdGUgYSBuZXcgdHdlZXQgb2JqZWN0LgogICAgICAgICIiIgogICAgICAgIHVzZXIgPSBVc2VyLm9iamVjdHMuY3JlYXRlX3VzZXIodXNlcm5hbWU9ImRhdmluY2h5IiwgcGFzc3dvcmQ9ImpvaG5zb24ucHkiKQogICAgICAgIHR3ZWV0ID0gVHdlZXQub2JqZWN0cy5jcmVhdGUodGV4dD0iYXphZCB0ZXN0aW5nIGdhbWUgIiwgdXNlcj11c2VyKQoKICAgICAgICB1cmwgPSByZXZlcnNlKCd0d2VldC1kZXRhaWwnLGt3YXJncz17InBrIjp0d2VldC5pZH0pCiAgICAgICAgZGF0YSA9IHsndGV4dCc6ICdGb3IgdGhpcyBMYWdvcz8nLCAidXNlciI6IHVzZXIuaWQsICJ0d2VldCI6IHR3ZWV0LmlkfQogICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQucHV0KHVybCwgZGF0YSwgZm9ybWF0PSdqc29uJykKICAgICAgICByZXNwb25zZV9kYXRhID0gcmVzcG9uc2UuanNvbigpCiAgICAgICAgcHJpbnQocmVzcG9uc2VfZGF0YSkKCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgc3RhdHVzLkhUVFBfMjAwX09LKQogICAgICAgICMgc2VsZi5hc3NlcnRFcXVhbChUd2VldC5vYmplY3RzLmNvdW50KCksIDEpCiAgICAgICAgIyBzZWxmLmFzc2VydEVxdWFsKFR3ZWV0Lm9iamVjdHMuZ2V0KCkudGV4dCwgZGF0YVsndGV4dCddKQogICAgICAgICMgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZV9kYXRhWyd0ZXh0J10sIGRhdGFbJ3RleHQnXSkKCgogICAgZGVmIHRlc3RfcGF0Y2hfdHdlZXQoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgRW5zdXJlIHdlIGNhbiBjcmVhdGUgYSBuZXcgdHdlZXQgb2JqZWN0LgogICAgICAgICIiIgogICAgICAgIHVzZXIgPSBVc2VyLm9iamVjdHMuY3JlYXRlX3VzZXIodXNlcm5hbWU9ImRhdmluY2h5IiwgcGFzc3dvcmQ9ImpvaG5zb24ucHkiKQogICAgICAgIHR3ZWV0ID0gVHdlZXQub2JqZWN0cy5jcmVhdGUodGV4dD0iaXQncyBhIHRlc3RpbmcgZ2FtZSAiLCB1c2VyPXVzZXIpCgogICAgICAgIHVybCA9IHJldmVyc2UoJ3R3ZWV0LWRldGFpbCcsa3dhcmdzPXsicGsiOnR3ZWV0LmlkfSkKICAgICAgICBkYXRhID0geyd0ZXh0JzogJ0ZvciB0aGlzIExhZ29zPycsICJ1c2VyIjogdXNlci5pZCwgInR3ZWV0IjogdHdlZXQuaWR9CiAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5wYXRjaCh1cmwsIGRhdGEsIGZvcm1hdD0nanNvbicpCiAgICAgICAgcmVzcG9uc2VfZGF0YSA9IHJlc3BvbnNlLmpzb24oKQogICAgICAgIHByaW50KHJlc3BvbnNlX2RhdGEpCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIHN0YXR1cy5IVFRQXzIwMF9PSykKCiAgICBkZWYgdGVzdF9nZXRfMXR3ZWV0KHNlbGYpOgogICAgICAgICIiIgogICAgICAgIEVuc3VyZSB3ZSBjYW4gY3JlYXRlIGEgbmV3IHR3ZWV0IG9iamVjdC4KICAgICAgICAiIiIKICAgICAgICB1c2VyID0gVXNlci5vYmplY3RzLmNyZWF0ZV91c2VyKHVzZXJuYW1lPSJkYXZpbmNoeSIsIHBhc3N3b3JkPSJqb2huc29uLnB5IikKICAgICAgICB0d2VldCA9IFR3ZWV0Lm9iamVjdHMuY3JlYXRlKHRleHQ9IkZpbGUhIGlzc2EgdGVzdGluZyBnYW1lICIsIHVzZXI9dXNlcikKCiAgICAgICAgdXJsID0gcmV2ZXJzZSgndHdlZXQtZGV0YWlsJyxrd2FyZ3M9eyJwayI6dHdlZXQuaWR9KQogICAgICAgICMgZGF0YSA9IHsndGV4dCc6ICdEYWJBcHBzJywgInVzZXIiOiB1c2VyLmlkfQogICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0KHVybCwgZm9ybWF0PSdqc29uJykKICAgICAgICByZXNwb25zZV9kYXRhID0gcmVzcG9uc2UuanNvbigpCiAgICAgICAgcHJpbnQocmVzcG9uc2VfZGF0YSkKCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgc3RhdHVzLkhUVFBfMjAwX09LKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHdlZXQub2JqZWN0cy5jb3VudCgpLCAxKQogICAgICAgICMgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZV9kYXRhWzBdWyJ0ZXh0Il0sIHR3ZWV0LnRleHQpCgoKICAgIGRlZiB0ZXN0X2dldF90d2VldChzZWxmKToKICAgICAgICAiIiIKICAgICAgICBFbnN1cmUgd2UgY2FuIGNyZWF0ZSBhIG5ldyB0d2VldCBvYmplY3QuCiAgICAgICAgIiIiCiAgICAgICAgdXNlciA9IFVzZXIub2JqZWN0cy5jcmVhdGVfdXNlcih1c2VybmFtZT0iZGF2aW5jaHkiLCBwYXNzd29yZD0iam9obnNvbi5weSIpCiAgICAgICAgdHdlZXQgPSBUd2VldC5vYmplY3RzLmNyZWF0ZSh0ZXh0PSJhemFkIHRlc3RpbmcgZ2FtZSAiLCB1c2VyPXVzZXIpCgogICAgICAgIHVybCA9IHJldmVyc2UoJ3R3ZWV0LWRldGFpbCcsa3dhcmdzPXsicGsiOnR3ZWV0LmlkfSkKICAgICAgICAjIGRhdGEgPSB7J3RleHQnOiAnRGFiQXBwcycsICJ1c2VyIjogdXNlci5pZH0KICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldCh1cmwsIGZvcm1hdD0nanNvbicpCiAgICAgICAgcmVzcG9uc2VfZGF0YSA9IHJlc3BvbnNlLmpzb24oKQogICAgICAgIHByaW50KHJlc3BvbnNlX2RhdGEpCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIHN0YXR1cy5IVFRQXzIwMF9PSykKCiAgICAKICAgIGRlZiB0ZXN0X2RlbGV0ZV90d2VldChzZWxmKToKICAgICAgICAiIiIKICAgICAgICBFbnN1cmUgd2UgY2FuIGNyZWF0ZSBhIG5ldyB0d2VldCBvYmplY3QuCiAgICAgICAgIiIiCiAgICAgICAgdXNlciA9IFVzZXIub2JqZWN0cy5jcmVhdGVfdXNlcih1c2VybmFtZT0iZGF2aW5jaHkiLCBwYXNzd29yZD0iam9obnNvbi5weSIpCiAgICAgICAgdHdlZXQgPSBUd2VldC5vYmplY3RzLmNyZWF0ZSh0ZXh0PSJ0ZXN0aW5nIGdhbWUiLCB1c2VyPXVzZXIpCgogICAgICAgIHVybCA9IHJldmVyc2UoJ3R3ZWV0LWRldGFpbCcsIGt3YXJncz17J3BrJzogdHdlZXQuaWR9KQogICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZGVsZXRlKHVybCwgZm9ybWF0PSdqc29uJykKICAgICAgICAjIHJlc3BvbnNlX2RhdGEgPSByZXNwb25zZS5qc29uKCkKICAgICAgICAjIHByaW50KHJlc3BvbnNlX2RhdGEpCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIHN0YXR1cy5IVFRQXzIwNF9OT19DT05URU5UKQoKY2xhc3MgUmV0d2VldFRlc3RzKEFQSVRlc3RDYXNlKToKICAgIGRlZiB0ZXN0X2NyZWF0ZV9yZXR3ZWV0KHNlbGYpOgogICAgICAgICIiIgogICAgICAgIEVuc3VyZSB3ZSBjYW4gY3JlYXRlIGEgbmV3IHJldHdlZXQgb2JqZWN0LgogICAgICAgICIiIgogICAgICAgIHVzZXIgPSBVc2VyLm9iamVjdHMuY3JlYXRlX3VzZXIodXNlcm5hbWU9ImRhdmluY2h5IiwgcGFzc3dvcmQ9ImpvaG5zb24ucHkiKQogICAgICAgIHR3ZWV0ID0gVHdlZXQub2JqZWN0cy5jcmVhdGUodGV4dD0idGhpcyBpcyBhIHNpbXBsZSB0d2VldCIsIHVzZXI9dXNlcikKCiAgICAgICAgdXJsID0gcmV2ZXJzZSgncmV0d2VldC1saXN0JykKICAgICAgICBkYXRhID0geyd0d2VldCc6IHR3ZWV0LmlkLCAidXNlciI6IHVzZXIuaWR9CiAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5wb3N0KHVybCwgZGF0YSwgZm9ybWF0PSdqc29uJykKICAgICAgICByZXNwb25zZV9kYXRhID0gcmVzcG9uc2UuanNvbigpCiAgICAgICAgcHJpbnQocmVzcG9uc2VfZGF0YSkKCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgc3RhdHVzLkhUVFBfMjAxX0NSRUFURUQpCgoKICAgIGRlZiB0ZXN0X2dldF9yZXR3ZWV0KHNlbGYpOgogICAgICAgICIiIgogICAgICAgIEVuc3VyZSB3ZSBjYW4gR0VUIGEgbmV3IHJldHdlZXQgb2JqZWN0LgogICAgICAgICIiIgogICAgICAgIHVzZXIgPSBVc2VyLm9iamVjdHMuY3JlYXRlX3VzZXIodXNlcm5hbWU9ImRhdmluY2h5IiwgcGFzc3dvcmQ9ImpvaG5zb24ucHkiKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgdHdlZXQgPSBUd2VldC5vYmplY3RzLmNyZWF0ZSh0ZXh0PSJ0aGlzIGlzIGEgc2ltcGxlIHR3ZWV0IiwgdXNlcj11c2VyKQoKICAgICAgICB1cmwgPSByZXZlcnNlKCdyZXR3ZWV0LWxpc3QnKQogICAgICAgIGRhdGEgPSB7J3R3ZWV0JzogdHdlZXQuaWQsICJ1c2VyIjogdXNlci5pZH0KPHxmaW1fZW5kfD4="]
["95779dbb255cff3241f6a1b317713281eb51d8a3-2","95779dbb255cff3241f6a1b317713281eb51d8a3","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCkNyZWF0ZWQgb24gRnJpIEFwciAxNSAxMjowOToxMyAyMDIyCgpAYXV0aG9yOiB0aGllcnJ5LnNjaHdhbGxlcgoiIiIKCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBwYW5kYXMgYXMgcGQKCjx8ZmltX2hvbGV8PgogICAgcHJpbnQoZiIoe2ZbaV19ICx7cH0pIikKCgoKZmlnLCBheCA9IHBsdC5zdWJwbG90cygpCmxpbl95ID0gMTAqKihjWyJNYWdfZEIiXS8yMCkKbGluX3kgPSBsaW5feSAvIG1heChsaW5feSkKYXgucGxvdChmLGxpbl95KQpmID0gbnAuYXJhbmdlKDQwLjIsNTUsMC4xKQp0ID0gMS8oZi00MCkqKig0LzUpCnQgPSB0L21heCh0KQpheC5wbG90KGYsIHQpCjx8ZmltX3N1ZmZpeHw+CgpjID0gcGQucmVhZF9jc3YoIk1lc3N1bmdlbl8yMmtIel81NWtIel8xMDBIei5jc3YiKQpmID0gbnAuYXJhbmdlKDIyLDU1LjEsMC4xKQpmb3IgaSxwIGluIGVudW1lcmF0ZShjWyJNYWdfZEIiXSk6Cjx8ZmltX2VuZHw+"]
["9b64ec5d7b3c77666acabab0e8ad4e028aaec422-2","9b64ec5d7b3c77666acabab0e8ad4e028aaec422","PHxmaW1fcHJlZml4fD4KZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKCmZyb20gZ3dfcHJveHkuZ3cuR1dfUmVidWlsZF9BenVyZSBpbXBvcnQgR1dfUmVidWlsZF9BenVyZQpmcm9tIG9zYm90X3V0aWxzLnV0aWxzLkZpbGVzIGltcG9ydCBGaWxlcwoKCmNsYXNzIHRlc3RfR1dfUmVidWlsZF9BenVyZShUZXN0Q2FzZSk6CgogICAgZGVmIHRlc3RfZmlsZV90eXBlX2RldGVjdGlvbihzZWxmKToKICAgICAgICBnd19henVyZSA9IEdXX1JlYnVpbGRfQXp1cmUoKQogICAgICAgIHRlc3RfRmlsZSA9ICcvVXNlcnMvZGluaXNjcnV6Ly9Eb3dubG9hZHMvYnVnLnBuZycKICAgICAgICBwcmludChnd19henVyZS5maWxlX3R5cGVfZGV0ZWN0aW9uKHRlc3RfRmlsZSkuZ2V0KCdmaWxlVHlwZScpKQoKICAgIGRlZiB0ZXN0X2ZpbGVfYW5hbHlzaXMoc2VsZik6CiAgICAgICAgZ3dfYXp1cmUgPSBHV19SZWJ1aWxkX0F6dXJlKCkKPHxmaW1faG9sZXw+CiAgICBkZWYgdGVzdF9maWxlX3Byb3RlY3Qoc2VsZik6CiAgICAgICAgZ3dfYXp1cmUgPSBHV19SZWJ1aWxkX0F6dXJlKCkKICAgICAgICB0YXJnZXQgPSAnL1VzZXJzL2RpbmlzY3J1ei8vRG93bmxvYWRzL2J1Zy5wbmcnCiAgICAgICAgdGFyZ2V0ID0gJy9Vc2Vycy9kaW5pc2NydXovRG93bmxvYWRzL3Rlc3Qvc2hha2UuanBlZycKICAgICAgICAjdGFyZ2V0ID0gJy9Vc2Vycy9kaW5pc2NydXovRG93bmxvYWRzL2FhLXNvbWUtdGV4dC50eHQnICMgZG9lc24ndCB3b3JrCiAgICAgICAgYnl0ZXMgPSBnd19henVyZS5maWxlX3Byb3RlY3QodGFyZ2V0KQogICAgICAgIHJlYnVpbHQgPSBGaWxlcy5zYXZlX2J5dGVzX2FzX2ZpbGUoYnl0ZXMsIGV4dGVuc2lvbj0gJy50eHQnKQogICAgICAgIHByaW50KCctLS0tLS0tJykKICAgICAgICBwcmludChyZWJ1aWx0KQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHRlc3RfRmlsZSA9ICcvVXNlcnMvZGluaXNjcnV6Ly9Eb3dubG9hZHMvYnVnLnBuZycKICAgICAgICBwcmludChnd19henVyZS5maWxlX2FuYWx5c2lzKHRlc3RfRmlsZSkpCgo8fGZpbV9lbmR8Pg=="]
["fb36abed2f8c7c0d23216a8d65c0b962c7e790f9-1","fb36abed2f8c7c0d23216a8d65c0b962c7e790f9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRhdGV0aW1lCmZyb20gcmFuZG9tIGltcG9ydCByYW5kaW50CgppbXBvcnQgZGphbmdvX2ZpbHRlcnMKaW1wb3J0IHB5dHoKZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgc2VyaWFsaXplcnMsIHZpZXdzZXRzCgpmcm9tIC4ubW9kZWxzIGltcG9ydCAqCgoKY2xhc3MgRmxhdFNhdGVsbGl0ZVRyYWplY3RvcnlTZXJpYWxpemVyKHNlcmlhbGl6ZXJzLk1vZGVsU2VyaWFsaXplcik6CiAgICBub3JhZF9pZCA9IHNlcmlhbGl6ZXJzLlNlcmlhbGl6ZXJNZXRob2RGaWVsZCgpCiAgICBuYW1lID0gc2VyaWFsaXplcnMuU2VyaWFsaXplck1ldGhvZEZpZWxkKCkKICAgIHJpc2VfdGltZSA9IHNlcmlhbGl6ZXJzLlNlcmlhbGl6ZXJNZXRob2RGaWVsZCgpCiAgICBtYXhhbHRfdGltZSA9IHNlcmlhbGl6ZXJzLlNlcmlhbGl6ZXJNZXRob2RGaWVsZCgpCiAgICBzZXRfdGltZSA9IHNlcmlhbGl6ZXJzLlNlcmlhbGl6ZXJNZXRob2RGaWVsZCgpCiAgICBhdWRpb2ZpbGUgPSBzZXJpYWxpemVycy5TZXJpYWxpemVyTWV0aG9kRmllbGQoKQogICAgdXNlcm5hbWUgPSBzZXJpYWxpemVycy5TZXJpYWxpemVyTWV0aG9kRmllbGQoKQogICAgYXR0cmlidXRpb24gPSBzZXJpYWxpemVycy5TZXJpYWxpemVyTWV0aG9kRmllbGQoKQogICAgdHlwZSA9IHNlcmlhbGl6ZXJzLlNlcmlhbGl6ZXJNZXRob2RGaWVsZCgpCiAgICByZXZpZXdlZCA9IHNlcmlhbGl6ZXJzLlNlcmlhbGl6ZXJNZXRob2RGaWVsZCgpCgogICAgZGVmIF9jaG9vc2VfYXVkaW8oc2VsZiwgb2JqKToKICAgICAgICBpZiBvYmouX2F1ZGlvIGlzIE5vbmU6CiAgICAgICAgICAgIGF1ZGlvcyA9IG9iai5zYXRlbGxpdGUuc2F0ZWxsaXRlYXVkaW9fc2V0LmZpbHRlcihyZXZpZXdlZD1UcnVlKS5vcmRlcl9ieSgnLXVwZGF0ZWQnKQogICAgICAgICAgICBpZiBhdWRpb3MuY291bnQoKSA+IDA6CiAgICAgICAgICAgICAgICAjIG9ic2VydmVyX3dpbmRvdyA9IGRhdGV0aW1lLnRpbWVkZWx0YShob3Vycz1pbnQob2JqLm9ic2VydmVyLnRyYWplY3Rvcnlfd2luZG93KSkKICAgICAgICAgICAgICAgICMgcmVjZW50X3dpbmRvdyA9IHRpbWV6b25lLm5vdygpIC0gb2JzZXJ2ZXJfd2luZG93CgogICAgICAgICAgICAgICAgIyBpZiBtb3N0IHJlY2VudCBhdWRpbyBpcyB3aXRoaW4gb25lIGhvdXIgb2YgdGhpcyB0cmFqZWN0b3J5J3MgcmlzZSB0aW1lLCB1c2UgaXQKICAgICAgICAgICAgICAgIGltbWluZW5jZSA9IGFicygoYXVkaW9zWzBdLnVwZGF0ZWQgLSBvYmoucmlzZV90aW1lKS50b3RhbF9zZWNvbmRzKCkgLyAzNjAwKQogICAgICAgICAgICAgICAgaWYgaW1taW5lbmNlIDwgc2V0dGluZ3MuTUFYX0lNTUlORU5DRToKICAgICAgICAgICAgICAgICAgICBvYmouX2F1ZGlvID0gYXVkaW9zWzBdCiAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSwgcGljayByYW5kb21seQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICByYW5kb21faW5kZXggPSByYW5kaW50KDAsIGF1ZGlvcy5jb3VudCgpIC0gMSkKICAgICAgICAgICAgICAgICAgICBvYmouX2F1ZGlvID0gYXVkaW9zW3JhbmRvbV9pbmRleF0KCiAgICAgICAgcmV0dXJuIG9iai5fYXVkaW8KCiAgICBkZWYgX2dldF90eXBlX2J5X2lkKHNlbGYsIG9iaik6CiAgICAgICAgcmV0ID0gTm9uZQogICAgICAgIGZvciB0eXBlIGluIFNhdGVsbGl0ZUF1ZGlvLlRZUEVTOgogICAgICAgICAgICBpZiBvYmouX2F1ZGlvLnR5cGUgPT0gdHlwZVswXToKICAgICAgICAgICAgICAgIHJldCA9IHR5cGVbMV0KCiAgICAgICAgcmV0dXJuIHJldAoKICAgIGRlZiBnZXRfbm9yYWRfaWQoc2VsZiwgb2JqKToKICAgICAgICByZXR1cm4gb2JqLnNhdGVsbGl0ZS5wawo8fGZpbV9ob2xlfD4KICAgIGRlZiBfZ2V0X2xvY2FsdGltZShzZWxmLCBvYmosIHRpbWUpOgogICAgICAgIHR6ID0gcHl0ei50aW1lem9uZShvYmoub2JzZXJ2ZXIudGltZXpvbmUpCiAgICAgICAgcmV0dXJuIHRpbWUuYXN0aW1lem9uZSh0eikKCiAgICBkZWYgZ2V0X3Jpc2VfdGltZShzZWxmLCBvYmopOgogICAgICAgIG9ic2VydmVyX3Jpc2VfdGltZSA9IHNlbGYuX2dldF9sb2NhbHRpbWUob2JqLCBvYmoucmlzZV90aW1lKQogICAgICAgIHJldHVybiBvYnNlcnZlcl9yaXNlX3RpbWUuc3RyZnRpbWUoc2V0dGluZ3MuVFJBSkVDVE9SWV9USU1FX0ZPUk1BVCkKCiAgICBkZWYgZ2V0X21heGFsdF90aW1lKHNlbGYsIG9iaik6CiAgICAgICAgb2JzZXJ2ZXJfbWF4YWx0X3RpbWUgPSBzZWxmLl9nZXRfbG9jYWx0aW1lKG9iaiwgb2JqLm1heGFsdF90aW1lKQogICAgICAgIHJldHVybiBvYnNlcnZlcl9tYXhhbHRfdGltZS5zdHJmdGltZShzZXR0aW5ncy5UUkFKRUNUT1JZX1RJTUVfRk9STUFUKQoKICAgIGRlZiBnZXRfc2V0X3RpbWUoc2VsZiwgb2JqKToKICAgICAgICBvYnNlcnZlcl9zZXRfdGltZSA9IHNlbGYuX2dldF9sb2NhbHRpbWUob2JqLCBvYmouc2V0X3RpbWUpCiAgICAgICAgcmV0dXJuIG9ic2VydmVyX3NldF90aW1lLnN0cmZ0aW1lKHNldHRpbmdzLlRSQUpFQ1RPUllfVElNRV9GT1JNQVQpCgogICAgZGVmIGdldF9hdWRpb2ZpbGUoc2VsZiwgb2JqKToKICAgICAgICByZXQgPSBOb25lCiAgICAgICAgc2VsZi5fY2hvb3NlX2F1ZGlvKG9iaikKICAgICAgICBpZiBvYmouX2F1ZGlvIGlzIG5vdCBOb25lOgogICAgICAgICAgICByZXQgPSBvYmouX2F1ZGlvLmF1ZGlvLm5hbWUKICAgICAgICByZXR1cm4gcmV0CgogICAgZGVmIGdldF91c2VybmFtZShzZWxmLCBvYmopOgogICAgICAgIHJldCA9IE5vbmUKICAgICAgICBzZWxmLl9jaG9vc2VfYXVkaW8ob2JqKQogICAgICAgIGlmIG9iai5fYXVkaW8gaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHJldCA9IG9iai5fYXVkaW8udXNlci51c2VybmFtZQogICAgICAgIHJldHVybiByZXQKCiAgICBkZWYgZ2V0X2F0dHJpYnV0aW9uKHNlbGYsIG9iaik6CiAgICAgICAgcmV0ID0gTm9uZQogICAgICAgIHNlbGYuX2Nob29zZV9hdWRpbyhvYmopCiAgICAgICAgaWYgb2JqLl9hdWRpbyBpcyBub3QgTm9uZToKICAgICAgICAgICAgcmV0ID0gb2JqLl9hdWRpby5hdHRyaWJ1dGlvbgogICAgICAgIHJldHVybiByZXQKCiAgICBkZWYgZ2V0X3R5cGUoc2VsZiwgb2JqKToKICAgICAgICByZXQgPSBOb25lCiAgICAgICAgc2VsZi5fY2hvb3NlX2F1ZGlvKG9iaikKICAgICAgICBpZiBvYmouX2F1ZGlvIGlzIG5vdCBOb25lOgogICAgICAgICAgICByZXQgPSBzZWxmLl9nZXRfdHlwZV9ieV9pZChvYmopCiAgICAgICAgcmV0dXJuIHJldAoKICAgIGRlZiBnZXRfcmV2aWV3ZWQoc2VsZiwgb2JqKToKICAgICAgICByZXQgPSBOb25lCiAgICAgICAgc2VsZi5fY2hvb3NlX2F1ZGlvKG9iaikKICAgICAgICBpZiBvYmouX2F1ZGlvIGlzIG5vdCBOb25lOgogICAgICAgICAgICByZXQgPSBvYmouX2F1ZGlvLnJldmlld2VkCiAgICAgICAgcmV0dXJuIHJldAoKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgbW9kZWwgPSBTYXRlbGxpdGVUcmFqZWN0b3J5CiAgICAgICAgZmllbGRzID0gKAogICAgICAgICAgICAnbm9yYWRfaWQnLAogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdyaXNlX3RpbWUnLAogICAgICAgICAgICAncmlzZV9hemltdXRoJywKICAgICAgICAgICAgJ21heGFsdF90aW1lJywKICAgICAgICAgICAgJ21heGFsdF9hbHRpdHVkZScsCiAgICAgICAgICAgICdzZXRfdGltZScsCiAgICAgICAgICAgICdzZXRfYXppbXV0aCcsCiAgICAgICAgICAgICdhdWRpb2ZpbGUnLAogICAgICAgICAgICAndXNlcm5hbWUnLAogICAgICAgICAgICAnYXR0cmlidXRpb24nLAogICAgICAgICAgICAndHlwZScsCiAgICAgICAgICAgICdyZXZpZXdlZCcsCiAgICAgICAgKQoKCmNsYXNzIEZsYXRTYXRlbGxpdGVUcmFqZWN0b3J5RmlsdGVyKGRqYW5nb19maWx0ZXJzLkZpbHRlclNldCk6CiAgICBvYnNlcnZlciA9IGRqYW5nb19maWx0ZXJzLk1vZGVsQ2hvaWNlRmlsdGVyKHJlcXVpcmVkPVRydWUsIHF1ZXJ5c2V0PU9ic2VydmVyLm9iamVjdHMuYWxsKCkpCiAgICByaXNlX3RpbWVfd2luZG93ID0gZGphbmdvX2ZpbHRlcnMuTnVtYmVyRmlsdGVyKG5hbWU9J3Jpc2VfdGltZScsIG1ldGhvZD0ndHJhamVjdG9yeV93aW5kb3cnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD0nUmlzZSB0aW1lIHdpbmRvdycpCgogICAgZGVmIHRyYWplY3Rvcnlfd2luZG93KHNlbGYsIHF1ZXJ5c2V0LCBuYW1lLCB2YWx1ZSk6CiAgICAgICAgbG9va3VwID0gJ19fJy5qb2luKFtuYW1lLCAncmFuZ2UnXSkKICAgICAgICBzdGFydCA9IHRpbWV6b25lLm5vdygpCiAgICAgICAgZW5kID0gc3RhcnQgKyBkYXRldGltZS50aW1lZGVsdGEoc2Vjb25kcz1pbnQodmFsdWUpKQoKICAgICAgICByZXR1cm4gcXVlcnlzZXQuZmlsdGVyKCoqe2xvb2t1cDogKHN0YXJ0LCBlbmQpfSkKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIG1vZGVsID0gU2F0ZWxsaXRlVHJhamVjdG9yeQogICAgICAgIGZpZWxkcyA9IFsnb2JzZXJ2ZXInLCAnc2F0ZWxsaXRlJywgJ3Jpc2VfdGltZV93aW5kb3cnLCBdCgoKY2xhc3MgRmxhdFNhdGVsbGl0ZVRyYWplY3RvcnlWaWV3c2V0KHZpZXdzZXRzLlJlYWRPbmx5TW9kZWxWaWV3U2V0KToKICAgICIiIkZsYXR0ZW5lZCByZWFkLW9ubHkgc2F0ZWxsaXRlIHRyYWplY3RvcmllcyBmb3IgY29uc3VtcHRpb24gYnkgTWF4L01TUCwKICAgIGZpbHRlcmVkIGJ5OiBvYnNlcnZlciAocmVxdWlyZWQpLCBzYXRlbGxpdGUsIHJpc2UgdGltZSB3aW5kb3cgKGluIHNlY29uZHMgZnJvbSBub3cpIiIiCiAgICBzZXJpYWxpemVyX2NsYXNzID0gRmxhdFNhdGVsbGl0ZVRyYWplY3RvcnlTZXJpYWxpemVyCiAgICBmaWx0ZXJfY2xhc3MgPSBGbGF0U2F0ZWxsaXRlVHJhamVjdG9yeUZpbHRlcgoKICAgIGRlZiBnZXRfcXVlcnlzZXQoc2VsZik6CiAgICAgICAgIyBhbHdheXMgbGltaXQgYnkgeCAjIG9mIHNlY29uZHMgZnJvbSBub3cKICAgICAgICAjIHN0YXJ0ID0gdGltZXpvbmUubm93KCkKICAgICAgICAjIGVuZCA9IHN0YXJ0ICsgZGF0ZXRpbWUudGltZWRlbHRhKHNlY29uZHM9MzApCiAgICAgICAgIyB0cmFqZWN0b3JpZXMgPSBTYXRlbGxpdGVUcmFqZWN0b3J5Lm9iamVjdHMuZmlsdGVyKHJpc2VfdGltZV9fcmFuZ2U9KHN0YXJ0LCBlbmQpKS5vcmRlcl9ieSgncmlzZV90aW1lJykKICAgICAgICB0cmFqZWN0b3JpZXMgPSBTYXRlbGxpdGVUcmFqZWN0b3J5Lm9iamVjdHMuYWxsKCkub3JkZXJfYnkoJ3Jpc2VfdGltZScpCiAgICAgICAgcmV0dXJuIHRyYWplY3Rvcmllcwo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiBnZXRfbmFtZShzZWxmLCBvYmopOgogICAgICAgIHJldHVybiBvYmouc2F0ZWxsaXRlLm5hbWUKCjx8ZmltX2VuZHw+"]
["59dee4609b30ef2f08c2ab6f2559d2d41b84fe33-1","59dee4609b30ef2f08c2ab6f2559d2d41b84fe33","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBOYW1lOiBwcmxfbGlmZS5weQojIERlc2NyaXB0aW9uOiBTZXF1ZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiBDb253YXlzIExpZmUuCiMgQXV0aG9yOiBNaWxhbiBNdW56YXIgKHhtdW56YTAwQHN0dWQuZml0LnZ1dGJyLmN6KQoKaW1wb3J0IHN5cwppbXBvcnQgbnVtcHkKaW1wb3J0IHF1ZXVlIGFzIFF1ZXVlCmltcG9ydCB0aHJlYWRpbmcKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppbXBvcnQgYXJncGFyc2UKCmZyb20gZ3VpX21haW5XaW5kb3cgaW1wb3J0IE1haW5XaW5kb3cKZnJvbSBtcGk0cHkgaW1wb3J0IE1QSQo8fGZpbV9lbmR8Pg=="]
["9b67a5bb23837c777a0965f47ae145479ab44e00-5","9b67a5bb23837c777a0965f47ae145479ab44e00","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3RlbXBsYXRlLCByZXF1ZXN0LCByZWRpcmVjdCwgdXJsX2ZvciwgZmxhc2gKZnJvbSBmbGFza19zZWN1cml0eSBpbXBvcnQgbG9naW5fcmVxdWlyZWQsIGN1cnJlbnRfdXNlcgpmcm9tIHBvcnRhbCBpbXBvcnQgYXBwLCBkYgpmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IG9yXwpmcm9tIHBvcnRhbC5tb2RlbHMgaW1wb3J0ICoKPHxmaW1faG9sZXw+CkBsb2dpbl9yZXF1aXJlZApkZWYgcHJhY3RpY2VzX2luZGV4KCk6CiAgICBzZWFyY2hGb3JtID0gU2VhcmNoRm9ybShmb3JtZGF0YSA9IHJlcXVlc3QuYXJncykKCiAgICBxID0gUHJhY3RpY2VSZWdpc3RyYXRpb24ucXVlcnkuam9pbihQcmFjdGljZSwgUHJhY3RpY2VSZWdpc3RyYXRpb24ucHJhY3RpY2UpCgogICAgaWYgKG5vdCBjdXJyZW50X3VzZXIuaXNfYWRtaW4oKSk6CiAgICAgICAgcSA9IHEuZmlsdGVyKFByYWN0aWNlUmVnaXN0cmF0aW9uLmlkLmluXyhbcC5pZCBmb3IgcCBpbiBjdXJyZW50X3VzZXIucHJhY3RpY2VzXSkpCgogICAgaWYgc2VhcmNoRm9ybS5zZWFyY2guZGF0YToKICAgICAgICBxID0gcS5maWx0ZXIob3JfKFByYWN0aWNlLm5hbWUubGlrZShmIiV7c2VhcmNoRm9ybS5zZWFyY2guZGF0YX0lIiksIFByYWN0aWNlLmNvZGUgPT0gc2VhcmNoRm9ybS5zZWFyY2guZGF0YSkpCgogICAgcmVnaXN0cmF0aW9ucyA9ICgKICAgICAgICBxLm9yZGVyX2J5KFByYWN0aWNlLm5hbWUuYXNjKCkpCiAgICAgICAgIC5wYWdpbmF0ZSgKICAgICAgICAgICAgcGFnZT1zZWFyY2hGb3JtLnBhZ2UuZGF0YSwKICAgICAgICAgICAgcGVyX3BhZ2U9MTAsCiAgICAgICAgICAgIGVycm9yX291dD1GYWxzZSkpCgogICAgaWYgcmVnaXN0cmF0aW9ucy50b3RhbCA9PSAxOgogICAgICAgIHJldHVybiByZWRpcmVjdCh1cmxfZm9yKCdyZWNydWl0c19pbmRleCcsIGNvZGU9cmVnaXN0cmF0aW9ucy5pdGVtc1swXS5jb2RlKSkKCiAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKCdwcmFjdGljZXMvaW5kZXguaHRtbCcsIHJlZ2lzdHJhdGlvbnM9cmVnaXN0cmF0aW9ucywgc2VhcmNoRm9ybT1zZWFyY2hGb3JtKQo8fGZpbV9zdWZmaXh8Pgpmcm9tIHBvcnRhbC5mb3JtcyBpbXBvcnQgKgpmcm9tIHBvcnRhbC5oZWxwZXJzIGltcG9ydCAqCgpAYXBwLnJvdXRlKCcvcHJhY3RpY2VzLycpCjx8ZmltX2VuZHw+"]
["f967967ac10047712c5646305bd6136420e8d8e6-2","f967967ac10047712c5646305bd6136420e8d8e6","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBteV9sYW1iZGF0YS5kc191dGlsaXRpZXMgaW1wb3J0IGVubGFyZ2UKCnByaW50KGVubGFyZ2UoNikpCjx8ZmltX2VuZHw+"]
["ddc778bcdb8deaf5ccc7fcb3c5bbc1ecd017f979-2","ddc778bcdb8deaf5ccc7fcb3c5bbc1ecd017f979","PHxmaW1fcHJlZml4fD4KIiIiCkV4cGxhbmF0aW9uOgpFcXVpbGlicml1bSBpbmRleCBvZiBhbiBhcnJheSBpcyBhbiBpbmRleCBzdWNoIHRoYXQgdGhlIHN1bSBvZiBlbGVtZW50cyBhdCBsb3dlciBpbmRleGVzIGlzIGVxdWFsCnRvIHRoZSBzdW0gb2YgZWxlbWVudHMgYXQgaGlnaGVyIGluZGV4ZXMuCgpBWzBdID0gLTcsIEFbMV0gPSAxLCBBWzJdID0gNSwgQVszXSA9IDIsIEFbNF0gPSAtNCwgQVs1XSA9IDMsIEFbNl09MAoKMyBpcyBhbiBlcXVpbGlicml1bSBpbmRleCwgYmVjYXVzZToKQVswXSArIEFbMV0gKyBBWzJdID0gQVs0XSArIEFbNV0gKyBBWzZdCgo2IGlzIGFsc28gYW4gZXF1aWxpYnJpdW0gaW5kZXgsIGJlY2F1c2Ugc3VtIG9mIHplcm8gZWxlbWVudHMgaXMgemVybywgaS5lLiwgQVswXSArIEFbMV0gKyBBWzJdICsgQVszXSArIEFbNF0gKyBBWzVdPTAKClF1ZXN0aW9uOgpXcml0ZSBhIGZ1bmN0aW9uIHRoYXQgZ2l2ZW4gYW4gYXJyYXksIHJldHVybnMgYW4gZXF1aWxpYnJpdW0gaW5kZXggKGlmIGFueSkgb3IgLTEgaWYgbm8gZXF1aWxpYnJpdW0gaW5kZXhlcyBleGlzdC4KIiIiCgpmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQoKCmRlZiBlcXVpbGlicml1bShhcnIpOgogICAgbGVmdF9zdW0gPSAwCiAgICB0b3RhbF9zdW0gPSBzdW0oYXJyKQoKICAgIGZvciBpIGluIHJhbmdlKGxlbihhcnIpKToKICAgICAgICBsZWZ0X3N1bSArPSBhcnJbaV0KCiAgICAgICAgaWYgbGVmdF9zdW0gPT0gdG90YWxfc3VtOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHJldHVybiBpCgo8fGZpbV9lbmR8Pg=="]
["9bbc2e8972b06d7965e6169ac31012753ee06fb2-5","9bbc2e8972b06d7965e6169ac31012753ee06fb2","PHxmaW1fcHJlZml4fD4KcHJpbnQoIlxuXG5cdFx0XHRDVUJFIFFVQURPTk9NRVNcblxuIikKCmRlZiBtYWluKCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHMgPSBbXQogICAgeCA9IGlucHV0KCI+Pj4gIikKICAgIGlmKHguY291bnQoIiwiKT4wKToKICAgICAgICBzID0geC5zcGxpdCgiLCIpCjx8ZmltX2VuZHw+"]
["b04dd5763ef0de48cc5dcc505dc4fa113a5efc81-1","b04dd5763ef0de48cc5dcc505dc4fa113a5efc81","PHxmaW1fcHJlZml4fD4KIyAgdmltOnRzPTQ6c3RzPTQ6c3c9NDpldAojCiMgIEF1dGhvcjogSGFyaSBTZWtob24KIyAgRGF0ZTogMjAxNC0wOS0xNSAyMDo0OToyMiArMDEwMCAoTW9uLCAxNSBTZXAgMjAxNCkKIwojICBodHRwczovL2dpdGh1Yi5jb20vSGFyaVNla2hvbi9weWxpYgojCiMgIExpY2Vuc2U6IHNlZSBhY2NvbXBhbnlpbmcgSGFyaSBTZWtob24gTElDRU5TRSBmaWxlCiMKIyAgSWYgeW91J3JlIHVzaW5nIG15IGNvZGUgeW91J3JlIHdlbGNvbWUgdG8gY29ubmVjdCB3aXRoIG1lIG9uIExpbmtlZEluIGFuZCBvcHRpb25hbGx5IHNlbmQgbWUgZmVlZGJhY2sKIyAgdG8gaGVscCBpbXByb3ZlIG9yIHN0ZWVyIHRoaXMgb3Igb3RoZXIgY29kZSBJIHB1Ymxpc2gKIwojICBodHRwczovL3d3dy5saW5rZWRpbi5jb20vaW4vSGFyaVNla2hvbgojCgoiIiIKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICMKIyAgICAgICAgICAgICAgICAgICBQeVVuaXQgVGVzdHMgZm9yIEhhcmlTZWtob24uUmVzdE5hZ2lvc1BsdWdpbgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIwoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKCmltcG9ydCBsb2dnaW5nCmltcG9ydCBvcwppbXBvcnQgc3lzCmltcG9ydCB1bml0dGVzdApsaWJkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicsICcuLicpKQpzeXMucGF0aC5hcHBlbmQobGliZGlyKQojIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtcG9zaXRpb24KZnJvbSBoYXJpc2VraG9uLnV0aWxzIGltcG9ydCBsb2csIEludmFsaWRPcHRpb25FeGNlcHRpb24KZnJvbSBoYXJpc2VraG9uLm5hZ2lvc3BsdWdpbiBpbXBvcnQgUmVzdE5hZ2lvc1BsdWdpbgoKY2xhc3MgUmVzdE5hZ2lvc1BsdWdpblRlc3Rlcih1bml0dGVzdC5UZXN0Q2FzZSk6CgogICAgIyBtdXN0IHByZWZpeCB3aXRoIHRlc3RfIGluIG9yZGVyIGZvciB0aGUgdGVzdHMgdG8gYmUgY2FsbGVkCgogICAgIyBOb3QgdXNpbmcgYXNzZXJ0UmFpc2VzID49IDIuNyBhbmQgbWFpbnRhaW5pbmcgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAyLjYgc2VydmVycwoKICAgIGNsYXNzIFN1YlJlc3ROYWdpb3NQbHVnaW4oUmVzdE5hZ2lvc1BsdWdpbik6CiAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICAgICAjIFB5dGhvbiAyLngKICAgICAgICAgICAgI1Jlc3ROYWdpb3NQbHVnaW4uX19pbml0X18oc2VsZikKICAgICAgICAgICAgc3VwZXIoUmVzdE5hZ2lvc1BsdWdpblRlc3Rlci5TdWJSZXN0TmFnaW9zUGx1Z2luLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgICAgICMgUHl0aG9uIDMueAogICAgICAgICAgICAjIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgICAgICBzZWxmLm5hbWUgPSAndGVzdCcKICAgICAgICAgICAgc2VsZi5kZWZhdWx0X2hvc3QgPSAnZ29vZ2xlLmNvbScKICAgICAgICAgICAgc2VsZi5kZWZhdWx0X3BvcnQgPSA4MAogICAgICAgICAgICBzZWxmLmF1dGggPSBGYWxzZQogICAgICAgIGRlZiBwYXJzZShzZWxmLCByZXEpOgogICAgICAgICAgICBzZWxmLm1zZyA9ICd1bml0dGVzdCBtZXNzYWdlJwoKICAgICNkZWYgc2V0VXAoc2VsZik6CiAgICAjICAgIHNlbGYucGx1Z2luID0gc2VsZi5TdWJSZXN0TmFnaW9zUGx1Z2luKCkKCiAgICBkZWYgdGVzdF9leGl0XzAoc2VsZik6CiAgICAgICAgcGx1Z2luID0gc2VsZi5TdWJSZXN0TmFnaW9zUGx1Z2luKCkKICAgICAgICB0cnk6CiAgICAgICAgICAgIHBsdWdpbi5tYWluKCkKICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ1Jlc3RTdWIgcGx1Z2luIGZhaWxlZCB0byB0ZXJtaW5hdGUnKQogICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0IGFzIF86CiAgICAgICAgICAgIGlmIF8uY29kZSAhPSAwOgogICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ1Jlc3ROYWdpb3NQbHVnaW4gZmFpbGVkIHRvIGV4aXQgT0sgKDApLCBnb3QgZXhpdCBjb2RlIHswfSBpbnN0ZWFkJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChfLmNvZGUpKQoKICAgIGRlZiB0ZXN0X2V4aXRfMihzZWxmKToKICAgICAgICBwbHVnaW4gPSBzZWxmLlN1YlJlc3ROYWdpb3NQbHVnaW4oKQogICAgICAgIHBsdWdpbi5kZWZhdWx0X2hvc3QgPSAnbG9jYWxob3N0JwogICAgICAgIHBsdWdpbi5kZWZhdWx0X3BvcnQgPSA2NTUzNQogICAgICAgIHBsdWdpbi5hdXRoID0gJ29wdGlvbmFsJwogICAgICAgIHRyeToKICAgICAgICAgICAgcGx1Z2luLm1haW4oKQogICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignUmVzdFN1YiBwbHVnaW4gZmFpbGVkIHRvIHRlcm1pbmF0ZScpCiAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQgYXMgXzoKICAgICAgICAgICAgaWYgXy5jb2RlICE9IDI6CiAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignUmVzdE5hZ2lvc1BsdWdpbiBmYWlsZWQgdG8gZXhpdCBDUklUSUNBTCAoMiksIGdvdCBleGl0IGNvZGUgezB9IGluc3RlYWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KF8uY29kZSkpCgogICAgZGVmIHRlc3RfZXhpdF8zKHNlbGYpOgogICAgICAgIHBsdWdpbiA9IHNlbGYuU3ViUmVzdE5hZ2lvc1BsdWdpbigpCiAgICAgICAgcGx1Z2luLmF1dGggPSBUcnVlCiAgICAgICAgdHJ5OgogICAgICAgICAgICBwbHVnaW4ubWFpbigpCiAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdSZXN0U3ViIHBsdWdpbiBmYWlsZWQgdG8gdGVybWluYXRlJykKICAgICAgICBleGNlcHQgKFN5c3RlbUV4aXQsIEludmFsaWRPcHRpb25FeGNlcHRpb24pIGFzIF86CiAgICAgICAgICAgIGlmIF8uY29kZSAhPSAzOgogICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ1Jlc3ROYWdpb3NQbHVnaW4gZmFpbGVkIHRvIGV4aXQgVU5LTk9XTiAoMyksIGdvdCBleGl0IGNvZGUgezB9IGluc3RlYWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KF8uY29kZSkpCgogICAgZGVmIHRlc3RfcGx1Z2luX2Fic3RyYWN0KHNlbGYpOiAgIyBweWxpbnQ6IGRpc2FibGU9bm8tc2VsZi11c2UKICAgICAgICB0cnk6CiAgICAgICAgICAgIFJlc3ROYWdpb3NQbHVnaW4oKSAgIyBweWxpbnQ6IGRpc2FibGU9YWJzdHJhY3QtY2xhc3MtaW5zdGFudGlhdGVkCiAgICAgICAgICAgICNyYWlzZSBBc3NlcnRpb25FcnJvcignZmFpbGVkIHRvIHJhaXNlIGEgVHlwZUVycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBpbnN0YW50aWF0ZSBhYnN0cmFjdCBjbGFzcyAnICsKICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICdSZXN0TmFnaW9zUGx1Z2luJykKICAgICAgICBleGNlcHQgVHlwZUVycm9yOiAgIyBvbmx5IHNlZW1zIHRvIGVuZm9yY2UgYWJzdHJhY3QgdHlwZSBlcnJvciBpbiBQeXRob24gMgogICAgICAgICAgICBwYXNzCiAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQgYXMgXzoKICAgICAgICAgICAgaWYgXy5jb2RlICE9IDM6CiAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignUmVzdE5hZ2lvc1BsdWdpbiBmYWlsZWQgdG8gZXhpdCBVTktOT1dOICgzKSwgZ290IGV4aXQgY29kZSB7MH0gaW5zdGVhZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoXy5jb2RlKSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCmRlZiBtYWluKCk6CiAgICAjIGluY3JlYXNlIHRoZSB2ZXJib3NpdHkKPHxmaW1fZW5kfD4="]
["bb8f05e8d7ec367a5edf7eca10da10ef931d46a9-5","bb8f05e8d7ec367a5edf7eca10da10ef931d46a9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdApmcm9tIGRqYW5nby51cmxzIGltcG9ydCByZXZlcnNlCmZyb20gaW52aXRhdGlvbnMubW9kZWxzIGltcG9ydCBJbnZpdGF0aW9uCgpweXRlc3RtYXJrID0gcHl0ZXN0Lm1hcmsuZGphbmdvX2RiCgoKZGVmIHRlc3RfYXV0b19zZXRfYWRtaW5fYXNfaW52aXRhdGlvbl9jcmVhdG9yKGFkbWluX2NsaWVudCwgYWRtaW5fdXNlcik6CiAgICB1cmwgPSByZXZlcnNlKCJhZG1pbjppbnZpdGF0aW9uc19pbnZpdGF0aW9uX2FkZCIpCiAgICByZXNwb25zZSA9IGFkbWluX2NsaWVudC5wb3N0KHVybCkKICAgIGFzc2VydCByZXNwb25zZS5zdGF0dXNfY29kZSA9PSAzMDIKCiAgICBhc3NlcnQgSW52aXRhdGlvbi5vYmplY3RzLmNvdW50KCkgPT0gMQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBpbnYgPSBJbnZpdGF0aW9uLm9iamVjdHMuZ2V0KCkKICAgIGFzc2VydCBpbnYuY3JlYXRvciA9PSBhZG1pbl91c2VyCjx8ZmltX2VuZHw+"]
["9b3404c2a568fb691cda1984df2a48969d2cfdf3-1","9b3404c2a568fb691cda1984df2a48969d2cfdf3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGlyaXNweQppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKCgpjbGFzcyBJUklTVGVzdChUZXN0Q2FzZSk6CiAgICBkZWYgdGVzdF9ib3goc2VsZik6CiAgICAgICAgb2JzdGFjbGVzID0gW25wLmFycmF5KFtbMC4wLCAxLjBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAuMCwgMC4wXV0pLAogICAgICAgICAgICAgICAgICAgICBucC5hcnJheShbWzEuMCwgMS4wXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswLjAsIDEuMF1dKSwKICAgICAgICAgICAgICAgICAgICAgbnAuYXJyYXkoW1sxLjAsIDAuMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMS4wLCAxLjBdXSksCiAgICAgICAgICAgICAgICAgICAgIG5wLmFycmF5KFtbMC4wLCAwLjBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEuMCwgMC4wXV0pCiAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICBzdGFydCA9IGlyaXNweS5FbGxpcHNvaWQuZnJvbU5TcGhlcmUobnAuYXJyYXkoWzAuMSwgMC4xXSkpCgogICAgICAgIHJlZ2lvbiA9IGlyaXNweS5pbmZsYXRlX3JlZ2lvbihvYnN0YWNsZXMsIHN0YXJ0KQoKICAgICAgICBDID0gcmVnaW9uLmdldEVsbGlwc29pZCgpLmdldEMoKQogICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoQ1swLDBdLCAwLjUsIDMpCiAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChDWzAsMV0sIDAuMCwgMykKCiAgICAgICAgZCA9IHJlZ2lvbi5nZXRFbGxpcHNvaWQoKS5nZXREKCkKICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGRbMF0sIDAuNSwgMykKICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGRbMV0sIDAuNSwgMykKCiAgICBkZWYgdGVzdF9wb2ludF9zdGFydChzZWxmKToKICAgICAgICBvYnN0YWNsZXMgPSBbbnAuYXJyYXkoW1swLjAsIDEuMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMC4wLCAwLjBdXSksCiAgICAgICAgICAgICAgICAgICAgIG5wLmFycmF5KFtbMS4wLCAxLjBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAuMCwgMS4wXV0pLAogICAgICAgICAgICAgICAgICAgICBucC5hcnJheShbWzEuMCwgMC4wXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLjAsIDEuMF1dKSwKICAgICAgICAgICAgICAgICAgICAgbnAuYXJyYXkoW1swLjAsIDAuMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMS4wLCAwLjBdXSkKICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgIHN0YXJ0ID0gbnAuYXJyYXkoWzAuMSwgMC4xXSkKCiAgICAgICAgcmVnaW9uID0gaXJpc3B5LmluZmxhdGVfcmVnaW9uKG9ic3RhY2xlcywgc3RhcnQpCgogICAgICAgIEMgPSByZWdpb24uZ2V0RWxsaXBzb2lkKCkuZ2V0QygpCjx8ZmltX2hvbGV8PgogICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZFswXSwgMC41LCAzKQogICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZFsxXSwgMC41LCAzKQoKZGVmIHRlc3RfZGVidWdfZGF0YSgpOgogICAgaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAoKICAgIG9ic3RhY2xlcyA9IFtucC5hcnJheShbWzAuMywgMC41LCAxLjAsIDEuMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFswLjEsIDEuMCwgMS4wLCAwLjBdXSldCiAgICBib3VuZHMgPSBpcmlzcHkuUG9seWhlZHJvbigpCiAgICBib3VuZHMuc2V0QShucC52c3RhY2soKG5wLmV5ZSgyKSwgLW5wLmV5ZSgyKSkpKQogICAgYm91bmRzLnNldEIobnAuYXJyYXkoWzIuMCwgMiwgMiwgMl0pKQogICAgc3RhcnQgPSBucC5hcnJheShbMC4xLCAtMC4wNV0pCgogICAgIyBwcmludCAicnVubmluZyB3aXRoIGRlYnVnIgogICAgcmVnaW9uLCBkZWJ1ZyA9IGlyaXNweS5pbmZsYXRlX3JlZ2lvbihvYnN0YWNsZXMsIHN0YXJ0LCBib3VuZHM9Ym91bmRzLCByZXR1cm5fZGVidWdfZGF0YT1UcnVlKQogICAgIyBwcmludCAiZG9uZSIKCiAgICBkZWJ1Zy5hbmltYXRlKHBhdXNlPTAuNSwgc2hvdz1GYWxzZSkKCgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoQ1swLDBdLCAwLjUsIDMpCiAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChDWzAsMV0sIDAuMCwgMykKCiAgICAgICAgZCA9IHJlZ2lvbi5nZXRFbGxpcHNvaWQoKS5nZXREKCkKPHxmaW1fZW5kfD4="]
["32fe08692f51a05216e86b8835e0d317ecb5f051-3","32fe08692f51a05216e86b8835e0d317ecb5f051","PHxmaW1fcHJlZml4fD4KI3B5dGhyYW4gZXhwb3J0IGEoKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBudW1weQpkZWYgYSgpOiByZXR1cm4gbnVtcHkub25lcygxKQo8fGZpbV9lbmR8Pg=="]
["fb2b9449e9516d58e41c3c8b3929d18f6400a1dc-5","fb2b9449e9516d58e41c3c8b3929d18f6400a1dc","PHxmaW1fcHJlZml4fD4KIiIiIFVuaXQgdGVzdHMgZm9yIHRoZSBgSG9zcGl0YWxgIGNsYXNzIG9mIHBsYXllcnMuICIiIgoKZnJvbSBoeXBvdGhlc2lzIGltcG9ydCBnaXZlbgpmcm9tIGh5cG90aGVzaXMuc3RyYXRlZ2llcyBpbXBvcnQgaW50ZWdlcnMsIGxpc3RzLCB0ZXh0Cgpmcm9tIG1hdGNoaW5nIGltcG9ydCBQbGF5ZXIgYXMgUmVzaWRlbnQKZnJvbSBtYXRjaGluZy5wbGF5ZXJzIGltcG9ydCBIb3NwaXRhbAoKCkBnaXZlbihuYW1lPXRleHQoKSwgY2FwYWNpdHk9aW50ZWdlcnMoKSkKZGVmIHRlc3RfaW5pdChuYW1lLCBjYXBhY2l0eSk6CiAgICAiIiIgTWFrZSBhbiBpbnN0YW5jZSBvZiBIb3NwaXRhbCBhbmQgY2hlY2sgdGhlaXIgYXR0cmlidXRlcyBhcmUgY29ycmVjdC4gIiIiCgogICAgaG9zcGl0YWwgPSBIb3NwaXRhbChuYW1lLCBjYXBhY2l0eSkKCiAgICBhc3NlcnQgaG9zcGl0YWwubmFtZSA9PSBuYW1lCiAgICBhc3NlcnQgaG9zcGl0YWwuY2FwYWNpdHkgPT0gY2FwYWNpdHkKICAgIGFzc2VydCBob3NwaXRhbC5wcmVmcyBpcyBOb25lCiAgICBhc3NlcnQgaG9zcGl0YWwucHJlZl9uYW1lcyBpcyBOb25lCiAgICBhc3NlcnQgaG9zcGl0YWwubWF0Y2hpbmcgPT0gW10KCgpAZ2l2ZW4obmFtZT10ZXh0KCksIGNhcGFjaXR5PWludGVnZXJzKCksIHByZWZfbmFtZXM9bGlzdHModGV4dCgpLCBtaW5fc2l6ZT0xKSkKZGVmIHRlc3RfZ2V0X2Zhdm91cml0ZShuYW1lLCBjYXBhY2l0eSwgcHJlZl9uYW1lcyk6CiAgICAiIiIgQ2hlY2sgdGhlIGNvcnJlY3QgcGxheWVyIGlzIHJldHVybmVkIGFzIHRoZSBob3NwaXRhbCdzIGZhdm91cml0ZS4gIiIiCgogICAgaG9zcGl0YWwgPSBIb3NwaXRhbChuYW1lLCBjYXBhY2l0eSkKICAgIG90aGVycyA9IFtSZXNpZGVudChvdGhlcikgZm9yIG90aGVyIGluIHByZWZfbmFtZXNdCgogICAgaG9zcGl0YWwuc2V0X3ByZWZzKG90aGVycykKICAgIGFzc2VydCBob3NwaXRhbC5nZXRfZmF2b3VyaXRlKCkgPT0gb3RoZXJzWzBdCgogICAgaG9zcGl0YWwubWF0Y2hpbmcgPSBvdGhlcnMKICAgIGFzc2VydCBob3NwaXRhbC5nZXRfZmF2b3VyaXRlKCkgaXMgTm9uZQoKCkBnaXZlbihuYW1lPXRleHQoKSwgY2FwYWNpdHk9aW50ZWdlcnMoKSwgcHJlZl9uYW1lcz1saXN0cyh0ZXh0KCksIG1pbl9zaXplPTEpKQpkZWYgdGVzdF9tYXRjaChuYW1lLCBjYXBhY2l0eSwgcHJlZl9uYW1lcyk6CiAgICAiIiIgQ2hlY2sgdGhhdCBhIGhvc3BpdGFsIGNhbiBtYXRjaCB0byBhIHBsYXllciBjb3JyZWN0bHkuICIiIgoKICAgIGhvc3BpdGFsID0gSG9zcGl0YWwobmFtZSwgY2FwYWNpdHkpCiAgICBvdGhlcnMgPSBbUmVzaWRlbnQob3RoZXIpIGZvciBvdGhlciBpbiBwcmVmX25hbWVzXQoKICAgIGhvc3BpdGFsLnNldF9wcmVmcyhvdGhlcnMpCiAgICBmb3IgaSwgb3RoZXIgaW4gZW51bWVyYXRlKG90aGVyc1s6LTFdKToKICAgICAgICBob3NwaXRhbC5tYXRjaChvdGhlcikKICAgICAgICBhc3NlcnQgaG9zcGl0YWwubWF0Y2hpbmcgPT0gb3RoZXJzWzogaSArIDFdCgogICAgaG9zcGl0YWwubWF0Y2gob3RoZXJzWy0xXSkKICAgIGFzc2VydCBob3NwaXRhbC5tYXRjaGluZyA9PSBvdGhlcnMKCgpAZ2l2ZW4obmFtZT10ZXh0KCksIGNhcGFjaXR5PWludGVnZXJzKCksIHByZWZfbmFtZXM9bGlzdHModGV4dCgpLCBtaW5fc2l6ZT0xKSkKZGVmIHRlc3RfdW5tYXRjaChuYW1lLCBjYXBhY2l0eSwgcHJlZl9uYW1lcyk6CiAgICAiIiIgQ2hlY2sgdGhhdCBhIGhvc3BpdGFsIGNhbiB1bm1hdGNoIGZyb20gYSBwbGF5ZXIgY29ycmVjdGx5LiAiIiIKCiAgICBob3NwaXRhbCA9IEhvc3BpdGFsKG5hbWUsIGNhcGFjaXR5KQogICAgb3RoZXJzID0gW1Jlc2lkZW50KG90aGVyKSBmb3Igb3RoZXIgaW4gcHJlZl9uYW1lc10KCiAgICBob3NwaXRhbC5tYXRjaGluZyA9IG90aGVycwogICAgZm9yIGksIG90aGVyIGluIGVudW1lcmF0ZShvdGhlcnNbOi0xXSk6CiAgICAgICAgaG9zcGl0YWwudW5tYXRjaChvdGhlcikKPHxmaW1faG9sZXw+CiAgICBob3NwaXRhbC51bm1hdGNoKG90aGVyc1stMV0pCiAgICBhc3NlcnQgaG9zcGl0YWwubWF0Y2hpbmcgPT0gW10KCgpAZ2l2ZW4obmFtZT10ZXh0KCksIGNhcGFjaXR5PWludGVnZXJzKCksIHByZWZfbmFtZXM9bGlzdHModGV4dCgpLCBtaW5fc2l6ZT0xKSkKZGVmIHRlc3RfZ2V0X3dvcnN0X21hdGNoKG5hbWUsIGNhcGFjaXR5LCBwcmVmX25hbWVzKToKICAgICIiIiBDaGVjayB0aGF0IGEgaG9zcGl0YWwgY2FuIHJldHVybiBpdHMgd29yc3QgbWF0Y2guICIiIgoKICAgIGhvc3BpdGFsID0gSG9zcGl0YWwobmFtZSwgY2FwYWNpdHkpCiAgICBvdGhlcnMgPSBbUmVzaWRlbnQob3RoZXIpIGZvciBvdGhlciBpbiBwcmVmX25hbWVzXQoKICAgIGhvc3BpdGFsLm1hdGNoaW5nID0gW290aGVyc1swXV0KICAgIGFzc2VydCBob3NwaXRhbC5nZXRfd29yc3RfbWF0Y2goKSA9PSBvdGhlcnNbMF0KCiAgICBob3NwaXRhbC5tYXRjaGluZyA9IG90aGVycwogICAgYXNzZXJ0IGhvc3BpdGFsLmdldF93b3JzdF9tYXRjaCgpID09IG90aGVyc1stMV0KCgpAZ2l2ZW4obmFtZT10ZXh0KCksIGNhcGFjaXR5PWludGVnZXJzKCksIHByZWZfbmFtZXM9bGlzdHModGV4dCgpLCBtaW5fc2l6ZT0xKSkKZGVmIHRlc3RfZ2V0X3N1Y2Nlc3NvcnMobmFtZSwgY2FwYWNpdHksIHByZWZfbmFtZXMpOgogICAgIiIiIENoZWNrIHRoYXQgYSBob3NwaXRhbCBjYW4gZ2V0IHRoZSBzdWNjZXNzb3JzIHRvIGl0cyB3b3JzdCBjdXJyZW50IG1hdGNoLgogICAgIiIiCgogICAgaG9zcGl0YWwgPSBIb3NwaXRhbChuYW1lLCBjYXBhY2l0eSkKICAgIG90aGVycyA9IFtSZXNpZGVudChvdGhlcikgZm9yIG90aGVyIGluIHByZWZfbmFtZXNdCgogICAgaG9zcGl0YWwuc2V0X3ByZWZzKG90aGVycykKICAgIGhvc3BpdGFsLm1hdGNoaW5nID0gW290aGVyc1swXV0KICAgIGFzc2VydCBob3NwaXRhbC5nZXRfc3VjY2Vzc29ycygpID09IG90aGVyc1sxOl0KCiAgICBob3NwaXRhbC5tYXRjaGluZyA9IG90aGVycwogICAgYXNzZXJ0IGhvc3BpdGFsLmdldF9zdWNjZXNzb3JzKCkgPT0gW10KPHxmaW1fc3VmZml4fD4KICAgICAgICBhc3NlcnQgaG9zcGl0YWwubWF0Y2hpbmcgPT0gb3RoZXJzW2kgKyAxIDpdCgo8fGZpbV9lbmR8Pg=="]
["fb384035a7aa24e4d86d6a4bfbbd404cb3afc5d7-2","fb384035a7aa24e4d86d6a4bfbbd404cb3afc5d7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRhdGV0aW1lCmZyb20gYXBwcy5iYWxpemEudmlld3Muc2VydmVyLkxpYnJhcmllcy5Db25zdWx0YXNCYXNlRGF0b3MuQ29uc3VsdGFzTWFyaWFEQiBpbXBvcnQgKgoKaW1wb3J0IHdhcm5pbmdzCndhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiKQoKaW1wb3J0IHRpbWUKCiMgZm9yIGkgaW4gcmFuZ2UoMSk6CiMgICAgIHJlc3BvbnNlID0gUmVhZExhc3RSZWdpc3RlckJ5Q2FsY3VsYXRlVWJpY2F0aW9uKCkKIyAgICAgcHJpbnQoaSwgIiAtPiAiLCByZXNwb25zZSkKIyAgICAgdGltZS5zbGVlcCgwLjAwNSkKCnByaW50KCJjb3JyZW9zOiAiLCBSZWFkRW1haWxzQWxlcnRhcygpKQoKcHJpbnQoImJhbGl6YTogIiwgUmVhZERhdGFCYWxpemFCeU1hYygnNEM6MTE6QUU6NzU6NDA6NDQnKVswXSkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcHJpbnQoIkJyYWNlbGV0OiAiLCBSZWFkRGF0YUJyYWNlbGV0QnlNYWMoJ0IwOjdFOjExOkZFOjkxOkY0JylbMF0pCgpwcmludCgic2Vuc29yczoiLCBSZWFkTGFzdFJlZ2lzdGVyU2Vuc29ycygzKSkKCjx8ZmltX2VuZHw+"]
["abdd748dc3aeb9a92d8a50a267fafb838b61e9ca-2","abdd748dc3aeb9a92d8a50a267fafb838b61e9ca","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCmltcG9ydCBudW1weSBhcyBucAoKJycnaW5pdGlhbGl6aW5nIGEgdGVuc29yJycnCiMgRGlyZWN0bHkgZnJvbSBkYXRhCmRhdGEgPSBbWzEsIDJdLCBbMywgNF1dCnhfZGF0YSA9IHRvcmNoLnRlbnNvcihkYXRhKQpwcmludCh4X2RhdGEpCgojIGZyb20gYSBudW1weSBkYXRhCm5wX2FycmF5ID0gbnAuYXJyYXkoZGF0YSkKeF9ucCA9IHRvcmNoLmZyb21fbnVtcHkobnBfYXJyYXkpCnByaW50KHhfbnApCgojIGZyb20gYW5vdGhlciB0ZW5zb3JzCiMgVGhlIG5ldyB0ZW5zb3IgcmV0YWlucyB0aGUgcHJvcGVydGllcyAoc2hhcGUsIGRhdGF0eXBlKSBvZiB0aGUgYXJndW1lbnQgdGVuc29yLCB1bmxlc3MgZXhwbGljaXRseSBvdmVycmlkZGVuLgp4X29uZXMgPSB0b3JjaC5vbmVzX2xpa2UoeF9kYXRhKSAgIyByZXRhaW5zIHRoZSBwcm9wZXJ0aWVzIG9mIHhfZGF0YQpwcmludChmIk9uZXMgVGVuc29yOiBcbiB7eF9vbmVzfSBcbiIpCgp4X3JhbmQgPSB0b3JjaC5yYW5kX2xpa2UoeF9kYXRhLCBkdHlwZT10b3JjaC5mbG9hdCkgICMgb3ZlcnJpZGVzIHRoZSBkYXRhdHlwZSBvZiB4X2RhdGEKcHJpbnQoZiJSYW5kb20gVGVuc29yOiBcbiB7eF9yYW5kfSBcbiIpCgojIFdpdGggcmFuZG9tIG9yIGNvbnN0YW50IHZhbHVlczoKIyBzaGFwZSBpcyBhIHR1cGxlIG9mIHRlbnNvciBkaW1lbnNpb25zLiBJbiB0aGUgZnVuY3Rpb25zIGJlbG93LCBpdCBkZXRlcm1pbmVzIHRoZSBkaW1lbnNpb25hbGl0eSBvZiB0aGUgb3V0cHV0IHRlbnNvci4Kc2hhcGUgPSAoMiwgMywpCnJhbmRfdGVuc29yID0gdG9yY2gucmFuZChzaGFwZSkKb25lc190ZW5zb3IgPSB0b3JjaC5vbmVzKHNoYXBlKQp6ZXJvc190ZW5zb3IgPSB0b3JjaC56ZXJvcyhzaGFwZSkKCnByaW50KGYiUmFuZG9tIFRlbnNvcjogXG4ge3JhbmRfdGVuc29yfSBcbiIpCnByaW50KGYiT25lcyBUZW5zb3I6IFxuIHtvbmVzX3RlbnNvcn0gXG4iKQpwcmludChmIlplcm9zIFRlbnNvcjogXG4ge3plcm9zX3RlbnNvcn0iKQoKJycnQXR0cmlidXRlcyBvZiBhIFRlbnNvcicnJwojIFRlbnNvciBhdHRyaWJ1dGVzIGRlc2NyaWJlIHRoZWlyIHNoYXBlLCBkYXRhdHlwZSwgYW5kIHRoZSBkZXZpY2Ugb24gd2hpY2ggdGhleSBhcmUgc3RvcmVkLgp0ZW5zb3IgPSB0b3JjaC5yYW5kKDMsIDQpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CnByaW50KGYiU2hhcGUgb2YgdGVuc29yOiBcbiB7dGVuc29yfSIpCnByaW50KGYiU2hhcGUgb2YgdGVuc29yOiB7dGVuc29yLnNoYXBlfSIpCnByaW50KGYiRGF0YXR5cGUgb2YgdGVuc29yOiB7dGVuc29yLmR0eXBlfSIpCnByaW50KGYiRGV2aWNlIHRlbnNvciBpcyBzdG9yZWQgb246IHt0ZW5zb3IuZGV2aWNlfSIpCjx8ZmltX2VuZHw+"]
["9b5ca21f3c942c2aeca5f0ec74c550f5a766954d-3","9b5ca21f3c942c2aeca5f0ec74c550f5a766954d","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8Pgpmcm9tIHJlc3RfZnJhbWV3b3JrLnJlc3BvbnNlIGltcG9ydCBSZXNwb25zZQpmcm9tIG1laWR1b19hZG1pbi5wYWdlcyBpbXBvcnQgTXlQYWdlCgoKY2xhc3MgVXNlckFQSVZpZXcoTGlzdENyZWF0ZUFQSVZpZXcpOgogICAgcXVlcnlzZXQgPSBVc2VyLm9iamVjdHMuZmlsdGVyKGlzX3N0YWZmPVRydWUpLm9yZGVyX2J5KCdpZCcpCiAgICBzZXJpYWxpemVyX2NsYXNzID0gVXNlck1vZGVsU2VyaWFsaXplcgoKICAgIHBhZ2luYXRpb25fY2xhc3MgPSBNeVBhZ2UKCiAgICBkZWYgZ2V0X3F1ZXJ5c2V0KHNlbGYpOgogICAgICAgICIiIuWQjue7reaJgOacieeahOW6j+WIl+WMluWkhOeQhueahOaVsOaNrumbhumDveaYr+mAmui/h+ivpeWHveaVsOiOt+W+lwogICAgICAgIOWPquimgemHjeWGmeivpeWHveaVsOWwseWPr+S7peaOp+WItuWkhOeQhueahOinhuWbvumbhiIiIgoKICAgICAgICAjIOivt+axguWvueixoe+8muinhuWbvuWvueixoS5yZXF1ZXN0CiAgICAgICAga2V5d29yZCA9IHNlbGYucmVxdWVzdC5xdWVyeV9wYXJhbXMuZ2V0KCdrZXl3b3JkJykKCiAgICAgICAgaWYga2V5d29yZDoKICAgICAgICAgICAgcmV0dXJuIHNlbGYucXVlcnlzZXQuZmlsdGVyKHVzZXJuYW1lX19jb250YWlucz1rZXl3b3JkKQoKICAgICAgICAjIC5hbGwoKeeahOebrueahOaYr+iOt+W+l+acgOaWsOeahOaVsOaNru+8jOiAjOS4jeaYr+S7jue8k+WtmOS4reiOt+WPluaXp+aVsOaNrgogICAgICAgIHJldHVybiBzZWxmLnF1ZXJ5c2V0LmFsbCgpCjx8ZmltX3N1ZmZpeHw+CmZyb20gbWVpZHVvX2FkbWluLnNlcmlhbGl6ZXJzLnVzZXJfc2VyaWFsaXplciBpbXBvcnQgKgpmcm9tIHJlc3RfZnJhbWV3b3JrLmdlbmVyaWNzIGltcG9ydCBMaXN0Q3JlYXRlQVBJVmlldwpmcm9tIHVzZXJzLm1vZGVscyBpbXBvcnQgVXNlcgpmcm9tIHJlc3RfZnJhbWV3b3JrLnBhZ2luYXRpb24gaW1wb3J0IFBhZ2VOdW1iZXJQYWdpbmF0aW9uCjx8ZmltX2VuZHw+"]
["e617f4b85c6c010f456c23518e0655a45797c8ec-2","e617f4b85c6c010f456c23518e0655a45797c8ec","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgoiIiIKUHVycG9zZToKICAgIERvd25sb2FkIGJpZyBmaWxlcyBmcm9tIE5JSCBoZWxpeCBmdHAKIiIiCgppbXBvcnQgdXJsbGliLnJlcXVlc3QKaW1wb3J0IG9zCjx8ZmltX2hvbGV8PgogICAgIiIiCiAgICBkYXRhID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbigiZnRwOi8vaGVsaXgubmloLmdvdi9wdWIvaGFpd2FuZy8iICsgZmlsZW5hbWUpCgogICAgIyBjaGVjayBpZiB0aGUgb3V0cHV0IGRpciBleGlzdCwgaWYgbm90IGNyZWF0ZSBpdAogICAgb3V0cHV0ZGlyID0gImRhdGEiCiAgICB0cnk6CiAgICAgICAgb3Muc3RhdChvdXRwdXRkaXIpCiAgICBleGNlcHQ6CiAgICAgICAgb3MubWtkaXIob3V0cHV0ZGlyKQoKICAgIHdpdGggb3BlbihvdXRwdXRkaXIgKyAiLyIgKyBmaWxlbmFtZSwgJ3diJykgYXMgZjoKICAgICAgICBmb3IgbGluZSBpbiBkYXRhOgogICAgICAgICAgICBmLndyaXRlKGxpbmUpCgpkZWYgbWFpbigpOgogICAgZmV0Y2hfYmluYXJ5X2ZpbGVfZnJvbV9oZWxpeF9mdHAoIncxMTE4X2Rwc2VfZHZpcl9mX2FjX3IxLm1hcHBlZC5zb3J0ZWQuYmFtIikKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KCmRlZiBmZXRjaF9iaW5hcnlfZmlsZV9mcm9tX2hlbGl4X2Z0cChmaWxlbmFtZSk6CiAgICAiIiIgCiAgICAgICBnZXQgYmluYXJ5IGZpbGUgc3VjaCBhcyBiYW0KPHxmaW1fZW5kfD4="]
["f9437b54bf8ac867dc8f514bd5caf890220a024f-1","f9437b54bf8ac867dc8f514bd5caf890220a024f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGludmVzdHB5CmZyb20gZGF0ZXV0aWwucmVsYXRpdmVkZWx0YSBpbXBvcnQgcmVsYXRpdmVkZWx0YQpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlCgoKZGVmIGdldF9kYXRlKGludGVydmFsPTE4MCk6CiAgICAiIiIKICAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgaW50ZXJ2YWwgYXMgaXRzIGFyZ3VtZW50CiAgICBhbmQgcmV0dXJuIGRhdGVzIHdpdGggZ2FwIG9mIGludGVydmFsCiAgICAiIiIKICAgIGN1cnJlbnRfZGF0ZSA9IGRhdGUudG9kYXkoKQogICAgZW5kX2RhdGUgPSBjdXJyZW50X2RhdGUuc3RyZnRpbWUoIiVkLyVtLyVZIikKICAgIHN0YXJ0X2RhdGUgPSBjdXJyZW50X2RhdGUgLSByZWxhdGl2ZWRlbHRhKGRheXM9aW50ZXJ2YWwpCiAgICBzdGFydF9kYXRlID0gc3RhcnRfZGF0ZS5zdHJmdGltZSgiJWQvJW0vJVkiKQogICAgcmV0dXJuIHN0YXJ0X2RhdGUsIGVuZF9kYXRlCgoKZGVmIGdldF9jdXJyZW50X2RhdGEoc3ltYm9sKToKICAgICIiIgogICAgRnVuY3Rpb24gcmV0dXJucyBzdG9jayBkYXRhIG9mIGxhdGVzdCB0cmFkaW5nIGRheSBmb3IgZ2l2ZW4gc3RvY2sgc3ltYm9sCiAgICAiIiIKICAgIHRyeToKICAgICAgICBkYXlfZGF0YSA9IGludmVzdHB5LmdldF9zdG9ja19yZWNlbnRfZGF0YShzeW1ib2wsICJpbmRpYSIpCiAgICAgICAgY3VycmVudF9kYXlfZGF0YSA9IGRheV9kYXRhLmlsb2NbLTFdCiAgICAgICAgcmV0dXJuIGN1cnJlbnRfZGF5X2RhdGEKCiAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICByZXR1cm4gRmFsc2UKCgpkZWYgZ2V0X2ZyYW1lX2RhdGEoc3ltYm9sLCBzdGFydF9kYXRlLCBlbmRfZGF0ZSk6CiAgICAiIiIKICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJuIGRhdGEgZnJhbWUgY29uc2lzdGluZyBvZiBzdG9jayBkYXRhCiAgICBpbiByYW5nZSBvZiBnaXZlbiBkYXRlcyBmb3IgZ2l2ZW4gc3RvY2sgc3ltYm9sCiAgICAiIiIKICAgIHRyeToKICAgICAgICBkYXRhID0gaW52ZXN0cHkuZ2V0X3N0b2NrX2hpc3RvcmljYWxfZGF0YShzdG9jaz1zeW1ib2wsIGNvdW50cnk9ImluZGlhIiwgZnJvbV9kYXRlPXN0YXJ0X2RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9fZGF0ZT1lbmRfZGF0ZSkKICAgICAgICByZXR1cm4gZGF0YQoKICAgIGV4Y2VwdCBJbmRleEVycm9yOgogICAgICAgIHJldHVybiBGYWxzZQoKCmRlZiBnZXRfZGF0YShzeW1ib2wsIHN0YXJ0X2RhdGUsIGVuZF9kYXRlKToKICAgICIiIgogICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGRhdGEgZnJhbWUgY29uc2lzdGluZyBvZiBzdG9jayBkYXRhIGJldHdlZW4gZ2l2ZW4gZGF0ZXMsCiAgICBkYXRhIGZvciBsYXN0IHRyYWRpbmcgZGF5IGluIGdpdmVuIGRhdGUgcmFuZ2UgYW5kIGRhdGEgZm9yIHNlY29uZCBsYXN0IHRyYWRpbmcgZGF5LgogICAgc28gdGhvc2UgZGF0YSBjYW4gdXNlIHRvIGFwcGx5IHZhcmlvdXMgY29tcGFyaXNpb24gZmlsdGVycyBmb3IgZGF5IGRhdGEgYW5kIGxvbmcgdGVybSBkYXRhCiAgICAiIiIKICAgIHRyeToKICAgICAgICBkYXRhID0gaW52ZXN0cHkuZ2V0X3N0b2NrX2hpc3RvcmljYWxfZGF0YShzdG9jaz1zeW1ib2wsIGNvdW50cnk9ImluZGlhIiwgZnJvbV9kYXRlPXN0YXJ0X2RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9fZGF0ZT1lbmRfZGF0ZSkKICAgICAgICBkYXlfZGF0YSA9IGRhdGEuaWxvY1stMV0KICAgICAgICBwcmV2X2RheV9kYXRhID0gZGF0YS5pbG9jWy0yXQogICAgICAgIHJldHVybiBkYXRhLCBkYXlfZGF0YSwgcHJldl9kYXlfZGF0YQoKICAgIGV4Y2VwdCBJbmRleEVycm9yOgogICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSwgTm9uZSkKCgpkZWYgYXZlcmFnZV92b2x1bWUoc3ltYm9sLCBzdGFydF9kYXRlLCBlbmRfZGF0ZSk6CiAgICAiIiIKICAgIFJldHVybnMgYXZlcmFnZSB2b2x1bWUgZm9yIGEgc3RvY2sgaW4gZ2l2ZW4gZGF0ZSByYW5nZQogICAgIiIiCiAgICBkYXRhID0gZ2V0X2ZyYW1lX2RhdGEoc3ltYm9sLCBzdGFydF9kYXRlLCBlbmRfZGF0ZSkKICAgIGF2Z192b2wgPSBkYXRhWyJWb2x1bWUiXS5tZWFuKCkKICAgIHJldHVybiBhdmdfdm9sCgoKZGVmIHZvbGF0aWxpdHkoc3ltYm9sLCBzdGFydF9kYXRlLCBlbmRfZGF0ZSk6CiAgICAiIiIKICAgIFJldHVybnMgYXZlcmFnZSB2b2xhdGlsaXR5IGZvciBhIHN0b2NrIGluIGdpdmVuIGRhdGUgcmFuZ2UKICAgICIiIgogICAgZGF0YSA9IGdldF9mcmFtZV9kYXRhKHN5bWJvbCwgc3RhcnRfZGF0ZSwgZW5kX2RhdGUpCiAgICB2aXggPSAoKGRhdGFbIkhpZ2giXSAtIGRhdGFbIkxvdyJdKSAvIGRhdGFbIkxvdyJdKSAqIDEwMAogICAgdml4ID0gdml4Lm1lYW4oKQogICAgcmV0dXJuIHZpeAoKCmRlZiB0cmFkZWRfdmFsdWUoc3ltYm9sLCBzdGFydF9kYXRlLCBlbmRfZGF0ZSk6CiAgICAiIiIKICAgIFJldHVybnMgYXZlcmFnZSB0cmFkZSB2YWx1ZSBmb3IgYSBzdG9jayBpbiBnaXZlbiBkYXRlIHJhbmdlCiAgICAiIiIKICAgIGRhdGEgPSBnZXRfZnJhbWVfZGF0YShzeW1ib2wsIHN0YXJ0X2RhdGUsIGVuZF9kYXRlKQogICAgdmFsdWUgPSAoZGF0YVsiVm9sdW1lIl0gKiBkYXRhWyJDbG9zZSJdKS5tZWFuKCkKICAgIHJldHVybiB2YWx1ZQoKCmRlZiBwcmljZV9tb3ZlbWVudChzeW1ib2wsIHN0YXJ0X2RhdGUsIGVuZF9kYXRlKToKICAgICIiIgogICAgUmV0dXJucyBwZXJjZW50YWdlIHByaWNlIGNoYW5nZXMgZm9yIGEgc3RvY2sgaW4gZ2l2ZW4gZGF0ZSByYW5nZQogICAgIiIiCiAgICBkYXRhID0gZ2V0X2ZyYW1lX2RhdGEoc3ltYm9sLCBzdGFydF9kYXRlLCBlbmRfZGF0ZSkKICAgIHByaWNlX2NoYW5nZSA9ICgoZGF0YVsiQ2xvc2UiXSAtIGRhdGFbIkNsb3NlIl0uc2hpZnQoMSkpIC8gZGF0YVsiQ2xvc2UiXS5zaGlmdCgxKSkgKiAxMDAKICAgIHByaWNlX2NoYW5nZSA9IHJvdW5kKHByaWNlX2NoYW5nZS5maWxsbmEodmFsdWU9MCksIDIpCiAgICByZXR1cm4gcHJpY2VfY2hhbmdlCgoKY2xhc3MgRmlsdGVyOgogICAgIiIiCiAgICBGaWx0ZXIgY2xhc3MgdGFrZXMgc3ltYm9sICxzdGFydCBkYXRlIGFuZCBlbmQgZGF0ZSBhcyBwYXJhbWV0ZXJzCiAgICBhbmQgZ2V0IGRhdGEgZm9yIHRoYXQgcGFyYW1ldGVycyBhbmQgZGVyaXZlcyBwcmljZSAsdm9sdW1lIGRhdGEgZnJvbSBpdAogICAgaWYgZGF0YSByZXR1cm5lZCBzdWNjZXNzZnVsbHkKICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzeW1ib2wsIHN0YXJ0X2RhdGUsIGVuZF9kYXRlKToKCiAgICAgICAgc2VsZi5zeW1ib2wgPSBzeW1ib2wKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYuZGF0YSwgc2VsZi5kYXlfZGF0YSwgc2VsZi5wcmV2X2RheV9kYXRhID0gZ2V0X2RhdGEoc2VsZi5zeW1ib2wsIHN0YXJ0X2RhdGUsIGVuZF9kYXRlKQogICAgICAgICAgICBzZWxmLmF2Z192b2wgPSBzZWxmLmRhdGFbIlZvbHVtZSJdLm1lYW4oKQogICAgICAgICAgICBzZWxmLmRheV92b2wgPSBzZWxmLmRheV9kYXRhWyJWb2x1bWUiXQogICAgICAgICAgICBzZWxmLmRheV9jbG9zZSA9IHNlbGYuZGF5X2RhdGFbIkNsb3NlIl0KICAgICAgICAgICAgc2VsZi5kYXlfaGlnaCA9IHNlbGYuZGF5X2RhdGFbIkhpZ2giXQogICAgICAgICAgICBzZWxmLmRheV9sb3cgPSBzZWxmLmRheV9kYXRhWyJMb3ciXQogICAgICAgICAgICBzZWxmLnByZXZfY2xvc2UgPSBzZWxmLnByZXZfZGF5X2RhdGFbIkNsb3NlIl0KCiAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgcGFzcwoKICAgIGRlZiBmaWx0ZXJfYnlfdm9sdW1lKHNlbGYsIG11bHRpcGxpZXIpOgogICAgICAgICIiIgogICAgICAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgbXVsdGlwbGllciBhcyBhcmd1bWVudAogICAgICAgIGFuZCBpdCB3aWxsIGJlIHVzZWQgdG8gY29tcGFyZSBpZiBkYXkgdm9sdW1lIHdpdGggYXZlcmFnZSB2b2x1bWUgbXVsdGlwbGllZCBieSBtdWx0aXBsaWVyCiAgICAgICAgZm9yIGV4YW1wbGUgaWYgbXVsdGlwbGllciBpcyAyIHRoZW4gZnVuY3Rpb24gcmV0dXJuIHRydWUgaWYgZGF5IHZvbHVtZSBpcyBkb3VibGUgb3IgbW9yZQogICAgICAgIHRoYW4gZG91YmxlIGluIGNvbXBhcmlzb24gdG8gYXZlcmFnZSB2b2x1bWUKICAgICAgICAiIiIKICAgICAgICB0cnk6CiAgICAgICAgICAgIGlmIHNlbGYuZGF5X3ZvbCA+PSBzZWxmLmF2Z192b2wgKiBtdWx0aXBsaWVyOgogICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKCiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIGRlZiBmaWx0ZXJfYnlfdmFsdWUoc2VsZiwgdmFsdWUpOgogICAgICAgICIiIgogICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayBpZiB0dXJub3ZlciBmb3IgYSBkYXkgaXMgbW9yZSB0aGFuIGdpdmVuIHZhbHVlCiAgICAgICAgIiIiCiAgICAgICAgdHJ5OgogICAgICAgICAgICB0dXJub3ZlciA9IHNlbGYuZGF5X2Nsb3NlICogc2VsZi5kYXlfdm9sCiAgICAgICAgICAgIGlmIHR1cm5vdmVyID49IHZhbHVlOgogICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKCiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIGRlZiBmaWx0ZXJfYnlfdm9sYXRpbGl0eShzZWxmLCBkYXlfdml4KToKICAgICAgICAiIiIKICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hlY2sgaWYgdm9sYXRpbGl0eSBmb3IgZGF5IGlzIG1vcmUgdGhhbiB2b2xhdGlsaXR5IHByb3ZpZGVkIGluIGFyZ3VtZW50CiAgICAgICAgIiIiCiAgICAgICAgdHJ5OgogICAgICAgICAgICB2aXggPSAoKHNlbGYuZGF5X2hpZ2ggLSBzZWxmLmRheV9sb3cpIC8gc2VsZi5kYXlfbG93KSAqIDEwMAogICAgICAgICAgICBpZiB2aXggPj0gZGF5X3ZpeDoKICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBkZWYgZmlsdGVyX2J5X3ByaWNlX2NoYW5nZShzZWxmLCBwcmljZV9jaGFuZ2UpOgogICAgICAgICIiIgogICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayBpZiBwZXJjZW50YWdlIHByaWNlIGNoYW5nZSBpcyBtb3JlIHRoYW4gZ2l2ZW4gcHJpY2UgY2hhbmdlIGluIGFyZ3VtZW50CiAgICAgICAgIiIiCiAgICAgICAgdHJ5OgogICAgICAgICAgICBwcmljZV9jaGFuZ2VfcGVyYyA9ICgoc2VsZi5kYXlfY2xvc2UgLSBzZWxmLnByZXZfY2xvc2UpIC8gc2VsZi5wcmV2X2Nsb3NlKSAqIDEwMAogICAgICAgICAgICBpZiBhYnMocHJpY2VfY2hhbmdlX3BlcmMpID49IHByaWNlX2NoYW5nZToKICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCjx8ZmltX2hvbGV8PgogICAgaXQgd2lsbCBiZSB1c2VkIHRvIGRlZmluZSB2YXJpb3VzIGZpbHRlciBsYXllcnMgdGhyb3VnaCB3aGljaCBkYXRhIHdlIGdldCBpbiBGaWx0ZXIgY2xhc3Mgd2lsbCBwYXNzCiAgICBhbmQgd2lsbCByZXR1cm4gZmlsdGVyZWQgIGRhdGEgaWYgaXQgcGFzcyBzdWNjZXNzZnVsbHkgZnJvbSBhbGwgY29uZGl0aW9uYWxzIGZ1bmN0aW9ucwogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHN5bWJvbCwgc3RhcnRfZGF0ZSwgZW5kX2RhdGUpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oc3ltYm9sLCBzdGFydF9kYXRlLCBlbmRfZGF0ZSkKCiAgICBkZWYgbGF5ZXJfMShzZWxmKToKICAgICAgICAiIiIKICAgICAgICBSZXR1cm5zIGRhdGEgaWYgaXQgcGFzc2VzIGdpdmVuIGNoYWluZWQgY29uZGl0aW9ucwogICAgICAgICIiIgogICAgICAgIGlmIHNlbGYuZmlsdGVyX2J5X3ZvbHVtZShtdWx0aXBsaWVyPTIpIGFuZCBzZWxmLmZpbHRlcl9ieV92b2xhdGlsaXR5KGRheV92aXg9MykgYW5kIHNlbGYuZmlsdGVyX2J5X3ZhbHVlKAogICAgICAgICAgICAgICAgdmFsdWU9MmU5KToKICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGF0YQoKICAgIGRlZiBsYXllcl8yKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFJldHVybnMgZGF0YSBpZiBpdCBwYXNzZXMgZ2l2ZW4gbmVzdGVkIGNoYWluZWQgY29uZGl0aW9ucwogICAgICAgICIiIgogICAgICAgIGlmIHNlbGYuZmlsdGVyX2J5X3ZhbHVlKHZhbHVlPTJlOCk6CiAgICAgICAgICAgIGlmIHNlbGYuZmlsdGVyX2J5X3ZhbHVlKHZhbHVlPTVlOSk6CiAgICAgICAgICAgICAgICBpZiBzZWxmLmZpbHRlcl9ieV92b2x1bWUobXVsdGlwbGllcj0xLjUpIGFuZCBzZWxmLmZpbHRlcl9ieV92b2xhdGlsaXR5KGRheV92aXg9Mi41KToKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5kYXRhCiAgICAgICAgICAgIGVsaWYgc2VsZi5maWx0ZXJfYnlfdmFsdWUoMWU5KToKICAgICAgICAgICAgICAgIGlmIHNlbGYuZmlsdGVyX2J5X3ZvbHVtZShtdWx0aXBsaWVyPTIpIGFuZCBzZWxmLmZpbHRlcl9ieV92b2xhdGlsaXR5KGRheV92aXg9My4zMyk6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGF0YQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgaWYgc2VsZi5maWx0ZXJfYnlfdm9sdW1lKG11bHRpcGxpZXI9Mi41KSBhbmQgc2VsZi5maWx0ZXJfYnlfdm9sYXRpbGl0eShkYXlfdml4PTQpOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmRhdGEKPHxmaW1fc3VmZml4fD4KCmNsYXNzIExheWVycyhGaWx0ZXIpOgogICAgIiIiCiAgICBMYXllcnMgY2xhc3MgaW5oZXJpdGVkIGZyb20gRmlsdGVyIGNsYXNzCjx8ZmltX2VuZHw+"]
["ab686f15c91125148b5e99dff9db181d74839b44-1","ab686f15c91125148b5e99dff9db181d74839b44","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAucGRhcnJheSBpbXBvcnQgUERBcnJheQo8fGZpbV9lbmR8Pg=="]
["9b7c2452a636847772a87742d23b8d9b598de899-2","9b7c2452a636847772a87742d23b8d9b598de899","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmltcG9ydCBvcwoKYmFzZWRpciA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQoKCmNsYXNzIENvbmZpZzoKICAgIFNFQ1JFVF9LRVkgPSBvcy5lbnZpcm9uLmdldCgnU0VDUkVUX0tFWScpIG9yICdoYXJkIHRvIGd1ZXNzIHN0cmluZycKICAgIFNRTEFMQ0hFTVlfQ09NTUlUX09OX1RFQVJET1dOID0gVHJ1ZQogICAgRkxBU0tZX01BSUxfU1VCSkVDVF9QUkVGSVggPSAnW0ZsYXNreV0nCiAgICBGTEFTS1lfTUFJTF9TRU5ERVIgPSAnRmxhc2t5IEFkbWluIDxmbGFza3lAZXhhbXBsZS5jb20+JwogICAgRkxBU0tZX0FETUlOID0gb3MuZW52aXJvbi5nZXQoJ0ZMQVNLWV9BRE1JTicpCgogICAgRE9XTkxPQURfUEFUSCA9ICdkb3dubG9hZCcKICAgIEVUSF9TRUNSRVRfS0VZID0gJ1Ehd2VydDEyM0AnCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGluaXRfYXBwKGFwcCk6CiAgICAgICAgcGFzcwoKCmNsYXNzIERldmVsb3BtZW50Q29uZmlnKENvbmZpZyk6CiAgICBERUJVRyA9IFRydWUKCiAgICBNQUlMX1NFUlZFUiA9ICdzbXRwLmdvb2dsZW1haWwuY29tJwogICAgTUFJTF9QT1JUID0gNTg3CiAgICBNQUlMX1VTRV9UTFMgPSBUcnVlCiAgICBNQUlMX1VTRVJOQU1FID0gb3MuZW52aXJvbi5nZXQoJ01BSUxfVVNFUk5BTUUnKQogICAgTUFJTF9QQVNTV09SRCA9IG9zLmVudmlyb24uZ2V0KCdNQUlMX1BBU1NXT1JEJykKICAgIE1PTkdPX0hPU1QgPSAnbG9jYWxob3N0JwogICAgTU9OR09fUE9SVCA9IDI3MDE3CiAgICBNT05HT19OQU1FID0gJ2NoYWluZGInCiAgICBNT05HT19VU0VSID0gJ2NoYWluZGJfdXNlcicKICAgIE1PTkdPX1BBU1MgPSAneXFyLjEwMTAnCiAgICBFVEhfU0VDUkVUX0tFWSA9ICdRIXdlcnQxMjNAJwogICAgRVRIX1VSTCA9ICcxMjcuMC4wLjEnCiAgICBFVEhfUE9SVCA9IDU1NDQKICAgIEVUSF9GRUUgPSAwLjAwMgogICAgRVRIX01pbmltdW0gPSAwLjUKICAgIFZJTl9TSVpFID0gMTYwMAogICAgVk9VVF9TSVpFID0gODAKICAgIEJUQ19IT1NUID0gJ2J0Y193YWxsZXQnCiAgICBCVENfUE9SVCA9IDYwMDExCiAgICBCVENfQ09MTEVDVF9IT1NUID0gJ2xvY2FsaG9zdCcKICAgIEJUQ19DT0xMRUNUX1BPUlQgPSA1NDQ0CiAgICBCVENfRkVFID0wLjAwMQogICAgQlRDX1BFUl9GRUUgPSAwLjAwMDEKICAgIEVUUF9QT1JUID0gODgyMAogICAgRVRQX1VSTCA9ICdldHBfd2FsbGV0JwogICAgTFRDX0hPU1QgPSAnbHRjX3dhbGxldCcKPHxmaW1faG9sZXw+CiAgICBMVENfUEVSX0ZFRSA9IDAuMDAwMDUKICAgIERPR0VfSE9TVD0iZG9nZV93YWxsZXQiCiAgICBET0dFX1BPUlQ9NjAwMjAKICAgIERPR0VfRkVFPTQKICAgIERPR0VfUEVSX0ZFRT0xCiAgICBET0dFX0NPTExFQ1RfSE9TVCA9ICdsb2NhbGhvc3QnCiAgICBET0dFX0NPTExFQ1RfUE9SVCA9IDU0NTQKICAgIFVTRFRfSE9TVD0idXNkdF93YWxsZXQiCiAgICBVU0RUX1BPUlQgPSA2MDAxMwogICAgVVNEVF9DT0xMRUNUX0hPU1QgPSAnbG9jYWxob3N0JwogICAgVVNEVF9DT0xMRUNUX1BPUlQgPSA1NDQ0CiAgICBVU0RUX0ZFRSA9IDAuMDAxCiAgICBVU0RUX1BFUl9GRUUgPSAwLjAwMDA1CiAgICBVU0RUX1BST1BFUlRZSUQgPSAzMQoKICAgICMgUVVFUllfU0VSVklDRV9IT1NUID0gIjE5Mi4xNjguMS4xNDIiCiAgICAjIFFVRVJZX1NFUlZJQ0VfUE9SVCA9IDU0NDQKCiAgICBTVVBQT1JUX01JRFdBUkVfUExVR0lOX1NZTUJPTD1bIkVUSCIsIkJUQyIsIkxUQyIsIkVSQ1VTRFQiLCJET0dFIl0KICAgIFdISVRFX0xJU1RfU0VOQVRPUl9JRCA9IFtdCiAgICBXSElURV9MSVNUX0ZJTEVfUEFUSCA9ICIvaHgvY3Jvc3NjaGFpbl9taWR3YXJlL2NvbmZpZy93aGl0ZV9saXN0X2lkcy5qc29uIgoKCmNsYXNzIERhQ29uZmlnKENvbmZpZyk6CiAgICBERUJVRyA9IFRydWUKICAgIE1BSUxfU0VSVkVSID0gJ3NtdHAuZ29vZ2xlbWFpbC5jb20nCiAgICBNQUlMX1BPUlQgPSA1ODcKICAgIE1BSUxfVVNFX1RMUyA9IFRydWUKICAgIE1BSUxfVVNFUk5BTUUgPSBvcy5lbnZpcm9uLmdldCgnTUFJTF9VU0VSTkFNRScpCiAgICBNQUlMX1BBU1NXT1JEID0gb3MuZW52aXJvbi5nZXQoJ01BSUxfUEFTU1dPUkQnKQogICAgTU9OR09fVVNFUiA9ICdjaGFpbmRiX3VzZXInCiAgICBCVENfSE9TVCA9ICcxOTIuMTY4LjEuMTI0JwogICAgQlRDX1BPUlQgPSA2MDAxMQogICAgQlRDX0ZFRSA9IDAuMDAxCiAgICBNT05HT19IT1NUID0gJzEyNy4wLjAuMScKICAgIE1PTkdPX1BPUlQgPSAyNzAxNwogICAgTU9OR09fUEFTUyA9ICd5cXIuMTAxMCcKICAgIE1PTkdPX05BTUUgPSAnY2hhaW5kYicKICAgIEhDX0hPU1QgPSAiMTI3LjAuMC4xIgogICAgSENfUE9SVCA9IDE5MDEyCiAgICBIQ19GRUUgPSAwLjAwMQoKCgoKCmNsYXNzIFRlc3RpbmdDb25maWcoQ29uZmlnKToKICAgIFRFU1RJTkcgPSBUcnVlCiAgICBNT05HT19IT1NUID0gJ2NoYWluZGInCiAgICBNT05HT19QT1JUID0gMjcwMTcKICAgIE1PTkdPX05BTUUgPSAnY2hhaW5kYicKCgpjbGFzcyBQcm9kdWN0aW9uQ29uZmlnKENvbmZpZyk6CiAgICBNT05HT19IT1NUID0gJ2NoYWluZGInCiAgICBNT05HT19QT1JUID0gMjcwMTcKICAgIE1PTkdPX05BTUUgPSAnY2hhaW5kYicKCgoKY29uZmlnID0gewogICAgJ2RldmVsb3BtZW50JzogRGV2ZWxvcG1lbnRDb25maWcsCiAgICAndGVzdGluZyc6IFRlc3RpbmdDb25maWcsCiAgICAncHJvZHVjdGlvbic6IFByb2R1Y3Rpb25Db25maWcsCiAgICAnZGVmYXVsdCc6IERldmVsb3BtZW50Q29uZmlnLAp9Cjx8ZmltX3N1ZmZpeHw+CiAgICBMVENfUE9SVCA9IDYwMDEyCiAgICBMVENfQ09MTEVDVF9IT1NUID0gJ2xvY2FsaG9zdCcKICAgIExUQ19DT0xMRUNUX1BPUlQgPSA1NDQ1CiAgICBMVENfRkVFID0wLjAwMQo8fGZpbV9lbmR8Pg=="]
["fd4a0e83b4e92da4f5e5cf5fe48867d242a4f716-3","fd4a0e83b4e92da4f5e5cf5fe48867d242a4f716","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHJpeApmcm9tIG1pc2MgaW1wb3J0IGFwcGx5R3JhZGllbnRzLCBkcm9wb3V0CgpjbGFzcyBGdWxseUNvbm5lY3RlZDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3ZWlnaHRfc2V0LCBiaWFzX3NldCwgYWN0aXZhdGlvbl9mdW5jLCBkcm9wb3V0X3JhdGU9MCk6CiAgICAgICAgc2VsZi53ZWlnaHRzID0gd2VpZ2h0X3NldAogICAgICAgIHNlbGYuYmlhcyA9IGJpYXNfc2V0CiAgICAgICAgc2VsZi5hY3RpdmF0aW9uX2Z1bmMgPSBhY3RpdmF0aW9uX2Z1bmMKICAgICAgICBzZWxmLmRyb3BvdXRfcmF0ZSA9IGRyb3BvdXRfcmF0ZQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYucFdlaWdodHMgPSBtYXRyaXguTWF0cml4KGRpbXM9d2VpZ2h0X3NldC5zaXplKCksIGluaXQ9bGFtYmRhOiAwKQogICAgICAgIHNlbGYucEJpYXMgPSBtYXRyaXguTWF0cml4KGRpbXM9Ymlhc19zZXQuc2l6ZSgpLCBpbml0PWxhbWJkYTogMCkKICAgICAgICBzZWxmLnJtc1dlaWdodHMgPSBtYXRyaXguTWF0cml4KGRpbXM9d2VpZ2h0X3NldC5zaXplKCksIGluaXQ9bGFtYmRhOiAwKQogICAgICAgIHNlbGYucm1zQmlhcyA9IG1hdHJpeC5NYXRyaXgoZGltcz1iaWFzX3NldC5zaXplKCksIGluaXQ9bGFtYmRhOiAwKQo8fGZpbV9lbmR8Pg=="]
["f976ec53b597e54ae798da4e1d6cbbe7e739ecfd-4","f976ec53b597e54ae798da4e1d6cbbe7e739ecfd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmZyb20gZGF5MjIuZGF5MjIgaW1wb3J0IERheTIyCgoKY2xhc3MgRGF5MjJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CiAgICAgICAgY2xzLmdyaWQgPSBbCiAgICAgICAgICAgICcuLiMnLAogICAgICAgICAgICAnIy4uJywKICAgICAgICAgICAgJy4uLicsCiAgICAgICAgXQoKICAgIGRlZiB0ZXN0X3BhcnRfb25lKHNlbGYpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBEYXkyMignXG4nLmpvaW4oc2VsZi5ncmlkKSwgNykuc29sdmVfcGFydF9vbmUoKSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQxLCBEYXkyMignXG4nLmpvaW4oc2VsZi5ncmlkKSwgNzApLnNvbHZlX3BhcnRfb25lKCkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg1NTg3LCBEYXkyMignXG4nLmpvaW4oc2VsZi5ncmlkKSkuc29sdmVfcGFydF9vbmUoKSkKCjx8ZmltX2VuZHw+"]
["6c41e9b0b3fb46689706dca9e62dc88df255b209-1","6c41e9b0b3fb46689706dca9e62dc88df255b209","PHxmaW1fcHJlZml4fD4KZnJvbSBweWRhc2ggaW1wb3J0ICgKICAgIGdldCwKICAgIHNldF8pCmZyb20gcmUgaW1wb3J0IHN1YgoKCmNsYXNzIFJlc3VsdChkaWN0KToKICAgIGRlZiBfX2luaXRfXygKICAgICAgICAgICAgc2VsZiwKICAgICAgICAgICAgZGF0YV90eXBlX25hbWUsCiAgICAgICAgICAgIHJlc3VsdF9uYW1lLAogICAgICAgICAgICByZXN1bHQsCiAgICAgICAgICAgIG9wdGlvbnNfcGF0aCwKICAgICAgICAgICAgb3B0aW9ucywKICAgICAgICAgICAgY2xpZW50KToKICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiByZXN1bHQuaXRlbXMoKToKICAgICAgICAgICAgaWYgb3B0aW9uc19wYXRoID09ICcnOgogICAgICAgICAgICAgICAgbmV4dF9vcHRpb25zX3BhdGggPSAnLicuam9pbihbJ2luY2x1ZGUnLCBrZXldKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbmV4dF9vcHRpb25zX3BhdGggPSAnLicuam9pbihbb3B0aW9uc19wYXRoLCAnaW5jbHVkZScsIGtleV0pCgogICAgICAgICAgICBpZiB0eXBlKHZhbHVlKSBpcyBkaWN0OgogICAgICAgICAgICAgICAgaWYgZ2V0KHZhbHVlLCAnZWRnZXMnKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAjIFdyYXAgYSBjb2xsZWN0aW9uIGluIGEgQ29sbGVjdGlvblJlc3VsdCB0byBnaXZlIGl0CiAgICAgICAgICAgICAgICAgICAgIyBwYWdpbmF0aW9uIGhlbHBlcnMuCiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBDb2xsZWN0aW9uUmVzdWx0KAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3R5cGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICBuZXh0X29wdGlvbnNfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50KQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAjIE90aGVyd2lzZSB0cmF2ZXJzZSBlYWNoIGZpZWxkIGluIHRoZSByZXN1bHQgYW5kCiAgICAgICAgICAgICAgICAgICAgIyByZWN1cnNpdmVseSB3cmFwIGFueSB0aGF0IGFyZSBjb2xsZWN0aW9ucy4KICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IFJlc3VsdCgKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90eXBlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9vcHRpb25zX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWUKCiAgICAgICAgZGljdC5fX2luaXRfXyhzZWxmLCByZXN1bHQpCgogICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgogICAgICAgIHJldHVybiBzZWxmW2F0dHJdCgogICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIGF0dHIsIHZhbHVlKToKICAgICAgICBzZWxmW2F0dHJdID0gdmFsdWUKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgYnVpbGQoZGF0YV90eXBlX25hbWUsIHJlc3VsdF9uYW1lLCByZXN1bHQsIG9wdGlvbnMsIGNsaWVudCk6CiAgICAgICAgcmVzdWx0ID0gUmVzdWx0KAogICAgICAgICAgICBkYXRhX3R5cGVfbmFtZSwKICAgICAgICAgICAgcmVzdWx0X25hbWUsCiAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgJycsCiAgICAgICAgICAgIHsnaW5jbHVkZSc6IHtyZXN1bHRfbmFtZTogb3B0aW9uc319LAogICAgICAgICAgICBjbGllbnQpCgogICAgICAgIHJldHVybiByZXN1bHRbcmVzdWx0X25hbWVdCgoKY2xhc3MgQ29sbGVjdGlvblJlc3VsdDoKICAgIGRlZiBfX2luaXRfXygKICAgICAgICAgICAgc2VsZiwKICAgICAgICAgICAgZGF0YV90eXBlX25hbWUsCiAgICAgICAgICAgIHJlc3VsdF9uYW1lLAogICAgICAgICAgICByZXN1bHQsCiAgICAgICAgICAgIHJlc3VsdF9wYXRoLAogICAgICAgICAgICBvcHRpb25zLAogICAgICAgICAgICBjbGllbnQpOgogICAgICAgIHNlbGYuX19jbGllbnQgPSBjbGllbnQKICAgICAgICBzZWxmLl9fZGF0YV90eXBlX25hbWUgPSBkYXRhX3R5cGVfbmFtZQogICAgICAgIHNlbGYuX19vcHRpb25zID0gb3B0aW9ucwogICAgICAgIHNlbGYuX19yZXN1bHRfcGF0aCA9IHJlc3VsdF9wYXRoCiAgICAgICAgc2VsZi5fX3BhZ2VfaW5mbyA9IHJlc3VsdFsncGFnZUluZm8nXQogICAgICAgIHNlbGYuX19yZXN1bHRfbmFtZSA9IHJlc3VsdF9uYW1lCgogICAgICAgIHNlbGYudG90YWxfY291bnQgPSByZXN1bHRbJ3RvdGFsQ291bnQnXQogICAgICAgIHNlbGYuaGFzX3ByZXZpb3VzX3BhZ2UgPSByZXN1bHRbJ3BhZ2VJbmZvJ11bJ2hhc1ByZXZpb3VzUGFnZSddCiAgICAgICAgc2VsZi5oYXNfbmV4dF9wYWdlID0gcmVzdWx0WydwYWdlSW5mbyddWydoYXNOZXh0UGFnZSddCiAgICAgICAgc2VsZi5kYXRhID0gW10KICAgICAgICBmb3IgaW5kZXgsIGVkZ2UgaW4gZW51bWVyYXRlKHJlc3VsdFsnZWRnZXMnXSk6CiAgICAgICAgICAgIHNlbGYuZGF0YS5hcHBlbmQoCiAgICAgICAgICAgICAgICBSZXN1bHQoCiAgICAgICAgICAgICAgICAgICAgZGF0YV90eXBlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgcmVzdWx0X25hbWUsCiAgICAgICAgICAgICAgICAgICAgZWRnZVsnbm9kZSddLAogICAgICAgICAgICAgICAgICAgIHJlc3VsdF9wYXRoICsgZidbe2luZGV4fV0nLAogICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgY2xpZW50KSkKCiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICB0b3RhbF9jb3VudF9zdHIgPSBmJ1wndG90YWxfY291bnRcJzoge3N0cihzZWxmLnRvdGFsX2NvdW50KX0nCiAgICAgICAgaGFzX3ByZXZpb3VzX3BhZ2Vfc3RyID0gXAogICAgICAgICAgICBmJ1wnaGFzX3ByZXZpb3VzX3BhZ2VcJzoge3N0cihzZWxmLmhhc19wcmV2aW91c19wYWdlKX0nCiAgICAgICAgaGFzX25leHRfcGFnZV9zdHIgPSBmJ1wnaGFzX25leHRfcGFnZVwnOiB7c3RyKHNlbGYuaGFzX25leHRfcGFnZSl9JwogICAgICAgIGRhdGFfc3RyID0gZidcJ2RhdGFcJzoge3N0cihzZWxmLmRhdGEpfScKCiAgICAgICAgcHJvcGVydGllc19zdHIgPSAnLCAnLmpvaW4oWwogICAgICAgICAgICB0b3RhbF9jb3VudF9zdHIsCiAgICAgICAgICAgIGhhc19wcmV2aW91c19wYWdlX3N0ciwKICAgICAgICAgICAgaGFzX25leHRfcGFnZV9zdHIsCiAgICAgICAgICAgIGRhdGFfc3RyXSkKCiAgICAgICAgcmV0dXJuIGYne3t7cHJvcGVydGllc19zdHJ9fX0nCgogICAgZGVmIF9fb3B0aW9uc19wYXRoKHNlbGYpOgogICAgICAgIHJldHVybiBzdWIoJ1xbWzAtOV0rXF0nLCAnJywgc2VsZi5fX3Jlc3VsdF9wYXRoKQoKICAgIGRlZiBfX3BhZ2VfcGF0aChzZWxmKToKICAgICAgICB1bndyYXBwZWRfcGF0aCA9IHN1YigKICAgICAgICAgICAgJ15pbmNsdWRlXC4nICsgc2VsZi5fX3Jlc3VsdF9uYW1lLAogICAgICAgICAgICAnJywKICAgICAgICAgICAgc2VsZi5fX3Jlc3VsdF9wYXRoKQogICAgICAgIHJldHVybiB1bndyYXBwZWRfcGF0aC5yZXBsYWNlKCdpbmNsdWRlLicsICcnKS5yZXBsYWNlKCdbJywgJ2RhdGFbJykKCjx8ZmltX2hvbGV8PgogICAgICAgICMgcmVzdWx0LgogICAgICAgIGNsaWVudF9vcHRpb25zID0gc2VsZi5fX29wdGlvbnMKICAgICAgICBzZXRfKGNsaWVudF9vcHRpb25zLCBzZWxmLl9fb3B0aW9uc19wYXRoKCksIHBhZ2VkX29wdGlvbnMpCiAgICAgICAgY2xpZW50X29wdGlvbnMgPSBnZXQoCiAgICAgICAgICAgIGNsaWVudF9vcHRpb25zLAogICAgICAgICAgICBmJ2luY2x1ZGUue3NlbGYuX19yZXN1bHRfbmFtZX0nKQoKICAgICAgICAjIFJlLXJ1biB0aGUgZXF1aXZhbGVudCBxdWVyeSB0aGF0IHByb2R1Y2VkIHRoaXMgcGFnZSBvcmlnaW5hbGx5IHdpdGgKICAgICAgICAjIHRoZSBuZXcgb3B0aW9ucy4KICAgICAgICByZXN1bHQgPSBzZWxmLl9fY2xpZW50KAogICAgICAgICAgICBzZWxmLl9fZGF0YV90eXBlX25hbWUsCiAgICAgICAgICAgIGNsaWVudF9vcHRpb25zKQoKICAgICAgICAjIERldGVybWluZSB3aGVyZSBpbiB0aGUgcmVzdWx0IHRoZSBwYWdlIGlzIHJldHVybmVkIGFuZCBob2lzdCBpdCB1cCB0bwogICAgICAgICMgcmV0dXJuIGl0IGJhY2suCiAgICAgICAgcGFnZV9wYXRoID0gc2VsZi5fX3BhZ2VfcGF0aCgpCiAgICAgICAgaWYgcGFnZV9wYXRoID09ICcnOgogICAgICAgICAgICByZXR1cm4gcmVzdWx0CiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIGdldChyZXN1bHQsIHBhZ2VfcGF0aCkKCiAgICBkZWYgcHJldmlvdXNfcGFnZShzZWxmKToKICAgICAgICBpZiBub3Qgc2VsZi5fX3BhZ2VfaW5mb1snaGFzUHJldmlvdXNQYWdlJ106CiAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyBGZXRjaCB0aGUgb3B0aW9ucyB0aGF0IGFwcGxpZWQgdG8gdGhpcyBjb2xsZWN0aW9uLCByZW1vdmUgdGhlCiAgICAgICAgICAgICMgJ2FmdGVyJyBwYXJhbWV0ZXIgaWYgaXQgZXhpc3RzIGFuZCBzZXQgdGhlICdiZWZvcmUnIHBhcmFtZXRlciB0bwogICAgICAgICAgICAjIHRoZSBzdGFydCBjdXJzb3Igb2YgdGhlIGN1cnJlbnQgcGFnZS4KICAgICAgICAgICAgb3B0aW9ucyA9IGdldChzZWxmLl9fb3B0aW9ucywgc2VsZi5fX29wdGlvbnNfcGF0aCgpKQogICAgICAgICAgICBvcHRpb25zLnBvcCgnYWZ0ZXInLCBOb25lKQogICAgICAgICAgICBvcHRpb25zWydiZWZvcmUnXSA9IHNlbGYuX19wYWdlX2luZm9bJ3N0YXJ0Q3Vyc29yJ10KCiAgICAgICAgICAgIHJldHVybiBzZWxmLl9fcGFnZShvcHRpb25zKQoKICAgIGRlZiBuZXh0X3BhZ2Uoc2VsZik6CiAgICAgICAgaWYgbm90IHNlbGYuX19wYWdlX2luZm9bJ2hhc05leHRQYWdlJ106CiAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyBGZXRjaCB0aGUgb3B0aW9ucyB0aGF0IGFwcGxpZWQgdG8gdGhpcyBjb2xsZWN0aW9uLCByZW1vdmUgdGhlCiAgICAgICAgICAgICMgJ2JlZm9yZScgcGFyYW1ldGVyIGlmIGl0IGV4aXN0cyBhbmQgc2V0IHRoZSAnYWZ0ZXInIHBhcmFtZXRlciB0bwogICAgICAgICAgICAjIHRoZSBlbmQgY3Vyc29yIG9mIHRoZSBjdXJyZW50IHBhZ2UuCiAgICAgICAgICAgIG9wdGlvbnMgPSBnZXQoc2VsZi5fX29wdGlvbnMsIHNlbGYuX19vcHRpb25zX3BhdGgoKSkKICAgICAgICAgICAgb3B0aW9ucy5wb3AoJ2JlZm9yZScsIE5vbmUpCiAgICAgICAgICAgIG9wdGlvbnNbJ2FmdGVyJ10gPSBzZWxmLl9fcGFnZV9pbmZvWydlbmRDdXJzb3InXQoKICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19wYWdlKG9wdGlvbnMpCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgX19wYWdlKHNlbGYsIHBhZ2VkX29wdGlvbnMpOgogICAgICAgICMgT3ZlcndyaXRlIHRoZSBvcHRpb25zIHRoYXQgYXBwbGllZCB0byB0aGlzIGNvbGxlY3Rpb24gd2l0aCB0aGUgbmV3CiAgICAgICAgIyBvcHRpb25zIGFuZCB0aGVuIHVud3JhcCB0aGVzZSB0byByZW1vdmUgdGhlIGFydGlmaWNpYWwKICAgICAgICAjICdpbmNsdWRlJzogeyBkYXRhX3R5cGVfbmFtZTogLi4uIH0gdGhhdCB3ZSBhZGRlZCB3aGVuIGJ1aWxkaW5nIHRoZQo8fGZpbV9lbmR8Pg=="]
["a543435852ae9c3bf97359457ae24aafc15d4d16-4","a543435852ae9c3bf97359457ae24aafc15d4d16","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1heWEuY21kcyBhcyBjbWRzCmltcG9ydCBvcwo8fGZpbV9ob2xlfD4KICAgIGN1cnJlbnRQcm9qID0gZ2V0Q3VycmVudFByb2plY3QoKQogICAgc3R1ZGVudEZpbGVzID0gY2hlY2tNYXlhRmlsZXMoY3VycmVudFByb2opCiAgICBxdWlldEZpbGVzKHN0dWRlbnRGaWxlcykKICAgIAoKZGVmIGdldEN1cnJlbnRQcm9qZWN0KCk6CiAgICBjdXJyZW50UHJvaiA9IGNtZHMud29ya3NwYWNlKCBxPVRydWUsIHJvb3REaXJlY3Rvcnk9VHJ1ZSApCiAgICByZXR1cm4oY3VycmVudFByb2opCgpkZWYgY2hlY2tNYXlhRmlsZXMoY3VycmVudFByb2opOgogICAgZmlsZUxpc3QgPSBbXQogICAgcHJpbnQoY3VycmVudFByb2opCiAgICBmb3IgciwgZCwgZiBpbiBvcy53YWxrKGN1cnJlbnRQcm9qKToKICAgICAgICBjdXJyZW50ID0gMAogICAgICAgIGZvciBpIGluIGY6CiAgICAgICAgICAgIGlmIGZbY3VycmVudF0uZW5kc3dpdGgoIi5tYSIpOgogICAgICAgICAgICAgICAgdGVtcFZhciA9IHN0cihyKSArICIvIiArIHN0cihmW2N1cnJlbnRdKQogICAgICAgICAgICAgICAgdGVtcFZhciA9IHRlbXBWYXIucmVwbGFjZSgiXFwiLCAiLyIpCiAgICAgICAgICAgICAgICBmaWxlTGlzdC5hcHBlbmQodGVtcFZhcikKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgY3VycmVudCArPSAxCiAgICBwcmludCgiRm91bmQgYSB0b3RhbCBvZiAiICsgc3RyKGxlbihmaWxlTGlzdCkpICsgIiBtYXRjaGVzIikKICAgIHJldHVybihmaWxlTGlzdCkKCmRlZiBxdWlldEZpbGVzKHN0dWRlbnRGaWxlcyk6CiAgICBjdXJyZW50ID0gMAogICAgCiAgICBmb3IgaSBpbiBzdHVkZW50RmlsZXM6CiAgICAgICAgZmlsZVRvT3BlbiA9IHN0dWRlbnRGaWxlc1tjdXJyZW50XQogICAgICAgIAogICAgICAgICMgT3BlbmluZyB0aGUgZmlsZSBhbmQgc3RvcmluZyB0aGUgbGluZXMgaW4gYSBsaXN0CiAgICAgICAgZiA9IG9wZW4oZmlsZVRvT3BlbiwgInIiKQogICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQogICAgICAgIGYuY2xvc2UKICAgICAgICAKICAgICAgICAjIGNoZWNraW5nIGlmIHRoZSAxM3RoIGxpbmUgaXMgc3R1ZGVudCB2ZXJzaW9uCiAgICAgICAgY2hlY2tNZXNzYWdlID0gKCJDaGVja2luZyB0aGUgZmlsZSA6IiArIHN0cihmaWxlVG9PcGVuKSkKICAgICAgICBwcmludChjaGVja01lc3NhZ2UpCiAgICAgICAgbGljZW5zZU1lc3NhZ2UgPSAnZmlsZUluZm8gImxpY2Vuc2UiICJzdHVkZW50IjsnCiAgICAgICAgc3ViY3VycmVudCA9IDAKICAgICAgICBmb3IgaSBpbiBsaW5lczoKICAgICAgICAgICAgaWYgbGluZXNbc3ViY3VycmVudF0uc3RhcnRzd2l0aChsaWNlbnNlTWVzc2FnZSk6CiAgICAgICAgICAgICAgICAjIENoZWNrIHRoZSBsaW5lCiAgICAgICAgICAgICAgICBwcmludCgiU3R1ZGVudFZlcnNpb24gZGV0ZWN0ZWQiKQogICAgICAgICAgICAgICAgZGVsIGxpbmVzW3N1YmN1cnJlbnRdICMgUmVtb3ZlIHRoZSBsaW5lCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgc3ViY3VycmVudCArPSAxCiAgICAgICAgCiAgICAgICAgIyBSZW9wZW4gdGhlIGZpbGUgdG8gd3JpdGUgd2l0aG91dCB0aGUgc3R1ZGVudCBsaW5lCiAgICAgICAgZiA9IG9wZW4oZmlsZVRvT3BlbiwgInciKQogICAgICAgIGYud3JpdGVsaW5lcyhsaW5lcykKICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgICAKICAgICAgICAKICAgICAgICBjdXJyZW50ICs9IDEKICAgIAoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW4oKQo8fGZpbV9zdWZmaXh8PgoKIyMjIyAgICAgICAgVGhlIGdvYWwgb2YgdGhpcyBzY3JpcHQgaXMgdG8gcmVtb3ZlIGFsbCBvZiB0aGUgc3R1ZGVudCBtZXNzYWdlcyBmcm9tIHRoZSByZWZlcmVuY2VzIG9mIGEgcHJvamVjdCAgICAgICAjIyMjCgpkZWYgbWFpbigpOgo8fGZpbV9lbmR8Pg=="]
["666651e3263eb01ab9f54d7eeea91af4c70b3974-2","666651e3263eb01ab9f54d7eeea91af4c70b3974","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDEuMTEgb24gMjAxOC0wNS0wOCAxNTo0NApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKCmltcG9ydCBkamFuZ28uY29yZS52YWxpZGF0b3JzCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ3pjb25uZWN0JywgJzAwMDJfY3JlYXRlX290aGVyX21vZGVscycpLAogICAgXQoKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5GbG9hdEZpZWxkKGJsYW5rPVRydWUsIG51bGw9VHJ1ZSwgdmFsaWRhdG9ycz1bZGphbmdvLmNvcmUudmFsaWRhdG9ycy5NaW5WYWx1ZVZhbGlkYXRvcigtOTAuMCksIGRqYW5nby5jb3JlLnZhbGlkYXRvcnMuTWF4VmFsdWVWYWxpZGF0b3IoOTAuMCldKSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nbG9jYXRpb24nLAogICAgICAgICAgICBuYW1lPSdsb2NhbGl0eScsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5DaGFyRmllbGQoYmxhbms9VHJ1ZSwgbWF4X2xlbmd0aD01MCwgbnVsbD1UcnVlKSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nbG9jYXRpb24nLAogICAgICAgICAgICBuYW1lPSdsb25naXR1ZGUnLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuRmxvYXRGaWVsZChibGFuaz1UcnVlLCBudWxsPVRydWUsIHZhbGlkYXRvcnM9W2RqYW5nby5jb3JlLnZhbGlkYXRvcnMuTWluVmFsdWVWYWxpZGF0b3IoLTE4MC4wKSwgZGphbmdvLmNvcmUudmFsaWRhdG9ycy5NYXhWYWx1ZVZhbGlkYXRvcigxODAuMCldKSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nbG9jYXRpb24nLAogICAgICAgICAgICBuYW1lPSduYW1lJywKICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkNoYXJGaWVsZChibGFuaz1UcnVlLCBtYXhfbGVuZ3RoPTEwMCwgbnVsbD1UcnVlKSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nbG9jYXRpb24nLAogICAgICAgICAgICBuYW1lPSdvcmdhbml6YXRpb24nLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuQ2hhckZpZWxkKGJsYW5rPVRydWUsIG1heF9sZW5ndGg9NTAsIG51bGw9VHJ1ZSksCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J2xvY2F0aW9uJywKICAgICAgICAgICAgbmFtZT0ncG9ib3hubycsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5DaGFyRmllbGQoYmxhbms9VHJ1ZSwgbWF4X2xlbmd0aD01MCwgbnVsbD1UcnVlKSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nbG9jYXRpb24nLAogICAgICAgICAgICBuYW1lPSdzdHJlZXRfYWRkcmVzcycsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5DaGFyRmllbGQoYmxhbms9VHJ1ZSwgbWF4X2xlbmd0aD0xMDAsIG51bGw9VHJ1ZSksCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J2xvY2F0aW9uJywKICAgICAgICAgICAgbmFtZT0ndGltZXpvbmUnLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuQ2hhckZpZWxkKGJsYW5rPVRydWUsIG1heF9sZW5ndGg9NTAsIG51bGw9VHJ1ZSksCiAgICAgICAgKSwKICAgIF0KPHxmaW1fc3VmZml4fD4KICAgIG9wZXJhdGlvbnMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdsb2NhdGlvbicsCiAgICAgICAgICAgIG5hbWU9J2xhdGl0dWRlJywKPHxmaW1fZW5kfD4="]
["b015fadd05689b22943814c72d7134c1efb72ed2-2","b015fadd05689b22943814c72d7134c1efb72ed2","PHxmaW1fcHJlZml4fD4KcHJpbWVzID0gWzIsIDMsIDUsIDddCmZvciBwcmltZSBpbiBwcmltZXM6CiAgICBwcmludChwcmltZSkKCiMgUHJpbnRzIG91dCB0aGUgbnVtYmVycyAwLDEsMiwzLDQKZm9yIHggaW4gcmFuZ2UoNSk6CiAgICBwcmludCh4KQoKIyBQcmludHMgb3V0IDMsNCw1CmZvciB4IGluIHJhbmdlKDMsIDYpOgogICAgcHJpbnQoeCkKCiMgUHJpbnRzIG91dCAzLDUsNwpmb3IgeCBpbiByYW5nZSgzLCA4LCAyKToKICAgIHByaW50KHgpCgojIFByaW50cyBvdXQgMCwxLDIsMyw0Cgpjb3VudCA9IDAKd2hpbGUgY291bnQgPCA1OgogICAgcHJpbnQoY291bnQpCiAgICBjb3VudCArPSAxICAjIFRoaXMgaXMgdGhlIHNhbWUgYXMgY291bnQgPSBjb3VudCArIDEKCiMgUHJpbnRzIG91dCAwLDEsMiwzLDQKCmNvdW50ID0gMAp3aGlsZSBUcnVlOgogICAgcHJpbnQoY291bnQpCiAgICBjb3VudCArPSAxCiAgICBpZiBjb3VudCA+PSA1OgogICAgICAgIGJyZWFrCgojIFByaW50cyBvdXQgb25seSBvZGQgbnVtYmVycyAtIDEsMyw1LDcsOQpmb3IgeCBpbiByYW5nZSgxMCk6CiAgICAjIENoZWNrIGlmIHggaXMgZXZlbgogICAgaWYgeCAlIDIgPT0gMDoKICAgICAgICBjb250aW51ZQogICAgcHJpbnQoeCkKCiMgUHJpbnRzIG91dCAwLDEsMiwzLDQgYW5kIHRoZW4gaXQgcHJpbnRzICJjb3VudCB2YWx1ZSByZWFjaGVkIDUiCgpjb3VudD0wCndoaWxlKGNvdW50PDUpOgogICAgcHJpbnQoY291bnQpCiAgICBjb3VudCArPTEKZWxzZToKICAgIHByaW50KCJjb3VudCB2YWx1ZSByZWFjaGVkICVkIiAlKGNvdW50KSkKCiMgUHJpbnRzIG91dCAxLDIsMyw0CmZvciBpIGluIHJhbmdlKDEsIDEwKToKICAgIGlmKGklNT09MCk6CiAgICAgICAgYnJlYWsKICAgIHByaW50KGkpCmVsc2U6CiAgICBwcmludCgidGhpcyBpcyBub3QgcHJpbnRlZCBiZWNhdXNlIGZvciBsb29wIGlzIHRlcm1pbmF0ZWQgYmVjYXVzZSBvZiBicmVhayBidXQgbm90IGR1ZSB0byBmYWlsIGluIGNvbmRpdGlvbiIpCgpudW1iZXJzID0gWwogICAgOTUxLCA0MDIsIDk4NCwgNjUxLCAzNjAsIDY5LCA0MDgsIDMxOSwgNjAxLCA0ODUsIDk4MCwgNTA3LCA3MjUsIDU0NywgNTQ0LAogICAgNjE1LCA4MywgMTY1LCAxNDEsIDUwMSwgMjYzLCA2MTcsIDg2NSwgNTc1LCAyMTksIDM5MCwgOTg0LCA1OTIsIDIzNiwgMTA1LCA5NDIsIDk0MSwKICAgIDM4NiwgNDYyLCA0NywgNDE4LCA5MDcsIDM0NCwgMjM2LCAzNzUsIDgyMywgNTY2LCA1OTcsIDk3OCwgMzI4LCA2MTUsIDk1MywgMzQ1LAogICAgMzk5LCAxNjIsIDc1OCwgMjE5LCA5MTgsIDIzNywgNDEyLCA1NjYsIDgyNiwgMjQ4LCA4NjYsIDk1MCwgNjI2LCA5NDksIDY4NywgMjE3LAogICAgODE1LCA2NywgMTA0LCA1OCwgNTEyLCAyNCwgODkyLCA4OTQsIDc2NywgNTUzLCA4MSwgMzc5LCA4NDMsIDgzMSwgNDQ1LCA3NDIsIDcxNywKICAgIDk1OCwgNjA5LCA4NDIsIDQ1MSwgNjg4LCA3NTMsIDg1NCwgNjg1LCA5MywgODU3LCA0NDAsIDM4MCwgMTI2LCA3MjEsIDMyOCwgNzUzLCA0NzAsCiAgICA3NDMsIDUyNwpdCgojIHlvdXIgY29kZSBnb2VzIGhlcmUKZm9yIG51bWJlciBpbiBudW1iZXJzOgogICAgaWYgbnVtYmVyID09IDIzNzoKICAgICAgICBicmVhawoKICAgIGlmIG51bWJlciAlIDIgPT0gMToKPHxmaW1faG9sZXw+CiAgICBwcmludChudW1iZXIpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgY29udGludWUKCjx8ZmltX2VuZHw+"]
["f9654bc27ca14aaaa017b183cf06d2ae32a15b8d-2","f9654bc27ca14aaaa017b183cf06d2ae32a15b8d","PHxmaW1fcHJlZml4fD4KaGVsbG8gPSAnSGVsbG8gV29ybGQnCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpkZWYgZigpOgogICAgcHJpbnQoaGVsbG8pCjx8ZmltX2VuZHw+"]
["758e63f6487592ba4484e2f6b815b23556a4332d-4","758e63f6487592ba4484e2f6b815b23556a4332d","PHxmaW1fcHJlZml4fD4KZnJvbSBzcWxpdGUzIGltcG9ydCBjb25uZWN0CmZyb20ganNvbiBpbXBvcnQgbG9hZHMsIGR1bXBzCmZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQKZnJvbSB0aW1lIGltcG9ydCBzbGVlcApmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlLCBkYXRldGltZQoKZnJvbSBiYXNlIGltcG9ydCAqCmZyb20gdXRpbCBpbXBvcnQgKgoKCmNsYXNzIFNpZ25pblg6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YWJhc2U9J2RhdGEuZGInLCBjdXN0b209Tm9uZSk6CiAgICAgICAgc2VsZi5jdXN0b20gPSBwYXJzZU1vZHVsZShjdXN0b20pIGlmIGN1c3RvbSBlbHNlIHt9CiAgICAgICAgc2VsZi5jb25uID0gY29ubmVjdChkYXRhYmFzZSwgY2hlY2tfc2FtZV90aHJlYWQ9RmFsc2UpCiAgICAgICAgc2VsZi5jb25uLmV4ZWN1dGUoJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHNpdGVzKG5hbWUgVEVYVCBQUklNQVJZIEtFWSxkYXRhIFRFWFQsc2tpcCBJTlQpJykKICAgICAgICBzZWxmLmNvbm4uZXhlY3V0ZSgnQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcmVzdWx0cyh0aW1lIFRFWFQsbmFtZSBURVhULHJlc3VsdCBURVhUKScpCiAgICAgICAgc2VsZi50YXNrcyA9IHtuYW1lOiBsb2FkcyhyYXcpIGZvciBuYW1lLCByYXcgaW4gc2VsZi5jb25uLmV4ZWN1dGUoJ1NFTEVDVCBuYW1lLGRhdGEgRlJPTSBzaXRlcyBXSEVSRSBza2lwIElTTlVMTCcpfQogICAgICAgIHNlbGYuc2NoZWR1bGUgPSB7bmFtZTogcmVzdWx0IGZvciBuYW1lLCByZXN1bHQgaW4gc2VsZi5jb25uLmV4ZWN1dGUoZidTRUxFQ1QgbmFtZSxyZXN1bHQgRlJPTSByZXN1bHRzIFdIRVJFICJ0aW1lIiBMSUtFICIle2RhdGUudG9kYXkoKX0lIicpfQoKICAgIGRlZiBhZGQoc2VsZiwgbmFtZSwgYXJncyk6CiAgICAgICAgaWYgbm90IHNlbGYudGFza3MuZ2V0KG5hbWUpOgogICAgICAgICAgICBzZWxmLnRhc2tzW25hbWVdID0gYXJncwogICAgICAgICAgICBzZWxmLmNvbm4uZXhlY3V0ZSgnSU5TRVJUIElOVE8gc2l0ZXMgKG5hbWUsZGF0YSkgVkFMVUVTKD8sPyknLCAobmFtZSwgZHVtcHMoYXJncykpKQogICAgICAgICAgICBzZWxmLmNvbm4uY29tbWl0KCkKICAgICAgICAgICAgcmV0dXJuIFRydWUKCiAgICBkZWYgdXBkYXRlKHNlbGYsIG5hbWUsIGFyZ3MpOgogICAgICAgIGlmIHNlbGYudGFza3MuZ2V0KG5hbWUpOgogICAgICAgICAgICBzZWxmLnRhc2tzW25hbWVdID0gYXJncwogICAgICAgICAgICBzZWxmLmNvbm4uZXhlY3V0ZSgnVVBEQVRFIHNpdGVzIFNFVCBkYXRhPT8gV0hFUkUgbmFtZT0/JywgKGR1bXBzKGFyZ3MpLCBuYW1lKSkKICAgICAgICAgICAgc2VsZi5jb25uLmNvbW1pdCgpCiAgICAgICAgICAgIHJldHVybiBUcnVlCgogICAgZGVmIHJlbW92ZShzZWxmLCBuYW1lKToKICAgICAgICBpZiBzZWxmLnRhc2tzLmdldChuYW1lKToKICAgICAgICAgICAgc2VsZi5jb25uLmV4ZWN1dGUoJ0RFTEVURSBGUk9NIHNpdGVzIFdIRVJFIG5hbWU9PycsIChuYW1lLCkpCiAgICAgICAgICAgIHNlbGYuY29ubi5jb21taXQoKQogICAgICAgICAgICBkZWwgc2VsZi50YXNrc1tuYW1lXQogICAgICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIGRlZiBzZXRTa2lwKHNlbGYsIG5hbWUsIHNraXA9VHJ1ZSk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmNvbm4uZXhlY3V0ZSgnVVBEQVRFIHNpdGVzIFNFVCBza2lwPT8gV0hFUkUgbmFtZT0/JywgKDEgaWYgc2tpcCBlbHNlIE5vbmUsIG5hbWUpKQogICAgICAgIHNlbGYuY29ubi5jb21taXQoKQogICAgICAgIHJldHVybiBUcnVlCgo8fGZpbV9lbmR8Pg=="]
["a5bf32e84c8d5f4ecfc41d44b4f60db2ba2de310-1","a5bf32e84c8d5f4ecfc41d44b4f60db2ba2de310","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29uZi51cmxzIGltcG9ydCB1cmwKCmZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcwppbXBvcnQgcmUsIGluc3BlY3QKCmRlZiByb3V0ZShwYXRoLCBuYW1lPU5vbmUpOgogICAgZGVmIHdyYXAoZik6CiAgICAgICAgQHdyYXBzKGYpCiAgICAgICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgICAgcmV0dXJuIGYoKmFyZ3MsICoqa3dhcmdzKQoKICAgICAgICBpZiBub3QgaGFzYXR0cih3cmFwcGVyLCAnX19yb3V0ZXNfXycpOgogICAgICAgICAgICB3cmFwcGVyLl9fcm91dGVzX18gPSBbXQoKICAgICAgICB3cmFwcGVyLl9fcm91dGVzX18uaW5zZXJ0KDAsIGRpY3QocGF0aD1wYXRoLCBuYW1lPW5hbWUpKQogICAgICAgIAogICAgICAgIHJldHVybiB3cmFwcGVyCiAgICByZXR1cm4gd3JhcAoKY2xhc3MgRWFzeVJvdXRlKG9iamVjdCk6CiAgICBfcmVwbCA9IHsKICAgICAgICAnaW50JzogcicoP1A8e3BhcmFtbmFtZX0+XGQrKScsCiAgICAgICAgJ3N0cic6IHInKD9QPHtwYXJhbW5hbWV9PlteL10rKScsCiAgICAgICAgJ2FsbCc6IHInKD9QPHtwYXJhbW5hbWV9Pi4qKScsCiAgICAgICAgJ2Zsb2F0JzogcicoP1A8e3BhcmFtbmFtZX0+XGQrKFwuXGQrKT8pJywKICAgICAgICAnYm9vbCc6IHInKD9QPHtwYXJhbW5hbWV9PlswMXRmVEZdfFtUdF1bUnJdW1V1XVtFZV18W0ZmXVtBYV1bTGxdW1NzXVtFZV0pJywKICAgIH0KICAgIF9zeW50YXggPSByZS5jb21waWxlKHInXDwoP1A8cGFyYW1uYW1lPltBLVphLXowLTlfXSspKDooP1A8dHlwZT5bQS1aYS16MC05XSspKT9cPicpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBAcHJvcGVydHkKICAgIGRlZiB1cmxzKHNlbGYpOgogICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdfdXJscycpOgogICAgICAgICAgICBzZWxmLl9idWlsZF91cmxzKCkKPHxmaW1fZW5kfD4="]
["e9a50aa48f7889a5e215ff3265ed23ef65e6d328-1","e9a50aa48f7889a5e215ff3265ed23ef65e6d328","PHxmaW1fcHJlZml4fD4KZnJvbSBpbnN0YWdyYW1fcHJpdmF0ZV9hcGkuZXJyb3JzIGltcG9ydCBDbGllbnRFcnJvcgpmcm9tIGxpYi5jbGllbnQgaW1wb3J0IEluc3RhZ3JhbUNsaWVudApmcm9tIGxpYi51dGlscyBpbXBvcnQgc2xlZXBfcmFuZG9tCmltcG9ydCBhcmdwYXJzZQoKCmRlZiBwYXJzZV9hcmdzKCkgLT4gYXJncGFyc2UuTmFtZXNwYWNlOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCiAgICAgICAgZGVzY3JpcHRpb249Ikluc3RhZ3JhbSBHaXZlQXdheSBBdXRvLVRhZ2dlci4iKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAidXNlcm5hbWUiLAogICAgICAgIHR5cGU9c3RyLAogICAgICAgIGhlbHA9Ikluc3RhZ3JhbSB1c2VybmFtZSBmb3IgYXV0aGVudGljYXRpb24uIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgInBhc3N3b3JkIiwKICAgICAgICB0eXBlPXN0ciwKICAgICAgICBoZWxwPSJJbnN0YWdyYW0gcGFzc3dvcmQuIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgInBvc3RfdXJsIiwKICAgICAgICB0eXBlPXN0ciwKICAgICAgICBoZWxwPSJVUkwgb2YgdGhlIGdpdmVhd2F5IHBvc3QuIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi11IiwKICAgICAgICAiLS11c2VyLWZvbGxvd2VycyIsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgaGVscD0iVGFnIGFsbCB0aGUgZm9sbG93ZXJzIG9mIHRoZSBzcGVjaWZpZWQgdXNlcm5hbWUuIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi10IiwKICAgICAgICAiLS10aW1lLXNsZWVwIiwKICAgICAgICB0eXBlPWludCwKPHxmaW1faG9sZXw+CiAgICByZXR1cm4gcGFyc2VyLnBhcnNlX2FyZ3MoKQoKCmRlZiBydW4oYXJncz1Ob25lKSAtPiBOb25lOgogICAgYXBpID0gSW5zdGFncmFtQ2xpZW50KGFyZ3MudXNlcm5hbWUsIGFyZ3MucGFzc3dvcmQpCiAgICBtZWRpYV9pZCA9IGFwaS5nZXRfbWVkaWFfaWQoYXJncy5wb3N0X3VybCkKCiAgICB1c2VyID0gYXBpLmdldF91c2VyX2lkKAogICAgICAgIGFyZ3MudXNlcl9mb2xsb3dlcnMpIGlmIGFyZ3MudXNlcl9mb2xsb3dlcnMgZWxzZSBhcGkuYXBpLmF1dGhlbnRpY2F0ZWRfdXNlcl9pZAogICAgZm9sbG93ZXJzID0gYXBpLmdldF9mb2xsb3dlcnModXNlcikKCiAgICBwcmludChmIlRhZ2dpbmcge2xlbihmb2xsb3dlcnMpfSBmb2xsb3dlcnMuIikKCiAgICBmb3IgZm9sbG93ZXIgaW4gZm9sbG93ZXJzOgogICAgICAgIHRyeToKICAgICAgICAgICAgYXBpLnBvc3RfY29tbWVudChtZWRpYV9pZCwgZidAe2ZvbGxvd2VyfScpCiAgICAgICAgICAgIHByaW50KGYnVGFnZ2VkOiB7Zm9sbG93ZXJ9JykKCiAgICAgICAgZXhjZXB0IENsaWVudEVycm9yIGFzIGU6CiAgICAgICAgICAgIGlmICJmYWlsZWTCoHRvwqBtZW50aW9uIiBpbiBlLm1zZzoKICAgICAgICAgICAgICAgIHByaW50KAogICAgICAgICAgICAgICAgICAgIGYie2ZvbGxvd2VyfSBkb2Vzbid0IGFsbG93IHRhZ3MgZnJvbSBhY2NvdW50cyB0aGV5IGRvbid0IGZvbGxvdy4iKQogICAgICAgICAgICBlbGlmICJmZWVkYmFja19yZXF1aXJlZCIgaW4gZS5tc2c6CiAgICAgICAgICAgICAgICBwcmludCgiWW91IGFyZSByYXRlIGxpbWl0ZWQuIFBsZWFzZSB3YWl0IGZvciBhIHdoaWxlLi4uIikKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwcmludChmIlVua25vd24gZXJyb3I6IHtlfSkKCiAgICAgICAgaWYgYXJncy50aW1lX3NsZWVwOgogICAgICAgICAgICBzbGVlcF9yYW5kb20odHVwbGUoYXJncy50aW1lX3NsZWVwKSkKCgpkZWYgbWFpbigpIC0+IE5vbmU6CiAgICBydW4ocGFyc2VfYXJncygpKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICBuYXJncz0yLAogICAgICAgIGhlbHA9IlNsZWVwIGludGVydmFsIHRvIG1pbWljIGEgaHVtYW4gb3BlcmF0b3IgKGV4OiAtdCAxNSAyMCkuIikKCjx8ZmltX2VuZHw+"]
["e99d5390ebed5a141fcd9689405e0d22340a9c0b-3","e99d5390ebed5a141fcd9689405e0d22340a9c0b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gZW51bSBpbXBvcnQgSW50RW51bQpmcm9tIHR5cGluZyBpbXBvcnQgRGljdCwgT3B0aW9uYWwKCmZyb20gcHlkYW50aWMgaW1wb3J0IEJhc2VNb2RlbCwgdmFsaWRhdG9yCgpmcm9tIGNvbW1vbl91dGlscy5wZXJjZW50X2xvZ191dGlsIGltcG9ydCBQZXJjZW50UmVzdWx0CmZyb20gbW9uaXRvci51dGlscy5lcnJvcnMgaW1wb3J0IExvZ1dlaWdodEVycm9yCgoKY2xhc3MgTW9uaXRvclR5cGUoSW50RW51bSk6CiAgICBQRVJDRU5UID0gMQoKCmNsYXNzIFRhc2tQYXJhbWV0ZXIoQmFzZU1vZGVsKToKPHxmaW1faG9sZXw+CiAgICBkZXNjcmlwdGlvbjogT3B0aW9uYWxbc3RyXQoKICAgIEB2YWxpZGF0b3IoImxvZ19wYXRoX3dlaWdodHMiKQogICAgZGVmIGNoZWNrX2ZpbGVzKGNscywgbG9nX3BhdGhfd2VpZ2h0czogRGljdFtzdHIsIGZsb2F0XSkgLT4gRGljdFtzdHIsIGZsb2F0XToKICAgICAgICBmb3IgbG9nX3BhdGggaW4gbG9nX3BhdGhfd2VpZ2h0czoKICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxvZ19wYXRoKToKICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZiJsb2dfcGF0aCBub3QgZXhpc3RzIHtsb2dfcGF0aH0iKQoKICAgICAgICBkZWx0YSA9IDAuMDAxCiAgICAgICAgaWYgYWJzKHN1bShsb2dfcGF0aF93ZWlnaHRzLnZhbHVlcygpKSAtIDEpID49IGRlbHRhOgogICAgICAgICAgICByYWlzZSBMb2dXZWlnaHRFcnJvcgoKICAgICAgICByZXR1cm4gbG9nX3BhdGhfd2VpZ2h0cwoKCmNsYXNzIFRhc2tFeHRyYUluZm8oQmFzZU1vZGVsKToKICAgIHVzZXJfaWQ6IE9wdGlvbmFsW3N0cl0gPSBOb25lCiAgICBtb25pdG9yX3R5cGU6IE1vbml0b3JUeXBlID0gTW9uaXRvclR5cGUuUEVSQ0VOVAogICAgbG9nX3BhdGhfd2VpZ2h0czogRGljdFtzdHIsIGZsb2F0XQogICAgZGVzY3JpcHRpb246IE9wdGlvbmFsW3N0cl0KCgpjbGFzcyBUYXNrU3RvcmFnZVN0cnVjdHVyZShCYXNlTW9kZWwpOgogICAgcmF3X2xvZ19jb250ZW50czogRGljdFtzdHIsIFBlcmNlbnRSZXN1bHRdCiAgICB0YXNrX2V4dHJhX2luZm86IFRhc2tFeHRyYUluZm8KICAgIHBlcmNlbnRfcmVzdWx0OiBQZXJjZW50UmVzdWx0CgoKY2xhc3MgVGFza1NldFN0b3JhZ2VTdHJ1Y3R1cmUoQmFzZU1vZGVsKToKICAgIF9fcm9vdF9fOiBEaWN0W3N0ciwgVGFza1N0b3JhZ2VTdHJ1Y3R1cmVdCgogICAgZGVmIGRpY3Qoc2VsZikgLT4gRGljdDogICMgdHlwZTogaWdub3JlCiAgICAgICAgcmV0dXJuIHN1cGVyKCkuZGljdCgpWyJfX3Jvb3RfXyJdCjx8ZmltX3N1ZmZpeHw+CiAgICB0YXNrX2lkOiBzdHIKICAgIHVzZXJfaWQ6IHN0cgogICAgbW9uaXRvcl90eXBlOiBNb25pdG9yVHlwZSA9IE1vbml0b3JUeXBlLlBFUkNFTlQKICAgIGxvZ19wYXRoX3dlaWdodHM6IERpY3Rbc3RyLCBmbG9hdF0KPHxmaW1fZW5kfD4="]
["f9c6866b4518adfd28b6e291c39050ecf9d2c405-4","f9c6866b4518adfd28b6e291c39050ecf9d2c405","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCgppbXBvcnQgYWlvaHR0cApmcm9tIGx4bWwgaW1wb3J0IGV0cmVlCgpmcm9tIHByb2plY3QuZXhjZXB0aW9ucyBpbXBvcnQgVGlja2VyTm90Rm91bmRFcnJvciwgUHJpY2VOb3RGb3VuZEVycm9yCgpCQVNFX1VSTCA9ICdodHRwczovL2Jjcy1leHByZXNzLnJ1L2tvdGlyb3ZraS1pLWdyYWZpa2knCgpfX2FsbF9fID0gKAogICAgJ3F1b3RlJywKKQoKCmRlZiBnZXRfdXJsKHRpY2tlcjogc3RyKSAtPiBzdHI6CiAgICByZXR1cm4gZid7QkFTRV9VUkx9L3t0aWNrZXJ9JwoKCmFzeW5jIGRlZiBmZXRjaChzZXNzaW9uOiBhaW9odHRwLkNsaWVudFNlc3Npb24sIHRpY2tlcjogc3RyKToKICAgIHVybCA9IGdldF91cmwodGlja2VyKQogICAgYXN5bmMgd2l0aCBzZXNzaW9uLmdldCh1cmwpIGFzIHJlc3A6CiAgICAgICAgc3RhdHVzX2NvZGUgPSByZXNwLnN0YXR1cwogICAgICAgIGh0bWwgPSBhd2FpdCByZXNwLnRleHQoKQogICAgICAgIHJldHVybiBzdGF0dXNfY29kZSwgaHRtbAoKCmRlZiBleHRyYWN0X3ByaWNlKGh0bWw6IHN0cikgLT4gZmxvYXQ6CiAgICBodG1scGFyc2VyID0gZXRyZWUuSFRNTFBhcnNlcigpCiAgICB0cmVlID0gZXRyZWUuZnJvbXN0cmluZyhodG1sLCBodG1scGFyc2VyKQogICAgcHJpY2VfeHBhdGggPSAnL2h0bWwvYm9keS9kaXZbMV0vc2VjdGlvbi9kaXZbMV0vZGl2WzFdL2RpdlsxXS9kaXZbMl0vZGl2L2RpdlsyXS9kaXZbMV0vZGl2WzFdL2Rpdi9kaXZbMV0nCiAgICBwcmljZV9lbGVtcyA9IHRyZWUueHBhdGgocHJpY2VfeHBhdGgpCgogICAgaWYgbGVuKHByaWNlX2VsZW1zKSAhPSAxOgogICAgICAgIHJhaXNlIFByaWNlTm90Rm91bmRFcnJvcihmJ2xlbihwcmljZV9lbGVtcykgPSB7bGVuKHByaWNlX2VsZW1zKX0nKQoKICAgIHByaWNlX2VsZW0gPSBwcmljZV9lbGVtc1swXQogICAgcHJpY2UgPSBwcmljZV9lbGVtLnRleHQKICAgIGNsZWFyX3ByaWNlID0gcmUuc3ViKHInW14wLTksXScsICcnLCBwcmljZSkKICAgIHJldHVybiBmbG9hdChjbGVhcl9wcmljZS5yZXBsYWNlKCcsJywgJy4nKSkKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmFzeW5jIGRlZiBxdW90ZShzZXNzaW9uOiBhaW9odHRwLkNsaWVudFNlc3Npb24sIHRpY2tlcjogc3RyKSAtPiBmbG9hdDoKICAgIHN0YXR1c19jb2RlLCBodG1sID0gYXdhaXQgZmV0Y2goc2Vzc2lvbiwgdGlja2VyKQoKICAgIGlmIHN0YXR1c19jb2RlID49IDQwMDoKPHxmaW1fZW5kfD4="]
["32d743eb458861a3e43c1ef3b6f336c0fbb4d875-1","32d743eb458861a3e43c1ef3b6f336c0fbb4d875","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgoiIiIKT3B0aW1pemUgY29uZnVzaW9uIG1hdHJpeC4KCkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKCiogaHR0cDovL2NzLnN0YWNrZXhjaGFuZ2UuY29tL3EvNzA2MjcvMjkxNAoqIGh0dHA6Ly9kYXRhc2NpZW5jZS5zdGFja2V4Y2hhbmdlLmNvbS9xLzE3MDc5Lzg4MjAKIiIiCgojIENvcmUgTGlicmFyeQppbXBvcnQganNvbgppbXBvcnQgbG9nZ2luZwppbXBvcnQgcmFuZG9tCmZyb20gdHlwaW5nIGltcG9ydCBBbnksIENhbGxhYmxlLCBEaWN0LCBMaXN0LCBPcHRpb25hbCwgVHVwbGUKCiMgVGhpcmQgcGFydHkKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gamluamEyIGltcG9ydCBUZW1wbGF0ZQpmcm9tIG1wbF90b29sa2l0cy5heGVzX2dyaWQxIGltcG9ydCBtYWtlX2F4ZXNfbG9jYXRhYmxlCmZyb20gcGtnX3Jlc291cmNlcyBpbXBvcnQgcmVzb3VyY2VfZmlsZW5hbWUKZnJvbSBza2xlYXJuLm1ldHJpY3MgaW1wb3J0IHNpbGhvdWV0dGVfc2NvcmUKCiMgRmlyc3QgcGFydHkKaW1wb3J0IGNsYW5hLmNsdXN0ZXJpbmcKaW1wb3J0IGNsYW5hLmNtX21ldHJpY3MKaW1wb3J0IGNsYW5hLmlvCmltcG9ydCBjbGFuYS51dGlscwoKY2ZnID0gY2xhbmEudXRpbHMubG9hZF9jZmcoKQpsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpkZWYgbWFpbigKICAgIGNtX2ZpbGU6IHN0ciwKICAgIHBlcm1fZmlsZTogc3RyLAogICAgc3RlcHM6IGludCwKICAgIGxhYmVsc19maWxlOiBzdHIsCiAgICB6ZXJvX2RpYWdvbmFsOiBib29sLAogICAgbGltaXRfY2xhc3NlczogT3B0aW9uYWxbaW50XSA9IE5vbmUsCiAgICBvdXRwdXQ6IE9wdGlvbmFsW3N0cl0gPSBOb25lLAopIC0+IE5vbmU6CiAgICAiIiIKICAgIFJ1biBvcHRpbWl6YXRpb24gYW5kIGdlbmVyYXRlIG91dHB1dC4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBjbV9maWxlIDogc3RyCiAgICBwZXJtX2ZpbGUgOiBzdHIKICAgIHN0ZXBzIDogaW50CiAgICBsYWJlbHNfZmlsZSA6IHN0cgogICAgemVyb19kaWFnb25hbCA6IGJvb2wKICAgIGxpbWl0X2NsYXNzZXMgOiBpbnQsIG9wdGlvbmFsIChkZWZhdWx0OiBubyBsaW1pdCkKICAgIG91dHB1dCA6IHN0cgogICAgIiIiCiAgICBjbSA9IGNsYW5hLmlvLnJlYWRfY29uZnVzaW9uX21hdHJpeChjbV9maWxlKQogICAgcGVybSA9IGNsYW5hLmlvLnJlYWRfcGVybXV0YXRpb24oY21fZmlsZSwgcGVybV9maWxlKQogICAgbGFiZWxzID0gY2xhbmEuaW8ucmVhZF9sYWJlbHMobGFiZWxzX2ZpbGUsIGxlbihjbSkpCiAgICBuLCBtID0gY20uc2hhcGUKICAgIGlmIG4gIT0gbToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICBmIkNvbmZ1c2lvbiBtYXRyaXggaXMgZXhwZWN0ZWQgdG8gYmUgc3F1YXJlLCBidXQgd2FzIHtufSB4IHttfSIKICAgICAgICApCiAgICBpZiBsZW4obGFiZWxzKSAtIDEgIT0gbjoKICAgICAgICBwcmludCgKICAgICAgICAgICAgIkNvbmZ1c2lvbiBtYXRyaXggaXMge259IHgge259LCBidXQgbGVuKGxhYmVscyk9e25iX2xhYmVsc30iLmZvcm1hdCgKICAgICAgICAgICAgICAgIG49biwgbmJfbGFiZWxzPWxlbihsYWJlbHMpCiAgICAgICAgICAgICkKICAgICAgICApCgogICAgY21fb3JpZyA9IGNtLmNvcHkoKQoKICAgIGdldF9jbV9wcm9ibGVtcyhjbSwgbGFiZWxzKQoKICAgIHdlaWdodHMgPSBjYWxjdWxhdGVfd2VpZ2h0X21hdHJpeChsZW4oY20pKQogICAgcHJpbnQoIlNjb3JlOiB7fSIuZm9ybWF0KGNhbGN1bGF0ZV9zY29yZShjbSwgd2VpZ2h0cykpKQogICAgcmVzdWx0ID0gc2ltdWxhdGVkX2FubmVhbGluZygKICAgICAgICBjbSwgcGVybSwgc2NvcmU9Y2FsY3VsYXRlX3Njb3JlLCBkZXRlcm1pbmlzdGljPVRydWUsIHN0ZXBzPXN0ZXBzCiAgICApCiAgICBwcmludCgiU2NvcmU6IHt9Ii5mb3JtYXQoY2FsY3VsYXRlX3Njb3JlKHJlc3VsdFsiY20iXSwgd2VpZ2h0cykpKQogICAgcHJpbnQoIlBlcm06IHt9Ii5mb3JtYXQobGlzdChyZXN1bHRbInBlcm0iXSkpKQogICAgY2xhbmEuaW8uQ2xhbmFDZmcuc3RvcmVfcGVybXV0YXRpb24oY21fZmlsZSwgcmVzdWx0WyJwZXJtIl0sIHN0ZXBzKQogICAgbGFiZWxzID0gW2xhYmVsc1tpXSBmb3IgaSBpbiByZXN1bHRbInBlcm0iXV0KICAgIGNsYXNzX2luZGljZXMgPSBsaXN0KHJhbmdlKGxlbihsYWJlbHMpKSkKICAgIGNsYXNzX2luZGljZXMgPSBbY2xhc3NfaW5kaWNlc1tpXSBmb3IgaSBpbiByZXN1bHRbInBlcm0iXV0KICAgIGxvZ2dlci5pbmZvKGYiQ2xhc3Nlczoge2xhYmVsc30iKQogICAgYWNjID0gY2xhbmEuY21fbWV0cmljcy5nZXRfYWNjdXJhY3koY21fb3JpZykKICAgIHByaW50KCJBY2N1cmFjeTogezowLjJmfSUiLmZvcm1hdChhY2MgKiAxMDApKQogICAgc3RhcnQgPSAwCiAgICBpZiBsaW1pdF9jbGFzc2VzIGlzIE5vbmU6CiAgICAgICAgbGltaXRfY2xhc3NlcyA9IGxlbihjbSkKICAgIGlmIG91dHB1dCBpcyBOb25lOgogICAgICAgIG91dHB1dCA9IGNmZ1sidmlzdWFsaXplIl1bInNhdmVfcGF0aCJdCiAgICBwbG90X2NtKAogICAgICAgIHJlc3VsdFsiY20iXVtzdGFydDpsaW1pdF9jbGFzc2VzLCBzdGFydDpsaW1pdF9jbGFzc2VzXSwKICAgICAgICB6ZXJvX2RpYWdvbmFsPXplcm9fZGlhZ29uYWwsCiAgICAgICAgbGFiZWxzPWxhYmVsc1tzdGFydDpsaW1pdF9jbGFzc2VzXSwKICAgICAgICBvdXRwdXQ9b3V0cHV0LAogICAgKQogICAgY3JlYXRlX2h0bWxfY20oCiAgICAgICAgcmVzdWx0WyJjbSJdW3N0YXJ0OmxpbWl0X2NsYXNzZXMsIHN0YXJ0OmxpbWl0X2NsYXNzZXNdLAogICAgICAgIHplcm9fZGlhZ29uYWw9emVyb19kaWFnb25hbCwKICAgICAgICBsYWJlbHM9bGFiZWxzW3N0YXJ0OmxpbWl0X2NsYXNzZXNdLAogICAgKQogICAgaWYgbGVuKGNtKSA8IDU6CiAgICAgICAgcHJpbnQoCiAgICAgICAgICAgICJZb3Ugb25seSBoYXZlIHt9IGNsYXNzZXMuIENsdXN0ZXJpbmcgZm9yIGxlc3MgdGhhbiA1IGNsYXNzZXMgIgogICAgICAgICAgICAic2hvdWxkIGJlIGRvbmUgbWFudWFsbHkuIi5mb3JtYXQobGVuKGNtKSkKICAgICAgICApCiAgICAgICAgcmV0dXJuCiAgICBncm91cGluZyA9IGNsYW5hLmNsdXN0ZXJpbmcuZXh0cmFjdF9jbHVzdGVycyhyZXN1bHRbImNtIl0sIGxhYmVscykKICAgIHlfcHJlZCA9IFswXQogICAgY2x1c3Rlcl9pID0gMAogICAgZm9yIGVsIGluIGdyb3VwaW5nOgogICAgICAgIGlmIGVsOgogICAgICAgICAgICBjbHVzdGVyX2kgKz0gMQogICAgICAgIHlfcHJlZC5hcHBlbmQoY2x1c3Rlcl9pKQogICAgbG9nZ2VyLmluZm8oInNpbGhvdWV0dGVfc2NvcmU9e30iLmZvcm1hdChzaWxob3VldHRlX3Njb3JlKGNtLCB5X3ByZWQpKSkKICAgICMgU3RvcmUgZ3JvdXBpbmcgYXMgaGllcmFyY2h5CiAgICB3aXRoIG9wZW4oY2ZnWyJ2aXN1YWxpemUiXVsiaGllcmFyY2h5X3BhdGgiXSwgInciKSBhcyBvdXRmaWxlOgogICAgICAgIGhpZXJhcmNoeSA9IGNsYW5hLmNsdXN0ZXJpbmcuYXBwbHlfZ3JvdXBpbmcoY2xhc3NfaW5kaWNlcywgZ3JvdXBpbmcpCiAgICAgICAgaGllcmFyY2h5ID0gY2xhbmEuY2x1c3RlcmluZy5fcmVtb3ZlX3NpbmdsZV9lbGVtZW50X2dyb3VwcyhoaWVyYXJjaHkpCiAgICAgICAgc3RyXyA9IGpzb24uZHVtcHMoCiAgICAgICAgICAgIGhpZXJhcmNoeSwKICAgICAgICAgICAgaW5kZW50PTQsCiAgICAgICAgICAgIHNvcnRfa2V5cz1UcnVlLAogICAgICAgICAgICBzZXBhcmF0b3JzPSgiLCIsICI6IiksCiAgICAgICAgICAgIGVuc3VyZV9hc2NpaT1GYWxzZSwKICAgICAgICApCiAgICAgICAgb3V0ZmlsZS53cml0ZShzdHJfKQoKICAgICMgUHJpbnQgbmljZQogICAgZm9yIGdyb3VwIGluIGNsYW5hLmNsdXN0ZXJpbmcuYXBwbHlfZ3JvdXBpbmcobGFiZWxzLCBncm91cGluZyk6CiAgICAgICAgcHJpbnQoIlx0e306IHt9Ii5mb3JtYXQobGVuKGdyb3VwKSwgbGlzdChncm91cCkpKQoKCmRlZiBnZXRfY21fcHJvYmxlbXMoY206IG5wLm5kYXJyYXksIGxhYmVsczogTGlzdFtzdHJdKSAtPiBOb25lOgogICAgIiIiCiAgICBGaW5kIHByb2JsZW1zIG9mIGEgY2xhc3NpZmllciBieSBhbmFsemluZyBpdHMgY29uZnVzaW9uIG1hdHJpeC4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBjbSA6IG5kYXJyYXkKICAgIGxhYmVscyA6IExpc3Rbc3RyXQogICAgIiIiCiAgICBuID0gbGVuKGNtKQoKICAgICMgRmluZCBjbGFzc2VzIHdoaWNoIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgZGF0YXNldAogICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgICAgaWYgc3VtKGNtW2ldKSA9PSAwOgogICAgICAgICAgICBsb2dnZXIud2FybmluZygiVGhlIGNsYXNzICd7fScgd2FzIG5vdCBpbiB0aGUgZGF0YXNldC4iLmZvcm1hdChsYWJlbHNbaV0pKQoKICAgICMgRmluZCBjbGFzc2VzIHdoaWNoIGFyZSBuZXZlciBwcmVkaWN0ZWQKICAgIGNtID0gY20udHJhbnNwb3NlKCkKICAgIG5ldmVyX3ByZWRpY3RlZCA9IFtdCiAgICBmb3IgaSBpbiByYW5nZShuKToKICAgICAgICBpZiBzdW0oY21baV0pID09IDA6CiAgICAgICAgICAgIG5ldmVyX3ByZWRpY3RlZC5hcHBlbmQobGFiZWxzW2ldKQogICAgaWYgbGVuKG5ldmVyX3ByZWRpY3RlZCkgPiAwOgogICAgICAgIGxvZ2dlci53YXJuaW5nKGYiVGhlIGZvbGxvd2luZyBjbGFzc2VzIHdlcmUgbmV2ZXIgcHJlZGljdGVkOiB7bmV2ZXJfcHJlZGljdGVkfSIpCgoKZGVmIGNhbGN1bGF0ZV9zY29yZShjbTogbnAubmRhcnJheSwgd2VpZ2h0czogZmxvYXQpIC0+IGludDoKICAgICIiIgogICAgQ2FsY3VsYXRlIGEgc2NvcmUgaG93IGNsb3NlIGJpZyBlbGVtZW50cyBvZiBjbSBhcmUgdG8gdGhlIGRpYWdvbmFsLgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGNtID0gbnAuYXJyYXkoW1swLCAxLCAyXSwgWzMsIDQsIDVdLCBbNiwgNywgOF1dKQogICAgPj4+IHdlaWdodHMgPSBjYWxjdWxhdGVfd2VpZ2h0X21hdHJpeCgzKQogICAgPj4+IHdlaWdodHMuc2hhcGUKICAgICgzLCAzKQogICAgPj4+IGNhbGN1bGF0ZV9zY29yZShjbSwgd2VpZ2h0cykKICAgIDMyCiAgICAiIiIKICAgIHJldHVybiBpbnQobnAudGVuc29yZG90KGNtLCB3ZWlnaHRzLCBheGVzPSgoMCwgMSksICgwLCAxKSkpKQoKCmRlZiBjYWxjdWxhdGVfd2VpZ2h0X21hdHJpeChuOiBpbnQpIC0+IG5wLm5kYXJyYXk6CiAgICAiIiIKICAgIENhbGN1bGF0ZSB0aGUgd2VpZ2h0cyBmb3IgZWFjaCBwb3NpdGlvbi4KCiAgICBUaGUgd2VpZ2h0IGlzIHRoZSBkaXN0YW5jZSB0byB0aGUgZGlhZ29uYWwuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgbiA6IGludAoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGNhbGN1bGF0ZV93ZWlnaHRfbWF0cml4KDMpCiAgICBhcnJheShbWzAuICAsIDEuMDEsIDIuMDJdLAogICAgICAgICAgIFsxLjAxLCAwLiAgLCAxLjAzXSwKICAgICAgICAgICBbMi4wMiwgMS4wMywgMC4gIF1dKQogICAgIiIiCiAgICB3ZWlnaHRzID0gbnAuYWJzKG5wLmFyYW5nZShuKSAtIG5wLmFyYW5nZShuKVs6LCBOb25lXSkKICAgIHdlaWdodHMgPSBucC5hcnJheSh3ZWlnaHRzLCBkdHlwZT1ucC5mbG9hdCkKICAgIGZvciBpIGluIHJhbmdlKG4pOgogICAgICAgIGZvciBqIGluIHJhbmdlKG4pOgogICAgICAgICAgICBpZiBpID09IGo6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICB3ZWlnaHRzW2ldW2pdICs9IChpICsgaikgKiAwLjAxCiAgICByZXR1cm4gd2VpZ2h0cwoKCmRlZiBzd2FwKGNtOiBucC5uZGFycmF5LCBpOiBpbnQsIGo6IGludCkgLT4gbnAubmRhcnJheToKICAgICIiIgogICAgU3dhcCByb3cgYW5kIGNvbHVtbiBpIGFuZCBqIGluLXBsYWNlLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGNtIDogbnAubmRhcnJheQogICAgaSA6IGludAogICAgaiA6IGludAoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIGNtIDogbnAubmRhcnJheQoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGNtID0gbnAuYXJyYXkoW1swLCAxLCAyXSwgWzMsIDQsIDVdLCBbNiwgNywgOF1dKQogICAgPj4+IHN3YXAoY20sIDIsIDApCiAgICBhcnJheShbWzgsIDcsIDZdLAogICAgICAgICAgIFs1LCA0LCAzXSwKICAgICAgICAgICBbMiwgMSwgMF1dKQogICAgIiIiCiAgICAjIHN3YXAgY29sdW1ucwogICAgY29weSA9IGNtWzosIGldLmNvcHkoKQogICAgY21bOiwgaV0gPSBjbVs6LCBqXQogICAgY21bOiwgal0gPSBjb3B5CiAgICAjIHN3YXAgcm93cwogICAgY29weSA9IGNtW2ksIDpdLmNvcHkoKQogICAgY21baSwgOl0gPSBjbVtqLCA6XQogICAgY21baiwgOl0gPSBjb3B5CiAgICByZXR1cm4gY20KCgpkZWYgbW92ZV8xZCgKICAgIHBlcm06IG5wLm5kYXJyYXksIGZyb21fc3RhcnQ6IGludCwgZnJvbV9lbmQ6IGludCwgaW5zZXJ0X3BvczogaW50CikgLT4gbnAubmRhcnJheToKICAgICIiIgogICAgTW92ZSBhIGJsb2NrIGluIGEgbGlzdC4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBwZXJtIDogbnAubmRhcnJheQogICAgICAgIFBlcm11dGF0aW9uCiAgICBmcm9tX3N0YXJ0IDogaW50CiAgICBmcm9tX2VuZCA6IGludAogICAgaW5zZXJ0X3BvcyA6IGludAoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHBlcm0gOiBucC5uZGFycmF5CiAgICAgICAgVGhlIG5ldyBwZXJtdXRhdGlvbgogICAgIiIiCiAgICBpZiBub3QgKGluc2VydF9wb3MgPCBmcm9tX3N0YXJ0IG9yIGluc2VydF9wb3MgPiBmcm9tX2VuZCk6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgImluc2VydF9wb3M9e30gbmVlZHMgdG8gYmUgc21hbGxlciB0aGFuIGZyb21fc3RhcnQ9e30iCiAgICAgICAgICAgICIgb3IgZ3JlYXRlciB0aGFuIGZyb21fZW5kPXt9Ii5mb3JtYXQoaW5zZXJ0X3BvcywgZnJvbV9zdGFydCwgZnJvbV9lbmQpCiAgICAgICAgKQogICAgaWYgaW5zZXJ0X3BvcyA+IGZyb21fZW5kOgogICAgICAgIHBfbmV3ID0gbGlzdChyYW5nZShmcm9tX2VuZCArIDEsIGluc2VydF9wb3MgKyAxKSkgKyBsaXN0KAogICAgICAgICAgICByYW5nZShmcm9tX3N0YXJ0LCBmcm9tX2VuZCArIDEpCiAgICAgICAgKQogICAgZWxzZToKICAgICAgICBwX25ldyA9IGxpc3QocmFuZ2UoZnJvbV9zdGFydCwgZnJvbV9lbmQgKyAxKSkgKyBsaXN0KAogICAgICAgICAgICByYW5nZShpbnNlcnRfcG9zLCBmcm9tX3N0YXJ0KQogICAgICAgICkKICAgIHBfb2xkID0gc29ydGVkKHBfbmV3KQogICAgcGVybVtwX29sZF0gPSBwZXJtW3BfbmV3XQogICAgcmV0dXJuIHBlcm0KCgpkZWYgbW92ZShjbTogbnAubmRhcnJheSwgZnJvbV9zdGFydDogaW50LCBmcm9tX2VuZDogaW50LCBpbnNlcnRfcG9zOiBpbnQpIC0+IG5wLm5kYXJyYXk6CiAgICAiIiIKICAgIE1vdmUgcm93cyBmcm9tX3N0YXJ0IC0gZnJvbV9lbmQgdG8gaW5zZXJ0X3BvcyBpbi1wbGFjZS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBjbSA6IG5wLm5kYXJyYXkKICAgIGZyb21fc3RhcnQgOiBpbnQKICAgIGZyb21fZW5kIDogaW50CiAgICBpbnNlcnRfcG9zIDogaW50CgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgY20gOiBucC5uZGFycmF5CgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICA+Pj4gY20gPSBucC5hcnJheShbWzAsIDEsIDIsIDNdLCBbNCwgNSwgNiwgN10sIFs4LCA5LCAwLCAxXSwgWzIsIDMsIDQsIDVdXSkKICAgID4+PiBtb3ZlKGNtLCAxLCAyLCAwKQogICAgYXJyYXkoW1s1LCA2LCA0LCA3XSwKICAgICAgICAgICBbOSwgMCwgOCwgMV0sCiAgICAgICAgICAgWzEsIDIsIDAsIDNdLAogICAgICAgICAgIFszLCA0LCAyLCA1XV0pCiAgICAiIiIKICAgIGlmIG5vdCAoaW5zZXJ0X3BvcyA8IGZyb21fc3RhcnQgb3IgaW5zZXJ0X3BvcyA+IGZyb21fZW5kKToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAiaW5zZXJ0X3Bvcz17fSBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gZnJvbV9zdGFydD17fSIKICAgICAgICAgICAgIiBvciBncmVhdGVyIHRoYW4gZnJvbV9lbmQ9e30iLmZvcm1hdChpbnNlcnRfcG9zLCBmcm9tX3N0YXJ0LCBmcm9tX2VuZCkKICAgICAgICApCiAgICBpZiBpbnNlcnRfcG9zID4gZnJvbV9lbmQ6CiAgICAgICAgcF9uZXcgPSBsaXN0KHJhbmdlKGZyb21fZW5kICsgMSwgaW5zZXJ0X3BvcyArIDEpKSArIGxpc3QoCiAgICAgICAgICAgIHJhbmdlKGZyb21fc3RhcnQsIGZyb21fZW5kICsgMSkKICAgICAgICApCiAgICBlbHNlOgogICAgICAgIHBfbmV3ID0gbGlzdChyYW5nZShmcm9tX3N0YXJ0LCBmcm9tX2VuZCArIDEpKSArIGxpc3QoCiAgICAgICAgICAgIHJhbmdlKGluc2VydF9wb3MsIGZyb21fc3RhcnQpCiAgICAgICAgKQogICAgcF9vbGQgPSBzb3J0ZWQocF9uZXcpCiAgICAjIHN3YXAgY29sdW1ucwogICAgY21bOiwgcF9vbGRdID0gY21bOiwgcF9uZXddCiAgICAjIHN3YXAgcm93cwogICAgY21bcF9vbGQsIDpdID0gY21bcF9uZXcsIDpdCiAgICByZXR1cm4gY20KCgpkZWYgc3dhcF8xZChwZXJtOiBucC5uZGFycmF5LCBpOiBpbnQsIGo6IGludCkgLT4gbnAubmRhcnJheToKICAgICIiIgogICAgU3dhcCB0d28gZWxlbWVudHMgb2YgYSAxLUQgbnVtcHkgYXJyYXkgaW4tcGxhY2UuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgcGFybSA6IG5wLm5kYXJyYXkKICAgIGkgOiBpbnQKICAgIGogOiBpbnQKCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBwZXJtID0gbnAuYXJyYXkoWzIsIDEsIDIsIDMsIDQsIDUsIDZdKQogICAgPj4+IHN3YXBfMWQocGVybSwgMiwgNikKICAgIGFycmF5KFsyLCAxLCA2LCAzLCA0LCA1LCAyXSkKICAgICIiIgogICAgcGVybVtpXSwgcGVybVtqXSA9IHBlcm1bal0sIHBlcm1baV0KICAgIHJldHVybiBwZXJtCgoKZGVmIGFwcGx5X3Blcm11dGF0aW9uKGNtOiBucC5uZGFycmF5LCBwZXJtOiBMaXN0W2ludF0pIC0+IG5wLm5kYXJyYXk6CiAgICAiIiIKICAgIEFwcGx5IHBlcm11dGF0aW9uIHRvIGEgbWF0cml4LgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGNtIDogbmRhcnJheQogICAgcGVybSA6IExpc3RbaW50XQoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGNtID0gbnAuYXJyYXkoW1swLCAxLCAyXSwgWzMsIDQsIDVdLCBbNiwgNywgOF1dKQogICAgPj4+IHBlcm0gPSBucC5hcnJheShbMiwgMCwgMV0pCiAgICA+Pj4gYXBwbHlfcGVybXV0YXRpb24oY20sIHBlcm0pCiAgICBhcnJheShbWzgsIDYsIDddLAogICAgICAgICAgIFsyLCAwLCAxXSwKICAgICAgICAgICBbNSwgMywgNF1dKQogICAgIiIiCiAgICByZXR1cm4gY21bcGVybV0udHJhbnNwb3NlKClbcGVybV0udHJhbnNwb3NlKCkKCgpkZWYgc2ltdWxhdGVkX2FubmVhbGluZygKICAgIGN1cnJlbnRfY206IG5wLm5kYXJyYXksCiAgICBjdXJyZW50X3Blcm06IE9wdGlvbmFsW25wLm5kYXJyYXldID0gTm9uZSwKICAgIHNjb3JlOiBDYWxsYWJsZSA9IGNhbGN1bGF0ZV9zY29yZSwKICAgIHN0ZXBzOiBpbnQgPSAyICogMTAgKiogNSwKICAgIHRlbXA6IGZsb2F0ID0gMTAwLjAsCiAgICBjb29saW5nX2ZhY3RvcjogZmxvYXQgPSAwLjk5LAogICAgZGV0ZXJtaW5pc3RpYzogYm9vbCA9IEZhbHNlLAopIC0+IERpY3Rbc3RyLCBBbnldOgogICAgIiIiCiAgICBPcHRpbWl6ZSBjdXJyZW50X2NtIGJ5IHJhbmRvbWx5IHN3YXBwaW5nIGVsZW1lbnRzLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGN1cnJlbnRfY20gOiBucC5uZGFycmF5CiAgICBjdXJyZW50X3Blcm0gOiBOb25lIG9yIGl0ZXJhYmxlLCBvcHRpb25hbCAoZGVmYXVsdDogTm9uZSkKICAgIHN0ZXBzIDogaW50LCBvcHRpb25hbCAoZGVmYXVsdDogMiAqIDEwKio0KQogICAgdGVtcCA6IGZsb2F0ID4gMC4wLCBvcHRpb25hbCAoZGVmYXVsdDogMTAwLjApCiAgICAgICAgVGVtcGVyYXR1cmUKICAgIGNvb2xpbmdfZmFjdG9yOiBmbG9hdCBpbiAoMCwgMSksIG9wdGlvbmFsIChkZWZhdWx0OiAwLjk5KQoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIGJlc3RfcmVzdWx0IDogRGljdFtzdHIsIEFueV0KICAgICAgICAiYmVzdF9jbSIKICAgICAgICAiYmVzdF9wZXJtIgogICAgIiIiCiAgICBpZiB0ZW1wIDw9IDAuMDoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGYidGVtcD17dGVtcH0gbmVlZHMgdG8gYmUgcG9zaXRpdmUiKQogICAgaWYgY29vbGluZ19mYWN0b3IgPD0gMC4wIG9yIGNvb2xpbmdfZmFjdG9yID49IDEuMDoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAiY29vbGluZ19mYWN0b3I9e30gbmVlZHMgdG8gYmUgaW4gdGhlIGludGVydmFsICIKICAgICAgICAgICAgIigwLCAxKSIuZm9ybWF0KGNvb2xpbmdfZmFjdG9yKQogICAgICAgICkKICAgIG4gPSBsZW4oY3VycmVudF9jbSkKICAgIGxvZ2dlci5pbmZvKGYibj17bn0iKQoKICAgICMgTG9hZCB0aGUgaW5pdGlhbCBwZXJtdXRhdGlvbgogICAgaWYgY3VycmVudF9wZXJtIGlzIE5vbmU6CiAgICAgICAgY3VycmVudF9wZXJtID0gbGlzdChyYW5nZShuKSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgY3VycmVudF9wZXJtID0gbnAuYXJyYXkoY3VycmVudF9wZXJtKQoKICAgICMgUHJlLWNhbGN1bGF0ZSB3ZWlnaHRzCiAgICB3ZWlnaHRzID0gY2FsY3VsYXRlX3dlaWdodF9tYXRyaXgobikKPHxmaW1fZW5kfD4="]
["6629d9a14cf0125e726be68ecffa0d3c7fb85ab6-3","6629d9a14cf0125e726be68ecffa0d3c7fb85ab6","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28gaW1wb3J0IGZvcm1zCmZyb20gZGphbmdvLmZvcm1zIGltcG9ydCBNb2RlbEZvcm0KZnJvbSBjcmlzcHlfZm9ybXMuaGVscGVyIGltcG9ydCBGb3JtSGVscGVyCmZyb20gY3Jpc3B5X2Zvcm1zLmxheW91dCBpbXBvcnQgU3VibWl0CmZyb20gLm1vZGVscyBpbXBvcnQgQ29tbXVuaXR5QWN0aW9uLCBEb25hdGlvbiwgSGVhbHRoU2VydmljZSwgRXN0YWJsaXNobWVudCwgVm9sdW50YXJ5U2VydmljZQoKY2xhc3MgQ29tbXVuaXR5QWN0aW9uRm9ybShNb2RlbEZvcm0pOgo8fGZpbV9ob2xlfD4KCmNsYXNzIERvbmF0aW9uRm9ybShNb2RlbEZvcm0pOgogICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgc3VwZXIoRG9uYXRpb25Gb3JtLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgc2VsZi5oZWxwZXIgPSBGb3JtSGVscGVyKCkKICAgICAgICBzZWxmLmhlbHBlci5mb3JtX2lkID0gJ2lkLWV4YW1wbGVGb3JtJwogICAgICAgIHNlbGYuaGVscGVyLmZvcm1fY2xhc3MgPSAnYmx1ZUZvcm1zJwogICAgICAgIHNlbGYuaGVscGVyLmZvcm1fbWV0aG9kID0gJ3Bvc3QnCiAgICAgICAgc2VsZi5oZWxwZXIuZm9ybV9hY3Rpb24gPSAnJwoKICAgICAgICBzZWxmLmhlbHBlci5hZGRfaW5wdXQoU3VibWl0KCdzdWJtaXQnLCAnRW52aWFyJykpCgoKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgbW9kZWwgPSBEb25hdGlvbgoKICAgICAgICBmaWVsZHMgPSAnX19hbGxfXycKICAgICAgICBsYWJlbHMgPSB7CiAgICAgICAgICAgICduYW1lJzogJ05vbWUnLAogICAgICAgICAgICAnc3RhcnRfZGF0ZSc6ICdEYXRhIGRlIEluaWNpbycsIAogICAgICAgICAgICAnY2xvc2VfZGF0ZSc6ICdEYXRhIGRlIEVuY2VycmFtZW50bycsCiAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICdEZXNjcmnDp8OjbycsIAogICAgICAgICAgICAnZXN0YWJsaXNobWVudCc6ICdFc3RhYmVsZWNpbWVudG8nLAogICAgICAgICAgICAnc3RhcnRfaG91cic6ICdIb3JhcmlvIGRlIEluaWNpbycsCiAgICAgICAgICAgICdjbG9zZV9ob3VyJzogJ0hvcmFyaW8gZGUgRmVjaGFtZW50bycKICAgICAgICB9CgogICAgICAgIHdpZGdldHMgPSB7CiAgICAgICAgICAgICdzdGFydF9kYXRlJzogZm9ybXMuRGF0ZUlucHV0KGZvcm1hdD0iJWQvJW0vJVkiKSwKICAgICAgICAgICAgJ2Nsb3NlX2RhdGUnOiBmb3Jtcy5EYXRlSW5wdXQoZm9ybWF0PSIlZC8lbS8lWSIpCiAgICAgICAgfQoKICAgICAgICBzdGFydF9kYXRlID0gZm9ybXMuRGF0ZUZpZWxkKGlucHV0X2Zvcm1hdHM9IiVkLyVtLyVZIikKICAgICAgICAgCmNsYXNzIEhlYWx0aFNlcnZpY2VGb3JtKE1vZGVsRm9ybSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzdXBlcihIZWFsdGhTZXJ2aWNlRm9ybSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQogICAgICAgIHNlbGYuaGVscGVyID0gRm9ybUhlbHBlcigpCiAgICAgICAgc2VsZi5oZWxwZXIuZm9ybV9pZCA9ICdpZC1leGFtcGxlRm9ybScKICAgICAgICBzZWxmLmhlbHBlci5mb3JtX2NsYXNzID0gJ2JsdWVGb3JtcycKICAgICAgICBzZWxmLmhlbHBlci5mb3JtX21ldGhvZCA9ICdwb3N0JwogICAgICAgIHNlbGYuaGVscGVyLmZvcm1fYWN0aW9uID0gJycKCiAgICAgICAgc2VsZi5oZWxwZXIuYWRkX2lucHV0KFN1Ym1pdCgnc3VibWl0JywgJ0VudmlhcicpKQoKCgogICAgY2xhc3MgTWV0YToKICAgICAgICBtb2RlbCA9IEhlYWx0aFNlcnZpY2UKICAgICAgICBzdGFydF9kYXRlID0gZm9ybXMuRGF0ZUZpZWxkKHdpZGdldD1mb3Jtcy53aWRnZXRzLkRhdGVJbnB1dChmb3JtYXQ9IiVkLyVtLyVZIikpCiAgICAgICAgY2xvc2VfZGF0ZSA9IGZvcm1zLkRhdGVGaWVsZCh3aWRnZXQ9Zm9ybXMud2lkZ2V0cy5EYXRlSW5wdXQoZm9ybWF0PSIlZC8lbS8lWSIpKQogICAgICAgIGZpZWxkcyA9ICdfX2FsbF9fJwogICAgICAgIGxhYmVscyA9IHsKICAgICAgICAgICAgJ25hbWUnOiAnTm9tZScsCiAgICAgICAgICAgICdzdGFydF9kYXRlJzogJ0RhdGEgZGUgSW5pY2lvJywgCiAgICAgICAgICAgICdjbG9zZV9kYXRlJzogJ0RhdGEgZGUgRW5jZXJyYW1lbnRvJywKICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogJ0Rlc2NyacOnw6NvJywgCiAgICAgICAgICAgICdlc3RhYmxpc2htZW50JzogJ0VzdGFiZWxlY2ltZW50bycsCiAgICAgICAgICAgICdpdGVtX25hbWUnOiAnTm9tZSBkbyBJdGVtICcsCiAgICAgICAgICAgICdhbW91bnQnOiAnUXVhbnRpZGFkZScKICAgICAgICB9CiAgICAgICAgd2lkZ2V0cyA9IHsKICAgICAgICAgICAgJ3N0YXJ0X2RhdGUnOiBmb3Jtcy53aWRnZXRzLkRhdGVJbnB1dChmb3JtYXQ9IiVkLyVtLyVZIiksCiAgICAgICAgICAgICdjbG9zZV9kYXRlJzogZm9ybXMud2lkZ2V0cy5EYXRlSW5wdXQoZm9ybWF0PSIlZC8lbS8lWSIpCiAgICAgICAgfQoKICAgICAgICAKY2xhc3MgRXN0YWJsaXNobWVudEZvcm0oTW9kZWxGb3JtKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHN1cGVyKEVzdGFibGlzaG1lbnRGb3JtLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgc2VsZi5oZWxwZXIgPSBGb3JtSGVscGVyKCkKICAgICAgICBzZWxmLmhlbHBlci5mb3JtX2lkID0gJ2lkLWV4YW1wbGVGb3JtJwogICAgICAgIHNlbGYuaGVscGVyLmZvcm1fY2xhc3MgPSAnYmx1ZUZvcm1zJwogICAgICAgIHNlbGYuaGVscGVyLmZvcm1fbWV0aG9kID0gJ3Bvc3QnCiAgICAgICAgc2VsZi5oZWxwZXIuZm9ybV9hY3Rpb24gPSAnJwoKICAgICAgICBzZWxmLmhlbHBlci5hZGRfaW5wdXQoU3VibWl0KCdzdWJtaXQnLCAnRW52aWFyJykpCgogICAgY2xhc3MgTWV0YToKICAgICAgICBtb2RlbCA9IEVzdGFibGlzaG1lbnQKICAgICAgICBmaWVsZHMgPSAnX19hbGxfXycKICAgICAgICBsYWJlbHMgPSB7CiAgICAgICAgICAgICduYW1lJzogJ25vbWUnLAogICAgICAgICAgICAnb3BlbkhvdXInOiAnSG9yYXJpbyBkZSBBYmVydHVyYScsCiAgICAgICAgICAgICdjbG9zZUhvdXInOiAnSG9yYXJpbyBkZSBGZWNoYW1lbnRvJywKICAgICAgICAgICAgJ3RlbGVmb25lJzogJ1RlbGVmb25lJywKICAgICAgICAgICAgJ2NpZGFkZSc6ICdDaWRhZGUnLAogICAgICAgICAgICAnYmFpcnJvJzogJ0JhaXJybycsCiAgICAgICAgICAgICdlbmRlcmVjbyc6ICdFbmRlcmXDp28nLAogICAgICAgICAgICAnY2VwJzogJ2NlcCcKICAgICAgICB9CgpjbGFzcyBWb2x1bnRhcnlTZXJ2aWNlRm9ybShNb2RlbEZvcm0pOgogICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgc3VwZXIoVm9sdW50YXJ5U2VydmljZUZvcm0sIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKICAgICAgICBzZWxmLmhlbHBlciA9IEZvcm1IZWxwZXIoKQogICAgICAgIHNlbGYuaGVscGVyLmZvcm1faWQgPSAnaWQtZXhhbXBsZUZvcm0nCiAgICAgICAgc2VsZi5oZWxwZXIuZm9ybV9jbGFzcyA9ICdibHVlRm9ybXMnCiAgICAgICAgc2VsZi5oZWxwZXIuZm9ybV9tZXRob2QgPSAncG9zdCcKICAgICAgICBzZWxmLmhlbHBlci5mb3JtX2FjdGlvbiA9ICcnCgogICAgICAgIHNlbGYuaGVscGVyLmFkZF9pbnB1dChTdWJtaXQoJ3N1Ym1pdCcsICdFbnZpYXInKSkKCgoKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgbW9kZWwgPSBWb2x1bnRhcnlTZXJ2aWNlCiAgICAgICAgZmllbGRzID0gJ19fYWxsX18nCiAgICAgICAgbGFiZWxzID0gewogICAgICAgICAgICAnbmFtZSc6ICdub21lJywKICAgICAgICAgICAgJ3RlbGVmb25lJzogJ1RlbGVmb25lIHBhcmEgY29udGF0bycsCiAgICAgICAgICAgICdjaWRhZGUnOiAnQ2lkYWRlJywKICAgICAgICAgICAgJ2JhaXJybyc6ICdCYWlycm8nLAogICAgICAgICAgICAnZW5kZXJlY28nOiAnRW5kZXJlw6dvJywKICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogJ0Rlc2NyZXZhIHF1YWlzIHNlcnZpw6dvcyB2b2x1bnTDoXJpbyB2b2PDqiBkZXNlamEgYWp1ZGFyJywgCiAgICAgICAgICAgICdlbWFpbCc6ICdFbWFpbCBwYXJhIGNvbnRhdG8nCiAgICAgICAgfQo8fGZpbV9zdWZmaXh8PgogICAgY2xhc3MgTWV0YToKICAgICAgICBtb2RlbCA9IENvbW11bml0eUFjdGlvbgogICAgICAgIGZpZWxkcyA9ICdfX2FsbF9fJwoKPHxmaW1fZW5kfD4="]
["9b9779965b1cc1aa62c0140d47677026a940fbdb-1","9b9779965b1cc1aa62c0140d47677026a940fbdb","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgQ29weXJpZ2h0IChjKSAyMDEyIENsb3VkZXJhLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKIyBUZXN0cyBmb3IgYWdncmVnYXRpb24gd2l0aCBjb2RlZ2VuIGRpc2FibGVkCgppbXBvcnQgcHl0ZXN0CmZyb20gdGVzdHMuY29tbW9uLnRlc3RfdmVjdG9yIGltcG9ydCAqCmZyb20gdGVzdHMuY29tbW9uLmltcGFsYV90ZXN0X3N1aXRlIGltcG9ydCBJbXBhbGFUZXN0U3VpdGUKZnJvbSB0ZXN0cy5jb21tb24udGVzdF9kaW1lbnNpb25zIGltcG9ydCBjcmVhdGVfZXhlY19vcHRpb25fZGltZW5zaW9uCgpjbGFzcyBUZXN0QWdncmVnYXRpb25RdWVyaWVzKEltcGFsYVRlc3RTdWl0ZSk6CiAgIiIiUnVuIHRoZSBhZ2dyZWdhdGlvbiB0ZXN0IHN1aXRlLCB3aXRoIGNvZGVnZW4gZW5hYmxlZCBhbmQgZGlzYWJsZWQsIHRvIGV4ZXJjaXNlIG91cgogIG5vbi1jb2RlZ2VuIGNvZGUiIiIKICBAY2xhc3NtZXRob2QKICBkZWYgZ2V0X3dvcmtsb2FkKHNlbGYpOgogICAgcmV0dXJuICdmdW5jdGlvbmFsLXF1ZXJ5JwoKICBAY2xhc3NtZXRob2QKPHxmaW1faG9sZXw+CiAgICAgIGNyZWF0ZV9leGVjX29wdGlvbl9kaW1lbnNpb24oZGlzYWJsZV9jb2RlZ2VuX29wdGlvbnM9W0ZhbHNlLCBUcnVlXSkpCgogIEBweXRlc3QubWFyay5leGVjdXRlX3NlcmlhbGx5CiAgZGVmIHRlc3Rfbm9uX2NvZGVnZW5fdGlueWludF9ncm91cGluZyhzZWxmLCB2ZWN0b3IpOgogICAgIyBSZWdyZXNzaW9uIGZvciBJTVBBTEEtOTAxLiBUaGUgdGVzdCBpbmNsdWRlcyBhbiBJTlNFUlQgc3RhdGVtZW50LCBzbyBjYW4gb25seSBiZSBydW4KICAgICMgb24gSU5TRVJULWFibGUgZm9ybWF0cyAtIHRleHQgb25seSBpbiB0aGlzIGNhc2UsIHNpbmNlIHRoZSBidWcgZG9lc24ndCBkZXBlbmQgb24gdGhlCiAgICAjIGZpbGUgZm9ybWF0LgogICAgaWYgdmVjdG9yLmdldF92YWx1ZSgndGFibGVfZm9ybWF0JykuZmlsZV9mb3JtYXQgPT0gJ3RleHQnIFwKICAgICAgICBhbmQgdmVjdG9yLmdldF92YWx1ZSgndGFibGVfZm9ybWF0JykuY29tcHJlc3Npb25fY29kZWMgPT0gJ25vbmUnOgogICAgICBzZWxmLnJ1bl90ZXN0X2Nhc2UoJ1F1ZXJ5VGVzdC9hZ2dyZWdhdGlvbl9ub19jb2RlZ2VuX29ubHknLCB2ZWN0b3IpCgogIGRlZiB0ZXN0X2FnZ3JlZ2F0aW9uKHNlbGYsIHZlY3Rvcik6CiAgICBpZiB2ZWN0b3IuZ2V0X3ZhbHVlKCd0YWJsZV9mb3JtYXQnKS5maWxlX2Zvcm1hdCA9PSAnaGJhc2UnOgogICAgICBweXRlc3QueGZhaWwocmVhc29uPSJJTVBBTEEtMjgzIC0gc2VsZWN0IGNvdW50KCopIHByb2R1Y2VzIGluY29uc2lzdGVudCByZXN1bHRzIikKICAgIHNlbGYucnVuX3Rlc3RfY2FzZSgnUXVlcnlUZXN0L2FnZ3JlZ2F0aW9uJywgdmVjdG9yKQo8fGZpbV9zdWZmaXh8PgogIGRlZiBhZGRfdGVzdF9kaW1lbnNpb25zKGNscyk6CiAgICBzdXBlcihUZXN0QWdncmVnYXRpb25RdWVyaWVzLCBjbHMpLmFkZF90ZXN0X2RpbWVuc2lvbnMoKQoKICAgIGNscy5UZXN0TWF0cml4LmFkZF9kaW1lbnNpb24oCjx8ZmltX2VuZHw+"]
["bd0368414ab40f91df33590514abe1342ff71b01-2","bd0368414ab40f91df33590514abe1342ff71b01","PHxmaW1fcHJlZml4fD4KZnJvbSBhYmMgaW1wb3J0IEFCQywgYWJzdHJhY3RtZXRob2QKCmNsYXNzIElXZWFwb24oQUJDKToKICAgICIiIuustOq4sCDtgbTrnpjsiqQiIiIKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIHVzZV9vbihzZWxmLCBvdGhlcl9jaGFyYWN0ZXIpOgogICAgICAgIHBhc3MKCgpjbGFzcyBTd29yZChJV2VhcG9uKToKICAgICIiIuqygCDtgbTrnpjsiqQiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYW1hZ2UpOgogICAgICAgIHNlbGYuZGFtYWdlID0gZGFtYWdlCgogICAgZGVmIHVzZV9vbihzZWxmLCBvdGhlcl9jaGFyYWN0ZXIpOgogICAgICAgICIiIuqygCDsgqzsmqkg66mU7IaM65OcIiIiCiAgICAgICAgb3RoZXJfY2hhcmFjdGVyLmdldF9kYW1hZ2Uoc2VsZi5kYW1hZ2UpCgoKY2xhc3MgR3VuKElXZWFwb24pOgogICAgIiIi7LSdIO2BtOuemOyKpCIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhbWFnZSwgbnVtX3JvdW5kcyk6CiAgICAgICAgc2VsZi5kYW1hZ2UgPSBkYW1hZ2UKICAgICAgICBzZWxmLm51bV9yb3VuZHMgPSBudW1fcm91bmRzICAgICMg7LSd7JWMIOqwr+yImAoKICAgIGRlZiB1c2Vfb24oc2VsZiwgb3RoZXJfY2hhcmFjdGVyKToKICAgICAgICAiIiLstJ0g7IKs7JqpIOuplOyGjOuTnCIiIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgaWYgc2VsZi5udW1fcm91bmRzID4gMDoKICAgICAgICAgICAgb3RoZXJfY2hhcmFjdGVyLmdldF9kYW1hZ2Uoc2VsZi5kYW1hZ2UpCiAgICAgICAgICAgIHNlbGYubnVtX3JvdW5kcyAtPSAxCiAgICAgICAgZWxzZToKPHxmaW1fZW5kfD4="]
["59a46d2d9475b07f5f16f09f3235cd370c41d4f0-2","59a46d2d9475b07f5f16f09f3235cd370c41d4f0","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucywgbW9kZWxzCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgKCdncm91cHMnLCAnMDAxNl9hdHRhY2hlZGZpbGUnKSwKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIG1vZGVsX25hbWU9J2ZpbGVjb21tZW50JywKICAgICAgICAgICAgbmFtZT0nYmFzZWNvbW1lbnRfcHRyJywKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuRGVsZXRlTW9kZWwoCiAgICAgICAgICAgIG5hbWU9J0ZpbGVDb21tZW50JywKICAgICAgICApLAogICAgXQo8fGZpbV9zdWZmaXh8PgogICAgXQoKICAgIG9wZXJhdGlvbnMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5SZW1vdmVGaWVsZCgKPHxmaW1fZW5kfD4="]
["abd1d855344b9900a7a76a622aa4964ad31bc5aa-2","abd1d855344b9900a7a76a622aa4964ad31bc5aa","PHxmaW1fcHJlZml4fD4KCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCmltcG9ydCByYW5kb20KCmltcG9ydCBudW1weSBhcyBucAoKaW1wb3J0IGxvZ2dpbmcKCmZyb20ga2VyYXMubW9kZWxzIGltcG9ydCBTZXF1ZW50aWFsCmZyb20ga2VyYXMubGF5ZXJzIGltcG9ydCBBY3RpdmF0aW9uLCBEZW5zZQpmcm9tIGtlcmFzIGltcG9ydCBiYWNrZW5kIGFzIEsKCmNsYXNzIERRTkFnZW50OgoKCWRlZiBfX2luaXRfXyhzZWxmLCBzdGF0ZV9zaXplLCBhY3Rpb25fc2l6ZSk6CgkJc2VsZi5zdGF0ZV9zaXplID0gc3RhdGVfc2l6ZQoJCXNlbGYuYWN0aW9uX3NpemUgPSBhY3Rpb25fc2l6ZQoKCQlzZWxmLm1lbW9yeSA9IGRlcXVlKG1heGxlbj0yMDAwKQoKCQlzZWxmLmdhbW1hID0gMC45NSAjIGRpc2NvdW50IHJhdGUKCQlzZWxmLmVwc2lsb24gPSAxICMgZXhwbG9yYXRpb24gcmF0ZQoJCXNlbGYuZXBzaWxvbl9taW4gPSAwLjAxCgkJc2VsZi5lcHNpbG9uX2RlY2F5ID0gMC45OTUKCQlzZWxmLmxlYXJuaW5nX3JhdGUgPSAwLjAwMQoKCQlzZWxmLm1vZGVsID0gc2VsZi5fYnVpbGRfbW9kZWwoKQoKCWRlZiBfYnVpbGRfbW9kZWwoc2VsZik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCQltb2RlbCA9IFNlcXVlbnRpYWwoKQoJCW1vZGVsLmFkZChEZW5zZShzZWxmLmFjdGlvbl9zaXplLCBhY3RpdmF0aW9uPSdzb2Z0bWF4JywgaW5wdXRfc2hhcGU9KHNlbGYuc3RhdGVfc2l6ZSwpKSkKCQltb2RlbC5zdW1tYXJ5KCkKCjx8ZmltX2VuZHw+"]
["599745e9e72911401fc325a5a7095844269cad42-4","599745e9e72911401fc325a5a7095844269cad42","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwgZmluZF9wYWNrYWdlcwoKc2V0dXAoCiAgICBhdXRob3I9J0NhbHZpbiBNY0NveScsCiAgICBhdXRob3JfZW1haWw9J2NhbHZpbi5tY2NveUBwcm90b25tYWlsLmNvbScsCiAgICBjbGFzc2lmaWVycz1bJ0RldmVsb3BtZW50IFN0YXR1cyA6OiA0IC0gQmV0YScsCiAgICAgICAgICAgICAgICAgJ0ludGVuZGVkIEF1ZGllbmNlIDo6IERldmVsb3BlcnMnLAogICAgICAgICAgICAgICAgICdUb3BpYyA6OiBTZWN1cml0eSA6OiBDcnlwdG9ncmFwaHknLAogICAgICAgICAgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNSVQgTGljZW5zZScsCiAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyJywKICAgICAgICAgICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNycsCiAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzJywKICAgICAgICAgICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMuNCcsCiAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzLjUnLAogICAgICAgICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy42J10sCiAgICBkZXNjcmlwdGlvbj0iSW1wbGVtZW50YXRpb25zIG9mIHRoZSBOU0EncyBTaW1vbiBhbmQgU3BlY2sgQmxvY2sgQ2lwaGVycyIsCiAgICBpbnN0YWxsX3JlcXVpcmVzPVtdLAo8fGZpbV9ob2xlfD4KICAgIGtleXdvcmRzPSdjcnlwdG9ncmFwaHkgY2lwaGVyIGVuY3J5cHRpb24gZGVjcnlwdGlvbiBjcnlwdG8nLAogICAgbmFtZT0nc2ltb25zcGVja2NpcGhlcnMnLAogICAgcGFja2FnZXM9ZmluZF9wYWNrYWdlcyhpbmNsdWRlPVsnc2ltb24nLCAnc3BlY2snXSwgZXhjbHVkZT1bJ3Rlc3RzKiddKSwKICAgIHNldHVwX3JlcXVpcmVzPVsncHl0ZXN0LXJ1bm5lciddLAogICAgdGVzdF9zdWl0ZT0ndGVzdHMnLAogICAgdGVzdHNfcmVxdWlyZT1bJ3B5dGVzdCddLAogICAgdXJsPSdodHRwczovL2dpdGh1Yi5jb20vaW5tY20vU2ltb25fU3BlY2tfQ2lwaGVycy90cmVlL21hc3Rlci9QeXRob24vc2ltb25zcGVja2NpcGhlcnMnLAogICAgZG93bmxvYWRfdXJsPSdodHRwczovL2dpdGh1Yi5jb20vaW5tY20vU2ltb25fU3BlY2tfQ2lwaGVycy9hcmNoaXZlLzEuMC4wLnRhci5neicsCiAgICB2ZXJzaW9uPScxLjAuMCcsCiAgICB6aXBfc2FmZT1GYWxzZSwKKQo8fGZpbV9zdWZmaXh8PgogICAgbGljZW5zZT0nTUlUJywKICAgIGxvbmdfZGVzY3JpcHRpb25fY29udGVudF90eXBlPSd0ZXh0L21hcmtkb3duJywKICAgIGxvbmdfZGVzY3JpcHRpb249b3BlbignUmVhZG1lLm1kJykucmVhZCgpLAogICAgaW5jbHVkZV9wYWNrYWdlX2RhdGE9VHJ1ZSwKPHxmaW1fZW5kfD4="]
["9b8fc965775e4704e2429b9b016fa7900411b51b-4","9b8fc965775e4704e2429b9b016fa7900411b51b","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc9dXRmOAojIENvcHlyaWdodCAxOTk5LTIwMTcgQWxpYmFiYSBHcm91cC4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCmltcG9ydCBjb3B5CmltcG9ydCBvcwppbXBvcnQgcGlja2xlCmZyb20gaGFzaGxpYiBpbXBvcnQgc2hhMQoKaW1wb3J0IGVudgppbXBvcnQgbG9nCjx8ZmltX2hvbGV8PgogICAgICAgIHNlbGYucGF0aCA9IGVudi5tZXRhX3BhdGgKICAgICAgICBzZWxmLnRhZyA9IHRhZwoKICAgIGRlZiBsb2FkKHNlbGYpOgogICAgICAgIHRyeToKICAgICAgICAgICAgbWV0YV9jYWNoZSA9IGNvcHkuY29weShlbnYubWV0YV9jYWNoZSkKICAgICAgICAgICAgZmQgPSBvcy5vcGVuKHNlbGYucGF0aCwgb3MuT19SRE9OTFkgfCBvcy5PX0NSRUFULCA0MjApCiAgICAgICAgICAgIHdpdGggb3MuZmRvcGVuKGZkLCAicmIiKSBhcyBtZXRhX2ZpbGU6CiAgICAgICAgICAgICAgICBkYXRhX3NpZ24gPSBtZXRhX2ZpbGUucmVhZCg0MCkKICAgICAgICAgICAgICAgIGFzc2VydCBsZW4oZGF0YV9zaWduKSA9PSA0MCwgImRhdGFfc2lnbiBsZW5ndGggbm90IGVxdWFsIDQwIgogICAgICAgICAgICAgICAgZGF0YV9zaWduID0gZGF0YV9zaWduLmRlY29kZSgiYXNjaWkiKQogICAgICAgICAgICAgICAgY29udCA9IG1ldGFfZmlsZS5yZWFkKG9zLnBhdGguZ2V0c2l6ZShzZWxmLnBhdGgpIC0gNDApCiAgICAgICAgICAgICAgICBvYmogPSBwaWNrbGUubG9hZHMoY29udCkKICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBkaWN0KSBhbmQgb2JqOgogICAgICAgICAgICAgICAgICAgIGNvbnRfc2hhMSA9IHNoYTEoKQogICAgICAgICAgICAgICAgICAgIGNvbnRfc2hhMS51cGRhdGUoY29udCkKICAgICAgICAgICAgICAgICAgICBpZiBkYXRhX3NpZ24gPT0gY29udF9zaGExLmhleGRpZ2VzdCgpOgogICAgICAgICAgICAgICAgICAgICAgICBtZXRhX2NhY2hlLnVwZGF0ZShvYmopCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmNsaWVudF9sb2dnZXIud2FybigibWV0YSBzaWduIG5vdCBtYXRjaCxyZWFsOiVzIGJ1dCBleHBlY3Q6JXMgZm9yIHRhZzolcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udF9zaGExLmhleGRpZ2VzdCgpLCBkYXRhX3NpZ24sIHNlbGYudGFnKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgbG9nLmNsaWVudF9sb2dnZXIuZXhjZXB0aW9uKCJyZWFkIG1ldGEgZmlsZSBmYWlsIGZvciB0YWc6JXMiLCBzZWxmLnRhZykKICAgICAgICBlbnYubWV0YV9jYWNoZSA9IG1ldGFfY2FjaGUKCiAgICBkZWYgZHVtcChzZWxmKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZkID0gb3Mub3BlbihzZWxmLnBhdGgsIG9zLk9fV1JPTkxZIHwgb3MuT19UUlVOQyB8IG9zLk9fQ1JFQVQsIDQyMCkKICAgICAgICAgICAgd2l0aCBvcy5mZG9wZW4oZmQsICJ3YiIpIGFzIG1ldGFfZmlsZToKICAgICAgICAgICAgICAgIGNvbnRfc2hhMSA9IHNoYTEoKQogICAgICAgICAgICAgICAgY29udCA9IHBpY2tsZS5kdW1wcyhlbnYubWV0YV9jYWNoZSkKICAgICAgICAgICAgICAgIGNvbnRfc2hhMS51cGRhdGUoY29udCkKICAgICAgICAgICAgICAgIGRhdGFfc2lnbiA9IGNvbnRfc2hhMS5oZXhkaWdlc3QoKQogICAgICAgICAgICAgICAgbWV0YV9maWxlLndyaXRlKGRhdGFfc2lnbi5lbmNvZGUoImFzY2lpIikpCiAgICAgICAgICAgICAgICBtZXRhX2ZpbGUud3JpdGUoY29udCkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIGxvZy5jbGllbnRfbG9nZ2VyLmV4Y2VwdGlvbigid3JpdGUgbWV0YSBmaWxlIGZhaWwgZm9yIHRhZzolcyIsIHNlbGYudGFnKQo8fGZpbV9zdWZmaXh8PgoKCmNsYXNzIE1ldGFGaWxlKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgdGFnKToKPHxmaW1fZW5kfD4="]
["1fa09d39bb66e23228db0748848b5124b708ed7f-1","1fa09d39bb66e23228db0748848b5124b708ed7f","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiInN5c2Rlc2NycGFyc2VyLmNpc2NvX2lvc3hlLiIiIgoKaW1wb3J0IHJlCmZyb20gc3lzZGVzY3JwYXJzZXIuY2lzY28gaW1wb3J0IENpc2NvCgoKIyBweWxpbnQ6IGRpc2FibGU9bm8tbWVtYmVyCmNsYXNzIENpc2NvQVNBKENpc2NvKToKICAgICIiIkNsYXNzIENpc2NvQVNBLgoKICAgIFNOTVAgc3lzRGVzY3IgZm9yIENpc2NvQVNBLgoKICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYXcpOgogICAgICAgICIiIkNvbnN0cnVjdG9yLiIiIgogICAgICAgIHN1cGVyKENpc2NvQVNBLCBzZWxmKS5fX2luaXRfXyhyYXcpCiAgICAgICAgc2VsZi5vcyA9ICdBZGFwdGl2ZV9TZWN1cml0eV9BcHBsaWFuY2UnCjx8ZmltX2hvbGV8PgogICAgZGVmIHBhcnNlKHNlbGYpOgogICAgICAgICIiIlBhcnNlLiIiIgogICAgICAgIHJlZ2V4ID0gKHInQ2lzY28gQWRhcHRpdmUgU2VjdXJpdHkgQXBwbGlhbmNlICcKICAgICAgICAgICAgICAgICByJ1ZlcnNpb24gKFxkLiopJykKICAgICAgICBwYXQgPSByZS5jb21waWxlKHJlZ2V4KQogICAgICAgIHJlcyA9IHBhdC5zZWFyY2goc2VsZi5yYXcpCiAgICAgICAgaWYgcmVzOgogICAgICAgICAgICBzZWxmLnZlcnNpb24gPSByZXMuZ3JvdXAoMSkKICAgICAgICAgICAgcmV0dXJuIHNlbGYKCiAgICAgICAgcmV0dXJuIEZhbHNlCgoKCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5tb2RlbCA9IHNlbGYuVU5LTk9XTgogICAgICAgIHNlbGYudmVyc2lvbiA9IHNlbGYuVU5LTk9XTgoKPHxmaW1fZW5kfD4="]
["bd4128385b28ed3670730f290138c5b1b5a835c9-4","bd4128385b28ed3670730f290138c5b1b5a835c9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdApmcm9tIGRqYW5nby51cmxzIGltcG9ydCByZXZlcnNlCgpmcm9tIC4uLi5jYWNoZS50ZXN0IGltcG9ydCBhc3NlcnRfaW52YWxpZGF0ZXNfY2FjaGUKZnJvbSAuLi4udGVzdCBpbXBvcnQgYXNzZXJ0X2NvbnRhaW5zLCBhc3NlcnRfaGFzX2Vycm9yX21lc3NhZ2UKZnJvbSAuLi4gaW1wb3J0IFRIRU1FX0NBQ0hFCgoKQHB5dGVzdC5maXh0dXJlCmRlZiBjcmVhdGVfbGluayh0aGVtZSk6CiAgICByZXR1cm4gcmV2ZXJzZSgibWlzYWdvOmFkbWluOnRoZW1lczpuZXctY3NzLWZpbGUiLCBrd2FyZ3M9eyJwayI6IHRoZW1lLnBrfSkKCgpAcHl0ZXN0LmZpeHR1cmUKZGVmIGVkaXRfbGluayh0aGVtZSwgY3NzKToKICAgIHJldHVybiByZXZlcnNlKAogICAgICAgICJtaXNhZ286YWRtaW46dGhlbWVzOmVkaXQtY3NzLWZpbGUiLCBrd2FyZ3M9eyJwayI6IHRoZW1lLnBrLCAiY3NzX3BrIjogY3NzLnBrfQogICAgKQoKCkBweXRlc3QuZml4dHVyZQpkZWYgZGF0YSgpOgogICAgcmV0dXJuIHsibmFtZSI6ICJ0ZXN0LmNzcyIsICJzb3VyY2UiOiAiLnBhZ2UtaGVhZGVyIHsgcGFkZGluZzogMH0ifQoKCmRlZiB0ZXN0X2Nzc19jcmVhdGlvbl9mb3JtX2lzX2Rpc3BsYXllZChhZG1pbl9jbGllbnQsIGNyZWF0ZV9saW5rKToKICAgIHJlc3BvbnNlID0gYWRtaW5fY2xpZW50LmdldChjcmVhdGVfbGluaykKICAgIGFzc2VydCByZXNwb25zZS5zdGF0dXNfY29kZSA9PSAyMDAKICAgIGFzc2VydF9jb250YWlucyhyZXNwb25zZSwgIk5ldyBDU1MiKQoKCmRlZiB0ZXN0X2Nzc19jYW5fYmVfY3JlYXRlZCh0aGVtZSwgYWRtaW5fY2xpZW50LCBjcmVhdGVfbGluaywgZGF0YSk6CiAgICBhZG1pbl9jbGllbnQucG9zdChjcmVhdGVfbGluaywgZGF0YSkKICAgIGFzc2VydCB0aGVtZS5jc3MuZXhpc3RzKCkKCgpkZWYgdGVzdF9jc3NfaXNfY3JlYXRlZF93aXRoX2VudGVyZWRfbmFtZSh0aGVtZSwgYWRtaW5fY2xpZW50LCBjcmVhdGVfbGluaywgZGF0YSk6CiAgICBhZG1pbl9jbGllbnQucG9zdChjcmVhdGVfbGluaywgZGF0YSkKICAgIGFzc2VydCB0aGVtZS5jc3MubGFzdCgpLm5hbWUgPT0gZGF0YVsibmFtZSJdCgoKZGVmIHRlc3RfY3JlYXRlZF9zb3VyY2VfZmlsZV9jb250YWluc19jc3NfZW50ZXJlZF9ieV91c2VyKAogICAgdGhlbWUsIGFkbWluX2NsaWVudCwgY3JlYXRlX2xpbmssIGRhdGEKKToKICAgIGFkbWluX2NsaWVudC5wb3N0KGNyZWF0ZV9saW5rLCBkYXRhKQogICAgY3NzID0gdGhlbWUuY3NzLmxhc3QoKQogICAgYXNzZXJ0IGNzcy5zb3VyY2VfZmlsZS5yZWFkKCkuZGVjb2RlKCJ1dGYtOCIpID09IGRhdGFbInNvdXJjZSJdCgoKZGVmIHRlc3Rfc291cmNlX2ZpbGVfaXNfY3JlYXRlZF9pbl90aGVtZV9kaXJlY3RvcnkoCiAgICB0aGVtZSwgYWRtaW5fY2xpZW50LCBjcmVhdGVfbGluaywgZGF0YQopOgogICAgYWRtaW5fY2xpZW50LnBvc3QoY3JlYXRlX2xpbmssIGRhdGEpCiAgICBjc3MgPSB0aGVtZS5jc3MubGFzdCgpCiAgICBhc3NlcnQgdGhlbWUuZGlybmFtZSBpbiBzdHIoY3NzLnNvdXJjZV9maWxlKQoKCmRlZiB0ZXN0X2NyZWF0ZWRfc291cmNlX2ZpbGVfbmFtZV9zdGFydHNfd2l0aF9hc3NldF9uYW1lKAogICAgdGhlbWUsIGFkbWluX2NsaWVudCwgY3JlYXRlX2xpbmssIGRhdGEKKToKICAgIGFkbWluX2NsaWVudC5wb3N0KGNyZWF0ZV9saW5rLCBkYXRhKQogICAgY3NzID0gdGhlbWUuY3NzLmxhc3QoKQogICAgc291cmNlX2ZpbGVuYW1lID0gc3RyKGNzcy5zb3VyY2VfZmlsZSkuc3BsaXQoIi8iKVstMV0KICAgIGFzc2VydCBzb3VyY2VfZmlsZW5hbWUuc3RhcnRzd2l0aCgidGVzdC4iKQoKCmRlZiB0ZXN0X2NyZWF0ZWRfc291cmNlX2ZpbGVfaGFzX2Nzc19leHRlbnNpb24odGhlbWUsIGFkbWluX2NsaWVudCwgY3JlYXRlX2xpbmssIGRhdGEpOgogICAgYWRtaW5fY2xpZW50LnBvc3QoY3JlYXRlX2xpbmssIGRhdGEpCiAgICBjc3MgPSB0aGVtZS5jc3MubGFzdCgpCiAgICBzb3VyY2VfZmlsZW5hbWUgPSBzdHIoY3NzLnNvdXJjZV9maWxlKS5zcGxpdCgiLyIpWy0xXQogICAgYXNzZXJ0IHNvdXJjZV9maWxlbmFtZS5lbmRzd2l0aCgiLmNzcyIpCgoKZGVmIHRlc3RfY3JlYXRlZF9zb3VyY2VfZmlsZV9pc19oYXNoZWQodGhlbWUsIGFkbWluX2NsaWVudCwgY3JlYXRlX2xpbmssIGRhdGEpOgogICAgYWRtaW5fY2xpZW50LnBvc3QoY3JlYXRlX2xpbmssIGRhdGEpCiAgICBjc3MgPSB0aGVtZS5jc3MubGFzdCgpCiAgICBzb3VyY2VfZmlsZW5hbWUgPSBzdHIoY3NzLnNvdXJjZV9maWxlKS5zcGxpdCgiLyIpWy0xXQogICAgYXNzZXJ0ICIuJXMuIiAlIGNzcy5zb3VyY2VfaGFzaCBpbiBzb3VyY2VfZmlsZW5hbWUKCgpkZWYgdGVzdF9jc3NfY3JlYXRpb25fZmFpbHNfaWZfbmFtZV9pc19ub3RfZ2l2ZW4oCiAgICB0aGVtZSwgYWRtaW5fY2xpZW50LCBjcmVhdGVfbGluaywgZGF0YQopOgogICAgZGF0YVsibmFtZSJdID0gIiIKICAgIGFkbWluX2NsaWVudC5wb3N0KGNyZWF0ZV9saW5rLCBkYXRhKQogICAgYXNzZXJ0IG5vdCB0aGVtZS5jc3MuZXhpc3RzKCkKCgpkZWYgdGVzdF9jc3NfY3JlYXRpb25fZmFpbHNfaWZfbmFtZV9pc19ub3RfdmFsaWQoCiAgICB0aGVtZSwgYWRtaW5fY2xpZW50LCBjcmVhdGVfbGluaywgZGF0YQopOgogICAgZGF0YVsibmFtZSJdID0gIm1pc3NpbmctZXh0ZW5zaW9uIgogICAgYWRtaW5fY2xpZW50LnBvc3QoY3JlYXRlX2xpbmssIGRhdGEpCiAgICBhc3NlcnQgbm90IHRoZW1lLmNzcy5leGlzdHMoKQoKCmRlZiB0ZXN0X2Nzc19jcmVhdGlvbl9mYWlsc19pZl9uYW1lX2lzX2FscmVhZHlfdGFrZW5fYnlfb3RoZXJfY3NzX2luX3RoZW1lKAogICAgdGhlbWUsIGFkbWluX2NsaWVudCwgY3JlYXRlX2xpbmssIGRhdGEsIGNzcwopOgogICAgZGF0YVsibmFtZSJdID0gY3NzLm5hbWUKICAgIGFkbWluX2NsaWVudC5wb3N0KGNyZWF0ZV9saW5rLCBkYXRhKQogICAgYXNzZXJ0IHRoZW1lLmNzcy5jb3VudCgpID09IDEKCgpkZWYgdGVzdF9jc3NfbmFtZV91c2FnZV9jaGVja19wYXNzZXNzX2lmX25hbWVfaXNfdXNlZF9ieV9vdGhlcl90aGVtZV9jc3MoCiAgICBvdGhlcl90aGVtZSwgYWRtaW5fY2xpZW50LCBkYXRhLCBjc3MKKToKICAgIGNyZWF0ZV9saW5rID0gcmV2ZXJzZSgKICAgICAgICAibWlzYWdvOmFkbWluOnRoZW1lczpuZXctY3NzLWZpbGUiLCBrd2FyZ3M9eyJwayI6IG90aGVyX3RoZW1lLnBrfQogICAgKQogICAgZGF0YVsibmFtZSJdID0gY3NzLm5hbWUKICAgIGFkbWluX2NsaWVudC5wb3N0KGNyZWF0ZV9saW5rLCBkYXRhKQogICAgYXNzZXJ0IG90aGVyX3RoZW1lLmNzcy5leGlzdHMoKQoKCmRlZiB0ZXN0X2Nzc19jcmVhdGlvbl9mYWlsc19pZl9zb3VyY2VfaXNfbm90X2dpdmVuKAogICAgdGhlbWUsIGFkbWluX2NsaWVudCwgY3JlYXRlX2xpbmssIGRhdGEKKToKICAgIGRhdGFbInNvdXJjZSJdID0gIiIKICAgIGFkbWluX2NsaWVudC5wb3N0KGNyZWF0ZV9saW5rLCBkYXRhKQogICAgYXNzZXJ0IG5vdCB0aGVtZS5jc3MuZXhpc3RzKCkKCgpkZWYgdGVzdF9jc3NfZmlsZV93aXRob3V0X3VybF9pc19jcmVhdGVkX3dpdGhvdXRfcmVidWlsZGluZ19mbGFnKAogICAgdGhlbWUsIGFkbWluX2NsaWVudCwgY3JlYXRlX2xpbmssIGRhdGEKKToKICAgIGFkbWluX2NsaWVudC5wb3N0KGNyZWF0ZV9saW5rLCBkYXRhKQogICAgY3NzID0gdGhlbWUuY3NzLmxhc3QoKQogICAgYXNzZXJ0IG5vdCBjc3Muc291cmNlX25lZWRzX2J1aWxkaW5nCgoKZGVmIHRlc3RfY3NzX2ZpbGVfd2l0aF9pbWFnZV91cmxfaXNfY3JlYXRlZF93aXRoX3JlYnVpbGRpbmdfZmxhZygKICAgIHRoZW1lLCBhZG1pbl9jbGllbnQsIGNyZWF0ZV9saW5rLCBkYXRhLCBpbWFnZQopOgogICAgZGF0YVsic291cmNlIl0gPSAiYm9keSB7IGJhY2tncm91bmQtaW1hZ2U6IHVybCgvc3RhdGljLyVzKTsgfSIgJSBpbWFnZS5uYW1lCiAgICBhZG1pbl9jbGllbnQucG9zdChjcmVhdGVfbGluaywgZGF0YSkKICAgIGNzcyA9IHRoZW1lLmNzcy5sYXN0KCkKICAgIGFzc2VydCBjc3Muc291cmNlX25lZWRzX2J1aWxkaW5nCgoKZGVmIHRlc3RfY3JlYXRpbmdfY3NzX2ZpbGVfd2l0aG91dF9pbWFnZV91cmxfZG9lc250X3RyaWdnZXJfc2luZ2xlX2Nzc19maWxlX3JlYnVpbGQoCiAgICB0aGVtZSwgYWRtaW5fY2xpZW50LCBjcmVhdGVfbGluaywgZGF0YSwgaW1hZ2UsIG1vY2tfYnVpbGRfc2luZ2xlX3RoZW1lX2NzcwopOgogICAgYWRtaW5fY2xpZW50LnBvc3QoY3JlYXRlX2xpbmssIGRhdGEpCiAgICBtb2NrX2J1aWxkX3NpbmdsZV90aGVtZV9jc3MuYXNzZXJ0X25vdF9jYWxsZWQoKQoKCmRlZiB0ZXN0X2NyZWF0aW5nX2Nzc19maWxlX3dpdGhfaW1hZ2VfdXJsX3RyaWdnZXJzX3NpbmdsZV9jc3NfZmlsZV9yZWJ1aWxkKAogICAgdGhlbWUsIGFkbWluX2NsaWVudCwgY3JlYXRlX2xpbmssIGRhdGEsIGltYWdlLCBtb2NrX2J1aWxkX3NpbmdsZV90aGVtZV9jc3MKKToKICAgIGRhdGFbInNvdXJjZSJdID0gImJvZHkgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL3N0YXRpYy8lcyk7IH0iICUgaW1hZ2UubmFtZQogICAgYWRtaW5fY2xpZW50LnBvc3QoY3JlYXRlX2xpbmssIGRhdGEpCiAgICBjc3MgPSB0aGVtZS5jc3MubGFzdCgpCgogICAgbW9ja19idWlsZF9zaW5nbGVfdGhlbWVfY3NzLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGNzcy5waykKCgpkZWYgdGVzdF9jc3NfZmlsZV9pc19jcmVhdGVkX3dpdGhfY29ycmVjdF9vcmRlcigKICAgIHRoZW1lLCBhZG1pbl9jbGllbnQsIGNyZWF0ZV9saW5rLCBjc3NfbGluaywgZGF0YQopOgogICAgYWRtaW5fY2xpZW50LnBvc3QoY3JlYXRlX2xpbmssIGRhdGEpCiAgICBjc3MgPSB0aGVtZS5jc3MuZ2V0KG5hbWU9ZGF0YVsibmFtZSJdKQogICAgYXNzZXJ0IGNzcy5vcmRlciA9PSAxCgoKZGVmIHRlc3RfY3JlYXRpbmdfY3NzX2ZpbGVfaW52YWxpZGF0ZXNfdGhlbWVfY2FjaGUoYWRtaW5fY2xpZW50LCBjcmVhdGVfbGluaywgZGF0YSk6CiAgICB3aXRoIGFzc2VydF9pbnZhbGlkYXRlc19jYWNoZShUSEVNRV9DQUNIRSk6CiAgICAgICAgYWRtaW5fY2xpZW50LnBvc3QoY3JlYXRlX2xpbmssIGRhdGEpCgoKZGVmIHRlc3RfZXJyb3JfbWVzc2FnZV9pc19zZXRfaWZfdXNlcl9hdHRlbXB0c190b19jcmVhdGVfY3NzX2luX2RlZmF1bHRfdGhlbWUoCiAgICBkZWZhdWx0X3RoZW1lLCBhZG1pbl9jbGllbnQKKToKICAgIGNyZWF0ZV9saW5rID0gcmV2ZXJzZSgKICAgICAgICAibWlzYWdvOmFkbWluOnRoZW1lczpuZXctY3NzLWZpbGUiLCBrd2FyZ3M9eyJwayI6IGRlZmF1bHRfdGhlbWUucGt9CiAgICApCiAgICByZXNwb25zZSA9IGFkbWluX2NsaWVudC5nZXQoY3JlYXRlX2xpbmspCiAgICBhc3NlcnRfaGFzX2Vycm9yX21lc3NhZ2UocmVzcG9uc2UpCgoKZGVmIHRlc3RfZXJyb3JfbWVzc2FnZV9pc19zZXRfaWZfdXNlcl9hdHRlbXB0c190b19jcmVhdGVfY3NzX2luX25vbmV4aXN0aW5nX3RoZW1lKAogICAgbm9uZXhpc3RpbmdfdGhlbWUsIGFkbWluX2NsaWVudAopOgogICAgY3JlYXRlX2xpbmsgPSByZXZlcnNlKAogICAgICAgICJtaXNhZ286YWRtaW46dGhlbWVzOm5ldy1jc3MtZmlsZSIsIGt3YXJncz17InBrIjogbm9uZXhpc3RpbmdfdGhlbWUucGt9CiAgICApCiAgICByZXNwb25zZSA9IGFkbWluX2NsaWVudC5nZXQoY3JlYXRlX2xpbmspCiAgICBhc3NlcnRfaGFzX2Vycm9yX21lc3NhZ2UocmVzcG9uc2UpCgoKZGVmIHRlc3RfY3NzX2NyZWF0aW9uX2Zvcm1fcmVkaXJlY3RzX3VzZXJfdG9fZWRpdGlvbl9hZnRlcl9jcmVhdGlvbigKICAgIHRoZW1lLCBhZG1pbl9jbGllbnQsIGNyZWF0ZV9saW5rLCBkYXRhCik6CiAgICBkYXRhWyJzdGF5Il0gPSAiMSIKICAgIHJlc3BvbnNlID0gYWRtaW5fY2xpZW50LnBvc3QoY3JlYXRlX2xpbmssIGRhdGEpCiAgICBhc3NlcnQgcmVzcG9uc2VbImxvY2F0aW9uIl0gPT0gcmV2ZXJzZSgKICAgICAgICAibWlzYWdvOmFkbWluOnRoZW1lczplZGl0LWNzcy1maWxlIiwKICAgICAgICBrd2FyZ3M9eyJwayI6IHRoZW1lLnBrLCAiY3NzX3BrIjogdGhlbWUuY3NzLmxhc3QoKS5wa30sCiAgICApCgoKZGVmIHRlc3RfY3NzX2VkaXRpb25fZm9ybV9pc19kaXNwbGF5ZWQoYWRtaW5fY2xpZW50LCBlZGl0X2xpbmssIGNzcyk6CiAgICByZXNwb25zZSA9IGFkbWluX2NsaWVudC5nZXQoZWRpdF9saW5rKQogICAgYXNzZXJ0IHJlc3BvbnNlLnN0YXR1c19jb2RlID09IDIwMAogICAgYXNzZXJ0X2NvbnRhaW5zKHJlc3BvbnNlLCBjc3MubmFtZSkKCgpkZWYgdGVzdF9jc3NfZWRpdGlvbl9mb3JtX2NvbnRhaW5zX3NvdXJjZV9maWxlX2NvbnRlbnRzKGFkbWluX2NsaWVudCwgZWRpdF9saW5rLCBjc3MpOgogICAgcmVzcG9uc2UgPSBhZG1pbl9jbGllbnQuZ2V0KGVkaXRfbGluaykKICAgIGFzc2VydF9jb250YWlucyhyZXNwb25zZSwgY3NzLnNvdXJjZV9maWxlLnJlYWQoKS5kZWNvZGUoInV0Zi04IikpCgoKZGVmIHRlc3RfY3NzX25hbWVfY2FuX2JlX2NoYW5nZWQoYWRtaW5fY2xpZW50LCBlZGl0X2xpbmssIGNzcywgZGF0YSk6CiAgICBkYXRhWyJuYW1lIl0gPSAibmV3LW5hbWUuY3NzIgogICAgYWRtaW5fY2xpZW50LnBvc3QoZWRpdF9saW5rLCBkYXRhKQoKICAgIGNzcy5yZWZyZXNoX2Zyb21fZGIoKQogICAgYXNzZXJ0IGNzcy5uYW1lID09IGRhdGFbIm5hbWUiXQoKCmRlZiB0ZXN0X2Nzc19uYW1lX2NoYW5nZV9hbHNvX2NoYW5nZXNfc291cmNlX2ZpbGVfbmFtZSgKICAgIGFkbWluX2NsaWVudCwgZWRpdF9saW5rLCBjc3MsIGRhdGEKKToKICAgIGRhdGFbIm5hbWUiXSA9ICJuZXctbmFtZS5jc3MiCiAgICBhZG1pbl9jbGllbnQucG9zdChlZGl0X2xpbmssIGRhdGEpCgogICAgY3NzLnJlZnJlc2hfZnJvbV9kYigpCiAgICBhc3NlcnQgIm5ldy1uYW1lIiBpbiBzdHIoY3NzLnNvdXJjZV9maWxlKQoKCmRlZiB0ZXN0X2Nzc19zb3VyY2VfY2FuX2JlX2NoYW5nZWQoYWRtaW5fY2xpZW50LCBlZGl0X2xpbmssIGNzcywgZGF0YSk6CiAgICBkYXRhWyJzb3VyY2UiXSA9ICIubWlzYWdvLWZvb3RlciB7IGRpc3BsYXk6IG5vbmU7IH0iCiAgICBhZG1pbl9jbGllbnQucG9zdChlZGl0X2xpbmssIGRhdGEpCgogICAgY3NzLnJlZnJlc2hfZnJvbV9kYigpCiAgICBhc3NlcnQgY3NzLnNvdXJjZV9maWxlLnJlYWQoKS5kZWNvZGUoInV0Zi04IikgPT0gZGF0YVsic291cmNlIl0KCgpkZWYgdGVzdF9jaGFuZ2luZ19jc3Nfc291cmNlX2Fsc29fY2hhbmdlc19zb3VyY2VfaGFzaCgKICAgIGFkbWluX2NsaWVudCwgZWRpdF9saW5rLCBjc3MsIGRhdGEKKToKICAgIG9yaWdpbmFsX2hhc2ggPSBjc3Muc291cmNlX2hhc2gKICAgIGRhdGFbInNvdXJjZSJdID0gIi5taXNhZ28tZm9vdGVyIHsgZGlzcGxheTogbm9uZTsgfSIKICAgIGFkbWluX2NsaWVudC5wb3N0KGVkaXRfbGluaywgZGF0YSkKCiAgICBjc3MucmVmcmVzaF9mcm9tX2RiKCkKICAgIGFzc2VydCBjc3Muc291cmNlX2hhc2ggIT0gb3JpZ2luYWxfaGFzaAoKCmRlZiB0ZXN0X2NoYW5naW5nX2Nzc19zb3VyY2VfYWxzb19jaGFuZ2VzX2hhc2hfaW5fZmlsZW5hbWUoCiAgICBhZG1pbl9jbGllbnQsIGVkaXRfbGluaywgY3NzLCBkYXRhCik6CiAgICBvcmlnaW5hbF9oYXNoID0gY3NzLnNvdXJjZV9oYXNoCiAgICBkYXRhWyJzb3VyY2UiXSA9ICIubWlzYWdvLWZvb3RlciB7IGRpc3BsYXk6IG5vbmU7IH0iCiAgICBhZG1pbl9jbGllbnQucG9zdChlZGl0X2xpbmssIGRhdGEpCgogICAgY3NzLnJlZnJlc2hfZnJvbV9kYigpCiAgICBhc3NlcnQgb3JpZ2luYWxfaGFzaCBub3QgaW4gc3RyKGNzcy5zb3VyY2VfZmlsZSkKICAgIGFzc2VydCBjc3Muc291cmNlX2hhc2ggaW4gc3RyKGNzcy5zb3VyY2VfZmlsZSkKCgpkZWYgdGVzdF9oYXNoX3N0YXlzX3NhbWVfaWZfc291cmNlX2lzX25vdF9jaGFuZ2VkKGFkbWluX2NsaWVudCwgZWRpdF9saW5rLCBjc3MsIGRhdGEpOgogICAgb3JpZ2luYWxfaGFzaCA9IGNzcy5zb3VyY2VfaGFzaAogICAgZGF0YVsibmFtZSJdID0gImNoYW5nZWQuY3NzIgogICAgZGF0YVsic291cmNlIl0gPSBjc3Muc291cmNlX2ZpbGUucmVhZCgpLmRlY29kZSgidXRmLTgiKQogICAgYWRtaW5fY2xpZW50LnBvc3QoZWRpdF9saW5rLCBkYXRhKQoKICAgIGNzcy5yZWZyZXNoX2Zyb21fZGIoKQogICAgYXNzZXJ0IG9yaWdpbmFsX2hhc2ggPT0gY3NzLnNvdXJjZV9oYXNoCgoKZGVmIHRlc3RfZmlsZV9pc19ub3RfdXBkYXRlZF9pZl9mb3JtX2RhdGFfaGFzX25vX2NoYW5nZXMoCiAgICBhZG1pbl9jbGllbnQsIGVkaXRfbGluaywgY3NzLCBkYXRhCik6CiAgICBvcmlnaW5hbF9zb3VyY2VfZmlsZSA9IHN0cihjc3Muc291cmNlX2ZpbGUpCiAgICBkYXRhWyJuYW1lIl0gPSBjc3MubmFtZQogICAgZGF0YVsic291cmNlIl0gPSBjc3Muc291cmNlX2ZpbGUucmVhZCgpLmRlY29kZSgidXRmLTgiKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBhZG1pbl9jbGllbnQucG9zdChlZGl0X2xpbmssIGRhdGEpCgogICAgY3NzLnJlZnJlc2hfZnJvbV9kYigpCiAgICBhc3NlcnQgb3JpZ2luYWxfc291cmNlX2ZpbGUgPT0gc3RyKGNzcy5zb3VyY2VfZmlsZSkKPHxmaW1fZW5kfD4="]
["0527d6a04659c302f6228407deee7660ae60b2c6-3","0527d6a04659c302f6228407deee7660ae60b2c6",{"$cut":{"chars":17948,"head":"PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YQppbXBvcnQganNvbgppbXBvcnQgb3MKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0aW1lCgppbXBvcnQgZGIKCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IHR3ZWVweQpmcm9tIHR3ZWVweSBpbXBvcnQgU3RyZWFtCmZyb20gdHdlZXB5IGltcG9ydCBPQXV0aEhhbmRsZXIKZnJvbSB0d2VlcHkuc3RyZWFtaW5nIGltcG9ydCBTdHJlYW1MaXN0ZW5lcgppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CnBsdC5zdHlsZS51c2UoJ3NlYWJvcm4td2hpdGVncmlkJykKCgojIENyZWRlbnRpYWxzCmtleSA9ICJyTTYwRjJOUGFMM3o4U0s1c2RrUFAwdWdIIgpzZWNyZXRfa2V5ID0gImptc3ZUWW01Zllzc0U5cWgzN0tmYlR5d2dwelRpQVhpM3htZkl0T29DSDFINFhhWnBHIgp0b2tlbiA9ICIzMDIyOTM5NzItZ1ZVbnpENkZRVXROd0l6cGdta1JNdW0wN3JjNjZFVUlzWFd3a2l3YiIKc2VjcmV0X3Rva2VuID0gIjhnUXJwbGZNM2hQcUF2VUlWUGhxYml3NTg3cHJmU0NTWWNMaTRlekdaaHJPcCIKCmF1dGggPSBPQXV0aEhhbmRsZXIoa2V5LCBzZWNyZXRfa2V5KQphdXRoLnNldF9hY2Nlc3NfdG9rZW4odG9rZW4sIHNlY3JldF90b2tlbikKYXBpID0gdHdlZXB5LkFQSShhdXRoLCB3YWl0X29uX3JhdGVfbGltaXQ9VHJ1ZSwgd2FpdF9vbl9yYXRlX2xpbWl0X25vdGlmeT1UcnVlKQoKCmNsYXNzIGxpc3RlbmVyKFN0cmVhbUxpc3RlbmVyKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUpOgogICAgICAgIHN1cGVyKFN0cmVhbUxpc3RlbmVyLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5zYXZlX2ZpbGUgPSBvcGVuKGZpbGVuYW1lLCAndycpCiAgICAgICAgc2VsZi50d2VldHMgPSBbXQoKICAgIGRlZiBvbl9kYXRhKHNlbGYsIGRhdGEpOgogICAgICAgIHByaW50KGRhdGEpCiAgICAgICAgc2VsZi50d2VldHMuYXBwZW5kKGpzb24ubG9hZHMoZGF0YSkpCiAgICAgICAgc2VsZi5zYXZlX2ZpbGUud3JpdGUoc3RyKGRhdGEpKQogICAgICAgIHJldHVybihUcnVlKQoKICAgIGRlZiBvbl9lcnJvcihzZWxmLCBzdGF0dXNfY29kZSk6CiAgICAgICAgaWYgc3RhdHVzX2NvZGUgPT0gNDIwOgogICAgICAgICAgICAjIHJldHVybmluZyBGYWxzZSBpbiBvbl9kYXRhIGRpc2Nvbm5lY3RzIHRoZSBzdHJlYW0KICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQgc3RhdHVzX2NvZGUKCgpkZWYgZ2V0X21lcHNfaWRzKCk6CiAgICBtZXBzID0gcGQucmVhZF9jc3YoJ2dyX2NhbmRpZGF0ZV9tZXBzLmNzdicpCiAgICB1c2VybmFtZXMgPSBtZXBzW21lcHNbJ1NjcmVlbiBOYW1lJ10uc3RyLnN0YXJ0c3dpdGgoJ0AnKV1bJ1NjcmVlbiBOYW1lJ10KICAgIGlkcyA9IFtdCiAgICBmb3IgdXNlcm5hbWUgaW4gdXNlcm5hbWVzOgogICAgICAgIGlkcy5hcHBlbmQoYXBpLmdldF91c2VyKHNjcmVlbl9uYW1lPXVzZXJuYW1lKS5pZF9zdHIpCiAgICByZXR1cm4gaWRzCgoKZGVmIHN0cmVhbV9tZXBzX3R3ZWV0cygpOgogICAgbWVwc19pZHMgPSBnZXRfbWVwc19pZHMoKQogICAgdHdpdHRlclN0cmVhbSA9IFN0cmVhbShhdXRoLCBsaXN0ZW5lcignbWVwc190d2VldHMuanNvbicpKQogICAgdHdpdHRlclN0cmVhbS5maWx0ZXIoZm9sbG93PW1lcHNfaWRzKQoKCmRlZiBzdHJlYW1fdHdlZXRzX3JlZmVycmluZ19tZXBzKCk6CiAgICAiIiIKICAgIFRyYWNrIGFuZCBzdHJlYW0gdHdlZXRzIHRoYXQgYXJlIHJlZmVycmluZyB0byB0aGUgbmFtZXMgaW4gdGhlCiAgICB0cmFja2luZyBsaXN0CiAgICAiIiIKICAgIG1lcHMgPSBucC5jaGFyLmRlY29kZShwZC5yZWFkX2NzdignZm9yX3RyYWNraW5nLmNzdicpWydDYW5kaWRhdGUnXS50b2xpc3QoKSwgZW5jb2Rpbmc9J3V0Zi04JykudG9saXN0KCkKICAgIHR3aXR0ZXJTdHJlYW0gPSBTdHJlYW0oYXV0aCwgbGlzdGVuZXIoJ3R3ZWV0c19yZWZlcnJpbmdfbWVwcy5qc29uJykpCiAgICB3aGlsZSBUcnVlOgogICAgICAgIHRyeToKICAgICAgICAgICAgdHdpdHRlclN0cmVhbS5maWx0ZXIodHJhY2s9bWVwcykKICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBleDoKICAgICAgICAgICAgcHJpbnQgJ0kganVzdCBjYXVnaHQgdGhlIGV4Y2VwdGlvbjogJXMnICUgZXgKICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKICAgICAgICAgICAgY29udGludWUKCgpkZWYgZ2V0X3JlcGxpZXModHdlZXQpOgogICAgdXNlciA9IHR3ZWV0LnVzZXIuc2NyZWVuX25hbWUKICAgIHR3ZWV0X2lkID0gdHdlZXQuaWQKICAgIG1heF9pZCA9IE5vbmUKICAgIHdoaWxlIFRydWU6CiAgICAgICAgdHJ5OgogICAgICAgICAgICByZXBsaWVzID0gYXBpLnNlYXJjaChxPSJ0bzolcyIgJSB1c2VyLCBzaW5jZV9pZD10d2VldF9pZCwgbWF4X2lkPW1heF9pZCwgY291bnQ9MTAwLCB0d2VldF9tb2RlPSJleHRlbmRlZCIpCiAgICAgICAgICAgIGlmIG1heF9pZCBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICMgcmVtb3ZlIGR1cGxpY2F0ZSB0d2VldCB3aXRoIHRoZSBpZCA9PSBtYXhfaWQsIGJlY2F1c2Ugd2UgZ290IGl0IG9uIHRoZSBwcmV2aW91cyBTZWFyY2gKICAgICAgICAgICAgICAgIHJlcGxpZXMgPSByZXBsaWVzWzE6XQogICAgICAgIGV4Y2VwdCB0d2VlcHkuVHdlZXBFcnJvciBhcyBlOgogICAgICAgICAgICBwcmludCgiY2F1Z2h0IHR3aXR0ZXIgYXBpIGVycm9yOiAlcyIsIGUpCiAgICAgICAgICAgIHRpbWUuc2xlZXAoMjApCiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZm9yIHJlcGx5IGluIHJlcGxpZXM6CiAgICAgICAgICAgIGlmIHJlcGx5LmluX3JlcGx5X3RvX3N0YXR1c19pZCA9PSB0d2VldF9pZDoKICAgICAgICAgICAgICAgIHlpZWxkIHJlcGx5CiAgICAgICAgICAgICAgICAjIHJlY3Vyc2l2ZWx5IGdldCB0aGUgcmVwbGllcyB0byB0aGlzIHJlcGx5CiAgICAgICAgICAgICAgICBmb3IgcmVwbHlfdG9fcmVwbHkgaW4gZ2V0X3JlcGxpZXMocmVwbHkpOgogICAgICAgICAgICAgICAgICAgIHlpZWxkIHJlcGx5X3RvX3JlcGx5CiAg"}}]
["ddb28ab378f2ce06daaf969d5fa2dafe907f436a-2","ddb28ab378f2ce06daaf969d5fa2dafe907f436a","PHxmaW1fcHJlZml4fD4KZnJvbSBzeXMgaW1wb3J0IGFyZ3YKCnNjcmlwdCwgdXNlcl9uYW1lID0gYXJndgo8fGZpbV9ob2xlfD4KcHJpbnQoZiJEbyB5b3UgbGlrZSBtZSB7dXNlcl9uYW1lfT8iKQpsaWtlID0gaW5wdXQocHJvbXB0KQoKcHJpbnQoZiJXaGVyZSBkbyB5b3UgbGl2ZSB7dXNlcl9uYW1lfT8iKQpsaXZlID0gaW5wdXQocHJvbXB0KQoKcHJpbnQoIiIiCllvdSBzYWlkIHtsaWtlfSBhYm91dCBsaWtpbmcgbWUuCllvdSBsaXZlIGluIHtsaXZlfS4gVkVSWSBXRUxMISEgVkVOR0FCT1lTLi4uLgoiIiIpCjx8ZmltX3N1ZmZpeHw+Cgpwcm9tcHQgPSAnPiAnCgpwcmludChmIkhvbGEsIHt1c2VyX25hbWV9LCBJJ20geW91ciBsZWFkZXIge3NjcmlwdH0uIikKPHxmaW1fZW5kfD4="]
["fd533903699937c1ff7c542c8369465426c94e80-4","fd533903699937c1ff7c542c8369465426c94e80","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKaW1wb3J0IG51bXB5IGFzIG5wCgpzeXMucGF0aC5hcHBlbmQoJy4uLycpCgpmcm9tIHNlcTJ2ZWMuY29tbW9uX2Z1bmN0aW9uIGltcG9ydCBwcmVwcm9jZXNzX2RhdGEKZnJvbSBzZXEydmVjLmJlcnRfdmVjIGltcG9ydCBCZXJ0U2VxVmVjLCBBbGJlcnRUZXh0TmV0LCBCZXJ0VGV4dE5ldApmcm9tIHNjaXB5LnNwYXRpYWwuZGlzdGFuY2UgaW1wb3J0IGNvc2luZQpmcm9tIHNjaXB5IGltcG9ydCBzdGF0cwppbXBvcnQgY3N2CgoKZGVmIGdldF9ib2R5X3NpbV90cyh0ZXh0X25ldCwgYm9keSwgdGVzdD1GYWxzZSk6CiAgICBiZXJ0X3NlcV92ZWMgPSBCZXJ0U2VxVmVjKHRleHRfbmV0KQogICAgbGluZXMgPSBwcmVwcm9jZXNzX2RhdGEoYm9keSkKICAgIGxhc3RfdmVjID0gTm9uZQogICAgc2ltcyA9IFtdCiAgICBsYXN0X2xpbmUgPSBOb25lCiAgICBmb3IgbGluZSBpbiBsaW5lczoKICAgICAgICBpZiBsZW4obGluZSkgPiAyMDA6CiAgICAgICAgICAgIGxpbmUgPSBsaW5lWzoyMDBdCiAgICAgICAgdmVjID0gYmVydF9zZXFfdmVjLnNlcTJ2ZWMobGluZSkKICAgICAgICBpZiBsYXN0X3ZlYyBpcyBOb25lOgogICAgICAgICAgICBsYXN0X3ZlYyA9IHZlYwogICAgICAgICAgICBsYXN0X2xpbmUgPSBsaW5lCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2ltID0gY29zaW5lKHZlYywgbGFzdF92ZWMpCiAgICAgICAgICAgIHNpbXMuYXBwZW5kKHNpbSkKICAgICAgICAgICAgbGFzdF92ZWMgPSB2ZWMKICAgICAgICAgICAgaWYgRmFsc2U6CiAgICAgICAgICAgICAgICBwcmludChsYXN0X2xpbmUpCiAgICAgICAgICAgICAgICBwcmludChsaW5lKQogICAgICAgICAgICAgICAgcHJpbnQoc2ltKQogICAgICAgICAgICBsYXN0X2xpbmUgPSBsaW5lCiAgICBzaW1zID0gbnAuYXJyYXkoc2ltcykKICAgIGlmIHRlc3Q6CiAgICAgICAgcHJpbnQoc2ltcykKICAgIGF2Z3MgPSBucC5tZWFuKHNpbXMpCiAgICByZXR1cm4gc2ltcywgYXZncwoKCmRlZiBnZXRfZmZ0KHRzX2RhdGEpOgogICAgZnIgPSBucC5mZnQuZmZ0KHRzX2RhdGEpCiAgICBmciA9IG5wLmFicyhmcikgLyBsZW4odHNfZGF0YSkKICAgIHByaW50KG1heChmclsxOl0pKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICB0ZXh0X25ldCA9IEJlcnRUZXh0TmV0KCkKICAgIHdpdGggb3BlbignL2hvbWUvaGV0YW8vRG9jdW1lbnRzL3RleHRfc3R5bGUvZnJvbV9kYl91bmN1dC5jc3YnLCAncicpIGFzIGluZiwgXAogICAgICAgICAgICBvcGVuKCcvaG9tZS9oZXRhby9Eb2N1bWVudHMvdGV4dF9zdHlsZS9pc19kYW9kdS9mcm9tX2RiX2JlcnQuY3N2JywgJ3cnKSBhcyBvdXRmOgogICAgICAgIHJlYWRlciA9IGNzdi5EaWN0UmVhZGVyKGluZikKICAgICAgICB3cml0ZXIgPSBjc3YuRGljdFdyaXRlcihvdXRmLCBsaXN0KHJlYWRlci5maWVsZG5hbWVzKSArIFsnYXZnJywgJ21lZGlhbicsICdza2V3JywgJ3RvcF9tZWFuJ10pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICB3cml0ZXIud3JpdGVoZWFkZXIoKQogICAgICAgIGZvciByb3cgaW4gcmVhZGVyOgogICAgICAgICAgICBvbmVfc2ltX3RzLCBhdmcgPSBnZXRfYm9keV9zaW1fdHModGV4dF9uZXQsIHJvd1snYm9keSddKQogICAgICAgICAgICAjIHBsdC5oaXN0KG9uZV9zaW1fdHMsIGJpbnM9bGVuKG9uZV9zaW1fdHMpLy8zKQo8fGZpbV9lbmR8Pg=="]
["f9bd51cbbc1c51eade4f1af4db3e32e060914f61-4","f9bd51cbbc1c51eade4f1af4db3e32e060914f61","PHxmaW1fcHJlZml4fD4KIiIiCk1vZHVsZSBjb250YWluaW5nIG1haW4gcm91dGluZXMgdG8gZXhlY3V0ZSBNRVRSSUMKCiIiIgoKCmltcG9ydCBvcwppbXBvcnQgZXJybm8KaW1wb3J0IGdsb2IKCmZyb20gLiBpbXBvcnQgdXRpbHMsIHNlY3Rpb25zLCByYXBpZCwgbW92ZSwgc2FtYmEKCgoKZGVmIGNvbXB1dGVfYW1vY190cmFuc3BvcnQobGluZV9hcmdzKToKICAgICIiIiBQYXJzZSBvcHRpb25zIGFuZCBjb21wdXRlIGFtb2MgIiIiCiAgICBhcmdzID0gdXRpbHMuZ2V0X2FyZ3MobGluZV9hcmdzKQogICAgY29uZmlnID0gdXRpbHMuZ2V0X2NvbmZpZyhhcmdzKQoKICAgICMgVXBkYXRlIG5hbWUgaW4gY29uZmlnIGZpbGUKICAgIGlmIGFyZ3MubmFtZSBpcyBub3QgTm9uZToKICAgICAgICBjb25maWcuc2V0KCdvdXRwdXQnLCAnbmFtZScsIGFyZ3MubmFtZSkKCiAgICAjIFVwZGF0ZSBvdXRkaXIgaW4gY29uZmlnIGZpbGUKICAgIGlmIGFyZ3Mub3V0ZGlyIGlzIG5vdCBOb25lOgogICAgICAgIGNvbmZpZy5zZXQoJ291dHB1dCcsICdvdXRkaXInLCBhcmdzLm91dGRpcikKCiAgICAjIFVwZGF0ZSBzaGlmdF9kYXRlIGluIGNvbmZpZyBmaWxlCiAgICBpZiBhcmdzLnNoaWZ0X2RhdGUgaXMgbm90IE5vbmU6CiAgICAgICAgY29uZmlnLnNldCgnb3V0cHV0JywgJ3NoaWZ0X2RhdGUnLCBhcmdzLnNoaWZ0X2RhdGUpCgogICAgIyBVcGRhdGUgc2hpZnRfZGF0ZSBpbiBjb25maWcgZmlsZQogICAgaWYgdXRpbHMuZ2V0X2NvbmZpZ19vcHQoY29uZmlnLCAnb3B0aW9ucycsICdlb3MnKSBpcyBOb25lOgogICAgICAgIGNvbmZpZy5zZXQoJ29wdGlvbnMnLCAnZW9zJywgJ3Rlb3MxMCcpCgogICAgIyBDaGVjayBmaWxlcyBhbmQgb3B0aW9ucyAKICAgIGlmIG5vdCB1dGlscy5wYXRoLmV4aXN0cyhhcmdzLmNvbmZpZ19maWxlKToKICAgICAgcmFpc2UgRmlsZU5vdEZvdW5kRXJyb3IoZXJybm8uRU5PRU5ULCBvcy5zdHJlcnJvcihlcnJuby5FTk9FTlQpLCBhcmdzLmNvbmZpZ19maWxlKQogICAgaWYgbm90IGdsb2IuZ2xvYihhcmdzLnRlbXBfZmlsZSk6CiAgICAgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yKGVycm5vLkVOT0VOVCwgb3Muc3RyZXJyb3IoZXJybm8uRU5PRU5UKSwgYXJncy50ZW1wX2ZpbGUpCiAgICBpZiBub3QgZ2xvYi5nbG9iKGFyZ3Muc2FsdF9maWxlKToKICAgICAgcmFpc2UgRmlsZU5vdEZvdW5kRXJyb3IoZXJybm8uRU5PRU5ULCBvcy5zdHJlcnJvcihlcnJuby5FTk9FTlQpLCBhcmdzLnNhbHRfZmlsZSkKICAgIGlmIG5vdCBnbG9iLmdsb2IoYXJncy52ZWxfZmlsZSk6CiAgICAgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yKGVycm5vLkVOT0VOVCwgb3Muc3RyZXJyb3IoZXJybm8uRU5PRU5UKSwgYXJncy52ZWxfZmlsZSkKICAgIGlmIGFyZ3MudGF1eF9maWxlOgogICAgICBpZiBub3QgZ2xvYi5nbG9iKGFyZ3MudGF1eF9maWxlKToKICAgICAgICByYWlzZSBGaWxlTm90Rm91bmRFcnJvcihlcnJuby5FTk9FTlQsIG9zLnN0cmVycm9yKGVycm5vLkVOT0VOVCksIGFyZ3MudGF1eF9maWxlKQogICAgaWYgYXJncy5zc2hfZmlsZToKICAgICAgaWYgbm90IGdsb2IuZ2xvYihhcmdzLnNzaF9maWxlKToKICAgICAgICByYWlzZSBGaWxlTm90Rm91bmRFcnJvcihlcnJuby5FTk9FTlQsIG9zLnN0cmVycm9yKGVycm5vLkVOT0VOVCksIGFyZ3Muc3NoX2ZpbGUpCgogICAgaWYgY29uZmlnLmdldCgnb3B0aW9ucycsJ2FycmF5JykgPT0gJ1JBUElEJzoKICAgICAgaWYgbm90IGFyZ3MudGF1eF9maWxlOgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignUGF0aCBmb3IgbmV0Y2RmIGZpbGUocykgY29udGFpbmluZyB6b25hbCB3aW5kIHN0cmVzcyBkYXRhIG11c3QgYmUgcHJvdmlkZWQgZm9yIFJBUElEIGFycmF5LicpCgogICAgaWYgY29uZmlnLmdldCgnb3B0aW9ucycsJ2FycmF5JykgPT0gJ1NBTUJBJzoKICAgICAgaWYgbm90IGFyZ3MudGF1eF9maWxlOgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignUGF0aCBmb3IgbmV0Y2RmIGZpbGUocykgY29udGFpbmluZyB6b25hbCB3aW5kIHN0cmVzcyBkYXRhIG11c3QgYmUgcHJvdmlkZWQgZm9yIFNBTUJBIGFycmF5LicpCgogICAgaWYgY29uZmlnLmdldGJvb2xlYW4oJ29wdGlvbnMnLCAndGRfZ2VvJyk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgaWYgbm90IGFyZ3Muc3NoX2ZpbGU6CiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdQYXRoIGZvciBuZXRjZGYgZmlsZShzKSBjb250YWluaW5nIFNlYSBTdXJmYWNlIEhlaWdodCBkYXRhIG11c3QgYmUgcHJvdmlkZWQgZm9yIHRvcC1kb3duIGdlb3N0cm9waGljIG1ldGhvZCcpICAgIAoKPHxmaW1fZW5kfD4="]
["06c510fcd074be91158af636de02c90f9553ddc0-2","06c510fcd074be91158af636de02c90f9553ddc0","PHxmaW1fcHJlZml4fD4KZnJvbSAub2JqZWN0IGltcG9ydCBPYmplY3QKCgpjbGFzcyBWYXJpYWJsZUFzc2lnbm1lbnQoT2JqZWN0KToKICAgIHZhcmlhYmxlX25hbWU6IHN0cgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBpc19uZXdfZGVjbGFyYXRpb246IGJvb2wKICAgIGlzX2dsb2JhbDogYm9vbAoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YXJpYWJsZV9uYW1lOiBzdHIgPSBOb25lLCBpc19uZXdfZGVjbGFyYXRpb246IGJvb2wgPSBGYWxzZSk6Cjx8ZmltX2VuZHw+"]
["9532cb58ab22dc9a1469cc5334bbe85e699d7699-3","9532cb58ab22dc9a1469cc5334bbe85e699d7699","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMgojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIKQ3JlYXRlZCBvbiBTYXQgSmFuIDE5IDE0OjQ1OjE2IDIwMTkKCkBhdXRob3I6IGFrcmFta29oYW5zYWwKIiIiCgppbXBvcnQgb3MKaW1wb3J0IGN2MgppbXBvcnQgc3RyaW5nCmZyb20gdHFkbSBpbXBvcnQgdHFkbQppbXBvcnQgY2xpY2sKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gbW9kZWxzLmNybm4gaW1wb3J0IENSTk4KaW1wb3J0IHRvcmNoCmZyb20gdG9yY2guYXV0b2dyYWQgaW1wb3J0IFZhcmlhYmxlCmZyb20gdG9yY2gudXRpbHMuZGF0YSBpbXBvcnQgRGF0YUxvYWRlcgpmcm9tIHRvcmNoIGltcG9ydCBubgpmcm9tIGRhdGFzZXQubG9hZF9kYXRhIGltcG9ydCBMb2FkRGF0YXNldApmcm9tIGRhdGFzZXQudGV4dF9kYXRhIGltcG9ydCBUZXh0RGF0YXNldApmcm9tIGRhdGFzZXQuY29sbGF0ZV9mbiBpbXBvcnQgdGV4dF9jb2xsYXRlCmZyb20gZGF0YXNldC5kYXRhX3RyYW5zZm9ybSBpbXBvcnQgUmVzaXplLCBSb3RhdGlvbiwgVHJhbnNsYXRpb24sIFNjYWxlCmZyb20gbW9kZWxzLm1vZGVsX2xvYWRlciBpbXBvcnQgbG9hZF9tb2RlbApmcm9tIHRvcmNodmlzaW9uLnRyYW5zZm9ybXMgaW1wb3J0IENvbXBvc2UKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKCmZyb20gUElMIGltcG9ydCBJbWFnZSwgSW1hZ2VEcmF3LCBJbWFnZUZvbnQKCgpkZWYgZGV0ZWN0KG5ldCwgZGF0YSwgY3VkYSwgdmlzdWFsaXplLCBiYXRjaF9zaXplPTEpOgogICAgZGF0YV9sb2FkZXIgPSBEYXRhTG9hZGVyKGRhdGEsIGJhdGNoX3NpemU9YmF0Y2hfc2l6ZSwgbnVtX3dvcmtlcnM9NCwgc2h1ZmZsZT1GYWxzZSwgY29sbGF0ZV9mbj10ZXh0X2NvbGxhdGUpCiAgICAKICAgIHByaW50KGRhdGFfbG9hZGVyKQogICAgCiAgICBwcmludChsZW4oZGF0YV9sb2FkZXIpKQogICAgaXRlcmF0b3IgPSB0cWRtKGRhdGFfbG9hZGVyKQogICAgcHJpbnQobGVuKGl0ZXJhdG9yKSkKICAgIGZvciBzYW1wbGUgaW4gaXRlcmF0b3I6CiAgICAgIAogICAgICAgIGltZ3MgPSBWYXJpYWJsZShzYW1wbGVbImltZyJdKQogICAgICAgCiAgICAgICAgcHJpbnQoc2FtcGxlWyJpbWduYW1lIl0pCiAgICAgICAgaWYgY3VkYToKICAgICAgICAgICAgaW1ncyA9IGltZ3MuY3VkYSgpCiAgICAgICAgb3V0ID0gbmV0KGltZ3MsIGRlY29kZT1UcnVlKQogICAgICAgIGd0ID0gKHNhbXBsZVsic2VxIl0ubnVtcHkoKSAtIDEpLnRvbGlzdCgpCiAgICAgICAgbGVucyA9IHNhbXBsZVsic2VxX2xlbiJdLm51bXB5KCkudG9saXN0KCkKICAgICAgICBwb3MgPSAwCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKG91dCkpOgogICAgICAgICAgICBwcmludCgiaW4gZGV0ZWN0aW9uIikKICAgICAgICAgICAgcHJpbnQob3V0W2ldKQogICAgICAgICAgICBndHMgPSAnJy5qb2luKGFiY1tjXSBmb3IgYyBpbiBndFtwb3M6cG9zK2xlbnNbaV1dKQogICAgICAgICAgICBwcmludCgiZ3RzIGlzIC0tLS0iKQogICAgICAgICAgICBwcmludChndHMpCiAgICAgICAgICAgIHByaW50KCJkZXRlY3RlZCBpcyIpCiAgICAgICAgICAgIHByaW50KG91dFtpXSkKICAgICAgICAgICAgaW1nID0gaW1nc1tpXS5wZXJtdXRlKDEsIDIsIDApLmNwdSgpLmRhdGEubnVtcHkoKS5hc3R5cGUobnAudWludDgpCiAgICAgICAgICAgIGN2Mi5pbXNob3coImltZyIsIGltZykKICAgICAgICAgICAga2V5ID0gY2hyKGN2Mi53YWl0S2V5KCkgJiAyNTUpCiAgICAgICAgICAgIGlmIGtleSA9PSAncSc6CiAgICAgICAgICAgICAgICBicmVhawogICAgI3JldHVybiBhY2MsIGF2Z19lZAoKZGVmIGRldGVjdDIobmV0LCBpbWdmb2xkZXIsIGN1ZGEsIHRyYW5zZm9ybSk6CiAgICAKICAgIGltZ2Vmb2xkZXIgPSAiL2hvbWUvYWtyYW0vRG9jdW1lbnRzL2Nybm5fcmVzdWx0L2ltZzMvIgogICAgaW1hZ2VfbGlzdCA9IG9zLmxpc3RkaXIoaW1nZWZvbGRlcikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgI3Zhcl9uYW1lID0gTm9uZQogICAgI2ltZ19jb3VudCA9IDAKICAgIAogICAgZm9yIGltZ2ZpbGUgaW4gaW1hZ2VfbGlzdDoKPHxmaW1fZW5kfD4="]
["9b2ea8ce5f5f10de1ff3d9ff44e396d862aedc96-1","9b2ea8ce5f5f10de1ff3d9ff44e396d862aedc96","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCB0aW1lCiAKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0ZW5zb3JmbG93IGFzIHRmCmltcG9ydCB1bmlkZWNvZGUKZnJvbSBrZXJhc19wcmVwcm9jZXNzaW5nLnRleHQgaW1wb3J0IFRva2VuaXplcgogCnRmLmVuYWJsZV9lYWdlcl9leGVjdXRpb24oKQogCmZpbGVfcGF0aCA9ICIuXFxEYXRhc2V0c1xcU2hha2VzcGVhci50eHQiCiAKdGV4dCA9IHVuaWRlY29kZS51bmlkZWNvZGUob3BlbihmaWxlX3BhdGgpLnJlYWQoKSkKIAp0b2tlbml6ZXIgPSBUb2tlbml6ZXIoKQp0b2tlbml6ZXIuZml0X29uX3RleHRzKFt0ZXh0XSkKIAplbmNvZGVkID0gdG9rZW5pemVyLnRleHRzX3RvX3NlcXVlbmNlcyhbdGV4dF0pWzBdCiAKdm9jYWJfc2l6ZSA9IGxlbih0b2tlbml6ZXIud29yZF9pbmRleCkgKyAxCiAKd29yZDJpZHggPSB0b2tlbml6ZXIud29yZF9pbmRleAppZHgyd29yZCA9IHRva2VuaXplci5pbmRleF93b3JkCgpzZXF1ZW5jZXMgPSBsaXN0KCkKCmZvciBpIGluIHJhbmdlKDEsIGxlbihlbmNvZGVkKSk6CiAgICBzZXF1ZW5jZSA9IGVuY29kZWRbaSAtIDE6aSArIDFdCiAgICBzZXF1ZW5jZXMuYXBwZW5kKHNlcXVlbmNlKQpzZXF1ZW5jZXMgPSBucC5hcnJheShzZXF1ZW5jZXMpClgsIFkgPSBzZXF1ZW5jZXNbOiwgMF0sIHNlcXVlbmNlc1s6LCAxXQpYID0gbnAuZXhwYW5kX2RpbXMoWCwgMSkKWSA9IG5wLmV4cGFuZF9kaW1zKFksIDEpCgpCVUZGRVJfU0laRSA9IDEwMApCQVRDSF9TSVpFID0gMTAwCmRhdGFzZXQgPSB0Zi5kYXRhLkRhdGFzZXQuZnJvbV90ZW5zb3Jfc2xpY2VzKChYLCBZKSkuc2h1ZmZsZShCVUZGRVJfU0laRSkKZGF0YXNldCA9IGRhdGFzZXQuYmF0Y2goQkFUQ0hfU0laRSwgZHJvcF9yZW1haW5kZXI9VHJ1ZSkKCmNsYXNzIE1vZGVsKHRmLmtlcmFzLk1vZGVsKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2b2NhYl9zaXplLCBlbWJlZGRpbmdfZGltLCB1bml0cywgYmF0Y2hfc2l6ZSk6CiAgICAgICAgc3VwZXIoTW9kZWwsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLnVuaXRzID0gdW5pdHMKICAgICAgICBzZWxmLmJhdGNoX3NpemUgPSBiYXRjaF9zaXplCiAKICAgICAgICBzZWxmLmVtYmVkZGluZyA9IHRmLmtlcmFzLmxheWVycy5FbWJlZGRpbmcodm9jYWJfc2l6ZSwgZW1iZWRkaW5nX2RpbSkKIAogICAgICAgIHNlbGYuZ3J1ID0gdGYua2VyYXMubGF5ZXJzLkdSVShzZWxmLnVuaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fc2VxdWVuY2VzPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl9zdGF0ZT1UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN1cnJlbnRfYWN0aXZhdGlvbj0nc2lnbW9pZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3VycmVudF9pbml0aWFsaXplcj0nZ2xvcm90X3VuaWZvcm0nKQogICAgICAgIHNlbGYuZmMgPSB0Zi5rZXJhcy5sYXllcnMuRGVuc2Uodm9jYWJfc2l6ZSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogCiAgICBkZWYgY2FsbChzZWxmLCBpbnB1dHMsIGhpZGRlbik6CiAgICAgICAgaW5wdXRzID0gc2VsZi5lbWJlZGRpbmcoaW5wdXRzKQogCjx8ZmltX2VuZHw+"]
["5594b761592a719a9a99564023f8cd3e1c89cfbc-1","5594b761592a719a9a99564023f8cd3e1c89cfbc","PHxmaW1fcHJlZml4fD4KY2xhc3MgQWNjb3VudDoKCiAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtYmVyLCBvd25lciwgYmFsYW5jZSwgbGltaXQpOgogICAgICAgIHByaW50KCJDcmVhdGluZyBvYmplY3QgLi4uIHt9Ii5mb3JtYXQoc2VsZikpCiAgICAgICAgc2VsZi5fX251bWJlciA9IG51bWJlcgogICAgICAgIHNlbGYuX19vd25lciA9IG93bmVyCiAgICAgICAgc2VsZi5fX2JhbGFuY2UgPSBiYWxhbmNlCiAgICAgICAgc2VsZi5fX2xpbWl0ID0gbGltaXQKCiAgICBkZWYgZXh0cmFjdChzZWxmKToKICAgICAgICBwcmludCgiQmFsYW5jZSB7fSBvZiBvd25lciB7fSIuZm9ybWF0KHNlbGYuX19iYWxhbmNlLCBzZWxmLl9fb3duZXIpKQoKICAgIGRlZiBkZXBvc2l0KHNlbGYsIHZhbHVlKToKICAgICAgICBzZWxmLl9fYmFsYW5jZSArPSB2YWx1ZQoKICAgIGRlZiBjYXNoKHNlbGYsIHZhbHVlKToKICAgICAgICBpZiBzZWxmLl9fY2FuX2Nhc2godmFsdWUpOgogICAgICAgICAgICBzZWxmLl9fYmFsYW5jZSAtPSB2YWx1ZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50KCJMaW1pdCBleGNlZWRlZCIpCgo8fGZpbV9ob2xlfD4KICAgIEBwcm9wZXJ0eQogICAgZGVmIGJhbGFuY2Uoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX19iYWxhbmNlCgogICAgQHByb3BlcnR5CiAgICBkZWYgbGltaXQoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX19saW1pdAoKICAgIEBwcm9wZXJ0eQogICAgZGVmIG93bmVyKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl9fb3duZXIKCiAgICBAbGltaXQuc2V0dGVyCiAgICBkZWYgbGltaXQoc2VsZiwgdmFsdWUpOgogICAgICAgIHNlbGYuX19saW1pdCA9IHZhbHVlCgogICAgIyBTdGF0aWMgTWV0aG9kcwoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBiYW5rX2NvZGUoKToKICAgICAgICByZXR1cm4gIjAwMSIKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgYmFua19jb2RlcygpOgogICAgICAgIHJldHVybiB7IkJCIjogIjAwMSIsICJCcmFkZXNjbyI6ICIyMzciLCAiQ2FpeGEiOiAiMTA0In0KCiAgICAjIFByaXZhdGUgTWV0aG9kcwoKICAgIGRlZiBfX2Nhbl9jYXNoKHNlbGYsIHZhbHVlKToKICAgICAgICB0b3RhbF92YWx1ZSA9IHNlbGYuX19iYWxhbmNlICsgc2VsZi5fX2xpbWl0CiAgICAgICAgaWYgdmFsdWUgPD0gdG90YWxfdmFsdWU6CiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgdHJhbnNmZXIoc2VsZiwgdmFsdWUsIGFjY291bnQpOgogICAgICAgIHNlbGYuY2FzaCh2YWx1ZSkKICAgICAgICBhY2NvdW50LmRlcG9zaXQodmFsdWUpCgo8fGZpbV9lbmR8Pg=="]
["9b8aa867114d396bed24b89d255a7723e6b8fc83-3","9b8aa867114d396bed24b89d255a7723e6b8fc83","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFzeW5jaW8KaW1wb3J0IGpzb24KaW1wb3J0IHJhbmRvbQppbXBvcnQgcmUKaW1wb3J0IGRpc2NvcmQKCmZyb20gc2VjcmV0IGltcG9ydCBUT0tFTgoKY2xpZW50ID0gZGlzY29yZC5DbGllbnQoKQoKCmRlZiBjb25maXNjYXRlKHN0cmluZyk6CiAgICBpZiBub3QgdmFsaWRfd29yZHMoc3RyaW5nKToKICAgICAgICByZXR1cm4gc3RyaW5nCiAgICB3aGlsZSBUcnVlOgogICAgICAgIGkgPSByYW5kb20ucmFuZHJhbmdlKGxlbihzdHJpbmcpKQogICAgICAgIGlmIHN0cmluZ1tpXS5pc2FscGhhKCkgYW5kIGkgPiAwIGFuZCBzdHJpbmdbaSAtIDFdLmlzYWxwaGEoKToKICAgICAgICAgICAgcmVtb3ZlZCA9IHJlbW92ZShzdHJpbmcsIGkpCiAgICAgICAgICAgIGlmIHZhbGlkX3dvcmRzKHJlbW92ZWRbMF0pOgogICAgICAgICAgICAgICAgcmV0dXJuIHJlbW92ZWQKCgpkZWYgcmVtb3ZlKHN0cmluZywgaSk6CiAgICByZXR1cm4gc3RyaW5nWzA6aV0gKyBzdHJpbmdbaSArIDE6XSwgc3RyaW5nW2ldCgoKVk9XRUxTID0gc2V0KCdhZWlvdScpCgoKZGVmIHZhbGlkX3dvcmRzKHN0cmluZyk6CiAgICBmb3Igd29yZCBpbiByZS5zcGxpdChyJ1xXJywgc3RyaW5nLmxvd2VyKCkpOgogICAgICAgIGlmIHNldCh3b3JkKS5pc2Rpc2pvaW50KFZPV0VMUyk6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgcmV0dXJuIFRydWUKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRlZiBnZXRfY2hhbm5lbHMoKToKICAgIG9iYSA9IGNsaWVudC5nZXRfZ3VpbGQoMjcwNzYzNzE5NjE5NzcyNDE2KQogICAgY2hhbm5lbHMgPSBvYmEuY2hhbm5lbHMKICAgIHJldHVybiB7Y2hhbm5lbC5pZDogY2hhbm5lbC5uYW1lIGZvciBjaGFubmVsIGluIGNoYW5uZWxzfQo8fGZpbV9lbmR8Pg=="]
["b5d53d3932312b1230792ec74fe9976953c2d608-2","b5d53d3932312b1230792ec74fe9976953c2d608","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmltcG9ydCBhcmdwYXJzZQpmcm9tIHBwcmludCBpbXBvcnQgcHByaW50CmZyb20gYW1pcmFtZXNoIGltcG9ydCBBbWlyYW1lc2hSZWFkZXIKCiMKIyBhcmd1bWVudCBwYXJzaW5nIHVzaW5nIGFyZ3BhcnNlCiMKcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCdwb3NpdGlvbmFsX2FyZ3MnLAogICAgICAgICAgICAgICAgICAgIG5hcmdzPSc/JywKICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSdBUkcnKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZpbGUnLCAnLWYnLAogICAgICAgICAgICAgICAgICAgIGRlc3Q9J2ZpbGUnKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXZlcmJvc2UnLCAnLXYnLAogICAgICAgICAgICAgICAgICAgIGRlc3Q9J3ZlcmJvc2UnLAogICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCmFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCm15ZmlsZSA9IGFyZ3MuZmlsZQp2ZXJib3NlID0gYXJncy52ZXJib3NlCgo8fGZpbV9ob2xlfD4KIyBUaGUgZmxhZ3MgLWggYW5kIC0taGVscCBhbmQgdGhlIHVzYWdlIG1lc3NhZ2UgYXJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LgojIFBvc2l0aW9uYWwgYXJndW1lbnRzIGFyZSBpbiBhcmdzLnBvc2l0aW9uYWxfYXJncwojIE9wdGlvbnMgY2FuIGZvbGxvdyBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KIyMgcHJpbnQgYXJncwoKCnRyeToKICAgIGYgPSBvcGVuKG15ZmlsZSkKZXhjZXB0IChUeXBlRXJyb3IsIElPRXJyb3IpOgogICAgcHJpbnQgIkZpbGUgbm90IGdpdmVuIG9yIGRvZXMgbm90IGV4aXN0OiAiLCBteWZpbGUKICAgIGV4aXQoMSkKCnJlYWRlciA9IEFtaXJhbWVzaFJlYWRlcigpCnNrZWwgPSByZWFkZXIucGFyc2UoZikKCmlmIHZlcmJvc2U6CiAgICBwcmludCBza2VsLmluZm8oKQoKIwojIGVuZCBvZiBtYWluCiMKCiMgZGVidWdnaW5nCgojcHByaW50KHNrZWwuX19kaWN0X18pCiNwcHJpbnQoc2tlbC5zZWdtZW50c1swXS5fX2RpY3RfXykKI3BwcmludChza2VsLnNlZ21lbnRzWzBdLnBvaW50c1swXS5fX2RpY3RfXykKPHxmaW1fc3VmZml4fD4KIyBpZiBubyBmaWxlIGFzIG9wdGlvbiwgZmlyc3QgYXJndW1lbnQgaGFzIHRvIGJlIHRoZSBmaWxlCmlmIG15ZmlsZSA9PSBOb25lOgogICAgbXlmaWxlID0gYXJncy5wb3NpdGlvbmFsX2FyZ3MKCjx8ZmltX2VuZHw+"]
["20f6b10519555459afef8b17694025e3c0f0a61d-2","20f6b10519555459afef8b17694025e3c0f0a61d","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAxNSBFVEggWnVyaWNoCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKPHxmaW1faG9sZXw+CiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoiIiIKOm1vZDpgbG9nZ2VyYCAtLS0gV3JhcHMgZG5zbGliJ3MgRE5TTG9nZ2VyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoiIiIKIyBTdGRsaWIKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHRpbWUKCiMgRXh0ZXJuYWwgcGFja2FnZXMKZnJvbSBkbnNsaWIgaW1wb3J0IFFUWVBFLCBSQ09ERQpmcm9tIGRuc2xpYi5zZXJ2ZXIgaW1wb3J0IEROU0xvZ2dlcgpmcm9tIGxpYi51dGlsIGltcG9ydCBoZXhfc3RyCgojIFNDSU9OCmZyb20gbGliLmRlZmluZXMgaW1wb3J0IFNUQVJUVVBfUVVJRVRfUEVSSU9ECgoKY2xhc3MgU0NJT05EbnNMb2dnZXIoRE5TTG9nZ2VyKTogICMgcHJhZ21hOiBubyBjb3ZlcgogICAgIiIiCiAgICBTdWItY2xhc3MgdG8gbG9nIEROUyBldmVudHMgaW5zdGVhZCBvZiBqdXN0IHByaW50aW5nIHRoZW0gdG8gc3Rkb3V0LgoKICAgIFNlZSBgdGhlIGRucyBsaWIgc291cmNlCiAgICA8aHR0cHM6Ly9iaXRidWNrZXQub3JnL3BhdWxjL2Ruc2xpYi9zcmMvCiAgICA2ODg0MmNmNDdhY2ExZDI4M2VhNGY4N2JmNDZkMDdhM2Y5NmU1OThhLwogICAgZG5zbGliL3NlcnZlci5weT9hdD1kZWZhdWx0I2NsLTE5Mz5gXwogICAgZm9yIGhvdyB0byBjb25maWd1cmUgd2hhdCBnZXRzIGxvZ2dlZC4KICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgbGV2ZWw9bG9nZ2luZy5ERUJVRywgKiprd2FyZ3MpOgogICAgICAgIHNlbGYuX3N0YXJ0dXAgPSB0aW1lLnRpbWUoKQogICAgICAgIHNlbGYubGV2ZWwgPSBsZXZlbAogICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQoKICAgIGRlZiBsb2dfcHJlZml4KHNlbGYsIGhhbmRsZXIpOgogICAgICAgIHJldHVybiAiIgoKICAgIGRlZiBfY29tbW9uX3ByZWZpeChzZWxmLCBoYW5kbGVyLCBkYXRhKToKICAgICAgICByZXR1cm4gIlslczolZF0gKCVzKSIgJSAoaGFuZGxlci5jbGllbnRfYWRkcmVzc1swXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5jbGllbnRfYWRkcmVzc1sxXSwgaGFuZGxlci5wcm90b2NvbCkKCiAgICBkZWYgX3JlcGx5X3ByZWZpeChzZWxmLCBoYW5kbGVyLCByZXBseSwgZGVzYyk6CiAgICAgICAgcmV0dXJuICIlczogJXMgLyAnJXMnICglcykgLyIgJSAoCiAgICAgICAgICAgIGRlc2MsIHNlbGYuX2NvbW1vbl9wcmVmaXgoaGFuZGxlciwgcmVwbHkpLCByZXBseS5xLnFuYW1lLAogICAgICAgICAgICBRVFlQRVtyZXBseS5xLnF0eXBlXSkKCiAgICBkZWYgX2Zvcm1hdF9ycnMoc2VsZiwgcmVwbHkpOgogICAgICAgIHJldHVybiAiUlJzOiAlcyIgJSAiLCIuam9pbihbUVRZUEVbYS5ydHlwZV0gZm9yIGEgaW4gcmVwbHkucnJdKQoKICAgIGRlZiBsb2dfcmVjdihzZWxmLCBoYW5kbGVyLCBkYXRhKToKICAgICAgICBsb2dnaW5nLmxvZygKICAgICAgICAgICAgc2VsZi5sZXZlbCwgIlJlY2VpdmVkOiAlcyA8JWQ+IDogJXMiLAogICAgICAgICAgICBzZWxmLl9jb21tb25fcHJlZml4KGhhbmRsZXIsIGRhdGEpLCBsZW4oZGF0YSksIGhleF9zdHIoZGF0YSkpCgogICAgZGVmIGxvZ19zZW5kKHNlbGYsIGhhbmRsZXIsIGRhdGEpOgogICAgICAgIGxvZ2dpbmcubG9nKAogICAgICAgICAgICBzZWxmLmxldmVsLCAiU2VudDogJXMgPCVkPiA6ICVzIiwKICAgICAgICAgICAgc2VsZi5fY29tbW9uX3ByZWZpeChoYW5kbGVyLCBkYXRhKSwgbGVuKGRhdGEpLCBoZXhfc3RyKGRhdGEpKQoKICAgIGRlZiBsb2dfcmVxdWVzdChzZWxmLCBoYW5kbGVyLCByZXF1ZXN0KToKICAgICAgICBsb2dnaW5nLmxvZyhzZWxmLmxldmVsLCAiUmVxdWVzdDogJXMgLyAnJXMnICglcykiLAogICAgICAgICAgICAgICAgICAgIHNlbGYuX2NvbW1vbl9wcmVmaXgoaGFuZGxlciwgcmVxdWVzdCksIHJlcXVlc3QucS5xbmFtZSwKICAgICAgICAgICAgICAgICAgICBRVFlQRVtyZXF1ZXN0LnEucXR5cGVdKQogICAgICAgIHNlbGYubG9nX2RhdGEocmVxdWVzdCkKCiAgICBkZWYgbG9nX3JlcGx5KHNlbGYsIGhhbmRsZXIsIHJlcGx5KToKICAgICAgICBsZXZlbCA9IHNlbGYubGV2ZWwKICAgICAgICBvdXRwdXQgPSBbc2VsZi5fcmVwbHlfcHJlZml4KGhhbmRsZXIsIHJlcGx5LCAiUmVwbHkiKV0KICAgICAgICBpZiByZXBseS5oZWFkZXIucmNvZGUgPT0gUkNPREUuTk9FUlJPUjoKICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzZWxmLl9mb3JtYXRfcnJzKHJlcGx5KSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiAodGltZS50aW1lKCkgLSBzZWxmLl9zdGFydHVwKSA8PSBTVEFSVFVQX1FVSUVUX1BFUklPRDoKICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICBsZXZlbCA9IGxvZ2dpbmcuV0FSTklORwogICAgICAgICAgICBvdXRwdXQuYXBwZW5kKFJDT0RFW3JlcGx5LmhlYWRlci5yY29kZV0pCiAgICAgICAgbG9nZ2luZy5sb2cobGV2ZWwsICIgIi5qb2luKG91dHB1dCkpCiAgICAgICAgc2VsZi5sb2dfZGF0YShyZXBseSkKCiAgICBkZWYgbG9nX3RydW5jYXRlZChzZWxmLCBoYW5kbGVyLCByZXBseSk6CiAgICAgICAgbGV2ZWwgPSBzZWxmLmxldmVsCiAgICAgICAgbG9nZ2luZy5sb2cobGV2ZWwsICIlcyAlcyIsCiAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVwbHlfcHJlZml4KGhhbmRsZXIsIHJlcGx5LCAiVHJ1bmNhdGVkIFJlcGx5IiksCiAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0X3JycyhyZXBseSkpCiAgICAgICAgc2VsZi5sb2dfZGF0YShyZXBseSkKCiAgICBkZWYgbG9nX2Vycm9yKHNlbGYsIGhhbmRsZXIsIGUpOgogICAgICAgIGxvZ2dpbmcubG9nKGxvZ2dpbmcuRVJST1IsICJJbnZhbGlkIFJlcXVlc3Q6ICVzIDo6ICVzIiwKICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb21tb25fcHJlZml4KGhhbmRsZXIsIGUpLCBlKQoKICAgIGRlZiBsb2dfZGF0YShzZWxmLCBkbnNvYmopOgogICAgICAgIGZvciBsaW5lIGluIGRuc29iai50b1pvbmUoIiAgICAiKS5zcGxpdCgiXG4iKToKICAgICAgICAgICAgbG9nZ2luZy5sb2coc2VsZi5sZXZlbCwgbGluZSkKPHxmaW1fc3VmZml4fD4KIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCjx8ZmltX2VuZHw+"]
["5988a1feb434c36c2d50e08a43a859d11dff546c-3","5988a1feb434c36c2d50e08a43a859d11dff546c","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KJycnCjx8ZmltX2hvbGV8PgoKZGVmIHRlc3RfdmFsdWUoYmxvb21maWx0ZXJmaWxlLCB0ZXN0dmFsdWVmaWxlLCB0ZXN0Y291bnQpOgogICAgJycnIFRlc3QgdmFsdWVzIHdpdGggdGhlIGJsb29tIGZpbHRlciAnJycKICAgIGJmaWx0ZXIgPSBCbG9vbUZpbHRlci5vcGVuKGJsb29tZmlsdGVyZmlsZSkKICAgIGZhbHNlX3Bvc2l0aXZlcyA9IDAKICAgIGluZGV4ID0gMAogICAgd2l0aCBvcGVuKHRlc3R2YWx1ZWZpbGUpIGFzIG15ZmlsZToKICAgICAgICBmb3IgbGluZSBpbiBteWZpbGU6CiAgICAgICAgICAgIGluZGV4ID0gaW5kZXggKyAxCiAgICAgICAgICAgICMgU3RvcCBhZnRlciAxIG1pbGxpb24gdGVzdHMKICAgICAgICAgICAgaWYgaW5kZXggPT0gdGVzdGNvdW50OgogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQogICAgICAgICAgICBpZiBub3QgbGluZSBpbiBiZmlsdGVyOiAjIE5vIGZhbHNlIG5lZ2F0aXZlcyBzaG91bGQgZXZlciBoYXBwZW4KICAgICAgICAgICAgICAgIHByaW50KCdGYWxzZSBuZWdhdGl2ZTogJXMnICUgbGluZSkKICAgICAgICAgICAgIyBSZXBsYWNlIG9uZSBjaGFyIGluIHRoZSBsaW5lCiAgICAgICAgICAgIGlmIGxpbmVbMTBdICE9ICcyJzogIyBjaGFyIGluIGluZGV4IDEwIGlzIG5vdCAyCiAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6MTBdICsgJzInICsgbGluZVsxMTpdICMgQ2hhbmdlIGl0IHRvIDIKICAgICAgICAgICAgZWxzZTogIyBJdCBpcyAyLCByZXBsYWNlIGl0IHdpdGggcgogICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOjEwXSArICdyJyArIGxpbmVbMTE6XQogICAgICAgICAgICBpZiBsaW5lIGluIGJmaWx0ZXI6CiAgICAgICAgICAgICAgICBmYWxzZV9wb3NpdGl2ZXMgPSBmYWxzZV9wb3NpdGl2ZXMgKyAxCiAgICBwcmludCgnJWQgZmFsc2UgcG9zaXRpdmVzLCBlcnJvciByYXRlIGlzICUuM2YnICUgKGZhbHNlX3Bvc2l0aXZlcywgKGZhbHNlX3Bvc2l0aXZlcy90ZXN0Y291bnQpKSkKCmRlZiBtYWluKCk6CiAgICAnJycgTWFpbiBmdW5jdGlvbiAnJycKICAgIHN0YXJ0dGltZSA9IHRpbWUudGltZSgpICMgU3RhcnQgdGltZQogICAgdGVzdGNvdW50ID0gNTAwMDAwCiAgICB0ZXN0X3ZhbHVlKCdibG9vbS5maWx0ZXInLCAnQml0Y29pbl9hZGRyZXNzZXNfSmFudWFyeV8wMV8yMDIyLnR4dCcsIHRlc3Rjb3VudCkKICAgIHByaW50KCclZCB0ZXN0cyB0b29rICVkIHNlY29uZHMuJyAlICh0ZXN0Y291bnQqMiwgKHRpbWUudGltZSgpIC0gc3RhcnR0aW1lKSkpCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CnB5dGhvbjMgYmxvb21maWx0ZXJfdGVzdC5weQonJycKaW1wb3J0IHRpbWUKZnJvbSBweWJsb29tZmlsdGVyIGltcG9ydCBCbG9vbUZpbHRlcgo8fGZpbV9lbmR8Pg=="]
["1f9b3efd7c3d99f0780754b7b140d935d5616071-1","1f9b3efd7c3d99f0780754b7b140d935d5616071","PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YSwgdGltZXpvbmUKCmRlZiB0aW1lKCk6CiAgICB1dGM3ID0gdGltZXpvbmUodGltZWRlbHRhKGhvdXJzPTcpLCBuYW1lPSdVVEMrNycpCiAgICByZXR1cm4gZGF0ZXRpbWUubm93KHV0YzcpLnN0cmZ0aW1lKCclZCAlbSAlWSAtICVILiVNJykKCmRlZiBsb2dfaW5kaWNhdG9yX3NpZ25hbChpc19idXksIGlzX3NlbGwpOgogICAgaWYgaXNfYnV5OgogICAgICAgIHByaW50KCdbe31dIGJ1eSBzaWduYWwgZGV0ZWN0ZWQnLmZvcm1hdCh0aW1lKCkpKQogICAgZWxpZiBpc19zZWxsOgogICAgICAgIHByaW50KCdbe31dIHNlbGwgc2lnbmFsIGRldGVjdGVkJy5mb3JtYXQodGltZSgpKSkKCmRlZiBsb2dfb3JkZXJfaXNzdWUob3JkZXIpOgogICAgcHJpbnQoJ1t7fV0ge30gb3JkZXIgaXNzdWVkLCBpZDoge30sIGN1cnJlbmN5IHBhaXI6IHt9LCBhbW91bnQ6IHt9LCBwcmljZToge30nCiAgICAgICAgICAuZm9ybWF0KHRpbWUoKSwgb3JkZXIub3JkZXJfdHlwZSwgb3JkZXIub3JkZXJfaWQsCiAgICAgICAgICAgICAgICAgIG9yZGVyLmN1cnJlbmN5X3BhaXIsIG9yZGVyLmFtb3VudCwgb3JkZXIucHJpY2UpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpkZWYgbG9nX29yZGVyX2NhbmNlbGVkKG9yZGVyKToKICAgIHByaW50KCdbe31dIHt9IG9yZGVyIGNhbmNlbGVkLCBpZDoge30sIGN1cnJlbmN5IHBhaXI6IHt9LCBhbW91bnQ6IHt9LCBwcmljZToge30nCiAgICAgICAgICAuZm9ybWF0KHRpbWUoKSwgb3JkZXIub3JkZXJfdHlwZSwgb3JkZXIub3JkZXJfaWQsCjx8ZmltX2VuZHw+"]
["1f32d36081b60fb04a003a49bd00209522da950d-2","1f32d36081b60fb04a003a49bd00209522da950d","PHxmaW1fcHJlZml4fD4KIiIiSGVscGVyIHRvIHRoZSBEYXRhc2V0IGNsYXNzIGZvciBoYW5kbGluZyByZXNvdXJjZXMgd2l0aCBmaWxlc3RvcmVzLgoiIiIKZnJvbSB0eXBpbmcgaW1wb3J0IFRZUEVfQ0hFQ0tJTkcsIEFueSwgRGljdCwgTGlzdAoKZnJvbSBoZHgudXRpbGl0aWVzLmRpY3RhbmRsaXN0IGltcG9ydCBtZXJnZV90d29fZGljdGlvbmFyaWVzCgppZiBUWVBFX0NIRUNLSU5HOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBmcm9tIGhkeC5kYXRhLnJlc291cmNlIGltcG9ydCBSZXNvdXJjZQoKCjx8ZmltX2VuZHw+"]
["fd63cab35880e7886ff343d6943cb595c5c3b613-3","fd63cab35880e7886ff343d6943cb595c5c3b613","PHxmaW1fcHJlZml4fD4KIiIiClR5cGUgMTYgbWVzc2FnZXMgYXJlIHVzZWQgYnkgQUlTIGJhc2Ugc3RhdGlvbnMgdG8gc3BlY2lmeSBURE1BIHNsb3Qgb2Zmc2V0cy4KIiIiCgppbXBvcnQgcHlhaXNubWVhLm1lc3NhZ2VzLmFpc21lc3NhZ2UKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmNsYXNzIFR5cGUxNkFzc2lnbm1lbnRNb2RlQ29tbWFuZChweWFpc25tZWEubWVzc2FnZXMuYWlzbWVzc2FnZS5BSVNNZXNzYWdlKToKICAgICIiIgogICAgTk8gUkVBTCBMSUZFIFRFU1QgREFUQSBGT1VORCBZRVQhCjx8ZmltX2VuZHw+"]
["9507b865675a40bb4b538585ea43b2ee269b93db-1","9507b865675a40bb4b538585ea43b2ee269b93db","PHxmaW1fcHJlZml4fD4KZnJvbSBsb2dzIGltcG9ydCBsb2dEZWNvcmF0b3IgYXMgbEQKaW1wb3J0IGpzb25yZWYKaW1wb3J0IG51bXB5IGFzIG5wIAoKY29uZmlnICAgPSBqc29ucmVmLmxvYWQob3BlbignLi4vY29uZmlnL2NvbmZpZy5qc29uJykpCmxvZ0Jhc2UgID0gY29uZmlnWydsb2dnaW5nJ11bJ2xvZ0Jhc2UnXSArICcubGliLmRlbnNpdHkubGluZWFyUmVncmVzc2lvbi5CYXllc2lhbkxSJwoKY2xhc3MgQmF5ZXNpYW5MUl9Ob3JtYWw6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIHNpZ21hTm9pc2U9MS4sIHRhdT0xKToKICAgICAgICAnJydJbml0aWFsaXplIGEgQmF5ZXNpYW4gbGluZWFyIG1vZGVsIHdpdGggR2F1c2lhbiBwcmlvcnMKICAgICAgICAKICAgICAgICBQYXJhbWV0ZXJzCiAgICAgICAgLS0tLS0tLS0tLQogICAgICAgIGQgOiBpbnQKICAgICAgICAgICAgdGhlIGRpbWVuc2lvbmFsaXR5IG9mIHRoZSBzcGFjZQogICAgICAgIHNpZ21hTm9pc2UgOiBmbG9hdCwgb3B0aW9uYWwKICAgICAgICAgICAgbm9pc2Ugc2lnbWEsIGJ5IGRlZmF1bHQgMQogICAgICAgIHRhdSA6IGZsb2F0LCBvcHRpb25hbAogICAgICAgICAgICB0aGUgc2NhbGUgb2YgdGhlIGluaXRpYWwgc3RhbmRhcmQgZGV2aWF0aW9uLCBieSBkZWZhdWx0IDEKICAgICAgICAKICAgICAgICAnJycKCiAgICAgICAgYXNzZXJ0IHR5cGUoZCkgaXMgaW50LCAiVGhlIGRpbWVuc2lvbiBtdXN0IGJlIGFuIGludGVnZXIiCgogICAgICAgIHNlbGYuZCA9IGQKICAgICAgICBzZWxmLnNpZ21hTm9pc2UgPSBzaWdtYU5vaXNlCiAgICAgICAgc2VsZi53ID0gbnAuemVyb3Moc2VsZi5kKQogICAgICAgIHNlbGYuViA9IG5wLmV5ZShzZWxmLmQpKnRhdQoKICAgICAgICByZXR1cm4KCiAgICBkZWYgX19yZXByX18oc2VsZik6CgoKICAgICAgICB2ID0gJ1xuJy5qb2luKFsgKGYnfCAgICAge219JyBpZiBpID4gMCBlbHNlIGYne219JykgZm9yIGksIG0gaW4gZW51bWVyYXRlKHN0cihzZWxmLlYpLnNwbGl0KCdcbicpKV0pCgogICAgICAgIHJlc3VsdCA9ICcnCiAgICAgICAgcmVzdWx0ICs9IGYnKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbicKICAgICAgICByZXN1bHQgKz0gZid8IEJheWVzaWFuIExpbmVhciBSZWdyZXNzb3IsIEdhdXNzaWFuIFByaW9yLCBHYXVzc2lhbiBQb3N0ZXJpb3IgIFxuJwogICAgICAgIHJlc3VsdCArPSBmJystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4nCiAgICAgICAgcmVzdWx0ICs9IGYnfCB3ID0ge3N0cihzZWxmLncuZmxhdHRlbigpKX1cbicKICAgICAgICByZXN1bHQgKz0gZid8IFYgPSB7dn1cbicKICAgICAgICByZXN1bHQgKz0gZicrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJwoKICAgICAgICByZXR1cm4gcmVzdWx0CgogICAgQGxELmxvZyhsb2dCYXNlICsgJy5CYXllc2lhbkxSX05vcm1hbC5maXQnKQogICAgZGVmIGZpdChsb2dnZXIsIHNlbGYsIFhTYW1wbGUsIHlTYW1wbGUpOgogICAgICAgICcnJ1tzdW1tYXJ5XQogICAgICAgIAogICAgICAgIFBhcmFtZXRlcnMKICAgICAgICAtLS0tLS0tLS0tCiAgICAgICAgWHNhbXBsZSA6IFt0eXBlXQogICAgICAgICAgICBbZGVzY3JpcHRpb25dCiAgICAgICAgeVNhbXBsZSA6IFt0eXBlXQogICAgICAgICAgICBbZGVzY3JpcHRpb25dCiAgICAgICAgJycnCgogICAgICAgIHduLCBWbiA9IE5vbmUsIE5vbmUKICAgICAgICB0cnk6CiAgICAgICAgICAgIFYwID0gc2VsZi5WLmNvcHkoKQogICAgICAgICAgICB3MCA9IHNlbGYudy5jb3B5KCkucmVzaGFwZSgoLTEsIDEpKQogICAgICAgICAgICBzaWdtYSA9IHNlbGYuc2lnbWFOb2lzZQoKICAgICAgICAgICAgeVNhbXBsZSA9IHlTYW1wbGUucmVzaGFwZSgoLTEsMSkpCiAgICAgICAgCiAgICAgICAgICAgIFYwSW52ID0gbnAubGluYWxnLmludihWMCkKICAgICAgICAgICAgVm4gPSAgc2lnbWEqKjIgKiBucC5saW5hbGcuaW52KCBzaWdtYSoqMiAqIFYwSW52ICsgWFNhbXBsZS5UIEAgWFNhbXBsZSkKICAgICAgICAgICAgd24gPSBWbiBAIFYwSW52IEAgdzAgKyAoMS9zaWdtYSoqMikgKiBWbiBAIFhTYW1wbGUuVCBAIHlTYW1wbGUKICAgICAgICAgICAgcHJpbnQoJ0RvbmUnKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGYnVW5hYmxlIHRvIHVwZGF0ZSBwYXJhbWV0ZXJzIGZvciB0aGUgcHJvdmlkZWQgZGF0YToge2V9JykKICAgICAgICAgICAgcHJpbnQoZidVbmFibGUgdG8gdXBkYXRlIHBhcmFtZXRlcnMgZm9yIHRoZSBwcm92aWRlZCBkYXRhOiB7ZX0nKQogICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgIHNlbGYuViA9IFZuLmNvcHkoKQogICAgICAgICAgICBzZWxmLncgPSB3bi5jb3B5KCkKCiAgICAgICAgcmV0dXJuCgogICAgZGVmIHByZWRpY3Qoc2VsZiwgWCk6CiAgICAgICAgJycnW3N1bW1hcnldCiAgICAgICAgCjx8ZmltX2hvbGV8PgogICAgICAgICcnJwoKICAgICAgICByZXN1bHQgPSBYIEAgc2VsZi53LnJlc2hhcGUoKC0xLCAxKSkKCiAgICAgICAgcmV0dXJuIHJlc3VsdAo8fGZpbV9zdWZmaXh8PgogICAgICAgIFBhcmFtZXRlcnMKICAgICAgICAtLS0tLS0tLS0tCiAgICAgICAgWCA6IFt0eXBlXQogICAgICAgICAgICBbZGVzY3JpcHRpb25dCjx8ZmltX2VuZHw+"]
["1fa11e1610bf67eaf9bdcb0e577e21d50f8fbcff-1","1fa11e1610bf67eaf9bdcb0e577e21d50f8fbcff","PHxmaW1fcHJlZml4fD4KIiIiCkZpbGU6IGV4YW1wbGVzL2ZpdHRlci9maXR0ZXJfY2hpX3NxdWFyZWQucHkKQXV0aG9yOiBLZWl0aCBUYXVzY2hlcgpEYXRlOiAxMCBBcHIgMjAyMQoKRGVzY3JpcHRpb246IEV4YW1wbGUgc2hvd2luZyBob3cgdGhlIHJlZHVjZWRfY2hpX3NxdWFyZWQgYW5kCiAgICAgICAgICAgICByZWR1Y2VkX2NoaV9zcXVhcmVkX2V4cGVjdGVkX2Rpc3RyaWJ1dGlvbiBwcm9wZXJ0aWVzIG9mIHRoZSBGaXR0ZXIKICAgICAgICAgICAgIGNsYXNzIGJlaGF2ZS4KIiIiCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGwKZnJvbSBkaXN0cHkgaW1wb3J0IEdhdXNzaWFuRGlzdHJpYnV0aW9uCmZyb20gcHlsaW5leCBpbXBvcnQgQmFzaXMsIEJhc2lzU3VtLCBGaXR0ZXIKCnNlZWQgPSAwCmZvbnRzaXplID0gMjQKbnVtX3hfdmFsdWVzID0gMTAwMDAKbnVtX2N1cnZlcyA9IDEwMDAwCm51bV9jaGFubmVscyA9IDEwMApudW1fYmFzaXNfdmVjdG9ycyA9IDI1CmFyYml0cmFyeV9jb25zdGFudCA9IDM0My4wMTMKCm5wLnJhbmRvbS5zZWVkKHNlZWQpCgplcnJvciA9IG5wLm9uZXMobnVtX2NoYW5uZWxzKQpiYXNpcyA9IEJhc2lzKG5wLmlkZW50aXR5KG51bV9jaGFubmVscylbOm51bV9iYXNpc192ZWN0b3JzLDpdKQpiYXNpc19zdW0gPSBCYXNpc1N1bShbJ3NvbGUnXSwgW2Jhc2lzXSkKCnByaW9yX21lYW4gPSBucC5yYW5kb20ubm9ybWFsKGxvYz0wLCBzY2FsZT0xMDAsIHNpemU9KG51bV9iYXNpc192ZWN0b3JzKSkKcHJpb3JfdmFyaWFuY2UgPSAxCnByaW9yX3ZhcmlhbmNlcyA9IG5wLm9uZXMobnVtX2Jhc2lzX3ZlY3RvcnMpICogcHJpb3JfdmFyaWFuY2UKcHJpb3JfY292YXJpYW5jZSA9IG5wLmRpYWcocHJpb3JfdmFyaWFuY2VzKQpwcmlvciA9IEdhdXNzaWFuRGlzdHJpYnV0aW9uKHByaW9yX21lYW4sIHByaW9yX2NvdmFyaWFuY2UpCgpub2lzZWxlc3NfZGF0YSA9XAogICAgbnAuYXJyYXkoW2Jhc2lzKHByaW9yLmRyYXcoKSkgZm9yIGljdXJ2ZSBpbiByYW5nZShudW1fY3VydmVzKV0pCgpkYXRhID0gbm9pc2VsZXNzX2RhdGEgKyAoZXJyb3JbbnAubmV3YXhpcyw6XSAqXAogICAgbnAucmFuZG9tLnN0YW5kYXJkX25vcm1hbChzaXplPShudW1fY3VydmVzLCBudW1fY2hhbm5lbHMpKSkKCmZpdHRlcl93aXRob3V0X3ByaW9ycyA9IEZpdHRlcihiYXNpc19zdW0sIGRhdGEsIGVycm9yPWVycm9yKQpmaXR0ZXJfd2l0aF9wcmlvcnMgPSBGaXR0ZXIoYmFzaXNfc3VtLCBkYXRhLCBlcnJvcj1lcnJvciwgc29sZV9wcmlvcj1wcmlvcikKCmZpZyA9IHBsLmZpZ3VyZShmaWdzaXplPSgxMiw5KSkKYXggPSBmaWcuYWRkX3N1YnBsb3QoMTExKQoKYXguaGlzdChmaXR0ZXJfd2l0aG91dF9wcmlvcnMucmVkdWNlZF9jaGlfc3F1YXJlZCwgaGlzdHR5cGU9J2JhcicsIGNvbG9yPSdDMCcsXAogICAgbGFiZWw9J05vIHByaW9ycycsIGJpbnM9MTAwLCBkZW5zaXR5PVRydWUsIGFscGhhPTAuNSkKYXguaGlzdChmaXR0ZXJfd2l0aF9wcmlvcnMucmVkdWNlZF9jaGlfc3F1YXJlZCwgaGlzdHR5cGU9J2JhcicsIGNvbG9yPSdDMScsXAogICAgbGFiZWw9J1dpdGggcHJpb3JzJywgYmlucz0xMDAsIGRlbnNpdHk9VHJ1ZSwgYWxwaGE9MC41KQoKeGxpbSA9IGF4LmdldF94bGltKCkKeWxpbSA9IGF4LmdldF95bGltKCkKeF92YWx1ZXMgPSBucC5saW5zcGFjZSh4bGltWzBdLCB4bGltWzFdLCBudW1feF92YWx1ZXMpCgpmaXR0ZXJfd2l0aG91dF9wcmlvcnMucmVkdWNlZF9jaGlfc3F1YXJlZF9leHBlY3RlZF9kaXN0cmlidXRpb24ucGxvdCh4X3ZhbHVlcyxcCiAgICBjb2xvcj0nQzAnLCBheD1heCwgZm9udHNpemU9Zm9udHNpemUpCmZpdHRlcl93aXRoX3ByaW9ycy5yZWR1Y2VkX2NoaV9zcXVhcmVkX2V4cGVjdGVkX2Rpc3RyaWJ1dGlvbi5wbG90KHhfdmFsdWVzLFwKICAgIGNvbG9yPSdDMScsIGF4PWF4LCBmb250c2l6ZT1mb250c2l6ZSkKCmV4cGVjdGVkX21lYW5fd2l0aF9wcmlvcnMgPVwKICAgIGZpdHRlcl93aXRoX3ByaW9ycy5yZWR1Y2VkX2NoaV9zcXVhcmVkX2V4cGVjdGVkX21lYW4KYXgucGxvdChbMV0gKiAyLCB5bGltLCBjb2xvcj0nQzAnLCBsaW5lc3R5bGU9Jy0tJykKYXgucGxvdChbbnAubWVhbihmaXR0ZXJfd2l0aG91dF9wcmlvcnMucmVkdWNlZF9jaGlfc3F1YXJlZCldICogMiwgeWxpbSxcCiAgICBjb2xvcj0nQzAnLCBsaW5lc3R5bGU9JzonKQpheC5wbG90KFtleHBlY3RlZF9tZWFuX3dpdGhfcHJpb3JzXSAqIDIsIHlsaW0sIGNvbG9yPSdDMScsIGxpbmVzdHlsZT0nLS0nKQo8fGZpbV9ob2xlfD4KYXguc2V0X3lsaW0oeWxpbSkKCmF4LnNldF94bGFiZWwoJyRcY2hpXjIkJywgc2l6ZT1mb250c2l6ZSkKYXguc2V0X3lsYWJlbCgnUERGJywgc2l6ZT1mb250c2l6ZSkKYXgubGVnZW5kKGZvbnRzaXplPWZvbnRzaXplKQoKcGwuc2hvdygpCgo8fGZpbV9zdWZmaXh8PgpheC5wbG90KFtucC5tZWFuKGZpdHRlcl93aXRoX3ByaW9ycy5yZWR1Y2VkX2NoaV9zcXVhcmVkKV0gKiAyLCB5bGltLFwKICAgIGNvbG9yPSdDMScsIGxpbmVzdHlsZT0nOicpCgpheC5zZXRfeGxpbSh4bGltKQo8fGZpbV9lbmR8Pg=="]
["2f06839cc55af9aa419ea3c6ca2371166f029845-1","2f06839cc55af9aa419ea3c6ca2371166f029845","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGZhY2VfcmVjb2duaXRpb24KaW1wb3J0IGN2MgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG9zCmZyb20gZmxhc2sgaW1wb3J0ICoKZnJvbSBmbGFza19jb3JzIGltcG9ydCBDT1JTCmltcG9ydCBteXNxbAppbXBvcnQgbXlzcWwuY29ubmVjdG9yIGFzIGNvbm4KYXBwID0gRmxhc2soX19uYW1lX18pCkNPUlMoYXBwKQpkYiA9IFtdCmtub3duX3BhdGggPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksICJJbWFnZXMvS25vd25fZmFjZXMvIikKdW5rbm93bl9wYXRoID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCAiSW1hZ2VzL1Vua25vd25fZmFjZXMvIikKZGVmIGdldF9kYXRhKCk6CiAgICBnbG9iYWwgZGIKICAgIGNvbiA9IGNvbm4uY29ubmVjdChob3N0PSdsb2NhbGhvc3QnLCBkYXRhYmFzZT0nZmFjZV9yZWMnLHVzZXI9J3Jvb3QnLCBwYXNzd29yZD0nJywgY2hhcnNldD0ndXRmOCcsIHBvcnQ9MzMwNikKICAgIGN1cnNvciA9IGNvbi5jdXJzb3IoKQogICAgc3FsID0gJ3NlbGVjdCAqIGZyb20gaW1hZ2VzJwo8fGZpbV9ob2xlfD4KICAgIGN1cnNvci5jbG9zZSgpCiAgICBjb24uY2xvc2UoKQpnZXRfZGF0YSgpCjx8ZmltX3N1ZmZpeHw+CiAgICBjdXJzb3IuZXhlY3V0ZShzcWwpCiAgICByZXN1bHQgPSBjdXJzb3IuZmV0Y2hhbGwoKQogICAgcHJpbnQoInN1Y3Nlc3NmdWxseSBjb25uZWN0ZWQiKQogICAgcHJpbnQocmVzdWx0KQo8fGZpbV9lbmR8Pg=="]
["9b45f607ae9ff5d95f79e2cf0a66d4adf09caf41-2","9b45f607ae9ff5d95f79e2cf0a66d4adf09caf41","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udGVzdCBpbXBvcnQgVGVzdENhc2UKCmZyb20gbWVldGluZy5tb2RlbHMgaW1wb3J0IFJlc2VydmF0aW9uCmZyb20gbWVldGluZy50ZXN0cy51dGlscyBpbXBvcnQgKGNyZWF0ZV9mdWxsX3Jlc2VydmF0aW9uLCBjcmVhdGVfdXNlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nZ2VkVmlld1Rlc3RDYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZXJtaXNzaW9uUmVxdWlyZWRUZXN0Q2FzZSkKCgpjbGFzcyB0ZXN0X2FqYXhfY2FuY2VsX3Jlc2VydmF0aW9uKExvZ2dlZFZpZXdUZXN0Q2FzZSwgVGVzdENhc2UpOgogICAgdXJsID0gJy9tZWV0aW5nL2FqYXgvcmVzZXJ2YXRpb24vY2FuY2VsL3swfScKICAgIHVybF9uYW1lID0gJ2FqYXhfY2FuY2VsX3Jlc2VydmF0aW9uJwogICAgcmVkaXJlY3RfdXJsX25hbWUgPSAncGlsb3RfcmVzZXJ2YXRpb24nCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgc2V0VXBUZXN0RGF0YShjbHMpOgogICAgICAgIHN1cGVyKCkuc2V0VXBUZXN0RGF0YSgpCiAgICAgICAgY2xzLnJlcyA9IGNyZWF0ZV9mdWxsX3Jlc2VydmF0aW9uKCcxJywgdXNlcj1jbHMudXNlcikKICAgICAgICB1c2VyID0gY3JlYXRlX3VzZXIoJ3VzZXIyJywgJ2RkZGRkJykKICAgICAgICBjbHMucmVzMiA9IGNyZWF0ZV9mdWxsX3Jlc2VydmF0aW9uKCcyJywgdXNlcj11c2VyKQoKICAgIGRlZiBnZXRfdXJsKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnVybC5mb3JtYXQoc2VsZi5yZXMucGspCgogICAgZGVmIGdldF91cmxfZnJvbV9uYW1lKHNlbGYsIGFyZ3M9Tm9uZSwga3dhcmdzPU5vbmUpOgogICAgICAgIGt3YXJncyA9IHsKICAgICAgICAgICAgICAgICAgJ3BrJzogc2VsZi5yZXMucGssCiAgICAgICAgICAgICAgICAgfQogICAgICAgIHJldHVybiBzdXBlcigpLmdldF91cmxfZnJvbV9uYW1lKGt3YXJncz1rd2FyZ3MpCgogICAgZGVmIHRlc3RfcmVzZXJ2YXRpb25fY2FuY2VsZWQoc2VsZik6CiAgICAgICAgc2VsZi5jbGllbnQuZm9yY2VfbG9naW4oc2VsZi51c2VyKQogICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQucG9zdChzZWxmLmdldF91cmwoKSkKICAgICAgICBzZWxmLmFzc2VydFJlZGlyZWN0cyhyZXNwb25zZSwgc2VsZi5nZXRfcmVkaXJlY3RfdXJsKCkpCiAgICAgICAgcmVzID0gUmVzZXJ2YXRpb24ub2JqZWN0cy5nZXQocGs9c2VsZi5yZXMucGspCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcy5jYW5jZWxlZCkKCiAgICBkZWYgdGVzdF90cnlfY2FuY2VsX25vbl9vd25lZF9yZXNlcnZhdGlvbihzZWxmKToKICAgICAgICBzZWxmLmNsaWVudC5mb3JjZV9sb2dpbihzZWxmLnVzZXIpCiAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5wb3N0KHNlbGYudXJsLmZvcm1hdChzZWxmLnJlczIucGspKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDQwNCkKCgpjbGFzcyB0ZXN0X2FqYXhfY29uZmlybV9yZXNlcnZhdGlvbihMb2dnZWRWaWV3VGVzdENhc2UsIFRlc3RDYXNlKToKICAgIHVybCA9ICcvbWVldGluZy9hamF4L3Jlc2VydmF0aW9uL2NvbmZpcm0vezB9Jwo8fGZpbV9ob2xlfD4KICAgIGRlZiBzZXRVcFRlc3REYXRhKGNscyk6CiAgICAgICAgc3VwZXIoKS5zZXRVcFRlc3REYXRhKCkKICAgICAgICBjbHMucmVzID0gY3JlYXRlX2Z1bGxfcmVzZXJ2YXRpb24odXNlcj1jbHMudXNlcikKICAgICAgICB1c2VyID0gY3JlYXRlX3VzZXIoJ3VzZXIyJywgJ2RkZGRkJykKICAgICAgICBjbHMucmVzMiA9IGNyZWF0ZV9mdWxsX3Jlc2VydmF0aW9uKCcyJywgdXNlcj11c2VyKQoKICAgIGRlZiBnZXRfdXJsKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnVybC5mb3JtYXQoc2VsZi5yZXMucGspCgogICAgZGVmIGdldF91cmxfZnJvbV9uYW1lKHNlbGYsIGFyZ3M9Tm9uZSwga3dhcmdzPU5vbmUpOgogICAgICAgIGt3YXJncyA9IHsKICAgICAgICAgICAgICAgICAgJ3BrJzogc2VsZi5yZXMucGssCiAgICAgICAgICAgICAgICAgfQogICAgICAgIHJldHVybiBzdXBlcigpLmdldF91cmxfZnJvbV9uYW1lKGt3YXJncz1rd2FyZ3MpCgogICAgZGVmIHRlc3RfcmVzZXJ2YXRpb25fY29uZmlybWVkKHNlbGYpOgogICAgICAgIHNlbGYuY2xpZW50LmZvcmNlX2xvZ2luKHNlbGYudXNlcikKICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LnBvc3Qoc2VsZi5nZXRfdXJsKCkpCiAgICAgICAgc2VsZi5hc3NlcnRSZWRpcmVjdHMocmVzcG9uc2UsIHNlbGYuZ2V0X3JlZGlyZWN0X3VybCgpKQogICAgICAgIHJlcyA9IFJlc2VydmF0aW9uLm9iamVjdHMuZ2V0KHBrPXNlbGYucmVzLnBrKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXMuaXNfY29uZmlybWVkKQoKICAgIGRlZiB0ZXN0X3RyeV9jb25maXJtZV9jYW5jZWxlZF9yZXNlcnZhdGlvbihzZWxmKToKICAgICAgICBzZWxmLmNsaWVudC5mb3JjZV9sb2dpbihzZWxmLnVzZXIpCiAgICAgICAgc2VsZi5yZXMuY2FuY2VsKCkKICAgICAgICBzZWxmLnJlcy5zYXZlKCkKICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LnBvc3Qoc2VsZi5nZXRfdXJsKCkpCiAgICAgICAgc2VsZi5hc3NlcnRSZWRpcmVjdHMocmVzcG9uc2UsIHNlbGYuZ2V0X3JlZGlyZWN0X3VybCgpKQogICAgICAgIHJlcyA9IFJlc2VydmF0aW9uLm9iamVjdHMuZ2V0KHBrPXNlbGYucmVzLnBrKQogICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzLmlzX2NvbmZpcm1lZCgpKQoKICAgIGRlZiB0ZXN0X3RyeV9jYW5jZWxfbm9uX293bmVkX3Jlc2VydmF0aW9uKHNlbGYpOgogICAgICAgIHNlbGYuY2xpZW50LmZvcmNlX2xvZ2luKHNlbGYudXNlcikKICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LnBvc3Qoc2VsZi51cmwuZm9ybWF0KHNlbGYucmVzMi5waykpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgNDA0KQoKCmNsYXNzIHRlc3RfYWpheF9zdGFmZl9jYW5jZWxfcmVzZXJ2YXRpb24oUGVybWlzc2lvblJlcXVpcmVkVGVzdENhc2UsIFRlc3RDYXNlKToKICAgIHVybCA9ICcvbWVldGluZy9hamF4L3N0YWZmL3Jlc2VydmF0aW9uL2NhbmNlbC97MH0nCiAgICB1cmxfbmFtZSA9ICdhamF4X3N0YWZmX2NhbmNlbF9yZXNlcnZhdGlvbicKICAgIHJlZGlyZWN0X3VybF9uYW1lID0gJ3N0YWZmX3Jlc2VydmF0aW9uX292ZXJ2aWV3JwogICAgcGVybWlzc2lvbl9yZXF1aXJlZCA9IFsncmVzZXJ2YXRpb25fdmFsaWRhdGlvbiddCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgc2V0VXBUZXN0RGF0YShjbHMpOgogICAgICAgIHN1cGVyKCkuc2V0VXBUZXN0RGF0YSgpCiAgICAgICAgY2xzLnJlcyA9IGNyZWF0ZV9mdWxsX3Jlc2VydmF0aW9uKHVzZXI9Y2xzLnVzZXIpCgogICAgZGVmIGdldF91cmwoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYudXJsLmZvcm1hdChzZWxmLnJlcy5waykKCiAgICBkZWYgZ2V0X3VybF9mcm9tX25hbWUoc2VsZiwgYXJncz1Ob25lLCBrd2FyZ3M9Tm9uZSk6CiAgICAgICAga3dhcmdzID0gewogICAgICAgICAgICAgICAgICAncGsnOiBzZWxmLnJlcy5waywKICAgICAgICAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X3VybF9mcm9tX25hbWUoa3dhcmdzPWt3YXJncykKCiAgICBkZWYgZ2V0X3JlZGlyZWN0X3VybChzZWxmKToKICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfcmVkaXJlY3RfdXJsKGt3YXJncz17J3BrJzogc2VsZi5yZXMucGt9KQoKICAgIGRlZiB0ZXN0X3Jlc2VydmF0aW9uX2NhbmNlbGVkKHNlbGYpOgogICAgICAgIHNlbGYuY2xpZW50LmZvcmNlX2xvZ2luKHNlbGYudXNlcikKICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LnBvc3Qoc2VsZi5nZXRfdXJsKCkpCiAgICAgICAgc2VsZi5hc3NlcnRSZWRpcmVjdHMocmVzcG9uc2UsIHNlbGYuZ2V0X3JlZGlyZWN0X3VybCgpKQogICAgICAgIHJlcyA9IFJlc2VydmF0aW9uLm9iamVjdHMuZ2V0KHBrPXNlbGYucmVzLnBrKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXMuY2FuY2VsZWQpCgoKY2xhc3MgdGVzdF9hamF4X3N0YWZmX2NvbmZpcm1fcmVzZXJ2YXRpb24oUGVybWlzc2lvblJlcXVpcmVkVGVzdENhc2UsIFRlc3RDYXNlKToKICAgIHVybCA9ICcvbWVldGluZy9hamF4L3N0YWZmL3Jlc2VydmF0aW9uL2NvbmZpcm0vezB9JwogICAgdXJsX25hbWUgPSAnYWpheF9zdGFmZl9jb25maXJtX3Jlc2VydmF0aW9uJwogICAgcmVkaXJlY3RfdXJsX25hbWUgPSAnc3RhZmZfcmVzZXJ2YXRpb25fb3ZlcnZpZXcnCiAgICBwZXJtaXNzaW9uX3JlcXVpcmVkID0gWydyZXNlcnZhdGlvbl92YWxpZGF0aW9uJ10KCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBzZXRVcFRlc3REYXRhKGNscyk6CiAgICAgICAgc3VwZXIoKS5zZXRVcFRlc3REYXRhKCkKICAgICAgICBjbHMucmVzID0gY3JlYXRlX2Z1bGxfcmVzZXJ2YXRpb24odXNlcj1jbHMudXNlcikKCiAgICBkZWYgZ2V0X3VybChzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi51cmwuZm9ybWF0KHNlbGYucmVzLnBrKQoKICAgIGRlZiBnZXRfdXJsX2Zyb21fbmFtZShzZWxmLCBhcmdzPU5vbmUsIGt3YXJncz1Ob25lKToKICAgICAgICBrd2FyZ3MgPSB7CiAgICAgICAgICAgICAgICAgICdwayc6IHNlbGYucmVzLnBrLAogICAgICAgICAgICAgICAgIH0KICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfdXJsX2Zyb21fbmFtZShrd2FyZ3M9a3dhcmdzKQoKICAgIGRlZiBnZXRfcmVkaXJlY3RfdXJsKHNlbGYpOgogICAgICAgIHJldHVybiBzdXBlcigpLmdldF9yZWRpcmVjdF91cmwoa3dhcmdzPXsncGsnOiBzZWxmLnJlcy5wa30pCgogICAgZGVmIHRlc3RfcmVzZXJ2YXRpb25fY29uZmlybWVkKHNlbGYpOgogICAgICAgIHNlbGYuY2xpZW50LmZvcmNlX2xvZ2luKHNlbGYudXNlcikKICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LnBvc3Qoc2VsZi5nZXRfdXJsKCkpCiAgICAgICAgc2VsZi5hc3NlcnRSZWRpcmVjdHMocmVzcG9uc2UsIHNlbGYuZ2V0X3JlZGlyZWN0X3VybCgpKQogICAgICAgIHJlcyA9IFJlc2VydmF0aW9uLm9iamVjdHMuZ2V0KHBrPXNlbGYucmVzLnBrKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXMuaXNfY29uZmlybWVkKQoKICAgIGRlZiB0ZXN0X3RyeV9jb25maXJtZV9jYW5jZWxlZF9yZXNlcnZhdGlvbihzZWxmKToKICAgICAgICBzZWxmLmNsaWVudC5mb3JjZV9sb2dpbihzZWxmLnVzZXIpCiAgICAgICAgc2VsZi5yZXMuY2FuY2VsKCkKICAgICAgICBzZWxmLnJlcy5zYXZlKCkKICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LnBvc3Qoc2VsZi5nZXRfdXJsKCkpCiAgICAgICAgc2VsZi5hc3NlcnRSZWRpcmVjdHMocmVzcG9uc2UsIHNlbGYuZ2V0X3JlZGlyZWN0X3VybCgpKQogICAgICAgIHJlcyA9IFJlc2VydmF0aW9uLm9iamVjdHMuZ2V0KHBrPXNlbGYucmVzLnBrKQogICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzLmlzX2NvbmZpcm1lZCgpKQo8fGZpbV9zdWZmaXh8PgogICAgdXJsX25hbWUgPSAnYWpheF9jb25maXJtX3Jlc2VydmF0aW9uJwogICAgcmVkaXJlY3RfdXJsX25hbWUgPSAncGlsb3RfcmVzZXJ2YXRpb24nCgogICAgQGNsYXNzbWV0aG9kCjx8ZmltX2VuZHw+"]
["9531c33f8fad759c9efad713bdd971ce886a27e7-1","9531c33f8fad759c9efad713bdd971ce886a27e7","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMy42CmltcG9ydCByb3NweQppbXBvcnQgbWF0aApmcm9tIHN0ZF9tc2dzLm1zZyBpbXBvcnQgRW1wdHksIFN0cmluZywgVUludDgKZnJvbSBzZW5zb3JfbXNncy5tc2cgaW1wb3J0IEpveQpmcm9tIGdlb21ldHJ5X21zZ3MubXNnIGltcG9ydCBUd2lzdAoKZnJvbSBweXBhcnJvdC5NaW5pZHJvbmUgaW1wb3J0IE1hbWJvCgppbXBvcnQgX3RocmVhZAoKI1ZhcmlhYmxlIHRoYXQgd2lsbCBzdG9yZSB0aGUgcGFyYW1ldGVycyBvZiB0aGUgbWFtYm8gZHJvbmUKbWFtYm9BZGQgPSAiZTA6MTQ6NjA6NWM6M2Q6YzciCndpZmkgPSBGYWxzZQpyZXRyaWVzID0gMTIKCiNUaGUgbWFtYm8gb2JqZWN0Cm1hbWJvID0gTWFtYm8oIiIsdXNlX3dpZmk9d2lmaSkKCiNDaGVja3MgaWYgdGhlIGRyb25lIGlzIGFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBST1MKc3VjY2VzcyA9IEZhbHNlCgojVmFyaWFibGVzIG9mIHRoZSBkcm9uZQp0a28gPSBGYWxzZQpsYW5kID0gRmFsc2UKY2Fubm9uID0gRmFsc2UKYXV0b190a28gPSBGYWxzZQpuZWVkX3RvX2NoYW5nZV9tb2RlID0gRmFsc2UKbmVlZF90b190b2dnbGVfbW9kZSA9IEZhbHNlCnBfbW9kZSA9IDAKbGluWCA9IDAKbGluWSA9IDAKQWx0ID0gMApIZGcgPSAwCgojUHJlZmZlcmVkIHBpbG90aW5nIG1vZGUgZnVuY3Rpb24KZGVmIHBpbG90bW9kZShNYW1ibyxzX21vZGUpOgogICAgaWYgc19tb2RlLmRhdGE9PTA6CiAgICAgICAgbW9kZSA9ICdlYXN5JwogICAgZWxpZiBzX21vZGUuZGF0YT09MToKICAgICAgICBtb2RlID0gJ21lZGl1bScKICAgIGVsaWYgc19tb2RlLmRhdGE9PTI6CiAgICAgICAgbW9kZSA9ICdkaWZmaWN1bHQnCiAgICBlbHNlOgogICAgICAgIHJldHVybgoKICAgICNjb21tYW5kX3R1cGxlID0gTWFtYm8uY29tbWFuZF9wYXJzZXIuZ2V0X2NvbW1hbmRfdHVwbGUoIm1pbmlkcm9uZSIsICJQaWxvdGluZ1NldHRpbmdzIiwiUHJlZmVycmVkUGlsb3RpbmdNb2RlIikKICAgIChjb21tYW5kX3R1cGxlLCBlbnVtX3R1cGxlKSA9IE1hbWJvLmNvbW1hbmRfcGFyc2VyLmdldF9jb21tYW5kX3R1cGxlX3dpdGhfZW51bSgibWluaWRyb25lIiwgIlBpbG90aW5nU2V0dGluZ3MiLCJQcmVmZXJyZWRQaWxvdGluZ01vZGUiLG1vZGUpCgogICAgI3JldHVybiBNYW1iby5kcm9uZV9jb25uZWN0aW9uLnNlbmRfZW51bV9jb21tYW5kX3BhY2tldF9hY2soY29tbWFuZF90dXBsZSxzX21vZGUuZGF0YSk7CiAgICByZXR1cm4gTWFtYm8uZHJvbmVfY29ubmVjdGlvbi5zZW5kX2VudW1fY29tbWFuZF9wYWNrZXRfYWNrKGNvbW1hbmRfdHVwbGUsZW51bV90dXBsZSk7CgpkZWYgdG9nZ2xlbW9kZShNYW1ibyk6CiAgICBjb21tYW5kX3R1cGxlID0gTWFtYm8uY29tbWFuZF9wYXJzZXIuZ2V0X2NvbW1hbmRfdHVwbGUoIm1pbmlkcm9uZSIsICJQaWxvdGluZyIsIlRvZ2dsZVBpbG90aW5nTW9kZSIpCiAgICByZXR1cm4gTWFtYm8uZHJvbmVfY29ubmVjdGlvbi5zZW5kX25vcGFyYW1fY29tbWFuZF9wYWNrZXRfYWNrKGNvbW1hbmRfdHVwbGUpCgojU2V0IHByZWZmZXJlZCBwaWxvdGluZyBtb2RlCmRlZiBjYl9waWxvdG1vZGUocCk6CiAgICBnbG9iYWwgcF9tb2RlCiAgICBnbG9iYWwgbmVlZF90b19jaGFuZ2VfbW9kZQogICAgcF9tb2RlID0gcAogICAgbmVlZF90b19jaGFuZ2VfbW9kZSA9IFRydWUKCiNUb2dnbGUgZmxpZ2h0IG1vZGUKZGVmIGNiX3RvZ2dsZV9tb2RlKGRhdGEpOgogICAgZ2xvYmFsIG5lZWRfdG9fdG9nZ2xlX21vZGUKICAgIHJvc3B5LmxvZ2luZm8oIlxuIiArIHJvc3B5LmdldF9uYW1lKCkgKyAiIFRvZ2dsaW5nIE1vZGUuLi5cbiIpCiAgICBuZWVkX3RvX3RvZ2dsZV9tb2RlID0gVHJ1ZQoKI1NlbmRzIHRoZSBzcGluIGZ1bmN0aW9uIHRvIGFub3RoZXIgdGhyZWFkCmRlZiBzcGluX3RoKG5hbWUsZW52aSk6CiAgICByb3NweS5zcGluKCkKCiNDYWxsYmFjayBvZiB0aGUgbGFuZCBjb21tYW5kCmRlZiBjYl9sYW5kKGRhdGEpOgogICAgZ2xvYmFsIGxhbmQKICAgIHJvc3B5LmxvZ2luZm8oIlxuIiArIHJvc3B5LmdldF9uYW1lKCkgKyAiIExhbmQhIVxuIikKICAgIGxhbmQgPSBUcnVlCgojQ2FsbGJhY2sgb2YgdGhlIHRha2Utb2ZmIGNvbW1hbmQKZGVmIGNiX3Rha2Vfb2ZmKGRhdGEpOgogICAgZ2xvYmFsIHRrbwogICAgcm9zcHkubG9naW5mbygiXG4iICsgcm9zcHkuZ2V0X25hbWUoKSArICIgVGFrZS1PZmYhIVxuIikKICAgIHRrbyA9IFRydWUKCiNDQWxsYmFjayBvZiB0aGUgdmVsb2NpdGllcwpkZWYgY2JfY21kX3ZlbChkYXRhKToKICAgIGdsb2JhbCBsaW5YCiAgICBnbG9iYWwgbGluWQogICAgZ2xvYmFsIEFsdAogICAgZ2xvYmFsIEhkZwogICAgcm9zcHkubG9naW5mbyhyb3NweS5nZXRfbmFtZSgpICsgIlxuIExpbmVhcl9YOiAlcyBMaW5lYXJfWTogJXMgTGluZWFyX1o6ICVzIEFuZ3VsYXJfWjogJXMiLGRhdGEubGluZWFyLngsZGF0YS5saW5lYXIueSxkYXRhLmxpbmVhci56LGRhdGEuYW5ndWxhci56KQogICAgbGluWCA9IGRhdGEubGluZWFyLngKICAgIGxpblkgPSBkYXRhLmxpbmVhci55CiAgICBBbHQgPSBkYXRhLmxpbmVhci56CiAgICBIZGcgPSBkYXRhLmFuZ3VsYXIuegoKICAgICNGb3JjZWQgcGVydHVyYmF0aW9uCiMgICAgbGluWCArPSAwLjMKCiMgICAgaWYobGluWCA8IDApOgojCSAgICBsaW5YIC09IDAuMQojICAgIGlmKGxpblkgPCAwKToKIwkgICAgbGluWCArPSAwLjE4Cgo8fGZpbV9ob2xlfD4KCmRlZiBjYl9hdXRvX3Rha2Vfb2ZmKGRhdGEpOgogICAgZ2xvYmFsIGF1dG9fdGtvCiAgICByb3NweS5sb2dpbmZvKCJcbiBBdXRvIFRLTyBhY3RpdmF0ZWQgXG4iKQogICAgYXV0b190a28gPSBUcnVlCgpkZWYgc2F0KHZhbHVlLCBtYXhfdmFsdWUpOgogICAgaWYodmFsdWUgPiBtYXhfdmFsdWUpOgoJICAgIHZhbHVlID0gbWF4X3ZhbHVlCiAgICBpZih2YWx1ZSA8IC1tYXhfdmFsdWUpOgoJICAgIHZhbHVlID0gLW1heF92YWx1ZQogICAgcmV0dXJuIHZhbHVlCgoKI0luaXRpYWxpemF0aW9uIGZ1bmN0aW9uCmRlZiBpbml0KCk6CiAgICBnbG9iYWwgdGtvCiAgICBnbG9iYWwgbGFuZAogICAgZ2xvYmFsIGNhbm5vbgogICAgZ2xvYmFsIGF1dG9fdGtvCiAgICBnbG9iYWwgbGluWAogICAgZ2xvYmFsIGxpblkKICAgIGdsb2JhbCBBbHQKICAgIGdsb2JhbCBIZGcKICAgIGdsb2JhbCBwX21vZGUKICAgIGdsb2JhbCBuZWVkX3RvX2NoYW5nZV9tb2RlCiAgICBnbG9iYWwgbmVlZF90b190b2dnbGVfbW9kZQogICAgcm9zcHkuaW5pdF9ub2RlKCdtYW1ib19ub2RlJyxhbm9ueW1vdXM9VHJ1ZSkKICAgIG1hbWJvQWRkID0gcm9zcHkuZ2V0X3BhcmFtKCd+YnQnLHN0cigiZTA6MTQ6NjA6NWM6M2Q6YzciKSkKICAgIHdpZmkgPSByb3NweS5nZXRfcGFyYW0oJ35tYW1ib193aWZpJyxGYWxzZSkKICAgIHJldHJpZXMgPSByb3NweS5nZXRfcGFyYW0oJ35tYW1ib19yZXRyaWVzJywzKQogICAgcm9zcHkubG9naW5mbygiXG4iICsgcm9zcHkuZ2V0X25hbWUoKSArICJcblBhcmFtZXRlcnM6XG4iICsgbWFtYm9BZGQgKyAiXG4iICsgc3RyKHdpZmkpICsgIlxuIiArIHN0cihyZXRyaWVzKSArIlxuIikKICAgIHNfY21kX3ZlbCA9IHJvc3B5LlN1YnNjcmliZXIoJ2NtZF92ZWwnLFR3aXN0LGNiX2NtZF92ZWwpCiAgICBzX3Rha2Vfb2ZmID0gcm9zcHkuU3Vic2NyaWJlcigndGFrZV9vZmYnLEVtcHR5LGNiX3Rha2Vfb2ZmKQogICAgc19sYW5kID0gcm9zcHkuU3Vic2NyaWJlcignbGFuZCcsRW1wdHksY2JfbGFuZCkKICAgIHNfY2Fubm9uID0gcm9zcHkuU3Vic2NyaWJlcignY2Fubm9uJyxFbXB0eSxjYl9zaG9vdF9jYW5ub24pCiAgICBzX2F1dG9fdGtvID0gcm9zcHkuU3Vic2NyaWJlcignYXV0b190a28nLEVtcHR5LGNiX2F1dG9fdGFrZV9vZmYpCiAgICBzX3BpbG90aW5nX21vZGUgPSByb3NweS5TdWJzY3JpYmVyKCdwaWxvdGluZ19tb2RlJyxVSW50OCxjYl9waWxvdG1vZGUpCiAgICBzX3RvZ2dsZV9tb2RlID0gcm9zcHkuU3Vic2NyaWJlcigndG9nZ2xlX21vZGUnLEVtcHR5LGNiX3RvZ2dsZV9tb2RlKQogICAgcF9yZWFkeSA9IHJvc3B5LlB1Ymxpc2hlcigncmVhZHknLFN0cmluZyxxdWV1ZV9zaXplPTMwKQogICAgbWFtYm8gPSBNYW1ibyhtYW1ib0FkZCx1c2Vfd2lmaT13aWZpKQogICAgc3VjY2VzcyA9IG1hbWJvLmNvbm5lY3QocmV0cmllcykKICAgIGlmKHN1Y2Nlc3MpOgogICAgICAgIG1hbWJvLnNtYXJ0X3NsZWVwKDIpCiAgICAgICAgbWFtYm8uYXNrX2Zvcl9zdGF0ZV91cGRhdGUoKQogICAgICAgIG1hbWJvLnNtYXJ0X3NsZWVwKDIpCiAgICAgICAgbWFtYm8uZmxhdF90cmltKCkKICAgICAgICByYXRlID0gcm9zcHkuUmF0ZSgxMDApCiAgICAgICAgd2hpbGUgbm90IHJvc3B5LmlzX3NodXRkb3duKCk6CgogICAgICAgICAgICBpZiB0a28gPT0gVHJ1ZToKICAgICAgICAgICAgICAgIG1hbWJvLnNhZmVfdGFrZW9mZigyKQogICAgICAgICAgICAgICAgcF9yZWFkeS5wdWJsaXNoKCJvayIpCiAgICAgICAgICAgICAgICB0a28gPSBGYWxzZQoKICAgICAgICAgICAgaWYgbGFuZCA9PSBUcnVlOgogICAgICAgICAgICAgICAgbWFtYm8uc2FmZV9sYW5kKDIpCiAgICAgICAgICAgICAgICBsYW5kID0gRmFsc2UKCiAgICAgICAgICAgIGlmIGNhbm5vbiA9PSBUcnVlOgogICAgICAgICAgICAgICAgbWFtYm8uZmlyZV9ndW4oKQogICAgICAgICAgICAgICAgY2Fubm9uID0gRmFsc2UKCiAgICAgICAgICAgIGlmIGF1dG9fdGtvID09IFRydWU6CiAgICAgICAgICAgICAgICBtYW1iby50dXJuX29uX2F1dG9fdGFrZW9mZigpCiAgICAgICAgICAgICAgICBhdXRvX3RrbyA9IEZhbHNlCgogICAgICAgICAgICBpZiBuZWVkX3RvX2NoYW5nZV9tb2RlID09IFRydWU6CiAgICAgICAgICAgICAgICBpZiBwaWxvdG1vZGUobWFtYm8scF9tb2RlKToKICAgICAgICAgICAgICAgICAgICBwcmludCgiQ2hhbmdlZCBtb2RlIHN1Y2Nlc3NmdWxseSIpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHByaW50KCJGYWlsZWQgY2hhbmdpbmcgbW9kZSIpCiAgICAgICAgICAgICAgICBuZWVkX3RvX2NoYW5nZV9tb2RlPUZhbHNlCgogICAgICAgICAgICBpZiBuZWVkX3RvX3RvZ2dsZV9tb2RlID09IFRydWU6CiAgICAgICAgICAgICAgICBpZiB0b2dnbGVtb2RlKG1hbWJvKToKICAgICAgICAgICAgICAgICAgICBwcmludCgiQWN0aXZhdGluZyBwcmVmZmVyZWQgbW9kZS4uLiIpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHByaW50KCJGYWlsZWQgYWN0aXZhdGluZyBwcmVmZXJyZWQgbW9kZSIpCiAgICAgICAgICAgICAgICBuZWVkX3RvX3RvZ2dsZV9tb2RlID0gRmFsc2UKCiAgICAgICAgICAgIHJfeSA9IHJvdW5kKGxpblksMikKICAgICAgICAgICAgcF94ID0gcm91bmQobGluWCwyKQogICAgICAgICAgICB2X3ogPSByb3VuZChBbHQsMikKICAgICAgICAgICAgeV96ID0gcm91bmQoSGRnLDIpCgogICAgICAgICAgICByX3kgPSBzYXQocl95LCAwLjk4KQogICAgICAgICAgICBwX3ggPSBzYXQocF94LCAwLjk4KQogICAgICAgICAgICB2X3ogPSBzYXQodl96LCAwLjk4KQogICAgICAgICAgICB5X3ogPSBzYXQoeV96LCAwLjk4KQogICAgICAgICAgICBtYW1iby5mbHlfZGlyZWN0KHJvbGwgPSAoLXJfeSAqIDEwMCksIHBpdGNoID0gKHBfeCoxMDApLHlhdyA9ICgteV96ICoxMDApLCB2ZXJ0aWNhbF9tb3ZlbWVudCA9ICh2X3oqMTAwKSwgZHVyYXRpb249MC4wMSkKICAgICAgICAgICAjIGxpblkgPSAwCiAgICAgICAgICAgIyBsaW5YID0gMAogICAgICAgICAgICMgSGRnID0gMAogICAgICAgICAgICMgQWx0ID0gMAoKICAgICAgICAgICAgcmF0ZS5zbGVlcCgpCgogICAgICAgICNtYW1iby5kaXNjb25uZWN0KCkKCgojTWFpbiBmdW5jdGlvbgppZiBfX25hbWVfXz09J19fbWFpbl9fJzoKICAgIHRyeToKICAgICAgICBpbml0KCkKICAgIGV4Y2VwdCByb3NweS5ST1NJbnRlcnJ1cHRFeGNlcHRpb246CiAgICAgICAgbWFtYm8uZGlzY29ubmVjdCgpCjx8ZmltX3N1ZmZpeHw+CmRlZiBjYl9zaG9vdF9jYW5ub24oZGF0YSk6CiAgICBnbG9iYWwgY2Fubm9uCiAgICByb3NweS5sb2dpbmZvKCJcbiBDYW5ub24gYWN0aXZhdGVkIFxuIikKICAgIGNhbm5vbiA9IFRydWUKPHxmaW1fZW5kfD4="]
["e96fcdba2ba4c0e0d7a4788588ebf3e99cdbe008-2","e96fcdba2ba4c0e0d7a4788588ebf3e99cdbe008","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBudW1weS5yYW5kb20KCnJuZyA9IG5wLnJhbmRvbS5kZWZhdWx0X3JuZygpCgoKZGVmIG1vbnRlX2NhcmxvX2RlZmluaXRlX2ludGVncmFsKGYsIGxvdywgaGlnaCwgbik6CiAgICB4cyA9IHJuZy51bmlmb3JtKGxvdywgaGlnaCwgbikKICAgIGZfdiA9IG5wLnZlY3Rvcml6ZShmKQogICAgeXMgPSBmX3YoeHMpCiAgICBtZWFuID0gbnAubWVhbih5cykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgc3RkID0gbnAuc3RkKHlzLCBkZG9mPTEpCiAgICByYW5nZV9zaXplID0gaGlnaCAtIGxvdwogICAgcmV0dXJuIHJhbmdlX3NpemUqbWVhbiwgcmFuZ2Vfc2l6ZSpzdGQvbnAuc3FydChuLTEpCjx8ZmltX2VuZHw+"]
["34b49c30707eefc510233370e54904bed181be38-1","34b49c30707eefc510233370e54904bed181be38","PHxmaW1fcHJlZml4fD4KZnJvbSB0b3JjaC51dGlscy5kYXRhIGltcG9ydCBEYXRhc2V0CmZyb20gdHlwaW5nX21vZGVsLmRhdGEudXRpbHMgaW1wb3J0IEdsb3ZlTWFuYWdlcgoKY2xhc3MgR2xvdmVEYXRhc2V0KERhdGFzZXQpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGhfdG9fZ2xvdmVfZW1iZWRkaW5ncyk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmdtID0gR2xvdmVNYW5hZ2VyKCkKICAgICAgICBlbWJlZGRpbmdfZGljdCA9IHNlbGYuZ20ubG9hZF9lbWJlZGRpbmdfZGljdChwYXRoX3RvX2dsb3ZlX2VtYmVkZGluZ3MpCiAgICAgICAgCjx8ZmltX2VuZHw+"]
["fd314228e9b62b3142204656b2b33a05c6583a12-1","fd314228e9b62b3142204656b2b33a05c6583a12","PHxmaW1fcHJlZml4fD4KZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgVXNlckxpc3QKZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgpmcm9tIGN1cnNlcy5hc2NpaSBpbXBvcnQgRU9UIGFzIEVORF9PRl9UUkFOU01JU1NJT04KaW1wb3J0IHN0YXRpc3RpY3MKaW1wb3J0IHRpbWUKZnJvbSB0eXBpbmcgaW1wb3J0IENsYXNzVmFyLCBHZW5lcmF0b3IsIEl0ZXJhdG9yLCBMaXN0LCBNYXBwaW5nCmZyb20gc3RyaW5nIGltcG9ydCBhc2NpaV9sb3dlcmNhc2UKaW1wb3J0IHVuaXR0ZXN0Lm1vY2sKaW1wb3J0IHV1aWQKCmltcG9ydCBnZXZlbnQKZnJvbSBnZXZlbnQucXVldWUgaW1wb3J0IEVtcHR5CmltcG9ydCBweXRlc3QKaW1wb3J0IHVqc29uCgpmcm9tIHBvbHlzd2FybWQuc2VydmljZXMuZXRoZXJldW0ucnBjIGltcG9ydCBFdGhlcmV1bVJwYwpmcm9tIHBvbHlzd2FybWQudmlld3MuZXZlbnRfbWVzc2FnZSBpbXBvcnQgV2ViU29ja2V0CmZyb20gcG9seXN3YXJtZC53ZWJzb2NrZXRzLmZpbHRlciBpbXBvcnQgKAogICAgQ29udHJhY3RGaWx0ZXIsCiAgICBGaWx0ZXJNYW5hZ2VyLAogICAgRmlsdGVyV3JhcHBlciwKKQpmcm9tIHBvbHlzd2FybWQud2Vic29ja2V0cy5tZXNzYWdlcyBpbXBvcnQgV2Vic29ja2V0TWVzc2FnZQoKQkVHSU4gPSB0aW1lLnRpbWUoKQoKCmRlZiBub3coKToKICAgIHJldHVybiBpbnQoMTAwMCAqICh0aW1lLnRpbWUoKSAtIEJFR0lOKSkKCgpUWF9UUyA9ICdzZW50JwpUWERJRkYgPSAnaW50ZXJ2YWwnCkNQVVRJTUUgPSAncGlwZWxpbmVfbGF0ZW5jeScKU1RBUlQgPSAnc3RhcnQnCkZJTFRFUiA9ICdmaWx0ZXInClNURVAgPSAnc3RlcCcKTlRIID0gJ250aCcKVElDSyA9ICd0aWNrJwoKIyBIb3cgbWFueSAndGlja3MnIHNob3VsZCBoYXBwZW4gaW4gYSBzaW5nbGUgc3RlcCwgYWxsb3dpbmcgdXMgdG8gdGVzdCBtb3JlIHRoYW4gb25lIG1lc3NhZ2UgYmVpbmcKIyByZXR1cm5lZCBhdCBvbmUgdGltZQpTVFJJREUgPSAxMAoKIyBHZW5lcmF0b3IgZm9yIHByaW50YWJsZSBuYW1lcyB1c2VkIGluIGRlYnVnZ2luZwpGSUxURVJfSURTID0gKGwxICsgbDIgZm9yIGwxIGluIGFzY2lpX2xvd2VyY2FzZSBmb3IgbDIgaW4gYXNjaWlfbG93ZXJjYXNlKQoKCkBweXRlc3QuZml4dHVyZQpkZWYgbW9ja19zbGVlcChtb25rZXlwYXRjaCk6CiAgICAiIiJJZiBsb2FkZWQsIGBnZXZlbnQuc2xlZXBgIHNpbXBseSByZXR1cm5zIGEgbm8tb3AgdW5pdHRlc3QuTW9jayIiIgogICAgbW9jayA9IHVuaXR0ZXN0Lm1vY2suTW9jayhnZXZlbnQuc2xlZXApCiAgICBtb25rZXlwYXRjaC5zZXRhdHRyKGdldmVudCwgInNsZWVwIiwgbW9jaykKICAgIHJldHVybiBtb2NrCgoKQHB5dGVzdC5maXh0dXJlCmRlZiBycGMobW9ua2V5cGF0Y2gpOgoKICAgIGRlZiBwYXRjaChjaGFpbik6CiAgICAgICAgUlBDID0gRXRoZXJldW1ScGMoY2hhaW4pCiAgICAgICAgUlBDLnJlZ2lzdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKHdyYXBzPVJQQy5yZWdpc3RlcikKICAgICAgICBSUEMudW5yZWdpc3RlciA9IHVuaXR0ZXN0Lm1vY2suTW9jayh3cmFwcz1SUEMudW5yZWdpc3RlcikKICAgICAgICBSUEMucG9sbCA9IHVuaXR0ZXN0Lm1vY2suTW9jayh3cmFwcz1SUEMucG9sbCkKICAgICAgICBSUEMuZmlsdGVyX21hbmFnZXIuc2V0dXBfZXZlbnRfZmlsdGVycyA9IHVuaXR0ZXN0Lm1vY2suTW9jaygKICAgICAgICAgICAgRmlsdGVyTWFuYWdlci5zZXR1cF9ldmVudF9maWx0ZXJzCiAgICAgICAgKQogICAgICAgIHJldHVybiBSUEMKCiAgICByZXR1cm4gcGF0Y2gKCgpjbGFzcyBOT1BNZXNzYWdlKFdlYnNvY2tldE1lc3NhZ2UpOgogICAgIiIiU3R1YiBmb3IgYSBwb2x5c3dhcm1kLndlYnNvY2tldC5tZXNzYWdlIG9iamVjdCIiIgogICAgY29udHJhY3RfZXZlbnRfbmFtZTogQ2xhc3NWYXJbc3RyXSA9ICdOT1BfQ09OVFJBQ1QnCiAgICBldmVudDogQ2xhc3NWYXJbc3RyXSA9ICdOT1BfRVZFTlQnCgoKY2xhc3MgTW9ja0ZpbHRlcihDb250cmFjdEZpbHRlcik6CiAgICAiIiJNb2NrIGltcGxlbWVudGF0aW9uIG9mIGEgV2ViM1B5IEZpbHRlci4KCiAgICBJZiBubyBgYHNvdXJjZWBgIGdlbmVyYXRvciBpcyBwcm92aWRlZCwgaXQgY3JlYXRlcyBhbiBldmVudCBtZXNzYWdlIGdlbmVyYXRvciBydW5uaW5nIGZvciBmb3IKICAgIGBgZW5kYGAgInN0ZXBzIiBhbmQgeWllbGRpbmcgYGAxL3JhdGVgYCBtZXNzYWdlcyBvbiBhdmVyYWdlLgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhdGU9MS4wLCBzb3VyY2U9Tm9uZSwgZW5kPTEwMCwgYmFja29mZj1GYWxzZSk6CiAgICAgICAgIyBUaGUgcmF0ZSBhdCB3aGljaCB0aGlzIGZpbHRlciBzaG91bGQgZ2VuZXJhdGUgbmV3IG1lc3NhZ2VzCiAgICAgICAgc2VsZi5wb2xsX2ludGVydmFsID0gcmF0ZQogICAgICAgIHNlbGYuc291cmNlID0gc291cmNlIG9yIHNlbGYudW5pZm9ybShpbnQoc2VsZi5wb2xsX2ludGVydmFsICogU1RSSURFKSwgZW5kPWVuZCkKICAgICAgICBzZWxmLmJhY2tvZmYgPSBiYWNrb2ZmCgogICAgZGVmIF9fY2FsbF9fKHNlbGYsIGNvbnRyYWN0X2V2ZW50X25hbWUpOgogICAgICAgICMgVmVyaWZ5IHRoYXQgX3NvbWV0aGluZ18gaXMgYmVpbmcgcGFzc2VkIGluLCBldmVuIGlmIHdlJ3JlIG5vdCB1c2luZyBpdC4KICAgICAgICBhc3NlcnQgY29udHJhY3RfZXZlbnRfbmFtZSA9PSBOT1BNZXNzYWdlLmNvbnRyYWN0X2V2ZW50X25hbWUKICAgICAgICBzZWxmLmN1cnJlbnQgPSAtMQogICAgICAgIHNlbGYuZmlsdGVyX2lkID0gbmV4dChGSUxURVJfSURTKQogICAgICAgIHNlbGYuc2VudCA9IDAKICAgICAgICBzZWxmLnN0YXJ0ID0gbm93KCkKICAgICAgICByZXR1cm4gc2VsZgoKICAgIGRlZiBmb3JtYXRfZW50cnkoc2VsZiwgc3RlcCk6CiAgICAgICAgcmV0dXJuIHtGSUxURVI6IHNlbGYuZmlsdGVyX2lkLCBOVEg6IHNlbGYuc2VudCwgVFhfVFM6IG5vdygpLCBTVEFSVDogc2VsZi5zdGFydCwgU1RFUDogc3RlcH0KCiAgICBkZWYgZ2V0X25ld19lbnRyaWVzKHNlbGYpIC0+IEl0ZXJhdG9yOgogICAgICAgIHRyeToKICAgICAgICAgICAgbXNncyA9IGxpc3QoZmlsdGVyKE5vbmUsIFtuZXh0KHNlbGYuc291cmNlKSBmb3IgaSBpbiByYW5nZShTVFJJREUpXSkpCiAgICAgICAgICAgIHlpZWxkIGZyb20gbXNncwogICAgICAgICAgICBzZWxmLnNlbnQgKz0gbGVuKG1zZ3MpCiAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CiAgICAgICAgICAgIHJhaXNlIGdldmVudC5HcmVlbmxldEV4aXQKCiAgICBkZWYgdW5pZm9ybShzZWxmLCByYXRlOiBpbnQsIGVuZDogaW50LCBvZmZzZXQ9MCkgLT4gR2VuZXJhdG9yOgogICAgICAgICIiIkV2ZW50IG1lc3NhZ2UgZ2VuZXJhdG9yLCBydW5zIGZvciBgYGVuZGBgIHN0ZXBzLCB5aWVsZGluZyBgYDEvcmF0ZWBgIG1lc3NhZ2VzIGVhY2ggc3RlcCIiIgogICAgICAgIGZvciBzdGVwIGluIHJhbmdlKDAsIGVuZCAqIFNUUklERSk6CiAgICAgICAgICAgIHlpZWxkIHNlbGYuZm9ybWF0X2VudHJ5KHN0ZXA9c3RlcCkgaWYgc3RlcCAlIHJhdGUgPT0gMCBlbHNlIE5vbmUKICAgICAgICByZXR1cm4gc3RlcAoKCmNsYXNzIGVucmljaChVc2VyTGlzdCk6CiAgICBlbGFwc2VkID0gcHJvcGVydHkobGFtYmRhIG1zZ3M6IG1heChtc2dzW1RYX1RTXSkgLSBtaW4obXNnc1tUWF9UU10pKQogICAgc3RlcHMgPSBwcm9wZXJ0eShsYW1iZGEgbXNnczogW3YgZm9yIHYgaW4gbXNnc1tTVEVQXSBpZiB2ID4gMWUtMV0pCiAgICByZXNwb25zZXMgPSBwcm9wZXJ0eShsYW1iZGEgbXNnczogbGVuKG1zZ3Muc3RlcHMpKQogICAgbGF0ZW5jeV92YXIgPSBwcm9wZXJ0eShsYW1iZGEgbXNnczogc3RhdGlzdGljcy5wdmFyaWFuY2UobXNncy5zdGVwcykpCiAgICBsYXRlbmN5X2F2ZyA9IHByb3BlcnR5KGxhbWJkYSBtc2dzOiBzdGF0aXN0aWNzLm1lYW4obXNncy5zdGVwcykpCiAgICB1c2VydGltZV9hdmcgPSBwcm9wZXJ0eShsYW1iZGEgbXNnczogc3RhdGlzdGljcy5tZWFuKG1zZ3NbQ1BVVElNRV0pKQogICAgc291cmNlcyA9IHByb3BlcnR5KGxhbWJkYSBtc2dzOiBsZW4oc2V0KG1zZ3NbRklMVEVSXSkpKQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlcywgZXh0cmE9e30pOgogICAgICAgIHNlbGYuZGF0YSA9IGxpc3Qoc2VsZi5lbnJpY2hfbWVzc2FnZXMobWVzc2FnZXMsIGV4dHJhKSkKCiAgICBkZWYgZW5yaWNoX21lc3NhZ2VzKHNlbGYsIG1lc3NhZ2VzLCBleHRyYT17fSk6CiAgICAgICAgIyBlbnN1cmUgd2UndmUgZ290IHNvbWUgbWVzc2FnZXMKICAgICAgICBhc3NlcnQgbGVuKG1lc3NhZ2VzKSA+IDAKICAgICAgICBwcmV2ID0ge30KICAgICAgICBmb3IgbXNnIGluIG1hcCh1anNvbi5sb2FkcywgbWVzc2FnZXMpOgogICAgICAgICAgICAjIGVuc3VyZSB3ZSBnb3QgYW4gJ2V2ZW50JyB0YWcgd2hpY2ggc2hvdWxkIGJlIGluY2x1ZGVkIHdpdGggYWxsIFdlYnNvY2tldE1lc3NhZ2UKICAgICAgICAgICAgYXNzZXJ0IG1zZ1snZXZlbnQnXSA9PSBOT1BNZXNzYWdlLmV2ZW50CiAgICAgICAgICAgIGVtc2cgPSBtc2dbJ2RhdGEnXQogICAgICAgICAgICBlbXNnW1RYX1RTXSA9IGVtc2cuZ2V0KFRYX1RTLCAtMSkKICAgICAgICAgICAgZW1zZ1tUWERJRkZdID0gZW1zZ1tUWF9UU10gLSBwcmV2LmdldChUWF9UUywgZW1zZ1tUWF9UU10pCiAgICAgICAgICAgIG1zZy51cGRhdGUoZXh0cmEpCiAgICAgICAgICAgIHlpZWxkIGVtc2cKICAgICAgICAgICAgcHJldiA9IGVtc2cKCiAgICBkZWYgYnlfc291cmNlKHNlbGYpOgogICAgICAgIHNvdXJjZXMgPSB7fQogICAgICAgIGZvciBtc2cgaW4gc2VsZjoKICAgICAgICAgICAgc291cmNlc1ttc2dbRklMVEVSXV0gPSBzb3VyY2VzLmdldChtc2dbRklMVEVSXSwgW10pICsgW21zZ10KICAgICAgICByZXR1cm4gc291cmNlcwoKICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgogICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBpbnQpOgogICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGl0ZW1fXyhrZXkpCiAgICAgICAgcmV0dXJuIFttc2dba2V5XSBmb3IgbXNnIGluIHNlbGYuZGF0YV0KCiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICBwcm9wcyA9IFsnZWxhcHNlZCcsICdyZXNwb25zZXMnLCAndXNlcnRpbWVfYXZnJ10KICAgICAgICByZXR1cm4gJzwlcyBzdW1tYXJ5PSVzPicgJSAodHlwZShzZWxmKSwge2s6IGdldGF0dHIoc2VsZiwgaykgZm9yIGsgaW4gcHJvcHN9KQoKCmNsYXNzIFRlc3RXZWJzb2NrZXRzOgoKICAgIEBjb250ZXh0bWFuYWdlcgogICAgZGVmIHN0YXJ0X3JwYyhzZWxmLCBmaWx0ZXJzLCB3cywgUlBDKToKICAgICAgICBSUEMucmVnaXN0ZXIod3MpCiAgICAgICAgZm9yIGZ0IGluIGZpbHRlcnM6CiAgICAgICAgICAgIFJQQy5maWx0ZXJfbWFuYWdlci5yZWdpc3RlcihmdCwgTk9QTWVzc2FnZSwgYmFja29mZj1mdC5iYWNrb2ZmKQogICAgICAgIHlpZWxkIFJQQwogICAgICAgIFJQQy51bnJlZ2lzdGVyKHdzKQogICAgICAgIGZvciBtb2NrIGluIFtSUEMucG9sbCwgUlBDLnJlZ2lzdGVyLCBSUEMudW5yZWdpc3RlciwgUlBDLmZpbHRlcl9tYW5hZ2VyLnNldHVwX2V2ZW50X2ZpbHRlcnNdOgogICAgICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZSgpCiAgICAgICAgYXNzZXJ0IGxlbihSUEMuZmlsdGVyX21hbmFnZXIucG9vbCkgPT0gMAogICAgICAgIGFzc2VydCBsZW4oUlBDLndlYnNvY2tldHMpID09IDAKCiAgICBkZWYgZXZlbnRzKHNlbGYsIGZpbHRlcnMsIFJQQywgd3M9Tm9uZSk6CiAgICAgICAgIiIiTWltaWMgdGhlIGJlaGF2aW9yIG9mIGBgL2V2ZW50c2BgIGVuZHBvaW50CgogICAgICAgIEtlZXAgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgdGVzdCBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0bwogICAgICAgIGBldmVudF9tZXNzYWdlLnB5I2luaXRfd2Vic29ja2V0cyNldmVudHMod3MpYCwgZS5nIHBsZWFzZSBkbwogICAgICAgIGRvIG5vdCBzd2l0Y2ggdGhpcyB0byBgam9pbigpYCB0aGUgcG9vbCwgZXRjLgoKICAgICAgICBJZiB5b3UgZmluZCBhIHdheSB0byB1c2UgYEZsYXNrLnRlc3RfY2xpZW50YCB3aXRoIGBTb2NrZXRzYCwgcGxlYXNlIGxldCBtZSBrbm93IC0genYKICAgICAgICAiIiIKICAgICAgICB3cyA9IHdzIG9yIFdlYlNvY2tldChzdHIodXVpZC51dWlkNCgpKSkKICAgICAgICB3aXRoIHNlbGYuc3RhcnRfcnBjKGZpbHRlcnM9ZmlsdGVycywgd3M9d3MsIFJQQz1SUEMpOgogICAgICAgICAgICBtc2dzID0gW10KICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICBtc2cgPSB3cy5xdWV1ZS5nZXQoYmxvY2s9VHJ1ZSwgdGltZW91dD0wKQogICAgICAgICAgICAgICAgICAgIG1zZ3MuYXBwZW5kKG1zZykKICAgICAgICAgICAgICAgICAgICAjIHByaW50KG1zZykKICAgICAgICAgICAgICAgIGV4Y2VwdCBFbXB0eToKICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBlbnJpY2hlZCA9IGVucmljaChtc2dzKQogICAgICAgICAgICBhc3NlcnQgZW5yaWNoZWQuc291cmNlcyA9PSBsZW4oZmlsdGVycykKICAgICAgICAgICAgcmV0dXJuIGVucmljaGVkCgogICAgZGVmIHRlc3RfcmVjdihzZWxmLCBjaGFpbnMsIHJwYywgbW9ja19zbGVlcCk6CiAgICAgICAgIiIiCiAgICAgICAgLSBWZXJpZnkgdGhhdCB3ZSBjYW4gcmVjaWV2ZSBtZXNzYWdlcyB0aHJvdWdoIGBgRXRoZXJldW1SUENgYCdzIGBgRmlsdGVyTWFuYWdlcmBgCiAgICAgICAgLSBUaGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHNlbnQgc2hvdWxkIGVxdWFsIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgcmVjaWV2ZWQKICAgICAgICAiIiIKICAgICAgICBmaWx0ZXJzID0gW01vY2tGaWx0ZXIocmF0ZT0xIC8gMikgZm9yIGkgaW4gcmFuZ2UoMTApXQogICAgICAgIGVucmljaGVkID0gc2VsZi5ldmVudHMoZmlsdGVycz1maWx0ZXJzLCBSUEM9cnBjKGNoYWlucykpCiAgICAgICAgYXNzZXJ0IGxlbihlbnJpY2hlZCkgPT0gc3VtKGYuc2VudCBmb3IgZiBpbiBmaWx0ZXJzKQoKICAgIGRlZiB0ZXN0X2NvbmN1cnJlbnRfcnBjKHNlbGYsIGFwcCwgcnBjLCBtb2NrX3NsZWVwKToKICAgICAgICAiIiIKICAgICAgICAtIFRlc3QgbXVsdGlwbGUgY29uY3VycmVudCBSUEMgJiBGaWx0ZXJNYW5hZ2VyIGluc3RhbmNlczoKICAgICAgICAtIFR3byBgYEV0aGVyZXVtUlBDYGAsIGBgRmlsdGVyTWFuYWdlcmBgICYgYGBXZWJzb2NrZXRgYHMgc2hvdWxkIGJlIGFibGUgdG8gb3BlcmF0ZQogICAgICAgICAgaW5kZXBlbmRlbnRseSBvZiBvbmUgYW5vdGhlciBvbiBkaWZmZXJlbnQgY2hhaW5zIiIiCiAgICAgICAgcmF0ZSA9IDEgLyAyCiAgICAgICAgZ3MgPSBnZXZlbnQuam9pbmFsbChbCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgZ2V2ZW50LnNwYXduKAogICAgICAgICAgICAgICAgc2VsZi5ldmVudHMsCiAgICAgICAgICAgICAgICBmaWx0ZXJzPVtNb2NrRmlsdGVyKHJhdGU9cmF0ZSwgZW5kPTEwMCArICgxK2kpICogNTApIGZvciBfIGluIHJhbmdlKDIpXSwKICAgICAgICAgICAgICAgIFJQQz1SUEMKPHxmaW1fZW5kfD4="]
["5948d61ebd74a4fbfaa332f4c7cb347ceb452a6b-1","5948d61ebd74a4fbfaa332f4c7cb347ceb452a6b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gbnVtcHkucmFuZG9tIGltcG9ydCByYW5kbgppbXBvcnQgdW5pdHRlc3QKZnJvbSBuaXdxZyBpbXBvcnQgQ291cGxlZE1vZGVsCmZyb20gbml3cWcgaW1wb3J0IFFHTW9kZWwKCmRlZiByZWxhdGl2ZV9lcnJvcih2YXIxLHZhcjIpOgogICAgZGlmZnZhciA9IG5wLmFicyh2YXIxLXZhcjIpCiAgICByZXR1cm4gbWF4KGRpZmZ2YXIvdmFyMSxkaWZmdmFyL3ZhcjIpLnJlYWwKCmNsYXNzIFFHTklXVGVzdGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICIiIiBBIGNsYXNzIGZvciB0ZXN0aW5nIHRoZSBRR05JVyBrZXJuZWwgKHJlYWwgYW5kIGNvbXBsZXggMmQgZmZ0cykgIiIiCiAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgc2VsZi5tID0gIENvdXBsZWRNb2RlbC5Nb2RlbCh1c2VfZmlsdGVyPUZhbHNlKQogICAgICAgIHNlbGYucWkgPSByYW5kbihzZWxmLm0ubnksIHNlbGYubS5ueCkKICAgICAgICBzZWxmLnBoaWkgPSByYW5kbihzZWxmLm0ubnksc2VsZi5tLm54KSsgMWoqcmFuZG4oc2VsZi5tLm55LHNlbGYubS5ueCkKCiAgICBkZWYgdGVzdF9mb3J3YXJkX2JhY2t3YXJkKHNlbGYsIHJ0b2w9MWUtMTUpOgogICAgICAgICIiIiBDb21wYXJlcyB2YXJpYWJsZSB3aXRoIGl0cyBpZmZ0KGZmdCkiIiIKCiAgICAgICAgcW4gPSBzZWxmLm0uaWZmdChzZWxmLm0uZmZ0KHNlbGYucWkpKS5yZWFsCiAgICAgICAgcGhpbiA9IHNlbGYubS5pZmZ0KHNlbGYubS5mZnQoc2VsZi5waGlpKSkKICAgICAgICBzZWxmLmFzc2VydFRydWUobnAuYWxsY2xvc2UocW4sc2VsZi5xaSxydG9sPXJ0b2wpLCAiRkZUIGlzIGJyb2tlbiIpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5wLmFsbGNsb3NlKHBoaW4sc2VsZi5waGlpLHJ0b2w9cnRvbCksICJGRlQgaXMgYnJva2VuIikKCiAgICBkZWYgdGVzdF9wYXJzZXZhbChzZWxmLCBydG9sPTEuZS0xNSk6CiAgICAgICAgIiIiIENvbXBhcmVzIHZhcmlhbmNlIGNhbGN1bGF0ZWQgaW4gcGh5c2ljYWwgYW5kIHNwZWN0cmFsIHNwYWNlICIiIgoKICAgICAgICAjIHJlYWwgZmllbGQKICAgICAgICBzZWxmLm0uc2V0X3Eoc2VsZi5xaSkKICAgICAgICB2YXJfcV9zcGVjLCB2YXJfcV9waHlzID0gc2VsZi5tLnNwZWNfdmFyKHNlbGYubS5xaCksIHNlbGYucWkudmFyKCkKICAgICAgICBlcnJvcl92YXJfcSA9IHJlbGF0aXZlX2Vycm9yKHZhcl9xX3BoeXMsdmFyX3Ffc3BlYykKICAgICAgICBwcmludCgicmVsYXRpdmUgZXJyb3IsIHZhciBxID0gJTUuMTZmIiAlZXJyb3JfdmFyX3EpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVycm9yX3Zhcl9xPHJ0b2wsIlFHTklXIEtlcm5lbCBmZnQgZG9lcyBub3Qgc2F0aXNmeSBQYXJzZXZhbCdzIHJlbGF0aW9uIikKCiAgICAgICAgIyBjb21wbGV4IGZpZWxkCiAgICAgICAgc2VsZi5tLnNldF9waGkoc2VsZi5waGlpKQogICAgICAgIHZhcl9waGlfc3BlYywgdmFyX3BoaV9waHlzID0gc2VsZi5tLnNwZWNfdmFyKHNlbGYubS5waGloKSwgc2VsZi5waGlpLnZhcigpCiAgICAgICAgZXJyb3JfdmFyX3BoaSA9IHJlbGF0aXZlX2Vycm9yKHZhcl9waGlfcGh5cyx2YXJfcGhpX3NwZWMpCiAgICAgICAgcHJpbnQoInJlbGF0aXZlIGVycm9yLCB2YXIgcGhpID0gJTUuMTZmIiAlZXJyb3JfdmFyX3BoaSkKICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyb3JfdmFyX3BoaTxydG9sLCJRR05JVyBLZXJuZWwgZmZ0IGRvZXMgbm90IHNhdGlzZnkgUGFyc2V2YWwncyByZWxhdGlvbiIpCgpjbGFzcyBRR1Rlc3Rlcih1bml0dGVzdC5UZXN0Q2FzZSk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICIiIiBBIGNsYXNzIGZvciB0ZXN0aW5nIHRoZSBRRyBtb2RlbCAocmZmdHMpICIiIgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIHNlbGYubSA9ICBRR01vZGVsLk1vZGVsKHVzZV9maWx0ZXI9RmFsc2UpCiAgICAgICAgc2VsZi5xaSA9IHJhbmRuKHNlbGYubS5ueSwgc2VsZi5tLm54KQo8fGZpbV9lbmR8Pg=="]
["fd2100763145f53c85aa2a2cf5c0a134bc4b4c08-1","fd2100763145f53c85aa2a2cf5c0a134bc4b4c08","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCmZyb20gYnM0IGltcG9ydCBCZWF1dGlmdWxTb3VwCmltcG9ydCBqc29uCmltcG9ydCBzdHJpbmdfY29uc3RhbnRzCgpjbGFzcyBTZW1lc3RlcihvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlc3Npb24sIHNlbWVzdGVyLCB1cmwgPSAnJyk6CiAgICAgICAgc2VsZi5zZXNzaW9uID0gc2Vzc2lvbgogICAgICAgIHNlbGYuc2VtZXN0ZXIgPSBzZW1lc3RlcgogICAgICAgIGlmIHVybCA9PSAnJzoKICAgICAgICAgICAgY3VycmVudF91cmwgPSBzdHJpbmdfY29uc3RhbnRzLnVybCArIHNlbWVzdGVyCiAgICAgICAgZWxzZToKICAgICAgICAgICAgY3VycmVudF91cmwgPSB1cmwKICAgICAgICByID0gc2Vzc2lvbi5nZXQoY3VycmVudF91cmwpCiAgICAgICAgaWYgci5zdGF0dXNfY29kZSA9PSAyMDA6CiAgICAgICAgICAgIGh0bWwgPSByLnRleHQKICAgICAgICAgICAgaHRtbCA9IGh0bWwucmVwbGFjZSgnXG4nLCAnJykKICAgICAgICAgICAgc2VsZi5zb3VwID0gQmVhdXRpZnVsU291cChodG1sLCAibHhtbCIpCgogICAgZGVmIF9nZXRfY3VycmVudF9zZXNzaW9uX3VybChzZWxmKToKICAgICAgICBzb3VwID0gc2VsZi5zb3VwCiAgICAgICAgdGFnID0gc291cC5maW5kKCdhJywgeyd0aXRsZSc6J0xhdGVzdCBFbnJvbGxtZW50J30pCiAgICAgICAgcmV0dXJuIHRhZ1snaHJlZiddCgogICAgZGVmIGdldF9kYXRhKHNlbGYpOgogICAgICAgICIiImRvY3N0cmluZyBmb3IgZ2V0X2RhdGEiIiIKICAgICAgICBzb3VwID0gc2VsZi5zb3VwCiAgICAgICAgYWxsX2RhdGEgPSB7fQoKICAgICAgICAjR2V0dGluZyBzZW1lc3RlciBkZXRhaWxzCiAgICAgICAgZGV0YWlscyA9IHt9CiAgICAgICAgZm9ybSA9IHNvdXAuZmluZCgnZm9ybScsIHsnaWQnIDogc3RyaW5nX2NvbnN0YW50cy5mb3JtX2lkfSkKICAgICAgICBkZXRhaWxzX3RhZ19saXN0ID0gZm9ybS5maW5kX2FsbCgnaW5wdXQnKQogICAgICAgIGRldGFpbHNbJ3Nlc3Npb24nXSA9IGRldGFpbHNfdGFnX2xpc3RbMV1bJ3ZhbHVlJ10KICAgICAgICBkZXRhaWxzWydjcmVkaXRzJ10gPSBkZXRhaWxzX3RhZ19saXN0WzJdWyd2YWx1ZSddCiAgICAgICAgZGV0YWlsc1snZ3BhJ10gPSBkZXRhaWxzX3RhZ19saXN0WzNdWyd2YWx1ZSddCgogICAgICAgIHN1YmplY3RzID0gW10KICAgICAgICBpID0gMQogICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgIGlfc3RyID0gc3RyKGkpCiAgICAgICAgICAgIGlmIHNvdXAuZmluZCgnc3BhbicsIHsnaWQnOiBzdHJpbmdfY29uc3RhbnRzLmNvdXJzZV9pZCArIGlfc3RyfSkgIT0gTm9uZToKICAgICAgICAgICAgICAgIHN1YmplY3RfZGV0YWlscyA9IHt9CiAgICAgICAgICAgICAgICAjRmV0Y2hpbmcgdGFncyB3aXRoIGRldGFpbHMKICAgICAgICAgICAgICAgIGNvZGUgPSBzb3VwLmZpbmQoJ3NwYW4nLCB7J2lkJyA6IHN0cmluZ19jb25zdGFudHMuY291cnNlX2NvZGVfaWQgKyBpX3N0cn0pCiAgICAgICAgICAgICAgICBjb3Vyc2UgPSBzb3VwLmZpbmQoJ3NwYW4nLCB7J2lkJyA6IHN0cmluZ19jb25zdGFudHMuY291cnNlX2lkICsgaV9zdHJ9KQogICAgICAgICAgICAgICAgY3JlZGl0cyA9IHNvdXAuZmluZCgnc3BhbicsIHsnaWQnIDogc3RyaW5nX2NvbnN0YW50cy5jb3Vyc2VfY3JlZGl0X2lkICsgaV9zdHIgfSkKICAgICAgICAgICAgICAgIGdyYWRlID0gc291cC5maW5kKCdzcGFuJywgeydpZCcgOiBzdHJpbmdfY29uc3RhbnRzLmNvdXJzZV9ncmFkZV9pZCArIGlfc3RyfSkKICAgICAgICAgICAgICAgIHNlc3Npb24gPSBzb3VwLmZpbmQoJ3NwYW4nLCB7J2lkJyA6IHN0cmluZ19jb25zdGFudHMuY291cnNlX3Nlc3Npb25faWQgKyBpX3N0cn0pCiAgICAgICAgICAgICAgICAjU2F2aW5nIHRoZW0gaW4gYSBkaWN0CiAgICAgICAgICAgICAgICBzdWJqZWN0X2RldGFpbHNbJ2NvZGUnXSA9IHN0cihjb2RlLnRleHQpCiAgICAgICAgICAgICAgICBzdWJqZWN0X2RldGFpbHNbJ2NvdXJzZSddID0gc3RyKGNvdXJzZS50ZXh0KQogICAgICAgICAgICAgICAgc3ViamVjdF9kZXRhaWxzWydncmFkZSddID0gc3RyKGdyYWRlLnRleHQpCiAgICAgICAgICAgICAgICBzdWJqZWN0X2RldGFpbHNbJ2NyZWRpdHMnXSA9IHN0cihjcmVkaXRzLnRleHQpCiAgICAgICAgICAgICAgICBzdWJqZWN0X2RldGFpbHNbJ3Nlc3Npb24nXSA9IHN0cihzZXNzaW9uLnRleHQpCgogICAgICAgICAgICAgICAgc3ViamVjdHMuYXBwZW5kKHN1YmplY3RfZGV0YWlscykKICAgICAgICAgICAgICAgIGkgKz0gMQogICAgICAgICAgICBlbHNlOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICBicmVhawo8fGZpbV9lbmR8Pg=="]
["fd0f8a6598d0db8ce828ceb58f2cd2696a20776d-4","fd0f8a6598d0db8ce828ceb58f2cd2696a20776d","PHxmaW1fcHJlZml4fD4KIyBHbG9iYWwgaW1wb3J0cwppbXBvcnQgb3MKaW1wb3J0IHN5cwppbXBvcnQganNvbgppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCB0ZXh0dGFibGUgYXMgdHQKaW1wb3J0IHBhbmRhcyBhcyBwZAoKIyBMb2NhbCBpbXBvcnRzCmZyb20gLiBpbXBvcnQgcGFyc2VyCgpQUkVUVFlfWUxJTV9MT1NTID0gNQoKZGVmIF9nZXRfdGltZV9heGlzKHRpbWVfbGlzdCwgdW5pdHM9J2hvdXJzJyk6CiAgICAiIiJDb252ZXJ0IHRpbWUgdG8gc2VxdWVudGlhbCBmb3JtYXQgYW5kIGNvbnZlcnQgdGltZSB1bml0cy4iIiIKICAgIHRpbWVfYXhpcyA9IFtdCiAgICBmb3IgaSBpbiByYW5nZShsZW4odGltZV9saXN0KSk6CiAgICAgICAgdGltZV9zdW0gPSBzdW0odGltZV9saXN0WzppXSkKICAgICAgICBpZiB1bml0cyA9PSAnc2Vjb25kcyc6CiAgICAgICAgICAgIHBhc3MKICAgICAgICBlbGlmIHVuaXRzID09ICdtaW51dGVzJzoKICAgICAgICAgICAgdGltZV9zdW0gLz0gNjAuMAogICAgICAgIGVsaWYgdW5pdHMgPT0gJ2hvdXJzJzoKICAgICAgICAgICAgdGltZV9zdW0gLz0gMzYwMC4wCiAgICAgICAgdGltZV9heGlzLmFwcGVuZCh0aW1lX3N1bSkKICAgIHJldHVybiB0aW1lX2F4aXMKCmRlZiBwbG90KHN0YXRfcGF0aF9saXN0LCBzdGF0X25hbWVfbGlzdCwgaW5kX3Zhcj0ndGltZScsIHRpbWVfdW5pdHM9J2hvdXJzJywKICAgICAgICAgcGxvdF9hY2N1cmFjeT1UcnVlLCBtZXJnZV90cmFpbl92YWw9RmFsc2UsIHByZXR0eV95bGltPVRydWUsIHNhdmVfZmlnPU5vbmUsIHNhdmVfY3N2PU5vbmUsIHlsaW09Tm9uZSwKICAgICAgICAgdGVzdF9sb3NzPUZhbHNlKToKICAgICIiIlRhYnVsYXRlIGFuZCBwbG90IHN0YXRzIGZyb20gTEJBTk4gb3IgUHlUb3JjaCB0cmFpbmluZyBpbiBjb21tb24gZm9ybWF0LiIiIgoKICAgIGlmIHByZXR0eV95bGltIGFuZCB5bGltIGlzIG5vdCBOb25lOgogICAgICAgIHByaW50KCdFUlJPUjogcHJldHR5X3lsaW0gYW5kIHlsaW0gbXVzdCBub3QgYmUgc2V0IGF0IHRoZSBzYW1lIHRpbWUuJykKICAgICAgICBzeXMuZXhpdCgxKQoKICAgICMjIyBMb2FkIHN0YXQgZGljdHMgYW5kIHByaW50IHN0YXQgc3VtbWFyeQogICAgc3RhdF9kaWN0X2xpc3QgPSBbXQogICAgIyBHZXQgcnVuIG5hbWVzCiAgICBpZiBzdGF0X25hbWVfbGlzdCBpcyBOb25lOgogICAgICAgIHByaW50KCdXQVJOSU5HOiBObyB0cmlhbCBuYW1lcyBwcm92aWRlZCwgdXNpbmcgZmlsZSBuYW1lcyBieSBkZWZhdWx0LicpCiAgICAgICAgcnVuX25hbWVfbGlzdCA9IFtvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoc3RhdF9wYXRoKSlbMF0gZm9yIHN0YXRfcGF0aCBpbiBzdGF0X3BhdGhfbGlzdF0KICAgIGVsaWYgbGVuKHN0YXRfbmFtZV9saXN0KSAhPSBsZW4oc3RhdF9wYXRoX2xpc3QpOgogICAgICAgIHByaW50KCdXQVJOSU5HOiAjIHN0YXQgcGF0aHMgKHt9KSBkb2VzIG5vdCBtYXRjaCAjIHN0YXQgbmFtZXMgKHt9KS4gVXNpbmcgZmlsZSBuYW1lcyBieSBkZWZhdWx0LicuZm9ybWF0KAogICAgICAgICAgICBsZW4oc3RhdF9wYXRoX2xpc3QpLCBsZW4oc3RhdF9uYW1lX2xpc3QpKSkKICAgICAgICBydW5fbmFtZV9saXN0ID0gW29zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShzdGF0X3BhdGgpKVswXSBmb3Igc3RhdF9wYXRoIGluIHN0YXRfcGF0aF9saXN0XQogICAgZWxzZToKICAgICAgICBydW5fbmFtZV9saXN0ID0gc3RhdF9uYW1lX2xpc3QKICAgICMgQ3JlYXRlIHRhYmxlIGZvciBjb21wYXJpbmcgdHJpYWxzCiAgICBzdGF0X3RhYmxlID0gdHQuVGV4dHRhYmxlKCkKICAgIGhlYWRpbmdzID0gWydUcmlhbCcsICdOdW0gUHJvY3MnLCAnTnVtIE5vZGVzJywgJ051bSBFcG9jaHMnLCAnQXZnLiBUcmFpbiBUaW1lIChzKScsICdBdmcuIFZhbCBUaW1lIChzKSddCiAgICBpZiBwbG90X2FjY3VyYWN5OgogICAgICAgIGhlYWRpbmdzICs9IFsnUGVhayBUcmFpbiBBY2MnLCAnUGVhayBWYWwgQWNjJ10KCiAgICBoZWFkaW5ncyArPSBbJ01pbi4gVHJhaW4gTG9zcycsICdNaW4uIFZhbCBMb3NzJ10KICAgIGlmIHRlc3RfbG9zczoKICAgICAgICBoZWFkaW5ncyArPSBbJ01pbi4gVGVzdCBMb3NzJ10KCiAgICBzdGF0X3RhYmxlLmhlYWRlcihoZWFkaW5ncykKICAgICMgTG9vcCB0aHJvdWdoIGVhY2ggdHJpYWwKICAgIHJvd3MgPSBbXQogICAgcm93X25hbWVzID0gW10KICAgIGZvciBydW5fbmFtZSwgc3RhdF9wYXRoIGluIHppcChydW5fbmFtZV9saXN0LCBzdGF0X3BhdGhfbGlzdCk6CiAgICAgICAgIyBMb2FkIHN0YXQgZmlsZQogICAgICAgIHN0YXRfZXh0ID0gb3MucGF0aC5zcGxpdGV4dChzdGF0X3BhdGgpWzFdCiAgICAgICAgaWYgc3RhdF9leHQgPT0gJy5qc29uJzoKICAgICAgICAgICAgd2l0aCBvcGVuKHN0YXRfcGF0aCwgJ3InKSBhcyBmcDoKICAgICAgICAgICAgICAgIGQgPSBqc29uLmxvYWQoZnApCiAgICAgICAgZWxpZiBzdGF0X2V4dCA9PSAnLm91dCcgb3Igc3RhdF9leHQgPT0gJy50eHQnOgogICAgICAgICAgICBkID0gcGFyc2VyLnBhcnNlKHN0YXRfcGF0aCkKICAgICAgICAgICAgaWYgZCBpcyBOb25lOgogICAgICAgICAgICAgICAgcHJpbnQoJ1dBUk5JTkc6IEZhaWxlZCB0byBwYXJzZSBvdXRwdXRzIGZyb20ge30nLmZvcm1hdChzdGF0X3BhdGgpKQogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCgnRVJST1I6IEludmFsaWQgZmlsZSBleHRlbnNpb246IHt9IGZyb20ge31cblBsZWFzZSBwcm92aWRlIGVpdGhlciBhbiBMQkFOTiBvdXRwdXQgZmlsZSB3aXRoIC5vdXQgb3IgLnR4dCBleHRlbnNpb24gb3IgYSBQeVRvcmNoIG91dHB1dCBmaWxlIHdpdGggLmpzb24gZXh0ZW5zaW9uLicuZm9ybWF0KHN0YXRfZXh0LCBzdGF0X3BhdGgpKQogICAgICAgICAgICBzeXMuZXhpdCgxKQoKICAgICAgICAjIFRvdGFsIG51bWJlciBvZiBwcm9jZXNzZXMKICAgICAgICBkZWYgcGFyc2VfbnVtKGQsIGtleSk6CiAgICAgICAgICAgIGlmIGtleSBpbiBkLmtleXMoKSBhbmQgbGVuKHNldChkW2tleV0pKSA9PSAxOgogICAgICAgICAgICAgICAgcmV0dXJuIGRba2V5XVswXQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKCiAgICAgICAgbnVtX3Byb2NzID0gcGFyc2VfbnVtKGQsICdudW1fcHJvY3MnKQogICAgICAgIG51bV9wcm9jc19vbl9ub2RlID0gcGFyc2VfbnVtKGQsICdudW1fcHJvY3Nfb25fbm9kZScpCiAgICAgICAgaWYgbnVtX3Byb2NzIGlzIG5vdCBOb25lIGFuZCBudW1fcHJvY3Nfb25fbm9kZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgYXNzZXJ0IChudW1fcHJvY3MgJSBudW1fcHJvY3Nfb25fbm9kZSkgPT0gMAogICAgICAgICAgICBudW1fbm9kZXMgPSBpbnQobnVtX3Byb2NzIC8gbnVtX3Byb2NzX29uX25vZGUpCiAgICAgICAgZWxzZSA6CiAgICAgICAgICAgIG51bV9ub2RlcyA9IE5vbmUKICAgICAgICAgICAgcHJpbnQoJ1dBUk5JTkc6IE5vIHByb2Nlc3MgY291bnRzIGFyZSBwcm92aWRlZCBmcm9tIHt9Jy5mb3JtYXQoc3RhdF9wYXRoKSkKCiAgICAgICAgIyBUb3RhbCBlcG9jaHMgb2YgdHJhaW5pbmcKICAgICAgICB0b3RhbF9lcG9jaHMgPSBsZW4oZFsndmFsX3RpbWUnXSkKCiAgICAgICAgIyBDb21wdXRlIGFjY3VyYWN5IHN0YXRzCiAgICAgICAgaWYgcGxvdF9hY2N1cmFjeToKICAgICAgICAgICAgaWYgbGVuKGRbJ3RyYWluX2FjYyddKSA9PSAwOgogICAgICAgICAgICAgICAgcHJpbnQoJ1dBUk5JTkc6IE5vIGFjY3VyYWN5IGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkIGZyb20ge30nLmZvcm1hdChzdGF0X3BhdGgpKQogICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgIHBlYWtfdHJhaW5fYWNjID0gbWF4KGRbJ3RyYWluX2FjYyddKQogICAgICAgICAgICBwZWFrX3RyYWluX2Vwb2NoID0gZFsndHJhaW5fYWNjJ10uaW5kZXgocGVha190cmFpbl9hY2MpCiAgICAgICAgICAgIHBlYWtfdmFsX2FjYyA9IG1heChkWyd2YWxfYWNjJ10pCiAgICAgICAgICAgIHBlYWtfdmFsX2Vwb2NoID0gZFsndmFsX2FjYyddLmluZGV4KHBlYWtfdmFsX2FjYykKCiAgICAgICAgaWYgbGVuKGRbJ3RyYWluX2xvc3MnXSkgPT0gMDoKICAgICAgICAgICAgcHJpbnQoJ1dBUk5JTkc6IE5vIGxvc3MgaW5mb3JtYXRpb24gaXMgcHJvdmlkZWQgZnJvbSB7fScuZm9ybWF0KHN0YXRfcGF0aCkpCiAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICMgQ29tcHV0ZSBsb3NzIHN0YXRzCiAgICAgICAgbWluX3RyYWluX2xvc3MgPSBtaW4oZFsndHJhaW5fbG9zcyddKQogICAgICAgIG1pbl90cmFpbl9lcG9jaCA9IGRbJ3RyYWluX2xvc3MnXS5pbmRleChtaW5fdHJhaW5fbG9zcykKICAgICAgICBtaW5fdmFsX2xvc3MgPSBtaW4oZFsndmFsX2xvc3MnXSkKICAgICAgICBtaW5fdmFsX2Vwb2NoID0gZFsndmFsX2xvc3MnXS5pbmRleChtaW5fdmFsX2xvc3MpCiAgICAgICAgbWluX3Rlc3RfbG9zcyA9IGRbJ3Rlc3RfbG9zcyddWzBdIGlmIHRlc3RfbG9zcyBlbHNlIE5vbmUKCiAgICAgICAgIyBDb21wdXRlIHRpbWUgc3RhdHMKICAgICAgICBhdmdfdHJhaW5fdGltZSA9IGludChzdW0oZFsndHJhaW5fdGltZSddKS9sZW4oZFsndHJhaW5fdGltZSddKSkKICAgICAgICBhdmdfdmFsX3RpbWUgPSBpbnQoc3VtKGRbJ3ZhbF90aW1lJ10pL2xlbihkWyd2YWxfdGltZSddKSkKCiAgICAgICAgIyBDcmVhdGUgaW5kZXBlbmRlbnQgdmFyaWFibGUgYXhpcwogICAgICAgIGlmIGluZF92YXIgPT0gJ2Vwb2NoJzoKICAgICAgICAgICAgZFsndHJhaW5fYXhpcyddID0gcmFuZ2UobGVuKGRbJ3RyYWluX3RpbWUnXSkpCiAgICAgICAgICAgIGRbJ3ZhbF9heGlzJ10gPSByYW5nZShsZW4oZFsndmFsX3RpbWUnXSkpCiAgICAgICAgICAgIHhsYWJlbCA9ICdFcG9jaCcKICAgICAgICBlbGlmIGluZF92YXIgPT0gJ3RpbWUnOgogICAgICAgICAgICBkWyd0cmFpbl9heGlzJ10gPSBfZ2V0X3RpbWVfYXhpcyhkWyd0cmFpbl90aW1lJ10sIHVuaXRzPXRpbWVfdW5pdHMpCiAgICAgICAgICAgIGRbJ3ZhbF9heGlzJ10gPSBfZ2V0X3RpbWVfYXhpcyhkWyd2YWxfdGltZSddLCB1bml0cz10aW1lX3VuaXRzKQogICAgICAgICAgICB4bGFiZWwgPSAnVGltZSAoe30pJy5mb3JtYXQodGltZV91bml0cykKICAgICAgICBlbHNlOgogICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ludmFsaWQgaW5kZXBlZGVudCB2YXJpYWJsZToge30nLmZvcm1hdChpbmRfdmFyKSkKCiAgICAgICAgIyBTdG9yZSB0aGUgc3RhdCBkaWN0IGZvciBwbG90dGluZwogICAgICAgIHN0YXRfZGljdF9saXN0LmFwcGVuZCgocnVuX25hbWUsIGQpKQoKICAgICAgICAjIEFkZCByb3cgdG8gc3RhdHMgdGFibGUgZm9yIGN1cnJlbnQgdHJpYWwKICAgICAgICByb3cgPSBbcnVuX25hbWUsIG51bV9wcm9jcywgbnVtX25vZGVzLCB0b3RhbF9lcG9jaHMsIGF2Z190cmFpbl90aW1lLCBhdmdfdmFsX3RpbWVdIFwKICAgICAgICAgICAgKyAoW3BlYWtfdHJhaW5fYWNjLCBwZWFrX3ZhbF9hY2NdIGlmIHBsb3RfYWNjdXJhY3kgZWxzZSBbXSkgXAogICAgICAgICAgICArIFttaW5fdHJhaW5fbG9zcywgbWluX3ZhbF9sb3NzXSBcCiAgICAgICAgICAgICsgKFttaW5fdGVzdF9sb3NzXSBpZiB0ZXN0X2xvc3MgZWxzZSBbXSkKICAgICAgICByb3dzLmFwcGVuZChyb3cpCiAgICAgICAgcm93X25hbWVzLmFwcGVuZChydW5fbmFtZSkKCiAgICBmb3Igcm93IGluIHJvd3M6CiAgICAgICAgc3RhdF90YWJsZS5hZGRfcm93KHJvdykKCiAgICAjIFByaW50IHRoZSBzdGF0cyB0YWJsZQogICAgcHJpbnQoKQogICAgdGFibGVfc3RyID0gc3RhdF90YWJsZS5kcmF3KCkKICAgIHByaW50KHRhYmxlX3N0cikKICAgIHByaW50KCkKCiAgICAjIyMgUGxvdCBzdGF0cwogICAgcGx0LmZpZ3VyZShmaWdzaXplPSgxMiwgMTAgaWYgcGxvdF9hY2N1cmFjeSBlbHNlIDUpKQogICAgcGx0LnN1cHRpdGxlKCdUcmlhbCBTdGF0cyB2cy4ge30nLmZvcm1hdChpbmRfdmFyLnRpdGxlKCksIGZvbnRzaXplPTIwKSkKICAgIHN1YnBsb3RfbnJvdyA9IDIgaWYgcGxvdF9hY2N1cmFjeSBlbHNlIDEKICAgIHN1YnBsb3RfbmNvbCA9IDIgaWYgbm90IG1lcmdlX3RyYWluX3ZhbCBlbHNlIDEKICAgIGZvciBydW5fbmFtZSwgc3RhdF9kaWN0IGluIHN0YXRfZGljdF9saXN0OgogICAgICAgIHJ1bl9uYW1lX3RyYWluID0gcnVuX25hbWUgaWYgbm90IG1lcmdlX3RyYWluX3ZhbCBlbHNlIHJ1bl9uYW1lKycgKHRyYWluKScKICAgICAgICBydW5fbmFtZV92YWwgICA9IHJ1bl9uYW1lIGlmIG5vdCBtZXJnZV90cmFpbl92YWwgZWxzZSBydW5fbmFtZSsnICh2YWwpJwoKICAgICAgICAjIFRyYWluIGFjYwogICAgICAgIGlmIHBsb3RfYWNjdXJhY3k6CiAgICAgICAgICAgIHBsdC5zdWJwbG90KHN1YnBsb3RfbnJvdywgc3VicGxvdF9uY29sLCAxKQogICAgICAgICAgICBwbHQudGl0bGUoJ1RyYWluIEFjY3VyYWN5IHZzLiB7fScuZm9ybWF0KGluZF92YXIudGl0bGUoKSkpCiAgICAgICAgICAgIHBsdC54bGFiZWwoeGxhYmVsKQogICAgICAgICAgICBwbHQueWxhYmVsKCdUcmFpbiBBY2N1cmFjeScpCiAgICAgICAgICAgIGlmIHByZXR0eV95bGltOgogICAgICAgICAgICAgICAgcGx0LnlsaW0oMCwgMSkKCiAgICAgICAgICAgIHBsdC5wbG90KHN0YXRfZGljdFsndHJhaW5fYXhpcyddLCBzdGF0X2RpY3RbJ3RyYWluX2FjYyddLCBsYWJlbD1ydW5fbmFtZV90cmFpbikKCiAgICAgICAgIyBWYWwgYWNjCiAgICAgICAgaWYgcGxvdF9hY2N1cmFjeToKICAgICAgICAgICAgcGx0LnN1YnBsb3Qoc3VicGxvdF9ucm93LCBzdWJwbG90X25jb2wsIDIgaWYgbm90IG1lcmdlX3RyYWluX3ZhbCBlbHNlIDEpCiAgICAgICAgICAgIHBsdC50aXRsZSgnVmFsIEFjY3VyYWN5IHZzLiB7fScuZm9ybWF0KGluZF92YXIudGl0bGUoKSkpCiAgICAgICAgICAgIHBsdC54bGFiZWwoeGxhYmVsKQogICAgICAgICAgICBwbHQueWxhYmVsKCdWYWwgQWNjdXJhY3knKQogICAgICAgICAgICBpZiBwcmV0dHlfeWxpbToKICAgICAgICAgICAgICAgIHBsdC55bGltKDAsIDEpCgogICAgICAgICAgICBwbHQucGxvdChzdGF0X2RpY3RbJ3ZhbF9heGlzJ10sIHN0YXRfZGljdFsndmFsX2FjYyddLCBsYWJlbD1ydW5fbmFtZV92YWwpCgogICAgICAgIGxvc3Nfc3VicGxvdCA9IDEgKyAoKDIgaWYgbm90IG1lcmdlX3RyYWluX3ZhbCBlbHNlIDEpIGlmIHBsb3RfYWNjdXJhY3kgZWxzZSAwKQoKICAgICAgICAjIFRyYWluIGxvc3MKICAgICAgICBwbHQuc3VicGxvdChzdWJwbG90X25yb3csIHN1YnBsb3RfbmNvbCwgbG9zc19zdWJwbG90KQogICAgICAgIHBsdC50aXRsZSgnVHJhaW4gTG9zcyB2cy4ge30nLmZvcm1hdChpbmRfdmFyLnRpdGxlKCkpKQogICAgICAgIHBsdC54bGFiZWwoeGxhYmVsKQogICAgICAgIHBsdC55bGFiZWwoJ1RyYWluIExvc3MnKQogICAgICAgIGlmIHByZXR0eV95bGltOgogICAgICAgICAgICBwbHQueWxpbSgwLCBQUkVUVFlfWUxJTV9MT1NTKQogICAgICAgIGVsaWYgeWxpbSBpcyBub3QgTm9uZToKICAgICAgICAgICAgcGx0LnlsaW0oKnlsaW0pCgogICAgICAgIHAsID0gcGx0LnBsb3Qoc3RhdF9kaWN0Wyd0cmFpbl9heGlzJ10sIHN0YXRfZGljdFsndHJhaW5fbG9zcyddLCBsYWJlbD1ydW5fbmFtZV90cmFpbikKCiAgICAgICAgIyBWYWwgbG9zcwogICAgICAgIHBsdC5zdWJwbG90KHN1YnBsb3RfbnJvdywgc3VicGxvdF9uY29sLCBsb3NzX3N1YnBsb3QgKyAoMSBpZiBub3QgbWVyZ2VfdHJhaW5fdmFsIGVsc2UgMCkpCiAgICAgICAgcGx0LnRpdGxlKCdWYWwgTG9zcyB2cy4ge30nLmZvcm1hdChpbmRfdmFyLnRpdGxlKCkpKQogICAgICAgIHBsdC54bGFiZWwoeGxhYmVsKQogICAgICAgIHBsdC55bGFiZWwoJ1ZhbCBMb3NzJykKICAgICAgICBpZiBwcmV0dHlfeWxpbToKICAgICAgICAgICAgcGx0LnlsaW0oMCwgUFJFVFRZX1lMSU1fTE9TUykKICAgICAgICBlbGlmIHlsaW0gaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHBsdC55bGltKCp5bGltKQoKICAgICAgICBrd2FyZ3MgPSB7fSBpZiBub3QgbWVyZ2VfdHJhaW5fdmFsIGVsc2UgeyJjb2xvciI6IHAuZ2V0X2NvbG9yKCksICJsaW5lc3R5bGUiOiAiZGFzaGVkIn0KICAgICAgICBwbHQucGxvdChzdGF0X2RpY3RbJ3ZhbF9heGlzJ10sIHN0YXRfZGljdFsndmFsX2xvc3MnXSwgbGFiZWw9cnVuX25hbWVfdmFsLCAqKmt3YXJncykKCiAgICAjIExlZ2VuZCBwb3NpdGlvbiB3aWxsIGxpa2VseSBvbmx5IGJlIGdvb2QgZm9yIHRoZSB0ZXN0IGV4YW1wbGUKICAgICMgcGx0LmxlZ2VuZChsb2M9KDAuMjUsIDEuMjIpKQogICAgcGx0LmxlZ2VuZCgpCgogICAgaWYgc2F2ZV9maWcgaXMgTm9uZToKICAgICAgICAjIFNob3cgdGhlIHBsb3QKICAgICAgICBwbHQuc2hvdygpCiAgICBlbHNlOgogICAgICAgIHBsdC5zYXZlZmlnKHNhdmVfZmlnKQo8fGZpbV9ob2xlfD4KICAgICAgICBkZi50b19jc3Yoc2F2ZV9jc3YpCjx8ZmltX3N1ZmZpeHw+CgogICAgaWYgc2F2ZV9jc3YgaXMgbm90IE5vbmU6CiAgICAgICAgZGYgPSBwZC5EYXRhRnJhbWUoW2RpY3QoemlwKGhlYWRpbmdzLCByb3cpKSBmb3Igcm93IGluIHJvd3NdLAogICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXJvd19uYW1lcykKPHxmaW1fZW5kfD4="]
["fd56822048e34407ed0d1d48b919450292467945-2","fd56822048e34407ed0d1d48b919450292467945","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMCBvbiAyMDIxLTA4LTI5IDA4OjQyCjx8ZmltX2hvbGV8PgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ2NvcmUnLCAnMDAwMl9uYXZiYXInKSwKICAgIF0KCiAgICBvcGVyYXRpb25zID0gWwogICAgICAgIG1pZ3JhdGlvbnMuQWRkRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J25hdmJhcicsCiAgICAgICAgICAgIG5hbWU9J2NvdXJzZV9yZXNvdXJjZXNfbGluaycsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5VUkxGaWVsZChibGFuaz1UcnVlKSwKICAgICAgICApLAogICAgXQo8fGZpbV9zdWZmaXh8PgoKZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMsIG1vZGVscwoKCjx8ZmltX2VuZHw+"]
["b1e666d17b3360e886803204c7fd4334cdfade6e-2","b1e666d17b3360e886803204c7fd4334cdfade6e","PHxmaW1fcHJlZml4fD4KZnJvbSBvcyBpbXBvcnQgZW52aXJvbiBhcyBlbnYKZnJvbSBvcy5wYXRoIGltcG9ydCBqb2luLCBleGlzdHMKCnJvb3RfZGlyX2tleSA9ICJDRlNST09URElSIgpyb290X2RpciA9ICcnCjx8ZmltX2hvbGV8PgogICAgJCBleHBvcnQge3Jvb3RfZGlyX2tleX09L3BhdGgvdG8vY2ZzL2RhdGFzZXQKICAgICIiIgogICAgcm9vdF9kaXIgPSBlbnZbcm9vdF9kaXJfa2V5XQogICAgbWV0YWZpbGUgPSBqb2luKHJvb3RfZGlyLCAnZGF0YXNldHMnLCAnY2ZzLXZpc2l0NS1kYXRhc2V0LTAuNS4wLmNzdicpCiAgICBhc3NlcnQgZXhpc3RzKG1ldGFmaWxlKSwgZiJNaXNzaW5nIG1ldGEtZGF0YSBmaWxlOiB7bWV0YWZpbGV9Igo8fGZpbV9zdWZmaXh8PgptZXRhZmlsZSA9ICcnCmlmIGVudi5nZXQoJ0NJJykgaXMgTm9uZToKICAgIGFzc2VydCByb290X2Rpcl9rZXkgaW4gZW52LCBmIiIiCiAgICBBZGQgcGF0aCB0byBjZnMgZGF0YXNldCBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZToKPHxmaW1fZW5kfD4="]
["bd17f124353b6b0013f78073ec43e2e7a0992283-1","bd17f124353b6b0013f78073ec43e2e7a0992283","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNzdgppbXBvcnQgY29weQppbXBvcnQgaXRlcnRvb2xzCmltcG9ydCBvcwppbXBvcnQgY3YyCmltcG9ydCBtZWRpYXBpcGUgYXMgbXAKCmRlZiBlbmNvZGVfbGFiZWwobGFiZWxfbmFtZSxjYXRlZ29yeSk6CiAgICBmb3IgaSBpbiBjYXRlZ29yeToKICAgICAgICBpZiBpID09IGxhYmVsX25hbWU6CiAgICAgICAgICAgIHJldHVybiBjYXRlZ29yeS5pbmRleChpKQoKCmRlZiBjYWxjX2xhbmRtYXJrX2xpc3QoaW1hZ2UsIGxhbmRtYXJrcyk6Cjx8ZmltX2hvbGV8PgogICAgIyBLZXlwb2ludAogICAgZm9yIF8sIGxhbmRtYXJrIGluIGVudW1lcmF0ZShsYW5kbWFya3MubGFuZG1hcmspOgogICAgICAgIGxhbmRtYXJrX3ggPSBtaW4oaW50KGxhbmRtYXJrLnggKiBpbWFnZV93aWR0aCksIGltYWdlX3dpZHRoIC0gMSkKICAgICAgICBsYW5kbWFya195ID0gbWluKGludChsYW5kbWFyay55ICogaW1hZ2VfaGVpZ2h0KSwgaW1hZ2VfaGVpZ2h0IC0gMSkKCiAgICAgICAgbGFuZG1hcmtfcG9pbnQuYXBwZW5kKFtsYW5kbWFya194LCBsYW5kbWFya195XSkKCiAgICByZXR1cm4gbGFuZG1hcmtfcG9pbnQKCgpkZWYgcHJlX3Byb2Nlc3NfbGFuZG1hcmsobGFuZG1hcmtfbGlzdCk6CiAgICB0ZW1wX2xhbmRtYXJrX2xpc3QgPSBjb3B5LmRlZXBjb3B5KGxhbmRtYXJrX2xpc3QpCgogICAgIyBDb252ZXJ0IHRvIHJlbGF0aXZlIGNvb3JkaW5hdGVzCiAgICBiYXNlX3gsIGJhc2VfeSA9IDAsIDAKICAgIGZvciBpbmRleCwgbGFuZG1hcmtfcG9pbnQgaW4gZW51bWVyYXRlKHRlbXBfbGFuZG1hcmtfbGlzdCk6CiAgICAgICAgaWYgaW5kZXggPT0gMDoKICAgICAgICAgICAgYmFzZV94LCBiYXNlX3kgPSBsYW5kbWFya19wb2ludFswXSwgbGFuZG1hcmtfcG9pbnRbMV0KCiAgICAgICAgdGVtcF9sYW5kbWFya19saXN0W2luZGV4XVswXSA9IHRlbXBfbGFuZG1hcmtfbGlzdFtpbmRleF1bMF0gLSBiYXNlX3gKICAgICAgICB0ZW1wX2xhbmRtYXJrX2xpc3RbaW5kZXhdWzFdID0gdGVtcF9sYW5kbWFya19saXN0W2luZGV4XVsxXSAtIGJhc2VfeQoKICAgICMgQ29udmVydCB0byBhIG9uZS1kaW1lbnNpb25hbCBsaXN0CiAgICB0ZW1wX2xhbmRtYXJrX2xpc3QgPSBsaXN0KAogICAgICAgIGl0ZXJ0b29scy5jaGFpbi5mcm9tX2l0ZXJhYmxlKHRlbXBfbGFuZG1hcmtfbGlzdCkpCgogICAgIyBOb3JtYWxpemF0aW9uCiAgICBtYXhfdmFsdWUgPSBtYXgobGlzdChtYXAoYWJzLCB0ZW1wX2xhbmRtYXJrX2xpc3QpKSkKCiAgICBkZWYgbm9ybWFsaXplXyhuKToKICAgICAgICByZXR1cm4gbiAvIG1heF92YWx1ZQoKICAgIHRlbXBfbGFuZG1hcmtfbGlzdCA9IGxpc3QobWFwKG5vcm1hbGl6ZV8sIHRlbXBfbGFuZG1hcmtfbGlzdCkpCgogICAgcmV0dXJuIHRlbXBfbGFuZG1hcmtfbGlzdAoKCmRlZiBsb2dnaW5nX2NzdihudW1iZXIsIGxhbmRtYXJrX2xpc3QpOgogICAgaWYgMCA8PSBudW1iZXIgPD0gNToKICAgICAgICBjc3ZfcGF0aCA9ICdtb2RlbC9rZXlwb2ludF9jbGFzc2lmaWVyL2tleXBvaW50LmNzdicKICAgICAgICB3aXRoIG9wZW4oY3N2X3BhdGgsICdhJywgbmV3bGluZT0iIikgYXMgZjoKICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmKQogICAgICAgICAgICB3cml0ZXIud3JpdGVyb3coW251bWJlciwgKmxhbmRtYXJrX2xpc3RdKQogICAgcmV0dXJuCgoKcm9vdCA9ICJZb3VyIGRhdGFzZXQgZGlyIgpJTUFHRV9GSUxFUyA9IFtdCmNhdGVnb3J5ID0gWydBbmdlcicsJ0hhcHB5JywnTmV1dHJhbCcsJ1NhZCcsJ1N1cnByaXNlJ10KZm9yIHBhdGgsIHN1YmRpcnMsIGZpbGVzIGluIG9zLndhbGsocm9vdCk6CiAgICBmb3IgbmFtZSBpbiBmaWxlczoKICAgICAgICBJTUFHRV9GSUxFUy5hcHBlbmQob3MucGF0aC5qb2luKHBhdGgsIG5hbWUpKQoKdXNlX2JyZWN0ID0gVHJ1ZQoKbXBfZmFjZV9tZXNoID0gbXAuc29sdXRpb25zLmZhY2VfbWVzaApmYWNlX21lc2ggPSBtcF9mYWNlX21lc2guRmFjZU1lc2goCiAgICAgICAgbWF4X251bV9mYWNlcz0xLAogICAgICAgIHJlZmluZV9sYW5kbWFya3M9VHJ1ZSwKICAgICAgICBtaW5fZGV0ZWN0aW9uX2NvbmZpZGVuY2U9MC43LAogICAgICAgIHN0YXRpY19pbWFnZV9tb2RlPVRydWUpIAoKCmZvciBpZHgsIGZpbGUgaW4gZW51bWVyYXRlKElNQUdFX0ZJTEVTKToKICAgIGxhYmVsX25hbWUgPSBmaWxlLnJzcGxpdCgiLyIsMSlbLTFdCiAgICBsYWJlbF9uYW1lID0gbGFiZWxfbmFtZS5yc3BsaXQoIlxcIiwxKVswXQogICAgbGFiZWwgPSBlbmNvZGVfbGFiZWwobGFiZWxfbmFtZSxjYXRlZ29yeSkKICAgIGltYWdlID0gY3YyLmltcmVhZChmaWxlKQogICAgaW1hZ2UgPSBjdjIuZmxpcChpbWFnZSwgMSkgICMgTWlycm9yIGRpc3BsYXkKICAgIGRlYnVnX2ltYWdlID0gY29weS5kZWVwY29weShpbWFnZSkKCiAgICAjIERldGVjdGlvbiBpbXBsZW1lbnRhdGlvbgogICAgaW1hZ2UgPSBjdjIuY3Z0Q29sb3IoaW1hZ2UsIGN2Mi5DT0xPUl9CR1IyUkdCKQogICAgaW1hZ2UuZmxhZ3Mud3JpdGVhYmxlID0gRmFsc2UKICAgIHJlc3VsdHMgPSBmYWNlX21lc2gucHJvY2VzcyhpbWFnZSkKICAgIGltYWdlLmZsYWdzLndyaXRlYWJsZSA9IFRydWUKICAgIGlmIHJlc3VsdHMubXVsdGlfZmFjZV9sYW5kbWFya3MgaXMgbm90IE5vbmU6CiAgICAgICAgZm9yIGZhY2VfbGFuZG1hcmtzIGluIHJlc3VsdHMubXVsdGlfZmFjZV9sYW5kbWFya3M6CgogICAgICAgICAgICAjIExhbmRtYXJrIGNhbGN1bGF0aW9uCiAgICAgICAgICAgIGxhbmRtYXJrX2xpc3QgPSBjYWxjX2xhbmRtYXJrX2xpc3QoZGVidWdfaW1hZ2UsIGZhY2VfbGFuZG1hcmtzKQoKICAgICAgICAgICAgIyBDb252ZXJzaW9uIHRvIHJlbGF0aXZlIGNvb3JkaW5hdGVzIC8gbm9ybWFsaXplZCBjb29yZGluYXRlcwogICAgICAgICAgICBwcmVfcHJvY2Vzc2VkX2xhbmRtYXJrX2xpc3QgPSBwcmVfcHJvY2Vzc19sYW5kbWFyaygKICAgICAgICAgICAgICAgIGxhbmRtYXJrX2xpc3QpCiAgICAgICAgICAgICMgV3JpdGUgdG8gdGhlIGRhdGFzZXQgZmlsZQogICAgICAgICAgICBsb2dnaW5nX2NzdihsYWJlbCwgcHJlX3Byb2Nlc3NlZF9sYW5kbWFya19saXN0KQo8fGZpbV9zdWZmaXh8PgogICAgaW1hZ2Vfd2lkdGgsIGltYWdlX2hlaWdodCA9IGltYWdlLnNoYXBlWzFdLCBpbWFnZS5zaGFwZVswXQoKICAgIGxhbmRtYXJrX3BvaW50ID0gW10KCjx8ZmltX2VuZHw+"]
["bd5514a6ca6c5f1359ba0fc50622d01a04f70097-5","bd5514a6ca6c5f1359ba0fc50622d01a04f70097","PHxmaW1fcHJlZml4fD4KZnJvbSAuYXJ0aWNsZSBpbXBvcnQgQXJ0aWNsZU1vZGVsCmZyb20gLmF1ZGlvIGltcG9ydCBBdWRpbwpmcm9tIC5pbWFnZSBpbXBvcnQgSW1hZ2UKZnJvbSAudmlkZW8gaW1wb3J0IFZpZGVvCgpmcm9tIC5iYXNlIGltcG9ydCBkYgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpfX2FsbF9fID0gWyJkYiIsICJBcnRpY2xlTW9kZWwiLCAiQXVkaW8iLCAiSW1hZ2UiLCAiVmlkZW8iXQo8fGZpbV9lbmR8Pg=="]
["b5f4bb2d6e11016025a8ce632d27036f17c40f1a-4","b5f4bb2d6e11016025a8ce632d27036f17c40f1a","PHxmaW1fcHJlZml4fD4KIiIiCkNvbW1hbmQgcGF0dGVybiBlbmNhcHN1bGF0aW9uIG9mIENMSSByZXF1ZXN0cy4gVXNlZCB0byBnZW5lcmF0ZSBxdWVyaWVzIHRvCnJldHVybiB0byB0aGUgb3V0cHV0IGZvcm1hdHRpbmcgY29kZS4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoiIiIKCmRlZiBidWlsZF93aXRoX2NvbW1hbmQoKToKICAgIHBhc3MKPHxmaW1fZW5kfD4="]
["2fa0ec6d5060128deddc154609b3330868c70b94-3","2fa0ec6d5060128deddc154609b3330868c70b94","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2xvY2FsL2Jpbi9weXRob24zCgppbXBvcnQgb3MKaW1wb3J0IHJhbmRvbQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBtYXRoCgpsdXN0cmVfbW91bnRfcG9pbnQgPSAiL2x1c3RyZSIKZmlsZV9zaXplX21hcF9maWxlID0gIi9Vc2Vycy9kZGFpL0RvY3VtZW50cy90ZXN0LWRhdGEtc2V0cy9wcm9jZXNzZWQtdjEudHh0Igo8fGZpbV9lbmR8Pg=="]
["fd05ba78482b446ec2f13c33fe5d8075129415f0-2","fd05ba78482b446ec2f13c33fe5d8075129415f0","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSByYXkubWwucHJlZGljdG9ycy5pbnRlZ3JhdGlvbnMueGdib29zdC54Z2Jvb3N0X3ByZWRpY3RvciBpbXBvcnQgWEdCb29zdFByZWRpY3RvcgoKX19hbGxfXyA9IFsiWEdCb29zdFByZWRpY3RvciJdCjx8ZmltX2VuZHw+"]
["557a96ae476a3929a654844f15091fa4e712801d-1","557a96ae476a3929a654844f15091fa4e712801d","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMgcHlsaW50OiBkaXNhYmxlPUkwMDExLEMwMTAzLEMwMTExCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCmltcG9ydCBzaHV0aWwKZnJvbSBseG1sIGltcG9ydCBodG1sCmltcG9ydCByZXF1ZXN0cwpmcm9tIG1ha2VfZXB1YiBpbXBvcnQgbWFrZV9lcHViCgpCQVNFX1VSTCA9ICdodHRwOi8vd3d3LmxpYW94dWVmZW5nLmNvbScKCmRlZiBtYWluKCk6CiAgICBta2Rpcl9wKCcuL3dpa2kvaW1hZ2VzJykKCiAgICByID0gcmVxdWVzdHMuZ2V0KHJhd19pbnB1dCgnSW5wdXQgVVJMOicpKQogICAgaWYgci5zdGF0dXNfY29kZSAhPSAyMDA6CiAgICAgICAgcmV0dXJuCgogICAgaCA9IGh0bWwuZnJvbXN0cmluZyhyLnRleHQpCiAgICB1bCA9IGguY3Nzc2VsZWN0KCcueC1zaWRlYmFyLWxlZnQtY29udGVudCB1bFtzdHlsZV0nKVswXQoKICAgIGNoYXB0ZXIgPSB7fQogICAgbWVudSA9IFtdCgogICAgI2YgPSBvcGVuKCcuL3dpa2kvaW5kZXgubWQnLCAnd2InKQogICAgZm9yIGxpIGluIHVsOgogICAgICAgIGRlcHRoID0gMAogICAgICAgIHRyeToKICAgICAgICAgICAgc3R5bGUgPSBsaS5hdHRyaWJbJ3N0eWxlJ10KICAgICAgICAgICAgZGVwdGggPSBpbnQoc3R5bGVbMTJdKQogICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgcGFzcwoKICAgICAgICBhID0gbGlbMF0KICAgICAgICB1cmwgPSBhLmF0dHJpYlsnaHJlZiddCiAgICAgICAgdGl0bGUgPSBhLnRleHQKICAgICAgICBpZiBpc2luc3RhbmNlKHRpdGxlLCB1bmljb2RlKToKICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5lbmNvZGUoJ3V0Zi04JykKCiAgICAgICAgY2hhcHRlcl90ZXh0ID0gZ2V0X2NoYXB0ZXJfdGV4dChjaGFwdGVyLCBkZXB0aCkKCiAgICAgICAgc2F2ZV9odG1sKHVybCwgdGl0bGUsIGNoYXB0ZXJfdGV4dCkKCiAgICAgICAgcHJpbnQoJyVzICVzICVzJyAlIChjaGFwdGVyX3RleHQsIHRpdGxlLmRlY29kZSgndXRmLTgnKSwgdXJsKSkKPHxmaW1faG9sZXw+CiAgICAjZi5jbG9zZSgpCgogICAgI2ltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQogICAgI3BpY2tsZS5kdW1wKG1lbnUsIG9wZW4oJy4vbWVudS5kYXQnLCAnd2InKSkKICAgIG1ha2VfZXB1YihtZW51KQoKZGVmIG1rZGlyX3AocGF0aCk6CiAgICBpbXBvcnQgb3MKICAgIGltcG9ydCBlcnJubwogICAgdHJ5OgogICAgICAgIG9zLm1ha2VkaXJzKHBhdGgpCiAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6ICAjIFB5dGhvbiA+Mi41CiAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVFWElTVCBhbmQgb3MucGF0aC5pc2RpcihwYXRoKToKICAgICAgICAgICAgcGFzcwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJhaXNlCgpkZWYgc2F2ZV9odG1sKHVybCwgdGl0bGUsIGNoYXB0ZXJfdGV4dCk6CiAgICByID0gcmVxdWVzdHMuZ2V0KEJBU0VfVVJMICsgdXJsKQogICAgaWYgci5zdGF0dXNfY29kZSAhPSAyMDA6CiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgaCA9IGh0bWwuZnJvbXN0cmluZyhyLnRleHQpCiAgICBjb250ZW50ZGl2ID0gaC5jc3NzZWxlY3QoJy54LXdpa2ktY29udGVudCcpWzBdCgogICAgIyBSZW1vdmUgYnJva2VuIHZpZGVvcwogICAgZm9yIGRpdiBpbiBjb250ZW50ZGl2LmNzc3NlbGVjdCgnZGl2W2RhdGEtdHlwZT12aWRlb10nKToKICAgICAgICBkaXYuZ2V0cGFyZW50KCkucmVtb3ZlKGRpdikKCiAgICBzYXZlX2ltZ3MoY29udGVudGRpdikKCiAgICB3aXRoIG9wZW4oJy4vd2lraS8lcy5odG1sJyAlIGNoYXB0ZXJfdGV4dCwgJ3diJykgYXMgZjoKICAgICAgICBoZWFkID0gJycnPCFET0NUWVBFIGh0bWw+CjxodG1sPjxoZWFkPjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij48dGl0bGU+ezB9PC90aXRsZT48c2NyaXB0IHNyYz0iaGlnaGxpZ2h0LmpzIj48L3NjcmlwdD48c2NyaXB0PmhsanMuaW5pdEhpZ2hsaWdodGluZ09uTG9hZCgpOzwvc2NyaXB0PjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaGlnaGxpZ2h0LmNzcyI+PC9oZWFkPgo8Ym9keT48aDE+ezB9PC9oMT4KPGhyPicnJwogICAgICAgIGYud3JpdGUoaGVhZC5mb3JtYXQodGl0bGUpKQogICAgICAgIGYud3JpdGUoKCcnLmpvaW4oaHRtbC50b3N0cmluZyhlLCBlbmNvZGluZz0ndXRmLTgnKSBmb3IgZSBpbiBjb250ZW50ZGl2KSkuc3RyaXAoKSkKICAgICAgICBmLndyaXRlKCc8L2JvZHk+XG48L2h0bWw+JykKCmRlZiBzYXZlX2ltZ3MoY29udGVudGRpdik6CiAgICBmb3IgaW1nIGluIGNvbnRlbnRkaXYuY3Nzc2VsZWN0KCdpbWdbYWx0XScpOgogICAgICAgIHNyYyA9IGltZy5hdHRyaWJbJ3NyYyddCiAgICAgICAgYWx0ID0gaW1nLmF0dHJpYlsnYWx0J10KICAgICAgICB0cnk6CiAgICAgICAgICAgIGFsdCA9IGFsdC5lbmNvZGUoJ2FzY2lpJykKICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgogICAgICAgICAgICBhbHQgPSBhbHQuZW5jb2RlKCd1dGYtOCcpLmVuY29kZSgnaGV4X2NvZGVjJykudXBwZXIoKQoKICAgICAgICByID0gcmVxdWVzdHMuZ2V0KEJBU0VfVVJMICsgc3JjLCBzdHJlYW09VHJ1ZSkKICAgICAgICBpZiByLnN0YXR1c19jb2RlICE9IDIwMDoKICAgICAgICAgICAgYnJlYWsKCiAgICAgICAgZmlsZV90eXBlID0gci5oZWFkZXJzWydjb250ZW50LXR5cGUnXS5zcGxpdCgnLycsIDIpWzFdCiAgICAgICAgaWYgZmlsZV90eXBlID09ICdqcGVnJzoKICAgICAgICAgICAgZmlsZV90eXBlID0gJ2pwZycKCiAgICAgICAgd2l0aCBvcGVuKCcuL3dpa2kvaW1hZ2VzLyVzLiVzJyAlIChhbHQsIGZpbGVfdHlwZSksICd3YicpIGFzIGY6CiAgICAgICAgICAgIHIucmF3LmRlY29kZV9jb250ZW50ID0gVHJ1ZQogICAgICAgICAgICBzaHV0aWwuY29weWZpbGVvYmooci5yYXcsIGYpCgogICAgICAgIGltZy5hdHRyaWJbJ3NyYyddID0gJ2ltYWdlcy8lcy4lcycgJSAoYWx0LCBmaWxlX3R5cGUpCgpkZWYgZ2V0X2NoYXB0ZXJfdGV4dChjaGFwdGVyLCBkZXB0aCk6CiAgICBpZiBkZXB0aCA9PSAwOgogICAgICAgIGNoYXB0ZXJfdGV4dCA9ICcwJwogICAgZWxzZToKICAgICAgICB0cnk6CiAgICAgICAgICAgIGNoYXB0ZXJbZGVwdGggLSAxXSArPSAxCiAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICBjaGFwdGVyW2RlcHRoIC0gMV0gPSAxCiAgICAgICAgY2hhcHRlcltkZXB0aF0gPSAwCiAgICAgICAgY2hhcHRlcl90ZXh0ID0gJy4nLmpvaW4oW3N0cihjaGFwdGVyW2ldKSBmb3IgaSBpbiByYW5nZShkZXB0aCldKQogICAgcmV0dXJuIGNoYXB0ZXJfdGV4dAoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIG1haW4oKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICNmLndyaXRlKCclcy4gWyVzXSglcy5odG1sKVxuJyAlIChjaGFwdGVyX3RleHQsIHRpdGxlLCBjaGFwdGVyX3RleHQpKQogICAgICAgIG1lbnUuYXBwZW5kKChkZXB0aCwgdGl0bGUsIGNoYXB0ZXJfdGV4dCkpCgo8fGZpbV9lbmR8Pg=="]
["1f0de664f20bd08187eb0119de584b2b58826d46-1","1f0de664f20bd08187eb0119de584b2b58826d46","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IG9zCmltcG9ydCBwYW5kYXMgYXMgcGQKCgo8fGZpbV9lbmR8Pg=="]
["f9af35949c163c5ba8cc3c2a03c57d2262e9db56-5","f9af35949c163c5ba8cc3c2a03c57d2262e9db56","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCB0b3JjaAoKY2xhc3MgTW9kdWxlU2F2ZXIoKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoPScuL3NhdmVkX21vZGVscy8nLCBwcmV4PSdkZWZhdWx0Jyk6CiAgICAgICAgc2VsZi5wYXRoID0gcGF0aAogICAgICAgIHNlbGYucHJleCA9IHByZXgKICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CiAgICAgICAgICAgIG9zLm1ha2VkaXJzKHBhdGgsIGV4aXN0X29rPVRydWUpCiAgICAgICAgc2VsZi5jdXJyZW50X2Jlc3RfbG9zcyA9IE5vbmUKICAgICAgICBzZWxmLmluaXQgPSBGYWxzZQogICAgCiAgICBkZWYgaW5pdF9sb3NzKHNlbGYsbG9zcyk6CiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobG9zcyxsaXN0KTogbG9zcyA9IFtsb3NzXQogICAgICAgIHNlbGYuY3VycmVudF9iZXN0X2xvc3MgPSBbcHQgZm9yIHB0IGluIGxvc3NdCiAgICAgICAgc2VsZi5pbml0ID0gVHJ1ZQogICAgCiAgICBkZWYgc2F2ZShzZWxmLCBtb2RlbCwgbG9zcyk6CiAgICAgICAgcmVzID0gJycKICAgICAgICBwZGljdCA9IG1vZGVsLm1vZHVsZS5zdGF0ZV9kaWN0KCkgaWYgaXNpbnN0YW5jZShtb2RlbCx0b3JjaC5ubi5EYXRhUGFyYWxsZWwpIG9yIGlzaW5zdGFuY2UobW9kZWwsIHRvcmNoLm5uLnBhcmFsbGVsLkRpc3RyaWJ1dGVkRGF0YVBhcmFsbGVsKSBlbHNlIG1vZGVsLnN0YXRlX2RpY3QoKQogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGxvc3MsbGlzdCk6IGxvc3MgPSBbbG9zc10KICAgICAgICBpZiBub3Qgc2VsZi5pbml0OiAKICAgICAgICAgICAgc2VsZi5jdXJyZW50X2Jlc3RfbG9zcyA9IFsxMGU5IGZvciBfIGluIHJhbmdlKGxlbihsb3NzKSldCiAgICAgICAgICAgIHNlbGYuaW5pdCA9IFRydWUKICAgICAgICBmbGFnID0gRmFsc2UKICAgICAgICBmb3IgaXRlcl8sIHBsb3NzIGluIGVudW1lcmF0ZShsb3NzKToKICAgICAgICAgICAgaWYgcGxvc3MgPCBzZWxmLmN1cnJlbnRfYmVzdF9sb3NzW2l0ZXJfXToKICAgICAgICAgICAgICAgIGZsYWcgPSBUcnVlCiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRfYmVzdF9sb3NzW2l0ZXJfXSA9IHBsb3NzCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIHRvcmNoLnNhdmUocGRpY3QsIG9zLnBhdGguam9pbihzZWxmLnBhdGgsJyVzX2Jlc3RfJWQucHQnJShzZWxmLnByZXgsaXRlcl8pKSkKICAgICAgICAgICAgICAgIHJlcyArPSAnc2F2ZSAlc19iZXN0XyVkLnB0XHQnJShzZWxmLnByZXgsaXRlcl8pCjx8ZmltX2VuZHw+"]
["0582b11306e1225d573d4796a3d165a36fa820f1-5","0582b11306e1225d573d4796a3d165a36fa820f1",{"$cut":{"chars":41664,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFzeW5jaW8KaW1wb3J0IGNvbGxlY3Rpb25zCgpmcm9tIHB5Y2hlc3MuY29tcGF0IGltcG9ydCBjcmVhdGVfdGFzawpmcm9tIHB5Y2hlc3MuVXRpbHMgaW1wb3J0IHdhaXRfc2lnbmFsCmZyb20gcHljaGVzcy5VdGlscy5Nb3ZlIGltcG9ydCBwYXJzZUFueQpmcm9tIHB5Y2hlc3MuVXRpbHMuQm9hcmQgaW1wb3J0IEJvYXJkCmZyb20gcHljaGVzcy5VdGlscy5Nb3ZlIGltcG9ydCB0b0FOCmZyb20gcHljaGVzcy5VdGlscy5sb2dpYyBpbXBvcnQgdmFsaWRhdGUsIGdldE1vdmVLaWxsaW5nS2luZywgZ2V0U3RhdHVzLCBsZWdhbE1vdmVDb3VudApmcm9tIHB5Y2hlc3MuVXRpbHMuY29uc3QgaW1wb3J0ICgKICAgIENBU1RMRV9LSywKICAgIEFOQUxZWklORywKICAgIFdPTl9BREpVRElDQVRJT04sCiAgICBGSVNDSEVSUkFORE9NQ0hFU1MsCiAgICBJTlZFUlNFX0FOQUxZWklORywKICAgIENBU1RMRV9LUiwKICAgIE5PUk1BTENIRVNTLAogICAgRkVOX1NUQVJULAogICAgV0hJVEUsCiAgICBOT1JNQUwsCiAgICBEUkFXX09GRkVSLAogICAgV09OX01BVEUsCiAgICBCTEFDSywKICAgIEJMQUNLV09OLAogICAgV0hJVEVXT04sCikKZnJvbSBweWNoZXNzLlV0aWxzLmx1dGlscy5sZGF0YSBpbXBvcnQgTUFURV9WQUxVRQpmcm9tIHB5Y2hlc3MuVXRpbHMubHV0aWxzLmxtb3ZlIGltcG9ydCBQYXJzaW5nRXJyb3IKZnJvbSBweWNoZXNzLlN5c3RlbSBpbXBvcnQgY29uZgpmcm9tIHB5Y2hlc3MuU3lzdGVtLkxvZyBpbXBvcnQgbG9nCmZyb20gcHljaGVzcy5WYXJpYW50cy5maXNjaGVyYW5kb20gaW1wb3J0IEZpc2NoZXJhbmRvbUJvYXJkCgpmcm9tIC5Qcm90b2NvbEVuZ2luZSBpbXBvcnQgUHJvdG9jb2xFbmdpbmUsIFRJTUVfT1VUX1NFQ09ORApmcm9tIHB5Y2hlc3MuUGxheWVycy5QbGF5ZXIgaW1wb3J0IFBsYXllcklzRGVhZCwgVHVybkludGVycnVwdCwgSW52YWxpZE1vdmUKClRZUEVESUMgPSB7ImNoZWNrIjogbGFtYmRhIHg6IHggPT0gInRydWUiLCAic3BpbiI6IGludH0KT1BUS0VZUyA9ICgibmFtZSIsICJ0eXBlIiwgIm1pbiIsICJtYXgiLCAiZGVmYXVsdCIsICJ2YXIiKQoKCmNsYXNzIFVDSUVuZ2luZShQcm90b2NvbEVuZ2luZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgc3VicHJvY2VzcywgY29sb3IsIHByb3RvdmVyLCBtZDUpOgogICAgICAgIFByb3RvY29sRW5naW5lLl9faW5pdF9fKHNlbGYsIHN1YnByb2Nlc3MsIGNvbG9yLCBwcm90b3ZlciwgbWQ1KQoKICAgICAgICBzZWxmLmlkcyA9IHt9CiAgICAgICAgc2VsZi5vcHRpb25zID0ge30KICAgICAgICBzZWxmLm9wdGlvbnNUb0JlU2VudCA9IHt9CgogICAgICAgIHNlbGYud3RpbWUgPSA2MDAwMAogICAgICAgIHNlbGYuYnRpbWUgPSA2MDAwMAogICAgICAgIHNlbGYuaW5jciA9IDAKICAgICAgICBzZWxmLm1vdmVzID0gMAogICAgICAgIHNlbGYudGltZUhhbmRpY2FwID0gMQoKICAgICAgICBzZWxmLnBvbmRlck9uID0gRmFsc2UKICAgICAgICBzZWxmLnBvbmRlcm1vdmUgPSBOb25lCiAgICAgICAgc2VsZi5pZ25vcmVOZXh0ID0gRmFsc2UKICAgICAgICBzZWxmLndhaXRpbmdGb3JNb3ZlID0gRmFsc2UKICAgICAgICBzZWxmLm5lZWRCZXN0bW92ZSA9IEZhbHNlCiAgICAgICAgc2VsZi5iZXN0bW92ZV9ldmVudCA9IGFzeW5jaW8uRXZlbnQoKQogICAgICAgIHNlbGYucmVhZHlGb3JTdG9wID0gKAogICAgICAgICAgICBGYWxzZQogICAgICAgICkgICMga2VlcHMgdHJhY2sgb2Ygd2hldGhlciB3ZSBhbHJlYWR5IHNlbnQgYSAnc3RvcCcgY29tbWFuZAogICAgICAgIHNlbGYubXVsdGlwdlNldHRpbmcgPSAxICAjIE11bHRpUFYgb3B0aW9uIHNlbnQgdG8gdGhlIGVuZ2luZQogICAgICAgIHNlbGYubXVsdGlwdkV4cGVjdGVkID0gKAogICAgICAgICAgICAxCiAgICAgICAgKSAgIyBOdW1iZXIgb2YgUFZzIGV4cGVjdGVkIChsaW1pdGVkIGJ5IG51bWJlciBvZiBsZWdhbCBtb3ZlcykKICAgICAgICBzZWxmLmNvbW1hbmRzID0gY29sbGVjdGlvbnMuZGVxdWUoKQoKICAgICAgICBzZWxmLmdhbWVCb2FyZCA9IEJvYXJkKHNldHVwPVRydWUpICAjIGJvYXJkIGF0IHRoZSBlbmQgb2YgYWxsIG1vdmVzIHBsYXllZAogICAgICAgIHNlbGYuYm9hcmQgPSBCb2FyZChzZXR1cD1UcnVlKSAgIyBib2FyZCB0byBzZW5kIHRoZSBlbmdpbmUKICAgICAgICBzZWxmLnVjaVBvc2l0aW9uID0gInN0YXJ0cG9zIgogICAgICAgIHNlbGYudWNpUG9zaXRpb25MaXN0c01vdmVzID0gRmFsc2UKICAgICAgICBzZWxmLmFuYWx5c2lzID0gW05vbmVdCiAgICAgICAgc2VsZi5hbmFseXNpc19kZXB0aCA9IE5vbmUKCiAgICAgICAgc2VsZi5xdWV1ZSA9IGFzeW5jaW8uUXVldWUoKQogICAgICAgIHNlbGYucGFyc2VfbGluZV90YXNrID0gY3JlYXRlX3Rhc2soc2VsZi5wYXJzZUxpbmUoc2VsZi5lbmdpbmUpKQogICAgICAgIHNlbGYuZGllZF9jaWQgPSBzZWxmLmVuZ2luZS5jb25uZWN0KAogICAgICAgICAgICAiZGllZCIsIGxhbWJkYSBlOiBzZWxmLnF1ZXVlLnB1dF9ub3dhaXQoImRpZSIpCiAgICAgICAgKQogICAgICAgIHNlbGYuaW52YWxpZF9tb3ZlID0gTm9uZQoKICAgICAgICBzZWxmLmNpZHMgPSBbCiAgICAgICAgICAgIHNlbGYuY29ubmVjdF9hZnRlcigicmVhZHlGb3JPcHRpb25zIiwgc2VsZi5fX29uUmVhZHlGb3JPcHRpb25zKSwKICAgICAgICAgICAgc2VsZi5jb25uZWN0X2FmdGVyKCJyZWFkeUZvck1vdmVzIiwgc2VsZi5fX29uUmVhZHlGb3JNb3ZlcyksCiAgICAgICAgXQoKICAgICMgU3RhcnRpbmcgdGhlIGdhbWUKCiAgICBkZWYgcHJlc3RhcnQoc2VsZik6CiAgICAgICAgcHJpbnQoInVjaSIsIGZpbGU9c2VsZi5lbmdpbmUpCgogICAgZGVmIHN0YXJ0KHNlbGYsIGV2ZW50LCBpc19kZWFkKToKICAgICAgICBjcmVhdGVfdGFzayhzZWxmLl9fc3RhcnRCbG9ja2luZyhldmVudCwgaXNfZGVhZCkpCgogICAgQGFzeW5jaW8uY29yb3V0aW5lCiAgICBkZWYgX19zdGFydEJsb2NraW5nKHNlbGYsIGV2ZW50LCBpc19kZWFkKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IHlpZWxkIGZyb20gYXN5bmNp"}}]
["85f969c2cafb17956fb9a2ff9ac03c4d59ed932d-2","85f969c2cafb17956fb9a2ff9ac03c4d59ed932d","PHxmaW1fcHJlZml4fD4KIyBmZWF0dXJlcyByZWxhdGVkIHRvIHBsYXllci90ZWFtIHR3aXR0ZXIgc3RhdHMKCmZyb20gdHlwaW5nIGltcG9ydCBEaWN0CgppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gc3JjLmZlYXR1cmVzIGltcG9ydCAqCmZyb20gc3JjLnN0cmVhbWRmIGltcG9ydCBUaW1lU2VyaWVzU3RyZWFtCgoKZGVmIGZvbGxvd2Vyc19mZWF0dXJlcyhmb2xsb3dlcnM6IFRpbWVTZXJpZXNTdHJlYW0sIHJlZmVyZW5jZV9kYXRlOiBucC5kYXRldGltZTY0LCBkYXlzOiBpbnQsIGZlYXR1cmVfcHJlZml4OiBzdHIpIC0+IERpY3Q6CiAgICBzbGljZWQgPSBmb2xsb3dlcnMuc2xpY2VfZnJvbShyZWZlcmVuY2VfZGF0ZSAtIG5wLnRpbWVkZWx0YTY0KGRheXMsICdEJykpCiAgICByZXR1cm4gewogICAgICAgIGYne2ZlYXR1cmVfcHJlZml4fV9mb2xsb3dlcnNDaGFuZ2VkSW57ZGF5c31kYXlzJzogc2xpY2VkLmxhc3RfbWludXNfZmlyc3RfdmFsdWUoJ251bWJlck9mRm9sbG93ZXJzJyksCiAgICAgICAgZid7ZmVhdHVyZV9wcmVmaXh9X2FjdGl2aXRpZXNJbntkYXlzfWRheXMnOiBsZW4oc2xpY2VkKQogICAgfQoKCkBmZWF0dXJlKFsncGxheWVyX2ZvbGxvd2Vyc0RpZmYnLCAncGxheWVyX2ZvbGxvd2Vyc0RpZmZSYXRpbyddKQpkZWYgZjIwNF9wbGF5ZXJfdHdpdHRlcl9mb2xsb3dlcnNfZGlmZihjdHg6IENvbnRleHQpIC0+IERpY3Q6CiAgICBkID0gewogICAgfQogICAgZm9sbG93ZXJzID0gY3R4LnBsYXllci5mb2xsb3dlcnMKCiAgICBpZiBsZW4oY3R4LnBsYXllci5mb2xsb3dlcnMpID4gMToKICAgICAgICBkWydwbGF5ZXJfZm9sbG93ZXJzRGlmZiddID0gZm9sbG93ZXJzWydudW1iZXJPZkZvbGxvd2VycyddWy0xXSAtIGZvbGxvd2Vyc1snbnVtYmVyT2ZGb2xsb3dlcnMnXVstMl0KICAgICAgICBkWydwbGF5ZXJfZm9sbG93ZXJzRGlmZlJhdGlvJ10gPSBmb2xsb3dlcnNbJ251bWJlck9mRm9sbG93ZXJzJ11bLTFdIC8gbWF4KDEsIGZvbGxvd2Vyc1snbnVtYmVyT2ZGb2xsb3dlcnMnXVstMl0pCjx8ZmltX2hvbGV8PgogICAgcmV0dXJuIGQKCjx8ZmltX3N1ZmZpeHw+CiAgICBlbHNlOgogICAgICAgIGRbJ3BsYXllcl9mb2xsb3dlcnNEaWZmJ10gPSBOb25lCiAgICAgICAgZFsncGxheWVyX2ZvbGxvd2Vyc0RpZmZSYXRpbyddID0gTm9uZQoKPHxmaW1fZW5kfD4="]
["e60076011e57ea211c2ea8f8ddebabe6aa098b4c-5","e60076011e57ea211c2ea8f8ddebabe6aa098b4c","PHxmaW1fcHJlZml4fD4KIyB0eXBlOiBpZ25vcmUKCiIiImFkZCBjb3VydCB0byBkb2NrZXQgZW50cnkgdGFibGUgaW4gY2FzZSBuZWVkZWQgZm9yIHJvdy1iYXNlZC1hY2Nlc3MKClJldmlzaW9uIElEOiA1YzAyZDkzY2UyNTQKUmV2aXNlczogNDAwYzA0Nzc4NDA4CkNyZWF0ZSBEYXRlOiAyMDIxLTA4LTEwIDA4OjQ2OjQ0LjkxMDU2OAoKIiIiCmZyb20gYWxlbWJpYyBpbXBvcnQgb3AKaW1wb3J0IHNxbGFsY2hlbXkgYXMgc2EKCgojIHJldmlzaW9uIGlkZW50aWZpZXJzLCB1c2VkIGJ5IEFsZW1iaWMuCjx8ZmltX2hvbGV8PgoKCmRlZiB1cGdyYWRlKCk6CiAgICAjICMjIyBjb21tYW5kcyBhdXRvIGdlbmVyYXRlZCBieSBBbGVtYmljIC0gcGxlYXNlIGFkanVzdCEgIyMjCiAgICBvcC5hZGRfY29sdW1uKCdkb2NrZXRfZW50cmllcycsIHNhLkNvbHVtbignY291cnQnLCBzYS5TdHJpbmcoKSwgbnVsbGFibGU9VHJ1ZSkpCiAgICAjICMjIyBlbmQgQWxlbWJpYyBjb21tYW5kcyAjIyMKCgpkZWYgZG93bmdyYWRlKCk6CiAgICAjICMjIyBjb21tYW5kcyBhdXRvIGdlbmVyYXRlZCBieSBBbGVtYmljIC0gcGxlYXNlIGFkanVzdCEgIyMjCiAgICBvcC5kcm9wX2NvbHVtbignZG9ja2V0X2VudHJpZXMnLCAnY291cnQnKQogICAgIyAjIyMgZW5kIEFsZW1iaWMgY29tbWFuZHMgIyMjCjx8ZmltX3N1ZmZpeHw+CnJldmlzaW9uID0gJzVjMDJkOTNjZTI1NCcKZG93bl9yZXZpc2lvbiA9ICc0MDBjMDQ3Nzg0MDgnCmJyYW5jaF9sYWJlbHMgPSBOb25lCmRlcGVuZHNfb24gPSBOb25lCjx8ZmltX2VuZHw+"]
["9530d22e1ea1f9253491ed8d0782e33efb7b72b4-2","9530d22e1ea1f9253491ed8d0782e33efb7b72b4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRpc2NvcmQKZnJvbSBkaXNjb3JkLmV4dCBpbXBvcnQgY29tbWFuZHMKaW1wb3J0IHV0aWxzCgpjbGFzcyBVc2VyKGNvbW1hbmRzLkNvZyk6CglkZWYgX19pbml0X18oc2VsZiwgY2xpZW50KToKCQlzZWxmLmNsaWVudCA9IGNsaWVudAoJCglAY29tbWFuZHMuY29tbWFuZChhbGlhc2VzID0gWyJwcm9maWxlIl0pCglhc3luYyBkZWYgdXNlcihzZWxmLCBjdHgsIG1lbWJlcjogZGlzY29yZC5NZW1iZXIgPSBOb25lKToKCQlpZiB1dGlscy5nZXRfc2V0dGluZyhjdHguZ3VpbGQsICJ1c2VyXyIpOgoJCQlpZiBtZW1iZXIgaXMgTm9uZTogbWVtYmVyID0gY3R4LmF1dGhvcgoJCQkKCQkJZW1iZWQgPSAoZGlzY29yZC5FbWJlZCgKCQkJCXRpdGxlID0gZiJ7bWVtYmVyLm5hbWV9I3ttZW1iZXIuZGlzY3JpbWluYXRvcn0ncyBJbmZvIiwKCQkJCWNvbG9yID0gdXRpbHMuZW1iZWRfY29sb3IpCgkJCQkuc2V0X3RodW1ibmFpbCh1cmwgPSBtZW1iZXIuYXZhdGFyX3VybCkKCQkJCS5zZXRfZm9vdGVyKHRleHQgPSBmIlJlcXVlc3RlZCBieSB7Y3R4LmF1dGhvci5uYW1lfSN7Y3R4LmF1dGhvci5kaXNjcmltaW5hdG9yfSIsIGljb25fdXJsID0gY3R4LmF1dGhvci5hdmF0YXJfdXJsKSkKCQkJCgkJCWZpZWxkcyA9IFsKCQkJCSgiTmlja25hbWUiLCBtZW1iZXIubmljayksCgkJCQkoIlRvcCByb2xlIiwgbWVtYmVyLnRvcF9yb2xlLm1lbnRpb24pLAoJCQkJKCJCb3QiLCBtZW1iZXIuYm90KSwKCQkJCSgiQ3JlYXRlZCBBdCIsIG1lbWJlci5jcmVhdGVkX2F0LnN0cmZ0aW1lKCIlYi4gJWQsICVZIikpLAoJCQkJKCJKb2luZWQgQXQiLCBtZW1iZXIuam9pbmVkX2F0LnN0cmZ0aW1lKCIlYi4gJWQsICVZIikpLAoJCQkJKCJCb29zdGVkIiwgYm9vbChtZW1iZXIucHJlbWl1bV9zaW5jZSkpXQoJCQkKCQkJZm9yIG5hbWUsIHZhbHVlIGluIGZpZWxkczoKCQkJCWVtYmVkLmFkZF9maWVsZChuYW1lID0gbmFtZSwgdmFsdWUgPSB2YWx1ZSwgaW5saW5lID0gVHJ1ZSkKPHxmaW1faG9sZXw+CgkJZWxzZToKCQkJYXdhaXQgY3R4LnNlbmQoZW1iZWQgPSB1dGlscy5jb21tYW5kX2Rpc2FibGVkKQoJCglAdXNlci5lcnJvcgoJYXN5bmMgZGVmIHVzZXJfZXJyb3Ioc2VsZiwgY3R4LCBlcnJvcik6CgkJaWYgdXRpbHMuZ2V0X3NldHRpbmcoY3R4Lmd1aWxkLCAidXNlcl8iKToKCQkJYXdhaXQgY3R4LnNlbmQoZW1iZWQgPSB1dGlscy5lbWJlZHNbInVzZXIgZXJyb3IiXSkKCQllbHNlOgoJCQlhd2FpdCBjdHguc2VuZChlbWJlZCA9IHV0aWxzLmNvbW1hbmRfZGlzYWJsZWQpCgpkZWYgc2V0dXAoY2xpZW50KToKCWNsaWVudC5hZGRfY29nKFVzZXIoY2xpZW50KSkKPHxmaW1fc3VmZml4fD4KCQkJCgkJCWF3YWl0IGN0eC5zZW5kKGVtYmVkID0gZW1iZWQpCjx8ZmltX2VuZHw+"]
["fd18f8108aee02ea1bb9484b278c4e4282bd4334-1","fd18f8108aee02ea1bb9484b278c4e4282bd4334","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KIyBleDpzZXQgZmlsZWVuY29kaW5nPXV0Zi04OgoKaW1wb3J0IG9zCgpvcy5lbnZpcm9uLnNldGRlZmF1bHQoIkRKQU5HT19TRVRUSU5HU19NT0RVTEUiLCAiZWxtbnQuc2V0dGluZ3MiKQoKZnJvbSB1d3NnaWRlY29yYXRvcnMgaW1wb3J0IGNyb24KZnJvbSBkamFuZ28uY29yZS5tYW5hZ2VtZW50IGltcG9ydCBjYWxsX2NvbW1hbmQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZnJvbSBncm91cHBsYW5lci50YXNrcyBpbXBvcnQgdXBkYXRlIGFzIGdyb3VwcGxhbmVyX3VwZGF0ZQoKQGNyb24oMzAsIDAsIC0xLCAtMSwgLTEpCjx8ZmltX2VuZHw+"]
["f951e7e7c8e97ee3af9fd0457d1cf010696fe8d9-3","f951e7e7c8e97ee3af9fd0457d1cf010696fe8d9","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBARGF0ZSAgICA6IDIwMTUtMDEtMTUgMTQ6MjI6NTQKIyBAQXV0aG9yICA6IFdlaXpob25nIFR1IChtYWlsQHR1d2VpemhvbmcuY29tKQojIEBMaW5rICAgIDogaHR0cDovL3d3dy50dXdlaXpob25nLmNvbQojIEBWZXJzaW9uIDogMC4wLjEKJycnCkdldCBsaXRlcmF0dXJlIGluZm9ybWF0aW9uIHZpYSBQdWJNZWQgaWQKJycnCgoKZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgdXJsb3Blbgpmcm9tIHB5cXVlcnkgaW1wb3J0IFB5UXVlcnkgYXMgcHEKZnJvbSBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAgYXMgQlMKaW1wb3J0IHJlcXVlc3RzCgpjbGFzcyBQdWJNZWQob2JqZWN0KToKICAgICcnJwogICAgUE1JRCBpcyBwdWJtZWQgaWQ6IHN1Y2ggYXMgMjIwMTI3NjIKICAgICcnJwoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBQTUlEPScnKToKICAgICAgICBzZWxmLlBNSUQgPSBzdHIoUE1JRCkKICAgICAgICBzZWxmLnVybCA9ICdodHRwOi8vZXV0aWxzLm5jYmkubmxtLm5paC5nb3YvZW50cmV6L2V1dGlscy9lc3VtbWFyeS5mY2dpP2RiPXB1Ym1lZCZpZD17aWRzfScuZm9ybWF0KAogICAgICAgICAgICBpZHM9c2VsZi5QTUlEKQogICAgICAgICMgdXNlIGJzIHRvIHN0YW5kYXJkaXplIHRoZSB4bWwgY29udGVudAogICAgICAgICNzZWxmLnhtbCA9IHBxKHN0cihCUyh1cmxvcGVuKHNlbGYudXJsKS5yZWFkKCksZmVhdHVyZXM9Imx4bWwiKSkpCiAgICAgICAgeG09J1xuJy5qb2luKHN0cihCUyhyZXF1ZXN0cy5nZXQoc2VsZi51cmwpLmNvbnRlbnQsZmVhdHVyZXM9Imx4bWwiKSkuc3BsaXQoJ1xuJylbMTpdKQogICAgICAgIHNlbGYueG1sID0gcHEoeG0pCgogICAgICAgICMgYWRkIGF0dHIgZm9yIGluc3RhbmNlCiAgICAgICAgIyBzdWNoIGFzOiBwbS50aXRsZSwgcG0uYXV0aG9ycyBhbmQgcG0uZ2V0VGl0bGUoKSwgcG0uZ2V0QXV0aG9ycygpCiAgICAgICAgUHViTWVkX2Z1bnMgPSBbeCBmb3IgeCBpbiBsaXN0KFB1Yk1lZC5fX2RpY3RfXy5rZXlzKCkpIGlmIG5vdCB4LnN0YXJ0c3dpdGgoCiAgICAgICAgICAgICdfJyldCiAgICAgICAgZm9yIGZuYW1lIGluIFB1Yk1lZF9mdW5zOgogICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGZuYW1lLnJlcGxhY2UoJ2dldF8nLCAnJywgMSksIGdldGF0dHIoc2VsZiwgZm5hbWUpKCkpCjx8ZmltX2hvbGV8PgogICAgZGVmIF9fZ2V0KHNlbGYsIG5hbWUpOgogICAgICAgIHJldHVybiBzZWxmLnhtbCgnW25hbWU9IiVzIl0nICUgbmFtZSkKCiAgICBkZWYgZ2V0X2F1dGhvcnMoc2VsZik6CiAgICAgICAgcmV0dXJuIFthdXRob3JfbGFiZWwudGV4dCBmb3IgYXV0aG9yX2xhYmVsIGluIHNlbGYuX19nZXQoJ0F1dGhvcicpXQoKICAgIGRlZiBnZXRfdGl0bGUoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX19nZXQoJ1RpdGxlJykudGV4dCgpCgogICAgZGVmIGdldF9wdWJfZGF0ZShzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5fX2dldCgnUHViRGF0ZScpLnRleHQoKQoKICAgIGRlZiBnZXRfam91cm5hbF9uYW1lKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl9fZ2V0KCdTb3VyY2UnKS50ZXh0KCkKCiAgICBkZWYgZ2V0X2pvdXJuYWxfZnVsbF9uYW1lKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl9fZ2V0KCdGdWxsSm91cm5hbE5hbWUnKS50ZXh0KCkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgaW1wb3J0IHVuaXR0ZXN0CiAgICBwcmludCgoJ2xvYWRpbmcgbGl0ZXJhdHVyZSBpbmZvcm1hdGlvbi4uLicsKSkKICAgIHBtID0gUHViTWVkKDIyMDEyNzYyKQogICAgcHJpbnQoJ29rIVxucmVhZGluZy4uLicpCgogICAgY2xhc3MgVGVzdFB1Yk1lZCh1bml0dGVzdC5UZXN0Q2FzZSk6CgogICAgICAgIGRlZiB0ZXN0X2dldF90aXRsZShzZWxmKToKICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdCaW9zeW50aGVzaXMgb2YgaXNvcHJlbmUgdW5pdHMnIGluIHBtLmdldF90aXRsZSgpKQoKICAgICAgICBkZWYgdGVzdF9nZXRfYXV0aG9ycyhzZWxmKToKICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdBaHJlbnMtQm90em9uZyBBJyBpbiBwbS5nZXRfYXV0aG9ycygpKQoKICAgICAgICBkZWYgdGVzdF9nZXRfcHViX2RhdGUoc2VsZik6CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzIwMTEgRGVjIDknLCBwbS5nZXRfcHViX2RhdGUoKSkKCiAgICAgICAgZGVmIHRlc3RfZ2V0X2pvdXJuYWxfbmFtZShzZWxmKToKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQW5nZXcgQ2hlbSBJbnQgRWQgRW5nbCcsIHBtLmdldF9qb3VybmFsX25hbWUoKSkKCiAgICAgICAgZGVmIHRlc3RfZ2V0X2pvdXJuYWxfZnVsbF9uYW1lKHNlbGYpOgogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdBbmdld2FuZHRlIENoZW1pZSAoSW50ZXJuYXRpb25hbCBlZC4gaW4gRW5nbGlzaCknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtLmdldF9qb3VybmFsX2Z1bGxfbmFtZSgpKQoKICAgIHVuaXR0ZXN0Lm1haW4oKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBwYXJ0cyA9IGZuYW1lLnNwbGl0KCdfJykKICAgICAgICAgICAgbmV3X2ZuYW1lID0gcGFydHNbMF0gKyAnJy5qb2luKFtwLnRpdGxlKCkgZm9yIHAgaW4gcGFydHNbMTpdXSkKICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBuZXdfZm5hbWUsIGdldGF0dHIoc2VsZiwgZm5hbWUpKQoKPHxmaW1fZW5kfD4="]
["1f06997208e249346c806f3a1371014759b61c02-2","1f06997208e249346c806f3a1371014759b61c02","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOnV0ZjggLSotCiIiIgrnlKjkuo5EQUfliLDmi5PmiZHluo8K55uu5YmN5LuF5L6bcGlwZWxpbmXmnoTlu7rorqHnrpflm77osIPnlKjvvIwK5aaC5p6c5pyq5p2l6KKr5b6I5aSa5Zyw5pa56LCD55So77yM5Y2V54us5ou/5Ye65p2lCiIiIgoKaW1wb3J0IGNvcHkKZnJvbSB1dGlscy5sb2cgaW1wb3J0IGdldF9sb2dnZXIKCgpsb2dnZXIgPSBnZXRfbG9nZ2VyKF9fbmFtZV9fKQoKCmRlZiBjYWxjX2RhZyh3b3JrZmxvd19jb25mKToKICAgICIiIgogICAg5bCGd29ya2Zsb3cgY29uZmln5YWI566A5YyW5Li6REFHCiAgICDlhbbkuK1EQUflvaLlvI/kuLp7bmFtZTp7Im5leHRfbm9kZXMiOiBbXSwgInByZXBfbm9kZXMiOiBbXX0sIC4uLn0KICAgIOi/meS4qkRBR+i2s+Wkn+aIkeS7rOS4i+S4gOatpeeUqOadpeiuoeeul3RvcG/luo/kuoYKICAgIDpwYXJhbSB3b3JrZmxvd19jb25mOgogICAgOnJldHVybjogZGljdAogICAgIiIiCiAgICBkYWdfZGljdCA9IHt9CiAgICAjIOajgOafpWNvbmblubbnroDljJblh7puYW1l5ZKM5a+55bqU55qEbmV4dF9ub2RlcwogICAgZm9yIHNpbmdsZV9kaWN0IGluIHdvcmtmbG93X2NvbmY6CiAgICAgICAgbm9kZV9uYW1lID0gc2luZ2xlX2RpY3QuZ2V0KCJuYW1lIikKICAgICAgICBpZiBub3Qgbm9kZV9uYW1lOgogICAgICAgICAgICBlcnJfbXNnID0gImRpY3QgaW4ge30gbXVzdCBoYXZlIGtleSBuYW1lIi5mb3JtYXQoc2luZ2xlX2RpY3QpCiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihlcnJfbXNnKQogICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oZXJyX21zZykKICAgICAgICBuZXh0X25vZGVzID0gc2luZ2xlX2RpY3QuZ2V0KCJuZXh0X25vZGVzIikKICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShuZXh0X25vZGVzLCBsaXN0KToKICAgICAgICAgICAgZXJyX21zZyA9ICJuZXh0X25vZGVzIGluIHt9IG11c3QgYmUgYSBsaXN0Ii5mb3JtYXQoc2luZ2xlX2RpY3QpCiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihlcnJfbXNnKQogICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oZXJyX21zZykKICAgICAgICB1bmxhd19ub2RlcyA9IFtpIGZvciBpIGluIG5leHRfbm9kZXMgaWYgbm90IGlzaW5zdGFuY2UoaSwgc3RyKV0KICAgICAgICBpZiB1bmxhd19ub2RlczoKICAgICAgICAgICAgZXJyX21zZyA9ICJ0aGVzZSBuZXh0IG5vZGVzPXt9IGluIHt9IG11c3Qgc3RyIi5mb3JtYXQodW5sYXdfbm9kZXMsIHNpbmdsZV9kaWN0KQogICAgICAgICAgICBsb2dnZXIuZXJyb3IoZXJyX21zZykKICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKGVycl9tc2cpCiAgICAgICAgZGFnX2RpY3Rbbm9kZV9uYW1lXSA9IHsibmV4dF9ub2RlcyI6IG5leHRfbm9kZXMsICJwcmVwX25vZGVzIjogW119CiAgICAjIOagueaNrm5leHRfbm9kZXPlm57loavlh7pwcmVwX25vZGVzCiAgICBub2RlX25hbWVfbGlzdCA9IGxpc3QoZGFnX2RpY3Qua2V5cygpKQogICAgZm9yIG5vZGVfbmFtZSBpbiBkYWdfZGljdDoKICAgICAgICBuZXh0X25vZGVzID0gZGFnX2RpY3QuZ2V0KG5vZGVfbmFtZSkuZ2V0KCJuZXh0X25vZGVzIikKICAgICAgICBmb3Igc2luZ2xlX25leHRfbm9kZSBpbiBuZXh0X25vZGVzOgogICAgICAgICAgICBpZiBzaW5nbGVfbmV4dF9ub2RlIG5vdCBpbiBub2RlX25hbWVfbGlzdDoKICAgICAgICAgICAgICAgIGVycl9tc2cgPSAibmV4dCBub2RlPXt9IGRlZmluZWQgaW4gbmV4dF9ub2Rlcz17fSBkbyBub3QgaW4gYWxsIG5vZGUgbmFtZSBsaXN0PXt9Ii5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgc2luZ2xlX25leHRfbm9kZSwgbmV4dF9ub2Rlcywgbm9kZV9uYW1lX2xpc3QpCiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoZXJyX21zZykKICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihlcnJfbXNnKQogICAgICAgICAgICBkYWdfZGljdFtzaW5nbGVfbmV4dF9ub2RlXVsicHJlcF9ub2RlcyJdLmFwcGVuZChub2RlX25hbWUpCiAgICAjIOazqOaEj++8jOiZveeEtmRhZ+acieS6hu+8jOS9hmRpY3TmnKzouqvmmK/ml6Dluo/nmoQKICAgIHJldHVybiBkYWdfZGljdAoKCmRlZiBfY2hlY2tfZGFnX2RpY3QoZGFnX2RpY3QpOgogICAgaWYgbm90IGlzaW5zdGFuY2UoZGFnX2RpY3QsIGRpY3QpOgogICAgICAgIGVycl9tc2cgPSAiZGFnX2RpY3Q9e30gbXVzdCBhIGRpY3QiLmZvcm1hdChkYWdfZGljdCkKICAgICAgICBsb2dnZXIuZXJyb3IoZXJyX21zZykKICAgICAgICByZXR1cm4gRmFsc2UsIGVycl9tc2cKICAgIHVubGF3X2xpc3QgPSBbaSBmb3IgaSBpbiBkYWdfZGljdC52YWx1ZXMoKSBpZgogICAgICAgICAgICAgICAgICBub3QgaXNpbnN0YW5jZShpLCBkaWN0KSBvciBbaiBmb3IgaiBpbiBpLmtleXMoKSBpZiBqIG5vdCBpbiBbIm5leHRfbm9kZXMiLCAicHJlcF9ub2RlcyJdXV0KICAgIGlmIHVubGF3X2xpc3Q6CiAgICAgICAgZXJyX21zZyA9ICJ1bmxhdyBpdGVtcz17fSBtdXN0IGEgZGljdCBhbmQgb25seSB3aXRoIGtleXMgbmV4dF9ub2RlcyBhbmQgcHJlcF9ub2RlcyIuZm9ybWF0KHVubGF3X2xpc3QpCiAgICAgICAgbG9nZ2VyLmVycm9yKGVycl9tc2cpCiAgICAgICAgcmV0dXJuIEZhbHNlLCBlcnJfbXNnCiAgICByZXR1cm4gVHJ1ZSwgIiIKCgpkZWYgY2FsY190b3BvX29yZGVyKGRhZ19kaWN0KToKICAgICIiIgogICAg55SxREFH6K6h566XdG9wb+W6j++8jOi/lOWbnnRvcG/luo9saXN0CiAgICBvcmRlcuW6j+eul+azle+8mgogICAgMe+8jOaLv+WHuuaJgOacieayoeaciei+k+WFpeeahOiKgueCuei/veWKoOWFpW9yZGVyCiAgICAy77yM5Zyo5a6D5Lus55qE6L6T5Ye65Lit77yM5YeP5Y675ou/6LWw55qE6L6T5YWlCiAgICAz77yM5b6q546v77yM55u05Yiw5LiN5Ymp5oiW6ICF5Ymp5LiL546vCiAgICA6cGFyYW0gZGFnX2RpY3Q6IHN1Y2ggYXMgeyJmMSI6IHsibmV4dF9ub2RlcyI6IFsiZjIiXSwgInByZXBfbm9kZXMiOiBbXX0sIC4uLn0KICAgIDpyZXR1cm46IHRvcG/luo/vvIhsaXN077yJCiAgICAiIiIKICAgIGZsYWcsIG1zZyA9IF9jaGVja19kYWdfZGljdChkYWdfZGljdCkKICAgIGlmIG5vdCBmbGFnOgogICAgICAgIHJhaXNlIG1zZwogICAgdG9wb19vcmRlcl9saXN0ID0gW10KICAgIGRhZ19kaWN0ID0gY29weS5kZWVwY29weShkYWdfZGljdCkgICMg5Ye95pWw5byP5Ye95pWw5LiN5bqU6ZqP5oSP5L+u5pS56LCD55So6ICF55qE5Y+Y6YeP77yM5omA5Lul5L2/55SoZGVlcGNvcHnlpI3liLbkuIDkuKrlia/mnKwKICAgIHdoaWxlIGRhZ19kaWN0OiAgIyDov5nkuKrlvqrnjq/opoHogIPomZFkYWdfZGljdOS4jeaYr+WQiOazlURBR+eahOaDheWGtQogICAgICAgIG5vX2lucHV0X25vZGVzID0gW2kgZm9yIGkgaW4gZGFnX2RpY3QgaWYgZGFnX2RpY3QuZ2V0KGkpLmdldCgicHJlcF9ub2RlcyIpID09IFtdXQogICAgICAgIGlmIG5vdCBub19pbnB1dF9ub2RlczoKICAgICAgICAgICAgZXJyX21zZyA9ICJ0b3BvX29yZGVyX2xpc3Q9e30sIGFuZCBubyBudWxsIGxpc3QgaW4gbmV4dCBkYWdfZGljdD17fSwgcGxzIGNoZWNrIi5mb3JtYXQoCiAgICAgICAgICAgICAgICB0b3BvX29yZGVyX2xpc3QsIGRhZ19kaWN0KQogICAgICAgICAgICBsb2dnZXIuZXJyb3IoZXJyX21zZykKICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKGVycl9tc2cpCiAgICAgICAgdG9wb19vcmRlcl9saXN0ICs9IG5vX2lucHV0X25vZGVzCiAgICAgICAgZm9yIGkgaW4gbm9faW5wdXRfbm9kZXM6CiAgICAgICAgICAgIG5leHRfbm9kZXMgPSBkYWdfZGljdC5nZXQoaSkuZ2V0KCJuZXh0X25vZGVzIiwgW10pCiAgICAgICAgICAgIGZvciBqIGluIG5leHRfbm9kZXM6CiAgICAgICAgICAgICAgICBpZiBub3QgZGFnX2RpY3QuZ2V0KGopOgogICAgICAgICAgICAgICAgICAgIGVycl9tc2cgPSAiREFHIHVubGF3OlxuIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7fSBuZXh0IG5vZGVzIGlzIHt9LFxuIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidXQgbm9kZSB7fSBub3QgaW4gZGFnPXt9Ii5mb3JtYXQoaSwgbmV4dF9ub2RlcywgaiwgZGFnX2RpY3QpCiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGVycl9tc2cpCiAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKGVycl9tc2cpCiAgICAgICAgICAgICAgICBpZiBub3QgZGFnX2RpY3QuZ2V0KGopLmdldCgicHJlcF9ub2RlcyIpOgogICAgICAgICAgICAgICAgICAgIGVycl9tc2cgPSAiREFHIHVubGF3OlxuIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7fSBuZXh0IG5vZGVzIGlzIHt9LFxuIiBcCjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihlcnJfbXNnKQogICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihlcnJfbXNnKQogICAgICAgICAgICAgICAgaWYgaSBub3QgaW4gZGFnX2RpY3QuZ2V0KGopLmdldCgicHJlcF9ub2RlcyIpOgogICAgICAgICAgICAgICAgICAgIGVycl9tc2cgPSAiREFHIHVubGF3OlxuIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7fSBuZXh0IG5vZGVzIGlzIHt9LFxuIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidXQgbm9kZSB7fSBpbiBkYWc9e30gd2l0aCBwcmVwX25vZGVzPXt9IG5vdCBoYXZlIHt9Ii5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBuZXh0X25vZGVzLCBqLCBkYWdfZGljdCwgZGFnX2RpY3QuZ2V0KGopLmdldCgicHJlcF9ub2RlcyIpLCBpKQogICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihlcnJfbXNnKQogICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihlcnJfbXNnKQogICAgICAgICAgICAgICAgZGFnX2RpY3Rbal1bInByZXBfbm9kZXMiXS5yZW1vdmUoaSkKICAgICAgICAgICAgZGVsIGRhZ19kaWN0W2ldCiAgICByZXR1cm4gdG9wb19vcmRlcl9saXN0Cjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidXQgbm9kZSB7fSBpbiBkYWc9e30gbm90IGhhdmUga2V5IHByZXBfbm9kZXMiLmZvcm1hdChpLCBuZXh0X25vZGVzLCBqLCBkYWdfZGljdCkKPHxmaW1fZW5kfD4="]
["1f14c3a3344a730d81db32bc4fd297f9840fad18-4","1f14c3a3344a730d81db32bc4fd297f9840fad18","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcmV2ZXJzZQpmcm9tIGRqYW5nby51dGlscy5zYWZlc3RyaW5nIGltcG9ydCBtYXJrX3NhZmUKZnJvbSBkamFuZ28udXRpbHMuZW5jb2RpbmcgaW1wb3J0IGZvcmNlX3RleHQKCmZyb20gLm1vZGVscy51c2VyX3BsYWNlIGltcG9ydCBVc2VyUGxhY2UKZnJvbSAubW9kZWxzLmNoYWluX3BsYWNlIGltcG9ydCBDaGFpblBsYWNlCmZyb20gLm1vZGVscy5jaGFpbiBpbXBvcnQgQ2hhaW4KZnJvbSAubW9kZWxzLnVzZXJfcGxhY2VfcGF5IGltcG9ydCBVc2VyUGxhY2VQYXkKCgpjbGFzcyBDaGFpblBsYWNlSW5saW5lKGFkbWluLlN0YWNrZWRJbmxpbmUpOgogICAgIiIiCiAgICAiIiIKCiAgICBtb2RlbCA9IENoYWluUGxhY2UKICAgIGZpZWxkcyA9IFsibmFtZSIsICJwYXlfZGF0ZSIsICJnZXRfZWRpdF9saW5rIiwgXQogICAgcmVhZG9ubHlfZmllbGRzID0gWyJnZXRfZWRpdF9saW5rIiwgXQogICAgZXh0cmEgPSAwCgogICAgZGVmIGdldF9lZGl0X2xpbmsoc2VsZiwgb2JqPU5vbmUpOgogICAgICAgIGlmIG9iai5wazoKICAgICAgICAgICAgdXJsID0gcmV2ZXJzZSgnYWRtaW46JXNfJXNfY2hhbmdlJyAlIChvYmouX21ldGEuYXBwX2xhYmVsLCBvYmouX21ldGEubW9kZWxfbmFtZSksIGFyZ3M9W2ZvcmNlX3RleHQob2JqLnBrKV0pCiAgICAgICAgICAgIHJldHVybiBtYXJrX3NhZmUoIiIiPGEgaHJlZj0ie3VybH0iIHRhcmdldD0iX2JsYW5rIj57dGV4dH08L2E+IiIiLmZvcm1hdCgKICAgICAgICAgICAgICAgIHVybD11cmwsCiAgICAgICAgICAgICAgICB0ZXh0PSJWZXIgdXN1YXJpb3MgcG9yIHB1ZXN0byIsCiAgICAgICAgICAgICkpCiAgICAgICAgcmV0dXJuICJHdWFyZGUgeSBjb250aW7DumUgZWRpdGFuZG8gcGFyYSBwb2RlciB2ZXIgZWwgbGluayBkZSBlZGljacOzbiIKCiAgICBnZXRfZWRpdF9saW5rLnNob3J0X2Rlc2NyaXB0aW9uID0gIkVkaXRhciBwdWVzdG8iCiAgICBnZXRfZWRpdF9saW5rLmFsbG93X3RhZ3MgPSBUcnVlCgoKQGFkbWluLnJlZ2lzdGVyKENoYWluKQpjbGFzcyBDaGFpbkFkbWluKGFkbWluLk1vZGVsQWRtaW4pOgoKICAgIGxpc3RfZGlzcGxheSA9ICgnbmFtZScsICdwbGFjZXMnLCAncGxhY2VfdmFsdWUnLCAnY2hhaW5fdHlwZScsICkKICAgIHNlYXJjaF9maWVsZHMgPSAoJ25hbWUnLCAncGxhY2VzJywgKQogICAgaW5saW5lcyA9IFtDaGFpblBsYWNlSW5saW5lLCBdCgoKY2xhc3MgVXNlclBsYWNlU3RhY2tlZChhZG1pbi5TdGFja2VkSW5saW5lKToKCiAgICBtb2RlbCA9IFVzZXJQbGFjZQogICAgZmllbGRzID0gWyJ1c2VyIiwgInBsYWNlX3BvcmNlbnRhamUiLCAiZ2V0X2VkaXRfbGluayIsIF0KICAgIHJlYWRvbmx5X2ZpZWxkcyA9IFsiZ2V0X2VkaXRfbGluayIsIF0KICAgIGV4dHJhID0gMAoKICAgIGRlZiBnZXRfZWRpdF9saW5rKHNlbGYsIG9iaj1Ob25lKToKICAgICAgICBpZiBvYmoucGs6CiAgICAgICAgICAgIHVybCA9IHJldmVyc2UoJ2FkbWluOiVzXyVzX2NoYW5nZScgJSAob2JqLl9tZXRhLmFwcF9sYWJlbCwgb2JqLl9tZXRhLm1vZGVsX25hbWUpLCBhcmdzPVtmb3JjZV90ZXh0KG9iai5wayldKQogICAgICAgICAgICByZXR1cm4gbWFya19zYWZlKCIiIjxhIGhyZWY9Int1cmx9IiB0YXJnZXQ9Il9ibGFuayI+e3RleHR9PC9hPiIiIi5mb3JtYXQoCiAgICAgICAgICAgICAgICB1cmw9dXJsLAogICAgICAgICAgICAgICAgdGV4dD0iVmVyIHBhZ29zIGRlbCB1c3VhcmlvIiwKICAgICAgICAgICAgKSkKPHxmaW1faG9sZXw+CiAgICBnZXRfZWRpdF9saW5rLnNob3J0X2Rlc2NyaXB0aW9uID0gIlZlciBwYWdvcyIKICAgIGdldF9lZGl0X2xpbmsuYWxsb3dfdGFncyA9IFRydWUKCgpAYWRtaW4ucmVnaXN0ZXIoQ2hhaW5QbGFjZSkKY2xhc3MgQ2hhaW5QbGFjZUFkbWluKGFkbWluLk1vZGVsQWRtaW4pOgoKICAgIGxpc3RfZGlzcGxheSA9ICgnY2hhaW4nLCAncGF5X2RhdGUnLCApCiAgICByZWFkb25seV9maWVsZHMgPSAoJ2NoYWluJywgKQogICAgaW5saW5lcyA9IFtVc2VyUGxhY2VTdGFja2VkLCBdCgoKY2xhc3MgVXNlclBsYWNlUGF5U3RhY2tlZChhZG1pbi5TdGFja2VkSW5saW5lKToKCiAgICBtb2RlbCA9IFVzZXJQbGFjZVBheQogICAgZXh0cmEgPSAwCgoKQGFkbWluLnJlZ2lzdGVyKFVzZXJQbGFjZSkKY2xhc3MgVXNlclBsYWNlQWRtaW4oYWRtaW4uTW9kZWxBZG1pbik6CiAgICAiIiIKICAgICIiIgoKICAgIGxpc3RfZGlzcGxheSA9ICgnY2hhaW5fcGxhY2UnLCAndXNlcicsICdwbGFjZV9wb3JjZW50YWplJykKICAgIHJlYWRvbmx5X2ZpZWxkcyA9ICgnY2hhaW5fcGxhY2UnLCAndXNlcicsICdwbGFjZV9wb3JjZW50YWplJywpCiAgICBpbmxpbmVzID0gW1VzZXJQbGFjZVBheVN0YWNrZWQsIF0KPHxmaW1fc3VmZml4fD4KICAgICAgICByZXR1cm4gIkd1YXJkZSB5IGNvbnRpbsO6ZSBlZGl0YW5kbyBwYXJhIHBvZGVyIHZlciBlbCBsaW5rIGRlIGVkaWNpw7NuIgoKPHxmaW1fZW5kfD4="]
["2f80ade28acd0d3d21e526b5dda16b836a7975d4-1","2f80ade28acd0d3d21e526b5dda16b836a7975d4","PHxmaW1fcHJlZml4fD4KZnJvbSBhbGxhdXRoLmFjY291bnQuZm9ybXMgaW1wb3J0ICgKICAgIENoYW5nZVBhc3N3b3JkRm9ybSwKICAgIExvZ2luRm9ybSwKICAgIFJlc2V0UGFzc3dvcmRGb3JtLAogICAgUmVzZXRQYXNzd29yZEtleUZvcm0sCiAgICBTZXRQYXNzd29yZEZvcm0sCiAgICBTaWdudXBGb3JtLAopCmZyb20gY3Jpc3B5X2Zvcm1zLmhlbHBlciBpbXBvcnQgRm9ybUhlbHBlcgpmcm9tIGRqYW5nbyBpbXBvcnQgZm9ybXMKZnJvbSBkamFuZ28uY29udHJpYi5hdXRoIGltcG9ydCBmb3JtcyBhcyBhZG1pbl9mb3Jtcwpmcm9tIGRqYW5nby5jb250cmliLmF1dGggaW1wb3J0IGdldF91c2VyX21vZGVsCmZyb20gZGphbmdvLmNvbnRyaWIuYXV0aC5mb3JtcyBpbXBvcnQgQXV0aGVudGljYXRpb25Gb3JtCmZyb20gZGphbmdvLnV0aWxzLnRyYW5zbGF0aW9uIGltcG9ydCBnZXR0ZXh0X2xhenkgYXMgXwoKZnJvbSAubW9kZWxzIGltcG9ydCBEZXBvc2l0LCBXaXRoZHJhdwoKVXNlciA9IGdldF91c2VyX21vZGVsKCkKCgpjbGFzcyBXaXRoZHJhd0Zvcm0oZm9ybXMuTW9kZWxGb3JtKToKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgbW9kZWwgPSBXaXRoZHJhdwogICAgICAgIGZpZWxkcyA9IFsKICAgICAgICAgICAgImN1cnJlbmN5IiwKICAgICAgICAgICAgImFkZHJlc3MiLAogICAgICAgICAgICAiYW1vdW50IiwKICAgICAgICBdCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKICAgICAgICBzZWxmLmhlbHBlciA9IEZvcm1IZWxwZXIoc2VsZikKICAgICAgICBzZWxmLmZpZWxkc1snY3VycmVuY3knXS53aWRnZXQgPSBmb3Jtcy5SYWRpb1NlbGVjdChhdHRycz17J2NsYXNzJzogJ2Zvcm0tY29udHJvbCd9KQo8fGZpbV9lbmR8Pg=="]
["2f9d8073b8ee097fdde0eab4c002efcaef01ded1-2","2f9d8073b8ee097fdde0eab4c002efcaef01ded1","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KCiMgUmVnaXN0ZXIgeW91ciBtb2RlbHMgaGVyZS4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIC5tb2RlbHMgaW1wb3J0IEJ1cm5lcgoKYWRtaW4uc2l0ZS5yZWdpc3RlcihCdXJuZXIpCjx8ZmltX2VuZHw+"]
["dded495bbbc864aa7b8c3ff9e356d7f6d9cd5c70-2","dded495bbbc864aa7b8c3ff9e356d7f6d9cd5c70","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIGV4cG9ydF9tb2R1bGVfYXMoKToKICAgIGZyb20gLiBpbXBvcnQgY2hhdGZsb3dzCgogICAgcmV0dXJuIGNoYXRmbG93cwo8fGZpbV9lbmR8Pg=="]
["85fda1a853e1505815225063e0c560f7db8e9fa7-4","85fda1a853e1505815225063e0c560f7db8e9fa7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IHNoYXBlZmlsZQoKCmNsYXNzIEdlb0o6CiAgICBnZW9tZXRyeVR5cGUgPSAnJwogICAgY29sdW1uc0xpc3QgPSBbXQogICAgX19hdHRyaWJ1dGVzUGVyRiA9IFtdCiAgICBhdHRyaWJ1dGVzID0gW10KICAgIGdlb21ldHJpZXMgPSBbXQoKICAgIHNocEZpbGVPYmogPSBOb25lCgogICAgIyBUaGUgY29uc3RydWN0b3Igd2hpY2ggYmFzaWNhbGx5IG5lZWRzIHRoZSBnZW9KU09OIGZpbGUrcGF0aCBhcyBhbiBhcmd1bWVudAogICAgZGVmIF9faW5pdF9fKHNlbGYsIGdlb0pGaWxlKToKICAgICAgICAjIFRoaXMgdHJ5IHN0YXRlbWVudCBtYWtlcyBzdXJlIHRoYXQgdGhlIGdlb2pzb24gZmlsZSBleGlzdHMgYW5kIGl0IGlzIGluIEpTT04gc3RydWN0dXJlCiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLmdlb0pGaWxlID0gb3BlbihnZW9KRmlsZSkKICAgICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgICAgcHJpbnQoIkVycm9yOiBjYW4gbm90IGZpbmQgZmlsZS4gTWFrZSBzdXJlIHRoZSBmaWxlIG5hbWUgYW5kIHBhdGggYXJlIGNvcnJlY3QiKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHNlbGYuZ2VvSk9iaiA9IGpzb24ubG9hZChzZWxmLmdlb0pGaWxlKQogICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgICAgIHByaW50KCJFcnJvcjogdGhlIGZpbGUgaXMgbm90IGluIEpTT04gc3RydWN0dXJlIikKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICMgSWYgZXZlcnl0aGluZyBpcyBmaW5lLCB0aGUgX19wYXJzZUdlb0ogcHJpdmF0ZSBtZXRob2Qgd2lsbAogICAgICAgICAgICAgICAgIyBjb2xsZWN0IGF0dHJpYnV0ZXMgYW5kIGdlb21ldHJpZXMgZnJvbSB0aGUgZ2VvSlNPTiBmaWxlCiAgICAgICAgICAgICAgICBzZWxmLl9fcGFyc2VHZW9KKCkKCiAgICBkZWYgX19wYXJzZUdlb0ooc2VsZik6CgogICAgICAgIHNlbGYuZ2VvbWV0cnlUeXBlID0gc2VsZi5nZW9KT2JqWydmZWF0dXJlcyddWzBdWydnZW9tZXRyeSddWyd0eXBlJ10KCiAgICAgICAgc2VsZi5jb2x1bW5zTGlzdCA9IHNlbGYuZ2VvSk9ialsnZmVhdHVyZXMnXVswXVsncHJvcGVydGllcyddLmtleXMoKQoKICAgICAgICBmb3IgaSBpbiBzZWxmLmdlb0pPYmpbJ2ZlYXR1cmVzJ106CgogICAgICAgICAgICBpZiBpWydnZW9tZXRyeSddWyd0eXBlJ10gPT0gc2VsZi5nZW9tZXRyeVR5cGU6CiAgICAgICAgICAgICAgICBzZWxmLmdlb21ldHJpZXMuYXBwZW5kKGlbJ2dlb21ldHJ5J11bJ2Nvb3JkaW5hdGVzJ10pCiAgICAgICAgICAgICAgICBzZWxmLmF0dHJpYnV0ZXMuYXBwZW5kKFtzdHIoaVsncHJvcGVydGllcyddW3N0cihqKV0pIGZvciBqIGluIHNlbGYuY29sdW1uc0xpc3RdKQoKICAgICMgVGhpcyBtZXRob2QgYWxvbmcgd2l0aCB0aGUgZm9sbG93aW5nIHByaXZhdGUgbWV0aG9kcyB3aWxsIGNyZWF0ZSBhIHNoYXBlZmlsZQogICAgIyBmcm9tIHRoZSBjb2xsZWN0ZWQgYXR0cmlidXRlcyBhbmQgZ2VvbWV0cmllcyBmcm9tIHRoZSBnZW9KU09OIGZpbGUKICAgIGRlZiB0b19zaGFwZWZpbGUoc2VsZiwgc2F2ZXBhdGgpOgoKICAgICAgICBpZiBzZWxmLmdlb21ldHJ5VHlwZSA9PSAnUG9pbnQnOgogICAgICAgICAgICBzZWxmLl9fY3JlYXRlUG9pbnQoc2F2ZXBhdGgpCiAgICAgICAgZWxpZiBzZWxmLmdlb21ldHJ5VHlwZSA9PSAnTGluZVN0cmluZyc6CiAgICAgICAgICAgIHNlbGYuX19jcmVhdGVMaW5lKHNhdmVwYXRoKQogICAgICAgIGVsaWYgc2VsZi5nZW9tZXRyeVR5cGUgPT0gJ1BvbHlnb24nOgogICAgICAgICAgICBzZWxmLl9fY3JlYXRlUG9seWdvbihzYXZlcGF0aCkKICAgICAgICBlbGlmIHNlbGYuZ2VvbWV0cnlUeXBlID09ICdNdWx0aVBvbHlnb24nOgogICAgICAgICAgICBzZWxmLl9fY3JlYXRlTXVsdGlQb2x5Z29uKHNhdmVwYXRoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50KCdDYW5ub3QgcHJvY2VlZC4gR2VvbWV0cnkgdHlwZSAnICsgc2VsZi5nZW9tZXRyeVR5cGUgKyAnIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBwcm9ncmFtJykKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgICMgQ2FsbGluZyB0aGUgX19jcmVhdGVQcmpGaWxlIG1ldGhvZCB0byBjcmVhdGUgYSAucHJqIGZpbGUKICAgICAgICBzZWxmLl9fY3JlYXRlUHJqRmlsZShzYXZlcGF0aCkKCiAgICAgICAgIyBTYXZpbmcgdGhlIHNoYXBlIGZpbGUsIHdoaWNoIGNyZWF0ZXMgLnNocCwgLnNoeCwgYW5kIC5kYmYgZmlsZXMKICAgICAgICBzZWxmLnNocEZpbGVPYmouY2xvc2UoKQoKICAgICMgVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjcmVhdGUgcG9pbnRzIHNoYXBlZmlsZQogICAgZGVmIF9fY3JlYXRlUG9pbnQoc2VsZiwgc2F2ZXBhdGgpOgoKICAgICAgICBzZWxmLnNocEZpbGVPYmogPSBzaGFwZWZpbGUuV3JpdGVyKHRhcmdldD1zYXZlcGF0aCwgc2hwVHlwZT1zaGFwZWZpbGUuUE9JTlQsIGF1dG9CYWxhbmNlPVRydWUpCiAgICAgICAgc2VsZi5fX2NyZWF0ZUNvbHVtbnMoKQoKICAgICAgICBmb3IgaSBpbiBzZWxmLmdlb21ldHJpZXM6CiAgICAgICAgICAgIHNlbGYuc2hwRmlsZU9iai5wb2ludChpWzBdLCBpWzFdKQoKICAgICAgICBmb3IgaiBpbiBzZWxmLmF0dHJpYnV0ZXM6CiAgICAgICAgICAgIHNlbGYuc2hwRmlsZU9iai5yZWNvcmQoKmopCgogICAgIyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNyZWF0ZSBsaW5lcyBzaGFwZWZpbGUKICAgIGRlZiBfX2NyZWF0ZUxpbmUoc2VsZiwgc2F2ZXBhdGgpOgoKICAgICAgICBzZWxmLnNocEZpbGVPYmogPSBzaGFwZWZpbGUuV3JpdGVyKHRhcmdldD1zYXZlcGF0aCwgc2hwVHlwZT1zaGFwZWZpbGUuUE9MWUxJTkUsIGF1dG9CYWxhbmNlPVRydWUpCiAgICAgICAgc2VsZi5fX2NyZWF0ZUNvbHVtbnMoKQoKICAgICAgICBmb3IgaSBpbiBzZWxmLmdlb21ldHJpZXM6CiAgICAgICAgICAgIHNlbGYuc2hwRmlsZU9iai5saW5lKHBhcnRzPVtpXSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICAgICBmb3IgaiBpbiBzZWxmLmF0dHJpYnV0ZXM6CiAgICAgICAgICAgIHNlbGYuc2hwRmlsZU9iai5yZWNvcmQoKmopCgo8fGZpbV9lbmR8Pg=="]
["c845113aff9a3f2bcdf4444530cbc676c69d29aa-3","c845113aff9a3f2bcdf4444530cbc676c69d29aa","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwoKCmNsYXNzIFVzZXIobW9kZWxzLk1vZGVsKToKICAgIGlkID0gbW9kZWxzLkF1dG9GaWVsZCgnSWRlbnRpZmllcicsIHByaW1hcnlfa2V5PVRydWUpCiAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZCgnTmFtZScsIG1heF9sZW5ndGg9NzApCiAgICBlbWFpbCA9IG1vZGVscy5FbWFpbEZpZWxkKCkKCgpjbGFzcyBGaWxtQ2F0ZWdvcnkobW9kZWxzLk1vZGVsKToKICAgIGlkID0gbW9kZWxzLkF1dG9GaWVsZCgnSWRlbnRpZmllcicsIHByaW1hcnlfa2V5PVRydWUpCiAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZCgnTmFtZScsIG1heF9sZW5ndGg9NzApCiAgICBwYXJlbnRfY2F0ZWdvcnkgPSBtb2RlbHMuRm9yZWlnbktleSgnRmlsbUNhdGVnb3J5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uX2RlbGV0ZT1tb2RlbHMuUFJPVEVDVCkKCgpjbGFzcyBGaWxtKG1vZGVscy5Nb2RlbCk6CiAgICBpZCA9IG1vZGVscy5BdXRvRmllbGQoJ0lkZW50aWZpZXInLCBwcmltYXJ5X2tleT1UcnVlKQogICAgeWVhciA9IG1vZGVscy5JbnRlZ2VyRmllbGQoJ1llYXInKQogICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQoJ05hbWUnLCBtYXhfbGVuZ3RoPTcwKQogICAgdXBsb2FkZWRfYnkgPSBtb2RlbHMuRm9yZWlnbktleShVc2VyLCBvbl9kZWxldGU9bW9kZWxzLlBST1RFQ1QpCiAgICBjYXRlZ29yeSA9IG1vZGVscy5Gb3JlaWduS2V5KEZpbG1DYXRlZ29yeSwgb25fZGVsZXRlPW1vZGVscy5QUk9URUNUKQoKCmNsYXNzIENhdGVnb3J5SGllcmFyY2h5OgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhdGVnb3J5LCBmaWxtcz1Ob25lLCBjYXRlZ29yaWVzPU5vbmUpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5jYXRlZ29yeSA9IGNhdGVnb3J5CiAgICAgICAgaWYgZmlsbXMgaXMgTm9uZToKICAgICAgICAgICAgc2VsZi5maWxtcyA9IFtdCiAgICAgICAgZWxzZToKPHxmaW1fZW5kfD4="]
["abfd05f5aa33fb9e9c68830fbe392e43087973b4-2","abfd05f5aa33fb9e9c68830fbe392e43087973b4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppbXBvcnQgc3lzCgoKZGVmIGpvaW5fYXJyXzExNzI4KCk6Cjx8ZmltX2VuZHw+"]
["fd1b8f531499be54d8d947bcf7ba6d94afa6ac1f-1","fd1b8f531499be54d8d947bcf7ba6d94afa6ac1f","PHxmaW1fcHJlZml4fD4KIwojIENvcHlyaWdodCAoYykgU0FTIEluc3RpdHV0ZSBJbmMuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCgpmcm9tIGNvbmFyeS5saWIgaW1wb3J0IHV0aWwKZnJvbSBjb25hcnkucmVwb3NpdG9yeSBpbXBvcnQgY2FsbGxvZywgY2hhbmdlc2V0LCBmaWxlY29udGVudHMsIG5ldGNsaWVudApmcm9tIGNvbmFyeS5yZXBvc2l0b3J5Lm5ldHJlcG9zIGltcG9ydCBuZXRzZXJ2ZXIKCmltcG9ydCBnemlwCmltcG9ydCBvcwppbXBvcnQgdGVtcGZpbGUKaW1wb3J0IHRpbWUKCiMgdGhpcyByZXR1cm5zIHRoZSBzYW1lIHNlcnZlciBmb3IgYW55IHNlcnZlciBuYW1lIG9yIGxhYmVsCiMgcmVxdWVzdGVkOyBiZWNhdXNlIGEgc2hpbSBjYW4gb25seSByZWZlciB0byBvbmUgc2VydmVyLgpjbGFzcyBGYWtlU2VydmVyQ2FjaGUobmV0Y2xpZW50LlNlcnZlckNhY2hlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXIsIGNmZyk6CiAgICAgICAgc2VsZi5fc2VydmVyID0gc2VydmVyCiAgICAgICAgbmV0Y2xpZW50LlNlcnZlckNhY2hlLl9faW5pdF9fKHNlbGYsIGNmZz1jZmcpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaXRlbSk6CiAgICAgICAgc2VydmVyTmFtZSA9IHNlbGYuX2dldFNlcnZlck5hbWUoaXRlbSkKICAgICAgICAjIHJldHVybiB0aGUgcHJveHkgb2JqZWN0IGZvciBhbnl0aGluZyB0aGF0IG1hdGNoZXMgdGhlCiAgICAgICAgIyBzZXJ2ZXJOYW1lcyBvbiB0aGlzIHJlcG9zaXRvcnkKPHxmaW1fZW5kfD4="]
["c0b65469908cfb3c01139a746df89af52a91a10b-2","c0b65469908cfb3c01139a746df89af52a91a10b","PHxmaW1fcHJlZml4fD4KIiIiUHJvdmlkZXMgYW4gYXZlcmFnZSBwcm9maWxlIG9mIFJJQyBkaWFnbm9zdGljcwoiIiIKaW1wb3J0IG51bXB5IGFzIG5wCgpkZWYgZ2V0X3JpY19hdnJfcHJvZmlsZShyaG9wLCBuZSwgbmVfYm91bmRhcnlfdG9wPU5vbmUsIG5lX2JvdW5kYXJ5X2JvdD1Ob25lLCBudW09MjAsIG5lX21heD1Ob25lLCBuZV9taW49Tm9uZSk6CiAgICAiIiJQcm92aWRlcyBhbiBhdmVyYWdlZCBwcm9maWxlIGZyb20gYSBzZXQgb2YgcHJvZmlsZXMuIFRoZSBzZXQgb2YgcHJvZmlsZXMgaXMgZGV2aWRlZCBpbiAKICAgIGVsZWN0cm9uIGRlbnNpdHkgc3BhY2UgaW4gYmlucywgd2hpdGggZWRnZXMgZGVmaW5lZCBieSAobmVfYm91bmRhcnlfYm90OyBuZV9ib3VuZGFyeV90b3ApLiAKICAgIElmIChuZV9ib3VuZGFyeV9ib3Q7IG5lX2JvdW5kYXJ5X3RvcCkgYXJlIG5vdCBkZWZpbmVkLCB0aGUgYmluIGJvcmRlcnMgYXJlIGVxdWlkaXN0YW50bHkKICAgIHNlcGFyYXRlZCBieSBudW0gZGVuc2l0aWVzIGJldHdlbm4gKG5lX21pbjsgbmVfbWF4KS4gVGhlIG1lZGlhbiByaG8gcG9sb2lkYWwgYW5kIG5lIGFyZSAKICAgIGNhbGN1bGF0ZWQgZnJvbSBkYXRhIHBvaW50cyBpbiBlYWNoIGRlbnNpdHkgYmluLiBUaGUgbWF4aW11bSBhbmQgbWluaW11bSB2YXJpYXRpb25zIG9mIAogICAgcmhvIHBvbG9pZGFsIGluIGVhY2ggYmluIGFyZSBhbHNvIHJlY29yZGVkLiAgICAgCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgcmhvcCA6IG51bXB5IGFycmF5LCBmbG9hdCwKICAgICAgICAyRCBhcnJheSB3aXRoIHJobyBwb2xvaWRhbCBjb29yZGluYXRlIG9mIFJJQwogICAgbmUgOiBudW1weSBhcnJheSwgZmxvYXQsCiAgICAgICAgMkQgYXJyYXkgd2l0aCBkZW5zaXR5IG5lCiAgICBuZV9ib3VuZGFyeV90b3AgOiBudW1weSBhcnJheSwgb3B0aW9uYWwKICAgICAgICAxRCBhcnJheSBkZWZpbmluZyB0aGUgbG93ZXIgZGVuc2l0eSBsaW1pdCBvZiBlYWNoIGJpbiByaG8sIGJ5IGRlZmF1bHQgTm9uZS4KICAgICAgICBIYXMgdG8gYmUgZGVmaW5lZCB0b2dlYXRoZXIgd2l0aCBuZV9ib3VuZGFyeV9ib3QgCiAgICBuZV9ib3VuZGFyeV9ib3QgOiBudW1weSBhcnJheSwgb3B0aW9uYWwKICAgICAgICAxRCBhcnJheSBkZWZpbmluZyB0aGUgbG93ZXIgZGVuc2l0eSBsaW1pdCBvZiBlYWNoIGJpbiByaG8sIGJ5IGRlZmF1bHQgTm9uZS4KICAgICAgICBIYXMgdG8gYmUgZGVmaW5lZCB0b2dlYXRoZXIgd2l0aCBuZV9ib3VuZGFyeV90b3AgCiAgICBudW0gOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgTnVtYmVyIG9mIGRlbnNpdHkgYmlucywgYnkgZGVmYXVsdCAyMAogICAgbmVfbWF4IDogZmxvYXQsIG9wdGlvbmFsCiAgICAgICAgVGhlIHVwcGVyIGVkZ2Ugb2YgdGhlIGRlbnNpdHkgdG8gYmUgYXZlcmFnZWQsIGJ5IGRlZmF1bHQgTm9uZQogICAgbmVfbWluIDogZmxvYXQsIG9wdGlvbmFsCiAgICAgICAgVGhlIGxvd2VyIGVkZ2Ugb2YgdGhlIGRlbnNpdHkgdG8gYmUgYXZlcmFnZWQsIGJ5IGRlZmF1bHQgTm9uZQoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIGF2cl9yaG9wOiBudW1weSBhcnJheSwgZmxvYXQKICAgICAgICBNZWRpYW4gcmhvIHBvbG9pZGFsIGluIGVhY2ggZGVuc2l0eSBiaW4KICAgIGF2cl9uZTogbnVtcHkgYXJyYXksIGZsb2F0CiAgICAgICAgTWVkaWFuIG5lIGluIGVhY2ggZGVuc2l0eSBiaW4KICAgIG1pbl9yaG9wOiBudW1weSBhcnJheSwgZmxvYXQKICAgICAgICBNaW5pbWFsIHJobyBwb2xvaWRhbCBpbiBlYWNoIGRlbnNpdHkgYmluCiAgICBtYXhfcmhvcDogbnVtcHkgYXJyYXksIGZsb2F0CiAgICAgICAgTWF4aW1hbCByaG8gcG9sb2lkYWwgaW4gZWFjaCBkZW5zaXR5IGJpbgo8fGZpbV9ob2xlfD4KICAgICAgICBpZiBuZV9taW4gaXMgTm9uZToKICAgICAgICAgICAgbmVfbWluID0gbnAubWluKG5lKQogICAgICAgIG5lX2Jpbl9sc3QgPSBucC5saW5zcGFjZShuZV9taW4sIG5lX21heCwgbnVtKzEpCiAgICBlbHNlOgogICAgICAgIG5lX2Jpbl9sc3QgPSBucC5zb3J0KG5wLmNvbmNhdGVuYXRlKChuZV9ib3VuZGFyeV90b3AsIG5lX2JvdW5kYXJ5X2JvdCkpKQogICAgYXZyX25lID0gW10KICAgIGF2cl9yaG9wID0gW10KICAgIG1pbl9yaG9wID0gW10KICAgIG1heF9yaG9wID0gW10KICAgIGZvciBpaSwgbm4gaW4gZW51bWVyYXRlKG5lX2Jpbl9sc3RbOi0xXSk6CiAgICAgICAgbmVfcyA9IG5uCiAgICAgICAgbmVfZSA9IG5lX2Jpbl9sc3RbaWkrMV0KICAgICAgICAKICAgICAgICBtYXNrID0gbnAubG9naWNhbF9hbmQobmUgPj0gbmVfcywgbmUgPCBuZV9lKQoKICAgICAgICBhdnJfbmUuYXBwZW5kKG5wLm1lZGlhbihuZVttYXNrXSkpCiAgICAgICAgYXZyX3Job3AuYXBwZW5kKG5wLm1lZGlhbihyaG9wW21hc2tdKSkKICAgICAgICBtaW5fcmhvcC5hcHBlbmQobnAubWluKHJob3BbbWFza10pKSAKICAgICAgICBtYXhfcmhvcC5hcHBlbmQobnAubWF4KHJob3BbbWFza10pKQoKICAgIGF2cl9uZSA9IG5wLmFzYXJyYXkoYXZyX25lKQogICAgYXZyX3Job3AgPSBucC5hc2FycmF5KGF2cl9yaG9wKQogICAgbWluX3Job3AgPSBucC5hc2FycmF5KG1pbl9yaG9wKQogICAgbWF4X3Job3AgPSBucC5hc2FycmF5KG1heF9yaG9wKQoKICAgIHJldHVybiBhdnJfcmhvcCwgYXZyX25lLCBtaW5fcmhvcCwgbWF4X3Job3AKPHxmaW1fc3VmZml4fD4KICAgICIiIgogICAgaWYgbnAubG9naWNhbF9vcihuZV9ib3VuZGFyeV90b3AsIG5lX2JvdW5kYXJ5X2JvdCkgaXMgTm9uZToKICAgICAgICBpZiBuZV9tYXggaXMgTm9uZToKICAgICAgICAgICAgbmVfbWF4ID0gbnAubWF4KG5lKQo8fGZpbV9lbmR8Pg=="]
["9b95420da435810fe6fcc14303946502a6621d3f-3","9b95420da435810fe6fcc14303946502a6621d3f","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KZnJvbSAubW9kZWxzIGltcG9ydCBVc2VyX3RlbCxVc2VyX2luZm8sUHJvcGVydHlfaW5mbyxVc2VyX2xhd19pbmZvLFRleF9pbmZvLFJvb21faW5mbyxHYXJkZW5faW5mbyxQcm9wZXJ0eV9waG90byxFZHVjYXRpb25faW5mbyxQbGFudGluZ19wbGFuLFBsYW50X3R5cGVfZG9jLFBsYW50X3R5cGVfZmFjdAphZG1pbi5zaXRlLnJlZ2lzdGVyKFVzZXJfaW5mbykKYWRtaW4uc2l0ZS5yZWdpc3RlcihVc2VyX3RlbCkKYWRtaW4uc2l0ZS5yZWdpc3RlcihQcm9wZXJ0eV9pbmZvKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmFkbWluLnNpdGUucmVnaXN0ZXIoVXNlcl9sYXdfaW5mbykKYWRtaW4uc2l0ZS5yZWdpc3RlcihSb29tX2luZm8pCmFkbWluLnNpdGUucmVnaXN0ZXIoVGV4X2luZm8pCmFkbWluLnNpdGUucmVnaXN0ZXIoR2FyZGVuX2luZm8pCjx8ZmltX2VuZHw+"]
["9b541fab99b00c5d16318c07707d5a1cda940679-1","9b541fab99b00c5d16318c07707d5a1cda940679","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KJycnCiAgICA6Y29kZWF1dGhvcjogSmF5ZXNoIEthcml5YSA8amF5ZXNoa0BzYWx0c3RhY2suY29tPgonJycKCmltcG9ydCB0ZXh0d3JhcAoKZnJvbSB0ZXN0cy5zdXBwb3J0Lm1peGlucyBpbXBvcnQgTG9hZGVyTW9kdWxlTW9ja01peGluCmZyb20gdGVzdHMuc3VwcG9ydC51bml0IGltcG9ydCBUZXN0Q2FzZSwgc2tpcElmCmZyb20gdGVzdHMuc3VwcG9ydC5tb2NrIGltcG9ydCAoCiAgICBNYWdpY01vY2ssCiAgICBwYXRjaCwKICAgIE5PX01PQ0ssCiAgICBOT19NT0NLX1JFQVNPTgopCgppbXBvcnQgaHViYmxlc3RhY2subW9kdWxlcy5yaF9zZXJ2aWNlIGFzIHJoX3NlcnZpY2UKClJFVCA9IFsnaG9zdG5hbWUnLCAnbW91bnRhbGwnLCAnbmV0d29yay1pbnRlcmZhY2UnLCAnbmV0d29yay1tYW5hZ2VyJywKICAgICAgICdzYWx0LWFwaScsICdzYWx0LW1hc3RlcicsICdzYWx0LW1pbmlvbiddCgoKQHNraXBJZihOT19NT0NLLCBOT19NT0NLX1JFQVNPTikKY2xhc3MgUmhTZXJ2aWNlVGVzdENhc2UoVGVzdENhc2UsIExvYWRlck1vZHVsZU1vY2tNaXhpbik6CiAgICAnJycKICAgIFRlc3QgY2FzZXMgZm9yIGh1YmJsZXN0YWNrLm1vZHVsZXMucmhfc2VydmljZQogICAgJycnCgogICAgZGVmIHNldHVwX2xvYWRlcl9tb2R1bGVzKHNlbGYpOgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHJoX3NlcnZpY2U6IHsKICAgICAgICAgICAgICAgICdfdXBzdGFydF9kaXNhYmxlJzogTm9uZSwKICAgICAgICAgICAgICAgICdfdXBzdGFydF9lbmFibGUnOiBOb25lLAogICAgICAgICAgICAgICAgJ191cHN0YXJ0X2lzX2VuYWJsZWQnOiBOb25lCiAgICAgICAgICAgIH0KICAgICAgICB9Cgo8fGZpbV9ob2xlfD4KICAgICAgICAnJycKICAgICAgICByZXR1cm4gTWFnaWNNb2NrKHJldHVybl92YWx1ZT1bXSkKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgX21fcmV0KCk6CiAgICAgICAgJycnCiAgICAgICAgUmV0dXJuIHZhbHVlIGZvciBSRVQuCiAgICAgICAgJycnCiAgICAgICAgcmV0dXJuIE1hZ2ljTW9jayhyZXR1cm5fdmFsdWU9UkVUKQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBfbV9ib29sKGJvbD1UcnVlKToKICAgICAgICAnJycKICAgICAgICBSZXR1cm4gQm9vbCB2YWx1ZS4KICAgICAgICAnJycKICAgICAgICByZXR1cm4gTWFnaWNNb2NrKHJldHVybl92YWx1ZT1ib2wpCgogICAgZGVmIHRlc3RfX2Noa2NvbmZpZ19pc19lbmFibGVkKHNlbGYpOgogICAgICAgICcnJwogICAgICAgIHRlc3QgX2Noa2NvbmZpZ19pc19lbmFibGVkIGZ1bmN0aW9uCiAgICAgICAgJycnCiAgICAgICAgbmFtZSA9ICdhdGQnCiAgICAgICAgY2hrY29uZmlnX291dCA9IHRleHR3cmFwLmRlZGVudCgnJydcCgogICAgICAgICAgICB7MH0gICAgICAgICAgIDA6b2ZmICAgMTpvZmYgICAyOm9mZiAgIDM6b24gICAgNDpvbiAgICA1Om9uICAgIDY6b2ZmCiAgICAgICAgICAgICcnJy5mb3JtYXQobmFtZSkpCiAgICAgICAgeGluZXRkX291dCA9IHRleHR3cmFwLmRlZGVudCgnJydcCiAgICAgICAgICAgIHhpbmV0ZCBiYXNlZCBzZXJ2aWNlczoKICAgICAgICAgICAgICAgICAgICB7MH0gIG9uCiAgICAgICAgICAgICcnJy5mb3JtYXQobmFtZSkpCgogICAgICAgIHdpdGggcGF0Y2gub2JqZWN0KHJoX3NlcnZpY2UsICdfcnVubGV2ZWwnLCBNYWdpY01vY2socmV0dXJuX3ZhbHVlPTMpKToKICAgICAgICAgICAgbW9ja19ydW4gPSBNYWdpY01vY2socmV0dXJuX3ZhbHVlPXsncmV0Y29kZSc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0ZG91dCc6IGNoa2NvbmZpZ19vdXR9KQogICAgICAgICAgICB3aXRoIHBhdGNoLmRpY3Qocmhfc2VydmljZS5fX21vZHNfXywgeydjbWQucnVuX2FsbCc6IG1vY2tfcnVufSk6CiAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmhfc2VydmljZS5fY2hrY29uZmlnX2lzX2VuYWJsZWQobmFtZSkpCiAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJoX3NlcnZpY2UuX2Noa2NvbmZpZ19pc19lbmFibGVkKG5hbWUsIDIpKQogICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJoX3NlcnZpY2UuX2Noa2NvbmZpZ19pc19lbmFibGVkKG5hbWUsIDMpKQoKICAgICAgICAgICAgbW9ja19ydW4gPSBNYWdpY01vY2socmV0dXJuX3ZhbHVlPXsncmV0Y29kZSc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0ZG91dCc6IHhpbmV0ZF9vdXR9KQogICAgICAgICAgICB3aXRoIHBhdGNoLmRpY3Qocmhfc2VydmljZS5fX21vZHNfXywgeydjbWQucnVuX2FsbCc6IG1vY2tfcnVufSk6CiAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmhfc2VydmljZS5fY2hrY29uZmlnX2lzX2VuYWJsZWQobmFtZSkpCiAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmhfc2VydmljZS5fY2hrY29uZmlnX2lzX2VuYWJsZWQobmFtZSwgMikpCiAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmhfc2VydmljZS5fY2hrY29uZmlnX2lzX2VuYWJsZWQobmFtZSwgMykpCgogICAgZGVmIHRlc3RfZ2V0X2FsbChzZWxmKToKICAgICAgICAnJycKICAgICAgICBUZXN0IGlmIGl0IHJldHVybiBhbGwgaW5zdGFsbGVkIHNlcnZpY2VzLiBVc2UgdGhlIGBgbGltaXRgYAogICAgICAgIHBhcmFtIHRvIHJlc3RyaWN0IHJlc3VsdHMgdG8gc2VydmljZXMgb2YgdGhhdCB0eXBlLgogICAgICAgICcnJwogICAgICAgIHdpdGggcGF0Y2gub2JqZWN0KHJoX3NlcnZpY2UsICdfdXBzdGFydF9zZXJ2aWNlcycsIHNlbGYuX21fcmV0KCkpOgogICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChyaF9zZXJ2aWNlLmdldF9hbGwoJ3Vwc3RhcnQnKSwgUkVUKQoKICAgICAgICB3aXRoIHBhdGNoLm9iamVjdChyaF9zZXJ2aWNlLCAnX3N5c3Zfc2VydmljZXMnLCBzZWxmLl9tX3JldCgpKToKICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwocmhfc2VydmljZS5nZXRfYWxsKCdzeXN2aW5pdCcpLCBSRVQpCgogICAgICAgICAgICB3aXRoIHBhdGNoLm9iamVjdChyaF9zZXJ2aWNlLCAnX3Vwc3RhcnRfc2VydmljZXMnLCBzZWxmLl9tX2xzdCgpKToKICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKHJoX3NlcnZpY2UuZ2V0X2FsbCgpLCBSRVQpCgogICAgZGVmIHRlc3RfYXZhaWxhYmxlKHNlbGYpOgogICAgICAgICcnJwogICAgICAgIFRlc3QgaWYgaXQgcmV0dXJuIFRydWUgaWYgdGhlIG5hbWVkIHNlcnZpY2UgaXMgYXZhaWxhYmxlLgogICAgICAgICcnJwogICAgICAgIHdpdGggcGF0Y2gub2JqZWN0KHJoX3NlcnZpY2UsICdfc2VydmljZV9pc191cHN0YXJ0Jywgc2VsZi5fbV9ib29sKCkpOgogICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmhfc2VydmljZS5hdmFpbGFibGUoJ3NhbHQtYXBpJywgJ3Vwc3RhcnQnKSkKCiAgICAgICAgd2l0aCBwYXRjaC5vYmplY3Qocmhfc2VydmljZSwgJ19zZXJ2aWNlX2lzX3N5c3YnLCBzZWxmLl9tX2Jvb2woKSk6CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyaF9zZXJ2aWNlLmF2YWlsYWJsZSgnc2FsdC1hcGknLCAnc3lzdmluaXQnKSkKCiAgICAgICAgICAgIHdpdGggcGF0Y2gub2JqZWN0KHJoX3NlcnZpY2UsICdfc2VydmljZV9pc191cHN0YXJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbV9ib29sKCkpOgogICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJoX3NlcnZpY2UuYXZhaWxhYmxlKCdzYWx0LWFwaScpKQoKICAgIGRlZiB0ZXN0X3N0YXR1cyhzZWxmKToKICAgICAgICAnJycKICAgICAgICBUZXN0IGlmIGl0IHJldHVybiB0aGUgc3RhdHVzIGZvciBhIHNlcnZpY2UsCiAgICAgICAgcmV0dXJucyBhIGJvb2wgd2hldGhlciB0aGUgc2VydmljZSBpcyBydW5uaW5nLgogICAgICAgICcnJwogICAgICAgIHdpdGggcGF0Y2gub2JqZWN0KHJoX3NlcnZpY2UsICdfc2VydmljZV9pc191cHN0YXJ0Jywgc2VsZi5fbV9ib29sKCkpOgogICAgICAgICAgICBtb2NrX3J1biA9IE1hZ2ljTW9jayhyZXR1cm5fdmFsdWU9J3N0YXJ0L3J1bm5pbmcnKQogICAgICAgICAgICB3aXRoIHBhdGNoLmRpY3Qocmhfc2VydmljZS5fX21vZHNfXywgeydjbWQucnVuJzogbW9ja19ydW59KToKICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyaF9zZXJ2aWNlLnN0YXR1cygnc2FsdC1hcGknKSkKCiAgICAgICAgd2l0aCBwYXRjaC5vYmplY3Qocmhfc2VydmljZSwgJ19zZXJ2aWNlX2lzX3Vwc3RhcnQnLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21fYm9vbChGYWxzZSkpOgogICAgICAgICAgICB3aXRoIHBhdGNoLmRpY3Qocmhfc2VydmljZS5fX21vZHNfXywgeydzdGF0dXMucGlkJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tX2Jvb2woKX0pOgogICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJoX3NlcnZpY2Uuc3RhdHVzKCdzYWx0LWFwaScsIHNpZz1UcnVlKSkKCiAgICAgICAgICAgIG1vY2tfcmV0ID0gTWFnaWNNb2NrKHJldHVybl92YWx1ZT0wKQogICAgICAgICAgICB3aXRoIHBhdGNoLmRpY3Qocmhfc2VydmljZS5fX21vZHNfXywgeydjbWQucmV0Y29kZSc6IG1vY2tfcmV0fSk6CiAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmhfc2VydmljZS5zdGF0dXMoJ3NhbHQtYXBpJykpCgogICAgZGVmIHRlc3RfZW5hYmxlZChzZWxmKToKICAgICAgICAnJycKICAgICAgICBUZXN0IGlmIGl0IGNoZWNrIHRvIHNlZSBpZiB0aGUgbmFtZWQgc2VydmljZSBpcyBlbmFibGVkCiAgICAgICAgdG8gc3RhcnQgb24gYm9vdC4KICAgICAgICAnJycKICAgICAgICBtb2NrX2Jvb2wgPSBNYWdpY01vY2soc2lkZV9lZmZlY3Q9W1RydWUsIEZhbHNlXSkKICAgICAgICB3aXRoIHBhdGNoLm9iamVjdChyaF9zZXJ2aWNlLCAnX3NlcnZpY2VfaXNfdXBzdGFydCcsIG1vY2tfYm9vbCk6CiAgICAgICAgICAgIHdpdGggcGF0Y2gub2JqZWN0KHJoX3NlcnZpY2UsICdfdXBzdGFydF9pc19lbmFibGVkJywgTWFnaWNNb2NrKHJldHVybl92YWx1ZT1GYWxzZSkpOgogICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyaF9zZXJ2aWNlLmVuYWJsZWQoJ3NhbHQtYXBpJykpCgogICAgICAgICAgICB3aXRoIHBhdGNoLm9iamVjdChyaF9zZXJ2aWNlLCAnX3N5c3ZfaXNfZW5hYmxlZCcsIHNlbGYuX21fYm9vbCgpKToKICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyaF9zZXJ2aWNlLmVuYWJsZWQoJ3NhbHQtYXBpJykpCjx8ZmltX3N1ZmZpeHw+CiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgX21fbHN0KCk6CiAgICAgICAgJycnCiAgICAgICAgUmV0dXJuIHZhbHVlIGZvciBbXS4KPHxmaW1fZW5kfD4="]
["c0d97257470f6be7bf12cc6de3cb01c87d076a4c-2","c0d97257470f6be7bf12cc6de3cb01c87d076a4c","PHxmaW1fcHJlZml4fD4KZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgc3RhdHVzCmZyb20gcmVzdF9mcmFtZXdvcmsucmVzcG9uc2UgaW1wb3J0IFJlc3BvbnNlCmZyb20gcmVzdF9mcmFtZXdvcmsudmlld3MgaW1wb3J0IGV4Y2VwdGlvbl9oYW5kbGVyCgoKY2xhc3MgSWxsZWdhbERhdGVFcnJvcihFeGNlcHRpb24pOgogICAgIiIiRXhjZXB0aW9uIHJhaXNlZCBmb3IgZXJyb3JzIGluIHRoZSBpbnB1dCBkYXRlLgoKICAgIEF0dHJpYnV0ZXM6CiAgICAgICAgZGF0ZV9zdHIgLS0gaW5wdXQgZGF0ZSB3aGljaCBjYXVzZWQgdGhlIGVycm9yCiAgICAgICAgbWVzc2FnZSAtLSBleHBsYW5hdGlvbiBvZiB0aGUgZXJyb3IKICAgICIiIgoKICAgIGRlZiBfX2luaXRfXygKICAgICAgICBzZWxmLCBkYXRlX3N0ciwgbWVzc2FnZT0iRGF0ZSBzaG91bGQgYmUgaW4gJyVZLSVtJyBmb3JtYXQgaW4gYWNjZXB0YWJsZSByYW5nZXMiCiAgICApOgogICAgICAgIHNlbGYuZGF0ZV9zdHIgPSBkYXRlX3N0cgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZQogICAgICAgIHN1cGVyKCkuX19pbml0X18oc2VsZi5tZXNzYWdlKQoKPHxmaW1fZW5kfD4="]
["85d91b4f97f50e8fa8639734d30487155bae7cc5-1","85d91b4f97f50e8fa8639734d30487155bae7cc5","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KX19wYWNrYWdlX18gPSAncmhvX2ZhY3RvcicKX192ZXJzaW9uX18gPSAnMS4wLjEnCjx8ZmltX2VuZHw+"]
["85d91b4f97f50e8fa8639734d30487155bae7cc5-3","85d91b4f97f50e8fa8639734d30487155bae7cc5","PHxmaW1fcHJlZml4fD4KX19wYWNrYWdlX18gPSAncmhvX2ZhY3RvcicKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpfX3ZlcnNpb25fXyA9ICcxLjAuMScKPHxmaW1fZW5kfD4="]
["1f569501b495429989d52b1d664f35304626af3c-1","1f569501b495429989d52b1d664f35304626af3c","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiBVVEYtOCAtKi0KCiIiIgogd2VibG9naW4KIGJ5IEFuYXJjaGludG9zaCBAIHhibWNmb3J1bXMKIENvcHlsZWZ0IChHTlUgR1BMIHYzKSAyMDExIG9ud2FyZHMKCiB0aGlzIGV4YW1wbGUgaXMgY29uZmlndXJlZCBmb3IgRmFudGFzdGkuY2MgbG9naW4KIFNlZSBmb3IgdGhlIGZ1bGwgZ3VpZGUgcGxlYXNlIHZpc2l0OgogaHR0cDovL2ZvcnVtLnhibWMub3JnL3Nob3d0aHJlYWQucGhwP3A9NzcyNTk3I3Bvc3Q3NzI1OTcKCgogVVNBR0U6CiBpbiB5b3VyIGRlZmF1bHQucHkgcHV0OgoKIGltcG9ydCB3ZWJsb2dpbgogbG9nZ2VkX2luID0gd2VibG9naW4uZG9Mb2dpbignYS1wYXRoLXRvLXNhdmUtdGhlLWNvb2tpZS10bycsJ3RoZS11c2VybmFtZScsJ3RoZS1wYXNzd29yZCcpCgogbG9nZ2VkX2luIHdpbGwgdGhlbiBiZSBlaXRoZXIgVHJ1ZSBvciBGYWxzZSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbG9naW4gd2FzIHN1Y2Nlc3NmdWwuCiIiIgoKaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQgdXJsbGliLHVybGxpYjIKaW1wb3J0IGNvb2tpZWxpYgoKIyMjIFRFU1RJTkcgU0VUVElOR1MgKHdpbGwgb25seSBiZSB1c2VkIHdoZW4gcnVubmluZyB0aGlzIGZpbGUgaW5kZXBlbmRlbnQgb2YgeW91ciBhZGRvbikKIyBSZW1lbWJlciB0byBjbGVhciB0aGVzZSBhZnRlciB5b3UgYXJlIGZpbmlzaGVkIHRlc3RpbmcsCiMgc28gdGhhdCB5b3VyIHNlbnNpdGl2ZSBkZXRhaWxzIGFyZSBub3QgaW4geW91ciBzb3VyY2UgY29kZS4KIyBUaGVzZSBhcmUgb25seSB1c2VkIGluIHRoZTogIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyIgICB0aGluZyBhdCB0aGUgYm90dG9tIG9mIHRoaXMgc2NyaXB0LgpteXVzZXJuYW1lID0gJ2lwdHZ0ZXN0JwpteXBhc3N3b3JkID0gJ2lwdHZ0ZXN0Jwojbm90ZSwgdGhlIGNvb2tpZSB3aWxsIGJlIHNhdmVkIHRvIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB3ZWJsb2dpbi5weSB3aGVuIHRlc3RpbmcKCgpkZWYgY2hlY2tfbG9naW4oc291cmNlLHVzZXJuYW1lKToKICAgIAogICAgI3RoZSBzdHJpbmcgeW91IHdpbGwgdXNlIHRvIGNoZWNrIGlmIHRoZSBsb2dpbiBpcyBzdWNjZXNzZnVsLgogICAgI3lvdSBtYXkgd2FudCB0byBzZXQgaXQgdG86ICAgIHVzZXJuYW1lICAgICAobm8gcXVvdGVzKQogICAgbG9nZ2VkX2luX3N0cmluZyA9ICdIZWxsbycKCiAgICAjc2VhcmNoIGZvciB0aGUgc3RyaW5nIGluIHRoZSBodG1sLCB3aXRob3V0IGNhcmluZyBhYm91dCB1cHBlciBvciBsb3dlciBjYXNlCiAgICBpZiByZS5zZWFyY2gobG9nZ2VkX2luX3N0cmluZyxzb3VyY2UscmUuSUdOT1JFQ0FTRSk6CiAgICAgICAgcmV0dXJuIFRydWUKICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIEZhbHNlCgoKZGVmIGRvTG9naW4oY29va2llcGF0aCwgdXNlcm5hbWUsIHBhc3N3b3JkKToKCiAgICAjY2hlY2sgaWYgdXNlciBoYXMgc3VwcGxpZWQgb25seSBhIGZvbGRlciBwYXRoLCBvciBhIGZ1bGwgcGF0aAogICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGNvb2tpZXBhdGgpOgogICAgICAgICNpZiB0aGUgdXNlciBzdXBwbGllZCBvbmx5IGEgZm9sZGVyIHBhdGgsIGFwcGVuZCBvbiB0byB0aGUgZW5kIG9mIHRoZSBwYXRoIGEgZmlsZW5hbWUuCiAgICAgICAgY29va2llcGF0aCA9IG9zLnBhdGguam9pbihjb29raWVwYXRoLCdjb29raWVzLmx3cCcpCiAgICAgICAgCiAgICAjZGVsZXRlIGFueSBvbGQgdmVyc2lvbiBvZiB0aGUgY29va2llIGZpbGUKICAgIHRyeToKICAgICAgICBvcy5yZW1vdmUoY29va2llcGF0aCkKICAgIGV4Y2VwdDoKICAgICAgICBwYXNzCgogICAgaWYgdXNlcm5hbWUgYW5kIHBhc3N3b3JkOgoKICAgICAgICAjdGhlIHVybCB5b3Ugd2lsbCByZXF1ZXN0IHRvLgogICAgICAgIGxvZ2luX3VybCA9ICdodHRwOi8vbWVkaW5hcGxheS5jb20vd3AtbG9naW4ucGhwJwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgICN0aGUgaGVhZGVyIHVzZWQgdG8gcHJldGVuZCB5b3UgYXJlIGEgYnJvd3NlcgogICAgICAgIGhlYWRlcl9zdHJpbmcgPSAnTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyBlbi1HQjsgcnY6MS45LjAuMykgR2Vja28vMjAwODA5MjQxNyBGaXJlZm94LzMuMC4zJwoKPHxmaW1fZW5kfD4="]
["2f13bbbb7f81480b147d26bb080f7bee5cdfbd0f-1","2f13bbbb7f81480b147d26bb080f7bee5cdfbd0f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCmZyb20gcnJjX2V4YW1wbGVfcGFja2FnZS5oZXIucmxfbW9kdWxlcy5tb2RlbHMgaW1wb3J0IER5bmFtaWNzTW9kZWwsIGFjdG9yIGFzIGRkcGdfYWN0b3IsIGNyaXRpYyBhcyBkZHBnX2NyaXRpYwpmcm9tIHJyY19leGFtcGxlX3BhY2thZ2UuaGVyLmFyZ3VtZW50cyBpbXBvcnQgZ2V0X2FyZ3MKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppbXBvcnQgZ3ltCmltcG9ydCBudW1weSBhcyBucAoKZnJvbSBycmNfZXhhbXBsZV9wYWNrYWdlIGltcG9ydCByZWFycmFuZ2VfZGljZV9lbnYKPHxmaW1fZW5kfD4="]
["8d0c51ac62eb77c80188b3411df8420926f07409-3","8d0c51ac62eb77c80188b3411df8420926f07409","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KI0NhbWVyb24gQ2hyb21pYWsKIzExLTUKI1Rha2VzIHN0aW5nIGlucHV0IHRoZW4gcmVwcmVudHMgMiBsZXR0ZXJzIGF0IGEgdGltZS4geWEga25vdywgZm9yIGZ1bi4KCjx8ZmltX2VuZHw+"]
["a561535beb783462db3bc4ef972d1f6e15ef3809-3","a561535beb783462db3bc4ef972d1f6e15ef3809","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDEuMTEgb24gMjAxNy0wNy0yMCAwNTo0Mwpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmNsYXNzIE1pZ3JhdGlvbihtaWdyYXRpb25zLk1pZ3JhdGlvbik6CgogICAgZGVwZW5kZW5jaWVzID0gWwo8fGZpbV9lbmR8Pg=="]
["9b6332f936ea79416f58d41ecc91f51c9cce1586-1","9b6332f936ea79416f58d41ecc91f51c9cce1586",{"$cut":{"chars":31796,"head":"PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAxNSBPcGVuU3RhY2sgRm91bmRhdGlvbgojIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiMKIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQojICAgIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluCiMgICAgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKIyAgICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKIyAgICBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwojICAgIHVuZGVyIHRoZSBMaWNlbnNlLgoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCBvcwppbXBvcnQgcmUKaW1wb3J0IHN1YnByb2Nlc3MKaW1wb3J0IHRpbWUKaW1wb3J0IHRyYWNlYmFjawoKaW1wb3J0IG5ldF9yZXNvdXJjZXMKCmZyb20gdGVtcGVzdC5jb21tb24udXRpbHMubGludXggaW1wb3J0IHJlbW90ZV9jbGllbnQKZnJvbSB0ZW1wZXN0LmNvbW1vbiBpbXBvcnQgd2FpdGVycwpmcm9tIHRlbXBlc3QgaW1wb3J0IGNvbmZpZwpmcm9tIHRlbXBlc3Quc2NlbmFyaW8gaW1wb3J0IG1hbmFnZXIKZnJvbSB0ZW1wZXN0IGltcG9ydCB0ZXN0CgppbXBvcnQgbmV0YWRkcgpmcm9tIHRlbXBlc3RfbGliLmNvbW1vbi51dGlscyBpbXBvcnQgZGF0YV91dGlscwpmcm9tIHRlbXBlc3RfbGliIGltcG9ydCBleGNlcHRpb25zCgpDT05GID0gY29uZmlnLkNPTkYKTE9HID0gbWFuYWdlci5sb2cuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKRmxvYXRpbmdfSVBfdHVwbGUgPSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKAogICAgJ0Zsb2F0aW5nX0lQX3R1cGxlJywgWydmbG9hdGluZ19pcCcsICdzZXJ2ZXInXSkKCiMgQmVmb3JlIGNoZWNraW5nIGZvciBmbG9hdGluZ0lQIGFuZCBzZXJ2ZXIgY29ubmVjdGl2aXR5LCB3ZSBuZWVkIHRvIHdhaXQKIyB4IHNlY29uZHMgZm9yIHRoZSBjb250cm9sLXBsYW5lIHRvIHB1c2ggY29uZmlndXJhdGlvbiB0byBkYXRhLXBsYW5lCiMgcHJpb3IgdG8gcHJvY2VzcyBhZGQvdXBkYXRlL2RlbGV0ZSByZXF1ZXN0cy4KV0FJVFRJTUVfQUZURVJfRElTQVNTT0NfRkxPQVRJTkdJUCA9IENPTkYuc2NlbmFyaW8ud2FpdGZvcl9kaXNhc3NvYwpXQUlUVElNRV9BRlRFUl9BU1NPQ19GTE9BVElOR0lQID0gQ09ORi5zY2VuYXJpby53YWl0Zm9yX2Fzc29jCldBSVRUSU1FX0ZPUl9DT05ORUNUSVZJVFkgPSBDT05GLnNjZW5hcmlvLndhaXRmb3JfY29ubmVjdGl2aXR5CkROU19TRVJWRVJTX0lQVjQgPSBDT05GLm5ldHdvcmsuZG5zX3NlcnZlcnMKT1VUU0lERV9XT1JMRF9TRVJWRVJTID0gQ09ORi5zY2VuYXJpby5vdXRzaWRlX3dvcmxkX3NlcnZlcnMKIyBpcHR5cGUKSVBUWVBFX0ZMT0FUSU5HID0gJ2Zsb2F0aW5nLWlwJwpJUFRZUEVfRklYRUQgPSAnZml4ZWQtaXAnCklQVFlQRV9PVVRTSURFX1NFUlZFUiA9ICdvdXRzaWRlLXNlcnZlcicKCgpjbGFzcyBUb3BvRGVwbG95U2NlbmFyaW9NYW5hZ2VyKG1hbmFnZXIuTmV0d29ya1NjZW5hcmlvVGVzdCk6CiAgICAiIiJQdXJwb3NlcyBmb3IgVG9wb0RlcGxveVNjZW5hcmlvbk1hbmFnZXI6CgogICAgICAgIDEuIEVhY2ggZGVwbG95bWVudCBzY2VuYXJpb24gY3JlYXRlIGl0cyBuZXR3b3JrIHJlc291cmNlcywgc28KICAgICAgICAgICBjYWxsIHNldF9uZXR3b3JrX3Jlc291cmNlIGF0IHNldHVwX2NyZWRlbnRpYWxzKCkgdG8gb3ZlcndyaXRlIGl0LgogICAgICAgIDIuIHNldFVwKCkgaXMgZm9yIHRlc3QgZnJhbWV3b3JrLiBUZXN0IGNhc2UgdG9wb2xvZ3kgaXMgcGFydCBvZgogICAgICAgICAgIHRlc3QgYW5kIGlzIGNvbmZpZ3VyZWQgZHVyaW5nIHRlc3QoKSBjeWNsZS4KICAgICAgICAzLiBuZXRfcmVzb3VyY2VzLnB5IG92ZXJ3cml0ZSByZXNvdXJzZXMucHkgc28gdGhlIG1ldGhvZCB0byBhZGQKICAgICAgICAgICBpbnRlcmZhY2VzIHRvIHJvdXRlcnMgYXJlIGlubGluZSB3aXRoIENMSSwgYW5kIHN1cHBvcnQgcm91dGVyCiAgICAgICAgICAgb3duZWQgYnkgYWRtaW4sIGJ1dCBzdWJuZXRzIGFyZSBwcmltYXJ5L2FsdCBjbGllbnRzLgogICAgICAgIDQuIFBpbmcgaXMgdXNlZCBmb3IgRGF0YS1wbGFuZSB0ZXN0aW5nLiBPVVRTSURFX1dPUkxEX1NFUlZFUlMgcGluZwogICAgICAgICAgIHRlc3QgbWFrZSBzZW5zZSB3aGVuIHRlbmFudCdzIEROUyBpcyBwaXJ2YXRlIHRvIHByb3ZpZGVyLgogICAgICAgIDUuIFRlYXJkb3duIGlzIGhpZ2ggY29zdCwgZWFjaCB0ZXN0IHNob3VsZCBwZXJmb3JtIGl0cyB1bi1jb25maWcgdG8KICAgICAgICAgICBjb21wbGV0ZSB0aGUgd2hvbGUgdGVuYW50IGxpZmUtY3ljbGUuCiAgICAgICAgV0FSTklORzogeW91IG5lZWQgdG8gaW5jcmVhc2UgeW91ciBxdW90YSB0byBydW4gaW4gcGFyYWxsZWwgYXMKICAgICAgICB5b3UgbWlnaHQgcnVuIG91dCBvZiBxdW90YSB3aGVuIHRoaW5ncyB3ZW50IHdyb25nLgogICAgIiIiCgogICAgIyBkZWZpbmVkIGF0IHRlc3QucHk7IHVzZWQgdG8gY3JlYXRlIGNsaWVudCBtYW5hZ2VycwogICAgY3JlZGVudGlhbHMgPSBbJ2FkbWluJywgJ3ByaW1hcnknLCAnYWx0J10KICAgICMgcm91dGVyIGF0dHJpYnV0ZXMgdXNlZCB0byBjcmVhdGUgdGhlIHRlbmFudCdzIHJvdXRlcgogICAgdGVuYW50X3JvdXRlcl9hdHRycyA9IHt9CgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgc2tpcF9jaGVja3MoY2xzKToKICAgICAgICBzdXBlcihUb3BvRGVwbG95U2NlbmFyaW9NYW5hZ2VyLCBjbHMp"}}]
["ddca1f41c7fc69d09de0dfc194ced0a421596d56-2","ddca1f41c7fc69d09de0dfc194ced0a421596d56","PHxmaW1fcHJlZml4fD4KdHJ5OgogICAgZnJvbSBuZW9waXhlbCBpbXBvcnQgQ29sb3IKZXhjZXB0IEltcG9ydEVycm9yOgogICAgZnJvbSBkZWJ1Z0NvbG9yIGltcG9ydCBDb2xvcgppbXBvcnQganNvbgpmcm9tIHRpbWUgaW1wb3J0IHNsZWVwLCB0aW1lCmltcG9ydCB0aHJlYWRpbmcKCmNsYXNzIFRpbWVyVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgIiIiIHZpc3VhbCB0aW1lciAiIiIKICAgICIiIiBleHBlY3RlZCBhcmdzOgogICAgewogICAgICAgICJtaW51dGVzIjogaW50LAogICAgICAgICJzZWNvbmRzIjogaW50CiAgICB9CiAgICAiIiIKICAgIHBfaWRlbnRpZmllciA9ICd0aW1lcicKICAgIHBfbmFtZSA9ICdUaW1lcicKICAgIHBfYXV0aG9yID0gJ29jdDBmMXNoJwogICAgcF9leHBlY3RlZF9hcmdzID0geydtaW51dGVzJzogJ2ludCcsICdzZWNvbmRzJzogJ2ludCd9CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGxlZF9zdHJpcCwganNvbl9hcmdzKToKICAgICAgICBzdXBlcihUaW1lclRocmVhZCwgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYuc2hvdWxkX3N0b3AgPSBGYWxzZQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYubWludXRlcyA9IGludChqc29uX2FyZ3NbJ21pbnV0ZXMnXSkKICAgICAgICAgICAgc2VsZi5zZWNvbmRzID0gaW50KGpzb25fYXJnc1snc2Vjb25kcyddKQogICAgICAgIGV4Y2VwdCAoS2V5RXJyb3IsIFZhbHVlRXJyb3IpIGFzIGVycjoKICAgICAgICAgICAgcHJpbnQoJ1RpbWVyVGhyZWFkIC0gSU5WQUxJRCBNSU5VVEVTL1NFQ09ORFMgQVJHVU1FTlRTJykKICAgICAgICAgICAgcmFpc2UKCiAgICAgICAgc2VsZi5sZWRfc3RyaXAgPSBsZWRfc3RyaXAKCiAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgIHNlbGYubGVkX3N0cmlwLndpcGVfc3RyaXAoQ29sb3IoMCwgMjU1LCAwKSkKCiAgICAgICAgb2ZmID0gQ29sb3IoMCwgMCwgMCkKCiAgICAgICAgcGl4ZWxzID0gc2VsZi5sZWRfc3RyaXAubnVtX3BpeGVscwoKICAgICAgICB0b3RhbF9zZWNvbmRzID0gKHNlbGYubWludXRlcyAqIDYwKSArIHNlbGYuc2Vjb25kcwogICAgICAgIHByaW50KCdUT1RBTCBTRUNPTkRTOiB7fScuZm9ybWF0KHRvdGFsX3NlY29uZHMpKQoKICAgICAgICBsZWRzX29mZiA9IDAKCiAgICAgICAgdGltZV9iZXR3ZWVuX2xlZHMgPSBmbG9hdCh0b3RhbF9zZWNvbmRzKSAvIGZsb2F0KHBpeGVscykKICAgICAgICByZWNfdGltZSA9IHRpbWUoKQoKICAgICAgICAjIHRpbWUgbWVhc3VyZW1lbnQgdGVzdCBzdHVmZgogICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lKCkKICAgICAgICB0b3RhbF9pbmFjY3VyYWN5ID0gMC4wCiAgICAgICAgIyMjIwoKICAgICAgICB3aGlsZSBub3Qgc2VsZi5zaG91bGRfc3RvcDoKICAgICAgICAgICAgaWYgKHRpbWUoKSAtIHJlY190aW1lKSA+PSB0aW1lX2JldHdlZW5fbGVkczoKICAgICAgICAgICAgICAgIG92ZXJsYXAgPSAodGltZSgpIC0gcmVjX3RpbWUpIC0gdGltZV9iZXR3ZWVuX2xlZHMKCiAgICAgICAgICAgICAgICB0b3RhbF9pbmFjY3VyYWN5ICs9IGZsb2F0KG92ZXJsYXApCgo8fGZpbV9ob2xlfD4KCiAgICAgICAgICAgICAgICBpZiBsZWRzX29mZiA9PSBwaXhlbHM6CiAgICAgICAgICAgICAgICAgICAgcHJpbnQodG90YWxfaW5hY2N1cmFjeSkKICAgICAgICAgICAgICAgICAgICBwcmludCgnVElNRSBFTEFQU0VEOiB7Oi40Zn0gc2Vjb25kcywgSU5BQ0NVUkFDWTogezouNGZ9IHNlY29uZHMnLmZvcm1hdChmbG9hdCh0aW1lKCkgLSBzdGFydF90aW1lKSwgZmxvYXQodG90YWxfaW5hY2N1cmFjeSkpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIGxlZHNfb2ZmICs9IDEKCiAgICAgICAgc2VsZi5sZWRfc3RyaXAud2lwZV9zdHJpcChDb2xvcigyNTUsIDAsIDApKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgcmVjX3RpbWUgPSB0aW1lKCkgLSBvdmVybGFwCgogICAgICAgICAgICAgICAgc2VsZi5sZWRfc3RyaXAuc3RyaXAuc2V0UGl4ZWxDb2xvcigocGl4ZWxzIC0gbGVkc19vZmYpLCBvZmYpCiAgICAgICAgICAgICAgICBzZWxmLmxlZF9zdHJpcC5zdHJpcC5zaG93KCkKPHxmaW1fZW5kfD4="]
["2f8d6a881d98ec351bf09e019e3bd3fbd8da547e-2","2f8d6a881d98ec351bf09e019e3bd3fbd8da547e","PHxmaW1fcHJlZml4fD4KZnJvbSBtb25nb2VuZ2luZSBpbXBvcnQgRG9jdW1lbnQsIFN0cmluZ0ZpZWxkLCBMaXN0RmllbGQKZnJvbSBtb25nb2VuZ2luZS5maWVsZHMgaW1wb3J0IERhdGVUaW1lRmllbGQKaW1wb3J0IGRhdGV0aW1lCgoKY2xhc3MgQXBpU3BlY2lmaWNhdGlvbihEb2N1bWVudCk6CiAgICBzZXJ2ZXJfdXJsID0gU3RyaW5nRmllbGQocmVxdWlyZWQ9VHJ1ZSwgbWluX2xlbmd0aD0zKQogICAgdGl0bGUgPSBTdHJpbmdGaWVsZChyZXF1aXJlZD1GYWxzZSkKICAgIHZlcnNpb24gPSBTdHJpbmdGaWVsZChyZXF1aXJlZD1GYWxzZSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgY29uc3VtZXMgPSBMaXN0RmllbGQoZmllbGQ9U3RyaW5nRmllbGQocmVxdWlyZWQ9RmFsc2UpLCByZXF1aXJlZD1GYWxzZSkKICAgIHByb2R1Y2VzID0gTGlzdEZpZWxkKGZpZWxkPVN0cmluZ0ZpZWxkKHJlcXVpcmVkPUZhbHNlKSwgcmVxdWlyZWQ9RmFsc2UpCiAgICBvcGVyYXRpb25zID0gTGlzdEZpZWxkKGZpZWxkPVN0cmluZ0ZpZWxkKHJlcXVpcmVkPUZhbHNlKSwgcmVxdWlyZWQ9RmFsc2UpCiAgICBjcmVhdGVkX2F0ID0gRGF0ZVRpbWVGaWVsZChkZWZhdWx0PWRhdGV0aW1lLmRhdGV0aW1lLnV0Y25vdygpKQo8fGZpbV9lbmR8Pg=="]
["23b0568b07a9763f954913027ae8521e0b73b789-2","23b0568b07a9763f954913027ae8521e0b73b789","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMC4yIG9uIDIwMjAtMDEtMDYgMTM6NTEKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKaW1wb3J0IGRqYW5nby5kYi5tb2RlbHMuZGVsZXRpb24KCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ2Jvb3RfcnVsZXMnLCAnMDAwMV9pbml0aWFsJyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J2NvbW1lbnQnLAogICAgICAgICAgICBuYW1lPSdwb3N0JywKICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkZvcmVpZ25LZXkob25fZGVsZXRlPWRqYW5nby5kYi5tb2RlbHMuZGVsZXRpb24uQ0FTQ0FERSwgdG89J2Jvb3RfcnVsZXMuUG9zdCcpLAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgZmllbGQ9bW9kZWxzLk1hbnlUb01hbnlGaWVsZChyZWxhdGVkX25hbWU9J3Bvc3RzJywgdG89J2Jvb3RfcnVsZXMuQ2F0ZWdvcnknKSwKICAgICAgICApLAogICAgXQo8fGZpbV9zdWZmaXh8PgogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdwb3N0JywKICAgICAgICAgICAgbmFtZT0nY2F0ZWdvcmllcycsCjx8ZmltX2VuZHw+"]
["23a51d97acd68fad16beecf85187a2f35c73dd03-4","23a51d97acd68fad16beecf85187a2f35c73dd03","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJhbmRvbQpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCmltcG9ydCBqb2JsaWIKZnJvbSBmaW5uYV9jbGllbnQgaW1wb3J0IEZpbm5hQ2xpZW50Cjx8ZmltX2hvbGV8PgptZW1vcnkgPSBqb2JsaWIuTWVtb3J5KCcuL2NhY2hlJywgdmVyYm9zZT0wKQoKCkBtZW1vcnkuY2FjaGUoaWdub3JlPVsnY2xpZW50J10pCmRlZiBmaW5uYV9zZWFyY2goeWVhciwgY2xpZW50KToKICAgIHNlYXJjaCA9IGxhbWJkYSBwYWdlLCBuOiBjbGllbnQuc2VhcmNoKCcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzPVsnaWQnLCAnc3ViamVjdHMnLCAnaW1hZ2VzJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzPVsnZm9ybWF0OjAvSW1hZ2UvJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmxpbmVfYm9vbGVhbjoxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZWFyY2hfZGF0ZXJhbmdlX212OiJbe30gVE8ge31dIicuZm9ybWF0KHllYXIsIHllYXIpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyPXsnc2VhcmNoX2RhdGVyYW5nZV9tdl90eXBlJzond2l0aGluJ30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlPXBhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdD1uKQogICAgbl9pbWFnZXMgPSBzZWFyY2goMSwwKVsncmVzdWx0Q291bnQnXQoKICAgIHJlcyA9IFtdCiAgICBmb3IgaSBpbiByYW5nZShjZWlsKG5faW1hZ2VzLzEwMCkpOgogICAgICAgIHJlY29yZHMgPSBzZWFyY2goaSsxLCAxMDApWydyZWNvcmRzJ10KCiAgICAgICAgaWRzID0gW3hbJ2lkJ10gZm9yIHggaW4gcmVjb3Jkc10KICAgICAgICBzdWJqZWN0cyA9IFt4WydzdWJqZWN0cyddWzBdWzBdIGlmIGxlbih4WydzdWJqZWN0cyddKSA+IDAgZWxzZSBbXSBmb3IgeCBpbiByZWNvcmRzXQogICAgICAgIHVybHMgPSBbeFsnaW1hZ2VzJ11bMF0ucmVwbGFjZSgnJmluZGV4PTAmc2l6ZT1sYXJnZScsJycpIGlmIGxlbih4WydpbWFnZXMnXSkgPiAwIGVsc2UgW10gZm9yIHggaW4gcmVjb3Jkc10KCiAgICAgICAgcmVzICs9IFtJbWFnZVJlY29yZChpZF8sIHN1YmosIHVybCkgZm9yIGlkXywgc3ViaiwgdXJsIGluIHppcChpZHMsIHN1YmplY3RzLCB1cmxzKQogICAgICAgICAgICAgICAgaWYgc3ViaiAhPSBbXSBhbmQgdXJsICE9IFtdXQoKICAgIHJldHVybiByZXMKICAgIAoKY2xhc3MgRmlubmFJbWFnZUZpbmRlcjoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmNsaWVudCA9IEZpbm5hQ2xpZW50KCkgICAgICAgIAogICAgCiAgICBkZWYgX19jYWxsX18oc2VsZiwgeWVhciwgbj01MCk6CiAgICAgICAgcmVzID0gZmlubmFfc2VhcmNoKHllYXIsIHNlbGYuY2xpZW50KQogICAgICAgIHJhbmRvbS5zZWVkKDQyKQogICAgICAgIHJldHVybiByYW5kb20uc2FtcGxlKHJlcywgaz1uKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBmaW5kZXIgPSBGaW5uYUltYWdlRmluZGVyKCkKICAgIHByaW50KGZpbmRlcigxOTAwKSkKCiAgICBwcmludChsZW4oZmlubmFfc2VhcmNoKDE5MDAsIGZpbmRlci5jbGllbnQpKSkKPHxmaW1fc3VmZml4fD4KZnJvbSBtYXRoIGltcG9ydCBjZWlsCgpJbWFnZVJlY29yZCA9IG5hbWVkdHVwbGUoJ0ltYWdlUmVjb3JkJywgWydpZCcsICdzdWJqZWN0JywgJ3VybCddKQoKPHxmaW1fZW5kfD4="]
["c0a6674799038682adefca6c3d127a1575857e8b-1","c0a6674799038682adefca6c3d127a1575857e8b","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IENvbnRhaW5lciwgRGljdCwgVHlwZSwgY2FzdAoKaW1wb3J0IG9ybWFyCmltcG9ydCBzcWxhbGNoZW15CmZyb20gZGF0YWJhc2VzIGltcG9ydCBEYXRhYmFzZQpmcm9tIG9ybWFyIGltcG9ydCBGb3JlaWduS2V5RmllbGQsIE1vZGVsCmZyb20gcHlkYW50aWMudHlwaW5nIGltcG9ydCBGb3J3YXJkUmVmCmZyb20gc3FsYWxjaGVteSBpbXBvcnQgTWV0YURhdGEsIFRhYmxlCmZyb20gc3FsYWxjaGVteS5pbnNwZWN0aW9uIGltcG9ydCBpbnNwZWN0CmZyb20gc3FsYWxjaGVteS5vcm0gaW1wb3J0IE1hcHBlcgoKZnJvbSBzcWxhbGNoZW15X3RvX29ybWFyLm1hcHMgaW1wb3J0ICgKICAgIENPTU1PTl9QQVJBTUVURVJTLAogICAgQ1VSUkVOVExZX1BST0NFU1NFRCwKICAgIEZJRUxEX01BUCwKICAgIFBBUlNFRF9NT0RFTFMsCiAgICBUWVBFX1NQRUNJRklDX1BBUkFNRVRFUlMsCikKCgpkZWYgc3FsYWxjaGVteV90b19vcm1hcigKICAgIGRiX21vZGVsOiBUeXBlLAogICAgKiwKICAgIG1ldGFkYXRhOiBNZXRhRGF0YSwKICAgIGRhdGFiYXNlOiBEYXRhYmFzZSwKICAgIGV4Y2x1ZGU6IENvbnRhaW5lcltzdHJdID0gTm9uZSwKICAgIHJldmVyc2U6IGJvb2wgPSBGYWxzZSwKKSAtPiBUeXBlW01vZGVsXToKICAgIGlmIGRiX21vZGVsIGluIFBBUlNFRF9NT0RFTFM6CiAgICAgICAgcmV0dXJuIFBBUlNFRF9NT0RFTFNbZGJfbW9kZWxdCgogICAgQ1VSUkVOVExZX1BST0NFU1NFRC5hZGQoZGJfbW9kZWwpCgogICAgZXhjbHVkZSA9IGV4Y2x1ZGUgb3IgW10KICAgIG1hcHBlciA9IGluc3BlY3QoZGJfbW9kZWwpCiAgICB0YWJsZSA9IG1hcHBlci50YWJsZXNbMF0KICAgIGZpZWxkczogRGljdFtzdHIsIERpY3RdID0ge30KICAgIGZpZWxkcyA9IF9leHRyYWN0X2RiX2NvbHVtbnModGFibGU9dGFibGUsIGV4Y2x1ZGU9ZXhjbHVkZSwgZmllbGRzPWZpZWxkcykKICAgIGZpZWxkcyA9IF9leHRyYWN0X3JlbGF0aW9ucygKICAgICAgICBtYXBwZXI9bWFwcGVyLAogICAgICAgIGZpZWxkcz1maWVsZHMsCiAgICAgICAgcmV2ZXJzZT1yZXZlcnNlLAogICAgICAgIG1ldGFkYXRhPW1ldGFkYXRhLAogICAgICAgIGRhdGFiYXNlPWRhdGFiYXNlLAogICAgICAgIGRiX21vZGVsPWRiX21vZGVsLAogICAgKQogICAgTWV0YSA9IF9idWlsZF9tb2RlbF9tZXRhKHRhYmxlPXRhYmxlLCBtZXRhZGF0YT1tZXRhZGF0YSwgZGF0YWJhc2U9ZGF0YWJhc2UpCgogICAgcmVhZHlfZmllbGRzID0gewogICAgICAgIGs6IHYuZ2V0KCJ0eXBlIikoKip7ejogeCBmb3IgeiwgeCBpbiB2Lml0ZW1zKCkgaWYgeiAhPSAidHlwZSJ9KSAgIyB0eXBlOiBpZ25vcmUKICAgICAgICBmb3IgaywgdiBpbiBmaWVsZHMuaXRlbXMoKQogICAgfQogICAgbW9kZWwgPSB0eXBlKGYie2RiX21vZGVsLl9fbmFtZV9ffSIsIChvcm1hci5Nb2RlbCwpLCB7Ik1ldGEiOiBNZXRhLCAqKnJlYWR5X2ZpZWxkc30pCiAgICBtb2RlbCA9IGNhc3QoVHlwZVtNb2RlbF0sIG1vZGVsKQogICAgcHJpbnQoZiJhZGRpbmcgbW9kZWwge21vZGVsfSIpCiAgICBQQVJTRURfTU9ERUxTW2RiX21vZGVsXSA9IG1vZGVsCiAgICBDVVJSRU5UTFlfUFJPQ0VTU0VELnJlbW92ZShkYl9tb2RlbCkKICAgIF91cGRhdGVfcmVmc19pbl9yZWxhdGVkKG1vZGVsKQogICAgcmV0dXJuIG1vZGVsCgoKZGVmIF91cGRhdGVfcmVmc19pbl9yZWxhdGVkKG1vZGVsOiBUeXBlW01vZGVsXSk6CiAgICBmaWVsZHNfZGljdCA9IGxpc3QobW9kZWwuTWV0YS5tb2RlbF9maWVsZHMuaXRlbXMoKSkKICAgIGZvciBuYW1lLCBmaWVsZCBpbiBmaWVsZHNfZGljdDoKICAgICAgICBpZiBmaWVsZC5pc19yZWxhdGlvbjoKICAgICAgICAgICAgdGFyZ2V0ID0gbW9kZWwuTWV0YS5tb2RlbF9maWVsZHNbbmFtZV0udG8KICAgICAgICAgICAgaWYgdGFyZ2V0Ll9fY2xhc3NfXyAhPSBGb3J3YXJkUmVmOgogICAgICAgICAgICAgICAgdGFyZ2V0LnVwZGF0ZV9mb3J3YXJkX3JlZnMoCiAgICAgICAgICAgICAgICAgICAgKip7ay5fX25hbWVfXzogdiBmb3IgaywgdiBpbiBQQVJTRURfTU9ERUxTLml0ZW1zKCl9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBpZiB0YXJnZXQuX19mb3J3YXJkX2FyZ19fID09IG1vZGVsLl9fbmFtZV9fOiAgIyB0eXBlOiBpZ25vcmUKICAgICAgICAgICAgICAgICAgICBtb2RlbC51cGRhdGVfZm9yd2FyZF9yZWZzKCoqe21vZGVsLl9fbmFtZV9fOiBtb2RlbH0pCgoKZGVmIF9leHRyYWN0X2RiX2NvbHVtbnModGFibGU6IFRhYmxlLCBleGNsdWRlOiBDb250YWluZXJbc3RyXSwgZmllbGRzOiBEaWN0KSAtPiBEaWN0OgogICAgZm9yIGNvbHVtbiBpbiB0YWJsZS5jb2x1bW5zOgogICAgICAgIGlmIGNvbHVtbi5rZXkgaW4gZXhjbHVkZSBvciBjb2x1bW4uZm9yZWlnbl9rZXlzOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGZpZWxkX2RlZmluaXRpb24gPSBkaWN0KCkKICAgICAgICBmaWVsZF90eXBlID0gY29sdW1uLnR5cGUuX192aXNpdF9uYW1lX18ubG93ZXIoKSAgIyB0eXBlOiBpZ25vcmUKICAgICAgICBmb3IgcGFyYW0sIGZpZWxkX2RlZiBpbiBDT01NT05fUEFSQU1FVEVSUy5pdGVtcygpOgogICAgICAgICAgICBmaWVsZF9kZWZpbml0aW9uW3BhcmFtXSA9IGdldGF0dHIoCiAgICAgICAgICAgICAgICBjb2x1bW4sIGZpZWxkX2RlZi5nZXQoImtleSIsICIiKSwgTm9uZQogICAgICAgICAgICApIG9yIGZpZWxkX2RlZi5nZXQoImRlZmF1bHQiKQogICAgICAgICAgICBmaWVsZF9kZWZpbml0aW9uWyJ0eXBlIl0gPSBGSUVMRF9NQVAuZ2V0KGZpZWxkX3R5cGUpCiAgICAgICAgaWYgZmllbGRfZGVmaW5pdGlvbi5nZXQoInByaW1hcnlfa2V5IikgYW5kIGZpZWxkX3R5cGUgaW4gWwogICAgICAgICAgICAiaW50ZWdlciIsCiAgICAgICAgICAgICJzbWFsbF9pbnRlZ2VyIiwKICAgICAgICAgICAgImJpZ19pbnRlZ2VyIiwKICAgICAgICBdOgogICAgICAgICAgICBmaWVsZF9kZWZpbml0aW9uWyJhdXRvaW5jcmVtZW50Il0gPSBUcnVlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZmllbGRfZGVmaW5pdGlvblsiYXV0b2luY3JlbWVudCJdID0gRmFsc2UKICAgICAgICB0eXBlX3BhcmFtcyA9IFRZUEVfU1BFQ0lGSUNfUEFSQU1FVEVSUy5nZXQoZmllbGRfdHlwZSwgTm9uZSkKICAgICAgICBpZiB0eXBlX3BhcmFtczoKICAgICAgICAgICAgZm9yIHBhcmFtLCBmaWVsZF9kZWYgaW4gdHlwZV9wYXJhbXMuaXRlbXMoKToKICAgICAgICAgICAgICAgIHBhcmFtX3ZhbCA9IGdldGF0dHIoCiAgICAgICAgICAgICAgICAgICAgY29sdW1uLnR5cGUsIGZpZWxkX2RlZi5nZXQoImtleSIsICIiKSwgTm9uZQogICAgICAgICAgICAgICAgKSBvciBmaWVsZF9kZWYuZ2V0KCJkZWZhdWx0IikKICAgICAgICAgICAgICAgIGZpZWxkX2RlZmluaXRpb25bcGFyYW1dID0gcGFyYW1fdmFsCiAgICAgICAgZmllbGRzW2NvbHVtbi5rZXldID0gZmllbGRfZGVmaW5pdGlvbgogICAgcmV0dXJuIGZpZWxkcwoKCmRlZiBfZXh0cmFjdF9yZWxhdGlvbnMoCiAgICBtYXBwZXI6IE1hcHBlciwKICAgIGZpZWxkczogRGljdCwKICAgIHJldmVyc2U6IGJvb2wsCiAgICBtZXRhZGF0YTogTWV0YURhdGEsCiAgICBkYXRhYmFzZTogRGF0YWJhc2UsCiAgICBkYl9tb2RlbDogVHlwZSwKKSAtPiBEaWN0OgogICAgZm9yIGF0dHIgaW4gbWFwcGVyLmF0dHJzOiAgIyB0eXBlOiBpZ25vcmUKICAgICAgICBpZiBpc2luc3RhbmNlKGF0dHIsIHNxbGFsY2hlbXkub3JtLlJlbGF0aW9uc2hpcFByb3BlcnR5KToKICAgICAgICAgICAgIyBza2lwIG9uZSB0byBtYW55LCBpdCB3aWxsIGJlIHBvcHVsYXRlZCBsYXRlciBieSBvcm1hcgogICAgICAgICAgICAjIGlmIGF0dHIuZGlyZWN0aW9uLm5hbWUgPT0gIk9ORVRPTUFOWSI6CiAgICAgICAgICAgICMgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGlmIGF0dHIuZGlyZWN0aW9uLm5hbWUgPT0gIk1BTllUT09ORSI6CiAgICAgICAgICAgICAgICAjIHdlIHVzZSBmb3J3YXJkIHJlZiBhcyB0YXJnZXQgbWlnaHQgbm90IGJlIHBvcHVsYXRlZAogICAgICAgICAgICAgICAgdGFyZ2V0X3NxbGFsY2hlbXkgPSBhdHRyLmVudGl0eS5jbGFzc18KICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICB0YXJnZXRfc3FsYWxjaGVteSBub3QgaW4gUEFSU0VEX01PREVMUwogICAgICAgICAgICAgICAgICAgIGFuZCB0YXJnZXRfc3FsYWxjaGVteSBub3QgaW4gQ1VSUkVOVExZX1BST0NFU1NFRAogICAgICAgICAgICAgICAgICAgIGFuZCBub3QgdGFyZ2V0X3NxbGFsY2hlbXkgPT0gZGJfbW9kZWwKICAgICAgICAgICAgICAgICk6CiAgICAgICAgICAgICAgICAgICAgUEFSU0VEX01PREVMU1t0YXJnZXRfc3FsYWxjaGVteV0gPSBzcWxhbGNoZW15X3RvX29ybWFyKAogICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfc3FsYWxjaGVteSwgbWV0YWRhdGE9bWV0YWRhdGEsIGRhdGFiYXNlPWRhdGFiYXNlCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IFBBUlNFRF9NT0RFTFNbdGFyZ2V0X3NxbGFsY2hlbXldCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IEZvcndhcmRSZWYodGFyZ2V0X3NxbGFsY2hlbXkuX19uYW1lX18pICAjIHR5cGU6IGlnbm9yZQoKICAgICAgICAgICAgICAgIGNvbHVtbiA9IG5leHQoaXRlcihhdHRyLmxvY2FsX2NvbHVtbnMpKQogICAgICAgICAgICAgICAgc3FsX2ZrID0gbmV4dChpdGVyKGNvbHVtbi5mb3JlaWduX2tleXMpKQogICAgICAgICAgICAgICAgZmllbGRzW2F0dHIua2V5XSA9IGRpY3QoCiAgICAgICAgICAgICAgICAgICAgdHlwZT1vcm1hci5Gb3JlaWduS2V5LAogICAgICAgICAgICAgICAgICAgIHRvPXRhcmdldCwKICAgICAgICAgICAgICAgICAgICBuYW1lPWNvbHVtbi5rZXksCiAgICAgICAgICAgICAgICAgICAgcmVsYXRlZF9uYW1lPWF0dHIuYmFja19wb3B1bGF0ZXMsCiAgICAgICAgICAgICAgICAgICAgb251cGRhdGU9Z2V0YXR0cihzcWxfZmssICJvbnVwZGF0ZSIsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgIG9uZGVsZXRlPWdldGF0dHIoc3FsX2ZrLCAib25kZWxldGUiLCBOb25lKSwKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgZWxpZiBhdHRyLmRpcmVjdGlvbi5uYW1lID09ICJNQU5ZVE9NQU5ZIjoKICAgICAgICAgICAgICAgIHRhcmdldF9zcWxhbGNoZW15ID0gYXR0ci5lbnRpdHkuY2xhc3NfCiAgICAgICAgICAgICAgICBpZiB0YXJnZXRfc3FsYWxjaGVteSBub3QgaW4gUEFSU0VEX01PREVMUyBhbmQgbm90IHJldmVyc2U6CiAgICAgICAgICAgICAgICAgICAgUEFSU0VEX01PREVMU1t0YXJnZXRfc3FsYWxjaGVteV0gPSBzcWxhbGNoZW15X3RvX29ybWFyKAogICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfc3FsYWxjaGVteSwKICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE9bWV0YWRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFiYXNlPWRhdGFiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlPVRydWUsCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgZWxzZTogICMgcHJhZ21hOiBubyBjb3ZlcgogICAgICAgICAgICAgICAgICAgICMgdGFyZ2V0IG1vZGVsIGFscmVhZHkgc2hvdWxkIGhhdmUgbTJtIHJlbGF0aW9uCiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIHRhcmdldCA9IFBBUlNFRF9NT0RFTFNbdGFyZ2V0X3NxbGFsY2hlbXldCiAgICAgICAgICAgICAgICB0aHJvdWdoX3RhYmxlX25hbWUgPSBhdHRyLnNlY29uZGFyeS5rZXkKICAgICAgICAgICAgICAgIGZpZWxkc1thdHRyLmtleV0gPSBkaWN0KAogICAgICAgICAgICAgICAgICAgIHR5cGU9b3JtYXIuTWFueVRvTWFueSwKICAgICAgICAgICAgICAgICAgICB0bz10YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgdGhyb3VnaD1jcmVhdGVfdGhyb3VnaF9tb2RlbCgKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfbmFtZT10aHJvdWdoX3RhYmxlX25hbWUudGl0bGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfbmFtZT10aHJvdWdoX3RhYmxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhPW1ldGFkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZT1kYXRhYmFzZSwKICAgICAgICAgICAgICAgICAgICApLAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgICkKICAgIHJldHVybiBmaWVsZHMKCgpkZWYgX2J1aWxkX21vZGVsX21ldGEoCiAgICB0YWJsZTogVGFibGUsIG1ldGFkYXRhOiBNZXRhRGF0YSwgZGF0YWJhc2U6IERhdGFiYXNlCikgLT4gVHlwZVtvcm1hci5Nb2RlbE1ldGFdOgogICAgIyBjb25zdHJhaW50cwogICAgY29uc3RyYWludHMgPSBbXQogICAgZm9yIGNvbnN0IGluIHRhYmxlLmNvbnN0cmFpbnRzOgogICAgICAgIGlmIGlzaW5zdGFuY2UoY29uc3QsIHNxbGFsY2hlbXkuVW5pcXVlQ29uc3RyYWludCk6CiAgICAgICAgICAgIGNvbnN0cmFpbnRzLmFwcGVuZCgKICAgICAgICAgICAgICAgIG9ybWFyLlVuaXF1ZUNvbHVtbnMoKmNvbnN0Ll9wZW5kaW5nX2NvbGFyZ3MpICAjIHR5cGU6IGlnbm9yZQogICAgICAgICAgICApCgogICAgTWV0YSA9IHR5cGUoCiAgICAgICAgIk1ldGEiLAogICAgICAgIChvcm1hci5Nb2RlbE1ldGEsKSwKICAgICAgICB7CiAgICAgICAgICAgICJtZXRhZGF0YSI6IG1ldGFkYXRhLAogICAgICAgICAgICAiZGF0YWJhc2UiOiBkYXRhYmFzZSwKICAgICAgICAgICAgInRhYmxlbmFtZSI6IHRhYmxlLmtleSwKICAgICAgICAgICAgImNvbnN0cmFpbnRzIjogY29uc3RyYWludHMsCiAgICAgICAgfSwKICAgICkKICAgIHJldHVybiBjYXN0KFR5cGVbb3JtYXIuTW9kZWxNZXRhXSwgTWV0YSkKCgpkZWYgY3JlYXRlX3Rocm91Z2hfbW9kZWwoCiAgICBjbGFzc19uYW1lOiBzdHIsCiAgICB0YWJsZV9uYW1lOiBzdHIsCiAgICBtZXRhZGF0YTogTWV0YURhdGEsCiAgICBkYXRhYmFzZTogRGF0YWJhc2UsCikgLT4gVHlwZVtNb2RlbF06CiAgICAiIiIKICAgIENyZWF0ZXMgZGVmYXVsdCBlbXB0eSB0aHJvdWdoIG1vZGVsIGlmIG5vIGFkZGl0aW9uYWwgZmllbGRzIGFyZSByZXF1aXJlZC4KICAgICIiIgogICAgbmV3X21ldGFfbmFtZXNwYWNlID0gewogICAgICAgICJ0YWJsZW5hbWUiOiB0YWJsZV9uYW1lLAogICAgICAgICJkYXRhYmFzZSI6IGRhdGFiYXNlLAogICAgICAgICJtZXRhZGF0YSI6IG1ldGFkYXRhLAogICAgfQogICAgbmV3X21ldGEgPSB0eXBlKCJNZXRhIiwgKCksIG5ld19tZXRhX25hbWVzcGFjZSkKICAgIHRocm91Z2hfbW9kZWwgPSB0eXBlKGNsYXNzX25hbWUsIChvcm1hci5Nb2RlbCwpLCB7Ik1ldGEiOiBuZXdfbWV0YX0pCiAgICByZXR1cm4gY2FzdChUeXBlWyJNb2RlbCJdLCB0aHJvdWdoX21vZGVsKQoKCmRlZiBvcm1hcl9tb2RlbF9zdHJfcmVwcigKICAgIG1vZGVsOiBUeXBlW29ybWFyLk1vZGVsXSwgc2tpcF9uYW1lc19pZl9tYXRjaDogYm9vbCA9IFRydWUKKSAtPiBzdHI6CiAgICBwYWQgPSAiICAgICIKICAgIGRlZmluaXRpb24gPSAoCiAgICAgICAgZiJcbiIKICAgICAgICBmImNsYXNzIHttb2RlbC5fX25hbWVfX30ob3JtYXIuTW9kZWwpOlxuIgogICAgICAgIGYiXG57cGFkfWNsYXNzIE1ldGEob3JtYXIuTW9kZWxNZXRhKTpcbiIKICAgICAgICBmIntwYWQgKiAyfW1ldGFkYXRhPW1ldGFkYXRhXG4iCiAgICAgICAgZiJ7cGFkICogMn1kYXRhYmFzZT1kYXRhYmFzZVxuIgogICAgICAgIGYne3BhZCAqIDJ9dGFibGVuYW1lPSJ7bW9kZWwuTWV0YS50YWJsZW5hbWV9IlxuJwogICAgKQogICAgaWYgbW9kZWwuTWV0YS5jb25zdHJhaW50czoKICAgICAgICBjb25zdHJhaW50cyA9IFtdCiAgICAgICAgZm9yIGNvbnN0IGluIG1vZGVsLk1ldGEuY29uc3RyYWludHM6CiAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY29uc3QsIG9ybWFyLlVuaXF1ZUNvbHVtbnMpOgogICAgICAgICAgICAgICAgYXJncyA9ICIsICIuam9pbigKICAgICAgICAgICAgICAgICAgICBbZicie3h9IicgZm9yIHggaW4gY29uc3QuX3BlbmRpbmdfY29sYXJnc10gICMgdHlwZTogaWdub3JlCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICBjb25zdHJhaW50cy5hcHBlbmQoZiJvcm1hci5VbmlxdWVDb2x1bW5zKHthcmdzfSkiKQoKICAgICAgICBkZWZpbml0aW9uICs9IGYie3BhZH17cGFkfWNvbnN0cmFpbnRzPVt7JywgJy5qb2luKGNvbnN0cmFpbnRzKX1dXG4iCiAgICBkZWZpbml0aW9uICs9ICJcbiIKICAgIGZvciBmaWVsZCBpbiBtb2RlbC5NZXRhLm1vZGVsX2ZpZWxkcy52YWx1ZXMoKToKICAgICAgICBpZiBmaWVsZC5pc19yZWxhdGlvbiBhbmQgZmllbGQudmlydHVhbDoKICAgICAgICAgICAgY29udGludWUKICAgICAgICBmaWVsZF9kZWZpbml0aW9uID0gZGljdCgpCiAgICAgICAgZmllbGRfdHlwZSA9IGZpZWxkLl9fY2xhc3NfXy5fX25hbWVfXwogICAgICAgIGZpZWxkX25hbWUgPSBmaWVsZC5uYW1lCiAgICAgICAgcmVtYXBfcGFyYW1zID0geyJkZWZhdWx0IjogIm9ybWFyX2RlZmF1bHQiLCAibmFtZSI6ICJkYl9hbGlhcyJ9CiAgICAgICAgZm9yIHBhcmFtLCBmaWVsZF9kZWYgaW4gQ09NTU9OX1BBUkFNRVRFUlMuaXRlbXMoKToKICAgICAgICAgICAgcGFyYW1fbmFtZSA9IHJlbWFwX3BhcmFtcy5nZXQocGFyYW0sIHBhcmFtKQogICAgICAgICAgICBpZiBnZXRhdHRyKGZpZWxkLCBwYXJhbV9uYW1lLCBOb25lKSAhPSBmaWVsZF9kZWYuZ2V0KCJkZWZhdWx0Iik6CiAgICAgICAgICAgICAgICBmaWVsZF9kZWZpbml0aW9uW3BhcmFtXSA9IGdldGF0dHIoZmllbGQsIHBhcmFtX25hbWUsIE5vbmUpCiAgICAgICAgaWYgc2tpcF9uYW1lc19pZl9tYXRjaCBhbmQgZmllbGRfZGVmaW5pdGlvbi5nZXQoIm5hbWUiKSA9PSBmaWVsZF9uYW1lOgogICAgICAgICAgICBmaWVsZF9kZWZpbml0aW9uLnBvcCgibmFtZSIsIE5vbmUpCiAgICAgICAgaWYgZmllbGRfZGVmaW5pdGlvbi5nZXQoInByaW1hcnlfa2V5Iik6CiAgICAgICAgICAgIGZpZWxkX2RlZmluaXRpb24ucG9wKCJudWxsYWJsZSIsIE5vbmUpCiAgICAgICAgdHlwZV9wYXJhbXMgPSBUWVBFX1NQRUNJRklDX1BBUkFNRVRFUlMuZ2V0KGZpZWxkX3R5cGUubG93ZXIoKSwgTm9uZSkKICAgICAgICBpZiB0eXBlX3BhcmFtczoKICAgICAgICAgICAgZm9yIHBhcmFtIGluIHR5cGVfcGFyYW1zLmtleXMoKToKICAgICAgICAgICAgICAgIHBhcmFtX3ZhbCA9IGdldGF0dHIoZmllbGQsIHBhcmFtLCBOb25lKQogICAgICAgICAgICAgICAgZmllbGRfZGVmaW5pdGlvbltwYXJhbV0gPSBwYXJhbV92YWwKICAgICAgICBwYXJhbXMgPSBbIj0iLmpvaW4oW3N0cihrKSwgc3RyKHYpXSkgZm9yIGssIHYgaW4gZmllbGRfZGVmaW5pdGlvbi5pdGVtcygpXQogICAgICAgIHBhcmFtc19zdHIgPSAiLCAiLmpvaW4oc29ydGVkKHBhcmFtcykpCiAgICAgICAgaWYgZmllbGRfdHlwZSA9PSAiRm9yZWlnbktleSI6CiAgICAgICAgICAgIGZpZWxkID0gY2FzdChGb3JlaWduS2V5RmllbGQsIGZpZWxkKQogICAgICAgICAgICByZWxfcGFyYW1zID0gKAogICAgICAgICAgICAgICAgZiJ0bz17ZmllbGQudG8uZ2V0X25hbWUobG93ZXI9RmFsc2UpfSwgIgogICAgICAgICAgICAgICAgZidyZWxhdGVkX25hbWU9IntmaWVsZC5yZWxhdGVkX25hbWV9IiwgJwogICAgICAgICAgICApCiAgICAgICAgICAgIGlmIGZpZWxkLm9udXBkYXRlOgogICAgICAgICAgICAgICAgcmVsX3BhcmFtcyArPSBmJ29udXBkYXRlPSJ7ZmllbGQub251cGRhdGV9IiwgJwogICAgICAgICAgICBpZiBmaWVsZC5vbmRlbGV0ZToKICAgICAgICAgICAgICAgIHJlbF9wYXJhbXMgKz0gZidvbmRlbGV0ZT0ie2ZpZWxkLm9uZGVsZXRlfSIsICcKICAgICAgICAgICAgcGFyYW1zX3N0ciA9IHJlbF9wYXJhbXMgKyBwYXJhbXNfc3RyCiAgICAgICAgaWYgZmllbGRfdHlwZSA9PSAiTWFueVRvTWFueSI6CiAgICAgICAgICAgIGZpZWxkID0gY2FzdChGb3JlaWduS2V5RmllbGQsIGZpZWxkKQogICAgICAgICAgICByZWxfcGFyYW1zID0gKAogICAgICAgICAgICAgICAgZiJ0bz17ZmllbGQudG8uZ2V0X25hbWUobG93ZXI9RmFsc2UpfSwgIgogICAgICAgICAgICAgICAgZiJ0aHJvdWdoPXtmaWVsZC50aHJvdWdoLmdldF9uYW1lKGxvd2VyPUZhbHNlKX0sICIKICAgICAgICAgICAgICAgIGYncmVsYXRlZF9uYW1lPSJ7ZmllbGQucmVsYXRlZF9uYW1lfSIsICcKICAgICAgICAgICAgKQogICAgICAgICAgICBwYXJhbXNfc3RyID0gcmVsX3BhcmFtcyArIHBhcmFtc19zdHIKICAgICAgICBkZWZpbml0aW9uICs9IGYie3BhZH17ZmllbGRfbmFtZX0gPSBvcm1hci57ZmllbGRfdHlwZX0oe3BhcmFtc19zdHJ9KVxuIgogICAgcmV0dXJuIGRlZmluaXRpb24KPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICByZWxhdGVkX25hbWU9YXR0ci5iYWNrX3BvcHVsYXRlcywKPHxmaW1fZW5kfD4="]
["23b02343a6fef318487eafdacc1cb476f8917feb-2","23b02343a6fef318487eafdacc1cb476f8917feb","PHxmaW1fcHJlZml4fD4Kc2VudGVuY2UgPSBbJ0knLCdsb3ZlJywndG8nLCdsZWFybicsJ1B5dGhvbiddCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcHJpbnQoc2VudGVuY2UpCjx8ZmltX2VuZHw+"]
["e9705a104b633508617d442e07b36a66a40d29d4-1","e9705a104b633508617d442e07b36a66a40d29d4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmZyb20gb3MgaW1wb3J0IGxzZWVrCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IGpzb24KaW1wb3J0IHBpY2tsZQppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCmZyb20gc2NpcHkuc3BlY2lhbCBpbXBvcnQgc29mdG1heApmcm9tIHNjaXB5LnNwZWNpYWwgaW1wb3J0IGV4cGl0IGFzIHNpZ21vaWQKZnJvbSBza2xlYXJuLm1ldHJpY3MgaW1wb3J0IGYxX3Njb3JlCmltcG9ydCB0b3JjaAppbXBvcnQgc3lzCgpwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCnBhcnNlci5hZGRfYXJndW1lbnQoJy0tY29uZmlnJywgdHlwZT1zdHIpCnBhcnNlci5hZGRfYXJndW1lbnQoJy0tcmF3X3Jlc3VsdF9kaXInLCB0eXBlPXN0cikKcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1vdXRwdXRfZGlyJywgdHlwZT1zdHIpCmFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCgp3aXRoIG9wZW4oYXJncy5jb25maWcsICdyJykgYXMgZjoKICAgIGNvbmZpZ19qc29uID0ganNvbi5sb2FkKGYpCgpmb3IgY29uZmlnIGluIGNvbmZpZ19qc29uOgogICAgaWYgKGNvbmZpZ1snZGF0YXNldCddID09ICdDZWxlYkEnKToKICAgICAgICBmb3Igbm9fdHJ5IGluIHJhbmdlKGNvbmZpZ1snbm9fdHJpZXMnXSk6CiAgICAgICAgICAgIGV4cF9yZXN1bHRfcGF0aCA9IFBhdGgoCiAgICAgICAgICAgICAgICBhcmdzLnJhd19yZXN1bHRfZGlyLAogICAgICAgICAgICAgICAgInswfV97MX1fezJ9X3szfS97NH0iLmZvcm1hdChjb25maWdbJ25ldHdvcmsnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdbJ3RyYWluaW5nX3R5cGUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdbJ2RhdGFzZXQnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdbJ3JhbmRvbV9zZWVkJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKG5vX3RyeSkpKQogICAgICAgICAgICByZXN1bHRfcmVsX3BhdGggPSBQYXRoKGNvbmZpZ1snbWFpbl9yZXN1bHRfcmVsX3BhdGgnXSkucGFyZW50CiAgICAgICAgICAgIAogICAgICAgICAgICBwID0gUGF0aChleHBfcmVzdWx0X3BhdGgsIHJlc3VsdF9yZWxfcGF0aCkKICAgICAgICAgICAgZ3RfcGF0aCA9IFBhdGgocCwgJ2dyb3VuZF90cnV0aHMucHRoJykKICAgICAgICAgICAgcHJvdGVjdGVkX3BhdGggPSBQYXRoKHAsICdwcm90ZWN0ZWQucHRoJykKICAgICAgICAgICAgcHJlZF9wYXRoID0gUGF0aChwLCAncHJlZHMucHRoJykKCiAgICAgICAgICAgIGd0ID0gdG9yY2gubG9hZChzdHIoZ3RfcGF0aCkpLm51bXB5KCkKICAgICAgICAgICAgcHJvdGVjdGVkID0gdG9yY2gubG9hZChzdHIocHJvdGVjdGVkX3BhdGgpKS5udW1weSgpCiAgICAgICAgICAgIHByZWQgPSB0b3JjaC5sb2FkKHN0cihwcmVkX3BhdGgpKS5udW1weSgpLmFzdHlwZShpbnQpCgogICAgICAgICAgICBkZiA9IHBkLkRhdGFGcmFtZSh7CiAgICAgICAgICAgICAgICAnaWR4JzogbGlzdChyYW5nZShwcmVkLnNoYXBlWzBdKSksCiAgICAgICAgICAgICAgICAnZ3JvdW5kX3RydXRoJzogbGlzdChndCksCiAgICAgICAgICAgICAgICAncHJlZGljdGlvbl9yZXN1bHQnOiBsaXN0KHByZWQpLAogICAgICAgICAgICAgICAgJ3Byb3RlY3RlZF9sYWJlbCc6IGxpc3QocHJvdGVjdGVkKQogICAgICAgICAgICB9KQogICAgICAgICAgICBkZi5zZXRfaW5kZXgoJ2lkeCcsIGlucGxhY2U9VHJ1ZSkKCiAgICAgICAgICAgIG91dHB1dF9wYXRoID0gUGF0aChhcmdzLm91dHB1dF9kaXIsIGNvbmZpZ1sndHJhaW5pbmdfdHlwZSddKQogICAgICAgICAgICBvdXRwdXRfcGF0aC5ta2RpcihleGlzdF9vaz1UcnVlLCBwYXJlbnRzPVRydWUpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgY3N2X3BhdGggPSBQYXRoKG91dHB1dF9wYXRoLCAndHJ5X3swOjAyZH0uY3N2Jy5mb3JtYXQobm9fdHJ5KSkKICAgICAgICAgICAgZGYudG9fY3N2KHN0cihjc3ZfcGF0aCkpCjx8ZmltX2VuZHw+"]
["0986d3b442e12ee91458244965839d589ed3a5c9-2","0986d3b442e12ee91458244965839d589ed3a5c9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKCmRlZiBsb2FkX2RhdGEocGF0aCk6CiAgICB3aXRoIG9wZW4ocGF0aCkgYXMgZjoKICAgICAgICBpbnN0cnVjdGlvbnMgPSBbCiAgICAgICAgICAgIGxpbmUuc3BsaXQoIiAiLCAxKSBmb3IgbGluZSBpbiBmLnJlYWQoKS5zdHJpcCgpLnNwbGl0KCJcbiIpCiAgICAgICAgXQoKICAgIGZvciBpIGluIHJhbmdlKGxlbihpbnN0cnVjdGlvbnMpKToKICAgICAgICBvcCwgYXJncyA9IGluc3RydWN0aW9uc1tpXQogICAgICAgIGlmICIsIiBpbiBhcmdzOgogICAgICAgICAgICByZWcsIGptcCA9IGFyZ3Muc3BsaXQoIiwgIikKICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2ldID0gW29wLCBbcmVnLCBpbnQoam1wKV1dCiAgICAgICAgZWxpZiBvcCA9PSAiam1wIjoKICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2ldID0gW29wLCBpbnQoYXJncyldCgogICAgcmV0dXJuIGluc3RydWN0aW9ucwoKCmRlZiBjb21wdXRlKGluc3RydWN0aW9ucywgYT0wKToKICAgIG9wcyA9IHsKICAgICAgICAiaGxmIjogbGFtYmRhIHg6IHggLy8gMiwKICAgICAgICAidHBsIjogbGFtYmRhIHg6IDMgKiB4LAogICAgICAgICJpbmMiOiBsYW1iZGEgeDogeCArIDEsCiAgICB9CiAgICByZWdpc3RlcnMgPSB7ImEiOiBhLCAiYiI6IDB9CgogICAgY3Vyc29yID0gMAoKICAgIHdoaWxlIGN1cnNvciA8IGxlbihpbnN0cnVjdGlvbnMpOgogICAgICAgIG9wLCBhcmdzID0gaW5zdHJ1Y3Rpb25zW2N1cnNvcl0KICAgICAgICBpZiBvcCA9PSAiam1wIjoKICAgICAgICAgICAgY3Vyc29yICs9IGFyZ3MKICAgICAgICBlbGlmIG9wID09ICJqaW8iOgogICAgICAgICAgICBpZiByZWdpc3RlcnNbYXJnc1swXV0gPT0gMToKICAgICAgICAgICAgICAgIGN1cnNvciArPSBhcmdzWzFdCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMQogICAgICAgIGVsaWYgb3AgPT0gImppZSI6CiAgICAgICAgICAgIGlmIHJlZ2lzdGVyc1thcmdzWzBdXSAlIDIgPT0gMDoKICAgICAgICAgICAgICAgIGN1cnNvciArPSBhcmdzWzFdCjx8ZmltX2hvbGV8PgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJlZ2lzdGVyc1thcmdzXSA9IG9wc1tvcF0ocmVnaXN0ZXJzW2FyZ3NdKQogICAgICAgICAgICBjdXJzb3IgKz0gMQoKICAgIHJldHVybiByZWdpc3RlcnNbImIiXQoKCmRlZiBwYXJ0XzEoaW5zdHJ1Y3Rpb25zKToKICAgIHJldHVybiBjb21wdXRlKGluc3RydWN0aW9ucykKCgpkZWYgcGFydF8yKGluc3RydWN0aW9ucyk6CiAgICByZXR1cm4gY29tcHV0ZShpbnN0cnVjdGlvbnMsIDEpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIGluc3RydWN0aW9ucyA9IGxvYWRfZGF0YShzeXMuYXJndlsxXSkKICAgIHByaW50KGYiUGFydCAxOiB7cGFydF8xKGluc3RydWN0aW9ucyl9IikKICAgIHByaW50KGYiUGFydCAyOiB7cGFydF8yKGluc3RydWN0aW9ucyl9IikKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGN1cnNvciArPSAxCjx8ZmltX2VuZHw+"]
["c0ccc8a7adebe3bb19bfb9a78c29f49af53297ae-1","c0ccc8a7adebe3bb19bfb9a78c29f49af53297ae","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNob3J0dXVpZAoKZnJvbSBFVENldGVyYS5TeXN0ZW1zLkF1dG9tYXRhIGltcG9ydCBUaW1lZEdhbWVBdXRvbWF0b24KZnJvbSBFVENldGVyYSBpbXBvcnQgcHl1cHBhYWwKCmNsYXNzIG5ldHdvcmsoVGltZWRHYW1lQXV0b21hdG9uKToKICAgICIiIgogICAgQ2xhc3MgZm9yIGNyZWF0aW5nIGEgVEdBIHJlcHJlc2VudGluZyB0aGUgY29tbW9uIGNvbW11bmljYXRpb24gbmV0d29yaydzIGJlaGF2aW91ci4KICAgIFRoZSBkaWZmZXJlbmNlIGZyb20gTS5NYXpvLCBELkFkemtpeWEgMjAxNiBpcyB0aGF0IHRoZSBjbG9jayBoYXMgYmVlbiByZW1vdmVkIAogICAgZnJvbSB0aGUgbmV0d29yayBUR0EgYWx0b2dldGhlciBpbiB0aGlzIG1vZGVsLgoKICAgIE9yaWdpbmFsIGF1dGhvcjogUC4gU2NoYWxrd2lqayAKICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lPSdOZXR3b3JrJywgaW5kZXg9Tm9uZSwgc3luYz0ndXAnLAogICAgICAgICAgICAgICAgIGFjaz0nYWNrJywgbmFjaz0nbmFjaycsIHRpbWVvdXQ9J3RpbWVvdXQnLCBkb3duPSdkb3duJyk6CgogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICBzZWxmLmluZGV4ID0gaW5kZXggb3Igc2hvcnR1dWlkLnV1aWQoKVs6Nl0KICAgICAgICBzZWxmLnN5bmMgPSBzeW5jCiAgICAgICAgc2VsZi5hY2sgPSBhY2sKICAgICAgICBzZWxmLm5hY2sgPSBuYWNrCiAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAogICAgICAgIHNlbGYuZG93biA9IGRvd24KCiAgICAgICAgIyBhbGwgbG9jYXRpb25zIGluIGEgbmV0d29yayBhcmUgdXJnZW50CiAgICAgICAgY2xvY2tzID0ge30gICMgbm8gY2xvY2sgaW52b2x2ZWQgaW4gdGhlIG5ldHdvcmsKCgoKPHxmaW1faG9sZXw+CiAgICAgICAgdXJnZW50ID0geydJblVzZV9hY2snLCAnSW5Vc2VfbmFjayd9CiAgICAgICAgbG9jYXRpb25zLnVwZGF0ZSh1cmdlbnQpCgogICAgICAgICMgbm8gaW52YXJpYW50cyBzaW5jZSBhbGwgdHJhbnNpdGlvbnMgYXJlIGFkLWhvYywgZGVjaWRlZCBieSBjb250cm9sIGxvb3BzCiAgICAgICAgaW52YXJpYW50cyA9IHtsb2M6IE5vbmUgZm9yIGxvYyBpbiBsb2NhdGlvbnN9CgogICAgICAgICMgQWxsIGFjdGlvbnMKICAgICAgICBhY3Rpb25zX3UgPSB7Zid7c3luY30/J30gICMgVE9ETyA6IEEgYmV0dGVyIHdheSB0byBkbyB0aGlzPwogICAgICAgIGFjdGlvbnNfYyA9IHtmJ3t0aW1lb3V0fT8nLCBmJ3thY2t9IScsIGYne25hY2t9ISd9CgogICAgICAgICMgRGVmaW5lIGVkZ2VzCiAgICAgICAgdHJhbml0aW9ucyA9IHNlbGYuX2NyZWF0ZV9hbGxfZWRnZXMoKQoKICAgICAgICBsMCA9ICdJZGxlJwoKICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvY2F0aW9ucywgaW52YXJpYW50cywgYWN0aW9uc19jLCBhY3Rpb25zX3UsCiAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja3MsIHRyYW5pdGlvbnMsIG5hbWU9bmFtZSwgaW5pdGlhbF9sb2NhdGlvbj1sMCwKICAgICAgICAgICAgICAgICAgICAgICAgIHVyZ2VudD11cmdlbnQpCgogICAgZGVmIF9jcmVhdGVfYWxsX2VkZ2VzKHNlbGYpOgoKICAgICAgICAjIEFueSBlZGdlID0gKHNvdXJjZSwgZ3VhcmQsIGFjdGlvbnNfYywgYWN0aW9uc191LCByZXNldHMsIHRhcmdldCkKCiAgICAgICAgZWRnZXMgPSBzZXQoKQoKICAgICAgICBhY3Rpb25fc3luYyA9IHtmJ3tzZWxmLnN5bmN9Pyd9CiAgICAgICAgYWN0aW9uX2FjayA9IHtmJ3tzZWxmLmFja30hJ30KICAgICAgICBhY3Rpb25fbmFjayA9IHtmJ3tzZWxmLm5hY2t9ISd9CiAgICAgICAgYWN0aW9uX3RpbWVvdXQgPSB7Zid7c2VsZi50aW1lb3V0fT8nfQogICAgICAgIGFjdGlvbl9kb3duID0ge2Yne3NlbGYuZG93bn0/J30KCiAgICAgICAgZWRnZV9pZGxlX3RvX2ludXNlX2FjayA9IHsoJ0lkbGUnLCBUcnVlLCBmcm96ZW5zZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoYWN0aW9uX3N5bmMpLCBmcm96ZW5zZXQoKSwgJ0luVXNlX2FjaycpfQogICAgICAgIGVkZ2VzLnVwZGF0ZShlZGdlX2lkbGVfdG9faW51c2VfYWNrKQoKICAgICAgICBlZGdlX2Zyb21faW51c2VfYWNrID0geygnSW5Vc2VfYWNrJywgVHJ1ZSwgZnJvemVuc2V0KGFjdGlvbl9hY2spLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldCgpLCBmcm96ZW5zZXQoKSwgJ0luVXNlJyl9CiAgICAgICAgZWRnZXMudXBkYXRlKGVkZ2VfZnJvbV9pbnVzZV9hY2spCgogICAgICAgIGVkZ2VfZnJvbV9pbnVzZV9uYWNrID0geygnSW5Vc2VfbmFjaycsIFRydWUsIGZyb3plbnNldChhY3Rpb25fbmFjayksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldCgpLCBmcm96ZW5zZXQoKSwgJ0luVXNlJyl9CiAgICAgICAgZWRnZXMudXBkYXRlKGVkZ2VfZnJvbV9pbnVzZV9uYWNrKQoKICAgICAgICBlZGdlX2ludXNlX3RvX2ludXNlX25hY2sgPSB7KCdJblVzZScsIFRydWUsIGZyb3plbnNldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KGFjdGlvbl9zeW5jKSwgZnJvemVuc2V0KCksICdJblVzZV9uYWNrJyl9CiAgICAgICAgZWRnZXMudXBkYXRlKGVkZ2VfaW51c2VfdG9faW51c2VfbmFjaykKCiAgICAgICAgZWRnZV90b19iYWQgPSB7KCdJblVzZScsIFRydWUsIGZyb3plbnNldChhY3Rpb25fdGltZW91dCksCiAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldCgpLCBmcm96ZW5zZXQoKSwgJ0JhZCcpfQogICAgICAgIGVkZ2VzLnVwZGF0ZShlZGdlX3RvX2JhZCkKCiAgICAgICAgZWRnZV90b19pZGxlID0geygnSW5Vc2UnLCBUcnVlLCBmcm96ZW5zZXQoYWN0aW9uX2Rvd24pLAogICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KCksIGZyb3plbnNldCgpLCAnSWRsZScpfQogICAgICAgIGVkZ2VzLnVwZGF0ZShlZGdlX3RvX2lkbGUpCgogICAgICAgIHNlbGZfbG9vcCA9IHsoJ0JhZCcsIFRydWUsIGZyb3plbnNldChhY3Rpb25fc3luYyksCiAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoKSwgZnJvemVuc2V0KCksICdCYWQnKX0KICAgICAgICBlZGdlcy51cGRhdGUoc2VsZl9sb29wKQoKICAgICAgICByZXR1cm4gZWRnZXMKCiAgICBkZWYgX2dlbmVyYXRlX3RyYW5zaXRpb25zKHNlbGYpOgogICAgICAgIHRyYW5zaXRpb25zID0gW10KICAgICAgICBmb3IgKHNvdXJjZSwgZ3VhcmQsIGFjdGlvbnNfYywgYWN0aW9uc191LCByZXNldHMsIHRhcmdldCkgaW4gc2VsZi50cmFuc2l0aW9uczoKICAgICAgICAgICAgcHJvcHMgPSB7fQogICAgICAgICAgICBpZiBndWFyZDoKICAgICAgICAgICAgICAgIHByb3BzLnVwZGF0ZSh7J2d1YXJkJzogc3RyKGd1YXJkKS5sb3dlcigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHR5cGUoZ3VhcmQpIGlzIGJvb2wgZWxzZSBndWFyZH0pCiAgICAgICAgICAgIGlmIGFjdGlvbnNfdToKICAgICAgICAgICAgICAgIHByb3BzLnVwZGF0ZSh7J3N5bmNocm9uaXNhdGlvbic6ICcsJy5qb2luKGFjdGlvbnNfdSl9KQogICAgICAgICAgICAgICAgcHJvcHMudXBkYXRlKHsnY29udHJvbGxhYmxlJzogRmFsc2V9KQogICAgICAgICAgICBpZiByZXNldHM6CiAgICAgICAgICAgICAgICBwcm9wcy51cGRhdGUoeydhc3NpZ25tZW50JzogJywnLmpvaW4oCiAgICAgICAgICAgICAgICAgICAgW2Yne2Nsb2NrfT0wJyBmb3IgY2xvY2sgaW4gcmVzZXRzXSl9KQogICAgICAgICAgICBpZiBhY3Rpb25zX2M6CiAgICAgICAgICAgICAgICBwcm9wcy51cGRhdGUoeydzeW5jaHJvbmlzYXRpb24nOiAnLCcuam9pbihhY3Rpb25zX2MpfSkKICAgICAgICAgICAgICAgIHByb3BzLnVwZGF0ZSh7J2NvbnRyb2xsYWJsZSc6IFRydWV9KQoKICAgICAgICAgICAgIyBwcm9wcy51cGRhdGUoeydjb250cm9sbGFibGUnOiBGYWxzZX0pCiAgICAgICAgICAgIHRyYW5zaXRpb25zLmFwcGVuZChweXVwcGFhbC5UcmFuc2l0aW9uKHNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnByb3BzKSkKICAgICAgICByZXR1cm4gdHJhbnNpdGlvbnMKCiAgICAjIG92ZXJyaWRkZW4gbWV0aG9kCiAgICBkZWYgX2dlbmVyYXRlX2RlY2xhcmF0aW9ucyhzZWxmKToKICAgICAgICAjIG5vIGNsb2NrLCBvbmx5IHNoYXJlZCBjaGFubmVscwoKICAgICAgICAjIFRoZSAiY2hhbnMiIGJlbG93IGlzIG9ubHkgZm9yIGRlYnVnZ2luZyEKICAgICAgICAjIGNoYW5zID0gJywgJy5qb2luKFtmJ3tzZWxmLnN5bmN9JywgZid7c2VsZi5hY2t9JywKICAgICAgICAjIGYne3NlbGYubmFja30nLCBmJ3tzZWxmLnRpbWVvdXR9JywgZid7c2VsZi5kb3dufSddKQogICAgICAgICMKICAgICAgICAjIHJldHVybiBmJ2NoYW4ge2NoYW5zfTtcbicKCiAgICAgICAgcmV0dXJuICdcbicKCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIyBub24tdXJnZW50IGxvY2F0aW9ucwogICAgICAgIGxvY2F0aW9ucyA9IHsnSWRsZScsICdJblVzZScsICdCYWQnfQoKICAgICAgICAjIEFkZCB1cmdlbnQgbG9jYXRpb25zCjx8ZmltX2VuZHw+"]
["1f13fec907fceaec3d944a32ee2687fde1ca704c-2","1f13fec907fceaec3d944a32ee2687fde1ca704c","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiMg6I635Y+W5a6i5oi356uvQ29tcG9uZW5055qE5Z+657G7CmltcG9ydCBjbGllbnQuZXh0cmFDbGllbnRBcGkgYXMgY2xpZW50QXBpCkNvbXBvbmVudENscyA9IGNsaWVudEFwaS5HZXRDb21wb25lbnRDbHMoKQoKIyBDb21wb25lbnTopoHnu6fmib/kuo7ln7rnsbvmiY3og73nlJ/mlYgKY2xhc3MgU2hvb3RDb21wb25lbnRDbGllbnQoQ29tcG9uZW50Q2xzKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbnRpdHlJZCk6CiAgICAgICAgQ29tcG9uZW50Q2xzLl9faW5pdF9fKHNlbGYsIGVudGl0eUlkKQogICAgICAgICMg6L+Z6YeM6K6+572u5LqG5LiA5Liq5byA5YWz5p2l5byA5YWz5pu05paw5bCE5Ye7CiAgICAgICAgc2VsZi5tU2hvb3QgPSBGYWxzZQoKICAgIEBwcm9wZXJ0eQo8fGZpbV9ob2xlfD4KICAgIGRlZiBzaG9vdChzZWxmLCB2YWwpOgogICAgICAgIHNlbGYubVNob290ID0gdmFsCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgc2hvb3Qoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYubVNob290CgogICAgQHNob290LnNldHRlcgo8fGZpbV9lbmR8Pg=="]
["1f85d6d4e7fcd4a495156fc86eb773b0bc14c01d-1","1f85d6d4e7fcd4a495156fc86eb773b0bc14c01d","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBqaXJhX2FuYWx5c2lzLmNvbmZpZy5jb25maWcgaW1wb3J0IENvbmZpZwpmcm9tIGppcmFfYW5hbHlzaXMuY3ljbGVfdGltZS5pc3N1ZSBpbXBvcnQgY3JlYXRlX2lzc3VlX3dpdGhfY29uZmlnLCBJc3N1ZQpmcm9tIGppcmFfYW5hbHlzaXMuamlyYS5pc3N1ZSBpbXBvcnQgSmlyYVRpY2tldAoKPHxmaW1fZW5kfD4="]
["9b14e660931996439d03ae96f2a4bfbcbcadd2f8-3","9b14e660931996439d03ae96f2a4bfbcbcadd2f8","PHxmaW1fcHJlZml4fD4KJycnCnByZWRpY3QucHnmnInlh6DkuKrms6jmhI/ngrkKMeOAgeaXoOazlei/m+ihjOaJuemHj+mihOa1i++8jOWmguaenOaDs+imgeaJuemHj+mihOa1i++8jOWPr+S7peWIqeeUqG9zLmxpc3RkaXIoKemBjeWOhuaWh+S7tuWkue+8jOWIqeeUqEltYWdlLm9wZW7miZPlvIDlm77niYfmlofku7bov5vooYzpooTmtYvjgIIKMuOAgeWmguaenOaDs+imgeS/neWtmO+8jOWIqeeUqHJfaW1hZ2Uuc2F2ZSgiaW1nLmpwZyIp5Y2z5Y+v5L+d5a2Y44CCCjPjgIHlpoLmnpzmg7PopoHojrflvpfmoYbnmoTlnZDmoIfvvIzlj6/ku6Xov5vlhaVkZXRlY3RfaW1hZ2Xlh73mlbDvvIzor7vlj5Z0b3AsbGVmdCxib3R0b20scmlnaHTov5nlm5vkuKrlgLzjgIIKNOOAgeWmguaenOaDs+imgeaIquWPluS4i+ebruagh++8jOWPr+S7peWIqeeUqOiOt+WPluWIsOeahHRvcCxsZWZ0LGJvdHRvbSxyaWdodOi/meWbm+S4quWAvOWcqOWOn+WbvuS4iuWIqeeUqOefqemYteeahOaWueW8j+i/m+ihjOaIquWPluOAggonJycKZnJvbSBQSUwgaW1wb3J0IEltYWdlCgpmcm9tIHlvbG8gaW1wb3J0IFlPTE8KaW1wb3J0IG9zCmltcG9ydCBjdjIKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKeW9sbyA9IFlPTE8oKQoKIyB0ZXN0X3BhdGggPSByIi4vVk9DZGV2a2l0LTEvdGV0c19oZWF0bWFwIgojIHRlc3RfcGF0aCA9IHIiLi9WT0NkZXZraXQvdGV0c19oZWF0bWFwIgp0ZXN0X3BhdGg9ciIvaG9tZS90ZWNoaWsvUHJvamVjdC9EQVRBU0VUL1ZPQ2RldmtpdC14aWxhbmh1YS9WT0MyMDA3L0pQRUdJbWFnZXMiCnRlc3RfcGF0aF9saXN0ID0gb3MubGlzdGRpcih0ZXN0X3BhdGgpCnBsdC5pb24oKQoKZm9yIGkgaW4gdGVzdF9wYXRoX2xpc3Q6CiAgICBpbWcgPSBvcy5wYXRoLmpvaW4odGVzdF9wYXRoLCBpKQogICAgIyBpbWcgPSBpbnB1dCgnSW5wdXQgaW1hZ2UgZmlsZW5hbWU6JykKICAgIHRyeToKICAgICAgICBpbWFnZSA9IEltYWdlLm9wZW4oaW1nKQogICAgICAgICMgaW1hZ2UgPSBjdjIuaW1yZWFkKGltZywgLTEpCiAgICBleGNlcHQ6CiAgICAgICAgcHJpbnQoJ09wZW4gRXJyb3IhIFRyeSBhZ2FpbiEnKQogICAgICAgIGNvbnRpbnVlCiAgICBlbHNlOgogICAgICAgICMgcl9pbWFnZSA9IHlvbG8uZGV0ZWN0XzE2Yml0X2ltYWdlKGltYWdlKQogICAgICAgIHJfaW1hZ2UgPSB5b2xvLmRldGVjdF9pbWFnZShpbWFnZSkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAjIGltZzEgPSBucC5wb3dlcihyX2ltYWdlIC8gZmxvYXQobnAubWF4KHJfaW1hZ2UpKSwgMSAvIDY0KQogICAgICAgICMgaW1nMSA9IG5wLnVpbnQ4KGN2Mi5ub3JtYWxpemUoaW1nMSwgTm9uZSwgMCwgMjU1LCBjdjIuTk9STV9NSU5NQVgpKQogICAgICAgIGN2Mi5pbXNob3coInJlcyIsIHJfaW1hZ2UpCiAgICAgICAgY3YyLndhaXRLZXkoMCkKPHxmaW1fZW5kfD4="]
["c0bf280c56991b4f563485aebae9ed86afaeadfd-1","c0bf280c56991b4f563485aebae9ed86afaeadfd","PHxmaW1fcHJlZml4fD4KZnJvbSAudmNmX2ZpbGUgaW1wb3J0IFZDRkZpbGUKaW1wb3J0IHB5c2FtCmZyb20gLnZjZl9maWx0ZXJzIGltcG9ydCBWQ0ZfRmlsdGVycwpmcm9tIHR5cGluZyBpbXBvcnQgRGljdCwgTGlzdApmcm9tIC52Y2YgaW1wb3J0IFZDRgpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoKCmNsYXNzIEZpbHRlcmVkVkNGRmlsZShWQ0ZGaWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBweXNhbV92YXJpYW50X2ZpbGU6IHB5c2FtLlZhcmlhbnRGaWxlLCBmaWx0ZXJzOiBWQ0ZfRmlsdGVycywgVkNGX2NyZWF0b3JfbWV0aG9kKToKICAgICAgICBWQ0ZGaWxlLl9faW5pdF9fKHNlbGYsIHB5c2FtX3ZhcmlhbnRfZmlsZSwgVkNGX2NyZWF0b3JfbWV0aG9kKQogICAgICAgIHNlbGYuX3NhbXBsZV90b19nZW5lX3RvX1ZDRnMgPSBGaWx0ZXJlZFZDRkZpbGUuX2ZpbHRlcl9yZWNvcmRzKAogICAgICAgICAgICBzZWxmLnNhbXBsZV90b19nZW5lX3RvX1ZDRnMsIGZpbHRlcnMKICAgICAgICApCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIF9maWx0ZXJfcmVjb3JkcygKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNhbXBsZV90b19nZW5lX3RvX1ZDRnNfYWxsX3JlY29yZHM6IERpY3Rbc3RyLCBEaWN0W3N0ciwgTGlzdFtWQ0ZdXV0sCiAgICAgICAgZmlsdGVyczogVkNGX0ZpbHRlcnMsCjx8ZmltX2VuZHw+"]
["59d7c690d6bacbb5cd12f506e6c94a5192abc1f9-1","59d7c690d6bacbb5cd12f506e6c94a5192abc1f9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCByZQppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBrZXJhcy5wcmVwcm9jZXNzaW5nLnNlcXVlbmNlIGltcG9ydCBwYWRfc2VxdWVuY2VzCmZyb20ga2VyYXMucHJlcHJvY2Vzc2luZy50ZXh0IGltcG9ydCBvbmVfaG90CmZyb20ga2VyYXMubW9kZWxzIGltcG9ydCBTZXF1ZW50aWFsCmZyb20ga2VyYXMubGF5ZXJzIGltcG9ydCBFbWJlZGRpbmcsIEZsYXR0ZW4sIERlbnNlCgpkb2NzID0gWydXZWxsIGRvbmUhJywgJ0dvb2Qgd29yaycsICdHcmVhdCBlZmZvcnQnLCAnbmljZSB3b3JrJywgJ0V4Y2VsbGVudCEnLAogICAgICAgICdXZWFrJywgJ1Bvb3IgZWZmb3J0IScsICdub3QgZ29vZCcsICdwb29yIHdvcmsnLCAnQ291bGQgaGF2ZSBkb25lIGJldHRlci4nXQpsYWJlbHMgPSBbMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMF0KCmRlZiBsb2FkX2dsb3ZlX2VtYmVkZGluZ3MoZnAsIGVtYmVkZGluZ19kaW0sIGluY2x1ZGVfZW1wdHlfY2hhcj1UcnVlKToKICAgICIiIgogICAgTG9hZHMgcHJlLXRyYWluZWQgd29yZCBlbWJlZGRpbmdzIChHbG9WZSBlbWJlZGRpbmdzKQogICAgICAgIElucHV0czogLSBmcDogZmlsZXBhdGggb2YgcHJlLXRyYWluZWQgZ2xvdmUgZW1iZWRkaW5ncwogICAgICAgICAgICAgICAgLSBlbWJlZGRpbmdfZGltOiBkaW1lbnNpb24gb2YgZWFjaCB2ZWN0b3IgZW1iZWRkaW5nCiAgICAgICAgICAgICAgICAtIGdlbmVyYXRlX21hdHJpeDogd2hldGhlciB0byBnZW5lcmF0ZSBhbiBlbWJlZGRpbmcgbWF0cml4CiAgICAgICAgT3V0cHV0czoKICAgICAgICAgICAgICAgIC0gd29yZDJjb2VmczogRGljdGlvbmFyeS4gV29yZCB0byBpdHMgY29ycmVzcG9uZGluZyBjb2VmZmljaWVudHMKICAgICAgICAgICAgICAgIC0gd29yZDJpbmRleDogRGljdGlvbmFyeS4gV29yZCB0byB3b3JkLWluZGV4CiAgICAgICAgICAgICAgICAtIGVtYmVkZGluZ19tYXRyaXg6IEVtYmVkZGluZyBtYXRyaXggZm9yIEtlcmFzIEVtYmVkZGluZyBsYXllcgogICAgIiIiCiAgICAjIEZpcnN0LCBidWlsZCB0aGUgIndvcmQyY29lZnMiIGFuZCAid29yZDJpbmRleCIKICAgIHdvcmQyY29lZnMgPSB7fSAjIHdvcmQgdG8gaXRzIGNvcnJlc3BvbmRpbmcgY29lZmZpY2llbnRzCiAgICB3b3JkMmluZGV4ID0ge30gIyB3b3JkIHRvIHdvcmQtaW5kZXgKICAgIHdpdGggb3BlbihmcCkgYXMgZjoKICAgICAgICBmb3IgaWR4LCBsaW5lIGluIGVudW1lcmF0ZShmKToKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgZGF0YSA9IFt4LnN0cmlwKCkubG93ZXIoKSBmb3IgeCBpbiBsaW5lLnNwbGl0KCldCiAgICAgICAgICAgICAgICB3b3JkID0gZGF0YVswXQogICAgICAgICAgICAgICAgY29lZnMgPSBucC5hc2FycmF5KGRhdGFbMTplbWJlZGRpbmdfZGltKzFdLCBkdHlwZT0nZmxvYXQzMicpCiAgICAgICAgICAgICAgICB3b3JkMmNvZWZzW3dvcmRdID0gY29lZnMKICAgICAgICAgICAgICAgIGlmIHdvcmQgbm90IGluIHdvcmQyaW5kZXg6CiAgICAgICAgICAgICAgICAgICAgd29yZDJpbmRleFt3b3JkXSA9IGxlbih3b3JkMmluZGV4KQogICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAgICBwcmludCgnRXhjZXB0aW9uIG9jY3VycmVkIGluIGBsb2FkX2dsb3ZlX2VtYmVkZGluZ3NgOicsIGUpCiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICMgRW5kIG9mIGZvciBsb29wLgogICAgIyBFbmQgb2Ygd2l0aCBvcGVuCiAgICBpZiBpbmNsdWRlX2VtcHR5X2NoYXI6CiAgICAgICAgd29yZDJpbmRleFsnJ10gPSBsZW4od29yZDJpbmRleCkKICAgICMgU2Vjb25kLCBidWlsZCB0aGUgImVtYmVkZGluZ19tYXRyaXgiCiAgICAjIFdvcmRzIG5vdCBmb3VuZCBpbiBlbWJlZGRpbmcgaW5kZXggd2lsbCBiZSBhbGwtemVyb3MuIEhlbmNlLCB0aGUgIisxIi4KICAgIHZvY2FiX3NpemUgPSBsZW4od29yZDJjb2VmcykrMSBpZiBpbmNsdWRlX2VtcHR5X2NoYXIgZWxzZSBsZW4od29yZDJjb2VmcykKICAgIGVtYmVkZGluZ19tYXRyaXggPSBucC56ZXJvcygodm9jYWJfc2l6ZSwgZW1iZWRkaW5nX2RpbSkpCiAgICBmb3Igd29yZCwgaWR4IGluIHdvcmQyaW5kZXguaXRlbXMoKToKICAgICAgICBlbWJlZGRpbmdfdmVjID0gd29yZDJjb2Vmcy5nZXQod29yZCkKICAgICAgICBpZiBlbWJlZGRpbmdfdmVjIGlzIG5vdCBOb25lIGFuZCBlbWJlZGRpbmdfdmVjLnNoYXBlWzBdPT1lbWJlZGRpbmdfZGltOgogICAgICAgICAgICBlbWJlZGRpbmdfbWF0cml4W2lkeF0gPSBucC5hc2FycmF5KGVtYmVkZGluZ192ZWMpCiAgICAjIHJldHVybiB3b3JkMmNvZWZzLCB3b3JkMmluZGV4LCBlbWJlZGRpbmdfbWF0cml4CiAgICByZXR1cm4gd29yZDJpbmRleCwgbnAuYXNhcnJheShlbWJlZGRpbmdfbWF0cml4KQoKd29yZDJpbmRleCwgZW1iZWRkaW5nX21hdHJpeCA9IGxvYWRfZ2xvdmVfZW1iZWRkaW5ncygnLi9lbWJlZGRpbmdzL2dsb3ZlLjZCLjUwZC50eHQnLGVtYmVkZGluZ19kaW09NTApCiAgICAKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpkZWYgY3VzdG9tX3Rva2VuaXplKGRvY3MpOgogICAgb3V0cHV0X21hdHJpeCA9IFtdCiAgICBmb3IgZCBpbiBkb2NzOgogICAgICAgIGluZGljZXMgPSBbXQo8fGZpbV9lbmR8Pg=="]
["1f8d681c58dab80f85fd56d5c8d02428e7d46b22-3","1f8d681c58dab80f85fd56d5c8d02428e7d46b22","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRhdGV0aW1lCgpmcm9tIGRqYW5nby5jb25mIGltcG9ydCBzZXR0aW5ncwpmcm9tIGRqYW5nby5jb3JlLm1hbmFnZW1lbnQuYmFzZSBpbXBvcnQgQmFzZUNvbW1hbmQsIENvbW1hbmRFcnJvcgpmcm9tIGZjbV9kamFuZ28ubW9kZWxzIGltcG9ydCBGQ01EZXZpY2UKCmZyb20gYXBwcy53YWxsZXQubW9kZWxzIGltcG9ydCBXQUxMRVRfQ0FURUdPUklFUywgV0FMTEVUX1NUQVRFUywgV2FsbGV0CgoKY2xhc3MgQ29tbWFuZChCYXNlQ29tbWFuZCk6CiAgICBoZWxwID0gIk5vdGlmaWVzIGFsbCB3YWxsZXQgdXNlcnMgd2hpY2ggaGF2ZSBub3QgdmVyaWZpZWQgeWV0Igo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIGFkZF9hcmd1bWVudHMoc2VsZiwgcGFyc2VyKToKICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWRheXMiLCBkZWZhdWx0PTUsIHR5cGU9aW50KQoKPHxmaW1fZW5kfD4="]
["1f7c0f2f471ddf780c51c696a3dac5c789a9e731-4","1f7c0f2f471ddf780c51c696a3dac5c789a9e731","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiIiBMYXJnZSBzaW1wbGUgYW5pbWF0aW9ucwoiIiIKCmltcG9ydCByYW5kb20KZnJvbSAuLmVuZ2luZSBpbXBvcnQgQW5pbWF0aW9uCmZyb20gLi5zcHJpdGVzIGltcG9ydCBTb2xpZEN1YmUKCgpjbGFzcyBTd2lwZToKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi54ID0gMC4wCiAgICAgICAgc2VsZi55ID0gMC4wCiAgICAgICAgc2VsZi56ID0gMC4wCiAgICAgICAgc2VsZi5mbGF0X3N0ZXAgPSAwLjUKICAgICAgICBzZWxmLmRpYWcgPSAwLjMzCiAgICAgICAgc2VsZi5tYXggPSA4LjAKICAgICAgICBzZWxmLm1pbiA9IC04LjAKICAgICAgICBzZWxmLnJlc2V0ID0gVHJ1ZQogICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLnVwCgogICAgZGVmIG5leHQoc2VsZik6CiAgICAgICAgaWYgc2VsZi5yZXNldDoKICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHJhbmRvbS5jaG9pY2UoCiAgICAgICAgICAgICAgICBbc2VsZi5faW4sIHNlbGYub3V0LCBzZWxmLnVwLCBzZWxmLmRvd24sIHNlbGYubGVmdCwgc2VsZi5yaWdodCwKICAgICAgICAgICAgICAgICBzZWxmLl9pbiwgc2VsZi5vdXQsIHNlbGYudXAsIHNlbGYuZG93biwgc2VsZi5sZWZ0LCBzZWxmLnJpZ2h0LAogICAgICAgICAgICAgICAgIHNlbGYuZGlhZ191cF9sZWZ0X2luLCBzZWxmLmRpYWdfdXBfbGVmdF9vdXQsCiAgICAgICAgICAgICAgICAgc2VsZi5kaWFnX3VwX3JpZ2h0X2luLCBzZWxmLmRpYWdfdXBfcmlnaHRfb3V0LAogICAgICAgICAgICAgICAgIHNlbGYuZGlhZ19kb3duX2xlZnRfaW4sIHNlbGYuZGlhZ19kb3duX2xlZnRfb3V0LAogICAgICAgICAgICAgICAgIHNlbGYuZGlhZ19kb3duX3JpZ2h0X2luLCBzZWxmLmRpYWdfZG93bl9yaWdodF9vdXRdKQogICAgICAgIHJldHVybiBzZWxmLnN0YXRlKCkKCiAgICBkZWYgdXAoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuc3RlcCgtOCwgMCwgMCwgc2VsZi5mbGF0X3N0ZXAsIDAsIDApCgogICAgZGVmIGRvd24oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuc3RlcCg4LCAwLCAwLCAtc2VsZi5mbGF0X3N0ZXAsIDAsIDApCgogICAgZGVmIGxlZnQoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuc3RlcCgwLCAtOCwgMCwgMCwgc2VsZi5mbGF0X3N0ZXAsIDApCgogICAgZGVmIHJpZ2h0KHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnN0ZXAoMCwgOCwgMCwgMCwgLXNlbGYuZmxhdF9zdGVwLCAwKQoKICAgIGRlZiBfaW4oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuc3RlcCgwLCAwLCAtOCwgMCwgMCwgc2VsZi5mbGF0X3N0ZXApCgogICAgZGVmIG91dChzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5zdGVwKDAsIDAsIDgsIDAsIDAsIC1zZWxmLmZsYXRfc3RlcCkKCiAgICBkZWYgZGlhZ191cF9sZWZ0X2luKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnN0ZXAoLTgsIC04LCAtOCwgc2VsZi5kaWFnLCBzZWxmLmRpYWcsIHNlbGYuZGlhZykKCiAgICBkZWYgZGlhZ191cF9sZWZ0X291dChzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5zdGVwKC04LCAtOCwgOCwgc2VsZi5kaWFnLCBzZWxmLmRpYWcsIC1zZWxmLmRpYWcpCgogICAgZGVmIGRpYWdfdXBfcmlnaHRfaW4oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuc3RlcCgtOCwgOCwgLTgsIHNlbGYuZGlhZywgLXNlbGYuZGlhZywgc2VsZi5kaWFnKQoKICAgIGRlZiBkaWFnX3VwX3JpZ2h0X291dChzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5zdGVwKC04LCA4LCA4LCBzZWxmLmRpYWcsIC1zZWxmLmRpYWcsIC1zZWxmLmRpYWcpCgogICAgZGVmIGRpYWdfZG93bl9sZWZ0X2luKHNlbGYpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcmV0dXJuIHNlbGYuc3RlcCg4LCAtOCwgLTgsIC1zZWxmLmRpYWcsIHNlbGYuZGlhZywgc2VsZi5kaWFnKQoKPHxmaW1fZW5kfD4="]
["e61f73e3a683eacb4b3d33af756ccb344b129dba-1","e61f73e3a683eacb4b3d33af756ccb344b129dba","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCiAgICBzdXJmYWNlCiAgICB+fn5+fn5+CgogICAgc3VyZmFjZSBtb2RlbCBjb250YWlucyBhbGwgdGhlIGFjdGlvbiB3LnIudC4gdGhlIHN1cmZhY2UuCiIiIgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdApmcm9tIG1wbF90b29sa2l0cy5tcGxvdDNkIGltcG9ydCBBeGVzM0QKaW1wb3J0IHhzcGxpbmUKaW1wb3J0IGxpbWV0cgppbXBvcnQgbXJicnQKaW1wb3J0IHV0aWxzCmltcG9ydCBtdHNsaWNlCgoKIyBmaXQKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGVmIGZpdF9zdXJmYWNlKHRkYXRhX2FnZywKICAgICAgICAgICAgICAgIHNjYWxlX3BhcmFtcz1bNDAuMCwgMS4yNV0sCiAgICAgICAgICAgICAgICBsaW5lYXJfbm9fbW9ubz1GYWxzZSk6CiAgICAiIiJmaXQgdGhlIG1lYW4gc3VyZmFjZSIiIgoKICAgICMgdW5wYWNrIGRhdGEKICAgIG10ID0gdGRhdGFfYWdnLm1lYW5fdGVtcAogICAgZHQgPSB0ZGF0YV9hZ2cuZGFpbHlfdGVtcAogICAgc2NhbGVkX2R0ID0gdXRpbHMuc2NhbGVfZGFpbHlfdGVtcChtdCwgZHQsIHNjYWxlX3BhcmFtcykKCiAgICBvYnNfbWVhbiA9IHRkYXRhX2FnZy5vYnNfbWVhbgogICAgb2JzX3N0ZCA9IHRkYXRhX2FnZy5vYnNfc3RkCiAgICBzdHVkeV9zaXplcyA9IHRkYXRhX2FnZy5zdHVkeV9zaXplcwoKICAgICMgY3JlYXRlIHNwbGluZQogICAgbXRfa25vdHMgPSBucC5saW5zcGFjZShtdC5taW4oKSwgbXQubWF4KCksIDIpCiAgICBtdF9kZWdyZWUgPSAzCiAgICBpZiBsaW5lYXJfbm9fbW9ubzoKICAgICAgICBkdF9kZWdyZWUgPSAxCiAgICAgICAgZHRfa25vdHMgPSBucC5saW5zcGFjZShzY2FsZWRfZHQubWluKCksIHNjYWxlZF9kdC5tYXgoKSwgMikKICAgIGVsc2U6CiAgICAgICAgZHRfZGVncmVlID0gMwogICAgICAgIGR0X2tub3RzID0gbnAubGluc3BhY2Uoc2NhbGVkX2R0Lm1pbigpLCBzY2FsZWRfZHQubWF4KCksIDMpCiAgICAgICAgIyBBZGQgZXh0cmEga25vdAogICAgICAgICMga25vdF9zY2FsZSA9IG5wLmFycmF5KFswLjAsIDAuNSwgMC43NSwgMS4wXSkKICAgICAgICAjIGR0X2tub3RzID0gc2NhbGVkX2R0Lm1pbigpICsga25vdF9zY2FsZSooc2NhbGVkX2R0Lm1heCgpIC0gc2NhbGVkX2R0Lm1pbigpKQogICAgc3BsaW5lX2xpc3QgPSBbeHNwbGluZS5ORFhTcGxpbmUoMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdF9rbm90cywgZHRfa25vdHNdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW210X2RlZ3JlZSwgZHRfZGVncmVlXSldCgogICAgIyBjcmVhdGUgbXJicnQgb2JqZWN0CiAgICB4X2Nvdl9saXN0ID0gW3sKICAgICAgICAnY292X3R5cGUnOiAnbmRzcGxpbmUnLAogICAgICAgICdzcGxpbmVfaWQnOiAwLAogICAgICAgICdtYXQnOiBucC52c3RhY2soKG10LCBzY2FsZWRfZHQpKQogICAgfV0KICAgIHpfY292X2xpc3QgPSBbewogICAgICAgICdjb3ZfdHlwZSc6ICdsaW5lYXInLAogICAgICAgICdtYXQnOiBucC5vbmVzKG10LnNpemUpCiAgICB9XQoKICAgIG1yID0gbXJicnQuTVJfQlJUKG9ic19tZWFuLAogICAgICAgICAgICAgICAgICAgICAgb2JzX3N0ZCwKICAgICAgICAgICAgICAgICAgICAgIHN0dWR5X3NpemVzLAogICAgICAgICAgICAgICAgICAgICAgeF9jb3ZfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgIHpfY292X2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICBzcGxpbmVfbGlzdCkKCiAgICAjIGFkZCBwcmlvcnMKICAgIHByaW9yX2xpc3QgPSBbCiAgICAgICAgewogICAgICAgICAgICAncHJpb3JfdHlwZSc6ICduZHNwbGluZV9zaGFwZV9mdW5jdGlvbl91cHJpb3InLAogICAgICAgICAgICAneF9jb3ZfaWQnOiAwLAogICAgICAgICAgICAnaW50ZXJ2YWwnOiBbW210Lm1pbigpLCBtdC5tYXgoKV0sCiAgICAgICAgICAgICAgICAgICAgICAgICBbc2NhbGVkX2R0Lm1pbigpLCBzY2FsZWRfZHQubWF4KCldXSwKICAgICAgICAgICAgJ2luZGljYXRvcic6IFstMS4wLCAxLjBdLAogICAgICAgICAgICAnbnVtX3BvaW50cyc6IFsyMCwgMjBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICdwcmlvcl90eXBlJzogJ25kc3BsaW5lX3NoYXBlX21vbm90b25pY2l0eScsCiAgICAgICAgICAgICd4X2Nvdl9pZCc6IDAsCiAgICAgICAgICAgICdkaW1faWQnOiAxLAogICAgICAgICAgICAnaW50ZXJ2YWwnOiBbW210Lm1pbigpLCBtdC5tYXgoKV0sCiAgICAgICAgICAgICAgICAgICAgICAgICBbMC43LCBzY2FsZWRfZHQubWF4KCldXSwKICAgICAgICAgICAgJ2luZGljYXRvcic6ICdpbmNyZWFzaW5nJywKICAgICAgICAgICAgJ251bV9wb2ludHMnOiBbMjAsIDEwXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAncHJpb3JfdHlwZSc6ICd6X2Nvdl91cHJpb3InLAogICAgICAgICAgICAnel9jb3ZfaWQnOiAwLAogICAgICAgICAgICAncHJpb3InOiBucC5hcnJheShbWzAuMF0qbXIua19nYW1tYSwgWzAuMF0qbXIua19nYW1tYV0pCiAgICAgICAgfQogICAgXQogICAgaWYgbm90IGxpbmVhcl9ub19tb25vOgogICAgICAgIHByaW9yX2xpc3QgKz0gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAncHJpb3JfdHlwZSc6ICduZHNwbGluZV9zaGFwZV9tb25vdG9uaWNpdHknLAogICAgICAgICAgICAgICAgJ3hfY292X2lkJzogMCwKICAgICAgICAgICAgICAgICdkaW1faWQnOiAxLAogICAgICAgICAgICAgICAgJ2ludGVydmFsJzogW1ttdC5taW4oKSwgbXQubWF4KCldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzY2FsZWRfZHQubWluKCksIC0wLjc1XV0sCiAgICAgICAgICAgICAgICAnaW5kaWNhdG9yJzogJ2RlY3JlYXNpbmcnLAogICAgICAgICAgICAgICAgJ251bV9wb2ludHMnOiBbMjAsIDEwXQogICAgICAgICAgICB9LAogICAgICAgIF0KCiAgICBtci5hZGRQcmlvcnMocHJpb3JfbGlzdCkKCiAgICAjIGluaXRpYWxpemF0aW9uCiAgICBrX2JldGEgPSBtci5sdC5rX2JldGEKICAgIGtfZ2FtbWEgPSBtci5sdC5rX2dhbW1hCiAgICBYID0gbXIubHQuSkYobXIubHQuYmV0YSkKICAgIFMgPSBtci5sdC5TCiAgICBWID0gUyoqMgogICAgWSA9IG1yLmx0LlkKICAgIGJldGEwID0gbnAubGluYWxnLnNvbHZlKChYLlQvVikuZG90KFgpLCAoWC5UL1YpLmRvdChZKSkKICAgIGdhbW1hMCA9IG5wLnplcm9zKGtfZ2FtbWEpCiAgICB4MCA9IG5wLmhzdGFjaygoYmV0YTAsIGdhbW1hMCkpCgogICAgIyBmaXQgdGhlIG1vZGVsIGFuZCBzdG9yZSB0aGUgcmVzdWx0CiAgICBtci5maXRNb2RlbCh4MD14MCkKCiAgICAjIGNvbXB1dGUgcG9zdGVyaW9yIHZhcmlhbmNlIGZvciB0aGUgYmV0YQogICAgIyBleHRyYWN0IHRoZSBtYXRyaXgKICAgIGJldGFfdmFyID0gKFguVC9WKS5kb3QoWCkKCiAgICBpZiBtci5sdC51c2VfcmVndWxhcml6ZXI6CiAgICAgICAgSCA9IG5wLnZzdGFjayhbbXIubHQuSChucC5oc3RhY2sobnAuZXllKDEsIGtfYmV0YSwgaSkucmVzaGFwZShrX2JldGEsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5wLnplcm9zKGtfZ2FtbWEpKSkKICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShrX2JldGEpXSkuVAogICAgICAgIFNIID0gbXIubHQuaFsxXQogICAgICAgIFZIID0gU0gqKjIKICAgICAgICBiZXRhX3ZhciArPSAoSC5UL1ZIKS5kb3QoVkgpCgogICAgYmV0YV92YXIgPSBucC5saW5hbGcuaW52KGJldGFfdmFyKQoKICAgIG1lYW5fdGVtcCA9IHRkYXRhX2FnZy51bmlxdWVfbWVhbl90ZW1wCiAgICBkYWlseV90ZW1wX3JhbmdlID0gW10KICAgIGZvciBtdCBpbiBtZWFuX3RlbXA6CiAgICAgICAgdGRhdGFfYWdnX210ID0gbXRzbGljZS5leHRyYWN0X210c2xpY2UodGRhdGFfYWdnLCBtdCkKICAgICAgICBkYWlseV90ZW1wX3JhbmdlLmFwcGVuZChbdGRhdGFfYWdnX210LmRhaWx5X3RlbXAubWluKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkYXRhX2FnZ19tdC5kYWlseV90ZW1wLm1heCgpXSkKCiAgICBzdXJmYWNlX3Jlc3VsdCA9IHV0aWxzLlN1cmZhY2VSZXN1bHQoCiAgICAgICAgICAgIG1yLmJldGFfc29sbiwKICAgICAgICAgICAgYmV0YV92YXIsCiAgICAgICAgICAgIHNwbGluZV9saXN0WzBdLAogICAgICAgICAgICBtZWFuX3RlbXAsCiAgICAgICAgICAgIGRhaWx5X3RlbXBfcmFuZ2UsCiAgICAgICAgICAgIHNjYWxlX3BhcmFtcz1zY2FsZV9wYXJhbXMpCgogICAgcmV0dXJuIHN1cmZhY2VfcmVzdWx0CgojIHZpegojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkZWYgcGxvdF9zdXJmYWNlKHRkYXRhX2FnZywgc3VyZmFjZV9yZXN1bHQsIG51bV9sZXZlbHM9MTEpOgogICAgIiIicGxvdCB0aGUgM0Qgc3VyZmFjZSBhbmQgdGhlIGxldmVsIHNldCIiIgoKICAgICMgY2FsY3VsYXRlIHRoZSAzRCBzdXJmYWNlCiAgICBudW1fbXQgPSAxMDEKICAgIG51bV9kdCA9IDEwMQogICAgbWVhbl90ZW1wID0gbnAubGluc3BhY2UodGRhdGFfYWdnLm1lYW5fdGVtcC5taW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkYXRhX2FnZy5tZWFuX3RlbXAubWF4KCksIG51bV9tdCkKICAgIGRhaWx5X3RlbXAgPSBucC5saW5zcGFjZSh0ZGF0YV9hZ2cuZGFpbHlfdGVtcC5taW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGF0YV9hZ2cuZGFpbHlfdGVtcC5tYXgoKSwgbnVtX2R0KQogICAgTVQsIERUID0gbnAubWVzaGdyaWQobWVhbl90ZW1wLCBkYWlseV90ZW1wKQogICAgbXQgPSBNVC5mbGF0dGVuKCkKICAgIGR0ID0gRFQuZmxhdHRlbigpCgogICAgIyBjb21wdXRlIHJlc2lkdWFsIHN1cmZhY2UKICAgIHNjYWxlZF9kdCA9IHV0aWxzLnNjYWxlX2RhaWx5X3RlbXAobXQsIGR0LCBzdXJmYWNlX3Jlc3VsdC5zY2FsZV9wYXJhbXMpCiAgICBpbnZhbGlkX2lkID0gKHNjYWxlZF9kdCA8PSAtMS4wKSB8IChzY2FsZWRfZHQgPiAwLjc1KQoKICAgIHN1cmZhY2UgPSBzdXJmYWNlX3Jlc3VsdC5zdXJmYWNlX2Z1bmMobXQsIGR0KQogICAgc3VyZmFjZVtpbnZhbGlkX2lkXSA9IG5wLmluZgogICAgc3VyZmFjZSA9IHN1cmZhY2UucmVzaGFwZShudW1fbXQsIG51bV9kdCkKCiAgICAjIHBsb3QgM0Qgc3VyZmFjZQogICAgZmlnID0gcGx0LmZpZ3VyZShmaWdzaXplPSgxNiwgOCkpCiAgICBheCA9IGZpZy5hZGRfc3VicGxvdCgxMjEsIHByb2plY3Rpb249JzNkJykKICAgIGF4LnNjYXR0ZXIoCiAgICAgICAgICAgIHRkYXRhX2FnZy5tZWFuX3RlbXAsCiAgICAgICAgICAgIHRkYXRhX2FnZy5kYWlseV90ZW1wLAogICAgICAgICAgICB0ZGF0YV9hZ2cub2JzX21lYW4sCiAgICAgICAgICAgIHM9MS4wL3RkYXRhX2FnZy5vYnNfc3RkLAogICAgICAgICAgICBjPXRkYXRhX2FnZy5vYnNfbWVhbikKCiAgICBheC5wbG90X3N1cmZhY2UoTVQsIERULCBzdXJmYWNlKQogICAgYXguc2V0X3hsYWJlbCgnbWVhbiB0ZW1wIGRlZ3JlZScpCiAgICBheC5zZXRfeWxhYmVsKCdkYWlseSB0ZW1wIGNhdCcpCiAgICBheC5zZXRfemxhYmVsKCdsbiBycicpCgogICAgIyBwbG90IHRoZSBsZXZlbCBzZXQKICAgIGF4ID0gZmlnLmFkZF9zdWJwbG90KDEyMikKICAgIGF4LnNjYXR0ZXIoCiAgICAgICAgICAgIHRkYXRhX2FnZy5tZWFuX3RlbXAsCiAgICAgICAgICAgIHRkYXRhX2FnZy5kYWlseV90ZW1wLAogICAgICAgICAgICBzPTEuMC90ZGF0YV9hZ2cub2JzX3N0ZCwKICAgICAgICAgICAgYz10ZGF0YV9hZ2cub2JzX21lYW4pCiAgICBjID0gYXguY29udG91cihNVCwgRFQsIHN1cmZhY2UsCiAgICAgICAgICAgICAgICAgICBsZXZlbHM9bnAubGluc3BhY2UoLTAuNSwgMC41LCBudW1fbGV2ZWxzKSkKICAgIGF4LnNldF94bGFiZWwoJ21lYW4gdGVtcCBkZWdyZWUnKQogICAgYXguc2V0X3lsYWJlbCgnZGFpbHkgdGVtcCBjYXQnKQogICAgYXguY2xhYmVsKGMpCgogICAgIyBtaW5fZGFpbHlfdGVtcF9pZCA9IG5wLmFycmF5KFtucC5hcmdtaW4oc3VyZmFjZVs6LCBpXSkKICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtX210KV0pCiAgICAjIG1pbl9kYWlseV90ZW1wID0gZGFpbHlfdGVtcFttaW5fZGFpbHlfdGVtcF9pZF0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgbWluX2RhaWx5X3RlbXAgPSBucC5hcnJheShbCiAgICAgICAgc3VyZmFjZV9yZXN1bHQudG1ybF9hdF9tZWFuX3RlbXAobWVhbl90ZW1wW2ldKQogICAgICAgIGZvciBpIGluIHJhbmdlKG51bV9tdCkKICAgIF0pCjx8ZmltX2VuZHw+"]
["1ff118a894502b2d67ab0709012323e87faa65d2-5","1ff118a894502b2d67ab0709012323e87faa65d2","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBJbXBvcnQgYWxsIHBhY2thZ2VzIGFuZCBmdW5jdGlvbnMKZnJvbSBwYWNrYWdlc01hbmFnZXIgaW1wb3J0ICoKZnJvbSBkeW5hbWljUXVlcnkgaW1wb3J0IGdldFN1cnZleURhdGEKZnJvbSB0cmlnZ2VyIGltcG9ydCBnZXRTdXJ2ZXlTdHJ1Y3R1cmUKPHxmaW1fZW5kfD4="]
["0558ff34dd444e377a34fa6ee27cf836584ad3a2-1","0558ff34dd444e377a34fa6ee27cf836584ad3a2","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCgpmcm9tIHV0aWxzLm1pc2MudGhyb3R0bGluZyBpbXBvcnQgcmF0ZV9saW1pdApmcm9tIGFpb2dyYW0gaW1wb3J0IHR5cGVzCmZyb20gbG9hZGVyIGltcG9ydCBkcAppbXBvcnQgYXN5bmNpbwoKCiIiIgoKICAgIENyZWF0ZWQgb24gMTAuMDkuMjAyMQoKICAgIEBhdXRob3I6IE5pa2l0YQoKCiIiIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKQHJhdGVfbGltaXQoNSwgJ3Vua25vd25fc3ltYm9sJykKQGRwLm1lc3NhZ2VfaGFuZGxlcihyZWdleHA9cideW1xXXSskJykKPHxmaW1fZW5kfD4="]
["e9dd8a621cec3837a5e7a0b81edf8e87e5b1b164-3","e9dd8a621cec3837a5e7a0b81edf8e87e5b1b164","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwoKCiIiIgrQmtC70Y7Rh9C10LLRi9C1INC60L7QvNC/0LXRgtC10L3RhtC40LgKIiIiCgoKY2xhc3MgR3JvdXBPZk92ZXJQcm9mQ29tcGV0ZW5jZXNJbkdlbmVyYWxDaGFyYWN0ZXJpc3RpYyhtb2RlbHMuTW9kZWwpOgogICAgIiIiCiAgICDQk9GA0YPQv9C/0LAg0L3QsNC0LdC/0YDQvtGE0LXRgdGB0LjQvtC90LDQu9GM0L3Ri9GFINC60L7QvNC/0LXRgtC10L3RhtC40Lkg0LIg0L7QsdGJ0LXQuSDRhdCw0YDQsNC60YLQtdGA0LjRgdGC0LjQutC1CiAgICAiIiIKICAgIG5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTEyLCB2ZXJib3NlX25hbWU9ItGC0YDRg9C00L7QstCw0Y8g0YTRg9C90LrRhtC40Y8iKQogICAgZ2VuZXJhbF9jaGFyYWN0ZXJpc3RpYyA9IG1vZGVscy5Gb3JlaWduS2V5KCdHZW5lcmFsQ2hhcmFjdGVyaXN0aWNzJywgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2VfbmFtZT0i0J7QsdGJ0LDRjyDRhdCw0YDQsNC60YLQtdGA0LjRgdGC0LjQutCwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGVkX25hbWUgPSAiZ3JvdXBfb2Zfb3Zlcl9wcm9mX2NvbXBldGVuY2VzIikKCiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc3RyKHNlbGYubmFtZSkgKyAnLycgKyBzdHIoc2VsZi5nZW5lcmFsX2NoYXJhY3RlcmlzdGljKQoKCmNsYXNzIE92ZXJQcm9mQ29tcGV0ZW5jZXNJbkdyb3VwT2ZHZW5lcmFsQ2hhcmFjdGVyaXN0aWMobW9kZWxzLk1vZGVsKToKICAgICIiIgogICAg0L3QsNC0LdC/0YDQvtGE0LXRgdGB0LjQvtC90LDQu9GM0L3QsNGPINC60L7QvNC/0LXRgtC10L3RhtC40Y8g0LIg0L7QsdGJ0LXQuSDRhdCw0YDQsNC60YLQtdGA0LjRgdGC0LjQutC1CiAgICAiIiIKCiAgICBncm91cF9vZl9wayA9IG1vZGVscy5Gb3JlaWduS2V5KCdHcm91cE9mT3ZlclByb2ZDb21wZXRlbmNlc0luR2VuZXJhbENoYXJhY3RlcmlzdGljJywgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NlX25hbWU9ItCT0YDRg9C/0L/QsCDQvdCw0LQt0L/RgNC+0YTQtdGB0YHQuNC+0L3QsNC70YzQvdGL0YUg0LrQvtC80L/QtdGC0LXQvdGG0LjQuSDQsiDQntClIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZF9uYW1lID0gImNvbXBldGVuY2VfaW5fZ3JvdXBfb2Zfb3Zlcl9wcm9mX2NvbXBldGVuY2VzIikKICAgICNsYWJvcl9mdW5jdGlvbnMgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTEyLCB2ZXJib3NlX25hbWU9ItCi0YDRg9C00L7QstCw0Y8g0YTRg9C90LrRhtC40Y8iKQogICAgY29tcGV0ZW5jZSA9IG1vZGVscy5Gb3JlaWduS2V5KCdDb21wZXRlbmNlJywgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFLCB2ZXJib3NlX25hbWU9ItCa0L7QvNC/0LXRgtC10L3RhtC40Y8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsYW5rPVRydWUsIG51bGw9VHJ1ZSkKCgogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHN0cihzZWxmLmdyb3VwX29mX3BrKSArICcvJyArIHN0cihzZWxmLmNvbXBldGVuY2UpCgoKY2xhc3MgSW5kaWNhdG9ySW5PdmVyUHJvZkNvbXBldGVuY2VJbkdlbmVyYWxDaGFyYWN0ZXJpc3RpYyhtb2RlbHMuTW9kZWwpOgogICAgIiIiCiAgICDQmNC90LTQuNC60LDRgtC+0YAg0LrQvtC80L/QtdGC0LXQvdGG0LjQuCDQsiDQvtCx0YnQtdC5INGF0LDRgNCw0LrRgtC10YDQuNGB0YLQuNC60LUKICAgICIiIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgY29tcGV0ZW5jZV9pbl9ncm91cF9vZl9wayA9IG1vZGVscy5Gb3JlaWduS2V5KCdPdmVyUHJvZkNvbXBldGVuY2VzSW5Hcm91cE9mR2VuZXJhbENoYXJhY3RlcmlzdGljJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbl9kZWxldGU9bW9kZWxzLkNBU0NBREUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZV9uYW1lPSLQk9GA0YPQv9C/0LAg0L3QsNC0LdC/0YDQvtGE0LXRgdGB0LjQvtC90LDQu9GM0L3Ri9GFINC60L7QvNC/0LXRgtC10L3RhtC40Lkg0LIg0J7QpSIsCjx8ZmltX2VuZHw+"]
["9b1cde5539a4901a9037f7ef9608d2e70bf73cb6-1","9b1cde5539a4901a9037f7ef9608d2e70bf73cb6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKCgpjbGFzcyBHcmFkaWVudExheWVyKHRmLmtlcmFzLmxheWVycy5MYXllcik6CiAgICAiIiIKICAgIENvbXB1dGluZyB0aGUgMXN0IHRpbWUgZGVyaXZhdGl2ZSBhbmQgMXN0IGFuZCAybmQgYW5kIDNyZCBzcGFjZQogICAgZGVyaXZhdGl2ZXMgZm9yIHRoZSBLdXJhbW90by1TaXZhc2hpbnNreSBlcXVhdGlvbi4KCiAgICBBdHRyaWJ1dGVzOgogICAgICAgIG1vZGVsOiBrZXJhcyBuZXR3b3JrIG1vZGVsLgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCAqKmt3YXJncyk6CiAgICAgICAgIiIiCiAgICAgICAgQXJnczoKICAgICAgICAgICAgbW9kZWw6IGtlcmFzIG5ldHdvcmsgbW9kZWwuCiAgICAgICAgIiIiCgogICAgICAgIHNlbGYubW9kZWwgPSBtb2RlbAogICAgICAgIHN1cGVyKCkuX19pbml0X18oKiprd2FyZ3MpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBAdGYuZnVuY3Rpb24KICAgIGRlZiBjYWxsKHNlbGYsIHR4KToKICAgICAgICAiIiIKICAgICAgICBDb21wdXRpbmcgdGhlIDFzdCB0aW1lIGRlcml2YXRpdmUgYW5kIDFzdCBhbmQgMm5kIGFuZCAzcmQgc3BhY2UKPHxmaW1fZW5kfD4="]
["9b1b0886c10277cbc103105376c7baf6bda982d2-2","9b1b0886c10277cbc103105376c7baf6bda982d2","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgpjbGFzcyBNYXJnYXJpdGFCdWlsZGVyKFBpenphQnVpbGRlcik6CiAgICBkZWYgbWFrZV9kb3VnaChzZWxmKSAtPiBQaXp6YUJ1aWxkZXI6CiAgICAgICAgc2VsZi5fcGl6emEuZG91Z2ggPSBEb3VnaEVudW0udGhpbgoKICAgICAgICByZXR1cm4gc2VsZgoKICAgIGRlZiBhZGRfc2F1Y2Uoc2VsZikgLT4gUGl6emFCdWlsZGVyOgogICAgICAgIHNlbGYuX3BpenphLnNhdWNlID0gU2F1Y2VFbnVtLnBlc3RvCgogICAgICAgIHJldHVybiBzZWxmCgogICAgZGVmIGFkZF9jaGVlc2VzKHNlbGYpIC0+IFBpenphQnVpbGRlcjoKICAgICAgICBzZWxmLl9waXp6YS5hZGRfY2hlZXNlKENoZWVzZUVudW0ubW96emFyZWxsYSkKCiAgICAgICAgcmV0dXJuIHNlbGYKPHxmaW1fc3VmZml4fD4KZnJvbSBjcmVhdGlvbmFsLmJ1aWxkZXIubG9naWMgaW1wb3J0IFBpenphQnVpbGRlcgpmcm9tIGNyZWF0aW9uYWwuYnVpbGRlci5kYXRhIGltcG9ydCBEb3VnaEVudW0sIFNhdWNlRW51bSwgQ2hlZXNlRW51bQoKCjx8ZmltX2VuZHw+"]
["fd32ebb0be70f00520bffe81b49836766fe2917e-4","fd32ebb0be70f00520bffe81b49836766fe2917e","PHxmaW1fcHJlZml4fD4KJycnCkdpdmVuIHR3byBpbnRlZ2VycyBuIGFuZCBrLCByZXR1cm4gYWxsIHBvc3NpYmxlIGNvbWJpbmF0aW9ucyBvZiBrIG51bWJlcnMgb3V0IG9mIHRoZSByYW5nZSBbMSwgbl0uCgpZb3UgbWF5IHJldHVybiB0aGUgYW5zd2VyIGluIGFueSBvcmRlci4KCiAKCkV4YW1wbGUgMToKCklucHV0OiBuID0gNCwgayA9IDIKT3V0cHV0OgpbCiAgWzIsNF0sCiAgWzMsNF0sCiAgWzIsM10sCiAgWzEsMl0sCiAgWzEsM10sCiAgWzEsNF0sCl0KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KJycnCgoKZGVmIGNvbWJpbmUobjogaW50LCBrOiBpbnQpOgo8fGZpbV9lbmR8Pg=="]
["23cdbcd97f34d172515263544b2b316b1e18e77d-1","23cdbcd97f34d172515263544b2b316b1e18e77d","PHxmaW1fcHJlZml4fD4KIyB0cmlwbGUtYWxwaGEgcmF0ZSBtb2R1bGUgZ2VuZXJhdG9yIGZvciBhIGZvcnRyYW4gbmV0d29yawoKZnJvbSBweXJlYWNsaWIubmV0d29ya3MgaW1wb3J0IFN1bmRpYWxzTmV0d29yawoKZmlsZXMgPSBbImMxMi1nYWEtaGU0LWZ5MDUiLAogICAgICAgICAiaGU0LWFhZy1jMTItZnkwNSJdCjx8ZmltX2hvbGV8PgoKCgo8fGZpbV9zdWZmaXh8PgoKdHJpcGxlX2FscGhhX25ldCA9IFN1bmRpYWxzTmV0d29yayhmaWxlcykKdHJpcGxlX2FscGhhX25ldC53cml0ZV9uZXR3b3JrKCkKCjx8ZmltX2VuZHw+"]
["23bea0b0740843a93fe39a77f09c06efa2de9ed5-2","23bea0b0740843a93fe39a77f09c06efa2de9ed5","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcDFfcG9pbnRzID0gMTAwCnAyX3BvaW50cyA9IDEwMAo8fGZpbV9lbmR8Pg=="]
["fb35cc5ad6251bf154a0c876323a2f9afdafb5d8-5","fb35cc5ad6251bf154a0c876323a2f9afdafb5d8","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNzdgoKPHxmaW1faG9sZXw+CkZpbmQgdGhlIG51bWJlciB0aGF0IHNwZW50IHRoZSBtb3N0IGFtb3VudCBvZiB0aW1lIG9uIGEgY2FsbCAoY2FsbGluZyBhbmQgcmVjZWl2aW5nIGNvbWJpbmVkKSBpbiBhIHNpbmdsZSBtb250aC4KCk91dHB1dCB0aGUgbnVtYmVyLCB0aGUgbW9udGgsIGFuZCB0aGUgdG90YWwgdGltZSAoaW4gc2Vjb25kcykgdGhhdCB0aGUgbnVtYmVyIHNwZW50IG9uIGEgY2FsbCBpbiB0aGF0IG1vbnRoOgoiPHRlbGVwaG9uZSBudW1iZXI+IHNwZW50IHRoZSBsb25nZXN0IHRpbWUsIDx0b3RhbCB0aW1lPiBzZWNvbmRzLCBvbiB0aGUgcGhvbmUgZHVyaW5nIFNlcHRlbWJlciAyMDE2LiIKIiIiCgp3aXRoIG9wZW4oJ2NhbGxzLmNzdicsICdyJykgYXMgZjoKICAgIHJlYWRlciA9IGNzdi5yZWFkZXIoZikKICAgIHRvdGFscyA9IHt9CgogICAgZm9yIGNhbGwgaW4gbGlzdChyZWFkZXIpOgogICAgICAgIGNhbGxpbmcsIHJlY2VpdmluZywgdGltZXN0YW1wLCBzZWNvbmRzID0gY2FsbAogICAgICAgIHNlY29uZHMgPSBpbnQoc2Vjb25kcykKCiAgICAgICAgdG90YWxzW2NhbGxpbmddID0gdG90YWxzW2NhbGxpbmddICsgc2Vjb25kcyBpZiBjYWxsaW5nIGluIHRvdGFscyBlbHNlIHNlY29uZHMKICAgICAgICB0b3RhbHNbcmVjZWl2aW5nXSA9IHRvdGFsc1tyZWNlaXZpbmddICsgc2Vjb25kcyBpZiByZWNlaXZpbmcgaW4gdG90YWxzIGVsc2Ugc2Vjb25kcwoKIyBSZXRyaWV2ZSB0aGUga2V5ICh0ZWxlcGhvbmUgbnVtYmVyKSBvZiB0aGUgbGFyZ2VzdCB2YWx1ZSAoZHVyYXRpb24pCnBob25lX251bWJlciA9IG1heCh0b3RhbHMua2V5cygpLCBrZXk9KGxhbWJkYSBrOiB0b3RhbHNba10pKQoKcHJpbnQoZid7cGhvbmVfbnVtYmVyfSBzcGVudCB0aGUgbG9uZ2VzdCB0aW1lLCB7dG90YWxzW3Bob25lX251bWJlcl19IHNlY29uZHMsIG9uIHRoZSBwaG9uZSBkdXJpbmcgU2VwdGVtYmVyIDIwMTYuJykKPHxmaW1fc3VmZml4fD4KIiIiClRBU0sgMjoKVGhlIG9mZmljaWFsIGV4cGxhbmF0aW9uIGlzIGluY3JlZGlibHkgcG9vcmx5LXdvcmRlZC4gVGhpcyBpcyB3aGF0IEkndmUgYmVlbiBhYmxlIHRvIGdsZWFuIGZyb20gc29tZSBmb3J1bSBkaXNjdXNzaW9ucy4KCjx8ZmltX2VuZHw+"]
["1f8b718d6862729613ff9f9f3884209785183621-3","1f8b718d6862729613ff9f9f3884209785183621","PHxmaW1fcHJlZml4fD4KJycnCiAgICBfX2luaXRfXy5weQonJycKCmZyb20gYXNzZW1ibGVyLmxleGVyIGltcG9ydCBsZXhlcgpmcm9tIGFzc2VtYmxlci5wYXJzZXIgaW1wb3J0IHBhcnNlcgpmcm9tIGFzc2VtYmxlci5wcmVwcm9jZXNzIGltcG9ydCBzYW5pdGl6ZQoKCmRlZiBjb21waWxlX3NvdXJjZShzb3VyY2U6IHN0ciwgZGVidWdlcj1GYWxzZSkgLT4gYnl0ZWFycmF5OgogICAgIiIiCjx8ZmltX2hvbGV8PgogICAgIiIiCiAgICAjIFByZXByb2Nlc3MgdGhlIHNvdXJjZSBjb2RlLgogICAgc291cmNlID0gc2FuaXRpemUoc291cmNlKQoKICAgICMgTGV4IHRoZSBzb3VyY2UgY29kZS4KICAgIHRva2VucyA9IGxleGVyKHNvdXJjZSkKCiAgICBpZiBkZWJ1Z2VyOgogICAgICAgIHByaW50KCdUT0tFTlM6JywgdG9rZW5zLCAnXG4nKQoKICAgICMgUGFyc2UgdGhlIHNvdXJjZSBjb2RlLgogICAgYXN0LCBzaW1ib2xfdGFibGUgPSBwYXJzZXIodG9rZW5zKQoKICAgIGlmIGRlYnVnZXI6CiAgICAgICAgcHJpbnQoJ1NJTUJPTCBUQUJMRTonLCBzaW1ib2xfdGFibGUsICdcbicpCiAgICAgICAgYXN0LnByaW50X3RyZWUoKQoKICAgICMgQ29tcGlsZSB0aGUgc291cmNlIGNvZGUuCiAgICByZXR1cm4gYnl0ZWFycmF5KGFzdC5jb21waWxlKHNpbWJvbF90YWJsZSwgZGVidWdlcikpCjx8ZmltX3N1ZmZpeHw+CiAgICBDb21waWxlcyB0aGUgc291cmNlIGNvZGUgaW50byBhIGJ5dGUgYXJyYXkuCiAgICA6cGFyYW0gc291cmNlOiBUaGUgc291cmNlIGNvZGUgdG8gYmUgY29tcGlsZWQuCiAgICA6cGFyYW0gZGVidWdlcjogV2hldGhlciBvciBub3QgdG8gcHJpbnQgZGVidWcgaW5mb3JtYXRpb24uCiAgICA6cmV0dXJuOiBUaGUgYnl0ZSBhcnJheSBvZiB0aGUgY29tcGlsZWQgY29kZS4KPHxmaW1fZW5kfD4="]
["9b85da600986f02eb45f6d4c2a1be3135b55c88d-5","9b85da600986f02eb45f6d4c2a1be3135b55c88d","PHxmaW1fcHJlZml4fD4KIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQojIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluCiMgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKIyBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKIyBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwojIHVuZGVyIHRoZSBMaWNlbnNlLgoKIiIiVGhyZWFkIHNhZmUgZm5tYXRjaCByZS1pbXBsZW1lbnRhdGlvbi4KClN0YW5kYXJkIGxpYnJhcnkgZm5tYXRjaCBpbiBQeXRob24gdmVyc2lvbnMgPD0gMi43LjkgaGFzIHRocmVhZCBzYWZlCmlzc3VlLCB0aGlzIG1vZHVsZSBpcyBjcmVhdGVkIGZvciBzdWNoIGNhc2UuIHNlZToKaHR0cHM6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMzE5MQoKLi4gdmVyc2lvbmFkZGVkOjogMy4zCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBmbm1hdGNoIGFzIHN0YW5kYXJkX2ZubWF0Y2gKaW1wb3J0IG9zCmltcG9ydCBwb3NpeHBhdGgKaW1wb3J0IHJlCmltcG9ydCBzeXMKCgppZiBzeXMudmVyc2lvbl9pbmZvID4gKDIsIDcsIDkpOgogICAgZm5tYXRjaCA9IHN0YW5kYXJkX2ZubWF0Y2guZm5tYXRjaAogICAgZm5tYXRjaGNhc2UgPSBzdGFuZGFyZF9mbm1hdGNoLmZubWF0Y2hjYXNlCiAgICBmaWx0ZXIgPSBzdGFuZGFyZF9mbm1hdGNoLmZpbHRlcgogICAgdHJhbnNsYXRlID0gc3RhbmRhcmRfZm5tYXRjaC50cmFuc2xhdGUKZWxzZToKICAgIF9NQVRDSF9DQUNIRSA9IHt9CiAgICBfTUFUQ0hfQ0FDSEVfTUFYID0gMTAwCgogICAgdHJhbnNsYXRlID0gc3RhbmRhcmRfZm5tYXRjaC50cmFuc2xhdGUKCiAgICBkZWYgX2dldF9jYWNoZWRfcGF0dGVybihwYXR0ZXJuKToKICAgICAgICBjYWNoZWRfcGF0dGVybiA9IF9NQVRDSF9DQUNIRS5nZXQocGF0dGVybikKICAgICAgICBpZiBjYWNoZWRfcGF0dGVybiBpcyBOb25lOgogICAgICAgICAgICB0cmFuc2xhdGVkX3BhdHRlcm4gPSB0cmFuc2xhdGUocGF0dGVybikKICAgICAgICAgICAgY2FjaGVkX3BhdHRlcm4gPSByZS5jb21waWxlKHRyYW5zbGF0ZWRfcGF0dGVybikKICAgICAgICAgICAgaWYgbGVuKF9NQVRDSF9DQUNIRSkgPj0gX01BVENIX0NBQ0hFX01BWDoKICAgICAgICAgICAgICAgIF9NQVRDSF9DQUNIRS5jbGVhcigpCiAgICAgICAgICAgIF9NQVRDSF9DQUNIRVtwYXR0ZXJuXSA9IGNhY2hlZF9wYXR0ZXJuCiAgICAgICAgcmV0dXJuIGNhY2hlZF9wYXR0ZXJuCgo8fGZpbV9ob2xlfD4KICAgIGRlZiBmbm1hdGNoKGZpbGVuYW1lLCBwYXR0ZXJuKToKICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGgubm9ybWNhc2UoZmlsZW5hbWUpCiAgICAgICAgcGF0dGVybiA9IG9zLnBhdGgubm9ybWNhc2UocGF0dGVybikKICAgICAgICByZXR1cm4gZm5tYXRjaGNhc2UoZmlsZW5hbWUsIHBhdHRlcm4pCgogICAgZGVmIGZpbHRlcihmaWxlbmFtZXMsIHBhdHRlcm4pOgogICAgICAgIGZpbHRlcmVkX2ZpbGVuYW1lcyA9IFtdCgogICAgICAgIHBhdHRlcm4gPSBvcy5wYXRoLm5vcm1jYXNlKHBhdHRlcm4pCiAgICAgICAgY2FjaGVkX3BhdHRlcm4gPSBfZ2V0X2NhY2hlZF9wYXR0ZXJuKHBhdHRlcm4pCgogICAgICAgIGlmIG9zLnBhdGggaXMgcG9zaXhwYXRoOgogICAgICAgICAgICAjIG5vcm1jYXNlIG9uIHBvc2l4IGlzIE5PUC4gT3B0aW1pemUgaXQgYXdheSBmcm9tIHRoZSBsb29wLgogICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZW5hbWVzOgogICAgICAgICAgICAgICAgaWYgY2FjaGVkX3BhdHRlcm4ubWF0Y2goZmlsZW5hbWUpOgogICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkX2ZpbGVuYW1lcy5hcHBlbmQoZmlsZW5hbWUpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lczoKICAgICAgICAgICAgICAgIG5vcm1fbmFtZSA9IG9zLnBhdGgubm9ybWNhc2UoZmlsZW5hbWUpCiAgICAgICAgICAgICAgICBpZiBjYWNoZWRfcGF0dGVybi5tYXRjaChub3JtX25hbWUpOgogICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkX2ZpbGVuYW1lcy5hcHBlbmQoZmlsZW5hbWUpCgogICAgICAgIHJldHVybiBmaWx0ZXJlZF9maWxlbmFtZXMKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBmbm1hdGNoY2FzZShmaWxlbmFtZSwgcGF0dGVybik6CiAgICAgICAgY2FjaGVkX3BhdHRlcm4gPSBfZ2V0X2NhY2hlZF9wYXR0ZXJuKHBhdHRlcm4pCiAgICAgICAgcmV0dXJuIGNhY2hlZF9wYXR0ZXJuLm1hdGNoKGZpbGVuYW1lKSBpcyBub3QgTm9uZQoKPHxmaW1fZW5kfD4="]
["23e502b9035f49a4b5136d356318127d453ee953-1","23e502b9035f49a4b5136d356318127d453ee953","PHxmaW1fcHJlZml4fD4KIy0qLSBjb2Rpbmc6IHV0Zi04IC0qLQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwojIC0tLS0tLS0tLS0gTWFkZSBieSBwYWJsbyBBcmlhcyBAaXJjYW0gb24gMDkvMjAxNgojIC0tLS0tLS0tLS0gQ29weXJpZ2h0IChjKSAyMDE4IENSRUFNIExhYiBAIElSQ0FNCiMgLS0tLS0tLS0tLQojIC0tLS0tLS0tLS0gQSBzZXQgb2YgcHl0aG9uIGZ1bmN0aW9ucyB0byBjb21wdXRlIHRoZSBtb2R1bGF0aW9uIHNwZWN0cnVtCiMgLS0tLS0tLS0tLSB0aGVzZSBmdW5jdGlvbnMgd2VyZSBpbnRlbnNpdmVsZXkgaW5zcGlyZWQgZnJvbSB0aGUgTWF0bGFiIAojIC0tLS0tLS0tLS0gTW9kRmlsdGVyIFNvdW5kIFRvb2xzCiMgLS0tLS0tLS0tLSBDaGVjayBFbGxpb3R0VGhldW5pc3NlbjA5IGFuZCBHcmlmZmluIDE5ODQgZm9yIHNvbWUgcGFwZXJzCiMgLS0tLS0tLS0tLSBUaGUgZGVmYXVsdCBwYXJhbWV0ZXJzIGFyZSB0aGUgb25lcyB1c2VkIGluIHRodWlzIHRvb2xib3gKIyAtLS0tLS0tLS0tIAojIC0tLS0tLS0tLS0gdG8gdXMgdGhpcyBkb24ndCBmb3JnZXQgdG8gaW5jbHVkZSB0aGVzZSBsaW5lcyBiZWZvcmUgeW91ciBzY3JpcHQ6CiMgLS0tLS0tLS0tLQojIC0tLS0tLS0tLS0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmltcG9ydCBudW1weSBhcyBucApmcm9tIHNjaXB5IGltcG9ydCBzaWduYWwKaW1wb3J0IG1hdHBsb3RsaWIucHlsYWIgYXMgcGx0CmZyb20gbWF0cGxvdGxpYi5jb2xvcnMgaW1wb3J0IExpbmVhclNlZ21lbnRlZENvbG9ybWFwCmltcG9ydCBudW1weSBhcyBucApmcm9tIHNpeC5tb3ZlcyBpbXBvcnQgcmFuZ2UKZnJvbSBzaXgubW92ZXMgaW1wb3J0IHppcAoKIyAtLS0tLS0tLS0tIGdldF9jbWFwX2NvbG9ycwpkZWYgZ2V0X2NtYXBfY29sb3JzKCk6CgkjY21hcCBmb3IgcGxvdHRpbmcgc3BlY3RydW1zCgljb2xvcnMgPSBbKDEuMDAwMCwgICAgMS4wMDAwLCAgICAxLjAwMDApLAoJCSgwLjk1MjQsICAgIDAuOTk1MiwgICAgMS4wMDAwKSwKCQkoMC45MDQ4LCAgICAwLjk4NDgsICAgIDEuMDAwMCksCgkJKDAuODU3MSwgICAgMC45Njg2LCAgICAxLjAwMDApLAoJCSgwLjgwOTUsICAgIDAuOTQ2NywgICAgMS4wMDAwKSwKCQkoMC43NjE5LCAgICAwLjkxOTAsICAgIDEuMDAwMCksCgkJKDAuNzE0MywgICAgMC44ODU3LCAgICAxLjAwMDApLAoJCSgwLjY2NjcsICAgIDAuODQ2NywgICAgMS4wMDAwKSwKCQkoMC42MTkwLCAgICAwLjgwMTksICAgIDEuMDAwMCksCgkJKDAuNTcxNCwgICAgMC43NTE0LCAgICAxLjAwMDApLAoJCSgwLjUyMzgsICAgIDAuNjk1MiwgICAgMS4wMDAwKSwKCQkoMC40NzYyLCAgICAwLjYzMzMsICAgIDEuMDAwMCksCgkJKDAuNDI4NiwgICAgMC41NjU3LCAgICAxLjAwMDApLAoJCSgwLjM4MTAsICAgIDAuNDkyNCwgICAgMS4wMDAwKSwKCQkoMC4zMzMzLCAgICAwLjQxMzMsICAgIDEuMDAwMCksCgkJKDAuMjg1NywgICAgMC4zMjg2LCAgICAxLjAwMDApLAoJCSgwLjIzODEsICAgIDAuMjM4MSwgICAgMS4wMDAwKSwKCQkoMC4yMzkwLCAgICAwLjE5MDUsICAgIDEuMDAwMCksCgkJKDAuMjQ1NywgICAgMC4xNDI5LCAgICAxLjAwMDApLAoJCSgwLjI1ODEsICAgIDAuMDk1MiwgICAgMS4wMDAwKSwKCQkoMC4yNzYyLCAgICAwLjA0NzYsICAgIDEuMDAwMCksCgkJKDAuMzAwMCwgICAgICAgICAwLCAgICAxLjAwMDApLAoJCSggICAgIDAsICAgIDAuNTAwMCwgICAgMC4wNTAwKSwKCQkoICAgICAwLCAgICAwLjUxNTAsICAgIDAuMDIwNiksCgkJKDAuMDEwNiwgICAgMC41MzAwLCAgICAgICAgIDApLAoJCSgwLjA0MzYsICAgIDAuNTQ1MCwgICAgICAgICAwKSwKCQkoMC4wNzg0LCAgICAwLjU2MDAsICAgICAgICAgMCksCgkJKDAuMTE1MCwgICAgMC41NzUwLCAgICAgICAgIDApLAoJCSgwLjE1MzQsICAgIDAuNTkwMCwgICAgICAgICAwKSwKCQkoMC4xOTM2LCAgICAwLjYwNTAsICAgICAgICAgMCksCgkJKDAuMjM1NiwgICAgMC42MjAwLCAgICAgICAgIDApLAoJCSgwLjI3OTQsICAgIDAuNjM1MCwgICAgICAgICAwKSwKCQkoMC4zMjUwLCAgICAwLjY1MDAsICAgICAgICAgMCksCgkJKDAuMzcyNCwgICAgMC42NjUwLCAgICAgICAgIDApLAoJCSgwLjQyMTYsICAgIDAuNjgwMCwgICAgICAgICAwKSwKCQkoMC40NzI2LCAgICAwLjY5NTAsICAgICAgICAgMCksCgkJKDAuNTI1NCwgICAgMC43MTAwLCAgICAgICAgIDApLAoJCSgwLjU4MDAsICAgIDAuNzI1MCwgICAgICAgICAwKSwKCQkoMC42MzY0LCAgICAwLjc0MDAsICAgICAgICAgMCksCgkJKDAuNjk0NiwgICAgMC43NTUwLCAgICAgICAgIDApLAoJCSgwLjc1NDYsICAgIDAuNzcwMCwgICAgICAgICAwKSwKCQkoMC43ODUwLCAgICAwLjc1MzYsICAgICAgICAgMCksCgkJKDAuODAwMCwgICAgMC43MjAwLCAgICAgICAgIDApLAoJCSgxLjAwMDAsICAgIDAuOTAwMCwgICAgMC41MDAwKSwKCQkoMS4wMDAwLCAgICAwLjg3NjYsICAgIDAuNDc1MCksCgkJKDEuMDAwMCwgICAgMC44NTE1LCAgICAwLjQ1MDApLAoJCSgxLjAwMDAsICAgIDAuODI0NiwgICAgMC40MjUwKSwKCQkoMS4wMDAwLCAgICAwLjc5NjAsICAgIDAuNDAwMCksCgkJKDEuMDAwMCwgICAgMC43NjU2LCAgICAwLjM3NTApLAoJCSgxLjAwMDAsICAgIDAuNzMzNSwgICAgMC4zNTAwKSwKCQkoMS4wMDAwLCAgICAwLjY5OTYsICAgIDAuMzI1MCksCgkJKDEuMDAwMCwgICAgMC42NjQwLCAgICAwLjMwMDApLAoJCSgxLjAwMDAsICAgIDAuNjI2NiwgICAgMC4yNzUwKSwKCQkoMS4wMDAwLCAgICAwLjU4NzUsICAgIDAuMjUwMCksCgkJKDEuMDAwMCwgICAgMC41NDY2LCAgICAwLjIyNTApLAoJCSgxLjAwMDAsICAgIDAuNTA0MCwgICAgMC4yMDAwKSwKCQkoMS4wMDAwLCAgICAwLjQ1OTYsICAgIDAuMTc1MCksCgkJKDEuMDAwMCwgICAgMC40MTM1LCAgICAwLjE1MDApLAoJCSgxLjAwMDAsICAgIDAuMzY1NiwgICAgMC4xMjUwKSwKCQkoMS4wMDAwLCAgICAwLjMxNjAsICAgIDAuMTAwMCksCgkJKDEuMDAwMCwgICAgMC4yNjQ2LCAgICAwLjA3NTApLAoJCSgxLjAwMDAsICAgIDAuMjExNSwgICAgMC4wNTAwKSwKCQkoMS4wMDAwLCAgICAwLjE1NjYsICAgIDAuMDI1MCksCgkJKDEuMDAwMCwgICAgMC4xMDAwLCAgICAgICAgIDApCgkJXQoJcmV0dXJuIGNvbG9ycwoKIyAtLS0tLS0tLS0tIG1ha2VfY21hcApkZWYgbWFrZV9jbWFwKGNvbG9ycywgcG9zaXRpb249Tm9uZSwgYml0PUZhbHNlKToKICAgICIiIgogICAgbWFrZV9jbWFwIHRha2VzIGEgbGlzdCBvZiB0dXBsZXMgd2hpY2ggY29udGFpbiBSR0IgdmFsdWVzLiBUaGUgUkdCCiAgICB2YWx1ZXMgbWF5IGVpdGhlciBiZSBpbiA4LWJpdCBbMCB0byAyNTVdIChpbiB3aGljaCBiaXQgbXVzdCBiZSBzZXQgdG8KICAgIFRydWUgd2hlbiBjYWxsZWQpIG9yIGFyaXRobWV0aWMgWzAgdG8gMV0gKGRlZmF1bHQpLiBtYWtlX2NtYXAgcmV0dXJucwogICAgYSBjbWFwIHdpdGggZXF1YWxseSBzcGFjZWQgY29sb3JzLgogICAgQXJyYW5nZSB5b3VyIHR1cGxlcyBzbyB0aGF0IHRoZSBmaXJzdCBjb2xvciBpcyB0aGUgbG93ZXN0IHZhbHVlIGZvciB0aGUKICAgIGNvbG9yYmFyIGFuZCB0aGUgbGFzdCBpcyB0aGUgaGlnaGVzdC4KICAgIHBvc2l0aW9uIGNvbnRhaW5zIHZhbHVlcyBmcm9tIDAgdG8gMSB0byBkaWN0YXRlIHRoZSBsb2NhdGlvbiBvZiBlYWNoIGNvbG9yLgogICAgIiIiCiAgICBpbXBvcnQgbWF0cGxvdGxpYiBhcyBtcGwKICAgIGltcG9ydCBudW1weSBhcyBucAogICAgYml0X3JnYiA9IG5wLmxpbnNwYWNlKDAsMSwyNTYpCiAgICBpZiBwb3NpdGlvbiA9PSBOb25lOgogICAgICAgIHBvc2l0aW9uID0gbnAubGluc3BhY2UoMCwxLGxlbihjb2xvcnMpKQogICAgZWxzZToKICAgICAgICBpZiBsZW4ocG9zaXRpb24pICE9IGxlbihjb2xvcnMpOgogICAgICAgICAgICBzeXMuZXhpdCgicG9zaXRpb24gbGVuZ3RoIG11c3QgYmUgdGhlIHNhbWUgYXMgY29sb3JzIikKICAgICAgICBlbGlmIHBvc2l0aW9uWzBdICE9IDAgb3IgcG9zaXRpb25bLTFdICE9IDE6CiAgICAgICAgICAgIHN5cy5leGl0KCJwb3NpdGlvbiBtdXN0IHN0YXJ0IHdpdGggMCBhbmQgZW5kIHdpdGggMSIpCiAgICBpZiBiaXQ6CiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGNvbG9ycykpOgogICAgICAgICAgICBjb2xvcnNbaV0gPSAoYml0X3JnYltjb2xvcnNbaV1bMF1dLAogICAgICAgICAgICAgICAgICAgICAgICAgYml0X3JnYltjb2xvcnNbaV1bMV1dLAogICAgICAgICAgICAgICAgICAgICAgICAgYml0X3JnYltjb2xvcnNbaV1bMl1dKQogICAgY2RpY3QgPSB7J3JlZCc6W10sICdncmVlbic6W10sICdibHVlJzpbXX0KICAgIGZvciBwb3MsIGNvbG9yIGluIHppcChwb3NpdGlvbiwgY29sb3JzKToKICAgICAgICBjZGljdFsncmVkJ10uYXBwZW5kKChwb3MsIGNvbG9yWzBdLCBjb2xvclswXSkpCiAgICAgICAgY2RpY3RbJ2dyZWVuJ10uYXBwZW5kKChwb3MsIGNvbG9yWzFdLCBjb2xvclsxXSkpCiAgICAgICAgY2RpY3RbJ2JsdWUnXS5hcHBlbmQoKHBvcywgY29sb3JbMl0sIGNvbG9yWzJdKSkKCiAgICBjbWFwID0gbXBsLmNvbG9ycy5MaW5lYXJTZWdtZW50ZWRDb2xvcm1hcCgnbXlfY29sb3JtYXAnLGNkaWN0LDI1NikKICAgIHJldHVybiBjbWFwCgojIC0tLS0tLS0tLS0gY29tcHV0ZV9tb2Rfc3BlY3RydW0KZGVmIGNvbXB1dGVfbW9kX3NwZWN0cnVtKHNvdW5kX2luLCBmcywgZmJhbmQgPSAzMiwgbnN0ZCA9IDYsIERCTk9JU0UgPSA2MAoJCQkJCQksIGxvZ2ZsZyA9IFRydWUsIHBsb3Rfc3BlY2dyYW0gPSBGYWxzZQoJCQkJCQksIHBsb3RfZmZ0Ml9iZWZvcmVfc2hpZnQgICAgICAgPSBGYWxzZQoJCQkJCQksIHBsb3RfZmZ0Ml9zaGlmdGVkICAgICAgICAgICAgPSBGYWxzZQoJCQkJCQkpOgoJIiIiCglUaGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSBNUFMgKE1vZHVsYXRpb24gcG93ZXIgc3BlY3RydW0pIG9mIGEgc291bmQKIAkKIAlwYXJhbWV0ZXJzOgoJCXNvdW5kX2luIAkJCQk6IGRhdGEgb2Ygc291bmQgaW4gKG9ubHkgbW9ubyBzb3VuZHMgcGxlYXNlKQoJCWZzIAkJCQkJCTogc2FtcGxpbmcgZnJlcXVlbmN5CgkJZmJhbmQJCQkJCTogZnJlcXVlbmN5IGJhbmQKCQluc3RkCQkJCQk6IG51bWJlciBvcyBzdGFuZGFyZCBkZXZpYXRpb25zCgkJREJOT0lTRQkJCQkJOiBOb2lzZSBmbG9vciA6IGlmICh2YWx1ZSBvZiBzcGVjZ3JhbSAtIERCTk9JU0UpIDwgMCA9PT4gdmFsdWUgPSAwCgkJbG9nZmxnCQkJCQk6IFVlZSB0aGUgbG9nIHRyYW5zZm9ybSBvZiB0aGUgc3BlY3Ryb2dyYW0gYmVmb3JlIHRoZSBGRnQyCgkJcGxvdF9zcGVjZ3JhbQkJCTogSWYgVHJ1ZSwgcGxvdHMgc3BlY3Ryb2dyYW0gb2Ygc291bmRfaW4gYW5kIHBhZGVkIHNpbGVuY2UKCQlwbG90X2ZmdDJfYmVmb3JlX3NoaWZ0CTogSWYgdHJ1ZSwgcGxvdHMgdGhlIEZGVDIgdHJhbnNmb3JtIG9mIHNwZWN0cm9ncmFtCgkJcGxvdF9mZnQyX3NoaWZ0ZWQJCTogSWYgdHJ1ZSwgcGxvdHMgdGhlIEZGVDIgdHJhbnNmb3JtIG9mIHNwZWN0cm9ncmFtIGFmdGVyIGZmdHNoaWZ0CgoKCQlUaGlzIGZ1bmN0aW9uIHJldHVybnMgOgoJCWR3dCAJIDogdGVtcG9yYWwgbW9kdWxhdGlvbiBheGVzIG9mIE1QUyAoaW4gSHopCgkJZHdmIAkgOiBmcmVxdWVuY3kgbW9kdWxhdGlvbiBheGVzIG9mIE1QUyAoaW4gQ3ljL2tIeikKCQlhbXBfZmFicyA6IG1hdHJpeCBvZiBhbXBsaXR1ZGUgdmFsdWVzIG9mIE1QUwoJCgl3YXJuaW5nIDogCgkJdGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIGZvciBtb25vIGZpbGVzCgkiIiIKCXR3aW5kb3cgICAgID0gMTAwMCpuc3RkLyhmYmFuZCoyLjAqbnAucGkpOyAJCQkjIFdpbmRvdyBsZW5ndGggaW4gbXMgLSBuc3RkIHRpbWVzIHRoZSBzdGFuZGFyZCBkZXYgb2YgdGhlIGdhdXNzaWFuIHdpbmRvdwoJd2luZG93X3NpemUgPSBucC5maXgodHdpbmRvdypmcy8xMDAwLjApOyAgIAkJCSMgV2luZG93IGxlbmd0aCBpbiBudW1iZXIgb2YgcG9pbnRzCgl3aW5kb3dfc2l6ZSA9IG5wLmZpeCh3aW5kb3dfc2l6ZS8yKSoyOyAgICAgCQkJIyBFbmZvcmNlIGV2ZW4gd2luZG93IGxlbmd0aAoJaW5jcmVtZW50ICAgPSB3aW5kb3dfc2l6ZSAtIGludChucC5maXgoMC4wMDEqZnMpKTsgICMgU2FtcGxpbmcgcmF0ZSBvZiBzcGVjdHJvZ3JhbSBpbiBudW1iZXIgb2YgcG9pbnRzIC0gc2V0IGF0IDEga0h6CglhbXBzcmF0ZSAgICA9IGZzL2luY3JlbWVudDsKCgkjIEZvcmNlIHNvdW5kX2luIHRvIGhhdmUgemVybyBtZWFuLgoJc291bmRfaW4gPSBzb3VuZF9pbiAtIG5wLm1lYW4oc291bmRfaW4pOwoKCSN3aW5kb3cKCXdpbmRvdyA9IHNpZ25hbC5nYXVzc2lhbih3aW5kb3dfc2l6ZSwgc3RkPXdpbmRvd19zaXplL25zdGQsIHN5bT1GYWxzZSkKCgkjcGFkIHRoZSBzb3VuZCB3aXRoIDAKCXNpbGVuY2VfdGltZSAgICA9IDAuNQoJdG9fcGFkICAgICAgICAgID0gbnAuemVyb3MobnAuaW50KG5wLnJvdW5kKGZzKnNpbGVuY2VfdGltZSkpKQoJcGFkZWRfc291bmRfaW4gID0gbnAuY29uY2F0ZW5hdGUoW3RvX3BhZCxzb3VuZF9pbix0b19wYWRdKQoKCSNjb21wdXRlIGdhdXNzaWFuIHNwZWN0cm9ncmFtCglmLCB0LCBTeHggPSBzaWduYWwuc3BlY3Ryb2dyYW0ocGFkZWRfc291bmRfaW4gICAgICAgLCBmcyAgICAgICAgICAgICAgICAgLCBucGVyc2VnID0gd2luZG93X3NpemUgCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBuZmZ0ID0gd2luZG93X3NpemUgLCBub3ZlcmxhcD1pbmNyZW1lbnQgLCB3aW5kb3cgPSB3aW5kb3cgICAKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHNjYWxpbmcgPSdzcGVjdHJ1bScsIG1vZGUgPSAnbWFnbml0dWRlJwoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQoKCQoJI3Bsb3Qgc3BlY2dyYW0KCWlmIHBsb3Rfc3BlY2dyYW06CgkJcGx0LmZpZ3VyZSgpCgkJZmlnLCBheCA9IHBsdC5zdWJwbG90cygpCgkJcGx0LnBjb2xvcm1lc2godCwgZiwgU3h4LCBjbWFwID0gJ25pcHlfc3BlY3RyYWwnKQoJCWF4LmF4aXMoJ3RpZ2h0JykKCQlwbHQueWxhYmVsKCdGcmVxdWVuY3kgW0h6XScpCgkJcGx0LnhsYWJlbCgnVGltZSBbc2VjXScpCgkJcGx0LnRpdGxlKCJOb3JtYWwgRkZUIG9mIGF1ZGlvIHNpZ25hbCIpCgkJcGx0LnNob3coKQoKCXNhYnMgPSBhYnMoU3h4KQoJbWF4c2FicyA9IG5wLm1heChzYWJzKQoKCXNhYnNEaXNwID0gMjAqbnAubG9nMTAoc2Ficy9tYXhzYWJzKStEQk5PSVNFOwoJc2Fic0Rpc3Bbc2Fic0Rpc3AgPCAwXSA9IDAKCglpZiBsb2dmbGc6CgkJc2FicyA9IHNhYnNEaXNwCgoKCSNudW1iZXIgb2YgdGltZSBwb2ludHMgYW5kIG51bWJlciBvZiBmcmVxIGJpbnMgaW4gc3BlY3Ryb2dyYW0gYWZ0ZXIgcGFkaW5nCglbbmIsIG50XSA9IHNhYnMuc2hhcGUKCWZhYnMgICAgID0gbnAuZmZ0LmZmdDIoc2FicykKCWFtcF9mYWJzID0gYWJzKGZhYnMpOwoJYW1wX2ZhYnMgPSAyMCpucC5sb2cxMChhbXBfZmFicykKCgkKCSNwbG90IGZmdDIgYmVmb3JlIGZyZXEgc2hpZnQKCWlmIHBsb3RfZmZ0Ml9iZWZvcmVfc2hpZnQ6CgkJcGx0LmZpZ3VyZSgpCgkJcGx0LnBjb2xvcm1lc2goYW1wX2ZhYnMpCgkJcGx0LnRpdGxlKCJGRlQyIGJlZm9yZSBmcmVxIHNoaWZ0IikKCgkjZmZ0IHNoaWZ0CglhbXBfZmFicyA9IG5wLmZmdC5mZnRzaGlmdChhbXBfZmFicykKCgkjcGxvdCBzaGlmdGVkIGZmdDIKCWlmIHBsb3RfZmZ0Ml9zaGlmdGVkOgoJCXBsdC5maWd1cmUoZmlnc2l6ZT0oNiwgNCkpCgkJcGx0LnBjb2xvcm1lc2goYW1wX2ZhYnMpCgkJcGx0LnRpdGxlKCJGRlQyIGFmdGVyIGZyZXEgc2hpZnQiKQoKCgkjIENvbXB1dGUgdGhlIGxhYmVscyBmb3Igc3BlY3RyYWwgbW9kdWxhdGlvbnMgaW4gcGh5c2ljYWwgdW5pdHMKCSMgZl9zdGVwIGlzIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gZnJlcXVlbmN5IGJhbmRzCglmc3RlcCAgICA9IGZbMV0gLSBmWzBdOwoJdXBfYm91bmQgPSBpbnQobnAuY2VpbChuYikpCglkd2YgICAgICA9IG5wLnplcm9zKHVwX2JvdW5kKSAgICAKCWR3ZiAJID0gbnAuZmZ0LmZmdGZyZXEoaW50KG5wLmNlaWwoKG5iKzEpKS0xKSAsIDEvKGZzdGVwKm5iKSkKCWR3ZiAJID0gbnAuZmZ0LmZmdHNoaWZ0KGR3ZikKCgkjIENvbXB1dGUgdGhlIGxhYmVscyBmb3IgdGVtcG9yYWwgbW9kdWxhdGlvbnMgaW4gcGh5c2ljYWwgdW5pdHMKCSMgYW1wc3JhdGUgaXMgdGhlIHNhbXBsaW5nIHJhdGUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wcGUKCXBlcmlvZCAgICA9IHRbbGVuKHQpLTFdL2xlbih0KQoJdXBfYm91bmQgID0gaW50KG5wLmNlaWwobnQpKQoJZHd0ICAgICAgID0gbnAuemVyb3ModXBfYm91bmQpCglkd3QgICAgICAgPSBucC5mZnQuZmZ0ZnJlcShpbnQobnAuY2VpbCgobnQrMSkpLTEpICwgcGVyaW9kKQoJZHd0IAkgID0gbnAuZmZ0LmZmdHNoaWZ0KGR3dCkKCglyZXR1cm4gZHd0LCBkd2YvMTAwMCwgYW1wX2ZhYnMKCgoKIyAtLS0tLS0tLS0tIHBsb3RfTVBTCmRlZiBwbG90X01QUyhhbXBfZmFicywgZHd0LCBkd2YsIHhfbWluID0gIiIgLCB4X21heCA9ICIiLCB5X21pbiA9ICIiLCB5X21heCA9ICIiCgksIHRpdGxlID0gJycsIGZpZ19uYW1lID0gJycsaW50ZXJwb2xhdGlvbj0gJ25lYXJlc3QnLCBjbWFwID0gJycsIHZtaW4gPSAwLCB2bWF4ID0gMCk6CgkiIiIKCVRoaXMgZnVuY3Rpb24gcGxvdHMgdGhlIE1QUyAoTW9kdWxhdGlvbiBwb3dlciBzcGVjdHJ1bSkgb2YgYSBzb3VuZCAKCWJ5IHVzaW5nIHRoZSBwYXJhbWV0ZXJzIHJldHVybmVkIGJ5IHRoZSBmdW5jdGlvbiBjb21wdXRlX21vZF9zcGVjdHJ1bQogCQogCXBhcmFtZXRlcnM6CgkJYW1wX2ZhYnMgICAgCTogYW1wX2ZhcyBhcyByZXR1cm5lZCBieSBjb21wdXRlX21vZF9zcGVjdHJ1bQoJCWR3dCAJCQk6IGR3dCBhcyByZXR1cm5lZCBieSBjb21wdXRlX21vZF9zcGVjdHJ1bQoJCWR3ZiAJCQk6IGR3ZiBhcyByZXR1cm5lZCBieSBjb21wdXRlX21vZF9zcGVjdHJ1bQoJCXhfbWluIAkJCTogbWluIG9mIHggaW4gZ3JhcGggd2hlbiBwbG90dGluZwoJCXhfbWF4IAkJCTogbWF4IG9mIHggaW4gZ3JhcGggd2hlbiBwbG90dGluZwoJCXlfbWluIAkJCTogbWluIG9mIHkgaW4gZ3JhcGggd2hlbiBwbG90dGluZwoJCXlfbWF4IAkJCTogbWF4IG9mIHkgaW4gZ3JhcGggd2hlbiBwbG90dGluZwoJCXRpdGxlIAkJCTogdGl0bGUgb2YgcGxvdAoJCWZpZ19uYW1lIAkJOgoJCWludGVycG9sYXRpb24JOiBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdGhlIHBpeGVscywgY2hlY2sgbWF0cGxvdGxpYiBzdHlsZXMKCQljbWFwIAkJCTogY21hcHMgZm9yIGhlYXQsIGRvbid0IHdvcnJ5IGFib3V0IHRoaXMsIEkgY3JlYXRlZCBhIGN1c3RvbSBvbmUgZm9yIHlvdQoJCXZtaW4gCQkJOiBtaW5pbXVtIHZhbHVlIHRvIHBsb3QsIGludGVyZXN0aW5nIHRvIGVyYXNlIG5vaXNlCgkJdm1heCAJCQk6IG1heGltdW0gdmFsdWUgdG8gcGxvdCwgaW50ZXJlc3RpbmcgdG8gZXJhc2Ugbm9pc2UKCgkJVGhpcyBmdW5jdGlvbiByZXR1cm5zIDoKCQkJZHd0IAkgOiB0ZW1wb3JhbCBtb2R1bGF0aW9uIGF4ZXMgb2YgTVBTIChpbiBIeikKCQkJZHdmIAkgOiBmcmVxdWVuY3kgbW9kdWxhdGlvbiBheGVzIG9mIE1QUyAoaW4gQ3ljL2tIeikKCQkJYW1wX2ZhYnMgOiBtYXRyaXggb2YgYW1wbGl0dWRlIHZhbHVlcyBvZiBNUFMKCQoJIiIiCQoJY29sb3JzID0gZ2V0X2NtYXBfY29sb3JzKCkKCglpZiB2bWluID09IDAgYW5kICB2bWF4ID09IDA6CgkJdm1pbiA9IG5wLm1pbihhbXBfZmFicykKCQl2bWF4ID0gbnAubWF4KGFtcF9mYWJzKQoKCQoJcGx0LmZpZ3VyZSgpCglpbSA9IHBsdC5pbXNob3coYW1wX2ZhYnMKCSAgICAgICAgICAgLCBhc3BlY3Q9J2F1dG8nLCBleHRlbnQgPSBbbWluKGR3dCksIG1heChkd3QpLCBtaW4oZHdmKSwgbWF4KGR3ZildCgkgICAgICAgICAgICwgY21hcCA9IG1ha2VfY21hcChjb2xvcnMpCgkgICAgICAgICAgICwgaW50ZXJwb2xhdGlvbiA9IGludGVycG9sYXRpb24KCSAgICAgICAgICAgLCB2bWluID0gdm1pbgoJICAgICAgICAgICAsIHZtYXggPSB2bWF4CgkgICAgICAgICAgKTsKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCQoJI2ZpZyBheGlzCglpZiBub3QgKHhfbWluID09ICIiIG9yIHhfbWF4ID09ICIiIG9yIHlfbWluID09ICIiIG9yIHlfbWF4ID09ICIiICk6CgkJcGx0LmF4aXMoW3hfbWluLCB4X21heCwgeV9taW4sIHlfbWF4XSkKPHxmaW1fZW5kfD4="]
["9e2b1e9bcdf26b411511021a708e6144fd947526-4","9e2b1e9bcdf26b411511021a708e6144fd947526","PHxmaW1fcHJlZml4fD4KZnJvbSAuc3VnYXJ0ZXhfZmlsdGVyIGltcG9ydCBTdWdhclRlWCAgIyBub3FhCmZyb20gLnByZV9zdWdhcnRleCBpbXBvcnQgKAogICAgc3VnYXJ0ZXgsCiAgICBzdWdhcnRleF9yZXBsYWNlX2FsbCwgc3VnYXJ0ZXhfcmVwbGFjZV9hbGwgYXMgc3RleCwKICAgIHN1Z2FydGV4X3ByZXByb2Nlc3MsIHN1Z2FydGV4X3ByZXByb2Nlc3MgYXMgcHJlCjx8ZmltX2hvbGV8PgpfX3ZlcnNpb25fXyA9IGdldF92ZXJzaW9ucygpWyd2ZXJzaW9uJ10KZGVsIGdldF92ZXJzaW9ucwo8fGZpbV9zdWZmaXh8PgopICAjIG5vcWEKZnJvbSAuc3VnYXJ0ZXhfcGFuZG9jX2ZpbHRlciBpbXBvcnQgbWFpbiAgIyBub3FhCgpmcm9tIC5fdmVyc2lvbiBpbXBvcnQgZ2V0X3ZlcnNpb25zCjx8ZmltX2VuZHw+"]
["757695c66d32698af1bd707f6c5741e2eda7e0ce-2","757695c66d32698af1bd707f6c5741e2eda7e0ce","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHR5cGluZyBhcyB0Cgpmcm9tIGNyeXB0b2dyYXBoeS5oYXptYXQuYmFja2VuZHMgaW1wb3J0IGRlZmF1bHRfYmFja2VuZApmcm9tIGNyeXB0b2dyYXBoeS5oYXptYXQucHJpbWl0aXZlcyBpbXBvcnQgaGFzaGVzLCBzZXJpYWxpemF0aW9uCmZyb20gY3J5cHRvZ3JhcGh5Lmhhem1hdC5wcmltaXRpdmVzLmFzeW1tZXRyaWMgaW1wb3J0IGVjLCB1dGlscwpmcm9tIGNyeXB0b2dyYXBoeS51dGlscyBpbXBvcnQgcmVnaXN0ZXJfaW50ZXJmYWNlCmltcG9ydCBweXRlc3QKCmZyb20geHByaW5nLmhhc2hlcyBpbXBvcnQgSWRlbnRpdHlIYXNoCgpyZWdpc3Rlcl9pbnRlcmZhY2UoaGFzaGVzLkhhc2hBbGdvcml0aG0pKElkZW50aXR5SGFzaCkKClNpZ25pbmdLZXkgPSBlYy5FbGxpcHRpY0N1cnZlUHJpdmF0ZUtleQpWZXJpZnlpbmdLZXkgPSBlYy5FbGxpcHRpY0N1cnZlUHVibGljS2V5CgoKZGVmIG1ha2Vfc2lnbmluZ19rZXkoc2lnbmluZ19rZXlfYnl0ZXM6IGJ5dGVzKSAtPiBTaWduaW5nS2V5OgogICAgcmV0dXJuIGVjLmRlcml2ZV9wcml2YXRlX2tleSgKICAgICAgICBpbnQuZnJvbV9ieXRlcyhzaWduaW5nX2tleV9ieXRlcywgYnl0ZW9yZGVyPSdiaWcnKSwKICAgICAgICBlYy5TRUNQMjU2SzEoKSwKICAgICAgICBkZWZhdWx0X2JhY2tlbmQoKSwKICAgICkKCgpkZWYgc2lnbihzaWduaW5nX2tleTogU2lnbmluZ0tleSwgbWVzc2FnZV9kaWdlc3RfYnl0ZXM6IGJ5dGVzKSAtPiBieXRlczoKICAgICMgaHR0cHM6Ly9jcnlwdG9ncmFwaHkuaW8vZW4vbGF0ZXN0L2hhem1hdC9wcmltaXRpdmVzL2FzeW1tZXRyaWMvZWMvI2VsbGlwdGljLWN1cnZlLXNpZ25hdHVyZS1hbGdvcml0aG1zCiAgICBwcmVoYXNoZWQgPSB1dGlscy5QcmVoYXNoZWQoSWRlbnRpdHlIYXNoKCkpCiAgICByZXR1cm4gc2lnbmluZ19rZXkuc2lnbihtZXNzYWdlX2RpZ2VzdF9ieXRlcywgZWMuRUNEU0EocHJlaGFzaGVkKSkKCgpkZWYgZGVyaXZlX3ZlcmlmeWluZ19rZXkoc2lnbmluZ19rZXk6IFNpZ25pbmdLZXkpIC0+IFZlcmlmeWluZ0tleToKICAgIHJldHVybiBzaWduaW5nX2tleS5wdWJsaWNfa2V5KCkKCgpkZWYgZXhwb3J0X3ZlcmlmeWluZ19rZXkodmVyaWZ5aW5nX2tleTogVmVyaWZ5aW5nS2V5KSAtPiBieXRlczoKICAgICMgaHR0cHM6Ly9jcnlwdG9ncmFwaHkuaW8vZW4vbGF0ZXN0L2hhem1hdC9wcmltaXRpdmVzL2FzeW1tZXRyaWMvZWMvI3NlcmlhbGl6YXRpb24KICAgIHJldHVybiB2ZXJpZnlpbmdfa2V5LnB1YmxpY19ieXRlcygKICAgICAgICBlbmNvZGluZz1zZXJpYWxpemF0aW9uLkVuY29kaW5nLlBFTSwKICAgICAgICBmb3JtYXQ9c2VyaWFsaXphdGlvbi5QdWJsaWNGb3JtYXQuU3ViamVjdFB1YmxpY0tleUluZm8sCiAgICApCgoKZGVmIGltcG9ydF92ZXJpZnlpbmdfa2V5KHBlbV9ieXRlczogYnl0ZXMpIC0+IFZlcmlmeWluZ0tleToKICAgICMgaHR0cHM6Ly9jcnlwdG9ncmFwaHkuaW8vZW4vbGF0ZXN0L2hhem1hdC9wcmltaXRpdmVzL2FzeW1tZXRyaWMvZWMvI2tleS1sb2FkaW5nCiAgICByZXR1cm4gc2VyaWFsaXphdGlvbi5sb2FkX3BlbV9wdWJsaWNfa2V5KAogICAgICAgIHBlbV9ieXRlcywgYmFja2VuZD1kZWZhdWx0X2JhY2tlbmQoKQogICAgKQoKCmRlZiB2ZXJpZnkoCiAgICB2ZXJpZnlpbmdfa2V5OiBWZXJpZnlpbmdLZXksCiAgICBtZXNzYWdlX2RpZ2VzdF9ieXRlczogYnl0ZXMsCiAgICBzaWduYXR1cmVfYnl0ZXM6IGJ5dGVzLAopIC0+IGJvb2w6CiAgICAjIGh0dHBzOi8vY3J5cHRvZ3JhcGh5LmlvL2VuL2xhdGVzdC9oYXptYXQvcHJpbWl0aXZlcy9hc3ltbWV0cmljL2VjLyNlbGxpcHRpYy1jdXJ2ZS1zaWduYXR1cmUtYWxnb3JpdGhtcwo8fGZpbV9ob2xlfD4KICAgICkKICAgIHJldHVybiBUcnVlCjx8ZmltX3N1ZmZpeHw+CiAgICB2ZXJpZnlpbmdfa2V5LnZlcmlmeSgKICAgICAgICBzaWduYXR1cmVfYnl0ZXMsCiAgICAgICAgbWVzc2FnZV9kaWdlc3RfYnl0ZXMsCiAgICAgICAgZWMuRUNEU0EodXRpbHMuUHJlaGFzaGVkKElkZW50aXR5SGFzaCgpKSksCjx8ZmltX2VuZHw+"]
["32f4dc6ca183eaa235c0f8ff235edc2c470729f6-2","32f4dc6ca183eaa235c0f8ff235edc2c470729f6","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCmltcG9ydCBqc29uCgpmcm9tIGFsaXBheS5hb3AuYXBpLnJlc3BvbnNlLkFsaXBheVJlc3BvbnNlIGltcG9ydCBBbGlwYXlSZXNwb25zZQpmcm9tIGFsaXBheS5hb3AuYXBpLmRvbWFpbi5IZWFsdGhDYXJkSW5mbyBpbXBvcnQgSGVhbHRoQ2FyZEluZm8KCgpjbGFzcyBBbGlwYXlVc2VyRGlnaXRhbGlkZW50aXR5SGVhbHRoY2FyZFF1ZXJ5UmVzcG9uc2UoQWxpcGF5UmVzcG9uc2UpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzdXBlcihBbGlwYXlVc2VyRGlnaXRhbGlkZW50aXR5SGVhbHRoY2FyZFF1ZXJ5UmVzcG9uc2UsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLl9oZWFsdGhfY2FyZF9pbmZvID0gTm9uZQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGhlYWx0aF9jYXJkX2luZm8oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX2hlYWx0aF9jYXJkX2luZm8KCiAgICBAaGVhbHRoX2NhcmRfaW5mby5zZXR0ZXIKICAgIGRlZiBoZWFsdGhfY2FyZF9pbmZvKHNlbGYsIHZhbHVlKToKICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBIZWFsdGhDYXJkSW5mbyk6CiAgICAgICAgICAgIHNlbGYuX2hlYWx0aF9jYXJkX2luZm8gPSB2YWx1ZQogICAgICAgIGVsc2U6Cjx8ZmltX2hvbGV8PgogICAgZGVmIHBhcnNlX3Jlc3BvbnNlX2NvbnRlbnQoc2VsZiwgcmVzcG9uc2VfY29udGVudCk6CiAgICAgICAgcmVzcG9uc2UgPSBzdXBlcihBbGlwYXlVc2VyRGlnaXRhbGlkZW50aXR5SGVhbHRoY2FyZFF1ZXJ5UmVzcG9uc2UsIHNlbGYpLnBhcnNlX3Jlc3BvbnNlX2NvbnRlbnQocmVzcG9uc2VfY29udGVudCkKICAgICAgICBpZiAnaGVhbHRoX2NhcmRfaW5mbycgaW4gcmVzcG9uc2U6CiAgICAgICAgICAgIHNlbGYuaGVhbHRoX2NhcmRfaW5mbyA9IHJlc3BvbnNlWydoZWFsdGhfY2FyZF9pbmZvJ10KPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgc2VsZi5faGVhbHRoX2NhcmRfaW5mbyA9IEhlYWx0aENhcmRJbmZvLmZyb21fYWxpcGF5X2RpY3QodmFsdWUpCgo8fGZpbV9lbmR8Pg=="]
["32cc3dc39f265a2852fdd076f8658a143dfa8937-2","32cc3dc39f265a2852fdd076f8658a143dfa8937","PHxmaW1fcHJlZml4fD4KX19hbGxfXyA9IFsiVG9rZW5Vc2VyTWlkZGxld2FyZSJdCgpmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKZnJvbSBkamFuZ28udXRpbHMuZnVuY3Rpb25hbCBpbXBvcnQgU2ltcGxlTGF6eU9iamVjdAoKZnJvbSAubW9kZWxzIGltcG9ydCBBdXRoVG9rZW4KCgpkZWYgZ2V0X3VzZXIocmVxdWVzdCk6CiAgICAjIGNoZWNrIGZvciBhZG1pbiBhdXRoIHRva2VuCiAgICB0b2tlbiA9IHJlcXVlc3QuaGVhZGVycy5nZXQoIlgtVE9LRU4iLCBOb25lKQogICAgaWYgdG9rZW46CiAgICAgICAgbm93ID0gdGltZXpvbmUubm93KCkKCiAgICAgICAgdG9rZW4gPSBBdXRoVG9rZW4ub2JqZWN0cy5maWx0ZXIoCiAgICAgICAgICAgIHVzZXJjb21wb25lbnRfX25hbWU9ImluZGV4IiwKICAgICAgICAgICAgdG9rZW49dG9rZW4KICAgICAgICApLmZpcnN0KCkKICAgICAgICBpZiB0b2tlbjoKICAgICAgICAgICAgdWMgPSB0b2tlbi51c2VyY29tcG9uZW50CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICMgdG9rZW4ucGVyc2lzdCA9PSAtMSBhbmQgICMgY2Fubm90IHBlcnNpc3QKICAgICAgICAgICAgICAgIHRva2VuLmNyZWF0ZWQgPCBub3cgLSB1Yy50b2tlbl9kdXJhdGlvbgogICAgICAgICAgICApOgogICAgICAgICAgICAgICAgdG9rZW4uZGVsZXRlKCkKICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgIHJldHVybiB1Yy51c2VyCiAgICByZXR1cm4gTm9uZQoKCmRlZiBnZXRfY2FjaGVkX3VzZXIocmVxdWVzdCk6CiAgICBpZiBub3QgaGFzYXR0cihyZXF1ZXN0LCAiX2NhY2hlZF9zcGlkZXJ0b2tlbl91c2VyIik6CiAgICAgICAgcmVxdWVzdC5fY2FjaGVkX3NwaWRlcnRva2VuX3VzZXIgPSBnZXRfdXNlcihyZXF1ZXN0KQogICAgcmV0dXJuIHJlcXVlc3QuX2NhY2hlZF9zcGlkZXJ0b2tlbl91c2VyCgoKY2xhc3MgVG9rZW5Vc2VyTWlkZGxld2FyZShvYmplY3QpOgogICAgIiIiIHNob3VsZCBjb21lIGFmdGVyIEF1dGhlbnRpY2F0aW9uTWlkZGxld2FyZSAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnZXRfcmVzcG9uc2U9Tm9uZSk6CiAgICAgICAgc2VsZi5nZXRfcmVzcG9uc2UgPSBnZXRfcmVzcG9uc2UKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKCiAgICBkZWYgX19jYWxsX18oc2VsZiwgcmVxdWVzdCk6Cjx8ZmltX2hvbGV8PgogICAgICAgICAgICApCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmVxdWVzdC51c2VyID0gU2ltcGxlTGF6eU9iamVjdCgKICAgICAgICAgICAgICAgIGxhbWJkYTogZ2V0X2NhY2hlZF91c2VyKHJlcXVlc3QpCiAgICAgICAgICAgICkKICAgICAgICByZXR1cm4gc2VsZi5nZXRfcmVzcG9uc2UocmVxdWVzdCkKPHxmaW1fc3VmZml4fD4KICAgICAgICBpZiBoYXNhdHRyKHJlcXVlc3QsICJ1c2VyIik6CiAgICAgICAgICAgIHVzZXIgPSByZXF1ZXN0LnVzZXIKICAgICAgICAgICAgcmVxdWVzdC51c2VyID0gU2ltcGxlTGF6eU9iamVjdCgKICAgICAgICAgICAgICAgIGxhbWJkYTogZ2V0X2NhY2hlZF91c2VyKHJlcXVlc3QpIG9yIHVzZXIKPHxmaW1fZW5kfD4="]
["9515e50420865b8c8492f9a8daf1769135985ff5-3","9515e50420865b8c8492f9a8daf1769135985ff5","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuZmlyZWZveCBpbXBvcnQgZHJpdmVyX2ZpcmVmb3gKPHxmaW1fZW5kfD4="]
["fd4d556d4821d0431b190be2d1c7a888a364038f-1","fd4d556d4821d0431b190be2d1c7a888a364038f","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmZyb20gc2V0dXB0b29scyBpbXBvcnQgc2V0dXAsIGZpbmRfcGFja2FnZXMKaW1wb3J0IHN5cywgb3MKZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgRXh0ZW5zaW9uCgp2ZXJzaW9uID0gJzAuMy4yJwoKbW9kdWxlMSA9IEV4dGVuc2lvbigndmJnbW0nLAogICAgICAgIGxpYnJhcmllcyA9Wydnc2wnLCAgJ2dzbGNibGFzJ10sCiAgICAgICAgaW5jbHVkZV9kaXJzID0gWydjLWNvbmNvY3QnXSwKICAgICAgICBzb3VyY2VzID0gWydjLWNvbmNvY3QvdmJnbW1tb2R1bGUuYyddKQoKc2V0dXAobmFtZT0nY29uY29jdCcsCiAgICAgIHZlcnNpb249dmVyc2lvbiwKICAgICAgZGVzY3JpcHRpb249IkNsdXN0ZXJpbmcgY09OdGlncyB3aXRoIENPdmVyYWdlIGFuZCBDb21wb3NpVGlvbiIsCiAgICAgIGxvbmdfZGVzY3JpcHRpb249IiIiQ29uY29jdCBpcyBhIHByb2dyYW0gdGhhdCBjb21iaW5lcyB0aHJlZSB0eXBlcyBvZiAKICAgICAgaW5mb3JtYXRpb24gLSBzZXF1ZW5jZSBjb21wb3NpdGlvbiwgY292ZXJhZ2UgYWNyb3NzIG11bHRpcGxlIHNhbXBsZSwgCiAgICAgIGFuZCByZWFkLXBhaXIgbGlua2FnZSAtIHRvIGF1dG9tYXRpY2FsbHkgYmluIG1ldGFnZW5vbWljIGNvbnRpZ3MgCiAgICAgIGludG8gZ2Vub21lcy4gIiIiLAogICAgICBjbGFzc2lmaWVycz1bXSwgIyBHZXQgc3RyaW5ncyBmcm9tIGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaT8lM0FhY3Rpb249bGlzdF9jbGFzc2lmaWVycwogICAgICBrZXl3b3Jkcz0nUHl0aG9uIFNjaWxpZmVsYWIgTWV0YWdlbm9taWNzIEJpbm5pbmcgQ2x1c3RlcmluZyBDb250aWcnLAogICAgICBhdXRob3I9J0JyeW5qYXIgU21hcmkgQmphcm5hc29uLCBKb2hhbm5lcyBBbG5lYmVyZywgQ2hyaXN0b3BoZXIgUXVpbmNlLCBBbmRlcnMgQW5kZXJzc29uLCBJbm8gZGUgQnJ1aWpuJywKICAgICAgYXV0aG9yX2VtYWlsPSdiaW5uaUBiaW5uaXNiLmNvbScsCiAgICAgIG1haW50YWluZXI9J0pvaGFubmVzIEFsbmViZXJnJywKICAgICAgbWFpbnRhaW5lcl9lbWFpbD0nam9oYW5uZXMuYWxuZWJlcmdAc2NpbGlmZWxhYi5zZScsCiAgICAgIHVybD0naHR0cHM6Ly9naXRodWIuY29tL0JpblByby9DT05DT0NUJywKICAgICAgbGljZW5zZT0nRnJlZUJTRCcsCiAgICAgIHBhY2thZ2VzPWZpbmRfcGFja2FnZXMoZXhjbHVkZT1bJ2V6X3NldHVwJywgJ2V4YW1wbGVzJywgJ3Rlc3RzJ10pLAogICAgICBzY3JpcHRzPVsiYmluL2NvbmNvY3QiXSwKICAgICAgaW5jbHVkZV9wYWNrYWdlX2RhdGE9VHJ1ZSwKICAgICAgemlwX3NhZmU9RmFsc2UsCiAgICAgIGV4dF9tb2R1bGVzID0gW21vZHVsZTFdLAogICAgICBpbnN0YWxsX3JlcXVpcmVzPVsnY3l0aG9uPj0wLjE5LjEnLAogICAgICAgICAgICAgICAgICAgICAgICAnbnVtcHk+PTEuNy4xJywKICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaXB5Pj0wLjEyLjAnLAogICAgICAgICAgICAgICAgICAgICAgICAncGFuZGFzPj0wLjExLjAnLAogICAgICAgICAgICAgICAgICAgICAgICAnYmlvcHl0aG9uPj0xLjYyYicsCiAgICAgICAgICAgICAgICAgICAgICAgICdzY2lraXQtbGVhcm4+PTAuMTMuMScsCiAgICAgICAgICAgICAgICAgICAgICAgICdub3NlPT0xLjMuMCddLAogICAgICBlbnRyeV9wb2ludHM9IiIiCiAgICAgICMgLSotIEVudHJ5IHBvaW50czogLSotCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgIiIiLAogICAgICApCgo8fGZpbV9lbmR8Pg=="]
["9e51888aba98b6eb678fe78ac38b43d29699c0a9-3","9e51888aba98b6eb678fe78ac38b43d29699c0a9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGM0ZAppbXBvcnQgdGVtcGZpbGUsIG9zCmZyb20gYzRkIGltcG9ydCBkb2N1bWVudHMsIHBsdWdpbnMKI1dlbGNvbWUgdG8gdGhlIHdvcmxkIG9mIFB5dGhvbgoKZGVmIG9ialRvVmVydERhdGEoaW5wdXRmaWxlKToKICBvdXRwdXQgPSAiIgogIGZpbGUgPSBvcGVuKGlucHV0ZmlsZSwgInIiKQogIGxpbmVzID0gZmlsZS5yZWFkbGluZXMoKQogIGZpbGUuY2xvc2UoKQogIHBvaW50cyA9IFtdCiAgcG9seWdvbnMgPSBbXQogIHV2cyA9IFtdCiAgdmVydGV4bm9ybWFscyA9IFtdCiAgY291bnQgPSAwCiAgZm9yIGxpbmUgaW4gbGluZXM6CiAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoInYgIik6CiAgICAgIHBvaW50cy5hcHBlbmQobGluZS5zdHJpcCgpWzI6XSkKICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiZiAiKToKICAgICAgcG9seWdvbnMuYXBwZW5kKFtsaW5lLnN0cmlwKClbMjpdLCBjb3VudF0pCiAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoInZ0ICIpOgogICAgICB1dnMuYXBwZW5kKGxpbmUuc3RyaXAoKVsyOl0pCiAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoInZuICIpOgogICAgICB2ZXJ0ZXhub3JtYWxzLmFwcGVuZChsaW5lLnN0cmlwKClbMjpdKQogICAgY291bnQgKz0gMQoKICBvdXRwdXQgKz0gIlZFUlRJQ0VTOiIgKyBzdHIobGVuKHBvaW50cykpICsgIlxuIgogIGZvciBwIGluIHBvaW50czoKICAgIG91dHB1dCArPSBwICsgIlxuIgoKICBvdXRwdXQgKz0gIlBPTFlHT05TOiIgKyBzdHIobGVuKHBvbHlnb25zKSkgKyAiXG4iCiAgY291bnQgPSAwCiAgdXZpbmZvID0gW10KICBtYXQgPSAiRGVmYXVsdCIKICBmb3IgcG9seSBpbiBwb2x5Z29uczoKICAgICAgcHRzID0gcG9seVswXS5zcGxpdCgiICIpCiAgICAgIG5ld3B0cyA9IFtdCiAgICAgICNpbmRpY2VzIGluIGFuIHZlcnRkYXRhIHN0YXJ0IGF0IDAsIHNvIHdlIGdvdHRhIHN1YnRyYWN0IG9uZSBmcm9tIGVhY2ggaW5kZXgKICAgICAgZm9yIHAgaW4gcHRzOgogICAgICAgIGlmICIvIiBpbiBwOgogICAgICAgICAgbmV3cHRzLmFwcGVuZChzdHIoaW50KHAuc3BsaXQoIi8iKVswXSkgLSAxKSkKICAgICAgICAgIHV2aW5mby5hcHBlbmQoW2NvdW50LCBpbnQocC5zcGxpdCgiLyIpWzFdKSwgaW50KHAuc3BsaXQoIi8iKVswXSkgLSAxXSkKICAgICAgICBlbHNlOgogICAgICAgICAgbmV3cHRzLmFwcGVuZChzdHIoaW50KHApIC0gMSkpCiAgICAgIGNvdW50ICs9IDEKICAgICAgaWYgInVzZW10bCIgaW4gbGluZXNbcG9seVsxXS0xXToKICAgICAgICBtYXQgPSBsaW5lc1twb2x5WzFdLTFdLnNwbGl0KCIgIilbMV0uc3RyaXAoKQogICAgICBvdXRwdXQgKz0gIiwiLmpvaW4obmV3cHRzKSArICI7OyIgKyBtYXQgKyAiOztGQUNFXG4iCgogIGlmIGxlbih1dmluZm8pID4gMDoKICAgIG91dHB1dCArPSAiVVY6RGVmYXVsdDoiICsgc3RyKGxlbih1dmluZm8pKSArICJcbiIKICAgIGZvciBpbmZvIGluIHV2aW5mbzoKICAgICAgb3V0cHV0ICs9IHV2c1tpbmZvWzFdLTFdWzE6XSArICI6UExZOiIgKyBzdHIoaW5mb1swXSkgKyAiOlBOVDoiICsgc3RyKGluZm9bMl0pICsgIlxuIgoKICBpZiBsZW4odmVydGV4bm9ybWFscykgPiAwOgogICAgb3V0cHV0ICs9ICJWRVJURVhOT1JNQUxTOiIgKyBzdHIobGVuKHZlcnRleG5vcm1hbHMpKSArICJcbiIKICAgIGZvciBub3JtYWwgaW4gdmVydGV4bm9ybWFsczoKICAgICAgb3V0cHV0ICs9IG5vcm1hbCArICJcbiIKCiAgI3dyaXRpbmcgb3V0cHV0IGZpbGUKICBmID0gb3Blbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkgKyBvcy5zZXAgKyAiT0RWZXJ0ZXhEYXRhLnR4dCIsICJ3IikKICBmLndyaXRlKG91dHB1dCkKICBmLmNsb3NlKCkKCmRlZiBtYWluKCk6CiAgICBkb2N1bWVudCA9IGM0ZC5kb2N1bWVudHMuR2V0QWN0aXZlRG9jdW1lbnQoKQogICAgb2JqcyA9IGRvYy5HZXRBY3RpdmVPYmplY3RzKGM0ZC5HRVRBQ1RJVkVPQkpFQ1RGTEFHU19DSElMRFJFTikKICAgIGlmIG9ianMgPT0gTm9uZToKICAgICAgcmV0dXJuCiAgICBpZiBsZW4ob2JqcykgPiAxOgogICAgICByZXR1cm4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICMgR2V0IGEgZnJlc2gsIHRlbXBvcmFyeSBkb2N1bWVudCB3aXRoIG9ubHkgdGhlIHNlbGVjdGVkIG9iamVjdHMKICAgIGRvY1RlbXAgPSBjNGQuZG9jdW1lbnRzLklzb2xhdGVPYmplY3RzKGRvYywgb2JqcykKICAgIGlmIGRvY1RlbXAgPT0gTm9uZToKICAgICAgICByZXR1cm4KPHxmaW1fZW5kfD4="]
["2f9c155f3a2a8c8e6753db0e3618094ca76ed9d0-4","2f9c155f3a2a8c8e6753db0e3618094ca76ed9d0","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQganNvbgppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IHJlCgpkZiA9IHBkLnJlYWRfZXhjZWwoJy90bXAvbnV0Y2gvU29sciBTY2hlbWEgQ09WSUQtMTkgUEYueGxzeCcpCgpoYXNoU3RyaXAgPSByZS5jb21waWxlKCIoLispIy4rIikKbXVsdGlzcGFjZSA9IHJlLmNvbXBpbGUoIlsgXSsiKQoKcGF5bG9hZCA9IFtdCgpmb3IgaW5kZXgsIHJvdyBpbiBkZi5pdGVycm93cygpOgoKICB1cmwgPSByb3dbJ1VSTCddCgogIGlmIG5vdCBwZC5pc25hKHVybCkgYW5kIHJlLm1hdGNoKCJeaHR0cCIsIHVybCk6CgogICAgdXJsID0gaGFzaFN0cmlwLnN1YigiXFwxIiwgdXJsKQogIAogICAgcHJpbnQoIlVwZGF0aW5nIG1ldGFkYXRhIGZvciBVUkwgKGlkKTogIiArIHVybCkKCiAgICBwdXJwb3NlID0gcm93WydDb250ZW50IFB1cnBvc2UnXQoKICAgIHRhZ3MgPSBbcm93WydUYWcgMSddLCByb3dbJ1RhZyAyJ10sIHJvd1snVGFnIDMnXSwgcm93WydUYWcgNCddLCByb3dbJ1RhZyA1J11dCiAgICB0YWdzID0gW3QgZm9yIHQgaW4gdGFncyBpZiB0IGFuZCBpc2luc3RhbmNlKHQsIHN0cikgYW5kIHQgIT0gJycgYW5kIHQgIT0gJ251bGwnIGFuZCB0ICE9ICdOYU4nXQoKICAgIHBheWxvYWQuYXBwZW5kKHsKICAgICAgImlkIjogdXJsLAogICAgICAiY292aWRfb3duZXIiOiB7InNldCI6IHJvd1snT3duZXInXX0sCiAgICAgICJjb3ZpZF9kZXNjcmlwdGlvbiI6IHsic2V0Ijogcm93WydUaXRsZSddfSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAiY292aWRfcHVycG9zZSI6IHsic2V0IjogcHVycG9zZX0sCiAgICAgICJjb3ZpZF90YWdzIjogeyJzZXQiOiB0YWdzfQo8fGZpbV9lbmR8Pg=="]
["9eb0d16fcc44253f8cba050d2ad05a464cec74dd-2","9eb0d16fcc44253f8cba050d2ad05a464cec74dd","PHxmaW1fcHJlZml4fD4KIyAgVGVzdGluZyBmb3Igc2NyaXB0IDMxCmltcG9ydCBwaWNrbGUKZnJvbSBzeXNfc2ltdWxhdG9yLmNoYW5uZWxzIGltcG9ydCBCQU5DaGFubmVsCmZyb20gc3lzX3NpbXVsYXRvciBpbXBvcnQgZ2VuZXJhbCBhcyBnZW4KZnJvbSBzeXNfc2ltdWxhdG9yLnFfbGVhcm5pbmcuZW52aXJvbm1lbnRzLmNvbXBsZXRlRW52aXJvbm1lbnQ1XAogICAgaW1wb3J0IENvbXBsZXRlRW52aXJvbm1lbnQ1CmZyb20gc3lzX3NpbXVsYXRvci5kcW4uYWdlbnRzLmRxbkFnZW50IGltcG9ydCBFeHRlcm5hbERRTkFnZW50CmZyb20gc3lzX3NpbXVsYXRvci5kcW4uZXh0ZXJuYWxEUU5GcmFtZXdvcmsgaW1wb3J0IEV4dGVybmFsRFFORnJhbWV3b3JrCmZyb20gc3lzX3NpbXVsYXRvci5xX2xlYXJuaW5nIGltcG9ydCByZXdhcmRzIGFzIHJld2FyZF9mdW5jCmZyb20gc3lzX3NpbXVsYXRvci5wYXJhbWV0ZXJzLnBhcmFtZXRlcnMgXAogICAgaW1wb3J0IEVudmlyb25tZW50UGFyYW1ldGVycywgRFFOQWdlbnRQYXJhbWV0ZXJzCmltcG9ydCB0b3JjaAppbXBvcnQgbnVtcHkgYXMgbnAKCgpkZWYgcnVuKCk6CiAgICBuX211ZXMgPSAxICAjIG51bWJlciBvZiBtdWVzCiAgICBuX2QyZCA9IDIgICMgbnVtYmVyIG9mIGQyZCBwYWlycwogICAgbl9yYiA9IG5fbXVlcyAgICMgbnVtYmVyIG9mIFJCcwogICAgYnNfcmFkaXVzID0gNTAwICAjIGJzIHJhZGl1cyBpbiBtCiAgICByYl9iYW5kd2lkdGggPSAxODAqMWUzICAjIHJiIGJhbmR3aWR0aCBpbiBIegogICAgZDJkX3BhaXJfZGlzdGFuY2UgPSA1MCAgIyBkMmQgcGFpciBkaXN0YW5jZSBpbiBtCiAgICBwX21heCA9IDIzICAjIG1heCB0eCBwb3dlciBpbiBkQm0KICAgIG5vaXNlX3Bvd2VyID0gLTExNiAgIyBub2lzZSBwb3dlciBwZXIgUkIgaW4gZEJtCiAgICBic19nYWluID0gMTcgICAgIyBtYWNybyBicyBhbnRlbm5hIGdhaW4gaW4gZEJpCiAgICB1c2VyX2dhaW4gPSA0ICAgIyB1c2VyIGFudGVubmEgZ2FpbiBpbiBkQmkKICAgIHNpbnJfdGhyZXNob2xkX211ZSA9IDYgICMgdHJ1ZSBtdWUgc2luciB0aHJlc2hvbGQgaW4gZEIKICAgIG11ZV9tYXJnaW4gPSAuNWU0CiAgICAjIGNvbnZlcnNpb25zIGZyb20gZEIgdG8gcG93CiAgICBwX21heCA9IHBfbWF4IC0gMzAKICAgIHBfbWF4ID0gZ2VuLmRiX3RvX3Bvd2VyKHBfbWF4KQogICAgbm9pc2VfcG93ZXIgPSBub2lzZV9wb3dlciAtIDMwCiAgICBub2lzZV9wb3dlciA9IGdlbi5kYl90b19wb3dlcihub2lzZV9wb3dlcikKICAgIGJzX2dhaW4gPSBnZW4uZGJfdG9fcG93ZXIoYnNfZ2FpbikKICAgIHVzZXJfZ2FpbiA9IGdlbi5kYl90b19wb3dlcih1c2VyX2dhaW4pCiAgICBzaW5yX3RocmVzaG9sZF9tdWUgPSBnZW4uZGJfdG9fcG93ZXIoc2lucl90aHJlc2hvbGRfbXVlKQogICAgIyBxLWxlYXJuaW5nIHBhcmFtZXRlcnMKICAgIFNURVBTX1BFUl9FUElTT0RFID0gMjUKICAgIEVQU0lMT05fTUlOID0gMC4wMQogICAgRVBTSUxPTl9ERUNBWSA9IDEKICAgIE1BWF9OVU1fRVBJU09ERVMgPSAyMDAwCiAgICAjIE1BWF9OVU1fRVBJU09ERVMgPSAyICAjIHRlc3QKICAgIEdBTU1BID0gMC45OCAgIyBEaXNjb3VudCBmYWN0b3IKICAgIEMgPSA4ICAjIEMgY29uc3RhbnQgZm9yIHRoZSBpbXByb3ZlZCByZXdhcmQgZnVuY3Rpb24KICAgIE1BWF9OVU1CRVJfT0ZfQUdFTlRTID0gMTAKICAgIFJFUExBWV9NRU1PUllfU0laRSA9IDEwMDAwCiAgICBCQVRDSF9TSVpFID0gMTI4CiAgICAjIG1vcmUgcGFyYW1ldGVycwogICAgbWF4X2QyZCA9IE1BWF9OVU1CRVJfT0ZfQUdFTlRTCiAgICBudW1fZXBpc29kZXMgPSBNQVhfTlVNX0VQSVNPREVTCiAgICBlcGlzb2RlX3N0ZXBzID0gU1RFUFNfUEVSX0VQSVNPREUKICAgIGVudl9wYXJhbXMgPSBFbnZpcm9ubWVudFBhcmFtZXRlcnMoCiAgICAgICAgcmJfYmFuZHdpZHRoLCBkMmRfcGFpcl9kaXN0YW5jZSwgcF9tYXgsIG5vaXNlX3Bvd2VyLCBic19nYWluLAogICAgICAgIHVzZXJfZ2Fpbiwgc2lucl90aHJlc2hvbGRfbXVlLCBuX211ZXMsIG5fZDJkLCBuX3JiLCBic19yYWRpdXMsCiAgICAgICAgY19wYXJhbT1DLCBtdWVfbWFyZ2luPW11ZV9tYXJnaW4KICAgICkKICAgIGFnZW50X3BhcmFtcyA9IERRTkFnZW50UGFyYW1ldGVycygKICAgICAgICBFUFNJTE9OX01JTiwgRVBTSUxPTl9ERUNBWSwgMSwgUkVQTEFZX01FTU9SWV9TSVpFLCBCQVRDSF9TSVpFLCBHQU1NQQogICAgKQogICAgcmV3YXJkX2Z1bmN0aW9uID0gcmV3YXJkX2Z1bmMuZGlzX3Jld2FyZF90ZW5zb3IKICAgIGNoYW5uZWwgPSBCQU5DaGFubmVsKCkKICAgIGVudiA9IENvbXBsZXRlRW52aXJvbm1lbnQ1KGVudl9wYXJhbXMsIHJld2FyZF9mdW5jdGlvbiwgY2hhbm5lbCkKICAgIGZyYW1ld29yayA9IEV4dGVybmFsRFFORnJhbWV3b3JrKGFnZW50X3BhcmFtcykKICAgIGZyYW1ld29yay5wb2xpY3lfbmV0LmxvYWRfc3RhdGVfZGljdCgKICAgICAgICB0b3JjaC5sb2FkKCdtb2RlbHMvZHFsL3NjcmlwdDMxLnB0JykKICAgICkKICAgIG11ZV9zcGVjdHJhbF9lZmZzID0gW2xpc3QoKSBmb3IgXyBpbiByYW5nZShtYXhfZDJkKzEpXQogICAgZDJkX3NwZWN0cmFsX2VmZnMgPSBbbGlzdCgpIGZvciBfIGluIHJhbmdlKG1heF9kMmQrMSldCiAgICAjIGphaW5faW5kZXggPSBbbGlzdCgpIGZvciBfIGluIHJhbmdlKG1heF9kMmQrMSldCiAgICBkb25lID0gRmFsc2UKPHxmaW1faG9sZXw+CiAgICAgICAgYWN0aW9ucyA9IG5wLmxpbnNwYWNlKDFlLTQsIDhlLTMsIDUpWzo6LTFdICogcF9tYXgKICAgICAgICBhY3Rpb25zWzBdID0gMAogICAgICAgIG5fYWdlbnRzID0gbnAucmFuZG9tLmNob2ljZShhdXhfcmFuZ2UpCiAgICAgICAgYWdlbnRzID0gW0V4dGVybmFsRFFOQWdlbnQoYWdlbnRfcGFyYW1zLCBhY3Rpb25zKQogICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShuX2FnZW50cyldICAjIDEgYWdlbnQgcGVyIGQyZCB0eAogICAgICAgIGVudi5idWlsZF9zY2VuYXJpbyhhZ2VudHMpCiAgICAgICAgZG9uZSA9IEZhbHNlCiAgICAgICAgb2JzID0gW2Vudi5nZXRfc3RhdGUoYSkgZm9yIGEgaW4gYWdlbnRzXQogICAgICAgIHRvdGFsX3Jld2FyZCA9IDAuMAogICAgICAgIGkgPSAwCiAgICAgICAgd2hpbGUgbm90IGRvbmU6CiAgICAgICAgICAgIGZvciBqLCBhZ2VudCBpbiBlbnVtZXJhdGUoYWdlbnRzKToKICAgICAgICAgICAgICAgIGF1eCA9IGFnZW50LmFjdChmcmFtZXdvcmssIG9ic1tqXSkubWF4KDEpCiAgICAgICAgICAgICAgICBhZ2VudC5zZXRfYWN0aW9uKGF1eFsxXS5sb25nKCksIGFnZW50LmFjdGlvbnNbYXV4WzFdXSkKICAgICAgICAgICAgICAgIGJhZy5hcHBlbmQoYXV4WzFdLml0ZW0oKSkKICAgICAgICAgICAgbmV4dF9vYnMsIHJld2FyZHMsIGRvbmUgPSBlbnYuc3RlcChhZ2VudHMpCiAgICAgICAgICAgIG9icyA9IG5leHRfb2JzCiAgICAgICAgICAgIHRvdGFsX3Jld2FyZCArPSBzdW0ocmV3YXJkcykKICAgICAgICAgICAgaSArPSAxCiAgICAgICAgICAgIGlmIGkgPj0gZXBpc29kZV9zdGVwczoKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgbXVlX3NwZWN0cmFsX2VmZnNbbl9hZ2VudHNdLmFwcGVuZChlbnYubXVlX3NwZWN0cmFsX2VmZi5pdGVtKCkpCiAgICAgICAgZDJkX3NwZWN0cmFsX2VmZnNbbl9hZ2VudHNdLmFwcGVuZChlbnYuZDJkX3NwZWN0cmFsX2VmZi5pdGVtKCkpCiAgICAgICAgIyBqYWluX2luZGV4W25fYWdlbnRzXS5hcHBlbmQoZ2VuLmphaW5faW5kZXgoZW52LnNpbnJfZDJkcykpCiAgICBtdWVfc3VjY2Vzc19yYXRlID0gbGlzdCgpCiAgICBmb3IgaSwgbSBpbiBlbnVtZXJhdGUobXVlX3NwZWN0cmFsX2VmZnMpOgogICAgICAgIG11ZV9zdWNjZXNzX3JhdGUuYXBwZW5kKAogICAgICAgICAgICBucC5hdmVyYWdlKG0gPiBucC5sb2cyKDEgKyBzaW5yX3RocmVzaG9sZF9tdWUpKQogICAgICAgICkKICAgIGQyZF9zcGVmZnNfYXZnID0gbGlzdCgpCiAgICBmb3IgaSwgZCBpbiBlbnVtZXJhdGUoZDJkX3NwZWN0cmFsX2VmZnMpOgogICAgICAgIGQyZF9zcGVmZnNfYXZnLmFwcGVuZChucC5hdmVyYWdlKGQpKQogICAgIyBqYWluX2luZGV4X2F2ZyA9IGxpc3QoKQogICAgIyBmb3IgaSwgaiBpbiBlbnVtZXJhdGUoamFpbl9pbmRleCk6CiAgICAjICAgICBqYWluX2luZGV4X2F2Zy5hcHBlbmQobnAuYXZlcmFnZShqKSkKICAgIGxvZyA9IGxpc3QoKQogICAgZm9yIGksIGQgaW4gZW51bWVyYXRlKHppcChkMmRfc3BlZmZzX2F2ZywgbXVlX3N1Y2Nlc3NfcmF0ZSkpOgogICAgICAgIGxvZy5hcHBlbmQoZidOVU1CRVIgT0YgRDJEX1VTRVJTOiB7aSsxfScpCiAgICAgICAgbG9nLmFwcGVuZChmJ0QyRCBTUEVDVFJBTCBFRkZJQ0lFTkNZIC0gU0NSSVBUOiB7ZFswXX0nKQogICAgICAgIGxvZy5hcHBlbmQoZidNVUUgU1VDQ0VTUyBSQVRFIC0gU0NSSVBUOiB7ZFsxXX0nKQogICAgICAgIGxvZy5hcHBlbmQoJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nKQogICAgZmlsZW5hbWUgPSBnZW4ucGF0aF9sZWFmKF9fZmlsZV9fKQogICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zcGxpdCgnLicpWzBdCiAgICBsb2dfcGF0aCA9IGYnbG9ncy9kcWwve2ZpbGVuYW1lfS50eHQnCiAgICBmaWxlID0gb3Blbihsb2dfcGF0aCwgJ3cnKQogICAgZm9yIGxnIGluIGxvZzoKICAgICAgICBmaWxlLndyaXRlKGYne2xnfVxuJykKICAgIGZpbGUuY2xvc2UoKQogICAgZGF0YV9wYXRoID0gZidkYXRhL2RxbC97ZmlsZW5hbWV9LnBpY2tsZScKICAgIGRhdGEgPSB7CiAgICAgICAgJ2QyZF9zcGVmZnNfYXZnX3RvdGFsJzogZDJkX3NwZWN0cmFsX2VmZnMsCiAgICAgICAgJ211ZV9zdWNjZXNzX3JhdGUnOiBtdWVfc3VjY2Vzc19yYXRlLAogICAgICAgICdjaG9zZW5fYWN0aW9ucyc6IGJhZywKICAgIH0KICAgIHdpdGggb3BlbihkYXRhX3BhdGgsICd3YicpIGFzIGZpbGU6CiAgICAgICAgcGlja2xlLmR1bXAoZGF0YSwgZmlsZSkKPHxmaW1fc3VmZml4fD4KICAgIGJhZyA9IGxpc3QoKQogICAgYXV4X3JhbmdlID0gcmFuZ2UobWF4X2QyZCsxKVsxOl0KICAgIGZvciBfIGluIHJhbmdlKG51bV9lcGlzb2Rlcyk6CiAgICAgICAgIyBhY3Rpb25zID0gbnAubGluc3BhY2UoMWUtNCwgMWUtMiwgNSlbOjotMV0gKiBwX21heAo8fGZpbV9lbmR8Pg=="]
["9e60b9572292dcb1940584d4b45d830c0af82938-3","9e60b9572292dcb1940584d4b45d830c0af82938","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgojIGVuY29kaW5nOiB1dGYtOAojIFdBUk5JTkchIERvIG5vdCBlZGl0ISBodHRwczovL3dhZi5pby9ib29rL2luZGV4Lmh0bWwjX29idGFpbmluZ190aGVfd2FmX2ZpbGUKCmltcG9ydCBvcywgcmUKZnJvbSB3YWZsaWIgaW1wb3J0IFRhc2ssIFRhc2tHZW4KZnJvbSB3YWZsaWIuVG9vbHMgaW1wb3J0IGNjcm9vdAoKCmRlZiBkZWNpZGVfZXh0KHNlbGYsIG5vZGUpOgogICAgaWYgJ2N4eCcgaW4gc2VsZi5mZWF0dXJlczoKICAgICAgICByZXR1cm4gWycubGV4LmNjJ10KICAgIHJldHVybiBbJy5sZXguYyddCgoKZGVmIGZsZXhmdW4odHNrKToKICAgIGVudiA9IHRzay5lbnYKICAgIGJsZCA9IHRzay5nZW5lcmF0b3IuYmxkCiAgICB3ZCA9IGJsZC52YXJpYW50X2RpcgoKICAgIGRlZiB0b19saXN0KHh4KToKICAgICAgICBpZiBpc2luc3RhbmNlKHh4LCBzdHIpOgogICAgICAgICAgICByZXR1cm4gW3h4XQogICAgICAgIHJldHVybiB4eAoKICAgIHRzay5sYXN0X2NtZCA9IGxzdCA9IFtdCiAgICBsc3QuZXh0ZW5kKHRvX2xpc3QoZW52LkZMRVgpKQogICAgbHN0LmV4dGVuZCh0b19saXN0KGVudi5GTEVYRkxBR1MpKQogICAgaW5wdXRzID0gW2EucGF0aF9mcm9tKHRzay5nZXRfY3dkKCkpIGZvciBhIGluIHRzay5pbnB1dHNdCiAgICBpZiBlbnYuRkxFWF9NU1lTOgogICAgICAgIGlucHV0cyA9IFt4LnJlcGxhY2Uob3Muc2VwLCAnLycpIGZvciB4IGluIGlucHV0c10KICAgIGxzdC5leHRlbmQoaW5wdXRzKQogICAgbHN0ID0gW3ggZm9yIHggaW4gbHN0IGlmIHhdCiAgICB0eHQgPSBibGQuY21kX2FuZF9sb2cobHN0LCBjd2Q9d2QsIGVudj1lbnYuZW52IG9yIE5vbmUsIHF1aWV0PTApCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHRzay5vdXRwdXRzWzBdLndyaXRlKHR4dC5yZXBsYWNlKCdcclxuJywgJ1xuJykucmVwbGFjZSgnXHInLCAnXG4nKSkKCgo8fGZpbV9lbmR8Pg=="]
["9e8f5738caf02459bd46855c40999e829e453436-4","9e8f5738caf02459bd46855c40999e829e453436","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgUHlncEV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UpOgogICAgICAgIHNlbGYubWVzc2FnZSA9ICdbIHB5Z3AgXSAnICsgbWVzc2FnZQo8fGZpbV9lbmR8Pg=="]
["f1a5460e2d82182df055b6bc557db7bac851681b-1","f1a5460e2d82182df055b6bc557db7bac851681b","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29yZS5tYW5hZ2VtZW50LmJhc2UgaW1wb3J0IEJhc2VDb21tYW5kLCBDb21tYW5kRXJyb3IKZnJvbSBleGRiLm1vZGVscyBpbXBvcnQgRW1haWxUYXNrCmZyb20gZXhkYiBpbXBvcnQgZW1haWxzCgoKY2xhc3MgQ29tbWFuZChCYXNlQ29tbWFuZCk6CgogICAgZGVmIGNyZWF0ZV9lbWFpbF90YXNrcyhzZWxmKToKICAgICAgICBlbWFpbHNfYXR0cnMgPSBkaXIoZW1haWxzKQoKICAgICAgICAjIG5hdHVyYWxseSB3ZSBkbyBub3Qgd2FudCB0aGUgYmFzZSBjbGFzcwogICAgICAgIGVtYWlsc19hdHRycy5yZW1vdmUoJ0VtYWlsVGFza0Jhc2UnKQoKICAgICAgICBlbWFpbF90YXNrcyA9IHt9CiAgICAgICAgZm9yIGF0dHIgaW4gZW1haWxzX2F0dHJzOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKGdldGF0dHIoZW1haWxzLCBhdHRyKSwgZW1haWxzLkVtYWlsVGFza0Jhc2UpOgogICAgICAgICAgICAgICAgICAgIGVtYWlsX3Rhc2tzW2F0dHJdID0gZ2V0YXR0cihlbWFpbHMsIGF0dHIpCiAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgICAgICBwYXNzCgogICAgICAgIGV4aXN0aW5nX3Rhc2tzID0gRW1haWxUYXNrLm9iamVjdHMudmFsdWVzX2xpc3QoJ3BhY2thZ2UnLCBmbGF0PVRydWUpCiAgICAgICAgZW1haWxfdGFza19kYXRhYmFzZV9vYmplY3RzID0gW10KICAgICAgICBmb3IgY2xhc3NfbmFtZSwgY2xzIGluIGVtYWlsX3Rhc2tzLml0ZW1zKCk6CiAgICAgICAgICAgIGlmIGNsYXNzX25hbWUgbm90IGluIGV4aXN0aW5nX3Rhc2tzOgogICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgIGV0ID0gRW1haWxUYXNrKG5hbWU9Y2xzLnRhc2tfbmFtZSwgcGFja2FnZT1jbGFzc19uYW1lKQogICAgICAgICAgICAgICAgICAgIGVtYWlsX3Rhc2tfZGF0YWJhc2Vfb2JqZWN0cy5hcHBlbmQoZXQpCiAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6ICAjIHByYWdtYTogbm8gY292ZXIKICAgICAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigidGFza19uYW1lIG11c3QgYmUgZGVmaW5lZCBmb3IgJXMiICUgY2xhc3NfbmFtZSkKCiAgICAgICAgY3JlYXRlZF90YXNrcyA9IEVtYWlsVGFzay5vYmplY3RzLmJ1bGtfY3JlYXRlKGVtYWlsX3Rhc2tfZGF0YWJhc2Vfb2JqZWN0cykKCiAgICAgICAgc2VsZi5zdGRvdXQud3JpdGUoJyVkIG5ldyB0YXNrKHMpIGNyZWF0ZWQgb3V0IG9mICVkIHRvdGFsIGVtYWlsIHRhc2tzLicgJQogICAgICAgICAgICAgICAgICAgICAgICAgIChsZW4oY3JlYXRlZF90YXNrcyksIGxlbihlbWFpbF90YXNrcy5rZXlzKCkpKSkKCiAgICBkZWYgc2VuZF9lbWFpbHMoc2VsZik6CiAgICAgICAgdGFza3MgPSBFbWFpbFRhc2sub2JqZWN0cy5hbGwoKQogICAgICAgIGVtYWlsc19zZW50ID0gMAogICAgICAgIGZvciB0YXNrIGluIHRhc2tzOgogICAgICAgICAgICBlbWFpbHNfc2VudCArPSB0YXNrLnNlbmQoKQogICAgICAgIHNlbGYuc3Rkb3V0LndyaXRlKCIlZCB0YXNrKHMpIHNlbnQgJWQgZW1haWxzIiAlIChsZW4odGFza3MpLCBlbWFpbHNfc2VudCkpCgogICAgZGVmIGhhbmRsZShzZWxmLCAqYXJncywgKipvcHRpb25zKToKICAgICAgICBpZiBvcHRpb25zWydzZW5kJ106CiAgICAgICAgICAgIHNlbGYuc2VuZF9lbWFpbHMoKQogICAgICAgIGlmIG9wdGlvbnNbJ2NyZWF0ZSddOgogICAgICAgICAgICBzZWxmLmNyZWF0ZV9lbWFpbF90YXNrcygpCgogICAgZGVmIGFkZF9hcmd1bWVudHMoc2VsZiwgcGFyc2VyKToKICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXNlbmQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3NlbmQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2VuZCBhbGwgdGhlIGVtYWlscyBmb3IgZWFjaCBlbWFpbCB0YXNrLicpCjx8ZmltX2VuZHw+"]
["23aa3843a5d3cca144040d6c18063ce00a00b687-2","23aa3843a5d3cca144040d6c18063ce00a00b687","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAxOC0yMDIxIFN0cmVhbWxpdCBJbmMuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiIiInN0LnNpbmdsZXRvbiB1bml0IHRlc3RzLiIiIgoKaW1wb3J0IHVuaXR0ZXN0CmZyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgcGF0Y2gKCmltcG9ydCBzdHJlYW1saXQgYXMgc3QKZnJvbSBzdHJlYW1saXQuY2FjaGluZyBpbXBvcnQgc2luZ2xldG9uX2RlY29yYXRvcgoKCmNsYXNzIFNpbmdsZXRvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICMgU29tZSBvZiB0aGVzZSB0ZXN0cyByZWFjaCBkaXJlY3RseSBpbnRvIF9jYWNoZV9pbmZvIGFuZCB0d2lkZGxlIGl0LgogICAgICAgICMgUmVzZXQgZGVmYXVsdCB2YWx1ZXMgb24gdGVhcmRvd24uCiAgICAgICAgc2luZ2xldG9uX2RlY29yYXRvci5TSU5HTEVUT05fQ0FMTF9TVEFDSy5fY2FjaGVkX2Z1bmNfc3RhY2sgPSBbXQogICAgICAgIHNpbmdsZXRvbl9kZWNvcmF0b3IuU0lOR0xFVE9OX0NBTExfU1RBQ0suX3N1cHByZXNzX3N0X2Z1bmN0aW9uX3dhcm5pbmcgPSAwCiAgICAgICAgc3VwZXIoKS50ZWFyRG93bigpCgogICAgQHBhdGNoLm9iamVjdChzdCwgImV4Y2VwdGlvbiIpCiAgICBkZWYgdGVzdF9tdXRhdGVfcmV0dXJuKHNlbGYsIGV4Y2VwdGlvbik6CiAgICAgICAgIiIiTXV0YXRpbmcgYSBzaW5nbGV0b24gcmV0dXJuIHZhbHVlIGlzIGxlZ2FsLCBhbmQgKndpbGwqIGFmZmVjdAogICAgICAgIGZ1dHVyZSBhY2Nlc3NvcnMgb2YgdGhlIGRhdGEuIiIiCgogICAgICAgIEBzdC5leHBlcmltZW50YWxfc2luZ2xldG9uCiAgICAgICAgZGVmIGYoKToKICAgICAgICAgICAgcmV0dXJuIFswLCAxXQoKICAgICAgICByMSA9IGYoKQoKICAgICAgICByMVswXSA9IDEKCiAgICAgICAgcjIgPSBmKCkKCiAgICAgICAgZXhjZXB0aW9uLmFzc2VydF9ub3RfY2FsbGVkKCkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIxLCBbMSwgMV0pCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyMiwgWzEsIDFdKQo8fGZpbV9lbmR8Pg=="]
["2f0ee5739cdfa5bd8362a281f5f11618045d64e0-1","2f0ee5739cdfa5bd8362a281f5f11618045d64e0","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGZsYXNrCmltcG9ydCBqc29uCgpmcm9tIGZsYXNrIGltcG9ydCAoanNvbmlmeSwKICAgICAgICAgICAgICAgICAgIG1ha2VfcmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICByZXF1ZXN0KQo8fGZpbV9ob2xlfD4KCgphcHAgPSBmbGFzay5GbGFzayhfX25hbWVfXykKCgpAYXBwLnJvdXRlKCcvJywgbWV0aG9kcz1bJ0dFVCddKQpkZWYgaG9tZSgpOgogICAgcmV0dXJuICI8aDE+Tm9ybWFsaXplZCBDZW50cmFsaXR5IE1lYXN1cmU8L2gxPjxwPkVudGVyIGEgdGV4dCAiIFwKICAgICAgICAgICAic25pcHBldCB0byBzZWUgdGhlIGltcG9ydGFuY2Ugb2YgZWFjaCB3b3JkLiBUaGUgdGV4dCBpcyBmaXJzdCAiIFwKICAgICAgICAgICAicmVwcmVzZW50ZWQgYXMgYSBncmFwaC4gVGhlbiwgYnkgY29tcHV0aW5nIHRoZSBudW1iZXIgb2YgIiBcCiAgICAgICAgICAgImVkZ2VzIHRvIGVhY2ggbm9kZSwgdGhlIG5vcm1hbGl6ZWQgY2VudHJhbGl0eSBvZiB0aGUgd29yZHMgYXJlICIgXAogICAgICAgICAgICJkZXRlcm1pbmVkLjwvcD4iCgoKQGFwcC5yb3V0ZSgnL2FwaS92MS9jZW50cmFsaXR5JywgbWV0aG9kcz1bJ0dFVCddKQpkZWYgYXBpX2NlbnRyYWxpdHlfc2NvcmUoKToKICAgIHNjaGVtYSA9IHsKICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICAgICAidGV4dCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmVkIjogWyJ0ZXh0Il0KICAgIH0KICAgIGhlYWRlcnMgPSB7IkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIn0KICAgIGlucHV0X3BhcmFtcyA9IHtrZXk6IHZhbHVlIGZvciBrZXksIHZhbHVlIGluIHJlcXVlc3QuYXJncy5pdGVtcygpfQoKICAgIHRyeToKICAgICAgICB2YWxpZGF0ZShpbnB1dF9wYXJhbXMsIHNjaGVtYSkKICAgIGV4Y2VwdCBWYWxpZGF0aW9uRXJyb3IgYXMgZToKICAgICAgICB2YWxpZGF0aW9uX2Vycm9yID0ganNvbi5kdW1wcygKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZidlcnJvcic6ICd7ZS5tZXNzYWdlfS4gRXhwZWN0ZWQge3NjaGVtYVsicmVxdWlyZWQiXX0nCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGluZGVudD00LCBzb3J0X2tleXM9VHJ1ZQogICAgICAgICkKICAgICAgICByZXR1cm4gbWFrZV9yZXNwb25zZSh2YWxpZGF0aW9uX2Vycm9yLCA0MDAsIGhlYWRlcnMpCgogICAgcmVxID0gcmVxdWVzdC5hcmdzWyJ0ZXh0Il0KICAgIGlmIHJlcSA9PSAiIjoKICAgICAgICB2YWx1ZV9lcnJvciA9IGpzb24uZHVtcHMoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJlcnJvciI6ICJ2YWx1ZSBlcnJvci4gRXhwZWN0ZWQgbm9uIGVtcHR5IHN0cmluZyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgaW5kZW50PTQsIHNvcnRfa2V5cz1UcnVlCiAgICAgICAgKQogICAgICAgIHJldHVybiBtYWtlX3Jlc3BvbnNlKHZhbHVlX2Vycm9yLCA0MDAsIGhlYWRlcnMpCgogICAgZG9jID0gVGV4dDJHcmFwaChyZXEpCiAgICBkb2MucHJlcHJvY2Vzc190ZXh0KHN0b3BfZmlsdGVyPVRydWUsIHBvc19maWx0ZXI9VHJ1ZSkKICAgIGRvYy50cmFuc2Zvcm0od2luZG93PTIpCiAgICByZXN1bHRzID0gZG9jLm5vcm1hbGl6ZWRfZGVncmVlX2NlbnRyYWxpdHkoKQogICAgcmV0dXJuIG1ha2VfcmVzcG9uc2UoanNvbmlmeShyZXN1bHRzKSwgMjAwLCBoZWFkZXJzKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBhcHAucnVuKGRlYnVnPVRydWUsIGhvc3Q9JzAuMC4wLjAnKQoKPHxmaW1fc3VmZml4fD4KZnJvbSBqc29uc2NoZW1hIGltcG9ydCAodmFsaWRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcikKCmZyb20gY2VudHJhbGl0eV9tZXRyaWNzLnRleHQyZ3JhcGggaW1wb3J0IFRleHQyR3JhcGgKPHxmaW1fZW5kfD4="]
["9ec1159cdb0faa411c71b586a304c969c2838731-2","9ec1159cdb0faa411c71b586a304c969c2838731","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojCiMgIEFkdmVudCBvZiBDb2RlIDIwMjAgLSBkYXkgOAojCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAppbXBvcnQgcmUKCklOUFVURklMRSA9ICJpbnB1dC50eHQiCgoKU0FNUExFX0lOUFVUID0gIiIiCm5vcCArMAphY2MgKzEKam1wICs0CmFjYyArMwpqbXAgLTMKYWNjIC05OQphY2MgKzEKam1wIC00CmFjYyArNgoiIiIKCmRlZiBzYW1wbGVfaW5wdXQoKToKICAgIHJldHVybiBmaWx0ZXJfYmxhbmtfbGluZXMoU0FNUExFX0lOUFVULnNwbGl0KCJcbiIpKQoKCiMgVXRpbGl0eSBmdW5jdGlvbnMKCgpkZWYgbG9hZF9pbnB1dChpbmZpbGUpOgogICAgcmV0dXJuIGxpc3QoZmlsdGVyX2JsYW5rX2xpbmVzKFBhdGgoaW5maWxlKS5vcGVuKCkpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKZGVmIGZpbHRlcl9ibGFua19saW5lcyhsaW5lcyk6CiAgICByZXR1cm4gW2xpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiBsaW5lcyBpZiBsaW5lLnN0cmlwKCldCjx8ZmltX2VuZHw+"]
["9bb370c02b0ad2c3b2c123845d1187fc06e05333-3","9bb370c02b0ad2c3b2c123845d1187fc06e05333","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYXV0aApmcm9tIGRqYW5nby5kYiBpbXBvcnQgREVGQVVMVF9EQl9BTElBUwpmcm9tIGRqYW5nby51dGlscy5kZXByZWNhdGlvbiBpbXBvcnQgTWlkZGxld2FyZU1peGluCgp0cnk6CiAgICBmcm9tIGRqYW5nby51cmxzIGltcG9ydCByZXZlcnNlCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgIGZyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlCgoKZGVmIGlzX2Fub255bW91cyh1c2VyKToKICAgIGlmIHVzZXIgaXMgTm9uZToKICAgICAgICByZXR1cm4gVHJ1ZQogICAgaWYgY2FsbGFibGUodXNlci5pc19hbm9ueW1vdXMpOgogICAgICAgIHJldHVybiB1c2VyLmlzX2Fub255bW91cygpCiAgICByZXR1cm4gdXNlci5pc19hbm9ueW1vdXMKCgpjbGFzcyBTdXBlclVzZXJNaWRkbGV3YXJlKE1pZGRsZXdhcmVNaXhpbik6CiAgICBkZWYgcHJvY2Vzc19yZXF1ZXN0KHNlbGYsIHJlcXVlc3QpOgogICAgICAgIHVzZXIgPSBnZXRhdHRyKHJlcXVlc3QsICd1c2VyJywgTm9uZSkKICAgICAgICBpZiAoaXNfYW5vbnltb3VzKHVzZXIpIGFuZAogICAgICAgICAgICAgICAgc2V0dGluZ3MuREVCVUcgYW5kCiAgICAgICAgICAgICAgICByZXF1ZXN0Lk1FVEFbJ1JFTU9URV9BRERSJ10gaW4gc2V0dGluZ3MuSU5URVJOQUxfSVBTIGFuZAogICAgICAgICAgICAgICAgcmVxdWVzdC5wYXRoICE9IHJldmVyc2UoJ2FkbWluOmxvZ2luJykpOiAgIyB3ZSBhcmUgbm90IG9uIHRoZSBhZG1pbiBsb2dpbiBwYWdlCiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIGZyb20gZGphbmdvLmNvbnRyaWIuYXV0aCBpbXBvcnQgZ2V0X3VzZXJfbW9kZWwKICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgICAgZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLm1vZGVscyBpbXBvcnQgVXNlcgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgVXNlciA9IGdldF91c2VyX21vZGVsKCkKICAgICAgICAgICAgdXNlcm5hbWVfZmllbGQgPSBnZXRhdHRyKFVzZXIsICdVU0VSTkFNRV9GSUVMRCcsICd1c2VybmFtZScpCiAgICAgICAgICAgIHVzZXJuYW1lID0gJ1N1cGVyVXNlcicKICAgICAgICAgICAgbWFuYWdlciA9IFVzZXIuX2RlZmF1bHRfbWFuYWdlci5kYl9tYW5hZ2VyKERFRkFVTFRfREJfQUxJQVMpCiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHVzZXIgPSBtYW5hZ2VyLmdldF9ieV9uYXR1cmFsX2tleSh1c2VybmFtZSkKICAgICAgICAgICAgZXhjZXB0IFVzZXIuRG9lc05vdEV4aXN0OgogICAgICAgICAgICAgICAgdXNlcl9kYXRhID0gewogICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lX2ZpZWxkOiB1c2VybmFtZSwKICAgICAgICAgICAgICAgICAgICAnaXNfc3RhZmYnOiBUcnVlLAogICAgICAgICAgICAgICAgICAgICdpc19hY3RpdmUnOiBUcnVlLAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHVzZXIgPSBtYW5hZ2VyLmNyZWF0ZSgqKnVzZXJfZGF0YSkKICAgICAgICAgICAgdXNlci5iYWNrZW5kID0gJ1N1cGVyVXNlckJhY2tlbmQnCiAgICAgICAgICAgIGF1dGgubG9naW4ocmVxdWVzdCwgdXNlcikKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAnaXNfc3VwZXJ1c2VyJzogVHJ1ZSwKPHxmaW1fZW5kfD4="]
["2f4da99a3d4531ff634b5c05aa19b0bf54a02931-2","2f4da99a3d4531ff634b5c05aa19b0bf54a02931","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCB0YXJmaWxlLCB6aXBmaWxlCgp6aXBfc291cmNlID0gJ2RhdGEvemlwL3RyYWluX3ouemlwJwp0YXJfc291cmNlID0gJ2RhdGEvdGFyL3RyYWluX3QudGFyJwpkZXN0aW5hdGlvbiA9ICdkYXRhL291dHB1dC8nCgoKZGVmIGN1c3RvbV9leHRyYWN0X3Rhcihzb3VyY2VfZmlsZV9wYXRoLCBkZXN0aW5hdGlvbl9wYXRoKToKICAgIHRhciA9IHRhcmZpbGUub3Blbihzb3VyY2VfZmlsZV9wYXRoKQogICAgdGFyLmV4dHJhY3RhbGwoZGVzdGluYXRpb25fcGF0aCkKICAgIHRhci5jbG9zZSgpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpkZWYgY3VzdG9tX2V4dHJhY3RfemlwKHNvdXJjZV9maWxlX3BhdGgsIGRlc3RpbmF0aW9uX3BhdGgpOgogICAgemlwX3JlZiA9IHppcGZpbGUuWmlwRmlsZShzb3VyY2VfZmlsZV9wYXRoLCAncicpCiAgICB6aXBfcmVmLmV4dHJhY3RhbGwoZGVzdGluYXRpb25fcGF0aCkKPHxmaW1fZW5kfD4="]
["c08b838e1eba1b7ccdd6c7b0d81b69cc34c56b68-1","c08b838e1eba1b7ccdd6c7b0d81b69cc34c56b68","PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQKIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIwIHRoZSBwcnBsTWVzaCBjb250cmlidXRvcnMgKHNlZSBBVVRIT1JTLm1kKQojIFRoaXMgY29kZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgQlNEK1BhdGVudCBsaWNlbnNlLgojIFNlZSBMSUNFTlNFIGZpbGUgZm9yIG1vcmUgZGV0YWlscy4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgppbXBvcnQgcmUKZnJvbSB0eXBpbmcgaW1wb3J0IERpY3QKCmltcG9ydCBlbnZpcm9ubWVudCBhcyBlbnYKCicnJ1JlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBhIE1BQyBhZGRyZXNzIGluIGEgYnl0ZXMgc3RyaW5nLicnJwpSRV9NQUMgPSByYiIoP1A8bWFjPihbMC05YS1mQS1GXXsyfTopezV9WzAtOWEtZkEtRl17Mn0pIgoKCmNsYXNzIE1hcENsaWVudDoKICAgICcnJ1JlcHJlc2VudHMgYSBjbGllbnQgKFNUQSkgaW4gdGhlIGNvbm5lY3Rpb24gbWFwLicnJwogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hYzogc3RyKToKICAgICAgICBzZWxmLm1hYyA9IG1hYwoKCmNsYXNzIE1hcFZhcDoKICAgICcnJ1JlcHJlc2VudHMgYSBWQVAgaW4gdGhlIGNvbm5lY3Rpb24gbWFwLicnJwoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBic3NpZDogc3RyLCBzc2lkOiBieXRlcyk6CiAgICAgICAgc2VsZi5ic3NpZCA9IGJzc2lkCiAgICAgICAgc2VsZi5zc2lkID0gc3NpZAogICAgICAgIHNlbGYuY2xpZW50cyA9IHt9CgogICAgZGVmIGFkZF9jbGllbnQoc2VsZiwgbWFjOiBzdHIpOgogICAgICAgIGNsaWVudCA9IE1hcENsaWVudChtYWMpCiAgICAgICAgc2VsZi5jbGllbnRzW21hY10gPSBjbGllbnQKICAgICAgICByZXR1cm4gY2xpZW50CgoKY2xhc3MgTWFwUmFkaW86CiAgICAnJydSZXByZXNlbnRzIGEgcmFkaW8gaW4gdGhlIGNvbm5lY3Rpb24gbWFwLicnJwoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1aWQ6IHN0cik6CiAgICAgICAgc2VsZi51aWQgPSB1aWQKICAgICAgICBzZWxmLnZhcHMgPSB7fQoKICAgIGRlZiBhZGRfdmFwKHNlbGYsIGJzc2lkOiBzdHIsIHNzaWQ6IGJ5dGVzKToKICAgICAgICB2YXAgPSBNYXBWYXAoYnNzaWQsIHNzaWQpCiAgICAgICAgc2VsZi52YXBzW2Jzc2lkXSA9IHZhcAogICAgICAgIHJldHVybiB2YXAKCgpjbGFzcyBNYXBEZXZpY2U6CiAgICAnJydSZXByZXNlbnRzIGEgZGV2aWNlIGluIHRoZSBjb25uZWN0aW9uIG1hcC4nJycKCiAgICBkZWYgX19pbml0X18oc2VsZiwgbWFjOiBzdHIpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5tYWMgPSBtYWMKICAgICAgICBzZWxmLnJhZGlvcyA9IHt9Cgo8fGZpbV9lbmR8Pg=="]
["2f815741d5621e7eb54fa9140c7fe69d3aea0c74-1","2f815741d5621e7eb54fa9140c7fe69d3aea0c74","PHxmaW1fcHJlZml4fD4KZnJvbSBnbG9iIGltcG9ydCBnbG9iCmltcG9ydCBwaWNrbGUgYXMgcGtsCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgYXJncGFyc2UKaW1wb3J0IHRyYWNlYmFjawppbXBvcnQgb3MKaW1wb3J0IHBhbmRhcyBhcyBwZAoKcmVwYWlyID0gRmFsc2UKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXycgYW5kIG5vdCByZXBhaXI6CiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKICAgICAgICBkZXNjcmlwdGlvbj0nUnVuIGJvdW5kYXJ5IHNhbXBsaW5nJwogICAgKQoKCgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWdlbmVyYXRpb25fcGF0aCcsIHR5cGU9c3RyKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXZveGVsX2lucHV0JywgZGVzdD0ndm94ZWxfaW5wdXQnLCBhY3Rpb249J3N0b3JlX3RydWUnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXBjX2lucHV0JywgZGVzdD0ndm94ZWxfaW5wdXQnLCBhY3Rpb249J3N0b3JlX2ZhbHNlJykKICAgIHBhcnNlci5zZXRfZGVmYXVsdHModm94ZWxfaW5wdXQ9VHJ1ZSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1yZXMnLHR5cGU9aW50KQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXBvaW50cycsdHlwZT1pbnQpCgogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCgogICAgaWYgYXJncy52b3hlbF9pbnB1dDoKICAgICAgICBpbnB1dF9uYW1lID0gImV2YWxfdm94ZWxpemF0aW9uX3t9Ii5mb3JtYXQoYXJncy5yZXMpCiAgICBlbHNlOgogICAgICAgIGlucHV0X25hbWUgPSAiZXZhbF9wb2ludGNsb3VkX3t9Ii5mb3JtYXQoYXJncy5wb2ludHMpCgogICAgZ2VuZXJhdGlvbl9wYXRocyA9IGdsb2IoYXJncy5nZW5lcmF0aW9uX3BhdGggKyAiLyovKi8iKQoKICAgIGd0X2RhdGFfcGF0aCA9ICdzaGFwZW5ldC9kYXRhLycKCgoKCgogICAgZXZhbF9hbGwgPSB7CiAgICAgICAgJ3BhdGgnIDogW10sCiAgICAgICAgJ3JlY29uc3RfY29tcGxldGVuZXNzJzogW10sCiAgICAgICAgJ3JlY29uc3RfYWNjdXJhY3knOiBbXSwKICAgICAgICAncmVjb25zdF9ub3JtYWxzIGNvbXBsZXRlbmVzcyc6IFtdLAogICAgICAgICdyZWNvbnN0X25vcm1hbHMgYWNjdXJhY3knOiBbXSwKICAgICAgICAncmVjb25zdF9ub3JtYWxzJzogW10sCiAgICAgICAgJ3JlY29uc3RfY29tcGxldGVuZXNzMic6IFtdLAogICAgICAgICdyZWNvbnN0X2FjY3VyYWN5Mic6IFtdLAogICAgICAgICdyZWNvbnN0X2NoYW1mZXJfbDInOiBbXSwKPHxmaW1faG9sZXw+CiAgICAgICAgJ2lucHV0X25vcm1hbHMgYWNjdXJhY3knOiBbXSwKICAgICAgICAnaW5wdXRfbm9ybWFscyc6IFtdLAogICAgICAgICdpbnB1dF9jb21wbGV0ZW5lc3MyJzogW10sCiAgICAgICAgJ2lucHV0X2FjY3VyYWN5Mic6IFtdLAogICAgICAgICdpbnB1dF9jaGFtZmVyX2wyJzogW10sCiAgICAgICAgJ2lucHV0X2lvdSc6IFtdCiAgICB9CgogICAgZXZhbF9hbGxfYXZnID0gewogICAgfQoKCiAgICBmb3IgcGF0aCBpbiBnZW5lcmF0aW9uX3BhdGhzOgogICAgICAgIHRyeToKICAgICAgICAgICAgbm9ybV9wYXRoID0gb3MucGF0aC5ub3JtcGF0aChwYXRoKQogICAgICAgICAgICBmb2xkZXIgPSBub3JtX3BhdGguc3BsaXQob3Muc2VwKVstMl0KICAgICAgICAgICAgZmlsZV9uYW1lID0gbm9ybV9wYXRoLnNwbGl0KG9zLnNlcClbLTFdCgoKICAgICAgICAgICAgZXZhbF9yZWNvbnN0ID0gcGtsLmxvYWQob3BlbihwYXRoICsgJy9ldmFsLnBrbCcsJ3JiJykpCiAgICAgICAgICAgIGV2YWxfaW5wdXQgPSBwa2wubG9hZChvcGVuKGd0X2RhdGFfcGF0aCArICcve30ve30ve30ucGtsJy5mb3JtYXQoZm9sZGVyLCBmaWxlX25hbWUsIGlucHV0X25hbWUpLCdyYicpKQoKICAgICAgICAgICAgZXZhbF9hbGxbJ3BhdGgnXS5hcHBlbmQocGF0aCkKCiAgICAgICAgICAgIGZvciBrZXkgaW4gZXZhbF9yZWNvbnN0OgogICAgICAgICAgICAgICAgaWYga2V5ID09ICdjaGFtZmVyJzoKICAgICAgICAgICAgICAgICAgICBldmFsX2FsbFsncmVjb25zdF9jaGFtZmVyX2wyJ10uYXBwZW5kKCAwLjUgKiAoZXZhbF9yZWNvbnN0WydhY2N1cmFjeTInXSArIGV2YWxfcmVjb25zdFsnY29tcGxldGVuZXNzMiddKSkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgZXZhbF9hbGxbJ3JlY29uc3RfJyArIGtleV0uYXBwZW5kKGV2YWxfcmVjb25zdFtrZXldKQoKICAgICAgICAgICAgZm9yIGtleSBpbiBldmFsX2lucHV0OgogICAgICAgICAgICAgICAgZXZhbF9hbGxbJ2lucHV0XycgKyBrZXldLmFwcGVuZChldmFsX2lucHV0W2tleV0pCgogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgogICAgICAgICAgICAjIGxvZ2dlci5leGNlcHRpb24oJ1BhdGg6ID4+Pnt9PDw8Jy5mb3JtYXQoZGF0YVsncGF0aCddWzBdKSkKICAgICAgICAgICAgcHJpbnQoJ0Vycm9yIHdpdGgge306IHt9Jy5mb3JtYXQocGF0aCwgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkpCgogICAgcGtsLmR1bXAoZXZhbF9hbGwsIG9wZW4oYXJncy5nZW5lcmF0aW9uX3BhdGggKyAnLy4uL2V2YWx1YXRpb25fcmVzdWx0cy5wa2wnLCAnd2InKSkKCiAgICBmb3Iga2V5IGluIGV2YWxfYWxsOgogICAgICAgIGlmIG5vdCBrZXkgPT0gJ3BhdGgnOgogICAgICAgICAgICBkYXRhID0gbnAuYXJyYXkoZXZhbF9hbGxba2V5XSkKICAgICAgICAgICAgZGF0YSA9IGRhdGFbfm5wLmlzbmFuKGRhdGEpXQogICAgICAgICAgICBldmFsX2FsbF9hdmdba2V5KydfbWVhbiddID0gbnAubWVhbihkYXRhKQogICAgICAgICAgICBldmFsX2FsbF9hdmdba2V5ICsgJ19tZWRpYW4nXSA9IG5wLm1lZGlhbihkYXRhKQoKICAgIHBrbC5kdW1wKGV2YWxfYWxsX2F2Zywgb3BlbihhcmdzLmdlbmVyYXRpb25fcGF0aCArICcvLi4vZXZhbHVhdGlvbl9yZXN1bHRzX2F2Zy5wa2wnLCAnd2InKSkKCiAgICBldmFsX2RmID0gcGQuRGF0YUZyYW1lKGV2YWxfYWxsX2F2ZyAsaW5kZXg9WzBdKQogICAgZXZhbF9kZi50b19jc3YoIGFyZ3MuZ2VuZXJhdGlvbl9wYXRoICsgJy8uLi9ldmFsdWF0aW9uX3Jlc3VsdHMuY3N2JykKCmRlZiByZXBhaXJfbmFucyhwYXRoKToKCiAgICBwa2xfZmlsZSA9IHBrbC5sb2FkKG9wZW4ocGF0aCkpCgogICAgZm9yIGtleSBpbiBwa2xfZmlsZToKCiAgICAgICAgYXJyID0gbnAuYXJyYXkocGtsX2ZpbGVba2V5XSkKICAgICAgICBhcnIgPSBhcnJbfm5wLmlzbmFuKGFycildCiAgICAgICAgcGtsX2ZpbGVba2V5XSA9IGFycgoKICAgIGV2YWxfYXZnID0ge30KCiAgICBmb3Iga2V5IGluIHBrbF9maWxlOgogICAgICAgIGV2YWxfYXZnW2tleV0gPSBwa2xfZmlsZVtrZXldLnN1bSgpIC8gbGVuKHBrbF9maWxlW2tleV0pCgogICAgcGtsLmR1bXAocGtsX2ZpbGUgLCBvcGVuKG9zLnBhdGguZGlybmFtZShwYXRoKSArICcvZXZhbF9yZXBhaXJlZC5wa2wnLCAnd2InKSkKICAgIHBrbC5kdW1wKGV2YWxfYXZnICwgb3Blbihvcy5wYXRoLmRpcm5hbWUocGF0aCkgKyAnL2V2YWxfYXZnX3JlcGFpcmVkLnBrbCcsICd3YicpKQoKPHxmaW1fc3VmZml4fD4KICAgICAgICAncmVjb25zdF9pb3UnIDogW10sCiAgICAgICAgJ2lucHV0X2NvbXBsZXRlbmVzcyc6IFtdLAogICAgICAgICdpbnB1dF9hY2N1cmFjeSc6IFtdLAogICAgICAgICdpbnB1dF9ub3JtYWxzIGNvbXBsZXRlbmVzcyc6IFtdLAo8fGZpbV9lbmR8Pg=="]
["e979cbe1174e26ec5a8d8dbd18c03a59a64a0cf3-5","e979cbe1174e26ec5a8d8dbd18c03a59a64a0cf3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGdlcnJpdAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBjaGFuZ2UKPHxmaW1fZW5kfD4="]
["af69fdca3c04b8e622fa20e53bcbefafd10ef4cb-3","af69fdca3c04b8e622fa20e53bcbefafd10ef4cb","PHxmaW1fcHJlZml4fD4KI01JVCBMaWNlbnNlCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIwojQ29weXJpZ2h0IChjKSAyMDE4IGt1cm9zYXdhCiMKI1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKPHxmaW1fZW5kfD4="]
["af69fdca3c04b8e622fa20e53bcbefafd10ef4cb-5","af69fdca3c04b8e622fa20e53bcbefafd10ef4cb","PHxmaW1fcHJlZml4fD4KI01JVCBMaWNlbnNlCiMKI0NvcHlyaWdodCAoYykgMjAxOCBrdXJvc2F3YQojCiNQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CiNvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAojaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwojdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAojY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiNmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgojCiNUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKI2NvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiMKI1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiNJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKI0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQojQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgojTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKI09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCiNTT0ZUV0FSRS4KCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgY2xpZW50CmltcG9ydCBzZXJ2ZXIKaW1wb3J0IHRocmVhZGluZwppbXBvcnQgZ3JwYwpmcm9tIHByb3RvIGltcG9ydCB1cGxvYWRfcGIyX2dycGMKZnJvbSBwcm90byBpbXBvcnQgdXBsb2FkX3BiMgpmcm9tIGNvbmN1cnJlbnQgaW1wb3J0IGZ1dHVyZXMKaW1wb3J0IHRpbWUKaW1wb3J0IG9zCmltcG9ydCByZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpkZWYgc2VydmUoKToKICAgIGZzZXJ2ZXIgPSBncnBjLnNlcnZlcihmdXR1cmVzLlRocmVhZFBvb2xFeGVjdXRvcihtYXhfd29ya2Vycz0xMCkpCiAgICB1cGxvYWRfcGIyX2dycGMuYWRkX1VwbG9hZFNlcnZpY2VyX3RvX3NlcnZlcigKPHxmaW1fZW5kfD4="]
["c8594982f706f3095a97dbc4585b61509e723b3e-1","c8594982f706f3095a97dbc4585b61509e723b3e","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMC4xMyBvbiAyMDE5LTAzLTIwIDE1OjI3Cgpmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMsIG1vZGVscwoKPHxmaW1faG9sZXw+CiAgICAgICAgKCdjaGFtYmVycycsICcwMDA1X2F1dG9fMjAxOTAzMTlfMjIzMicpLAogICAgXQoKICAgIG9wZXJhdGlvbnMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5BZGRGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nY2hhbWJlcicsCiAgICAgICAgICAgIG5hbWU9J2F1dG9tb2RfY2FuX2ZpbmUnLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UpLAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5BZGRGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nY2hhbWJlcicsCiAgICAgICAgICAgIG5hbWU9J21heF9maW5lJywKICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkRlY2ltYWxGaWVsZChkZWNpbWFsX3BsYWNlcz0yLCBkZWZhdWx0PURlY2ltYWwoJzAnKSwgbWF4X2RpZ2l0cz00KSwKICAgICAgICApLAogICAgXQo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCjx8ZmltX2VuZHw+"]
["f1b33e61a16cdd76ffcb174ece9256528a1fdb3d-4","f1b33e61a16cdd76ffcb174ece9256528a1fdb3d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBpY2tsZSBhcyBwCmltcG9ydCBjdjIsIGpzb24sIHNjaXB5Lm1pc2MsIG1hdGgKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gc2tpbWFnZS5kcmF3IGltcG9ydCBsaW5lCmZyb20gc2tpbWFnZS5tb3JwaG9sb2d5IGltcG9ydCB0aGluCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKZnJvbSBQSUwgaW1wb3J0IEltYWdlCmltcG9ydCB4bWwuZXRyZWUuRWxlbWVudFRyZWUgYXMgRVQKZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KCmRlZiBnZXRfbGFiZWwoaW5rbWxfZmlsZV9hYnNfcGF0aCk6CglsZWJlbCA9ICIiCgl0cmVlID0gRVQucGFyc2UoaW5rbWxfZmlsZV9hYnNfcGF0aCkKCXJvb3QgPSB0cmVlLmdldHJvb3QoKQoJZG9jX25hbWVzcGFjZSA9ICJ7aHR0cDovL3d3dy53My5vcmcvMjAwMy9JbmtNTH0iCgoJZm9yIGNoaWxkIGluIHJvb3Q6CgkJaWYgKGNoaWxkLnRhZyA9PSBkb2NfbmFtZXNwYWNlICsgJ2Fubm90YXRpb24nKSBhbmQgKGNoaWxkLmF0dHJpYiA9PSB7J3R5cGUnOiAndHJ1dGgnfSk6CgkJCXJldHVybiBjaGlsZC50ZXh0CgpkZWYgZ2V0X3RyYWNlc19kYXRhKGlua21sX2ZpbGVfYWJzX3BhdGgpOgoKICAgIAl0cmFjZXNfZGF0YSA9IFtdCgogICAgCXRyZWUgPSBFVC5wYXJzZShpbmttbF9maWxlX2Fic19wYXRoKQogICAgCXJvb3QgPSB0cmVlLmdldHJvb3QoKQogICAgCWRvY19uYW1lc3BhY2UgPSAie2h0dHA6Ly93d3cudzMub3JnLzIwMDMvSW5rTUx9IgoKICAgIAknU3RvcmVzIHRyYWNlc19hbGwgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIGlkJwogICAgCXRyYWNlc19hbGwgPSBbeydpZCc6IHRyYWNlX3RhZy5nZXQoJ2lkJyksCiAgICAJCQkJCSdjb29yZHMnOiBbW3JvdW5kKGZsb2F0KGF4aXNfY29vcmQpKSBpZiBmbG9hdChheGlzX2Nvb3JkKS5pc19pbnRlZ2VyKCkgZWxzZSByb3VuZChmbG9hdChheGlzX2Nvb3JkKSAqIDEwMDAwKSBcCiAgICAJCQkJCQkJCQlmb3IgYXhpc19jb29yZCBpbiBjb29yZFsxOl0uc3BsaXQoJyAnKV0gaWYgY29vcmQuc3RhcnRzd2l0aCgnICcpIFwKICAgIAkJCQkJCQkJZWxzZSBbcm91bmQoZmxvYXQoYXhpc19jb29yZCkpIGlmIGZsb2F0KGF4aXNfY29vcmQpLmlzX2ludGVnZXIoKSBlbHNlIHJvdW5kKGZsb2F0KGF4aXNfY29vcmQpICogMTAwMDApIFwKICAgIAkJCQkJCQkJCWZvciBheGlzX2Nvb3JkIGluIGNvb3JkLnNwbGl0KCcgJyldIFwKICAgIAkJCQkJCQlmb3IgY29vcmQgaW4gKHRyYWNlX3RhZy50ZXh0KS5yZXBsYWNlKCdcbicsICcnKS5zcGxpdCgnLCcpXX0gXAogICAgCQkJCQkJCWZvciB0cmFjZV90YWcgaW4gcm9vdC5maW5kYWxsKGRvY19uYW1lc3BhY2UgKyAndHJhY2UnKV0KCiAgICAJJ1NvcnQgdHJhY2VzX2FsbCBsaXN0IGJ5IGlkIHRvIG1ha2Ugc2VhcmNoaW5nIGZvciByZWZlcmVuY2VzIGZhc3RlcicKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgCXRyYWNlc19hbGwuc29ydChrZXk9bGFtYmRhIHRyYWNlX2RpY3Q6IGludCh0cmFjZV9kaWN0WydpZCddKSkKCiAgICAJJ0Fsd2F5cyAxc3QgdHJhY2VHcm91cCBpcyBhIHJlZHVuZGFudCB3cmFwcGVyJwogICAgCXRyYWNlR3JvdXBXcmFwcGVyID0gcm9vdC5maW5kKGRvY19uYW1lc3BhY2UgKyAndHJhY2VHcm91cCcpCjx8ZmltX2VuZHw+"]
["1f5095d7eeff34b75993e4737a7689440557f570-3","1f5095d7eeff34b75993e4737a7689440557f570","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIC0gaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKCmZyb20gc2V0dXB0b29scyBpbXBvcnQgc2V0dXAKCkRFU0NSSVBUSU9OID0gJ0Egc2V0IG9mIHB5dGhvbiBtb2R1bGVzIGZvciBlbnNlbWJsZSBsZWFybmluZyBhbmQgdmlzdWFsaXNhdGlvbicKd2l0aCBvcGVuKCdSRUFETUUucnN0JykgYXMgZjoKICAgIExPTkdfREVTQ1JJUFRJT04gPSBmLnJlYWQoKQoKdmVyc2lvbiA9ICIwLjIuNCIKc2V0dXAobmFtZT0ncHljb2JyYScsCiAgICAgIHZlcnNpb249dmVyc2lvbiwKICAgICAgZGVzY3JpcHRpb249J1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBDT0JSQSBhbGdvcml0aG0gd2l0aCByZWdyZXNzaW9uIGFuYWx5c2lzJywKICAgICAgYXV0aG9yPVsnQmhhcmdhdiBTcmluaXZhc2EgRGVzaWthbicsICdCZW5qYW1pbiBHdWVkaiddLAogICAgICBhdXRob3JfZW1haWw9WydiaGFyZ2F2dmFkZXJAZ21haWwuY29tJywgJ2JlbmphbWluLmd1ZWRqQGlucmlhLmZyJ10sCiAgICAgIHVybD0naHR0cHM6Ly9naXRodWIuY29tL2JoYXJnYXZ2YWRlci9weWNvYnJhJywKICAgICAgbGljZW5zZT0nTUlUJywKICAgICAgY2xhc3NpZmllcnM9WwogICAgICAgICAgJ0RldmVsb3BtZW50IFN0YXR1cyA6OiA0IC0gQmV0YScsCiAgICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTUlUIExpY2Vuc2UnLAogICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbicsCiAgICAgICAgICAnT3BlcmF0aW5nIFN5c3RlbSA6OiBPUyBJbmRlcGVuZGVudCcsCiAgICAgICAgICAnSW50ZW5kZWQgQXVkaWVuY2UgOjogU2NpZW5jZS9SZXNlYXJjaCcsCiAgICAgICAgICAnVG9waWMgOjogU2NpZW50aWZpYy9FbmdpbmVlcmluZycKICAgICAgXSwKICAgICAgcGFja2FnZXM9WydweWNvYnJhJ10sCiAgICAgIGluc3RhbGxfcmVxdWlyZXM9WwogICAgICAgICAgJ251bXB5JywKICAgICAgICAgICdzY2lweScsCiAgICAgICAgICAnc2Npa2l0LWxlYXJuJywKICAgICAgICAgICdtYXRwbG90bGliJywKICAgICAgICAgICdzZWFib3JuJywKICAgICAgICAgICdwYW5kYXMnCgogICAgICBdLAogICAgICB0ZXN0X3N1aXRlPSd0ZXN0cycsCiAgICAgIGtleXdvcmRzPVsKICAgICAgICAgICdBZ2dyZWdhdGlvbiBvZiBQcmVkaWN0b3JzJywKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgJ1JlZ3Jlc3Npb24gQW5hbHlzaXMnLAogICAgICAgICAgJ1Zvcm9ub2kgVGVzc2VsYXRpb24nLAogICAgICAgICAgJ1N0YXRpc3RpY2FsIEFnZ3JlZ2F0aW9uJwo8fGZpbV9lbmR8Pg=="]
["b5e4d24076efa5f3a2a02f3ae8dd1b24b6733d5c-2","b5e4d24076efa5f3a2a02f3ae8dd1b24b6733d5c","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMTggVWx0aW1ha2VyIEIuVi4KIyBVcmFuaXVtIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTEdQTHYzIG9yIGhpZ2hlci4KCmltcG9ydCBqc29uCmltcG9ydCBvcwppbXBvcnQgc3lzCmZyb20gdHlwaW5nIGltcG9ydCBEaWN0LCBPcHRpb25hbCwgTGlzdAoKZnJvbSBQeVF0NS5RdENvcmUgaW1wb3J0IFFPYmplY3QsIHB5cXRQcm9wZXJ0eSwgcHlxdFNpZ25hbCwgUUNvcmVBcHBsaWNhdGlvbiwgUVVybCwgUVNpemVGCmZyb20gUHlRdDUuUXRHdWkgaW1wb3J0IFFDb2xvciwgUUZvbnQsIFFGb250TWV0cmljcywgUUZvbnREYXRhYmFzZQpmcm9tIFB5UXQ1LlF0UW1sIGltcG9ydCBRUW1sQ29tcG9uZW50LCBRUW1sQ29udGV4dAoKaW1wb3J0IFVNLkFwcGxpY2F0aW9uCmZyb20gVU0uRmxhbWVQcm9maWxlciBpbXBvcnQgcHlxdFNsb3QKZnJvbSBVTS5Mb2dnZXIgaW1wb3J0IExvZ2dlcgpmcm9tIFVNLlJlc291cmNlcyBpbXBvcnQgUmVzb3VyY2VzCgoKY2xhc3MgVGhlbWUoUU9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZW5naW5lLCBwYXJlbnQgPSBOb25lKSAtPiBOb25lOgogICAgICAgIHN1cGVyKCkuX19pbml0X18ocGFyZW50KQoKICAgICAgICBzZWxmLl9lbmdpbmUgPSBlbmdpbmUKICAgICAgICBzZWxmLl9zdHlsZXMgPSBOb25lICAjIHR5cGU6IE9wdGlvbmFsW1FPYmplY3RdCiAgICAgICAgc2VsZi5fcGF0aCA9ICIiCiAgICAgICAgc2VsZi5faWNvbnMgPSB7fSAgIyB0eXBlOiBEaWN0W3N0ciwgUVVybF0KICAgICAgICBzZWxmLl9pbWFnZXMgPSB7fSAgIyB0eXBlOiBEaWN0W3N0ciwgUVVybF0KCiAgICAgICAgIyBXb3JrYXJvdW5kIGZvciBpbmNvcnJlY3QgZGVmYXVsdCBmb250IG9uIFdpbmRvd3MKICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKICAgICAgICAgICAgZGVmYXVsdF9mb250ID0gUUZvbnQoKQogICAgICAgICAgICBkZWZhdWx0X2ZvbnQuc2V0UG9pbnRTaXplKDkpCiAgICAgICAgICAgIFFDb3JlQXBwbGljYXRpb24uaW5zdGFuY2UoKS5zZXRGb250KGRlZmF1bHRfZm9udCkKCiAgICAgICAgc2VsZi5fZW1faGVpZ2h0ID0gaW50KFFGb250TWV0cmljcyhRQ29yZUFwcGxpY2F0aW9uLmluc3RhbmNlKCkuZm9udCgpKS5hc2NlbnQoKSkKICAgICAgICBzZWxmLl9lbV93aWR0aCA9IHNlbGYuX2VtX2hlaWdodAoKICAgICAgICAjIENhY2hlIHRoZSBpbml0aWFsIGxhbmd1YWdlIGluIHRoZSBwcmVmZXJlbmNlcy4gRm9yIGZvbnRzLCBhIHNwZWNpYWwgZm9udCBjYW4gYmUgZGVmaW5lZCB3aXRoLCBmb3IgZXhhbXBsZSwKICAgICAgICAjICJtZWRpdW0iIGFuZCAibWVkaXVtX25sX05MIi4gSWYgdGhlIHNwZWNpYWwgb25lIGV4aXN0cywgZ2V0Rm9udCgpIHdpbGwgcmV0dXJuIHRoYXQsIG90aGVyd2lzZSB0aGUgZGVmYXVsdAogICAgICAgICMgd2lsbCBiZSByZXR1cm5lZC4gV2UgY2FjaGUgdGhlIGluaXRpYWwgbGFuZ3VhZ2UgaGVyZSBpcyBiZWNhdXNlIEN1cmEgY2FuIG9ubHkgY2hhbmdlIGl0cyBsYW5ndWFnZSBpZiBpdCBnZXRzCiAgICAgICAgIyByZXN0YXJ0ZWQsIHNvIHdlIG5lZWQgdG8ga2VlcCB0aGUgZm9udHMgY29uc2lzdGVudCBpbiBhIHNpbmdsZSBDdXJhIHJ1bi4KICAgICAgICBzZWxmLl9wcmVmZXJlbmNlcyA9IFVNLkFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uLmdldEluc3RhbmNlKCkuZ2V0UHJlZmVyZW5jZXMoKQogICAgICAgIHNlbGYuX2xhbmdfY29kZSA9IHNlbGYuX3ByZWZlcmVuY2VzLmdldFZhbHVlKCJnZW5lcmFsL2xhbmd1YWdlIikKCiAgICAgICAgc2VsZi5faW5pdGlhbGl6ZURlZmF1bHRzKCkKCiAgICAgICAgc2VsZi5yZWxvYWQoKQoKICAgIHRoZW1lTG9hZGVkID0gcHlxdFNpZ25hbCgpCgogICAgZGVmIHJlbG9hZChzZWxmKToKICAgICAgICBzZWxmLl9zdHlsZXMgPSBOb25lCiAgICAgICAgc2VsZi5fcGF0aCA9ICIiCiAgICAgICAgc2VsZi5faWNvbnMgPSB7fQogICAgICAgIHNlbGYuX2ltYWdlcyA9IHt9CiAgICAgICAgYXBwbGljYXRpb24gPSBVTS5BcHBsaWNhdGlvbi5BcHBsaWNhdGlvbi5nZXRJbnN0YW5jZSgpCiAgICAgICAgYXBwbGljYXRpb24uZ2V0UHJlZmVyZW5jZXMoKS5hZGRQcmVmZXJlbmNlKCJnZW5lcmFsL3RoZW1lIiwgYXBwbGljYXRpb24uZGVmYXVsdF90aGVtZSkKICAgICAgICB0cnk6CiAgICAgICAgICAgIHRoZW1lX3BhdGggPSBSZXNvdXJjZXMuZ2V0UGF0aChSZXNvdXJjZXMuVGhlbWVzLCBhcHBsaWNhdGlvbi5nZXRQcmVmZXJlbmNlcygpLmdldFZhbHVlKCJnZW5lcmFsL3RoZW1lIikpCiAgICAgICAgICAgIHNlbGYubG9hZCh0aGVtZV9wYXRoKQogICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKICAgICAgICAgICAgTG9nZ2VyLmxvZygiZSIsICJDb3VsZCBub3QgZmluZCB0aGVtZSBmaWxlLCByZXNldHRpbmcgdG8gdGhlIGRlZmF1bHQgdGhlbWUuIikKCiAgICAgICAgICAgICMgY2Fubm90IHRoZSBjdXJyZW50IHRoZW1lLCBzbyBnbyBiYWNrIHRvIHRoZSBkZWZhdWx0CiAgICAgICAgICAgIGFwcGxpY2F0aW9uLmdldFByZWZlcmVuY2VzKCkuc2V0VmFsdWUoImdlbmVyYWwvdGhlbWUiLCBhcHBsaWNhdGlvbi5kZWZhdWx0X3RoZW1lKQogICAgICAgICAgICB0aGVtZV9wYXRoID0gUmVzb3VyY2VzLmdldFBhdGgoUmVzb3VyY2VzLlRoZW1lcywgYXBwbGljYXRpb24uZ2V0UHJlZmVyZW5jZXMoKS5nZXRWYWx1ZSgiZ2VuZXJhbC90aGVtZSIpKQogICAgICAgICAgICBzZWxmLmxvYWQodGhlbWVfcGF0aCkKCiAgICBAcHlxdFNsb3QocmVzdWx0ID0gIlFWYXJpYW50TGlzdCIpCiAgICBkZWYgZ2V0VGhlbWVzKHNlbGYpIC0+IExpc3RbRGljdFtzdHIsIHN0cl1dOgogICAgICAgIHRoZW1lcyA9IFtdCiAgICAgICAgZm9yIHBhdGggaW4gUmVzb3VyY2VzLmdldEFsbFBhdGhzRm9yVHlwZShSZXNvdXJjZXMuVGhlbWVzKToKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gb3MubGlzdGRpcihwYXRoKToKICAgICAgICAgICAgICAgICAgICBmb2xkZXIgPSBvcy5wYXRoLmpvaW4ocGF0aCwgZmlsZSkKICAgICAgICAgICAgICAgICAgICB0aGVtZV9maWxlID0gb3MucGF0aC5qb2luKGZvbGRlciwgInRoZW1lLmpzb24iKQogICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZm9sZGVyKSBhbmQgb3MucGF0aC5pc2ZpbGUodGhlbWVfZmlsZSk6CiAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lX2lkID0gb3MucGF0aC5iYXNlbmFtZShmb2xkZXIpCgogICAgICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4odGhlbWVfZmlsZSwgZW5jb2RpbmcgPSAidXRmLTgiKSBhcyBmOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBqc29uLmxvYWQoZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBqc29uLmRlY29kZXIuSlNPTkRlY29kZUVycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZ2dlci5sb2coInciLCAiQ291bGQgbm90IHBhcnNlIHRoZW1lICVzIiwgdGhlbWVfaWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgIyBkbyBub3QgYWRkIHRoaXMgdGhlbWUgdG8gdGhlIGxpc3QsIGJ1dCBjb250aW51ZSBsb29raW5nIGZvciBvdGhlciB0aGVtZXMKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWVfbmFtZSA9IGRhdGFbIm1ldGFkYXRhIl1bIm5hbWUiXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZ2dlci5sb2coInciLCAiVGhlbWUgJXMgZG9lcyBub3QgaGF2ZSBhIG5hbWU7IHVzaW5nIGl0cyBpZCBpbnN0ZWFkIiwgdGhlbWVfaWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWVfbmFtZSA9IHRoZW1lX2lkICMgZmFsbGJhY2sgaWYgbm8gbmFtZSBpcyBzcGVjaWZpZWQgaW4ganNvbgoKICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWVzLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWQiOiB0aGVtZV9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIjogdGhlbWVfbmFtZQogICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CiAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgdGhlbWVzLnNvcnQoa2V5ID0gbGFtYmRhIGs6IGtbIm5hbWUiXSkKCiAgICAgICAgcmV0dXJuIHRoZW1lcwoKICAgIEBweXF0U2xvdChzdHIsIHJlc3VsdCA9ICJRQ29sb3IiKQogICAgZGVmIGdldENvbG9yKHNlbGYsIGNvbG9yOiBzdHIpIC0+IFFDb2xvcjoKICAgICAgICBpZiBjb2xvciBpbiBzZWxmLl9jb2xvcnM6CiAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb2xvcnNbY29sb3JdCgogICAgICAgIExvZ2dlci5sb2coInciLCAiTm8gY29sb3IgJXMgZGVmaW5lZCBpbiBUaGVtZSIsIGNvbG9yKQogICAgICAgIHJldHVybiBRQ29sb3IoKQoKICAgIEBweXF0U2xvdChzdHIsIHJlc3VsdCA9ICJRU2l6ZUYiKQogICAgZGVmIGdldFNpemUoc2VsZiwgc2l6ZSkgLT4gUVNpemVGOgogICAgICAgIGlmIHNpemUgaW4gc2VsZi5fc2l6ZXM6CiAgICAgICAgICAgIHJldHVybiBzZWxmLl9zaXplc1tzaXplXQoKICAgICAgICBMb2dnZXIubG9nKCJ3IiwgIk5vIHNpemUgJXMgZGVmaW5lZCBpbiBUaGVtZSIsIHNpemUpCiAgICAgICAgcmV0dXJuIFFTaXplRigpCgogICAgQHB5cXRTbG90KHN0ciwgcmVzdWx0ID0gIlFVcmwiKQogICAgZGVmIGdldEljb24oc2VsZiwgaWNvbl9uYW1lOiBzdHIpIC0+IFFVcmw6CiAgICAgICAgaWYgaWNvbl9uYW1lIGluIHNlbGYuX2ljb25zOgogICAgICAgICAgICByZXR1cm4gc2VsZi5faWNvbnNbaWNvbl9uYW1lXQoKICAgICAgICAjIFdlIGRvbid0IGxvZyB0aGlzIGFueW1vcmUgc2luY2Ugd2UgaGF2ZSBuZXcgZmFsbGJhY2sgYmVoYXZpb3IgdG8gbG9hZCB0aGUgaWNvbiBmcm9tIGEgcGx1Z2luIGZvbGRlcgogICAgICAgICMgTG9nZ2VyLmxvZygidyIsICJObyBpY29uICVzIGRlZmluZWQgaW4gVGhlbWUiLCBpY29uX25hbWUpCiAgICAgICAgcmV0dXJuIFFVcmwoKQoKICAgIEBweXF0U2xvdChzdHIsIHJlc3VsdCA9ICJRVXJsIikKICAgIGRlZiBnZXRJbWFnZShzZWxmLCBpbWFnZV9uYW1lOiBzdHIpIC0+IFFVcmw6CiAgICAgICAgaWYgaW1hZ2VfbmFtZSBpbiBzZWxmLl9pbWFnZXM6CiAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbWFnZXNbaW1hZ2VfbmFtZV0KCiAgICAgICAgTG9nZ2VyLmxvZygidyIsICJObyBpbWFnZSAlcyBkZWZpbmVkIGluIFRoZW1lIiwgaW1hZ2VfbmFtZSkKICAgICAgICByZXR1cm4gUVVybCgpCgogICAgQHB5cXRTbG90KHN0ciwgcmVzdWx0ID0gIlFGb250IikKICAgIGRlZiBnZXRGb250KHNlbGYsIGZvbnRfbmFtZTogc3RyKSAtPiBRRm9udDoKICAgICAgICBsYW5nX3NwZWNpZmljX2ZvbnRfbmFtZSA9ICIlc18lcyIgJSAoZm9udF9uYW1lLCBzZWxmLl9sYW5nX2NvZGUpCiAgICAgICAgaWYgbGFuZ19zcGVjaWZpY19mb250X25hbWUgaW4gc2VsZi5fZm9udHM6CiAgICAgICAgICAgIHJldHVybiBzZWxmLl9mb250c1tsYW5nX3NwZWNpZmljX2ZvbnRfbmFtZV0KCiAgICAgICAgaWYgZm9udF9uYW1lIGluIHNlbGYuX2ZvbnRzOgogICAgICAgICAgICByZXR1cm4gc2VsZi5fZm9udHNbZm9udF9uYW1lXQoKICAgICAgICBMb2dnZXIubG9nKCJ3IiwgIk5vIGZvbnQgJXMgZGVmaW5lZCBpbiBUaGVtZSIsIGZvbnRfbmFtZSkKICAgICAgICByZXR1cm4gUUZvbnQoKQoKICAgIEBweXF0UHJvcGVydHkoUU9iamVjdCwgbm90aWZ5ID0gdGhlbWVMb2FkZWQpCiAgICBkZWYgc3R5bGVzKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl9zdHlsZXMKCiAgICBAcHlxdFNsb3Qoc3RyKQogICAgZGVmIGxvYWQoc2VsZiwgcGF0aDogc3RyLCBpc19maXJzdF9jYWxsOiBib29sID0gVHJ1ZSkgLT4gTm9uZToKICAgICAgICBpZiBwYXRoID09IHNlbGYuX3BhdGg6CiAgICAgICAgICAgIHJldHVybgoKICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHBhdGgsICJ0aGVtZS5qc29uIiksIGVuY29kaW5nID0gInV0Zi04IikgYXMgZjoKICAgICAgICAgICAgTG9nZ2VyLmxvZygiZCIsICJMb2FkaW5nIHRoZW1lIGZpbGU6ICVzIiwgb3MucGF0aC5qb2luKHBhdGgsICJ0aGVtZS5qc29uIikpCiAgICAgICAgICAgIGRhdGEgPSBqc29uLmxvYWQoZikKCiAgICAgICAgIyBJdGVyYXRpdmVseSBsb2FkIGluaGVyaXRlZCB0aGVtZXMKICAgICAgICB0cnk6CiAgICAgICAgICAgIHRoZW1lX2lkID0gZGF0YVsibWV0YWRhdGEiXVsiaW5oZXJpdHMiXQogICAgICAgICAgICBzZWxmLmxvYWQoUmVzb3VyY2VzLmdldFBhdGgoUmVzb3VyY2VzLlRoZW1lcywgdGhlbWVfaWQpLCBpc19maXJzdF9jYWxsID0gRmFsc2UpCiAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgogICAgICAgICAgICBMb2dnZXIubG9nKCJlIiwgIkNvdWxkIG5vdCBmaW5kIGluaGVyaXRlZCB0aGVtZSAlcyIsIHRoZW1lX2lkKQogICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgcGFzcyAgIyBObyBtZXRhZGF0YSBvciBubyBpbmhlcml0cyBrZXl3b3JkIGluIHRoZSB0aGVtZS5qc29uIGZpbGUKCiAgICAgICAgaWYgImNvbG9ycyIgaW4gZGF0YToKICAgICAgICAgICAgZm9yIG5hbWUsIGNvbG9yIGluIGRhdGFbImNvbG9ycyJdLml0ZW1zKCk6CiAgICAgICAgICAgICAgICBjID0gUUNvbG9yKGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIGNvbG9yWzNdKQogICAgICAgICAgICAgICAgc2VsZi5fY29sb3JzW25hbWVdID0gYwoKICAgICAgICBmb250c19kaXIgPSBvcy5wYXRoLmpvaW4ocGF0aCwgImZvbnRzIikKICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZvbnRzX2Rpcik6CiAgICAgICAgICAgIGZvciByb290LCBkaXJuYW1lcywgZmlsZW5hbWVzIGluIG9zLndhbGsoZm9udHNfZGlyKToKICAgICAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlbmFtZXM6CiAgICAgICAgICAgICAgICAgICAgaWYgZmlsZW5hbWUubG93ZXIoKS5lbmRzd2l0aCgiLnR0ZiIpOgogICAgICAgICAgICAgICAgICAgICAgICBRRm9udERhdGFiYXNlLmFkZEFwcGxpY2F0aW9uRm9udChvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZW5hbWUpKQoKICAgICAgICBpZiAiZm9udHMiIGluIGRhdGE6CiAgICAgICAgICAgIHN5c3RlbV9mb250X3NpemUgPSBRQ29yZUFwcGxpY2F0aW9uLmluc3RhbmNlKCkuZm9udCgpLnBvaW50U2l6ZSgpCiAgICAgICAgICAgIGZvciBuYW1lLCBmb250IGluIGRhdGFbImZvbnRzIl0uaXRlbXMoKToKICAgICAgICAgICAgICAgIHFfZm9udCA9IFFGb250KCkKICAgICAgICAgICAgICAgIHFfZm9udC5zZXRGYW1pbHkoZm9udC5nZXQoImZhbWlseSIsIFFDb3JlQXBwbGljYXRpb24uaW5zdGFuY2UoKS5mb250KCkuZmFtaWx5KCkpKQoKICAgICAgICAgICAgICAgIGlmIGZvbnQuZ2V0KCJib2xkIik6CiAgICAgICAgICAgICAgICAgICAgcV9mb250LnNldEJvbGQoZm9udC5nZXQoImJvbGQiLCBGYWxzZSkpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHFfZm9udC5zZXRXZWlnaHQoZm9udC5nZXQoIndlaWdodCIsIDUwKSkKCiAgICAgICAgICAgICAgICBxX2ZvbnQuc2V0TGV0dGVyU3BhY2luZyhRRm9udC5BYnNvbHV0ZVNwYWNpbmcsIGZvbnQuZ2V0KCJsZXR0ZXJTcGFjaW5nIiwgMCkpCiAgICAgICAgICAgICAgICBxX2ZvbnQuc2V0SXRhbGljKGZvbnQuZ2V0KCJpdGFsaWMiLCBGYWxzZSkpCiAgICAgICAgICAgICAgICBxX2ZvbnQuc2V0UG9pbnRTaXplKGludChmb250LmdldCgic2l6ZSIsIDEpICogc3lzdGVtX2ZvbnRfc2l6ZSkpCiAgICAgICAgICAgICAgICBxX2ZvbnQuc2V0Q2FwaXRhbGl6YXRpb24oUUZvbnQuQWxsVXBwZXJjYXNlIGlmIGZvbnQuZ2V0KCJjYXBpdGFsaXplIiwgRmFsc2UpIGVsc2UgUUZvbnQuTWl4ZWRDYXNlKQoKICAgICAgICAgICAgICAgIHNlbGYuX2ZvbnRzW25hbWVdID0gcV9mb250CgogICAgICAgIGlmICJzaXplcyIgaW4gZGF0YToKICAgICAgICAgICAgZm9yIG5hbWUsIHNpemUgaW4gZGF0YVsic2l6ZXMiXS5pdGVtcygpOgogICAgICAgICAgICAgICAgcyA9IFFTaXplRigpCiAgICAgICAgICAgICAgICBzLnNldFdpZHRoKHJvdW5kKHNpemVbMF0gKiBzZWxmLl9lbV93aWR0aCkpCiAgICAgICAgICAgICAgICBzLnNldEhlaWdodChyb3VuZChzaXplWzFdICogc2VsZi5fZW1faGVpZ2h0KSkKCiAgICAgICAgICAgICAgICBzZWxmLl9zaXplc1tuYW1lXSA9IHMKCiAgICAgICAgaWNvbnNkaXIgPSBvcy5wYXRoLmpvaW4ocGF0aCwgImljb25zIikKICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGljb25zZGlyKToKICAgICAgICAgICAgZm9yIGljb24gaW4gb3MubGlzdGRpcihpY29uc2Rpcik6CiAgICAgICAgICAgICAgICBuYW1lID0gb3MucGF0aC5zcGxpdGV4dChpY29uKVswXQogICAgICAgICAgICAgICAgc2VsZi5faWNvbnNbbmFtZV0gPSBRVXJsLmZyb21Mb2NhbEZpbGUob3MucGF0aC5qb2luKGljb25zZGlyLCBpY29uKSkKCiAgICAgICAgaW1hZ2VzZGlyID0gb3MucGF0aC5qb2luKHBhdGgsICJpbWFnZXMiKQogICAgICAgIGlmIG9zLnBhdGguaXNkaXIoaW1hZ2VzZGlyKToKICAgICAgICAgICAgZm9yIGltYWdlIGluIG9zLmxpc3RkaXIoaW1hZ2VzZGlyKToKICAgICAgICAgICAgICAgIG5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KGltYWdlKVswXQogICAgICAgICAgICAgICAgc2VsZi5faW1hZ2VzW25hbWVdID0gUVVybC5mcm9tTG9jYWxGaWxlKG9zLnBhdGguam9pbihpbWFnZXNkaXIsIGltYWdlKSkKCiAgICAgICAgc3R5bGVzID0gb3MucGF0aC5qb2luKHBhdGgsICJzdHlsZXMucW1sIikKICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShzdHlsZXMpOgogICAgICAgICAgICBjID0gUVFtbENvbXBvbmVudChzZWxmLl9lbmdpbmUsIHN0eWxlcykKICAgICAgICAgICAgY29udGV4dCA9IFFRbWxDb250ZXh0KHNlbGYuX2VuZ2luZSwgc2VsZi5fZW5naW5lKQogICAgICAgICAgICBjb250ZXh0LnNldENvbnRleHRQcm9wZXJ0eSgiVGhlbWUiLCBzZWxmKQogICAgICAgICAgICBzZWxmLl9zdHlsZXMgPSBjLmNyZWF0ZShjb250ZXh0KQoKICAgICAgICAgICAgaWYgYy5pc0Vycm9yKCk6CiAgICAgICAgICAgICAgICBmb3IgZXJyb3IgaW4gYy5lcnJvcnMoKToKICAgICAgICAgICAgICAgICAgICBMb2dnZXIubG9nKCJlIiwgZXJyb3IudG9TdHJpbmcoKSkKCiAgICAgICAgTG9nZ2VyLmxvZygiZCIsICJMb2FkZWQgdGhlbWUgJXMiLCBwYXRoKQogICAgICAgIHNlbGYuX3BhdGggPSBwYXRoCgogICAgICAgICMgb25seSBlbWl0IHRoZSB0aGVtZSBsb2FkZWQgc2lnbmFsIG9uY2UgYWZ0ZXIgYWxsIHRoZSB0aGVtZXMgaW4gdGhlIGluaGVyaXRhbmNlIGNoYWluIGhhdmUgYmVlbiBsb2FkZWQKICAgICAgICBpZiBpc19maXJzdF9jYWxsOgogICAgICAgICAgICBzZWxmLnRoZW1lTG9hZGVkLmVtaXQoKQoKICAgIGRlZiBfaW5pdGlhbGl6ZURlZmF1bHRzKHNlbGYpIC0+IE5vbmU6CiAgICAgICAgc2VsZi5fZm9udHMgPSB7CiAgICAgICAgICAgICJzeXN0ZW0iOiBRQ29yZUFwcGxpY2F0aW9uLmluc3RhbmNlKCkuZm9udCgpLAogICAgICAgICAgICAiZml4ZWQiOiBRRm9udERhdGFiYXNlLnN5c3RlbUZvbnQoUUZvbnREYXRhYmFzZS5GaXhlZEZvbnQpCiAgICAgICAgfQoKICAgICAgICBwYWxldHRlID0gUUNvcmVBcHBsaWNhdGlvbi5pbnN0YW5jZSgpLnBhbGV0dGUoKQogICAgICAgIHNlbGYuX2NvbG9ycyA9IHsKICAgICAgICAgICAgInN5c3RlbV93aW5kb3ciOiBwYWxldHRlLndpbmRvdygpLAogICAgICAgICAgICAic3lzdGVtX3RleHQiOiBwYWxldHRlLnRleHQoKQogICAgICAgIH0KCiAgICAgICAgc2VsZi5fc2l6ZXMgPSB7CiAgICAgICAgICAgICJsaW5lIjogUVNpemVGKHNlbGYuX2VtX3dpZHRoLCBzZWxmLl9lbV9oZWlnaHQpCiAgICAgICAgfQoKICAgICMjICBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBmb3IgdGhpcyBjbGFzcy4KICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGdldEluc3RhbmNlKGNscywgZW5naW5lID0gTm9uZSkgLT4gIlRoZW1lIjoKICAgICAgICAjIE5vdGU6IEV4cGxpY2l0IHVzZSBvZiBjbGFzcyBuYW1lIHRvIHByZXZlbnQgaXNzdWVzIHdpdGggaW5oZXJpdGFuY2UuCiAgICAgICAgaWYgVGhlbWUuX19pbnN0YW5jZSBpcyBOb25lOgogICAgICAgICAgICBUaGVtZS5fX2luc3RhbmNlID0gY2xzKGVuZ2luZSkKICAgICAgICByZXR1cm4gVGhlbWUuX19pbnN0YW5jZQoKPHxmaW1faG9sZXw+CmRlZiBjcmVhdGVUaGVtZShlbmdpbmUsIHNjcmlwdF9lbmdpbmUgPSBOb25lKToKICAgIHJldHVybiBUaGVtZS5nZXRJbnN0YW5jZShlbmdpbmUpCgo8fGZpbV9zdWZmaXh8PgogICAgX19pbnN0YW5jZSA9IE5vbmUgICAjIHR5cGU6ICJUaGVtZSIKCgo8fGZpbV9lbmR8Pg=="]
["fb2dae314192d526ce3267a71da674e5caefce61-1","fb2dae314192d526ce3267a71da674e5caefce61","PHxmaW1fcHJlZml4fD4KIiIiVXBsb2FkIG11bHRpcGxlIGZpbGVzIGF0IG9uY2UgYXV0aGVudGljYXRpbmcgdXNpbmcgaHR0cCBiYXNpYyBhdXRoLiIiIgoKIyBUT0RPOiBSZW1vdmUgc2VydmluZyBIVE1MIHBhZ2UgYW5kIG1ha2UgaXQgYSBwcm9wZXIgYmFja2VuZC4KIyBUT0RPOiBJbnRlcmFjdCB3aXRoIHRoZSBKUyBpbiBmcm9udC1lbmQgYW5kIGJhY2tlbmQgdG8gc2hvdyBhIHByb2dyZXNzIGJhciBpbiB0aGUgVUkuCgppbXBvcnQgaW5zcGVjdAppbXBvcnQgbG9nZ2luZwppbXBvcnQgb3MKaW1wb3J0IHNvY2tldAppbXBvcnQgdGltZQpmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwsIFVuaW9uCgppbXBvcnQgdXZpY29ybgpmcm9tIGZhc3RhcGkgaW1wb3J0IChDb29raWUsIEZhc3RBUEksIEZpbGUsIEhUVFBFeGNlcHRpb24sIFJlc3BvbnNlLCBTZWN1cml0eSwKICAgICAgICAgICAgICAgICAgICAgVXBsb2FkRmlsZSwgc3RhdHVzKQpmcm9tIGZhc3RhcGkucmVzcG9uc2VzIGltcG9ydCAoSFRNTFJlc3BvbnNlLCBKU09OUmVzcG9uc2UsIFBsYWluVGV4dFJlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVkaXJlY3RSZXNwb25zZSkKZnJvbSBmYXN0YXBpLnNlY3VyaXR5IGltcG9ydCBIVFRQQmFzaWMsIEhUVFBCYXNpY0NyZWRlbnRpYWxzCgpmcm9tIG1vZGVscyBpbXBvcnQgZW52CmZyb20gbW9kZWxzLmV4ZWN1dG9yIGltcG9ydCBzaXplX2NvbnZlcnRlcgpmcm9tIG1vZGVscy5maWx0ZXJzIGltcG9ydCBFbmRwb2ludEZpbHRlcgpmcm9tIG1vZGVscy5zZWNyZXRzIGltcG9ydCBTZWNyZXRzCgpsb2dnaW5nLmdldExvZ2dlcigidXZpY29ybi5hY2Nlc3MiKS5hZGRGaWx0ZXIoRW5kcG9pbnRGaWx0ZXIoKSkKCnNlY3VyaXR5ID0gSFRUUEJhc2ljKHJlYWxtPSJzaW1wbGUiKQpMT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcigidXZpY29ybiIpCgphcHAgPSBGYXN0QVBJKCkKCmN1cnJlbnRfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChpbnNwZWN0LmdldGZpbGUoaW5zcGVjdC5jdXJyZW50ZnJhbWUoKSkpKQp1cGxvYWRfZGlyID0gb3MucGF0aC5qb2luKGN1cnJlbnRfZGlyLCAidXBsb2FkcyIpCgppZiBub3Qgb3MucGF0aC5pc2Rpcih1cGxvYWRfZGlyKToKICAgIG9zLm1ha2VkaXJzKHVwbG9hZF9kaXIpCgpzb3VyY2VfaHRtbCA9IG9zLnBhdGguam9pbihjdXJyZW50X2RpciwgInNvdXJjZXMiLCAidXBsb2FkLmh0bWwiKQp3aXRoIG9wZW4oc291cmNlX2h0bWwpIGFzIGZfc3RyZWFtOgogICAgSFRNTF9DT05URU5UID0gZl9zdHJlYW0ucmVhZCgpCgpSRVNFVF9IRUFERVJTID0gewogICAgIldXVy1BdXRoZW50aWNhdGUiOiAiQmFzaWMiLAogICAgIlByYWdtYSI6ICJuby1jYWNoZSIsCiAgICAiRXhwaXJlcyI6ICIwIiwKICAgICJDYWNoZS1Db250cm9sIjogIm5vLWNhY2hlLCBuby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlIiwKICAgICJDbGVhci1TaXRlLURhdGEiOiAnImNhY2hlIiwgImNvb2tpZXMiLCAic3RvcmFnZSIsICJleGVjdXRpb25Db250ZXh0cyInCn0KCgpAYXBwLmRlbGV0ZSgiL2RlbGV0ZS9maWxlL3tuYW1lX2ZpbGV9IikKZGVmIGRlbGV0ZV9maWxlKG5hbWVfZmlsZTogc3RyKSAtPiBKU09OUmVzcG9uc2U6CiAgICAiIiJEZWxldGVzIGEgZmlsZS4KCiAgICBBcmdzOgogICAgICAgIG5hbWVfZmlsZTogVGFrZXMgbmFtZSBvZiB0aGUgZmlsZSB0byBiZSBkZWxldGVkIGFzIGFuIGFyZ3VtZW50LgoKICAgIFJldHVybnM6CiAgICAgICAgSlNPTlJlc3BvbnNlOgogICAgICAgIERlbGV0aW9uIHN0YXR1cyB3cmFwcGVkIGluIGEgSlNPTiBibHVyYi4KICAgICIiIgogICAgdHJ5OgogICAgICAgIG9zLnJlbW92ZShvcy5nZXRjd2QoKSArICIvIiArIG5hbWVfZmlsZSkKICAgICAgICByZXR1cm4gSlNPTlJlc3BvbnNlKAogICAgICAgICAgICBjb250ZW50PXsKICAgICAgICAgICAgICAgICJyZW1vdmVkIjogVHJ1ZQogICAgICAgICAgICB9LAogICAgICAgICAgICBzdGF0dXNfY29kZT0yMDAKICAgICAgICApCiAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CiAgICAgICAgcmV0dXJuIEpTT05SZXNwb25zZSgKICAgICAgICAgICAgY29udGVudD17CiAgICAgICAgICAgICAgICAicmVtb3ZlZCI6IEZhbHNlLAogICAgICAgICAgICAgICAgImVycm9yX21lc3NhZ2UiOiAiRmlsZSBub3QgZm91bmQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHN0YXR1c19jb2RlPTQwNAogICAgICAgICkKCgpAYXBwLnBvc3QoIi91cGxvYWQtZmlsZXMvIiwgcmVzcG9uc2VfY2xhc3M9UGxhaW5UZXh0UmVzcG9uc2UpCmFzeW5jIGRlZiB1cGxvYWRfZmlsZXMoZmlsZXM6IGxpc3RbVXBsb2FkRmlsZV0gPSBGaWxlKC4uLiwgZGVzY3JpcHRpb249IlVwbG9hZCBmaWxlcy4iKSkgLT4gVW5pb25bSlNPTlJlc3BvbnNlLCBzdHJdOgogICAgIiIiVXBsb2FkIGhhbmRsZXIuCgogICAgQXJnczoKICAgICAgICBmaWxlczogVGFrZXMgbGlzdFtVcGxvYWRGaWxlXSBhcyBhbiBhcmd1bWVudC4gVXNlIGxpc3RbYnl0ZXNdIHRvIHVwbG9hZCB1c2luZyBieXRlcy4KCiAgICBSZXR1cm5zOgogICAgICAgIHN0cjoKICAgICAgICBGaWxlIG5hbWVzIGFuZCB0aGUgc2l6ZSBvZiBlYWNoIGZpbGUuCiAgICAiIiIKICAgIHJldHVybl92YWwgPSBbXQogICAgaWYgbm90IFtmIGZvciBmIGluIGZpbGVzIGlmIGYuZmlsZW5hbWVdOgogICAgICAgIHJldHVybiBKU09OUmVzcG9uc2UoCiAgICAgICAgICAgIGNvbnRlbnQ9ewogICAgICAgICAgICAgICAgImVycm9yX21lc3NhZ2UiOiAiTm8gaW5wdXQgcmVjZWl2ZWQuIgogICAgICAgICAgICB9LAogICAgICAgICAgICBzdGF0dXNfY29kZT00MDQsCiAgICAgICAgICAgIGhlYWRlcnM9UkVTRVRfSEVBREVSUwogICAgICAgICkKICAgIGZvciBmaWxlIGluIGZpbGVzOgogICAgICAgIGRhdGEgPSBhd2FpdCBmaWxlLnJlYWQoKQogICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4odXBsb2FkX2RpciwgZmlsZS5maWxlbmFtZSksICd3YicpIGFzIGZpbGVfc3RyZWFtOgogICAgICAgICAgICBmaWxlX3N0cmVhbS53cml0ZShkYXRhKQogICAgICAgIHJldHVybl92YWwuYXBwZW5kKAogICAgICAgICAgICBmIntmaWxlLmZpbGVuYW1lfXsnJy5qb2luKFsnICcgZm9yIF8gaW4gcmFuZ2UoNjAgLSBsZW4oZmlsZS5maWxlbmFtZSkpXSl9e3NpemVfY29udmVydGVyKGxlbihkYXRhKSl9IgogICAgICAgICkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcmV0dXJuICJcbiIuam9pbihyZXR1cm5fdmFsKQoKCjx8ZmltX2VuZHw+"]
["85eeb62f4aa4c373c10b616c4e19f3a67fc400e4-4","85eeb62f4aa4c373c10b616c4e19f3a67fc400e4","PHxmaW1fcHJlZml4fD4KIyBfKl8gY29kaW5nOiB1dGYtOCBfKl8KIiIiCkBEYXRlOiAgICAgICAyMDIxLzUvMjEgMjoxMSDkuIvljYgKQEF1dGhvcjogICAgIHd6CkBGaWxlOiAgICAgICBMb25nZXN0V29yZEluRGljdGlvbmFyeVRocm91Z2hEZWxldGluZy5weQpARGVjczoKIiIiCgoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KJycnCkdpdmVuIGEgc3RyaW5nIGFuZCBhIHN0cmluZyBkaWN0aW9uYXJ5LCBmaW5kIHRoZSBsb25nZXN0IHN0cmluZyBpbiB0aGUgZGljdGlvbmFyeSB0aGF0IGNhbiBiZSBmb3JtZWQgYnkgZGVsZXRpbmcgc29tZSBjaGFyYWN0ZXJzIG9mIHRoZSBnaXZlbiBzdHJpbmcuIApJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwb3NzaWJsZSByZXN1bHRzLCByZXR1cm4gdGhlIGxvbmdlc3Qgd29yZCB3aXRoIHRoZSBzbWFsbGVzdCBsZXhpY29ncmFwaGljYWwgb3JkZXIuIElmIHRoZXJlIGlzIG5vIHBvc3NpYmxlIHJlc3VsdCwgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcuCgo8fGZpbV9lbmR8Pg=="]
["c8ab3b3d160a39f0cfa6428c6913c7131734152b-1","c8ab3b3d160a39f0cfa6428c6913c7131734152b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmZyb20gVHJhaW5pbmcuY29ydGV4XzN4M19jYWRkeSBpbXBvcnQgKgoKY2xhc3MgQ29ydGV4M3gzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgoKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBzZWxmLmNvcnRleCA9IENvcnRleF8zeDMoKQogICAgICAgIHNlbGYuaW50ZWwgPSB7ICdib2FyZCc6IFsxMCwxMCwwLCAxLDEsMCwgMTAsMCwxXSwKICAgICAgICAgICAgICAgICAgICAgICAnb3B0aW9ucyc6IFsyLDUsN10sIAogICAgICAgICAgICAgICAgICAgICAgICdhbmFseXNpcyc6IFsyMCwyLDExLCAyMSwxMSwxLCAxMiwxMV0sCiAgICAgICAgICAgICAgICAgICAgICAgJ21hcmtlcl9jb2RlJzogMSwKICAgICAgICAgICAgICAgICAgICAgICAnZW5lbXlfY29kZSc6IDEwIH0KICAgICAgICBzZWxmLnByaW9yaXRpZXMgPSBbNSwyLEZhbHNlLEZhbHNlLEZhbHNlLDIsMl0KCgogICAgZGVmIHRlc3RfZ2V0X3ByaW9yaXR5X2xpc3RfcmV0dXJuc19hX3ByaW9yaXR5X2xpc3Qoc2VsZik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICB0ZXN0X3lpZWxkcyA9IHNlbGYuY29ydGV4LmdldF9wcmlvcml0eV9saXN0KHNlbGYuaW50ZWwpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0X3lpZWxkcywgc2VsZi5wcmlvcml0aWVzKQoKPHxmaW1fZW5kfD4="]
["55321625fefa043a0782ebf4314ac048544643ff-1","55321625fefa043a0782ebf4314ac048544643ff","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKCmltcG9ydCByZXF1ZXN0cwpmcm9tIGRqYW5nby5jb25mIGltcG9ydCBzZXR0aW5ncwpmcm9tIGRqYW5nby5jb250cmliLmF1dGggaW1wb3J0IGxvZ291dApmcm9tIGRqYW5nby5jb250cmliLmF1dGguZGVjb3JhdG9ycyBpbXBvcnQgbG9naW5fcmVxdWlyZWQKZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlc3BvbnNlUmVkaXJlY3QKZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcmV2ZXJzZQpmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKZnJvbSBzcGlkX2NpZV9vaWRjLmVudGl0eS5qd3RzZSBpbXBvcnQgY3JlYXRlX2p3cwpmcm9tIHNwaWRfY2llX29pZGMuZW50aXR5Lm1vZGVscyBpbXBvcnQgRmVkZXJhdGlvbkVudGl0eUNvbmZpZ3VyYXRpb24KZnJvbSAuLm1vZGVscyBpbXBvcnQgT2lkY0F1dGhlbnRpY2F0aW9uVG9rZW4KZnJvbSAuLm9hdXRoMiBpbXBvcnQgKgpmcm9tIC4ub2lkYyBpbXBvcnQgKgoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKQGxvZ2luX3JlcXVpcmVkCmRlZiBvaWRjX3JwaW5pdGlhdGVkX2xvZ291dChyZXF1ZXN0KToKICAgICIiIgogICAgICAgIENhbGwgdGhlIHRva2VuIHJldm9jYXRpb24gZW5kcG9pbnQgb2YgdGhlIG9wCiAgICAiIiIKICAgIGF1dGhfdG9rZW5zID0gT2lkY0F1dGhlbnRpY2F0aW9uVG9rZW4ub2JqZWN0cy5maWx0ZXIoCiAgICAgICAgdXNlcj1yZXF1ZXN0LnVzZXIKICAgICkuZmlsdGVyKHJldm9rZWRfX2lzbnVsbD1UcnVlKQoKICAgIGRlZmF1bHRfbG9nb3V0X3VybCA9IGdldGF0dHIoCiAgICAgICAgc2V0dGluZ3MsICJMT0dPVVRfUkVESVJFQ1RfVVJMIiwgTm9uZQogICAgKSBvciByZXZlcnNlKCJzcGlkX2NpZV9ycF9sYW5kaW5nIikKICAgIGlmIG5vdCBhdXRoX3Rva2VuczoKICAgICAgICBsb2dnZXIud2FybmluZygKICAgICAgICAgICAgIlRva2VuIHJldm9jYXRpb24gZmFpbGVkOiBub3QgZm91bmQgYW55IGF1dGhlbnRpY2F0aW9uIHNlc3Npb24iCiAgICAgICAgKQogICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2VSZWRpcmVjdChkZWZhdWx0X2xvZ291dF91cmwpCgogICAgYXV0aF90b2tlbiA9IGF1dGhfdG9rZW5zLmxhc3QoKQogICAgYXV0aHogPSBhdXRoX3Rva2VuLmF1dGh6X3JlcXVlc3QKICAgIHByb3ZpZGVyX2NvbmYgPSBhdXRoei5wcm92aWRlcl9jb25maWd1cmF0aW9uCiAgICByZXZvY2F0aW9uX2VuZHBvaW50X3VybCA9IHByb3ZpZGVyX2NvbmYuZ2V0KCJyZXZvY2F0aW9uX2VuZHBvaW50IikKCiAgICAjIGZpcnN0IG9mIGFsbCBvbiBSUCBzaWRlIC4uLgogICAgbG9nZ2VyLmluZm8oZiJ7cmVxdWVzdC51c2VyfSBsb2dvdXQiKQogICAgbG9nb3V0KHJlcXVlc3QpCiAgICBpZiBub3QgcmV2b2NhdGlvbl9lbmRwb2ludF91cmw6CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoCiAgICAgICAgICAgIGYie2F1dGh6LnByb3ZpZGVyX2lkfSBkb2Vzbid0IGV4cG9zZSB0aGUgdG9rZW4gcmV2b2NhdGlvbiBlbmRwb2ludC4iCiAgICAgICAgKQogICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2VSZWRpcmVjdChkZWZhdWx0X2xvZ291dF91cmwpCiAgICBlbHNlOgogICAgICAgIHJwX2NvbmYgPSBGZWRlcmF0aW9uRW50aXR5Q29uZmlndXJhdGlvbi5vYmplY3RzLmZpbHRlcigKICAgICAgICAgICAgc3ViPSBhdXRoei5jbGllbnRfaWQsCiAgICAgICAgICAgIGlzX2FjdGl2ZT1UcnVlLAogICAgICAgICkuZmlyc3QoKQoKICAgICAgICAjIHByaXZhdGVfa2V5X2p3dAogICAgICAgIGNsaWVudF9hc3NlcnRpb24gPSBjcmVhdGVfandzKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaXNzIjogYXV0aHouY2xpZW50X2lkLAogICAgICAgICAgICAgICAgInN1YiI6IGF1dGh6LmNsaWVudF9pZCwKICAgICAgICAgICAgICAgICJhdWQiOiBbcmV2b2NhdGlvbl9lbmRwb2ludF91cmxdLAogICAgICAgICAgICAgICAgImlhdCI6IGlhdF9ub3coKSwKICAgICAgICAgICAgICAgICJleHAiOiBleHBfZnJvbV9ub3coKSwKICAgICAgICAgICAgICAgICJqdGkiOiBzdHIodXVpZC51dWlkNCgpKSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgandrX2RpY3Q9cnBfY29uZi5qd2tzWzBdLAogICAgICAgICkKCiAgICAgICAgYXV0aF90b2tlbi5sb2dnZWRfb3V0ID0gdGltZXpvbmUubG9jYWx0aW1lKCkKICAgICAgICBhdXRoX3Rva2VuLnNhdmUoKQoKICAgICAgICByZXZvY2F0aW9uX3JlcXVlc3QgPSBkaWN0KAogICAgICAgICAgICB0b2tlbiA9IGF1dGhfdG9rZW4uYWNjZXNzX3Rva2VuLAogICAgICAgICAgICBjbGllbnRfaWQgPSBhdXRoei5jbGllbnRfaWQsCiAgICAgICAgICAgIGNsaWVudF9hc3NlcnRpb24gPSBjbGllbnRfYXNzZXJ0aW9uLAogICAgICAgICAgICBjbGllbnRfYXNzZXJ0aW9uX3R5cGUgPSAidXJuOmlldGY6cGFyYW1zOm9hdXRoOmNsaWVudC1hc3NlcnRpb24tdHlwZTpqd3QtYmVhcmVyIgogICAgICAgICkKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJlcXVlc3RzLnBvc3QocmV2b2NhdGlvbl9lbmRwb2ludF91cmwsIGRhdGEgPSByZXZvY2F0aW9uX3JlcXVlc3QpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAjIHByYWdtYTogbm8gY292ZXIKICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoZiJUb2tlbiByZXZvY2F0aW9uIGZhaWxlZDoge2V9IikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGF1dGhfdG9rZW5zLnVwZGF0ZShyZXZva2VkID0gdGltZXpvbmUubG9jYWx0aW1lKCkpCiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZVJlZGlyZWN0KGRlZmF1bHRfbG9nb3V0X3VybCkKPHxmaW1fZW5kfD4="]
["1fde51088f4c7432c84e80bae1fd45aeac6a7887-1","1fde51088f4c7432c84e80bae1fd45aeac6a7887","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoLm9ubngKaW1wb3J0IHRvcmNodmlzaW9uCjx8ZmltX2hvbGV8Pgptb2RlbCA9IHRvcmNodmlzaW9uLm1vZGVscy5yZXNuZXQ1MChwcmV0cmFpbmVkPVRydWUsIHByb2dyZXNzPUZhbHNlKS5ldmFsKCkKdG9yY2guc2F2ZShtb2RlbCwgIi4vcmVzbmV0NTAucHQiKQo8fGZpbV9zdWZmaXh8PgoKQkFUQ0hfU0laRSA9IDEKZHVtbXlfaW5wdXQgPSB0b3JjaC5yYW5kbihCQVRDSF9TSVpFLCAzLCAyMjQsIDIyNCkKCjx8ZmltX2VuZHw+"]
["7b09d390fd7c6f9789aa0d4537741b23d6ba27cb-4","7b09d390fd7c6f9789aa0d4537741b23d6ba27cb","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMSBUaGUgUUhCTSBMaWJyYXJ5IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoiIiJUb29scyBmb3IgZGVmaW5pbmcgcXVhbnR1bSBjaXJjdWl0IG1vZGVscy4iIiIKCmZyb20gdHlwaW5nIGltcG9ydCBMaXN0LCBVbmlvbgoKaW1wb3J0IGNpcnEKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0ZW5zb3JmbG93IGFzIHRmCmltcG9ydCB0ZW5zb3JmbG93X3F1YW50dW0gYXMgdGZxCgpmcm9tIHFoYm1saWIubW9kZWxzIGltcG9ydCBjaXJjdWl0X3V0aWxzCgoKY2xhc3MgUXVhbnR1bUNpcmN1aXQodGYua2VyYXMubGF5ZXJzLkxheWVyKToKICAiIiJDbGFzcyBmb3IgcmVwcmVzZW50aW5nIGEgcXVhbnR1bSBjaXJjdWl0LiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgcHFjOiB0Zi5UZW5zb3IsCiAgICAgICAgICAgICAgIHF1Yml0czogTGlzdFtjaXJxLkdyaWRRdWJpdF0sCiAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lczogdGYuVGVuc29yLAogICAgICAgICAgICAgICB2YWx1ZV9sYXllcnNfaW5wdXRzOiBMaXN0W1VuaW9uW3RmLlZhcmlhYmxlLCBMaXN0W3RmLlZhcmlhYmxlXV1dLAogICAgICAgICAgICAgICB2YWx1ZV9sYXllcnM6IExpc3RbTGlzdFt0Zi5rZXJhcy5sYXllcnMuTGF5ZXJdXSwKICAgICAgICAgICAgICAgbmFtZTogVW5pb25bTm9uZSwgc3RyXSA9IE5vbmUpOgogICAgIiIiSW5pdGlhbGl6ZXMgYSBRdWFudHVtQ2lyY3VpdC4KCiAgICBBcmdzOgogICAgICBwcWM6IFRGUSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBwYXJhbWV0ZXJpemVkIHF1YW50dW0gY2lyY3VpdC4KICAgICAgcXViaXRzOiBUaGUgcXViaXRzIG9uIHdoaWNoIGBwcWNgIGFjdHMuCiAgICAgIHN5bWJvbF9uYW1lczogU3RyaW5ncyB3aGljaCBhcmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBvcmRlciBpbiB3aGljaCB0aGUKICAgICAgICB2YWx1ZXMgaW4gYHNlbGYuc3ltYm9sX3ZhbHVlc2Agc2hvdWxkIGJlIHBsYWNlZCBpbnNpZGUgb2YgdGhlIGNpcmN1aXQuCiAgICAgIHZhbHVlX2xheWVyc19pbnB1dHM6IElucHV0cyB0byB0aGUgYHZhbHVlX2xheWVyc2AgYXJndW1lbnQuCiAgICAgIHZhbHVlX2xheWVyczogVGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGxheWVycyBpbiBlbnRyeSBgaWAgeWllbGRzIGEKICAgICAgICB0cmFpbmFibGUgbWFwIGZyb20gYHZhbHVlX2xheWVyc19pbnB1dHNbaV1gIHRvIHRoZSBgaWAgZW50cnkgaW4gdGhlIGxpc3QKICAgICAgICBvZiBpbnRlcm1lZGlhdGUgdmFsdWVzLiAgVGhlIGxpc3Qgb2YgaW50ZXJtZWRpYXRlIHZhbHVlcyBpcyBjb25jYXRlbmF0ZWQKICAgICAgICB0byB5aWVsZCB0aGUgdmFsdWVzIHRvIHN1YnN0aXR1dGUgaW50byB0aGUgY2lyY3VpdC4KICAgICAgbmFtZTogT3B0aW9uYWwgbmFtZSBmb3IgdGhlIG1vZGVsLgogICAgIiIiCiAgICBzdXBlcigpLl9faW5pdF9fKG5hbWU9bmFtZSkKCiAgICBzZWxmLl9wcWMgPSBwcWMKICAgIHNlbGYuX3F1Yml0cyA9IHNvcnRlZChxdWJpdHMpCiAgICBzZWxmLl9zeW1ib2xfbmFtZXMgPSBzeW1ib2xfbmFtZXMKICAgIHNlbGYuX3ZhbHVlX2xheWVycyA9IHZhbHVlX2xheWVycwogICAgc2VsZi5fdmFsdWVfbGF5ZXJzX2lucHV0cyA9IHZhbHVlX2xheWVyc19pbnB1dHMKCiAgICByYXdfYml0X2NpcmN1aXQgPSBjaXJjdWl0X3V0aWxzLmJpdF9jaXJjdWl0KHNlbGYucXViaXRzKQogICAgYml0X3N5bWJvbF9uYW1lcyA9IGxpc3QoCiAgICAgICAgc29ydGVkKHRmcS51dGlsLmdldF9jaXJjdWl0X3N5bWJvbHMocmF3X2JpdF9jaXJjdWl0KSkpCiAgICBzZWxmLl9iaXRfc3ltYm9sX25hbWVzID0gdGYuY29uc3RhbnQoW3N0cih4KSBmb3IgeCBpbiBiaXRfc3ltYm9sX25hbWVzXSkKICAgIHNlbGYuX2JpdF9jaXJjdWl0ID0gdGZxLmNvbnZlcnRfdG9fdGVuc29yKFtyYXdfYml0X2NpcmN1aXRdKQoKICBAcHJvcGVydHkKICBkZWYgcXViaXRzKHNlbGYpOgogICAgIiIiU29ydGVkIGxpc3Qgb2YgdGhlIHF1Yml0cyBvbiB3aGljaCB0aGlzIGNpcmN1aXQgYWN0cy4iIiIKICAgIHJldHVybiBzZWxmLl9xdWJpdHMKCiAgQHByb3BlcnR5CiAgZGVmIHN5bWJvbF9uYW1lcyhzZWxmKToKICAgICIiIjFEIHRlbnNvciBvZiBzdHJpbmdzIHdoaWNoIGFyZSB0aGUgZnJlZSBwYXJhbWV0ZXJzIG9mIHRoZSBjaXJjdWl0LiIiIgogICAgcmV0dXJuIHNlbGYuX3N5bWJvbF9uYW1lcwoKICBAcHJvcGVydHkKICBkZWYgdmFsdWVfbGF5ZXJzX2lucHV0cyhzZWxmKToKICAgICIiIkxpc3Qgb2YgbGlzdHMgb2YgdmFyaWFibGVzIHdoaWNoIGFyZSBpbnB1dHMgdG8gYHZhbHVlX2xheWVyc2AuCgogICAgVGhpcyBwcm9wZXJ0eSAoYW5kIGB2YWx1ZV9sYXllcnNgKSBpcyB3aGVyZSB0aGUgY2FsbGVyIHdvdWxkIGFjY2VzcyBtb2RlbAogICAgd2VpZ2h0cyB0byBiZSB1cGRhdGVkIGZyb20gYSBzZWNvbmRhcnkgbW9kZWwgb3IgaHlwZXJuZXR3b3JrLgogICAgIiIiCiAgICByZXR1cm4gc2VsZi5fdmFsdWVfbGF5ZXJzX2lucHV0cwoKICBAcHJvcGVydHkKICBkZWYgdmFsdWVfbGF5ZXJzKHNlbGYpOgogICAgIiIiTGlzdCBvZiBsaXN0cyBvZiBLZXJhcyBsYXllcnMgd2hpY2ggY2FsY3VsYXRlIGN1cnJlbnQgcGFyYW1ldGVyIHZhbHVlcy4KCiAgICBUaGlzIHByb3BlcnR5IChhbmQgYHZhbHVlX2xheWVyc19pbnB1dHNgKSBpcyB3aGVyZSB0aGUgY2FsbGVyIHdvdWxkIGFjY2VzcwogICAgbW9kZWwgd2VpZ2h0cyB0byBiZSB1cGRhdGVkIGZyb20gYSBzZWNvbmRhcnkgbW9kZWwgb3IgaHlwZXJuZXR3b3JrLgogICAgIiIiCiAgICByZXR1cm4gc2VsZi5fdmFsdWVfbGF5ZXJzCgogIEBwcm9wZXJ0eQogIGRlZiBzeW1ib2xfdmFsdWVzKHNlbGYpOgogICAgIiIiMUQgYHRmLlRlbnNvcmAgb2YgZmxvYXRzIHNwZWNpZnlpbmcgdGhlIGN1cnJlbnQgdmFsdWVzIG9mIHRoZSBwYXJhbWV0ZXJzLgoKICAgIFRoaXMgc2hvdWxkIGJlIHN0cnVjdHVyZWQgc3VjaCB0aGF0IGBzZWxmLnN5bWJvbF92YWx1ZXNbaV1gIGlzIHRoZSBjdXJyZW50CiAgICB2YWx1ZSBvZiBgc2VsZi5zeW1ib2xfbmFtZXNbaV1gIGluIGBzZWxmLnBxY2AgYW5kIGBzZWxmLmludmVyc2VfcHFjYC4KICAgICIiIgogICAgIyBUT0RPKCMxMjMpOiBlbXB0eSB2YWx1ZSBiZWNhdXNlIGNvbmNhdCByZXF1aXJlcyBhdCBsZWFzdCB0d28gZW50cmllcy4KICAgIGludGVybWVkaWF0ZV92YWx1ZXMgPSBbW11dCiAgICBmb3IgaW5wdXRzLCBsYXllcnMgaW4gemlwKHNlbGYudmFsdWVfbGF5ZXJzX2lucHV0cywgc2VsZi52YWx1ZV9sYXllcnMpOgogICAgICB4ID0gaW5wdXRzCiAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CiAgICAgICAgeCA9IGxheWVyKHgpCiAgICAgIGludGVybWVkaWF0ZV92YWx1ZXMuYXBwZW5kKHgpCiAgICByZXR1cm4gdGYuY29uY2F0KGludGVybWVkaWF0ZV92YWx1ZXMsIDApCgogIEBwcm9wZXJ0eQogIGRlZiBwcWMoc2VsZik6CiAgICAiIiJURlEgdGVuc29yIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXJhbWV0ZXJpemVkIHVuaXRhcnkgY2lyY3VpdC4iIiIKICAgIHJldHVybiBzZWxmLl9wcWMKCiAgZGVmIGJ1aWxkKHNlbGYsIGlucHV0X3NoYXBlKToKICAgICIiIkJ1aWxkcyB0aGUgbGF5ZXJzIHdoaWNoIGNhbGN1bGF0ZSB0aGUgdmFsdWVzLgoKICAgIGBpbnB1dF9zaGFwZWAgaXMgdW51c2VkIGJlY2F1c2UgaXQgaXMga25vd24gdG8gYmUgdGhlIHNoYXBlIG9mCiAgICBgc2VsZi5fdmFsdWVfbGF5ZXJzX2lucHV0c2AuCiAgICAiIiIKICAgIGRlbCBpbnB1dF9zaGFwZQogICAgZm9yIGlucHV0cywgbGF5ZXJzIGluIHppcChzZWxmLnZhbHVlX2xheWVyc19pbnB1dHMsIHNlbGYudmFsdWVfbGF5ZXJzKToKICAgICAgaWYgaXNpbnN0YW5jZShpbnB1dHMsIHRmLlZhcmlhYmxlKToKICAgICAgICB4ID0gaW5wdXRzLmdldF9zaGFwZSgpCiAgICAgIGVsc2U6CiAgICAgICAgeCA9IFt2LmdldF9zaGFwZSgpIGZvciB2IGluIGlucHV0c10KICAgICAgZm9yIGxheWVyIGluIGxheWVyczoKICAgICAgICB4ID0gbGF5ZXIuY29tcHV0ZV9vdXRwdXRfc2hhcGUoeCkKCiAgZGVmIGNhbGwoc2VsZiwgaW5wdXRzKToKICAgICIiIklucHV0cyBhcmUgYml0c3RyaW5ncyBwcmVwZW5kZWQgYXMgaW5pdGlhbCBzdGF0ZXMgdG8gYHNlbGYucHFjYC4iIiIKICAgIG51bV9iaXRzdHJpbmdzID0gdGYuc2hhcGUoaW5wdXRzKVswXQogICAgYml0X2NpcmN1aXRzID0gdGZxLnJlc29sdmVfcGFyYW1ldGVycygKICAgICAgICB0Zi50aWxlKHNlbGYuX2JpdF9jaXJjdWl0LCBbbnVtX2JpdHN0cmluZ3NdKSwgc2VsZi5fYml0X3N5bWJvbF9uYW1lcywKICAgICAgICB0Zi5jYXN0KGlucHV0cywgdGYuZmxvYXQzMikpCiAgICBwcWNzID0gdGYudGlsZShzZWxmLnBxYywgW251bV9iaXRzdHJpbmdzXSkKICAgIHJldHVybiB0ZnEuYXBwZW5kX2NpcmN1aXQoYml0X2NpcmN1aXRzLCBwcWNzKQoKICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcjogIlF1YW50dW1DaXJjdWl0Iik6CiAgICAiIiJSZXR1cm5zIGEgUXVhbnR1bUNpcmN1aXQgd2l0aCBgc2VsZi5wcWNgIGFwcGVuZGVkIHRvIGBvdGhlci5wcWNgLgoKICAgIE5vdGUgdGhhdCBubyBuZXcgYHRmLlZhcmlhYmxlYHMgYXJlIGNyZWF0ZWQsIHRoZSBuZXcgUXVhbnR1bUNpcmN1aXQgY29udGFpbnMKICAgIHRoZSB2YXJpYWJsZXMgaW4gYm90aCBgc2VsZmAgYW5kIGBvdGhlcmAuCiAgICAiIiIKICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFF1YW50dW1DaXJjdWl0KToKICAgICAgaW50ZXJzZWN0aW9uID0gdGYuc2V0cy5pbnRlcnNlY3Rpb24oCiAgICAgICAgICB0Zi5leHBhbmRfZGltcyhzZWxmLnN5bWJvbF9uYW1lcywgMCksCiAgICAgICAgICB0Zi5leHBhbmRfZGltcyhvdGhlci5zeW1ib2xfbmFtZXMsIDApKQogICAgICB0Zi5kZWJ1Z2dpbmcuYXNzZXJ0X2VxdWFsKAogICAgICAgICAgdGYuc2l6ZShpbnRlcnNlY3Rpb24udmFsdWVzKSwKICAgICAgICAgIDAsCiAgICAgICAgICBtZXNzYWdlPSJDaXJjdWl0cyB0byBiZSBzdW1tZWQgbXVzdCBub3QgaGF2ZSBzeW1ib2xzIGluIGNvbW1vbi4iKQogICAgICBuZXdfcHFjID0gdGZxLmFwcGVuZF9jaXJjdWl0KHNlbGYucHFjLCBvdGhlci5wcWMpCiAgICAgIG5ld19xdWJpdHMgPSBsaXN0KHNldChzZWxmLnF1Yml0cyArIG90aGVyLnF1Yml0cykpCiAgICAgIG5ld19zeW1ib2xfbmFtZXMgPSB0Zi5jb25jYXQoW3NlbGYuc3ltYm9sX25hbWVzLCBvdGhlci5zeW1ib2xfbmFtZXNdLCAwKQogICAgICBuZXdfdmFsdWVfbGF5ZXJzX2lucHV0cyA9ICgKICAgICAgICAgIHNlbGYudmFsdWVfbGF5ZXJzX2lucHV0cyArIG90aGVyLnZhbHVlX2xheWVyc19pbnB1dHMpCiAgICAgIG5ld192YWx1ZV9sYXllcnMgPSBzZWxmLnZhbHVlX2xheWVycyArIG90aGVyLnZhbHVlX2xheWVycwogICAgICBuZXdfbmFtZSA9IHNlbGYubmFtZSArICJfIiArIG90aGVyLm5hbWUKICAgICAgcmV0dXJuIFF1YW50dW1DaXJjdWl0KG5ld19wcWMsIG5ld19xdWJpdHMsIG5ld19zeW1ib2xfbmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfdmFsdWVfbGF5ZXJzX2lucHV0cywgbmV3X3ZhbHVlX2xheWVycywgbmV3X25hbWUpCiAgICBlbHNlOgogICAgICByYWlzZSBUeXBlRXJyb3IKCiAgZGVmIF9fcG93X18oc2VsZiwgZXhwb25lbnQpOgogICAgIiIiUmV0dXJucyBhIFF1YW50dW1DaXJjdWl0IHdpdGggaW52ZXJ0ZWQgYHNlbGYucHFjYC4KCiAgICBOb3RlIHRoYXQgbm8gbmV3IGB0Zi5WYXJpYWJsZWBzIGFyZSBjcmVhdGVkLCB0aGUgbmV3IFF1YW50dW1DaXJjdWl0IGNvbnRhaW5zCiAgICB0aGUgc2FtZSB2YXJpYWJsZXMgYXMgYHNlbGZgLgogICAgIiIiCiAgICBpZiBleHBvbmVudCA9PSAtMToKICAgICAgbmV3X3BxYyA9IHRmcS5mcm9tX3RlbnNvcihzZWxmLnBxYylbMF0qKi0xCiAgICAgIG5ld19uYW1lID0gc2VsZi5uYW1lICsgIl9pbnZlcnNlIgogICAgICByZXR1cm4gUXVhbnR1bUNpcmN1aXQoCiAgICAgICAgICB0ZnEuY29udmVydF90b190ZW5zb3IoW25ld19wcWNdKSwgbmV3X3BxYy5hbGxfcXViaXRzKCksCiAgICAgICAgICBzZWxmLnN5bWJvbF9uYW1lcywgc2VsZi52YWx1ZV9sYXllcnNfaW5wdXRzLCBzZWxmLnZhbHVlX2xheWVycywKICAgICAgICAgIG5ld19uYW1lKQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigiT25seSB0aGUgaW52ZXJzZSAoZXhwb25lbnQgPT0gLTEpIGlzIHN1cHBvcnRlZC4iKQoKCmNsYXNzIERpcmVjdFF1YW50dW1DaXJjdWl0KFF1YW50dW1DaXJjdWl0KToKICAiIiJRdWFudHVtQ2lyY3VpdCB3aXRoIGRpcmVjdCBtYXAgZnJvbSBtb2RlbCB2YXJpYWJsZXMgdG8gY2lyY3VpdCBwYXJhbXMuIiIiCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgcHFjOiBjaXJxLkNpcmN1aXQsCiAgICAgIGluaXRpYWxpemVyOiB0Zi5rZXJhcy5pbml0aWFsaXplcnMuSW5pdGlhbGl6ZXIgPSB0Zi5rZXJhcy5pbml0aWFsaXplcnMKICAgICAgLlJhbmRvbVVuaWZvcm0oMCwgMiksCiAgICAgIG5hbWU6IFVuaW9uW05vbmUsIHN0cl0gPSBOb25lLAogICk6CiAgICAiIiJJbml0aWFsaXplcyBhIERpcmVjdFF1YW50dW1DaXJjdWl0LgoKICAgIEFyZ3M6CiAgICAgIHBxYzogUmVwcmVzZW50YXRpb24gb2YgYSBwYXJhbWV0ZXJpemVkIHF1YW50dW0gY2lyY3VpdC4KICAgICAgaW5pdGlhbGl6ZXI6IEEgYHRmLmtlcmFzLmluaXRpYWxpemVycy5Jbml0aWFsaXplcmAgd2hpY2ggc3BlY2lmaWVzIGhvdyB0bwogICAgICAgIGluaXRpYWxpemUgdGhlIHZhbHVlcyBvZiB0aGUgcGFyYW1ldGVycyBpbiBgY2lyY3VpdGAuICBUaGUgZGVmYXVsdAogICAgICAgIGluaXRpYWxpemVyIGFzc3VtZXMgcGFyYW1ldGVycyBvZiBnYXRlcyBhcmUgZXhwb25lbnRzLCBzbyB0aGF0IG9uZSBmdWxsCiAgICAgICAgcGVyaW9kIGlzIGNvdmVyZWQgYnkgdGhlIHBhcmFtZXRlciByYW5nZSAwIHRvIDIuCiAgICAgIG5hbWU6IE9wdGlvbmFsIG5hbWUgZm9yIHRoZSBtb2RlbC4KICAgICIiIgogICAgcmF3X3N5bWJvbF9uYW1lcyA9IGxpc3Qoc29ydGVkKHRmcS51dGlsLmdldF9jaXJjdWl0X3N5bWJvbHMocHFjKSkpCiAgICBzeW1ib2xfbmFtZXMgPSB0Zi5jb25zdGFudChbc3RyKHgpIGZvciB4IGluIHJhd19zeW1ib2xfbmFtZXNdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHR5cGU9dGYuc3RyaW5nKQogICAgdmFsdWVzID0gW3RmLlZhcmlhYmxlKGluaXRpYWxpemVyKHNoYXBlPVtsZW4ocmF3X3N5bWJvbF9uYW1lcyldKSldCiAgICB2YWx1ZV9sYXllcnMgPSBbW11dCiAgICBzdXBlcigpLl9faW5pdF9fKAogICAgICAgIHRmcS5jb252ZXJ0X3RvX3RlbnNvcihbcHFjXSksIHBxYy5hbGxfcXViaXRzKCksIHN5bWJvbF9uYW1lcywgdmFsdWVzLAogICAgICAgIHZhbHVlX2xheWVycykKCgpjbGFzcyBRQUlBKFF1YW50dW1DaXJjdWl0KToKICAiIiJRdWFudHVtIGNpcmN1aXQgZGVmaW5lZCBieSBhIGNsYXNzaWNhbCBlbmVyZ3kgYW5kIGEgSGFtaWx0b25pYW4uCgogIFRoaXMgY2lyY3VpdCBtb2RlbCBpcyBpbnRlbmRlZCBmb3IgdXNlIHdpdGggVlFULgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgcXVhbnR1bV9oX3Rlcm1zOiBMaXN0W2NpcnEuUGF1bGlTdW1dLAogICAgICAgICAgICAgICBjbGFzc2ljYWxfaF90ZXJtczogTGlzdFtjaXJxLlBhdWxpU3VtXSwKICAgICAgICAgICAgICAgbnVtX2xheWVyczogaW50LAogICAgICAgICAgICAgICBpbml0aWFsaXplcj10Zi5rZXJhcy5pbml0aWFsaXplcnMuUmFuZG9tVW5pZm9ybSgwLCAyICogbnAucGkpLAogICAgICAgICAgICAgICBuYW1lPU5vbmUpOgogICAgciIiIkluaXRpYWxpemVzIGEgUUFJQS4KCiAgICBUaGUgYW5zYXR6IGlzIFFBT0EtbGlrZSwgd2l0aCB0aGUgZXhwb25lbnRpYWwgb2YgdGhlIEVCTSBhbnNhdHogaW4gcGxhY2UKICAgIG9mIHRoZSB1c3VhbCAicHJvYmxlbSBIYW1pbHRvbmlhbiIuIE1hdGhlbWF0aWNhbGx5LCBpdCBpcyByZXByZXNlbnRlZCBhczoKCiAgICAkJFxwcm9kX3tcZWxsPTF9XlAgXGxlZnRbCiAgICAgICAgXGxlZnQoCiAgICAgICAgICBccHJvZF97XGJte2J9IFxpbiBcbWF0aGNhbHtCfV9LfQogICAgICAgICAgICBlXntpXGV0YV9cZWxsIFx0aGV0YV97XGJte2J9fVxibXtcaGF0e1p9fV57XGJte2J9fX0KICAgICAgICBccmlnaHQpXGxlZnQoCiAgICAgICAgICBccHJvZF97clxpbiBcbWF0aGNhbHtJfX0KICAgICAgICAgICAgZV57aVxnYW1tYV97clxlbGx9XGhhdHtIfV9yfQogICAgICAgIFxyaWdodCkKICAgICAgXHJpZ2h0XSwkJAoKICAgIHdoZXJlICRcaGF0e0h9X3IkIGlzIGBxdWFudHVtX2hfdGVybXNgLCAkXGJte1xoYXR7Wn19XntcYm17Yn19JCBpcwogICAgYGNsYXNzaWNhbF9oX3Rlcm1zYCwgYW5kICRQJCBpcyBgbnVtX2xheWVyc2AuCgogICAgIyBUT0RPKCMxMTkpOiBhZGQgbGluayB0byBuZXcgdmVyc2lvbiBvZiB0aGUgcGFwZXIuCiAgICBGb3IgZnVydGhlciBkaXNjdXNzaW9uLCBzZWUgdGhlIHNlY3Rpb24gIlBoeXNpY3MtSW5zcGlyZWQgQXJjaGl0ZWN0dXJlOgogICAgUXVhbnR1bSBBZGlhYmF0aWMtSW5zcGlyZWQgQW5zYXR6IiBpbiB0aGUgUUhCTSBwYXBlci4KCiAgICBBcmdzOgogICAgICBxdWFudHVtX2hfdGVybXM6IE5vbi1jb21tdXRpbmcgdGVybXMgb2YgdGhlIHRhcmdldCB0aGVybWFsIHN0YXRlCiAgICAgICAgYXNzdW1lZCBpbiB0aGUgUUFJQSBhbnNhdHouCjx8ZmltX2hvbGV8PgogICAgICAgIGluaXRpYWxpemUgdGhlIHZhbHVlcyBvZiB0aGUgcGFyYW1ldGVycyBpbiBgY2lyY3VpdGAuCiAgICAgIG5hbWU6IE9wdGlvbmFsIG5hbWUgZm9yIHRoZSBtb2RlbC4KICAgICIiIgogICAgcXVhbnR1bV9zeW1ib2xzID0gW10KICAgIGNsYXNzaWNhbF9zeW1ib2xzID0gW10KICAgIGZvciBqIGluIHJhbmdlKG51bV9sYXllcnMpOgogICAgICBxdWFudHVtX3N5bWJvbHMuYXBwZW5kKFtdKQogICAgICBjbGFzc2ljYWxfc3ltYm9scy5hcHBlbmQoW10pCiAgICAgIGZvciBrLCBfIGluIGVudW1lcmF0ZShxdWFudHVtX2hfdGVybXMpOgogICAgICAgIHF1YW50dW1fc3ltYm9sc1stMV0uYXBwZW5kKGYiZ2FtbWFfe2p9X3trfSIpCiAgICAgIGZvciBrLCBfIGluIGVudW1lcmF0ZShjbGFzc2ljYWxfaF90ZXJtcyk6CiAgICAgICAgY2xhc3NpY2FsX3N5bWJvbHNbLTFdLmFwcGVuZChmImV0YV97an1fe2t9IikKCiAgICBwcWMgPSBjaXJxLkNpcmN1aXQoKQogICAgZmxhdF9zeW1ib2xzID0gW10KICAgIGZvciBxX3N5bWIsIGNfc3ltYiBpbiB6aXAocXVhbnR1bV9zeW1ib2xzLCBjbGFzc2ljYWxfc3ltYm9scyk6CiAgICAgIHBxYyArPSB0ZnEudXRpbC5leHBvbmVudGlhbChxdWFudHVtX2hfdGVybXMsIGNvZWZmaWNpZW50cz1xX3N5bWIpCiAgICAgIHBxYyArPSB0ZnEudXRpbC5leHBvbmVudGlhbChjbGFzc2ljYWxfaF90ZXJtcywgY29lZmZpY2llbnRzPWNfc3ltYikKICAgICAgZmxhdF9zeW1ib2xzLmV4dGVuZChxX3N5bWIgKyBjX3N5bWIpCiAgICBzeW1ib2xfbmFtZXMgPSB0Zi5jb25zdGFudChmbGF0X3N5bWJvbHMpCgogICAgdmFsdWVfbGF5ZXJzX2lucHV0cyA9IFtbCiAgICAgICAgdGYuVmFyaWFibGUoaW5pdGlhbGl6ZXIoc2hhcGU9W251bV9sYXllcnNdKSksICAjIHRydWUgZXRhcwogICAgICAgIHRmLlZhcmlhYmxlKGluaXRpYWxpemVyKHNoYXBlPVtsZW4oY2xhc3NpY2FsX2hfdGVybXMpXSkpLCAgIyB0aGV0YXMKICAgICAgICB0Zi5WYXJpYWJsZSgKICAgICAgICAgICAgaW5pdGlhbGl6ZXIoc2hhcGU9W251bV9sYXllcnMsIGxlbihxdWFudHVtX2hfdGVybXMpXSkpLCAgIyBnYW1tYXMKICAgIF1dCgogICAgZGVmIGVtYmVkX3BhcmFtcyhpbnB1dHMpOgogICAgICAiIiJUaWxlcyB1cCB0aGUgdmFyaWFibGVzIHRvIHByb3Blcmx5IHRpZSBRQUlBIHBhcmFtZXRlcnMuIiIiCiAgICAgIGV4cF9ldGFzID0gdGYuZXhwYW5kX2RpbXMoaW5wdXRzWzBdLCAxKQogICAgICB0aWxlZF90aGV0YXMgPSB0Zi50aWxlKAogICAgICAgICAgdGYuZXhwYW5kX2RpbXMoaW5wdXRzWzFdLCAwKSwgW3RmLnNoYXBlKGlucHV0c1swXSlbMF0sIDFdKQogICAgICBjbGFzc2ljYWxfcGFyYW1zID0gZXhwX2V0YXMgKiB0aWxlZF90aGV0YXMKICAgICAgcmV0dXJuIHRmLnJlc2hhcGUodGYuY29uY2F0KFtjbGFzc2ljYWxfcGFyYW1zLCBpbnB1dHNbMl1dLCAxKSwgWy0xXSkKCiAgICB2YWx1ZV9sYXllcnMgPSBbW3RmLmtlcmFzLmxheWVycy5MYW1iZGEoZW1iZWRfcGFyYW1zKV1dCgogICAgc3VwZXIoKS5fX2luaXRfXygKICAgICAgICB0ZnEuY29udmVydF90b190ZW5zb3IoW3BxY10pLCBwcWMuYWxsX3F1Yml0cygpLCBzeW1ib2xfbmFtZXMsCiAgICAgICAgdmFsdWVfbGF5ZXJzX2lucHV0cywgdmFsdWVfbGF5ZXJzKQo8fGZpbV9zdWZmaXh8PgogICAgICBjbGFzc2ljYWxfaF90ZXJtczogSGFtaWx0b25pYW4gcmVwcmVzZW50YXRpb24gb2YgdGhlIEVCTSBjaG9zZW4gdG8gbW9kZWwKICAgICAgICB0aGUgdGFyZ2V0IHRoZXJtYWwgc3RhdGUuCiAgICAgIG51bV9sYXllcnM6IEhvdyBtYW55IGxheWVycyBvZiB0aGUgYW5zYXR6IHRvIGFwcGx5LgogICAgICBpbml0aWFsaXplcjogQSBgdGYua2VyYXMuaW5pdGlhbGl6ZXJzLkluaXRpYWxpemVyYCB3aGljaCBzcGVjaWZpZXMgaG93IHRvCjx8ZmltX2VuZHw+"]
["c8f58a9b0c13576a39be0f4519336480ac968538-2","c8f58a9b0c13576a39be0f4519336480ac968538","PHxmaW1fcHJlZml4fD4KZnJvbSBzY3JpcHRzLmV2YWx1YXRpb24gaW1wb3J0IEV2YWx1YXRvcgoKCjx8ZmltX2hvbGV8PgogICAgIyBldmFsdWF0b3IuZXZhbHVhdGVfc2VudGltZW50X2RldGVjdGlvbihzY29yaW5nPSdmMV9taWNybycsIG1lcmdlZD1UcnVlKQogICAgcHJpbnQoZXZhbHVhdG9yLmdldF9jYXRlZ29yeV9jb3VudHMoY2F0X3R5cGU9J3NlbnRpbWVudCcsIG1lcmdlZD1UcnVlKSkKCgoKCgoKCgo8fGZpbV9zdWZmaXh8PgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgZXZhbHVhdG9yID0gRXZhbHVhdG9yKCdmaWxlcy9zcmZ0X2RhdGFzZXQuY3N2JykKCiAgICAjIHByaW50IHNlZ21lbnQgbGV2ZWwgc2VudGltZW50IGRldGVjdGlvbiBzY29yZXMKPHxmaW1fZW5kfD4="]
["ddb3b172c1e5988791f72083f689c8d3b61d2973-5","ddb3b172c1e5988791f72083f689c8d3b61d2973","PHxmaW1fcHJlZml4fD4KIwojIENvcHlyaWdodCAyMDE4IFB5V3JlbiBUZWFtCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQganNvbgppbXBvcnQgb3MKaW1wb3J0IHRocmVhZGluZwppbXBvcnQgc3lzCmltcG9ydCBzaHV0aWwKaW1wb3J0IHRlbXBmaWxlCmltcG9ydCBtdWx0aXByb2Nlc3NpbmcKaW1wb3J0IGJvdG9jb3JlCmltcG9ydCBib3RvY29yZS5zZXNzaW9uCmZyb20gcHl3cmVuIGltcG9ydCBsb2NhbAoKClNPVVJDRV9ESVIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKCkxPQ0FMX0RJUiA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQpMT0NBTF9SVU5fRElSID0gb3MucGF0aC5qb2luKExPQ0FMX0RJUiwgInRhc2siKQoKCmNsYXNzIExhbWJkYUludm9rZXIob2JqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWdpb25fbmFtZSwgbGFtYmRhX2Z1bmN0aW9uX25hbWUpOgoKICAgICAgICBzZWxmLnNlc3Npb24gPSBib3RvY29yZS5zZXNzaW9uLmdldF9zZXNzaW9uKCkKCiAgICAgICAgc2VsZi5yZWdpb25fbmFtZSA9IHJlZ2lvbl9uYW1lCiAgICAgICAgc2VsZi5sYW1iZGFfZnVuY3Rpb25fbmFtZSA9IGxhbWJkYV9mdW5jdGlvbl9uYW1lCiAgICAgICAgc2VsZi5sYW1iY2xpZW50ID0gc2VsZi5zZXNzaW9uLmNyZWF0ZV9jbGllbnQoJ2xhbWJkYScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uX25hbWU9cmVnaW9uX25hbWUpCiAgICAgICAgc2VsZi5USU1FX0xJTUlUID0gVHJ1ZQoKICAgIGRlZiBpbnZva2Uoc2VsZiwgcGF5bG9hZCk6CiAgICAgICAgIiIiCiAgICAgICAgSW52b2tlIC0tIHJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGludm9jYXRpb24KICAgICAgICAiIiIKICAgICAgICBzZWxmLmxhbWJjbGllbnQuaW52b2tlKEZ1bmN0aW9uTmFtZT1zZWxmLmxhbWJkYV9mdW5jdGlvbl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF5bG9hZD1qc29uLmR1bXBzKHBheWxvYWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52b2NhdGlvblR5cGU9J0V2ZW50JykKICAgICAgICAjIEZJWE1FIGNoZWNrIHJlc3BvbnNlCiAgICAgICAgcmV0dXJuIHt9CgogICAgZGVmIGNvbmZpZyhzZWxmKToKICAgICAgICAiIiIKICAgICAgICBSZXR1cm4gY29uZmlnIGRpY3QKICAgICAgICAiIiIKICAgICAgICByZXR1cm4geydsYW1iZGFfZnVuY3Rpb25fbmFtZScgOiBzZWxmLmxhbWJkYV9mdW5jdGlvbl9uYW1lLAogICAgICAgICAgICAgICAgJ3JlZ2lvbl9uYW1lJyA6IHNlbGYucmVnaW9uX25hbWV9CgoKY2xhc3MgRHVtbXlJbnZva2VyKG9iamVjdCk6CiAgICAiIiIKICAgIEEgbW9jayBpbnZva2VyIHRoYXQgc2ltcGx5IGFwcGVuZHMgcGF5bG9hZHMgdG8gYSBsaXN0LiBZb3UgbXVzdCB0aGVuCiAgICBjYWxsIHJ1bigpCiAgICAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5wYXlsb2FkcyA9IFtdCiAgICAgICAgc2VsZi5USU1FX0xJTUlUID0gRmFsc2UKICAgICAgICBzZWxmLnRocmVhZCA9IE5vbmUKCiAgICBkZWYgaW52b2tlKHNlbGYsIHBheWxvYWQpOgogICAgICAgIHNlbGYucGF5bG9hZHMuYXBwZW5kKHBheWxvYWQpCgogICAgZGVmIGNvbmZpZyhzZWxmKTogIyBweWxpbnQ6IGRpc2FibGU9bm8tc2VsZi11c2UKICAgICAgICByZXR1cm4ge30KCgogICAgZGVmIHJ1bl9qb2JzKHNlbGYsIE1BWEpPQlM9LTEsIHJ1bl9kaXI9TE9DQUxfUlVOX0RJUik6CiAgICAgICAgIiIiCiAgICAgICAgcnVuIE1BWEpPQlMgaW4gdGhlIHF1ZXVlCiAgICAgICAgTUFYSk9CUyA9IC0xICB0byBydW4gYWxsCgogICAgICAgICMgRklYTUUgbm90IG11bHRpdGhyZWFkZWQgc2FmZQogICAgICAgICIiIgoKICAgICAgICBqb2JuID0gbGVuKHNlbGYucGF5bG9hZHMpCiAgICAgICAgaWYgTUFYSk9CUyAhPSAtMToKICAgICAgICAgICAgam9ibiA9IE1BWEpPQlMKICAgICAgICBqb2JzID0gc2VsZi5wYXlsb2Fkc1s6am9ibl0KCiAgICAgICAgbG9jYWwuZHVtbXlfaGFuZGxlcihqb2JzLCBydW5fZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeydpbnZva2VyJyA6ICdEdW1teUludm9rZXInfSkKCiAgICAgICAgc2VsZi5wYXlsb2FkcyA9IHNlbGYucGF5bG9hZHNbam9ibjpdCgogICAgZGVmIHJ1bl9qb2JzX3RocmVhZGVkKHNlbGYsIE1BWEpPQlM9LTEsIHJ1bl9kaXI9TE9DQUxfUlVOX0RJUik6CiAgICAgICAgIiIiCiAgICAgICAgSnVzdCBsaWtlIHJ1bl9qb2JzIGJ1dCBpbiBhIHNlcGFyYXRlIHRocmVhZAogICAgICAgIChzbyBpdCdzIG5vbi1ibG9ja2luZykKICAgICAgICAiIiIKCiAgICAgICAgc2VsZi50aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLnJ1bl9qb2JzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShNQVhKT0JTLCBydW5fZGlyKSkKICAgICAgICBzZWxmLnRocmVhZC5zdGFydCgpCgpjbGFzcyBMb2NhbEludm9rZXIob2JqZWN0KToKICAgICIiIgogICAgQW4gaW52b2tlciB3aGljaCBzcGF3bnMgYSB0aHJlYWQgdGhhdCB0aGVuIHdhaXRzCiAgICBmb3Igam9icyBvbiBhIHF1ZXVlLiBUaGlzIGlzIGEgbW9yZSBzZWxmLWNvbnRhaW5lZCBpbnZva2VyIGluIHRoYXQKICAgIGl0IGRvZXNuJ3QgcmVxdWlyZSB0aGUgcnVuX2pvYnMoKSBvZiB0aGUgZHVtbXkgaW52b2tlci4KICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBydW5fZGlyPUxPQ0FMX1JVTl9ESVIpOgogICAgICAgICMgV2hlbiBXaW5kb3dzL09TWCBydW50aW1lcyBhcmUgbWFkZSBhdmFpbGFibGUsIGxvY2FsIGludm9rZXIgc2hvdWxkIGJlCiAgICAgICAgIyByZWFkeSB0byBydW4gb24gdGhlbSBhcyB3ZWxsCiAgICAgICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdsaW51eCcpOgogICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkxvY2FsSW52b2tlciBjYW4gb25seSBiZSBydW4gdW5kZXIgbGludXgiKQoKICAgICAgICBzZWxmLnF1ZXVlID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCkKICAgICAgICBzaHV0aWwucm10cmVlKHJ1bl9kaXIsIFRydWUpCiAgICAgICAgc2VsZi5ydW5fZGlyID0gcnVuX2RpcgogICAgICAgIGZvciBfIGluIHJhbmdlKG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKSk6CiAgICAgICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fcHJvY2Vzc19ydW5uZXIpCiAgICAgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQogICAgICAgICAgICBwLnN0YXJ0KCkKCgogICAgZGVmIF9wcm9jZXNzX3J1bm5lcihzZWxmKToKPHxmaW1faG9sZXw+CgogICAgZGVmIGludm9rZShzZWxmLCBwYXlsb2FkKToKICAgICAgICBzZWxmLnF1ZXVlLnB1dChwYXlsb2FkKQoKICAgIGRlZiBjb25maWcoc2VsZik6ICMgcHlsaW50OiBkaXNhYmxlPW5vLXNlbGYtdXNlCiAgICAgICAgcmV0dXJuIHt9Cjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgcmVzID0gc2VsZi5xdWV1ZS5nZXQoYmxvY2s9VHJ1ZSkKICAgICAgICAgICAgbG9jYWwubG9jYWxfaGFuZGxlcihyZXMsIHNlbGYucnVuX2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2ludm9rZXInIDogJ0xvY2FsSW52b2tlcid9KQo8fGZpbV9lbmR8Pg=="]
["f9d98924bd9da56c5b4923f554c750f319beeb77-4","f9d98924bd9da56c5b4923f554c750f319beeb77","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCiMKIyBDb3B5cmlnaHQgMjAxMSBZZXN1ZGVlcCBNYW5nYWxhcGlsbHkgPHllc3VkZWVwQGdtYWlsLmNvbT4KIyBDb3B5cmlnaHQgMjAxMiBHb29nbGUsIEluYy4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCmZyb20gd2F0Y2hkb2cub2JzZXJ2ZXJzLmZzZXZlbnRzIGltcG9ydCAoICAjIHR5cGU6IGlnbm9yZQogICAgRlNFdmVudHNFbWl0dGVyLAogICAgRlNFdmVudHNPYnNlcnZlciwKICAgIEZpbGVEZWxldGVkRXZlbnQsCiAgICBGaWxlTW9kaWZpZWRFdmVudCwKICAgIEZpbGVNb3ZlZEV2ZW50LAogICAgRmlsZUNyZWF0ZWRFdmVudCwKICAgIERpckRlbGV0ZWRFdmVudCwKICAgIERpck1vZGlmaWVkRXZlbnQsCiAgICBEaXJNb3ZlZEV2ZW50LAogICAgRGlyQ3JlYXRlZEV2ZW50LAogICAgREVGQVVMVF9PQlNFUlZFUl9USU1FT1VULAogICAgQmFzZU9ic2VydmVyLAopCmZyb20gd2F0Y2hkb2cudXRpbHMuZGlyc25hcHNob3QgaW1wb3J0IERpcmVjdG9yeVNuYXBzaG90CgoKY2xhc3MgT3JkZXJlZEZTRXZlbnRzRW1pdHRlcihGU0V2ZW50c0VtaXR0ZXIpOgogICAgIiIiT3JkZXJlZCBmaWxlIHN5c3RlbSBldmVudCBlbWl0dGVyIGZvciBtYWNPUwoKICAgIFRoaXMgc3ViY2xhc3NlcyBGU0V2ZW50c0VtaXR0ZXIgdG8gZ3VhcmFudGVlIGFuIG9yZGVyIG9mIGV2ZW50cyB3aGljaCBjYW4gYmUgYXBwbGllZAogICAgdG8gcmVwcm9kdWNlIHRoZSBuZXcgc3RhdGUgZnJvbSB0aGUgb2xkIHN0YXRlLgogICAgIiIiCgogICAgZGVmIHF1ZXVlX2V2ZW50cyhzZWxmLCB0aW1lb3V0KToKICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgICAgICAgIGlmIG5vdCBzZWxmLndhdGNoLmlzX3JlY3Vyc2l2ZSBhbmQgc2VsZi53YXRjaC5wYXRoIG5vdCBpbiBzZWxmLnBhdGhuYW1lczoKICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICBuZXdfc25hcHNob3QgPSBEaXJlY3RvcnlTbmFwc2hvdChzZWxmLndhdGNoLnBhdGgsIHNlbGYud2F0Y2guaXNfcmVjdXJzaXZlKQogICAgICAgICAgICBkaWZmID0gbmV3X3NuYXBzaG90IC0gc2VsZi5zbmFwc2hvdAoKICAgICAgICAgICAgIyBhZGQgbWV0YWRhdGEgbW9kaWZpZWQgZXZlbnRzIHdoaWNoIHdpbGwgYmUgbWlzc2VkIGJ5IHJlZ3VsYXIgZGlmZgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBjdGltZV9maWxlc19tb2RpZmllZCA9IHNldCgpCgogICAgICAgICAgICAgICAgZm9yIHBhdGggaW4gc2VsZi5zbmFwc2hvdC5wYXRocyAmIG5ld19zbmFwc2hvdC5wYXRoczoKICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5zbmFwc2hvdC5pc2RpcihwYXRoKToKICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zbmFwc2hvdC5pbm9kZShwYXRoKSA9PSBuZXdfc25hcHNob3QuaW5vZGUocGF0aCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zbmFwc2hvdC5zdGF0X2luZm8ocGF0aCkuc3RfY3RpbWUKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0aW1lX2ZpbGVzX21vZGlmaWVkLmFkZChwYXRoKQoKICAgICAgICAgICAgICAgIGZpbGVzX21vZGlmaWVkID0gc2V0KGN0aW1lX2ZpbGVzX21vZGlmaWVkKSB8IHNldChkaWZmLmZpbGVzX21vZGlmaWVkKQogICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKICAgICAgICAgICAgICAgIHByaW50KGV4YykKCiAgICAgICAgICAgICMgcmVwbGFjZSBjYWNoZWQgc25hcHNob3QKICAgICAgICAgICAgc2VsZi5zbmFwc2hvdCA9IG5ld19zbmFwc2hvdAoKICAgICAgICAgICAgIyBGaWxlcy4KICAgICAgICAgICAgZm9yIHNyY19wYXRoIGluIGRpZmYuZmlsZXNfZGVsZXRlZDoKICAgICAgICAgICAgICAgIHNlbGYucXVldWVfZXZlbnQoRmlsZURlbGV0ZWRFdmVudChzcmNfcGF0aCkpCiAgICAgICAgICAgIGZvciBzcmNfcGF0aCBpbiBmaWxlc19tb2RpZmllZDoKICAgICAgICAgICAgICAgIHNlbGYucXVldWVfZXZlbnQoRmlsZU1vZGlmaWVkRXZlbnQoc3JjX3BhdGgpKQogICAgICAgICAgICBmb3Igc3JjX3BhdGgsIGRlc3RfcGF0aCBpbiBkaWZmLmZpbGVzX21vdmVkOgogICAgICAgICAgICAgICAgc2VsZi5xdWV1ZV9ldmVudChGaWxlTW92ZWRFdmVudChzcmNfcGF0aCwgZGVzdF9wYXRoKSkKICAgICAgICAgICAgZm9yIHNyY19wYXRoIGluIGRpZmYuZmlsZXNfY3JlYXRlZDoKICAgICAgICAgICAgICAgIHNlbGYucXVldWVfZXZlbnQoRmlsZUNyZWF0ZWRFdmVudChzcmNfcGF0aCkpCgogICAgICAgICAgICAjIERpcmVjdG9yaWVzLgogICAgICAgICAgICBmb3Igc3JjX3BhdGggaW4gZGlmZi5kaXJzX2RlbGV0ZWQ6CiAgICAgICAgICAgICAgICBzZWxmLnF1ZXVlX2V2ZW50KERpckRlbGV0ZWRFdmVudChzcmNfcGF0aCkpCiAgICAgICAgICAgIGZvciBzcmNfcGF0aCBpbiBkaWZmLmRpcnNfbW9kaWZpZWQ6CiAgICAgICAgICAgICAgICBzZWxmLnF1ZXVlX2V2ZW50KERpck1vZGlmaWVkRXZlbnQoc3JjX3BhdGgpKQogICAgICAgICAgICBmb3Igc3JjX3BhdGgsIGRlc3RfcGF0aCBpbiBkaWZmLmRpcnNfbW92ZWQ6CiAgICAgICAgICAgICAgICBzZWxmLnF1ZXVlX2V2ZW50KERpck1vdmVkRXZlbnQoc3JjX3BhdGgsIGRlc3RfcGF0aCkpCiAgICAgICAgICAgIGZvciBzcmNfcGF0aCBpbiBkaWZmLmRpcnNfY3JlYXRlZDoKICAgICAgICAgICAgICAgIHNlbGYucXVldWVfZXZlbnQoRGlyQ3JlYXRlZEV2ZW50KHNyY19wYXRoKSkKCiAgICAgICAgICAgICMgZnJlZSBzb21lIG1lbW9yeQogICAgICAgICAgICBkZWwgZGlmZgogICAgICAgICAgICBkZWwgZmlsZXNfbW9kaWZpZWQKCgpjbGFzcyBPcmRlcmVkRlNFdmVudHNPYnNlcnZlcihGU0V2ZW50c09ic2VydmVyKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lb3V0PURFRkFVTFRfT0JTRVJWRVJfVElNRU9VVCk6CiAgICAgICAgQmFzZU9ic2VydmVyLl9faW5pdF9fKAogICAgICAgICAgICBzZWxmLCBlbWl0dGVyX2NsYXNzPU9yZGVyZWRGU0V2ZW50c0VtaXR0ZXIsIHRpbWVvdXQ9dGltZW91dAogICAgICAgICkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBuZXdfc25hcHNob3Quc3RhdF9pbmZvKHBhdGgpLnN0X2N0aW1lCjx8ZmltX2VuZHw+"]
["ddd7a09a71e6e879781bd6f1a1730b0af43d6400-2","ddd7a09a71e6e879781bd6f1a1730b0af43d6400","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgojIHB5dGhvbiBzY3JpcHQgd2hpY2ggbmVlZHMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJ1bnMgYXMgYSBjcm9uIGpvYgo8fGZpbV9ob2xlfD4KcHJpbnQgIkNyb24gam9iIGhhcyBydW4gYXQgJXMgd2l0aCBlbnZpcm9ubWVudCB2YXJpYWJsZSAnJXMnIiAlKGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLCB0ZXN0X2Vudmlyb24pCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBkYXRldGltZQppbXBvcnQgb3MKCnRlc3RfZW52aXJvbiA9IG9zLmVudmlyb25bIlRFU1RfRU5WIl0KPHxmaW1fZW5kfD4="]
["e9a53fee22a02fbf1ef460324240c660822b1b51-3","e9a53fee22a02fbf1ef460324240c660822b1b51","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG11bHRpcHJvY2Vzc2luZwoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpiaW5kID0gJzAuMC4wLjA6ODAnCndvcmtlcnMgPSBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50KCkgKiAyICsgMQp3b3JrZXJfY2xhc3MgPSAnZ2V2ZW50JwpyYXdfZW52ID0gWydESkFOR09fU0VUVElOR1NfTU9EVUxFPWNvcmUuc2V0dGluZ3MnXQo8fGZpbV9lbmR8Pg=="]
["2f1d1b3f99e3478c471eb93f5c8580ad2f68ce81-3","2f1d1b3f99e3478c471eb93f5c8580ad2f68ce81",{"$cut":{"chars":17824,"head":"PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCkNyZWF0ZWQgb24gVGh1IE9jdCAgOCAyMDo1Mjo1NSAyMDIwCgpFTkYgRnVuY3Rpb25zCgpAYXV0aG9yOiBMaW5kc2V5IEdvcmRvbgoiIiIKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBudW1weS5tYSBhcyBtYSAKaW1wb3J0IHBhbmRhcyBhcyBwZCAKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdApmcm9tIG1wbF90b29sa2l0cy5heGVzX2dyaWQxLmluc2V0X2xvY2F0b3IgaW1wb3J0IChpbnNldF9heGVzLCBJbnNldFBvc2l0aW9uLCBtYXJrX2luc2V0KQoKaW1wb3J0IHNjaXB5LnNpZ25hbCBhcyBzaWduYWwKZnJvbSBzY2lweS5zdGF0cyBpbXBvcnQgbW9tZW50CmZyb20gc2NpcHkgaW1wb3J0IHN0YXRzCmZyb20gcHlsYWIgaW1wb3J0IHJjUGFyYW1zCnJjUGFyYW1zWydmaWd1cmUuZmlnc2l6ZSddID0gMTAsIDEwCnJjUGFyYW1zWyJsaW5lcy5tYXJrZXJzaXplIl0gPSAyCiMgcmNQYXJhbXNbJ2xpbmVzLmNvbG9yJ10gPSAnaycKZnJvbSBzY2lweS5zaWduYWwgaW1wb3J0IGFyZ3JlbGV4dHJlbWEKCmltcG9ydCBwbG90dGluZ19mdW5jdGlvbnMgYXMgcGYKCmltcG9ydCBza2xlYXJuCmZyb20gc2tsZWFybi5jbHVzdGVyIGltcG9ydCBLTWVhbnMKZnJvbSBza2xlYXJuLmNsdXN0ZXIgaW1wb3J0IERCU0NBTgpmcm9tIHNrbGVhcm4ucHJlcHJvY2Vzc2luZyBpbXBvcnQgTm9ybWFsaXplcgpmcm9tIHNrbGVhcm4gaW1wb3J0IG1ldHJpY3MKaW1wb3J0IGZubWF0Y2gKCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCmltcG9ydCBvcwppbXBvcnQgc2h1dGlsCmZyb20gc2NpcHkuc3RhdHMgaW1wb3J0IG1vbWVudCwgc2lnbWFjbGlwCgppbXBvcnQgYXN0cm9weQpmcm9tIGFzdHJvcHkuaW8gaW1wb3J0IGZpdHMKaW1wb3J0IHNjaXB5LnNpZ25hbCBhcyBzaWduYWwKZnJvbSBhc3Ryb3B5LnN0YXRzIGltcG9ydCBTaWdtYUNsaXAKZnJvbSBhc3Ryb3B5LnV0aWxzIGltcG9ydCBleGNlcHRpb25zCgpmcm9tIHNrbGVhcm4ubWV0cmljcyBpbXBvcnQgY29uZnVzaW9uX21hdHJpeApmcm9tIHNrbGVhcm4ubmVpZ2hib3JzIGltcG9ydCBMb2NhbE91dGxpZXJGYWN0b3IKZnJvbSBza2xlYXJuLmRlY29tcG9zaXRpb24gaW1wb3J0IFBDQQoKaW1wb3J0IGFzdHJvcXVlcnkKZnJvbSBhc3Ryb3F1ZXJ5LnNpbWJhZCBpbXBvcnQgU2ltYmFkCmZyb20gYXN0cm9xdWVyeS5tYXN0IGltcG9ydCBDYXRhbG9ncwpmcm9tIGFzdHJvcXVlcnkubWFzdCBpbXBvcnQgT2JzZXJ2YXRpb25zCmZyb20gYXN0cm9xdWVyeSBpbXBvcnQgZXhjZXB0aW9ucwpmcm9tIGFzdHJvcXVlcnkuZXhjZXB0aW9ucyBpbXBvcnQgUmVtb3RlU2VydmljZUVycm9yCmltcG9ydCBhc3Ryb3B5LmNvb3JkaW5hdGVzIGFzIGNvb3JkCmltcG9ydCBhc3Ryb3B5LnVuaXRzIGFzIHUKZnJvbSBhc3Ryb3F1ZXJ5LnZpemllciBpbXBvcnQgVml6aWVyCgppbXBvcnQgcGRiCmltcG9ydCBmbm1hdGNoIGFzIGZtCgppbXBvcnQgbnVtYmEKCmZyb20gc2tsZWFybi5jbHVzdGVyIGltcG9ydCBEQlNDQU4KZnJvbSBza2xlYXJuLm1ldHJpY3MgaW1wb3J0IHNpbGhvdWV0dGVfc2NvcmUsIGNhbGluc2tpX2hhcmFiYXN6X3Njb3JlCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCBkYXZpZXNfYm91bGRpbl9zY29yZSAgIAojIGltcG9ydCBiYXRtYW4KZnJvbSB0cmFuc2l0bGVhc3RzcXVhcmVzIGltcG9ydCB0cmFuc2l0bGVhc3RzcXVhcmVzCgppbXBvcnQgbW9kZWwgYXMgbWwKCmRlZiBsb2FkX2ZlYXR1cmVfbWV0YWZpbGUoZm9sZGVycGF0aCk6CiAgICBmaWxlcGF0aHMgPSBbXQogICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZm9sZGVycGF0aCk6CiAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CiAgICAgICAgICAgIGlmIGZpbGUuZW5kc3dpdGgoImZlYXR1cmVzX3YwLmZpdHMiKToKICAgICAgICAgICAgICAgIGZpbGVwYXRocy5hcHBlbmQocm9vdCArICIvIiArIGZpbGUpCiAgICAgICAgICAgICAgICBwcmludChyb290ICsgIi8iICsgZmlsZSkKICAgICAgICAgICAgZWxpZiBmaWxlLmVuZHN3aXRoKCJmZWF0dXJlc192MS5maXRzIik6CiAgICAgICAgICAgICAgICBmaWxlcGF0aHMuYXBwZW5kKHJvb3QgKyAiLyIgKyBmaWxlKQogICAgICAgICAgICAgICAgcHJpbnQocm9vdCArICIvIiArIGZpbGUpCiAgICAgICAgCiAgICBmID0gZml0cy5vcGVuKGZpbGVwYXRoc1swXSwgbWVtbWFwPUZhbHNlKQogICAgZmVhdHVyZXMgPSBucC5hc2FycmF5KGZbMF0uZGF0YSkKICAgIGYuY2xvc2UoKQogICAgZm9yIG4gaW4gcmFuZ2UobGVuKGZpbGVwYXRocykgLTEpOgogICAgICAgIGYgPSBmaXRzLm9wZW4oZmlsZXBhdGhzW24rMV0sIG1lbW1hcD1GYWxzZSkKICAgICAgICBmZWF0dXJlc19uZXcgPSBucC5hc2FycmF5KGZbMF0uZGF0YSkKICAgICAgICBmZWF0dXJlcyA9IG5wLmNvbHVtbl9zdGFjaygoZmVhdHVyZXMsIGZlYXR1cmVzX25ldykpCiAgICAgICAgZi5jbG9zZSgpCiAgICByZXR1cm4gZmVhdHVyZXMKICAgIAoKZGVmIGNyZWF0ZV9zYXZlX2ZlYXR2ZWNfaG9tb2dlbm91c190aW1lKHlvdXJwYXRoLCB0aW1lcywgaW50ZW5zaXRpZXMsIGZpbGVsYWJlbCwgdmVyc2lvbj0wLCBzYXZlPVRydWUpOgogICAgIiIiUHJvZHVjZXMgdGhlIGZlYXR1cmUgdmVjdG9ycyBmb3IgZWFjaCBsaWdodCBjdXJ2ZSBhbmQgc2F2ZXMgdGhlbSBhbGwKICAgIGludG8gYSBzaW5nbGUgZml0cyBmaWxlLiByZXF1aXJlcyBhbGwgbGlnaHQgY3VydmVzIG9uIHRoZSBzYW1lIHRpbWUgYXhpcwogICAgcGFyYW1ldGVyczoKICAgICAgICAqIHlvdXJwYXRoID0gZm9sZGVyIHlvdSB3YW50IHRoZSBmaWxlIHNhdmVkIGludG8KICAgICAgICAqIHRpbWVzID0gYSBzaW5nbGUgdGltZSBheGlzIGZvciBhbGwgCiAgICAgICAgKiBpbnRlbnNpdGllcyA9IGFycmF5IG9mIGFsbCBsaWdodCBjdXJ2ZXMgKE5PVCBub3JtYWxpemVkKQogICAgICAgICogc2VjdG9yLCBjYW1lcmEsIGNjZCA9IGludGVnZXJzIAogICAgICAgICogdmVyc2lvbiA9IHdoYXQgdmVyc2lvbiBvZiBmZWF0dXJlIHZlY3RvciB0byBjYWxj"}}]
["c0f613721e086f669a6ba8054bc880ed865144ae-3","c0f613721e086f669a6ba8054bc880ed865144ae","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNxbGl0ZTMKZnJvbSB0eXBpbmcgaW1wb3J0IFVuaW9uCgoKZGVmIGdldF91c2VyX2NvbmZpZyhrZXk6IHN0cikgLT4gVW5pb25bYm9vbCwgdHVwbGVdOgogICAgY29ubmVjdGlvbiA9IHNxbGl0ZTMuY29ubmVjdCgndXRpbGl0eV9haS5zcWxpdGUnLCBpc29sYXRpb25fbGV2ZWw9Tm9uZSkKICAgIGN1cnNvciA9IGNvbm5lY3Rpb24uY3Vyc29yKCkKCiAgICBjdXJzb3IuZXhlY3V0ZSgiU0VMRUNUIGNvbmZpZ3VyYXRpb24gRlJPTSB1c2VycyBXSEVSRSBrZXk9PyIsIChrZXksKSkKICAgIHJlc3VsdCA9IGN1cnNvci5mZXRjaG9uZSgpCgogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBjcmVhdGVfdXNlcihrZXk6IHN0ciwgY29uZmlndXJhdGlvbjogc3RyKSAtPiBib29sOgogICAgY29ubmVjdGlvbiA9IHNxbGl0ZTMuY29ubmVjdCgndXRpbGl0eV9haS5zcWxpdGUnLCBpc29sYXRpb25fbGV2ZWw9Tm9uZSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgY3Vyc29yID0gY29ubmVjdGlvbi5jdXJzb3IoKQoKICAgIHRyeToKICAgICAgICBjcmVhdGVfdGFibGUgPSAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdXNlcnMoa2V5IFRFWFQgUFJJTUFSWSBLRVksIGNvbmZpZ3VyYXRpb24gVEVYVCBVTklRVUUpIgo8fGZpbV9lbmR8Pg=="]
["9b9157f30e539b6b8ed5e171497849c0f7d94be9-2","9b9157f30e539b6b8ed5e171497849c0f7d94be9","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMjEgUWlhbnl1biwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgoKIyB1Y2xvdWQKVUNfSU5TVEFOQ0VfU1RBVEVfQUNUSVZFID0gJ1J1bm5pbmcnClVDX0lOU1RBTkNFX1NUQVRFX1NUQVJUSU5HID0gJ1N0YXJ0aW5nJwpVQ19JTlNUQU5DRV9TVEFURV9TVE9QUEVEID0gJ1N0b3BwZWQnClVDX0lOU1RBTkNFX1NUQVRFX0lOSVRJQUxJWklORyA9ICdJbml0aWFsaXppbmcnClVDX0lOU1RBTkNFX1NUQVRFX1NUT1BQSU5HID0gJ1N0b3BwaW5nJwpVQ19JTlNUQU5DRV9TVEFURV9SRUJPT1RJTkcgPSAnUmVib290aW5nJwo8fGZpbV9ob2xlfD4KVUNfVk9MVU1FX1NUQVRFX0FUVEFDSElORyA9ICdBdHRhY2hpbmcnClVDX1ZPTFVNRV9TVEFURV9JTl9VU0UgPSAnSW5Vc2UnClVDX1ZPTFVNRV9TVEFURV9ERVRBQ0hJTkcgPSAnRGV0YWNoaW5nJwpVQ19WT0xVTUVfU1RBVEVfQ0xPTklORyA9ICdDbG9uaW5nJwpVQ19WT0xVTUVfU1RBVEVfUkVTVE9SSU5HID0gJ1Jlc3RvcmluZycKVUNfVk9MVU1FX1NUQVRFX1JFU1RPUkVfRkFJTEVEID0gJ1Jlc3RvcmVGYWlsZWQnClVDX1ZPTFVNRV9TVEFURV9GQUlMRUQgPSAnRmFpbGVkJwoKVUNfVk9MVU1FX1RZUEUgPSAnQ0xPVURfU1NEJwpNYWNoaW5lVHlwZSA9ICdPJyAgIyBjdXJyZW50IHVjbG91ZCBvbmx5IHN1cHBvcnQgdGhpcwo8fGZpbV9zdWZmaXh8PgpVQ19JTlNUQU5DRV9TVEFURV9JTlNUQUxMX0ZBSUwgPSAnSW5zdGFsbCBGYWlsJwoKVUNfVk9MVU1FX1NUQVRFX0FWQUlMQUJMRSA9ICdBdmFpbGFibGUnClVDX1ZPTFVNRV9TVEFURV9JTklUSUFMSVpBVElORyA9ICdJbml0aWFsaXphdGluZycKPHxmaW1fZW5kfD4="]
["2f379a0f9a331e9a700604ae57ff0f253033193a-1","2f379a0f9a331e9a700604ae57ff0f253033193a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgb3MKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBudW1weSBhcyBucAoKZnJvbSBtYXRwbG90bGliIGltcG9ydCBweXBsb3QgYXMgcGx0CmltcG9ydCBtYXRwbG90bGliLmxpbmVzIGFzIG1saW5lcwoKaW1wb3J0IG1hbnRpZAppbXBvcnQgbWFudGlkLnNpbXBsZWFwaSBhcyBhcGkKbWFudGlkLmtlcm5lbC5jb25maWcuc2V0TG9nTGV2ZWwoMykKCmltcG9ydCBsbWZpdApmcm9tIGxtZml0Lm1vZGVscyBpbXBvcnQgR2F1c3NpYW5Nb2RlbCwgTW9kZWwKCgpTTEQgPSBkaWN0KFNpPTIuMDdlLTYsIFF1YXJ0ej00LjE4ZS02KQoKCmNsYXNzIFJlZnJhY3RlZChvYmplY3QpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3cywgbWF0ZXJpYWw9J1NpJywgdG9mX2Jpbj0yMDAsIG9mZnNldD0wLjAxLCBwaXhlbF9zaXplPTAuMDAwNzIpOgogICAgICAgICIiIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIEluaXRpYWwgcHJvY2VzcyBvZiB0aGUgcmF3IGRhdGEgdG8gb3JnYW5pemUgaXQuCjx8ZmltX2VuZHw+"]
["f1c2133ee860d21a1e6610ac90998b0cbb759423-2","f1c2133ee860d21a1e6610ac90998b0cbb759423","PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKCmZyb20gYXN5bmNwZyBpbXBvcnQgUmVjb3JkCgppbXBvcnQgYWVwLmRhdGEuZGIucG9zdGdyZXMgYXMgZGIKZnJvbSBhZXAuZG9tYWluLm1vZGVscyBpbXBvcnQgQXJlYSwgTG9jYXRpb24sIEFyZWFUeXBlLCBTZW5zb3IsIFNlbnNvclR5cGUsIFJlYWRpbmcsIFdlYXRoZXJJbmZvLCBBY3RpdmF0aW9uLCBcCiAgICBXZWF0aGVySW5mb1R5cGUKCgpkZWYgcmVjb3JkX3RvX2xvY2F0aW9uKHJlY29yZDogUmVjb3JkKToKICAgIHJldHVybiBMb2NhdGlvbigKICAgICAgICBsYXRpdHVkZT1yZWNvcmRbJ2xhdGl0dWRlJ10sCiAgICAgICAgbG9uZ2l0dWRlPXJlY29yZFsnbG9uZ2l0dWRlJ10KICAgICkKCgpkZWYgcmVjb3JkX3RvX2FyZWEocmVjb3JkOiBSZWNvcmQpOgogICAgcmV0dXJuIEFyZWEoCiAgICAgICAgaWRlbnRpZmllcj1yZWNvcmRbJ2lkZW50aWZpZXInXSwKICAgICAgICBuYW1lPXJlY29yZFsnbmFtZSddLAogICAgICAgIGxvY2F0aW9uPXJlY29yZF90b19sb2NhdGlvbihyZWNvcmQpLAogICAgICAgIGFyZWFfdHlwZT1BcmVhVHlwZVtyZWNvcmRbJ2FyZWFfdHlwZSddXSwKICAgICAgICBwYXJlbnRfYXJlYV9pZGVudGlmaWVyPXJlY29yZFsncGFyZW50X2FyZWFfaWRlbnRpZmllciddLAogICAgKQoKCmRlZiByZWNvcmRfdG9fc2Vuc29yKHJlY29yZDogUmVjb3JkKToKICAgIHJldHVybiBTZW5zb3IoCiAgICAgICAgaWRlbnRpZmllcj1yZWNvcmRbJ2lkZW50aWZpZXInXSwKICAgICAgICBsb2NhdGlvbj1yZWNvcmRfdG9fbG9jYXRpb24ocmVjb3JkKSwKICAgICAgICBzZW5zb3JfdHlwZT1TZW5zb3JUeXBlW3JlY29yZFsnc2Vuc29yX3R5cGUnXV0sCiAgICAgICAgYXJlYV9pZGVudGlmaWVyPXJlY29yZFsnYXJlYV9pZGVudGlmaWVyJ10KICAgICkKCgpkZWYgcmVjb3JkX3RvX3JlYWRpbmcocmVjb3JkOiBSZWNvcmQpOgogICAgcmV0dXJuIFJlYWRpbmcoCiAgICAgICAgaWRlbnRpZmllcj1yZWNvcmRbJ2lkZW50aWZpZXInXSwKICAgICAgICB3ZWF0aGVyX2luZm89V2VhdGhlckluZm8oCiAgICAgICAgICAgIHdpbmRfZGlyZWN0aW9uPXJlY29yZFsnd2luZF9kaXJlY3Rpb24nXSwKICAgICAgICAgICAgd2luZF92ZWxvY2l0eT1yZWNvcmRbJ3dpbmRfdmVsb2NpdHknXSwKICAgICAgICAgICAgcmFpbmZhbGw9cmVjb3JkWydyYWluZmFsbCddLAogICAgICAgICAgICBpbnRlcmlvcl90ZW1wZXJhdHVyZT1yZWNvcmRbJ2ludGVyaW9yX3RlbXBlcmF0dXJlJ10sCiAgICAgICAgICAgIGV4dGVyaW9yX3RlbXBlcmF0dXJlPXJlY29yZFsnZXh0ZXJpb3JfdGVtcGVyYXR1cmUnXSwKICAgICAgICAgICAgaHVtaWRpdHk9cmVjb3JkWydodW1pZGl0eSddLAogICAgICAgICAgICBhdG1vc3BoZXJpY19wcmVzc3VyZT1yZWNvcmRbJ2F0bW9zcGhlcmljX3ByZXNzdXJlJ10KICAgICAgICApLAogICAgICAgIHRpbWVzdGFtcD1yZWNvcmRbJ3RpbWVzdGFtcCddLAogICAgICAgIGxvY2F0aW9uPXJlY29yZF90b19sb2NhdGlvbihyZWNvcmQpCiAgICApCgoKZGVmIHJlY29yZF90b19hY3RpdmF0aW9uKHJlY29yZDogUmVjb3JkKToKICAgIHJldHVybiBBY3RpdmF0aW9uKAogICAgICAgIGlkZW50aWZpZXI9cmVjb3JkWydpZGVudGlmaWVyJ10sCiAgICAgICAgcmVhZGluZ19pZGVudGlmaWVyPXJlY29yZFsncmVhZGluZ19pZGVudGlmaWVyJ10sCiAgICAgICAgYWN0aXZhdGlvbl9jb3VudD1yZWNvcmRbJ2FjdGl2YXRpb25fY291bnQnXSwKICAgICAgICBzZW5zb3JfaWRlbnRpZmllcj1yZWNvcmRbJ3NlbnNvcl9pZGVudGlmaWVyJ10sCiAgICAgICAgdGltZXN0YW1wPXJlY29yZC5nZXQoJ3RpbWVzdGFtcCcsIE5vbmUpCiAgICApCgoKY2xhc3MgQXJlYURhdGFzb3VyY2U6CiAgICBhc3luYyBkZWYgZ2V0KHNlbGYsIGlkZW50aWZpZXIpOgogICAgICAgIGFzeW5jIHdpdGggZGIucG9vbC5hY3F1aXJlKCkgYXMgY29ubjoKICAgICAgICAgICAgYXJlYXMgPSBhd2FpdCBjb25uLmZldGNoKCJTRUxFQ1QgKiBGUk9NIGFyZWEgV0hFUkUgaWRlbnRpZmllciA9ICQxIiwgaWRlbnRpZmllcikKICAgICAgICAgICAgYXJlYXMgPSBsaXN0KG1hcChyZWNvcmRfdG9fYXJlYSwgYXJlYXMpKQogICAgICAgICAgICBhc3NlcnQgbGVuKGFyZWFzKSA8PSAxCiAgICAgICAgICAgIGlmIGxlbihhcmVhcykgPT0gMToKICAgICAgICAgICAgICAgIHJldHVybiBhcmVhc1swXQogICAgICAgICAgICByZXR1cm4gTm9uZQoKICAgIGFzeW5jIGRlZiBjcmVhdGUoc2VsZiwgYXJlYTogQXJlYSk6CiAgICAgICAgYXN5bmMgd2l0aCBkYi5wb29sLmFjcXVpcmUoKSBhcyBjb25uOgogICAgICAgICAgICBhc3luYyB3aXRoIGNvbm4udHJhbnNhY3Rpb24oKToKICAgICAgICAgICAgICAgIGF3YWl0IGNvbm4uZXhlY3V0ZSgiIiIKICAgICAgICAgICAgICAgIElOU0VSVCBJTlRPIGFyZWEgKGlkLCBpZGVudGlmaWVyLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBuYW1lLCBhcmVhX3R5cGUsIHBhcmVudF9hcmVhX2lkZW50aWZpZXIpCiAgICAgICAgICAgICAgICAgICAgdmFsdWVzIChkZWZhdWx0LCBkZWZhdWx0LCAkMSwgJDIsICQzLCAkNCwgJDUpCiAgICAgICAgICAgICAgICAiIiIsIGFyZWEubG9jYXRpb24ubGF0aXR1ZGUsIGFyZWEubG9jYXRpb24ubG9uZ2l0dWRlLCBhcmVhLm5hbWUsIGFyZWEuYXJlYV90eXBlLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlYS5wYXJlbnRfYXJlYV9pZGVudGlmaWVyKQoKICAgIGFzeW5jIGRlZiBhbGwoc2VsZiwgcGFnZTogaW50LCBlbGVtZW50czogaW50KToKICAgICAgICBvZmZzZXQgPSBwYWdlICogZWxlbWVudHMKICAgICAgICBwcmludChwYWdlLCBlbGVtZW50cywgb2Zmc2V0KQogICAgICAgIGFzeW5jIHdpdGggZGIucG9vbC5hY3F1aXJlKCkgYXMgY29ubjoKICAgICAgICAgICAgYXJlYXMgPSBhd2FpdCBjb25uLmZldGNoKCJTRUxFQ1QgKiBGUk9NIGFyZWEgT1JERVIgQlkgaWRlbnRpZmllciBERVNDIGxpbWl0ICQxIG9mZnNldCAkMiIsIGVsZW1lbnRzLCBvZmZzZXQpCgogICAgICAgICAgICByZXR1cm4gbGlzdChtYXAocmVjb3JkX3RvX2FyZWEsIGFyZWFzKSkKCiAgICBhc3luYyBkZWYgdXBkYXRlKHNlbGYsIGFyZWE6IEFyZWEpOgogICAgICAgIGFzeW5jIHdpdGggZGIucG9vbC5hY3F1aXJlKCkgYXMgY29ubjoKICAgICAgICAgICAgYXN5bmMgd2l0aCBjb25uLnRyYW5zYWN0aW9uKCk6CiAgICAgICAgICAgICAgICBhd2FpdCBjb25uLmV4ZWN1dGUoIiIiCiAgICAgICAgICAgICAgICBVUERBVEUgYXJlYSBzZXQgbGF0aXR1ZGUgPSAkMiwgbG9uZ2l0dWRlID0gJDMsIG5hbWUgPSAkNCwgYXJlYV90eXBlID0gJDUsIHBhcmVudF9hcmVhX2lkZW50aWZpZXIgPSAkNgogICAgICAgICAgICAgICAgICAgIHdoZXJlIGlkZW50aWZpZXIgPSAkMQogICAgICAgICAgICAgICAgIiIiLCBhcmVhLmlkZW50aWZpZXIsIGFyZWEubG9jYXRpb24ubGF0aXR1ZGUsIGFyZWEubG9jYXRpb24ubG9uZ2l0dWRlLCBhcmVhLm5hbWUsIGFyZWEuYXJlYV90eXBlLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlYS5wYXJlbnRfYXJlYV9pZGVudGlmaWVyKQoKICAgIGFzeW5jIGRlZiBkZWxldGUoc2VsZiwgaWRlbnRpZmllcik6CiAgICAgICAgYXN5bmMgd2l0aCBkYi5wb29sLmFjcXVpcmUoKSBhcyBjb25uOgogICAgICAgICAgICBhc3luYyB3aXRoIGNvbm4udHJhbnNhY3Rpb24oKToKICAgICAgICAgICAgICAgIGF3YWl0IGNvbm4uZXhlY3V0ZSgiIiIKICAgICAgICAgICAgICAgIERFTEVURSBGUk9NIGFyZWEgV0hFUkUgaWRlbnRpZmllciA9ICQxCiAgICAgICAgICAgICAgICAiIiIsIGlkZW50aWZpZXIpCgoKY2xhc3MgU2Vuc29yRGF0YXNvdXJjZToKICAgIGFzeW5jIGRlZiBnZXQoc2VsZiwgaWRlbnRpZmllcik6CiAgICAgICAgYXN5bmMgd2l0aCBkYi5wb29sLmFjcXVpcmUoKSBhcyBjb25uOgogICAgICAgICAgICBzZW5zb3IgPSBhd2FpdCBjb25uLmZldGNoKCJTRUxFQ1QgKiBGUk9NIHNlbnNvciBXSEVSRSBpZGVudGlmaWVyID0gJDEiLCBpZGVudGlmaWVyKQogICAgICAgICAgICBzZW5zb3IgPSBsaXN0KG1hcChyZWNvcmRfdG9fc2Vuc29yLCBzZW5zb3IpKQogICAgICAgICAgICBhc3NlcnQgbGVuKHNlbnNvcikgPD0gMQogICAgICAgICAgICBpZiBsZW4oc2Vuc29yKSA9PSAxOgogICAgICAgICAgICAgICAgcmV0dXJuIHNlbnNvclswXQogICAgICAgICAgICByZXR1cm4gTm9uZQoKICAgIGFzeW5jIGRlZiBjcmVhdGUoc2VsZiwgc2Vuc29yOiBTZW5zb3IpOgogICAgICAgIGFzeW5jIHdpdGggZGIucG9vbC5hY3F1aXJlKCkgYXMgY29ubjoKICAgICAgICAgICAgYXN5bmMgd2l0aCBjb25uLnRyYW5zYWN0aW9uKCk6CiAgICAgICAgICAgICAgICBhd2FpdCBjb25uLmV4ZWN1dGUoIiIiCiAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyBzZW5zb3IgKGlkLCBpZGVudGlmaWVyLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhcmVhX2lkZW50aWZpZXIsIHNlbnNvcl90eXBlKQogICAgICAgICAgICAgICAgICAgIHZhbHVlcyAoZGVmYXVsdCwgJDEsICQyLCAkMywgJDQsICQ1KQogICAgICAgICAgICAgICAgIiIiLCBzZW5zb3IuaWRlbnRpZmllciwgc2Vuc29yLmxvY2F0aW9uLmxhdGl0dWRlLCBzZW5zb3IubG9jYXRpb24ubG9uZ2l0dWRlLCBzZW5zb3IuYXJlYV9pZGVudGlmaWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnNvci5zZW5zb3JfdHlwZS5uYW1lKQoKICAgIGFzeW5jIGRlZiBhbGwoc2VsZiwgcGFnZTogaW50LCBlbGVtZW50czogaW50KToKICAgICAgICBvZmZzZXQgPSBwYWdlICogZWxlbWVudHMKICAgICAgICBwcmludChwYWdlLCBlbGVtZW50cywgb2Zmc2V0KQogICAgICAgIGFzeW5jIHdpdGggZGIucG9vbC5hY3F1aXJlKCkgYXMgY29ubjoKICAgICAgICAgICAgc2Vuc29ycyA9IGF3YWl0IGNvbm4uZmV0Y2goIlNFTEVDVCAqIEZST00gc2Vuc29yIE9SREVSIEJZIGlkZW50aWZpZXIgREVTQyBsaW1pdCAkMSBvZmZzZXQgJDIiLCBlbGVtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0KQogICAgICAgICAgICByZXR1cm4gbGlzdChtYXAocmVjb3JkX3RvX3NlbnNvciwgc2Vuc29ycykpCgogICAgYXN5bmMgZGVmIHVwZGF0ZShzZWxmLCBzZW5zb3I6IFNlbnNvcik6CiAgICAgICAgYXN5bmMgd2l0aCBkYi5wb29sLmFjcXVpcmUoKSBhcyBjb25uOgogICAgICAgICAgICBhc3luYyB3aXRoIGNvbm4udHJhbnNhY3Rpb24oKToKICAgICAgICAgICAgICAgIGF3YWl0IGNvbm4uZXhlY3V0ZSgiIiIKICAgICAgICAgICAgICAgIFVQREFURSBzZW5zb3Igc2V0IGxhdGl0dWRlID0gJDIsIGxvbmdpdHVkZSA9ICQzLCBhcmVhX2lkZW50aWZpZXIgPSAkNCwgc2Vuc29yX3R5cGUgPSAkNQogICAgICAgICAgICAgICAgICAgIHdoZXJlIGlkZW50aWZpZXIgPSAkMQogICAgICAgICAgICAgICAgIiIiLCBzZW5zb3IuaWRlbnRpZmllciwgc2Vuc29yLmxvY2F0aW9uLmxhdGl0dWRlLCBzZW5zb3IubG9jYXRpb24ubG9uZ2l0dWRlLCBzZW5zb3IuYXJlYV9pZGVudGlmaWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnNvci5zZW5zb3JfdHlwZS5uYW1lKQoKICAgIGFzeW5jIGRlZiBkZWxldGUoc2VsZiwgaWRlbnRpZmllcik6CiAgICAgICAgYXN5bmMgd2l0aCBkYi5wb29sLmFjcXVpcmUoKSBhcyBjb25uOgogICAgICAgICAgICBhc3luYyB3aXRoIGNvbm4udHJhbnNhY3Rpb24oKToKICAgICAgICAgICAgICAgIGF3YWl0IGNvbm4uZXhlY3V0ZSgiIiIKICAgICAgICAgICAgICAgIERFTEVURSBGUk9NIHNlbnNvciBXSEVSRSBpZGVudGlmaWVyID0gJDEKICAgICAgICAgICAgICAgICIiIiwgaWRlbnRpZmllcikKCgpjbGFzcyBSZWFkaW5nRGF0YXNvdXJjZToKICAgIGFzeW5jIGRlZiBnZXQoc2VsZiwgaWRlbnRpZmllcik6CiAgICAgICAgYXN5bmMgd2l0aCBkYi5wb29sLmFjcXVpcmUoKSBhcyBjb25uOgogICAgICAgICAgICByZWFkaW5nID0gYXdhaXQgY29ubi5mZXRjaCgiU0VMRUNUICogRlJPTSByZWFkaW5nIFdIRVJFIGlkZW50aWZpZXIgPSAkMSIsIGlkZW50aWZpZXIpCiAgICAgICAgICAgIHJlYWRpbmcgPSBsaXN0KG1hcChyZWNvcmRfdG9fcmVhZGluZywgcmVhZGluZykpCiAgICAgICAgICAgIGFzc2VydCBsZW4ocmVhZGluZykgPD0gMQogICAgICAgICAgICBpZiBsZW4ocmVhZGluZykgPT0gMToKICAgICAgICAgICAgICAgIHJldHVybiByZWFkaW5nWzBdCiAgICAgICAgICAgIHJldHVybiBOb25lCgogICAgYXN5bmMgZGVmIGNyZWF0ZShzZWxmLCByZWFkaW5nOiBSZWFkaW5nKToKICAgICAgICBhc3luYyB3aXRoIGRiLnBvb2wuYWNxdWlyZSgpIGFzIGNvbm46CiAgICAgICAgICAgIGFzeW5jIHdpdGggY29ubi50cmFuc2FjdGlvbigpOgogICAgICAgICAgICAgICAgYXdhaXQgY29ubi5leGVjdXRlKCIiIgogICAgICAgICAgICAgICAgSU5TRVJUIElOVE8gcmVhZGluZyAoaWQsIGlkZW50aWZpZXIsIHRpbWVzdGFtcCwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgd2luZF9kaXJlY3Rpb24sIHdpbmRfdmVsb2NpdHksIAogICAgICAgICAgICAgICAgICAgIHJhaW5mYWxsLCBpbnRlcmlvcl90ZW1wZXJhdHVyZSwgZXh0ZXJpb3JfdGVtcGVyYXR1cmUsIGh1bWlkaXR5LCBhdG1vc3BoZXJpY19wcmVzc3VyZSkKICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgKGRlZmF1bHQsIGRlZmF1bHQsICQxLCAkMiwgJDMsICQ0LCAkNSwgJDYsICQ3LCAkOCwgJDksICQxMCkKICAgICAgICAgICAgICAgICIiIiwgcmVhZGluZy50aW1lc3RhbXAsIHJlYWRpbmcubG9jYXRpb24ubGF0aXR1ZGUsIHJlYWRpbmcubG9jYXRpb24ubG9uZ2l0dWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRpbmcud2VhdGhlcl9pbmZvLndpbmRfZGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRpbmcud2VhdGhlcl9pbmZvLndpbmRfdmVsb2NpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGluZy53ZWF0aGVyX2luZm8ucmFpbmZhbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGluZy53ZWF0aGVyX2luZm8uaW50ZXJpb3JfdGVtcGVyYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGluZy53ZWF0aGVyX2luZm8uZXh0ZXJpb3JfdGVtcGVyYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGluZy53ZWF0aGVyX2luZm8uaHVtaWRpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGluZy53ZWF0aGVyX2luZm8uYXRtb3NwaGVyaWNfcHJlc3N1cmUpCgogICAgYXN5bmMgZGVmIGFsbChzZWxmLCBwYWdlOiBpbnQsIGVsZW1lbnRzOiBpbnQpOgogICAgICAgIG9mZnNldCA9IHBhZ2UgKiBlbGVtZW50cwogICAgICAgIHByaW50KHBhZ2UsIGVsZW1lbnRzLCBvZmZzZXQpCiAgICAgICAgYXN5bmMgd2l0aCBkYi5wb29sLmFjcXVpcmUoKSBhcyBjb25uOgogICAgICAgICAgICByZWFkaW5ncyA9IGF3YWl0IGNvbm4uZmV0Y2goIlNFTEVDVCAqIEZST00gcmVhZGluZyBPUkRFUiBCWSB0aW1lc3RhbXAgREVTQyBsaW1pdCAkMSBvZmZzZXQgJDIiLCBlbGVtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCkKICAgICAgICAgICAgcmV0dXJuIGxpc3QobWFwKHJlY29yZF90b19yZWFkaW5nLCByZWFkaW5ncykpCgogICAgYXN5bmMgZGVmIHVwZGF0ZShzZWxmLCByZWFkaW5nOiBSZWFkaW5nKToKICAgICAgICBhc3luYyB3aXRoIGRiLnBvb2wuYWNxdWlyZSgpIGFzIGNvbm46CiAgICAgICAgICAgIGFzeW5jIHdpdGggY29ubi50cmFuc2FjdGlvbigpOgogICAgICAgICAgICAgICAgYXdhaXQgY29ubi5leGVjdXRlKCIiIgogICAgICAgICAgICAgICAgVVBEQVRFIHJlYWRpbmcgc2V0IHRpbWVzdGFtcCA9ICQyLCAgbGF0aXR1ZGUgPSAkMywgIGxvbmdpdHVkZSA9ICQ0LCAgd2luZF9kaXJlY3Rpb24gPSAkNSwgIAogICAgICAgICAgICAgICAgICAgIHdpbmRfdmVsb2NpdHkgPSAkNiwgcmFpbmZhbGwgPSAkNywgIGludGVyaW9yX3RlbXBlcmF0dXJlID0gJDgsICBleHRlcmlvcl90ZW1wZXJhdHVyZSA9ICQ5LCAgCiAgICAgICAgICAgICAgICAgICAgaHVtaWRpdHkgPSAkMTAsICBhdG1vc3BoZXJpY19wcmVzc3VyZSA9ICQxMQogICAgICAgICAgICAgICAgICAgIHdoZXJlIGlkZW50aWZpZXIgPSAkMQogICAgICAgICAgICAgICAgIiIiLCByZWFkaW5nLmlkZW50aWZpZXIsIHJlYWRpbmcudGltZXN0YW1wLCByZWFkaW5nLmxvY2F0aW9uLmxhdGl0dWRlLCByZWFkaW5nLmxvY2F0aW9uLmxvbmdpdHVkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkaW5nLndlYXRoZXJfaW5mby53aW5kX2RpcmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkaW5nLndlYXRoZXJfaW5mby53aW5kX3ZlbG9jaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRpbmcud2VhdGhlcl9pbmZvLnJhaW5mYWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRpbmcud2VhdGhlcl9pbmZvLmludGVyaW9yX3RlbXBlcmF0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRpbmcud2VhdGhlcl9pbmZvLmV4dGVyaW9yX3RlbXBlcmF0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRpbmcud2VhdGhlcl9pbmZvLmh1bWlkaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRpbmcud2VhdGhlcl9pbmZvLmF0bW9zcGhlcmljX3ByZXNzdXJlKQoKICAgIGFzeW5jIGRlZiBkZWxldGUoc2VsZiwgaWRlbnRpZmllcik6CiAgICAgICAgYXN5bmMgd2l0aCBkYi5wb29sLmFjcXVpcmUoKSBhcyBjb25uOgogICAgICAgICAgICBhc3luYyB3aXRoIGNvbm4udHJhbnNhY3Rpb24oKToKICAgICAgICAgICAgICAgIGF3YWl0IGNvbm4uZXhlY3V0ZSgiIiIKICAgICAgICAgICAgICAgIERFTEVURSBGUk9NIHJlYWRpbmcgV0hFUkUgaWRlbnRpZmllciA9ICQxCiAgICAgICAgICAgICAgICAiIiIsIGlkZW50aWZpZXIpCgogICAgYXN5bmMgZGVmIGFsbF90eXBlKHNlbGYsIHR5cGU6IFdlYXRoZXJJbmZvVHlwZSwgZnJvbV9kYXRlOiBkYXRldGltZSwgdG9fZGF0ZTogZGF0ZXRpbWUpOgogICAgICAgIHBhc3MKCiAgICBhc3luYyBkZWYgYWxsX3JhbmdlKHNlbGYsIGZyb21fZGF0ZTogZGF0ZXRpbWUgPSBOb25lLCB0b19kYXRlOiBkYXRldGltZSA9IE5vbmUpOgoKICAgICAgICBpZiB0b19kYXRlIGlzIE5vbmU6CiAgICAgICAgICAgIHRvX2RhdGUgPSBkYXRldGltZS5ub3coKQoKICAgICAgICB0b19kYXRlX3doZXJlID0gInRpbWVzdGFtcCA8PSBcJ3swfVwnIi5mb3JtYXQodG9fZGF0ZS5pc29mb3JtYXQoKSkKICAgICAgICBpZiBmcm9tX2RhdGUgaXMgTm9uZToKICAgICAgICAgICAgZnJvbV9kYXRlX3doZXJlID0gIiIKICAgICAgICBlbHNlOgogICAgICAgICAgICBmcm9tX2RhdGVfd2hlcmUgPSAiIGFuZCB0aW1lc3RhbXAgPj0gXCd7MH1cJyIuZm9ybWF0KGZyb21fZGF0ZS5pc29mb3JtYXQoKSkKCiAgICAgICAgcXVlcnkgPSAiIiIKICAgICAgICAgICAgICAgIFNFTEVDVCAqIEZST00gcmVhZGluZwogICAgICAgICAgICAgICAgV0hFUkUgezB9ezF9IE9SREVSIEJZIHRpbWVzdGFtcCBERVNDIiIiLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICB0b19kYXRlX3doZXJlLCBmcm9tX2RhdGVfd2hlcmUpCgogICAgICAgIHByaW50KHF1ZXJ5KQoKICAgICAgICBhc3luYyB3aXRoIGRiLnBvb2wuYWNxdWlyZSgpIGFzIGNvbm46CiAgICAgICAgICAgIHJlYWRpbmdzID0gYXdhaXQgY29ubi5mZXRjaChxdWVyeSkKICAgICAgICAgICAgcmV0dXJuIGxpc3QobWFwKHJlY29yZF90b19yZWFkaW5nLCByZWFkaW5ncykpCgoKY2xhc3MgQWN0aXZhdGlvbkRhdGFzb3VyY2U6CiAgICBhc3luYyBkZWYgZ2V0KHNlbGYsIGlkZW50aWZpZXIpOgogICAgICAgIGFzeW5jIHdpdGggZGIucG9vbC5hY3F1aXJlKCkgYXMgY29ubjoKICAgICAgICAgICAgYWN0aXZhdGlvbiA9IGF3YWl0IGNvbm4uZmV0Y2goIlNFTEVDVCAqIEZST00gYWN0aXZhdGlvbiBXSEVSRSBpZGVudGlmaWVyID0gJDEiLCBpZGVudGlmaWVyKQogICAgICAgICAgICBhY3RpdmF0aW9uID0gbGlzdChtYXAocmVjb3JkX3RvX2FjdGl2YXRpb24sIGFjdGl2YXRpb24pKQogICAgICAgICAgICBhc3NlcnQgbGVuKGFjdGl2YXRpb24pIDw9IDEKICAgICAgICAgICAgaWYgbGVuKGFjdGl2YXRpb24pID09IDE6CiAgICAgICAgICAgICAgICByZXR1cm4gYWN0aXZhdGlvblswXQogICAgICAgICAgICByZXR1cm4gTm9uZQoKICAgIGFzeW5jIGRlZiBjcmVhdGUoc2VsZiwgYWN0aXZhdGlvbjogQWN0aXZhdGlvbik6CiAgICAgICAgYXN5bmMgd2l0aCBkYi5wb29sLmFjcXVpcmUoKSBhcyBjb25uOgogICAgICAgICAgICBhc3luYyB3aXRoIGNvbm4udHJhbnNhY3Rpb24oKToKICAgICAgICAgICAgICAgIGF3YWl0IGNvbm4uZXhlY3V0ZSgiIiIKICAgICAgICAgICAgICAgIElOU0VSVCBJTlRPIGFjdGl2YXRpb24gKGlkLCBpZGVudGlmaWVyLCByZWFkaW5nX2lkZW50aWZpZXIsIGFjdGl2YXRpb25fY291bnQsIHNlbnNvcl9pZGVudGlmaWVyKQogICAgICAgICAgICAgICAgICAgIHZhbHVlcyAoZGVmYXVsdCwgZGVmYXVsdCwgJDEsICQyLCAkMykKICAgICAgICAgICAgICAgICIiIiwgYWN0aXZhdGlvbi5yZWFkaW5nX2lkZW50aWZpZXIsIGFjdGl2YXRpb24uYWN0aXZhdGlvbl9jb3VudCwgYWN0aXZhdGlvbi5zZW5zb3JfaWRlbnRpZmllcikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGFzeW5jIGRlZiBhbGwoc2VsZiwgcGFnZTogaW50LCBlbGVtZW50czogaW50KToKICAgICAgICBvZmZzZXQgPSBwYWdlICogZWxlbWVudHMKICAgICAgICBwcmludChwYWdlLCBlbGVtZW50cywgb2Zmc2V0KQo8fGZpbV9lbmR8Pg=="]
["c08467ef1a62cd9ffb52c4970a055169618705af-4","c08467ef1a62cd9ffb52c4970a055169618705af","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIEZvcm0gZ2VuZXJhdGVkIGZyb20gcmVhZGluZyBVSSBmaWxlICdWQVNfdmlld191aS51aScKIyMKIyMgQ3JlYXRlZCBieTogUXQgVXNlciBJbnRlcmZhY2UgQ29tcGlsZXIgdmVyc2lvbiA2LjEuMgojIwojIyBXQVJOSU5HISBBbGwgY2hhbmdlcyBtYWRlIGluIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Qgd2hlbiByZWNvbXBpbGluZyBVSSBmaWxlIQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKZnJvbSBQeVNpZGU2LlF0Q29yZSBpbXBvcnQgKiAgIyB0eXBlOiBpZ25vcmUKZnJvbSBQeVNpZGU2LlF0R3VpIGltcG9ydCAqICAjIHR5cGU6IGlnbm9yZQpmcm9tIFB5U2lkZTYuUXRXaWRnZXRzIGltcG9ydCAqICAjIHR5cGU6IGlnbm9yZQoKCmNsYXNzIFVpX1ZBU19Gb3JtKFFXaWRnZXQpOgogICAgZGVmIHNldHVwVWkoc2VsZiwgVkFTX0Zvcm0pOgogICAgICAgIGlmIG5vdCBWQVNfRm9ybS5vYmplY3ROYW1lKCk6CiAgICAgICAgICAgIFZBU19Gb3JtLnNldE9iamVjdE5hbWUodSJWQVNfRm9ybSIpCiAgICAgICAgVkFTX0Zvcm0ucmVzaXplKDEwMzMsIDYxNikKICAgICAgICBzaXplUG9saWN5ID0gUVNpemVQb2xpY3koUVNpemVQb2xpY3kuRXhwYW5kaW5nLCBRU2l6ZVBvbGljeS5FeHBhbmRpbmcpCiAgICAgICAgc2l6ZVBvbGljeS5zZXRIb3Jpem9udGFsU3RyZXRjaCgxKQogICAgICAgIHNpemVQb2xpY3kuc2V0VmVydGljYWxTdHJldGNoKDEpCiAgICAgICAgc2l6ZVBvbGljeS5zZXRIZWlnaHRGb3JXaWR0aChWQVNfRm9ybS5zaXplUG9saWN5KCkuaGFzSGVpZ2h0Rm9yV2lkdGgoKSkKICAgICAgICBWQVNfRm9ybS5zZXRTaXplUG9saWN5KHNpemVQb2xpY3kpCiAgICAgICAgVkFTX0Zvcm0uc2V0TWluaW11bVNpemUoUVNpemUoMCwgMCkpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dF80ID0gUVZCb3hMYXlvdXQoVkFTX0Zvcm0pCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dF80LnNldE9iamVjdE5hbWUodSJ2ZXJ0aWNhbExheW91dF80IikKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0ID0gUVZCb3hMYXlvdXQoKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXQuc2V0T2JqZWN0TmFtZSh1InZlcnRpY2FsTGF5b3V0IikKICAgICAgICBzZWxmLmhvcml6b250YWxMYXlvdXQgPSBRSEJveExheW91dCgpCiAgICAgICAgc2VsZi5ob3Jpem9udGFsTGF5b3V0LnNldE9iamVjdE5hbWUodSJob3Jpem9udGFsTGF5b3V0IikKICAgICAgICBzZWxmLmhvcml6b250YWxMYXlvdXQuc2V0U2l6ZUNvbnN0cmFpbnQoUUxheW91dC5TZXRNaW5BbmRNYXhTaXplKQogICAgICAgIHNlbGYubGFiZWxDb3VudHkgPSBRTGFiZWwoVkFTX0Zvcm0pCiAgICAgICAgc2VsZi5sYWJlbENvdW50eS5zZXRPYmplY3ROYW1lKHUibGFiZWxDb3VudHkiKQogICAgICAgIGZvbnQgPSBRRm9udCgpCiAgICAgICAgZm9udC5zZXRQb2ludFNpemUoMTIpCiAgICAgICAgc2VsZi5sYWJlbENvdW50eS5zZXRGb250KGZvbnQpCgogICAgICAgIHNlbGYuaG9yaXpvbnRhbExheW91dC5hZGRXaWRnZXQoc2VsZi5sYWJlbENvdW50eSkKCiAgICAgICAgc2VsZi5jb21ib0JveENvdW50eSA9IFFDb21ib0JveChWQVNfRm9ybSkKICAgICAgICBzZWxmLmNvbWJvQm94Q291bnR5LnNldE9iamVjdE5hbWUodSJjb21ib0JveENvdW50eSIpCiAgICAgICAgc2VsZi5jb21ib0JveENvdW50eS5zZXRNaW5pbXVtU2l6ZShRU2l6ZSgxMDAsIDI4KSkKICAgICAgICBzZWxmLmNvbWJvQm94Q291bnR5LnNldE1heGltdW1TaXplKFFTaXplKDIwMCwgMTY3NzcyMTUpKQogICAgICAgIHNlbGYuY29tYm9Cb3hDb3VudHkuc2V0Rm9udChmb250KQoKICAgICAgICBzZWxmLmhvcml6b250YWxMYXlvdXQuYWRkV2lkZ2V0KHNlbGYuY29tYm9Cb3hDb3VudHkpCgogICAgICAgIHNlbGYubGFiZWxSb3V0ZSA9IFFMYWJlbChWQVNfRm9ybSkKICAgICAgICBzZWxmLmxhYmVsUm91dGUuc2V0T2JqZWN0TmFtZSh1ImxhYmVsUm91dGUiKQogICAgICAgIHNlbGYubGFiZWxSb3V0ZS5zZXRGb250KGZvbnQpCgogICAgICAgIHNlbGYuaG9yaXpvbnRhbExheW91dC5hZGRXaWRnZXQoc2VsZi5sYWJlbFJvdXRlKQoKICAgICAgICBzZWxmLmNvbWJvQm94Um91dGUgPSBRQ29tYm9Cb3goVkFTX0Zvcm0pCiAgICAgICAgc2VsZi5jb21ib0JveFJvdXRlLnNldE9iamVjdE5hbWUodSJjb21ib0JveFJvdXRlIikKICAgICAgICBzZWxmLmNvbWJvQm94Um91dGUuc2V0TWluaW11bVNpemUoUVNpemUoMTAwLCAyOCkpCiAgICAgICAgc2VsZi5jb21ib0JveFJvdXRlLnNldE1heGltdW1TaXplKFFTaXplKDIwMCwgMTY3NzcyMTUpKQogICAgICAgIHNlbGYuY29tYm9Cb3hSb3V0ZS5zZXRGb250KGZvbnQpCgogICAgICAgIHNlbGYuaG9yaXpvbnRhbExheW91dC5hZGRXaWRnZXQoc2VsZi5jb21ib0JveFJvdXRlKQoKICAgICAgICBzZWxmLmxhYmVsRGlyZWN0aW9uID0gUUxhYmVsKFZBU19Gb3JtKQogICAgICAgIHNlbGYubGFiZWxEaXJlY3Rpb24uc2V0T2JqZWN0TmFtZSh1ImxhYmVsRGlyZWN0aW9uIikKICAgICAgICBzZWxmLmxhYmVsRGlyZWN0aW9uLnNldEZvbnQoZm9udCkKCiAgICAgICAgc2VsZi5ob3Jpem9udGFsTGF5b3V0LmFkZFdpZGdldChzZWxmLmxhYmVsRGlyZWN0aW9uKQoKICAgICAgICBzZWxmLmNvbWJvQm94RGlyZWN0aW9uID0gUUNvbWJvQm94KFZBU19Gb3JtKQogICAgICAgIHNlbGYuY29tYm9Cb3hEaXJlY3Rpb24uc2V0T2JqZWN0TmFtZSh1ImNvbWJvQm94RGlyZWN0aW9uIikKICAgICAgICBzZWxmLmNvbWJvQm94RGlyZWN0aW9uLnNldE1pbmltdW1TaXplKFFTaXplKDI1MCwgMjgpKQogICAgICAgIHNlbGYuY29tYm9Cb3hEaXJlY3Rpb24uc2V0TWF4aW11bVNpemUoUVNpemUoMjAwLCAxNjc3NzIxNSkpCiAgICAgICAgc2VsZi5jb21ib0JveERpcmVjdGlvbi5zZXRGb250KGZvbnQpCgogICAgICAgIHNlbGYuaG9yaXpvbnRhbExheW91dC5hZGRXaWRnZXQoc2VsZi5jb21ib0JveERpcmVjdGlvbikKCiAgICAgICAgc2VsZi5GaWx0ZXJDb2x1bW5jaGVja0JveCA9IFFDaGVja0JveChWQVNfRm9ybSkKICAgICAgICBzZWxmLkZpbHRlckNvbHVtbmNoZWNrQm94LnNldE9iamVjdE5hbWUodSJGaWx0ZXJDb2x1bW5jaGVja0JveCIpCiAgICAgICAgc2VsZi5GaWx0ZXJDb2x1bW5jaGVja0JveC5zZXRGb250KGZvbnQpCgogICAgICAgIHNlbGYuaG9yaXpvbnRhbExheW91dC5hZGRXaWRnZXQoc2VsZi5GaWx0ZXJDb2x1bW5jaGVja0JveCkKCiAgICAgICAgc2VsZi5wdXNoQnV0dG9uUmVzZXQgPSBRUHVzaEJ1dHRvbihWQVNfRm9ybSkKICAgICAgICBzZWxmLnB1c2hCdXR0b25SZXNldC5zZXRPYmplY3ROYW1lKHUicHVzaEJ1dHRvblJlc2V0IikKICAgICAgICBzZWxmLnB1c2hCdXR0b25SZXNldC5zZXRGb250KGZvbnQpCgogICAgICAgIHNlbGYuaG9yaXpvbnRhbExheW91dC5hZGRXaWRnZXQoc2VsZi5wdXNoQnV0dG9uUmVzZXQpCgogICAgICAgIHNlbGYucHVzaEJ1dHRvbkVkaXQgPSBRUHVzaEJ1dHRvbihWQVNfRm9ybSkKICAgICAgICBzZWxmLnB1c2hCdXR0b25FZGl0LnNldE9iamVjdE5hbWUodSJwdXNoQnV0dG9uRWRpdCIpCiAgICAgICAgc2VsZi5wdXNoQnV0dG9uRWRpdC5zZXRGb250KGZvbnQpCgogICAgICAgIHNlbGYuaG9yaXpvbnRhbExheW91dC5hZGRXaWRnZXQoc2VsZi5wdXNoQnV0dG9uRWRpdCkKCiAgICAgICAgc2VsZi5ob3Jpem9udGFsU3BhY2VyID0gUVNwYWNlckl0ZW0oNDAsIDIwLCBRU2l6ZVBvbGljeS5FeHBhbmRpbmcsIFFTaXplUG9saWN5Lk1pbmltdW0pCgogICAgICAgIHNlbGYuaG9yaXpvbnRhbExheW91dC5hZGRJdGVtKHNlbGYuaG9yaXpvbnRhbFNwYWNlcikKCiAgICAgICAgc2VsZi5wdXNoQnV0dG9uRWRpdDIgPSBRUHVzaEJ1dHRvbihWQVNfRm9ybSkKICAgICAgICBzZWxmLnB1c2hCdXR0b25FZGl0Mi5zZXRPYmplY3ROYW1lKHUicHVzaEJ1dHRvbkVkaXQyIikKICAgICAgICBzZWxmLnB1c2hCdXR0b25FZGl0Mi5zZXRGb250KGZvbnQpCgogICAgICAgIHNlbGYuaG9yaXpvbnRhbExheW91dC5hZGRXaWRnZXQoc2VsZi5wdXNoQnV0dG9uRWRpdDIpCgogICAgICAgIHNlbGYuaG9yaXpvbnRhbExheW91dC5zZXRTdHJldGNoKDEsIDIpCiAgICAgICAgc2VsZi5ob3Jpem9udGFsTGF5b3V0LnNldFN0cmV0Y2goMywgMikKICAgICAgICBzZWxmLmhvcml6b250YWxMYXlvdXQuc2V0U3RyZXRjaCg1LCA0KQoKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0LmFkZExheW91dChzZWxmLmhvcml6b250YWxMYXlvdXQpCgogICAgICAgIHNlbGYudGFiV2lkZ2V0ID0gUVRhYldpZGdldChWQVNfRm9ybSkKICAgICAgICBzZWxmLnRhYldpZGdldC5zZXRPYmplY3ROYW1lKHUidGFiV2lkZ2V0IikKICAgICAgICBzZWxmLnRhYldpZGdldC5zZXRGb250KGZvbnQpCiAgICAgICAgc2VsZi5WQVNfdGFiID0gUVdpZGdldCgpCiAgICAgICAgc2VsZi5WQVNfdGFiLnNldE9iamVjdE5hbWUodSJWQVNfdGFiIikKICAgICAgICBzaXplUG9saWN5MSA9IFFTaXplUG9saWN5KFFTaXplUG9saWN5LkV4cGFuZGluZywgUVNpemVQb2xpY3kuRXhwYW5kaW5nKQogICAgICAgIHNpemVQb2xpY3kxLnNldEhvcml6b250YWxTdHJldGNoKDApCiAgICAgICAgc2l6ZVBvbGljeTEuc2V0VmVydGljYWxTdHJldGNoKDApCiAgICAgICAgc2l6ZVBvbGljeTEuc2V0SGVpZ2h0Rm9yV2lkdGgoc2VsZi5WQVNfdGFiLnNpemVQb2xpY3koKS5oYXNIZWlnaHRGb3JXaWR0aCgpKQogICAgICAgIHNlbGYuVkFTX3RhYi5zZXRTaXplUG9saWN5KHNpemVQb2xpY3kxKQogICAgICAgIHNlbGYuaG9yaXpvbnRhbExheW91dF8zID0gUUhCb3hMYXlvdXQoc2VsZi5WQVNfdGFiKQogICAgICAgIHNlbGYuaG9yaXpvbnRhbExheW91dF8zLnNldE9iamVjdE5hbWUodSJob3Jpem9udGFsTGF5b3V0XzMiKQogICAgICAgIHNlbGYuVkFTX3RhYmxlV2lkZ2V0ID0gUVRhYmxlV2lkZ2V0KHNlbGYuVkFTX3RhYikKICAgICAgICBzZWxmLlZBU190YWJsZVdpZGdldC5zZXRPYmplY3ROYW1lKHUiVkFTX3RhYmxlV2lkZ2V0IikKICAgICAgICBzZWxmLlZBU190YWJsZVdpZGdldC5zZXRGb250KGZvbnQpCiAgICAgICAgc2VsZi5WQVNfdGFibGVXaWRnZXQuc2V0QXV0b0ZpbGxCYWNrZ3JvdW5kKFRydWUpCiAgICAgICAgc2VsZi5WQVNfdGFibGVXaWRnZXQuc2V0U3R5bGVTaGVldCh1IlFIZWFkZXJWaWV3OjpzZWN0aW9uIHtiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjExLDIxMSwyMTEpOyBjb2xvcjogcmdiKDAsIDAsIDApO31cbiIKIlFIZWFkZXJWaWV3OjpzZWN0aW9uOmhvcml6b250YWx7ICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNmZmZmZjg7fVxuIgoiUUhlYWRlclZpZXc6OnNlY3Rpb24ge2ZvbnQtc2l6ZTogMTIgcHQ7fVxuIgoiIikKICAgICAgICBzZWxmLlZBU190YWJsZVdpZGdldC5zZXRTb3J0aW5nRW5hYmxlZChUcnVlKQoKICAgICAgICBzZWxmLmhvcml6b250YWxMYXlvdXRfMy5hZGRXaWRnZXQoc2VsZi5WQVNfdGFibGVXaWRnZXQpCgogICAgICAgIHNlbGYudGFiV2lkZ2V0LmFkZFRhYihzZWxmLlZBU190YWIsICIiKQogICAgICAgIHNlbGYuVkFTX0RTX3RhYiA9IFFXaWRnZXQoKQogICAgICAgIHNlbGYuVkFTX0RTX3RhYi5zZXRPYmplY3ROYW1lKHUiVkFTX0RTX3RhYiIpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dF8yID0gUVZCb3hMYXlvdXQoc2VsZi5WQVNfRFNfdGFiKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXRfMi5zZXRPYmplY3ROYW1lKHUidmVydGljYWxMYXlvdXRfMiIpCiAgICAgICAgc2VsZi5WQVNfRFNfdGFibGVXaWRnZXQgPSBRVGFibGVXaWRnZXQoc2VsZi5WQVNfRFNfdGFiKQogICAgICAgIHNlbGYuVkFTX0RTX3RhYmxlV2lkZ2V0LnNldE9iamVjdE5hbWUodSJWQVNfRFNfdGFibGVXaWRnZXQiKQogICAgICAgIHNlbGYuVkFTX0RTX3RhYmxlV2lkZ2V0LnNldEZvbnQoZm9udCkKICAgICAgICBzZWxmLlZBU19EU190YWJsZVdpZGdldC5zZXRBdXRvRmlsbEJhY2tncm91bmQoVHJ1ZSkKICAgICAgICBzZWxmLlZBU19EU190YWJsZVdpZGdldC5zZXRTdHlsZVNoZWV0KHUiUUhlYWRlclZpZXc6OnNlY3Rpb24ge2JhY2tncm91bmQtY29sb3I6IHJnYigyMTEsMjExLDIxMSk7IGNvbG9yOiByZ2IoMCwgMCwgMCk7fVxuIgoiUUhlYWRlclZpZXc6OnNlY3Rpb246aG9yaXpvbnRhbHsgICBib3JkZXItdG9wOiAxcHggc29saWQgI2ZmZmZmODt9IikKCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dF8yLmFkZFdpZGdldChzZWxmLlZBU19EU190YWJsZVdpZGdldCkKCiAgICAgICAgc2VsZi50YWJXaWRnZXQuYWRkVGFiKHNlbGYuVkFTX0RTX3RhYiwgIiIpCiAgICAgICAgc2VsZi5WQVNfRERfdGFiID0gUVdpZGdldCgpCiAgICAgICAgc2VsZi5WQVNfRERfdGFiLnNldE9iamVjdE5hbWUodSJWQVNfRERfdGFiIikKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0XzMgPSBRVkJveExheW91dChzZWxmLlZBU19ERF90YWIpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dF8zLnNldE9iamVjdE5hbWUodSJ2ZXJ0aWNhbExheW91dF8zIikKICAgICAgICBzZWxmLlZBU19ERF90YWJsZVdpZGdldCA9IFFUYWJsZVdpZGdldChzZWxmLlZBU19ERF90YWIpCiAgICAgICAgc2VsZi5WQVNfRERfdGFibGVXaWRnZXQuc2V0T2JqZWN0TmFtZSh1IlZBU19ERF90YWJsZVdpZGdldCIpCiAgICAgICAgc2VsZi5WQVNfRERfdGFibGVXaWRnZXQuc2V0Rm9udChmb250KQogICAgICAgIHNlbGYuVkFTX0REX3RhYmxlV2lkZ2V0LnNldEF1dG9GaWxsQmFja2dyb3VuZChUcnVlKQogICAgICAgIHNlbGYuVkFTX0REX3RhYmxlV2lkZ2V0LnNldFN0eWxlU2hlZXQodSJRSGVhZGVyVmlldzo6c2VjdGlvbiB7YmFja2dyb3VuZC1jb2xvcjogcmdiKDIxMSwyMTEsMjExKTsgY29sb3I6IHJnYigwLCAwLCAwKTt9XG4iCiJRSGVhZGVyVmlldzo6c2VjdGlvbjpob3Jpem9udGFseyAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZmZmZmY4O30iKQoKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0XzMuYWRkV2lkZ2V0KHNlbGYuVkFTX0REX3RhYmxlV2lkZ2V0KQoKICAgICAgICBzZWxmLnRhYldpZGdldC5hZGRUYWIoc2VsZi5WQVNfRERfdGFiLCAiIikKCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dC5hZGRXaWRnZXQoc2VsZi50YWJXaWRnZXQpCgoKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0XzQuYWRkTGF5b3V0KHNlbGYudmVydGljYWxMYXlvdXQpCgogICAgICAgIHNlbGYuaG9yaXpvbnRhbExheW91dF8yID0gUUhCb3hMYXlvdXQoKQo8fGZpbV9ob2xlfD4KCiAgICAgICAgc2VsZi5yZXRyYW5zbGF0ZVVpKFZBU19Gb3JtKQoKICAgICAgICBzZWxmLnRhYldpZGdldC5zZXRDdXJyZW50SW5kZXgoMCkKCgogICAgICAgIFFNZXRhT2JqZWN0LmNvbm5lY3RTbG90c0J5TmFtZShWQVNfRm9ybSkKICAgICMgc2V0dXBVaQoKICAgIGRlZiByZXRyYW5zbGF0ZVVpKHNlbGYsIFZBU19Gb3JtKToKICAgICAgICBWQVNfRm9ybS5zZXRXaW5kb3dUaXRsZShRQ29yZUFwcGxpY2F0aW9uLnRyYW5zbGF0ZSgiVkFTX0Zvcm0iLCB1IlZpZXcgQW5hbHlzaXMgU2VjdGlvbnMgIiwgTm9uZSkpCiNpZiBRVF9DT05GSUcodG9vbHRpcCkKICAgICAgICBWQVNfRm9ybS5zZXRUb29sVGlwKFFDb3JlQXBwbGljYXRpb24udHJhbnNsYXRlKCJWQVNfRm9ybSIsIHUiQ2xlYXIgRGF0YSIsIE5vbmUpKQojZW5kaWYgLy8gUVRfQ09ORklHKHRvb2x0aXApCiAgICAgICAgVkFTX0Zvcm0uc2V0UHJvcGVydHkoImZpbGVuYW1lIiwgUUNvcmVBcHBsaWNhdGlvbi50cmFuc2xhdGUoIlZBU19Gb3JtIiwgdSJWQVMiLCBOb25lKSkKICAgICAgICBWQVNfRm9ybS5zZXRQcm9wZXJ0eSgiZm9ybW5hbWUiLCAiIikKICAgICAgICBzZWxmLmxhYmVsQ291bnR5LnNldFRleHQoUUNvcmVBcHBsaWNhdGlvbi50cmFuc2xhdGUoIlZBU19Gb3JtIiwgdSJDb3VudHk6IiwgTm9uZSkpCiNpZiBRVF9DT05GSUcodG9vbHRpcCkKICAgICAgICBzZWxmLmNvbWJvQm94Q291bnR5LnNldFRvb2xUaXAoUUNvcmVBcHBsaWNhdGlvbi50cmFuc2xhdGUoIlZBU19Gb3JtIiwgdSI8aHRtbD48aGVhZC8+PGJvZHk+PHA+UGxlYXNlIFNlbGVjdCBDb3VudHk8L3A+PC9ib2R5PjwvaHRtbD4iLCBOb25lKSkKI2VuZGlmIC8vIFFUX0NPTkZJRyh0b29sdGlwKQojaWYgUVRfQ09ORklHKHN0YXR1c3RpcCkKICAgICAgICBzZWxmLmNvbWJvQm94Q291bnR5LnNldFN0YXR1c1RpcChRQ29yZUFwcGxpY2F0aW9uLnRyYW5zbGF0ZSgiVkFTX0Zvcm0iLCB1IlNlbGVjdCBDb3VudHkiLCBOb25lKSkKI2VuZGlmIC8vIFFUX0NPTkZJRyhzdGF0dXN0aXApCiAgICAgICAgc2VsZi5sYWJlbFJvdXRlLnNldFRleHQoUUNvcmVBcHBsaWNhdGlvbi50cmFuc2xhdGUoIlZBU19Gb3JtIiwgdSJSb3V0ZToiLCBOb25lKSkKI2lmIFFUX0NPTkZJRyh0b29sdGlwKQogICAgICAgIHNlbGYuY29tYm9Cb3hSb3V0ZS5zZXRUb29sVGlwKFFDb3JlQXBwbGljYXRpb24udHJhbnNsYXRlKCJWQVNfRm9ybSIsIHUiPGh0bWw+PGhlYWQvPjxib2R5PjxwPlBsZWFzZSBTZWxlY3QgUm91dGU8L3A+PC9ib2R5PjwvaHRtbD4iLCBOb25lKSkKI2VuZGlmIC8vIFFUX0NPTkZJRyh0b29sdGlwKQojaWYgUVRfQ09ORklHKHN0YXR1c3RpcCkKICAgICAgICBzZWxmLmNvbWJvQm94Um91dGUuc2V0U3RhdHVzVGlwKFFDb3JlQXBwbGljYXRpb24udHJhbnNsYXRlKCJWQVNfRm9ybSIsIHUiU2VsZWN0IFJvdXRlIiwgTm9uZSkpCiNlbmRpZiAvLyBRVF9DT05GSUcoc3RhdHVzdGlwKQogICAgICAgIHNlbGYubGFiZWxEaXJlY3Rpb24uc2V0VGV4dChRQ29yZUFwcGxpY2F0aW9uLnRyYW5zbGF0ZSgiVkFTX0Zvcm0iLCB1IkRpcmVjdGlvbjoiLCBOb25lKSkKI2lmIFFUX0NPTkZJRyh0b29sdGlwKQogICAgICAgIHNlbGYuY29tYm9Cb3hEaXJlY3Rpb24uc2V0VG9vbFRpcChRQ29yZUFwcGxpY2F0aW9uLnRyYW5zbGF0ZSgiVkFTX0Zvcm0iLCB1IlBsZWFzZSBTZWxlY3QgRGlyZWN0aW9uIiwgTm9uZSkpCiNlbmRpZiAvLyBRVF9DT05GSUcodG9vbHRpcCkKI2lmIFFUX0NPTkZJRyhzdGF0dXN0aXApCiAgICAgICAgc2VsZi5jb21ib0JveERpcmVjdGlvbi5zZXRTdGF0dXNUaXAoUUNvcmVBcHBsaWNhdGlvbi50cmFuc2xhdGUoIlZBU19Gb3JtIiwgdSJTZWxlY3QgRGlyZWN0aW9uIiwgTm9uZSkpCiNlbmRpZiAvLyBRVF9DT05GSUcoc3RhdHVzdGlwKQogICAgICAgIHNlbGYuRmlsdGVyQ29sdW1uY2hlY2tCb3guc2V0VGV4dChRQ29yZUFwcGxpY2F0aW9uLnRyYW5zbGF0ZSgiVkFTX0Zvcm0iLCB1IkZpbHRlckNvbHVtbiIsIE5vbmUpKQogICAgICAgIHNlbGYucHVzaEJ1dHRvblJlc2V0LnNldFRleHQoUUNvcmVBcHBsaWNhdGlvbi50cmFuc2xhdGUoIlZBU19Gb3JtIiwgdSJSZXNldCIsIE5vbmUpKQogICAgICAgIHNlbGYucHVzaEJ1dHRvbkVkaXQuc2V0VGV4dChRQ29yZUFwcGxpY2F0aW9uLnRyYW5zbGF0ZSgiVkFTX0Zvcm0iLCB1IkVkaXQiLCBOb25lKSkKICAgICAgICBzZWxmLnB1c2hCdXR0b25FZGl0Mi5zZXRUZXh0KFFDb3JlQXBwbGljYXRpb24udHJhbnNsYXRlKCJWQVNfRm9ybSIsIHUiRWRpdCAyIiwgTm9uZSkpCiAgICAgICAgc2VsZi50YWJXaWRnZXQuc2V0VGFiVGV4dChzZWxmLnRhYldpZGdldC5pbmRleE9mKHNlbGYuVkFTX3RhYiksIFFDb3JlQXBwbGljYXRpb24udHJhbnNsYXRlKCJWQVNfRm9ybSIsIHUiVkFTIiwgTm9uZSkpCiAgICAgICAgc2VsZi50YWJXaWRnZXQuc2V0VGFiVGV4dChzZWxmLnRhYldpZGdldC5pbmRleE9mKHNlbGYuVkFTX0RTX3RhYiksIFFDb3JlQXBwbGljYXRpb24udHJhbnNsYXRlKCJWQVNfRm9ybSIsIHUiRFMiLCBOb25lKSkKICAgICAgICBzZWxmLnRhYldpZGdldC5zZXRUYWJUZXh0KHNlbGYudGFiV2lkZ2V0LmluZGV4T2Yoc2VsZi5WQVNfRERfdGFiKSwgUUNvcmVBcHBsaWNhdGlvbi50cmFuc2xhdGUoIlZBU19Gb3JtIiwgdSJERCIsIE5vbmUpKQogICAgIyByZXRyYW5zbGF0ZVVpCgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuaG9yaXpvbnRhbExheW91dF8yLnNldE9iamVjdE5hbWUodSJob3Jpem9udGFsTGF5b3V0XzIiKQoKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0XzQuYWRkTGF5b3V0KHNlbGYuaG9yaXpvbnRhbExheW91dF8yKQoKPHxmaW1fZW5kfD4="]
["052cc76407458a726969fa0fa03d2a1fa6e881c4-3","052cc76407458a726969fa0fa03d2a1fa6e881c4","PHxmaW1fcHJlZml4fD4KIyBub2luc3BlY3Rpb24gU3BlbGxDaGVja2luZ0luc3BlY3Rpb24KIiIiCkdpdmVuIGEgc3RyaW5nIHMsIGZpbmQgdGhlIGxvbmdlc3QgcGFsaW5kcm9taWMgc3Vic3RyaW5nIGluIHMuCllvdSBtYXkgYXNzdW1lIHRoYXQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHMgaXMgMTAwMC4KCkV4YW1wbGU6CgpJbnB1dDogImJhYmFkIgoKT3V0cHV0OiAiYmFiIgoKTm90ZTogImFiYSIgaXMgYWxzbyBhIHZhbGlkIGFuc3dlci4KCgoKRXhhbXBsZToKCklucHV0OiAiY2JiZCIKCk91dHB1dDogImJiIgoKaHR0cHM6Ly9sZWV0Y29kZS5jb20vcHJvYmxlbXMvbG9uZ2VzdC1wYWxpbmRyb21pYy1zdWJzdHJpbmcvCiIiIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKIyBub2luc3BlY3Rpb24gUHlQZXA4TmFtaW5nLFB5TWV0aG9kTWF5QmVTdGF0aWMKY2xhc3MgU29sdXRpb246Cjx8ZmltX2VuZHw+"]
["bd132283dbb6bceeb9b97f005a2ba33ddf71f6aa-3","bd132283dbb6bceeb9b97f005a2ba33ddf71f6aa","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCiMgSW1wb3J0IHRoZSBDR0kgbW9kdWxlCmltcG9ydCBNeVNRTGRiCmltcG9ydCBjZ2kKaW1wb3J0IGNnaXRiCgpjZ2l0Yi5lbmFibGUoKQoKIyBUZXN0IHdpdGg6IGh0dHA6Ly8xOTIuMTY4LjAuMTAwOjgwMDAvY2dpLWJpbi9BZGRpbmdEYXRhWG1sLnB5P29wZXJhbmRhPTImb3BlcmFuZGI9MyZhbnN3ZXI9NQoKZGVmIGZvcm1hdFhtbChvcGVyYW5kYSwgb3BlcmFuZGIsIGFuc3dlcik6Cgl4bWwgPSAiIiJDb250ZW50LVR5cGU6IHRleHQveG1sXG4KPD94bWwgdmVyc2lvbj0nMS4wJz8+CjxhZGRpdGlvbnM+Cgk8YWRkaXRpb24+CgkJPG9wZXJhbmRhPnswfTwvb3BlcmFuZGE+CgkJPG9wZXJhbmRiPnsxfTwvb3BlcmFuZGI+CgkJPGFuc3dlcj57Mn08L2Fuc3dlcj4KCTwvYWRkaXRpb24+CjwvYWRkaXRpb25zPiIiIi5mb3JtYXQob3BlcmFuZGEsIG9wZXJhbmRiLCBhbnN3ZXIpCglyZXR1cm4geG1sCgojIERlZmluZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBIVE1MIGZvcm0uCmRlZiBnZW5lcmF0ZV9mb3JtKG9wZXJhbmRhLCBvcGVyYW5kYiwgYW5zd2VyKToKCWZvcm1hdFhtbChvcGVyYW5kYSwgb3BlcmFuZGIsIGFuc3dlcikKCXNxbFN0cmluZyA9ICJpbnNlcnQgaW50byBhZGRpdGlvbnMgKG9wZXJhbmRhLCBvcGVyYW5kYiwgYW5zd2VyKSB2YWx1ZXMgKHswfSwgezF9LCB7Mn0pOyIKCXNxbCA9IHNxbFN0cmluZy5mb3JtYXQob3BlcmFuZGEsIG9wZXJhbmRiLCBhbnN3ZXIpCglpbnNlcnREYXRhKHNxbCkJCglwcmludCBmb3JtYXRYbWwob3BlcmFuZGEsIG9wZXJhbmRiLCBhbnN3ZXIpCgpkZWYgaW5zZXJ0RGF0YShzcWwpOgoJZGIgPSBNeVNRTGRiLmNvbm5lY3QoaG9zdD0ibG9jYWxob3N0IiwgdXNlcj0iY2hhcmxpZSIsIHBhc3N3ZD0iYmFyIiwgZGI9ImNoYXJsaWUiKQoJY3Vyc29yID0gZGIuY3Vyc29yKCkKCWN1cnNvci5leGVjdXRlKHNxbCkKCWRiLmNvbW1pdCgpCQoJY3Vyc29yLmNsb3NlKCkKCWRiLmNsb3NlKCkKCmRlZiBydW5BY3Rpb24oKToKCWZvcm0gPSBjZ2kuRmllbGRTdG9yYWdlKCkKCWlmIChmb3JtLmhhc19rZXkoImFuc3dlciIpIGFuZCBmb3JtLmhhc19rZXkoIm9wZXJhbmRhIikgYW5kIGZvcm0uaGFzX2tleSgib3BlcmFuZGIiKSk6CgkJZ2VuZXJhdGVfZm9ybShmb3JtWyJvcGVyYW5kYSJdLnZhbHVlLCBmb3JtWyJvcGVyYW5kYiJdLnZhbHVlLCBmb3JtWyJhbnN3ZXIiXS52YWx1ZSkJCgllbHNlOgoJCXByaW50IGZvcm1hdFhtbCgiRXJyb3IiLCAicGFyYW1zIHdlIGdvdDogIiArIHN0cihmb3JtLmxpc3QpLnN0cmlwKCdbXScpLCAKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoJCQkiTGlzdCBMZW5ndGg6ICIgKyBzdHIoZm9ybS5fX2xlbl9fKCkpKTsKCjx8ZmltX2VuZHw+"]
["c871b100e31890cbb45b14ab23658cbd20eb87a6-2","c871b100e31890cbb45b14ab23658cbd20eb87a6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcsIHNpZ25hbCwgc3lzLCBqc29uCmZyb20gUHlRdDUuUXRXaWRnZXRzIGltcG9ydCBRTWFpbldpbmRvdywgUUFwcGxpY2F0aW9uLCBRQWN0aW9uLCBRTGFiZWwKZnJvbSBQeVF0NS5RdENvcmUgaW1wb3J0IFF0Cgpmcm9tIHRhbmR5YmVyZy5jb250cm9sbGVyIGltcG9ydCBDb250cm9sbGVyCmZyb20gdGFuZHliZXJnLnRhbmR5bGF5b3V0IGltcG9ydCBVaV9NYWluV2luZG93Cgpsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuREVCVUcpCgpjbGFzcyBBcHAoUU1haW5XaW5kb3cpOgogICAgIiIiTWFpbiBhcHBsaWNhdGlvbiBjbGFzcywgaXMgYSBRdCBhcHAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKCiAgICAgICAgIyBMb2FkIHVwIHRoZSBtYWluIHdpbmRvdyBsYXlvdXQsIHdoaWNoIGlzIGF1dG9nZW5lcmF0ZWQgZnJvbSBRdCBEZXNpZ25lciB0aGVuIHB5dWljNQogICAgICAgIHNlbGYubGF5b3V0ID0gVWlfTWFpbldpbmRvdygpCiAgICAgICAgc2VsZi5sYXlvdXQuc2V0dXBVaShzZWxmKQoKICAgICAgICBzZWxmLnN0YXR1c0xhYmVsID0gUUxhYmVsKCkKICAgICAgICBzZWxmLmxheW91dC5zdGF0dXNiYXIuYWRkV2lkZ2V0KHNlbGYuc3RhdHVzTGFiZWwpCgogICAgICAgICMgSW5pdGlhbCBjb25maWcgY2hlY2sgLSBsb2FkIGl0IGlmIGl0IHdvcmtzCiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLmxvYWRDb25maWcoKQogICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKICAgICAgICAgICAgc2VsZi5jb25maWcgPSB7fQogICAgICAgICAgICBzZWxmLmNvbmZpZ1sncHJlc2V0cyddID0ge30KCiAgICAgICAgIyBDb25uZWN0IHRvIGNhbWVyYSBpZiB3ZSBjYW4KICAgICAgICBzZWxmLmNvbnRyb2xsZXIgPSBDb250cm9sbGVyKCkKICAgICAgICBpZiAnaW50ZXJmYWNlJyBpbiBzZWxmLmNvbmZpZzoKICAgICAgICAgICAgc2VsZi5jb250cm9sbGVyLmNvbm5lY3Qoc2VsZi5jb25maWdbJ2ludGVyZmFjZSddKQogICAgICAgIGlmIHNlbGYuY29udHJvbGxlci5pbnRlcmZhY2UgIT0gTm9uZToKICAgICAgICAgICAgc2VsZi5zdGF0dXNMYWJlbC5zZXRUZXh0KGYiQ29ubmVjdGVkIG9uIHtzZWxmLmNvbnRyb2xsZXIuaW50ZXJmYWNlfSIpCiAgICAgICAgICAgIHNlbGYuY29uZmlnWydpbnRlcmZhY2UnXSA9IHNlbGYuY29udHJvbGxlci5pbnRlcmZhY2UKICAgICAgICAgICAgc2VsZi5zYXZlQ29uZmlnKCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLnN0YXR1c0xhYmVsLnNldFRleHQoIk5vdCBjb25uZWN0ZWQgdG8gY2FtZXJhIikKCiAgICAgICAgIyBFbnVtZXJhdGUgc2VyaWFsIGRldmljZXMKICAgICAgICBzZWxmLmxheW91dC5tZW51UG9ydC5hYm91dFRvU2hvdy5jb25uZWN0KHNlbGYuc2V0dXBDb25uZWN0TWVudSkKCiAgICAgICAgIyBIb29rIHVwIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIHdpbmRvdy4gVGhpcyBpcyB2ZXJ5IHZlcmJvc2UgYW5kIGEgZnV0dXJlIGltcHJvdmVtZW50CiAgICAgICAgIyBtaWdodCBiZSB0byBnZXQgUXQgRGVzaWduZXIgdG8gZ2VuZXJhdGUgdGhpcyBzdHVmZiAoSSAqdGhpbmsqIHRoYXQncyBwb3NzaWJsZSkKICAgICAgICAjIFpPT00KICAgICAgICBzZWxmLmxheW91dC50ZWxlYnV0dG9uLnByZXNzZWQuY29ubmVjdChzZWxmLmNvbnRyb2xsZXIuZ2V0Wm9vbUZ1bmMoJ2luJykpCiAgICAgICAgc2VsZi5sYXlvdXQudGVsZWJ1dHRvbi5yZWxlYXNlZC5jb25uZWN0KHNlbGYuY29udHJvbGxlci5zdG9wWm9vbSkKICAgICAgICBzZWxmLmxheW91dC53aWRlYnV0dG9uLnByZXNzZWQuY29ubmVjdChzZWxmLmNvbnRyb2xsZXIuZ2V0Wm9vbUZ1bmMoJ291dCcpKQogICAgICAgIHNlbGYubGF5b3V0LndpZGVidXR0b24ucmVsZWFzZWQuY29ubmVjdChzZWxmLmNvbnRyb2xsZXIuc3RvcFpvb20pCiAgICAgICAgIyBTTEVXCiAgICAgICAgc2VsZi5sYXlvdXQubGVmdGJ1dHRvbi5wcmVzc2VkLmNvbm5lY3Qoc2VsZi5jb250cm9sbGVyLmdldFN0ZWVyRnVuYygnbGVmdCcpKQogICAgICAgIHNlbGYubGF5b3V0LmxlZnRidXR0b24ucmVsZWFzZWQuY29ubmVjdChzZWxmLmNvbnRyb2xsZXIuc3RvcFN0ZWVyKQogICAgICAgIHNlbGYubGF5b3V0LnJpZ2h0YnV0dG9uLnByZXNzZWQuY29ubmVjdChzZWxmLmNvbnRyb2xsZXIuZ2V0U3RlZXJGdW5jKCdyaWdodCcpKQogICAgICAgIHNlbGYubGF5b3V0LnJpZ2h0YnV0dG9uLnJlbGVhc2VkLmNvbm5lY3Qoc2VsZi5jb250cm9sbGVyLnN0b3BTdGVlcikKICAgICAgICBzZWxmLmxheW91dC51cGJ1dHRvbi5wcmVzc2VkLmNvbm5lY3Qoc2VsZi5jb250cm9sbGVyLmdldFN0ZWVyRnVuYygndXAnKSkKICAgICAgICBzZWxmLmxheW91dC51cGJ1dHRvbi5yZWxlYXNlZC5jb25uZWN0KHNlbGYuY29udHJvbGxlci5zdG9wU3RlZXIpCiAgICAgICAgc2VsZi5sYXlvdXQuZG93bmJ1dHRvbi5wcmVzc2VkLmNvbm5lY3Qoc2VsZi5jb250cm9sbGVyLmdldFN0ZWVyRnVuYygnZG93bicpKQogICAgICAgIHNlbGYubGF5b3V0LmRvd25idXR0b24ucmVsZWFzZWQuY29ubmVjdChzZWxmLmNvbnRyb2xsZXIuc3RvcFN0ZWVyKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIyBSRUNBTEwgUFJFU0VUUwogICAgICAgIHNlbGYubGF5b3V0LnByZXNldDEucHJlc3NlZC5jb25uZWN0KHNlbGYucmVjYWxsUHJlc2V0KCcxJykpCiAgICAgICAgc2VsZi5sYXlvdXQucHJlc2V0Mi5wcmVzc2VkLmNvbm5lY3Qoc2VsZi5yZWNhbGxQcmVzZXQoJzInKSkKICAgICAgICBzZWxmLmxheW91dC5wcmVzZXQzLnByZXNzZWQuY29ubmVjdChzZWxmLnJlY2FsbFByZXNldCgnMycpKQo8fGZpbV9lbmR8Pg=="]
["b5d4b74693e4427fdb11247858f77e86d7f0412f-1","b5d4b74693e4427fdb11247858f77e86d7f0412f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwpmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwoKdGVzdF9pbnB1dF8xID0gIiIiNQo3SUs5WW8waAo5Tm9CVWFqUQpDZTh2d1BtRQpTVlFYUUNiYwp0U3pFNXQwcAo5Tm9CVWFqUQpDZTh2d1BtRQpTVlFYUUNiYwpFTkQKIiIiCgp0ZXN0X2lucHV0XzIgPSAiIiI2Cm04cmZRQnZsCmZjMW9aQ0UwClVnZmZSa09uCjd1Z1g3Ym0wCjlDUUJHVWVKCjJGUVpUM3VDCjJGUVpUM3VDCjlDUUJHVWVKCmZjMW9aQ0UwCkVORAoiIiIKCiMgc3lzLnN0ZGluID0gU3RyaW5nSU8odGVzdF9pbnB1dF8xKQoKbiA9IGludChpbnB1dCgpKQoKZ3Vlc3RfbGlzdCA9IHtpbnB1dCgpIGZvciBfIGluIHJhbmdlKG4pfQoKd2hpbGUgVHJ1ZToKICAgIGNvbW1hbmQgPSBpbnB1dCgpCgogICAgaWYgY29tbWFuZCA9PSAnRU5EJzoKICAgICAgICBicmVhawoKICAgIGd1ZXN0X2xpc3QucmVtb3ZlKGNvbW1hbmQpCgoKZGVmIGlzX3ZpcChndWVzdCk6CiAgICByZXR1cm4gZ3Vlc3RbMF0uaXNkaWdpdCgpCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgp2aXBfZ3Vlc3RzID0gc29ydGVkKFtnIGZvciBnIGluIGd1ZXN0X2xpc3QgaWYgaXNfdmlwKGcpXSkKCnJlZ3VsYXJfZ3Vlc3QgPSBzb3J0ZWQoW2cgZm9yIGcgaW4gZ3Vlc3RfbGlzdCBpZiBub3QgaXNfdmlwKGcpXSkKCjx8ZmltX2VuZHw+"]
["a5b59a6077cde9878d336ba2f4b0fa536e00b706-1","a5b59a6077cde9878d336ba2f4b0fa536e00b706","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMS43IG9uIDIwMTktMDMtMjcgMTA6MjcKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMKCgo8fGZpbV9lbmR8Pg=="]
["9b0c7e91c813e14804e0fde3a00835c4d06c5909-3","9b0c7e91c813e14804e0fde3a00835c4d06c5909","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwoKIyBDcmVhdGUgeW91ciBtb2RlbHMgaGVyZS4KCgpjbGFzcyBJbmR1c3RyeShtb2RlbHMuTW9kZWwpOgogICAgQ09MT1JTID0gKAogICAgICAgICgiYmx1ZSIsICJibHVlIiksCiAgICAgICAgKCJncmVlbiIsICJncmVlbiIpLAogICAgICAgICgicHVycGxlIiwgInB1cnBsZSIpLAogICAgICAgICgib3JhbmdlIiwgIm9yYW5nZSIpLAogICAgICAgICgieWVsbG93IiwgInllbGxvdyIpLAogICAgICAgICgicmVkIiwgInJlZCIpLAogICAgICAgICgiYnJvd24iLCAiYnJvd24iKSwKICAgICAgICAoInBpbmsiLCAicGluayIpLAogICAgICAgICgiZ3JheSIsICJncmF5IiksCiAgICApICAjIHRlbXAgaGFjayB0byBjb2xvciB0YWdzCgogICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yMCkKICAgIGNvbG9yID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwLCBjaG9pY2VzPUNPTE9SUykKCiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5uYW1lCiAgICAKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgb3JkZXJpbmcgPSAoJ25hbWUnLCkKCgpjbGFzcyBDb21wYW55KG1vZGVscy5Nb2RlbCk6CiAgICBTSVpFUyA9ICgoIkwiLCAiTGFyZ2UiKSwgKCJNIiwgIk1lZGl1bSIpLCAoIlMiLCAiU21hbGwiKSwgKCJVIiwgIlVua25vd24iKSkKCiAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZCgKICAgICAgICBtYXhfbGVuZ3RoPTE0MCwgaGVscF90ZXh0PSdlbnRlciBhIGNvbXBhbnkgbmFtZSAoZS5nLiAiQW1hem9uIiknCiAgICApCiAgICBpbmR1c3RyaWVzID0gbW9kZWxzLk1hbnlUb01hbnlGaWVsZChJbmR1c3RyeSwgYmxhbms9VHJ1ZSkKICAgIGxvY2F0aW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTE0MCwgYmxhbms9VHJ1ZSkKICAgIHNpemUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MSwgY2hvaWNlcz1TSVpFUykKICAgIG5vdGVzID0gbW9kZWxzLlRleHRGaWVsZChibGFuaz1UcnVlKQogICAgdXBkYXRlZCA9IG1vZGVscy5EYXRlRmllbGQoYXV0b19ub3c9VHJ1ZSkKCiAgICAjIEEgc3BlY2lhbCBib29sIGZvciBlbWFpbHMKICAgICMgaWYgdHJ1ZSwgdGhpcyBjb21wYW55IHdvbid0IGdldCBzZWxlY3RlZCBieSB0aGUgYmxhc3QgZW1haWwgc2VsZWN0aW9ucwogICAgIyB5b3UgY2FuIHN0aWxsIGVtYWlsIHRoZW0gYnkgc2VsZWN0aW5nIHRoZW0gbWFudWFsbHkKICAgIGVtYWlsX2V4Y2x1ZGUgPSBtb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UsIGJsYW5rPVRydWUpCgogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYubmFtZQoKICAgIGNsYXNzIE1ldGE6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBvcmRlcmluZyA9ICgnbmFtZScsKQo8fGZpbV9lbmR8Pg=="]
["bd18eb430cd155b05d75477e63362542d2ef27cf-3","bd18eb430cd155b05d75477e63362542d2ef27cf","PHxmaW1fcHJlZml4fD4KZnJvbSBnbG9iIGltcG9ydCBnbG9iCgppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBwbG90bHkuZ3JhcGhfb2JqZWN0cyBhcyBnbwoKCmRlZiBnZXRfY3VycmVuY3lfZmlsZV9wYXRocyhmaWxlX2RpcnM9ImRhdGEvKiovKi5jc3YiKToKICAgICIiIkdldCBhbGwgY3VycmVuY3kgZmlsZXMuIERvd25sb2FkZWQgYW5kIHVuemlwcGVkIGRhdGEgZHVtcHMgZnJvbSBwb2UubmluamEuCiAgICA6cGFyYW0gc3RyaW5nOiBmaWxlX2RpcnM6CiAgICAgICAgVGhlIGRpcmVjdG9yeSB0byBzZWFyY2ggZm9yIGZpbGVzIGluLiBEZWZhdWx0cyB0byB0aGUgZGF0YSBkdW1wIGRpcmVjdG9yeS4KICAgICAgICBEZWZhdWx0cyB0byBjc3YgZmlsZXMuIElmIGFub3RoZXIgZmlsZSB0eXBlIGlzIHJlcXVpcmVkIGl0IHNob3VsZCBiZQo8fGZpbV9ob2xlfD4KICAgIDpyZXR1cm5zIGxpc3Q6CiAgICAgICAgVGhlIGRpcmVjdG9yeSBhbmQgZmlsZSBuYW1lIG9mIGVhY2ggZmlsZSBjb250YWluaW5nIHRoZSB3b3JkICJjdXJyZW5jeSIuCiAgICAiIiIKICAgIGNzdl9maWxlcyA9IFtjc3ZfZmlsZSBmb3IgY3N2X2ZpbGUgaW4gZ2xvYihmaWxlX2RpcnMsIHJlY3Vyc2l2ZT1UcnVlKV0KICAgIHJldHVybiBbY3VycmVuY3lfZmlsZSBmb3IgY3VycmVuY3lfZmlsZSBpbiBjc3ZfZmlsZXMgaWYgImN1cnJlbmN5IiBpbiBjdXJyZW5jeV9maWxlXQoKCmRlZiBleHRyYWN0X2RmKGZpbGVfcGF0aCk6CiAgICAiIiJFeHRyYWN0cyBhIGRhdGFmcmFtZSBmcm9tIGEgY3N2IGZpbGUgcGF0aC4KCiAgICA6cGFyYW0gc3RyaW5nOiBmaWxlX3BhdGgKICAgICAgICBUaGUgcGF0aCBvZiBhIGNzdiBmaWxlLgoKICAgIDpyZXR1cm5zIHBkLkRhdGFGcmFtZToKICAgICAgICBUaGUgcHJvY2Vzc2VkIGFuZCBleHRyYWN0ZWQgZGF0YWZyYW1lIGZvciB0aGUgZ2l2ZW4gcG9lIGNzdiBkYXRhLgogICAgIiIiCiAgICBkZiA9IHBkLnJlYWRfY3N2KAogICAgICAgIGZpbGVfcGF0aCwKICAgICAgICBzZXA9IjsiLAogICAgICAgIHBhcnNlX2RhdGVzPVsiRGF0ZSJdLAogICAgKQogICAgZGYuY29sdW1ucyA9IGRmLmNvbHVtbnMuc3RyLmxvd2VyKCkKICAgIGRmID0gZGYucmVuYW1lKGNvbHVtbnM9eyJnZXQiOiAiY3VycmVuY3kifSkKICAgIGRmID0gZGZbZGZbInBheSJdID09ICJDaGFvcyBPcmIiXQogICAgZGYgPSBkZltbImxlYWd1ZSIsICJkYXRlIiwgImN1cnJlbmN5IiwgInZhbHVlIl1dCiAgICByZXR1cm4gZGYKCgpkZWYgZ2V0X2RhdGEoZmlsZV9wYXRocyk6CiAgICAiIiJFeHRyYWN0cyBhbmQgam9pbnMgYWxsIHRoZSBsZWFndWVzIGZyb20gdGhlIGdpdmVuIGxpc3Qgb2YgY3N2cy4KCiAgICA6cGFyYW0gbGlzdDogZmlsZV9wYXRocwogICAgICAgIFRoZSBsaXN0IG9mIHRoZSBmaWxlIHBhdGhzIHRvIGRhdGEgY3N2cy4KCiAgICA6cmV0dXJucyBwZC5EYXRhRnJhbWU6CiAgICAgICAgVGhlIGRhdGFmcmFtZSBmb3IgYWxsIHRoZSBnaXZlbiBmaWxlcy4KICAgICIiIgogICAgZGZfbGlzdCA9IFtleHRyYWN0X2RmKGZpbGUpIGZvciBmaWxlIGluIGZpbGVfcGF0aHNdCiAgICBkZiA9IHBkLmNvbmNhdChkZl9saXN0KQogICAgZGYgPSBkZi5zZXRfaW5kZXgoImRhdGUiKQogICAgZGYgPSBkZi5zb3J0X2luZGV4KCkKICAgIHJldHVybiBkZgoKCmRlZiBwbG90X2N1cnJlbmN5KGRmKToKICAgICIiIlBsb3QgY3VycmVuY3kgYnkgZGF0ZS4KCiAgICA6cGFyYW0gcGQuRGF0YUZyYW1lOiBkZgogICAgICAgIFRoZSBEYXRhRnJhbWUgb2YgZWFjaCBjdXJyZW5jeSBhbmQgZGF0ZS4KICAgICIiIgoKICAgIGZpZyA9IGdvLkZpZ3VyZSgpCiAgICBjdXJyZW5jeV9saXN0ID0gc29ydGVkKGxpc3QoZGZbImN1cnJlbmN5Il0udW5pcXVlKCkpKQogICAgZmlnLmFkZF90cmFjZXMoCiAgICAgICAgZ28uU2NhdHRlcigKICAgICAgICAgICAgeD1kZltkZlsiY3VycmVuY3kiXSA9PSBjdXJyZW5jeV9saXN0WzBdXVsidmFsdWUiXS5pbmRleC52YWx1ZXMsCiAgICAgICAgICAgIHk9ZGZbZGZbImN1cnJlbmN5Il0gPT0gY3VycmVuY3lfbGlzdFswXV1bInZhbHVlIl0udmFsdWVzLAogICAgICAgICAgICBuYW1lPWN1cnJlbmN5X2xpc3RbMF0sCiAgICAgICAgKQogICAgKQogICAgdXBkYXRlbWVudXMgPSBbCiAgICAgICAgewogICAgICAgICAgICAiYnV0dG9ucyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibWV0aG9kIjogInJlc3R5bGUiLAogICAgICAgICAgICAgICAgICAgICJsYWJlbCI6IGN1cnJlbmN5LAogICAgICAgICAgICAgICAgICAgICJhcmdzIjogWwogICAgICAgICAgICAgICAgICAgICAgICB7InkiOiBbZGZbZGZbImN1cnJlbmN5Il0gPT0gY3VycmVuY3ldWyJ2YWx1ZSJdLnZhbHVlc119LAogICAgICAgICAgICAgICAgICAgICAgICB7IngiOiBbZGZbZGZbImN1cnJlbmN5Il0gPT0gY3VycmVuY3ldWyJ2YWx1ZSJdLmluZGV4LnZhbHVlc119LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgY3VycmVuY3kgaW4gY3VycmVuY3lfbGlzdAogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGlyZWN0aW9uIjogImRvd24iLAogICAgICAgICAgICAic2hvd2FjdGl2ZSI6IFRydWUsCiAgICAgICAgICAgICJ4YW5jaG9yIjogImNlbnRlciIsCiAgICAgICAgICAgICJ5YW5jaG9yIjogImJvdHRvbSIsCiAgICAgICAgICAgICJ4IjogMC41LAogICAgICAgICAgICAieSI6IDEuMSwKICAgICAgICB9LAogICAgXQogICAgZmlnLnVwZGF0ZV9sYXlvdXQoCiAgICAgICAgdXBkYXRlbWVudXM9dXBkYXRlbWVudXMsCiAgICAgICAgeGF4aXNfdGl0bGU9IkRhdGUiLAogICAgICAgIHlheGlzX3RpdGxlPSJDaGFvcyBPcmIiLAogICAgKQogICAgcmV0dXJuIGZpZwo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNwZWNpZmllZCB3aXRoICouZmlsZXR5cGUuCgo8fGZpbV9lbmR8Pg=="]
["9e8bfc120440524e00788603c6e4936f825e7630-1","9e8bfc120440524e00788603c6e4936f825e7630","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKZnJvbSBkamFuZ28udXRpbHMudHJhbnNsYXRpb24gaW1wb3J0IGdldHRleHRfbGF6eSBhcyBfCmZyb20gc2F0Y2htby5zaG9wLmV4Y2VwdGlvbnMgaW1wb3J0IE91dE9mU3RvY2tFcnJvcgppbXBvcnQgbG9nZ2luZwoKbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3Nob3AubGlzdGVuZXJzJykKCmRlZiB2ZXRvX291dF9vZl9zdG9jayhzZW5kZXIsIGNhcnRpdGVtPU5vbmUsIGFkZGVkX3F1YW50aXR5PTAsICoqa3dhcmdzKToKICAgICIiIkxpc3RlbmVyIHdoaWNoIHZldG9lcyBhZGRpbmcgcHJvZHVjdHMgdG8gdGhlIGNhcnQgd2hpY2ggYXJlIG91dCBvZiBzdG9jay4iIiIKICAgIAogICAgZnJvbSBzYXRjaG1vLnNob3AubW9kZWxzIGltcG9ydCBDb25maWcKICAgIGNvbmZpZz1Db25maWcub2JqZWN0cy5nZXRfY3VycmVudCgpCgogICAgaWYgY29uZmlnLm5vX3N0b2NrX2NoZWNrb3V0ID09IEZhbHNlOgogICAgICAgIHByb2R1Y3QgPSBjYXJ0aXRlbS5wcm9kdWN0CiAgICAgICAgbmVlZF9xdHkgPSBjYXJ0aXRlbS5xdWFudGl0eSArIGFkZGVkX3F1YW50aXR5Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBpZiBwcm9kdWN0Lml0ZW1zX2luX3N0b2NrIDwgbmVlZF9xdHk6CiAgICAgICAgICAgIGxvZy5kZWJ1Zygnb3V0IG9mIHN0b2NrIG9uICVzJywgcHJvZHVjdC5zbHVnKQogICAgICAgICAgICByYWlzZSBPdXRPZlN0b2NrRXJyb3IocHJvZHVjdCwgcHJvZHVjdC5pdGVtc19pbl9zdG9jaywgbmVlZF9xdHkpCgo8fGZpbV9lbmR8Pg=="]
["85ea299630051d24e30f5c0367d70d4f87924fd2-2","85ea299630051d24e30f5c0367d70d4f87924fd2","PHxmaW1fcHJlZml4fD4KIyBkaXN0cmlidXRlZCB0cmFpbmluZyBvbiBtdWx0aSBub2RlcwoKaW1wb3J0IG9zCmltcG9ydCB0aW1lCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgZGF0ZXRpbWUKCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KZnJvbSB0b3JjaCBpbXBvcnQgb3B0aW0KaW1wb3J0IHRvcmNoLmRpc3RyaWJ1dGVkIGFzIGRpc3QKaW1wb3J0IHRvcmNoLm11bHRpcHJvY2Vzc2luZyBhcyBtcApmcm9tIHRvcmNoLnV0aWxzLmRhdGEgaW1wb3J0IERhdGFMb2FkZXIKaW1wb3J0IHRvcmNoLmJhY2tlbmRzLmN1ZG5uIGFzIGN1ZG5uCgppbXBvcnQgdG9yY2h2aXNpb24KaW1wb3J0IHRvcmNodmlzaW9uLnRyYW5zZm9ybXMgYXMgdHJhbnNmb3Jtcwpmcm9tIHRlbnNvcmJvYXJkX2xvZ2dlciBpbXBvcnQgY29uZmlndXJlLCBsb2dfdmFsdWUKCmZyb20gbW9kZWwgaW1wb3J0IERlbnNlTmV0MTIxCmZyb20gdXRpbHMgaW1wb3J0IEF2ZXJhZ2VNZXRlciwgYWNjdXJhY3ksIGFkanVzdF9sciwgc2F2ZV9jaGVja3BvaW50CgoKCmRlZiBwYXJzZV9hcmdzKCk6CiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nQXJndW1lbnQgY29uZmlndXJhdGlvbnMgZm9yIHRyYWluaW5nIERlbnNlTmV0MTIxIGZyb20gc2NyYXRjaC4nKQoKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZXBvY2hzJywgdHlwZT1pbnQsIGRlZmF1bHQ9OTAsIGhlbHA9J3RyYWluaW5nIGVwb2NocyBvdmVyIGEgd2hvbGUgZGF0YXNldCcpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJhdGNoX3NpemUnLCB0eXBlPWludCwgZGVmYXVsdD00OCwgaGVscD0nYmF0Y2ggc2l6ZSBwZXIgZ3B1IGR1cmluZyB0cmFpbmluZycpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW51bV93b3JrZXJzJywgdHlwZT1pbnQsIGRlZmF1bHQ9MTgsIGhlbHA9J251bWJlciBvZiBzdWJwcm9jZXNzZXMgdG8gdXNlIGZvciBkYXRhIGxvYWRpbmcnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1scicsIHR5cGU9ZmxvYXQsIGRlZmF1bHQ9MTBlLTEsIGhlbHA9J2luaXRpYWwgbGVhcm5pbmcgcmF0ZSBvZiB0aGUgb3B0aW1pemVyJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbW9tZW50dW0nLCB0eXBlPWZsb2F0LCBkZWZhdWx0PTAuOSwgaGVscD0nbW9tZW50dW0gb2YgdGhlIG9wdGltaXplcicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXdlaWdodF9kZWNheScsIHR5cGU9ZmxvYXQsIGRlZmF1bHQ9MWUtNCwgaGVscD0nd2VpZ2h0IGRlY2F5IGZvciBsZWFybmluZyByYXRlIG9mIHRoZSBvcHRpbWl6ZXInKQoKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc2VlZCcsIHR5cGU9aW50LCBkZWZhdWx0PTAsIGhlbHA9J3NlZWQgZm9yIGluaXRpYWxpemUgbW9kZWxzIHdpdGggc2FtZSB3ZWlnaHRzIG9uIGRpZmZlcmVudCBHUFVzJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbXVsdGlwcm9jZXNzX2Rpc3RyaWJ1dGVkJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0ndXNlIG11bHRpcHJvY2VzcyB0bycgIAogICAgICAgICAgICAgICAgICAgICAgICAnbGF1bmNoIE4gcHJvY2Vzc2VzIHBlciBub2RlLCB3aGljaCBoYXMgTiBHUFVzJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZGlzdF9iYWNrZW5kJywgdHlwZT1zdHIsIGRlZmF1bHQ9J25jY2wnLCBoZWxwPSdkaXN0cmlidXRlZCBiYWNrZW5kJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZGlzdF91cmwnLCB0eXBlPXN0ciwgZGVmYXVsdD0nZW52Oi8vJywgaGVscD0ndXJsIHVzZWQgdG8gc2V0IHVwIGRpc3RyaWJ1dGVkIHRyYWluaW5nJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbm9kZXMnLCB0eXBlPWludCwgZGVmYXVsdD0xLCBoZWxwPSd0b3RhbCBub2RlcyBmb3IgZGlzdHJpYnV0ZWQgcHJvY2Vzc2VzJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbm9kZV9yYW5rJywgdHlwZT1pbnQsIGRlZmF1bHQ9MCwgaGVscD0nbm9kZSByYW5rIGR1cmluZyBkaXN0cmlidXRlZCB0cmFpbmluZycpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWdwdXMnLCB0eXBlPWludCwgZGVmYXVsdD0xLCBoZWxwPSdudW1iZXIgb2YgZ3B1cyBwZXIgbm9kZScpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXdvcmxkX3NpemUnLCB0eXBlPWludCwgZGVmYXVsdD0tMSwgaGVscD0ndG90YWwgcHJvY2Vzc2VzIGZvciBkaXN0cmlidXRlZCBwcm9jZXNzZXMnKQoKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbWFzdGVyX2FkZHInLCB0eXBlPXN0ciwgZGVmYXVsdD0nMjAyLjExMi4xMTMuMjQxJywgaGVscD0nbWFzdGVyIGhvc3QgaXAnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1tYXN0ZXJfcG9ydCcsIHR5cGU9c3RyLCBkZWZhdWx0PScyMzQ1NicsIGhlbHA9J21hc3RlciBob3N0IHBvcnQnKQoKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcHJpbnRfZnJlcScsIHR5cGU9aW50LCBkZWZhdWx0PTEwMCwgaGVscD0nZXZhbHVhdGlvbiBmcmVxdWVuY3kgZHVyaW5nIHRyYWluaW5nJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdGVuc29yYm9hcmQnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdsb2cgcHJvZ3Jlc3MgdXNpbmcgVGVuc29yQm9hcmQgICcpCgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1kYXRhc2V0X3Jvb3QnLCB0eXBlPXN0ciwgZGVmYXVsdD0nL21udC9zZGIvcHVibGljL2RhdGEvaW1hZ2VuZXQnLCBoZWxwPSdyb290IHBhdGggb2YgdGhlIHRyYWluaW5nIGRhdGFzZXQnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1pbWFnZV9oZWlnaHQnLCB0eXBlPWludCwgZGVmYXVsdD00NDgsIGhlbHA9J3RoZSBoZWlnaHQgb2YgaW1hZ2Ugc2l6ZSBpbnB1dCB0byBZT0xPdjInKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1pbWFnZV93aWR0aCcsIHR5cGU9aW50LCBkZWZhdWx0PTQ0OCwgaGVscD0ndGhlIHdpZHRoIG9mIGltYWdlIHNpemUgaW5wdXQgdG8gWU9MT3YyJykKCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWdyb3d0aF9yYXRlJywgdHlwZT1pbnQsIGRlZmF1bHQ9MzIsIGhlbHA9J2dyb3d0aCByYXRlIGluIEJvdHRsZW5lY2sgbGF5ZXIgb2YgRGVuc2VOZXQnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1jb21wcmVzc2lvbl9yYXRlJywgdHlwZT1mbG9hdCwgZGVmYXVsdD0wLjUsIGhlbHA9J2NvbXByZXNzaW9uIHJhdGUgaW4gVHJhbnNpdGlvbiBsYXllciBvZiBEZW5zZU5ldCcpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW51bV9jbGFzc2VzJywgdHlwZT1pbnQsIGRlZmF1bHQ9MTAwMCwgaGVscD0nbnVtYmVyIG9mIG9iamVjdCBjYXRlZ29yaWVzIGluIHRoZSB0cmFpbmluZyBkYXRhc2V0JykKCiAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogICAgcmV0dXJuIGFyZ3MKCgpkZWYgbWFpbihhcmdzKToKICAgIAogICAgaWYgbm90IHRvcmNoLmN1ZGEuaXNfYXZhaWxhYmxlKCk6CiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUcmFpbmluZyBEZW5zZU5ldCBvbiBJbWFnZU5ldCBzaG91bGQgdXNlIEdQVSBkZXZpY2VzLCBidXQgQ1VEQSBpcyB1bmF2YWlsYWJsZSEnKQogICAgbmdwdXNfcGVyX25vZGUgPSB0b3JjaC5jdWRhLmRldmljZV9jb3VudCgpCiAgICBhcmdzLmdwdXMgPSBuZ3B1c19wZXJfbm9kZQoKICAgIHRvcmNoLmN1ZGEubWFudWFsX3NlZWRfYWxsKGFyZ3Muc2VlZCkKCiAgICBpZiBhcmdzLnRlbnNvcmJvYXJkOgogICAgICAgICMgbW9kZWxfbmFtZS1CQy1sYXllcnMtZ3Jvd3RoX3JhdGUKICAgICAgICBjb25maWd1cmUoJ3J1bnMvRGVuc2VOZXQtQkMtMTIxLTMyJykKCiAgICBpZiBhcmdzLm11bHRpcHJvY2Vzc19kaXN0cmlidXRlZDoKCiAgICAgICAgYXJncy53b3JsZF9zaXplID0gYXJncy5ncHVzICogYXJncy5ub2RlcwoKICAgICAgICBvcy5lbnZpcm9uWydNQVNURVJfQUREUiddID0gYXJncy5tYXN0ZXJfYWRkcgogICAgICAgIG9zLmVudmlyb25bJ01BU1RFUl9QT1JUJ10gPSBhcmdzLm1hc3Rlcl9wb3J0CgogICAgICAgICIiInNwYXduICducHJvY3MnIHByb2Nlc3NlcyB0aGF0IHJ1biAnbWFpbl93b3JrZXInIHdpdGggJ2FyZ3MnCiAgICAgICAgIiIiCiAgICAgICAgbXAuc3Bhd24obWFpbl93b3JrZXIsIG5wcm9jcz1hcmdzLmdwdXMsIGFyZ3M9KGFyZ3MsKSkKCgpiZXN0X3ByZWMxID0gLjAKZGVmIG1haW5fd29ya2VyKGdwdSwgYXJncyk6CiAgICAiIiIKICAgIEBwYXJhbTogZ3B1IC0gaW5kZXggb2YgdGhlIGdwdSBvbiBhIHNpbmdsZSBub2RlLCBoZXJlIGl0cyByYW5nZSBpcyBbMCwgYXJncy5ncHVzLTFdCiAgICAiIiIgICAgCgogICAgIyBJTVBPUlRBTlQ6IHdlIG5lZWQgdG8gc2V0IHRoZSByYW5kb20gc2VlZCBpbiBlYWNoIHByb2Nlc3Mgc28gdGhhdCB0aGUgbW9kZWxzIGFyZSBpbml0aWFsaXplZCB3aXRoIHRoZSBzYW1lIHdlaWdodHMKICAgICMgUmVmZXJlbmNlOiBodHRwczovL3lhbmdra3kuZ2l0aHViLmlvLzIwMTkvMDcvMDgvZGlzdHJpYnV0ZWQtcHl0b3JjaC10dXRvcmlhbC5odG1sCiAgICAjIHRvcmNoLmN1ZGEubWFudWFsX3NlZWQoYXJncy5zZWVkKQoKICAgICMgZm9yIGRpc3RyaWJ1dGVkIHRyYWluaW5nLCByYW5rIG5lZWRzIHRvIGJlIGdsb2JhbCByYW5rIGFtb25nIGFsbCBwcm9jZXNzZXMKICAgIHJhbmsgPSBhcmdzLm5vZGVfcmFuayAqIGFyZ3MuZ3B1cyArIGdwdQoKICAgIGRpc3QuaW5pdF9wcm9jZXNzX2dyb3VwKGJhY2tlbmQ9YXJncy5kaXN0X2JhY2tlbmQsIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfbWV0aG9kPWFyZ3MuZGlzdF91cmwsIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkX3NpemU9YXJncy53b3JsZF9zaXplLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5rPXJhbmspCgogICAgIyBidWlsZCBtb2RlbAogICAgZGVuc2VuZXQgPSBEZW5zZU5ldDEyMShpbl9jaGFubmVscz0zLCBncm93dGhfcmF0ZT1hcmdzLmdyb3d0aF9yYXRlLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uX3JhdGU9YXJncy5jb21wcmVzc2lvbl9yYXRlLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9jbGFzc2VzPWFyZ3MubnVtX2NsYXNzZXMpCgogICAgIyB0b3JjaC5jdWRhLmRldmljZShncHUpCgogICAgIyBkZW5zZW5ldC5jdWRhKGdwdSkKICAgIGRlbnNlbmV0LmN1ZGEoKQoKICAgICMgZGVuc2VuZXQgPSBubi5wYXJhbGxlbC5EaXN0cmlidXRlZERhdGFQYXJhbGxlbChkZW5zZW5ldCwgZGV2aWNlX2lkcz1bZ3B1XSkKICAgIGRlbnNlbmV0ID0gbm4ucGFyYWxsZWwuRGlzdHJpYnV0ZWREYXRhUGFyYWxsZWwoZGVuc2VuZXQpCiAgICAKICAgICMgUmVmZXJlbmNlOiBodHRwczovL2dpdGh1Yi5jb20vcHl0b3JjaC9leGFtcGxlcy9ibG9iL21hc3Rlci9pbWFnZW5ldC9tYWluLnB5CiAgICBub3JtYWxpemUgPSB0cmFuc2Zvcm1zLk5vcm1hbGl6ZShtZWFuPVswLjQ4NSwgMC40NTYsIDAuNDA2XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZD1bMC4yMjksIDAuMjI0LCAwLjIyNV0pCgogICAgdHJhaW5fdHJhbnNmb3JtID0gdHJhbnNmb3Jtcy5Db21wb3NlKFsKICAgICAgICB0cmFuc2Zvcm1zLlJhbmRvbVJlc2l6ZWRDcm9wKDIyNCksCiAgICAgICAgdHJhbnNmb3Jtcy5SYW5kb21Ib3Jpem9udGFsRmxpcCgpLAogICAgICAgIHRyYW5zZm9ybXMuVG9UZW5zb3IoKSwKICAgICAgICBub3JtYWxpemUKICAgIF0pCgogICAgdHJhaW5zZXQgPSB0b3JjaHZpc2lvbi5kYXRhc2V0cy5JbWFnZUZvbGRlcihyb290PW9zLnBhdGguam9pbihhcmdzLmRhdGFzZXRfcm9vdCwgJ3RyYWluJyksIHRyYW5zZm9ybT10cmFpbl90cmFuc2Zvcm0pCgogICAgdmFsX3RyYW5zZm9ybSA9IHRyYW5zZm9ybXMuQ29tcG9zZShbCiAgICAgICAgdHJhbnNmb3Jtcy5SZXNpemUoMjU2KSwKICAgICAgICB0cmFuc2Zvcm1zLkNlbnRlckNyb3AoMjI0KSwKICAgICAgICB0cmFuc2Zvcm1zLlRvVGVuc29yKCksCiAgICAgICAgbm9ybWFsaXplCiAgICBdKQoKICAgIHZhbHNldCA9IHRvcmNodmlzaW9uLmRhdGFzZXRzLkltYWdlRm9sZGVyKHJvb3Q9b3MucGF0aC5qb2luKGFyZ3MuZGF0YXNldF9yb290LCAndmFsJyksIHRyYW5zZm9ybT12YWxfdHJhbnNmb3JtKQogICAgCiAgICB0cmFpbl9zYW1wbGVyID0gdG9yY2gudXRpbHMuZGF0YS5kaXN0cmlidXRlZC5EaXN0cmlidXRlZFNhbXBsZXIodHJhaW5zZXQsIG51bV9yZXBsaWNhcz1hcmdzLndvcmxkX3NpemUsIHJhbms9cmFuaykKCiAgICBhcmdzLmJhdGNoX3NpemUgPSBpbnQoYXJncy5iYXRjaF9zaXplL2FyZ3MuZ3B1cykKICAgIGFyZ3MubnVtX3dvcmtlcnMgPSBpbnQoYXJncy5udW1fd29ya2Vycy9hcmdzLmdwdXMpCgogICAgdHJhaW5fZGF0YSA9IHRvcmNoLnV0aWxzLmRhdGEuRGF0YUxvYWRlcigKICAgICAgICB0cmFpbnNldCwKICAgICAgICBiYXRjaF9zaXplPWFyZ3MuYmF0Y2hfc2l6ZSwKICAgICAgICBzaHVmZmxlPUZhbHNlLCAgIyB3aGVuIHNhbXBsZXIgaXMgc3BlY2lmaWVkLCBzaHVmZmxlIHNob3VsZCBiZSBGYWxzZQogICAgICAgIG51bV93b3JrZXJzPWFyZ3MubnVtX3dvcmtlcnMsCiAgICAgICAgcGluX21lbW9yeT1UcnVlLAogICAgICAgIHNhbXBsZXI9dHJhaW5fc2FtcGxlcgogICAgKQoKICAgIHZhbF9kYXRhID0gdG9yY2gudXRpbHMuZGF0YS5EYXRhTG9hZGVyKAogICAgICAgIHZhbHNldCwKICAgICAgICBiYXRjaF9zaXplPWFyZ3MuYmF0Y2hfc2l6ZSwKICAgICAgICBzaHVmZmxlPUZhbHNlLAogICAgICAgIG51bV93b3JrZXJzPWFyZ3MubnVtX3dvcmtlcnMsCiAgICAgICAgcGluX21lbW9yeT1UcnVlCiAgICApCgogICAgY3JpdGVyaW9uID0gbm4uQ3Jvc3NFbnRyb3B5TG9zcygpCiAgICBvcHRpbWl6ZXIgPSBvcHRpbS5TR0QoZGVuc2VuZXQucGFyYW1ldGVycygpLCBscj1hcmdzLmxyLCBtb21lbnR1bT1hcmdzLm1vbWVudHVtLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRfZGVjYXk9YXJncy53ZWlnaHRfZGVjYXkpICAgCgogICAgZ2xvYmFsIGJlc3RfcHJlYzEKCiAgICAjIFJlZmVyZW5jZTogaHR0cHM6Ly9kaXNjdXNzLnB5dG9yY2gub3JnL3Qvd2hhdC1kb2VzLXRvcmNoLWJhY2tlbmRzLWN1ZG5uLWJlbmNobWFyay1kby81OTM2LzIKPHxmaW1faG9sZXw+CiAgICBmb3IgZXBvY2ggaW4gcmFuZ2UoYXJncy5lcG9jaHMpOgoKICAgICAgICB0cmFpbl9zYW1wbGVyLnNldF9lcG9jaChlcG9jaCkKCiAgICAgICAgYWRqdXN0X2xyKGFyZ3MsIG9wdGltaXplciwgZXBvY2gpCgogICAgICAgIHRyYWluKGRlbnNlbmV0LCB0cmFpbl9kYXRhLCBjcml0ZXJpb24sIG9wdGltaXplciwgZXBvY2gsIGFyZ3MpICAgICAgICAKCiAgICAgICAgaWYgYXJncy50ZW5zb3Jib2FyZDoKICAgICAgICAgICAgbG9nX3ZhbHVlKCd0cmFpbl9sb3NzJywgbG9zc2VzLmF2ZywgZXBvY2gpCiAgICAgICAgICAgIGxvZ192YWx1ZSgndHJhaW5fYWNjJywgdG9wMS5hdmcsIGVwb2NoKQoKICAgICAgICAjIHZhbGlkYXRlIHRoZSBtb2RlbCBldmVyeSBlcG9jaAogICAgICAgIHByZWMxID0gdmFsaWRhdGUoYXJncywgdmFsX2RhdGEsIGRlbnNlbmV0LCBjcml0ZXJpb24sIGVwb2NoKQoKICAgICAgICBpc19iZXN0ID0gcHJlYzEgPiBiZXN0X3ByZWMxCiAgICAgICAgYmVzdF9wcmVjMSA9IG1heChwcmVjMSwgYmVzdF9wcmVjMSkKICAgICAgICBzYXZlX2NoZWNrcG9pbnQoewogICAgICAgICAgICAnZXBvY2gnOiBlcG9jaCsxLAogICAgICAgICAgICAnc3RhdGVfZGljdCc6IGRlbnNlbmV0LnN0YXRlX2RpY3QoKSwKICAgICAgICAgICAgJ2Jlc3RfcHJlYzEnOiBiZXN0X3ByZWMxLAogICAgICAgICAgICAnb3B0aW1pemVyJzogb3B0aW1pemVyLnN0YXRlX2RpY3QoKQogICAgICAgIH0sIGlzX2Jlc3QpCgoKZGVmIHRyYWluKGRlbnNlbmV0LCB0cmFpbl9kYXRhLCBjcml0ZXJpb24sIG9wdGltaXplciwgZXBvY2gsIGFyZ3MpOgogICAgIyBlbmFibGUgdHJhaW4gbW9kZQogICAgZGVuc2VuZXQudHJhaW4oKQoKICAgIGJhdGNoX3RpbWUgPSBBdmVyYWdlTWV0ZXIoKQogICAgZGF0YV90aW1lID0gQXZlcmFnZU1ldGVyKCkKICAgIGxvc3NlcyA9IEF2ZXJhZ2VNZXRlcigpCiAgICB0b3AxID0gQXZlcmFnZU1ldGVyKCkKICAgIHRvcDUgPSBBdmVyYWdlTWV0ZXIoKQoKICAgICMgcHJvZ3Jlc3MgPSBQcm9ncmVzc01ldGVyKAogICAgIyAgICAgbGVuKHRyYWluX2RhdGEpLAogICAgIyAgICAgW2JhdGNoX3RpbWUsIGRhdGFfdGltZSwgbG9zc2VzLCB0b3AxLCB0b3A1XSwKICAgICMgICAgIHByZWZpeD0iRXBvY2g6IFt7fV0iLmZvcm1hdChlcG9jaCkKICAgICMgKQoKICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKICAgIGZvciBpLCAoaW1hZ2VzLCBsYWJlbHMpIGluIGVudW1lcmF0ZSh0cmFpbl9kYXRhKToKICAgICAgICAjIG1lYXN1cmUgZGF0YSBsb2FkaW5nIHRpbWUKICAgICAgICBkYXRhX3RpbWUudXBkYXRlKHRpbWUudGltZSgpIC0gc3RhcnQpCgogICAgICAgICMgaGVyZSBpbWFnZXMgYW5kIGxhYmVscyBhcmUgaW4gQkFUQ0gtd2lzZQogICAgICAgIGltYWdlcywgbGFiZWxzID0gaW1hZ2VzLmN1ZGEoKSwgbGFiZWxzLmN1ZGEoKQoKICAgICAgICBvdXRwdXRzID0gZGVuc2VuZXQoaW1hZ2VzKQogICAgICAgIGxvc3MgPSBjcml0ZXJpb24ob3V0cHV0cywgbGFiZWxzKQoKICAgICAgICAjIG1lYXN1cmUgYWNjdXJhY3kgYW5kIHJlY29yZCBsb3NzCiAgICAgICAgcHJlYzEsIHByZWM1ID0gYWNjdXJhY3kob3V0cHV0cywgbGFiZWxzLCB0b3BrPSgxLCA1KSkKICAgICAgICBsb3NzZXMudXBkYXRlKGxvc3MuaXRlbSgpLCBpbWFnZXMuc2l6ZSgwKSkKICAgICAgICB0b3AxLnVwZGF0ZShwcmVjMS5pdGVtKCksIGltYWdlcy5zaXplKDApKQogICAgICAgIHRvcDUudXBkYXRlKHByZWM1Lml0ZW0oKSwgaW1hZ2VzLnNpemUoMCkpCgogICAgICAgIG9wdGltaXplci56ZXJvX2dyYWQoKQogICAgICAgIGxvc3MuYmFja3dhcmQoKQogICAgICAgIG9wdGltaXplci5zdGVwKCkKCiAgICAgICAgZW5kID0gdGltZS50aW1lKCkKICAgICAgICBiYXRjaF90aW1lLnVwZGF0ZShlbmQgLSBzdGFydCkKCiAgICAgICAgaWYgaSAlIGFyZ3MucHJpbnRfZnJlcSA9PSAwOgogICAgICAgICAgICBwcmludCgnRXBvY2g6IFt7MH1dW3sxfS97Mn1dXHQnCiAgICAgICAgICAgICAgICAnVGltZSB7YmF0Y2hfdGltZS52YWw6LjNmfSAoe2JhdGNoX3RpbWUuYXZnOi4zZn0pXHQnCiAgICAgICAgICAgICAgICAnRGF0YSB7ZGF0YV90aW1lLnZhbDouM2Z9ICh7ZGF0YV90aW1lLmF2ZzouM2Z9KVx0JwogICAgICAgICAgICAgICAgJ0xvc3Mge2xvc3MudmFsOi40Zn0gKHtsb3NzLmF2ZzouNGZ9KVx0JwogICAgICAgICAgICAgICAgJ1ByZWNAMSB7dG9wMS52YWw6LjNmfSAoe3RvcDEuYXZnOi4zZn0pXHQnCiAgICAgICAgICAgICAgICAnUHJlY0A1IHt0b3A1LnZhbDouM2Z9ICh7dG9wNS5hdmc6LjNmfSknLmZvcm1hdCgKICAgICAgICAgICAgICAgIGVwb2NoLCBpLCBsZW4odHJhaW5fZGF0YSksIGJhdGNoX3RpbWU9YmF0Y2hfdGltZSwKICAgICAgICAgICAgICAgIGRhdGFfdGltZT1kYXRhX3RpbWUsIGxvc3M9bG9zc2VzLCB0b3AxPXRvcDEsIHRvcDU9dG9wNSkpCgoKZGVmIHZhbGlkYXRlKGFyZ3MsIHZhbF9kYXRhLCBkZW5zZW5ldCwgY3JpdGVyaW9uLCBlcG9jaCk6CiAgICAiIiJSZWZlcmVuY2U6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzYwMDE4NTc4L3doYXQtZG9lcy1tb2RlbC1ldmFsLWRvLWluLXB5dG9yY2gKICAgIHN3aXRjaCBCYXRjaE5vcm0gYXZnX3Bvb2wgbWF4X3Bvb2wgbGF5ZXJzIGluIGRlbnNlbmV0IHRvIGV2YWx1YXRlIG1vZGUKICAgIG1vZGVsLmV2YWwoKSBpcyB1c3VhbGx5IHBhaXJlZCB3aXRoIHRvcmNoLm5vX2dyYWQoKSB0byBkaXNhYmxlIGdyYWRpZW50cyBjb21wdXRhdGlvbgogICAgIiIiCiAgICBkZW5zZW5ldC5ldmFsKCkKCiAgICBiYXRjaF90aW1lID0gQXZlcmFnZU1ldGVyKCkKICAgIGxvc3NlcyA9IEF2ZXJhZ2VNZXRlcigpCiAgICB0b3AxID0gQXZlcmFnZU1ldGVyKCkKICAgIHRvcDUgPSBBdmVyYWdlTWV0ZXIoKQoKICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKICAgIHdpdGggdG9yY2gubm9fZ3JhZCgpOgogICAgICAgIGZvciBpLCAoaW1hZ2VzLCBsYWJlbHMpIGluIGVudW1lcmF0ZSh2YWxfZGF0YSk6CiAgICAgICAgICAgIGltYWdlcywgbGFiZWxzID0gaW1hZ2VzLmN1ZGEoKSwgbGFiZWxzLmN1ZGEoKQoKICAgICAgICAgICAgb3V0cHV0cyA9IGRlbnNlbmV0KGltYWdlcykKICAgICAgICAgICAgbG9zcyA9IGNyaXRlcmlvbihvdXRwdXRzLCBsYWJlbHMpCgogICAgICAgICAgICAjIG1lYXN1cmUgYWNjdXJhY3kgYW5kIHJlY29yZCBsb3NzCiAgICAgICAgICAgIHByZWMxLCBwcmVjNSA9IGFjY3VyYWN5KG91dHB1dHMsIGxhYmVscywgdG9waz0oMSwgNSkpCiAgICAgICAgICAgIGxvc3Nlcy51cGRhdGUobG9zcy5pdGVtKCksIGltYWdlcy5zaXplKDApKQogICAgICAgICAgICB0b3AxLnVwZGF0ZShwcmVjMS5pdGVtKCksIGltYWdlcy5zaXplKDApKQogICAgICAgICAgICB0b3A1LnVwZGF0ZShwcmVjNS5pdGVtKCksIGltYWdlcy5zaXplKDApKQoKICAgICAgICAgICAgZW5kID0gdGltZS50aW1lKCkKICAgICAgICAgICAgYmF0Y2hfdGltZS51cGRhdGUoZW5kLXN0YXJ0KQoKICAgICAgICAgICAgaWYgaSAlIGFyZ3MucHJpbnRfZnJlcSA9PSAwOgogICAgICAgICAgICAgICAgcHJpbnQoJ1Rlc3Q6IFt7MH0vezF9XVx0JwogICAgICAgICAgICAgICAgICAgICdUaW1lIHtiYXRjaF90aW1lLnZhbDouM2Z9ICh7YmF0Y2hfdGltZS5hdmc6LjNmfSlcdCcKICAgICAgICAgICAgICAgICAgICAnTG9zcyB7bG9zcy52YWw6LjRmfSAoe2xvc3MuYXZnOi40Zn0pXHQnCiAgICAgICAgICAgICAgICAgICAgJ1ByZWNAMSB7dG9wMS52YWw6LjNmfSAoe3RvcDEuYXZnOi4zZn0pXHQnCiAgICAgICAgICAgICAgICAgICAgJ1ByZWNANSB7dG9wNS52YWw6LjNmfSAoe3RvcDUuYXZnOi4zZn0pJy5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgaSwgbGVuKHZhbF9sb2FkZXIpLCBiYXRjaF90aW1lPWJhdGNoX3RpbWUsIGxvc3M9bG9zc2VzLAogICAgICAgICAgICAgICAgICAgIHRvcDE9dG9wMSwgdG9wNT10b3A1KSkKCiAgICBwcmludCgnICogUHJlY0AxIHt0b3AxLmF2ZzouM2Z9IFByZWNANSB7dG9wNS5hdmc6LjNmfScuZm9ybWF0KHRvcDE9dG9wMSwgdG9wNT10b3A1KSkKICAgIG1zZ190aW1lID0gZid7ZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoIiVZLSVtLSVkICVIOiVNOiVTIil9JwogICAgcHJpbnQoZidbe21zZ190aW1lfV1cbicpCgogICAgaWYgYXJncy50ZW5zb3Jib2FyZDoKICAgICAgICBsb2dfdmFsdWUoJ3RyYWluX2xvc3MnLCBsb3NzZXMuYXZnLCBlcG9jaCkKICAgICAgICBsb2dfdmFsdWUoJ3RyYWluX2FjYycsIHRvcDEuYXZnLCBlcG9jaCkKCiAgICByZXR1cm4gdG9wMS5hdmcKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgYXJncyA9IHBhcnNlX2FyZ3MoKQoKICAgIG1haW4oYXJncykKPHxmaW1fc3VmZml4fD4KICAgICMgdGhpcyBpcyB1c2VmdWwgZm9yIGN1ZG5uIGZpbmRpbmcgb3B0aW1hbCBzZXQgb2YgYWxnb3JpdGhtcyBmb3IgcGFydGljdWxhciBjb25maWd1cmF0aW9ucyAKICAgICMgYW5kIGFjY2VsZXJhdGUgdHJhaW5pbmcgd2hlbiB0aGUgaW5wdXQgc2l6ZXMgZG8gbm90IGNoYW5nZSBvdmVyIGl0ZXJhdGlvbi4KICAgIGN1ZG5uLmJhY2tlbmQgPSBUcnVlCgo8fGZpbV9lbmR8Pg=="]
["7b5179b3f6cbd57369216a3e6881d2a3360cd27a-4","7b5179b3f6cbd57369216a3e6881d2a3360cd27a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBqc29uCgppbXBvcnQgdGVzdGluZnJhLnV0aWxzLmFuc2libGVfcnVubmVyCgp0ZXN0aW5mcmFfaG9zdHMgPSB0ZXN0aW5mcmEudXRpbHMuYW5zaWJsZV9ydW5uZXIuQW5zaWJsZVJ1bm5lcigKICAgIG9zLmVudmlyb25bJ01PTEVDVUxFX0lOVkVOVE9SWV9GSUxFJ10pLmdldF9ob3N0cygnYWxsJykKCgpkZWYgdGVzdF9kb2NrZXJfZGlzdHJpYnV0aW9uX2NvbmZpZyhob3N0KToKICAgIGYgPSBob3N0LmZpbGUoJy9ldGMvZG9ja2VyLWRpc3RyaWJ1dGlvbi9yZWdpc3RyeS9jb25maWcueW1sJykKICAgIGFzc2VydCBmLmV4aXN0cwogICAgYXNzZXJ0IGYuaXNfZmlsZQogICAgYXNzZXJ0IGYudXNlciA9PSAncm9vdCcKICAgIGFzc2VydCBmLmdyb3VwID09ICdyb290JwogICAgYXNzZXJ0IGYuY29udGFpbnMoJ2FkZHI6IDEyNy4wLjAuMTo1MDAwJykKCgpkZWYgdGVzdF9kb2NrZXJfZGlzdHJpYnV0aW9uX3BhY2thZ2UoaG9zdCk6CiAgICBwYWNrYWdlID0gaG9zdC5wYWNrYWdlKCdkb2NrZXItZGlzdHJpYnV0aW9uJykKICAgIGFzc2VydCBwYWNrYWdlLmlzX2luc3RhbGxlZAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKZGVmIHRlc3RfZG9ja2VyX2Rpc3RyaWJ1dGlvbl9zZXJ2aWNlKGhvc3QpOgogICAgc2VydmljZSA9IGhvc3Quc2VydmljZSgnZG9ja2VyLWRpc3RyaWJ1dGlvbicpCjx8ZmltX2VuZHw+"]
["cdea091b597c4569a7d5a2cad9edb8891aa44b46-2","cdea091b597c4569a7d5a2cad9edb8891aa44b46","PHxmaW1fcHJlZml4fD4KIwojIENvcHlyaWdodCAoYykgMjAxOSBOaWdodHdhdGNoIEN5YmVyc2VjdXJpdHkuCiMKIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0cnVlZ2F6ZQojIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL25pZ2h0d2F0Y2hjeWJlcnNlY3VyaXR5L3RydWVnYXplKS4KIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgojIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCiMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQojIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCiMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCiMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKZnJvbSB0cnVlZ2F6ZS5wbHVnaW5zLndlYWtfa2V5IGltcG9ydCBXZWFrS2V5UGx1Z2luCgoKIyBUZXN0cyBmb3IgV2Vha0tleVBsdWdpbgojIFRPRE86IEFkZCB0ZXN0cyBmb3IgY2xpY2sgb3V0cHV0CmNsYXNzIFRlc3RXZWFrS2V5UGx1Z2luKG9iamVjdCk6CiAgICBkZWYgdGVzdF9wbHVnaW5fcHJvcGVydGllc19uYW1lX2Rlc2Moc2VsZik6CiAgICAgICAgcGx1Z2luID0gV2Vha0tleVBsdWdpbih7fSwgaXNfYW5kcm9pZD1UcnVlLCBpc19pb3M9RmFsc2UsIGRvX29ubGluZT1GYWxzZSkKICAgICAgICBhc3NlcnQgbm90IHBsdWdpbi5uYW1lLnN0YXJ0c3dpdGgoJ0Jhc2UnKQogICAgICAgIGFzc2VydCBub3QgcGx1Z2luLmRlc2Muc3RhcnRzd2l0aCgnQmFzZScpCgogICAgZGVmIHRlc3RfcGx1Z2luX3Byb3BlcnRpZXNfc3VwcG9ydChzZWxmKToKICAgICAgICBhc3NlcnQgV2Vha0tleVBsdWdpbi5zdXBwb3J0c19hbmRyb2lkIGlzIFRydWUKICAgICAgICBhc3NlcnQgV2Vha0tleVBsdWdpbi5zdXBwb3J0c19pb3MgaXMgRmFsc2UKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGFzc2VydCBXZWFrS2V5UGx1Z2luLnN1cHBvcnRzX29ubGluZSBpcyBGYWxzZQoKPHxmaW1fZW5kfD4="]
["3cd2d7e00233165a82e4153e5922144acacb867a-4","3cd2d7e00233165a82e4153e5922144acacb867a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCmltcG9ydCB0aW1lCmltcG9ydCBzcWxpdGUzCmltcG9ydCByYW5kb20KZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybGVuY29kZQppbXBvcnQgcmVxdWVzdHMKZnJvbSByZXF1ZXN0cy5leGNlcHRpb25zIGltcG9ydCBUaW1lb3V0LCBDb25uZWN0aW9uRXJyb3IKZnJvbSBzZWxlbml1bSBpbXBvcnQgd2ViZHJpdmVyCmZyb20gc2VsZW5pdW0ud2ViZHJpdmVyLmNvbW1vbi5ieSBpbXBvcnQgQnkKZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIuc3VwcG9ydC51aSBpbXBvcnQgV2ViRHJpdmVyV2FpdApmcm9tIHNlbGVuaXVtLmNvbW1vbi5leGNlcHRpb25zIGltcG9ydCBUaW1lb3V0RXhjZXB0aW9uCmZyb20gc2VsZW5pdW0ud2ViZHJpdmVyLnN1cHBvcnQgaW1wb3J0IGV4cGVjdGVkX2NvbmRpdGlvbnMgYXMgRUMKZnJvbSBtYXBrZXlzIGltcG9ydCBHQU9ERV9LRVkKCk9GRklDSUFMX1VSTCA9ICdodHRwOi8vY3MuZ3ptdHIuY29tL2NrZncvJwpNQVhfVFJZID0gNQpHQU9ERV9BUEkgPSAnaHR0cHM6Ly9yZXN0YXBpLmFtYXAuY29tL3YzL3BsYWNlL3RleHQ/JwpDSVRZID0gJ2d1YW5nemhvdScKCmRlZiBEYkluaXRpYWxpemUoY29ubik6CiAgICAnJycKICAgIOWIneWni+WMluWcsOmTgeermeeCueaVsOaNruW6kwogICAgJycnCiAgICBjdXIgPSBjb25uLmN1cnNvcigpCgogICAgaW5pdF9zcWwgPSAnJycKICAgICAgICAgICAgICAgIERST1AgVEFCTEUgSUYgRVhJU1RTIGBndWFuZ3pob3UtbWV0cm9gOwogICAgICAgICAgICAgICAgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYGd1YW5nemhvdS1tZXRyb2AoCiAgICAgICAgICAgICAgICBgTGluZUNvZGVgIFRJTllJTlQgTk9UIE5VTEwsCiAgICAgICAgICAgICAgICBgTGluZU5hbWVgIFZBUkNIQVIoOCkgTk9UIE5VTEwsCiAgICAgICAgICAgICAgICBgTGluZUNvbG9yYCBWQVJDSEFSKDMyKSBOT1QgTlVMTCwKICAgICAgICAgICAgICAgIGBTdGF0aW9uQ29kZWAgVElOWUlOVCBOT1QgTlVMTCwKICAgICAgICAgICAgICAgIGBTdGF0aW9uTmFtZWAgVkFSQ0hBUigxNikgTk9UIE5VTEwsCiAgICAgICAgICAgICAgICBgTG9uZ2l0dWRlYCBOVU1FUklDIERFRkFVTFQgTlVMTCwKICAgICAgICAgICAgICAgIGBMYXRpdHVkZWAgTlVNRVJJQyBERUZBVUxUIE5VTEwsCiAgICAgICAgICAgICAgICBQUklNQVJZIEtFWSAoYExpbmVDb2RlYCwgYFN0YXRpb25Db2RlYCkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICcnJwogICAgdHJ5OgogICAgICAgIGN1ci5leGVjdXRlc2NyaXB0KGluaXRfc3FsKQogICAgICAgIGNvbm4uY29tbWl0KCkKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgogICAgICAgIHByaW50KCdEQiBJbml0aWFsaXphdGlvbiBFcnJvcicsIGVyci5hcmdzWzBdKQogICAgZmluYWxseToKICAgICAgICBjdXIuY2xvc2UoKQoKICAgIHJldHVybiBOb25lCgoKZGVmIFJlY29yZERldGFpbEluc2VydChjb25uLCBzdGF0aW9uX3JlY29yZHMpOgogICAgJycnCiAgICDlsIbnq5nngrnmlbDmja7mj5LlhaXliLDmlbDmja7lupPkuK3vvIzlhbbkuK3nq5nngrnmlbDmja7kuLrlr7nlupTkuo7mlbDmja7lupPnu5PmnoTnmoRJdGVyYWJsZe+8mgogICAg5Y2V5Liq56uZ54K55pWw5o2u5bqU56ym5ZCIKExpbmVjb2RlLCBMaW5lTmFtZSwgTGluZUNvbG9yLCBTdGF0aW9uQ29kZSwgU3RhdGlvbk5hbWUp55qE5pWw5o2u5qC85byPCiAgICAnJycKICAgIGN1ciA9IGNvbm4uY3Vyc29yKCkKCiAgICBzcWwgPSAnJycKICAgICAgICAgIElOU0VSVCBPUiBJR05PUkUgSU5UTyBgZ3Vhbmd6aG91LW1ldHJvYCAoCiAgICAgICAgICAgICAgTGluZWNvZGUsIExpbmVOYW1lLCBMaW5lQ29sb3IsIFN0YXRpb25Db2RlLCBTdGF0aW9uTmFtZSkKICAgICAgICAgIFZBTFVFUyAoCiAgICAgICAgICAgICAgPywgPywgPywgPywgPwogICAgICAgICAgICAgICkKICAgICAgICAgICcnJwogICAgdHJ5OgogICAgICAgIGN1ci5leGVjdXRlbWFueShzcWwsIHN0YXRpb25fcmVjb3JkcykKICAgICAgICBudW1fc3VjID0gY3VyLnJvd2NvdW50CiAgICAgICAgY29ubi5jb21taXQoKQogICAgZXhjZXB0IHNxbGl0ZTMuT3BlcmF0aW9uYWxFcnJvciBhcyBlcnI6CiAgICAgICAgcHJpbnQoJ0luc2VydGlvbiBFcnJvciBmb3IgcmVjb3JkOicsIHN0YXRpb25fcmVjb3JkcywgZXJyKQogICAgICAgIG51bV9zdWMgPSAwCiAgICAKICAgIHJldHVybiBudW1fc3VjCgoKZGVmIEV4dHJhY3RDb2xvcihzdHlsZV9zdHJpbmcpOgogICAgJycnCiAgICDliKnnlKhSZWdleOino+aekOWQhOWcsOmTgee6v+i3r+eahOS4u+mimOminOiJsgogICAgJycnCiAgICBwYXQgPSByZS5jb21waWxlKHIncmdiXChcZHsxLDN9LFxzKlxkezEsM30sXHMqXGR7MSwzfVwpJykKICAgIHJldHVybiBwYXQuc2VhcmNoKHN0eWxlX3N0cmluZykuZ3JvdXAoKQoKCmRlZiBHZXRTdGF0aW9ucyhkcml2ZXIpOgogICAgJycnCiAgICDlnKjmr4/kuIDmrKHojrflj5bnibnlrprlnLDpk4Hnur/ot6/nmoTnq5nngrnmuIXljZXlkI7vvIzmipPlj5blkITkuKrnq5nngrnnmoTnvJblj7flkozlkI3np7AKICAgICcnJwogICAgbGluZV90YWJsZSA9IGRyaXZlci5maW5kX2VsZW1lbnRzKEJ5LkNTU19TRUxFQ1RPUiwgJyN6b25lU2VydmljZSB0Ym9keSB0cicpCiAgICBmb3IgaSwgZWxtdCBpbiBlbnVtZXJhdGUobGluZV90YWJsZSk6CiAgICAgICAgaWYgaSBpbiByYW5nZSgwLCAzKToKICAgICAgICAgICAgY29udGludWUKICAgICAgICBsaW5lX2NvZGUsIHN0YXRpb25fY29kZSA9IGVsbXQuZmluZF9lbGVtZW50cyhCeS5UQUdfTkFNRSwgJ3RkJylbMF0udGV4dC5zcGxpdCgnXG4nKQogICAgICAgIHN0YXRpb25fbmFtZSA9IGVsbXQuZmluZF9lbGVtZW50cyhCeS5UQUdfTkFNRSwgJ3RkJylbMV0udGV4dAoKICAgICAgICB5aWVsZCBsaW5lX2NvZGUsIHN0YXRpb25fY29kZSwgc3RhdGlvbl9uYW1lCgoKZGVmIEdldFN0YXRpb25zUmVjb3JkKGRyaXZlciwgYm90dG9uKToKICAgICcnJwogICAg5Zyo5q+P5LiA5qyh54K55Ye777yI5pu05paw57q/6Lev5ZCO77yJ5omT5YyF5bm26L+U5Zue5ZCE5Liq56uZ54K555qE5L+h5oGvCiAgICAnJycKICAgIGxpbmVfbmFtZSA9IGJvdHRvbi50ZXh0CiAgICBsaW5lX2NvbG9yID0gRXh0cmFjdENvbG9yKGJvdHRvbi5nZXRfYXR0cmlidXRlKCdzdHlsZScpKQogICAgZm9yIGxpbmVfY29kZSwgc3RhdGlvbl9jb2RlLCBzdGF0aW9uX25hbWUgaW4gR2V0U3RhdGlvbnMoZHJpdmVyKToKICAgICAgICB5aWVsZCAobGluZV9jb2RlLCBsaW5lX25hbWUsIGxpbmVfY29sb3IsIHN0YXRpb25fY29kZSwgc3RhdGlvbl9uYW1lKQoKCmRlZiBHZXRIZWFkZXIoKToKICAgICcnJwogICAg6ZqP5py66I635Y+W6K+35rGC5aS05L+h5oGvCiAgICAnJycKICAgIHdpdGggb3BlbigndXNlci1hZ2VudHMudHh0JywgJ3InKSBhcyBmaGFuZDoKICAgICAgICBhZ2VudCA9IHJhbmRvbS5jaG9pY2UoZmhhbmQucmVhZCgpLnNwbGl0KCdcbicpKQogICAgaGVhZGVyID0gewogICAgICAgICdVc2VyLUFnZW50JzogYWdlbnQsCiAgICAgICAgJ0hvc3QnOiAncmVzdGFwaS5hbWFwLmNvbScKICAgIH0KICAgIHJldHVybiBoZWFkZXIKCgpkZWYgUGFyYW1zUGFja2FnaW5nKGFkZHJlc3MsIGNpdHk9Q0lUWSwga2V5PUdBT0RFX0tFWSk6CiAgICAnJycKICAgIOagueaNruaMh+WumueahOermeeCueS/oeaBr+i/lOWbnuWQkemrmOW+t+WcsOWbvuafpeivoueahFVSTAogICAgJycnCiAgICBxdWVyeSA9IHVybGVuY29kZShbCiAgICAgICAgKCdjaXR5JywgY2l0eSksIAogICAgICAgICgna2V5Jywga2V5KSwKICAgICAgICAoJ2tleXdvcmRzJywgYWRkcmVzcyksCiAgICAgICAgKCd0eXBlcycsIDE1MDUwMCkKICAgICAgICBdKQogICAgCiAgICB1cmwgPSBHQU9ERV9BUEkgKyBxdWVyeQogICAgCiAgICByZXR1cm4gdXJsCgoKZGVmIFN0YXRpb25HZW9jb2RpbmcodXJsKToKICAgICcnJwogICAg5qC55o2u5a6M5oiQ57yW56CB55qEVVJM5Yip55So5Zyw5Zu+QVBJ5o+Q5Y+W56uZ54K555qE57uP57qs5bqm77yM5bm25L2c55u45bqU55qE5byC5bi45aSE55CGCiAgICAnJycKICAgICMg6K6w5b2V6LaF5pe25bm26L+U5ZueTm9uZQogICAgdHJ5OgogICAgICAgIHIgPSByZXF1ZXN0cy5nZXQodXJsLCBoZWFkZXJzPUdldEhlYWRlcigpLCB0aW1lb3V0PTEwKQogICAgZXhjZXB0IFRpbWVvdXQgYXMgdGVycjoKICAgICAgICByYWlzZSBUaW1lb3V0KCdUaW1lb3V0IGZvcjogezpzfScuZm9ybWF0KHVybCksIHRlcnIuYXJnc1swXSkKICAgIAogICAgIyDov5vooYzlhoXlrrnop6PmnpDliY3lhYjmo4Dmn6VyZXNwb25zZeeKtuaAgQogICAgaWYgci5zdGF0dXNfY29kZSAhPSAyMDA6CiAgICAgICAgcmFpc2UgQ29ubmVjdGlvbkVycm9yKHIuc3RhdHVzX2NvZGUpCiAgICAgICAgCiAgICAjIOiusOW9leino+eggeW8guW4uOW5tui/lOWbnk5vbmUKICAgIHRyeTogCiAgICAgICAgcmVzdWx0ID0gci5qc29uKCkKICAgIGV4Y2VwdDogCiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSlNPTiBkZWNvZGluZyBlcnJvciBmb3IgezpzfScuZm9ybWF0KHVybCkpCiAgICAgICAgCiAgICAjIOi/m+ihjOe7j+e6rOW6puaPkOWPluWJjeWFiOajgOafpee7k+aenOeKtuaAgQogICAgaWYgcmVzdWx0WydzdGF0dXMnXSA9PSAwOgogICAgICAgIHJhaXNlIENvbm5lY3Rpb25FcnJvcigndW5zdWNjZXNzZnVsIHJlc3BvbnNlIHs6c30nLmZvcm1hdChyZXN1bHRbJ2luZm8nXSkpCgogICAgdHJ5OgogICAgICAgIG5hbWUgPSByZXN1bHRbJ3BvaXMnXVswXVsnbmFtZSddCiAgICAgICAgbG9uZ2l0dWRlLCBsYXRpdHVkZSA9IHJlc3VsdFsncG9pcyddWzBdWydsb2NhdGlvbiddLnNwbGl0KCcsJykKICAgICAgICByZXR1cm4gbmFtZSwgZmxvYXQobG9uZ2l0dWRlKSwgZmxvYXQobGF0aXR1ZGUpCiAgICBleGNlcHQ6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ29udGVudCBlcnJvciBmb3IgcmVzdWx0OicsIHJlc3VsdCkKCgpkZWYgTWV0cm9HZW9Db2RlKGNvbm4pOgoKICAgIG51bV91cGRhdGUgPSAwCiAgICBxdWVyeSA9ICcnJwogICAgICAgICAgICBTRUxFQ1QgTGluZUNvZGUsIFN0YXRpb25Db2RlLCBTdGF0aW9uTmFtZSBGUk9NIGBndWFuZ3pob3UtbWV0cm9gCiAgICAgICAgICAgICcnJwogICAgdXBkYXRlX3NxbCA9ICcnJwogICAgICAgICAgICAgICAgIFVQREFURSBgZ3Vhbmd6aG91LW1ldHJvYAogICAgICAgICAgICAgICAgIFNFVCBgTG9uZ2l0dWRlYCA9ID8sIGBMYXRpdHVkZWAgPSA/CiAgICAgICAgICAgICAgICAgV0hFUkUgKGBMaW5lQ29kZWAgPSA/KSAmIChgU3RhdGlvbkNvZGVgID0gPykKICAgICAgICAgICAgICAgICAnJycKICAgIGN1ciA9IGNvbm4uY3Vyc29yKCkKICAgIG5hbWVfcGF0dGVybiA9IHInKFx3KykoXChcdytcKSk/JwoKICAgIGZvciBsY29kZSwgc2NvZGUsIHN0YXRpb24gaW4gY3VyLmV4ZWN1dGUocXVlcnkpOgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgbmFtZSwgbG9uZ2l0dWRlLCBsYXRpdHVkZSA9IFN0YXRpb25HZW9jb2RpbmcodXJsKQogICAgICAgICAgICBpZiByZS5tYXRjaChuYW1lX3BhdHRlcm4sIG5hbWUpLmdyb3VwKDEpICE9IHN0YXRpb246CiAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdNaXNtYXRjaCBvZiBzdGF0aW9uOiB7OnN9Jy5mb3JtYXQoc3RhdGlvbikpCiAgICAgICAgZXhjZXB0IChDb25uZWN0aW9uRXJyb3IsIFZhbHVlRXJyb3IsIFRpbWVvdXQpIGFzIGVycjoKICAgICAgICAgICAgcHJpbnQoJ0Vycm9yIG9jY3VycyBmb3Igc3RhdGlvbiB7OnN9Jy5mb3JtYXQoc3RhdGlvbikpCiAgICAgICAgICAgIHByaW50KGVyci5hcmdzWzBdKQogICAgICAgICAgICBsb25naXR1ZGUsIGxhdGl0dWRlID0gTm9uZSwgTm9uZQogICAgICAgIAogICAgICAgIGNvbm4uZXhlY3V0ZSh1cGRhdGVfc3FsLCAobG9uZ2l0dWRlLCBsYXRpdHVkZSwgbGNvZGUsIHNjb2RlKSkKICAgICAgICBudW1fdXBkYXRlICs9IGN1ci5yb3djb3VudAogICAgICAgIHRpbWUuc2xlZXAocmFuZG9tLnVuaWZvcm0oMCwgMikpCiAgICAKICAgIGNvbm4uY29tbWl0KCkKICAgIHByaW50KCd7OmR9IHJlY29yZHMgdXBkYXRlZC4nLmZvcm1hdChudW1fdXBkYXRlKSkKCiAgICByZXR1cm4gTm9uZQoKCmRlZiBNYWluKCk6CgogICAgY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgnbGlhbmppYS5kYicpCiAgICBudW1fc3VjID0gMAogICAgRGJJbml0aWFsaXplKGNvbm4pCgogICAgYnJvd3NlciA9IHdlYmRyaXZlci5DaHJvbWUoKQogICAgd2FpdCA9IFdlYkRyaXZlcldhaXQoYnJvd3NlciwgMTApCiAgICBicm93c2VyLmdldChPRkZJQ0lBTF9VUkwpCgogICAgZm9yIGkgaW4gcmFuZ2UoTUFYX1RSWSk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICB3YWl0LnVudGlsKEVDLmVsZW1lbnRfdG9fYmVfY2xpY2thYmxlKChCeS5DTEFTU19OQU1FLCAnY3VycmVudCcpKSkKICAgICAgICBleGNlcHQgVGltZW91dEV4Y2VwdGlvbjoKICAgICAgICAgICAgYnJvd3Nlci5yZWZyZXNoKCkKICAgICAgICAgICAgaWYgaSA9PSBNQVhfVFJZIC0gMToKICAgICAgICAgICAgICAgIGJyb3dzZXIuY2xvc2UoKSAKCiAgICBsaW5lc19ib3R0b24gPSBicm93c2VyLmZpbmRfZWxlbWVudHMoQnkuQ1NTX1NFTEVDVE9SLCAnI3pvbmVIZWFkZXIgdGQgYScpCgogICAgZm9yIGJvdHRvbiBpbiBsaW5lc19ib3R0b246CiAgICAgICAgYm90dG9uLmNsaWNrKCkKICAgICAgICBhc3NlcnQgYm90dG9uLmdldF9hdHRyaWJ1dGUoJ2NsYXNzJykgPT0gJ2N1cnJlbnQnCiAgICAgICAgbnVtX3N1YyArPSBSZWNvcmREZXRhaWxJbnNlcnQoY29ubiwgR2V0U3RhdGlvbnNSZWNvcmQoYnJvd3NlciwgYm90dG9uKSkKICAgICAgICB0aW1lLnNsZWVwKDIpCgogICAgcHJpbnQoJ3s6ZH0gcmVjb3JkcyBpbnNlcnRlZC4nLmZvcm1hdChudW1fc3VjKSkKICAgIAogICAgIyBUSFrnur/ot6/kuLrml4XmuLjmgKfotKjvvIzkuJTpnIDopoHljZXni6zkvZxHZW9jb2RpbmfnmoTorr7orqHvvIzmmoLkuI3kuojku6XogIPomZEKICAgIGNvbm4uZXhlY3V0ZSgnREVMRVRFIEZST00gYGd1YW5nemhvdS1tZXRyb2AgV0hFUkUgTGluZUNvZGUgTElLRSAiVEhaJSInKQogICAgCiAgICBNZXRyb0dlb0NvZGUoY29ubikgICPlsJHmlbDnq5nngrnlrZjlnKjlnLDpk4HlrpjmlrnlkozlnLDlm75BUEnpl7TnmoTnlKjlrZflt67lvILvvIzliKnnlKhTUUzmiYvliqjosIPmlbQKCiAgICBicm93c2VyLmNsb3NlKCkKICAgIGNvbm4uY2xvc2UoKQoKICAgIHJldHVybiBOb25lCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIE1haW4oKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHByaW50KCdHZW9jb2Rpbmcgc3RhdGlvbi4uLicsIHN0YXRpb24pCiAgICAgICAgdXJsID0gUGFyYW1zUGFja2FnaW5nKCd7OnN9KOWcsOmTgeermSknLmZvcm1hdChzdGF0aW9uKSkKCiAgICAgICAgdHJ5Ogo8fGZpbV9lbmR8Pg=="]
["a832de604ffa356800e987ed668516036ea3b7dc-3","a832de604ffa356800e987ed668516036ea3b7dc","PHxmaW1fcHJlZml4fD4KIiIiCldlYiBzZXJ2ZXIgc2NyaXB0IHRoYXQgZXhwb3NlcyBSRVNUIGVuZHBvaW50IGFuZCBwdXNoZXMgaW1hZ2VzIHRvIFJlZGlzIGZvciBjbGFzc2lmaWNhdGlvbiBieSBtb2RlbCBzZXJ2ZXIuIFBvbGxzClJlZGlzIGZvciByZXNwb25zZSBmcm9tIG1vZGVsIHNlcnZlci4KQWRhcHRlZCBmcm9tIGh0dHBzOi8vd3d3LnB5aW1hZ2VzZWFyY2guY29tLzIwMTgvMDIvMDUvZGVlcC1sZWFybmluZy1wcm9kdWN0aW9uLWtlcmFzLXJlZGlzLWZsYXNrLWFwYWNoZS8KIiIiCmltcG9ydCBiYXNlNjQKaW1wb3J0IGlvCmltcG9ydCBqc29uCmltcG9ydCBvcwppbXBvcnQgdGltZQppbXBvcnQgdXVpZAoKZnJvbSBrZXJhcy5wcmVwcm9jZXNzaW5nLmltYWdlIGltcG9ydCBpbWdfdG9fYXJyYXkKZnJvbSBrZXJhcy5hcHBsaWNhdGlvbnMgaW1wb3J0IGltYWdlbmV0X3V0aWxzCmltcG9ydCBudW1weSBhcyBucApmcm9tIFBJTCBpbXBvcnQgSW1hZ2UKaW1wb3J0IHJlZGlzCgpmcm9tIGZhc3RhcGkgaW1wb3J0IEZhc3RBUEksIEZpbGUsIEhUVFBFeGNlcHRpb24KZnJvbSBzdGFybGV0dGUucmVxdWVzdHMgaW1wb3J0IFJlcXVlc3QKCmFwcCA9IEZhc3RBUEkoKQpkYiA9IHJlZGlzLlN0cmljdFJlZGlzKGhvc3Q9b3MuZW52aXJvbi5nZXQoIlJFRElTX0hPU1QiKSkKCkNMSUVOVF9NQVhfVFJJRVMgPSBpbnQob3MuZW52aXJvbi5nZXQoIkNMSUVOVF9NQVhfVFJJRVMiKSkKCgpkZWYgcHJlcGFyZV9pbWFnZShpbWFnZSwgdGFyZ2V0KToKICAgICMgSWYgdGhlIGltYWdlIG1vZGUgaXMgbm90IFJHQiwgY29udmVydCBpdAogICAgaWYgaW1hZ2UubW9kZSAhPSAiUkdCIjoKICAgICAgICBpbWFnZSA9IGltYWdlLmNvbnZlcnQoIlJHQiIpCgogICAgIyBSZXNpemUgdGhlIGlucHV0IGltYWdlIGFuZCBwcmVwcm9jZXNzIGl0CiAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZSh0YXJnZXQpCiAgICBpbWFnZSA9IGltZ190b19hcnJheShpbWFnZSkKICAgIGltYWdlID0gbnAuZXhwYW5kX2RpbXMoaW1hZ2UsIGF4aXM9MCkKICAgIGltYWdlID0gaW1hZ2VuZXRfdXRpbHMucHJlcHJvY2Vzc19pbnB1dChpbWFnZSkKCiAgICAjIFJldHVybiB0aGUgcHJvY2Vzc2VkIGltYWdlCiAgICByZXR1cm4gaW1hZ2UKCgpAYXBwLmdldCgiLyIpCmRlZiBpbmRleCgpOgogICAgcmV0dXJuICJIZWxsbyBXb3JsZCEiCgoKQGFwcC5wb3N0KCIvcHJlZGljdCIpCmRlZiBwcmVkaWN0KHJlcXVlc3Q6IFJlcXVlc3QsIGltZ19maWxlOiBieXRlcz1GaWxlKC4uLikpOgogICAgZGF0YSA9IHsic3VjY2VzcyI6IEZhbHNlfQoKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQob3MuZW52aXJvbi5nZXQoIklNQUdFX0hFSUdIVCIpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQoKICAgICAgICAjIEVuc3VyZSBvdXIgTnVtUHkgYXJyYXkgaXMgQy1jb250aWd1b3VzIGFzIHdlbGwsIG90aGVyd2lzZSB3ZSB3b24ndCBiZSBhYmxlIHRvIHNlcmlhbGl6ZSBpdAogICAgICAgIGltYWdlID0gaW1hZ2UuY29weShvcmRlcj0iQyIpCgogICAgICAgICMgR2VuZXJhdGUgYW4gSUQgZm9yIHRoZSBjbGFzc2lmaWNhdGlvbiB0aGVuIGFkZCB0aGUgY2xhc3NpZmljYXRpb24gSUQgKyBpbWFnZSB0byB0aGUgcXVldWUKICAgICAgICBrID0gc3RyKHV1aWQudXVpZDQoKSkKICAgICAgICBpbWFnZSA9IGJhc2U2NC5iNjRlbmNvZGUoaW1hZ2UpLmRlY29kZSgidXRmLTgiKQogICAgICAgIGQgPSB7ImlkIjogaywgImltYWdlIjogaW1hZ2V9CiAgICAgICAgZGIucnB1c2gob3MuZW52aXJvbi5nZXQoIklNQUdFX1FVRVVFIiksIGpzb24uZHVtcHMoZCkpCgogICAgICAgICMgS2VlcCBsb29waW5nIGZvciBDTElFTlRfTUFYX1RSSUVTIHRpbWVzCiAgICAgICAgbnVtX3RyaWVzID0gMAogICAgICAgIHdoaWxlIG51bV90cmllcyA8IENMSUVOVF9NQVhfVFJJRVM6CiAgICAgICAgICAgIG51bV90cmllcyArPSAxCgogICAgICAgICAgICAjIEF0dGVtcHQgdG8gZ3JhYiB0aGUgb3V0cHV0IHByZWRpY3Rpb25zCiAgICAgICAgICAgIG91dHB1dCA9IGRiLmdldChrKQoKICAgICAgICAgICAgIyBDaGVjayB0byBzZWUgaWYgb3VyIG1vZGVsIGhhcyBjbGFzc2lmaWVkIHRoZSBpbnB1dCBpbWFnZQogICAgICAgICAgICBpZiBvdXRwdXQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAjIEFkZCB0aGUgb3V0cHV0IHByZWRpY3Rpb25zIHRvIG91ciBkYXRhIGRpY3Rpb25hcnkgc28gd2UgY2FuIHJldHVybiBpdCB0byB0aGUgY2xpZW50CiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICAgICBkYXRhWyJwcmVkaWN0aW9ucyJdID0ganNvbi5sb2FkcyhvdXRwdXQpCgogICAgICAgICAgICAgICAgIyBEZWxldGUgdGhlIHJlc3VsdCBmcm9tIHRoZSBkYXRhYmFzZSBhbmQgYnJlYWsgZnJvbSB0aGUgcG9sbGluZyBsb29wCiAgICAgICAgICAgICAgICBkYi5kZWxldGUoaykKICAgICAgICAgICAgICAgIGJyZWFrCgogICAgICAgICAgICAjIFNsZWVwIGZvciBhIHNtYWxsIGFtb3VudCB0byBnaXZlIHRoZSBtb2RlbCBhIGNoYW5jZSB0byBjbGFzc2lmeSB0aGUgaW5wdXQgaW1hZ2UKICAgICAgICAgICAgdGltZS5zbGVlcChmbG9hdChvcy5lbnZpcm9uLmdldCgiQ0xJRU5UX1NMRUVQIikpKQoKICAgICAgICAgICAgIyBJbmRpY2F0ZSB0aGF0IHRoZSByZXF1ZXN0IHdhcyBhIHN1Y2Nlc3MKICAgICAgICAgICAgZGF0YVsic3VjY2VzcyJdID0gVHJ1ZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJhaXNlIEhUVFBFeGNlcHRpb24oc3RhdHVzX2NvZGU9NDAwLCBkZXRhaWw9IlJlcXVlc3QgZmFpbGVkIGFmdGVyIHt9IHRyaWVzIi5mb3JtYXQoQ0xJRU5UX01BWF9UUklFUykpCgogICAgIyBSZXR1cm4gdGhlIGRhdGEgZGljdGlvbmFyeSBhcyBhIEpTT04gcmVzcG9uc2UKICAgIHJldHVybiBkYXRhCjx8ZmltX3N1ZmZpeHw+CiAgICBpZiByZXF1ZXN0Lm1ldGhvZCA9PSAiUE9TVCI6CiAgICAgICAgaW1hZ2UgPSBJbWFnZS5vcGVuKGlvLkJ5dGVzSU8oaW1nX2ZpbGUpKQogICAgICAgIGltYWdlID0gcHJlcGFyZV9pbWFnZShpbWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludChvcy5lbnZpcm9uLmdldCgiSU1BR0VfV0lEVEgiKSksCjx8ZmltX2VuZHw+"]
["9e4905eb4a21ff2d6b8b4f5f3fe3cb51f8fe28d6-1","9e4905eb4a21ff2d6b8b4f5f3fe3cb51f8fe28d6","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KCmZyb20gLm1vZGVscyBpbXBvcnQgQmFsYW5jZSwgQ3VycmVuY3ksIERlcG9zaXQsIFdpdGhkcmF3YWwKCgpjbGFzcyBCYWxhbmNlQWRtaW4oYWRtaW4uTW9kZWxBZG1pbik6CiAgICBmaWVsZHMgPSAoJ2N1cnJlbmN5X19zeW1ib2wnLCAnYW1vdW50JywgJ2xvY2tlZF9hbW91bnQnLCAndXNlcicpCiAgICBzZWFyY2hfZmllbGRzID0gKCd1c2VyX191c2VybmFtZScsICdjdXJyZW5jeV9fc3ltYm9sJykKCjx8ZmltX2hvbGV8PgoKY2xhc3MgRGVwb3NpdEFkbWluKGFkbWluLk1vZGVsQWRtaW4pOgogICAgZmllbGRzID0gKCdjdXJyZW5jeV9fc3ltYm9sJywgJ2Ftb3VudCcsICdzdGF0dXMnLCAnY29uZmlybWF0aW9ucycsICd1c2VyJykKICAgIHNlYXJjaF9maWVsZHMgPSAoJ3VzZXJfX3VzZXJuYW1lJywgJ2N1cnJlbmN5X19zeW1ib2wnLCAnc3RhdHVzJykKCmNsYXNzIFdpdGhkcmF3YWxBZG1pbihhZG1pbi5Nb2RlbEFkbWluKToKICAgIGZpZWxkcyA9ICgnY3VycmVuY3lfX3N5bWJvbCcsICdhbW91bnQnLCAnc3RhdHVzJywgJ2NvbmZpcm1hdGlvbnMnLCAndXNlcicpCiAgICBzZWFyY2hfZmllbGRzID0gKCd1c2VyX191c2VybmFtZScsICdjdXJyZW5jeV9fc3ltYm9sJywgJ3N0YXR1cycpCgphZG1pbi5zaXRlLnJlZ2lzdGVyKEJhbGFuY2UsIEJhbGFuY2VBZG1pbikKYWRtaW4uc2l0ZS5yZWdpc3RlcihDdXJyZW5jeSwgQ3VycmVuY3lBZG1pbikKYWRtaW4uc2l0ZS5yZWdpc3RlcihEZXBvc2l0LCBEZXBvc2l0QWRtaW4pCmFkbWluLnNpdGUucmVnaXN0ZXIoV2l0aGRyYXdhbCwgV2l0aGRyYXdhbEFkbWluKQo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgQ3VycmVuY3lBZG1pbihhZG1pbi5Nb2RlbEFkbWluKToKICAgIGZpZWxkcyA9ICgnbmFtZScsICdzeW1ib2wnKQoKPHxmaW1fZW5kfD4="]
["b5339404fdf65dfca3b7e47eff961508b2b631d2-2","b5339404fdf65dfca3b7e47eff961508b2b631d2","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgc3lzCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4Kc3lzLnBhdGguYXBwZW5kKCcuLicpCmZyb20gbGlicy5oZWxwZXJzIGltcG9ydCBnZXRfaW5wdXQKCgo8fGZpbV9lbmR8Pg=="]
["f952840a3e36014c318c0f45339da6c8a6cd7a51-2","f952840a3e36014c318c0f45339da6c8a6cd7a51","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKY2xhc3MgQmluYXJ5VHJlZShvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGtleT1Ob25lKToKICAgICAgICBzZWxmLmtleSA9IGtleQogICAgICAgIHNlbGYubGVmdCA9IE5vbmUKICAgICAgICBzZWxmLnJpZ2h0ID0gTm9uZQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpkZWYgY2hlY2tfYmluYXJ5X3NlYXJjaF90cmVlKHRyZWUpOgogICAgcGFzcwoKZGVmIGlzX2JpbmFyeV9zZWFyY2hfdHJlZSh0cmVlKToKPHxmaW1fZW5kfD4="]
["cda56ac0ec1cbfce6a3a3a39fdb797e25a24e86d-1","cda56ac0ec1cbfce6a3a3a39fdb797e25a24e86d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5c2Nhbm5lcmJpdC5zY2FuIGFzIHNiCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKCiMgVGVzdCBmdW5jdGlvbgpkZWYgdGVzdF9sb2dsKHgseSx6KToKICByZXR1cm4gLTAuNSooICh4LTEwKSoqMiArICh5LTE1KSoqMiArICh6KzMpKioyICkgIyBmaXRuZXNzIGZ1bmN0aW9uIHRvIG1heGltaXNlIChsb2ctbGlrZWxpaG9vZCkKCiMgT3ZlcnJpZGUgc29tZSBzY2FubmVyIHNldHRpbmdzICh0aGlzIGlzIGEgbGl0dGxlIHVnbHkgZm9yIG5vdykKIyBDYW4gbWFrZSBpdCBhIGxpdHRsZSBuaWNlciB3aXRoIGRlZmF1bHRkaWN0IGFuZCBzb21lIHJlY3Vyc2lvbgpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdApkZWYgcmVjX2RkKCk6CiAgICByZXR1cm4gZGVmYXVsdGRpY3QocmVjX2RkKQpzZXR0aW5ncyA9IHJlY19kZCgpICMgVXNlcyBhIG5ldyBkaWN0IGFzIGRlZmF1bHQgdmFsdWUgd2hlbiBhY2Nlc3Npbmcgbm9uLWV4aXN0YW50IGtleXMKc2V0dGluZ3NbIlNjYW5uZXIiXVsic2Nhbm5lcnMiXVsibXVsdGluZXN0Il0gPSB7InRvbCI6IDAuNSwgIm5saXZlIjogNTAwfSAjIENvbmZpZ3VyZWQgZm9yIHF1aWNrIGFuZCBkaXJ0eSBzY2FuIAoKIyBDcmVhdGUgc2NhbiBtYW5hZ2VyIG9iamVjdApteXNjYW4gPSBzYi5TY2FuKHRlc3RfbG9nbCwgYm91bmRzPVtbMS4sIDQwLl1dICogMywgcHJpb3JfdHlwZXM9WyJsb2ciLCAiZmxhdCIsICJsb2ciXSwgc2Nhbm5lcj0ibXVsdGluZXN0Iiwgc2V0dGluZ3M9c2V0dGluZ3MpCm15c2Nhbi5zY2FuKCkKCjx8ZmltX2hvbGV8PgpwcmludChoZGY1LmdldF9wYXJhbV9uYW1lcygpKQoKIyBCZXN0LWZpdCBwYXJhbWV0ZXJzCnByaW50KGhkZjUuZ2V0X2Jlc3RfZml0KCJ4IikpCnByaW50KGhkZjUuZ2V0X2Jlc3RfZml0KCJ5IikpCnByaW50KGhkZjUuZ2V0X2Jlc3RfZml0KCJ6IikpCnByaW50KGhkZjUuZ2V0X21pbl9jaGlfc3F1YXJlZCgpKQoKIyBucC5hcnJheSBvZiBwYXJhbWV0ZXIKcHJpbnQoaGRmNS5nZXRfcGFyYW0oInoiKSkKcHJpbnQoaGRmNS5nZXRfbG9nbGlrZSgpKQoKIyBQbG90IHBhaXJzIG9mIHBhcmFtZXRlcnMKaGRmNS5tYWtlX3Bsb3QoIngiLCAieSIpCmhkZjUubWFrZV9wbG90KCJ4IiwgIkxvZ0xpa2UiKQoKIyBQbG90IHByb2ZpbGUgbGlrZWxpaG9vZCAocmVxdWlyZXMgYW4gYXhpcykKZmlnID0gcGx0LmZpZ3VyZShmaWdzaXplPSgxMiw0KSkKYXggPSBmaWcuYWRkX3N1YnBsb3QoMTIxKQpoZGY1LnBsb3RfcHJvZmlsZV9saWtlbGlob29kKGF4LCJ4IiwieSIpCmF4ID0gZmlnLmFkZF9zdWJwbG90KDEyMikKaGRmNS5wbG90X3Byb2ZpbGVfbGlrZWxpaG9vZChheCwieCIsInoiKQpwbHQudGlnaHRfbGF5b3V0KCkKZmlnLnNhdmVmaWcoInNjYW5fb2JqZWN0X3Rlc3RfbG9nbC5wbmciKQoKIyBUaGlzIGlzIHN0aWxsIGFuIEhERjUtbGlrZSBvYmplY3QgKHdpdGggdGhlIHJvb3QgYmVpbmcgdGhlIGdyb3VwIGNvbnRhaW5pbmcgdGhlIGRhdGFzZXRzIGZvciB0aGlzIHNjYW4pIAojIGUuZy4sIHlvdSBjYW4gZG8KcHJpbnQoaGRmNVsiZGVmYXVsdDo6eCJdKQoKPHxmaW1fc3VmZml4fD4KIyBSZXRyaWV2ZSBoNXB5IGdyb3VwIG9iamVjdCwgYXVnbWVudGVkIHdpdGggc29tZSBoZWxwZnVsIHJvdXRpbmVzCmhkZjUgPSBteXNjYW4uZ2V0X2hkZjUoKQoKIyBWYXJpYWJsZSBuYW1lcyBhbHdheXMgbWF0Y2ggdGhlIG9uZXMgdXNlZCBpbiAibG9nbGlrZSIKPHxmaW1fZW5kfD4="]
["23f344aad404bfeefda55f7f54d2b49e1820a72d-1","23f344aad404bfeefda55f7f54d2b49e1820a72d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZApmcm9tIGV4dHJhY3RfdGV4dCBpbXBvcnQgdHJhaW5fcmVzdW1lcywgdGVzdF9yZXN1bWVzLCB0cmFpbiwgdGVzdApmcm9tIHByb2Nlc3NpbmcgaW1wb3J0IHRleHRfcHJvY2Vzc2luZwoKcHJvY2Vzc2VkX3Jlc3VtZXNfdHJhaW4gPSBbXQpwcm9jZXNzZWRfcmVzdW1lc190ZXN0ID0gW10KCjx8ZmltX2hvbGV8Pgpmb3IgcmVzdW1lIGluIHRlc3RfcmVzdW1lczoKICAgIHByb2Nlc3NlZF9yZXN1bWUgPSB0ZXh0X3Byb2Nlc3NpbmcocmVzdW1lKQogICAgcHJvY2Vzc2VkX3Jlc3VtZXNfdGVzdC5hcHBlbmQocHJvY2Vzc2VkX3Jlc3VtZSkKCnByaW50KGxlbihwcm9jZXNzZWRfcmVzdW1lc190cmFpbikpCnByaW50KGxlbihwcm9jZXNzZWRfcmVzdW1lc190ZXN0KSkKCnByaW50KHByb2Nlc3NlZF9yZXN1bWVzX3RyYWluWzBdKQpwcmludCgnPT09PT09PT09PT09PT09PT09JykKcHJpbnQocHJvY2Vzc2VkX3Jlc3VtZXNfdGVzdFswXSkKCmRlZiBkYXRhZnJhbWUocmVzdW1lX2xpc3QsIGRmKToKICAgIHJlc3VtZXMgPSAgcGQuRGF0YUZyYW1lKHJlc3VtZV9saXN0LCBjb2x1bW5zID0gWydyZXN1bWVzJ10pCiAgICBkYXRhZnJhbWUgPSBwZC5jb25jYXQoW2RmLCByZXN1bWVzXSwgYXhpcyA9IDEpCiAgICBkYXRhZnJhbWUuZHJvcCgnQ2FuZGlkYXRlSUQnLCBheGlzID0gMSwgaW5wbGFjZSA9IFRydWUpCiAgICByZXR1cm4gZGF0YWZyYW1lCgp0cmFpbl9kZiA9IGRhdGFmcmFtZShwcm9jZXNzZWRfcmVzdW1lc190cmFpbiwgdHJhaW4pCnRlc3RfZGYgPSBkYXRhZnJhbWUocHJvY2Vzc2VkX3Jlc3VtZXNfdGVzdCwgdGVzdCkKCnByaW50KHRyYWluX2RmLmhlYWQoKSkKcHJpbnQodGVzdF9kZi5oZWFkKCkpCjx8ZmltX3N1ZmZpeHw+CmZvciByZXN1bWUgaW4gdHJhaW5fcmVzdW1lczoKICAgIHByb2Nlc3NlZF9yZXN1bWUgPSB0ZXh0X3Byb2Nlc3NpbmcocmVzdW1lKQogICAgcHJvY2Vzc2VkX3Jlc3VtZXNfdHJhaW4uYXBwZW5kKHByb2Nlc3NlZF9yZXN1bWUpCgo8fGZpbV9lbmR8Pg=="]
["23b8c33ae80a6fdf2d50bfefe6f1409e4caee8a4-3","23b8c33ae80a6fdf2d50bfefe6f1409e4caee8a4","PHxmaW1fcHJlZml4fD4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyAyNTIuIE1lZXRpbmcgUm9vbXMKIyAKIyBEZXNjcmlwdGlvbjoKIyBHaXZlbiBhbiBhcnJheSBvZiBtZWV0aW5nIHRpbWUgaW50ZXJ2YWxzIGNvbnNpc3Rpbmcgb2Ygc3RhcnQgYW5kIGVuZCB0aW1lcyBbW3MxLGUxXSxbczIsZTJdLC4uLl0gCiMgKHNpIDwgZWkpLCBkZXRlcm1pbmUgaWYgYSBwZXJzb24gY291bGQgYXR0ZW5kIGFsbCBtZWV0aW5ncy4KIyAKIyBFeGFtcGxlIDE6CiMgSW5wdXQ6IFtbMCwzMF0sWzUsMTBdLFsxNSwyMF1dCiMgT3V0cHV0OiBmYWxzZQojIAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgRXhhbXBsZSAyOgojIElucHV0OiBbWzcsMTBdLFsyLDRdXQojIE91dHB1dDogdHJ1ZQojIAo8fGZpbV9lbmR8Pg=="]
["b56a8c7ff779918244e13723a5b5cba14ba947b4-1","b56a8c7ff779918244e13723a5b5cba14ba947b4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCmltcG9ydCBqc29uCmltcG9ydCB0aW1lCgpjbGFzcyBTdHJlYW1QaWNrZXI6CiAgICBkZWYgX19pbml0X18oc2VsZiwgVXNlcklkLCBza2lwX3ZlcmlmeSA9IEZhbHNlKToKICAgICAgICAnJycKICAgICAgICBpbml0aWFsaXplIExvbmdaaHUgc3RyZWFtcGlja2VyIHdpdGggVXNlcklkCiAgICAgICAgVXNlcklkOiAgICAgICAgIExvbmdaaHUtTGl2ZSB1c2VyIElkCiAgICAgICAgc2tpcF92ZXJpZnk6ICAgIHNraXAgdmVyaWZpY2F0aW9uIHdoaWxlIGluaXRpYWxpemluZwogICAgICAgICcnJwogICAgICAgIHNlbGYuX19uYW1lID0gIkxvbmdaaHUiCiAgICAgICAgc2VsZi5fX1VzZXJJZCA9IFVzZXJJZAogICAgICAgIHNlbGYuX19oZWFkZXJfTG9uZ1podSA9IHsKICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBydjo3Ni4wKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94Lzc2LjAnLAogICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1jYWNoZScKICAgICAgICAgICAgfQogICAgICAgIGlmIG5vdCBza2lwX3ZlcmlmeToKICAgICAgICAgICAgc2VsZi5fX3ZlcmlmeSgpCgogICAgZGVmIGdldE5hbWUoc2VsZik6CiAgICAgICAgJycnCiAgICAgICAgcmV0dXJuIG5hbWUgb2YgdGhpcwogICAgICAgICcnJwogICAgICAgIHJldHVybiBzZWxmLl9fbmFtZQoKICAgIGRlZiBfX3ZlcmlmeShzZWxmKToKICAgICAgICAnJycKICAgICAgICB2ZXJpZnkgaWYgSWQgb3IgdGhpcyBtb2R1bGUgaXMgdmFsaWQKICAgICAgICAnJycKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYuZ2V0U3RyZWFtVVJMKCkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHByaW50KCJJbnB1dCBJZCBvciB0aGlzIG1vZHVsZSBpcyBpbnZhbGlkISIpCiAgICAgICAgICAgIGV4aXQoKQoKICAgIGRlZiBnZXRTdHJlYW1VUkwoc2VsZik6CiAgICAgICAgJycnCiAgICAgICAgdHJ5IHRvIGNoZWNrIGxpdmUgc3RhdHVzCiAgICAgICAgT25BaXIgcmV0dXJuOiBbVHJ1ZSwgcm9vbWlkLCBjaGVja3RpbWUsIHJvb211cmwsIGZ1bGxuYW1lIG9mIG91dHB1dCBmaWxlLCBuaWNrbmFtZSwgY29udGludW91cyBzdHJlYW0gdXJsXQogICAgICAgIE5vdCBPbkFpciByZXR1cm46IFtGYWxzZSwgcm9vbWlkLCBjaGVja3RpbWUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmVdCiAgICAgICAgJycnCiAgICAgICAgIyBnZXQgbGl2ZSBzdGF0dXMgYnkgdXNlcmlkCiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgdHJ5Ogo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgdXNlcmluZm8gPSBqc29uLmxvYWRzKHVzZXJpbmZvX3N0cikKICAgICAgICBjaGVja3RpbWUgPSB0aW1lLmxvY2FsdGltZSgpCiAgICAgICAgaWYgdXNlcmluZm9bJ3Jvb20nXVsnaXNMaXZlJ10gPT0gRmFsc2U6CiAgICAgICAgICAgIHJldHVybiBbRmFsc2UsICIiLCBjaGVja3RpbWUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmVdCiAgICAgICAgbmlja25hbWUgPSB1c2VyaW5mb1sndXNlciddWyduaWNrbmFtZSddCiAgICAgICAgcm9vbUlkID0gc3RyKHVzZXJpbmZvWydyb29tJ11bJ2lkJ10pCiAgICAgICAgIyBnZXQgc3RyZWFtIHVybAogICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMuZ2V0KCJodHRwOi8vbGl2ZXN0cmVhbS5sb25nemh1LmNvbS9saXZlL2dldGxpdmVQbGF5dXJsP2hvc3RQdWxsVHlwZT0yJmlzQWR2YW5jZWQ9dHJ1ZSZwbGF5VXJsc1R5cGU9MSZyb29tSWQ9IiArIHJvb21JZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzID0gc2VsZi5fX2hlYWRlcl9Mb25nWmh1LCB0aW1lb3V0ID0gMTApCiAgICAgICAgICAgICAgICBzdHJlYW1pbmZvX3N0ciA9IHJlc3BvbnNlLnRleHQKICAgICAgICAgICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgc3RyZWFtaW5mbyA9IGpzb24ubG9hZHMoc3RyZWFtaW5mb19zdHIpCiAgICAgICAgdXJsID0gc3RyZWFtaW5mb1sncGxheUxpbmVzJ11bMF1bJ3VybHMnXVtsZW4oc3RyZWFtaW5mb1sncGxheUxpbmVzJ11bMF1bJ3VybHMnXSkgLSAxXVsnc2VjdXJpdHlVcmwnXQogICAgICAgIHJvb211cmwgPSBzdHJlYW1pbmZvWydsaXZlVXJsJ10KICAgICAgICByZXR1cm4gW1RydWUsIHJvb21JZCwgY2hlY2t0aW1lLCAKICAgICAgICAgICAgICAgIHJvb211cmwsIAogICAgICAgICAgICAgICAgdGltZS5zdHJmdGltZSgiKCVZLSVtLSVkLSVIJU0lUykiLCBjaGVja3RpbWUpICsgc2VsZi5fX1VzZXJJZCArICIuZmx2IiwgCiAgICAgICAgICAgICAgICBuaWNrbmFtZSwgdXJsXQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5nZXQoImh0dHA6Ly91c2VyYXBpLmxvbmd6aHUuY29tL3VzZXIvc3BhY2VoZWFkZXI/dXNlcmlkPSIgKyBzZWxmLl9fVXNlcklkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBzZWxmLl9faGVhZGVyX0xvbmdaaHUsIHRpbWVvdXQgPSAxMCkKICAgICAgICAgICAgICAgIHVzZXJpbmZvX3N0ciA9IHJlc3BvbnNlLnRleHQKICAgICAgICAgICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKPHxmaW1fZW5kfD4="]
["7b1471e2e8cac9ea774e35124237b29246e45d36-1","7b1471e2e8cac9ea774e35124237b29246e45d36","PHxmaW1fcHJlZml4fD4KIiIic2V0dXB0b29scyBpbnN0YWxsIHNjcmlwdCIiIgoKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCgpmcm9tIHNldHVwdG9vbHMgaW1wb3J0IGZpbmRfcGFja2FnZXMKZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cAoKTU9EVUxFX05BTUUgPSAiaW5uYW56aSIKCklOSVRfRklMRSA9ICJfX2luaXRfXy5weSIKVkVSU0lPTl9JTkRJQ0FUT1IgPSAiX192ZXJzaW9uX18iICAjIFRoaXMgc2V0cyB0aGUgdmVyc2lvbiBpbiBJTklUX0ZJTEUKCndpdGggb3BlbigKICAgIChQYXRoKE1PRFVMRV9OQU1FKSAvIElOSVRfRklMRSkuZXhwYW5kdXNlcigpLnJlc29sdmUoKSwKICAgIGVuY29kaW5nPSJ1dGYtOCIsCiAgICBlcnJvcnM9InN1cnJvZ2F0ZWVzY2FwZSIsCikgYXMgZjogICMgTG9vayBpbiBtb2R1bGUncyBfX2luaXRfXyBmb3IgX192ZXJzaW9uX18KICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKFZFUlNJT05fSU5ESUNBVE9SKToKICAgICAgICAgICAgTU9EVUxFX1ZFUiA9IGxpbmUuc3BsaXQoIj0iLCAxKVsxXS5zdHJpcCgpWzE6LTFdCiAgICAgICAgICAgIGJyZWFrCiAgICBpZiBub3QgTU9EVUxFX1ZFUjoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICBmIntWRVJTSU9OX0lORElDQVRPUn0gaXMgbm90IGRlZmluZWQgaW4ge01PRFVMRV9OQU1FfS97SU5JVF9GSUxFfSIsCiAgICAgICAgKQoKRVhUUkFTID0gewogICAgInRlc3QiOiBbCiAgICAgICAgImJhbmRpdCB+PSAxLjcuMCIsCiAgICAgICAgImJsYWNrIH49IDIxLjEyYjAiLAogICAgICAgICJjb3ZlcmFnZVt0b21sXSB+PSA2LjIuMCIsCiAgICAgICAgImZsYWtlOCB+PSA0LjAuMSIsCiAgICAgICAgImZsYWtlOC1idWdiZWFyIH49IDIxLjExLjI5IiwKICAgICAgICAiZmxha2U4LWNvbXByZWhlbnNpb25zIH49IDMuOC4wIiwKICAgICAgICAiZmxha2U4LWlzb3J0IH49IDQuMS4xIiwKICAgICAgICAiZmxha2U4LWxvZ2dpbmctZm9ybWF0IH49IDAuNi4wIiwKICAgICAgICAiZmxha2U4LXByaW50IH49IDQuMC4wIiwKICAgICAgICAiZmxha2U4LXB5dGVzdCB+PSAxLjMiLAogICAgICAgICJmbGFrZTgtcHl0ZXN0LXN0eWxlIH49IDEuNi4wIiwKICAgICAgICAiZmxha2U4LXF1b3RlcyB+PSAzLjMuMCIsCiAgICAgICAgImZsYWtlOC1yZXR1cm4gfj0gMS4xLjMiLAogICAgICAgICJmbGFrZTgtdHlwaW5nLWltcG9ydHMgfj0gMS4xMi4wIiwKICAgICAgICAiaXNvcnQgfj0gNS4xMC4xIiwKICAgICAgICAibXlweT09MC45MzEiLAogICAgICAgICJwZXA4LW5hbWluZyB+PSAwLjEyLjEiLAogICAgICAgICJweWxpbnQgfj0gMi4xMi4yIiwKICAgICAgICAicHl0ZXN0IH49IDYuMi41IiwKICAgICAgICAicHl0ZXN0LWJhbmRpdCB+PSAwLjYuMSIsCiAgICAgICAgInB5dGVzdC1ibGFjayB+PSAwLjMuMTIiLAogICAgICAgICJweXRlc3QtY292IH49IDMuMC4wIiwKICAgICAgICAicHl0ZXN0LWRlcGVuZGVuY3kgfj0gMC41LjEiLAogICAgICAgICJweXRlc3QtZmxha2U4IH49IDEuMC43IiwKICAgICAgICAicHl0ZXN0LW15cHkgfj0gMC44LjEiLAogICAgICAgICJweXRlc3QtcHlsaW50IH49IDAuMTguMCIsCiAgICAgICAgInB5dXBncmFkZS1kaXJlY3RvcmllcyB+PSAwLjIuMCIsCiAgICAgICAgInNwaGlueCB+PSA0LjMuMSIsCiAgICAgICAgInRyeWNlcmF0b3BzIH49IDEuMC4wIiwKPHxmaW1faG9sZXw+CiAgICBdLAp9CgpzZXR1cCgKICAgIG5hbWU9TU9EVUxFX05BTUUsCiAgICB2ZXJzaW9uPU1PRFVMRV9WRVIsCiAgICB1cmw9Imh0dHBzOi8vZ2l0aHViLmNvbS9udGgxMHNkL2lubmFuemkiLAogICAgbGljZW5zZT0iTUlUIiwKICAgIGF1dGhvcj0iR2FyeSBLd29uZyIsCiAgICBhdXRob3JfZW1haWw9Im50aDEwc2RAZ21haWwuY29tIiwKICAgIGRlc2NyaXB0aW9uPSJCb290c3RyYXAgYSBwcm9qZWN0IGVhc2lseSIsCiAgICAjIGxvbmdfZGVzY3JpcHRpb249cmVhZCgiUkVBRE1FLnJzdCIpLAogICAgIyBlbnRyeV9wb2ludHM9ewogICAgIyAgICAgImNvbnNvbGVfc2NyaXB0cyI6IFtmIntNT0RVTEVfTkFNRX0gPSB7TU9EVUxFX05BTUV9LnN0YXJ0Om1haW4iXSwKICAgICMgfSwKICAgIHBhY2thZ2VzPWZpbmRfcGFja2FnZXMoZXhjbHVkZT0oInRlc3RzIiwpKSwKICAgIHBhY2thZ2VfZGF0YT17CiAgICAgICAgTU9EVUxFX05BTUU6IFsKICAgICAgICAgICAgInB5LnR5cGVkIiwKICAgICAgICBdLAogICAgfSwKICAgIGluc3RhbGxfcmVxdWlyZXM9WyAgIyBJbmNsdWRlIHJlbGV2YW50IHR5cGVzLSogcGFja2FnZSwgZS5nLiB0eXBlcy10b21sICYgdG9tbAogICAgICAgICJwYW5kYXMgfj0gMS4zLjMiLAogICAgICAgICJwYW5kYXMtc3R1YnMgfj0gMS4yLjAuMTkiLAogICAgICAgICJ0b21sIH49IDAuMTAuMiIsCiAgICAgICAgInNldHVwdG9vbHMgPj0gNjAuMC41IiwKICAgICAgICAidHlwZXMtc2V0dXB0b29scyA+PSA1Ny40LjIiLAogICAgICAgICJ0eXBlcy10b21sIH49IDAuMTAuMSIsICAjIFRlbXBvcmFyaWx5IGZvciBpbmZyYXN0cnVjdHVyZSBzdHVmZiBvZiBzb21lIHBhY2thZ2VzCiAgICAgICAgIndoZWVsID49IDAuMzcuMCIsCiAgICBdLAogICAgZXh0cmFzX3JlcXVpcmU9RVhUUkFTLAogICAgcHl0aG9uX3JlcXVpcmVzPSI+PSAzLjEwIiwKICAgIHppcF9zYWZlPUZhbHNlLAogICAgY2xhc3NpZmllcnM9WwogICAgICAgICJEZXZlbG9wbWVudCBTdGF0dXMgOjogMiAtIFByZS1BbHBoYSIsCiAgICAgICAgIkludGVuZGVkIEF1ZGllbmNlIDo6IERldmVsb3BlcnMiLAogICAgICAgICJMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNSVQgTGljZW5zZSIsCiAgICAgICAgIk9wZXJhdGluZyBTeXN0ZW0gOjogUE9TSVgiLAogICAgICAgICJPcGVyYXRpbmcgU3lzdGVtIDo6IFVuaXgiLAogICAgICAgICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24iLAogICAgICAgICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24iLAogICAgICAgICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMyIsCiAgICAgICAgIlByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzLjEwIiwKICAgICAgICAiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IEltcGxlbWVudGF0aW9uIDo6IENQeXRob24iLAogICAgICAgICJUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBUZXN0aW5nIiwKICAgICAgICAiVG9waWMgOjogVXRpbGl0aWVzIiwKICAgIF0sCikKPHxmaW1fc3VmZml4fD4KICAgICAgICAidnVsdHVyZSB+PSAyLjMiLAo8fGZpbV9lbmR8Pg=="]
["239dcdcad68d1206092b1435ee0c2be8244152aa-2","239dcdcad68d1206092b1435ee0c2be8244152aa","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiIiIgo6QXV0aG9yIFBhdHJpayBWYWxrb3ZpYwo6Q3JlYXRlZCAzMS4wOC4yMDE3IDEyOjExCjpMaWNlbmNlIE1JVApQYXJ0IG9mIGdyYW1tcHkKCgpPcmlnaW5hbCBpbXBsZW1lbnRhdGlvbjogaHR0cHM6Ly9naXRodWIuY29tL2FwaWV1bS93ZWFrcmVmbGlzdApDaGFuZ2VzOiBMaXN0IHJhaXNlIFRyZWVEZWxldGVkRXhjZXB0aW9uIGluc3RlYWQgb2YgcmVkdWNpbmcgaXRzIHNpemUKIiIiCgppbXBvcnQgd2Vha3JlZgpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCwgT3B0aW9uYWwsIEFueSwgSXRlcmF0b3IsIEl0ZXJhYmxlLCBDYWxsYWJsZQoKZnJvbSAuLi5leGNlcHRpb25zIGltcG9ydCBUcmVlRGVsZXRlZEV4Y2VwdGlvbgoKCmNsYXNzIF9XZWFrTGlzdChsaXN0KToKICAgICIiIgogICAgQ2xhc3MgdGhhdCBiZWhhdmUgbGlrZSBsaXN0LCBidXQgc3RvcmUganVzdCB3ZWFrcmVmIG9mIGl0ZW1zLgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZW1zPU5vbmUpOgogICAgICAgICMgdHlwZTogKE9wdGlvbmFsW0xpc3Rbb2JqZWN0XV0pIC0+IF9XZWFrTGlzdAogICAgICAgICIiIgogICAgICAgIENyZWF0ZSBpbnN0YW5jZSBvZiBfV2Vha2xpc3QuCiAgICAgICAgOnBhcmFtIGl0ZW1zOiBPcHRpb25hbCBpdGVyYWJsZSBvYmplY3Qgd2l0aCB2YWx1ZXMgdG8gYWRkLgogICAgICAgICIiIgogICAgICAgIGxpc3QuX19pbml0X18oc2VsZiwgc2VsZi5fcmVmcyhpdGVtcyBvciBbXSkpCgogICAgZGVmIHZhbHVlKHNlbGYsIGl0ZW0pOgogICAgICAgICMgdHlwZTogKEFueSkgLT4gQW55CiAgICAgICAgIiIiCiAgICAgICAgUmV0dXJuIHZhbHVlIHN0b3JlZCBpbiB3ZWFrcmVmLgogICAgICAgIDpwYXJhbSBpdGVtOiBPYmplY3QgZnJvbSB3aGljaCBnZXQgdGhlIHZhbHVlLgogICAgICAgIDpyZXR1cm46IFZhbHVlIHN0b3JlZCBpbiB0aGUgd2Vha3JlZiwgb3RoZXJ3aXNlIG9yaWdpbmFsIHZhbHVlLgogICAgICAgIDpyYWlzZSBUcmVlRGVsZXRlZEV4Y2VwdGlvbjogd2hlbiB3ZWFrcmVmIGlzIGFscmVhZHkgZGVsZXRlZC4KICAgICAgICAiIiIKICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZW0sIHdlYWtyZWYuUmVmZXJlbmNlVHlwZSk6CiAgICAgICAgICAgIGlmIGl0ZW0oKSBpcyBOb25lOgogICAgICAgICAgICAgICAgcmFpc2UgVHJlZURlbGV0ZWRFeGNlcHRpb24oKQogICAgICAgICAgICByZXR1cm4gaXRlbSgpCiAgICAgICAgcmV0dXJuIGl0ZW0KCiAgICBkZWYgcmVmKHNlbGYsIGl0ZW0pOgogICAgICAgICMgdHlwZTogKEFueSkgLT4gd2Vha3JlZi5SZWZlcmVuY2VUeXBlCiAgICAgICAgIiIiCiAgICAgICAgQ3JlYXRlIHdlYWtyZWYgZm9yIHRoZSBwYXJhbWV0ZXIuCiAgICAgICAgOnBhcmFtIGl0ZW06IE9iamVjdCBmcm9tIHdoaWNoIG1ha2UgdGhlIHdlYWsgcmVmLgogICAgICAgIDpyZXR1cm46IFdlYWtyZWYgb2YgcGFyYW1ldGVyLCBwYXJhbWV0ZXIgaWYgZXhjZXB0aW9uIG9jY3Vycy4KICAgICAgICAiIiIKICAgICAgICB0cnk6CiAgICAgICAgICAgIGl0ZW0gPSB3ZWFrcmVmLnJlZihpdGVtKQogICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgIHJldHVybiBpdGVtCgogICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBpdGVtKToKICAgICAgICAjIHR5cGUoQW55KSAtPiBib29sCiAgICAgICAgIiIiCiAgICAgICAgQ2hlY2sgaWYgaXMgcGFyYW1ldGVyIGluIFdlYWtMaXN0Lgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgOnBhcmFtIGl0ZW06IE9iamVjdCB0byBjaGVjayB0aGUgZXhpc3RlbmNlLgogICAgICAgIDpyZXR1cm46IFRydWUgaWYgaXMgcGFyYW1ldGVyIGluIFdlYWtMaXN0LCBmYWxzZSBvdGhlcndpc2UuCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIGxpc3QuX19jb250YWluc19fKHNlbGYsIHNlbGYucmVmKGl0ZW0pKQo8fGZpbV9lbmR8Pg=="]
["c8cd7ddd180e09a78738996f3d02472a00822374-3","c8cd7ddd180e09a78738996f3d02472a00822374","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgogICAgd2l0aCBvcGVuKGZpbGVfcGF0aCkgYXMgZjoKICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoJ1xuJykKICAgICAgICAgICAgZGF0YV9hcnJheSA9IGxpbmUuc3BsaXQoIiAiKQogICAgICAgICAgICBwcmludCBkYXRhX2FycmF5CgpyZWFkX2RhdGEoInBkLnR4dCIpCgo8fGZpbV9zdWZmaXh8PgojIS91c3IvYmluL3B5dGhvbgojIGNvZGluZz11dGYtOAoKZGVmIHJlYWRfZGF0YShmaWxlX3BhdGgpOgo8fGZpbV9lbmR8Pg=="]
["550a33258cf1a265f5b5e897b32ee49259e6acc5-2","550a33258cf1a265f5b5e897b32ee49259e6acc5","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIKQ3JlYXRlZCBvbiBUaHUgSmFuIDI0IDEwOjIzOjIwIDIwMTkKCkBhdXRob3I6IE5pY2NvbG8nIERhbCBTYW50bwpAZW1haWwgOiBuaWNjb2xvLmRhbHNhbnRvQGVwZmwuY2gKIiIiCjx8ZmltX2hvbGV8PgogICAgCiAgICBvdXRwdXRfZmlsZSA9IG9wZW4oIF9maWxlX25hbWUsICd3KycgKQogICAgCiAgICBmb3IgaU5zIGluIHJhbmdlKCBfbWF0cml4LnNoYXBlWzBdICk6CiAgICAgICAgZm9yIGlRIGluIHJhbmdlKCBfbWF0cml4LnNoYXBlWzFdICk6CiAgICAgICAgICAgIG91dHB1dF9maWxlLndyaXRlKCAiJS4xMGciICUgX21hdHJpeFtpTnMsIGlRXSApCgogICAgICAgICAgICBpZiBpUSA8IF9tYXRyaXguc2hhcGVbMV0gLSAxOgogICAgICAgICAgICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoICIgIiApCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBvdXRwdXRfZmlsZS53cml0ZSggIlxuIiApCiAgICAKICAgIG91dHB1dF9maWxlLmNsb3NlKCApCgpkZWYgc2F2ZV92ZWN0b3IoIF9tYXRyaXgsIF9maWxlX25hbWUgKToKICAgIAogICAgb3V0cHV0X2ZpbGUgPSBvcGVuKCBfZmlsZV9uYW1lLCAndysnICkKICAgIAogICAgZm9yIGlOcyBpbiByYW5nZSggX21hdHJpeC5zaGFwZVswXSApOgogICAgICAgIG91dHB1dF9maWxlLndyaXRlKCAiJS4xMGcgIiAlIF9tYXRyaXhbaU5zXSApCiAgICAKICAgIG91dHB1dF9maWxlLmNsb3NlKCApCjx8ZmltX3N1ZmZpeHw+CgppbXBvcnQgbnVtcHkgYXMgbnAKCmRlZiBzYXZlX21hdHJpeCggX21hdHJpeCwgX2ZpbGVfbmFtZSApOgo8fGZpbV9lbmR8Pg=="]
["eeaa159eb78f98e4a8c763bac1884167f384363d-5","eeaa159eb78f98e4a8c763bac1884167f384363d","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCgpmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdXJsZW5jb2RlCmZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZSBhcyBFVAppbXBvcnQganNvbgppbXBvcnQgbG9nZ2luZwpmcm9tIGlvIGltcG9ydCBCeXRlc0lPCgpmcm9tIHpvcnJvIGltcG9ydCBnZXRodWIsIHNsZWVwCmZyb20gem9ycm8uaHR0cCBpbXBvcnQgSFRUUENsaWVudApmcm9tIHpvcnJvLmRpIGltcG9ydCBoYXNfZGVwZW5kZW5jaWVzLCBkZXBlbmRlbmN5CmltcG9ydCBjYWlybwoKZnJvbSAuYmFzZSBpbXBvcnQgV2lkZ2V0CmZyb20gdGlsZW5vbC50aGVtZSBpbXBvcnQgVGhlbWUKZnJvbSB0aWxlbm9sLnV0aWwgaW1wb3J0IGZldGNodXJsCgoKbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pClFVRVJZX1VSTCA9ICdodHRwOi8vcXVlcnkueWFob29hcGlzLmNvbS92MS9wdWJsaWMveXFsJwpXRUFUSEVSX1VSTCA9ICdodHRwOi8vd2VhdGhlci55YWhvb2FwaXMuY29tL2ZvcmVjYXN0cnNzPycKV0VBVEhFUl9OUyA9ICdodHRwOi8veG1sLndlYXRoZXIueWFob28uY29tL25zL3Jzcy8xLjAnCkRFRkFVTFRfUElDID0gJ2h0dHA6Ly9sLnlpbWcuY29tL2EvaS91cy9ud3Mvd2VhdGhlci9nci97Y29uZGl0aW9uX2NvZGV9ZC5wbmcnCgoKQGhhc19kZXBlbmRlbmNpZXMKY2xhc3MgWWFob29XZWF0aGVyKFdpZGdldCk6CgogICAgdGFnc190b19mZXRjaCA9ICgKICAgICAgICAnbG9jYXRpb24nLAogICAgICAgICd1bml0cycsCiAgICAgICAgJ3dpbmQnLAogICAgICAgICdhdG1vc3BoZXJlJywKICAgICAgICAnYXN0cm9ub215JywKICAgICAgICAnY29uZGl0aW9uJywKICAgICkKCiAgICB0aGVtZSA9IGRlcGVuZGVuY3koVGhlbWUsICd0aGVtZScpCgogICAgZGVmIF9faW5pdF9fKAogICAgICAgICAgICBzZWxmLCBsb2NhdGlvbiwgKiwKICAgICAgICAgICAgcGljdHVyZV91cmw9REVGQVVMVF9QSUMsCiAgICAgICAgICAgIGZvcm1hdD0ne2NvbmRpdGlvbl90ZW1wfcKwe3VuaXRzX3RlbXBlcmF0dXJlfScsCiAgICAgICAgICAgIG1ldHJpYz1UcnVlLCByaWdodD1GYWxzZSk6CiAgICAgICAgIiIiCiAgICAgICAgTG9jYXRpb24gc2hvdWxkIGJlIGVpdGhlciBhIHdvZWlkIG9yIGEgbmFtZSBzdHJpbmcuCgogICAgICAgIENoYW5nZSBtZXRyaWMgdG8gRmFsc2UgZm9yIGltcGVyaWFsIHVuaXRzLgoKICAgICAgICBTZXQgYHBpY3R1cmVfdXJsYCB0byBOb25lIHRvIGhpZGUgcGljdHVyZS4KCiAgICAgICAgQXZhaWxhYmxlIGZvcm1hdCB2YXJpYWJsZXM6CiAgICAgICAgICAgIGFzdHJvbm9teV9zdW5yaXNlLCBhc3Ryb25vbXlfc3Vuc2V0CiAgICAgICAgICAgIGF0bW9zcGhlcmVfaHVtaWRpdHksIGF0bW9zcGhlcmVfdmlzaWJpbGl0eSwKICAgICAgICAgICAgYXRtb3NwaGVyZV9wcmVzc3VyZSwgYXRtb3NwaGVyZV9yaXNpbmcKICAgICAgICAgICAgY29uZGl0aW9uX3RleHQsIGNvbmRpdGlvbl9jb2RlLCBjb25kaXRpb25fdGVtcCwgY29uZGl0aW9uX2RhdGUKICAgICAgICAgICAgbG9jYXRpb25fY2l0eS4gbG9jYXRpb25fcmVnaW9uLCBsb2NhdGlvbl9jb3VudHJ5CiAgICAgICAgICAgIHVuaXRzX3RlbXBlcmF0dXJlLCB1bml0c19kaXN0YW5jZSwgdW5pdHNfcHJlc3N1cmUsIHVuaXRzX3NwZWVkCiAgICAgICAgICAgIHdpbmRfY2hpbGwsIHdpbmRfZGlyZWN0aW9uLCB3aW5kX3NwZWVkCiAgICAgICAgIiIiCiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhyaWdodD1yaWdodCkKICAgICAgICBzZWxmLmxvY2F0aW9uID0gbG9jYXRpb24KICAgICAgICBzZWxmLmZvcm1hdCA9IGZvcm1hdAogICAgICAgIHNlbGYubWV0cmljID0gbWV0cmljCiAgICAgICAgc2VsZi5waWN0dXJlX3VybCA9IHBpY3R1cmVfdXJsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgc2VsZi50ZXh0ID0gJy0tJwogICAgICAgIHNlbGYuaW1hZ2UgPSBOb25lCiAgICAgICAgc2VsZi5vbGRpbWdfdXJsID0gTm9uZQo8fGZpbV9lbmR8Pg=="]
["f9f5da56c34faf7d60a837bd2620a80db9744ebb-1","f9f5da56c34faf7d60a837bd2620a80db9744ebb","PHxmaW1fcHJlZml4fD4KZnJvbSBsb2NhbHRpbGVzZXJ2ZXIudGlsZXNlcnZlciBpbXBvcnQgcmVzdCwgdmlld3MKZnJvbSBsb2NhbHRpbGVzZXJ2ZXIudGlsZXNlcnZlci5ibHVlcHJpbnQgaW1wb3J0IHRpbGVzZXJ2ZXIKCiMgVmlld3MvcGFnZXMKdGlsZXNlcnZlci5hZGRfdXJsX3J1bGUoIi8iLCB2aWV3X2Z1bmM9dmlld3MuQ2VzaXVtVmlld2VyLmFzX3ZpZXcoImluZGV4IikpCnRpbGVzZXJ2ZXIuYWRkX3VybF9ydWxlKCIvcm9pLyIsIHZpZXdfZnVuYz12aWV3cy5HZW9KU1ZpZXdlci5hc192aWV3KCJyb2kiKSkKdGlsZXNlcnZlci5hZGRfdXJsX3J1bGUoIi9leGFtcGxlcyIsIHZpZXdfZnVuYz12aWV3cy5FeGFtcGxlQ2hvaWNlcy5hc192aWV3KCJleGFtcGxlcyIpKQp0aWxlc2VydmVyLmFkZF91cmxfcnVsZSgiL3NwbGl0LyIsIHZpZXdfZnVuYz12aWV3cy5DZXNpdW1TcGxpdFZpZXdlci5hc192aWV3KCJzcGxpdCIpKQp0aWxlc2VydmVyLmFkZF91cmxfcnVsZSgiL3NwbGl0L2Zvcm0vIiwgdmlld19mdW5jPXZpZXdzLlNwbGl0Vmlld0Zvcm0uYXNfdmlldygic3BsaXQtZm9ybSIpKQoKIyBSRVNUIGVuZHBvaW50cwpyZXN0LmFwaS5hZGRfcmVzb3VyY2UoCiAgICByZXN0LlRodW1ibmFpbFZpZXcsCiAgICAiL3RodW1ibmFpbCIsCiAgICBlbmRwb2ludD0idGh1bWJuYWlsIiwKKQpyZXN0LmFwaS5hZGRfcmVzb3VyY2UoCiAgICByZXN0Lk1ldGFkYXRhVmlldywKICAgICIvbWV0YWRhdGEiLAogICAgZW5kcG9pbnQ9Im1ldGFkYXRhIiwKKQpyZXN0LmFwaS5hZGRfcmVzb3VyY2UoCiAgICByZXN0LkJvdW5kc1ZpZXcsCiAgICAiL2JvdW5kcyIsCiAgICBlbmRwb2ludD0iYm91bmRzIiwKKQpyZXN0LmFwaS5hZGRfcmVzb3VyY2UoCiAgICByZXN0LlRpbGVWaWV3LAogICAgIi90aWxlcy88aW50Ono+LzxpbnQ6eD4vPGludDp5Pi5wbmciLAogICAgZW5kcG9pbnQ9InRpbGVzIiwKKQpyZXN0LmFwaS5hZGRfcmVzb3VyY2UoCiAgICByZXN0LlRpbGVEZWJ1Z1ZpZXcsCiAgICAiL3RpbGVzL2RlYnVnLzxpbnQ6ej4vPGludDp4Pi88aW50Onk+LnBuZyIsCjx8ZmltX2hvbGV8PgopCnJlc3QuYXBpLmFkZF9yZXNvdXJjZSgKICAgIHJlc3QuUmVnaW9uV29ybGRWaWV3LAogICAgIi93b3JsZC9yZWdpb24udGlmIiwKICAgIGVuZHBvaW50PSJyZWdpb24td29ybGQiLAopCnJlc3QuYXBpLmFkZF9yZXNvdXJjZSgKICAgIHJlc3QuUmVnaW9uUGl4ZWxWaWV3LAogICAgIi9waXhlbC9yZWdpb24udGlmIiwKICAgIGVuZHBvaW50PSJyZWdpb24tcGl4ZWwiLAopCnJlc3QuYXBpLmFkZF9yZXNvdXJjZSgKICAgIHJlc3QuTGlzdFBhbGV0dGVzLAogICAgIi9wYWxldHRlcyIsCiAgICBlbmRwb2ludD0icGFsZXR0ZXMiLAopCnJlc3QuYXBpLmFkZF9yZXNvdXJjZSgKICAgIHJlc3QuUGl4ZWxWaWV3LAogICAgIi9waXhlbCIsCiAgICBlbmRwb2ludD0icGl4ZWwiLAopCnJlc3QuYXBpLmFkZF9yZXNvdXJjZSgKICAgIHJlc3QuSGlzdG9ncmFtVmlldywKICAgICIvaGlzdG9ncmFtIiwKICAgIGVuZHBvaW50PSJoaXN0b2dyYW0iLAopCnJlc3QuYXBpLmFkZF9yZXNvdXJjZSgKICAgIHJlc3QuTGlzdFRpbGVTb3VyY2VzLAogICAgIi9zb3VyY2VzIiwKICAgIGVuZHBvaW50PSJzb3VyY2VzIiwKKQo8fGZpbV9zdWZmaXh8PgogICAgZW5kcG9pbnQ9InRpbGVzLWRlYnVnIiwKPHxmaW1fZW5kfD4="]
["f9303ea446fd0b4d3e2c040d5451ed9b7fc2cd15-2","f9303ea446fd0b4d3e2c040d5451ed9b7fc2cd15","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNzdgo8fGZpbV9ob2xlfD4KCmZyb20gdHlwaW5nIGltcG9ydCBBbnksIEl0ZXJhYmxlLCBPcHRpb25hbCwgVHVwbGUKCmltcG9ydCBweXBpY3QuY2FwaQoKCl9QSUNUID0gJ3BpY3QnCgoKZGVmIF9nZXRfcGljdF9jb21tYW5kKCkgLT4gc3RyOgogICAgcGljdGNtZCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBfUElDVCkKICAgIGlmIG9zLnBhdGguZXhpc3RzKHBpY3RjbWQpOgogICAgICAgIHJldHVybiBwaWN0Y21kCiAgICByZXR1cm4gX1BJQ1QKCgpkZWYgX3BpY3QoCiAgICAgICAgbW9kZWxfZmlsZTogc3RyLAogICAgICAgIG9yZGVyOiBPcHRpb25hbFtpbnRdID0gTm9uZSwKICAgICAgICByYW5kb21fc2VlZDogT3B0aW9uYWxbaW50XSA9IE5vbmUsCiAgICAgICAgKiwKICAgICAgICB1c2Vfc3VicHJvY2VzczogYm9vbCA9IFRydWUpIC0+IHN0cjoKICAgICMgVE9ETzogc3VwcG9ydCBtb3JlIG9wdGlvbnMKICAgIGNtZGxpbmUgPSBbX2dldF9waWN0X2NvbW1hbmQoKSwgbW9kZWxfZmlsZV0KICAgIGlmIG9yZGVyIGlzIG5vdCBOb25lOgogICAgICAgIGNtZGxpbmUgKz0gWycvbzp7fScuZm9ybWF0KG9yZGVyKV0KICAgIGlmIHJhbmRvbV9zZWVkIGlzIG5vdCBOb25lOgogICAgICAgIGNtZGxpbmUgKz0gWycvcjp7fScuZm9ybWF0KHJhbmRvbV9zZWVkKV0KCiAgICBpZiB1c2Vfc3VicHJvY2VzczoKICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kbGluZSkuZGVjb2RlKCd1dGYtOCcpCiAgICBjbWRsaW5lLnBvcCgwKQogICAgcmV0dXJuIHB5cGljdC5jYXBpLmV4ZWN1dGUoY21kbGluZSkKCgpkZWYgZnJvbV9tb2RlbCgKICAgICAgICBtb2RlbDogc3RyLAogICAgICAgICosCiAgICAgICAgdXNlX3N1YnByb2Nlc3M6IGJvb2wgPSBGYWxzZSwKICAgICAgICAqKmt3YXJnczogQW55KSAtPiBUdXBsZVtJdGVyYWJsZVtzdHJdLCBJdGVyYWJsZVtJdGVyYWJsZVtzdHJdXV06CiAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpIGFzIGY6CiAgICAgICAgZi53cml0ZShtb2RlbC5lbmNvZGUoJ3V0Zi04JykpCiAgICAgICAgZi5mbHVzaCgpCiAgICAgICAgb3V0cHV0ID0gX3BpY3QoZi5uYW1lLCB1c2Vfc3VicHJvY2Vzcz11c2Vfc3VicHJvY2VzcywgKiprd2FyZ3MpCiAgICByb3dzID0gW3IgZm9yIHIgaW4gY3N2LnJlYWRlcihpby5TdHJpbmdJTyhvdXRwdXQpLCBkZWxpbWl0ZXI9J1x0JyldCiAgICByZXR1cm4gcm93c1swXSwgcm93c1sxOl0KPHxmaW1fc3VmZml4fD4KaW1wb3J0IGlvCmltcG9ydCBvcwppbXBvcnQgc3VicHJvY2VzcwppbXBvcnQgdGVtcGZpbGUKPHxmaW1fZW5kfD4="]
["a82543ea568b48b2a15c0e28551e1ec7dad3739a-1","a82543ea568b48b2a15c0e28551e1ec7dad3739a","PHxmaW1fcHJlZml4fD4KIyBhbWF6b25fYm9va3MKc3BhcnNlX2ZlYXR1cmVzID0gWyd1c2VySUQnLCAnaXRlbUlEJywgJ2NhdGVJRCddCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmRlbnNlX2ZlYXR1cmVzID0gW10KCmJlaGF2aW9yX2ZlYXR1cmVfbGlzdCA9IFsiaXRlbUlEIiwgImNhdGVJRCJdCjx8ZmltX2VuZHw+"]
["c8aa8bebeb6d4b68f96f51bbbed926ccc7fd8335-3","c8aa8bebeb6d4b68f96f51bbbed926ccc7fd8335","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgcm9zcHkKaW1wb3J0IHJvc2xpYgppbXBvcnQgc2VyaWFsCmZyb20gdGltZSBpbXBvcnQgdGltZSwgc2xlZXAKZnJvbSBzdGRfbXNncy5tc2cgaW1wb3J0IFN0cmluZywgRmxvYXQ2NApmcm9tIHNlbnNvcl9tc2dzLm1zZyBpbXBvcnQgSW1hZ2UsIEltdQppbXBvcnQgdGYKI2Zyb20gZ2VvbWV0cnlfbXNncy5tc2cgaW1wb3J0IFBvc2VTdGFtcGVkCiNUT0RPIG5lZWQgdG8gbG9vayBhdCB0aGUgc2lnbnMgZm9yIHRoZSBwaXRjaCwgeWF3LCBhbmQgdGhydXN0IGNvbW1hbmRzCmNsYXNzIFNlcmlhbEJyaWRnZSgpOgogICAgI01FQVNVUkVfVE9QSUMgPSAibWVhc3VyZW1lbnRzIgogICAgI0lNVV9UT1BJQyA9ICJpbXVfZGF0YSIKICAgICNDT01QQVNTX1RPUElDID0gImFuZ2xlX3RvX3RydWVfbm9ydGgiCiAgICAjQ09NTUFORF9UT1BJQyA9ICJjb21tYW5kIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYmVkUG9ydD0nL2Rldi9zZXJpYWwwJywgbWJlZEJhdWQgPSAxMTUyMDAsIG1iZWRVcGRhdGVJbnRlcnZhbD0xLjI1KToKICAgICAgICAjcm9zcHkubG9naW5mbygiU2VyaWFsIG5vZGUgc3RhcnRlZC4iKQogICAgICAgIHByaW50KCdTZXJpYWwgbm9kZSBzdGFydGVkLicpCiAgICAgICAgCiAgICAgICAgIyBzZWxmLmltdV9wdWIgPSByb3NweS5QdWJsaXNoZXIoImltdV9kYXRhIiwgSW11LCBxdWV1ZV9zaXplPTEpCiAgICAgICAgIyBzZWxmLmNvbXBhc3NfcHViID0gcm9zcHkuUHVibGlzaGVyKCJhbmdsZV90b190cnVlX25vcnRoIiwgRmxvYXQ2NCwgcXVldWVfc2l6ZT0xKQogICAgICAgICMgcm9zcHkuU3Vic2NyaWJlcigiY29tbWFuZCIsIFN0cmluZywgc2VsZi5jYWxsYmFjaykKCiAgICAgICAgc2VsZi5jbWRfYXJyX29yZGVyID0gWydzdGFydCcsICdwaXRjaCcsICd5YXcnLCAndGhydXN0JywgJ2ZyZXF1ZW5jeSddCiAgICAgICAgc2VsZi5fbWJlZFNlcmlhbCA9IHNlcmlhbC5TZXJpYWwobWJlZFBvcnQsIGJhdWRyYXRlPW1iZWRCYXVkLCB0aW1lb3V0PTAsIGJ5dGVzaXplPXNlcmlhbC5FSUdIVEJJVFMsIHBhcml0eSA9IHNlcmlhbC5QQVJJVFlfTk9ORSwgc3RvcGJpdHMgPSBzZXJpYWwuU1RPUEJJVFNfT05FKQogICAgICAgIHNlbGYuX21iZWRVcGRhdGVJbnRlcnZhbCA9IG1iZWRVcGRhdGVJbnRlcnZhbAogICAgICAgIHNlbGYuQ01EX01BWCA9IDI1NQogICAgICAgIHNlbGYuQ01EX01JTiA9IDEKCiAgICAgICAgc2VsZi5idWYgPSBbXQogICAgICAgIHNlbGYuaW5jb21pbmdTdHJpbmdMZW5ndGggPSAzMQoKICAgICAgICBzZWxmLmNtZF9yZWNlaXZlZCA9IEZhbHNlCiAgICAgICAgc2VsZi5waXRjaCA9IDEyOAogICAgICAgIHNlbGYueWF3ID0gMTI4CiAgICAgICAgc2VsZi50aHJ1c3QgPSAyNTUKICAgICAgICBzZWxmLmZyZXF1ZW5jeSA9IDEyOAogICAgICAgIHNlbGYuRE9fTk9USElORyA9IFsyNTUsMTM1LDEzNSwxLDg1XQoKICAgIGRlZiB3cml0ZUNtZEFycmF5KHNlbGYsIGNtZCk6CiAgICAgICAgYnl0ZWNtZHMgPSBzZWxmLnNhZmVDbWRUb0J5dGVzKGNtZCkKICAgICAgICBzZWxmLndyaXRlQnl0ZXMoYnl0ZWNtZHMpCgogICAgZGVmIHdyaXRlQnl0ZXMoc2VsZiwgYnl0ZWNtZHMpOgogICAgICAgIHNlbGYuX21iZWRTZXJpYWwud3JpdGUoYnl0ZWNtZHMpCiAgICAgICAgaWYgYnl0ZWNtZHNbLTFdICE9IDA6CiAgICAgICAgICAgIHNlbGYuX21iZWRTZXJpYWwud3JpdGUoYnl0ZWFycmF5KFswXSkpCiAgICAgICAgc2VsZi5fbWJlZFNlcmlhbC5mbHVzaCgpCgogICAgZGVmIHNhZmVDbWRUb0J5dGVzKHNlbGYsIGNtZCwgY21kVHlwZT0nYnl0ZUFycmF5JywgbnVsbFRlcm1pbmF0ZT1GYWxzZSk6CiAgICAgICAgaWYgY21kVHlwZSA9PSAiYnl0ZUFycmF5IjoKICAgICAgICAgICAgZm9yIGksdmFsIGluIGVudW1lcmF0ZShjbWQpOgogICAgICAgICAgICAgICAgY21kW2ldID0gbWF4KG1pbihjbWRbaV0sc2VsZi5DTURfTUFYKSxzZWxmLkNNRF9NSU4pCiAgICAgICAgZWxpZiBjbWRUeXBlID09ICJkaWN0IjoKICAgICAgICAgICAgZm9yIGsgaW4gc2VsZi5zZWxmLmNtZF9hcnJfb3JkZXI6CiAgICAgICAgICAgICAgICBjbWRba10gPSBtYXgobWluKGNtZFtrXSwgc2VsZi5DTURfTUFYKSwgc2VsZi5DTURfTUlOKQoKICAgICAgICByZXR1cm4gc2VsZi5jbWRUb0J5dGVzKGNtZCwgY21kVHlwZSwgbnVsbFRlcm1pbmF0ZSkKCiAgICBkZWYgY21kVG9CeXRlcyhzZWxmLCBjbWQsIGNtZFR5cGU9J2J5dGVBcnJheScsIG51bGxUZXJtaW5hdGU9RmFsc2UpOgogICAgICAgIGlmIGNtZFR5cGUgPT0gImRpY3QiOgogICAgICAgICAgICByZXMgPSBbY21kW2NtZF9rZXldIGZvciBjbWRfa2V5IGluIHNlbGYuY21kX2Fycl9vcmRlcl0KICAgICAgICBlbHNlOgogICAgICAgICAgICByZXMgPSBjbWQKCiAgICAgICAgYXNzZXJ0KGxlbihyZXMpID09IGxlbihzZWxmLmNtZF9hcnJfb3JkZXIpKQogICAgICAgIGlmIG51bGxUZXJtaW5hdGU6CiAgICAgICAgICAgIHJlcy5hcHBlbmQoMCkKCiAgICAgICAgcmV0dXJuIGJ5dGVhcnJheShyZXMpCgogICAgZGVmIHdyaXRlT25jZShzZWxmLCBjbWQpOgogICAgICAgIHNlbGYuX21iZWRTZXJpYWwuZmx1c2hJbnB1dCgpCiAgICAgICAgc2VsZi5fbWJlZFNlcmlhbC5mbHVzaE91dHB1dCgpCiAgICAgICAgc2VsZi53cml0ZUJ5dGVzKGNtZCkKCiAgICBkZWYgY29udmVydChzZWxmLCBzKToKICAgICAgICBzdHIxID0gIiIKICAgICAgICByZXR1cm4oc3RyMS5qb2luKHMpKQoKICAgIGRlZiBwYXJzZVNlbnNvckRhdGEoc2VsZiwgZGF0YSk6CiAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgiICIsIiIpCiAgICAgICAgYXJyID0gZGF0YS5zcGxpdCgiLCIpCiAgICAgICAgdmFsdWVzID0gW2Zsb2F0KGkpIGZvciBpIGluIGFycl0KICAgICAgICByZXR1cm4gdmFsdWVzCgogICAgIyBkZWYgbGlzdGVuKHNlbGYpOgogICAgIyAgICAgd2hpbGUgbm90IHJvc3B5LmlzX3NodXRkb3duKCk6CiAgICAjICAgICAgICAgaWYgc2VsZi5fbWJlZFNlcmlhbC5pbldhaXRpbmcoKToKICAgICMgICAgICAgICAgICAgI2J5dGVzVG9SZWFkID0gc2VsZi5fbWJlZFNlcmlhbC5pbldhaXRpbmcoKQogICAgIyAgICAgICAgICAgICB4ID0gc2VsZi5fbWJlZFNlcmlhbC5yZWFkX3VudGlsKCkKICAgICMgICAgICAgICAgICAgc2VsZi5idWYuYXBwZW5kKHgpCiAgICAjICAgICAgICAgICAgIGlmIGxlbihzZWxmLmJ1ZikgPiBzZWxmLmluY29taW5nU3RyaW5nTGVuZ3RoOgogICAgIyAgICAgICAgICAgICAgICAgc2VsZi5fbWJlZFNlcmlhbC5mbHVzaCgpCiAgICAjICAgICAgICAgICAgICAgICBtc2cgPSBzZWxmLmNvbnZlcnQoc2VsZi5idWYpCiAgICAjICAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5wYXJzZVNlbnNvckRhdGEobXNnKQogICAgIyAgICAgICAgICAgICAgICAgcm9zcHkubG9naW5mbyhkYXRhKQogICAgIyAgICAgICAgICAgICAgICAgcXVhdF9hcnJheSA9IHRmLnRyYW5zZm9ybWF0aW9ucy5xdWF0ZXJuaW9uX2Zyb21fZXVsZXIoZGF0YVsxXSwgZGF0YVswXSwgZGF0YVsyXSkKICAgICMgICAgICAgICAgICAgICAgIGltdV9tc2cgPSBJbXUoKQogICAgIyAgICAgICAgICAgICAgICAgaW11X21zZy5vcmllbnRhdGlvbi53ID0gcXVhdF9hcnJheVswXQogICAgIyAgICAgICAgICAgICAgICAgaW11X21zZy5vcmllbnRhdGlvbi54ID0gcXVhdF9hcnJheVsxXQogICAgIyAgICAgICAgICAgICAgICAgaW11X21zZy5vcmllbnRhdGlvbi55ID0gcXVhdF9hcnJheVsyXQogICAgIyAgICAgICAgICAgICAgICAgaW11X21zZy5vcmllbnRhdGlvbi56ID0gcXVhdF9hcnJheVszXQogICAgIyAgICAgICAgICAgICAgICAgc2VsZi5pbXVfcHViLnB1Ymxpc2goaW11X21zZykKICAgICMgICAgICAgICAgICAgICAgIGFuZ2xlX3RvX3RydWVfbm9ydGggPSBGbG9hdDY0KCkKICAgICMgICAgICAgICAgICAgICAgIGFuZ2xlX3RvX3RydWVfbm9ydGguZGF0YSA9IGRhdGFbM10KICAgICMgICAgICAgICAgICAgICAgIHNlbGYuY29tcGFzc19wdWIucHVibGlzaChhbmdsZV90b190cnVlX25vcnRoKQogICAgIyAgICAgICAgICAgICAgICAgc2VsZi5idWYgPSBbXQoKICAgIGRlZiBoZWFkaW5nX2NhbGxiYWNrKHNlbGYsIHJvc19kYXRhKToKICAgICAgICBzZWxmLmNtZF9yZWNlaXZlZCA9IFRydWUKICAgICAgICBzZWxmLnlhdyA9IGludCgxMjggKyAoMTI3ICpyb3NfZGF0YS5kYXRhKSkKCiAgICBkZWYgcGl0Y2hfY2FsbGJhY2soc2VsZiwgcm9zX2RhdGEpOgogICAgICAgIHNlbGYucGl0Y2ggPSBpbnQoMTI4IC0gKDEyNyAqIHJvc19kYXRhLmRhdGEpKQogICAgCiAgICBkZWYgdGhydXN0X2NhbGxiYWNrKHNlbGYsIHJvc19kYXRhKToKICAgICAgICBzZWxmLnRocnVzdCA9IGludCgxMjggLSAoMTI3ICogcm9zX2RhdGEuZGF0YSkpCiAgICAgICAgI3NlbGYuZnJlcXVlbmN5ID0gPz8gKHNob3VsZCBmcmVxdWVuY3kgYmUgZGVwZW5kZW50IG9uIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBmaXNoIGFuZCB0aGUgdGFyZ2V0PykKICAgIAogICAgZGVmIHdyaXRlKHNlbGYpOgogICAgICAgIHJhdGUgPSByb3NweS5SYXRlKDI0KQogICAgICAgIHdoaWxlIG5vdCByb3NweS5pc19zaHV0ZG93bigpOgogICAgICAgICAgICAjaWYgbmV3IGNvbW1hbmRzIGhhdmUgYmVlbiByZWNlaXZlZCwgd3JpdGUgYW4gdXBkYXRlZCBjbWQgYXJyYXksIG90aGVyd2lzZSB3cml0ZSAoZG8gbm90aGluZykKICAgICAgICAgICAgaWYgc2VsZi5jbWRfcmVjZWl2ZWQ6CiAgICAgICAgICAgICAgICBhcnIgPSBbMjU1LCBzZWxmLnBpdGNoLCBzZWxmLnlhdywgc2VsZi50aHJ1c3QsIHNlbGYuZnJlcXVlbmN5XQogICAgICAgICAgICAgICAgc2VsZi53cml0ZU9uY2UoYXJyKQogICAgICAgICAgICAgICAgI3ByaW50KGFycikKICAgICAgICAgICAgICAgICNyb3NweS5sb2dpbmZvKGFycikKICAgICAgICAgICAgICAgIHNlbGYuY21kX3JlY2VpdmVkID0gRmFsc2UKICAgICAgICAgICAgI2Vsc2U6CiAgICAgICAgICAgICMgICAgc2VsZi53cml0ZU9uY2Uoc2VsZi5ET19OT1RISU5HKQogICAgICAgICAgICByYXRlLnNsZWVwKCkKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBpbXBvcnQgc3lzCiAgICAjIHVwZGF0ZV9oeiA9IDI0CiAgICByb3NweS5pbml0X25vZGUoJ3NlcmlhbCcsIGFub255bW91cz1UcnVlKQogICAgcGlTZXJpYWwgPSBTZXJpYWxCcmlkZ2UoKQoKICAgIHJvc3B5LlN1YnNjcmliZXIoJ2hlYWRpbmdfY21kJywgRmxvYXQ2NCwgcGlTZXJpYWwuaGVhZGluZ19jYWxsYmFjaykKICAgIHJvc3B5LlN1YnNjcmliZXIoJ3BpdGNoX2NtZCcsIEZsb2F0NjQsIHBpU2VyaWFsLnBpdGNoX2NhbGxiYWNrKQogICAgcm9zcHkuU3Vic2NyaWJlcigndGhydXN0X2NtZCcsIEZsb2F0NjQsIHBpU2VyaWFsLnRocnVzdF9jYWxsYmFjaykKICAgIHByaW50KCJcblNlcmlhbCBOb2RlOiBCZWdpbm5pbmcgYXQgMjRoeiIpCiAgICBwaVNlcmlhbC53cml0ZSgpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHByaW50KCJcblNlcmlhbCBOb2RlOiBkb25lXG4iKQo8fGZpbV9lbmR8Pg=="]
["66d0b20fd271f5f73a9908939d07e69b5765734b-1","66d0b20fd271f5f73a9908939d07e69b5765734b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aApmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBPcHRpb25hbAoKZnJvbSBzY2hlbWEgaW1wb3J0IFNjaGVtYQoKZnJvbSBkZXYgaW1wb3J0IGVudmlyb25tZW50CmZyb20gZGV2LmhlbHBlcnMgaW1wb3J0IHJ1bl9jb21tYW5kCmZyb20gZGV2LmhlbHBlcnMuaG9tZWJyZXcgaW1wb3J0IEhvbWVicmV3SGVscGVyCmZyb20gZGV2LmhlbHBlcnMuc2hhZG93ZW52IGltcG9ydCBTaGFkb3dlbnZIZWxwZXIKZnJvbSBkZXYudGFzayBpbXBvcnQgVGFzawoKCmNsYXNzIFB5dGhvbihUYXNrKToKICAgIF9fc2NoZW1hX18gPSBTY2hlbWEoc3RyKQogICAgX19kZXNjcmlwdGlvbl9fID0gJ0luc3RhbGwgYSBzcGVjaWZpYyBQeXRob24gdmVyc2lvbicKCiAgICBkZWYgaW5pdChzZWxmLCB2ZXJzaW9uOiBzdHIpIC0+IE5vbmU6CiAgICAgICAgc2VsZi5weXRob25fcGF0aCA9IHNlbGYuZ2V0X3B5dGhvbl9wYXRoKHZlcnNpb24pCiAgICAgICAgc2VsZi52aXJ0dWFsZW52X3BhdGggPSBzZWxmLmdldF92aXJ0dWFsZW52X3BhdGgodmVyc2lvbikKCiAgICBkZWYgdXAoc2VsZiwgYXJnczogT3B0aW9uYWxbQW55XSwgZXh0cmFfYXJnczogT3B0aW9uYWxbQW55XSkgLT4gTm9uZToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGlmIG5vdCBhcmdzOgogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgdmVyc2lvbiA9IGFyZ3MKPHxmaW1fZW5kfD4="]
["9b05bad5552f99110095fbb3b605bba0642726e4-2","9b05bad5552f99110095fbb3b605bba0642726e4","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBkamFuZ28uY29yZS5tYW5hZ2VtZW50LmJhc2UgaW1wb3J0IEJhc2VDb21tYW5kCmZyb20gLi4uIGltcG9ydCB1dGlscwpmcm9tIGFyZ3BhcnNlIGltcG9ydCBSYXdUZXh0SGVscEZvcm1hdHRlcgoKCmNsYXNzIENvbW1hbmQoQmFzZUNvbW1hbmQpOgogICAgaGVscCA9ICcnJ1RleHQgU2VhcmNoIHRvb2xib3guIE1haW5seSBhYm91dCBFbGFzdGljU2VhcmNoIGluZGV4aW5nLgoKYWN0aW9uOgogIGxpc3QgKGxzKQogICAgbGlzdCB0aGUgaW5kZXhlcwogIHJlYnVpbGRfaW5kZXggKHJpKQogICAgcmVidWlsZCB0aGUgaW5kZXgKICAgICh0cmFuc2Zvcm0gdGhlIGt3aWMgZmlyc3QgaWYgbmVlZGVkKQogIGNsZWFyX2luZGV4IChjaSkKICAgIGRlbGV0ZSB0aGUgaW5kZXgKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogIHRyYW5zZm9ybV9rd2ljICh0aykKICAgIHRyYW5mb3JtIHRoZSBrd2ljLW91dCBYTUwgZmlsZSBleHBvcnRlZCBmcm9tIExlbW1pbmcKICAgIGludG8gYW5vdGhlciBYTUwgZmlsZSB0aGF0IGNhbiBiZSBkaXJlY3RseSBpbmRleGVkCgo8fGZpbV9lbmR8Pg=="]
["9babe9f462be4e19415e6cddbca7ff48cc8d7bf7-3","9babe9f462be4e19415e6cddbca7ff48cc8d7bf7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gY29yZS5zcGFya19ydW50aW1lIGltcG9ydCBTcGFya1J1bnRpbWUKZnJvbSBjb3JlLnVkZl9mdW5jdGlvbiBpbXBvcnQgcmVnaXN0ZXJfdWRmCmZyb20gZHNsLmV4ZWN1dGUgaW1wb3J0IFhRTEV4ZWMsIFhRTEV4ZWNMaXN0ZW5lcgoKCmNsYXNzIFBsYXRmb3JtTWFuYWdlcjoKICAgIGNvbmZpZyA9IE5vbmUKICAgIGxpc3RlbmVycyA9IFtdCgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHBhc3MKCiAgICBkZWYgcmVnaXN0ZXIoc2VsZik6CiAgICAgICAgcGFzcwoKICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYpOgogICAgICAgIHBhc3MKCiAgICBkZWYgc3RhcnRfaHR0cF9zZXJ2ZXIoc2VsZiwgaXAsIHBvcnQpOgogICAgICAgIHBhc3MKCiAgICBkZWYgc3RhcnRfdGhyaWZ0X3NlcnZlcihzZWxmKToKICAgICAgICBwYXNzCgogICAgZGVmIGdldF9ydW50aW1lKHNlbGYpOgogICAgICAgIHJldHVybiBTcGFya1J1bnRpbWUoc2VsZi5jb25maWcpCjx8ZmltX2hvbGV8PgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgcnVuKGNscywgX3BhcmFtcywgcmVfcnVuPUZhbHNlKToKICAgICAgICBwYXJhbXMgPSBjbHMuY29uZmlnID0gX3BhcmFtcy5wcAoKICAgICAgICB0ZW1wX3BhcmFtcyA9IHtpOiBwYXJhbXNbaV0gZm9yIGkgaW4gcGFyYW1zLmtleXMoKSBpZiBpLnN0YXJ0c3dpdGgoInhtYXRyaXgiKX0KICAgICAgICBydW50aW1lID0gY2xzLmdldF9ydW50aW1lKGNscykKCiAgICAgICAgcmVnaXN0ZXJfdWRmKHJ1bnRpbWUpCgogICAgICAgIGlmIGJvb2wocGFyYW1zLmdldCgieG1hdHJpeC5yZXN0IiwgImZhbHNlIikpOgogICAgICAgICAgICBpcCA9IHBhcmFtcy5nZXQoInhtYXRyaXgucmVzdC5pcCIsICIxMjcuMC4wLjEiKQogICAgICAgICAgICBwb3J0ID0gaW50KHBhcmFtcy5nZXQoInhtYXRyaXgucmVzdC5wb3J0IiwgIjgwODAiKSkKICAgICAgICAgICAgY2xzLnN0YXJ0X2h0dHBfc2VydmVyKGNscywgaXAsIHBvcnQpCgogICAgICAgIGlmIGJvb2wocGFyYW1zLmdldCgieG1hdHJpeC50aHJpZnQiLCAiZmFsc2UiKSk6CiAgICAgICAgICAgIGNscy5zdGFydF90aHJpZnRfc2VydmVyKGNscykKCiAgICAgICAgaWYgYm9vbChwYXJhbXMuZ2V0KCJ4bWF0cml4LnVuaXRlc3Quc3RhcnRSdW50aW1lIiwgInRydWUiKSk6CiAgICAgICAgICAgIHBhc3MKCiAgICAgICAgaWYgcGFyYW1zLmdldCgieG1hdHJpeC51ZGZDbGFzc1BhdGgiLCAiIikgIT0gIiI6CiAgICAgICAgICAgIHBhc3MKCiAgICAgICAgaWYgcGFyYW1zLmdldCgieG1hdHJpeC54cWwiLCAiIikgIT0gIiI6CiAgICAgICAgICAgIGpvYl9maWxlX3BhdGggPSBwYXJhbXMuZ2V0KCJ4bWF0cml4LnhxbCIpCiAgICAgICAgICAgIHhxbCA9ICIiCiAgICAgICAgICAgIGlmIGpvYl9maWxlX3BhdGguc3RhcnRzd2l0aCgiY2xhc3NwYXRoOi8vIik6CiAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShqb2JfZmlsZV9wYXRoKToKICAgICAgICAgICAgICAgICAgICB4cWwgPSBvcGVuKGpvYl9maWxlX3BhdGgsICJyIikucmVhZCgpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHhxbCA9IGpvYl9maWxlX3BhdGgKCiAgICAgICAgICAgIHNzID0gcnVudGltZS5zcGFya1Nlc3Npb24KICAgICAgICAgICAgIyBqb2JfdHlwZSA9IHBhcmFtcy5nZXQoInhtYXRyaXgudHlwZSIsICJzY3JpcHQiKQogICAgICAgICAgICBncm91cF9pZCA9IHNzLnNwYXJrQ29udGV4dC5hcHBOYW1lCgogICAgICAgICAgICBjb250ZXh0ID0gWFFMRXhlY0xpc3RlbmVyKHNzLCBncm91cF9pZCkKICAgICAgICAgICAgWFFMRXhlYy5wYXJzZV94cWwoeHFsLCBjb250ZXh0KQo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiBjbGVhcihzZWxmKToKICAgICAgICBwYXNzCgo8fGZpbV9lbmR8Pg=="]
["23a0a71cdd49becb8f31124621054cadeccf24f5-2","23a0a71cdd49becb8f31124621054cadeccf24f5","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwp0cnk6IAogICAgaW1wb3J0IG1hdGgKICAgIGltcG9ydCBzeW1weSBhcyBzeW0KICAgIGZyb20gc3ltcHkgaW1wb3J0IHNpbixjb3MsdGFuLE4KZXhjZXB0OgogICAgcHJpbnQoIlBhY2thZ2VzIG5vdCBpbnN0YWxsZWQuIFBsZWFzZSBpbnN0YWxsICdzeW1weScgcGFja2FnZSIpCiAgICBzeXMuZXhpdCgpCgpwcmludCgiQm94IEV2b2x1dGlvbmFyeSBtZXRob2QiKQp4ID0gc3ltLlN5bWJvbCgneCcpCnkgPSBzeW0uU3ltYm9sKCd5JykKCmRlZiBzdWJzdGl0dXRlKHB0KToKICAgIHJldHVybiAoZi5zdWJzKFsoeCxwdFswXSksKHkscHRbMV0pXSkpCgp3aGlsZShUcnVlKToKICAgIHMgPSAiIgogICAgZnVuYyA9ICJ4LXkrKDIqeCoqMikrMip4KnkreSoqMiIgI2lucHV0KCJFbnRlciB0aGUgZnVuY3Rpb24gPSAiKQogICAgZm9yIGkgaW4gZnVuYzoKICAgICAgICBzPSBzK2kKICAgICAgICAKICAgIHRyeToKICAgICAgICBleGVjKCJmID0gIitzKQogICAgICAgIHByaW50KGYpCiAgICAgICAgYnJlYWsKICAgIGV4Y2VwdDoKICAgICAgICBwcmludCgiRW50ZXJlZCBmdW5jdGlvbiBpcyBpbmNvbXBhdGlibGUuIFRyeSBhZ2Fpbi4iKQogICAgICAgIAp4MSA9IGxpc3QobWFwKGZsb2F0LGlucHV0KCJFbnRlciB0aGUgaW5pdGlhbCB4MSBwb2ludCB2YWx1ZSAoZ2l2ZSBvbmx5IHNwYWNlIGJldHdlZW4gdGhlIHZhbHVlcykgPSAgIikuc3BsaXQoKSkpICAgI1s0LDRdCngyID0gW3gxWzBdKzEseDFbMV1dCngzID0gW3gxWzBdLHgxWzFdKzFdCmJldGEgPSBmbG9hdChpbnB1dCgiRW50ZXIgdGhlIGJldGEgdmFsdWUgPSAiKSkgIzAuNQpnYW1tYSA9IGZsb2F0KGlucHV0KCJFbnRlciB0aGUgZ2FtbWEgdmFsdWUgPSAiKSkgIzIuMAplcHNpbG9uID0gZmxvYXQoaW5wdXQoIkVudGVyIHRoZSBlcHNpbG9uIHZhbHVlID0gIikpICMyLjAKcSA9IGVwc2lsb24gKyAxCml0ZXJhdGlvbiA9IDEKeF9jPVtdCgoKd2hpbGUocSA+IGVwc2lsb24pOgogICAgcHJpbnQoIlxuaXRlcmF0aW9uID0gIixpdGVyYXRpb24pCiAgICBpdGVyYXRpb24gPSBpdGVyYXRpb24gKyAxCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHByaW50KCJ4MSA9IHt9IHgyID0ge30geDMgPSB7fSIuZm9ybWF0KHgxLHgyLHgzKSkKICAgIGYxID0gc3Vic3RpdHV0ZSh4MSkKICAgIGYyID0gc3Vic3RpdHV0ZSh4MikKICAgIGYzID0gc3Vic3RpdHV0ZSh4MykKPHxmaW1fZW5kfD4="]
["b5d764f6166bcae8079bd8737eb869379ef025b8-1","b5d764f6166bcae8079bd8737eb869379ef025b8","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi0KCiMgVGV4dCBDb3JydXB0b3IKIyB2MC4zLjAKCiMgQ29weXJpZ2h0IDIwMTktMjAyMCBGdcOfbWF0dGUKCiMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlCiMgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLAojIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsCiMgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCiMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvcgojIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KCiMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVAojIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi0KIyBJTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTCiMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SCiMgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKZnJvbSBnb29nbGV0cmFucyBpbXBvcnQgVHJhbnNsYXRvciAjIE1ha2Ugc3VyZSB5b3UgcGlwIGluc3RhbGwgZ29vZ2xldHJhbnMgYW5kIGJhYmVsCmZyb20gY29uZmlncGFyc2VyIGltcG9ydCBDb25maWdQYXJzZXIKaW1wb3J0IGdvb2dsZXRyYW5zLCByYW5kb20sIG9zLnBhdGgsIGdldHRleHQsIGJhYmVsCmZyb20gZ2xvYiBpbXBvcnQgZ2xvYgpmcm9tIG9zIGltcG9ydCBwYXRoLCBsaXN0ZGlyCgpjb25maWcgPSBDb25maWdQYXJzZXIoKQpwcm9ndmVyID0gInYxLjAuMiIKCmRlZiBfKG1lc3NhZ2UpOiByZXR1cm4gbWVzc2FnZQoKaWYgbm90IHBhdGguZXhpc3RzKCJjb25maWcuaW5pIik6CiAgICB1aWxhbmcgPSAiZW4iCiAgICBjb25maWcucmVhZCgnY29uZmlnLmluaScpCiAgICBjb25maWcuYWRkX3NlY3Rpb24oJ21haW4nKQogICAgY29uZmlnLnNldCgnbWFpbicsICdsYW5nJywgdWlsYW5nKQogICAgY29uZmlnLnNldCgnbWFpbicsICdvdXRwdXRsYW5nJywgb3V0cHV0bGFuZykKICAgIAogICAgd2l0aCBvcGVuKCdjb25maWcuaW5pJywgJ3cnKSBhcyBmOgogICAgICAgIGNvbmZpZy53cml0ZShmKQplbHNlOgogICAgY29uZmlnLnJlYWQoJ2NvbmZpZy5pbmknKQogICAgdWlsYW5nID0gY29uZmlnLmdldCgnbWFpbicsICdsYW5nJykKICAgIG91dHB1dGxhbmcgPSBjb25maWcuZ2V0KCdtYWluJywgJ291dHB1dGxhbmcnKQoKZGVmIGF2YWlsYWJsZV9sYW5ncygpOgogICAgcmV0dXJuIG9zLmxpc3RkaXIoImxvY2FsZSIpCgpsYW5ncyA9IGF2YWlsYWJsZV9sYW5ncygpCgpkZWYgc2V0X3VpbGFuZyhsYW5nKToKICAgIGdsb2JhbCBfCiAgICBsb2NhbGUgPSBiYWJlbC5Mb2NhbGUucGFyc2UobGFuZykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgaWYgbGFuZyA9PSAiZW4iOgogICAgICAgIF8gPSBsYW1iZGEgczogcwogICAgZWxzZToKICAgICAgICBpZiBsYW5nIGluIGxhbmdzOgo8fGZpbV9lbmR8Pg=="]
["a92c62c9bd60da051a63ca61e34950e778577242-1","a92c62c9bd60da051a63ca61e34950e778577242","PHxmaW1fcHJlZml4fD4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTWltYXM6IGNvbmZlcmVuY2Ugc3VibWlzc2lvbiBhbmQgcmV2aWV3IHN5c3RlbQojIChjKSBBbGxhbiBLZWxseSAyMDE2LTIwMjAgaHR0cDovL3d3dy5hbGxhbmtlbGx5Lm5ldAojIExpY2Vuc2VkIHVuZGVyIE1JVCBMaWNlbnNlLCBzZWUgTElDRU5TRSBmaWxlCjx8ZmltX2hvbGV8PgojIEdvb2dsZSBpbXBvcnRzCmZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0IG5kYgoKIyBMb2NhbCBpbXBvcnRzCmltcG9ydCBjb25mZGIKaW1wb3J0IGNvbmZlcmVuY2UKaW1wb3J0IGNvbmZtc2dzCmZyb20gbWFpbG1zZyBpbXBvcnQgcG9zdG1haWwKZnJvbSBzY2FmZm9sZCBpbXBvcnQgc29ycnlwYWdlLCBzeXNpbmZvLCB1c2VycmlnaHRzbmFtZXMKaW1wb3J0IGJhc2VoYW5kbGVyCgoKY2xhc3MgQ29uZmVyZW5jZUFkbWluUGFnZShiYXNlaGFuZGxlci5CYXNlSGFuZGxlcik6CiAgICBkZWYgbmV3X2NvbmZlcmVuY2VfdmFsdWVzKHNlbGYpOgogICAgICAgIGNycnRfY29uZiA9IGNvbmZlcmVuY2UuQ29uZmVyZW5jZSgpCiAgICAgICAgdGVtcGxhdGVfdmFsdWVzID0gewogICAgICAgICAgICAidXNyX2VtYWlsIjogc2VsZi5nZXRfY3JydF91c2VyKCkuZW1haWwoKSwKICAgICAgICAgICAgImNvbmZfa2V5IjogTm9uZSwKICAgICAgICAgICAgImNycnRfY29uZiI6IGNycnRfY29uZiwKICAgICAgICAgICAgImNyZWF0b3JfcmlnaHRzIjogIiIsCiAgICAgICAgICAgICJob21lX3VybCI6IHN5c2luZm8uaG9tZV91cmwoKSwKICAgICAgICB9CgogICAgICAgIHJldHVybiB0ZW1wbGF0ZV92YWx1ZXMKCiAgICBkZWYgZXhpc3RpbmdfY29uZmVyZW5jZShzZWxmKToKICAgICAgICBjb25mID0gc2VsZi5nZXRfY3JydF9jb25mZXJlbmNlX2tleSgpLmdldCgpCiAgICAgICAgdGVtcGxhdGVfdmFsdWVzID0gewogICAgICAgICAgICAidXNyX2VtYWlsIjogc2VsZi5nZXRfY3JydF91c2VyKCkuZW1haWwoKSwKICAgICAgICAgICAgImNvbmZfa2V5IjogY29uZi5rZXksCiAgICAgICAgICAgICJjcnJ0X2NvbmYiOiBjb25mLAogICAgICAgICAgICAiY3JlYXRvcl9yaWdodHMiOiBzZWxmLnJpZ2h0cyhjb25mKSwKICAgICAgICAgICAgImhvbWVfdXJsIjogc3lzaW5mby5ob21lX3VybCgpLAogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRlbXBsYXRlX3ZhbHVlcwoKICAgIGRlZiByaWdodHMoc2VsZiwgY29uZik6CiAgICAgICAgaWYgbm90IChjb25mLnVzZXJfcmlnaHRzKCkuaGFzX3Blcm1pc3Npb24oCiAgICAgICAgICAgICAgICBzZWxmLmdldF9jcnJ0X3VzZXIoKS5lbWFpbCgpLAogICAgICAgICAgICAgICAgdXNlcnJpZ2h0c25hbWVzLkNPTkZfQ1JFQVRPUikpOgogICAgICAgICAgICBjcmVhdG9yX3JpZ2h0cyA9ICJkaXNhYmxlZCIKICAgICAgICBlbHNlOgogICAgICAgICAgICBjcmVhdG9yX3JpZ2h0cyA9ICIiCiAgICAgICAgcmV0dXJuIGNyZWF0b3JfcmlnaHRzCgogICAgZGVmIGdldChzZWxmKToKICAgICAgICBpZiBzZWxmLnJlcXVlc3QucGFyYW1zLmhhc19rZXkoIm5ldyIpOgogICAgICAgICAgICBzZWxmLmNsZWFyX2NycnRfY29uZmVyZW5jZSgpCiAgICAgICAgICAgIHNlbGYud3JpdGVfcGFnZSgnY29uZmVyZW5jZV9saWIvY29uZmFkbWluLmh0bWwnLCBzZWxmLm5ld19jb25mZXJlbmNlX3ZhbHVlcygpKQogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgaWYgc2VsZi5nZXRfY3JydF9jb25mZXJlbmNlX2tleSgpID09IE5vbmU6CiAgICAgICAgICAgIHNlbGYucmVkaXJlY3QoIi9jaG9vc2Vjb25mIikKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIHJpZ2h0cyA9IHNlbGYuZ2V0X2NycnRfY29uZmVyZW5jZV9rZXkoKS5nZXQoKS51c2VyX3JpZ2h0cygpCiAgICAgICAgaWYgcmlnaHRzLmhhc19wZXJtaXNzaW9uKHNlbGYuZ2V0X2NycnRfdXNlcigpLmVtYWlsKCksIHVzZXJyaWdodHNuYW1lcy5DT05GX0FETUlOSVNUUkFUT1IpOgogICAgICAgICAgICBzZWxmLndyaXRlX3BhZ2UoJ2NvbmZlcmVuY2VfbGliL2NvbmZhZG1pbi5odG1sJywgc2VsZi5leGlzdGluZ19jb25mZXJlbmNlKCkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc29ycnlwYWdlLnJlZGlyZWN0X3NvcnJ5KHNlbGYsICJBZG1pblJpZ2h0c1JlcSIpCgogICAgZGVmIHJlYWRfZmllbGRzKHNlbGYsIGNvbmYpOgogICAgICAgIGNvbmYubmFtZSA9IHNlbGYucmVxdWVzdC5nZXQoIm5ld2NvbmZuYW1lIikKICAgICAgICBjb25mLmRhdGVzID0gc2VsZi5yZXF1ZXN0LmdldCgiZGF0ZXMiKQogICAgICAgIGNvbmYuc2hvcnRuYW1lID0gc2VsZi5yZXF1ZXN0LmdldCgic2hvcnRuYW1lIikKICAgICAgICBjb25mLnNldF93ZWJzaXRlKHNlbGYucmVxdWVzdC5nZXQoIndlYnNpdGUiKSkKICAgICAgICBjb25mLnNldF9nZHByX2FkZHJlc3Moc2VsZi5yZXF1ZXN0LmdldCgiZ2RwciIpKQogICAgICAgIGNvbmYuc2V0X2NmcF9hZGRyZXNzKHNlbGYucmVxdWVzdC5nZXQoImNmcCIpKQogICAgICAgIGNvbmYuc2V0X2NvbnRhY3RfZW1haWwoc2VsZi5yZXF1ZXN0LmdldCgiY29udGFjdF9lbWFpbCIpKQoKICAgIGRlZiByZWFkX2ltYWdlKHNlbGYsIGNvbmYpOgogICAgICAgIGlmIHNlbGYucmVxdWVzdC5nZXQoImNvbmZpbWFnZSIpOgogICAgICAgICAgICBjb25mLnNldF9pbWFnZShzZWxmLnJlcXVlc3QuZ2V0KCJjb25maW1hZ2UiKSkKCiAgICBkZWYgdmFsaWRhdGVfZmllbGRzKHNlbGYpOgogICAgICAgIHN1Z2dlc3RlZF9uYW1lID0gc2VsZi5yZXF1ZXN0LmdldCgibmV3Y29uZm5hbWUiKQogICAgICAgIGlmIGxlbihzdWdnZXN0ZWRfbmFtZSk9PTA6CiAgICAgICAgICAgIHNvcnJ5cGFnZS5yZWRpcmVjdF9zb3JyeShzZWxmLCAiQmxhbmtOYW1lRmllbGQiKQogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICAgICAgaWYgbGVuKHNlbGYucmVxdWVzdC5nZXQoImRhdGVzIikpPT0wOgogICAgICAgICAgICBzb3JyeXBhZ2UucmVkaXJlY3Rfc29ycnkoc2VsZiwgIkJsYW5rRGF0ZUZpZWxkIikKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICAgIGlmIGxlbihzZWxmLnJlcXVlc3QuZ2V0KCJzaG9ydG5hbWUiKSk9PTA6CiAgICAgICAgICAgIHNvcnJ5cGFnZS5yZWRpcmVjdF9zb3JyeShzZWxmLCAiQmxhbmtTaG9ydG5hbWVGaWVsZCIpCiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgICAgICBpZiBsZW4oc2VsZi5yZXF1ZXN0LmdldCgiY29udGFjdF9lbWFpbCIpKT09MDoKICAgICAgICAgICAgc29ycnlwYWdlLnJlZGlyZWN0X3NvcnJ5KHNlbGYsICJDb250YWN0RW1haWxNYW5kYXRvcnkiKQogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICAgICAgcmV0dXJuIFRydWUKCiAgICBkZWYgbWFrZV9jb25mZXJlbmNlKHNlbGYpOgogICAgICAgIGMgPSBjb25mZXJlbmNlLkNvbmZlcmVuY2UoKQogICAgICAgIGMuY3JlYXRvcl9pZCA9IHNlbGYuZ2V0X2NycnRfdXNlcigpLmVtYWlsKCkKICAgICAgICBzZWxmLnJlYWRfZmllbGRzKGMpCiAgICAgICAgYy5wdXQoKQoKICAgICAgICBzZWxmLnJlYWRfaW1hZ2UoYykKCiAgICAgICAgYy51c2VyX3JpZ2h0cygpLmFkZF9wZXJtaXNzaW9uKGMuY3JlYXRvcl9pZCwgdXNlcnJpZ2h0c25hbWVzLkNIQU5HRV9DT05GX1NUQVRFKQogICAgICAgIGMudXNlcl9yaWdodHMoKS5hZGRfcGVybWlzc2lvbihjLmNyZWF0b3JfaWQsIHVzZXJyaWdodHNuYW1lcy5BUFBPSU5UX1JFVklFV0VSUykKICAgICAgICBjLnVzZXJfcmlnaHRzKCkuYWRkX3Blcm1pc3Npb24oYy5jcmVhdG9yX2lkLCB1c2VycmlnaHRzbmFtZXMuUk9VTkQxX0RFQ0lTSU9OKQogICAgICAgIGMudXNlcl9yaWdodHMoKS5hZGRfcGVybWlzc2lvbihjLmNyZWF0b3JfaWQsIHVzZXJyaWdodHNuYW1lcy5ST1VORDJfREVDSVNJT04pCiAgICAgICAgYy51c2VyX3JpZ2h0cygpLmFkZF9wZXJtaXNzaW9uKGMuY3JlYXRvcl9pZCwgdXNlcnJpZ2h0c25hbWVzLkNPTkZfQ1JFQVRPUikKICAgICAgICBjLnVzZXJfcmlnaHRzKCkuYWRkX3Blcm1pc3Npb24oYy5jcmVhdG9yX2lkLCB1c2VycmlnaHRzbmFtZXMuQ09ORl9BRE1JTklTVFJBVE9SKQogICAgICAgIHJldHVybiBjCgogICAgZGVmIG5ld19jb25mZXJlbmNlKHNlbGYpOgogICAgICAgIGlmIHNlbGYudmFsaWRhdGVfZmllbGRzKCk6CiAgICAgICAgICAgIGlmIGNvbmZkYi5nZXRfY29uZl9ieV9uYW1lKHNlbGYucmVxdWVzdC5nZXQoIm5ld2NvbmZuYW1lIikpOgogICAgICAgICAgICAgICAgc29ycnlwYWdlLnJlZGlyZWN0X3NvcnJ5KHNlbGYsICJDb25mTmFtZUluVXNlIikKICAgICAgICAgICAgICAgIHJldHVybgoKICAgICAgICAgICAgaWYgY29uZmRiLmdldF9jb25mX2J5X3Nob3J0bmFtZShzZWxmLnJlcXVlc3QuZ2V0KCJzaG9ydG5hbWUiKSk6CiAgICAgICAgICAgICAgICBzb3JyeXBhZ2UucmVkaXJlY3Rfc29ycnkoc2VsZiwgIkNvbmZTaG9ydG5hbWVJblVzZSIpCiAgICAgICAgICAgICAgICByZXR1cm4KCiAgICAgICAgICAgIGNvbmYgPSBzZWxmLm1ha2VfY29uZmVyZW5jZSgpCiAgICAgICAgICAgIHBvc3RtYWlsLlBvc3RtYW4oKS5wb3N0X2NvbmZlcmVuY2VfbXNnKGNvbmZtc2dzLm1ha2VfY29uZmVyZW5jZV9jcmVhdGVkX21zZyhjb25mKSkKICAgICAgICAgICAgc2VsZi5yZWRpcmVjdCgiL2NvbmZjb25maWdwYWdlP2NvbmY9IiArIGNvbmYua2V5LnVybHNhZmUoKSkKCiAgICBkZWYgdXBkYXRlX2NvbmZlcmVuY2Uoc2VsZik6CiAgICAgICAgaWYgc2VsZi52YWxpZGF0ZV9maWVsZHMoKToKICAgICAgICAgICAgY29uZl9rZXkgPSBuZGIuS2V5KHVybHNhZmU9c2VsZi5yZXF1ZXN0LmdldCgiY29uZl9zYWZla2V5IikpCiAgICAgICAgICAgIGNvbmYgPSBjb25mX2tleS5nZXQoKQogICAgICAgICAgICBzZWxmLnJlYWRfZmllbGRzKGNvbmYpCiAgICAgICAgICAgIGNvbmYucHV0KCkKICAgICAgICAgICAgc2VsZi5yZWFkX2ltYWdlKGNvbmYpCiAgICAgICAgICAgIHNlbGYucmVkaXJlY3QoIi9jcmVhdGVjb25mP2NvbmY9Iitjb25mX2tleS51cmxzYWZlKCkpCgogICAgZGVmIGRlbGV0ZV9jb25mZXJlbmNlKHNlbGYpOgogICAgICAgIGNvbmZfa2V5ID0gbmRiLktleSh1cmxzYWZlPXNlbGYucmVxdWVzdC5nZXQoImNvbmZfc2FmZWtleSIpKQoKICAgICAgICBpZiBjb25mX2tleS5nZXQoKS51c2VyX3JpZ2h0cygpLmhhc19wZXJtaXNzaW9uKHNlbGYuZ2V0X2NycnRfdXNlcigpLmVtYWlsKCksIHVzZXJyaWdodHNuYW1lcy5DT05GX0NSRUFUT1IpOgogICAgICAgICAgICBzZWxmLnJlZGlyZWN0KCIvZGVsZXRlX2Nvbl9wYWdlP2NvbmY9Iitjb25mX2tleS51cmxzYWZlKCkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5yZWRpcmVjdCgiL3NvcnJ5X3BhZ2U/cmVhc29uPU5vRGVsZXRlUmlnaHRzIikKCiAgICBkZWYgcG9zdChzZWxmKToKICAgICAgICBpZiBzZWxmLnJlcXVlc3QuZ2V0KCJTdWJtaXROZXdDb25mIik6CiAgICAgICAgICAgIHNlbGYubmV3X2NvbmZlcmVuY2UoKQogICAgICAgIGVsaWYgc2VsZi5yZXF1ZXN0LmdldCgiVXBkYXRlQ29uZiIpOgogICAgICAgICAgICBzZWxmLnVwZGF0ZV9jb25mZXJlbmNlKCkKICAgICAgICBlbGlmIHNlbGYucmVxdWVzdC5nZXQoIkRlbGV0ZUNvbmYiKToKICAgICAgICAgICAgc2VsZi5kZWxldGVfY29uZmVyZW5jZSgpCjx8ZmltX3N1ZmZpeHw+CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMgU3lzdGVtIGltcG9ydHMKCjx8ZmltX2VuZHw+"]
["7b9fb02fb49029f8b08e231d5549ff98831d7780-1","7b9fb02fb49029f8b08e231d5549ff98831d7780","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCkNyZWF0ZWQgb24gV2VkIE5vdiAxMyAxMToxNzo0MyAyMDE5CgpAYXV0aG9yOiBQV0wKIiIiCgojIEltcG9ydGluZyB0aGUgbGlicmFyaWVzCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBwYW5kYXMgYXMgcGQKCiMgSW1wb3J0aW5nIHRoZSBkYXRhc2V0CmRhdGFzZXQgPSBwZC5yZWFkX2NzdignUG9zaXRpb25fU2FsYXJpZXMuY3N2JykKWCA9IGRhdGFzZXQuaWxvY1s6LCAxOjJdLnZhbHVlcwp5ID0gZGF0YXNldC5pbG9jWzosIDI6M10udmFsdWVzCgojIEZlYXR1cmUgU2NhbGluZwpmcm9tIHNrbGVhcm4ucHJlcHJvY2Vzc2luZyBpbXBvcnQgU3RhbmRhcmRTY2FsZXIKc2NfWCA9IFN0YW5kYXJkU2NhbGVyKCkKc2NfeSA9IFN0YW5kYXJkU2NhbGVyKCkKWCA9IHNjX1guZml0X3RyYW5zZm9ybShYKQp5ID0gc2NfeS5maXRfdHJhbnNmb3JtKHkpCgojIEZpdHRpbmcgdGhlIFNWUiB0byB0aGUgZGF0YXNldApmcm9tIHNrbGVhcm4uc3ZtIGltcG9ydCBTVlIKcmVncmVzc29yID0gU1ZSKGtlcm5lbD0ncmJmJykKcmVncmVzc29yLmZpdChYLCB5KQoKIyBQcmVkaWN0aW5nIGEgbmV3IHJlc3VsdAp5X3ByZWQgPSBzY195LmludmVyc2VfdHJhbnNmb3JtKHJlZ3Jlc3Nvci5wcmVkaWN0KHNjX1gudHJhbnNmb3JtKG5wLmFycmF5KFtbNi41XV0pKSkpCgojIFZpc3VhbGlzaW5nIHRoZSBTVlIgcmVzdWx0cwo8fGZpbV9ob2xlfD4KcGx0LnlsYWJlbCgnU2FsYXJ5JykKcGx0LnNob3coKQoKIyBWaXN1YWxpc2luZyB0aGUgU1ZSIHJlc3VsdHMgKGZvciBoaWdoZXIgcmVzb2x1dGlvbiBhbmQgc21vb3RoZXIgY3VydmUpClhfZ3JpZCA9IG5wLmFyYW5nZShtaW4oWCksIG1heChYKSwgMC4xKQpYX2dyaWQgPSBYX2dyaWQucmVzaGFwZSgobGVuKFhfZ3JpZCksIDEpKQpwbHQuc2NhdHRlcihYLCB5LCBjb2xvciA9ICdyZWQnKQpwbHQucGxvdChYX2dyaWQsIHJlZ3Jlc3Nvci5wcmVkaWN0KFhfZ3JpZCksIGNvbG9yID0gJ2JsdWUnKQpwbHQudGl0bGUoJ1RydXRoIG9yIEJsdWZmIChTVlIgTW9kZWwpJykKcGx0LnhsYWJlbCgnUG9zaXRpb24gbGV2ZWwnKQpwbHQueWxhYmVsKCdTYWxhcnknKQpwbHQuc2hvdygpCjx8ZmltX3N1ZmZpeHw+CnBsdC5zY2F0dGVyKFgsIHksIGNvbG9yID0gJ3JlZCcpCnBsdC5wbG90KFgsIHJlZ3Jlc3Nvci5wcmVkaWN0KFgpLCBjb2xvciA9ICdibHVlJykKcGx0LnRpdGxlKCdUcnV0aCBvciBCbHVmZiAoU1ZSIE1vZGVsKScpCnBsdC54bGFiZWwoJ1Bvc2l0aW9uIGxldmVsJykKPHxmaW1fZW5kfD4="]
["cdef6412db95bac98d825d8ac633c4aad88c6572-2","cdef6412db95bac98d825d8ac633c4aad88c6572","PHxmaW1fcHJlZml4fD4KIwojICAgIFVuY29tcGxpY2F0ZWQgVk0gQnVpbGRlcgojICAgIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IENhbm9uaWNhbCBMdGQuCiMKIyAgICBTZWUgQVVUSE9SUyBmb3IgbGlzdCBvZiBjb250cmlidXRvcnMKIwojICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMsIGFzCiMgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiMKIyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojCiMgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIwojICAgIFZpcnR1YWwgbmV0d29yayBtYW5hZ2VtZW50CgppbXBvcnQgbG9nZ2luZwppbXBvcnQgcmUKaW1wb3J0IHN0cnVjdAppbXBvcnQgc29ja2V0Cgpmcm9tICAgVk1CdWlsZGVyICAgICAgICAgICBpbXBvcnQgcmVnaXN0ZXJfaHlwZXJ2aXNvcl9wbHVnaW4sIHJlZ2lzdGVyX2Rpc3Ryb19wbHVnaW4KZnJvbSAgIFZNQnVpbGRlci5wbHVnaW5zICAgaW1wb3J0IFBsdWdpbgpmcm9tICAgVk1CdWlsZGVyLmV4Y2VwdGlvbiBpbXBvcnQgVk1CdWlsZGVyVXNlckVycm9yCgpkZWYgdmFsaWRhdGVfbWFjKG1hYyk6CiAgICB2YWxpZF9tYWNfYWRkcmVzcyA9IHJlLmNvbXBpbGUoIl4oWzAtOWEtZl17Mn06KXs1fShbMC05YS1mXXsyfSkkIiwgcmUuSUdOT1JFQ0FTRSkKICAgIGlmIG5vdCB2YWxpZF9tYWNfYWRkcmVzcy5tYXRjaChtYWMpOgogICAgICAgIHJldHVybiBGYWxzZQogICAgZWxzZToKICAgICAgICByZXR1cm4gVHJ1ZQoKZGVmIG51bWVyaWNfdG9fZG90dGVkX2lwKG51bWVyaWNfaXApOgogICAgcmV0dXJuIHNvY2tldC5pbmV0X250b2Eoc3RydWN0LnBhY2soJ0knLCBudW1lcmljX2lwKSkKCmRlZiBkb3R0ZWRfdG9fbnVtZXJpY19pcChkb3R0ZWRfaXApOgogICAgdHJ5OgogICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCdJJywgc29ja2V0LmluZXRfYXRvbihkb3R0ZWRfaXApKVswXSAKICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CiAgICAgICAgcmFpc2UgVk1CdWlsZGVyVXNlckVycm9yKCclcyBpcyBub3QgYSB2YWxpZCBpcCBhZGRyZXNzJyAlIGRvdHRlZF9pcCkKCmRlZiBndWVzc19tYXNrX2Zyb21faXAobnVtaXApOgogICAgZmlyc3Rfb2N0ZXQgPSBudW1pcCAmIDB4RkYKCiAgICBpZiAoZmlyc3Rfb2N0ZXQgPiAwKSBhbmQgKGZpcnN0X29jdGV0IDw9IDEyNyk6CiAgICAgICAgcmV0dXJuIDB4RkYKICAgIGVsaWYgKGZpcnN0X29jdGV0ID4gMTI4KSBhbmQgKGZpcnN0X29jdGV0IDwgMTkyKToKICAgICAgICByZXR1cm4gMHhGRkZGCiAgICBlbGlmIChmaXJzdF9vY3RldCA8IDIyNCk6CiAgICAgICAgcmV0dXJuIDB4RkZGRkZGCiAgICBlbHNlOgogICAgICAgIHJhaXNlIFZNQnVpbGRlclVzZXJFcnJvcignQ291bGQgbm90IGd1ZXNzIG5ldHdvcmsgY2xhc3Mgb2Y6ICVzJyAlIG51bWVyaWNfdG9fZG90dGVkX2lwKG51bWlwKSkKCmRlZiBjYWxjdWxhdGVfbmV0X2FkZHJlc3NfZnJvbV9pcF9hbmRfbmV0bWFzayhpcCwgbmV0bWFzayk6CiAgICByZXR1cm4gaXAgJiBuZXRtYXNrCgpkZWYgY2FsY3VsYXRlX2Jyb2FkY2FzdF9hZGRyZXNzX2Zyb21faXBfYW5kX25ldG1hc2sobmV0LCBtYXNrKToKICAgIHJldHVybiBuZXQgKyAobWFzayBeIDB4RkZGRkZGRkYpCgpkZWYgZ3Vlc3NfZ3dfZnJvbV9pcChpcCk6CiAgICByZXR1cm4gaXAgKyAweDAxMDAwMDAwCjx8ZmltX2hvbGV8PgogICAgICAgIGRvbWFpbm5hbWUgPSAnLicuam9pbihzb2NrZXQuZ2V0aG9zdGJ5bmFtZV9leChzb2NrZXQuZ2V0aG9zdG5hbWUoKSlbMF0uc3BsaXQoJy4nKVsxOl0pIG9yICJkZWZhdWx0ZG9tYWluIgogICAgICAgIGdyb3VwLmFkZF9zZXR0aW5nKCdkb21haW4nLCBtZXRhdmFyPSdET01BSU4nLCBkZWZhdWx0PWRvbWFpbm5hbWUsIGhlbHA9J1NldCBET01BSU4gYXMgdGhlIGRvbWFpbiBuYW1lIG9mIHRoZSBndWVzdCBbZGVmYXVsdDogJWRlZmF1bHRdLicpCgogICAgZGVmIHByZWZsaWdodF9jaGVjayhzZWxmKToKICAgICAgICBkb21haW4gPSBzZWxmLmNvbnRleHQuZ2V0X3NldHRpbmcoJ2RvbWFpbicpCiAgICAgICAgaWYgZG9tYWluID09ICcnOgogICAgICAgICAgICByYWlzZSBWTUJ1aWxkZXJVc2VyRXJyb3IoJ0RvbWFpbiBpcyB1bmRlZmluZWQgYW5kIGhvc3QgaGFzIG5vIGRvbWFpbiBzZXQuJykKCmNsYXNzIE5ldHdvcmtIeXBlcnZpc29yUGx1Z2luKFBsdWdpbik6CiAgICBkZWYgcmVnaXN0ZXJfb3B0aW9ucyhzZWxmKToKICAgICAgICBncm91cCA9IHNlbGYuc2V0dGluZ19ncm91cCgnTmV0d29yaycpCiAgICAgICAgZ3JvdXAuYWRkX3NldHRpbmcoJ2lwJywgbWV0YXZhcj0nQUREUkVTUycsIGRlZmF1bHQ9J2RoY3AnLCBoZWxwPSdJUCBhZGRyZXNzIGluIGRvdHRlZCBmb3JtIFtkZWZhdWx0OiAlZGVmYXVsdF0uJykKICAgICAgICBncm91cC5hZGRfc2V0dGluZygnbWFjJywgbWV0YXZhcj0nTUFDJywgaGVscD0nTUFDIGFkZHJlc3Mgb2YgdGhlIGd1ZXN0IFtkZWZhdWx0OiByYW5kb21dLicpCiAgICAgICAgZ3JvdXAuYWRkX3NldHRpbmcoJ21hc2snLCBtZXRhdmFyPSdWQUxVRScsIGhlbHA9J0lQIG1hc2sgaW4gZG90dGVkIGZvcm0gW2RlZmF1bHQ6IGJhc2VkIG9uIGlwIHNldHRpbmddLiBJZ25vcmVkIGlmIGlwIGlzIG5vdCBzcGVjaWZpZWQuJykKICAgICAgICBncm91cC5hZGRfc2V0dGluZygnbmV0JywgbWV0YXZhcj0nQUREUkVTUycsIGhlbHA9J0lQIG5ldCBhZGRyZXNzIGluIGRvdHRlZCBmb3JtIFtkZWZhdWx0OiBiYXNlZCBvbiBpcCBzZXR0aW5nXS4gSWdub3JlZCBpZiBpcCBpcyBub3Qgc3BlY2lmaWVkLicpCiAgICAgICAgZ3JvdXAuYWRkX3NldHRpbmcoJ2JjYXN0JywgbWV0YXZhcj0nVkFMVUUnLCBoZWxwPSdJUCBicm9hZGNhc3QgaW4gZG90dGVkIGZvcm0gW2RlZmF1bHQ6IGJhc2VkIG9uIGlwIHNldHRpbmddLiBJZ25vcmVkIGlmIGlwIGlzIG5vdCBzcGVjaWZpZWQuJykKICAgICAgICBncm91cC5hZGRfc2V0dGluZygnZ3cnLCBtZXRhdmFyPSdBRERSRVNTJywgaGVscD0nR2F0ZXdheSAocm91dGVyKSBhZGRyZXNzIGluIGRvdHRlZCBmb3JtIFtkZWZhdWx0OiBiYXNlZCBvbiBpcCBzZXR0aW5nIChmaXJzdCB2YWxpZCBhZGRyZXNzIGluIHRoZSBuZXR3b3JrKV0uIElnbm9yZWQgaWYgaXAgaXMgbm90IHNwZWNpZmllZC4nKQogICAgICAgIGdyb3VwLmFkZF9zZXR0aW5nKCdkbnMnLCBtZXRhdmFyPSdBRERSRVNTJywgaGVscD0nRE5TIGFkZHJlc3MgaW4gZG90dGVkIGZvcm0gW2RlZmF1bHQ6IGJhc2VkIG9uIGlwIHNldHRpbmcgKGZpcnN0IHZhbGlkIGFkZHJlc3MgaW4gdGhlIG5ldHdvcmspXSBJZ25vcmVkIGlmIGlwIGlzIG5vdCBzcGVjaWZpZWQuJykKCgogICAgZGVmIHByZWZsaWdodF9jaGVjayhzZWxmKToKICAgICAgICAiIiIKICAgICAgICBWYWxpZGF0ZSB0aGUgaXAgY29uZmlndXJhdGlvbiBnaXZlbiBhbmQgc2V0IGRlZmF1bHRzCiAgICAgICAgIiIiCgogICAgICAgIGlwID0gc2VsZi5jb250ZXh0LmdldF9zZXR0aW5nKCdpcCcpCiAgICAgICAgbG9nZ2luZy5kZWJ1ZygiaXA6ICVzIiAlIGlwKQogICAgICAgIAogICAgICAgIG1hYyA9IHNlbGYuY29udGV4dC5nZXRfc2V0dGluZygnbWFjJykKICAgICAgICBpZiBtYWM6CiAgICAgICAgICAgIGlmIG5vdCB2YWxpZGF0ZV9tYWMobWFjKToKICAgICAgICAgICAgICAgIHJhaXNlIFZNQnVpbGRlclVzZXJFcnJvcigiTWFsZm9ybWVkIE1BQyBhZGRyZXNzIGVudGVyZWQ6ICVzIiAlIG1hYykKCiAgICAgICAgaWYgaXAgIT0gJ2RoY3AnOgogICAgICAgICAgICAjIG51bSogYXJlIG51bWVyaWMgcmVwcmVzZW50YXRpb25zCiAgICAgICAgICAgIG51bWlwID0gZG90dGVkX3RvX251bWVyaWNfaXAoaXApCiAgICAgICAgICAgIAogICAgICAgICAgICBtYXNrID0gc2VsZi5jb250ZXh0LmdldF9zZXR0aW5nKCdtYXNrJykKICAgICAgICAgICAgaWYgbm90IG1hc2s6CiAgICAgICAgICAgICAgICBudW1tYXNrID0gZ3Vlc3NfbWFza19mcm9tX2lwKG51bWlwKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbnVtbWFzayA9IGRvdHRlZF90b19udW1lcmljX2lwKG1hc2spCgogICAgICAgICAgICBudW1uZXQgPSBjYWxjdWxhdGVfbmV0X2FkZHJlc3NfZnJvbV9pcF9hbmRfbmV0bWFzayhudW1pcCwgbnVtbWFzaykKCiAgICAgICAgICAgIG5ldCA9IHNlbGYuY29udGV4dC5nZXRfc2V0dGluZygnbmV0JykKICAgICAgICAgICAgaWYgbm90IG5ldDoKICAgICAgICAgICAgICAgIHNlbGYuY29udGV4dC5zZXRfc2V0dGluZ19kZWZhdWx0KCduZXQnLCBudW1lcmljX3RvX2RvdHRlZF9pcChudW1uZXQpKQoKICAgICAgICAgICAgYmNhc3QgPSBzZWxmLmNvbnRleHQuZ2V0X3NldHRpbmcoJ2JjYXN0JykKICAgICAgICAgICAgaWYgbm90IGJjYXN0OgogICAgICAgICAgICAgICAgbnVtYmNhc3QgPSBjYWxjdWxhdGVfYnJvYWRjYXN0X2FkZHJlc3NfZnJvbV9pcF9hbmRfbmV0bWFzayhudW1uZXQsIG51bW1hc2spCiAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQuc2V0X3NldHRpbmdfZGVmYXVsdCgnYmNhc3QnLCBudW1lcmljX3RvX2RvdHRlZF9pcChudW1iY2FzdCkpCgogICAgICAgICAgICBndyA9IHNlbGYuY29udGV4dC5nZXRfc2V0dGluZygnZ3cnKQogICAgICAgICAgICBpZiBub3QgZ3c6CiAgICAgICAgICAgICAgICBudW1ndyA9IGd1ZXNzX2d3X2Zyb21faXAobnVtaXApCiAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQuc2V0X3NldHRpbmdfZGVmYXVsdCgnZ3cnLCBudW1lcmljX3RvX2RvdHRlZF9pcChudW1ndykpCgogICAgICAgICAgICBkbnMgPSBzZWxmLmNvbnRleHQuZ2V0X3NldHRpbmcoJ2RucycpCiAgICAgICAgICAgIGlmIG5vdCBkbnM6CiAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQuc2V0X3NldHRpbmdfZGVmYXVsdCgnZG5zJywgc2VsZi5jb250ZXh0LmdldF9zZXR0aW5nKCdndycpKQoKICAgICAgICAgICAgc2VsZi5jb250ZXh0LnNldF9zZXR0aW5nX2RlZmF1bHQoJ21hc2snLCBudW1lcmljX3RvX2RvdHRlZF9pcChudW1tYXNrKSkKCiAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIm5ldDogJXMiICUgc2VsZi5jb250ZXh0LmdldF9zZXR0aW5nKCduZXQnKSkKICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygibmV0bWFzazogJXMiICUgc2VsZi5jb250ZXh0LmdldF9zZXR0aW5nKCdtYXNrJykpCiAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoImJyb2FkY2FzdDogJXMiICUgc2VsZi5jb250ZXh0LmdldF9zZXR0aW5nKCdiY2FzdCcpKQogICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJnYXRld2F5OiAlcyIgJSBzZWxmLmNvbnRleHQuZ2V0X3NldHRpbmcoJ2d3JykpCiAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoImRuczogJXMiICUgc2VsZi5jb250ZXh0LmdldF9zZXR0aW5nKCdkbnMnKSkKCiAgICBkZWYgY29uZmlndXJlX25ldHdvcmtpbmcoc2VsZiwgbmljcyk6CiAgICAgICAgaWYgbGVuKG5pY3MpID4gMDoKICAgICAgICAgICAgbmljID0gbmljc1swXQogICAgICAgIAogICAgICAgIGlwID0gc2VsZi5nZXRfc2V0dGluZygnaXAnKQogICAgICAgIGlmIGlwID09ICdkaGNwJzoKICAgICAgICAgICAgbmljLnR5cGUgPSAnZGhjcCcKICAgICAgICBlbHNlOgogICAgICAgICAgICBuaWMudHlwZSA9ICdzdGF0aWMnCiAgICAgICAgICAgIG5pYy5pcCA9IGlwCiAgICAgICAgICAgIG5pYy5uZXR3b3JrID0gc2VsZi5jb250ZXh0LmdldF9zZXR0aW5nKCduZXQnKQogICAgICAgICAgICBuaWMubmV0bWFzayA9IHNlbGYuY29udGV4dC5nZXRfc2V0dGluZygnbWFzaycpCiAgICAgICAgICAgIG5pYy5icm9hZGNhc3QgPSBzZWxmLmNvbnRleHQuZ2V0X3NldHRpbmcoJ2JjYXN0JykKICAgICAgICAgICAgbmljLmdhdGV3YXkgPSBzZWxmLmNvbnRleHQuZ2V0X3NldHRpbmcoJ2d3JykKICAgICAgICAgICAgbmljLmRucyA9IHNlbGYuY29udGV4dC5nZXRfc2V0dGluZygnZG5zJykKICAgICAgICAKcmVnaXN0ZXJfZGlzdHJvX3BsdWdpbihOZXR3b3JrRGlzdHJvUGx1Z2luKQpyZWdpc3Rlcl9oeXBlcnZpc29yX3BsdWdpbihOZXR3b3JrSHlwZXJ2aXNvclBsdWdpbikKPHxmaW1fc3VmZml4fD4KCmNsYXNzIE5ldHdvcmtEaXN0cm9QbHVnaW4oUGx1Z2luKToKICAgIGRlZiByZWdpc3Rlcl9vcHRpb25zKHNlbGYpOgogICAgICAgIGdyb3VwID0gc2VsZi5zZXR0aW5nX2dyb3VwKCdOZXR3b3JrJykKPHxmaW1fZW5kfD4="]
["b5272046102b5031ced9733917f4f12e791dd530-5","b5272046102b5031ced9733917f4f12e791dd530","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgYXN5bmNpbwpmcm9tIGFpb2h0dHAgaW1wb3J0IHdlYgppbXBvcnQgdGVsZXBvdApmcm9tIHRlbGVwb3QuYWlvLmRlbGVnYXRlIGltcG9ydCBwZXJfY2hhdF9pZCwgY3JlYXRlX29wZW4sIHBhdmVfZXZlbnRfc3BhY2UKCiIiIgokIHB5dGhvbjMuNSBhaW9odHRwX2NvdW50ZXJhLnB5IDx0b2tlbj4gPGxpc3RlbmluZ19wb3J0PiA8d2ViaG9va191cmw+CgpXZWJob29rIHBhdGggaXMgJy9hYmMnLCB0aGVyZWZvcmU6Cgo8d2ViaG9va191cmw+OiBodHRwczovLzxiYXNlPi9hYmMKIiIiCgpjbGFzcyBNZXNzYWdlQ291bnRlcih0ZWxlcG90LmFpby5oZWxwZXIuQ2hhdEhhbmRsZXIpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgc3VwZXIoTWVzc2FnZUNvdW50ZXIsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKICAgICAgICBzZWxmLl9jb3VudCA9IDAKCiAgICBhc3luYyBkZWYgb25fY2hhdF9tZXNzYWdlKHNlbGYsIG1zZyk6CiAgICAgICAgc2VsZi5fY291bnQgKz0gMQogICAgICAgIGF3YWl0IHNlbGYuc2VuZGVyLnNlbmRNZXNzYWdlKHNlbGYuX2NvdW50KQoKClRPS0VOID0gc3lzLmFyZ3ZbMV0KUE9SVCA9IGludChzeXMuYXJndlsyXSkKVVJMID0gc3lzLmFyZ3ZbM10KCmJvdCA9IHRlbGVwb3QuYWlvLkRlbGVnYXRvckJvdChUT0tFTiwgWwogICAgcGF2ZV9ldmVudF9zcGFjZSgpKAogICAgICAgIHBlcl9jaGF0X2lkKCksIGNyZWF0ZV9vcGVuLCBNZXNzYWdlQ291bnRlciwgdGltZW91dD0xMCksCl0pCnVwZGF0ZV9xdWV1ZSA9IGFzeW5jaW8uUXVldWUoKSAgIyBjaGFubmVsIGJldHdlZW4gd2ViIGFwcCBhbmQgYm90Cgphc3luYyBkZWYgd2ViaG9vayhyZXF1ZXN0KToKICAgIGRhdGEgPSBhd2FpdCByZXF1ZXN0LnRleHQoKQogICAgYXdhaXQgdXBkYXRlX3F1ZXVlLnB1dChkYXRhKSAgIyBwYXNzIHVwZGF0ZSB0byBib3QKICAgIHJldHVybiB3ZWIuUmVzcG9uc2UoYm9keT0nT0snLmVuY29kZSgndXRmLTgnKSkKCmFzeW5jIGRlZiBpbml0KGxvb3ApOgogICAgYXBwID0gd2ViLkFwcGxpY2F0aW9uKGxvb3A9bG9vcCkKICAgIGFwcC5yb3V0ZXIuYWRkX3JvdXRlKCdHRVQnLCAnL2FiYycsIHdlYmhvb2spCiAgICBhcHAucm91dGVyLmFkZF9yb3V0ZSgnUE9TVCcsICcvYWJjJywgd2ViaG9vaykKCiAgICBzcnYgPSBhd2FpdCBsb29wLmNyZWF0ZV9zZXJ2ZXIoYXBwLm1ha2VfaGFuZGxlcigpLCAnMC4wLjAuMCcsIFBPUlQpCiAgICBwcmludCgiU2VydmVyIHN0YXJ0ZWQgLi4uIikKCiAgICBhd2FpdCBib3Quc2V0V2ViaG9vayhVUkwpCgogICAgcmV0dXJuIHNydgoKbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQpsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShpbml0KGxvb3ApKQpsb29wLmNyZWF0ZV90YXNrKGJvdC5tZXNzYWdlX2xvb3Aoc291cmNlPXVwZGF0ZV9xdWV1ZSkpICAjIHRha2UgdXBkYXRlcyBmcm9tIHF1ZXVlCnRyeToKICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQpleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHBhc3MKPHxmaW1fZW5kfD4="]
["23e4700600deb84497c5696f19e4198a97d482a1-1","23e4700600deb84497c5696f19e4198a97d482a1",{"$cut":{"chars":54012,"head":"PHxmaW1fcHJlZml4fD4KZnJvbSBwbTRweS5sb2cudXRpbCBpbXBvcnQgdHJhY2VfbG9nIGFzIHRsX3V0aWwKZnJvbSBwbTRweS5hbGdvLmRmZy52ZXJzaW9ucyBpbXBvcnQgbmF0aXZlIGFzIGRmZ19pbnN0CmZyb20gcG00cHkubW9kZWxzIGltcG9ydCBwZXRyaQpmcm9tIHBtNHB5Lm1vZGVscy5wZXRyaS5wZXRyaW5ldCBpbXBvcnQgTWFya2luZwpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyCmltcG9ydCB0aW1lCmZyb20gY29weSBpbXBvcnQgZGVlcGNvcHksIGNvcHkKaW1wb3J0IG1hdGgKaW1wb3J0IHN5cwpmcm9tIHBtNHB5Lm1vZGVscy5wZXRyaS5wZXRyaW5ldCBpbXBvcnQgUGV0cmlOZXQKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgoKc3lzLnNldHJlY3Vyc2lvbmxpbWl0KDEwMDAwMCkKCmRlZiBhcHBseSh0cmFjZV9sb2csIHBhcmFtZXRlcnMsIGFjdGl2aXR5X2tleT0nY29uY2VwdDpuYW1lJyk6CiAgICAiIiIKICAgIEFwcGx5IHRoZSBJTURGIGFsZ29yaXRobSB0byBhIGxvZwoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0tCiAgICB0cmFjZV9sb2cKICAgICAgICBUcmFjZSBsb2cKICAgIHBhcmFtZXRlcnMKICAgICAgICBQYXJhbWV0ZXJzIG9mIHRoZSBhbGdvcml0aG0KICAgIGFjdGl2aXR5X2tleQogICAgICAgIEF0dHJpYnV0ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBhY3Rpdml0eQoKICAgIFJldHVybnMKICAgIC0tLS0tLS0tLS0tCiAgICBuZXQKICAgICAgICBQZXRyaSBuZXQKICAgIGluaXRpYWxfbWFya2luZwogICAgICAgIEluaXRpYWwgbWFya2luZwogICAgZmluYWxfbWFya2luZwogICAgICAgIEZpbmFsIG1hcmtpbmcKICAgICIiIgogICAgaW5kTWluRGlyRm9sbG93cyA9IEluZHVjdE1pbkRpckZvbGxvd3MoKQogICAgcmV0dXJuIGluZE1pbkRpckZvbGxvd3MuYXBwbHkodHJhY2VfbG9nLCBwYXJhbWV0ZXJzLCBhY3Rpdml0eV9rZXk9YWN0aXZpdHlfa2V5KQoKZGVmIGFwcGx5X2RmZyh0cmFjZV9sb2csIHBhcmFtZXRlcnMsIGFjdGl2aXR5X2tleT0nY29uY2VwdDpuYW1lJyk6CiAgICAiIiIKICAgIEFwcGx5IHRoZSBJTURGIGFsZ29yaXRobSB0byBhIERGRyBncmFwaAoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0tCiAgICBkZmcKICAgICAgICBEaXJlY3RseS1Gb2xsb3dzIGdyYXBoCiAgICBwYXJhbWV0ZXJzCiAgICAgICAgUGFyYW1ldGVycyBvZiB0aGUgYWxnb3JpdGhtCgogICAgUmV0dXJucwogICAgLS0tLS0tLS0tLS0KICAgIG5ldAogICAgICAgIFBldHJpIG5ldAogICAgaW5pdGlhbF9tYXJraW5nCiAgICAgICAgSW5pdGlhbCBtYXJraW5nCiAgICBmaW5hbF9tYXJraW5nCiAgICAgICAgRmluYWwgbWFya2luZwogICAgIiIiCiAgICBpbmRNaW5EaXJGb2xsb3dzID0gSW5kdWN0TWluRGlyRm9sbG93cygpCiAgICByZXR1cm4gaW5kTWluRGlyRm9sbG93cy5hcHBseV9kZmcodHJhY2VfbG9nLCBwYXJhbWV0ZXJzLCBhY3Rpdml0eV9rZXk9YWN0aXZpdHlfa2V5KQoKY2xhc3MgQ291bnRzKG9iamVjdCk6CiAgICAiIiIKICAgIFNoYXJlZCB2YXJpYWJsZXMgYW1vbmcgZXhlY3V0aW9ucwogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgQ29uc3RydWN0b3IKICAgICAgICAiIiIKICAgICAgICBzZWxmLm5vT2ZQbGFjZXMgPSAwCiAgICAgICAgc2VsZi5ub09mSGlkZGVuVHJhbnNpdGlvbnMgPSAwCiAgICAgICAgc2VsZi5ub09mVmlzaWJsZVRyYW5zaXRpb25zID0gMAogICAgICAgIHNlbGYuZGljdFNraXBzID0ge30KICAgICAgICBzZWxmLmRpY3RMb29wcyA9IHt9CgogICAgZGVmIGluY19wbGFjZXMoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgSW5jcmVhc2UgdGhlIG51bWJlciBvZiBwbGFjZXMKICAgICAgICAiIiIKICAgICAgICBzZWxmLm5vT2ZQbGFjZXMgPSBzZWxmLm5vT2ZQbGFjZXMgKyAxCgogICAgZGVmIGluY19ub09mSGlkZGVuKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIEluY3JlYXNlIHRoZSBudW1iZXIgb2YgaGlkZGVuIHRyYW5zaXRpb25zCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5ub09mSGlkZGVuVHJhbnNpdGlvbnMgPSBzZWxmLm5vT2ZIaWRkZW5UcmFuc2l0aW9ucyArIDEKCiAgICBkZWYgaW5jX25vT2ZWaXNpYmxlKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIEluY3JlYXNlIHRoZSBudW1iZXIgb2YgdmlzaWJsZSB0cmFuc2l0aW9ucwogICAgICAgICIiIgogICAgICAgIHNlbGYubm9PZlZpc2libGVUcmFuc2l0aW9ucyA9IHNlbGYubm9PZlZpc2libGVUcmFuc2l0aW9ucyArIDEKCmNsYXNzIFN1YnRyZWUob2JqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZmcsIGluaXRpYWxEZmcsIGFjdGl2aXRpZXMsIGNvdW50cywgcmVjRGVwdGgsIG5vaXNlVGhyZXNob2xkPTApOgogICAgICAgICIiIgogICAgICAgIENvbnN0cnVjdG9yCgogICAgICAgIFBhcmFtZXRlcnMKICAgICAgICAtLS0tLS0tLS0tLQogICAgICAgIGRmZwogICAgICAgICAgICBEaXJlY3RseSBmb2xsb3dzIGdyYXBoIG9mIHRoaXMgc3VidHJlZQogICAgICAgIGluaXRpYWxEZmcKICAgICAgICAgICAgUmVmZXJyYWwgZGlyZWN0bHkgZm9sbG93cyBncmFwaCB0aGF0IHNob3VsZCBiZSB0YWtlbiBpbiBhY2NvdW50IGFkZGluZyBoaWRkZW4vbG9vcCB0cmFuc2l0aW9ucwogICAgICAgIGFjdGl2aXRpZXMKICAgICAgICAgICAgQWN0aXZpdGllcyBvZiB0aGlzIHN1YnRyZWUKICAgICAgICBjb3VudHMKICAgICAgICAgICAgU2hhcmVkIHZhcmlhYmxlCiAgICAgICAgcmVjRGVwdGgKICAgICAgICAgICAgQ3VycmVudCByZWN1cnNpb24gZGVwdGgKICAgICAgICAiIiIKCiAgICAgICAgc2VsZi5pbml0aWFsRGZnID0gY29weShpbml0aWFsRGZnKQogICAgICAgIHNlbGYuY291bnRzID0gY291bnRzCiAgICAgICAgc2VsZi5yZWNEZXB0aCA9IHJlY0RlcHRoCiAgICAgICAgc2VsZi5ub2lzZVRocmVzaG9sZCA9IG5vaXNlVGhyZXNob2xkCgogICAgICAgIHNlbGYuaW5pdGlhbGl6ZV90cmVlKGRmZywgaW5pdGlhbERmZywgYWN0aXZpdGllcykKCiAgICBkZWYgZ2V0X21heF9hY3Rpdml0eV9jb3VudChz"}}]
["c86a34ffb51430ed98dd9d6d7b41b43d8e058e45-2","c86a34ffb51430ed98dd9d6d7b41b43d8e058e45","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNvbmZpZ3BhcnNlcgppbXBvcnQgb3MKaW1wb3J0IHBhdGhsaWIKaW1wb3J0IHN5cwpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdAoKZnJvbSAubG9nZ2VyIGltcG9ydCBMb2dnZXIsIExvZ1RhcmdldAoKCmNsYXNzIENvbmZpZ01ldGEodHlwZSk6CiAgICBkZWYgX19nZXRhdHRyX18oY2xzLCBpdGVtKToKICAgICAgICBpZiBjbHMuY29uZmlnX3BhcnNlciBpcyBOb25lOgogICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0NvbmZpZyBzaW5nbGV0b24gd2FzIG5ldmVyIGluaXRpYWxpemVkIHdpdGggZmlsZSBwYXRoLicpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoY2xzLmNvbmZpZ19wYXJzZXIsIGl0ZW0pCgoKY2xhc3MgQ29uZmlnKG1ldGFjbGFzcz1Db25maWdNZXRhKToKICAgIGNvbmZpZ19wYXJzZXIgPSBOb25lCiAgICBnbG9iYWxzID0ge30KCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgaW5pdGlhbGl6ZShwYXRoKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIENvbmZpZy5jb25maWdfcGFyc2VyID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcigpCiAgICAgICAgICAgIENvbmZpZy5jb25maWdfcGFyc2VyLl9pbnRlcnBvbGF0aW9uID0gY29uZmlncGFyc2VyLkV4dGVuZGVkSW50ZXJwb2xhdGlvbigpCiAgICAgICAgICAgIHJlYWRfb2sgPSBDb25maWcuY29uZmlnX3BhcnNlci5yZWFkKHBhdGgpCiAgICAgICAgICAgIGlmIG5vdCByZWFkX29rOgogICAgICAgICAgICAgICAgTG9nZ2VyLmNyaXRpY2FsKCdDb25maWcgZmlsZSAie30iIG5vdCBmb3VuZCcuZm9ybWF0KHBhdGgpKQogICAgICAgICAgICAgICAgc3lzLmV4aXQoNDIpCjx8ZmltX2hvbGV8PgoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBjaGVja19kaXJzKGNoZWNrX2xvZ19kaXI9VHJ1ZSwgY2hlY2tfYmFzZV9kaXI9VHJ1ZSwgY2hlY2tfbW91bnRfZGlyPVRydWUpOgogICAgICAgIHBhdGhzOiBMaXN0W3BhdGhsaWIuUGF0aF0gPSBbXQoKICAgICAgICBpZiBMb2dUYXJnZXQuRklMRSBpbiBMb2dnZXIubG9nZ2luZ190YXJnZXRzOgogICAgICAgICAgICBsb2dfcGF0aCA9IENvbmZpZy5nZXQoJ2xvZ2dpbmcnLCAncGF0aCcpCiAgICAgICAgICAgIGxvZ19kaXJlY3RvcnksIGxvZ19maWxlID0gb3MucGF0aC5zcGxpdChsb2dfcGF0aCkKICAgICAgICAgICAgaWYgY2hlY2tfbG9nX2RpcjoKICAgICAgICAgICAgICAgIHBhdGhzLmFwcGVuZChwYXRobGliLlBhdGgobG9nX2RpcmVjdG9yeSkpCgogICAgICAgIGlmIGNoZWNrX2Jhc2VfZGlyOgogICAgICAgICAgICBwYXRocy5hcHBlbmQocGF0aGxpYi5QYXRoKENvbmZpZy5nZXQoJ2JvcmcnLCAnYmFzZV9kaXInKSkpCiAgICAgICAgaWYgY2hlY2tfbW91bnRfZGlyOgogICAgICAgICAgICBwYXRocy5hcHBlbmQocGF0aGxpYi5QYXRoKENvbmZpZy5nZXQoJ2JvcmcnLCAnbW91bnRfZGlyJykpKQoKICAgICAgICBmYWlsZWQgPSBGYWxzZQoKICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoKICAgICAgICAgICAgcGF0aC5ta2Rpcihtb2RlPTBvNzU1LCBwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpCiAgICAgICAgICAgIGlmIG5vdCBvcy5hY2Nlc3MocGF0aCwgb3MuUl9PSyB8IG9zLlhfT0sgfCBvcy5XX09LKToKICAgICAgICAgICAgICAgIGZhaWxlZCA9IFRydWUKICAgICAgICAgICAgICAgIExvZ2dlci5jcml0aWNhbCgnQ2Fubm90IHdyaXRlIHRvICJ7fSInLmZvcm1hdChwYXRoKSkKICAgICAgICBpZiBmYWlsZWQ6CiAgICAgICAgICAgIHN5cy5leGl0KDMzKQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBzZXRfZ2xvYmFsKGtleSwgdmFsKToKICAgICAgICBDb25maWcuZ2xvYmFsc1trZXldID0gdmFsCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGdldF9nbG9iYWwoa2V5KToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJldHVybiBDb25maWcuZ2xvYmFsc1trZXldCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICByZXR1cm4gTm9uZQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGV4Y2VwdCBjb25maWdwYXJzZXIuTWlzc2luZ1NlY3Rpb25IZWFkZXJFcnJvciBhcyBlOgogICAgICAgICAgICBMb2dnZXIuY3JpdGljYWwoJ0Vycm9yIGluIGNvbmZpZyBmaWxlIG9uIGxpbmUge30uIHt9OiB7fScuZm9ybWF0KGUubGluZW5vLCByZXByKGUubGluZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5tZXNzYWdlLnNwbGl0bGluZXMoa2VlcGVuZHM9RmFsc2UpWzBdKSkKICAgICAgICAgICAgc3lzLmV4aXQoNDIpCjx8ZmltX2VuZHw+"]
["b5a0ef45507c4ab36d3f122f2dbf4704ad76ece6-3","b5a0ef45507c4ab36d3f122f2dbf4704ad76ece6","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNpeAoKCl9fYWxsX18gPSBbJ2ZpbHRlcl9yZXR2YWwnXQo8fGZpbV9ob2xlfD4KIyBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIgKyBUaHVtYm9yIDwgNyBhbmQgUHl0aG9uIDMgKyBUaHVtYm9yIDcrCmRlZiBmaWx0ZXJfcmV0dmFsKCk6CiAgICBwYXNzCgoKaWYgc2l4LlBZMzoKICAgIGV4ZWMoImFzeW5jIGRlZiBmaWx0ZXJfcmV0dmFsKCk6IHBhc3MiKQo8fGZpbV9zdWZmaXh8PgoKCiMgVGh1bWJvciA3LjArIHJlcXVpcmVzIGZpbHRlcnMgdG8gcmV0dXJuIGFuIGFzeW5jX2dlbmVyYXRvcjsgYnkgYWRkaW5nCiMgYGByZXR1cm4gZmlsdGVyX3JldHZhbCgpYGAgdG8gdGhlIGVuZCBvZiBvdXIgZmlsdGVycywgd2UgY2FuIGFjaGlldmUKPHxmaW1fZW5kfD4="]
["8d35faf0af77eb4c8b472a4e6f00858e4c8a47b7-2","8d35faf0af77eb4c8b472a4e6f00858e4c8a47b7","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nOiB1dGYtOAoKCmZyb20gY3R5cGVzIGltcG9ydCAqCmZyb20gb3MucGF0aCBpbXBvcnQgZGlybmFtZSwgam9pbiBhcyBwYXRoX2pvaW4KZnJvbSBzb2NrZXQgaW1wb3J0IGluZXRfbnRvcCwgQUZfSU5FVCwgQUZfSU5FVDYKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIHN5cyBpbXBvcnQgc3Rkb3V0CmZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlLCBtYWluCgoKPHxmaW1fZW5kfD4="]
["a91af323674d3b2ccd22bc4281f09f6ffa58df64-4","a91af323674d3b2ccd22bc4281f09f6ffa58df64","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpkZWYgc3BsaXRfY29udGludW91cyhYLCB5LCB0ZXN0X3NpemU9MC4yNSwgcmFuZG9tX3N0YXRlPTQyLCBtYXNrPVRydWUpOgogICAgcm5nPW5wLnJhbmRvbS5SYW5kb21TdGF0ZShyYW5kb21fc3RhdGUpCiAgICB2YWxfc2l6ZT1pbnQodGVzdF9zaXplKlguc2hhcGVbMF0pCjx8ZmltX2VuZHw+"]
["8d3e026bc0e7e0c3be7b12ca323677eaab93cc04-2","8d3e026bc0e7e0c3be7b12ca323677eaab93cc04","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc6IHV0Zi04CiIiIgoKIiIiCgppbXBvcnQgdHlwaW5nCgppbXBvcnQgcGludAoKZnJvbSAuLnVuaXRzIGltcG9ydCB1cmVnCmZyb20gLi5lcnJvcnMgaW1wb3J0IFVuZGVmaW5lZFVuaXRFcnJvcgoKPHxmaW1faG9sZXw+CiAgICB0cnk6CiAgICAgICAgdXJlZy5Vbml0KHVuaXRzKQogICAgICAgIHJldHVybiBUcnVlCiAgICBleGNlcHQgcGludC5VbmRlZmluZWRVbml0RXJyb3I6CiAgICAgICAgcmV0dXJuIEZhbHNlCgoKZGVmIGdldF9kaW1lbnNpb25hbGl0eV9mb3JfdW5pdHModW5pdHM6IHN0cikgLT4gc3RyOgogICAgIiIiCiAgICBSZXR1cm5zIHRoZSB1bml0cycgZGltZW5zaW9uYWxpdHkgaW4gdGhlIGRpbWVuc2lvbmFsaXR5IHN5bnRheCBvZiB0aGUgcGludCBwYWNrYWdlLgoKICAgIDpwYXJhbSB1bml0czogYSB2YWxpZAogICAgOnJldHVybjogZGltZW5zaW9uYWxpdHkgYXMgc3RyaW5nCiAgICA6cmFpc2UgZXJyb3JzLlVuZGVmaW5lZFVuaXRFcnJvcjogaWYgdGhlIHVuaXRzIGFyZSB1bmRlZmluZWQKICAgICIiIgogICAgdHJ5OgogICAgICAgIHJldHVybiBzdHIodXJlZy5Vbml0KHVuaXRzKS5kaW1lbnNpb25hbGl0eSkKICAgIGV4Y2VwdCBwaW50LlVuZGVmaW5lZFVuaXRFcnJvcjoKICAgICAgICByYWlzZSBVbmRlZmluZWRVbml0RXJyb3IoKQoKCmRlZiBnZXRfcHJvcGVydHlfcGF0aHNfZm9yX3NjaGVtYSgKICAgICAgICBzY2hlbWE6IHR5cGluZy5EaWN0W3N0ciwgdHlwaW5nLkFueV0sCiAgICAgICAgdmFsaWRfcHJvcGVydHlfdHlwZXM6IHR5cGluZy5PcHRpb25hbFt0eXBpbmcuU2V0W3N0cl1dID0gTm9uZSwKICAgICAgICBwYXRoOiB0eXBpbmcuT3B0aW9uYWxbdHlwaW5nLkxpc3RbdHlwaW5nLk9wdGlvbmFsW3N0cl1dXSA9IE5vbmUKKSAtPiB0eXBpbmcuRGljdFt0eXBpbmcuVHVwbGVbdHlwaW5nLk9wdGlvbmFsW3N0cl1dLCBzdHJdOgogICAgIiIiCiAgICBHZXQgYSBkaWN0IG1hcHBpbmcgcHJvcGVydHkgcGF0aHMgdG8gdGhlIHR5cGUgdXNlZCBpbiB0aGUgZ2l2ZW4gc2NoZW1hLgoKICAgIE5vbmUgaXMgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBhcnJheSBpbmRpY2VzIGFuZCB0eXBlcyBtYXkgYmUgbGltaXRlZAogICAgdG8gYSBzZXQgb2YgdmFsaWQgdHlwZXMuCgogICAgOnBhcmFtIHNjaGVtYTogdGhlIHNjaGVtYSB0byBnZW5lcmF0ZSB0aGUgZGljdCBmb3IKICAgIDpwYXJhbSB2YWxpZF9wcm9wZXJ0eV90eXBlczogYSBsaXN0IG9mIHByb3BlcnR5IHR5cGVzLCBvciBOb25lCiAgICA6cGF0aDogdGhlIHBhdGggdG8gdGhpcyBzdWJzY2hlbWEsIG9yIE5vbmUKICAgIDpyZXR1cm46IHRoZSBnZW5lcmF0ZWQgZGljdAogICAgIiIiCiAgICBpZiBwYXRoIGlzIE5vbmU6CiAgICAgICAgcGF0aCA9IFtdCiAgICBwcm9wZXJ0eV90eXBlID0gc2NoZW1hLmdldCgndHlwZScpCiAgICBwcm9wZXJ0eV9wYXRocyA9IHt9CiAgICBpZiBwcm9wZXJ0eV90eXBlID09ICdvYmplY3QnOgogICAgICAgIHByb3BlcnR5X3BhdGhzLnVwZGF0ZShfZ2V0X3Byb3BlcnR5X3BhdGhzX2Zvcl9vYmplY3Rfc2NoZW1hKAogICAgICAgICAgICBzY2hlbWE9c2NoZW1hLAogICAgICAgICAgICB2YWxpZF9wcm9wZXJ0eV90eXBlcz12YWxpZF9wcm9wZXJ0eV90eXBlcywKICAgICAgICAgICAgcGF0aD1wYXRoCiAgICAgICAgKSkKICAgIGlmIHByb3BlcnR5X3R5cGUgPT0gJ2FycmF5JzoKICAgICAgICBwcm9wZXJ0eV9wYXRocy51cGRhdGUoX2dldF9wcm9wZXJ0eV9wYXRoc19mb3JfYXJyYXlfc2NoZW1hKAogICAgICAgICAgICBzY2hlbWE9c2NoZW1hLAogICAgICAgICAgICB2YWxpZF9wcm9wZXJ0eV90eXBlcz12YWxpZF9wcm9wZXJ0eV90eXBlcywKICAgICAgICAgICAgcGF0aD1wYXRoCiAgICAgICAgKSkKICAgIGlmIHByb3BlcnR5X3R5cGUgaXMgbm90IE5vbmUgYW5kICh2YWxpZF9wcm9wZXJ0eV90eXBlcyBpcyBOb25lIG9yIHByb3BlcnR5X3R5cGUgaW4gdmFsaWRfcHJvcGVydHlfdHlwZXMpOgogICAgICAgIHByb3BlcnR5X3BhdGhzW3R1cGxlKHBhdGgpXSA9IHByb3BlcnR5X3R5cGUKICAgIHJldHVybiBwcm9wZXJ0eV9wYXRocwoKCmRlZiBfZ2V0X3Byb3BlcnR5X3BhdGhzX2Zvcl9vYmplY3Rfc2NoZW1hKAogICAgICAgIHNjaGVtYTogdHlwaW5nLkRpY3Rbc3RyLCB0eXBpbmcuQW55XSwKICAgICAgICB2YWxpZF9wcm9wZXJ0eV90eXBlczogdHlwaW5nLk9wdGlvbmFsW3R5cGluZy5TZXRbc3RyXV0sCiAgICAgICAgcGF0aDogdHlwaW5nLkxpc3RbdHlwaW5nLk9wdGlvbmFsW3N0cl1dCikgLT4gdHlwaW5nLkRpY3RbdHlwaW5nLlR1cGxlW3R5cGluZy5PcHRpb25hbFtzdHJdXSwgc3RyXToKICAgIHBhdGggPSBsaXN0KHBhdGgpCiAgICBpZiBub3QgaXNpbnN0YW5jZShzY2hlbWEsIGRpY3QpOgogICAgICAgIHJldHVybiB7fQogICAgaWYgbm90IHNjaGVtYS5nZXQoJ3R5cGUnKSA9PSAnb2JqZWN0JzoKICAgICAgICByZXR1cm4ge30KICAgIGlmIG5vdCBpc2luc3RhbmNlKHNjaGVtYS5nZXQoJ3Byb3BlcnRpZXMnKSwgZGljdCk6CiAgICAgICAgcmV0dXJuIHt9CiAgICBwcm9wZXJ0eV9wYXRocyA9IHt9CiAgICBmb3IgcHJvcGVydHlfbmFtZSwgcHJvcGVydHlfc2NoZW1hIGluIHNjaGVtYVsncHJvcGVydGllcyddLml0ZW1zKCk6CiAgICAgICAgcHJvcGVydHlfcGF0aHMudXBkYXRlKGdldF9wcm9wZXJ0eV9wYXRoc19mb3Jfc2NoZW1hKAogICAgICAgICAgICBzY2hlbWE9cHJvcGVydHlfc2NoZW1hLAogICAgICAgICAgICB2YWxpZF9wcm9wZXJ0eV90eXBlcz12YWxpZF9wcm9wZXJ0eV90eXBlcywKICAgICAgICAgICAgcGF0aD1wYXRoICsgW3Byb3BlcnR5X25hbWVdCiAgICAgICAgKSkKICAgIHJldHVybiBwcm9wZXJ0eV9wYXRocwoKCmRlZiBfZ2V0X3Byb3BlcnR5X3BhdGhzX2Zvcl9hcnJheV9zY2hlbWEoCiAgICAgICAgc2NoZW1hOiB0eXBpbmcuRGljdFtzdHIsIHR5cGluZy5BbnldLAogICAgICAgIHZhbGlkX3Byb3BlcnR5X3R5cGVzOiB0eXBpbmcuT3B0aW9uYWxbdHlwaW5nLlNldFtzdHJdXSwKICAgICAgICBwYXRoOiB0eXBpbmcuTGlzdFt0eXBpbmcuT3B0aW9uYWxbc3RyXV0KKSAtPiB0eXBpbmcuRGljdFt0eXBpbmcuVHVwbGVbdHlwaW5nLk9wdGlvbmFsW3N0cl1dLCBzdHJdOgogICAgcGF0aCA9IGxpc3QocGF0aCkKICAgIGlmIG5vdCBpc2luc3RhbmNlKHNjaGVtYSwgZGljdCk6CiAgICAgICAgcmV0dXJuIHt9CiAgICBpZiBub3Qgc2NoZW1hLmdldCgndHlwZScpID09ICdhcnJheSc6CiAgICAgICAgcmV0dXJuIHt9CiAgICBpZiBub3QgaXNpbnN0YW5jZShzY2hlbWEuZ2V0KCdpdGVtcycpLCBkaWN0KToKICAgICAgICByZXR1cm4ge30KICAgIHByb3BlcnR5X3NjaGVtYSA9IHNjaGVtYS5nZXQoJ2l0ZW1zJykKCiAgICBwcm9wZXJ0eV9wYXRocyA9IHt9CiAgICBwcm9wZXJ0eV9wYXRocy51cGRhdGUoZ2V0X3Byb3BlcnR5X3BhdGhzX2Zvcl9zY2hlbWEoCiAgICAgICAgc2NoZW1hPXByb3BlcnR5X3NjaGVtYSwKICAgICAgICB2YWxpZF9wcm9wZXJ0eV90eXBlcz12YWxpZF9wcm9wZXJ0eV90eXBlcywKICAgICAgICBwYXRoPXBhdGggKyBbTm9uZV0KICAgICkpCiAgICByZXR1cm4gcHJvcGVydHlfcGF0aHMKPHxmaW1fc3VmZml4fD4KX19hdXRob3JfXyA9ICdGbG9yaWFuIFJoaWVtIDxmLnJoaWVtQGZ6LWp1ZWxpY2guZGU+JwoKCmRlZiB1bml0c19hcmVfdmFsaWQodW5pdHM6IHN0cikgLT4gYm9vbDoKPHxmaW1fZW5kfD4="]
["8d4372292521cf8decfa032a139c5dbcebc49210-3","8d4372292521cf8decfa032a139c5dbcebc49210","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKPHxmaW1faG9sZXw+CmltcG9ydCBkYXRldGltZQpmcm9tIHNrbGVhcm4ubWV0cmljcyBpbXBvcnQgbWVhbl9zcXVhcmVkX2Vycm9yIGFzIG1zZQpmcm9tIHNrbGVhcm4ubWV0cmljcyBpbXBvcnQgYWNjdXJhY3lfc2NvcmUgYXMgYWNjCmltcG9ydCBhcmdwYXJzZQoKdGYuYXBwLmZsYWdzLkRFRklORV9zdHJpbmcoImRpciIsICIvZGF0YSIsICJmb2xkZXIgZGlyZWN0b3J5IikKdGYuYXBwLmZsYWdzLkRFRklORV9zdHJpbmcoInRlc3RfZmlsZSIsICJjbGlja2JhaXQxNy10cmFpbi0xNzAzMzEiLCAiVGVzdCBkYXRhIGZpbGUiKQp0Zi5hcHAuZmxhZ3MuREVGSU5FX3N0cmluZygidGltZXN0YW1wIiwgIjA3MTUiLCAiVGltZXN0YW1wIikKdGYuYXBwLmZsYWdzLkRFRklORV9pbnRlZ2VyKCJtYXhfcG9zdF90ZXh0X2xlbiIsIDM5LCAiTWF4IGxlbmd0aCBvZiB0aGUgcG9zdCB0ZXh0IikKdGYuYXBwLmZsYWdzLkRFRklORV9pbnRlZ2VyKCJtYXhfdGFyZ2V0X2Rlc2NyaXB0aW9uX2xlbiIsIDAsICJNYXggbGVuZ3RoIG9mIHRoZSB0YXJnZXQgZGVzY3JpcHRpb24iKQp0Zi5hcHAuZmxhZ3MuREVGSU5FX2ludGVnZXIoImlmX2Fubm90YXRlZCIsIDAsICI+PTEgaWYgdGhlIFRlc3QgZGF0YSBjb21lIHdpdGggdGhlIGFubm90YXRpb25zLCAwIG90aGVyd2lzZSIpCnRmLmFwcC5mbGFncy5ERUZJTkVfc3RyaW5nKCJtb2RlbCIsICJTQU4iLCAid2hpY2ggbW9kZWwgdG8gdXNlIikKdGYuYXBwLmZsYWdzLkRFRklORV9ib29sZWFuKCJ1c2VfdGFyZ2V0X2Rlc2NyaXB0aW9uIiwgRmFsc2UsICJ3aGV0aGVyIHRvIHVzZSB0aGUgdGFyZ2V0IGRlc2NyaXB0aW9uIGFzIGlucHV0IikKdGYuYXBwLmZsYWdzLkRFRklORV9ib29sZWFuKCJ1c2VfaW1hZ2UiLCBGYWxzZSwgIndoZXRoZXIgdG8gdXNlIHRoZSBpbWFnZSBhcyBpbnB1dCIpCkZMQUdTID0gdGYuYXBwLmZsYWdzLkZMQUdTCgoKZGVmIGRpc3RyaWJ1dGlvbjJsYWJlbChhcik6CiAgICBhciA9IG5wLmFycmF5KGFyKQogICAgY29uc3RhbnQgPSBucC5hcnJheShbMSwgMCwgMSwgMCwgMCwgMSwgMCwgMV0pLnJlc2hhcGUoKDQsIDIpKQogICAgYXIgPSBucC5hcmdtYXgobnAuZG90KGFyLCBjb25zdGFudCksIGF4aXM9MSkKICAgIHJldHVybiBhcgoKCmRlZiBtYWluKGFyZ3Y9Tm9uZSk6CiAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKEZMQUdTLmRpciwgJ3dvcmQyaWQuanNvbicpKToKICAgICAgICBwcmludCAiRXJyb3I6IG5vIHdvcmQyaWQgZmlsZSEiCiAgICAgICAgcmV0dXJuCiAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKEZMQUdTLmRpciwgInJ1bnMiLCBGTEFHUy50aW1lc3RhbXAsICJjaGVja3BvaW50cyIpKToKICAgICAgICBwcmludCAiRXJyb3I6IG5vIHNhdmVkIG1vZGVsISIKICAgICAgICByZXR1cm4KICAgIGlmIEZMQUdTLnVzZV9pbWFnZSBhbmQgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihGTEFHUy5kaXIsIEZMQUdTLnRlc3RfZmlsZSwgImlkMmltYWdlaWR4Lmpzb24iKSk6CiAgICAgICAgcHJpbnQgIkVycm9yOiBubyBwcm9jZXNzZWQgaW1hZ2UgZmVhdHVyZXMhIgogICAgICAgIHJldHVybgogICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihGTEFHUy5kaXIsICd3b3JkMmlkLmpzb24nKSwgJ3InKSBhcyBmaW46CiAgICAgICAgd29yZDJpZCA9IGpzb24ubG9hZChmaW4pCiAgICBpZHMsIHBvc3RfdGV4dHMsIHRydXRoX2NsYXNzZXMsIHBvc3RfdGV4dF9sZW5zLCB0cnV0aF9tZWFucywgdGFyZ2V0X2Rlc2NyaXB0aW9ucywgdGFyZ2V0X2Rlc2NyaXB0aW9uX2xlbnMsIGltYWdlX2ZlYXR1cmVzID0gcmVhZF9kYXRhKHdvcmQyaWQ9d29yZDJpZCwgZnBzPVthcmd2WzFdXSwgeV9sZW49RkxBR1MuaWZfYW5ub3RhdGVkLCB1c2VfdGFyZ2V0X2Rlc2NyaXB0aW9uPUZMQUdTLnVzZV90YXJnZXRfZGVzY3JpcHRpb24sIHVzZV9pbWFnZT1GTEFHUy51c2VfaW1hZ2UpCiAgICBwb3N0X3RleHRzID0gbnAuYXJyYXkocG9zdF90ZXh0cykKICAgIHRydXRoX2NsYXNzZXMgPSBucC5hcnJheSh0cnV0aF9jbGFzc2VzKQogICAgcG9zdF90ZXh0X2xlbnMgPSBbZWFjaF9sZW4gaWYgZWFjaF9sZW4gPD0gRkxBR1MubWF4X3Bvc3RfdGV4dF9sZW4gZWxzZSBGTEFHUy5tYXhfcG9zdF90ZXh0X2xlbiBmb3IgZWFjaF9sZW4gaW4gcG9zdF90ZXh0X2xlbnNdCiAgICBwb3N0X3RleHRfbGVucyA9IG5wLmFycmF5KHBvc3RfdGV4dF9sZW5zKQogICAgdHJ1dGhfbWVhbnMgPSBucC5hcnJheSh0cnV0aF9tZWFucykKICAgIHRydXRoX21lYW5zID0gbnAucmF2ZWwodHJ1dGhfbWVhbnMpLmFzdHlwZShucC5mbG9hdDMyKQogICAgcG9zdF90ZXh0cyA9IHBhZF9zZXF1ZW5jZXMocG9zdF90ZXh0cywgRkxBR1MubWF4X3Bvc3RfdGV4dF9sZW4pCgogICAgaWYgbm90IEZMQUdTLnVzZV90YXJnZXRfZGVzY3JpcHRpb246CiAgICAgICAgRkxBR1MubWF4X3RhcmdldF9kZXNjcmlwdGlvbl9sZW4gPSAwCiAgICB0YXJnZXRfZGVzY3JpcHRpb25zID0gbnAuYXJyYXkodGFyZ2V0X2Rlc2NyaXB0aW9ucykKICAgIHRhcmdldF9kZXNjcmlwdGlvbl9sZW5zID0gW2VhY2hfbGVuIGlmIGVhY2hfbGVuIDw9IEZMQUdTLm1heF90YXJnZXRfZGVzY3JpcHRpb25fbGVuIGVsc2UgRkxBR1MubWF4X3RhcmdldF9kZXNjcmlwdGlvbl9sZW4gZm9yIGVhY2hfbGVuIGluIHRhcmdldF9kZXNjcmlwdGlvbl9sZW5zXQogICAgdGFyZ2V0X2Rlc2NyaXB0aW9uX2xlbnMgPSBucC5hcnJheSh0YXJnZXRfZGVzY3JpcHRpb25fbGVucykKICAgIHRhcmdldF9kZXNjcmlwdGlvbnMgPSBwYWRfc2VxdWVuY2VzKHRhcmdldF9kZXNjcmlwdGlvbnMsIEZMQUdTLm1heF90YXJnZXRfZGVzY3JpcHRpb25fbGVuKQoKICAgIGltYWdlX2ZlYXR1cmVzID0gbnAuYXJyYXkoaW1hZ2VfZmVhdHVyZXMpCgogICAgYWxsX3ByZWRpY3Rpb24gPSBbXQogICAgYWxsX2Rpc3RyaWJ1dGlvbiA9IFtdCiAgICBmb3IgaSBpbiByYW5nZSgxLCA2KToKICAgICAgICB0Zi5yZXNldF9kZWZhdWx0X2dyYXBoKCkKICAgICAgICBzYXZlciA9IHRmLnRyYWluLmltcG9ydF9tZXRhX2dyYXBoKG9zLnBhdGguam9pbihGTEFHUy5kaXIsICJydW5zIiwgRkxBR1MudGltZXN0YW1wLCAiY2hlY2twb2ludHMiLCBGTEFHUy5tb2RlbCtzdHIoaSkrIi5tZXRhIiksIGNsZWFyX2RldmljZXM9VHJ1ZSkKICAgICAgICB3aXRoIHRmLlNlc3Npb24oKSBhcyBzZXNzOgogICAgICAgICAgICBzYXZlci5yZXN0b3JlKHNlc3MsIG9zLnBhdGguam9pbihGTEFHUy5kaXIsICJydW5zIiwgRkxBR1MudGltZXN0YW1wLCAiY2hlY2twb2ludHMiLCBGTEFHUy5tb2RlbCtzdHIoaSkpKQogICAgICAgICAgICBnID0gdGYuZ2V0X2RlZmF1bHRfZ3JhcGgoKQogICAgICAgICAgICBpbnB1dF94MSA9IGcuZ2V0X3RlbnNvcl9ieV9uYW1lKCJwb3N0X3RleHQ6MCIpCiAgICAgICAgICAgIGlucHV0X3gxX2xlbiA9IGcuZ2V0X3RlbnNvcl9ieV9uYW1lKCJwb3N0X3RleHRfbGVuOjAiKQogICAgICAgICAgICBkcm9wb3V0X3JhdGVfaGlkZGVuID0gZy5nZXRfdGVuc29yX2J5X25hbWUoImRyb3BvdXRfcmF0ZV9oaWRkZW46MCIpCiAgICAgICAgICAgIGRyb3BvdXRfcmF0ZV9jZWxsID0gZy5nZXRfdGVuc29yX2J5X25hbWUoImRyb3BvdXRfcmF0ZV9jZWxsOjAiKQogICAgICAgICAgICBkcm9wb3V0X3JhdGVfZW1iZWRkaW5nID0gZy5nZXRfdGVuc29yX2J5X25hbWUoImRyb3BvdXRfcmF0ZV9lbWJlZGRpbmc6MCIpCiAgICAgICAgICAgIGJhdGNoX3NpemUgPSBnLmdldF90ZW5zb3JfYnlfbmFtZSgiYmF0Y2hfc2l6ZTowIikKICAgICAgICAgICAgaW5wdXRfeDIgPSBnLmdldF90ZW5zb3JfYnlfbmFtZSgidGFyZ2V0X2Rlc2NyaXB0aW9uOjAiKQogICAgICAgICAgICBpbnB1dF94Ml9sZW4gPSBnLmdldF90ZW5zb3JfYnlfbmFtZSgidGFyZ2V0X2Rlc2NyaXB0aW9uX2xlbjowIikKICAgICAgICAgICAgaW5wdXRfeDMgPSBnLmdldF90ZW5zb3JfYnlfbmFtZSgiaW1hZ2VfZmVhdHVyZTowIikKICAgICAgICAgICAgb3V0cHV0X3ByZWRpY3Rpb24gPSBnLmdldF90ZW5zb3JfYnlfbmFtZSgicHJlZGljdGlvbjowIikKICAgICAgICAgICAgb3V0cHV0X2Rpc3RyaWJ1dGlvbiA9IGcuZ2V0X3RlbnNvcl9ieV9uYW1lKCJkaXN0cmlidXRpb246MCIpCiAgICAgICAgICAgIGZlZWRfZGljdCA9IHtpbnB1dF94MTogcG9zdF90ZXh0cywKICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3gxX2xlbjogcG9zdF90ZXh0X2xlbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICBkcm9wb3V0X3JhdGVfaGlkZGVuOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgZHJvcG91dF9yYXRlX2NlbGw6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICBkcm9wb3V0X3JhdGVfZW1iZWRkaW5nOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2hfc2l6ZTogbGVuKHBvc3RfdGV4dHMpLAogICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfeDI6IHRhcmdldF9kZXNjcmlwdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF94Ml9sZW46IHRhcmdldF9kZXNjcmlwdGlvbl9sZW5zLAogICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfeDM6IGltYWdlX2ZlYXR1cmVzfQogICAgICAgICAgICBwcmVkaWN0aW9uLCBkaXN0cmlidXRpb24gPSBzZXNzLnJ1bihbb3V0cHV0X3ByZWRpY3Rpb24sIG91dHB1dF9kaXN0cmlidXRpb25dLCBmZWVkX2RpY3QpCiAgICAgICAgICAgIHByZWRpY3Rpb24gPSBucC5yYXZlbChwcmVkaWN0aW9uKS5hc3R5cGUobnAuZmxvYXQzMikKICAgICAgICAgICAgYWxsX3ByZWRpY3Rpb24uYXBwZW5kKHByZWRpY3Rpb24pCiAgICAgICAgICAgIGFsbF9kaXN0cmlidXRpb24uYXBwZW5kKGRpc3RyaWJ1dGlvbikKICAgICAgICAgICAgaWYgRkxBR1MuaWZfYW5ub3RhdGVkOgogICAgICAgICAgICAgICAgcHJpbnQgbXNlKHByZWRpY3Rpb24sIHRydXRoX21lYW5zKQogICAgICAgICAgICAgICAgcHJpbnQgYWNjKGRpc3RyaWJ1dGlvbjJsYWJlbCh0cnV0aF9jbGFzc2VzKSwgZGlzdHJpYnV0aW9uMmxhYmVsKGRpc3RyaWJ1dGlvbikpCiAgICBhdmdfcHJlZGljdGlvbiA9IG5wLm1lYW4oYWxsX3ByZWRpY3Rpb24sIGF4aXM9MCkKICAgIGF2Z19kaXN0cmlidXRpb24gPSBucC5tZWFuKGFsbF9kaXN0cmlidXRpb24sIGF4aXM9MCkKICAgIGlmIEZMQUdTLmlmX2Fubm90YXRlZDoKICAgICAgICBwcmludCBtc2UoYXZnX3ByZWRpY3Rpb24sIHRydXRoX21lYW5zKQogICAgICAgIHByaW50IGFjYyhkaXN0cmlidXRpb24ybGFiZWwodHJ1dGhfY2xhc3NlcyksIGRpc3RyaWJ1dGlvbjJsYWJlbChhdmdfZGlzdHJpYnV0aW9uKSkKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcmd2WzJdKToKICAgICAgICBvcy5tYWtlZGlycyhhcmd2WzJdKQogICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihhcmd2WzJdLCAicHJlZGljdGlvbnMuanNvbmwiKSwgJ3cnKSBhcyBvdXRwdXQ6CiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGlkcykpOgogICAgICAgICAgICBvdXRwdXQud3JpdGUoanNvbi5kdW1wcyh7ImlkIjogaWRzW2ldLCAiY2xpY2tiYWl0U2NvcmUiOiBmbG9hdChhdmdfcHJlZGljdGlvbltpXSl9KSsnXG4nKQoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1pJywgZGVzdD0iaW5wdXRfZGlyZWN0b3J5IikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1vJywgZGVzdD0ib3V0cHV0X2RpcmVjdG9yeSIpCiAgICBhcmd2ID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogICAgdGYuYXBwLnJ1bihhcmd2PVtOb25lLCBhcmd2LmlucHV0X2RpcmVjdG9yeSwgYXJndi5vdXRwdXRfZGlyZWN0b3J5XSkKPHxmaW1fc3VmZml4fD4KZnJvbSB1dGlscyBpbXBvcnQgKgpmcm9tIHNrbGVhcm4ubW9kZWxfc2VsZWN0aW9uIGltcG9ydCBLRm9sZAojIGZyb20gbW9kZWxzIGltcG9ydCAqCmltcG9ydCB0aW1lCjx8ZmltX2VuZHw+"]
["fb0fb4b0946d7686f98b74648d37ad999ba10896-1","fb0fb4b0946d7686f98b74648d37ad999ba10896","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAoKZnJvbSBjb21tb24udGVzdHMgaW1wb3J0IGZhY3Rvcmllcwpmcm9tIGNvbW1vbi50ZXN0cy51dGlsIGltcG9ydCB2YWxpZGF0ZV90YXJpY194bWwKZnJvbSBjb21tb24ueG1sLm5hbWVzcGFjZXMgaW1wb3J0IG5zbWFwCjx8ZmltX2hvbGV8PgpAdmFsaWRhdGVfdGFyaWNfeG1sKGZhY3Rvcmllcy5Gb290bm90ZVR5cGVGYWN0b3J5KQpkZWYgdGVzdF9mb290bm90ZV90eXBlX3htbCh4bWwpOgogICAgYXNzZXJ0IHhtbC54cGF0aCgiLi8vb3ViOmZvb3Rub3RlLnR5cGUiLCBuYW1lc3BhY2VzPW5zbWFwKQogICAgYXNzZXJ0IHhtbC54cGF0aCgiLi8vb3ViOmZvb3Rub3RlLnR5cGUuZGVzY3JpcHRpb24iLCBuYW1lc3BhY2VzPW5zbWFwKQoKCkB2YWxpZGF0ZV90YXJpY194bWwoZmFjdG9yaWVzLkZvb3Rub3RlRmFjdG9yeSkKZGVmIHRlc3RfZm9vdG5vdGVfeG1sKHhtbCk6CiAgICBhc3NlcnQgeG1sLnhwYXRoKCIuLy9vdWI6Zm9vdG5vdGUiLCBuYW1lc3BhY2VzPW5zbWFwKQoKCkB2YWxpZGF0ZV90YXJpY194bWwoZmFjdG9yaWVzLkZvb3Rub3RlRGVzY3JpcHRpb25GYWN0b3J5KQpkZWYgdGVzdF9mb290bm90ZV9kZXNjcmlwdGlvbl94bWwoeG1sKToKICAgIGFzc2VydCB4bWwueHBhdGgoIi4vL291Yjpmb290bm90ZS5kZXNjcmlwdGlvbi5wZXJpb2QiLCBuYW1lc3BhY2VzPW5zbWFwKQogICAgYXNzZXJ0IHhtbC54cGF0aCgiLi8vb3ViOmZvb3Rub3RlLmRlc2NyaXB0aW9uIiwgbmFtZXNwYWNlcz1uc21hcCkKPHxmaW1fc3VmZml4fD4KCnB5dGVzdG1hcmsgPSBweXRlc3QubWFyay5kamFuZ29fZGIKCgo8fGZpbV9lbmR8Pg=="]
["b538742f8e8e844a24f0c9413d389f310fd71a51-3","b538742f8e8e844a24f0c9413d389f310fd71a51","PHxmaW1fcHJlZml4fD4KZnJvbSBtYXRoIGltcG9ydCB0cnVuYwpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdApmcm9tIHF1ZXVlIGltcG9ydCBMaWZvUXVldWUKCgpkZWYgZXZhbHVhdGVfcnBuKHRva2VuczogTGlzdFtzdHJdKSAtPiBpbnQ6CiAgICBzdGFjayA9IExpZm9RdWV1ZSgpCgogICAgZm9yIHRva2VuIGluIHRva2VuczoKICAgICAgICBpZiB0b2tlbi5sc3RyaXAoJy0nKS5pc2RpZ2l0KCk6CiAgICAgICAgICAgIHN0YWNrLnB1dCh0b2tlbikKICAgICAgICBlbHNlOgogICAgICAgICAgICByaWdodCA9IGludChzdGFjay5nZXQoKSkKICAgICAgICAgICAgbGVmdCA9IGludChzdGFjay5nZXQoKSkKICAgICAgICAgICAgc3RhY2sucHV0KGNvbXB1dGUobGVmdCwgcmlnaHQsIHRva2VuKSkKCiAgICByZXR1cm4gc3RhY2suZ2V0KCkKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRlZiBjb21wdXRlKGxlZnQ6IGludCwgcmlnaHQ6IGludCwgb3BlcmF0b3I6IHN0cikgLT4gaW50OgogICAgaWYgb3BlcmF0b3IgPT0gJy0nOgogICAgICAgIHJldHVybiBsZWZ0IC0gcmlnaHQKICAgIGlmIG9wZXJhdG9yID09ICcrJzoKPHxmaW1fZW5kfD4="]
["b557607c4c5d644b2d01f6d20df2f5126312982d-4","b557607c4c5d644b2d01f6d20df2f5126312982d","PHxmaW1fcHJlZml4fD4KX19hbGxfXyA9IFsnY3JlYXRlX1BhZ2VPbmUnXQoKZGVmIF9kYXRhX3BhcnNpbmcoY29ycHVzX3llYXIsIGRhdGFiYXNlX3R5cGUsIGJpYmxpb21ldGVyX3BhdGgpOgoKICAgICIiIgogICAgRGVzY3JpcHRpb24gOiBQYXJzZXMgY29ycHVzZXMgZnJvbSB3b3Mgb3Igc2NvcHVzIChkZXBlbmRpbmcgb24gdGhlIGFyZyBkYXRhYmFzZV90eXBlCiAgICB1c2luZyB0aGUgZnVuY3Rpb24gYmlibGlvX3BhcnNlciBmcm9tIEJpYmxpb0FuYWx5c2lzX1V0aWxzLiAKCiAgICBVc2VzIHRoZSBmb2xsb3dpbmcgZ2xvYmFscyA6CiAgICAtIERJQ19PVVRJUl9QQVJTSU5HCiAgICAtIEZPTERFUl9OQU1FUwoKICAgIEFyZ3MgOgogICAgLSBjb3JwdXNfeWVhciA6IFRoZSB5ZWFyIG9mIHRoZSBleHRyYWN0ZWQgY29ycHVzZXMKICAgIC0gZGF0YWJhc2VfdHlwZSA6IEVpdGhlciB3b3Mgb3Igc2NvcHVzIGRlcGVuZGluZyBmcm9tIHdoZXJlIGNvbWVzIHRoZSBjb3JwdXNlcwogICAgLSByZXN1bHRzIDogQSBsaXN0IG9mIGxpc3Qgb2YgemVyb3MgYW5kIG9uZXMgZGlzcGxheWluZyBhdmFpbGFibGUgb3Igbm90CiAgICByYXdkYXRhIGFuZCBwYXJzaW5nIHdoZXJlIGRvY3VtZW50cyBhcmUgc3RvY2tlZCBieSB5ZWFyLgogICAgW1syMDE4LCAyMDE5LCAyMDIwLCAyMDIxLCAyMDIyXSwgICAjWWVhcnMKICAgICBbMCwgMCwgMCwgMCwgMF0sICAgICAgICAgICAgICAgICAgI1dvcyBSYXdkYXRhCiAgICAgWzAsIDAsIDAsIDAsIDBdLCAgICAgICAgICAgICAgICAgICNTY29wdXMgUmF3ZGF0YQogICAgIFswLCAwLCAwLCAwLCAwXSwgICAgICAgICAgICAgICAgICAjV29zIFBhcnNpbmcKICAgICBbMCwgMCwgMCwgMCwgMF0sICAgICAgICAgICAgICAgICAgI1Njb3B1cyBQYXJzaW5nCiAgICAgWzAsIDAsIDAsIDAsIDBdXSAgICAgICAgICAgICAgICAgICNDb25jYXRlbmF0aW9uICYgRGVkdXBsaWNhdGlvbgogICAgLSBzZWNvbmRfaW5zdCA6IEZvciB0aGUgdGltZSBiZWluZyBpdCBpcyBhIGJpbmFyeSB2YWx1ZSwgMSBtZWFuaW5nIHRoYXQgc2Vjb25kYXJ5IGluc3RpdHV0aW9ucyAKICAgIHNob3VsZCBiZSBwYXJzZWQsIDAgbWVhbmluZyBpdCBzaG91bGRuJ3QuIFNlY29uZGFyeSBpbnN0aXR1dGlvbnMgY2FuIChmb3IgdGhlIHRpbWUgYmVpbmcpIGJlCiAgICBmb3VuZCBpbiB0aGUgaW5zdF9maWx0ZXJfZGljIHZhcmlhYmxlIGluc2lkZSBvZiBkYXRhX3BhcnNpbmcKCiAgICBSZXR1cm5zIDoKICAgIERpc3BsYXkgdGhlIG51bWJlciBvZiBhcnRpY2xlcyBwYXJzZWQsIGFuZCB2aWEgdGhlIGZ1bmN0aW9uIGJpYmxpb19wYXJzZXIsIGNyZWF0ZSBhIHNldCBvZgogICAgZG9jdW1lbnRzICguZGF0KSB3aGljaCBhcmUgcmVzdWx0cyBvZiB0aGUgcGFyc2luZyBvZiB0aGUgdHJlYXRlZCBjb3JwdXNlcy4KCiAgICAiIiIKCiAgICAjIFN0YW5kYXJkIGxpYnJhcnkgaW1wb3J0cwogICAgaW1wb3J0IG9zCiAgICBpbXBvcnQganNvbgogICAgZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCgogICAgIyAzcmQgcGFydHkgaW1wb3J0cwogICAgaW1wb3J0IHRraW50ZXIgYXMgdGsKICAgIGZyb20gdGtpbnRlciBpbXBvcnQgbWVzc2FnZWJveAoKICAgICMgTG9jYWwgaW1wb3J0cwogICAgaW1wb3J0IEJpYmxpb0FuYWx5c2lzX1V0aWxzIGFzIGJhdQoKICAgIGZyb20gQmlibGlvQW5hbHlzaXNfVXRpbHMuQmlibGlvU3BlY2lmaWNHbG9iYWxzIGltcG9ydCBESUNfT1VURElSX1BBUlNJTkcKICAgIGZyb20gQmlibGlvQW5hbHlzaXNfVXRpbHMuQmlibGlvU3BlY2lmaWNHbG9iYWxzIGltcG9ydCBGT0xERVJfTkFNRVMKICAgICAgICAKICAgICMjIyBPbiByw6ljdXDDqHJlIGxhIHByw6lzZW5jZSBvdSBub24gZGVzIGZpY2hpZXJzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICAgICAgCiAgICByZXN1bHRzID0gX2V4aXN0aW5nX2NvcnB1c2VzKGJpYmxpb21ldGVyX3BhdGgpCgogICAgbGlzdF9jb3JwdXNfeWVhciA9IHJlc3VsdHNbMF0KICAgIGxpc3Rfd29zX3Jhd2RhdGEgPSByZXN1bHRzWzFdCiAgICBsaXN0X3dvc19wYXJzaW5nID0gcmVzdWx0c1syXQogICAgbGlzdF9zY29wdXNfcmF3ZGF0YSA9IHJlc3VsdHNbM10KICAgIGxpc3Rfc2NvcHVzX3BhcnNpbmcgPSByZXN1bHRzWzRdCiAgICBsaXN0X2NvbmNhdGVuYXRpb24gPSByZXN1bHRzWzVdCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgIAogICAgIyBDcsOpYXRpb24gZGVzIGFsaWFzIHBvdXIgc2ltcGxpZmllciBsZXMgYWNjw6hzCiAgICB3b3NfYWxpYXMgPSBGT0xERVJfTkFNRVNbJ3dvcyddCiAgICBzY29wdXNfYWxpYXMgPSBGT0xERVJfTkFNRVNbJ3Njb3B1cyddCiAgICBjb3JwdXNfcGF0aF9hbGlhcyA9IEZPTERFUl9OQU1FU1snY29ycHVzJ10KCiAgICBzY29wdXNfcGF0aF9hbGlhcyA9IFBhdGgoY29ycHVzX3BhdGhfYWxpYXMpIC8gUGF0aChzY29wdXNfYWxpYXMpCiAgICB3b3NfcGF0aF9hbGlhcyA9IFBhdGgoY29ycHVzX3BhdGhfYWxpYXMpIC8gUGF0aCh3b3NfYWxpYXMpCgogICAgcGFyc2luZ19wYXRoX2FsaWFzID0gRk9MREVSX05BTUVTWydwYXJzaW5nJ10KICAgIHJhd2RhdGFfcGF0aF9hbGlhcyA9IEZPTERFUl9OQU1FU1sncmF3ZGF0YSddCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBjb25jYXRfcGF0aF9hbGlhcyA9IFBhdGgoY29ycHVzX3BhdGhfYWxpYXMpIC8gRk9MREVSX05BTUVTWydjb25jYXQnXQogICAgZGVkdXBsaV9wYXRoX2FsaWFzID0gUGF0aChjb3JwdXNfcGF0aF9hbGlhcykgLyBGT0xERVJfTkFNRVNbJ2RlZHVwJ10KCiAgICBhcnRpY2xlX3BhdGhfYWxpYXMgPSBESUNfT1VURElSX1BBUlNJTkdbJ0EnXQo8fGZpbV9lbmR8Pg=="]
["a908b267a1385f908d5e50f11acf6fe4c330f483-2","a908b267a1385f908d5e50f11acf6fe4c330f483","PHxmaW1fcHJlZml4fD4KZnJvbSBpbnRyb2R1Y3Rpb24uZnVuY3Rpb25fZXZhbCBpbXBvcnQgZiwgZywgaAppbXBvcnQgdW5pdHRlc3QKCgpjbGFzcyBUZXN0RnVuY3Rpb25FdmFsKHVuaXR0ZXN0LlRlc3RDYXNlKToKCiAgICBkZWYgdGVzdF9mX3goc2VsZik6CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKDApLCAyLjczMjA1MDgwNzU2ODg3NykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoMC40NCksICAyLjQxNDcyMzY5OTA5OTE0MDgpCgogICAgZGVmIHRlc3RfZ190KHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZygwKSwgLTEpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgdGVzdF9oX3Qoc2VsZik6CiAgICAgICAgIyBkaXZpZGUgYnkgemVybyA9IE5vbmUKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgoMCksIE5vbmUpCgo8fGZpbV9lbmR8Pg=="]
["b534d5999d54870b75b87d73014b6ab3c8a850aa-4","b534d5999d54870b75b87d73014b6ab3c8a850aa","PHxmaW1fcHJlZml4fD4KZnJvbSBmaXJlYmFzZSBpbXBvcnQgZGIsIGF1dGgKCiMgZW1haWwgPSBpbnB1dCgiRW1haWw6IikKIyBwd2QgPSBpbnB1dCgiUGFzc3dvcmQ6IikKCiMgdXNlciA9IGF1dGguc2lnbl9pbl93aXRoX2VtYWlsX2FuZF9wYXNzd29yZChlbWFpbCwgcHdkKQoKIyBmcm9tIGRhdGEgaW1wb3J0IExldmVsT2ZBY2Nlc3MKIyBwcmludChMZXZlbE9mQWNjZXNzLkNPTU1PTl9VU0VSLnZhbHVlKQoKbGluZSA9ICcxOTIuMTY4LjEyNS0wMCcKCmltcG9ydCByZQpsaW5lID0gcmUuc3ViKCdbLi1dJywgJycsIGxpbmUpCgpwcmludChsaW5lKQoKZXhpdCgpCgpib29rc1JlZiA9IGRiLmNoaWxkKCdib29rcycpCgpmcm9tIGRhdGEgaW1wb3J0IEJvb2ssIFVzZXIsIExldmVsT2ZBY2Nlc3MKCmIgPSBCb29rKCcxMjM0NTY3ODkwMTIzJywgJ1Rlc3RlJywgIkVkaXRvcmEiLCAnR2VuZXJvJywgIkRlc2NyacOnw6NvIGRvIGxpdnJvLiIsICcyMDE5JywgWydGdWxhbm8nXSkKCnByaW50KCdzZW5kaW5nICcsIGIsICcgdG8gZmlyZWJhc2UuLi4nKQpib29rc1JlZi5wdXNoKGIudG9fZGljdCgpKQoKdSA9IFVzZXIoImZ1bGFub0BtYWlsLmNvbSIsICJGdWxhbm8iLCAiMTIzNDY3NTQzMDkxIiwgTGV2ZWxPZkFjY2Vzcy5DT01NT05fVVNFUikKZGIuY2hpbGQoJ3VzZXJzJykuY2hpbGQodS5lbWFpbCkuc2V0KHUudG9fZGljdCgpKQoKZG9jcyA9IGJvb2tzUmVmLmdldCgpCgpwcmludCgiRGF0YToiKQpwcmludChkb2NzLnZhbCgpKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgonJycKZm9yIGRvYyBpbiBkb2NzLnZhbCgpOgogICAgcHJpbnQoJ1JldHJpZXZlZCBkb2N1bWVudCAnLCBkb2MuaWQsICcgZnJvbSBGaXJlYmFzZTogJywgQm9vay5mcm9tX2RpY3QoZG9jLnRvX2RpY3QoKSkpCicnJwo8fGZpbV9lbmR8Pg=="]
["a923b42b641cd52b18297ce846fb76522d2ebf0e-3","a923b42b641cd52b18297ce846fb76522d2ebf0e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKaW1wb3J0IHJhbmRvbQppbXBvcnQgYnB5CmltcG9ydCBibWVzaApmcm9tIC5jYW1lcmFfcG9zaXRpb24gaW1wb3J0IENhbWVyYVBvc2l0aW9uCgpmcm9tIG1hdGh1dGlscyBpbXBvcnQgQ29sb3IKZnJvbSAubGlnaHRmaWVsZCBpbXBvcnQgTGlnaHRmaWVsZFByb3BlcnR5R3JvdXAKCgpjbGFzcyBMaWdodGZpZWxkQ3Vib2lkKExpZ2h0ZmllbGRQcm9wZXJ0eUdyb3VwKToKCiAgICBkZWYgY29uc3RydWN0KHNlbGYpOgogICAgICAgIHZpc3VhbHMgPSBzZWxmLmRlZmF1bHRfY29uc3RydWN0KCkKICAgICAgICBzZWxmLmxmX3R5cGUgPSAnQ1VCT0lEJwogICAgICAgIHNlbGYub2JqX2VtcHR5LmVtcHR5X2Rpc3BsYXlfdHlwZSA9ICdDVUJFJwoKICAgICAgICAjIFVwZGF0ZSBsaWdodGZpZWxkIHJlZmVyZW5jZXMKICAgICAgICBzZWxmLm9ial92aXN1YWxzLmFkZCgpLm9ial92aXN1YWwgPSB2aXN1YWxzWzBdCiAgICAgICAgc2VsZi5vYmpfdmlzdWFscy5hZGQoKS5vYmpfdmlzdWFsID0gdmlzdWFsc1sxXQogICAgICAgIHNlbGYub2JqX3Zpc3VhbHMuYWRkKCkub2JqX3Zpc3VhbCA9IHZpc3VhbHNbMl0KCiAgICAgICAgc2VsZi5vYmpfZ3JpZCA9IHZpc3VhbHNbMF0KICAgICAgICBzZWxmLnNldF9jYW1lcmFfdG9fZmlyc3RfdmlldygpCgogICAgZGVmIGNvbnN0cnVjdF92aXN1YWxzKHNlbGYsIGNvbGxlY3Rpb24pOgogICAgICAgIGdyaWQgPSBzZWxmLmNyZWF0ZV9ncmlkKCkKICAgICAgICBzcGFjZSA9IHNlbGYuY3JlYXRlX3NwYWNlKCkKICAgICAgICBmcm9udCA9IHNlbGYuY3JlYXRlX2Zyb250KCkKCiAgICAgICAgIyBBZGQgdG8gbGlnaHRmaWVsZCBjb2xsZWN0aW9uCiAgICAgICAgY29sbGVjdGlvbi5vYmplY3RzLmxpbmsoZ3JpZCkKICAgICAgICBjb2xsZWN0aW9uLm9iamVjdHMubGluayhzcGFjZSkKICAgICAgICBjb2xsZWN0aW9uLm9iamVjdHMubGluayhmcm9udCkKCiAgICAgICAgcmV0dXJuIFtncmlkLCBzcGFjZSwgZnJvbnRdCgogICAgZGVmIGNyZWF0ZV9zcGFjZShzZWxmKToKICAgICAgICAiIiIKICAgICAgICBDcmVhdGUgdmlzdWFsIHRoYXQgcmVwcmVzZW50cyB0aGUgc3BhY2UgdGhlIGxpZ2h0ZmllbGQgaXMgb2NjdXB5aW5nLgoKICAgICAgICA6cmV0dXJuOiBPYmplY3QuCiAgICAgICAgIiIiCiAgICAgICAgbmFtZSA9IHNlbGYuY29uc3RydWN0X25hbWVzKClbJ3NwYWNlJ10KICAgICAgICBicHkub3BzLm1lc2gucHJpbWl0aXZlX2N1YmVfYWRkKGxvY2F0aW9uPSgwLjAsIDAuMCwgMC4wKSkKICAgICAgICBzcGFjZSA9IGJweS5jb250ZXh0Lm9iamVjdAogICAgICAgIHNwYWNlLnNjYWxlID0gWzAuNV0gKiAzCiAgICAgICAgc3BhY2UubmFtZSA9IG5hbWUKCiAgICAgICAgc3BhY2UuZGF0YS5uYW1lID0gbmFtZQogICAgICAgICMgVW5saW5rIHRoZSBvYmplY3QgZnJvbSBpdHMgY3VycmVudCBjb2xsZWN0aW9uCiAgICAgICAgc3BhY2UudXNlcnNfY29sbGVjdGlvblswXS5vYmplY3RzLnVubGluayhzcGFjZSkKCiAgICAgICAgc3BhY2VfbWF0ID0gYnB5LmRhdGEubWF0ZXJpYWxzLm5ldyhuYW1lKQogICAgICAgIGNvbCA9IENvbG9yKCkKICAgICAgICBjb2wuaHN2ID0gKHJhbmRvbS5yYW5kb20oKSwgMS4wLCAwLjgpCiAgICAgICAgc3BhY2VfbWF0LmRpZmZ1c2VfY29sb3IgPSBjb2xbOl0gKyAoMC4xLCkKICAgICAgICBzcGFjZS5kYXRhLm1hdGVyaWFscy5hcHBlbmQoc3BhY2VfbWF0KQogICAgICAgIHNwYWNlLnNob3dfd2lyZSA9IFRydWUKCiAgICAgICAgc3BhY2UuaGlkZV9yZW5kZXIgPSBUcnVlCgogICAgICAgIHJldHVybiBzcGFjZQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBjb25zdHJ1Y3RfbmFtZXMoKToKICAgICAgICBiYXNlID0gIkxGQ3Vib2lkIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcmV0dXJuIHsnbGlnaHRmaWVsZCc6IGJhc2UsCiAgICAgICAgICAgICAgICAnY2FtZXJhJzogInt9X0NhbWVyYSIuZm9ybWF0KGJhc2UpLAogICAgICAgICAgICAgICAgJ2dyaWQnOiAie31fR3JpZCIuZm9ybWF0KGJhc2UpLAogICAgICAgICAgICAgICAgJ3NwYWNlJzogInt9X1NwYWNlIi5mb3JtYXQoYmFzZSksCjx8ZmltX2VuZHw+"]
["9b184937462e5e72f106942474a3a6edf66b81ce-1","9b184937462e5e72f106942474a3a6edf66b81ce","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwppbXBvcnQgb3MKZnJvbSBvcyBpbXBvcnQgZW52aXJvbiBhcyBlbnYKZnJvbSBkb3RlbnYgaW1wb3J0IGxvYWRfZG90ZW52CmltcG9ydCBiY3J5cHQKCnByb2plY3RfZG90ZW52ID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuZW52JykKaWYgb3MucGF0aC5leGlzdHMocHJvamVjdF9kb3RlbnYpOgogICAgbG9hZF9kb3RlbnYocHJvamVjdF9kb3RlbnYpCgpjbGFzcyBDb25maWd1cmF0aW9uKG9iamVjdCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIERFQlVHID0gRmFsc2UKICAgIFNRTEFMQ0hFTVlfVFJBQ0tfTU9ESUZJQ0FUSU9OUyA9IEZhbHNlCiAgICBTUUxBTENIRU1ZX0RBVEFCQVNFX1VSSSA9ICdteXNxbCtteXNxbGNvbm5lY3RvcjovL3swfTp7MX1AbG9jYWxob3N0L3syfScuZm9ybWF0KAogICAgICAgICAgICBlbnYuZ2V0KCdFTlZfREJfVVNFUicpLCAKPHxmaW1fZW5kfD4="]
["c851088e0ffe5095986fbfb12ced34ca50691234-1","c851088e0ffe5095986fbfb12ced34ca50691234","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGFkb3MgPSBbCiAgICB7CiAgICAgICAgJ25vbWUnOiAnRWR1YXJkbycsCiAgICAgICAgJ3NvYnJlbm9tZSc6ICdNZW5kZXMnLAo8fGZpbV9lbmR8Pg=="]
["7407288d379a73684c3f6af98a955fe480f880c2-4","7407288d379a73684c3f6af98a955fe480f880c2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKZnJvbSBvYmplY3RfZGV0ZWN0aW9uIGltcG9ydCB0Zl9odWJfc2FtcGxlCgoKZGVmIHRlc3RfbG9hZGluZ19tb2RlbF9mcm9tX3RmX2h1Yihjb2NvX2xhYmVscyk6Cgl0Zl9odWJfZGV0ID0gdGZfaHViX3NhbXBsZS5UZkh1YlNhbXBsZURldGVjdG9yKGNvY29fbGFiZWxzX3BhdGg9Y29jb19sYWJlbHMpCglvdXRwdXQgPSB0Zl9odWJfZGV0LmRldGVjdG9yKHRmLm9uZXMoKDEsIDI1NiwgMjU2LCAzKSwgdGYudWludDgpKQoJYXNzZXJ0IG91dHB1dFsiZGV0ZWN0aW9uX2FuY2hvcl9pbmRpY2VzIl0ubnVtcHkoKS5zaGFwZSA9PSAoMSwgMTAwKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKZGVmIHRlc3RfY2Fyc19kZXRlY3Rpb24oc2FtcGxlX2ltYWdlLCBjb2NvX2xhYmVscyk6Cgl0Zl9odWJfZGV0ID0gdGZfaHViX3NhbXBsZS5UZkh1YlNhbXBsZURldGVjdG9yKGNvY29fbGFiZWxzX3BhdGg9Y29jb19sYWJlbHMpCjx8ZmltX2VuZHw+"]
["b5cdf89c9f95169954cf10ee4dc26df483ff8ca9-3","b5cdf89c9f95169954cf10ee4dc26df483ff8ca9","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMiBvbiAyMDIxLTA0LTI1IDA2OjU5CgppbXBvcnQgZGphbmdvLmRiLm1vZGVscy5kZWxldGlvbgpmcm9tIGRqYW5nby5jb25mIGltcG9ydCBzZXR0aW5ncwpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucywgbW9kZWxzCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBpbml0aWFsID0gVHJ1ZQoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICBtaWdyYXRpb25zLnN3YXBwYWJsZV9kZXBlbmRlbmN5KHNldHRpbmdzLkFVVEhfVVNFUl9NT0RFTCksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkNyZWF0ZU1vZGVsKAogICAgICAgICAgICBuYW1lPSdVc2VyUHJvZmlsZScsCiAgICAgICAgICAgIGZpZWxkcz1bCiAgICAgICAgICAgICAgICAoJ2lkJywgbW9kZWxzLkJpZ0F1dG9GaWVsZChhdXRvX2NyZWF0ZWQ9VHJ1ZSwgcHJpbWFyeV9rZXk9VHJ1ZSwgc2VyaWFsaXplPUZhbHNlLCB2ZXJib3NlX25hbWU9J0lEJykpLAogICAgICAgICAgICAgICAgKCdlbWFpbCcsIG1vZGVscy5FbWFpbEZpZWxkKG1heF9sZW5ndGg9NTApKSwKICAgICAgICAgICAgICAgICgncGhvbmUnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjApKSwKICAgICAgICAgICAgICAgICgnc2hpcHBpbmdfbmFtZScsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD01MCkpLAogICAgICAgICAgICAgICAgKCdzaGlwcGluZ19hZGRyZXNzXzEnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTApKSwKICAgICAgICAgICAgICAgICgnc2hpcHBpbmdfYWRkcmVzc18yJywgbW9kZWxzLkNoYXJGaWVsZChibGFuaz1UcnVlLCBtYXhfbGVuZ3RoPTUwKSksCiAgICAgICAgICAgICAgICAoJ3NoaXBwaW5nX2NpdHknLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTApKSwKICAgICAgICAgICAgICAgICgnc2hpcHBpbmdfc3RhdGUnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MikpLAogICAgICAgICAgICAgICAgKCdzaGlwcGluZ19jb3VudHJ5JywgbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwKSksCiAgICAgICAgICAgICAgICAoJ3NoaXBwaW5nX3ppcCcsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMCkpLAogICAgICAgICAgICAgICAgKCdiaWxsaW5nX25hbWUnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTApKSwKICAgICAgICAgICAgICAgICgnYmlsbGluZ19hZGRyZXNzXzEnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTApKSwKICAgICAgICAgICAgICAgICgnYmlsbGluZ19hZGRyZXNzXzInLCBtb2RlbHMuQ2hhckZpZWxkKGJsYW5rPVRydWUsIG1heF9sZW5ndGg9NTApKSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgKCdiaWxsaW5nX2NpdHknLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTApKSwKICAgICAgICAgICAgICAgICgnYmlsbGluZ19zdGF0ZScsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yKSksCiAgICAgICAgICAgICAgICAoJ2JpbGxpbmdfY291bnRyeScsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD01MCkpLAogICAgICAgICAgICAgICAgKCdiaWxsaW5nX3ppcCcsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMCkpLAo8fGZpbV9lbmR8Pg=="]
["572a0fe753205bda8cc54a91d99616a10565726e-1","572a0fe753205bda8cc54a91d99616a10565726e","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nOiB1dGYtOAoKaW1wb3J0IHJhbmRvbQpmcm9tIGlvIGltcG9ydCBCeXRlc0lPCmZyb20gY2FwdGNoYS5pbWFnZSBpbXBvcnQgSW1hZ2VDYXB0Y2hhCgo8fGZpbV9ob2xlfD4KICAgIGRlZiBnZXRDYXB0Y2hhKHNlbGYpOgogICAgICAgIF9jaGFycyA9ICdBQkNERUZHSEpLTE1OUFFSU1RVVldYWTIzNDU2Nzg5JwogICAgICAgIGNoYXJzID0gcmFuZG9tLnNhbXBsZShfY2hhcnMsIDQpCiAgICAgICAgc2VsZi5zZXNzaW9uLmNhcHRjaGEgPSAoJycuam9pbihjaGFycykpLmxvd2VyKCkKICAgICAgICBpbWFnZSA9IEltYWdlQ2FwdGNoYShmb250cz1bJy4vc3RhdGljL2ZvbnRzL2FyaWFsLnR0ZicsICcuL3N0YXRpYy9mb250cy9hcmlhbC50dGYnXSkKICAgICAgICBkYXRhID0gaW1hZ2UuZ2VuZXJhdGUoY2hhcnMpCiAgICAgICAgcmV0dXJuIGRhdGEKPHxmaW1fc3VmZml4fD4KY2xhc3MgQ2FwdGNoYToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXNzaW9uKToKICAgICAgICBzZWxmLnNlc3Npb24gPSBzZXNzaW9uCgo8fGZpbV9lbmR8Pg=="]
["7b48b0311d3777bb97757a0c3fa89dcabdaebc51-3","7b48b0311d3777bb97757a0c3fa89dcabdaebc51","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCgppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IHRlbGVib3QKCmJvdCA9IHRlbGVib3QuVGVsZUJvdChvcy5nZXRlbnYoJ1RFTEVHUkFNX0FDQ0VTU19UT0tFTicpKQpodG1sX3BhcnNlciA9ICdodG1sLnBhcnNlcicKb3V0cHV0X2ZvbGRlciA9ICcuLi91cGxvYWRzL2Jvb2tzLycKCnNlc3Npb24gPSByZXF1ZXN0cy5zZXNzaW9uKCkKc2Vzc2lvbi5wcm94aWVzID0gewogICAgJ2h0dHAnOiBvcy5nZXRlbnYoJ0hUVFBfUFJPWElFU19VUkwnLCAnc29ja3M1aDovLzEyNy4wLjAuMTo5MTUwJyksCiAgICAnaHR0cHMnOiBvcy5nZXRlbnYoJ0hUVFBTX1BST1hJRVNfVVJMJywgJ3NvY2tzNWg6Ly8xMjcuMC4wLjE6OTE1MCcpLAp9Cgpjb21tYW5kc19saXN0ID0gWycvc3RhcnQnLCAnL2hlbHAnLCAnL2NoYW5nZV9saWJyYXJ5J10Kc2VydmljZXNfbGlzdCA9IFsn0KTQu9C40LHRg9GB0YLQsCcsICfQmtC40LHQtdGA0JvQtdC90LjQvdC60LAnLCBdCgo8fGZpbV9ob2xlfD4KZmxpYnVzdGFfb25pb25fbGluayA9ICdodHRwOi8vZmxpYnVzdGFoZXplb3VzMy5vbmlvbicKCnNjaV9odWJfdXJsID0gJ2h0dHBzOi8vc2NpLWh1Yi5ydS8nCjx8ZmltX3N1ZmZpeHw+CmN5YmVybGVuaW5rYV91cmwgPSAnaHR0cHM6Ly9jeWJlcmxlbmlua2EucnUvYXBpL3NlYXJjaCcKY3liZXJsZW5pbmthX2RldGFpbF91cmwgPSAnaHR0cHM6Ly9jeWJlcmxlbmlua2EucnUvYXJ0aWNsZS9ue30nCmN5YmVybGVuaW5rYV9kb3dubG9hZF91cmwgPSAnaHR0cHM6Ly9jeWJlcmxlbmlua2EucnUvYXJ0aWNsZS9ue30ve30nCgo8fGZpbV9lbmR8Pg=="]
["7b48b0311d3777bb97757a0c3fa89dcabdaebc51-5","7b48b0311d3777bb97757a0c3fa89dcabdaebc51","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCgppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IHRlbGVib3QKCmJvdCA9IHRlbGVib3QuVGVsZUJvdChvcy5nZXRlbnYoJ1RFTEVHUkFNX0FDQ0VTU19UT0tFTicpKQpodG1sX3BhcnNlciA9ICdodG1sLnBhcnNlcicKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpvdXRwdXRfZm9sZGVyID0gJy4uL3VwbG9hZHMvYm9va3MvJwoKc2Vzc2lvbiA9IHJlcXVlc3RzLnNlc3Npb24oKQpzZXNzaW9uLnByb3hpZXMgPSB7Cjx8ZmltX2VuZHw+"]
["a939452e16e992782e1bc47a1758b59c662877fd-4","a939452e16e992782e1bc47a1758b59c662877fd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJhbmRvbQppbXBvcnQgdGltZQppbXBvcnQgdHVydGxlCgoiIiIKR2VuZXJhdGVzIGNpcmN1bGFyIG1vbmRyaWFucy4gWW91IHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSB0aGlzIHNvIGNvbW1lbnRzCmFyZSByZWxhdHZlbHkgc3BhcnNlLgoiIiIKCnR1cnRsZS5zZXR1cCgyMDAsIDIwMCkKCndpbiA9IHR1cnRsZS5TY3JlZW4oKQp3aW4uc2NyZWVuc2l6ZSgyMDAsIDIwMCkKCgpkZWYgZ2VuZXJhdGVfbW9uZHJpYW4oY2VudGVycyk6CiAgICB0ID0gdHVydGxlLlBlbigpCiAgICB0LnBlbmNvbG9yKCdibGFjaycpCiAgICB0Lmh0KCkKICAgIGxhc3RfY29sb3IgPSBOb25lCiAgICBjb2xvcnMgPSB7CiAgICAgICAgKDEsIDAsIDApOiAiUmVkIiwKICAgICAgICAoMCwgMCwgMSk6ICJCbHVlIiwKICAgICAgICAoMSwgMSwgMCk6ICJZZWxsb3ciCjx8ZmltX2hvbGV8PgogICAgICAgIHQuZG93bigpCgogICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgIGNvbG9yID0gcmFuZG9tLmNob2ljZShsaXN0KGNvbG9ycy5rZXlzKCkpKQogICAgICAgICAgICBpZiBjb2xvciAhPSBsYXN0X2NvbG9yOgogICAgICAgICAgICAgICAgbGFzdF9jb2xvciA9IGNvbG9yCiAgICAgICAgICAgICAgICBicmVhawoKICAgICAgICB0LmZpbGxjb2xvcihjb2xvcikKICAgICAgICByYWRpdXMgPSByYW5kb20uY2hvaWNlKFszMCwgNDAsIDUwLCA2MF0pCgogICAgICAgIHQuYmVnaW5fZmlsbCgpCiAgICAgICAgdC5jaXJjbGUocmFkaXVzKSAgIyBkcmF3IGEgY2lyY2xlIG9mIHJhbmRvbSByYWRpdXMKICAgICAgICB0LmVuZF9maWxsKCkKCgpmb3IgaSBpbiByYW5nZSgxMCk6CiAgICBjZW50ZXJzID0gWyg0MCAqIGkgKyAyMCwgNDAqaisyMCkgZm9yIGkgaW4gcmFuZ2UoLTMsIDMpCiAgICAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKC0zLCAzKV0KICAgIHJhbmRvbS5zaHVmZmxlKGNlbnRlcnMpCiAgICBnZW5lcmF0ZV9tb25kcmlhbihjZW50ZXJzKQogICAgaW5wdXQoIlByZXNzIGVudGVyIHRvIGNvbnRpbnVlIikKICAgIHR1cnRsZS5jbGVhcnNjcmVlbigpCjx8ZmltX3N1ZmZpeHw+CiAgICB9CiAgICBmb3IgY2VudGVyIGluIGNlbnRlcnM6CiAgICAgICAgdC51cCgpCiAgICAgICAgdC5nb3RvKGNlbnRlcikKPHxmaW1fZW5kfD4="]
["23c2b327aab4f4b6eff35a85485e25814870fa05-4","23c2b327aab4f4b6eff35a85485e25814870fa05","PHxmaW1fcHJlZml4fD4KZnJvbSBwcm9jZXNzaW5nLm5scCBpbXBvcnQgKAogICAgZXh0cmFjdF9jdmVfcmVmZXJlbmNlcywKICAgIGV4dHJhY3RfamlyYV9yZWZlcmVuY2VzLAogICAgZXh0cmFjdF9wYXRoX3Rva2VucywKICAgIGV4dHJhY3Rfc3BlY2lhbF90ZXJtcywKKQoKCmRlZiB0ZXN0X2V4dHJhY3Rfc3BlY2lhbF90ZXJtcygpOgogICAgZGVzY3JpcHRpb24gPSAoCiAgICAgICAgIm9yZy5hcGFjaGUuaHR0cC5jb25uLnNzbC5BYnN0cmFjdFZlcmlmaWVyIGluIEFwYWNoZSBIdHRwQ29tcG9uZW50cyBIdHRwQ2xpZW50ICIKICAgICAgICAiYmVmb3JlIDQuMy41IGFuZCBIdHRwQXN5bmNDbGllbnQgYmVmb3JlIDQuMC4yIGRvZXMgbm90IHByb3Blcmx5IHZlcmlmeSB0aGF0IHRoZSAiCiAgICAgICAgInNlcnZlciBob3N0bmFtZSBtYXRjaGVzIGEgZG9tYWluIG5hbWUgaW4gdGhlIHN1YmplY3QncyBDb21tb24gTmFtZSAoQ04pIG9yICIKICAgICAgICAic3ViamVjdEFsdE5hbWUgZmllbGQgb2YgdGhlIFguNTA5IGNlcnRpZmljYXRlLCB3aGljaCBhbGxvd3MgbWFuLWluLXRoZS1taWRkbGUgIgogICAgICAgICdhdHRhY2tlcnMgdG8gc3Bvb2YgU1NMIHNlcnZlcnMgdmlhIGEgIkNOPSIgc3RyaW5nIGluIGEgZmllbGQgaW4gdGhlIGRpc3Rpbmd1aXNoZWQgJwogICAgICAgICduYW1lIChETikgb2YgYSBjZXJ0aWZpY2F0ZSwgYXMgZGVtb25zdHJhdGVkIGJ5IHRoZSAiZm9vLENOPXd3dy5hcGFjaGUub3JnIiBzdHJpbmcgaW4gJwogICAgICAgICJ0aGUgTyBmaWVsZC4iCiAgICApCgogICAgdGVybXMgPSBleHRyYWN0X3NwZWNpYWxfdGVybXMoZGVzY3JpcHRpb24pCgogICAgYXNzZXJ0IHRlcm1zID09ICgKICAgICAgICAib3JnLmFwYWNoZS5odHRwLmNvbm4uc3NsLkFic3RyYWN0VmVyaWZpZXIiLAogICAgICAgICJIdHRwQ29tcG9uZW50cyIsCiAgICAgICAgIkh0dHBDbGllbnQiLAogICAgICAgICI0LjMuNSIsCiAgICAgICAgIkh0dHBBc3luY0NsaWVudCIsCiAgICAgICAgIjQuMC4yIiwKICAgICAgICAic3ViamVjdCdzIiwKICAgICAgICAiKENOKSIsCiAgICAgICAgInN1YmplY3RBbHROYW1lIiwKICAgICAgICAiWC41MDkiLAogICAgICAgICJtYW4taW4tdGhlLW1pZGRsZSIsCiAgICAgICAgIlNTTCIsCiAgICAgICAgJyJDTj0iJywKICAgICAgICAiKEROKSIsCiAgICAgICAgJyJmb28sQ049d3d3LmFwYWNoZS5vcmciJywKICAgICkKCgpkZWYgdGVzdF9hZHZfcmVjb3JkX3BhdGhfZXh0cmFjdGlvbl9ub19yZWFsX3BhdGhzKCk6CiAgICByZXN1bHQgPSBleHRyYWN0X3BhdGhfdG9rZW5zKEFEVklTT1JZX1RFWFQpCgogICAgYXNzZXJ0IHJlc3VsdCA9PSBbIjE1LjI2LjEiLCAnXFwiUmFkaW8nLCAicHJvdGVjdGlvbixcXCJdCgoKQURWSVNPUllfVEVYVCA9ICIiIlVuc3BlY2lmaWVkIHZ1bG5lcmFiaWxpdHkgaW4gVWNvbm5lY3QgYmVmb3JlIDE1LjI2LjEsIGFzIHVzZWQKICAgIGluIGNlcnRhaW4gRmlhdCBDaHJ5c2xlciBBdXRvbW9iaWxlcyAoRkNBKSBmcm9tIDIwMTMgdG8gMjAxNSBtb2RlbHMsIGFsbG93cwogICAgcmVtb3RlIGF0dGFja2VycyBpbiB0aGUgc2FtZSBjZWxsdWxhciBuZXR3b3JrIHRvIGNvbnRyb2wgdmVoaWNsZSBtb3ZlbWVudCwKICAgIGNhdXNlIGh1bWFuIGhhcm0gb3IgcGh5c2ljYWwgZGFtYWdlLCBvciBtb2RpZnkgZGFzaGJvYXJkIHNldHRpbmdzIHZpYQogICAgdmVjdG9ycyByZWxhdGVkIHRvIG1vZGlmaWNhdGlvbiBvZiBlbnRlcnRhaW5tZW50LXN5c3RlbSBmaXJtd2FyZSBhbmQgYWNjZXNzCiAgICBvZiB0aGUgQ0FOIGJ1cyBkdWUgdG8gaW5zdWZmaWNpZW50IFxcIlJhZGlvIHNlY3VyaXR5IHByb3RlY3Rpb24sXFwiIGFzCiAgICBkZW1vbnN0cmF0ZWQgb24gYSAyMDE0IEplZXAgQ2hlcm9rZWUgTGltaXRlZCBGV0QuIiIiCgpBRFZJU09SWV9URVhUXzIgPSAiIiJJbiBBcGFjaGUgQ29tbW9ucyBJTyBiZWZvcmUgMi43LCBXaGVuIGludm9raW5nIHRoZSBtZXRob2QgRmlsZU5hbWVVdGlscy5ub3JtYWxpemUKd2l0aCBhbiBpbXByb3BlciBpbnB1dCBzdHJpbmcsIGxpa2UgIi8vLi4vZm9vIiwgb3IgIlxcLi5cXGZvbyIsIHRoZSByZXN1bHQgd291bGQgYmUKdGhlIHNhbWUgdmFsdWUsIHRodXMgcG9zc2libHkgcHJvdmlkaW5nIGFjY2VzcyB0byBmaWxlcyBpbiB0aGUgcGFyZW50IGRpcmVjdG9yeSwKYnV0IG5vdCBmdXJ0aGVyIGFib3ZlICh0aHVzICJsaW1pdGVkIiBwYXRoIHRyYXZlcnNhbCksIGlmIHRoZSBjYWxsaW5nIGNvZGUgd291bGQKdXNlIHRoZSByZXN1bHQgdG8gY29uc3RydWN0IGEgcGF0aCB2YWx1ZS4iIiIKCgpkZWYgdGVzdF9hZHZfcmVjb3JkX3BhdGhfZXh0cmFjdGlvbl9oYXNfcmVhbF9wYXRocygpOgogICAgcmVzdWx0ID0gZXh0cmFjdF9wYXRoX3Rva2VucyhBRFZJU09SWV9URVhUXzIpCgogICAgYXNzZXJ0IHJlc3VsdCA9PSBbIjIuNyIsICJGaWxlTmFtZVV0aWxzLm5vcm1hbGl6ZSIsICIvLy4uL2ZvbyIsICJcXC4uXFxmb28iXQoKCmRlZiB0ZXN0X2Fkdl9yZWNvcmRfcGF0aF9leHRyYWN0aW9uX3N0cmljdF9leHRlbnNpb25zKCk6CiAgICAiIiIKICAgIElmIHN0cmljdF9leHRlbnNpb25zIGlzIFRydWUsIGl0IHdpbGwgYWx3YXlzIGV4dHJhY3QgdG9rZW5zIHdpdGggKGJhY2spIHNsYXNoZXMsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGJ1dCBpdCB3aWxsIG9ubHkgY29sbGVjdCBzaW5nbGUgZmlsZSBuYW1lcyBpZiB0aGV5IGhhdmUgdGhlIGNvcnJlY3QgZXh0ZW5zaW9uLgogICAgIiIiCiAgICByZXN1bHQgPSBleHRyYWN0X3BhdGhfdG9rZW5zKAogICAgICAgIEFEVklTT1JZX1RFWFRfMgo8fGZpbV9lbmR8Pg=="]
["938dc54d70393dbedc07f4dacc64e68aca9d0534-5","938dc54d70393dbedc07f4dacc64e68aca9d0534","PHxmaW1fcHJlZml4fD4KZnJvbSAuaHR0cCBpbXBvcnQgZ2V0X2h0bWwKZnJvbSBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHJlCmZyb20gZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKCl9fYWxsX18gPSBbJ3Nwb3RyYWNfa2V5cycsJ3Nwb3RyYWNfcGxheWVydGFibGUnLCdzcG90cmFjX2NhcHRhYmxlJ10KCmRlZiBwYXJzZV90YWcodGFnKToKICAgIHJldHVybiAnJy5qb2luKHBhcnNlX3RhZyh4KSBpZiB4Ll9fY2xhc3NfXy5fX25hbWVfXyA9PSAnVGFnJyBlbHNlIHN0cih4KSBmb3IgeCBpbiB0YWcuY29udGVudHMpCgpkZWYgZm10X251bWJlcih2YWwpOgogICAgdmFsID0gdmFsLnN0cmlwKCkKICAgIGlmIHZhbCA9PSAnLSc6CiAgICAgICAgcmV0dXJuICcnCiAgICBpZiB2YWwuc3RhcnRzd2l0aCgnJCcpOgogICAgICAgIHJldHVybiByZS5zdWIocidbLCRdJywnJyx2YWwpCiAgICByZXR1cm4gdmFsCgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxheWVyVGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmRlZiBwYXJzZV90YWJsZSh0YWJsZSk6CiAgICBkZWYgcGFyc2VfcGlkKHRkKToKICAgICAgICBsYXN0ID0gcGFyc2VfdGFnKHRkLnNlbGVjdF9vbmUoJ3NwYW4nKSkKICAgICAgICBmdWxsID0gcGFyc2VfdGFnKHRkLnNlbGVjdF9vbmUoJ2EnKSkKICAgICAgICBmaXJzdCA9IGZ1bGxbOmZ1bGwucmluZGV4KGxhc3QpXS5zdHJpcCgpCiAgICAgICAgcmV0dXJuIFtmaXJzdCxsYXN0LGZ1bGxdCgogICAgZGVmIHBhcnNlX3Rib2R5KHRhYmxlKToKICAgICAgICBmb3IgdHIgaW4gdGFibGUuc2VsZWN0X29uZSgndGJvZHknKS5zZWxlY3QoJ3RyJyk6CiAgICAgICAgICAgIGNlbGxzID0gdHIuc2VsZWN0KCd0ZCcpCiAgICAgICAgICAgIHlpZWxkIHBhcnNlX3BpZChjZWxsc1swXSkgKyBbZm10X251bWJlcihwYXJzZV90YWcodGQpKSBmb3IgdGQgaW4gY2VsbHNbMTpdXQoKICAgIGNvbHMgPSBbJ2ZpcnN0bmFtZScsJ2xhc3RuYW1lJywnZnVsbG5hbWUnXStbcGFyc2VfdGFnKHRoKSBmb3IgdGggaW4gdGFibGUuc2VsZWN0X29uZSgndGhlYWQnKS5zZWxlY3Rfb25lKCd0cicpLnNlbGVjdCgndGgnKVsxOl1dCiAgICByZXR1cm4gW2NvbHNdK1sqcGFyc2VfdGJvZHkodGFibGUpXQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKZGVmIG1lcmdlX2NvbHMoYSxiKToKICAgIENPTFMgPSBbJ2ZpcnN0bmFtZScsICdsYXN0bmFtZScsICdmdWxsbmFtZScsJ0xlYWd1ZScsJ0FnZScsICdQb3MuJywgJ1N0YXR1cycsICdCYXNlIFNhbGFyeScsICdTaWduaW5nIEJvbnVzJywgJ0luY2VudGl2ZXMnLCAnVG90YWwgU2FsYXJ5JywgJ0Fkai4gU2FsYXJ5JywgJ1BheXJvbGwgJSddCjx8ZmltX2VuZHw+"]
["7b4ffa69e1764da84bbdb08592604e63d04a2e49-3","7b4ffa69e1764da84bbdb08592604e63d04a2e49","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IEFueSwgRGljdCwgSXRlcmF0b3IsIGNhc3QKCmltcG9ydCBweXRlc3QKZnJvbSBzcWxhbGNoZW15Lm9ybSBpbXBvcnQgU2Vzc2lvbgpmcm9tIHN0YXJsZXR0ZS50ZXN0Y2xpZW50IGltcG9ydCBUZXN0Q2xpZW50Cgpmcm9tIHBvbC5kYiBpbXBvcnQgc2EKZnJvbSBwb2wuZGIudGFibGVzIGltcG9ydCBDaGlpSW5kZXhSZWxhdGVkCmZyb20gdGVzdHMuZml4dHVyZXMubW9ja19zZXJ2aWNlIGltcG9ydCBNb2NrVXNlclNlcnZpY2UKZnJvbSB0ZXN0cy5maXh0dXJlcy5tb2NrX2RiX3JlY29yZCBpbXBvcnQgTW9ja1N1YmplY3QKCmluZGV4X2FwaV9wcmVmaXggPSAiL3YwL2luZGljZXMiCgoKZGVmIG1vY2tfc3ViamVjdHMoCiAgICBkYl9zZXNzaW9uOiBTZXNzaW9uLAogICAgbW9ja19zdWJqZWN0OiBNb2NrU3ViamVjdCwKICAgIGlkOiBpbnQsCiAgICB0eXBlOiBpbnQgPSAwLAogICAgb2Zmc2V0PTAsCiAgICBsaW1pdD0zMCwKICAgIGlzX25zZnc9VHJ1ZSwKKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgd2hlcmUgPSBbQ2hpaUluZGV4UmVsYXRlZC5pZHhfcmx0X3JpZCA9PSBpZF0KICAgIGlmIHR5cGUgIT0gMDoKICAgICAgICB3aGVyZS5hcHBlbmQoQ2hpaUluZGV4UmVsYXRlZC5pZHhfcmx0X3R5cGUgPT0gdHlwZSkKICAgIGZvciByIGluIGNhc3QoCjx8ZmltX2VuZHw+"]
["8d70d5e66cd401be1b7ae610897d4294723128c3-2","8d70d5e66cd401be1b7ae610897d4294723128c3","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc9dXRmLTgKCmZyb20gZmxhc2sgaW1wb3J0IEZsYXNrLCByZXF1ZXN0LCByZW5kZXJfdGVtcGxhdGUsIHJlZGlyZWN0LCB1cmxfZm9yLCBzZXNzaW9uCmZyb20gY29uZmlnIGltcG9ydCBkYl9jb25maWcsIHBhZ2VfY29uZmlnLCBwYWdlX2NvbmZpZzIKZnJvbSBkYnV0aWwuZGJ1dGlsIGltcG9ydCBEQgpmcm9tIGRidXRpbC5wYWdldXRpbCBpbXBvcnQgUGFnZUNvbmYKZnJvbSBhc3luY3V0aWwuYXN5bmN1dGlsIGltcG9ydCBUYXNrCmZyb20gY29weSBpbXBvcnQgZGVlcGNvcHkKaW1wb3J0IGpzb24KCmFwcCA9IEZsYXNrKF9fbmFtZV9fKQphcHAuc2VjcmV0X2tleSA9ICd4eHgnCmRiID0gREIobXlzcWxfZGI9ZGJfY29uZmlnWydkYiddKQpwYWdldXRpbD1QYWdlQ29uZihkYikKdGFzayA9IFRhc2soNCkKcGFnZV9jb25maWcuc2V0ZGVmYXVsdCgnZmF2aWNvbicsICcvc3RhdGljL2ltZy9mYXZpY29uLmljbycpCnBhZ2VfY29uZmlnLnNldGRlZmF1bHQoJ3RpdGxlJywgJ1dvbml1LWNtZGInKQpwYWdlX2NvbmZpZy5zZXRkZWZhdWx0KCdicmFuZF9uYW1lJywgJ1dvbml1LWNtZGInKQoKCkBhcHAucm91dGUoJy9sb2dpbicsIG1ldGhvZHM9WydHRVQnLCAnUE9TVCddKQpkZWYgbG9naW4oKToKICAgIGlmICd1c2VybmFtZScgaW4gc2Vzc2lvbjoKICAgICAgICByZXR1cm4gcmVkaXJlY3QoJy8nKQogICAgaWYgcmVxdWVzdC5tZXRob2QgPT0gIlBPU1QiOgogICAgICAgIG5hbWUgPSByZXF1ZXN0LmZvcm0uZ2V0KCd1c2VybmFtZScpCiAgICAgICAgcGFzc3dkID0gcmVxdWVzdC5mb3JtLmdldCgncGFzc3dvcmQnKQogICAgICAgICNwcmludChuYW1lICsgIiAgIiArIHBhc3N3ZCkKICAgICAgICBvYmogPSB7InJlc3VsdCI6IDF9CiAgICAgICAgaWYgbmFtZSBhbmQgcGFzc3dkOgogICAgICAgICAgICBzcWwgPSAnc2VsZWN0ICogZnJvbSB1c2VyIHdoZXJlIHVzZXJuYW1lPSIlcyIgYW5kIHBhc3N3b3JkPSIlcyInICUgKG5hbWUsIHBhc3N3ZCkKICAgICAgICAgICAgI3ByaW50KHNxbCkKICAgICAgICAgICAgY3VyID0gZGIuZXhlY3V0ZShzcWwpCiAgICAgICAgICAgICMgI3ByaW50IGN1ci5mZXRjaG9uZSgpCiAgICAgICAgICAgIGlmIGN1ci5mZXRjaG9uZSgpOgogICAgICAgICAgICAgICAgb2JqWyJyZXN1bHQiXSA9IDAKICAgICAgICAgICAgICAgIHNlc3Npb25bJ3VzZXJuYW1lJ10gPSBuYW1lCiAgICAgICAgcmV0dXJuIGpzb24uZHVtcHMob2JqKQogICAgZWxzZToKICAgICAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKCdsb2dpbi5odG1sJykKCgpAYXBwLnJvdXRlKCcvbG9nb3V0JykKZGVmIGxvZ291dCgpOgogICAgc2Vzc2lvbi5wb3AoJ3VzZXJuYW1lJykKICAgIHJldHVybiByZWRpcmVjdCgnL2xvZ2luJykKCgpAYXBwLnJvdXRlKCcvcGFnZS88dGVtcGxhdGU+JykKZGVmIHJlbmRlcih0ZW1wbGF0ZSk6CiAgICBpZiAndXNlcm5hbWUnIGluIHNlc3Npb246CiAgICAgICAgI3ByaW50KHRlbXBsYXRlLCBwYWdlX2NvbmZpZywgcGFnZV9jb25maWcyKQogICAgICAgICMgc3FsID0gInNlbGVjdCBzLmNvbHVtZV9uYW1lLHMuY29sdW1lX3RpdGxlICwgdC5uYW1lLHQudGl0bGUgZnJvbSBzdHJpbmdfY2xvIHMgaW5uZXIgam9pbiAgIHRhYmxlX2luZm8gdCBvbiB0LmlkID0gcy50YWJsZV9uYW1lOyIKICAgICAgICAjIGN1ciA9IGRiLmV4ZWN1dGUoc3FsKQogICAgICAgICMgcmVjb3JkcyA9IGN1ci5mZXRjaGFsbCgpCiAgICAgICAgIyBwYWdlX2NvbmYgPSB7fQogICAgICAgICMgZm9yIHJlY29yZCBpbiByZWNvcmRzOgogICAgICAgICMgICAgIHRhYmxlX25hbWUgPSByZWNvcmRbIm5hbWUiXQogICAgICAgICMgICAgIHRhYmxlX3RpdGxlID0gcmVjb3JkWyJ0aXRsZSJdCiAgICAgICAgIyAgICAgY29sdW1lX25hbWUgPSByZWNvcmRbImNvbHVtZV9uYW1lIl0KICAgICAgICAjICAgICBjb2x1bWVfdGl0bGUgPSByZWNvcmRbImNvbHVtZV90aXRsZSJdCiAgICAgICAgIyAgICAgY29sdW1lX2RpY3QgPSB7Im5hbWUiOiBjb2x1bWVfbmFtZSwgInRpdGxlIjogY29sdW1lX3RpdGxlfQogICAgICAgICMgICAgIHBhZ2VfY29uZlt0YWJsZV9uYW1lXSA9IHBhZ2VfY29uZi5nZXQodGFibGVfbmFtZSwgeyJuYW1lIjogdGFibGVfbmFtZSwKICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGl0bGUiOiB0YWJsZV90aXRsZSwKICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGF0YSI6IFtdfSkKICAgICAgICAjICAgICBwYWdlX2NvbmZbdGFibGVfbmFtZV0uZ2V0KCJkYXRhIiwgW10pLmFwcGVuZChjb2x1bWVfZGljdCkKCiAgICAgICAgcGFnZV9jb25mPXBhZ2V1dGlsLmNvbmZfcGFnZSgpCiAgICAgICAgI3ByaW50KCItLS0tLS0tLS0tLS0tLS0tLSBwcHBwcHBwcHBwcHBwIixqc29uLmR1bXBzKCBwYWdlX2NvbmYpKQogICAgICAgIGFsbF9wYWdlID0gZGVlcGNvcHkocGFnZV9jb25maWcpCiAgICAgICAgYWxsX3BhZ2VbIm1lbnUiXS5leHRlbmQocGFnZV9jb25mLnZhbHVlcygpKQogICAgICAgICNwcmludCgiKioqKioqKm1lbWNvbmYqKioqKioqIiwgcGFnZV9jb25mLnZhbHVlcygpKQogICAgICAgICNwcmludCgiKioqKioqKioqYWxsY29uZioqKioqIiwganNvbi5kdW1wcyhwYWdlX2NvbmZpZ1sibWVudSJdKSkKICAgICAgICBwYWdlX2pzb249cGFnZV9jb25maWcyLmdldCh0ZW1wbGF0ZSxwYWdlX2NvbmYuZ2V0KHRlbXBsYXRlLHt9KSkKICAgICAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKCdwYWdlL2NvbW1vbi5odG1sJywgZGF0YT1hbGxfcGFnZSwgcGFnZV9qc29uPXBhZ2VfanNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lPXNlc3Npb25bJ3VzZXJuYW1lJ10pCiAgICAgICAgIyByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKCdwYWdlLycrdGVtcGxhdGUrJy5odG1sJyxkYXRhPXBhZ2VfY29uZmlnLHVzZXJuYW1lPXNlc3Npb25bJ3VzZXJuYW1lJ10pCgogICAgZWxzZToKICAgICAgICByZXR1cm4gcmVkaXJlY3QoJy9sb2dpbicpCgoKQGFwcC5yb3V0ZSgnL2FkZGFwaScsIG1ldGhvZHM9WydQT1NUJ10pCmRlZiBhZGRhcGkoKToKICAgIG9iaiA9IHJlcXVlc3QuZm9ybS50b19kaWN0KCkKICAgIHRhYmxlID0gb2JqLnBvcCgnYWN0aW9uX3R5cGUnKQogICAga2V5cyA9IG9iai5rZXlzKCkKICAgIHZhbHVlcyA9IG9iai52YWx1ZXMoKQogICAgI3ByaW50KHZhbHVlcykKICAgIHZhbHVlc3RyID0gbWFwKGxhbWJkYSB4OiAiPyIsIHZhbHVlcykKCiAgICBzcWwgPSAnaW5zZXJ0IGludG8gJXMgKCVzKSB2YWx1ZXMgKCVzKScgJSAodGFibGUsICcsJy5qb2luKGtleXMpLCAnLCcuam9pbih2YWx1ZXN0cikpCiAgICAjcHJpbnQoc3FsKQogICAgZGIuZXhlY3V0ZShzcWwsIHBhcmFtZXRlcnM9dHVwbGUodmFsdWVzKSkKICAgIHJlcyA9IHsncmVzdWx0JzogJ29rJ30KICAgIHJldHVybiBqc29uLmR1bXBzKHJlcykKCgpAYXBwLnJvdXRlKCcvZGVsYXBpJywgbWV0aG9kcz1bJ1BPU1QnXSkKZGVmIGRlbGFwaSgpOgogICAgb2JqID0gcmVxdWVzdC5mb3JtLnRvX2RpY3QoKQogICAgdGFibGUgPSBvYmoucG9wKCdhY3Rpb25fdHlwZScpCiAgICB0YWJsZV9pZCA9IG9iai5wb3AoJ2lkJykKICAgIHNxbCA9ICdkZWxldGUgZnJvbSAlcyB3aGVyZSBpZD0lcycgJSAodGFibGUsIHRhYmxlX2lkKQogICAgIyBzcWwgPSAnaW5zZXJ0IGludG8gJXMgKCVzKSB2YWx1ZXMgKCIlcyIpJyAlICh0YWJsZSwnLCcuam9pbihrZXlzKSwnIiwiJy5qb2luKHZhbHVlcykpCiAgICAjcHJpbnQoc3FsKQogICAgZGIuZXhlY3V0ZShzcWwpCiAgICByZXMgPSB7J3Jlc3VsdCc6ICdvayd9CiAgICByZXR1cm4ganNvbi5kdW1wcyhyZXMpCgoKQGFwcC5yb3V0ZSgnL2xpc3RhcGknKQpkZWYgbGlzdGFwaSgpOgogICAgYWN0aW9uX3R5cGUgPSByZXF1ZXN0LmFyZ3MuZ2V0KCdhY3Rpb25fdHlwZScpCiAgICBzcWwgPSAnc2VsZWN0ICogZnJvbSAnICsgYWN0aW9uX3R5cGUKICAgIGN1ciA9IGRiLmV4ZWN1dGUoc3FsKQogICAgcmVzID0geyJyZXN1bHQiOiBjdXIuZmV0Y2hhbGwoKX0KICAgICNwcmludChqc29uLmR1bXBzKHJlcykpCiAgICByZXR1cm4ganNvbi5kdW1wcyhyZXMpCgoKQGFwcC5yb3V0ZSgnL3VwZGF0ZWFwaScsIG1ldGhvZHM9WydQT1NUJ10pCmRlZiB1cGRhdGVhcGkoKToKICAgIG9iaiA9IHJlcXVlc3QuZm9ybS50b19kaWN0KCkKICAgIHRhYmxlID0gb2JqLnBvcCgnYWN0aW9uX3R5cGUnKQogICAgdGFibGVfaWQgPSBvYmoucG9wKCdpZCcpCiAgICBhcnIgPSBbXQogICAgcGFyYW1zID0gW10KICAgIGZvciBrZXksIHZhbCBpbiBvYmouaXRlbXMoKToKICAgICAgICBhcnIuYXBwZW5kKGtleSArICc9PycpCiAgICAgICAgcGFyYW1zLmFwcGVuZCh2YWwpCiAgICAjcHJpbnQoIiVzICAgJXMiICUgKGFyciwgcGFyYW1zKSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAga2V5cyA9IG9iai5rZXlzKCkKICAgIHZhbHVlcyA9IG9iai52YWx1ZXMoKQogICAgc3FsID0gJ3VwZGF0ZSAlcyBzZXQgJyAlICh0YWJsZSkKCjx8ZmltX2VuZHw+"]
["a92bb7103f4d23d23d6dcd60eaa94c9d9f4a4614-1","a92bb7103f4d23d23d6dcd60eaa94c9d9f4a4614",{"$cut":{"chars":169916,"head":"PHxmaW1fcHJlZml4fD4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICBMaWJyYXJ5IFNQQUNFOiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PToKCgojQXBwIGJ1aWxkZXIKaW1wb3J0IHN0cmVhbWxpdCBhcyBzdCAKZnJvbSBQSUwgaW1wb3J0IEltYWdlIAoKI1Zpc3VhbGl6YXRpb24KaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdCAKaW1wb3J0IG1hdHBsb3RsaWIKbWF0cGxvdGxpYi51c2UoIkFnZyIpCmltcG9ydCBzZWFib3JuIGFzIHNucwppbXBvcnQgdGltZSAKCiNNYXRoZW1hdGljcwppbXBvcnQgcGFuZGFzIGFzIHBkIAppbXBvcnQgbnVtcHkgYXMgbnAKCiNUaW1lc2VyaWVzIGRhdGFmcmFtZQpmcm9tIFRpbWVTZXJpZXNEYXRhU2V0IGltcG9ydCAqCiNhbmltYXRpb24KZnJvbSBJUHl0aG9uLmRpc3BsYXkgaW1wb3J0IFZpZGVvCgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIE5lZWRlZCBGdW5jdGlvbnMgU1BBQ0U6ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09OgojIENPU1QgRlVOQ1RJT05TCiNFdWNsaWRpYW4gRGlzdGFuY2UKaW1wb3J0IG51bXB5CmRlZiBzaWcoeik6CiAgICByZXR1cm4gMS8oMStucC5lKiotKHopKQoKCmRlZiBjb21wdXRlX2dyYWQoWCwgeSwgdyk6CiAgICAiIiIKICAgIENvbXB1dGUgZ3JhZGllbnQgb2YgY3Jvc3MgZW50cm9weSBmdW5jdGlvbiB3aXRoIHNpZ21vaWRhbCBwcm9iYWJpbGl0aWVzCiAgICBBcmdzOiAKICAgICAgICBYIChudW1weS5uZGFycmF5KTogZXhhbXBsZXMuIEluZGl2aWR1YWxzIGluIHJvd3MsIGZlYXR1cmVzIGluIGNvbHVtbnMKICAgICAgICB5IChudW1weS5uZGFycmF5KTogbGFiZWxzLiBWZWN0b3IgY29ycmVzcG9uZGluZyB0byByb3dzIGluIFgKICAgICAgICB3IChudW1weS5uZGFycmF5KTogd2VpZ2h0IHZlY3RvcgogICAgUmV0dXJuczogCiAgICAgICAgbnVtcHkubmRhcnJheSAKICAgICIiIgogICAgbSA9IFguc2hhcGVbMF0KICAgIFogPSB3LmRvdChYLlQpCiAgICBBID0gc2lnKFopCiAgICBjb3N0ID0gKC0xLyBtKSAqIChYLlQgKiAoQSAtIHkpKS5zdW0oYXhpcz0xKSAKICAgIHJldHVybiBjb3N0CgpkZWYgZXVjbGlkaWFuX2Rpc3RhbmNlKHgsIHkpOgogICAgZnJvbSBzY2lweS5zcGF0aWFsIGltcG9ydCBkaXN0YW5jZQogICAgcmV0dXJuIGRpc3RhbmNlLmV1Y2xpZGVhbih4LCB5KQoKCiNSZXNlYXJjaCBQYXBlciBkaXN0YW5jZQojTGluZWFyIHJlZ3Jlc3Npb24KI3BpY2sgc29tZSByYW5kb20gdmFsdWUgdG8gc3RhcnQgd2l0aAp0aGV0YV8wID0gbnAucmFuZG9tLnJhbmRvbSgpCnRoZXRhXzEgPSBucC5yYW5kb20ucmFuZG9tKCkKCgpkZWYgaHlwb3RoZXNpcyAodGhldGFfMCx0aGV0YV8xLFgpOgogICAgcmV0dXJuIHRoZXRhXzEqWCArIHRoZXRhXzAKCgpkZWYgY29zdF9mdW5jdGlvbiAoWCx5LHRoZXRhXzAsdGhldGFfMSk6CiAgICBtID0gbGVuKFgpCiAgICBzdW1tYXRpb24gPSAwLjAKICAgIGZvciBpIGluIHJhbmdlIChtKToKICAgICAgICBzdW1tYXRpb24gKz0gKCh0aGV0YV8xICogWFtpXSArIHRoZXRhXzApIC0geVtpXSkqKjIKICAgIHJldHVybiBzdW1tYXRpb24gLygyKm0pCgoKZGVmIGdyYWRpZW50X2Rlc2NlbnQoWCx5LHRoZXRhXzAsdGhldGFfMSxsZWFybmluZ19yYXRlKToKICAgIHQwX2Rlcml2ID0gMAogICAgdDFfZGVyaXYgPSAwCiAgICBtID0gbGVuKFgpCiAgICAKICAgIGZvciBpIGluIHJhbmdlIChtKToKICAgICAgICB0MF9kZXJpdiArPSAodGhldGFfMSAqIFhbaV0gKyB0aGV0YV8wKSAtIHlbaV0KICAgICAgICB0MV9kZXJpdiArPSAoKHRoZXRhXzEgKiBYW2ldICsgdGhldGFfMCkgLSB5W2ldKSogWFtpXQogICAgdGhldGFfMCAtPSAoMS9tKSAqIGxlYXJuaW5nX3JhdGUgKiB0MF9kZXJpdgogICAgdGhldGFfMSAtPSAoMS9tKSAqIGxlYXJuaW5nX3JhdGUgKiB0MV9kZXJpdgogICAgCiAgICByZXR1cm4gdGhldGFfMCx0aGV0YV8xCgoKZGVmIHRyYWluaW5nIChYLCB5LCB0aGV0YV8wLCB0aGV0YV8xLCBsZWFybmluZ19yYXRlLCBpdGVycyk6CiAgICBjb3N0X2hpc3RvcnkgPSBbMF0KICAgIHQwX2hpc3RvcnkgPSBbMF0KICAgIHQxX2hpc3RvcnkgPSBbMF0KICAgIAogICAgZm9yIGkgaW4gcmFuZ2UoaXRlcnMpOgogICAgICAgIHRoZXRhXzAsdGhldGFfMSA9IGdyYWRpZW50X2Rlc2NlbnQoWCwgeSwgdGhldGFfMCwgdGhldGFfMSwgbGVhcm5pbmdfcmF0ZSkKICAgICAgICB0MF9oaXN0b3J5LmFwcGVuZCh0aGV0YV8wKQogICAgICAgIHQxX2hpc3RvcnkuYXBwZW5kKHRoZXRhXzEpCiAgICAgICAgY29zdCA9IGNvc3RfZnVuY3Rpb24oWCwgeSwgdGhldGFfMCwgdGhldGFfMSkKICAgICAgICBjb3N0X2hpc3RvcnkuYXBwZW5kKGNvc3QpCiAgICAgICAgaWYgaSUxMCA9PSAwOgogICAgICAgICAgICBwcmludCgiaXRlcj17fSwgdGhldGFfMD17fSwgdGhldGFfMT17fSwgY29zdD0ge30iLmZvcm1hdChpLCB0aGV0YV8wLCB0aGV0YV8xLCBjb3N0KSkKICAgIHJldHVybiB0MF9oaXN0b3J5LCB0MV9oaXN0b3J5LCBjb3N0X2hpc3RvcnkKCgoKIyBHZW9kZXNpYyBEaXN0YW5jZTogcGlwIGluc3RhbGwgZ2VvcHkKZGVmIGdlb2Rlc2ljX2Rpc3RhbmNlKHgsIHkpOgogICAgZnJvbSBnZW9weS5kaXN0YW5jZSBpbXBvcnQgZ2VvZGVzaWMKICAgICMgUHJpbnQgdGhlIGRpc3RhbmNlIGNhbGN1bGF0ZWQgaW4ga20KICAgIHJldHVybiBnZW9kZXNpYyh4LCB5KQoKICAgIAojIFZpc3VhbGl6YXRpb24gCmRlZiBzY2F0dGVyX3Bsb3R0aW5nKGRhdGFzZXQpOgogICAgaW1wb3J0IHBhbmRhcyBhcyBwZAogICAgaW1wb3J0IG51bXB5IGFzIG5wCiAgICBpbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CiAgICBpbXBvcnQgc2VhYm9ybiBhcyBzZWFib3JuSW5zdGFuY2UKICAgIGZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0IHRyYWluX3Rlc3Rfc3BsaXQKICAgIGZyb20gc2tsZWFybi5saW5lYXJfbW9kZWwgaW1wb3J0IExpbmVhclJlZ3Jlc3Npb24K"}}]
["b54bac36449538ebf0a1d23aaaa586272d34c0bc-2","b54bac36449538ebf0a1d23aaaa586272d34c0bc","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQpyIiIiCiAjICAgICAgICAuLS0tLiAgICAgICAgIC4tLS0tLS0tLS0tLQogIyAgICAgICAvICAgICBcICBfXyAgLyAgICAtLS0tLS0KICMgICAgICAvIC8gICAgIFwoICApLyAgICAtLS0tLSAgIChgLScpICBfIF8oYC0nKSAgICAgICAgICAgICAgPC0uIChgLScpXwogIyAgICAgLy8vLy8vICAgICdcLyBgICAgLS0tICAgICAgKCBPTykuLS8oIChPTyApLi0+ICAgICAuLT4gICAgICBcKCBPTykgKSAgICAgLi0+CiAjICAgIC8vLy8gLyAvLyAgOiAgIDogLS0tICAgICAgKCwtLS0tLS0uIFwgICAgLidfIChgLScpLS0tLS4gLC0tLi8gLC0tLyAgLC0tLicgICwtLgogIyAgIC8vIC8gICAvICAvIGBcLyAnLS0gICAgICAgICB8ICAuLS0tJyAnYCctLi5fXykoIE9PKS4tLiAnIHwgICBcIHwgIHwgKGAtJyknLicgIC8KICMgIC8vICAgICAgICAgIC8vLi5cXCAgICAgICAgICAofCAgJy0tLiAgfCAgfCAgJyB8KCBfKSB8IHwgfCB8ICAuICd8ICB8KShPTyBcICAgIC8KICMgPT09PT09PT09PT09VVU9PT09VVU9PT09ICAgICAgfCAgLi0tJyAgfCAgfCAgLyA6IFx8ICB8KXwgfCB8ICB8XCAgICB8ICB8ICAvICAgLykKICMgICAgICAgICAgICAgJy8vfHxcXGAgICAgICAgICAgfCAgYC0tLS4gfCAgJy0nICAvICAnICAnLScgJyB8ICB8IFwgICB8ICBgLS8gICAvYAogIyAgICAgICAgICAgICAgICcnYGAgICAgICAgICAgICBgLS0tLS0tJyBgLS0tLS0tJyAgICBgLS0tLS0nIGAtLScgIGAtLScgICAgYC0tJwogIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIwogIyBBdXRob3I6IGVkb255IC0gZWRvbnl6cGNAZ21haWwuY29tCiAjCiAjIHR3aXR0ZXIgOiBAZWRvbnl6cGMKICMKICMgTGFzdCBtb2RpZmllZDogMjAxNS0wNS0yOCAyMjoyMAogIwogIyBGaWxlbmFtZTogZXh0cmFjdG9yLnB5CiAjCiAjIERlc2NyaXB0aW9uOiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZAo8fGZpbV9ob2xlfD4KIiIiCmltcG9ydCBvcwppbXBvcnQgcmUKY2xhc3MgRXh0cmFjdG9yKG9iamVjdCk6CiAgICAiIiIKICAgIEV4dHJhY3QgdGhlIHNwZWNpZmljIGNvbnRlbnQgd2l0aCBrZXlzLgogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwga2V5cywgZXh0cmFjdGVkX2ZpbGUsIG91dHB1dF9maWxlPU5vbmUsIGZsYWc9Tm9uZSk6CiAgICAgICAgaWYgdHlwZShrZXlzKSBpcyBsaXN0OgogICAgICAgICAgICBzZWxmLmtleXMgPSBrZXlzCiAgICAgICAgZWxpZiB0eXBlKGtleXMpIGlzIHN0cjoKICAgICAgICAgICAgc2VsZi5rZXlzID1ba2V5c10KICAgICAgICBlbHNlOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJXcm9uZyBLZXkgdHlwZSIpCgogICAgICAgIGlmIG91dHB1dF9maWxlOgogICAgICAgICAgICBzZWxmLm91dHB1dF9maWxlID0gb3V0cHV0X2ZpbGUKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLm91dHB1dF9maWxlID0gJ0VYVFJBQ1QnCgogICAgICAgIGlmIGZsYWcgaXMgTm9uZToKICAgICAgICAgICAgc2VsZi5mbGFnID0gWzAsIDBdICAjZmxhZyBhcmUgY29udHJvbGxpbmcgYWRkIHRoZSBrZXlzIGludG8gd3JpdGUgZmlsZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYuZmxhZyA9IGZsYWcKCiAgICAgICAgc2VsZi5wYXR0ZXJuID0gRXh0cmFjdG9yLnJlX3BhdHRlcm4oc2VsZi5rZXlzKQogICAgICAgIHNlbGYuZXh0cmFjdGVkX2ZpbGUgPSBleHRyYWN0ZWRfZmlsZQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiByZV9wYXR0ZXJuKGtleXMpOgogICAgICAgIGlmIGxlbihrZXlzKSA+IDI6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlRoZSBrZXlzIGFyZSB0b28gbXVjaCwgc2ltcGxpZnkgdGhlbSBsZXNzIHRoYW4gMi5cbiIpCiAgICAgICAgcmVndWxhcl9leHByZXNzaW9uID0ga2V5c1swXSArICcoP1A8Y29uPi4qKScKICAgICAgICBpZiBsZW4oa2V5cykgPT0gMjoKICAgICAgICAgICAgcmVndWxhcl9leHByZXNzaW9uICs9IGtleXNbMV0KICAgICAgICByZXR1cm4gcmUuY29tcGlsZShyZWd1bGFyX2V4cHJlc3Npb24pCgogICAgZGVmIHBhcnNlcihzZWxmKToKICAgICAgICAiIiIKICAgICAgICBFeHRyYWN0IHRoZSBjb250ZW50IGJldHdlZW4ga2V5cyhpZiBoYXMpLgogICAgICAgICIiIgogICAgICAgIHdpdGggb3BlbihzZWxmLm91dHB1dF9maWxlLCAndycpIGFzIG91dDoKICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZXh0cmFjdGVkX2ZpbGUpIGFzIGV4ZmlsZToKICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGV4ZmlsZS5yZWFkbGluZXMoKToKICAgICAgICAgICAgICAgICAgICBnID0gc2VsZi5wYXR0ZXJuLnNlYXJjaChsaW5lKQogICAgICAgICAgICAgICAgICAgIGlmIGc6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZmxhZ1swXToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZShzZWxmLmtleXNbMF0pCiAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZShnLmdyb3VwKCdjb24nKSkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5mbGFnWzFdOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKHNlbGYua2V5c1sxXSkKICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKCdcbicpCiAgICAgICAgcHJpbnQoJ0ZpbmlzaCBFeHRyYWN0JykKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICB0bXAgPSBFeHRyYWN0b3IoJ2h0dHA6JywgJ2NhcmVlcl9vbGQnLCBmbGFnPVsxLDBdKQogICAgdG1wLnBhcnNlcigpCjx8ZmltX3N1ZmZpeHw+CiAjCiAjICoqKioqKgogIyBFeHRyYWN0IHRoZSBzcGVjaWZpYyBjb250ZW50IGZyb20gdGV4dCB3aXRoIHRoZSBnaXZlbiBrZXlzLgo8fGZpbV9lbmR8Pg=="]
["a92821303b45de7c25b813ea8c7f307994d93a24-4","a92821303b45de7c25b813ea8c7f307994d93a24","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cyAgIyBOT1FBOiBGNDAxCmZyb20gc3lzIGltcG9ydCBhcmd2CgoKZGVmIG1haW4oKToKICAgIGlmIGxlbihhcmd2KSA9PSAyOgoKICAgICAgICBpZiBhcmd2WzFdID09ICdzZXJ2ZXInOgogICAgICAgICAgICBmcm9tIHRlc3RzLnJ1bl9zZXJ2ZXIgaW1wb3J0IHJ1bl9zZXJ2ZXIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBydW5fc2VydmVyKCkKCjx8ZmltX2VuZHw+"]
["a51db47aebe3aa5137eff70ccaf5109f6df9b09c-5","a51db47aebe3aa5137eff70ccaf5109f6df9b09c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQganNvbgoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0b3JjaAoKZnJvbSBweXJhbWlkX25lc3RlZF9uZXIuZGF0YS5kYXRhc2V0IGltcG9ydCBQeXJhbWlkTmVyRGF0YXNldApmcm9tIHB5cmFtaWRfbmVzdGVkX25lci5tb2RlbCBpbXBvcnQgUHlyYW1pZE5lcgpmcm9tIHB5cmFtaWRfbmVzdGVkX25lci50cmFpbmluZy5vcHRpbSBpbXBvcnQgZ2V0X2RlZmF1bHRfc2dkX29wdGltCmZyb20gcHlyYW1pZF9uZXN0ZWRfbmVyLnRyYWluaW5nLnRyYWluZXIgaW1wb3J0IFB5cmFtaWROZXJUcmFpbmVyCmZyb20gcHlyYW1pZF9uZXN0ZWRfbmVyLnV0aWxzLmRhdGEgaW1wb3J0IGpzb25saW5lX2RhdGFfcmVhZGVyCgpERVZJQ0UgPSAnY3VkYScgaWYgdG9yY2guY3VkYS5pc19hdmFpbGFibGUoKSBlbHNlICdjcHUnCgo8fGZpbV9ob2xlfD4KCgpkZWYgZ2V0X2RlZmF1bHRfbW9kZWwobGV4aWNvbiwgZW50aXRpZXNfbGV4aWNvbik6CiAgICByZXR1cm4gUHlyYW1pZE5lcigKICAgICAgICB3b3JkX2xleGljb249bGV4aWNvbiwKICAgICAgICBlbnRpdGllc19sZXhpY29uPWVudGl0aWVzX2xleGljb24sCiAgICAgICAgd29yZF9lbWJlZGRpbmdzPVsnZW4tZ2xvdmUnLCAnZW4tY3Jhd2wnXSwKICAgICAgICBsYW5ndWFnZV9tb2RlbD1Ob25lLAogICAgICAgIGNoYXJfZW1iZWRkaW5nc19kaW09NjAsCiAgICAgICAgZW5jb2Rlcl9oaWRkZW5fc2l6ZT0xMDAsCiAgICAgICAgZW5jb2Rlcl9vdXRwdXRfc2l6ZT0yMDAsCiAgICAgICAgZGVjb2Rlcl9oaWRkZW5fc2l6ZT0xMDAsCiAgICAgICAgaW52ZXJzZV9weXJhbWlkPUZhbHNlLAogICAgICAgIGN1c3RvbV90b2tlbml6ZXI9Tm9uZSwKICAgICAgICBweXJhbWlkX21heF9kZXB0aD04LAogICAgICAgIGRlY29kZXJfZHJvcG91dD0wLjQsCiAgICAgICAgZW5jb2Rlcl9kcm9wb3V0PTAuNCwKICAgICAgICBkZXZpY2U9REVWSUNFLAogICAgKQoKCmRlZiBnZXRfYmVydF9tb2RlbChsZXhpY29uLCBlbnRpdGllc19sZXhpY29uKToKICAgIHJldHVybiBQeXJhbWlkTmVyKAogICAgICAgIHdvcmRfbGV4aWNvbj1sZXhpY29uLAogICAgICAgIGVudGl0aWVzX2xleGljb249ZW50aXRpZXNfbGV4aWNvbiwKICAgICAgICB3b3JkX2VtYmVkZGluZ3M9Wydlbi1nbG92ZScsICdlbi1jcmF3bCddLAogICAgICAgIGxhbmd1YWdlX21vZGVsPSdiZXJ0LWJhc2UtbXVsdGlsaW5ndWFsLWNhc2VkJywKICAgICAgICBjaGFyX2VtYmVkZGluZ3NfZGltPTYwLAogICAgICAgIGVuY29kZXJfaGlkZGVuX3NpemU9MTAwLAogICAgICAgIGVuY29kZXJfb3V0cHV0X3NpemU9MjAwLAogICAgICAgIGRlY29kZXJfaGlkZGVuX3NpemU9MTAwLAogICAgICAgIGludmVyc2VfcHlyYW1pZD1GYWxzZSwKICAgICAgICBjdXN0b21fdG9rZW5pemVyPU5vbmUsCiAgICAgICAgcHlyYW1pZF9tYXhfZGVwdGg9OCwKICAgICAgICBkZWNvZGVyX2Ryb3BvdXQ9MC40LAogICAgICAgIGVuY29kZXJfZHJvcG91dD0wLjQsCiAgICAgICAgZGV2aWNlPURFVklDRSwKICAgICkKCgpkZWYgbG9hZF9kYXRhKGRhdGFzZXRfc2l6ZSwgbGV4X3NpemU9MSk6CiAgICBwcmludCgiTG9hZGluZyB0cmFpbiBkYXRhIikKICAgIHRyYWluID0gbG9hZF93b3JkbmV0X3NwbGl0KCd0cmFpbicsIGRhdGFzZXRfc2l6ZVswXSkKCiAgICBwcmludCgiTG9hZGluZyB0ZXN0ICYgZGV2IGRhdGEiKQogICAgdGVzdCwgZGV2ID0gbG9hZF93b3JkbmV0X3NwbGl0KCd0ZXN0JywgZGF0YXNldF9zaXplWzFdKSwgbG9hZF93b3JkbmV0X3NwbGl0KCdkZXYnLCBkYXRhc2V0X3NpemVbMl0pCgogICAgZW50aXRpZXNfbGV4aWNvbiA9IHtlbnRpdHlbJ2NhdGVnb3J5J10gZm9yIHNhbXBsZSBpbiB0cmFpbiBmb3IgZW50aXR5IGluIHNhbXBsZVsnZW50aXRpZXMnXX0KICAgIGVudGl0aWVzX2xleGljb24gfD0ge2VudGl0eVsnY2F0ZWdvcnknXSBmb3Igc2FtcGxlIGluIHRlc3QgZm9yIGVudGl0eSBpbiBzYW1wbGVbJ2VudGl0aWVzJ119CiAgICBlbnRpdGllc19sZXhpY29uIHw9IHtlbnRpdHlbJ2NhdGVnb3J5J10gZm9yIHNhbXBsZSBpbiBkZXYgZm9yIGVudGl0eSBpbiBzYW1wbGVbJ2VudGl0aWVzJ119CiAgICBlbnRpdGllc19sZXhpY29uID0gbGlzdChlbnRpdGllc19sZXhpY29uKQoKICAgIHByaW50KCJMb2FkaW5nIHZvY2FidWxhcnkiKQogICAgbGV4X3NpemUgPSAoMTAwMDAwLCAyMDAwMDAsIDQwMDAwMClbbGV4X3NpemVdCiAgICB3aXRoIG9wZW4oZiJkYXRhL3ZvY2FiX3tsZXhfc2l6ZX0ubGlzdCIsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGZwOgogICAgICAgIGxleGljb24gPSBbbGluZS5zdHJpcCgpIGZvciBsaW5lIGluIGZwXQoKICAgIHJldHVybiBsZXhpY29uLCBlbnRpdGllc19sZXhpY29uCgoKZGVmIGluc3RhbnRpYXRlX2RhdGFzZXRzKGxleGljb24sIGVudGl0aWVzX2xleGljb24sIGRhdGFzZXRfc2l6ZSwgZHJvcF9lbnRpdGllcz1Ob25lKToKICAgIHByaW50KCJJbnN0YW50aWF0aW5nIHRyYWluIGRhdGFzZXQiKQogICAgdHJhaW5fZGF0YSA9IFB5cmFtaWROZXJEYXRhc2V0KAogICAgICAgIGpzb25saW5lX2RhdGFfcmVhZGVyKCdkYXRhL3dvcmRuZXQtZGF0YXNldC50cmFpbi5qc29ubCcsIGRhdGFzZXRfc2l6ZVswXSwgZHJvcF9lbnRpdGllcyksCiAgICAgICAgcHlyYW1pZF9tYXhfZGVwdGg9OCwKICAgICAgICB0b2tlbl9sZXhpY29uPWxleGljb24sCiAgICAgICAgZW50aXRpZXNfbGV4aWNvbj1lbnRpdGllc19sZXhpY29uLAogICAgICAgIGN1c3RvbV90b2tlbml6ZXI9Tm9uZSwKICAgICAgICBjaGFyX3ZlY3Rvcml6ZXI9VHJ1ZSwKICAgICkuZ2V0X2RhdGFsb2FkZXIoCiAgICAgICAgc2h1ZmZsZT1UcnVlLAogICAgICAgIGJhdGNoX3NpemU9MTI4LAogICAgICAgIGRldmljZT1ERVZJQ0UsCiAgICAgICAgYnVja2V0aW5nPVRydWUKICAgICkKICAgIHByaW50KCJJbnN0YW50aWF0aW5nIHRlc3QgZGF0YXNldCIpCiAgICB0ZXN0X2RhdGEgPSBQeXJhbWlkTmVyRGF0YXNldCgKICAgICAgICBqc29ubGluZV9kYXRhX3JlYWRlcignZGF0YS93b3JkbmV0LWRhdGFzZXQudGVzdC5qc29ubCcsIGRhdGFzZXRfc2l6ZVsxXSwgZHJvcF9lbnRpdGllcyksCiAgICAgICAgcHlyYW1pZF9tYXhfZGVwdGg9OCwKICAgICAgICB0b2tlbl9sZXhpY29uPWxleGljb24sCiAgICAgICAgZW50aXRpZXNfbGV4aWNvbj1lbnRpdGllc19sZXhpY29uLAogICAgICAgIGN1c3RvbV90b2tlbml6ZXI9Tm9uZSwKICAgICAgICBjaGFyX3ZlY3Rvcml6ZXI9VHJ1ZSwKICAgICkuZ2V0X2RhdGFsb2FkZXIoCiAgICAgICAgc2h1ZmZsZT1UcnVlLAogICAgICAgIGJhdGNoX3NpemU9MzIsCiAgICAgICAgZGV2aWNlPURFVklDRSwKICAgICAgICBidWNrZXRpbmc9VHJ1ZQogICAgKQogICAgcHJpbnQoIkluc3RhbnRpYXRpbmcgZGV2IGRhdGFzZXQiKQogICAgZGV2X2RhdGEgPSBQeXJhbWlkTmVyRGF0YXNldCgKICAgICAgICBqc29ubGluZV9kYXRhX3JlYWRlcignZGF0YS93b3JkbmV0LWRhdGFzZXQuZGV2Lmpzb25sJywgZGF0YXNldF9zaXplWzJdLCBkcm9wX2VudGl0aWVzKSwKICAgICAgICBweXJhbWlkX21heF9kZXB0aD04LAogICAgICAgIHRva2VuX2xleGljb249bGV4aWNvbiwKICAgICAgICBlbnRpdGllc19sZXhpY29uPWVudGl0aWVzX2xleGljb24sCiAgICAgICAgY3VzdG9tX3Rva2VuaXplcj1Ob25lLAogICAgICAgIGNoYXJfdmVjdG9yaXplcj1UcnVlLAogICAgKS5nZXRfZGF0YWxvYWRlcigKICAgICAgICBzaHVmZmxlPVRydWUsCiAgICAgICAgYmF0Y2hfc2l6ZT0zMiwKICAgICAgICBkZXZpY2U9REVWSUNFLAogICAgICAgIGJ1Y2tldGluZz1UcnVlCiAgICApCiAgICByZXR1cm4gZGV2X2RhdGEsIHRlc3RfZGF0YSwgdHJhaW5fZGF0YQoKCmRlZiBydW5fdHJhaW5pbmcobGV4X3NpemU9MiwgdXNlX2JlcnQ9RmFsc2UpOgogICAgZGF0YXNldF9zaXplID0gKDQwMDAwLCA1MDAwLCAyMDAwKQogICAgbGV4aWNvbiwgZW50aXRpZXNfbGV4aWNvbiA9IGxvYWRfZGF0YShkYXRhc2V0X3NpemUsIGxleF9zaXplPWxleF9zaXplKQoKICAgIGRyb3BfZW50aXRpZXMgPSAoCiAgICAgICAgJ1RvcHMnLAogICAgICAgICMgJ2FjdCcsCiAgICAgICAgIyAnYW5pbWFsJywKICAgICAgICAjICdhcnRpZmFjdCcsCiAgICAgICAgJ2F0dHJpYnV0ZScsCiAgICAgICAgIyAnYm9keScsCiAgICAgICAgIyAnY29nbml0aW9uJywKICAgICAgICAjICdjb21tdW5pY2F0aW9uJywKICAgICAgICAnZXZlbnQnLAogICAgICAgICdmZWVsaW5nJywKICAgICAgICAjICdmb29kJywKICAgICAgICAjICdncm91cCcsCiAgICAgICAgIyAnbG9jYXRpb24nLAogICAgICAgICMgJ29iamVjdCcsCiAgICAgICAgIyAncGVyc29uJywKICAgICAgICAjICdwaGVub21lbm9uJywKICAgICAgICAjICdwbGFudCcsCiAgICAgICAgJ3Bvc3Nlc3Npb24nLAogICAgICAgICdwcm9jZXNzJywKICAgICAgICAjICdxdWFudGl0eScsCiAgICAgICAgJ3JlbGF0aW9uJywKICAgICAgICAnc2hhcGUnLAogICAgICAgICMgJ3N0YXRlJywKICAgICAgICAjICdzdWJzdGFuY2UnLAogICAgICAgICMgJ3RpbWUnCiAgICApCiAgICBmb3IgZHJvcCBpbiBkcm9wX2VudGl0aWVzOgogICAgICAgIGlmIGRyb3AgaW4gZW50aXRpZXNfbGV4aWNvbjoKICAgICAgICAgICAgZW50aXRpZXNfbGV4aWNvbi5yZW1vdmUoZHJvcCkKCiAgICBkZXZfZGF0YSwgdGVzdF9kYXRhLCB0cmFpbl9kYXRhID0gaW5zdGFudGlhdGVfZGF0YXNldHMoCiAgICAgICAgbGV4aWNvbiwKICAgICAgICBlbnRpdGllc19sZXhpY29uLAogICAgICAgIGRhdGFzZXRfc2l6ZSwKICAgICAgICBkcm9wX2VudGl0aWVzPWRyb3BfZW50aXRpZXMKICAgICkKCiAgICBwcmludCgiSW5zdGFudGlhdGluZyBtb2RlbCIpCiAgICBpZiB1c2VfYmVydDoKICAgICAgICBweXJhbWlkX25lciA9IGdldF9iZXJ0X21vZGVsKGxleGljb24sIGVudGl0aWVzX2xleGljb24pCiAgICBlbHNlOgogICAgICAgIHB5cmFtaWRfbmVyID0gZ2V0X2RlZmF1bHRfbW9kZWwobGV4aWNvbiwgZW50aXRpZXNfbGV4aWNvbikKCiAgICBwcmludChweXJhbWlkX25lci5ubmV0KQoKICAgIHRyYWluZXIgPSBQeXJhbWlkTmVyVHJhaW5lcihweXJhbWlkX25lcikKICAgIG9wdGltaXplciwgc2NoZWR1bGVyID0gZ2V0X2RlZmF1bHRfc2dkX29wdGltKHB5cmFtaWRfbmVyLm5uZXQucGFyYW1ldGVycygpKQogICAgbmVyX21vZGVsLCByZXBvcnQgPSB0cmFpbmVyLnRyYWluKAogICAgICAgIHRyYWluX2RhdGEsCiAgICAgICAgb3B0aW1pemVyPW9wdGltaXplciwKICAgICAgICBzY2hlZHVsZXI9c2NoZWR1bGVyLAogICAgICAgIHJlc3RvcmVfd2VpZ2h0c19vbj0nbG9zcycsCiAgICAgICAgZXBvY2hzPTMwLAogICAgICAgIGRldl9kYXRhPWRldl9kYXRhLAogICAgICAgIHBhdGllbmNlPW5wLmluZiwKICAgICAgICBncmFkX2NsaXA9NS4wCiAgICApCiAgICByZXBvcnQucGxvdF9sb3NzX3JlcG9ydCgpCiAgICByZXBvcnQucGxvdF9jdXN0b21fcmVwb3J0KCdtaWNyb19mMScpCiAgICBwcmludCh0cmFpbmVyLnRlc3RfbW9kZWwodGVzdF9kYXRhLCBvdXRfZGljdD1GYWxzZSkpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHJ1bl90cmFpbmluZygpCjx8ZmltX3N1ZmZpeHw+CgpkZWYgbG9hZF93b3JkbmV0X3NwbGl0KHNwbGl0PSd0cmFpbicsIGxpbWl0PS0xKToKICAgIHdpdGggb3BlbihmImRhdGEvd29yZG5ldC1kYXRhc2V0LntzcGxpdH0uanNvbmwiLCAncicpIGFzIGZwOgogICAgICAgIHJldHVybiBbanNvbi5sb2FkcyhsaW5lKSBmb3IgbGluZSBpbiBpdGVydG9vbHMuaXNsaWNlKGZwLCBsaW1pdCldCjx8ZmltX2VuZHw+"]
["f1c3e581db957d5a603e6a82049ff6d4467005bd-1","f1c3e581db957d5a603e6a82049ff6d4467005bd","PHxmaW1fcHJlZml4fD4KIiIiClRoaXMgbW9kdWxlIGNvbnRhaW5zIGludGVyZmFjZXMgZm9yIGZvcndhcmQgbW9kZWxzLgoiIiIKCmZyb20gYWJjIGltcG9ydCBhYnN0cmFjdG1ldGhvZCwgQUJDTWV0YQoKZnJvbSBiaW5mLm1vZGVsIGltcG9ydCBBYnN0cmFjdE1vZGVsCgoKY2xhc3MgQWJzdHJhY3RGb3J3YXJkTW9kZWwoQWJzdHJhY3RNb2RlbCk6CgogICAgX19tZXRhX18gPSBBQkNNZXRhCgogICAgQGFic3RyYWN0bWV0aG9kCiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgcGFyYW1ldGVycz1bXSk6CgogICAgICAgIHN1cGVyKEFic3RyYWN0Rm9yd2FyZE1vZGVsLCBzZWxmKS5fX2luaXRfXyhuYW1lLCBwYXJhbWV0ZXJzKQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGRhdGEoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX2RhdGEKCiAgICBkZWYgamFjb2JpX21hdHJpeChzZWxmLCAqKnZhcmlhYmxlcyk6CgogICAgICAgIHNlbGYuX2NvbXBsZXRlX3ZhcmlhYmxlcyh2YXJpYWJsZXMpCiAgICAgICAgcmVzdWx0ID0gc2VsZi5fZXZhbHVhdGVfamFjb2JpX21hdHJpeCgqKnZhcmlhYmxlcykKCiAgICAgICAgcmV0dXJuIHJlc3VsdAoKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIF9ldmFsdWF0ZV9qYWNvYmlfbWF0cml4KHNlbGYsICoqbW9kZWxfcGFyYW1ldGVycyk6CgogICAgICAgIHNlbGYuX2NoZWNrX2RpZmZlcmVudGlhYmlsaXR5KCoqbW9kZWxfcGFyYW1ldGVycykKCiAgICBAYWJzdHJhY3RtZXRob2QKICAgIGRlZiBjbG9uZShzZWxmKToKCiAgICAgICAgcGFzcwoKICAgIGRlZiBmaXhfdmFyaWFibGVzKHNlbGYsICoqZml4ZWRfdmFycyk6CiAgICAgICAgIiIiCiAgICAgICAgU2V0cyAoJ2ZpeGVzJykgc3BlY2lmaWMgdmFyaWFibGVzIHRvIHZhbHVlcyBnaXZlbiBhcyBrZXl3b3JkCiAgICAgICAgYXJndW1lbnRzIGJ5IHJlbW92aW5nIHRoZXNlIHZhcmlhYmxlcyBmcm9tIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQKICAgICAgICB2YXJpYWJsZXMgYW5kIHJlZ2lzdGVyaW5nIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVycyB0byB0aGlzIG9iamVjdC4KPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICBzZWxmLl9yZWdpc3Rlcih2KQogICAgICAgICAgICAgICAgaWYgdiBpbiBzZWxmLnZhcl9wYXJhbV90eXBlczoKICAgICAgICAgICAgICAgICAgICBzZWxmW3ZdID0gc2VsZi52YXJfcGFyYW1fdHlwZXNbdl0oZml4ZWRfdmFyc1t2XSwgdikKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgbXNnID0gJ1BhcmFtZXRlciB0eXBlIGZvciB2YXJpYWJsZSAie30iIG5vdCBkZWZpbmVkJy5mb3JtYXQodikKICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIG1zZyA9ICd7fSBpcyBub3QgYSB2YXJpYWJsZSBvZiB7fScuZm9ybWF0KHNlbGYuX19yZXByX18oKSwgdikKICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobXNnKQogICAgCiAgICBkZWYgX3NldF9wYXJhbWV0ZXJzKHNlbGYsIGNvcHkpOgogICAgICAgIAogICAgICAgIGZvciBwIGluIHNlbGYucGFyYW1ldGVyczoKICAgICAgICAgICAgaWYgbm90IHAgaW4gY29weS5wYXJhbWV0ZXJzOgogICAgICAgICAgICAgICAgY29weS5fcmVnaXN0ZXIocCkKICAgICAgICAgICAgICAgIGNvcHlbcF0gPSBzZWxmW3BdLl9fY2xhc3NfXyhzZWxmW3BdLnZhbHVlLCBwKQogICAgICAgICAgICAgICAgaWYgcCBpbiBjb3B5LnZhcmlhYmxlczoKICAgICAgICAgICAgICAgICAgICBjb3B5Ll9kZWxldGVfdmFyaWFibGUocCkKPHxmaW1fc3VmZml4fD4KICAgICAgICAiIiIKICAgICAgICBmb3IgdiBpbiBmaXhlZF92YXJzOgogICAgICAgICAgICBpZiB2IGluIHNlbGYudmFyaWFibGVzOgogICAgICAgICAgICAgICAgc2VsZi5fZGVsZXRlX3ZhcmlhYmxlKHYpCjx8ZmltX2VuZHw+"]
["f1c3e581db957d5a603e6a82049ff6d4467005bd-3","f1c3e581db957d5a603e6a82049ff6d4467005bd","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIiIiClRoaXMgbW9kdWxlIGNvbnRhaW5zIGludGVyZmFjZXMgZm9yIGZvcndhcmQgbW9kZWxzLgoiIiIKCjx8ZmltX2VuZHw+"]
["23cb9bbacfa3693174fc15ff88275660bf2188b5-5","23cb9bbacfa3693174fc15ff88275660bf2188b5",{"$cut":{"chars":41816,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN1YnByb2Nlc3MKaW1wb3J0IGpzb24KaW1wb3J0IHBhdGhsaWIKaW1wb3J0IHJlCmltcG9ydCByYW5kb20KaW1wb3J0IHBwcmludAppbXBvcnQgb3MKCmltcG9ydCBlb3NmYWN0b3J5LmNvcmUudXRpbHMgYXMgdXRpbHMKaW1wb3J0IGVvc2ZhY3RvcnkuY29yZS5lcnJvcnMgYXMgZXJyb3JzCmltcG9ydCBlb3NmYWN0b3J5LmNvcmUuY29uZmlnIGFzIGNvbmZpZwppbXBvcnQgZW9zZmFjdG9yeS5jb3JlLnNldHVwIGFzIHNldHVwCmltcG9ydCBlb3NmYWN0b3J5LmNvcmUubG9nZ2VyIGFzIGxvZ2dlcgppbXBvcnQgZW9zZmFjdG9yeS5jb3JlLnRlb3MgYXMgdGVvcwppbXBvcnQgZW9zZmFjdG9yeS5jb3JlLndhbGxldG1hbmFnZXIgYXMgd20KZnJvbSBlb3NmYWN0b3J5LmNvcmUuaW50ZXJmYWNlIGltcG9ydCAqCgoKIyBUTyBETyByZXNvbHZlIHRoaXMgY29kZSByZXVzZSBpc3N1ZS4KZGVmIHNldF9sb2NhbF9ub2Rlb3NfYWRkcmVzc19pZl9ub25lKCk6CiAgICBpZiBub3Qgc2V0dXAubm9kZW9zX2FkZHJlc3MoKToKICAgICAgICBzZXR1cC5zZXRfbm9kZW9zX2FkZHJlc3MoCiAgICAgICAgICAgICJodHRwOi8vIiArIGNvbmZpZy5odHRwX3NlcnZlcl9hZGRyZXNzKCkpCiAgICAgICAgc2V0dXAuaXNfbG9jYWxfYWRkcmVzcyA9IFRydWUKCiAgICByZXR1cm4gc2V0dXAuaXNfbG9jYWxfYWRkcmVzcwoKCmRlZiBjb25maWdfcnBjKCk6CiAgICBjb2RlID0gdXRpbHMuaGVyZWRvYygnJycKY29uc3QgZW9zanMgPSByZXF1aXJlKCdlb3NqcycpOwpjb25zdCBmZXRjaCA9IHJlcXVpcmUoJ25vZGUtZmV0Y2gnKTsKY29uc3QgcnBjID0gbmV3IGVvc2pzLlJwYy5Kc29uUnBjKCclKGVuZHBvaW50KXMnLCB7IGZldGNoIH0pOwogICAgJycnKQoKICAgIHJldHVybiBjb2RlICUgeydlbmRwb2ludCc6IHNldHVwLm5vZGVvc19hZGRyZXNzKCl9CgoKZGVmIGNvbmZpZ19hcGkoKToKICAgIGNvZGUgPSB1dGlscy5oZXJlZG9jKCcnJwpjb25zdCBlb3NqcyA9IHJlcXVpcmUoJ2Vvc2pzJykKY29uc3QgZmV0Y2ggPSByZXF1aXJlKCdub2RlLWZldGNoJykKY29uc3QgcnBjID0gbmV3IGVvc2pzLlJwYy5Kc29uUnBjKCclKGVuZHBvaW50KXMnLCB7IGZldGNoIH0pCgpjb25zdCB7IFRleHREZWNvZGVyLCBUZXh0RW5jb2RlciB9ID0gcmVxdWlyZSgndGV4dC1lbmNvZGluZycpOwpjb25zdCBzaWduYXR1cmVQcm92aWRlciA9IG5ldyBlb3Nqcy5TaWduYXR1cmVQcm92aWRlciglKGtleXMpcyk7CmNvbnN0IGFwaSA9IG5ldyBlb3Nqcy5BcGkoeyBycGMsIHNpZ25hdHVyZVByb3ZpZGVyLCAKICAgIHRleHREZWNvZGVyOiBuZXcgVGV4dERlY29kZXIsIHRleHRFbmNvZGVyOiBuZXcgVGV4dEVuY29kZXIgfSk7CiAgICAnJycpCgogICAgcmV0dXJuIGNvZGUgJSB7CiAgICAgICAgJ2VuZHBvaW50Jzogc2V0dXAubm9kZW9zX2FkZHJlc3MoKSwKICAgICAgICAna2V5cyc6IGpzb24uZHVtcHMod20ucHJpdmF0ZV9rZXlzKGlzX3ZlcmJvc2U9RmFsc2UpLCBpbmRlbnQ9NCkKICAgICAgICB9CgoKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBUTyBETyA/CiMgYXV0aG9yaXphdGlvbgojIDpbe2FjdG9yOiAiZ3k0ZGttanpoZWdlIiwgcGVybWlzc2lvbjogImFjdGl2ZSJ9XQoKIyAgICAgc2NvcGU6IFsKIyAgICAgICJleGNoYW5nZSIKIyAgICBdCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmNsYXNzIF9Fb3NqcygpOgogICAgJycnQSBwcm90b3R5cGUgZm9yIGBgY2xlb3NgYCBjb21tYW5kIGNsYXNzZXMuCiAgICAnJycKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoZWFkZXIsIGpzLCBpc192ZXJib3NlPTEpOgogICAgICAgIHNlbGYub3V0X21zZyA9IE5vbmUKICAgICAgICBzZWxmLmVycl9tc2cgPSBOb25lCiAgICAgICAgc2VsZi5qc29uID0gTm9uZQogICAgICAgIHNlbGYuaXNfdmVyYm9zZSA9IGlzX3ZlcmJvc2UKICAgICAgICBjbCA9IFsibm9kZSIsICItZSJdCiAgICAgICAganMgPSBoZWFkZXIgKyAiXG4iICsgdXRpbHMuaGVyZWRvYyhqcykKCiAgICAgICAgY2wuYXBwZW5kKGpzKQoKICAgICAgICBzZXRfbG9jYWxfbm9kZW9zX2FkZHJlc3NfaWZfbm9uZSgpCiAgICAgICAgIyBjbC5leHRlbmQoWyItLXVybCIsIHNldHVwLm5vZGVvc19hZGRyZXNzKCldKQoKICAgICAgICBpZiBzZXR1cC5pc19wcmludF9jb21tYW5kX2xpbmU6CiAgICAgICAgICAgIHByaW50KCJqYXZhc2NyaXB0OiIpCiAgICAgICAgICAgIHByaW50KCJfX19fX19fX19fXyIpCiAgICAgICAgICAgIHByaW50KCIiKQogICAgICAgICAgICBwcmludChqcykKICAgICAgICAgICAgcHJpbnQoIiIpCgogICAgICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLnJ1bigKICAgICAgICAgICAgY2wsCiAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpIAoKICAgICAgICBzZWxmLmVycl9tc2cgPSBwcm9jZXNzLnN0ZGVyci5kZWNvZGUoInV0Zi04IikKICAgICAgICBpZiBzZWxmLmVycl9tc2c6CiAgICAgICAgICAgIHJhaXNlIGVycm9ycy5FcnJvcihzZWxmLmVycl9tc2cpCgogICAgICAgIHNlbGYub3V0X21zZyA9IHByb2Nlc3Muc3Rkb3V0LmRlY29kZSgidXRmLTgiKQogICAgICAgIHNlbGYuanNvbiA9IGpzb24ubG9hZHMoc2VsZi5vdXRfbXNnKQoKICAgICAgICBzZWxmLnByaW50c2VsZigpCiAgICAgICAgICAgICAgICAgIAogICAgZGVmIHByaW50c2VsZihzZWxmKToKICAgICAgICBpZiBzZWxmLmlzX3ZlcmJvc2U6CiAgICAgICAgICAgIGxvZ2dlci5PVVQoc2VsZi5fX3N0cl9fKCkpCgogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIGpzb24uZHVtcHMoc2VsZi5qc29uLCBzb3J0X2tleXM9VHJ1ZSwgaW5kZW50PTQpCgogICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgIHJldHVybiAiIgoKCmNsYXNzIEdldEluZm8oX0Vvc2pzKToKICAgICcnJ0dl"}}]
["ddbf55e2f0955a6807b26f429f38274ce8d49f34-1","ddbf55e2f0955a6807b26f429f38274ce8d49f34","PHxmaW1fcHJlZml4fD4KIiIiRjAgZXh0cmFjdG9yIHVzaW5nIERJTyArIFN0b25lbWFzayBhbGdvcml0aG0uIiIiCgppbXBvcnQgbG9nZ2luZwoKZnJvbSB0eXBpbmcgaW1wb3J0IEFueQpmcm9tIHR5cGluZyBpbXBvcnQgRGljdApmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwKZnJvbSB0eXBpbmcgaW1wb3J0IFR1cGxlCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgdG9yY2gKaW1wb3J0IHB5Y3d0IGFzIHdhdmVsZXQKCmZyb20gc2NpcHkuaW50ZXJwb2xhdGUgaW1wb3J0IGludGVycDFkCmZyb20gdHlwZWd1YXJkIGltcG9ydCBjaGVja19hcmd1bWVudF90eXBlcwoKCmNsYXNzIEVuZXJneSgpOgoKICAgIGRlZiBfX2luaXRfXygKICAgICAgICAgICAgc2VsZiwKICAgICAgICAgICAgSjogaW50ID0gMTAsCiAgICApOgogICAgICAgIGFzc2VydCBjaGVja19hcmd1bWVudF90eXBlcygpCiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5KID0gSgoKICAgIGRlZiBmb3J3YXJkKAogICAgICAgICAgICBzZWxmLAogICAgICAgICAgICBpbnB1dDogdG9yY2guVGVuc29yLAogICAgKSAtPiBUdXBsZVtucC5hcnJheSwgbnAuYXJyYXksIG5wLmFycmF5LCBucC5hcnJheV06CiAgICAgICAgIyBJZiBub3QgcHJvdmlkZSwgd2UgYXNzdW1lIHRoYXQgdGhlIGlucHV0cyBoYXZlIHRoZSBzYW1lIGxlbmd0aAogICAgICAgICMgRjAgZXh0cmFjdGlvbgoKICAgICAgICAjIGlucHV0IHNoYXBlID0gW1QsXQogICAgICAgIGVuZXJneSA9IGlucHV0LmRldGFjaCgpLm51bXB5KCkKICAgICAgICBlbmVyZ3lfbG9nID0gbnAubG9nKGlucHV0LmRldGFjaCgpLm51bXB5KCkpCiAgICAgICAgIyAoT3B0aW9uYWwpOiBBZGp1c3QgbGVuZ3RoIHRvIG1hdGNoIHdpdGggdGhlIG1lbC1zcGVjdHJvZ3JhbQogICAgICAgICNwaXRjaCwgcGl0Y2hfbG9nID0gc2VsZi5fY29udmVydF90b19jb250aW51b3VzX2YwKHBpdGNoKQogICAgICAgIGVuZXJneV9sb2dfbm9ybSwgbWVhbiwgc3RkID0gc2VsZi5fbm9ybWFsaXplKGVuZXJneV9sb2cpCiAgICAgICAgY29lZnMsIHNjYWxlcyA9IHNlbGYuX2N3dChlbmVyZ3lfbG9nX25vcm0pCiAgICAgICAgIyAoT3B0aW9uYWwpOiBBdmVyYWdlIGJ5IGR1cmF0aW9uIHRvIGNhbGN1bGF0ZSB0b2tlbi13aXNlIGYwCiAgICAgICAgIyBSZXR1cm4gd2l0aCB0aGUgc2hhcGUgKEIsIFQsIDEpCiAgICAgICAgcmV0dXJuIGVuZXJneSwgbWVhbiwgc3RkLCBjb2VmcwoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBfYWRqdXN0X251bV9mcmFtZXMoeDogdG9yY2guVGVuc29yLCBudW1fZnJhbWVzOiB0b3JjaC5UZW5zb3IpIC0+IHRvcmNoLlRlbnNvcjoKICAgICAgICBpZiBudW1fZnJhbWVzID4gbGVuKHgpOgogICAgICAgICAgICB4ID0gRi5wYWQoeCwgKDAsIG51bV9mcmFtZXMgLSBsZW4oeCkpKQogICAgICAgIGVsaWYgbnVtX2ZyYW1lcyA8IGxlbih4KToKICAgICAgICAgICAgeCA9IHhbOm51bV9mcmFtZXNdCiAgICAgICAgcmV0dXJuIHgKCiAgICBkZWYgX25vcm1hbGl6ZShzZWxmLCB4OiB0b3JjaC5UZW5zb3IpIC0+IHRvcmNoLlRlbnNvciA6CgogICAgICAgIG5vcm1fcGl0Y2ggPSAoeCAtIHgubWVhbigpKS94LnN0ZCgpCiAgICAgICAgcmV0dXJuIG5vcm1fcGl0Y2gsIHgubWVhbigpLCB4LnN0ZCgpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBkZWYgX2N3dChzZWxmLCB4OiB0b3JjaC5UZW5zb3IpIC0+IG5wLmFycmF5OgogICAgICAgIG1vdGhlciA9IHdhdmVsZXQuTWV4aWNhbkhhdCgpCiAgICAgICAgZHQgPSAwLjAwNQo8fGZpbV9lbmR8Pg=="]
["20f9ba8773e27182335d722217229c598eee01ea-1","20f9ba8773e27182335d722217229c598eee01ea","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGx4bWwuZXRyZWUKaW1wb3J0IG9zCgppbXBvcnQgbG9nZ2luZwpsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQmNmZzIuUGx1Z2lucy5PaGFpJykKCmltcG9ydCBCY2ZnMi5TZXJ2ZXIuUGx1Z2luCgp0cnk6CiAgICBpbXBvcnQganNvbgpleGNlcHQ6CiAgICAjIEZJWE1FOiBjYW4gYmUgcmVtb3ZlZCB3aGVuIHNlcnZlciBwcmVyZXEgaXMgPj0gcHl0aG9uIDIuNgogICAgIyBuZWNlc3NhcnkgZm9yIGNsaWVudHMgd2l0aG91dCB0aGUgaW4tdHJlZSBqc29uIG1vZHVsZQogICAgdHJ5OgogICAgICAgIGltcG9ydCBzaW1wbGVqc29uIGFzIGpzb24KICAgIGV4Y2VwdDoKICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBsb2FkIGFueSBqc29uIG1vZHVsZXMuIE1ha2Ugc3VyZSAiCiAgICAgICAgICAgICAgICAgICAgICJweXRob24tc2ltcGxlanNvbiBpcyBpbnN0YWxsZWQuIikKICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKcHJvYmVjb2RlID0gIiIiIyEvYmluL3NoCgo8fGZpbV9lbmR8Pg=="]
["f1d7af706c3bc681b2a6bd6657d93c9b41b754cc-1","f1d7af706c3bc681b2a6bd6657d93c9b41b754cc",{"$cut":{"chars":17196,"head":"PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IGFiYwoKZnJvbSBub3NlLnRvb2xzIGltcG9ydCAqICAjIG5vcWEgKFBFUDggYXNzZXJ0cykKCmZyb20gZnJhbWV3b3JrLmF1dGggaW1wb3J0IEF1dGgKCmZyb20gd2Vic2l0ZS5hZGRvbnMuYmFzZSBpbXBvcnQgZXhjZXB0aW9ucwoKZnJvbSB0ZXN0cy5mYWN0b3JpZXMgaW1wb3J0IFByb2plY3RGYWN0b3J5LCBVc2VyRmFjdG9yeQpmcm9tIHRlc3RzLnV0aWxzIGltcG9ydCBtb2NrX2F1dGgKCgpjbGFzcyBPQXV0aEFkZG9uTW9kZWxUZXN0U3VpdGVNaXhpbkJhc2Uob2JqZWN0KToKCiAgICBfX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCgogICAgQGFiYy5hYnN0cmFjdHByb3BlcnR5CiAgICBkZWYgc2hvcnRfbmFtZShzZWxmKToKICAgICAgICBwYXNzCgogICAgQGFiYy5hYnN0cmFjdHByb3BlcnR5CiAgICBkZWYgZnVsbF9uYW1lKHNlbGYpOgogICAgICAgIHBhc3MKCiAgICBAYWJjLmFic3RyYWN0cHJvcGVydHkKICAgIGRlZiBFeHRlcm5hbEFjY291bnRGYWN0b3J5KHNlbGYpOgogICAgICAgIHBhc3MKCgpjbGFzcyBPQXV0aEFkZG9uVXNlclNldHRpbmdUZXN0U3VpdGVNaXhpbihPQXV0aEFkZG9uTW9kZWxUZXN0U3VpdGVNaXhpbkJhc2UpOgoKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBzdXBlcihPQXV0aEFkZG9uVXNlclNldHRpbmdUZXN0U3VpdGVNaXhpbiwgc2VsZikuc2V0VXAoKQogICAgICAgIHNlbGYubm9kZSA9IFByb2plY3RGYWN0b3J5KCkKICAgICAgICBzZWxmLnVzZXIgPSBzZWxmLm5vZGUuY3JlYXRvcgoKICAgICAgICBzZWxmLmV4dGVybmFsX2FjY291bnQgPSBzZWxmLkV4dGVybmFsQWNjb3VudEZhY3RvcnkoKQoKICAgICAgICBzZWxmLnVzZXIuZXh0ZXJuYWxfYWNjb3VudHMuYXBwZW5kKHNlbGYuZXh0ZXJuYWxfYWNjb3VudCkKICAgICAgICBzZWxmLnVzZXIuc2F2ZSgpCgogICAgICAgIHNlbGYudXNlcl9zZXR0aW5ncyA9IHNlbGYudXNlci5nZXRfb3JfYWRkX2FkZG9uKHNlbGYuc2hvcnRfbmFtZSkKCiAgICBkZWYgdGVzdF9ncmFudF9vYXV0aF9hY2Nlc3Nfbm9fbWV0YWRhdGEoc2VsZik6CiAgICAgICAgc2VsZi51c2VyX3NldHRpbmdzLmdyYW50X29hdXRoX2FjY2VzcygKICAgICAgICAgICAgbm9kZT1zZWxmLm5vZGUsCiAgICAgICAgICAgIGV4dGVybmFsX2FjY291bnQ9c2VsZi5leHRlcm5hbF9hY2NvdW50LAogICAgICAgICkKICAgICAgICBzZWxmLnVzZXJfc2V0dGluZ3Muc2F2ZSgpCgogICAgICAgIGFzc2VydF9lcXVhbCgKICAgICAgICAgICAgc2VsZi51c2VyX3NldHRpbmdzLm9hdXRoX2dyYW50cywKICAgICAgICAgICAge3NlbGYubm9kZS5faWQ6IHtzZWxmLmV4dGVybmFsX2FjY291bnQuX2lkOiB7fX19LAogICAgICAgICkKCiAgICBkZWYgdGVzdF9ncmFudF9vYXV0aF9hY2Nlc3NfbWV0YWRhdGEoc2VsZik6CiAgICAgICAgc2VsZi51c2VyX3NldHRpbmdzLmdyYW50X29hdXRoX2FjY2VzcygKICAgICAgICAgICAgbm9kZT1zZWxmLm5vZGUsCiAgICAgICAgICAgIGV4dGVybmFsX2FjY291bnQ9c2VsZi5leHRlcm5hbF9hY2NvdW50LAogICAgICAgICAgICBtZXRhZGF0YT17J2ZvbGRlcic6ICdmYWtlX2ZvbGRlcl9pZCd9CiAgICAgICAgKQogICAgICAgIHNlbGYudXNlcl9zZXR0aW5ncy5zYXZlKCkKCiAgICAgICAgYXNzZXJ0X2VxdWFsKAogICAgICAgICAgICBzZWxmLnVzZXJfc2V0dGluZ3Mub2F1dGhfZ3JhbnRzLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzZWxmLm5vZGUuX2lkOiB7CiAgICAgICAgICAgICAgICAgICAgc2VsZi5leHRlcm5hbF9hY2NvdW50Ll9pZDogeydmb2xkZXInOiAnZmFrZV9mb2xkZXJfaWQnfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICBkZWYgdGVzdF92ZXJpZnlfb2F1dGhfYWNjZXNzX25vX21ldGFkYXRhKHNlbGYpOgogICAgICAgIHNlbGYudXNlcl9zZXR0aW5ncy5ncmFudF9vYXV0aF9hY2Nlc3MoCiAgICAgICAgICAgIG5vZGU9c2VsZi5ub2RlLAogICAgICAgICAgICBleHRlcm5hbF9hY2NvdW50PXNlbGYuZXh0ZXJuYWxfYWNjb3VudCwKICAgICAgICApCiAgICAgICAgc2VsZi51c2VyX3NldHRpbmdzLnNhdmUoKQoKICAgICAgICBhc3NlcnRfdHJ1ZSgKICAgICAgICAgICAgc2VsZi51c2VyX3NldHRpbmdzLnZlcmlmeV9vYXV0aF9hY2Nlc3MoCiAgICAgICAgICAgICAgICBub2RlPXNlbGYubm9kZSwKICAgICAgICAgICAgICAgIGV4dGVybmFsX2FjY291bnQ9c2VsZi5leHRlcm5hbF9hY2NvdW50CiAgICAgICAgICAgICkKICAgICAgICApCgogICAgICAgIGFzc2VydF9mYWxzZSgKICAgICAgICAgICAgc2VsZi51c2VyX3NldHRpbmdzLnZlcmlmeV9vYXV0aF9hY2Nlc3MoCiAgICAgICAgICAgICAgICBub2RlPXNlbGYubm9kZSwKICAgICAgICAgICAgICAgIGV4dGVybmFsX2FjY291bnQ9c2VsZi5FeHRlcm5hbEFjY291bnRGYWN0b3J5KCkKICAgICAgICAgICAgKQogICAgICAgICkKCiAgICBkZWYgdGVzdF92ZXJpZnlfb2F1dGhfYWNjZXNzX21ldGFkYXRhKHNlbGYpOgogICAgICAgIHNlbGYudXNlcl9zZXR0aW5ncy5ncmFudF9vYXV0aF9hY2Nlc3MoCiAgICAgICAgICAgIG5vZGU9c2VsZi5ub2RlLAogICAgICAgICAgICBleHRlcm5hbF9hY2NvdW50PXNlbGYuZXh0ZXJuYWxfYWNjb3VudCwKICAgICAgICAgICAgbWV0YWRhdGE9eydmb2xkZXInOiAnZmFrZV9mb2xkZXJfaWQnfQogICAgICAgICkKICAgICAgICBzZWxmLnVzZXJfc2V0dGluZ3Muc2F2ZSgpCgogICAgICAgIGFzc2VydF90cnVlKAogICAgICAgICAgICBzZWxmLnVzZXJfc2V0dGluZ3MudmVyaWZ5X29hdXRoX2FjY2VzcygKICAgICAgICAgICAgICAgIG5vZGU9c2VsZi5ub2RlLAogICAgICAgICAgICAgICAgZXh0ZXJuYWxfYWNjb3VudD1zZWxmLmV4dGVybmFsX2FjY291bnQsCiAgICAgICAgICAgICAgICBtZXRhZGF0YT17J2ZvbGRlcic6ICdmYWtlX2ZvbGRlcl9pZCd9CiAgICAgICAgICAgICkKICAgICAgICApCgogICAgICAgIGFzc2VydF9mYWxzZSgKICAgICAgICAgICAgc2VsZi51c2VyX3NldHRpbmdzLnZlcmlm"}}]
["9e1b3b8259dba0a35618d69d89398327556eb355-1","9e1b3b8259dba0a35618d69d89398327556eb355","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCB1bml0dGVzdAoKZnJvbSBhdHRyaWJ1dGVzLmNvbnRpbnVvdXNfaW50ZWdyYXRpb24gaW1wb3J0IG1haW4KZnJvbSB0ZXN0cyBpbXBvcnQgUkVQT1NfUEFUSAoKCmNsYXNzIE1haW5UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBvcy5wYXRoLmV4aXN0cyhSRVBPU19QQVRIKSwgJ3NldHVwLnNoIG5vdCBydW4uJykKICAgIGRlZiB0ZXN0X21haW4oc2VsZik6CiAgICAgICAgIyBUZXN0OiBQcm9qZWN0IHdpdGggVHJhdmlzIENJCiAgICAgICAgKHJlc3VsdCwgdmFsdWUpID0gbWFpbi5ydW4oCiAgICAgICAgICAgIC0xLCBvcy5wYXRoLmpvaW4oUkVQT1NfUEFUSCwgJ3NxdWliJyksIE5vbmUKICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCkKICAgICAgICBzZWxmLmFzc2VydFRydWUodmFsdWUpCgogICAgICAgICMgVGVzdDogUHJvamVjdCB3aXRoIEFwcFZleW9yCiAgICAgICAgKHJlc3VsdCwgdmFsdWUpID0gbWFpbi5ydW4oCiAgICAgICAgICAgIC0xLCBvcy5wYXRoLmpvaW4oUkVQT1NfUEFUSCwgJ2dydW50JyksIE5vbmUKICAgICAgICApCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0KQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2YWx1ZSkKCiAgICAgICAgIyBUZXN0OiBQcm9qZWN0IHdpdGggYm90aCBUcmF2aXMgQ0kgYW5kIEFwcFZleW9yCjx8ZmltX2VuZHw+"]
["1fc6492e46639f6ed7bae5248c902950d0a8c905-5","1fc6492e46639f6ed7bae5248c902950d0a8c905","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCiMgY29kaW5nOiB1dGYtOAoKJycnClRoaXMgc2NyaXB0IGV4dHJhY3RzIGNvbW1lbnRzIG9mIGEgUHl0aG9uIHNjcmlwdCBhbmQKY2hlY2tzIHdoZXRoZXIgaXQgY29udGFpbnMgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCkNvcHlyaWdodCAoQykgMjAxNyBaZXR0c3UgVGF0c3V5YQoKdXNhZ2UgOiBweXRob24zIGNvbW1lbnRfZXh0cmFjdG9yLnB5IFtpbi1maWxlbmFtZV0gPiBvdXQtZmlsZW5hbWUKJycnCgppbXBvcnQgcmUKaW1wb3J0IHN5cwoKRVhJVF9TVEFUVVNfU1VDQ0VTUyA9IDAKRVhJVF9TVEFUVVNfRVJST1IgPSAxCgoKY2xhc3MgQ29tbWVudEV4dHJhY3RvclN0YXRlKG9iamVjdCk6CiAgICAnJydDdXJyZW50IHN0YXRlIGZvciBhIGNvbW1lbnQgZXh0cmFjdG9yJycnCgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYuZXhpdF9zdGF0dXMgPSBFWElUX1NUQVRVU19TVUNDRVNTCiAgICAgICAgc2VsZi5saW5lX2hlYWRlciA9ICcnCiAgICAgICAgc2VsZi5hbGxfY29tbWVudHMgPSAnJwogICAgICAgIHNlbGYubGVhZGluZ19jb21tZW50ID0gTm9uZQogICAgICAgIHNlbGYubWF0Y2hlciA9IE5vbmUKICAgICAgICBzZWxmLmlzX2NvbW1lbnQgPSBGYWxzZQoKCmNsYXNzIENvbW1lbnRFeHRyYWN0b3Iob2JqZWN0KToKICAgICcnJ0V4dHJhY3QgY29tbWVudHMgaW4gUHl0aG9uIHNjcmlwdHMnJycKCiAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZF9saW5lX2FyZ3VtZW50cyk6CiAgICAgICAgc2VsZi5maWxlbmFtZXMgPSBjb21tYW5kX2xpbmVfYXJndW1lbnRzWzE6XQoKICAgIGRlZiBwYXJzZShzZWxmKToKICAgICAgICAnJydFeHRyYWN0IGNvbW1lbnRzIGluIFB5dGhvbiBzY3JpcHRzJycnCgogICAgICAgIHN0YXR1cyA9IEVYSVRfU1RBVFVTX1NVQ0NFU1MKICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc2VsZi5maWxlbmFtZXM6CiAgICAgICAgICAgIGlmIHNlbGYucGFyc2VfZmlsZShmaWxlbmFtZSk6CiAgICAgICAgICAgICAgICBzdGF0dXMgPSBFWElUX1NUQVRVU19FUlJPUgoKICAgICAgICByZXR1cm4gc3RhdHVzCgogICAgZGVmIHBhcnNlX2ZpbGUoc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICcnJ0V4dHJhY3QgY29tbWVudHMgaW4gYSBQeXRob24gc2NyaXB0JycnCgogICAgICAgIGV4aXRfc3RhdHVzID0gRVhJVF9TVEFUVVNfU1VDQ0VTUwogICAgICAgIHRyeToKICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicpIGFzIGluZmlsZToKICAgICAgICAgICAgICAgIGFsbF9jb21tZW50cywgc3RhdHVzID0gc2VsZi5wYXJzZV9saW5lcygKICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLCBpbmZpbGUsIGZpbGVuYW1lKQogICAgICAgICAgICAgICAgcHJpbnQoYWxsX2NvbW1lbnRzKQogICAgICAgICAgICAgICAgaWYgc3RhdHVzIGlzIG5vdCBFWElUX1NUQVRVU19TVUNDRVNTOgogICAgICAgICAgICAgICAgICAgIGV4aXRfc3RhdHVzID0gc3RhdHVzCiAgICAgICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgICAgIG1lc3NhZ2UgPSAnQ2Fubm90IG9wZW4ge31cbicuZm9ybWF0KGZpbGVuYW1lKQogICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKG1lc3NhZ2UpCiAgICAgICAgICAgIGV4aXRfc3RhdHVzID0gRVhJVF9TVEFUVVNfRVJST1IKCiAgICAgICAgcmV0dXJuIGV4aXRfc3RhdHVzCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGZpbmRfZGVsaW1pdGVyKGxpbmUsIGRlbGltaXRlcik6CiAgICAgICAgJycnRmluZHMgYSBkZWxpbWl0ZXIgaW4gYSBsaW5lIGFuZCBzcGxpdHMgdGhlIGxpbmUgYnkgdGhlIGRlbGltaXRlcicnJwoKICAgICAgICBwb3NpdGlvbiA9IGxpbmUuZmluZChkZWxpbWl0ZXIpCiAgICAgICAgbWF0Y2hlciA9IE5vbmUKICAgICAgICBwcmVmaXggPSAnJwogICAgICAgIHRhaWwgPSAnJwogICAgICAgIHByZWNoYXIgPSBsaW5lW3Bvc2l0aW9uIC0gMTpwb3NpdGlvbl0gaWYgcG9zaXRpb24gPiAwIGVsc2UgJycKCiAgICAgICAgaWYgcG9zaXRpb24gPj0gMCBhbmQgcHJlY2hhciAhPSAnXFwnOgogICAgICAgICAgICBpZiBkZWxpbWl0ZXIgPT0gJy8qJzoKICAgICAgICAgICAgICAgIG1hdGNoZXIgPSByJyguKj8pKChcKlwvKSkoLiopJwogICAgICAgICAgICBlbHNlOgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgcHJlZml4ID0gbGluZVswOnBvc2l0aW9uXQogICAgICAgICAgICB0YWlsID0gbGluZVtwb3NpdGlvbiArIGxlbihkZWxpbWl0ZXIpOl0KICAgICAgICBlbHNlOgogICAgICAgICAgICB0YWlsID0gbGluZQogICAgICAgIHJldHVybiBtYXRjaGVyLCBwcmVmaXgsIHRhaWwKCiAgICBkZWYgZXh0cmFjdF9kZWxpbWl0ZXIoc2VsZiwgbGluZSk6CiAgICAgICAgJycnCiAgICAgICAgRmluZHMgb25lIG9mIHRoZSBkZWxpbWl0ZXJzIGluIGEgbGluZSBhbmQgc3BsaXRzIHRoZSBsaW5lIGJ5IHRoZQogICAgICAgIGRlbGltaXRlcgogICAgICAgICcnJwoKICAgICAgICBkZWxpbWl0ZXJzID0gWyInJyciLCAnIiIiJywgJy8qJywgIiciLCAnIiddCiAgICAgICAgcmVzdWx0cyA9IFsoc2VsZi5maW5kX2RlbGltaXRlcihsaW5lLCBkZWxpbWl0ZXIpLCBkZWxpbWl0ZXIpIFwKICAgICAgICAgICAgICAgICAgIGZvciBkZWxpbWl0ZXIgaW4gZGVsaW1pdGVyc10KCiAgICAgICAgbWF0Y2hlciA9IE5vbmUKICAgICAgICBwcmVmaXggPSAnJwogICAgICAgIHRhaWwgPSBsaW5lCiAgICAgICAgaXNfY29tbWVudCA9IEZhbHNlCiAgICAgICAgZm9yIChtYXRjaGVyX2QsIHByZWZpeF9kLCB0YWlsX2QpLCBkZWxpbWl0ZXIgaW4gcmVzdWx0czoKICAgICAgICAgICAgaWYgbWF0Y2hlcl9kIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgaWYgbWF0Y2hlciBpcyBOb25lIG9yIGxlbihwcmVmaXhfZCkgPCBsZW4ocHJlZml4KToKICAgICAgICAgICAgICAgICAgICBtYXRjaGVyID0gbWF0Y2hlcl9kCiAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gcHJlZml4X2QKICAgICAgICAgICAgICAgICAgICB0YWlsID0gdGFpbF9kCiAgICAgICAgICAgICAgICAgICAgaXNfY29tbWVudCA9IGxlbihkZWxpbWl0ZXIpID4gMQoKICAgICAgICByZXR1cm4gbWF0Y2hlciwgdGFpbCwgaXNfY29tbWVudAoKICAgIGRlZiBleHRyYWN0X2NvbW1lbnRzX2luX2xpbmUoc2VsZiwgbGluZSwgbGVhZGluZ19jb21tZW50LCBtYXRjaGVyLCBpc19jb21tZW50KToKICAgICAgICAnJycKICAgICAgICBFeHRyYWN0cyBjb21tZW50cyBpbiBhIGxpbmUgYW5kIHJldHVybnMgY29sbGVjdGVkIGNvbW1lbnRzCiAgICAgICAgYW5kIGEgY29tbWVudCB3aGljaCBjb250aW51ZXMgdG8gdGhlIG5leHQgbGluZS4KICAgICAgICAnJycKCiAgICAgICAgdGFpbCA9ICcnCiAgICAgICAgY29tbWVudHMgPSBbXQogICAgICAgIGNvbW1lbnRfdG9fbmV4dCA9ICcnCgogICAgICAgIGlmIG1hdGNoZXIgaXMgTm9uZToKICAgICAgICAgICAgbWF0Y2hlciwgdGFpbCwgaXNfY29tbWVudCA9IHNlbGYuZXh0cmFjdF9kZWxpbWl0ZXIobGluZSkKICAgICAgICAgICAgaWYgbWF0Y2hlciBpcyBOb25lOgogICAgICAgICAgICAgICAgbWF0Y2hfb2JqID0gcmUubWF0Y2gocideW14jXSooIyspXHMqKC4qKScsIGxpbmUpCiAgICAgICAgICAgICAgICBpZiBtYXRjaF9vYmogaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICBtYXRjaF9vYmogPSByZS5tYXRjaChyJ14oLio/KVwvXC9ccyooLiopJywgbGluZSkKICAgICAgICAgICAgICAgIGlmIG1hdGNoX29iaiBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICB0YWlsX2NvbW1lbnQgPSBtYXRjaF9vYmouZ3JvdXAoMikuc3RyaXAoKQogICAgICAgICAgICAgICAgICAgICMgU2VwYXJhdGUgY29tbWVudHMgZnJvbSBwcmV2aW91cyBsaW5lcwogICAgICAgICAgICAgICAgICAgIGlmIHRhaWxfY29tbWVudDoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVhZGluZ19jb21tZW50OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMuYXBwZW5kKCcnKQogICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50cy5hcHBlbmQodGFpbF9jb21tZW50KQogICAgICAgICAgICAgICAgdGFpbCA9ICcnCiAgICAgICAgZWxzZToKICAgICAgICAgICAgbWF0Y2hfb2JqID0gcmUubWF0Y2gobWF0Y2hlciwgbGluZSkKICAgICAgICAgICAgaWYgbWF0Y2hfb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICAgICBjb21tZW50X3RvX25leHQgPSBsaW5lLnN0cmlwKCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGlmIGlzX2NvbW1lbnQ6CiAgICAgICAgICAgICAgICAgICAgcGhyYXNlID0gbWF0Y2hfb2JqLmdyb3VwKDEpLnN0cmlwKCkKICAgICAgICAgICAgICAgICAgICBpZiBwaHJhc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLmFwcGVuZChwaHJhc2UpCiAgICAgICAgICAgICAgICB0YWlsID0gbWF0Y2hfb2JqLmdyb3VwKDQpCiAgICAgICAgICAgICAgICBtYXRjaGVyID0gTm9uZQoKICAgICAgICByZXR1cm4gdGFpbCwgY29tbWVudHMsIGNvbW1lbnRfdG9fbmV4dCwgbWF0Y2hlciwgaXNfY29tbWVudAoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBpc19hc2NsbF9vbmx5KGVycnN0cmVhbSwgZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCBsaW5lLCBvbGRfZXhpdF9zdGF0dXMpOgogICAgICAgICcnJ2NoZWNrcyB3aGV0aGVyIHRoZSBsaW5lIGNvbnRhaW5zIFVTLUFTQ0lJIGNoYXJhY3RlcnMgb25seScnJwoKICAgICAgICBleGl0X3N0YXR1cyA9IG9sZF9leGl0X3N0YXR1cwogICAgICAgIGlmIG5vdCBhbGwob3JkKGMpIDwgMTI4IGZvciBjIGluIGxpbmUpOgogICAgICAgICAgICBtZXNzYWdlID0gJ05vbiBVUy1BU0NJSSBjaGFyYWN0ZXIgZm91bmQgYXQgbGluZSB7fSBpbiB7fVxuJy4gXAogICAgICAgICAgICAgICAgZm9ybWF0KGxpbmVfbnVtYmVyLCBmaWxlbmFtZSkKICAgICAgICAgICAgZXJyc3RyZWFtLndyaXRlKG1lc3NhZ2UpCiAgICAgICAgICAgIGV4aXRfc3RhdHVzID0gRVhJVF9TVEFUVVNfRVJST1IKCiAgICAgICAgcmV0dXJuIGV4aXRfc3RhdHVzCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGZvcm1hdF9jb21tZW50cyhjb21tZW50cywgbGVhZGluZ19jb21tZW50LCBsaW5lX2hlYWRlciwgY3VycmVudF9saW5lX2hlYWRlcik6CiAgICAgICAgJycnRXh0cmFjdHMgbXVsdGlwbGUgY29tbWVudHMgaW4gYSBsaW5lJycnCgogICAgICAgIGlmIG5vdCBjb21tZW50czoKICAgICAgICAgICAgcmV0dXJuICcnLCBsZWFkaW5nX2NvbW1lbnQsIGxpbmVfaGVhZGVyCgogICAgICAgIGNvbW1lbnRfc3RyaW5nID0gJycKICAgICAgICBzdGFydF9wb3NpdGlvbiA9IDAKCiAgICAgICAgY29tbWVudF9zdHJpbmcgKz0gbGluZV9oZWFkZXIKICAgICAgICBpZiBsZWFkaW5nX2NvbW1lbnQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHNwYWNlID0gJyAnIGlmIGxlYWRpbmdfY29tbWVudCBhbmQgY29tbWVudHNbMF0gZWxzZSAnJwogICAgICAgICAgICBjb21tZW50X3N0cmluZyArPSBsZWFkaW5nX2NvbW1lbnQgKyBzcGFjZSArIGNvbW1lbnRzWzBdICsgJ1xuXG4nCiAgICAgICAgICAgIHN0YXJ0X3Bvc2l0aW9uID0gMQoKICAgICAgICB0cmFpbGluZ19jb21tZW50cyA9IGNvbW1lbnRzW3N0YXJ0X3Bvc2l0aW9uOl0KICAgICAgICBpZiBsaW5lX2hlYWRlciBpcyBub3QgY3VycmVudF9saW5lX2hlYWRlciBhbmQgdHJhaWxpbmdfY29tbWVudHM6CiAgICAgICAgICAgIGNvbW1lbnRfc3RyaW5nICs9IGN1cnJlbnRfbGluZV9oZWFkZXIKCiAgICAgICAgZm9yIHBocmFzZSBpbiB0cmFpbGluZ19jb21tZW50czoKICAgICAgICAgICAgY29tbWVudF9zdHJpbmcgKz0gcGhyYXNlICsgJ1xuXG4nCgogICAgICAgIHJldHVybiBjb21tZW50X3N0cmluZywgTm9uZSwgJycKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgZm9ybWF0X2NvbW1lbnRfdG9fbmV4dChjb21tZW50X3RvX25leHQsIGxlYWRpbmdfY29tbWVudCwgbWF0Y2hlciwgbGluZV9oZWFkZXIpOgogICAgICAgICcnJ0V4dHJhY3RzIGEgY29tbWVudCBpbiBjb25zZWN1dGl2ZSBsaW5lcycnJwoKICAgICAgICBjb21tZW50X3N0cmluZyA9ICcnCiAgICAgICAgaWYgY29tbWVudF90b19uZXh0OgogICAgICAgICAgICBpZiBsZWFkaW5nX2NvbW1lbnQgaXMgTm9uZToKICAgICAgICAgICAgICAgIGxlYWRpbmdfY29tbWVudCA9IGNvbW1lbnRfdG9fbmV4dAogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcHJlZml4ID0gJyAnIGlmIGxlYWRpbmdfY29tbWVudCBlbHNlICcnCiAgICAgICAgICAgICAgICBsZWFkaW5nX2NvbW1lbnQgKz0gcHJlZml4ICsgY29tbWVudF90b19uZXh0CiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgbGVhZGluZ19jb21tZW50IGlzIG5vdCBOb25lIGFuZCBsZWFkaW5nX2NvbW1lbnQ6CiAgICAgICAgICAgICAgICBjb21tZW50X3N0cmluZyA9IGxpbmVfaGVhZGVyICsgbGVhZGluZ19jb21tZW50ICsgJ1xuXG4nCiAgICAgICAgICAgICAgICBsZWFkaW5nX2NvbW1lbnQgPSBOb25lCiAgICAgICAgICAgIGlmIG1hdGNoZXIgaXMgTm9uZToKICAgICAgICAgICAgICAgIGxpbmVfaGVhZGVyID0gJycKCiAgICAgICAgcmV0dXJuIGNvbW1lbnRfc3RyaW5nLCBsZWFkaW5nX2NvbW1lbnQsIGxpbmVfaGVhZGVyCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHdhcm5faW9fZXJyb3IoZXJyc3RyZWFtLCBsaW5lX251bWJlciwgZmlsZW5hbWUpOgogICAgICAgICcnJ1dhcm5zIEkvTyBlcnJvcnMnJycKICAgICAgICBtZXNzYWdlID0gJ0Nhbm5vdCByZWFkIGF0IGxpbmUge30gaW4ge31cbicuIFwKICAgICAgICAgICAgICAgICAgZm9ybWF0KGxpbmVfbnVtYmVyLCBmaWxlbmFtZSkKICAgICAgICBlcnJzdHJlYW0ud3JpdGUobWVzc2FnZSkKCiAgICBkZWYgcGFyc2VfbGluZShzZWxmLCBsaW5lLCBlcnJzdHJlYW0sIGxpbmVfbnVtYmVyLCBmaWxlbmFtZSwgc3RhdGUpOgogICAgICAgICcnJ1BhcnNlIGEgbGluZSBhbmQgY29sbGVjdCBjb21tZW50cycnJwogICAgICAgIGN1cnJlbnRfbGluZV9oZWFkZXIgPSAnezB9IDogezF9XG4nLmZvcm1hdChmaWxlbmFtZSwgbGluZV9udW1iZXIpCiAgICAgICAgbGluZV9oZWFkZXIgPSBzdGF0ZS5saW5lX2hlYWRlciBpZiBzdGF0ZS5saW5lX2hlYWRlciBlbHNlIGN1cnJlbnRfbGluZV9oZWFkZXIKICAgICAgICBleGl0X3N0YXR1cyA9IHNlbGYuaXNfYXNjbGxfb25seShlcnJzdHJlYW0sIGZpbGVuYW1lLCBsaW5lX251bWJlciwgbGluZSwgc3RhdGUuZXhpdF9zdGF0dXMpCgogICAgICAgIGhhc2hfY29tbWVudCA9IHJlLm1hdGNoKHInXlxzKiNccyooLiopJywgbGluZSkKICAgICAgICBpZiBoYXNoX2NvbW1lbnQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIG5ld2xpbmUgPSAnJwogICAgICAgICAgICBjb21tZW50cyA9IFtdCiAgICAgICAgICAgIGNvbW1lbnRfdG9fbmV4dCA9IGhhc2hfY29tbWVudC5ncm91cCgxKQogICAgICAgICAgICBtYXRjaGVyID0gTm9uZQogICAgICAgICAgICBpc19jb21tZW50ID0gVHJ1ZQoKICAgICAgICB3aGlsZSBsaW5lOgogICAgICAgICAgICBpZiBoYXNoX2NvbW1lbnQgaXMgTm9uZToKICAgICAgICAgICAgICAgIG5ld2xpbmUsIGNvbW1lbnRzLCBjb21tZW50X3RvX25leHQsIG1hdGNoZXIsIGlzX2NvbW1lbnQgPSBzZWxmLmV4dHJhY3RfY29tbWVudHNfaW5fbGluZSgKICAgICAgICAgICAgICAgICAgICBsaW5lLCBzdGF0ZS5sZWFkaW5nX2NvbW1lbnQsIHN0YXRlLm1hdGNoZXIsIHN0YXRlLmlzX2NvbW1lbnQpCiAgICAgICAgICAgIGxpbmUgPSBuZXdsaW5lCgogICAgICAgICAgICBjb21tZW50X3N0cmluZywgbGVhZGluZ19jb21tZW50LCBsaW5lX2hlYWRlciA9IHNlbGYuZm9ybWF0X2NvbW1lbnRzKAogICAgICAgICAgICAgICAgY29tbWVudHMsIHN0YXRlLmxlYWRpbmdfY29tbWVudCwgbGluZV9oZWFkZXIsIGN1cnJlbnRfbGluZV9oZWFkZXIpCiAgICAgICAgICAgIHN0YXRlLmFsbF9jb21tZW50cyArPSBjb21tZW50X3N0cmluZwoKICAgICAgICAgICAgY29tbWVudF9zdHJpbmcsIGxlYWRpbmdfY29tbWVudCwgbGluZV9oZWFkZXIgPSBzZWxmLmZvcm1hdF9jb21tZW50X3RvX25leHQoCiAgICAgICAgICAgICAgICBjb21tZW50X3RvX25leHQsIGxlYWRpbmdfY29tbWVudCwgbWF0Y2hlciwgbGluZV9oZWFkZXIpCiAgICAgICAgICAgIHN0YXRlLmFsbF9jb21tZW50cyArPSBjb21tZW50X3N0cmluZwoKICAgICAgICAgICAgc3RhdGUuZXhpdF9zdGF0dXMgPSBleGl0X3N0YXR1cwogICAgICAgICAgICBzdGF0ZS5saW5lX2hlYWRlciA9IGxpbmVfaGVhZGVyCiAgICAgICAgICAgIHN0YXRlLmxlYWRpbmdfY29tbWVudCA9IGxlYWRpbmdfY29tbWVudAogICAgICAgICAgICBzdGF0ZS5tYXRjaGVyID0gbWF0Y2hlcgogICAgICAgICAgICBzdGF0ZS5pc19jb21tZW50ID0gaXNfY29tbWVudAoKICAgICAgICByZXR1cm4gc3RhdGUKCiAgICBkZWYgcGFyc2VfbGluZXMoc2VsZiwgZXJyc3RyZWFtLCBpbmZpbGUsIGZpbGVuYW1lKToKICAgICAgICAnJydFeHRyYWN0cyBhIGNvbW1lbnQgaW4gYWxsIGxpbmVzIGluIHRoZSBmaWxlJycnCgogICAgICAgIGxpbmVfbnVtYmVyID0gMAogICAgICAgIHN0YXRlID0gQ29tbWVudEV4dHJhY3RvclN0YXRlKCkKCiAgICAgICAgdHJ5OgogICAgICAgICAgICBsaW5lID0gaW5maWxlLnJlYWRsaW5lKCkKICAgICAgICAgICAgd2hpbGUgbGluZToKICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVyICs9IDEKICAgICAgICAgICAgICAgIHN0YXRlID0gc2VsZi5wYXJzZV9saW5lKGxpbmUsIGVycnN0cmVhbSwgbGluZV9udW1iZXIsIGZpbGVuYW1lLCBzdGF0ZSkKICAgICAgICAgICAgICAgIGxpbmUgPSBpbmZpbGUucmVhZGxpbmUoKQogICAgICAgICAgICAgICAgaWYgbm90IGxpbmUgYW5kIGxpbmVfbnVtYmVyID09IDE6CiAgICAgICAgICAgICAgICAgICAgbGluZSA9ICdcbicKCiAgICAgICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgICAgIHNlbGYud2Fybl9pb19lcnJvcihzeXMuc3RkZXJyLCBsaW5lX251bWJlciwgZmlsZW5hbWUpCiAgICAgICAgICAgIHN0YXRlLmV4aXRfc3RhdHVzID0gRVhJVF9TVEFUVVNfRVJST1IKCiAgICAgICAgcmV0dXJuIFtzdGF0ZS5hbGxfY29tbWVudHMsIHN0YXRlLmV4aXRfc3RhdHVzXQoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHN5cy5leGl0KENvbW1lbnRFeHRyYWN0b3Ioc3lzLmFyZ3YpLnBhcnNlKCkpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICBtYXRjaGVyID0gcicoLio/KSgoJXMpezF9PykoLiopJyAlIGRlbGltaXRlcgo8fGZpbV9lbmR8Pg=="]
["571270e27277eca70084ea53ff97b76f09aabc9c-4","571270e27277eca70084ea53ff97b76f09aabc9c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lLCBkYXRlCgpkZWYgbG9nIChsb2dUeXBlLCBtc2cpOgogICAgaWYgKGxvZ1R5cGUgIT0nSW5mbycgYW5kIGxvZ1R5cGUgIT0nV2FybmluZycgYW5kIGxvZ1R5cGUgIT0nRXJyb3InKToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdsb2dUeXBlIG5vdCB2YWxpZCcpCiAgICBub3cgPSBkYXRldGltZS5ub3coKQogICAgdG9kYXkgPSBkYXRlLnRvZGF5KCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgbG9nRmlsZSA9IG9wZW4odG9kYXkuaXNvZm9ybWF0KCkrJy5sb2cnLCAnYScpCiAgICBsb2dGaWxlLndyaXRlKGxvZ1R5cGUrJzogJyttc2crJygnK25vdy5pc29mb3JtYXQoKSsnKScrJ1xuJykKICAgIGxvZ0ZpbGUuY2xvc2UoKQo8fGZpbV9lbmR8Pg=="]
["f1f5635ccfa8013a4a87ae440ec262abe55a36fe-1","f1f5635ccfa8013a4a87ae440ec262abe55a36fe","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCgpmcm9tIG1vZHVsZXMuc2hhcmVkLmRvbWFpbi5idXMuY29tbWFuZCBpbXBvcnQgQ29tbWFuZAoKCmNsYXNzIENyZWF0ZVVzZXJDb21tYW5kKENvbW1hbmQpOgogICAgIiIiCiAgICBDcmVhdGUgVXNlciBDb21tYW5kCiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICAgIGlkOiBzdHIsCiAgICAgICAgICAgICAgICAgdXNlcm5hbWU6IHN0ciwKICAgICAgICAgICAgICAgICBwYXNzd29yZDogc3RyLAogICAgICAgICAgICAgICAgIGVtYWlsOiBzdHIpOgogICAgICAgICIiIgogICAgICAgIENyZWF0ZSBVc2VyIENvbW1hbmQKICAgICAgICBAcGFyYW0gaWQ6IGlkCiAgICAgICAgQHR5cGUgaWQ6IHN0cgogICAgICAgIEBwYXJhbSB1c2VybmFtZTogdXNlcm5hbWUKICAgICAgICBAdHlwZSB1c2VybmFtZTogc3RyCiAgICAgICAgQHBhcmFtIHBhc3N3b3JkOiBwYXNzd29yZAogICAgICAgIEB0eXBlIHBhc3N3b3JkOiBzdHIKPHxmaW1faG9sZXw+CiAgICAgICAgc2VsZi5fX2lkID0gaWQKICAgICAgICBzZWxmLl9fdXNlcm5hbWUgPSB1c2VybmFtZQogICAgICAgIHNlbGYuX19wYXNzd29yZCA9IHBhc3N3b3JkCiAgICAgICAgc2VsZi5fX2VtYWlsID0gZW1haWwKCiAgICBAcHJvcGVydHkKICAgIGRlZiBpZChzZWxmKToKICAgICAgICAiIiIKICAgICAgICBHZXR0ZXIgb2YgaWQKICAgICAgICBAcmV0dXJuOiBpZAogICAgICAgIEBydHlwZTogc3RyCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuX19pZAoKICAgIEBpZC5zZXR0ZXIKICAgIGRlZiBpZF9zZXR0ZXIoc2VsZiwgdmFsdWUpOgogICAgICAgICIiIgogICAgICAgIEdldHRlciBvZiBpZAogICAgICAgIEByZXR1cm46IGlkCiAgICAgICAgQHJ0eXBlOiBzdHIKICAgICAgICAiIiIKICAgICAgICByYWlzZSBFeGNlcHRpb24oIk5vdCBhbGxvd2VkIGFzc2lnbiBpZCBkaXJlY3RseSIpCgogICAgQHByb3BlcnR5CiAgICBkZWYgdXNlcm5hbWUoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgR2V0dGVyIG9mIHVzZXJuYW1lCiAgICAgICAgQHJldHVybjogdXNlcm5hbWUKICAgICAgICBAcnR5cGU6IHN0cgogICAgICAgICIiIgogICAgICAgIHJldHVybiBzZWxmLl9fdXNlcm5hbWUKCiAgICBAdXNlcm5hbWUuc2V0dGVyCiAgICBkZWYgdXNlcm5hbWVfc2V0dGVyKHNlbGYsIHZhbHVlKToKICAgICAgICAiIiIKICAgICAgICBTZXR0ZXIgb2YgdXNlcm5hbWUKICAgICAgICBAcmV0dXJuOiBpZAogICAgICAgIEBydHlwZTogc3RyCiAgICAgICAgIiIiCiAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJOb3QgYWxsb3dlZCBhc3NpZ24gdXNlcm5hbWUgZGlyZWN0bHkiKQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIHBhc3N3b3JkKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIEdldHRlciBvZiBpZAogICAgICAgIEByZXR1cm46IGlkCiAgICAgICAgQHJ0eXBlOiBzdHIKICAgICAgICAiIiIKICAgICAgICByZXR1cm4gc2VsZi5fX3Bhc3N3b3JkCgogICAgQHBhc3N3b3JkLnNldHRlcgogICAgZGVmIHBhc3N3b3JkX3NldHRlcihzZWxmLCB2YWx1ZSk6CiAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJOb3QgYWxsb3dlZCBhc3NpZ24gcGFzc3dvcmQgZGlyZWN0bHkiKQoKCiAgICBAcHJvcGVydHkKICAgIGRlZiBlbWFpbChzZWxmKToKICAgICAgICAiIiIKICAgICAgICBHZXR0ZXIgb2YgZW1haWwKICAgICAgICBAcmV0dXJuOiBlbWFpbAogICAgICAgIEBydHlwZTogc3RyCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuX19lbWFpbAoKICAgIEBlbWFpbC5zZXR0ZXIKICAgIGRlZiBlbWFpbF9zZXR0ZXIoc2VsZiwgdmFsdWUpOgogICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTm90IGFsbG93ZWQgYXNzaWduIGVtYWlsIGRpcmVjdGx5IikKCgoKCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgQHBhcmFtIGVtYWlsOiBlbWFpbAogICAgICAgIEB0eXBlIGVtYWlsOiBzdHIKICAgICAgICAiIiIKCjx8ZmltX2VuZHw+"]
["9e05a1e84b7702df49109066124e4d33128a892e-1","9e05a1e84b7702df49109066124e4d33128a892e","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKTk9ORSA9IDAKPHxmaW1faG9sZXw+CiAgICBwcmludCgqbGVmdCwgc2VwID0gIiAiLCBlbmQ9IiwgIikKICAgIHByaW50KCpyaWdodCwgc2VwID0gIiAiKQogICAgd2hpbGUgVHJ1ZToKICAgICAgICBzcG9vbiA9IGlucHV0KCkuc3RyaXAoKQogICAgICAgIHBvc3NpYmxlUmVzdWx0ID0gc3Bvb24uc3BsaXQoJywnKVswXQogICAgICAgIGlmIHBvc3NpYmxlUmVzdWx0ID09ICJOT05FIjoKICAgICAgICAgICAgcmV0dXJuIE5PTkUKICAgICAgICBpZiBwb3NzaWJsZVJlc3VsdCA9PSAiTEVGVCI6CiAgICAgICAgICAgIHJldHVybiBMRUZUCiAgICAgICAgaWYgcG9zc2libGVSZXN1bHQgPT0gIlJJR0hUIjoKICAgICAgICAgICAgcmV0dXJuIFJJR0hUCgpkZWYgZmluZEZhbHNlQ29pbigpOgogICAgcHJpbnQoJyNlbmQnKQogICAgc3Bvb24gPSBpbnB1dCgpLnN0cmlwKCkKCmRlZiBjaHVua0l0KHNlcSwgbnVtKToKICAgIG91dCA9IFtdCiAgICB0bXAgPSBbXQogICAgZm9yIGl0ZW0gaW4gc2VxOgogICAgICAgIHRtcC5hcHBlbmQoaXRlbSkKICAgICAgICBpZiBsZW4odG1wKSA9PSBudW06CiAgICAgICAgICAgIG91dC5hcHBlbmQodG1wKQogICAgICAgICAgICB0bXAgPSBbXQogICAgaWYgbGVuKHRtcCkgIT0gMDoKICAgICAgICBvdXQuYXBwZW5kKHRtcCkKICAgIHJldHVybiBvdXQKCmRlZiBzdGFydEFsZ28oKToKICAgIG4gPSA3CiAgICBjb2luc1RvQ2hlY2sgPSBsaXN0KHJhbmdlKDEsIG4gKyAxKSkKICAgIHdoaWxlIGxlbihjb2luc1RvQ2hlY2spICE9IDE6CiAgICAgICAgZGltID0gbGVuKGNvaW5zVG9DaGVjaykgLy8gMyArIGxlbihjb2luc1RvQ2hlY2spICUgMwogICAgICAgIGNodW5ja3MgPSBjaHVua0l0KGNvaW5zVG9DaGVjaywgZGltKQogICAgICAgIGxlZnQgPSBjaHVuY2tzWzBdCiAgICAgICAgcmlnaHQgPSBjaHVuY2tzWzFdCiAgICAgICAgcmVzdWx0ID0gZG9TY2FsZShsZWZ0LCByaWdodCkKICAgICAgICBpZiByZXN1bHQgPT0gTk9ORToKICAgICAgICAgICAgY29pbnNUb0NoZWNrID0gY2h1bmNrc1syXQogICAgICAgIGVsaWYgcmVzdWx0ID09IExFRlQ6CiAgICAgICAgICAgIGNvaW5zVG9DaGVjayA9IHJpZ2h0CiAgICAgICAgZWxpZiByZXN1bHQgPT0gUklHSFQ6CiAgICAgICAgICAgIGNvaW5zVG9DaGVjayA9IGxlZnQKICAgIGZpbmRGYWxzZUNvaW4oKQoKCgpzcG9vbiA9IGlucHV0KCkuc3RyaXAoKQp3aGlsZSBzcG9vbls6bGVuKCIjPyB3YWl0aW5nIGZvciAiKV0gIT0gIiM/IHdhaXRpbmcgZm9yICI6CiAgICBzcG9vbiA9IGlucHV0KCkuc3RyaXAoKQogICAgYXNzZXJ0IHNwb29uWzBdID09ICIjIgpzdGFydEFsZ28oKQo8fGZpbV9zdWZmaXh8PgpMRUZUID0gLTEKUklHSFQgPSAxCgpkZWYgZG9TY2FsZShsZWZ0LCByaWdodCk6Cjx8ZmltX2VuZHw+"]
["1f13b230c08e9ec7e7cd3e04220a004abd0ff7ee-3","1f13b230c08e9ec7e7cd3e04220a004abd0ff7ee","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBlbmNvZGluZzogdXRmLTggLSotCmltcG9ydCBvcwppbXBvcnQgc3lzCmltcG9ydCB5YW1sCmltcG9ydCBqc29uCmZyb20gc3RhdCBpbXBvcnQgKgpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZXpvbmUKaW1wb3J0IGhhc2hsaWIKaW1wb3J0IGFyZ3BhcnNlCgoKZGVmIGhhc2hGaWxlKGhhc2hOYW1lLCBmaWxlbmFtZSk6CiAgICBoID0gaGFzaGxpYi5uZXcoaGFzaE5hbWUpCiAgICBiID0gYnl0ZWFycmF5KDEyOCoxMDI0KQogICAgbXYgPSBtZW1vcnl2aWV3KGIpCiAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyYicsIGJ1ZmZlcmluZz0wKSBhcyBmOgogICAgICAgIGZvciBuIGluIGl0ZXIobGFtYmRhOiBmLnJlYWRpbnRvKG12KSwgMCk6CiAgICAgICAgICAgIGgudXBkYXRlKG12WzpuXSkKICAgIHJldHVybiBoLmhleGRpZ2VzdCgpCgpkZWYgZml4TmFtZTIoZmZuLHJlbW92ZVBmeCxhZGRQZngpOgogICAgdG1wX3BhdGggPSBmZm4KICAgIGlmIGxlbihyZW1vdmVQZngpID4wOgogICAgICAgIGN1dCA9IGxlbihyZW1vdmVQZngpICsgMQogICAgICAgIHRtcF9wYXRoID0gZmZuW2N1dDpdCiAgICBpZiBsZW4odG1wX3BhdGgpPjA6CiAgICAgICAgaWYgbGVuKGFkZFBmeCk+MDoKICAgICAgICAgICAgdG1wX3BhdGggPSBhZGRQZnggKyAiLyIgKyB0bXBfcGF0aAogICAgZWxzZToKICAgICAgICB0bXBfcGF0aCA9IGFkZFBmeAogICAgCiAgICByZXR1cm4gdG1wX3BhdGgKCmRlZiBmaW5mbyhmZm4pOgogICAgZ2xvYmFsIHVybEJhc2Uscm9vdF9wZngsdXJsX3BmeAogICAgc29iaiA9IG9zLnN0YXQoZmZuKQogICAgZm4gPSBvcy5wYXRoLmJhc2VuYW1lKGZmbikKICAgIGZvYmogPSB7CiAgICAgICAgIm5hbWUiOiBmbiwKICAgICAgICAiZm5hbWUiOiBmaXhOYW1lMihmZm4sY29uZmlnLndhbGtfZGlyLGNvbmZpZy5yZWxfcGZ4KSwKICAgICAgICAidXJsIjogY29uZmlnLnVybF9iYXNlICsgIi8iICsgZml4TmFtZTIoZmZuLGNvbmZpZy53YWxrX2Rpcixjb25maWcudXJsX2lmeCksCiAgICAgICAgInNpemUiOiBzb2JqLnN0X3NpemUsCiAgICAgICAgIm10aW1lIjogc29iai5zdF9tdGltZSwKICAgICAgICAibXRpbWVfaHVtYW4iOiBzdHIoZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChzb2JqLnN0X210aW1lLCB0ej10aW1lem9uZS51dGMpKSwKICAgICAgICAiaGFzaGVzIjogZ2V0SGFzaGVzKGZmbikKICAgIH0KICAgIHJldHVybiBmb2JqCgoKZGVmIGdldEhhc2hlcyhmbik6CiAgICBoYXNoX2xpc3QgPSB7fQogICAgaGFzaF9uYW1lcyA9IFsibWQ1IiwgInNoYTEiLCAic2hhMjU2Il0KICAgIGZvciBoYXNoX25hbWUgaW4gaGFzaF9uYW1lczoKICAgICAgICBoYXNoX2xpc3RbaGFzaF9uYW1lXSA9IGhhc2hGaWxlKGhhc2hfbmFtZSwgZm4pCiAgICByZXR1cm4gaGFzaF9saXN0CgpkZWYgZmxhdERpcih3YWxrX2Rpcik6CiAgICBkc3RydWN0ID0ge30KICAgIGZvciByb290LCBzdWJkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHdhbGtfZGlyKToKICAgICAgICBmYXJyID0gW10KICAgICAgICBmb3IgZm4gaW4gZmlsZXM6CiAgICAgICAgICAgIGlmIGZuICE9IGNvbmZpZy5zZWxmX2ZuOgogICAgICAgICAgICAgICAgZmZuID0gb3MucGF0aC5qb2luKHJvb3QsIGZuKQogICAgICAgICAgICAgICAgZm9iaiA9IGZpbmZvKGZmbikKICAgICAgICAgICAgICAgIGZhcnIuYXBwZW5kKGZvYmopCiAgICAgICAgIyByb290X3BmeAogICAgICAgIGlmIG5vdCBjb25maWcubm9fZW1wdHkgb3IgbGVuKGZhcnIpPjA6CiAgICAgICAgICAgIGRzdHJ1Y3RbZml4TmFtZTIocm9vdCxjb25maWcud2Fsa19kaXIsY29uZmlnLnJlbF9wZngpXSA9IGZhcnIKICAgIHJldHVybiBkc3RydWN0CgpkZWYgcGFyc2VfYXJncygpOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCiAgICAgICAgZGVzY3JpcHRpb249J1dhbGsgdGhlIGRpcmVjdG9yeSB0cmVlIGFuZCBwcm9kdWNlIG1ldGFkYXRhJywKICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3dhbGtfZGlyJywKICAgICAgICB0eXBlPXN0ciwgbmFyZ3M9Ij8iLCBkZWZhdWx0PSIuIiwKICAgICAgICBoZWxwPSdkaXJlY3RvcnkgdG8gd2FsayBkb3duJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdXJsLWJhc2UnLAogICAgICAgIHR5cGU9c3RyLCBkZWZhdWx0PSAiaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20vc2hhcmUiLAogICAgICAgIGhlbHA9J2NvbW1vbiB1cmwgcHJlZml4IGZvciBmaWxlcycpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJlbC1wZngnLAogICAgICAgIHR5cGU9c3RyLCBkZWZhdWx0PScuJywgaGVscD0nbWV0YWRhdGEgZmlsZSBwYXRoIHByZWZpeCcpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJlbC1sZG4nLAogICAgICAgIHR5cGU9Ym9vbCwgZGVmYXVsdD1UcnVlLCBoZWxwPSdhZGQgbGFzdCBwYXJ0IG9mIHRoZSB3YWxrX2RpcmVjdG9yeSBhcyBmaWxlIHBhdGggcHJlZml4JykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdXJsLWlmeCcsCiAgICAgICAgdHlwZT1zdHIsIGRlZmF1bHQ9JycsIGhlbHA9J2ZpbGUgcGF0aCBpbmZpeCB1c2VkIGZvciBVUkwnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zZWxmLWZuJywKICAgICAgICB0eXBlPXN0ciwgZGVmYXVsdD0nZGlyLW5nLmpzb24nLCBoZWxwPSdmaWxlbmFtZSB0byBvbWl0IGZyb20gbGlzdGluZ3MnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS13cmFwLWZuJywKICAgICAgICB0eXBlPXN0ciwgaGVscD0nYSBqc29uIGZpbGUgdGhhdCB3cmFwcyB0aGUgZmlsZSBsaXN0aW5nJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0teWFtbCcsCiAgICAgICAgdHlwZT1ib29sLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSdPdXRwdXQgeWFtbCBpbnN0ZWFkIG9mIGpzb24nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1uby1lbXB0eScsCiAgICAgICAgdHlwZT1ib29sLCBkZWZhdWx0PVRydWUsIGhlbHA9J1NraXAgZW1wdHkgZm9sZGVyJykKICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCiAgICByZXR1cm4gYXJncwogICAgCmRlZiBtYWluKCk6CiAgICBnbG9iYWwgY29uZmlnCiAgICBjb25maWcgPSBwYXJzZV9hcmdzKCkKICAgIGlmIChjb25maWcucmVsX2xkbik6CiAgICAgICAgY29uZmlnLnJlbF9wZnggPSBjb25maWcud2Fsa19kaXIuc3BsaXQoIi8iKVstMV0KCiAgICAjIHdhbGtfZGlyX2FicyA9IG9zLnBhdGguYWJzcGF0aChjb25maWcud2Fsa19kaXIpCgogICAgZmxhdCA9IGZsYXREaXIoY29uZmlnLndhbGtfZGlyKQogICAgd3JhcCA9IHt9CiAgICBpZiBjb25maWcud3JhcF9mbiBpcyBub3QgTm9uZToKICAgICAgICB3aXRoIG9wZW4oY29uZmlnLndyYXBfZm4pIGFzIGY6CiAgICAgICAgICAgIHdyYXAgPSBqc29uLmxvYWQoZikgICAgICAgIAogICAgd3JhcFsiRmlsZXMiXSA9IGZsYXQKCiAgICBwcmludChqc29uLmR1bXBzKHdyYXAsIGluZGVudD0yKSkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW4oKQo8fGZpbV9lbmR8Pg=="]
["1f3bce1f52b8f079210f085ba8f0b7118b1d3b63-4","1f3bce1f52b8f079210f085ba8f0b7118b1d3b63","PHxmaW1fcHJlZml4fD4KZGVmIHdsY19zYXZlX2NvbmZpZyh3bGMsICp2YXJncywgKiprdmFyZ3MpOgogICMgd3JpdGUgdGhlIGNvbmZpZy4gIGlmIHRoZXJlIGhhcHBlbnMgdG8gYmUgYW4gZXhjZXB0aW9uCiAgIyBpdCB3aWxsIGdldCB0aHJvd24uICBvdGhlcndpc2UsIGV2ZXJ5dGhpbmcgaXMgT0ssIGFuZCAKICAjIGp1c3QgcmV0dXJuIFRydWUKICB3bGMucnBjLmFjdF93cml0ZV9jb25maWd1cmF0aW9uKCkKICByZXR1cm4gVHJ1ZQoKZGVmIHdsY19nZXRfY29uZmlnKHdsYywgKnZhcmdzLCAqKmt2YXJncyk6CiAgIyBzaG9ydHkgY3V0IGZvciBncmFiYmluZyB0aGUgZW50aXJlIFhNTCBjb25maWcsIHlvIQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgcmV0dXJuIHdsYy5ycGMuZ2V0X2NvbmZpZ3VyYXRpb24oKQo8fGZpbV9lbmR8Pg=="]
["85db875592efb9b7cdf8f6a540c3ef9c0eac8b27-4","85db875592efb9b7cdf8f6a540c3ef9c0eac8b27","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgbWVzc2FnZXMKZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLmRlY29yYXRvcnMgaW1wb3J0IHBlcm1pc3Npb25fcmVxdWlyZWQKZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRCmZyb20gZGphbmdvLmh0dHAgaW1wb3J0IEpzb25SZXNwb25zZSwgSHR0cDQwNCwgSHR0cFJlc3BvbnNlUmVkaXJlY3QKZnJvbSBkamFuZ28uc2hvcnRjdXRzIGltcG9ydCBnZXRfb2JqZWN0X29yXzQwNCwgcmVkaXJlY3QKZnJvbSBkamFuZ28udGVtcGxhdGUuY29udGV4dF9wcm9jZXNzb3JzIGltcG9ydCBjc3JmCmZyb20gZGphbmdvLnRlbXBsYXRlLnJlc3BvbnNlIGltcG9ydCBUZW1wbGF0ZVJlc3BvbnNlCmZyb20gZGphbmdvLnV0aWxzLnRyYW5zbGF0aW9uIGltcG9ydCBwZ2V0dGV4dF9sYXp5Cgpmcm9tIC5maWx0ZXJzIGltcG9ydCBVc2VyRmlsdGVyCmZyb20gLmZvcm1zIGltcG9ydCBDdXN0b21lckRlbGV0ZUZvcm0sIEN1c3RvbWVyRm9ybSwgQ3VzdG9tZXJOb3RlRm9ybSwgQWRkcmVzc0Zvcm1TZXQKZnJvbSAuLmVtYWlscyBpbXBvcnQgc2VuZF9zZXRfcGFzc3dvcmRfZW1haWwKZnJvbSAuLnZpZXdzIGltcG9ydCBzdGFmZl9tZW1iZXJfcmVxdWlyZWQKZnJvbSAuLi5hY2NvdW50IGltcG9ydCBldmVudHMgYXMgYWNjb3VudF9ldmVudHMKZnJvbSAuLi5hY2NvdW50Lm1vZGVscyBpbXBvcnQgQ3VzdG9tZXJOb3RlLCBVc2VyLCBBZGRyZXNzCmZyb20gLi4uY29yZS51dGlscyBpbXBvcnQgZ2V0X3BhZ2luYXRvcl9pdGVtcwoKCkBzdGFmZl9tZW1iZXJfcmVxdWlyZWQKQHBlcm1pc3Npb25fcmVxdWlyZWQoImFjY291bnQubWFuYWdlX3VzZXJzIikKZGVmIGN1c3RvbWVyX2xpc3QocmVxdWVzdCk6CiAgICBjdXN0b21lcnMgPSAoCiAgICAgICAgVXNlci5vYmplY3RzLmV4Y2x1ZGUoaXNfc3RhZmY9VHJ1ZSwgaXNfc3VwZXJ1c2VyPVRydWUpCiAgICAgICAgICAgIC5kaXN0aW5jdCgpCiAgICAgICAgICAgIC5wcmVmZXRjaF9yZWxhdGVkKCJvcmRlcnMiLCAiYWRkcmVzc2VzIikKICAgICAgICAgICAgLnNlbGVjdF9yZWxhdGVkKCJkZWZhdWx0X2JpbGxpbmdfYWRkcmVzcyIsICJkZWZhdWx0X3NoaXBwaW5nX2FkZHJlc3MiKQogICAgICAgICAgICAub3JkZXJfYnkoImVtYWlsIikKICAgICkKICAgIGN1c3RvbWVyX2ZpbHRlciA9IFVzZXJGaWx0ZXIocmVxdWVzdC5HRVQsIHF1ZXJ5c2V0PWN1c3RvbWVycykKICAgIGN1c3RvbWVycyA9IGdldF9wYWdpbmF0b3JfaXRlbXMoCiAgICAgICAgY3VzdG9tZXJfZmlsdGVyLnFzLCBzZXR0aW5ncy5EQVNIQk9BUkRfUEFHSU5BVEVfQlksIHJlcXVlc3QuR0VULmdldCgicGFnZSIpCiAgICApCiAgICBjdHggPSB7CiAgICAgICAgImN1c3RvbWVycyI6IGN1c3RvbWVycywKICAgICAgICAiZmlsdGVyX3NldCI6IGN1c3RvbWVyX2ZpbHRlciwKICAgICAgICAiaXNfZW1wdHkiOiBub3QgY3VzdG9tZXJfZmlsdGVyLnF1ZXJ5c2V0LmV4aXN0cygpLAogICAgfQogICAgcmV0dXJuIFRlbXBsYXRlUmVzcG9uc2UocmVxdWVzdCwgImRhc2hib2FyZC9jdXN0b21lci9saXN0Lmh0bWwiLCBjdHgpCgoKQHN0YWZmX21lbWJlcl9yZXF1aXJlZApAcGVybWlzc2lvbl9yZXF1aXJlZCgiYWNjb3VudC5tYW5hZ2VfdXNlcnMiKQpkZWYgY3VzdG9tZXJfZGV0YWlscyhyZXF1ZXN0LCBwayk6CiAgICBxdWVyeXNldCA9IFVzZXIub2JqZWN0cy5wcmVmZXRjaF9yZWxhdGVkKAogICAgICAgICJvcmRlcnMiLCAiYWRkcmVzc2VzIiwgIm5vdGVzIgogICAgKS5zZWxlY3RfcmVsYXRlZCgiZGVmYXVsdF9iaWxsaW5nX2FkZHJlc3MiLCAiZGVmYXVsdF9zaGlwcGluZ19hZGRyZXNzIikKICAgIGN1c3RvbWVyID0gZ2V0X29iamVjdF9vcl80MDQocXVlcnlzZXQsIHBrPXBrKQogICAgY3VzdG9tZXJfb3JkZXJzID0gY3VzdG9tZXIub3JkZXJzLmFsbCgpCiAgICBub3RlcyA9IGN1c3RvbWVyLm5vdGVzLmFsbCgpCiAgICBjdHggPSB7ImN1c3RvbWVyIjogY3VzdG9tZXIsICJjdXN0b21lcl9vcmRlcnMiOiBjdXN0b21lcl9vcmRlcnMsICJub3RlcyI6IG5vdGVzfQogICAgcmV0dXJuIFRlbXBsYXRlUmVzcG9uc2UocmVxdWVzdCwgImRhc2hib2FyZC9jdXN0b21lci9kZXRhaWwuaHRtbCIsIGN0eCkKCgpAc3RhZmZfbWVtYmVyX3JlcXVpcmVkCkBwZXJtaXNzaW9uX3JlcXVpcmVkKCJhY2NvdW50Lm1hbmFnZV91c2VycyIpCmRlZiBjdXN0b21lcl9jcmVhdGUocmVxdWVzdCk6CiAgICBjdXN0b21lciA9IFVzZXIoKQogICAgZm9ybSA9IEN1c3RvbWVyRm9ybShyZXF1ZXN0LlBPU1Qgb3IgTm9uZSwgaW5zdGFuY2U9Y3VzdG9tZXIsIHVzZXI9cmVxdWVzdC51c2VyKQogICAgaWYgZm9ybS5pc192YWxpZCgpOgogICAgICAgIGZvcm0uc2F2ZSgpCiAgICAgICAgbXNnID0gcGdldHRleHRfbGF6eSgiRGFzaGJvYXJkIG1lc3NhZ2UiLCAiQWRkZWQgY3VzdG9tZXIgJXMiKSAlIGN1c3RvbWVyCiAgICAgICAgc2VuZF9zZXRfcGFzc3dvcmRfZW1haWwoY3VzdG9tZXIpCiAgICAgICAgbWVzc2FnZXMuc3VjY2VzcyhyZXF1ZXN0LCBtc2cpCiAgICAgICAgcmV0dXJuIHJlZGlyZWN0KCJkYXNoYm9hcmQ6Y3VzdG9tZXItZGV0YWlscyIsIHBrPWN1c3RvbWVyLnBrKQogICAgY3R4ID0geyJmb3JtIjogZm9ybSwgImN1c3RvbWVyIjogY3VzdG9tZXJ9CiAgICByZXR1cm4gVGVtcGxhdGVSZXNwb25zZShyZXF1ZXN0LCAiZGFzaGJvYXJkL2N1c3RvbWVyL2Zvcm0uaHRtbCIsIGN0eCkKCgpAc3RhZmZfbWVtYmVyX3JlcXVpcmVkCkBwZXJtaXNzaW9uX3JlcXVpcmVkKCJhY2NvdW50Lm1hbmFnZV91c2VycyIpCmRlZiBjdXN0b21lcl9lZGl0KHJlcXVlc3QsIHBrPU5vbmUpOgogICAgdHJ5OgogICAgICAgIGN1c3RvbWVyID0gVXNlci5vYmplY3RzLmRlZmVyKCdwcml2YXRlX21ldGEnKS5nZXQoaWQ9cGspCiAgICBleGNlcHQgVXNlci5Eb2VzTm90RXhpc3Q6CiAgICAgICAgcmFpc2UgSHR0cDQwNChmJ05vIGN1c3RvbWVyICN7cGt9IG1hdGNoZXMgdGhlIGdpdmVuIHF1ZXJ5LicpCgogICAgZm9ybSA9IEN1c3RvbWVyRm9ybShyZXF1ZXN0LlBPU1Qgb3IgTm9uZSwgaW5zdGFuY2U9Y3VzdG9tZXIsIHVzZXI9cmVxdWVzdC51c2VyKQogICAgIyBvcmRlcmluZywgc2hvdyBkZWZhdWx0IGZpcnN0CiAgICBhZGRyZXNzX3F1ZXJ5c2V0ID0gY3VzdG9tZXIuYWRkcmVzc2VzLmFsbCgpLm9yZGVyX2J5KCctdXNlcl9hZGRyZXNzZXNfX2RlZmF1bHRfc2hpcHBpbmdfYWRkcmVzcycpCiAgICBhZGRyZXNzX2Zvcm1zZXQgPSBBZGRyZXNzRm9ybVNldChyZXF1ZXN0LlBPU1Qgb3IgTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuRklMRVMgb3IgTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5c2V0PWFkZHJlc3NfcXVlcnlzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9J2FkZHJlc3Nfc2V0JykKCiAgICBpZiByZXF1ZXN0Lm1ldGhvZCA9PSAnUE9TVCcgYW5kIGZvcm0uaXNfdmFsaWQoKToKICAgICAgICBmb3JtLnNhdmUoKQogICAgICAgIG1zZyA9IHBnZXR0ZXh0X2xhenkoIkRhc2hib2FyZCBtZXNzYWdlIiwgIlVwZGF0ZWQgY3VzdG9tZXIgJXMiKSAlIGN1c3RvbWVyLmZpcnN0X25hbWUKCiAgICAgICAgaWYgYWRkcmVzc19mb3Jtc2V0LmlzX3ZhbGlkKCk6CiAgICAgICAgICAgIGFkZHJlc3NlcyA9IGFkZHJlc3NfZm9ybXNldC5zYXZlKCkKICAgICAgICAgICAgY3VzdG9tZXIuYWRkcmVzc2VzLmFkZCgqYWRkcmVzc2VzKQogICAgICAgICAgICBtZXNzYWdlcy5zdWNjZXNzKHJlcXVlc3QsIG1zZykKICAgICAgICBlbHNlOgogICAgICAgICAgICBtZXNzYWdlcy5lcnJvcihyZXF1ZXN0LCBzdHIoYWRkcmVzc19mb3Jtc2V0LmVycm9ycykpCgogICAgICAgIHJldHVybiByZWRpcmVjdCgiZGFzaGJvYXJkOmN1c3RvbWVyLWRldGFpbHMiLCBwaz1jdXN0b21lci5waykKICAgIGN0eCA9IHsiZm9ybSI6IGZvcm0sCiAgICAgICAgICAgImN1c3RvbWVyIjogY3VzdG9tZXIsCiAgICAgICAgICAgImFkZHJlc3NfZm9ybXMiOiBhZGRyZXNzX2Zvcm1zZXQsCiAgICAgICAgICAgfQogICAgcmV0dXJuIFRlbXBsYXRlUmVzcG9uc2UocmVxdWVzdCwgImRhc2hib2FyZC9jdXN0b21lci9mb3JtLmh0bWwiLCBjdHgpCgoKQHN0YWZmX21lbWJlcl9yZXF1aXJlZApAcGVybWlzc2lvbl9yZXF1aXJlZCgiYWNjb3VudC5tYW5hZ2VfdXNlcnMiKQpkZWYgc2V0X2RlZmF1bHRfYWRkcmVzcyhyZXF1ZXN0LCBwaz1Ob25lKToKICAgIHRyeToKICAgICAgICBhZGRyZXNzID0gQWRkcmVzcy5vYmplY3RzLmdldChpZD1waykKICAgICAgICBjdXN0b21lciA9IGFkZHJlc3MuY3VzdG9tZXIKICAgICAgICBjdXN0b21lci5kZWZhdWx0X3NoaXBwaW5nX2FkZHJlc3MgPSBhZGRyZXNzCiAgICAgICAgY3VzdG9tZXIuc2F2ZSh1cGRhdGVfZmllbGRzPVsnZGVmYXVsdF9zaGlwcGluZ19hZGRyZXNzJ10pCiAgICBleGNlcHQgVXNlci5Eb2VzTm90RXhpc3Q6CiAgICAgICAgcGFzcwogICAgcmV0dXJuIEh0dHBSZXNwb25zZVJlZGlyZWN0KHJlcXVlc3QuTUVUQVsnSFRUUF9SRUZFUkVSJ10pCgoKQHN0YWZmX21lbWJlcl9yZXF1aXJlZApAcGVybWlzc2lvbl9yZXF1aXJlZCgiYWNjb3VudC5tYW5hZ2VfdXNlcnMiKQpkZWYgYWpheF91c2Vyc19saXN0KHJlcXVlc3QpOgogICAgcXVlcnlzZXQgPSBVc2VyLm9iamVjdHMuc2VsZWN0X3JlbGF0ZWQoImRlZmF1bHRfYmlsbGluZ19hZGRyZXNzIikKICAgIHNlYXJjaF9xdWVyeSA9IHJlcXVlc3QuR0VULmdldCgicSIsICIiKQogICAgaWYgc2VhcmNoX3F1ZXJ5OgogICAgICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQuZmlsdGVyKAogICAgICAgICAgICBRKGRlZmF1bHRfYmlsbGluZ19hZGRyZXNzX19maXJzdF9uYW1lX19pY29udGFpbnM9c2VhcmNoX3F1ZXJ5KQogICAgICAgICAgICB8IFEoZGVmYXVsdF9iaWxsaW5nX2FkZHJlc3NfX2xhc3RfbmFtZV9faWNvbnRhaW5zPXNlYXJjaF9xdWVyeSkKICAgICAgICAgICAgfCBRKGVtYWlsX19pY29udGFpbnM9c2VhcmNoX3F1ZXJ5KQogICAgICAgICkKICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQub3JkZXJfYnkoImVtYWlsIikKICAgIHVzZXJzID0gW3siaWQiOiB1c2VyLnBrLCAidGV4dCI6IHVzZXIuZ2V0X2FqYXhfbGFiZWwoKX0gZm9yIHVzZXIgaW4gcXVlcnlzZXRdCiAgICByZXR1cm4gSnNvblJlc3BvbnNlKHsicmVzdWx0cyI6IHVzZXJzfSkKCgpAc3RhZmZfbWVtYmVyX3JlcXVpcmVkCkBwZXJtaXNzaW9uX3JlcXVpcmVkKCJhY2NvdW50Lm1hbmFnZV91c2VycyIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIGN1c3RvbWVyX2FkZF9ub3RlKHJlcXVlc3QsIGN1c3RvbWVyX3BrKToKICAgIGN1c3RvbWVyID0gZ2V0X29iamVjdF9vcl80MDQoVXNlciwgcGs9Y3VzdG9tZXJfcGspCiAgICBub3RlID0gQ3VzdG9tZXJOb3RlKGN1c3RvbWVyPWN1c3RvbWVyLCB1c2VyPXJlcXVlc3QudXNlcikKICAgIGZvcm0gPSBDdXN0b21lck5vdGVGb3JtKHJlcXVlc3QuUE9TVCBvciBOb25lLCBpbnN0YW5jZT1ub3RlKQo8fGZpbV9lbmR8Pg=="]
["b56098c8d4a766b1e7b8f5a9438b824ead12fd1e-1","b56098c8d4a766b1e7b8f5a9438b824ead12fd1e","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29yZS5leGNlcHRpb25zIGltcG9ydCBPYmplY3REb2VzTm90RXhpc3QKZnJvbSBvcyBpbXBvcnQgZW52aXJvbgpmcm9tIC5tb2RlbHMgaW1wb3J0IENvbW1pdCwgSG9va3MKaW1wb3J0IGRhdGV0aW1lCmltcG9ydCByZXF1ZXN0cwoKCmRlZiBnZXRfbGFzdF9tb250aCgpOgogICAgdG9kYXkgPSBkYXRldGltZS5kYXRldGltZS5ub3coKQogICAgZmlyc3QgPSB0b2RheS5yZXBsYWNlKGRheT0xKQogICAgbGFzdE1vbnRoID0gZmlyc3QgLSBkYXRldGltZS50aW1lZGVsdGEoZGF5cz0xKQogICAgcmV0dXJuIGxhc3RNb250aC5yZXBsYWNlKAogICAgICAgIGRheT0xLAogICAgICAgIGhvdXI9MCwKICAgICAgICBtaW51dGU9MCwKICAgICAgICBzZWNvbmQ9MCwKICAgICAgICBtaWNyb3NlY29uZD0wCiAgICApLmlzb2Zvcm1hdCgpCgoKZGVmIHNlcmlhbGl6ZV9jb21taXRfcmVzcG9uc2UoY29tbWl0KToKICAgIHJldHVybiB7CiAgICAgICAgJ3NoYSc6IGNvbW1pdFsnc2hhJ10sCiAgICAgICAgJ2NvbW1pdHRlcic6IGNvbW1pdFsnY29tbWl0J11bJ2F1dGhvciddWyduYW1lJ10sCiAgICAgICAgJ2RhdGUnOiBjb21taXRbJ2NvbW1pdCddWydhdXRob3InXVsnZGF0ZSddLAogICAgICAgICdtZXNzYWdlJzogY29tbWl0Wydjb21taXQnXVsnbWVzc2FnZSddLAogICAgICAgICd1cmwnOiBjb21taXRbJ2NvbW1pdCddWyd1cmwnXSwKICAgIH0KCgpkZWYgZ2V0X2NvbW1pdHMoYWNjZXNzX3Rva2VuLCBsb2dpbiwgcHJvamVjdCk6CiAgICAjIHB5bGludDogZGlzYWJsZT1uby1tZW1iZXIKICAgIGhlYWRlcnMgPSB7fQogICAgaWYgYWNjZXNzX3Rva2VuIGlzIG5vdCBOb25lOgogICAgICAgIGhlYWRlcnMgPSB7J0F1dGhvcml6YXRpb24nOiAndG9rZW4gJyArIGFjY2Vzc190b2tlbn0KPHxmaW1faG9sZXw+CiAgICBpZiAnbWVzc2FnZScgaW4gci5qc29uKCk6CiAgICAgICAgcmV0dXJuIHIuanNvbigpCgogICAgZm9yIGVsIGluIGxpc3QobWFwKHNlcmlhbGl6ZV9jb21taXRfcmVzcG9uc2UsIHIuanNvbigpKSk6CiAgICAgICAgZWxbJ3Byb2plY3QnXSA9IHByb2plY3QKICAgICAgICBlbFsndXNlciddID0gbG9naW4KICAgICAgICBDb21taXQub2JqZWN0cy51cGRhdGVfb3JfY3JlYXRlKHNoYT1lbFsnc2hhJ10sIGRlZmF1bHRzPWVsKQoKICAgIHJldHVybiBGYWxzZQoKCmRlZiBzZXRfd2ViaG9vayhwcm9qZWN0LCBvd25lciwgYWNjZXNzX3Rva2VuKToKICAgICMgcHlsaW50OiBkaXNhYmxlID0gbm8tbWVtYmVyCiAgICBwcm9qZWN0RXhpc3QgPSBOb25lCiAgICB0cnk6CiAgICAgICAgcHJvamVjdEV4aXN0ID0gSG9va3Mub2JqZWN0cy5nZXQocHJvamVjdD1wcm9qZWN0KQogICAgZXhjZXB0IE9iamVjdERvZXNOb3RFeGlzdCBhcyBlcnJvcjoKICAgICAgICBwYXNzCgogICAgaWYgbm90IHByb2plY3RFeGlzdDoKICAgICAgICBwYXRoID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJyArIG93bmVyICsgJy8nICsgcHJvamVjdCArICcvaG9va3MnCiAgICAgICAgaGVhZGVycyA9IHsnQXV0aG9yaXphdGlvbic6ICd0b2tlbiAnICsgYWNjZXNzX3Rva2VufQogICAgICAgIGRhdGEgPSB7CiAgICAgICAgICAgICJuYW1lIjogIndlYiIsCiAgICAgICAgICAgICJhY3RpdmUiOiBUcnVlLAogICAgICAgICAgICAiZXZlbnRzIjogWwogICAgICAgICAgICAgICAgInB1c2giCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJjb25maWciOiB7CiAgICAgICAgICAgICAgICAidXJsIjogZW52aXJvbi5nZXQoJ0JBQ0tFTkRfQkFTRV9VUkwnKSArICcvdHJhY2svd2ViaG9vay8nLAogICAgICAgICAgICAgICAgImNvbnRlbnRfdHlwZSI6ICJqc29uIiwKICAgICAgICAgICAgICAgICJzZWNyZXQiOiBlbnZpcm9uLmdldCgnV0VCSE9PS19TRUNSRVQnKSwKICAgICAgICAgICAgICAgICJpbnNlY3VyZV9zc2wiOiBlbnZpcm9uLmdldCgnSU5TRUNVUkVfU1NMJykKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBwcmludChwYXRoKQogICAgICAgIHIgPSByZXF1ZXN0cy5wb3N0KHBhdGgsIGhlYWRlcnM9aGVhZGVycywganNvbj1kYXRhKQogICAgICAgIGpzb24gPSByLmpzb24oKQogICAgICAgIGlmICdpZCcgaW4ganNvbjoKICAgICAgICAgICAgSG9va3Mub2JqZWN0cy5jcmVhdGUoaWQ9anNvblsnaWQnXSwgcHJvamVjdD1wcm9qZWN0KQogICAgICAgICAgICBwcmludCgnQ3JlYXRlZCcsIGpzb24pCjx8ZmltX3N1ZmZpeHw+CiAgICBwYXRoID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJyArIGxvZ2luICsgJy8nICsgcHJvamVjdCArICcvY29tbWl0cycKICAgIHIgPSByZXF1ZXN0cy5nZXQoCiAgICAgICAgcGF0aCwgcGFyYW1zPXsnc2luY2UnOiBnZXRfbGFzdF9tb250aCgpfSwgaGVhZGVycz1oZWFkZXJzKQoKPHxmaW1fZW5kfD4="]
["8d61e96830c82084e5138e6dc304e7b4e3c28731-4","8d61e96830c82084e5138e6dc304e7b4e3c28731","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiIiIlNjcmlwdCB0byBoZWxwIGNvbXBhcmUgcmVsZWFzZXMgb24gUHlQSS4KCkl0IGNyZWF0ZXMgYSBnaXQgcmVwbyBhbmQgY3JlYXRlcyBhIGNvbW1pdCBmb3IgZWFjaCByZWxlYXNlIG9uIFB5UEkuIEl0CnJlcXVpcmVzIHRoZXNlIHBhY2thZ2VzIHRvIGJlIGluc3RhbGxlZDoKR2l0UHl0aG9uCnJlcXVlc3RzCiIiIgoKaW1wb3J0IHRhcmZpbGUKaW1wb3J0IGlvCmltcG9ydCBvcwppbXBvcnQgb3MucGF0aAppbXBvcnQgc2h1dGlsCmltcG9ydCByZXF1ZXN0cwppbXBvcnQgZ2l0CgoKX3B5cGlfcmVzcG9uc2UgPSBOb25lCgpkZWYgX2dldF9weXBpX3Jlc3BvbnNlKCk6CiAgICBnbG9iYWwgX3B5cGlfcmVzcG9uc2UKICAgIGlmIF9weXBpX3Jlc3BvbnNlIGlzIE5vbmU6CiAgICAgICAgcmVzcCA9IHJlcXVlc3RzLmdldCgiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9FVkUtU1JQL2pzb24iKQogICAgICAgIF9weXBpX3Jlc3BvbnNlID0gcmVzcC5qc29uKCkKICAgIHJldHVybiBfcHlwaV9yZXNwb25zZQoKCmRlZiBnZXRfZXZlc3JwX3VybCh2ZXJzaW9uKToKICAgIHJlc3AgPSBfZ2V0X3B5cGlfcmVzcG9uc2UoKQogICAgcmVsZWFzZV9pbmZvID0gcmVzcFt1J3JlbGVhc2VzJ11bdmVyc2lvbl0KICAgIGZvciByZWxlYXNlIGluIHJlbGVhc2VfaW5mbzoKICAgICAgICBpZiByZWxlYXNlW3UncGFja2FnZXR5cGUnXSA9PSAnc2Rpc3QnOgogICAgICAgICAgICByZXR1cm4gcmVsZWFzZVt1J3VybCddCiAgICByZXR1cm4gcmVsZWFzZV9pbmZvWzBdW3UndXJsJ10KCgpkZWYgZ2V0X2V2ZXNycF92ZXJzaW9ucygpOgogICAgcmVzcCA9IF9nZXRfcHlwaV9yZXNwb25zZSgpCiAgICB2ZXJzaW9ucyA9IHJlc3BbdSdyZWxlYXNlcyddLmtleXMoKQogICAgdmVyc2lvbnMgPSBsaXN0KHZlcnNpb25zKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICB2ZXJzaW9ucy5zb3J0KGtleT1sYW1iZGEgdjogbWFwKGludCwgdi5zcGxpdCgnLicpKSkKICAgIHJldHVybiB2ZXJzaW9ucwoKCjx8ZmltX2VuZHw+"]
["7b794122ec2b1aa99afed4813ab335afa5b15c1c-3","7b794122ec2b1aa99afed4813ab335afa5b15c1c","PHxmaW1fcHJlZml4fD4KIiIiSGVscGVyIG1vZHVsZSBmb3IgZXhlY3V0aW9uIGFuZCBvdGhlciBjb21tb24gZnVuY3Rpb25hbGl0eSIiIgoKaW1wb3J0IHN5cwppbXBvcnQgdHJhY2ViYWNrCmZyb20gdGltZWl0IGltcG9ydCBkZWZhdWx0X3RpbWVyIGFzIHRpbWVyCgpkZWYgX215X2V4Y2VwdGlvbl9oYW5kbGVyKGV4X3R5cGUsIHZhbHVlLCB0cmFjZV9iYWNrKTogIyBwcmFnbWE6IG5vIGNvdmVyCiAgICAiIiJFeGNlcHRpb24gaGFuZGxlciB0aGF0IG91dHB1dHMgbWluaW1hbCBpbmZvcm1hdGlvbiBmb3IgYmFzaWMgRXhjZXB0aW9ucyIiIgogICAgcHJpbnQodmFsdWUpCiAgICBpZiBzdHIoZXhfdHlwZSkgIT0gIjxjbGFzcyAnRXhjZXB0aW9uJz4iOgogICAgICAgIHRyYWNlYmFjay5wcmludF90Yih0cmFjZV9iYWNrKQoKZGVmIHVzZV9jdXN0b21fZXhjZXB0aW9uX2hhbmRsZXIoKTogIyBwcmFnbWE6IG5vIGNvdmVyCiAgICAiIiJSZWRlZmluZSB0aGUgc3lzdGVtJ3MgZXhjZXB0aW9uIGhhbmRsZXIiIiIKICAgIHN5cy5leGNlcHRob29rID0gX215X2V4Y2VwdGlvbl9oYW5kbGVyCgpkZWYgbWFpbihmdW4sIHRyYW5zLCAqcHJvbXB0cyk6ICMgcHJhZ21hOiBubyBjb3ZlcgogICAgIiIiTWFpbiBtZXRob2Qgd2hlbiBhIG1vZHVsZSBvbmx5IGhhcyBvbmUgZnVuY3Rpb24iIiIKICAgIHVzZV9jdXN0b21fZXhjZXB0aW9uX2hhbmRsZXIoKQogICAgaWYgbGVuKHN5cy5hcmd2KSA+IDE6CiAgICAgICAgYXJncyA9IFt0cmFucyhhcmcpIGZvciBhcmcgaW4gc3lzLmFyZ3ZbMTpdXQogICAgZWxzZToKICAgICAgICBhcmdzID0gW3RyYW5zKGlucHV0KHAgKyAiOlxuIikpIGZvciBwIGluIHByb21wdHNdCiAgICB0cnk6CiAgICAgICAgcHJpbnQoZnVuKCphcmdzKSkKICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvcjoKICAgICAgICBwcmludCgiTWFrZSBzdXJlIHlvdSBwYXNzIGluIHZhbGlkIGFyZ3VtZW50cyIpCgpkZWYgY29tcGFyZV9zdWJmcyhmdW5zLCBhdHRlbXB0cywgYXJncyk6ICMgcHJhZ21hOiBubyBjb3ZlcgogICAgIiIiQ29tcGFyZXMgdGhlIGV4ZWN1dGlvbiB0aW1lcyBvZiBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUiIiIKICAgIHNwYWNlcyA9IG1heChbbGVuKHN1YmZfbmFtZSkgZm9yIHN1YmZfbmFtZSBpbiBmdW5zLmtleXMoKV0pCiAgICB0aW1lcyA9IHtzdWJmX25hbWU6IDAgZm9yIHN1YmZfbmFtZSBpbiBmdW5zLmtleXMoKX0KICAgIGZvciBfIGluIHJhbmdlKGF0dGVtcHRzKToKICAgICAgICBmb3Igc3ViZl9uYW1lLCBzdWJmIGluIGZ1bnMuaXRlbXMoKToKICAgICAgICAgICAgdGltZSA9IC10aW1lcigpCiAgICAgICAgICAgIHN1YmYoKmFyZ3MpCiAgICAgICAgICAgIHRpbWUgKz0gdGltZXIoKQogICAgICAgICAgICB0aW1lc1tzdWJmX25hbWVdICs9IHRpbWUgLyBhdHRlbXB0cwogICAgcmV0dXJuICIiLmpvaW4oW2Yie3N1YmZfbmFtZTogPHtzcGFjZXN9fSBhdmVyYWdlOiB7dDouMTVmfVxuIlwKICAgICAgICBmb3Igc3ViZl9uYW1lLCB0IGluIHRpbWVzLml0ZW1zKCldKQoKZGVmIG1haW5fc3ViZihmdW5zLCB0cmFucywgY2hlY2ssICpwcm9tcHRzKTogIyBwcmFnbWE6IG5vIGNvdmVyCiAgICAiIiJNYWluIG1ldGhvZCB3aGVuIHN1YmZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQiIiIKICAgIHVzZV9jdXN0b21fZXhjZXB0aW9uX2hhbmRsZXIoKQogICAgaWYgbGVuKHN5cy5hcmd2KSA+IDE6CiAgICAgICAgc3ViZiA9IHN5cy5hcmd2WzFdCiAgICBlbHNlOgogICAgICAgIHByaW50KCJXaGF0IHN1YmZ1bmN0aW9uIHdvdWxkIHlvdSBsaWtlIHRvIGRvPyIpCiAgICAgICAgc3ViZiA9IGlucHV0KCJPcHRpb25zOiAiICsgc3RyKGZ1bnMua2V5cygpKSArICJcbiIpCiAgICBpZiBzdWJmIGluIGZ1bnMua2V5cygpOgogICAgICAgIGlmIGxlbihzeXMuYXJndikgPiAyOgogICAgICAgICAgICBhcmdzID0gW3RyYW5zKGFyZykgZm9yIGFyZyBpbiBzeXMuYXJndlsyOl1dCiAgICAgICAgZWxzZToKICAgICAgICAgICAgYXJncyA9IFt0cmFucyhpbnB1dChwICsgIjpcbiIpKSBmb3IgcCBpbiBwcm9tcHRzXQogICAgICAgIGlmIGFsbChbY2hlY2soYXJnKSBmb3IgYXJnIGluIGFyZ3NdKToKICAgICAgICAgICAgaWYgc3ViZiA9PSAiY29tcGFyZSI6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIHByaW50KGZ1bnMucG9wKCJjb21wYXJlIikoZnVucywgaW50KGlucHV0KCJBdHRlbXB0czpcbiIpKSwgYXJncykpCjx8ZmltX2VuZHw+"]
["f5812ccd3034bfd55d0972c21609b5b33cc400f1-2","f5812ccd3034bfd55d0972c21609b5b33cc400f1","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgoiIiJVc2UgVE1hbGlnbiBmb3IgbXVsdGlwbGUgc3RydWN0dXJlIGFsaWdubWVudC4KClByb2NlZHVyZToKCjEuIFJ1biBhbGwtdnMtYWxsIHBhaXJ3aXNlIGFsaWdubWVudHMgdy8gVE1hbGlnbjsga2VlcCB0aGUgYWxpZ25tZW50cyBhbmQgYWxzbwogICB0aGUgVE0tc2NvcmUgKGEgbWV0cmljIG9mIHN0cnVjdHVyYWwgc2ltaWxhcml0eS9hbGlnbmFiaWxpdHkpLgoyLiBCdWlsZCBhIGdyYXBoIG9mIHN0cnVjdHVyZSBzaW1pbGFyaXRpZXMgYmFzZWQgb24gVE0tc2NvcmVzLiBEZXRlcm1pbmUgdGhlCiAgIG1pbmltdW0gc3Bhbm5pbmcgdHJlZSAoTVNUKSBmb3IgdGhlIGdyYXBoLgozLiBUYWtlIHRoZSBwYWlyd2lzZSBhbGlnbm1lbnRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGVkZ2VzIChjb25uZWN0ZWQgbm9kZXMpIG9mCiAgIHRoZSBNU1QsIGFuZCB1c2UgdGhlbSBhcyBzZWVkcyBpbiBNQUZGVCAoLS1sb2NhbHBhaXIpLgo0LiBSZW1vdmUgZHVwbGljYXRlZCBzZXF1ZW5jZXMgYW5kIGFsbC1nYXAgY29sdW1ucyBmcm9tIHRoZSByZXN1bHRpbmcgYWxpZ25tZW50LgoKIiIiCgppbXBvcnQgYXJncGFyc2UKaW1wb3J0IHN5cwppbXBvcnQgbG9nZ2luZwoKZnJvbSBCaW8gaW1wb3J0IFNlcUlPCgpmcm9tIGZhbW1lcmxpYi50bWFsaWduIGltcG9ydCBhbGlnbl9zdHJ1Y3RzCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIEFQID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoX19kb2NfXykKICAgIEFQLmFkZF9hcmd1bWVudCgncGRiZm5hbWVzJywgbmFyZ3M9JysnLAogICAgICAgICAgICBoZWxwPSJQREIgZmlsZSBuYW1lcyBvZiB0aGUgc3RydWN0dXJlcyB0byBhbGlnbi4iKQogICAgQVAuYWRkX2FyZ3VtZW50KCctcycsICctLXNlZWQnLCBhY3Rpb249J2FwcGVuZCcsIGRlZmF1bHQ9W10sCiAgICAgICAgICAgIGhlbHA9IkFsaWduZWQgRkFTVEEgc2VxdWVuY2VzIHRvIGluY2x1ZGUgaW4gdGhlIG91dHB1dCBhbGlnbm1lbnQuIikKICAgIEFQLmFkZF9hcmd1bWVudCgnLW8nLCAnLS1vdXRwdXQnLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9c3lzLnN0ZG91dCwKICAgICAgICAgICAgICAgICAgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgndysnKSwKICAgICAgICAgICAgICAgICAgaGVscD0iRmlsZW5hbWUgZm9yIHRoZSBvdXRwdXQgRkFTVEEgYWxpZ25tZW50LiIpCjx8ZmltX2VuZHw+"]
["7bc8119f17ad9a908c3afb703c0131b7310eb99c-1","7bc8119f17ad9a908c3afb703c0131b7310eb99c","PHxmaW1fcHJlZml4fD4KJycnClB5dGhvbjMgaW1wbGVtZW50YXRpb24gb2Ygb2RkYmFsbAoKQGF1dGhvcjoKVGFvIFl1IChnbG9vb3J5eXRAZ21haWwuY29tKQoKJycnCgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG5ldHdvcmt4IGFzIG54CmZyb20gbG9hZERhdGEgaW1wb3J0IGxvYWRfZGF0YSwgZ2V0X2ZlYXR1cmUKZnJvbSBvZGRiYWxsIGltcG9ydCBzdGFyX29yX2NsaXF1ZSwgaGVhdnlfdmljaW5pdHksIGRvbWluYW50X2VkZ2UsIHN0YXJfb3JfY2xpcXVlX3dpdGhMT0YsIGhlYXZ5X3ZpY2luaXR5X3dpdGhMT0YsIGRvbWluYW50X2VkZ2Vfd2l0aExPRgppbXBvcnQgYXJncGFyc2UKaW1wb3J0IHBpY2tsZQoKCmRlZiBtYWluKCk6CiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nUnVuIE9kZGJhbGwuJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0taW5wdXQnLCB0eXBlPXN0ciwgcmVxdWlyZWQ9VHJ1ZSwgaGVscD0nUGF0aCBvZiBpbnB1dCBmaWxlLicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW91dHB1dCcsIHR5cGU9c3RyLCByZXF1aXJlZD1UcnVlLCBoZWxwPSdQYXRoIG9mIG91dHB1dCBmaWxlLicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWxvZicsIHR5cGU9aW50LCBkZWZhdWx0PTAsIGhlbHA9J1VzZSBMT0YuIDA6IG5vdCB1c2UuIDE6IHVzZS4gRGVmYXVsdCB2YWx1ZSBpcyAwLicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWFub21hbHlfdHlwZScsIHR5cGU9aW50LCByZXF1aXJlZD1UcnVlLCBoZWxwPSdBbm9tYWx5IFR5cGUuIDE6c3Rhcl9vcl9jbGlxdWUuIDI6aGVhdnlfdmljaW5pdHkuIDM6ZG9taW5hbnRfZWRnZS4nKQogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCiAgICAjIElucHV0IGEgd2VpZ2h0ZWQgdW5kaXJlY3RlZCBncmFwaCB3aGljaCBmb3JtYXQgaXMgJ2EgYiB3ZWlnaHQnCiAgICBpbnB1dF9wYXRoID0gYXJncy5pbnB1dAogICAgb3V0cHV0X3BhdGggPSBhcmdzLm91dHB1dAogICAgRyA9IGxvYWRfZGF0YShpbnB1dF9wYXRoKQogICAgZmVhdHVyZURpY3QgPSBnZXRfZmVhdHVyZShHKQoKICAgICMgc2F2ZSBmZWF0dXJlRGljdCB0byBmaWxlCiAgICB3aXRoIG9wZW4oJ2ZlYXR1cmVfZGljdC5waWNrbGUnLCAnd2InKSBhcyBoYW5kbGU6CiAgICAgICAgcGlja2xlLmR1bXAoZmVhdHVyZURpY3QsIGhhbmRsZSwgcHJvdG9jb2w9cGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpCgogICAgaWYgYXJncy5sb2YgPT0gMDoKICAgICAgICBpZiBhcmdzLmFub21hbHlfdHlwZSA9PSAxOgogICAgICAgICAgICBzdGFyX29yX2NsaXF1ZV9zY29yZSA9IHN0YXJfb3JfY2xpcXVlKGZlYXR1cmVEaWN0KQogICAgICAgICAgICBzdGFyX29yX2NsaXF1ZV9hcnJheSA9IFtdCiAgICAgICAgICAgIGZvciBrZXkgaW4gc3Rhcl9vcl9jbGlxdWVfc2NvcmUua2V5cygpOgogICAgICAgICAgICAgICAgc3Rhcl9vcl9jbGlxdWVfYXJyYXkuYXBwZW5kKG5wLmFycmF5KFtrZXksIHN0YXJfb3JfY2xpcXVlX3Njb3JlW2tleV1dKSkKICAgICAgICAgICAgc3Rhcl9vcl9jbGlxdWVfYXJyYXkgPSBucC5hcnJheShzdGFyX29yX2NsaXF1ZV9hcnJheSkKICAgICAgICAgICAgc3Rhcl9vcl9jbGlxdWVfYXJyYXkgPSBzdGFyX29yX2NsaXF1ZV9hcnJheVtzdGFyX29yX2NsaXF1ZV9hcnJheVs6LCAxXS5hcmdzb3J0KClbOjotMV1dICAjIFNvcnQgYnkgc2NvcmUgZnJvbSBsYXJnZSB0byBzbWFsbAogICAgICAgICAgICB3aXRoIG9wZW4ob3V0cHV0X3BhdGgsICd3JykgYXMgZjoKICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gc3Rhcl9vcl9jbGlxdWVfYXJyYXk6CiAgICAgICAgICAgICAgICAgICAgZi53cml0ZShzdHIoaW50KGtleVswXSkpICsgJyAnICsgc3RyKGtleVsxXSkpCjx8ZmltX2hvbGV8PgogICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICBlbGlmIGFyZ3MuYW5vbWFseV90eXBlID09IDI6CiAgICAgICAgICAgIGhlYXZ5X3ZpY2luaXR5X3Njb3JlID0gaGVhdnlfdmljaW5pdHkoZmVhdHVyZURpY3QpCiAgICAgICAgICAgIGhlYXZ5X3ZpY2luaXR5X2FycmF5ID0gW10KICAgICAgICAgICAgZm9yIGtleSBpbiBoZWF2eV92aWNpbml0eV9zY29yZS5rZXlzKCk6CiAgICAgICAgICAgICAgICBoZWF2eV92aWNpbml0eV9hcnJheS5hcHBlbmQobnAuYXJyYXkoW2tleSwgaGVhdnlfdmljaW5pdHlfc2NvcmVba2V5XV0pKQogICAgICAgICAgICBoZWF2eV92aWNpbml0eV9hcnJheSA9IG5wLmFycmF5KGhlYXZ5X3ZpY2luaXR5X2FycmF5KQogICAgICAgICAgICBoZWF2eV92aWNpbml0eV9hcnJheSA9IGhlYXZ5X3ZpY2luaXR5X2FycmF5W2hlYXZ5X3ZpY2luaXR5X2FycmF5WzosIDFdLmFyZ3NvcnQoKVs6Oi0xXV0gICMgU29ydCBieSBzY29yZSBmcm9tIGxhcmdlIHRvIHNtYWxsCiAgICAgICAgICAgIHdpdGggb3BlbihvdXRwdXRfcGF0aCwgJ3cnKSBhcyBmOgogICAgICAgICAgICAgICAgZm9yIGtleSBpbiBoZWF2eV92aWNpbml0eV9hcnJheToKICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHN0cihpbnQoa2V5WzBdKSkgKyAnICcgKyBzdHIoa2V5WzFdKSkKICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCdcbicpCiAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgIGVsaWYgYXJncy5hbm9tYWx5X3R5cGUgPT0gMzoKICAgICAgICAgICAgZG9taW5hbnRfZWRnZV9zY29yZSA9IGRvbWluYW50X2VkZ2UoZmVhdHVyZURpY3QpCiAgICAgICAgICAgIGRvbWluYW50X2VkZ2VfYXJyYXkgPSBbXQogICAgICAgICAgICBmb3Iga2V5IGluIGRvbWluYW50X2VkZ2Vfc2NvcmUua2V5cygpOgogICAgICAgICAgICAgICAgZG9taW5hbnRfZWRnZV9hcnJheS5hcHBlbmQobnAuYXJyYXkoW2tleSwgZG9taW5hbnRfZWRnZV9zY29yZVtrZXldXSkpCiAgICAgICAgICAgIGRvbWluYW50X2VkZ2VfYXJyYXkgPSBucC5hcnJheShkb21pbmFudF9lZGdlX2FycmF5KQogICAgICAgICAgICBkb21pbmFudF9lZGdlX2FycmF5ID0gZG9taW5hbnRfZWRnZV9hcnJheVtkb21pbmFudF9lZGdlX2FycmF5WzosIDFdLmFyZ3NvcnQoKVs6Oi0xXV0gICMgU29ydCBieSBzY29yZSBmcm9tIGxhcmdlIHRvIHNtYWxsCiAgICAgICAgICAgIHdpdGggb3BlbihvdXRwdXRfcGF0aCwgJ3cnKSBhcyBmOgogICAgICAgICAgICAgICAgZm9yIGtleSBpbiBkb21pbmFudF9lZGdlX2FycmF5OgogICAgICAgICAgICAgICAgICAgIGYud3JpdGUoc3RyKGludChrZXlbMF0pKSArICcgJyArIHN0cihrZXlbMV0pKQogICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJ1xuJykKICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQoJ3BhcmFtZXRlciBlcnJvciEnKQogICAgZWxpZiBhcmdzLmxvZiA9PSAxOgogICAgICAgIGlmIGFyZ3MuYW5vbWFseV90eXBlID09IDE6CiAgICAgICAgICAgIHN0YXJfb3JfY2xpcXVlX3dpdGhMT0Zfc2NvcmUgPSBzdGFyX29yX2NsaXF1ZV93aXRoTE9GKGZlYXR1cmVEaWN0KQogICAgICAgICAgICBzdGFyX29yX2NsaXF1ZV93aXRoTE9GX2FycmF5ID0gW10KICAgICAgICAgICAgZm9yIGtleSBpbiBzdGFyX29yX2NsaXF1ZV93aXRoTE9GX3Njb3JlLmtleXMoKToKICAgICAgICAgICAgICAgIHN0YXJfb3JfY2xpcXVlX3dpdGhMT0ZfYXJyYXkuYXBwZW5kKG5wLmFycmF5KFtrZXksIHN0YXJfb3JfY2xpcXVlX3dpdGhMT0Zfc2NvcmVba2V5XV0pKQogICAgICAgICAgICBzdGFyX29yX2NsaXF1ZV93aXRoTE9GX2FycmF5ID0gbnAuYXJyYXkoc3Rhcl9vcl9jbGlxdWVfd2l0aExPRl9hcnJheSkKICAgICAgICAgICAgc3Rhcl9vcl9jbGlxdWVfd2l0aExPRl9hcnJheSA9IHN0YXJfb3JfY2xpcXVlX3dpdGhMT0ZfYXJyYXlbc3Rhcl9vcl9jbGlxdWVfd2l0aExPRl9hcnJheVs6LCAxXS5hcmdzb3J0KClbOjotMV1dICAjIFNvcnQgYnkgc2NvcmUgZnJvbSBsYXJnZSB0byBzbWFsbAogICAgICAgICAgICB3aXRoIG9wZW4ob3V0cHV0X3BhdGgsICd3JykgYXMgZjoKICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gc3Rhcl9vcl9jbGlxdWVfd2l0aExPRl9hcnJheToKICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHN0cihpbnQoa2V5WzBdKSkgKyAnICcgKyBzdHIoa2V5WzFdKSkKICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCdcbicpCiAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgIGVsaWYgYXJncy5hbm9tYWx5X3R5cGUgPT0gMjoKICAgICAgICAgICAgaGVhdnlfdmljaW5pdHlfd2l0aExPRl9zY29yZSA9IGhlYXZ5X3ZpY2luaXR5X3dpdGhMT0YoZmVhdHVyZURpY3QpCiAgICAgICAgICAgIGhlYXZ5X3ZpY2luaXR5X3dpdGhMT0ZfYXJyYXkgPSBbXQogICAgICAgICAgICBmb3Iga2V5IGluIGhlYXZ5X3ZpY2luaXR5X3dpdGhMT0Zfc2NvcmUua2V5cygpOgogICAgICAgICAgICAgICAgaGVhdnlfdmljaW5pdHlfd2l0aExPRl9hcnJheS5hcHBlbmQobnAuYXJyYXkoW2tleSwgaGVhdnlfdmljaW5pdHlfd2l0aExPRl9zY29yZVtrZXldXSkpCiAgICAgICAgICAgIGhlYXZ5X3ZpY2luaXR5X3dpdGhMT0ZfYXJyYXkgPSBucC5hcnJheShoZWF2eV92aWNpbml0eV93aXRoTE9GX2FycmF5KQogICAgICAgICAgICBoZWF2eV92aWNpbml0eV93aXRoTE9GX2FycmF5ID0gaGVhdnlfdmljaW5pdHlfd2l0aExPRl9hcnJheVtoZWF2eV92aWNpbml0eV93aXRoTE9GX2FycmF5WzosIDFdLmFyZ3NvcnQoKVs6Oi0xXV0gICMgU29ydCBieSBzY29yZSBmcm9tIGxhcmdlIHRvIHNtYWxsCiAgICAgICAgICAgIHdpdGggb3BlbihvdXRwdXRfcGF0aCwgJ3cnKSBhcyBmOgogICAgICAgICAgICAgICAgZm9yIGtleSBpbiBoZWF2eV92aWNpbml0eV93aXRoTE9GX2FycmF5OgogICAgICAgICAgICAgICAgICAgIGYud3JpdGUoc3RyKGludChrZXlbMF0pKSArICcgJyArIHN0cihrZXlbMV0pKQogICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJ1xuJykKICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgZWxpZiBhcmdzLmFub21hbHlfdHlwZSA9PSAzOgogICAgICAgICAgICBkb21pbmFudF9lZGdlX3dpdGhMT0Zfc2NvcmUgPSBkb21pbmFudF9lZGdlX3dpdGhMT0YoZmVhdHVyZURpY3QpCiAgICAgICAgICAgIGRvbWluYW50X2VkZ2Vfd2l0aExPRl9hcnJheSA9IFtdCiAgICAgICAgICAgIGZvciBrZXkgaW4gZG9taW5hbnRfZWRnZV93aXRoTE9GX3Njb3JlLmtleXMoKToKICAgICAgICAgICAgICAgIGRvbWluYW50X2VkZ2Vfd2l0aExPRl9hcnJheS5hcHBlbmQobnAuYXJyYXkoW2tleSwgZG9taW5hbnRfZWRnZV93aXRoTE9GX3Njb3JlW2tleV1dKSkKICAgICAgICAgICAgZG9taW5hbnRfZWRnZV93aXRoTE9GX2FycmF5ID0gbnAuYXJyYXkoZG9taW5hbnRfZWRnZV93aXRoTE9GX2FycmF5KQogICAgICAgICAgICBkb21pbmFudF9lZGdlX3dpdGhMT0ZfYXJyYXkgPSBkb21pbmFudF9lZGdlX3dpdGhMT0ZfYXJyYXlbZG9taW5hbnRfZWRnZV93aXRoTE9GX2FycmF5WzosIDFdLmFyZ3NvcnQoKVs6Oi0xXV0gICMgU29ydCBieSBzY29yZSBmcm9tIGxhcmdlIHRvIHNtYWxsCiAgICAgICAgICAgIHdpdGggb3BlbihvdXRwdXRfcGF0aCwgJ3cnKSBhcyBmOgogICAgICAgICAgICAgICAgZm9yIGtleSBpbiBkb21pbmFudF9lZGdlX3dpdGhMT0ZfYXJyYXk6CiAgICAgICAgICAgICAgICAgICAgZi53cml0ZShzdHIoaW50KGtleVswXSkpICsgJyAnICsgc3RyKGtleVsxXSkpCiAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnXG4nKQogICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCgncGFyYW1ldGVyIGVycm9yIScpCiAgICBlbHNlOgogICAgICAgIHByaW50KCdwYXJhbWV0ZXIgZXJyb3IhJykKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnXG4nKQo8fGZpbV9lbmR8Pg=="]
["a93934abd0b71bf2f5fe7ced8211c03df34ad5ca-1","a93934abd0b71bf2f5fe7ced8211c03df34ad5ca","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiIiIiBnZW5lcmF0ZWQgc291cmNlIGZvciBtb2R1bGUgSW1tdXRhYmxlU2VudGVuY2VGb3JtTW9kZWwgIiIiCiMgcGFja2FnZTogb3JnLmdncC5iYXNlLnV0aWwuZ2RsLm1vZGVsCmltcG9ydCBvcmcuZ2dwLmJhc2UudXRpbC5nZGwuZ3JhbW1hci5HZGwKCmltcG9ydCBvcmcuZ2dwLmJhc2UudXRpbC5nZGwuZ3JhbW1hci5HZGxSdWxlCgppbXBvcnQgb3JnLmdncC5iYXNlLnV0aWwuZ2RsLmdyYW1tYXIuR2RsU2VudGVuY2UKCmltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5iYXNlLlByZWNvbmRpdGlvbnMKCmltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZUxpc3QKCmltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZU11bHRpbWFwCgppbXBvcnQgY29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFibGVTZXQKCmltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZVNldE11bHRpbWFwCgpjbGFzcyBJbW11dGFibGVTZW50ZW5jZUZvcm1Nb2RlbChTZW50ZW5jZUZvcm1Nb2RlbCk6CiAgICAiIiIgZ2VuZXJhdGVkIHNvdXJjZSBmb3IgY2xhc3MgSW1tdXRhYmxlU2VudGVuY2VGb3JtTW9kZWwgIiIiCiAgICBnYW1lRGVzY3JpcHRpb24gPSBJbW11dGFibGVMaXN0KCkKICAgIHNlbnRlbmNlRm9ybXMgPSBJbW11dGFibGVTZXQoKQogICAgY29uc3RhbnRTZW50ZW5jZUZvcm1zID0gSW1tdXRhYmxlU2V0KCkKICAgIGluZGVwZW5kZW50U2VudGVuY2VGb3JtcyA9IEltbXV0YWJsZVNldCgpCiAgICBkZXBlbmRlbmN5R3JhcGggPSBJbW11dGFibGVTZXRNdWx0aW1hcCgpCiAgICBydWxlc0J5Rm9ybSA9IEltbXV0YWJsZVNldE11bHRpbWFwKCkKICAgIHRydWVTZW50ZW5jZXNCeUZvcm0gPSBJbW11dGFibGVTZXRNdWx0aW1hcCgpCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGdhbWVEZXNjcmlwdGlvbiwgc2VudGVuY2VGb3JtcywgY29uc3RhbnRTZW50ZW5jZUZvcm1zLCBpbmRlcGVuZGVudFNlbnRlbmNlRm9ybXMsIGRlcGVuZGVuY3lHcmFwaCwgcnVsZXNCeUZvcm0sIHRydWVTZW50ZW5jZXNCeUZvcm0pOgogICAgICAgICIiIiBnZW5lcmF0ZWQgc291cmNlIGZvciBtZXRob2QgX19pbml0X18gIiIiCiAgICAgICAgc3VwZXIoSW1tdXRhYmxlU2VudGVuY2VGb3JtTW9kZWwsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICBQcmVjb25kaXRpb25zLmNoZWNrQXJndW1lbnQoc2VudGVuY2VGb3Jtcy5jb250YWluc0FsbChpbmRlcGVuZGVudFNlbnRlbmNlRm9ybXMpKQogICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tBcmd1bWVudChpbmRlcGVuZGVudFNlbnRlbmNlRm9ybXMuY29udGFpbnNBbGwoY29uc3RhbnRTZW50ZW5jZUZvcm1zKSkKICAgICAgICBQcmVjb25kaXRpb25zLmNoZWNrQXJndW1lbnQoc2VudGVuY2VGb3Jtcy5jb250YWluc0FsbChkZXBlbmRlbmN5R3JhcGgua2V5U2V0KCkpKQogICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tBcmd1bWVudChzZW50ZW5jZUZvcm1zLmNvbnRhaW5zQWxsKGRlcGVuZGVuY3lHcmFwaC52YWx1ZXMoKSkpCiAgICAgICAgUHJlY29uZGl0aW9ucy5jaGVja0FyZ3VtZW50KHNlbnRlbmNlRm9ybXMuY29udGFpbnNBbGwocnVsZXNCeUZvcm0ua2V5U2V0KCkpKQogICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tBcmd1bWVudChzZW50ZW5jZUZvcm1zLmNvbnRhaW5zQWxsKHRydWVTZW50ZW5jZXNCeUZvcm0ua2V5U2V0KCkpKQogICAgICAgIHNlbGYuZ2FtZURlc2NyaXB0aW9uID0gZ2FtZURlc2NyaXB0aW9uCiAgICAgICAgc2VsZi5zZW50ZW5jZUZvcm1zID0gc2VudGVuY2VGb3JtcwogICAgICAgIHNlbGYuY29uc3RhbnRTZW50ZW5jZUZvcm1zID0gY29uc3RhbnRTZW50ZW5jZUZvcm1zCiAgICAgICAgc2VsZi5pbmRlcGVuZGVudFNlbnRlbmNlRm9ybXMgPSBpbmRlcGVuZGVudFNlbnRlbmNlRm9ybXMKICAgICAgICBzZWxmLmRlcGVuZGVuY3lHcmFwaCA9IGRlcGVuZGVuY3lHcmFwaAogICAgICAgIHNlbGYucnVsZXNCeUZvcm0gPSBydWxlc0J5Rm9ybQogICAgICAgIHNlbGYudHJ1ZVNlbnRlbmNlc0J5Rm9ybSA9IHRydWVTZW50ZW5jZXNCeUZvcm0KCiAgICAjIAogICAgIyAJICogUmV0dXJucyBhbiBJbW11dGFibGVTZW50ZW5jZUZvcm1Nb2RlbCB3aXRoIHRoZSBzYW1lIGNvbnRlbnRzIGFzIHRoZQogICAgIyAJICogZ2l2ZW4gU2VudGVuY2VGb3JtTW9kZWwuCiAgICAjIAkgKgogICAgIyAJICogTWF5IG5vdCBhY3R1YWxseSBjcmVhdGUgYSBjb3B5IGlmIHRoZSBpbnB1dCBpcyBpbW11dGFibGUuCiAgICAjIAkgCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBjb3B5T2YoY2xzLCBvdGhlcik6CiAgICAgICAgIiIiIGdlbmVyYXRlZCBzb3VyY2UgZm9yIG1ldGhvZCBjb3B5T2YgIiIiCiAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgKEltbXV0YWJsZVNlbnRlbmNlRG9tYWluTW9kZWwsICkpOgogICAgICAgICAgICByZXR1cm4gY2xzLmNvcHlPZigob3RoZXIpLmdldEZvcm1Nb2RlbCgpKQogICAgICAgIGVsaWYgaXNpbnN0YW5jZShvdGhlciwgKEltbXV0YWJsZVNlbnRlbmNlRm9ybU1vZGVsLCApKToKICAgICAgICAgICAgcmV0dXJuIG90aGVyCiAgICAgICAgcnVsZXNCeUZvcm0gPSBJbW11dGFibGVTZXRNdWx0aW1hcC5idWlsZGVyKCkKICAgICAgICB0cnVlU2VudGVuY2VzQnlGb3JtID0gSW1tdXRhYmxlU2V0TXVsdGltYXAuYnVpbGRlcigpCiAgICAgICAgZm9yIGZvcm0gaW4gb3RoZXIuZ2V0U2VudGVuY2VGb3JtcygpOgogICAgICAgICAgICBydWxlc0J5Rm9ybS5wdXRBbGwoZm9ybSwgb3RoZXIuZ2V0UnVsZXMoZm9ybSkpCiAgICAgICAgICAgIHRydWVTZW50ZW5jZXNCeUZvcm0ucHV0QWxsKGZvcm0sIG90aGVyLmdldFNlbnRlbmNlc0xpc3RlZEFzVHJ1ZShmb3JtKSkKICAgICAgICByZXR1cm4gSW1tdXRhYmxlU2VudGVuY2VGb3JtTW9kZWwoSW1tdXRhYmxlTGlzdC5jb3B5T2Yob3RoZXIuZ2V0RGVzY3JpcHRpb24oKSksIEltbXV0YWJsZVNldC5jb3B5T2Yob3RoZXIuZ2V0U2VudGVuY2VGb3JtcygpKSwgSW1tdXRhYmxlU2V0LmNvcHlPZihvdGhlci5nZXRDb25zdGFudFNlbnRlbmNlRm9ybXMoKSksIEltbXV0YWJsZVNldC5jb3B5T2Yob3RoZXIuZ2V0SW5kZXBlbmRlbnRTZW50ZW5jZUZvcm1zKCkpLCBJbW11dGFibGVTZXRNdWx0aW1hcC5jb3B5T2Yob3RoZXIuZ2V0RGVwZW5kZW5jeUdyYXBoKCkpLCBydWxlc0J5Rm9ybS5idWlsZCgpLCB0cnVlU2VudGVuY2VzQnlGb3JtLmJ1aWxkKCkpCgogICAgIyBUT0RPOiBDb21lIHVwIHdpdGggYW4gaW1wbGVtZW50YXRpb24gdGhhdCBjYW4gc2F2ZSBtZW1vcnkgcmVsYXRpdmUgdG8gdGhpcwogICAgIyAoaS5lLiB3aGVyZSB3ZSBjYW4gcmV1c2UgU2VudGVuY2VGb3JtIHJlZmVyZW5jZXMpCiAgICBkZWYgZ2V0U2VudGVuY2VGb3JtKHNlbGYsIHNlbnRlbmNlKToKICAgICAgICAiIiIgZ2VuZXJhdGVkIHNvdXJjZSBmb3IgbWV0aG9kIGdldFNlbnRlbmNlRm9ybSAiIiIKICAgICAgICByZXR1cm4gU2ltcGxlU2VudGVuY2VGb3JtLmNyZWF0ZShzZW50ZW5jZSkKCiAgICBkZWYgZ2V0SW5kZXBlbmRlbnRTZW50ZW5jZUZvcm1zKHNlbGYpOgogICAgICAgICIiIiBnZW5lcmF0ZWQgc291cmNlIGZvciBtZXRob2QgZ2V0SW5kZXBlbmRlbnRTZW50ZW5jZUZvcm1zICIiIgogICAgICAgIHJldHVybiBzZWxmLmluZGVwZW5kZW50U2VudGVuY2VGb3JtcwoKICAgIGRlZiBnZXRDb25zdGFudFNlbnRlbmNlRm9ybXMoc2VsZik6CiAgICAgICAgIiIiIGdlbmVyYXRlZCBzb3VyY2UgZm9yIG1ldGhvZCBnZXRDb25zdGFudFNlbnRlbmNlRm9ybXMgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuY29uc3RhbnRTZW50ZW5jZUZvcm1zCgogICAgZGVmIGdldERlcGVuZGVuY3lHcmFwaChzZWxmKToKICAgICAgICAiIiIgZ2VuZXJhdGVkIHNvdXJjZSBmb3IgbWV0aG9kIGdldERlcGVuZGVuY3lHcmFwaCAiIiIKICAgICAgICByZXR1cm4gc2VsZi5kZXBlbmRlbmN5R3JhcGgKCiAgICBkZWYgZ2V0U2VudGVuY2VzTGlzdGVkQXNUcnVlKHNlbGYsIGZvcm0pOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIiIiIGdlbmVyYXRlZCBzb3VyY2UgZm9yIG1ldGhvZCBnZXRTZW50ZW5jZXNMaXN0ZWRBc1RydWUgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYudHJ1ZVNlbnRlbmNlc0J5Rm9ybS5nZXQoZm9ybSkKCjx8ZmltX2VuZHw+"]
["05553788d0d6ab9259351489b29ec46bd6b9ec47-5","05553788d0d6ab9259351489b29ec46bd6b9ec47","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgogICAgZGVmIGVkaXRfY29tbWVudChjb21tZW50X2lkLCBlZGl0KToKICAgICAgICBvcmlnaW5hbF9jb21tZW50ID0gREJBZGFwdGVyLmdldF9jb21tZW50KGNvbW1lbnRfaWQpCiAgICAgICAgbmV3X2NvbW1lbnQgPSBvcmlnaW5hbF9jb21tZW50ICsgZWRpdAogICAgICAgIERCQWRhcHRlci5zdG9yZV9jb21tZW50KG5ld19jb21tZW50KQoKICAgIGRlZiBwYXJzZV9oYXNodGFncyhoYXNodGFncyk6CiAgICAgICAgbGlzdF9vZl9oYXNodGFncyA9IFtdCiAgICAgICAgZm9yIHdvcmQgaW4gaGFzaHRhZ3Muc3BsaXQoKToKICAgICAgICAgICAgaWYgd29yZFswXSA9PSAiIyI6CiAgICAgICAgICAgICAgICBsaXN0X29mX2hhc2h0YWdzLmFwcGVuZCh3b3JkKQogICAgICAgIHJldHVybiBsaXN0X29mX2hhc2h0YWdzCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBjbGFzc2VzX3VuaW50ZWdyYXRlZC5hZGFwdGVyIGFzIERCQWRhcHRlcgoKY2xhc3MgRWRpdENvbW1lbnQ6Cgo8fGZpbV9lbmR8Pg=="]
["b54a00391b43cee6a9fa101161dec6e184a64da1-1","b54a00391b43cee6a9fa101161dec6e184a64da1","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uc2hvcnRjdXRzIGltcG9ydCByZW5kZXIsIGdldF9vYmplY3Rfb3JfNDA0CmZyb20gZGphbmdvLnZpZXdzLmdlbmVyaWMgaW1wb3J0IExpc3RWaWV3LCBEZXRhaWxWaWV3LCBDcmVhdGVWaWV3LCBVcGRhdGVWaWV3LCBEZWxldGVWaWV3CmZyb20gZGphbmdvLmNvbnRyaWIuYXV0aC5taXhpbnMgaW1wb3J0IExvZ2luUmVxdWlyZWRNaXhpbiwgVXNlclBhc3Nlc1Rlc3RNaXhpbgpmcm9tIC5tb2RlbHMgaW1wb3J0IEltYWdlLCBMaWtlcywgQ29tbWVudApmcm9tIGRqYW5nby5odHRwIGltcG9ydCBIdHRwUmVzcG9uc2VSZWRpcmVjdApmcm9tIGRqYW5nby51cmxzIGltcG9ydCByZXZlcnNlLCByZXZlcnNlX2xhenkKZnJvbSAuZm9ybXMgaW1wb3J0IENvbW1lbnRGb3JtCmZyb20gZGphbmdvLmNvbnRyaWIuYXV0aC5tb2RlbHMgaW1wb3J0IFVzZXIKCgpkZWYgaW5kZXgocmVxdWVzdCwgaWQpOgogICAgaW1hZ2VzID0gSW1hZ2Uub2JqZWN0cy5hbGwoKQogICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCAnaW5kZXguaHRtbCcsIHsnaW1hZ2VzJzogaW1hZ2VzfSkKCgpjbGFzcyBJbWFnZUxpc3RWaWV3KExpc3RWaWV3KToKICAgIG1vZGVsID0gSW1hZ2UKICAgIHRlbXBsYXRlX25hbWUgPSAnaW5kZXguaHRtbCcKICAgIGNvbnRleHRfb2JqZWN0X25hbWUgPSAnaW1hZ2VzJwoKCmNsYXNzIEltYWdlRGV0YWlsVmlldyhEZXRhaWxWaWV3KToKICAgIG1vZGVsID0gSW1hZ2UKCgpjbGFzcyBJbWFnZUNyZWF0ZVZpZXcoTG9naW5SZXF1aXJlZE1peGluLCBDcmVhdGVWaWV3KToKICAgIG1vZGVsID0gSW1hZ2UKICAgIGZpZWxkcyA9IFsnaW1hZ2UnLCAnaW1hZ2VfY2FwdGlvbiddCgogICAgZGVmIGZvcm1fdmFsaWQoc2VsZiwgZm9ybSk6CiAgICAgICAgZm9ybS5pbnN0YW5jZS5wb3N0X2NyZWF0b3IgPSBzZWxmLnJlcXVlc3QudXNlcgogICAgICAgIHJldHVybiBzdXBlcigpLmZvcm1fdmFsaWQoZm9ybSkKCgpjbGFzcyBDb21tZW50Q3JlYXRlVmlldyhMb2dpblJlcXVpcmVkTWl4aW4sIENyZWF0ZVZpZXcpOgogICAgbW9kZWwgPSBDb21tZW50CiAgICBmb3JtX2NsYXNzID0gQ29tbWVudEZvcm0KCiAgICBkZWYgZm9ybV92YWxpZChzZWxmLCBmb3JtKToKICAgICAgICBmb3JtLmluc3RhbmNlLmF1dGhvciA9IHNlbGYucmVxdWVzdC51c2VyCiAgICAgICAgZm9ybS5pbnN0YW5jZS5wb3N0ID0gSW1hZ2Uub2JqZWN0cy5nZXQocGs9c2VsZi5rd2FyZ3NbJ3BrJ10pCiAgICAgICAgcmV0dXJuIHN1cGVyKCkuZm9ybV92YWxpZChmb3JtKQoKCmNsYXNzIEltYWdlVXBkYXRlVmlldyhMb2dpblJlcXVpcmVkTWl4aW4sIFVzZXJQYXNzZXNUZXN0TWl4aW4sIFVwZGF0ZVZpZXcpOgogICAgbW9kZWwgPSBJbWFnZQogICAgZmllbGRzID0gWydpbWFnZScsICdpbWFnZV9jYXB0aW9uJ10KCiAgICBkZWYgZm9ybV92YWxpZChzZWxmLCBmb3JtKToKICAgICAgICBmb3JtLmluc3RhbmNlLnBvc3RfY3JlYXRvciA9IHNlbGYucmVxdWVzdC51c2VyCiAgICAgICAgcmV0dXJuIHN1cGVyKCkuZm9ybV92YWxpZChmb3JtKQoKICAgIGRlZiB0ZXN0X2Z1bmMoc2VsZik6CiAgICAgICAgaW1hZ2VfcG9zdCA9IHNlbGYuZ2V0X29iamVjdCgpCiAgICAgICAgaWYgc2VsZi5yZXF1ZXN0LnVzZXIgPT0gaW1hZ2VfcG9zdC5wb3N0X2NyZWF0b3I6Cjx8ZmltX2hvbGV8PgogICAgICAgIHJldHVybiBGYWxzZQoKCmNsYXNzIEltYWdlRGVsZXRlVmlldyhMb2dpblJlcXVpcmVkTWl4aW4sIFVzZXJQYXNzZXNUZXN0TWl4aW4sIERlbGV0ZVZpZXcpOgogICAgbW9kZWwgPSBJbWFnZQogICAgc3VjY2Vzc191cmwgPSByZXZlcnNlX2xhenkoJ2hvbWVwYWdlJykKCiAgICBkZWYgdGVzdF9mdW5jKHNlbGYpOgogICAgICAgIGltYWdlX3Bvc3QgPSBzZWxmLmdldF9vYmplY3QoKQogICAgICAgIGlmIHNlbGYucmVxdWVzdC51c2VyID09IGltYWdlX3Bvc3QucG9zdF9jcmVhdG9yOgogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIHJldHVybiBGYWxzZQoKCmRlZiBMaWtlVmlldyhyZXF1ZXN0LCBwayk6CiAgICB1c2VyID0gcmVxdWVzdC51c2VyCiAgICBpbWFnZV9wb3N0ID0gSW1hZ2Uub2JqZWN0cy5nZXQoaWQ9cGspCiAgICBjdXJyZW50X2xpa2VzID0gaW1hZ2VfcG9zdC5saWtlcwoKICAgIGxpa2VkID0gTGlrZXMub2JqZWN0cy5maWx0ZXIodXNlcj11c2VyLCBpbWFnZV9wb3N0PWltYWdlX3Bvc3QpCiAgICAjIHByaW50KGxpa2VkKQogICAgaWYgbm90IGxpa2VkOgogICAgICAgIExpa2VzLm9iamVjdHMuY3JlYXRlKHVzZXI9dXNlciwgaW1hZ2VfcG9zdD1pbWFnZV9wb3N0KQogICAgICAgIGN1cnJlbnRfbGlrZXMgPSBjdXJyZW50X2xpa2VzICsgMQoKICAgIGVsc2U6CiAgICAgICAgTGlrZXMub2JqZWN0cy5maWx0ZXIodXNlcj11c2VyLCBpbWFnZV9wb3N0PWltYWdlX3Bvc3QpLmRlbGV0ZSgpCiAgICAgICAgY3VycmVudF9saWtlcyA9IGN1cnJlbnRfbGlrZXMgLSAxCgogICAgaW1hZ2VfcG9zdC5saWtlcyA9IGN1cnJlbnRfbGlrZXMKICAgIGltYWdlX3Bvc3Quc2F2ZSgpCgogICAgcmV0dXJuIEh0dHBSZXNwb25zZVJlZGlyZWN0KHJldmVyc2UoJ2ltYWdlLWRldGFpbCcsIGFyZ3M9W3BrXSkpCgoKZGVmIHNlYXJjaChyZXF1ZXN0KToKICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgJ3NlYXJjaC5odG1sJykKCgpjbGFzcyBTZWFyY2hMaXN0VmlldyhMaXN0Vmlldyk6CiAgICBtb2RlbCA9IFVzZXIKICAgIHRlbXBsYXRlX25hbWUgPSAnc2VhcmNoLmh0bWwnCgogICAgZGVmIGdldF9jb250ZXh0X2RhdGEoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgIGNvbnRleHQgPSBzdXBlcigpLmdldF9jb250ZXh0X2RhdGEoKiprd2FyZ3MpCiAgICAgICAgcXVlcnkgPSBzZWxmLnJlcXVlc3QuR0VULmdldCgncScpCiAgICAgICAgY29udGV4dFsncXVlcnknXSA9IHNlbGYucmVxdWVzdC5HRVQuZ2V0KCdxJykKICAgICAgICBjb250ZXh0Wydwb3N0cyddID0gSW1hZ2Uub2JqZWN0cy5maWx0ZXIoaW1hZ2VfY2FwdGlvbl9faWNvbnRhaW5zPXF1ZXJ5KQogICAgICAgIHJldHVybiBjb250ZXh0CgogICAgZGVmIGdldF9xdWVyeXNldChzZWxmKToKICAgICAgICBxdWVyeSA9IHNlbGYucmVxdWVzdC5HRVQuZ2V0KCdxJykKICAgICAgICBvYmplY3RfbGlzdCA9IFVzZXIub2JqZWN0cy5maWx0ZXIodXNlcm5hbWVfX2ljb250YWlucz1xdWVyeSkKICAgICAgICByZXR1cm4gb2JqZWN0X2xpc3QKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgcmV0dXJuIFRydWUKPHxmaW1fZW5kfD4="]
["ddec295c99f7fbdbbe9673b855eb8c9eb0db4645-1","ddec295c99f7fbdbbe9673b855eb8c9eb0db4645","PHxmaW1fcHJlZml4fD4KZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgc2VyaWFsaXplcnMKZnJvbSBwcm9kdWN0cy5tb2RlbHMgaW1wb3J0IFByb2R1Y3RzCmZyb20gcHJvZHVjdHNJbWFnZS5tb2RlbHMgaW1wb3J0IFByb2R1Y3RJbWFnZQpmcm9tIHByb2R1Y3RzSW1hZ2Uuc2VyaWFsaXplcnMgaW1wb3J0IFByb2R1Y3ROZXN0ZWRJbWFnZVNlcmlhbGl6ZXIKZnJvbSBkcmZfd3JpdGFibGVfbmVzdGVkLnNlcmlhbGl6ZXJzIGltcG9ydCBXcml0YWJsZU5lc3RlZE1vZGVsU2VyaWFsaXplcgojIGZyb20gcHJvZHVjdHMubW9kZWxzIGltcG9ydCBQcm9kdWN0SW1hZ2UKZnJvbSByZXZpZXdwcm9kdWN0LnNlcmlhbGl6ZXJzIGltcG9ydCBQcm9kdWN0UmV2aWV3U2VyaWFsaXplcgoKCmNsYXNzIFByb2R1Y3RIb21lTmVzdGVkU2VyaWFsaXplcihzZXJpYWxpemVycy5Nb2RlbFNlcmlhbGl6ZXIpOgoKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgbW9kZWwgPSBQcm9kdWN0cwogICAgICAgIGZpZWxkcyA9ICgnaWQnLAogICAgICAgICdwcm9kdWN0bmFtZScsCiAgICAgICAgJ3Byb2R1Y3RwcmljZW9yaWdpbmFsJywKICAgICAgICAnc2VsbHByb2R1Y3RwcmljZScsCiAgICAgICAgJ3BlcmNlbnRhZ2VvZnNlbGwnLAogICAgICAgICdwcm9kdWN0d2VpZ2h0JywKICAgICAgICAncHJvZHVjdGluc3RvY2snLAogICAgICAgICdwcm9kdWN0Y292ZXJJbWFnZScsCiAgICAgICAgJ3Byb2R1Y3RVcGRhdGUnLAogICAgICAgICdwcm9kdWN0ZGlzY291bnQnLAogICAgICAgICdwcm9kdWN0YXBwcm92YWxzdGF0dXMnLAogICAgICAgICdwcm9kdWN0Y2F0ZWdvcnlJRCcKICAgICAgICApCgpjbGFzcyBQcm9kdWN0TmVzdGVkU2VyaWFsaXplcihzZXJpYWxpemVycy5Nb2RlbFNlcmlhbGl6ZXIpOgogICAgcHJvZHVjdF9pbWFnZSAgPSBQcm9kdWN0TmVzdGVkSW1hZ2VTZXJpYWxpemVyKG1hbnk9VHJ1ZSwgcmVhZF9vbmx5PVRydWUpCiAgICByZXZpZXdfcHJvZHVjdCA9IFByb2R1Y3RSZXZpZXdTZXJpYWxpemVyKG1hbnk9VHJ1ZSwgcmVhZF9vbmx5PVRydWUpCgoKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgbW9kZWwgPSBQcm9kdWN0cwogICAgICAgIGZpZWxkcyA9ICgnaWQnLAogICAgICAgICdwcm9kdWN0bmFtZScsCiAgICAgICAgJ3Byb2R1Y3RwcmljZW9yaWdpbmFsJywKICAgICAgICAnc2VsbHByb2R1Y3RwcmljZScsCiAgICAgICAgJ3BlcmNlbnRhZ2VvZnNlbGwnLAogICAgICAgICdwcm9kdWN0d2VpZ2h0JywKICAgICAgICAncHJvZHVjdGluc3RvY2snLAogICAgICAgICdwcm9kdWN0Y292ZXJJbWFnZScsCiAgICAgICAgJ3Byb2R1Y3REZXRhaWxzJywKICAgICAgICAncHJvZHVjdFVwZGF0ZScsCiAgICAgICAgJ3Byb2R1Y3RkaXNjb3VudCcsCiAgICAgICAgJ3Byb2R1Y3RhcHByb3ZhbHN0YXR1cycsCiAgICAgICAgJ2lzcmVjZW50cHJvZHVjdCcsCiAgICAgICAgJ3ZlbmRvcklEJywKICAgICAgICAncHJvZHVjdGNhdGVnb3J5SUQnLAogICAgICAgICdwcm9kdWN0X2ltYWdlJywKICAgICAgICAncmV2aWV3X3Byb2R1Y3QnKQoKY2xhc3MgUHJvZHVjdHNTZXJpYWxpemVyKFdyaXRhYmxlTmVzdGVkTW9kZWxTZXJpYWxpemVyKToKICAgICMgcXVlcnlfc2V0ID0gUHJvZHVjdEltYWdlLm9iamVjdHMuYWxsKCkKICAgIHByb2R1Y3RfaW1hZ2UgID0gUHJvZHVjdE5lc3RlZEltYWdlU2VyaWFsaXplcihtYW55PVRydWUpCiAgICByZXZpZXdfcHJvZHVjdCA9IFByb2R1Y3RSZXZpZXdTZXJpYWxpemVyKG1hbnk9VHJ1ZSwgcmVhZF9vbmx5PVRydWUpCiAgICBjbGFzcyBNZXRhOgogICAgICAgIG1vZGVsID0gUHJvZHVjdHMKICAgICAgICBmaWVsZHMgPSAoJ2lkJywKICAgICAgICAncHJvZHVjdG5hbWUnLAogICAgICAgICdwcm9kdWN0cHJpY2VvcmlnaW5hbCcsCiAgICAgICAgJ3NlbGxwcm9kdWN0cHJpY2UnLAogICAgICAgICdwZXJjZW50YWdlb2ZzZWxsJywKICAgICAgICAncHJvZHVjdHdlaWdodCcsCiAgICAgICAgJ3Byb2R1Y3RpbnN0b2NrJywKICAgICAgICAncHJvZHVjdGNvdmVySW1hZ2UnLAogICAgICAgICdwcm9kdWN0RGV0YWlscycsCiAgICAgICAgJ3Byb2R1Y3RVcGRhdGUnLAogICAgICAgICdwcm9kdWN0ZGlzY291bnQnLAogICAgICAgICdwcm9kdWN0YXBwcm92YWxzdGF0dXMnLAogICAgICAgICdpc3JlY2VudHByb2R1Y3QnLAogICAgICAgICd2ZW5kb3JJRCcsCiAgICAgICAgJ3Byb2R1Y3RjYXRlZ29yeUlEJywKICAgICAgICAncHJvZHVjdF9pbWFnZScsCiAgICAgICAgJ3Jldmlld19wcm9kdWN0JykKCiAgICAjIGRlZiBjcmVhdGUoc2VsZiwgdmFsaWRhdGVkX2RhdGEpOgogICAgIyAgICAgaW1hZ2VzX2RhdGEgPSBzZWxmLmNvbnRleHQuZ2V0KCd2aWV3JykucmVxdWVzdC5GSUxFUwogICAgIyAgICAgcHJvZHVjdCA9IFByb2R1Y3RzLm9iamVjdHMuY3JlYXRlKHByb2R1Y3RuYW1lPXZhbGlkYXRlZF9kYXRhLmdldCgncHJvZHVjdG5hbWUnLCAnbm8tcHJvZHVjdG5hbWUnKSkKICAgICMgICAgIGZvciBpbWFnZV9kYXRhIGluIGltYWdlc19kYXRhLnZhbHVlcygpOgogICAgIyAgICAgICAgIFByb2R1Y3RJbWFnZS5vYmplY3RzLmNyZWF0ZShpbWFnZT1pbWFnZV9kYXRhKQogICAgIyAgICAgcmV0dXJuIHByb2R1Y3QKCgogICAgIyBkZWYgY3JlYXRlKHNlbGYsIHZhbGlkYXRlZF9kYXRhKToKICAgICMgICAgIGltYWdlc19kYXRhID0gc2VsZi5jb250ZXh0LmdldCgncHJvZHVjdF9pbWFnZScpLnJlcXVlc3QuRklMRVMKICAgICMgICAgIHByb2R1Y3QgPSBQcm9kdWN0cy5vYmplY3RzLmNyZWF0ZSgqKnZhbGlkYXRlZF9kYXRhKQogICAgIyAgICAgZm9yIGltYWdlX2RhdGEgaW4gaW1hZ2VzX2RhdGE6CiAgICAjICAgICAgICAgUHJvZHVjdEltYWdlLm9iamVjdHMuY3JlYXRlKCoqaW1hZ2VfZGF0YSwgcHJvZHVjdD1wcm9kdWN0KQogICAgIyAgICAgcmV0dXJuIHByb2R1Y3QKICAgICMgZGVmIGNyZWF0ZShzZWxmLCB2YWxpZGF0ZWRfZGF0YSk6CiAgICAjICAgICBpbWFnZXNfZGF0YSA9IHNlbGYuY29udGV4dC5nZXQoJ3ZpZXcnKS5yZXF1ZXN0LkZJTEVTCiAgICAjICAgICBwcm9kdWN0ID0gUHJvZHVjdHMub2JqZWN0cy5jcmVhdGUocHJvZHVjdE5hbWU9dmFsaWRhdGVkX2RhdGEuZ2V0KCdwcm9kdWN0TmFtZScpLAogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdElEX2lkPTEpCiAgICAjICAgICBmb3IgaW1hZ2VfZGF0YSBpbiBpbWFnZXNfZGF0YS52YWx1ZXMoKToKICAgICMgICAgICAgICBQcm9kdWN0SW1hZ2Uub2JqZWN0cy5jcmVhdGUocHJvZHVjdD1wcm9kdWN0LCBwcm9kdWN0SW1hZ2U9aW1hZ2VfZGF0YSkKICAgICMgICAgIHJldHVybiBwcm9kdWN0CgoKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgY2xhc3MgUHJvZHVjdEltYWdlU2VyaWFsaXplcihzZXJpYWxpemVycy5Nb2RlbFNlcmlhbGl6ZXIpOgojICAgICBjbGFzcyBNZXRhOgojICAgICAgICAgbW9kZWwgPSBQcm9kdWN0SW1hZ2UKIyAgICAgICAgIGZpZWxkcyA9ICgnaW1hZ2UnLCkKPHxmaW1fZW5kfD4="]
["b54fe55d86f6a52b81710ed4547a6639f89e42cc-1","b54fe55d86f6a52b81710ed4547a6639f89e42cc","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKIiIiU3Vic3RpdHV0ZSB2YXJpYWJsZXMgdXNpbmcgamluamEyLiIiIgoKaW1wb3J0IGpzb24KaW1wb3J0IGppbmphMgppbXBvcnQgYXJncGFyc2UKaW1wb3J0IHNvY2tldAoKCnBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKPHxmaW1faG9sZXw+CnBhcnNlci5hZGRfYXJndW1lbnQoJy1vJywgJy0tb3V0JywgaGVscD0nb3V0cHV0IGZpbGUnLAogICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVRydWUsIHR5cGU9c3RyKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCctZCcsICctLWRhdGEnLCBoZWxwPSdqc29uIGRhdGEgZmlsZScsCiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9VHJ1ZSwgdHlwZT1zdHIpCnBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgJy0tdmFyJywgdHlwZT1zdHIsIGFjdGlvbj0nYXBwZW5kJywKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVtdLCBoZWxwPSJzZXQgdmFyaWFibGUgdG8gdmFsdWUgKC0tdmFyIGZvbz1iYXopIikKYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCiMgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTY2NTA2L2ZpbmRpbmctbG9jYWwtaXAtYWRkcmVzc2VzLXVzaW5nLXB5dGhvbnMtc3RkbGliCmlwID0gW2wgZm9yIGwgaW4gKFtpcCBmb3IgaXAgaW4KICAgICAgc29ja2V0LmdldGhvc3RieW5hbWVfZXgoc29ja2V0LmdldGhvc3RuYW1lKCkpWzJdCiAgICAgIGlmIG5vdCBpcC5zdGFydHN3aXRoKCIxMjcuIildWzoxXSwKICAgICAgW1socy5jb25uZWN0KCgnOC44LjguOCcsIDUzKSksIHMuZ2V0c29ja25hbWUoKVswXSwgcy5jbG9zZSgpKQogICAgICAgICAgZm9yIHMgaW4gW3NvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKV1dWzBdWzFdXSkKICAgICAgaWYgbF1bMF1bMF0KCgpkZWYgYXBwbHlfdGVtcGxhdGUoZGF0YSwgc291cmNlX2ZpbGUpOgogICAgIiIiUnVuIGZpbGUgdGhyb3VnaCBKaW5qYTIgVGVtcGxhdGUgc3lzdGVtLiIiIgogICAgdGVtcGxhdGUgPSBqaW5qYTIuVGVtcGxhdGUoc291cmNlX2ZpbGUucmVhZCgpKQogICAgcmV0dXJuIHRlbXBsYXRlLnJlbmRlcigqKmRhdGEpCgoKIyBnZXQgb3VyIHNvdXJjZSBkYXRhIHRvIHN0YXJ0CmRhdGEgPSBOb25lCndpdGggb3BlbihhcmdzLmRhdGEpIGFzIGRhdGFfZmlsZToKICAgIGRhdGEgPSBqc29uLmxvYWQoZGF0YV9maWxlKQogICAgZGF0YSA9IGRpY3QoZGF0YT1kYXRhLCBpcD1pcCkKCiMgZXh0ZW5kIHdpdGggYW55IGV4dHJhIGRhdGEKZm9yIGV4dHJhIGluIGFyZ3MuZXh0cmE6CiAgICB3aXRoIG9wZW4oZXh0cmEpIGFzIGRhdGFfZmlsZToKICAgICAgICBleHRyYV9uYW1lID0gZXh0cmEuc3BsaXQoJy4nKVswXS5zcGxpdCgnLycpWy0xXQogICAgICAgIGRhdGFbZXh0cmFfbmFtZV0gPSBqc29uLmxvYWQoZGF0YV9maWxlKQoKIyBwbHVzIGFueSBvbmUtb2ZmIHZhcnMgZnJvbSB0aGUgY29tbWFuZCBsaW5lCmlmIGFyZ3MudmFyOgogICAgZm9yIHZhciBpbiBhcmdzLnZhcjoKICAgICAgICBzcGxpdHRlZCA9IHZhci5zcGxpdCgiPSIsIDEpCiAgICAgICAgaWYgbGVuKHNwbGl0dGVkKSA9PSAxOgogICAgICAgICAgICBkYXRhW3NwbGl0dGVkWzBdXSA9ICcnCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZGF0YVtzcGxpdHRlZFswXV0gPSBzcGxpdHRlZFsxXQoKIyBmaW5hbGx5LCBhcHBseSB0aGlzIGFsbCB0byB0aGUgc291cmNlIHRlbXBsYXRlCndpdGggb3BlbihhcmdzLnNvdXJjZSkgYXMgc291cmNlX2ZpbGU6CiAgICBjb250ZW50ID0gYXBwbHlfdGVtcGxhdGUoZGF0YSwgc291cmNlX2ZpbGUpCiAgICB3aXRoIG9wZW4oYXJncy5vdXQsICJ3IikgYXMgZGVzdF9maWxlOgogICAgICAgIGRlc3RfZmlsZS53cml0ZShjb250ZW50KQo8fGZpbV9zdWZmaXh8PgpwYXJzZXIuYWRkX2FyZ3VtZW50KCctcycsICctLXNvdXJjZScsIGhlbHA9J3NvdXJjZSB0ZW1wbGF0ZSBmaWxlJywKICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD1UcnVlLCB0eXBlPXN0cikKcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnLCAnLS1leHRyYScsIGhlbHA9J2V4dHJhIHNvdXJjZSB0ZW1wbGF0ZSBmaWxlczsgYWRkZWQgdG8gZG9jIGJhc2VkIG9uIGZpbGVuYW1lJywKICAgICAgICAgICAgICAgICAgICB0eXBlPXN0ciwgYWN0aW9uPSdhcHBlbmQnLCBkZWZhdWx0PVtdKQo8fGZpbV9lbmR8Pg=="]
["93d31e3dd74d79654d110c801d49edbc09555260-3","93d31e3dd74d79654d110c801d49edbc09555260","PHxmaW1fcHJlZml4fD4KIyBjb25zdGFudHMgS29saWJyaSByb2xlcwpDT0FDSCA9ICJjb2FjaCIKTEVBUk5FUiA9ICJsZWFybmVyIgo8fGZpbV9ob2xlfD4KICAgIChMRUFSTkVSLCAiTGVhcm5lciIpLAopCjx8ZmltX3N1ZmZpeHw+CgoKY2hvaWNlcyA9ICgKICAgIChDT0FDSCwgIkNvYWNoIiksCjx8ZmltX2VuZHw+"]
["9e58dc3b41b81c2b3e49bd45fdbafb72ab23717c-1","9e58dc3b41b81c2b3e49bd45fdbafb72ab23717c","PHxmaW1fcHJlZml4fD4KCgojIG5vaW5zcGVjdGlvbiBQeVVudXNlZExvY2FsCiMgc2t1cyA9IHVuaWNvZGUgc3RyaW5nCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgoKJycnCgo8fGZpbV9lbmR8Pg=="]
["9e16c88797b25fa931079a7d4a4843d16f0fa82d-1","9e16c88797b25fa931079a7d4a4843d16f0fa82d","PHxmaW1fcHJlZml4fD4KY2xhc3MgQmFzZUVycm9yKEV4Y2VwdGlvbik6CiAgIiIiCiAgQmFzZSBjbGFzcyBmb3IgZXhjZXB0aW9ucyBpbiB0aGlzIG1vZHVsZS4KICAiIiIKICBwYXNzCgoKY2xhc3MgQkxFRGV2aWNlQWNjZXNzRXJyb3IoQmFzZUVycm9yKToKICAiIiIKICBSYWlzZWQgaWYgQkxFIGFkYXB0ZXIgbm90IGFjY2Vzc2libGUuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKICAgIHNlbGYudmFsdWUgPSB2YWx1ZQoKICBkZWYgX19zdHJfXyhzZWxmKToKICAgIHJldHVybiByZXByKHNlbGYudmFsdWUpCgoKY2xhc3MgQ29tbWFuZFBhcnNlRXJyb3IoQmFzZUVycm9yKToKICAiIiIKICBSYWlzZWQgaWYgdGhlcmUgaXMgYSBwcm9ibGVtCiAgd2l0aCBhIE51a2kgY29tbWFuZC4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kLCByZXF1ZXN0LCB2YWx1ZSk6CiAgICBzZWxmLm1ldGhvZCA9IG1ldGhvZAogICAgc2VsZi5yZXF1ZXN0ID0gcmVxdWVzdAogICAgc2VsZi52YWx1ZSA9IHZhbHVlCgogIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgcmV0dXJuIHJlcHIoJ0luIHt9IC0gcmVxdWVzdCBvZiB7fSAtIHt9Jy5mb3JtYXQoc2VsZi5tZXRob2QsIHNlbGYucmVxdWVzdCwgc2VsZi52YWx1ZSkpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpjbGFzcyBDb21tYW5kTWlzbWF0Y2hFcnJvcihCYXNlRXJyb3IpOgogICIiIgogIFJhaXNlZCBpZiB0aGVyZSBpcyBhIG1pc21hdGNoCjx8ZmltX2VuZHw+"]
["7400f9bc5fbb869cabbd42cc8bcb98b7ad97d451-3","7400f9bc5fbb869cabbd42cc8bcb98b7ad97d451","PHxmaW1fcHJlZml4fD4KIiIiCnNlcnZlciBtb2R1bGUKIiIiCmZyb20ga2VyLnV0aWxzIGltcG9ydCByZXF1ZXN0CmZyb20gLmxpc3QgaW1wb3J0IEFQSV9MSVNUCgoKY2xhc3MgU2VydmVyOgogICAgIiIiCiAgICBzZXJ2ZXIgYXBpcwogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgZW1haWwsIHRva2VuKToKICAgICAgICBzZWxmLmVtYWlsID0gZW1haWwKICAgICAgICBzZWxmLnRva2VuID0gdG9rZW4KCiAgICBkZWYgbGlzdChzZWxmKToKICAgICAgICAiIiIKICAgICAgICBsaXN0IGFsbCBzZXJ2ZXJzCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHJlcXVlc3QoQVBJX0xJU1QuU0VSVkVSU19MSVNULnZhbHVlLCB7CiAgICAgICAgICAgICdlbWFpbCc6IHNlbGYuZW1haWwsCiAgICAgICAgICAgICd0b2tlbic6IHNlbGYudG9rZW4KICAgICAgICB9KQoKICAgIGRlZiBnZXQoc2VsZiwgdXVpZCk6CiAgICAgICAgIiIiCiAgICAgICAgZ2V0IG9uZSBzZXJ2ZXIgYnkgdXVpZAogICAgICAgICIiIgogICAgICAgIHJldHVybiByZXF1ZXN0KEFQSV9MSVNULlNFUlZFUl9HRVQudmFsdWUsIHsKPHxmaW1faG9sZXw+CiAgICAgICAgfSkKCgogICAgZGVmIGNyZWF0ZShzZWxmLCBuYW1lLCBtZW1vcnksIGFyZWEsIG9zLCBzc2hfa2V5KToKICAgICAgICAiIiIKICAgICAgICBjcmVhdGUgYSBzZXJ2ZXIKICAgICAgICAiIiIKICAgICAgICByZXR1cm4gcmVxdWVzdChBUElfTElTVC5TRVJWRVJfQ1JFQVRFLnZhbHVlLCB7CiAgICAgICAgICAgICdlbWFpbCc6IHNlbGYuZW1haWwsCiAgICAgICAgICAgICd0b2tlbic6IHNlbGYudG9rZW4sCiAgICAgICAgICAgICduYW1lJzogbmFtZSwKICAgICAgICAgICAgJ21lbW9yeSc6IG1lbW9yeSwKICAgICAgICAgICAgJ2FyZWEnOiBhcmVhLAogICAgICAgICAgICAnb3MnOiBvcywKICAgICAgICAgICAgJ3NzaEtleSc6IHNzaF9rZXkKICAgICAgICB9KQoKCiAgICBkZWYgc2V0X3Bvd2VyKHNlbGYsIHV1aWQsIHBvd2VyKToKICAgICAgICAiIiIKICAgICAgICBzZXQgcG93ZXIgZm9yIHNlcnZlciBieSB1dWlkCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHJlcXVlc3QoQVBJX0xJU1QuU0VSVkVSX1NFVF9QT1dFUi52YWx1ZSwgewogICAgICAgICAgICAnZW1haWwnOiBzZWxmLmVtYWlsLAogICAgICAgICAgICAndG9rZW4nOiBzZWxmLnRva2VuLAogICAgICAgICAgICAndXVpZCc6IHV1aWQsCiAgICAgICAgICAgICdwb3dlcic6IHBvd2VyCiAgICAgICAgfSkKCgogICAgZGVmIHNldChzZWxmLCB1dWlkLCBjbG9zZV9kaXNrX3ZpcnRfaW8sIGNsb3NlX25ldF92aXJ0X2lvLCBpc28sIGJvb3Rfb3JkZXIpOgogICAgICAgICIiIgogICAgICAgIHNldCBzZXJ2ZXIgYnkgdXVpZAogICAgICAgICIiIgogICAgICAgIHJldHVybiByZXF1ZXN0KEFQSV9MSVNULlNFUlZFUl9TRVQudmFsdWUsIHsKICAgICAgICAgICAgJ2VtYWlsJzogc2VsZi5lbWFpbCwKICAgICAgICAgICAgJ3Rva2VuJzogc2VsZi50b2tlbiwKICAgICAgICAgICAgJ3V1aWQnOiB1dWlkLAogICAgICAgICAgICAnY2xvc2VEaXNrVmlydElPJzogY2xvc2VfZGlza192aXJ0X2lvLAogICAgICAgICAgICAnY2xvc2VOZXRWaXJ0SU8nOiBjbG9zZV9uZXRfdmlydF9pbywKICAgICAgICAgICAgJ2lzbyc6IGlzbywKICAgICAgICAgICAgJ2Jvb3RPcmRlcic6IGJvb3Rfb3JkZXIKICAgICAgICB9KQoKICAgIGRlZiByZWluc3RhbGwoc2VsZiwgdXVpZCwgb3MsIHNzaF9rZXkpOgogICAgICAgICIiIgogICAgICAgIHJlaW5zdGFsbCBhIHNlcnZlcgogICAgICAgICIiIgogICAgICAgIHJldHVybiByZXF1ZXN0KEFQSV9MSVNULlNFUlZFUl9SRUlOU1RBTEwudmFsdWUsIHsKICAgICAgICAgICAgJ2VtYWlsJzogc2VsZi5lbWFpbCwKICAgICAgICAgICAgJ3Rva2VuJzogc2VsZi50b2tlbiwKICAgICAgICAgICAgJ3V1aWQnOiB1dWlkLAogICAgICAgICAgICAnb3MnOiBvcywKICAgICAgICAgICAgJ3NzaEtleSc6IHNzaF9rZXkKICAgICAgICB9KQoKICAgIGRlZiBkZWxldGUoc2VsZiwgdXVpZCk6CiAgICAgICAgIiIiCiAgICAgICAgZGVsZXRlIGEgc2VydmVyIGJ5IHV1aWQobm8gY29uZmlybSBvciByZWN5Y2xlIGJpbiEhKQogICAgICAgICIiIgogICAgICAgIHJldHVybiByZXF1ZXN0KEFQSV9MSVNULlNFUlZFUl9ERUxFVEUudmFsdWUsIHsKICAgICAgICAgICAgJ2VtYWlsJzogc2VsZi5lbWFpbCwKICAgICAgICAgICAgJ3Rva2VuJzogc2VsZi50b2tlbiwKICAgICAgICAgICAgJ3V1aWQnOiB1dWlkCiAgICAgICAgfSkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgJ2VtYWlsJzogc2VsZi5lbWFpbCwKICAgICAgICAgICAgJ3Rva2VuJzogc2VsZi50b2tlbiwKICAgICAgICAgICAgJ3V1aWQnOiB1dWlkCjx8ZmltX2VuZHw+"]
["9ba733fa45b8056125c296bce606cb979565896f-4","9ba733fa45b8056125c296bce606cb979565896f","PHxmaW1fcHJlZml4fD4KIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQojIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluCiMgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKPHxmaW1faG9sZXw+CiMgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCiMgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKIyB1bmRlciB0aGUgTGljZW5zZS4KZnJvbSBvcGVuc3RhY2sgaW1wb3J0IHJlc291cmNlCgpmcm9tIG90Y2V4dGVuc2lvbnMuc2RrLmRtcy52MSBpbXBvcnQgX2Jhc2UKCgpjbGFzcyBRdWV1ZShfYmFzZS5SZXNvdXJjZSk6CgogICAgcmVzb3VyY2VzX2tleSA9ICdxdWV1ZXMnCgogICAgYmFzZV9wYXRoID0gJy9xdWV1ZXMnCgogICAgIyBjYXBhYmlsaXRpZXMKICAgIGFsbG93X2NyZWF0ZSA9IFRydWUKICAgIGFsbG93X2xpc3QgPSBUcnVlCiAgICBhbGxvd19mZXRjaCA9IFRydWUKICAgIGFsbG93X2RlbGV0ZSA9IFRydWUKCiAgICBfcXVlcnlfbWFwcGluZyA9IHJlc291cmNlLlF1ZXJ5UGFyYW1ldGVycygKICAgICAgICAnaW5jbHVkZV9kZWFkbGV0dGVyJywKICAgICAgICAnaW5jbHVkZV9tZXNzYWdlc19udW0nCiAgICApCgogICAgIyBQcm9wZXJ0aWVzCiAgICAjOiBDcmVhdGVkIHRpbWUKICAgICM6ICpUeXBlOiBpbnQqCiAgICBjcmVhdGVkID0gcmVzb3VyY2UuQm9keSgnY3JlYXRlZCcsIHR5cGU9aW50KQogICAgIzogRGVzY3JpcHRpb24gZm9yIHRoZSBxdWV1ZS4KICAgICM6IFRoZSB2YWx1ZSBpcyBhIHN0cmluZyBvZiBhIG1heGltdW0gb2YgMTYwIGNoYXJhY3RlcnMgYW5kIGNhbm5vdAogICAgIzogY29udGFpbiB0aGUgYW5nbGUgYnJhY2tldHMgKDw+KS4KICAgIGRlc2NyaXB0aW9uID0gcmVzb3VyY2UuQm9keSgnZGVzY3JpcHRpb24nKQogICAgIzogUXVldWUgSWQKICAgIGlkID0gcmVzb3VyY2UuQm9keSgnaWQnKQogICAgIzogTWF4IGNvbnN1bWUgY291bnQgbnVtYmVyCiAgICAjOiAqVHlwZTogaW50KgogICAgIzogVmFsdWUgcmFuZ2U6IDHigJMxMDAuCiAgICBtYXhfY29uc3VtZV9jb3VudCA9IHJlc291cmNlLkJvZHkoJ21heF9jb25zdW1lX2NvdW50JywgdHlwZT1pbnQpCiAgICAjOiBRdWV1ZSBuYW1lCiAgICBuYW1lID0gcmVzb3VyY2UuQm9keSgnbmFtZScpCiAgICAjOiBRdWV1ZSBtb2RlOgogICAgIzogYE5PUk1BTGA6IFN0YW5kYXJkIHF1ZXVlLCB3aGljaCBzdXBwb3J0cyBoaWdoIGNvbmN1cnJlbmN5IHBlcmZvcm1hbmNlCiAgICAjOiBidXQgY2Fubm90IGd1YXJhbnRlZSB0aGF0IG1lc3NhZ2VzIGFyZSByZXRyaWV2ZWQgaW4gdGhlIGV4YWN0CiAgICAjOiBzZXF1ZW5jZSBhcyBob3cgdGhleSBhcmUgcmVjZWl2ZWQuCiAgICAjOiBgRklGT2A6IEZpcnN0LWluLWZpcnN0LW91dCAoRklGTykgcXVldWUsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCBtZXNzYWdlcwogICAgIzogYXJlIHJldHJpZXZlZCBpbiB0aGUgZXhhY3Qgc2VxdWVuY2UgYXMgaG93IHRoZXkgYXJlIHJlY2VpdmVkLgogICAgIzogYEtBRktBX0hBYDogSGlnaC1yZWxpYWJpbGl0eSBLYWZrYSBxdWV1ZS4gQWxsIG1lc3NhZ2UgcmVwbGljYXMgYXJlCiAgICAjOiBmbHVzaGVkIHRvIGEgZGlzayBzeW5jaHJvbm91c2x5LCBlbnN1cmluZyBtZXNzYWdlIHJlbGlhYmlsaXR5LgogICAgIzogYEtBRktBX0hUYDogSGlnaC10aHJvdWdocHV0IEthZmthIHF1ZXVlLiBBbGwgbWVzc2FnZSByZXBsaWNhcyBhcmUKICAgICM6IGZsdXNoZWQgdG8gYSBkaXNrIGFzeW5jaHJvbm91c2x5LCBlbnN1cmluZyBoaWdoIHBlcmZvcm1hbmNlLgogICAgcXVldWVfbW9kZSA9IHJlc291cmNlLkJvZHkoJ3F1ZXVlX21vZGUnKQogICAgIzogUmVkcml2ZSBwb2xpY3kuCiAgICAjOiBTdXBwb3J0ZWQgdmFsdWVzOiBgZW5hYmxlYCwgYGRpc2FibGVgLiBEZWZhdWx0OiBgZGlzYWJsZWAKICAgIHJlZHJpdmVfcG9saWN5ID0gcmVzb3VyY2UuQm9keSgncmVkcml2ZV9wb2xpY3knKQogICAgIzogSW5kaWNhdGVzIHRoZSBob3VycyBvZiBzdG9yaW5nIG1lc3NhZ2VzIGluIHRoZSBLYWZrYSBxdWV1ZS4KICAgICM6IFRoaXMgcGFyYW1ldGVyIGlzIHZhbGlkIG9ubHkgd2hlbiBxdWV1ZV9tb2RlIGlzIHNldCB0byBLQUZLQV9IQSBvcgogICAgIzogS0FGS0FfSFQuIFZhbHVlIHJhbmdlOiAx4oCTNzIuCiAgICAjOiAqVHlwZTogaW50KgogICAgcmV0ZW50aW9uX2hvdXJzID0gcmVzb3VyY2UuQm9keSgncmV0ZW50aW9uX2hvdXJzJywgdHlwZT1pbnQpCjx8ZmltX3N1ZmZpeHw+CiMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCjx8ZmltX2VuZHw+"]
["9e97c617bf3375cae40bbdbd2c7a0e3fa6e87123-1","9e97c617bf3375cae40bbdbd2c7a0e3fa6e87123","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4Ke3t0aW1laW5mb319Cjx8ZmltX2VuZHw+"]
["194707e337e1d36e4298a60923d51763f55a8d23-4","194707e337e1d36e4298a60923d51763f55a8d23","PHxmaW1fcHJlZml4fD4KZGVmIG5vX3NwYWNlKHgpOgogICAgeCA9IHgucmVwbGFjZSgiICIsICIiKQogICAgcmV0dXJuIHgKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRlZiBub19zcGFjZTIoeCk6CiAgICByZXR1cm4geC5yZXBsYWNlKCcgJywgJycpCjx8ZmltX2VuZHw+"]
["574e29b9cdbd23a83c32877e197fa4b6b7692a91-1","574e29b9cdbd23a83c32877e197fa4b6b7692a91","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zLCBzeXMKaW1wb3J0IGpzb24KaW1wb3J0IHRvcmNoCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgdHlwZXMKaW1wb3J0IGd5bQpmcm9tIGFiYyBpbXBvcnQgQUJDLCBhYnN0cmFjdG1ldGhvZCwgYWJzdHJhY3Rwcm9wZXJ0eQpmcm9tIGthbWFybC51dGlscyBpbXBvcnQgc3BhY2VfdG9fZGljdCwgZGljdF90b19zcGFjZSwgY29tYmluZV9zcGFjZXMKZnJvbSBtYXJsZ3JpZC5hZ2VudHMgaW1wb3J0IEdyaWRBZ2VudEludGVyZmFjZQpmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCmltcG9ydCB3YXJuaW5ncwoKCmNsYXNzIFJMQWdlbnRCYXNlKEFCQyk6CgogICAgQGFic3RyYWN0bWV0aG9kCiAgICBkZWYgYWN0aW9uX3N0ZXAoc2VsZiwgb2JzKToKICAgICAgICBwYXNzCgogICAgQGFic3RyYWN0bWV0aG9kCiAgICBkZWYgc2F2ZV9zdGVwKHNlbGYsIG9icywgYWN0LCByZXcsIGRvbmUpOgogICAgICAgIHBhc3MKCiAgICBAYWJzdHJhY3RtZXRob2QKICAgIGRlZiBzdGFydF9lcGlzb2RlKHNlbGYpOgogICAgICAgIHBhc3MKCiAgICBAYWJzdHJhY3RtZXRob2QKICAgIGRlZiBlbmRfZXBpc29kZShzZWxmKToKICAgICAgICBwYXNzCgogICAgQGNvbnRleHRtYW5hZ2VyCiAgICBkZWYgZXBpc29kZShzZWxmKToKICAgICAgICBzZWxmLnN0YXJ0X2VwaXNvZGUoKQogICAgICAgIHlpZWxkIHNlbGYKICAgICAgICBzZWxmLmVuZF9lcGlzb2RlKCkKCmNsYXNzIEFnZW50KFJMQWdlbnRCYXNlKToKICAgIHNhdmVfbW9kdWxlcyA9IFtdCiAgICBkZWYgX19pbml0X18oc2VsZiwgb2JzZXJ2YXRpb25fc3BhY2UsIGFjdGlvbl9zcGFjZSwgbWV0YWRhdGE9e30sIHRyYWluX2hpc3Rvcnk9W10sIGxvZ2dlcj1Ob25lKToKCiAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dnZXIKICAgICAgICBzZWxmLm9ic2VydmF0aW9uX3NwYWNlID0gc2VsZi5lbnN1cmVfc3BhY2Uob2JzZXJ2YXRpb25fc3BhY2UpCiAgICAgICAgc2VsZi5hY3Rpb25fc3BhY2UgPSBzZWxmLmVuc3VyZV9zcGFjZShhY3Rpb25fc3BhY2UpCiAgICAgICAgc2VsZi5sZWFybmluZ19jb25maWcgPSB7fQogICAgICAgIHNlbGYubW9kZWxfY29uZmlnID0ge30KICAgICAgICBzZWxmLm1ldGFkYXRhID0gbWV0YWRhdGEKICAgICAgICBzZWxmLnRyYWluX2hpc3RvcnkgPSB0cmFpbl9oaXN0b3J5CiAgICAgICAgc2VsZi51cGRhdGVzX3NpbmNlX2hpc3RvcnlfdXBkYXRlID0gMAoKICAgIEBwcm9wZXJ0eQogICAgZGVmIF9zYXZlX3N0YXRlKHNlbGYpOgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICdjbGFzcyc6IHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAogICAgICAgICAgICAnb2JzZXJ2YXRpb25fc3BhY2UnOiBzcGFjZV90b19kaWN0KHNlbGYub2JzZXJ2YXRpb25fc3BhY2UpLAogICAgICAgICAgICAnYWN0aW9uX3NwYWNlJzogc3BhY2VfdG9fZGljdChzZWxmLmFjdGlvbl9zcGFjZSksCiAgICAgICAgICAgICdsZWFybmluZ19jb25maWcnOiBzZWxmLmxlYXJuaW5nX2NvbmZpZywKICAgICAgICAgICAgJ21vZGVsX2NvbmZpZyc6IHNlbGYubW9kZWxfY29uZmlnLAogICAgICAgICAgICAnbWV0YWRhdGEnOiBzZWxmLm1ldGFkYXRhLAogICAgICAgICAgICAndHJhaW5faGlzdG9yeSc6IHNlbGYudXBkYXRlZF90cmFpbl9oaXN0b3J5LAogICAgICAgIH0KCiAgICBAcHJvcGVydHkKICAgIGRlZiB1cGRhdGVkX3RyYWluX2hpc3Rvcnkoc2VsZik6CiAgICAgICAgcmV0dXJuIFsqc2VsZi50cmFpbl9oaXN0b3J5LCAKICAgICAgICB7CiAgICAgICAgICAgICdtZXRhZGF0YSc6IHNlbGYubWV0YWRhdGEsCiAgICAgICAgICAgICdsZWFybmluZ19jb25maWcnOiBzZWxmLmxlYXJuaW5nX2NvbmZpZywKICAgICAgICB9XQoKICAgIGRlZiB0cmFja19ncmFkaWVudHMoc2VsZiwgbW9kdWxlLCBsb2dfZnJlcXVlbmN5PTEwKToKICAgICAgICAjIFdlaWdodHMgYW5kIGJpYXNlcyB2LiAwLjguMzI/IHdhcyBjcmFzaGluZyB3aGVuIEthbWFsIHRyaWVkIHRvIGxvZyBncmFkaWVudHMgdXNpbmcKICAgICAgICAjIHRoZSBidWlsdC1pbiBweXRvcmNoIGhvb2tzIGFuZCBgd2FuZGIud2F0Y2hgLiBUaGlzIGRvZXMgYSBzaW1pbGFyIHRoaW5nIGluIGEgc2ltaWxhcgogICAgICAgICMgd2F5IGJ1dCB3aXRob3V0IGNyYXNoaW5nLgogICAgICAgIHNlbGYuX2dyYWRfc3RhdHMgPSBnZXRhdHRyKHNlbGYsICdfZ3JhZF9zdGF0cycsIHt9KQogICAgICAgIHNlbGYuX2dyYWRfY291bnRzID0gZ2V0YXR0cihzZWxmLCAnX2dyYWRfY291bnRzJywge30pCiAgICAgICAgc2VsZi5fZ3JhZHNfdXBkYXRlZCA9IEZhbHNlCiAgICAgICAgCiAgICAgICAgZGVmIG1vbml0b3JfZ3JhZGllbnRfaG9vayhsb2dfbmFtZSk6CiAgICAgICAgICAgIGRlZiBsb2dfZ3JhZGllbnQoZ3JhZCk6CiAgICAgICAgICAgICAgICBwXyA9IGxhbWJkYSB4OiB4LmRldGFjaCgpLmNwdSgpLml0ZW0oKQogICAgICAgICAgICAgICAgdXBkYXRlX2NvdW50ID0gc2VsZi5fZ3JhZF9jb3VudHMuZ2V0KGxvZ19uYW1lLCAwKQogICAgICAgICAgICAgICAgaWYgdXBkYXRlX2NvdW50JWxvZ19mcmVxdWVuY3k9PTA6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5fZ3JhZF9zdGF0cyA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgKipzZWxmLl9ncmFkX3N0YXRzLAogICAgICAgICAgICAgICAgICAgICAgICBmJ3tsb2dfbmFtZX1fbWVhbic6IHBfKGdyYWQubWVhbigpKSwKICAgICAgICAgICAgICAgICAgICAgICAgZid7bG9nX25hbWV9X21pbic6IHBfKGdyYWQubWluKCkpLAogICAgICAgICAgICAgICAgICAgICAgICBmJ3tsb2dfbmFtZX1fbWF4JzogcF8oZ3JhZC5tYXgoKSksCiAgICAgICAgICAgICAgICAgICAgICAgIGYne2xvZ19uYW1lfV9zdGQnOiBwXyhncmFkLnN0ZCgpKSwKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc2VsZi5fZ3JhZHNfdXBkYXRlZCA9IFRydWUKICAgICAgICAgICAgICAgIHNlbGYuX2dyYWRfY291bnRzW2xvZ19uYW1lXSA9IHVwZGF0ZV9jb3VudCArIDEKICAgICAgICAgICAgcmV0dXJuIGxvZ19ncmFkaWVudAoKCiAgICAgICAgZm9yIGssIChuYW1lLCB3KSBpbiBlbnVtZXJhdGUobW9kdWxlLm5hbWVkX3BhcmFtZXRlcnMoKSk6CiAgICAgICAgICAgIHcucmVnaXN0ZXJfaG9vayhtb25pdG9yX2dyYWRpZW50X2hvb2sobmFtZSkpCgogICAgZGVmIGdyYWRfbG9nX3N5bmMoc2VsZik6CiAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnX2dyYWRfc3RhdHMnKToKICAgICAgICAgICAgc2VsZi5sb2coJ2dyYWRpZW50X2luZm8nLCBzZWxmLl9ncmFkX3N0YXRzKQogICAgICAgICAgICBzZWxmLl9ncmFkX3N0YXRzID0ge30KICAgICAgICAgICAgc2VsZi5fZ3JhZHNfdXBkYXRlZCA9IEZhbHNlCgogICAgZGVmIHNldF9sb2dnZXIoc2VsZiwgbG9nZ2VyKToKICAgICAgICBzZWxmLmxvZ2dlciA9IGxvZ2dlcgoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBlbnN1cmVfc3BhY2UoZGljdF9vcl9zcGFjZSk6CiAgICAgICAgaWYgaXNpbnN0YW5jZShkaWN0X29yX3NwYWNlLCBkaWN0KToKICAgICAgICAgICAgcmV0dXJuIGRpY3RfdG9fc3BhY2UoZGljdF9vcl9zcGFjZSkKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gZGljdF9vcl9zcGFjZQoKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIHNldF9kZXZpY2Uoc2VsZiwgZGV2KToKICAgICAgICBwYXNzCgogICAgQGFic3RyYWN0bWV0aG9kCiAgICBkZWYgYWN0aW9uX3N0ZXAoc2VsZiwgb2JzKToKICAgICAgICBwYXNzCgogICAgQGFic3RyYWN0bWV0aG9kCiAgICBkZWYgc2F2ZV9zdGVwKHNlbGYsIG9icywgYWN0LCByZXcsIGRvbmUpOgogICAgICAgIHBhc3MKCiAgICBAYWJzdHJhY3RtZXRob2QKICAgIGRlZiBzdGFydF9lcGlzb2RlKHNlbGYpOgogICAgICAgIHBhc3MKCiAgICBAYWJzdHJhY3RtZXRob2QKICAgIGRlZiBlbmRfZXBpc29kZShzZWxmKToKICAgICAgICBwYXNzCjx8ZmltX2hvbGV8PgogICAgICAgIHlpZWxkIHNlbGYKICAgICAgICBzZWxmLmVuZF9lcGlzb2RlKCkKCgogICAgZGVmIHNhdmUoc2VsZiwgc2F2ZV9kaXIsIGZvcmNlPUZhbHNlKToKICAgICAgICBzYXZlX2RpciA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmV4cGFuZHVzZXIoc2F2ZV9kaXIpKQogICAgICAgIG1vZGVsX3BhdGggPSBvcy5wYXRoLmpvaW4oc2F2ZV9kaXIsICdtb2RlbC50YXInKQogICAgICAgIG1ldGFkYXRhX3BhdGggPSBvcy5wYXRoLmpvaW4oc2F2ZV9kaXIsICdtZXRhZGF0YS5qc29uJykKCiAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNhdmVfZGlyKToKICAgICAgICAgICAgb3MubWFrZWRpcnMoc2F2ZV9kaXIpCgogICAgICAgIGZvciBmIGluIChtb2RlbF9wYXRoLCBtZXRhZGF0YV9wYXRoKToKICAgICAgICAgICAgaWYgZm9yY2UgaXMgRmFsc2UgYW5kIG9zLnBhdGguaXNmaWxlKGYpOgogICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihmIkVycm9yIHNhdmluZyB7c2VsZi5fX2NsYXNzX18uX19uYW1lX199OiBzYXZlIGZpbGUgXCJ7Zn1cIiBhbHJlYWR5IGV4aXN0cy4iKQoKICAgICAgICBmb3IgZiBpbiAobW9kZWxfcGF0aCwgbWV0YWRhdGFfcGF0aCk6CiAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGYpOgogICAgICAgICAgICAgICAgb3MucmVtb3ZlKGYpCgogICAgICAgIHByaW50KCJTYXZpbmcgbW9kdWxlcyAiLCBzZWxmLnNhdmVfbW9kdWxlcykKICAgICAgICB0b3JjaC5zYXZlKHttb2Q6IGdldGF0dHIoc2VsZiwgbW9kKSBmb3IgbW9kIGluIHNlbGYuc2F2ZV9tb2R1bGVzCiAgICAgICAgICAgICAgICAgICAgfSwgbW9kZWxfcGF0aCkKCiAgICAgICAgIyBVcGRhdGUgdGhlIHRyYWluaW5nIGhpc3RvcnkgYmVmb3JlIHNhdmluZyBtZXRhZGF0YS4KCiAgICAgICAganNvbi5kdW1wKHNlbGYuX3NhdmVfc3RhdGUsIG9wZW4obWV0YWRhdGFfcGF0aCwgInciKSkKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBsb2FkKGNscywgc2F2ZV9kaXIsIGNvbmZpZ19jaGFuZ2VzID0ge30sIGRldmljZT1Ob25lKToKICAgICAgICBwcmludChmIkxvYWRpbmciLCBjbHMuX19uYW1lX18pCiAgICAgICAgc2F2ZV9kaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5leHBhbmR1c2VyKHNhdmVfZGlyKSkKICAgICAgICBtb2RlbF9wYXRoID0gb3MucGF0aC5qb2luKHNhdmVfZGlyLCAnbW9kZWwudGFyJykKICAgICAgICBtZXRhZGF0YV9wYXRoID0gb3MucGF0aC5qb2luKHNhdmVfZGlyLCAnbWV0YWRhdGEuanNvbicpCgogICAgICAgIG1ldGFkYXRhID0ganNvbi5sb2FkKG9wZW4obWV0YWRhdGFfcGF0aCwncicpKQogICAgICAgIG1ldGFkYXRhID0geyoqbWV0YWRhdGEsICoqY29uZmlnX2NoYW5nZXN9CgogICAgICAgIGlmIG1ldGFkYXRhWydjbGFzcyddICE9IGNscy5fX25hbWVfXzoKICAgICAgICAgICAgd2FybmluZ3Mud2FybihmIkF0dGVtcHRpbmcgdG8gbG9hZCBhIHtjbHMuX19uYW1lX199IGZyb20gYSB7bWV0YWRhdGFbJ2NsYXNzJ119IGNoZWNrcG9pbnQuIikKICAgICAgICByZXQgPSBjbHMoKip7azp2IGZvciBrLHYgaW4gbWV0YWRhdGEuaXRlbXMoKSBpZiBrICE9ICdjbGFzcyd9KQoKICAgICAgICBpZiBkZXZpY2UgaXMgTm9uZToKICAgICAgICAgICAgZGV2aWNlID0gZ2V0YXR0cihyZXQsICdkZXZpY2UnLCBOb25lKQogICAgICAgIG1vZHVsZXNfZGljdCA9IHRvcmNoLmxvYWQobW9kZWxfcGF0aCwgbWFwX2xvY2F0aW9uPWRldmljZSkKICAgICAgICAKICAgICAgICBmb3Igayx2IGluIG1vZHVsZXNfZGljdC5pdGVtcygpOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBnZXRhdHRyKHJldCwgaykubG9hZF9zdGF0ZV9kaWN0KHYuc3RhdGVfZGljdCgpKQogICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICByc2QgPSBnZXRhdHRyKHJldCwgaykuc3RhdGVfZGljdCgpCiAgICAgICAgICAgICAgICBmb3IgbmV0X25hbWUsIG5ldF9wYXJhbXMgaW4gdi5zdGF0ZV9kaWN0KCkuaXRlbXMoKToKICAgICAgICAgICAgICAgICAgICBwcmludChuZXRfbmFtZSwgdHVwbGUobmV0X3BhcmFtcy5zaGFwZSksIHR1cGxlKHJzZFtuZXRfbmFtZV0uc2hhcGUpKQogICAgICAgICAgICAgICAgcHJpbnQoZiJFcnJvciBsb2FkaW5nIHtrfSIpCiAgICAgICAgICAgICAgICBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKCkKICAgICAgICBkZWwgbW9kdWxlc19kaWN0CiAgICAgICAgcmV0dXJuIHJldAoKCmNsYXNzIEluZGVwZW5kZW50QWdlbnRzKFJMQWdlbnRCYXNlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYWdlbnRzKToKICAgICAgICBzZWxmLmFnZW50cyA9IGxpc3QoYWdlbnRzKQogICAgICAgIHNlbGYub2JzZXJ2YXRpb25fc3BhY2UgPSBjb21iaW5lX3NwYWNlcygKICAgICAgICAgICAgW2FnZW50Lm9ic2VydmF0aW9uX3NwYWNlIGZvciBhZ2VudCBpbiBhZ2VudHNdCiAgICAgICAgKQogICAgICAgIHNlbGYuYWN0aW9uX3NwYWNlID0gY29tYmluZV9zcGFjZXMoCiAgICAgICAgICAgIFthZ2VudC5hY3Rpb25fc3BhY2UgZm9yIGFnZW50IGluIGFnZW50c10KICAgICAgICApCiAgICAgICAgc2VsZi5sb2dnZXIgPSBOb25lCgogICAgZGVmIHNldF9sb2dnZXIoc2VsZiwgbG9nZ2VyKToKICAgICAgICBzZWxmLmxvZ2dlciA9IGxvZ2dlcgogICAgICAgIGlmIGxvZ2dlciBpcyBub3QgTm9uZToKICAgICAgICAgICAgZm9yIGssIGFnZW50IGluIGVudW1lcmF0ZShzZWxmLmFnZW50cyk6CiAgICAgICAgICAgICAgICBhZ2VudC5zZXRfbG9nZ2VyKGxvZ2dlci5zdWJfbG9nZ2VyKGYnYWdlbnRfe2t9JykpCgogICAgZGVmIGFjdGlvbl9zdGVwKHNlbGYsIG9ic19hcnJheSk6CiAgICAgICAgcmV0dXJuIFthZ2VudC5hY3Rpb25fc3RlcChvYnMpIGZvciBhZ2VudCwgb2JzIGluIHppcChzZWxmLmFnZW50cywgb2JzX2FycmF5KV0KCiAgICBkZWYgc2V0X2RldmljZShzZWxmLCBkZXYpOgogICAgICAgIGZvciBhZ2VudCBpbiBzZWxmLmFnZW50czoKICAgICAgICAgICAgYWdlbnQuc2V0X2RldmljZShkZXYpCgogICAgZGVmIHNhdmVfc3RlcChzZWxmLCBvYnMsIGFjdCwgcmV3LCBkb25lKToKICAgICAgICAKICAgICAgICBpZiBucC5pc3NjYWxhcihkb25lKToKICAgICAgICAgICAgZG9uZSA9IG5wLmZ1bGwocmV3LnNoYXBlLCBkb25lLCBkdHlwZT0nYm9vbCcpCiAgICAgICAgZWxpZiBucC5wcm9kKHJldy5zaGFwZSkvbnAucHJvZChkb25lLnNoYXBlKSA9PSBsZW4oc2VsZi5hZ2VudHMpOgogICAgICAgICAgICBkb25lID0gKGRvbmUgKiBucC5vbmVzKChsZW4oc2VsZi5hZ2VudHMpLDEpKSkuYXN0eXBlKGRvbmUuZHR5cGUpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZG9uZS5yZXNoYXBlKHJldy5zaGFwZSkKCiAgICAgICAgZm9yIGssIGFnZW50IGluIGVudW1lcmF0ZShzZWxmLmFnZW50cyk6CiAgICAgICAgICAgIGFnZW50LnNhdmVfc3RlcChvYnNba10sIGFjdFtrXSwgcmV3W2tdLCBkb25lW2tdKQoKICAgIGRlZiBzdGFydF9lcGlzb2RlKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgZm9yIGFnZW50IGluIHNlbGYuYWdlbnRzOgogICAgICAgICAgICBhZ2VudC5zdGFydF9lcGlzb2RlKCphcmdzLCAqKmt3YXJncykKCiAgICBkZWYgZW5kX2VwaXNvZGUoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBmb3IgYWdlbnQgaW4gc2VsZi5hZ2VudHM6CiAgICAgICAgICAgIGFnZW50LmVuZF9lcGlzb2RlKCphcmdzLCAqKmt3YXJncykKCiAgICAjIEBwcm9wZXJ0eQogICAgIyBkZWYgYWN0aXZlKHNlbGYpOgogICAgIyAgICAgcmV0dXJuIG5wLmFycmF5KFthZ2VudC5hY3RpdmUgZm9yIGFnZW50IGluIHNlbGYuYWdlbnRzXSwgZHR5cGU9bnAuYm9vbCkKCiAgICBkZWYgX19sZW5fXyhzZWxmKToKICAgICAgICByZXR1cm4gbGVuKHNlbGYuYWdlbnRzKQoKICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgogICAgICAgIHJldHVybiBzZWxmLmFnZW50c1trZXldCgogICAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmFnZW50cy5fX2l0ZXJfXygpCgogICAgQGNvbnRleHRtYW5hZ2VyCiAgICBkZWYgZXBpc29kZShzZWxmKToKICAgICAgICBzZWxmLnN0YXJ0X2VwaXNvZGUoKQogICAgICAgIHlpZWxkIHNlbGYKICAgICAgICBzZWxmLmVuZF9lcGlzb2RlKCkKICAgICAgICAKICAgIGRlZiBzYXZlKHNlbGYsIHBhdGgsIGZvcmNlPUZhbHNlKToKICAgICAgICBwYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZXhwYW5kdXNlcihwYXRoKSkKICAgICAgICBtZXRhZGF0YV9maWxlID0gb3MucGF0aC5qb2luKHBhdGgsICdtdWx0aV9hZ2VudF9tZXRhLmpzb24nKQogICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHBhdGgpOgogICAgICAgICAgICBvcy5tYWtlZGlycyhwYXRoKQogICAgICAgIGlmIGZvcmNlIGFuZCBvcy5wYXRoLmlzZmlsZShtZXRhZGF0YV9maWxlKToKICAgICAgICAgICAgb3MucmVtb3ZlKG1ldGFkYXRhX2ZpbGUpCiAgICAgICAganNvbi5kdW1wKHsKICAgICAgICAgICAgJ25fYWdlbnRzJzogbGVuKHNlbGYuYWdlbnRzKQogICAgICAgICAgICB9LCBmcCA9IG9wZW4obWV0YWRhdGFfZmlsZSwndycpCiAgICAgICAgKQogICAgICAgIAogICAgICAgIGtleXMgPSBbZid7eH0nIGZvciB4IGluIHJhbmdlKGxlbihzZWxmLmFnZW50cykpXQoKICAgICAgICBmb3IgYWdlbnQsIGtleSBpbiB6aXAoc2VsZi5hZ2VudHMsIGtleXMpOgogICAgICAgICAgICBwcmludChvcy5wYXRoLmpvaW4ocGF0aCwga2V5KSkKICAgICAgICAgICAgYWdlbnQuc2F2ZShvcy5wYXRoLmpvaW4ocGF0aCwga2V5KSwgZm9yY2U9Zm9yY2UpCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgbG9hZChjbHMsIHBhdGgsIGFnZW50X2NsYXNzKToKICAgICAgICBwYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZXhwYW5kdXNlcihwYXRoKSkKICAgICAgICBtZXRhZGF0YV9maWxlID0gb3MucGF0aC5qb2luKHBhdGgsICdtdWx0aV9hZ2VudF9tZXRhLmpzb24nKQogICAgICAgIG1ldGFkYXRhID0ganNvbi5sb2FkKGZwPW9wZW4obWV0YWRhdGFfZmlsZSwncicpKQogICAgICAgIG5fYWdlbnRzID0gaW50KG1ldGFkYXRhWyduX2FnZW50cyddKQogICAgICAgIGtleXMgPSBbZid7eH0nIGZvciB4IGluIHJhbmdlKG5fYWdlbnRzKV0KCiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYWdlbnRfY2xhc3MsIGxpc3QpOgogICAgICAgICAgICBhZ2VudF9jbGFzc2VzID0gW2FnZW50X2NsYXNzIGZvciBfIGluIHJhbmdlKGxlbihrZXlzKSldCiAgICAgICAgZWxzZToKICAgICAgICAgICAgYWdlbnRfY2xhc3NlcyA9IGFnZW50X2NsYXNzCgogICAgICAgIGFnZW50cyA9IFsKICAgICAgICAgICAgYWdlbnRfY2xhc3MubG9hZChvcy5wYXRoLmpvaW4ocGF0aCwga2V5KSkKICAgICAgICAgICAgZm9yIGFnZW50X2NsYXNzLCBrZXkgaW4gemlwKGFnZW50X2NsYXNzZXMsIGtleXMpCiAgICAgICAgXQoKICAgICAgICByZXR1cm4gY2xzKCphZ2VudHMpCgo8fGZpbV9zdWZmaXh8PgoKICAgIEBjb250ZXh0bWFuYWdlcgogICAgZGVmIGVwaXNvZGUoc2VsZik6CiAgICAgICAgc2VsZi5zdGFydF9lcGlzb2RlKCkKPHxmaW1fZW5kfD4="]
["9e12d2d1d2a573a7ccc233d3eb4c54d93434fa4d-3","9e12d2d1d2a573a7ccc233d3eb4c54d93434fa4d","PHxmaW1fcHJlZml4fD4Keyd0eXBlJzonQ3VzdG9tRGlhbG9nJywKICAgICduYW1lJzonZGxnRmluZCcsCiAgICAndGl0bGUnOidGaW5kIGRpYWxvZycsCiAgICAnc2l6ZSc6KDM3MCwgMTIwKSwKICAgICdjb21wb25lbnRzJzogWwoKeyd0eXBlJzonU3RhdGljVGV4dCcsIAogICAgJ25hbWUnOidzdGNGaW5kV2hhdCcsIAogICAgJ3Bvc2l0aW9uJzooNywgMTApLCAKICAgICd0ZXh0JzonRmluZCBXaGF0OicsIAogICAgfSwKCnsndHlwZSc6J1RleHRGaWVsZCcsIAogICAgJ25hbWUnOidmbGRGaW5kJywgCiAgICAncG9zaXRpb24nOig3MCwgNyksIAogICAgJ3NpemUnOigxOTUsIC0xKSwgCiAgICB9LAoKeyd0eXBlJzonQnV0dG9uJywgCiAgICAnbmFtZSc6J2J0bkZpbmROZXh0JywgCiAgICAncG9zaXRpb24nOigyODAsIDUpLCAKICAgICdsYWJlbCc6J0ZpbmQgTmV4dCcsCiAgICAnaWQnOjUxMDAsCiAgICAnZGVmYXVsdCc6MSwKICAgIH0sCgp7J3R5cGUnOidCdXR0b24nLCAKICAgICduYW1lJzonYnRuQ2FuY2VsJywgCiAgICAncG9zaXRpb24nOigyODAsIDM1KSwgCiAgICAnbGFiZWwnOidDYW5jZWwnLAogICAgJ2lkJzo1MTAxLAogICAgfSwKCnsndHlwZSc6J0NoZWNrQm94JywgCiAgICAnbmFtZSc6J2Noa01hdGNoV2hvbGVXb3JkT25seScsIAogICAgJ3Bvc2l0aW9uJzooNywgMzUpLCAKICAgICdsYWJlbCc6J01hdGNoIHdob2xlIHdvcmQgb25seScsIAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICB9LAoKPHxmaW1fZW5kfD4="]
["9e2f155148cff9c500cd4d7c0dbd5f5f2b7fbd59-3","9e2f155148cff9c500cd4d7c0dbd5f5f2b7fbd59","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKCmRlZiBzdWJ0cmFjdCh2YWwxLCB2YWwyKToKICAgIHJldHVybiB2YWwxIC0gdmFsMgo8fGZpbV9zdWZmaXh8PgoKCmRlZiBhZGQodmFsMSwgdmFsMik6CiAgICByZXR1cm4gdmFsMSArIHZhbDIKPHxmaW1fZW5kfD4="]
["f5a02bc31626b7fe9a9f022542108797d4d373e3-2","f5a02bc31626b7fe9a9f022542108797d4d373e3","PHxmaW1fcHJlZml4fD4KZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGNvbW1vbgpmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgc3RyZWFtCgoKZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgogICAgcGFzcwoKCmRlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CiAgICBwYXlsb2FkMSA9IGInVGhpcyBmaXJzdCB0ZXh0IHNob3VsZCBiZSByZWNlaXZlZC4nCiAgICBwYXlsb2FkMiA9IGInVGhpcyBzZWNvbmQgdGV4dCAnCiAgICBwYXlsb2FkMyA9IGInc2hvdWxkIGJlIHJlY2VpdmVkLCB0b28uJwoKICAgICMgc2VuZCAnJwogICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKAogICAgICAgIHN0cmVhbS5jcmVhdGVfaGVhZGVyKGNvbW1vbi5PUENPREVfVEVYVCwgMCwgMSwgMCwgMCwgMCwgMCkpCgogICAgIyBzZW5kIHBheWxvYWQxCiAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoCiAgICAgICAgc3RyZWFtLmNyZWF0ZV9oZWFkZXIoY29tbW9uLk9QQ09ERV9URVhULCBsZW4ocGF5bG9hZDEpLCAxLCAwLCAwLCAwLCAwKSArCjx8ZmltX2hvbGV8PgogICAgIyBzZW5kICcnICsgJycKICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgKICAgICAgICBzdHJlYW0uY3JlYXRlX2hlYWRlcihjb21tb24uT1BDT0RFX1RFWFQsIDAsIDAsIDAsIDAsIDAsIDApKQogICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKAogICAgICAgIHN0cmVhbS5jcmVhdGVfaGVhZGVyKGNvbW1vbi5PUENPREVfQ09OVElOVUFUSU9OLCAwLCAxLCAwLCAwLCAwLCAwKSkKCiAgICAjIHNlbmQgcGF5bG9hZDIgKyAnJyArIHBheWxvYWQzCiAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoCiAgICAgICAgc3RyZWFtLmNyZWF0ZV9oZWFkZXIoY29tbW9uLk9QQ09ERV9URVhULCBsZW4ocGF5bG9hZDIpLCAwLCAwLCAwLCAwLCAwKSArCiAgICAgICAgcGF5bG9hZDIpCiAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoCiAgICAgICAgc3RyZWFtLmNyZWF0ZV9oZWFkZXIoY29tbW9uLk9QQ09ERV9DT05USU5VQVRJT04sIDAsIDAsIDAsIDAsIDAsIDApKQogICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKAogICAgICAgIHN0cmVhbS5jcmVhdGVfaGVhZGVyKGNvbW1vbi5PUENPREVfQ09OVElOVUFUSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihwYXlsb2FkMyksIDEsIDAsIDAsIDAsIDApICsgcGF5bG9hZDMpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcGF5bG9hZDEpCgo8fGZpbV9lbmR8Pg=="]
["f58462c82735e8dec0e693a5789eeb4259c85f53-3","f58462c82735e8dec0e693a5789eeb4259c85f53","PHxmaW1fcHJlZml4fD4KZnJvbSBjb2xsZWN0aW9ucy5fX2luaXRfXyBpbXBvcnQgT3JkZXJlZERpY3QKCmZyb20gZGphbmdvLnV0aWxzLmZ1bmN0aW9uYWwgaW1wb3J0IGNhY2hlZF9wcm9wZXJ0eQoKZnJvbSBsZXBvLnV0aWxzIGltcG9ydCBtYXliZV9yZXNvbHZlCgoKY2xhc3MgT3BlcmF0aW9uOgogICAgcGFyYW1ldGVyX2NsYXNzID0gTm9uZSAgIyBUaGlzIHNob3VsZCBuZXZlciBiZSB1c2VkCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFwaSwgcGF0aCwgbWV0aG9kLCBkYXRhKToKICAgICAgICAiIiIKICAgICAgICA6dHlwZSBhcGk6IGxlcG8uYXBpZGVmLmRvYy5BUElEZWZpbml0aW9uCiAgICAgICAgOnR5cGUgcGF0aDogbGVwby5hcGlkZWYucGF0aC5QYXRoCiAgICAgICAgOnR5cGUgbWV0aG9kOiBzdHIKICAgICAgICA6dHlwZSBkYXRhOiBkaWN0CiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5hcGkgPSBhcGkKICAgICAgICBzZWxmLnBhdGggPSBwYXRoCiAgICAgICAgc2VsZi5tZXRob2QgPSBtZXRob2QKICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCgogICAgQHByb3BlcnR5CiAgICBkZWYgaWQoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuZGF0YVsnb3BlcmF0aW9uSWQnXQoKICAgIEBjYWNoZWRfcHJvcGVydHkKICAgIGRlZiBwYXJhbWV0ZXJzKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIENvbWJpbmVkIHBhdGgtbGV2ZWwgYW5kIG9wZXJhdGlvbi1sZXZlbCBwYXJhbWV0ZXJzLgoKICAgICAgICBBbnkgJHJlZnMgYXJlIHJlc29sdmVkIGhlcmUuCgogICAgICAgIE5vdGUgdGhhdCB0aGlzIGltcGxlbWVudGF0aW9uIGRpZmZlcnMgZnJvbSB0aGUgc3BlYyBpbiB0aGF0IHdlIG9ubHkgdXNlCiAgICAgICAgdGhlIF9uYW1lXyBvZiBhIHBhcmFtZXRlciB0byBjb25zaWRlciBpdHMgdW5pcXVlbmVzcywgbm90IHRoZSBuYW1lIGFuZCBsb2NhdGlvbi4KCiAgICAgICAgVGhpcyBpcyBiZWNhdXNlIHdlIGVuZCB1cCBwYXNzaW5nIHBhcmFtZXRlcnMgdG8gdGhlIGhhbmRsZXIgYnkgbmFtZSBhbnl3YXksCiAgICAgICAgc28gYW55IGR1cGxpY2F0ZSBuYW1lcywgZXZlbiBpZiB0aGV5IGhhZCBkaWZmZXJlbnQgbG9jYXRpb25zLCB3b3VsZCBiZSBob3JyaWJseSBtYW5nbGVkLgoKICAgICAgICA6cnR5cGU6IGxpc3RbUGFyYW1ldGVyXQogICAgICAgICIiIgogICAgICAgIHJldHVybiBsaXN0KHNlbGYuZ2V0X3BhcmFtZXRlcl9kaWN0KCkudmFsdWVzKCkpCgogICAgZGVmIGdldF9wYXJhbWV0ZXJfZGljdChzZWxmKToKICAgICAgICBwYXJhbWV0ZXJzID0gT3JkZXJlZERpY3QoKQogICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gc2VsZi5fZ2V0X3JlZ3VsYXJfcGFyYW1ldGVycygpOgogICAgICAgICAgICBwYXJhbWV0ZXJzW3BhcmFtZXRlci5uYW1lXSA9IHBhcmFtZXRlcgogICAgICAgIHJldHVybiBwYXJhbWV0ZXJzCgogICAgZGVmIF9nZXRfcmVndWxhcl9wYXJhbWV0ZXJzKHNlbGYpOgogICAgICAgIGZvciBzb3VyY2UgaW4gKAogICAgICAgICAgICBzZWxmLnBhdGgubWFwcGluZy5nZXQoJ3BhcmFtZXRlcnMnLCAoKSksCiAgICAgICAgICAgIHNlbGYuZGF0YS5nZXQoJ3BhcmFtZXRlcnMnLCB7fSksCiAgICAgICAgKToKICAgICAgICAgICAgc291cmNlID0gbWF5YmVfcmVzb2x2ZShzb3VyY2UsIHNlbGYuYXBpLnJlc29sdmVfcmVmZXJlbmNlKQogICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIHNvdXJjZToKICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9kYXRhID0gbWF5YmVfcmVzb2x2ZShwYXJhbWV0ZXIsIHNlbGYuYXBpLnJlc29sdmVfcmVmZXJlbmNlKQogICAgICAgICAgICAgICAgcGFyYW1ldGVyID0gc2VsZi5wYXJhbWV0ZXJfY2xhc3MoZGF0YT1wYXJhbWV0ZXJfZGF0YSwgb3BlcmF0aW9uPXNlbGYsIGFwaT1zZWxmLmFwaSkKICAgICAgICAgICAgICAgIHlpZWxkIHBhcmFtZXRlcgoKICAgIGRlZiBfZ2V0X292ZXJyaWRhYmxlKHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKICAgICAgICAjIFRPRE86IFRoaXMgcHJvYmVzIGEgbGl0dGxlIHRvbyBkZWVwbHkgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoZXNlIG9iamVjdHMsIEkgdGhpbmsuLi4KICAgICAgICBmb3Igb2JqIGluICgKICAgICAgICAgICAgc2VsZi5kYXRhLAo8fGZpbV9ob2xlfD4KICAgICAgICApOgogICAgICAgICAgICBpZiBrZXkgaW4gb2JqOgogICAgICAgICAgICAgICAgcmV0dXJuIG9ialtrZXldCiAgICAgICAgcmV0dXJuIGRlZmF1bHQKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgc2VsZi5wYXRoLm1hcHBpbmcsCiAgICAgICAgICAgIHNlbGYuYXBpLmRvYywKPHxmaW1fZW5kfD4="]
["a981bd216b73eb4aca756d1bed7b3988e12a36a5-2","a981bd216b73eb4aca756d1bed7b3988e12a36a5","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQojIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQojIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCiMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQojIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCiMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgppbXBvcnQgbHo0X3Jhdwo8fGZpbV9lbmR8Pg=="]
["2715c9c70a5c851030d5e789efbfb85ab7c52165-2","2715c9c70a5c851030d5e789efbfb85ab7c52165","PHxmaW1fcHJlZml4fD4KZnJvbSBhYmMgaW1wb3J0IEFCQywgYWJzdHJhY3RtZXRob2QKZnJvbSBhbmltYWwgaW1wb3J0IEFuaW1hbAoKCmNsYXNzIE1hbWlmZXJvKEFuaW1hbCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgdGFtYW5ob19wYXNzbywgdm9sdW1lX3NvbSk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyh0YW1hbmhvX3Bhc3NvKQogICAgICAgIHNlbGYuX192b2x1bWVfc29tID0gdm9sdW1lX3NvbQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIHZvbHVtZV9zb20oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX192b2x1bWVfc29tCgo8fGZpbV9ob2xlfD4KICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIHByb2R1emlyX3NvbShzZWxmKToKICAgICAgICBwYXNzCjx8ZmltX3N1ZmZpeHw+CiAgICBAdm9sdW1lX3NvbS5zZXR0ZXIKICAgIGRlZiB2b2x1bWVfc29tKHNlbGYsIHZvbHVtZV9zb20pOgogICAgICAgIHNlbGYuX192b2x1bWVfc29tID0gdm9sdW1lX3NvbQoKPHxmaW1fZW5kfD4="]
["9b1853fc25529f67bec092c4be1835e96ac35581-3","9b1853fc25529f67bec092c4be1835e96ac35581","PHxmaW1fcHJlZml4fD4KIyBjcmVhdGVfc3ByZWFkc2hlZXQucHkKCmltcG9ydCB4bHN4d3JpdGVyCgoKZGVmIGNyZWF0ZV93b3JrYm9vayhwYXRoKToKICAgIHdvcmtib29rID0geGxzeHdyaXRlci5Xb3JrYm9vayhwYXRoKQogICAgc2hlZXQgPSB3b3JrYm9vay5hZGRfd29ya3NoZWV0KG5hbWU9IkhlbGxvIikKICAgIGRhdGEgPSBbWyJQeXRob24gMTAxIiwgMTAwMF0sCiAgICAgICAgICAgIFsiSnVweXRlciBOb3RlYm9vayAxMDEiLCA0MDBdLAogICAgICAgICAgICBbIlJlcG9ydExhYjogUERGIFByb2Nlc3NpbmciLCAyNTBdCiAgICBdCgogICAgcm93ID0gMAogICAgY29sID0gMAogICAgZm9yIGJvb2ssIHNhbGVzIGluIGRhdGE6CiAgICAgICAgc2hlZXQud3JpdGUocm93LCBjb2wsIGJvb2spCiAgICAgICAgc2hlZXQud3JpdGUocm93LCBjb2wgKyAxLCBzYWxlcykKICAgICAgICByb3cgKz0gMQoKICAgIHNoZWV0MiA9IHdvcmtib29rLmFkZF93b3Jrc2hlZXQobmFtZT0iV29ybGQiKQogICAgd29ya2Jvb2suY2xvc2UoKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIGNyZWF0ZV93b3JrYm9vaygiaGVsbG8ueGxzeCIpCjx8ZmltX2VuZHw+"]
["b517f36b91719fb32251cfffb4255c3f60ae5a35-2","b517f36b91719fb32251cfffb4255c3f60ae5a35","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIiIiVW5pdCB0ZXN0IHBhY2thZ2UgZm9yIG1lcmxpbi4iIiIKCmltcG9ydCBtZXJsaW5zYXIudHJhaW4sIG1lcmxpbnNhci50ZXN0Cjx8ZmltX2VuZHw+"]
["8d8b495b11d6578591af533249f903cee541b997-1","8d8b495b11d6578591af533249f903cee541b997","PHxmaW1fcHJlZml4fD4KIiIiCmxhbWJkYXRhIC0gYSBEYXRhIFNjaWVuY2UgSGVscGVyCiIiIgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcyBhcyBwZApmcm9tIC5UcmFpblRlc3RWYWwgaW1wb3J0IHRyYWluX3Rlc3RfdmFsCmZyb20gLmxvYWRfYWR1bHRfZGF0YSBpbXBvcnQgKgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gLlRyYWluVGVzdFZhbF8yIGltcG9ydCB0cmFpbl90ZXN0X3ZhbF8yCgpWRVJTSU9OID0gMAoKPHxmaW1fZW5kfD4="]
["1f04607a2f8a5bb995bcb08c8248c546a4f39635-4","1f04607a2f8a5bb995bcb08c8248c546a4f39635","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCgpmcm9tIGZsYXNrIGltcG9ydCBjdXJyZW50X2FwcApmcm9tIHdlcmt6ZXVnLnNlY3VyaXR5IGltcG9ydCBnZW5lcmF0ZV9wYXNzd29yZF9oYXNoLCBjaGVja19wYXNzd29yZF9oYXNoCmZyb20gc3FsYWxjaGVteS5vcm0gaW1wb3J0IHZhbGlkYXRlcywgcmVsYXRpb25zaGlwCmZyb20gc3FsYWxjaGVteSBpbXBvcnQgRm9yZWlnbktleQoKZnJvbSBjbGllbnQuZGF0YWJhc2UgaW1wb3J0IGRiLCBCYXNlTW9kZWwsIFVUQ05PVywgaXNvZm10X2RhdGUKZnJvbSBjbGllbnQubWVzc2FnZXMubW9kZWxzIGltcG9ydCBNZXNzYWdlCgoKY2xhc3MgQWRkcmVzcyhCYXNlTW9kZWwpOgogICAgIiIiCiAgICBBZGRyZXNzIGJvb2sgbWFwcGluZyBvZiBzdGVsbGFyIGFkZHJlc3NlcyB0byB1c2VybmFtZXMKICAgICIiIgoKICAgIF9fdGFibGVuYW1lX18gPSAiYWRkcmVzc2VzIgogICAgdXNlcm5hbWUgPSBkYi5Db2x1bW4oZGIuU3RyaW5nKDY0KSwgaW5kZXg9VHJ1ZSwgbnVsbGFibGU9RmFsc2UpCiAgICBhZGRyZXNzID0gZGIuQ29sdW1uKGRiLlN0cmluZygxMjgpLCBpbmRleD1UcnVlLCBudWxsYWJsZT1GYWxzZSwgdW5pcXVlPVRydWUpCiAgICB1c2VyX2lkID0gZGIuQ29sdW1uKGRiLkludGVnZXIsIEZvcmVpZ25LZXkoInVzZXJzLmlkIikpCiAgICB1c2VyID0gcmVsYXRpb25zaGlwKCJVc2VyIiwgYmFja19wb3B1bGF0ZXM9ImFkZHJlc3NlcyIpCgogICAgIyBUT0RPOiBhZGQgdXNlcm5hbWUrdXNlciBjb25zdHJhaW50IHNvIHRoYXQgdXNlcm5hbWVzIGFyZSB1bmlxdWUgaW4gZWFjaCB1c2VyJ3MgImFkZHJlc3Mgc3BhY2UiCiAgICBAdmFsaWRhdGVzKCJ1c2VybmFtZSIpCiAgICBkZWYgbm9ybWFsaXplX3VzZXJuYW1lKHNlbGYsIGtleSwgdXNlcm5hbWUpOgogICAgICAgICIiIgogICAgICAgIG5vcm1hbGl6ZXMgdXNlcm5hbWUgdG8gYWxsIGxvd2VyY2FzZSB0byBzaW1wbGlmeSBxdWVyeWluZwogICAgICAgICIiIgogICAgICAgIGlmIG5vdCB1c2VybmFtZToKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIHJldHVybiB1c2VybmFtZS5zdHJpcCgpLmxvd2VyKCkKCiAgICBAdmFsaWRhdGVzKCJhZGRyZXNzIikKICAgIGRlZiB2YWxpZGF0ZV9hZGRyZXNzKHNlbGYsIGtleSwgYWRkcmVzcyk6CiAgICAgICAgaWYgbm90IGFkZHJlc3M6CiAgICAgICAgICAgIHJldHVybgoKICAgICAgICBpZiBsZW4oYWRkcmVzcykgIT0gNTY6CiAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJJbnZhbGlkIHN0ZWxsYXIgYWRkcmVzcy4iKQoKICAgICAgICByZXR1cm4gYWRkcmVzcwoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gIjxBbGlhcyB7fT4iLmZvcm1hdChzZWxmLnVzZXJuYW1lKQoKICAgIGRlZiBfX2pzb25fXyhzZWxmKToKICAgICAgICBqc29uID0gc3VwZXIoKS5fX2pzb25fXygpCiAgICAgICAganNvbi51cGRhdGUoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJ1c2VybmFtZSI6IHNlbGYudXNlcm5hbWUsCiAgICAgICAgICAgICAgICAiYWRkcmVzcyI6IHNlbGYuYWRkcmVzcywKICAgICAgICAgICAgICAgICJ1c2VyX2xpbmsiOiBzZWxmLnVzZXIudXNlcm5hbWUsCiAgICAgICAgICAgIH0KICAgICAgICApCiAgICAgICAgcmV0dXJuIGpzb24KCgpjbGFzcyBVc2VyKEJhc2VNb2RlbCk6CiAgICBfX3RhYmxlbmFtZV9fID0gInVzZXJzIgogICAgdXNlcm5hbWUgPSBkYi5Db2x1bW4oZGIuU3RyaW5nKDY0KSwgaW5kZXg9VHJ1ZSwgbnVsbGFibGU9RmFsc2UsIHVuaXF1ZT1UcnVlKQogICAgZW1haWxfYWRkcmVzcyA9IGRiLkNvbHVtbihkYi5TdHJpbmcoMTIwKSwgaW5kZXg9VHJ1ZSwgbnVsbGFibGU9VHJ1ZSwgdW5pcXVlPVRydWUpCiAgICBwaG9uZV9udW1iZXIgPSBkYi5Db2x1bW4oZGIuU3RyaW5nKDMyKSwgaW5kZXg9VHJ1ZSwgdW5pcXVlPVRydWUpCiAgICBmaXJzdF9uYW1lID0gZGIuQ29sdW1uKGRiLlN0cmluZyg2NCksIGluZGV4PVRydWUsIG51bGxhYmxlPUZhbHNlKQogICAgbGFzdF9uYW1lID0gZGIuQ29sdW1uKGRiLlN0cmluZyg2NCksIGluZGV4PVRydWUsIG51bGxhYmxlPVRydWUpCiAgICBqb2luZWQgPSBkYi5Db2x1bW4oZGIuRGF0ZSgpLCBzZXJ2ZXJfZGVmYXVsdD1VVENOT1coKSwgaW5kZXg9VHJ1ZSkKICAgIHBhc3N3b3JkX2hhc2ggPSBkYi5Db2x1bW4oZGIuU3RyaW5nKDEyOCkpCiAgICBwYXNzd29yZF9yZXF1aXJlZCA9IGRiLkNvbHVtbihkYi5Cb29sZWFuKCksIHNlcnZlcl9kZWZhdWx0PSJmYWxzZSIpCiAgICBrZXlwYWlyX3NlZWQgPSBkYi5Db2x1bW4oZGIuU3RyaW5nKDEyOCksIHNlcnZlcl9kZWZhdWx0PSJOdWxsIikKICAgIGFkZHJlc3NlcyA9IHJlbGF0aW9uc2hpcCgiQWRkcmVzcyIsIG9yZGVyX2J5PUFkZHJlc3MuaWQsIGJhY2tfcG9wdWxhdGVzPSJ1c2VyIikKICAgIG1lc3NhZ2VzID0gcmVsYXRpb25zaGlwKCJNZXNzYWdlIiwgb3JkZXJfYnk9TWVzc2FnZS5pZCwgYmFja19wb3B1bGF0ZXM9InVzZXIiKQoKICAgIEB2YWxpZGF0ZXMoImVtYWlsX2FkZHJlc3MiKQogICAgZGVmIHZhbGlkYXRlX2VtYWlsKHNlbGYsIGtleSwgZW1haWwpOgogICAgICAgIGlmIG5vdCBlbWFpbDoKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIGlmIG5vdCByZS5tYXRjaChyIlteQF0rQFteQF0rXC5bXkBdKyIsIGVtYWlsKToKICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlByb3ZpZGVkIGVtYWlsIGlzIG5vdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MiKQoKICAgICAgICByZXR1cm4gZW1haWwKCiAgICBkZWYgc2V0X3Bhc3N3b3JkKHNlbGYsIHBhc3N3b3JkKToKICAgICAgICBzZWxmLnBhc3N3b3JkX2hhc2ggPSBnZW5lcmF0ZV9wYXNzd29yZF9oYXNoKHBhc3N3b3JkKQoKICAgIGRlZiBjaGVja19wYXNzd29yZChzZWxmLCBwYXNzd29yZCk6CiAgICAgICAgcmV0dXJuIGNoZWNrX3Bhc3N3b3JkX2hhc2goc2VsZi5wYXNzd29yZF9oYXNoLCBwYXNzd29yZCkKCiAgICBAdmFsaWRhdGVzKCJrZXlwYWlyX3NlZWQiKQogICAgZGVmIHZhbGlkYXRlX2tleXBhaXIoc2VsZiwga2V5LCBrcF9zZWVkKToKICAgICAgICBpZiBub3Qga3Bfc2VlZDoKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgaWYgc2VsZi5rZXlwYWlyX3NlZWQgIT0gIk51bGwiOgogICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigia2V5cGFpciBjYW4gb25seSBiZSBnZW5lcmF0ZWQgb25jZS4iKQogICAgICAgIHJldHVybiBrcF9zZWVkCgogICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgIHJldHVybiAiPFVzZXIge30+Ii5mb3JtYXQoc2VsZi51c2VybmFtZSkKCiAgICBkZWYgX19qc29uX18oc2VsZik6CiAgICAgICAganNvbiA9IHN1cGVyKCkuX19qc29uX18oKQogICAgICAgIGpzb24udXBkYXRlKAogICAgICAgICAgICB7Cjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgImpvaW5lZCI6IGlzb2ZtdF9kYXRlKHNlbGYuc3RhcnRlZF9vbiksCiAgICAgICAgICAgIH0KICAgICAgICApCiAgICAgICAgcmV0dXJuIGpzb24KPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICJ1c2VybmFtZSI6IHNlbGYudXNlcm5hbWUsCiAgICAgICAgICAgICAgICAiZW1haWxfYWRkcmVzcyI6IHNlbGYuZW1haWxfYWRkcmVzcyBvciAiLS0iLAogICAgICAgICAgICAgICAgImZpcnN0X25hbWUiOiBzZWxmLmZpcnN0X25hbWUsCiAgICAgICAgICAgICAgICAibGFzdF9uYW1lIjogc2VsZi5sYXN0X25hbWUgb3IgIi0tIiwKPHxmaW1fZW5kfD4="]
["b5886fd95ac2d8c764cf953c374579064e40ef9d-2","b5886fd95ac2d8c764cf953c374579064e40ef9d","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uc2hvcnRjdXRzIGltcG9ydCByZW5kZXIKZnJvbSAuZm9ybXMgaW1wb3J0IERhdGFGb3JtCmZyb20gLmNyYXdsZXIud2ViX2NyYXdsZXIgaW1wb3J0ICoKCgojIENyZWF0ZSB5b3VyIHZpZXdzIGhlcmUuCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRlZiBkYXRhX3ZpZXcocmVxdWVzdCk6CiAgZmluYWxfZGF0YSA9IGRpY3QoKQogIG1vdmUgPSBkaWN0KCkKICBpZiByZXF1ZXN0Lm1ldGhvZCA9PSAnUE9TVCc6Cjx8ZmltX2VuZHw+"]
["272221fcb6b8cb5b16043c9dd8fcbd89cae7ce26-3","272221fcb6b8cb5b16043c9dd8fcbd89cae7ce26","PHxmaW1fcHJlZml4fD4KIiIiCkNvcHlyaWdodCAyMDE2IE1pY2hhZWwgU3BpZWdlbCwgV2lsaGVsbSBLbGVpbWluZ2VyCgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiIiIgoKIiIiCkRlZmluZSB0aGUgaGllcmFyY2hpY2FsIG1hcHBpbmdzIGZyb20gVVJMcyB0byB2aWV3cy4KPHxmaW1faG9sZXw+Cgpmcm9tIHNtYXJ0X2hlYXRpbmcgaW1wb3J0IHZpZXdzCgpyb3V0ZXIgPSByb3V0ZXJzLkRlZmF1bHRSb3V0ZXIoKQpyb3V0ZXIucmVnaXN0ZXIocidyZXNpZGVuY2UnLCB2aWV3cy5SZXNpZGVuY2VWaWV3U2V0KQpyb3V0ZXIucmVnaXN0ZXIocidyZXNpZGVuY2UvKD9QPHJlc2lkZW5jZV9waz5bXi8uXSspL3VzZXInLCB2aWV3cy5Vc2VyVmlld1NldCkKcm91dGVyLnJlZ2lzdGVyKHIncmVzaWRlbmNlLyg/UDxyZXNpZGVuY2VfcGs+W14vLl0rKS9yb29tJywgdmlld3MuUm9vbVZpZXdTZXQpCnJvdXRlci5yZWdpc3RlcihyJ3Jlc2lkZW5jZS8oP1A8cmVzaWRlbmNlX3BrPlteLy5dKykvcm9vbS8oP1A8cm9vbV9waz5bXi8uXSspLycKICAgICAgICAgICAgICAgIHIndGhlcm1vc3RhdCcsIHZpZXdzLlRoZXJtb3N0YXRWaWV3U2V0KQpyb3V0ZXIucmVnaXN0ZXIocidyZXNpZGVuY2UvKD9QPHJlc2lkZW5jZV9waz5bXi8uXSspL3Jvb20vKD9QPHJvb21fcGs+W14vLl0rKS8nCiAgICAgICAgICAgICAgICByJ3RoZXJtb3N0YXQvKD9QPHRoZXJtb3N0YXRfcGs+W14vLl0rKS90ZW1wZXJhdHVyZScsIHZpZXdzLlRlbXBlcmF0dXJlVmlld1NldCkKcm91dGVyLnJlZ2lzdGVyKHIncmVzaWRlbmNlLyg/UDxyZXNpZGVuY2VfcGs+W14vLl0rKS9yb29tLyg/UDxyb29tX3BrPlteLy5dKykvJwogICAgICAgICAgICAgICAgcid0aGVybW9zdGF0Lyg/UDx0aGVybW9zdGF0X3BrPlteLy5dKykvbWV0YV9lbnRyeScsIHZpZXdzLlRoZXJtb3N0YXRNZXRhRW50cnlWaWV3U2V0KQpyb3V0ZXIucmVnaXN0ZXIocidyZXNpZGVuY2UvKD9QPHJlc2lkZW5jZV9waz5bXi8uXSspL3Jvb20vKD9QPHJvb21fcGs+W14vLl0rKS8nCiAgICAgICAgICAgICAgICByJ3RoZXJtb3N0YXQvKD9QPHRoZXJtb3N0YXRfcGs+W14vLl0rKS9oZWF0aW5nX3RhYmxlJywgdmlld3MuSGVhdGluZ1RhYmxlRW50cnlWaWV3U2V0KQpyb3V0ZXIucmVnaXN0ZXIocidkZXZpY2UvcmFzcGJlcnJ5Jywgdmlld3MuUmFzcGJlcnJ5RGV2aWNlVmlld1NldCkKcm91dGVyLnJlZ2lzdGVyKHInZGV2aWNlL3RoZXJtb3N0YXQnLCB2aWV3cy5UaGVybW9zdGF0RGV2aWNlVmlld1NldCkKCnVybHBhdHRlcm5zID0gWwogICAgdXJsKHInXicsIGluY2x1ZGUocm91dGVyLnVybHMpKSwKXQo8fGZpbV9zdWZmaXh8PgoiIiIKCmZyb20gZGphbmdvLmNvbmYudXJscyBpbXBvcnQgdXJsLCBpbmNsdWRlCmZyb20gcmVzdF9mcmFtZXdvcmsgaW1wb3J0IHJvdXRlcnMKPHxmaW1fZW5kfD4="]
["cdb6e9b21b0037f351421d0902be11334b643a00-1","cdb6e9b21b0037f351421d0902be11334b643a00","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN1YnByb2Nlc3MgYXMgc3AKaW1wb3J0IGpzb24KaW1wb3J0IHN5cwoKVE9PTENIQUlOID0gJ25pZ2h0bHktMjAyMi0wMi0xNycKQ01EID0gJyAnLmpvaW4oc3lzLmFyZ3ZbMTpdKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpzeXNyb290ID0gc3AuY2hlY2tfb3V0cHV0KGYnJChydXN0dXAgd2hpY2ggLS10b29sY2hhaW4ge1RPT0xDSEFJTn0gcnVzdGMpIC0tcHJpbnQgc3lzcm9vdCcsIHNoZWxsPVRydWUpLmRlY29kZSgndXRmLTgnKS5zdHJpcCgpCmNtZCA9IGYnY2FyZ28gK3tUT09MQ0hBSU59IGZsb3dpc3RyeSAtLWJlbmNoIHtDTUR9ID4gL2Rldi9udWxsJwpwID0gc3AucnVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXNwLlBJUEUpCnByZWZpeCA9ICdSdW5uaW5nIGAnCjx8ZmltX2VuZHw+"]
["f5637e4abc3bebfc3841d22fffde0709532efb2d-1","f5637e4abc3bebfc3841d22fffde0709532efb2d","PHxmaW1fcHJlZml4fD4KIyBWaXN1YWxpemUgcmVzdWx0cwoKIyBpbXBvcnQgcGFja2FnZXMKaW1wb3J0IHBpY2tsZQpmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHB5cGxvdCBhcyBwbHQKCiMgUmVhZCBpbiByZXN1bHRzCndpdGggb3BlbignYWxsX3Njb3Jlcy5wJywgJ3JiJykgYXMgYWxsX3Njb3Jlc19mOgogIGFsbF9zY29yZXMgPSBwaWNrbGUubG9hZChhbGxfc2NvcmVzX2YpCgp3aXRoIG9wZW4oJ3NlbGVjdGVkX3Njb3Jlcy5wJywgJ3JiJykgYXMgc2VsZWN0ZWRfc2NvcmVzX2Y6CiAgc2VsZWN0ZWRfc2NvcmVzID0gcGlja2xlLmxvYWQoc2VsZWN0ZWRfc2NvcmVzX2YpCgoKcHJpbnQgJ3Zpc3VhbGl6aW5nIGFsbF9zY29yZXMnCnZhbHMgPSBhbGxfc2NvcmVzCm1heF9iaW4gPSBpbnQobWF4KHZhbHMpKSArIDEzCmJpbnMgPSByYW5nZSgwLG1heF9iaW4sMSkKcGx0LnhsaW0oWzAsIG1heF9iaW5dKQpwbHQuaGlzdCh2YWxzLCBiaW5zPWJpbnMsIGFscGhhPTAuNSkKcGx0LnRpdGxlKCdHLXNjb3JlIGRpc3RyaWJ1dGlvbicpCnBsdC54bGFiZWwoJ0ctc2NvcmUnKQpwbHQueWxhYmVsKCdjb3VudCcpCnBsdC55c2NhbGUoJ2xvZycsIG5vbnBvc3k9J2NsaXAnKQpwbHQuc2F2ZWZpZygnYWxsX3Njb3Jlc19sb2cucGRmJywgYmJveF9pbmNoZXM9J3RpZ2h0JykKCnBsdC5jbGYoKQoKcHJpbnQgJ3Zpc3VhbGl6aW5nIGFsbF9zY29yZXMnCnZhbHMgPSBhbGxfc2NvcmVzCm1pbl9iaW4gPSAxCm1heF9iaW4gPSBpbnQobWF4KHZhbHMpKSArIDEzCmJpbnMgPSByYW5nZShtaW5fYmluLG1heF9iaW4sMSkKcGx0LnhsaW0oW21pbl9iaW4sIG1heF9iaW5dKQpwbHQuaGlzdCh2YWxzLCBiaW5zPWJpbnMsIGFscGhhPTAuNSkKcGx0LnRpdGxlKCdHLXNjb3JlIGRpc3RyaWJ1dGlvbicpCnBsdC54bGFiZWwoJ0ctc2NvcmUnKQpwbHQueWxhYmVsKCdjb3VudCcpCnBsdC5zYXZlZmlnKCdhbGxfc2NvcmVzX2xpbi5wZGYnLCBiYm94X2luY2hlcz0ndGlnaHQnKQoKcGx0LmNsZigpCgpwcmludCAndmlzdWFsaXppbmcgc2VsZWN0ZWRfc2NvcmVzJwp2YWxzID0gc2VsZWN0ZWRfc2NvcmVzCm1heF9iaW4gPSBpbnQobWF4KHZhbHMpKSArIDEzCmJpbnMgPSByYW5nZSgwLG1heF9iaW4sMSkKcGx0LnhsaW0oWzAsIG1heF9iaW5dKQpwbHQuaGlzdCh2YWxzLCBiaW5zPWJpbnMsIGFscGhhPTAuNSkKcGx0LnRpdGxlKCdHLXNjb3JlIGRpc3RyaWJ1dGlvbicpCnBsdC54bGFiZWwoJ0ctc2NvcmUnKQpwbHQueWxhYmVsKCdjb3VudCcpCnBsdC55c2NhbGUoJ2xvZycsIG5vbnBvc3k9J2NsaXAnKQo8fGZpbV9ob2xlfD4KcHJpbnQgJ3Zpc3VhbGl6aW5nIHNlbGVjdGVkX3Njb3JlcycKdmFscyA9IHNlbGVjdGVkX3Njb3JlcwptaW5fYmluID0gMQptYXhfYmluID0gaW50KG1heCh2YWxzKSkgKyAxMwpiaW5zID0gcmFuZ2UobWluX2JpbixtYXhfYmluLDEpCnBsdC54bGltKFttaW5fYmluLCBtYXhfYmluXSkKcGx0Lmhpc3QodmFscywgYmlucz1iaW5zLCBhbHBoYT0wLjUpCnBsdC50aXRsZSgnRy1zY29yZSBkaXN0cmlidXRpb24nKQpwbHQueGxhYmVsKCdHLXNjb3JlJykKcGx0LnlsYWJlbCgnY291bnQnKQpwbHQuc2F2ZWZpZygnc2VsZWN0ZWRfc2NvcmVzX2xpbi5wZGYnLCBiYm94X2luY2hlcz0ndGlnaHQnKQo8fGZpbV9zdWZmaXh8PgpwbHQuc2F2ZWZpZygnc2VsZWN0ZWRfc2NvcmVzX2xvZy5wZGYnLCBiYm94X2luY2hlcz0ndGlnaHQnKQoKcGx0LmNsZigpCgo8fGZpbV9lbmR8Pg=="]
["b571e6d80cc82da875263eed43ba103f0a100985-4","b571e6d80cc82da875263eed43ba103f0a100985","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgbWF0aAoKeCA9IFtpIC8gMTAuMCBmb3IgaSBpbiByYW5nZSgtMTAwLCA0MDApXQoKZGVmIGYoeCk6CiAgICByZXR1cm4gbWF0aC5leHAoeCkgKiBtYXRoLmxvZygxICsgbWF0aC5leHAoLXgpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cgp5ID0gW2YoaSkgZm9yIGkgaW4geF0KCnBsdC50aXRsZSgiV3lrcmVzIGZ1bmtjamkgZih4KSIpCjx8ZmltX2VuZHw+"]
["cdb54cdc287b77f3b3b13706946d949ba0ff24b5-3","cdb54cdc287b77f3b3b13706946d949ba0ff24b5","PHxmaW1fcHJlZml4fD4KZGVmIHh5el90aGVyZShzdHIpOgogIGk9MAogIHdoaWxlICJ4eXoiIGluIHN0cltpOl06CiAgICBpZiBzdHJbaS0xK3N0cltpOl0uaW5kZXgoInh5eiIpXSAhPSAiLiI6CiAgICAgIHJldHVybiBUcnVlCjx8ZmltX2hvbGV8PgogIHJldHVybiBGYWxzZQo8fGZpbV9zdWZmaXh8PgogICAgaSArPSBzdHJbaTpdLmluZGV4KCJ4eXoiKSsyCjx8ZmltX2VuZHw+"]
["2751090636252a22c49335d59f6075b675ae3281-1","2751090636252a22c49335d59f6075b675ae3281",{"$cut":{"chars":46184,"head":"PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiMgRm9ybSBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZWQgZnJvbSByZWFkaW5nIHVpIGZpbGUgJ2NvY29tby51aScKIwojIENyZWF0ZWQgYnk6IFB5UXQ1IFVJIGNvZGUgZ2VuZXJhdG9yIDUuMTMuMgojCiMgV0FSTklORyEgQWxsIGNoYW5nZXMgbWFkZSBpbiB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0IQoKCmZyb20gUHlRdDUgaW1wb3J0IFF0Q29yZSwgUXRHdWksIFF0V2lkZ2V0cwpmcm9tIGNvY29tb21hdGggaW1wb3J0IENvY29tb01hdGgKCmNsYXNzIFVpX0RpYWxvZyhvYmplY3QpOgogICAgZGVmIHNldHVwVWkoc2VsZiwgRGlhbG9nKToKICAgICAgICBEaWFsb2cuc2V0T2JqZWN0TmFtZSgiRGlhbG9nIikKICAgICAgICBEaWFsb2cucmVzaXplKDc3NCwgNzIwKQogICAgICAgIHNlbGYuZ3JpZExheW91dCA9IFF0V2lkZ2V0cy5RR3JpZExheW91dChEaWFsb2cpCiAgICAgICAgc2VsZi5ncmlkTGF5b3V0LnNldE9iamVjdE5hbWUoImdyaWRMYXlvdXQiKQogICAgICAgIHNlbGYudGV4dEVkaXQgPSBRdFdpZGdldHMuUVRleHRFZGl0KERpYWxvZykKICAgICAgICBzZWxmLnRleHRFZGl0LnNldE9iamVjdE5hbWUoInRleHRFZGl0IikKICAgICAgICBzZWxmLmdyaWRMYXlvdXQuYWRkV2lkZ2V0KHNlbGYudGV4dEVkaXQsIDAsIDAsIDEsIDEpCiAgICAgICAgc2VsZi5ob3Jpem9udGFsTGF5b3V0XzExID0gUXRXaWRnZXRzLlFIQm94TGF5b3V0KCkKICAgICAgICBzZWxmLmhvcml6b250YWxMYXlvdXRfMTEuc2V0T2JqZWN0TmFtZSgiaG9yaXpvbnRhbExheW91dF8xMSIpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dF8xNyA9IFF0V2lkZ2V0cy5RVkJveExheW91dCgpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dF8xNy5zZXRPYmplY3ROYW1lKCJ2ZXJ0aWNhbExheW91dF8xNyIpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dF83ID0gUXRXaWRnZXRzLlFWQm94TGF5b3V0KCkKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0Xzcuc2V0T2JqZWN0TmFtZSgidmVydGljYWxMYXlvdXRfNyIpCiAgICAgICAgc2VsZi5sYWJlbF8yID0gUXRXaWRnZXRzLlFMYWJlbChEaWFsb2cpCiAgICAgICAgZm9udCA9IFF0R3VpLlFGb250KCkKICAgICAgICBmb250LnNldFBvaW50U2l6ZSgxNCkKICAgICAgICBmb250LnNldEJvbGQoVHJ1ZSkKICAgICAgICBmb250LnNldEl0YWxpYyhGYWxzZSkKICAgICAgICBmb250LnNldFVuZGVybGluZShGYWxzZSkKICAgICAgICBmb250LnNldFdlaWdodCg3NSkKICAgICAgICBzZWxmLmxhYmVsXzIuc2V0Rm9udChmb250KQogICAgICAgIHNlbGYubGFiZWxfMi5zZXRBbGlnbm1lbnQoUXRDb3JlLlF0LkFsaWduQm90dG9tIHwgUXRDb3JlLlF0LkFsaWduTGVhZGluZyB8IFF0Q29yZS5RdC5BbGlnbkxlZnQpCiAgICAgICAgc2VsZi5sYWJlbF8yLnNldE9iamVjdE5hbWUoImxhYmVsXzIiKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXRfNy5hZGRXaWRnZXQoc2VsZi5sYWJlbF8yKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXQgPSBRdFdpZGdldHMuUVZCb3hMYXlvdXQoKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXQuc2V0T2JqZWN0TmFtZSgidmVydGljYWxMYXlvdXQiKQogICAgICAgIHNlbGYucmFkaW9CdXR0b25fMyA9IFF0V2lkZ2V0cy5RUmFkaW9CdXR0b24oRGlhbG9nKQo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0LmFkZFdpZGdldChzZWxmLnJhZGlvQnV0dG9uXzMpCiAgICAgICAgc2VsZi5yYWRpb0J1dHRvbiA9IFF0V2lkZ2V0cy5RUmFkaW9CdXR0b24oRGlhbG9nKQogICAgICAgIHNlbGYucmFkaW9CdXR0b24uc2V0Q2hlY2tlZChUcnVlKQogICAgICAgIHNlbGYucmFkaW9CdXR0b24uc2V0T2JqZWN0TmFtZSgicmFkaW9CdXR0b24iKQogICAgICAgIHNlbGYuYnV0dG9uR3JvdXAuYWRkQnV0dG9uKHNlbGYucmFkaW9CdXR0b24pCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dC5hZGRXaWRnZXQoc2VsZi5yYWRpb0J1dHRvbikKICAgICAgICBzZWxmLnJhZGlvQnV0dG9uXzIgPSBRdFdpZGdldHMuUVJhZGlvQnV0dG9uKERpYWxvZykKICAgICAgICBzZWxmLnJhZGlvQnV0dG9uXzIuc2V0T2JqZWN0TmFtZSgicmFkaW9CdXR0b25fMiIpCiAgICAgICAgc2VsZi5idXR0b25Hcm91cC5hZGRCdXR0b24oc2VsZi5yYWRpb0J1dHRvbl8yKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXQuYWRkV2lkZ2V0KHNlbGYucmFkaW9CdXR0b25fMikKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0XzcuYWRkTGF5b3V0KHNlbGYudmVydGljYWxMYXlvdXQpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dF8xNy5hZGRMYXlvdXQoc2VsZi52ZXJ0aWNhbExheW91dF83KQogICAgICAgIHNwYWNlckl0ZW0gPSBRdFdpZGdldHMuUVNwYWNlckl0ZW0oMjAsIDY4LCBRdFdpZGdldHMuUVNpemVQb2xpY3kuTWluaW11bSwgUXRXaWRnZXRzLlFTaXplUG9saWN5LkV4cGFuZGluZykKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0XzE3LmFkZEl0ZW0oc3BhY2VySXRlbSkKICAgICAgICBzZWxmLmhvcml6b250YWxMYXlvdXRfMTEuYWRkTGF5b3V0KHNlbGYudmVydGljYWxMYXlvdXRfMTcpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dF8xOSA9IFF0V2lkZ2V0cy5RVkJveExheW91dCgpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dF8xOS5zZXRPYmplY3ROYW1lKCJ2ZXJ0aWNhbExheW91dF8xOSIpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dF84ID0gUXRXaWRnZXRzLlFWQm94TGF5b3V0KCkKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0Xzguc2V0T2JqZWN0TmFtZSgidmVydGljYWxMYXlvdXRfOCIpCiAgICAgICAgc2VsZi5sYWJlbF81ID0gUXRXaWRnZXRzLlFMYWJlbChEaWFsb2cpCiAgICAgICAgZm9udCA9IFF0R3VpLlFGb250KCkKICAgICAgICBmb250LnNldFBvaW50U2l6ZSgxNCkKICAgICAgICBmb250LnNldEJvbGQoVHJ1ZSkKICAgICAgICBmb250LnNldFdlaWdodCg3NSkKICAgICAgICBzZWxmLmxhYmVsXzUuc2V0Rm9udChmb250KQogICAgICAgIHNlbGYubGFi"}}]
["f55a0e7f0a6b756320c26a62385610fe9fa30c18-3","f55a0e7f0a6b756320c26a62385610fe9fa30c18",{"$cut":{"chars":42212,"head":"PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uc2hvcnRjdXRzIGltcG9ydCBnZXRfb2JqZWN0X29yXzQwNCwgcmVuZGVyCmZyb20gZGphbmdvLnVybHMgaW1wb3J0IE5vUmV2ZXJzZU1hdGNoCmZyb20gZGphbmdvLmNvcmUgaW1wb3J0IHNlcmlhbGl6ZXJzCmZyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlCmZyb20gZGphbmdvLmh0dHAgaW1wb3J0IEh0dHBSZXNwb25zZSwgSHR0cDQwNApmcm9tIHdzZ2lyZWYudXRpbCBpbXBvcnQgRmlsZVdyYXBwZXIKZnJvbSBkamFuZ28udGVtcGxhdGUuY29udGV4dCBpbXBvcnQgUmVxdWVzdENvbnRleHQKZnJvbSBkamFuZ28udGVtcGxhdGUgaW1wb3J0IGxvYWRlciwgVGVtcGxhdGVEb2VzTm90RXhpc3QKZnJvbSBkamFuZ28udmlld3MuZGVjb3JhdG9ycy5jYWNoZSBpbXBvcnQgY2FjaGVfcGFnZQpmcm9tIGRqYW5nby5jb3JlLmNhY2hlIGltcG9ydCBjYWNoZQpmcm9tIGRqYW5nby51dGlscy5jYWNoZSBpbXBvcnQgcGF0Y2hfcmVzcG9uc2VfaGVhZGVycwpmcm9tIGRqYW5nby50ZW1wbGF0ZS5kZWZhdWx0ZmlsdGVycyBpbXBvcnQgc2x1Z2lmeQpmcm9tIGRqYW5nby5jb25mIGltcG9ydCBzZXR0aW5ncwpmcm9tIGRqYW5nby5jb3JlLmV4Y2VwdGlvbnMgaW1wb3J0IE9iamVjdERvZXNOb3RFeGlzdApmcm9tIGZ1bmN0b29scyBpbXBvcnQgY21wX3RvX2tleQoKaW1wb3J0IGpzb24KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IGRpZmZsaWIKaW1wb3J0IHJlCmltcG9ydCBvcwoKZnJvbSByZWFkZXIudGVtcGxhdGV0YWdzLnJlYWRlcl9leHRyYXMgaW1wb3J0IHRyYW5zZm9ybV9wZXJzZXVzX3RleHQKZnJvbSByZWFkZXIubW9kZWxzIGltcG9ydCBXb3JrLCBXb3JrQWxpYXMsIERpdmlzaW9uLCBWZXJzZSwgQXV0aG9yLCBSZWxhdGVkV29yaywgV2lraUFydGljbGUsIExleGljb25FbnRyeSwgV29ya1NvdXJjZQpmcm9tIHJlYWRlci5sYW5ndWFnZV90b29scy5ncmVlayBpbXBvcnQgR3JlZWsKZnJvbSByZWFkZXIgaW1wb3J0IGxhbmd1YWdlX3Rvb2xzCmZyb20gcmVhZGVyLnNob3J0Y3V0cyBpbXBvcnQgc3RyaW5nX2xpbWl0ZXIsIHVuaXF1ZWZ5LCBjb252ZXJ0X3htbF90b19odG1sNQpmcm9tIHJlYWRlci51dGlscyBpbXBvcnQgZ2V0X3dvcmRfZGVzY3JpcHRpb25zCmZyb20gcmVhZGVyLmNvbnRlbnRzZWFyY2ggaW1wb3J0IHNlYXJjaF92ZXJzZXMsIHNlYXJjaF9zdGF0cywgR3JlZWtWYXJpYXRpb25zCmZyb20gcmVhZGVyLmxhbmd1YWdlX3Rvb2xzIGltcG9ydCBub3JtYWxpemVfdW5pY29kZQpmcm9tIHJlYWRlci5ib29rY292ZXIgaW1wb3J0IG1ha2VDb3ZlckltYWdlCmZyb20gcmVhZGVyLnV0aWxzLndvcmtfaGVscGVycyBpbXBvcnQgZ2V0X2RpdmlzaW9uX2FuZF92ZXJzZSwgZ2V0X2NoYXB0ZXJfZm9yX2RpdmlzaW9uLCBnZXRfY2hhcHRlcnNfbGlzdCwgZ2V0X2RpdmlzaW9uLCBnZXRfd29ya19wYWdlX2luZm8KCiMgVHJ5IHRvIGltcG9ydCB0aGUgZVB1YkV4cG9ydCBidXQgYmUgZm9yZ2l2aW5nIGlmIHRoZSBuZWNlc3NhcnkgZGVwZW5kZW5jaWVzIGRvIG5vdCBleGlzdAp0cnk6CiAgICBmcm9tIHJlYWRlci5lYm9vayBpbXBvcnQgZVB1YkV4cG9ydCwgTW9iaUNvbnZlcnQKZXhjZXB0IEltcG9ydEVycm9yOgogICAgIyBDYW5ub3QgaW1wb3J0IGVQdWJFeHBvcnQgYW5kIE1vYmlDb252ZXJ0LCB0aGlzIG1lYW5zIHdlIHdvbid0IGJlIGFibGUgdG8gbWFrZSBlYm9vayBmaWxlcwogICAgZVB1YkV4cG9ydCA9IE5vbmUKICAgIE1vYmlDb252ZXJ0ID0gTm9uZQoKIyBQZXIgUkZDIDQ2Mjc6IGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzQ2MjcudHh0CkpTT05fQ09OVEVOVF9UWVBFID0gImFwcGxpY2F0aW9uL2pzb24iCgojIEdldCBhbiBpbnN0YW5jZSBvZiBhIGxvZ2dlcgpsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCiMgVGhlc2UgdGltZXMgYXJlIGZvciBtYWtpbmcgdGhlIGNhY2hpbmcgZGVjb3JhdG9ycyBjbGVhcmVyCm1pbnV0ZXMgPSA2MApob3VycyA9IDYwICogbWludXRlcwpkYXlzID0gMjQgKiBob3Vycwptb250aHMgPSAzMCAqIGRheXMKeWVhcnMgPSAzNjUuMjUgKiBkYXlzCgoKZGVmIHNpbmdsZV9wYWdlX2FwcChyZXF1ZXN0LCAqKmt3YXJncyk6CiAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICdzcGEuaHRtbCcsCiAgICAgICAgICAgICAgICAgIHt9LAogICAgICAgICAgICAgICAgICBSZXF1ZXN0Q29udGV4dChyZXF1ZXN0KSkKCgpkZWYgZG93bmxvYWRfd29yayhyZXF1ZXN0LCB0aXRsZT1Ob25lLCk6CgogICAgaWYgJ3JlZnJlc2gnIGluIHJlcXVlc3QuR0VUIGFuZCByZXF1ZXN0LkdFVFsncmVmcmVzaCddLnN0cmlwKCkubG93ZXIoKSBpbiBbIjEiLCAidHJ1ZSIsICJ0IiwgIiIsIE5vbmVdOgogICAgICAgIHVzZV9jYWNoZWQgPSBGYWxzZQogICAgZWxzZToKICAgICAgICB1c2VfY2FjaGVkID0gVHJ1ZQoKICAgICMgR2V0IHRoZSBmb3JtYXQgdGhhdCB0aGUgdXNlciBpcyByZXF1ZXN0aW5nCiAgICBpZiAnZm9ybWF0JyBpbiByZXF1ZXN0LkdFVDoKICAgICAgICBib29rX2Zvcm1hdCA9IHJlcXVlc3QuR0VUWydmb3JtYXQnXQoKICAgICMgRW5zdXJlIHRoZSBmb3JtYXQgaXMgdmFsaWQKICAgIGJvb2tfZm9ybWF0ID0gYm9va19mb3JtYXQuc3RyaXAoKS5sb3dlcigpCgogICAgbWltZV90eXBlcyA9IHsnZXB1Yic6ICdhcHBsaWNhdGlvbi9lcHViK3ppcCcsCiAgICAgICAgICAgICAgICAgICdtb2JpJzogJ2FwcGxpY2F0aW9uL3gtbW9iaXBvY2tldC1lYm9vaycKICAgICAgICAgICAgICAgICAgfQoKICAgIGlmIGJvb2tfZm9ybWF0IG5vdCBpbiBtaW1lX3R5cGVzOgogICAgICAgIHJhaXNlIEh0dHA0MDQoJ05vIGVCb29rIGZpbGUgZm91bmQgZm9yIHRoZSBnaXZlbiBmb3JtYXQnKQoKICAgICMgVHJ5IHRvIGdldCB0aGUgd29yawogICAgd29ya19hbGlhcyA9IGdldF9vYmplY3Rfb3JfNDA0KFdvcmtBbGlhcywgdGl0bGVfc2x1Zz10aXRsZSkKICAgIHdvcmsgPSB3b3JrX2FsaWFzLndvcmsKCiAgICAjIE1ha2UgdGhlIGRpcmVjdG9yeQogICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc2V0dGluZ3MuR0VO"}}]
["1934aa432f3384ed4c677674329929a27fdf33b6-2","1934aa432f3384ed4c677674329929a27fdf33b6","PHxmaW1fcHJlZml4fD4KZnJvbSBhcGlzdGFyLnNlcnZlci5jb21wb25lbnRzIGltcG9ydCBDb21wb25lbnQKCmZyb20gc2VydmljZXMuZGF0YWJhc2UgaW1wb3J0IERhdGFiYXNlCmZyb20gdXRpbHMuZGF0YWJhc2UgaW1wb3J0IGluaXRfZGF0YWJhc2Vfc2VydmljZQo8fGZpbV9ob2xlfD4KICAgICAgICByZXR1cm4gaW5pdF9kYXRhYmFzZV9zZXJ2aWNlKCkKCgpjb21wb25lbnRzID0gW0RhdGFiYXNlQ29tcG9uZW50KCldCjx8ZmltX3N1ZmZpeHw+CgoKY2xhc3MgRGF0YWJhc2VDb21wb25lbnQoQ29tcG9uZW50KToKICAgIGRlZiByZXNvbHZlKHNlbGYpIC0+IERhdGFiYXNlOgo8fGZpbV9lbmR8Pg=="]
["197d55860cd74f00ce44b9b58ed17bbb2cd98423-1","197d55860cd74f00ce44b9b58ed17bbb2cd98423","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAoKCmRlZiBmaXJzdF9yb3VuZCh0ZWFtcywgeCk6CiAgICAKICAgIGZvciBqIGluIHJhbmdlKHRlYW1zKToKICAgICAgICBwbHQuaGxpbmVzKGosIHgtMSwgeC0wLjUpCiAgICAKCmRlZiBuZXh0X3JvdW5kcyh0ZWFtcywgeCwgeSwgeiwgayk6CiAgICBmb3IgaSBpbiByYW5nZSh0ZWFtcy8vMik6CiAgICAgICAgcGx0LmhsaW5lcyh5IC0gMC41ICsgIDIgKiBpICogeSwgeC0wLjUsIHgpCiAgICAgICAgcGx0LnZsaW5lcyh4IC0wLjUsICBrICsgMiAqIGkgKiB5LCB6ICsgMiAqIGkgKiB5KQogICAgCiMgICAgIGZvciBpbmR4LCBuYW1lIGluIGVudW1lcmF0ZSh0dXBsZV9uYW1lc1s6dGVhbXMvLzJdKToKIyAgICAgICAgIHBsdC5hbm5vdGF0ZShuYW1lWzBdLCAoMC43NSArIG51bSwgNCAqIGluZHggKyAwLjUyNSkpCiMgICAgICAgICBwbHQuYW5ub3RhdGUobmFtZVsxXSwgKDAuNzUgKyBudW0sIDQgKiBpbmR4ICsgMi41MjUpKQogICAgICAgIAogICAgaWYgdGVhbXMgPT0gMToKICAgICAgICBwcmludCgnVG91cm5hbWVudDonKSAgCiAgICBlbHNlOgogICAgICAgIG5leHRfcm91bmRzKHRlYW1zLy8yLCB4KzAuNSwgeSAqIDIsIDIgKiB6ICsgMC41LCAyICogayArIDAuNSkKCmRlZiBtdWx0aXBsZXQobnVtKToKICAgIGlmIG51bSAlIDIgIT0gMDoKICAgICAgICByYWlzZSBFeGNlcHRpb24gKCdQbGVhc2UgZW50ZXIgYSBtdWx0aXBsZSBvZiB0d28nKQogICAgZWxpZiBudW0gPT0gMjoKICAgICAgICBwYXNzCiAgICBlbHNlOgogICAgICAgIG11bHRpcGxldChudW0gLy8yKQpkZWYgcGxvdF9icmFja2V0KHRlYW1zKToKICAgIG11bHRpcGxldCh0ZWFtcykKICAgIGZpcnN0X3JvdW5kKHRlYW1zLCAxKQogICAgbmV4dF9yb3VuZHModGVhbXMsIDEsIDEsIDEsIDApCgoKCiMgZGVmIHBsb3RfcGxheWluKCk6CiAgICAKIyBkZWYgYW5ub3RhdGVfZmlyc3QodGVhbXMsIHR1cGxlX25hbWVzKToKIyAgICAgZm9yIGluZHgsIG5hbWUgaW4gZW51bWVyYXRlKHR1cGxlX25hbWVzWzBdKToKIyAgICAgICAgIHBsdC5hbm5vdGF0ZShuYW1lWzFdLCAoMCwgMiAqIGluZHggKyAwLjEyNSkpCiMgICAgICAgICBwbHQuYW5ub3RhdGUobmFtZVswXSwgKDAsIDIgKiBpbmR4ICsgMS4xMjUpKQoKIyBkZWYgYW5ub3RhdGVfbmV4dChhLCBLLCBCLCBBLHR1cGxlX25hbWVzKToKIyAgICAgaWYgYSArIDEgPiBsZW4odHVwbGVfbmFtZXMpOgojICAgICAgICAgcHJpbnQoJ0RvbmUhJykKIyAgICAgZWxzZToKIyAgICAgICAgIGZvciBpbmR4LCBuYW1lIGluIGVudW1lcmF0ZSh0dXBsZV9uYW1lc1thXSk6CiMgICAgICAgICAgICAgcGx0LmFubm90YXRlKG5hbWVbMF0sICgwLjYgKyBLLCAwLjc1ICsgQiArIDQgKiBBICogaW5keCkpCiMgICAgICAgICAgICAgcGx0LmFubm90YXRlKG5hbWVbMV0sICgwLjYgKyBLLCAyLjc1ICsgMyAqIEIgKyA0ICogQSAqIGluZHgpKQojICAgICAgICAgYW5ub3RhdGVfbmV4dChhICsgMSwgSyArIDAuNSwgMiAqIEIgKyAxLCAyICogQSwgdHVwbGVfbmFtZXMpCiAgICAgICAgCiMgZGVmIGZpcnN0X3JvdW5kKHRlYW1zLCB4KToKICAgIAojICAgICBmb3IgaiBpbiByYW5nZSh0ZWFtcyk6CiMgICAgICAgICBwbHQuaGxpbmVzKGosIHgtMSwgeC0wLjUpCiAgICAKCiMgZGVmIG5leHRfcm91bmRzKHRlYW1zLCB4LCB5LCB6LCBrKToKIyAgICAgZm9yIGkgaW4gcmFuZ2UodGVhbXMvLzIpOgojICAgICAgICAgcGx0LmhsaW5lcyh5IC0gMC41ICsgIDIgKiBpICogeSwgeC0wLjUsIHgpCiMgICAgICAgICBwbHQudmxpbmVzKHggLTAuNSwgIGsgKyAyICogaSAqIHksIHogKyAyICogaSAqIHkpCiMgICAgIGlmIHRlYW1zID09IDE6CiMgICAgICAgICBwcmludCgnVG91cm5hbWVudDonKSAgCiMgICAgIGVsc2U6CiMgICAgICAgICBuZXh0X3JvdW5kcyh0ZWFtcy8vMiwgeCswLjUsIHkgKiAyLCAyICogeiArIDAuNSwgMiAqIGsgKyAwLjUpCgojIGRlZiBtdWx0aXBsZXQobnVtKToKIyAgICAgaWYgbnVtICUgMiAhPSAwOgojICAgICAgICAgcmFpc2UgRXhjZXB0aW9uICgnUGxlYXNlIGVudGVyIGEgbXVsdGlwbGUgb2YgdHdvJykKIyAgICAgZWxpZiBudW0gPT0gMjoKIyAgICAgICAgIHBhc3MKIyAgICAgZWxzZToKIyAgICAgICAgIG11bHRpcGxldChudW0gLy8yKQoKIyBkZWYgcGxvdF9icmFja2V0KHRlYW1zLCB0dXBsZV9uYW1lcyk6CiMgICAgIG11bHRpcGxldCh0ZWFtcykKIyAgICAgZmlyc3Rfcm91bmQodGVhbXMsIDEpCiMgICAgIGFubm90YXRlX2ZpcnN0KHRlYW1zLHR1cGxlX25hbWVzKQojICAgICBuZXh0X3JvdW5kcyh0ZWFtcywgMSwgMSwgMSwgMCkKIyAjICAgICBhbm5vdGF0ZV9uZXh0KDEsIDAsIDAsIDEsIHR1cGxlX25hbWVzKQojICAgICBwbHQueHRpY2tzKFtdKQojICAgICBwbHQueXRpY2tzKFtdKQojICAgICBwbHQuYXhpcygnb2ZmJykKCgoKCgoKCgoKIyB0b3VyX2RpY3QgPSB0b3VybmV5LmZpbHRlcihjb2woJ1NlYXNvbicpID09IDIwMTgpIFwKIyAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjb2woJ0ZpcnN0Um91bmQnKSA9PSAxKSBcCiMgICAgICAgICAgICAgICAgICAgIC50b1BhbmRhcygpW1snV1RlYW1OYW1lJywgJ1dTZWVkVGVhbU5hbWUnLCdMVGVhbU5hbWUnLCAgJ0xTZWVkVGVhbU5hbWUnXV0udG9fZGljdCgpCgojIHJvdW5kXzEgPSBzb3J0ZWQobGlzdCh6aXAodG91cl9kaWN0WydXVGVhbU5hbWUnXS52YWx1ZXMoKSwgdG91cl9kaWN0WydMVGVhbU5hbWUnXS52YWx1ZXMoKSkpCiMgICAgICAgICAgICAgICAgICAsIGtleSA9IGxhbWJkYSBhOiBhWzBdKQojICMgcHJpbnQocm91bmRfMSkKIyB0b3VyX2RpY3QgPSB0b3VybmV5LmZpbHRlcihjb2woJ1NlYXNvbicpID09IDIwMTgpIFwKIyAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjb2woJ1NlY29uZFJvdW5kJykgPT0gMSkuZmlsdGVyKGNvbCgncGxheV9pbl9nYW1lcycpICE9IDEpIFwKIyAgICAgICAgICAgICAgICAgICAgLnRvUGFuZGFzKClbWydXVGVhbU5hbWUnLCAnV1NlZWRUZWFtTmFtZScsJ0xUZWFtTmFtZScsICAnTFNlZWRUZWFtTmFtZSddXS50b19kaWN0KCkKIyByb3VuZF8yID0gbGlzdCh6aXAodG91cl9kaWN0WydXU2VlZFRlYW1OYW1lJ10udmFsdWVzKCksIHRvdXJfZGljdFsnTFNlZWRUZWFtTmFtZSddLnZhbHVlcygpKSkKCiMgdG91cl9kaWN0ID0gdG91cm5leS5maWx0ZXIoY29sKCdTZWFzb24nKSA9PSAyMDE4KSBcCiMgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoY29sKCdTd2VldDE2JykgPT0gMSkuZmlsdGVyKGNvbCgncGxheV9pbl9nYW1lcycpICE9IDEpIFwKIyAgICAgICAgICAgICAgICAgICAgLnRvUGFuZGFzKClbWydXVGVhbU5hbWUnLCAnV1NlZWRUZWFtTmFtZScsJ0xUZWFtTmFtZScsICAnTFNlZWRUZWFtTmFtZSddXS50b19kaWN0KCkKIyBzd2VldF8xNiA9IHNvcnRlZChsaXN0KHppcCh0b3VyX2RpY3RbJ1dUZWFtTmFtZSddLnZhbHVlcygpLCB0b3VyX2RpY3RbJ0xUZWFtTmFtZSddLnZhbHVlcygpKSkKIyAgICAgICAgICAgICAgICAgICwgIGtleSA9IGxhbWJkYSBhOiBhWzBdKQoKIyB0b3VyX2RpY3QgPSB0b3VybmV5LmZpbHRlcihjb2woJ1NlYXNvbicpID09IDIwMTgpIFwKIyAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjb2woJ0VsaXRlOCcpID09IDEpLmZpbHRlcihjb2woJ3BsYXlfaW5fZ2FtZXMnKSAhPSAxKSBcCiMgICAgICAgICAgICAgICAgICAgIC50b1BhbmRhcygpW1snV1RlYW1OYW1lJywgJ1dTZWVkVGVhbU5hbWUnLCdMVGVhbU5hbWUnLCAgJ0xTZWVkVGVhbU5hbWUnXV0udG9fZGljdCgpCiMgZWxpdGVfOCA9IHNvcnRlZChsaXN0KHppcCh0b3VyX2RpY3RbJ1dUZWFtTmFtZSddLnZhbHVlcygpLCB0b3VyX2RpY3RbJ0xUZWFtTmFtZSddLnZhbHVlcygpKSkKIyAgICAgICAgICAgICAgICAgLCAga2V5ID0gbGFtYmRhIGE6IGFbMF0pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiMgdG91cl9kaWN0ID0gdG91cm5leS5maWx0ZXIoY29sKCdTZWFzb24nKSA9PSAyMDE4KSBcCiMgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoY29sKCdGaW5hbEZvdXInKSA9PSAxKS5maWx0ZXIoY29sKCdwbGF5X2luX2dhbWVzJykgIT0gMSkgXAojICAgICAgICAgICAgICAgICAgICAudG9QYW5kYXMoKVtbJ1dUZWFtTmFtZScsICdXU2VlZFRlYW1OYW1lJywnTFRlYW1OYW1lJywgICdMU2VlZFRlYW1OYW1lJ11dLnRvX2RpY3QoKQo8fGZpbV9lbmR8Pg=="]
["27b88dc4448593c15783abae6f5809fb5d393dbc-5","27b88dc4448593c15783abae6f5809fb5d393dbc","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGJhc2U2NAppbXBvcnQganNvbgoKZnJvbSBkamFuZ28uc2hvcnRjdXRzIGltcG9ydCByZWRpcmVjdApmcm9tIGRqYW5nby51cmxzIGltcG9ydCByZXZlcnNlCmZyb20gZGphbmdvLnZpZXdzLmdlbmVyaWMgaW1wb3J0IEZvcm1WaWV3LCBUZW1wbGF0ZVZpZXcKZnJvbSBkamFuZ29fZ292X25vdGlmeS5tZXNzYWdlIGltcG9ydCBOb3RpZnlFbWFpbE1lc3NhZ2UKZnJvbSBub3RpZmljYXRpb25zX3B5dGhvbl9jbGllbnQuZXJyb3JzIGltcG9ydCBIVFRQRXJyb3IKCmZyb20gYWxwaGEucHJvdmlkZXJzLm1vZGVscyBpbXBvcnQgUHJvdmlkZXIKZnJvbSBhbHBoYS5yZWdpc3RyYXRpb24gaW1wb3J0IGZvcm1zIGFzIHJlZ2lzdHJhdGlvbl9mb3JtcwoKCmNsYXNzIFByZWFtYmxlKFRlbXBsYXRlVmlldyk6CiAgICB0ZW1wbGF0ZV9uYW1lID0gInJlZ2lzdHJhdGlvbi9wcmVhbWJsZS5odG1sIgoKICAgIGRlZiBnZXQoc2VsZiwgcmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzZWxmLnJlcXVlc3Quc2Vzc2lvbi5jbGVhcigpCiAgICAgICAgc2VsZi5yZXF1ZXN0LnNlc3Npb25bInJlZ2lzdHJhdGlvbiJdID0ge30KICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXQocmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKQoKCmNsYXNzIE9yZ2FuaXNhdGlvblNlbGVjdElucHV0KFRlbXBsYXRlVmlldyk6CiAgICB0ZW1wbGF0ZV9uYW1lID0gInJlZ2lzdHJhdGlvbi9vcmdhbmlzYXRpb25fc2VsZWN0X2lucHV0Lmh0bWwiCgogICAgZGVmIGdldF9jb250ZXh0X2RhdGEoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgIGNvbnRleHQgPSBzdXBlcihPcmdhbmlzYXRpb25TZWxlY3RJbnB1dCwgc2VsZikuZ2V0X2NvbnRleHRfZGF0YSgqKmt3YXJncykKICAgICAgICBwcm92aWRlcnMgPSBQcm92aWRlci5vYmplY3RzLmFsbCgpLnZhbHVlcygibmFtZSIpLm9yZGVyX2J5KCJuYW1lIikKICAgICAgICBjb250ZXh0WyJwcm92aWRlcnMiXSA9IFtwcm92aWRlclsibmFtZSJdIGZvciBwcm92aWRlciBpbiBwcm92aWRlcnNdCiAgICAgICAgcmV0dXJuIGNvbnRleHQKCiAgICBkZWYgZ2V0KHNlbGYsIHJlcXVlc3QsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgcmVxdWVzdC5zZXNzaW9uWyJyZWdpc3RyYXRpb24iXS5wb3AoInNlbGVjdGVkX3Byb3ZpZGVyX2lkIiwgTm9uZSkKICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXQocmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKQoKICAgIGRlZiBwb3N0KHNlbGYsIHJlcXVlc3QsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgY29udGV4dCA9IHNlbGYuZ2V0X2NvbnRleHRfZGF0YSgqKmt3YXJncykKICAgICAgICBwcm92aWRlciA9IHNlbGYucmVxdWVzdC5QT1NULmdldCgiaW5wdXQtYXV0b2NvbXBsZXRlIiwgTm9uZSkKCiAgICAgICAgdHJ5OgogICAgICAgICAgICAjIEhhdmUgdG8gc2VhcmNoIGZvciB0aGUgcHJvdmlkZXIgYnkgbmFtZSBoZXJlCiAgICAgICAgICAgIHByb3ZpZGVyID0gUHJvdmlkZXIub2JqZWN0cy5nZXQobmFtZT1wcm92aWRlcikKICAgICAgICBleGNlcHQgUHJvdmlkZXIuRG9lc05vdEV4aXN0OgogICAgICAgICAgICAjIE5vIHByb3ZpZGVyLCByZWxvYWQgdGhlIHNlYXJjaCB3aXRoIGEgZ2VuZXJhbCBlcnJvcgogICAgICAgICAgICBjb250ZXh0WyJlcnJvciJdID0gVHJ1ZQogICAgICAgICAgICByZXR1cm4gc2VsZi5yZW5kZXJfdG9fcmVzcG9uc2UoY29udGV4dCkKICAgICAgICBlbHNlOgogICAgICAgICAgICAjIEFkZCBwcm92aWRlciB0byB0aGUgc2Vzc2lvbgogICAgICAgICAgICByZXF1ZXN0LnNlc3Npb25bInJlZ2lzdHJhdGlvbiJdWyJzZWxlY3RlZF9wcm92aWRlcl9pZCJdID0gcHJvdmlkZXIuaWQKICAgICAgICAgICAgcmV0dXJuIHJlZGlyZWN0KHJldmVyc2UoInJlZ2lzdHJhdGlvbjpvcmdhbmlzYXRpb25fc2VsZWN0X3JldmlldyIpKQoKCmNsYXNzIE9yZ2FuaXNhdGlvblNlbGVjdFJldmlldyhGb3JtVmlldyk6CiAgICB0ZW1wbGF0ZV9uYW1lID0gInJlZ2lzdHJhdGlvbi9vcmdhbmlzYXRpb25fc2VsZWN0X3Jldmlldy5odG1sIgogICAgZm9ybV9jbGFzcyA9IHJlZ2lzdHJhdGlvbl9mb3Jtcy5Db25maXJtT3JnRGV0YWlsc0Zvcm0KCiAgICBkZWYgZ2V0X2NvbnRleHRfZGF0YShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgY29udGV4dCA9IHN1cGVyKCkuZ2V0X2NvbnRleHRfZGF0YSgqKmt3YXJncykKICAgICAgICBjb250ZXh0WyJwcm92aWRlciJdID0gZ2V0X3Byb3ZpZGVyX2Zyb21fc2Vzc2lvbihyZXF1ZXN0PXNlbGYucmVxdWVzdCkKICAgICAgICByZXR1cm4gY29udGV4dAoKICAgIGRlZiBmb3JtX3ZhbGlkKHNlbGYsIGZvcm0pOgogICAgICAgIGlmIGZvcm0uY2xlYW5lZF9kYXRhWyJjb25maXJtIl0gPT0gIm5vIjoKICAgICAgICAgICAgcmV0dXJuIHJlZGlyZWN0KHJldmVyc2UoInJlZ2lzdHJhdGlvbjpvcmdhbmlzYXRpb25fc2VsZWN0X2lucHV0IikpCgogICAgICAgIHJldHVybiByZWRpcmVjdChyZXZlcnNlKCJyZWdpc3RyYXRpb246cGVyc29uX2RldGFpbHNfaW5wdXQiKSkKCgpjbGFzcyBPcmdhbmlzYXRpb25TZWxlY3RDb3VudHJpZXMoRm9ybVZpZXcpOgogICAgdGVtcGxhdGVfbmFtZSA9ICJhbHBoYS9mb3Jtcy9nZW5lcmljX2Zvcm0uaHRtbCIKICAgIGZvcm1fY2xhc3MgPSByZWdpc3RyYXRpb25fZm9ybXMuQ291bnRyaWVzRm9ybQoKICAgIGRlZiBmb3JtX3ZhbGlkKHNlbGYsIGZvcm0pOgogICAgICAgIGlmICJFIiBub3QgaW4gZm9ybS5jbGVhbmVkX2RhdGFbImNvdW50cmllcyJdOgogICAgICAgICAgICByZXR1cm4gcmVkaXJlY3QocmV2ZXJzZSgicmVnaXN0cmF0aW9uOm5vdF9lbGlnaWJsZSIpKQogICAgICAgIHJldHVybiByZWRpcmVjdChyZXZlcnNlKCJyZWdpc3RyYXRpb246cGVyc29uX2RldGFpbHNfaW5wdXQiKSkKCgpjbGFzcyBPcmdhbmlzYXRpb25DcmVhdGVDb3VudHJpZXMoRm9ybVZpZXcpOgogICAgdGVtcGxhdGVfbmFtZSA9ICJhbHBoYS9mb3Jtcy9nZW5lcmljX2Zvcm0uaHRtbCIKICAgIGZvcm1fY2xhc3MgPSByZWdpc3RyYXRpb25fZm9ybXMuQ291bnRyaWVzRm9ybQoKICAgIGRlZiBmb3JtX3ZhbGlkKHNlbGYsIGZvcm0pOgogICAgICAgIGlmICJFIiBub3QgaW4gZm9ybS5jbGVhbmVkX2RhdGFbImNvdW50cmllcyJdOgogICAgICAgICAgICByZXR1cm4gcmVkaXJlY3QocmV2ZXJzZSgicmVnaXN0cmF0aW9uOm5vdF9lbGlnaWJsZSIpKQogICAgICAgIHJldHVybiByZWRpcmVjdChyZXZlcnNlKCJyZWdpc3RyYXRpb246b3JnYW5pc2F0aW9uX2NyZWF0ZV9wb3N0Y29kZSIpKQoKCmNsYXNzIE9yZ2FuaXNhdGlvbkNyZWF0ZVBvc3Rjb2RlKEZvcm1WaWV3KToKICAgIHRlbXBsYXRlX25hbWUgPSAiYWxwaGEvZm9ybXMvZ2VuZXJpY19mb3JtLmh0bWwiCiAgICBmb3JtX2NsYXNzID0gcmVnaXN0cmF0aW9uX2Zvcm1zLlBvc3Rjb2RlRm9ybQoKICAgIGRlZiBmb3JtX3ZhbGlkKHNlbGYsIGZvcm0pOgogICAgICAgIHJldHVybiByZWRpcmVjdChyZXZlcnNlKCJyZWdpc3RyYXRpb246b3JnYW5pc2F0aW9uX2NyZWF0ZV9hZGRyZXNzIikpCgoKY2xhc3MgT3JnYW5pc2F0aW9uQ3JlYXRlQWRkcmVzcyhGb3JtVmlldyk6CiAgICB0ZW1wbGF0ZV9uYW1lID0gImFscGhhL2Zvcm1zL2dlbmVyaWNfZm9ybS5odG1sIgogICAgZm9ybV9jbGFzcyA9IHJlZ2lzdHJhdGlvbl9mb3Jtcy5DcmVhdGVBZGRyZXNzRm9ybQoKICAgIGRlZiBmb3JtX3ZhbGlkKHNlbGYsIGZvcm0pOgogICAgICAgIHJldHVybiByZWRpcmVjdChyZXZlcnNlKCJyZWdpc3RyYXRpb246b3JnYW5pc2F0aW9uX2NyZWF0ZV9kZXRhaWxzIikpCgoKY2xhc3MgT3JnYW5pc2F0aW9uQ3JlYXRlRGV0YWlscyhGb3JtVmlldyk6CiAgICB0ZW1wbGF0ZV9uYW1lID0gImFscGhhL2Zvcm1zL2dlbmVyaWNfZm9ybS5odG1sIgogICAgZm9ybV9jbGFzcyA9IHJlZ2lzdHJhdGlvbl9mb3Jtcy5BZGRpdGlvbmFsT3JnRGV0YWlsc0Zvcm0KCiAgICBkZWYgZm9ybV92YWxpZChzZWxmLCBmb3JtKToKICAgICAgICByZXR1cm4gcmVkaXJlY3QocmV2ZXJzZSgicmVnaXN0cmF0aW9uOnBlcnNvbl9kZXRhaWxzX2lucHV0IikpCgoKY2xhc3MgUGVyc29uRGV0YWlsc0lucHV0KEZvcm1WaWV3KToKICAgIHRlbXBsYXRlX25hbWUgPSAiYWxwaGEvZm9ybXMvZ2VuZXJpY19mb3JtLmh0bWwiCiAgICBmb3JtX2NsYXNzID0gcmVnaXN0cmF0aW9uX2Zvcm1zLlBlcnNvbkRldGFpbHNGb3JtCgogICAgZGVmIGZvcm1fdmFsaWQoc2VsZiwgZm9ybSk6CiAgICAgICAgc2VsZi5yZXF1ZXN0LnNlc3Npb25bInJlZ2lzdHJhdGlvbiJdWyJwZXJzb24iXSA9IGZvcm0uY2xlYW5lZF9kYXRhLmNvcHkoKQoKICAgICAgICAjIHJldHVybiBzdXBlcihQZXJzb25EZXRhaWxzSW5wdXQsIHNlbGYpLmZvcm1fdmFsaWQoZm9ybSkKICAgICAgICAjIEZvciBub3csIGZvcndhcmQgdGhlIHVzZXIKICAgICAgICByZXR1cm4gcmVkaXJlY3QocmV2ZXJzZSgicmVnaXN0cmF0aW9uOnBlcnNvbl9kZXRhaWxzX3JldmlldyIpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKY2xhc3MgUGVyc29uRGV0YWlsc1JldmlldyhUZW1wbGF0ZVZpZXcpOgogICAgdGVtcGxhdGVfbmFtZSA9ICJyZWdpc3RyYXRpb24vcGVyc29uX2RldGFpbHNfcmV2aWV3Lmh0bWwiCjx8ZmltX2VuZHw+"]
["85fb37f41efb227dee8312a4fd4ea6ff170b1bbd-5","85fb37f41efb227dee8312a4fd4ea6ff170b1bbd","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKCgojIExpbmtlZExpc3QgYW5kIExpc3ROb2RlIERlZmluaXRpb25zCmNsYXNzIExpc3ROb2RlOgogICAgdmFsOiBpbnQKICAgIG5leHQ6ICdMaXN0Tm9kZScgICMgcHl0aG9uIDMuNi0gdXNlcyAnQ2xhc3NOYW1lJyB3aGVyZSBhcyBweXRob24gMy43KyB1c2VzICdmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFubm90YXRpb25zJwoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4OiBpbnQpOgogICAgICAgICIiIgogICAgICAgIGluaXQgYSBsaW5rZWQgbGlzdCBub2RlCgogICAgICAgIDpwYXJhbSB4OiB0aGUgdmFsdWUgY29udGFpbmVkIGluIHRoZSBub2RlCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi52YWwgPSB4CiAgICAgICAgc2VsZi5uZXh0ID0gTm9uZQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIFJldHVybnMgdGhlIHN0cmluZyBmb3JtYXQgb2YgdGhlIHdob2xlIGxpc3QgZm9sbG93aW5nIHRoZSBjdXJyZW50IG5vZGUKCiAgICAgICAgOnJldHVybjogdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgTGlzdE5vZGUKICAgICAgICAiIiIKICAgICAgICB2YWxzOiBMaXN0W3N0cl0gPSBbXQogICAgICAgIHB0ciA9IHNlbGYKICAgICAgICB3aGlsZSBwdHIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHZhbHMuYXBwZW5kKHN0cihwdHIudmFsKSkKICAgICAgICAgICAgcHRyID0gcHRyLm5leHQKICAgICAgICByZXR1cm4gIi0+Ii5qb2luKHZhbHMpCgoKY2xhc3MgTGlua2VkTGlzdDoKICAgIGhlYWQ6IExpc3ROb2RlCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG51bWJlcnM6IExpc3RbaW50XSk6CiAgICAgICAgIiIiCiAgICAgICAgaW5pdCBhIGxpbmtlZCBsaXN0IHdpdGggbnVtYmVycwoKICAgICAgICA6cGFyYW0gbnVtYmVyczogdGhlIGxpc3Qgb2YgbnVtYmVycyB0aGUgTGlua2VkTGlzdCByZXByZXNlbnRzCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5oZWFkID0gTGlzdE5vZGUoMCkKICAgICAgICBwdHIgPSBzZWxmLmhlYWQKICAgICAgICBmb3IgbiBpbiBudW1iZXJzOgogICAgICAgICAgICBwdHIubmV4dCA9IExpc3ROb2RlKG4pCiAgICAgICAgICAgIHB0ciA9IHB0ci5uZXh0CiAgICAgICAgc2VsZi5oZWFkID0gc2VsZi5oZWFkLm5leHQKCiAgICBkZWYgZ2V0X3N0YXJ0KHNlbGYpIC0+IExpc3ROb2RlOgogICAgICAgICIiIgogICAgICAgIEdldCB0aGUgc3RhcnRpbmcgTGlzdE5vZGUKCiAgICAgICAgOnJldHVybjogdGhlIHN0YXJ0aW5nIExpc3ROb2RlCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuaGVhZAoKCmNsYXNzIFNvbHV0aW9uOgogICAgZGVmIHJlbW92ZV9udGhfZnJvbV9lbmQoc2VsZiwgaGVhZDogTGlzdE5vZGUsIG46IGludCkgLT4gTGlzdE5vZGU6CiAgICAgICAgIiIiCiAgICAgICAgR2l2ZW4gYSBsaW5rZWQgbGlzdCwgcmVtb3ZlIHRoZSBuLXRoIG5vZGUgZnJvbSB0aGUgZW5kIG9mIGxpc3QgYW5kIHJldHVybiBpdHMgaGVhZC4KCiAgICAgICAgPj4+IGxsID0gTGlua2VkTGlzdChbMSwgMiwgMywgNCwgNV0pCiAgICAgICAgPj4+IHJlc3VsdCA9IFNvbHV0aW9uKCkucmVtb3ZlX250aF9mcm9tX2VuZChsbC5nZXRfc3RhcnQoKSwgMikKICAgICAgICA+Pj4gcHJpbnQocmVzdWx0KQogICAgICAgIDEtPjItPjMtPjUKCiAgICAgICAgPj4+IGxsID0gTGlua2VkTGlzdChbNCw1LDRdKQogICAgICAgID4+PiByZXN1bHQgPSBTb2x1dGlvbigpLnJlbW92ZV9udGhfZnJvbV9lbmQobGwuZ2V0X3N0YXJ0KCksIDEpCiAgICAgICAgPj4+IHByaW50KHJlc3VsdCkKICAgICAgICA0LT41CgogICAgICAgIDpwYXJhbSBoZWFkOiB0aGUgaGVhZCBvZiB0aGUgbGlzdCBub2RlCiAgICAgICAgOnBhcmFtIG46IHRoZSBudGggZWxlbWVudCB0byByZW1vdmUgZnJvbSB0aGUgZW5kCiAgICAgICAgOnJldHVybjogdGhlIGhlYWQgb2YgdGhlIHJlc3VsdGluZyBsaXN0IG5vZGUKICAgICAgICAiIiIKICAgICAgICByZXR1cm4gc2VsZi5vbmVfcGFzc19zb2xuKGhlYWQsIG4pCgogICAgZGVmIG9uZV9wYXNzX3NvbG4oc2VsZiwgaGVhZDogTGlzdE5vZGUsIG46IGludCkgLT4gTGlzdE5vZGU6CiAgICAgICAgIiIiCiAgICAgICAgTyhuKQogICAgICAgIHVzZSB0d28gcG9pbnRlcnMgaW5zdGVhZCBvZiBvbmUuCiAgICAgICAgZmlyc3QgcG9pbnRlciBzZXRzIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBzZWNvbmQgc28gdGhhdCB3ZSBjYW4ga25vdyB3aGVuIHRoZSBzZWNvbmQgcG9pbnRlciBoYXMgcmVhY2hlZCB0aGUgZGVzaXJlZCBwb3NpdGlvbgogICAgICAgIHNlY29uZCBpcyB0aGUgYWN0dWFsIHBvaW50ZXIgdGhhdCBtYWtlcyB0aGUgY2hhbmdlcwoKICAgICAgICA6cGFyYW0gaGVhZDogdGhlIGhlYWQgb2YgdGhlIGxpc3Qgbm9kZQogICAgICAgIDpwYXJhbSBuOiB0aGUgbnRoIGVsZW1lbnQgdG8gcmVtb3ZlIGZyb20gdGhlIGVuZAogICAgICAgIDpyZXR1cm46IHRoZSBoZWFkIG9mIHRoZSByZXN1bHRpbmcgbGlzdCBub2RlCiAgICAgICAgIiIiCiAgICAgICAgZHVtbXlfaGVhZCA9IExpc3ROb2RlKC0xKQogICAgICAgIGR1bW15X2hlYWQubmV4dCA9IGZpcnN0X3B0ciA9IHNlY29uZF9wdHIgPSBoZWFkCiAgICAgICAgIyBtb3ZlIGZpcnN0IGZvcndhcmQgZm9yIG4gKyAxIHN0ZXBzIHRvIGJlIGFoZWFkIG9mIHRoZSBzZWNvbmQgcHRyCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobiArIDEpOgogICAgICAgICAgICBmaXJzdF9wdHIgPSBmaXJzdF9wdHIubmV4dAogICAgICAgICMgd2hlbiB0aGUgZmlyc3QgcmVhY2hlcyB0aGUgZW5kLCB0aGUgc2Vjb25kIHJlYWNoZXMgdGhlIG50aCBmcm9tIHRoZSBlbmQuCiAgICAgICAgd2hpbGUgZmlyc3RfcHRyIGlzIG5vdCBOb25lOgogICAgICAgICAgICBmaXJzdF9wdHIgPSBmaXJzdF9wdHIubmV4dAogICAgICAgICAgICBzZWNvbmRfcHRyID0gc2Vjb25kX3B0ci5uZXh0CgogICAgICAgIHNlY29uZF9wdHIubmV4dCA9IHNlY29uZF9wdHIubmV4dC5uZXh0CiAgICAgICAgcmV0dXJuIGR1bW15X2hlYWQubmV4dAoKICAgIGRlZiBicnV0ZV9mb3JjZShzZWxmLCBoZWFkOiBMaXN0Tm9kZSwgbjogaW50KSAtPiBMaXN0Tm9kZToKICAgICAgICAiIiIKICAgICAgICBPKDJuKSA9IE8obikKCiAgICAgICAgOnBhcmFtIGhlYWQ6IHRoZSBoZWFkIG9mIHRoZSBsaXN0IG5vZGUKICAgICAgICA6cGFyYW0gbjogdGhlIG50aCBlbGVtZW50IHRvIHJlbW92ZSBmcm9tIHRoZSBlbmQKICAgICAgICA6cmV0dXJuOiB0aGUgaGVhZCBvZiB0aGUgcmVzdWx0aW5nIGxpc3Qgbm9kZQogICAgICAgICIiIgogICAgICAgIGR1bW15X2hlYWQgPSBMaXN0Tm9kZSgtMSkKICAgICAgICBkdW1teV9oZWFkLm5leHQgPSBwdHIgPSBoZWFkCiAgICAgICAgbGVuZ3RoID0gMAoKICAgICAgICAjIGZpcnN0IHBhc3M6IGNvdW50IHRoZSBsZW5ndGgKICAgICAgICB3aGlsZSBwdHIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIGxlbmd0aCArPSAxCiAgICAgICAgICAgIHB0ciA9IHB0ci5uZXh0CgogICAgICAgIGxlbmd0aCAtPSBuCiAgICAgICAgcHRyID0gZHVtbXlfaGVhZAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgcHRyID0gcHRyLm5leHQKICAgICAgICBwdHIubmV4dCA9IHB0ci5uZXh0Lm5leHQKCiAgICAgICAgcmV0dXJuIGR1bW15X2hlYWQubmV4dAoKCmRlZiBtYWluKCk6CiAgICBTb2x1dGlvbigpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIG1haW4oKQo8fGZpbV9zdWZmaXh8PgoKICAgICAgICAjIHNlY29uZCBwYXNzOiByZWNvbnN0cnVjdCBsbCB1bnRpbCB0aGUgbnRoIGZyb20gdGhlIGVuZC4gc2tpcCBuIGFuZCBjb25uZWN0IHRoZSByZXN0CiAgICAgICAgd2hpbGUgbGVuZ3RoID4gMDoKICAgICAgICAgICAgbGVuZ3RoIC09IDEKPHxmaW1fZW5kfD4="]
["273aace5bfb488ff5caa64385fbd98169d799de3-1","273aace5bfb488ff5caa64385fbd98169d799de3","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgQmFzZVByb3ZpZGVyOgogICAgX3JlcXVlc3RfY2FsbGJhY2sgPSBOb25lCiAgICBfcmVzcG9uc2VfY2FsbGJhY2sgPSBOb25lCgo8fGZpbV9lbmR8Pg=="]
["a5e32d4d26a39f4f92c3a86a21f7343e5ed39cd0-4","a5e32d4d26a39f4f92c3a86a21f7343e5ed39cd0","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlCmZyb20gdHlwaW5nIGltcG9ydCBEaWN0LCBBbnksIE9wdGlvbmFsCgpmcm9tIGRqYW5nby5jb3JlLmV4Y2VwdGlvbnMgaW1wb3J0IEltcHJvcGVybHlDb25maWd1cmVkCmZyb20gZGphbmdvLnVybHMgaW1wb3J0IE5vUmV2ZXJzZU1hdGNoCmZyb20gZHJmX3lhc2cgaW1wb3J0IG9wZW5hcGkKZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgc2VyaWFsaXplcnMKZnJvbSByZXN0X2ZyYW1ld29yay5yZWxhdGlvbnMgaW1wb3J0IEh5cGVybGluawoKCmNsYXNzIFNlbGZIcmVmRmllbGQoc2VyaWFsaXplcnMuSHlwZXJsaW5rZWRJZGVudGl0eUZpZWxkKToKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgc3dhZ2dlcl9zY2hlbWFfZmllbGRzID0gewogICAgICAgICAgICAidHlwZSI6IG9wZW5hcGkuVFlQRV9PQkpFQ1QsCiAgICAgICAgICAgICJ0aXRsZSI6ICJTZWxmIiwKICAgICAgICAgICAgInJlYWRfb25seSI6IFRydWUsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7CiAgICAgICAgICAgICAgICAiaHJlZiI6IG9wZW5hcGkuU2NoZW1hKAogICAgICAgICAgICAgICAgICAgIHR5cGU9b3BlbmFwaS5UWVBFX1NUUklORywKICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9b3BlbmFwaS5GT1JNQVRfVVJJLAo8fGZpbV9lbmR8Pg=="]
["193218aead4a2ff1d06ff04036f4041ec0cbd481-5","193218aead4a2ff1d06ff04036f4041ec0cbd481",{"$cut":{"chars":38428,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCmltcG9ydCB0aW1lCmZyb20gd2ViMyBpbXBvcnQgV2ViMywgS2VlcEFsaXZlUlBDUHJvdmlkZXIsIElQQ1Byb3ZpZGVyCndlYjMgPSBXZWIzKEtlZXBBbGl2ZVJQQ1Byb3ZpZGVyKGhvc3Q9JzEyNy4wLjAuMScsIHBvcnQ9Jzg1NDUnKSkKIyBHbG9iYWwgRGVjbGFyYXRpb25zIApnbG9iYWwgdHJ1ZQpnbG9iYWwgZmFsc2UKZ2xvYmFsIHB0b3lfYWNjb3VudF8wX2EKZ2xvYmFsIHB0b3lfYWNjb3VudF8xX2EKZ2xvYmFsIHB0b3lfYWNjb3VudF8yX2EKZ2xvYmFsIHB0b3lfYWNjb3VudF8zX2EKZ2xvYmFsIHB0b3lfYWNjb3VudF80X2EKZ2xvYmFsIHB0b3lfYWNjb3VudF81X2EKZ2xvYmFsIHB0b3lfYWNjb3VudF82X2EKZ2xvYmFsIHB0b3lfYWRkcmVzcwpnbG9iYWwgcHRveV9hYmkKZ2xvYmFsIHB0b3kKZ2xvYmFsIHB0b3lfY2FsbF8wCmdsb2JhbCBwdG95X2NhbGxfMQpnbG9iYWwgcHRveV9jYWxsXzIKZ2xvYmFsIHB0b3lfY2FsbF8zCmdsb2JhbCBwdG95X2NhbGxfNApnbG9iYWwgcHRveV9jYWxsXzUKZ2xvYmFsIHB0b3lfY2FsbF82Cmdsb2JhbCBwdG95X2NhbGxfYWIKZ2xvYmFsIHB0b3lfYWNjb3VudHMKZ2xvYmFsIHB0b3lfYWNjb3VudF8wX3B3Cmdsb2JhbCBwdG95X2FjY291bnRfMV9wdwpnbG9iYWwgcHRveV9hY2NvdW50XzJfcHcKZ2xvYmFsIHB0b3lfYWNjb3VudF8zX3B3Cmdsb2JhbCBwdG95X2FjY291bnRfNF9wdwpnbG9iYWwgcHRveV9hY2NvdW50XzVfcHcKZ2xvYmFsIHB0b3lfYWNjb3VudF82X3B3Cmdsb2JhbCBwdG95X2FjY291bnRfMF9uCmdsb2JhbCBwdG95X2FjY291bnRfMV9uCmdsb2JhbCBwdG95X2FjY291bnRfMl9uCmdsb2JhbCBwdG95X2FjY291bnRfM19uCmdsb2JhbCBwdG95X2FjY291bnRfNF9uCmdsb2JhbCBwdG95X2FjY291bnRfNV9uCmdsb2JhbCBwdG95X2FjY291bnRfNl9uCmdsb2JhbCBwdG95X2FjY291bnQxcHcKZ2xvYmFsIHB0b3lfYWNjb3VudDJwdwpnbG9iYWwgcHRveV9hY2NvdW50M3B3Cmdsb2JhbCBwdG95X2FjY291bnQ0cHcKZ2xvYmFsIHB0b3lfYWNjb3VudDVwdwpnbG9iYWwgcHRveV9hY2NvdW50NnB3Cmdsb2JhbCBwdG95X2xhc3RfcHJpY2UKZ2xvYmFsIHB0b3lfYWNjb3VudHNfcmFuZ2UKZ2xvYmFsIHB0b3lfdG9rZW5OYW1lCmdsb2JhbCBwdG95X2xhc3RfZXRoZXJldW1fcHJpY2UKZ2xvYmFsIHB0b3lfdW5sb2NrVGltZQpnbG9iYWwgcHRveV9iYWxhbmNlCmdsb2JhbCBwdG95X2JhbGFuY2VPZgpnbG9iYWwgcHRveV91bmxvY2sKZ2xvYmFsIHB0b3lfdG9rZW5fZApnbG9iYWwgX2VfZAojIEludGVybmFsIFZhcmlhYmxlIFNldHVwIChMZWF2ZSBBbG9uZSBVbmxlc3MgWW91IFVuZGVyc3RhbmQgV2hhdCBUaGV5IERvLikKdHJ1ZSA9IFRydWUKZmFsc2UgPSBGYWxzZQpwdG95X3Rva2VuX2QgPSAxZTgKX2VfZCA9IDFlMTgKcHRveV9hY2NvdW50c19yYW5nZSA9ICdbMCwgNl0nCnB0b3lfdW5sb2NrID0gd2ViMy5wZXJzb25hbC51bmxvY2tBY2NvdW50CnB0b3lfbGFzdF9ldGhlcmV1bV9wcmljZSA9IDM3MC4wMApwdG95X2xhc3RfcHJpY2UgPSAwLjM2CnB0b3lfYWNjb3VudHMgPSB3ZWIzLnBlcnNvbmFsLmxpc3RBY2NvdW50cyAjIEZvciBwZXJzb25hbCBhY2NvdW50cywgQWNjb3VudHMgQ2FuIEFsc28gQmUgU3RyaW5nICgnMHguLicpIExpc3RlZC4KcHRveV9iYWxhbmNlID0gd2ViMy5ldGguZ2V0QmFsYW5jZQojIFVzZXIgQ2hvaWNlIFZhcmlhYmxlcyAoWW91IE1heSBDaGFuZ2UgVGhlc2UgUHJldHR5IEVhc2lseSBXaXRob3V0IEZ1Y2tpbmcgQW55dGhpbmcgVXAuKQpwdG95X3Rva2VuTmFtZSA9ICdQYXRpZW50b3J5IFRva2VuJwpwdG95X3VubG9ja1RpbWUgPSBoZXgoMTAwMDApICMgTXVzdCBiZSBoZXgoKQpwdG95X2FjY291bnRfMF9hID0gcHRveV9hY2NvdW50c1swXQpwdG95X2FjY291bnRfMV9hID0gcHRveV9hY2NvdW50c1sxXQpwdG95X2FjY291bnRfMl9hID0gcHRveV9hY2NvdW50c1syXQpwdG95X2FjY291bnRfM19hID0gcHRveV9hY2NvdW50c1szXQpwdG95X2FjY291bnRfNF9hID0gcHRveV9hY2NvdW50c1s0XQpwdG95X2FjY291bnRfNV9hID0gJzB4RkJiMWI3M0M0ZjBCRGE0ZjY3ZGNBMjY2Y2U2RWY0MmY1MjBmQkI5OCcKcHRveV9hY2NvdW50XzZfYSA9IHB0b3lfYWNjb3VudHNbNl0KIyBTdXBwbHkgVW5sb2NrIFBhc3N3b3JkcyBGb3IgVHJhbnNhY3Rpb25zIEJlbG93CnB0b3lfYWNjb3VudF8wX3B3ID0gJ0d1aWxkU2tyeXB0MjAxNyFAIycKcHRveV9hY2NvdW50XzFfcHcgPSAnJwpwdG95X2FjY291bnRfMl9wdyA9ICdHdWlsZFNrcnlwdDIwMTchQCMnCnB0b3lfYWNjb3VudF8zX3B3ID0gJycKcHRveV9hY2NvdW50XzRfcHcgPSAnJwpwdG95X2FjY291bnRfNV9wdyA9ICcnCnB0b3lfYWNjb3VudF82X3B3ID0gJycKIyBTdXBwbHkgTmFtZXMgQmVsb3cgU3RhbmRhcmQgSXMgJ1Vua25vd24nCnB0b3lfYWNjb3VudF8wX24gPSAnU2tvdHlzIEJpdHRyZXggQWNjb3VudCcKcHRveV9hY2NvdW50XzFfbiA9ICdKZWZmcyBBY2NvdW50JwpwdG95X2FjY291bnRfMl9uID0gJ1NrcnlwdHMgQml0dHJleCBBY2NvdW50JwpwdG95X2FjY291bnRfM19uID0gJ1Nrb3R5cyBQZXJzb25hbCBBY2NvdW50JwpwdG95X2FjY291bnRfNF9uID0gJ1Vua25vd24nCnB0b3lfYWNjb3VudF81X24gPSAnV2F0Y2hlZCBcJ0JpdHRyZXhcJyBBY2NvdW50LicKcHRveV9hY2NvdW50XzZfbiA9ICdXYXRjaGVkIEFjY291bnQgKDEpJwojIENvbnRyYWN0IEluZm9ybWF0aW9uIEJlbG93IDoKcHRveV9hZGRyZXNzID0gJzB4OEFlNEJGMkMzM2E4ZTY2N2RlMzRCNTQ5MzhCMGNjRDAzRWI4Q0MwNicKcHRveV9hYmkgPSBbeyJjb25zdGFudCI6ZmFsc2UsImlucHV0cyI6W3sibmFtZSI6ImFkZHIiLCJ0eXBlIjoiYWRkcmVzcyJ9LHsibmFtZSI6InN0YXRlIiwidHlwZSI6ImJvb2wifV0sIm5hbWUiOiJzZXRUcmFuc2ZlckFnZW50Iiwib3V0cHV0cyI6W10sInBheWFibGUiOmZhbHNlLCJ0eXBlIjoiZnVuY3Rpb24ifSx7ImNvbnN0YW50Ijp0cnVlLCJpbnB1dHMiOltdLCJuYW1lIjoibWludGluZ0ZpbmlzaGVkIiwi"}}]
["573fc4f42cc9c0d61f7ee9a3ea63bad0f0262f45-3","573fc4f42cc9c0d61f7ee9a3ea63bad0f0262f45","PHxmaW1fcHJlZml4fD4KIyBleGFtcGxlLTMuNC1wcmVkYXRvcl9wcmV5LnB5IC0gZGlzY3JldGUtdGltZSBzaW11bGF0aW9uIG9mIHByZWRhdG9y4oCTcHJleSBtb2RlbAojIFJNTSwgMTUgTWF5IDIwMTkKIwojIEZpZ3VyZSAzLjg6IERpc2NyZXRlLXRpbWUgc2ltdWxhdGlvbiBvZiB0aGUgcHJlZGF0b3LigJNwcmV5IG1vZGVsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyAoMy4xMykuIFVzaW5nIHRoZSBwYXJhbWV0ZXJzIGEgPSBjID0gMC4wMTQsIGJoKHUpID0gMC42LCBhbmQgZGwgPQojIDAuNyBpbiBlcXVhdGlvbiAoMy4xMyksIHRoZSBwZXJpb2QgYW5kIG1hZ25pdHVkZSBvZiB0aGUgbHlueCBhbmQKIyBoYXJlIHBvcHVsYXRpb24gY3ljbGVzIGFwcHJveGltYXRlbHkgbWF0Y2ggdGhlIGRhdGEgaW4gRmlndXJlIDMuNy4KCjx8ZmltX2VuZHw+"]
["191a5becdcb2d2ca1354db1f9eb6539ccebb0f3c-2","191a5becdcb2d2ca1354db1f9eb6539ccebb0f3c","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIKQ3JlYXRlZCBvbiBNb24gSnVuICA3IDA5OjQ3OjU1IDIwMjEKCkBhdXRob3I6IGF5bWFuCiIiIgppbXBvcnQgdG9yY2gKaW1wb3J0IHRvcmNoLm5uLmZ1bmN0aW9uYWwgYXMgRgppbXBvcnQgZ3ltCmltcG9ydCBudW1weSBhcyBucApmcm9tIHB0YW4uYWdlbnQgaW1wb3J0IEJhc2VBZ2VudCwgZmxvYXQzMl9wcmVwcm9jZXNzb3IKZnJvbSBwdGFuLmFjdGlvbnMgaW1wb3J0IFByb2JhYmlsaXR5QWN0aW9uU2VsZWN0b3IKCgpkZWYgZGlzY291bnRfd2l0aF9kb25lcyhyZXdhcmRzLCBkb25lcywgZ2FtbWEpOgogICAgZGlzY291bnRlZCA9IFtdCiAgICByID0gMAogICAgZm9yIHJld2FyZCwgZG9uZSBpbiB6aXAocmV3YXJkc1s6Oi0xXSwgZG9uZXNbOjotMV0pOgogICAgICAgIHIgPSByZXdhcmQgKyBnYW1tYSAqIHIgKiAoMS4wIC0gZG9uZSkKICAgICAgICBkaXNjb3VudGVkLmFwcGVuZChyKQogICAgcmV0dXJuIGRpc2NvdW50ZWRbOjotMV0KCgojIyMjIyMjIyMjIyMjIyMjIyMgRXhwZXJpZW5jZSBhbmQgQWdlbnQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoKY2xhc3MgQTNDQWdlbnQoQmFzZUFnZW50KToKICAgICIiIgogICAgUG9saWN5IGFnZW50IHdoaWNoIHJldHVybnMgcG9saWN5IGFuZCB2YWx1ZSB0ZW5zb3JzIGZyb20gb2JzZXJ2YXRpb25zLiBWYWx1ZSBhcmUgc3RvcmVkIGluIGFnZW50J3Mgc3RhdGUKICAgIGFuZCBjb3VsZCBiZSByZXVzZWQgZm9yIHJvbGxvdXRzIGNhbGN1bGF0aW9ucyBieSBFeHBlcmllbmNlU291cmNlLgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKAogICAgICAgIHNlbGYsCiAgICAgICAgbW9kZWwsCiAgICAgICAgYWN0aW9uX3NlbGVjdG9yPVByb2JhYmlsaXR5QWN0aW9uU2VsZWN0b3IoKSwKICAgICAgICBkZXZpY2U9ImNwdSIsCiAgICAgICAgYXBwbHlfc29mdG1heD1UcnVlLAogICAgICAgIHByZXByb2Nlc3Nvcj1mbG9hdDMyX3ByZXByb2Nlc3NvciwKICAgICk6CiAgICAgICAgc2VsZi5tb2RlbCA9IG1vZGVsCiAgICAgICAgc2VsZi5hY3Rpb25fc2VsZWN0b3IgPSBhY3Rpb25fc2VsZWN0b3IKICAgICAgICBzZWxmLmRldmljZSA9IGRldmljZQogICAgICAgIHNlbGYuYXBwbHlfc29mdG1heCA9IGFwcGx5X3NvZnRtYXgKICAgICAgICBzZWxmLnByZXByb2Nlc3NvciA9IHByZXByb2Nlc3NvcgoKICAgIEB0b3JjaC5ub19ncmFkKCkKICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBzdGF0ZXMsIGFnZW50X3N0YXRlcz1Ob25lKToKICAgICAgICAiIiIKICAgICAgICBSZXR1cm4gYWN0aW9ucyBmcm9tIGdpdmVuIGxpc3Qgb2Ygc3RhdGVzCiAgICAgICAgOnBhcmFtIHN0YXRlczogbGlzdCBvZiBzdGF0ZXMKICAgICAgICA6cmV0dXJuOiBsaXN0IG9mIGFjdGlvbnMKICAgICAgICAiIiIKICAgICAgICBpZiBzZWxmLnByZXByb2Nlc3NvciBpcyBub3QgTm9uZToKICAgICAgICAgICAgc3RhdGVzID0gc2VsZi5wcmVwcm9jZXNzb3Ioc3RhdGVzKQogICAgICAgICAgICBpZiB0b3JjaC5pc190ZW5zb3Ioc3RhdGVzKToKICAgICAgICAgICAgICAgIHN0YXRlcyA9IHN0YXRlcy50byhzZWxmLmRldmljZSkKICAgICAgICBwcm9ic192LCB2YWx1ZXNfdiA9IHNlbGYubW9kZWwoc3RhdGVzKQogICAgICAgIGlmIHNlbGYuYXBwbHlfc29mdG1heDoKICAgICAgICAgICAgcHJvYnNfdiA9IEYuc29mdG1heChwcm9ic192LCBkaW09MSkKICAgICAgICBwcm9icyA9IHByb2JzX3YuZGF0YS5jcHUoKS5udW1weSgpCiAgICAgICAgYWN0aW9ucyA9IHNlbGYuYWN0aW9uX3NlbGVjdG9yKHByb2JzKQogICAgICAgIGFnZW50X3N0YXRlcyA9IHZhbHVlc192LmRhdGEuc3F1ZWV6ZSgpLmNwdSgpLm51bXB5KCkudG9saXN0KCkKICAgICAgICByZXR1cm4gbnAuYXJyYXkoYWN0aW9ucyksIGFnZW50X3N0YXRlcwoKCmNsYXNzIEV4cGVyaWVuY2VTb3VyY2VSb2xsb3V0czoKICAgICIiIgogICAgTi1zdGVwIHJvbGxvdXQgZXhwZXJpZW5jZSBzb3VyY2UgZm9sbG93aW5nIEEzQyByb2xsb3V0cyBzY2hlbWUuIEhhdmUgdG8gYmUgdXNlZCB3aXRoIGFnZW50LAogICAga2VlcGluZyB0aGUgdmFsdWUgaW4gaXRzIHN0YXRlIChmb3IgZXhhbXBsZSwgYWdlbnQuQWN0b3JDcml0aWNBZ2VudCkuCgogICAgWWllbGRzIGJhdGNoZXMgb2YgbnVtX2VudnMgKiBuX3N0ZXBzIHNhbXBsZXMgd2l0aCB0aGUgZm9sbG93aW5nIGFycmF5czoKICAgIDEuIG9ic2VydmF0aW9ucwogICAgMi4gYWN0aW9ucwogICAgMy4gZGlzY291bnRlZCByZXdhcmRzLCB3aXRoIHZhbHVlcyBhcHByb3hpbWF0aW9uCiAgICA0LiB2YWx1ZXMKICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbnYsIGFnZW50LCBnYW1tYSwgc3RlcHNfY291bnQ9NSk6CiAgICAgICAgIiIiCiAgICAgICAgQ29uc3RydWN0cyB0aGUgcm9sbG91dCBleHBlcmllbmNlIHNvdXJjZQogICAgICAgIDpwYXJhbSBlbnY6IGVudmlyb25tZW50IG9yIGxpc3Qgb2YgZW52aXJvbm1lbnRzIHRvIGJlIHVzZWQKICAgICAgICA6cGFyYW0gYWdlbnQ6IGNhbGxhYmxlIHRvIGNvbnZlcnQgYmF0Y2ggb2Ygc3RhdGVzIGludG8gYWN0aW9ucwogICAgICAgIDpwYXJhbSBzdGVwc19jb3VudDogaG93IG1hbnkgc3RlcHMgdG8gcGVyZm9ybSByb2xsb3V0cwogICAgICAgICIiIgogICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGVudiwgKGd5bS5FbnYsIGxpc3QsIHR1cGxlKSkKICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShhZ2VudCwgQmFzZUFnZW50KQogICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGdhbW1hLCBmbG9hdCkKICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzdGVwc19jb3VudCwgaW50KQogICAgICAgIGFzc2VydCBzdGVwc19jb3VudCA+PSAxCgogICAgICAgIGlmIGlzaW5zdGFuY2UoZW52LCAobGlzdCwgdHVwbGUpKToKICAgICAgICAgICAgc2VsZi5wb29sID0gZW52CiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5wb29sID0gW2Vudl0KICAgICAgICBzZWxmLmFnZW50ID0gYWdlbnQKICAgICAgICBzZWxmLmdhbW1hID0gZ2FtbWEKICAgICAgICBzZWxmLnN0ZXBzX2NvdW50ID0gc3RlcHNfY291bnQKICAgICAgICBzZWxmLnRvdGFsX3Jld2FyZHMgPSBbXQogICAgICAgIHNlbGYudG90YWxfc3RlcHMgPSBbXQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgICAgIHBvb2xfc2l6ZSA9IGxlbihzZWxmLnBvb2wpCiAgICAgICAgc3RhdGVzID0gW25wLmFycmF5KGUucmVzZXQoKSkgZm9yIGUgaW4gc2VsZi5wb29sXQo8fGZpbV9lbmR8Pg=="]
["cd9ce8e1bddfcd508892755ae174c2371a92b40b-4","cd9ce8e1bddfcd508892755ae174c2371a92b40b","PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZQoKZnJvbSBkamFuZ28uY29yZS5leGNlcHRpb25zIGltcG9ydCBWYWxpZGF0aW9uRXJyb3IKCgpkZWYgdmFsaWRhdGVfb25seV9sZXR0ZXJzKHZhbHVlKToKICAgIGlmIG5vdCB2YWx1ZS5pc2FscGhhKCk6CiAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKCdWYWx1ZSBtdXN0IGNvbnRhaW4gb25seSBsZXR0ZXJzIScpCgoKZGVmIHZhbGlkYXRlX2ZpbGVfbWF4X3NpemVfaW5fbWIoaW1hZ2UpOgogICAgbGltaXRfbWIgPSA1CiAgICBmaWxlX3NpemUgPSBpbWFnZS5maWxlLnNpemUKCiAgICBpZiBmaWxlX3NpemUgPiBsaW1pdF9tYiAqIDEwMjQgKiAxMDI0OgogICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcihmJ01heCBzaXplIG9mIGZpbGUgaXMge3N0cihsaW1pdF9tYil9IE1CIScpCgoKZGVmIHZhbGlkYXRlX21pbl9kYXRlKHZhbHVlKToKICAgIG1pbl9kYXRlID0gZGF0ZSgxOTIwLCAxLCAxKQoKICAgIGlmIHZhbHVlIDwgbWluX2RhdGU6CiAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKGYnRGF0ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB7bWluX2RhdGV9JykKCgpkZWYgdmFsaWRhdGVfbWF4X2RhdGUodmFsdWUpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBtYXhfZGF0ZSA9IGRhdGUudG9kYXkoKQoKICAgIGlmIHZhbHVlID49IG1heF9kYXRlOgogICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcihmJ0RhdGUgbXVzdCBiZSBlYXJsaWVyIHRoYW4ge21heF9kYXRlfScpCjx8ZmltX2VuZHw+"]
["cde9e0f0747d65d1342bc4a6987b4f3df8eec063-1","cde9e0f0747d65d1342bc4a6987b4f3df8eec063","PHxmaW1fcHJlZml4fD4KIiIiCkdpdmVuIGEgY2lyY3VsYXIgYXJyYXkgQyBvZiBpbnRlZ2VycyByZXByZXNlbnRlZCBieSBBLCBmaW5kIHRoZSBtYXhpbXVtIHBvc3NpYmxlIHN1bSBvZiBhIG5vbi1lbXB0eSBzdWJhcnJheSBvZiBDLgpIZXJlLCBhIGNpcmN1bGFyIGFycmF5IG1lYW5zIHRoZSBlbmQgb2YgdGhlIGFycmF5IGNvbm5lY3RzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5LiAgCihGb3JtYWxseSwgQ1tpXSA9IEFbaV0gd2hlbiAwIDw9IGkgPCBBLmxlbmd0aCwgYW5kIENbaStBLmxlbmd0aF0gPSBDW2ldIHdoZW4gaSA+PSAwLikKQWxzbywgYSBzdWJhcnJheSBtYXkgb25seSBpbmNsdWRlIGVhY2ggZWxlbWVudCBvZiB0aGUgZml4ZWQgYnVmZmVyIEEgYXQgbW9zdCBvbmNlLiAgCihGb3JtYWxseSwgZm9yIGEgc3ViYXJyYXkgQ1tpXSwgQ1tpKzFdLCAuLi4sIENbal0sIHRoZXJlIGRvZXMgbm90IGV4aXN0IGkgPD0gazEsIGsyIDw9IGogd2l0aCBrMSAlIEEubGVuZ3RoID0gazIgJSBBLmxlbmd0aC4pCgpFeGFtcGxlIDE6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KSW5wdXQ6IFsxLC0yLDMsLTJdCk91dHB1dDogMwpFeHBsYW5hdGlvbjogU3ViYXJyYXkgWzNdIGhhcyBtYXhpbXVtIHN1bSAzCgo8fGZpbV9lbmR8Pg=="]
["e9c136dd881b92e3d70e349d5b86263f1c6cf932-5","e9c136dd881b92e3d70e349d5b86263f1c6cf932","PHxmaW1fcHJlZml4fD4KIiIiQ2xlYW4gQ29kZSBpbiBQeXRob24gLSBDaGFwdGVyIDE6IEludHJvZHVjdGlvbiwgVG9vbHMsIGFuZCBGb3JtYXR0aW5nCgo+IEV4dHJhIGNvZGUgZm9yIGlzb2xhdGVkIGV4YW1wbGVzCiIiIgoKCmRlZiBkYXRhX2Zyb21fcmVzcG9uc2UocmVzcG9uc2U6IGRpY3QpIC0+IGRpY3Q6CiAgICAiIiJJZiB0aGUgcmVzcG9uc2UgaXMgT0ssIHJldHVybiBpdHMgcGF5bG9hZC4KICAgIC0gcmVzcG9uc2U6IEEgZGljdCBsaWtlOjoKICAgIHsKICAgICAgICAic3RhdHVzIjogMjAwLCAjIDxpbnQ+CiAgICAgICAgInRpbWVzdGFtcCI6ICIuLi4uIiwgIyBJU08gZm9ybWF0IHN0cmluZyBvZiB0aGUgY3VycmVudCBkYXRlIHRpbWUKPHxmaW1faG9sZXw+CiAgICB9CiAgICAtIFJldHVybnMgYSBkaWN0aW9uYXJ5IGxpa2U6OgogICAgeyJkYXRhIjogeyAuLiB9IH0KCiAgICAtIFJhaXNlczoKICAgIC0gVmFsdWVFcnJvciBpZiB0aGUgSFRUUCBzdGF0dXMgaXMgIT0gMjAwCiAgICAiIiIKICAgIGlmIHJlc3BvbnNlWyJzdGF0dXMiXSAhPSAyMDA6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgogICAgcmV0dXJuIHsiZGF0YSI6IHJlc3BvbnNlWyJwYXlsb2FkIl19Cjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgInBheWxvYWQiOiB7IC4uLiB9ICMgZGljdCB3aXRoIHRoZSByZXR1cm5lZCBkYXRhCjx8ZmltX2VuZHw+"]
["23b0a3d28bb6305698b1fe0a989293bed036068e-4","23b0a3d28bb6305698b1fe0a989293bed036068e","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgppbXBvcnQgc3lzCmltcG9ydCB0ZW1wZmlsZQpmcm9tIGV4cGVyaW1lbnR1bS5FeHBlcmltZW50cyBpbXBvcnQgQXBwCmZyb20gZXhwZXJpbWVudHVtLkNvbW1hbmRzIGltcG9ydCBjb21tYW5kCgojIExvcmVtIElwc3VtIFRleHQKbG9yZW1faXBzdW0gPSBbCiAgICAiTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IiCiAgICAiaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4iLAogICAgIkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIiwKICAgICJTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIiwKICAgICJMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciIKICAgICJpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiIsCiAgICAiQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4iLAogICAgIlN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4iLAogICAgIkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAiaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4iLAogICAgIkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIiwKICAgICJTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIiwKICAgICJMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciIKPHxmaW1fZW5kfD4="]
["9e060dbf93e8b0477851b4b422cf12bfca99234b-2","9e060dbf93e8b0477851b4b422cf12bfca99234b","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFza19yZXN0ZnVsIGltcG9ydCBSZXNvdXJjZSwgQXBpLCByZXFwYXJzZQpmcm9tIGJkIGltcG9ydCBteXNxbCwgYXBwCmltcG9ydCBiY3J5cHQKPHxmaW1faG9sZXw+CgpjbGFzcyBSZXNlcnZhcyhSZXNvdXJjZSk6CiAgICBkZWYgZ2V0KHNlbGYpOgogICAgICAgIGN1cnNvciA9IG15c3FsLmNvbm5lY3Rpb24uY3Vyc29yKCkKICAgICAgICBxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIFRfUkVTRVJWQSIKICAgICAgICBjdXJzb3IuZXhlY3V0ZShxdWVyeSkKICAgICAgICByZXN1bHRhZG8gPSBjdXJzb3IuZmV0Y2hhbGwoKQogICAgICAgIGN1cnNvci5jbG9zZSgpCiAgICAgICAgcmV0dXJuIHsnUmVzZXJ2YXMnOiByZXN1bHRhZG99CgoKY2xhc3MgQXV0ZW50aWNhY2lvbihSZXNvdXJjZSk6CiAgICBkZWYgcG9zdChzZWxmKToKICAgICAgICBwYXNzCgoKQGFwcC5yb3V0ZSgnL3VzdWFyaW8vYWRkJywgbWV0aG9kcz1bIlBPU1QiXSkKY2xhc3MgVXN1YXJpbyhSZXNvdXJjZSk6CiAgICBkZWYgcG9zdChzZWxmKToKICAgICAgICBwYXJzZXIgPSByZXFwYXJzZS5SZXF1ZXN0UGFyc2VyKCkKICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdjb3JyZW8nLCB0eXBlPXN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVRydWUsIGhlbHA9J0ZhbHRhIGVsIGNvcnJlbycpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgncGFzc3dvcmQnLCB0eXBlPXN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVRydWUsIGhlbHA9J0ZhbHRhIGxhIGNvbnRyYXNlw7FhJykKICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdub21icmUnLCB0eXBlPXN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVRydWUsIGhlbHA9J0ZhbHRhIGVsIG5vbWJyZScpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYXBlbGxpZG8nLCB0eXBlPXN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVRydWUsIGhlbHA9J0ZhbHRhIGVsIGFwZWxsaWRvJykKICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCd0ZWxlZm9ubycsIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9VHJ1ZSwgaGVscD0nRmFsdGEgZWwgdGVsZWZvbm8nKQoKICAgICAgICBkYXRhID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogICAgICAgICMgRW5jcmlwdGFjaW9uIGRlIGNvbnRyYXNlw7FhCiAgICAgICAgcGFzc3dvcmQgPSBieXRlcyhkYXRhWydwYXNzd29yZCddLCAndXRmLTgnKQogICAgICAgIHNhbHQgPSBiY3J5cHQuZ2Vuc2FsdChyb3VuZHM9MTApCiAgICAgICAgaGFzaGVkID0gYmNyeXB0Lmhhc2hwdyhwYXNzd29yZCwgc2FsdCkKICAgICAgICBwcmludChzYWx0KQogICAgICAgIHByaW50KGhhc2hlZCkKICAgICAgICBzYWx0c3RyID0gc2FsdC5kZWNvZGUoJ3V0Zi04JykKICAgICAgICBoYXNoZWRzdHIgPSBoYXNoZWQuZGVjb2RlKCd1dGYtOCcpCiAgICAgICAgY3VyID0gbXlzcWwuY29ubmVjdGlvbi5jdXJzb3IoKQoKICAgICAgICBjdXIuZXhlY3V0ZSgKICAgICAgICAgICAgZiJJTlNFUlQgSU5UTyBUX1VTVUFSSU8odXN1X2VtYWlsLCB1c3VfaGFzaCwgdXN1X3NhbHQsIHVzdV9yb2wsIHVzdV9ub20sIHVzdV9hcGUsIHVzdV9mb25vKSBWQUxVRVMgKCd7ZGF0YVsnY29ycmVvJ119JywgJ3toYXNoZWRzdHJ9JywgJ3tzYWx0c3RyfScsICd2ZW5kZWRvcicsICd7ZGF0YVsnbm9tYnJlJ119JywgJ3tkYXRhWydhcGVsbGlkbyddfScsJ3tkYXRhWyd0ZWxlZm9ubyddfScpIikKCiAgICAgICAgbXlzcWwuY29ubmVjdGlvbi5jb21taXQoKQogICAgICAgIGN1ci5jbG9zZSgpCiAgICAgICAgcmV0dXJuIHsnbWVzc2FnZSc6ICdVc3VhcmlvIGNyZWFkbyBleGl0b3NhbWVudGUnfQoKCkBhcHAucm91dGUoJy8nKQpjbGFzcyBMb2dpbihSZXNvdXJjZSk6CiAgICBkZWYgcG9zdChzZWxmKToKICAgICAgICBwYXJzZXIgPSByZXFwYXJzZS5SZXF1ZXN0UGFyc2VyKCkKICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdjb3JyZW8nLCB0eXBlPXN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVRydWUsIGhlbHA9J0ZhbHRhIGVsIGNvcnJlbycpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgncGFzc3dvcmQnLCB0eXBlPXN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVRydWUsIGhlbHA9J0ZhbHRhIGxhIGNvbnRyYXNlw7FhJykKICAgICAgICBkYXRhID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogICAgICAgIGN1ciA9IG15c3FsLmNvbm5lY3Rpb24uY3Vyc29yKCkKICAgICAgICBjdXIuZXhlY3V0ZSgiU0VMRUNUICogRlJPTSBUX1VTVUFSSU8gV0hFUkUgVVNVX0VNQUlMID0gJXMiLAogICAgICAgICAgICAgICAgICAgIChkYXRhWydjb3JyZW8nXSwpKQogICAgICAgIHJlc3B1ZXN0YSA9IGN1ci5mZXRjaG9uZSgpCiAgICAgICAgY3VyLmNsb3NlKCkKICAgICAgICBpZihyZXNwdWVzdGEpOgogICAgICAgICAgICBwYXNzd29yZCA9IGJ5dGVzKGRhdGFbJ3Bhc3N3b3JkJ10sICd1dGYtOCcpCiAgICAgICAgICAgIHNhbHQgPSBieXRlcyhyZXNwdWVzdGFbM10sICd1dGYtOCcpCiAgICAgICAgICAgIGhhc2hlZCA9IGJjcnlwdC5oYXNocHcocGFzc3dvcmQsIHNhbHQpCiAgICAgICAgICAgIGhhc2hlZHN0ciA9IGhhc2hlZC5kZWNvZGUoJ3V0Zi04JykKICAgICAgICAgICAgaWYgaGFzaGVkc3RyID09IHJlc3B1ZXN0YVsyXToKICAgICAgICAgICAgICAgIHJldHVybiB7J21lc3NhZ2UnOiAnQmllbnZlbmlkbyd9CiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByZXR1cm57J21lc3NhZ2UnOiAnVXN1YXJpbyBvIGNvbnRyYXNlw7FhIGluY29ycmVjdGEnfSwgNDA0CgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybnsnbWVzc2FnZSc6ICdVc3VhcmlvIG8gY29udHJhc2XDsWEgaW5jb3JyZWN0b3MnfSwgNDA0CgoKIyBAYXBwLnJvdXRlKCcvYWdyZWdhci9wbGF5YScsIG1ldGhvZHMgPSBbIlBPU1QiXSkKCmNsYXNzIEFncmVnYXJQbGF5YShSZXNvdXJjZSk6CgogICAgZGVmIHBvc3Qoc2VsZik6CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgcGFyc2VyID0gcmVxcGFyc2UuUmVxdWVzdFBhcnNlcigpCiAgICAgICAgCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnZGlyZWNjaW9uJywgdHlwZT1zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD1UcnVlLCBoZWxwPSdGYWx0YSBsYSBkaXJlY2Npb24nKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2NhbnRpZGFkJywgdHlwZT1pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD1UcnVlLCBoZWxwPSdGYWx0YSBsYSBjYW50aWRhZCcpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgncHJlY2lvQXV0bycsIHR5cGU9ZmxvYXQsIHJlcXVpcmVkPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdGYWx0YSBwcmVjaW8gYXV0bycpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgncHJlY2lvTW90bycsIHR5cGU9ZmxvYXQsIHJlcXVpcmVkPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdGYWx0YSBwcmVjaW8gbW90bycpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgncHJlY2lvQ2FtaW9uZXRhJywgdHlwZT1mbG9hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVRydWUsIGhlbHA9J0ZhbHRhIHByZWNpbyBjYW1pb25ldGEnKQoKICAgICAgICBkYXRhID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogICAgICAgIGN1ciA9IG15c3FsLmNvbm5lY3Rpb24uY3Vyc29yKCkKCiAgICAgICAgY3VyLmV4ZWN1dGUoZiJpbnNlcnQgaW50byB0X3BsYXlhKHBsYXlhX2RpcikgdmFsdWVzICgne2RhdGFbJ2RpcmVjY2lvbiddfScpIikKICAgICAgICBteXNxbC5jb25uZWN0aW9uLmNvbW1pdCgpCiAgICAgICAgIyBjdXIuY2xvc2UoKQoKICAgICAgICBmb3IgY2FudGlkYWQgaW4gZGF0YVsnY2FudGlkYWQnXToKICAgICAgICAgICAgY3VyLmV4ZWN1dGUoZiJpbnNlcnQgaW50byB0X3Nsb3RwbGF5YShzbG90X25ybykgdmFsdWVzICh7ZGF0YVsnY2FudGlkYWQnXX0pICIpCiAgICAgICAgICAgIG15c3FsLmNvbm5lY3Rpb24uY29tbWl0KCkKICAgICAgICAjIGN1ci5jbG9zZSgpCgogICAgICAgIGN1ci5leGVjdXRlKGYiaW5zZXJ0IGludG8gdF90aXBvdmVoaWN1bG8odGlwb19wcmVjaW8pIHZhbHVlcyAoe2RhdGFbJ3ByZWNpb0F1dG8nXX0pICIpCiAgICAgICAgbXlzcWwuY29ubmVjdGlvbi5jb21taXQoKQogICAgICAgICMgY3VyLmNsb3NlKCkKCiAgICAgICAgY3VyLmV4ZWN1dGUoZiJpbnNlcnQgaW50byB0X3RpcG92ZWhpY3Vsbyh0aXBvX3ByZWNpbykgdmFsdWVzICh7ZGF0YVsncHJlY2lvTW90byddfSkiKQogICAgICAgIG15c3FsLmNvbm5lY3Rpb24uY29tbWl0KCkKICAgICAgICAjIGN1ci5jbG9zZSgpCgogICAgICAgIGN1ci5leGVjdXRlKGYiaW5zZXJ0IGludG8gdF90aXBvdmVoaWN1bG8odGlwb19wcmVjaW8pIHZhbHVlcyAoe2RhdGFbJ3ByZWNpb0NhbWlvbmV0YSddfSkgIikKCiAgICAgICAgbXlzcWwuY29ubmVjdGlvbi5jb21taXQoKQoKICAgICAgICBjdXIuY2xvc2UoKQogICAgICAgIHJldHVybiB7J21lc3NhZ2UnOiAnUGxheWEgY3JlYWRhIGV4aXRvc2FtZW50ZSd9CgoKYXBpLmFkZF9yZXNvdXJjZShVc3VhcmlvLCAiL3VzdWFyaW8iKQphcGkuYWRkX3Jlc291cmNlKFJlc2VydmFzLCAiL3Jlc2VydmFzIikKYXBpLmFkZF9yZXNvdXJjZShMb2dpbiwgIi91c3VhcmlvL2xvZ2luIikKYXBpLmFkZF9yZXNvdXJjZShBZ3JlZ2FyUGxheWEsICIvYWdyZWdhci9wbGF5YSIpCjx8ZmltX3N1ZmZpeHw+CgoKYXBpID0gQXBpKGFwcCkKCjx8ZmltX2VuZHw+"]
["f55a136729eca1b666249d5d5607d6500eba1715-5","f55a136729eca1b666249d5d5607d6500eba1715","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKCgpkZWYgc2lnbW9pZF9jcm9zc19lbnRyb3B5KGxhYmVscywgbG9naXRzKToKICAgIHJldHVybiB0Zi5yZWR1Y2Vfc3VtKHRmLnJlZHVjZV9tZWFuKHRmLm5uLnNpZ21vaWRfY3Jvc3NfZW50cm9weV93aXRoX2xvZ2l0cyhsYWJlbHM9bGFiZWxzLCBsb2dpdHM9bG9naXRzKSwgYXhpcz0wKSkKCmRlZiBzaWdtb2lkX2Nyb3NzX2VudHJvcHlfd2l0aG91dF9tZWFuKGxhYmVscywgbG9naXRzKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgbmRpbSA9IGxlbihsYWJlbHMuZ2V0X3NoYXBlKCkuYXNfbGlzdCgpKQogICAgcmV0dXJuIHRmLnJlZHVjZV9zdW0odGYubm4uc2lnbW9pZF9jcm9zc19lbnRyb3B5X3dpdGhfbG9naXRzKGxhYmVscz1sYWJlbHMsIGxvZ2l0cz1sb2dpdHMpLCBheGlzPVtpZHggZm9yIGlkeCBpbiByYW5nZSgxLCBuZGltKV0pCgo8fGZpbV9lbmR8Pg=="]
["cdd7f7fff3ffbd15985db93d19526f904d100d48-1","cdd7f7fff3ffbd15985db93d19526f904d100d48","PHxmaW1fcHJlZml4fD4KIyBTY3JpcHQ6IE11bHRpcGxpY2F0aW9uVGFibGUucHkKIyBEZXNjcmlwdGlvbjogVGhpcyBwcm9ncmFtIGFzayBmb3IgYSBudW1iZXIgYW5kIGxpbWl0IGFuZCBnZW5lcmF0ZXMKIyAgICAgICAgICAgICAgbXVsdGlwbGljYXRpb24gdGFibGUgZm9yIGl0LgoKIyBQcm9ncmFtbWVyOiBXaWxsaWFtIEtwYWJpdGV5IEt3YWJsYQojIERhdGU6IDIwLjA3LjE2CgoKIyBEZWZpbmVzIHRoZSBtYWluIGZ1bmN0aW9uLgpkZWYgbWFpbigpOgogICAgIyBDYWxscyB0aGUgaW50cm8gZnVuY3Rpb24KICAgIGludHJvKCkKCiAgICAjIERlY2xhcmVzIHZhcmlhYmxlIGZvciByZXBlYXRpbmcgdGhlIGxvb3AuCiAgICBrZWVwX2dvaW5nID0gJ1knIG9yICd5JwogICAgCiAgICAjIExvb3AgZm9yIGFza2luZyB1c2VyIGZvciBhbm90aGVyIGlucHV0LgogICAgd2hpbGUga2VlcF9nb2luZyA9PSAnWScgb3Iga2VlcF9nb2luZyA9PSAneSc6CiAgICAgICAgICAgIHByaW50KCkKICAgICAgICAKICAgICAgICAgICAgIyBBc2tzIHVzZXIgZm9yIHRoZSBsaW1pdAogICAgICAgICAgICBsaW1pdCA9IGludChpbnB1dCgiXHRcdFx0UGxlYXNlIEVudGVyIHRoZSBsaW1pdCB5b3Ugd2FudCB0byBkaXNwbGF5IHRvOiAiKSkKICAgICAgICAKCiAgICAgICAgICAgICMgQXNrcyB1c2VyIGZvciB0aGUgbnVtYmVyCiAgICAgICAgICAgIG51bWJlciA9IGludChpbnB1dCgiXHRcdFx0UGxlYXNlIEVudGVyIHRoZSBudW1iZXIgeW91IHdhbnQgdG8gZGlzcGxheSB0aGUgbXVsdGlwbGljYXRpb24gdGFibGUgb2YgOiAiKSkKICAgICAgICAgICAgcHJpbnQoKQoKICAgICAgICAgICAgIyBEaXNwbGF5cyB0aGUgaGVhZGluZy4KICAgICAgICAgICAgcHJpbnQoIlx0XHRcdFx0XHRcdE11bHRpcGxpY2F0aW9uIG9mICIsIG51bWJlcikKICAgICAgICAgICAgcHJpbnQoIlx0XHRcdFx0XHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKQoKICAgICAgICAgICAgIyBDYWxscyB0aGUgbXVsdGlwbGljYXRpb24gZnVuY3Rpb24uCiAgICAgICAgICAgIG11bHRpcGxpY2F0aW9uKGxpbWl0LCBudW1iZXIpCgo8fGZpbV9ob2xlfD4KIyBEZWZpbmVzIHRoZSBpbnRybyBmdW5jdGlvbiB0byBkaXNwbGF5IHdoYXQgdGhlIHByb2dyYW0gZG9lcy4KZGVmIGludHJvKCk6CiAgICBwcmludCgiXHRcdFx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIikKICAgIHByaW50KCJcdFx0XHQqXHRUaGlzIHByb2dyYW0gYXNrIGZvciBhIG51bWJlciBhbmQgbGltaXQgYW5kIFx0KiIpCiAgICBwcmludCgiXHRcdFx0Klx0Z2VuZXJhdGVzIG11bHRpcGxpY2F0aW9uIHRhYmxlIGZvciBpdC4gICAgICBcdCoiKQogICAgcHJpbnQoIlx0XHRcdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpCiAgICAKCiMgRGVmaW5lcyB0aGUgbXVsdGlwbGljYXRpb24gZnVuY3Rpb24gYW5kIHVzaW5nIHRoZSBudW1fbGltaXQgYW5kIG51bWJlcl9jaG9pY2UgYXMgcGFyYW1ldGVyIHZhcmlhYmxlcy4KZGVmIG11bHRpcGxpY2F0aW9uKG51bV9saW1pdCwgbnVtYmVyX2Nob2ljZSk6CiAgICAKICAgICMgTG9vcHMgYW5kIGRpc3BsYXlzIHRoZSBtdWx0aXBsaWNhdGlvbiB0YWJsZQogICAgZm9yIG51bSBpbiByYW5nZSggbnVtX2xpbWl0ICsgMSApOgogICAgICAgICAgICBhbnMgPSBudW0gKiBudW1iZXJfY2hvaWNlCiAgICAgICAgICAgIHByaW50KCdcdFx0XHRcdFx0XHQnLCBudW0sICJYIiwgbnVtYmVyX2Nob2ljZSwgIj0iICxhbnMpCiAgICAgICAgICAgIHByaW50KCkKCiAgICAgICAgICAgIAogICAgCiMgQ2FsbHMgdGhlIG1haW4gZnVuY3Rpb24uCm1haW4oKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAjIEFza3MgVXNlciBpZiBoZS9zaGUgd2FudHMgdG8gY2hlY2sgZm9yIGFub3RoZXIgbnVtYmVyLgogICAgICAgICAgICBrZWVwX2dvaW5nID0gaW5wdXQoIlx0XHRcdERvIHlvdSB3YW50IHRvIGNoZWNrIGZvciBhbm90aGVyIG51bWJlciA/IFllcyA9IHkgb3IgWSAgIE5vID0gTiBvciBuOiAiKQogICAgICAgICAgICAKCjx8ZmltX2VuZHw+"]
["a83624cc0094ec3360a66abd514d14dec49e3bae-5","a83624cc0094ec3360a66abd514d14dec49e3bae","PHxmaW1fcHJlZml4fD4KZnJvbSBtbWljcm9iaXQgaW1wb3J0ICoKaW1wb3J0IG1iX2kyY19sY2QxNjAyCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmwgPSBtYl9pMmNfbGNkMTYwMi5MQ0QxNjIwKCkKbC5wdXRzKCJIZWxsbyBtaWNyb2JpdCEiKQo8fGZpbV9lbmR8Pg=="]
["85ccab9cbb75a09c306ac0f128541db90b75990b-2","85ccab9cbb75a09c306ac0f128541db90b75990b","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgQWxsb2NhdGlvblN0YXRlKG1vZGVscy5Nb2RlbCk6CiAgICB0aW1ldGFibGVfaWQgPSBtb2RlbHMuVVVJREZpZWxkKHByaW1hcnlfa2V5PVRydWUpCiAgICBkYXRhX2hhc2ggPSBtb2RlbHMuQmluYXJ5RmllbGQoKQo8fGZpbV9lbmR8Pg=="]
["8d51885c8fdfdea5bc25232e9453b5532fdedd61-1","8d51885c8fdfdea5bc25232e9453b5532fdedd61","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCmltcG9ydCBzeXMKaW1wb3J0IHNoYWRvd2hhc2gKPHxmaW1faG9sZXw+CiAgICAgICAgaGFzaCA9IHNoYWRvd2hhc2guZ2VuZXJhdGUoc3lzLmFyZ3ZbMV0pCiAgICAgICAgcHJpbnQgYmFzZTY0LmI2NGVuY29kZShoYXNoKQo8fGZpbV9zdWZmaXh8PgppbXBvcnQgYmFzZTY0CgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAyOgo8fGZpbV9lbmR8Pg=="]
["85f579a6ffed029a993574d7204ba125eec7d662-1","85f579a6ffed029a993574d7204ba125eec7d662",{"$cut":{"chars":18016,"head":"PHxmaW1fcHJlZml4fD4KZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCmltcG9ydCBudW1weSBhcyBucApmcm9tIGNyb25leCBpbXBvcnQgQ3JvbkV4cHJlc3Npb24KaW1wb3J0IG1hdGgKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IGNvbGxlY3Rpb25zCmZyb20gaXRlcnRvb2xzIGltcG9ydCBjeWNsZQoKY2xhc3MgVGltZVJlcHJlc2VudGF0aW9uKG1ldGFjbGFzcz1BQkNNZXRhKToKICAgICIiIgogICAgR2VuZXJhbCBhYnN0cmFjdCBjbGFzcyBmb3IgcmVwcmVzZW50aW5nIHRpbWUgd2hlbiB0aGUgYmFuayBvcGVyYXRpb25zIHNob3VsZCBvY2N1ci4KICAgIEFjdHVhbCBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzIHRoYXQgcmVwcmVzZW50IHRpbWUgc2hvdWxkIGltcGxlbWVudCB0aGlzIGNsYXNzLgogICAgIiIiCgogICAgQGFic3RyYWN0bWV0aG9kCiAgICBkZWYgZXZhbHVhdGUoc2VsZixkYXRldGltZSk6IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IgI2ltcGxlbWVudGVkIG1ldGhvZCBzaG91bGQgcmV0dXJuIGJvb2wKCmNsYXNzIENyb24oVGltZVJlcHJlc2VudGF0aW9uKToKICAgICIiIgogICAgQ2xhc3MgZm9yIHJlcHJlc2VudGluZyBjcm9uIHRpbWVzLiBUaGlzIGNsYXNzIGlzIG1lYW50IHRvIGJlIHVzZWQgd2hlbiB3ZSBjYW4gYmUgY2VydGFpbiB0aGF0IG9uIGNlcnRhaW4gZGF5cwogICAgb3IgaW4gY2VydGFpbiB0aW1lcywgdGhlIHRyYW5zYWN0aW9uIHNob3VsZCBiZSBleGVjdXRpbmcuIAogICAgTm90ZToKICAgICAgICBUaGUgcGFja2FnZSB3ZSB1c2UgZm9yIGNyb24gcGFyc2luZyAoY3JvbmV4KSBzdXBwb3J0cyB1c2luZyByZXBlYXRlcnMgKGZvciBwZXJpb2RpY2l0eSkuIAogICAgICAgIFRvIHVzZSByZXBlYXRlciBwdXQgJyVudW1iZXInIGluIGV4cHJlc3Npb24uCiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLGV4cHJlc3Npb24pOgogICAgICAgICIiIgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIGV4cHJlc3Npb24gKHN0cikgOiBjbGFzc2ljIGNyb24gZXhwcmVzc2lvbiBzdHJpbmcKICAgICAgICAiIiIKICAgICAgICBzZWxmLmNyb25qb2IgPSBDcm9uRXhwcmVzc2lvbihleHByZXNzaW9uKQogICAgCiAgICBkZWYgZXZhbHVhdGUoc2VsZixkYXRldGltZSk6CiAgICAgICAgc2VsZi5sYXN0X3RpbWUgPSBkYXRldGltZQogICAgICAgIHJldHVybiBzZWxmLmNyb25qb2IuY2hlY2tfdHJpZ2dlcihkYXRldGltZS50aW1ldHVwbGUoKVs6NV0pCiAgICAKICAgIGRlZiBldmFsdWF0ZV9leHByZXNzaW9uKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmNyb25qb2IubnVtZXJpY2FsX3RhYgogICAgCiAgICBkZWYgZ2V0X2V4cHJlc3Npb24oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuY3JvbmpvYi5zdHJpbmdfdGFiCiAgICAKICAgIGRlZiBnZXRfZXBvY2goc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuY3JvbmpvYi5lcG9jaAogICAgCiAgICBkZWYgc2V0X2Vwb2NoKHNlbGYsZXBvY2gpOgogICAgICAgICIiIgogICAgICAgIFNldHRpbmcgdGhlIGVwb2NoIHdpbGwgcHJvYmFibHkgYmUgcmVxdWlyZWQgZm9yIHJlcGVhdGVycyB0byB3b3JrIGNvcnJlY3RseS4gVGhlIGVwb2NoIGlzIGltcG9ydGFudCBzaW5jZQogICAgICAgIGl0IGlzIHRoZSBzdGFydCBmcm9tIHdoaWNoIHRoZSByZXBlYXRlcnMgd2lsbCBtZWFzdXJlIHRoZSBwZXJpb2QuCiAgICAgICAgIiIiCiAgICAgICAgdHJ5OiAjIHRlc3QgaWYgdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzIGFyZSByaWdodCBpbiB0ZXJtcyBvZiBhIGNvcnJlY3QgZGF0ZXRpbWUKICAgICAgICAgICAgZGF0ZXRpbWUoKmVwb2NoWzo1XSkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlNvbWUgdmFsdWUgaW4gdGhlIHR1cGxlIGRvZXNuJ3QgbWF0Y2ggYSBjb3JyZWN0IGRhdGUuIFVzZSB0aGUgZm9ybWF0OiB5ZWFyLCBtb250aCxkYXksaG91cixtaW51dGUuIikKICAgICAgICBpZiBsZW4oZXBvY2gpID09IDY6CiAgICAgICAgICAgIHNlbGYuY3JvbmpvYi5lcG9jaCA9IGVwb2NoCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVXNlIHR1cGxlIHdpdGggNiB2YWx1ZXMgYmVpbmcgaW4gdGhpcyBvcmRlcjogeWVhcixtb250aCxkYXksaG91cixtaW51dGUsdXRjX29mZnNldCEiKQogICAgICAgICAgICAKY2xhc3MgVGltZURpc3RyaWJ1dGlvbihUaW1lUmVwcmVzZW50YXRpb24pOgogICAgIiIiCiAgICBVcGRhdGUgYXMgb2YgMjMuMTAuMjAxNzogVGhpcyBjbGFzcyBzaG91bGRuJ3QgYmUgdXNlZCBiZWNhdXNlIGl0IGRvZXNuJ3QgcHJlc2VydmUgdGhlIHJlcXVpcmVkIHByb2JhYmlsaXRpZXMuCiAgICAgICAgQSBiZXR0ZXIgaW1wbGVtZW50YXRpb24gaXMgVGltZURpc3RyaWJFeHAgdGhhdCB3ZSBzaG91bGQgYmUgdXNpbmcuCiAgICBDbGFzcyBmb3IgcmVwcmVzZW50aW5nIHRpbWUgZGlzdHJpYnV0aW9ucyBieSB1c2luZyBkaWZmZXJlbnQgZ3JhbnVsYXJpdGllcyBvZiB0aW1lLgogICAgVGhlIHNwZWNpZmllZCBncmFudWxhcml0aWVzIHVzZWQgYXJlIDogbW9udGgsIGRheSwgaG91ciBhbmQgbWludXRlLiBUaGlzIGNsYXNzIGlzIG1lYW50IHRvIGJlIHVzZWQgd2hlbiAKICAgIHdlIHdhbnQgdG8gZGVmaW5lIHRoZSB0aW1lIGZvciB0cmFuc2FjdGlvbidzIGV4ZWN1dGlvbiBhcyBhIHByb2JhYmlsaXR5IG9uIGEgY2VydGFpbiBkYXkuIAogICAgVE9ETzogQWZhaWsgdGhlcmUgaXMgbm8gd2F5IHRvIHNwZWNpZnkgdGhhdCB0aGUgcHJvYmFiaWxpdHkgb2YgdHJhbnNhY3Rpb24gdG8gZXhlY3V0ZSBzaG91bGQgaW5jcmVhc2UKICAgIHdpdGggdGhlIHRpbWUgZ2V0dGluZyBsYXRlciBhbmQgbGF0ZXIuLiBpcyB0aGF0IG9rYXk/CiAgICBUT0RPOiBJbXBsZW1lbnQgd2Vla2RheSBncmFudWxhcml0eS4gCiAgICBUT0RPOiBJbXBsZW1lbnQgc29tZSBmb3JtIG9mIGNvdW50ZXI/IG1heGNvdW50PyBmb3IgYSBwZXJpb2Qgb2YgdGltZQogICAgIiIiCiAgICAKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZF9kaWN0KToKICAgICAg"}}]
["c0ad44fed2e6ea4340037d436cb61e7dde93fb96-1","c0ad44fed2e6ea4340037d436cb61e7dde93fb96","PHxmaW1fcHJlZml4fD4KcCA9IGludChpbnB1dCgnRGlnaXRlIG8gaW7DrWNpbyBkYSBQQTogJykpCnIgPSBpbnQoaW5wdXQoJ0RpZ2l0ZSBhIHJhesOjbyBkYSBQQTogJykpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZm9yIGMgaW4gcmFuZ2UocCwgcCArIHIqMTAsIHIpOgogICAgcHJpbnQoYykKPHxmaW1fZW5kfD4="]
["f1a552d2ecf4cc104fff08b67f1ab5ac54a726f9-5","f1a552d2ecf4cc104fff08b67f1ab5ac54a726f9","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMC44IG9uIDIwMTgtMDgtMTggMTE6MTgKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMsIG1vZGVscwoKCmNsYXNzIE1pZ3JhdGlvbihtaWdyYXRpb25zLk1pZ3JhdGlvbik6Cjx8ZmltX2VuZHw+"]
["9e386026a6f176b94bb556b748e34f6756ba3fb7-1","9e386026a6f176b94bb556b748e34f6756ba3fb7","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAoKZnJvbSBibHVlc2t5IGltcG9ydCBSdW5FbmdpbmUKZnJvbSBibHVlc2t5LnNjYW5zIGltcG9ydCBBZGFwdGl2ZUFzY2FuCmZyb20gYmx1ZXNreS5leGFtcGxlcyBpbXBvcnQgTW92ZXIsIFN5bkdhdXNzCmZyb20gYmx1ZXNreS5jYWxsYmFja3MgaW1wb3J0IExpdmVQbG90LCBMaXZlVGFibGUKZnJvbSBibHVlc2t5LnRlc3RzLnV0aWxzIGltcG9ydCBzZXR1cF90ZXN0X3J1bl9lbmdpbmUKCgojcGx0LmlvbigpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KUkUgPSBzZXR1cF90ZXN0X3J1bl9lbmdpbmUoKQptb3RvciA9IE1vdmVyKCdtb3RvcicsIFsncG9zJ10pCmRldCA9IFN5bkdhdXNzKCdkZXQnLCBtb3RvciwgJ3BvcycsIGNlbnRlcj0wLCBJbWF4PTEsIHNpZ21hPTEpCgo8fGZpbV9lbmR8Pg=="]
["93e278d8315dd59f7ab21c097ecb1efdbfcfb857-1","93e278d8315dd59f7ab21c097ecb1efdbfcfb857","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcGF0aAoKZnJvbSAuIGltcG9ydCB2aWV3cwoKdXJscGF0dGVybnMgPSBbCiAgICBwYXRoKCIiLCB2aWV3cy5ob21lcGFnZSwgbmFtZT0iaG9tZXBhZ2UiKSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcGF0aCgiY29udGFjdCIsIHZpZXdzLmNvbnRhY3QsIG5hbWU9ImNvbnRhY3QiKSwKICAgIHBhdGgoJ3NhdmVfbWVzc2FnZScsIHZpZXdzLnNhdmVfbWVzc2FnZSwgbmFtZT0ic2F2ZV9tZXNzYWdlIiksCiAgICBdCjx8ZmltX2VuZHw+"]
["c0d94b1a1cf039854d5bda5b54d2e7badd5d5b3d-5","c0d94b1a1cf039854d5bda5b54d2e7badd5d5b3d","PHxmaW1fcHJlZml4fD4KIyBicm9hZGNhc3QgZGlzY292ZXJ5IHJhc3BiZXJyeSBwaQojIHZlcnNpb24gMS4wCiMgd2lueG9zIDIwMTYtMDYtMTAKaW1wb3J0IHNvY2tldAppbXBvcnQgc3lzCmRlc2MgPSAoJzxicm9hZGNhc3Q+JywgOTAwMCkKcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQpzLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19CUk9BRENBU1QsIDEpCnMuYmluZCgoJycsMTEwMDApKQpzLnNlbmR0bygiUlBJIE5BTUUiLCBkZXNjKQp3aGlsZSBUcnVlOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkYXRhLGFkZHI9cy5yZWN2ZnJvbSgxMDI0KQogICAgcHJpbnQoIiVzOiVzIiUoYWRkcixkYXRhKSkKPHxmaW1fZW5kfD4="]
["27d8c3895ffff086c53a46835b5826116f8fc5e9-2","27d8c3895ffff086c53a46835b5826116f8fc5e9","PHxmaW1fcHJlZml4fD4KIyBJbXBvcnQgbW9kdWxlCmZyb20gdGtpbnRlciBpbXBvcnQgKgoKCiMgSEVMUF9QQUdFID0gUGhvdG9JbWFnZShmaWxlPSIuL0kgZGlkbid0IG1ha2UgYSBoZWxwIHBhZ2UiKQpnbG9iYWwgX1NUQVJUX1BBR0UKZ2xvYmFsIF9NQUlOX1BBR0UKZ2xvYmFsIF9IRUxQX1BBR0UKZ2xvYmFsIF9HQU1FX09WRVIKZ2xvYmFsIF9TSU5HTEUKZ2xvYmFsIF9FQVNZCmdsb2JhbCBwc2NvcmUKZ2xvYmFsIGNzY29yZQpnbG9iYWwgc2NlbmUKZ2xvYmFsIHJvb3QKZ2xvYmFsIGJhY2tncm91bmQKIyBeIHl1Y2t5IG5hbWluZyBhbmQgcmVkdXAuIGFsbCBiYXNpY2FsbHkgd29ya2luZyBsaWtlIEkvTyBzd2l0Y2hlcwoKCmRlZiBtYWluKCk6CgogICAgaW5pdF9ndWkoKQoKICAgIHByaW50KF9TVEFSVF9QQUdFKQogICAgZ2xvYmFsIHJvb3QKICAgIHJvb3QgPSBUaygpCiAgICByb290Lmdlb21ldHJ5KCI4MzB4NTg1IikKCiAgICBTVEFSVF9QQUdFID0gUGhvdG9JbWFnZShmaWxlPSIuL2ltYWdlcy9wYWdlcy9zdGFydF9wYWdlLnBuZyIpCgogICAgZ2xvYmFsIGJhY2tncm91bmQKICAgIGJhY2tncm91bmQgPSBMYWJlbChyb290LCBpbWFnZT1TVEFSVF9QQUdFKQogICAgYmFja2dyb3VuZC5wbGFjZSh4PTAsIHk9MCkKCiAgICByb290LmJpbmQoIjxCdXR0b24tMT4iLCBsZWZ0Y2xpY2spCiAgICByb290LnJlc2l6YWJsZShGYWxzZSwgRmFsc2UpCiAgICByb290Lm1haW5sb29wKCkKCgpkZWYgaW5pdF9ndWkoKToKCiAgICBnbG9iYWwgX1NUQVJUX1BBR0UsIF9NQUlOX1BBR0UsIF9HQU1FX09WRVIsIF9IRUxQX1BBR0UKICAgIGdsb2JhbCBfU0lOR0xFLCBfRUFTWQogICAgX1NUQVJUX1BBR0UgPSBUcnVlCiAgICBfTUFJTl9QQUdFLCBfR0FNRV9PVkVSLCBfSEVMUF9QQUdFID0gRmFsc2UsIEZhbHNlLCBGYWxzZQogICAgX1NJTkdMRSwgX0VBU1kgPSBUcnVlLCBUcnVlCgogICAgZ2xvYmFsIHBzY29yZSwgY3Njb3JlCiAgICBwc2NvcmUsIGNzY29yZSA9IDAsIDAKICAgIHByaW50KCIqIio1MDAwKQoKCiMgVGhlIG9ubHkgYWN0aW9uIGxpc3RlbmVyLCB1c2luZyBjb25kaXRpb25hbHMgdG8gZGlyZWN0IGZsb3cKZGVmIGxlZnRjbGljayhldmVudCk6CgogICAgcHJpbnQoImNsaWNrZWQgYXQge306e30iLmZvcm1hdChldmVudC54LCBldmVudC55KSkKICAgIGV4ZWN1dGUoZXZlbnQueCwgZXZlbnQueSkKCgojIGV4ZWN1dGVzIGlmIGFueXRoaW5nLCB3YXMgY2xpY2tlZC4uLiB6b2lua3MsIGluZWZmaWNpZW50IHRobwpkZWYgZXhlY3V0ZSh4LCB5KToKCiAgICAjIG1vc3Qgb2YgdGhlIGNsaWNrcyB3aWxsIGJlIG9uIHRoZSBtYWluIHBhZ2UKICAgIGlmIF9NQUlOX1BBR0U6CgogICAgICAgIGlmIDEzMCA8IHggPCAyMjAgYW5kIDQyMCA8IHkgPCA1MjA6CgogICAgICAgICAgICBwcmludCgicm9jayIpCgogICAgICAgIGVsaWYgMzcwIDwgeCA8IDQ5NSBhbmQgNDIwIDwgeSA8IDUzMDoKCiAgICAgICAgICAgIHByaW50KCJwYXBlciIpCgogICAgICAgIGVsaWYgNjIwIDwgeCA8IDc1MCBhbmQgNDIwIDwgeSA8IDUzMDoKCiAgICAgICAgICAgIHByaW50KCJzY2lzc29ycyIpCgogICAgZWxpZiBfU1RBUlRfUEFHRToKCiAgICAgICAgaWYgNjAwIDwgeCA8IDgwMCBhbmQgNzUgPCB5IDwgMTAwOgoKICAgICAgICAgICAgcHJpbnQoInNpbmdsZXJvdW5kIikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBfU0lOR0xFID0gVHJ1ZQogICAgICAgICAgICAjIGhpZGUgYXN0ZXJpY3MgZm9yIGJlc3Qgb2YgMwoKPHxmaW1fZW5kfD4="]
["2755f9b060f22af077226e9992cc53a287a54d2c-3","2755f9b060f22af077226e9992cc53a287a54d2c","PHxmaW1fcHJlZml4fD4Kd29yZD0gJ2NyYWJiaW5lc3MnCng9IHdvcmRbOmxlbih3b3JkKS00XQpwcmludCh4KQppZiB4W2xlbih4KS0xXT09J2knOgogICAgeD14WzpsZW4oeCktMV0KICAgIHg9eCsneScKcHJpbnQoeCkgICAgCndvcmQ9ICdoYXBwaW5lc3MnCng9IHdvcmRbOmxlbih3b3JkKS00XQpwcmludCh4KQppZiB4W2xlbih4KS0xXT09J2knOgogICAgeD14WzpsZW4oeCktMV0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgeD14Kyd5Jwo8fGZpbV9lbmR8Pg=="]
["5fe81698a5fd5b1a7b24754cc209debd8511d1ea-3","5fe81698a5fd5b1a7b24754cc209debd8511d1ea","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCiMgVVJMOgojID09PT09CiMgaHR0cHM6Ly9sZWV0Y29kZS5jb20vcHJvYmxlbXMvcmVzdG9yZS1pcC1hZGRyZXNzZXMvCiMKIyBERVNDOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgPT09PT0KIyBHaXZlbiBhIHN0cmluZyBjb250YWluaW5nIG9ubHkgZGlnaXRzLAojIHJlc3RvcmUgaXQgYnkgcmV0dXJuaW5nIGFsbCBwb3NzaWJsZSB2YWxpZCBJUCBhZGRyZXNzIGNvbWJpbmF0aW9ucy4KIwo8fGZpbV9lbmR8Pg=="]
["fdeca847f9a8fbd5f47360ef742f762341b0879f-1","fdeca847f9a8fbd5f47360ef742f762341b0879f","PHxmaW1fcHJlZml4fD4KIiIiCkludGVncmF0aW9uIHRlc3RzCiIiIgp0cnk6CiAgICBmcm9tIGRqYW5nby51cmxzIGltcG9ydCByZXZlcnNlCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgIGZyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlICAjIDwgREpBTkdPMS4xMAoKZnJvbSAudGVzdHMgaW1wb3J0IExvZ2dlZEluVGVzdENhc2UKCgo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLmFzc2VydEluKAogICAgICAgICAgICBiJ2hyZWY9Ii9hZG1pbi9wb2xscy9jaG9pY2UvYWN0aW9ucy9kZWxldGVfYWxsLyInLCByZXNwb25zZS5jb250ZW50CiAgICAgICAgKQo8fGZpbV9zdWZmaXh8PgpjbGFzcyBDaGFuZ2VMaXN0VGVzdHMoTG9nZ2VkSW5UZXN0Q2FzZSk6CiAgICBkZWYgdGVzdF9jaGFuZ2VsaXN0X2FjdGlvbl9pc19yZW5kZXJlZChzZWxmKToKICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldChyZXZlcnNlKCJhZG1pbjpwb2xsc19jaG9pY2VfY2hhbmdlbGlzdCIpKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwMCkKPHxmaW1fZW5kfD4="]
["f57d4b607d805b2b3d8fe832ea33acf9a6e4e8ed-3","f57d4b607d805b2b3d8fe832ea33acf9a6e4e8ed","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KZnJvbSBCYXNlSFRUUFNlcnZlciBpbXBvcnQgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcixIVFRQU2VydmVyCmltcG9ydCB1cmxsaWIyCmltcG9ydCBqc29uClBPUlRfTlVNQkVSID0gMTAwODcKCgpkZWYgZ2V0KCk6CiAgICAjcmVwbGFjZSA/Pz8gdG8geW91ciB2ZWlkIGFuZCBhcGlfa2V5CiAgICB1ID0gJ2h0dHA6Ly9hcGkua2l3aXZtLml0Ny5uZXQvdjEvZ2V0U2VydmljZUluZm8/dmVpZD0/Pz8mYXBpX2tleT0/Pz8nCiAgICB0cnk6CglyZXNwb25zZSA9IHVybGxpYjIudXJsb3Blbih1KSAgCglodG1sID0gcmVzcG9uc2UucmVhZCgpCglqcyA9IGpzb24ubG9hZHMoaHRtbCkKCXggPSBqc1snZGF0YV9jb3VudGVyJ10KCXkgPSBqc1sncGxhbl9tb250aGx5X2RhdGEnXQoJcCA9IHgqMS4wLyAoMTAyNCoxMDI0KjEwMjQpCglyZXR1cm4gJyVmIEdCIHVzZWQsIGFib3V0ICVmICUlIHBlcmNlbnQnJShwLCh4KjEwMC4wKS95KQogICAgZXhjZXB0OgoJcGFzcwogICAgcmV0dXJuICdFcnJvci4gUGxlYXNlIHJldHJ5JwoKI1RoaXMgY2xhc3Mgd2lsbCBoYW5kbGVzIGFueSBpbmNvbWluZyByZXF1ZXN0IGZyb20KI3RoZSBicm93c2VyIApjbGFzcyBteUhhbmRsZXIoQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CgkKCSNIYW5kbGVyIGZvciB0aGUgR0VUIHJlcXVlc3RzCglkZWYgZG9fR0VUKHNlbGYpOgo8fGZpbV9ob2xlfD4KCQlyZXR1cm4KCnRyeToKCSNDcmVhdGUgYSB3ZWIgc2VydmVyIGFuZCBkZWZpbmUgdGhlIGhhbmRsZXIgdG8gbWFuYWdlIHRoZQoJI2luY29taW5nIHJlcXVlc3QKCXNlcnZlciA9IEhUVFBTZXJ2ZXIoKCcnLCBQT1JUX05VTUJFUiksIG15SGFuZGxlcikKCXByaW50ICdTdGFydGVkIGh0dHBzZXJ2ZXIgb24gcG9ydCAnICwgUE9SVF9OVU1CRVIKCQoJI1dhaXQgZm9yZXZlciBmb3IgaW5jb21pbmcgaHR0byByZXF1ZXN0cwoJc2VydmVyLnNlcnZlX2ZvcmV2ZXIoKQoKZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgoJcHJpbnQgJ15DIHJlY2VpdmVkLCBzaHV0dGluZyBkb3duIHRoZSB3ZWIgc2VydmVyJwoJc2VydmVyLnNvY2tldC5jbG9zZSgpCjx8ZmltX3N1ZmZpeHw+CgkJc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkKCQlzZWxmLnNlbmRfaGVhZGVyKCdDb250ZW50LXR5cGUnLCd0ZXh0L2h0bWwnKQoJCXNlbGYuZW5kX2hlYWRlcnMoKQoJCXNlbGYud2ZpbGUud3JpdGUoZ2V0KCkpCjx8ZmltX2VuZHw+"]
["8d1033292ab6c0839afbe96031d9febe761cfcb2-3","8d1033292ab6c0839afbe96031d9febe761cfcb2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCmZyb20gZW5kcG9pbnRzIGltcG9ydCBORVdfRU1BSUwsIE1FU1NBR0VfQUZURVIsIE1FU1NBR0VfQ09VTlQKCgpjbGFzcyBNYWlsKG9iamVjdCk6CiAgICAiIiIKICAgIFB5dGhvbiB3cmFwcGVyIGZvciAxMG1pbnV0ZW1haWwuY29tCiAgICAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5zZXNzaW9uID0gcmVxdWVzdHMuc2Vzc2lvbigpCiAgICAgICAgc2VsZi5tZXNzYWdlX2NvdW50ID0gMAogICAgICAgIHNlbGYubWVzc2FnZXMgPSBbXQogICAgICAgIHNlbGYubWFpbCA9IHNlbGYuc2Vzc2lvbi5nZXQoTkVXX0VNQUlMKS5qc29uKClbJ2FkZHJlc3MnXQoKICAgIGRlZiBnZXRfbWFpbChzZWxmKToKICAgICAgICAiIiIKICAgICAgICA6cmV0dXJuOiBNYWlsIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYubWFpbAoKICAgIGRlZiBnZXRfbWVzc2FnZShzZWxmKToKICAgICAgICAiIiIKICAgICAgICA6cmV0dXJuOiBsaXN0IG9mIG1lc3NhZ2VzIHN0b3JlZCBpbiB0aGlzIGluc3RhbmNlCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYubWVzc2FnZXMKCiAgICBkZWYgZmV0Y2hfbWVzc2FnZShzZWxmKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICIiIgogICAgICAgIEZldGNoZXMgZm9yIG5ldyBtZXNzYWdlcyB3aGljaCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIGluc3RhbmNlCiAgICAgICAgOnJldHVybjogTGlzdCBvZiBtZXNzYWdlcyBzdG9yZWQgaW4gdGhlIGluc3RhbmNlCiAgICAgICAgIiIiCjx8ZmltX2VuZHw+"]
["190f7fb3511443d646e73f0f8a1583ab1225ba21-1","190f7fb3511443d646e73f0f8a1583ab1225ba21","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IHJjbHB5CmltcG9ydCBzeXMKZnJvbSBwaG90b19jb2xsZWN0b3IucGhvdG9fY29sbGVjdG9yIGltcG9ydCBQaG90b0NvbGxlY3RvcgoKZGVmIG1haW4oYXJncz1Ob25lKToKICAgIHRyeToKICAgICAgICAjIFNldHVwCiAgICAgICAgcmNscHkuaW5pdChhcmdzPWFyZ3MpCiAgICAgICAgcGhvdG9fY29sbGVjdG9yID0gUGhvdG9Db2xsZWN0b3IoKQogICAgICAgIHBob3RvX2NvbGxlY3Rvci5zdGF0ZVsic2FtcGxlX3JhbmdlIl09MzYwCiAgICAgICAgcGhvdG9fY29sbGVjdG9yLnJ1bigpCiAgICAgICAgCiAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgcHJpbnQoIkNsb3NpbmcgcG9saWN5IGNvbm5lY3Rpb24gZHVlIHRvIGtleWJvYXJkIGludGVycnVwdCIpCiAgICBmaW5hbGx5Ogo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIyBDbGVhbnVwCiAgICAgICAgcGhvdG9fY29sbGVjdG9yLmRlc3Ryb3lfbm9kZSgpCiAgICAgICAgcmNscHkuc2h1dGRvd24oKQo8fGZpbV9lbmR8Pg=="]
["193a5603ad2c420b409bf0f265d2d2244c193844-4","193a5603ad2c420b409bf0f265d2d2244c193844","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAoKZnJvbSBjaGFsbGVuZ2VzLmRheTE1IGltcG9ydCBwYXJ0MV8yCgoKQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJ0ZXN0IiwgWwogICAgewogICAgICAgICJpbnB1dCI6IFswLCAzLCA2XSwKICAgICAgICAiZXhwZWN0ZWQiOiA0MzYsCiAgICAgICAgInR1cm5zIjogMjAyMAogICAgfSwKICAgIHsKICAgICAgICAiaW5wdXQiOiBbMSwgMywgMl0sCiAgICAgICAgImV4cGVjdGVkIjogMSwKICAgICAgICAidHVybnMiOiAyMDIwCiAgICB9LAogICAgewogICAgICAgICJpbnB1dCI6IFsyLCAxLCAzXSwKICAgICAgICAiZXhwZWN0ZWQiOiAxMCwKICAgICAgICAidHVybnMiOiAyMDIwCiAgICB9LAogICAgewogICAgICAgICJpbnB1dCI6IFsxLCAyLCAzXSwKICAgICAgICAiZXhwZWN0ZWQiOiAyNywKICAgICAgICAidHVybnMiOiAyMDIwCiAgICB9LAo8fGZpbV9ob2xlfD4KICAgIH0sCiAgICB7CiAgICAgICAgImlucHV0IjogWzMsIDIsIDFdLAogICAgICAgICJleHBlY3RlZCI6IDQzOCwKICAgICAgICAidHVybnMiOiAyMDIwCiAgICB9LAogICAgewogICAgICAgICJpbnB1dCI6IFszLCAxLCAyXSwKICAgICAgICAiZXhwZWN0ZWQiOiAxODM2LAogICAgICAgICJ0dXJucyI6IDIwMjAKICAgIH0sCl0pCmRlZiB0ZXN0X3NhbXBsZV9pbnB1dF9wYXJ0MSh0ZXN0KToKICAgIHJlc3VsdCA9IHBhcnQxXzIodGVzdFsiaW5wdXQiXSwgdGVzdFsidHVybnMiXSkKICAgIGFzc2VydCByZXN1bHQgPT0gdGVzdFsiZXhwZWN0ZWQiXQoKCmRlZiB0ZXN0X3B1enpsZV9pbnB1dF9wYXJ0MSgpOgogICAgcmVzdWx0ID0gcGFydDFfMihbOSwgMTksIDEsIDYsIDAsIDUsIDRdLCAyMDIwKQogICAgYXNzZXJ0IHJlc3VsdCA9PSAxNTIyCgoKZGVmIHRlc3RfcHV6emxlX2lucHV0X3BhcnQyKCk6CiAgICByZXN1bHQgPSBwYXJ0MV8yKFs5LCAxOSwgMSwgNiwgMCwgNSwgNF0sIDMwMDAwMDAwKQogICAgYXNzZXJ0IHJlc3VsdCA9PSAxODIzNAo8fGZpbV9zdWZmaXh8PgogICAgewogICAgICAgICJpbnB1dCI6IFsyLCAzLCAxXSwKICAgICAgICAiZXhwZWN0ZWQiOiA3OCwKICAgICAgICAidHVybnMiOiAyMDIwCjx8ZmltX2VuZHw+"]
["f559d7f877f4320c98539c06b16bafb7926e7cca-5","f559d7f877f4320c98539c06b16bafb7926e7cca","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBmbGFzayBpbXBvcnQgY3VycmVudF9hcHAgYXMgYXBwCmZyb20gZmxhc2suZXh0LnJlc3RmdWwgaW1wb3J0IGZpZWxkcywgbWFyc2hhbAoKZnJvbSBzaGl2YS5jb252ZXJ0ZXIgaW1wb3J0IGdldF9jb252ZXJ0ZXIKZnJvbSBzaGl2YS5tZWRpYSBpbXBvcnQgZ2V0X21pbWV0eXBlcwpmcm9tIHNoaXZhLm1vZGVscyBpbXBvcnQgVHJhY2tQbGF5bGlzdFJlbGF0aW9uc2hpcAoKCmNsYXNzIEluc3RhbmNlVVJJKGZpZWxkcy5TdHJpbmcpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGJhc2VfdXJpKToKICAgICAgICBzZXJ2ZXJfdXJpID0gYXBwLmNvbmZpZy5nZXQoJ1NFUlZFUl9VUkknKSBvciAnJwogICAgICAgIHNlbGYuYmFzZV91cmkgPSAnLycuam9pbigoc2VydmVyX3VyaSwgYmFzZV91cmkpKQoKICAgIGRlZiBvdXRwdXQoc2VsZiwga2V5LCBvYmopOgogICAgICAgIHJldHVybiAnLycuam9pbigoc2VsZi5iYXNlX3VyaSwgc3RyKG9iai5waykpKQoKCmNsYXNzIFRyYWNrRmlsZXMoZmllbGRzLlJhdyk6CiAgICAiIiIKICAgIFJldHVybnMgYSBsaXN0IG9mIGZpbGVzLCBvbmUgZm9yIGVhY2ggYXZhaWxhYmxlIG1lZGlhdHlwZSwgZm9yIGEgZ2l2ZW4KICAgIHRyYWNrLgoKICAgICIiIgoKICAgIGRlZiBvdXRwdXQoc2VsZiwga2V5LCB0cmFjayk6CiAgICAgICAgQ29udmVydGVyQ2xhc3MgPSBnZXRfY29udmVydGVyKCkKICAgICAgICBwYXRocyA9IHt9CgogICAgICAgIGZvciBtaW1ldHlwZSBpbiBnZXRfbWltZXR5cGVzKCk6CiAgICAgICAgICAgIGNvbnZlcnRlciA9IENvbnZlcnRlckNsYXNzKHRyYWNrLCBtaW1ldHlwZSkKICAgICAgICAgICAgcGF0aHNbc3RyKG1pbWV0eXBlKV0gPSB7CiAgICAgICAgICAgICAgICAnbmVlZHNfY29udmVyc2lvbic6IG5vdCBjb252ZXJ0ZXIuY29udmVydGVkX2ZpbGVfZXhpc3RzKCksCiAgICAgICAgICAgICAgICAndXJpJzogY29udmVydGVyLmdldF91cmkoKSwKICAgICAgICAgICAgfQoKICAgICAgICByZXR1cm4gcGF0aHMKCgpjbGFzcyBNYW55VG9NYW55RmllbGQoZmllbGRzLlJhdyk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZm9yZWlnbl9vYmosIG5lc3RlZCk6CiAgICAgICAgc2VsZi5mb3JlaWduX29iaiA9IGZvcmVpZ25fb2JqCiAgICAgICAgc2VsZi5uZXN0ZWQgPSBuZXN0ZWQKCiAgICAgICAgc3VwZXIoTWFueVRvTWFueUZpZWxkLCBzZWxmKS5fX2luaXRfXygpCgogICAgZGVmIG91dHB1dChzZWxmLCBrZXksIG9iaik6CiAgICAgICAgaXRlbXMgPSBsaXN0KCkKICAgICAgICBmb3IgaXRlbSBpbiBnZXRhdHRyKG9iaiwga2V5KToKICAgICAgICAgICAgaXRlbXMuYXBwZW5kKG1hcnNoYWwoaXRlbSwgc2VsZi5uZXN0ZWQpKQoKICAgICAgICByZXR1cm4gaXRlbXMKCgpjbGFzcyBQbGF5bGlzdEZpZWxkKGZpZWxkcy5SYXcpOgogICAgIiIiCiAgICBUaGlzIEZpZWxkIHVuZGVyc3RhbmRzIHRoZSBsaW5rZWQgbGlzdCBpbiB3aGljaCB0aGUgcGxheWxpc3QgYXJlCiAgICBzdHJ1Y3R1cmVkLiBCZXNpZGVzIGZyb20gZmV0Y2hpbmcgYWxsIHRoZSB0cmFja3MgaXQgaXRlcmF0ZXMgb3ZlciB0aGUgaXRlbXMKICAgIGZpbmRpbmcgdGhlIHJpZ2h0IGluZGV4IGZvciBlYWNoLgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG5lc3RlZCk6CiAgICAgICAgc2VsZi5uZXN0ZWQgPSBuZXN0ZWQKCiAgICAgICAgc3VwZXIoUGxheWxpc3RGaWVsZCwgc2VsZikuX19pbml0X18oKQoKICAgIGRlZiBvdXRwdXQoc2VsZiwga2V5LCBvYmopOgogICAgICAgIGl0ZW1zID0gbGlzdChUcmFja1BsYXlsaXN0UmVsYXRpb25zaGlwLnF1ZXJ5LmZpbHRlcl9ieShwbGF5bGlzdD1vYmopKQogICAgICAgIG91dHB1dCA9IFtdCiAgICAgICAgcHJldiA9IE5vbmUKICAgICAgICBpbmRleCA9IDAKICAgICAgICB3aGlsZSBsZW4oaXRlbXMpOgogICAgICAgICAgICB4ID0gMAogICAgICAgICAgICBmb3Igcl90cmFjayBpbiBpdGVtczoKICAgICAgICAgICAgICAgIGlmIHJfdHJhY2sucHJldmlvdXNfdHJhY2sgPT0gcHJldjoKICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHNlbGYubWFyc2hhbChyX3RyYWNrLCBpbmRleCkpCiAgICAgICAgICAgICAgICAgICAgZGVsKGl0ZW1zW3hdKQogICAgICAgICAgICAgICAgICAgIHByZXYgPSByX3RyYWNrCiAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMQoKICAgICAgICAgICAgICAgICAgICBicmVhawoKICAgICAgICAgICAgICAgIHggKz0gMQoKICAgICAgICByZXR1cm4gb3V0cHV0CgogICAgZGVmIG1hcnNoYWwoc2VsZiwgcl90cmFjaywgaW5kZXgpOgogICAgICAgIGl0ZW0gPSBtYXJzaGFsKHJfdHJhY2ssIHNlbGYubmVzdGVkKQogICAgICAgIGl0ZW1bJ2luZGV4J10gPSBpbmRleAoKICAgICAgICByZXR1cm4gaXRlbQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKY2xhc3MgRm9yZWlnbktleUZpZWxkKGZpZWxkcy5SYXcpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvcmVpZ25fb2JqLCBuZXN0ZWQpOgo8fGZpbV9lbmR8Pg=="]
["e60984d5a013692808e42bf7703014e0cf03602e-1","e60984d5a013692808e42bf7703014e0cf03602e","PHxmaW1fcHJlZml4fD4KIyFlbnYgcHl0aG9uMwoiIiIKLS0tIERheSA0OiBHaWFudCBTcXVpZCAtLS0KWW91J3JlIGFscmVhZHkgYWxtb3N0IDEuNWttIChhbG1vc3QgYSBtaWxlKSBiZWxvdyB0aGUgc3VyZmFjZSBvZiB0aGUgb2NlYW4sCmFscmVhZHkgc28gZGVlcCB0aGF0IHlvdSBjYW4ndCBzZWUgYW55IHN1bmxpZ2h0LiBXaGF0IHlvdSBjYW4gc2VlLCBob3dldmVyLAppcyBhIGdpYW50IHNxdWlkIHRoYXQgaGFzIGF0dGFjaGVkIGl0c2VsZiB0byB0aGUgb3V0c2lkZSBvZiB5b3VyIHN1Ym1hcmluZS4KCk1heWJlIGl0IHdhbnRzIHRvIHBsYXkgYmluZ28/CgpCaW5nbyBpcyBwbGF5ZWQgb24gYSBzZXQgb2YgYm9hcmRzIGVhY2ggY29uc2lzdGluZyBvZiBhIDV4NSBncmlkIG9mIG51bWJlcnMuCk51bWJlcnMgYXJlIGNob3NlbiBhdCByYW5kb20sIGFuZCB0aGUgY2hvc2VuIG51bWJlciBpcyBtYXJrZWQgb24gYWxsIGJvYXJkcwpvbiB3aGljaCBpdCBhcHBlYXJzLiAoTnVtYmVycyBtYXkgbm90IGFwcGVhciBvbiBhbGwgYm9hcmRzLikgSWYgYWxsIG51bWJlcnMKaW4gYW55IHJvdyBvciBhbnkgY29sdW1uIG9mIGEgYm9hcmQgYXJlIG1hcmtlZCwgdGhhdCBib2FyZCB3aW5zLiAoRGlhZ29uYWxzCmRvbid0IGNvdW50LikKClRoZSBzdWJtYXJpbmUgaGFzIGEgYmluZ28gc3Vic3lzdGVtIHRvIGhlbHAgcGFzc2VuZ2VycyAoY3VycmVudGx5LCB5b3UgYW5kCnRoZSBnaWFudCBzcXVpZCkgcGFzcyB0aGUgdGltZS4gSXQgYXV0b21hdGljYWxseSBnZW5lcmF0ZXMgYSByYW5kb20gb3JkZXIKaW4gd2hpY2ggdG8gZHJhdyBudW1iZXJzIGFuZCBhIHJhbmRvbSBzZXQgb2YgYm9hcmRzICh5b3VyIHB1enpsZSBpbnB1dCkuCkZvciBleGFtcGxlOgoKNyw0LDksNSwxMSwxNywyMywyLDAsMTQsMjEsMjQsMTAsMTYsMTMsNiwxNSwyNSwxMiwyMiwxOCwyMCw4LDE5LDMsMjYsMQoKMjIgMTMgMTcgMTEgIDAKIDggIDIgMjMgIDQgMjQKMjEgIDkgMTQgMTYgIDcKIDYgMTAgIDMgMTggIDUKIDEgMTIgMjAgMTUgMTkKCiAzIDE1ICAwICAyIDIyCiA5IDE4IDEzIDE3ICA1CjE5ICA4ICA3IDI1IDIzCjIwIDExIDEwIDI0ICA0CjE0IDIxIDE2IDEyICA2CgoxNCAyMSAxNyAyNCAgNAoxMCAxNiAxNSAgOSAxOQoxOCAgOCAyMyAyNiAyMAoyMiAxMSAxMyAgNiAgNQogMiAgMCAxMiAgMyAgNwpBZnRlciB0aGUgZmlyc3QgZml2ZSBudW1iZXJzIGFyZSBkcmF3biAoNywgNCwgOSwgNSwgYW5kIDExKSwgdGhlcmUgYXJlIG5vCndpbm5lcnMsIGJ1dCB0aGUgYm9hcmRzIGFyZSBtYXJrZWQgYXMgZm9sbG93cyAoc2hvd24gaGVyZSBhZGphY2VudCB0byBlYWNoCm90aGVyIHRvIHNhdmUgc3BhY2UpOgoKMjIgMTMgMTcgMTEgIDAgICAgICAgICAzIDE1ICAwICAyIDIyICAgICAgICAxNCAyMSAxNyAyNCAgNAogOCAgMiAyMyAgNCAyNCAgICAgICAgIDkgMTggMTMgMTcgIDUgICAgICAgIDEwIDE2IDE1ICA5IDE5CjIxICA5IDE0IDE2ICA3ICAgICAgICAxOSAgOCAgNyAyNSAyMyAgICAgICAgMTggIDggMjMgMjYgMjAKIDYgMTAgIDMgMTggIDUgICAgICAgIDIwIDExIDEwIDI0ICA0ICAgICAgICAyMiAxMSAxMyAgNiAgNQogMSAxMiAyMCAxNSAxOSAgICAgICAgMTQgMjEgMTYgMTIgIDYgICAgICAgICAyICAwIDEyICAzICA3CkFmdGVyIHRoZSBuZXh0IHNpeCBudW1iZXJzIGFyZSBkcmF3biAoMTcsIDIzLCAyLCAwLCAxNCwgYW5kIDIxKSwgdGhlcmUgYXJlCnN0aWxsIG5vIHdpbm5lcnM6CgoyMiAxMyAxNyAxMSAgMCAgICAgICAgIDMgMTUgIDAgIDIgMjIgICAgICAgIDE0IDIxIDE3IDI0ICA0CiA4ICAyIDIzICA0IDI0ICAgICAgICAgOSAxOCAxMyAxNyAgNSAgICAgICAgMTAgMTYgMTUgIDkgMTkKMjEgIDkgMTQgMTYgIDcgICAgICAgIDE5ICA4ICA3IDI1IDIzICAgICAgICAxOCAgOCAyMyAyNiAyMAogNiAxMCAgMyAxOCAgNSAgICAgICAgMjAgMTEgMTAgMjQgIDQgICAgICAgIDIyIDExIDEzICA2ICA1CiAxIDEyIDIwIDE1IDE5ICAgICAgICAxNCAyMSAxNiAxMiAgNiAgICAgICAgIDIgIDAgMTIgIDMgIDcKRmluYWxseSwgMjQgaXMgZHJhd246CgoyMiAxMyAxNyAxMSAgMCAgICAgICAgIDMgMTUgIDAgIDIgMjIgICAgICAgIDE0IDIxIDE3IDI0ICA0CiA4ICAyIDIzICA0IDI0ICAgICAgICAgOSAxOCAxMyAxNyAgNSAgICAgICAgMTAgMTYgMTUgIDkgMTkKMjEgIDkgMTQgMTYgIDcgICAgICAgIDE5ICA4ICA3IDI1IDIzICAgICAgICAxOCAgOCAyMyAyNiAyMAogNiAxMCAgMyAxOCAgNSAgICAgICAgMjAgMTEgMTAgMjQgIDQgICAgICAgIDIyIDExIDEzICA2ICA1CiAxIDEyIDIwIDE1IDE5ICAgICAgICAxNCAyMSAxNiAxMiAgNiAgICAgICAgIDIgIDAgMTIgIDMgIDcKQXQgdGhpcyBwb2ludCwgdGhlIHRoaXJkIGJvYXJkIHdpbnMgYmVjYXVzZSBpdCBoYXMgYXQgbGVhc3Qgb25lIGNvbXBsZXRlCnJvdyBvciBjb2x1bW4gb2YgbWFya2VkIG51bWJlcnMgKGluIHRoaXMgY2FzZSwgdGhlIGVudGlyZSB0b3Agcm93IGlzCm1hcmtlZDogMTQgMjEgMTcgMjQgNCkuCgpUaGUgc2NvcmUgb2YgdGhlIHdpbm5pbmcgYm9hcmQgY2FuIG5vdyBiZSBjYWxjdWxhdGVkLiBTdGFydCBieSBmaW5kaW5nCnRoZSBzdW0gb2YgYWxsIHVubWFya2VkIG51bWJlcnMgb24gdGhhdCBib2FyZDsgaW4gdGhpcyBjYXNlLCB0aGUgc3VtCmlzIDE4OC4gVGhlbiwgbXVsdGlwbHkgdGhhdCBzdW0gYnkgdGhlIG51bWJlciB0aGF0IHdhcyBqdXN0IGNhbGxlZCB3aGVuCnRoZSBib2FyZCB3b24sIDI0LCB0byBnZXQgdGhlIGZpbmFsIHNjb3JlLCAxODggKiAyNCA9IDQ1MTIuCgpUbyBndWFyYW50ZWUgdmljdG9yeSBhZ2FpbnN0IHRoZSBnaWFudCBzcXVpZCwgZmlndXJlIG91dCB3aGljaCBib2FyZCB3aWxsCndpbiBmaXJzdC4gV2hhdCB3aWxsIHlvdXIgZmluYWwgc2NvcmUgYmUgaWYgeW91IGNob29zZSB0aGF0IGJvYXJkPwoKLS0tIFBhcnQgVHdvIC0tLQpPbiB0aGUgb3RoZXIgaGFuZCwgaXQgbWlnaHQgYmUgd2lzZSB0byB0cnkgYSBkaWZmZXJlbnQgc3RyYXRlZ3k6IGxldCB0aGUKZ2lhbnQgc3F1aWQgd2luLgoKWW91IGFyZW4ndCBzdXJlIGhvdyBtYW55IGJpbmdvIGJvYXJkcyBhIGdpYW50IHNxdWlkIGNvdWxkIHBsYXkgYXQgb25jZSwgc28KcmF0aGVyIHRoYW4gd2FzdGUgdGltZSBjb3VudGluZyBpdHMgYXJtcywgdGhlIHNhZmUgdGhpbmcgdG8gZG8gaXMgdG8gZmlndXJlCm91dCB3aGljaCBib2FyZCB3aWxsIHdpbiBsYXN0IGFuZCBjaG9vc2UgdGhhdCBvbmUuIFRoYXQgd2F5LCBubyBtYXR0ZXIgd2hpY2gKYm9hcmRzIGl0IHBpY2tzLCBpdCB3aWxsIHdpbiBmb3Igc3VyZS4KCkluIHRoZSBhYm92ZSBleGFtcGxlLCB0aGUgc2Vjb25kIGJvYXJkIGlzIHRoZSBsYXN0IHRvIHdpbiwgd2hpY2ggaGFwcGVucwphZnRlciAxMyBpcyBldmVudHVhbGx5IGNhbGxlZCBhbmQgaXRzIG1pZGRsZSBjb2x1bW4gaXMgY29tcGxldGVseSBtYXJrZWQuCklmIHlvdSB3ZXJlIHRvIGtlZXAgcGxheWluZyB1bnRpbCB0aGlzIHBvaW50LCB0aGUgc2Vjb25kIGJvYXJkIHdvdWxkIGhhdmUgYQpzdW0gb2YgdW5tYXJrZWQgbnVtYmVycyBlcXVhbCB0byAxNDggZm9yIGEgZmluYWwgc2NvcmUgb2YgMTQ4ICogMTMgPSAxOTI0LgoKRmlndXJlIG91dCB3aGljaCBib2FyZCB3aWxsIHdpbiBsYXN0LiBPbmNlIGl0IHdpbnMsIHdoYXQgd291bGQgaXRzIGZpbmFsCnNjb3JlIGJlPwoiIiIKCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzeXMKCmZyb20gYW9jZCBpbXBvcnQgc3VibWl0CmZyb20gYW9jZC5tb2RlbHMgaW1wb3J0IFB1enpsZQpmcm9tIHJpY2ggaW1wb3J0IHByaW50LCB0cmFjZWJhY2sKZnJvbSByaWNoLmxpdmUgaW1wb3J0IExpdmUKZnJvbSByaWNoLmxvZ2dpbmcgaW1wb3J0IFJpY2hIYW5kbGVyCmZyb20gcmljaC50YWJsZSBpbXBvcnQgVGFibGUKCnRyYWNlYmFjay5pbnN0YWxsKHNob3dfbG9jYWxzPVRydWUpCkZPUk1BVCA9ICIlKG1lc3NhZ2UpcyIKbG9nZ2luZy5iYXNpY0NvbmZpZygKICAgIGxldmVsPSJJTkZPIiwgZm9ybWF0PUZPUk1BVCwgZGF0ZWZtdD0iWyVYXSIsIGhhbmRsZXJzPVtSaWNoSGFuZGxlcigpXQopCkxPRyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKClBVWlpMRSA9IFB1enpsZSh5ZWFyPTIwMjEsIGRheT00KQpJTlBVVCA9IFBVWlpMRS5pbnB1dF9kYXRhClNBTVBMRV9JTlBVVCA9ICIiIjcsNCw5LDUsMTEsMTcsMjMsMiwwLDE0LDIxLDI0LDEwLDE2LDEzLDYsMTUsMjUsMTIsMjIsMTgsMjAsOCwxOSwzLDI2LDEKCjIyIDEzIDE3IDExICAwCiA4ICAyIDIzICA0IDI0CjIxICA5IDE0IDE2ICA3CiA2IDEwICAzIDE4ICA1CiAxIDEyIDIwIDE1IDE5CgogMyAxNSAgMCAgMiAyMgogOSAxOCAxMyAxNyAgNQoxOSAgOCAgNyAyNSAyMwoyMCAxMSAxMCAyNCAgNAoxNCAyMSAxNiAxMiAgNgoKMTQgMjEgMTcgMjQgIDQKMTAgMTYgMTUgIDkgMTkKMTggIDggMjMgMjYgMjAKMjIgMTEgMTMgIDYgIDUKIDIgIDAgMTIgIDMgIDciIiIKCgpjbGFzcyBCaW5nbyhFeGNlcHRpb24pOgogICAgIiIiVGhyb3duIHdoZW4gYSBib2FyZCBiaW5nb3MuIFN0b3JlcyB0aGUgd2lubmluZyBib2FyZCIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3aW5uZXIpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYuYm9hcmQgPSB3aW5uZXIKCgpjbGFzcyBCaW5nb1NxdWFyZToKICAgICIiIkltcGxlbWVudHMgYSBzcXVhcmUgb2YgdGhlIGJpbmdvIGJvYXJkIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlOiBpbnQgPSBOb25lKToKICAgICAgICAiIiJJbml0IE1ldGhvZAoKICAgICAgICBBcmdzOgogICAgICAgICAgICB2YWx1ZSAoaW50LCBvcHRpb25hbCk6IFRoZSBudW1iZXIgaW4gdGhlIHNxdWFyZS4gRGVmYXVsdHMgdG8gTm9uZS4KICAgICAgICAiIiIKICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKICAgICAgICBzZWxmLmhpdCA9IEZhbHNlCgogICAgZGVmIHNldChzZWxmLCB2YWx1ZTogaW50KToKICAgICAgICAiIiJTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgc3F1YXJlLiBJZiBhIHZhbHVlIGlzIGFscmVhZHkgc2V0LAogICAgICAgIGxvZ3MgYSB3YXJuaW5nLgoKICAgICAgICBBcmdzOgogICAgICAgICAgICB2YWx1ZSAoaW50KTogdGhlIG51bWJlciB0byBzZXQKICAgICAgICAiIiIKICAgICAgICBpZiBzZWxmLnZhbHVlIGlzIE5vbmU6CiAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIExPRy53YXJuaW5nKCJDYW4ndCBzZXQgYSBiaW5nbyBzcXVhcmUgdHdpY2UiKQoKICAgIGRlZiBnZXQoc2VsZikgLT4gaW50OgogICAgICAgICIiIlJldHVybnMgdGhlIG51bWJlciBpbiB0aGUgc3F1YXJlCgogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIGludDogVGhlIG51bWJlciBpbiB0aGUgc3F1YXJlCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKCiAgICBkZWYgdGVzdChzZWxmLCB2YWx1ZTogaW50ID0gTm9uZSkgLT4gYm9vbDoKICAgICAgICAiIiJUZXN0IHRoZSB2YWx1ZSBhZ2FpbnN0IGEgY2FsbC4gTGF0Y2hlcyBUUlVFCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIHZhbHVlIChpbnQpOiBUaGUgY2FsbCB0byB0ZXN0IGFnYWluc3QKCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgYm9vbDogVHJ1ZSBpZiB0aGUgc3F1YXJlIGhhcyBldmVyIGJlZW4gaGl0CiAgICAgICAgIiIiCiAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHNlbGYuaGl0IHw9IHNlbGYudmFsdWUgPT0gdmFsdWUKICAgICAgICByZXR1cm4gc2VsZi5oaXQKCiAgICBkZWYgY2xlYXIoc2VsZik6CiAgICAgICAgIiIiQ2xlYXJzIHRoZSBzcXVhcmUncyBISVQgdmFsdWUiIiIKICAgICAgICBzZWxmLmhpdCA9IEZhbHNlCgogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgIiIiU3RyaW5naWZ5IiIiCiAgICAgICAgaWYgc2VsZi5oaXQ6CiAgICAgICAgICAgIGZvcm1hdCA9ICJyZWQiCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZm9ybWF0ID0gImRlZmF1bHQiCiAgICAgICAgcmV0dXJuIGYiW3tmb3JtYXR9XXtzZWxmLnZhbHVlOjJ9Wy9dIgoKCmNsYXNzIEJpbmdvQm9hcmQ6CiAgICAiIiJJbXBsZW1lbnRzIHRoZSBCaW5nbyBCb2FyZCIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBib2FyZF9pZCk6CiAgICAgICAgIiIiSW5pdCBNZXRob2QiIiIKICAgICAgICBzZWxmLmJvYXJkID0gW10KICAgICAgICBzZWxmLmJvYXJkX2lkID0gYm9hcmRfaWQKICAgICAgICBzZWxmLl9oYXNfd29uID0gRmFsc2UKICAgICAgICBzZWxmLmxhc3RfY2FsbCA9IE5vbmUKCjx8ZmltX2hvbGV8PgogICAgICAgICAgICByb3cgKGxpc3QpOiBBIGxpc3Qgb2YgaW50cwogICAgICAgICIiIgogICAgICAgIHJvdyA9IFtdCiAgICAgICAgZm9yIGl0ZW0gaW4gcm93OgogICAgICAgICAgICByb3cuYXBwZW5kKEJpbmdvU3F1YXJlKGludChpdGVtKSkpCiAgICAgICAgc2VsZi5ib2FyZC5hcHBlbmQocm93KQogICAgICAgIGlmIGxlbihzZWxmLmJvYXJkKSA+IDU6CiAgICAgICAgICAgIExPRy53YXJuaW5nKCJUaGUgYm9hcmQgbG9va3MgYmlnIDooIikKCiAgICBkZWYgY2hlY2tfYmluZ28oc2VsZik6CiAgICAgICAgIiIiQ2hlY2tzIHRoZSBib2FyZCBmb3IgQmluZ28KICAgICAgICBGaXJzdCwgd2UgY2hlY2sgZWFjaCByb3csIHRoZW4gd2UgY2hlY2sgZWFjaCBjb2x1bW4KCiAgICAgICAgUmFpc2VzOgogICAgICAgICAgICBCaW5nbzogd2hlbiB0aGlzIGJvYXJkIHdpbnMKICAgICAgICAiIiIKICAgICAgICBjb2x1bW5fY2hlY2tzID0gWzAsIDAsIDAsIDAsIDBdCiAgICAgICAgZm9yIHJvdyBpbiBzZWxmLmJvYXJkOgogICAgICAgICAgICByb3dfY2hlY2sgPSBhbGwoeC50ZXN0KCkgZm9yIHggaW4gcm93KQogICAgICAgICAgICBpZiByb3dfY2hlY2s6CiAgICAgICAgICAgICAgICAjIFRoaXMgcm93IGlzIGFsbCBsaXQgdXAKICAgICAgICAgICAgICAgIHNlbGYuX2hhc193b24gPSBUcnVlCiAgICAgICAgICAgICAgICByYWlzZSBCaW5nbyh3aW5uZXI9c2VsZikKICAgICAgICAgICAgZm9yIGNvbG51bSwgY2VsbCBpbiBlbnVtZXJhdGUocm93KToKICAgICAgICAgICAgICAgIGlmIGNlbGwudGVzdCgpOgogICAgICAgICAgICAgICAgICAgIGNvbHVtbl9jaGVja3NbY29sbnVtXSArPSAxCiAgICAgICAgaWYgYW55KHggPT0gNSBmb3IgeCBpbiBjb2x1bW5fY2hlY2tzKToKICAgICAgICAgICAgc2VsZi5faGFzX3dvbiA9IFRydWUKICAgICAgICAgICAgcmFpc2UgQmluZ28oc2VsZikKCiAgICBkZWYgaGFzX3dvbihzZWxmKSAtPiBib29sOgogICAgICAgICIiIkNoZWNrIGlmIHRoaXMgYm9hcmQgaGFzIGV2ZXIgd29uCgogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIGJvb2w6IFRydWUgaWYgdGhpcyBib2FyZCBoYXMgZXZlciB3b24KICAgICAgICAiIiIKICAgICAgICByZXR1cm4gc2VsZi5faGFzX3dvbgoKICAgIGRlZiB0ZXN0KHNlbGYsIHZhbHVlOiBpbnQpOgogICAgICAgICIiIkNoZWNrIGFsbCBjZWxscyBpbiB0aGlzIGJvYXJkIGFnYWluc3QgdGhlIGNhbGwuCiAgICAgICAgQ2FsbHMgImNoZWNrX2JpbmdvKCkiIGF0IHRoZSBlbmQKCiAgICAgICAgQXJnczoKICAgICAgICAgICAgdmFsdWUgKGludCk6IFRoZSBDYWxsCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5sYXN0X2NhbGwgPSB2YWx1ZQogICAgICAgIGZvciByb3cgaW4gc2VsZi5ib2FyZDoKICAgICAgICAgICAgZm9yIGNlbGwgaW4gcm93OgogICAgICAgICAgICAgICAgY2VsbC50ZXN0KHZhbHVlKQogICAgICAgIHNlbGYuY2hlY2tfYmluZ28oKQoKICAgIGRlZiBhc190YWJsZShzZWxmKSAtPiBUYWJsZToKICAgICAgICAiIiJSZXR1bnMgdGhlIHRhYmxlIGFzIGEgUmljaCBUYWJsZSAoZm9yIHByaW50aW5nKQoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBUYWJsZTogYSBSaWNoIFRhYmxlCiAgICAgICAgIiIiCiAgICAgICAgdGFibGUgPSBUYWJsZSgKICAgICAgICAgICAgdGl0bGU9ZiJCb2FyZCAje3NlbGYuYm9hcmRfaWR9LiBMYXN0IENhbGw6IHtzZWxmLmxhc3RfY2FsbH0iLAogICAgICAgICAgICBzaG93X2hlYWRlcj1GYWxzZSwKICAgICAgICApCiAgICAgICAgZm9yIF8gaW4gc2VsZi5ib2FyZFswXToKICAgICAgICAgICAgdGFibGUuYWRkX2NvbHVtbigpCiAgICAgICAgZm9yIHJvdyBpbiBzZWxmLmJvYXJkOgogICAgICAgICAgICB0YWJsZS5hZGRfcm93KCpbc3RyKHgpIGZvciB4IGluIHJvd10pCiAgICAgICAgcmV0dXJuIHRhYmxlCgogICAgZGVmIHNjb3JlKHNlbGYpIC0+IGludDoKICAgICAgICAiIiJDYWxjdWxhdGVzIHRoZSBzY29yZS4KICAgICAgICBEZWZpbmVkIGFzIHN1bSBvZiB1bmxpdCBjZWxscyAqIHRoZSBsYXN0IGNhbGwKCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgaW50OiBTY29yZQogICAgICAgICIiIgogICAgICAgIHZhbHVlID0gMAogICAgICAgIGZvciByb3cgaW4gc2VsZi5ib2FyZDoKICAgICAgICAgICAgZm9yIGNlbGwgaW4gcm93OgogICAgICAgICAgICAgICAgaWYgbm90IGNlbGwudGVzdCgpOgogICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IGNlbGwuZ2V0KCkKICAgICAgICByZXR1cm4gdmFsdWUgKiBzZWxmLmxhc3RfY2FsbAoKCmRlZiBwYXJzZV9pbnB1dChpbnB1dDogc3RyKSAtPiBkaWN0OgogICAgIiIiUGFyc2UgdGhlIElucHV0CgogICAgQXJnczoKICAgICAgICBpbnB1dCAoc3RyKTogQU9DIGlucHV0CgogICAgUmV0dXJuczoKICAgICAgICBkaWN0OiBEcmF3cyBhbmQgQm9hcmRzCiAgICAiIiIKICAgIGRyYXdzID0gW2ludChuKSBmb3IgbiBpbiBpbnB1dC5zcGxpdGxpbmVzKClbMF0uc3BsaXQoIiwiKV0KICAgIHByaW50KGYiR290IHtsZW4oZHJhd3MpfSBkcmF3cyIpCiAgICBib2FyZHMgPSBbXQoKICAgIHRoaXNfYm9hcmQgPSBOb25lCiAgICBmb3IgbGluZSBpbiBpbnB1dC5zcGxpdGxpbmVzKClbMTpdOgogICAgICAgIGxvZ2dpbmcuZGVidWcoIlJlYWRpbmcgUm93ID4+JXM8PCIsIGxpbmUpCiAgICAgICAgaWYgbGluZSA9PSAiIjoKICAgICAgICAgICAgaWYgdGhpc19ib2FyZCBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgIHByaW50KHRoaXNfYm9hcmQuYXNfdGFibGUoKSkKICAgICAgICAgICAgICAgIGJvYXJkcy5hcHBlbmQodGhpc19ib2FyZCkKICAgICAgICAgICAgdGhpc19ib2FyZCA9IEJpbmdvQm9hcmQoYm9hcmRfaWQ9bGVuKGJvYXJkcykpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgdGhpc19ib2FyZC5sb2FkX3JvdyhsaW5lLnNwbGl0KCkpCiAgICBpZiB0aGlzX2JvYXJkIGlzIG5vdCBOb25lOgogICAgICAgIHByaW50KHRoaXNfYm9hcmQuYXNfdGFibGUoKSkKICAgICAgICBib2FyZHMuYXBwZW5kKHRoaXNfYm9hcmQpCgogICAgcmV0dXJuIHsiZHJhd3MiOiBkcmF3cywgImJvYXJkcyI6IGJvYXJkc30KCgpkZWYgZ2VuZXJhdGVfdGFibGUoYm9hcmRzOiBsaXN0KSAtPiBUYWJsZToKICAgICIiIlJlLWdlbmVyYXRlcyB0aGUgdGFibGVzIGR1cmluZyBkZWJ1Z2dpbmcKCiAgICBBcmdzOgogICAgICAgIGJvYXJkcyAoW2xpc3RdKTogTGlzdCBvZiBib2FyZHMgdG8gcHJpbnQKCiAgICBSZXR1cm5zOgogICAgICAgIFRhYmxlOiBhIFJpY2ggVGFibGUKICAgICIiIgogICAgZ3JpZCA9IFRhYmxlLmdyaWQoZXhwYW5kPVRydWUpCiAgICBncmlkLmFkZF9jb2x1bW4oKQogICAgZ3JpZC5hZGRfY29sdW1uKCkKICAgIGdyaWQuYWRkX2NvbHVtbigpCiAgICBncmlkLmFkZF9yb3coYm9hcmRzWzBdLmFzX3RhYmxlKCksIGJvYXJkc1sxXS5hc190YWJsZSgpLCBib2FyZHNbMl0uYXNfdGFibGUoKSkKICAgIHJldHVybiBncmlkCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIFNVQk1JVFRFRF9BID0gRmFsc2UKICAgIFNVQk1JVFRFRF9CID0gRmFsc2UKICAgIEZJUlNUX0JPQVJEID0gRmFsc2UKICAgIExBU1RfQk9BUkQgPSBOb25lCiAgICB3aXRoIExpdmUoVGFibGUoKSkgYXMgbGl2ZToKICAgICAgICBERUJVRyA9IGxlbihzeXMuYXJndikgPiAxIGFuZCBzeXMuYXJndlsxXSA9PSAidGVzdCIKICAgICAgICBpZiBERUJVRzoKICAgICAgICAgICAgZGF0YSA9IHBhcnNlX2lucHV0KFNBTVBMRV9JTlBVVCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBkYXRhID0gcGFyc2VfaW5wdXQoSU5QVVQpCiAgICAgICAgUkVNQUlOSU5HX0JPQVJEUyA9IGxlbihkYXRhWyJib2FyZHMiXSkKICAgICAgICBmb3IgZHJhdyBpbiBkYXRhWyJkcmF3cyJdOgogICAgICAgICAgICBsb2dnaW5nLmluZm8oIkNhbGxpbmcgJTJkIiwgZHJhdykKICAgICAgICAgICAgZm9yIGJvYXJkIGluIGRhdGFbImJvYXJkcyJdOgogICAgICAgICAgICAgICAgaWYgbm90IGJvYXJkLmhhc193b24oKToKICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgIGJvYXJkLnRlc3QoZHJhdykKICAgICAgICAgICAgICAgICAgICBleGNlcHQgQmluZ28gYXMgYm9hcmQ6CiAgICAgICAgICAgICAgICAgICAgICAgIExBU1RfQk9BUkQgPSBib2FyZC5ib2FyZAogICAgICAgICAgICAgICAgICAgICAgICBSRU1BSU5JTkdfQk9BUkRTID0gc3VtKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vdCB4Lmhhc193b24oKSBmb3IgeCBpbiBkYXRhWyJib2FyZHMiXV0KICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oIkdvdCBhIEJpbmdvIG9uIGJvYXJkICVkIiwgYm9hcmQuYm9hcmQuaWQpCiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlZCBib2FyZHMgcmVtYWluIGluIHBsYXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVNQUlOSU5HX0JPQVJEUywKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgRklSU1RfQk9BUkQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlJ3ZlIG5vdCByZXBvcnRlZCB0aGUgZmlyc3QgYm9hcmQgeWV0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYm9hcmQuYm9hcmQuYXNfdGFibGUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGYiU2NvcmU6IHtib2FyZC5ib2FyZC5zY29yZSgpfSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgREVCVUc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IFNVQk1JVFRFRF9BOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtaXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2FyZC5ib2FyZC5zY29yZSgpLCBwYXJ0PSJhIiwgZGF5PTQsIHllYXI9MjAyMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQk1JVFRFRF9BID0gVHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgRklSU1RfQk9BUkQgPSBUcnVlCiAgICAgICAgICAgIGlmIFJFTUFJTklOR19CT0FSRFMgPT0gMDoKICAgICAgICAgICAgICAgIGJyZWFrCgogICAgICAgICAgICBpZiBERUJVRzoKICAgICAgICAgICAgICAgIGxpdmUudXBkYXRlKGdlbmVyYXRlX3RhYmxlKGRhdGFbImJvYXJkcyJdKSkKICAgICAgICAgICAgICAgIGlucHV0KCJQcmVzcyBlbnRlciB0byBjb250aW51ZSIpCiAgICBwcmludChMQVNUX0JPQVJELmFzX3RhYmxlKCkpCiAgICBwcmludChmIlNjb3JlOiB7TEFTVF9CT0FSRC5zY29yZSgpfSIpCiAgICBpZiBub3QgU1VCTUlUVEVEX0IgYW5kIG5vdCBERUJVRzoKICAgICAgICBzdWJtaXQoTEFTVF9CT0FSRC5zY29yZSgpLCBwYXJ0PSJiIiwgZGF5PTQsIHllYXI9MjAyMSkKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBsb2FkX3JvdyhzZWxmLCByb3c6IGxpc3QpOgogICAgICAgICIiIkxvYWRzIGEgcm93IGludG8gdGhlIEJvYXJkCgogICAgICAgIEFyZ3M6Cjx8ZmltX2VuZHw+"]
["9e1e18e18aff153e856e8646996b932043dd25ee-3","9e1e18e18aff153e856e8646996b932043dd25ee","PHxmaW1fcHJlZml4fD4KZnJvbSBweXJmLmNvbmZpZyBpbXBvcnQgU3dlZXBFbnRyeSwgVHJpZ2dlclNldHRpbmdzLCBUcmlnZ2VyU2V0dGluZ3NFcnJvcgpmcm9tIHB5cmYuY29ubmVjdG9ycy5ibG9ja2luZyBpbXBvcnQgUGxhaW5Tb2NrZXRDb25uZWN0b3IKZnJvbSBweXJmLmNvbm5lY3RvcnMuYmFzZSBpbXBvcnQgc3luY19hc3luYwpmcm9tIHB5cmYudnJ0IGltcG9ydCB2cnRfcGFja2V0X3JlYWRlciwgSV9PTkxZLCBJUQoKY2xhc3MgV1NBNDAwMChvYmplY3QpOgogICAgIiIiCiAgICBJbnRlcmZhY2UgZm9yIFdTQTQwMDAKCiAgICA6cGFyYW0gY29ubmVjdG9yOiBDb25uZWN0b3Igb2JqZWN0IHRvIHVzZSBmb3IgU0NQSS9WUlQgY29ubmVjdGlvbnMsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBkZWZhdWx0cyB0byBhIG5ldwogICAgICAgIDpjbGFzczpgUGxhaW5Tb2NrZXRDb25uZWN0b3IgPHB5cmYuY29ubmVjdG9ycy5ibG9ja2luZy5QbGFpblNvY2tldENvbm5lY3Rvcj5gCiAgICAgICAgaW5zdGFuY2UKCjx8ZmltX2VuZHw+"]
["8bf5db419aaefce4f9496c8b9495e23868d8e52e-5","8bf5db419aaefce4f9496c8b9495e23868d8e52e","PHxmaW1fcHJlZml4fD4KIyBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURUQuIERPIE5PVCBFRElUCgpjbGFzcyBUZWxlbWV0cnlBcGk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGNsaWVudCwgYmFzZV9wYXRoID0gIi92MSIpOgogICAgc2VsZi5jbGllbnQgPSBjbGllbnQKICAgIHNlbGYuYmFzZV9wYXRoID0gYmFzZV9wYXRoCgogIGRlZiBjb2xsZWN0VGVsZW1ldHJ5KHNlbGYsIGJvZHk9Tm9uZSk6CiAgICBfX3F1ZXJ5ID0gewo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICB9CiAgICBpZiBib2R5IGlzIE5vbmU6CiAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXIgXCJib2R5XCIiKQoKPHxmaW1fZW5kfD4="]
["f586372d4e9e13fba459f4b285198439a2a59ece-3","f586372d4e9e13fba459f4b285198439a2a59ece",{"$cut":{"chars":27444,"head":"PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uc2hvcnRjdXRzIGltcG9ydCByZW5kZXIKZnJvbSBkamFuZ28udmlld3MgaW1wb3J0IFZpZXcKZnJvbSBuYXRpdmVfbGliIGltcG9ydCBjcnlwdG9fbGliLCBjaGVja3N1bV9saWIsIGhhc2hfbGliCmltcG9ydCBqc29uCgpmcm9tIG5hdGl2ZV9saWIuQUVTIGltcG9ydCBBRVMsIEFFU19ub2RlanMKZnJvbSBuYXRpdmVfbGliLkdPU1QgaW1wb3J0IEdPU1QKZnJvbSBuYXRpdmVfbGliLlJTQSBpbXBvcnQgUlNBX25vZGVqcwoKCmNsYXNzIEhhc2hpbmdWaWV3KFZpZXcpOgogICAgZGVmIGdldChzZWxmLCByZXF1ZXN0KToKICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICJjb3JlL2hhc2hpbmcuaHRtbCIpCgogICAgZGVmIHBvc3Qoc2VsZiwgcmVxdWVzdCk6CiAgICAgICAgZm9ybSA9IHJlcXVlc3QuUE9TVAogICAgICAgIGNoZWNrX3N1bV9hbGdvcml0aG0gPSBmb3JtLmdldCgnY2hlY2tfc3VtX2FsZ29yaXRobScpCiAgICAgICAgbXNnID0gZm9ybS5nZXQoJ21zZycpCiAgICAgICAgY29udGV4dCA9IHsKICAgICAgICAgICAgJ3RleHQnOiAn0J3QtdCy0LXRgNC90L4g0LfQsNC/0L7Qu9C90LXQvdGLINC/0L7Qu9GPJywKICAgICAgICB9CiAgICAgICAgaWYgbXNnIGFuZCBjaGVja19zdW1fYWxnb3JpdGhtOgogICAgICAgICAgICByZXN1bHQgPSBoYXNoaW5nKG1zZywgY2hlY2tfc3VtX2FsZ29yaXRobSkKICAgICAgICAgICAgY29udGV4dCA9IHsKICAgICAgICAgICAgICAgICd0ZXh0JzogJ9CS0LDRiNC1INGB0L7QvtCx0YnQtdC90LjQtTonLAogICAgICAgICAgICAgICAgJ21zZyc6IGZvcm0uZ2V0KCdtc2cnKSwKICAgICAgICAgICAgICAgICdqc29uVGV4dCc6ICfQmtC+0L3RgtGA0L7Qu9GM0L3QsNGPINGB0YPQvNC80LAgLyDQpdC10Ygg0YHQvtC+0LHRidC10L3QuNGPINCyINGE0L7RgNC80LDRgtC1IEpzb246JywKICAgICAgICAgICAgICAgICdqc29uJzogcmVzdWx0LmdldCgnanNvbicpCiAgICAgICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCAiY29yZS9oYXNoaW5nLmh0bWwiLCBjb250ZXh0KQoKCmNsYXNzIEVuY3J5cHRpb25WaWV3KFZpZXcpOgogICAgZGVmIGdldChzZWxmLCByZXF1ZXN0KToKICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICJjb3JlL2Jhc2ljL2VuY3J5cHQuaHRtbCIpCgogICAgZGVmIHBvc3Qoc2VsZiwgcmVxdWVzdCk6CiAgICAgICAgZm9ybSA9IHJlcXVlc3QuUE9TVAogICAgICAgIGNpcGhlcl9hbGdvcml0aG0gPSBmb3JtLmdldCgnZW5jcnlwdGlvbl9hbGdvcml0aG0nKQogICAgICAgIHVzZXJfcGFzc3dvcmQgPSBmb3JtLmdldCgndXNlcl9wYXNzd29yZCcpCiAgICAgICAgY2hlY2tfc3VtX2FsZ29yaXRobSA9IGZvcm0uZ2V0KCdjaGVja19zdW1fYWxnb3JpdGhtJykKICAgICAgICBtc2cgPSBmb3JtLmdldCgnbXNnJykKICAgICAgICBjb250ZXh0ID0gewogICAgICAgICAgICAndGV4dCc6ICfQndC10LLQtdGA0L3QviDQt9Cw0L/QvtC70L3QtdC90Ysg0L/QvtC70Y8nLAogICAgICAgIH0KICAgICAgICBpZiBtc2cgYW5kIHVzZXJfcGFzc3dvcmQgYW5kIGNpcGhlcl9hbGdvcml0aG06CiAgICAgICAgICAgIHJlc3VsdCA9IGVuY3J5cHQobXNnLCB1c2VyX3Bhc3N3b3JkLCBjaXBoZXJfYWxnb3JpdGhtLCBjaGVja19zdW1fYWxnb3JpdGhtKQogICAgICAgICAgICBjb250ZXh0ID0gewogICAgICAgICAgICAgICAgJ3RleHQnOiAn0JfQsNGI0LjRhNGA0L7QstCw0L3QvdC+0LUg0YHQvtC+0LHRidC10L3QuNC1JywKICAgICAgICAgICAgICAgICdtc2cnOiByZXN1bHQuZ2V0KCdtc2cnKSwKICAgICAgICAgICAgICAgICdqc29uVGV4dCc6ICdKU09OINC00LvRjyDQvtGC0L/RgNCw0LLQutC4INC90LAg0YHQtdGA0LLQtdGAINC00LvRjyDRgNCw0YHRiNC40YTRgNC+0LLQsNC90LjRjzonLAogICAgICAgICAgICAgICAgJ2pzb24nOiByZXN1bHQuZ2V0KCdqc29uJykKICAgICAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICJjb3JlL2Jhc2ljL2VuY3J5cHQuaHRtbCIsIGNvbnRleHQpCgoKY2xhc3MgRGVjcnlwdGlvblZpZXcoVmlldyk6CiAgICBkZWYgZ2V0KHNlbGYsIHJlcXVlc3QpOgogICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgImNvcmUvYmFzaWMvZGVjcnlwdC5odG1sIikKCiAgICBkZWYgcG9zdChzZWxmLCByZXF1ZXN0KToKICAgICAgICBmb3JtID0gcmVxdWVzdC5QT1NUCiAgICAgICAgdXNlcl9wYXNzd29yZCA9IGZvcm0uZ2V0KCd1c2VyX3Bhc3N3b3JkJykKICAgICAgICBtc2cgPSBqc29uLmxvYWRzKGZvcm0uZ2V0KCdtc2cnKSkKICAgICAgICBwcmludChtc2cpCiAgICAgICAgZW5jcnlwdGVkX2RhdGEgPSBtc2cuZ2V0KCdlbmNyeXB0ZWRfZGF0YScpCiAgICAgICAgY2lwaGVyX2FsZ29yaXRobSA9IG1zZy5nZXQoJ2NpcGhlcl9hbGdvcml0aG0nKQogICAgICAgIGNoZWNrX3N1bV9hbGdvcml0aG0gPSBtc2cuZ2V0KCdjaGVja19zdW1fYWxnb3JpdGhtJykKICAgICAgICBjaGVja19zdW1fdmFsdWUgPSBtc2cuZ2V0KCdjaGVja19zdW1fdmFsdWUnKQogICAgICAgIGNvbnRleHQgPSB7CiAgICAgICAgICAgICd0ZXh0JzogJ9Cd0LXQstC10YDQvdGL0Lkg0YTQvtGA0LzQsNGCINCy0LLQtdC00LXQvdC90YvRhSDQtNCw0L3QvdGL0YUnLAogICAgICAgIH0KCiAgICAgICAgaWYgZW5jcnlwdGVkX2RhdGEgYW5kIGNpcGhlcl9hbGdvcml0aG0gYW5kIHVzZXJfcGFzc3dvcmQ6CiAgICAgICAgICAgIHJlc3VsdCA9IGRlY3J5cHQoZW5jcnlwdGVkX2RhdGEsIHVzZXJfcGFzc3dvcmQsIGNpcGhlcl9hbGdvcml0aG0sIGNoZWNrX3N1bV9hbGdvcml0aG0sIGNoZWNrX3N1bV92YWx1ZSkKICAgICAgICAgICAgY29udGV4dCA9IHsKICAgICAgICAgICAgICAgICJ0ZXh0IjogItCg0LXQt9GD0LvRjNGC0LDRgiIsCiAgICAgICAgICAgICAgICAibXNnIjogcmVzdWx0LmdldCgnbXNnJyksCiAgICAgICAgICAgICAgICAiY2hlY2tlZCI6IHJlc3VsdC5nZXQoJ2NoZWNrZWQnKQogICAgICAgICAgICB9CgogICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwg"}}]
["27643c41259da71b3cd25e5365cf68df75add232-3","27643c41259da71b3cd25e5365cf68df75add232","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBUaWtUb2tBcGkudGlrdG9rIGltcG9ydCBUaWtUb2tBcGkKPHxmaW1fZW5kfD4="]
["93bafb0ef6919d53e6b28c63fc0aee7f4b568435-1","93bafb0ef6919d53e6b28c63fc0aee7f4b568435","PHxmaW1fcHJlZml4fD4KIyBJbXBsZW1lbnRhciBsYSBjbGFzZSBBcnRpY3VsbyBxdWUgY29udGVuZ2EgdW4gbm9tYnJlIGRldGVybWluYWRvIHBvciBlbAojIHVzdWFyaW8geSB1biBpZCBpbmNyZW1lbnRhbCBnZW5lcmFkbyBhdXRvbcOhdGljYW1lbnRlLiBVdGlsaXphciBzw7NsYW1lbnRlIGVsCiMgY29uc3RydWN0b3IgKF9faW5pdF9fKSB5IHVuIG3DqXRvZG8gZGUgY2xhc2UgKEBjbGFzc21ldGhvZCkgY29uIHVuYSB2YXJpYWJsZQojIGRlIGNsYXNlCgoKY2xhc3MgQXJ0aWN1bG86Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIF9sYXN0X2lkOiBpbnQgPSAwCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG5vbWJyZTogc3RyID0gIiIpIC0+IE5vbmU6CiAgICAgICAgc2VsZi5ub21icmUgPSBub21icmUKPHxmaW1fZW5kfD4="]
["27ff8755bd28c301786b10f908c17b90c08b215e-2","27ff8755bd28c301786b10f908c17b90c08b215e","PHxmaW1fcHJlZml4fD4KIiIiRnVuY3Rpb25hbCB0ZXN0cyBmb3IgY3VzdG9taXplZCBhZG1pbiBlbGVtZW50cyBvZiBSYW5kb1BvbnkKcG9wdWxhaXJlcyBhcHAuCiIiIgoKIyBTdGFuZGFyZCBsaWJyYXJ5Ogpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCmZyb20gZGF0ZXRpbWUgaW1wb3J0IHRpbWUKZnJvbSBkYXRldGltZSBpbXBvcnQgdGltZWRlbHRhCiMgRGphbmdvOgppbXBvcnQgZGphbmdvLnRlc3QKZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLm1vZGVscyBpbXBvcnQgVXNlcgpmcm9tIGRqYW5nby5jb25mIGltcG9ydCBzZXR0aW5ncwpmcm9tIGRqYW5nby5jb3JlIGltcG9ydCBtYWlsCgoKY2xhc3MgVGVzdEFkbWluUG9wdWxhaXJlKGRqYW5nby50ZXN0LlRlc3RDYXNlKToKICAgICIiIkZ1bmN0aW9uYWwgdGVzdHMgZm9yIHRoZSBhZGQvY2hhbmdlIHBvcHVsYWlyZSBhZG1pbiBmb3JtLgogICAgIiIiCiAgICBmaXh0dXJlcyA9IFsncG9wdWxhaXJlcy55YW1sJywgJ2VtYWlsX2FkZHJlc3Nlcy55YW1sJ10KCiAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgdXNlciA9IFVzZXIub2JqZWN0cy5jcmVhdGVfc3VwZXJ1c2VyKAogICAgICAgICAgICAndGVzdF9hZG1pbicsICd0ZXN0X2FkbWluQGV4YW1wbGUuY29tJywgJ2Zvb2JhcjQyJykKICAgICAgICB1c2VyLnNhdmUoKQogICAgICAgIHNlbGYuY2xpZW50LmxvZ2luKHVzZXJuYW1lPSd0ZXN0X2FkbWluJywgcGFzc3dvcmQ9J2Zvb2JhcjQyJykKCiAgICBkZWYgdGVzdF9wb3B1bGFpcmVfYWRkX2Zvcm1fZ2V0KHNlbGYpOgogICAgICAgICIiIkdFVCByZXF1ZXN0IGZvciBhZGQgcG9wdWxhaXJlIGZvcm0gcGFnZSB3b3JrcwogICAgICAgICIiIgogICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0KCcvYWRtaW4vcG9wdWxhaXJlcy9wb3B1bGFpcmUvYWRkLycpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQogICAgICAgIHNlbGYuYXNzZXJ0Q29udGFpbnMocmVzcG9uc2UsICdBZGQgcG9wdWxhaXJlJykKCiAgICBkZWYgdGVzdF9wb3B1bGFpcmVfYWRkX2Zvcm0oc2VsZik6CiAgICAgICAgIiIic3VibWlzc2lvbiBvZiBwb3B1bGFpcmUgZm9ybSBhZGRzIHBvcHVsYWlyZSB0byBkYXRhYmFzZQogICAgICAgICIiIgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgJ3Nob3J0X25hbWUnOiAnVmljUG9wJywKICAgICAgICAgICAgJ2Rpc3RhbmNlJzogJzUwIGttLCAxMDAga20nLAogICAgICAgICAgICAnZGF0ZSc6IHBvcF9kYXRlLAogICAgICAgICAgICAnbG9jYXRpb24nOiAnVW5pdmVyc2l0eSBvZiBWaWN0b3JpYSwgUGFya2luZyBMb3QgIzIgJwogICAgICAgICAgICAgICAgICAgICAgICAnKEdhYnJpb2xhIFJvYWQsIG5lYXIgTWNLaW5ub24gR3ltKScsCiAgICAgICAgICAgICd0aW1lJzogdGltZSgxMCwgMCksCiAgICAgICAgICAgICdvcmdhbml6ZXJfZW1haWwnOiAnbWphbnNzb25AaXNsYW5kbmV0LmNvbScsCiAgICAgICAgICAgICdyZWdpc3RyYXRpb25fY2xvc2VzXzAnOiBwb3BfZGF0ZSAtIHRpbWVkZWx0YShkYXlzPTQpLAogICAgICAgICAgICAncmVnaXN0cmF0aW9uX2Nsb3Nlc18xJzogdGltZSgxMiwgMCksCiAgICAgICAgICAgICdlbnRyeV9mb3JtX3VybCc6ICdodHRwOi8vd3d3LnJhbmRvbm5ldXJzLmJjLmNhL1ZpY1BvcC8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWaWNQb3AxMV9yZWdpc3RyYXRpb24ucGRmJywKICAgICAgICAgICAgJ2VudHJ5X2Zvcm1fdXJsX2xhYmVsJzogJ0VudHJ5IEZvcm0gKFBERiknLAogICAgICAgIH0KICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LnBvc3QoCiAgICAgICAgICAgICcvYWRtaW4vcG9wdWxhaXJlcy9wb3B1bGFpcmUvYWRkLycsIHBvc3RfZGF0YSwgZm9sbG93PVRydWUpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQogICAgICAgIHNlbGYuYXNzZXJ0Q29udGFpbnMocmVzcG9uc2UsICdTZWxlY3QgcG9wdWxhaXJlIHRvIGNoYW5nZScpCiAgICAgICAgcG9wID0gUG9wdWxhaXJlLm9iamVjdHMuZ2V0KHNob3J0X25hbWU9J1ZpY1BvcCcsIGRhdGU9cG9wX2RhdGUpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgcG9wLnJlZ2lzdHJhdGlvbl9jbG9zZXMsCiAgICAgICAgICAgIGRhdGV0aW1lLmNvbWJpbmUocG9wX2RhdGUgLSB0aW1lZGVsdGEoZGF5cz00KSwgdGltZSgxMiwgMCkpKQogICAgICAgIHBvc3RfZGF0YS5wb3AoJ3JlZ2lzdHJhdGlvbl9jbG9zZXNfMCcpCiAgICAgICAgcG9zdF9kYXRhLnBvcCgncmVnaXN0cmF0aW9uX2Nsb3Nlc18xJykKICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBwb3N0X2RhdGEuaXRlcml0ZW1zKCk6CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihwb3AsIGtleSksIHZhbHVlKQoKICAgIGRlZiB0ZXN0X3BvcHVsYWlyZV9ub3RpZnlfd2VibWFzdGVyKHNlbGYpOgogICAgICAgICIiIm5vdGlmeSB3ZWJtYXN0ZXIgYWRtaW4gYWN0aW9uIHNlbmRzIGVtYWlsCiAgICAgICAgIiIiCiAgICAgICAgcGFyYW1zID0gewogICAgICAgICAgICB1J2FjdGlvbic6IFt1J25vdGlmeV93ZWJtYXN0ZXInXSwKICAgICAgICAgICAgdSdfc2VsZWN0ZWRfYWN0aW9uJzogW3UnMiddLAogICAgICAgIH0KICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LnBvc3QoCiAgICAgICAgICAgICcvYWRtaW4vcG9wdWxhaXJlcy9wb3B1bGFpcmUvJywgcGFyYW1zLCBmb2xsb3c9VHJ1ZSkKICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5zKHJlc3BvbnNlLCAnVVJMIGZvciAxIHBvcHVsYWlyZSBzZW50IHRvIHdlYm1hc3RlcicpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obWFpbC5vdXRib3gpLCAxKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIG1haWwub3V0Ym94WzBdLnN1YmplY3QsCiAgICAgICAgICAgICdSYW5kb1BvbnkgUHJlLXJlZ2lzdHJhdGlvbiBQYWdlIGZvciBWaWNQb3AgMjctTWFyLTIwMTEnKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbC5vdXRib3hbMF0udG8sIFsnd2VibWFzdGVyQGV4YW1wbGUuY29tJ10pCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgbWFpbC5vdXRib3hbMF0uZnJvbV9lbWFpbCwgJ3JhbmRvcG9ueUByYW5kb25uZXVycy5iYy5jYScpCiAgICAgICAgYm9keSA9IG1haWwub3V0Ym94WzBdLmJvZHkKICAgICAgICBzZWxmLmFzc2VydFRydWUoCiAgICAgICAgICAgICdwcmUtcmVnaXN0cmF0aW9uIHBhZ2UgZm9yIHRoZSBWaWNQb3AgMjctTWFyLTIwMTEgZXZlbnQnIGluIGJvZHkpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICAnVGhlIFVSTCBpcyBodHRwOi8vdGVzdHNlcnZlci9wb3B1bGFpcmVzL1ZpY1BvcC8yN01hcjIwMTEvJwogICAgICAgICAgICBpbiBib2R5KQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgJ3BsZWFzZSBzZW5kIGVtYWlsIHRvIHswfScuZm9ybWF0KHNldHRpbmdzLkFETUlOU1swXVsxXSkKICAgICAgICAgICAgaW4gYm9keSkKCiAgICBkZWYgdGVzdF9wb3B1bGFpcmVfbm90aWZ5X29yZ2FuaXplcihzZWxmKToKICAgICAgICAiIiJub3RpZnkgcG9wdWxhaXJlIG9yZ2FuaXplcihzKSBhZG1pbiBhY3Rpb24gc2VuZHMgZXhwZWN0ZWQgZW1haWwKICAgICAgICAiIiIKICAgICAgICBwYXJhbXMgPSB7CiAgICAgICAgICAgIHUnYWN0aW9uJzogW3Unbm90aWZ5X3BvcHVsYWlyZV9vcmdhbml6ZXInXSwKICAgICAgICAgICAgdSdfc2VsZWN0ZWRfYWN0aW9uJzogW3UnMiddLAogICAgICAgIH0KICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LnBvc3QoCiAgICAgICAgICAgICcvYWRtaW4vcG9wdWxhaXJlcy9wb3B1bGFpcmUvJywgcGFyYW1zLCBmb2xsb3c9VHJ1ZSkKICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5zKAogICAgICAgICAgICByZXNwb25zZSwgJ0VtYWlsIGZvciAxIHBvcHVsYWlyZSBzZW50IHRvIG9yZ2FuaXplcihzKScpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obWFpbC5vdXRib3gpLCAxKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIG1haWwub3V0Ym94WzBdLnN1YmplY3QsCiAgICAgICAgICAgICdSYW5kb1BvbnkgVVJMcyBmb3IgVmljUG9wIDI3LU1hci0yMDExJykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWwub3V0Ym94WzBdLnRvLCBbJ21qYW5zc29uQGV4YW1wbGUuY29tJ10pCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgbWFpbC5vdXRib3hbMF0uZnJvbV9lbWFpbCwgJ3JhbmRvcG9ueUByYW5kb25uZXVycy5iYy5jYScpCiAgICAgICAgYm9keSA9IG1haWwub3V0Ym94WzBdLmJvZHkKICAgICAgICBzZWxmLmFzc2VydFRydWUoCiAgICAgICAgICAgICdwcmUtcmVnaXN0cmF0aW9uIHBhZ2UgZm9yIHRoZSBWaWNQb3AgMjctTWFyLTIwMTEgZXZlbnQnIGluIGJvZHkpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICAnVGhlIFVSTCBpcyBodHRwOi8vdGVzdHNlcnZlci9wb3B1bGFpcmVzL1ZpY1BvcC8yN01hcjIwMTEvJwogICAgICAgICAgICBpbiBib2R5KQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgJ1RoZSByaWRlciBsaXN0IFVSTCBpcyBodHRwczovL3NwcmVhZHNoZWV0cy5nb29nbGUuY29tL2NjYz9rZXk9Zm9vJwogICAgICAgICAgICBpbiBib2R5KQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgJ1RoZSByaWRlcnMgZW1haWwgYWRkcmVzcyBsaXN0IFVSTCBpcyAnCiAgICAgICAgICAgICdodHRwOi8vdGVzdHNlcnZlci9wb3B1bGFpcmVzL1ZpY1BvcC8yN01hcjIwMTEvcmlkZXItZW1haWxzLycKICAgICAgICAgICAgJzJmYThhNWZmLWQ3MzgtNTljNS1iZWE0LTIyZmNmYTRjOWM2ZS8nCiAgICAgICAgICAgIGluIGJvZHkpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICAncGxlYXNlIHNlbmQgZW1haWwgdG8gezB9Jy5mb3JtYXQoc2V0dGluZ3MuQURNSU5TWzBdWzFdKQogICAgICAgICAgICBpbiBib2R5KQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGZyb20gLi5tb2RlbHMgaW1wb3J0IFBvcHVsYWlyZQogICAgICAgIHBvcF9kYXRlID0gZGF0ZS50b2RheSgpICsgdGltZWRlbHRhKGRheXM9MTApCiAgICAgICAgcG9zdF9kYXRhID0gewogICAgICAgICAgICAnZXZlbnRfbmFtZSc6ICdWaWN0b3JpYSBQb3B1bGFpcmUnLAo8fGZpbV9lbmR8Pg=="]
["8b4bf4b20cfcbe007d64ae827ecccd714fa0df17-4","8b4bf4b20cfcbe007d64ae827ecccd714fa0df17","PHxmaW1fcHJlZml4fD4KIyBodHRwczovL2NvZGVmb3JjZXMuY29tL3Byb2JsZW1zZXQvcHJvYmxlbS8xODkvQQoKbiwgYSwgYiwgYyA9IFtpbnQoeCkgZm9yIHggaW4gaW5wdXQoKS5zcGxpdCgpXQo8fGZpbV9ob2xlfD4KCgo8fGZpbV9zdWZmaXh8PgoKcGllY2VzID0gc29ydGVkKFthLCBiLCBjXSwgcmV2ZXJzZT1UcnVlKQpjb3VudGVyID0gMApsaXN0X3AgPSBbXQo8fGZpbV9lbmR8Pg=="]
["e3042a87b4ce6db9c135898bd5096434b9087ac0-3","e3042a87b4ce6db9c135898bd5096434b9087ac0","PHxmaW1fcHJlZml4fD4KIiIiRmluZCBwYWlycyBmb3IgYSBnaXZlbiBjbWF0LiIiIgpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCwgVHVwbGUsIFVuaW9uCgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbG9nemVybwpmcm9tIGxvZ3plcm8gaW1wb3J0IGxvZ2dlcgpmcm9tIHRpbnliZWUuZ2VuX2lzZXQgaW1wb3J0IGdlbl9pc2V0CmZyb20gdGlueWJlZS5jbWF0MnRzZXQgaW1wb3J0IGNtYXQydHNldAoKCmRlZiBmaW5kX3BhaXJzKAogICAgY21hdDE6IFVuaW9uW0xpc3RbTGlzdFtmbG9hdF1dLCBucC5uZGFycmF5LCBwZC5EYXRhRnJhbWVdLAogICAgZGVsdGE6IGZsb2F0ID0gNywKICAgIHZlcmJvc2U6IFVuaW9uW2Jvb2wsIGludF0gPSBGYWxzZSwKICAgIGVzdGltYXRvcjogc3RyID0gImRic2NhbiIsICAjIHZzIGxvd2VzcwopIC0+IExpc3RbVHVwbGVbaW50LCBpbnQsIFVuaW9uW2Zsb2F0LCBzdHJdXV06CiAgICAiIiJGaW5kIHBhaXJzIGZvciBhIGdpdmVuIGNtYXQuCgogICAgQXJnczoKICAgICAgICBjbWF0OiBjb3JyZWxhdGlvbi9zaW1pbGFyaXR5IG1hdHJpeAogICAgICAgIHZlcmJvc2U6IGRlYnVnIGxldmVsCgogICAgUmV0dXJuczoKICAgICAgICBwYWlycyArICIiIG9yIG1ldHJpYyAoZmxvYXQpCiAgICAiIiIKICAgIGlmIGlzaW5zdGFuY2UodmVyYm9zZSwgYm9vbCk6CiAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgdmVyYm9zZSA9IDEwCiAgICAgICAgZWxzZToKICAgICAgICAgICAgdmVyYm9zZSA9IDIwCiAgICBsb2d6ZXJvLmxvZ2xldmVsKHZlcmJvc2UpCgogICAgIyBpZiBpc2luc3RhbmNlKGNtYXQsIGxpc3QpOgogICAgY21hdCA9IG5wLmFycmF5KGNtYXQxKQoKICAgIHNyY19sZW4sIHRndF9sZW4gPSBjbWF0LnNoYXBlCgogICAgaXNldCA9IGdlbl9pc2V0KGNtYXQsIHZlcmJvc2U9dmVyYm9zZSwgZXN0aW1hdG9yPWVzdGltYXRvcikKICAgIHRzZXQgPSBjbWF0MnRzZXQoY21hdCkKCiAgICAqXywgeW1heCA9IHppcCgqdHNldCkKICAgIHltYXggPSBsaXN0KHltYXgpCiAgICBsb3dfID0gbnAubWluKHltYXgpIC0gMSAgIyByZXNldCB0byBtaW5pbXVtX3ZhbHVlIC0gMQoKICAgIGJ1ZmYgPSBbKC0xLCAtMSwgIiIpLCAodGd0X2xlbiwgc3JjX2xlbiwgIiIpXQogICAgZm9yIF8gaW4gcmFuZ2UodGd0X2xlbik6CiAgICAgICAgIyBwb3N0aW9uIG1heCBpbiB5bWF4IGFuZCBpbnNlcnQgaW4gYnVmZgogICAgICAgICMgaWYgd2l0aCByYW5nZSBnaXZlbiBieSBpc2V0Ky1kZWx0YSBhbmQKICAgICAgICAjIGl0J3MgdmFsaWQgKGRvIG5vdCBleGNlZWQgY29uc3RyYWludAogICAgICAgICMgYnkgbmVpZ2hib3JpbmcgcG9pbnRzCiAgICAgICAgYXJnbWF4ID0gaW50KG5wLmFyZ21heCh5bWF4KSkKICAgICAgICB5bWF4W2FyZ21heF0gPSBsb3dfCiAgICAgICAgZWxtID0gdHNldFthcmdtYXhdCiAgICAgICAgZWxtMCwgKl8gPSBlbG0KCiAgICAgICAgIyBwb3NpdGlvbiBlbG0gaW4gYnVmZgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgaWR4ICs9IDEgICMgbGFzdAoKICAgICAgICAjIGluc2VydCBlbG0gaW4gZm9yIHZhbGlkIGVsbQogICAgICAgICMgKHdpdGhpbiByYW5nZSBpbnNpZGUgdHdvIG5laWdoYm9yaW5nIHBvaW50cykKICAgICAgICBpZiBhYnModHNldFthcmdtYXhdWzFdIC0gaXNldFthcmdtYXhdWzFdKSA8PSBkZWx0YToKICAgICAgICAgICAgaWYgZWxtWzFdID4gYnVmZltpZHggLSAxXVsxXSBhbmQgZWxtWzFdIDwgYnVmZltpZHhdWzFdOgogICAgICAgICAgICAgICAgYnVmZi5pbnNlcnQoaWR4LCBlbG0pCiAgICAgICAgXyA9ICIiIgogICAgICAgIGlmIGFicyh0c2V0W2xvY11bMV0gLSBpc2V0W2xvY11bMV0pIDw9IGRlbHRhOgogICAgICAgICAgICBpZiB0c2V0W2xvY11bMV0gPiBidWZmW2lkeF1bMV0gYW5kIHRzZXRbbG9jXVsxXSA8IGJ1ZmZbaWR4ICsgMV1bMV06CiAgICAgICAgICAgICAgICBidWZmLmluc2VydChpZHggKyAxLCB0c2V0W2xvY10pCiAgICAgICAgIyAiIiIKCiAgICAjIHJlbW92ZSBmaXJzdCBhbmQgbGFzdCBlbnRyeSBpbiBidWZmCiAgICBidWZmLnBvcCgwKQogICAgYnVmZi5wb3AoKQoKICAgICMgcmV0dXJuIFsoMSwgMSwgIiIpXQogICAgcmV0dXJuIGJ1ZmYKPHxmaW1fc3VmZml4fD4KICAgICAgICBmb3IgaWR4LCBsb2MgaW4gZW51bWVyYXRlKGJ1ZmYpOgogICAgICAgICAgICBpZiBsb2NbMF0gPiBlbG0wOgogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICBlbHNlOgo8fGZpbV9lbmR8Pg=="]
["e372ff703330e9b4af2c122f40b85e41e1c0b82b-4","e372ff703330e9b4af2c122f40b85e41e1c0b82b","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogVVRGLTggLSotCl9fYXV0aG9yX18gPSAnUmljYXJkbyBDYXB1eicKIyBJbXBvcnQgRWxhc3RpY3NlYXJjaCBwYWNrYWdlCmZyb20gZWxhc3RpY3NlYXJjaCBpbXBvcnQgRWxhc3RpY3NlYXJjaApmcm9tIGVsYXN0aWNzZWFyY2hfZHNsIGltcG9ydCBTZWFyY2gKCmRlZiBjcmVhdGVfZmlsZV9mcm9tX2VsYXN0aWMoaW5kZXgsIHNvdXJjZV9sb2csIHJlc3VsdF9sb2dfcGF0aCk6CiAgICBjbGllbnQgPSBFbGFzdGljc2VhcmNoKCkKICAgIHMgPSBTZWFyY2godXNpbmc9Y2xpZW50LCBpbmRleD1pbmRleCkucXVlcnkoIm1hdGNoIiwgc291cmNlPXNvdXJjZV9sb2cpCiAgICByZXMgPSBzLnNjYW4oKQogICAgZmlsZSA9IG9wZW4ocmVzdWx0X2xvZ19wYXRoLCAndycpCiAgICBmb3IgaW5kZXhlZF9sb2dfbGluZSBpbiByZXM6Cjx8ZmltX2hvbGV8PgogICAgZmlsZS5jbG9zZSgpCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgaW5kZXggPSAiZmlsZWJlYXQtNi41LjEtMjAxOC4xMi4wMyIKICAgIHNvdXJjZV9sb2cgPSAiL3Zhci9sb2cvcm9jb3JlMi5sb2ciCiAgICByZXN1bHRfbG9nX3BhdGggPSAnL2hvbWUvdXMxL2dpdC9sb2dsaXplcicgKyAiL2RheWNvX2xvZy5sb2ciCiAgICBjcmVhdGVfZmlsZV9mcm9tX2VsYXN0aWMoaW5kZXgsIHNvdXJjZV9sb2csIHJlc3VsdF9sb2dfcGF0aCkKPHxmaW1fc3VmZml4fD4KICAgICAgICBmaWxlLndyaXRlKGluZGV4ZWRfbG9nX2xpbmUubWVzc2FnZSsnXG4nKQo8fGZpbV9lbmR8Pg=="]
["55081e46fb03394754870e43ba5a2e01438c0016-1","55081e46fb03394754870e43ba5a2e01438c0016","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKIyBweWxpbnQ6IGRpc2FibGU9QzAxMDMKCmltcG9ydCB1bml0dGVzdAppbXBvcnQgdGltZWl0CmltcG9ydCBzeXMKaW1wb3J0IG9zCgpzdXRzID0gW10KCiMgQSBkZWNvcmF0b3IgdGhhdCBhdXRvLWFwcGVuZHMgdG8gYSBsaXN0IG9mIGZ1bmN0aW9ucy4KZGVmIHN1dChmdW4pOgogICAgc3V0cy5hcHBlbmQoZnVuKQogICAgcmV0dXJuIGZ1bgoKCkBzdXQKZGVmIHJldmVyc2ViaXRzMShtYXhfYml0cywgbnVtKToKICAgICIiIiBTd2FwIGhpZ2hlc3QgYml0IHdpdGggbG93ZXN0IGJpdCwgdGhlbiBuZXh0LWhpZ2hlc3QgYW5kIHNvIG9uLiAiIiIKICAgIHJldl9udW0gPSAwCgogICAgZm9yIGkgaW4gcmFuZ2UoMCwgKG1heF9iaXRzICsgMSkgLy8gMik6CiAgICAgICAgaGlnaF9zaGlmdCA9IG1heF9iaXRzIC0gaSAtIDEKICAgICAgICBsb3dfc2hpZnQgPSBpCgogICAgICAgIGxvd19iaXQgPSAobnVtICYgKDEgPDwgbG93X3NoaWZ0KSkgPj4gbG93X3NoaWZ0CiAgICAgICAgaGlnaF9iaXQgPSAobnVtICYgKDEgPDwgaGlnaF9zaGlmdCkpID4+IGhpZ2hfc2hpZnQKCiAgICAgICAgcmV2X251bSB8PSBsb3dfYml0IDw8IGhpZ2hfc2hpZnQKICAgICAgICByZXZfbnVtIHw9IGhpZ2hfYml0IDw8IGxvd19zaGlmdAoKICAgIHJldHVybiByZXZfbnVtCgoKQHN1dApkZWYgcmV2ZXJzZWJpdHMyKG1heF9iaXRzLCBudW0pOgogICAgIiIiIExpa2UgcmV2ZXJzZWJpdHMxLCBwbHVzIHNtYWxsIG9wdGltaXphdGlvbiByZWdhcmRpbmcgYml0IGluZGV4CiAgICAgICAgY2FsY3VsYXRpb24uICIiIgogICAgcmV2X251bSA9IDAKICAgIGhpZ2hfc2hpZnQgPSBtYXhfYml0cyAtIDEKICAgIGxvd19zaGlmdCA9IDAKCiAgICBmb3IgXyBpbiByYW5nZSgwLCAobWF4X2JpdHMgKyAxKSAvLyAyKToKCiAgICAgICAgbG93X2JpdCA9IChudW0gJiAoMSA8PCBsb3dfc2hpZnQpKSA+PiBsb3dfc2hpZnQKICAgICAgICBoaWdoX2JpdCA9IChudW0gJiAoMSA8PCBoaWdoX3NoaWZ0KSkgPj4gaGlnaF9zaGlmdAoKICAgICAgICByZXZfbnVtIHw9IGxvd19iaXQgPDwgaGlnaF9zaGlmdAogICAgICAgIHJldl9udW0gfD0gaGlnaF9iaXQgPDwgbG93X3NoaWZ0CgogICAgICAgIGhpZ2hfc2hpZnQgLT0gMQogICAgICAgIGxvd19zaGlmdCArPSAxCgogICAgcmV0dXJuIHJldl9udW0KCgpAc3V0CmRlZiByZXZlcnNlYml0czMobWF4X2JpdHMsIG51bSk6CiAgICAiIiIgUmV2ZXJzYWwgYmFzZWQgb24gc3RyaW5nIGFuZCBsaXN0IHNsaWNpbmcgb3BlcmF0aW9ucy4gCgogICAgICAgIEJUVywgdGhpcyBpcyB0aGUgZmFzdGVzdCBiaXQgcmV2ZXJzYWwgaW1wbGVtZW50YXRpb24KICAgICAgICBpbiB0aGlzIGZpbGUhIEkgZ3Vlc3MgUHl0aG9uIGNhbiBlZmZpY2llbnRseSB3b3JrIHdpdGgKICAgICAgICBzdHJpbmdzLCB3aGlsZSBDL0MrKyBjYW4gZWZmaWNpZW50bHkgd29yayB3aXRoIGJpdHMuICIiIgogICAgcmV0dXJuIGludChiaW4obnVtKVsyOl0uemZpbGwobWF4X2JpdHMpWy1tYXhfYml0czpdWzo6LTFdLCAyKQoKCkBzdXQKZGVmIHJldmVyc2ViaXRzNChtYXhfYml0cywgbnVtKToKICAgICIiIiBBIGNsYXNzaWMgYW5kIHNpbXBsZSBiaXQgcmV2ZXJzYWwgYWxnb3JpdGhtLiIiIgogICAgcmV2X251bSA9IDAKICAgIGZvciBfIGluIHJhbmdlKG1heF9iaXRzKToKICAgICAgICByZXZfbnVtIHw9IG51bSAmIDEKICAgICAgICBudW0gPj49IDEKICAgICAgICByZXZfbnVtIDw8PSAxCiAgICByZXZfbnVtID4+PSAxCiAgICByZXR1cm4gcmV2X251bQoKCkBzdXQKZGVmIHJldmVyc2ViaXRzNShtYXhfYml0cywgbnVtKToKPHxmaW1faG9sZXw+CiAgICB3aGlsZSBudW0gIT0gMCBhbmQgc2hpZnRzIDwgbWF4X2JpdHM6CiAgICAgICAgcmV2X251bSB8PSBudW0gJiAxCiAgICAgICAgbnVtID4+PSAxCiAgICAgICAgcmV2X251bSA8PD0gMQogICAgICAgIHNoaWZ0cyArPSAxCiAgICByZXZfbnVtID4+PSAxCiAgICByZXZfbnVtIDw8PSAobWF4X2JpdHMgLSBzaGlmdHMpCiAgICByZXR1cm4gcmV2X251bQoKCkBzdXQKZGVmIHJldmVyc2ViaXRzNihtYXhfYml0cywgbnVtKToKICAgICIiIiBMaWtlIHJldmVyc2ViaXRzNSwgcGx1cyBhdm9pZGFuY2Ugb2YgYW4gdW5uZWNlc3Nhcnkgc2hpZnQuICIiIgogICAgcmV2X251bSA9IDAKICAgIHJldl9sZWZ0X3NoaWZ0c190b19kbyA9IG1heF9iaXRzIC0gMQogICAgd2hpbGUgVHJ1ZToKICAgICAgICByZXZfbnVtIHw9IG51bSAmIDEKICAgICAgICBudW0gPj49IDEKICAgICAgICBpZiBudW0gPT0gMCBvciByZXZfbGVmdF9zaGlmdHNfdG9fZG8gPT0gMDoKICAgICAgICAgICAgYnJlYWsKICAgICAgICByZXZfbnVtIDw8PSAxCiAgICAgICAgcmV2X2xlZnRfc2hpZnRzX3RvX2RvIC09IDEKICAgIHJldl9udW0gPDw9IHJldl9sZWZ0X3NoaWZ0c190b19kbwogICAgcmV0dXJuIHJldl9udW0KCgpkZWYgZnVuY19uYW1lX2Zyb21fY2FsbGFibGUoZnVuKToKICAgIHJldHVybiBzdHIoZnVuKS5zcGxpdCgpWzFdCgoKY2xhc3MgVGVzdEJpdHNSZXZlcnNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiB0ZXN0X2FsbChzZWxmKToKICAgICAgICBmb3IgbXlfc3V0IGluIHN1dHM6CiAgICAgICAgICAgIHByaW50KCJUZXN0aW5nIiwgZnVuY19uYW1lX2Zyb21fY2FsbGFibGUobXlfc3V0KSkKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweDgwLCBteV9zdXQoOCwgMHgwMSkpCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHgwMCwgbXlfc3V0KDMyLCAweDAwKSkKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweDAwLCBteV9zdXQoMzIsIDB4MDApKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4RkZGRiwgbXlfc3V0KDE2LCAweEZGRkYpKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4MEYsIG15X3N1dCg4LCAweEYwKSkKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwYjExMDEwMDExLCBteV9zdXQoOCwgMGIxMTAwMTAxMSkpCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMGIwMTAxMDEwMSwgbXlfc3V0KDgsIDBiMTAxMDEwMTApKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDBiMTExLCBteV9zdXQoMywgMHhGRkZGKSkKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwYjExMCwgbXlfc3V0KDMsIDBiMTAwMTEpKQoKCiAgICBkZWYgdGVzdF9tZWFzdXJlX3BlcmZvcm1hbmNlKHNlbGYpOgogICAgICAgIHRoaXNfbW9kdWxlX25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pKVswXQogICAgICAgIFJFUEVBVF9DT1VOVCA9IDEwMDAwMAoKICAgICAgICBmb3IgbXlfc3V0IGluIHN1dHM6CiAgICAgICAgICAgIHN1dF9uYW1lID0gZnVuY19uYW1lX2Zyb21fY2FsbGFibGUobXlfc3V0KQogICAgICAgICAgICBpbnZvY2F0aW9uID0gdGhpc19tb2R1bGVfbmFtZSArICIuIiArIHN1dF9uYW1lICsgIigzMiwgMHhhYmNkODEyQSkiCiAgICAgICAgICAgIHNlY3MgPSB0aW1laXQuVGltZXIoaW52b2NhdGlvbiwgc2V0dXA9ImltcG9ydCAiICsgdGhpc19tb2R1bGVfbmFtZSkudGltZWl0KG51bWJlcj1SRVBFQVRfQ09VTlQpCiAgICAgICAgICAgIHByaW50KCJSdW50aW1lICVzOiAlLjJmIHVzZWNzIiAlIChzdXRfbmFtZSwgc2VjcyAvIFJFUEVBVF9DT1VOVCAqIDEwMDAuMCAqIDEwMDAuMCkpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHVuaXR0ZXN0Lm1haW4oKQo8fGZpbV9zdWZmaXh8PgogICAgIiIiIExpa2UgcmV2ZXJzZWJpdHM0LCBwbHVzIG9wdGltaXphdGlvbnMgcmVnYXJkaW5nIGxlYWRpbmcgemVyb3MgaW4KICAgICAgICBvcmlnaW5hbCB2YWx1ZS4gIiIiCiAgICByZXZfbnVtID0gMAogICAgc2hpZnRzID0gMAo8fGZpbV9lbmR8Pg=="]
["f941c1cb76717d3d2c48d2ac905826206adce457-3","f941c1cb76717d3d2c48d2ac905826206adce457","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCgppbXBvcnQgb3MucGF0aCBhcyBvc3AKaW1wb3J0IHRpbWUKCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm5uLmZ1bmN0aW9uYWwgYXMgRgppbXBvcnQgdG9yY2guZGlzdHJpYnV0aW9ucyBhcyB0b3JjaGRpc3QKaW1wb3J0IHRvcmNoZ2VvbWV0cnkgYXMgdGdtCgoKY2xhc3MgQ29udGlub3VzUm90UmVwckRlY29kZXIobm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzdXBlcihDb250aW5vdXNSb3RSZXByRGVjb2Rlciwgc2VsZikuX19pbml0X18oKQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIG1vZHVsZV9pbnB1dCk6CiAgICAgICAgcmVzaGFwZWRfaW5wdXQgPSBtb2R1bGVfaW5wdXQudmlldygtMSwgMywgMikKCiAgICAgICAgYjEgPSBGLm5vcm1hbGl6ZShyZXNoYXBlZF9pbnB1dFs6LCA6LCAwXSwgZGltPTEpCgogICAgICAgIGRvdF9wcm9kID0gdG9yY2guc3VtKGIxICogcmVzaGFwZWRfaW5wdXRbOiwgOiwgMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltPTEsIGtlZXBkaW09VHJ1ZSkKICAgICAgICBiMiA9IEYubm9ybWFsaXplKHJlc2hhcGVkX2lucHV0WzosIDosIDFdIC0KICAgICAgICAgICAgICAgICAgICAgICAgIGRvdF9wcm9kICogYjEsIGRpbT0tMSkKICAgICAgICBiMyA9IHRvcmNoLmNyb3NzKGIxLCBiMiwgZGltPTEpCgogICAgICAgIHJldHVybiB0b3JjaC5zdGFjayhbYjEsIGIyLCBiM10sIGRpbT0tMSkKCgpjbGFzcyBWUG9zZXJFbmNvZGVyKG5uLk1vZHVsZSk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGxhdGVudF9kaW1fc2l6ZT0zMiwgaGlkZGVuX2RpbT01MTIsIGlzX3RyYWluaW5nPUZhbHNlLAogICAgICAgICAgICAgICAgIGR0eXBlPXRvcmNoLmZsb2F0MzIsIGVuY29kZXJfY2twdD0nJywKICAgICAgICAgICAgICAgICAqKmt3YXJncyk6CiAgICAgICAgc3VwZXIoVlBvc2VyRW5jb2Rlciwgc2VsZikuX19pbml0X18oKQoKICAgICAgICBzZWxmLmR0eXBlID0gZHR5cGUKCiAgICAgICAgc2VsZi5pc190cmFpbmluZyA9IGlzX3RyYWluaW5nCiAgICAgICAgc2VsZi5mYzEgPSBubi5MaW5lYXIoMjMgKiA5LCA1MTIpCiAgICAgICAgc2VsZi5mYzIgPSBubi5MaW5lYXIoNTEyLCA1MTIpCiAgICAgICAgc2VsZi5abXUgPSBubi5MaW5lYXIoNTEyLCBsYXRlbnRfZGltX3NpemUpCiAgICAgICAgc2VsZi5ac2lnbWEgPSBubi5MaW5lYXIoNTEyLCBsYXRlbnRfZGltX3NpemUpCiAgICAgICAgc2VsZi5sYXRlbnRfZGltX3NpemUgPSBsYXRlbnRfZGltX3NpemUKCiAgICAgICAgaWYgZW5jb2Rlcl9ja3B0OgogICAgICAgICAgICBpZiBlbmNvZGVyX2NrcHQuZW5kc3dpdGgoJy5ucHknKSBvciBlbmNvZGVyX2NrcHQuZW5kc3dpdGgoJy5ucHonKToKICAgICAgICAgICAgICAgIHNlbGYubG9hZF9mcm9tX251bXB5KGVuY29kZXJfY2twdCkKICAgICAgICAgICAgZWxpZiBlbmNvZGVyX2NrcHQuZW5kc3dpdGgoJy5wdCcpOgogICAgICAgICAgICAgICAgZGF0YSA9IHRvcmNoLmxvYWQoZW5jb2Rlcl9ja3B0KQoKICAgICAgICAgICAgICAgIG51bV9mYyA9IDMKICAgICAgICAgICAgICAgIGVuY193ZWlnaHRzID0ge30KICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gc29ydGVkKGRhdGEpOgogICAgICAgICAgICAgICAgICAgIGlmICdlbmMnIG5vdCBpbiBrZXk6CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgZGVzdF9rZXkgPSAoa2V5IGlmICdvdXQnIG5vdCBpbiBrZXkgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS5yZXBsYWNlKCdvdXQnLCAnZmN7fScuZm9ybWF0KG51bV9mYykpKQogICAgICAgICAgICAgICAgICAgIGRlc3Rfa2V5ID0gZGVzdF9rZXkucmVwbGFjZSgnYm9keXByaW9yX2VuY18nLCAnJykKICAgICAgICAgICAgICAgICAgICBlbmNfd2VpZ2h0c1tkZXN0X2tleV0gPSBkYXRhW2tleV0KCiAgICAgICAgICAgICAgICBzZWxmLmxvYWRfc3RhdGVfZGljdChlbmNfd2VpZ2h0cykKICAgICAgICBpZiBub3Qgc2VsZi5pc190cmFpbmluZzoKICAgICAgICAgICAgc2VsZi5ldmFsKCkKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4KToKICAgICAgICB4ID0geC52aWV3KHguc2hhcGVbMF0sIC0xKQogICAgICAgIGZjMV9vdXQgPSBGLmxlYWt5X3JlbHUoc2VsZi5mYzEoeCksIDAuMikKICAgICAgICBmYzFfb3V0ID0gRi5kcm9wb3V0KGZjMV9vdXQsIHA9MC4yNSwgdHJhaW5pbmc9c2VsZi5pc190cmFpbmluZykKICAgICAgICBmYzJfb3V0ID0gRi5sZWFreV9yZWx1KHNlbGYuZmMyKGZjMV9vdXQpLCAwLjIpCiAgICAgICAgWm11X29wID0gc2VsZi5abXUoZmMyX291dCkKCiAgICAgICAgaWYgc2VsZi5pc190cmFpbmluZzoKICAgICAgICAgICAgWnNpZ21hX29wID0gRi5zb2Z0cGx1cyhzZWxmLlpzaWdtYShmYzJfb3V0KSkKICAgICAgICAgICAgcmV0dXJuIHRvcmNoZGlzdC5Ob3JtYWwobG9jPVptdV9vcCwgc2NhbGU9WnNpZ21hX29wKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBabXVfb3AKCiAgICBkZWYgbG9hZF9mcm9tX251bXB5KHNlbGYsIGZpbGVfcGF0aCk6CiAgICAgICAgaW1wb3J0IG51bXB5IGFzIG5wCiAgICAgICAgZGF0YSA9IG5wLmxvYWQoZmlsZV9wYXRoKQogICAgICAgICMgVEYgZGF0YSBpcyAzMlg1MTIgd2hpbGUgcHl0b3JjaCBsYXllciBkYXRhIGhhcyBmb3JtYXQgNTEyWDMyCiAgICAgICAgIyB0aGF0IGlzIHdoeSB0cmFuc3Bvc2UKICAgICAgICBzZWxmLmZjMS53ZWlnaHQuZGF0YSA9IHRvcmNoLmZyb21fbnVtcHkoZGF0YVsnZmMxVyddLlQpLnRvKHNlbGYuZHR5cGUpCiAgICAgICAgc2VsZi5mYzEuYmlhcy5kYXRhID0gdG9yY2guZnJvbV9udW1weShkYXRhWydmYzFiJ10pLnRvKHNlbGYuZHR5cGUpCiAgICAgICAgc2VsZi5mYzIud2VpZ2h0LmRhdGEgPSB0b3JjaC5mcm9tX251bXB5KGRhdGFbJ2ZjMlcnXS5UKS50byhzZWxmLmR0eXBlKQogICAgICAgIHNlbGYuZmMyLmJpYXMuZGF0YSA9IHRvcmNoLmZyb21fbnVtcHkoZGF0YVsnZmMyYiddKS50byhzZWxmLmR0eXBlKQogICAgICAgIHNlbGYuWm11LndlaWdodC5kYXRhID0gdG9yY2guZnJvbV9udW1weShkYXRhWydabXVXJ10uVCkudG8oc2VsZi5kdHlwZSkKICAgICAgICBzZWxmLlptdS5iaWFzLmRhdGEgPSB0b3JjaC5mcm9tX251bXB5KGRhdGFbJ1ptdWInXSkudG8oc2VsZi5kdHlwZSkKCgpjbGFzcyBWUG9zZXJEZWNvZGVyKG5uLk1vZHVsZSk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGxhdGVudF9kaW1fc2l6ZT0zMiwgaXNfdHJhaW5pbmc9RmFsc2UsCiAgICAgICAgICAgICAgICAgbnVtX25ldXJvbnM9NTEyLAogICAgICAgICAgICAgICAgIGR0eXBlPXRvcmNoLmZsb2F0MzIsIHZwb3Nlcl9ja3B0PScnLAogICAgICAgICAgICAgICAgIHZwb3Nlcl9pZ25vcmVfaGFuZHM9VHJ1ZSwKICAgICAgICAgICAgICAgICBudW1fZmM9MywgZGF0YV9kaW09MjMgKiA5LAogICAgICAgICAgICAgICAgIHVzZV9jb250X3JlcHI9RmFsc2UsCiAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgoKICAgICAgICBzdXBlcihWUG9zZXJEZWNvZGVyLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5kdHlwZSA9IGR0eXBlCiAgICAgICAgc2VsZi5pc190cmFpbmluZyA9IGlzX3RyYWluaW5nCiAgICAgICAgc2VsZi5sYXRlbnRfZGltX3NpemUgPSBsYXRlbnRfZGltX3NpemUKICAgICAgICBzZWxmLmlnbm9yZV9oYW5kcyA9IHZwb3Nlcl9pZ25vcmVfaGFuZHMKICAgICAgICBzZWxmLm51bV9mYyA9IG51bV9mYwoKICAgICAgICBzZWxmLmZjMSA9IG5uLkxpbmVhcihsYXRlbnRfZGltX3NpemUsIG51bV9uZXVyb25zKQogICAgICAgIHNlbGYuZmMyID0gbm4uTGluZWFyKG51bV9uZXVyb25zLCBudW1fbmV1cm9ucykKICAgICAgICBpbnB1dF9kaW0gPSBsYXRlbnRfZGltX3NpemUKICAgICAgICBvdXRwdXRfZGltID0gbnVtX25ldXJvbnMKICAgICAgICBzZWxmLnVzZV9jb250X3JlcHIgPSB1c2VfY29udF9yZXByCgogICAgICAgIGlmIHNlbGYudXNlX2NvbnRfcmVwcjoKICAgICAgICAgICAgc2VsZi5yb3RfZGVjb2RlciA9IENvbnRpbm91c1JvdFJlcHJEZWNvZGVyKCkKCiAgICAgICAgbl9mZWF0dXJlcyA9IGRhdGFfZGltCiAgICAgICAgaWYgdXNlX2NvbnRfcmVwcjoKICAgICAgICAgICAgcm90X2RpbSA9IDMKICAgICAgICAgICAgbnVtX2pvaW50cyA9IGludChkYXRhX2RpbSAvIDkpCiAgICAgICAgICAgIG5fZmVhdHVyZXMgPSBpbnQobnVtX2pvaW50cyAqIChyb3RfZGltICoqIDIgLSByb3RfZGltKSkKCiAgICAgICAgZm9yIGZjX2lkIGluIHJhbmdlKHNlbGYubnVtX2ZjKToKICAgICAgICAgICAgc2VsZi5hZGRfbW9kdWxlKCdmY3t9Jy5mb3JtYXQoZmNfaWQgKyAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5uLkxpbmVhcihpbnB1dF9kaW0sIG91dHB1dF9kaW0pKQogICAgICAgICAgICBpbnB1dF9kaW0gPSBvdXRwdXRfZGltCiAgICAgICAgICAgIG91dHB1dF9kaW0gPSBudW1fbmV1cm9ucyBpZiBmY19pZCA8IG51bV9mYyAtIDIgZWxzZSBuX2ZlYXR1cmVzCgogICAgICAgIGlmIHZwb3Nlcl9ja3B0OgogICAgICAgICAgICBzZWxmLmxvYWRfd2VpZ2h0cyh2cG9zZXJfY2twdCkKCiAgICBkZWYgZ2V0X2RpbV9zaXplKHNlbGYpOgo8fGZpbV9ob2xlfD4KICAgIGRlZiBnZXRfbWVhbihzZWxmKToKICAgICAgICByZXR1cm4gdG9yY2guemVyb3MoW3NlbGYubGF0ZW50X2RpbV9zaXplXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZHR5cGU9c2VsZi5kdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlPXNlbGYuZmMxLndlaWdodC5kYXRhLmRldmljZSkKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4KToKICAgICAgICBiYXRjaF9zaXplID0geC5zaGFwZVswXQoKCiAgICAgICAgbmV0X2lucHV0ID0geAogICAgICAgIGZvciBmY19pZCBpbiByYW5nZShzZWxmLm51bV9mYyAtIDEpOgogICAgICAgICAgICBjdXJyX21vZHVsZSA9IGdldGF0dHIoc2VsZiwgJ2Zje30nLmZvcm1hdChmY19pZCArIDEpKQogICAgICAgICAgICBkcm9wb3V0ID0gRi5kcm9wb3V0IGlmIGZjX2lkID09IDEgZWxzZSBsYW1iZGEgYXJnLCAqKmt3YXJnczogYXJnCiAgICAgICAgICAgIGN1cnJfb3V0cHV0ID0gZHJvcG91dCgKICAgICAgICAgICAgICAgIEYubGVha3lfcmVsdShjdXJyX21vZHVsZShuZXRfaW5wdXQpLCAwLjIpLCBwPTAuMjUsCiAgICAgICAgICAgICAgICB0cmFpbmluZz1zZWxmLmlzX3RyYWluaW5nKQogICAgICAgICAgICBuZXRfaW5wdXQgPSBjdXJyX291dHB1dAoKICAgICAgICBjdXJyX21vZHVsZSA9IGdldGF0dHIoc2VsZiwgJ2Zje30nLmZvcm1hdChzZWxmLm51bV9mYykpCgogICAgICAgIG91dHB1dCA9IGN1cnJfbW9kdWxlKG5ldF9pbnB1dCkKICAgICAgICBpZiBzZWxmLnVzZV9jb250X3JlcHI6CiAgICAgICAgICAgIGNvcnJlY3Rfcm90ID0gc2VsZi5yb3RfZGVjb2RlcihvdXRwdXQpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgb3V0cHV0ID0gdG9yY2gudGFuaChvdXRwdXQpLnZpZXcoLTEsIDMsIDMpCgogICAgICAgICAgICAjIEJlZm9yZSBjb252ZXJ0aW5nIHRoZSBvdXRwdXQgcm90YXRpb24gbWF0cmljZXMgb2YgdGhlIFZBRSB0bwogICAgICAgICAgICAjIGF4aXMtYW5nbGUgcmVwcmVzZW50YXRpb24sIHdlIGZpcnN0IG5lZWQgdG8gbWFrZSB0aGVtIGluIHRvIHZhbGlkCiAgICAgICAgICAgICMgcm90YXRpb24gbWF0cmljZXMKICAgICAgICAgICAgd2l0aCB0b3JjaC5ub19ncmFkKCk6CiAgICAgICAgICAgICAgICAjIEl0ZXJhdGUgb3ZlciB0aGUgYmF0Y2ggZGltZW5zaW9uIGFuZCBjb21wdXRlIHRoZSBTVkQKICAgICAgICAgICAgICAgIHN2ZF9pbnB1dCA9IG91dHB1dC5kZXRhY2goKS5jcHUoKQogICAgICAgICAgICAgICAgIyAgc3ZkX2lucHV0ID0gb3V0cHV0CiAgICAgICAgICAgICAgICBub3JtX3JvdGF0aW9uID0gdG9yY2guemVyb3NfbGlrZShzdmRfaW5wdXQpCiAgICAgICAgICAgICAgICBmb3IgYmlkeCBpbiByYW5nZShvdXRwdXQuc2hhcGVbMF0pOgogICAgICAgICAgICAgICAgICAgIFUsIF8sIFYgPSB0b3JjaC5zdmQoc3ZkX2lucHV0W2JpZHhdKQoKICAgICAgICAgICAgICAgICAgICAjIE11bHRpcGx5IHRoZSBVLCBWIG1hdHJpY2VzIHRvIGdldCB0aGUgY2xvc2VzdCBvcnRob25vcm1hbAogICAgICAgICAgICAgICAgICAgICMgbWF0cml4CiAgICAgICAgICAgICAgICAgICAgbm9ybV9yb3RhdGlvbltiaWR4XSA9IHRvcmNoLm1hdG11bChVLCBWLnQoKSkKICAgICAgICAgICAgICAgIG5vcm1fcm90YXRpb24gPSBub3JtX3JvdGF0aW9uLnRvKHguZGV2aWNlKQoKICAgICAgICAgICAgIyB0b3JjaC5zdmQgc3VwcG9ydHMgYmFja3Byb3Agb25seSBmb3IgZnVsbC1yYW5rIG1hdHJpY2VzLgogICAgICAgICAgICAjIFRoZSBvdXRwdXQgaXMgY2FsY3VsYXRlZCBhcyB0aGUgdmFsaWQgcm90YXRpb24gbWF0cml4IHBsdXMgdGhlCiAgICAgICAgICAgICMgb3V0cHV0IG1pbnVzIHRoZSBkZXRhY2hlZCBvdXRwdXQuIElmIG9uZSB3cml0ZXMgZG93biB0aGUKICAgICAgICAgICAgIyBjb21wdXRhdGlvbmFsIGdyYXBoIGZvciB0aGlzIG9wZXJhdGlvbiwgaXQgd2lsbCBiZWNvbWUgY2xlYXIgdGhlCiAgICAgICAgICAgICMgb3V0cHV0IGlzIHRoZSBkZXNpcmVkIHZhbGlkIHJvdGF0aW9uIG1hdHJpeCwgd2hpbGUgZm9yIHRoZQogICAgICAgICAgICAjICBiYWNrd2FyZCBwYXNzIGdyYWRpZW50cyBhcmUgcHJvcGFnYXRlZCBvbmx5IHRvIHRoZSBvcmlnaW5hbAogICAgICAgICAgICAjIG1hdHJpeAogICAgICAgICAgICAjIFNvdXJjZTogUHlUb3JjaCBHdW1iZWwtU29mdG1heCBoYXJkIHNhbXBsaW5nCiAgICAgICAgICAgICMgaHR0cHM6Ly9weXRvcmNoLm9yZy9kb2NzL3N0YWJsZS9fbW9kdWxlcy90b3JjaC9ubi9mdW5jdGlvbmFsLmh0bWwjZ3VtYmVsX3NvZnRtYXgKICAgICAgICAgICAgY29ycmVjdF9yb3QgPSBub3JtX3JvdGF0aW9uIC0gb3V0cHV0LmRldGFjaCgpICsgb3V0cHV0CiAgICAgICAgb3V0cHV0ID0gdGdtLnJvdGF0aW9uX21hdHJpeF90b19hbmdsZV9heGlzKAogICAgICAgICAgICBGLnBhZChjb3JyZWN0X3JvdC52aWV3KC0xLCAzLCAzKSwgWzAsIDEsIDAsIDBdKSkuY29udGlndW91cygpLnZpZXcoYmF0Y2hfc2l6ZSwtMSkKICAgICAgICBpZiBzZWxmLmlnbm9yZV9oYW5kczoKICAgICAgICAgICAgcmV0dXJuIG91dHB1dFs6LCA6LTZdCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIG91dHB1dAoKICAgIGRlZiBsb2FkX3dlaWdodHMoc2VsZiwgZmlsZV9wYXRoKToKICAgICAgICBmaWxlX3BhdGggPSBvc3AuZXhwYW5kdXNlcihvc3AuZXhwYW5kdmFycyhmaWxlX3BhdGgpKQogICAgICAgIGlmIGZpbGVfcGF0aC5lbmRzd2l0aCgnLm5weScpIG9yIGZpbGVfcGF0aC5lbmRzd2l0aCgnLm5weicpOgogICAgICAgICAgICBzZWxmLmxvYWRfZnJvbV9udW1weShmaWxlX3BhdGgpCiAgICAgICAgZWxpZiBmaWxlX3BhdGguZW5kc3dpdGgoJy5wdCcpOgogICAgICAgICAgICBkYXRhID0gdG9yY2gubG9hZChmaWxlX3BhdGgpCgogICAgICAgICAgICBkZWNfd2VpZ2h0cyA9IHt9CiAgICAgICAgICAgIGZvciBrZXkgaW4gc29ydGVkKGRhdGEpOgogICAgICAgICAgICAgICAgaWYgJ2RlYycgbm90IGluIGtleToKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgZGVzdF9rZXkgPSAoa2V5IGlmICdvdXQnIG5vdCBpbiBrZXkgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LnJlcGxhY2UoJ291dCcsICdmY3t9Jy5mb3JtYXQoc2VsZi5udW1fZmMpKSkKICAgICAgICAgICAgICAgIGRlc3Rfa2V5ID0gZGVzdF9rZXkucmVwbGFjZSgnYm9keXByaW9yX2RlY18nLCAnJykKICAgICAgICAgICAgICAgIGRlY193ZWlnaHRzW2Rlc3Rfa2V5XSA9IGRhdGFba2V5XQoKICAgICAgICAgICAgc2VsZi5sb2FkX3N0YXRlX2RpY3QoZGVjX3dlaWdodHMpCgogICAgZGVmIGxvYWRfZnJvbV9udW1weShzZWxmLCBmaWxlX3BhdGgpOgogICAgICAgIGltcG9ydCBudW1weSBhcyBucAogICAgICAgIGRhdGEgPSBucC5sb2FkKGZpbGVfcGF0aCkKICAgICAgICAjIFRGIGRhdGEgaXMgMzJYNTEyIHdoaWxlIHB5dG9yY2ggbGF5ZXIgZGF0YSBoYXMgZm9ybWF0IDUxMlgzMgogICAgICAgICMgdGhhdCBpcyB3aHkgdHJhbnNwb3NlCiAgICAgICAgc2VsZi5mYzEud2VpZ2h0LmRhdGEgPSB0b3JjaC5mcm9tX251bXB5KGRhdGFbJ2ZjMVcnXS5UKS50byhzZWxmLmR0eXBlKQogICAgICAgIHNlbGYuZmMxLmJpYXMuZGF0YSA9IHRvcmNoLmZyb21fbnVtcHkoZGF0YVsnZmMxYiddKS50byhzZWxmLmR0eXBlKQogICAgICAgIHNlbGYuZmMyLndlaWdodC5kYXRhID0gdG9yY2guZnJvbV9udW1weShkYXRhWydmYzJXJ10uVCkudG8oc2VsZi5kdHlwZSkKICAgICAgICBzZWxmLmZjMi5iaWFzLmRhdGEgPSB0b3JjaC5mcm9tX251bXB5KGRhdGFbJ2ZjMmInXSkudG8oc2VsZi5kdHlwZSkKICAgICAgICBzZWxmLmZjMy53ZWlnaHQuZGF0YSA9IHRvcmNoLmZyb21fbnVtcHkoZGF0YVsnZmMzVyddLlQpLnRvKHNlbGYuZHR5cGUpCiAgICAgICAgc2VsZi5mYzMuYmlhcy5kYXRhID0gdG9yY2guZnJvbV9udW1weShkYXRhWydmYzNiJ10pLnRvKHNlbGYuZHR5cGUpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcmV0dXJuIHNlbGYubGF0ZW50X2RpbV9zaXplCgo8fGZpbV9lbmR8Pg=="]
["1964c9514bb49065f6d8cd2bd9fa296c0b19084b-2","1964c9514bb49065f6d8cd2bd9fa296c0b19084b","PHxmaW1fcHJlZml4fD4KY2xhc3MgQWJzdHJhY3RCYXNlUGxvdChvYmplY3QpOgogICAgIiIiIEFic3JhY3RzIHNldHRpbmdzIGZvciBwbG90cyBmb3IgcHJlc2VudGF0aW9ucywgcGFwZXJzLCBldGMuICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwbG90X3R5cGUsIG5DaGFubmVscywgcmVzaWR1YWxzLCBkaWFnbm9zdGljcywgSFBDKToKICAgICAgICBzdXBlcihBYnN0cmFjdEJhc2VQbG90LCBzZWxmKS5fX2luaXRfXygpCgogICAgICAgIHNlbGYucGxvdF9kaWN0ID0gZGljdCgpCiAgICAgICAgc2VsZi5wbG90X2RpY3RbJ25DaGFubmVscyddICAgPSBuQ2hhbm5lbHMKICAgICAgICBzZWxmLnBsb3RfZGljdFsncmVzaWR1YWxzJ10gICA9IHJlc2lkdWFscwogICAgICAgIHNlbGYucGxvdF9kaWN0WydkaWFnbm9zdGljcyddID0gZGlhZ25vc3RpY3MKCiAgICAgICAgaWYgbkNoYW5uZWxzID09IDE6CiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0WydoZWlnaHRzJ10gPSBbM10KICAgICAgICAgICAgaWYgcmVzaWR1YWxzOgogICAgICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ2hlaWdodHMnXSArPSBbMV0KICAgICAgICAgICAgaWYgZGlhZ25vc3RpY3M6CiAgICAgICAgICAgICAgICBzZWxmLnBsb3RfZGljdFsnaGVpZ2h0cyddICs9IFsxLCAxXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0WydoZWlnaHRzJ10gPSBbNV0KICAgICAgICAgICAgaWYgcmVzaWR1YWxzOgogICAgICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ2hlaWdodHMnXSArPSBbMSBmb3IgaSBpbiByYW5nZShuQ2hhbm5lbHMpXQoKICAgICAgICBpZiBwbG90X3R5cGUgPT0gJ3ByZXNlbnRhdGlvbic6CiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0WydwX3R5cGUnXSAgICA9ICdwcmVzZW50YXRpb24nCiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0Wyd3aWR0aCddICAgICA9IDgKICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ2xpbmV3aWR0aCddID0gMS4wCiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0Wydmb250X3NpemUnXSA9IDIyCiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0WydoZWlnaHRzJ10gICs9IFsxXSAjIGJhc2VkIG9mZiBmb250IHNpemUKICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ25fYXhlcyddICAgID0gbGVuKHNlbGYucGxvdF9kaWN0WydoZWlnaHRzJ10pCiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0WydleHQnXSAgICAgICA9ICdwbmcnCgogICAgICAgIGVsaWYgcGxvdF90eXBlID09ICdkb2NzJzoKICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ3BfdHlwZSddICAgID0gJ2RvY3MnCiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0Wyd3aWR0aCddICAgICA9IDQKICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ2xpbmV3aWR0aCddID0gMC42CiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0Wydmb250X3NpemUnXSA9IDkKICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ2hlaWdodHMnXSAgKz0gWzAuOF0gIyBiYXNlZCBvZmYgZm9udCBzaXplCiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0WyduX2F4ZXMnXSAgICA9IGxlbihzZWxmLnBsb3RfZGljdFsnaGVpZ2h0cyddKQogICAgICAgICAgICBzZWxmLnBsb3RfZGljdFsnZXh0J10gICAgICAgPSAncG5nJwoKICAgICAgICBlbGlmIHBsb3RfdHlwZSA9PSAncGFwZXJfb25lX2NvbCc6CiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0WydwX3R5cGUnXSAgICA9ICdwYXBlcl9vbmVfY29sJwogICAgICAgICAgICBzZWxmLnBsb3RfZGljdFsnd2lkdGgnXSAgICAgPSAzLjU0CiAgICAgICAgICAgICMgc2VsZi5wbG90X2RpY3RbJ3dpZHRoJ10gICAgID0gMy4zMjEKICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ2xpbmV3aWR0aCddID0gMC40CiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0Wydmb250X3NpemUnXSA9IDgKICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ2hlaWdodHMnXSAgKz0gWzAuNl0gIyBiYXNlZCBvZmYgZm9udCBzaXplCiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0WyduX2F4ZXMnXSAgICA9IGxlbihzZWxmLnBsb3RfZGljdFsnaGVpZ2h0cyddKQogICAgICAgICAgICBzZWxmLnBsb3RfZGljdFsnZXh0J10gICAgICAgPSAncGRmJwoKCiAgICAgICAgZWxpZiBwbG90X3R5cGUgPT0gJ3BhcGVyX3R3b19jb2wnOgogICAgICAgICAgICBzZWxmLnBsb3RfZGljdFsncF90eXBlJ10gICAgPSAncGFwZXJfdHdvX2NvbCcKICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ3dpZHRoJ10gICAgID0gNy4yNQogICAgICAgICAgICBzZWxmLnBsb3RfZGljdFsnbGluZXdpZHRoJ10gPSAwLjQKICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ2ZvbnRfc2l6ZSddID0gOAogICAgICAgICAgICBzZWxmLnBsb3RfZGljdFsnaGVpZ2h0cyddICArPSBbMC42XSAjIGJhc2VkIG9mZiBmb250IHNpemUKICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ25fYXhlcyddICAgID0gbGVuKHNlbGYucGxvdF9kaWN0WydoZWlnaHRzJ10pCiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0WydleHQnXSAgICAgICA9ICdwZGYnCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgogICAgICAgIGVsaWYgcGxvdF90eXBlID09ICd0aGVzaXMnOgogICAgICAgICAgICBwcmludCgiTm90IHlldCBpbXBsZW1lbnRlZCwgdHJ5ICdwYXBlcl90d29fY29sJy4iKQo8fGZpbV9lbmR8Pg=="]
["1964c9514bb49065f6d8cd2bd9fa296c0b19084b-4","1964c9514bb49065f6d8cd2bd9fa296c0b19084b","PHxmaW1fcHJlZml4fD4KY2xhc3MgQWJzdHJhY3RCYXNlUGxvdChvYmplY3QpOgogICAgIiIiIEFic3JhY3RzIHNldHRpbmdzIGZvciBwbG90cyBmb3IgcHJlc2VudGF0aW9ucywgcGFwZXJzLCBldGMuICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwbG90X3R5cGUsIG5DaGFubmVscywgcmVzaWR1YWxzLCBkaWFnbm9zdGljcywgSFBDKToKICAgICAgICBzdXBlcihBYnN0cmFjdEJhc2VQbG90LCBzZWxmKS5fX2luaXRfXygpCgogICAgICAgIHNlbGYucGxvdF9kaWN0ID0gZGljdCgpCiAgICAgICAgc2VsZi5wbG90X2RpY3RbJ25DaGFubmVscyddICAgPSBuQ2hhbm5lbHMKICAgICAgICBzZWxmLnBsb3RfZGljdFsncmVzaWR1YWxzJ10gICA9IHJlc2lkdWFscwogICAgICAgIHNlbGYucGxvdF9kaWN0WydkaWFnbm9zdGljcyddID0gZGlhZ25vc3RpY3MKCiAgICAgICAgaWYgbkNoYW5uZWxzID09IDE6CiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0WydoZWlnaHRzJ10gPSBbM10KICAgICAgICAgICAgaWYgcmVzaWR1YWxzOgogICAgICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ2hlaWdodHMnXSArPSBbMV0KICAgICAgICAgICAgaWYgZGlhZ25vc3RpY3M6CiAgICAgICAgICAgICAgICBzZWxmLnBsb3RfZGljdFsnaGVpZ2h0cyddICs9IFsxLCAxXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0WydoZWlnaHRzJ10gPSBbNV0KICAgICAgICAgICAgaWYgcmVzaWR1YWxzOgogICAgICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ2hlaWdodHMnXSArPSBbMSBmb3IgaSBpbiByYW5nZShuQ2hhbm5lbHMpXQoKICAgICAgICBpZiBwbG90X3R5cGUgPT0gJ3ByZXNlbnRhdGlvbic6CiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0WydwX3R5cGUnXSAgICA9ICdwcmVzZW50YXRpb24nCiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0Wyd3aWR0aCddICAgICA9IDgKICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ2xpbmV3aWR0aCddID0gMS4wCiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0Wydmb250X3NpemUnXSA9IDIyCiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0WydoZWlnaHRzJ10gICs9IFsxXSAjIGJhc2VkIG9mZiBmb250IHNpemUKICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ25fYXhlcyddICAgID0gbGVuKHNlbGYucGxvdF9kaWN0WydoZWlnaHRzJ10pCiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0WydleHQnXSAgICAgICA9ICdwbmcnCgogICAgICAgIGVsaWYgcGxvdF90eXBlID09ICdkb2NzJzoKICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ3BfdHlwZSddICAgID0gJ2RvY3MnCiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0Wyd3aWR0aCddICAgICA9IDQKICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ2xpbmV3aWR0aCddID0gMC42CiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0Wydmb250X3NpemUnXSA9IDkKICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ2hlaWdodHMnXSAgKz0gWzAuOF0gIyBiYXNlZCBvZmYgZm9udCBzaXplCiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0WyduX2F4ZXMnXSAgICA9IGxlbihzZWxmLnBsb3RfZGljdFsnaGVpZ2h0cyddKQogICAgICAgICAgICBzZWxmLnBsb3RfZGljdFsnZXh0J10gICAgICAgPSAncG5nJwo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgIyBzZWxmLnBsb3RfZGljdFsnd2lkdGgnXSAgICAgPSAzLjMyMQogICAgICAgICAgICBzZWxmLnBsb3RfZGljdFsnbGluZXdpZHRoJ10gPSAwLjQKICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ2ZvbnRfc2l6ZSddID0gOAogICAgICAgICAgICBzZWxmLnBsb3RfZGljdFsnaGVpZ2h0cyddICArPSBbMC42XSAjIGJhc2VkIG9mZiBmb250IHNpemUKICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ25fYXhlcyddICAgID0gbGVuKHNlbGYucGxvdF9kaWN0WydoZWlnaHRzJ10pCiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0WydleHQnXSAgICAgICA9ICdwZGYnCgoKICAgICAgICBlbGlmIHBsb3RfdHlwZSA9PSAncGFwZXJfdHdvX2NvbCc6CiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0WydwX3R5cGUnXSAgICA9ICdwYXBlcl90d29fY29sJwogICAgICAgICAgICBzZWxmLnBsb3RfZGljdFsnd2lkdGgnXSAgICAgPSA3LjI1CiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0WydsaW5ld2lkdGgnXSA9IDAuNAogICAgICAgICAgICBzZWxmLnBsb3RfZGljdFsnZm9udF9zaXplJ10gPSA4CiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0WydoZWlnaHRzJ10gICs9IFswLjZdICMgYmFzZWQgb2ZmIGZvbnQgc2l6ZQogICAgICAgICAgICBzZWxmLnBsb3RfZGljdFsnbl9heGVzJ10gICAgPSBsZW4oc2VsZi5wbG90X2RpY3RbJ2hlaWdodHMnXSkKICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ2V4dCddICAgICAgID0gJ3BkZicKCgogICAgICAgIGVsaWYgcGxvdF90eXBlID09ICd0aGVzaXMnOgogICAgICAgICAgICBwcmludCgiTm90IHlldCBpbXBsZW1lbnRlZCwgdHJ5ICdwYXBlcl90d29fY29sJy4iKQogICAgICAgICAgICBzZWxmLnBsb3RfZGljdFsnZXh0J10gICAgICAgPSAncGRmJwoKCiAgICAgICAgZWxpZiBwbG90X3R5cGUgPT0gJ2FuaW1hdGlvbic6CiAgICAgICAgICAgIHByaW50KCJOb3QgeWV0IGltcGxlbWVudGVkLCB0cnkgJ3ByZXNlbnRhdGlvbicuIikKICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ2V4dCddICAgICAgID0gJ3BuZycKCgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50KCdQbGVhc2Ugc3BlY2lmeSB0aGUgcHVycG9zZSBvZiB0aGlzIHBsb3QnKQoKICAgICAgICBpZiBub3QgSFBDOgogICAgICAgICAgICBmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHJjCiAgICAgICAgICAgIHJjKCdmb250JywgKip7J2ZhbWlseSc6ICdEZWphVnUgU2FucycsCiAgICAgICAgICAgICdzZXJpZic6IFsnQ29tcHV0ZXIgTW9kZXJuJ10sJ3NpemUnOiBzZWxmLnBsb3RfZGljdFsnZm9udF9zaXplJ119KQogICAgICAgICAgICByYygndGV4dCcsIHVzZXRleD1UcnVlKQogICAgICAgICAgICByYygndGV4dC5sYXRleCcsCiAgICAgICAgICAgIHByZWFtYmxlPXInXHVzZXBhY2thZ2V7YW1zbWF0aH1cdXNlcGFja2FnZXthbXNzeW1ifVx1c2VwYWNrYWdle2Ftc2ZvbnRzfScpCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgIGVsaWYgcGxvdF90eXBlID09ICdwYXBlcl9vbmVfY29sJzoKICAgICAgICAgICAgc2VsZi5wbG90X2RpY3RbJ3BfdHlwZSddICAgID0gJ3BhcGVyX29uZV9jb2wnCiAgICAgICAgICAgIHNlbGYucGxvdF9kaWN0Wyd3aWR0aCddICAgICA9IDMuNTQKPHxmaW1fZW5kfD4="]
["279eb01b83e4980782180a04aa4cfc4fbeedddf0-3","279eb01b83e4980782180a04aa4cfc4fbeedddf0","PHxmaW1fcHJlZml4fD4KcyA9IGlucHV0KCkKCgpkZWYgY2hlY2sobCwgcik6Cjx8ZmltX2hvbGV8PgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgIHJldHVybiBUcnVlCgoKYW5zID0gVHJ1ZQpsLCByID0gMCwgbGVuKHMpIC0gMQp3aGlsZSBsIDwgcjoKICAgIGlmIHNbbF0gPT0gc1tyXToKICAgICAgICBsLCByID0gbCArIDEsIHIgLSAxCiAgICBlbHNlOgogICAgICAgIGlmIGNoZWNrKGwgKyAxLCByKSBvciBjaGVjayhsLCByIC0gMSk6CiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgZWxzZToKICAgICAgICAgICAgYW5zID0gRmFsc2UKICAgICAgICAgICAgYnJlYWsKCnByaW50KCd0cnVlJyBpZiBhbnMgZWxzZSAnZmFsc2UnKQo8fGZpbV9zdWZmaXh8PgogICAgd2hpbGUgbCA8IHI6CiAgICAgICAgaWYgc1tsXSA9PSBzW3JdOgogICAgICAgICAgICBsLCByID0gbCArIDEsIHIgLSAxCiAgICAgICAgZWxzZToKPHxmaW1fZW5kfD4="]
["27b357eb0342fe1ce7fa8a96440e8fea866f5aab-3","27b357eb0342fe1ce7fa8a96440e8fea866f5aab",{"$cut":{"chars":20220,"head":"PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCgpAYXV0aG9yOiBMZW8gTWVkaW5hCiIiIgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBzeXMKaW1wb3J0IG9zCiMgZm9sZGVycy4uLgp0aGlzX2ZpbGVfcGF0aCA9IHN0cihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpKQpzeXMucGF0aC5hcHBlbmQoc3RyKHRoaXNfZmlsZV9wYXRoICsgJy8uLi9TQUNfbmV0d29yaycpKQppbXBvcnQgU0FDbmV0d29yayBhcyBzCmltcG9ydCBpb2RlZiBhcyBpbwoKIyBTdGltdWx1cyBwYXJhbWV0ZXJzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwp0X2luZiA9IHMudF9lcwpzdGltdWx1c190eXBlID0gImJhciIKc3RpbV9wYXJhbSA9IHsnYmFyX3NwZWVkJzogMSwgICAgICAjIHN0aW0gc3BlZWQgW3VtL21zXQogICAgICAgICAgICAgICdiYXJfd2lkdGgnOiA0MDAsICAgICAjIHN0aW11bGkgd2lkdGggW3VtXQogICAgICAgICAgICAgICdiYXJfeF9pbml0JzogMCwgICAgICMgYmFyIGluaXRpYWwgcG9zaXRpb24gW3VtXQogICAgICAgICAgICAgICdiYXJfYW5nbGUnOiAwfSAgICAgICMgYW5nbGUgb2Ygbm9ybWFsIHcvciB0byB4LWF4aXMKCiMgU2ltdWxhdGlvbiBwYXJhbWV0ZXJzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKc2FtcGludmwgPSAwLjEKCiMgQlAgcGFyYW1ldGVycyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKc3luYXBzZV90eXBlID0gIkJQZXhjIgpleGNHbWF4ID0gMWUtNApleGNHbWluID0gMApTQUNfZXhjR21heCA9IDFlLTQKdGF1ID0gKDIsIDEwKSAgIyByaXNlIGFuZCBkZWNheSB0aW1lcwoKIyBHYWJhZXJnaWMgZnVuY3Rpb24gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwprMSA9IDIKazIgPSAwLjgKdGgxID0gLTQwCnRoMiA9IDAuOAplX3JldiA9IC03NQpnYWJhR21pbiA9IDAgICMgMC4wMDA1CmdhYmFHbWF4ID0gMWUtMyAgIyAwLjgKcHJlZl9kZW5kID0gMCAgIyBTQUMgZGVuZHJpdGUgIyBmb3IgZGlyZWN0aW9uIHNlbGVjdGl2aXR5Cm51bGxfZGVuZCA9IDIgICMgU0FDIGRlbmRyaXRlICMgZm9yIGRpcmVjdGlvbiBzZWxlY3Rpdml0eQpyZWxlYXNlX3NlZyA9IDAuOTUgICMgWzAsMV0gYXMgaW4gTkVVUk9OIGNvbnZlbnRpb247IG5lYXIgMSBmb3IgdGlwCmlzX3N5bW1ldHJpYyA9IEZhbHNlICAjIFRydWU6QWxsIFNBQyBkZW5kcml0ZSB0byBEU0dDLiBGYWxzZTpPbmx5IHByZWZlcnJlZAoKIyBHYW5nbGlvbiBjZWxsIHBhcmFtZXRlcnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkc2djX3R5cGUgPSAnRFNHQzInCmRzZ2NfcmFkID0gMTAwCmRzZ2NfeCA9IDMwMCAgIyAyMDAKZHNnY195ID0gMjUwICAjIDEyMApkc2djX25kZW5kID0gNAoKIyBORVVST04gcGFyYW1ldGVycyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwp0c3RvcCA9IDEwMDAgICMgc2ltIHRpbWUKdl9pbml0ID0gLTc1CnZfaW5pdF9heG9uID0gLTgwClNBQ192X2luaXQgPSAtNjAgICMgaW5pdGlhbCBtZW1icmFuZSB2b2x0YWdlIG9mIERTR0MKcy5oLmN2b2RlLmF0b2woMWUtMykKCmlmIG9zLnBhdGguZXhpc3RzKCcuL0RTR0MtU0FDLmpzb24nKToKICAgIGlvLmxvYWRfcGFyYW1zX2pzb24oJy4vRFNHQy1TQUMuanNvbicsIGdsb2JhbHMoKSkKCiMgSW5pdGlhbGl6ZSBEU0dDCmlmIG9zLmdldGN3ZCgpICE9IHRoaXNfZmlsZV9wYXRoOiAgIyBpZiBzYW1lLCBsb2FkZWQgYXQgaW1wb3J0aW5nIGgKICAgIHMubG9hZF9tZWNoYW5pc21zKHRoaXNfZmlsZV9wYXRoKSAgIyBsb2FkIGFkZGl0aW9uYWwgbWVjaGFuaXNtcwppZiBkc2djX3R5cGUgPT0gJ0RTR0MnOgogICAgcy5oLmxvYWRfZmlsZShzdHIodGhpc19maWxlX3BhdGggKyAnL0RTR0MuaG9jJykpCjx8ZmltX2hvbGV8PgppZiBkc2djX3R5cGUgPT0gJ0RTR0MyJzoKICAgIHMuaC5sb2FkX2ZpbGUoc3RyKHRoaXNfZmlsZV9wYXRoICsgJy9EU0dDMi5ob2MnKSkKICAgIGRzY2VsbCA9IHMuaC5EU0dDMihkc2djX3JhZCwgZHNnY194LCBkc2djX3ksIDMsIDEuNSkKZWxpZiBkc2djX3R5cGUgPT0gJ0RTR0NfUG9sZWcnOgogICAgcy5oLmxvYWRfZmlsZShzdHIodGhpc19maWxlX3BhdGggKyAnL1JHQ21vZGVsLmhvYycpKQogICAgZHNjZWxsID0gcy5oLkRTR0NfUG9sZWcoZHNnY194LCBkc2djX3ksIDApCmRzY2VsbC5zZXR2KHZfaW5pdCwgdl9pbml0LCB2X2luaXRfYXhvbikgICMgc2V0IGluaXRpYWwgdm90YWdlCgojIEJQIGNlbGwgLSBEU0dDIHN5bmFwc2VzCmdCUHN5biA9IFtdCgojIFNBQyAtIERTR0Mgc3luYXBzZXMKZ1NBQ3N5biA9IFtdCgojIFJlY29yZGluZyB2ZWN0b3JzCnRpbWV2ZWMgPSBzLmguVmVjdG9yKCkKdGltZXZlYy5mcm9tX3B5dGhvbihucC5hcmFuZ2UoMCwgdHN0b3AsIHNhbXBpbnZsKSkKdGltZXJlYyA9IHMuaC5WZWN0b3IoKQp0aW1lcmVjLnJlY29yZChzLmguX3JlZl90LCB0aW1ldmVjKQoKaWYgZHNnY190eXBlIGluICgnRFNHQycsICdEU0dDMicpOgogICAgZHNnY1YgPSBbcy5oLlZlY3Rvcih0c3RvcCAvIHNhbXBpbnZsKSBmb3IgaSBpbiByYW5nZSg3KV0KICAgIGRzZ2NWWzBdLnJlY29yZChkc2NlbGwuZGVuZDFbMF0oMC41KS5fcmVmX3YsIHRpbWV2ZWMpCiAgICBkc2djVlsxXS5yZWNvcmQoZHNjZWxsLmRlbmQxWzJdKDAuNSkuX3JlZl92LCB0aW1ldmVjKQogICAgZHNnY1ZbMl0ucmVjb3JkKGRzY2VsbC5kZW5kMVs0XSgwLjUpLl9yZWZfdiwgdGltZXZlYykKICAgIGRzZ2NWWzNdLnJlY29yZChkc2NlbGwuZGVuZDFbNl0oMC41KS5fcmVmX3YsIHRpbWV2ZWMpCiAgICBkc2djVls0XS5yZWNvcmQoZHNjZWxsLnNv"}}]
["279421ea0a273a50584711d75ca30032723900f8-1","279421ea0a273a50584711d75ca30032723900f8","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCkNyZWF0ZWQgb24gU3VuIERlYyAxMiAwMjozMjozMSAyMDIxCgpAYXV0aG9yOiBtYW91dAoiIiIKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmltcG9ydCBvcy5wYXRoIGFzIG9wCmltcG9ydCBEZXRlcm1pbmlzdGljUGFydGljbGVGbG93Q29udHJvbCBhcyBkcGZjCmRhdGFfcGF0aCA9IG9wLmpvaW4oZHBmYy5fX3BhdGhfX1swXSwgJ2RhdGEnKQo8fGZpbV9lbmR8Pg=="]
["b57e043337e6706bd71281d5f1833de46533f652-5","b57e043337e6706bd71281d5f1833de46533f652","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFzayBpbXBvcnQgRmxhc2ssIHJlcXVlc3QKZnJvbSBkcml2ZXIgaW1wb3J0ICoKaW1wb3J0IHRpbWUKZnJvbSBza2xlYXJuLmxpbmVhcl9tb2RlbCBpbXBvcnQgTGluZWFyUmVncmVzc2lvbgppbXBvcnQgc3lzCgphcHAgPSBGbGFzayhfX25hbWVfXykKCgpAYXBwLnJvdXRlKCcvc2NvcmUnLCBtZXRob2RzID0gWydHRVQnXSkKZGVmIHNjb3JlUlJTKCk6CiAgICAiIiIgRW5kcG9pbnQgZm9yIHNjb3JpbmcKICAgICIiIgogICAgc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgcmVzcG9uc2UgPSBydW4oKQogICAgZW5kID0gdGltZS50aW1lKCkgLSBzdGFydAogICAgcmV0dXJuIHJlc3BvbnNlCgoKQGFwcC5yb3V0ZSgiLyIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIGhlYWx0aHkoKToKICAgIHJldHVybiAiU3lzdGVtIGlzIEhlYWx0aHkiCgoKPHxmaW1fZW5kfD4="]
["27c5d663180418a8a524510b73cf79263a28b313-1","27c5d663180418a8a524510b73cf79263a28b313","PHxmaW1fcHJlZml4fD4KIiIiCkdlbmVyYXRlIHZpc3VhbGl6YXRpb24gZG9lcyBmb2xsb3dpbmc6CjEuIFByaW50cyB0aGUgbW9kZWwgZ3JhcGggd2l0aCBOZXRyb24gbGlicmFyeQogICAgLT4gZnJvbSBtb2RlbAogICAgLT4gZnJvbSBjaGVja3BvaW50ICh3aXRoIGJhY2twcm9wIG5vZGVzKQoyLiBQbG90cyB0aGUgdHJhaW5pbmcgZ3JhcGhzCjMuIFRPRE86IE1vcmUgdmlzdWFsaXphdGlvbiBmcm9tIHRlbnNvcmJvYXJkCiIiIgoKaW1wb3J0IG5ldHJvbgppbXBvcnQgdGVuc29yZmxvdyBhcyB0ZgppbXBvcnQgb3MKaW1wb3J0IGltcG9ydGxpYgoKZGVmIGdldF9tb2RlbChtb2RlbF92ZXJzaW9uLCBwYXJhbV92ZXJzaW9uLCBwcm9qZWN0X3BhdGgpOgogICAgaW1wb3J0IGh5cGVycGFyYW1ldGVyLmh5cGVycGFyYW1ldGVyIGFzIGhwCiAgICBocF9vYmogPSBocC5IeXBlclBhcmFtZXRlcnMocGFyYW1fdmVyc2lvbiwgcHJvamVjdF9wYXRoKQogICAgcGFyYW1fZGljdCA9IGhwX29iai5nZXRfcGFyYW1zKCkKICAgIG1vZGVsX21vZHVsZV9wYXRoID0gImFyY2hpdGVjdHVyZS52ZXJzaW9uIiArIHN0cihtb2RlbF92ZXJzaW9uKSArICIubW9kZWwiCiAgICBtb2RlbF9tb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShtb2RlbF9tb2R1bGVfcGF0aCkKICAgIGlucHV0cyA9IHRmLnBsYWNlaG9sZGVyKHRmLmZsb2F0MzIsIHNoYXBlID0gKDEsIDIyNCwgMjI0LCAzKSkKICAgIG1vZGVsID0gbW9kZWxfbW9kdWxlLmNyZWF0ZV9tb2RlbChpbnB1dHMsIHBhcmFtX2RpY3QpCiAgICByZXR1cm4gbW9kZWwKCmRlZiBleGVjdXRlKGFyZ3MpOgogICAgcHJvamVjdF9wYXRoID0gb3MuZ2V0Y3dkKCkKICAgICNtb2RlbCA9IGdldF9tb2RlbChhcmdzLm1vZGVsLCBhcmdzLnBhcmFtLCBwcm9qZWN0X3BhdGgpCiAgICAjc2VzcyA9IHRmLlNlc3Npb24oKQogICAgI3RmLnRyYWluLndyaXRlX2dyYXBoKHNlc3MuZ3JhcGhfZGVmLCBwcm9qZWN0X3BhdGggKyAiL2RlYnVnIiwgJ21vZGVsLnBidHh0JykKICAgICNuZXRyb24uc3RhcnQocHJvamVjdF9wYXRoKyIvZGVidWcvbW9kZWwucGJ0eHQiKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICB0ZmxpdGVfcGF0aCA9IHByb2plY3RfcGF0aCArICIvcmVzdWx0L21vZGVsXyIgKyBzdHIoYXJncy5tb2RlbCkgKyBcCiAgICAgICAgICAgICAgICAiXyIgKyBzdHIoYXJncy5wYXJhbSkgKyAiXyIgKyBhcmdzLmRhdGFzZXQKICAgIG5ldHJvbi5zdGFydCh0ZmxpdGVfcGF0aCsiL21vZGVsX3RmbGl0ZS50ZmxpdGUiKQo8fGZpbV9lbmR8Pg=="]
["1967561928df89d11040d808dd934c4bebff4b86-1","1967561928df89d11040d808dd934c4bebff4b86","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IHB5dGVzdAoKZnJvbSBweWNyZWRzIGltcG9ydCAoCiAgICBkZWxldGVfcGFzc3dvcmQsCiAgICBmaW5kX2NyZWRlbnRpYWxzLAogICAgZmluZF9wYXNzd29yZCwKICAgIGdldF9wYXNzd29yZCwKICAgIHNldF9wYXNzd29yZCwKKQoKCmRlZiB0ZXN0X3NldF9wYXNzd29yZCgpOgogICAgZXhwZWN0ZWRfcGFzc3dvcmQgPSAic2VjcmV0IgogICAgc3RhdHVzID0gc2V0X3Bhc3N3b3JkKCJmb28iLCAiYmFyIiwgZXhwZWN0ZWRfcGFzc3dvcmQpCiAgICBhc3NlcnQgc3RhdHVzCiAgICBwYXNzd29yZCA9IGdldF9wYXNzd29yZCgiZm9vIiwgImJhciIpCiAgICBhc3NlcnQgcGFzc3dvcmQgPT0gZXhwZWN0ZWRfcGFzc3dvcmQKCgo8fGZpbV9ob2xlfD4KICAgIHN0YXR1cyA9IHNldF9wYXNzd29yZCgiZm9vIiwgImJhciIsIGV4cGVjdGVkX3Bhc3N3b3JkKQogICAgYXNzZXJ0IHN0YXR1cwogICAgcGFzc3dvcmQgPSBnZXRfcGFzc3dvcmQoImZvbyIsICJiYXIiKQogICAgYXNzZXJ0IHBhc3N3b3JkID09IGV4cGVjdGVkX3Bhc3N3b3JkCgoKZGVmIHRlc3RfZGVsZXRlX3Bhc3N3b3JkKCk6CiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgZGVsZXRlX3Bhc3N3b3JkKCJmb28iLCAiYmFyIikKICAgIGV4cGVjdGVkX3Bhc3N3b3JkID0gInNlY3JldCIKICAgIHN0YXR1cyA9IHNldF9wYXNzd29yZCgiZm9vIiwgImJhciIsIGV4cGVjdGVkX3Bhc3N3b3JkKQogICAgYXNzZXJ0IHN0YXR1cwogICAgc3RhdHVzID0gZGVsZXRlX3Bhc3N3b3JkKCJmb28iLCAiYmFyIikKICAgIGFzc2VydCBzdGF0dXMKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICBnZXRfcGFzc3dvcmQoImZvbyIsICJiYXIiKQoKCmRlZiB0ZXN0X2ZpbmRfcGFzc3dvcmQoKToKICAgIHBhc3N3b3JkID0gZmluZF9wYXNzd29yZCgibm90IGZvdW5kIikKICAgIGFzc2VydCBwYXNzd29yZCBpcyBOb25lCiAgICBleHBlY3RlZF9wYXNzd29yZCA9ICJzZWNyZXQiCiAgICBzdGF0dXMgPSBzZXRfcGFzc3dvcmQoImZvbyIsICJiYXIiLCBleHBlY3RlZF9wYXNzd29yZCkKICAgIGFzc2VydCBzdGF0dXMKICAgIHBhc3N3b3JkID0gZmluZF9wYXNzd29yZCgiZm9vIikKICAgIGFzc2VydCBwYXNzd29yZCA9PSAic2VjcmV0IgoKCmRlZiB0ZXN0X2ZpbmRfY3JlZGVudGlhbHMoKToKICAgIGNyZWRlbnRpYWxzID0gZmluZF9jcmVkZW50aWFscygibm90IGZvdW5kIikKICAgIGFzc2VydCBjcmVkZW50aWFscyA9PSBbXQogICAgZXhwZWN0ZWRfY3JlZGVudGlhbHMgPSB7ImFjY291bnQiOiAiYmFyIiwgInBhc3N3b3JkIjogInNlY3JldCJ9CiAgICBzZXRfcGFzc3dvcmQoImZvbyIsICJiYXIiLCAic2VjcmV0IikKICAgIGNyZWRlbnRpYWxzID0gZmluZF9jcmVkZW50aWFscygiZm9vIikKICAgIGFzc2VydCBleHBlY3RlZF9jcmVkZW50aWFscyBpbiBjcmVkZW50aWFscwo8fGZpbV9zdWZmaXh8PgpkZWYgdGVzdF9nZXRfcGFzc3dvcmQoKToKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICBnZXRfcGFzc3dvcmQoImZvbyIsICJiYXIiKQogICAgZXhwZWN0ZWRfcGFzc3dvcmQgPSAic2VjcmV0Igo8fGZpbV9lbmR8Pg=="]
["a5d16015b3b4318f22748be11ba13ff5ce8a8a5e-3","a5d16015b3b4318f22748be11ba13ff5ce8a8a5e","PHxmaW1fcHJlZml4fD4KZnJvbSBjb3JlLmNvbmZpZyBpbXBvcnQgU2V0dGluZ3MKZnJvbSBjb3JlLnByb3ZpZGVycy5hd3MgaW1wb3J0IEJhc2VBY3Rpb24KZnJvbSBjb3JlLmxvZyBpbXBvcnQgU3lzTG9nCmZyb20gY29yZSBpbXBvcnQgY29uc3RhbnRzIGFzIEsKZnJvbSBjb3JlLnRlcnJhZm9ybSBpbXBvcnQgUHlUZXJyYWZvcm0KZnJvbSBjb3JlLnRlcnJhZm9ybS51dGlscyBpbXBvcnQgZ2V0X3RlcnJhZm9ybV9zY3JpcHRzX2FuZF9maWxlc19kaXIKZnJvbSB0aW1lIGltcG9ydCBzbGVlcApmcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgY29weV90cmVlCmZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKZnJvbSBjb3JlLnV0aWxzIGltcG9ydCBleGlzdHNfdGVyYWZvcm1fbG9jawppbXBvcnQgaW1wb3J0bGliCmltcG9ydCBsb2dnaW5nCmltcG9ydCBvcwppbXBvcnQgc3lzCgoKY2xhc3MgSW5zdGFsbChCYXNlQWN0aW9uKToKICAgIEZPTERFUl9FWElTVFNfRVJST1JfTk8gPSAxNwogICAgZXhlY3V0ZWRfd2l0aF9lcnJvciA9IEZhbHNlCiAgICBpbnN0YWxsX3N0YXR1c2VzID0gewogICAgICAgICJ0Zl9pbml0X3N0YXJ0IjogMSwKICAgICAgICAidGZfaW5pdF9jb21wbGV0ZSI6IDIsCiAgICAgICAgInRmX3BsYW5fc3RhcnQiOiAzLAogICAgICAgICJ0Zl9wbGFuX2NvbXBsZXRlIjogNCwKICAgICAgICAidGZfYXBwbHlfc3RhcnQiOiA1LAogICAgICAgICJ0Zl9hcHBseV9jb21wbGV0ZSI6IDYsCiAgICAgICAgImV4ZWN1dGlvbl9maW5pc2hlZCI6IDEwCiAgICB9CiAgICBjdXJyZW50X2luc3RhbGxfc3RhdHVzID0gMQogICAgdGVycmFmb3JtX291dHB1dHMgPSB7fQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzLCBpbnB1dF9vYmosIGNoZWNrX2RlcGVuZGVudF9yZXNvdXJjZXM9VHJ1ZSk6CiAgICAgICAgc2VsZi5hcmdzID0gYXJncwogICAgICAgIHNlbGYuY2hlY2tfZGVwZW5kZW50X3Jlc291cmNlcyA9IGNoZWNrX2RlcGVuZGVudF9yZXNvdXJjZXMKICAgICAgICBzdXBlcigpLl9faW5pdF9fKGlucHV0X29iaikKICAgICAgICBsb2dnaW5nLmRpc2FibGUobG9nZ2luZy5FUlJPUikgICMgVG8gZGlzYWJsZSBweXRob24gdGVycmFmb3JtIHVud2FudGVkIHdhcm5pbmdzCgogICAgZGVmIGV4ZWN1dGUoc2VsZiwgcmVzb3VyY2VzLCB0ZXJyYWZvcm1fd2l0aF90YXJnZXRzLCBkcnlfcnVuKToKICAgICAgICBlcnJvcl9yZXNwb25zZSA9IHNlbGYudmFsaWRhdGVfYXJndW1lbnRzKHJlc291cmNlcywgdGVycmFmb3JtX3dpdGhfdGFyZ2V0cykKICAgICAgICBpZiBlcnJvcl9yZXNwb25zZToKICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXhpdF93aXRoX3ZhbGlkYXRpb25fZXJyb3JzKGVycm9yX3Jlc3BvbnNlKQoKICAgICAgICBpZiBzZWxmLnZhbGlkYXRlX3Jlc291cmNlcyhyZXNvdXJjZXMpOgogICAgICAgICAgICBzZWxmLmdlbmVyYXRlX3RlcnJhZm9ybV9maWxlcyhyZXNvdXJjZXMsIHRlcnJhZm9ybV93aXRoX3RhcmdldHMpCiAgICAgICAgICAgIHNlbGYucnVuX3RmX2V4ZWN1dGlvbl9hbmRfc3RhdHVzX3RocmVhZHMocmVzb3VyY2VzLCB0ZXJyYWZvcm1fd2l0aF90YXJnZXRzLCBkcnlfcnVuKQoKICAgICAgICAgICAgaWYgbm90IHNlbGYuZXhlY3V0ZWRfd2l0aF9lcnJvcjoKICAgICAgICAgICAgICAgIHNlbGYucmVuZGVyX3Jlc291cmNlX291dHB1dHMocmVzb3VyY2VzKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5leGNlcHRpb24KCiAgICBkZWYgcnVuX3RmX2V4ZWN1dGlvbl9hbmRfc3RhdHVzX3RocmVhZHMoc2VsZiwgcmVzb3VyY2VzLCB0ZXJyYWZvcm1fd2l0aF90YXJnZXRzLCBkcnlfcnVuKToKICAgICAgICB0aHJlYWQxID0gVGhyZWFkKHRhcmdldD1zZWxmLmV4ZWN1dGVfdGVycmFmb3JtLCBhcmdzPShsaXN0KHJlc291cmNlcyksIHRlcnJhZm9ybV93aXRoX3RhcmdldHMsIGRyeV9ydW4pKQogICAgICAgIHRocmVhZDIgPSBUaHJlYWQodGFyZ2V0PXNlbGYuc2hvd19wcm9ncmVzc19zdGF0dXMsIGFyZ3M9KGxpc3QocmVzb3VyY2VzKSwgdGVycmFmb3JtX3dpdGhfdGFyZ2V0cywgZHJ5X3J1bikpCgogICAgICAgIHRocmVhZDEuc3RhcnQoKQogICAgICAgIHRocmVhZDIuc3RhcnQoKQoKICAgICAgICB0aHJlYWQxLmpvaW4oKQogICAgICAgIHRocmVhZDIuam9pbigpCgogICAgZGVmIGV4ZWN1dGVfdGVycmFmb3JtKHNlbGYsIHJlc291cmNlcywgdGVycmFmb3JtX3dpdGhfdGFyZ2V0cywgZHJ5X3J1bik6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLnRlcnJhZm9ybV9hcHBseShyZXNvdXJjZXMsIHRlcnJhZm9ybV93aXRoX3RhcmdldHMsIGRyeV9ydW4pCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBzZWxmLmV4ZWN1dGVkX3dpdGhfZXJyb3IgPSBUcnVlCiAgICAgICAgICAgIHNlbGYuZXhjZXB0aW9uID0gZQoKICAgICAgICBzZWxmLl9jbGVhbnVwX2V4ZWN1dGVfdGVycmFmb3JtKGRyeV9ydW4pCgogICAgZGVmIF9jbGVhbnVwX2V4ZWN1dGVfdGVycmFmb3JtKHNlbGYsIGRyeV9ydW4pOgogICAgICAgIHB5X3RlcnJhZm9ybSA9IFB5VGVycmFmb3JtKCkKCiAgICAgICAgaWYgbm90IGRyeV9ydW46CiAgICAgICAgICAgIHNlbGYudGVycmFmb3JtX291dHB1dHMgPSBweV90ZXJyYWZvcm0uc2F2ZV90ZXJyYWZvcm1fb3V0cHV0KCkKCiAgICAgICAgc2VsZi5fZGVsZXRlX3RlcnJhZm9ybV9wcm92aWRlcl9maWxlKCkKICAgICAgICBzZWxmLmN1cnJlbnRfaW5zdGFsbF9zdGF0dXMgPSBzZWxmLmluc3RhbGxfc3RhdHVzZXMuZ2V0KCdleGVjdXRpb25fZmluaXNoZWQnKQoKCiAgICBkZWYgZ2VuZXJhdGVfdGVycmFmb3JtX2ZpbGVzKHNlbGYsIHJlc291cmNlcywgdGVycmFmb3JtX3dpdGhfdGFyZ2V0cyk6CiAgICAgICAgaWYgZXhpc3RzX3RlcmFmb3JtX2xvY2soKToKICAgICAgICAgICAgc2VsZi53YXJuX2Fub3RoZXJfcHJvY2Vzc19ydW5uaW5nKCkKICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKEsuQU5PVEhFUl9QUk9DRVNTX1JVTk5JTkcpCgogICAgICAgIHNlbGYuc2hvd19zdGVwX2hlYWRpbmcoSy5URVJSQUZPUk1fR0VOX1NUQVJURUQpCgogICAgICAgIGZvciByZXNvdXJjZSBpbiByZXNvdXJjZXM6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHJlc291cmNlLnByZV9nZW5lcmF0ZV90ZXJyYWZvcm0oKQogICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAgICBzZWxmLnNob3dfc3RlcF9pbm5lcl9lcnJvcihzdHIoZSkpCiAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oZSkKCiAgICAgICAgIyBJZiBhbGwgcmVzb3VyY2VzIG5lZWQgdG8gYmUgcmVidWlsZCwgdGhlbiBuZWVkIHRvIGRlc3Ryb3kgdGhvc2Ugd2hvIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gY29kZQogICAgICAgIGlmIG5vdCB0ZXJyYWZvcm1fd2l0aF90YXJnZXRzOgogICAgICAgICAgICBzZWxmLl9kZWxldGVfYWxsX3RlcnJhZm9ybV9maWxlcygpCgogICAgICAgIHNlbGYuX2NyZWF0ZV90ZXJyYWZvcm1fc3VwcG9ydF9kaXJzKCkKICAgICAgICBmb3IgcmVzb3VyY2UgaW4gcmVzb3VyY2VzOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHJlc291cmNlLmdlbmVyYXRlX3RlcnJhZm9ybSgpCgo8fGZpbV9lbmR8Pg=="]
["e34a229c2cf159bf04102578db6e7884d21365c3-1","e34a229c2cf159bf04102578db6e7884d21365c3","PHxmaW1fcHJlZml4fD4KJycnCkdpdmVuIG4gbm9uLW5lZ2F0aXZlIGludGVnZXJzIGExLCBhMiwgLi4uLCBhbiwgCndoZXJlIGVhY2ggcmVwcmVzZW50cyBhIHBvaW50IGF0IGNvb3JkaW5hdGUgKGksIGFpKS4gCm4gdmVydGljYWwgbGluZXMgYXJlIGRyYXduIHN1Y2ggdGhhdCB0aGUgdHdvIGVuZHBvaW50cyBvZiBsaW5lIGkgaXMgYXQgKGksIGFpKSBhbmQgKGksIDApLiAKRmluZCB0d28gbGluZXMsIHdoaWNoIHRvZ2V0aGVyIHdpdGggeC1heGlzIGZvcm1zIGEgY29udGFpbmVyLCBzdWNoIHRoYXQgdGhlIGNvbnRhaW5lciBjb250YWlucyB0aGUgbW9zdCB3YXRlci4KJycnCgojIyMgTmF0dXJlOiBUaGUgYXJlYSBiZXR3ZWVuIEFOWSB0d28gbGluZXMgaXMgZGVjaWRlZCBieSB0aGUgU0hPUlRFUiBsaW5lLgojIyMgQ2VudHJhbCBsb2dpYzogdHdvIHBvaW50ZXJzIGFwcHJvYWNoKHNsaWRpbmcgd2luZG93KTogd2Ugb25seSBtb3ZlIHRoZSBzaG9ydGVyCiMjIyBsaW5lIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgbG9uZ2VyIGxpbmUgdG8gaW5jcmVhc2UgdGhlIGFyZWEKCiMjIFRpbWU6IE8obiksIFNwYWNlOiBPKDEpIC0tPiB3ZSBuZWVkIGZpeGVkIG51bWJlciBvZiB2YXJpYWJsZXMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKIyBJdGVyYXRpdmUgYXBwcm9hY2gKZGVmIG1heEFyZWEoaGVpZ2h0KToKICAgIG1heEFyZWEsIGksIGogPSAwLCAwLCBsZW4oaGVpZ2h0KSAtIDEKPHxmaW1fZW5kfD4="]
["4760bde0cf1675c2c68cebe19f90dd38cc7e1286-1","4760bde0cf1675c2c68cebe19f90dd38cc7e1286","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKZnJvbSBiaXRjYXN0ZXIubW9kZWxzIGltcG9ydCBBcHBsaWNhdGlvblVzZXIsIE9yZ2FuaXphdGlvbk1lbWJlcgpmcm9tIGJpdGNhc3Rlci5zZWN1cml0eSBpbXBvcnQgQVBQX1JPTEVTCgpsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpjbGFzcyBBcHBsaWNhdGlvbk1lbWJlckFkZEZvcm0oZm9ybXMuRm9ybSk6CiAgICByb2xlID0gZm9ybXMuVHlwZWRDaG9pY2VGaWVsZChsYWJlbD0nJywgY2hvaWNlcz1BUFBfUk9MRVMsIGNvZXJjZT1pbnQpCiAgICBtZW1iZXJzID0gZm9ybXMuTW9kZWxNdWx0aXBsZUNob2ljZUZpZWxkKGxhYmVsPScnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeXNldD1Pcmdhbml6YXRpb25NZW1iZXIub2JqZWN0cy5ub25lKCkpCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFwcGxpY2F0aW9uLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHNlbGYuaW5zdGFuY2UgPSBrd2FyZ3MucG9wKCdpbnN0YW5jZScpCiAgICAgICAgc2VsZi5hcHBsaWNhdGlvbiA9IGFwcGxpY2F0aW9uCiAgICAgICAgc2VsZi5vcmdhbml6YXRpb24gPSBhcHBsaWNhdGlvbi5vcmdhbml6YXRpb24KICAgICAgICBzdXBlcigpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKICAgICAgICBpZiBzZWxmLmlzX2JvdW5kOgogICAgICAgICAgICBzZWxmLmZpZWxkc1snbWVtYmVycyddLnF1ZXJ5c2V0ID0gc2VsZi5vcmdhbml6YXRpb24ubWVtYmVyc2hpcHMuYWxsKCkKCgpjbGFzcyBBcHBsaWNhdGlvbk1lbWJlckZvcm0oZm9ybXMuTW9kZWxGb3JtKToKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgbW9kZWwgPSBBcHBsaWNhdGlvblVzZXIKICAgICAgICBmaWVsZHMgPSAoJ3JvbGUnLCkKCiAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBmb3JtX3Nob3dfbGFiZWxzID0ga3dhcmdzLnBvcCgnZm9ybV9zaG93X2xhYmVscycsIEZhbHNlKQogICAgICAgIHN1cGVyKEFwcGxpY2F0aW9uTWVtYmVyRm9ybSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQoKICAgICAgICBzZWxmLmhlbHBlciA9IEZvcm1IZWxwZXIoKQogICAgICAgIHNlbGYuaGVscGVyLmZvcm1fc2hvd19sYWJlbHMgPSBmb3JtX3Nob3dfbGFiZWxzCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBsb2dnaW5nCgpmcm9tIGNyaXNweV9mb3Jtcy5oZWxwZXIgaW1wb3J0IEZvcm1IZWxwZXIKZnJvbSBkamFuZ28gaW1wb3J0IGZvcm1zCjx8ZmltX2VuZHw+"]
["e34b4e59b957567f3fd2f520fa1ab50213596b20-4","e34b4e59b957567f3fd2f520fa1ab50213596b20","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCgpkZWYgdG9fY2FydGVzaWFuKHNwcyk6CiAgaWYgbGVuKHNwcy5zaGFwZSkgPT0gMToKICAgIG4gPSBucC5uZGFycmF5KHNoYXBlPSgzLCkpCiAgICBuWzBdID0gbnAuc2luKHNwc1swXSkKICAgIG5bMV0gPSBucC5jb3Moc3BzWzBdKSAqIG5wLnNpbihzcHNbMV0pCiAgICBuWzJdID0gbnAuY29zKHNwc1swXSkgKiBucC5jb3Moc3BzWzFdKQoKICAgIHJldHVybiBuCiAgZWxzZToKICAgIG4gPSBucC5uZGFycmF5KHNoYXBlPShzcHMuc2hhcGVbMF0sIDMpKQogICAgbls6LCAwXSA9IG5wLnNpbihzcHNbOiwgMF0pCiAgICBuWzosIDFdID0gbnAuY29zKHNwc1s6LCAwXSkgKiBucC5zaW4oc3BzWzosIDFdKQogICAgbls6LCAyXSA9IG5wLmNvcyhzcHNbOiwgMF0pICogbnAuY29zKHNwc1s6LCAxXSkKCiAgICByZXR1cm4gbgoKZGVmIHRvX3NwaGVyaWNhbChucyk6CiAgc3BzID0gbnAubmRhcnJheShzaGFwZT0obnMuc2hhcGVbMF0sIDIpKQoKICBub3JtID0gbnAuc3FydChucC5zdW0obnMgKiogMiwgYXhpcz0xKSkKICBub3JtZWQgPSBucyAvIG5wLnZzdGFjayhbbm9ybV0gKiAzKS5UCgogIHNwc1s6LCAwXSA9IG5wLmFyY3Npbihub3JtZWRbOiwgMF0pCiAgc3BzWzosIDFdID0gbnAuYXJjdGFuMihub3JtZWRbOiwgMV0sIG5vcm1lZFs6LCAyXSkKICByZXR1cm4gc3BzCgpkZWYgc3BoZXJpY2FsX2Nvc19hbmdsZShwMSwgcDIpOgogIHJldHVybiBucC5zdW0ocDEgKiBwMikKPHxmaW1faG9sZXw+CiAgY29zID0gbnAubWluKFsxLjAsIGNvc10pCiAgcmV0dXJuIG5wLmFyY2Nvcyhjb3MpCgpkZWYgdG9fcmVmZXJlbmNlX3BsYW5lKGV2ZW50LCByZWZlcmVuY2VfeiA9IDcwMC4wKToKICB6MCA9IGV2ZW50LnowCiAgbnMgPSBldmVudC50cmFja3MKCiAgeCA9IG5zWzosIDBdICogKHJlZmVyZW5jZV96IC0gejApIC8gbnNbOiwgMl0KICB5ID0gbnNbOiwgMV0gKiAocmVmZXJlbmNlX3ogLSB6MCkgLyBuc1s6LCAyXQogIHByaW1hcnlfdmVydGV4ID0gbnAub25lcyhzaGFwZT14LnNoYXBlWzBdLCBkdHlwZT0nZmxvYXQzMicpICogejAKCiAgcmV0dXJuIHgsIHksIHByaW1hcnlfdmVydGV4Cgo8fGZpbV9zdWZmaXh8PgoKZGVmIHNwaGVyaWNhbF9hbmdsZShwMSwgcDIpOgogIGNvcyA9IHNwaGVyaWNhbF9jb3NfYW5nbGUocDEsIHAyKQogIGNvcyA9IG5wLm1heChbLTEuMCwgY29zXSkKPHxmaW1fZW5kfD4="]
["8d0cf8dafc113b31766c4cebf80552542aef1046-1","8d0cf8dafc113b31766c4cebf80552542aef1046","PHxmaW1fcHJlZml4fD4KZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgc2VyaWFsaXplcnMKCmZyb20gZHJmX2VtYmVkZGVkX2ZpZWxkcy5hcGlfZmllbGRzIGltcG9ydCBBUElSZXNvdXJjZUludEZpZWxkCmZyb20gZHJmX2VtYmVkZGVkX2ZpZWxkcy5tb2RlbF9maWVsZHMgaW1wb3J0IEVtYmVkZGFibGVNb2RlbFNlcmlhbGl6ZXIKZnJvbSB0ZXN0X2FwcC5tb2RlbHMgaW1wb3J0IFBhcmVudE1vZGVsLCBDaGlsZE1vZGVsLCBNYW55TW9kZWwKCgpjbGFzcyBFeHRlcm5hbEFQSVNlcmlhbGl6ZXIoc2VyaWFsaXplcnMuU2VyaWFsaXplcik6CiAgICBpZCA9IHNlcmlhbGl6ZXJzLkludGVnZXJGaWVsZCgpCiAgICBmaWVsZF8xID0gc2VyaWFsaXplcnMuQ2hhckZpZWxkKCkKCgpjbGFzcyBQYXJlbnRTZXJpYWxpemVyKEVtYmVkZGFibGVNb2RlbFNlcmlhbGl6ZXIpOgogICAgY2xhc3MgTWV0YToKICAgICAgICBtb2RlbCA9IFBhcmVudE1vZGVsCiAgICAgICAgZmllbGRzID0gIl9fYWxsX18iCgoKY2xhc3MgQ2hpbGRTZXJpYWxpemVyKEVtYmVkZGFibGVNb2RlbFNlcmlhbGl6ZXIpOgogICAgZXh0ZXJuYWxfYXBpX2ZpZWxkID0gQVBJUmVzb3VyY2VJbnRGaWVsZCgKICAgICAgICB1cmw9Imh0dHA6Ly90ZXN0LWVuZHBvaW50L2FwaS92MS97aWR9LyIsCiAgICAgICAgaW5jbHVkZWRfaGVhZGVycz1bIkF1dGhvcml6YXRpb24iXQogICAgKQoKICAgIGNsYXNzIE1ldGE6Cjx8ZmltX2hvbGV8PgpjbGFzcyBDaGlsZFNlcmlhbGl6ZXJXaXRoU2VyaWFsaXplcihDaGlsZFNlcmlhbGl6ZXIpOgogICAgZXh0ZXJuYWxfYXBpX2ZpZWxkID0gQVBJUmVzb3VyY2VJbnRGaWVsZCgKICAgICAgICB1cmw9Imh0dHA6Ly90ZXN0LWVuZHBvaW50L2FwaS92MS97aWR9LyIsCiAgICAgICAgaW5jbHVkZWRfaGVhZGVycz1bIkF1dGhvcml6YXRpb24iXSwKICAgICkKCgpjbGFzcyBNYW55U2VyaWFsaXplcihFbWJlZGRhYmxlTW9kZWxTZXJpYWxpemVyKToKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgbW9kZWwgPSBNYW55TW9kZWwKICAgICAgICBmaWVsZHMgPSAiX19hbGxfXyIKPHxmaW1fc3VmZml4fD4KICAgICAgICBtb2RlbCA9IENoaWxkTW9kZWwKICAgICAgICBmaWVsZHMgPSAiX19hbGxfXyIKCgo8fGZpbV9lbmR8Pg=="]
["47651acaba889f231f4fe4933b3d31d62a99f4a2-3","47651acaba889f231f4fe4933b3d31d62a99f4a2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcwppbXBvcnQgbG9nZ2luZwppbXBvcnQgbWF0aAppbXBvcnQgb3MKaW1wb3J0IHNodXRpbAppbXBvcnQgc3lzCmltcG9ydCB0aW1lCgpsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignRElSU1BMSVRURVInKQpsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQoKc3RyZWFtX2hhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQpzdHJlYW1faGFuZGxlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCgpsb2dnZXJfZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyUoYXNjdGltZSlzIC0gJShuYW1lKXM6JShsZXZlbG5hbWUpczolKG1lc3NhZ2UpcycsICclWS0lbS0lZCAlSDolTTolUycpCnN0cmVhbV9oYW5kbGVyLnNldEZvcm1hdHRlcihsb2dnZXJfZm9ybWF0dGVyKQpsb2dnZXIuYWRkSGFuZGxlcihzdHJlYW1faGFuZGxlcikKCmxvZ2dlci5wcm9wYWdhdGUgPSBGYWxzZQoKCmRlZiBsb2dfZGVjb3JhdG9yKG1zZzogc3RyKToKICAgIGRlZiB0aW1lcihmKToKICAgICAgICBAd3JhcHMoZikKICAgICAgICBkZWYgd3JhcHBlcigqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAgICB0MSA9IHRpbWUudGltZSgpCiAgICAgICAgICAgIHIgPSBmKCphcmdzLCAqKmt3YXJncykKICAgICAgICAgICAgdDIgPSB0aW1lLnRpbWUoKQogICAgICAgICAgICBsb2dnZXIuaW5mbygnSXQgdG9vayB7Oi4yZn1zIHRvIHt9LicuZm9ybWF0KHQyIC0gdDEsIG1zZykpCiAgICAgICAgICAgIHJldHVybiByCgogICAgICAgIHJldHVybiB3cmFwcGVyCgogICAgcmV0dXJuIHRpbWVyCgoKQGxvZ19kZWNvcmF0b3IoJ2dldCBmaWxlIGxpc3QnKQpkZWYgZ2V0X2ZpbGVfbGlzdChkaXJfcGF0aDogc3RyKSAtPiBsaXN0OgogICAgIiIiCiAgICBHZXQgdGhlIGxpc3Qgb2YgZmlsZXMgaW4gYSBzcGVjaWZpYyBkaXJlY3RvcnkuCgogICAgOnBhcmFtIGRpcl9wYXRoOiBEaXJlY3RvcnkgcGF0aC4KICAgIDpyZXR1cm46IEZpbGUgbGlzdC4KICAgICIiIgoKICAgIHJldHVybiBzb3J0ZWQoW29zLnBhdGguam9pbihkaXJfcGF0aCwgZikgZm9yIGYgaW4gb3MubGlzdGRpcihkaXJfcGF0aCkgaWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGRpcl9wYXRoLCBmKSldKQoKCmRlZiBnZXRfaXRoX3N1Yl9kaXJfbmFtZShzcGxpdF9kaXJfaW5kZXg6IGludCwgbnVtX3NwbGl0X2RpcnM6IGludCkgLT4gc3RyOgogICAgIiIiCiAgICBHZXQgdGhlIGl0aCBzcGxpdCBkaXJlY3RvcnkgbmFtZS4gRm9yIGluc3RhbmNlLCBpZiBzcGxpdF9kaXJfaW5kZXggPT0gMTAgYW5kIG51bV9zcGxpdF9kaXJzID09IDEwMCB0aGVuICcwMTAnIHdpbGwKICAgIGJlIHJldHVybmVkLgoKICAgIDpwYXJhbSBzcGxpdF9kaXJfaW5kZXg6IFNwbGl0IGRpcmVjdG9yeSBpbmRleC4KICAgIDpwYXJhbSBudW1fc3BsaXRfZGlyczogTnVtYmVyIG9mIHNwbGl0IGRpcmVjdG9yaWVzLgogICAgOnJldHVybjogU3ViIGRpcmVjdG9yeSBuYW1lLgogICAgIiIiCgogICAgbnVtX3plcm9zID0gaW50KG1hdGguZmxvb3IobWF0aC5sb2cxMChudW1fc3BsaXRfZGlycykpIC0gbWF0aC5mbG9vcihtYXRoLmxvZzEwKHNwbGl0X2Rpcl9pbmRleCkpKQogICAgcmV0dXJuICcwJyAqIG51bV96ZXJvcyArIHN0cihzcGxpdF9kaXJfaW5kZXgpCjx8ZmltX2hvbGV8PgogICAgR2V0IHRoZSBzcGxpdCBkaXJlY3RvcnkgaW5kZXggd2hlcmUgYSBzcGVjaWZpYyBmaWxlIHNob3VsZCBiZSBwbGFjZWQuCgogICAgOnBhcmFtIGZpbGVfaW5kZXg6IEZpbGUgaW5kZXggLSAxLDIuLixudW1fZmlsZXMKICAgIDpwYXJhbSBudW1fc3BsaXRfZGlyczogTnVtYmVyIG9mIHNwbGl0IGRpcmVjdG9yaWVzLgogICAgOnBhcmFtIG51bV9maWxlczogTnVtYmVyIG9mIGZpbGVzLgogICAgOnJldHVybjogU3BsaXQgZGlyZWN0b3J5IGluZGV4LgogICAgIiIiCgogICAgbnVtX2ZpbGVzX3Bfc3BsaXQgPSBudW1fZmlsZXMgLy8gbnVtX3NwbGl0X2RpcnMKICAgIHJldHVybiAoZmlsZV9pbmRleCAtIDEpIC8vIG51bV9maWxlc19wX3NwbGl0ICsgMSBpZiBmaWxlX2luZGV4IDw9IG51bV9maWxlc19wX3NwbGl0ICogbnVtX3NwbGl0X2RpcnMgZWxzZSBudW1fc3BsaXRfZGlycwoKCkBsb2dfZGVjb3JhdG9yKCdjcmVhdGUgc3BsaXQgZGlyZWN0b3JpZXMnKQpkZWYgY3JlYXRlX3NwbGl0X2RpcnMocGFyZW50X2Rpcjogc3RyLCBudW1fc3BsaXRfZGlyczogaW50KToKICAgICIiIgogICAgQ3JlYXRlIHNwbGl0IGRpcmVjdG9yaWVzLgoKICAgIDpwYXJhbSBwYXJlbnRfZGlyOiBEaXJlY3Rvcnkgd2hlcmUgdGhlIHNwbGl0IGRpcmVjdG9yaWVzIHNob3VsZCBiZSBwbGFjZWQuCiAgICA6cGFyYW0gbnVtX3NwbGl0X2RpcnM6IE51bWJlciBvZiBzcGxpdCBkaXJlY3Rvcmllcy4KICAgIDpyZXR1cm46IE5vbmUuCiAgICAiIiIKCiAgICB0cnk6CiAgICAgICAgb3MubWFrZWRpcnMocGFyZW50X2RpcikKICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CiAgICAgICAgcGFzcwoKICAgIGZvciBpIGluIHJhbmdlKDEsIG51bV9zcGxpdF9kaXJzICsgMSk6CiAgICAgICAgc3ViX2Rpcl9uYW1lID0gZ2V0X2l0aF9zdWJfZGlyX25hbWUoaSwgbnVtX3NwbGl0X2RpcnMpCiAgICAgICAgc3ViX2Rpcl9uYW1lID0gb3MucGF0aC5qb2luKHBhcmVudF9kaXIsIHN1Yl9kaXJfbmFtZSkKCiAgICAgICAgdHJ5OgogICAgICAgICAgICBvcy5ta2RpcihzdWJfZGlyX25hbWUpCiAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKICAgICAgICAgICAgcGFzcwoKCkBsb2dfZGVjb3JhdG9yKCdzcGxpdCBkaXJlY3RvcnknKQpkZWYgc3BsaXRfZGlyZWN0b3J5KGluX2Rpcl9wYXRoOiBzdHIsIG91dF9kaXJfcGF0aDogc3RyLCBjb21tYW5kOiBzdHIsIG51bV9zcGxpdF9kaXJzOiBpbnQpOgogICAgIiIiCiAgICBTcGxpdCBhIGRpcmVjdG9yeSAoaW5fZGlyX3BhdGgpIGludG8gbnVtX3NwbGl0X2RpcnMgZGlyZWN0b3JpZXMgcGxhY2VkIGluIG91dF9kaXJfcGF0aC4KCiAgICA6cGFyYW0gaW5fZGlyX3BhdGg6IERpcmVjdG9yeSB0byBiZSBzcGxpdC4KICAgIDpwYXJhbSBvdXRfZGlyX3BhdGg6IERpcmVjdG9yeSB3aGVyZSBzcGxpdCBkaXJlY3RvcmllcyBzaG91bGQgYmUgcGxhY2VkLgogICAgOnBhcmFtIGNvbW1hbmQ6IE1vdmUgb3IgY29weSBmaWxlcyBmcm9tIGRpcmVjdG9yeS4KICAgIDpwYXJhbSBudW1fc3BsaXRfZGlyczogTnVtYmVyIG9mIHNwbGl0IGRpcmVjdG9yaWVzLgogICAgOnJldHVybjogTm9uZQogICAgIiIiCgogICAgYm5fZnVuYyA9IG9zLnBhdGguYmFzZW5hbWUKICAgIGdldF9zdWJfZGlyX2Z1bmMgPSBnZXRfaXRoX3N1Yl9kaXJfbmFtZQoKICAgIGZpbGVfbGlzdCA9IGdldF9maWxlX2xpc3QoaW5fZGlyX3BhdGgpCiAgICBudW1fZmlsZXMgPSBsZW4oZmlsZV9saXN0KQoKICAgIGxvZ2dlci5pbmZvKCd7fSBmaWxlcyB0byBiZSBzcGxpdCBpbnRvIHt9IGRpcmVjdG9yaWVzJy5mb3JtYXQobnVtX2ZpbGVzLCBudW1fc3BsaXRfZGlycykpCgogICAgY3JlYXRlX3NwbGl0X2RpcnMob3V0X2Rpcl9wYXRoLCBudW1fc3BsaXRfZGlycykKCiAgICBjb3B5X29yX21vdmVfZnVuYyA9IHNodXRpbC5tb3ZlIGlmIGNvbW1hbmQgPT0gJ20nIGVsc2Ugc2h1dGlsLmNvcHkKCiAgICBsYXN0X3VwZGF0ZV9kaXJfaW5kZXggPSAwCiAgICBuX2tfcHJpbnQgPSAxMDAKCiAgICBmb3IgaSwgZl9uYW1lIGluIGVudW1lcmF0ZShmaWxlX2xpc3QsIDEpOgogICAgICAgIGZfYmFzZV9uYW1lID0gYm5fZnVuYyhmX25hbWUpCgogICAgICAgIHN1Yl9kaXJfaW5kZXggPSBnZXRfZmlsZV9zcGxpdF9kaXJfaW5kZXgoaSwgbnVtX3NwbGl0X2RpcnMsIG51bV9maWxlcykKICAgICAgICBzdWJfZGlyX25hbWUgPSBnZXRfc3ViX2Rpcl9mdW5jKHN1Yl9kaXJfaW5kZXgsIG51bV9zcGxpdF9kaXJzKQogICAgICAgIHN1Yl9kaXJfcGF0aCA9IG9zLnBhdGguam9pbihvdXRfZGlyX3BhdGgsIHN1Yl9kaXJfbmFtZSkKCiAgICAgICAgbmV3X2ZfbmFtZSA9IG9zLnBhdGguam9pbihzdWJfZGlyX3BhdGgsIGZfYmFzZV9uYW1lKQoKICAgICAgICBjb3B5X29yX21vdmVfZnVuYyhmX25hbWUsIG5ld19mX25hbWUpCgogICAgICAgIGN1cnJlbnRfdXBkYXRlX2Rpcl9pbmRleCA9IHN1Yl9kaXJfaW5kZXgKICAgICAgICBpZiBsYXN0X3VwZGF0ZV9kaXJfaW5kZXggIT0gY3VycmVudF91cGRhdGVfZGlyX2luZGV4IGFuZCBjdXJyZW50X3VwZGF0ZV9kaXJfaW5kZXggJSBuX2tfcHJpbnQgPT0gMDoKICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3t9IGZpbGVzIGludG8ge30gZGlyZWN0b3J5LicuZm9ybWF0KCdDb3B5aW5nJyBpZiBjb21tYW5kID09ICdjJyBlbHNlICdNb3ZpbmcnLCBzdWJfZGlyX25hbWUpKQoKICAgICAgICBsYXN0X3VwZGF0ZV9kaXJfaW5kZXggPSBjdXJyZW50X3VwZGF0ZV9kaXJfaW5kZXgKCgpkZWYgbWFpbigpOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J0RpcmVjdG9yeSBzcGxpdHRlciB1dGlsaXR5LicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctaW5fZGlyJywgaGVscD0nRGlyZWN0b3J5IHRvIGJlIHNwbGl0IGludG8gbiBkaXJlY3Rvcmllcy4nLCByZXF1aXJlZD1UcnVlLCB0eXBlPXN0cikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1vdXRfZGlyJywgaGVscD0nRGlyZWN0b3J5IHdoZXJlIHRoZSBuIHNwbGl0IGRpcmVjdG9yaWVzIHNob3VsZCBiZSBwbGFjZWQuJywgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctY29tbWFuZCcsIGhlbHA9J01vdmUgKG0pIG9yIGNvcHkgKGMpIGZpbGVzIGZyb20gc3BsaXQgZGlyZWN0b3J5LicsIGNob2ljZXM9eydtJywgJ2MnfSwKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9VHJ1ZSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1uJywgaGVscD0nSW50byBob3cgbWFueSBkaXJlY3RvcmllcyB0aGUgZGlyZWN0b3J5IHNob3VsZCBiZSBzcGxpdC4nLCB0eXBlPWludCwgcmVxdWlyZWQ9VHJ1ZSkKICAgIHBhcnNlci5wYXJzZV9hcmdzKCkKCiAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogICAgaW5fZGlyID0gYXJncy5pbl9kaXIKICAgIG91dF9kaXIgPSBhcmdzLm91dF9kaXIKICAgIG51bV9zcGxpdF9kaXJzID0gYXJncy5uCiAgICBjb21tYW5kID0gYXJncy5jb21tYW5kCgogICAgc3BsaXRfZGlyZWN0b3J5KGluX2Rpciwgb3V0X2RpciwgY29tbWFuZCwgbnVtX3NwbGl0X2RpcnMpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHN5cy5leGl0KG1haW4oKSkKPHxmaW1fc3VmZml4fD4KCgpkZWYgZ2V0X2ZpbGVfc3BsaXRfZGlyX2luZGV4KGZpbGVfaW5kZXg6IGludCwgbnVtX3NwbGl0X2RpcnM6IGludCwgbnVtX2ZpbGVzOiBpbnQpIC0+IGludDoKICAgICIiIgo8fGZpbV9lbmR8Pg=="]
["8d5b2aa40aa3c144bb732e5a4e620d18d534d320-2","8d5b2aa40aa3c144bb732e5a4e620d18d534d320","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgb3MKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKaWYgb3Muc3lzdGVtKCJhY2sgJ2Zyb20gdGVzdCBpbXBvcnQgKD8hdGVzdF9zdXBwb3J0KXxmcm9tIHRlc3RcLig/IXRlc3Rfc3VwcG9ydCknIDIuNSAyLjYgMi43IikgIT0gMjU2OgogICAgc3lzLmV4aXQoJ0ZBSUxFRDogU29tZSB0ZXN0cyBpbiBzdGRsaWIgd2VyZSBub3QgdXBkYXRlZCB0byBub3QgcmVmZXJlbmNlICJ0ZXN0Ii4nKQo8fGZpbV9lbmR8Pg=="]
["2773591c85aa23b164375ea77f439618527f7c13-2","2773591c85aa23b164375ea77f439618527f7c13","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgoiIiIKQURSTW9uaXRvciAtIEEgcHJvZ3JhbSB0byBxdWVyeSB0aGUgdGVtcGVyYXR1cmUgY29udHJvbGxlci4KClB1cnBvc2U6CiogVG8gbW9uaXRvciBhbiBBRFIncyBzdGF0ZSB2aWEgdGhlIExha2VzaG9yZSAzNzAgY29udHJvbGxlci4KKiBUbyBzdG9yZSB0aGF0IHN0YXRlIGluIGEgZGlyZWN0b3J5IG9mIGJpbmFyeSBmaWxlcyAoImRpcmZpbGUiKS4KKiBUbyBvZmZlciB0aGUgbGF0ZXN0IHRlbXBlcmF0dXJlIGluZm9ybWF0aW9uIHRvIGxvY2FsIGNsaWVudCBwcm9ncmFtcy4KCkFzIG9mIEZlYiA2LCAyMDE0LCB0aGlzIGlzIHN0aWxsIGEgcmVndWxhciBzY3JpcHQsIGJ1dCBJIHdpbGwgaW52ZXN0aWdhdGUKbWFraW5nIGl0IGludG8gYSBkYWVtb24gKHN5c3RlbSBzZXJ2aWNlKSB0aGF0IHJ1bnMgYWxsIHRoZSB0aW1lICh0aG91Z2gKbWF5YmUgbm90IHN0YXJ0ZWQgYnkgZGVmYXVsdCBhdCBib290dXA/PykuCgpBdXRob3I6ICBKb2UgRm93bGVyLCBOSVNUIEJvdWxkZXIgTGFicwpTdGFydGVkOiBKYW51YXJ5IDMwLCAyMDE0CiIiIgoKaW1wb3J0IHN5cywgdGltZSwgb3MKaW1wb3J0IHN0cnVjdAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHB5Z2V0ZGF0YQppbXBvcnQgem1xCgpERUZBVUxUX0NPTkZJR0ZJTEUgPSAiL2V0Yy9hZHJfbW9uaXRvcl9jb25mLnhtbCIKCgpjbGFzcyBUZW1wZXJhdHVyZURldmljZShvYmplY3QpOgogICAgIiIiSW50ZXJmYWNlIHRvIHRoZSBMYWtlc2hvcmUgMzcwIChvciB3aGF0ZXZlciB5b3VyIGRldmljZSBtaWdodCBiZQogICAgaW4gdGhlIGZ1dHVyZSkuIiIiCiAgICAKICAgICAgICAKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsYWtlc2hvcmVfcGFkKToKICAgICAgICBpbXBvcnQgbGFrZXNob3JlMzcwCiAgICAgICAgc2VsZi5sYWtlc2hvcmUgPSBsYWtlc2hvcmUzNzAuTGFrZXNob3JlMzcwKHBhZD1sYWtlc2hvcmVfcGFkKQogICAgICAgIAogICAgZGVmIHJlYWRfZGF0YShzZWxmKToKICAgICAgICAiIiJSZWFkIGFuZCByZXR1cm4gKHRlbXBlcmF0dXJlLGhlYXRlcix0aW1lKS4iIiIKICAgICAgICBjdXJyZW50VGVtcGVyYXR1cmUgPSBzZWxmLmxha2VzaG9yZS5nZXRUZW1wZXJhdHVyZSgxKSoxZTMKICAgICAgICBjdXJyZW50SGVhdGVyT3V0ID0gc2VsZi5sYWtlc2hvcmUuZ2V0SGVhdGVyT3V0KCkKICAgICAgICBjdXJyZW50VGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgcmV0dXJuIGN1cnJlbnRUZW1wZXJhdHVyZSwgY3VycmVudEhlYXRlck91dCwgY3VycmVudFRpbWUKCgpkZWYgY3VycmVudF95eXl5bW1kZF9oaG1tc3MoKToKICAgIHQgPSB0aW1lLmxvY2FsdGltZSgpCiAgICByZXR1cm4gIiU0LjRkJTIuMmQlMi4yZF8lMi4yZCUyLjJkJTIuMmQiJSgKICAgICAgICAgICAgdC50bV95ZWFyLCB0LnRtX21vbiwgdC50bV9tZGF5LCB0LnRtX2hvdXIsIHQudG1fbWluLCB0LnRtX3NlYykKCgpjbGFzcyBUZW1wZXJhdHVyZUZha2VyKG9iamVjdCk6CiAgICAiIiJVc2UgdGhpcyBpbiBwbGFjZSBvZiBUZW1wZXJhdHVyZURldmljZSBjbGFzcyBmb3IgdGVzdGluZyB3aXRoIGZha2UgZGF0YS4iIiIKICAgIFBFUklPRCA9IDEwICMgc2Vjb25kcwogICAgZGVmIHJlYWRfZGF0YShzZWxmKToKICAgICAgICB0ID0gdGltZS50aW1lKCkKICAgICAgICBmcmFjX3QgPSAodC9zZWxmLlBFUklPRCklMQogICAgICAgIHRlbXAgPSA3MCsyKm5wLnNpbihucC5waSoyKmZyYWNfdCkgKyBucC5yYW5kb20uc3RhbmRhcmRfbm9ybWFsKDEpWzBdCiAgICAgICAgY3VyciA9IDMwKzUqbnAuY29zKG5wLnBpKjIqZnJhY190KSArIG5wLnJhbmRvbS5zdGFuZGFyZF9ub3JtYWwoMSlbMF0KICAgICAgICByZXR1cm4gdGVtcCxjdXJyLHQKICAgIAogICAgCmNsYXNzIERhdGFXcml0ZXIob2JqZWN0KToKICAgICIiIkludGVyZmFjZSB0byB0aGUgb3V0cHV0IGRhdGEgd3JpdGVyLiBDdXJyZW50bHksIGEgZGlyZmlsZSB3cml0ZXIuCiAgICAKICAgIEltcGxlbWVudGF0aW9uIGRldGFpbDogZm9yIG5vdyBJIGFtIHVzaW5nIHRoZSBweWdldGRhdGEgcGFja2FnZSB0byB3cml0ZQogICAgdGhlIGRpcmZpbGUgbWV0YWRhdGEgKHRoYXQgaXMsIHRoZSBmb3JtYXQgZmlsZSksIGJ1dCBpdCBzZWVtcyBlYXNpZXIgdG8KICAgIHdyaXRlIHRoZSBiaW5hcnkgZGF0YSBkaXJlY3RseSB0aHJvdWdoIGZpbGUgb2JqZWN0cyB3aXRoIHRoZSBzdHJ1Y3QucGFjayguLi4pCiAgICBmdW5jdGlvbiBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBweWdldGRhdGEgZmFjaWxpdGllcyBmb3Igd3JpdGluZyBkYXRhLiIiIgogICAgCiAgICBkZWYgX19pbml0X18oc2VsZiwgZGlyZWN0b3J5KToKICAgICAgICBkaXJlY3RvcnkgPSBvcy5wYXRoLmV4cGFuZHZhcnMoZGlyZWN0b3J5KQogICAgICAgIHByaW50ICJUcnlpbmcgZGlyZWN0b3J5ICIsIGRpcmVjdG9yeQogICAgICAgIGJhc2VuYW1lID0gY3VycmVudF95eXl5bW1kZF9oaG1tc3MoKQogICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKGRpcmVjdG9yeSwgYmFzZW5hbWUpCiAgICAgICAgc2VsZi5kaXJmaWxlID0gcHlnZXRkYXRhLmRpcmZpbGUoZmlsZW5hbWUsIHB5Z2V0ZGF0YS5DUkVBVHxweWdldGRhdGEuUkRXUikKICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKCiAgICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIGN1cmZpbGVzIG9yIHNvZnQgbGlua3MgYXJlIG5vdyBwcmVmZXJyZWQgaW4KICAgICAgICAjIGtzdDIsIHNvIGZvciBub3csIHNldCB1cCBvbmUgb2YgZWFjaCEKICAgICAgICAKICAgICAgICAjIFNldCB1cCBhICJjdXJmaWxlIiB0aGF0IGFsd2F5cyBwb2ludHMgdG8gdGhlIGN1cnJlbnQgZGlyZmlsZS4KICAgICAgICBjdXJmaWxlbmFtZSA9IG9zLnBhdGguam9pbihkaXJlY3RvcnksICJ0ZW1wZXJhdHVyZXMuY3VyIikKICAgICAgICBwcmV2ZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oZGlyZWN0b3J5LCAidGVtcGVyYXR1cmVzLnByZXYiKQogICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHByZXZmaWxlbmFtZSk6CiAgICAgICAgICAgIG9zLnVubGluayhwcmV2ZmlsZW5hbWUpCiAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY3VyZmlsZW5hbWUpOgogICAgICAgICAgICBvcy5yZW5hbWUoY3VyZmlsZW5hbWUsIHByZXZmaWxlbmFtZSkKICAgICAgICBmcCA9IG9wZW4oY3VyZmlsZW5hbWUsICJ3IikKICAgICAgICBmcC53cml0ZSgiJXNcbiIlYmFzZW5hbWUpCiAgICAgICAgZnAuY2xvc2UoKQogICAgICAgIAogICAgICAgICMgQWxzbyBzZXQgdXAgYSBzb2Z0IGxpbmsgdG8gdGhlIGN1cnJlbnQgZGlyZmlsZQogICAgICAgIHNvZnRsaW5rID0gb3MucGF0aC5qb2luKGRpcmVjdG9yeSwgInRlbXBlcmF0dXJlcy5sbmsiKQogICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNvZnRsaW5rKToKICAgICAgICAgICAgb3MudW5saW5rKHNvZnRsaW5rKQogICAgICAgIG9zLnN5bWxpbmsoYmFzZW5hbWUsIHNvZnRsaW5rKQogICAgICAgIAogICAgICAgICMgU2V0IHVwIHRoZSBkaXJmaWxlIGZpZWxkcwogICAgICAgIGZpZWxkcz17CiAgICAgICAgICAgICd0ZW1wZXJhdHVyZSc6eyd0eXBlJzpweWdldGRhdGEuRkxPQVQzMiwnc3BmJzoxfSwKICAgICAgICAgICAgJ2N1cnJlbnQnOnsndHlwZSc6cHlnZXRkYXRhLkZMT0FUMzIsJ3NwZic6MX0sCiAgICAgICAgICAgICdjdGltZSc6eyd0eXBlJzpweWdldGRhdGEuRkxPQVQ2NCwnc3BmJzoxfQogICAgICAgICAgICAgICAgfQogICAgICAgIGZvciBuYW1lLHBhcmFtcyBpbiBmaWVsZHMuaXRlcml0ZW1zKCk6CiAgICAgICAgICAgIGVudHJ5ID0gcHlnZXRkYXRhLmVudHJ5KHB5Z2V0ZGF0YS5SQVdfRU5UUlksIG5hbWUsIDAsIHBhcmFtcykKICAgICAgICAgICAgc2VsZi5kaXJmaWxlLmFkZChlbnRyeSkKICAgICAgICBzZWxmLmRpcmZpbGUubWV0YWZsdXNoKCkKICAgICAgICAKICAgICAgICAjIE9wZW4gZmlsZSBoYW5kbGVzIGZvciB0aGUgcmF3IGRhdGEKICAgICAgICAjIERvIHRoaXMgaW5zdGVhZCBvZiBzZWxmLmRpcmZpbGUucHV0ZGF0YSgpLCBiZWNhdXNlIHRoYXQncyBhbm5veWluZwogICAgICAgIHNlbGYuZGlyZmlsZS5yYXdfY2xvc2UoKQogICAgICAgIHNlbGYucmF3X2ZpbGVzID0ge30KICAgICAgICBmb3IgZiBpbiBmaWVsZHMua2V5cygpOgogICAgICAgICAgICBmcCA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuZmlsZW5hbWUsZiksICJ3YiIpCiAgICAgICAgICAgIHNlbGYucmF3X2ZpbGVzW2ZdID0gZnAKCiAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgIiIiQ2xlYW5seSBjbG9zZSB0aGUgb3V0cHV0IGZpbGVzIGFuZCBmbHVzaCB0aGVpciBidWZmZXJzLiIiIgogICAgICAgIGZvciBmcCBpbiBzZWxmLnJhd19maWxlcy52YWx1ZXMoKToKICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgIHNlbGYuZGlyZmlsZS5jbG9zZSgpCiAgICAgICAgc2VsZi5kaXJmaWxlID0gTm9uZQoKICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICIiIk1ha2Ugc3VyZSB0byBjYWxsIGNsb3NlIG9uIHRoZSBvdXRwdXQsIGlmIG5vdCBhbHJlYWR5IGRvbmUuIiIiCiAgICAgICAgaWYgc2VsZi5kaXJmaWxlIGlzIG5vdCBOb25lOgogICAgICAgICAgICBzZWxmLmNsb3NlKCkKCiAgICBkZWYgc3RvcmVfZGF0YShzZWxmLCB0ZW1wZXJhdHVyZSwgY3VycmVudCwgY3RpbWUpOgogICAgICAgIHJlc3VsdHMgPSBsb2NhbHMoKQogICAgICAgIGZvciBmLGZtdCBpbiB6aXAoKCd0ZW1wZXJhdHVyZScsJ2N1cnJlbnQnLCdjdGltZScpLCgnZicsJ2YnLCdkJykpOgogICAgICAgICAgICBmcCA9IHNlbGYucmF3X2ZpbGVzW2ZdCiAgICAgICAgICAgIHN0ciA9IHN0cnVjdC5wYWNrKGZtdCwgcmVzdWx0c1tmXSkKICAgICAgICAgICAgZnAud3JpdGUoc3RyKQogICAgICAgICAgICBmcC5mbHVzaCgpCgoKY2xhc3MgWk1RU2VydmVyKG9iamVjdCk6CiAgICAiIiJBIHZlcnkgc2ltcGxlIGRhdGEgc2VydmVyLCB1c2luZyBaZXJvTWVzc2FnZVF1ZXVlICgwTVEpCiAgICBpbiB0aGUgaW50ZXJwcm9jZXNzIGNvbW11bmljYXRpb24gbW9kZSwgdG8gYW5zd2VyIHJlcXVlc3RzCiAgICByZWNlaXZlZCBvbiBhIFRDUC1saWtlIHNvY2tldCBmcm9tIG90aGVyIGxvY2FsIHByb2Nlc3Nlcy4KICAgIAogICAgVGhlIHN5c3RlbSBhdm9pZHMgdGhyZWFkaW5nIGJ5IGNvb3BlcmF0aXZlbHkgcG9sbGluZyB0aGUKICAgIHNvY2tldCBmb3IgcXVlcmllcyBhbmQgc2xlZXBpbmcuIEkgaG9wZSB0aGlzIGlzbid0IGEgcGVyZm9ybWFuY2UKICAgIHByb2JsZW0sIGJlY2F1c2UgaXQgc3VyZSBpcyBzaW1wbGUuIEEgYmlnIGRyYXdiYWNrIGlzIHRoYXQgCiAgICB0aGUgc2VsZi5zZXJ2ZV9hbmRfZGVsYXkoWCkgYmxvY2tzIGZvciBYIHNlY29uZHMuIFRoYXQgbWVhbnMKICAgIHlvdSBjYW4gb25seSB1c2UgaXQgaWYgeW91IGtub3cgeW91IGhhdmUgbm90aGluZyBiZXR0ZXIgdG8KICAgIGRvIGR1cmluZyB0aGF0IHRpbWUuIEFueXdheSwgaXQgd29ya3MgZm9yIHRoZSBBRFIgY3J5byB0ZW1wZXJhdHVyZQogICAgbW9uaXRvciwgYmVjYXVzZSB0aGUgb25seSBvdGhlciB3b3JrIGlzIHRvIHBvbGwgdGhlIEdQSUIgZXZlcnkKICAgIFggc2Vjb25kcyAodHlwaWNhbGx5LCBYIGlzIGJldHdlZW4gMC4zIGFuZCAzKS4KICAgIAogICAgRXhhbXBsZSB1c2FnZToKICAgIFRoZSBmb2xsb3dpbmcgd2lsbCBiaW5kICdpcGM6Ly8vaG9tZS9wY3VzZXIvd2hlcmV2ZXIuLi4vc29ja2V0X25hbWUnLAogICAgd2hpY2ggdGhlIGNsaWVudCBwcm9ncmFtIG9yIHByb2dyYW1zIHdpbGwgYWxzbyBuZWVkIHRvIGtub3cuCiAgICAgICAgCiAgICBzZXJ2ZXIgPSBaTVFTZXJ2ZXIoJy9ob21lL3BjdXNlci93aGVyZXZlci4uLi9zb2NrZXRfbmFtZScpCiAgICB3aGlsZSBUcnVlOgogICAgICAgIHgseSx6ID0gbGFrZXNob3JlX2RldmljZV9vYmplY3QucXVlcnkoKQogICAgICAgIHNlcnZlci5uZXdkYXRhKHgseSx6KQogICAgICAgIHNlcnZlci5zZXJ2ZV9hbmRfZGVsYXkoMS4wKQogICAgCiAgICAiIiIKICAgIAogICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2tldF9uYW1lKToKICAgICAgICAnJydTZXRzIHVwIGFuIGlwYyBzb2NrZXQgYXQgaXBjOi8vPHNvY2tldF9uYW1lPiB3aGVyZQogICAgICAgIDxzb2NrZXRfbmFtZT4gbXVzdCBiZSBhIGZpbGUtbGlrZSBwYXRobmFtZSBpbiB0aGUgY29tcHV0ZXIncwogICAgICAgIGZpbGVzeXN0ZW0sIHRvIHdoaWNoIHRoaXMgcHJvY2VzcyBoYXMgd3JpdGUgYWNjZXNzLicnJwogICAgICAgIAogICAgICAgIHNlbGYuc29ja2V0X25hbWUgPSAiaXBjOi8vJXMiJW9zLnBhdGguZXhwYW5kdmFycyhzb2NrZXRfbmFtZSkKICAgICAgICBzZWxmLmRhdGEgPSAwLDAsMAogICAgICAgIHNlbGYuY29udGV4dCA9IHptcS5Db250ZXh0KCkKICAgICAgICBzZWxmLnNvY2tldCA9IHNlbGYuY29udGV4dC5zb2NrZXQoem1xLlJFUCkKICAgICAgICBwcmludCAiQmluZGluZyB0byAlcyIlc2VsZi5zb2NrZXRfbmFtZQogICAgICAgIHNlbGYuc29ja2V0LmJpbmQoc2VsZi5zb2NrZXRfbmFtZSkKICAgIAogICAgICAgIHNlbGYucG9sbGVyID0gem1xLlBvbGxlcigpCiAgICAgICAgc2VsZi5wb2xsZXIucmVnaXN0ZXIoc2VsZi5zb2NrZXQsIHptcS5QT0xMSU4pCgogICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgc2VsZi5zb2NrZXQuY2xvc2UoKQogICAgICAgICAKICAgIGRlZiBuZXdkYXRhKHNlbGYsIHRlbXBlcmF0dXJlLCBjdXJyZW50LCBjdGltZSk6CiAgICAgICAgc2VsZi5kYXRhID0gKHRlbXBlcmF0dXJlLCBjdXJyZW50LCBjdGltZSkKICAgICAgICAKICAgIGRlZiBzZXJ2ZV9hbmRfZGVsYXkoc2VsZiwgZGVsYXlfc2VjKToKICAgICAgICAnJydGb3IgYSB0aW1lIHBlcmlvZCBvZiA8ZGVsYXlfc2VjPiBzZWNvbmRzLCBwb2xsIHRoZSBzb2NrZXQgZm9yIAogICAgICAgIHF1ZXJpZXMKICAgICAgICAKICAgICAgICAnJycKICAgICAgICB0X2VuZCA9IHRpbWUudGltZSgpICsgZGVsYXlfc2VjCiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgcG9sbF9pbnRlcnZhbF9tc2VjID0gKHRfZW5kIC0gdGltZS50aW1lKCkpKjFlMwogICAgICAgICAgICBpZiBwb2xsX2ludGVydmFsX21zZWMgPD0gMDogCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAKICAgICAgICAgICAgcG9sbF9yZXN1bHQgPSBkaWN0KHNlbGYucG9sbGVyLnBvbGwocG9sbF9pbnRlcnZhbF9tc2VjKSkKICAgICAgICAgICAgaWYgc2VsZi5zb2NrZXQgaW4gcG9sbF9yZXN1bHQgYW5kIHBvbGxfcmVzdWx0W3NlbGYuc29ja2V0XSA9PSB6bXEuUE9MTElOOgogICAgICAgICAgICAgICAgbXNnID0gc2VsZi5zb2NrZXQucmVjdigpCiAgICAgICAgICAgICAgICBwcmludCAiXG5SZWNlaXZlZCByZXF1ZXN0OiAiLCBtc2cKICAgICAgICAgICAgICAgIG1zZyA9ICIlLjVmICUuM2YgJS41ZiIlc2VsZi5kYXRhCiAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5zZW5kKG1zZykKCgoKY2xhc3MgQURSTW9uaXRvcihvYmplY3QpOgogICAgIiIiUnVuIHRoZSBBRFIgbW9uaXRvciBieSByZWFkaW5nIGZyb20gYSBUZW1wZXJhdHVyZURldmljZSBhbmQKICAgIHdyaXRpbmcgdG8gYSBEYXRhV3JpdGVyLCBwbHVzIGhhbmRsaW5nIGEgWk1RU2VydmVyLgogICAgCiAgICBVc2FnZTogCiAgICBtID0gQURSTW9uaXRvci5BRFJNb25pdG9yKCcvZXRjL2Fkcl9tb25pdG9yX2NvbmYueG1sJykKICAgIG0ucnVuKCkKICAgICIiIgogICAgCiAgICBkZWYgX19pbml0X18oc2VsZiwgeG1sX2NvbmZpZ19maWxlLCBzaW11bGF0ZT1GYWxzZSk6CiAgICAgICAgZnJvbSBseG1sIGltcG9ydCBldHJlZQogICAgICAgIHRyeToKICAgICAgICAgICAgZG9jdW1lbnQgPSBldHJlZS5wYXJzZSh4bWxfY29uZmlnX2ZpbGUpCiMgICAgICAgICAgICAgcHJpbnQgZXRyZWUudG9zdHJpbmcocm9vdCwgcHJldHR5X3ByaW50PVRydWUpCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICBwcmludCAiQ291bGQgbm90IHBhcnNlICVzIiV4bWxfY29uZmlnX2ZpbGUKCiAgICAgICAgc2VsZi5kb2MgPSBkb2N1bWVudAogICAgICAgIHNlbGYucm9vdCA9IGRvY3VtZW50LmdldHJvb3QoKQogICAgICAgIGFzc2VydCBzZWxmLnJvb3QuZ2V0KCd2ZXJzaW9uJykgPT0gJzEnCiAgICAgICAgZm9yIG5vZGUgaW4gc2VsZi5yb290OgogICAgICAgICAgICBzZWxmLl9fZGljdF9fW25vZGUudGFnXSA9IG5vZGUudGV4dAogICAgCiAgICAgICAgIyBUaGlzIGNoZWNrIGhlbHBzIG1ha2UgZXJyb3JzIGluIHRoZSBzZXR0aW5ncyBmaWxlIGJlIGxlc3MgY3J5cHRpYyB0byB0aGUgdXNlci4KICAgICAgICBSRVFVSVJFRF9TRVRUSU5HUyA9ICgiZGlyZmlsZV9sb2NhdGlvbiIsInBvbGxpbmdfcGVyaW9kX21zZWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWtlc2hvcmVfcGFkIiwgInNvY2tldF9uYW1lIikKICAgICAgICBmb3IgcyBpbiBSRVFVSVJFRF9TRVRUSU5HUzoKICAgICAgICAgICAgaWYgcyBub3QgaW4gc2VsZi5fX2RpY3RfXzoKICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInhtbCBjb25maWcgZmlsZSAlcyBkb2VzIG5vdCBjb250YWluIGEgJyVzJyB0YWciJSgKICAgICAgICAgICAgICAgICAgICAgICAgeG1sX2NvbmZpZ19maWxlLCBzKSkKICAgIAogICAgICAgIGlmIG5vdCBzaW11bGF0ZToKICAgICAgICAgICAgc2VsZi5kZXZpY2UgPSBUZW1wZXJhdHVyZURldmljZShsYWtlc2hvcmVfcGFkID0gaW50KHNlbGYubGFrZXNob3JlX3BhZCkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5kZXZpY2UgPSBUZW1wZXJhdHVyZUZha2VyKCkKICAgICAgICBzZWxmLndyaXRlciA9IERhdGFXcml0ZXIoc2VsZi5kaXJmaWxlX2xvY2F0aW9uKQogICAgICAgIHNlbGYuc2VydmVyID0gWk1RU2VydmVyKHNlbGYuc29ja2V0X25hbWUpCiAgICAKICAgIAogICAgZGVmIHJ1bihzZWxmKToKICAgICAgICBkZWxheSA9IDAuMDAxKmludChzZWxmLnBvbGxpbmdfcGVyaW9kX21zZWMpCiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgYSxiLGMgPSBzZWxmLmRldmljZS5yZWFkX2RhdGEoKQogICAgICAgICAgICBwcmludCBhLGIsYwogICAgICAgICAgICBzZWxmLndyaXRlci5zdG9yZV9kYXRhKGEsYixjKQogICAgICAgICAgICBzZWxmLnNlcnZlci5uZXdkYXRhKGEsYixjKQogICAgICAgICAgICBzZWxmLnNlcnZlci5zZXJ2ZV9hbmRfZGVsYXkoZGVsYXkpCgogICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgc2VsZi53cml0ZXIuY2xvc2UoKQogICAgCgoKZGVmIGNyZWF0ZV9zZXR0aW5nc19maWxlKGZpbGVuYW1lLCAqKmt3YXJncyk6CiAgICAiIiJBIHF1aWNrIHdheSB0byBnZW5lcmF0ZSBhIHNldHRpbmdzIGZpbGUuIE5vcm1hbGx5IG5vdCB1c2VkLCBidXQKeW91IGNhbiBydW4gdGhpcyBmcm9tIGEgUHl0aG9uIHNlc3Npb24gdG8gbWFrZSBhIHNldHRpbmdzIGZpbGUuCgpJZiB5b3UgYXJlIGhhdmluZyB0cm91YmxlIGRvaW5nIHRoYXQsIHRoZW4gcGVyaGFwcyB5b3UgY2FuIGp1c3QgY29weQp0aGUgZm9sbG93aW5nIGxpbmVzIGludG8gL2V0Yy9hZHJfbW9uaXRvcl9jb25mLnhtbCAodGhlIGRlZmF1bHQgcGxhY2UKaXMgZ2l2ZW4gYnkgZ2xvYmFsIHZhcmlhYmxlIERFRkFVTFRfQ09ORklHRklMRSBpbiB0aGlzIHByb2dyYW0pLgogICAgCjxBRFJNb25pdG9yIHZlcnNpb249IjEiPgogIDxwb2xsaW5nX3BlcmlvZF9tc2VjPjUwMDwvcG9sbGluZ19wZXJpb2RfbXNlYz4KICA8ZGlyZmlsZV9sb2NhdGlvbj4kSE9NRS9kYXRhL2NyeW9fbG9nczwvZGlyZmlsZV9sb2NhdGlvbj4KICA8bGFrZXNob3JlX3BhZD4xMzwvbGFrZXNob3JlX3BhZD4KICA8c29ja2V0X25hbWU+JEhPTUUvZGF0YS9jcnlvX2xvZ3MvY3J5b19tb25pdG9yPC9zb2NrZXRfbmFtZT4KPC9BRFJNb25pdG9yPgogICAgIiIiCiAgICAKICAgICMgU3RhcnQgd2l0aCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgdXBkYXRlIHVzaW5nIGFueSBhcmd1bWVudHMgaGVyZS4KICAgIHNldHRpbmdzID0geydsYWtlc2hvcmVfcGFkJzoxMywKICAgICAgICAgICAgICAgICdwb2xsaW5nX3BlcmlvZF9tc2VjJzo1MDAsCiAgICAgICAgICAgICAgICAnZGlyZmlsZV9sb2NhdGlvbic6JyRIT01FL2RhdGEvY3J5b19sb2dzJywKICAgICAgICAgICAgICAgICdzb2NrZXRfbmFtZSc6JyRIT01FL2RhdGEvY3J5b19sb2dzL2NyeW9fbW9uaXRvcid9CiAgICBzZXR0aW5ncy51cGRhdGUoa3dhcmdzKQogICAgCiAgICAjIEdlbmVyYXRlIGFuIFhNTCByZXByZXNlbnRhdGlvbgogICAgZnJvbSBseG1sIGltcG9ydCBldHJlZQogICAgcm9vdCA9IGV0cmVlLkVsZW1lbnQoIkFEUk1vbml0b3IiLCB2ZXJzaW9uPSIxIikKICAgIGZvciBrLHYgaW4gc2V0dGluZ3MuaXRlcml0ZW1zKCk6CiAgICAgICAgY2hpbGQgPSBldHJlZS5TdWJFbGVtZW50KHJvb3QsIGspCiAgICAgICAgY2hpbGQudGV4dCA9IHN0cih2KQoKICAgICMgU3RvcmUgWE1MIHRvIGEgZmlsZQogICAgZnAgPSBvcGVuKGZpbGVuYW1lLCAidyIpCiAgICBmcC53cml0ZShldHJlZS50b3N0cmluZyhyb290LCBwcmV0dHlfcHJpbnQ9VHJ1ZSkpCiAgICBmcC5jbG9zZSgpCgoKCmRlZiBtYWluKCk6CgogICAgY29uZmlnX2ZpbGUgPSBERUZBVUxUX0NPTkZJR0ZJTEUKICAgIGlmIGxlbihzeXMuYXJndik9PTI6CiAgICAgICAgY29uZmlnX2ZpbGUgPSBzeXMuYXJndlsxXQogICAgZWxpZiBsZW4oc3lzLmFyZ3YpID4gMjoKICAgICAgICBwcmludCAidXNhZ2U6IEFEUk1vbml0b3IucHkgW2NvbmZpZ19maWxlXSIKICAgICAgICBwcmludCAiICAgIFRoZSBkZWZhdWx0IGNvbmZpZyBmaWxlIGlzICVzIiVERUZBVUxUX0NPTkZJR0ZJTEUKICAgICAgICBwcmludCAiICAgIElmIHlvdSBuZWVkIHRvIGNvbnN0cnVjdCBvbmUsIHNlZSBjcmVhdGVfc2V0dGluZ3NfZmlsZSgpIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcHJpbnQgIiAgICBIZXJlIGlzIGl0cyBkb2NzdHJpbmdcbiVzXG4gICAiJSg3NSonLScpLAogICAgICAgIHByaW50IGNyZWF0ZV9zZXR0aW5nc19maWxlLl9fZG9jX18KICAgICAgICBwcmludCA3NSonLScKICAgICAgICByZXR1cm4KPHxmaW1fZW5kfD4="]
["8b76ef967e5fe943ac39ede1ccdc0bc204b2fb6d-1","8b76ef967e5fe943ac39ede1ccdc0bc204b2fb6d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIGJsb2NrY2hhaW4udHJhbnNhY3Rpb24gaW1wb3J0ICoKZnJvbSB1dGlscy5qc29uX3V0aWxzIGltcG9ydCBNeUpTT05FbmNvZGVyCgoKY2xhc3MgVGVzdFRyYW5zYWN0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiBzZXRVcChzZWxmKSAtPiBOb25lOgogICAgICAgIHNlbGYuYWRkciA9ICIxMjM0NTYiCiAgICAgICAgc2VsZi52YWx1ZSA9IDEwMAogICAgICAgIHNlbGYudHggPSBUeC5jcmVhdGVfY29pbmJhc2Uoc2VsZi5hZGRyLCBzZWxmLnZhbHVlKQogICAgICAgIHNlbGYucG9pbnRlciA9IFBvaW50ZXIoc2VsZi50eC5pZCwgMCkKCiAgICBkZWYgdGVzdF9wb2ludGVyX2VxKHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wb2ludGVyLCBQb2ludGVyKHNlbGYudHguaWQsIDApKQogICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5wb2ludGVyLCBQb2ludGVyKHNlbGYudHguaWQsIDEpKQogICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5wb2ludGVyLCAxKQogICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5wb2ludGVyLCBQb2ludGVyKCIxMjM0IiwgMCkpCgogICAgZGVmIHRlc3RfdHhfZXEoc2VsZik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFR4KCksIFR4KCkpCiAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLnR4LCBUeC5jcmVhdGVfY29pbmJhc2Uoc2VsZi5hZGRyLCBzZWxmLnZhbHVlKSkKCjx8ZmltX2VuZHw+"]
["195e821c6d80fd37d41ac6d510a09154633ca004-3","195e821c6d80fd37d41ac6d510a09154633ca004","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRhdGV0aW1lCmZyb20gLiBpbXBvcnQgKgoKCmRlZiBnZXRfc2Vzc2lvbl9ieV9pZChpZCk6CiAgICByZXR1cm4gU2Vzc2lvbi5xdWVyeS5nZXQoaWQpCgoKZGVmIGdldF91c2VyX2Zyb21fc2Vzc2lvbihzZXNzaW9uKToKICAgIHVzZXIgPSBzZXNzaW9uLnNlcmlhbGl6ZSgpWyJ1c2VyIl0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgaWYgbm90IHVzZXI6CiAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVc2VyIGRvZXMgbm90IGV4aXN0LiIpCiAgICByZXR1cm4gdXNlcgoKPHxmaW1fZW5kfD4="]
["fd765e19fd9b398be070bdc821d4f977189e7e9b-3","fd765e19fd9b398be070bdc821d4f977189e7e9b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNnaQoKZnJvbSBnb29nbGUuYXBwZW5naW5lLmFwaSBpbXBvcnQgbWFpbApmcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0IGltcG9ydCBkZWZlcnJlZAoKZnJvbSBuZGIgaW1wb3J0IG1vZGVsCmZyb20gdGlwZnkucm91dGluZyBpbXBvcnQgdXJsX2Zvcgpmcm9tIHRpcGZ5ZXh0Lm5kYi5taXhpbnMgaW1wb3J0IERhdGVNaXhpbgoKCmNsYXNzIF9Gb3JtYXR0YWJsZUNvbnRlbnQobW9kZWwuTW9kZWwpOgogICAgcmF3ID0gbW9kZWwuVGV4dFByb3BlcnR5KHJlcXVpcmVkPVRydWUpCiAgICBodG1sID0gbW9kZWwuVGV4dFByb3BlcnR5KHJlcXVpcmVkPUZhbHNlKQoKY2xhc3MgX0Rpc3BsYXlTdGF0ZShtb2RlbC5Nb2RlbCk6CiAgICAiIiJTdHJ1Y3R1cmVkIFByb3BlcnR5IGZvciBsaXN0aW5nIFVzZXIgS2V5cyBhbmQgdGhlCiAgICAgICAgc3RhdGUgb2YgdGhlIE1lc3NhZ2UgLyBUaHJlYWQgZm9yIHRoYXQgdXNlcgogICAgIiIiCiAgICB1c2VyX2tleSA9IG1vZGVsLktleVByb3BlcnR5KCkKICAgICMgU3RhdGUgYXNzdW1lcyBhIGNlcnRhaW4gZmxvdywgaS5lLiBhIG1lc3NhZ2UgY2Fubm90IGJlCiAgICAjIGFyY2hpdmVkIHVudGlsIGl0IGhhcyBiZWVuIHJlYWQuCiAgICAjIDAgLSB1bnJlYWQKICAgICMgMSAtIHJlYWQKICAgICMgMiAtIGFyY2hpdmVkCiAgICAjIDMgLSBkZWxldGVkCiAgICAjIDQgLSByZXBvcnRlZAogICAgc3RhdGUgPSBtb2RlbC5JbnRlZ2VyUHJvcGVydHkoZGVmYXVsdD0wKQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBsYWJlbF90b19pbnRlZ2VyKGxhYmVsKToKICAgICAgICBpZiBsYWJlbCA9PSAndW5yZWFkJzoKICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICBpZiBsYWJlbCA9PSAncmVhZCc6CiAgICAgICAgICAgIHJldHVybiAxCiAgICAgICAgaWYgbGFiZWwgPT0gJ2FyY2hpdmVkJzoKICAgICAgICAgICAgcmV0dXJuIDIKICAgICAgICBpZiBsYWJlbCA9PSAnZGVsZXRlZCc6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgcmV0dXJuIDMKPHxmaW1fZW5kfD4="]
["2795f5d5c5b137f0316ff6fe6bd8150a05a643ce-5","2795f5d5c5b137f0316ff6fe6bd8150a05a643ce","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0LCBwcmludF9mdW5jdGlvbiwgdW5pY29kZV9saXRlcmFscwppbXBvcnQgc3RydWN0CmltcG9ydCBzeXMKCmRlZiBmb3JtYXRfaXAoaXApOgogICAgcmV0dXJuICcuJy5qb2luKG1hcChzdHIsIHN0cnVjdC51bnBhY2soIkJCQkIiLCBzdHJ1Y3QucGFjaygiPkkiLCBpcCkpKSkKCmRlZiB1bmZvcm1hdF9pcChpcCk6CiAgICByZXR1cm4gc3RydWN0LnVucGFjaygiPkkiLCBzdHJ1Y3QucGFjaygiQkJCQiIsICptYXAoaW50LCBpcC5zcGxpdCgnLicpKSkpWzBdCgpkZWYgbWFza19pcChpcCwgYmxvY2spOgogICAgbWFzayA9IDB4RkZGRkZGRkYgJiB+KCgxIDw8ICgzMiAtIGJsb2NrKSkgLSAxKQogICAgc3RhcnRfaXAgPSBpcCAmIG1hc2sKICAgIGVuZF9pcCA9IGlwIHwgKDB4RkZGRkZGRkYgJiB+bWFzaykKICAgIHJldHVybiBzdGFydF9pcCwgZW5kX2lwCgpkZWYgbWFpbihhcmd2KToKICAgIGlmIGxlbihhcmd2KSA8IDI6Cjx8ZmltX2hvbGV8PgogICAgaXAsIGJsb2NrID0gYXJndlsxXS5zcGxpdCgnLycpCiAgICBibG9jayA9IGludChibG9jaykKICAgIGlwID0gdW5mb3JtYXRfaXAoaXApCgogICAgc3RhcnRfaXAsIGVuZF9pcCA9IG1hc2tfaXAoaXAsIGJsb2NrKQogICAgcHJpbnQoZm9ybWF0X2lwKHN0YXJ0X2lwKSkKICAgIHByaW50KGZvcm1hdF9pcChlbmRfaXApKQogICAgcmV0dXJuIDAKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBleGl0KG1haW4oc3lzLmFyZ3YpKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHByaW50KCJQYXNzIGFuIElQIHdpdGggQ0lEUiBibG9jayBhcyBhbiBhcmd1bWVudCAoZS5nLiAxOTIuMTY4LjEuMC8yNCkiKQogICAgICAgIHJldHVybiAxCgo8fGZpbV9lbmR8Pg=="]
["47817fda322b191ec4cebec038b9c52201e149da-3","47817fda322b191ec4cebec038b9c52201e149da","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCgojIENyZWF0ZSB5b3VyIG1vZGVscyBoZXJlLgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmNsYXNzIEdyZWV0aW5nKG1vZGVscy5Nb2RlbCk6CiAgICB3aGVuID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoJ2RhdGUgY3JlYXRlZCcsIGF1dG9fbm93X2FkZD1UcnVlKQoKY2xhc3MgRGlhbG9ndWUobW9kZWxzLk1vZGVsKToKPHxmaW1fZW5kfD4="]
["a9118d429f10d71eb1592a3009c1b7642377ee43-1","a9118d429f10d71eb1592a3009c1b7642377ee43","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGN2MgppbXBvcnQgbnVtcHkgYXMgbnAKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppbXBvcnQgdGltZQoKIyDpsbznnLzmnInmlYjljLrln5/miKrlj5YKZGVmIGN1dChpbWcpOgo8fGZpbV9lbmR8Pg=="]
["274bee1aaab49b443f946567010d711338cb75e5-1","274bee1aaab49b443f946567010d711338cb75e5","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOnV0Zi04IC0qLQppbXBvcnQgc3lzIAppbXBvcnQgcGFuZGFzIGFzIHBkCnN5cy5wYXRoLmFwcGVuZCgiLi4iKQo8fGZpbV9ob2xlfD4KY29jdXRpbHMuc2MycG5nKCcuL2J1aWxkaW5nX2Jhc2VzX3RleC5zYycsICcuLycpCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBjb2N1dGlscwoKIyBjb2N1dGlscy5kdW1wc2MoJy4vYnVpbGRpbmdfYmFzZXNfdGV4LnNjJywgJy4vJywgRmFsc2UpCiMgY29jdXRpbHMuZHVtcHNjKCcuL2J1aWxkaW5ncy5jc3YnLCAnLi8nLCBGYWxzZSkKPHxmaW1fZW5kfD4="]
["e37ddada69885cc3c65e3eedf8d3ea953e0431b5-3","e37ddada69885cc3c65e3eedf8d3ea953e0431b5","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgoKIiIiCkV4YW1wbGVzOgogIHB5dGhvbiBydW5kZW1vLnB5IHRlc3RzICAgICAgICAgICAgICAgICAgICAgICAjIFJ1biBhbGwgdGVzdHMKClJ1bm5pbmcgdGhlIHRlc3RzIHJlcXVpcmVzIHRoYXQgUm9ib3QgRnJhbWV3b3JrLCBTZWxlbml1bUxpYnJhcnksIFB5dGhvbiwgYW5kCkphdmEgdG8gYmUgaW5zdGFsbGVkLiBGb3IgbW9yZSBjb21wcmVoZW5zaXZlIGluc3RydWN0aW9ucywgc2VlIHRoZSBkZW1vIHdpa2kKcGFnZSBhdCBgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3JvYm90ZnJhbWV3b3JrLXNlbGVuaXVtbGlicmFyeS93aWtpL0RlbW9gLgoiIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKaW1wb3J0IG9zCmltcG9ydCBzeXMKZnJvbSB0ZW1wZmlsZSBpbXBvcnQgVGVtcG9yYXJ5RmlsZQo8fGZpbV9lbmR8Pg=="]
["23e3912c6fb66737169e91a5b8a11b228e47946b-3","23e3912c6fb66737169e91a5b8a11b228e47946b","PHxmaW1fcHJlZml4fD4KIiIiClV0aWxpdGllcyB0byBtYW5hZ2UgZGlmZmVyZW50IGRhdGEgaW5wdXQgZmlsZXMuCiIiIgppbXBvcnQgbG9nZ2luZwpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCmZyb20geG1sLmV0cmVlLkVsZW1lbnRUcmVlIGltcG9ydCBFbGVtZW50VHJlZQoKZnJvbSB0cWRtIGltcG9ydCB0cWRtCmZyb20gLnNjaGVtYSBpbXBvcnQgTWVudGlvbkluc3RhbmNlIAoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCmxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQoKY2xhc3MgUHJvdmVuYW5jZShuYW1lZHR1cGxlKCJQcm92ZW5hbmNlIiwgWyJkb2NfaWQiLCAic3RhcnQiLCAiZW5kIl0pKToKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGZyb21fc3RyKGNscywgc3RyXyk6CiAgICAgICAgZG9jX2lkLCBzdGFydF9lbmQgPSBzdHJfLnNwbGl0KCc6JywgMSkKICAgICAgICBzdGFydCwgZW5kID0gbWFwKGludCwgc3RhcnRfZW5kLnNwbGl0KCctJywgMSkpCiAgICAgICAgcmV0dXJuIGNscyhkb2NfaWQsIHN0YXJ0LCBlbmQpCgogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgcmV0dXJuICJ7fTp7fS17fSIuZm9ybWF0KHNlbGYuZG9jX2lkLCBzZWxmLnN0YXJ0LCBzZWxmLmVuZCkKCmRlZiB0ZXN0X3Byb3ZlbmFuY2VfZnJvbV9zdHIoKToKICAgIHN0cl8gPSAiRU5HX05XXzAwMTI3OF8yMDEzMDIxNF9GMDAwMTFKRFg6MTQ0OC0xNTg0IgogICAgcCA9IFByb3ZlbmFuY2UuZnJvbV9zdHIoc3RyXykKICAgIGFzc2VydCBwLmRvY19pZCA9PSAiRU5HX05XXzAwMTI3OF8yMDEzMDIxNF9GMDAwMTFKRFgiCiAgICBhc3NlcnQgcC5zdGFydCA9PSAxNDQ4CiAgICBhc3NlcnQgcC5lbmQgPT0gMTU4NAoKZGVmIHRlc3RfcHJvdmVuYW5jZV9jbXAoKToKICAgIHAxID0gUHJvdmVuYW5jZSgiQSIsIDEwLCAyMCkKICAgIHAyID0gUHJvdmVuYW5jZSgiQSIsIDEwLCAyMCkKICAgIHAzID0gUHJvdmVuYW5jZSgiQSIsIDE1LCAyNCkKICAgIHA0ID0gUHJvdmVuYW5jZSgiQiIsIDEwLCAyMCkKCiAgICBhc3NlcnQgcDEgPT0gcDIKICAgIGFzc2VydCBwMSA8PSBwMgogICAgYXNzZXJ0IHAxIDwgcDMKICAgIGFzc2VydCBwMyA+IHAxCiAgICBhc3NlcnQgcDEgPCBwNAoKY2xhc3MgRXZhbHVhdGlvbkVudHJ5KG5hbWVkdHVwbGUoIkV2YWx1YXRpb25FbnRyeSIsIFsiaWQiLCAicXVlcnlfaWQiLCAnbGRjX2lkJywgInJlbGF0aW9uIiwgInJlbGF0aW9uX3Byb3ZlbmFuY2VzIiwgInNsb3RfdmFsdWUiLCAic2xvdF9wcm92ZW5hbmNlcyIsICJzbG90X3ZhbHVlX2xhYmVsIiwgInJlbGF0aW9uX2xhYmVsIiwgImVxX2NsYXNzIiwgImVxIl0pKToKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiAie306IHt9IHt9IHt9Ii5mb3JtYXQoc2VsZi5pZCwgc2VsZi5xdWVyeV9pZCwgc2VsZi5yZWxhdGlvbiwgc2VsZi5zbG90X3ZhbHVlKQoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gIjxFbnRyeToge30+Ii5mb3JtYXQoc3RyKHNlbGYpKQoKICAgIGRlZiBpc190cnVlKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmVxID4gMAoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGZyb21fbGluZShjbHMsIGxpbmUpOgogICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgiXHQiKQogICAgICAgIGlkXyA9IHBhcnRzWzBdCiAgICAgICAgcXVlcnlfaWQsIHJlbGF0aW9uID0gcGFydHNbMV0uc3BsaXQoJzonLCAxKQogICAgICAgIGxkY19pZCA9IE5vbmUKICAgICAgICByZWxhdGlvbl9wcm92ZW5hbmNlcyA9IFtQcm92ZW5hbmNlLmZyb21fc3RyKHMpIGZvciBzIGluIHBhcnRzWzJdLnNwbGl0KCcsJyldCiAgICAgICAgc2xvdF92YWx1ZSA9IHBhcnRzWzNdCiAgICAgICAgc2xvdF9wcm92ZW5hbmNlcyA9IFtQcm92ZW5hbmNlLmZyb21fc3RyKHMpIGZvciBzIGluIHBhcnRzWzRdLnNwbGl0KCcsJyldCiAgICAgICAgc2xvdF92YWx1ZV9sYWJlbCA9IHBhcnRzWzVdCiAgICAgICAgcmVsYXRpb25fbGFiZWwgPSBwYXJ0c1s2XQogICAgICAgIGVxX2NsYXNzID0gcGFydHNbN10KICAgICAgICBlcSA9IGludChwYXJ0c1s3XS5zcGxpdCgiOiIpWy0xXSkKICAgICAgICByZXR1cm4gY2xzKGlkXywgcXVlcnlfaWQsIGxkY19pZCwgcmVsYXRpb24sIHJlbGF0aW9uX3Byb3ZlbmFuY2VzLCBzbG90X3ZhbHVlLCBzbG90X3Byb3ZlbmFuY2VzLCBzbG90X3ZhbHVlX2xhYmVsLCByZWxhdGlvbl9sYWJlbCwgZXFfY2xhc3MsIGVxKQoKICAgIGRlZiB0b19saXN0KHNlbGYpOgogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgIHNlbGYucXVlcnlfaWQsCiAgICAgICAgICAgIHNlbGYucmVsYXRpb24sCiAgICAgICAgICAgIHNlbGYuc2xvdF92YWx1ZSwKICAgICAgICAgICAgc2VsZi5zbG90X3ZhbHVlX2xhYmVsLAogICAgICAgICAgICBzZWxmLnJlbGF0aW9uX2xhYmVsLAogICAgICAgICAgICBzZWxmLmVxX2NsYXNzLF0KCmRlZiB0ZXN0X2V2YWx1YXRpb25fZW50cnkoKToKICAgIGxpbmUgPSAiQ1MxNV9FTkdfMDAxNl8wXzAwMQlDUzE1X0VOR18wMDE2OmdwZTpiaXJ0aHNfaW5fY291bnRyeQlFTkdfTldfMDAxMjc4XzIwMTMwMjE0X0YwMDAxMUpEWDoxNDQ4LTE1ODQJQWdyaWN1bHR1cmUJRU5HX05XXzAwMTI3OF8yMDEzMDIxNF9GMDAwMTFKRFg6MTUwNS0xNTE1CVcJVwkwIgogICAgZW50cnkgPSBFdmFsdWF0aW9uRW50cnkuZnJvbV9saW5lKGxpbmUpCiAgICBhc3NlcnQgZW50cnkuaWQgPT0gIkNTMTVfRU5HXzAwMTZfMF8wMDEiCiAgICBhc3NlcnQgZW50cnkucXVlcnlfaWQgPT0gIkNTMTVfRU5HXzAwMTYiCiAgICBhc3NlcnQgZW50cnkucmVsYXRpb24gPT0gImdwZTpiaXJ0aHNfaW5fY291bnRyeSIKICAgIGFzc2VydCBlbnRyeS5yZWxhdGlvbl9wcm92ZW5hbmNlcyA9PSBbUHJvdmVuYW5jZSgiRU5HX05XXzAwMTI3OF8yMDEzMDIxNF9GMDAwMTFKRFgiLCAxNDQ4LCAxNTg0KV0KICAgIGFzc2VydCBlbnRyeS5zbG90X3ZhbHVlID09ICJBZ3JpY3VsdHVyZSIKICAgIGFzc2VydCBlbnRyeS5zbG90X3Byb3ZlbmFuY2VzID09IFtQcm92ZW5hbmNlKCJFTkdfTldfMDAxMjc4XzIwMTMwMjE0X0YwMDAxMUpEWCIsIDE1MDUsIDE1MTUpXQogICAgYXNzZXJ0IGVudHJ5LnNsb3RfdmFsdWVfbGFiZWwgPT0gIlciCiAgICBhc3NlcnQgZW50cnkucmVsYXRpb25fbGFiZWwgPT0gIlciCiAgICBhc3NlcnQgZW50cnkuZXFfY2xhc3MgPT0gIjAiCgpjbGFzcyBPdXRwdXRFbnRyeShuYW1lZHR1cGxlKCJFdmFsdWF0aW9uRW50cnkiLCBbInF1ZXJ5X2lkIiwgImxkY19pZCIsICJyZWxhdGlvbiIsICJydW5faWQiLCAicmVsYXRpb25fcHJvdmVuYW5jZXMiLCAic2xvdF92YWx1ZSIsICJzbG90X3R5cGUiLCAic2xvdF9wcm92ZW5hbmNlcyIsICJjb25maWRlbmNlIl0pKToKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGZyb21fbGluZShjbHMsIGxpbmUpOgogICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgiXHQiKQogICAgICAgIHF1ZXJ5X2lkID0gcGFydHNbMF0KICAgICAgICBsZGNfaWQgPSBOb25lCiAgICAgICAgcmVsYXRpb24gPSBwYXJ0c1sxXQogICAgICAgIHJ1bl9pZCA9IHBhcnRzWzJdCiAgICAgICAgcmVsYXRpb25fcHJvdmVuYW5jZXMgPSBbUHJvdmVuYW5jZS5mcm9tX3N0cihzKSBmb3IgcyBpbiBwYXJ0c1szXS5zcGxpdCgnLCcpXQogICAgICAgIHNsb3RfdmFsdWUgPSBwYXJ0c1s0XQogICAgICAgIHNsb3RfdHlwZSA9IHBhcnRzWzVdCiAgICAgICAgc2xvdF9wcm92ZW5hbmNlcyA9IFtQcm92ZW5hbmNlLmZyb21fc3RyKHMpIGZvciBzIGluIHBhcnRzWzZdLnNwbGl0KCcsJyldCiAgICAgICAgY29uZmlkZW5jZSA9IGZsb2F0KHBhcnRzWzddKQogICAgICAgIHJldHVybiBjbHMocXVlcnlfaWQsIGxkY19pZCwgcmVsYXRpb24sIHJ1bl9pZCwgcmVsYXRpb25fcHJvdmVuYW5jZXMsIHNsb3RfdmFsdWUsIHNsb3RfdHlwZSwgc2xvdF9wcm92ZW5hbmNlcywgY29uZmlkZW5jZSkKCmRlZiB0ZXN0X291dHB1dF9lbnRyeSgpOgogICAgbGluZSA9ICJDU1NGMTVfRU5HXzAwMWUyYWExNmYJZ3BlOmJpcnRoc19pbl9jaXR5CUtCX0JCTjEJTllUX0VOR18yMDEzMDUxMy4wMDkwOjI0NzYtMjU0MAlLZW5uZXRoIEV2ZXJldHRlIEJhdHRlbGxlCVBFUglOWVRfRU5HXzIwMTMwNTEzLjAwOTA6MjQ3Ni0yNTAwCTAuOSIKICAgIGVudHJ5ID0gT3V0cHV0RW50cnkuZnJvbV9saW5lKGxpbmUpCiAgICBhc3NlcnQgZW50cnkucXVlcnlfaWQgPT0gIkNTU0YxNV9FTkdfMDAxZTJhYTE2ZiIKICAgIGFzc2VydCBlbnRyeS5yZWxhdGlvbiA9PSAiZ3BlOmJpcnRoc19pbl9jaXR5IgogICAgYXNzZXJ0IGVudHJ5LnJ1bl9pZCA9PSAiS0JfQkJOMSIKICAgIGFzc2VydCBlbnRyeS5yZWxhdGlvbl9wcm92ZW5hbmNlcyA9PSBbUHJvdmVuYW5jZSgiTllUX0VOR18yMDEzMDUxMy4wMDkwIiwyNDc2LDI1NDApXQogICAgYXNzZXJ0IGVudHJ5LnNsb3RfdmFsdWUgPT0gIktlbm5ldGggRXZlcmV0dGUgQmF0dGVsbGUiCiAgICBhc3NlcnQgZW50cnkuc2xvdF90eXBlID09ICJQRVIiCiAgICBhc3NlcnQgZW50cnkuc2xvdF9wcm92ZW5hbmNlcyA9PSBbUHJvdmVuYW5jZSgiTllUX0VOR18yMDEzMDUxMy4wMDkwIiwgMjQ3NiwyNTAwKV0KICAgIGFzc2VydCBlbnRyeS5jb25maWRlbmNlID09IDAuOQoKZGVmIGxvYWRfcXVlcmllcyhmc3RyZWFtKToKICAgIFEgPSB7fQogICAgZm9yIGxpbmUgaW4gZnN0cmVhbToKICAgICAgICBmaWVsZHMgPSBsaW5lLnNwbGl0KCkKICAgICAgICAjIE5PVEU6IFdlIGFyZSBjb25zaWRlcmluZyBwYXJ0aWFsIGFzc2Vzc21lbnRzIGJlY2F1c2UgdGhhdCdzCiAgICAgICAgIyB3aGF0IEtCUCBpcyBkb2luZyB0b28uCiAgICAgICAgbGRjX3F1ZXJ5LCBjc3NmX3F1ZXJ5ID0gZmllbGRzWzoyXQogICAgICAgIFFbY3NzZl9xdWVyeV0gPSBsZGNfcXVlcnkKICAgIHJldHVybiBRCgpkZWYgbG9hZF9nb2xkKGZzdHJlYW0sIFEpOgogICAgZ29sZCA9IFtdCiAgICBmb3IgbGluZSBpbiB0cWRtKGZzdHJlYW0pOgogICAgICAgIGVudHJ5ID0gRXZhbHVhdGlvbkVudHJ5LmZyb21fbGluZShsaW5lKQogICAgICAgIGlmIGVudHJ5LnF1ZXJ5X2lkIGluIFE6CiAgICAgICAgICAgIGdvbGQuYXBwZW5kKGVudHJ5Ll9yZXBsYWNlKGxkY19pZD1RW2VudHJ5LnF1ZXJ5X2lkXSkpCiAgICBsb2dnZXIuaW5mbygiTG9hZGVkICVkIGV2YWx1YXRpb24gZW50cmllcyIsIGxlbihnb2xkKSkKICAgIHJldHVybiBnb2xkCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmRlZiBsb2FkX2dvbGRfMjAxNihmc3RyZWFtLCBRKToKICAgIGdvbGQgPSBbXQogICAgZm9yIGxpbmUgaW4gdHFkbShmc3RyZWFtKToKPHxmaW1fZW5kfD4="]
["8bf476cf633c584c781f8b868270437fee69d095-3","8bf476cf633c584c781f8b868270437fee69d095","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmRlZiBmYWN0b3JpYWxGaW5kZXJSZWN1cnNpdmUobik6CiAgICAiIiJSZXR1cm5zIHRoZSBmYWN0b3JpYWwgb2YgdGhlIHBvc2l0aXZlIGludGVnZXIgbiB1c2luZwogICAgICAgcmVjdXJzaW9uLiIiIgogICAgaWYgbm90IGlzaW5zdGFuY2UobiwgaW50KToKICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ24gc2hvdWxkIGJlIGEgcG9zaXRpdmUgaW50ZWdlci4nKQogICAgICAgIHJldHVybiBOb25lCiAgICBpZiBuIDwgMDoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCduIHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXIuJykKICAgICAgICByZXR1cm4gTm9uZQogICAgaWYgbiA9PSAwOgogICAgICAgIHJldHVybiAxCiAgICBlbHNlOgogICAgICAgIHJldHVybiBuICogZmFjdG9yaWFsRmluZGVyUmVjdXJzaXZlKG4gLSAxKQogICAgCmRlZiBmYWN0b3JpYWxGaW5kZXJMb29wcyhuKToKICAgICIiIlJldHVybnMgdGhlIGZhY3RvcmlhbCBvZiB0aGUgcG9zaXRpdmUgaW50ZWdlciBuIHVzaW5nCiAgICAgICBsb29wcy4iIiIKICAgIGlmIG5vdCBpc2luc3RhbmNlKG4sIGludCk6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKCduIHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXIuJykKICAgICAgICByZXR1cm4gTm9uZQogICAgaWYgbiA8IDA6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCduIHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXIuJykKICAgICAgICByZXR1cm4gTm9uZQo8fGZpbV9lbmR8Pg=="]
["c857514b2d83679b00fb489ec3a62dee851db5eb-1","c857514b2d83679b00fb489ec3a62dee851db5eb","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzeXMKaW1wb3J0IGdsb2IKaW1wb3J0IHBpY2tsZQppbXBvcnQgc29ja2V0CmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aApmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQoKPHxmaW1faG9sZXw+ClVQREFURV9UQUdfUEFUSCA9IERBVEFfUEFUSCAvICdsYXN0X3VwZGF0ZS5wa2wnClVQREFURV9JTklUX1BBVEggPSBEQVRBX1BBVEggLyAnaW5pdF91cGRhdGUudHh0JwpNRDVfSERGU19QQVRIID0gJy91c2VyL3h4eHgvY2h1bmtfc2VnbWVudG9yL21vZGVsX2RhdGEubWQ1JwpNT0RFTF9IREZTX1BBVEggPSAnL3VzZXIveHh4eC9jaHVua19zZWdtZW50b3IvbW9kZWxfZGF0YS56aXAnClVTRVJfTkFNRSA9ICd4eHh4JwpQQVNTV09SRCA9ICd4eHh4eCcKRlRQX1BBVEhfMSA9ICdmdHA6Ly94eHgueHh4Lnh4Lnh4Onh4L2NodW5rX3NlZ21lbnRvcicKRlRQX1BBVEhfMiA9ICdmdHA6Ly94eHgueHh4Lnh4Lnh4Onh4L2NodW5rX3NlZ21lbnRvcicKSVAgPSBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShzb2NrZXQuZ2V0aG9zdG5hbWUoKSkKCgpkZWYgY2hlY2tfdmVyc2lvbigpOgogICAgaWYgTUQ1X0ZJTEVfUEFUSC5leGlzdHMoKToKICAgICAgICBzcmMgPSBnZXRfZGF0YV9tZDUoKQogICAgICAgIGlmIHNyYzoKICAgICAgICAgICAgZmxhZyA9IHVwZGF0ZShzcmMpCiAgICAgICAgICAgIGlmIG5vdCBmbGFnOgogICAgICAgICAgICAgICAgcHJpbnQoJ+aooeWei+WSjOaVsOaNruabtOaWsOWksei0pe+8gScpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBmb3IgZm5hbWUgaW4gZ2xvYi5nbG9iKCdtb2RlbF9kYXRhLm1kNSonKToKICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZm5hbWUpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQoJ+aLieWPlm1kNeaWh+S7tuWksei0pe+8gScpCiAgICBlbHNlOgogICAgICAgIHByaW50KCLov5nmmK/nrKzkuIDmrKHlkK/liqhDaHVua+WIhuivjeWZqOOAgiDor7fogJDlv4PnrYnlvoXniYfliLvoh7PmlbDmja7lkozmqKHlnovkuIvovb3lrozmiJDjgIIiKQogICAgICAgIGZsYWcgPSBkb3dubG9hZCgpCiAgICAgICAgaWYgZmxhZzoKICAgICAgICAgICAgY3VycmVudF90aW1lID0gZGF0ZXRpbWUubm93KCkKICAgICAgICAgICAgaW5pdF91cGRhdGVfdGltZSA9IHN0cihvcy5wYXRoLmdldGN0aW1lKElOSVRfUEFUSCkpCiAgICAgICAgICAgIHBpY2tsZS5kdW1wKGN1cnJlbnRfdGltZSwgb3BlbihVUERBVEVfVEFHX1BBVEgsICd3YicpKQogICAgICAgICAgICB3aXRoIG9wZW4oVVBEQVRFX0lOSVRfUEFUSCwgJ3cnKSBhcyBmb3V0OgogICAgICAgICAgICAgICAgZm91dC53cml0ZShpbml0X3VwZGF0ZV90aW1lKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50KCfor7flr7vmib7kuIDlj7DmnIloYWRvb3DmiJbogIXog73orr/pl65mdHA6Ly94eHgueHh4Lnh4Lnh4Onh45oiW6ICFZnRwOi8veHh4Lnh4eC54eC54eDp4eOeahOacuuWZqCcpCgoKZGVmIHdyaXRlX2NvbmZpZyhjb25maWdfcGF0aCwgbmV3X3Jvb3RfcGF0aCk6CiAgICBjb250ZW50ID0gW10KICAgIHdpdGggb3Blbihjb25maWdfcGF0aCwgZW5jb2Rpbmc9J3V0ZjgnKSBhcyBmOgogICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgncm9vdCcpOgogICAgICAgICAgICAgICAgbGluZSA9ICdyb290PXt9e30nLmZvcm1hdChuZXdfcm9vdF9wYXRoLCBvcy5saW5lc2VwKQogICAgICAgICAgICBjb250ZW50LmFwcGVuZChsaW5lKQogICAgd2l0aCBvcGVuKGNvbmZpZ19wYXRoLCAndycsIGVuY29kaW5nPSd1dGY4JykgYXMgZjoKICAgICAgICBmLndyaXRlbGluZXMoY29udGVudCkKCgpkZWYgZG93bmxvYWQoKToKICAgICMg5LiL6L295pWw5o2u5paH5Lu2CiAgICByZXQxID0gLTEKICAgIHJldDIgPSAtMQogICAgZm9yIGZuYW1lIGluIGdsb2IuZ2xvYignbW9kZWxfZGF0YS5tZDUqJyk6CiAgICAgICAgb3MucmVtb3ZlKGZuYW1lKQogICAgZm9yIGZuYW1lIGluIGdsb2IuZ2xvYignbW9kZWxfZGF0YS56aXAqJyk6CiAgICAgICAgb3MucmVtb3ZlKGZuYW1lKQoKICAgIGlmIG5vdCBJUC5zdGFydHN3aXRoKCcxMjcnKToKICAgICAgICBwcmludCgn5bCd6K+V5LuOZnRwOi8veHh4Lnh4eC54eC54eDp4eOiOt+WPluaVsOaNricpCiAgICAgICAgcmV0MiA9IG9zLnN5c3RlbSgnd2dldCAtcSAtLXRpbWVvdXQ9MiAtLXRyaWVzPTEgLS1mdHAtdXNlcj0lcyAtLWZ0cC1wYXNzd29yZD0lcyAlcy9tb2RlbF9kYXRhLm1kNScgJQogICAgICAgICAgICAgICAgICAgICAgICAoVVNFUl9OQU1FLCBQQVNTV09SRCwgRlRQX1BBVEhfMSkpCiAgICAgICAgaWYgcmV0MiA9PSAwOgogICAgICAgICAgICByZXQxID0gb3Muc3lzdGVtKCd3Z2V0IC0tZnRwLXVzZXI9JXMgLS1mdHAtcGFzc3dvcmQ9JXMgJXMvbW9kZWxfZGF0YS56aXAnICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVU0VSX05BTUUsIFBBU1NXT1JELCBGVFBfUEFUSF8xKSkKICAgICAgICBpZiByZXQxICE9IDA6CiAgICAgICAgICAgIHByaW50KCflsJ3or5Xku45oZGZz5LiK5ouJ5Y+W5pWw5o2u77yM5aSn57qmMjAtMzBzJykKICAgICAgICAgICAgcmV0MSA9IG9zLnN5c3RlbSgnaGFkb29wIGZzIC1nZXQgJXMnICUgTU9ERUxfSERGU19QQVRIKQogICAgICAgICAgICByZXQyID0gb3Muc3lzdGVtKCdoYWRvb3AgZnMgLWdldCAlcycgJSBNRDVfSERGU19QQVRIKQogICAgZWxzZToKICAgICAgICBwcmludCgn5bCd6K+V5LuOZnRwOi8veHh4Lnh4eC54eC54eDp4eOiOt+WPluaVsOaNricpCiAgICAgICAgcmV0MiA9IG9zLnN5c3RlbSgnd2dldCAtcSAtLXRpbWVvdXQ9MiAtLXRyaWVzPTEgLS1mdHAtdXNlcj0lcyAtLWZ0cC1wYXNzd29yZD0lcyAlcy9tb2RlbF9kYXRhLm1kNScgJQogICAgICAgICAgICAgICAgICAgICAgICAoVVNFUl9OQU1FLCBQQVNTV09SRCwgRlRQX1BBVEhfMikpCiAgICAgICAgaWYgcmV0MiA9PSAwOgogICAgICAgICAgICByZXQxID0gb3Muc3lzdGVtKCd3Z2V0IC0tZnRwLXVzZXI9JXMgLS1mdHAtcGFzc3dvcmQ9JXMgJXMvbW9kZWxfZGF0YS56aXAnICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVU0VSX05BTUUsIFBBU1NXT1JELCBGVFBfUEFUSF8yKSkKICAgIGlmIHJldDEgIT0gMCBvciByZXQyICE9IDA6CiAgICAgICAgcmV0dXJuIEZhbHNlCiAgICBpZiByZXQxID09IDAgYW5kIHJldDIgPT0gMDoKICAgICAgICBvcy5zeXN0ZW0oJ3VuemlwIC1xIG1vZGVsX2RhdGEuemlwJykKICAgICAgICBvcy5zeXN0ZW0oJ2NwIC1yIG1vZGVsX2RhdGEvZGF0YSAlcycgJSBTVEFUSUNfUk9PVCkKICAgICAgICBvcy5zeXN0ZW0oJ2NwIC1mIG1vZGVsX2RhdGEvYmVzdF9tb2RlbC50eHQgJXMnICUgREFUQV9QQVRIKQogICAgICAgIG9zLnN5c3RlbSgnY3AgLWYgbW9kZWxfZGF0YS5tZDUgJXMnICUgREFUQV9QQVRIKQogICAgICAgIG9zLnN5c3RlbSgncm0gLXIgbW9kZWxfZGF0YScpCiAgICAgICAgb3Muc3lzdGVtKCdybSBtb2RlbF9kYXRhLm1kNSonKQogICAgICAgIG9zLnN5c3RlbSgncm0gbW9kZWxfZGF0YS56aXAqJykKICAgICAgICBwcmludCgn5pWw5o2u5ZKM5qih5Z6L5LiL6L295oiQ5YqfJykKICAgICAgICByZXR1cm4gVHJ1ZQoKCmRlZiBnZXRfZGF0YV9tZDUoKToKICAgIGZvciBmbmFtZSBpbiBnbG9iLmdsb2IoJ21vZGVsX2RhdGEubWQ1KicpOgogICAgICAgIG9zLnJlbW92ZShmbmFtZSkKICAgIHJldCA9IC0xCgogICAgaWYgbm90IElQLnN0YXJ0c3dpdGgoJzEyNycpOgogICAgICAgIHJldCA9IG9zLnN5c3RlbSgnd2dldCAtcSAtLXRpbWVvdXQ9MiAtLXRyaWVzPTEgLS1mdHAtdXNlcj0lcyAtLWZ0cC1wYXNzd29yZD0lcyAlcy9tb2RlbF9kYXRhLm1kNScgJQogICAgICAgICAgICAgICAgICAgICAgICAoVVNFUl9OQU1FLCBQQVNTV09SRCwgRlRQX1BBVEhfMSkpCiAgICAgICAgaWYgcmV0ID09IDA6CiAgICAgICAgICAgIHNyYyA9ICdmdHAxJwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldCA9IG9zLnN5c3RlbSgnaGFkb29wIGZzIC1nZXQgL3VzZXIva2RkX3dhbmd5aWxlaS9jaHVua19zZWdtZW50b3IvbW9kZWxfZGF0YS5tZDUnKQogICAgICAgICAgICBpZiByZXQgPT0gMDoKICAgICAgICAgICAgICAgIHNyYyA9ICdoZGZzJwogICAgZWxzZToKICAgICAgICByZXQgPSBvcy5zeXN0ZW0oJ3dnZXQgLXEgLS10aW1lb3V0PTIgLS10cmllcz0xIC0tZnRwLXVzZXI9JXMgLS1mdHAtcGFzc3dvcmQ9JXMgJXMvbW9kZWxfZGF0YS5tZDUnICUgCiAgICAgICAgICAgICAgICAgICAgICAgIChVU0VSX05BTUUsIFBBU1NXT1JELCBGVFBfUEFUSF8yKSkKICAgICAgICBpZiByZXQgPT0gMDoKICAgICAgICAgICAgc3JjID0gJ2Z0cDInCiAgICBpZiByZXQgIT0gMDoKICAgICAgICBwcmludCgn6K+35a+75om+5LiA5Y+w5pyJaGFkb29w5oiW6ICF6IO96K6/6ZeuZnRwOi8veHh4Lnh4eC54eC54eDp4eOaIluiAhWZ0cDovL3h4eC54eHgueHgueHg6eHjnmoTmnLrlmagnKQogICAgICAgIHJldHVybiBOb25lCiAgICBlbHNlOgogICAgICAgIHJldHVybiBzcmMKCgpkZWYgdXBkYXRlKHNyYyk6CiAgICB3aXRoIG9wZW4oTUQ1X0ZJTEVfUEFUSCwgJ3JiJykgYXMgZjoKICAgICAgICBjdXJyZW50X2RhdGFfbWQ1ID0gZi5yZWFkbGluZXMoKVswXS5zdHJpcCgpCiAgICB3aXRoIG9wZW4oJ21vZGVsX2RhdGEubWQ1JywgJ3JiJykgYXMgZjoKICAgICAgICBsYXRlc3RfZGF0YV9tZDUgPSBmLnJlYWRsaW5lcygpWzBdLnN0cmlwKCkKICAgIHRyeToKICAgICAgICBpZiBjdXJyZW50X2RhdGFfbWQ1ICE9IGxhdGVzdF9kYXRhX21kNToKICAgICAgICAgICAgeCA9IGlucHV0KCflj5HnjrDmlrDnmoTmlbDmja7lkozmqKHlnovvvJ/mmK/lkKblhrPlrprkuIvovb3mm7TmlrDvvJ8gWWVzL05vPycpCiAgICAgICAgICAgIGlmIHggaW4gWydZZXMnLCAnWScsICd5JywgJ1lFUycsICcxJywgMSwgJ3llcyddIG9yIHggPT0gJyc6CiAgICAgICAgICAgICAgICBmbGFnID0gdXBkYXRlX2RhdGEoc3JjKQogICAgICAgICAgICAgICAgaWYgZmxhZzoKICAgICAgICAgICAgICAgICAgICBwcmludCgn5qih5Z6L5ZKM5a2X5YW45pWw5o2u5bey5pu05paw5Yiw5pyA5paw54mI5pysJykKICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHByaW50KCfluIzmnJvmgqjkuIvmrKHmnaXmm7TmlrDmlbDmja7vvIEnKQogICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgZXhjZXB0OgogICAgICAgIHJldHVybiBGYWxzZQoKCmRlZiB1cGRhdGVfZGF0YShzcmMpOgogICAgdHJ5OgogICAgICAgIGZvciBmbmFtZSBpbiBnbG9iLmdsb2IoJ21vZGVsX2RhdGEuemlwKicpOgogICAgICAgICAgICBvcy5yZW1vdmUoZm5hbWUpCiAgICAgICAgaWYgc3JjID09ICdoZGZzJzoKICAgICAgICAgICAgcHJpbnQoJ+WwneivleS7jmhkZnPkuIrmi4nlj5bmlbDmja7vvIzlpKfnuqYyMC0zMHMnKQogICAgICAgICAgICBvcy5zeXN0ZW0oJ2hhZG9vcCBmcyAtZ2V0IC91c2VyL3h4eHh4L2NodW5rX3NlZ21lbnRvci9tb2RlbF9kYXRhLnppcCcpCiAgICAgICAgZWxpZiBzcmMgPT0gJ2Z0cDEnOgogICAgICAgICAgICBwcmludCgn5bCd6K+V5LuOZnRwOi8veHh4Lnh4eC54eC54eDp4eOiOt+WPluaVsOaNricpCiAgICAgICAgICAgIG9zLnN5c3RlbSgnd2dldCAtLWZ0cC11c2VyPSVzIC0tZnRwLXBhc3N3b3JkPSVzICVzL21vZGVsX2RhdGEuemlwJyAlIChVU0VSX05BTUUsIFBBU1NXT1JELCBGVFBfUEFUSF8xKSkKICAgICAgICBlbGlmIHNyYyA9PSAnZnRwMic6CiAgICAgICAgICAgIHByaW50KCflsJ3or5Xku45mdHA6Ly94eHgueHh4Lnh4Lnh4Onh46I635Y+W5pWw5o2uJykKICAgICAgICAgICAgb3Muc3lzdGVtKCd3Z2V0IC0tZnRwLXVzZXI9JXMgLS1mdHAtcGFzc3dvcmQ9JXMgJXMvbW9kZWxfZGF0YS56aXAnICUgKFVTRVJfTkFNRSwgUEFTU1dPUkQsIEZUUF9QQVRIXzIpKQoKICAgICAgICBvcy5zeXN0ZW0oJ3VuemlwIC1xIG1vZGVsX2RhdGEuemlwJykKICAgICAgICBvcy5zeXN0ZW0oJ3JtIC1yICVzJyAlIERBVEFfUEFUSCkKICAgICAgICBvcy5zeXN0ZW0oJ2NwIC1yIG1vZGVsX2RhdGEvZGF0YSAlcycgJSBTVEFUSUNfUk9PVCkKICAgICAgICBvcy5zeXN0ZW0oJ2NwIC1mIG1vZGVsX2RhdGEvYmVzdF9tb2RlbC50eHQgJXMnICUgREFUQV9QQVRIKQogICAgICAgIG9zLnN5c3RlbSgnY3AgLWYgbW9kZWxfZGF0YS5tZDUgJXMnICUgREFUQV9QQVRIKQogICAgICAgIG9zLnN5c3RlbSgncm0gLXIgbW9kZWxfZGF0YScpCiAgICAgICAgb3Muc3lzdGVtKCdybSBtb2RlbF9kYXRhLm1kNSonKQogICAgICAgIG9zLnN5c3RlbSgncm0gbW9kZWxfZGF0YS56aXAqJykKICAgICAgICByZXR1cm4gVHJ1ZQogICAgZXhjZXB0OgogICAgICAgIHJldHVybiBGYWxzZQoKCmNoZWNrX3ZlcnNpb24oKQpmcm9tIC5zZWdtZW50IGltcG9ydCBDaHVua19TZWdtZW50b3IKPHxmaW1fc3VmZml4fD4KSU5JVF9QQVRIID0gb3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykKU1RBVElDX1JPT1QgPSBvcy5wYXRoLmRpcm5hbWUoSU5JVF9QQVRIKQpEQVRBX1BBVEggPSBQYXRoKFNUQVRJQ19ST09UKSAvICdkYXRhJwpNRDVfRklMRV9QQVRIID0gREFUQV9QQVRIIC8gJ21vZGVsX2RhdGEubWQ1Jwo8fGZpbV9lbmR8Pg=="]
["e37ecdf1829d27f54f05bea4e8f770b3564f428f-2","e37ecdf1829d27f54f05bea4e8f770b3564f428f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCgpmcm9tIG5tai5kYi52aWRlb19pbnNlcnRlciBpbXBvcnQgU2hvd0ZpbmRlcgpmcm9tIG5tai50YWJsZXMgaW1wb3J0IFZpZGVvUG9zdGVycywgVmlkZW9Qcm9wZXJ0aWVzLCBTeW5vcHNpc2VzLCBTaG93c1ZpZGVvcywgXAoJU2hvd3MsIFZpZGVvcywgU2hvd3NHZW5yZXMsIFNob3dzUGVyc29ucywgU2hvd0dyb3Vwc1Nob3dzCgoKX0xPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpkZWYgc2FmZWx5X2NsZWFuX2ZpbGUoZmlsZW5hbWUpOgoJdHJ5OgoJCW9zLnJlbW92ZShmaWxlbmFtZSkKCWV4Y2VwdDoKCQlfTE9HR0VSLmV4Y2VwdGlvbigiQ2Fubm90IHJlbW92ZSAlcyIsIGZpbGVuYW1lKQpjbGFzcyBNb3ZpZURCQ2xlYW5lcihTaG93RmluZGVyKToKCWRlZiBfX2luaXRfXyhzZWxmLCBkYiwgbWVkaWEpOgoJCVNob3dGaW5kZXIuX19pbml0X18oc2VsZiwgZGIsIG1lZGlhKQoKCWRlZiBjbGVhbihzZWxmLCBiYXNlX2Rpcik6CgkJaWYgbm90IHNlbGYuc2hvdzoKCQkJcmV0dXJuCgkJW3NlbGYuZGIuZGVsZXRlKHRvX3JlbW92ZSkgZm9yIHRvX3JlbW92ZSBpbiBzZWxmLmdldF9kYl9vYmplY3RzX2Zyb21fc2hvd19pZCgpXQoJCWZvciB0YWJsZSBpbiBbU2hvd3NHZW5yZXMsIFNob3dzUGVyc29ucywgU2hvd0dyb3Vwc1Nob3dzXToKCQkJZm9yIGVsZW1lbnQgaW4gc2VsZi5kYi5nZXRfdGFibGVzX2l0ZW1zKHRhYmxlLCBzaG93c19pZD1zZWxmLnNob3cuaWQpOgoJCQkJc2VsZi5kYi5kZWxldGUoZWxlbWVudCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoJCXBvc3RlciA9IHNlbGYuZGIuZ2V0X2ZpcnN0KFZpZGVvUG9zdGVycywgaWQ9c2VsZi5zaG93LmlkKQoJCWlmIHBvc3Rlci5wb3N0ZXI6CgkJCXNhZmVseV9jbGVhbl9maWxlKG9zLnBhdGguam9pbihiYXNlX2RpciwgcG9zdGVyLnBvc3RlcikpCgkJaWYgcG9zdGVyLnRodW1ibmFpbDoKPHxmaW1fZW5kfD4="]
["93a05a0e0129d68039eb45507c3cf909011bb800-1","93a05a0e0129d68039eb45507c3cf909011bb800","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IHJlcXVlc3RzCmZyb20gYnM0IGltcG9ydCBCZWF1dGlmdWxTb3VwLCBOYXZpZ2FibGVTdHJpbmcKCiMgRG93bmxvYWQgdGhlIHBhZ2UKcGFnZSA9IHJlcXVlc3RzLmdldCgiaHR0cHM6Ly93d3cuY2hyb21pdW0ub3JnL2Nocm9taXVtLW9zL2RldmVsb3Blci1pbmZvcm1hdGlvbi1mb3ItY2hyb21lLW9zLWRldmljZXMvIikKCnNvdXAgPSBCZWF1dGlmdWxTb3VwKHBhZ2UuY29udGVudCwgJ2h0bWwucGFyc2VyJykKdGFibGUgPSBzb3VwLmZpbmRfYWxsKCJ0YWJsZSIpWy0xXQoKU3VwcG9ydGVkQm9hcmRzID0gWyJuYW1pIiwgIm9jdG9wdXMiLCAidm9sdGVlciIsICJjb3JhbCIsICJyZWVmIiwgImhhdGNoIiwgInB1ZmYiXQo8fGZpbV9ob2xlfD4KICAgICAgICBpZiBjaGlsZC5jb250ZW50c1sxMV0udGV4dC5zdHJpcCgpLmxvd2VyKCkgaW4gU3VwcG9ydGVkQm9hcmRzOgogICAgICAgICAgICAjIE5ld2xpbmVzIGNvdW50IGFzIGVsZW1lbnRzLCBzbyB3ZSB1c2UgNSBpbnN0ZWFkIG9mIDMKICAgICAgICAgICAgbmFtZUVsZW1lbnQgPSBjaGlsZC5jb250ZW50c1s1XQogICAgICAgICAgICBuYW1lID0gbmFtZUVsZW1lbnQuYS50ZXh0LnN0cmlwKCkKICAgICAgICAgICAgaWYgbmFtZSAhPSAiIjoKICAgICAgICAgICAgICAgIHByaW50KGYiKiB7bmFtZX0iKQogICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgIGNvbnRpbnVlCjx8ZmltX3N1ZmZpeHw+Cgpmb3IgY2hpbGQgaW4gdGFibGUuY2hpbGRyZW46CiAgICB0cnk6CiAgICAgICAgI3ByaW50KGNoaWxkLmNvbnRlbnRzKQo8fGZpbV9lbmR8Pg=="]
["477bfdfa3e9f355ceef3732e23552b9617c46bb4-1","477bfdfa3e9f355ceef3732e23552b9617c46bb4","PHxmaW1fcHJlZml4fD4KIiIiIERlc2NyaXB0aW9uIGhlcmUKCkF1dGhvcjogTGVvbmFyZCBCZXJyYWRhCjx8ZmltX2hvbGV8PgppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBjb3B5CmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKCmZyb20gcmVncmVzc2lvbiBpbXBvcnQgUmVncmVzc2lvbk1vZGVsCgoKY2xhc3MgS2FsbWFuRmlsdGVyKFJlZ3Jlc3Npb25Nb2RlbCk6CiAgICAiIiIgc2ltcGxlIExpbmVhciBHYXVzc2lhbiBLYWxtYW4gRmlsdGVyIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAgZGF0YSwKICAgICAgICAgICAgICAgICBwKToKCiAgICAgICAgUmVncmVzc2lvbk1vZGVsLl9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpCgogICAgICAgIHNlbGYucCA9IHAKCiAgICBkZWYgZml0KHNlbGYpOgoKICAgICAgICBzZWxmLl9wcmVkX2RmID0gcGQuRGF0YUZyYW1lKCkKICAgICAgICBuX3ByZWQgPSBzZWxmLm5fdHJhaW5pbmcgKyBzZWxmLm5fdGVzdGluZyAtIHNlbGYucAogICAgICAgIHNlbGYuX3ByZWRfZGZbJ3lwcmVkJ10gPSBucC56ZXJvcyhuX3ByZWQpCiAgICAgICAgc2VsZi5fcHJlZF9kZlsneWVyciddID0gbnAuemVyb3Mobl9wcmVkKQoKICAgICAgICBzZWxmLmVtYmVkX2RhdGEoKQoKICAgICAgICBhX2hhdCA9IG5wLmFycmF5KFsxLl0gKyBbMC5dICogKHNlbGYucCAtIDEpKS5yZXNoYXBlKHNlbGYucCwgMSkKICAgICAgICBQX3VwID0gbnAuZXllKHNlbGYucCkKICAgICAgICBRID0gMC4xCiAgICAgICAgUiA9IDAuMQoKICAgICAgICBmb3IgaSBpbiByYW5nZShzZWxmLm5fdHJhaW5pbmcgLSBzZWxmLnApOgoKICAgICAgICAgICAgIyBwcmVkaWN0aW9uIHN0ZXAKICAgICAgICAgICAgUF9wcmVkID0gUF91cCArIFEKCiAgICAgICAgICAgICMgYXV4IHZhcmlhYmxlcwogICAgICAgICAgICBIID0gc2VsZi5ZX3RyYWluaW5nKHN0YXJ0PWksIHN0b3A9aSArIHNlbGYucCkucmVzaGFwZSgxLCBzZWxmLnApCiAgICAgICAgICAgIG9icyA9IGZsb2F0KHNlbGYuWV90cmFpbmluZyhbaSArIHNlbGYucF0pKQogICAgICAgICAgICBudSA9IG9icyAtIGZsb2F0KEguZG90KGFfaGF0KSkKICAgICAgICAgICAgUyA9IGZsb2F0KEguZG90KFBfcHJlZCkuZG90KEguVCkpICsgUgogICAgICAgICAgICBLID0gUF9wcmVkLmRvdChILlQpICogMS4gLyBTCiAgICAgICAgICAgIAogICAgICAgICAgICAjIHByZWRpY3QgZGF0YSB2YWx1ZQogICAgICAgICAgICBzZWxmLl9wcmVkX2RmWyd5cHJlZCddW2ldID0gZmxvYXQoSC5kb3QoYV9oYXQpKQoKICAgICAgICAgICAgIyB1cGRhdGUgc3RlcAogICAgICAgICAgICBhX2hhdCArPSBLICogbnUKICAgICAgICAgICAgUF91cCA9IChucC5leWUoc2VsZi5wKSAtIEsuZG90KEgpKS5kb3QoUF9wcmVkKQogICAgICAgICAgICAKICAgICAgICBzZWxmLl9hX2hhdCA9IGFfaGF0LmZsYXR0ZW4oKQogICAgICAgIAogICAgICAgIHkgPSBjb3B5LmNvcHkoc2VsZi5ZX3RyYWluaW5nKHN0YXJ0PS1zZWxmLnApKQogICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYubl90cmFpbmluZyAtIHNlbGYucCwgbl9wcmVkKToKICAgICAgICAgICAgcHJlZCA9IGZsb2F0KHNlbGYuX2FfaGF0LmRvdCh5KSkKICAgICAgICAgICAgeVs6LTFdID0geVsxOl0KICAgICAgICAgICAgeVstMV0gPSBwcmVkCiAgICAgICAgICAgIHNlbGYuX3ByZWRfZGZbJ3lwcmVkJ11baV0gPSBwcmVkCgogICAgICAgIGdyb3VuZF90cnV0aCA9IG5wLmNvbmNhdGVuYXRlKChzZWxmLllfdHJhaW5pbmcoc3RhcnQ9c2VsZi5wKSwgc2VsZi5ZX3Rlc3RpbmcoKSkpCiAgICAgICAgc2VsZi5fcHJlZF9kZlsieWVyciJdID0gZ3JvdW5kX3RydXRoIC0gc2VsZi5ZX3ByZWQoKQogICAgICAgIAoKICAgIAo8fGZpbV9zdWZmaXh8PgpEYXRlOiA2IE5vdiAyMDE1CiIiIgoKaW1wb3J0IG51bXB5IGFzIG5wCjx8ZmltX2VuZHw+"]
["e33c8ad6d4289bae32c5112e06c9c04fa08e54b9-4","e33c8ad6d4289bae32c5112e06c9c04fa08e54b9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKaW1wb3J0IFZMNTNMMVgKCnRvZiA9IFZMNTNMMVguVkw1M0wxWChpMmNfYnVzPTEsIGkyY19hZGRyZXNzPTB4MjkpCnRvZi5vcGVuKCkgIyBJbml0aWFsaXNlIHRoZSBpMmMgYnVzIGFuZCBjb25maWd1cmUgdGhlIHNlbnNvcgp0b2Yuc3RhcnRfcmFuZ2luZygxKSAjIFN0YXJ0IHJhbmdpbmcsIDEgPSBTaG9ydCBSYW5nZSwgMiA9IE1lZGl1bSBSYW5nZSwgMyA9IExvbmcgUmFuZ2UKCndoaWxlIFRydWU6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICBkaXN0YW5jZV9pbl9tbSA9IHRvZi5nZXRfZGlzdGFuY2UoKSAjIEdyYWIgdGhlIHJhbmdlIGluIG1tCiAgcHJpbnQoJ0Rpc3RhbmNlIChtbSk6IHswfScuZm9ybWF0KGRpc3RhbmNlX2luX21tKSkKICB0aW1lLnNsZWVwKDEpCjx8ZmltX2VuZHw+"]
["47614a9afa0969f7c6ae9c402ba035a101779566-4","47614a9afa0969f7c6ae9c402ba035a101779566","PHxmaW1fcHJlZml4fD4KIyBkYXkgNSBOdW1weQoKaW1wb3J0IG51bXB5IGFzIG5wCgoKZGVmIGludHJvZHVjdGlvbigpOgogICAgcHJpbnQoJ051bXB5IFZlcnNpb24nLCBucC5fX3ZlcnNpb25fXykKCgpkZWYgYXJyYXlfb3BlcmF0aW9uKCk6CiAgICBucC5yYW5kb20uc2VlZCgwKSAgIyBzZWVkIGZvciByZXByb2R1Y2liaWxpdHkKICAgIHgxID0gbnAucmFuZG9tLnJhbmRpbnQoMTAsIHNpemU9NikgICAgICAjIE9uZS1kaW1lbnNpb25hbCBhcnJheQogICAgeDIgPSBucC5yYW5kb20ucmFuZGludCgxMCwgc2l6ZT0oMywgNCkpICAjIFR3by1kaW1lbnNpb25hbCBhcnJheQogICAgeDMgPSBucC5yYW5kb20ucmFuZGludCgxMCwgc2l6ZT0oMywgNCwgNSkpICAjIFRocmVlLWRpbWVuc2lvbmFsIGFycmF5CgogICAgcHJpbnQoIngzIG5kaW06ICIsIHgzLm5kaW0pCiAgICBwcmludCgieDMgc2hhcGU6IiwgeDMuc2hhcGUpCiAgICBwcmludCgieDMgc2l6ZTogIiwgeDMuc2l6ZSkKICAgIHByaW50KCJkdHlwZToiLCB4My5kdHlwZSkKICAgIHByaW50KCJpdGVtc2l6ZToiLCB4My5pdGVtc2l6ZSwgImJ5dGVzIikKICAgIHByaW50KCJuYnl0ZXM6IiwgeDMubmJ5dGVzLCAiYnl0ZXMiKQoKICAgIHByaW50KCdYMScsIHgxKQogICAgcHJpbnQoJ3gxWzBdJywgeDFbMF0pCiAgICBwcmludCgneDFbLTFdJywgeDFbLTFdKQogICAgcHJpbnQoJ3gyJywgeDIpCiAgICBwcmludCgneDJbMCwwXScsIHgyWzAsIDBdKQogICAgcHJpbnQoJ3gyWzEsLTFdJywgeDJbMSwgLTFdKQogICAgeDJbMCwgMF0gPSAxMgogICAgcHJpbnQoJ3gyJywgeDIpCgoKZGVmIGFycmF5X3N1YigpOgogICAgeCA9IG5wLmFyYW5nZSgxMCkKICAgIHByaW50KCd4JywgeCkKICAgIHByaW50KCd4Wzo1XScsIHhbOjVdKQogICAgcHJpbnQoJ3hbNTpdJywgeFs1Ol0pCiAgICBwcmludCgneFszOjVdJywgeFszOjVdKQogICAgcHJpbnQoJ3hbOjoyXScsIHhbOjoyXSkKICAgIHByaW50KCd4WzE6OjJdJywgeFsxOjoyXSkKICAgIHByaW50KCd4Wzo6LTFdJywgeFs6Oi0xXSkKICAgIHByaW50KCd4WzU6Oi0yXScsIHhbNTo6LTJdKQoKICAgIHgyID0gbnAucmFuZG9tLnJhbmRpbnQoMTAsIHNpemU9KDMsIDQpKQogICAgcHJpbnQoJ3gyJywgeDIpCiAgICBwcmludCgneDJbOjIsIDozXScsIHgyWzoyLCA6M10pICAjIDJ4MwogICAgcHJpbnQoJ3gyWzozLCA6OjJdJywgeDJbOjMsIDo6Ml0pCiAgICBwcmludCgneDJbOjotMSwgOjotMV0nLCB4Mls6Oi0xLCA6Oi0xXSkKICAgIHByaW50KCd4Mls6LCAwXScsIHgyWzosIDBdKSAgIyBmaXJzdCBjb2x1bW4gb2YgeDIKICAgIHByaW50KCd4MlswLCA6XScsIHgyWzAsIDpdKSAgIyBmaXJzdCByb3cgb2YgeDIKICAgIHByaW50KHgyWzBdLCB4MlswXSkgICMgZXF1aXZhbGVudCB0byB4MlswLCA6XQoKICAgIHgyX3N1YiA9IHgyWzoyLCA6Ml0KICAgIHByaW50KCdzdWIsIHgyWzAsIDpdJywgeDJfc3ViKQogICAgeDJfc3ViWzAsIDBdID0gOTkKICAgIHByaW50KHgyX3N1YikKICAgIHByaW50KCd4MicsIHgyKSAgIyBTdWIgYXJyYXlzIGFzIG5vLWNvcHkgdmlld3MKICAgIHgyX3N1Yl9jb3B5ID0geDJbOjIsIDoyXS5jb3B5KCkgIyBDcmVhdGluZyBjb3BpZXMgb2YgYXJyYXlzCiAgICBwcmludCh4Ml9zdWJfY29weSkKCgpkZWYgYXJyYXlfcmVzaGFwZSgpOgogICAgeCA9IG5wLmFycmF5KFsxLCAyLCAzXSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcHJpbnQoJ3gnLCB4KQogICAgcmVzaGFwZTEgPSB4LnJlc2hhcGUoMSwgMykKICAgIHJlc2hhcGUyID0geFtucC5uZXdheGlzLCA6XQogICAgcmVzaGFwZTMgPSB4LnJlc2hhcGUoMywgMSkKPHxmaW1fZW5kfD4="]
["e343cf257949964c9082a774566498ae3e0411ed-4","e343cf257949964c9082a774566498ae3e0411ed","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHlhbWwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZXhhbXBsZV91cmwgPSB5YW1sLnNhZmVfbG9hZChvcGVuKCdleGFtcGxlLnlhbWwnLCAncmInKSkKPHxmaW1fZW5kfD4="]
["272a233e61e63b0e45a676f0fbf59eb03ffd614d-1","272a233e61e63b0e45a676f0fbf59eb03ffd614d","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzp1dGYtOCAtKi0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZnJvbSBkamFuZ28uY29yZS51cmxyZXNvbHZlcnMgaW1wb3J0IHJldmVyc2UKZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlc3BvbnNlUmVkaXJlY3QKCjx8ZmltX2VuZHw+"]
["4789f1e58c455f689527178df78a2269d7aff807-3","4789f1e58c455f689527178df78a2269d7aff807","PHxmaW1fcHJlZml4fD4KZnJvbSBtb2RlbGluZyBpbXBvcnQgKgpmcm9tIHBlcmlzdGltdWx1cyBpbXBvcnQgKgppbXBvcnQgc2VhYm9ybiBhcyBzbnMKZnJvbSBzY2lweS5zdGF0cyBpbXBvcnQgc3BlYXJtYW5yLCBzaGFwaXJvCmZyb20gc2tsZWFybi5saW5lYXJfbW9kZWwgaW1wb3J0IExvZ2lzdGljUmVncmVzc2lvbkNWCmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0IEdyaWRTZWFyY2hDViwgU3RyYXRpZmllZFNodWZmbGVTcGxpdApmcm9tIHNrbGVhcm4uY2FsaWJyYXRpb24gaW1wb3J0IENhbGlicmF0ZWRDbGFzc2lmaWVyQ1YKZnJvbSBza2xlYXJuLmVuc2VtYmxlIGltcG9ydCBSYW5kb21Gb3Jlc3RDbGFzc2lmaWVyCmZyb20gc2tsZWFybi5wcmVwcm9jZXNzaW5nIGltcG9ydCBTdGFuZGFyZFNjYWxlcgpmcm9tIHN0YXRzbW9kZWxzLnRzYS50c2F0b29scyBpbXBvcnQgbGFnbWF0CmZyb20gc2tsZWFybi5saW5lYXJfbW9kZWwgaW1wb3J0IExvZ2lzdGljUmVncmVzc2lvbgppbXBvcnQgc3RhdHNtb2RlbHMuYXBpIGFzIHNtCmltcG9ydCBtYXRwbG90bGliIGFzIG1wbAoKcGx0LnN1YnBsb3RzX2FkanVzdCh3c3BhY2U9MC4yLCBoc3BhY2U9MC4zKQptcGwucmNQYXJhbXNbJ2F4ZXMudGl0bGVzaXplJ10gPSAyMAptcGwucmNQYXJhbXNbJ2F4ZXMubGFiZWxzaXplJ10gPSAxOAptcGwucmNQYXJhbXNbJ3h0aWNrLmxhYmVsc2l6ZSddID0gMTgKbXBsLnJjUGFyYW1zWyd5dGljay5sYWJlbHNpemUnXSA9IDE4Cm1wbC5yY1BhcmFtc1sibGVnZW5kLmZvbnRzaXplIl0gPSAieC1sYXJnZSIKbXBsLnJjUGFyYW1zWydmaWd1cmUudGl0bGVzaXplJ10gPSAyMgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZGVmIHBpcGVsaW5lX2V4YW1wbGUoKToKICAgIGV4cGVyaW1lbnQgPSAnUHJvYlN3aXRjaCcKICAgIHJvb3QgPSAiL2NvbnRlbnQvZHJpdmUvTXlEcml2ZS9XaWxicmVjaHRMYWIvVTE5X3Byb2plY3QvYW5hbHlzaXMvIgo8fGZpbV9lbmR8Pg=="]
["1982ea9e66dde6c3db15c7069c9e77f3b63ae3f2-1","1982ea9e66dde6c3db15c7069c9e77f3b63ae3f2",{"$cut":{"chars":24044,"head":"PHxmaW1fcHJlZml4fD4KIiIiCiIiIgoKaW1wb3J0IFB5U3BpbgppbXBvcnQgb3MKaW1wb3J0IHRpbWUKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHN5cwppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKaW1wb3J0IGNzdgoKY2xhc3MgVHJpZ2dlclR5cGU6CglTT0ZUV0FSRSA9IDEKCUhBUkRXQVJFID0gMgoKQ0hPU0VOX1RSSUdHRVIgPSBUcmlnZ2VyVHlwZS5IQVJEV0FSRQoKY2xhc3MgQ2FtZXJhKCk6CglkZWYgX19pbml0X18oc2VsZik6CgkJcGFzcwoKCSMgZGVmIENvbmZpZ3VyZVRyaWdnZXIoY2FtZXJhKToKCSMgCSIiIgoJIyAJVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBjYW1lcmEgdG8gdXNlIGEgdHJpZ2dlci4gRmlyc3QsIHRyaWdnZXIgbW9kZSBpcwoJIyAJZW5zdXJlZCB0byBiZSBvZmYgaW4gb3JkZXIgdG8gc2VsZWN0IHRoZSB0cmlnZ2VyIHNvdXJjZS4gVHJpZ2dlciBtb2RlIGlzCgkjIAl0aGVuIGVuYWJsZWQsIHdoaWNoIGhhcyB0aGUgY2FtZXJhIGNhcHR1cmUgb25seSBhIHNpbmdsZSBpbWFnZSB1cG9uIHRoZQoJIyAJZXhlY3V0aW9uIG9mIHRoZSBjaG9zZW4gdHJpZ2dlci4KCSMgCSA6cGFyYW0gY2FtOiBDYW1lcmEgdG8gY29uZmlndXJlIHRyaWdnZXIgZm9yLgoJIyAJIDp0eXBlIGNhbTogQ2FtZXJhUHRyCgkjIAkgOnJldHVybjogVHJ1ZSBpZiBzdWNjZXNzZnVsLCBGYWxzZSBvdGhlcndpc2UuCgkjIAkgOnJ0eXBlOiBib29sCgkjIAkiIiIKCgkjIAlwcmludCgnKioqIENPTkZJR1VSSU5HIFRSSUdHRVIgKioqXG4nKQoJIyAJaWYgQ0hPU0VOX1RSSUdHRVIgPT0gVHJpZ2dlclR5cGUuU09GVFdBUkU6CgkjIAkJcHJpbnQoJ1NvZnR3YXJlIHRyaWdnZXIgY2hvc2VuLi4uJykKCSMgCWVsaWYgQ0hPU0VOX1RSSUdHRVIgPT0gVHJpZ2dlclR5cGUuSEFSRFdBUkU6CgkjIAkJcHJpbnQoJ0hhcmR3YXJlIHRyaWdnZXIgY2hvc2UuLi4nKQoKCSMgCXRyeToKCSMgCQlyZXN1bHQgPSBUcnVlCgkjIAkJIyBFbnN1cmUgdHJpZ2dlciBtb2RlIG9mZgoJIyAJCSMgVGhlIHRyaWdnZXIgbXVzdCBiZSBkaXNhYmxlZCBpbiBvcmRlciB0byBjb25maWd1cmUgd2hldGhlciB0aGUgc291cmNlCgkjIAkJIyBpcyBzb2Z0d2FyZSBvciBoYXJkd2FyZS4KCSMgCQlpZiBjYW1lcmEuVHJpZ2dlck1vZGUuR2V0QWNjZXNzTW9kZSgpICE9IFB5U3Bpbi5SVzoKCSMgCQkJcHJpbnQoJ1VuYWJsZSB0byBkaXNhYmxlIHRyaWdnZXIgbW9kZSAobm9kZSByZXRyaWV2YWwpLiBBYm9ydGluZy4uLicpCgkjIAkJCXJldHVybiBGYWxzZQoJIyAJCWNhbWVyYS5UcmlnZ2VyTW9kZS5TZXRWYWx1ZShQeVNwaW4uVHJpZ2dlck1vZGVfT2ZmKQoJIyAJCXByaW50KCdUcmlnZ2VyIG1vZGUgZGlzYWJsZWQuLi4nKQoKCSMgCQkjIFNlbGVjdCB0cmlnZ2VyIHNvdXJjZQoJIyAJCSMgVGhlIHRyaWdnZXIgc291cmNlIG11c3QgYmUgc2V0IHRvIGhhcmR3YXJlIG9yIHNvZnR3YXJlIHdoaWxlIHRyaWdnZXIKCSMgCQkjIG1vZGUgaXMgb2ZmLgoJIyAJCWlmIGNhbWVyYS5UcmlnZ2VyU291cmNlLkdldEFjY2Vzc01vZGUoKSAhPSBQeVNwaW4uUlc6CgkjIAkJCXByaW50KCdVbmFibGUgdG8gZ2V0IHRyaWdnZXIgc291cmNlIChub2RlIHJldHJpZXZhbCkuIEFib3J0aW5nLi4uJykKCSMgCQkJcmV0dXJuIEZhbHNlCgoJIyAJCWlmIENIT1NFTl9UUklHR0VSID09IFRyaWdnZXJUeXBlLlNPRlRXQVJFOgoJIyAJCQljYW1lcmEuVHJpZ2dlclNvdXJjZS5TZXRWYWx1ZShQeVNwaW4uVHJpZ2dlclNvdXJjZV9Tb2Z0d2FyZSkKCSMgCQllbGlmIENIT1NFTl9UUklHR0VSID09IFRyaWdnZXJUeXBlLkhBUkRXQVJFOgoJIyAJCQljYW1lcmEuVHJpZ2dlclNvdXJjZS5TZXRWYWx1ZShQeVNwaW4uVHJpZ2dlclNvdXJjZV9MaW5lMCkKCgkjIAkJIyBUdXJuIHRyaWdnZXIgbW9kZSBvbgoJIyAJCSMgT25jZSB0aGUgYXBwcm9wcmlhdGUgdHJpZ2dlciBzb3VyY2UgaGFzIGJlZW4gc2V0LCB0dXJuIHRyaWdnZXIgbW9kZQoJIyAJCSMgb24gaW4gb3JkZXIgdG8gcmV0cmlldmUgaW1hZ2VzIHVzaW5nIHRoZSB0cmlnZ2VyLgoJIyAJCWNhbWVyYS5UcmlnZ2VyTW9kZS5TZXRWYWx1ZShQeVNwaW4uVHJpZ2dlck1vZGVfT24pCgkjIAkJcHJpbnQoJ1RyaWdnZXIgbW9kZSB0dXJuZWQgYmFjayBvbi4uLicpCgoJIyAJZXhjZXB0IFB5U3Bpbi5TcGlubmFrZXJFeGNlcHRpb24gYXMgZXg6CgkjIAkJcHJpbnQoJ0Vycm9yOiAlcycgJSBleCkKCSMgCQlyZXR1cm4gRmFsc2UKCgkjIAlyZXR1cm4gcmVzdWx0CgoKCWRlZiBjb25maWd1cmVfY3VzdG9tX2ltYWdlX3NldHRpbmdzKHNlbGYsIGNhbSk6CgkgICAgIiIiCgkgICAgQ29uZmlndXJlcyBhIG51bWJlciBvZiBzZXR0aW5ncyBvbiB0aGUgY2FtZXJhIGluY2x1ZGluZyBvZmZzZXRzIFggYW5kIFksCgkgICAgd2lkdGgsIGhlaWdodCwgYW5kIHBpeGVsIGZvcm1hdC4gVGhlc2Ugc2V0dGluZ3MgbXVzdCBiZSBhcHBsaWVkIGJlZm9yZQoJICAgIEJlZ2luQWNxdWlzaXRpb24oKSBpcyBjYWxsZWQ7IG90aGVyd2lzZSwgdGhvc2Ugbm9kZXMgd291bGQgYmUgcmVhZCBvbmx5LgoJICAgIEFsc28sIGl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgc2V0dGluZ3MgYXJlIGFwcGxpZWQgaW1tZWRpYXRlbHkuCgkgICAgVGhpcyBtZWFucyBpZiB5b3UgcGxhbiB0byByZWR1Y2UgdGhlIHdpZHRoIGFuZCBtb3ZlIHRoZSB4IG9mZnNldCBhY2NvcmRpbmdseSwKCSAgICB5b3UgbmVlZCB0byBhcHBseSBzdWNoIGNoYW5nZXMgaW4gdGhlIGFwcHJvcHJpYXRlIG9yZGVyLgoKCSAgICA6cGFyYW0gY2FtOiBDYW1lcmEgdG8gY29uZmlndXJlIHNldHRpbmdzIG9uLgoJICAgIDp0eXBlIGNhbTogQ2FtZXJhUHRyCgkgICAgOnJldHVybjogVHJ1ZSBpZiBzdWNjZXNzZnVsLCBGYWxzZSBvdGhlcndpc2UuCgkgICAgOnJ0eXBlOiBib29sCgkgICAgIiIiCgkgICAgcHJpbnQoJ1xuKioqIENPTkZJR1VSSU5HIENVU1RPTSBJTUFHRSBTRVRUSU5HUyAqKipcbicpCgoJICAgIHRyeToKCSAgICAgICAgcmVzdWx0ID0gVHJ1ZQoKCSAgICAgICAgIyBBcHBseSBtb25vIDggcGl4ZWwgZm9ybWF0CgkgICAgICAgICMK"}}]
["192712aeb0619854a5fae671c10ef3432291cc50-1","192712aeb0619854a5fae671c10ef3432291cc50",{"$cut":{"chars":26048,"head":"PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiMgRGVmaW5lIHlvdXIgaXRlbSBwaXBlbGluZXMgaGVyZQojCiMgRG9uJ3QgZm9yZ2V0IHRvIGFkZCB5b3VyIHBpcGVsaW5lIHRvIHRoZSBJVEVNX1BJUEVMSU5FUyBzZXR0aW5nCiMgU2VlOiBodHRwOi8vZG9jLnNjcmFweS5vcmcvZW4vbGF0ZXN0L3RvcGljcy9pdGVtLXBpcGVsaW5lLmh0bWwKCjx8ZmltX2hvbGV8PgoKCmNsYXNzIENpdHlEYXRhU3BpZGVyUGlwZWxpbmUob2JqZWN0KToKCiAgICBkZWYgX19pbml0X18oc2VsZik6CgogICAgICAgIGNvbm5lY3Rpb24gPSBweW1vbmdvLk1vbmdvQ2xpZW50KGhvc3Q9c2V0dGluZ3NbJ01PTkdPREJfU0VSVkVSJ10scG9ydD1zZXR0aW5nc1snTU9OR09EQl9QT1JUJ10pCiAgICAgICAgZGIgPSBjb25uZWN0aW9uW3NldHRpbmdzWydNT05HT0RCX0RCJ11dCiAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gZGJbc2V0dGluZ3NbJ0NJVFlEQVRBX0NPTExFQ1RJT04nXV0KCiAgICBkZWYgb3Blbl9zcGlkZXIoc2VsZiwgc3BpZGVyKToKICAgICAgICBwcmludCgnb3BlbicpCgogICAgZGVmIGNsb3NlX3NwaWRlcihzZWxmLCBzcGlkZXIpOgogICAgICAgIHByaW50KCdjbG9zZScpCgogICAgQGNoZWNrX3NwaWRlcl9waXBlbGluZQogICAgZGVmIHByb2Nlc3NfaXRlbShzZWxmLCBpdGVtLCBzcGlkZXIpOgogICAgICAgIHByaW50KCJDaXR5RGF0YVNwaWRlclBpcGVsaW5lIikKICAgICAgICB0eHQgPSAnJydbCnsicHJvdl9OYW1lIjoi5a6J5b6955yBIiwiY2l0eV9OYW1lIjoi5a6J5bqG5biCIiwicHJvdl9JZCI6IjM0IiwiY2l0eV9JZCI6IjA4In0KLHsicHJvdl9OYW1lIjoi5a6J5b6955yBIiwiY2l0eV9OYW1lIjoi6ams6Z6N5bGx5biCIiwicHJvdl9JZCI6IjM0IiwiY2l0eV9JZCI6IjA1In0KLHsicHJvdl9OYW1lIjoi5a6J5b6955yBIiwiY2l0eV9OYW1lIjoi5ZCI6IKl5biCIiwicHJvdl9JZCI6IjM0IiwiY2l0eV9JZCI6IjAxIn0KLHsicHJvdl9OYW1lIjoi5a6J5b6955yBIiwiY2l0eV9OYW1lIjoi5a6J5b6955yBIiwicHJvdl9JZCI6IjM0IiwiY2l0eV9JZCI6IjAwIn0KLHsicHJvdl9OYW1lIjoi5a6J5b6955yBIiwiY2l0eV9OYW1lIjoi5reu5Y2X5biCIiwicHJvdl9JZCI6IjM0IiwiY2l0eV9JZCI6IjA0In0KLHsicHJvdl9OYW1lIjoi5a6J5b6955yBIiwiY2l0eV9OYW1lIjoi5reu5YyX5biCIiwicHJvdl9JZCI6IjM0IiwiY2l0eV9JZCI6IjA2In0KLHsicHJvdl9OYW1lIjoi5a6J5b6955yBIiwiY2l0eV9OYW1lIjoi5YWt5a6J5biCIiwicHJvdl9JZCI6IjM0IiwiY2l0eV9JZCI6IjE1In0KLHsicHJvdl9OYW1lIjoi5a6J5b6955yBIiwiY2l0eV9OYW1lIjoi5ruB5bee5biCIiwicHJvdl9JZCI6IjM0IiwiY2l0eV9JZCI6IjExIn0KLHsicHJvdl9OYW1lIjoi5a6J5b6955yBIiwiY2l0eV9OYW1lIjoi5Lqz5bee5biCIiwicHJvdl9JZCI6IjM0IiwiY2l0eV9JZCI6IjE2In0KLHsicHJvdl9OYW1lIjoi5a6J5b6955yBIiwiY2l0eV9OYW1lIjoi6Iqc5rmW5biCIiwicHJvdl9JZCI6IjM0IiwiY2l0eV9JZCI6IjAyIn0KLHsicHJvdl9OYW1lIjoi5a6J5b6955yBIiwiY2l0eV9OYW1lIjoi6Zic6Ziz5biCIiwicHJvdl9JZCI6IjM0IiwiY2l0eV9JZCI6IjEyIn0KLHsicHJvdl9OYW1lIjoi5YyX5Lqs5biCIiwiY2l0eV9OYW1lIjoi5YyX5Lqs5biCIiwicHJvdl9JZCI6IjExIiwiY2l0eV9JZCI6IjAwIn0KLHsicHJvdl9OYW1lIjoi5YyX5Lqs5biCIiwiY2l0eV9OYW1lIjoi5biC6L6W5Yy6IiwicHJvdl9JZCI6IjExIiwiY2l0eV9JZCI6IjAxIn0KLHsicHJvdl9OYW1lIjoi56aP5bu655yBIiwiY2l0eV9OYW1lIjoi6I6G55Sw5biCIiwicHJvdl9JZCI6IjM1IiwiY2l0eV9JZCI6IjAzIn0KLHsicHJvdl9OYW1lIjoi56aP5bu655yBIiwiY2l0eV9OYW1lIjoi6b6Z5bKp5biCIiwicHJvdl9JZCI6IjM1IiwiY2l0eV9JZCI6IjA4In0KLHsicHJvdl9OYW1lIjoi56aP5bu655yBIiwiY2l0eV9OYW1lIjoi5Y2X5bmz5biCIiwicHJvdl9JZCI6IjM1IiwiY2l0eV9JZCI6IjA3In0KLHsicHJvdl9OYW1lIjoi56aP5bu655yBIiwiY2l0eV9OYW1lIjoi5a6B5b635biCIiwicHJvdl9JZCI6IjM1IiwiY2l0eV9JZCI6IjA5In0KLHsicHJvdl9OYW1lIjoi56aP5bu655yBIiwiY2l0eV9OYW1lIjoi5LiJ5piO5biCIiwicHJvdl9JZCI6IjM1IiwiY2l0eV9JZCI6IjA0In0KLHsicHJvdl9OYW1lIjoi56aP5bu655yBIiwiY2l0eV9OYW1lIjoi56aP5bu655yBIiwicHJvdl9JZCI6IjM1IiwiY2l0eV9JZCI6IjAwIn0KLHsicHJvdl9OYW1lIjoi56aP5bu655yBIiwiY2l0eV9OYW1lIjoi5Y6m6Zeo5biCIiwicHJvdl9JZCI6IjM1IiwiY2l0eV9JZCI6IjAyIn0KLHsicHJvdl9OYW1lIjoi56aP5bu655yBIiwiY2l0eV9OYW1lIjoi5ryz5bee5biCIiwicHJvdl9JZCI6IjM1IiwiY2l0eV9JZCI6IjA2In0KLHsicHJvdl9OYW1lIjoi56aP5bu655yBIiwiY2l0eV9OYW1lIjoi56aP5bee5biCIiwicHJvdl9JZCI6IjM1IiwiY2l0eV9JZCI6IjAxIn0KLHsicHJvdl9OYW1lIjoi56aP5bu655yBIiwiY2l0eV9OYW1lIjoi5rOJ5bee5biCIiwicHJvdl9JZCI6IjM1IiwiY2l0eV9JZCI6IjA1In0KLHsicHJvdl9OYW1lIjoi55SY6IKD55yBIiwiY2l0eV9OYW1lIjoi5aSp5rC05biCIiwicHJvdl9JZCI6IjYyIiwiY2l0eV9JZCI6IjA1In0KLHsicHJvdl9OYW1lIjoi55SY6IKD55yBIiwiY2l0eV9OYW1lIjoi55SY6IKD55yBIiwicHJvdl9JZCI6IjYyIiwiY2l0eV9JZCI6IjAwIn0KLHsicHJvdl9OYW1lIjoi55SY6IKD55yBIiwiY2l0eV9OYW1lIjoi5ZiJ5bOq5YWz5biCIiwicHJvdl9JZCI6IjYyIiwiY2l0eV9JZCI6IjAyIn0KLHsicHJvdl9OYW1lIjoi55SY6IKD55yBIiwiY2l0eV9OYW1lIjoi5YWw5bee5biCIiwicHJvdl9JZCI6IjYyIiwiY2l0eV9JZCI6IjAxIn0KLHsicHJvdl9OYW1lIjoi5bm/5Lic55yBIiwiY2l0eV9OYW1lIjoi5o+t6Ziz5biCIiwicHJvdl9JZCI6IjQ0IiwiY2l0eV9JZCI6IjUyIn0KLHsicHJvdl9OYW1lIjoi5bm/5Lic55yBIiwiY2l0eV9OYW1lIjoi5bm/5bee5biCIiwi"}}]
["9a6389d567df466ff57566286b5344a953fc42bb-3","9a6389d567df466ff57566286b5344a953fc42bb","PHxmaW1fcHJlZml4fD4KZnJvbSB0b29sLnJ1bm5lcnMucHl0aG9uIGltcG9ydCBTdWJtaXNzaW9uUHkKCjx8ZmltX2hvbGV8PgogICAgICAgIHJldHVybiBzdW0oWwogICAgICAgICAgICAoaW50KGwpIC8vIDMgLSAyKSBmb3IgbCBpbiBzLnN0cmlwKCkuc3BsaXQoJ1xuJykKICAgICAgICBdKQo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgQXlvdWJTdWJtaXNzaW9uKFN1Ym1pc3Npb25QeSk6CgogICAgZGVmIHJ1bihzZWxmLCBzKToKPHxmaW1fZW5kfD4="]
["cdc4ba095ec4b6bce991bb274c1c6a357771c7a4-1","cdc4ba095ec4b6bce991bb274c1c6a357771c7a4","PHxmaW1fcHJlZml4fD4KY2xhc3MgU29sdXRpb246CiAgICBkZWYgdG9Mb3dlckNhc2Uoc2VsZiwgcyk6CiAgICAgICAgaGVscGVyID0gJycKICAgICAgICBmb3IgaSBpbiBzOgogICAgICAgICAgICBpZiBvcmQoJ0EnKSA8PSBvcmQoaSkgPD0gb3JkKCdaJyk6CiAgICAgICAgICAgICAgICBoZWxwZXIgKz0gY2hyKG9yZChpKSArIDMyKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgaGVscGVyICs9IGkKICAgICAgICByZXR1cm4gaGVscGVyCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpzbHUgPSBTb2x1dGlvbigpCnByaW50KHNsdS50b0xvd2VyQ2FzZSgiSGVsbG9aIikpCjx8ZmltX2VuZHw+"]
["4752ea442a1395951ca79e5771ea2197b42b849f-1","4752ea442a1395951ca79e5771ea2197b42b849f","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiVGVtcGxhdGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciBzcGhpbngKCkluc3RydWN0aW9uczoKCjEuIENvcHkKPHxmaW1faG9sZXw+CmltcG9ydCBwa2dfcmVzb3VyY2VzCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCgoKcHJvamVjdCA9ICdjb250ZXh0cGx1cycKYXV0aG9yID0gJ0FkYW0gJiBQYXVsIFB0eSBMdGQnCgphdXRvY2xhc3NfY29udGVudCA9ICdib3RoJwpleHRlbnNpb25zID0gWwogICAgJ3NwaGlueC5leHQuYXV0b2RvYycsCiAgICAnc3BoaW54LmV4dC52aWV3Y29kZScsCiAgICAnc3BoaW54LmV4dC5uYXBvbGVvbicsCl0KdGVtcGxhdGVzX3BhdGggPSBbJ190ZW1wbGF0ZXMnXQpzb3VyY2Vfc3VmZml4ID0gJy5yc3QnCm1hc3Rlcl9kb2MgPSAnaW5kZXgnCmNvcHlyaWdodCA9IHUne30sIHt9Jy5mb3JtYXQoZGF0ZXRpbWUubm93KCkueWVhciwgYXV0aG9yKQp2ZXJzaW9uID0gcGtnX3Jlc291cmNlcy5nZXRfZGlzdHJpYnV0aW9uKHByb2plY3QpLnZlcnNpb24KcmVsZWFzZSA9IHZlcnNpb24KbGFuZ3VhZ2UgPSBOb25lCmV4Y2x1ZGVfcGF0dGVybnMgPSBbJ19idWlsZCddCnB5Z21lbnRzX3N0eWxlID0gJ3NwaGlueCcKdG9kb19pbmNsdWRlX3RvZG9zID0gRmFsc2UKaHRtbF90aGVtZSA9ICdzcGhpbnhfcnRkX3RoZW1lJwpodG1sX3N0YXRpY19wYXRoID0gWydfc3RhdGljJ10KaHRtbGhlbHBfYmFzZW5hbWUgPSBwcm9qZWN0CmF1dG9kb2NfbWVtYmVyX29yZGVyID0gJ2J5c291cmNlJwphdXRvY2xhc3NfY29udGVudCA9ICdjbGFzcycKCmRlZiBzZXR1cChhcHApOgogICAgYXBwLmFkZF9zdHlsZXNoZWV0KCdjdXN0b20uY3NzJykKPHxmaW1fc3VmZml4fD4KMi4gVXBkYXRlIGBgcHJvamVjdGBgIGFuZCBgYGF1dGhvcmBgIHZhbHVlcyBhcyBhcHByb3ByaWF0ZQozLiBTYXZlIGFzIGBgZG9jcy9jb25mLnB5YGAKIiIiCgo8fGZpbV9lbmR8Pg=="]
["9a32b7fd264fb37391694400d9b816c431cba8d3-1","9a32b7fd264fb37391694400d9b816c431cba8d3","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKZnJvbSBvcyBpbXBvcnQgZ2V0cGlkCmZyb20gb3MucGF0aCBpbXBvcnQgaXNmaWxlLCBpc2Rpciwgam9pbgoKZnJvbSBzdGF0aWNfYWlkIGltcG9ydCBjb25maWcsIHV0aWxzCmZyb20gc3RhdGljX2FpZC5EYXRhRXh0cmFjdG9yIGltcG9ydCBEYXRhRXh0cmFjdG9yCgpkZWYgdGVzdF9pc19ydW5uaW5nKCk6CiAgICBleHRyYWN0b3IgPSBEYXRhRXh0cmFjdG9yKCkKICAgIHV0aWxzLnJlbW92ZV9maWxlX29yX2Rpcihjb25maWcuUElEX0ZJTEVfUEFUSCkKICAgIGFzc2VydCBleHRyYWN0b3IuaXNfcnVubmluZygpID09IEZhbHNlLCAiTm8gUElEIGZpbGUiCiAgICB3aXRoIG9wZW4oY29uZmlnLlBJRF9GSUxFX1BBVEgsICJ3IikgYXMgcGlkX2ZpbGU6CiAgICAgICAgcGlkX2ZpbGUud3JpdGUoIiIpCiAgICBhc3NlcnQgZXh0cmFjdG9yLmlzX3J1bm5pbmcoKSA9PSBGYWxzZSwgIkludmFsaWQgUElEIG51bWJlciIKICAgIHdpdGggb3Blbihjb25maWcuUElEX0ZJTEVfUEFUSCwgInciKSBhcyBwaWRfZmlsZToKICAgICAgICBwaWRfZmlsZS53cml0ZShzdHIoZ2V0cGlkKCkpKQogICAgYXNzZXJ0IGV4dHJhY3Rvci5pc19ydW5uaW5nKCkgPT0gVHJ1ZSwgIkN1cnJlbnQgcHJvY2VzcyIKCmRlZiB0ZXN0X3JlZ2lzdGVyX3BpZCgpOgogICAgZXh0cmFjdG9yID0gRGF0YUV4dHJhY3RvcigpCiAgICBleHRyYWN0b3IucmVnaXN0ZXJfcGlkKCkKICAgIGFzc2VydCBpc2ZpbGUoY29uZmlnLlBJRF9GSUxFX1BBVEgpCiAgICB3aXRoIG9wZW4oY29uZmlnLlBJRF9GSUxFX1BBVEgsICJyIikgYXMgcGlkX2ZpbGU6CiAgICAgICAgYXNzZXJ0IHN0cihnZXRwaWQoKSkgaW4gW2wgZm9yIGwgaW4gcGlkX2ZpbGVdCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRlZiB0ZXN0X21ha2VfZGVzdGluYXRpb25zKCk6CiAgICBmb3IgayBpbiBjb25maWcuZGVzdGluYXRpb25zOgogICAgICAgIHV0aWxzLnJlbW92ZV9maWxlX29yX2Rpcihqb2luKGNvbmZpZy5EQVRBX0RJUiwgY29uZmlnLmRlc3RpbmF0aW9uc1trXSkpCiAgICBEYXRhRXh0cmFjdG9yKCkubWFrZV9kZXN0aW5hdGlvbnMoKQo8fGZpbV9lbmR8Pg=="]
["20fcb621223e6f5b92082be931de569811937e70-3","20fcb621223e6f5b92082be931de569811937e70","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgojIDNyZCBwYXJ0eSBtb2R1bGVzCmZyb20gZmxhc2sgaW1wb3J0IEZsYXNrLCBmbGFzaCwgcmVkaXJlY3QsIHJlbmRlcl90ZW1wbGF0ZSwgdXJsX2Zvcgpmcm9tIGZsYXNrX2xvZ2luIGltcG9ydCAoTG9naW5NYW5hZ2VyLCBVc2VyTWl4aW4sIGN1cnJlbnRfdXNlciwgbG9naW5fcmVxdWlyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpbl91c2VyLCBsb2dvdXRfdXNlcikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIGZsYXNrX3d0ZiBpbXBvcnQgRmxhc2tGb3JtCmZyb20gd3Rmb3JtcyBpbXBvcnQgQm9vbGVhbkZpZWxkLCBQYXNzd29yZEZpZWxkLCBTdHJpbmdGaWVsZCwgU3VibWl0RmllbGQKCmFwcCA9IEZsYXNrKF9fbmFtZV9fKQo8fGZpbV9lbmR8Pg=="]
["27e90addd45a019e8c112aa8364c29c2a453e6ec-1","27e90addd45a019e8c112aa8364c29c2a453e6ec","PHxmaW1fcHJlZml4fD4KRE9JX0xJU1QgPSBbCiAgICAiaHR0cHM6Ly9kb2kub3JnLzEwLjM0MDMvYnNlbmlzbzkyMzMiLAogICAgImh0dHBzOi8vZG9pLm9yZy8xMC4xMDE2L3MxODc0LTU1OHgoMDQpODAwNTItNiIsCiAgICAiaHR0cHM6Ly9kb2kub3JnLzEwLjEwMDIvOTc4MTQ0NDM0MTg1MC5jaDMiLAogICAgImh0dHBzOi8vZG9pLm9yZy8xMC4xMDE2L2I5NzgtMC0xMi00MTcwMTItNC4wMDAyOS02IiwKICAgICJodHRwczovL2RvaS5vcmcvMTAuMzQwMy8wMTA5NTA2MyIsCiAgICAiaHR0cHM6Ly9kb2kub3JnLzEwLjEwMTYvYjk3OC0wLTEyLTM3NDQwNy00LjAwMDc2LTUiLAogICAgImh0dHBzOi8vZG9pLm9yZy8xMC4xMDE2L2ouZm9vZGh5ZC4yMDA4LjA4LjAxNiIsCiAgICAiaHR0cDovL2R4LmRvaS5vcmcvMTAuMjA5MTQvMjMxMC0xMjAyLTIwMTYtNC0xMzUtMTQwIiwKICAgICJodHRwOi8vZHguZG9pLm9yZy8xMC4xNTkwL1MwMTA0LTY2MzIyMDA4MDAwMjAwMDA4IiwKICAgICJodHRwOi8vZHguZG9pLm9yZy8xMC4xMzcxL2pvdXJuYWwucG9uZS4wMDU3Njk2IiwKICAgICJodHRwOi8vZHguZG9pLm9yZy8xMC4xNDI5NS8yMjM4LTY0MTYudjcxaTQuNTExIiwKICAgICJodHRwOi8vZHguZG9pLm9yZy8xMC40MDgxL2lqYXMuMjAwOS5zMi40NTAiLAogICAgImh0dHBzOi8vZG9pLm9yZy8xMC4zNDAzc3RyaW5nL2JzZW5pc285MjMzIiwKICAgICJodHRwczovL2RvaS5vcmcvMTAuMzQwMy45OTkvYnNlbmlzbzkyMzMiLAogICAgIkhUVFBTOi8vRE9JLk9SRy8xMC4zNDAzL0JTRU5JU085MjMzIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVE9ETzogZG8gd2Ugbm9ybWFsaXNlIGNhc2Ugb24gc2F2ZT8KXQoKSEFORExFX0xJU1QgPSBbCiAgICAiaHR0cDovL2hkbC5oYW5kbGUubmV0LzEwLjEwMDAvMTgyIiwKICAgICMiaHR0cDovL2hkbC5oYW5kbGUubmV0LzEwNTY4Lzg5OTI4IiwgICAgICAgIyBGSVhNRTogb3BlbiBxdWVzdGlvbiB3aGV0aGVyIHdlIHNob3VsZCBzdXBwb3J0IHByZWZpeGVzIG90aGVyIHRoYW4gMTAuCiAgICAjImh0dHA6Ly9oZGwuaGFuZGxlLm5ldC8xODkzLzIzNjAxIiwKICAgICMiaHR0cDovL2hkbC5oYW5kbGUubmV0LzIxMzQvNjk5NyIKXQoKSU5WQUxJRF9ET0lfTElTVCA9IFsKICAgICJUaGlzIGlzIG5vdCBhIERPSSBvciBoYW5kbGUiLAogICAgImh0dHBzOi8vZG9hai5vcmciLAogICAgImh0dHA6Ly9keC5kb2kub3JnIiwKICAgICJodHRwczovL2RvaS5vcmciLAogICAgImh0dHBzOi8vZHguZG9pLm9yZy9pbnZhbGlkIiwKICAgICJodHRwOi8vaGQmLmhhbmRsZS5uZXQvMTAuMTIzNC81NjciLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAiaHR0cHg6Ly9kb2kub3JnLzEwLjM0MDMvYnNlbmlzbzkyMzMiLAogICAgImh0dHBzOi9kb2kub3JnLzEwLjM0MDMvYnNlbmlzbzkyMzMiLAogICAgImh0dHBzOi8vZG9pLm9yZy8xMC4zNDAzIiwKICAgICJodHRwczovL2RvaS5vcmcudWsvMTAuMzQwMy9ic2VuaXNvOTIzMyIsCjx8ZmltX2VuZHw+"]
["47725b021e716a68c7711b2670e062831e672ae6-2","47725b021e716a68c7711b2670e062831e672ae6",{"$cut":{"chars":40452,"head":"PHxmaW1fcHJlZml4fD4KIiIiCiM7KyAKIzsgTkFNRToKIzsgaWdtZ3Vlc3NlcwojOyAgICBWZXJzaW9uIDEuMAojOwojOyBQVVJQT1NFOgojOyAgICBNb2R1bGUgZm9yIExpbmVJRHMgYW5kIEluaXRpYWwgZ3Vlc3NlcyBpbiBJR00gc3BlY3RyYSB3aXRoIFFUCiM7ICAgICAgTGlrZWx5IG9ubHkgdXNlZnVsIGZvciBsb3d6LUlHTQojOyAgIDE0LUF1Zy0yMDE1IGJ5IEpYUAojOy0KIzstIE5UOiBOZXcgdmVyc2lvbiB1c2luZyBsaW5ldG9vbHMnIEFic0NvbXBvbmVudAojOy0KIzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIiIiCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24sIGFic29sdXRlX2ltcG9ydCwgZGl2aXNpb24sIHVuaWNvZGVfbGl0ZXJhbHMKCiMgSW1wb3J0IGxpYnJhcmllcwppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHdhcm5pbmdzLCBpbXAKaW1wb3J0IGNvcHkKCmZyb20gUHlRdDQgaW1wb3J0IFF0R3VpCmZyb20gUHlRdDQgaW1wb3J0IFF0Q29yZQoKZnJvbSBtYXRwbG90bGliLmJhY2tlbmRzLmJhY2tlbmRfcXQ0YWdnIGltcG9ydCBGaWd1cmVDYW52YXNRVEFnZyBhcyBGaWd1cmVDYW52YXMKIyBNYXRwbG90bGliIEZpZ3VyZSBvYmplY3QKZnJvbSBtYXRwbG90bGliLmZpZ3VyZSBpbXBvcnQgRmlndXJlCgoKZnJvbSBhc3Ryb3B5LnVuaXRzIGltcG9ydCBRdWFudGl0eQpmcm9tIGFzdHJvcHkgaW1wb3J0IHVuaXRzIGFzIHUKZnJvbSBhc3Ryb3B5IGltcG9ydCBjb25zdGFudHMgYXMgY29uc3QKZnJvbSBhc3Ryb3B5LmNvb3JkaW5hdGVzIGltcG9ydCBTa3lDb29yZAoKZnJvbSBsaW5ldG9vbHMuYW5hbHlzaXMgaW1wb3J0IHZvaWd0IGFzIGxhdgpmcm9tIGxpbmV0b29scy5saXN0cy5saW5lbGlzdCBpbXBvcnQgTGluZUxpc3QKZnJvbSBsaW5ldG9vbHMuc3BlY3RyYS54c3BlY3RydW0xZCBpbXBvcnQgWFNwZWN0cnVtMUQKZnJvbSBsaW5ldG9vbHMuc3BlY3RyYWxsaW5lIGltcG9ydCBBYnNMaW5lCmZyb20gbGluZXRvb2xzLmlzZ20uYWJzY29tcG9uZW50IGltcG9ydCBBYnNDb21wb25lbnQKZnJvbSBsaW5ldG9vbHMuZ3VpcyBpbXBvcnQgdXRpbHMgYXMgbHRndQpmcm9tIGxpbmV0b29scy5ndWlzIGltcG9ydCBsaW5lX3dpZGdldHMgYXMgbHRnbApmcm9tIGxpbmV0b29scy5ndWlzIGltcG9ydCBzaW1wbGVfd2lkZ2V0cyBhcyBsdGdzbQpmcm9tIGxpbmV0b29scyBpbXBvcnQgdXRpbHMgYXMgbHR1Cgpmcm9tIHhhc3Ryb3B5LnBsb3R0aW5nIGltcG9ydCB1dGlscyBhcyB4cHV0aWxzCgpmcm9tIHhhc3Ryb3B5Lnh1dGlscyBpbXBvcnQgeGRlYnVnIGFzIHhkYgoKeGFfcGF0aCA9IGltcC5maW5kX21vZHVsZSgneGFzdHJvcHknKVsxXQoKIyBHbG9iYWwgdmFyaWFibGVzOyBkZWZpbmVkIGFzIGdsb2JhbHMgbWFpbmx5IHRvIGluY3JlYXNlIHNwZWVkCmNfbWtzID0gY29uc3QuYy50bygna20vcycpLnZhbHVlCkNPTE9SX01PREVMID0gJyM5OTk5NjYnCkNPTE9SUyA9IFsnIzAwNjZGRicsJyMzMzk5MzMnLCcjQ0MzMzAwJywnIzY2MDA2NicsJyNGRjk5MDAnLCcjQjIwMDQ3J10KemVyb19jb29yZCA9IFNreUNvb3JkKHJhPTAuKnUuZGVnLCBkZWM9MC4qdS5kZWcpICAjIENvb3JkcwoKIyBHVUkgZm9yIGZpdHRpbmcgTExTIGluIGEgc3BlY3RydW0KY2xhc3MgSUdNR3Vlc3Nlc0d1aShRdEd1aS5RTWFpbldpbmRvdyk6CiAgICAnJycgR1VJIHRvIGlkZW50aWZ5IGFic29ycHRpb24gZmVhdHVyZXMgYW5kIHByb3ZpZGUgcmVhc29uYWJsZQogICAgICAgIGZpcnN0IGd1ZXNzZXMgb2YgKHosIGxvZ04sIGIpIGZvciBzdWJzZXF1ZW50IFZvaWd0IHByb2ZpbGUKICAgICAgICBmaXR0aW5nLgoKICAgICAgICB2MC41CiAgICAgICAgMzAtSnVsLTIwMTUgYnkgSlhQCiAgICAnJycKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpc3BlYywgcGFyZW50PU5vbmUsIHByZXZpb3VzX2ZpbGU9Tm9uZSwgCiAgICAgICAgc3JjaF9pZD1UcnVlLCBvdXRmaWw9Tm9uZSwgZndobT1Ob25lLCB6cXNvPU5vbmUsCiAgICAgICAgcGxvdF9yZXNpZHVhbHM9VHJ1ZSxuX21heF90dXBsZT1Ob25lLCBtaW5fc3RyZW5ndGg9MC4sIG1pbl9ldz0wLjAwNSk6CiAgICAgICAgUXRHdWkuUU1haW5XaW5kb3cuX19pbml0X18oc2VsZiwgcGFyZW50KQogICAgICAgICIiIgogICAgICAgIGlzcGVjIDogc3RyCiAgICAgICAgICAgIE5hbWUgb2YgdGhlIHNwZWN0cnVtIGZpbGUgdG8gbG9hZAogICAgICAgIHByZXZpb3VzX2ZpbGU6IHN0ciwgb3B0aW9uYWwKICAgICAgICAgICAgTmFtZSBvZiB0aGUgcHJldmlvdXMgSUdNZ3Vlc3NlcyBqc29uIGZpbGUKICAgICAgICBzbW9vdGg6IGZsb2F0LCBvcHRpb25hbAogICAgICAgICAgICBOdW1iZXIgb2YgcGl4ZWxzIHRvIHNtb290aCBvbgogICAgICAgIHpxc286IGZsb2F0LCBvcHRpb25hbAogICAgICAgICAgICBSZWRzaGlmdCBvZiB0aGUgcXVhc2FyLiAgSWYgaW5wdXQsIGEgVGVsZmVyIGNvbnRpbnV1bSBpcyB1c2VkCiAgICAgICAgcGxvdF9yZXNpZHVhbHMgOiBib29sLCBvcHRpb25hbAogICAgICAgICAgICBXaGV0aGVyIHRvIHBsb3QgcmVzaWR1YWxzCiAgICAgICAgbl9tYXhfdHVwbGUgOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIHRyYW5zaXRpb25zIHBlciBpb24gc3BlY2llcyB0byBjb25zaWRlciBmb3IgcGxvdHRpbmcgZGlzcGxheS4KICAgICAgICBtaW5fc3RyZW5ndGggOiBmbG9hdCwgb3B0aW9uYWwKICAgICAgICAgICAgTWluaW11bSBzdHJlbmd0aCBmb3IgYSB0cmFuc2l0aW9uIHRvIGJlIGNvbnNpZGVyZWQgaW4gdGhlIGFuYWx5c2lzLgogICAgICAgICAgICBUaGUgdmFsdWUgc2hvdWxkIGxpZSBiZXR3ZWVuICgwLDE0LjcpLCB3aGVyZSAwLiBtZWFucyAKICAgICAgICAgICAgaW5jbHVkZSBldmVyeXRoaW5nLCBhbmQgMTQuNyBjb3JyZXNwb25kcyB0byB0aGUgc3RyZW5ndGggb2YgCiAgICAgICAgICAgIEhJIEx5YSB0cmFuc2l0aW9uIGFzc3VtaW5nIHNvbGFyIGFidW5kYW5jZS4KICAgICAgICBtaW5fZXcgOiBmbG9hdCwg"}}]
["9a32f3cc30642096ddc1470b0d2711d3e9d8bac2-3","9a32f3cc30642096ddc1470b0d2711d3e9d8bac2","PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMKIyBUaGlzIHNjcmlwdCBqb2lucyBNSVRFLCBCbGFzdHggYW5kIFRFY2xhc3MgY2xhc3NpZmljYXRpb25zIGFuZCBwcmludHMgdGhlIGZpbmFsIGxpYnJhcnkgaW4gZmFzdGEgZm9ybWF0CiMgCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCmZyb20gQmlvIGltcG9ydCBTZXFJTwpmcm9tIEJpby5TZXEgaW1wb3J0IFNlcQoKdGVjbGFzcz1vcGVuKCdhbGxfVGVzXzgwXzIwMF9URWNsYXNzaWZpZWQnLCAncicpICAgIyBUeXBlIGhlcmUgdGhlIG5hbWUgb2YgdGhlIHRlY2xhc3MgY2xhc3NpZmljYXRpb24gZmlsZQpibGFzdHg9b3BlbignYWxsX1RFc184MF8yMDBfYmxhc3R4LnR4dCcsICdyJykgICAgICAjIFR5cGUgaGVyZSB0aGUgbmFtZSBvZiB0aGUgYmxhc3R4IGNsYXNzaWZpY2F0aW9uIGZpbGUKZmFzdGE9b3BlbignY3J5bmVfbGlicmFyeV84MF8yMDAuZmFzdGEnLCAncicpICAgICAgIyBUeXBlIGhlcmUgdGhlIG5hbWUgb2YgdGhlIGZpbGUgd2l0aCBlbGVtZW50cyBpbiBmYXN0YQpjdXJhdGVkPW9wZW4oJ2NyeW5lX2xpYi5mYXN0YScsICd3JykJCSAgICMgVHlwZSBpcyB0aGUgbmFtZSBvZiBhbiBvdXRwdXQgZmlsZS4gVXNlZCBhZ2FpbiBpbiBsaW5lcyA0MSBhbmQgNDUKCjx8ZmltX2hvbGV8PgoJbGluZT1saW5lLnN0cmlwKCkKCWxpbmU9bGluZS5zcGxpdCgnXHQnKQoJYT1zdHIobGluZVswXSkKCWE9YS5zdHJpcCgpCglkaWNbYV09bGluZVsxXQoKZm9yIGl0ZW0gaW4gYmxhc3R4OgoJaXRlbT1pdGVtLnN0cmlwKCkKCWl0ZW09aXRlbS5zcGxpdCgnXHQnKQoJYj1zdHIoaXRlbVswXSkKCWRpY1tiXT1pdGVtWzFdCgoJCmZvciByZWNvcmQgaW4gU2VxSU8ucGFyc2UoZmFzdGEsICdmYXN0YScpOiAKCXJlY29yZC5pZD1yZWNvcmQuaWQuc3RyaXAoKQoJZm9yIGssdiBpbiBkaWMuaXRlcml0ZW1zKCk6CgkJaWYgc3RyKHJlY29yZC5pZCkgPT0gc3RyKGspOgoJCQljdXJhdGVkLndyaXRlKCc+JytzdHIoaykrJyMnK3N0cih2KSsnXG4nK3N0cihyZWNvcmQuc2VxKSsnXG4nKQoKY3VyYXRlZC5jbG9zZSgpCgpjbGVhbj1vcGVuKCdjcnluZV9saWIuZmFzdGEnLCAncicpCSAgICAgICAgICAgICAgIyBSZW9wZW4gdGhlIGZpbGUuIFR5cGUgYWdhaW4gdGhlIHNhbWUgbmFtZSBhcyBpbiBsaW5lIDE0Cm91dDI9b3BlbignQ3J5bmVfbGliLkZJTkFMLmZhc3RhJywgJ3cnKQkgICAgICAgICAgICAgICMgdHlwZSBoZXJlIHRoZSBuYW1lIG9mIHRoZSBGSU5BTCBMSUJSQVJZCgoKZm9yIGl0ZW0gaW4gU2VxSU8ucGFyc2UoJ2NyeW5lX2xpYi5mYXN0YScsICdmYXN0YScpOiAgIyBUeXBlIGhlcmUgdGhlIHNhbWUgbmFtZSBvZiBsaW5lIDE0CgluYW1lPXN0cihpdGVtLmlkKQoJc2VxPXN0cihpdGVtLnNlcSkKCXNlcT1zZXEucmVwbGFjZSgnTicsICcnKQoJaWYgJ01JVEUnIGluIG5hbWU6CgkJbmFtZT1uYW1lLnNwbGl0KCcjJykKCQluYW1lMj1uYW1lWzBdKycjRE5BL01JVEUnCgkJb3V0Mi53cml0ZSgnPicrc3RyKG5hbWUyKSsnXG4nK3N0cihzZXEpKydcbicpCgllbHNlOgoJCW91dDIud3JpdGUoJz4nK3N0cihuYW1lKSsnXG4nK3N0cihzZXEpKydcbicpCgkKPHxmaW1fc3VmZml4fD4KZGljID0ge30KCgpmb3IgbGluZSBpbiB0ZWNsYXNzOgo8fGZpbV9lbmR8Pg=="]
["47cd62882b26aa29bcef87e9f4c538612183d17e-2","47cd62882b26aa29bcef87e9f4c538612183d17e","PHxmaW1fcHJlZml4fD4KIiIibW9kdWxlIGZvciBzdG9wcGluZyBhbmQgc3RhcnRpbmcgc3RhY2tzIGJ1dCBrZWVwaW5nIHRoZWlyIHN0YXRlLCBoZW5jZSB3aXRob3V0IGRlc3Ryb3lpbmcgdGhlbS4KClRoZSBwcmltYXJ5IHJlYXNvbiBmb3IgZG9pbmcgdGhpcyBpcyB0byBzYXZlIG9uIGNvc3RzLiIiIgoKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IGxvZ2dpbmcKZnJvbSBwcHJpbnQgaW1wb3J0IHBmb3JtYXQKaW1wb3J0IHJlCmltcG9ydCBiYWNrb2ZmCmZyb20gLmNvbW1hbmQgaW1wb3J0IHJlbW90ZV9maWxlX2V4aXN0cywgQ29tbWFuZEV4Y2VwdGlvbgppbXBvcnQgYm90byAjIHJvdXRlNTMgYm90bzIgPiByb3V0ZTUzIGJvdG8zCmZyb20gLiBpbXBvcnQgY29uZmlnLCBjb3JlLCBjb21tYW5kCmZyb20gLmNvcmUgaW1wb3J0IGJvdG9fY29ubiwgZmluZF9lYzJfaW5zdGFuY2VzLCBmaW5kX3Jkc19pbnN0YW5jZXMsIHN0YWNrX2FsbF9lYzJfbm9kZXMsIGN1cnJlbnRfZWMyX25vZGVfaWQsIE5vUHVibGljSXBzLCBOb1J1bm5pbmdJbnN0YW5jZXMKZnJvbSAudXRpbHMgaW1wb3J0IGNhbGxfd2hpbGUsIGVuc3VyZSwgbG1hcApmcm9tIC5jb250ZXh0X2hhbmRsZXIgaW1wb3J0IGxvYWRfY29udGV4dAoKTE9HID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgpjbGFzcyBFQzJUaW1lb3V0KFJ1bnRpbWVFcnJvcik6CiAgICBwYXNzCgpkZWYgX25vZGVfaWQobm9kZSk6CiAgICBuYW1lID0gY29yZS50YWdzMmRpY3Qobm9kZS50YWdzKVsnTmFtZSddCiAgICBuaWQgPSBjb3JlLnBhcnNlX3N0YWNrbmFtZShuYW1lLCBhbGxfYml0cz1UcnVlLCBpZHg9VHJ1ZSkuZ2V0KCdjbHVzdGVyX2lkJywgMSkKICAgIHJldHVybiBpbnQobmlkKQoKZGVmIHN0YXJ0X3Jkc19ub2RlcyhzdGFja25hbWUpOgogICAgcmRzX3RvX2JlX3N0YXJ0ZWQgPSBfcmRzX25vZGVzX3N0YXRlcyhzdGFja25hbWUpCiAgICBMT0cuaW5mbygiUkRTIG5vZGVzIHRvIGJlIHN0YXJ0ZWQ6ICVzIiwgcmRzX3RvX2JlX3N0YXJ0ZWQpCgogICAgZGVmIF9zdGFydChuaWQpOgogICAgICAgIHJldHVybiBfcmRzX2Nvbm5lY3Rpb24oc3RhY2tuYW1lKS5zdGFydF9kYl9pbnN0YW5jZShEQkluc3RhbmNlSWRlbnRpZmllcj1uaWQpCiAgICByZXR1cm4gbG1hcChfc3RhcnQsIHJkc190b19iZV9zdGFydGVkLmtleXMoKSkKCmRlZiBub2RlX3N0YXRlcyhub2RlX2xpc3QpOgogICAgaGlzdG9yeSA9IFtdCiAgICBmb3Igbm9kZSBpbiBub2RlX2xpc3Q6CiAgICAgICAgbm9kZS5yZWxvYWQoKSAjIC5sb2FkIGFuZCAucmVsb2FkIGFyZSB0aGUgc2FtZQogICAgICAgIGhpc3RvcnkuYXBwZW5kKChfbm9kZV9pZChub2RlKSwgbm9kZS5zdGF0ZVsnTmFtZSddKSkKICAgIHJldHVybiBoaXN0b3J5CgojIGVuc3VyZSBubyB0d28gYWRqYWNlbnQgcmVjb3JkcyBhcmUgZXF1YWwKZGVmIHB1c2gobHN0LCByZWMpOgogICAgaWYgbm90IGxzdCBvciBsc3RbLTFdICE9IHJlYzoKICAgICAgICBsc3QuYXBwZW5kKHJlYykKCmRlZiByZXN0YXJ0KHN0YWNrbmFtZSwgaW5pdGlhbF9zdGF0ZXM9J3BlbmRpbmd8cnVubmluZ3xzdG9wcGluZ3xzdG9wcGVkJyk6CiAgICAiIiJmb3IgZWFjaCBlYzIgbm9kZSBpbiBnaXZlbiBzdGFjaywgZW5zdXJlIGVjMiBub2RlIGlzIHN0b3BwZWQsIHRoZW4gc3RhcnQgaXQsIHRoZW4gcmVwZWF0IHdpdGggbmV4dCBub2RlLgogICAgcmRzIGlzIHN0YXJ0ZWQgaWYgc3RvcHBlZCAoaWYgKmV4aXN0cyopIGJ1dCBvdGhlcndpc2Ugbm90IGFmZmVjdGVkIiIiCiAgICAjIHN0YXJ0X3Jkc19ub2RlcyhzdGFja25hbWUpICMgc29tZXRoaW5nIGEgYml0IGJ1Z2d5IGhlcmUKCiAgICBub2RlX2xpc3QgPSBmaW5kX2VjMl9pbnN0YW5jZXMoc3RhY2tuYW1lLCBzdGF0ZT1pbml0aWFsX3N0YXRlcywgYWxsb3dfZW1wdHk9VHJ1ZSkKCiAgICBoaXN0b3J5ID0gW10KCiAgICB0cnk6CiAgICAgICAgZm9yIG5vZGUgaW4gbm9kZV9saXN0OgogICAgICAgICAgICBwdXNoKGhpc3RvcnksIG5vZGVfc3RhdGVzKG5vZGVfbGlzdCkpCgogICAgICAgICAgICBub2RlLnN0b3AoKQogICAgICAgICAgICBwdXNoKGhpc3RvcnksIG5vZGVfc3RhdGVzKG5vZGVfbGlzdCkpCgogICAgICAgICAgICBub2RlLndhaXRfdW50aWxfc3RvcHBlZCgpCiAgICAgICAgICAgIHB1c2goaGlzdG9yeSwgbm9kZV9zdGF0ZXMobm9kZV9saXN0KSkKCiAgICAgICAgICAgIG5vZGUuc3RhcnQoKQogICAgICAgICAgICBwdXNoKGhpc3RvcnksIG5vZGVfc3RhdGVzKG5vZGVfbGlzdCkpCgogICAgICAgICAgICBub2RlLndhaXRfdW50aWxfcnVubmluZygpCiAgICAgICAgICAgIHB1c2goaGlzdG9yeSwgbm9kZV9zdGF0ZXMobm9kZV9saXN0KSkKCiAgICAgICAgICAgIG5vZGVfaWQgPSBfbm9kZV9pZChub2RlKQogICAgICAgICAgICBjYWxsX3doaWxlKAogICAgICAgICAgICAgICAgbGFtYmRhOiBfc29tZV9ub2RlX2lzX25vdF9yZWFkeShzdGFja25hbWUsIG5vZGU9bm9kZV9pZCwgY29uY3VycmVuY3k9J3NlcmlhbCcpLAogICAgICAgICAgICAgICAgaW50ZXJ2YWw9MiwKICAgICAgICAgICAgICAgIHRpbWVvdXQ9Y29uZmlnLkJVSUxERVJfVElNRU9VVCwKICAgICAgICAgICAgICAgIHVwZGF0ZV9tc2c9IndhaXRpbmcgZm9yIG5vZGVzIHRvIGNvbXBsZXRlIGJvb3QiLAogICAgICAgICAgICAgICAgZG9uZV9tc2c9ImFsbCBub2RlcyBoYXZlIHB1YmxpYyBpcHMsIGFyZSByZWFjaGFibGUgdmlhIFNTSCBhbmQgaGF2ZSBjb21wbGV0ZWQgYm9vdCIKICAgICAgICAgICAgKQogICAgICAgIGlmIGhpc3Rvcnk6CiAgICAgICAgICAgICMgb25seSB1cGRhdGUgZG5zIGlmIHdlIGhhdmUgYSBoaXN0b3J5IG9mIGFmZmVjdGVkIG5vZGVzCiAgICAgICAgICAgIHVwZGF0ZV9kbnMoc3RhY2tuYW1lKQogICAgICAgIHJldHVybiBoaXN0b3J5CiAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgIExPRy5pbmZvKCJQYXJ0aWFsIHJlc3RhcnQgaGlzdG9yeSBvZiAlczogJXMiLCBzdGFja25hbWUsIHBmb3JtYXQoaGlzdG9yeSkpCiAgICAgICAgcmFpc2UKCmRlZiBzdGFydChzdGFja25hbWUpOgogICAgIlB1dHMgYWxsIEVDMiBub2RlcyBhbmQgUkRTIGluc3RhbmNlcyBmb3IgZ2l2ZW4gYHN0YWNrbmFtZWAgaW50byB0aGUgJ3N0YXJ0ZWQnIHN0YXRlLiBJZGVtcG90ZW50IgoKICAgIGNvbnRleHQgPSBsb2FkX2NvbnRleHQoc3RhY2tuYW1lKQoKICAgICMgVE9ETzogZG8gdGhlIHNhbWUgZXhjbHVzaW9uIGZvciBFQzIKICAgIGVjMl9zdGF0ZXMgPSBfZWMyX25vZGVzX3N0YXRlcyhzdGFja25hbWUpCiAgICBpZiBjb250ZXh0LmdldCgncmRzJyk6CiAgICAgICAgcmRzX3N0YXRlcyA9IF9yZHNfbm9kZXNfc3RhdGVzKHN0YWNrbmFtZSkKICAgIGVsc2U6CiAgICAgICAgcmRzX3N0YXRlcyA9IHt9CiAgICBMT0cuaW5mbygiQ3VycmVudCBzdGF0ZXM6IEVDMiAlcywgUkRTICVzIiwgZWMyX3N0YXRlcywgcmRzX3N0YXRlcykKICAgIF9lbnN1cmVfdmFsaWRfZWMyX3N0YXRlcyhlYzJfc3RhdGVzLCB7J3N0b3BwZWQnLCAncGVuZGluZycsICdydW5uaW5nJywgJ3N0b3BwaW5nJ30pCgogICAgc3RvcHBpbmcgPSBfc2VsZWN0X25vZGVzX3dpdGhfc3RhdGUoJ3N0b3BwaW5nJywgZWMyX3N0YXRlcykKICAgICMgVE9ETzogc2FuaXR5IGNoZWNrIG9uIG5vdCBzdG9wcGluZyBvbiBSRFMgdG9vCiAgICBpZiBzdG9wcGluZzoKICAgICAgICBMT0cuaW5mbygiRUMyIG5vZGVzIGFyZSBzdG9wcGluZzogJXMiLCBzdG9wcGluZykKICAgICAgICBfd2FpdF9lYzJfYWxsX2luX3N0YXRlKHN0YWNrbmFtZSwgJ3N0b3BwZWQnLCBzdG9wcGluZykKICAgICAgICBlYzJfc3RhdGVzID0gX2VjMl9ub2Rlc19zdGF0ZXMoc3RhY2tuYW1lKQogICAgICAgIExPRy5pbmZvKCJDdXJyZW50IHN0YXRlczogRUMyICVzLCBSRFMgJXMiLCBlYzJfc3RhdGVzLCByZHNfc3RhdGVzKQoKICAgIGVjMl90b19iZV9zdGFydGVkID0gX3NlbGVjdF9ub2Rlc193aXRoX3N0YXRlKCdzdG9wcGVkJywgZWMyX3N0YXRlcykKICAgIGVjMl90b19iZV9jaGVja2VkID0gZWMyX3RvX2JlX3N0YXJ0ZWQgKyBfc2VsZWN0X25vZGVzX3dpdGhfc3RhdGUoJ3J1bm5pbmcnLCBlYzJfc3RhdGVzKQogICAgcmRzX3RvX2JlX3N0YXJ0ZWQgPSBfc2VsZWN0X25vZGVzX3dpdGhfc3RhdGUoJ3N0b3BwZWQnLCByZHNfc3RhdGVzKQoKICAgIGlmIGVjMl90b19iZV9zdGFydGVkOgogICAgICAgIExPRy5pbmZvKCJFQzIgbm9kZXMgdG8gYmUgc3RhcnRlZDogJXMiLCBlYzJfdG9fYmVfc3RhcnRlZCkKICAgICAgICBfZWMyX2Nvbm5lY3Rpb24oc3RhY2tuYW1lKS5pbnN0YW5jZXMuZmlsdGVyKEluc3RhbmNlSWRzPWVjMl90b19iZV9zdGFydGVkKS5zdGFydCgpCgogICAgaWYgcmRzX3RvX2JlX3N0YXJ0ZWQ6CiAgICAgICAgTE9HLmluZm8oIlJEUyBub2RlcyB0byBiZSBzdGFydGVkOiAlcyIsIHJkc190b19iZV9zdGFydGVkKQogICAgICAgIFtfcmRzX2Nvbm5lY3Rpb24oc3RhY2tuYW1lKS5zdGFydF9kYl9pbnN0YW5jZShEQkluc3RhbmNlSWRlbnRpZmllcj1uKSBmb3IgbiBpbiByZHNfdG9fYmVfc3RhcnRlZF0KCiAgICBpZiBub3QgZWMyX3RvX2JlX3N0YXJ0ZWQ6CiAgICAgICAgTE9HLmluZm8oIkVDMiBub2RlcyBhcmUgYWxsIHJ1bm5pbmciKQoKICAgIHRyeToKICAgICAgICB3YWl0X2Zvcl9lYzJfc3RlYWR5X3N0YXRlKHN0YWNrbmFtZSwgZWMyX3RvX2JlX2NoZWNrZWQpCiAgICBleGNlcHQgRUMyVGltZW91dCBhcyBlOgogICAgICAgICMgYSBwZXJzaXN0ZW50IGxvZ2luIHByb2JsZW0gd29uJ3QgYmUgc29sdmVkIGJ5IGEgcmVib290CiAgICAgICAgaWYgIk5lZWRlZCB0byBwcm9tcHQgZm9yIGEgY29ubmVjdGlvbiBvciBzdWRvIHBhc3N3b3JkIiBpbiBzdHIoZSk6CiAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIyBpbiBjYXNlIG9mIGJvdGNoZWQgYm9vdCBhbmQvb3IgaW5hYmlsaXR5IHRvCiAgICAgICAgIyBhY2Nlc3MgdGhyb3VnaCBTU0gsIHRyeSBvbmNlIHRvIHN0b3AgYW5kCiAgICAgICAgIyBzdGFydCB0aGUgaW5zdGFuY2VzIGFnYWluCiAgICAgICAgTE9HLmluZm8oIkJvb3QgZmFpbGVkIChpbnN0YW5jZShzKSBub3QgYWNjZXNzaWJsZSB0aHJvdWdoIFNTSCkuIEF0dGVtcHRpbmcgYm9vdCBvbmUgbW9yZSB0aW1lOiAlcyIsIGVjMl90b19iZV9jaGVja2VkKQogICAgICAgIF9lYzJfY29ubmVjdGlvbihzdGFja25hbWUpLmluc3RhbmNlcy5maWx0ZXIoSW5zdGFuY2VJZHM9ZWMyX3RvX2JlX2NoZWNrZWQpLnN0b3AoKQogICAgICAgIF93YWl0X2VjMl9hbGxfaW5fc3RhdGUoc3RhY2tuYW1lLCAnc3RvcHBlZCcsIGVjMl90b19iZV9jaGVja2VkKQogICAgICAgIF9lYzJfY29ubmVjdGlvbihzdGFja25hbWUpLmluc3RhbmNlcy5maWx0ZXIoSW5zdGFuY2VJZHM9ZWMyX3RvX2JlX2NoZWNrZWQpLnN0YXJ0KCkKICAgICAgICB3YWl0X2Zvcl9lYzJfc3RlYWR5X3N0YXRlKHN0YWNrbmFtZSwgZWMyX3RvX2JlX2NoZWNrZWQpCgogICAgaWYgcmRzX3RvX2JlX3N0YXJ0ZWQ6CiAgICAgICAgX3dhaXRfcmRzX2FsbF9pbl9zdGF0ZShzdGFja25hbWUsICdhdmFpbGFibGUnLCByZHNfdG9fYmVfc3RhcnRlZCkKCiAgICB1cGRhdGVfZG5zKHN0YWNrbmFtZSkKCmRlZiB3YWl0X2Zvcl9lYzJfc3RlYWR5X3N0YXRlKHN0YWNrbmFtZSwgZWMyX3RvX2JlX2NoZWNrZWQpOgogICAgX3dhaXRfZWMyX2FsbF9pbl9zdGF0ZShzdGFja25hbWUsICdydW5uaW5nJywgZWMyX3RvX2JlX2NoZWNrZWQpCiAgICBjYWxsX3doaWxlKAogICAgICAgIGxhbWJkYTogX3NvbWVfbm9kZV9pc19ub3RfcmVhZHkoc3RhY2tuYW1lLCBpbnN0YW5jZV9pZHM9ZWMyX3RvX2JlX2NoZWNrZWQpLAogICAgICAgIGludGVydmFsPTIsCiAgICAgICAgdGltZW91dD1jb25maWcuQlVJTERFUl9USU1FT1VULAogICAgICAgIHVwZGF0ZV9tc2c9IndhaXRpbmcgZm9yIG5vZGVzIHRvIGNvbXBsZXRlIGJvb3QiLAogICAgICAgIGRvbmVfbXNnPSJhbGwgbm9kZXMgaGF2ZSBwdWJsaWMgaXBzLCBhcmUgcmVhY2hhYmxlIHZpYSBTU0ggYW5kIGhhdmUgY29tcGxldGVkIGJvb3QiLAogICAgICAgIGV4Y2VwdGlvbl9jbGFzcz1FQzJUaW1lb3V0CiAgICApCgpkZWYgX3NvbWVfbm9kZV9pc19ub3RfcmVhZHkoc3RhY2tuYW1lLCAqKmt3YXJncyk6CiAgICB0cnk6CiAgICAgICAgaXBfdG9fcmVhZHkgPSBzdGFja19hbGxfZWMyX25vZGVzKHN0YWNrbmFtZSwgX2RhZW1vbnNfcmVhZHksIHVzZXJuYW1lPWNvbmZpZy5CT09UU1RSQVBfVVNFUiwgKiprd2FyZ3MpCiAgICAgICAgTE9HLmluZm8oIl9zb21lX25vZGVfaXNfbm90X3JlYWR5OiAlcyIsIGlwX3RvX3JlYWR5KQogICAgICAgIHJldHVybiBsZW4oaXBfdG9fcmVhZHkpID09IDAgb3IgRmFsc2UgaW4gaXBfdG9fcmVhZHkudmFsdWVzKCkKICAgIGV4Y2VwdCBOb1B1YmxpY0lwcyBhcyBlOgogICAgICAgIExPRy5pbmZvKCJObyBwdWJsaWMgaXBzIGF2YWlsYWJsZSB5ZXQ6ICVzIiwgZSkKICAgICAgICByZXR1cm4gVHJ1ZQogICAgZXhjZXB0IE5vUnVubmluZ0luc3RhbmNlcyBhcyBlOgogICAgICAgICMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSBiZWNhdXNlIG9mIF93YWl0X2VjMl9hbGxfaW5fc3RhdGUoKSB3ZSBkbyBiZWZvcmUsIGJ1dCB0aGUgRUMyIEFQSSBpcyBub3QgY29uc2lzdGVudAogICAgICAgICMgYW5kIHNvbWV0aW1lcyBzZWxlY3RpbmcgaW5zdGFuY2VzIGZpbHRlcmluZyBmb3IgdGhlIGBydW5uaW5nYCBzdGF0ZSBkb2Vzbid0IGZpbmQgdGhlbQogICAgICAgICMgZXZlbiBpZiB0aGVpciBzdGF0ZSBpcyBgcnVubmluZ2AgYWNjb3JkaW5nIHRvIHRoZSBsYXRlc3QgQVBJIGNhbGwKICAgICAgICBMT0cuaW5mbygiTm8gcnVubmluZyBpbnN0YW5jZXMgeWV0OiAlcyIsIGUpCiAgICAgICAgcmV0dXJuIFRydWUKICAgIGV4Y2VwdCBDb21tYW5kRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgIyBsb2dpbiBwcm9ibGVtIGlzIGEgbGVnaXRpbWF0ZSBlcnJvciBmb3IgYm9vdGluZyBzZXJ2ZXJzLAogICAgICAgICMgYnV0IGFsc28gYSBzaWduYWwgdGhlIFNTSCBwcml2YXRlIGtleSBpcyBub3QgYWxsb3dlZCBpZiBpdCBwZXJzaXN0cwogICAgICAgIGlmICJOZWVkZWQgdG8gcHJvbXB0IGZvciBhIGNvbm5lY3Rpb24gb3Igc3VkbyBwYXNzd29yZCIgaW4gc3RyKGUpOgogICAgICAgICAgICBMT0cuaW5mbygiU1NIIGFjY2VzcyBwcm9ibGVtIGluIF9zb21lX25vZGVfaXNfbm90X3JlYWR5IGV4ZWN1dGlvbjogJXMiLCBlKQogICAgICAgICAgICByZXR1cm4gZQogICAgICAgIExPRy5pbmZvKCJHZW5lcmljIGZhaWx1cmUgb2YgX3NvbWVfbm9kZV9pc19ub3RfcmVhZHkgZXhlY3V0aW9uOiAlcyAoY2xhc3MgJXMpIiwgZSwgdHlwZShlKSkKICAgICAgICByZXR1cm4gVHJ1ZQogICAgcmV0dXJuIEZhbHNlCgpkZWYgc3RvcChzdGFja25hbWUsIHNlcnZpY2VzPU5vbmUpOgogICAgIlB1dHMgYWxsIEVDMiBub2RlcyBvZiBzdGFja25hbWUgaW50byB0aGUgJ3N0b3BwZWQnIHN0YXRlLiBJZGVtcG90ZW50IgogICAgc2VydmljZXMgPSBzZXJ2aWNlcyBvciBbJ2VjMicsICdyZHMnXQogICAgY29udGV4dCA9IGxvYWRfY29udGV4dChzdGFja25hbWUpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBlYzJfc3RhdGVzID0gX2VjMl9ub2Rlc19zdGF0ZXMoc3RhY2tuYW1lKQogICAgaWYgY29udGV4dC5nZXQoJ3JkcycpOgogICAgICAgIHJkc19zdGF0ZXMgPSBfcmRzX25vZGVzX3N0YXRlcyhzdGFja25hbWUpCiAgICBlbHNlOgo8fGZpbV9lbmR8Pg=="]
["e3094a8d9559f0b83667af31394a2b7f464418b8-2","e3094a8d9559f0b83667af31394a2b7f464418b8","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gLi4gaW1wb3J0IEJhclBsb3RDaGVja2VyLCBJbnZhbGlkUGxvdEVycm9yCgoKZGVmIHRlc3RfZW1wdHlfcGxvdChheGlzKToKICAgICIiIklzIGFuIGVycm9yIHRocm93biB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgcGxvdHRlZD8iIiIKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhJbnZhbGlkUGxvdEVycm9yKToKICAgICAgICBCYXJQbG90Q2hlY2tlcihheGlzKQoKCmRlZiB0ZXN0X251bV9iYXJzKGF4aXMpOgogICAgIiIiQXJlIHRoZSBudW1iZXIgb2YgYmFycyBjb3JyZWN0PyIiIgogICAgeCA9IG5wLmFyYW5nZSgxMCkKICAgIHkgPSBucC5saW5zcGFjZSgxLCA1LCAxMCkKICAgIGF4aXMuYmFyKHgsIHkpCgogICAgcGMgPSBCYXJQbG90Q2hlY2tlcihheGlzKQogICAgcGMuYXNzZXJ0X251bV9iYXJzKDEwKQoKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhBc3NlcnRpb25FcnJvcik6CiAgICAgICAgcGMuYXNzZXJ0X251bV9iYXJzKDYpCgoKZGVmIHRlc3RfZGF0YV9sZWZ0KGF4aXMpOgogICAgIiIiQXJlIHRoZSB4IGFuZCB5IHZhbHVlcyBjb3JyZWN0PyIiIgogICAgeCA9IG5wLmFyYW5nZSgxMCkKICAgIHkgPSBucC5saW5zcGFjZSgxLCA1LCAxMCkKICAgIGIgPSBucC5saW5zcGFjZSgwLCAxLCAxMCkKICAgIGF4aXMuYmFyKHgsIHksIGJvdHRvbT1iLCBhbGlnbj0nZWRnZScpCgogICAgcGMgPSBCYXJQbG90Q2hlY2tlcihheGlzKQogICAgcGMuYXNzZXJ0X2NlbnRlcnNfZXF1YWwoeCArIDAuNCkKICAgIHBjLmFzc2VydF9oZWlnaHRzX2VxdWFsKHkpCiAgICBwYy5hc3NlcnRfYm90dG9tc19lcXVhbChiKQoKCmRlZiB0ZXN0X2RhdGFfbGVmdF9hbGxjbG9zZShheGlzKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgIiIiQXJlIHRoZSB4IGFuZCB5IHZhbHVlcyBhbG1vc3QgY29ycmVjdD8iIiIKICAgIGVyciA9IDFlLTEyCiAgICB4ID0gbnAuYXJhbmdlKDEsIDExKQogICAgeSA9IG5wLmxpbnNwYWNlKDEsIDUsIDEwKQo8fGZpbV9lbmR8Pg=="]
["e37f80b6f8543734bb00cb381a3adc6d8a449345-3","e37f80b6f8543734bb00cb381a3adc6d8a449345","PHxmaW1fcHJlZml4fD4KdHJ5OiAgIyDlop7liqB0cnnnmoTljp/lm6DmmK9mb3Jt6YeM5pyJcXVlcnlzZXTvvIzkvJrlr7zoh7RtYWtlbWlncmF0aW9u5aSx6LSlCjx8ZmltX2hvbGV8PgpleGNlcHQ6CiAgICBwYXNzCgo8fGZpbV9zdWZmaXh8PgogICAgZnJvbSAuZXhhbXBsZSBpbXBvcnQgRXhhbXBsZUFkbWluCjx8ZmltX2VuZHw+"]
["5743abd53e83d917e1dc025232feda985dbe14f9-2","5743abd53e83d917e1dc025232feda985dbe14f9","PHxmaW1fcHJlZml4fD4KIiIiQSByZXBvc2l0b3J5IG9mIFBSTSBkYXRhYmFzZXMuIiIiCmltcG9ydCBhYmMKCmZyb20ganVwaXRlci5kb21haW4ucHJtLnBybV9kYXRhYmFzZSBpbXBvcnQgUHJtRGF0YWJhc2UKZnJvbSBqdXBpdGVyLmZyYW1ld29yay5zdG9yYWdlIGltcG9ydCBSZXBvc2l0b3J5CgoKY2xhc3MgUHJtRGF0YWJhc2VBbHJlYWR5RXhpc3RzRXJyb3IoRXhjZXB0aW9uKToKICAgICIiIkVycm9yIHJhaXNlZCB3aGVuIGEgUFJNIGRhdGFiYXNlIGFscmVhZHkgZXhpc3RzLiIiIgoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgUHJtRGF0YWJhc2VOb3RGb3VuZEVycm9yKEV4Y2VwdGlvbik6CiAgICAiIiJFcnJvciByYWlzZWQgd2hlbiB0aGUgUFJNIGRhdGFiYXNlIGlzIG5vdCBmb3VuZC4iIiIKCgo8fGZpbV9lbmR8Pg=="]
["5708da112426d891d41279165c6d9f5489ee1594-2","5708da112426d891d41279165c6d9f5489ee1594","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IGJvdG8zCmltcG9ydCBvcwppbXBvcnQgc3lzCmltcG9ydCB1dWlkCiNmcm9tIGJvdG9jb3JlLnZlbmRvcmVkIGltcG9ydCByZXF1ZXN0cwojIGZyb20gUElMIGltcG9ydCBJbWFnZQojIGltcG9ydCBQSUwuSW1hZ2UKZnJvbSBkYXRldGltZSBpbXBvcnQgKgppbXBvcnQgcmVxdWVzdHMKCkVTX0hPU1QgPSAnaHR0cHM6Ly92cGMtcGhvdG9zLWxjbXk0cWhrbmx1enV1b3VxM3B1Zmdubms0LnVzLWVhc3QtMS5lcy5hbWF6b25hd3MuY29tJwpSRUdJT04gPSAndXMtZWFzdC0xJwoKZGVmIGdldF91cmwoaW5kZXgsIHR5cGUpOgogICAgdXJsID0gRVNfSE9TVCArICcvJyArIGluZGV4ICsgJy8nICsgdHlwZQogICAgcmV0dXJuIHVybAoKIyBkZWYgcmVzaXplX2ltYWdlKGltYWdlX3BhdGgsIHJlc2l6ZWRfcGF0aCk6IAojICAgICB3aXRoIEltYWdlLm9wZW4oaW1hZ2VfcGF0aCkgYXMgaW1hZ2U6CiMgICAgICAgICBpbWFnZS50aHVtYm5haWwodHVwbGUoeCAvIDIgZm9yIHggaW4gaW1hZ2Uuc2l6ZSkpCiMgICAgICAgICBpbWFnZS5zYXZlKHJlc2l6ZWRfcGF0aCkKCmRlZiBsYW1iZGFfaGFuZGxlcihldmVudCwgY29udGV4dCk6CiAgICBwcmludCgiRVZFTlQgLS0tIHt9Ii5mb3JtYXQoanNvbi5kdW1wcyhldmVudCkpKQoKICAgIGhlYWRlcnMgPSB7ICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIgfQogICAgYnQzID0gYm90bzMuc2Vzc2lvbi5TZXNzaW9uKCcnLCcnLHJlZ2lvbl9uYW1lPSd1cy1lYXN0LTEnKQogICAgcmVrID0gYnQzLmNsaWVudCgncmVrb2duaXRpb24nKQogICAgCiAgICAjIGdldCB0aGUgaW1hZ2UgaW5mb3JtYXRpb24gZnJvbSBTMwogICAgZm9yIHJlY29yZCBpbiBldmVudFsnUmVjb3JkcyddOgogICAgICAgIGJ1Y2tldCA9IHJlY29yZFsnczMnXVsnYnVja2V0J11bJ25hbWUnXQogICAgICAgIGtleSA9IHJlY29yZFsnczMnXVsnb2JqZWN0J11bJ2tleSddCiAgICAgICAgc2l6ZSA9IHJlY29yZFsnczMnXVsnb2JqZWN0J11bJ3NpemUnXSAjIHVwIHRvIDVNQgogICAgICAgIHByaW50KGJ1Y2tldCxrZXksc2l6ZSkKICAgICAgICAjIGRldGVjdCB0aGUgbGFiZWxzIG9mIGN1cnJlbnQgaW1hZ2UKICAgICAgICBsYWJlbHMgPSByZWsuZGV0ZWN0X2xhYmVscyhJbWFnZT17J1MzT2JqZWN0JzogeyAnQnVja2V0JzogYnVja2V0LCdOYW1lJzoga2V5fX0sTWF4TGFiZWxzPTEwKQogICAgICAgIHByaW50KGxhYmVscykKICAgICAgICAKICAgIHByaW50KCJvdXRzaWRlIGxvb3AiKQogICAgcHJpbnQoIklNQUdFIExBQkVMUyAtLS0ge30iLmZvcm1hdChsYWJlbHNbJ0xhYmVscyddKSkKICAgIAogICAgIyBwcmVwYXJlIEpTT04gb2JqZWN0CiAgICBvYmogPSB7fQogICAgb2JqWydvYmplY3RLZXknXSA9IGtleQogICAgb2JqWyJidWNrZXQiXSA9IGJ1Y2tldAogICAgb2JqWyJjcmVhdGVkVGltZXN0YW1wIl0gPSBkYXRldGltZS5ub3coKS5zdHJmdGltZSgiJVktJW0tJWQgJUg6JU06JVMiKQogICAgb2JqWyJsYWJlbHMiXSA9IFtdCiAgICAgICAgCiAgICBmb3IgbGFiZWwgaW4gbGFiZWxzWydMYWJlbHMnXToKICAgICAgICBvYmpbImxhYmVscyJdLmFwcGVuZChsYWJlbFsnTmFtZSddKQogICAgICAgIG9ialsibGFiZWxzIl0uYXBwZW5kKGxhYmVsWydOYW1lJ10rJ3MnKQogICAgCiAgICBwcmludCgiSlNPTiBPQkpFQ1QgLS0tIHt9Ii5mb3JtYXQob2JqKSkKICAgIAogICAgIyBwb3N0IHRoZSBKU09OIG9iamVjdCBpbnRvIEVsYXN0aWNTZWFyY2gsIF9pZCBpcyBhdXRvbWF0aWNsbHkgaW5jcmVhc2VkCiAgICB1cmwgPSBnZXRfdXJsKCdwaG90b3MnLCAnUGhvdG8nKQogICAgcHJpbnQoIkVTIFVSTCAtLS0ge30iLmZvcm1hdCh1cmwpKQogICAgb2JqID0ganNvbi5kdW1wcyhvYmopCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHJlcSA9IHJlcXVlc3RzLnBvc3QodXJsLCBkYXRhPW9iaiwgaGVhZGVycz1oZWFkZXJzKQogICAgICAgIAogICAgcHJpbnQoIlN1Y2Nlc3M6ICIsIHJlcSkKICAgIHJldHVybiB7Cjx8ZmltX2VuZHw+"]
["19a017192ba3fa6d25197974b804f176e696b034-3","19a017192ba3fa6d25197974b804f176e696b034","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKYWN0aXZhdGVfdGhpcyA9ICcvb3B0L2ZpbmRteWlwcGhvbmUvYmluL2FjdGl2YXRlX3RoaXMucHknCmV4ZWMob3BlbihhY3RpdmF0ZV90aGlzKS5yZWFkKCkpCnN5cy5wYXRoLmluc2VydCgwLCAnL29wdC9maW5kbXlpcHBob25lJykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZnJvbSBmaW5kbXlpcHBob25lIGltcG9ydCBhcHAgYXMgYXBwbGljYXRpb24KPHxmaW1fZW5kfD4="]
["9a2181fe5a32225c0e67fbd4a24cafd3ad707452-4","9a2181fe5a32225c0e67fbd4a24cafd3ad707452","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMS40IG9uIDIwMjAtMTItMjIgMTE6MDYKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgKCd1c2VycycsICcwMDA0X2F1dG9fMjAyMDEyMjJfMTEwNScpLAogICAgXQoKICAgIG9wZXJhdGlvbnMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5SZW5hbWVGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nZ3VhcmRpYW4nLAogICAgICAgICAgICBvbGRfbmFtZT0nZ3VhcmRpYW5zJywKICAgICAgICAgICAgbmV3X25hbWU9J3VzZXJfZ3VhcmRpYW5zJywKPHxmaW1faG9sZXw+CiAgICBdCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgKSwKPHxmaW1fZW5kfD4="]
["478fa83fd962d5e99b2707f5b1cc81ab86eac9de-2","478fa83fd962d5e99b2707f5b1cc81ab86eac9de","PHxmaW1fcHJlZml4fD4KIiIiQXN5bmMgTVBJIFJlcXVlc3QgTWFuYWdlci4iIiIKCmZyb20gLmNtcGkgaW1wb3J0IGZmaSwgbGliCmZyb20gLnN0YXR1cyBpbXBvcnQgTVBJU3RhdHVzCmZyb20gLmVycm9yIGltcG9ydCBNUElFcnJvciwgTVBJU3RhdHVzRXJyb3JzCgoKY2xhc3MgUmVxdWVzdE1hbmFnZXI6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY2FwYWNpdHksIGNvbW09bGliLk1QSV9DT01NX1dPUkxELCBkYXRhdHlwZT1saWIuTVBJX0JZVEUpOgogICAgICAgIHNlbGYuY2FwYWNpdHkgPSBpbnQoY2FwYWNpdHkpCiAgICAgICAgc2VsZi5jb21tID0gY29tbQogICAgICAgIHNlbGYuZGF0YXR5cGUgPSBkYXRhdHlwZQoKICAgICAgICBzZWxmLnNpemUgPSAwCiAgICAgICAgc2VsZi5yZXF1ZXN0cyA9IGZmaS5uZXcoIk1QSV9SZXF1ZXN0W10iLCBzZWxmLmNhcGFjaXR5KQogICAgICAgIHNlbGYuaGFuZGxlcyA9IFtdCgogICAgICAgIHNlbGYuaW5kaWNlcyA9IGZmaS5uZXcoImludFtdIiwgc2VsZi5jYXBhY2l0eSkKICAgICAgICBzZWxmLm91dGNvdW50ID0gZmZpLm5ldygiaW50KiIpCiAgICAgICAgc2VsZi5zdGF0dXNlcyA9IGZmaS5uZXcoIk1QSV9TdGF0dXNbXSIsIHNlbGYuY2FwYWNpdHkpCgogICAgZGVmIHNlbmQoc2VsZiwgYnVmLCBkZXN0LCB0YWcsIGhhbmRsZT1Ob25lKToKICAgICAgICAiIiJCZWdpbiBhIG5vbmJsb2NraW5nIHNlbmQuCgogICAgICAgIFBhcmFtZXRlcnMKICAgICAgICAtLS0tLS0tLS0tCiAgICAgICAgYnVmIDogYnl0ZXMgb3IgYW55IG9iamVjdCBzdXBwb3J0aW5nIGJ1ZmZlciBpbnRlcmZhY2UKICAgICAgICAgICAgVGhlIHNlbmQgYnVmZmVyCiAgICAgICAgZGVzdCA6IGludAogICAgICAgICAgICBSYW5rIG9mIGRlc3RpbmF0aW9uCiAgICAgICAgdGFnIDogaW50CiAgICAgICAgICAgIE1lc3NhZ2UgdGFnCiAgICAgICAgaGFuZGxlIDogb2JqZWN0CiAgICAgICAgICAgIEhhbmRsZSBvYmplY3QgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgcmVxdXN0IGlzIGNvbXBsZXRlCiAgICAgICAgIiIiCiAgICAgICAgaWYgc2VsZi5zaXplID09IHNlbGYuY2FwYWNpdHk6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlJlcXVlc3QgbWFuYWdlciBoYXMgcmVhY2hlZCBjYXBhY2l0eSIpCgogICAgICAgIGlmIGlzaW5zdGFuY2UoYnVmLCBieXRlcyk6CiAgICAgICAgICAgIGNidWYgPSBmZmkubmV3KCJjaGFyW10iLCBidWYpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgY2J1ZiA9IGZmaS5mcm9tX2J1ZmZlcigiY2hhcltdIiwgYnVmKQogICAgICAgIGNvdW50ID0gbGVuKGNidWYpCgogICAgICAgIHJlcXVlc3QgPSBzZWxmLnJlcXVlc3RzW3NlbGYuc2l6ZV0KICAgICAgICByZXF1ZXN0X3AgPSBmZmkuYWRkcmVzc29mKHJlcXVlc3QpCgogICAgICAgIHJldGNvZGUgPSBsaWIuTVBJX0lzZW5kKAogICAgICAgICAgICBjYnVmLCBjb3VudCwgc2VsZi5kYXRhdHlwZSwgZGVzdCwgdGFnLCBzZWxmLmNvbW0sIHJlcXVlc3RfcAogICAgICAgICkKICAgICAgICBpZiByZXRjb2RlICE9IGxpYi5NUElfU1VDQ0VTUzoKICAgICAgICAgICAgcmFpc2UgTVBJRXJyb3IocmV0Y29kZSkKCiAgICAgICAgc2VsZi5oYW5kbGVzLmFwcGVuZChoYW5kbGUpCiAgICAgICAgc2VsZi5zaXplICs9IDEKCiAgICBkZWYgcmVjdihzZWxmLCBidWYsIHNvdXJjZT1saWIuTVBJX0FOWV9TT1VSQ0UsIHRhZz1saWIuTVBJX0FOWV9UQUcsIGhhbmRsZT1Ob25lKToKICAgICAgICAiIiJCZWdpbiBhIG5vbmJsb2NraW5nIHJlY2VpdmUuCgogICAgICAgIFBhcmFtZXRlcnMKICAgICAgICAtLS0tLS0tLS0tCiAgICAgICAgYnVmIDogYSB3cml0YWJsZSBvYmplY3Qgc3VwcG9ydGluZyBidWZmZXIgaW50ZXJmYWNlCiAgICAgICAgICAgIFRoZSByZWNlaXZlIGJ1ZmZlcgogICAgICAgIHNvdXJjZSA6IGludAogICAgICAgICAgICBSYW5rIG9mIHNvdXJjZQogICAgICAgIHRhZyA6IGludAogICAgICAgICAgICBNZXNzYWdlIHRhZwogICAgICAgIGhhbmRsZSA6IG9iamVjdAogICAgICAgICAgICBIYW5kbGUgb2JqZWN0IHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHJlcXVzdCBpcyBjb21wbGV0ZQogICAgICAgICIiIgogICAgICAgIGlmIHNlbGYuc2l6ZSA9PSBzZWxmLmNhcGFjaXR5OgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJSZXF1ZXN0IG1hbmFnZXIgaGFzIHJlYWNoZWQgY2FwYWNpdHkiKQoKICAgICAgICBjYnVmID0gZmZpLmZyb21fYnVmZmVyKCJjaGFyW10iLCBidWYsIHJlcXVpcmVfd3JpdGFibGU9VHJ1ZSkKICAgICAgICBjb3VudCA9IGxlbihjYnVmKQoKICAgICAgICByZXF1ZXN0ID0gc2VsZi5yZXF1ZXN0c1tzZWxmLnNpemVdCiAgICAgICAgcmVxdWVzdF9wID0gZmZpLmFkZHJlc3NvZihyZXF1ZXN0KQoKICAgICAgICByZXRjb2RlID0gbGliLk1QSV9JcmVjdigKICAgICAgICAgICAgY2J1ZiwgY291bnQsIHNlbGYuZGF0YXR5cGUsIHNvdXJjZSwgdGFnLCBzZWxmLmNvbW0sIHJlcXVlc3RfcAogICAgICAgICkKICAgICAgICBpZiByZXRjb2RlICE9IGxpYi5NUElfU1VDQ0VTUzoKICAgICAgICAgICAgcmFpc2UgTVBJRXJyb3IocmV0Y29kZSkKCiAgICAgICAgc2VsZi5oYW5kbGVzLmFwcGVuZChoYW5kbGUpCiAgICAgICAgc2VsZi5zaXplICs9IDEKCiAgICBkZWYgX2RlbF9yZXF1ZXN0KHNlbGYsIGlkeCk6CiAgICAgICAgIiIiRGVsZXRlIHRoZSByZXF1c3QgYXQgdGhlIGdpdmVuIGluZGV4LiIiIgogICAgICAgIGlmIGlkeCA9PSBzZWxmLnNpemUgLSAxOgogICAgICAgICAgICBkZWwgc2VsZi5oYW5kbGVzW3NlbGYuc2l6ZSAtIDFdCiAgICAgICAgICAgIHNlbGYuc2l6ZSAtPSAxCgogICAgICAgIGVsaWYgaWR4IDwgc2VsZi5zaXplIC0gMToKICAgICAgICAgICAgc2VsZi5yZXF1ZXN0c1tpZHhdID0gc2VsZi5yZXF1ZXN0c1tzZWxmLnNpemUgLSAxXQogICAgICAgICAgICBzZWxmLmhhbmRsZXNbaWR4XSA9IHNlbGYuaGFuZGxlc1tzZWxmLnNpemUgLSAxXQogICAgICAgICAgICBkZWwgc2VsZi5oYW5kbGVzW3NlbGYuc2l6ZSAtIDFdCiAgICAgICAgICAgIHNlbGYuc2l6ZSAtPSAxCgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbid0IHJlbW92ZSBpbmRleCBpZHg9JWQ7IHNpemU9JWQiICUgKGlkeCwgc2VsZi5zaXplKSkKCiAgICBkZWYgdGVzdChzZWxmKToKICAgICAgICAiIiJUZXN0IGFsbCBwZW5kaW5nIHJlcXVlc3RzIGZvciBjb21wbGV0aW9uLiIiIgogICAgICAgIGlmIG5vdCBzZWxmLnNpemU6CiAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lCgogICAgICAgIGxpYi5tZW1zZXQoc2VsZi5pbmRpY2VzLCAwLCBmZmkuc2l6ZW9mKHNlbGYuaW5kaWNlcykpCiAgICAgICAgc2VsZi5vdXRjb3VudFswXSA9IDAKICAgICAgICBsaWIubWVtc2V0KHNlbGYuc3RhdHVzZXMsIDAsIGZmaS5zaXplb2Yoc2VsZi5zdGF0dXNlcykpCgogICAgICAgIHJldGNvZGUgPSBsaWIuTVBJX1Rlc3Rzb21lKAogICAgICAgICAgICBzZWxmLnNpemUsIHNlbGYucmVxdWVzdHMsIHNlbGYub3V0Y291bnQsIHNlbGYuaW5kaWNlcywgc2VsZi5zdGF0dXNlcwogICAgICAgICkKICAgICAgICBpZiByZXRjb2RlICE9IGxpYi5NUElfU1VDQ0VTUzoKICAgICAgICAgICAgaWYgcmV0Y29kZSA9PSBsaWIuTVBJX0VSUl9JTl9TVEFUVVM6CiAgICAgICAgICAgICAgICBlcnJvcmNvZGVzLCBoYW5kbGVzID0gW10sIFtdCiAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShzZWxmLnNpemUpOgogICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RhdHVzZXNbaV0uTVBJX0VSUk9SICE9IGxpYi5NUElfU1VDQ0VTUzoKICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb2Rlcy5hcHBlbmQoc2VsZi5zdGF0dXNlc1tpXS5NUElfRVJST1IpCiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXMuYXBwZW5kKHNlbGYuaGFuZGxlc1tpXSkKICAgICAgICAgICAgICAgIHJhaXNlIE1QSVN0YXR1c0Vycm9ycyhlcnJvcmNvZGVzLCBoYW5kbGVzKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmFpc2UgTVBJRXJyb3IocmV0Y29kZSkKCiAgICAgICAgb3V0Y291bnQgPSBpbnQoc2VsZi5vdXRjb3VudFswXSkKICAgICAgICBpZiBub3Qgb3V0Y291bnQ6CiAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lCgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoc2VsZi5oYW5kbGVzW2lkeF0pCiAgICAgICAgICAgIHN0YXR1c2VzLmFwcGVuZChNUElTdGF0dXMoc2VsZi5zdGF0dXNlc1tpZHhdKSkKCiAgICAgICAgZm9yIGlkeCBpbiBzb3J0ZWQoaW5kaWNlcywgcmV2ZXJzZT1UcnVlKToKICAgICAgICAgICAgc2VsZi5fZGVsX3JlcXVlc3QoaWR4KQoKICAgICAgICByZXR1cm4gaGFuZGxlcywgc3RhdHVzZXMKPHxmaW1fc3VmZml4fD4KICAgICAgICBpbmRpY2VzID0gW3NlbGYuaW5kaWNlc1tpXSBmb3IgaSBpbiByYW5nZShvdXRjb3VudCldCgogICAgICAgIGhhbmRsZXMsIHN0YXR1c2VzID0gW10sIFtdCiAgICAgICAgZm9yIGlkeCBpbiByYW5nZShpbmRpY2VzKToKPHxmaW1fZW5kfD4="]
["8b51f610f81f88e665daa6a8196db3d370eaee48-1","8b51f610f81f88e665daa6a8196db3d370eaee48","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBkd2luZWxsZS10b29scy4KCiMgZHdpbmVsbGUtdG9vbHMgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKIyBkd2luZWxsZS10b29scyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCBkd2luZWxsZS10b29scy4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KCmZyb20gZW51bSBpbXBvcnQgRW51bQpmcm9tIGl0ZXJ0b29scyBpbXBvcnQgY2hhaW4KZnJvbSBzeXMgaW1wb3J0IGFyZ3YKaW1wb3J0IHR1cnRsZQoKaW1wb3J0IHV0aWxzCgpkZWYgZWRnZShhOiBpbnQsIGI6IGludCk6CiAgICBpZiBhID4gYjoKICAgICAgICByZXR1cm4gKGIsIGEpCiAgICBlbHNlOgogICAgICAgIHJldHVybiAoYSwgYikKClNIUklOSyA9IDg1ClhfT0ZGU0VUID0gODAwCllfT0ZGU0VUID0gMTAwCgpncmFwaCA9IHV0aWxzLmdldF9ncmFwaCgpLmJyYW5jaGVzCgpjbGFzcyBNb2RlKEVudW0pOgogICAgZmxvb3JzID0gMAogICAgZXF1YWxzID0gMQoKbW9kZTogTW9kZSA9IE1vZGUuZmxvb3JzCmN1cnJlbnRfZmxvb3I6IGludCA9IDAKaWYgbGVuKGFyZ3YpID49IDI6CiAgICBtb2RlID0gTW9kZVthcmd2WzFdXQogICAgaWYgbGVuKGFyZ3YpID49IDM6CiAgICAgICAgY3VycmVudF9mbG9vciA9IGludChhcmd2WzJdKQogICAgCmlmIG1vZGUgPT0gTW9kZS5mbG9vcnM6CiAgICBmdWxsX2Zsb29ycyA9IFsociwgKGUsIFtdKSkgZm9yIHIsIGUgaW4gdXRpbHMuZ2V0X2Zsb29ycygpIGlmIGxlbihyKSA+IDBdCmVsaWYgbW9kZSA9PSBNb2RlLmVxdWFsczoKPHxmaW1faG9sZXw+CmVkZ2VfbGVuZ3RocyA9IHV0aWxzLmxvYWRfZWRnZV9sZW5ndGhzKCkKCmVtcHR5X2VkZ2VzID0gc2V0KGNoYWluLmZyb21faXRlcmFibGUoZSBmb3IgciwgZSBpbiB1dGlscy5nZXRfZmxvb3JzKCkgaWYgbGVuKGUpID09IDApKQoKZGlyZWN0aW9ucyA9IHt1dGlscy5EaXJlY3Rpb24uZm9yd2FyZDogOTAsCiAgICAgICAgICAgICAgdXRpbHMuRGlyZWN0aW9uLnJpZ2h0OiAwLAogICAgICAgICAgICAgIHV0aWxzLkRpcmVjdGlvbi5iYWNrd2FyZDogMjcwLAogICAgICAgICAgICAgIHV0aWxzLkRpcmVjdGlvbi5sZWZ0OiAxODB9CgpkZWYgZHJhd19mbG9vcihmbG9vcm51bTogaW50KToKICAgIGdsb2JhbCBjdXJyZW50X2Zsb29yCiAgICBjdXJyZW50X2Zsb29yID0gZmxvb3JudW0KCiAgICBub2RlX2Nvb3JkcyA9IHV0aWxzLmdldF9ub2RlX2Nvb3Jkcyh1dGlscy5EaXJlY3Rpb24ubGVmdCkgCgogICAgaWYgZmxvb3JudW0gPT0gbGVuKGZ1bGxfZmxvb3JzKToKICAgICAgICByb29tcyA9IFtdCiAgICAgICAgIyBBbGwgZWRnZXMgd2l0aCByb29tcwogICAgICAgIHByaW50KCdTaG93aW5nIGV2ZXJ5dGhpbmcnKQogICAgICAgIGVkZ2VzID0gY2hhaW4uZnJvbV9pdGVyYWJsZShjaGFpbigoKFRydWUsIGUpIGZvciBlIGluIGVkZ2VzWzBdKSwgKChGYWxzZSwgZSkgZm9yIGUgaW4gZWRnZXNbMV0pKSBmb3IgXywgZWRnZXMgaW4gZnVsbF9mbG9vcnMpCiAgICAgICAgIyBFZGdlcyB3aXRoIGVsZXZhdGlvbiBjaGFuZ2VzCiAgICAgICAgI2VkZ2VzID0gc2V0KGNoYWluLmZyb21faXRlcmFibGUoKGVkZ2UodiwgbikgZm9yIG4gaW4gYi52YWx1ZXMoKSBpZiBzZXQoWyd1JywgJ2QnXSkgJiBzZXQodXRpbHMuZ2V0X2dyYXBoKCkuZWRnZWRhdGFbZWRnZSh2LCBuKV1bJ3Jvb21zJ10pKSBmb3IgdiwgYiBpbiBlbnVtZXJhdGUodXRpbHMuZ2V0X2dyYXBoKCkuYnJhbmNoZXMpKSkKICAgICAgICAjIEFsbCBlZGdlcwogICAgICAgICMuLi4KICAgIGVsaWYgZmxvb3JudW0gPj0gMCBhbmQgZmxvb3JudW0gPCBsZW4oZnVsbF9mbG9vcnMpOgogICAgICAgIHJvb21zLCBlZGdlcyA9IGZ1bGxfZmxvb3JzW2Zsb29ybnVtXQogICAgICAgIHByaW50KGVkZ2VzKQogICAgICAgIGVkZ2VzID0gY2hhaW4oKChUcnVlLCBlKSBmb3IgZSBpbiBlZGdlc1swXSksICgoRmFsc2UsIGUpIGZvciBlIGluIGVkZ2VzWzFdKSkKICAgICAgICBwcmludChyb29tcykKICAgIGVsc2U6CiAgICAgICAgcmV0dXJuCgogICAgdHVydGxlLnNob3d0dXJ0bGUoKQogICAgdHVydGxlLnNwZWVkKDApCiAgICB0dXJ0bGUuY2xlYXIoKQoKICAgIHdyaXR0ZW5fbm9kZXMgPSBzZXQoKQoKICAgIGZvciBlZGdlX2RpciwgKGEsIGIpIGluIGVkZ2VzOgogICAgICAgIHR1cnRsZS5wZW51cCgpCiAgICAgICAgeCwgeSwgXyA9IG5vZGVfY29vcmRzW2FdCiAgICAgICAgdHVydGxlLmdvdG8oeCAvIFNIUklOSyArIFhfT0ZGU0VULCB5IC8gU0hSSU5LICsgWV9PRkZTRVQpCiAgICAgICAgaWYgYSBub3QgaW4gd3JpdHRlbl9ub2RlczoKICAgICAgICAgICAgdHVydGxlLndyaXRlKGEpCiAgICAgICAgICAgIHdyaXR0ZW5fbm9kZXMuYWRkKGEpCgogICAgICAgIHR1cnRsZS5wZW5kb3duKCkKCiAgICAgICAgaWYgZWRnZV9kaXI6CiAgICAgICAgICAgIGlmIGVkZ2VfbGVuZ3Roc1tlZGdlKGEsIGIpXSA8PSAwOgogICAgICAgICAgICAgICAgdHVydGxlLnBlbmNvbG9yKCdyZWQnKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgdHVydGxlLnBlbmNvbG9yKCdibGFjaycpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgZWRnZV9sZW5ndGhzW2VkZ2UoYSwgYildIDw9IDA6CiAgICAgICAgICAgICAgICB0dXJ0bGUucGVuY29sb3IoJ2JsdWUnKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgdHVydGxlLnBlbmNvbG9yKCdncmVlbicpCgogICAgICAgIHgsIHksIF8gPSBub2RlX2Nvb3Jkc1tiXQogICAgICAgIHR1cnRsZS5nb3RvKHggLyBTSFJJTksgKyBYX09GRlNFVCwgeSAvIFNIUklOSyArIFlfT0ZGU0VUKQogICAgICAgIHR1cnRsZS5wZW5jb2xvcignYmxhY2snKQogICAgICAgIGlmIGIgbm90IGluIHdyaXR0ZW5fbm9kZXM6CiAgICAgICAgICAgIHR1cnRsZS53cml0ZShiKQogICAgICAgICAgICB3cml0dGVuX25vZGVzLmFkZChiKQoKICAgIHR1cnRsZS5oaWRldHVydGxlKCkKICAgIHR1cnRsZS5kb25lKCkKCmRlZiBuZXh0X2Zsb29yKHgsIHkpOgogICAgZHJhd19mbG9vcigoY3VycmVudF9mbG9vciArIDEpICUgKGxlbihmdWxsX2Zsb29ycykgKyAxKSkKCmRlZiBwcmV2X2Zsb29yKHgsIHkpOgogICAgZHJhd19mbG9vcigoY3VycmVudF9mbG9vciAtIDEpICUgKGxlbihmdWxsX2Zsb29ycykgKyAxKSkKCnR1cnRsZS5TY3JlZW4oKS5vbmNsaWNrKG5leHRfZmxvb3IsIDEpCnR1cnRsZS5TY3JlZW4oKS5vbmNsaWNrKHByZXZfZmxvb3IsIDMpCgpkcmF3X2Zsb29yKGN1cnJlbnRfZmxvb3IpCjx8ZmltX3N1ZmZpeHw+CiAgICBpbXBvcnQgZXF1YXRpb25zCiAgICBmdWxsX2Zsb29ycyA9IGxpc3QoZW51bWVyYXRlKGVxdWF0aW9ucy5nZXRfcm93cygpKSkKCjx8ZmltX2VuZHw+"]
["8bd71edcfe971c4902fa296eef897434c1602f76-3","8bd71edcfe971c4902fa296eef897434c1602f76","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBzeWNvcGcyCmZyb20gY29yZS5sb2dnZXIgaW1wb3J0IExvZ2dlcgoKY2xhc3MgRGF0YWJhc2Uob2JqZWN0KToKCiAgICBfZGJuYW1lID0gIiIKICAgIF9kYmhvc3QgPSAiIgogICAgX2RidXNlciA9ICIiCiAgICBfZGJwYXNzID0gIiIKICAgIF9jb25uID0gTm9uZQogICAgX2xvZ2dlciA9IExvZ2dlcigpCgogICAgZGVmIGNvbmZpZyhzZWxmLCBuYW1lLCBob3N0LCB1c2VyLCBwYXNzd2QpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5fZGJuYW1lID0gbmFtZQogICAgICAgIHNlbGYuX2RiaG9zdCA9IGhvc3QKICAgICAgICBzZWxmLl9kYnVzZXIgPSB1c2VyCiAgICAgICAgc2VsZi5fZGJwYXNzID0gcGFzc3dkCjx8ZmltX2VuZHw+"]
["47d592dd798887cf529ff4cf3f0b07a79916aa88-2","47d592dd798887cf529ff4cf3f0b07a79916aa88","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYi5zaXRlcy5tb2RlbHMgaW1wb3J0IFNpdGUKZnJvbSBkamFuZ28uc2hvcnRjdXRzIGltcG9ydCByZW5kZXIsIHJlZGlyZWN0CmZyb20gZGphbmdvLnV0aWxzLmVuY29kaW5nIGltcG9ydCBmb3JjZV9ieXRlcywgZm9yY2VfdGV4dApmcm9tIGRqYW5nby51dGlscy5odHRwIGltcG9ydCB1cmxzYWZlX2Jhc2U2NF9lbmNvZGUsIHVybHNhZmVfYmFzZTY0X2RlY29kZQpmcm9tIGRqYW5nby50ZW1wbGF0ZS5sb2FkZXIgaW1wb3J0IHJlbmRlcl90b19zdHJpbmcKZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgcmVxdWVzdApmcm9tIGRqYW5nby5jb250cmliLmF1dGggaW1wb3J0IGxvZ2luLCBsb2dvdXQsIGF1dGhlbnRpY2F0ZQpmcm9tIGRqYW5nby5jb250cmliLmF1dGguZm9ybXMgaW1wb3J0IFVzZXJDcmVhdGlvbkZvcm0KZnJvbSBkamFuZ28uY29yZS5tYWlsIGltcG9ydCBFbWFpbE11bHRpQWx0ZXJuYXRpdmVzCmZyb20gZGphbmdvLmNvbnRyaWIuYXV0aC5tb2RlbHMgaW1wb3J0IFVzZXIKZnJvbSBkamFuZ28uY29udHJpYi5hdXRoIGltcG9ydCB1cGRhdGVfc2Vzc2lvbl9hdXRoX2hhc2gKZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLmRlY29yYXRvcnMgaW1wb3J0IGxvZ2luX3JlcXVpcmVkCmZyb20gLm1vZGVscyBpbXBvcnQgSW1hZ2UsIENhdGVnb3J5LCBMb2NhdGlvbgpmcm9tIC5mb3JtcyBpbXBvcnQgU2lnblVwRm9ybSwgUHJvZmlsZUZvcm0sIEVkaXRQcm9maWxlRm9ybSwgU2lnbkluRm9ybQpmcm9tIC50b2tlbnMgaW1wb3J0IGFjY291bnRfYWN0aXZhdGlvbl90b2tlbgpmcm9tIC5lbWFpbCBpbXBvcnQgc2VuZF93ZWxjb21lX2VtYWlsCgojIGltcG9ydCBweXBlcmNsaXAKCiMgQ3JlYXRlIHlvdXIgdmlld3MgaGVyZS4KZGVmIGluZGV4KHJlcXVlc3QpOgogICAgcmV0dXJuIHJlZGlyZWN0KCJzaWdudXAiKQoKCkBsb2dpbl9yZXF1aXJlZApkZWYgZ2FsbGVyeShyZXF1ZXN0KToKICAgIGFsbF9jYXRzID0gQ2F0ZWdvcnkuZ2V0X2FsbCgpCiAgICBhbGxfbG9jYXRpb25zID0gTG9jYXRpb24uZ2V0X2FsbCgpCiAgICByZXR1cm4gcmVuZGVyKAogICAgICAgIHJlcXVlc3QsICJnYWxsZXJ5Lmh0bWwiLCB7ImFsbF9jYXRzIjogYWxsX2NhdHMsICJhbGxfbG9jYXRpb25zIjogYWxsX2xvY2F0aW9uc30KICAgICkKCgpAbG9naW5fcmVxdWlyZWQKZGVmIGdhbGxlcnlfY2F0ZWdvcnkocmVxdWVzdCwgY2F0ZWdvcnlfaWQpOgogICAgcGljcyA9IEltYWdlLmZldGNoX2ltYWdlc19pbl9jYXRlZ29yeShjYXRlZ29yeV9pZCkKICAgIGljb24gPSBJbWFnZS5pY29uCiAgICAjIGNvcHkgPSBweXBlcmNsaXAuY29weShyZXF1ZXN0LkdFVC5nZXQoImNvcHkiKSkKICAgIGNhdF9uYW1lID0gSW1hZ2UuY2F0ZWdvcnkKICAgIHJldHVybiByZW5kZXIoCiAgICAgICAgcmVxdWVzdCwgImNhdGVnb3J5Lmh0bWwiLCB7InBpY3MiOiBwaWNzLCAiaWNvbiI6IGljb24sICJjYXRfbmFtZSI6IGNhdF9uYW1lfQogICAgKQoKCkBsb2dpbl9yZXF1aXJlZApkZWYgcGljX2xvY2F0aW9uKHJlcXVlc3QsIGxvY2F0aW9uX2lkKToKICAgIGFsbF9sb2NhdGlvbnMgPSBMb2NhdGlvbi5nZXRfYWxsKCkKICAgIGxvY19uYW1lID0gSW1hZ2UubG9jYXRpb24KCiAgICBpZiBsb2NhdGlvbl9pZCA9PSAwMDoKICAgICAgICBwaWNzID0gSW1hZ2UuYWxsX2ltYWdlcygpCiAgICBlbHNlOgogICAgICAgIHBpY3MgPSBJbWFnZS5maWx0ZXJfYnlfbG9jYXRpb24obG9jYXRpb25faWQpCiAgICByZXR1cm4gcmVuZGVyKAogICAgICAgIHJlcXVlc3QsCiAgICAgICAgImxvY2F0aW9uLmh0bWwiLAogICAgICAgIHsicGljcyI6IHBpY3MsICJhbGxfbG9jYXRpb25zIjogYWxsX2xvY2F0aW9ucywgImxvY19uYW1lIjogbG9jX25hbWV9LAogICAgKQoKCkBsb2dpbl9yZXF1aXJlZApkZWYgc2VhcmNoX2NhdGVnb3J5KHJlcXVlc3QpOgoKICAgIGlmICJjYXRlZ29yeSIgaW4gcmVxdWVzdC5HRVQgYW5kIHJlcXVlc3QuR0VUWyJjYXRlZ29yeSJdOgogICAgICAgIHNlYXJjaF90ZXJtID0gcmVxdWVzdC5HRVQuZ2V0KCJjYXRlZ29yeSIpCiAgICAgICAgc2VhcmNoZWRfY2F0ZWdvcmllcyA9IEltYWdlLnNlYXJjaF9ieV9jYXRlZ29yeShzZWFyY2hfdGVybSkKICAgICAgICBtZXNzYWdlID0gZiJ7c2VhcmNoX3Rlcm19IgoKICAgICAgICByZXR1cm4gcmVuZGVyKAogICAgICAgICAgICByZXF1ZXN0LCAic2VhcmNoLmh0bWwiLCB7Im1lc3NhZ2UiOiBtZXNzYWdlLCAicGljcyI6IHNlYXJjaGVkX2NhdGVnb3JpZXN9CiAgICAgICAgKQoKICAgIGVsc2U6CiAgICAgICAgbWVzc2FnZSA9ICJZb3UgaGF2ZW4ndCBzZWFyY2hlZCBmb3IgYW55IGNhdGVnb3J5IgogICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgImNhdGVnb3J5Lmh0bWwiLCB7Im1lc3NhZ2UiOiBtZXNzYWdlfSkKCgojIGRlZiBzaWduaW4ocmVxdWVzdCk6CiMgICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICJQT1NUIjoKIyAgICAgICAgIGZvcm0gPSBTaWduSW5Gb3JtKHJlcXVlc3QuUE9TVCkKIyAgICAgICAgIGlmIGZvcm0uaXNfdmFsaWQoKToKIyAgICAgICAgICAgICByZXR1cm4gcmVkaXJlY3QoImdhbGxlcnkiKQojICAgICAgICAgZWxzZToKIyAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICJzaWduaW4uaHRtbCIsIHsiZm9ybSI6IGZvcm19KQoKIyAgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCAic2lnbmluLmh0bWwiLCB7ImZvcm0iOiBmb3JtfSkKCgpkZWYgc2lnbnVwKHJlcXVlc3QpOgogICAgaWYgcmVxdWVzdC5tZXRob2QgPT0gIlBPU1QiOgogICAgICAgIGZvcm0gPSBTaWduVXBGb3JtKHJlcXVlc3QuUE9TVCkKICAgICAgICBpZiBmb3JtLmlzX3ZhbGlkKCk6CiAgICAgICAgICAgIHVzZXIgPSBmb3JtLnNhdmUoY29tbWl0PUZhbHNlKQogICAgICAgICAgICB1c2VyLmlzX2FjdGl2ZSA9IEZhbHNlCiAgICAgICAgICAgICMgdXNlci5yZWZyZXNoX2Zyb21fZGIoKSAgIyBsb2FkIHRoZSBwcm9maWxlIGluc3RhbmNlIGNyZWF0ZWQgYnkgdGhlIHNpZ25hbAogICAgICAgICAgICAjIHVzZXIucHJvZmlsZS5iaXJ0aF9kYXRlID0gZm9ybS5jbGVhbmVkX2RhdGEuZ2V0KCJiaXJ0aF9kYXRlIikKICAgICAgICAgICAgdXNlci5zYXZlKCkKICAgICAgICAgICAgc3ViamVjdCA9ICJBY3RpdmF0ZSBZb3VyIFBob3RvcGVkaWEgQWNjb3VudCIKICAgICAgICAgICAgY3VycmVudF9zaXRlID0gU2l0ZS5vYmplY3RzLmdldF9jdXJyZW50KCkKICAgICAgICAgICAgcHJpbnQoY3VycmVudF9zaXRlLmRvbWFpbikKICAgICAgICAgICAgIyBjdXJyZW50X3NpdGUgPSBnZXRfY3VycmVudF9zaXRlKHJlcXVlc3QpCiAgICAgICAgICAgIHNlbmRlciA9ICJhdHN0LmFjYzE5QGdtYWlsLmNvbSIKCiAgICAgICAgICAgICMgcGFzc2luZyBpbiB0aGUgY29udGV4dCB2YWlyYWJsZXMKICAgICAgICAgICAgdGV4dF9jb250ZW50ID0gcmVuZGVyX3RvX3N0cmluZygKICAgICAgICAgICAgICAgICJhY2NvdW50X2FjdGl2YXRpb25fZW1haWwudHh0IiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXNlciI6IHVzZXIsCiAgICAgICAgICAgICAgICAgICAgImRvbWFpbiI6IGN1cnJlbnRfc2l0ZS5kb21haW4sCiAgICAgICAgICAgICAgICAgICAgInVpZCI6IHVybHNhZmVfYmFzZTY0X2VuY29kZShmb3JjZV9ieXRlcyh1c2VyLnBrKSksCiAgICAgICAgICAgICAgICAgICAgInRva2VuIjogYWNjb3VudF9hY3RpdmF0aW9uX3Rva2VuLm1ha2VfdG9rZW4odXNlciksCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApCiAgICAgICAgICAgIGh0bWxfY29udGVudCA9IHJlbmRlcl90b19zdHJpbmcoCiAgICAgICAgICAgICAgICAiYWNjb3VudF9hY3RpdmF0aW9uX2VtYWlsLmh0bWwiLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1c2VyIjogdXNlciwKICAgICAgICAgICAgICAgICAgICAiZG9tYWluIjogY3VycmVudF9zaXRlLmRvbWFpbiwKICAgICAgICAgICAgICAgICAgICAidWlkIjogdXJsc2FmZV9iYXNlNjRfZW5jb2RlKGZvcmNlX2J5dGVzKHVzZXIucGspKSwKICAgICAgICAgICAgICAgICAgICAidG9rZW4iOiBhY2NvdW50X2FjdGl2YXRpb25fdG9rZW4ubWFrZV90b2tlbih1c2VyKSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICkKCiAgICAgICAgICAgIG1zZyA9IEVtYWlsTXVsdGlBbHRlcm5hdGl2ZXMoc3ViamVjdCwgdGV4dF9jb250ZW50LCBzZW5kZXIsIFt1c2VyLmVtYWlsXSkKICAgICAgICAgICAgbXNnLmF0dGFjaF9hbHRlcm5hdGl2ZShodG1sX2NvbnRlbnQsICJ0ZXh0L2h0bWwiKQogICAgICAgICAgICBtc2cuc2VuZCgpCiAgICAgICAgICAgICMgcHJpbnQocmVzKQogICAgICAgICAgICAjIHNlbmRfd2VsY29tZV9lbWFpbCh1c2VyLnVzZXJuYW1lLCB1c2VyLmVtYWlsKQogICAgICAgICAgICByZXR1cm4gcmVkaXJlY3QoImFjY291bnRfYWN0aXZhdGlvbl9zZW50IikKICAgIGVsc2U6CiAgICAgICAgZm9ybSA9IFNpZ25VcEZvcm0oKQogICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCAic2lnbnVwLmh0bWwiLCB7ImZvcm0iOiBmb3JtfSkKCgpkZWYgYWNjb3VudF9hY3RpdmF0aW9uX3NlbnQocmVxdWVzdCk6CiAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICJhY2NvdW50X2FjdGl2YXRpb25fc2VudC5odG1sIikKCgpkZWYgYWN0aXZhdGUocmVxdWVzdCwgdWlkYjY0LCB0b2tlbik6CiAgICB0cnk6CiAgICAgICAgdWlkID0gZm9yY2VfdGV4dCh1cmxzYWZlX2Jhc2U2NF9kZWNvZGUodWlkYjY0KSkKICAgICAgICB1c2VyID0gVXNlci5vYmplY3RzLmdldChwaz11aWQpCiAgICBleGNlcHQgKFR5cGVFcnJvciwgVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvciwgVXNlci5Eb2VzTm90RXhpc3QpOgogICAgICAgIHVzZXIgPSBOb25lCgogICAgaWYgdXNlciBpcyBub3QgTm9uZSBhbmQgYWNjb3VudF9hY3RpdmF0aW9uX3Rva2VuLmNoZWNrX3Rva2VuKHVzZXIsIHRva2VuKToKICAgICAgICB1c2VyLmlzX2FjdGl2ZSA9IFRydWUKICAgICAgICB1c2VyLnByb2ZpbGUuZW1haWxfY29uZmlybWVkID0gVHJ1ZQogICAgICAgIHVzZXIuc2F2ZSgpCiAgICAgICAgbG9naW4ocmVxdWVzdCwgdXNlcikKICAgICAgICBzdWJqZWN0ID0gIldlbGNvbWUgdG8gUGhvdG9wZWRpYSIKICAgICAgICBzZW5kZXIgPSAiYXRzdC5hY2MxOUBnbWFpbC5jb20iCgogICAgICAgICMgcGFzc2luZyBpbiB0aGUgY29udGV4dCB2YWlyYWJsZXMKICAgICAgICB0ZXh0X2NvbnRlbnQgPSByZW5kZXJfdG9fc3RyaW5nKCJ3ZWxjb21lX2VtYWlsLnR4dCIsIHsidXNlciI6IHVzZXJ9KQogICAgICAgIGh0bWxfY29udGVudCA9IHJlbmRlcl90b19zdHJpbmcoIndlbGNvbWVfZW1haWwuaHRtbCIsIHsidXNlciI6IHVzZXJ9KQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgIG1zZyA9IEVtYWlsTXVsdGlBbHRlcm5hdGl2ZXMoc3ViamVjdCwgdGV4dF9jb250ZW50LCBzZW5kZXIsIFt1c2VyLmVtYWlsXSkKICAgICAgICBtc2cuYXR0YWNoX2FsdGVybmF0aXZlKGh0bWxfY29udGVudCwgInRleHQvaHRtbCIpCiAgICAgICAgbXNnLnNlbmQoKQo8fGZpbV9lbmR8Pg=="]
["d0d16614339469e7dc98c945e015d263bb771a07-1","d0d16614339469e7dc98c945e015d263bb771a07","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uc2hvcnRjdXRzIGltcG9ydCByZW5kZXIscmVkaXJlY3QKaW1wb3J0IGRhdGV0aW1lIGFzIGR0CmZyb20gLm1vZGVscyBpbXBvcnQgUHJvamVjdHMsUHJvZmlsZQpmcm9tIGRqYW5nby5jb250cmliLmF1dGguZGVjb3JhdG9ycyBpbXBvcnQgbG9naW5fcmVxdWlyZWQKZnJvbSAuZm9ybXMgaW1wb3J0IFByb2plY3RzRm9ybSxFZGl0UHJvZmlsZUZvcm0sUmF0ZVJldmlld0Zvcm0KZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLm1vZGVscyBpbXBvcnQgVXNlcgpmcm9tIHJlc3RfZnJhbWV3b3JrLnJlc3BvbnNlIGltcG9ydCBSZXNwb25zZQpmcm9tIHJlc3RfZnJhbWV3b3JrLnZpZXdzIGltcG9ydCBBUElWaWV3CmZyb20gLnNlcmlhbGl6ZXIgaW1wb3J0IFByb2ZpbGVTZXJpYWxpemVyLCBQcm9qZWN0c1NlcmlhbGl6ZXIKZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgc3RhdHVzCmZyb20gLnBlcm1pc3Npb25zIGltcG9ydCBJc0FkbWluT3JSZWFkT25seQoKCiMgQ3JlYXRlIHlvdXIgdmlld3MgaGVyZS4KZGVmIGNvbnZlcnRfZGF0ZXMoZGF0ZXMpOgogICAgIyBmdW5jdGlvbiB0aGF0IGdldHMgdGhlIHdlZWtkYXkgbnVtYmVyIGZvciB0aGUgZGF0ZS4KICAgIGRheV9udW1iZXIgPSBkdC5kYXRlLndlZWtkYXkoZGF0ZXMpCgogICAgZGF5cyA9IFsnTW9uZGF5JywnVHVlc2RheScsJ1dlZG5lc2RheScsJ3RodXJzZGF5JywnRnJpZGF5JywnU2F0dXJkYXknLCdTdW5kYXknXQogICAgJycnCiAgICBSZXR1cm5zIHRoZSBhY3R1YWwgZGF5IG9mIHRoZSB3ZWVrCiAgICAnJycKICAgIGRheSA9IGRheXNbZGF5X251bWJlcl0KICAgIHJldHVybiBkYXkKCmRlZiBpbmRleChyZXF1ZXN0KToKICAgIGRhdGU9ZHQuZGF0ZS50b2RheQogICAgcHJvamVjdHM9UHJvamVjdHMub2JqZWN0cy5hbGwoKQogICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCdpbmRleC5odG1sJyx7ImRhdGUiOiBkYXRlLCAicHJvamVjdHMiOiBwcm9qZWN0c30pCgpAbG9naW5fcmVxdWlyZWQobG9naW5fdXJsPScvYWNjb3VudHMvbG9naW4nKQpkZWYgcHJvamVjdHMocmVxdWVzdCxpZCk6CiAgICBwcm9qZWN0cz0gUHJvamVjdHMub2JqZWN0cy5maWx0ZXIoaWRfX2ljb250YWlucyA9IGlkKQogICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCJwcm9qZWN0cy5odG1sIix7InByb2plY3RzIjogcHJvamVjdHN9KQoKQGxvZ2luX3JlcXVpcmVkKGxvZ2luX3VybD0nL2FjY291bnRzL2xvZ2luJykKZGVmIHVwbG9hZF9wcm9qZWN0cyhyZXF1ZXN0KToKICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICdQT1NUJzoKICAgICAgICBmb3JtID0gUHJvamVjdHNGb3JtKHJlcXVlc3QuUE9TVCwgcmVxdWVzdC5GSUxFUykKICAgICAgICBpZiBmb3JtLmlzX3ZhbGlkKCk6CiAgICAgICAgICAgIHVwbG9hZD1mb3JtLnNhdmUoY29tbWl0PUZhbHNlKQogICAgICAgICAgICB1cGxvYWQucHJvZmlsZSA9IHJlcXVlc3QudXNlcgogICAgICAgICAgICB1cGxvYWQuc2F2ZSgpCiAgICAgICAgICAgIHJldHVybiByZWRpcmVjdCgnaW5kZXgnKQogICAgZWxzZToKICAgICAgICBmb3JtID0gUHJvamVjdHNGb3JtKCkKICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwndXBsb2FkX3Byb2plY3RzLmh0bWwnLHsnZm9ybSc6Zm9ybX0pCgpAbG9naW5fcmVxdWlyZWQobG9naW5fdXJsPScvYWNjb3VudHMvbG9naW4nKQpkZWYgc2VhcmNoX3Byb2plY3RzKHJlcXVlc3QpOgogICAgaWYgJ3Byb2plY3RzJyBpbiByZXF1ZXN0LkdFVCBhbmQgcmVxdWVzdC5HRVRbInByb2plY3RzIl06CiAgICAgICAgc2VhcmNoX3Rlcm09cmVxdWVzdC5HRVQuZ2V0KCJwcm9qZWN0cyIpCiAgICAgICAgc2VhcmNoZWRfcHJvamVjdHM9UHJvamVjdHMuc2VhcmNoX2J5X3RpdGxlKHNlYXJjaF90ZXJtKQogICAgICAgIG1lc3NhZ2U9ZiJ7c2VhcmNoX3Rlcm19IgogICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwnc2VhcmNoLmh0bWwnLHsibWVzc2FnZSI6bWVzc2FnZSwicHJvamVjdHMiOnNlYXJjaGVkX3Byb2plY3RzfSkKCkBsb2dpbl9yZXF1aXJlZChsb2dpbl91cmw9Jy9hY2NvdW50cy9sb2dpbicpCmRlZiBwcm9maWxlKHJlcXVlc3QpOgogICAgdXNlciA9IFVzZXIub2JqZWN0cy5hbGwoKQogICAgZm9yIHVzZXIgaW4gdXNlcjoKICAgICAgICBwcm9maWxlID0gUHJvZmlsZS5vYmplY3RzLmFsbCgpCiAgICAgICAgcHJvamVjdHM9UHJvamVjdHMub2JqZWN0cy5hbGwoKQogICAgICAgIHByaW50ICh1c2VyKQogICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwiUHJvZmlsZS9wcm9maWxlLmh0bWwiLHsgInVzZXIiOiB1c2VyLCJwcm9maWxlIjogcHJvZmlsZSwicHJvamVjdHMiOiBwcm9qZWN0c30pCgpAbG9naW5fcmVxdWlyZWQobG9naW5fdXJsPScvYWNjb3VudHMvbG9naW4nKQpkZWYgZWRpdF9wcm9maWxlKHJlcXVlc3QpOgogICAgY3VycmVudF91c2VyID0gcmVxdWVzdC51c2VyCiAgICBpZiByZXF1ZXN0Lm1ldGhvZCA9PSAnUE9TVCc6CiAgICAgICAgZm9ybSA9IEVkaXRQcm9maWxlRm9ybShyZXF1ZXN0LlBPU1QsIHJlcXVlc3QuRklMRVMpCiAgICAgICAgaWYgZm9ybS5pc192YWxpZCgpOgogICAgICAgICAgICBwcm9maWxlID0gZm9ybS5zYXZlKGNvbW1pdD1GYWxzZSkKICAgICAgICAgICAgcHJvZmlsZS51c2VyID0gY3VycmVudF91c2VyCjx8ZmltX2hvbGV8PgogICAgZWxzZToKICAgICAgICBmb3JtID0gRWRpdFByb2ZpbGVGb3JtKCkKICAgICAgICAgICAgCiAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsJ1Byb2ZpbGUvZWRpdF9wcm9maWxlLmh0bWwnLHsnZm9ybSc6Zm9ybX0pCgpAbG9naW5fcmVxdWlyZWQobG9naW5fdXJsPScvYWNjb3VudHMvbG9naW4nKQpkZWYgcmV2aWV3KHJlcXVlc3QpOgogICAgY3VycmVudF91c2VyPXJlcXVlc3QudXNlcgogICAgcHJvamVjdHM9UHJvamVjdHMub2JqZWN0cy5maWx0ZXIodXNlcj1jdXJyZW50X3VzZXIuaWQpLmZpcnN0KCkKICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICdQT1NUJzoKICAgICAgICBmb3JtPVJhdGVSZXZpZXdGb3JtKHJlcXVlc3QuUE9TVCxyZXF1ZXN0LkZpbGVzKQogICAgICAgIGlmIGZvcm0uaXNfdmFsaWQoKToKICAgICAgICAgICAgcmV2aWV3PWZvcm0uc2F2ZShjb21taXQ9RmFsc2UpCiAgICAgICAgICAgIHJldmlldy5wcm9qZWN0PXByb2plY3RzCiAgICAgICAgICAgIHJldmlldy5zYXZlCiAgICAgICAgICAgIHJldHVybiByZWRpcmVjdCgnaW5kZXgnKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGZvcm09UmF0ZVJldmlld0Zvcm0oKQogICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwncmV2aWV3Lmh0bWwnLHsiZm9ybSI6IGZvcm0sInByb2ZpbGUiOnByb2ZpbGV9KQogICAgCmNsYXNzIFByb2ZpbGVMaXN0KEFQSVZpZXcpOgogICAgZGVmIGdldChzZWxmLCByZXF1ZXN0LCBmb3JtYXQ9Tm9uZSk6CiAgICAgICAgYWxsX3Byb2ZpbGVzID0gUHJvZmlsZS5vYmplY3RzLmFsbCgpCiAgICAgICAgc2VyaWFsaXplcnMgPSBQcm9maWxlU2VyaWFsaXplcihhbGxfcHJvZmlsZXMsIG1hbnk9VHJ1ZSkKICAgICAgICBwZXJtaXNzaW9uX2NsYXNzZXMgPSAoSXNBZG1pbk9yUmVhZE9ubHksKQogICAgICAgIHJldHVybiBSZXNwb25zZShzZXJpYWxpemVycy5kYXRhKQogICAgCiAgICBkZWYgcG9zdChzZWxmLCByZXF1ZXN0LCBmb3JtYXQ9Tm9uZSk6CiAgICAgICAgc2VyaWFsaXplcnMgPSBQcm9maWxlU2VyaWFsaXplcihkYXRhPXJlcXVlc3QuZGF0YSkKICAgICAgICBpZiBzZXJpYWxpemVycy5pc192YWxpZCgpOgogICAgICAgICAgICBzZXJpYWxpemVycy5zYXZlKCkKICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlKHNlcmlhbGl6ZXJzLmRhdGEsIHN0YXR1cz1zdGF0dXMuSFRUUF8yMDFfQ1JFQVRFRCkKICAgICAgICByZXR1cm4gUmVzcG9uc2Uoc2VyaWFsaXplcnMuZXJyb3JzLCBzdGF0dXM9c3RhdHVzLkhUVFBfNDAwX0JBRF9SRVFVRVNUKQogICAgCmNsYXNzIFByb2plY3RzTGlzdChBUElWaWV3KToKICAgIGRlZiBnZXQoc2VsZiwgcmVxdWVzdCwgZm9ybWF0PU5vbmUpOgogICAgICAgIGFsbF9wcm9qZWN0cyA9IFByb2plY3RzLm9iamVjdHMuYWxsKCkKICAgICAgICBzZXJpYWxpemVycyA9IFByb2plY3RzU2VyaWFsaXplcihhbGxfcHJvamVjdHMsIG1hbnk9VHJ1ZSkKICAgICAgICBwZXJtaXNzaW9uX2NsYXNzZXMgPSAoSXNBZG1pbk9yUmVhZE9ubHksKQogICAgICAgIHJldHVybiBSZXNwb25zZShzZXJpYWxpemVycy5kYXRhKQogICAgCiAgICBkZWYgcG9zdChzZWxmLCByZXF1ZXN0LCBmb3JtYXQ9Tm9uZSk6CiAgICAgICAgc2VyaWFsaXplcnMgPSBQcm9qZWN0U2VyaWFsaXplcihkYXRhPXJlcXVlc3QuZGF0YSkKICAgICAgICBpZiBzZXJpYWxpemVycy5pc192YWxpZCgpOgogICAgICAgICAgICBzZXJpYWxpemVycy5zYXZlKCkKICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlKHNlcmlhbGl6ZXJzLmRhdGEsIHN0YXR1cz1zdGF0dXMuSFRUUF8yMDFfQ1JFQVRFRCkKICAgICAgICByZXR1cm4gUmVzcG9uc2Uoc2VyaWFsaXplcnMuZXJyb3JzLCBzdGF0dXM9c3RhdHVzLkhUVFBfNDAwX0JBRF9SRVFVRVNUKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBwcm9maWxlLnNhdmUoKQogICAgICAgICAgICByZXR1cm4gcmVkaXJlY3QoJ2VkaXRfcHJvZmlsZScpCjx8ZmltX2VuZHw+"]
["e382137a6ec63f385783e043a4abb341861078c8-3","e382137a6ec63f385783e043a4abb341861078c8","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmltcG9ydCBnbG9iCmltcG9ydCBjb2RlY3MKCgpmaWxlcyA9IGdsb2IuZ2xvYignL2hvbWUvZmwzNTAvYmFjaGJvdC9zY3JhdGNoL0JXVi0qLW5vbWFzay1mZXJtYXRhcy50eHQnKQp0cmFpbl9saW5lcyA9IFtdCnZhbF9saW5lcyA9IFtdCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZm9yIGksZnAgaW4gZW51bWVyYXRlKGZpbGVzKToKICAgIHdpdGggY29kZWNzLm9wZW4oZnAsICdyJywgJ3V0Zi04JykgYXMgZmQ6CiAgICAgICAgbGluZXMgPSBtYXAoCiAgICAgICAgICAgICAgICBsYW1iZGEgeDogZmlsdGVyKGxhbWJkYSBjOiBjIG5vdCBpbiAnIFxuJywgeCksCjx8ZmltX2VuZHw+"]
["a9438fc6d18d725f4ea73ec1ab2542f9c4d04d9c-3","a9438fc6d18d725f4ea73ec1ab2542f9c4d04d9c","PHxmaW1fcHJlZml4fD4KZGVmIGxhenlfc3VtKCphcmdzKToKICAgIGRlZiBjYWxjX3N1bSgpOgogICAgICAgIHN1bSA9IDAKICAgICAgICBmb3IgbiBpbiBhcmdzOgo8fGZpbV9ob2xlfD4KICAgICAgICByZXR1cm4gc3VtCiAgICByZXR1cm4gY2FsY19zdW0KCmYgPSBsYXp5X3N1bSgxLDIsMyw0LDUpCnByaW50KGYpCnByaW50KGYoKSkKCmYxID0gbGF6eV9zdW0oMSwyLDMsNCw1KQpmMiA9IGxhenlfc3VtKDEsMiwzLDQsNSkKcHJpbnQoZjEgPT0gZjIpICAjRmFsc2UKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgc3VtID0gc3VtICsgbgo8fGZpbV9lbmR8Pg=="]
["23def18d0bc61911c64289799f6af763c842b9e3-3","23def18d0bc61911c64289799f6af763c842b9e3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBwYW5kYXMgYXMgcGQKZnJvbSBza2xlYXJuLm1vZGVsX3NlbGVjdGlvbiBpbXBvcnQgdHJhaW5fdGVzdF9zcGxpdApmcm9tIHRvcmNoLm5uIGltcG9ydCBCQ0VXaXRoTG9naXRzTG9zcwpmcm9tIGZhc3RhaS5kYXRhLmNvcmUgaW1wb3J0IERhdGFMb2FkZXIsIERhdGFMb2FkZXJzCmZyb20gZmFzdGFpLnZpc2lvbi5sZWFybmVyIGltcG9ydCBMZWFybmVyCmZyb20gZmFzdGFpLmNhbGxiYWNrLmFsbCBpbXBvcnQgKgpmcm9tIGZhc3RhaS5tZXRyaWNzIGltcG9ydCBBY2N1bU1ldHJpYwoKZnJvbSBhbGdvcml0aG0uaTNkLmkzZHB0IGltcG9ydCBJM0QKZnJvbSBjdGRhdGFzZXQgaW1wb3J0IENURGF0YXNldApmcm9tIGNvbmZpZyBpbXBvcnQgZ2V0X2NvbmZpZwpmcm9tIG1ldHJpY3MgaW1wb3J0IGFjY19wcm9ic2V2ZXJlY292aWQKZnJvbSBtZXRyaWNzIGltcG9ydCBhY2NfcHJvYmNvdmlkCmZyb20gbWV0cmljcyBpbXBvcnQgcm9jX3Byb2JzZXZlcmVjb3ZpZApmcm9tIG1ldHJpY3MgaW1wb3J0IHJvY19wcm9iY292aWQKCmltcG9ydCB0b3JjaAppZiB0b3JjaC5jdWRhLmlzX2F2YWlsYWJsZSgpOgogICAgZGV2aWNlID0gJ2N1ZGEnCmVsc2U6CiAgICBkZXZpY2UgPSAnY3B1JwoKQ09ORklHRklMRSA9ICIvb3B0L3RyYWluL2NvbmZpZy9iYXNlbGluZS5qc29uIgoKZGVmIGdldF9kYXRhc2V0cyhjb25maWcsIGRhdGFfZGlyKToKICAgIGltYWdlX2RpciA9IG9zLnBhdGguam9pbihkYXRhX2RpciwgImRhdGEvbWhhLyIpCiAgICByZWZlcmVuY2VfcGF0aCA9IG9zLnBhdGguam9pbihkYXRhX2RpciwgIm1ldGFkYXRhL3JlZmVyZW5jZS5jc3YiKQogICAgZGYgPSBwZC5yZWFkX2NzdihyZWZlcmVuY2VfcGF0aCkKCiAgICBkZlsieCJdID0gZGYuYXBwbHkobGFtYmRhIHJvdzogb3MucGF0aC5qb2luKGltYWdlX2Rpciwgc3RyKHJvd1siUGF0aWVudElEIl0pICsgIi5taGEiKSwgYXhpcz0xKQogICAgZGZbInkiXSA9IGRmLmFwcGx5KGxhbWJkYSByb3c6IFtyb3dbInByb2JDT1ZJRCJdLCByb3dbInByb2JTZXZlcmUiXV0sIGF4aXM9MSkKICAgIGRmX3RyYWluLCBkZl92YWxpZCA9IHRyYWluX3Rlc3Rfc3BsaXQoZGYsIHRlc3Rfc2l6ZT0wLjIsIHJhbmRvbV9zdGF0ZT00MikKCiAgICBkYXRhX3RyYWluID0gZGZfdHJhaW5bWyJ4IiwgInkiXV0udG9fZGljdCgicmVjb3JkcyIpCiAgICBkYXRhX3ZhbGlkID0gZGZfdmFsaWRbWyJ4IiwgInkiXV0udG9fZGljdCgicmVjb3JkcyIpCgogICAgdHJhaW5fZHMgPSBDVERhdGFzZXQoZGF0YV90cmFpbiwgY29uZmlnWyJwcmVwcm9jZXNzX2RpciJdKQogICAgdmFsaWRfZHMgPSBDVERhdGFzZXQoZGF0YV92YWxpZCwgY29uZmlnWyJwcmVwcm9jZXNzX2RpciJdKQogICAgcmV0dXJuIHRyYWluX2RzLCB2YWxpZF9kcwoKCmRlZiBnZXRfbGVhcm4oY29uZmlnLCBkYXRhX2RpciwgYXJ0aWZhY3RfZGlyKToKICAgIHRyYWluX2RzLCB2YWxpZF9kcyA9IGdldF9kYXRhc2V0cyhjb25maWcsIGRhdGFfZGlyKQogICAgdHJhaW5fZGwgPSBEYXRhTG9hZGVyKHRyYWluX2RzLCBicz1jb25maWdbImJhdGNoX3NpemUiXSwgbnVtX3dvcmtlcnM9Y29uZmlnWyJudW1fd29ya2VycyJdLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNodWZmbGU9VHJ1ZSwgZHJvcF9sYXN0PVRydWUpCiAgICB2YWxpZF9kbCA9IERhdGFMb2FkZXIodmFsaWRfZHMsIGJzPWNvbmZpZ1siYmF0Y2hfc2l6ZSJdLCBudW1fd29ya2Vycz1jb25maWdbIm51bV93b3JrZXJzIl0pCgogICAgbW9kZWwgPSBJM0QobnJfb3V0cHV0cz0yKS50byhkZXZpY2UpCgogICAgbWV0cmljcyA9IFsKICAgICAgICBBY2N1bU1ldHJpYyhhY2NfcHJvYmNvdmlkLCBmbGF0dGVuPUZhbHNlKSwKICAgICAgICBBY2N1bU1ldHJpYyhyb2NfcHJvYmNvdmlkLCBmbGF0dGVuPUZhbHNlKSwKICAgICAgICBBY2N1bU1ldHJpYyhhY2NfcHJvYnNldmVyZWNvdmlkLCBmbGF0dGVuPUZhbHNlKSwKICAgICAgICBBY2N1bU1ldHJpYyhyb2NfcHJvYnNldmVyZWNvdmlkLCBmbGF0dGVuPUZhbHNlKQogICAgXQoKICAgIHJldHVybiBMZWFybmVyKERhdGFMb2FkZXJzKHRyYWluX2RsLCB2YWxpZF9kbCksCiAgICAgICAgICAgICAgICAgICBtb2RlbD1tb2RlbCwKICAgICAgICAgICAgICAgICAgIG1ldHJpY3M9bWV0cmljcywKICAgICAgICAgICAgICAgICAgIGxvc3NfZnVuYz1CQ0VXaXRoTG9naXRzTG9zcygpLAogICAgICAgICAgICAgICAgICAgbW9kZWxfZGlyPWFydGlmYWN0X2RpcgogICAgICAgICAgICAgICAgICAgKS50b19mcDE2KCkKCgpkZWYgdHJhaW4obGVhcm4sIGNvbmZpZyk6CiAgICBjYnMgPSBbU2F2ZU1vZGVsQ2FsbGJhY2sobW9uaXRvcj0icm9jX3Byb2JzZXZlcmVjb3ZpZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5hbWU9Y29uZmlnWyJleHBlcmltZW50X25hbWUiXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICBdCiAgICBsZWFybi5maXQoY29uZmlnWyJlcG9jaHMiXSwKICAgICAgICAgICAgICBscj1jb25maWdbImxyIl0sCiAgICAgICAgICAgICAgY2JzPWNicykKCgpkZWYgZG9fbGVhcm5pbmcoZGF0YV9kaXIsIGFydGlmYWN0X2Rpcik6CiAgICAiIiIKICAgIFlvdSBjYW4gaW1wbGVtZW50IHlvdXIgb3duIHNvbHV0aW9uIHRvIHRoZSBTVE9JQzIwMjEgY2hhbGxlbmdlIGJ5IGVkaXRpbmcgdGhpcyBmdW5jdGlvbi4KICAgIDpwYXJhbSBkYXRhX2RpcjogSW5wdXQgZGlyZWN0b3J5IHRoYXQgdGhlIHRyYWluaW5nIERvY2tlciBjb250YWluZXIgaGFzIHJlYWQgYWNjZXNzIHRvLiBUaGlzIGRpcmVjdG9yeSBoYXMgdGhlIHNhbWUKICAgICAgICBzdHJ1Y3R1cmUgYXMgdGhlIHN0b2ljMjAyMS10cmFpbmluZyBTMyBidWNrZXQgKHNlZSBodHRwczovL3JlZ2lzdHJ5Lm9wZW5kYXRhLmF3cy9zdG9pYzIwMjEtdHJhaW5pbmcvKQogICAgOnBhcmFtIGFydGlmYWN0X2RpcjogT3V0cHV0IGRpcmVjdG9yeSB0aGF0LCBhZnRlciB0cmFpbmluZyBoYXMgY29tcGxldGVkLCBzaG91bGQgY29udGFpbiBhbGwgYXJ0aWZhY3RzIChlLmcuIG1vZGVsCiAgICAgICAgd2VpZ2h0cykgdGhhdCB0aGUgaW5mZXJlbmNlIERvY2tlciBjb250YWluZXIgbmVlZHMuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGNvbnRpbnVvdXNseSB1cGRhdGUgdGhlIGNvbnRlbnRzIG9mCiAgICAgICAgdGhpcyBkaXJlY3RvcnkgZHVyaW5nIHRyYWluaW5nLgogICAgOnJldHVybnM6IEEgbGlzdCBvZiBmaWxlbmFtZXMgdGhhdCBhcmUgbmVlZGVkIGZvciB0aGUgaW5mZXJlbmNlIERvY2tlciBjb250YWluZXIuIFRoZXNlIGFyZSBjb3BpZWQgaW50byBhcnRpZmFjdF9kaXIKPHxmaW1faG9sZXw+CiAgICAiIiIKICAgIGNvbmZpZyA9IGdldF9jb25maWcoQ09ORklHRklMRSkKICAgIGxlYXJuID0gZ2V0X2xlYXJuKGNvbmZpZywgZGF0YV9kaXIsIGFydGlmYWN0X2RpcikKICAgIHRyYWluKGxlYXJuLCBjb25maWcpCgogICAgYXJ0aWZhY3RzID0gW10gIyBlbXB0eSBsaXN0IGJlY2F1c2UgdHJhaW4oKSBhbHJlYWR5IHdyaXRlcyBhbGwgYXJ0aWZhY3RzIHRvIGFydGlmYWN0X2RpcgoKICAgICMgSWYgeW91ciBjb2RlIGRvZXMgbm90IHByb2R1Y2UgYWxsIG5lY2Vzc2FyeSBhcnRpZmFjdHMgZm9yIHRoZSBpbmZlcmVuY2UgRG9ja2VyIGNvbnRhaW5lciBpbnRvIGFydGlmYWN0X2RpciwgcmV0dXJuIAogICAgIyB0aGVpciBmaWxlbmFtZXM6CiAgICAjIGFydGlmYWN0cyA9IFsiL3RtcC9tb2RlbF9jaGVja3BvaW50LnB0aCIsICIvdG1wL3NvbWVfb3RoZXJfYXJ0aWZhY3QuanNvbiJdCiAgICAKICAgIHJldHVybiBhcnRpZmFjdHMKCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgaW4gbWFpbi5weS4gSWYgeW91ciBtb2RlbCBhbHJlYWR5IHByb2R1Y2VzIGFsbCBuZWNlc3NhcnkgYXJ0aWZhY3RzIGludG8gYXJ0aWZhY3RfZGlyLCBhbiBlbXB0eSBsaXN0IGNhbiBiZQogICAgICAgIHJldHVybmVkLiBOb3RlOiBUbyBsaW1pdCB0aGUgc2l6ZSBvZiB5b3VyIGluZmVyZW5jZSBEb2NrZXIgY29udGFpbmVyLCBwbGVhc2UgbWFrZSBzdXJlIHRvIG9ubHkgcGxhY2UgZmlsZXMgdGhhdCAKICAgICAgICBhcmUgbmVjZXNzYXJ5IGZvciBpbmZlcmVuY2UgaW50byBhcnRpZmFjdF9kaXIuCjx8ZmltX2VuZHw+"]
["f54eb0fe5c8276f2adaa3f2d10d7d19fbb0cc1eb-2","f54eb0fe5c8276f2adaa3f2d10d7d19fbb0cc1eb","PHxmaW1fcHJlZml4fD4KIyAtKi0gZW5jb2Rpbmc6IHV0Zi04IC0qLQoiIiIKPHxmaW1faG9sZXw+CgoKY2xhc3MgQXV0aENvbmZpZyhBcHBDb25maWcpOgogICAgbmFtZSA9ICJ7eyBjb29raWVjdXR0ZXIucHJvamVjdF9uYW1lIH19LmxvY2FsLmF1dGhlbnRpY2F0aW9uIgogICAgdmVyYm9zZV9uYW1lID0gIkF1dGhlbnRpY2F0aW9uIgo8fGZpbV9zdWZmaXh8PgpDb3B5cmlnaHQgKGMpIDIwMTkgLSBwcmVzZW50IEFwcFNlZWQudXMKIiIiCgpmcm9tIGRqYW5nby5hcHBzIGltcG9ydCBBcHBDb25maWcKPHxmaW1fZW5kfD4="]
["efb7a27c8f8dbed550fe4d84f7c15fa8322c11d8-4","efb7a27c8f8dbed550fe4d84f7c15fa8322c11d8","PHxmaW1fcHJlZml4fD4KIiIiCiMjIwpTY3JpcHQgdG8gcGFyc2UgczMgc3R5bGUgdXJscyBpbnRvIHRoZSBjb3JyZWN0IGlucHV0IGZvcm1hdCBmb3IgdGhlIHBpcGVsaW5lIHJ1bGVzCiMjIwoiIiIJCmltcG9ydCBib3RvMwppbXBvcnQgb3MKCmRlZiBnZXRfc2FtcGxlcyhmaWxlX25hbWUsIHMzX2J1Y2tldCwgZmlsZV90eXBlLCBmaWxlX2luZGV4KToKCglFUlJfc2VyaWFscyA9IHt9CglzaXplX2J5dGVzID0ge30KCglmaWxlID0gb3BlbihmaWxlX25hbWUsICdyJykKCWxpbmVzID0gZmlsZS5yZWFkbGluZXMoKQoJZm9yIGxpbmUgaW4gbGluZXM6CgkJd29yZHMgPSBsaW5lLnNwbGl0KCcvJykKCQlpZiB3b3Jkc1stMl0gbm90IGluIEVSUl9zZXJpYWxzLmtleXMoKToKCQkJSEdfdGVtcHMgPSB3b3Jkc1stMV0uc3BsaXQoJy4nKQoJCQlpZiBIR190ZW1wc1swXSBub3QgaW4gRVJSX3NlcmlhbHMudmFsdWVzKCk6CgkJCQlFUlJfc2VyaWFsc1t3b3Jkc1stMl1dID0gSEdfdGVtcHNbMF0KCQoJczNfYmFtX2J1Y2tldCA9IHMzX2J1Y2tldAoJYnVja2V0X25hbWUsIHByZWZpeCA9IHMzX2JhbV9idWNrZXQuc3BsaXQoJy8nLCAxKQkKCgoJYm90b1MzID0gYm90bzMucmVzb3VyY2UoJ3MzJykKCW15X2J1Y2tldCA9IGJvdG9TMy5CdWNrZXQoYnVja2V0X25hbWUpCgkKCW9ianMgPSBteV9idWNrZXQub2JqZWN0cy5maWx0ZXIoUHJlZml4PXByZWZpeCkKCglFUlIgPSBFUlJfc2VyaWFscy5rZXlzKCkKCWFtX2xpc3QgPSBbXQoJYWlfbGlzdCA9IFtdCglmb3IgeCBpbiBvYmpzOgoJCW1hdGNoaW5nID0gW10KCQltYXRjaGluZyA9IFtzIGZvciBzIGluIEVSUiBpZiBzIGluIHgua2V5XQoJCWlmIGxlbihtYXRjaGluZykgPT0gMSBhbmQgRVJSX3NlcmlhbHNbbWF0Y2hpbmdbMF1dIGluIHgua2V5OgoJCQlpZiB4LmtleS5lbmRzd2l0aCgnLicrZmlsZV90eXBlKToKCQkJCWFtX2xpc3QuYXBwZW5kKHguYnVja2V0X25hbWUgKyAnLycgKyB4LmtleSkKCQkJCXNpemVfYnl0ZXNbb3MucGF0aC5kaXJuYW1lKHgua2V5KS5sc3RyaXAoczNfYmFtX2J1Y2tldCkrJy8nK29zLnBhdGguYmFzZW5hbWUoeC5rZXkpLnJzdHJpcCgnLicrZmlsZV90eXBlKV0gPSB4LnNpemUKCQlpZiB4LmtleS5lbmRzd2l0aCgnLicrZmlsZV9pbmRleCk6CgkJCWFpX2xpc3QuYXBwZW5kKHguYnVja2V0X25hbWUgKyAnLycgKyB4LmtleSkKCSNwcmludChhbV9saXN0KQoJI3ByaW50KCctLS0tLS0nKQoJI3ByaW50KGFpX2xpc3QpCglyZXR1cm4gYW1fbGlzdCwgYWlfbGlzdCwgc2l6ZV9ieXRlcwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgojZ2V0X3NhbXBsZXMoJy9zY3JhdGNoL1NoYXJlcy9sYXllci93b3Jrc3BhY2UvZGV2aW5fc3JhL3N2X3N0ZXAvaHVtYW5fY3JhbS50eHQnLCAnMTAwMGdlbm9tZXMvMTAwMEdfMjUwNF9oaWdoX2NvdmVyYWdlL2RhdGEvJywgJ2NyYW0nLCAnY3JhaScpCjx8ZmltX2VuZHw+"]
["47e3f6e229f9965b29903783bcb0d84bf2e264c2-5","47e3f6e229f9965b29903783bcb0d84bf2e264c2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCB0b3JjaAppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gdHJhaW5fY2lmYXIxMCBpbXBvcnQgYnVpbGRfbW9kZWwsIGxvYWRfbW9kZWwsIHByZXBhcmVfZGF0YXNldApmcm9tIHRyYWluX2NpZmFyMTAgaW1wb3J0IHRlc3QgYXMgdGVzdF9mdW5jCmZyb20gdGVzdCBpbXBvcnQgYWRkX3RyaWdnZXIsIGdldF9wYXR0ZXJuX3RyaWdnZXJfZnVuYywgZ2V0X2JveF90cmlnZ2VyX2Z1bmMsIGxvYWRfdHJpZ2dlcgoKCmRlZiBnZXRfcmVwcmVzZW50YXRpb25zX2Zvcl9sYWJlbHMobW9kZWwsIHRyYWluc2V0LCB0ZXN0c2V0LCBzYXZlX25hbWU9Tm9uZSk6CiAgICByZXRfZGljdCA9IGRpY3QoKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkYXRhID0gdHJhaW5zZXQuZGF0YQogICAgdGFyZ2V0cyA9IG5wLmFzYXJyYXkodHJhaW5zZXQudGFyZ2V0cykKICAgIGZvciBsYiBpbiByYW5nZSgxMCk6ICNmb3IgY2lhcjEwCiAgICAgICAgaW5kZXggPSAodGFyZ2V0cz09bGIpCjx8ZmltX2VuZHw+"]
["a912c947a1a614e0a228bb45deed9b9f310d843e-4","a912c947a1a614e0a228bb45deed9b9f310d843e","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMSBvbiAyMDIwLTExLTEyIDA5OjA0Cgpmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucwoKaW1wb3J0IHNhbGVvci5jb3JlLmRiLmZpZWxkcwppbXBvcnQgc2FsZW9yLmNvcmUudXRpbHMuZWRpdG9yanMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoInByb2R1Y3QiLCAiMDEzMF9taWdyYXRlX2Zyb21fZHJhZnRqc190b19lZGl0b3Jqc19mb3JtYXQiKSwKICAgIF0KCiAgICBvcGVyYXRpb25zID0gWwo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgIGJsYW5rPVRydWUsCiAgICAgICAgICAgICAgICBkZWZhdWx0PWRpY3QsCiAgICAgICAgICAgICAgICBzYW5pdGl6ZXI9c2FsZW9yLmNvcmUudXRpbHMuZWRpdG9yanMuY2xlYW5fZWRpdG9yX2pzLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSJjYXRlZ29yeXRyYW5zbGF0aW9uIiwKICAgICAgICAgICAgbmFtZT0iZGVzY3JpcHRpb25fanNvbiIsCiAgICAgICAgICAgIGZpZWxkPXNhbGVvci5jb3JlLmRiLmZpZWxkcy5TYW5pdGl6ZWRKU09ORmllbGQoCiAgICAgICAgICAgICAgICBibGFuaz1UcnVlLAogICAgICAgICAgICAgICAgZGVmYXVsdD1kaWN0LAogICAgICAgICAgICAgICAgc2FuaXRpemVyPXNhbGVvci5jb3JlLnV0aWxzLmVkaXRvcmpzLmNsZWFuX2VkaXRvcl9qcywKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIG1pZ3JhdGlvbnMuQWx0ZXJGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0iY29sbGVjdGlvbiIsCiAgICAgICAgICAgIG5hbWU9ImRlc2NyaXB0aW9uX2pzb24iLAogICAgICAgICAgICBmaWVsZD1zYWxlb3IuY29yZS5kYi5maWVsZHMuU2FuaXRpemVkSlNPTkZpZWxkKAogICAgICAgICAgICAgICAgYmxhbms9VHJ1ZSwKICAgICAgICAgICAgICAgIGRlZmF1bHQ9ZGljdCwKICAgICAgICAgICAgICAgIHNhbml0aXplcj1zYWxlb3IuY29yZS51dGlscy5lZGl0b3Jqcy5jbGVhbl9lZGl0b3JfanMsCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9ImNvbGxlY3Rpb250cmFuc2xhdGlvbiIsCiAgICAgICAgICAgIG5hbWU9ImRlc2NyaXB0aW9uX2pzb24iLAogICAgICAgICAgICBmaWVsZD1zYWxlb3IuY29yZS5kYi5maWVsZHMuU2FuaXRpemVkSlNPTkZpZWxkKAogICAgICAgICAgICAgICAgYmxhbms9VHJ1ZSwKICAgICAgICAgICAgICAgIGRlZmF1bHQ9ZGljdCwKICAgICAgICAgICAgICAgIHNhbml0aXplcj1zYWxlb3IuY29yZS51dGlscy5lZGl0b3Jqcy5jbGVhbl9lZGl0b3JfanMsCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9InByb2R1Y3QiLAogICAgICAgICAgICBuYW1lPSJkZXNjcmlwdGlvbl9qc29uIiwKICAgICAgICAgICAgZmllbGQ9c2FsZW9yLmNvcmUuZGIuZmllbGRzLlNhbml0aXplZEpTT05GaWVsZCgKICAgICAgICAgICAgICAgIGJsYW5rPVRydWUsCiAgICAgICAgICAgICAgICBkZWZhdWx0PWRpY3QsCiAgICAgICAgICAgICAgICBzYW5pdGl6ZXI9c2FsZW9yLmNvcmUudXRpbHMuZWRpdG9yanMuY2xlYW5fZWRpdG9yX2pzLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSJwcm9kdWN0dHJhbnNsYXRpb24iLAogICAgICAgICAgICBuYW1lPSJkZXNjcmlwdGlvbl9qc29uIiwKICAgICAgICAgICAgZmllbGQ9c2FsZW9yLmNvcmUuZGIuZmllbGRzLlNhbml0aXplZEpTT05GaWVsZCgKICAgICAgICAgICAgICAgIGJsYW5rPVRydWUsCiAgICAgICAgICAgICAgICBkZWZhdWx0PWRpY3QsCiAgICAgICAgICAgICAgICBzYW5pdGl6ZXI9c2FsZW9yLmNvcmUudXRpbHMuZWRpdG9yanMuY2xlYW5fZWRpdG9yX2pzLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICBdCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgbWlncmF0aW9ucy5BbHRlckZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSJjYXRlZ29yeSIsCiAgICAgICAgICAgIG5hbWU9ImRlc2NyaXB0aW9uX2pzb24iLAogICAgICAgICAgICBmaWVsZD1zYWxlb3IuY29yZS5kYi5maWVsZHMuU2FuaXRpemVkSlNPTkZpZWxkKAo8fGZpbV9lbmR8Pg=="]
["a9345a964865509b94d0f08709fed35534e5d3f1-3","a9345a964865509b94d0f08709fed35534e5d3f1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGluc3BlY3QKZnJvbSB0eXBlcyBpbXBvcnQgRnJhbWVUeXBlCmZyb20gdHlwaW5nIGltcG9ydCBBbnksIFR1cGxlCgpmcm9tIGFtaW5vIGltcG9ydCBMaXN0LCBMaXN0cywgUGF0aCwgRWl0aGVyLCBfLCBUcnksIFJpZ2h0LCBNYXliZSwgTCwgTmlsCmZyb20gYW1pbm8uZG8gaW1wb3J0IGRvLCBEbwpmcm9tIGFtaW5vLmZ1bmMgaW1wb3J0IHRhaWxyZWMKCgpkZWYgY2ZyYW1lKCkgLT4gRnJhbWVUeXBlOgogICAgcmV0dXJuIGluc3BlY3QuY3VycmVudGZyYW1lKCkKCgpAZG8oRWl0aGVyW0V4Y2VwdGlvbiwgc3RyXSkKZGVmIGZpbGVfbGluZShmaWxlOiBzdHIsIGxpbmVubzogaW50KSAtPiBEbzoKICAgIHBhdGggPSB5aWVsZCBUcnkoUGF0aCwgZmlsZSkKICAgIHRleHQgPSB5aWVsZCBUcnkocGF0aC5yZWFkX3RleHQpCiAgICB5aWVsZCBMaXN0cy5saW5lcyh0ZXh0KS5saWZ0KGxpbmVubykudG9fZWl0aGVyKCdmcmFtZV9kYXRhOiBpbnZhbGlkIGxpbmUgbnVtYmVyIGluIGZyYW1lJykKCgpkZWYgZnJhbWVfZGF0YShmcmFtZTogRnJhbWVUeXBlKSAtPiBUdXBsZVtzdHIsIHN0cl06CiAgICBmaWxlID0gaW5zcGVjdC5nZXRzb3VyY2VmaWxlKGZyYW1lLmZfY29kZSkKICAgIGNvZGUgPSBmaWxlX2xpbmUoZmlsZSwgZnJhbWUuZl9saW5lbm8gLSAxKS52YWx1ZV9vcihsYW1iZGEgZXJyOiBmJ2ludmFsaWQgZmlsZSBlbnRyeSBge2ZpbGV9YDoge2Vycn0nKQogICAgcmV0dXJuIGZpbGUsIGNvZGUKCgpkZWYgdHJhY2ViYWNrX2VudHJ5KGZyYW1lOiBGcmFtZVR5cGUsIGZpbGU6IHN0ciwgY29kZTogc3RyKSAtPiBMaXN0W3N0cl06CiAgICBsaW5lID0gZnJhbWUuZl9saW5lbm8KICAgIGZ1biA9IGZyYW1lLmZfY29kZS5jb19uYW1lCiAgICBjbGVhbiA9IGNvZGUuc3RyaXAoKQogICAgcmV0dXJuIExpc3QoZicgIEZpbGUgIntmaWxlfSIsIGxpbmUge2xpbmV9LCBpbiB7ZnVufScsIGYnICAgIHtjbGVhbn0nKQoKCmRlZiBmcmFtZV90cmFjZWJhY2tfZW50cnkoZnJhbWU6IEZyYW1lVHlwZSkgLT4gTGlzdFtzdHJdOgogICAgZmlsZSwgY29kZSA9IGZyYW1lX2RhdGEoZnJhbWUpCiAgICByZXR1cm4gdHJhY2ViYWNrX2VudHJ5KGZyYW1lLCBmaWxlLCBjb2RlKQoKCmRlZmF1bHRfaW50ZXJuYWxfcGFja2FnZXMgPSBMaXN0KCdhbWlubycpCgoKZGVmIGludGVybmFsX2ZyYW1lKGZyYW1lOiBGcmFtZVR5cGUsIHBrZ3M6IExpc3Rbc3RyXT1Ob25lKSAtPiBib29sOgogICAgcGtnID0gZnJhbWUuZl9nbG9iYWxzLmdldCgnX19wYWNrYWdlX18nKQogICAgbmFtZSA9IGZyYW1lLmZfY29kZS5jb19maWxlbmFtZSBvciAnJwogICAgcmV0dXJuICgKICAgICAgICAobm90IGlzaW5zdGFuY2UocGtnLCBzdHIpKSBvcgogICAgICAgIHBrZyA9PSAnJyBvcgogICAgICAgIChwa2dzIG9yIGRlZmF1bHRfaW50ZXJuYWxfcGFja2FnZXMpLmV4aXN0cyhwa2cuc3RhcnRzd2l0aCkgb3IKICAgICAgICBub3QgbmFtZS5lbmRzd2l0aCgnLnB5JykKICAgICkKCgpkZWYgbm9uX2ludGVybmFsX2ZyYW1lKGZyYW1lOiBGcmFtZVR5cGUsIHBrZ3M6IExpc3Rbc3RyXT1Ob25lKSAtPiBib29sOgogICAgcmV0dXJuIG5vdCBpbnRlcm5hbF9mcmFtZShmcmFtZSwgcGtncykKCgpkZWYgdGJfY2FsbHNpdGUodGI6IExpc3RbRnJhbWVUeXBlXSwgcGtnczogTGlzdFtzdHJdPU5vbmUpIC0+IEVpdGhlcltzdHIsIEZyYW1lVHlwZV06Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHJldHVybiB0Yi5maW5kKEwobm9uX2ludGVybmFsX2ZyYW1lKShfLCBwa2dzKSkudG9fZWl0aGVyKCdubyBub24taW50ZXJuYWwgZnJhbWUgZm91bmQnKQoKCjx8ZmltX2VuZHw+"]
["e320809e82a3f175d7cd2455f44b295da1fbc600-5","e320809e82a3f175d7cd2455f44b295da1fbc600","PHxmaW1fcHJlZml4fD4KZnJvbSBsb2N1c3QgaW1wb3J0IEh0dHBMb2N1c3QsIFRhc2tTZXQsIHRhc2sKCmNsYXNzIFdlYnNpdGVUYXNrcyhUYXNrU2V0KToKCiAgICBAdGFzawogICAgZGVmIHBhZ2UxKHNlbGYpOgogICAgICAgIHNlbGYuY2xpZW50LmdldCgiL3N1Z2VzdG9lcy1wYXJhLzZhLWZlaXJhLWRhLXF1YXJ0YS1zZW1hbmEtZGEtcGFzY29hLyIpCgogICAgQHRhc2sKICAgIGRlZiBwYWdlMihzZWxmKToKICAgICAgICBzZWxmLmNsaWVudC5nZXQoIi9zdWdlc3RvZXMtcGFyYS81YS1mZWlyYS1kYS1xdWFydGEtc2VtYW5hLWRhLXBhc2NvYS8iKQoKICAgIEB0YXNrCiAgICBkZWYgcGFnZTMoc2VsZik6CiAgICAgICAgc2VsZi5jbGllbnQuZ2V0KCIvc3VnZXN0b2VzLXBhcmEvNGEtZmVpcmEtZGEtcXVhcnRhLXNlbWFuYS1kYS1wYXNjb2EvIikKCiAgICBAdGFzawogICAgZGVmIHBhZ2U0KHNlbGYpOgogICAgICAgIHNlbGYuY2xpZW50LmdldCgiL3N1Z2VzdG9lcy1wYXJhLzNhLWZlaXJhLWRhLXF1YXJ0YS1zZW1hbmEtZGEtcGFzY29hLyIpCgogICAgQHRhc2sKICAgIGRlZiBtdXNpY2ExKHNlbGYpOgogICAgICAgIHNlbGYuY2xpZW50LmdldCgiL211c2ljYS9yZXNzdXNjaXRvdS8iKQoKICAgIEB0YXNrCiAgICBkZWYgbXVzaWNhMihzZWxmKToKICAgICAgICBzZWxmLmNsaWVudC5nZXQoIi9tdXNpY2EvcHJvdmEtZGUtYW1vci1tYWlvci1uYW8taGEvIikKCiAgICBAdGFzawogICAgZGVmIG11c2ljYTMoc2VsZik6Cjx8ZmltX2hvbGV8PgogICAgQHRhc2sKICAgIGRlZiBtdXNpY2E0KHNlbGYpOgogICAgICAgIHNlbGYuY2xpZW50LmdldCgiL211c2ljYS9vLXNlbmhvci1yZXNzdXNjaXRvdS1hbGVsdWlhLyIpCgpjbGFzcyBXZWJzaXRlVXNlcihIdHRwTG9jdXN0KToKICAgIHRhc2tfc2V0ID0gV2Vic2l0ZVRhc2tzCiAgICBtaW5fd2FpdCA9IDUwMDAKICAgIG1heF93YWl0ID0gMTUwMDAKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmNsaWVudC5nZXQoIi9tdXNpY2EvcG9ycXVlLWVsZS12aXZlLyIpCgo8fGZpbV9lbmR8Pg=="]
["8d7896d3f38708523ec3aaaf965e651ea0a73b8d-4","8d7896d3f38708523ec3aaaf965e651ea0a73b8d","PHxmaW1fcHJlZml4fD4KZnJvbSBkZXRlY3Ryb24yLmNvbmZpZy5kZWZhdWx0cyBpbXBvcnQgX0MKZnJvbSBkZXRlY3Ryb24yLmNvbmZpZyBpbXBvcnQgQ2ZnTm9kZSBhcyBDTgoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBNb2JpbGVOZXRzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCl9DLk1PREVMLk1ORVQgPSBDTigpCgojIE91dHB1dCBmZWF0dXJlcwpfQy5NT0RFTC5NTkVULk9VVF9GRUFUVVJFUyA9IFsnbGluZWFyJ10KIyBXaWR0aCBtdWx0Cl9DLk1PREVMLk1ORVQuV0lEVEhfTVVMVCA9IDEuMAoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojIENsc05ldHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKX0MuTU9ERUwuQ0xTTkVUID0gQ04oKQpfQy5NT0RFTC5DTFNORVQuRU5BQkxFID0gRmFsc2UKPHxmaW1fZW5kfD4="]
["b58f91c4097b1e4d8516c721bc4e0a682b877c6e-4","b58f91c4097b1e4d8516c721bc4e0a682b877c6e",{"$cut":{"chars":24228,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgc3lzCmltcG9ydCByYW5kb20KaW1wb3J0IHJlCmZyb20gb3BlcmF0b3IgaW1wb3J0IGl0ZW1nZXR0ZXIKaW1wb3J0IG1hdGgKZnJvbSBpdGVydG9vbHMgaW1wb3J0IGlzbGljZQpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQoKZnJvbSBzY2lweS5zcGFyc2UgaW1wb3J0IGNzcl9tYXRyaXgKZnJvbSBudW1weSBpbXBvcnQgYXJyYXksIHplcm9zLCBtYXRyaXgKCmZyb20gc2tsZWFybiBpbXBvcnQgbGluZWFyX21vZGVsCmZyb20gc2tsZWFybiBpbXBvcnQgY3Jvc3NfdmFsaWRhdGlvbiAKZnJvbSBza2xlYXJuIGltcG9ydCBtZXRyaWNzCmZyb20gc2tsZWFybi5lbnNlbWJsZSBpbXBvcnQgUmFuZG9tRm9yZXN0Q2xhc3NpZmllciwgUmFuZG9tRm9yZXN0UmVncmVzc29yCgpmcm9tIGRhdGEgaW1wb3J0IGxvYWRUZXN0SnNvbiwgbG9hZFRyYWluSnNvbgpmcm9tIExNIGltcG9ydCBLbmVzZXJOZXlMTSwgbmdyYW1zCmZyb20gd29yZHNoYXBlIGltcG9ydCB3b3JkU2hhcGUsIGNhcENvdW50CmZyb20gZmVhdHVyZXMgaW1wb3J0ICoKZnJvbSBtb2RlbCBpbXBvcnQgKgoKIyBNYWtlIHN1Ym1pc3Npb24gdXNpbmcgbW9kZWwKZGVmIG1rU3ViKG1vZGVsRiwgdHJhaW5GaWxlLCB0ZXN0RmlsZSwgb3V0RmlsZSk6CiAgcHJpbnROb3coIm1ha2Ugc3VibWlzc2lvbiIpCiAgdHJhaW5Sb3dzID0gbGlzdChsb2FkVHJhaW5Kc29uKHRyYWluRmlsZSkpCiAgcHJpbnROb3coIiAgbG9hZCB0cmFpbiByb3dzIikKCiAgbSA9IG1vZGVsRigpCiAgbS50cmFpbih0cmFpblJvd3MpCiAgcHJpbnROb3coIiAgdHJhaW5lZCIpCiAgCiAgbWFrZVN1Ym1pc3Npb24obSwgdGVzdEZpbGUsIG91dEZpbGUpCiAgcmV0dXJuIG0KCmRlZiBtYWtlU3VibWlzc2lvbihtb2RlbCwgdGVzdEZpbGUsIG91dEZpbGUpOgogIHJvd3MgPSBsb2FkVGVzdEpzb24odGVzdEZpbGUpCiAgcHJpbnROb3coIiAgbG9hZCB0ZXN0IHJvd3MiKQogIHdpdGggb3BlbihvdXRGaWxlLCAndycpIGFzIGY6CiAgICBmLndyaXRlKCdJbnN1bHQsRGF0ZSxDb21tZW50XG4nKQogICAgZi53cml0ZWxpbmVzKFsnJWYsJXMsJXNcbicgJSAobW9kZWwuY2xhc3NpZnkxKHJvdyksIHJvdy5kdCwgcm93LnJhd1RleHQpIGZvciByb3cgaW4gcm93c10pCiAgICBwcmludE5vdygiICBzdWJtaXNzaW9uIGNyZWF0ZWQiKQoKZGVmIHByaW50Tm93KG1zZyk6CiAgcHJpbnQgJyVzIFslc10nICUgKG1zZywgZGF0ZXRpbWUuc3RyZnRpbWUoZGF0ZXRpbWUubm93KCksICclSDolTTolUycpKQoKZGVmIHByaW50T3V0bGllcnMob3V0bGllcnMsIG91dEZpbGUpOgogIGRlZiBpbnN1bHRUZXh0KGluc3VsdCk6CiAgICBpZiBpbnN1bHQ6IHJldHVybiAnSW5zdWx0JwogICAgcmV0dXJuICcnCgogIGRlZiBub3JtKHMpOgogICAgcyA9IHMucmVwbGFjZSgnXG4nLCAnPGJyPicpCiAgICByZXR1cm4gcwoKICB3aXRoIG9wZW4ob3V0RmlsZSwgJ3cnKSBhcyBmOgogICAgZi53cml0ZSgnPGh0bWw+PHRhYmxlIGJvcmRlcj0iMSI+XG4nKQogICAgZi53cml0ZWxpbmVzKCc8dHI+PHRkPjxiPiVzPC9iPjwvdGQ+PHRkPjxiPiUuM2Y8L2I+PC90ZD48L3RyPlxuPHRyPjx0ZCBjb2xzcGFuPSIyIj4lczwvdGQ+PC90cj5cbicgJSAoaW5zdWx0VGV4dChpbnN1bHQpLCBzY29yZSwgbm9ybSh0ZXh0KSkgZm9yIGRpZmYsIGluc3VsdCwgc2NvcmUsIHRleHQgaW4gb3V0bGllcnMpCiAgICBmLndyaXRlKCc8L3RhYmxlPjwvaHRtbD4nKQoKZGVmIGdldE91dGxpZXJzKG1vZGVsRiwgcm93cywgbiA9IDIwLCBpbnN1bHQgPSBUcnVlLCBrID0gNCk6CiAga2ZvbGQgPSBjcm9zc192YWxpZGF0aW9uLktGb2xkKGxlbihyb3dzKSwgayA9IGssIGluZGljZXMgPSBUcnVlLCBzaHVmZmxlID0gVHJ1ZSkKICByb3dzID0gYXJyYXkocm93cykKCiAgdHJhaW4sIHRlc3QgPSBuZXh0KGlzbGljZShrZm9sZCwgMSkpCiAgbW9kZWwgPSBtb2RlbEYoKQogIG1vZGVsLnRyYWluKHJvd3NbdHJhaW5dKQoKICBkZWYgb3V0KHJvdyk6CiAgICBzY29yZSA9IG1vZGVsLmNsYXNzaWZ5MShyb3cpCiAgICByZXR1cm4gKGFicyhmbG9hdChyb3cuaW5zdWx0KSAtIHNjb3JlKSwgcm93Lmluc3VsdCwgc2NvcmUsIHJvdy50ZXh0KQogIHJldHVybiBzb3J0ZWQobWFwKG91dCwgZmlsdGVyKGxhbWJkYSByb3c6IGluc3VsdCA9PSByb3cuaW5zdWx0LCByb3dzW3Rlc3RdKSksIGtleSA9IGl0ZW1nZXR0ZXIoMCksIHJldmVyc2UgPSBUcnVlKVs6bl0KCmRlZiBwcmludE91dGxpZXJzUkYob3V0bGllcnMsIG91dEZpbGUpOgogIGRlZiBpbnN1bHRUZXh0KGluc3VsdCk6CiAgICBpZiBpbnN1bHQ6IHJldHVybiAnSW5zdWx0JwogICAgcmV0dXJuICcnCgogIGRlZiBub3JtKHMpOgogICAgcyA9IHMucmVwbGFjZSgnXG4nLCAnPGJyPicpCiAgICByZXR1cm4gcwoKICB3aXRoIG9wZW4ob3V0RmlsZSwgJ3cnKSBhcyBmOgogICAgZi53cml0ZSgnPGh0bWw+PHRhYmxlIGJvcmRlcj0iMSI+XG4nKQogICAgZi53cml0ZWxpbmVzKCc8dHI+PHRkPjxiPiVzPC9iPjwvdGQ+PHRkPjxiPiUuM2Y8L2I+PC90ZD48dGQ+JXM8L3RkPjwvdHI+XG48dHI+PHRkIGNvbHNwYW49IjMiPiVzPC90ZD48L3RyPlxuJyAlIChpbnN1bHRUZXh0KGluc3VsdCksIHNjb3JlLCAnICcuam9pbihbJzxiPiUuM2Y8L2I+JyAlIGYgZm9yIGYgaW4gZmVhdHVyZXNdKSwgbm9ybSh0ZXh0KSkgZm9yIGRpZmYsIGluc3VsdCwgc2NvcmUsIGZlYXR1cmVzLCB0ZXh0IGluIG91dGxpZXJzKQogICAgZi53cml0ZSgnPC90YWJsZT48L2h0bWw+JykKCmRlZiBnZXRPdXRsaWVyc1JGKG1vZGVsLCByb3dzLCBuID0gMjAsIGluc3VsdCA9IFRydWUpOgogIGRlZiBvdXQocm93KToKICAgIHNjb3JlID0gbW9kZWwuY2xhc3NpZnkxKHJvdy50ZXh0KQogICAgcmV0dXJuIChhYnMoZmxvYXQocm93Lmluc3VsdCkgLSBzY29yZSksIHJvdy5pbnN1bHQsIHNjb3JlLCBtb2RlbC5mZWF0dXJpemUocm93LnRleHQpLCByb3cudGV4dCkKICByZXR1cm4gc29ydGVkKG1hcChvdXQsIGZpbHRlcihsYW1iZGEgcm93OiBpbnN1bHQgPT0gcm93Lmluc3VsdCwg"}}]
["d09107a130d215a3de4e131397ada7867caa0c44-2","d09107a130d215a3de4e131397ada7867caa0c44",{"$cut":{"chars":30016,"head":"PHxmaW1fcHJlZml4fD4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgfAojIHwgIFB5dGhvbkpzb25QbHVnaW5fSW50ZWdyYXRpb25UZXN0LnB5CiMgfAojIHwgIERhdmlkIEJyb3duZWxsIDxkYkBEYXZpZEJyb3duZWxsLmNvbT4KIyB8ICAgICAgMjAxOS0wMi0xMSAwOToyMjoxMQojIHwKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgfAojIHwgIENvcHlyaWdodCBEYXZpZCBCcm93bmVsbCAyMDE5LTIxCiMgfCAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiBTZWUKIyB8ICBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAojIHwgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dC4KIyB8CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoiIiJJbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgUHl0aG9uSnNvblBsdWdpbiIiIgoKaW1wb3J0IG9zCmltcG9ydCBzeXMKaW1wb3J0IHRleHR3cmFwCmltcG9ydCB1bml0dGVzdAoKaW1wb3J0IENvbW1vbkVudmlyb25tZW50CmZyb20gQ29tbW9uRW52aXJvbm1lbnQuQ2FsbE9uRXhpdCBpbXBvcnQgQ2FsbE9uRXhpdAoKZnJvbSBDb21tb25FbnZpcm9ubWVudEV4LlBhY2thZ2UgaW1wb3J0IEluaXRSZWxhdGl2ZUltcG9ydHMKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpfc2NyaXB0X2Z1bGxwYXRoICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gQ29tbW9uRW52aXJvbm1lbnQuVGhpc0Z1bGxwYXRoKCkKX3NjcmlwdF9kaXIsIF9zY3JpcHRfbmFtZSAgICAgICAgICAgICAgICAgICA9IG9zLnBhdGguc3BsaXQoX3NjcmlwdF9mdWxscGF0aCkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKF9zY3JpcHRfZGlyLCAiR2VuZXJhdGVkIiwgIkRlZmF1bHRWYWx1ZXMiKSkKd2l0aCBDYWxsT25FeGl0KGxhbWJkYTogc3lzLnBhdGgucG9wKDApKToKICAgIGltcG9ydCBEZWZhdWx0VmFsdWVzX1B5dGhvbkpzb25TZXJpYWxpemF0aW9uIGFzIERlZmF1bHRWYWx1ZXNKc29uU2VyaWFsaXphdGlvbgoKCnN5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmpvaW4oX3NjcmlwdF9kaXIsICJHZW5lcmF0ZWQiLCAiRGljdGlvbmFyeVRlc3QiKSkKd2l0aCBDYWxsT25FeGl0KGxhbWJkYTogc3lzLnBhdGgucG9wKDApKToKICAgIGltcG9ydCBEaWN0aW9uYXJ5VGVzdF9QeXRob25Kc29uU2VyaWFsaXphdGlvbiBhcyBEaWN0aW9uYXJ5VGVzdEpzb25TZXJpYWxpemF0aW9uCiAgICBpbXBvcnQgRGljdGlvbmFyeVRlc3RfUHl0aG9uWWFtbFNlcmlhbGl6YXRpb24gYXMgRGljdGlvbmFyeVRlc3RZYW1sU2VyaWFsaXphdGlvbgoKCnN5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmpvaW4oX3NjcmlwdF9kaXIsICJHZW5lcmF0ZWQiLCAiRmlsZVN5c3RlbVRlc3QiKSkKd2l0aCBDYWxsT25FeGl0KGxhbWJkYTogc3lzLnBhdGgucG9wKDApKToKICAgIGltcG9ydCBGaWxlU3lzdGVtVGVzdF9QeXRob25Kc29uU2VyaWFsaXphdGlvbiBhcyBGaWxlU3lzdGVtSnNvblNlcmlhbGl6YXRpb24KICAgIGltcG9ydCBGaWxlU3lzdGVtVGVzdF9QeXRob25YbWxTZXJpYWxpemF0aW9uIGFzIEZpbGVTeXN0ZW1YbWxTZXJpYWxpemF0aW9uCgoKc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihfc2NyaXB0X2RpciwgIkdlbmVyYXRlZCIsICJUZXN0IikpCndpdGggQ2FsbE9uRXhpdChsYW1iZGE6IHN5cy5wYXRoLnBvcCgwKSk6CiAgICBpbXBvcnQgVGVzdF9QeXRob25Kc29uU2VyaWFsaXphdGlvbiBhcyBUZXN0SnNvblNlcmlhbGl6YXRpb24KICAgIGltcG9ydCBUZXN0X1B5dGhvblhtbFNlcmlhbGl6YXRpb24gYXMgVGVzdFhtbFNlcmlhbGl6YXRpb24KCgp3aXRoIEluaXRSZWxhdGl2ZUltcG9ydHMoKToKICAgIGZyb20gLkltcGwuRGVmYXVsdFZhbHVlc1V0aWxzIGltcG9ydCBEZWZhdWx0VmFsdWVzTWl4aW4KICAgIGZyb20gLkltcGwuRGljdGlvbmFyeVRlc3RVdGlscyBpbXBvcnQgRGljdGlvbmFyeVRlc3RNaXhpbgogICAgZnJvbSAuSW1wbC5GaWxlU3lzdGVtVGVzdFV0aWxzIGltcG9ydCBGaWxlU3lzdGVtVXRpbHNNaXhpbgogICAgZnJvbSAuSW1wbC5UZXN0VXRpbHMgaW1wb3J0IFRlc3RVdGlsc01peGluCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KY2xhc3MgRmlsZVN5c3RlbVN1aXRlKHVuaXR0ZXN0LlRlc3RDYXNlLCBGaWxlU3lzdGVtVXRpbHNNaXhpbik6CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCgogICAgICAgICMgVXNlIHRoZSB4bWwgZmlsZSBhcyBhIHNvdXJjZSBhcyBpdCBpcyBjYXBhYmxlIG9mIHByb2Nlc3NpbmcgYXR0cmlidXRlcy4KICAgICAgICB4bWxfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oX3NjcmlwdF9kaXIsICIuLiIsICJJbXBsIiwgIkZpbGVTeXN0ZW1UZXN0LnhtbCIpCiAgICAgICAgYXNzZXJ0IG9zLnBhdGguaXNmaWxlKHhtbF9maWxlbmFtZSksIHhtbF9maWxlbmFtZQoKICAgICAgICB4bWxfb2JqID0gRmlsZVN5c3RlbVhtbFNlcmlhbGl6YXRpb24uRGVzZXJpYWxpemUoCiAgICAgICAgICB4bWxfZmlsZW5hbWUsCiAgICAgICAgICBwcm9jZXNzX2FkZGl0aW9uYWxfZGF0YT1UcnVlLAogICAgICAgICkKCiAgICAgICAgeG1sX29ial9hZGRpdGlvbmFsX2RhdGEgPSBGaWxlU3lzdGVtWG1sU2VyaWFsaXphdGlvbi5EZXNl"}}]
["effb797fb26d1cbaa8135107ca6cf9dfd6c5e309-5","effb797fb26d1cbaa8135107ca6cf9dfd6c5e309","PHxmaW1fcHJlZml4fD4KIiIiClBhbnRhbGxhIHByaW5jaXBhbCBkZSBsYSBhcGxpY2FjacOzbi4KIiIiCmltcG9ydCBkYXNoX2NvcmVfY29tcG9uZW50cyBhcyBkY2MKaW1wb3J0IGRhc2hfaHRtbF9jb21wb25lbnRzIGFzIGh0bWwKCmltcG9ydCBjb25zdGFudHMgYXMgYwoKIyBDcmVhY2nDs24gZGVsIEhUTUwgbWVkaWFudGUgREFTSApsYXlvdXRfaG9tZSA9IGh0bWwuRGl2KHN0eWxlPXsnYmFja2dyb3VuZENvbG9yJzogYy5QQUxFVFRFWydibGFjayddfSwgY2hpbGRyZW49IFsKICAgIGh0bWwuQnIoKSwKICAgIGh0bWwuSDEoCiAgICAgICAgY2hpbGRyZW49J0JlYXRpbmcgU3RvY2sgTWFya2V0cycsCiAgICAgICAgc3R5bGU9ewogICAgICAgICAgICAndGV4dEFsaWduJzogJ2NlbnRlcicsCiAgICAgICAgICAgICdjb2xvcic6IGMuUEFMRVRURVsneWVsbG93J10KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIH0pLAoKPHxmaW1fZW5kfD4="]
["575b076e34de9e5489df285ebc608fd6e823e88b-5","575b076e34de9e5489df285ebc608fd6e823e88b","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6dXRmLTggLSotIAojIEF1dGhvcjogbGlvbmVsCmltcG9ydCByYW5kb20KCmZyb20gc2NyYXB5LmNvbmYgaW1wb3J0IHNldHRpbmdzCmltcG9ydCBsb2dnaW5nCgpsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignbW92aWUubWlkZGxld2FyZXMucHJveHknKQoKCmNsYXNzIFN0YXRpY1Byb3h5TWlkZGxlV2FyZShvYmplY3QpOgogICAgZGVmIHByb2Nlc3NfcmVxdWVzdChzZWxmLCByZXF1ZXN0LCBzcGlkZXIpOgogICAgICAgIHByb3h5ID0gc2V0dGluZ3MuZ2V0KCdQUk9YWScpCiAgICAgICAgbG9nZ2VyLmluZm8oInByb2Nlc3MgcmVxdWVzdCAlcyB1c2luZyBwcm94eSAlcyIgJSAocmVxdWVzdCwgcHJveHkpKQogICAgICAgIHJlcXVlc3QubWV0YVsncHJveHknXSA9IHByb3h5CiAgICAgICAgcGFzcwoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgUmFuZG9tUHJveHlNaWRkbGV3YXJlKG9iamVjdCk6CiAgICBkZWYgcHJvY2Vzc19yZXF1ZXN0KHNlbGYsIHJlcXVlc3QsIHNwaWRlcik6CiAgICAgICAgcHJveHkgPSByYW5kb20uY2hvaWNlKHNldHRpbmdzLmdldCgnUFJPWFlfTElTVCcpKQo8fGZpbV9lbmR8Pg=="]
["27ce11f2d49b6755bfca2cba927bfd3fadf88b22-1","27ce11f2d49b6755bfca2cba927bfd3fadf88b22","PHxmaW1fcHJlZml4fD4KIiIiCkhUVFBpZSAtIGNVUkwgZm9yIGh1bWFucy4KCiIiIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cl9fYXV0aG9yX18gPSAnSmFrdWIgUm96dG9jaWwnCl9fdmVyc2lvbl9fID0gJzAuMi4wJwpfX2xpY2VuY2VfXyA9ICdCU0QnCjx8ZmltX2VuZHw+"]
["275726f3b64a6e9090aa4689bd47124ae2a68914-3","275726f3b64a6e9090aa4689bd47124ae2a68914","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgogICAgbmFtZSA9ICdjdXN0b21fdGFncycKPHxmaW1fc3VmZml4fD4KZnJvbSBkamFuZ28uYXBwcyBpbXBvcnQgQXBwQ29uZmlnCgoKY2xhc3MgQ3VzdG9tVGFnc0NvbmZpZyhBcHBDb25maWcpOgo8fGZpbV9lbmR8Pg=="]
["190621eba1585280f72e89d7101e6bcf8cd0c5fe-2","190621eba1585280f72e89d7101e6bcf8cd0c5fe","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQgdGltZQppbXBvcnQgdGVuc29yZmxvdyBhcyB0ZgoKCmNsYXNzIExvZ2dlcihvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlc3MsIHBhdGgsIHNhdmVyKToKICAgICAgICBzZWxmLnNlc3MgPSBzZXNzCiAgICAgICAgc2VsZi5wYXRoID0gcGF0aAogICAgICAgIHNlbGYudHJhaW5fc3VtbWFyeV93cml0ZXIgPSB0Zi5zdW1tYXJ5LkZpbGVXcml0ZXIob3MucGF0aC5qb2luKHNlbGYucGF0aCwgInRyYWluIiksIHNlbGYuc2Vzcy5ncmFwaCkKICAgICAgICBzZWxmLnRlc3Rfc3VtbWFyeV93cml0ZXIgPSB0Zi5zdW1tYXJ5LkZpbGVXcml0ZXIob3MucGF0aC5qb2luKHNlbGYucGF0aCwgImV2YWwiKSkKICAgICAgICBzZWxmLmxhc3Rfc2F2ZXIgPSBzYXZlcgoKICAgIGRlZiBzdW1tYXJpemUoc2VsZiwgZXBvY2gsIHRhZ192YWx1ZSwgdGFnX25hbWUpOgogICAgICAgIGxvc3Nfc3VtID0gdGYuU3VtbWFyeSgpCiAgICAgICAgbG9zc19zdW0udmFsdWUuYWRkKHRhZz10YWdfbmFtZSwgc2ltcGxlX3ZhbHVlPXRhZ192YWx1ZSkKICAgICAgICBzZWxmLnRlc3Rfc3VtbWFyeV93cml0ZXIuYWRkX3N1bW1hcnkobG9zc19zdW0sIGVwb2NoKQogICAgICAgIHNlbGYudGVzdF9zdW1tYXJ5X3dyaXRlci5mbHVzaCgpCgogICAgIyBsb2FkIGxhdGVzdCBjaGVja3BvaW50IGZyb20gdGhlIGV4cGVyaW1lbnQgcGF0aCBkZWZpbmVkIGluIHRoZSBjb25maWcgZmlsZQogICAgZGVmIGxvYWRfbGFzdF9ja3B0KHNlbGYsIHNlc3MpOgogICAgICAgIHByaW50KCJDaGVja2luZyBwYXRoIHt9IC4uLiIuZm9ybWF0KG9zLnBhdGguam9pbihzZWxmLnBhdGgsICJ0cmFpbiIpKSkKICAgICAgICBsYXRlc3RfY2hlY2twb2ludCA9IHRmLnRyYWluLmxhdGVzdF9jaGVja3BvaW50KG9zLnBhdGguam9pbihzZWxmLnBhdGgsICJ0cmFpbiIpKQogICAgICAgIGlmIGxhdGVzdF9jaGVja3BvaW50OgogICAgICAgICAgICBwcmludCgiTG9hZGluZyBtb2RlbCBjaGVja3BvaW50IHt9IC4uLlxuIi5mb3JtYXQobGF0ZXN0X2NoZWNrcG9pbnQpKQogICAgICAgICAgICBzZWxmLmxhc3Rfc2F2ZXIucmVzdG9yZShzZXNzLCBsYXRlc3RfY2hlY2twb2ludCkKICAgICAgICAgICAgcHJpbnQoIi0tLS0tLS0tLS0tLS0tLS0tTW9kZWwgbG9hZGVkIikKICAgICAgICAgICAgcmV0dXJuIHJlLnNlYXJjaChyJ21vZGVsLmNrcHQtKFxkezEsfSknLCBsYXRlc3RfY2hlY2twb2ludCkuZ3JvdXAoMSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCgiTm8gbW9kZWwgZm91bmQiKQogICAgICAgICAgICByZXR1cm4gJ251bGwnCjx8ZmltX2hvbGV8PgogICAgICAgIHByaW50KCJTYXZpbmcgbW9kZWwgdG8ge30gLi4uIi5mb3JtYXQob3MucGF0aC5qb2luKHNlbGYucGF0aCwgInRyYWluIikpKQogICAgICAgIHNhdmVfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnBhdGgsICJ0cmFpbiIsICdtb2RlbCcpCiAgICAgICAgc2VsZi5sYXN0X3NhdmVyLnNhdmUoc2Vzcywgc2F2ZV9wYXRoLCBzdGVwKQogICAgICAgIHByaW50KCJNb2RlbCBzYXZlZCIpCiAgICAgICAgcHJpbnQoIlVzaW5nIHRpbWU6ICIsIHRpbWUudGltZSgpIC0gdDApCjx8ZmltX3N1ZmZpeHw+CgogICAgIyBzYXZlIGZ1bmN0aW9uIHRoYXQgc2F2ZXMgdGhlIGNoZWNrcG9pbnQgaW4gdGhlIHBhdGggZGVmaW5lZCBpbiB0aGUgY29uZmlnIGZpbGUKICAgIGRlZiBzYXZlKHNlbGYsIHNlc3MsIHN0ZXApOgogICAgICAgIHQwID0gdGltZS50aW1lKCkKPHxmaW1fZW5kfD4="]
["ef12edc846e7c76068d4bbf643d1b0640b59f1e4-1","ef12edc846e7c76068d4bbf643d1b0640b59f1e4","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmZyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKaW1wb3J0IHBsYXRmb3JtCmltcG9ydCBzaWduYWwKaW1wb3J0IHRocmVhZGluZwppbXBvcnQgdGltZQoKaW1wb3J0IHB5dGVzdAppbXBvcnQgcmVxdWVzdHMKCmZyb20gY29uc3RhbnRzIGltcG9ydCBwcm90b2NvbHMKZnJvbSB1dGlsIGltcG9ydCBzdGFydF9jbG91ZGZsYXJlZCwgd2FpdF90dW5uZWxfcmVhZHksIGNoZWNrX3R1bm5lbF9ub3RfY29ubmVjdGVkCgoKZGVmIHN1cHBvcnRlZF9zaWduYWxzKCk6CiAgICBpZiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAiV2luZG93cyI6CiAgICAgICAgcmV0dXJuIFtzaWduYWwuU0lHVEVSTV0KICAgIHJldHVybiBbc2lnbmFsLlNJR1RFUk0sIHNpZ25hbC5TSUdJTlRdCgoKY2xhc3MgVGVzdFRlcm1pbmF0aW9uOgogICAgZ3JhY2VfcGVyaW9kID0gNQogICAgdGltZW91dCA9IDEwCiAgICBzc2VfZW5kcG9pbnQgPSAiL3NzZT9mcmVxPTFzIgoKICAgIGRlZiBfZXh0cmFfY29uZmlnKHNlbGYsIHByb3RvY29sKToKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAiZ3JhY2UtcGVyaW9kIjogZiJ7c2VsZi5ncmFjZV9wZXJpb2R9cyIsCiAgICAgICAgICAgICJwcm90b2NvbCI6IHByb3RvY29sLAogICAgICAgIH0KCiAgICBAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInNpZ25hbCIsIHN1cHBvcnRlZF9zaWduYWxzKCkpCiAgICBAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInByb3RvY29sIiwgcHJvdG9jb2xzKCkpCiAgICBkZWYgdGVzdF9ncmFjZWZ1bF9zaHV0ZG93bihzZWxmLCB0bXBfcGF0aCwgY29tcG9uZW50X3Rlc3RzX2NvbmZpZywgc2lnbmFsLCBwcm90b2NvbCk6CiAgICAgICAgY29uZmlnID0gY29tcG9uZW50X3Rlc3RzX2NvbmZpZyhzZWxmLl9leHRyYV9jb25maWcocHJvdG9jb2wpKQogICAgICAgIHdpdGggc3RhcnRfY2xvdWRmbGFyZWQoCiAgICAgICAgICAgICAgICB0bXBfcGF0aCwgY29uZmlnLCBuZXdfcHJvY2Vzcz1UcnVlLCBjYXB0dXJlX291dHB1dD1GYWxzZSkgYXMgY2xvdWRmbGFyZWQ6CiAgICAgICAgICAgIHdhaXRfdHVubmVsX3JlYWR5KHR1bm5lbF91cmw9Y29uZmlnLmdldF91cmwoKSkKCiAgICAgICAgICAgIGNvbm5lY3RlZCA9IHRocmVhZGluZy5Db25kaXRpb24oKQogICAgICAgICAgICBpbl9mbGlnaHRfcmVxID0gdGhyZWFkaW5nLlRocmVhZCgKICAgICAgICAgICAgICAgIHRhcmdldD1zZWxmLnN0cmVhbV9yZXF1ZXN0LCBhcmdzPShjb25maWcsIGNvbm5lY3RlZCwgRmFsc2UsICkpCiAgICAgICAgICAgIGluX2ZsaWdodF9yZXEuc3RhcnQoKQoKICAgICAgICAgICAgd2l0aCBjb25uZWN0ZWQ6CiAgICAgICAgICAgICAgICBjb25uZWN0ZWQud2FpdChzZWxmLnRpbWVvdXQpCiAgICAgICAgICAgICMgU2VuZCBzaWduYWwgYWZ0ZXIgdGhlIFNTRSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkCiAgICAgICAgICAgIHNlbGYudGVybWluYXRlX2J5X3NpZ25hbChjbG91ZGZsYXJlZCwgc2lnbmFsKQogICAgICAgICAgICBzZWxmLndhaXRfZXllYmFsbF90aHJlYWQoCiAgICAgICAgICAgICAgICBpbl9mbGlnaHRfcmVxLCBzZWxmLmdyYWNlX3BlcmlvZCArIHNlbGYudGltZW91dCkKCiAgICAjIHRlc3QgY2xvdWRmbGFyZWQgdGVybWluYXRlcyBiZWZvcmUgZ3JhY2UgcGVyaW9kIGV4cGlyZXMgd2hlbiBhbGwgZXllYmFsbAogICAgIyBjb25uZWN0aW9ucyBhcmUgZHJhaW5lZAogICAgQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJzaWduYWwiLCBzdXBwb3J0ZWRfc2lnbmFscygpKQogICAgQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJwcm90b2NvbCIsIHByb3RvY29scygpKQogICAgZGVmIHRlc3Rfc2h1dGRvd25fb25jZV9ub19jb25uZWN0aW9uKHNlbGYsIHRtcF9wYXRoLCBjb21wb25lbnRfdGVzdHNfY29uZmlnLCBzaWduYWwsIHByb3RvY29sKToKICAgICAgICBjb25maWcgPSBjb21wb25lbnRfdGVzdHNfY29uZmlnKHNlbGYuX2V4dHJhX2NvbmZpZyhwcm90b2NvbCkpCiAgICAgICAgd2l0aCBzdGFydF9jbG91ZGZsYXJlZCgKICAgICAgICAgICAgICAgIHRtcF9wYXRoLCBjb25maWcsIG5ld19wcm9jZXNzPVRydWUsIGNhcHR1cmVfb3V0cHV0PUZhbHNlKSBhcyBjbG91ZGZsYXJlZDoKICAgICAgICAgICAgd2FpdF90dW5uZWxfcmVhZHkodHVubmVsX3VybD1jb25maWcuZ2V0X3VybCgpKQoKICAgICAgICAgICAgY29ubmVjdGVkID0gdGhyZWFkaW5nLkNvbmRpdGlvbigpCiAgICAgICAgICAgIGluX2ZsaWdodF9yZXEgPSB0aHJlYWRpbmcuVGhyZWFkKAogICAgICAgICAgICAgICAgdGFyZ2V0PXNlbGYuc3RyZWFtX3JlcXVlc3QsIGFyZ3M9KGNvbmZpZywgY29ubmVjdGVkLCBUcnVlLCApKQogICAgICAgICAgICBpbl9mbGlnaHRfcmVxLnN0YXJ0KCkKCiAgICAgICAgICAgIHdpdGggY29ubmVjdGVkOgogICAgICAgICAgICAgICAgY29ubmVjdGVkLndhaXQoc2VsZi50aW1lb3V0KQogICAgICAgICAgICB3aXRoIHNlbGYud2l0aGluX2dyYWNlX3BlcmlvZCgpOgogICAgICAgICAgICAgICAgIyBTZW5kIHNpZ25hbCBhZnRlciB0aGUgU1NFIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQKICAgICAgICAgICAgICAgIHNlbGYudGVybWluYXRlX2J5X3NpZ25hbChjbG91ZGZsYXJlZCwgc2lnbmFsKQogICAgICAgICAgICAgICAgc2VsZi53YWl0X2V5ZWJhbGxfdGhyZWFkKGluX2ZsaWdodF9yZXEsIHNlbGYuZ3JhY2VfcGVyaW9kKQoKICAgIEBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgic2lnbmFsIiwgc3VwcG9ydGVkX3NpZ25hbHMoKSkKICAgIEBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgicHJvdG9jb2wiLCBwcm90b2NvbHMoKSkKICAgIGRlZiB0ZXN0X25vX2Nvbm5lY3Rpb25fc2h1dGRvd24oc2VsZiwgdG1wX3BhdGgsIGNvbXBvbmVudF90ZXN0c19jb25maWcsIHNpZ25hbCwgcHJvdG9jb2wpOgogICAgICAgIGNvbmZpZyA9IGNvbXBvbmVudF90ZXN0c19jb25maWcoc2VsZi5fZXh0cmFfY29uZmlnKHByb3RvY29sKSkKICAgICAgICB3aXRoIHN0YXJ0X2Nsb3VkZmxhcmVkKAogICAgICAgICAgICAgICAgdG1wX3BhdGgsIGNvbmZpZywgbmV3X3Byb2Nlc3M9VHJ1ZSwgY2FwdHVyZV9vdXRwdXQ9RmFsc2UpIGFzIGNsb3VkZmxhcmVkOgogICAgICAgICAgICB3YWl0X3R1bm5lbF9yZWFkeSh0dW5uZWxfdXJsPWNvbmZpZy5nZXRfdXJsKCkpCiAgICAgICAgICAgIHdpdGggc2VsZi53aXRoaW5fZ3JhY2VfcGVyaW9kKCk6CiAgICAgICAgICAgICAgICBzZWxmLnRlcm1pbmF0ZV9ieV9zaWduYWwoY2xvdWRmbGFyZWQsIHNpZ25hbCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiB0ZXJtaW5hdGVfYnlfc2lnbmFsKHNlbGYsIGNsb3VkZmxhcmVkLCBzaWcpOgogICAgICAgIGNsb3VkZmxhcmVkLnNlbmRfc2lnbmFsKHNpZykKICAgICAgICBjaGVja190dW5uZWxfbm90X2Nvbm5lY3RlZCgpCjx8ZmltX2VuZHw+"]
["9a5f70022ad6b9cba9a1cdf7e863d49dad05993e-3","9a5f70022ad6b9cba9a1cdf7e863d49dad05993e","PHxmaW1fcHJlZml4fD4KY2xhc3MgU29sdXRpb246CiAgICBkZWYgc29sdmVTdWRva3Uoc2VsZiwgYm9hcmQpOgogICAgICAgICIiIgogICAgICAgIDp0eXBlIGJvYXJkOiBMaXN0W0xpc3Rbc3RyXV0KICAgICAgICA6cnR5cGU6IHZvaWQgRG8gbm90IHJldHVybiBhbnl0aGluZywgbW9kaWZ5IGJvYXJkIGluLXBsYWNlIGluc3RlYWQuCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5zb2x2ZShib2FyZCkKCiAgICBkZWYgZmluZEVtcHR5KHNlbGYsIGJvYXJkKToKICAgICAgICBmb3IgaSBpbiByYW5nZSg5KToKICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoOSk6CiAgICAgICAgICAgICAgICBpZiBib2FyZFtpXVtqXSA9PSAiLiI6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpLCBqKQogICAgICAgIHJldHVybiBOb25lCgogICAgZGVmIHNvbHZlKHNlbGYsIGJvYXJkKToKICAgICAgICBwb3MgPSBzZWxmLmZpbmRFbXB0eShib2FyZCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGlmIG5vdCBwb3M6CiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgeCwgeSA9IHBvc1swXSwgcG9zWzFdCiAgICAgICAgZm9yIHYgaW4gWyIxIiwgIjIiLCAiMyIsICI0IiwgIjUiLCAiNiIsICI3IiwgIjgiLCAiOSJdOgo8fGZpbV9lbmR8Pg=="]
["47910e22e3c4f07537f0b6bb6014a74f20b7d270-3","47910e22e3c4f07537f0b6bb6014a74f20b7d270","PHxmaW1fcHJlZml4fD4KZnJvbSBjaGFpbmVyIGltcG9ydCBjb21wdXRhdGlvbmFsX2dyYXBoIGFzIGMKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmNsYXNzIENvbXB1dGF0aW9uYWxHcmFwaDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoX3RvX2dyYXBoKToKICAgICAgICBzZWxmLnBhdGggPSBwYXRoX3RvX2dyYXBoCgo8fGZpbV9lbmR8Pg=="]
["8b681426d68174fd7c26ed7044d15abee4e79505-1","8b681426d68174fd7c26ed7044d15abee4e79505","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gZG90ZW52IGltcG9ydCBsb2FkX2RvdGVudgpmcm9tIGZsYXNrX21haWwgaW1wb3J0IE1haWwsIE1lc3NhZ2UKYmFzZWRpciA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQpsb2FkX2RvdGVudihvcy5wYXRoLmpvaW4oYmFzZWRpciwgJy5lbnYnKSkKCmNsYXNzIENvbmZpZyhvYmplY3QpOgogICAgVVBMT0FEX0ZPTERFUiA9ICcuL3N0YXRpYycKICAgIFNFQ1JFVF9LRVkgPSBvcy5lbnZpcm9uLmdldCgnU0VDUkVUX0tFWScpCiAgICBTUUxBTENIRU1ZX0RBVEFCQVNFX1VSSSA9IG9zLmVudmlyb24uZ2V0KCdEQVRBQkFTRV9VUkwnKSBvciBcCiAgICAgICAgJ3NxbGl0ZTovLy8nICsgb3MucGF0aC5qb2luKGJhc2VkaXIsICdhcHAuZGInKQogICAgU1FMQUxDSEVNWV9UUkFDS19NT0RJRklDQVRJT05TID0gRmFsc2UKICAgICMgTUFJTF9TRVJWRVIgPSBvcy5lbnZpcm9uLmdldCgnTUFJTF9TRVJWRVInKQogICAgTUFJTF9TRVJWRVIgPSAnc210cC5zZW5kZ3JpZC5uZXQnCiAgICBNQUlMX1BPUlQgPSA1ODcKICAgIE1BSUxfVVNFX1RMUyA9IFRydWUKICAgIE1BSUxfVVNFX1NTTCA9IEZhbHNlCiAgICBNQUlMX1VTRVJOQU1FID0gJ2FwaWtleScKICAgIE1BSUxfUEFTU1dPUkQgPSBvcy5lbnZpcm9uLmdldCgnU0VOREdSSURfQVBJX0tFWScpCiAgICBBRE1JTlMgPSBbJ2VtYWlsJ10KICAgIE1BSUxfREVGQVVMVF9TRU5ERVIgPSBvcy5lbnZpcm9uLmdldCgnTUFJTF9ERUZBVUxUX1NFTkRFUicpCiAgICBQT1NUU19QRVJfUEFHRSA9IDI1Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIExPR19UT19TVERPVVQgPSBvcy5lbnZpcm9uLmdldCgnTE9HX1RPX1NURE9VVCcpCiAgICBFTEFTVElDU0VBUkNIX1VSTCA9IG9zLmVudmlyb24uZ2V0KCdFTEFTVElDU0VBUkNIX1VSTCcpCiAgICBXVEZfQ1NSRl9FTkFCTEVEID0gRmFsc2UKPHxmaW1fZW5kfD4="]
["d01c51cdc406dd49e677fff9b014d66fbf9795a6-4","d01c51cdc406dd49e677fff9b014d66fbf9795a6","PHxmaW1fcHJlZml4fD4KIyBRVUFOVENPTk5FQ1QuQ09NIC0gRGVtb2NyYXRpemluZyBGaW5hbmNlLCBFbXBvd2VyaW5nIEluZGl2aWR1YWxzLgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgTGVhbiBDTEkgdjEuMC4gQ29weXJpZ2h0IDIwMjEgUXVhbnRDb25uZWN0IENvcnBvcmF0aW9uLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgo8fGZpbV9lbmR8Pg=="]
["1fafcd75059c4cbcab2d01eb5d66231d0c837178-4","1fafcd75059c4cbcab2d01eb5d66231d0c837178","PHxmaW1fcHJlZml4fD4KZnJvbSBhYmMgaW1wb3J0IGFic3RyYWN0bWV0aG9kCmltcG9ydCBtYXRoCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRvcmNoCmltcG9ydCB0b3JjaC5ubiBhcyBubgpmcm9tIG1tY3YuY25uIGltcG9ydCBDb252TW9kdWxlLCBiaWFzX2luaXRfd2l0aF9wcm9iLCBub3JtYWxfaW5pdApmcm9tIG1tY3YucnVubmVyIGltcG9ydCBmb3JjZV9mcDMyCgpmcm9tIG1tZGV0LmNvcmUgaW1wb3J0IG11bHRpX2FwcGx5CmZyb20gLi5idWlsZGVyIGltcG9ydCBIRUFEUywgYnVpbGRfbG9zcwpmcm9tIC5iYXNlX2RlbnNlX2hlYWQgaW1wb3J0IEJhc2VEZW5zZUhlYWQKZnJvbSAuZGVuc2VfdGVzdF9taXhpbnMgaW1wb3J0IEJCb3hUZXN0TWl4aW4KCgpASEVBRFMucmVnaXN0ZXJfbW9kdWxlKCkKY2xhc3MgQ2VudGVySGFuZEhlYWQoQmFzZURlbnNlSGVhZCwgQkJveFRlc3RNaXhpbik6CiAgICAiIiJBbmNob3ItZnJlZSBoZWFkIChGQ09TLCBGb3ZlYSwgUmVwUG9pbnRzLCBldGMuKS4KCiAgICBBcmdzOgogICAgICAgIG51bV9jbGFzc2VzIChpbnQpOiBOdW1iZXIgb2YgY2F0ZWdvcmllcyBleGNsdWRpbmcgdGhlIGJhY2tncm91bmQKICAgICAgICAgICAgY2F0ZWdvcnkuCiAgICAgICAgaW5fY2hhbm5lbHMgKGludCk6IE51bWJlciBvZiBjaGFubmVscyBpbiB0aGUgaW5wdXQgZmVhdHVyZSBtYXAuCiAgICAgICAgZmVhdF9jaGFubmVscyAoaW50KTogTnVtYmVyIG9mIGhpZGRlbiBjaGFubmVscy4gVXNlZCBpbiBjaGlsZCBjbGFzc2VzLgogICAgICAgIHN0YWNrZWRfY29udnMgKGludCk6IE51bWJlciBvZiBzdGFja2luZyBjb252cyBvZiB0aGUgaGVhZC4KICAgICAgICBzdHJpZGVzICh0dXBsZSk6IERvd25zYW1wbGUgZmFjdG9yIG9mIGVhY2ggZmVhdHVyZSBtYXAuCiAgICAgICAgZGNuX29uX2xhc3RfY29udiAoYm9vbCk6IElmIHRydWUsIHVzZSBkY24gaW4gdGhlIGxhc3QgbGF5ZXIgb2YKICAgICAgICAgICAgdG93ZXJzLiBEZWZhdWx0OiBGYWxzZS4KICAgICAgICBjb252X2JpYXMgKGJvb2wgfCBzdHIpOiBJZiBzcGVjaWZpZWQgYXMgYGF1dG9gLCBpdCB3aWxsIGJlIGRlY2lkZWQgYnkKICAgICAgICAgICAgdGhlIG5vcm1fY2ZnLiBCaWFzIG9mIGNvbnYgd2lsbCBiZSBzZXQgYXMgVHJ1ZSBpZiBgbm9ybV9jZmdgIGlzCiAgICAgICAgICAgIE5vbmUsIG90aGVyd2lzZSBGYWxzZS4gRGVmYXVsdDogImF1dG8iLgogICAgICAgIGxvc3NfY2xzIChkaWN0KTogQ29uZmlnIG9mIGNsYXNzaWZpY2F0aW9uIGxvc3MuCiAgICAgICAgbG9zc19iYm94IChkaWN0KTogQ29uZmlnIG9mIGxvY2FsaXphdGlvbiBsb3NzLgogICAgICAgIGNvbnZfY2ZnIChkaWN0KTogQ29uZmlnIGRpY3QgZm9yIGNvbnZvbHV0aW9uIGxheWVyLiBEZWZhdWx0OiBOb25lLgogICAgICAgIG5vcm1fY2ZnIChkaWN0KTogQ29uZmlnIGRpY3QgZm9yIG5vcm1hbGl6YXRpb24gbGF5ZXIuIERlZmF1bHQ6IE5vbmUuCiAgICAgICAgdHJhaW5fY2ZnIChkaWN0KTogVHJhaW5pbmcgY29uZmlnIG9mIGFuY2hvciBoZWFkLgogICAgICAgIHRlc3RfY2ZnIChkaWN0KTogVGVzdGluZyBjb25maWcgb2YgYW5jaG9yIGhlYWQuCiAgICAiIiIgICMgbm9xYTogVzYwNQoKICAgIF92ZXJzaW9uID0gMQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICAgIGluX2NoYW5uZWxzLAogICAgICAgICAgICAgICAgIGNsc19jaGFubmVscz17J2htJzogMSwgJ3doJzogMiwgJ29mZnNldCc6IDIsICdvcmllJzogNn0sCiAgICAgICAgICAgICAgICAgZmVhdF9jaGFubmVscz0yNTYsCiAgICAgICAgICAgICAgICAgc3RhY2tlZF9jb252cz00LAogICAgICAgICAgICAgICAgIHN0cmlkZXM9KDQsIDgsIDE2LCAzMiwgNjQpLAogICAgICAgICAgICAgICAgIGRjbl9vbl9sYXN0X2NvbnY9RmFsc2UsCiAgICAgICAgICAgICAgICAgY29udl9iaWFzPSdhdXRvJywKICAgICAgICAgICAgICAgICBsb3NzX2htPWRpY3QodHlwZT0nR2F1c3NpYW5Gb2NhbExvc3MnLCBsb3NzX3dlaWdodD0xLjApLAogICAgICAgICAgICAgICAgIGxvc3Nfd2g9ZGljdCh0eXBlPSdDZW50ZXJOZXRSZWdMMUxvc3MnLCBsb3NzX3dlaWdodD0xLjApLAogICAgICAgICAgICAgICAgIGxvc3Nfb2Zmc2V0PWRpY3QodHlwZT0nQ2VudGVyTmV0UmVnTDFMb3NzJywgbG9zc193ZWlnaHQ9MS4wKSwKICAgICAgICAgICAgICAgICBsb3NzX29yaWU9ZGljdCh0eXBlPSdDZW50ZXJOZXRSZWdMMUxvc3MnLCBsb3NzX3dlaWdodD0xLjApLAogICAgICAgICAgICAgICAgIGNvbnZfY2ZnPU5vbmUsCiAgICAgICAgICAgICAgICAgbm9ybV9jZmc9Tm9uZSwKICAgICAgICAgICAgICAgICB0cmFpbl9jZmc9Tm9uZSwKICAgICAgICAgICAgICAgICB0ZXN0X2NmZz1Ob25lKToKICAgICAgICBzdXBlcihDZW50ZXJIYW5kSGVhZCwgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYuaGVhZHMgPSBsaXN0KGNsc19jaGFubmVscy5rZXlzKCkpCiAgICAgICAgc2VsZi5pbl9jaGFubmVscyA9IGluX2NoYW5uZWxzCiAgICAgICAgc2VsZi5jbHNfY2hhbm5lbHMgPSBjbHNfY2hhbm5lbHMKICAgICAgICBzZWxmLmZlYXRfY2hhbm5lbHMgPSBmZWF0X2NoYW5uZWxzCiAgICAgICAgc2VsZi5zdGFja2VkX2NvbnZzID0gc3RhY2tlZF9jb252cwogICAgICAgIHNlbGYuc3RyaWRlcyA9IHN0cmlkZXMKICAgICAgICBzZWxmLmRjbl9vbl9sYXN0X2NvbnYgPSBkY25fb25fbGFzdF9jb252CiAgICAgICAgYXNzZXJ0IGNvbnZfYmlhcyA9PSAnYXV0bycgb3IgaXNpbnN0YW5jZShjb252X2JpYXMsIGJvb2wpCiAgICAgICAgc2VsZi5jb252X2JpYXMgPSBjb252X2JpYXMKICAgICAgICBzZWxmLmxvc3NfaG0gPSBidWlsZF9sb3NzKGxvc3NfaG0pCiAgICAgICAgc2VsZi5sb3NzX3doID0gYnVpbGRfbG9zcyhsb3NzX3doKQogICAgICAgIHNlbGYubG9zc19vZmZzZXQgPSBidWlsZF9sb3NzKGxvc3Nfb2Zmc2V0KQogICAgICAgIHNlbGYubG9zc19vcmllID0gYnVpbGRfbG9zcyhsb3NzX29yaWUpCiAgICAgICAgc2VsZi50cmFpbl9jZmcgPSB0cmFpbl9jZmcKICAgICAgICBzZWxmLnRlc3RfY2ZnID0gdGVzdF9jZmcKICAgICAgICBzZWxmLmNvbnZfY2ZnID0gY29udl9jZmcKICAgICAgICBzZWxmLm5vcm1fY2ZnID0gbm9ybV9jZmcKICAgICAgICBzZWxmLmZwMTZfZW5hYmxlZCA9IEZhbHNlCgogICAgICAgIHNlbGYuX2luaXRfbGF5ZXJzKCkKCiAgICBkZWYgX2luaXRfbGF5ZXJzKHNlbGYpOgogICAgICAgICIiIkluaXRpYWxpemUgbGF5ZXJzIG9mIHRoZSBoZWFkLiIiIgogICAgICAgIHNlbGYuX2luaXRfaGVhZF9jb252cygpCgogICAgZGVmIF9pbml0X2hlYWRfY29udnMoc2VsZik6CiAgICAgICAgIiIiSW5pdGlhbGl6ZSBjbGFzc2lmaWNhdGlvbiBjb252IGxheWVycyBvZiB0aGUgaGVhZC4iIiIKICAgICAgICBzZWxmLmhlYWRfY29udnMgPSBubi5Nb2R1bGVEaWN0KCkKICAgICAgICBmb3IgaGVhZCBpbiBzZWxmLmhlYWRzOgogICAgICAgICAgICBjb252cyA9IFtdCiAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYuc3RhY2tlZF9jb252cyk6CiAgICAgICAgICAgICAgICBjaG4gPSBzZWxmLmluX2NoYW5uZWxzIGlmIGkgPT0gMCBlbHNlIHNlbGYuZmVhdF9jaGFubmVscwogICAgICAgICAgICAgICAgY29udnMuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgIENvbnZNb2R1bGUoCiAgICAgICAgICAgICAgICAgICAgICAgIGNobiwKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mZWF0X2NoYW5uZWxzLAogICAgICAgICAgICAgICAgICAgICAgICAzLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJpZGU9MSwKICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZz0xLAogICAgICAgICAgICAgICAgICAgICAgICBjb252X2NmZz1zZWxmLmNvbnZfY2ZnLAogICAgICAgICAgICAgICAgICAgICAgICBub3JtX2NmZz1zZWxmLm5vcm1fY2ZnLAogICAgICAgICAgICAgICAgICAgICAgICBiaWFzPXNlbGYuY29udl9iaWFzKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICBpZiBoZWFkICE9ICdobSc6CiAgICAgICAgICAgICAgICBjb252cy5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgQ29udk1vZHVsZSgKICAgICAgICAgICAgICAgICAgICAgICAgY2huLAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsc19jaGFubmVsc1toZWFkXSwKICAgICAgICAgICAgICAgICAgICAgICAgMywKICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWRlPTEsCiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc9MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29udl9jZmc9c2VsZi5jb252X2NmZywKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybV9jZmc9c2VsZi5ub3JtX2NmZywKICAgICAgICAgICAgICAgICAgICAgICAgYmlhcz1zZWxmLmNvbnZfYmlhcwogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGNvbnZzLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICBDb252TW9kdWxlKAogICAgICAgICAgICAgICAgICAgICAgICBjaG4sCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xzX2NoYW5uZWxzW2hlYWRdLAogICAgICAgICAgICAgICAgICAgICAgICAzLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJpZGU9MSwKICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZz0xLAogICAgICAgICAgICAgICAgICAgICAgICBjb252X2NmZz1zZWxmLmNvbnZfY2ZnLAogICAgICAgICAgICAgICAgICAgICAgICBub3JtX2NmZz1zZWxmLm5vcm1fY2ZnLAogICAgICAgICAgICAgICAgICAgICAgICBiaWFzPXNlbGYuY29udl9iaWFzLAogICAgICAgICAgICAgICAgICAgICAgICBhY3RfY2ZnPWRpY3QodHlwZT0nU2lnbW9pZCcpCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICBzZWxmLmhlYWRfY29udnNbaGVhZF0gPSBubi5TZXF1ZW50aWFsKCpjb252cykKICAgICAgICAgICAgCiAgICBkZWYgaW5pdF93ZWlnaHRzKHNlbGYpOgogICAgICAgICIiIkluaXRpYWxpemUgd2VpZ2h0cyBvZiB0aGUgaGVhZC4iIiIKICAgICAgICBmb3IgbiwgbSBpbiBzZWxmLmhlYWRfY29udnMuaXRlbXMoKToKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtLCBubi5Db252MmQpOgogICAgICAgICAgICAgICAgbm4uaW5pdC5ub3JtYWxfKG0ud2VpZ2h0LCBzdGQ9MC4wMDEpCiAgICAgICAgICAgICAgICBpZiBtLmJpYXMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgaWYgbiA9PSAnaG0nOgogICAgICAgICAgICAgICAgICAgICAgICBubi5pbml0LmNvbnN0YW50XyhtLmJpYXMsIC0yLjE5KQogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIG5uLmluaXQuY29uc3RhbnRfKG0uYmlhcywgMCkKCiAgICAjIGRlZiBfbG9hZF9mcm9tX3N0YXRlX2RpY3Qoc2VsZiwgc3RhdGVfZGljdCwgcHJlZml4LCBsb2NhbF9tZXRhZGF0YSwgc3RyaWN0LAogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3Npbmdfa2V5cywgdW5leHBlY3RlZF9rZXlzLCBlcnJvcl9tc2dzKToKICAgICMgICAgICIiIkhhY2sgc29tZSBrZXlzIG9mIHRoZSBtb2RlbCBzdGF0ZSBkaWN0IHNvIHRoYXQgY2FuIGxvYWQgY2hlY2twb2ludHMKICAgICMgICAgIG9mIHByZXZpb3VzIHZlcnNpb24uIiIiCiAgICAjICAgICB2ZXJzaW9uID0gbG9jYWxfbWV0YWRhdGEuZ2V0KCd2ZXJzaW9uJywgTm9uZSkKICAgICMgICAgIGlmIHZlcnNpb24gaXMgTm9uZToKICAgICMgICAgICAgICAjIHRoZSBrZXkgaXMgZGlmZmVyZW50IGluIGVhcmx5IHZlcnNpb25zCiAgICAjICAgICAgICAgIyBmb3IgZXhhbXBsZSwgJ2Zjb3NfY2xzJyBiZWNvbWUgJ2NvbnZfY2xzJyBub3cKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgIyAgICAgICAgIGJib3hfaGVhZF9rZXlzID0gWwogICAgIyAgICAgICAgICAgICBrIGZvciBrIGluIHN0YXRlX2RpY3Qua2V5cygpIGlmIGsuc3RhcnRzd2l0aChwcmVmaXgpCiAgICAjICAgICAgICAgXQogICAgIyAgICAgICAgIG9yaV9wcmVkaWN0b3Jfa2V5cyA9IFtdCjx8ZmltX2VuZHw+"]
["32291ffc271e615dd34fd97d8bb61dc3210fb03d-1","32291ffc271e615dd34fd97d8bb61dc3210fb03d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRocmVhZGluZwppbXBvcnQgdGltZQppbXBvcnQgc3lzCmltcG9ydCBzZXJpYWwKaW1wb3J0IGNzdgppbXBvcnQgdXJsbGliLnJlcXVlc3QKZnJvbSAgYnM0IGltcG9ydCBCZWF1dGlmdWxTb3VwCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCgoKY2xhc3MgYmx1ZXRvb3RoOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQ6IHN0ciwgYmF1ZHJhdGU6IGludD05NjAwKToKICAgICAgICAiIiIgSW5pdGlhbGl6ZSBhbiBCVCBvYmplY3QsIGFuZCBhdXRvLWNvbm5lY3QgaXQuICIiIgogICAgICAgICMgVGhlIHBvcnQgbmFtZSBpcyB0aGUgbmFtZSBzaG93biBpbiBjb250cm9sIHBhbmVsCiAgICAgICAgIyBBbmQgdGhlIGJhdWRyYXRlIGlzIHRoZSBjb21tdW5pY2F0aW9uIHNldHRpbmcsIGRlZmF1bHQgdmFsdWUgb2YgSEMtMDUgaXMgOTYwMC4KICAgICAgICBzZWxmLnNlciA9IHNlcmlhbC5TZXJpYWwocG9ydCwgYmF1ZHJhdGU9YmF1ZHJhdGUpCiAgICAgICAgCiAgICBkZWYgaXNfb3BlbihzZWxmKSAtPiBib29sOgogICAgICAgIHJldHVybiBzZWxmLnNlci5pc19vcGVuCgogICAgZGVmIHdhaXRpbmcoc2VsZikgLT4gYm9vbDoKICAgICAgICByZXR1cm4gc2VsZi5zZXIuaW5fd2FpdGluZwoKICAgIGRlZiBkb19jb25uZWN0KHNlbGYsIHBvcnQ6IHN0ciwgYmF1ZHJhdGU6IGludD05NjAwKSAtPiBib29sOgogICAgICAgICIiIiBDb25uZWN0IHRvIHRoZSBzcGVjaWZ5IHBvcnQgd2l0aCBwYXJ0aWN1bGFyIGJhdWRyYXRlICIiIgogICAgICAgICMgQ29ubmVjdGlvbiBmdW5jdGlvbi4gRGlzY29ubmVjdCB0aGUgcHJldmlvdXMgY29tbXVuaWNhdGlvbiwgc3BlY2lmeSBhIG5ldyBvbmUuCiAgICAgICAgc2VsZi5kaXNjb25uZWN0KCkKCiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLnNlciA9IHNlcmlhbC5TZXJpYWwocG9ydCwgYmF1ZHJhdGU9YmF1ZHJhdGUpCiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBkZWYgZGlzY29ubmVjdChzZWxmKToKICAgICAgICAiIiIgQ2xvc2UgdGhlIGNvbm5lY3Rpb24uICIiIgogICAgICAgIHNlbGYuc2VyLmNsb3NlKCkKCiAgICBkZWYgd3JpdGUoc2VsZiwgb3V0cHV0OiBzdHIpOgogICAgICAgICMgV3JpdGUgdGhlIGJ5dGUgdG8gdGhlIG91dHB1dCBidWZmZXIsIGVuY29kZWQgYnkgdXRmLTguCiAgICAgICAgc2VuZCA9IG91dHB1dC5lbmNvZGUoInV0Zi04IikKICAgICAgICBzZWxmLnNlci53cml0ZShzZW5kKQoKICAgIGRlZiByZWFkU3RyaW5nKHNlbGYpIC0+IHN0cjoKICAgICAgICAjIFNjYW4gdGhlIGlucHV0IGJ1ZmZlciB1bnRpbCBtZWV0IGEgJ1xuJy4gcmV0dXJuIG5vbmUgaWYgZG9lc24ndCBleGlzdC4KICAgICAgICBpZihzZWxmLndhaXRpbmcoKSk6CiAgICAgICAgICAgIHJlY2VpdmVNc2cgPSBzZWxmLnNlci5yZWFkbGluZSgpLmRlY29kZSgidXRmLTgiKVs6LTFdCgogICAgICAgIHJldHVybiByZWNlaXZlTXNnCgpkZWYgcmVhZCgpOgogICAgd2hpbGUgVHJ1ZToKICAgICAgICBpZiBidC53YWl0aW5nKCk6CiAgICAgICAgICAgIHByaW50KGJ0LnJlYWRTdHJpbmcoKSkKCjx8ZmltX2hvbGV8PgogICAgICAgIGlmIG1zZ1dyaXRlID09ICJleGl0Ijogc3lzLmV4aXQoKQogICAgCiAgICAgICAgYnQud3JpdGUobXNnV3JpdGUgKyAiXG4iKQoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICMgTmVlZCB0byBtb2RpZnkgdGhlIHBvcnQgbmFtZS4KICAgIGJ0ID0gYmx1ZXRvb3RoKCJDT001IikKICAgIHdoaWxlIG5vdCBidC5pc19vcGVuKCk6IHBhc3MKICAgIHByaW50KCJCVCBDb25uZWN0ZWQhIikKCiAgICByZWFkVGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cmVhZCkKICAgIHJlYWRUaHJlYWQuc2V0RGFlbW9uKFRydWUpCiAgICByZWFkVGhyZWFkLnN0YXJ0KCkKCnVybCA9ICJodHRwOi8vd3d3LndlYXRoZXIuY29tLmNuL3dlYXRoZXIvMTAxMzQwMTAxLnNodG1sIgpoZWFkZXIgPSAoIlVzZXItQWdlbnQiLCJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNjkuMC4zNDk3LjEwMCBTYWZhcmkvNTM3LjM2IikgICMg6Kit572u6aCt6YOo5L+h5oGvCm9wZW5lciA9IHVybGxpYi5yZXF1ZXN0LmJ1aWxkX29wZW5lcigpICAKb3BlbmVyLmFkZGhlYWRlcnMgPSBbaGVhZGVyXSAgICAgICAgIApyZXF1ZXN0ID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCh1cmwpCnJlc3BvbnNlID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihyZXF1ZXN0KQpodG1sID0gcmVzcG9uc2UucmVhZCgpICAKaHRtbCA9IGh0bWwuZGVjb2RlKCd1dGYtOCcpIAoKCmZpbmFsID0gW10gICAKYnMgPSBCZWF1dGlmdWxTb3VwKGh0bWwsImh0bWwucGFyc2VyIikgIApib2R5ID0gYnMuYm9keSAKZGF0YSA9IGJvZHkuZmluZCgnZGl2Jyx7J2lkJzonN2QnfSkKdWwgPSBkYXRhLmZpbmQoJ3VsJykgCmxpID0gdWwuZmluZF9hbGwoJ2xpJykKCmkgPSAwCmZvciBkYXkgaW4gbGk6CiAgICBpZiBpIDwgNzoKICAgICAgICB0ZW1wID0gW10KICAgICAgICBkYXRlID0gZGF5LmZpbmQoJ2gxJykuc3RyaW5nCiAgICAgICAgdGVtcC5hcHBlbmQoZGF0ZSkgCiAgICAgICAgaW5mID0gZGF5LmZpbmRfYWxsKCdwJykKCiAgICAgICAgdGVtcC5hcHBlbmQoaW5mWzBdLnN0cmluZykgCiAgICAgICAgaWYgaW5mWzFdLmZpbmQoJ3NwYW4nKSBpcyBOb25lOgogICAgICAgICAgICB0ZW1wZXJhdHVyZV9oaWdoZXN0ID0gTm9uZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRlbXBlcmF0dXJlX2hpZ2hlc3QgPSBpbmZbMV0uZmluZCgnc3BhbicpLnN0cmluZyAKICAgICAgICAgICAgdGVtcGVyYXR1cmVfaGlnaGVzdCA9IHRlbXBlcmF0dXJlX2hpZ2hlc3QucmVwbGFjZSgn4oSDJywgJycpCiAgICAgICAgdGVtcGVyYXR1cmVfbG93ZXN0ID0gaW5mWzFdLmZpbmQoJ2knKS5zdHJpbmcgCiAgICAgICAgdGVtcGVyYXR1cmVfbG93ZXN0ID0gdGVtcGVyYXR1cmVfbG93ZXN0LnJlcGxhY2UoJ+KEgycsICcnKQogICAgICAgIHRlbXAuYXBwZW5kKHRlbXBlcmF0dXJlX2hpZ2hlc3QpCiAgICAgICAgdGVtcC5hcHBlbmQodGVtcGVyYXR1cmVfbG93ZXN0KQogICAgICAgIGZpbmFsLmFwcGVuZCh0ZW1wKQogICAgICAgIGkgPSBpICsxCiAgICAgICAgCndlYXRoZXIgPSBbZmluYWxbMV1bMV0sZmluYWxbMV1bMl0sZmluYWxbMV1bM11dCgojIyDku6XkuIvlj6rog73poa/npLrlpKnmsKMo5LiU5aSp5rCj5Z6L5oWL5YOF55Wl6IiJ5Li76KaB5pW45YCLKSAo5q2k6JmV5Lim6Z2e6YeN6bue77yM5pWF5Lim5rKS5pyJ5aSa5Yqg6JGX5aKo77yM5omA5pyJ5aSp5rCj5Z6L5oWL6Kmz6KaLaHR0cHM6Ly93d3cuY3diLmdvdi50dy9WOC9DL0svV2VhdGhlcl9JY29uLmh0bWwpCndoaWxlIFRydWU6CiAgICBkID0gZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoJyVIJykKICAgICMgcHJpbnQoZCkgIAogICAgIyBpZiBtc2dXcml0ZSA9PSAiZXhpdCI6IHN5cy5leGl0KCkKICAgIGlmIGQ+PTg6CiAgICAgICAgaWYoc3RyKGZpbmFsWzFdWzFdKSA9PSAi5aSa5LqRIik6CiAgICAgICAgICAgIHByaW50KCJjbG91ZHkiKQogICAgICAgICAgICBidC53cml0ZSgiYyIpCiAgICAgICAgaWYoc3RyKGZpbmFsWzFdWzFdKSA9PSAi5pm05aSpIik6CiAgICAgICAgICAgIGJ0LndyaXRlKCJzIikKICAgICAgICBpZihzdHIoZmluYWxbMV1bMV0pID09ICLpm6jlpKkiKToKICAgICAgICAgICAgYnQud3JpdGUoInIiKQogICAgdGltZS5zbGVlcCgxMCkKPHxmaW1fc3VmZml4fD4KZGVmIHdyaXRlKCk6CiAgICB3aGlsZSBUcnVlOgogICAgICAgIG1zZ1dyaXRlID0gaW5wdXQoKQogICAgICAgIAo8fGZpbV9lbmR8Pg=="]
["4bcb0ca4ac6806d6f632b73ff18cf111b0a60f35-3","4bcb0ca4ac6806d6f632b73ff18cf111b0a60f35","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgoKaW1wb3J0IHJvc3B5CgppbXBvcnQgcm9zcHkKZnJvbSBnZW9tZXRyeV9tc2dzLm1zZyBpbXBvcnQgVHdpc3QKaW1wb3J0IHN5cwppbXBvcnQgdGltZQppbXBvcnQgb3MKCmltcG9ydCBhY3Rpb25saWIKPHxmaW1faG9sZXw+CmZyb20gZ2VvbWV0cnlfbXNncy5tc2cgaW1wb3J0IFBvc2UsIFBvaW50LCBRdWF0ZXJuaW9uCgpjbGFzcyBMb2NhbGlzYXRpb25BY3Rpb24ob2JqZWN0KToKICAgICMgY3JlYXRlIG1lc3NhZ2VzIHRoYXQgYXJlIHVzZWQgdG8gcHVibGlzaCBmZWVkYmFjay9yZXN1bHQKICAgIF9yZXN1bHQgPSBuYXZpZ2F0aW9uLm1zZy5Mb2NhbGlzYXRpb25SZXN1bHQoKQogICAgcHViID0gcm9zcHkuUHVibGlzaGVyKCcvbW9iaWxlX2Jhc2VfY29udHJvbGxlci9jbWRfdmVsJywgVHdpc3QsIHF1ZXVlX3NpemU9MSkKCiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CiAgICAgICAgc2VsZi5fYWN0aW9uX25hbWUgPSBuYW1lCiAgICAgICAgc2VsZi5fYXMgPSBhY3Rpb25saWIuU2ltcGxlQWN0aW9uU2VydmVyKHNlbGYuX2FjdGlvbl9uYW1lLCBuYXZpZ2F0aW9uLm1zZy5Mb2NhbGlzYXRpb25BY3Rpb24sIGV4ZWN1dGVfY2I9c2VsZi5leGVjdXRlX2NiLCBhdXRvX3N0YXJ0ID0gRmFsc2UpCiAgICAgICAgc2VsZi5fYXMuc3RhcnQoKQoKICAgCiAgICBkZWYgZXhlY3V0ZV9jYihzZWxmLCBnb2FsKToKICAgICAgICAjIGhlbHBlciB2YXJpYWJsZXMKCW9zLnN5c3RlbSgncm9zc2VydmljZSBjYWxsIC9nbG9iYWxfbG9jYWxpemF0aW9uIFwie31cIicpIAoJCgkjIENyZWF0ZSBhIFR3aXN0IG1lc3NhZ2UgYW5kIGFkZCBsaW5lYXIgeCBhbmQgYW5ndWxhciB6IHZhbHVlcwogICAgCW1vdmVfY21kID0gVHdpc3QoKQogICAgCW1vdmVfY21kLmFuZ3VsYXIueiA9IDEKICAgICAgIAogICAgICAgICMgcHVibGlzaCBpbmZvIHRvIHRoZSBjb25zb2xlIGZvciB0aGUgdXNlcgogICAgICAgIHJvc3B5LmxvZ2luZm8oJ0V4ZWN1dGluZywgbG9jYWxpc2F0aW9uICcpCgoKCXQwID0gdGltZS50aW1lKCkKCXRvdGFsID0gdDArMjAKCiAgICAJIyBGb3IgdGhlIG5leHQgMjAgc2Vjb25kcyBwdWJsaXNoIGNtZF92ZWwgbW92ZSBjb21tYW5kcyB0byBUdXJ0bGVzaW0KICAgIAl3aGlsZSB0aW1lLnRpbWUoKSA8IHRvdGFsOgoJCWlmIHNlbGYuX2FzLmlzX3ByZWVtcHRfcmVxdWVzdGVkKCk6CiAgICAgICAgICAgCQlyb3NweS5sb2dpbmZvKCclczogUHJlZW1wdGVkJyAlIHNlbGYuX2FjdGlvbl9uYW1lKQoJCQlzZWxmLl9yZXN1bHQucmVzdWx0X2NvZGUgPSAxOwogICAgICAgICAgIAkJc2VsZi5fYXMuc2V0X3ByZWVtcHRlZChzZWxmLl9yZXN1bHQpICAgICAgCQkKCQlzZWxmLnB1Yi5wdWJsaXNoKG1vdmVfY21kKQogICAgICAgIAlyb3NweS5zbGVlcCgwLjEpIAoKICAgIAlyb3NweS5sb2dpbmZvKCJMb2NhbGlzYXRpb24gdGVzdCBmaW5pc2hlZC4iKQoKCXNlbGYuX3Jlc3VsdC5yZXN1bHRfY29kZSA9IDA7CiAgICAgICAgc2VsZi5fYXMuc2V0X3N1Y2NlZWRlZChzZWxmLl9yZXN1bHQpCgogICAgICAgIAppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgcm9zcHkuaW5pdF9ub2RlKCdsb2NhbGlzYXRpb24nKQogICAgc2VydmVyID0gTG9jYWxpc2F0aW9uQWN0aW9uKHJvc3B5LmdldF9uYW1lKCkpCiAgICByb3NweS5zcGluKCkKPHxmaW1fc3VmZml4fD4KaW1wb3J0IGFjdGlvbmxpYl90dXRvcmlhbHMubXNnCmltcG9ydCBuYXZpZ2F0aW9uLm1zZwoKZnJvbSBtb3ZlX2Jhc2VfbXNncy5tc2cgaW1wb3J0IE1vdmVCYXNlQWN0aW9uLCBNb3ZlQmFzZUdvYWwKPHxmaW1fZW5kfD4="]
["8d5338b003c6b851be1242e5b7339d4e430cd35d-3","8d5338b003c6b851be1242e5b7339d4e430cd35d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmZyb20gc3VydmV5IGltcG9ydCBBbm9ueW1vdXNTdXJ2ZXkKCmNsYXNzIFRlc3RBbm9ueW1vdXNTdXJ2ZXkodW5pdHRlc3QuVGVzdENhc2UpOgoJIiIi6ZKI5a+5QW5vbnltb3VzU3VydmV557G755qE5rWL6K+V57G7IiIiCgoJZGVmIHNldFVwKHNlbGYpOgoJCSIiIiDliJvlu7rkuIDkuKrosIPmn6Xlr7nosaHlkozkuIDnu4TnrZTmoYjvvIzlhbHkvb/nlKjnmoTmtYvor5Xmlrnms5XosIPnlKgiIiIKCQlxdWVzdGlvbiA9ICJXaGF0IGxhbmd1YWdlIGRpZCB5b3UgZmlyc3QgbGVhcm4gdG8gc3BlYWs/IgoJCXNlbGYubXlTdXJ2ZXkgPSBBbm9ueW1vdXNTdXJ2ZXkocXVlc3Rpb24pCgkJc2VsZi5yZXNwb25zZXMgPSBbJ0VuZ2xpc2gnLCAnU3BhbmlzaCcsICdNYW5kYXJpbiddCgoJZGVmIHRlc3RTdG9yZVNpbmdsZVJlc3BvbnNlKHNlbGYpOgoJCSIiIua1i+ivleWNleS4quetlOahiOS8muiiq+WmpeWWhOWcsOWtmOWCqCIiIgoJCSMgcXVlc3Rpb24gPSAiV2hhdCBsYW5ndWFnZSBkaWQgeW91IGZpcnN0IGxlYXJuIHRvIHNwZWFrPyIKCQkjIG15U3VydmV5ID0gQW5vbnltb3VzU3VydmV5KHF1ZXN0aW9uKQoJCXNlbGYubXlTdXJ2ZXkuc3RvcmVSZXNwb25zZShzZWxmLnJlc3BvbnNlc1swXSkKCQlzZWxmLmFzc2VydEluKHNlbGYucmVzcG9uc2VzWzBdLCBzZWxmLm15U3VydmV5LnJlc3BvbnNlcykKCglkZWYgdGVzdFN0b3JlVGhyZWVSZXNwb25zZShzZWxmKToKCQkiIiLmtYvor5XkuInkuKrnrZTmoYjkvJrooqvlpqXlloTlnLDlrZjlgqgiIiIKCQlmb3IgcmVzcG9uc2UgaW4gc2VsZi5yZXNwb25zZXM6CgkJCXNlbGYubXlTdXJ2ZXkuc3RvcmVSZXNwb25zZShyZXNwb25zZSkKCQlmb3IgcmVzcG9uc2UgaW4gc2VsZi5yZXNwb25zZXM6CgkJCXNlbGYuYXNzZXJ0SW4ocmVzcG9uc2UsIHNlbGYubXlTdXJ2ZXkucmVzcG9uc2VzKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgp1bml0dGVzdC5tYWluKCkKPHxmaW1fZW5kfD4="]
["d0c88a39f566f2597d3f743824684633f16c3834-3","d0c88a39f566f2597d3f743824684633f16c3834","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGZ1bmN0b29scwppbXBvcnQgdGVuc29yZmxvdyBhcyB0ZgoKdGYuZW5hYmxlX2VhZ2VyX2V4ZWN1dGlvbigpCmltcG9ydCB0ZW5zb3JmbG93LmtlcmFzIGFzIHRmawppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBlZGZsb3cgaW1wb3J0IFRlbXBsYXRlSXRlcmF0b3IsIGdldF9sb2dnZXIKCgpjbGFzcyBGdWxsTGF0ZW50RGlzdHJpYnV0aW9uKG9iamVjdCk6CiAgICAjIFRPRE86IHdyaXRlIHNvbWUgY29tbWVudCBvbiB3aGVyZSB0aGlzIGNvbWVzIGZyb20KICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJhbWV0ZXJzLCBkaW0sIHN0b2NoYXN0aWM9VHJ1ZSk6CiAgICAgICAgc2VsZi5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycwogICAgICAgIHNlbGYuZGltID0gZGltCiAgICAgICAgc2VsZi5zdG9jaGFzdGljID0gc3RvY2hhc3RpYwoKICAgICAgICBwcyA9IHNlbGYucGFyYW1ldGVycy5zaGFwZS5hc19saXN0KCkKICAgICAgICBpZiBsZW4ocHMpICE9IDI6CiAgICAgICAgICAgIHNlbGYuZXhwYW5kX2RpbXMgPSBUcnVlCiAgICAgICAgICAgIHNlbGYucGFyYW1ldGVycyA9IHRmLnJlc2hhcGUoc2VsZi5wYXJhbWV0ZXJzLCAocHNbMF0sIHBzWzNdKSkKICAgICAgICAgICAgcHMgPSBzZWxmLnBhcmFtZXRlcnMuc2hhcGUuYXNfbGlzdCgpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5leHBhbmRfZGltcyA9IEZhbHNlCgogICAgICAgIGFzc2VydCBsZW4ocHMpID09IDIKICAgICAgICBzZWxmLmJhdGNoX3NpemUgPSBwc1swXQoKICAgICAgICBldmVudF9kaW0gPSBzZWxmLmRpbQogICAgICAgIG5fTF9wYXJhbWV0ZXJzID0gKGV2ZW50X2RpbSAqIChldmVudF9kaW0gKyAxKSkgLy8gMgoKICAgICAgICBzaXplX3NwbGl0cyA9IFtldmVudF9kaW0sIG5fTF9wYXJhbWV0ZXJzXQoKICAgICAgICBzZWxmLm1lYW4sIHNlbGYuTCA9IHRmLnNwbGl0KHNlbGYucGFyYW1ldGVycywgc2l6ZV9zcGxpdHMsIGF4aXM9MSkKICAgICAgICAjIEwgaXMgQ2hvbGVza3kgcGFyYW1ldGVyaXphdGlvbgogICAgICAgIHNlbGYuTCA9IHRmLmNvbnRyaWIuZGlzdHJpYnV0aW9ucy5maWxsX3RyaWFuZ3VsYXIoc2VsZi5MKQogICAgICAgICMgbWFrZSBzdXJlIGRpYWdvbmFsIGVudHJpZXMgYXJlIHBvc2l0aXZlIGJ5IHBhcmFtZXRlcml6aW5nIHRoZW0KICAgICAgICAjIGxvZ2FyaXRobWljYWxseQogICAgICAgIGRpYWdfTCA9IHRmLmxpbmFsZy5kaWFnX3BhcnQoc2VsZi5MKQogICAgICAgIHNlbGYubG9nX2RpYWdfTCA9IGRpYWdfTCAgIyBrZWVwIGZvciBsYXRlciBjb21wdXRhdGlvbiBvZiBsb2dkZXQKICAgICAgICBkaWFnX0wgPSB0Zi5leHAoZGlhZ19MKQogICAgICAgICMgc2NhbGUgZG93biB0aGVuIHNldCBkaWFncwogICAgICAgIHJvd193ZWlnaHRzID0gbnAuYXJyYXkoW25wLnNxcnQoaSArIDEpIGZvciBpIGluIHJhbmdlKGV2ZW50X2RpbSldKQogICAgICAgIHJvd193ZWlnaHRzID0gbnAucmVzaGFwZShyb3dfd2VpZ2h0cywgWzEsIGV2ZW50X2RpbSwgMV0pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLkwgPSBzZWxmLkwgLyByb3dfd2VpZ2h0cwogICAgICAgIHNlbGYuTCA9IHRmLmxpbmFsZy5zZXRfZGlhZyhzZWxmLkwsIGRpYWdfTCkKICAgICAgICBzZWxmLlNpZ21hID0gdGYubWF0bXVsKHNlbGYuTCwgc2VsZi5MLCB0cmFuc3Bvc2VfYj1UcnVlKSAgIyBMIHRpbWVzIExedAoKPHxmaW1fZW5kfD4="]
["7e010a196f59b4443bc03ed818ac1b6de46c1f00-4","7e010a196f59b4443bc03ed818ac1b6de46c1f00","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiMgRm9ybSBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZWQgZnJvbSByZWFkaW5nIHVpIGZpbGUgJ2luZm9fY2x1c3RlcmluZ19kaWFsb2dfdWkudWknCiMKIyBDcmVhdGVkIGJ5OiBQeVF0NSBVSSBjb2RlIGdlbmVyYXRvciA1LjYKIwojIFdBUk5JTkchIEFsbCBjaGFuZ2VzIG1hZGUgaW4gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdCEKCmZyb20gUHlRdDUgaW1wb3J0IFF0Q29yZSwgUXRHdWksIFF0V2lkZ2V0cwoKY2xhc3MgVWlfRGlhbG9nKG9iamVjdCk6CiAgICBkZWYgc2V0dXBVaShzZWxmLCBEaWFsb2cpOgogICAgICAgIERpYWxvZy5zZXRPYmplY3ROYW1lKCJEaWFsb2ciKQogICAgICAgIERpYWxvZy5yZXNpemUoMzIyLCAzNjMpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dCA9IFF0V2lkZ2V0cy5RVkJveExheW91dChEaWFsb2cpCiAgICAgICAgc2VsZi52ZXJ0aWNhbExheW91dC5zZXRPYmplY3ROYW1lKCJ2ZXJ0aWNhbExheW91dCIpCiAgICAgICAgc2VsZi5ob3Jpem9udGFsTGF5b3V0ID0gUXRXaWRnZXRzLlFIQm94TGF5b3V0KCkKICAgICAgICBzZWxmLmhvcml6b250YWxMYXlvdXQuc2V0Q29udGVudHNNYXJnaW5zKDEwLCAtMSwgMTAsIDEwKQogICAgICAgIHNlbGYuaG9yaXpvbnRhbExheW91dC5zZXRPYmplY3ROYW1lKCJob3Jpem9udGFsTGF5b3V0IikKICAgICAgICBzZWxmLmxhYmVsID0gUXRXaWRnZXRzLlFMYWJlbChEaWFsb2cpCiAgICAgICAgc2VsZi5sYWJlbC5zZXRPYmplY3ROYW1lKCJsYWJlbCIpCiAgICAgICAgc2VsZi5ob3Jpem9udGFsTGF5b3V0LmFkZFdpZGdldChzZWxmLmxhYmVsKQogICAgICAgIHNlbGYuZGFtYWdlZE91dGxpZXJzTGluZUVkaXQgPSBRdFdpZGdldHMuUUxpbmVFZGl0KERpYWxvZykKICAgICAgICBzZWxmLmRhbWFnZWRPdXRsaWVyc0xpbmVFZGl0LnNldE9iamVjdE5hbWUoImRhbWFnZWRPdXRsaWVyc0xpbmVFZGl0IikKICAgICAgICBzZWxmLmhvcml6b250YWxMYXlvdXQuYWRkV2lkZ2V0KHNlbGYuZGFtYWdlZE91dGxpZXJzTGluZUVkaXQpCiAgICAgICAgc2VsZi5jYWxjdWxhdGVQdXNoQnV0dG9uID0gUXRXaWRnZXRzLlFQdXNoQnV0dG9uKERpYWxvZykKICAgICAgICBzZWxmLmNhbGN1bGF0ZVB1c2hCdXR0b24uc2V0TWF4aW11bVNpemUoUXRDb3JlLlFTaXplKDEwMCwgMTY3NzcyMTUpKQogICAgICAgIHNlbGYuY2FsY3VsYXRlUHVzaEJ1dHRvbi5zZXRPYmplY3ROYW1lKCJjYWxjdWxhdGVQdXNoQnV0dG9uIikKICAgICAgICBzZWxmLmhvcml6b250YWxMYXlvdXQuYWRkV2lkZ2V0KHNlbGYuY2FsY3VsYXRlUHVzaEJ1dHRvbikKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0LmFkZExheW91dChzZWxmLmhvcml6b250YWxMYXlvdXQpCiAgICAgICAgc2VsZi5ncm91cEJveF8yID0gUXRXaWRnZXRzLlFHcm91cEJveChEaWFsb2cpCiAgICAgICAgc2VsZi5ncm91cEJveF8yLnNldE1pbmltdW1TaXplKFF0Q29yZS5RU2l6ZSgyMDAsIDEzNSkpCiAgICAgICAgc2VsZi5ncm91cEJveF8yLnNldE9iamVjdE5hbWUoImdyb3VwQm94XzIiKQogICAgICAgIHNlbGYubGFiZWxfNSA9IFF0V2lkZ2V0cy5RTGFiZWwoc2VsZi5ncm91cEJveF8yKQogICAgICAgIHNlbGYubGFiZWxfNS5zZXRHZW9tZXRyeShRdENvcmUuUVJlY3QoMTAsIDIwLCA2MCwgMjEpKQogICAgICAgIHNlbGYubGFiZWxfNS5zZXRPYmplY3ROYW1lKCJsYWJlbF81IikKICAgICAgICBzZWxmLnRodW1iQWNjdXJhY3lfbGluZUVkaXQgPSBRdFdpZGdldHMuUUxpbmVFZGl0KHNlbGYuZ3JvdXBCb3hfMikKICAgICAgICBzZWxmLnRodW1iQWNjdXJhY3lfbGluZUVkaXQuc2V0RW5hYmxlZChGYWxzZSkKICAgICAgICBzZWxmLnRodW1iQWNjdXJhY3lfbGluZUVkaXQuc2V0R2VvbWV0cnkoUXRDb3JlLlFSZWN0KDE2MCwgMjAsIDYxLCAyMSkpCiAgICAgICAgc2VsZi50aHVtYkFjY3VyYWN5X2xpbmVFZGl0LnNldFJlYWRPbmx5KFRydWUpCiAgICAgICAgc2VsZi50aHVtYkFjY3VyYWN5X2xpbmVFZGl0LnNldE9iamVjdE5hbWUoInRodW1iQWNjdXJhY3lfbGluZUVkaXQiKQogICAgICAgIHNlbGYubGFiZWxfNiA9IFF0V2lkZ2V0cy5RTGFiZWwoc2VsZi5ncm91cEJveF8yKQogICAgICAgIHNlbGYubGFiZWxfNi5zZXRHZW9tZXRyeShRdENvcmUuUVJlY3QoMTAsIDQwLCAxNDEsIDIxKSkKICAgICAgICBzZWxmLmxhYmVsXzYuc2V0T2JqZWN0TmFtZSgibGFiZWxfNiIpCiAgICAgICAgc2VsZi50aHVtYkREX2xpbmVFZGl0X3BlcmNlbnRzID0gUXRXaWRnZXRzLlFMaW5lRWRpdChzZWxmLmdyb3VwQm94XzIpCiAgICAgICAgc2VsZi50aHVtYkREX2xpbmVFZGl0X3BlcmNlbnRzLnNldEVuYWJsZWQoRmFsc2UpCiAgICAgICAgc2VsZi50aHVtYkREX2xpbmVFZGl0X3BlcmNlbnRzLnNldEdlb21ldHJ5KFF0Q29yZS5RUmVjdCgxNjAsIDQwLCA2MSwgMjEpKQogICAgICAgIHNlbGYudGh1bWJERF9saW5lRWRpdF9wZXJjZW50cy5zZXRSZWFkT25seShUcnVlKQogICAgICAgIHNlbGYudGh1bWJERF9saW5lRWRpdF9wZXJjZW50cy5zZXRPYmplY3ROYW1lKCJ0aHVtYkREX2xpbmVFZGl0X3BlcmNlbnRzIikKICAgICAgICBzZWxmLnRodW1iRERfbGluZUVkaXRfbnVtYmVyID0gUXRXaWRnZXRzLlFMaW5lRWRpdChzZWxmLmdyb3VwQm94XzIpCiAgICAgICAgc2VsZi50aHVtYkREX2xpbmVFZGl0X251bWJlci5zZXRFbmFibGVkKEZhbHNlKQogICAgICAgIHNlbGYudGh1bWJERF9saW5lRWRpdF9udW1iZXIuc2V0R2VvbWV0cnkoUXRDb3JlLlFSZWN0KDIyMCwgNDAsIDYxLCAyMSkpCiAgICAgICAgc2VsZi50aHVtYkREX2xpbmVFZGl0X251bWJlci5zZXRSZWFkT25seShUcnVlKQogICAgICAgIHNlbGYudGh1bWJERF9saW5lRWRpdF9udW1iZXIuc2V0T2JqZWN0TmFtZSgidGh1bWJERF9saW5lRWRpdF9udW1iZXIiKQogICAgICAgIHNlbGYubGFiZWxfNyA9IFF0V2lkZ2V0cy5RTGFiZWwoc2VsZi5ncm91cEJveF8yKQogICAgICAgIHNlbGYubGFiZWxfNy5zZXRHZW9tZXRyeShRdENvcmUuUVJlY3QoMTAsIDYwLCAxNDEsIDIxKSkKICAgICAgICBzZWxmLmxhYmVsXzcuc2V0T2JqZWN0TmFtZSgibGFiZWxfNyIpCiAgICAgICAgc2VsZi50aHVtYkRTX2xpbmVFZGl0X3BlcmNlbnRzID0gUXRXaWRnZXRzLlFMaW5lRWRpdChzZWxmLmdyb3VwQm94XzIpCiAgICAgICAgc2VsZi50aHVtYkRTX2xpbmVFZGl0X3BlcmNlbnRzLnNldEVuYWJsZWQoRmFsc2UpCiAgICAgICAgc2VsZi50aHVtYkRTX2xpbmVFZGl0X3BlcmNlbnRzLnNldEdlb21ldHJ5KFF0Q29yZS5RUmVjdCgxNjAsIDYwLCA2MSwgMjEpKQogICAgICAgIHNlbGYudGh1bWJEU19saW5lRWRpdF9wZXJjZW50cy5zZXRSZWFkT25seShUcnVlKQogICAgICAgIHNlbGYudGh1bWJEU19saW5lRWRpdF9wZXJjZW50cy5zZXRPYmplY3ROYW1lKCJ0aHVtYkRTX2xpbmVFZGl0X3BlcmNlbnRzIikKICAgICAgICBzZWxmLnRodW1iRFNfbGluZUVkaXRfbnVtYmVyID0gUXRXaWRnZXRzLlFMaW5lRWRpdChzZWxmLmdyb3VwQm94XzIpCiAgICAgICAgc2VsZi50aHVtYkRTX2xpbmVFZGl0X251bWJlci5zZXRFbmFibGVkKEZhbHNlKQogICAgICAgIHNlbGYudGh1bWJEU19saW5lRWRpdF9udW1iZXIuc2V0R2VvbWV0cnkoUXRDb3JlLlFSZWN0KDIyMCwgNjAsIDYxLCAyMSkpCiAgICAgICAgc2VsZi50aHVtYkRTX2xpbmVFZGl0X251bWJlci5zZXRSZWFkT25seShUcnVlKQogICAgICAgIHNlbGYudGh1bWJEU19saW5lRWRpdF9udW1iZXIuc2V0T2JqZWN0TmFtZSgidGh1bWJEU19saW5lRWRpdF9udW1iZXIiKQogICAgICAgIHNlbGYubGFiZWxfOCA9IFF0V2lkZ2V0cy5RTGFiZWwoc2VsZi5ncm91cEJveF8yKQogICAgICAgIHNlbGYubGFiZWxfOC5zZXRHZW9tZXRyeShRdENvcmUuUVJlY3QoMTAsIDgwLCAxNDEsIDIxKSkKICAgICAgICBzZWxmLmxhYmVsXzguc2V0T2JqZWN0TmFtZSgibGFiZWxfOCIpCiAgICAgICAgc2VsZi5sYWJlbF85ID0gUXRXaWRnZXRzLlFMYWJlbChzZWxmLmdyb3VwQm94XzIpCiAgICAgICAgc2VsZi5sYWJlbF85LnNldEdlb21ldHJ5KFF0Q29yZS5RUmVjdCgxMCwgMTAwLCAxNDEsIDIxKSkKICAgICAgICBzZWxmLmxhYmVsXzkuc2V0T2JqZWN0TmFtZSgibGFiZWxfOSIpCiAgICAgICAgc2VsZi50aHVtYlNTX2xpbmVFZGl0X3BlcmNlbnRzID0gUXRXaWRnZXRzLlFMaW5lRWRpdChzZWxmLmdyb3VwQm94XzIpCiAgICAgICAgc2VsZi50aHVtYlNTX2xpbmVFZGl0X3BlcmNlbnRzLnNldEVuYWJsZWQoRmFsc2UpCiAgICAgICAgc2VsZi50aHVtYlNTX2xpbmVFZGl0X3BlcmNlbnRzLnNldEdlb21ldHJ5KFF0Q29yZS5RUmVjdCgxNjAsIDgwLCA2MSwgMjEpKQogICAgICAgIHNlbGYudGh1bWJTU19saW5lRWRpdF9wZXJjZW50cy5zZXRSZWFkT25seShUcnVlKQogICAgICAgIHNlbGYudGh1bWJTU19saW5lRWRpdF9wZXJjZW50cy5zZXRPYmplY3ROYW1lKCJ0aHVtYlNTX2xpbmVFZGl0X3BlcmNlbnRzIikKICAgICAgICBzZWxmLnRodW1iU1NfbGluZUVkaXRfbnVtYmVyID0gUXRXaWRnZXRzLlFMaW5lRWRpdChzZWxmLmdyb3VwQm94XzIpCiAgICAgICAgc2VsZi50aHVtYlNTX2xpbmVFZGl0X251bWJlci5zZXRFbmFibGVkKEZhbHNlKQogICAgICAgIHNlbGYudGh1bWJTU19saW5lRWRpdF9udW1iZXIuc2V0R2VvbWV0cnkoUXRDb3JlLlFSZWN0KDIyMCwgODAsIDYxLCAyMSkpCiAgICAgICAgc2VsZi50aHVtYlNTX2xpbmVFZGl0X251bWJlci5zZXRSZWFkT25seShUcnVlKQogICAgICAgIHNlbGYudGh1bWJTU19saW5lRWRpdF9udW1iZXIuc2V0T2JqZWN0TmFtZSgidGh1bWJTU19saW5lRWRpdF9udW1iZXIiKQogICAgICAgIHNlbGYudGh1bWJTRF9saW5lRWRpdF9udW1iZXIgPSBRdFdpZGdldHMuUUxpbmVFZGl0KHNlbGYuZ3JvdXBCb3hfMikKICAgICAgICBzZWxmLnRodW1iU0RfbGluZUVkaXRfbnVtYmVyLnNldEVuYWJsZWQoRmFsc2UpCiAgICAgICAgc2VsZi50aHVtYlNEX2xpbmVFZGl0X251bWJlci5zZXRHZW9tZXRyeShRdENvcmUuUVJlY3QoMjIwLCAxMDAsIDYxLCAyMSkpCiAgICAgICAgc2VsZi50aHVtYlNEX2xpbmVFZGl0X251bWJlci5zZXRSZWFkT25seShUcnVlKQogICAgICAgIHNlbGYudGh1bWJTRF9saW5lRWRpdF9udW1iZXIuc2V0T2JqZWN0TmFtZSgidGh1bWJTRF9saW5lRWRpdF9udW1iZXIiKQogICAgICAgIHNlbGYudGh1bWJTRF9saW5lRWRpdF9wZXJjZW50cyA9IFF0V2lkZ2V0cy5RTGluZUVkaXQoc2VsZi5ncm91cEJveF8yKQogICAgICAgIHNlbGYudGh1bWJTRF9saW5lRWRpdF9wZXJjZW50cy5zZXRFbmFibGVkKEZhbHNlKQogICAgICAgIHNlbGYudGh1bWJTRF9saW5lRWRpdF9wZXJjZW50cy5zZXRHZW9tZXRyeShRdENvcmUuUVJlY3QoMTYwLCAxMDAsIDYxLCAyMSkpCiAgICAgICAgc2VsZi50aHVtYlNEX2xpbmVFZGl0X3BlcmNlbnRzLnNldFJlYWRPbmx5KFRydWUpCiAgICAgICAgc2VsZi50aHVtYlNEX2xpbmVFZGl0X3BlcmNlbnRzLnNldE9iamVjdE5hbWUoInRodW1iU0RfbGluZUVkaXRfcGVyY2VudHMiKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXQuYWRkV2lkZ2V0KHNlbGYuZ3JvdXBCb3hfMikKICAgICAgICBzZWxmLmdyb3VwQm94XzMgPSBRdFdpZGdldHMuUUdyb3VwQm94KERpYWxvZykKICAgICAgICBzZWxmLmdyb3VwQm94XzMuc2V0TWluaW11bVNpemUoUXRDb3JlLlFTaXplKDIwMCwgMTM1KSkKICAgICAgICBzZWxmLmdyb3VwQm94XzMuc2V0T2JqZWN0TmFtZSgiZ3JvdXBCb3hfMyIpCiAgICAgICAgc2VsZi5sYWJlbF8xNSA9IFF0V2lkZ2V0cy5RTGFiZWwoc2VsZi5ncm91cEJveF8zKQogICAgICAgIHNlbGYubGFiZWxfMTUuc2V0R2VvbWV0cnkoUXRDb3JlLlFSZWN0KDEwLCAyMCwgNjAsIDIxKSkKICAgICAgICBzZWxmLmxhYmVsXzE1LnNldE9iamVjdE5hbWUoImxhYmVsXzE1IikKICAgICAgICBzZWxmLmVxX2hpc3RBY2N1cmFjeV9saW5lRWRpdCA9IFF0V2lkZ2V0cy5RTGluZUVkaXQoc2VsZi5ncm91cEJveF8zKQogICAgICAgIHNlbGYuZXFfaGlzdEFjY3VyYWN5X2xpbmVFZGl0LnNldEVuYWJsZWQoRmFsc2UpCiAgICAgICAgc2VsZi5lcV9oaXN0QWNjdXJhY3lfbGluZUVkaXQuc2V0R2VvbWV0cnkoUXRDb3JlLlFSZWN0KDE2MCwgMjAsIDYxLCAyMSkpCiAgICAgICAgc2VsZi5lcV9oaXN0QWNjdXJhY3lfbGluZUVkaXQuc2V0UmVhZE9ubHkoVHJ1ZSkKICAgICAgICBzZWxmLmVxX2hpc3RBY2N1cmFjeV9saW5lRWRpdC5zZXRPYmplY3ROYW1lKCJlcV9oaXN0QWNjdXJhY3lfbGluZUVkaXQiKQogICAgICAgIHNlbGYubGFiZWxfMTYgPSBRdFdpZGdldHMuUUxhYmVsKHNlbGYuZ3JvdXBCb3hfMykKICAgICAgICBzZWxmLmxhYmVsXzE2LnNldEdlb21ldHJ5KFF0Q29yZS5RUmVjdCgxMCwgNDAsIDE0MSwgMjEpKQogICAgICAgIHNlbGYubGFiZWxfMTYuc2V0T2JqZWN0TmFtZSgibGFiZWxfMTYiKQogICAgICAgIHNlbGYuZXFfaGlzdEREX2xpbmVFZGl0X3BlcmNlbnRzID0gUXRXaWRnZXRzLlFMaW5lRWRpdChzZWxmLmdyb3VwQm94XzMpCiAgICAgICAgc2VsZi5lcV9oaXN0RERfbGluZUVkaXRfcGVyY2VudHMuc2V0RW5hYmxlZChGYWxzZSkKPHxmaW1faG9sZXw+CiAgICAgICAgc2VsZi5lcV9oaXN0RERfbGluZUVkaXRfbnVtYmVyLnNldEVuYWJsZWQoRmFsc2UpCiAgICAgICAgc2VsZi5lcV9oaXN0RERfbGluZUVkaXRfbnVtYmVyLnNldEdlb21ldHJ5KFF0Q29yZS5RUmVjdCgyMjAsIDQwLCA2MSwgMjEpKQogICAgICAgIHNlbGYuZXFfaGlzdEREX2xpbmVFZGl0X251bWJlci5zZXRSZWFkT25seShUcnVlKQogICAgICAgIHNlbGYuZXFfaGlzdEREX2xpbmVFZGl0X251bWJlci5zZXRPYmplY3ROYW1lKCJlcV9oaXN0RERfbGluZUVkaXRfbnVtYmVyIikKICAgICAgICBzZWxmLmxhYmVsXzE3ID0gUXRXaWRnZXRzLlFMYWJlbChzZWxmLmdyb3VwQm94XzMpCiAgICAgICAgc2VsZi5sYWJlbF8xNy5zZXRHZW9tZXRyeShRdENvcmUuUVJlY3QoMTAsIDYwLCAxNDEsIDIxKSkKICAgICAgICBzZWxmLmxhYmVsXzE3LnNldE9iamVjdE5hbWUoImxhYmVsXzE3IikKICAgICAgICBzZWxmLmVxX2hpc3REU19saW5lRWRpdF9wZXJjZW50cyA9IFF0V2lkZ2V0cy5RTGluZUVkaXQoc2VsZi5ncm91cEJveF8zKQogICAgICAgIHNlbGYuZXFfaGlzdERTX2xpbmVFZGl0X3BlcmNlbnRzLnNldEVuYWJsZWQoRmFsc2UpCiAgICAgICAgc2VsZi5lcV9oaXN0RFNfbGluZUVkaXRfcGVyY2VudHMuc2V0R2VvbWV0cnkoUXRDb3JlLlFSZWN0KDE2MCwgNjAsIDYxLCAyMSkpCiAgICAgICAgc2VsZi5lcV9oaXN0RFNfbGluZUVkaXRfcGVyY2VudHMuc2V0UmVhZE9ubHkoVHJ1ZSkKICAgICAgICBzZWxmLmVxX2hpc3REU19saW5lRWRpdF9wZXJjZW50cy5zZXRPYmplY3ROYW1lKCJlcV9oaXN0RFNfbGluZUVkaXRfcGVyY2VudHMiKQogICAgICAgIHNlbGYuZXFfaGlzdERTX2xpbmVFZGl0X251bWJlciA9IFF0V2lkZ2V0cy5RTGluZUVkaXQoc2VsZi5ncm91cEJveF8zKQogICAgICAgIHNlbGYuZXFfaGlzdERTX2xpbmVFZGl0X251bWJlci5zZXRFbmFibGVkKEZhbHNlKQogICAgICAgIHNlbGYuZXFfaGlzdERTX2xpbmVFZGl0X251bWJlci5zZXRHZW9tZXRyeShRdENvcmUuUVJlY3QoMjIwLCA2MCwgNjEsIDIxKSkKICAgICAgICBzZWxmLmVxX2hpc3REU19saW5lRWRpdF9udW1iZXIuc2V0UmVhZE9ubHkoVHJ1ZSkKICAgICAgICBzZWxmLmVxX2hpc3REU19saW5lRWRpdF9udW1iZXIuc2V0T2JqZWN0TmFtZSgiZXFfaGlzdERTX2xpbmVFZGl0X251bWJlciIpCiAgICAgICAgc2VsZi5sYWJlbF8xOCA9IFF0V2lkZ2V0cy5RTGFiZWwoc2VsZi5ncm91cEJveF8zKQogICAgICAgIHNlbGYubGFiZWxfMTguc2V0R2VvbWV0cnkoUXRDb3JlLlFSZWN0KDEwLCA4MCwgMTQxLCAyMSkpCiAgICAgICAgc2VsZi5sYWJlbF8xOC5zZXRPYmplY3ROYW1lKCJsYWJlbF8xOCIpCiAgICAgICAgc2VsZi5sYWJlbF8xOSA9IFF0V2lkZ2V0cy5RTGFiZWwoc2VsZi5ncm91cEJveF8zKQogICAgICAgIHNlbGYubGFiZWxfMTkuc2V0R2VvbWV0cnkoUXRDb3JlLlFSZWN0KDEwLCAxMDAsIDE0MSwgMjEpKQogICAgICAgIHNlbGYubGFiZWxfMTkuc2V0T2JqZWN0TmFtZSgibGFiZWxfMTkiKQogICAgICAgIHNlbGYuZXFfaGlzdFNTX2xpbmVFZGl0X3BlcmNlbnRzID0gUXRXaWRnZXRzLlFMaW5lRWRpdChzZWxmLmdyb3VwQm94XzMpCiAgICAgICAgc2VsZi5lcV9oaXN0U1NfbGluZUVkaXRfcGVyY2VudHMuc2V0RW5hYmxlZChGYWxzZSkKICAgICAgICBzZWxmLmVxX2hpc3RTU19saW5lRWRpdF9wZXJjZW50cy5zZXRHZW9tZXRyeShRdENvcmUuUVJlY3QoMTYwLCA4MCwgNjEsIDIxKSkKICAgICAgICBzZWxmLmVxX2hpc3RTU19saW5lRWRpdF9wZXJjZW50cy5zZXRSZWFkT25seShUcnVlKQogICAgICAgIHNlbGYuZXFfaGlzdFNTX2xpbmVFZGl0X3BlcmNlbnRzLnNldE9iamVjdE5hbWUoImVxX2hpc3RTU19saW5lRWRpdF9wZXJjZW50cyIpCiAgICAgICAgc2VsZi5lcV9oaXN0U1NfbGluZUVkaXRfbnVtYmVyID0gUXRXaWRnZXRzLlFMaW5lRWRpdChzZWxmLmdyb3VwQm94XzMpCiAgICAgICAgc2VsZi5lcV9oaXN0U1NfbGluZUVkaXRfbnVtYmVyLnNldEVuYWJsZWQoRmFsc2UpCiAgICAgICAgc2VsZi5lcV9oaXN0U1NfbGluZUVkaXRfbnVtYmVyLnNldEdlb21ldHJ5KFF0Q29yZS5RUmVjdCgyMjAsIDgwLCA2MSwgMjEpKQogICAgICAgIHNlbGYuZXFfaGlzdFNTX2xpbmVFZGl0X251bWJlci5zZXRSZWFkT25seShUcnVlKQogICAgICAgIHNlbGYuZXFfaGlzdFNTX2xpbmVFZGl0X251bWJlci5zZXRPYmplY3ROYW1lKCJlcV9oaXN0U1NfbGluZUVkaXRfbnVtYmVyIikKICAgICAgICBzZWxmLmVxX2hpc3RTRF9saW5lRWRpdF9udW1iZXIgPSBRdFdpZGdldHMuUUxpbmVFZGl0KHNlbGYuZ3JvdXBCb3hfMykKICAgICAgICBzZWxmLmVxX2hpc3RTRF9saW5lRWRpdF9udW1iZXIuc2V0RW5hYmxlZChGYWxzZSkKICAgICAgICBzZWxmLmVxX2hpc3RTRF9saW5lRWRpdF9udW1iZXIuc2V0R2VvbWV0cnkoUXRDb3JlLlFSZWN0KDIyMCwgMTAwLCA2MSwgMjEpKQogICAgICAgIHNlbGYuZXFfaGlzdFNEX2xpbmVFZGl0X251bWJlci5zZXRSZWFkT25seShUcnVlKQogICAgICAgIHNlbGYuZXFfaGlzdFNEX2xpbmVFZGl0X251bWJlci5zZXRPYmplY3ROYW1lKCJlcV9oaXN0U0RfbGluZUVkaXRfbnVtYmVyIikKICAgICAgICBzZWxmLmVxX2hpc3RTRF9saW5lRWRpdF9wZXJjZW50cyA9IFF0V2lkZ2V0cy5RTGluZUVkaXQoc2VsZi5ncm91cEJveF8zKQogICAgICAgIHNlbGYuZXFfaGlzdFNEX2xpbmVFZGl0X3BlcmNlbnRzLnNldEVuYWJsZWQoRmFsc2UpCiAgICAgICAgc2VsZi5lcV9oaXN0U0RfbGluZUVkaXRfcGVyY2VudHMuc2V0R2VvbWV0cnkoUXRDb3JlLlFSZWN0KDE2MCwgMTAwLCA2MSwgMjEpKQogICAgICAgIHNlbGYuZXFfaGlzdFNEX2xpbmVFZGl0X3BlcmNlbnRzLnNldFJlYWRPbmx5KFRydWUpCiAgICAgICAgc2VsZi5lcV9oaXN0U0RfbGluZUVkaXRfcGVyY2VudHMuc2V0T2JqZWN0TmFtZSgiZXFfaGlzdFNEX2xpbmVFZGl0X3BlcmNlbnRzIikKICAgICAgICBzZWxmLnZlcnRpY2FsTGF5b3V0LmFkZFdpZGdldChzZWxmLmdyb3VwQm94XzMpCiAgICAgICAgc2VsZi5idXR0b25Cb3ggPSBRdFdpZGdldHMuUURpYWxvZ0J1dHRvbkJveChEaWFsb2cpCiAgICAgICAgc2VsZi5idXR0b25Cb3guc2V0T3JpZW50YXRpb24oUXRDb3JlLlF0Lkhvcml6b250YWwpCiAgICAgICAgc2VsZi5idXR0b25Cb3guc2V0U3RhbmRhcmRCdXR0b25zKFF0V2lkZ2V0cy5RRGlhbG9nQnV0dG9uQm94LkNhbmNlbHxRdFdpZGdldHMuUURpYWxvZ0J1dHRvbkJveC5PaykKICAgICAgICBzZWxmLmJ1dHRvbkJveC5zZXRPYmplY3ROYW1lKCJidXR0b25Cb3giKQogICAgICAgIHNlbGYudmVydGljYWxMYXlvdXQuYWRkV2lkZ2V0KHNlbGYuYnV0dG9uQm94KQoKICAgICAgICBzZWxmLnJldHJhbnNsYXRlVWkoRGlhbG9nKQogICAgICAgIHNlbGYuYnV0dG9uQm94LmFjY2VwdGVkLmNvbm5lY3QoRGlhbG9nLmFjY2VwdCkKICAgICAgICBzZWxmLmJ1dHRvbkJveC5yZWplY3RlZC5jb25uZWN0KERpYWxvZy5yZWplY3QpCiAgICAgICAgUXRDb3JlLlFNZXRhT2JqZWN0LmNvbm5lY3RTbG90c0J5TmFtZShEaWFsb2cpCgogICAgZGVmIHJldHJhbnNsYXRlVWkoc2VsZiwgRGlhbG9nKToKICAgICAgICBfdHJhbnNsYXRlID0gUXRDb3JlLlFDb3JlQXBwbGljYXRpb24udHJhbnNsYXRlCiAgICAgICAgRGlhbG9nLnNldFdpbmRvd1RpdGxlKF90cmFuc2xhdGUoIkRpYWxvZyIsICJEaWFsb2ciKSkKICAgICAgICBzZWxmLmxhYmVsLnNldFRleHQoX3RyYW5zbGF0ZSgiRGlhbG9nIiwgIkRhbWFnZWQgbGFiZWxzOiIpKQogICAgICAgIHNlbGYuY2FsY3VsYXRlUHVzaEJ1dHRvbi5zZXRUZXh0KF90cmFuc2xhdGUoIkRpYWxvZyIsICJDYWxjdWxhdGUiKSkKICAgICAgICBzZWxmLmdyb3VwQm94XzIuc2V0VGl0bGUoX3RyYW5zbGF0ZSgiRGlhbG9nIiwgIk9yaWdpbmFsIGltYWdlcyIpKQogICAgICAgIHNlbGYubGFiZWxfNS5zZXRUZXh0KF90cmFuc2xhdGUoIkRpYWxvZyIsICJBY2N1cmFjeSIpKQogICAgICAgIHNlbGYubGFiZWxfNi5zZXRUZXh0KF90cmFuc2xhdGUoIkRpYWxvZyIsICJEYW1hZ2VkIC0+IERhbWFnZWQiKSkKICAgICAgICBzZWxmLmxhYmVsXzcuc2V0VGV4dChfdHJhbnNsYXRlKCJEaWFsb2ciLCAiRGFtYWdlZCAtPiBTdXJ2aXZlZCIpKQogICAgICAgIHNlbGYubGFiZWxfOC5zZXRUZXh0KF90cmFuc2xhdGUoIkRpYWxvZyIsICJTdXJ2aXZlZCAtPiBTdXJ2aXZlZCIpKQogICAgICAgIHNlbGYubGFiZWxfOS5zZXRUZXh0KF90cmFuc2xhdGUoIkRpYWxvZyIsICJTdXJ2aXZlZCAtPiBEYW1hZ2VkIikpCiAgICAgICAgc2VsZi5ncm91cEJveF8zLnNldFRpdGxlKF90cmFuc2xhdGUoIkRpYWxvZyIsICJIaWdoIGNvbnRyYXN0IGltYWdlcyIpKQogICAgICAgIHNlbGYubGFiZWxfMTUuc2V0VGV4dChfdHJhbnNsYXRlKCJEaWFsb2ciLCAiQWNjdXJhY3kiKSkKICAgICAgICBzZWxmLmxhYmVsXzE2LnNldFRleHQoX3RyYW5zbGF0ZSgiRGlhbG9nIiwgIkRhbWFnZWQgLT4gRGFtYWdlZCIpKQogICAgICAgIHNlbGYubGFiZWxfMTcuc2V0VGV4dChfdHJhbnNsYXRlKCJEaWFsb2ciLCAiRGFtYWdlZCAtPiBTdXJ2aXZlZCIpKQogICAgICAgIHNlbGYubGFiZWxfMTguc2V0VGV4dChfdHJhbnNsYXRlKCJEaWFsb2ciLCAiU3Vydml2ZWQgLT4gU3Vydml2ZWQiKSkKICAgICAgICBzZWxmLmxhYmVsXzE5LnNldFRleHQoX3RyYW5zbGF0ZSgiRGlhbG9nIiwgIlN1cnZpdmVkIC0+IERhbWFnZWQiKSkKCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5lcV9oaXN0RERfbGluZUVkaXRfcGVyY2VudHMuc2V0R2VvbWV0cnkoUXRDb3JlLlFSZWN0KDE2MCwgNDAsIDYxLCAyMSkpCiAgICAgICAgc2VsZi5lcV9oaXN0RERfbGluZUVkaXRfcGVyY2VudHMuc2V0UmVhZE9ubHkoVHJ1ZSkKICAgICAgICBzZWxmLmVxX2hpc3RERF9saW5lRWRpdF9wZXJjZW50cy5zZXRPYmplY3ROYW1lKCJlcV9oaXN0RERfbGluZUVkaXRfcGVyY2VudHMiKQogICAgICAgIHNlbGYuZXFfaGlzdEREX2xpbmVFZGl0X251bWJlciA9IFF0V2lkZ2V0cy5RTGluZUVkaXQoc2VsZi5ncm91cEJveF8zKQo8fGZpbV9lbmR8Pg=="]
["d00eb009b17214a51124ab07c6902ac2ab71888a-2","d00eb009b17214a51124ab07c6902ac2ab71888a",{"$cut":{"chars":37724,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIHF1cHVsc2UucHVsc2VzLnBhcmFtZXRlcnMgaW1wb3J0ICBDb25zdGFudFBhcmFtZXRlcgpmcm9tIHF1cHVsc2UuX3Byb2dyYW0uaW5zdHJ1Y3Rpb25zIGltcG9ydCBJbnN0cnVjdGlvbkJsb2NrLCBTVE9QSW5zdHJ1Y3Rpb24KZnJvbSBxdXB1bHNlLnB1bHNlcy5zZXF1ZW5jaW5nIGltcG9ydCBTZXF1ZW5jZXIKCmZyb20gdGVzdHMucHVsc2VzLnNlcXVlbmNpbmdfZHVtbWllcyBpbXBvcnQgRHVtbXlTZXF1ZW5jaW5nRWxlbWVudCwgRHVtbXlDb25kaXRpb24KCgpjbGFzcyBTZXF1ZW5jZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIAogICAgZGVmIHRlc3RfaW5pdGlhbGl6YXRpb24oc2VsZikgLT4gTm9uZToKICAgICAgICBzZXF1ZW5jZXIgPSBTZXF1ZW5jZXIoKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXF1ZW5jZXIuaGFzX2ZpbmlzaGVkKCkpCiAgICAgICAgCiAgICBkZWYgdGVzdF9wdXNoKHNlbGYpIC0+IE5vbmU6CiAgICAgICAgc2VxdWVuY2VyID0gU2VxdWVuY2VyKCkKICAgICAgICAKICAgICAgICBwcyA9IHsnZm9vJzogQ29uc3RhbnRQYXJhbWV0ZXIoMSksICdiYXInOiBDb25zdGFudFBhcmFtZXRlcig3LjMpfQogICAgICAgIGNzID0geydmb28nOiBEdW1teUNvbmRpdGlvbigpfQogICAgICAgIHdtID0geydmb28nIDogJ2Jhcid9CiAgICAgICAgZWxlbSA9IER1bW15U2VxdWVuY2luZ0VsZW1lbnQoKQogICAgICAgIAogICAgICAgIHNlcXVlbmNlci5wdXNoKGVsZW0sIHBzLCBjcywgd2luZG93X21hcHBpbmc9d20pCiAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZXF1ZW5jZXIuaGFzX2ZpbmlzaGVkKCkpCiAgICAgICAgc2VxdWVuY2VyLmJ1aWxkKCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBzLCBlbGVtLnBhcmFtZXRlcnMpCgogICAgZGVmIHRlc3RfcHVzaF9mbG9hdF9wYXJhbXMoc2VsZikgLT4gTm9uZToKICAgICAgICBzZXF1ZW5jZXIgPSBTZXF1ZW5jZXIoKQoKICAgICAgICBwcyA9IHsnZm9vJzogMSwgJ2Jhcic6IDcuM30KICAgICAgICBjcyA9IHsnZm9vJzogRHVtbXlDb25kaXRpb24oKX0KICAgICAgICBlbGVtID0gRHVtbXlTZXF1ZW5jaW5nRWxlbWVudCgpCiAgICAgICAgc2VxdWVuY2VyLnB1c2goZWxlbSwgcHMsIGNzKQogICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VxdWVuY2VyLmhhc19maW5pc2hlZCgpKQogICAgICAgIHNlcXVlbmNlci5idWlsZCgpCiAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVsZW0ucGFyYW1ldGVyc1snZm9vJ10sIENvbnN0YW50UGFyYW1ldGVyKQogICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbGVtLnBhcmFtZXRlcnNbJ2JhciddLCBDb25zdGFudFBhcmFtZXRlcikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNzLCBlbGVtLmNvbmRpdGlvbnMpCiAgICAKIyAgIFRoZSBmb2xsb3dpbmcgYXJlIG1ldGhvZHMgdG8gdGVzdCBkaWZmZXJlbnQgZXhlY3V0aW9uIHBhdGggdGhyb3VnaCB0aGUgYnVpbGQoKSBtZXRob2QuCiMgICBNb3N0IHJlbGV2YW50IHBhdGhzIHdpdGggdXAgdG8gMiBpdGVyYXRpb25zIGZvciBlYWNoIGxvb3AgYXJlIGNvdmVyZWQsIGV4Y2x1ZGluZyAibWlycm9yIiBjb25maWd1cmF0aW9ucy4KIyAgIE5vdGUgdGhhdCB0aGVyZSBhcmUgcGF0aHMgd2hpY2ggY2FuIG5ldmVyIG9jY3VyIGFuZCB0aHVzIGFyZSBub3QgdGVzdGVkLgojICAgRXhhbXBsZSBmb3IgbmFtaW5nOiBvMl9tMV9pMl90Zl9tMl9pMV9mX2kxX2YKIyAgIFRoZSBvdXRlcm1vc3QgbG9vcCBpcyBpdGVyYXRlZCB0d2ljZSAobzIpCiMgICAgICAgLSBJbiB0aGUgZmlyc3QgaXRlcmF0aW9uLCB0aGUgbWlkZGxlIGxvb3AgaXMgaXRlcmF0ZWQgb25jZSAobTEpCiMgICAgICAgICAgIC0gVGhlcmVpbiwgdGhlIGlubmVyIGxvb3AgaXMgaXRlcmF0ZWQgdHdpY2UgKGkyKSB3aXRoIGJyYW5jaGluZyBkZWNpc2lvbnMgdHJ1ZSAoZmlyc3QgaXRlcmF0aW9uKSBhbmQgZmFsc2UgKHNlY29uZCBpdGVyYXRpb24pICh0ZikKIyAgICAgICAtIEluIHRoZSBzZWNvbmQgaXRlcmF0aW9uLCB0aGUgbWlkZGxlIGxvb3AgaXMgaXRlcmF0ZWQgdHdpY2UgKG0yKQojICAgICAgICAgICAtIEluIGl0cyBmaXJzdCBpdGVyYXRpb24sIHRoZSBpbm5lciBsb29wIGlzIGl0ZXJhdGVkIG9uY2UgKGkxKSB3aXRoIGJyYW5jaGluZyBkZWNpc2lvbiBmYWxzZSAoZikKIyAgICAgICAgICAgLSBJbiBpdHMgc2Vjb25kIGl0ZXJhdGlvbiwgdGhlIGlubmVyIGxvb3AgaXMgaXRlcmF0ZWQgb25jZSAoaTEpIHdpdGggYnJhbmNoaW5nIGRlY2lzaW9uIGZhbHNlIChmKQoKICAgIAogICAgZGVmIHRlc3RfYnVpbGRfcGF0aF9ub19sb29wX25vdGhpbmdfdG9fZG8oc2VsZikgLT4gTm9uZToKICAgICAgICBzZXF1ZW5jZXIgPSBTZXF1ZW5jZXIoKQogICAgICAgIAogICAgICAgIHNlcXVlbmNlci5idWlsZCgpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlcXVlbmNlci5oYXNfZmluaXNoZWQoKSkKICAgICAgICAKICAgIGRlZiB0ZXN0X2J1aWxkX3BhdGhfbzFfbTFfaTFfZl9zaW5nbGVfZWxlbWVudF9yZXF1aXJlc19zdG9wX21haW5fYmxvY2soc2VsZikgLT4gTm9uZToKICAgICAgICBzZXF1ZW5jZXIgPSBTZXF1ZW5jZXIoKQogICAgCiAgICAgICAgZWxlbSA9IER1bW15U2VxdWVuY2luZ0VsZW1lbnQoVHJ1ZSkKICAgICAgICBwcyA9IHsnZm9vJzogQ29uc3RhbnRQYXJhbWV0ZXIoMSksICdiYXInOiBDb25zdGFudFBhcmFtZXRlcig3LjMpfQogICAgICAgIGNzID0geydmb28nOiBEdW1teUNvbmRpdGlvbigpfQogICAgICAgIHNlcXVlbmNlci5wdXNoKGVsZW0sIHBzLCBjcykKICAgICAgICBzZXF1ZW5jZXIuYnVpbGQoKQogICAgICAgIAogICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VxdWVuY2VyLmhhc19maW5pc2hlZCgpKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHMsIGVsZW0ucGFyYW1ldGVycykKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNzLCBlbGVtLmNvbmRpdGlvbnMpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBlbGVtLnJlcXVpcmVzX3N0b3BfY2FsbF9jb3VudGVyKQogICAgICAgIHNl"}}]
["9a191ab4c3a28a2f27aac83759505a175660a6b2-3","9a191ab4c3a28a2f27aac83759505a175660a6b2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCmltcG9ydCB0b3JjaC5ubiBhcyBubgppbXBvcnQgdG9yY2gubm4uZnVuY3Rpb25hbCBhcyBGCmltcG9ydCBzeXMKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKZnJvbSBuZXR3b3JrIGltcG9ydCBOZXQsIE5ldENDRkZGCgppZiBsZW4oc3lzLmFyZ3YpIDwgNDoKICAgIHByaW50KCdFUlJPUjogTm90IGVub3VnaCBpbnB1dCBhcmd1bWVudHMhJykKICAgIHByaW50KCdVc2FnZTogcHl0aG9uIHRvcmNoX3RvX29ueHgucHkgcGF0aFRvUHl0b3JjaE1vZGVsLnB3ZiBwYXRoVG9PTk5YTW9kZWwub25ueCBudW1fY2hhbm5lbHMnKQogICAgZXhpdCgtMSkKCnN0YXRlX2RpY3QgPSB0b3JjaC5sb2FkKHN5cy5hcmd2WzFdKQojbmV3X3N0YXRlX2RpY3QgPSBPcmRlcmVkRGljdCgpCiNmb3IgaywgdiBpbiBzdGF0ZV9kaWN0Lml0ZW1zKCk6CiMgICAgbmFtZSA9IGtbNzpdCiMgICAgbmV3X3N0YXRlX2RpY3RbbmFtZV0gPSB2CgppbnB1dF9jaGFubmVscyA9IGludChzeXMuYXJndlszXSkKbmV0ID0gTmV0KGlucHV0X2NoYW5uZWxzKQpuZXQubG9hZF9zdGF0ZV9kaWN0KHN0YXRlX2RpY3QpCnByaW50KG5ldCkKCmR1bW15X2lucHV0ID0gdG9yY2gucmFuZG4oMSwgaW5wdXRfY2hhbm5lbHMsIDYwLCA2MCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgp0b3JjaC5vbm54LmV4cG9ydChuZXQsIGR1bW15X2lucHV0LCBzeXMuYXJndlsyXSwgdmVyYm9zZT1UcnVlKQo8fGZpbV9lbmR8Pg=="]
["ef02eaf6fba336b2a510bfa1656bbee7a72c6beb-2","ef02eaf6fba336b2a510bfa1656bbee7a72c6beb","PHxmaW1fcHJlZml4fD4KJ0dvYWw6ICBMZWFybiBwYXR0ZXJucyBvZiB1c2luZyBkYXRhYmFzZXMgZnJvbSBQeXRob24nCgppbXBvcnQgc3FsaXRlMwpmcm9tIHBwcmludCBpbXBvcnQgcHByaW50Cgpjb3Vyc2VzID0gWwogICAgKDMyMDksICdQeXRob24gSUlJJyksCjx8ZmltX2hvbGV8PgpdCgpjb25uID0gc3FsaXRlMy5jb25uZWN0KCc6bWVtb3J5OicpCmMgPSBjb25uLmN1cnNvcigpCmMuZXhlY3V0ZSgnQ1JFQVRFIFRBQkxFIENvdXJzZXMgKGNvdXJzZV9udW0gaW50ZWdlciwgY291cnNlX3RpdGxlIHRleHQpOycpCmMuZXhlY3V0ZW1hbnkoJ0lOU0VSVCBJTlRPIENvdXJzZXMgVkFMVUVTICg/LCA/KTsnLCBjb3Vyc2VzKQpjb25uLmNvbW1pdCgpCgpmb3Igcm93IGluIGMuZXhlY3V0ZSgnU0VMRUNUICogRlJPTSBDb3Vyc2VzIFdIRVJFIGNvdXJzZV9udW0gPiA0MDAwIE9SREVSIEJZIGNvdXJzZV90aXRsZSBERVNDJyk6CiAgICBwcmludCByb3cKCnByaW50IGMuZXhlY3V0ZSgnU0VMRUNUIGNvdXJzZV90aXRsZSBGUk9NIENvdXJzZXMgV0hFUkUgY291cnNlX251bSA9IDMyMDknKS5mZXRjaG9uZSgpCgo8fGZpbV9zdWZmaXh8PgogICAgKDQyMTksICdBZHZhbmNlZCBHaXQnKSwKICAgICgxNzA1LCAnTlhPUycpLAogICAgKDUxMDMsICdTRE4gYW5kIEFDSScpLAo8fGZpbV9lbmR8Pg=="]
["8d29ee3e622797b97c8f2fbd7af96dad2527883d-1","8d29ee3e622797b97c8f2fbd7af96dad2527883d","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCAoYWJzb2x1dGVfaW1wb3J0LCBwcmludF9mdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZV9saXRlcmFscywgZGl2aXNpb24pCgppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBwYW5kYXMudXRpbC50ZXN0aW5nIGFzIHBkdGVzdAppbXBvcnQgcHl0ZXN0Cgpmcm9tIC5jb250ZXh0IGltcG9ydCBncmFncmFweSBhcyBnZwpmcm9tIC4gaW1wb3J0IGFzc2VydF9kYXRhX2VxdWFsCgpkZWYgdGVzdF9tYXBfZGF0YSgpOgogICAgeCA9IHJhbmdlKDEwKQogICAgeSA9IHJhbmdlKDEwLCAyMCkKICAgIGRmID0gcGQuRGF0YUZyYW1lKHsnZm9vJzogeCwgJ2Jhcic6IHl9KQogICAgYWVzID0gZ2cuYWVzKHg9J2ZvbycsIHk9J2JhcicsIHN0YXRfeD0nYmF6JykKICAgIGFzc2VydF9kYXRhX2VxdWFsKGFlcy5tYXBfZGF0YShkZiksCiAgICAgICAgICAgICAgICAgICAgICBwZC5EYXRhRnJhbWUoeyd4JzogeCwgJ3knOiB5fSkpCgogICAgYXNzZXJ0X2RhdGFfZXF1YWwoZ2cuYWVzKCkubWFwX2RhdGEoZGYpLCBwZC5EYXRhRnJhbWUoe30pKQoKZGVmIHRlc3RfbWFwX3N0YXQoKToKICAgIHggPSByYW5nZSgxMCkKICAgIHkgPSByYW5nZSgxMCwgMjApCiAgICB6ID0gcmFuZ2UoMjAsIDMwKQogICAgZGYgPSBwZC5EYXRhRnJhbWUoeyd4JzogeCwgJ3knOiB5LCAneic6IHp9KQogICAgYWVzID0gZ2cuYWVzKHg9J2ZvbycsIHN0YXRfeD0neScsIHN0YXRfdz0neCcpCgogICAgYXNzZXJ0X2RhdGFfZXF1YWwoYWVzLm1hcF9zdGF0KGRmKSwKICAgICAgICAgICAgICAgICAgICAgIHBkLkRhdGFGcmFtZSh7J3gnOiB5LCAneSc6IHksICd6JzogeiwgJ3cnOiB4fSkpCgogICAgYXNzZXJ0X2RhdGFfZXF1YWwoZ2cuYWVzKCkubWFwX3N0YXQoZGYpLCBkZikKCmRlZiB0ZXN0X2VxKCk6CiAgICBhc3NlcnQgZ2cuYWVzKCkgPT0gZ2cuYWVzKCkKICAgIGFzc2VydCBnZy5hZXMoeD0nZm9vJykgPT0gZ2cuYWVzKHg9J2ZvbycpCiAgICBhc3NlcnQgZ2cuYWVzKHg9J2ZvbycsIHN0YXRfeD0nYmFyJykgPT0gZ2cuYWVzKHg9J2ZvbycsIHN0YXRfeD0nYmFyJykKICAgIGFzc2VydCBnZy5hZXMoeD0nZm9vJykgIT0gZ2cuYWVzKHg9J2JhcicpCiAgICBhc3NlcnQgZ2cuYWVzKHg9J2ZvbycpICE9IGdnLmFlcyh5PSdmb28nKQogICAgYXNzZXJ0IGdnLmFlcyh4PSdmb28nLCBzdGF0X3g9J2JhcicpID09IGdnLmFlcyh4PSdmb28nLCBzdGF0X3g9J2JheicpCgogICAgIyBDaGVjayBuZSBpcyBpbXBsZW1lbnRlZAogICAgYXNzZXJ0IG5vdCBnZy5hZXMoeD0nZm9vJykgIT0gZ2cuYWVzKHg9J2ZvbycpCgo8fGZpbV9ob2xlfD4KZGVmIHRlc3RfdW5pb24oKToKICAgIGEgPSBnZy5hZXMoeD0nZm9vJywgeT0nYmFyJywgc3RhdF94PSdGT08nLCBzdGF0X3k9J0JBUicpCiAgICBiID0gZ2cuYWVzKHk9J2JheicsIHo9J2JsZXRjaCcsIHN0YXRfeT0nQkFaJywgc3RhdF96PSdCTEVUQ0gnKQogICAgYyA9IGdnLmFlcyh6PSdxdXV4Jywgdz0nem9yYicsIHN0YXRfej0nUVVVWCcsIHN0YXRfdz0nWk9SQicpCiAgICBhc3NlcnQgZ2cuYWVzLnVuaW9uKGEsIGIsIGMpIFwKICAgICAgICA9PSBnZy5hZXMoeD0nZm9vJywgeT0nYmF6Jywgej0ncXV1eCcsIHc9J3pvcmInLAogICAgICAgICAgICAgICAgICBzdGF0X3g9J0ZPTycsIHN0YXRfeT0nQkFaJywgc3RhdF96PSdRVVVYJywgc3RhdF93PSdaT1JCJykKPHxmaW1fc3VmZml4fD4KICAgIGFzc2VydCBnZy5hZXMoeD1nZy5hZXMuY29uc3QoJ2JsYWNrJykpID09IGdnLmFlcyh4PWdnLmFlcy5jb25zdCgnYmxhY2snKSkKICAgIGFzc2VydCBnZy5hZXMoeD1nZy5hZXMuY29uc3QoJ2JsYWNrJykpICE9IGdnLmFlcyh4PWdnLmFlcy5jb25zdCgncmVkJykpCgo8fGZpbV9lbmR8Pg=="]
["e336f3203c909f0e19cdf8a6d1a93590e7d2f2f4-1","e336f3203c909f0e19cdf8a6d1a93590e7d2f2f4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgbnVtcHkKaW1wb3J0IFB5Q29yZQppbXBvcnQgUHlEYXRhUHJvY2VzcwppbXBvcnQgVW5kaXN0b3J0RmlzaEV5ZV9wcm9jZXNzIGFzIHByb2Nlc3NNb2QKaW1wb3J0IFVuZGlzdG9ydEZpc2hFeWVfd2lkZ2V0IGFzIHdpZGdldE1vZAoKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KPHxmaW1faG9sZXw+CgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIFB5RGF0YVByb2Nlc3MuQ1BsdWdpblByb2Nlc3NJbnRlcmZhY2UuX19pbml0X18oc2VsZikKCiAgICBkZWYgZ2V0UHJvY2Vzc0ZhY3Rvcnkoc2VsZik6CiAgICAgICAgIyBJbnN0YW50aWF0ZSBwcm9jZXNzIG9iamVjdAogICAgICAgIHJldHVybiBwcm9jZXNzTW9kLlVuZGlzdG9ydEZpc2hFeWVQcm9jZXNzRmFjdG9yeSgpCgogICAgZGVmIGdldFdpZGdldEZhY3Rvcnkoc2VsZik6CiAgICAgICAgIyBJbnN0YW50aWF0ZSBhc3NvY2lhdGVkIHdpZGdldCBvYmplY3QKICAgICAgICByZXR1cm4gd2lkZ2V0TW9kLlVuZGlzdG9ydEZpc2hFeWVXaWRnZXRGYWN0b3J5KCkKPHxmaW1fc3VmZml4fD4KIyAtIEludGVyZmFjZSBjbGFzcyB0byBpbnRlZ3JhdGUgdGhlIHByb2Nlc3Mgd2l0aCBJa29taWEgYXBwbGljYXRpb24KIyAtIEluaGVyaXRzIFB5RGF0YVByb2Nlc3MuQ1BsdWdpblByb2Nlc3NJbnRlcmZhY2UgZnJvbSBJa29taWEgQVBJCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KY2xhc3MgVW5kaXN0b3J0RmlzaEV5ZShQeURhdGFQcm9jZXNzLkNQbHVnaW5Qcm9jZXNzSW50ZXJmYWNlKToKPHxmaW1fZW5kfD4="]
["eff2693069823dc1ad959c2d95da0faf5624e8cf-1","eff2693069823dc1ad959c2d95da0faf5624e8cf","PHxmaW1fcHJlZml4fD4KZnJvbSAuLiBpbXBvcnQgc2ltdWxhdGlvbiBhcyBzaW0KaW1wb3J0IG51bXB5IGFzIG5wCgoKY2xhc3MgRU1UNlJvTW9kZWw6CiAgICAiIiIKICAgIE1vZGVsIGNhbGN1bGF0aW5nIGZpdG5lc3Mgb2YgaXJyYWRpYXRpb24gcHJvdG9jb2xzLgogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyYW1zLCB0dW1vcnMsIG51bV9wcm90b2NvbHMsIG51bV90ZXN0cywgbnVtX2dwdXM9MSk6CiAgICAgICAgIiIiCiAgICAgICAgUGFyYW1ldGVycwogICAgICAgIC0tLS0tLS0tLS0KICAgICAgICBwYXJhbXMgOiBzaW11bGF0aW9uLlBhcmFtZXRlcnMKICAgICAgICAgICAgUGFyYW1ldGVycyBvZiB0aGUgc2ltdWxhdGlvbi4KICAgICAgICB0dW1vcnMgOiBsaXN0IG9mIHNpbXVsYXRpb24uVHVtb3JTdGF0ZQogICAgICAgICAgICBMaXN0IG9mIHR1bW9ycyB0byBiZSBzaW11bGF0ZWQuCiAgICAgICAgbnVtX3Byb3RvY29scyA6IGludAogICAgICAgICAgICBOdW1iZXIgb2YgcHJvdG9jb2xzIHRvIHRlc3QuCiAgICAgICAgbnVtX3Rlc3RzIDogaW50CiAgICAgICAgICAgIE51bWJlciBvZiBzaW11bGF0aW9ucyBmb3IgZWFjaCBwcm90b2NvbHMsIHR1bW9yIGFuZCBncHUuIFNvIGlmIHdlIHdhbnQKICAgICAgICAgICAgdG8gdGVzdCBhIHByb3RvY29sIDEwMCB0aW1lcyBhbmQgd2UgaGF2ZSA0IGdwdXMgYW5kIDUgdGVzdCB0dW1vcnMsIAogICAgICAgICAgICBudW1fdGVzdHMgc2hvdWxkIGJlIGVxdWFsIHRvIDUuCiAgICAgICAgbnVtX2dwdXMgOiBpbnQKICAgICAgICAgICAgTnVtYmVyIG9mIGF2YWlsYWJsZSBncHVzLgogICAgICAgICIiIgogICAgICAgIHNlbGYubnVtX3N0ZXBzID0gMTQ0MDAwCiAgICAgICAgc2VsZi5wcm90b2NvbF9yZXNvbHV0aW9uID0gMzAwCiAgICAgICAgc2VsZi5wYXJhbXMgPSBwYXJhbXMKICAgICAgICBzZWxmLnR1bW9ycyA9IHR1bW9ycwogICAgICAgIHNlbGYubnVtX3Byb3RvY29scyA9IG51bV9wcm90b2NvbHMKICAgICAgICBzZWxmLm51bV90ZXN0cyA9IG51bV90ZXN0cwogICAgICAgIHNlbGYubnVtX2dwdXMgPSBudW1fZ3B1cwogICAgICAgIHNlbGYuZXhwZXJpbWVudHMgPSBbc2ltLkV4cGVyaW1lbnQocGFyYW1zLCB0dW1vcnMsIHNlbGYubnVtX3Rlc3RzLCBzZWxmLm51bV9wcm90b2NvbHMsIGcsIHNlbGYubnVtX3N0ZXBzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm90b2NvbF9yZXNvbHV0aW9uKSBmb3IgZyBpbiByYW5nZShzZWxmLm51bV9ncHVzKV0KCiAgICBkZWYgcHJlZGljdChzZWxmLCBwcm90b2NvbHMpOgogICAgICAgICIiIgogICAgICAgIFJldHVybnMgZml0bmVzcyBvZiBlYWNoIHByb3RvY29sLgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgIFBhcmFtZXRlcnMKICAgICAgICAtLS0tLS0tLS0tCiAgICAgICAgcHJvdG9jb2xzIDogbGlzdCBvZiBsaXN0cyBvZiBwYWlycyAoc2ltdWxhdGlvbiBzdGVwLCBpcnJhZGlhdGlvbiBkb3NlKQo8fGZpbV9lbmR8Pg=="]
["f52ddba0f8bf7e3609b1520bcba76bfa203e456b-2","f52ddba0f8bf7e3609b1520bcba76bfa203e456b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdApmcm9tIHB1YmxpY2tleXN5c3RlbSBpbXBvcnQgZW5jcnlwdF9waXBlbGluZSwgZGVjcnlwdF9waXBlbGluZSwgY29tcHV0ZV9kLCBwaGkKCkBweXRlc3QuZml4dHVyZQpkZWYgdGVzdF9zZXQoKToKICAgIG0gPSAiRmFjdG9yaW5nIGxldHMgdXMgYnJlYWsgUlNBLiIKICAgIGMgPSAiMjIwOTY0NTE4Njc0MTAzODE3NzYzMDY1NjExMzQ4ODM0MTgwMTc0MTAwNjk3ODc4OTI4MzEwNzE3MzE4MzkxNDM2NzYxMzU2MDAxMjA1MzgwMDQyODIzMjk2NTA0NzM1MDk0MjQzNDM5NDYyMTk3NTE1MTIyNTY0NjU4Mzk5Njc5NDI4ODk0NjA3NjQ1NDIwNDA1ODE1NjQ3NDg5ODgwMTM3MzQ4NjQxMjA0NTIzMjUyMjkzMjAxNzY0ODc5MTY2NjY0MDI5OTc1MDkxODg3Mjk5NzE2OTA1MjYwODMyMjIwNjc3NzE2MDAwMTkzMjkyNjA4NzAwMDk1Nzk5OTM3MjQwNzc0NTg5Njc3NzM2OTc4MTc1NzEyNjcyMjk5NTExNDg2NjI5NTk2Mjc5MzQ3OTE1NDAiCiAgICBlID0gJzY1NTM3JwogICAgTiA9ICIxNzk3NjkzMTM0ODYyMzE1OTA3NzI5MzA1MTkwNzg5MDI0NzMzNjE3OTc2OTc4OTQyMzA2NTcyNzM0MzAwODExNTc3MzI2NzU4MDU1MDU2MjA2ODY5ODUzNzk0NDkyMTI5ODI5NTk1ODU1MDEzODc1MzcxNjQwMTU3MTAxMzk4NTg2NDc4MzM3Nzg2MDY5MjU1ODM0OTc1NDEwODUxOTY1OTE2MTUxMjgwNTc1NzU5NDA3NTI2MzUwMDc0NzU5MzUyODg3MTA4MjM2NDk5NDk5NDA3NzE4OTU2MTcwNTQzNjExNDk0NzQ4NjUwNDY3MTEwMTUxMDE1NjM5NDA2ODA1Mjc1NDAwNzE1ODQ1NjA4Nzg1Nzc2NjM3NDMwNDAwODYzNDA3NDI4NTUyNzg1NDkwOTI1ODEiCiAgICBwID0gIjEzNDA3ODA3OTI5OTQyNTk3MDk5NTc0MDI0OTk4MjA1ODQ2MTI3NDc5MzY1ODIwNTkyMzkzMzc3NzIzNTYxNDQzNzIxNzY0MDMwMDczNjYyNzY4ODkxMTExNjE0MzYyMzI2OTk4Njc1MDQwNTQ2MDk0MzM5MzIwODM4NDE5NTIzMzc1OTg2MDI3NTMwNDQxNTYyMTM1NzI0MzAxIgogICAgcSA9ICIxMzQwNzgwNzkyOTk0MjU5NzA5OTU3NDAyNDk5ODIwNTg0NjEyNzQ3OTM2NTgyMDU5MjM5MzM3NzcyMzU2MTQ0MzcyMTc2NDAzMDA3Mzc3ODU2MDk4MDM0ODkzMDU1Nzc1MDU2OTY2MDA0OTIzNDAwMjE5MjU5MDgyMzA4NTE2Mzk0MDAyNTQ4NTExNDQ0OTQ3NTI2NTM2NDI4MSIKICAgIGQgPSAiMTU5MDEyODc5Nzg5OTk0MTMwMjk0NDQxMDM2MjIzODczMTc2NjkwNzc2Mzk0MjAzNzEwMTM2MjkxNTcxODExNDE1MTM1OTI2NTIxNTg1NjgxODQ3MjcwMTI5MDM2NTg4MTM1Mjg0OTEwMzc5MTA1NDc1MjE4NTQ4MTU5MzExNjQ5OTk2NDEzMDgxODU5NzY1ODczODYyODkzNTU4NjY2Nzg2MTU5NDQzMTk2ODE5Mzk0NzM4NDIxOTUwOTIyMDczNzcwOTgyNjk5OTYzNDYzNTM3NDQxMDk1NDkwMTEzMDY1ODEzMDI2MzkzNTMxMzY2ODQ1ODY3OTYyMjkyMjEwNzE3NTU0MTA1Mjc3MzQwMTE2NDU1MjgwODQwNzUxNDAxNzY5NzYxMTg4MTM4OTAzOTc0NzMiCiAgICByZXR1cm4gbSwgYywgZSwgZCwgTiwgcCwgcQoKCmRlZiB0ZXN0MSh0ZXN0X3NldCk6CgogICAgXywgXywgZSwgZCwgTiwgcCwgcSA9IHRlc3Rfc2V0CiAgICBkX3BoaU4gPSBjb21wdXRlX2QoZSwgTiwgcCwgcSkKICAgIGFzc2VydCBkID09IGRfcGhpTgoKCmRlZiB0ZXN0Mih0ZXN0X3NldCk6CgogICAgcHQsIGN0MSwgZSwgZCwgTiwgcCwgcSA9IHRlc3Rfc2V0CiAgICBtMSA9IGRlY3J5cHRfcGlwZWxpbmUoY3QxLCBkLCBOKQo8fGZpbV9ob2xlfD4KZGVmIHRlc3QzKHRlc3Rfc2V0KToKCiAgICBwdCwgY3QxLCBlLCBkLCBOLCBwLCBxID0gdGVzdF9zZXQKICAgIGN0MiA9IGVuY3J5cHRfcGlwZWxpbmUocHQsIGUsIE4pCiAgICBjdDMgPSBlbmNyeXB0X3BpcGVsaW5lKHB0LCBlLCBOKQoKICAgIG0xID0gZGVjcnlwdF9waXBlbGluZShjdDEsIGQsIE4pCiAgICBtMiA9IGRlY3J5cHRfcGlwZWxpbmUoY3QyLCBkLCBOKQogICAgbTMgPSBkZWNyeXB0X3BpcGVsaW5lKGN0MywgZCwgTikKCiAgICBhc3NlcnQgbTEgPT0gcHQKICAgIGFzc2VydCBtMiA9PSBwdAogICAgYXNzZXJ0IG0zID09IHB0Cgo8fGZpbV9zdWZmaXh8PgogICAgYXNzZXJ0IG0xID09IHB0CgoKPHxmaW1fZW5kfD4="]
["3251ec272257d6a5313cc834846e7f030233d695-2","3251ec272257d6a5313cc834846e7f030233d695","PHxmaW1fcHJlZml4fD4KIiIiRHVtbXkgVVJMcyBmb3IgdGhlIHRlc3RzIG9mIHRoZSBmb3Jtc19hamF4aWZpZWQgYXBwLiIiIgpmcm9tIGRqYW5nby5jb25mLnVybHMgaW1wb3J0IHVybAoKZnJvbSAuIGltcG9ydCB2aWV3cwoKCnVybHBhdHRlcm5zID0gWwogICAgdXJsKHInZHVtbXktZm9ybS9jcmVhdGUvJCcsCiAgICAgICAgdmlld3MuRHVtbXlDcmVhdGVWaWV3LmFzX3ZpZXcoKSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIG5hbWU9J2R1bW15X2NyZWF0ZV92aWV3JyksCjx8ZmltX2VuZHw+"]
["8bf70d72c931c1c9bfbb38aed714aebcf6e6d2d4-4","8bf70d72c931c1c9bfbb38aed714aebcf6e6d2d4","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBQYXJ0IG9mIE9kb28uIFNlZSBMSUNFTlNFIGZpbGUgZm9yIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KCmltcG9ydCBvZG9vLnRlc3RzCgoKQG9kb28udGVzdHMudGFnZ2VkKCdwb3N0X2luc3RhbGwnLCAnLWF0X2luc3RhbGwnKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmNsYXNzIFRlc3RSb3V0ZXMob2Rvby50ZXN0cy5IdHRwQ2FzZSk6CgogICAgZGVmIHRlc3RfMDFfd2ViX3Nlc3Npb25fZGVzdHJveShzZWxmKToKICAgICAgICBiYXNlX3VybCA9IHNlbGYuZW52Wydpci5jb25maWdfcGFyYW1ldGVyJ10uc3VkbygpLmdldF9wYXJhbSgnd2ViLmJhc2UudXJsJykKPHxmaW1fZW5kfD4="]
["d0009ccf142b1f3e6d0725ef6523c4abb3dec0bf-2","d0009ccf142b1f3e6d0725ef6523c4abb3dec0bf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFiYwppbXBvcnQgbnVtcHkgYXMgbnAKCmZyb20gLiBpbXBvcnQgX2Jhc2VfbW9kZWwKCgpjbGFzcyBTa2xlYXJuTW9kZWwoX2Jhc2VfbW9kZWwuQmFzZU1vZGVsLCBhYmMuQUJDKToKICAgICIiIgogICAgUGFyZW50IGNsYXNzIGJhc2VkIG9uIDpvYmo6YH5lYXN5UGhlbm8ubW9kZWwuX2Jhc2VfbW9kZWwuQmFzZU1vZGVsYCBmb3IgYWxsIG1vZGVscyB3aXRoIGEgc2tsZWFybi1saWtlIEFQSSB0byBzaGFyZQo8fGZpbV9ob2xlfD4KICAgICAgICAqSW5oZXJpdGVkIGF0dHJpYnV0ZXMqCgogICAgICAgIFNlZSA6b2JqOmB+ZWFzeVBoZW5vLm1vZGVsLl9iYXNlX21vZGVsLkJhc2VNb2RlbGAKICAgICIiIgoKICAgIGRlZiByZXRyYWluKHNlbGYsIFhfcmV0cmFpbjogbnAuYXJyYXksIHlfcmV0cmFpbjogbnAuYXJyYXkpOgogICAgICAgICIiIgogICAgICAgIEltcGxlbWVudGF0aW9uIG9mIHRoZSByZXRyYWluaW5nIGZvciBtb2RlbHMgd2l0aCBza2xlYXJuLWxpa2UgQVBJLgogICAgICAgIFNlZSA6b2JqOmB+ZWFzeVBoZW5vLm1vZGVsLl9iYXNlX21vZGVsLkJhc2VNb2RlbGAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5tb2RlbC5maXQoWF9yZXRyYWluLCBucC5yYXZlbCh5X3JldHJhaW4pKQoKICAgIGRlZiBwcmVkaWN0KHNlbGYsIFhfaW46IG5wLmFycmF5KSAtPiBucC5hcnJheToKICAgICAgICAiIiIKICAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiBhIHByZWRpY3Rpb24gYmFzZWQgb24gaW5wdXQgZmVhdHVyZXMgZm9yIG1vZGVscyB3aXRoIHNrbGVhcm4tbGlrZSBBUEkuCiAgICAgICAgU2VlIDpvYmo6YH5lYXN5UGhlbm8ubW9kZWwuX2Jhc2VfbW9kZWwuQmFzZU1vZGVsYCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAiIiIKICAgICAgICByZXR1cm4gbnAucmVzaGFwZShzZWxmLm1vZGVsLnByZWRpY3QoWF9pbiksICgtMSwgMSkpCgogICAgZGVmIHRyYWluX3ZhbF9sb29wKHNlbGYsIFhfdHJhaW46IG5wLmFycmF5LCB5X3RyYWluOiBucC5hcnJheSwgWF92YWw6IG5wLmFycmF5LCB5X3ZhbDogbnAuYXJyYXkpIC0+IG5wLmFycmF5OgogICAgICAgICIiIgogICAgICAgIEltcGxlbWVudGF0aW9uIG9mIGEgdHJhaW4gYW5kIHZhbGlkYXRpb24gbG9vcCBmb3IgbW9kZWxzIHdpdGggc2tsZWFybi1saWtlIEFQSS4KICAgICAgICBTZWUgOm9iajpgfmVhc3lQaGVuby5tb2RlbC5fYmFzZV9tb2RlbC5CYXNlTW9kZWxgIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICIiIgogICAgICAgIHNlbGYubW9kZWwuZml0KFhfdHJhaW4sIG5wLnJhdmVsKHlfdHJhaW4pKQogICAgICAgIHJldHVybiBzZWxmLnByZWRpY3QoWF9pbj1YX3ZhbCkKPHxmaW1fc3VmZml4fD4KICAgIGZ1bmN0aW9uYWxpdGllcy4gU2VlIDpvYmo6YH5lYXN5UGhlbm8ubW9kZWwuX2Jhc2VfbW9kZWwuQmFzZU1vZGVsYCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCiAgICAqKkF0dHJpYnV0ZXMqKgoKPHxmaW1fZW5kfD4="]
["271b566f77db11c746927b9ffc1c174d0e03a6bd-5","271b566f77db11c746927b9ffc1c174d0e03a6bd","PHxmaW1fcHJlZml4fD4KZnJvbSBTZWdtZW50YXRpb25BbGdvcml0aG1zLkNCU01vVCBpbXBvcnQgQ0JTbW90CmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0IFBhcmFtZXRlckdyaWQKZnJvbSBUcmFqZWN0b3J5U2VnbWVudGF0aW9uIGltcG9ydCBUcmFqZWN0b3J5U2VnbWVudGF0aW9uCmltcG9ydCBTZWdtZW50YXRpb25FdmFsdWF0aW9uCmltcG9ydCBwYW5kYXMgYXMgcGQKZnJvbSBkYXRhYmFzZXMgaW1wb3J0IGxvYWRfZGF0YXNldHMKZnJvbSBiYXllc19vcHQuYmF5ZXNpYW5fb3B0aW1pemF0aW9uIGltcG9ydCBCYXllc2lhbk9wdGltaXphdGlvbgoKCmRhdGFzZXQgPSBsb2FkX2RhdGFzZXRzLkRhdGFFbnVtLkZJU0hJTkcKYWxnb3JpdGhtID0gbG9hZF9kYXRhc2V0cy5BbGdvRW51bS5DQlNNb1QKCmRhdGEgPSBsb2FkX2RhdGFzZXRzLmdldF9kYXRhKGRhdGFzZXQsYWxnb3JpdGhtKQoKZGZzID0gZGF0YVsnZGF0YSddCnBhcmFtZXRlcl9ncmlkID0gZGF0YVsncGFyYW1ldGVyX2dyaWQnXQpmaWxlX25hbWUgPSBkYXRhWydmaWxlX25hbWUnXQpsYWJlbCA9IGRhdGFbJ2xhYmVsJ10KCgpwcmludChmaWxlX25hbWUpCgphbGxfZGZzID0gW10KCgpyZXN1bHRzID0gW10KYmVzdF9wID0ge30KCmRlZiBvcHRpbXplX3Rlc3QoYXJlYSwgbWluX3RpbWUpOgogICAgaG0gPSAwCiAgICBmb3IgdGRmIGluIHRyYWluX2RmczoKICAgICAgICB0c19vYmogPSBUcmFqZWN0b3J5U2VnbWVudGF0aW9uKCkKICAgICAgICB0c19vYmoubG9hZF9kYXRhKGxhdD0nbGF0aXR1ZGUnLCBsb249J2xvbmdpdHVkZScsIHRpbWVfZGF0ZT0ndGltZScsCiAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHM9W2xhYmVsXSwgc2VwZXJhdG9yPSc7Jywgc3JjPXRkZikKICAgICAgICBzZWdtZW50X2luZGV4ZXMsIHNlZ21lbnRzID0gdHNfb2JqLnNlZ21lbnRCeUxhYmVsKGxhYmVsPWxhYmVsKQogICAgICAgIGdyb3VuZF90cnV0aCA9IFRyYWplY3RvcnlTZWdtZW50YXRpb24uZ2V0X3NlZ21lbnRfbGFiZWxzKHNlZ21lbnRfaW5kZXhlcykKICAgICAgICBzZWdtZW50X2luZGV4ZXMsIHNlZ21lbnRzID0gdHNfb2JqLnNlZ21lbnRfQ0JTTW9UKG1heF9kaXN0PU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmVhPWFyZWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fdGltZT1taW5fdGltZSozNjAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZV90b2xlcmFuY2U9MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlX3RvbGVyYW5jZT0wKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgIHByZWRpY3RlZCA9IFRyYWplY3RvcnlTZWdtZW50YXRpb24uZ2V0X3NlZ21lbnRfbGFiZWxzKHNlZ21lbnRfaW5kZXhlcykKICAgICAgICBobSArPSBTZWdtZW50YXRpb25FdmFsdWF0aW9uLmhhcm1vbmljX21lYW4oZ3JvdW5kX3RydXRoLCBwcmVkaWN0ZWQpCiAgICByZXR1cm4gaG0KPHxmaW1fZW5kfD4="]
["2f1e551542aad2a96b5ae1f2602eed21f044bc56-1","2f1e551542aad2a96b5ae1f2602eed21f044bc56","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgb3MKZnJvbSBQYXJzZXJzLlZDRiBpbXBvcnQgQ29sbGVjdGlvblZDRiwgUmVmZXJlbmNlR2Vub21lCmZyb20gUGFyc2Vycy5HRkYgaW1wb3J0IENvbGxlY3Rpb25HRkYKZnJvbSBCQ0JpbyBpbXBvcnQgR0ZGCgoKd29ya2RpciA9ICIvbWVkaWEvbWFoYWpyb2QvZDllNmU1ZWUtMWJmNy00ZGJhLTkzNGUtM2Y4OThkOTYxMWM4L0RhdGEvTEFOMnh4L2NvbWJpbmVkX3ZjZi9maWx0ZXJlZC8iCgpzYW1wbGVfc2V0X25hbWVzX2xpc3QgICA9ICAgWyMiUG1DREExXzNkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFQIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIlBtQ0RBMV9zdWIxXzNkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIlBtQ0RBMV82ZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBUF9zdWIxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIlBtQ0RBMV9zdWIxXzZkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIkExXzNkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIkExXzZkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIkEzR18zZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyJBSURfM2QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMiQUlEXzZkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0Kc2FtcGxlX3N1ZmZpeCA9ICJfYWRqdXN0ZWRfY2x1c3Rlcl9tdXRhdGlvbnMudmNmIgpyYWluZmFsbF9zdWJkaXIgPSAicmFpbmZhbGxfcGxvdC8iCgpyZWZlcmVuY2UgPSBSZWZlcmVuY2VHZW5vbWUoIi9ob21lL21haGFqcm9kL2dlbmV0aWNzL2Rlc2FtaW5hc2VzL2RhdGEvTEFOMjEwX3YwLjEwbS9MQU4yMTBfdjAuMTBtLmZhc3RhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleF9maWxlPSIvaG9tZS9tYWhhanJvZC9nZW5ldGljcy9kZXNhbWluYXNlcy9kYXRhL0xBTjIxMF92MC4xMG0vTEFOMjEwX3YwLjEwbS5pZHgiKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKcmVmZXJlbmNlLmZpbmRfZ2FwcygpCgo8fGZpbV9lbmR8Pg=="]
["d0671bc661540157e8f3c5f93351b3e3d0a9c768-3","d0671bc661540157e8f3c5f93351b3e3d0a9c768","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmZyb20gbmxnLnNuYXBzaG90IGltcG9ydCBzdG9yeV9nZW5lcmF0ZQoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIGludGVyZmFjZSgpOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249IiIiCgogICAgICAgIFRoaXMgc2NyaXB0IGdlbmVyYXRlcyBhIHNuYXBzaG90IHN0b3J5IGFib3V0IENPVklELTE5Lgo8fGZpbV9lbmR8Pg=="]
["1965cbf7f54a9433d64c240486f6c905b381bfbd-1","1965cbf7f54a9433d64c240486f6c905b381bfbd","PHxmaW1fcHJlZml4fD4KZnJvbSBza2xlYXJuLmRhdGFzZXRzIGltcG9ydCBsb2FkX2RpYWJldGVzCmZyb20gc2tsZWFybi5saW5lYXJfbW9kZWwgaW1wb3J0IExhc3NvCmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0IHRyYWluX3Rlc3Rfc3BsaXQKZnJvbSBza2xlYXJuIGltcG9ydCBtZXRyaWNzCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBzZWFib3JuIGFzIHNucwppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBvcwpmcm9tIHNjaXB5IGltcG9ydCBzdGF0cwoKb3MubWFrZWRpcnMoJ3Bsb3RzLycsIGV4aXN0X29rPVRydWUpCgojTG9hZGluZyB0aGUgZGF0YXNldCBmcm9tIHNrbGVhcm4KZGlhYmV0ZXMgPSBsb2FkX2RpYWJldGVzKCkKCmRpYWJldGVzX2RmID0gcGQuRGF0YUZyYW1lKGRhdGE9bnAuY19bZGlhYmV0ZXMuZGF0YSwgZGlhYmV0ZXMudGFyZ2V0XSwgY29sdW1ucz1kaWFiZXRlcy5mZWF0dXJlX25hbWVzICsgWyd0YXJnZXQnXSkKZGlhYmV0ZXNfZGYuY29sdW1ucyA9IFsnQWdlJywgJ1NleCcsICdCTUknLCAnQlAnLCAnbWFwJywgJ3RjJywgJ2xkbCcsICdoZGwnLCAndGNoJywgJ2dsdScsICdUYXJnZXQnXQoKCiNFeHBsb3JhdG9yeSBhbmFseXNpcyBvbiBkYXRhc2V0CmRpYWJldGVzX3VuYWx0ZXJlZCA9IHBkLnJlYWRfY3N2KCdkaWFiZXRlcy5kYXRhJywKICAgICAgICAgICAgICAgICAgICAgICAgICBzZXA9J1xzKycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyPTApCmRpYWJldGVzX3VuYWx0ZXJlZC5kZXNjcmliZSgpLnRvX2NzdigiRGlhYmV0ZXNfRGVzY3JpYmUuY3N2IikKCm9zLm1ha2VkaXJzKCdwbG90cycsIGV4aXN0X29rPVRydWUpCgpzbnMuc2V0KHN0eWxlPSdkYXJrZ3JpZCcsIHBhbGV0dGU9J2Nvb2x3YXJtJykKCiNQYWlycGxvdCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBzZXhlcwpzbnMucGFpcnBsb3QoZGlhYmV0ZXNfZGYsIGh1ZT0nU2V4JywgZGlhZ19raW5kPSdoaXN0JykKcGx0LnNhdmVmaWcoJ3Bsb3RzL2RpYWJldGVzX3BhaXJwbG90LnBuZycpCnBsdC5jbGYoKQoKI0hlYXRtYXAKZmlnLCBheCA9IHBsdC5zdWJwbG90cyhmaWdzaXplPSgxMiwxMikpCnNucy5oZWF0bWFwKGRpYWJldGVzX2RmLmNvcnIoKSwgYW5ub3Q9VHJ1ZSwgY21hcD0nUmRZbEduJykKYXguc2V0X3h0aWNrbGFiZWxzKGRpYWJldGVzX2RmLmNvbHVtbnMsIHJvdGF0aW9uPTQ1KQpheC5zZXRfeXRpY2tsYWJlbHMoZGlhYmV0ZXNfZGYuY29sdW1ucywgcm90YXRpb249NDUpCnBsdC50aXRsZSgnSGVhdG1hcCBmb3IgRGlhYmV0ZXMgVmFyaWFibGVzJykKcGx0LnNhdmVmaWcoJ3Bsb3RzL2RpYWJldGVzX2hlYXRtYXAucG5nJykKCiNCb3hwbG90cyBmb3IgZGlzdHJpYnV0aW9ucyBvZiBmZWF0dXJlcwpmaWcsIGF4ZXMgPSBwbHQuc3VicGxvdHMobmNvbHM9NSwgbnJvd3M9MiwgZmlnc2l6ZT0oMTAsIDUpKQpmb3IgaW5keCwgY29sIGluIGVudW1lcmF0ZShkaWFiZXRlc191bmFsdGVyZWQuY29sdW1ucyk6CiAgICBvdXRsaWVycyA9IGRpY3QobWFya2VyZmFjZWNvbG9yPSdyJywgbWFya2VyPSdEJykKICAgIGlmIGNvbCAhPSAnU2V4JzoKICAgICAgICBpZiBpbmR4ID09IDA6CiAgICAgICAgICAgIGF4ZXNbMF1baW5keF0uYm94cGxvdChkaWFiZXRlc191bmFsdGVyZWRbY29sXSwgZmxpZXJwcm9wcz1vdXRsaWVycykKICAgICAgICAgICAgYXhlc1swXVtpbmR4XS5zZXRfeWxhYmVsKGNvbCkKICAgICAgICBlbGlmIGluZHggPD0gNSBhbmQgaW5keCA+PTI6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgYXhlc1swXVs2LWluZHhdLmJveHBsb3QoZGlhYmV0ZXNfdW5hbHRlcmVkW2NvbF0sIGZsaWVycHJvcHM9b3V0bGllcnMpCiAgICAgICAgICAgIGF4ZXNbMF1bNi1pbmR4XS5zZXRfeWxhYmVsKGNvbCkKPHxmaW1fZW5kfD4="]
["326a66a135140cfe73473ffc65bdc150640ba62b-2","326a66a135140cfe73473ffc65bdc150640ba62b","PHxmaW1fcHJlZml4fD4KJycnIE1vZGlmaWVkIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS95b25rc2hpL1NQQUlSX3B5dG9yY2ggJycnCgppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBtYXRwbG90bGliLmdyaWRzcGVjIGFzIGdyaWRzcGVjCmltcG9ydCBtYXRwbG90bGliLnBhdGNoZXMgYXMgcGF0Y2hlcwpmcm9tIGN5Y2xlciBpbXBvcnQgY3ljbGVyCmZyb20gbWF0cGxvdGxpYi5jb2xsZWN0aW9ucyBpbXBvcnQgUGF0Y2hDb2xsZWN0aW9uCmltcG9ydCB0b3JjaAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRpbWUKaW1wb3J0IG1hdGgKCmZyb20gZ21haXIuY29uZmlnIGltcG9ydCBjb25maWcgYXMgY2ZnCgpkZWYgcGxvdF90b3JjaF9pbWFnZV9pbl9weXBsb3QoIG91dDp0b3JjaC5UZW5zb3IsIGlucDp0b3JjaC5UZW5zb3IgPSBOb25lLCBiYXRjaF9uPTApOgogICAgJycnIEZvciB2aXN1YWxpemluZyB0b3JjaCBpbWFnZXMgaW4gbWF0cGxvdGxpYiAnJycKICAgIHRvcmNoX2ltZyA9IG91dFtiYXRjaF9uLCAuLi5dCiAgICBucF9pbWcgPSB0b3JjaF9pbWcuZGV0YWNoKCkubnVtcHkoKQogICAgbnBfaW1nID0gbnAubW92ZWF4aXMobnBfaW1nLFswLDEsMl0sIFsyLDAsMV0pICMgW0MsIEgsIFddIC0+IFtILCBXLCBDXQogICAgbnBfaW1nID0gbnAuc3F1ZWV6ZShucF9pbWcpCiAgICBwbHQuaW1zaG93KG5wX2ltZykKICAgIHBsdC50aXRsZSgnb3V0X2ltYWdlJykKICAgIHBsdC5zaG93KCkKCiAgICBpZiBpbnAgaXMgbm90IE5vbmU6CiAgICAgICAgdG9yY2hfaW1nID0gaW5wW2JhdGNoX24sIC4uLl0KICAgICAgICBucF9pbWcgPSB0b3JjaF9pbWcuZGV0YWNoKCkubnVtcHkoKQogICAgICAgIG5wX2ltZyA9IG5wLm1vdmVheGlzKG5wX2ltZyxbMCwxLDJdLCBbMiwwLDFdKSAjIFtDLCBILCBXXSAtPiBbSCwgVywgQ10KICAgICAgICBwbHQuaW1zaG93KG5wX2ltZykKICAgICAgICBwbHQuc2hvdygpCgpkZWYgYmVuY2htYXJrX2luaXQoKToKICAgIGdsb2JhbCBCRU5DSE1BUktfSU5JVF9USU1FCiAgICBCRU5DSE1BUktfSU5JVF9USU1FID0gdGltZS50aW1lKCkKCmRlZiBiZW5jaG1hcmsobmFtZT0nJywgcHJpbnRfYmVuY2htYXJrPVRydWUpOgogICAgZ2xvYmFsIEJFTkNITUFSS19JTklUX1RJTUUKICAgIG5vdyA9IHRpbWUudGltZSgpCiAgICBkaWZmID0gbm93IC0gQkVOQ0hNQVJLX0lOSVRfVElNRQogICAgQkVOQ0hNQVJLX0lOSVRfVElNRSA9IG5vdwogICAgaWYgcHJpbnRfYmVuY2htYXJrOiBwcmludCgne306IHs6LjRmfSAnLmZvcm1hdChuYW1lLCBkaWZmKSkKICAgIHJldHVybiBkaWZmCgpkZWYgdG9yY2gybnB5KHQ6dG9yY2guVGVuc29yLCByZXNoYXBlPUZhbHNlKToKICAgICcnJwogICAgQ29udmVydHMgYSB0b3JjaCBncmFwaCBub2RlIHRlbnNvciAoY3VkYSBvciBjcHUpIHRvIG51bXB5IGFycmF5CiAgICA6cGFyYW0gdDoKICAgIDpyZXR1cm46CiAgICAnJycKICAgIHNoYXBlID0gdC5zaGFwZVsxOl0KICAgICNwcmludCgidC5zaGFwZSA9IHt9Ii5mb3JtYXQodC5zaGFwZSkpCiAgICBncmlkX3NpemUgPSBpbnQobWF0aC5zcXJ0KHQuc2hhcGVbMF0gLyBjZmcuYmF0Y2hfc2l6ZSkgKyAxZS02KQogICAgaWYgcmVzaGFwZToKICAgICAgICByZXR1cm4gdC5jcHUoKS52aWV3KGNmZy5iYXRjaF9zaXplLCBncmlkX3NpemUsIGdyaWRfc2l6ZSwgKnNoYXBlKS5kZXRhY2goKS5zcXVlZXplKCkubnVtcHkoKQogICAgcmV0dXJuIHQuY3B1KCkuZGV0YWNoKCkubnVtcHkoKQoKZGVmIHBsb3RfcmVuZGVyX2NvbXBvbmVudHMob2JqX3ZlYywgb2JqX3Byb2IsIGRlcHRoLCBib3VuZGluZ19ib3gsIGlucHV0X2ltYWdlLCBvdXRwdXRfaW1hZ2UsIHdyaXRlciwgc3RlcCk6CgogICAgJycnIFBsb3RzIGVhY2ggY29tcG9uZW50IHByaW9yIHRvIHJlbmRlcmluZyAnJycKICAgIG51bV9jb2xvcl9jaGFubmVscyA9IGNmZy5pbnB1dF9pbWFnZV9zaGFwZVswXQogICAgCiAgICAjIGNoZWNrIGlmIGltYWdlcyBpbiBhIGJhdGNoIGlzIHNpbWlsYXIKICAgIGJhdGNoX3NpemUgPSBvYmpfdmVjLnNpemUoMCkKICAgIG51bV9yb3dzID0gbWluKDUsIGJhdGNoX3NpemUpCiAgICBudW1fY29scyA9IDcgKyAxMAogICAgCiAgICBncyA9IGdyaWRzcGVjLkdyaWRTcGVjKG51bV9yb3dzLCBudW1fY29scykKICAgIGZpZyA9IHBsdC5maWd1cmUoZmlnc2l6ZSA9ICg0NSwgMjApKQogICAgZmlnLnRpZ2h0X2xheW91dCgpCiAgICBwbHQudGlnaHRfbGF5b3V0KCkKICAgIAogICAgb2JqX3ZlYyA9IG9ial92ZWMucGVybXV0ZSgwLDIsMywxKS5jb250aWd1b3VzKCkKICAgIG9ial92ZWMgPSB0b3JjaDJucHkob2JqX3ZlYywgcmVzaGFwZT1UcnVlKQogICAgb2JqX3Byb2IgPSB0b3JjaDJucHkob2JqX3Byb2IsIHJlc2hhcGU9VHJ1ZSkKICAgIGRlcHRoID0gdG9yY2gybnB5KGRlcHRoLCByZXNoYXBlPVRydWUpCiAgICBib3VuZGluZ19ib3ggPSB0b3JjaDJucHkoYm91bmRpbmdfYm94LCByZXNoYXBlPVRydWUpCiAgICAKICAgIGZvciBpIGluIHJhbmdlKG51bV9yb3dzKToKICAgICAgICBjYXRfb2JqX3ZlYyA9IG9ial92ZWNbaSwgLi4uXQogICAgICAgIGNhdF9vYmpfdmVjID0gbnAuY29uY2F0ZW5hdGUoY2F0X29ial92ZWMsIGF4aXM9LTMpICMgY29uY2F0IGgKICAgICAgICBjYXRfb2JqX3ZlYyA9IG5wLmNvbmNhdGVuYXRlKGNhdF9vYmpfdmVjLCBheGlzPS0yKSAjIGNvbmNhdCB3CiAgICAgICAgCiAgICAgICAgaW5faW1nID0gaW5wdXRfaW1hZ2VbaSwuLi5dLnBlcm11dGUoMSwyLDApLmNwdSgpLmRldGFjaCgpLnNxdWVlemUoKS5udW1weSgpCiAgICAgICAgb3V0X2ltZyA9IG91dHB1dF9pbWFnZVtpLC4uLl0ucGVybXV0ZSgxLDIsMCkuY3B1KCkuZGV0YWNoKCkuc3F1ZWV6ZSgpLm51bXB5KCkKICAgICAgICAKICAgICAgICAjIEJvdW5kaW5nIEJveAogICAgICAgIGJib3ggPSBib3VuZGluZ19ib3hbaSwgLi4uXSAqIGNmZy5pbnB1dF9pbWFnZV9zaGFwZVstMl0gIyBpbWFnZSBzaXplCiAgICAgICAgcHJlc2VuY2UgPSBvYmpfcHJvYltpLCAuLi5dCiAgICAgICAgX3Bsb3RfYm91bmRpbmdfYm94ZXMoJ2lucHV0IGltYWdlJywgYmJveCwgaW5faW1nLCBwcmVzZW5jZSwgIGdzW2ksIDBdLCBmaWcpCiAgICAgICAgX3Bsb3RfYm91bmRpbmdfYm94ZXMoJ291dHB1dCBpbWFnZScsIGJib3gsIG91dF9pbWcsIHByZXNlbmNlLCBnc1tpLCAxXSwgZmlnKQogICAgICAgIAogICAgICAgICMgQXR0ciBpbWFnZQogICAgICAgIG9iaiA9IGNhdF9vYmpfdmVjWy4uLiwgOm51bV9jb2xvcl9jaGFubmVsc10KICAgICAgICBfcGxvdF9pbWFnZSgncmVuZGVyZWRfb2JqJywgb2JqLCBnc1tpLCAyXSwgZmlnKQogICAgCiAgICAgICAgIyBBbHBoYSBDaGFubmVsIChoZWF0bWFwKQogICAgICAgIGFscGhhID0gY2F0X29ial92ZWNbLi4uLCBudW1fY29sb3JfY2hhbm5lbHNdCiAgICAgICAgX3Bsb3RfaGVhdG1hcCgnYWxwaGEnLCBhbHBoYSwgZ3NbaSwgM10sIGZpZywgY21hcD0nc3ByaW5nJykKICAgIAogICAgICAgICMgSW1wb3J0YW5jZSAoaGVhdG1hcCkKICAgICAgICBpbXBvID0gY2F0X29ial92ZWNbLi4uLCBudW1fY29sb3JfY2hhbm5lbHMrMV0KICAgICAgICBfcGxvdF9oZWF0bWFwKCdpbXBvcnRhbmNlJywgaW1wbywgZ3NbaSwgNF0sIGZpZywgY21hcD0nc3VtbWVyJykKICAgIAogICAgICAgICMgZGVwdGggKGhlYXRtYXApCiAgICAgICAgZGVwID0gZGVwdGhbaSwuLi5dCiAgICAgICAgX3Bsb3RfaGVhdG1hcCgnZGVwdGgnLCBkZXAsIGdzW2ksIDVdLCBmaWcsIGNtYXA9J2F1dHVtbicpCiAgICAgICAgCiAgICAgICAgIyBQcmVzZW5jZSAoaGVhdG1hcCkKICAgICAgICBfcGxvdF9oZWF0bWFwKCdwcmVzZW5jZScsIHByZXNlbmNlLCBnc1tpLCA2XSwgZmlnLCBjbWFwPSd3aW50ZXInKQogICAgICAgIAogICAgICAgIEgsIFcgPSBwcmVzZW5jZS5zaGFwZQogICAgICAgIGluZGV4ID0gbnAuYXJnc29ydChwcmVzZW5jZS5yZXNoYXBlKC0xKSlbOjotMV0KICAgICAgICBmb3IgaiBpbiByYW5nZShudW1fY29scyAtIDcpOgogICAgICAgICAgICBvYmpfaiA9IG9ial92ZWNbaSwgaW5kZXhbal0gLy8gVywgaW5kZXhbal0gJSBXLCA6LCA6LCA6bnVtX2NvbG9yX2NoYW5uZWxzXQogICAgICAgICAgICBhbHBoYV9qID0gb2JqX3ZlY1tpLCBpbmRleFtqXSAvLyBXLCBpbmRleFtqXSAlIFcsIDosIDosIG51bV9jb2xvcl9jaGFubmVsczpudW1fY29sb3JfY2hhbm5lbHMrMV0KICAgICAgICAgICAgb2JqX2ogPSBvYmpfaiAqIGFscGhhX2oKICAgICAgICAgICAgX3Bsb3RfaW1hZ2UoJ3JlbmRlcmVkX29ial97fScuZm9ybWF0KGopLCBvYmpfaiwgZ3NbaSwgaiArIDddLCBmaWcpCiAgICAKICAgIAogICAgd3JpdGVyLmFkZF9maWd1cmUoJ3JlbmRlcmVyX2FuYWx5c2lzJy5mb3JtYXQoaSksIGZpZywgc3RlcCkKICAgIApkZWYgcGxvdF9pbmZlcl9yZW5kZXJfY29tcG9uZW50cyhpbnB1dF9pbWFnZSwgZ3RfYmJveCwgb2JqX3Byb2IsIHByZWRfY2xzLCBwcmVkX2Jib3gsIG91dHB1dF9pbWFnZSwgd3JpdGVyLCBzdGVwKToKCiAgICAnJycgUGxvdHMgZWFjaCBjb21wb25lbnQgcHJpb3IgdG8gcmVuZGVyaW5nICcnJwogICAgaW5wdXRfaW1hZ2UgPSBpbnB1dF9pbWFnZVswLC4uLl0ucGVybXV0ZSgxLDIsMCkuY3B1KCkuZGV0YWNoKCkuc3F1ZWV6ZSgpLm51bXB5KCkKICAgIG91dHB1dF9pbWFnZSA9IG91dHB1dF9pbWFnZVswLC4uLl0ucGVybXV0ZSgxLDIsMCkuY3B1KCkuZGV0YWNoKCkuc3F1ZWV6ZSgpLm51bXB5KCkKICAgIAogICAgIyBbeCwgeSwgdywgaCwgYywgY29uZl0KICAgIGd0X2Jib3ggPSBndF9iYm94WzBdCiAgICBndF9iYm94ID0gZ3RfYmJveFtndF9iYm94WzosIDBdID49IDBdLmNwdSgpLmRldGFjaCgpLm51bXB5KCkKICAgIGd0X2Jib3ggPSBucC5jb25jYXRlbmF0ZShbZ3RfYmJveCwgbnAub25lcyhbZ3RfYmJveC5zaGFwZVswXSwgMV0sIGR0eXBlID0gbnAuZmxvYXQpXSwgYXhpcyA9IDEpCiAgICAjIHByaW50KGd0X2Jib3guc2hhcGUpCiAgICAKICAgIG9yaV9vYmpfcHJvYiA9IG9ial9wcm9iWzBdLmNwdSgpLmRldGFjaCgpLm51bXB5KCkKICAgIG9ial9wcm9iID0gb3JpX29ial9wcm9iLnJlc2hhcGUoLTEpCiAgICAKICAgIHByZWRfY29uZiwgcHJlZF9jbHMgPSB0b3JjaC5tYXgocHJlZF9jbHNbMF0sIGRpbSA9IC0xKQogICAgcHJlZF9jb25mID0gcHJlZF9jb25mLnZpZXcoLTEsIDEpLmNwdSgpLmRldGFjaCgpLm51bXB5KClbb2JqX3Byb2IgPj0gMC41XQogICAgcHJlZF9jbHMgPSBwcmVkX2Nscy52aWV3KC0xLCAxKS5jcHUoKS5kZXRhY2goKS5udW1weSgpW29ial9wcm9iID49IDAuNV0KICAgIAogICAgcHJlZF9iYm94ID0gcHJlZF9iYm94WzBdLnZpZXcoLTEsIDQpLmNwdSgpLmRldGFjaCgpLm51bXB5KClbb2JqX3Byb2IgPj0gMC41XQogICAgcHJlZF9iYm94ICo9IGNmZy5pbnB1dF9pbWFnZV9zaGFwZVsxXQogICAgcHJlZF9iYm94WzosIDBdIC09IHByZWRfYmJveFs6LCAyXSAvIDIKICAgIHByZWRfYmJveFs6LCAxXSAtPSBwcmVkX2Jib3hbOiwgM10gLyAyCiAgICAjIHByaW50KHByZWRfYmJveC5zaGFwZSkKICAgICMgcHJpbnQocHJlZF9jb25mLnNoYXBlKQogICAgIyBzcHJpbnQocHJlZF9jbHMuc2hhcGUpCiAgICBwcmVkX2Jib3ggPSBucC5jb25jYXRlbmF0ZShbcHJlZF9iYm94LCBwcmVkX2NscywgcHJlZF9jb25mXSwgYXhpcyA9IDEpCiAgICAKICAgIGdzID0gZ3JpZHNwZWMuR3JpZFNwZWMoMSwgMykKICAgIGZpZyA9IHBsdC5maWd1cmUoZmlnc2l6ZSA9ICgxNSwxMCkpCiAgICBmaWcudGlnaHRfbGF5b3V0KCkKICAgIHBsdC50aWdodF9sYXlvdXQoKQoKCiAgICAjIEJvdW5kaW5nIEJveAogICAgX3Bsb3RfYm91bmRpbmdfYm94ZXNfd19jKCd4JywgZ3RfYmJveCwgaW5wdXRfaW1hZ2UsIGdzWzAsIDBdLCBmaWcpCgogICAgX3Bsb3RfYm91bmRpbmdfYm94ZXNfd19jKCd4X2hhdCcsIHByZWRfYmJveCwgb3V0cHV0X2ltYWdlLCBnc1swLCAxXSwgZmlnKQogICAgCiAgICAjIFByZXNlbmNlIChoZWF0bWFwKQogICAgX3Bsb3RfaGVhdG1hcCgnb2JqX3Byb2InLCBvcmlfb2JqX3Byb2IsIGdzWzAsIDJdLCBmaWcsIGNtYXA9J3dpbnRlcicpCgogICAgd3JpdGVyLmFkZF9maWd1cmUoJ2luZmVyX3JlbmRlcmVyX2FuYWx5c2lzJywgZmlnLCBzdGVwKQogICAgCiAgICAKICAgICAgICAKZGVmIHBsb3RfY3JvcHBlZF9pbnB1dF9pbWFnZXMoY3JvcHBlZF9pbnB1dF9pbWFnZXMsIHdyaXRlciwgc3RlcCk6CiAgICBpbnB1dF9pbWdzID0gY3JvcHBlZF9pbnB1dF9pbWFnZXMucGVybXV0ZSgwLDQsNSwgMiwzLDEsKS5jcHUoKS5zcXVlZXplKCkuZGV0YWNoKCkubnVtcHkoKQogICAgIyBucC5zd2FwYXhlcyhpbnB1dF9pbWdzLCApCiAgICBpbnB1dF9pbWcgPSBpbnB1dF9pbWdzWzAsLi4uXQogICAgSCA9IGlucHV0X2ltZy5zaGFwZVswXQogICAgVyA9IGlucHV0X2ltZy5zaGFwZVsxXQoKICAgICMgYWRkaW5nIGJvcmRlciB0byBjcm9wcGVkIGltYWdlcwogICAgcHhfaCA9IHB4X3cgPSBpbnB1dF9pbWcuc2hhcGVbLTFdICsgMgogICAgaW5wdXRfaW1nX3dpdGhfYm9yZGVyID0gbnAub25lcyhbSCwgVywgcHhfaCwgcHhfd10pCiAgICBpbnB1dF9pbWdfd2l0aF9ib3JkZXJbLi4uLCAxOi0xLCAxOi0xXSA9IGlucHV0X2ltZwoKCiAgICBpbWcgPSBucC5jb25jYXRlbmF0ZShpbnB1dF9pbWdfd2l0aF9ib3JkZXIsIGF4aXM9LTIpICMgY29uY2F0IGgKICAgIGltZyA9IG5wLmNvbmNhdGVuYXRlKGltZywgYXhpcz0tMSkgIyBjb25jYXQgdwoKICAgIGZpZywgYXggPSBwbHQuc3VicGxvdHMoZmlnc2l6ZT0oMTAsIDEwKSkKICAgIGltID0gYXguaW1zaG93KGltZywgY21hcD0nZ3JheScgLCB2bWluPTAsIHZtYXg9MSkKCiAgICBpZiBjZmcuSVNfTE9DQUw6CiAgICAgICAgcGx0LnNob3coKQogICAgICAgIHByaW50KCdoZWxsbyB3b3JsZCcpCiAgICBlbHNlOgogICAgICAgIHdyaXRlci5hZGRfZmlndXJlKCdkZWJ1Z19jcm9wcGVkX2lucHV0X2ltYWdlcycsIGZpZywgc3RlcCkKCmRlZiBwbG90X29iamV0X2F0dHJfbGF0ZW50X3JlcHJlc2VudGF0aW9uKHpfYXR0ciwgd3JpdGVyLCBzdGVwLCB0aXRsZT0nel9hdHRyL2hlYXRtYXAnKToKICAgIHpfYXR0ciA9IHpfYXR0clswLCAuLi5dCiAgICB6X2F0dHIgPSB0b3JjaDJucHkoel9hdHRyKQoKICAgIGdzID0gZ3JpZHNwZWMuR3JpZFNwZWMoMSwgMykKICAgIGZpZyA9IHBsdC5maWd1cmUoZmlnc2l6ZSA9ICg3LDIuNSkpCiAgICBmaWcudGlnaHRfbGF5b3V0KCkKICAgIHBsdC50aWdodF9sYXlvdXQoKQoKICAgIHpfYXR0cl9tYXggPSB6X2F0dHIubWF4KGF4aXM9MCkKICAgIF9wbG90X2hlYXRtYXAoJ01heCcsIHpfYXR0cl9tYXgsIGdzWzAsIDBdLCBmaWcsIGNtYXA9J3NwcmluZycpCgogICAgel9hdHRyX21lYW4gPSB6X2F0dHIubWVhbihheGlzPTApCiAgICBfcGxvdF9oZWF0bWFwKCdNZWFuJywgel9hdHRyX21lYW4sIGdzWzAsIDFdLCBmaWcsIGNtYXA9J3NwcmluZycpCgogICAgel9hdHRyX21pbiA9IHpfYXR0ci5taW4oYXhpcz0wKQogICAgX3Bsb3RfaGVhdG1hcCgnTWluJywgel9hdHRyX21pbiwgZ3NbMCwgMl0sIGZpZywgY21hcD0nc3ByaW5nJykKCiAgICBpZiBjZmcuSVNfTE9DQUw6CiAgICAgICAgcGx0LnNob3coKQogICAgICAgIHByaW50KCdoZWxsbyB3b3JsZCcpCiAgICBlbHNlOgogICAgICAgIHdyaXRlci5hZGRfZmlndXJlKHRpdGxlLCBmaWcsIHN0ZXApCgoKZGVmIF9wbG90X2hlYXRtYXAodGl0bGUsIGRhdGEsIGdyaWRzcGVjLCBmaWcsIGNtYXAsIHZtaW49MCwgdm1heD0xKToKICAgIGF4ID0gZmlnLmFkZF9zdWJwbG90KGdyaWRzcGVjKQogICAgaW0gPSBheC5pbXNob3coZGF0YSwgY21hcD1jbWFwKQogICAgIyBEaXNhYmxlIGF4aXMKICAgIGF4LnNldF94dGlja3MoW10pCiAgICBheC5zZXRfeXRpY2tzKFtdKQogICAgYXguc2V0X3RpdGxlKHRpdGxlKQogICAgZmlnLmNvbG9yYmFyKGltLCBheD1heCwgZnJhY3Rpb249MC4wMywgcGFkPTAuMDQpCgpkZWYgX3Bsb3RfaW1hZ2UodGl0bGUsIGRhdGEsIGdyaWRzcGVjLCBmaWcpOgogICAgYXggPSBmaWcuYWRkX3N1YnBsb3QoZ3JpZHNwZWMpCiAgICBpbSA9IGF4Lmltc2hvdyhkYXRhLCBjbWFwPSdncmF5JyAsIHZtaW49MCwgdm1heD0xKSAjIFNwZWNpZmljIHRvIHRoZSBNTklTVCBkYXRhc2V0CiAgICAjIERpc2FibGUgYXhpcwogICAgYXguc2V0X3h0aWNrcyhbXSkKICAgIGF4LnNldF95dGlja3MoW10pCiAgICBpZiB0aXRsZToKICAgICAgICBheC5zZXRfdGl0bGUodGl0bGUpCgpkZWYgX3Bsb3RfYm91bmRpbmdfYm94ZXModGl0bGUsIGJib3gsIG9yaWdpbmFsX2ltYWdlLCB6X3ByZXMsIGdyaWRzcGVjLCBmaWcpOgoKICAgIGF4ID0gZmlnLmFkZF9zdWJwbG90KGdyaWRzcGVjKQogICAgYXguaW1zaG93KG9yaWdpbmFsX2ltYWdlLCBjbWFwPSdncmF5Jywgdm1pbj0wLCB2bWF4PTEpCiAgICAjcHRjaHMgPSBbXQogICAgSCwgVywgXyA9IGJib3guc2hhcGUKICAgIGZvciBpIGluIHJhbmdlKEgpOgogICAgICAgIGZvciBqIGluIHJhbmdlKFcpOgogICAgICAgICAgICB4LCB5LCB3LCBoID0gYmJveFtpLCBqXQogICAgICAgICAgICBpZiB6X3ByZXNbaSwgal0gPCAwLjU6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBwcmVzID0gbnAuY2xpcCh6X3ByZXNbaSwgal0sIDAuNSwgMSkKICAgICAgICAgICAgIyBib3JkZXJfY29sb3IgPSAoMSwwLDAscHJlcykgaWYgcHJlcyA+IDAuNSBlbHNlICgwLDAsMSwgcHJlcykjIHJlZCBib3ggaWYgPiAwLjUsIG90aGVyd2lzZSBibHVlCiAgICAgICAgICAgIGJvcmRlcl9jb2xvciA9ICgxLDAsMCxwcmVzKQogICAgICAgICAgICAjIEdyZWVuIGJveDogZ3JvdW5kIHRydXRoLCByZWQgYm94OiBpbmZlcnJlbmNlLCBibHVlIGJveDogZGlzYWJsZWQgaW5mZXJyZW5jZQoKICAgICAgICAgICAgeCAtPSB3LzIKICAgICAgICAgICAgeSAtPSBoLzIKICAgICAgICAgICAgcGF0Y2ggPSBwYXRjaGVzLlJlY3RhbmdsZShbeCx5XSwgdywgaCwgZmFjZWNvbG9yPSdub25lJywgZWRnZWNvbG9yPWJvcmRlcl9jb2xvciwgbGluZXdpZHRoPTEpCiAgICAgICAgICAgIGF4LmFkZF9wYXRjaChwYXRjaCkKCiAgICAjIGF4LmFkZF9jb2xsZWN0aW9uKFBhdGNoQ29sbGVjdGlvbihwdGNocywgZmFjZWNvbG9ycz0nbm9uZScsIGVkZ2Vjb2xvcnM9J3InLCBsaW5ld2lkdGhzPTEpKQogICAgYXguc2V0X3h0aWNrcyhbXSkKICAgIGF4LnNldF95dGlja3MoW10pCiAgICBheC5zZXRfdGl0bGUodGl0bGUpCgpkZWYgX3Bsb3RfYm91bmRpbmdfYm94ZXNfd19jKHRpdGxlLCBiYm94LCBvcmlnaW5hbF9pbWFnZSwgZ3JpZHNwZWMsIGZpZyk6CgogICAgYXggPSBmaWcuYWRkX3N1YnBsb3QoZ3JpZHNwZWMpCiAgICBheC5pbXNob3cob3JpZ2luYWxfaW1hZ2UsIGNtYXA9J2dyYXknLCB2bWluPTAsIHZtYXg9MSkKICAgIAogICAgbnVtLCBfID0gYmJveC5zaGFwZQogICAgZm9yIGkgaW4gcmFuZ2UobnVtKToKICAgICAgICB4LCB5LCB3LCBoLCBjLCBjb25mID0gYmJveFtpXQogICAgICAgIGJvcmRlcl9jb2xvciA9ICgxLDAsMCxjb25mKQoKICAgICAgICBwYXRjaCA9IHBhdGNoZXMuUmVjdGFuZ2xlKFt4LCB5XSwgdywgaCwgZmFjZWNvbG9yPSdub25lJywgZWRnZWNvbG9yPWJvcmRlcl9jb2xvciwgbGluZXdpZHRoPTEpCiAgICAgICAgYXguYWRkX3BhdGNoKHBhdGNoKQogICAgICAgIAogICAgICAgIHBhdGNoID0gcGF0Y2hlcy5SZWN0YW5nbGUoW3gsIHktM10sIHcsIDMsIGZhY2Vjb2xvcj0oMSwxLDEsMSkpCiAgICAgICAgYXguYWRkX3BhdGNoKHBhdGNoKQogICAgICAgIAogICAgICAgIGF4LnRleHQoeCwgeSwgJ3t9Jy5mb3JtYXQoaW50KGMgKyAwLjAxKSksIAogICAgICAgICAgICBmb250c2l6ZT02LAogICAgICAgICAgICAjIHN0eWxlPSdpdGFsaWMnLAogICAgICAgICAgICAjIGJib3g9eydmYWNlY29sb3InOiAnd2hpdGUnLCAnYWxwaGEnOiBjb25mLCAncGFkJzogKDAsMCwyLDApfQogICAgICAgICAgICApCiAgICAgICAgCgogICAgIyBheC5hZGRfY29sbGVjdGlvbihQYXRjaENvbGxlY3Rpb24ocHRjaHMsIGZhY2Vjb2xvcnM9J25vbmUnLCBlZGdlY29sb3JzPSdyJywgbGluZXdpZHRocz0xKSkKICAgIGF4LnNldF94dGlja3MoW10pCiAgICBheC5zZXRfeXRpY2tzKFtdKQogICAgYXguc2V0X3RpdGxlKHRpdGxlKQoKCmRlZiBkZWNvZGVyX291dHB1dF9ncmFkX2hvb2soZ3JhZCwgd3JpdGVyLCBzdGVwKToKICAgIGlmIHN0ZXAgJSAxMCAhPSAwOgogICAgICAgIHJldHVybgogICAgb2JqX3B4ID0gY2ZnLk9CSkVDVF9TSEFQRVswXQogICAgZ3JhZCA9IGdyYWQudmlldyhjZmcuYmF0Y2hfc2l6ZSwgR1JJRF9TSVpFLCBHUklEX1NJWkUsIG9ial9weCwgb2JqX3B4LCAyKS5jcHUoKS5kZXRhY2goKS5udW1weSgpCiAgICBncmFkID0gZ3JhZFswLCAuLi5dCiAgICBvYmpfdmVjID0gbnAuY29uY2F0ZW5hdGUoZ3JhZCwgYXhpcz0tMykgIyBjb25jYXQgaAogICAgb2JqX3ZlYyA9IG5wLmNvbmNhdGVuYXRlKG9ial92ZWMsIGF4aXM9LTIpICMgY29uY2F0IHcKICAgIGltZyA9IG9ial92ZWNbLi4uLDBdCgogICAgZmlnLCBheCA9IHBsdC5zdWJwbG90cyhmaWdzaXplPSgxMCwgMTApKQogICAgaW0gPSBheC5pbXNob3coaW1nLCB2bWluPS0xZS00LCB2bWF4PTFlLTQpCiAgICBwbHQudGl0bGUoJ2dyYWRpZW50IG9mIGRlY29kZXInKQogICAgZmlnLmNvbG9yYmFyKGltLCBheD1heCwgZnJhY3Rpb249MC4wMywgcGFkPTAuMDQpCgogICAgaWYgY2ZnLklTX0xPQ0FMOgogICAgICAgIHBsdC5zaG93KCkKICAgICAgICBwcmludCgnJykKICAgIGVsc2U6CiAgICAgICAgd3JpdGVyLmFkZF9maWd1cmUoJ2dyYWRfdmlzdWFsaXphdGlvbi9kZWNvZGVyX291dCcsIGZpZywgc3RlcCkKCmRlZiB6X2F0dHJfZ3JhZF9ob29rKGdyYWQsIHdyaXRlciwgc3RlcCk6CiAgICBpZiBzdGVwICUgNTAgIT0gMDoKICAgICAgICByZXR1cm4KICAgICMgZ3JhZCA9IGdyYWQudmlldygyLCBjZmcuTl9BVFRSSUJVVEVTLCAxMSwgMTEsIDIpLnNxdWVlemUoKS5kZXRhY2goKS5udW1weSgpCiAgICB6X2F0dHJfZ3JhZCA9IHRvcmNoMm5weShncmFkWzAsIC4uLl0pCgogICAgZ3MgPSBncmlkc3BlYy5HcmlkU3BlYygxLCAzKQogICAgZmlnID0gcGx0LmZpZ3VyZShmaWdzaXplID0gKDcsMi41KSkKICAgIGZpZy50aWdodF9sYXlvdXQoKQogICAgcGx0LnRpZ2h0X2xheW91dCgpCgogICAgel9hdHRyX21heCA9IHpfYXR0cl9ncmFkLm1heChheGlzPTApCiAgICBfcGxvdF9oZWF0bWFwKCdNYXgnLCB6X2F0dHJfbWF4LCBnc1swLCAwXSwgZmlnLCBjbWFwPSdzcHJpbmcnKQoKICAgIHpfYXR0cl9tZWFuID0gel9hdHRyX2dyYWQubWVhbihheGlzPTApCiAgICBfcGxvdF9oZWF0bWFwKCdNZWFuJywgel9hdHRyX21lYW4sIGdzWzAsIDFdLCBmaWcsIGNtYXA9J3NwcmluZycpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICB6X2F0dHJfbWluID0gel9hdHRyX2dyYWQubWluKGF4aXM9MCkKICAgIF9wbG90X2hlYXRtYXAoJ01pbicsIHpfYXR0cl9taW4sIGdzWzAsIDJdLCBmaWcsIGNtYXA9J3NwcmluZycpCgo8fGZpbV9lbmR8Pg=="]
["32a78f2d06ea57cbd3b234794415e990a5b7dbd9-1","32a78f2d06ea57cbd3b234794415e990a5b7dbd9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhdGhsaWIKaW1wb3J0IHJlCmZyb20gc2VydmVyLmF0cy50cmVlcy5zZXJ2aWNlIGltcG9ydCBTZXJ2aWNlVHJlZQpmcm9tIHNlcnZlci52YWxpZGF0aW9uLmNvbW1vbiBpbXBvcnQgVmFsaWRhdGlvbkhhbmRsZXIKaW1wb3J0IHN5cwppbXBvcnQgbG9nZ2luZwpmcm9tIHB5Z2xzLmxzcC50eXBlcy5iYXNpY19zdHJ1Y3R1cmVzIGltcG9ydCBEaWFnbm9zdGljU2V2ZXJpdHkKZnJvbSBzZXJ2ZXIudXRpbHMgaW1wb3J0IHNlcnZpY2VzCgoKY2xhc3MgU2VydmljZVZhbGlkYXRpb25IYW5kbGVyKFZhbGlkYXRpb25IYW5kbGVyKToKICAgIGRlZiB2YWxpZGF0ZShzZWxmKToKICAgICAgICBzdXBlcigpLnZhbGlkYXRlKCkKCiAgICAgICAgdHJ5OgogICAgICAgICAgICAjIHdhcm5pbmdzCiAgICAgICAgICAgIHNlbGYuX2NoZWNrX2Zvcl91bnVzZWRfc2VydmljZV9pbnB1dHMoKQogICAgICAgICAgICBzZWxmLl92YWxpZGF0ZV92YXJpYWJsZXNfZmlsZV9leGlzdCgpCiAgICAgICAgICAgIHNlbGYuX2NoZWNrX2Zvcl9kZXByZWNhdGVkX3Byb3BlcnRpZXMoKQoKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgogICAgICAgICAgICBwcmludCgnRXJyb3Igb24gbGluZSB7fScuZm9ybWF0KHN5cy5leGNfaW5mbygpWy0xXS50Yl9saW5lbm8pLCB0eXBlKGV4KS5fX25hbWVfXywgZXgpCiAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoJ0Vycm9yIG9uIGxpbmUge30nLmZvcm1hdChzeXMuZXhjX2luZm8oKVstMV0udGJfbGluZW5vKSwgdHlwZShleCkuX19uYW1lX18sIGV4KQoKICAgICAgICByZXR1cm4gc2VsZi5fZGlhZ25vc3RpY3MKCiAgICBkZWYgX2dldF9yZXBvX3Jvb3RfcGF0aChzZWxmKToKICAgICAgICBwYXRoID0gcGF0aGxpYi5QYXRoKHNlbGYuX2RvY3VtZW50LnBhdGgpLmFic29sdXRlKCkKICAgICAgICBpZiBwYXRoLnBhcmVudHNbMV0ubmFtZSA9PSAic2VydmljZXMiOgogICAgICAgICAgICByZXR1cm4gcGF0aC5wYXJlbnRzWzJdLmFic29sdXRlKCkuYXNfcG9zaXgoKQoKICAgICAgICBlbHNlOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZiJXcm9uZyBkb2N1bWVudCBwYXRoIG9mIHNlcnZpY2UgZmlsZToge3BhdGguYXNfcG9zaXgoKX0iKSAgICAKCjx8ZmltX2VuZHw+"]
["9e0122023fa990e084ac7f0d32371bef68ef22d4-2","9e0122023fa990e084ac7f0d32371bef68ef22d4","PHxmaW1fcHJlZml4fD4KJycnClByb2R1Y2UgdGhlIGxpbmd1aXN0aWMgZmVhdHVyZXMgZm9yIHRoZSBleHBlcmltZW50cyBvbiBVS1BDb252QXJnU3RyaWN0LCBVS1BDb252QXJnQ3Jvd2RTYW1wbGUsIGV0Yy4KClRoZSBzY3JpcHQgcnVucyBhIG51bWJlciBvZiBqYXZhIGNvbW1hbmRzIC0tIGluIGNhc2Ugb2YgcHJvYmxlbXMsCnBsZWFzZSBjaGVjayB0aGUgY29tbWFuZCBsaW5lIG91dHB1dCBmb3IgZXJyb3JzLCBhbmQgY2hlY2sgdGhhdCB0aGUgb3V0cHV0IGRpcmVjdG9yeSBjb250YWlucyBhIGZpbGUgZm9yIGVhY2ggb2YgMTA1Mgphcmd1bWVudHMuCgonJycKaW1wb3J0IG9zCmZyb20gc3VicHJvY2VzcyBpbXBvcnQgY2FsbAppbXBvcnQgcGFuZGFzIGFzIHBkCgpqYXZhX3J1bl9wYXRoID0gJy4vYWNsMjAxNi1jb252aW5jaW5nLWFyZ3VtZW50cy9jb2RlL2FyZ3VtZW50YXRpb24tY29udmluY2luZ25lc3MtZXhwZXJpbWVudHMtamF2YS8nCmphdmFfc3RhbmZvcmRfcGF0aCA9ICcuL2FjbDIwMTYtY29udmluY2luZy1hcmd1bWVudHMvY29kZS9kZS50dWRhcm1zdGFkdC51a3AuZGtwcm8uY29yZS5zdGFuZm9yZHNlbnRpbWVudC1ncGwvJwptdm5fcGF0aCA9ICcuL2FjbDIwMTYtY29udmluY2luZy1hcmd1bWVudHMvY29kZS8nCmNsYXNzcGF0aCA9ICIuL3RhcmdldC9hcmd1bWVudGF0aW9uLWNvbnZpbmNpbmduZXNzLWV4cGVyaW1lbnRzLWphdmEtMS4wLVNOQVBTSE9ULmphcjp0YXJnZXQvbGliLyoiCnN0YW5mb3JkX2NsYXNzcGF0aCA9ICIuL3RhcmdldC9kZS50dWRhcm1zdGFkdC51a3AuZGtwcm8uY29yZS5zdGFuZm9yZHNlbnRpbWVudC1ncGwtMS43LjAuamFyOiIgXAogICAgICAgICAgICAgICAgICAgICAiLi90YXJnZXQvbGliLyoiCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpkZWYgcHJlcHJvY2Vzc2luZ19waXBlbGluZShpbnB1dCwgb3V0cHV0LCBkYXRhc2V0X25hbWUsIHRtcF9kYXRhX2RpciwgZmVhdHVyZV9kaXI9Tm9uZSwgcmVtb3ZlX3RhYnM9RmFsc2UpOgogICAgIyBGcm9tIEl2YW4gSGFiZXJuYWwncyBwcmVwcm9jZXNzaW5nIHBpcGVsaW5lLCBmaXJzdCwgY29tcGlsZSBpdAogICAgY2FsbChbJ212bicsICdwYWNrYWdlJ10sIGN3ZD1tdm5fcGF0aCkKCjx8ZmltX2VuZHw+"]
["196686d61d5a620531927a600ebf2c0e129273e5-5","196686d61d5a620531927a600ebf2c0e129273e5","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMS44IG9uIDIwMjEtMDQtMjQgMTM6MzkKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmNsYXNzIE1pZ3JhdGlvbihtaWdyYXRpb25zLk1pZ3JhdGlvbik6CgogICAgZGVwZW5kZW5jaWVzID0gWwo8fGZpbV9lbmR8Pg=="]
["27da7a7e91b644e548e25bc21b1e1bb5010f9dd2-3","27da7a7e91b644e548e25bc21b1e1bb5010f9dd2","PHxmaW1fcHJlZml4fD4KZnJvbSBqdXB5dGVyX3NlcnZlci5iYXNlLmhhbmRsZXJzIGltcG9ydCBKdXB5dGVySGFuZGxlcgppbXBvcnQgdG9ybmFkbwo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLndyaXRlKCdIRUxMTyBXT1JMRCcpCjx8ZmltX3N1ZmZpeHw+CgpjbGFzcyBUdXRvcmlhbEhhbmRsZXIoSnVweXRlckhhbmRsZXIpOgogICAgQHRvcm5hZG8ud2ViLmF1dGhlbnRpY2F0ZWQKICAgIGRlZiBnZXQoc2VsZik6Cjx8ZmltX2VuZHw+"]
["3226c98b563a8b8f21ced024133abf6a785efb74-3","3226c98b563a8b8f21ced024133abf6a785efb74","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBjb2Rpbmc9dXRmLTgKCmZyb20gZmxhc2sgaW1wb3J0IEJsdWVwcmludAoKPHxmaW1fZW5kfD4="]
["d0f09fe94550f5a067e38b9e76a52388ee550adb-3","d0f09fe94550f5a067e38b9e76a52388ee550adb","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IEFueSwgRGljdCwgVHlwZSwgVW5pb24sIE9wdGlvbmFsCmZyb20gdXJsbGliLnBhcnNlIGltcG9ydCBxdW90ZQoKaW1wb3J0IG9yanNvbgpmcm9tIHN0YXJsZXR0ZS5yZXNwb25zZXMgaW1wb3J0IEpTT05SZXNwb25zZQpmcm9tIHN0YXJsZXR0ZS5kYXRhc3RydWN0dXJlcyBpbXBvcnQgVVJMCgoKY2xhc3MgT1JKU09OUmVzcG9uc2UoSlNPTlJlc3BvbnNlKToKICAgIG1lZGlhX3R5cGUgPSAiYXBwbGljYXRpb24vanNvbiIKCiAgICBkZWYgcmVuZGVyKHNlbGYsIGNvbnRlbnQ6IEFueSkgLT4gYnl0ZXM6CiAgICAgICAgcmV0dXJuIG9yanNvbi5kdW1wcyhjb250ZW50KQoKCmNsYXNzIEhUVFBFeGNlcHRpb24oRXhjZXB0aW9uKToKICAgIGRlZiBfX2luaXRfXygKICAgICAgICBzZWxmLAogICAgICAgIHN0YXR1c19jb2RlOiBpbnQsCiAgICAgICAgdGl0bGU6IHN0ciwKICAgICAgICBkZXNjcmlwdGlvbjogc3RyLAogICAgICAgIGRldGFpbDogQW55ID0gTm9uZSwKICAgICAgICBoZWFkZXJzOiBPcHRpb25hbFtEaWN0W3N0ciwgQW55XV0gPSBOb25lLAogICAgKSAtPiBOb25lOgogICAgICAgIHNlbGYuc3RhdHVzX2NvZGUgPSBzdGF0dXNfY29kZQogICAgICAgIHNlbGYuZGV0YWlsID0gZGV0YWlsCiAgICAgICAgc2VsZi5oZWFkZXJzID0gaGVhZGVycyBvciB7fQogICAgICAgIHNlbGYudGl0bGUgPSB0aXRsZQogICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgoKCjx8ZmltX2hvbGV8PgogICAgICAgIHN0YXR1c19jb2RlOiBpbnQgPSAzMDcsCiAgICAgICAgaGVhZGVyczogZGljdCA9IE5vbmUsCiAgICApIC0+IE5vbmU6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygKICAgICAgICAgICAgc3RhdHVzX2NvZGU9c3RhdHVzX2NvZGUsIGhlYWRlcnM9aGVhZGVycywgdGl0bGU9IiIsIGRlc2NyaXB0aW9uPSIiCiAgICAgICAgKQogICAgICAgIHNlbGYuaGVhZGVyc1sibG9jYXRpb24iXSA9IHF1b3RlKHN0cih1cmwpLCBzYWZlPSI6LyUjPz1AW10hJCYnKCkqKyw7IikKCgpkZWYgcmVzcG9uc2UobW9kZWw6IFR5cGUgPSBOb25lLCBkZXNjcmlwdGlvbjogc3RyID0gTm9uZSkgLT4gRGljdFtzdHIsIEFueV06CiAgICBkOiBEaWN0W3N0ciwgQW55XSA9IHt9CiAgICBpZiBtb2RlbCBpcyBub3QgTm9uZToKICAgICAgICBkWyJtb2RlbCJdID0gbW9kZWwKICAgIGlmIGRlc2NyaXB0aW9uOgogICAgICAgIGRbImRlc2NyaXB0aW9uIl0gPSBkZXNjcmlwdGlvbgogICAgcmV0dXJuIGQKPHxmaW1fc3VmZml4fD4KY2xhc3MgSFRUUFJlZGlyZWN0KEhUVFBFeGNlcHRpb24pOgogICAgZGVmIF9faW5pdF9fKAogICAgICAgIHNlbGYsCiAgICAgICAgdXJsOiBVbmlvbltzdHIsIFVSTF0sCjx8ZmltX2VuZHw+"]
["d0d90180504ea74a67b6daec55c1082e630a1386-3","d0d90180504ea74a67b6daec55c1082e630a1386","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKCnhsaW0gPSAxMAp4ID0gbnAubGluc3BhY2UoLXhsaW0sIHhsaW0sIDUwMCkKCjx8ZmltX2hvbGV8PgpwbHQueGxpbShbLTEwLCAxMF0pCnBsdC5ncmlkKFRydWUpCnBsdC5zaG93KCkKCmlucHV0KCJEcsO8Y2sgZWluZSBUYXN0ZS4uLiIpCgpwbHQudGl0bGUoJ1NpZ21vaWQgKExvZ2lzdGlzY2hlIEZ1bmt0aW9uKScsIGZvbnRzaXplPTIwKQpwbHQucGxvdCh4LCAxLi8oMS4rbnAuZXhwKC14KSksIGxpbmV3aWR0aD0xMCwgY29sb3I9J2dyZWVuJykKcGx0LnRleHQoLTksIDAuODUsIHInJFxzaWdtYSh4KT1cZnJhY3sxfXsxK2Veey14fX0kJywgZm9udHNpemU9MzApCnBsdC54bGltKFstMTAsIDEwXSkKcGx0LmdyaWQoVHJ1ZSkKcGx0LnNob3coKQoKaW5wdXQoIkRyw7xjayBlaW5lIFRhc3RlLi4uIikKCnBsdC50aXRsZSgnQWt0aXZpZXJ1bmdzZnVua3Rpb25lbicpCnBsdC5wbG90KHgsIG5wLmhlYXZpc2lkZSh4LCAxMC4wKSwgbGFiZWw9J0hlYXZpc2lkZScsIGxpbmV3aWR0aD0xMCwgY29sb3I9J3JlZCcpCnBsdC5wbG90KHgsIDEuLygxLitucC5leHAoLXgpKSwgbGFiZWw9J0xvZ2lzdGlzY2hlIEZ1bmt0aW9uJywgbGluZXdpZHRoPTEwLCBjb2xvcj0nZ3JlZW4nKQpwbHQueGxpbShbLTEwLCAxMF0pCnBsdC5ncmlkKFRydWUpCnBsdC5sZWdlbmQoKQpwbHQuc2hvdygpCgppbnB1dCgiRHLDvGNrIGVpbmUgVGFzdGUuLi4iKQoKZmlnLCBheHMgPSBwbHQuc3VicGxvdHMoMiwgMSkKCmF4c1swXS5wbG90KHgsIDEuLygxLitucC5leHAoLXgpKSwgY29sb3I9J2dyZWVuJykKYXhzWzBdLnNldF90aXRsZSgnTG9naXN0aXNjaGUgRnVua3Rpb24nKQpheHNbMF0udGV4dCgtMTAsIDAuODUsIHInJFxzaWdtYSh4KT1cZnJhY3sxfXsxK2Veey14fX0kJywgZm9udHNpemU9MjUsIGNvbG9yPSdncmVlbicpCmF4c1swXS5ncmlkKFRydWUpCgpheHNbMV0ucGxvdCh4LCAxLi8oMS4rbnAuZXhwKC14KSkqKDEtMS4vKDEuK25wLmV4cCgteCkpKSwgY29sb3I9J3JlZCcpCmF4c1sxXS5zZXRfdGl0bGUoJ8OEbmRlcnVuZyAoMS4gQWJsZWl0dW5nKScpCmF4c1sxXS50ZXh0KC0xMCwgMC4xNSwgcickXHNpZ21hXCcoeCk9XHNpZ21hKHgpLigxLVxzaWdtYSh4KSkkJywgZm9udHNpemU9MTUsIGNvbG9yPSdyZWQnKQpheHNbMV0uZ3JpZChUcnVlKQoKcGx0LnNob3coKQoKaW5wdXQoIkRyw7xjayBlaW5lIFRhc3RlLi4uIikKCnBsdC50aXRsZSgnVGFuZ2VucyBIeXBlcmJvbGljdXMnLCBmb250c2l6ZT0yMCkKcGx0LnBsb3QoeCwgbnAudGFuaCh4KSwgbGluZXdpZHRoPTEwLCBjb2xvcj0nb3JhbmdlJykKcGx0LnRleHQoLTksIDAuNzUsIHInJFxzaWdtYSh4KT10YW5oKHgpJwogICAgICAgICAgICAgICAgICAgcickJywgZm9udHNpemU9MjUpCnBsdC54bGltKFstMTAsIDEwXSkKcGx0LmdyaWQoVHJ1ZSkKcGx0LmxlZ2VuZCgpCnBsdC5zaG93KCkKCmlucHV0KCJEcsO8Y2sgZWluZSBUYXN0ZS4uLiIpCgpwbHQudGl0bGUoJ1JlTFUtRnVua3Rpb24nLCBmb250c2l6ZT0yMCkKcGx0LnBsb3QoeCwgbnAubWF4aW11bSgwLHgpLCBsaW5ld2lkdGg9MTAsIGNvbG9yPSdibHVlJykKcGx0LnhsaW0oWy0xMCwgMTBdKQpwbHQuZ3JpZChUcnVlKQoKcGx0LmxlZ2VuZCgpCnBsdC5zaG93KCkKCmlucHV0KCJEcsO8Y2sgZWluZSBUYXN0ZS4uLiIpCgo8fGZpbV9zdWZmaXh8PgpwbHQuZmlndXJlKGZpZ3NpemU9KDMsMykpICMgNDAweDQwMCBQaXhlbAoKcGx0LnRpdGxlKCdIZWF2aXNpZGUgRnVua3Rpb24nLCBmb250c2l6ZT0yMCkKcGx0LnBsb3QoeCwgbnAuaGVhdmlzaWRlKHgsIDEuMCksIGxpbmV3aWR0aD0xMCwgY29sb3I9J3JlZCcpCjx8ZmltX2VuZHw+"]
["efcb5f0d306d8893aa73f1ad839e07235478e0c1-4","efcb5f0d306d8893aa73f1ad839e07235478e0c1","PHxmaW1fcHJlZml4fD4KIiIiVGVzdCBjYXNlcyBmb3IgYXhlcy4iIiIKCgpmcm9tIHR1ZXBsb3RzIGltcG9ydCBheGVzCgoKZGVmIGNhc2VfYXhlc19saW5lc19kZWZhdWx0KCk6CiAgICByZXR1cm4gYXhlcy5saW5lcygpCgoKZGVmIGNhc2VfYXhlc19saW5lc19jdXN0b20oKToKICAgIHJldHVybiBheGVzLmxpbmVzKAogICAgICAgIGJhc2Vfd2lkdGg9MC41LAogICAgICAgIGxpbmVfYmFzZV9yYXRpbz0yLjAsCiAgICAgICAgdGlja19tYWpvcl9iYXNlX3JhdGlvPTEuMCwKICAgICAgICB0aWNrX21pbm9yX2Jhc2VfcmF0aW89MC41LAogICAgICAgIHRpY2tfc2l6ZV93aWR0aF9yYXRpbz0zLjAsCiAgICAgICAgdGlja19tYWpvcl9zaXplX21pbj0xLjUsCiAgICAgICAgdGlja19taW5vcl9zaXplX21pbj0xLjAsCiAgICAgICAgYXhpc2JlbG93PVRydWUsCiAgICApCgoKZGVmIGNhc2VfYXhlc19jb2xvcl9kZWZhdWx0KCk6CiAgICByZXR1cm4gYXhlcy5jb2xvcigpCgoKZGVmIGNhc2VfYXhlc19jb2xvcl9jdXN0b20oKToKICAgIHJldHVybiBheGVzLmNvbG9yKGZhY2U9InJlZCIsIGJhc2U9InJlZCIpCgoKZGVmIGNhc2VfYXhlc19sZWdlbmRfZGVmYXVsdCgpOgogICAgcmV0dXJuIGF4ZXMubGVnZW5kKCkKCgpkZWYgY2FzZV9heGVzX2xlZ2VuZF9jdXN0b20oKToKICAgIHJldHVybiBheGVzLmxlZ2VuZChzaGFkb3c9VHJ1ZSwgZnJhbWVvbj1GYWxzZSwgZmFuY3lib3g9VHJ1ZSkKCgpkZWYgY2FzZV9heGVzX3NwaW5lc19kZWZhdWx0KCk6CiAgICByZXR1cm4gYXhlcy5zcGluZXMoKQoKCmRlZiBjYXNlX2F4ZXNfc3BpbmVzX2N1c3RvbSgpOgogICAgcmV0dXJuIGF4ZXMuc3BpbmVzKHJpZ2h0PUZhbHNlLCBsZWZ0PUZhbHNlLCB0b3A9RmFsc2UsIGJvdHRvbT1GYWxzZSkKCgpkZWYgY2FzZV9heGVzX3RpY2tfZGlyZWN0aW9uX2RlZmF1bHQoKToKICAgIHJldHVybiBheGVzLnRpY2tfZGlyZWN0aW9uKCkKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRlZiBjYXNlX2F4ZXNfdGlja19kaXJlY3Rpb25fY3VzdG9tKCk6CiAgICByZXR1cm4gYXhlcy50aWNrX2RpcmVjdGlvbih4PSJpbiIsIHk9Im91dCIpCgoKPHxmaW1fZW5kfD4="]
["08ab36f61c2f271c4a6f33c07f386059c8788280-1","08ab36f61c2f271c4a6f33c07f386059c8788280","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBweXRlc3QKCmltcG9ydCBybmFfc3Zfc2ltdWxhdG9yLmlvLmxvYWRfY29uZmlnCgoKY2xhc3MgVGVzdExvYWRFbnZDb25maWc6CiAgICAiIiJUZXN0cyBmb3IgbG9hZF9lbnZfY29uZmlnIiIiCgogICAgZGVmIHRlc3RfZ2V0X2NvbmZpZyhzZWxmKToKCiAgICAgICAgcmVzdWx0ID0gcm5hX3N2X3NpbXVsYXRvci5pby5sb2FkX2NvbmZpZy5sb2FkX2Vudl9jb25maWcoKQoKICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXN1bHQsIGRpY3QpCiAgICAgICAgYXNzZXJ0ICdmbHV4JyBpbiByZXN1bHQKCgpjbGFzcyBUZXN0R2V0RGVmYXVsdENvbmZpZ0xvY2F0aW9uOgogICAgIiIiVGVzdHMgZm9yIGdldF9kZWZhdWx0X2NvbmZpZ19sb2NhdGlvbiIiIgoKICAgIGRlZiB0ZXN0X2dldF9jb25maWdfZGlyKHNlbGYpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIiIiR2V0IGRlZmF1bHQiIiIKCiAgICAgICAgcmVzdWx0ID0gcm5hX3N2X3NpbXVsYXRvci5pby5sb2FkX2NvbmZpZy5nZXRfZGVmYXVsdF9jb25maWdfbG9jYXRpb24oKQoKPHxmaW1fZW5kfD4="]
["c0ec68478248375d22b53a30457a1ae1e3ff3a88-1","c0ec68478248375d22b53a30457a1ae1e3ff3a88","PHxmaW1fcHJlZml4fD4KZnJvbSBib3RvY29yZS5leGNlcHRpb25zIGltcG9ydCBDbGllbnRFcnJvcgpmcm9tIG1vY2sgaW1wb3J0IE1hZ2ljTW9jawoKZnJvbSBzcGFjZWwuYXdzIGltcG9ydCBDbGllbnRDYWNoZQpmcm9tIHRlc3QgaW1wb3J0IEJhc2VTcGFjZUFwcFRlc3QKClBMQUlOVEVYVF9LRVkgPSAnMDAwMDAwMDAwMDAwMDAwMCcKRU5DUllQVEVEX0tFWSA9ICd0b3BzZWNyZXQnCgpLRVlfQVJOID0gKCdhcm46YXdzOmttczp1cy13ZXN0LTI6MTExMTExMTExMTExMTExOmtleS8nICsKICAgICAgICAgICAnMTExMTExMS0yMjIyMjItMzMzMzMtNDQ0NDQtNTU1NTU1NTUnKQoKQ0xJRU5UX0VSUk9SID0gQ2xpZW50RXJyb3IoeydFcnJvcic6IHsnTWVzc2FnZSc6ICdLYWJvb20nfX0sICdEZXNjcmliZUtleScpCgoKY2xhc3MgQmFzZUttc1Rlc3QoQmFzZVNwYWNlQXBwVGVzdCk6CiAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgc3VwZXIoQmFzZUttc1Rlc3QsIHNlbGYpLnNldFVwKCkKICAgICAgICBzZWxmLmttcyA9IE1hZ2ljTW9jaygpCiAgICAgICAgc2VsZi5rbXMuZ2VuZXJhdGVfZGF0YV9rZXkucmV0dXJuX3ZhbHVlID0gewogICAgICAgICAgICAnUGxhaW50ZXh0JzogUExBSU5URVhUX0tFWSwKICAgICAgICAgICAgJ0NpcGhlcnRleHRCbG9iJzogRU5DUllQVEVEX0tFWQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgfQogICAgICAgIHNlbGYua21zLmRlY3J5cHQucmV0dXJuX3ZhbHVlID0gewogICAgICAgICAgICAnUGxhaW50ZXh0JzogUExBSU5URVhUX0tFWQogICAgICAgIH0KPHxmaW1fZW5kfD4="]
["8d2af470b5e8686fdff21b129dab9e578ff4f284-1","8d2af470b5e8686fdff21b129dab9e578ff4f284","PHxmaW1fcHJlZml4fD4KZnJvbSBkaXNjb3JkLmV4dCBpbXBvcnQgY29tbWFuZHMKaW1wb3J0IGRpc2NvcmQKZnJvbSB1dGlscy5wYWdpbmF0b3IgaW1wb3J0IFBhZwpmcm9tIHV0aWxzLmZ1bmN0aW9ucyBpbXBvcnQgKgoKY2xhc3MgQWRtaW4oY29tbWFuZHMuQ29nKToKICAgICIiIkFkbWluLW9ubHkgY29tbWFuZHMgdGhhdCBtYWtlIHRoZSBib3QgZHluYW1pYy4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgYm90KToKICAgICAgICBzZWxmLmJvdCA9IGJvdAoKICAgIEBjb21tYW5kcy5jb21tYW5kKGhpZGRlbj1UcnVlKQogICAgQGNvbW1hbmRzLmlzX293bmVyKCkKICAgIGFzeW5jIGRlZiBsb2FkKHNlbGYsIGN0eCwgZXh0ZW5zaW9uKToKICAgICAgICAiIiJMb2FkcyBhIG1vZHVsZS4iIiIKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYuYm90LmxvYWRfZXh0ZW5zaW9uKGYnY29ncy57ZXh0ZW5zaW9ufScpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBhd2FpdCBjdHguc2VuZCgne306IHt9Jy5mb3JtYXQodHlwZShlKS5fX25hbWVfXywgZSkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgYXdhaXQgY3R4LnNlbmQoJ1xOe09LIEhBTkQgU0lHTn0nKQoKICAgIEBjb21tYW5kcy5jb21tYW5kKGhpZGRlbj1UcnVlKQogICAgQGNvbW1hbmRzLmlzX293bmVyKCkKICAgIGFzeW5jIGRlZiB1bmxvYWQoc2VsZiwgY3R4LCBleHRlbnNpb24pOgogICAgICAgICIiIlVubG9hZHMgYSBtb2R1bGUuIiIiCiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLmJvdC51bmxvYWRfZXh0ZW5zaW9uKGYnY29ncy57ZXh0ZW5zaW9ufScpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBhd2FpdCBjdHguc2VuZCgne306IHt9Jy5mb3JtYXQodHlwZShlKS5fX25hbWVfXywgZSkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgYXdhaXQgY3R4LnNlbmQoJ1xOe09LIEhBTkQgU0lHTn0nKQoKICAgIEBjb21tYW5kcy5jb21tYW5kKG5hbWU9J3JlbG9hZCcsIGhpZGRlbj1UcnVlKQogICAgQGNvbW1hbmRzLmlzX293bmVyKCkKICAgIGFzeW5jIGRlZiBfcmVsb2FkKHNlbGYsIGN0eCwgZXh0ZW5zaW9uKToKICAgICAgICAiIiJSZWxvYWRzIGEgbW9kdWxlLiIiIgogICAgICAgIHRyeToKICAgICAgICAgICAgc2VsZi5ib3QudW5sb2FkX2V4dGVuc2lvbihmJ2NvZ3Mue2V4dGVuc2lvbn0nKQogICAgICAgICAgICBzZWxmLmJvdC5sb2FkX2V4dGVuc2lvbihmJ2NvZ3Mue2V4dGVuc2lvbn0nKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgYXdhaXQgY3R4LnNlbmQoJ3t9OiB7fScuZm9ybWF0KHR5cGUoZSkuX19uYW1lX18sIGUpKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGF3YWl0IGN0eC5zZW5kKCdcTntPSyBIQU5EIFNJR059JykKCiAgICBAY29tbWFuZHMuY29tbWFuZChoaWRkZW49VHJ1ZSkKICAgIEBjb21tYW5kcy5pc19vd25lcigpCiAgICBhc3luYyBkZWYgYWRtaW5zdGF0cyhzZWxmLCBjdHgpOgogICAgICAgICIiIlNob3cgc3RhdHMuIiIiCiAgICAgICAgaSA9IDAKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHggPSBbXQogICAgICAgIGd1aWxkbGlzdCA9IHNvcnRlZChjdHguYm90Lmd1aWxkcywga2V5PWxhbWJkYSB4OiB4Lm1lbWJlcl9jb3VudCwgcmV2ZXJzZT1UcnVlKQogICAgICAgIGZvciBndWlsZCBpbiBndWlsZGxpc3Q6CiAgICAgICAgICAgIGkgKz0gMQo8fGZpbV9lbmR8Pg=="]
["08688d9e428ab47f15b32026da6d4a33f4e1d2c5-4","08688d9e428ab47f15b32026da6d4a33f4e1d2c5","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwpmcm9tIGdvb2RzLm1vZGVscyBpbXBvcnQgV2FyZWhvdXNlLCBQcm9kdWN0LCBWb2x1bWUKZnJvbSBjb21wYW5pZXMubW9kZWxzIGltcG9ydCBDb21wYW55LCBDb250cmFjdCwgT3V0bGV0CmZyb20gdXNlcnMubW9kZWxzIGltcG9ydCBVc2VyCgoKY2xhc3MgU2FsZShtb2RlbHMuTW9kZWwpOgogICAgbnVtYmVyID0gbW9kZWxzLkNoYXJGaWVsZCgKICAgICAgICBtYXhfbGVuZ3RoPTEwLAogICAgICAgIHVuaXF1ZT1UcnVlLAogICAgICAgIG51bGw9VHJ1ZSwKICAgICAgICBibGFuaz1UcnVlCiAgICApCiAgICBjb21wYW55ID0gbW9kZWxzLkZvcmVpZ25LZXkoCiAgICAgICAgQ29tcGFueSwKICAgICAgICBvbl9kZWxldGU9bW9kZWxzLkRPX05PVEhJTkcKICAgICkKICAgIG91dGxldCA9IG1vZGVscy5Gb3JlaWduS2V5KAogICAgICAgIE91dGxldCwKICAgICAgICBvbl9kZWxldGU9bW9kZWxzLkRPX05PVEhJTkcKICAgICkKICAgIHdhcmVob3VzZSA9IG1vZGVscy5Gb3JlaWduS2V5KAogICAgICAgIFdhcmVob3VzZSwKICAgICAgICBvbl9kZWxldGU9bW9kZWxzLkRPX05PVEhJTkcKICAgICkKICAgIHByb2R1Y3QgPSBtb2RlbHMuRm9yZWlnbktleSgKICAgICAgICBQcm9kdWN0LAogICAgICAgIG9uX2RlbGV0ZT1tb2RlbHMuRE9fTk9USElORwogICAgKQogICAgY3JlYXRlZF9vbiA9IG1vZGVscy5EYXRlVGltZUZpZWxkKAogICAgICAgIGF1dG9fbm93X2FkZD1UcnVlCiAgICApCiAgICBjcmVhdGVkX2J5ID0gbW9kZWxzLkZvcmVpZ25LZXkoCiAgICAgICAgVXNlciwKICAgICAgICBvbl9kZWxldGU9bW9kZWxzLkRPX05PVEhJTkcsCiAgICApCgoKY2xhc3MgQnV5KG1vZGVscy5Nb2RlbCk6CiAgICBwcm9kdWN0ID0gbW9kZWxzLkZvcmVpZ25LZXkoCiAgICAgICAgUHJvZHVjdCwKICAgICAgICBvbl9kZWxldGU9bW9kZWxzLkRPX05PVEhJTkcKICAgICkKICAgIHZvbHVtZSA9IG1vZGVscy5Gb3JlaWduS2V5KAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgVm9sdW1lLAogICAgICAgIG9uX2RlbGV0ZT1tb2RlbHMuRE9fTk9USElORwo8fGZpbV9lbmR8Pg=="]
["3ec83403af1f9222e96017106e3018ed6ab28f1c-1","3ec83403af1f9222e96017106e3018ed6ab28f1c","PHxmaW1fcHJlZml4fD4KI2NvZGluZz11dGY4CnRyeToKCXByaW50ICflvIDlp4vmtYvor5UnCglyYWlzZSBFeGNlcHRpb24oJ+Wksei0pScpCmV4Y2VwdCBFeGNlcHRpb24gYXMgZToKCXByaW50IGUKZWxzZToKCXByaW50ICfmtYvor5XpgJrov4cnCmZpbmFsbHk6CglwcmludCAn5oiR5piv5pyA5ZCO6LCD55SoJwoKZj1vcGVuKCcxLnR4dCcsJ3cnKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CnByaW50IGYud3JpdGUoJzEyMTIxMjEyJykKPHxmaW1fZW5kfD4="]
["08c49c99ba8ea32922dd5c326707ee00e305f41d-1","08c49c99ba8ea32922dd5c326707ee00e305f41d","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFzayBpbXBvcnQgY3VycmVudF9hcHAKZnJvbSBweWxvbi5jb3JlLnRvb2xzLnJwYyBpbXBvcnQgUnBjTWFuYWdlcgoKCmNsYXNzIFJwY01peGluOgogICAgX3JwYyA9IE5vbmUKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBzZXRfcnBjX21hbmFnZXIoY2xzLCBycGNfbWFuYWdlcjogUnBjTWFuYWdlcik6CiAgICAgICAgY2xzLl9ycGMgPSBycGNfbWFuYWdlcgoKICAgIEBwcm9wZXJ0eQogICAgZGVmIHJwYyhzZWxmKToKICAgICAgICBpZiBub3Qgc2VsZi5fcnBjOgo8fGZpbV9ob2xlfD4KICAgICAgICByZXR1cm4gc2VsZi5fcnBjCgogICAgQHJwYy5zZXR0ZXIKICAgIGRlZiBycGMoc2VsZiwgcnBjX21hbmFnZXI6IFJwY01hbmFnZXIpOgogICAgICAgIHNlbGYuc2V0X3JwY19tYW5hZ2VyKHJwY19tYW5hZ2VyKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBzZWxmLnNldF9ycGNfbWFuYWdlcihjdXJyZW50X2FwcC5jb25maWdbJ0NPTlRFWFQnXS5ycGNfbWFuYWdlcikKPHxmaW1fZW5kfD4="]
["2781a527e23c8b82e9584bd75564b68160f2772d-1","2781a527e23c8b82e9584bd75564b68160f2772d","PHxmaW1fcHJlZml4fD4KIiIiVGVzdCBTeW1waG9ueSBMb2dpbi4iIiIKCmltcG9ydCBweXRlc3QKCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCjx8ZmltX2hvbGV8PgoKCkBweXRlc3QuZml4dHVyZQpkZWYgdGVzdF9kYWcoKToKICAgIHN0YXJ0X2RhdGUgPSBkYXRldGltZSgyMDIxLCA5LCAyMCkKICAgIHJldHVybiBEQUcoInRlc3RfZGFnIiwgZGVmYXVsdF9hcmdzPXsib3duZXIiOiAiYWlyZmxvdyIsICJzdGFydF9kYXRlIjogc3RhcnRfZGF0ZX0pCgoKZGVmIHRlc3Rfc3Vic2NyaWJlX29wZXJhdG9yX21pc3Npbmdfa3dhcmdzKHRlc3RfZGFnKToKICAgICIiIlRlc3QgbWlzc2luZyBrd2FyZ3MgZm9yIFN5bXBob255TG9naW4uIiIiCgogICAgdGFzayA9IFN5bXBob255TG9naW4oZGFnPXRlc3RfZGFnKQogICAgYXNzZXJ0IHRhc2suaHR0cF9jb25uX2lkIGlzIE5vbmUKCgpkZWYgdGVzdF9zdWJzY3JpYmVfb3BlcmF0b3IodGVzdF9kYWcpOgogICAgIiIiVGVzdCB3aXRoIHR5cGljYWwga3dhcmdzIGZvciBTeW1waG9ueUxvZ2luLiIiIgogICAgdGFzayA9IFN5bXBob255TG9naW4oCiAgICAgICAgY29ubl9pZD0ic3ltcGhvbnlfZGV2X2xvZ2luIiwgbG9naW49IkRFVlNZUyIsIHBhc3N3b3JkPSJBUEFTU1dvcmQiLCBkYWc9dGVzdF9kYWcKICAgICkKICAgIGFzc2VydCB0YXNrLmh0dHBfY29ubl9pZC5zdGFydHN3aXRoKCJzeW1waG9ueV9kZXZfbG9naW4iKQogICAgYXNzZXJ0ICJERVZTWVMiIGluIHRhc2suZGF0YQo8fGZpbV9zdWZmaXh8PgoKZnJvbSBhaXJmbG93IGltcG9ydCBEQUcKCmZyb20gaWxzX21pZGRsZXdhcmUudGFza3Muc3ltcGhvbnkubG9naW4gaW1wb3J0IFN5bXBob255TG9naW4KPHxmaW1fZW5kfD4="]
["27f299bb5a5f5070b61c77651dd59609efcc41ff-4","27f299bb5a5f5070b61c77651dd59609efcc41ff","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMS41IG9uIDIwMjEtMDItMDcgMDI6MDQKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKaW1wb3J0IGRqYW5nby5kYi5tb2RlbHMuZGVsZXRpb24KCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGluaXRpYWwgPSBUcnVlCgogICAgZGVwZW5kZW5jaWVzID0gWwogICAgICAgICgnc3R1ZGVudHMnLCAnMDAwMV9pbml0aWFsJyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkNyZWF0ZU1vZGVsKAogICAgICAgICAgICBuYW1lPSdDbGFzc3Jvb20nLAogICAgICAgICAgICBmaWVsZHM9WwogICAgICAgICAgICAgICAgKCdpZCcsIG1vZGVscy5BdXRvRmllbGQoYXV0b19jcmVhdGVkPVRydWUsIHByaW1hcnlfa2V5PVRydWUsIHNlcmlhbGl6ZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdJRCcpKSwKICAgICAgICAgICAgICAgICgnbmFtZScsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0zMCkpLAogICAgICAgICAgICAgICAgKCdkZXNjcmlwdGlvbicsIG1vZGVscy5UZXh0RmllbGQobWF4X2xlbmd0aD0yMDApKSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgKCd0eXBlJywgbW9kZWxzLkNoYXJGaWVsZChjaG9pY2VzPVsoJ3ByaW1hcnknLCAnUHJpbWFyeScpLCAoJ2NvbGVnaWFsJywgJ0NvbGVnaWFsJyldLCBtYXhfbGVuZ3RoPTEwKSksCiAgICAgICAgICAgICAgICAoJ3NoaWZ0JywgbW9kZWxzLkNoYXJGaWVsZChjaG9pY2VzPVsoJ21hdHV0aW5hbCcsICdNYXR1dGluYWwnKSwgKCd2ZXNwZXJ0aW5lJywgJ1Zlc3BlcnRpbmUnKSwgKCdub2N0dXJuYWwnLCAnTm9jdHVybmFsJyldLCBtYXhfbGVuZ3RoPTEwKSksCiAgICAgICAgICAgICAgICAoJ3N0dWRlbnRzJywgbW9kZWxzLkZvcmVpZ25LZXkob25fZGVsZXRlPWRqYW5nby5kYi5tb2RlbHMuZGVsZXRpb24uUFJPVEVDVCwgdG89J3N0dWRlbnRzLnN0dWRlbnQnKSksCjx8ZmltX2VuZHw+"]
["4781680bebbc00ff637def3ce6ea5d2a9514ae19-2","4781680bebbc00ff637def3ce6ea5d2a9514ae19","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwoKZnJvbSBwaG9uZW51bWJlcl9maWVsZC5tb2RlbGZpZWxkcyBpbXBvcnQgUGhvbmVOdW1iZXJGaWVsZAoKCmNsYXNzIEVtYWlsTnVsbEZpZWxkKG1vZGVscy5FbWFpbEZpZWxkKToKICAgIGRlc2NyaXB0aW9uID0gIkVtYWlsRmllbGQgdGhhdCBzdG9yZXMgTlVMTCIKCiAgICBkZWYgZ2V0X2RiX3ByZXBfdmFsdWUoc2VsZiwgdmFsdWUsIGNvbm5lY3Rpb249Tm9uZSwgcHJlcGFyZWQ9RmFsc2UpOgogICAgICAgIHZhbHVlID0gc3VwZXIoRW1haWxOdWxsRmllbGQsIHNlbGYpLmdldF9kYl9wcmVwX3ZhbHVlKHZhbHVlLCBjb25uZWN0aW9uLCBwcmVwYXJlZCkKICAgICAgICBpZiB2YWx1ZSA9PSAiIjoKICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gdmFsdWUKPHxmaW1faG9sZXw+CgogICAgZGVmIGdldF9kYl9wcmVwX3ZhbHVlKHNlbGYsIHZhbHVlLCBjb25uZWN0aW9uPU5vbmUsIHByZXBhcmVkPUZhbHNlKToKICAgICAgICB2YWx1ZSA9IHN1cGVyKFBob25lTnVtYmVyTnVsbEZpZWxkLCBzZWxmKS5nZXRfZGJfcHJlcF92YWx1ZSh2YWx1ZSwgY29ubmVjdGlvbiwgcHJlcGFyZWQpCiAgICAgICAgaWYgdmFsdWUgPT0gIiI6CiAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIHZhbHVlCjx8ZmltX3N1ZmZpeHw+CgoKY2xhc3MgUGhvbmVOdW1iZXJOdWxsRmllbGQoUGhvbmVOdW1iZXJGaWVsZCk6CiAgICBkZXNjcmlwdGlvbiA9ICJQaG9uZU51bWJlckZpZWxkIHRoYXQgc3RvcmVzIE5VTEwgd2hlbiBlbXB0eSIKPHxmaW1fZW5kfD4="]
["47cc54bc863bc6bf187e831c5cb9d9e7fda25d09-3","47cc54bc863bc6bf187e831c5cb9d9e7fda25d09","PHxmaW1fcHJlZml4fD4KY2xhc3MgYWlvRXJyKEV4Y2VwdGlvbik6CiAgICBwYXNzCgoKY2xhc3MgYWlvRm9ybWF0RXJyb3IoYWlvRXJyKToKICAgIHBhc3MKCgpjbGFzcyBhaW9Db3VudEVycm9yKGFpb0Vycik6CiAgICBwYXNzCgoKY2xhc3MgYWlvS2V5RXJyb3IoYWlvRXJyKToKICAgIHBhc3MKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmNsYXNzIGFpb1ByZXByb2Nlc3NFcnJvcihhaW9FcnIpOgogICAgcGFzcwo8fGZpbV9lbmR8Pg=="]
["27f0f24d2a8ac80aecdb1a5cb9713f3248ada418-4","27f0f24d2a8ac80aecdb1a5cb9713f3248ada418","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCiMgLSotIGNvZGluZzogdXRmLTggLSotCmltcG9ydCByZQoKZGVmIHBsdXJhbChub3VuKToKICAgICcnJ+WHveaVsOWKn+iDve+8jOWwhuS8oOWFpeeahOWQjeivjW5vdW7ovazmjaLkuLrlpI3mlbDlvaLlvI8KICAgICcnJwogICAgaWYgcmUuc2VhcmNoKHInW3N4el0kJywgbm91bik6CiAgICAgICAgcmV0dXJuIHJlLnN1YignJCcsICdlcycsIG5vdW4pCiAgICBlbGlmIHJlLnNlYXJjaChyJ1teYWVpb3VkZ2twcnRdaCQnLCBub3VuKToKICAgICAgICByZXR1cm4gcmUuc3ViKCckJywgJ2VzJywgbm91bikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZWxpZiByZS5zZWFyY2gocidbXmFlaW91XXkkJywgbm91bik6CiAgICAgICAgcmV0dXJuIHJlLnN1YigneSQnLCAnaWVzJywgbm91bikKICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIG5vdW4rJ3MnCjx8ZmltX2VuZHw+"]
["08eb76bf3ca9904b9edee05593b5ce96e7420068-4","08eb76bf3ca9904b9edee05593b5ce96e7420068","PHxmaW1fcHJlZml4fD4KIiIiCkFTTi4xIGRhdGEgdHlwZXMgZm9yIFBWU1Mgb2JqZWN0cwoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYW5ub3RhdGlvbnMKCmZyb20gdHlwaW5nIGltcG9ydCBBbnkgYXMgX0FueQpmcm9tIHR5cGluZyBpbXBvcnQgQnl0ZVN0cmluZywgRGljdCwgVHlwZSwgVHlwZVZhcgoKZnJvbSBhc24xY3J5cHRvLmNvcmUgaW1wb3J0ICgKICAgIEFueSwKICAgIEFzbjFWYWx1ZSwKICAgIENob2ljZSwKICAgIEludGVnZXIsCiAgICBOdWxsLAogICAgT2JqZWN0SWRlbnRpZmllciwKICAgIE9jdGV0U3RyaW5nLAogICAgU2VxdWVuY2UsCiAgICBTZXF1ZW5jZU9mLAogICAgVVRGOFN0cmluZywKKQoKX1QgPSBUeXBlVmFyKCJfVCIsIGJvdW5kPSJWZXJpZmllZExvYWRlciIpCgoKY2xhc3MgVmVyaWZpZWRMb2FkZXIoQXNuMVZhbHVlKToKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGxvYWQoCiAgICAgICAgY2xzOiBUeXBlW19UXSwgZW5jb2RlZF9kYXRhOiBCeXRlU3RyaW5nLCBzdHJpY3Q6IGJvb2wgPSBGYWxzZSwgKiprd2FyZ3M6IERpY3Rbc3RyLCBfQW55XQogICAgKSAtPiBfVDoKICAgICAgICBzZWxmID0gc3VwZXIoKS5sb2FkKGVuY29kZWRfZGF0YSwgc3RyaWN0PVRydWUsICoqa3dhcmdzKQoKICAgICAgICBpZiBzZWxmLmR1bXAoVHJ1ZSkgIT0gZW5jb2RlZF9kYXRhOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJEb2VzIG5vdCBlbmNvZGUgYmFjayB0byBvcmlnaW5hbCIpCgogICAgICAgIHJldHVybiBzZWxmCgoKIyBmbXQ6IG9mZgpjbGFzcyBQcmVHcm91cFZhbHVlKEludGVnZXIpOgogICAgIiIiCiAgICAiIiIKCgpjbGFzcyBJbWdHcm91cFZhbHVlKENob2ljZSk6CiAgICBfYWx0ZXJuYXRpdmVzID0gWwogICAgICAgICgiUXJWYWx1ZSIsIEludGVnZXIpLAogICAgICAgICgiRUNQb2ludCIsIE9jdGV0U3RyaW5nKSwKICAgIF0KCgpjbGFzcyBQdnNzQWxnb3JpdGhtSWQoT2JqZWN0SWRlbnRpZmllcik6CiAgICBfYmFzZV9vaWQgPSAiMS4zLjYuMS40LjEuNTUwNDAuMS4wLjEiCiAgICBfbWFwID0gewogICAgICAgIF9iYXNlX29pZCArICIuMCI6ICJxcl9tb2RfcCIsCiAgICAgICAgX2Jhc2Vfb2lkICsgIi4xIjogInJpc3RyZXR0b18yNTUiLAogICAgICAgICMgX2Jhc2Vfb2lkICsgIi4yIjogInJpc3RyZXR0b180NDgiLCAob3IgZGVjYWY/KQogICAgICAgICMgX2Jhc2Vfb2lkICsgIi4zIjogIm5pc3RfcF8yNTYiLCAob3IgZGVjYWY/KQogICAgfQoKCmNsYXNzIFN5c3RlbVBhcmFtZXRlcnMoVmVyaWZpZWRMb2FkZXIsIFNlcXVlbmNlKToKICAgIF9maWVsZHMgPSBbCiAgICAgICAgKCJhbGdvcml0aG0iLCBQdnNzQWxnb3JpdGhtSWQpLAogICAgICAgICgicGFyYW1ldGVycyIsIEFueSksCiAgICBdCgogICAgX29pZF9wYWlyID0gKCJhbGdvcml0aG0iLCAicGFyYW1ldGVycyIpCiAgICBfb2lkX3NwZWNzID0gewogICAgICAgICJxcl9tb2RfcCI6IEludGVnZXIsCiAgICAgICAgInJpc3RyZXR0b18yNTUiOiBOdWxsLAogICAgICAgICMgInJpc3RyZXR0b180NDgiOiBOdWxsLAogICAgICAgICMgIm5pc3RfcF8yNTYiOiBOdWxsLAogICAgfQoKCmNsYXNzIFB1YmxpY0tleShWZXJpZmllZExvYWRlciwgU2VxdWVuY2UpOgogICAgX2ZpZWxkcyA9IFsKICAgICAgICAoIm5hbWUiLCBVVEY4U3RyaW5nKSwKICAgICAgICAoInB1YjAiLCBJbWdHcm91cFZhbHVlKSwKICAgICAgICAoInB1YjEiLCBJbWdHcm91cFZhbHVlKSwKICAgIF0KCgpjbGFzcyBQcml2YXRlS2V5KFZlcmlmaWVkTG9hZGVyLCBTZXF1ZW5jZSk6CiAgICBfZmllbGRzID0gWwogICAgICAgICgicHJpdiIsIFByZUdyb3VwVmFsdWUpLAogICAgXQoKCmNsYXNzIFNlY3JldChWZXJpZmllZExvYWRlciwgU2VxdWVuY2UpOgogICAgX2ZpZWxkcyA9IFsKICAgICAgICAoInNlY3JldCIsIEltZ0dyb3VwVmFsdWUpLAogICAgXQoKCmNsYXNzIFNoYXJlKFNlcXVlbmNlKToKICAgIF9maWVsZHMgPSBbCiAgICAgICAgKCJwdWIiLCBVVEY4U3RyaW5nKSwKICAgICAgICAoInNoYXJlIiwgSW1nR3JvdXBWYWx1ZSksCiAgICAgICAgKCJyZXNwb25zZV9mMCIsIFByZUdyb3VwVmFsdWUpLAogICAgICAgICgicmVzcG9uc2VfZjEiLCBQcmVHcm91cFZhbHVlKSwKICAgIF0KCgpjbGFzcyBTaGFyZXMoU2VxdWVuY2VPZik6CiAgICBfY2hpbGRfc3BlYyA9IFNoYXJlCgoKY2xhc3MgQ29lZmZpY2llbnRzKFNlcXVlbmNlT2YpOgogICAgX2NoaWxkX3NwZWMgPSBJbWdHcm91cFZhbHVlCgoKY2xhc3MgU2hhcmVkU2VjcmV0KFZlcmlmaWVkTG9hZGVyLCBTZXF1ZW5jZSk6CiAgICBfZmllbGRzID0gWwogICAgICAgICgic2hhcmVzIiwgU2hhcmVzKSwKICAgICAgICAoImNvZWZmaWNpZW50cyIsIENvZWZmaWNpZW50cyksCiAgICAgICAgKCJjaGFsbGVuZ2UiLCBPY3RldFN0cmluZyksCiAgICBdCgoKY2xhc3MgSGFzaElucHV0VXNlcihTZXF1ZW5jZSk6CiAgICBfZmllbGRzID0gWwogICAgICAgICgicHViIiwgUHVibGljS2V5KSwKICAgICAgICAoImNvbW1pdG1lbnQiLCBJbWdHcm91cFZhbHVlKSwKICAgICAgICAoInJhbmRvbV9jb21taXRtZW50IiwgSW1nR3JvdXBWYWx1ZSksCiAgICAgICAgKCJzaGFyZSIsIEltZ0dyb3VwVmFsdWUpLAogICAgICAgICgicmFuZG9tX3NoYXJlIiwgSW1nR3JvdXBWYWx1ZSksCiAgICBdCgoKY2xhc3MgSGFzaElucHV0VXNlcnMoU2VxdWVuY2VPZik6CiAgICBfY2hpbGRfc3BlYyA9IEhhc2hJbnB1dFVzZXIKCgpjbGFzcyBTaGFyZXNDaGFsbGVuZ2UoU2VxdWVuY2UpOgogICAgX2ZpZWxkcyA9IFsKICAgICAgICAoInBhcmFtZXRlcnMiLCBTeXN0ZW1QYXJhbWV0ZXJzKSwKICAgICAgICAoImNvZWZmaWNpZW50cyIsIENvZWZmaWNpZW50cyksCiAgICAgICAgKCJ1c2VycyIsIEhhc2hJbnB1dFVzZXJzKSwKICAgIF0KCgpjbGFzcyBQdWJsaWNLZXlzKFNlcXVlbmNlT2YpOgogICAgX2NoaWxkX3NwZWMgPSBQdWJsaWNLZXkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmNsYXNzIFJlZW5jcnlwdGVkQ2hhbGxlbmdlKFNlcXVlbmNlKToKICAgIF9maWVsZHMgPSBbCiAgICAgICAgKCJwYXJhbWV0ZXJzIiwgU3lzdGVtUGFyYW1ldGVycyksCjx8ZmltX2VuZHw+"]
["4bdc75882a6afbcfb751fdf88b7254130e1db68e-2","4bdc75882a6afbcfb751fdf88b7254130e1db68e","PHxmaW1fcHJlZml4fD4KIiIiCgogICAgKkZyYW1lLVJhaXNlKgoKICBSYWlzZSB0aGUgZnJhbWUgb24gdGhlIHotaW5kZXguCgoiIiIKCjx8ZmltX2hvbGV8PgoKY2xhc3MgRnJhbWVSYWlzZSgKICAgIEZyYW1lU3RhY2tpbmdPcGVyYXRvciwKKToKICAgIHBhc3MKPHxmaW1fc3VmZml4fD4KZnJvbSAuX29wZXJhdG9yIGltcG9ydCBGcmFtZVN0YWNraW5nT3BlcmF0b3IKCl9fYWxsX18gPSBbIkZyYW1lUmFpc2UiXQoKPHxmaW1fZW5kfD4="]
["278594b2baa6ff77bdc11ed130ebc488d7d890d3-1","278594b2baa6ff77bdc11ed130ebc488d7d890d3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCmltcG9ydCBqc29uCmltcG9ydCBjb2xsZWN0aW9ucwoKZnJvbSBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAgYXMgU291cCwgVGFnCgp3aWtpYmlydGhzID0gW10Kd2lraWRhdGVzID0gWwogICAgIkphbnVhcnlfMSIsCiAgICAiSmFudWFyeV8yIiwKICAgICJKYW51YXJ5XzMiLAogICAgIkphbnVhcnlfNCIsCiAgICAiSmFudWFyeV81IiwKICAgICJKYW51YXJ5XzYiLAogICAgIkphbnVhcnlfNyIsCiAgICAiSmFudWFyeV84IiwKICAgICJKYW51YXJ5XzkiLAogICAgIkphbnVhcnlfMTAiLAogICAgIkphbnVhcnlfMTEiLAogICAgIkphbnVhcnlfMTIiLAogICAgIkphbnVhcnlfMTMiLAogICAgIkphbnVhcnlfMTQiLAogICAgIkphbnVhcnlfMTUiLAogICAgIkphbnVhcnlfMTYiLAogICAgIkphbnVhcnlfMTciLAogICAgIkphbnVhcnlfMTgiLAogICAgIkphbnVhcnlfMTkiLAogICAgIkphbnVhcnlfMjAiLAogICAgIkphbnVhcnlfMjEiLAogICAgIkphbnVhcnlfMjIiLAogICAgIkphbnVhcnlfMjMiLAogICAgIkphbnVhcnlfMjQiLAogICAgIkphbnVhcnlfMjUiLAogICAgIkphbnVhcnlfMjYiLAogICAgIkphbnVhcnlfMjciLAogICAgIkphbnVhcnlfMjgiLAogICAgIkphbnVhcnlfMjkiLAogICAgIkphbnVhcnlfMzAiLAogICAgIkphbnVhcnlfMzEiLAogICAgIkZlYnJ1YXJ5XzEiLAogICAgIkZlYnJ1YXJ5XzIiLAogICAgIkZlYnJ1YXJ5XzMiLAogICAgIkZlYnJ1YXJ5XzQiLAogICAgIkZlYnJ1YXJ5XzUiLAogICAgIkZlYnJ1YXJ5XzYiLAogICAgIkZlYnJ1YXJ5XzciLAogICAgIkZlYnJ1YXJ5XzgiLAogICAgIkZlYnJ1YXJ5XzkiLAogICAgIkZlYnJ1YXJ5XzEwIiwKICAgICJGZWJydWFyeV8xMSIsCiAgICAiRmVicnVhcnlfMTIiLAogICAgIkZlYnJ1YXJ5XzEzIiwKICAgICJGZWJydWFyeV8xNCIsCiAgICAiRmVicnVhcnlfMTUiLAogICAgIkZlYnJ1YXJ5XzE2IiwKICAgICJGZWJydWFyeV8xNyIsCiAgICAiRmVicnVhcnlfMTgiLAogICAgIkZlYnJ1YXJ5XzE5IiwKICAgICJGZWJydWFyeV8yMCIsCiAgICAiRmVicnVhcnlfMjEiLAogICAgIkZlYnJ1YXJ5XzIyIiwKICAgICJGZWJydWFyeV8yMyIsCiAgICAiRmVicnVhcnlfMjQiLAogICAgIkZlYnJ1YXJ5XzI1IiwKICAgICJGZWJydWFyeV8yNiIsCiAgICAiRmVicnVhcnlfMjciLAogICAgIkZlYnJ1YXJ5XzI4IiwKICAgICJGZWJydWFyeV8yOSIsCiAgICAiTWFyY2hfMSIsCiAgICAiTWFyY2hfMiIsCiAgICAiTWFyY2hfMyIsCiAgICAiTWFyY2hfNCIsCiAgICAiTWFyY2hfNSIsCiAgICAiTWFyY2hfNiIsCiAgICAiTWFyY2hfNyIsCiAgICAiTWFyY2hfOCIsCiAgICAiTWFyY2hfOSIsCiAgICAiTWFyY2hfMTAiLAogICAgIk1hcmNoXzExIiwKICAgICJNYXJjaF8xMiIsCiAgICAiTWFyY2hfMTMiLAogICAgIk1hcmNoXzE0IiwKICAgICJNYXJjaF8xNSIsCiAgICAiTWFyY2hfMTYiLAogICAgIk1hcmNoXzE3IiwKICAgICJNYXJjaF8xOCIsCiAgICAiTWFyY2hfMTkiLAogICAgIk1hcmNoXzIwIiwKICAgICJNYXJjaF8yMSIsCiAgICAiTWFyY2hfMjIiLAogICAgIk1hcmNoXzIzIiwKICAgICJNYXJjaF8yNCIsCiAgICAiTWFyY2hfMjUiLAogICAgIk1hcmNoXzI2IiwKICAgICJNYXJjaF8yNyIsCiAgICAiTWFyY2hfMjgiLAogICAgIk1hcmNoXzI5IiwKICAgICJNYXJjaF8zMCIsCiAgICAiTWFyY2hfMzEiLAogICAgIkFwcmlsXzEiLAogICAgIkFwcmlsXzIiLAogICAgIkFwcmlsXzMiLAogICAgIkFwcmlsXzQiLAogICAgIkFwcmlsXzUiLAogICAgIkFwcmlsXzYiLAogICAgIkFwcmlsXzciLAogICAgIkFwcmlsXzgiLAogICAgIkFwcmlsXzkiLAogICAgIkFwcmlsXzEwIiwKICAgICJBcHJpbF8xMSIsCiAgICAiQXByaWxfMTIiLAogICAgIkFwcmlsXzEzIiwKICAgICJBcHJpbF8xNCIsCiAgICAiQXByaWxfMTUiLAogICAgIkFwcmlsXzE2IiwKICAgICJBcHJpbF8xNyIsCiAgICAiQXByaWxfMTgiLAogICAgIkFwcmlsXzE5IiwKICAgICJBcHJpbF8yMCIsCiAgICAiQXByaWxfMjEiLAogICAgIkFwcmlsXzIyIiwKICAgICJBcHJpbF8yMyIsCiAgICAiQXByaWxfMjQiLAogICAgIkFwcmlsXzI1IiwKICAgICJBcHJpbF8yNiIsCiAgICAiQXByaWxfMjciLAogICAgIkFwcmlsXzI4IiwKICAgICJBcHJpbF8yOSIsCiAgICAiQXByaWxfMzAiLAogICAgIk1heV8xIiwKICAgICJNYXlfMiIsCiAgICAiTWF5XzMiLAogICAgIk1heV80IiwKICAgICJNYXlfNSIsCiAgICAiTWF5XzYiLAogICAgIk1heV83IiwKICAgICJNYXlfOCIsCiAgICAiTWF5XzkiLAogICAgIk1heV8xMCIsCiAgICAiTWF5XzExIiwKICAgICJNYXlfMTIiLAogICAgIk1heV8xMyIsCiAgICAiTWF5XzE0IiwKICAgICJNYXlfMTUiLAogICAgIk1heV8xNiIsCiAgICAiTWF5XzE3IiwKICAgICJNYXlfMTgiLAogICAgIk1heV8xOSIsCiAgICAiTWF5XzIwIiwKICAgICJNYXlfMjEiLAogICAgIk1heV8yMiIsCiAgICAiTWF5XzIzIiwKICAgICJNYXlfMjQiLAogICAgIk1heV8yNSIsCiAgICAiTWF5XzI2IiwKICAgICJNYXlfMjciLAogICAgIk1heV8yOCIsCiAgICAiTWF5XzI5IiwKICAgICJNYXlfMzAiLAogICAgIk1heV8zMSIsCiAgICAiSnVuZV8xIiwKICAgICJKdW5lXzIiLAogICAgIkp1bmVfMyIsCiAgICAiSnVuZV80IiwKICAgICJKdW5lXzUiLAogICAgIkp1bmVfNiIsCiAgICAiSnVuZV83IiwKICAgICJKdW5lXzgiLAogICAgIkp1bmVfOSIsCiAgICAiSnVuZV8xMCIsCiAgICAiSnVuZV8xMSIsCiAgICAiSnVuZV8xMiIsCiAgICAiSnVuZV8xMyIsCiAgICAiSnVuZV8xNCIsCiAgICAiSnVuZV8xNSIsCiAgICAiSnVuZV8xNiIsCiAgICAiSnVuZV8xNyIsCiAgICAiSnVuZV8xOCIsCiAgICAiSnVuZV8xOSIsCiAgICAiSnVuZV8yMCIsCiAgICAiSnVuZV8yMSIsCiAgICAiSnVuZV8yMiIsCiAgICAiSnVuZV8yMyIsCiAgICAiSnVuZV8yNCIsCiAgICAiSnVuZV8yNSIsCiAgICAiSnVuZV8yNiIsCiAgICAiSnVuZV8yNyIsCiAgICAiSnVuZV8yOCIsCiAgICAiSnVuZV8yOSIsCiAgICAiSnVuZV8zMCIsCiAgICAiSnVseV8xIiwKICAgICJKdWx5XzIiLAogICAgIkp1bHlfMyIsCiAgICAiSnVseV80IiwKICAgICJKdWx5XzUiLAogICAgIkp1bHlfNiIsCiAgICAiSnVseV83IiwKICAgICJKdWx5XzgiLAogICAgIkp1bHlfOSIsCiAgICAiSnVseV8xMCIsCiAgICAiSnVseV8xMSIsCiAgICAiSnVseV8xMiIsCiAgICAiSnVseV8xMyIsCiAgICAiSnVseV8xNCIsCiAgICAiSnVseV8xNSIsCiAgICAiSnVseV8xNiIsCiAgICAiSnVseV8xNyIsCiAgICAiSnVseV8xOCIsCiAgICAiSnVseV8xOSIsCiAgICAiSnVseV8yMCIsCiAgICAiSnVseV8yMSIsCiAgICAiSnVseV8yMiIsCiAgICAiSnVseV8yMyIsCiAgICAiSnVseV8yNCIsCiAgICAiSnVseV8yNSIsCiAgICAiSnVseV8yNiIsCiAgICAiSnVseV8yNyIsCiAgICAiSnVseV8yOCIsCiAgICAiSnVseV8yOSIsCiAgICAiSnVseV8zMCIsCiAgICAiSnVseV8zMSIsCiAgICAiQXVndXN0XzEiLAogICAgIkF1Z3VzdF8yIiwKICAgICJBdWd1c3RfMyIsCiAgICAiQXVndXN0XzQiLAogICAgIkF1Z3VzdF81IiwKICAgICJBdWd1c3RfNiIsCiAgICAiQXVndXN0XzciLAogICAgIkF1Z3VzdF84IiwKICAgICJBdWd1c3RfOSIsCiAgICAiQXVndXN0XzEwIiwKICAgICJBdWd1c3RfMTEiLAogICAgIkF1Z3VzdF8xMiIsCiAgICAiQXVndXN0XzEzIiwKICAgICJBdWd1c3RfMTQiLAogICAgIkF1Z3VzdF8xNSIsCiAgICAiQXVndXN0XzE2IiwKICAgICJBdWd1c3RfMTciLAogICAgIkF1Z3VzdF8xOCIsCiAgICAiQXVndXN0XzE5IiwKICAgICJBdWd1c3RfMjAiLAogICAgIkF1Z3VzdF8yMSIsCiAgICAiQXVndXN0XzIyIiwKICAgICJBdWd1c3RfMjMiLAogICAgIkF1Z3VzdF8yNCIsCiAgICAiQXVndXN0XzI1IiwKICAgICJBdWd1c3RfMjYiLAogICAgIkF1Z3VzdF8yNyIsCiAgICAiQXVndXN0XzI4IiwKICAgICJBdWd1c3RfMjkiLAogICAgIkF1Z3VzdF8zMCIsCiAgICAiQXVndXN0XzMxIiwKICAgICJTZXB0ZW1iZXJfMSIsCiAgICAiU2VwdGVtYmVyXzIiLAogICAgIlNlcHRlbWJlcl8zIiwKICAgICJTZXB0ZW1iZXJfNCIsCiAgICAiU2VwdGVtYmVyXzUiLAogICAgIlNlcHRlbWJlcl82IiwKICAgICJTZXB0ZW1iZXJfNyIsCiAgICAiU2VwdGVtYmVyXzgiLAogICAgIlNlcHRlbWJlcl85IiwKICAgICJTZXB0ZW1iZXJfMTAiLAogICAgIlNlcHRlbWJlcl8xMSIsCiAgICAiU2VwdGVtYmVyXzEyIiwKICAgICJTZXB0ZW1iZXJfMTMiLAogICAgIlNlcHRlbWJlcl8xNCIsCiAgICAiU2VwdGVtYmVyXzE1IiwKICAgICJTZXB0ZW1iZXJfMTYiLAogICAgIlNlcHRlbWJlcl8xNyIsCiAgICAiU2VwdGVtYmVyXzE4IiwKICAgICJTZXB0ZW1iZXJfMTkiLAogICAgIlNlcHRlbWJlcl8yMCIsCiAgICAiU2VwdGVtYmVyXzIxIiwKICAgICJTZXB0ZW1iZXJfMjIiLAogICAgIlNlcHRlbWJlcl8yMyIsCiAgICAiU2VwdGVtYmVyXzI0IiwKICAgICJTZXB0ZW1iZXJfMjUiLAogICAgIlNlcHRlbWJlcl8yNiIsCiAgICAiU2VwdGVtYmVyXzI3IiwKICAgICJTZXB0ZW1iZXJfMjgiLAogICAgIlNlcHRlbWJlcl8yOSIsCiAgICAiU2VwdGVtYmVyXzMwIiwKICAgICJPY3RvYmVyXzEiLAogICAgIk9jdG9iZXJfMiIsCiAgICAiT2N0b2Jlcl8zIiwKICAgICJPY3RvYmVyXzQiLAogICAgIk9jdG9iZXJfNSIsCiAgICAiT2N0b2Jlcl82IiwKICAgICJPY3RvYmVyXzciLAogICAgIk9jdG9iZXJfOCIsCiAgICAiT2N0b2Jlcl85IiwKICAgICJPY3RvYmVyXzEwIiwKICAgICJPY3RvYmVyXzExIiwKICAgICJPY3RvYmVyXzEyIiwKICAgICJPY3RvYmVyXzEzIiwKICAgICJPY3RvYmVyXzE0IiwKICAgICJPY3RvYmVyXzE1IiwKICAgICJPY3RvYmVyXzE2IiwKICAgICJPY3RvYmVyXzE3IiwKICAgICJPY3RvYmVyXzE4IiwKICAgICJPY3RvYmVyXzE5IiwKICAgICJPY3RvYmVyXzIwIiwKICAgICJPY3RvYmVyXzIxIiwKICAgICJPY3RvYmVyXzIyIiwKICAgICJPY3RvYmVyXzIzIiwKICAgICJPY3RvYmVyXzI0IiwKICAgICJPY3RvYmVyXzI1IiwKICAgICJPY3RvYmVyXzI2IiwKICAgICJPY3RvYmVyXzI3IiwKICAgICJPY3RvYmVyXzI4IiwKICAgICJPY3RvYmVyXzI5IiwKICAgICJPY3RvYmVyXzMwIiwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgIk9jdG9iZXJfMzEiLAogICAgIk5vdmVtYmVyXzEiLAogICAgIk5vdmVtYmVyXzIiLAogICAgIk5vdmVtYmVyXzMiLAo8fGZpbV9lbmR8Pg=="]
["d040aea20dd3aacc212227a3025f5814457fdedf-2","d040aea20dd3aacc212227a3025f5814457fdedf","PHxmaW1fcHJlZml4fD4KY2xhc3MgRXNraXpFeGNlcHRpb24oRXhjZXB0aW9uKToKICAgIHBhc3MKCgpjbGFzcyBCYWRSZXF1ZXN0KEVza2l6RXhjZXB0aW9uKToKICAgIHBhc3MKCgpjbGFzcyBJbnZhbGlkQ3JlZGVudGlhbHMoRXNraXpFeGNlcHRpb24pOgogICAgcGFzcwoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgVG9rZW5CbGFja0xpc3RlZChFc2tpekV4Y2VwdGlvbik6CiAgICBwYXNzCgoKPHxmaW1fZW5kfD4="]
["f5e928f7e8d7a36612dbbefe54ae0034f25aa35e-1","f5e928f7e8d7a36612dbbefe54ae0034f25aa35e","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMTMsIFRlYW1QUk8gYW5kIGNvbnRyaWJ1dG9ycwojIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIGxpY2Vuc2UudHh0Cgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKCmltcG9ydCBmcmFwcGUKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKZnJvbSBjYWxlbmRhciBpbXBvcnQgbW9udGhyYW5nZQpmcm9tIGZyYXBwZSBpbXBvcnQgXywgbXNncHJpbnQKZnJvbSBmcmFwcGUudXRpbHMgaW1wb3J0IGZsdApmcm9tIGZyYXBwZS51dGlscyBpbXBvcnQgKGdldGRhdGUsIGNpbnQsIGFkZF9tb250aHMsIGRhdGVfZGlmZiwgYWRkX2RheXMsCiAgICBub3dkYXRlLCBnZXRfZGF0ZXRpbWVfc3RyLCBjc3RyLCBnZXRfZGF0ZXRpbWUsIG5vd19kYXRldGltZSwgZm9ybWF0X2RhdGV0aW1lKQoKCmRlZiBleGVjdXRlKGZpbHRlcnM9Tm9uZSk6CiAgICBpZiBub3QgZmlsdGVyczoKICAgICAgICBmaWx0ZXJzID0ge30KCiAgICBjb2x1bW5zID0gZ2V0X2NvbHVtbnMoKQoKICAgIGRhdGEgPSBbXQogICAgIyByb3cgPSBbXQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBjb25kaXRpb25zLCBmaWx0ZXJzID0gZ2V0X2NvbmRpdGlvbnMoZmlsdGVycykKICAgIGNoZWNraW4gPSBnZXRfY2hlY2tpbihjb25kaXRpb25zLCBmaWx0ZXJzKQogICAgZm9yIGNoZWNrIGluIGNoZWNraW46CiAgICAgICAgZGF0YS5hcHBlbmQoY2hlY2spCjx8ZmltX2VuZHw+"]
["3ed92f43313bdbab2d3944717816c29f3c9db8f9-1","3ed92f43313bdbab2d3944717816c29f3c9db8f9","PHxmaW1fcHJlZml4fD4KcGVzb3MgPSBbXQoKZm9yIGMgaW4gcmFuZ2UoMSwgNik6CiAgICBwZXNvID0gZmxvYXQoaW5wdXQoZidRdWFsIG8gcGVzbyBkYSB7Y33CqiBwZXNzb2E/ICcpKQogICAgcGVzb3MuYXBwZW5kKHBlc28pCgpwZXNvcy5zb3J0KCkKcHJpbnQoZiIiIk8gbWVub3IgcGVzbyDDqSB7cGVzb3NbMF19Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KTyBtYWlvciBwZXNvIMOpIHtwZXNvc1stMV19IiIiKQo8fGZpbV9lbmR8Pg=="]
["3ec08d1c3077c7139103d3aadafd0364820510cb-1","3ec08d1c3077c7139103d3aadafd0364820510cb","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBudW1weSBhcyBucApmcm9tIG51bWJhIGltcG9ydCBqaXQKCgpkZWYgRGltaXNtYXRjaEVtYmVkZGluZyhYLCBkPVsyLCA1LCA2XSwgbT0yLCBzZWVkPTQyKToKICAgICIiIkltcGxlbWVudGF0aW9uIG9mIHRoZSBEaW1pc21hdGNoS2VybmVsLiIiIgoKICAgICMgU2hhcGUKICAgIG4sID0gbnAuYXJyYXkoWCkuc2hhcGUKCiAgICAjIENvbnZlcnQgWCBhcyBhIERhdGFGcmFtZQogICAgWF9kZiA9IHBkLkRhdGFGcmFtZShYLCBjb2x1bW5zPVsic2VxIl0pCiAgICBYX2RmWyJhc2NpaSJdID0gWF9kZlsic2VxIl0uYXBwbHkobGFtYmRhIHg6IGxpc3QoeCkpCiAgICBYX2NvbnZlcnRlZCA9IFhfZGZbImFzY2lpIl0uYXBwbHkobGFtYmRhIHg6IFtvcmQobCkgZm9yIGwgaW4geF0pLnZhbHVlcwogICAgWF9jb252ZXJ0ZWQgPSBucC5hcnJheShYX2NvbnZlcnRlZC50b2xpc3QoKSwgZHR5cGU9bnAuaW50OCkKCiAgICAjIExldHRlcnMKICAgIGxldHRlcnMgPSBbIkEiLCAiQyIsICJHIiwgIlQiXQogICAgbGV0dGVyc19jb252ZXJ0ZWQgPSBbb3JkKGwpIGZvciBsIGluIGxldHRlcnNdCgogICAgIyBSZXN1bHRpbmcgYXJyYXkKICAgIG5ld19YID0gTm9uZQoKICAgICMgTG9vcCBvdmVyIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBzZXF1ZW5jZXMKICAgIGZvciBrIGluIGQ6CgogICAgICAgICMgQ2FydGVzaWFuIHByb2R1Y3QKICAgICAgICBsaXN0cyA9IFtsZXR0ZXJzX2NvbnZlcnRlZF0gKiBrCiAgICAgICAga19tZXJfbCA9IG5wLmFycmF5KFtlbHQgZm9yIGVsdCBpbiBpdGVydG9vbHMucHJvZHVjdCgqbGlzdHMpXSkKCiAgICAgICAgIyBUZXN0IGlmIGRfayBpcyB0b28gYmlnCiAgICAgICAgaWYgbGVuKGtfbWVyX2wpID4gNDA5NjoKCiAgICAgICAgICAgICMgSW5pdGlhbGlzYXRpb24gb2YgdGhlIHNlZWQKICAgICAgICAgICAgbnAucmFuZG9tLnNlZWQoc2VlZCkKCiAgICAgICAgICAgICMgU2VsZWN0IDEwZTYgY29sdW1ucyByYW5kb21seQogICAgICAgICAgICBrX21lcl9sID0ga19tZXJfbFtucC5yYW5kb20ucmFuZGludCgwLCBsZW4oa19tZXJfbCksIGludCg0MDk2KSldCgogICAgICAgICMgU2hhcGUKICAgICAgICBkX2sgPSBsZW4oa19tZXJfbCkKPHxmaW1faG9sZXw+CgogICAgICAgICAgICAjIFJlc3VsdGluZyBhcnJheQogICAgICAgICAgICBuZXdfWF9rID0gbnAuemVyb3MoKG4sIGRfaykpCgogICAgICAgICAgICAjIENvbXB1dGF0aW9uIG9mIHRoZSBlbWJlZGRpbmcgb2YgWAogICAgICAgICAgICBmb3IgaiBpbiByYW5nZShkX2spOgogICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobik6CgogICAgICAgICAgICAgICAgICAgICMgRXh0cmFjdCB4X2lfbCBhbmQga19tZXJfagogICAgICAgICAgICAgICAgICAgIGtfbWVyX2ogPSBrX21lcltqXQogICAgICAgICAgICAgICAgICAgIHhfaV9sID0gWF9jb252W2ldCgogICAgICAgICAgICAgICAgICAgICMgQ29tcHV0ZSByaG8oeF9pLCBrX21lcl9qKQogICAgICAgICAgICAgICAgICAgIHJobyA9IDAKICAgICAgICAgICAgICAgICAgICBsZW5faSA9IGxlbih4X2lfbCkKCiAgICAgICAgICAgICAgICAgICAgZm9yIGwgaW4gcmFuZ2UobGVuX2kgLSBrKToKCiAgICAgICAgICAgICAgICAgICAgICAgIHhfaWwgPSB4X2lfbFtsOihsICsgayldCgogICAgICAgICAgICAgICAgICAgICAgICAjIENvbXB1dGF0aW9uIG9mIGdhbW1hX2tfbQogICAgICAgICAgICAgICAgICAgICAgICBnYW1tYSA9IDAKCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIHJhbmdlKGsgLSAxKToKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYW1tYSArPSBpbnQoKHhfaWxbcF0gPT0ga19tZXJfaltwXSkgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh4X2lsW3AgKyAxXSA9PSBrX21lcl9qW3AgKyAxXSkpCgogICAgICAgICAgICAgICAgICAgICAgICBpZiBnYW1tYSA+PSAoayAtIG0pOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmhvICs9IGdhbW1hCgogICAgICAgICAgICAgICAgICAgICMgVXBkYXRlIHJlc3VsdGluZyBhcnJheQogICAgICAgICAgICAgICAgICAgIG5ld19YX2tbaSwgal0gPSByaG8KCiAgICAgICAgICAgIHJldHVybiBuZXdfWF9rCgogICAgICAgICMgQ29tcHV0ZSB0aGUgZW1iZWRkaW5nIGZvciB0aGUgZ2l2ZW4gbGlzdCBvZiBrX21lcl9sCiAgICAgICAgbmV3X1hfayA9IHN1YkRpbWlzbWF0Y2hFbWJlZGRpbmcoKQoKICAgICAgICAjIFVwZGF0ZSBuZXdfWAogICAgICAgIGlmIG5ld19YIGlzIE5vbmU6CiAgICAgICAgICAgIG5ld19YID0gbmV3X1hfawogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG5ld19YID0gbnAuaHN0YWNrKChuZXdfWCwgbmV3X1hfaykpCgogICAgIyBSZXR1cm4gZGF0YQogICAgcmV0dXJuIG5ld19YCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgIEBqaXQobm9weXRob249VHJ1ZSwgcGFyYWxsZWw9VHJ1ZSkKICAgICAgICBkZWYgc3ViRGltaXNtYXRjaEVtYmVkZGluZyhYX2NvbnY9WF9jb252ZXJ0ZWQsIGtfbWVyPWtfbWVyX2wpOgogICAgICAgICAgICAiIiJDb21wdXRlIHRoZSBEaW1pc21hY3RoRW1iZWRkaW5nIG9uIGZvciB0aGlzIGxpc3Qgb2Yga19tZXIuIiIiCjx8ZmltX2VuZHw+"]
["275a9e1f46557d773f0a6818a6f1f98fee0cca07-5","275a9e1f46557d773f0a6818a6f1f98fee0cca07","PHxmaW1fcHJlZml4fD4KIyBMaW50IGFzOiBweXRob24zCiIiIkEgZmV3IG1ldGhvZHMgdG8gaGFuZGxlIE5hTnMuCgpMaWJyYXJ5IGZ1bmN0aW9ucyB0aGF0IHRha2UgYSBudW1weSBhcnJheS4KQXNzdW1lcyBkaW1lbnNpb25zIGFyZSAobG9jYXRpb24sIHRpbWUpLgoiIiIKaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgc2NpcHkKaW1wb3J0IHNjaXB5Lm5kaW1hZ2UKCgpkZWYgX2Fzc3VtZV8yZChhcnJheSk6CiAgaWYgbGVuKGFycmF5LnNoYXBlKSAhPSAyOgogICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAnRnVuY3Rpb25zIGluIHRoaXMgbGlicmFyeSBhc3N1bWUgYSAyZCBhcnJheSB3aXRoIGRpbWVuc2lvbnMgKGxvY2F0aW9uLCB0aW1lKS4nCiAgICApCgoKZGVmIGZpbGxuYV96ZXJvKGFycmF5KToKPHxmaW1faG9sZXw+CmRlZiBtZWRpYW5fZmlsdGVyKGFycmF5LCBmaWx0ZXJfZGF5cz01KToKICAiIiJNZWRpYW4gZmlsdGVyLgoKICBEb2Vzbid0IGd1YXJhbnRlZSBhbGwgbmFucyB3aWxsIGJlIGZpbGxlZC4KCiAgQXJnczoKICAgIGFycmF5OiBBIDJkIG51bXB5IGFycmF5IHdpdGggZGltZW5zaW9ucyAobG9jYXRpb24sIHRpbWUpCiAgICBmaWx0ZXJfZGF5czogQW4gb2RkIGludGVnZXIgPj0gMSwgc2l6ZSBvZiB0aGUgZmlsdGVyLgogIFJldHVybnM6CiAgICBBIG51bXB5IGFycmF5LgogICIiIgogIF9hc3N1bWVfMmQoYXJyYXkpCiAgcmV0dXJuIHNjaXB5Lm5kaW1hZ2UuZ2VuZXJpY19maWx0ZXIoCiAgICAgIGFycmF5LCBucC5uYW5tZWRpYW4sIHNpemU9KDEsIGZpbHRlcl9kYXlzKSwgbW9kZT0nbmVhcmVzdCcpCgoKZGVmIG1lYW5fZmlsdGVyKGFycmF5LCBmaWx0ZXJfZGF5cz01KToKICAiIiJNZWFuIGZpbHRlci4KCiAgRG9lc24ndCBndWFyYW50ZWUgYWxsIG5hbnMgd2lsbCBiZSBmaWxsZWQuCgogIEFyZ3M6CiAgICBhcnJheTogQSAyZCBudW1weSBhcnJheSB3aXRoIGRpbWVuc2lvbnMgKGxvY2F0aW9uLCB0aW1lKQogICAgZmlsdGVyX2RheXM6IEFuIG9kZCBpbnRlZ2VyID49IDEsIHNpemUgb2YgdGhlIGZpbHRlci4KICBSZXR1cm5zOgogICAgQSBudW1weSBhcnJheS4KICAiIiIKICBfYXNzdW1lXzJkKGFycmF5KQogIHJldHVybiBzY2lweS5uZGltYWdlLmdlbmVyaWNfZmlsdGVyKAogICAgICBhcnJheSwgbnAubmFubWVhbiwgc2l6ZT0oMSwgZmlsdGVyX2RheXMpLCBtb2RlPSduZWFyZXN0JykKCgpkZWYgZmlsbG5hX2JlZ2lubmluZyhhcnJheSwgdmFsdWU9MCk6CiAgIiIiRmlsbHMgY29uc2VjdXRpdmUgTmFOcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGFuIGFycmF5LgoKICBBcmdzOgogICAgYXJyYXk6IEEgMmQgbnVtcHkgYXJyYXkgd2l0aCBkaW1lbnNpb25zIChsb2NhdGlvbiwgdGltZSkKICAgIHZhbHVlOiBGbG9hdCwgdGhlIHZhbHVlIHRvIGZpbGwuCiAgUmV0dXJuczoKICAgIEEgbnVtcHkgYXJyYXkuCiAgIiIiCgogIGRlZiBmaWxsbmFfYmVnaW5uaW5nXzFkKGFycmF5KToKICAgIGFycmF5ID0gYXJyYXkuY29weSgpCiAgICBudW1faW5pdGlhbF9uYW5zID0gMAogICAgd2hpbGUgbnAuaXNuYW4oYXJyYXlbbnVtX2luaXRpYWxfbmFuc10pOgogICAgICBudW1faW5pdGlhbF9uYW5zICs9IDEKICAgICAgaWYgbnVtX2luaXRpYWxfbmFucyA9PSBsZW4oYXJyYXkpOgogICAgICAgIGJyZWFrCiAgICBhcnJheVs6bnVtX2luaXRpYWxfbmFuc10gPSB2YWx1ZQogICAgcmV0dXJuIGFycmF5CgogIF9hc3N1bWVfMmQoYXJyYXkpCiAgcmV0dXJuIG5wLmFwcGx5X2Fsb25nX2F4aXMoZmlsbG5hX2JlZ2lubmluZ18xZCwgMSwgYXJyYXkpCgoKZGVmIGZpbGxuYV9mZmlsbChhcnJheSk6CiAgIiIiRm9yd2FyZCBmaWxscyBhbiBhcnJheS4KCiAgQXJnczoKICAgIGFycmF5OiBBIDJkIG51bXB5IGFycmF5IHdpdGggZGltZW5zaW9ucyAobG9jYXRpb24sIHRpbWUpCiAgUmV0dXJuczoKICAgIEEgbnVtcHkgYXJyYXkuCiAgIiIiCgogIF9hc3N1bWVfMmQoYXJyYXkpCiAgbWFzayA9IG5wLmlzbmFuKGFycmF5KQogIGlkeCA9IG5wLndoZXJlKH5tYXNrLCBucC5hcmFuZ2UobWFzay5zaGFwZVsxXSksIDApCiAgbWF4X2lkeCA9IG5wLm1heGltdW0uYWNjdW11bGF0ZShpZHgsIGF4aXM9MSkKICByZXN1bHQgPSBhcnJheVtucC5hcmFuZ2UobWF4X2lkeC5zaGFwZVswXSlbOiwgTm9uZV0sIG1heF9pZHhdCiAgcmV0dXJuIHJlc3VsdAoKCmRlZiBmaWxsbmFfYmZpbGwoYXJyYXkpOgogICIiIkJhY2t3YXJkIGZpbGxzIGFuIGFycmF5LgoKICBBcmdzOgogICAgYXJyYXk6IEEgMmQgbnVtcHkgYXJyYXkgd2l0aCBkaW1lbnNpb25zIChsb2NhdGlvbiwgdGltZSkKICBSZXR1cm5zOgogICAgQSBudW1weSBhcnJheS4KICAiIiIKCiAgX2Fzc3VtZV8yZChhcnJheSkKICBmbGlwcGVkID0gbnAuZmxpcChhcnJheSkKICBmaWxsZWQgPSBmaWxsbmFfZmZpbGwoZmxpcHBlZCkKICByZXR1cm4gbnAuZmxpcChmaWxsZWQpCgoKZGVmIGZpbGxuYV9pbnRlcnAoYXJyYXkpOgogICIiIkFwcGxpZXMgMS1kIGxpbmVhciBpbnRlcnBvbGF0aW9uLgoKICBBcmdzOgogICAgYXJyYXk6IEEgMmQgbnVtcHkgYXJyYXkgd2l0aCBkaW1lbnNpb25zIChsb2NhdGlvbiwgdGltZSkKICBSZXR1cm5zOgogICAgQSBudW1weSBhcnJheS4KICAiIiIKCiAgZGVmIGludGVycF8xZChhcnJheSk6CiAgICBpbmRpY2VzID0gbnAuYXJhbmdlKGFycmF5LnNoYXBlWzBdKQogICAgdmFsdWVzID0gbnAud2hlcmUobnAuaXNmaW5pdGUoYXJyYXkpKQogICAgIyBJbnRlcnAgcmVxdWlyZXMgYXQgbGVhc3QgMiBub24tbmFuIGVudHJpZXMKICAgIGlmIGxlbih2YWx1ZXNbMF0pIDwgMjoKICAgICAgcmV0dXJuIGFycmF5CiAgICBmID0gc2NpcHkuaW50ZXJwb2xhdGUuaW50ZXJwMWQoCiAgICAgICAgaW5kaWNlc1t2YWx1ZXNdLCBhcnJheVt2YWx1ZXNdLCBib3VuZHNfZXJyb3I9RmFsc2UpCiAgICByZXR1cm4gbnAud2hlcmUobnAuaXNmaW5pdGUoYXJyYXkpLCBhcnJheSwgZihpbmRpY2VzKSkKCiAgX2Fzc3VtZV8yZChhcnJheSkKICByZXR1cm4gbnAuYXBwbHlfYWxvbmdfYXhpcyhpbnRlcnBfMWQsIDEsIGFycmF5KQoKCmRlZiBwbG90X25hbnMoYXJyYXksIHRpdGxlLCBheD1Ob25lKToKICAiIiJQbG90cyBuYW5zLiIiIgogIGlmIGF4IGlzIE5vbmU6CiAgICBwbHQuZmlndXJlKCkKICAgIGF4ID0gcGx0LmdjYSgpCgogIGF4Lmltc2hvdyhucC5pc25hbihhcnJheSksIGludGVycG9sYXRpb249J25lYXJlc3QnKQogIGF4LnNldF94bGFiZWwoJ3RpbWUnKQogIGF4LnNldF95bGFiZWwoJ2xvY2F0aW9uJykKICBheC5zZXRfdGl0bGUodGl0bGUpCgoKZGVmIGxvbmdlc3RfbmFucyhhcnJheSk6CiAgIiIiUmV0dXJucyB0aGUgbG9uZ2VzdCBjb25zZWN1dGl2ZSBuYW5zIGluIGFuIGFycmF5LgoKICBBcmdzOgogICAgYXJyYXk6IEEgMmQgbnVtcHkgYXJyYXkgd2l0aCBkaW1lbnNpb25zIChsb2NhdGlvbiwgdGltZSkKICBSZXR1cm5zOgogICAgQSBudW1weSBhcnJheS4KICAiIiIKCiAgZGVmIGxvbmdlc3RfbmFuc18xZChhcnJheSk6CiAgICBtYXNrID0gbnAuaXNuYW4oYXJyYXkpCiAgICBncm91cGVkID0gWyhlbCwgc3VtKDEKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gZ3JvdXApKQogICAgICAgICAgICAgICBmb3IgZWwsIGdyb3VwIGluIGl0ZXJ0b29scy5ncm91cGJ5KG1hc2spXQogICAgbmFuX2dyb3VwcyA9IFtnWzFdIGZvciBnIGluIGdyb3VwZWQgaWYgZ1swXSA9PSAxXQogICAgaWYgbm90IG5hbl9ncm91cHM6CiAgICAgIHJldHVybiAwCiAgICByZXR1cm4gbWF4KG5hbl9ncm91cHMpCgogIF9hc3N1bWVfMmQoYXJyYXkpCiAgcmV0dXJuIG5wLmFwcGx5X2Fsb25nX2F4aXMobG9uZ2VzdF9uYW5zXzFkLCAxLCBhcnJheSkKPHxmaW1fc3VmZml4fD4KICAiIiJGaWxscyBhbGwgbmFucyB3aXRoIHplcm8uIiIiCiAgcmV0dXJuIG5wLm5hbl90b19udW0oYXJyYXkpCgoKPHxmaW1fZW5kfD4="]
["3229d76ab10bbfa87a15b5fed6baf8daba827acb-2","3229d76ab10bbfa87a15b5fed6baf8daba827acb","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gbm9tZW5jbGF0b3IudmVuZG9yLlF0IGltcG9ydCBRdFdpZGdldHMsIFF0Q29yZQoKCmNsYXNzIFZlcnNpb25XaWRnZXQoUXRXaWRnZXRzLlFGcmFtZSk6CiAgICAiIiJXaWRnZXQgdXNlZCB0byBkaXNwbGF5IHZlcnNpb24uIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudD1Ob25lKToKICAgICAgICAiIiJJbml0aWF0ZSB0aGUgd2lkZ2V0LiIiIgogICAgICAgIHN1cGVyKFZlcnNpb25XaWRnZXQsIHNlbGYpLl9faW5pdF9fKHBhcmVudCkKICAgICAgICBzZWxmLl9zZXR1cF91aSgpCgogICAgZGVmIHNldF92YWx1ZShzZWxmLCB2ZXJzaW9uKToKICAgICAgICAiIiJJbml0aWF0ZSB2YWx1ZS4iIiIKICAgICAgICBpZiB2ZXJzaW9uIGlzIE5vbmU6CiAgICAgICAgICAgIHNlbGYuX3ZlcnNpb25fbGJsLnNldFRleHQoIi4uLiIpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgdmVyc2lvbiA9ICJ7MDowM2R9Ii5mb3JtYXQodmVyc2lvbikKICAgICAgICAgICAgc2VsZi5fdmVyc2lvbl9sYmwuc2V0VGV4dCh2ZXJzaW9uKQoKICAgIGRlZiBfc2V0dXBfdWkoc2VsZik6CiAgICAgICAgIiIiSW5pdGlhbGl6ZSB1c2VyIGludGVyZmFjZS4iIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuc2V0T2JqZWN0TmFtZSgidmVyc2lvbi1ib3giKQoKICAgICAgICBtYWluX2xheW91dCA9IFF0V2lkZ2V0cy5RSEJveExheW91dChzZWxmKQogICAgICAgIG1haW5fbGF5b3V0LnNldFNwYWNpbmcoMTIpCjx8ZmltX2VuZHw+"]
["085f100fc9dd478710d513d48ba180da965ae1f8-3","085f100fc9dd478710d513d48ba180da965ae1f8","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGN2Mgpmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHB5cGxvdCBhcyBwbHQKaW1wb3J0IG51bXB5IGFzIG5wCgpjdjIgPSBjdjIuY3YyCgpjYXAgPSBjdjIuVmlkZW9DYXB0dXJlKDApCndoaWxlIFRydWU6Cjx8ZmltX2hvbGV8PgogICAga2VybmVsMiA9IG5wLm9uZXMoKDUsNSksbnAudWludDgpCgogICAgbG93ZXJfeWVsbG93ID0gbnAuYXJyYXkoWzIwLDgwLDgwXSkKICAgIHVwcGVyX3llbGxvdyA9IG5wLmFycmF5KFs2MCwyNTUsMjU1XSkKCiAgICBtYXNrID0gY3YyLmluUmFuZ2UoaHN2LGxvd2VyX3llbGxvdyx1cHBlcl95ZWxsb3cpCiAgICByZXMgPSBjdjIuYml0d2lzZV9hbmQoZnJhbWUsZnJhbWUsIG1hc2s9IG1hc2spCiAgICAKICAgIG9wZW5pbmcgPSBjdjIubW9ycGhvbG9neUV4KHJlcywgY3YyLk1PUlBIX09QRU4sIGtlcm5lbDIpCiAgICBjbG9zaW5nID0gY3YyLm1vcnBob2xvZ3lFeChvcGVuaW5nLCBjdjIuTU9SUEhfQ0xPU0UsIGtlcm5lbCkKICAgIGNvb2wgPSBjdjIubW9ycGhvbG9neUV4KG1hc2ssIGN2Mi5NT1JQSF9PUEVOLCBrZXJuZWwyKQoKICAgIG5vcm1faW1nID0gY3YyLmN2dENvbG9yKGNsb3NpbmcsY3YyLkNPTE9SX0hTVjJCR1IpCiAgICBjbG9zaW5nX2dyYXkgPSBjdjIuY3Z0Q29sb3Iobm9ybV9pbWcsY3YyLkNPTE9SX0JHUjJHUkFZKQogICAgZWRnZXMgPSBjdjIuQ2FubnkoY2xvc2luZ19ncmF5LDEwMCwyMDApCiAgICAKICAgIAogICAgZWRnZV9pbWcgPSBjdjIuaW1zaG93KCJFZGdlcyIsZWRnZXMpCiAgICAjY3YyLmltc2hvdygiSW1hZ2UiLCBub3JtX2ltZykKICAgIGN2Mi5pbXNob3coIm9yaWdpbmFsIixmcmFtZSkKICAgICNjdjIuaW1zaG93KCJncmF5IixncmF5KQogICAgI2N2Mi5pbXNob3coImhzdiIsaHN2KQogICAgI2N2Mi5pbXNob3coIm1hc2siLG1hc2spCiAgICAjY3YyLmltc2hvdygicmVzIixyZXMpCiAgICBjdjIuaW1zaG93KCJGaW5hbCIsY2xvc2luZykKICAgIGN2Mi5pbXNob3coIkZpbmFsX2dyYXkiLGNsb3NpbmdfZ3JheSkKICAgICNjdjIuaW1zaG93KCJjb29sIixjb29sKQoKICAgIGlmIGN2Mi53YWl0S2V5KDEpICYgMHhGRiA9PSBvcmQoJ3EnKToKICAgICAgICBicmVhawpjYXAucmVsZWFzZSgpCmN2Mi5kZXN0cm95QWxsV2luZG93cygpCjx8ZmltX3N1ZmZpeHw+CiAgICByZXQsZnJhbWUgPSBjYXAucmVhZCgpCiAgICBncmF5ID0gY3YyLmN2dENvbG9yKGZyYW1lLCBjdjIuQ09MT1JfQkdSMkdSQVkpCiAgICBoc3YgPSBjdjIuY3Z0Q29sb3IoZnJhbWUsIGN2Mi5DT0xPUl9CR1IySFNWKQogICAga2VybmVsID0gbnAub25lcygoMzUsMzUpLG5wLnVpbnQ4KQo8fGZpbV9lbmR8Pg=="]
["eb39d00a5747a2c852a419525ab5cc8bcdc2e066-2","eb39d00a5747a2c852a419525ab5cc8bcdc2e066","PHxmaW1fcHJlZml4fD4KIiIiQSBwYWNrYWdlIGZvciBhbHJlYWR5LWltcGxlbWVudGVkIGVuY29kZXIgbW9kZWxzLgo8fGZpbV9ob2xlfD4KZnJvbSB0ZXh0Zm9ybWVyLm1vZGVscy5lbmNvZGVycy5ncnUgaW1wb3J0IEdSVUVuY29kZXIKZnJvbSB0ZXh0Zm9ybWVyLm1vZGVscy5lbmNvZGVycy5sc3RtIGltcG9ydCBMU1RNRW5jb2Rlcgpmcm9tIHRleHRmb3JtZXIubW9kZWxzLmVuY29kZXJzLnNlbGZfYXR0ZW50aW9uIGltcG9ydCBTZWxmQXR0ZW50aW9uRW5jb2Rlcgo8fGZpbV9zdWZmaXh8PgoiIiIKCmZyb20gdGV4dGZvcm1lci5tb2RlbHMuZW5jb2RlcnMuYmlfZ3J1IGltcG9ydCBCaUdSVUVuY29kZXIKZnJvbSB0ZXh0Zm9ybWVyLm1vZGVscy5lbmNvZGVycy5jb252IGltcG9ydCBDb252RW5jb2Rlcgo8fGZpbV9lbmR8Pg=="]
["19536fef8785cfae2960739ec95b06214457f385-3","19536fef8785cfae2960739ec95b06214457f385","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBoNXB5CgpmID0gaDVweS5GaWxlKCJ0cmFpbi5oNSIsICJ3IikKcmdiX2ZpbGUgPSBmLmNyZWF0ZV9kYXRhc2V0KCJyZ2IiLCAoMjAwLCA4OCwgMjAwKSwgbnAudWludDgpCnRhcmdldHNfZmlsZSA9IGYuY3JlYXRlX2RhdGFzZXQoInRhcmdldHMiLCAoMjAwLCAyOCksIG5wLmZsb2F0MzIpCmluZGV4X2ZpbGUgPSAwCgpmb3IgaSBpbiByYW5nZSgyMDApOgogICAgcmdiX2RhdGEgPSBucC56ZXJvcygoMjAwLDg4KSkKICAgIHRhcmdldHNfZGF0YSA9IG5wLm9uZXMoKDEsMjgpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICByZ2JfZmlsZVs6LDosaW5kZXhfZmlsZV0gPSByZ2JfZGF0YQogICAgdGFyZ2V0c19maWxlW2luZGV4X2ZpbGUsOl0gPSB0YXJnZXRzX2RhdGEKICAgIGluZGV4X2ZpbGUgPSBpbmRleF9maWxlICsgMQoKPHxmaW1fZW5kfD4="]
["193958c07328f5d9477d16e5c12719339e0d297a-3","193958c07328f5d9477d16e5c12719339e0d297a","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0ICoKY2xhc3MgU29sdXRpb246CiAgICAjIDMyIG1zLCBmYXN0ZXIgdGhhbiA1OS4yMCUgb2YgUHl0aG9uMyBvbmxpbmUgc3VibWlzc2lvbnMgZm9yIENoZWNrIElmIFR3byBTdHJpbmcgQXJyYXlzIGFyZSBFcXVpdmFsZW50LgogICAgIyAxNC4yIE1CLCBsZXNzIHRoYW4gNjAuNTElIG9mIFB5dGhvbjMgb25saW5lIHN1Ym1pc3Npb25zIGZvciBDaGVjayBJZiBUd28gU3RyaW5nIEFycmF5cyBhcmUgRXF1aXZhbGVudAogICAgZGVmIGFycmF5U3RyaW5nc0FyZUVxdWFsKHNlbGYsIHdvcmQxOiBMaXN0W3N0cl0sIHdvcmQyOiBMaXN0W3N0cl0pIC0+IGJvb2w6CiAgICAgICAgaWYgIiIuam9pbih3b3JkMSkgPT0gIiIuam9pbih3b3JkMik6CiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgIyAyNCBtcywgZmFzdGVyIHRoYW4gOTUuNjIlIG9mIFB5dGhvbjMgb25saW5lIHN1Ym1pc3Npb25zIGZvciBDaGVjayBJZiBUd28gU3RyaW5nIEFycmF5cyBhcmUgRXF1aXZhbGVudC4KICAgICMgMTQuNSBNQiwgbGVzcyB0aGFuIDMxLjcyJSBvZiBQeXRob24zIG9ubGluZSBzdWJtaXNzaW9ucyBmb3IgQ2hlY2sgSWYgVHdvIFN0cmluZyBBcnJheXMgYXJlIEVxdWl2YWxlbnQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIGFycmF5U3RyaW5nc0FyZUVxdWFsKHNlbGYsIHdvcmQxOiBMaXN0W3N0cl0sIHdvcmQyOiBMaXN0W3N0cl0pIC0+IGJvb2w6CiAgICAgICAgcmV0dXJuICIiLmpvaW4od29yZDEpID09ICIiLmpvaW4od29yZDIpCgo8fGZpbV9lbmR8Pg=="]
["3285e486dcc749c6d1c7c006aeaa9df67e7573fc-3","3285e486dcc749c6d1c7c006aeaa9df67e7573fc","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcGF0aCxpbmNsdWRlCgpmcm9tIC52aWV3cyBpbXBvcnQgU3RvcmVMaXN0LEdldGxpbmsKCnVybHBhdHRlcm5zID0gWwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBwYXRoKCdjcmVhdGVfc3RvcmUnLCBTdG9yZUxpc3QuYXNfdmlldygpKSwKICAgICBwYXRoKCd2aWV3X3N0b3JlLzxzdHI6aWQ+JyAsR2V0bGluay5hc192aWV3KCkpLAo8fGZpbV9lbmR8Pg=="]
["7e0653a20e3a8488f02e538f87f76e975ebcd1dd-1","7e0653a20e3a8488f02e538f87f76e975ebcd1dd","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uc2hvcnRjdXRzIGltcG9ydCByZW5kZXIsIHJlZGlyZWN0CmZyb20gZGphbmdvLmh0dHAucmVzcG9uc2UgaW1wb3J0IEh0dHBSZXNwb25zZSwgSnNvblJlc3BvbnNlCmZyb20gZGphbmdvLnZpZXdzLmRlY29yYXRvcnMuY3NyZiBpbXBvcnQgY3NyZl9leGVtcHQKZnJvbSAuZm9ybXMgaW1wb3J0IENlcnRGaWxlVXBsb2FkRm9ybQpmcm9tIC5tb2RlbHMgaW1wb3J0IERldmljZVRva2VuLCBDZXJ0RmlsZQpmcm9tIC51dGlscyBpbXBvcnQgc2VuZF9ub3RpZmljYXRpb24sIHVwbG9hZF9jZXJ0aWZpY2F0ZQoKaW1wb3J0IGpzb24KCgpAY3NyZl9leGVtcHQKZGVmIGRldmljZV90b2tlbl9yZWNlaXZlKHJlcXVlc3QpOgogICAgaWYgcmVxdWVzdC5tZXRob2QgIT0gJ1BVVCc6CiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShzdGF0dXM9NDA1KQo8fGZpbV9ob2xlfD4KICAgIHF1ZXJ5X2RpY3QgPSByZXF1ZXN0LmJvZHkuZGVjb2RlKCd1dGYtOCcpCiAgICBib2R5ID0ganNvbi5sb2FkcyhxdWVyeV9kaWN0KQoKICAgIGVycm9yID0gRmFsc2UKICAgIGlmICdkZXZpY2VfdG9rZW4nIG5vdCBpbiBib2R5OgogICAgICAgIGVycm9yID0gVHJ1ZQogICAgaWYgJ3V1aWQnIG5vdCBpbiBib2R5OgogICAgICAgIGVycm9yID0gVHJ1ZQogICAgaWYgJ3NhbmRib3gnIG5vdCBpbiBib2R5OgogICAgICAgIGVycm9yID0gVHJ1ZQoKICAgIGlmIGVycm9yOgogICAgICAgIHJldHVybiBKc29uUmVzcG9uc2UoeydlcnJvcic6ICdCYWQgUmVxdWVzdCd9LCBzdGF0dXM9NDAwKQoKICAgIGRldmljZV90b2tlbiA9IGJvZHlbJ2RldmljZV90b2tlbiddCiAgICB1dWlkID0gYm9keVsndXVpZCddCiAgICBzYW5kYm94ID0gYm9keVsnc2FuZGJveCddCgogICAgaWYgRGV2aWNlVG9rZW4ub2JqZWN0cy5maWx0ZXIodXVpZD11dWlkKS5jb3VudCgpICE9IDA6CiAgICAgICAgdG9rZW4gPSBEZXZpY2VUb2tlbi5vYmplY3RzLmdldCh1dWlkPXV1aWQpCiAgICAgICAgdG9rZW4uZGV2aWNlX3Rva2VuID0gZGV2aWNlX3Rva2VuCiAgICAgICAgdG9rZW4udXNlX3NhbmRib3ggPSBzYW5kYm94CiAgICAgICAgdG9rZW4uc2F2ZSgpCiAgICBlbHNlOgogICAgICAgIHRva2VuID0gRGV2aWNlVG9rZW4oKQogICAgICAgIHRva2VuLmRldmljZV90b2tlbiA9IGRldmljZV90b2tlbgogICAgICAgIHRva2VuLnV1aWQgPSB1dWlkCiAgICAgICAgdG9rZW4udXNlX3NhbmRib3ggPSBzYW5kYm94CiAgICAgICAgdG9rZW4uc2F2ZSgpCgogICAgcmV0dXJuIEpzb25SZXNwb25zZSh7J3Jlc3VsdCc6ICdzdWNjZXNzJ30sIHN0YXR1cz0yMDApCgoKZGVmIHNlbmRfbm90aWZpY2F0aW9uX3dpdGhfZGV2aWNlX3Rva2VuKHJlcXVlc3QsIG1vZGUsIGRldmljZV90b2tlbiwgZXhlY3V0ZT1UcnVlKToKICAgICMgbW9kZTogMCBvciAxCiAgICAjIDA6IGRldmVsb3AgdGFyZ2V0CiAgICAjIDE6IHByb2R1Y3QgdGFyZ2V0CgogICAgaWYgcmVxdWVzdC51c2VyIGlzIE5vbmUgb3Igbm90IHJlcXVlc3QudXNlci5pc19zdXBlcnVzZXI6CiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZSgnUGxlYXNlIGxvZ2luIGZvciBhZG1pbiB1c2VyLicsIHN0YXR1cz00MDEpCgogICAgaWYgaW50KG1vZGUpID4gMToKICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKCdjaGVjayB5b3VyIG1vZGUgbnVtYmVyKDAgb3IgMSkuJywgc3RhdHVzPTQwMCkKCiAgICBtZXNzYWdlID0gJ1RoaXMgaXMgdGVzdCBwdXNoIG5vdGlmaWNhdGlvbi4nCiAgICBpZiAnbWVzc2FnZScgaW4gcmVxdWVzdC5HRVQ6CiAgICAgICAgbWVzc2FnZSA9IHJlcXVlc3QuR0VUWydtZXNzYWdlJ10KCiAgICB0cnk6CiAgICAgICAgZGV2aWNlX3Rva2VuID0gRGV2aWNlVG9rZW4ub2JqZWN0cy5nZXQoZGV2aWNlX3Rva2VuPWRldmljZV90b2tlbikKICAgICAgICBpZiBub3QgZXhlY3V0ZToKICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZSgnRW5kIHByb2Nlc3MuJywgc3RhdHVzPTIwMCkKCiAgICAgICAgc2VuZF9ub3RpZmljYXRpb24obWVzc2FnZT1tZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZV90b2tlbj1kZXZpY2VfdG9rZW4uZGV2aWNlX3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9zYW5kYm94PVRydWUgaWYgaW50KG1vZGUpID09IDAgZWxzZSBGYWxzZSkKICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKCdTdWNjZXNzZnVsIHNlbmRpbmcuJywgc3RhdHVzPTIwMCkKICAgIGV4Y2VwdCBEZXZpY2VUb2tlbi5Eb2VzTm90RXhpc3Q6CiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZSgnTm90IGZvdW5kLiBZb3VyIGRldmljZSB0b2tlbi4nLCBzdGF0dXM9NDA0KQoKCmRlZiBjZXJ0X3VwbG9hZChyZXF1ZXN0KToKICAgIGlmIG5vdCByZXF1ZXN0LnVzZXIuaXNfc3VwZXJ1c2VyOgogICAgICAgIHJldHVybiByZWRpcmVjdCgnbm90aWZpY2F0aW9uOmxvZ2luJykKCiAgICBpZiByZXF1ZXN0Lm1ldGhvZCA9PSAnUE9TVCc6CiAgICAgICAgZm9ybSA9IENlcnRGaWxlVXBsb2FkRm9ybShyZXF1ZXN0LlBPU1QsIHJlcXVlc3QuRklMRVMpCiAgICAgICAgaWYgZm9ybS5pc192YWxpZCgpOgogICAgICAgICAgICByZXN1bHQgPSB1cGxvYWRfY2VydGlmaWNhdGUocmVxdWVzdC5GSUxFU1snY2VydF9maWxlJ10sIHRhcmdldF9tb2RlPWludChyZXF1ZXN0LlBPU1RbJ3RhcmdldCddKSkKICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCAndXBsb2FkLmh0bWwnLCByZXN1bHQpCgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgJ3VwbG9hZC5odG1sJywgeydlcnJvcic6ICdpbnZhbGlkJ30sIHN0YXR1cz00MDApCiAgICBlbHNlOgogICAgICAgIGZvcm0gPSBDZXJ0RmlsZVVwbG9hZEZvcm0oKQogICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgJ3VwbG9hZC5odG1sJywgeydmb3JtJzogZm9ybX0pCjx8ZmltX3N1ZmZpeHw+CgogICAgaWYgcmVxdWVzdC5ib2R5IGlzIGInJzoKICAgICAgICByZXR1cm4gSnNvblJlc3BvbnNlKHsnZXJyb3InOiAnQmFkIFJlcXVlc3QnfSwgc3RhdHVzPTQwMCkKCjx8ZmltX2VuZHw+"]
["47c4e5a8bec597d2cf8648587a65f7c5d637cb63-1","47c4e5a8bec597d2cf8648587a65f7c5d637cb63","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRoCmltcG9ydCBzeXMKY2xhc3MgbW9kZWwoKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBucC5yYW5kb20uc2VlZCgxKQogICAgICAgICNzdXBlcihtb2RlbCwgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYubGF5ZXJzID0gW10KICAgICAgICAjcHJpbnQoaW5wdXRfc2l6ZSwgb3V0cHV0X3NpemUpCiAgICAgICAgCiAgICBkZWYgYWRkX2xheWVyKHNlbGYsIGxheWVyKToKICAgICAgICBpZihsYXllci5uYW1lID09IE5vbmUpOgogICAgICAgICAgICBsYXllci5uYW1lID0gIkxheWVyXyIgKyBzdHIobGVuKHNlbGYubGF5ZXJzKSsxKQogICAgICAgIHNlbGYubGF5ZXJzLmFwcGVuZChsYXllcikKCiAgICBkZWYgY29tcGlsZShzZWxmKToKICAgICAgICBmb3IgbGF5ZXJJbmRleCBpbiByYW5nZSgwLCBsZW4oc2VsZi5sYXllcnMpLTEpOgogICAgICAgICAgICBsYXllciA9IHNlbGYubGF5ZXJzW2xheWVySW5kZXhdCiAgICAgICAgICAgIG5leHRMYXllciA9IHNlbGYubGF5ZXJzW2xheWVySW5kZXgrMV0KICAgICAgICAgICAgd2VpZ2h0U2hhcGUgPSBucC5jb25jYXRlbmF0ZSgobnAuYXNhcnJheShsYXllci5zaGFwZSksIG5wLmFzYXJyYXkobmV4dExheWVyLnNoYXBlKSkpCiAgICAgICAgICAgICNsYXllci53ZWlnaHRzID0gbnAuZnVsbCh3ZWlnaHRTaGFwZSwgMC41KQogICAgICAgICAgICBsYXllci53ZWlnaHRzID0gbnAuZnVsbCh3ZWlnaHRTaGFwZSwgMSxkdHlwZT0nZmxvYXQzMicpI25wLnJhbmRvbS5yYW5kb21fc2FtcGxlKHdlaWdodFNoYXBlKQogICAgICAgICAgICBsYXllci5iaWFzID0gbnAuZnVsbChuZXh0TGF5ZXIuc2hhcGUsIDEsZHR5cGU9J2Zsb2F0MzInKSNucC5yYW5kb20ucmFuZG9tX3NhbXBsZShuZXh0TGF5ZXIuc2hhcGUpCgogICAgICAgIHNlbGYubGF5ZXJzWy0xXS5iaWFzID0gbnAuZnVsbChzZWxmLmxheWVyc1stMV0uc2hhcGUsIDEsZHR5cGU9J2Zsb2F0MzInKQoKICAgIGRlZiBkaXNwbGF5KHNlbGYpOgogICAgICAgIHByaW50KCJcblxuIikKICAgICAgICBmb3IgbGF5ZXJJbmRleCBpbiByYW5nZSgwLCBsZW4oc2VsZi5sYXllcnMpKToKICAgICAgICAgICAgbGF5ZXIgPSBzZWxmLmxheWVyc1tsYXllckluZGV4XQogICAgICAgICAgICB3ZWlnaHRzQW1vdW50ID0gbGF5ZXIud2VpZ2h0cy5zaXplCiAgICAgICAgICAgIHByaW50KGxheWVyLm5hbWUgKyAiICAtPS0gICIgKyBzdHIobGF5ZXIuc2hhcGUpICsgIiAgLT0tICAiICsgc3RyKHdlaWdodHNBbW91bnQpKQogICAgICAgIHByaW50KCJcblxuIikKCiAgICBkZWYgdHJhaW4oc2VsZiwgaW5wdXQ9Tm9uZSwgdGFyZ2V0PU5vbmUsIGVwb2Nocz1Ob25lLCBsb3NzX2Z1bmN0aW9uPU5vbmUsIGxlYXJuX3JhdGU9MC4wMDAwMSk6CiAgICAgICAgaWYobG9zc19mdW5jdGlvbiA9PSBOb25lKTogcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBsb3NzX2Z1bmN0aW9uOiAiICsgc3RyKGxvc3NfZnVuY3Rpb24pKQogICAgICAgIGxvc3NIaXN0b3J5ID0gW10KICAgICAgICBhY2N1cmFjeUhpc3RvcnkgPSBbXQogICAgICAgIGZvciBlcG9jaCBpbiByYW5nZSgxLCBlcG9jaHMrMSk6CiAgICAgICAgICAgIHdlaWdodF9jaGFuZ2VzID0gW10KICAgICAgICAgICAgYmlhc19jaGFuZ2VzID0gW10KICAgICAgICAgICAgbG9zc1ZhbHVlID0gMAogICAgICAgICAgICBhY2N1cmFjeVZhbHVlID0gMAogICAgICAgICAgICBzdGVwQ291bnQgPSAwCiAgICAgICAgICAgIGZvciBpbnB1dHMsIHRhcmdldHMgaW4gemlwKGlucHV0LCB0YXJnZXQpOgogICAgICAgICAgICAgICAgcHJlZGljdGlvbiA9IHNlbGYucHJlZGljdChpbnB1dHMpCiAgICAgICAgICAgICAgICBsb3NzVmFsdWUgKz0gbG9zc19mdW5jdGlvbihzZWxmLCB0YXJnZXRzLCBwcmVkaWN0aW9uKQogICAgICAgICAgICAgICAgYWNjdXJhY3lWYWx1ZSArPSAgMSAtIG5wLnN1bSh0YXJnZXRzLXByZWRpY3Rpb24pCiAgICAgICAgICAgICAgICAjcHJpbnQodGFyZ2V0cywgcHJlZGljdGlvbikKICAgICAgICAgICAgICAgIHdjLCBiYyA9IHNlbGYuc3RlcF9iYWNrd2FyZCh0YXJnZXRzLCBwcmVkaWN0aW9uLCBsZWFybl9yYXRlKQogICAgICAgICAgICAgICAgd2VpZ2h0X2NoYW5nZXMuYXBwZW5kKHdjKQogICAgICAgICAgICAgICAgYmlhc19jaGFuZ2VzLmFwcGVuZChiYykKICAgICAgICAgICAgICAgICNzZWxmLl9hcHBseUNoYW5nZXMod2MsIGJjKQogICAgICAgICAgICAgICAgcHJvZ3Jlc3MgPSBzdGVwQ291bnQvbGVuKGlucHV0KQogICAgICAgICAgICAgICAgI3ByaW50KHByb2dyZXNzKQogICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGV4dHJhPShsb3NzVmFsdWUvc3RlcENvdW50KSkKICAgICAgICAgICAgICAgIHN0ZXBDb3VudCArPSAxCiAgICAgICAgICAgIGxvc3NIaXN0b3J5LmFwcGVuZChsb3NzVmFsdWUvbGVuKGlucHV0KSkKICAgICAgICAgICAgYWNjdXJhY3lIaXN0b3J5LmFwcGVuZChhY2N1cmFjeVZhbHVlL2xlbihpbnB1dCkpCiAgICAgICAgICAgIHByaW50KCIgLSAiLCBlcG9jaCwiLyIsZXBvY2hzLCAiTG9zczoiLCBsb3NzVmFsdWUvbGVuKGlucHV0KSwgIkFjY3JhY3k6IiwgYWNjdXJhY3lWYWx1ZS9sZW4oaW5wdXQpKQogICAgICAgICAgICBzZWxmLl9hcHBseUNoYW5nZXMobnAuYXZlcmFnZSh3ZWlnaHRfY2hhbmdlcywgYXhpcz0wKSwgbnAuYXZlcmFnZShiaWFzX2NoYW5nZXMsIGF4aXM9MCkpCiAgICAgICAgcmV0dXJuIGxvc3NIaXN0b3J5LCBhY2N1cmFjeUhpc3RvcnkKCiAgICBkZWYgcHJlZGljdChzZWxmLCBpbnB1dHMpOgogICAgICAgIGN1cnJlbnRWYWx1ZXMgPSBpbnB1dHMKCiAgICAgICAgZm9yIGxheWVySW5kZXggaW4gcmFuZ2UoMCwgbGVuKHNlbGYubGF5ZXJzKS0xKToKICAgICAgICAgICAgbGF5ZXIgPSBzZWxmLmxheWVyc1tsYXllckluZGV4XQogICAgICAgICAgICBsYXllci5uZXVyb25zID0gY3VycmVudFZhbHVlcwogICAgICAgICAgICAKICAgICAgICAgICAgaWYobGF5ZXIudXNlX2JpYXMgPT0gVHJ1ZSk6IGN1cnJlbnRWYWx1ZXMgPSBsYXllci5hY3RpdmF0aW9uKHNlbGYsIG5wLmRvdChsYXllci5uZXVyb25zLCBsYXllci53ZWlnaHRzKSArIGxheWVyLmJpYXMpCiAgICAgICAgICAgIGlmKGxheWVyLnVzZV9iaWFzID09IEZhbHNlKTogY3VycmVudFZhbHVlcyA9IGxheWVyLmFjdGl2YXRpb24oc2VsZiwgbnAuZG90KGxheWVyLm5ldXJvbnMsIGxheWVyLndlaWdodHMpKQoKCiAgICAgICAgbGFzdExheWVyID0gc2VsZi5sYXllcnNbLTFdCiAgICAgICAgcmVzdWx0ID0gTm9uZQogICAgICAgIGlmKGxhc3RMYXllci51c2VfYmlhcyA9PSBGYWxzZSk6IHJlc3VsdCA9IGxhc3RMYXllci5hY3RpdmF0aW9uKHNlbGYsIGN1cnJlbnRWYWx1ZXMpCiAgICAgICAgaWYobGFzdExheWVyLnVzZV9iaWFzID09IFRydWUpOiByZXN1bHQgPSBsYXN0TGF5ZXIuYWN0aXZhdGlvbihzZWxmLCBjdXJyZW50VmFsdWVzK2xhc3RMYXllci5iaWFzKQogICAgICAgIGxhc3RMYXllci5uZXVyb25zID0gcmVzdWx0CiAgICAgICAgcmV0dXJuIHJlc3VsdAoKCiAgICBkZWYgc3RlcF9iYWNrd2FyZChzZWxmLCBhY3R1YWwsIHByZWRpY3Rpb24sIGxlYXJuX3JhdGUpOgogICAgICAgIG5leHRMYXllcnNUYXJnZXQgPSBhY3R1YWwKICAgICAgICB3ZWlnaHRfY2hhbmdlcyA9IFtdCiAgICAgICAgYmlhc19jaGFuZ2VzID0gW10KICAgICAgICBmb3IgbGF5ZXJJbmRleCBpbiByYW5nZSgwLCBsZW4oc2VsZi5sYXllcnMpLTEpOgogICAgICAgICAgICBpbmRleCA9IChsZW4oc2VsZi5sYXllcnMpLTEpIC0gbGF5ZXJJbmRleAogICAgICAgICAgICBsYXllciA9IHNlbGYubGF5ZXJzW2luZGV4XQogICAgICAgICAgICBuZXh0TGF5ZXIgPSBzZWxmLmxheWVyc1tpbmRleC0xXQogICAgICAgICAgICAjcHJpbnQobGF5ZXIubmFtZSwgIiAtLT4gIiwgbmV4dExheWVyLm5hbWUpCiAgICAgICAgICAgIGFjY3VyYWN5ID0gbGF5ZXIuYWN0aXZhdGlvbihzZWxmLG5leHRMYXllcnNUYXJnZXQgLSBsYXllci5uZXVyb25zLCBkZXJpdj1UcnVlKQogICAgICAgICAgICAjcHJpbnQoYWNjdXJhY3kuc2hhcGUsIG5leHRMYXllci53ZWlnaHRzLnNoYXBlKQogICAgICAgICAgICB3ZWlnaHRBY2N1cmFjeSA9IG5leHRMYXllci53ZWlnaHRzICogYWNjdXJhY3kKICAgICAgICAgICAgI3ByaW50KHdlaWdodEFjY3VyYWN5KQogICAgICAgICAgICAjcHJpbnQobmV4dExheWVyLndlaWdodHMpCiAgICAgICAgICAgICNuZXh0TGF5ZXIud2VpZ2h0cyArPSB3ZWlnaHRBY2N1cmFjeSpsZWFybl9yYXRlCiAgICAgICAgICAgIHdlaWdodF9jaGFuZ2VzLmFwcGVuZCh3ZWlnaHRBY2N1cmFjeSpsZWFybl9yYXRlKQogICAgICAgICAgICAjcHJpbnQobmV4dExheWVyLndlaWdodHMpCiAgICAgICAgICAgIG5leHRMYXllcnNUYXJnZXQgPSBucC5hdmVyYWdlKHdlaWdodEFjY3VyYWN5LCBheGlzPTEpCiAgICAgICAgICAgICNwcmludChuZXh0TGF5ZXJzVGFyZ2V0KQogICAgICAgICAgICBiaWFzQWNjdXJhY3kgPSBuZXh0TGF5ZXIuYmlhcyAqIGFjY3VyYWN5CiAgICAgICAgICAgICNwcmludChiaWFzQWNjdXJhY3kpCiAgICAgICAgICAgICNwcmludChuZXh0TGF5ZXIuYmlhcykKICAgICAgICAgICAgI25leHRMYXllci5iaWFzICs9IGJpYXNBY2N1cmFjeSpsZWFybl9yYXRlCiAgICAgICAgICAgIGJpYXNfY2hhbmdlcy5hcHBlbmQoYmlhc0FjY3VyYWN5KmxlYXJuX3JhdGUpCiAgICAgICAgICAgICNwcmludChuZXh0TGF5ZXIuYmlhcykKCiAgICAgICAgICAgICNwcmludCgiXG4iKQogICAgICAgIHJldHVybiB3ZWlnaHRfY2hhbmdlcywgYmlhc19jaGFuZ2VzCiAgICAgICAgICAgIAogICAgZGVmIF9hcHBseUNoYW5nZXMoc2VsZiwgd2VpZ2h0X2NoYW5nZXMsIGJpYXNfY2hhbmdlcyk6CiAgICAgICAgYSA9IDEKICAgICAgICAjcHJpbnQod2VpZ2h0X2NoYW5nZXMsIGJpYXNfY2hhbmdlcykKICAgICAgICBmb3IgbGF5ZXJJbmRleCBpbiByYW5nZSgwLCBsZW4oc2VsZi5sYXllcnMpLTEpOgogICAgICAgICAgICBpbmRleCA9IChsZW4oc2VsZi5sYXllcnMpLTEpIC0gbGF5ZXJJbmRleAogICAgICAgICAgICBsYXllciA9IHNlbGYubGF5ZXJzW2luZGV4XQogICAgICAgICAgICBuZXh0TGF5ZXIgPSBzZWxmLmxheWVyc1tpbmRleC0xXQogICAgICAgICAgICBuZXh0TGF5ZXIud2VpZ2h0cyArPSB3ZWlnaHRfY2hhbmdlc1tsYXllckluZGV4XQogICAgICAgICAgICBuZXh0TGF5ZXIuYmlhcyArPSBiaWFzX2NoYW5nZXNbbGF5ZXJJbmRleF0KCiAgICBkZWYgdXBkYXRlX3Byb2dyZXNzKHNlbGYsIHByb2dyZXNzLCBleHRyYT0wKToKICAgICAgICBiYXJMZW5ndGggPSAxMCAjIE1vZGlmeSB0aGlzIHRvIGNoYW5nZSB0aGUgbGVuZ3RoIG9mIHRoZSBwcm9ncmVzcyBiYXIKICAgICAgICBzdGF0dXMgPSAiIgogICAgICAgIGlmIGlzaW5zdGFuY2UocHJvZ3Jlc3MsIGludCk6CiAgICAgICAgICAgIHByb2dyZXNzID0gZmxvYXQocHJvZ3Jlc3MpCiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocHJvZ3Jlc3MsIGZsb2F0KToKICAgICAgICAgICAgcHJvZ3Jlc3MgPSAwCiAgICAgICAgICAgIHN0YXR1cyA9ICJlcnJvcjogcHJvZ3Jlc3MgdmFyIG11c3QgYmUgZmxvYXRcclxuIgogICAgICAgIGlmIHByb2dyZXNzIDwgMDoKICAgICAgICAgICAgcHJvZ3Jlc3MgPSAwCjx8ZmltX2hvbGV8PgogICAgICAgIGlmIHByb2dyZXNzID49IDE6CiAgICAgICAgICAgIHByb2dyZXNzID0gMQogICAgICAgICAgICBzdGF0dXMgPSAiRG9uZS4uLlxyXG4iCiAgICAgICAgYmxvY2sgPSBpbnQocm91bmQoYmFyTGVuZ3RoKnByb2dyZXNzKSkKICAgICAgICB0ZXh0ID0gIlxyUGVyY2VudDogW3swfV0gezF9JSB7Mn0iLmZvcm1hdCggIiMiKmJsb2NrICsgIi0iKihiYXJMZW5ndGgtYmxvY2spLCBwcm9ncmVzcyoxMDAsIHN0YXR1cykgKyAiIC0gIiArIHN0cihleHRyYSkKICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHRleHQpCiAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCgpjbGFzcyBfbGF5ZXIoKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaGFwZT0wLCBuYW1lPU5vbmUsIGFjdGl2YXRpb249Tm9uZSwgdXNlX2JpYXM9RmFsc2UpOgogICAgICAgICNpZihub3QgaXNpbnN0YW5jZShzaGFwZSwgKSk6IHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgdmFsdWUgZm9yIHNoYXBlOiAiICsgc3RyKHNoYXBlKSkKICAgICAgICBzZWxmLnNoYXBlID0gbnAuYXJyYXkoc2hhcGUpCiAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgIHNlbGYud2VpZ2h0cyA9IG5wLmFycmF5KFtdKQogICAgICAgIHNlbGYuYmlhcyA9IG5wLmFycmF5KFtdKQogICAgICAgIHNlbGYubmV1cm9ucyA9IG5wLmZ1bGwoc2hhcGUsIDEpCiAgICAgICAgaWYoYWN0aXZhdGlvbiA9PSBOb25lKTogYWN0aXZhdGlvbiA9IGFjdGl2YXRpb25zLm5vbmUKICAgICAgICBzZWxmLmFjdGl2YXRpb24gPSBhY3RpdmF0aW9uCiAgICAgICAgc2VsZi51c2VfYmlhcyA9IHVzZV9iaWFzCgogICAgCgpjbGFzcyBsYXllcnM6CiAgICBjbGFzcyBmdWxseV9jb25uZWN0ZWQoX2xheWVyKToKICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKiphcmdzKToKICAgICAgICAgICAgX2xheWVyLl9faW5pdF9fKHNlbGYsICoqYXJncykKCmNsYXNzIGFjdGl2YXRpb25zOgogICAgZGVmIHNpZ21vaWQoc2VsZiwgeCwgZGVyaXY9RmFsc2UpOgogICAgICAgIGlmKGRlcml2ID09IFRydWUpOiByZXR1cm4geCAqICgxIC0geCkKICAgICAgICByZXR1cm4gMS8oMStucC5leHAoLXgpKQogICAgZGVmIHJlbHUoc2VsZiwgeCwgZGVyaXY9RmFsc2UpOgogICAgICAgIGlmKGRlcml2ID09IFRydWUpOgogICAgICAgICAgICB4W3g8PTBdID0gMAogICAgICAgICAgICB4W3g+MF0gPSAxCiAgICAgICAgICAgIHJldHVybiB4CiAgICAgICAgcmV0dXJuIG5wLm1heGltdW0oMCx4KQogICAgZGVmIHNvZnRtYXgoc2VsZiwgeCwgZGVyaXY9RmFsc2UpOgogICAgICAgIGV4cG8gPSBucC5leHAoeCkKICAgICAgICBleHBvX3N1bSA9IG5wLnN1bShucC5leHAoeCkpCiAgICAgICAgcmV0dXJuIGV4cG8vZXhwb19zdW0KICAgIGRlZiBub25lKHNlbGYsIHgsIGRlcml2PUZhbHNlKToKICAgICAgICByZXR1cm4geAoKY2xhc3MgbG9zczoKICAgIGRlZiBtZWFuX3NxdWFyZWRfZXJyb3Ioc2VsZiwgYWN0dWFsLCBwcmVkaWN0ZWQpOgogICAgICAgIG1zZSA9IChucC5zcXVhcmUoYWN0dWFsIC0gcHJlZGljdGVkKSkubWVhbihheGlzPU5vbmUpCiAgICAgICAgcmV0dXJuIG1zZQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBzdGF0dXMgPSAiSGFsdC4uLlxyXG4iCjx8ZmltX2VuZHw+"]
["f5977e9d88681f065d7f014658351219c3068d4e-4","f5977e9d88681f065d7f014658351219c3068d4e","PHxmaW1fcHJlZml4fD4KIiIiCkNyZWF0ZWQgb24gTWFyIDMwLCAyMDE2CkBhdXRob3I6IEdyZWdvcnkgS3JhbWlkYQoKQ29weXJpbnQgMjAxNiBHcmVnb3J5IEtyYW1pZGEKCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIiIiCgpmcm9tIHNjcmFweS5zcGlkZXJzIGltcG9ydCBTcGlkZXIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIHNjcmFweS5odHRwIGltcG9ydCBSZXF1ZXN0CmltcG9ydCByZQppbXBvcnQgc3lzCmZyb20gbW9vcmVfc2NyYXBlci5pdGVtcyBpbXBvcnQgR3JhbnQKPHxmaW1fZW5kfD4="]
["7b8cb147665811f07ffef5188955fef437ca71bd-1","7b8cb147665811f07ffef5188955fef437ca71bd","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojLSotIGNvZGluZzogdXRmLTggLSotCgoiIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpDYWxjdWxhdGUgdGhlIGxhcmdlc3QgcHJpbWUgb2YgYW4gaW5wdXQuCiIiIgoKaW1wb3J0IHN5cwo8fGZpbV9lbmR8Pg=="]
["329f4556478ab8b03a8f253ac1ed06479eee8558-1","329f4556478ab8b03a8f253ac1ed06479eee8558","PHxmaW1fcHJlZml4fD4KIiIiIApmcm9tIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9hZDN3L2RqYW5nby1zc3RhdGljL3NyYy80NDAxYTRiYzMwNTg2MThkZmMyZWFmYWVlNmEyM2QyODdhOTllZGU1L3NzdGF0aWMvdGVtcGxhdGV0YWdzL3NzdGF0aWMucHk/YXQ9ZGVmYXVsdCAKbW9kaWZpZWQgYnkgQ2hyaXN0aWFuIFBlcmZlY3QsIDIwMTQvMDkvMDEKIiIiCgppbXBvcnQgb3MKCmZyb20gZGphbmdvIGltcG9ydCB0ZW1wbGF0ZQpmcm9tIGRqYW5nby5jb25mIGltcG9ydCBzZXR0aW5ncwoKCnJlZ2lzdGVyID0gdGVtcGxhdGUuTGlicmFyeSgpCgpAcmVnaXN0ZXIuc2ltcGxlX3RhZwpkZWYgc3N0YXRpYyhwYXRoKToKICAgICcnJwogICAgUmV0dXJucyBhYnNvbHV0ZSBVUkwgdG8gc3RhdGljIGZpbGUgd2l0aCB2ZXJzaW9uaW5nLgogICAgJycnCiAgICBpZiBwYXRoLnN0YXJ0c3dpdGgoc2V0dGluZ3MuU1RBVElDX1VSTCk6CiAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHNldHRpbmdzLlNUQVRJQ19ST09ULCBwYXRoW2xlbihzZXR0aW5ncy5TVEFUSUNfVVJMKTpdKQogICAgZWxpZiBwYXRoLnN0YXJ0c3dpdGgoc2V0dGluZ3MuTUVESUFfVVJMKToKICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4oc2V0dGluZ3MuTUVESUFfUk9PVCwgcGF0aFtsZW4oc2V0dGluZ3MuTUVESUFfVVJMKTpdKQogICAgZWxzZToKICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4oc2V0dGluZ3MuU1RBVElDX1JPT1QsIHBhdGgpCiAgICAgICAgcGF0aCA9IHNldHRpbmdzLlNUQVRJQ19VUkwgKyBwYXRoCiAgICB0cnk6CiAgICAgICAgIyBHZXQgZmlsZSBtb2RpZmljYXRpb24gdGltZS4KICAgICAgICBtdGltZSA9IG9zLnBhdGguZ2V0bXRpbWUoZnVsbF9wYXRoKQogICAgICAgIHJldHVybiAnJXM/JXMnICUgKHBhdGgsIG10aW1lKQogICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIyBSZXR1cm5zIG5vcm1hbCB1cmwgaWYgdGhpcyBmaWxlIHdhcyBub3QgZm91bmQgaW4gZmlsZXN5c3RlbS4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJldHVybiBwYXRoCjx8ZmltX2VuZHw+"]
["1954c35fc2dc53a12682002536c1f98f5908da3f-4","1954c35fc2dc53a12682002536c1f98f5908da3f","PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKZnJvbSB0eXBpbmcgaW1wb3J0IFVuaW9uCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gbHhtbC5ldHJlZSBpbXBvcnQgX0VsZW1lbnQKZnJvbSB1dGlscy5wYXJzZSBpbXBvcnQgcGFyc2VfZGF0ZXRpbWUKZnJvbSB1dGlscy54bWx1dGlscyBpbXBvcnQgZmluZF92YWx1ZQoKPHxmaW1fZW5kfD4="]
["d0fed9984fc3eb0612fbfd0a09817b1465710822-2","d0fed9984fc3eb0612fbfd0a09817b1465710822","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG11bHRpcHJvY2Vzc2luZwpmcm9tIG11bHRpcHJvY2Vzc2luZy5wb29sIGltcG9ydCBQb29sCgpmcm9tIG1jdHMxLmdvX2hldXJpc3RpY3MgaW1wb3J0ICoKZnJvbSB1dGlscyBpbXBvcnQgKgoKTiA9IGNvbmZbJ1NJWkUnXQpNQVhfR0FNRV9MRU4gPSBOICogTiAqMgoKZGVmIHRyZWVfZGVzY2VuZCh0cmVlLCBhbWFmX21hcCwgZGlzcD1GYWxzZSk6CiAgICAiIiIgRGVzY2VuZCB0aHJvdWdoIHRoZSB0cmVlIHRvIGEgbGVhZiAiIiIKICAgIHRyZWUudiArPSAxCiAgICBub2RlcyA9IFt0cmVlXQogICAgcGFzc2VzID0gMAogICAgd2hpbGUgbm9kZXNbLTFdLmNoaWxkcmVuIGlzIG5vdCBOb25lIGFuZCBwYXNzZXMgPCAyOgogICAgICAgIGlmIGRpc3A6ICBwcmludF9wb3Mobm9kZXNbLTFdLnBvcykKCiAgICAgICAgIyBQaWNrIHRoZSBtb3N0IHVyZ2VudCBjaGlsZAogICAgICAgIGNoaWxkcmVuID0gbGlzdChub2Rlc1stMV0uY2hpbGRyZW4pCiAgICAgICAgaWYgZGlzcDoKICAgICAgICAgICAgZm9yIGMgaW4gY2hpbGRyZW46CiAgICAgICAgICAgICAgICBkdW1wX3N1YnRyZWUoYywgcmVjdXJzZT1GYWxzZSkKICAgICAgICByYW5kb20uc2h1ZmZsZShjaGlsZHJlbikgICMgcmFuZG9taXplIHRoZSBtYXggaW4gY2FzZSBvZiBlcXVhbCB1cmdlbmN5CiAgICAgICAgbm9kZSA9IG1heChjaGlsZHJlbiwga2V5PWxhbWJkYSBub2RlOiBub2RlLnJhdmVfdXJnZW5jeSgpKQogICAgICAgIG5vZGVzLmFwcGVuZChub2RlKQoKICAgICAgICBpZiBkaXNwOiAgcHJpbnQoJ2Nob3NlbiAlcycgJSAoc3RyX2Nvb3JkKG5vZGUucG9zLmxhc3QpLCksIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICBpZiBub2RlLnBvcy5sYXN0IGlzIE5vbmU6CiAgICAgICAgICAgIHBhc3NlcyArPSAxCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcGFzc2VzID0gMAogICAgICAgICAgICBpZiBhbWFmX21hcFtub2RlLnBvcy5sYXN0XSA9PSAwOiAgIyBNYXJrIHRoZSBjb29yZGluYXRlIHdpdGggMSBmb3IgYmxhY2sKICAgICAgICAgICAgICAgIGFtYWZfbWFwW25vZGUucG9zLmxhc3RdID0gMSBpZiBub2Rlc1stMl0ucG9zLm4gJSAyID09IDAgZWxzZSAtMQoKICAgICAgICAjIHVwZGF0aW5nIHZpc2l0cyBvbiB0aGUgd2F5ICpkb3duKiByZXByZXNlbnRzICJ2aXJ0dWFsIGxvc3MiLCByZWxldmFudCBmb3IgcGFyYWxsZWxpemF0aW9uCiAgICAgICAgbm9kZS52ICs9IDEKICAgICAgICBpZiBub2RlLmNoaWxkcmVuIGlzIE5vbmUgYW5kIG5vZGUudiA+PSBjb25mWydFWFBBTkRfVklTSVRTJ106CiAgICAgICAgICAgIG5vZGUuZXhwYW5kKCkKCiAgICByZXR1cm4gbm9kZXMKCgpkZWYgdHJlZV91cGRhdGUobm9kZXMsIGFtYWZfbWFwLCBzY29yZSwgZGlzcD1GYWxzZSk6CiAgICAiIiIgU3RvcmUgc2ltdWxhdGlvbiByZXN1bHQgaW4gdGhlIHRyZWUgKEBub2RlcyBpcyB0aGUgdHJlZSBwYXRoKSAiIiIKICAgIGZvciBub2RlIGluIHJldmVyc2VkKG5vZGVzKToKICAgICAgICBpZiBkaXNwOiAgcHJpbnQoJ3VwZGF0aW5nJywgc3RyX2Nvb3JkKG5vZGUucG9zLmxhc3QpLCBzY29yZSA8IDAsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICBub2RlLncgKz0gc2NvcmUgPCAwICAjIHNjb3JlIGlzIGZvciB0by1wbGF5LCBub2RlIHN0YXRpc3RpY3MgZm9yIGp1c3QtcGxheWVkCiAgICAgICAgIyBVcGRhdGUgdGhlIG5vZGUgY2hpbGRyZW4gQU1BRiBzdGF0cyB3aXRoIG1vdmVzIHdlIG1hZGUKICAgICAgICAjIHdpdGggdGhlaXIgY29sb3IKICAgICAgICBhbWFmX21hcF92YWx1ZSA9IDEgaWYgbm9kZS5wb3MubiAlIDIgPT0gMCBlbHNlIC0xCiAgICAgICAgaWYgbm9kZS5jaGlsZHJlbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgZm9yIGNoaWxkIGluIG5vZGUuY2hpbGRyZW46CiAgICAgICAgICAgICAgICBpZiBjaGlsZC5wb3MubGFzdCBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBpZiBhbWFmX21hcFtjaGlsZC5wb3MubGFzdF0gPT0gYW1hZl9tYXBfdmFsdWU6CiAgICAgICAgICAgICAgICAgICAgaWYgZGlzcDogIHByaW50KCcgIEFNQUYgdXBkYXRpbmcnLCBzdHJfY29vcmQoY2hpbGQucG9zLmxhc3QpLCBzY29yZSA+IDAsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgICAgICAgICBjaGlsZC5hdyArPSBzY29yZSA+IDAgICMgcmV2ZXJzZWQgcGVyc3BlY3RpdmUKICAgICAgICAgICAgICAgICAgICBjaGlsZC5hdiArPSAxCiAgICAgICAgc2NvcmUgPSAtc2NvcmUKCgp3b3JrZXJfcG9vbCA9IE5vbmUKCmRlZiB0cmVlX3NlYXJjaCh0cmVlLCBuLCBvd25lcl9tYXAsIGRpc3A9RmFsc2UpOgogICAgIiIiIFBlcmZvcm0gTUNUUyBzZWFyY2ggZnJvbSBhIGdpdmVuIHBvc2l0aW9uIGZvciBhIGdpdmVuICNpdGVyYXRpb25zICIiIgogICAgIyBJbml0aWFsaXplIHJvb3Qgbm9kZQogICAgaWYgdHJlZS5jaGlsZHJlbiBpcyBOb25lOgogICAgICAgIHRyZWUuZXhwYW5kKCkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICMgV2UgY291bGQgc2ltcGx5IHJ1biB0cmVlX2Rlc2NlbmQoKSwgbWNwbGF5b3V0KCksIHRyZWVfdXBkYXRlKCkKICAgICMgc2VxdWVudGlhbGx5IGluIGEgbG9vcC4gIFRoaXMgaXMgZXNzZW50aWFsbHkgd2hhdCB0aGUgY29kZSBiZWxvdwogICAgIyBkb2VzLCBpZiBpdCBzZWVtcyBjb25mdXNpbmchCgo8fGZpbV9lbmR8Pg=="]
["3ef87f2c924ad8bc3c2dade35a66a2ebfab59dd1-1","3ef87f2c924ad8bc3c2dade35a66a2ebfab59dd1","PHxmaW1fcHJlZml4fD4KIyBjb3B5cmlnaHQgcmVzZXJ2ZXIgZm9yIFRocm90YWxlIHN5c3RlbQojIEF1dGhvdXIgUmF2aW5kdSBQZXJlcmEKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkKZnJvbSBza2xlYXJuLnN2bSBpbXBvcnQgU1ZSCmZyb20gc2tsZWFybiBpbXBvcnQgc3ZtCmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0IHRyYWluX3Rlc3Rfc3BsaXQsR3JpZFNlYXJjaENWCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCBleHBsYWluZWRfdmFyaWFuY2Vfc2NvcmUsIGFjY3VyYWN5X3Njb3JlLCBtZWRpYW5fYWJzb2x1dGVfZXJyb3IKZnJvbSBza2xlYXJuLm1ldHJpY3MgaW1wb3J0IG1lYW5fc3F1YXJlZF9lcnJvcgpmcm9tIHNrbGVhcm4uZXh0ZXJuYWxzIGltcG9ydCBqb2JsaWIKZnJvbSBMb2dzRXh0cmFjdGlvbiBpbXBvcnQgIExvZ3NFeHRyYWN0aW9uCgojIGRlZiBsb2dzZXh0cmFjdGlvbigpOgojICAgICBMb2dzRXh0cmFjdGlvbi5Mb2dzRXh0cmFjdGlvbigpCiMgICAgIHByaW50KCJkb25lIikKIyAgICAgcmVhZGNzdigpCgpkZWYgcmVhZGNzdiAoKToKICAgIGRmID0gcGQucmVhZF9jc3YoJy9Vc2Vycy9yYXZpbmR1cGVyZXJhL0Rlc2t0b3AvR1NPQ18yMDE3L0Rldi9UaHJvdGFsZS0tLUV4cGVydC1TeXN0ZW0tZm9yLUF1dG9tYXRpbmctQVBJLVRocm90dGxpbmcvTG9nc0V4dHJhY3Rpb24vRXh0cmFjdGVkRGF0YU1vbi5jc3YnLCBoZWFkZXI9Tm9uZSxkdHlwZT1zdHIpCiAgICBwcmludChkZikKICAgIGNjID0gZGYuZ3JvdXBieShbNV0pLnNpemUoKS5yZXNldF9pbmRleChuYW1lPSdjb3VudHMnKQogICAgZGYxID0gZGYuZHJvcF9kdXBsaWNhdGVzKHN1YnNldD1bNV0pCgogICAgcHJpbnQoZGYxKQo8fGZpbV9ob2xlfD4KZGVmIHJlZ3Jlc3Npb25hbGdvIChjYyxkZik6CiAgICBkYXRhID0gbnVtcHkuYXJyYXkoZGYuaWxvY1s6LDo1XSkuYXN0eXBlKGZsb2F0KQogICAgdGFyZ2V0ID0gbnVtcHkuYXJyYXkoY2MuaWxvY1s6LCAtMV0pLmFzdHlwZShmbG9hdCkKICAgIHByaW50KGRhdGEpCiAgICBwcmludChkYXRhLnNoYXBlKQoKICAgIHByaW50KHRhcmdldC5zaGFwZSkKCiAgICBYID0gZGF0YVs6MTAwMDBdCiAgICB5ID0gdGFyZ2V0WzoxMDAwMF0KCiAgICBYX3RyYWluLCBYX3Rlc3QsIHlfdHJhaW4sIHlfdGVzdCA9IHRyYWluX3Rlc3Rfc3BsaXQoCiAgICAgICAgWC5yZXNoYXBlKC0xLCA1KSwgeSwgdGVzdF9zaXplPTAuNSwgcmFuZG9tX3N0YXRlPTApCgogICAgY2xmID0gc3ZtLlNWUigpCiAgICBjbGYuZml0KFhfdHJhaW4seV90cmFpbikKICAgIHN2bS5TVlIoQz0xLGtlcm5lbD0ncmJmJyxnYW1tYT0wLjUpCiAgICBwcmVkID0gY2xmLnByZWRpY3QoWF90ZXN0KQogICAgcHJkID0gY2xmLnByZWRpY3QoW1sxNi4sIDEyLiwgMjIuLCAxMi4sIDI0Ll1dKQogICAgcHJpbnQocHJkKQoKICAgIG1lYW4gPSBtZWFuX3NxdWFyZWRfZXJyb3IoeV90ZXN0LCBwcmVkKQogICAgcHJpbnQoIiIpCiAgICBwcmludChtZWFuKQogICAgZXggPSBtZWRpYW5fYWJzb2x1dGVfZXJyb3IoeV90ZXN0LCBwcmVkKQogICAgcHJpbnQoIiIpCiAgICBwcmludChleCkKICAgICMKICAgICMgIyBwcmludChwcmVkKQogICAgIyAjIGFjYyA9IGFjY3VyYWN5X3Njb3JlKHByZWQsIHlfdGVzdCkKICAgICMgIyBwcmludChhY2MpCiAgICAjIHNhdmluZ21vZGVsKGNsZikKICAgIHNhdmluZ21vZGVsKGNsZikKCmRlZiBzYXZpbmdtb2RlbChjbGYpOgogICAgcHJpbnQoIiIpCiAgICBqb2JsaWIuZHVtcChjbGYsICdGaW5hbC5wa2wnKQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzogcmVhZGNzdigpCjx8ZmltX3N1ZmZpeHw+CiAgICByZWdyZXNzaW9uYWxnbyhjYyxkZjEpCgoKPHxmaW1fZW5kfD4="]
["d073f1ed99600aceea8d0ff1eeeb5bc0709f1661-4","d073f1ed99600aceea8d0ff1eeeb5bc0709f1661","PHxmaW1fcHJlZml4fD4KbXlfc2VudGVuY2UgPSBpbnB1dCgiRW50ZXIgeW91dCBzZW50ZW5jZSAiKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgbXlfc2VudGVuY2Vfc3BsaXQgPSBteV9zZW50ZW5jZS5zcGxpdCgpCiMgbXlfcmV2X2xpc3QgPSBbXQojIGZvciBpdGVtIGluIG15X3NlbnRlbmNlX3NwbGl0OgojICAgICByZXYgPSAoaXRlbVs6Oi0xXSkKPHxmaW1fZW5kfD4="]
["93cddbddeabed19f65ef96586a6718649a8d8799-4","93cddbddeabed19f65ef96586a6718649a8d8799","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IEl0ZXJhYmxlLCBUdXBsZQoKaW1wb3J0IHRvcmNoLm5uIGFzIG5uCgpmcm9tIC4ubGF5ZXIgaW1wb3J0IEFkYXB0ZXJMYXllcgpmcm9tIC4ubW9kZWxfbWl4aW4gaW1wb3J0IEludmVydGlibGVBZGFwdGVyc01peGluLCBNb2RlbEFkYXB0ZXJzTWl4aW4KCgpjbGFzcyBHUFQyRGVjb2RlckJsb2NrQWRhcHRlcnNNaXhpbjoKICAgICIiIkFkZHMgYWRhcHRlcnMgdG8gdGhlIFRyYW5zZm9ybWVyQmxvY2sgbW9kdWxlIG9mIERpc3RpbEJlcnQuIiIiCgogICAgZGVmIF9pbml0X2FkYXB0ZXJfbW9kdWxlcyhzZWxmKToKICAgICAgICBzZWxmLmF0dGVudGlvbl9hZGFwdGVycyA9IEFkYXB0ZXJMYXllcigibWhfYWRhcHRlciIsIHNlbGYuY29uZmlnKQogICAgICAgIHNlbGYub3V0cHV0X2FkYXB0ZXJzID0gQWRhcHRlckxheWVyKCJvdXRwdXRfYWRhcHRlciIsIHNlbGYuY29uZmlnKQogICAgICAgIHNlbGYuYXR0ZW50aW9uX2FkYXB0ZXJzLl9pbml0X2FkYXB0ZXJfbW9kdWxlcygpCiAgICAgICAgc2VsZi5vdXRwdXRfYWRhcHRlcnMuX2luaXRfYWRhcHRlcl9tb2R1bGVzKCkKCjx8ZmltX2hvbGV8PgogICAgICAgICAgICB5aWVsZCBpLCBsYXllcgo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgR1BUMk1vZGVsQWRhcHRlck1peGluKEludmVydGlibGVBZGFwdGVyc01peGluLCBNb2RlbEFkYXB0ZXJzTWl4aW4pOgogICAgZGVmIGl0ZXJfbGF5ZXJzKHNlbGYpIC0+IEl0ZXJhYmxlW1R1cGxlW2ludCwgbm4uTW9kdWxlXV06CiAgICAgICAgZm9yIGksIGxheWVyIGluIGVudW1lcmF0ZShzZWxmLmJhc2VfbW9kZWwuaCk6Cjx8ZmltX2VuZHw+"]
["d0fa84267e452cb0e9f809479746ee922712063c-5","d0fa84267e452cb0e9f809479746ee922712063c","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KaW1wb3J0IEltYWdlCmltcG9ydCBJbWFnZUNob3BzCmltcG9ydCBJbWFnZURyYXcKaW1wb3J0IEltYWdlRm9udAppbXBvcnQgc2h1dGlsCmltcG9ydCByYW5nZXV0aWxzCmltcG9ydCBvcwppbXBvcnQgc2h1dGlsCgpkZWYgc2xpZGUoZmlsZW5hbWUsc2l6ZSxsaW5lcyk6CiAgICBpbWFnZV9zaXplPTY0MCw0ODAKICAgIGltZz1JbWFnZS5uZXcoJ1JHQkEnLGltYWdlX3NpemUpCiAgICBkcmF3PUltYWdlRHJhdy5EcmF3KGltZykKCiAgICBmb250bmFtZT0nL2hvbWUvYXNlbGxlL3NoYXJlZC9ldGMvVmVyYUJkLnR0ZicKICAgIGZvbnQ9SW1hZ2VGb250LnRydWV0eXBlKGZvbnRuYW1lLHNpemUpCgogICAgIyBjb21wdXRlIGxpbmUgbGVuZ3RoCiAgICBvZmZzZXRzPVtdCiAgICB3aWR0aHM9W10KICAgIGZvbnRzPVtdCiAgICBjb2xvcnM9W10KICAgIGhlaWdodD0wCiAgICBkZWZhdWx0X2NvbG9yPScjZmZlZWRkJwogICAgZm9yIGxpbmUgaW4gbGluZXM6CiAgICAgICAgY29sb3I9ZGVmYXVsdF9jb2xvcgogICAgICAgIGlmIHR5cGUobGluZSk9PXR1cGxlOgogICAgICAgICAgICBmb250cy5hcHBlbmQoSW1hZ2VGb250LnRydWV0eXBlKGZvbnRuYW1lLGxpbmVbMF0pKQogICAgICAgICAgICBpZiBsZW4obGluZSk+MjoKICAgICAgICAgICAgICAgIGNvbG9yPWxpbmVbMl0KICAgICAgICAgICAgbGluZT1saW5lWzFdCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZm9udHMuYXBwZW5kKGZvbnQpCiAgICAgICAgICAgIAogICAgICAgIHcsaD1kcmF3LnRleHRzaXplKGxpbmUsZm9udD1mb250c1stMV0pCiAgICAgICAgb2Zmc2V0cy5hcHBlbmQoaGVpZ2h0KQogICAgICAgIHdpZHRocy5hcHBlbmQodykKICAgICAgICBjb2xvcnMuYXBwZW5kKGNvbG9yKQogICAgICAgIGhlaWdodCs9aW50KGgrLjEwKmgpCgogICAgaGVpZ2h0X3N0YXJ0PWltYWdlX3NpemVbMV0vMi1oZWlnaHQvMgogICAgZm9yIGluZGV4IGluIHJhbmdlKGxlbihvZmZzZXRzKSk6CiAgICAgICAgaWYgdHlwZShsaW5lc1tpbmRleF0pPT10dXBsZToKICAgICAgICAgICAgbGluZT1saW5lc1tpbmRleF1bMV0KICAgICAgICBlbHNlOgogICAgICAgICAgICBsaW5lPWxpbmVzW2luZGV4XQogICAgICAgIGRyYXcudGV4dCgoaW1hZ2Vfc2l6ZVswXS8yLXdpZHRoc1tpbmRleF0vMixoZWlnaHRfc3RhcnQrb2Zmc2V0c1tpbmRleF0pLGxpbmUsZm9udD1mb250c1tpbmRleF0sZmlsbD1jb2xvcnNbaW5kZXhdKQoKICAgIGltZy5zYXZlKGZpbGVuYW1lKQoKY2xhc3MgVklERU86CiAgICBkZWYgX19pbml0X18oc2VsZixkaXJlY3RvcnkpOgogICAgICAgIHNlbGYuZGlyZWN0b3J5PWRpcmVjdG9yeQogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmRpcmVjdG9yeSk6CiAgICAgICAgICAgIG9zLm1rZGlyKHNlbGYuZGlyZWN0b3J5KQogICAgICAgIHNlbGYuZnJhbWU9MAogICAgICAgIHNlbGYuZnBzPTMwCgogICAgZGVmIGZyYW1lX2ZpbGUoc2VsZixpbnB1dF9mcmFtZSk6CiAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwidmlkZW8uJTA2ZC5wbmciJWlucHV0X2ZyYW1lKQoKICAgIGRlZiBhZGRfZnJhbWUoc2VsZixpbWFnZV9maWxlbmFtZSxjb3VudD0xKToKICAgICAgICAjcHJpbnQgImFkZGluZyBmcmFtZSAlcyB3aXRoICVkIGNvcGllcyAoaW5kZXg9JWQpIiUoaW1hZ2VfZmlsZW5hbWUsY291bnQsc2VsZi5mcmFtZSksCiAgICAgICAgaWYgY291bnQ+MTogcHJpbnQgIkFkZGluZyAlLTkwcyAlMy4xZiBzIiUoaW1hZ2VfZmlsZW5hbWUsY291bnQqc2VsZi5mcHMpCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UoY291bnQpOgogICAgICAgICAgICAjcHJpbnQgIkNvcHlpbmcgJXMgdG8gJXMiJShpbWFnZV9maWxlbmFtZSxzZWxmLmZyYW1lX2ZpbGUoc2VsZi5mcmFtZSkpCiAgICAgICAgICAgICNvcy5zeW1saW5rKGltYWdlX2ZpbGVuYW1lLHNlbGYuZnJhbWVfZmlsZShzZWxmLmZyYW1lKSkKICAgICAgICAgICAgc2h1dGlsLmNvcHkoaW1hZ2VfZmlsZW5hbWUsc2VsZi5mcmFtZV9maWxlKHNlbGYuZnJhbWUpKQogICAgICAgICAgICBzZWxmLmZyYW1lKz0xCiAgICAgICAgI3ByaW50IHNlbGYuZnJhbWUKCiAgICBkZWYgYWRkX2RpcmVjdG9yeShzZWxmLGRpcmVjdG9yeSxzdGFydD0tMSxlbmQ9LTEsc3RlcD0xLGR1cGxpY2F0ZT0xKToKICAgICAgICByYW5nZXM9cmFuZ2V1dGlscy5GaWxlUmFuZ2VzKGRpcmVjdG9yeSkKICAgICAgICBmaWxlcz1bXQogICAgICAgIGZvciBya2V5LHIgaW4gcmFuZ2VzLnJhbmdlcy5pdGVtcygpOgogICAgICAgICAgICBwYXR0ZXJuPXIuZm9ybWF0KEZhbHNlLEZhbHNlKQogICAgICAgICAgICBpZiBwYXR0ZXJuLmVuZHN3aXRoKCIucG5nIik6CiAgICAgICAgICAgICAgICBwcmludCAiQWRkaW5nICVzLyVzIiUoZGlyZWN0b3J5LHBhdHRlcm4pCiAgICAgICAgICAgICAgICBpZiBzdGFydD09LTEgb3IgZW5kPT0tMToKICAgICAgICAgICAgICAgICAgICBmaWxlcz1tYXAobGFtYmRhIHg6b3MucGF0aC5qb2luKGRpcmVjdG9yeSx4KSxyLmFsbF9maWxlbmFtZXMoKSkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgZmlsZXM9bWFwKGxhbWJkYSB4Om9zLnBhdGguam9pbihkaXJlY3Rvcnksci5maWxlbmFtZSh4KSkscmFuZ2Uoc3RhcnQsZW5kKzEpKQogICAgICAgIHByaW50ICJBZGRpbmcgJS05MHMgJTMuMWYgcyIlKGRpcmVjdG9yeSxsZW4oZmlsZXMpKnNlbGYuZnBzKQogICAgICAgIGNvdW50PTAKICAgICAgICBwcmludCBzdGVwCiAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgaWYgY291bnQlc3RlcD09MDoKICAgICAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShkdXBsaWNhdGUpOgogICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkX2ZyYW1lKGZpbGUpCiAgICAgICAgICAgIGNvdW50Kz0xCjx8ZmltX2VuZHw+"]
["327123df03e692198f94df750489cfb9b5303e58-4","327123df03e692198f94df750489cfb9b5303e58","PHxmaW1fcHJlZml4fD4KZnJvbSBHUHkuY29yZS5wYXJhbWV0ZXJpemF0aW9uIGltcG9ydCBwcmlvcnMKClJhd1ByaW9yVHlwZSA9IHByaW9ycy5QcmlvcgoKUFJJT1JfRElDVCA9IGRpY3QoCiAgICBHQVVTU0lBTj1wcmlvcnMuR2F1c3NpYW4sCiAgICBNVUxUSVZBUklBVEVHQVVTU0lBTj1wcmlvcnMuTXVsdGl2YXJpYXRlR2F1c3NpYW4sCiAgICBMT0dOT1JNQUw9cHJpb3JzLkxvZ0dhdXNzaWFuLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBVTklGT1JNPXByaW9ycy5Vbmlmb3JtLAogICAgR0FNTUE9cHJpb3JzLkdhbW1hLAogICAgSU5WRVJTRUdBTU1BPXByaW9ycy5JbnZlcnNlR2FtbWEsCiAgICBER1BMVk1LRkRBPXByaW9ycy5ER1BMVk1fS0ZEQSwKPHxmaW1fZW5kfD4="]
["93bffeb733876b61ff876764b624b5f962b21191-1","93bffeb733876b61ff876764b624b5f962b21191","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBHZW5lcmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4gIERPIE5PVCBFRElUIQojIHNvdXJjZTogRXhhbXBsZU1lc3NhZ2UucHJvdG8KCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBkZXNjcmlwdG9yIGFzIF9kZXNjcmlwdG9yCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBtZXNzYWdlIGFzIF9tZXNzYWdlCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCByZWZsZWN0aW9uIGFzIF9yZWZsZWN0aW9uCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBzeW1ib2xfZGF0YWJhc2UgYXMgX3N5bWJvbF9kYXRhYmFzZQojIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChpbXBvcnRzKQoKX3N5bV9kYiA9IF9zeW1ib2xfZGF0YWJhc2UuRGVmYXVsdCgpCgoKCgpERVNDUklQVE9SID0gX2Rlc2NyaXB0b3IuRmlsZURlc2NyaXB0b3IoCiAgbmFtZT0nRXhhbXBsZU1lc3NhZ2UucHJvdG8nLAogIHBhY2thZ2U9J2V4YW1wbGUnLAogIHN5bnRheD0ncHJvdG8zJywKICBzZXJpYWxpemVkX29wdGlvbnM9Tm9uZSwKICBjcmVhdGVfa2V5PV9kZXNjcmlwdG9yLl9pbnRlcm5hbF9jcmVhdGVfa2V5LAogIHNlcmlhbGl6ZWRfcGI9Yidcblx4MTRceDQ1eGFtcGxlTWVzc2FnZS5wcm90b1x4MTJceDA3XHg2NXhhbXBsZVwiMVxuXHgwNlBlcnNvblx4MTJcblxuXHgwMmlkXHgxOFx4MDEgXHgwMShceDA1XHgxMlx4MGNcblx4MDRuYW1lXHgxOFx4MDIgXHgwMShcdFx4MTJcclxuXHgwNVx4NjVtYWlsXHgxOFx4MDMgXHgwMShcdFwiXlxuXHgwN1x4NDNvbXBhbnlceDEyXHgwY1xuXHgwNG5hbWVceDE4XHgwMSBceDAxKFx0XHgxMiFcblx4MDhceDY0aXJlY3Rvclx4MThceDAyIFx4MDEoXHgwYlx4MzJceDBmLmV4YW1wbGUuUGVyc29uXHgxMlwiXG5cdGVtcGxveWVlc1x4MThceDAzIFx4MDMoXHgwYlx4MzJceDBmLmV4YW1wbGUuUGVyc29uYlx4MDZwcm90bzMnCikKCgoKCl9QRVJTT04gPSBfZGVzY3JpcHRvci5EZXNjcmlwdG9yKAogIG5hbWU9J1BlcnNvbicsCiAgZnVsbF9uYW1lPSdleGFtcGxlLlBlcnNvbicsCiAgZmlsZW5hbWU9Tm9uZSwKICBmaWxlPURFU0NSSVBUT1IsCiAgY29udGFpbmluZ190eXBlPU5vbmUsCiAgY3JlYXRlX2tleT1fZGVzY3JpcHRvci5faW50ZXJuYWxfY3JlYXRlX2tleSwKICBmaWVsZHM9WwogICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAogICAgICBuYW1lPSdpZCcsIGZ1bGxfbmFtZT0nZXhhbXBsZS5QZXJzb24uaWQnLCBpbmRleD0wLAogICAgICBudW1iZXI9MSwgdHlwZT01LCBjcHBfdHlwZT0xLCBsYWJlbD0xLAogICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT0wLAogICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAogICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAogICAgICBzZXJpYWxpemVkX29wdGlvbnM9Tm9uZSwgZmlsZT1ERVNDUklQVE9SLCAgY3JlYXRlX2tleT1fZGVzY3JpcHRvci5faW50ZXJuYWxfY3JlYXRlX2tleSksCiAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCiAgICAgIG5hbWU9J25hbWUnLCBmdWxsX25hbWU9J2V4YW1wbGUuUGVyc29uLm5hbWUnLCBpbmRleD0xLAogICAgICBudW1iZXI9MiwgdHlwZT05LCBjcHBfdHlwZT05LCBsYWJlbD0xLAogICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT1iIiIuZGVjb2RlKCd1dGYtOCcpLAogICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAogICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAogICAgICBzZXJpYWxpemVkX29wdGlvbnM9Tm9uZSwgZmlsZT1ERVNDUklQVE9SLCAgY3JlYXRlX2tleT1fZGVzY3JpcHRvci5faW50ZXJuYWxfY3JlYXRlX2tleSksCiAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCiAgICAgIG5hbWU9J2VtYWlsJywgZnVsbF9uYW1lPSdleGFtcGxlLlBlcnNvbi5lbWFpbCcsIGluZGV4PTIsCiAgICAgIG51bWJlcj0zLCB0eXBlPTksIGNwcF90eXBlPTksIGxhYmVsPTEsCiAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPWIiIi5kZWNvZGUoJ3V0Zi04JyksCiAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCiAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCiAgICAgIHNlcmlhbGl6ZWRfb3B0aW9ucz1Ob25lLCBmaWxlPURFU0NSSVBUT1IsICBjcmVhdGVfa2V5PV9kZXNjcmlwdG9yLl9pbnRlcm5hbF9jcmVhdGVfa2V5KSwKICBdLAogIGV4dGVuc2lvbnM9WwogIF0sCiAgbmVzdGVkX3R5cGVzPVtdLAogIGVudW1fdHlwZXM9WwogIF0sCiAgc2VyaWFsaXplZF9vcHRpb25zPU5vbmUsCiAgaXNfZXh0ZW5kYWJsZT1GYWxzZSwKICBzeW50YXg9J3Byb3RvMycsCiAgZXh0ZW5zaW9uX3Jhbmdlcz1bXSwKICBvbmVvZnM9WwogIF0sCiAgc2VyaWFsaXplZF9zdGFydD0zMywKICBzZXJpYWxpemVkX2VuZD04MiwKKQoKCl9DT01QQU5ZID0gX2Rlc2NyaXB0b3IuRGVzY3JpcHRvcigKICBuYW1lPSdDb21wYW55JywKICBmdWxsX25hbWU9J2V4YW1wbGUuQ29tcGFueScsCiAgZmlsZW5hbWU9Tm9uZSwKICBmaWxlPURFU0NSSVBUT1IsCiAgY29udGFpbmluZ190eXBlPU5vbmUsCiAgY3JlYXRlX2tleT1fZGVzY3JpcHRvci5faW50ZXJuYWxfY3JlYXRlX2tleSwKICBmaWVsZHM9WwogICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAogICAgICBuYW1lPSduYW1lJywgZnVsbF9uYW1lPSdleGFtcGxlLkNvbXBhbnkubmFtZScsIGluZGV4PTAsCiAgICAgIG51bWJlcj0xLCB0eXBlPTksIGNwcF90eXBlPTksIGxhYmVsPTEsCiAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPWIiIi5kZWNvZGUoJ3V0Zi04JyksCiAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCiAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCiAgICAgIHNlcmlhbGl6ZWRfb3B0aW9ucz1Ob25lLCBmaWxlPURFU0NSSVBUT1IsICBjcmVhdGVfa2V5PV9kZXNjcmlwdG9yLl9pbnRlcm5hbF9jcmVhdGVfa2V5KSwKICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKICAgICAgbmFtZT0nZGlyZWN0b3InLCBmdWxsX25hbWU9J2V4YW1wbGUuQ29tcGFueS5kaXJlY3RvcicsIGluZGV4PTEsCiAgICAgIG51bWJlcj0yLCB0eXBlPTExLCBjcHBfdHlwZT0xMCwgbGFiZWw9MSwKICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9Tm9uZSwKICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKICAgICAgc2VyaWFsaXplZF9vcHRpb25zPU5vbmUsIGZpbGU9REVTQ1JJUFRPUiwgIGNyZWF0ZV9rZXk9X2Rlc2NyaXB0b3IuX2ludGVybmFsX2NyZWF0ZV9rZXkpLAogICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAogICAgICBuYW1lPSdlbXBsb3llZXMnLCBmdWxsX25hbWU9J2V4YW1wbGUuQ29tcGFueS5lbXBsb3llZXMnLCBpbmRleD0yLAogICAgICBudW1iZXI9MywgdHlwZT0xMSwgY3BwX3R5cGU9MTAsIGxhYmVsPTMsCiAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPVtdLAogICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAogICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAogICAgICBzZXJpYWxpemVkX29wdGlvbnM9Tm9uZSwgZmlsZT1ERVNDUklQVE9SLCAgY3JlYXRlX2tleT1fZGVzY3JpcHRvci5faW50ZXJuYWxfY3JlYXRlX2tleSksCiAgXSwKICBleHRlbnNpb25zPVsKICBdLAogIG5lc3RlZF90eXBlcz1bXSwKICBlbnVtX3R5cGVzPVsKICBdLAogIHNlcmlhbGl6ZWRfb3B0aW9ucz1Ob25lLAogIGlzX2V4dGVuZGFibGU9RmFsc2UsCiAgc3ludGF4PSdwcm90bzMnLAogIGV4dGVuc2lvbl9yYW5nZXM9W10sCiAgb25lb2ZzPVsKICBdLAogIHNlcmlhbGl6ZWRfc3RhcnQ9ODQsCiAgc2VyaWFsaXplZF9lbmQ9MTc4LAopCgpfQ09NUEFOWS5maWVsZHNfYnlfbmFtZVsnZGlyZWN0b3InXS5tZXNzYWdlX3R5cGUgPSBfUEVSU09OCl9DT01QQU5ZLmZpZWxkc19ieV9uYW1lWydlbXBsb3llZXMnXS5tZXNzYWdlX3R5cGUgPSBfUEVSU09OCkRFU0NSSVBUT1IubWVzc2FnZV90eXBlc19ieV9uYW1lWydQZXJzb24nXSA9IF9QRVJTT04KREVTQ1JJUFRPUi5tZXNzYWdlX3R5cGVzX2J5X25hbWVbJ0NvbXBhbnknXSA9IF9DT01QQU5ZCl9zeW1fZGIuUmVnaXN0ZXJGaWxlRGVzY3JpcHRvcihERVNDUklQVE9SKQoKUGVyc29uID0gX3JlZmxlY3Rpb24uR2VuZXJhdGVkUHJvdG9jb2xNZXNzYWdlVHlwZSgnUGVyc29uJywgKF9tZXNzYWdlLk1lc3NhZ2UsKSwgewogICdERVNDUklQVE9SJyA6IF9QRVJTT04sCiAgJ19fbW9kdWxlX18nIDogJ0V4YW1wbGVNZXNzYWdlX3BiMicKICAjIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zY29wZTpleGFtcGxlLlBlcnNvbikKICB9KQpfc3ltX2RiLlJlZ2lzdGVyTWVzc2FnZShQZXJzb24pCgpDb21wYW55ID0gX3JlZmxlY3Rpb24uR2VuZXJhdGVkUHJvdG9jb2xNZXNzYWdlVHlwZSgnQ29tcGFueScsIChfbWVzc2FnZS5NZXNzYWdlLCksIHsKICAnREVTQ1JJUFRPUicgOiBfQ09NUEFOWSwKICAnX19tb2R1bGVfXycgOiAnRXhhbXBsZU1lc3NhZ2VfcGIyJwogICMgQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Njb3BlOmV4YW1wbGUuQ29tcGFueSkKPHxmaW1faG9sZXw+Cl9zeW1fZGIuUmVnaXN0ZXJNZXNzYWdlKENvbXBhbnkpCgoKIyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobW9kdWxlX3Njb3BlKQo8fGZpbV9zdWZmaXh8PgogIH0pCjx8ZmltX2VuZHw+"]
["f1b01f955f818acc87de0b128d9b1f8869bedffb-2","f1b01f955f818acc87de0b128d9b1f8869bedffb","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGltcG9ydGxpYgppbXBvcnQgbG9nZ2luZwoKZnJvbSAubWFwcyBpbXBvcnQgTU9ERUxfU1RSVUNUVVJFX1RPX01PRFVMRV9OQU1FX01BUAoKbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKY2xhc3MgS2VyYXNBcHBJbXBvcnRlcjoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbF9zdHJ1Y3R1cmUpOgogICAgICAgIGxvZy5kZWJ1ZyhmIkNyZWF0aW5nIHt0eXBlKHNlbGYpLl9fbmFtZV9ffSBjbGFzcyIpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBsb2cuZGVidWcoIk1hcHBpbmcgbW9kZWwgc3RydWN0dXJlIHRvIG1vZHVsZSBuYW1lIikKICAgICAgICAgICAgc2VsZi5tYXBwZWRfbW9kdWxlX25hbWUgPSBNT0RFTF9TVFJVQ1RVUkVfVE9fTU9EVUxFX05BTUVfTUFQWwogICAgICAgICAgICAgICAgbW9kZWxfc3RydWN0dXJlCiAgICAgICAgICAgIF0KICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgIGxvZy5lcnJvcigKICAgICAgICAgICAgICAgIGYiUHJvZ3JhbSBkbyBub3Qgc3VwcG9ydCB0aGlzIG1vZGVsIHN0cnVjdHVyZTogYHttb2RlbF9zdHJ1Y3R1cmV9YC4gIgogICAgICAgICAgICAgICAgIkNoZWNrIHlvdXIgY29uZmlnLiIKICAgICAgICAgICAgKQogICAgICAgICAgICByYWlzZQogICAgICAgIHNlbGYubW9kZWxfc3RydWN0dXJlID0gbW9kZWxfc3RydWN0dXJlCiAgICAgICAgc2VsZi5tb2R1bGVfdG9faW1wb3J0ID0gKAogICAgICAgICAgICBmInRlbnNvcmZsb3cua2VyYXMuYXBwbGljYXRpb25zLntzZWxmLm1hcHBlZF9tb2R1bGVfbmFtZX0iCiAgICAgICAgKQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGxvZy5kZWJ1ZyhmIkltcG9ydGluZyB7c2VsZi5tb2R1bGVfdG9faW1wb3J0fSIpCiAgICAgICAgICAgIHNlbGYuYXBwID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoc2VsZi5tb2R1bGVfdG9faW1wb3J0KQogICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgbG9nLmVycm9yKAogICAgICAgICAgICAgICAgZiJDYW5ub3QgaW1wb3J0IGB7c2VsZi5tb2R1bGVfdG9faW1wb3J0fWAhICIKICAgICAgICAgICAgICAgICJDaGVjayBpZiBpdCBleGlzdHMgaHR0cHM6Ly9naXRodWIuY29tL2tlcmFzLXRlYW0va2VyYXMtYXBwbGljYXRpb25zIgogICAgICAgICAgICApCiAgICAgICAgICAgIHJhaXNlCgogICAgZGVmIGdldF9rZXJhc19wcmVwcm9jZXNzX2Z1bmMoc2VsZik6Cjx8ZmltX2hvbGV8PgogICAgZGVmIGdldF9rZXJhc19tb2RlbChzZWxmKToKICAgICAgICBsb2cuZGVidWcoZiJHZXR0aW5nIGtlcmFzIHByZXRyYWluZWQgbW9kZWwgZnJvbSB7c2VsZi5tb2R1bGVfdG9faW1wb3J0fSIpCiAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5hcHAsIHNlbGYubW9kZWxfc3RydWN0dXJlKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGxvZy5kZWJ1ZyhmIkdldHRpbmcgcHJlcHJvY2VzcyBmdW5jdGlvbiBmcm9tIHtzZWxmLm1vZHVsZV90b19pbXBvcnR9IikKICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLmFwcCwgInByZXByb2Nlc3NfaW5wdXQiKQoKPHxmaW1fZW5kfD4="]
["7bee34f980e97394afb143751c755b18a3206ec9-1","7bee34f980e97394afb143751c755b18a3206ec9","PHxmaW1fcHJlZml4fD4KbGFyZ2VzdCA9IE5vbmUgCnNtYWxsZXN0ID0gTm9uZQoKd2hpbGUgVHJ1ZToKICAgIG51bSA9IGlucHV0KCJFbnRlciBhIG51bWJlcjogIikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgCiAgICBpZiBudW0gPT0gImRvbmUiIDogYnJlYWsgIyBpZiAiZG9uZSIgaXMgaW50cm9kdWNlZCB0aGUgcHJvZ3JhbSBlbmQuCiAgICB0cnk6IAogICAgICAgIHZhcjEgPSBpbnQobnVtKQo8fGZpbV9lbmR8Pg=="]
["fde8d038cc8a1e669f9f8effb2a0afb484d82231-3","fde8d038cc8a1e669f9f8effb2a0afb484d82231","PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKCiNFamVtcGxvIGRlIHVuYSBmdW5jacOzbiBxdWUgTk8gdGllbmUgcGFyw6FtZXRyb3MgKG5vIHJlY2liZSBkYXRvcykgeSBubyByZXRvcm5hIGRhdG9zCjx8ZmltX2hvbGV8PgojRWplbXBsbyBkZSB1bmEgZnVuY2nDs24gcXVlIFNJIHRpZW5lIHBhcsOhbWV0cm9zIChTSSByZWNpYmUgZGF0b3MpIHkgbm8gcmV0b3JuYSBkYXRvcwpkZWYgRnVuYzIobm9tYnJlLCBudW1lcm8pOgogICAgcHJpbnQoZiJNZSBsbGFtbyB7bm9tYnJlfSB5IG1pIG7Dum1lcm8gZGUgbGEgc3VlcnRlIGVzIHtudW1lcm99IikKCgojRWplbXBsbyBkZSB1bmEgZnVuY2nDs24gcXVlIFNJIHRpZW5lIHBhcsOhbWV0cm9zIChTSSByZWNpYmUgZGF0b3MpIHkgU0kgcmV0b3JuYSBkYXRvcwpkZWYgRnVuYzMoZnJhc2UpOgogICAgI3ByaW50KGYiTGEgZnJhc2UgZXM6IHtmcmFzZX0iKQogICAgY2FudCA9IDAKICAgIGNhbnQgPSBsZW4oZnJhc2UpCiAgICByZXR1cm4gY2FudAoKI0VqZW1wbG8gZGUgdW5hIGZ1bmNpw7NuIHF1ZSBOTyB0aWVuZSBwYXLDoW1ldHJvcyAobm8gcmVjaWJlIGRhdG9zKSB5IFNJIHJldG9ybmEgZGF0b3MKZGVmIEZ1bmM0KCk6CiAgICByZXR1cm4gZGF0ZXRpbWUubm93KCkuZGF0ZSgpLnN0cmZ0aW1lKCIlQSIpCgpGdW5jMSgpCkZ1bmMyKCJPbWFyIiwgNykKZGF0byA9IEZ1bmMzKCJIb2xhIGEgdG9kb3MiKQpwcmludChmIkRhdG86IHtkYXRvfSIpCnByaW50KEZ1bmMzKCJBZGlvcyEhISIpKQoKZGF0bzIgPSBGdW5jNCgpCnByaW50KGYiIikKPHxmaW1fc3VmZml4fD4KZGVmIEZ1bmMxKCk6CiAgICBwcmludCgiSG9sYSBhIHRvZG9zISEhIikKCgo8fGZpbV9lbmR8Pg=="]
["de1eb76531780b2f72dc7573a1776b7615e3d8f1-3","de1eb76531780b2f72dc7573a1776b7615e3d8f1","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFzeW5jaW8KaW1wb3J0IHVuaXR0ZXN0CmZyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgTW9jawoKZnJvbSBDcnlwdG8uUHVibGljS2V5IGltcG9ydCBSU0EKZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IHRleHRfZm9ybWF0Cgpmcm9tIGJmY3AubWVzc2FnZXMgaW1wb3J0IFRyYWZmaWNNYW5hZ2VyCmZyb20gcHJvdG9zLmJmY3BfcGIyIGltcG9ydCBCb3VuY3lNZXNzYWdlLCBOb2RlVGFibGVFbnRyeQoKCmNsYXNzIFRlc3RNZXNzYWdlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICBkZWYgdGVzdF9lbmRfdG9fZW5kKHNlbGYpOgogICAgICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKICAgICAgICB0cnVzdF90YWJsZV9tYW5hZ2VyID0gTW9jaygpLnJldHVybl92YWx1ZQoKICAgICAgICAjIFNldCB1cCB0aGUgbm9kZXMgaW4gdGhlIG5ldHdvcmsKICAgICAgICBub2RlMV9wb3J0ID0gNTMyNTEKICAgICAgICBub2RlMV9yc2Ffa2V5ID0gUlNBLmdlbmVyYXRlKDIwNDgpCiAgICAgICAgbm9kZTFfbWFuYWdlciA9IFRyYWZmaWNNYW5hZ2VyKE1vY2sodHJ1c3RfdGFibGVfbWFuYWdlcj10cnVzdF90YWJsZV9tYW5hZ2VyKSwgbm9kZTFfcnNhX2tleSwgbG9vcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCcxMjcuMC4wLjEnLCBub2RlMV9wb3J0KSkKCiAgICAgICAgbm9kZTJfcG9ydCA9IDUzMjUyCiAgICAgICAgbm9kZTJfcnNhX2tleSA9IFJTQS5nZW5lcmF0ZSgyMDQ4KQogICAgICAgIG5vZGUyX21hbmFnZXIgPSBUcmFmZmljTWFuYWdlcihNb2NrKHRydXN0X3RhYmxlX21hbmFnZXI9dHJ1c3RfdGFibGVfbWFuYWdlciksIG5vZGUyX3JzYV9rZXksIGxvb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnMTI3LjAuMC4xJywgbm9kZTJfcG9ydCkpCgogICAgICAgIG5vZGUzX3BvcnQgPSA1MzI1MwogICAgICAgIG5vZGUzX3JzYV9rZXkgPSBSU0EuZ2VuZXJhdGUoMjA0OCkKICAgICAgICBub2RlM19tYW5hZ2VyID0gVHJhZmZpY01hbmFnZXIoTW9jayh0cnVzdF90YWJsZV9tYW5hZ2VyPXRydXN0X3RhYmxlX21hbmFnZXIpLCBub2RlM19yc2Ffa2V5LCBsb29wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJzEyNy4wLjAuMScsIG5vZGUzX3BvcnQpKQoKICAgICAgICAjIFByZXBhcmUgbWVzc2FnZXMgZm9yIHNlbmRpbmcKICAgICAgICBtc2cxID0gQm91bmN5TWVzc2FnZSgpCiAgICAgICAgdGV4dF9mb3JtYXQuUGFyc2UoCiAgICAgICAgICAgICcnJwogICAgICAgICAgICBjb25uZWN0aW9uX3JlcXVlc3QgewogICAgICAgICAgICAgICAgdGFyZ2V0X3NlcnZlcl9hZGRyZXNzOiAidGVzdF9tZXNzYWdlXzEiCiAgICAgICAgICAgIH0KICAgICAgICAgICAgJycnLAogICAgICAgICAgICBtc2cxCiAgICAgICAgKQogICAgICAgIG1zZzIgPSBCb3VuY3lNZXNzYWdlKCkKICAgICAgICB0ZXh0X2Zvcm1hdC5QYXJzZSgKICAgICAgICAgICAgJycnCiAgICAgICAgICAgIGNvbm5lY3Rpb25fcmVxdWVzdCB7CiAgICAgICAgICAgICAgICB0YXJnZXRfc2VydmVyX2FkZHJlc3M6ICJ0ZXN0X21lc3NhZ2VfMiIKICAgICAgICAgICAgfQogICAgICAgICAgICAnJycsCiAgICAgICAgICAgIG1zZzIKICAgICAgICApCiAgICAgICAgbXNnMyA9IEJvdW5jeU1lc3NhZ2UoKQogICAgICAgIHRleHRfZm9ybWF0LlBhcnNlKAogICAgICAgICAgICAnJycKICAgICAgICAgICAgY29ubmVjdGlvbl9yZXF1ZXN0IHsKICAgICAgICAgICAgICAgIHRhcmdldF9zZXJ2ZXJfYWRkcmVzczogInRlc3RfbWVzc2FnZV8zIgogICAgICAgICAgICB9CiAgICAgICAgICAgICcnJywKICAgICAgICAgICAgbXNnMwogICAgICAgICkKICAgICAgICBtc2c0ID0gQm91bmN5TWVzc2FnZSgpCiAgICAgICAgdGV4dF9mb3JtYXQuUGFyc2UoCiAgICAgICAgICAgICcnJwogICAgICAgICAgICBjb25uZWN0aW9uX3JlcXVlc3QgewogICAgICAgICAgICAgICAgdGFyZ2V0X3NlcnZlcl9hZGRyZXNzOiAidGVzdF9tZXNzYWdlXzQiCiAgICAgICAgICAgIH0KICAgICAgICAgICAgJycnLAogICAgICAgICAgICBtc2c0CiAgICAgICAgKQogICAgICAgIG1zZzUgPSBCb3VuY3lNZXNzYWdlKCkKICAgICAgICB0ZXh0X2Zvcm1hdC5QYXJzZSgKICAgICAgICAgICAgJycnCiAgICAgICAgICAgIGNvbm5lY3Rpb25fcmVxdWVzdCB7CiAgICAgICAgICAgICAgICB0YXJnZXRfc2VydmVyX2FkZHJlc3M6ICJ0ZXN0X21lc3NhZ2VfNSIKICAgICAgICAgICAgfQogICAgICAgICAgICAnJycsCiAgICAgICAgICAgIG1zZzUKICAgICAgICApCgogICAgICAgICMgUHJlcGFyZSB0aGUgdHJ1c3QgbWFuYWdlcgogICAgICAgIGRlZiBwdWJfa2V5X3RvX2FkZHJlc3MocHViX2tleSk6CiAgICAgICAgICAgIG5vZGUgPSBOb2RlVGFibGVFbnRyeSgpCgogICAgICAgICAgICBpZiBwdWJfa2V5ID09IG5vZGUxX3JzYV9rZXkucHVibGlja2V5KCk6CiAgICAgICAgICAgICAgICB0ZXh0X2Zvcm1hdC5QYXJzZSgKICAgICAgICAgICAgICAgICAgICAnJycKICAgICAgICAgICAgICAgICAgICB0cnVzdF9zY29yZTogMS4wCiAgICAgICAgICAgICAgICAgICAgbm9kZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Rfa25vd25fYWRkcmVzczogIjEyNy4wLjAuMSIsCiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfcG9ydDogJycnICsgc3RyKG5vZGUxX3BvcnQpICsgJycnCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICcnJywKICAgICAgICAgICAgICAgICAgICBub2RlCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIGlmIHB1Yl9rZXkgPT0gbm9kZTJfcnNhX2tleS5wdWJsaWNrZXkoKToKICAgICAgICAgICAgICAgIHRleHRfZm9ybWF0LlBhcnNlKAogICAgICAgICAgICAgICAgICAgICcnJwogICAgICAgICAgICAgICAgICAgIHRydXN0X3Njb3JlOiAxLjAKICAgICAgICAgICAgICAgICAgICBub2RlIHsKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9rbm93bl9hZGRyZXNzOiAiMTI3LjAuMC4xIiwKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9wb3J0OiAnJycgKyBzdHIobm9kZTJfcG9ydCkgKyAnJycKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJycnLAogICAgICAgICAgICAgICAgICAgIG5vZGUKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgaWYgcHViX2tleSA9PSBub2RlM19yc2Ffa2V5LnB1YmxpY2tleSgpOgogICAgICAgICAgICAgICAgdGV4dF9mb3JtYXQuUGFyc2UoCiAgICAgICAgICAgICAgICAgICAgJycnCiAgICAgICAgICAgICAgICAgICAgdHJ1c3Rfc2NvcmU6IDEuMAogICAgICAgICAgICAgICAgICAgIG5vZGUgewogICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2tub3duX2FkZHJlc3M6ICIxMjcuMC4wLjEiLAogICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3BvcnQ6ICcnJyArIHN0cihub2RlM19wb3J0KSArICcnJwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAnJycsCiAgICAgICAgICAgICAgICAgICAgbm9kZQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICByZXR1cm4gbm9kZQoKICAgICAgICB0cnVzdF90YWJsZV9tYW5hZ2VyLmdldF9ub2RlX2J5X3B1YmtleS5zaWRlX2VmZmVjdCA9IHB1Yl9rZXlfdG9fYWRkcmVzcwoKICAgICAgICAjIFdlIHdpbGwgaG9sZCB0aGUgcmVjZWl2ZWQgbWVzc2FnZXMgaGVyZQogICAgICAgIG5vZGUxX21lc3NhZ2VzID0gW10KICAgICAgICBub2RlMl9tZXNzYWdlcyA9IFtdCiAgICAgICAgbm9kZTNfbWVzc2FnZXMgPSBbXQoKICAgICAgICBhc3luYyBkZWYgc2NlbmFyaW8oKToKICAgICAgICAgICAgbm9ubG9jYWwgbm9kZTFfbWVzc2FnZXMKICAgICAgICAgICAgbm9ubG9jYWwgbm9kZTJfbWVzc2FnZXMKICAgICAgICAgICAgbm9ubG9jYWwgbm9kZTNfbWVzc2FnZXMKCiAgICAgICAgICAgIGF3YWl0IG5vZGUxX21hbmFnZXIuc2VuZChtc2cxLCBub2RlMl9yc2Ffa2V5LnB1YmxpY2tleSgpKQoKICAgICAgICAgICAgYXdhaXQgbm9kZTJfbWFuYWdlci5zZW5kKG1zZzIsIG5vZGUzX3JzYV9rZXkucHVibGlja2V5KCkpCiAgICAgICAgICAgIG5vZGUzX21lc3NhZ2VzLmV4dGVuZChhd2FpdCBub2RlM19tYW5hZ2VyLm5ld19tZXNzYWdlcygpKQoKICAgICAgICAgICAgYXdhaXQgbm9kZTNfbWFuYWdlci5zZW5kKG1zZzMsIG5vZGUxX3JzYV9rZXkucHVibGlja2V5KCkpCiAgICAgICAgICAgIG5vZGUxX21lc3NhZ2VzLmV4dGVuZChhd2FpdCBub2RlMV9tYW5hZ2VyLm5ld19tZXNzYWdlcygpKQoKICAgICAgICAgICAgYXdhaXQgbm9kZTFfbWFuYWdlci5zZW5kKG1zZzQsIG5vZGUzX3JzYV9rZXkucHVibGlja2V5KCkpCiAgICAgICAgICAgIGF3YWl0IG5vZGUyX21hbmFnZXIuc2VuZChtc2c1LCBub2RlMV9yc2Ffa2V5LnB1YmxpY2tleSgpKQoKICAgICAgICAgICAgbm9kZTFfbWVzc2FnZXMuZXh0ZW5kKGF3YWl0IG5vZGUxX21hbmFnZXIubmV3X21lc3NhZ2VzKCkpCiAgICAgICAgICAgIG5vZGUyX21lc3NhZ2VzLmV4dGVuZChhd2FpdCBub2RlMl9tYW5hZ2VyLm5ld19tZXNzYWdlcygpKQogICAgICAgICAgICBub2RlM19tZXNzYWdlcy5leHRlbmQoYXdhaXQgbm9kZTNfbWFuYWdlci5uZXdfbWVzc2FnZXMoKSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzY2VuYXJpbygpKQoKICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoCjx8ZmltX2VuZHw+"]
["4744ba23a5777b09ac2dde3dd8b88ee244e8e13f-4","4744ba23a5777b09ac2dde3dd8b88ee244e8e13f",{"$cut":{"chars":114624,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IGl0ZXJ0b29scwpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdApmcm9tIHNhZ2UuYWxsIGltcG9ydCAob3MsIHNyYW5nZSwgU1IsIFFRLCBaWiwgUlIsIHNhZ2VfZXZhbCwgZmxhdHRlbiwKICAgICAgICAgICAgICAgICAgICAgIHZhciwgb3BlcmF0b3IsIGlkZW50aXR5X21hdHJpeCwgU2V0LCBsb2csIAogICAgICAgICAgICAgICAgICAgICAgc29sdmUsIHNodWZmbGUsIHByb2QsIGRlZXBjb3B5LCBJbnRlZ2VyLCBsY20sCiAgICAgICAgICAgICAgICAgICAgICBDYXJ0ZXNpYW5Qcm9kdWN0LCBQb2x5bm9taWFsUmluZywgY2FjaGVkX2Z1bmN0aW9uLCAKICAgICAgICAgICAgICAgICAgICAgIGJpbm9taWFsLCBvbykKICAgICAgICAgICAgICAgICAgICAgIAoKaW1wb3J0IHZ1X2NvbW1vbiBhcyBDTQpmcm9tIHZ1X2NvbW1vbiBpbXBvcnQgKFZMb2csIHBhdXNlLCB2c2V0LCBpc2V0LCB2cGFydGl0aW9uLAogICAgICAgICAgICAgICAgICAgICAgIHZhbGxfdW5pcSwgaXJlYWQsIHZ3cml0ZSwgZGljdDJzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgaXNudW0sIGlzX3N0ciwgaXNfbGlzdCwgaXNfZGljdCwgaXNfdHVwbGUsCiAgICAgICAgICAgICAgICAgICAgICAgaXNfYm9vbCwgICAKICAgICAgICAgICAgICAgICAgICAgICBpc19pdGVyYWJsZSwgaXNfZW1wdHksIGxpc3Rfc3RyLCBmaWxlX2Jhc2VuYW1lKQoKZnJvbSBzYWdldXRpbCBpbXBvcnQgaXNfc2FnZV9leHByLCBpc19zYWdlX2ludCwgZ2V0X3ZhcnMKCmxvZ2dlciA9IFZMb2coJ2RpZ19taXNjcycpCmxvZ2dlci5zZXRfbGV2ZWwoVkxvZy5JTkZPKQoKY2xhc3MgUmVhZEZpbGUob2JqZWN0KToKICAgICIiIgogICAgUmVhZCBkYXRhIGZpbGUgYW5kIG90aGVyIGluZm8gKHNzLCB0Y3MsIHhpbmZvKQogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICIiIgogICAgICAgIFJlYWQgaW5wdXQgZmlsZSAodHJhY2UgZGF0YSkgYW5kIGRvIHNvbWUgcHJlcHJvY2Vzc2luZwoKICAgICAgICBFeGFtcGxlczoKICAgICAgICBzYWdlOiByZiA9IFJlYWRGaWxlKCcuLi90cmFjZXMvTkxBL3Rjcy9jb2hlbmRpdi5sMWEudGNzJykKICAgICAgICBzYWdlOiByZi5zc19udW0KICAgICAgICBbYSwgYiwgcSwgciwgeCwgeV0KICAgICAgICBzYWdlOiBsZW4ocmYudGNzX251bSkKICAgICAgICAxMzE0CgogICAgICAgICIiIgogICAgICAgIGlmIF9fZGVidWdfXzoKICAgICAgICAgICAgYXNzZXJ0IGlzX3N0cihmaWxlbmFtZSksIGZpbGVuYW1lCiAgICAgICAgICAgIGltcG9ydCBvcy5wYXRoCiAgICAgICAgICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSksIFwKICAgICAgICAgICAgICAgICJmaWxlICd7fScgZG9lc24ndCBleGlzdCIuZm9ybWF0KGZpbGVuYW1lKQogICAgICAgICAgICAKICAgICAgICBsaW5lcyA9IFJlYWRGaWxlLnJlYWRfbl9maWx0ZXIoZmlsZW5hbWUpCgogICAgICAgIChzc19hcnIsIHRjc19hcnIpLCAoc3NfbnVtLCB0Y3NfbnVtKSA9IFJlYWRGaWxlLmdldF9zc190Y3MobGluZXMpCgogICAgICAgICNnZXQgYWRkaXRpb25hbCBpbmZvCiAgICAgICAgYmFzZV9mbmFtZSA9IGZpbGVfYmFzZW5hbWUoZmlsZW5hbWUpCgogICAgICAgICNleHRyYSBpbmZvCiAgICAgICAgZXh0X2ZpbGUgPSBiYXNlX2ZuYW1lICsgJy5leHQnCiAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZXh0X2ZpbGUpOgogICAgICAgICAgICBjb250ZW50ID0gUmVhZEZpbGUucmVhZF9uX2ZpbHRlcihleHRfZmlsZSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBjb250ZW50ID0gW10KCiAgICAgICAgeGluZm8gPSBSZWFkRmlsZS5nZXRfeGluZm8oY29udGVudCkKICAgICAgICB4aW5mb1snQWxsJ10gPSBtYXAoc3RyLHNzX2FyciArIHNzX251bSkKCiAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCiAgICAgICAgc2VsZi5zc19hcnIgPSBzc19hcnIKICAgICAgICBzZWxmLnNzX251bSA9IHNzX251bQogICAgICAgIHNlbGYudGNzX2FyciA9IHRjc19hcnIKICAgICAgICBzZWxmLnRjc19udW0gPSB0Y3NfbnVtCiAgICAgICAgc2VsZi54aW5mbyA9IHhpbmZvCgogICAgICAgIGxvZ2dlci5kZWJ1ZygiUmVhZCBJbmZvOlxuIiArIAogICAgICAgICAgICAgICAgICAgICBkaWN0MnN0cihzZWxmLl9fZGljdF9fLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfc2l6ZV9vbmx5PVsndGNzX2FycicsICd0Y3NfbnVtJywgJ0V4dFZhciddKSkKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgdGVzdF9jc3YoZmlsZW5hbWUpOgogICAgICAgIGltcG9ydCBjc3YKICAgICAgICBmID0gb3BlbihmaWxlbmFtZSkKICAgICAgICB0cnk6CiAgICAgICAgICAgICNjc3YuRGljdFJlYWRlcihyb3cgZm9yIHJvdyBpbiBmcCBpZiBub3Qgcm93LnN0YXJ0c3dpdGgoJyMnKSkKICAgICAgICAgICAgcmVhZGVyID0gY3N2LnJlYWRlcihmLGRlbGltaXRlcj0nICcpCiAgICAgICAgICAgIGZvciByb3cgaW4gcmVhZGVyOgogICAgICAgICAgICAgICAgcHJpbnQgcm93CiAgICAgICAgZmluYWxseToKICAgICAgICAgICAgZi5jbG9zZSgpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGdldF90Y3NfZmlsZXMoZGlybmFtZSwgZmlsZV9leHQ9Jy50Y3MnKToKICAgICAgICByZXR1cm4gc29ydGVkKGYgZm9yIGYgaW4gb3MubGlzdGRpcihkaXJuYW1lKSAKICAgICAgICAgICAgICAgICAgICAgIGlmIGYuZW5kc3dpdGgoZmlsZV9leHQpKQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBzcGxpdF9jb250ZW50KGNvbnRlbnQpOgogICAgICAgICIiIgogICAgICAgICIiIgogICAgICAgIGlmIF9fZGVidWdfXzoKICAgICAgICAgICAgYXNzZXJ0IGlzX2l0ZXJhYmxlKGNvbnRlbnQpCiAgICAgICAgCiAgICAgICAgbG9jcyA9IE9yZGVyZWREaWN0KCkKICAgICAgICBmb3IgbCBpbiBjb250ZW50OgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBpZHggPSBsLmluZGV4KCc6JykKICAgICAgICAgICAgICAgIGxvYyA9IGxbOmlkeF0uc3RyaXAoKQogICAgICAgICAgICAgICAg"}}]
["d0b37ef2452794e49ebda9bd444406916a937b90-2","d0b37ef2452794e49ebda9bd444406916a937b90","PHxmaW1fcHJlZml4fD4KZnJvbSB0cmFuc2l0aW9ucyBpbXBvcnQgTWFjaGluZQppbXBvcnQgdGltZQppbXBvcnQgcmFuZG9tCgpkZWYgc3BsaXR0ZXIodHJhbnN0aW9ucyk6CiAgIHJldHVybiBbeyJ0cmlnZ2VyIjogdHJhbnMsICJzb3VyY2UiOiB0cmFucy5zcGxpdCgiLT4iKVswXSwgImRlc3QiOnRyYW5zLnNwbGl0KCItPiIpWzFdfSBmb3IgdHJhbnMgaW4gdHJhbnN0aW9uc10KCgpjbGFzcyB0ZXN0TUFjaGluZShNYWNoaW5lKToKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAjIFN0YXRlcwogICAgICAgIHN0YXRlcyA9IFsicyIrc3RyKGkpIGZvciBpIGluIHJhbmdlKDE0KV0KICAgICAgICB0cmFuc2l0aW9ucyA9IHNwbGl0dGVyKFsiczAtPnMxIiwKPHxmaW1fZW5kfD4="]
["de7418c0a11c472f64861478da58e7c8c7e0aecb-3","de7418c0a11c472f64861478da58e7c8c7e0aecb","PHxmaW1fcHJlZml4fD4KUEFZTE9BRCA9IHsKICAgICJ0aXRsZSI6ICJ0aXRsZSAxIiwKICAgICJjb250ZW50IjogImNvbnRlbnQiLAogICAgInVzZXJfaWQiOiAiMjM0NTY3ODkwIgp9CgpQQVlMT0FEX1dST05HID0gewogICAgImNvbnRlbnQiOiAiY29udGVudCIsCiAgICAidXNlcl9pZCI6ICIyMzQ1Njc4OTAiCn0KClBBWUxPQURfV1JPTkcxID0gewogICAgInRpdGxlIjogMTIzNDU2Nzg5Cn0KClBBWUxPQURfVVBEQVRFID0gewogICAgInRpdGxlIjogInRpdGxlIHVwZGF0ZWQiCn0KCkJVTEtfQkxPR1MgPSB7J2Jsb2dzJzogW1BBWUxPQUQsIFBBWUxPQURdLCAndG90YWxfY291bnQnOiAyfQoKVEFHUyA9IHsndGFncyc6IFsnZHVtbXknLCAndGVzdF90YWcnXX0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKRklFTERfUkVRVUlSRUQgPSAiVmFsaWRhdGlvbkVycm9yIChCbG9nOk5vbmUpIChGaWVsZCBpcyByZXF1aXJlZDogWyd0aXRsZSddKSIKRE9FU19OT1RfRVhJU1QgPSAiQmxvZyBtYXRjaGluZyBxdWVyeSBkb2VzIG5vdCBleGlzdC4iClNUUklOR19WQUxJREFUSU9OX0VSUk9SID0gIlN0cmluZ0ZpZWxkIG9ubHkgYWNjZXB0cyBzdHJpbmcgdmFsdWVzIgo8fGZpbV9lbmR8Pg=="]
["720a7bb5fccd289339a587835fc163b45f9f7810-2","720a7bb5fccd289339a587835fc163b45f9f7810","PHxmaW1fcHJlZml4fD4KZnJvbSBkZWJ1Z3ZpcyBpbXBvcnQgQ29udGV4dCwgS0VFUF9BTFRJVFVERQpmcm9tIG9iamVjdHMuY29tcG9uZW50cy50eXBlcyBpbXBvcnQgU1BBV05FUl9DT01QT05FTlQKZnJvbSBvYmplY3RzLmNvbXBvbmVudHMuc3Bhd25lcl9jb21wb25lbnQgaW1wb3J0IFNwYXduZXJUdW5pbmcKZnJvbSBzaW1zNC5jb2xvciBpbXBvcnQgcHNldWRvX3JhbmRvbV9jb2xvcgppbXBvcnQgc2VydmljZXMKCmNsYXNzIFNwYXduZXJWaXN1YWxpemVyOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsYXllcik6CiAgICAgICAgc2VsZi5sYXllciA9IGxheWVyCiAgICAgICAgc2VsZi5fc3RhcnQoKQoKICAgIGRlZiBfc3RhcnQoc2VsZik6CiAgICAgICAgc2VsZi5fZHJhd19zcGF3bmVyX2NvbnN0cmFpbnRzKCkKCiAgICBkZWYgc3RvcChzZWxmKToKICAgICAgICBwYXNzCgogICAgZGVmIF9kcmF3X3NwYXduZXJfY29uc3RyYWludHMoc2VsZik6CiAgICAgICAgd2l0aCBDb250ZXh0KHNlbGYubGF5ZXIpIGFzIGxheWVyOgogICAgICAgICAgICBmb3Igb2JqIGluIHNlcnZpY2VzLm9iamVjdF9tYW5hZ2VyKCkuZ2V0X2FsbF9vYmplY3RzX3dpdGhfY29tcG9uZW50X2dlbihTUEFXTkVSX0NPTVBPTkVOVCk6CiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IG9iai5wb3NpdGlvbgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICBzcGF3bmVyX2NvbXBvbmVudCA9IG9iai5nZXRfY29tcG9uZW50KFNQQVdORVJfQ09NUE9ORU5UKQogICAgICAgICAgICAgICAgcmFkaWkgPSBbXQogICAgICAgICAgICAgICAgc2xvdF9wb3NpdGlvbnMgPSBbXQogICAgICAgICAgICAgICAgZm9yIGRhdGEgaW4gc3Bhd25lcl9jb21wb25lbnQuX3NwYXduZXJfZGF0YToKPHxmaW1fZW5kfD4="]
["8be2753daa6be4b3ca245b6e23313b53858b4e98-1","8be2753daa6be4b3ca245b6e23313b53858b4e98","PHxmaW1fcHJlZml4fD4KY2xhc3MgU3R1ZGVudDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLG5hbWUsaWQsZGVwdCk6CiAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgIHNlbGYuaWQgPSBpZAogICAgICAgIHNlbGYuZGVwdCA9IGRlcHQKICAgICAgICBzZWxmLmxzdCA9IFtdCiAgICAgICAgc2VsZi5maW5hbCA9ICIiCiAgICBkZWYgZGV0YWlscyhzZWxmKToKICAgICAgICBwcmludCgiTmFtZToiLHNlbGYubmFtZSkKICAgICAgICBwcmludCgiSUQ6IixzZWxmLmlkKQogICAgICAgIHJldHVybiBmIkRlcGFydG1lbnQ6e3NlbGYuZGVwdH0iCiAgICBkZWYgYWR2aXNlKHNlbGYsKmFyZ3MpOgogICAgICAgIGZvciBlbG0gaW4gYXJnczoKICAgICAgICAgICAgc2VsZi5sc3QuYXBwZW5kKGVsbSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBzZWxmLmZpbmFsICs9IGVsbSArIiwgIgo8fGZpbV9lbmR8Pg=="]
["de3b91f790d2a42b19bf950cb657e3c1659e7c95-5","de3b91f790d2a42b19bf950cb657e3c1659e7c95","PHxmaW1fcHJlZml4fD4KZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNvdW50Cgpmcm9tIF9wb2x5Z29uYWxfdG9vbHMgaW1wb3J0IGlzX3BvbHlnb25hbCwgcG9seQoKCmRlZiBpbl9hbGwobWluX3ZhbCk6CiAgICAiIiIKICAgIEZpbmRzIHRoZSBmaXJzdCBudW1iZXIgZ3JlYXRlciB0aGFuIG1pbl92YWwgd2hpY2ggaXMgdHJpYW5ndWxhciwKICAgIHBlbnRhZ29uYWwsIGFuZCBoZXhhZ29uYWwuCiAgICAiIiIKICAgICMgRXZlcnkgaGV4YWdvbmFsIG51bWJlciBpcyBhbHNvIHRyaWFuZ3VsYXIuCiAgICBmb3IgdCBpbiBjb3VudCgxKToKICAgICAgICBoZXggPSBwb2x5KDYsIHQpCiAgICAgICAgaWYgaGV4IDw9IG1pbl92YWw6CiAgICAgICAgICAgIGNvbnRpbnVlCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBlbGlmIGlzX3BvbHlnb25hbCg1LCBoZXgpOgogICAgICAgICAgICByZXR1cm4gaGV4CgoKPHxmaW1fZW5kfD4="]
["93c6fa3d33373ae6690e3f857bb1225e16be623d-2","93c6fa3d33373ae6690e3f857bb1225e16be623d","PHxmaW1fcHJlZml4fD4KZnJvbSAuLi5kYW8ubWFyaWFkYiBpbXBvcnQgTWFyaWFEYkRhbwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgppbXBvcnQgcGFuZGFzIGFzIHBkCgoKPHxmaW1fZW5kfD4="]
["9a01f92a362d6bac28ed5df8142492b0bf5eed58-1","9a01f92a362d6bac28ed5df8142492b0bf5eed58","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBJbnRlbnRpb25hbGx5IGxlZnQgZW1wdHkKPHxmaW1fZW5kfD4="]
["08835e8cc8f1e3481ecd7eb28f0905216a4ac88a-3","08835e8cc8f1e3481ecd7eb28f0905216a4ac88a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwojIGltcG9ydCBsaWJyYXJpZXMKaW1wb3J0IG5sdGsKaW1wb3J0IHBpY2tsZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gc2tsZWFybi5iYXNlIGltcG9ydCBCYXNlRXN0aW1hdG9yLCBUcmFuc2Zvcm1lck1peGluCm5sdGsuZG93bmxvYWQoWydwdW5rdCcsICd3b3JkbmV0JywgJ2F2ZXJhZ2VkX3BlcmNlcHRyb25fdGFnZ2VyJ10pCmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0IEdyaWRTZWFyY2hDVgppbXBvcnQgbmx0awo8fGZpbV9lbmR8Pg=="]
["d0363e857fa33e8b4d4613e04ac94b8a2cfb56f3-4","d0363e857fa33e8b4d4613e04ac94b8a2cfb56f3","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAxOSBWYXNpbHkgUnVkY2hlbmtvIC0gRnV6enZpZXcKIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKPHxmaW1faG9sZXw+CmltcG9ydCBmdXp6dmlldy5jb25zdCBhcyBjb25zdAoKY2xhc3MgRmlsZUdyYXBoKG9iamVjdCk6CiAgICAnJycgQmFzZSBjYWxscyBmb3IgZmlsZS1sZXZlbCBncmFwaCBnZW5lcmF0b3JzLgoKICAgIERlcml2ZWQgY2xhc3NlcyBtYXkgd2FudCB0byBpbXBsZW1lbnQ6CiAgICAgICAgc2F2ZTogSW4gb3JkZXIgdG8gd3JpdGUgb3V0IHRoZSBncmFwaCB0bwogICAgICAgICAgICB0aGUgc2FtZSBkaXIgYXMgdGhlIHNvdXJjZSBmaWxlLgogICAgICAgIHRlcm1pbmFsX3ByaW50OiBJbiBvcmRlciB0byBzZWUgYSByb3VnaCAKICAgICAgICAgICAgdmVyc2lvbiBvZiB0aGUgZ3JhcGggaW4gdGVybWluYWwuCgogICAgQXR0cmlidXRlczoKICAgICAgICBtb2R1bGU6IEEgbW9kdWxlIG9iamVjdCBwcm9kdWNlZCBieSB0aGUgTExWTQogICAgICAgICAgICBGdlBhc3MsIGNvbnRhaW5pbmcgdGhlIENGR3Mgb2YgYWxsIHRoZQogICAgICAgICAgICBmdW5jdGlvbnMgaW4gYSBmaWxlLgogICAgICAgIHNvdXJjZV9maWxlbmFtZTogRnVsbCBmaWxlbmFtZSBvZiB0aGUgc291cmNlIGZpbGUKICAgICAgICAgICAgYmFzZWQgb24gd2hpY2ggdGhlIENGRyBmaWxlIHdhcyBnZW5lcmF0ZWQuCiAgICAgICAgc2F2ZV9maWxlbmFtZTogRnVsbCBmaWxlbmFtZSBvZiB0aGUgQ0ZHIGZpbGUsIGJ1dCAKICAgICAgICAgICAgd2l0aG91dCB0aGUgZXh0ZW5zaW9uLgogICAgJycnCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZHVsZSwgY2ZnX2ZpbGVfcGF0aCk6CgogICAgICAgIHNlbGYubW9kdWxlID0gbW9kdWxlCgogICAgICAgICMgTG9jYXRpb24gb2YgLmNmZy5qc29uIGZpbGUgKHJhdGhlciB0aGFuIAogICAgICAgICMgdGhlIGxvY2F0aW9uIG9mIC5jIHNvdXJjZSBmaWxlKS4KICAgICAgICBzZWxmLmNmZ19kaXJwYXRoLCBzZWxmLmNmZ19maWxlbmFtZV93aXRoX2V4dCA9IG9zLnBhdGguc3BsaXQoY2ZnX2ZpbGVfcGF0aCkKICAgICAgICBleHRfbGVuID0gbGVuKGNvbnN0LkNGR19KU09OX0VYVEVOU0lPTikKICAgICAgICBzZWxmLmNmZ19maWxlbmFtZSA9IHNlbGYuY2ZnX2ZpbGVuYW1lX3dpdGhfZXh0WzotZXh0X2xlbl0KCiAgICBkZWYgc2F2ZShzZWxmKToKICAgICAgICBwYXNzCiAgICAKICAgIGRlZiBzYXZlX2Z1bmNzKHNlbGYpOgogICAgICAgIHBhc3MKICAgIAogICAgZGVmIHRlcm1pbmFsX3ByaW50KHNlbGYpOgogICAgICAgIHBhc3MKCiAgICBAcHJvcGVydHkKICAgIGRlZiBzb3VyY2VfZmlsZW5hbWUoc2VsZik6CgogICAgICAgIHJldHVybiAoCiAgICAgICAgICAgIHNlbGYubW9kdWxlWydwYXRoJ10gKyAnLycgKyAKICAgICAgICAgICAgc2VsZi5tb2R1bGVbJ25hbWUnXQogICAgICAgICkKCiAgICBAcHJvcGVydHkKICAgIGRlZiBzYXZlX2ZpbGVuYW1lKHNlbGYpOgoKICAgICAgICByZXR1cm4gKAogICAgICAgICAgICBzZWxmLmNmZ19kaXJwYXRoICsgJy8nICsKICAgICAgICAgICAgc2VsZi5jZmdfZmlsZW5hbWUKICAgICAgICApCgogICAgZGVmIF9zb3J0ZWRfZnVuY3Moc2VsZik6CiAgICAgICAgJycnIEZ1bmN0aW9ucyBzb3J0ZWQgYnkgdGhlIG9yZGVyIGluIHdoaWNoCiAgICAgICAgdGhleSBhcHBlYXIgaW4gdGhlIExMVk0gSVIuCiAgICAgICAgJycnCgogICAgICAgIHJldHVybiBzb3J0ZWQoCiAgICAgICAgICAgIHNlbGYubW9kdWxlWydmdW5jdGlvbnMnXS52YWx1ZXMoKSwKICAgICAgICAgICAga2V5PWxhbWJkYSBmOiBmWydudW1iZXInXQogICAgICAgICkKICAgIAogICAgZGVmIF9ibG9ja19pZChzZWxmLCBmdW5jLCBibG9jayk6CiAgICAgICAgJycnIEhlbHBlciBmdW5jdGlvbiB0aGF0IHByb3ZpZGVzIGEKICAgICAgICB1bmlxdWUgaWRlbnRpZmllciBmb3IgYSBnaXZlbiBMTFZNIGJsb2NrCiAgICAgICAgaW4gYSBDRkcuCiAgICAgICAgJycnCgogICAgICAgIHJldHVybiAoCiAgICAgICAgICAgIHNlbGYubW9kdWxlWydwYXRoJ10gKyAnLycgKyAKICAgICAgICAgICAgc2VsZi5tb2R1bGVbJ25hbWUnXSArICcuJyArIAogICAgICAgICAgICBmdW5jWyduYW1lJ10gKyAnLicgKwogICAgICAgICAgICBibG9ja1snbmFtZSddCiAgICAgICAgKQo8fGZpbV9zdWZmaXh8PgojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKaW1wb3J0IG9zCgo8fGZpbV9lbmR8Pg=="]
["93e717f886088e547c65c2fab0c9d03f28b4266c-1","93e717f886088e547c65c2fab0c9d03f28b4266c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gdGtsZWFybi5kYXRhc2V0cyBpbXBvcnQgbG9hZF9pZXN0Cgpmcm9tIG9wbGFiLmNvbmZpZyBpbXBvcnQgREFUQVNFVFMKCgpkZWYgdG9fdmFkKHQpOgogICAgIyAgWydhbmdlcicgJ2Rpc2d1c3QnICdmZWFyJyAnam95JyAnc2FkJyAnc3VycHJpc2UnXQogICAgaWYgdCA9PSAnc2FkJzoKICAgICAgICByZXR1cm4gMCwgMCwgMAogICAgZWxpZiB0ID09ICdhbmdlcic6CiAgICAgICAgcmV0dXJuIDAsIDEsIDEKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZWxpZiB0ID09ICdzdXJwcmlzZSc6CiAgICAgICAgcmV0dXJuIDEsIDEsIDAKICAgIGVsaWYgdCA9PSAnZmVhcic6CiAgICAgICAgcmV0dXJuIDAsIDEsIDAKPHxmaW1fZW5kfD4="]
["8b91bb63d220a726b862d815ed08c77a45c82574-3","8b91bb63d220a726b862d815ed08c77a45c82574","PHxmaW1fcHJlZml4fD4KJycnYWRkIGRlZmF1bHQgY29udGFjdCBncm91cCB0byBwcm9qZWN0cwoKUmV2aXNpb24gSUQ6IDZjZjlkODkzOTJiNgpSZXZpc2VzOiBjMzE0N2M1ZDdmNDEKQ3JlYXRlIERhdGU6IDIwMjEtMTAtMjMgMTk6MjA6MjQuOTM5NTc5CgonJycKaW1wb3J0IHNxbGFsY2hlbXkgYXMgc2EKZnJvbSBhbGVtYmljIGltcG9ydCBvcAoKIyByZXZpc2lvbiBpZGVudGlmaWVycywgdXNlZCBieSBBbGVtYmljLgpyZXZpc2lvbiA9ICc2Y2Y5ZDg5MzkyYjYnCmRvd25fcmV2aXNpb24gPSAnYzMxNDdjNWQ3ZjQxJwpicmFuY2hfbGFiZWxzID0gKCkKZGVwZW5kc19vbiA9IE5vbmUKCgpkZWYgdXBncmFkZSgpOgogICAgIyAjIyMgY29tbWFuZHMgYXV0byBnZW5lcmF0ZWQgYnkgQWxlbWJpYyAtIHBsZWFzZSBhZGp1c3QhICMjIwogICAgb3AuYWRkX2NvbHVtbigncHJvamVjdHMnLCBzYS5Db2x1bW4oJ2RlZmF1bHRfY29udGFjdF9ncm91cF9pZCcsIHNhLkludGVnZXIoKSwgbnVsbGFibGU9VHJ1ZSkpCiAgICBvcC5jcmVhdGVfZm9yZWlnbl9rZXkoCiAgICAgICAgTm9uZSwKICAgICAgICAncHJvamVjdHMnLAogICAgICAgICdjb250YWN0X2dyb3VwcycsCiAgICAgICAgWydkZWZhdWx0X2NvbnRhY3RfZ3JvdXBfaWQnXSwKICAgICAgICBbJ2lkJ10sCiAgICAgICAgb25kZWxldGU9J1NFVCBOVUxMJywKICAgICkKICAgICMgIyMjIGVuZCBBbGVtYmljIGNvbW1hbmRzICMjIwoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZGVmIGRvd25ncmFkZSgpOgogICAgIyAjIyMgY29tbWFuZHMgYXV0byBnZW5lcmF0ZWQgYnkgQWxlbWJpYyAtIHBsZWFzZSBhZGp1c3QhICMjIwogICAgb3AuZHJvcF9jb25zdHJhaW50KE5vbmUsICdwcm9qZWN0cycsIHR5cGVfPSdmb3JlaWdua2V5JykKPHxmaW1fZW5kfD4="]
["47c62571cf24b531a7219dd3ad3820099ce51fa0-3","47c62571cf24b531a7219dd3ad3820099ce51fa0","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzdWJwcm9jZXNzCgojIEF0IHRoaXMgcG9pbnQgYWxsIG5lY2Vzc2FyeSBkYXRhIHNob3VsZCBiZSBpbiBnaXRtaW5lci9vdXQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpvcy5jaGRpcigiLi4vYXV0aG9yc2hpcF9waXBlbGluZSIpCnN1YnByb2Nlc3MucnVuKFsicHl0aG9uMyIsICJydW5fcHJlcHJvY2Vzc2luZy5weSIsICItLW5fdGltZV9idWNrZXRzIiwgIjMiXSkKPHxmaW1fZW5kfD4="]
["93cdbc99f1cd3cd7fc6b89e03ad810eb44bb7b51-1","93cdbc99f1cd3cd7fc6b89e03ad810eb44bb7b51","PHxmaW1fcHJlZml4fD4KIyEvZnJvZG8vc2hhcmVkL2VwZC9iaW4vcHl0aG9uCiNjb2Rpbmc6IHV0Zi04CmltcG9ydCB3YXJuaW5ncwppbXBvcnQgb3MKaW1wb3J0IG5pYmFiZWwgYXMgbmIKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBjb21tYW5kcwpmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKZnJvbSBuaXB5cGUudXRpbHMuZmlsZW1hbmlwIGltcG9ydCBzcGxpdF9maWxlbmFtZQpmcm9tIG5pcHlwZS5pbnRlcmZhY2VzLm1hdGxhYiBpbXBvcnQgTWF0bGFiQ29tbWFuZApmcm9tIG5pcHlwZS5pbnRlcmZhY2VzLmJhc2UgaW1wb3J0IEJhc2VJbnRlcmZhY2UsIEJhc2VJbnRlcmZhY2VJbnB1dFNwZWMKZnJvbSBuaXB5cGUuaW50ZXJmYWNlcy5mc2wuYmFzZSBpbXBvcnQgRlNMQ29tbWFuZCwgRlNMQ29tbWFuZElucHV0U3BlYwpmcm9tIG5pcHlwZS5pbnRlcmZhY2VzLmFmbmkuYmFzZSBpbXBvcnQgQUZOSVRyYWl0ZWRTcGVjLCBBRk5JQ29tbWFuZCwgSW5mbwpmcm9tIG5pcHlwZS5pbnRlcmZhY2VzLmJhc2UgaW1wb3J0IEJ1bmNoLCBUcmFpdGVkU3BlYywgRmlsZSwgRGlyZWN0b3J5LCB0cmFpdHMsIGlzZGVmaW5lZApmcm9tIG5pcHlwZS5pbnRlcmZhY2VzLmJhc2UgaW1wb3J0IChDb21tYW5kTGluZUlucHV0U3BlYywgQ29tbWFuZExpbmUsIFRyYWl0ZWRTcGVjLCB0cmFpdHMsIGlzZGVmaW5lZCwgRmlsZSkKZnJvbSBuaXB5cGUudXRpbHMuZmlsZW1hbmlwIGltcG9ydCBsb2FkX2pzb24sIHNhdmVfanNvbiwgc3BsaXRfZmlsZW5hbWUsIGZuYW1lX3ByZXN1ZmZpeAp3YXJuID0gd2FybmluZ3Mud2Fybgp3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygnYWx3YXlzJywgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCgoKY2xhc3MgQUZOSUNvbW1hbmRHZW5GaWxlKEFGTklDb21tYW5kKToKICAgIGRlZiBfZ2VuX2ZuYW1lKHNlbGYsIGJhc2VuYW1lLCBjd2Q9Tm9uZSwgc3VmZml4PU5vbmUsIGNoYW5nZV9leHQ9VHJ1ZSwgZXh0PU5vbmUpOgogICAgICAgICIiIkdlbmVyYXRlIGEgZmlsZW5hbWUgYmFzZWQgb24gdGhlIGdpdmVuIHBhcmFtZXRlcnMuCgpUaGUgZmlsZW5hbWUgd2lsbCB0YWtlIHRoZSBmb3JtOiBjd2QvYmFzZW5hbWU8c3VmZml4PjxleHQ+LgpJZiBjaGFuZ2VfZXh0IGlzIFRydWUsIGl0IHdpbGwgdXNlIHRoZSBleHRlbnNpb25zIHNwZWNpZmllZCBpbgo8aW5zdGFuY2U+aW5wdXRzLm91dHB1dHR5cGUuCgpQYXJhbWV0ZXJzCi0tLS0tLS0tLS0KYmFzZW5hbWUgOiBzdHIKRmlsZW5hbWUgdG8gYmFzZSB0aGUgbmV3IGZpbGVuYW1lIG9uLgpjd2QgOiBzdHIKUGF0aCB0byBwcmVmaXggdG8gdGhlIG5ldyBmaWxlbmFtZS4gKGRlZmF1bHQgaXMgb3MuZ2V0Y3dkKCkpCnN1ZmZpeCA6IHN0cgpTdWZmaXggdG8gYWRkIHRvIHRoZSBgYmFzZW5hbWVgLiAoZGVmYXVsdCBpcyAnJykKY2hhbmdlX2V4dCA6IGJvb2wKRmxhZyB0byBjaGFuZ2UgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiB0byB0aGUgQUZOSSBvdXRwdXQgdHlwZS4KKGRlZmF1bHQgVHJ1ZSkKClJldHVybnMKLS0tLS0tLQpmbmFtZSA6IHN0cgpOZXcgZmlsZW5hbWUgYmFzZWQgb24gZ2l2ZW4gcGFyYW1ldGVycy4KCiIiIgoKICAgICAgICBpZiBiYXNlbmFtZSA9PSAnJzoKICAgICAgICAgICAgbXNnID0gJ1VuYWJsZSB0byBnZW5lcmF0ZSBmaWxlbmFtZSBmb3IgY29tbWFuZCAlcy4gJyAlIHNlbGYuY21kCiAgICAgICAgICAgIG1zZyArPSAnYmFzZW5hbWUgaXMgbm90IHNldCEnCiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobXNnKQoKICAgICAgICBpZiBjd2QgaXMgTm9uZToKICAgICAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKCiAgICAgICAgaWYgZXh0IGlzIE5vbmU6CiAgICAgICAgICAgIGV4dCA9IEluZm8ub3V0cHV0dHlwZV90b19leHQoc2VsZi5pbnB1dHMub3V0cHV0dHlwZSkKCiAgICAgICAgaWYgY2hhbmdlX2V4dDoKICAgICAgICAgICAgaWYgc3VmZml4OgogICAgICAgICAgICAgICAgc3VmZml4ID0gJycuam9pbigoc3VmZml4LCBleHQpKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgc3VmZml4ID0gZXh0CgogICAgICAgIGlmIHN1ZmZpeCBpcyBOb25lOgogICAgICAgICAgICBzdWZmaXggPSAnJwoKICAgICAgICBmbmFtZSA9IGZuYW1lX3ByZXN1ZmZpeChiYXNlbmFtZSwgc3VmZml4ID0gc3VmZml4LAogICAgICAgICAgICAgICAgICAgIHVzZV9leHQgPSBGYWxzZSwgbmV3cGF0aCA9IGN3ZCkKCiAgICAgICAgcmV0dXJuIGZuYW1lCgogICAgZGVmIF9nZW5fZmlsZW5hbWUoc2VsZiwgbmFtZSk6CiAgICAgICAgaWYgbmFtZSA9PSAnb3V0X2ZpbGUnOgogICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2VuX291dGZpbGVuYW1lKCkKICAgICAgICByZXR1cm4gTm9uZQoKCmNsYXNzIFRvM2RJbnB1dFNwZWMoQUZOSVRyYWl0ZWRTcGVjKToKICAgIGluZm9sZGVyID0gRGlyZWN0b3J5KGRlc2MgPSAnZm9sZGVyIHdpdGggRElDT00gaW1hZ2VzIHRvIGNvbnZlcnQnLAogICAgICAgICAgICAgICAgICAgICAgICAgYXJnc3RyID0gJyVzLyouZGNtJywKICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYW5kYXRvcnkgPSBUcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RzID0gVHJ1ZSkKICAgIG91dGZpbGUgPSBGaWxlKGRlc2MgPSAnY29udmVydGVkIGltYWdlIGZpbGUnLAogICAgICAgICAgICAgICAgICAgYXJnc3RyID0gJy1wcmVmaXggJXMnLAogICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSAtMiwKICAgICAgICAgICAgICAgICAgIG1hbmRhdG9yeSA9IFRydWUpCiAgICBmaWxldHlwZSA9IHRyYWl0cy5FbnVtKCdzcGdyJywgJ2ZzZScsICdlcGFuJywgJ2FuYXQnLCAnY3QnLCAnc3BjdCcsJ3BldCcsICdtcmEnLCAnYm1hcCcsICdkaWZmJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29tcmknLCAnYWJ1YycsJ2ZpbScsICdmaXRoJywgJ2ZpY28nLCAnZml0dCcsICdmaWZ0JywnZml6dCcsICdmaWN0JywgJ2ZpYnQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlibicsJ2ZpZ3QnLCdmaXB0JywnZmJ1YycsIGFyZ3N0ciA9ICctJXMnLCBkZXNjPSd0eXBlIG9mIGRhdGFmaWxlIGJlaW5nIGNvbnZlcnRlZCcpCiAgICAnJyd1c2UgeG9yJycnCiAgICBza2lwb3V0bGllcnMgPSB0cmFpdHMuQm9vbChkZXNjID0gJ3NraXAgdGhlIG91dGxpZXJzIGNoZWNrJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3N0ciA9ICctc2tpcF9vdXRsaWVycycpCiAgICBhc3N1bWVtb3NhaWMgPSB0cmFpdHMuQm9vbChkZXNjID0gJ2Fzc3VtZSB0aGF0IFNpZW1lbnMgaW1hZ2UgaXMgbW9zYWljJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3N0ciA9ICctYXNzdW1lX2RpY29tX21vc2FpYycpCiAgICBkYXRhdHlwZSA9IHRyYWl0cy5FbnVtKCdzaG9ydCcsICdmbG9hdCcsICdieXRlJywgJ2NvbXBsZXgnLCBkZXNjID0gJ3NldCBvdXRwdXQgZmlsZSBkYXRhdHlwZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc3RyID0gJy1kYXR1bSAlcycpCiAgICBmdW5jcGFyYW1zID0gdHJhaXRzLlN0cihkZXNjID0gJ3BhcmFtZXRlcnMgZm9yIGZ1bmN0aW9uYWwgZGF0YScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzdHIgPSAnLXRpbWU6enQgJXMgYWx0K3oyJykKCmNsYXNzIFRvM2RPdXRwdXRTcGVjKFRyYWl0ZWRTcGVjKToKICAgIG91dF9maWxlID0gRmlsZShkZXNjID0gJ2NvbnZlcnRlZCBmaWxlJywKICAgICAgICAgICAgICAgICAgICBleGlzdHMgPSBUcnVlKQoKY2xhc3MgVG8zZChBRk5JQ29tbWFuZCk6CiAgICAiIiJDcmVhdGUgYSAzRCBkYXRhc2V0IGZyb20gMkQgaW1hZ2UgZmlsZXMgdXNpbmcgQUZOSSB0bzNkIGNvbW1hbmQuCgpGb3IgY29tcGxldGUgZGV0YWlscywgc2VlIHRoZSBgdG8zZCBEb2N1bWVudGF0aW9uLgo8aHR0cDovL2FmbmkubmltaC5uaWguZ292L3B1Yi9kaXN0L2RvYy9wcm9ncmFtX2hlbHAvdG8zZC5odG1sPmBfCgpUbyBwcmludCBvdXQgdGhlIGNvbW1hbmQgbGluZSBoZWxwLCB1c2U6ClRvM2QoKS5pbnB1dHNfaGVscCgpCgpFeGFtcGxlcwotLS0tLS0tLQo+Pj4gZnJvbSBuaXB5cGUuaW50ZXJmYWNlcyBpbXBvcnQgYWZuaQo+Pj4gdG8zZCA9IGFmbmkuVG8zZCgpCkFGTkkgaGFzIG5vIGVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQgc2V0cyBmaWxldHlwZQpOaXB5cGUgdXNlcyBOSUZUSV9HWiBhcyBkZWZhdWx0Cj4+PiB0bzNkLmlucHV0cy5kYXRhdHlwZSA9ICdmbG9hdCcKPj4+IHRvM2QuaW5wdXRzLmluZm9sZGVyPSdkaWNvbWRpcicKPj4+IHRvM2QuaW5wdXRzLmZpbGV0eXBlPSJhbmF0Igo+Pj4gcmVzID0gdG8zZC5ydW4oKSAjZG9jdGVzdDogK1NLSVAKCiIiIgoKICAgIF9jbWQgPSAndG8zZCcKICAgIGlucHV0X3NwZWMgPSBUbzNkSW5wdXRTcGVjCiAgICBvdXRwdXRfc3BlYyA9IFRvM2RPdXRwdXRTcGVjCgogICAgZGVmIF9saXN0X291dHB1dHMoc2VsZik6CiAgICAgICAgb3V0cHV0cyA9IHNlbGYub3V0cHV0X3NwZWMoKS5nZXQoKQogICAgICAgIG91dHB1dHNbJ291dF9maWxlJ10gPSBzZWxmLmlucHV0cy5vdXRmaWxlCiAgICAgICAgcmV0dXJuIG91dHB1dHMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCmNsYXNzIFRocmVlZFRzaGlmdElucHV0U3BlYyhBRk5JVHJhaXRlZFNwZWMpOgogICAgaW5fZmlsZSA9IEZpbGUoZGVzYyA9ICdpbnB1dCBmaWxlIHRvIDNkVFNoaWZ0JywKPHxmaW1fZW5kfD4="]
["3eaf90a9d1b0816a618548636fb84e5d03b02992-1","3eaf90a9d1b0816a618548636fb84e5d03b02992","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMSBIdWF3ZWkgVGVjaG5vbG9naWVzIENvLiwgTHRkCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiIiImdlbmVyYXRlIGNsb3VkIGRhdGEiIiIKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgbWluZHNwb3JlX2RhdGEuZGF0YSBhcyBtZApmcm9tIG1pbmRzcG9yZV9kYXRhLmRhdGEuc2NpZW50aWZpY19jb21wdXRlIGltcG9ydCBTYW1wbGluZ01vZGUKZnJvbSBtaW5kc3BvcmVfZGF0YS5kYXRhLnNjaWVudGlmaWNfY29tcHV0ZSBpbXBvcnQgQkJveFR5cGUKZnJvbSBtaW5kc3BvcmVfZGF0YS5kYXRhLnNjaWVudGlmaWNfY29tcHV0ZSBpbXBvcnQgU3RkUGh5c2ljYWxRdWFudGl0eQoKCmRlZiBnZW5lcmF0ZV9jbG91ZF9kYXRhKCk6CiAgICAiIiJnZW5lcmF0ZSBjbG91ZCBkYXRhIiIiCiAgICBjb25maWcgPSBtZC5Qb2ludENsb3VkU2FtcGxpbmdDb25maWcoU2FtcGxpbmdNb2RlLkRJTUVOU0lPTlMsIEJCb3hUeXBlLlNUQVRJQywgb3B0LnNhbXBsZV9udW1zLCBvcHQuYmJveF9hcmdzKQoKICAgIHN0ZF9waHlzaWNhbF9pbmZvID0gewogICAgICAgIFN0ZFBoeXNpY2FsUXVhbnRpdHkuTVU6IDEuMCwKICAgICAgICBTdGRQaHlzaWNhbFF1YW50aXR5LkVQU0lMT046IDEuMCwKICAgICAgICBTdGRQaHlzaWNhbFF1YW50aXR5LlNJR01BOiAwLiwKICAgICAgICBTdGRQaHlzaWNhbFF1YW50aXR5LlRBTkQ6IDAuLAogICAgfQoKICAgIG1hdGVyaWFsX2NvbmZpZyA9IG1kLk1hdGVyaWFsQ29uZmlnKG9wdC5qc29uX3BhdGgsIG9wdC5tYXRlcmlhbF9kaXIsIHN0ZF9waHlzaWNhbF9pbmZvLCBOb25lLCBGYWxzZSkKCiAgICBwb2ludGNsb3VkID0gbWQuUG9pbnRDbG91ZChvcHQuc3RwX3BhdGgsIGNvbmZpZywgbWF0ZXJpYWxfY29uZmlnKQogICAgcG9pbnRjbG91ZC50b3BvbG9neV9zb2x2aW5nKCkKICAgIGlubmVyX3BvaW50X2RpY3QgPSBwb2ludGNsb3VkLnRlbnNvcl9idWlsZCgpCgogICAgcmVzID0gaW5uZXJfcG9pbnRfZGljdFs6LCA6LCA6LCA0Ol0KICAgIG5wLnNhdmUob3B0LnNhdmVfcGF0aCwgcmVzLCBhbGxvd19waWNrbGU9VHJ1ZSkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zdHBfcGF0aCcsIHR5cGU9c3RyLCBkZWZhdWx0PSdzdHAgcGF0aCcsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3RoZSBwYXRoIG9mIGZvbGRlciBjb250YWluaW5nIFNUUCBmaWxlcycpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWpzb25fcGF0aCcsIHR5cGU9c3RyLCBkZWZhdWx0PSdqc29uIHBhdGgnLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSd0aGUgcGF0aCBvZiBqc29uIGZpbGUnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1tYXRlcmlhbF9kaXInLCB0eXBlPXN0ciwgZGVmYXVsdD0nbWF0ZXJpYWwgZGlyJywKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ndGhlIHBhdGggb2YgZm9sZGVyIGNvbnRhaW5pbmcgbWF0ZXJpYWwgaW5mb3JtYXRpb24nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zYXZlX3BhdGgnLCB0eXBlPXN0ciwgZGVmYXVsdD0iL2RhdGE2L2h0Yy90bXAubnB5IiwKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc2F2ZSBwYXRoIG9mIGdlbmVyYXRlZCBwb2ludCBjbG91ZCBkYXRhJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc2FtcGxlX251bXMnLCB0eXBlPXR1cGxlLCBkZWZhdWx0PSg1MDAsIDIwMDAsIDgwKSwgaGVscD0nc2FtcGxpbmcgbnVtYmVyIG9uIGVhY2ggYXhpcycpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJib3hfYXJncycsIHR5cGU9dHVwbGUsIGRlZmF1bHQ9KC00MC4sIC04MC4sIC01LiwgNDAuLCA4MC4sIDUuKSwKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ndGhlIGxvY2F0aW9uIG9mIGJib3gsICh4X21pbiwgeV9taW4sIHpfbWluLCB4X21heCwgeV9tYXgsIHpfbWF4KScpCgogICAgb3B0ID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBnZW5lcmF0ZV9jbG91ZF9kYXRhKCkKPHxmaW1fZW5kfD4="]
["3ef797779481d991a6414c8ecb9ffa5d6efbbb6b-3","3ef797779481d991a6414c8ecb9ffa5d6efbbb6b","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMyBQZW5nIFN1bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiMgZm91bmQgaW4gdGhlIENPUFlSSUdIVCBmaWxlLgoKIyBIT05FIGFwcGxpY2F0aW9uCiMgRWxlcGhhbnQgZmxvdyBkZXRlY3Rpb24gYW5kIHNjaGVkdWxpbmcKCmZyb20gaG9uZV9saWIgaW1wb3J0ICoKaW1wb3J0IG1hdGgKCksgPSAwLjIgIyBmb3IgbW92aW5nIGF2ZXJhZ2UKCmRlZiBFbGVwaGFudFF1ZXJ5KCk6CiAgICByZXR1cm4gKFNlbGVjdChbJ3NyY0lQJywnc3JjUG9ydCcsJ2RzdElQJywnZHN0UG9ydCcsJ0J5dGVzV3JpdHRlbicsJ0J5dGVzU2VudE91dCddKSAqCiAgICAgICAgICAgIEZyb20oJ0hvc3RDb25uZWN0aW9uJykgKgogICAgICAgICAgICBFdmVyeSgyMDAwKSkKCmRlZiBMaW5rUXVlcnkoKToKICAgIHJldHVybiAoU2VsZWN0KFsnQmVnaW5EZXZpY2UnLCAnQmVnaW5Qb3J0JywgJ0VuZERldmljZScsICdFbmRQb3J0J10pICoKICAgICAgICAgICAgRnJvbSgnTGlua1N0YXR1cycpICoKICAgICAgICAgICAgRXZlcnkoMjAwMCkpCgpkZWYgVHJhZmZpY01hdHJpeFF1ZXJ5KCk6CiAgICByZXR1cm4gKFNlbGVjdChbJ3NyY0lQJywnZHN0SVAnLCdCeXRlc1NlbnRPdXQnLCdTdGFydFRpbWVTZWNzJywnRWxhcHNlZFNlY3MnLCdTdGFydFRpbWVNaWNyb1NlY3MnLCdFbGFwc2VkTWljcm9TZWNzJ10pICoKICAgICAgICAgICAgRnJvbSgnSG9zdENvbm5lY3Rpb24nKSAqCiAgICAgICAgICAgIEdyb3VwYnkoWydzcmNJUCcsJ2RzdElQJ10pICoKICAgICAgICAgICAgRXZlcnkoMjAwMCkpCgpkZWYgSG9zdEluZm9RdWVyeSgpOgogICAgcmV0dXJuIChTZWxlY3QoWydob3N0SWQnLCAnSVAnXSkgKgogICAgICAgICAgICBGcm9tKCdIb3N0U3RhdHVzJykgKgogICAgICAgICAgICBFdmVyeSgyMDAwKSkKCmRlZiBJc0VsZXBoYW50KHJvdyk6CiAgICBbc2lwLCBzcG9ydCwgZGlwLCBkcG9ydCwgYncsIGJzXSA9IHJvdwogICAgcmV0dXJuIChidyAtIGJzKSA+IDEwMAoKZGVmIERldGVjdEVsZXBoYW50KHRhYmxlKToKICAgIHJldHVybiBGaWx0ZXJMaXN0KElzRWxlcGhhbnQpKHRhYmxlKQoKZGVmIGF2ZXJhZ2UoeCk6CiAgICBpZiBsZW4oeCkgPT0gMDoKICAgICAgICByZXR1cm4gTm9uZQogICAgZWxzZToKICAgICAgICByZXR1cm4gc3VtKHgpIC8gZmxvYXQobGVuKHgpKQoKZGVmIFN1bUJ5dGVzU2VudEZvckhvc3RQYWlyKGNvbm5zT2ZPbmVIb3N0UGFpcik6CiAgICBob3N0QUlQID0gTm9uZQogICAgaG9zdEJJUCA9IE5vbmUKICAgIHRpbWVzdGFtcHMgPSBbXQogICAgYnl0ZXNTdW0gPSBbXQogICAgZm9yIChzcmNJUCwgZHN0SVAsIGJ5dGVzU2VudCwgc3RhcnRTZWNzLCBlbGFwc2VkU2Vjcywgc3RhcnRNaWNyb3NlY3MsIGVsYXBzZWRNaWNyb3NlY3MpIGluIGNvbm5zT2ZPbmVIb3N0UGFpcjoKICAgICAgICBob3N0QUlQID0gc3JjSVAKICAgICAgICBob3N0QklQID0gZHN0SVAKICAgICAgICBieXRlc1N1bS5hcHBlbmQoYnl0ZXNTZW50KQogICAgICAgIHRpbWVzdGFtcCA9IHN0YXJ0U2VjcyArIGVsYXBzZWRTZWNzICsgc3RhcnRNaWNyb3NlY3MgLyAxMDAwMDAwLjAgKyBlbGFwc2VkTWljcm9zZWNzIC8gMTAwMDAwMC4wCiAgICAgICAgdGltZXN0YW1wcy5hcHBlbmQodGltZXN0YW1wKQogICAgcmV0dXJuIFtob3N0QUlQLCBob3N0QklQLCBzdW0oYnl0ZXNTdW0pLCBhdmVyYWdlKHRpbWVzdGFtcHMpXQoKZGVmIENhbFRocm91Z2hwdXQobmV3RGF0YSwgdHBEYXRhKToKICAgIGFjdGl2ZUhvc3RQYWlyID0gW10KICAgIGZvciBob3N0UGFpckRhdGEgaW4gbmV3RGF0YToKICAgICAgICAoaG9zdEFJUCwgaG9zdEJJUCwgbmV3QWNjdW1CeXRlcywgbmV3VGltZXN0YW1wKSA9IGhvc3RQYWlyRGF0YQogICAgICAgIGlmIChob3N0QUlQLCBob3N0QklQKSBpbiB0cERhdGE6CiAgICAgICAgICAgIChsYXN0VGltZXN0YW1wLCBsYXN0QWNjdW1CeXRlcywgbGFzdFJhdGUpID0gdHBEYXRhWyhob3N0QUlQLCBob3N0QklQKV0KICAgICAgICAgICAgaWYgbmV3VGltZXN0YW1wID4gbGFzdFRpbWVzdGFtcDoKICAgICAgICAgICAgICAgIG5ld1JhdGUgPSBmbG9hdChuZXdBY2N1bUJ5dGVzIC0gbGFzdEFjY3VtQnl0ZXMpIC8gKG5ld1RpbWVzdGFtcCAtIGxhc3RUaW1lc3RhbXApCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBuZXdSYXRlID0gMC4wCiAgICAgICAgZWxzZToKICAgICAgICAgICAgbmV3UmF0ZSA9IGZsb2F0KG5ld0FjY3VtQnl0ZXMpIC8gbmV3VGltZXN0YW1wCiAgICAgICAgdHBEYXRhWyhob3N0QUlQLCBob3N0QklQKV0gPSAobmV3VGltZXN0YW1wLCBuZXdBY2N1bUJ5dGVzLCBuZXdSYXRlKQogICAgICAgIGFjdGl2ZUhvc3RQYWlyLmFwcGVuZCgoaG9zdEFJUCwgaG9zdEJJUCkpCiAgICBpbmFjdGl2ZUhvc3RQYWlyID0gW10KICAgIGZvciBrZXkgaW4gdHBEYXRhLml0ZXJrZXlzKCk6CiAgICAgICAgaWYga2V5IG5vdCBpbiBhY3RpdmVIb3N0UGFpcjoKICAgICAgICAgICAgaW5hY3RpdmVIb3N0UGFpci5hcHBlbmQoa2V5KQogICAgZm9yIGtleSBpbiBpbmFjdGl2ZUhvc3RQYWlyOgogICAgICAgIGRlbCB0cERhdGFba2V5XQogICAgcmV0dXJuIHRwRGF0YQoKIyBleHBvbmVudGlhbGx5IHdlaWdodGVkIG1vdmluZyBhdmVyYWdlCmRlZiBFV01BKG5ld1RwRGF0YSwgbGFzdFRwRGF0YSk6CiAgICBmb3IgaG9zdFBhaXIsIG5ld0RhdGEgaW4gbmV3VHBEYXRhLml0ZXJpdGVtcygpOgogICAgICAgIChuZXdUaW1lc3RhbXAsIF8sIG5ld1JhdGUpID0gbmV3RGF0YQogICAgICAgIGlmIGhvc3RQYWlyIGluIGxhc3RUcERhdGE6CiAgICAgICAgICAgIChsYXN0VGltZXN0YW1wLCBsYXN0UmF0ZSkgPSBsYXN0VHBEYXRhW2hvc3RQYWlyXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIChsYXN0VGltZXN0YW1wLCBsYXN0UmF0ZSkgPSAoMC4wLCAwLjApCiAgICAgICAgdGltZURpZmYgPSBuZXdUaW1lc3RhbXAgLSBsYXN0VGltZXN0YW1wCiAgICAgICAgaWYgdGltZURpZmYgPiAwOgogICAgICAgICAgICBuZXdSYXRlID0gKDEuMCAtIG1hdGguZXhwKC10aW1lRGlmZiAvIEspKSAqIG5ld1JhdGUgKyBtYXRoLmV4cCgtdGltZURpZmYgLyBLKSAqIGxhc3RSYXRlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgbmV3UmF0ZSA9IDAuMAogICAgICAgIGxhc3RUcERhdGFbaG9zdFBhaXJdID0gKG5ld1RpbWVzdGFtcCwgbmV3UmF0ZSkKICAgIHJldHVybiBsYXN0VHBEYXRhCgpkZWYgRm9ybWF0VGhyb3VnaHB1dERhdGEodHBEYXRhKToKICAgIHJldCA9IHt9CiAgICBmb3Iga2V5LCB2YWx1ZSBpbiB0cERhdGEuaXRlcml0ZW1zKCk6CiAgICAgICAgcmV0W2tleV0gPSB2YWx1ZVsxXQogICAgcmV0dXJuIHJldAoKZGVmIEFnZ1RyYWZmaWNNYXRyaXgoeCk6CiAgICBnbG9iYWxUcmFmZmljTWF0cml4ID0ge30KICAgIGZvciBkYXRhRnJvbUVhY2hIb3N0IGluIHg6CiAgICAgICAgZm9yIGhvc3RQYWlyLCByYXRlIGluIGRhdGFGcm9tRWFjaEhvc3QuaXRlcml0ZW1zKCk6CiAgICAgICAgICAgIGdsb2JhbFRyYWZmaWNNYXRyaXhbaG9zdFBhaXJdID0gcmF0ZQogICAgcmV0dXJuIGdsb2JhbFRyYWZmaWNNYXRyaXgKCmRlZiBGb3JtYXRIb3N0SW5mb1RvRGljdCh4KToKICAgIHJlc3VsdCA9IHt9CiAgICBmb3IgKGhvc3RJZCwgaXApIGluIHg6CiAgICAgICAgcmVzdWx0W2hvc3RJZF0gPSBpcAogICAgcmV0dXJuIHJlc3VsdAoKIyBsb2NhbCBpcyBzdGFibGUKZGVmIEZpbmRSb3V0ZXNGb3JIb3N0UGFpcihsaW5rcyk6CiAgICBsaW5rcyA9IGxpbmtzWzBdCiAgICBob3N0cyA9IGZpbHRlcihsYW1iZGEgeCA6IHhbMV0gaXMgTm9uZSwgbGlua3MpCiAgICBob3N0cy5zb3J0KCkKICAgIHJlc3VsdCA9IHt9CiAgICBmb3IgaSBpbiByYW5nZShsZW4oaG9zdHMpKToKICAgICAgICBmb3IgaiBpbiByYW5nZShpKzEsIGxlbihob3N0cykpOgogICAgICAgICAgICByZXN1bHRbKGhvc3RzW2ldLCBob3N0c1tqXSldID0gbGlua3MKICAgICMgZm9yIGVhY2ggaG9zdCBwYWlyLCBmaW5kIGFsbCBlcXVhbC1jb3N0IHJvdXRlcyBiZXR3ZWVuIHRoZW0KICAgIHJldHVybiByZXN1bHQKCmRlZiBSZXBsYWNlSG9zdElEd2l0aEhvc3RJUCh4KToKICAgIChob3N0SW5mb0RpY3QsIGhvc3RQYWlyUm91dGVzKSA9IHgKICAgIHJlc3VsdHMgPSB7fQogICAgZm9yIGhvc3RJZFBhaXIsIHJvdXRlcyBpbiBob3N0UGFpclJvdXRlcy5pdGVyaXRlbXMoKToKICAgICAgICAoaG9zdEFJZCwgaG9zdEJJZCkgPSBob3N0SWRQYWlyCiAgICAgICAgaG9zdEFJcCA9IGhvc3RJbmZvRGljdFtob3N0QUlkXQogICAgICAgIGhvc3RCSXAgPSBob3N0SW5mb0RpY3RbaG9zdEJJZF0KICAgICAgICByZXN1bHRzWyhob3N0QUlwLCBob3N0QklwKV0gPSByb3V0ZXMKICAgIHJldHVybiByZXN1bHRzCgojIGxvY2FsIGlzIHN0YWJsZQpkZWYgU2NoZWR1bGUoeCk6CiAgICAoKHRyYWZmaWNNYXRyaXgsIGhvc3RQYWlyUm91dGVzKSwgZWxlcGhhbnRGbG93cykgPSB4CiAgICBydWxlU2V0ID0gW10KICAgIGZvciAoc2lwLCBkaXAsIHNwb3J0LCBkcG9ydCwgXywgXykgaW4gZWxlcGhhbnRGbG93czoKICAgICAgICAjIHBsYWNlaG9sZGVyCiAgICAgICAgcm91dGUgPSBob3N0UGFpclJvdXRlc1soc2lwLCBkaXApXVswXQogICAgICAgIGNyaXRlcmlvbiA9IHsnc3JjSXAnOiBzaXAsICdkc3RJcCc6IGRpcH0KICAgICAgICBhY3Rpb24gPSB7J2ZvcndhcmQnOnJvdXRlfQogICAgICAgIHJ1bGUgPSBbY3JpdGVyaW9uLCBhY3Rpb25dCiAgICAgICAgcnVsZVNldC5hcHBlbmQocnVsZSkKICAgICMgZmlyc3Q6IHNjaGVkdWxlIGVsZXBoYW50IGZsb3dzCiAgICAjIHNlY29uZDogZm9yIHJlbWFpbmluZyBmbG93cyBpbiB0cmFmZmljIG1hdHJpeCwgcmFuZG9tbHkgcGljayBhIHJvdXRlIGZvciB0aGVtIG5vdCBpbnRlcmZlcmluZyB3aXRoIGVsZXBoYW50cwogICAgcmV0dXJuIHJ1bGVTZXQKCmRlZiBtYWluKCk6CiAgICBlbGVwaGFudFN0cmVhbSA9IChFbGVwaGFudFF1ZXJ5KCkgPj4KICAgICAgICAgICAgICAgICAgICAgIE1hcFN0cmVhbVNldChEZXRlY3RFbGVwaGFudCkgPj4KICAgICAgICAgICAgICAgICAgICAgIE1lcmdlSG9zdHMoKSkKICAgIHRyYWZmaWNNYXRyaXhTdHJlYW0gPSAoVHJhZmZpY01hdHJpeFF1ZXJ5KCkgPj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwU3RyZWFtU2V0KE1hcExpc3QoU3VtQnl0ZXNTZW50Rm9ySG9zdFBhaXIpKSA+PgogICAgICAgICAgICAgICAgICAgICAgICAgICBSZWR1Y2VTdHJlYW1TZXQoQ2FsVGhyb3VnaHB1dCwge30pID4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZHVjZVN0cmVhbVNldChFV01BLCB7fSkgPj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwU3RyZWFtU2V0KEZvcm1hdFRocm91Z2hwdXREYXRhKSA+PgogICAgICAgICAgICAgICAgICAgICAgICAgICBNZXJnZUhvc3RzKCkgPj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwU3RyZWFtKEFnZ1RyYWZmaWNNYXRyaXgpKQogICAgaG9zdEluZm9TdHJlYW0gPSBIb3N0SW5mb1F1ZXJ5KCkgPj4gTWVyZ2VIb3N0cygpID4+IE1hcFN0cmVhbShGb3JtYXRIb3N0SW5mb1RvRGljdCkKICAgIHJvdXRlc1N0cmVhbSA9IChMaW5rUXVlcnkoKSA+PgogICAgICAgICAgICAgICAgICAgIE1hcFN0cmVhbShGaW5kUm91dGVzRm9ySG9zdFBhaXIpKQogICAgaG9zdFJvdXRlc1N0cmVhbSA9IE1lcmdlU3RyZWFtcyhob3N0SW5mb1N0cmVhbSwgcm91dGVzU3RyZWFtKSA+PiBNYXBTdHJlYW0oUmVwbGFjZUhvc3RJRHdpdGhIb3N0SVApCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHN0cmVhbSA9IChNZXJnZVN0cmVhbXMoTWVyZ2VTdHJlYW1zKHRyYWZmaWNNYXRyaXhTdHJlYW0sIGhvc3RSb3V0ZXNTdHJlYW0pLCBlbGVwaGFudFN0cmVhbSkgPj4KICAgICAgICAgICAgICBNYXBTdHJlYW0oU2NoZWR1bGUpID4+CiAgICAgICAgICAgICAgUmVnaXN0ZXJQb2xpY3koKSkKICAgIHJldHVybiBzdHJlYW0KPHxmaW1fZW5kfD4="]
["dec9656d517909ac9a464d3f8794c9f0dcba2b0f-5","dec9656d517909ac9a464d3f8794c9f0dcba2b0f","PHxmaW1fcHJlZml4fD4KIyAzLiDQmtC+0LzQv9GO0YLRitGA0L3QsCDQt9Cw0LvQsAojINCSINC90LDQuS3Qs9C+0LvRj9C80LDRgtCwINC60L7QvNC/0Y7RgtGK0YDQvdCwINC30LDQu9CwINCyINCR0YrQu9Cz0LDRgNC40Y8g0YbQtdC90LjRgtC1INCy0LDRgNC40YDQsNGCINC/0L7RgNCw0LTQuCDQs9C+0LvRj9C80LDRgtCwINC/0L7RgdC10YnQsNC10LzQvtGB0YIuCiMg0KLQsNC60YHQuNGC0LUg0L3QsCDQt9Cw0LvQsNGC0LAg0YHQsCDQsiDQt9Cw0LLQuNGB0LjQvNC+0YHRgiDQvtGCINGC0L7QstCwINC00LDQu9C4INC1INC00LXQvSDQuNC70Lgg0L3QvtGJLCDQutCw0LrRgtC+INC4INC80LXRgdC10YbRitGCLCAg0LIg0LrQvtC50YLQviDRgdC1INC/0L7RgdC10YnQsNCy0LAg0LfQsNC70LDRgtCwLiDQptC10L3QuNGC0LUg0YHQsCDRgdC70LXQtNC90LjRgtC1OgojIAnQnNCw0YDRgiDQtNC+INCc0LDQuQnQrtC90Lgg0LTQviDQkNCy0LPRg9GB0YIKIyAg0JTQtdC9CTEwLjUwINC70LIv0YcJMTIuNjAg0LvQsi/RhwojICDQndC+0YkJOC40MCDQu9CyL9GHCTEwLjIwINC70LIv0YcKIyDQn9GA0LXQtNC70LDQs9Cw0YIg0YHQtSDQuCDRgdC70LXQtNC90LjRgtC1INC+0YLRgdGC0YrQv9C60Lgg0LIg0YHQu9C10LTQvdCw0YLQsCDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvQvdC+0YHRgjoKIyDigKIJ0JfQsCDQs9GA0YPQv9CwINC+0YIg0YfQtdGC0LjRgNC40LzQsCDQuNC70Lgg0L/QvtCy0LXRh9C1INGH0L7QstC10LrQsCwg0YbQtdC90LDRgtCwINC90LAg0YfQvtCy0LXQuiDRgdC1INC90LDQvNCw0LvRjyDRgSAxMCUKIyDigKIJ0JfQsCA1INC40LvQuCDQv9C+0LLQtdGH0LUg0YfQsNGB0LAg0L/RgNC10LrQsNGA0LDQvdC4LCDRhtC10L3QsNGC0LAg0L3QsCDRh9C+0LLQtdC6INGB0LUg0L3QsNC80LDQu9GPINGBIDUwJQojINCU0LAg0YHQtSDQvdCw0L/QuNGI0LUg0L/RgNC+0LPRgNCw0LzQsCwg0LrQvtGP0YLQviDQuNC30YfQuNGB0LvRj9Cy0LAg0YbQtdC90LDRgtCwINC90LAg0YfQvtCy0LXQuiDQt9CwINGH0LDRgSDQuCDQvtCx0YnQsNGC0LAg0YHRg9C80LAuCgptb250aCA9IGlucHV0KCkKaG91cnNfc3BlbnQgPSBpbnQoaW5wdXQoKSkKY291bnRfcGVvcGxlX2luX2dyb3VwID0gaW50KGlucHV0KCkpCnRpbWVfb2ZfZGF5ID0gaW5wdXQoKQoKaWYgdGltZV9vZl9kYXkgPT0gJ2RheSc6CiAgICBpZiBtb250aCA9PSAnbWFyY2gnIG9yIG1vbnRoID09ICdhcHJpbCcgb3IgbW9udGggPT0gJ21heSc6CiAgICAgICAgcHJpY2VfcGVyX3BlcnNvbl9wZXJfaG91ciA9IDEwLjUwCiAgICBlbGlmIG1vbnRoID09ICdqdW5lJyBvciBtb250aCA9PSAnanVseScgb3IgbW9udGggPT0gJ2F1Z3VzdCc6CiAgICAgICAgcHJpY2VfcGVyX3BlcnNvbl9wZXJfaG91ciA9IDEyLjYwCmVsaWYgdGltZV9vZl9kYXkgPT0gJ25pZ2h0JzoKICAgIGlmIG1vbnRoID09ICdtYXJjaCcgb3IgbW9udGggPT0gJ2FwcmlsJyBvciBtb250aCA9PSAnbWF5JzoKICAgICAgICBwcmljZV9wZXJfcGVyc29uX3Blcl9ob3VyID0gOC40MAogICAgZWxpZiBtb250aCA9PSAnanVuZScgb3IgbW9udGggPT0gJ2p1bHknIG9yIG1vbnRoID09ICdhdWd1c3QnOgogICAgICAgIHByaWNlX3Blcl9wZXJzb25fcGVyX2hvdXIgPSAxMC4yMAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgppZiBjb3VudF9wZW9wbGVfaW5fZ3JvdXAgPj0gNDoKICAgIHByaWNlX3Blcl9wZXJzb25fcGVyX2hvdXIgPSAwLjkgKiBwcmljZV9wZXJfcGVyc29uX3Blcl9ob3VyCgo8fGZpbV9lbmR8Pg=="]
["8d3a632f41dc671b0b4a41b55d8aa1f4e26a2e50-4","8d3a632f41dc671b0b4a41b55d8aa1f4e26a2e50","PHxmaW1fcHJlZml4fD4KIyAgIENvcHlyaWdodCAyMDE5IEVudHJvcGljYSBMYWJzCiMKIyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgoiIiIKQ29udmVyc2lvbiBmdW5jdGlvbnMgZm9yIHRoZSBkaWZmZXJlbnQgUUFPQSBQYXJhbWV0cml6YXRpb25zLiBTbyBmYXIgd2Ugb25seQpvbmx5IHN1cHBvcnQgZ29pbmcgZnJvbSBsZXNzIHRvIG1vcmUgc3BlY2lhbGljZWQgcGFyYW1ldHJpemF0aW9ucy4gVGhlIHR5cGUKdHJlZSBsb29rcyBhcyBmb2xsb3dzOgoKICAgRXh0ZW5kZWQgICA8LS0tLS0tLS0tIEZvdXJpZXJFeHRlbmRlZAogICAgICAgXiAgICAgICAgICAgICAgICAgICAgICBeCiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwKU3RhbmRhcmRXaXRoQmlhcyA8LS0tLS0tIEZvdXJpZXJXaXRoQmlhcwogICAgICAgXiAgICAgICAgICAgICAgICAgICAgICBeCiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwKICAgIFN0YW5kYXJkICA8LS0tLS0tLS0tLS0gRm91cmllcgogICAgICAgXgogICAgICAgfAogICAgQW5uZWFsaW5nCiIiIgpmcm9tIHR5cGluZyBpbXBvcnQgVHlwZQoKZnJvbSBjb3B5IGltcG9ydCBkZWVwY29weQppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBzY2lweS5mZnRwYWNrIGltcG9ydCBkY3QsIGRzdAoKIyBpbXBvcnQgZW50cm9waWNhX3Fhb2EucWFvYS5wYXJhbWV0ZXJzIGFzIFAKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGltcG9ydCAoQW5uZWFsaW5nUGFyYW1zLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBTdGFuZGFyZFBhcmFtcywKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgRXh0ZW5kZWRQYXJhbXMsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIFN0YW5kYXJkV2l0aEJpYXNQYXJhbXMsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIEZvdXJpZXJQYXJhbXMsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIEZvdXJpZXJXaXRoQmlhc1BhcmFtcywKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgRm91cmllckV4dGVuZGVkUGFyYW1zKQojIChBbm5lYWxpbmdQYXJhbXMsIFN0YW5kYXJkUGFyYW1zLCBTdGFuZGFyZFdpdGhCaWFzUGFyYW1zLAojICBFeHRlbmRlZFBhcmFtcywgRm91cmllclBhcmFtcywgRm91cmllcldpdGhCaWFzUGFyYW1zLAojICBGb3VyaWVyRXh0ZW5kZWRQYXJhbXMpXAojID0gKFAuQW5uZWFsaW5nUGFyYW1zLCBQLlN0YW5kYXJkUGFyYW1zLCBQLlN0YW5kYXJkV2l0aEJpYXNQYXJhbXMsCiMgICAgUC5FeHRlbmRlZFBhcmFtcywgUC5Gb3VyaWVyUGFyYW1zLCBQLkZvdXJpZXJXaXRoQmlhc1BhcmFtcywKIyAgICBQLkZvdXJpZXJFeHRlbmRlZFBhcmFtcykKCmZyb20gZW50cm9waWNhX3Fhb2EucWFvYS5wYXJhbWV0ZXJzIGltcG9ydCAoQW5uZWFsaW5nUGFyYW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YW5kYXJkUGFyYW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkUGFyYW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YW5kYXJkV2l0aEJpYXNQYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm91cmllclBhcmFtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3VyaWVyV2l0aEJpYXNQYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm91cmllckV4dGVuZGVkUGFyYW1zKQoKCmRlZiBhbm5lYWxpbmdfdG9fc3RhbmRhcmQocGFyYW1zOiBBbm5lYWxpbmdQYXJhbXMpIC0+IFN0YW5kYXJkUGFyYW1zOgogICAgb3V0ID0gZGVlcGNvcHkocGFyYW1zKQogICAgb3V0Ll9fY2xhc3NfXyA9IFN0YW5kYXJkUGFyYW1zCiAgICBvdXQuYmV0YXMgPSBwYXJhbXMuX2FubmVhbGluZ190aW1lICogKDEgLSBwYXJhbXMuc2NoZWR1bGUpIC8gcGFyYW1zLm5fc3RlcHMKICAgIG91dC5nYW1tYXMgPSBwYXJhbXMuX2FubmVhbGluZ190aW1lICogcGFyYW1zLnNjaGVkdWxlIC8gcGFyYW1zLm5fc3RlcHMKCiAgICAjIGFuZCBjbGVhbiB1cCBhZnRlciB1cwogICAgZGVsIG91dC5fX3NjaGVkdWxlCiAgICBkZWwgb3V0Ll9hbm5lYWxpbmdfdGltZQoKICAgIHJldHVybiBvdXQKCgpkZWYgc3RhbmRhcmRfdG9fc3RhbmRhcmRfd19iaWFzKAogICAgICAgIHBhcmFtczogU3RhbmRhcmRQYXJhbXMpIC0+IFN0YW5kYXJkV2l0aEJpYXNQYXJhbXM6CiAgICBvdXQgPSBkZWVwY29weShwYXJhbXMpCiAgICBvdXQuX19jbGFzc19fID0gU3RhbmRhcmRXaXRoQmlhc1BhcmFtcwogICAgb3V0LmdhbW1hc19zaW5nbGVzID0gcGFyYW1zLmdhbW1hcwogICAgb3V0LmdhbW1hc19wYWlycyA9IHBhcmFtcy5nYW1tYXMKCiAgICAjIGFuZCBjbGVhbiB1cCBhZnRlciB1cwogICAgZGVsIG91dC5fX2dhbW1hcwoKICAgIHJldHVybiBvdXQKCgpkZWYgc3RhbmRhcmRfd19iaWFzX3RvX2V4dGVuZGVkKAogICAgICAgIHBhcmFtczogU3RhbmRhcmRXaXRoQmlhc1BhcmFtcykgLT4gRXh0ZW5kZWRQYXJhbXM6CiAgICBvdXQgPSBkZWVwY29weShwYXJhbXMpCiAgICBvdXQuX19jbGFzc19fID0gRXh0ZW5kZWRQYXJhbXMKICAgIG91dC5iZXRhcyA9IG5wLm91dGVyKHBhcmFtcy5iZXRhcywgbnAub25lcyhsZW4ocGFyYW1zLnJlZykpKQogICAgb3V0LmdhbW1hc19zaW5nbGVzID0gbnAub3V0ZXIocGFyYW1zLmdhbW1hc19zaW5nbGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnAub25lcyhsZW4ocGFyYW1zLnF1Yml0c19zaW5nbGVzKSkpCiAgICBvdXQuZ2FtbWFzX3BhaXJzID0gbnAub3V0ZXIocGFyYW1zLmdhbW1hc19wYWlycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucC5vbmVzKGxlbihwYXJhbXMucXViaXRzX3BhaXJzKSkpCiAgICByZXR1cm4gb3V0CgoKZGVmIGZvdXJpZXJfdG9fc3RhbmRhcmQocGFyYW1zOiBGb3VyaWVyUGFyYW1zKSAtPiBTdGFuZGFyZFBhcmFtczoKICAgIG91dCA9IGRlZXBjb3B5KHBhcmFtcykKICAgIG91dC5fX2NsYXNzX18gPSBTdGFuZGFyZFBhcmFtcwogICAgb3V0LmJldGFzID0gZGN0KHBhcmFtcy52LCBuPW91dC5uX3N0ZXBzKQogICAgb3V0LmdhbW1hcyA9IGRzdChwYXJhbXMudSwgbj1vdXQubl9zdGVwcykKCiAgICAjIGFuZCBjbGVhbiB1cAogICAgZGVsIG91dC5fX3UKICAgIGRlbCBvdXQuX192CiAgICBkZWwgb3V0LnEKCiAgICByZXR1cm4gb3V0CgoKZGVmIGZvdXJpZXJfd19iaWFzX3RvX3N0YW5kYXJkX3dfYmlhcygKICAgICAgICBwYXJhbXM6IEZvdXJpZXJXaXRoQmlhc1BhcmFtcykgLT4gU3RhbmRhcmRXaXRoQmlhc1BhcmFtczoKICAgIG91dCA9IGRlZXBjb3B5KHBhcmFtcykKICAgIG91dC5fX2NsYXNzX18gPSBTdGFuZGFyZFdpdGhCaWFzUGFyYW1zCiAgICBvdXQuYmV0YXMgPSBkY3QocGFyYW1zLnYsIG49b3V0Lm5fc3RlcHMpCiAgICBvdXQuZ2FtbWFzX3NpbmdsZXMgPSBkc3QocGFyYW1zLnVfc2luZ2xlcywgbj1vdXQubl9zdGVwcykKICAgIG91dC5nYW1tYXNfcGFpcnMgPSBkc3QocGFyYW1zLnVfcGFpcnMsIG49b3V0Lm5fc3RlcHMpCgogICAgIyBhbmQgY2xlYW4gdXAKICAgIGRlbCBvdXQuX191X3NpbmdsZXMKICAgIGRlbCBvdXQuX191X3BhaXJzCiAgICBkZWwgb3V0Ll9fdgogICAgZGVsIG91dC5xCgogICAgcmV0dXJuIG91dAoKCmRlZiBmb3VyaWVyX3RvX2ZvdXJpZXJfd19iaWFzKHBhcmFtczogRm91cmllclBhcmFtcykgLT4gRm91cmllcldpdGhCaWFzUGFyYW1zOgogICAgb3V0ID0gZGVlcGNvcHkocGFyYW1zKQogICAgb3V0Ll9fY2xhc3NfXyA9IEZvdXJpZXJXaXRoQmlhc1BhcmFtcwogICAgb3V0LnVfc2luZ2xlcyA9IHBhcmFtcy51CiAgICBvdXQudV9wYWlycyA9IHBhcmFtcy51CgogICAgIyBhbmQgY2xlYW4gdXAKICAgIGRlbCBvdXQuX191CgogICAgcmV0dXJuIG91dAoKCmRlZiBmb3VyaWVyX3dfYmlhc190b19mb3VyaWVyX2V4dGVuZGVkKAogICAgICAgIHBhcmFtczogRm91cmllcldpdGhCaWFzUGFyYW1zKSAtPiBGb3VyaWVyRXh0ZW5kZWRQYXJhbXM6CiAgICBvdXQgPSBkZWVwY29weShwYXJhbXMpCiAgICBvdXQuX19jbGFzc19fID0gRm91cmllckV4dGVuZGVkUGFyYW1zCiAgICBvdXQudiA9IG5wLm91dGVyKHBhcmFtcy52LCBucC5vbmVzKGxlbihwYXJhbXMucmVnKSkpCiAgICBvdXQudV9zaW5nbGVzID0gbnAub3V0ZXIocGFyYW1zLnVfc2luZ2xlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucC5vbmVzKGxlbihwYXJhbXMucXViaXRzX3NpbmdsZXMpKSkKICAgIG91dC51X3BhaXJzID0gbnAub3V0ZXIocGFyYW1zLnVfcGFpcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5wLm9uZXMobGVuKHBhcmFtcy5xdWJpdHNfcGFpcnMpKSkKICAgIHJldHVybiBvdXQKCgpkZWYgZm91cmllcl9leHRlbmRlZF90b19leHRlbmRlZCgKICAgICAgICBwYXJhbXM6IEZvdXJpZXJFeHRlbmRlZFBhcmFtcykgLT4gRXh0ZW5kZWRQYXJhbXM6CiAgICBvdXQgPSBkZWVwY29weShwYXJhbXMpCiAgICBvdXQuX19jbGFzc19fID0gRXh0ZW5kZWRQYXJhbXMKICAgIG91dC5iZXRhcyA9IGRjdChwYXJhbXMudiwgbj1vdXQubl9zdGVwcywgYXhpcz0wKQogICAgb3V0LmdhbW1hc19zaW5nbGVzID0gZHN0KHBhcmFtcy51X3NpbmdsZXMsIG49b3V0Lm5fc3RlcHMsIGF4aXM9MCkKICAgIG91dC5nYW1tYXNfcGFpcnMgPSBkc3QocGFyYW1zLnVfcGFpcnMsIG49b3V0Lm5fc3RlcHMsIGF4aXM9MCkKCiAgICAjIGFuZCBjbGVhbiB1cAogICAgZGVsIG91dC5fX3Vfc2luZ2xlcwogICAgZGVsIG91dC5fX3VfcGFpcnMKICAgIGRlbCBvdXQuX192CiAgICBkZWwgb3V0LnEKCiAgICByZXR1cm4gb3V0CgoKIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEFuZCBub3cgYWxsIHRoZSBwb3NzaWJsZSBjb21wb3NpdGlvbnMgYXMgd2VsbDoKIyBUb2RvOiBDcmVhdGUgdGhpcyBjb2RlIGF1dG9tYXRpY2FsbHkgYnkgdHJhdmVyc2luZyB0aGUgdHJlZT8KIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKZGVmIGFubmVhbGluZ190b19zdGFuZGFyZF93X2JpYXMoCiAgICAgICAgcGFyYW1zOiBBbm5lYWxpbmdQYXJhbXMpIC0+IFN0YW5kYXJkV2l0aEJpYXNQYXJhbXM6CiAgICByZXR1cm4gc3RhbmRhcmRfdG9fc3RhbmRhcmRfd19iaWFzKGFubmVhbGluZ190b19zdGFuZGFyZChwYXJhbXMpKQoKCmRlZiBhbm5lYWxpbmdfdG9fZXh0ZW5kZWQoCiAgICAgICAgcGFyYW1zOiBBbm5lYWxpbmdQYXJhbXMpIC0+IEV4dGVuZGVkUGFyYW1zOgogICAgcmV0dXJuIHN0YW5kYXJkX3dfYmlhc190b19leHRlbmRlZChhbm5lYWxpbmdfdG9fc3RhbmRhcmRfd19iaWFzKHBhcmFtcykpCgoKZGVmIHN0YW5kYXJkX3RvX2V4dGVuZGVkKAogICAgICAgIHBhcmFtczogU3RhbmRhcmRQYXJhbXMpIC0+IEV4dGVuZGVkUGFyYW1zOgogICAgcmV0dXJuIHN0YW5kYXJkX3dfYmlhc190b19leHRlbmRlZChzdGFuZGFyZF90b19zdGFuZGFyZF93X2JpYXMocGFyYW1zKSkKCgpkZWYgZm91cmllcl90b19mb3VyaWVyX2V4dGVuZGVkKAogICAgICAgIHBhcmFtczogRm91cmllclBhcmFtcykgLT4gRm91cmllckV4dGVuZGVkUGFyYW1zOgogICAgcmV0dXJuIGZvdXJpZXJfd19iaWFzX3RvX2ZvdXJpZXJfZXh0ZW5kZWQoCiAgICAgICAgICAgICAgICBmb3VyaWVyX3RvX2ZvdXJpZXJfd19iaWFzKHBhcmFtcykpCgoKZGVmIGZvdXJpZXJfdG9fc3RhbmRhcmRfd19iaWFzKAogICAgICAgIHBhcmFtczogRm91cmllclBhcmFtcykgLT4gU3RhbmRhcmRXaXRoQmlhc1BhcmFtczoKICAgIHJldHVybiBzdGFuZGFyZF90b19zdGFuZGFyZF93X2JpYXMoZm91cmllcl90b19zdGFuZGFyZChwYXJhbXMpKQoKCmRlZiBmb3VyaWVyX3RvX2V4dGVuZGVkKAogICAgICAgIHBhcmFtczogRm91cmllclBhcmFtcykgLT4gRXh0ZW5kZWRQYXJhbXM6CiAgICByZXR1cm4gc3RhbmRhcmRfd19iaWFzX3RvX2V4dGVuZGVkKGZvdXJpZXJfdG9fc3RhbmRhcmRfd19iaWFzKHBhcmFtcykpCgoKZGVmIGZvdXJpZXJfd19iaWFzX3RvX2V4dGVuZGVkKAogICAgICAgIHBhcmFtczogRm91cmllcldpdGhCaWFzUGFyYW1zKSAtPiBFeHRlbmRlZFBhcmFtczoKICAgIHJldHVybiBzdGFuZGFyZF93X2JpYXNfdG9fZXh0ZW5kZWQoCiAgICAgICAgICAgIGZvdXJpZXJfd19iaWFzX3RvX3N0YW5kYXJkX3dfYmlhcyhwYXJhbXMpKQoKCiMgQSBkaWN0IHdpdGggYWxsIHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBhY2Nlc3NpYmxlIGJ5CiMgKGlucHV0X3R5cGUsIG91dHB1dF90eXBlKQpjb252ZXJzaW9uX2Z1bmN0aW9ucyA9XAogICAgewogICAgIChGb3VyaWVyRXh0ZW5kZWRQYXJhbXMsIEV4dGVuZGVkUGFyYW1zKTogZm91cmllcl9leHRlbmRlZF90b19leHRlbmRlZCwKICAgICAoRm91cmllcldpdGhCaWFzUGFyYW1zLCBTdGFuZGFyZFdpdGhCaWFzUGFyYW1zKTpcCiAgICAgZm91cmllcl93X2JpYXNfdG9fc3RhbmRhcmRfd19iaWFzLAogICAgIChGb3VyaWVyUGFyYW1zLCBTdGFuZGFyZFBhcmFtcyk6IGZvdXJpZXJfdG9fc3RhbmRhcmQsCiAgICAgKEFubmVhbGluZ1BhcmFtcywgU3RhbmRhcmRQYXJhbXMpOiBhbm5lYWxpbmdfdG9fc3RhbmRhcmQsCiAgICAgKFN0YW5kYXJkUGFyYW1zLCBTdGFuZGFyZFdpdGhCaWFzUGFyYW1zKTogc3RhbmRhcmRfdG9fc3RhbmRhcmRfd19iaWFzLAogICAgIChTdGFuZGFyZFdpdGhCaWFzUGFyYW1zLCBFeHRlbmRlZFBhcmFtcyk6IHN0YW5kYXJkX3dfYmlhc190b19leHRlbmRlZCwKICAgICAoRm91cmllclBhcmFtcywgRm91cmllcldpdGhCaWFzUGFyYW1zKTogZm91cmllcl90b19mb3VyaWVyX3dfYmlhcywKICAgICAoRm91cmllcldpdGhCaWFzUGFyYW1zLCBGb3VyaWVyRXh0ZW5kZWRQYXJhbXMpOlwKICAgICBmb3VyaWVyX3dfYmlhc190b19mb3VyaWVyX2V4dGVuZGVkLAogICAgIChBbm5lYWxpbmdQYXJhbXMsIFN0YW5kYXJkV2l0aEJpYXNQYXJhbXMpOiBhbm5lYWxpbmdfdG9fc3RhbmRhcmRfd19iaWFzLAogICAgIChBbm5lYWxpbmdQYXJhbXMsIEV4dGVuZGVkUGFyYW1zKTogYW5uZWFsaW5nX3RvX2V4dGVuZGVkLAogICAgIChTdGFuZGFyZFBhcmFtcywgRXh0ZW5kZWRQYXJhbXMpOiBzdGFuZGFyZF90b19leHRlbmRlZCwKICAgICAoRm91cmllclBhcmFtcywgRm91cmllckV4dGVuZGVkUGFyYW1zKTogZm91cmllcl90b19mb3VyaWVyX2V4dGVuZGVkLAogICAgIChGb3VyaWVyUGFyYW1zLCBTdGFuZGFyZFdpdGhCaWFzUGFyYW1zKTogZm91cmllcl90b19zdGFuZGFyZF93X2JpYXMsCiAgICAgKEZvdXJpZXJQYXJhbXMsIEV4dGVuZGVkUGFyYW1zKTogZm91cmllcl90b19leHRlbmRlZCwKICAgICAoRm91cmllcldpdGhCaWFzUGFyYW1zLCBFeHRlbmRlZFBhcmFtcyk6IGZvdXJpZXJfd19iaWFzX3RvX2V4dGVuZGVkLAogICAgfQoKCmRlZiBjb252ZXJ0ZXIocGFyYW1zLCB0YXJnZXRfdHlwZTogdHlwZSk6CiAgICAiIiIKICAgIENvbnZlcnQgYGBwYXJhbXNgYCB0byB0eXBlIGBgdGFyZ2V0X3R5cGVgYAoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHBhcmFtczoKICAgICAgICBUaGUgaW5wdXQgcGFyYW1ldGVycwogICAgdGFyZ2V0X3R5cGU6CiAgICAgICAgVGhlIHRhcmdldCB0eXBlCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgdGFyZ2V0X3R5cGU6CiAgICAgICAgVGhlIGNvbnZlcnRlZCBwYXJhbWV0ZXJzCgogICAgUmFpc2VzCiAgICAtLS0tLS0KICAgIFR5cGVFcnJvcjoKICAgICAgICBJZiBjb252ZXJzaW9uIGZyb20gdHlwZShwYXJhbXMpIHRvIHRhcmdldF90eXBlIGlzIG5vdCBzdXBwb3J0ZWQuCiAgICAiIiIKICAgIHRyeToKICAgICAgICBvdXQgPSBjb252ZXJzaW9uX2Z1bmN0aW9uc1sodHlwZShwYXJhbXMpLCB0YXJnZXRfdHlwZSldKHBhcmFtcykKPHxmaW1faG9sZXw+CiAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKGYiQ29udmVyc2lvbiBmcm9tIHt0eXBlKHBhcmFtcyl9IHRvIHt0YXJnZXRfdHlwZX0gIgogICAgICAgICAgICAgICAgICAgICAgICAibm90IHN1cHBvcnRlZC4iKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJldHVybiBvdXQKPHxmaW1fZW5kfD4="]
["32886889f49c47e2c70f5bcbe6846ed65585c672-2","32886889f49c47e2c70f5bcbe6846ed65585c672","PHxmaW1fcHJlZml4fD4KZnJvbSB3YWxkdXJfY29yZS5jb3JlIGltcG9ydCBXYWxkdXJFeHRlbnNpb24KCgpjbGFzcyBHZW9JUEV4dGVuc2lvbihXYWxkdXJFeHRlbnNpb24pOgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGRqYW5nb19hcHAoKToKICAgICAgICByZXR1cm4gJ3dhbGR1cl9nZW9faXAnCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGRqYW5nb191cmxzKCk6CiAgICAgICAgZnJvbSAudXJscyBpbXBvcnQgdXJscGF0dGVybnMKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICByZXR1cm4gdXJscGF0dGVybnMKPHxmaW1fZW5kfD4="]
["9d1972fb42f00137ef74da36e06290dda8541e67-3","9d1972fb42f00137ef74da36e06290dda8541e67","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwpmcm9tIG1hdGggaW1wb3J0IGxvZwpmcm9tIHN5cyBpbXBvcnQgc3RkZXJyCgpuLCBrID0gW2ludCh4KSBmb3IgeCBpbiBpbnB1dCgpLnNwbGl0KCldCnAgPSBbLTFdICogbiAjIHBhcmVudApsID0gWy0xXSAqIG4gIyBsZWZ0IGNoaWxkCnIgPSBbLTFdICogbiAjIHJpZ2h0IGNoaWxkCnJvb3QgPSAtMQpmb3IgaSBpbiByYW5nZShuKToKICAgIGYgPSBpbnQoaW5wdXQoKSktMQogICAgaWYgZiA9PSAtMjoKICAgICAgICBmID0gLTEKICAgICAgICByb290ID0gaQogICAgICAgIGNvbnRpbnVlCiAgICBwW2ldID0gZgogICAgYXNzZXJ0IGYgIT0gaQogICAgaWYgaSA+IGY6CiAgICAgICAgYXNzZXJ0IHJbZl0gPT0gLTEKICAgICAgICByW2ZdID0gaQogICAgaWYgaSA8IGY6CiAgICAgICAgYXNzZXJ0IGxbZl0gPT0gLTEKICAgICAgICBsW2ZdID0gaQphc3NlcnQgcm9vdCAhPSAtMQoKIyBudW1iZXIgb2Ygbm9kZXMgaW4gbWluaW1hbCB0cmVlIG9mIGhlaWdodCBoCnQgPSBbMF0gKiA2MAp0WzBdID0gMAp0WzFdID0gMQpmb3IgaSBpbiByYW5nZSgyLCA2MCk6IHRbaV0gPSB0W2ktMV0gKyB0W2ktMl0gKyAxCnQuYXBwZW5kKDApCgojIENvbXB1dGUgaGVpZ2h0cyBhbmQgZGVwdGhzCmhlaWdodCA9IFswXSAqIG4KZGVwdGggPSBbMV0gKiBuCmRlZiBoZWlnaHRfZGZzKHUpOgogICAgaGVpZ2h0W3VdID0gMQogICAgaWYgbFt1XSE9LTE6CiAgICAgICAgZGVwdGhbbFt1XV0gPSBkZXB0aFt1XSArIDEKICAgICAgICBoZWlnaHRbdV0gPSBtYXgoaGVpZ2h0W3VdLCBoZWlnaHRfZGZzKGxbdV0pKzEpCiAgICBpZiByW3VdIT0tMToKICAgICAgICBkZXB0aFtyW3VdXSA9IGRlcHRoW3VdICsgMQogICAgICAgIGhlaWdodFt1XSA9IG1heChoZWlnaHRbdV0sIGhlaWdodF9kZnMoclt1XSkrMSkKICAgIHJldHVybiBoZWlnaHRbdV0KaGVpZ2h0X2Rmcyhyb290KQoKCiMgSGVpZ2h0cyBvZiBhbGwgcGFyZW50cyBvZiB0aGUgY3VycmVudCB2ZXJ0ZXgKCnRha2UgPSBbRmFsc2VdICogbgoKIyBIZWlnaHRzIGF0IHdoaWNoIHdlIGJyYW5jaGVkIHRvIHRoZSByaWdodC4KIyBXZSBkb24ndCBoYXZlIHRvIGNvdW50IG5vZGVzIGxlZnQgb2YgdGhlc2UuCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiMgRG9uJ3QgYWRkIG5vZGVzIGRlZXBlciB0aGFuIHRoaXMuCm1heGQgPSAxMDAwCgo8fGZpbV9lbmR8Pg=="]
["9d1371efd92527e2b62c9ee4a7792334015856b7-1","9d1371efd92527e2b62c9ee4a7792334015856b7","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMCBIc3VlaC1UaSBEZXJlayBMaXUKIyAKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCmltcG9ydCBicHkKCmRlZiBzZXRNYXRfaG9uZXkobWVzaCwgbWVzaENvbG9yLCBub3RUcmFuc3BhcmVuY3kgPSAwLjYpOgoJbWF0ID0gYnB5LmRhdGEubWF0ZXJpYWxzLm5ldygnTWVzaE1hdGVyaWFsJykKCW1lc2guZGF0YS5tYXRlcmlhbHMuYXBwZW5kKG1hdCkKCW1lc2guYWN0aXZlX21hdGVyaWFsID0gbWF0CgltYXQudXNlX25vZGVzID0gVHJ1ZQoJdHJlZSA9IG1hdC5ub2RlX3RyZWUKCgkjIHNldCBwcmluY2lwbGVkIEJTREYKCXRyZWUubm9kZXNbIlByaW5jaXBsZWQgQlNERiJdLmlucHV0c1snUm91Z2huZXNzJ10uZGVmYXVsdF92YWx1ZSA9IDAuNwoJdHJlZS5ub2Rlc1siUHJpbmNpcGxlZCBCU0RGIl0uaW5wdXRzWydTaGVlbiBUaW50J10uZGVmYXVsdF92YWx1ZSA9IDAKCglNSVhOb2RlID0gdHJlZS5ub2Rlcy5uZXcoJ1NoYWRlck5vZGVNaXhTaGFkZXInKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CglNSVhOb2RlLmlucHV0c1swXS5kZWZhdWx0X3ZhbHVlID0gbm90VHJhbnNwYXJlbmN5CgoJVExOb2RlID0gdHJlZS5ub2Rlcy5uZXcoJ1NoYWRlck5vZGVCc2RmVHJhbnNsdWNlbnQnKQoJVFBOb2RlID0gdHJlZS5ub2Rlcy5uZXcoJ1NoYWRlck5vZGVCc2RmVHJhbnNwYXJlbnQnKQo8fGZpbV9lbmR8Pg=="]
["8d55d009f26a80047e95f859c4141577762426ab-3","8d55d009f26a80047e95f859c4141577762426ab","PHxmaW1fcHJlZml4fD4KCgoKaW1wb3J0IGN2MgppbXBvcnQgbnVtcHkgYXMgbnAKCgpkZWYgcmVhZGltZyhzcmNfcGF0aCxiYWNrZ3JvdW5kX3BhdGgpOgoJc3JjID0gY3YyLmltcmVhZChzcmNfcGF0aCkKCWJhY2tncm91bmQgPSBjdjIuaW1yZWFkKGJhY2tncm91bmRfcGF0aCkKCWgsIHcsIGNoID0gc3JjLnNoYXBlCgltYXNrID0gbnAuemVyb3Moc3JjLnNoYXBlWzoyXSwgZHR5cGU9bnAudWludDgpCglyZWN0ID0gKDUzLDEyLHctMTAwLGgtMTIpCgliZ2Rtb2RlbCA9IG5wLnplcm9zKCgxLDY1KSxucC5mbG9hdDY0KQoJZmdkbW9kZWwgPSBucC56ZXJvcygoMSw2NSksbnAuZmxvYXQ2NCkKCgljdjIuZ3JhYkN1dChzcmMsbWFzayxyZWN0LGJnZG1vZGVsLGZnZG1vZGVsLDUsbW9kZT1jdjIuR0NfSU5JVF9XSVRIX1JFQ1QpCgltYXNrMiA9IG5wLndoZXJlKChtYXNrPT0xKSArIChtYXNrPT0zKSwgMjU1LCAwKS5hc3R5cGUoJ3VpbnQ4JykKCW9iamVjdCA9IGN2Mi5iaXR3aXNlX2FuZChzcmMsIHNyYywgbWFzaz1tYXNrMikKCWN2Mi5pbXNob3coIm9iamVjdCIsIG9iamVjdCkKCgkjIOmrmOaWr+aooeezigoJc2UgPSBjdjIuZ2V0U3RydWN0dXJpbmdFbGVtZW50KGN2Mi5NT1JQSF9SRUNULCAoMywgMykpCgljdjIuZGlsYXRlKG1hc2syLCBzZSwgbWFzazIpCgltYXNrMiA9IGN2Mi5HYXVzc2lhbkJsdXIobWFzazIsICg1LCA1KSwgMCkKCWN2Mi5pbXNob3coJ21hc2snLG1hc2syKQoKCSMg6Jma5YyW6IOM5pmvCgliYWNrZ3JvdW5kID0gY3YyLkdhdXNzaWFuQmx1cihiYWNrZ3JvdW5kLCAoMCwgMCksIDE1KQoKCSMgYmxlbmQgaW1hZ2UKCXJlc3VsdCA9IG5wLnplcm9zKChoLCB3LCBjaCksIGR0eXBlPW5wLnVpbnQ4KQoJZm9yIHJvdyBpbiByYW5nZShoKToKCQlmb3IgY29sIGluIHJhbmdlKHcpOgoJCQl3MSA9IG1hc2syW3JvdywgY29sXSAvIDI1NS4wCgkJCWIsIGcsIHIgPSBzcmNbcm93LCBjb2xdCgkJCWIxLGcxLHIxID0gYmFja2dyb3VuZFtyb3csIGNvbF0KCQkJYiA9ICgxLjAtdzEpICogYjEgKyBiICogdzEKCQkJZyA9ICgxLjAtdzEpICogZzEgKyBnICogdzEKCQkJciA9ICgxLjAtdzEpICogcjEgKyByICogdzEKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoJCQlyZXN1bHRbcm93LCBjb2xdID0gKGIsIGcsIHIpCjx8ZmltX2VuZHw+"]
["efc7f826a00b39c9102e8b273fc6e64aedbd25a0-1","efc7f826a00b39c9102e8b273fc6e64aedbd25a0","PHxmaW1fcHJlZml4fD4KIiIiCkEgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSAiV2hlcmUncyBJdCBVcCIgQVBJCgpDb3B5cmlnaHQgMjAxNSBXb25kZXJOZXR3b3JrCgpXaGVyZSdzIEl0IFVwIGlzIHByb3ZpZGVkIGJ5IFdvbmRlck5ldHdvcmsgYXQgaHR0cDovL2FwaS53aGVyZXNpdHVwLmNvbS8KIiIiCjx8ZmltX2hvbGV8Pgpmcm9tIC5qb2IgaW1wb3J0IEpvYgo8fGZpbV9zdWZmaXh8PgpfX2F1dGhvcl9fID0gJ1dvbmRlck5ldHdvcmsnCl9fdmVyc2lvbl9fID0gJzAuMC4xJwoKZnJvbSAuYXBpIGltcG9ydCBXSVUsIEVycm9yCjx8ZmltX2VuZHw+"]
["3ec9cc67a5d4c6cdc5650f97876210ebd41229ec-1","3ec9cc67a5d4c6cdc5650f97876210ebd41229ec","PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YQoKZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwpmcm9tIGRqYW5nby5jb250cmliLmF1dGggaW1wb3J0IGdldF91c2VyX21vZGVsCgpmcm9tIGNvdXJzZXMubW9kZWxzIGltcG9ydCBDb3Vyc2UKZnJvbSBza2V0Y2gubW9kZWxzIGltcG9ydCBTa2V0Y2gKZnJvbSBvcmdhbml6YXRpb24ubW9kZWxzIGltcG9ydCBDb3Vyc2VPcmcsIFRlYWNoZXIKClVzZXIgPSBnZXRfdXNlcl9tb2RlbCgpCgoKY2xhc3MgVXNlckFzayhtb2RlbHMuTW9kZWwpOgogICAgIiIiIOeUqOaIt+WSqOivoiAiIiIKICAgIG5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjAsIHZlcmJvc2VfbmFtZT0i5aeT5ZCNIiwgaGVscF90ZXh0PSLlp5PlkI0iKQogICAgbW9iaWxlID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTExLCB2ZXJib3NlX25hbWU9IuaJi+acuiIsIGhlbHBfdGV4dD0i5omL5py6IikKICAgIGNvdXJzZV9uYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwLCB2ZXJib3NlX25hbWU9Iuivvueoi+WQjSIsIGhlbHBfdGV4dD0i6K++56iL5ZCNIikKICAgIGRlc2MgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjAwLCB2ZXJib3NlX25hbWU9IuaPj+i/sCIsIGhlbHBfdGV4dD0i5o+P6L+wIikKICAgIGFkZF90aW1lID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoZGVmYXVsdD1kYXRldGltZS5ub3csIHZlcmJvc2VfbmFtZT0i5re75Yqg5pe26Ze0IiwgaGVscF90ZXh0PSLmt7vliqDml7bpl7QiKQoKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgdmVyYm9zZV9uYW1lID0gIueUqOaIt+WSqOivoiIKICAgICAgICB2ZXJib3NlX25hbWVfcGx1cmFsID0gdmVyYm9zZV9uYW1lCgogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYubmFtZQoKCmNsYXNzIFVzZXJFbnJvbGwobW9kZWxzLk1vZGVsKToKICAgICIiIiDnlKjmiLfmiqXlkI3ooaggIiIiCiAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTIwLCB2ZXJib3NlX25hbWU9IuWtpueUn+Wnk+WQjSIsIGhlbHBfdGV4dD0i5a2m55Sf5aeT5ZCNIikKICAgIGJpcnRoZGF5ID0gbW9kZWxzLkRhdGVGaWVsZChudWxsPVRydWUsIGJsYW5rPVRydWUsIHZlcmJvc2VfbmFtZT0i5a2m55Sf55Sf5pelIiwgaGVscF90ZXh0PSLlrabnlJ/nlJ/ml6UiKQogICAgZ2VuZGVyID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTYsIGNob2ljZXM9KCgibWFsZSIsIHUi55S3IiksICgiZmVtYWxlIiwgIuWlsyIpKSwgZGVmYXVsdD0iZmVtYWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZV9uYW1lPSLlrabnlJ/mgKfliKsiLCBoZWxwX3RleHQ9IuWtpueUn+aAp+WIqyIpCiAgICBtb2JpbGUgPSBtb2RlbHMuQ2hhckZpZWxkKG51bGw9VHJ1ZSwgYmxhbms9VHJ1ZSwgbWF4X2xlbmd0aD0xMDAsIHZlcmJvc2VfbmFtZT0i5a626ZW/5omL5py65Y+3IiwgaGVscF90ZXh0PSLlrrbplb/miYvmnLrlj7ciKQogICAgYWRkcmVzcyA9IG1vZGVscy5DaGFyRmllbGQobnVsbD1UcnVlLCBibGFuaz1UcnVlLCBtYXhfbGVuZ3RoPTEwMCwgdmVyYm9zZV9uYW1lPSLlrrbluq3kvY/lnYAiLCBoZWxwX3RleHQ9IuWutuW6reS9j+WdgCIpCiAgICBzY2hvb2wgPSBtb2RlbHMuQ2hhckZpZWxkKG51bGw9VHJ1ZSwgYmxhbms9VHJ1ZSwgbWF4X2xlbmd0aD0xMDAsIHZlcmJvc2VfbmFtZT0i5YWl6K+75a2m5qChIiwgaGVscF90ZXh0PSLlhaXor7vlrabmoKEiKQogICAgZW5yb2xsID0gbW9kZWxzLkNoYXJGaWVsZChudWxsPVRydWUsIGJsYW5rPVRydWUsIG1heF9sZW5ndGg9MTAwLCB2ZXJib3NlX25hbWU9IuivleWQrOivvuaXtumXtOmAieaLqSIsIGhlbHBfdGV4dD0i6K+V5ZCs6K++5pe26Ze06YCJ5oupIikKICAgIG1zZ19hZCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0zLCBjaG9pY2VzPSgoInllcyIsICLmmK8iKSwgKCJubyIsICLlkKYiKSksIGRlZmF1bHQ9Im5vIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZV9uYW1lPSLmmK/lkKbmhL/mhI/mjqXlj5fnn63kv6Hmjqjlub/kv6Hmga8iLCBoZWxwX3RleHQ9IuaYr+WQpuaEv+aEj+aOpeWPl+efreS/oeaOqOW5v+S/oeaBryIpCiAgICByZW1hcmsgPSBtb2RlbHMuQ2hhckZpZWxkKG51bGw9VHJ1ZSwgYmxhbms9VHJ1ZSwgbWF4X2xlbmd0aD0yMDAsIHZlcmJvc2VfbmFtZT0i5aSH5rOoIiwgaGVscF90ZXh0PSLlpIfms6giKQogICAgYWRkX3RpbWUgPSBtb2RlbHMuRGF0ZUZpZWxkKGRlZmF1bHQ9ZGF0ZXRpbWUubm93LCB2ZXJib3NlX25hbWU9Iua3u+WKoOaXtumXtCIsIGhlbHBfdGV4dD0i5re75Yqg5pe26Ze0IikKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIHZlcmJvc2VfbmFtZSA9ICLlvq7kv6Hlj4rnvZHpobXniYjmiqXlkI3kv6Hmga8iCiAgICAgICAgdmVyYm9zZV9uYW1lX3BsdXJhbCA9IHZlcmJvc2VfbmFtZQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLm5hbWUKCgpjbGFzcyBTYWxlc0luZm8obW9kZWxzLk1vZGVsKToKICAgICIiIiDplIDllK7kv6Hmga8gIiIiCiAgICBlbnJvbGxfdGltZSA9IG1vZGVscy5EYXRlRmllbGQodmVyYm9zZV9uYW1lPSLmiqXlkI3ml7bpl7QiLCBoZWxwX3RleHQ9IuaKpeWQjeaXtumXtCIpCiAgICBzdHVkZW50ID0gbW9kZWxzLkZvcmVpZ25LZXkoVXNlckVucm9sbCwgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFLCB2ZXJib3NlX25hbWU9IuaKpeWQjeeUqOaItyIsIGhlbHBfdGV4dD0i5oql5ZCN55So5oi3IikKICAgIGNvdXJzZSA9IG1vZGVscy5Gb3JlaWduS2V5KENvdXJzZSwgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFLCB2ZXJib3NlX25hbWU9IuaKpeWQjeivvueoiyIsIGhlbHBfdGV4dD0i5oql5ZCN6K++56iLIikKICAgIHBheV9tb3VudCA9IG1vZGVscy5GbG9hdEZpZWxkKGRlZmF1bHQ9MC4wLCB2ZXJib3NlX25hbWU9IuWunumZheS7mOasviIsIGhlbHBfdGV4dD0i5a6e6ZmF5LuY5qy+IikKICAgIHByZWZlcmVudGlhbF9jaGFubmVscyA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yMDAsIHZlcmJvc2VfbmFtZT0i5LyY5oOg5rig6YGTIiwgaGVscF90ZXh0PSLkvJjmg6DmuKDpgZMiKQogICAga25vd195YWsgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjAwLCB2ZXJib3NlX25hbWU9IuWmguS9leS6huino1lhSyIsIGhlbHBfdGV4dD0i5aaC5L2V5LqG6KejWWFLIikKICAgIHJlbWFyayA9IG1vZGVscy5DaGFyRmllbGQobnVsbD1UcnVlLCBibGFuaz1UcnVlLCBtYXhfbGVuZ3RoPTIwMCwgdmVyYm9zZV9uYW1lPSLlpIfms6giLCBoZWxwX3RleHQ9IuWkh+azqCIpCiAgICBhZGRfdGltZSA9IG1vZGVscy5EYXRlRmllbGQoZGVmYXVsdD1kYXRldGltZS5ub3csIHZlcmJvc2VfbmFtZT0i5re75Yqg5pe26Ze0IiwgaGVscF90ZXh0PSLmt7vliqDml7bpl7QiKQoKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgdmVyYm9zZV9uYW1lID0gIumUgOWUruS/oeaBryIKICAgICAgICB2ZXJib3NlX25hbWVfcGx1cmFsID0gdmVyYm9zZV9uYW1lCgo8fGZpbV9ob2xlfD4KY2xhc3MgQ291cnNlQ29tbWVudHMobW9kZWxzLk1vZGVsKToKICAgICIiIiDor77nqIvor4TorrogIiIiCiAgICB1c2VyID0gbW9kZWxzLkZvcmVpZ25LZXkoVXNlciwgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFLCB2ZXJib3NlX25hbWU9IueUqOaItyIsIGhlbHBfdGV4dD0i55So5oi3IikKICAgIGNvdXJzZSA9IG1vZGVscy5Gb3JlaWduS2V5KENvdXJzZSwgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFLCB2ZXJib3NlX25hbWU9IuivvueoiyIsIGhlbHBfdGV4dD0i6K++56iLIikKICAgIGNvbW1lbnRzID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTIwMCwgdmVyYm9zZV9uYW1lPSLor4TorroiLCBoZWxwX3RleHQ9IuivhOiuuiIpCiAgICBhZGRfdGltZSA9IG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGF0ZXRpbWUubm93LCB2ZXJib3NlX25hbWU9Iua3u+WKoOaXtumXtCIsIGhlbHBfdGV4dD0i5re75Yqg5pe26Ze0IikKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIHZlcmJvc2VfbmFtZSA9ICLor77nqIvor4TorroiCiAgICAgICAgdmVyYm9zZV9uYW1lX3BsdXJhbCA9IHZlcmJvc2VfbmFtZQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmNvbW1lbnRzCgoKY2xhc3MgU2tldGNoQ29tbWVudHMobW9kZWxzLk1vZGVsKToKICAgICIiIiDkvZzlk4Hor4TorrogIiIiCiAgICB1c2VyID0gbW9kZWxzLkZvcmVpZ25LZXkoVXNlciwgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFLCB2ZXJib3NlX25hbWU9IueUqOaItyIsIGhlbHBfdGV4dD0i55So5oi3IikKICAgIHNrZXRjaCA9IG1vZGVscy5Gb3JlaWduS2V5KFNrZXRjaCwgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFLCB2ZXJib3NlX25hbWU9IuS9nOWTgSIsIGhlbHBfdGV4dD0i5L2c5ZOBIikKICAgIGNvbW1lbnRzID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTIwMCwgdmVyYm9zZV9uYW1lPSLnlZnoqIAiLCBoZWxwX3RleHQ9IueVmeiogCIpCiAgICBhZGRfdGltZSA9IG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGF0ZXRpbWUubm93LCB2ZXJib3NlX25hbWU9Iua3u+WKoOaXtumXtCIsIGhlbHBfdGV4dD0i5re75Yqg5pe26Ze0IikKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIHZlcmJvc2VfbmFtZSA9ICLkvZzlk4Hor4TorroiCiAgICAgICAgdmVyYm9zZV9uYW1lX3BsdXJhbCA9IHZlcmJvc2VfbmFtZQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmNvbW1lbnRzCgoKY2xhc3MgVXNlckZhdm9yaXRlQ291cnNlKG1vZGVscy5Nb2RlbCk6CiAgICAiIiIg55So5oi35pS26JeP6K++56iLICIiIgogICAgIyBGQVZfVFlQRSA9ICgKICAgICMgICAgICgxLCAi6K++56iLIiksCiAgICAjICAgICAoMiwgIuivvueoi+acuuaehCIpLAogICAgIyAgICAgKDMsICLorrLluIgiKSwKICAgICMgICAgICg0LCAi5L2c5ZOBIiksCiAgICAjICAgICAoNSwgIueUqOaItyIpCiAgICAjICkKICAgIHVzZXIgPSBtb2RlbHMuRm9yZWlnbktleShVc2VyLCBvbl9kZWxldGU9bW9kZWxzLkNBU0NBREUsIHZlcmJvc2VfbmFtZT0i55So5oi3IiwgaGVscF90ZXh0PSLnlKjmiLciKQogICAgIyBmYXZfaWQgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQ9MCwgdmVyYm9zZV9uYW1lPSLmlLbol49pZCIsIGhlbHBfdGV4dD0i5pS26JePaWQiKQogICAgIyBmYXZfdHlwZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcz1GQVZfVFlQRSwgZGVmYXVsdD0xLCB2ZXJib3NlX25hbWU9IuaUtuiXj+exu+WeiyIsIGhlbHBfdGV4dD0i5pS26JeP57G75Z6LIikKICAgIGNvdXJzZSA9IG1vZGVscy5Gb3JlaWduS2V5KENvdXJzZSwgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFLCB2ZXJib3NlX25hbWU9IuivvueoiyIsIGhlbHBfdGV4dD0i5pS26JeP55qE6K++56iLIikKCiAgICBhZGRfdGltZSA9IG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGF0ZXRpbWUubm93LCB2ZXJib3NlX25hbWU9Iua3u+WKoOaXtumXtCIsIGhlbHBfdGV4dD0i5re75Yqg5pe26Ze0IikKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIHZlcmJvc2VfbmFtZSA9ICLnlKjmiLfmlLbol4/or77nqIsiCiAgICAgICAgdmVyYm9zZV9uYW1lX3BsdXJhbCA9IHZlcmJvc2VfbmFtZQogICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgidXNlciIsICJjb3Vyc2UiKQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnVzZXIudXNlcm5hbWUKCgpjbGFzcyBVc2VyRmF2b3JpdGVPcmcobW9kZWxzLk1vZGVsKToKICAgICIiIiDnlKjmiLfmlLbol4/mnLrmnoQgIiIiCiAgICB1c2VyID0gbW9kZWxzLkZvcmVpZ25LZXkoVXNlciwgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFLCB2ZXJib3NlX25hbWU9IueUqOaItyIsIGhlbHBfdGV4dD0i55So5oi3IikKICAgIG9yZyA9IG1vZGVscy5Gb3JlaWduS2V5KENvdXJzZU9yZywgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFLCB2ZXJib3NlX25hbWU9IuacuuaehCIsIGhlbHBfdGV4dD0i5pS26JeP55qE5py65p6EIikKCiAgICBhZGRfdGltZSA9IG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGF0ZXRpbWUubm93LCB2ZXJib3NlX25hbWU9Iua3u+WKoOaXtumXtCIsIGhlbHBfdGV4dD0i5re75Yqg5pe26Ze0IikKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIHZlcmJvc2VfbmFtZSA9ICLnlKjmiLfmlLbol4/mnLrmnoQiCiAgICAgICAgdmVyYm9zZV9uYW1lX3BsdXJhbCA9IHZlcmJvc2VfbmFtZQogICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgidXNlciIsICJvcmciKQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnVzZXIudXNlcm5hbWUKCgpjbGFzcyBVc2VyRmF2b3JpdGVTa2V0Y2gobW9kZWxzLk1vZGVsKToKICAgICIiIiDnlKjmiLfmlLbol4/kvZzlk4EgIiIiCiAgICB1c2VyID0gbW9kZWxzLkZvcmVpZ25LZXkoVXNlciwgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFLCB2ZXJib3NlX25hbWU9IueUqOaItyIsIGhlbHBfdGV4dD0i55So5oi3IikKICAgIHNrZXRjaCA9IG1vZGVscy5Gb3JlaWduS2V5KFNrZXRjaCwgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFLCB2ZXJib3NlX25hbWU9IuS9nOWTgSIsIGhlbHBfdGV4dD0i5pS26JeP55qE5L2c5ZOBIikKCiAgICBhZGRfdGltZSA9IG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGF0ZXRpbWUubm93LCB2ZXJib3NlX25hbWU9Iua3u+WKoOaXtumXtCIsIGhlbHBfdGV4dD0i5re75Yqg5pe26Ze0IikKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIHZlcmJvc2VfbmFtZSA9ICLnlKjmiLfmlLbol4/kvZzlk4EiCiAgICAgICAgdmVyYm9zZV9uYW1lX3BsdXJhbCA9IHZlcmJvc2VfbmFtZQogICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgidXNlciIsICJza2V0Y2giKQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnVzZXIudXNlcm5hbWUKCgpjbGFzcyBVc2VyTWVzc2FnZShtb2RlbHMuTW9kZWwpOgogICAgIiIiIOeUqOaIt+a2iOaBryAiIiIKICAgICMgZGVmYXVsdD0wLOWPkemAgee7meWFqOWRmOeahOa2iOaBr++8jOWQpuWImeaYr+eUqOaIt+eahElECiAgICB1c2VyID0gbW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0PTAsIHZlcmJvc2VfbmFtZT0i5o6l5Y+X55So5oi3IiwgaGVscF90ZXh0PSLmjqXlj5fnlKjmiLciKQogICAgbWVzc2FnZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD01MDAsIHZlcmJvc2VfbmFtZT0i5raI5oGv5YaF5a65IiwgaGVscF90ZXh0PSLmtojmga/lhoXlrrkiKQogICAgaGFzX3JlYWQgPSBtb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UsIHZlcmJvc2VfbmFtZT0i5piv5ZCm5bey6K+7IiwgaGVscF90ZXh0PSLmmK/lkKblt7Lor7siKQogICAgYWRkX3RpbWUgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChkZWZhdWx0PWRhdGV0aW1lLm5vdywgdmVyYm9zZV9uYW1lPSLmt7vliqDml7bpl7QiLCBoZWxwX3RleHQ9Iua3u+WKoOaXtumXtCIpCgogICAgY2xhc3MgTWV0YToKICAgICAgICB2ZXJib3NlX25hbWUgPSAi55So5oi35raI5oGvIgogICAgICAgIHZlcmJvc2VfbmFtZV9wbHVyYWwgPSB2ZXJib3NlX25hbWUKCiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5tZXNzYWdlCgoKY2xhc3MgVXNlckRlYWRsaW5lKG1vZGVscy5Nb2RlbCk6CiAgICAiIiIg55So5oi35L2/55So5Lqn5ZOB5pyf6ZmQIiIiCiAgICB1c2VyID0gbW9kZWxzLkZvcmVpZ25LZXkoVXNlciwgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFLCB2ZXJib3NlX25hbWU9IueUqOaItyIsIGhlbHBfdGV4dD0i55So5oi3IikKICAgIGV4cGlyZWRfdGltZSA9IG1vZGVscy5EYXRlVGltZUZpZWxkKGRlZmF1bHQ9ZGF0ZXRpbWUuc3RyZnRpbWUoZGF0ZXRpbWUubm93KCkgKyB0aW1lZGVsdGEoZGF5cz03KSwgIiVZLSVtLSVkIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NlX25hbWU9IuS9v+eUqOi/h+acn+aXtumXtCIsIGhlbHBfdGV4dD0i5L2/55So6L+H5pyf5pe26Ze0IikKICAgIGFkZF90aW1lID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoZGVmYXVsdD1kYXRldGltZS5ub3csIHZlcmJvc2VfbmFtZT0i5re75Yqg5pe26Ze0IiwgaGVscF90ZXh0PSLmt7vliqDml7bpl7QiKQoKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgdmVyYm9zZV9uYW1lID0gIueUqOaIt+S9v+eUqOacn+mZkCIKICAgICAgICB2ZXJib3NlX25hbWVfcGx1cmFsID0gdmVyYm9zZV9uYW1lCgogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYudXNlci51c2VybmFtZQoKCmNsYXNzIFVzZXJDb3Vyc2UobW9kZWxzLk1vZGVsKToKICAgICIiIiDnlKjmiLfnmoTlrabkuaDor77nqIsgIiIiCiAgICB1c2VyID0gbW9kZWxzLkZvcmVpZ25LZXkoVXNlciwgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFLCB2ZXJib3NlX25hbWU9IueUqOaItyIsIGhlbHBfdGV4dD0i55So5oi3IikKICAgIGNvdXJzZSA9IG1vZGVscy5Gb3JlaWduS2V5KENvdXJzZSwgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFLCB2ZXJib3NlX25hbWU9IuivvueoiyIsIGhlbHBfdGV4dD0i6K++56iLIikKICAgIGFkZF90aW1lID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoZGVmYXVsdD1kYXRldGltZS5ub3csIHZlcmJvc2VfbmFtZT0i5re75Yqg5pe26Ze0IiwgaGVscF90ZXh0PSLmt7vliqDml7bpl7QiKQogICAgZGVhZGxpbmUgPSBtb2RlbHMuRm9yZWlnbktleShVc2VyRGVhZGxpbmUsIG9uX2RlbGV0ZT1tb2RlbHMuQ0FTQ0FERSwgbnVsbD1UcnVlLCBibGFuaz1UcnVlLCB2ZXJib3NlX25hbWU9Iui/h+acn+aXtumXtCIsIGhlbHBfdGV4dD0i6L+H5pyf5pe26Ze0IikKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIHZlcmJvc2VfbmFtZSA9ICLnlKjmiLfor77nqIsiCiAgICAgICAgdmVyYm9zZV9uYW1lX3BsdXJhbCA9IHZlcmJvc2VfbmFtZQogICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgidXNlciIsICJjb3Vyc2UiKQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmNvdXJzZS5uYW1lCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5zdHVkZW50Lm5hbWUKCgo8fGZpbV9lbmR8Pg=="]
["0891397badb45b5e0ce844def0bac27e86c2f38f-3","0891397badb45b5e0ce844def0bac27e86c2f38f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIHNhY3Jlcm91Z2UuY29tbW9uLnRlc3RpbmcudXRpbCBpbXBvcnQgc2FjcmVyb3VnZV9jb21tYW5kX2V4aXN0cwoKCmNsYXNzIFRlc3RGYWJicmkyMDIwU3ViY29tbWFuZCh1bml0dGVzdC5UZXN0Q2FzZSk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiB0ZXN0X2NvbW1hbmRfZXhpc3RzKHNlbGYpOgogICAgICAgIGFzc2VydCBzYWNyZXJvdWdlX2NvbW1hbmRfZXhpc3RzKFsnc2V0dXAtZGF0YXNldCcsICdmYWJicmkyMDIwJ10pCjx8ZmltX2VuZHw+"]
["e35260be4839182261c6b08fc1f7bf9d9add6653-1","e35260be4839182261c6b08fc1f7bf9d9add6653","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmRlZiB1c2VyKCk6CiAgICByZXR1cm4gZGljdChmb3JtPWF1dGgoKSkKCkBhdXRoLnJlcXVpcmVzX2xvZ2luKCkKZGVmIGluZGV4KCk6CiAgICBpbXBvcnQgb3MKICAgIGltcG9ydCBzaHV0aWwKICAgIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCiAgICBkYXRhID0gZGF0ZXRpbWUubm93KCkuZGF0ZSgpCiAgICBtZXMgPSBkYXRldGltZS5ub3coKS5kYXRlKCkuc3RyZnRpbWUoZm9ybWF0PSclbS8lWScpCiAgICAjIENvbnN1bHRhcwogICAgcGFjaWVudGVzID0gZGIoZGIucGFjaWVudGVzKS5zZWxlY3QoKQogICAgYWdlbmRhbWVudG9zID0gZGIoZGIuYWdlbmRhbWVudG9zKS5zZWxlY3QoKQogICAgY29uc3VsdGFzID0gZGIoZGIuY29uc3VsdGFzKS5zZWxlY3QoKQogICAgIyBUb3RhbCBwYWNpZW50ZXMgY2FkYXN0cmFkb3MKICAgIHRvdGFsX3BhY2llbnRlcyA9ICBsZW4ocGFjaWVudGVzKQogICAgIyBUb3RhbCBkZSBhZ2VuZGFtZW50b3MKICAgIHRvdGFsX2FnZW5kYW1lbnRvcyA9IGxlbihhZ2VuZGFtZW50b3MpCiAgICAjIFRvdGFsIGRlIGNvbnN1bHRhcwogICAgdG90YWxfY29uc3VsdGFzID0gbGVuKGNvbnN1bHRhcykKICAgICMgVG90YWwgYWdlbmRhbWVudG9zIGRvIGRpYQogICAgcXRkX2FnZW5kYW1lbnRvc19kaWEgPSBsZW4oW2kgZm9yIGkgaW4gYWdlbmRhbWVudG9zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaS5kaWEgPT0gZGF0YV0pCiAgICAjIFRvdGFsIGFnZW5kYW1lbnRvcyBtw6pzCiAgICBxdGRfYWdlbmRhbWVudG9zX21lcyA9IGxlbihbaSBmb3IgaSBpbiBhZ2VuZGFtZW50b3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpLmRpYS5zdHJmdGltZShmb3JtYXQ9JyVtLyVZJykgPT0gbWVzXSkKICAgICMgVG90YWwgY29uc3VsdGFzIGRvIGRpYQogICAgcXRkX2NvbnN1bHRhc19kaWEgPSBsZW4oW2kgZm9yIGkgaW4gY29uc3VsdGFzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaS5kaWEgPT0gZGF0YV0pCiAgICAjIFRvdGFsIGNvbnN1bHRhcyBtw6pzCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHF0ZF9jb25zdWx0YXNfbWVzID0gbGVuKFtpIGZvciBpIGluIGNvbnN1bHRhcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGkuZGlhLnN0cmZ0aW1lKGZvcm1hdD0nJW0vJVknKSA9PSBtZXNdKQoKICAgIGl0ZW5zID0gW2lbJ2Zvcm0nXSBmb3IgaSBpbiB0aXBvc19jb25zdWx0YXNdCjx8ZmltX2VuZHw+"]
["3ea4f82bbb8665db269196398522b224a3ebc4d9-2","3ea4f82bbb8665db269196398522b224a3ebc4d9","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IFR5cGVWYXIsIEdlbmVyaWMKZnJvbSBmYXN0YXBpX3BhZ2luYXRpb24uZGVmYXVsdCBpbXBvcnQgUGFnZQpmcm9tIHB5ZGFudGljIGltcG9ydCBCYXNlTW9kZWwKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKPHxmaW1faG9sZXw+CiAgICBkYXRlX21vZGlmaWVkOiBkYXRldGltZQoKClQgPSBUeXBlVmFyKCJUIikKCgpjbGFzcyBDb2xsZWN0aW9uKFBhZ2VbVF0sIEdlbmVyaWNbVF0pOgogICAgY2xhc3MgQ29uZmlnOgogICAgICAgIGFsbG93X3BvcHVsYXRpb25fYnlfZmllbGRfbmFtZSA9IFRydWUKICAgICAgICBmaWVsZHMgPSB7Iml0ZW1zIjogeyJhbGlhcyI6ICJkYXRhIn19Cjx8ZmltX3N1ZmZpeHw+CgoKY2xhc3MgQ29tbW9uKEJhc2VNb2RlbCk6CiAgICBkYXRlX2NyZWF0ZWQ6IGRhdGV0aW1lCjx8ZmltX2VuZHw+"]
["9d223ac1702118c4e04bd78d17b6866fd2f4a39f-3","9d223ac1702118c4e04bd78d17b6866fd2f4a39f","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qCgojLy8vIERFUEVOREVOQ0lFUwppbXBvcnQgdHlwaW5nCmltcG9ydCBkaXNjb3JkICAgICAgICAgICAgICAgICAgICAjcHl0aG9uMy43IC1tIHBpcCBpbnN0YWxsIC1VIGRpc2NvcmQucHkKaW1wb3J0IGxvZ2dpbmcKZnJvbSBkaXNjb3JkLmV4dCBpbXBvcnQgY29tbWFuZHMKZnJvbSBkaXNjb3JkLmV4dC5jb21tYW5kcyBpbXBvcnQgQm90LCBNaXNzaW5nUGVybWlzc2lvbnMsIGhhc19wZXJtaXNzaW9ucwo8fGZpbV9ob2xlfD4KIyMvLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLy8jIwoKQGNvbW1hbmRzLmNvbW1hbmQoaGVscCA9ICdpbmYnLAogICAgICAgICAgICAgICAgICBicmllZiA9ICdDcmVhdGVzIGEgYnVnIHJlcG9ydCcsCiAgICAgICAgICAgICAgICAgIHVzYWdlID0gJztdYnVnIHt0eHR9JywKICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAnVFhUIFtTVFJdIC0gVGhlIGJ1ZywgcHJlZmVyYWJseSB3aXRoIHRoZSBlcnJvciBhbmQgY29tbWFuZCcpCmFzeW5jIGRlZiBidWcoY3R4LCAqLCB0eHQpOgogICAgYXN5bmMgd2l0aCBjdHguY2hhbm5lbC50eXBpbmcoKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHN0ID0gZidgYGBtZFxuI10gQlVHIFJFUE9SVCBJTiB7Y3R4LmNoYW5uZWwubmFtZX0gLSB7Y3R4Lmd1aWxkLm5hbWV9IEJZIHtjdHguYXV0aG9yLm5hbWV9I3tjdHguYXV0aG9yLmRpc2NyaW1pbmF0b3J9XG4+IHt0eHR9YGBgJwogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgc3QgPSBmImBgYG1kXG4jXSBCVUcgUkVQT1JUIElOIFBSSVZBVEUgTUVTU0FHRSBXSVRIIHtjdHguYXV0aG9yLm5hbWV9I3tjdHguYXV0aG9yLmRpc2NyaW1pbmF0b3J9XG4+IHt0eHR9YGBgIgogICAgYXdhaXQgY3R4LmJvdC5nZXRfY2hhbm5lbCg1OTc1Nzc3MzUwNjU0MzYxNzEpLnNlbmQoc3QpCiAgICBhd2FpdCBjdHgubWVzc2FnZS5hZGRfcmVhY3Rpb24oJzw6d3JrOjYwODgxMDY1Mjc1NjM0NDg1MT4nKQoKCiMjLy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8vIyMKIyMvLy8gICAgIE9USEVSIFNUVUZGICAgICAvLy8jIwojIy8vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vLyMjCmRlZiBzZXR1cChib3QpOgogICAgcHJpbnQoJytDT00nKQogICAgYm90LmFkZF9jb21tYW5kKGJ1ZykKICAgIHByaW50KCdHT09EJykKCmRlZiB0ZWFyZG93bihib3QpOgogICAgcHJpbnQoJy1DT00nKQogICAgYm90LnJlbW92ZV9jb21tYW5kKCdidWcnKQogICAgcHJpbnQoJ0dPT0QnKQoKPHxmaW1fc3VmZml4fD4KZnJvbSBjaGsuZW5ibCBpbXBvcnQgZW5ibAoKIyMvLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLy8jIwojIy8vLyAgICBCT1QgIENPTU1BTkRTICAgIC8vLyMjCjx8ZmltX2VuZHw+"]
["c2001933ae39bd1a224028360129a43717edc8b2-2","c2001933ae39bd1a224028360129a43717edc8b2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGluc3BlY3QKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppbXBvcnQganNvbgppbXBvcnQgbG9nZ2luZwppbXBvcnQgb3MKZnJvbSBvcyBpbXBvcnQgcGF0aAo8fGZpbV9lbmR8Pg=="]
["a0ce381f0404d4b888e574a1c6b51c060b807089-2","a0ce381f0404d4b888e574a1c6b51c060b807089",{"$cut":{"chars":66508,"head":"PHxmaW1fcHJlZml4fD4KIiIiSGFuZGxlIEhUVFAgbWV0aG9kcyBmb3Igc2VydmVyLiIiIgppbXBvcnQganNvbgppbXBvcnQgcmUKaW1wb3J0IG1pbWV0eXBlcwpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyCmZyb20gbWF0aCBpbXBvcnQgY2VpbApmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKZnJvbSB0eXBpbmcgaW1wb3J0IERpY3QsIExpc3QsIFR1cGxlLCBVbmlvbiwgY2FzdCwgQXN5bmNHZW5lcmF0b3IsIEFueQoKZnJvbSBhaW9odHRwIGltcG9ydCBCb2R5UGFydFJlYWRlciwgd2ViCmZyb20gYWlvaHR0cC53ZWIgaW1wb3J0IFJlcXVlc3QsIFJlc3BvbnNlCmZyb20gbXVsdGlkaWN0IGltcG9ydCBDSU11bHRpRGljdApmcm9tIG1vdG9yLm1vdG9yX2FzeW5jaW8gaW1wb3J0IEFzeW5jSU9Nb3RvckNsaWVudApmcm9tIG11bHRpZGljdCBpbXBvcnQgTXVsdGlEaWN0LCBNdWx0aURpY3RQcm94eQpmcm9tIHhtbHNjaGVtYSBpbXBvcnQgWE1MU2NoZW1hRXhjZXB0aW9uCmZyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IHN0cnRvYm9vbAoKZnJvbSAubWlkZGxld2FyZXMgaW1wb3J0IGRlY3J5cHRfY29va2llLCBnZXRfc2Vzc2lvbgoKZnJvbSAuLmNvbmYuY29uZiBpbXBvcnQgc2NoZW1hX3R5cGVzCmZyb20gLi5oZWxwZXJzLmxvZ2dlciBpbXBvcnQgTE9HCmZyb20gLi5oZWxwZXJzLnBhcnNlciBpbXBvcnQgWE1MVG9KU09OUGFyc2VyCmZyb20gLi5oZWxwZXJzLnNjaGVtYV9sb2FkZXIgaW1wb3J0IEpTT05TY2hlbWFMb2FkZXIsIFNjaGVtYU5vdEZvdW5kRXhjZXB0aW9uLCBYTUxTY2hlbWFMb2FkZXIKZnJvbSAuLmhlbHBlcnMudmFsaWRhdG9yIGltcG9ydCBKU09OVmFsaWRhdG9yLCBYTUxWYWxpZGF0b3IKZnJvbSAub3BlcmF0b3JzIGltcG9ydCBGb2xkZXJPcGVyYXRvciwgT3BlcmF0b3IsIFhNTE9wZXJhdG9yLCBVc2VyT3BlcmF0b3IKCmZyb20gLi5jb25mLmNvbmYgaW1wb3J0IGFhaV9jb25maWcKCgpjbGFzcyBSRVNUQVBJSGFuZGxlcjoKICAgICIiIkhhbmRsZXIgZm9yIFJFU1QgQVBJIG1ldGhvZHMuIiIiCgogICAgZGVmIF9jaGVja19zY2hlbWFfZXhpc3RzKHNlbGYsIHNjaGVtYV90eXBlOiBzdHIpIC0+IE5vbmU6CiAgICAgICAgIiIiQ2hlY2sgaWYgc2NoZW1hIHR5cGUgZXhpc3RzLgoKICAgICAgICA6cGFyYW0gc2NoZW1hX3R5cGU6IHNjaGVtYSB0eXBlLgogICAgICAgIDpyYWlzZXM6IEhUVFBOb3RGb3VuZCBpZiBzY2hlbWEgZG9lcyBub3QgZXhpc3QuCiAgICAgICAgIiIiCiAgICAgICAgaWYgc2NoZW1hX3R5cGUgbm90IGluIHNjaGVtYV90eXBlcy5rZXlzKCk6CiAgICAgICAgICAgIHJlYXNvbiA9IGYiU3BlY2lmaWVkIHNjaGVtYSB7c2NoZW1hX3R5cGV9IHdhcyBub3QgZm91bmQuIgogICAgICAgICAgICBMT0cuZXJyb3IocmVhc29uKQogICAgICAgICAgICByYWlzZSB3ZWIuSFRUUE5vdEZvdW5kKHJlYXNvbj1yZWFzb24pCgogICAgZGVmIF9nZXRfcGFnZV9wYXJhbShzZWxmLCByZXE6IFJlcXVlc3QsIG5hbWU6IHN0ciwgZGVmYXVsdDogaW50KSAtPiBpbnQ6CiAgICAgICAgIiIiSGFuZGxlIHBhZ2UgcGFyYW1ldGVyIHZhbHVlIGV4dHJhY3RpbmcuCgogICAgICAgIDpwYXJhbSByZXE6IEdFVCBSZXF1ZXN0CiAgICAgICAgOnBhcmFtIHBhcmFtX25hbWU6IE5hbWUgb2YgdGhlIHBhcmFtZXRlcgogICAgICAgIDpwYXJhbSBkZWZhdWx0OiBEZWZhdWx0IHZhbHVlIGluIGNhc2UgcGFyYW1ldGVyIG5vdCBzcGVjaWZpZWQgaW4gcmVxdWVzdAogICAgICAgIDpyZXR1cm5zOiBQYWdlIHBhcmFtZXRlciB2YWx1ZQogICAgICAgICIiIgogICAgICAgIHRyeToKICAgICAgICAgICAgcGFyYW0gPSBpbnQocmVxLnF1ZXJ5LmdldChuYW1lLCBkZWZhdWx0KSkKICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgcmVhc29uID0gZiJ7bmFtZX0gcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIsIG5vdyBpdCBpcyB7cmVxLnF1ZXJ5LmdldChuYW1lKX0iCiAgICAgICAgICAgIExPRy5lcnJvcihyZWFzb24pCiAgICAgICAgICAgIHJhaXNlIHdlYi5IVFRQQmFkUmVxdWVzdChyZWFzb249cmVhc29uKQogICAgICAgIGlmIHBhcmFtIDwgMToKICAgICAgICAgICAgcmVhc29uID0gZiJ7bmFtZX0gcGFyYW1ldGVyIG11c3QgYmUgb3ZlciAwIgogICAgICAgICAgICBMT0cuZXJyb3IocmVhc29uKQogICAgICAgICAgICByYWlzZSB3ZWIuSFRUUEJhZFJlcXVlc3QocmVhc29uPXJlYXNvbikKICAgICAgICByZXR1cm4gcGFyYW0KCiAgICBhc3luYyBkZWYgX2hhbmRsZV9jaGVja19vd25lZGJ5X3VzZXIoc2VsZiwgcmVxOiBSZXF1ZXN0LCBjb2xsZWN0aW9uOiBzdHIsIGFjY2Vzc2lvbl9pZDogc3RyKSAtPiBib29sOgogICAgICAgICIiIkNoZWNrIGlmIG9iamVjdCBiZWxvbmdzIHRvIHVzZXIuCgogICAgICAgIEZvciB0aGlzIHdlIG5lZWQgdG8gY2hlY2sgdGhlIG9iamVjdCBpcyBpbiBleGFjdGx5IDEgZm9sZGVyIGFuZCB3ZSBuZWVkIHRvIGNoZWNrCiAgICAgICAgdGhhdCBmb2xkZXIgYmVsb25ncyB0byBhIHVzZXIuIElmIHRoZSBmb2xkZXIgaXMgcHVibGlzaGVkIHRoYXQgbWVhbnMgaXQgY2FuIGJlCiAgICAgICAgYnJvd3NlZCBieSBvdGhlciB1c2VycyBhcyB3ZWxsLgoKICAgICAgICA6cGFyYW0gcmVxOiBIVFRQIHJlcXVlc3QKICAgICAgICA6cGFyYW0gY29sbGVjdGlvbjogY29sbGVjdGlvbiBvciBzY2hlbWEgb2YgZG9jdW1lbnQKICAgICAgICA6cGFyYW0gZG9jX2lkOiBkb2N1bWVudCBhY2Nlc3Npb24gaWQKICAgICAgICA6cmFpc2VzOiBIVFRQVW5hdXRob3JpemVkIGlmIGFjY2Vzc2lvbiBpZCBkb2VzIG5vdCBiZWxvbmcgdG8gdXNlcgogICAgICAgIDpyZXR1cm5zOiBib29sCiAgICAgICAgIiIiCiAgICAgICAgZGJfY2xpZW50ID0gcmVxLmFwcFsiZGJfY2xpZW50Il0KICAgICAgICBjdXJyZW50X3VzZXIgPSBnZXRfc2Vzc2lvbihyZXEpWyJ1c2VyX2luZm8iXQogICAgICAgIHVzZXJfb3AgPSBVc2VyT3BlcmF0b3IoZGJfY2xpZW50KQogICAgICAgIF9jaGVjayA9IEZhbHNlCgogICAgICAgIGlmIGNvbGxlY3Rpb24gIT0gImZvbGRlcnMiOgoKICAgICAgICAgICAgZm9sZGVy"}}]
["19e76cdd93edfca92102be057f551dafde651d2a-4","19e76cdd93edfca92102be057f551dafde651d2a","PHxmaW1fcHJlZml4fD4KIyBNYWtpbmcgU2Vuc2Ugb2YgU2Vuc29ycyBXb3Jrc2hvcAojIEVkdWNhdG9ycyBFZGl0aW9uIDIwMTUKIwojIDE4LURpc3BsYXlUcmliYmxlSW5mbwojIGNvbnN0YW50cy5weQonJycKQGF1dGhvcjogRGVhZCBSb2JvdCBTb2NpZXR5CicnJwoKIyBhbmFsb2cgcG9ydHMKbGVmdFRvcEhhdCA9IDAKZXRTZW5zb3IgPSAwCjx8ZmltX2hvbGV8PgoKIyBzZXJ2byBwb3J0cwphcm0gPSAxCmdyYWJiZXIgPSAyCgojIG1vdG9yIHBvcnRzCgojIHNlcnZvIHBvc2l0aW9ucwphcm1Eb3duID0gMTE1MAphcm1VcCA9IDUwCmdyYWJiZXJPcGVuID0gMTcwMApncmFiYmVyQ2xvc2VkID0gNDUwCgojY2FtZXJhCmJsb2JTaXplID0gMjAwMApjaGFuUmVkID0gMApjaGFuR3JlZW4gPSAxCjx8ZmltX3N1ZmZpeHw+CnN0YXJ0TGlnaHQgPSAwCnJpZ2h0VG9wSGF0ID0gMAoKIyBkaWdpdGFsIHBvcnRzCjx8ZmltX2VuZHw+"]
["08e7b1dc986326222c2bd51b879d882220483daf-1","08e7b1dc986326222c2bd51b879d882220483daf","PHxmaW1fcHJlZml4fD4KY2xhc3MgQ29uY2VydDoKICAgIGRlZiBfX2luaXRfXyhzZWxmKSAtPiBOb25lOgogICAgICAgIHNlbGYudGl0bGUgPSBUaXRsZSgpCiAgICAgICAgc2VsZi5ldmVudHMgPSBbXQoKICAgIGRlZiBhZGRfZXZlbnQoc2VsZiwgZXZlbnQ9Tm9uZSk6CiAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgKEV2ZW50LCBQZXJmb3JtYW5jZSwgSW50ZXJ2YWwpKToKICAgICAgICAgICAgc2VsZi5ldmVudHMuYXBwZW5kKGV2ZW50KQogICAgICAgICAgICByZXR1cm4gMAogICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgVGl0bGUpOgogICAgICAgICAgICBwcmludCgiVGl0bGUgb2JqZWN0IGRldGVjdGVkLCB1c2UgJ0NvbmNlcnQudGl0bGUnIHRvIHNldCB0aXRsZXBhZ2UiKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50KCJJbnZhbGlkIGV2ZW50IHR5cGUiKQogICAgICAgIHJldHVybiAxCjx8ZmltX2hvbGV8PgogICAgICAgIHRyeToKICAgICAgICAgICAgc2VsZi5ldmVudHMucmVtb3ZlKGluZGV4KQogICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgogICAgICAgICAgICBwcmludCgiSW52YWxpZCBpbmRleCIpCiAgICAgICAgICAgIHJldHVybiAxCiAgICAgICAgcmV0dXJuIDAKCiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi50aXRsZS5uYW1lCgogICAgZGVmIHRvX2RpY3Qoc2VsZikgLT4gZGljdDoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAiY29uY2VydF9kZXRhaWxzIjogc2VsZi50aXRsZS50b19kaWN0KCksCiAgICAgICAgICAgICJldmVudHMiOiBbCiAgICAgICAgICAgICAgICBldmVudC50b19kaWN0KCkgZm9yIGV2ZW50IGluIHNlbGYuZXZlbnRzCiAgICAgICAgICAgIF0KICAgICAgICB9CgpjbGFzcyBDb250YWluZXI6CiAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZTogc3RyLCBuYW1lOiBzdHIpOgogICAgICAgIHNlbGYudHlwZSA9IHR5cGUKICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCgogICAgZGVmIHRvX2RpY3Qoc2VsZikgLT4gZGljdDoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAidHlwZSI6IHNlbGYudHlwZSwKICAgICAgICAgICAgIm5hbWUiOiBzZWxmLm5hbWUKICAgICAgICB9CgpjbGFzcyBUaXRsZShDb250YWluZXIpOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oInRpdGxlIiwgIlVudGl0bGVkIENvbmNlcnQiKQogICAgICAgIHNlbGYuYXV0aG9ycyA9IFtdCiAgICAgICAgc2VsZi5kYXRlID0gIjAxLzAxLzIwMDEiCgogICAgZGVmIHRvX2RpY3Qoc2VsZikgLT4gZGljdDoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAidHlwZSI6IHNlbGYudHlwZSwKICAgICAgICAgICAgIm5hbWUiOiBzZWxmLm5hbWUsCiAgICAgICAgICAgICJhdXRob3JzIjogc2VsZi5hdXRob3JzLAogICAgICAgICAgICAiZGF0ZSI6IHNlbGYuZGF0ZQogICAgICAgIH0KICAgIApjbGFzcyBFdmVudChDb250YWluZXIpOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oImV2ZW50IiwgIlVudGl0bGVkIEV2ZW50IikKICAgICAgICBzZWxmLnBlcmZvcm1hbmNlcyA9IFtdCgogICAgZGVmIGFkZF9wZXJmb3JtYW5jZShzZWxmLCBwZXJmb3JtYW5jZSk6CiAgICAgICAgaWYgaXNpbnN0YW5jZShwZXJmb3JtYW5jZSwgUGVyZm9ybWFuY2UpOgogICAgICAgICAgICBzZWxmLnBlcmZvcm1hbmNlcy5hcHBlbmQocGVyZm9ybWFuY2UpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQoIkludmFsaWQgcGVyZm9ybWFuY2UgdHlwZSIpCiAgICAgICAgICAgIHJldHVybiAxCiAgICAgICAgcmV0dXJuIDAKCiAgICBkZWYgcmVtb3ZlX3BlcmZvcm1hbmNlKHNlbGYsIGluZGV4KToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYucGVyZm9ybWFuY2VzLnJlbW92ZShpbmRleCkKICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICAgICAgcHJpbnQoIkludmFsaWQgaW5kZXgiKQogICAgICAgICAgICByZXR1cm4gMQogICAgICAgIHJldHVybiAwCgogICAgZGVmIHRvX2RpY3Qoc2VsZikgLT4gZGljdDoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAidHlwZSI6IHNlbGYudHlwZSwKICAgICAgICAgICAgIm5hbWUiOiBzZWxmLm5hbWUsCiAgICAgICAgICAgICJwZXJmb3JtYW5jZXMiOiBbCiAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZS50b19kaWN0KCkgZm9yIHBlcmZvcm1hbmNlIGluIHNlbGYucGVyZm9ybWFuY2VzCiAgICAgICAgICAgIF0KICAgICAgICB9CgpjbGFzcyBQZXJmb3JtYW5jZShDb250YWluZXIpOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oInBlcmZvcm1hbmNlIiwgIlVudGl0bGVkIFBlcmZvcm1hbmNlIikKICAgICAgICBzZWxmLmNvbXBvc2VyID0gIlVudGl0bGVkIENvbXBvc2VyIgogICAgCiAgICBkZWYgdG9fZGljdChzZWxmKSAtPiBkaWN0OgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICJ0eXBlIjogc2VsZi50eXBlLAogICAgICAgICAgICAibmFtZSI6IHNlbGYubmFtZSwKICAgICAgICAgICAgImNvbXBvc2VyIjogc2VsZi5jb21wb3NlcgogICAgICAgIH0KCmNsYXNzIEludGVydmFsKENvbnRhaW5lcik6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygiaW50ZXJ2YWwiLCAiSW50ZXJ2YWwiKQogICAgICAgIHNlbGYuZGV0YWlscyA9ICJSZWZyZXNobWVudHMgd2lsbCBiZSBzZXJ2ZWQgaW4gdGhlIEFubmV4ZSIKCiAgICBkZWYgdG9fZGljdChzZWxmKSAtPiBkaWN0OgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICJ0eXBlIjogc2VsZi50eXBlLAogICAgICAgICAgICAibmFtZSI6IHNlbGYubmFtZSwKICAgICAgICAgICAgImRldGFpbHMiOiBzZWxmLmRldGFpbHMKICAgICAgICB9Cjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIHJlbW92ZV9ldmVudChzZWxmLCBpbmRleD1Ob25lKToKICAgICAgICBpZiBpbmRleCBpcyBOb25lOgogICAgICAgICAgICBpbmRleCA9IGlucHV0KCJJbnB1dCBJbmRleCIpCjx8ZmltX2VuZHw+"]
["9d34a63c1c408a8ccbe008ad37afb6b016aa9e54-3","9d34a63c1c408a8ccbe008ad37afb6b016aa9e54","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGN2MgppbXBvcnQgc3lzCgppbXBvcnQgaW1hZ2VTaW1wbGUgYXMgaW1nU2kKCiNDcmVhdGVzIHRoZSBoZWxwIHN0cmluZwpoZWxwQXJncyA9IFtdCmhlbHBBcmdzLmFwcGVuZCgnICAgLXJjICAgIFNob3dzIHJhdyBjb250b3VycyBiZWluZyBmb3VuZCcpCmhlbHBBcmdzLmFwcGVuZCgnICAgLXRmICAgIFNob3dzIHRhcGUgYmVpbmcgZm91bmQnKQpoZWxwQXJncy5hcHBlbmQoJyAgIC1pbWcgICBJbWFnZSBpbnB1dCAoTXVzdCBiZSBmb2xsb3dlZCBieSBwYXRoKScpCgojQ29sb3IgYXZlcmFnZXMKY29sb3JBdmVyYWdlcyA9IFRydWUKI1Nob3dzIHJhdyB1bmZpbHRlcmVkIGNvbnRvdXJzCnJhd0NvbnRvdXJzID0gRmFsc2UKCiNTaG93cyB0aGUgcmVmbGVjdGl2ZSB0YXBlIGZpbmRlcgpmaW5kVGFwZSA9IEZhbHNlCgojVXNlcyBpbWFnZSBpbnB1dCB3aXRoIHBhdGgKaW1hZ2VJbnB1dCA9IEZhbHNlCmltYWdlUGF0aCA9IE5vbmUKCiNSdW5uaW5nIGZvciBraWxsaW5nIHByb2Nlc3MgaWYgLS1oZWxwCnJ1bm5pbmcgPSBUcnVlCgojSWYgdGhlcmUgYXJlIG1vcmUgdGhlbiAxIGFyZ3MKaWYgbGVuKHN5cy5hcmd2KSAhPSAxOgogICAgc2tpcCA9IEZhbHNlCiAgICAjUnVucyB0aHJ1IHRoZSBhcmdzCiAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oc3lzLmFyZ3YpKToKICAgICAgICAjSWYgc2tpcCBpcyBzZXQgaXQgdG9nZ2xlcyBpdCBhbmQgZG9lc250IGNoZWNrIG5leHQKICAgICAgICBpZiBza2lwID09IFRydWU6CiAgICAgICAgICAgIHNraXAgPSBGYWxzZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGN1cnJlbnQgPSBzeXMuYXJndltpXQoKICAgICAgICAgICAgI0lmIC1yYyBlbmFibGUgc2hvd2luZyByYXcgY29udG91cnMKICAgICAgICAgICAgaWYgY3VycmVudCA9PSAnLXJjJzoKICAgICAgICAgICAgICAgIHJhd0NvbnRvdXJzID0gVHJ1ZQoKICAgICAgICAgICAgI2lmIC10ZiBlbmFibGUgc2hvd2luZyB0YXBlIGZpbmRlcgogICAgICAgICAgICBlbGlmIGN1cnJlbnQgPT0gJy10Zic6CiAgICAgICAgICAgICAgICBmaW5kVGFwZSA9IFRydWUKCiAgICAgICAgICAgICNpZiAtdGYgZW5hYmxlIGltYWdlIGlucHV0IHNldCB0aGUgcGF0aCB0byBuZXh0IGFyZ3VtZW50CiAgICAgICAgICAgICNTa2lwcyB0aGUgY2hlY2sgZm9yIHRoZSBuZXh0IGFyZ3VtZW50IHNvIGl0IGRvZXNudCBnbyB0byBoZWxwCiAgICAgICAgICAgIGVsaWYgY3VycmVudCA9PSAnLWltZyc6CiAgICAgICAgICAgICAgICBpbWFnZUlucHV0ID0gVHJ1ZQogICAgICAgICAgICAgICAgaSArPSAxCiAgICAgICAgICAgICAgICBpbWFnZVBhdGggPSBzeXMuYXJndltpXQogICAgICAgICAgICAgICAgc2tpcCA9IFRydWUKICAgICAgICAgICAgICAgIGlmIGxlbihzeXMuYXJndikgPT0gMzoKICAgICAgICAgICAgICAgICAgICByYXdDb250b3VycyA9IFRydWUKCiAgICAgICAgICAgICNJZiBoZWxwIHNob3cgdGhlIGhlbHAgYW5kIGtpbGwKICAgICAgICAgICAgZWxpZiBjdXJyZW50ID09ICctLWhlbHAnOgogICAgICAgICAgICAgICAgcnVubmluZyA9IEZhbHNlCiAgICAgICAgICAgICAgICBmb3IgdGlwIGluIGhlbHBBcmdzOgogICAgICAgICAgICAgICAgICAgIHByaW50IHRpcAoKICAgICAgICAgICAgI0lmIHVucmVjb25pemVkIGFyZ3VtZW50IHNob3cgaGVscCBhbmQga2lsbAogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcnVubmluZyA9IEZhbHNlCiAgICAgICAgICAgICAgICBmb3IgdGlwIGluIGhlbHBBcmdzOgogICAgICAgICAgICAgICAgICAgIHByaW50IHRpcAojSWYgbm8gYXJncyBqdXN0IHNob3cgdmlkZW8gY29udG91cnMKZWxzZToKICAgIHJhd0NvbnRvdXJzID0gRmFsc2UKCiNEZXRlcm1pbmluZyBjb250ZW50CndhaXRUaW1lID0gTm9uZQpjb250ZW50ID0gTm9uZQoKI2lmIGltYWdlIGlucHV0IHNldCB0aGUgY29udGVudCB0byB0aGUgcGF0aCBhbmQgc2V0IHdhaXQgdGltZSB0byAwCiNXYWl0IHRpbWUgMCB3YWl0cyB0aWxsIHRoZSBlc2MgcHJlc3NlZCBpbiBpbWFnZVNpbXBsZSBzbyBpdCBkb2VzbnQgdHIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojdG8gdGFrZSBhbm90aGVyIGZyYW1lIG9mIGEgb25lIGZyYW1lIHBpY3R1cmUKaW1nID0gY3YyLmltcmVhZCgnSW1hZ2VzL1lUXzEucG5nJykKaWYgaW1hZ2VJbnB1dDoKICAgIGNvbnRlbnQgPSBjdjIuaW1yZWFkKGltYWdlUGF0aCkKPHxmaW1fZW5kfD4="]
["32bd0215ce6c3b51ae3695fcc183f96fcf5a6f33-5","32bd0215ce6c3b51ae3695fcc183f96fcf5a6f33","PHxmaW1fcHJlZml4fD4KZnJvbSBwYWdlcy5kYXNoYm9hcmQgaW1wb3J0ICBEYXNoYm9hcmQKaW1wb3J0IHB5dGVzdAppbXBvcnQgc3lzCnN5cy5wYXRoLmFwcGVuZCgiLiIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmZyb20gc2VsZW5pdW0gaW1wb3J0IHdlYmRyaXZlcgpmcm9tIHBhZ2VzLndyYXBwZXIgaW1wb3J0IEJhc2VQYWdlCmZyb20gc2VsZW5pdW0ud2ViZHJpdmVyLmNocm9tZS5vcHRpb25zIGltcG9ydCBPcHRpb25zCjx8ZmltX2VuZHw+"]
["08e17541f0ca6ab65c6dce556068bee07444916d-4","08e17541f0ca6ab65c6dce556068bee07444916d","PHxmaW1fcHJlZml4fD4KCiMgY29kaW5nOiB1dGYtOAppbXBvcnQgbXVsdGlwcm9jZXNzaW5nCgppbXBvcnQgdGltZQoKY2xhc3MgVG90bzoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlKToKICAgICAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlCiAgICAgICAgc2VsZi50YWJsZSA9IFsidG90byJdCgoKZGVmIGZvbyhxKToKICAgIHQgPSBUb3RvKCJKZSBzdWlzIGljaSIpCgo8fGZpbV9ob2xlfD4KCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2QoJ2ZvcmtzZXJ2ZXInKQogICAgcSA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCiAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PWZvbywgYXJncz0ocSwpKQogICAgcC5zdGFydCgpCiAgICB0aW1lLnNsZWVwKDIpCiAgICByZXMgPSBxLmdldCgpCiAgICBwcmludChyZXMpCiAgICBwcmludChyZXMubWVzc2FnZSkKICAgIHByaW50KHJlcy50YWJsZSkKICAgIHByaW50KGlkKHJlcy50YWJsZSkpCgogICAgcC5qb2luKCkKPHxmaW1fc3VmZml4fD4KICAgIHByaW50KHQpCiAgICBwcmludCh0LnRhYmxlKQogICAgcHJpbnQoaWQodC50YWJsZSkpCiAgICBxLnB1dCh0KQo8fGZpbV9lbmR8Pg=="]
["dea2190faeffebfbfb9d4eaa5a5e1dfa60d0407c-2","dea2190faeffebfbfb9d4eaa5a5e1dfa60d0407c","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscwoKZnJvbSByYWxwaC5kaXNjb3ZlcnkubW9kZWxzIGltcG9ydCBEZXZpY2UKCjx8ZmltX2VuZHw+"]
["9a02d70b4ceb5d7e4be0ea556482d9fc532012df-1","9a02d70b4ceb5d7e4be0ea556482d9fc532012df","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGhhc2hsaWIKaW1wb3J0IGhtYWMKaW1wb3J0IGpzb24KCmZyb20gYXp1cmUuZGV2b3BzLmNvbm5lY3Rpb24gaW1wb3J0IENvbm5lY3Rpb24KZnJvbSBmbGFzayBpbXBvcnQgcmVxdWVzdCwgRmxhc2ssIGFib3J0CmZyb20gbXNyZXN0LmF1dGhlbnRpY2F0aW9uIGltcG9ydCBCYXNpY0F1dGhlbnRpY2F0aW9uCgpmcm9tIC5hcHAgaW1wb3J0IEFwcGxpY2F0aW9uCgoKZGVmIGNyZWF0ZV9hcGkoYXBwOiBBcHBsaWNhdGlvbik6CiAgICBhcGkgPSBGbGFzayhfX25hbWVfXykKCiAgICBAYXBpLnJvdXRlKCIvaGVhbHRoY2hlY2siLCBtZXRob2RzPVsiR0VUIl0pCiAgICBkZWYgaGVhbHRoX2NoZWNrKCk6CiAgICAgICAgYXBwLmxvZy53YXJuKCJyZWNlaXZlZCBhIEhlYWx0aCBjaGVjayBjYWxsIikKICAgICAgICBpZiAic2VjcmV0IiBub3QgaW4gcmVxdWVzdC5hcmdzOgogICAgICAgICAgICBhcHAubG9nLmluZm8oIjQwNCBhZnRlciBubyBoZWFsdGggY2hlY2sgc2VjcmV0IikKICAgICAgICAgICAgYWJvcnQoNDA0KQogICAgICAgIGlmIHJlcXVlc3QuYXJnc1sic2VjcmV0Il0gIT0gYXBwLmNvbmZpZ1siYXBwbGljYXRpb24iXVsiaGVhbHRoX2NoZWNrX3NlY3JldCJdOgogICAgICAgICAgICBhcHAubG9nLmluZm8oIjQwMSBhZnRlciBiYWQgc2VjcmV0IHBhc3NlZCBpbiBjb25maWciKQogICAgICAgICAgICBhYm9ydCg0MDEpCiAgICAgICAgcmV0dXJuIGpzb24uZHVtcHMoYXBwLmNvbmZpZyksIDIwMAoKICAgIEBhcGkucm91dGUoIi9zb25hcmhvb2siLCBtZXRob2RzPVsnUE9TVCddKQogICAgZGVmIHNvbmFyX2hvb2soKToKICAgICAgICBhcHAubG9nLmluZm8oInJlY2VpdmVkIHNvbmFyaG9vayIpCiAgICAgICAgaW5wdXRfanNvbiA9IHJlcXVlc3QuZ2V0X2pzb24oKQogICAgICAgIGFwcC5sb2cuZGVidWcoaW5wdXRfanNvbikKICAgICAgICBpZiBub3QgdmFsaWRfaG1hY19zaWduYXR1cmUocmVxdWVzdC5kYXRhKToKICAgICAgICAgICAgYXBwLmxvZy53YXJuKCJpbnZhbGlkIEhNQUMgc2lnIGFib3J0aW5nIikKICAgICAgICAgICAgYWJvcnQoNDAxKQogICAgICAgIGlmIG5vdCBpc19wcl9vZl9jb3JyZWN0X3R5cGUoaW5wdXRfanNvbik6CiAgICAgICAgICAgIGFwcC5sb2cuaW5mbygiU2tpcHBpbmcgbm9uIFBSIGhvb2siKQogICAgICAgICAgICByZXR1cm4gIiIsIDIwNAogICAgICAgIHJldHVybiBzZW5kX2Fkb19wcl9zdGF0dXMoaW5wdXRfanNvbikKCiAgICBkZWYgc2VuZF9hZG9fcHJfc3RhdHVzKGlucHV0X2pzb24pOgogICAgICAgIGlmIGlucHV0X2pzb25bInByb2plY3QiXVsia2V5Il0gbm90IGluIGFwcC5jb25maWdbInJlcG9zIl06CiAgICAgICAgICAgIGFwcC5sb2cuaW5mbygic2tpcHBpbmcgaG9vayBmb3IgcHJvamVjdCBub3QgaW4gY29uZmlnIikKICAgICAgICAgICAgcmV0dXJuICIiLCAyMDQKICAgICAgICBwcm9qZWN0X2lkID0gYXBwLmNvbmZpZ1sicmVwb3MiXVtpbnB1dF9qc29uWyJwcm9qZWN0Il1bImtleSJdXVsicHJvamVjdF9uYW1lIl0KICAgICAgICBhcHAubG9nLmRlYnVnKCJob29rIGZvciBwcm9qZWN0OiAlcyIsIHByb2plY3RfaWQpCiAgICAgICAgZ2l0X2NsaWVudCA9IGdldF9naXRfY2xpZW50KGlucHV0X2pzb24pCiAgICAgICAgcmVwb19pZCA9IGdldF9yZXBvX2lkKGFwcC5jb25maWdbInJlcG9zIl1baW5wdXRfanNvblsicHJvamVjdCJdWyJrZXkiXV1bInJlcG9fbmFtZSJdLCBnaXRfY2xpZW50LCBwcm9qZWN0X2lkKQogICAgICAgIGlmIHJlcG9faWQgaXMgTm9uZToKICAgICAgICAgICAgYXBwLmxvZy53YXJuKCJhYm9ydGluZyBubyByZXBvIGlkIGluIGlucHV0IGpzb24iKQogICAgICAgICAgICBhYm9ydCg0MDQpCiAgICAgICAgYXBwLmxvZy5kZWJ1ZygiaG9vayBmb3IgcmVwbzogJXMiLCByZXBvX2lkKQoKICAgICAgICBwcl9zdGF0dXMgPSBjcmVhdGVfcHJfc3RhdHVzKGlucHV0X2pzb24pCiAgICAgICAgYXBwLmxvZy5kZWJ1ZygiU2VudCBTdGF0dXMiKQogICAgICAgIGFwcC5sb2cuZGVidWcocHJfc3RhdHVzKQogICAgICAgIHByX2lkID0gaW50KGlucHV0X2pzb25bImJyYW5jaCJdWyJuYW1lIl0pCiAgICAgICAgYXBwLmxvZy5kZWJ1ZygiUFIgSUQ6ICVzIiwgcHJfaWQpCiAgICAgICAgcmVzcG9uc2UgPSBnaXRfY2xpZW50LmNyZWF0ZV9wdWxsX3JlcXVlc3Rfc3RhdHVzKAo8fGZpbV9ob2xlfD4KICAgICAgICApCgogICAgICAgIHJldHVybiByZXNwb25zZS5zdGF0ZSwgMjAwCgogICAgZGVmIGNyZWF0ZV9wcl9zdGF0dXMoaW5wdXRfanNvbik6CiAgICAgICAgY29udGV4dCA9IHsKICAgICAgICAgICAgJ2dlbnJlJzogIlNvbmFySG9vayIsCiAgICAgICAgICAgICduYW1lJzogaW5wdXRfanNvblsicHJvamVjdCJdWyJuYW1lIl0KICAgICAgICB9CiAgICAgICAgc3RhdGUgPSAnc3VjY2VlZGVkJyBpZiBpbnB1dF9qc29uWyJxdWFsaXR5R2F0ZSJdWyJzdGF0dXMiXSA9PSAiT0siIGVsc2UgJ2ZhaWxlZCcKICAgICAgICB0YXJnZXRfdXJsID0gaW5wdXRfanNvblsiYnJhbmNoIl1bInVybCJdCiAgICAgICAgZ2l0X3ByX3N0YXR1cyA9IHsKICAgICAgICAgICAgJ2NvbnRleHQnOiBjb250ZXh0LAogICAgICAgICAgICAnc3RhdGUnOiBzdGF0ZSwKICAgICAgICAgICAgJ3RhcmdldF91cmwnOiB0YXJnZXRfdXJsLAogICAgICAgIH0KICAgICAgICByZXR1cm4gZ2l0X3ByX3N0YXR1cwoKICAgIGRlZiBnZXRfZ2l0X2NsaWVudChpbnB1dF9qc29uKToKICAgICAgICBvcmdfdXJsID0gYXBwLmNvbmZpZ1sicmVwb3MiXVtpbnB1dF9qc29uWyJwcm9qZWN0Il1bImtleSJdXVsib3JnX3VybCJdCiAgICAgICAgY3JlZGVudGlhbHMgPSBCYXNpY0F1dGhlbnRpY2F0aW9uKCcnLCBhcHAuQURPX1BBVCkKICAgICAgICBjb25uZWN0aW9uID0gQ29ubmVjdGlvbihiYXNlX3VybD1vcmdfdXJsLCBjcmVkcz1jcmVkZW50aWFscykKICAgICAgICBnaXRfY2xpZW50ID0gY29ubmVjdGlvbi5jbGllbnRzX3Y1XzEuZ2V0X2dpdF9jbGllbnQoKQogICAgICAgIHJldHVybiBnaXRfY2xpZW50CgogICAgZGVmIGdldF9yZXBvX2lkKG5hbWUsIGNsaWVudCwgcHJvamVjdCk6CiAgICAgICAgcmVwb3MgPSBjbGllbnQuZ2V0X3JlcG9zaXRvcmllcyhwcm9qZWN0PXByb2plY3QpCiAgICAgICAgZm9yIHJlcG8gaW4gcmVwb3M6CiAgICAgICAgICAgIGlmIHJlcG8ubmFtZSA9PSBuYW1lOgogICAgICAgICAgICAgICAgcmV0dXJuIHJlcG8uaWQKICAgICAgICByZXR1cm4gTm9uZQoKICAgIGRlZiB2YWxpZF9obWFjX3NpZ25hdHVyZShpbnB1dF9ieXRlcyk6CiAgICAgICAgc2lnbmF0dXJlID0gaG1hYy5uZXcoYXBwLlNPTkFSX1dFQkhPT0tfU0VDUkVULmVuY29kZSgpLCBpbnB1dF9ieXRlcywgaGFzaGxpYi5zaGEyNTYpCiAgICAgICAgcmV0dXJuIHNpZ25hdHVyZS5oZXhkaWdlc3QoKSA9PSByZXF1ZXN0LmhlYWRlcnNbJ1gtU29uYXItV2ViaG9vay1ITUFDLVNIQTI1NiddCgogICAgZGVmIGlzX3ByX29mX2NvcnJlY3RfdHlwZShpbnB1dF9qc29uKToKICAgICAgICBwcl90eXBlID0gIlBVTExfUkVRVUVTVCIgPT0gaW5wdXRfanNvblsnYnJhbmNoJ11bJ3R5cGUnXQogICAgICAgIHJldHVybiBwcl90eXBlCgogICAgcmV0dXJuIGFwaQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBzdGF0dXM9cHJfc3RhdHVzLAogICAgICAgICAgICByZXBvc2l0b3J5X2lkPXJlcG9faWQsCiAgICAgICAgICAgIHB1bGxfcmVxdWVzdF9pZD1wcl9pZCwKICAgICAgICAgICAgcHJvamVjdD1wcm9qZWN0X2lkCjx8ZmltX2VuZHw+"]
["fdedb227f84c6efb71e33011a5e99e0b326d8aac-1","fdedb227f84c6efb71e33011a5e99e0b326d8aac","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJhbmRvbQppbXBvcnQganNvbgppbXBvcnQgcmUKZnJvbSBNeVNRTCBpbXBvcnQgTXlTUUwKCgpDTEFTU19SRUZFWCA9IHInLyhcZCspKFx3KVx3Ki9pdScKCm15c3FsID0gTXlTUUwoImNvbmZpZy5qc29uIikKCicnJ2V4cGlyZXM6IG9uY2Utc2VlbiDigJTCoGRpc2FwcGVhcnMgd2hlbiB1c2VyIGp1c3Qgb3BlbiBpdAoKZXhwaXJlczogbGltaXRlZC10aW1lIOKAlCBkaXNhcHBlYXJzIGFmdGVyIHRoZSBzcGVjaWZpZWQgdGltZSBpcyByZWFjaGVkCisgZXhwaXJlc19hdDogdGhlIGRhdGUgUEhQIHVuZGVyc3RhbmRzIChwcm9iLiBJU08pCgpFeC46CnsKCSJpZCI6IDMsCgkiZXhwaXJlcyI6ICJsaW1pdGVkLXRpbWUiLAoJIm1zZ190ZXh0IjogItCt0YLQviDRgdC+0L7QsdGJ0LXQvdC40LUg0LTQvtC70LbQvdC+INC40YHRh9C10LfQvdGD0YLRjCDQsiAyMjo0NiIsCgkiZXhwaXJlc19hdCI6ICIyMDIxLTA0LTI0IDIyOjQ2Igp9CgpleHBpcmVzOiBsaW1pdGVkLXNlZW4g4oCUwqBkaXNhcHBlYXJzIGFmdGVyIGl0IGlzIExPQURFRCBzcGVjaWZpZWQgbnVtYmVyIG9mIHRpbWVzLiBJbiBmYWN0LApvbmNlLXNlZW4gaXMgbGltaXRlZC1zZWVuIHdpdGggZXhwaXJlc19hdCA9IDEKCisgZXhwaXJlc19hdDoganVzdCBhIG51bWJlciBvZiBzdWdnZXN0ZWQgbG9va3MuIEV4LiDigJTCoGxvb2sgYXQgc3RhbmRhcnQgYW5ub3VuY2VtZW50cy4KCmFueSBvdGhlciDigJTCoG5lZWRzIG1hbnVhbCBjbG9zaW5nLiBOb3QgcmVjb21tZW5kZWQgYmVjYXVzZSB1c2VycyBhcmUgdG9vIGxhennigKYKCkV4LjoKCnsKCSJpZCI6IDQsCgkibXNnX3RleHQiOiAiVGhpcyBvbmUgc2hvdWxkIGJlIHN0YWJsZSIKfQoKaWQgaXMgbmVlZGVkIChzaW11bHRhbmVvdXNseSB0byBiZSByZXNwb25zaWJsZSBmb3IgY2xvc2luZykgdG8gYmUgZWFzaWVyIHRvIG1hbmFnZSB0aGUgbWVzc2FnZXMuCkZvciBleC4sIHlvdSBjYW4gY3JlYXRlIG1lc3NhZ2UgZm9yIGFsbCB0aGUgdXNlcnMsIHRoYW4sIHdoZW4gaXQgd2lsbCBiZWNvbWUgcmVkdW5kYW50LCByZW1vdmUgYWxsCndpdGggdGhpcyBpZC4gVGhhdCBtZWFucyBmbGV4ZWJpbGl0eSBpbiB0ZXJtcyBvZiBleHBpcmluZyBhbmQgdGV4dCBmb3IgZGlmZmVyZW50IHVzZXJzLicnJwoKZGVmIG1zZ19jb25zdHJ1Y3QobXNnX3RleHQsIGV4cGlyZXM9Tm9uZSwgZXhwaXJlc19hdD1Ob25lLCBtc2dfaWQ9Tm9uZSk6CiAgICBhc3NlcnQgbXNnX2lkID09IE5vbmUgb3IgKHR5cGUobXNnX2lkKSA9PSBpbnQgYW5kIG1zZ19pZCA+IDApCgogICAgaWYgbXNnX2lkIGlzIE5vbmU6CiAgICAgICAgbXNnX2lkID0gcmFuZG9tLnJhbmRpbnQoMSwgMV8wMDBfMDAwXzAwKQoKICAgIG1zZyA9IHsKICAgICAgICAiaWQiOiBtc2dfaWQsCiAgICAgICAgIm1zZ190ZXh0IjogbXNnX3RleHQKICAgIH0KCiAgICBpZiBleHBpcmVzOgogICAgICAgIG1zZ1snZXhwaXJlcyddID0gZXhwaXJlcwoKICAgIGlmIGV4cGlyZXNfYXQ6CiAgICAgICAgbXNnWydleHBpcmVzX2F0J10gPSBleHBpcmVzX2F0CgogICAgcmV0dXJuIG1zZwoKCmRlZiBnZXRfbXNnc19mb3JfcGVyc29uKHBlcnNvbl9pZCk6CiAgICBkYXRhX2dvdCA9IG15c3FsLmZldGNoKAogICAgICAgICdTRUxFQ1QgbXNnX2RhdGEgRlJPTSBgbWVzc2FnZXNgIFdIRVJFIGB1c2VyX2lkYCA9ICcgKyBzdHIocGVyc29uX2lkKSkKICAgIGlmIGRhdGFfZ290ID09ICgpIG9yIGRhdGFfZ290WzBdWydtc2dfZGF0YSddIGlzIE5vbmU6CiAgICAgICAgcmV0dXJuIE5vbmUKICAgIHJldHVybiBqc29uLmxvYWRzKGRhdGFfZ290WzBdWydtc2dfZGF0YSddKQoKCmRlZiBzZXRfbXNnc19mb3JfcGVyc29uKHBlcnNvbl9pZCwgbXNncyk6CiAgICB0cnk6CiAgICAgICAgbXlzcWwucXVlcnkoIlVQREFURSBuZXRzY2hvb2wubWVzc2FnZXMgU0VUIG1zZ19kYXRhID0gJ3t9JyBXSEVSRSBgdXNlcl9pZGAgPSB7fSIuZm9ybWF0KAogICAgICAgICAgICBqc29uLmR1bXBzKG1zZ3MsIGVuc3VyZV9hc2NpaT1GYWxzZSksIHBlcnNvbl9pZCkpCiAgICAgICAgcmV0dXJuIFRydWUKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgogICAgICAgIHByaW50KGVyciwgJ2R1cmluZyB0aGUgcXVlcnknKQogICAgICAgIHByaW50KGpzb24uZHVtcHMobXNncywgZW5zdXJlX2FzY2lpPUZhbHNlKSkKCgpkZWYgZ2V0X3BlcnNvbnNfaWRfYnkocHJvcCwgdmFsdWUpOgogICAgcmV0dXJuIFt1c2VyWydpZCddIGZvciB1c2VyIGluIHVzZXJzIGlmIHVzZXJbcHJvcF0gPT0gdmFsdWVdCgoKZGVmIGlzX2lkX2luX21zZ3MobXNncywgbXNnX2lkKToKICAgIGdsb2JhbCBtc2dzXwogICAgbXNnc18gPSBtc2dzCiAgICByZXR1cm4gW21zZyBmb3IgbXNnIGluIG1zZ3MgaWYgbXNnWydpZCddID09IG1zZ19pZF0KCgpkZWYgcmVjaXBpZW50c19mcm9tX3N0cmluZyhyZWNpcGllbnRzKToKICAgIGlmIHR5cGUocmVjaXBpZW50cykgPT0gc3RyOgogICAgICAgIHJlY2lwaWVudHMgPSByZWNpcGllbnRzLmxvd2VyKCkKICAgICAgICBpZiByZS5mdWxsbWF0Y2goQ0xBU1NfUkVGRVgsIHJlY2lwaWVudHMpOgogICAgICAgICAgICByZWNpcGllbnRzID0gZ2V0X3BlcnNvbnNfaWRfYnkoJ2NsYXNzJywgcmVjaXBpZW50cykKICAgICAgICBlbGlmIHJlY2lwaWVudHMgPT0gJ2FsbCc6CiAgICAgICAgICAgIHJlY2lwaWVudHMgPSB1c2Vyc19pZHMKICAgICAgICBlbHNlOgogICAgICAgICAgICByZWNpcGllbnRzID0gZ2V0X3BlcnNvbnNfaWRfYnkoJ25hbWUnLCByZWNpcGllbnRzKQogICAgaWYgdHlwZShyZWNpcGllbnRzKSA9PSBpbnQ6CiAgICAgICAgcmVjaXBpZW50cyA9IFtyZWNpcGllbnRzXQogICAgcmV0dXJuIHJlY2lwaWVudHMKCgpkZWYgc2V0X21zZ19mb3JfcGVyc29ucyhyZWNpcGllbnRzLCBjb25zdHJ1Y3RlZF9tc2csIGR1cGxpY2F0ZXM9J0xPRycpOgogICAgcmVjaXBpZW50cyA9IHJlY2lwaWVudHNfZnJvbV9zdHJpbmcocmVjaXBpZW50cykKICAgIHByaW50KCdUb3RhbCByZWNlaXZlcnM6JywgbGVuKHJlY2lwaWVudHMpKQogICAgY291bnRlciA9IDAKICAgIGZvciByZWNpcGllbnQgaW4gcmVjaXBpZW50czoKICAgICAgICBtc2dzID0gZ2V0X21zZ3NfZm9yX3BlcnNvbihyZWNpcGllbnQpCiAgICAgICAgaWYgbXNncyBpcyBOb25lOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGlmIGlzX2lkX2luX21zZ3MobXNncywgY29uc3RydWN0ZWRfbXNnWydpZCddKToKICAgICAgICAgICAgaWYgZHVwbGljYXRlcyA9PSAnTE9HJzoKICAgICAgICAgICAgICAgIHByaW50KGNvbnN0cnVjdGVkX21zZywgJ2lnbm9yZWQ7IGR1cGxpY2F0ZScpCiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBlbGlmIGR1cGxpY2F0ZXMgPT0gJ0FERCc6CiAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgIGVsaWYgZHVwbGljYXRlcyA9PSAnSUdOT1JFJzoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkR1cGxpY2F0ZXMgZm91bmQiKQogICAgICAgIG1zZ3MuYXBwZW5kKGNvbnN0cnVjdGVkX21zZykKICAgICAgICBpZiBzZXRfbXNnc19mb3JfcGVyc29uKHJlY2lwaWVudCwgbXNncyk6CiAgICAgICAgICAgIGNvdW50ZXIgKz0gMQogICAgcHJpbnQoJ1RvdGFsIHJlY2VpdmVkOicsIGNvdW50ZXIpCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpkZWYgZGVsZXRlX21zZ19ieV9pZChtc2dfaWQsIHJlY2lwaWVudHM9J2FsbCcpOgogICAgcmVjaXBpZW50cyA9IHJlY2lwaWVudHNfZnJvbV9zdHJpbmcocmVjaXBpZW50cykKICAgIGZvciByZWNpcGllbnQgaW4gcmVjaXBpZW50czoKICAgICAgICBtc2dzID0gZ2V0X21zZ3NfZm9yX3BlcnNvbihyZWNpcGllbnQpCjx8ZmltX2VuZHw+"]
["19b99e7dc11c5bee8f1fb5490b7e3733d7424367-3","19b99e7dc11c5bee8f1fb5490b7e3733d7424367","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAxMyBUd2lzdGVkIE1hdHJpeCBMYWJvcmF0b3JpZXMuICBTZWUgTElDRU5TRSBmaWxlIGZvciBkZXRhaWxzCgoiIiIKVGVzdHMgZm9yIEx7dmVydGV4LnEycXN0YW5kYWxvbmV9Cjx8ZmltX2hvbGV8Pgpmcm9tIHR3aXN0ZWQucHJvdG9jb2xzLmFtcCBpbXBvcnQgQU1QCmZyb20gdHdpc3RlZC50ZXN0Lmlvc2ltIGltcG9ydCBjb25uZWN0LCBtYWtlRmFrZUNsaWVudCwgbWFrZUZha2VTZXJ2ZXIKZnJvbSB0d2lzdGVkLnRyaWFsLnVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQoKZnJvbSB2ZXJ0ZXgucTJxIGltcG9ydCBRMlFBZGRyZXNzCmZyb20gdmVydGV4LnEycWFkbWluIGltcG9ydCBBZGRVc2VyCmZyb20gdmVydGV4LnEycXN0YW5kYWxvbmUgaW1wb3J0IElkZW50aXR5QWRtaW4KCgpjbGFzcyBBZGRVc2VyQWRtaW5UZXN0cyhUZXN0Q2FzZSk6CiAgICAiIiIKICAgIFRlc3RzIHRoYXQgSWRlbnRpdHlBZG1pbiBjYW4gc3VjY2Vzc2Z1bGx5IGFkZCBhIHVzZXIKICAgICIiIgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIHNlbGYuYWRkVXNlciA9IGNhbGxfcmVjb3JkZXIobGFtYmRhICphcmdzLCAqKmt3YXJnczoge30pCiAgICAgICAgc3RvcmUgPSBzdHViKGFkZFVzZXI9c2VsZi5hZGRVc2VyKQogICAgICAgIHNlbGYuYWRtaW5GYWN0b3J5ID0gc3R1YihzdG9yZT1zdG9yZSkKCiAgICBkZWYgdGVzdF9JZGVudGl0eUFkbWluX3Jlc3BvbmRlcl9hZGRzX3VzZXIoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgTHtJZGVudGl0eUFkbWlufSBoYXMgYSBMe0FkZFVzZXJ9IHJlc3BvbmRlci4KICAgICAgICAiIiIKICAgICAgICByZXNwb25kZXIgPSBJZGVudGl0eUFkbWluKCkubG9jYXRlUmVzcG9uZGVyKEFkZFVzZXIuY29tbWFuZE5hbWUpCiAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmVzcG9uZGVyKQoKICAgIGRlZiB0ZXN0X2FkZHNfdXNlcihzZWxmKToKICAgICAgICAiIiIKICAgICAgICBXaGVuIEx7VXNlckFkZGVyfSBpcyBjb25uZWN0ZWQgdG8gTHtJZGVudGl0eUFkbWlufSwgdGhlIEx7QWRkVXNlcn0KICAgICAgICBjb21tYW5kIGlzIGNhbGxlZCBhbmQgTHtJZGVudGl0eUFkbWlufSBhZGRzIHRoZSB1c2VyIHRvIGl0cyBmYWN0b3J5J3MKICAgICAgICBzdG9yZS4KICAgICAgICAiIiIKICAgICAgICBhZG1pbiA9IElkZW50aXR5QWRtaW4oKQogICAgICAgIGFkbWluLmZhY3RvcnkgPSBzZWxmLmFkbWluRmFjdG9yeQoKICAgICAgICBzZXJ2ZXJUcmFuc3BvcnQgPSBtYWtlRmFrZVNlcnZlcihhZG1pbikKICAgICAgICBzZXJ2ZXJUcmFuc3BvcnQuZ2V0UTJRSG9zdCA9IGxhbWJkYTogUTJRQWRkcmVzcygnUTJRIEhvc3QnKQoKICAgICAgICBjbGllbnQgPSBBTVAoKQogICAgICAgIHB1bXAgPSBjb25uZWN0KGFkbWluLCBzZXJ2ZXJUcmFuc3BvcnQsIGNsaWVudCwgbWFrZUZha2VDbGllbnQoY2xpZW50KSkKCiAgICAgICAgZCA9IGNsaWVudC5jYWxsUmVtb3RlKEFkZFVzZXIsIG5hbWU9J3EycSB1c2VybmFtZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkPSdxMnEgcGFzc3dvcmQnKQogICAgICAgIHB1bXAuZmx1c2goKQoKICAgICAgICAjIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXJlIGFkZGVkLCBhbG9uZyB3aXRoIHRoZSBkb21haW49cTJxCiAgICAgICAgIyBob3N0LCB0byB0aGUgSWRlbnRpdHlBZG1pbidzIGZhY3RvcnkncyBzdG9yZQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2NhbGwoJ1EyUSBIb3N0JywgJ3EycSB1c2VybmFtZScsICdxMnEgcGFzc3dvcmQnKV0sCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZFVzZXIuY2FsbHMpCgogICAgICAgICMgdGhlIHNlcnZlciByZXNwb25kcyB3aXRoIHt9CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7fSwgc2VsZi5zdWNjZXNzUmVzdWx0T2YoZCkpCjx8ZmltX3N1ZmZpeHw+CiIiIgoKZnJvbSBwcmV0ZW5kIGltcG9ydCBjYWxsX3JlY29yZGVyLCBjYWxsLCBzdHViCgo8fGZpbV9lbmR8Pg=="]
["ef58fe71b177ce6cdf2ab5e2713b008e9a485d05-2","ef58fe71b177ce6cdf2ab5e2713b008e9a485d05","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZCAKaW1wb3J0IHNxbGl0ZTMKCmRmcGF0aCA9ICdidWRkeW1vdmVfaG9saWRheWlxLmNzdicKZGYgPSBwZC5yZWFkX2NzdihkZnBhdGgpCnByaW50KGRmLmhlYWQpCgpzcWxiYXNlID0gZGYudG9fc3FsKCdidWRkeW1vdmVfZGF0YXNldCcsc3FsaXRlMy5Db25uZWN0aW9uKCdidWRkeW1vdmVfaG9saWRheWlxLnNxbGl0ZTMnKSxpZl9leGlzdHMgPSAncmVwbGFjZScpCgpjb25uZWN0aW9uID0gc3FsaXRlMy5jb25uZWN0KCdidWRkeW1vdmVfaG9saWRheWlxLnNxbGl0ZTMnKQpwcmludCgiQ09OTkVDVElPTjoiLCBjb25uZWN0aW9uKQoKY3Vyc29yID0gY29ubmVjdGlvbi5jdXJzb3IoKQpwcmludCgiQ1VSU09SIiwgY3Vyc29yKQoKCgpxMSA9ICdDb3VudCBob3cgbWFueSByb3dzIHlvdSBoYXZlIC0gaXQgc2hvdWxkIGJlIDI0OSEnCm9uZSA9ICIiIgpTRUxFQ1QgQ09VTlQoKikKRlJPTSBidWRkeW1vdmVfZGF0YXNldAoiIiIKcTIgPSAnSG93IG1hbnkgdXNlcnMgd2hvIHJldmlld2VkIGF0IGxlYXN0IDEwMCBOYXR1cmUgaW4gdGhlIGNhdGVnb3J5IGFsc28gcmV2aWV3ZWQgYXQgbGVhc3QgMTAwIGluIHRoZSBTaG9wcGluZyBjYXRlZ29yeT8nCnR3byA9ICIiIgpTRUxFQ1QgQ09VTlQoKikKRlJPTSBidWRkeW1vdmVfZGF0YXNldApXSEVSRSBOYXR1cmUgPiA5OSBhbmQgU2hvcHBpbmcgPiA5OQoiIiIKcTMgPSAnKFN0cmV0Y2gpIFdoYXQgYXJlIHRoZSBhdmVyYWdlIG51bWJlciBvZiByZXZpZXdzIGZvciBlYWNoIGNhdGVnb3J5PycKdGhyZWUgPSAiIiIKU0VMRUNUICAoCiAgICAgICAgU0VMRUNUIEFWRyhTcG9ydHMpCiAgICAgICAgRlJPTSBidWRkeW1vdmVfZGF0YXNldAogICAgICAgICkgQVMgc3BvcnRzLAogICAgICAgICgKICAgICAgICBTRUxFQ1QgQVZHKFJlbGlnaW91cykKICAgICAgICBGUk9NICAgYnVkZHltb3ZlX2RhdGFzZXQKICAgICAgICApIEFTIHJlbGlnaW91cywKICAgICAgICAoCiAgICAgICAgU0VMRUNUIEFWRyhOYXR1cmUpCiAgICAgICAgRlJPTSAgIGJ1ZGR5bW92ZV9kYXRhc2V0CiAgICAgICAgKSBBUyBuYXR1cmUsCiAgICAgICAgKAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgU0VMRUNUIEFWRyhUaGVhdHJlKQogICAgICAgIEZST00gICBidWRkeW1vdmVfZGF0YXNldAogICAgICAgICkgQVMgdGhlYXRyZSwKICAgICAgICAoCjx8ZmltX2VuZHw+"]
["9a6b40ad3183142d17fae7b6ac01d68e4e1a5c15-1","9a6b40ad3183142d17fae7b6ac01d68e4e1a5c15","PHxmaW1fcHJlZml4fD4KIyAtKi0gdGVzdC1jYXNlLW5hbWU6IHR3aXN0ZWQudGVzdC50ZXN0X3BsdWdpbiAtKi0KPHxmaW1faG9sZXw+CgpOb3RoaW5nIHRvIHNlZSBoZXJlLCByZWFsbHkuCiIiIgoKIyBJdCdzIG9rYXkgdG8gZmFpbCAtIE9OQ0UuCgppbXBvcnQgb3MKCmZyb20gdHdpc3RlZC5weXRob24udXRpbCBpbXBvcnQgc2licGF0aAoKaWYgb3MucGF0aC5leGlzdHMoc2licGF0aChfX2ZpbGVfXywgJ2Ryb3Bpbi5jYWNoZScpKToKICAgIGltcG9ydCB0d2lzdGVkLnRlc3QudGVzdF9wbHVnaW4gYXMgVEVTVAogICAgYXNzZXJ0IG5vdCBURVNULnJ1bm5pbmcKPHxmaW1fc3VmZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMDUgRGl2bW9kLCBJbmMuCiMgU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMuCgoiIiJQbHVnaW4gbW9kdWxlIGZvciB1c2UgYnkgdGhlIHBsdWdpbiBzeXN0ZW0ncyB1bml0IHRlc3RzLgo8fGZpbV9lbmR8Pg=="]
["7be2d87618a79f48dfe7bdfbe963eec732dd2b5a-3","7be2d87618a79f48dfe7bdfbe963eec732dd2b5a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9wZXJhdG9yCmltcG9ydCBvcwppbXBvcnQgc3lzCgoKZGVmIG1haW4oYXJndj1Ob25lKToKICAgIGlmIGFyZ3YgaXMgTm9uZToKICAgICAgICBhcmd2ID0gc3lzLmFyZ3YKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHdhcm5pbmdzX2ZpbGUgPSBfdmFsaWRhdGVfaW5wdXQoYXJndikKICAgIHdpdGggb3Blbih3YXJuaW5nc19maWxlKSBhcyBmOgogICAgICAgIGxpbmVzID0gW2xpbmUuc3RyaXAoKS5zcGxpdCgnLCcpWzNdIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCldCiAgICB3YXJuaW5nX2RpY3QgPSB7fQo8fGZpbV9lbmR8Pg=="]
["8bb20d929b0d1e6c8050ef29b432a6661504dcf9-1","8bb20d929b0d1e6c8050ef29b432a6661504dcf9","PHxmaW1fcHJlZml4fD4KCmZyb20gUHlPYmpDVG9vbHMuVGVzdFN1cHBvcnQgaW1wb3J0ICoKZnJvbSBRdWFydHouUXVhcnR6Q29yZSBpbXBvcnQgKgpmcm9tIFF1YXJ0eiBpbXBvcnQgKgoKY2xhc3MgVGVzdENJS2VybmVsIChUZXN0Q2FzZSk6Cjx8ZmltX2hvbGV8PgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgdGVzdE1ldGhvZHMoc2VsZik6CiAgICAgICAgc2VsZi5hc3NlcnRBcmdJc1NFTChDSUtlcm5lbC5zZXRST0lTZWxlY3Rvcl8sIDAsIENHUmVjdC5fX3R5cGVzdHJfXyArIGInQDppJyArIENHUmVjdC5fX3R5cGVzdHJfXyArIGInQCcpCgo8fGZpbV9lbmR8Pg=="]
["c23c255176141826b6c6942620786081c91b8f34-4","c23c255176141826b6c6942620786081c91b8f34","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFzeW5jaW8KZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBBc3luY01vY2ssIHBhdGNoCmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbAoKZnJvbSBodW1taW5nYm90LmNvbm5lY3Rvci5kZXJpdmF0aXZlLmJ5Yml0X3BlcnBldHVhbC5ieWJpdF9wZXJwZXR1YWxfYXV0aCBpbXBvcnQgQnliaXRQZXJwZXR1YWxBdXRoCmZyb20gaHVtbWluZ2JvdC5jb25uZWN0b3IuZGVyaXZhdGl2ZS5ieWJpdF9wZXJwZXR1YWwuYnliaXRfcGVycGV0dWFsX3VzZXJfc3RyZWFtX3RyYWNrZXIgaW1wb3J0IEJ5Yml0UGVycGV0dWFsVXNlclN0cmVhbVRyYWNrZXIKCgpjbGFzcyBCeWJpdFBlcnBldHVhbFVzZXJTdHJlYW1UcmFja2VyVGVzdHMoVGVzdENhc2UpOgoKICAgIGRlZiBzZXRVcChzZWxmKSAtPiBOb25lOgogICAgICAgIHN1cGVyKCkuc2V0VXAoKQogICAgICAgIHNlbGYud3Nfc2VudF9tZXNzYWdlcyA9IFtdCiAgICAgICAgc2VsZi53c19pbmNvbWluZ19tZXNzYWdlcyA9IGFzeW5jaW8uUXVldWUoKQogICAgICAgIHNlbGYubGlzdGVuaW5nX3Rhc2sgPSBOb25lCgogICAgICAgIHNlbGYudHJhY2tlciA9IEJ5Yml0UGVycGV0dWFsVXNlclN0cmVhbVRyYWNrZXIoYXV0aF9hc3Npc3RhbnQ9QnliaXRQZXJwZXR1YWxBdXRoKGFwaV9rZXk9J3Rlc3RBUElLZXknLCBzZWNyZXRfa2V5PSd0ZXN0U2VjcmV0JykpCgogICAgZGVmIHRlYXJEb3duKHNlbGYpIC0+IE5vbmU6CiAgICAgICAgc2VsZi5saXN0ZW5pbmdfdGFzayBhbmQgc2VsZi5saXN0ZW5pbmdfdGFzay5jYW5jZWwoKQogICAgICAgIHN1cGVyKCkudGVhckRvd24oKQoKICAgIGFzeW5jIGRlZiBfZ2V0X25leHRfcmVjZWl2ZWRfbWVzc2FnZShzZWxmLCB0aW1lb3V0OiBPcHRpb25hbFtpbnRdID0gTm9uZSk6CiAgICAgICAgcmV0dXJuIGF3YWl0IHNlbGYud3NfaW5jb21pbmdfbWVzc2FnZXMuZ2V0KCkKCiAgICBkZWYgX2NyZWF0ZV93c19tb2NrKHNlbGYpOgogICAgICAgIHdzID0gQXN5bmNNb2NrKCkKPHxmaW1faG9sZXw+CiAgICBkZWYgX2F1dGhlbnRpY2F0aW9uX3Jlc3BvbnNlKHNlbGYsIGF1dGhlbnRpY2F0ZWQ6IGJvb2wpIC0+IHN0cjoKICAgICAgICByZXF1ZXN0ID0geyJvcCI6ICJhdXRoIiwKICAgICAgICAgICAgICAgICAgICJhcmdzIjogWyd0ZXN0QVBJS2V5JywgJ3Rlc3RFeHBpcmVzJywgJ3Rlc3RTaWduYXR1cmUnXX0KICAgICAgICBtZXNzYWdlID0geyJzdWNjZXNzIjogYXV0aGVudGljYXRlZCwKICAgICAgICAgICAgICAgICAgICJyZXRfbXNnIjogIiIsCiAgICAgICAgICAgICAgICAgICAiY29ubl9pZCI6ICJ0ZXN0Q29ubmVjdGlvbklEIiwKICAgICAgICAgICAgICAgICAgICJyZXF1ZXN0IjogcmVxdWVzdH0KCiAgICAgICAgcmV0dXJuIG1lc3NhZ2UKCiAgICBkZWYgX2FkZF9zdWNjZXNzZnVsX2F1dGhlbnRpY2F0aW9uX3Jlc3BvbnNlKHNlbGYpOgogICAgICAgIHNlbGYud3NfaW5jb21pbmdfbWVzc2FnZXMucHV0X25vd2FpdChzZWxmLl9hdXRoZW50aWNhdGlvbl9yZXNwb25zZShUcnVlKSkKCiAgICBAcGF0Y2goJ2Fpb2h0dHAuQ2xpZW50U2Vzc2lvbi53c19jb25uZWN0JywgbmV3X2NhbGxhYmxlPUFzeW5jTW9jaykKICAgIGRlZiB0ZXN0X2xpc3RlbmluZ19wcm9jZXNzX2F1dGhlbnRpY2F0ZXNfYW5kX3N1YnNjcmliZXNfdG9fZXZlbnRzKHNlbGYsIHdzX2Nvbm5lY3RfbW9jayk6CiAgICAgICAgd3NfY29ubmVjdF9tb2NrLnJldHVybl92YWx1ZSA9IHNlbGYuX2NyZWF0ZV93c19tb2NrKCkKCiAgICAgICAgc2VsZi5saXN0ZW5pbmdfdGFzayA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKS5jcmVhdGVfdGFzaygKICAgICAgICAgICAgc2VsZi50cmFja2VyLnN0YXJ0KCkpCiAgICAgICAgIyBBZGQgdGhlIGF1dGhlbnRpY2F0aW9uIHJlc3BvbnNlIGZvciB0aGUgd2Vic29ja2V0CiAgICAgICAgc2VsZi5fYWRkX3N1Y2Nlc3NmdWxfYXV0aGVudGljYXRpb25fcmVzcG9uc2UoKQogICAgICAgICMgQWRkIGEgZHVtbXkgbWVzc2FnZSBmb3IgdGhlIHdlYnNvY2tldCB0byByZWFkIGFuZCBpbmNsdWRlIGluIHRoZSAibWVzc2FnZXMiIHF1ZXVlCiAgICAgICAgc2VsZi53c19pbmNvbWluZ19tZXNzYWdlcy5wdXRfbm93YWl0KCdkdW1teU1lc3NhZ2UnKQoKICAgICAgICBmaXJzdF9yZWNlaXZlZF9tZXNzYWdlID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpLnJ1bl91bnRpbF9jb21wbGV0ZShzZWxmLnRyYWNrZXIudXNlcl9zdHJlYW0uZ2V0KCkpCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2R1bW15TWVzc2FnZScsIGZpcnN0X3JlY2VpdmVkX21lc3NhZ2UpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgd3Muc2VuZF9qc29uLnNpZGVfZWZmZWN0ID0gbGFtYmRhIHNlbnRfbWVzc2FnZTogc2VsZi53c19zZW50X21lc3NhZ2VzLmFwcGVuZChzZW50X21lc3NhZ2UpCiAgICAgICAgd3MucmVjZWl2ZV9qc29uLnNpZGVfZWZmZWN0ID0gc2VsZi5fZ2V0X25leHRfcmVjZWl2ZWRfbWVzc2FnZQogICAgICAgIHJldHVybiB3cwoKPHxmaW1fZW5kfD4="]
["723a83521552e5cc41548fb069f7583f75aed55f-2","723a83521552e5cc41548fb069f7583f75aed55f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFzdHJvcHkudW5pdHMgYXMgdQppbXBvcnQgbnVtcHkgYXMgbnAKCgpkZWYgdGVzdF90YWJsZV9pbnRlcnBvbGF0aW9uKCk6CgogICAgZnJvbSBweWlyZi5zcGVjdHJhbCBpbXBvcnQgVGFibGVJbnRlcnBvbGF0aW9uU3BlY3RydW0KCiAgICAjIGxvZyBsb2cKICAgIGVuZXJneSA9IFsxLCAxMCwgMTAwXSAqIHUuVGVWCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGZsdXggPSBbNTAsIDUsIDAuNV0gLyAodS5HZVYgKiB1Lm0qKjIgKiB1LnNyICogdS5zKQoKICAgIHNwZWN0cnVtID0gVGFibGVJbnRlcnBvbGF0aW9uU3BlY3RydW0oZW5lcmd5LCBmbHV4KQogICAgYXNzZXJ0IHUuaXNjbG9zZShzcGVjdHJ1bSg1ICogdS5UZVYpLCAxMCAvICh1LkdlViAqIHUubSoqMiAqIHUuc3IgKiB1LnMpKQo8fGZpbV9lbmR8Pg=="]
["19c08837b8ac2748ce3135a916528329177d65e6-1","19c08837b8ac2748ce3135a916528329177d65e6","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwoKCiMgQ3JlYXRlIHlvdXIgbW9kZWxzIGhlcmUuCiMg5a2X5q615bGe5oCnCiMgaHR0cHM6Ly93d3cuY25ibG9ncy5jb20vbGFueWluaGFvL3AvOTQ2MzMyMi5odG1sCmNsYXNzIEFydGljbGUobW9kZWxzLk1vZGVsKToKICAgICIiIgogICAg5paH56ug6KGoCiAgICBkamFuZ28g5LmLIOaXtumXtAogICAgYXV0b19ub3cgOuaXoOiuuuaYr+S9oOa3u+WKoOi/mOaYr+S/ruaUueWvueixoe+8jOaXtumXtOS4uuS9oOa3u+WKoOaIluiAheS/ruaUueeahOaXtumXtAogICAgYXV0b19ub3dfYWRk77ya5piv5L2g5b2T5YmN5Yib5bu655qE5pe26Ze077yM5b2T5L2g5pu05paw5a+56LGh5pe25pe26Ze05LiN5Lya5pyJ5Y+Y5rOVCiAgICBjcmVhdGVfdGltZSA9IG1vZGVscy5EYXRlVGltZUZpZWxkKHZlcmJvc2VfbmFtZT0i5Yib5bu65pe26Ze0IixhdXRvX25vd19hZGQ9VHJ1ZSkKICAgIGRqYW5nbyDkuYsg57qn6IGU5pON5L2cCiAgICBvbl9kZWxldGU9Tm9uZSwgIyDliKDpmaTlhbPogZTooajkuK3nmoTmlbDmja7ml7Ys5b2T5YmN6KGo5LiO5YW25YWz6IGU55qEZmllbGTnmoTooYzkuLoKICAgIG9uX2RlbGV0ZT1tb2RlbHMuQ0FTQ0FERSwgIyDliKDpmaTlhbPogZTmlbDmja4s5LiO5LmL5YWz6IGU5Lmf5Yig6ZmkCiAgICBvbl9kZWxldGU9bW9kZWxzLkRPX05PVEhJTkcsICMg5Yig6Zmk5YWz6IGU5pWw5o2uLOS7gOS5iOS5n+S4jeWBmgogICAgb25fZGVsZXRlPW1vZGVscy5QUk9URUNULCAjIOWIoOmZpOWFs+iBlOaVsOaNrizlvJXlj5HplJnor69Qcm90ZWN0ZWRFcnJvcgogICAgIyBtb2RlbHMuRm9yZWlnbktleSgn5YWz6IGU6KGoJywgb25fZGVsZXRlPW1vZGVscy5TRVRfTlVMTCwgYmxhbms9VHJ1ZSwgbnVsbD1UcnVlKQogICAgb25fZGVsZXRlPW1vZGVscy5TRVRfTlVMTCwgIyDliKDpmaTlhbPogZTmlbDmja4s5LiO5LmL5YWz6IGU55qE5YC86K6+572u5Li6bnVsbO+8iOWJjeaPkEZL5a2X5q616ZyA6KaB6K6+572u5Li65Y+v56m6LOS4gOWvueS4gOWQjOeQhu+8iQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAjIG1vZGVscy5Gb3JlaWduS2V5KCflhbPogZTooagnLCBvbl9kZWxldGU9bW9kZWxzLlNFVF9ERUZBVUxULCBkZWZhdWx0PSfpu5jorqTlgLwnKQogICAgb25fZGVsZXRlPW1vZGVscy5TRVRfREVGQVVMVCwgIyDliKDpmaTlhbPogZTmlbDmja4s5LiO5LmL5YWz6IGU55qE5YC86K6+572u5Li66buY6K6k5YC877yI5YmN5o+QRkvlrZfmrrXpnIDopoHorr7nva7pu5jorqTlgLws5LiA5a+55LiA5ZCM55CG77yJCiAgICBvbl9kZWxldGU9bW9kZWxzLlNFVCwgIyDliKDpmaTlhbPogZTmlbDmja4sCiAgICBhLiDkuI7kuYvlhbPogZTnmoTlgLzorr7nva7kuLrmjIflrprlgLws6K6+572u77yabW9kZWxzLlNFVCjlgLwpCjx8ZmltX2VuZHw+"]
["dffaff76a32fd04eb744a22c6f4138428efd0392-1","dffaff76a32fd04eb744a22c6f4138428efd0392","PHxmaW1fcHJlZml4fD4KIyBjb2Rpbmc9dXRmLTgKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgojIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uCiMgQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci4KIyBDaGFuZ2VzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IgYW5kIHdpbGwgYmUgbG9zdCBpZiB0aGUgY29kZSBpcyByZWdlbmVyYXRlZC4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKZnJvbSB0eXBpbmcgaW1wb3J0IERpY3QsIExpc3QsIE9wdGlvbmFsLCBVbmlvbgoKZnJvbSBhenVyZS5jb3JlLmV4Y2VwdGlvbnMgaW1wb3J0IEh0dHBSZXNwb25zZUVycm9yCmltcG9ydCBtc3Jlc3Quc2VyaWFsaXphdGlvbgoKZnJvbSAuX21vbml0b3JfbWFuYWdlbWVudF9jbGllbnRfZW51bXMgaW1wb3J0ICoKCgpjbGFzcyBEYXRhU291cmNlKG1zcmVzdC5zZXJpYWxpemF0aW9uLk1vZGVsKToKICAgICIiIkRhdGEgc291cmNlIG9iamVjdCBjb250YWlucyBjb25maWd1cmF0aW9uIHRvIGNvbGxlY3QgdGVsZW1ldHJ5IGFuZCBvbmUgb3IgbW9yZSBzaW5rcyB0byBzZW5kIHRoYXQgdGVsZW1ldHJ5IGRhdGEgdG8uCgogICAgQWxsIHJlcXVpcmVkIHBhcmFtZXRlcnMgbXVzdCBiZSBwb3B1bGF0ZWQgaW4gb3JkZXIgdG8gc2VuZCB0byBBenVyZS4KCiAgICA6aXZhciBraW5kOiBSZXF1aXJlZC4gRGF0YXNvdXJjZSBraW5kLiBQb3NzaWJsZSB2YWx1ZXMgaW5jbHVkZTogIlBlcmZvcm1hbmNlQ291bnRlciIsCiAgICAgIkVUV1Byb3ZpZGVycyIsICJXaW5kb3dzRXZlbnRMb2dzIi4KICAgIDp2YXJ0eXBlIGtpbmQ6IHN0ciBvciB+JChweXRob24tYmFzZS1uYW1lc3BhY2UpLnYyMDE4XzA2XzAxX3ByZXZpZXcubW9kZWxzLkRhdGFTb3VyY2VLaW5kCiAgICA6aXZhciBjb25maWd1cmF0aW9uOiBSZXF1aXJlZC4KICAgIDp2YXJ0eXBlIGNvbmZpZ3VyYXRpb246CiAgICAgfiQocHl0aG9uLWJhc2UtbmFtZXNwYWNlKS52MjAxOF8wNl8wMV9wcmV2aWV3Lm1vZGVscy5EYXRhU291cmNlQ29uZmlndXJhdGlvbgogICAgOml2YXIgc2lua3M6IFJlcXVpcmVkLgogICAgOnZhcnR5cGUgc2lua3M6IGxpc3RbfiQocHl0aG9uLWJhc2UtbmFtZXNwYWNlKS52MjAxOF8wNl8wMV9wcmV2aWV3Lm1vZGVscy5TaW5rQ29uZmlndXJhdGlvbl0KICAgICIiIgoKICAgIF92YWxpZGF0aW9uID0gewogICAgICAgICdraW5kJzogeydyZXF1aXJlZCc6IFRydWV9LAogICAgICAgICdjb25maWd1cmF0aW9uJzogeydyZXF1aXJlZCc6IFRydWV9LAogICAgICAgICdzaW5rcyc6IHsncmVxdWlyZWQnOiBUcnVlfSwKICAgIH0KCiAgICBfYXR0cmlidXRlX21hcCA9IHsKICAgICAgICAna2luZCc6IHsna2V5JzogJ2tpbmQnLCAndHlwZSc6ICdzdHInfSwKICAgICAgICAnY29uZmlndXJhdGlvbic6IHsna2V5JzogJ2NvbmZpZ3VyYXRpb24nLCAndHlwZSc6ICdEYXRhU291cmNlQ29uZmlndXJhdGlvbid9LAogICAgICAgICdzaW5rcyc6IHsna2V5JzogJ3NpbmtzJywgJ3R5cGUnOiAnW1NpbmtDb25maWd1cmF0aW9uXSd9LAogICAgfQoKICAgIGRlZiBfX2luaXRfXygKICAgICAgICBzZWxmLAogICAgICAgICosCiAgICAgICAga2luZDogVW5pb25bc3RyLCAiRGF0YVNvdXJjZUtpbmQiXSwKICAgICAgICBjb25maWd1cmF0aW9uOiAiRGF0YVNvdXJjZUNvbmZpZ3VyYXRpb24iLAogICAgICAgIHNpbmtzOiBMaXN0WyJTaW5rQ29uZmlndXJhdGlvbiJdLAogICAgICAgICoqa3dhcmdzCiAgICApOgogICAgICAgICIiIgogICAgICAgIDprZXl3b3JkIGtpbmQ6IFJlcXVpcmVkLiBEYXRhc291cmNlIGtpbmQuIFBvc3NpYmxlIHZhbHVlcyBpbmNsdWRlOiAiUGVyZm9ybWFuY2VDb3VudGVyIiwKICAgICAgICAgIkVUV1Byb3ZpZGVycyIsICJXaW5kb3dzRXZlbnRMb2dzIi4KICAgICAgICA6cGFyYW10eXBlIGtpbmQ6IHN0ciBvciB+JChweXRob24tYmFzZS1uYW1lc3BhY2UpLnYyMDE4XzA2XzAxX3ByZXZpZXcubW9kZWxzLkRhdGFTb3VyY2VLaW5kCiAgICAgICAgOmtleXdvcmQgY29uZmlndXJhdGlvbjogUmVxdWlyZWQuCiAgICAgICAgOnBhcmFtdHlwZSBjb25maWd1cmF0aW9uOgogICAgICAgICB+JChweXRob24tYmFzZS1uYW1lc3BhY2UpLnYyMDE4XzA2XzAxX3ByZXZpZXcubW9kZWxzLkRhdGFTb3VyY2VDb25maWd1cmF0aW9uCiAgICAgICAgOmtleXdvcmQgc2lua3M6IFJlcXVpcmVkLgogICAgICAgIDpwYXJhbXR5cGUgc2lua3M6IGxpc3RbfiQocHl0aG9uLWJhc2UtbmFtZXNwYWNlKS52MjAxOF8wNl8wMV9wcmV2aWV3Lm1vZGVscy5TaW5rQ29uZmlndXJhdGlvbl0KICAgICAgICAiIiIKICAgICAgICBzdXBlcihEYXRhU291cmNlLCBzZWxmKS5fX2luaXRfXygqKmt3YXJncykKICAgICAgICBzZWxmLmtpbmQgPSBraW5kCiAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbgogICAgICAgIHNlbGYuc2lua3MgPSBzaW5rcwoKCmNsYXNzIERhdGFTb3VyY2VDb25maWd1cmF0aW9uKG1zcmVzdC5zZXJpYWxpemF0aW9uLk1vZGVsKToKICAgICIiIkRhdGFTb3VyY2VDb25maWd1cmF0aW9uLgoKICAgIDppdmFyIHByb3ZpZGVyczogRVRXIHByb3ZpZGVycyBjb25maWd1cmF0aW9uLgogICAgOnZhcnR5cGUgcHJvdmlkZXJzOgogICAgIGxpc3RbfiQocHl0aG9uLWJhc2UtbmFtZXNwYWNlKS52MjAxOF8wNl8wMV9wcmV2aWV3Lm1vZGVscy5FdHdQcm92aWRlckNvbmZpZ3VyYXRpb25dCiAgICA6aXZhciBwZXJmX2NvdW50ZXJzOiBQZXJmb3JtYW5jZSBjb3VudGVyIGNvbmZpZ3VyYXRpb24uCiAgICA6dmFydHlwZSBwZXJmX2NvdW50ZXJzOgogICAgIGxpc3RbfiQocHl0aG9uLWJhc2UtbmFtZXNwYWNlKS52MjAxOF8wNl8wMV9wcmV2aWV3Lm1vZGVscy5QZXJmb3JtYW5jZUNvdW50ZXJDb25maWd1cmF0aW9uXQogICAgOml2YXIgZXZlbnRfbG9nczogV2luZG93cyBldmVudCBsb2dzIGNvbmZpZ3VyYXRpb24uCiAgICA6dmFydHlwZSBldmVudF9sb2dzOgogICAgIGxpc3RbfiQocHl0aG9uLWJhc2UtbmFtZXNwYWNlKS52MjAxOF8wNl8wMV9wcmV2aWV3Lm1vZGVscy5FdmVudExvZ0NvbmZpZ3VyYXRpb25dCiAgICAiIiIKCiAgICBfYXR0cmlidXRlX21hcCA9IHsKICAgICAgICAncHJvdmlkZXJzJzogeydrZXknOiAncHJvdmlkZXJzJywgJ3R5cGUnOiAnW0V0d1Byb3ZpZGVyQ29uZmlndXJhdGlvbl0nfSwKICAgICAgICAncGVyZl9jb3VudGVycyc6IHsna2V5JzogJ3BlcmZDb3VudGVycycsICd0eXBlJzogJ1tQZXJmb3JtYW5jZUNvdW50ZXJDb25maWd1cmF0aW9uXSd9LAogICAgICAgICdldmVudF9sb2dzJzogeydrZXknOiAnZXZlbnRMb2dzJywgJ3R5cGUnOiAnW0V2ZW50TG9nQ29uZmlndXJhdGlvbl0nfSwKICAgIH0KCiAgICBkZWYgX19pbml0X18oCiAgICAgICAgc2VsZiwKICAgICAgICAqLAogICAgICAgIHByb3ZpZGVyczogT3B0aW9uYWxbTGlzdFsiRXR3UHJvdmlkZXJDb25maWd1cmF0aW9uIl1dID0gTm9uZSwKICAgICAgICBwZXJmX2NvdW50ZXJzOiBPcHRpb25hbFtMaXN0WyJQZXJmb3JtYW5jZUNvdW50ZXJDb25maWd1cmF0aW9uIl1dID0gTm9uZSwKICAgICAgICBldmVudF9sb2dzOiBPcHRpb25hbFtMaXN0WyJFdmVudExvZ0NvbmZpZ3VyYXRpb24iXV0gPSBOb25lLAogICAgICAgICoqa3dhcmdzCiAgICApOgogICAgICAgICIiIgogICAgICAgIDprZXl3b3JkIHByb3ZpZGVyczogRVRXIHByb3ZpZGVycyBjb25maWd1cmF0aW9uLgogICAgICAgIDpwYXJhbXR5cGUgcHJvdmlkZXJzOgogICAgICAgICBsaXN0W34kKHB5dGhvbi1iYXNlLW5hbWVzcGFjZSkudjIwMThfMDZfMDFfcHJldmlldy5tb2RlbHMuRXR3UHJvdmlkZXJDb25maWd1cmF0aW9uXQogICAgICAgIDprZXl3b3JkIHBlcmZfY291bnRlcnM6IFBlcmZvcm1hbmNlIGNvdW50ZXIgY29uZmlndXJhdGlvbi4KICAgICAgICA6cGFyYW10eXBlIHBlcmZfY291bnRlcnM6CiAgICAgICAgIGxpc3RbfiQocHl0aG9uLWJhc2UtbmFtZXNwYWNlKS52MjAxOF8wNl8wMV9wcmV2aWV3Lm1vZGVscy5QZXJmb3JtYW5jZUNvdW50ZXJDb25maWd1cmF0aW9uXQogICAgICAgIDprZXl3b3JkIGV2ZW50X2xvZ3M6IFdpbmRvd3MgZXZlbnQgbG9ncyBjb25maWd1cmF0aW9uLgogICAgICAgIDpwYXJhbXR5cGUgZXZlbnRfbG9nczoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICBsaXN0W34kKHB5dGhvbi1iYXNlLW5hbWVzcGFjZSkudjIwMThfMDZfMDFfcHJldmlldy5tb2RlbHMuRXZlbnRMb2dDb25maWd1cmF0aW9uXQo8fGZpbV9lbmR8Pg=="]
["5f2803fdfe0ee8224e111409534adee1f1199408-1","5f2803fdfe0ee8224e111409534adee1f1199408","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJhbmRvbQpmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsCgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHB5dG9yY2hfbGlnaHRuaW5nIGFzIHBsCmltcG9ydCB0b3JjaApmcm9tIG1vbmFpLnRyYW5zZm9ybXMgaW1wb3J0IENvbXBvc2UsIExvYWROaWZ0aSwgUmFuZG9taXphYmxlLCBhcHBseV90cmFuc2Zvcm0KZnJvbSBuaWJhYmVsLmZyZWVzdXJmZXIubWdoZm9ybWF0IGltcG9ydCBNR0hJbWFnZQpmcm9tIHNrbGVhcm4ubW9kZWxfc2VsZWN0aW9uIGltcG9ydCB0cmFpbl90ZXN0X3NwbGl0CmZyb20gdG9yY2gudXRpbHMuZGF0YSBpbXBvcnQgRGF0YUxvYWRlciwgRGF0YXNldAoKZnJvbSB1dGlscy5jb25zdCBpbXBvcnQgQUROSV9MSVNUCmZyb20gdXRpbHMudHJhbnNmb3JtcyBpbXBvcnQgKAogICAgZ2V0X2xvbmdpdHVkaW5hbF9sYWJlbF90cmFuc2Zvcm1zLAo8fGZpbV9ob2xlfD4KKQoKCmNsYXNzIExvbmdpdHVkaW5hbERhdGFzZXQoRGF0YXNldCwgUmFuZG9taXphYmxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBYX3BhdGg6IFBhdGgsIHlfcGF0aDogUGF0aCwgdHJhbnNmb3JtOiBDb21wb3NlLCBudW1fc2Nhbl90cmFpbmluZzogaW50KToKICAgICAgICBzZWxmLlhfcGF0aCA9IFhfcGF0aAogICAgICAgIHNlbGYueV9wYXRoID0geV9wYXRoCiAgICAgICAgc2VsZi5udW1fc2Nhbl90cmFpbmluZyA9IG51bV9zY2FuX3RyYWluaW5nCiAgICAgICAgc2VsZi5YX3RyYW5zZm9ybSA9IHRyYW5zZm9ybQogICAgICAgIHNlbGYueV90cmFuc2Zvcm0gPSBnZXRfbG9uZ2l0dWRpbmFsX2xhYmVsX3RyYW5zZm9ybXMoKQoKICAgIGRlZiBfX2xlbl9fKHNlbGYpOgogICAgICAgIHJldHVybiBpbnQobGVuKHNlbGYuWF9wYXRoKSkKCiAgICAjIFdoYXQgaXMgdGhpcyB1c2VkIGZvcj8KICAgIGRlZiByYW5kb21pemUoc2VsZikgLT4gTm9uZToKICAgICAgICBNQVhfU0VFRCA9IG5wLmlpbmZvKG5wLnVpbnQzMikubWF4ICsgMQogICAgICAgIHNlbGYuX3NlZWQgPSBzZWxmLlIucmFuZGludChNQVhfU0VFRCwgZHR5cGU9InVpbnQzMiIpCgogICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgogICAgICAgIHNlbGYucmFuZG9taXplKCkKICAgICAgICBsb2FkbmlmdGkgPSBMb2FkTmlmdGkoKQogICAgICAgIHlfaW1nLCBjb21wYXRpYmxlX21ldGEgPSBsb2FkbmlmdGkoc2VsZi55X3BhdGhbaV0pCiAgICAgICAgeV9pbWcgPSBhcHBseV90cmFuc2Zvcm0oc2VsZi55X3RyYW5zZm9ybSwgeV9pbWcpCgogICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5YX3RyYW5zZm9ybSwgUmFuZG9taXphYmxlKToKICAgICAgICAgICAgc2VsZi5YX3RyYW5zZm9ybS5zZXRfcmFuZG9tX3N0YXRlKHNlZWQ9c2VsZi5fc2VlZCkKICAgICAgICAgICAgc2VsZi55X3RyYW5zZm9ybS5zZXRfcmFuZG9tX3N0YXRlKHNlZWQ9c2VsZi5fc2VlZCkKCiAgICAgICAgWF9pbWcgPSBbXQogICAgICAgIGlmIHNlbGYubnVtX3NjYW5fdHJhaW5pbmcgPiAxOgogICAgICAgICAgICBmb3Igc2NhbiBpbiBzZWxmLlhfcGF0aFtpXToKICAgICAgICAgICAgICAgIGltZyA9IE1HSEltYWdlLmxvYWQoc2NhbikuZ2V0X2ZkYXRhKCkKICAgICAgICAgICAgICAgIGltZ1tpbWcgPCAzXSA9IDAuMAogICAgICAgICAgICAgICAgaW1nID0gYXBwbHlfdHJhbnNmb3JtKHNlbGYuWF90cmFuc2Zvcm0sIGltZykKICAgICAgICAgICAgICAgIFhfaW1nLmFwcGVuZChpbWcpCiAgICAgICAgICAgIFhfaW1nID0gdG9yY2guY2F0KFhfaW1nLCBkaW09MCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBpbWcgPSBNR0hJbWFnZS5sb2FkKHNlbGYuWF9wYXRoW2ldKS5nZXRfZmRhdGEoKQogICAgICAgICAgICBpbWdbaW1nIDwgM10gPSAwLjAKICAgICAgICAgICAgWF9pbWcgPSBhcHBseV90cmFuc2Zvcm0oc2VsZi5YX3RyYW5zZm9ybSwgaW1nKQoKICAgICAgICByZXR1cm4gWF9pbWcsIHlfaW1nCgoKY2xhc3MgRGF0YU1vZHVsZUxvbmdpdHVkaW5hbChwbC5MaWdodG5pbmdEYXRhTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBiYXRjaF9zaXplOiBpbnQsIG51bV9zY2FuX3RyYWluaW5nOiBpbnQpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYuYmF0Y2hfc2l6ZSA9IGJhdGNoX3NpemUKICAgICAgICBzZWxmLm51bV9zY2FuX3RyYWluaW5nID0gbnVtX3NjYW5fdHJhaW5pbmcKCiAgICAjIHBlcmZvcm0gb24gZXZlcnkgR1BVCiAgICBkZWYgc2V0dXAoc2VsZiwgc3RhZ2U6IE9wdGlvbmFsW3N0cl0gPSBOb25lKSAtPiBOb25lOgogICAgICAgIHlfbGlzdF9hbGwgPSBzZXQobGlzdChBRE5JX0xJU1RbMF0uZ2xvYigiKiovKi5uaWkuZ3oiKSkpCiAgICAgICAgeV9saXN0X21hc2sgPSBzZXQobGlzdChBRE5JX0xJU1RbMF0uZ2xvYigiKiovKl9tYXNrLm5paS5neiIpKSkKICAgICAgICB5ID0gc29ydGVkKGxpc3QoeV9saXN0X2FsbCAtIHlfbGlzdF9tYXNrKSkKCiAgICAgICAgaWYgc2VsZi5udW1fc2Nhbl90cmFpbmluZyA9PSAxOgogICAgICAgICAgICBYX00xMiA9IEFETklfTElTVFsxXQogICAgICAgICAgICBYID0gc29ydGVkKGxpc3QoWF9NMTIuZ2xvYigiKiovKi5uaWkubWd6IikpKQogICAgICAgIGVsaWYgc2VsZi5udW1fc2Nhbl90cmFpbmluZyA9PSAyOgogICAgICAgICAgICBYX00xMiwgWF9NMDYgPSBBRE5JX0xJU1RbMV0sIEFETklfTElTVFsyXQogICAgICAgICAgICBYX00xMl9maWxlcywgWF9NMDZfZmlsZXMgPSBzb3J0ZWQobGlzdChYX00xMi5nbG9iKCIqKi8qLm5paS5tZ3oiKSkpLCBzb3J0ZWQoCiAgICAgICAgICAgICAgICBsaXN0KFhfTTA2Lmdsb2IoIioqLyoubmlpLm1neiIpKQogICAgICAgICAgICApCiAgICAgICAgICAgIFggPSBbXQogICAgICAgICAgICBmb3IgbTEyLCBtMDYgaW4gemlwKFhfTTEyX2ZpbGVzLCBYX00wNl9maWxlcyk6CiAgICAgICAgICAgICAgICBYLmFwcGVuZChbbTEyLCBtMDZdKQogICAgICAgIGVsaWYgc2VsZi5udW1fc2Nhbl90cmFpbmluZyA9PSAzOgogICAgICAgICAgICBYX00xMiwgWF9NMDYsIFhfU0MgPSBBRE5JX0xJU1RbMV0sIEFETklfTElTVFsyXSwgQUROSV9MSVNUWzNdCiAgICAgICAgICAgIFhfTTEyX2ZpbGVzLCBYX00wNl9maWxlcywgWF9TQ19maWxlcyA9ICgKICAgICAgICAgICAgICAgIHNvcnRlZChsaXN0KFhfTTEyLmdsb2IoIioqLyoubmlpLm1neiIpKSksCiAgICAgICAgICAgICAgICBzb3J0ZWQobGlzdChYX00wNi5nbG9iKCIqKi8qLm5paS5tZ3oiKSkpLAogICAgICAgICAgICAgICAgc29ydGVkKGxpc3QoWF9TQy5nbG9iKCIqKi8qLm5paS5tZ3oiKSkpLAogICAgICAgICAgICApCiAgICAgICAgICAgIFggPSBbXQogICAgICAgICAgICBmb3IgbTEyLCBtMDYsIHNjIGluIHppcChYX00xMl9maWxlcywgWF9NMDZfZmlsZXMsIFhfU0NfZmlsZXMpOgogICAgICAgICAgICAgICAgWC5hcHBlbmQoW20xMiwgbTA2LCBzY10pCgogICAgICAgIHJhbmRvbV9zdGF0ZSA9IHJhbmRvbS5yYW5kaW50KDAsIDEwMCkKICAgICAgICBYX3RyYWluLCBYX3ZhbCwgeV90cmFpbiwgeV92YWwgPSB0cmFpbl90ZXN0X3NwbGl0KAogICAgICAgICAgICBYLCB5LCB0ZXN0X3NpemU9MC4yLCByYW5kb21fc3RhdGU9cmFuZG9tX3N0YXRlCiAgICAgICAgKQoKICAgICAgICBwcmludChmInZhbGlkYXRpb24gaW1hZ2UgcGF0aDoge1hfdmFsfSIpCgogICAgICAgIHRyYWluX3RyYW5zZm9ybXMgPSBnZXRfbG9uZ2l0dWRpbmFsX3RyYWluX2ltZ190cmFuc2Zvcm1zKCkKICAgICAgICB2YWxfdHJhbnNmb3JtcyA9IGdldF9sb25naXR1ZGluYWxfdmFsX2ltZ190cmFuc2Zvcm1zKCkKICAgICAgICBzZWxmLnRyYWluX2RhdGFzZXQgPSBMb25naXR1ZGluYWxEYXRhc2V0KAogICAgICAgICAgICBYX3BhdGg9WF90cmFpbiwKICAgICAgICAgICAgeV9wYXRoPXlfdHJhaW4sCiAgICAgICAgICAgIHRyYW5zZm9ybT10cmFpbl90cmFuc2Zvcm1zLAogICAgICAgICAgICBudW1fc2Nhbl90cmFpbmluZz1zZWxmLm51bV9zY2FuX3RyYWluaW5nLAogICAgICAgICkKICAgICAgICBzZWxmLnZhbF9kYXRhc2V0ID0gTG9uZ2l0dWRpbmFsRGF0YXNldCgKICAgICAgICAgICAgWF9wYXRoPVhfdmFsLAogICAgICAgICAgICB5X3BhdGg9eV92YWwsCiAgICAgICAgICAgIHRyYW5zZm9ybT12YWxfdHJhbnNmb3JtcywKICAgICAgICAgICAgbnVtX3NjYW5fdHJhaW5pbmc9c2VsZi5udW1fc2Nhbl90cmFpbmluZywKICAgICAgICApCgogICAgZGVmIHRyYWluX2RhdGFsb2FkZXIoc2VsZik6CiAgICAgICAgcHJpbnQoZiJnZXQge2xlbihzZWxmLnRyYWluX2RhdGFzZXQpfSB0cmFpbmluZyAzRCBpbWFnZSEiKQogICAgICAgIHJldHVybiBEYXRhTG9hZGVyKAogICAgICAgICAgICBzZWxmLnRyYWluX2RhdGFzZXQsCiAgICAgICAgICAgIGJhdGNoX3NpemU9c2VsZi5iYXRjaF9zaXplLAogICAgICAgICAgICBudW1fd29ya2Vycz04LAogICAgICAgICkKCiAgICBkZWYgdmFsX2RhdGFsb2FkZXIoc2VsZik6CiAgICAgICAgcHJpbnQoZiJnZXQge2xlbihzZWxmLnZhbF9kYXRhc2V0KX0gdmFsaWRhdGlvbiAzRCBpbWFnZSEiKQogICAgICAgIHJldHVybiBEYXRhTG9hZGVyKHNlbGYudmFsX2RhdGFzZXQsIGJhdGNoX3NpemU9MSwgbnVtX3dvcmtlcnM9OCkKCiAgICBkZWYgdGVzdF9kYXRhbG9hZGVyKHNlbGYpOgogICAgICAgIHByaW50KGYiZ2V0IHtsZW4oc2VsZi52YWxfZGF0YXNldCl9IHZhbGlkYXRpb24gM0QgaW1hZ2UhIikKICAgICAgICByZXR1cm4gRGF0YUxvYWRlcihzZWxmLnZhbF9kYXRhc2V0LCBiYXRjaF9zaXplPTEsIG51bV93b3JrZXJzPTgpCjx8ZmltX3N1ZmZpeHw+CiAgICBnZXRfbG9uZ2l0dWRpbmFsX3RyYWluX2ltZ190cmFuc2Zvcm1zLAogICAgZ2V0X2xvbmdpdHVkaW5hbF92YWxfaW1nX3RyYW5zZm9ybXMsCjx8ZmltX2VuZHw+"]
["5f2803fdfe0ee8224e111409534adee1f1199408-3","5f2803fdfe0ee8224e111409534adee1f1199408","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJhbmRvbQpmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsCgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHB5dG9yY2hfbGlnaHRuaW5nIGFzIHBsCmltcG9ydCB0b3JjaApmcm9tIG1vbmFpLnRyYW5zZm9ybXMgaW1wb3J0IENvbXBvc2UsIExvYWROaWZ0aSwgUmFuZG9taXphYmxlLCBhcHBseV90cmFuc2Zvcm0KZnJvbSBuaWJhYmVsLmZyZWVzdXJmZXIubWdoZm9ybWF0IGltcG9ydCBNR0hJbWFnZQpmcm9tIHNrbGVhcm4ubW9kZWxfc2VsZWN0aW9uIGltcG9ydCB0cmFpbl90ZXN0X3NwbGl0CmZyb20gdG9yY2gudXRpbHMuZGF0YSBpbXBvcnQgRGF0YUxvYWRlciwgRGF0YXNldAoKZnJvbSB1dGlscy5jb25zdCBpbXBvcnQgQUROSV9MSVNUCmZyb20gdXRpbHMudHJhbnNmb3JtcyBpbXBvcnQgKAogICAgZ2V0X2xvbmdpdHVkaW5hbF9sYWJlbF90cmFuc2Zvcm1zLAogICAgZ2V0X2xvbmdpdHVkaW5hbF90cmFpbl9pbWdfdHJhbnNmb3JtcywKICAgIGdldF9sb25naXR1ZGluYWxfdmFsX2ltZ190cmFuc2Zvcm1zLAopCgoKY2xhc3MgTG9uZ2l0dWRpbmFsRGF0YXNldChEYXRhc2V0LCBSYW5kb21pemFibGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIFhfcGF0aDogUGF0aCwgeV9wYXRoOiBQYXRoLCB0cmFuc2Zvcm06IENvbXBvc2UsIG51bV9zY2FuX3RyYWluaW5nOiBpbnQpOgogICAgICAgIHNlbGYuWF9wYXRoID0gWF9wYXRoCiAgICAgICAgc2VsZi55X3BhdGggPSB5X3BhdGgKICAgICAgICBzZWxmLm51bV9zY2FuX3RyYWluaW5nID0gbnVtX3NjYW5fdHJhaW5pbmcKICAgICAgICBzZWxmLlhfdHJhbnNmb3JtID0gdHJhbnNmb3JtCiAgICAgICAgc2VsZi55X3RyYW5zZm9ybSA9IGdldF9sb25naXR1ZGluYWxfbGFiZWxfdHJhbnNmb3JtcygpCgogICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgcmV0dXJuIGludChsZW4oc2VsZi5YX3BhdGgpKQoKICAgICMgV2hhdCBpcyB0aGlzIHVzZWQgZm9yPwogICAgZGVmIHJhbmRvbWl6ZShzZWxmKSAtPiBOb25lOgogICAgICAgIE1BWF9TRUVEID0gbnAuaWluZm8obnAudWludDMyKS5tYXggKyAxCiAgICAgICAgc2VsZi5fc2VlZCA9IHNlbGYuUi5yYW5kaW50KE1BWF9TRUVELCBkdHlwZT0idWludDMyIikKCiAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CiAgICAgICAgc2VsZi5yYW5kb21pemUoKQogICAgICAgIGxvYWRuaWZ0aSA9IExvYWROaWZ0aSgpCiAgICAgICAgeV9pbWcsIGNvbXBhdGlibGVfbWV0YSA9IGxvYWRuaWZ0aShzZWxmLnlfcGF0aFtpXSkKICAgICAgICB5X2ltZyA9IGFwcGx5X3RyYW5zZm9ybShzZWxmLnlfdHJhbnNmb3JtLCB5X2ltZykKCiAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLlhfdHJhbnNmb3JtLCBSYW5kb21pemFibGUpOgogICAgICAgICAgICBzZWxmLlhfdHJhbnNmb3JtLnNldF9yYW5kb21fc3RhdGUoc2VlZD1zZWxmLl9zZWVkKQogICAgICAgICAgICBzZWxmLnlfdHJhbnNmb3JtLnNldF9yYW5kb21fc3RhdGUoc2VlZD1zZWxmLl9zZWVkKQoKICAgICAgICBYX2ltZyA9IFtdCiAgICAgICAgaWYgc2VsZi5udW1fc2Nhbl90cmFpbmluZyA+IDE6CiAgICAgICAgICAgIGZvciBzY2FuIGluIHNlbGYuWF9wYXRoW2ldOgogICAgICAgICAgICAgICAgaW1nID0gTUdISW1hZ2UubG9hZChzY2FuKS5nZXRfZmRhdGEoKQogICAgICAgICAgICAgICAgaW1nW2ltZyA8IDNdID0gMC4wCiAgICAgICAgICAgICAgICBpbWcgPSBhcHBseV90cmFuc2Zvcm0oc2VsZi5YX3RyYW5zZm9ybSwgaW1nKQogICAgICAgICAgICAgICAgWF9pbWcuYXBwZW5kKGltZykKICAgICAgICAgICAgWF9pbWcgPSB0b3JjaC5jYXQoWF9pbWcsIGRpbT0wKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGltZyA9IE1HSEltYWdlLmxvYWQoc2VsZi5YX3BhdGhbaV0pLmdldF9mZGF0YSgpCiAgICAgICAgICAgIGltZ1tpbWcgPCAzXSA9IDAuMAogICAgICAgICAgICBYX2ltZyA9IGFwcGx5X3RyYW5zZm9ybShzZWxmLlhfdHJhbnNmb3JtLCBpbWcpCgogICAgICAgIHJldHVybiBYX2ltZywgeV9pbWcKCgpjbGFzcyBEYXRhTW9kdWxlTG9uZ2l0dWRpbmFsKHBsLkxpZ2h0bmluZ0RhdGFNb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGJhdGNoX3NpemU6IGludCwgbnVtX3NjYW5fdHJhaW5pbmc6IGludCk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5iYXRjaF9zaXplID0gYmF0Y2hfc2l6ZQogICAgICAgIHNlbGYubnVtX3NjYW5fdHJhaW5pbmcgPSBudW1fc2Nhbl90cmFpbmluZwoKICAgICMgcGVyZm9ybSBvbiBldmVyeSBHUFUKICAgIGRlZiBzZXR1cChzZWxmLCBzdGFnZTogT3B0aW9uYWxbc3RyXSA9IE5vbmUpIC0+IE5vbmU6CiAgICAgICAgeV9saXN0X2FsbCA9IHNldChsaXN0KEFETklfTElTVFswXS5nbG9iKCIqKi8qLm5paS5neiIpKSkKICAgICAgICB5X2xpc3RfbWFzayA9IHNldChsaXN0KEFETklfTElTVFswXS5nbG9iKCIqKi8qX21hc2submlpLmd6IikpKQogICAgICAgIHkgPSBzb3J0ZWQobGlzdCh5X2xpc3RfYWxsIC0geV9saXN0X21hc2spKQoKICAgICAgICBpZiBzZWxmLm51bV9zY2FuX3RyYWluaW5nID09IDE6CiAgICAgICAgICAgIFhfTTEyID0gQUROSV9MSVNUWzFdCiAgICAgICAgICAgIFggPSBzb3J0ZWQobGlzdChYX00xMi5nbG9iKCIqKi8qLm5paS5tZ3oiKSkpCiAgICAgICAgZWxpZiBzZWxmLm51bV9zY2FuX3RyYWluaW5nID09IDI6CiAgICAgICAgICAgIFhfTTEyLCBYX00wNiA9IEFETklfTElTVFsxXSwgQUROSV9MSVNUWzJdCiAgICAgICAgICAgIFhfTTEyX2ZpbGVzLCBYX00wNl9maWxlcyA9IHNvcnRlZChsaXN0KFhfTTEyLmdsb2IoIioqLyoubmlpLm1neiIpKSksIHNvcnRlZCgKICAgICAgICAgICAgICAgIGxpc3QoWF9NMDYuZ2xvYigiKiovKi5uaWkubWd6IikpCiAgICAgICAgICAgICkKICAgICAgICAgICAgWCA9IFtdCiAgICAgICAgICAgIGZvciBtMTIsIG0wNiBpbiB6aXAoWF9NMTJfZmlsZXMsIFhfTTA2X2ZpbGVzKToKICAgICAgICAgICAgICAgIFguYXBwZW5kKFttMTIsIG0wNl0pCiAgICAgICAgZWxpZiBzZWxmLm51bV9zY2FuX3RyYWluaW5nID09IDM6CiAgICAgICAgICAgIFhfTTEyLCBYX00wNiwgWF9TQyA9IEFETklfTElTVFsxXSwgQUROSV9MSVNUWzJdLCBBRE5JX0xJU1RbM10KICAgICAgICAgICAgWF9NMTJfZmlsZXMsIFhfTTA2X2ZpbGVzLCBYX1NDX2ZpbGVzID0gKAogICAgICAgICAgICAgICAgc29ydGVkKGxpc3QoWF9NMTIuZ2xvYigiKiovKi5uaWkubWd6IikpKSwKICAgICAgICAgICAgICAgIHNvcnRlZChsaXN0KFhfTTA2Lmdsb2IoIioqLyoubmlpLm1neiIpKSksCiAgICAgICAgICAgICAgICBzb3J0ZWQobGlzdChYX1NDLmdsb2IoIioqLyoubmlpLm1neiIpKSksCiAgICAgICAgICAgICkKICAgICAgICAgICAgWCA9IFtdCiAgICAgICAgICAgIGZvciBtMTIsIG0wNiwgc2MgaW4gemlwKFhfTTEyX2ZpbGVzLCBYX00wNl9maWxlcywgWF9TQ19maWxlcyk6CiAgICAgICAgICAgICAgICBYLmFwcGVuZChbbTEyLCBtMDYsIHNjXSkKCiAgICAgICAgcmFuZG9tX3N0YXRlID0gcmFuZG9tLnJhbmRpbnQoMCwgMTAwKQogICAgICAgIFhfdHJhaW4sIFhfdmFsLCB5X3RyYWluLCB5X3ZhbCA9IHRyYWluX3Rlc3Rfc3BsaXQoCiAgICAgICAgICAgIFgsIHksIHRlc3Rfc2l6ZT0wLjIsIHJhbmRvbV9zdGF0ZT1yYW5kb21fc3RhdGUKICAgICAgICApCgogICAgICAgIHByaW50KGYidmFsaWRhdGlvbiBpbWFnZSBwYXRoOiB7WF92YWx9IikKCiAgICAgICAgdHJhaW5fdHJhbnNmb3JtcyA9IGdldF9sb25naXR1ZGluYWxfdHJhaW5faW1nX3RyYW5zZm9ybXMoKQogICAgICAgIHZhbF90cmFuc2Zvcm1zID0gZ2V0X2xvbmdpdHVkaW5hbF92YWxfaW1nX3RyYW5zZm9ybXMoKQogICAgICAgIHNlbGYudHJhaW5fZGF0YXNldCA9IExvbmdpdHVkaW5hbERhdGFzZXQoCiAgICAgICAgICAgIFhfcGF0aD1YX3RyYWluLAogICAgICAgICAgICB5X3BhdGg9eV90cmFpbiwKICAgICAgICAgICAgdHJhbnNmb3JtPXRyYWluX3RyYW5zZm9ybXMsCiAgICAgICAgICAgIG51bV9zY2FuX3RyYWluaW5nPXNlbGYubnVtX3NjYW5fdHJhaW5pbmcsCiAgICAgICAgKQogICAgICAgIHNlbGYudmFsX2RhdGFzZXQgPSBMb25naXR1ZGluYWxEYXRhc2V0KAogICAgICAgICAgICBYX3BhdGg9WF92YWwsCiAgICAgICAgICAgIHlfcGF0aD15X3ZhbCwKICAgICAgICAgICAgdHJhbnNmb3JtPXZhbF90cmFuc2Zvcm1zLAogICAgICAgICAgICBudW1fc2Nhbl90cmFpbmluZz1zZWxmLm51bV9zY2FuX3RyYWluaW5nLAogICAgICAgICkKCiAgICBkZWYgdHJhaW5fZGF0YWxvYWRlcihzZWxmKToKICAgICAgICBwcmludChmImdldCB7bGVuKHNlbGYudHJhaW5fZGF0YXNldCl9IHRyYWluaW5nIDNEIGltYWdlISIpCiAgICAgICAgcmV0dXJuIERhdGFMb2FkZXIoCjx8ZmltX2hvbGV8PgogICAgICAgICkKCiAgICBkZWYgdmFsX2RhdGFsb2FkZXIoc2VsZik6CiAgICAgICAgcHJpbnQoZiJnZXQge2xlbihzZWxmLnZhbF9kYXRhc2V0KX0gdmFsaWRhdGlvbiAzRCBpbWFnZSEiKQogICAgICAgIHJldHVybiBEYXRhTG9hZGVyKHNlbGYudmFsX2RhdGFzZXQsIGJhdGNoX3NpemU9MSwgbnVtX3dvcmtlcnM9OCkKCiAgICBkZWYgdGVzdF9kYXRhbG9hZGVyKHNlbGYpOgogICAgICAgIHByaW50KGYiZ2V0IHtsZW4oc2VsZi52YWxfZGF0YXNldCl9IHZhbGlkYXRpb24gM0QgaW1hZ2UhIikKICAgICAgICByZXR1cm4gRGF0YUxvYWRlcihzZWxmLnZhbF9kYXRhc2V0LCBiYXRjaF9zaXplPTEsIG51bV93b3JrZXJzPTgpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHNlbGYudHJhaW5fZGF0YXNldCwKICAgICAgICAgICAgYmF0Y2hfc2l6ZT1zZWxmLmJhdGNoX3NpemUsCiAgICAgICAgICAgIG51bV93b3JrZXJzPTgsCjx8ZmltX2VuZHw+"]
["32670df1ef553d58b2c4e76d5c6a9870e7df3178-1","32670df1ef553d58b2c4e76d5c6a9870e7df3178","PHxmaW1fcHJlZml4fD4KY2xhc3MgU29sdXRpb246CiAgICBkZWYgaXNTdWJzZXF1ZW5jZShzZWxmLCBzOiBzdHIsIHQ6IHN0cikgLT4gYm9vbDoKICAgICAgICBkcCA9IFtbRmFsc2VdICogKGxlbihzKSArIDEpIGZvciBfIGluIHJhbmdlKGxlbih0KSArIDEpXQogICAgICAgIGRwWzBdWzBdID0gVHJ1ZQogICAgICAgIGZvciBpIGluIHJhbmdlKGxlbih0KSArIDEpOgogICAgICAgICAgICBkcFtpXVswXSA9IFRydWUKICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4odCkgKyAxKToKICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoMSwgbGVuKHMpICsgMSk6CiAgICAgICAgICAgICAgICBpZiBqID4gaToKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQo8fGZpbV9ob2xlfD4KICAgICAgICByZXR1cm4gZHBbLTFdWy0xXQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgaWYgc1tqLTFdID09IHRbaS0xXToKICAgICAgICAgICAgICAgICAgICBkcFtpXVtqXSA9IGRwW2ktMV1bai0xXSBvciBkcFtpLTFdW2pdCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIGRwW2ldW2pdID0gZHBbaS0xXVtqXQo8fGZpbV9lbmR8Pg=="]
["085f61447e741c1ab13b7c044f967b97f1d023dd-1","085f61447e741c1ab13b7c044f967b97f1d023dd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KCmltcG9ydCBmYWN0b3J5CmZyb20gZGphbmdvLmNvcmUgaW1wb3J0IG1hbmFnZW1lbnQKZnJvbSBkamFuZ28udGVzdCBpbXBvcnQgVGVzdENhc2UKZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcmV2ZXJzZQpmcm9tIGZha2VyIGltcG9ydCBGYWN0b3J5CmZyb20gcmVzdF9mcmFtZXdvcmsgaW1wb3J0IHN0YXR1cwpmcm9tIHJlc3RfZnJhbWV3b3JrLnRlc3QgaW1wb3J0IEFQSUNsaWVudAoKZnJvbSAuLm1vZGVscyBpbXBvcnQgQ29tbWVudApmcm9tIC5mYWN0b3JpZXMgaW1wb3J0IENvbW1lbnRGYWN0b3J5LCBUb2RvRmFjdG9yeQpmcm9tIC51dGlscyBpbXBvcnQgZ2VuZXJhdGVfYXV0aGVudGljYXRlZF9hcGlfY2xpZW50LCBnZW5lcmF0ZV91c2VyCgpmYWtlciA9IEZhY3RvcnkuY3JlYXRlKCkKCgpjbGFzcyBDb21tZW50X1Rlc3QoVGVzdENhc2UpOgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgIHNlbGYuYXBpX2NsaWVudCA9IEFQSUNsaWVudCgpCiAgICAgICAgQ29tbWVudEZhY3RvcnkuY3JlYXRlX2JhdGNoKHNpemU9MykKICAgICAgICBzZWxmLnRvZG8gPSBUb2RvRmFjdG9yeS5jcmVhdGUoKQogICAgICAgIG1hbmFnZW1lbnQuY2FsbF9jb21tYW5kKCJpbml0aWFsaXplIikKICAgICAgICBzZWxmLmF1dGhlbnRpY2F0ZWRfYXBpX2NsaWVudCA9IGdlbmVyYXRlX2F1dGhlbnRpY2F0ZWRfYXBpX2NsaWVudCgKICAgICAgICAgICAgZ2VuZXJhdGVfdXNlcigKICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zPVtdCiAgICAgICAgICAgICkKICAgICAgICApCgogICAgZGVmIHRlc3RfY3JlYXRlX2NvbW1lbnQoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgRW5zdXJlIHdlIGNhbiBjcmVhdGUgYSBuZXcgY29tbWVudCBvYmplY3QuCiAgICAgICAgIiIiCiAgICAgICAgY2xpZW50ID0gc2VsZi5hdXRoZW50aWNhdGVkX2FwaV9jbGllbnQKICAgICAgICBjb21tZW50X2NvdW50ID0gQ29tbWVudC5vYmplY3RzLmNvdW50KCkKICAgICAgICBjb21tZW50X2RpY3QgPSBmYWN0b3J5LmJ1aWxkKGRpY3QsIEZBQ1RPUllfQ0xBU1M9Q29tbWVudEZhY3RvcnksIHRvZG89c2VsZi50b2RvLnBrKQogICAgICAgIHJlc3BvbnNlID0gY2xpZW50LnBvc3QocmV2ZXJzZSgnY29tbWVudC1saXN0JyksIGNvbW1lbnRfZGljdCkKICAgICAgICBjcmVhdGVkX2NvbW1lbnRfcGsgPSByZXNwb25zZS5kYXRhWydpZCddCiAgICAgICAgYXNzZXJ0IHJlc3BvbnNlLnN0YXR1c19jb2RlID09IHN0YXR1cy5IVFRQXzIwMV9DUkVBVEVECiAgICAgICAgYXNzZXJ0IENvbW1lbnQub2JqZWN0cy5jb3VudCgpID09IGNvbW1lbnRfY291bnQgKyAxCiAgICAgICAgY29tbWVudCA9IENvbW1lbnQub2JqZWN0cy5nZXQocGs9Y3JlYXRlZF9jb21tZW50X3BrKQoKICAgICAgICBhc3NlcnQgY29tbWVudF9kaWN0WydzdWJtaXR0ZWQnXSA9PSBzdHIoY29tbWVudC5zdWJtaXR0ZWQpCgogICAgZGVmIHRlc3RfZmV0Y2hfYWxsKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIENyZWF0ZSAzIG9iamVjdHMsIGRvIGEgZmV0Y2ggYWxsIGNhbGwgYW5kIGNoZWNrIGlmIHlvdSBnZXQgYmFjayAzIG9iamVjdHMKICAgICAgICAiIiIKICAgICAgICBjbGllbnQgPSBzZWxmLmF1dGhlbnRpY2F0ZWRfYXBpX2NsaWVudAogICAgICAgIHJlc3BvbnNlID0gY2xpZW50LmdldChyZXZlcnNlKCdjb21tZW50LWxpc3QnKSkKPHxmaW1faG9sZXw+CiAgICBkZWYgdGVzdF9kZWxldGUoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgQ3JlYXRlIDMgb2JqZWN0cywgZG8gYSBmZXRjaCBhbGwgY2FsbCBhbmQgY2hlY2sgaWYgeW91IGdldCBiYWNrIDMgb2JqZWN0cy4KICAgICAgICBUaGVuIGluIGEgbG9vcCwgZGVsZXRlIG9uZSBhdCBhIHRpbWUgYW5kIGNoZWNrIHRoYXQgeW91IGdldCB0aGUgY29ycmVjdCBudW1iZXIgYmFjayBvbiBhIGZldGNoIGFsbC4KICAgICAgICAiIiIKICAgICAgICBjbGllbnQgPSBzZWxmLmF1dGhlbnRpY2F0ZWRfYXBpX2NsaWVudAogICAgICAgIGNvbW1lbnRfcXMgPSBDb21tZW50Lm9iamVjdHMuYWxsKCkKICAgICAgICBjb21tZW50X2NvdW50ID0gQ29tbWVudC5vYmplY3RzLmNvdW50KCkKCiAgICAgICAgZm9yIGksIGNvbW1lbnQgaW4gZW51bWVyYXRlKGNvbW1lbnRfcXMsIHN0YXJ0PTEpOgogICAgICAgICAgICByZXNwb25zZSA9IGNsaWVudC5kZWxldGUocmV2ZXJzZSgnY29tbWVudC1kZXRhaWwnLCBrd2FyZ3M9eydwayc6IGNvbW1lbnQucGt9KSkKICAgICAgICAgICAgYXNzZXJ0IHJlc3BvbnNlLnN0YXR1c19jb2RlID09IHN0YXR1cy5IVFRQXzIwNF9OT19DT05URU5UCiAgICAgICAgICAgIGFzc2VydCBjb21tZW50X2NvdW50IC0gaSA9PSBDb21tZW50Lm9iamVjdHMuY291bnQoKQoKICAgIGRlZiB0ZXN0X3VwZGF0ZV9jb3JyZWN0KHNlbGYpOgogICAgICAgICIiIgogICAgICAgIEFkZCBhbiBvYmplY3QuIENhbGwgYW4gdXBkYXRlIHdpdGggMiAob3IgbW9yZSkgZmllbGRzIHVwZGF0ZWQuCiAgICAgICAgRmV0Y2ggdGhlIG9iamVjdCBiYWNrIGFuZCBjb25maXJtIHRoYXQgdGhlIHVwZGF0ZSB3YXMgc3VjY2Vzc2Z1bC4KICAgICAgICAiIiIKICAgICAgICBjbGllbnQgPSBzZWxmLmF1dGhlbnRpY2F0ZWRfYXBpX2NsaWVudAogICAgICAgIGNvbW1lbnRfcGsgPSBDb21tZW50Lm9iamVjdHMuZmlyc3QoKS5wawogICAgICAgIGNvbW1lbnRfZGV0YWlsX3VybCA9IHJldmVyc2UoJ2NvbW1lbnQtZGV0YWlsJywga3dhcmdzPXsncGsnOiBjb21tZW50X3BrfSkKICAgICAgICBjb21tZW50X2RpY3QgPSBmYWN0b3J5LmJ1aWxkKGRpY3QsIEZBQ1RPUllfQ0xBU1M9Q29tbWVudEZhY3RvcnksIHRvZG89c2VsZi50b2RvLnBrKQogICAgICAgIHJlc3BvbnNlID0gY2xpZW50LnBhdGNoKGNvbW1lbnRfZGV0YWlsX3VybCwgZGF0YT1jb21tZW50X2RpY3QpCiAgICAgICAgYXNzZXJ0IHJlc3BvbnNlLnN0YXR1c19jb2RlID09IHN0YXR1cy5IVFRQXzIwMF9PSwoKICAgICAgICBhc3NlcnQgY29tbWVudF9kaWN0WydtZXNzYWdlJ10gPT0gcmVzcG9uc2UuZGF0YVsnbWVzc2FnZSddCiAgICAgICAgYXNzZXJ0IGNvbW1lbnRfZGljdFsnc3VibWl0dGVkJ10gPT0gcmVzcG9uc2UuZGF0YVsnc3VibWl0dGVkJ10KICAgICAgICBhc3NlcnQgY29tbWVudF9kaWN0WydzdGF0dXMnXSA9PSByZXNwb25zZS5kYXRhWydzdGF0dXMnXQoKICAgIGRlZiB0ZXN0X3VwZGF0ZV9zdWJtaXR0ZWRfd2l0aF9pbmNvcnJlY3RfdmFsdWVfZGF0YV90eXBlKHNlbGYpOgogICAgICAgIGNsaWVudCA9IHNlbGYuYXV0aGVudGljYXRlZF9hcGlfY2xpZW50CiAgICAgICAgY29tbWVudCA9IENvbW1lbnQub2JqZWN0cy5maXJzdCgpCiAgICAgICAgY29tbWVudF9kZXRhaWxfdXJsID0gcmV2ZXJzZSgnY29tbWVudC1kZXRhaWwnLCBrd2FyZ3M9eydwayc6IGNvbW1lbnQucGt9KQogICAgICAgIGNvbW1lbnRfc3VibWl0dGVkID0gY29tbWVudC5zdWJtaXR0ZWQKICAgICAgICBkYXRhID0gewogICAgICAgICAgICAnc3VibWl0dGVkJzogZmFrZXIucHlzdHIoKSwKICAgICAgICB9CiAgICAgICAgcmVzcG9uc2UgPSBjbGllbnQucGF0Y2goY29tbWVudF9kZXRhaWxfdXJsLCBkYXRhPWRhdGEpCiAgICAgICAgYXNzZXJ0IHJlc3BvbnNlLnN0YXR1c19jb2RlID09IHN0YXR1cy5IVFRQXzQwMF9CQURfUkVRVUVTVAogICAgICAgIGFzc2VydCBjb21tZW50X3N1Ym1pdHRlZCA9PSBDb21tZW50Lm9iamVjdHMuZmlyc3QoKS5zdWJtaXR0ZWQKCiAgICBkZWYgdGVzdF91cGRhdGVfbWVzc2FnZV93aXRoX2luY29ycmVjdF92YWx1ZV9vdXRzaWRlX2NvbnN0cmFpbnRzKHNlbGYpOgogICAgICAgIGNsaWVudCA9IHNlbGYuYXV0aGVudGljYXRlZF9hcGlfY2xpZW50CiAgICAgICAgY29tbWVudCA9IENvbW1lbnQub2JqZWN0cy5maXJzdCgpCiAgICAgICAgY29tbWVudF9kZXRhaWxfdXJsID0gcmV2ZXJzZSgnY29tbWVudC1kZXRhaWwnLCBrd2FyZ3M9eydwayc6IGNvbW1lbnQucGt9KQogICAgICAgIGNvbW1lbnRfbWVzc2FnZSA9IGNvbW1lbnQubWVzc2FnZQogICAgICAgIGRhdGEgPSB7CiAgICAgICAgICAgICdtZXNzYWdlJzogZmFrZXIucHlzdHIobWluX2NoYXJzPTUxMywgbWF4X2NoYXJzPTUxMyksCiAgICAgICAgfQogICAgICAgIHJlc3BvbnNlID0gY2xpZW50LnBhdGNoKGNvbW1lbnRfZGV0YWlsX3VybCwgZGF0YT1kYXRhKQogICAgICAgIGFzc2VydCByZXNwb25zZS5zdGF0dXNfY29kZSA9PSBzdGF0dXMuSFRUUF80MDBfQkFEX1JFUVVFU1QKICAgICAgICBhc3NlcnQgY29tbWVudF9tZXNzYWdlID09IENvbW1lbnQub2JqZWN0cy5maXJzdCgpLm1lc3NhZ2UKPHxmaW1fc3VmZml4fD4KICAgICAgICBhc3NlcnQgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgPT0gc3RhdHVzLkhUVFBfMjAwX09LCiAgICAgICAgYXNzZXJ0IENvbW1lbnQub2JqZWN0cy5jb3VudCgpID09IGxlbihyZXNwb25zZS5kYXRhKQoKPHxmaW1fZW5kfD4="]
["de86c89992f10e66c1d6761f34c1378249c74428-2","de86c89992f10e66c1d6761f34c1378249c74428","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKCmltcG9ydCBwYW5kYXMgYXMgcGQKCmZyb20gLnByZXByb2Nlc3NpbmdVdGlscyBpbXBvcnQgZ2V0X2Rvd25sb2Fkc19jc3ZfcGF0aAoKZnJvbSAuaW1wb3J0X3V0aWxzIGltcG9ydCAoCiAgICBhZGRfb3JfdXBkYXRlX3BlcnNvbnNfZnJvbV9kYXRhZnJhbWUsCiAgICB1cGRhdGVfcGVyc29uX3N1YmplY3RfYXJlYXMsCiAgICB1cGRhdGVfcGVyc29uX2tleXdvcmRzLAogICAgdXBkYXRlX3BlcnNvbl9yb2xlcywKICAgIHVwZGF0ZV9wZXJzb25fc3RhdHVzX3RvLAogICAgY29tbWFfc2VwYXJhdGVkX2NvbHVtbl90b19tYXAsCiAgICBub3JtYWxpc2Vfc3ViamVjdF9hcmVhX21hcCwKICAgIGRlZHVwX21hcF92YWx1ZXMsCiAgICB4bWxfZGVjb2RlX3BlcnNvbl9uYW1lcywKICAgIGZpbmRfbGFzdF9jc3ZfZmlsZV9pbl9kaXJlY3RvcnksCiAgICBoYWNrX2ZpeF9kb3VibGVfcXVvdGVfZW5jb2RpbmdfaXNzdWVfaW5fc3RyZWFtCikKCmZyb20gLi5zaGFyZWQuZGF0YWJhc2UgaW1wb3J0IGNvbm5lY3RfbWFuYWdlZF9jb25maWd1cmVkX2RhdGFiYXNlCmZyb20gLi5zaGFyZWQuZGF0YWJhc2Vfc2NoZW1hIGltcG9ydCBQZXJzb24KCmZyb20gLi5zaGFyZWQuYXBwX2NvbmZpZyBpbXBvcnQgZ2V0X2FwcF9jb25maWcKCkxPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCmNsYXNzIENzdkNvbHVtbnM6CiAgICBQRVJTT05fSUQgPSAnUGVyc29uIElEJwogICAgRklSU1RfTkFNRSA9ICdGaXJzdCBOYW1lJwogICAgTEFTVF9OQU1FID0gJ0xhc3QgTmFtZScKICAgIEVNQUlMID0gJ0VtYWlsJwogICAgSU5TVElUVVRJT04gPSAnSW5zdGl0dXRpb24nCiAgICBST0xFID0gJ1JvbGUnCiAgICBTVUJKRUNUX0FSRUFTID0gJ1N1YmplY3QgQXJlYXMnCiAgICBLRVlXT1JEUyA9ICdBcmVhcyBvZiBFeHBlcnRpc2UnCgoKQUxMX0NTVl9DT0xVTU5TID0gWwogICAgQ3N2Q29sdW1ucy5QRVJTT05fSUQsIENzdkNvbHVtbnMuRklSU1RfTkFNRSwgQ3N2Q29sdW1ucy5MQVNUX05BTUUsIENzdkNvbHVtbnMuRU1BSUwsCiAgICBDc3ZDb2x1bW5zLklOU1RJVFVUSU9OLCBDc3ZDb2x1bW5zLlJPTEUsIENzdkNvbHVtbnMuU1VCSkVDVF9BUkVBUywgQ3N2Q29sdW1ucy5LRVlXT1JEUwpdCgpQRVJTT05fQ1NWX0NPTFVNTl9NQVBQSU5HID0gewogICAgQ3N2Q29sdW1ucy5QRVJTT05fSUQ6ICdwZXJzb25faWQnLAogICAgQ3N2Q29sdW1ucy5GSVJTVF9OQU1FOiAnZmlyc3RfbmFtZScsCiAgICBDc3ZDb2x1bW5zLkxBU1RfTkFNRTogJ2xhc3RfbmFtZScsCiAgICBDc3ZDb2x1bW5zLkVNQUlMOiAnZW1haWwnLAogICAgQ3N2Q29sdW1ucy5JTlNUSVRVVElPTjogJ2luc3RpdHV0aW9uJwp9CgoKZGVmIHJlYWRfZWRpdG9yc19jc3Yoc3RyZWFtKToKICAgIHN0cmVhbSA9IGhhY2tfZml4X2RvdWJsZV9xdW90ZV9lbmNvZGluZ19pc3N1ZV9pbl9zdHJlYW0oc3RyZWFtKQogICAgcmV0dXJuIHBkLnJlYWRfY3N2KHN0cmVhbSwgc2tpcHJvd3M9MywgZHR5cGU9c3RyKVtBTExfQ1NWX0NPTFVNTlNdLmZpbGxuYSgnJykKPHxmaW1faG9sZXw+CiAgICAgICAgZGZbc29ydGVkKFBFUlNPTl9DU1ZfQ09MVU1OX01BUFBJTkcua2V5cygpKV0KICAgICAgICAucmVuYW1lKGNvbHVtbnM9UEVSU09OX0NTVl9DT0xVTU5fTUFQUElORykKICAgICAgICAuc2V0X2luZGV4KCdwZXJzb25faWQnKQogICAgKQoKCmRlZiB0b19zdWJqZWN0X2FyZWFzX2J5X3BlcnNvbl9pZF9tYXAoZGYpOgogICAgcmV0dXJuIGNvbW1hX3NlcGFyYXRlZF9jb2x1bW5fdG9fbWFwKGRmW0NzdkNvbHVtbnMuUEVSU09OX0lEXSwgZGZbQ3N2Q29sdW1ucy5TVUJKRUNUX0FSRUFTXSkKCgpkZWYgdG9fa2V5d29yZHNfYnlfcGVyc29uX2lkX21hcChkZik6CiAgICByZXR1cm4gY29tbWFfc2VwYXJhdGVkX2NvbHVtbl90b19tYXAoZGZbQ3N2Q29sdW1ucy5QRVJTT05fSURdLCBkZltDc3ZDb2x1bW5zLktFWVdPUkRTXSkKCgpkZWYgdG9fcm9sZXNfYnlfcGVyc29uX2lkX21hcChkZik6CiAgICByZXR1cm4gY29tbWFfc2VwYXJhdGVkX2NvbHVtbl90b19tYXAoZGZbQ3N2Q29sdW1ucy5QRVJTT05fSURdLCBkZltDc3ZDb2x1bW5zLlJPTEVdKQoKCmRlZiBpbXBvcnRfY3N2X2ZpbGVfdG9fZGF0YWJhc2UoZmlsZW5hbWUsIHN0cmVhbSwgZGIpOgogICAgTE9HR0VSLmluZm8oImNvbnZlcnRpbmc6ICVzIiwgZmlsZW5hbWUpCiAgICBkZiA9IHJlYWRfZWRpdG9yc19jc3Yoc3RyZWFtKQogICAgYWRkX29yX3VwZGF0ZV9wZXJzb25zX2Zyb21fZGF0YWZyYW1lKAogICAgICAgIGRiLCB4bWxfZGVjb2RlX3BlcnNvbl9uYW1lcyh0b19wZXJzb25zX2RmKGRmKSkKICAgICkKICAgIHVwZGF0ZV9wZXJzb25fc3ViamVjdF9hcmVhcygKICAgICAgICBkYiwgbm9ybWFsaXNlX3N1YmplY3RfYXJlYV9tYXAodG9fc3ViamVjdF9hcmVhc19ieV9wZXJzb25faWRfbWFwKGRmKSkKICAgICkKICAgIHVwZGF0ZV9wZXJzb25fa2V5d29yZHMoCiAgICAgICAgZGIsIGRlZHVwX21hcF92YWx1ZXModG9fa2V5d29yZHNfYnlfcGVyc29uX2lkX21hcChkZikpCiAgICApCiAgICBkYi5wZXJzb25fcm9sZS5kZWxldGVfYWxsKCkKICAgIHVwZGF0ZV9wZXJzb25fcm9sZXMoZGIsIHRvX3JvbGVzX2J5X3BlcnNvbl9pZF9tYXAoZGYpKQogICAgdXBkYXRlX3BlcnNvbl9zdGF0dXNfdG8oZGIsIHNldChkZltDc3ZDb2x1bW5zLlBFUlNPTl9JRF0pLCBQZXJzb24uU3RhdHVzLkFDVElWRSkKCgpkZWYgZmluZF9maWxlX3RvX2ltcG9ydCgpOgogICAgYXBwX2NvbmZpZyA9IGdldF9hcHBfY29uZmlnKCkKICAgIHByZWZpeCA9IGFwcF9jb25maWcuZ2V0KCdzdG9yYWdlJywgJ2VkaXRvcl9yb2xlc19hbmRfa2V5d29yZHNfcHJlZml4JywgZmFsbGJhY2s9JycpCiAgICBpZiBub3QgcHJlZml4OgogICAgICAgIHJldHVybiBOb25lCiAgICByZXR1cm4gZmluZF9sYXN0X2Nzdl9maWxlX2luX2RpcmVjdG9yeShnZXRfZG93bmxvYWRzX2Nzdl9wYXRoKCksIHByZWZpeCkKCgpkZWYgbWFpbigpOgogICAgZmlsZW5hbWUgPSBmaW5kX2ZpbGVfdG9faW1wb3J0KCkKICAgIGlmIG5vdCBmaWxlbmFtZToKICAgICAgICBMT0dHRVIuaW5mbygic2tpcHBpbmcsIG5vIGZpbGUgdG8gcHJvY2VzcyIpCiAgICAgICAgcmV0dXJuCgogICAgd2l0aCBjb25uZWN0X21hbmFnZWRfY29uZmlndXJlZF9kYXRhYmFzZSgpIGFzIGRiOgogICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3InKSBhcyBmOgogICAgICAgICAgICBpbXBvcnRfY3N2X2ZpbGVfdG9fZGF0YWJhc2UoZmlsZW5hbWUsIGYsIGRiKQoKICAgICAgICBkYi5jb21taXQoKQoKICAgICAgICBMT0dHRVIuaW5mbygiZG9uZSIpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIGZyb20gLi5zaGFyZWQubG9nZ2luZ19jb25maWcgaW1wb3J0IGNvbmZpZ3VyZV9sb2dnaW5nCiAgICBjb25maWd1cmVfbG9nZ2luZygndXBkYXRlJykKCiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KCgpkZWYgdG9fcGVyc29uc19kZihkZik6CiAgICByZXR1cm4gKAo8fGZpbV9lbmR8Pg=="]
["dfb5fd49b33e8c8a16dde94025204f02c51a194a-2","dfb5fd49b33e8c8a16dde94025204f02c51a194a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhaG8ubXF0dC5wdWJsaXNoIGFzIHB1Ymxpc2gKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppbXBvcnQgUlBpLkdQSU8gYXMgR1BJTwppbXBvcnQgdGltZQoKdHJ5Ogo8fGZpbV9lbmR8Pg=="]
["5f16b5bb08b522bdaae4b9493225f35d20e7990c-4","5f16b5bb08b522bdaae4b9493225f35d20e7990c","PHxmaW1fcHJlZml4fD4KIiIiCkNvcHlyaWdodCAyMDE1IFRoZSBNSVRSRSBDb3Jwb3JhdGlvbgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgoKaW1wb3J0IHN5cwppbXBvcnQganNvbgppbXBvcnQgb3B0cGFyc2UKaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQgY3N2CmltcG9ydCBjb2xsZWN0aW9ucwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoiIiIKTWVyZ2UgYW5ub3RhdGlvbnMgYW5kIGRvY3VtZW50IGNvbnRlbnRzLgoKVGhpcyBzY3JpcHQgdGFrZXMgYSBsaXN0IG9mIGRvY0lELWZpbGVuYW1lIHBhaXJzLCBhbmQgYSBzZXQgb2Ygc3RhbmRvZmYgYW5ub3RhdGlvbnMgb24gdGhlIGRvY3VtZW50cy4KPHxmaW1fZW5kfD4="]
["ef85a8e29117decdf3052fc765ff207191dfbb1c-2","ef85a8e29117decdf3052fc765ff207191dfbb1c",{"$cut":{"chars":42236,"head":"PHxmaW1fcHJlZml4fD4KIiIicC1ub3JtIGJhc2VkIChhZGFwdGl2ZSkgZGlzdGFuY2VzLiIiIgoKaW1wb3J0IGxvZ2dpbmcKZnJvbSBudW1iZXJzIGltcG9ydCBOdW1iZXIKZnJvbSB0eXBpbmcgaW1wb3J0IENhbGxhYmxlLCBDb2xsZWN0aW9uLCBEaWN0LCBMaXN0LCBVbmlvbgoKaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIC4ucG9wdWxhdGlvbiBpbXBvcnQgU2FtcGxlCmZyb20gLi5wcmVkaWN0b3IgaW1wb3J0IFByZWRpY3Rvcgpmcm9tIC4uc3Vtc3RhdCBpbXBvcnQgSWRlbnRpdHlTdW1zdGF0LCBJZFN1YnNldHRlciwgU3Vic2V0dGVyLCBTdW1zdGF0CmZyb20gLi51dGlsIGltcG9ydCAoCiAgICBFdmVudEl4cywKICAgIFBhclRyYWZvLAogICAgUGFyVHJhZm9CYXNlLAogICAgZGljdDJhcnIsCiAgICBsb2dfc2FtcGxlcywKICAgIHJlYWRfc2FtcGxlLAopCmZyb20gLmJhc2UgaW1wb3J0IERpc3RhbmNlCmZyb20gLnNjYWxlIGltcG9ydCBtYWQKZnJvbSAudXRpbCBpbXBvcnQgYm91bmRfd2VpZ2h0cywgZmRfbmFibGExX211bHRpX2RlbHRhLCBsb2dfd2VpZ2h0cwoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkFCQy5EaXN0YW5jZSIpCgoKY2xhc3MgUE5vcm1EaXN0YW5jZShEaXN0YW5jZSk6CiAgICAiIiJXZWlnaHRlZCBwLW5vcm0gZGlzdGFuY2UuCgogICAgRGlzdGFuY2UgYmV0d2VlbiBzdW1tYXJ5IHN0YXRpc3RpY3MgY2FsY3VsYXRlZCBhY2NvcmRpbmcgdG8KCiAgICAuLiBtYXRoOjoKCiAgICAgICAgZCh4LCB5KSA9IFwKICAgICAgICBcXGxlZnQgW1xcc3VtX3tpfSBcXGxlZnR8IHdfaSAoIHhfaS15X2kgKSBcXHJpZ2h0fF57cH0gXFxyaWdodCBdXnsxL3B9CgogICAgRS5nLgogICAgKiBwPTEgZm9yIGEgRXVjbGlkZWFuIG9yIEwxIG1ldHJpYywKICAgICogcD0yIGZvciBhIE1hbmhhdHRhbiBvciBMMiBtZXRyaWMsCiAgICAqIHA9bnAuaW5mIGZvciBhIENoZWJ5c2hldiwgbWF4aW11bSBvciBpbmYgbWV0cmljLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHA6CiAgICAgICAgcCBmb3IgcC1ub3JtLiBwID49IDEsIHAgPSBucC5pbmYgaW1wbGllcyBtYXggbm9ybS4KICAgIGZpeGVkX3dlaWdodHM6CiAgICAgICAgV2VpZ2h0cy4KICAgICAgICBEaWN0aW9uYXJ5IGluZGV4ZWQgYnkgdGltZSBwb2ludHMsIG9yIG9ubHkgb25lIGVudHJ5IGlmCiAgICAgICAgdGhlIHdlaWdodHMgc2hvdWxkIG5vdCBjaGFuZ2Ugb3ZlciB0aW1lLgogICAgICAgIEVhY2ggZW50cnkgY29udGFpbnMgYSBkaWN0aW9uYXJ5IG9mIG51bWVyaWMgd2VpZ2h0cywgaW5kZXhlZCBieSBzdW1tYXJ5CiAgICAgICAgc3RhdGlzdGljcyBsYWJlbHMsIG9yIHRoZSBjb3JyZXNwb25kaW5nIGFycmF5IHJlcHJlc2VudGF0aW9uLgogICAgICAgIElmIE5vbmUgaXMgcGFzc2VkLCBhIHdlaWdodCBvZiAxIGlzIGNvbnNpZGVyZWQgZm9yIGV2ZXJ5IHN1bW1hcnkKICAgICAgICBzdGF0aXN0aWMuCiAgICAgICAgSWYgbm8gZW50cnkgaXMgYXZhaWxhYmxlIGZvciBhIGdpdmVuIHRpbWUgcG9pbnQsIHRoZSBtYXhpbXVtIGF2YWlsYWJsZQogICAgICAgIHRpbWUgcG9pbnQgaXMgc2VsZWN0ZWQuCiAgICBzdW1zdGF0OgogICAgICAgIFN1bW1hcnkgc3RhdGlzdGljcyB0cmFuc2Zvcm1hdGlvbiB0byBhcHBseSB0byB0aGUgbW9kZWwgb3V0cHV0LgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKAogICAgICAgIHNlbGYsCiAgICAgICAgcDogZmxvYXQgPSAxLAogICAgICAgIGZpeGVkX3dlaWdodHM6IFVuaW9uWwogICAgICAgICAgICBEaWN0W3N0ciwgZmxvYXRdLCBEaWN0W2ludCwgRGljdFtzdHIsIGZsb2F0XV0KICAgICAgICBdID0gTm9uZSwKICAgICAgICBzdW1zdGF0OiBTdW1zdGF0ID0gTm9uZSwKICAgICk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCgogICAgICAgIGlmIHN1bXN0YXQgaXMgTm9uZToKICAgICAgICAgICAgc3Vtc3RhdCA9IElkZW50aXR5U3Vtc3RhdCgpCiAgICAgICAgc2VsZi5zdW1zdGF0OiBTdW1zdGF0ID0gc3Vtc3RhdAoKICAgICAgICBpZiBwIDwgMToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSXQgbXVzdCBiZSBwID49IDEiKQogICAgICAgIHNlbGYucDogZmxvYXQgPSBwCgogICAgICAgIHNlbGYuX2FyZ19maXhlZF93ZWlnaHRzID0gZml4ZWRfd2VpZ2h0cwogICAgICAgIHNlbGYuZml4ZWRfd2VpZ2h0czogVW5pb25bRGljdFtpbnQsIG5wLm5kYXJyYXldLCBOb25lXSA9IE5vbmUKCiAgICAgICAgIyB0byBjYWNoZSB0aGUgb2JzZXJ2ZWQgZGF0YSBhbmQgc3VtbWFyeSBzdGF0aXN0aWNzCiAgICAgICAgc2VsZi54XzA6IFVuaW9uW2RpY3QsIE5vbmVdID0gTm9uZQogICAgICAgIHNlbGYuc18wOiBVbmlvbltucC5uZGFycmF5LCBOb25lXSA9IE5vbmUKCiAgICBkZWYgaW5pdGlhbGl6ZSgKICAgICAgICBzZWxmLAogICAgICAgIHQ6IGludCwKICAgICAgICBnZXRfc2FtcGxlOiBDYWxsYWJsZVtbXSwgU2FtcGxlXSwKICAgICAgICB4XzA6IGRpY3QsCiAgICAgICAgdG90YWxfc2ltczogaW50LAogICAgKSAtPiBOb25lOgogICAgICAgICMgaW5pdGlhbGl6ZSBzdW1tYXJ5IHN0YXRpc3RpY3MKICAgICAgICBzZWxmLnN1bXN0YXQuaW5pdGlhbGl6ZSgKICAgICAgICAgICAgdD10LAogICAgICAgICAgICBnZXRfc2FtcGxlPWdldF9zYW1wbGUsCiAgICAgICAgICAgIHhfMD14XzAsCiAgICAgICAgICAgIHRvdGFsX3NpbXM9dG90YWxfc2ltcywKICAgICAgICApCgogICAgICAgICMgb2JzZXJ2ZWQgZGF0YQogICAgICAgIHNlbGYueF8wID0geF8wCiAgICAgICAgc2VsZi5zXzAgPSBzZWxmLnN1bXN0YXQoc2VsZi54XzApCgogICAgICAgICMgaW5pdGlhbGl6ZSB3ZWlnaHRzCiAgICAgICAgc2VsZi5maXhlZF93ZWlnaHRzID0gUE5vcm1EaXN0YW5jZS5mb3JtYXRfZGljdCgKICAgICAgICAgICAgdmFscz1zZWxmLl9hcmdfZml4ZWRfd2VpZ2h0cywKICAgICAgICAgICAgdD10LAogICAgICAgICAgICBzX2lkcz1zZWxmLnN1bXN0YXQuZ2V0X2lkcygpLAogICAgICAgICkKCiAgICBkZWYgdXBkYXRlKAogICAgICAgIHNlbGYsCiAgICAgICAgdDogaW50LAogICAgICAgIGdldF9z"}}]
["08f894033ed08add1989d0222afba1bc96016115-1","08f894033ed08add1989d0222afba1bc96016115","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IG9zCgpmcm9tIGZsYXNrIGltcG9ydCBCbHVlcHJpbnQsIGZsYXNoLCByZW5kZXJfdGVtcGxhdGUsIHJlcXVlc3QKZnJvbSB3ZXJremV1Zy51dGlscyBpbXBvcnQgc2VjdXJlX2ZpbGVuYW1lCjx8ZmltX2VuZHw+"]
["19f8900974150056f8b4b541598750ebc7232816-1","19f8900974150056f8b4b541598750ebc7232816","PHxmaW1fcHJlZml4fD4KY2xhc3MgU29sdXRpb246CiAgICBkZWYgbWVyZ2Uoc2VsZiwgbGVmdF9hcnIsIHJpZ2h0X2Fycik6ICAgICAgICAgICAjIOWQiOW5tgogICAgICAgIGFyciA9IFtdCiAgICAgICAgd2hpbGUgbGVmdF9hcnIgYW5kIHJpZ2h0X2FycjogICAgICAgICAgICAgICAjIOWwhuS4pOS4quaOkuW6j+aVsOe7hOS4rei+g+Wwj+WFg+e0oOS+neasoeaPkuWFpeWIsOe7k+aenOaVsOe7hOS4rQogICAgICAgICAgICBpZiBsZWZ0X2FyclswXSA8PSByaWdodF9hcnJbMF06CiAgICAgICAgICAgICAgICBhcnIuYXBwZW5kKGxlZnRfYXJyLnBvcCgwKSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGFyci5hcHBlbmQocmlnaHRfYXJyLnBvcCgwKSkKICAgICAgICAgICAgICAgIAogICAgICAgIHdoaWxlIGxlZnRfYXJyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyDlpoLmnpzlt6blrZDluo/liJfmnInliankvZnlhYPntKDvvIzliJnlsIblhbbmj5LlhaXliLDnu5PmnpzmlbDnu4TkuK0KICAgICAgICAgICAgYXJyLmFwcGVuZChsZWZ0X2Fyci5wb3AoMCkpCiAgICAgICAgd2hpbGUgcmlnaHRfYXJyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIOWmguaenOWPs+WtkOW6j+WIl+acieWJqeS9meWFg+e0oO+8jOWImeWwhuWFtuaPkuWFpeWIsOe7k+aenOaVsOe7hOS4rQogICAgICAgICAgICBhcnIuYXBwZW5kKHJpZ2h0X2Fyci5wb3AoMCkpCiAgICAgICAgcmV0dXJuIGFyciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIOi/lOWbnuaOkuWlveW6j+eahOe7k+aenOaVsOe7hAoKICAgIGRlZiBtZXJnZVNvcnQoc2VsZiwgYXJyKTogICAgICAgICAgICAgICAgICAgICAgICMg5YiG6KejCiAgICAgICAgaWYgbGVuKGFycikgPD0gMTogICAgICAgICAgICAgICAgICAgICAgICAgICAjIOaVsOe7hOWFg+e0oOS4quaVsOWwj+S6juetieS6jiAxIOaXtu+8jOebtOaOpei/lOWbnuWOn+aVsOe7hAogICAgICAgICAgICByZXR1cm4gYXJyCiAgICAgICAgCiAgICAgICAgbWlkID0gbGVuKGFycikgLy8gMiAgICAgICAgICAgICAgICAgICAgICAgICAjIOWwhuaVsOe7hOS7juS4remXtOS9jee9ruWIhuS4uuW3puWPs+S4pOS4quaVsOe7hOOAggo8fGZpbV9ob2xlfD4KICAgIGRlZiBzb3J0QXJyYXkoc2VsZiwgbnVtczogTGlzdFtpbnRdKSAtPiBMaXN0W2ludF06CiAgICAgICAgcmV0dXJuIHNlbGYubWVyZ2VTb3J0KG51bXMpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgbGVmdF9hcnIgPSBzZWxmLm1lcmdlU29ydChhcnJbMDogbWlkXSkgICAgICAjIOmAkuW9kuWwhuW3puWtkOW6j+WIl+i/m+ihjOWIhuino+WSjOaOkuW6jwogICAgICAgIHJpZ2h0X2FyciA9ICBzZWxmLm1lcmdlU29ydChhcnJbbWlkOl0pICAgICAgIyDpgJLlvZLlsIblj7PlrZDluo/liJfov5vooYzliIbop6PlkozmjpLluo8KICAgICAgICByZXR1cm4gc2VsZi5tZXJnZShsZWZ0X2FyciwgcmlnaHRfYXJyKSAgICAgICMg5oqK5b2T5YmN5bqP5YiX57uE5Lit5pyJ5bqP5a2Q5bqP5YiX6YCQ5bGC5ZCR5LiK77yM6L+b6KGM5Lik5Lik5ZCI5bm244CCCgo8fGZpbV9lbmR8Pg=="]
["a0ebb0fccf2d9077cc31039e9c9b1977caf6857b-2","a0ebb0fccf2d9077cc31039e9c9b1977caf6857b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGdyYXBoZW5lCmZyb20gZGphbmdvLmRiIGltcG9ydCB0cmFuc2FjdGlvbgpmcm9tIGRqYW5nby5jb25mIGltcG9ydCBzZXR0aW5ncwpmcm9tIGdyYXBoZW5lX2ZpbGVfdXBsb2FkLnNjYWxhcnMgaW1wb3J0IFVwbG9hZApmcm9tIGdyYXBocWwgaW1wb3J0IEdyYXBoUUxFcnJvcgpmcm9tIGdyYXBocWxfcmVsYXkgaW1wb3J0IGZyb21fZ2xvYmFsX2lkCgpmcm9tIGNyZWF0b3IuYW5hbHlzZXMuYW5hbHl6ZXIgaW1wb3J0IGFuYWx5emVfdmVyc2lvbgpmcm9tIGNyZWF0b3IuZmlsZXMubW9kZWxzIGltcG9ydCBGaWxlLCBWZXJzaW9uCmZyb20gY3JlYXRvci5zdHVkaWVzLm1vZGVscyBpbXBvcnQgU3R1ZHkKZnJvbSBjcmVhdG9yLmV2ZW50cy5tb2RlbHMgaW1wb3J0IEV2ZW50CmZyb20gY3JlYXRvci5maWxlcy5ub2Rlcy5maWxlIGltcG9ydCBGaWxlTm9kZSwgRmlsZVR5cGUKZnJvbSBjcmVhdG9yLmRhdGFfdGVtcGxhdGVzLm1vZGVscyBpbXBvcnQgVGVtcGxhdGVWZXJzaW9uCgoKY2xhc3MgQ3JlYXRlRmlsZU11dGF0aW9uKGdyYXBoZW5lLk11dGF0aW9uKToKICAgIGNsYXNzIEFyZ3VtZW50czoKICAgICAgICB2ZXJzaW9uID0gZ3JhcGhlbmUuSUQoCiAgICAgICAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJUaGUgZmlyc3QgdmVyc2lvbiB0aGlzIGRvY3VtZW50IHdpbGwgY29udGFpbiIsCiAgICAgICAgKQogICAgICAgIHN0dWR5ID0gZ3JhcGhlbmUuSUQoCiAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlLCBkZXNjcmlwdGlvbj0iVGhlIHN0dWR5IHRoaXMgZmlsZSB3aWxsIGJlbG9uZyB0byIKICAgICAgICApCiAgICAgICAgbmFtZSA9IGdyYXBoZW5lLlN0cmluZygKICAgICAgICAgICAgcmVxdWlyZWQ9VHJ1ZSwgZGVzY3JpcHRpb249IlRoZSBuYW1lIG9mIHRoZSBmaWxlIgogICAgICAgICkKICAgICAgICBkZXNjcmlwdGlvbiA9IGdyYXBoZW5lLlN0cmluZygKICAgICAgICAgICAgcmVxdWlyZWQ9VHJ1ZSwgZGVzY3JpcHRpb249IkEgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWxlIgogICAgICAgICkKICAgICAgICBmaWxlVHlwZSA9IEZpbGVUeXBlKHJlcXVpcmVkPVRydWUsIGRlc2NyaXB0aW9uPSJUaGUgdHlwZSBvZiBmaWxlIikKICAgICAgICB0YWdzID0gZ3JhcGhlbmUuTGlzdChncmFwaGVuZS5TdHJpbmcpCiAgICAgICAgdGVtcGxhdGVWZXJzaW9uID0gZ3JhcGhlbmUuSUQoCiAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlLAogICAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhlIHRlbXBsYXRlX3ZlcnNpb24gdGhpcyBmaWxlIGNvbmZvcm1zIHRvIgogICAgICAgICkKCiAgICBmaWxlID0gZ3JhcGhlbmUuRmllbGQoRmlsZU5vZGUpCgogICAgZGVmIG11dGF0ZSgKICAgICAgICBzZWxmLAogICAgICAgIGluZm8sCiAgICAgICAgdmVyc2lvbiwKICAgICAgICBuYW1lLAogICAgICAgIGRlc2NyaXB0aW9uLAogICAgICAgIGZpbGVUeXBlLAogICAgICAgIHRhZ3MsCiAgICAgICAgc3R1ZHk9Tm9uZSwKICAgICAgICB0ZW1wbGF0ZVZlcnNpb249Tm9uZSwKICAgICAgICAqKmt3YXJncywKICAgICk6Cjx8ZmltX2hvbGV8PgoKICAgICAgICB0cnk6CiAgICAgICAgICAgIF8sIHZlcnNpb25faWQgPSBmcm9tX2dsb2JhbF9pZCh2ZXJzaW9uKQogICAgICAgICAgICB2ZXJzaW9uID0gVmVyc2lvbi5vYmplY3RzLmdldChrZl9pZD12ZXJzaW9uX2lkKQogICAgICAgIGV4Y2VwdCBWZXJzaW9uLkRvZXNOb3RFeGlzdDoKICAgICAgICAgICAgcmFpc2UgR3JhcGhRTEVycm9yKCJWZXJzaW9uIGRvZXMgbm90IGV4aXN0LiIpCgogICAgICAgICMgSWYgdGhlcmUgd2FzIGEgc3R1ZHkgaW4gdGhlIG11dGF0aW9uLCB0cnkgdG8gcmVzb2x2ZSBpdCwgZWxzZSB0cnkKICAgICAgICAjIHRvIGluaGVyaXQgdGhlIHN0dWR5IG9uIHRoZSB2ZXJzaW9uLCBpZiB0aGVyZSBpcyBvbmUsIG90aGVyd2lzZSBmYWlsCiAgICAgICAgIyB0byBjcmVhdGUgYSBuZXcgZmlsZQogICAgICAgIGlmIHN0dWR5IGlzIG5vdCBOb25lOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBfLCBzdHVkeV9pZCA9IGZyb21fZ2xvYmFsX2lkKHN0dWR5KQogICAgICAgICAgICAgICAgc3R1ZHkgPSBTdHVkeS5vYmplY3RzLmdldChrZl9pZD1zdHVkeV9pZCkKICAgICAgICAgICAgZXhjZXB0IFN0dWR5LkRvZXNOb3RFeGlzdDoKICAgICAgICAgICAgICAgIHJhaXNlIEdyYXBoUUxFcnJvcigiU3R1ZHkgZG9lcyBub3QgZXhpc3QuIikKICAgICAgICBlbHNlOgogICAgICAgICAgICBzdHVkeSA9IHZlcnNpb24uc3R1ZHkKICAgICAgICAgICAgaWYgc3R1ZHkgaXMgTm9uZToKICAgICAgICAgICAgICAgIHJhaXNlIEdyYXBoUUxFcnJvcigKICAgICAgICAgICAgICAgICAgICAiU3R1ZHkgbXVzdCBiZSBzcGVjaWZpZWQgb3IgdGhlIHZlcnNpb24gZ2l2ZW4gbXVzdCBoYXZlIGEgIgogICAgICAgICAgICAgICAgICAgICJsaW5rZWQgc3R1ZHkiCiAgICAgICAgICAgICAgICApCgogICAgICAgIGlmIG5vdCAoCiAgICAgICAgICAgIHVzZXIuaGFzX3Blcm0oImZpbGVzLmFkZF9maWxlIikKICAgICAgICAgICAgb3IgKAogICAgICAgICAgICAgICAgdXNlci5oYXNfcGVybSgiZmlsZXMuYWRkX215X3N0dWR5X2ZpbGUiKQogICAgICAgICAgICAgICAgYW5kIHVzZXIuc3R1ZGllcy5maWx0ZXIoa2ZfaWQ9c3R1ZHkua2ZfaWQpLmV4aXN0cygpCiAgICAgICAgICAgICkKICAgICAgICApOgogICAgICAgICAgICByYWlzZSBHcmFwaFFMRXJyb3IoIk5vdCBhbGxvd2VkIikKCiAgICAgICAgdGVtcGxhdGVfdmVyc2lvbiA9IE5vbmUKICAgICAgICBpZiB0ZW1wbGF0ZVZlcnNpb246CiAgICAgICAgICAgIF8sIHRlbXBsYXRlX3ZlcnNpb25faWQgPSBmcm9tX2dsb2JhbF9pZCh0ZW1wbGF0ZVZlcnNpb24pCiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHRlbXBsYXRlX3ZlcnNpb24gPSBUZW1wbGF0ZVZlcnNpb24ub2JqZWN0cy5nZXQoCiAgICAgICAgICAgICAgICAgICAgcGs9dGVtcGxhdGVfdmVyc2lvbl9pZAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICBleGNlcHQgVGVtcGxhdGVWZXJzaW9uLkRvZXNOb3RFeGlzdDoKICAgICAgICAgICAgICAgIHJhaXNlIEdyYXBoUUxFcnJvcigKICAgICAgICAgICAgICAgICAgICBmIlRlbXBsYXRlVmVyc2lvbiB7dGVtcGxhdGVfdmVyc2lvbl9pZH0gZG9lcyBub3QgZXhpc3QiCiAgICAgICAgICAgICAgICApCgogICAgICAgIHdpdGggdHJhbnNhY3Rpb24uYXRvbWljKCk6CiAgICAgICAgICAgIHJvb3RfZmlsZSA9IEZpbGUoCiAgICAgICAgICAgICAgICBuYW1lPW5hbWUsCiAgICAgICAgICAgICAgICBzdHVkeT1zdHVkeSwKICAgICAgICAgICAgICAgIGNyZWF0b3I9dXNlciwKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPWRlc2NyaXB0aW9uLAogICAgICAgICAgICAgICAgZmlsZV90eXBlPWZpbGVUeXBlLAogICAgICAgICAgICAgICAgdGFncz10YWdzLAogICAgICAgICAgICAgICAgdGVtcGxhdGVfdmVyc2lvbj10ZW1wbGF0ZV92ZXJzaW9uLAogICAgICAgICAgICApCiAgICAgICAgICAgIHJvb3RfZmlsZS5zYXZlKCkKICAgICAgICAgICAgdmVyc2lvbi5yb290X2ZpbGUgPSByb290X2ZpbGUKICAgICAgICAgICAgdmVyc2lvbi5zYXZlKCkKICAgICAgICAgICAgcm9vdF9maWxlLmZ1bGxfY2xlYW4oKQoKICAgICAgICByZXR1cm4gQ3JlYXRlRmlsZU11dGF0aW9uKGZpbGU9cm9vdF9maWxlKQoKCmNsYXNzIEZpbGVNdXRhdGlvbihncmFwaGVuZS5NdXRhdGlvbik6CiAgICBjbGFzcyBBcmd1bWVudHM6CiAgICAgICAga2ZfaWQgPSBncmFwaGVuZS5TdHJpbmcocmVxdWlyZWQ9VHJ1ZSkKICAgICAgICBuYW1lID0gZ3JhcGhlbmUuU3RyaW5nKCkKICAgICAgICBkZXNjcmlwdGlvbiA9IGdyYXBoZW5lLlN0cmluZygpCiAgICAgICAgZmlsZV90eXBlID0gRmlsZVR5cGUoKQogICAgICAgIHRhZ3MgPSBncmFwaGVuZS5MaXN0KGdyYXBoZW5lLlN0cmluZykKICAgICAgICB0ZW1wbGF0ZV92ZXJzaW9uID0gZ3JhcGhlbmUuSUQoKQoKICAgIGZpbGUgPSBncmFwaGVuZS5GaWVsZChGaWxlTm9kZSkKCiAgICBkZWYgbXV0YXRlKHNlbGYsIGluZm8sIGtmX2lkLCAqKmt3YXJncyk6CiAgICAgICAgIiIiCiAgICAgICAgICAgIFVwZGF0ZXMgYW4gZXhpc3RpbmcgZmlsZSBvbiBuYW1lIGFuZC9vciBkZXNjcmlwdGlvbi4KICAgICAgICAgICAgVXNlciBtdXN0IGJlIGF1dGhlbnRpY2F0ZWQgYW5kIGJlbG9uZ3MgdG8gdGhlIHN0dWR5LCBvciBiZSBBRE1JTi4KICAgICAgICAiIiIKICAgICAgICB1c2VyID0gaW5mby5jb250ZXh0LnVzZXIKICAgICAgICBpZiBub3QgKAogICAgICAgICAgICB1c2VyLmhhc19wZXJtKCJmaWxlcy5jaGFuZ2VfZmlsZSIpCiAgICAgICAgICAgIG9yIHVzZXIuaGFzX3Blcm0oImZpbGVzLmNoYW5nZV9teV9zdHVkeV9maWxlIikKICAgICAgICApOgogICAgICAgICAgICByYWlzZSBHcmFwaFFMRXJyb3IoIk5vdCBhbGxvd2VkIikKCiAgICAgICAgdHJ5OgogICAgICAgICAgICBmaWxlID0gRmlsZS5vYmplY3RzLmdldChrZl9pZD1rZl9pZCkKICAgICAgICBleGNlcHQgRmlsZS5Eb2VzTm90RXhpc3Q6CiAgICAgICAgICAgIHJhaXNlIEdyYXBoUUxFcnJvcigiRmlsZSBkb2VzIG5vdCBleGlzdC4iKQoKICAgICAgICBpZiBub3QgKAogICAgICAgICAgICB1c2VyLmhhc19wZXJtKCJmaWxlcy5jaGFuZ2VfZmlsZSIpCiAgICAgICAgICAgIG9yICgKICAgICAgICAgICAgICAgIHVzZXIuaGFzX3Blcm0oImZpbGVzLmNoYW5nZV9teV9zdHVkeV9maWxlIikKICAgICAgICAgICAgICAgIGFuZCB1c2VyLnN0dWRpZXMuZmlsdGVyKGtmX2lkPWZpbGUuc3R1ZHkua2ZfaWQpLmV4aXN0cygpCiAgICAgICAgICAgICkKICAgICAgICApOgogICAgICAgICAgICByYWlzZSBHcmFwaFFMRXJyb3IoIk5vdCBhbGxvd2VkIikKCiAgICAgICAgdXBkYXRlX2ZpZWxkcyA9IFtdCgogICAgICAgIGlmIGt3YXJncy5nZXQoIm5hbWUiKToKICAgICAgICAgICAgaWYgZmlsZS5uYW1lICE9IGt3YXJncy5nZXQoIm5hbWUiKToKICAgICAgICAgICAgICAgIHVwZGF0ZV9maWVsZHMuYXBwZW5kKCJuYW1lIikKICAgICAgICAgICAgZmlsZS5uYW1lID0ga3dhcmdzLmdldCgibmFtZSIpCiAgICAgICAgaWYga3dhcmdzLmdldCgiZGVzY3JpcHRpb24iKToKICAgICAgICAgICAgaWYgZmlsZS5kZXNjcmlwdGlvbiAhPSBrd2FyZ3MuZ2V0KCJkZXNjcmlwdGlvbiIpOgogICAgICAgICAgICAgICAgdXBkYXRlX2ZpZWxkcy5hcHBlbmQoImRlc2NyaXB0aW9uIikKICAgICAgICAgICAgZmlsZS5kZXNjcmlwdGlvbiA9IGt3YXJncy5nZXQoImRlc2NyaXB0aW9uIikKICAgICAgICBpZiBrd2FyZ3MuZ2V0KCJmaWxlX3R5cGUiKToKICAgICAgICAgICAgaWYgZmlsZS5maWxlX3R5cGUgIT0ga3dhcmdzLmdldCgiZmlsZV90eXBlIik6CiAgICAgICAgICAgICAgICB1cGRhdGVfZmllbGRzLmFwcGVuZCgiZmlsZSB0eXBlIikKICAgICAgICAgICAgZmlsZS5maWxlX3R5cGUgPSBrd2FyZ3MuZ2V0KCJmaWxlX3R5cGUiKQogICAgICAgIGlmICJ0YWdzIiBpbiBrd2FyZ3M6CiAgICAgICAgICAgIGlmIGZpbGUudGFncyAhPSBrd2FyZ3MuZ2V0KCJ0YWdzIik6CiAgICAgICAgICAgICAgICB1cGRhdGVfZmllbGRzLmFwcGVuZCgidGFncyIpCiAgICAgICAgICAgIGZpbGUudGFncyA9IGt3YXJncy5nZXQoInRhZ3MiKQogICAgICAgIGlmICgKICAgICAgICAgICAga3dhcmdzLmdldCgidGVtcGxhdGVfdmVyc2lvbiIpIGFuZAogICAgICAgICAgICBmaWxlLnRlbXBsYXRlX3ZlcnNpb24gIT0ga3dhcmdzLmdldCgidGVtcGxhdGVfdmVyc2lvbiIpCiAgICAgICAgKToKICAgICAgICAgICAgdXBkYXRlX2ZpZWxkcy5hcHBlbmQoImZpbGUgdGVtcGxhdGUiKQoKICAgICAgICAjIFVwZGF0ZSB0aGUgZmlsZSdzIHRlbXBsYXRlCiAgICAgICAgdGVtcGxhdGVfdmVyc2lvbiA9IGt3YXJncy5nZXQoInRlbXBsYXRlX3ZlcnNpb24iKQogICAgICAgIGlmIHRlbXBsYXRlX3ZlcnNpb246CiAgICAgICAgICAgIF8sIHRlbXBsYXRlX3ZlcnNpb25faWQgPSBmcm9tX2dsb2JhbF9pZCh0ZW1wbGF0ZV92ZXJzaW9uKQogICAgICAgICAgICB0ZW1wbGF0ZV92ZXJzaW9uID0gTm9uZQogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICB0ZW1wbGF0ZV92ZXJzaW9uID0gVGVtcGxhdGVWZXJzaW9uLm9iamVjdHMuZ2V0KAogICAgICAgICAgICAgICAgICAgIHBrPXRlbXBsYXRlX3ZlcnNpb25faWQKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgZXhjZXB0IFRlbXBsYXRlVmVyc2lvbi5Eb2VzTm90RXhpc3Q6CiAgICAgICAgICAgICAgICByYWlzZSBHcmFwaFFMRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgZiJUZW1wbGF0ZVZlcnNpb24ge3RlbXBsYXRlX3ZlcnNpb25faWR9IGRvZXMgbm90IGV4aXN0IgogICAgICAgICAgICAgICAgKQogICAgICAgIGZpbGUudGVtcGxhdGVfdmVyc2lvbiA9IHRlbXBsYXRlX3ZlcnNpb24KCiAgICAgICAgZmlsZS5zYXZlKCkKCiAgICAgICAgIyBNYWtlIGFuIHVwZGF0ZSBldmVudAogICAgICAgIG1lc3NhZ2UgPSAoCiAgICAgICAgICAgIGYie3VzZXIuZGlzcGxheV9uYW1lfSB1cGRhdGVkIHsnLCAnLmpvaW4odXBkYXRlX2ZpZWxkcyl9ICIKICAgICAgICAgICAgZiJ7J29mICcgaWYgbGVuKHVwZGF0ZV9maWVsZHMpPjAgZWxzZSAnJ30gZmlsZSB7ZmlsZS5rZl9pZH0iCiAgICAgICAgKQogICAgICAgIGV2ZW50ID0gRXZlbnQoCiAgICAgICAgICAgIG9yZ2FuaXphdGlvbj1maWxlLnN0dWR5Lm9yZ2FuaXphdGlvbiwKICAgICAgICAgICAgZmlsZT1maWxlLAogICAgICAgICAgICBzdHVkeT1maWxlLnN0dWR5LAogICAgICAgICAgICB1c2VyPXVzZXIsCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPW1lc3NhZ2UsCiAgICAgICAgICAgIGV2ZW50X3R5cGU9IlNGX1VQRCIsCiAgICAgICAgKQogICAgICAgIGV2ZW50LnNhdmUoKQoKICAgICAgICByZXR1cm4gRmlsZU11dGF0aW9uKGZpbGU9ZmlsZSkKCgpjbGFzcyBEZWxldGVGaWxlTXV0YXRpb24oZ3JhcGhlbmUuTXV0YXRpb24pOgogICAgY2xhc3MgQXJndW1lbnRzOgogICAgICAgIGtmX2lkID0gZ3JhcGhlbmUuU3RyaW5nKHJlcXVpcmVkPVRydWUpCgogICAgc3VjY2VzcyA9IGdyYXBoZW5lLkJvb2xlYW4oKQogICAga2ZfaWQgPSBncmFwaGVuZS5TdHJpbmcoKQoKICAgIGRlZiBtdXRhdGUoc2VsZiwgaW5mbywga2ZfaWQsICoqa3dhcmdzKToKICAgICAgICAiIiIKICAgICAgICBEZWxldGVzIGEgZmlsZSBpZiB0aGUgdXNlciBpcyBhbiBhZG1pbiBhbmQgdGhlIGZpbGUgZXhpc3RzCiAgICAgICAgIiIiCiAgICAgICAgdXNlciA9IGluZm8uY29udGV4dC51c2VyCiAgICAgICAgaWYgbm90IHVzZXIuaGFzX3Blcm0oImZpbGVzLmRlbGV0ZV9maWxlIik6CiAgICAgICAgICAgIHJhaXNlIEdyYXBoUUxFcnJvcigiTm90IGFsbG93ZWQiKQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZpbGUgPSBGaWxlLm9iamVjdHMuZ2V0KGtmX2lkPWtmX2lkKQogICAgICAgIGV4Y2VwdCBGaWxlLkRvZXNOb3RFeGlzdDoKICAgICAgICAgICAgcmFpc2UgR3JhcGhRTEVycm9yKCJGaWxlIGRvZXMgbm90IGV4aXN0LiIpCgogICAgICAgIGZpbGUuZGVsZXRlKCkKCiAgICAgICAgcmV0dXJuIERlbGV0ZUZpbGVNdXRhdGlvbihzdWNjZXNzPVRydWUsIGtmX2lkPWtmX2lkKQoKCmNsYXNzIE11dGF0aW9uKGdyYXBoZW5lLk9iamVjdFR5cGUpOgogICAgY3JlYXRlX2ZpbGUgPSBDcmVhdGVGaWxlTXV0YXRpb24uRmllbGQoCiAgICAgICAgZGVzY3JpcHRpb249IlVwbG9hZCBhIG5ldyBmaWxlIHRvIGEgc3R1ZHkiCiAgICApCiAgICB1cGRhdGVfZmlsZSA9IEZpbGVNdXRhdGlvbi5GaWVsZChkZXNjcmlwdGlvbj0iVXBkYXRlIGEgZmlsZSIpCiAgICBkZWxldGVfZmlsZSA9IERlbGV0ZUZpbGVNdXRhdGlvbi5GaWVsZChkZXNjcmlwdGlvbj0iRGVsZXRlIGEgZmlsZSIpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIiIiCiAgICAgICAgQ3JlYXRlcyBhIG5ldyBmaWxlIGhvdXNpbmcgdGhlIHNwZWNpZmllZCB2ZXJzaW9uLgogICAgICAgICIiIgogICAgICAgIHVzZXIgPSBpbmZvLmNvbnRleHQudXNlcgo8fGZpbV9lbmR8Pg=="]
["d0f24a9364f1e61b19aea21cf28faf52501febc4-1","d0f24a9364f1e61b19aea21cf28faf52501febc4","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKZnJvbSB0eXBpbmcgaW1wb3J0IFRZUEVfQ0hFQ0tJTkcKCmltcG9ydCBweXRlc3QKaW1wb3J0IHB5dGVzdF9hc3luY2lvCmZyb20gcGFja2FnaW5nIGltcG9ydCB2ZXJzaW9uCgppZiBUWVBFX0NIRUNLSU5HOgogICAgZnJvbSBweXRlc3QgaW1wb3J0IFB5dGVzdGVyCgoKaWYgdmVyc2lvbi5wYXJzZShweXRlc3RfYXN5bmNpby5fX3ZlcnNpb25fXykgPCB2ZXJzaW9uLnBhcnNlKCIwLjE3LjAiKToKICAgIGFkZG9wdHMgPSAiIgogICAgc2tpcF93b3JrYXJvdW5kXzEgPSBGYWxzZQplbHNlOgogICAgYWRkb3B0cyA9ICItLWFzeW5jaW8tbW9kZT1hdXRvIgogICAgc2tpcF93b3JrYXJvdW5kXzEgPSBUcnVlCgoKZGVmIHRlc3RfZml4dHVyZV9zZXR1cChweXRlc3RlcjogUHl0ZXN0ZXIpOgogICAgcHl0ZXN0ZXIubWFrZWNvbmZ0ZXN0KCIiIgogICAgICAgIHB5dGVzdF9wbHVnaW5zID0gWyJ0ZXN0cy5jb25mdGVzdCJdCiAgICAiIiIpCgogICAgcHl0ZXN0ZXIubWFrZXB5ZmlsZSgiIiIKICAgICAgICBkZWYgdGVzdF9zZXR1cCgpOgogICAgICAgICAgICBhc3NlcnQgVHJ1ZQogICAgIiIiKQoKICAgIHJlc3VsdCA9IHB5dGVzdGVyLnJ1bnB5dGVzdChhZGRvcHRzKQogICAgcmVzdWx0LmFzc2VydF9vdXRjb21lcyhwYXNzZWQ9MSkKCgpAcHl0ZXN0Lm1hcmsud29ya2Fyb3VuZF8xCkBweXRlc3QubWFyay5za2lwaWYoc2tpcF93b3JrYXJvdW5kXzEsIHJlYXNvbj0id29ya3Mgb25seSB3aXRoIHB5dGVzdC1hc3luY2lvPDAuMTcuMCIpCmRlZiB0ZXN0X3dvcmthcm91bmRfMShweXRlc3RlcjogUHl0ZXN0ZXIpOgogICAgcHl0ZXN0ZXIubWFrZWNvbmZ0ZXN0KCIiIgogICAgICAgIHB5dGVzdF9wbHVnaW5zID0gWyJ0ZXN0cy5jb25mdGVzdCJdCiAgICAiIiIpCgogICAgcHl0ZXN0ZXIubWFrZXB5ZmlsZSgiIiIKICAgICAgICBpbXBvcnQgYXN5bmNpbwoKICAgICAgICBpbXBvcnQgcHl0ZXN0CgogICAgICAgIEBweXRlc3QuZml4dHVyZQogICAgICAgIGRlZiBldmVudF9sb29wKCk6CiAgICAgICAgICAgICMgZG9uJ3QgY2xvc2UgdGhlIGxvb3Agc2luY2UgaXQgd2lsbCBiZSBtYW5hZ2VkIGJ5IHBhcmVudCB0ZXN0CiAgICAgICAgICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wX3BvbGljeSgpLmdldF9ldmVudF9sb29wKCkKICAgICAgICAgICAgeWllbGQgbG9vcAoKICAgICAgICBkZWYgdGVzdF9zZXR1cCgpOgogICAgICAgICAgICBhc3NlcnQgVHJ1ZQogICAgIiIiKQoKICAgIHJlc3VsdCA9IHB5dGVzdGVyLnJ1bnB5dGVzdChhZGRvcHRzKQogICAgcmVzdWx0LmFzc2VydF9vdXRjb21lcyhwYXNzZWQ9MSkKCgpAcHl0ZXN0Lm1hcmsud29ya2Fyb3VuZF8xCkBweXRlc3QubWFyay53b3JrYXJvdW5kXzIKZGVmIHRlc3Rfd29ya2Fyb3VuZF8yKHB5dGVzdGVyOiBQeXRlc3Rlcik6CiAgICBweXRlc3Rlci5tYWtlY29uZnRlc3QoIiIiCiAgICAgICAgcHl0ZXN0X3BsdWdpbnMgPSBbInRlc3RzLmNvbmZ0ZXN0Il0KICAgICIiIikKCiAgICBweXRlc3Rlci5tYWtlcHlmaWxlKCIiIgogICAgICAgIGltcG9ydCBweXRlc3QKCiAgICAgICAgQHB5dGVzdC5maXh0dXJlKGF1dG91c2U9VHJ1ZSkKICAgICAgICBkZWYgdGVhcmRvd24oKToKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIGRlZiB0ZXN0X3NldHVwKCk6Cjx8ZmltX2hvbGV8PgogICAgIiIiKQoKICAgIHJlc3VsdCA9IHB5dGVzdGVyLnJ1bnB5dGVzdChhZGRvcHRzKQogICAgcmVzdWx0LmFzc2VydF9vdXRjb21lcyhwYXNzZWQ9MSkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgYXNzZXJ0IFRydWUKPHxmaW1fZW5kfD4="]
["a0b4654bd6dfc29b3b0bedc41166fd7385dd5f24-1","a0b4654bd6dfc29b3b0bedc41166fd7385dd5f24","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCBwaW5xCgoKY2xhc3MgcXVlcnlhYmxlX3doZXJlX3Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKCiAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgc2VsZi5xdWVyeWFibGUgPSBwaW5xLmFzX3F1ZXJ5YWJsZShyYW5nZSgxLCAxMSkpCgogICAgZGVmIHRlc3Rfd2hlcmVfYWxsKHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzZWxmLnF1ZXJ5YWJsZS53aGVyZShsYW1iZGEgeDogeCA+IDApKSwgWwogICAgICAgICAgICAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMF0pCgogICAgZGVmIHRlc3Rfd2hlcmVfc29tZShzZWxmKToKPHxmaW1faG9sZXw+CiAgICBkZWYgdGVzdF93aGVyZV9ub25lKHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzZWxmLnF1ZXJ5YWJsZS53aGVyZShsYW1iZGEgeDogeCA+IDEwMCkpLCBbXSkKCiAgICBkZWYgdGVzdF93aGVyZV9hbGxfd2l0aF9pbmRleChzZWxmKToKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc2VsZi5xdWVyeWFibGUud2hlcmUobGFtYmRhIHgsIHk6IHkgPCAxMCkpLCBbCiAgICAgICAgICAgIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXSkKCiAgICBkZWYgdGVzdF93aGVyZV9zb21lX3dpdGhfaW5kZXgoc2VsZik6CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHNlbGYucXVlcnlhYmxlLndoZXJlKAogICAgICAgICAgICBsYW1iZGEgeCwgeTogeSAlIDIgPT0gMCkpLCBbMSwgMywgNSwgNywgOV0pCgogICAgZGVmIHRlc3Rfd2hlcmVfbm9uZV93aXRoX2luZGV4KHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzZWxmLnF1ZXJ5YWJsZS53aGVyZShsYW1iZGEgeCwgeTogeSA+IDEwMCkpLCBbXSkKCiAgICBkZWYgdGVzdF93aGVyZV9wcmVkaWNhdGVfdHlwZV9lcnJvcihzZWxmKToKICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucXVlcnlhYmxlLndoZXJlLCAxMDApCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHNlbGYucXVlcnlhYmxlLndoZXJlKAogICAgICAgICAgICBsYW1iZGEgeDogeCA8IDYpKSwgWzEsIDIsIDMsIDQsIDVdKQoKPHxmaW1fZW5kfD4="]
["47d46463b4600caeb235ef05c4e393da180e5087-5","47d46463b4600caeb235ef05c4e393da180e5087","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nOiB1dGYtOAojIENvcHlyaWdodCAyMDEzIEFicmFtIEhpbmRsZQojIAo8fGZpbV9lbmR8Pg=="]
["c233b88ba2e34d103632fb88665e44a0f9ddc9cb-4","c233b88ba2e34d103632fb88665e44a0f9ddc9cb","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDIuMS4yIG9uIDIwMTgtMTEtMTYgMDM6MzkKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCjx8ZmltX2hvbGV8PgogICAgXQoKICAgIG9wZXJhdGlvbnMgPSBbCiAgICAgICAgbWlncmF0aW9ucy5SZW5hbWVGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nb3JkZXJpdGVtJywKICAgICAgICAgICAgb2xkX25hbWU9J2l0ZW1zJywKICAgICAgICAgICAgbmV3X25hbWU9J2l0ZW0nLAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5SZW5hbWVGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nb3JkZXJpdGVtJywKICAgICAgICAgICAgb2xkX25hbWU9J29yZGVycycsCiAgICAgICAgICAgIG5ld19uYW1lPSdvcmRlcicsCiAgICAgICAgKSwKICAgIF0KPHxmaW1fc3VmZml4fD4KICAgICAgICAoJ2FwaScsICcwMDA2X2F1dG9fMjAxODExMTBfMDAzNicpLAo8fGZpbV9lbmR8Pg=="]
["5ffe99927d20626ad2cee1aa7af0fc1ce5386977-2","5ffe99927d20626ad2cee1aa7af0fc1ce5386977","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMCBYYW5hZHUgUXVhbnR1bSBUZWNobm9sb2dpZXMgSW5jLgoKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgojICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwgZmluZF9wYWNrYWdlcwppbXBvcnQgb3MKCndpdGggb3BlbigicGVubnlsYW5lX29ycXVlc3RyYS9fdmVyc2lvbi5weSIpIGFzIGY6CiAgICB2ZXJzaW9uID0gZi5yZWFkbGluZXMoKVstMV0uc3BsaXQoKVstMV0uc3RyaXAoIlwiJyIpCgpyZXF1aXJlbWVudHMgPSBbInB5eWFtbCIsICJwZW5ueWxhbmU+PTAuMTUiXQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgppbmZvID0gewogICAgJ25hbWUnOiAnUGVubnlMYW5lLU9ycXVlc3RyYScsCiAgICAndmVyc2lvbic6IHZlcnNpb24sCjx8ZmltX2VuZHw+"]
["9a04756947ef4d554bde059bc13e18febfdc0b43-1","9a04756947ef4d554bde059bc13e18febfdc0b43","PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRhY2xhc3NlcyBpbXBvcnQgZGF0YWNsYXNzCgpmcm9tIC4gaW1wb3J0IF90eXBpbmdzCgpmcm9tIC5fdnBrX2V4dHJhY3RvciBpbXBvcnQgVnBrRXh0cmFjdG9yCgoKQGRhdGFjbGFzcyhlcT1GYWxzZSwgcmVwcj1GYWxzZSkKY2xhc3MgU3RpY2tlclBhdGNoQ29sbGVjdG9yOgogICAgIiIiQ29sbGVjdCBzdGlja2VyIGtpdHMgOikiIiIKCiAgICBwYWs6IFZwa0V4dHJhY3RvcgoKICAgIGl0ZW1zX2dhbWU6IF90eXBpbmdzLklURU1TX0dBTUUKICAgIGNzZ29fZW5nbGlzaDogX3R5cGluZ3MuQ1NHT19FTkdMSVNICgogICAgU1RJQ0tFUl9GSVhfTkFNRVM6IHR1cGxlW3R1cGxlW3N0ciwgc3RyXV0gPSAoKCJkaWduaXRhcyIsICJ0ZWFtZGlnbml0YXMiKSwpCgogICAgZGVmIF9maXhfc3RpY2tlcl9uYW1lKHNlbGYsIHN0aWNrZXJfbmFtZTogc3RyKSAtPiBzdHI6CiAgICAgICAgIiIiRml4IHN0aWNrZXIgbmFtZSBpbmNvbnN0YW5jeS4gVmFsdmUncyAnZ29vZCcgd29yay4uLiIiIgogICAgICAgIGZvciBzdGlja2VyX25hbWVzIGluIHNlbGYuU1RJQ0tFUl9GSVhfTkFNRVM6CiAgICAgICAgICAgIGlmIHN0aWNrZXJfbmFtZXNbMF0gaW4gc3RpY2tlcl9uYW1lOgogICAgICAgICAgICAgICAgcmV0dXJuIHN0aWNrZXJfbmFtZS5yZXBsYWNlKHN0aWNrZXJfbmFtZXNbMF0sIHN0aWNrZXJfbmFtZXNbMV0pCgogICAgZGVmIF9wYXJzZV9pdGVtKHNlbGYsIHN0aWNrZXJfa2l0OiBkaWN0W3N0ciwgc3RyXSwgaXRlbV90eXBlczogc3RyLCBtYXRlcmlhbF9rZXk6IHN0cikgLT4gZGljdDoKICAgICAgICBpdGVtID0ge30KICAgICAgICB0cnk6CiAgICAgICAgICAgIGl0ZW1bIm5hbWUiXSA9IHNlbGYuY3Nnb19lbmdsaXNoW3N0aWNrZXJfa2l0WyJpdGVtX25hbWUiXVsxOl0ubG93ZXIoKV0KICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgIGl0ZW1bIm5hbWUiXSA9IHNlbGYuY3Nnb19lbmdsaXNoW3NlbGYuX2ZpeF9zdGlja2VyX25hbWUoc3RpY2tlcl9raXRbIml0ZW1fbmFtZSJdWzE6XS5sb3dlcigpKV0KCiAgICAgICAgaXRlbVsiaW1hZ2UiXSA9IHNlbGYucGFrLmdldF9pbWFnZV91cmwoaXRlbV90eXBlcywgc3RpY2tlcl9raXRbbWF0ZXJpYWxfa2V5ICsgIl9tYXRlcmlhbCJdKQogICAgICAgICMgaW1hZ2VfdXJsX2xhcmdlID0gc2VsZi5fZ2V0X2ltYWdlX3VybChzdGlja2VyX2tpdFsnc3RpY2tlcl9tYXRlcmlhbCddLCBsYXJnZT1UcnVlKQoKICAgICAgICByZXR1cm4gaXRlbQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIF9wYXJzZV90aW50cyhzZWxmKToKICAgICAgICB0aW50cyA9IHt9CiAgICAgICAgZm9yIHRpbnRfZGF0YSBpbiBzZWxmLml0ZW1zX2dhbWVbImdyYWZmaXRpX3RpbnRzIl0udmFsdWVzKCk6CiAgICAgICAgICAgIHRpbnRzW3RpbnRfZGF0YVsiaWQiXV0gPSBzZWxmLmNzZ29fZW5nbGlzaFsiQXR0cmliX1NwcmF5VGludFZhbHVlXyIubG93ZXIoKSArIHRpbnRfZGF0YVsiaWQiXV0KPHxmaW1fZW5kfD4="]
["198cf86e46333fb8bcf3127a25dec5254ba28144-1","198cf86e46333fb8bcf3127a25dec5254ba28144","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNsaWNrCmZyb20gd2luMzJjb20gaW1wb3J0IGNsaWVudCBhcyBjb20KZnJvbSB3aW4zMmNvbS5jbGllbnQgaW1wb3J0IGNvbnN0YW50cwpmcm9tIHB5d2ludHlwZXMgaW1wb3J0IGNvbV9lcnJvcgpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdApmcm9tIHBrZ19yZXNvdXJjZXMgaW1wb3J0IGl0ZXJfZW50cnlfcG9pbnRzCgp0cnk6CiAgICBXb3JkID0gY29tLmdlbmNhY2hlLkVuc3VyZURpc3BhdGNoKCdXb3JkLkFwcGxpY2F0aW9uJykKZXhjZXB0IGNvbV9lcnJvciBhcyBlOgogICAgcmFpc2UgY2xpY2suQ2xpY2tFeGNlcHRpb24oZS5leGNlcGluZm9bMl0pCmV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgIHJhaXNlIGNsaWNrLkNsaWNrRXhjZXB0aW9uKCJFcnJvciBsb2FkaW5nIFdvcmQuQXBwbGljYXRpb24iKQoKQGNsaWNrLmNvbW1hbmQoKQpAY2xpY2suYXJndW1lbnQoJ2lucHV0X3BhdGgnLCB0eXBlPWNsaWNrLlBhdGgoZXhpc3RzPVRydWUpKQpkZWYgbWFpbihpbnB1dF9wYXRoKToKICAgIGRvYyA9IE5vbmUKICAgIHRyeToKICAgICAgICBwcmludCgnTG9hZGluZyBmcm9tIEhUTUwgdGVtcGxhdGU6JywgaW5wdXRfcGF0aCkKICAgICAgICBkb2MgPSBXb3JkLkRvY3VtZW50cy5BZGQoaW5wdXRfcGF0aCwgVmlzaWJsZT1GYWxzZSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZXhjZXB0IGNvbV9lcnJvciBhcyBlOgogICAgICAgIHJhaXNlIGNsaWNrLkNsaWNrRXhjZXB0aW9uKGUuZXhjZXBpbmZvWzJdKQoKICAgICMgVE9ETzogQ0xJIG9wdGlvbiBmb3Igb3V0cHV0IHBhdGgKPHxmaW1fZW5kfD4="]
["8b7f1b2cabb163e362665eb3ca4c18e79de92cb8-1","8b7f1b2cabb163e362665eb3ca4c18e79de92cb8","PHxmaW1fcHJlZml4fD4KZnJvbSAuY29udGV4dCBpbXBvcnQgbWFuZ28KZnJvbSAuZGF0YSBpbXBvcnQgbG9hZF9yb290X2JhbmsKZnJvbSAuZmFrZXMgaW1wb3J0IGZha2VfYWNjb3VudF9pbmZvLCBmYWtlX3NlZWRlZF9wdWJsaWNfa2V5Cgpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQpmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKZnJvbSBzb2xhbmEucHVibGlja2V5IGltcG9ydCBQdWJsaWNLZXkKCgpkZWYgdGVzdF9ub2RlX2JhbmtfY29uc3RydWN0b3IoKToKICAgIGFjY291bnRfaW5mbyA9IGZha2VfYWNjb3VudF9pbmZvKGZha2Vfc2VlZGVkX3B1YmxpY19rZXkoIm5vZGUgYmFuayIpKQogICAgbWV0YV9kYXRhID0gbWFuZ28uTWV0YWRhdGEobWFuZ28ubGF5b3V0cy5EQVRBX1RZUEUucGFyc2UoYnl0ZWFycmF5KGInXHgwMycpKSwgbWFuZ28uVmVyc2lvbi5WMSwgVHJ1ZSkKICAgIGRlcG9zaXRzID0gRGVjaW1hbCgxMDAwKQogICAgYm9ycm93cyA9IERlY2ltYWwoMTAwKQogICAgdmF1bHQgPSBmYWtlX3NlZWRlZF9wdWJsaWNfa2V5KCJ2YXVsdCIpCgogICAgYWN0dWFsID0gbWFuZ28uTm9kZUJhbmsoYWNjb3VudF9pbmZvLCBtYW5nby5WZXJzaW9uLlYxLCBtZXRhX2RhdGEsIGRlcG9zaXRzLCBib3Jyb3dzLCB2YXVsdCkKICAgIGFzc2VydCBhY3R1YWwgaXMgbm90IE5vbmUKICAgIGFzc2VydCBhY3R1YWwubG9nZ2VyIGlzIG5vdCBOb25lCiAgICBhc3NlcnQgYWN0dWFsLmFjY291bnRfaW5mbyA9PSBhY2NvdW50X2luZm8KICAgIGFzc2VydCBhY3R1YWwuYWRkcmVzcyA9PSBmYWtlX3NlZWRlZF9wdWJsaWNfa2V5KCJub2RlIGJhbmsiKQogICAgYXNzZXJ0IGFjdHVhbC5tZXRhX2RhdGEgPT0gbWV0YV9kYXRhCiAgICBhc3NlcnQgYWN0dWFsLm1ldGFfZGF0YS5kYXRhX3R5cGUgPT0gbWFuZ28ubGF5b3V0cy5EQVRBX1RZUEUuTm9kZUJhbmsKICAgIGFzc2VydCBhY3R1YWwuZGVwb3NpdHMgPT0gZGVwb3NpdHMKICAgIGFzc2VydCBhY3R1YWwuYm9ycm93cyA9PSBib3Jyb3dzCiAgICBhc3NlcnQgYWN0dWFsLnZhdWx0ID09IGZha2Vfc2VlZGVkX3B1YmxpY19rZXkoInZhdWx0IikKCgpkZWYgdGVzdF9yb290X2JhbmtfY29uc3RydWN0b3IoKToKICAgIGFjY291bnRfaW5mbyA9IGZha2VfYWNjb3VudF9pbmZvKGZha2Vfc2VlZGVkX3B1YmxpY19rZXkoInJvb3QgYmFuayIpKQogICAgbWV0YV9kYXRhID0gbWFuZ28uTWV0YWRhdGEobWFuZ28ubGF5b3V0cy5EQVRBX1RZUEUucGFyc2UoYnl0ZWFycmF5KGInXHgwMicpKSwgbWFuZ28uVmVyc2lvbi5WMSwgVHJ1ZSkKICAgIG9wdGltYWxfdXRpbCA9IERlY2ltYWwoIjAuNyIpCiAgICBvcHRpbWFsX3JhdGUgPSBEZWNpbWFsKCIwLjA2IikKICAgIG1heF9yYXRlID0gRGVjaW1hbCgiMS41IikKICAgIG5vZGVfYmFuayA9IGZha2Vfc2VlZGVkX3B1YmxpY19rZXkoIm5vZGUgYmFuayIpCiAgICBkZXBvc2l0X2luZGV4ID0gRGVjaW1hbCg5ODc2NSkKICAgIGJvcnJvd19pbmRleCA9IERlY2ltYWwoMTIzNDUpCiAgICB0aW1lc3RhbXAgPSBkYXRldGltZS5ub3coKQoKICAgIGFjdHVhbCA9IG1hbmdvLlJvb3RCYW5rKGFjY291bnRfaW5mbywgbWFuZ28uVmVyc2lvbi5WMSwgbWV0YV9kYXRhLCBvcHRpbWFsX3V0aWwsIG9wdGltYWxfcmF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9yYXRlLCBbbm9kZV9iYW5rXSwgZGVwb3NpdF9pbmRleCwgYm9ycm93X2luZGV4LCB0aW1lc3RhbXApCiAgICBhc3NlcnQgYWN0dWFsIGlzIG5vdCBOb25lCiAgICBhc3NlcnQgYWN0dWFsLmxvZ2dlciBpcyBub3QgTm9uZQogICAgYXNzZXJ0IGFjdHVhbC5hY2NvdW50X2luZm8gPT0gYWNjb3VudF9pbmZvCiAgICBhc3NlcnQgYWN0dWFsLmFkZHJlc3MgPT0gZmFrZV9zZWVkZWRfcHVibGljX2tleSgicm9vdCBiYW5rIikKICAgIGFzc2VydCBhY3R1YWwubWV0YV9kYXRhID09IG1ldGFfZGF0YQogICAgYXNzZXJ0IGFjdHVhbC5tZXRhX2RhdGEuZGF0YV90eXBlID09IG1hbmdvLmxheW91dHMuREFUQV9UWVBFLlJvb3RCYW5rCiAgICBhc3NlcnQgYWN0dWFsLm9wdGltYWxfdXRpbCA9PSBvcHRpbWFsX3V0aWwKICAgIGFzc2VydCBhY3R1YWwub3B0aW1hbF9yYXRlID09IG9wdGltYWxfcmF0ZQogICAgYXNzZXJ0IGFjdHVhbC5tYXhfcmF0ZSA9PSBtYXhfcmF0ZQogICAgYXNzZXJ0IGFjdHVhbC5ub2RlX2JhbmtzWzBdID09IG5vZGVfYmFuawo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBhc3NlcnQgYWN0dWFsLmRlcG9zaXRfaW5kZXggPT0gZGVwb3NpdF9pbmRleAogICAgYXNzZXJ0IGFjdHVhbC5ib3Jyb3dfaW5kZXggPT0gYm9ycm93X2luZGV4CiAgICBhc3NlcnQgYWN0dWFsLmxhc3RfdXBkYXRlZCA9PSB0aW1lc3RhbXAKCjx8ZmltX2VuZHw+"]
["de4796a5b9469698b90b8fd656c14310c438cb31-3","de4796a5b9469698b90b8fd656c14310c438cb31","PHxmaW1fcHJlZml4fD4KIiIiTGlicmFyeSBmb3IgdGhlIEFTNzI2MiBWaXNibGUgTGlnaHQgU3BlY3RyYWwgU2Vuc29yLiIiIgppbXBvcnQgdGltZQppbXBvcnQgc3RydWN0CgppbXBvcnQgc21idXMKZnJvbSBpMmNkZXZpY2UgaW1wb3J0IERldmljZSwgUmVnaXN0ZXIsIEJpdEZpZWxkLCBfaW50X3RvX2J5dGVzCmZyb20gaTJjZGV2aWNlLmFkYXB0ZXIgaW1wb3J0IEFkYXB0ZXIsIExvb2t1cEFkYXB0ZXIKCl9fdmVyc2lvbl9fID0gJzAuMC4yJwoKCmNsYXNzIGFzNzI2MlZpcnR1YWxSZWdpc3RlckJ1cygpOgogICAgIiIiQVM3MjYyIFZpcnR1YWwgUmVnaXN0ZXIuCgogICAgVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSB3YWNreSB2aXJ0dWFsIHJlZ2lzdGVyIHNldHVwCiAgICBvZiB0aGUgQVM3MjYyIGFubmQgYWxsb3dzIGkyY2RldmljZS5EZXZpY2UgdG8gImp1c3Qgd29yayIKICAgIHdpdGhvdXQgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IGhvdyByZWdpc3RlcnMgYXJlIGFjdHVhbGx5CiAgICByZWFkIG9yIHdyaXR0ZW4gdW5kZXIgdGhlIGhvb2QuCgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1cz0xKToKICAgICAgICAiIiJJbml0aWFsaXNlIHZpcnR1YWwgcmVnaXN0ZXIgY2xhc3MuCgogICAgICAgIDpwYXJhbSBidXM6IFNNQnVzIGJ1cyBJRAoKICAgICAgICAiIiIKICAgICAgICBzZWxmLl9pMmNfYnVzID0gc21idXMuU01CdXMoYnVzKQoKICAgIGRlZiBnZXRfc3RhdHVzKHNlbGYsIGFkZHJlc3MpOgogICAgICAgICIiIlJldHVybiB0aGUgQVM3MjYyIHN0YXR1cyByZWdpc3Rlci4iIiIKICAgICAgICByZXR1cm4gc2VsZi5faTJjX2J1cy5yZWFkX2J5dGVfZGF0YShhZGRyZXNzLCAweDAwKQoKICAgIGRlZiB3cml0ZV9pMmNfYmxvY2tfZGF0YShzZWxmLCBhZGRyZXNzLCByZWdpc3RlciwgdmFsdWVzKToKICAgICAgICAiIiJSaWdodCBvbmUgb3IgbW9yZSB2YWx1ZXMgdG8gQVM3MjYyIHZpcnR1YWwgcmVnaXN0ZXJzLiIiIgogICAgICAgIGZvciBvZmZzZXQgaW4gcmFuZ2UobGVuKHZhbHVlcykpOgogICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgaWYgKHNlbGYuZ2V0X3N0YXR1cyhhZGRyZXNzKSAmIDBiMTApID09IDA6CiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgc2VsZi5faTJjX2J1cy53cml0ZV9ieXRlX2RhdGEoYWRkcmVzcywgMHgwMSwgcmVnaXN0ZXIgfCAweDgwKQogICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgaWYgKHNlbGYuZ2V0X3N0YXR1cyhhZGRyZXNzKSAmIDBiMTApID09IDA6CiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgc2VsZi5faTJjX2J1cy53cml0ZV9ieXRlX2RhdGEoYWRkcmVzcywgMHgwMSwgdmFsdWVzW29mZnNldF0pCgogICAgZGVmIHJlYWRfaTJjX2Jsb2NrX2RhdGEoc2VsZiwgYWRkcmVzcywgcmVnaXN0ZXIsIGxlbmd0aCk6CiAgICAgICAgIiIiUmVhZCBvbmUgb3IgbW9yZSB2YWx1ZXMgZnJvbSBBUzcyNjIgdmlydHVhbCByZWdpc3RlcnMuIiIiCiAgICAgICAgcmVzdWx0ID0gW10KICAgICAgICBmb3Igb2Zmc2V0IGluIHJhbmdlKGxlbmd0aCk6CiAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICBpZiAoc2VsZi5nZXRfc3RhdHVzKGFkZHJlc3MpICYgMGIxMCkgPT0gMDoKICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBzZWxmLl9pMmNfYnVzLndyaXRlX2J5dGVfZGF0YShhZGRyZXNzLCAweDAxLCByZWdpc3RlciArIG9mZnNldCkKICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgIGlmIChzZWxmLmdldF9zdGF0dXMoYWRkcmVzcykgJiAwYjAxKSA9PSAxOgogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc2VsZi5faTJjX2J1cy5yZWFkX2J5dGVfZGF0YShhZGRyZXNzLCAweDAyKSkKICAgICAgICByZXR1cm4gcmVzdWx0CgoKY2xhc3MgRldWZXJzaW9uQWRhcHRlcihBZGFwdGVyKToKICAgICIiIkNvbnZlcnQgdGhlIEFTNzI2MiBmaXJtd2FyZSB2ZXJzaW9uIG51bWJlciB0byBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZy4iIiIKCiAgICBkZWYgX2RlY29kZShzZWxmLCB2YWx1ZSk6CiAgICAgICAgbWFqb3JfdmVyc2lvbiA9ICh2YWx1ZSAmIDB4MDBGMCkgPj4gNAogICAgICAgIG1pbm9yX3ZlcnNpb24gPSAoKHZhbHVlICYgMHgwMDBGKSA8PCAyKSB8ICgodmFsdWUgJiAwYjExMDAwMDAwMDAwMDAwMDApID4+IDE0KQogICAgICAgIHN1Yl92ZXJzaW9uID0gKHZhbHVlICYgMGIwMDExMTExMTAwMDAwMDAwKSA+PiA4CiAgICAgICAgcmV0dXJuICd7fS57fS57fScuZm9ybWF0KG1ham9yX3ZlcnNpb24sIG1pbm9yX3ZlcnNpb24sIHN1Yl92ZXJzaW9uKQoKCmNsYXNzIEZsb2F0QWRhcHRlcihBZGFwdGVyKToKICAgICIiIkNvbnZlcnQgYSA0IGJ5dGUgcmVnaXN0ZXIgc2V0IGludG8gYSBmbG9hdC4iIiIKCiAgICBkZWYgX2RlY29kZShzZWxmLCB2YWx1ZSk6CiAgICAgICAgYiA9IF9pbnRfdG9fYnl0ZXModmFsdWUsIDQpCiAgICAgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soJz5mJywgYnl0ZWFycmF5KGIpKVswXQoKCmNsYXNzIEludGVncmF0aW9uVGltZUFkYXB0ZXIoQWRhcHRlcik6CiAgICAiIiJTY2FsZSBpbnRlZ3JhdGlvbiB0aW1lIGluIG1zIHRvIExTQnMuIiIiCgogICAgZGVmIF9kZWNvZGUoc2VsZiwgdmFsdWUpOgogICAgICAgIHJldHVybiB2YWx1ZSAvIDIuOAoKICAgIGRlZiBfZW5jb2RlKHNlbGYsIHZhbHVlKToKICAgICAgICByZXR1cm4gaW50KHZhbHVlICogMi44KSAmIDB4ZmYKCgpfYXM3MjYyID0gRGV2aWNlKDB4NDksIGkyY19kZXY9YXM3MjYyVmlydHVhbFJlZ2lzdGVyQnVzKDEpLCBiaXRfd2lkdGg9OCwgcmVnaXN0ZXJzPSgKICAgIFJlZ2lzdGVyKCdWRVJTSU9OJywgMHgwMCwgZmllbGRzPSgKICAgICAgICBCaXRGaWVsZCgnaHdfdHlwZScsIDB4RkYwMDAwMDApLAogICAgICAgIEJpdEZpZWxkKCdod192ZXJzaW9uJywgMHgwMEZGMDAwMCksCiAgICAgICAgQml0RmllbGQoJ2Z3X3ZlcnNpb24nLCAweDAwMDBGRkZGLCBhZGFwdGVyPUZXVmVyc2lvbkFkYXB0ZXIoKSksCiAgICApLCBiaXRfd2lkdGg9MzIsIHJlYWRfb25seT1UcnVlKSwKICAgIFJlZ2lzdGVyKCdDT05UUk9MJywgMHgwNCwgZmllbGRzPSgKICAgICAgICBCaXRGaWVsZCgncmVzZXQnLCAwYjEwMDAwMDAwKSwKICAgICAgICBCaXRGaWVsZCgnaW50ZXJydXB0JywgMGIwMTAwMDAwMCksCiAgICAgICAgQml0RmllbGQoJ2dhaW5feCcsIDBiMDAxMTAwMDAsIGFkYXB0ZXI9TG9va3VwQWRhcHRlcih7CiAgICAgICAgICAgIDE6IDBiMDAsIDMuNzogMGIwMSwgMTY6IDBiMTAsIDY0OiAwYjExCiAgICAgICAgfSkpLAogICAgICAgIEJpdEZpZWxkKCdtZWFzdXJlbWVudF9tb2RlJywgMGIwMDAwMTEwMCksCjx8ZmltX2hvbGV8PgogICAgKSksCiAgICBSZWdpc3RlcignSU5URUdSQVRJT05fVElNRScsIDB4MDUsIGZpZWxkcz0oCiAgICAgICAgQml0RmllbGQoJ21zJywgMHhGRiwgYWRhcHRlcj1JbnRlZ3JhdGlvblRpbWVBZGFwdGVyKCkpLAogICAgKSksCiAgICBSZWdpc3RlcignVEVNUEVSQVRVUkUnLCAweDA2LCBmaWVsZHM9KAogICAgICAgIEJpdEZpZWxkKCdkZWdyZWVzX2MnLCAweEZGKSwKICAgICkpLAogICAgUmVnaXN0ZXIoJ0xFRF9DT05UUk9MJywgMHgwNywgZmllbGRzPSgKICAgICAgICBCaXRGaWVsZCgnaWxsdW1pbmF0aW9uX2N1cnJlbnRfbGltaXRfbWEnLCAwYjAwMTEwMDAwLCBhZGFwdGVyPUxvb2t1cEFkYXB0ZXIoewogICAgICAgICAgICAxMi41OiAwYjAwLCAyNTogMGIwMSwgNTA6IDBiMTAsIDEwMDogMGIxMQogICAgICAgIH0pKSwKICAgICAgICBCaXRGaWVsZCgnaWxsdW1pbmF0aW9uX2VuYWJsZScsIDBiMDAwMDEwMDApLAogICAgICAgIEJpdEZpZWxkKCdpbmRpY2F0b3JfY3VycmVudF9saW1pdF9tYScsIDBiMDAwMDAxMTAsIGFkYXB0ZXI9TG9va3VwQWRhcHRlcih7CiAgICAgICAgICAgIDE6IDBiMDAsIDI6IDBiMDEsIDQ6IDBiMTAsIDg6IDBiMTEKICAgICAgICB9KSksCiAgICAgICAgQml0RmllbGQoJ2luZGljYXRvcl9lbmFibGUnLCAwYjAwMDAwMDAxKSwKICAgICkpLAogICAgUmVnaXN0ZXIoJ0RBVEEnLCAweDA4LCBmaWVsZHM9KAogICAgICAgIEJpdEZpZWxkKCd2JywgMHhGRkZGMDAwMDAwMDAwMDAwMDAwMDAwMDApLAogICAgICAgIEJpdEZpZWxkKCdiJywgMHgwMDAwRkZGRjAwMDAwMDAwMDAwMDAwMDApLAogICAgICAgIEJpdEZpZWxkKCdnJywgMHgwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDApLAogICAgICAgIEJpdEZpZWxkKCd5JywgMHgwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDApLAogICAgICAgIEJpdEZpZWxkKCdvJywgMHgwMDAwMDAwMDAwMDAwMDAwRkZGRjAwMDApLAogICAgICAgIEJpdEZpZWxkKCdyJywgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMEZGRkYpLAogICAgKSwgYml0X3dpZHRoPTk2KSwKICAgIFJlZ2lzdGVyKCdDQUxJQlJBVEVEX0RBVEEnLCAweDE0LCBmaWVsZHM9KAogICAgICAgIEJpdEZpZWxkKCd2JywgMHhGRkZGRkZGRiA8PCAoMzIgKiA1KSwgYWRhcHRlcj1GbG9hdEFkYXB0ZXIoKSksCiAgICAgICAgQml0RmllbGQoJ2InLCAweEZGRkZGRkZGIDw8ICgzMiAqIDQpLCBhZGFwdGVyPUZsb2F0QWRhcHRlcigpKSwKICAgICAgICBCaXRGaWVsZCgnZycsIDB4RkZGRkZGRkYgPDwgKDMyICogMyksIGFkYXB0ZXI9RmxvYXRBZGFwdGVyKCkpLAogICAgICAgIEJpdEZpZWxkKCd5JywgMHhGRkZGRkZGRiA8PCAoMzIgKiAyKSwgYWRhcHRlcj1GbG9hdEFkYXB0ZXIoKSksCiAgICAgICAgQml0RmllbGQoJ28nLCAweEZGRkZGRkZGIDw8ICgzMiAqIDEpLCBhZGFwdGVyPUZsb2F0QWRhcHRlcigpKSwKICAgICAgICBCaXRGaWVsZCgncicsIDB4RkZGRkZGRkYgPDwgKDMyICogMCksIGFkYXB0ZXI9RmxvYXRBZGFwdGVyKCkpLAogICAgKSwgYml0X3dpZHRoPTE5MiksCikpCgojIFRPRE8gOiBJbnRlZ3JhdGUgaW50byBpMmNkZXZpY2Ugc28gdGhhdCBMb29rdXBBZGFwdGVyIGZpZWxkcyBjYW4gYWx3YXlzIGJlIGV4cG9ydGVkIHRvIGNvbnN0YW50cwojIEl0ZXJhdGUgdGhyb3VnaCBhbGwgcmVnaXN0ZXIgZmllbGRzIGFuZCBleHBvcnQgdGhlaXIgbG9va3VwIHRhYmxlcyB0byBjb25zdGFudHMKZm9yIHJlZ2lzdGVyIGluIF9hczcyNjIucmVnaXN0ZXJzOgogICAgcmVnaXN0ZXIgPSBfYXM3MjYyLnJlZ2lzdGVyc1tyZWdpc3Rlcl0KICAgIGZvciBmaWVsZCBpbiByZWdpc3Rlci5maWVsZHM6CiAgICAgICAgZmllbGQgPSByZWdpc3Rlci5maWVsZHNbZmllbGRdCiAgICAgICAgaWYgaXNpbnN0YW5jZShmaWVsZC5hZGFwdGVyLCBMb29rdXBBZGFwdGVyKToKICAgICAgICAgICAgZm9yIGtleSBpbiBmaWVsZC5hZGFwdGVyLmxvb2t1cF90YWJsZToKICAgICAgICAgICAgICAgIHZhbHVlID0gZmllbGQuYWRhcHRlci5sb29rdXBfdGFibGVba2V5XQogICAgICAgICAgICAgICAgbmFtZSA9ICdBUzcyNjJfe3JlZ2lzdGVyfV97ZmllbGR9X3trZXl9Jy5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXI9cmVnaXN0ZXIubmFtZSwKICAgICAgICAgICAgICAgICAgICBmaWVsZD1maWVsZC5uYW1lLAogICAgICAgICAgICAgICAgICAgIGtleT1rZXkKICAgICAgICAgICAgICAgICkudXBwZXIoKQogICAgICAgICAgICAgICAgbG9jYWxzKClbbmFtZV0gPSBrZXkKCgpkZWYgc29mdF9yZXNldCgpOgogICAgIiIiU2V0IHRoZSBzb2Z0IHJlc2V0IHJlZ2lzdGVyIGJpdCBvZiB0aGUgQVM3MjYyLiIiIgogICAgX2FzNzI2Mi5DT05UUk9MLnNldF9yZXNldCgxKQogICAgIyBQb2xsaW5nIGZvciB0aGUgc3RhdGUgb2YgdGhlIHJlc2V0IGZsYWcgZG9lcyBub3Qgd29yayBoZXJlCiAgICAjIHNpbmNlIHRoZSBmcmFnaWxlIHZpcnR1YWwgcmVnaXN0ZXIgc3RhdGUgbWFjaGluZSBjYW5ub3QKICAgICMgcmVzcG9uZCB3aGlsZSBpbiBhIHNvZnQgcmVzZXQgY29uZGl0aW9uCiAgICAjIFNvLCBqdXN0IHdhaXQgbG9uZyBlbm91Z2ggZm9yIGl0IHRvIHJlc2V0IGZ1bGx5Li4uCiAgICB0aW1lLnNsZWVwKDIuMCkKCgpjbGFzcyBDYWxpYnJhdGVkVmFsdWVzOgogICAgIiIiU3RvcmUgdGhlIDYgYmFuZCBzcGVjdHJhbCB2YWx1ZXMuIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlZCwgb3JhbmdlLCB5ZWxsb3csIGdyZWVuLCBibHVlLCB2aW9sZXQpOiAgIyBub3FhIEQxMDcKICAgICAgICBzZWxmLnJlZCA9IHJlZAogICAgICAgIHNlbGYub3JhbmdlID0gb3JhbmdlCiAgICAgICAgc2VsZi55ZWxsb3cgPSB5ZWxsb3cKICAgICAgICBzZWxmLmdyZWVuID0gZ3JlZW4KICAgICAgICBzZWxmLmJsdWUgPSBibHVlCiAgICAgICAgc2VsZi52aW9sZXQgPSB2aW9sZXQKCiAgICBkZWYgX19pdGVyX18oc2VsZik6ICAjIG5vcWEgRDEwNwogICAgICAgIGZvciBjb2xvdXIgaW4gWydyZWQnLCAnb3JhbmdlJywgJ3llbGxvdycsICdncmVlbicsICdibHVlJywgJ3Zpb2xldCddOgogICAgICAgICAgICB5aWVsZCBnZXRhdHRyKHNlbGYsIGNvbG91cikKCgpkZWYgZ2V0X2NhbGlicmF0ZWRfdmFsdWVzKHRpbWVvdXQ9MTApOgogICAgIiIiUmV0dXJuIGFuIGluc3RhbmNlIG9mIENhbGlicmF0ZWRWYWx1ZXMgY29udGFpbmluZyB0aGUgNiBzcGVjdHJhbCBiYW5kcy4iIiIKICAgIHRfc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgd2hpbGUgX2FzNzI2Mi5DT05UUk9MLmdldF9kYXRhX3JlYWR5KCkgPT0gMCBhbmQgKHRpbWUudGltZSgpIC0gdF9zdGFydCkgPD0gdGltZW91dDoKICAgICAgICBwYXNzCiAgICB3aXRoIF9hczcyNjIuQ0FMSUJSQVRFRF9EQVRBIGFzIERBVEE6CiAgICAgICAgcmV0dXJuIENhbGlicmF0ZWRWYWx1ZXMoREFUQS5nZXRfcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBVEEuZ2V0X28oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQVRBLmdldF95KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFUQS5nZXRfZygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBVEEuZ2V0X2IoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQVRBLmdldF92KCkpCgoKZGVmIHNldF9nYWluKGdhaW4pOgogICAgIiIiU2V0IHRoZSBnYWluIGFtb3VudCBvZiB0aGUgQVM3MjYyLgoKICAgIDpwYXJhbSBnYWluOiBnYWluIG11bHRpcGxpZXIsIG9uZSBvZiAxLCAzLjcsIDE2IG9yIDY0CgogICAgIiIiCiAgICBfYXM3MjYyLkNPTlRST0wuc2V0X2dhaW5feChnYWluKQoKCmRlZiBzZXRfbWVhc3VyZW1lbnRfbW9kZShtb2RlKToKICAgICIiIlNldCB0aGUgQVM3MjYyIG1lYXN1cmVtZW50IG1vZGUuCgogICAgOnBhcmFtIG1vZGU6IDAtMwoKICAgICIiIgogICAgX2FzNzI2Mi5DT05UUk9MLnNldF9tZWFzdXJlbWVudF9tb2RlKG1vZGUpCgoKZGVmIHNldF9pbnRlZ3JhdGlvbl90aW1lKHRpbWVfbXMpOgogICAgIiIiU2V0IHRoZSBBUzcyNjIgc2Vuc29yIGludGVncmF0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzLgoKICAgIDpwYXJhbSB0aW1lX21zOiBUaW1lIGluIG1pbGxpc2Vjb25kcyBmcm9tIDAgdG8gfjkxCgogICAgIiIiCiAgICBfYXM3MjYyLklOVEVHUkFUSU9OX1RJTUUuc2V0X21zKHRpbWVfbXMpCgoKZGVmIHNldF9pbGx1bWluYXRpb25fbGVkX2N1cnJlbnQoY3VycmVudCk6CiAgICAiIiJTZXQgdGhlIEFTNzI2MiBpbGx1bWluYXRpb24gTEVEIGN1cnJlbnQgaW4gbWlsbGlhbXBzLgoKICAgIDpwYXJhbSBjdXJyZW50OiBWYWx1ZSBpbiBtaWxsaWFtcHMsIG9uZSBvZiAxMi41LCAyNSwgNTAgb3IgMTAwCgogICAgIiIiCiAgICBfYXM3MjYyLkxFRF9DT05UUk9MLnNldF9pbGx1bWluYXRpb25fY3VycmVudF9saW1pdF9tYShjdXJyZW50KQoKCmRlZiBzZXRfaW5kaWNhdG9yX2xlZF9jdXJyZW50KGN1cnJlbnQpOgogICAgIiIiU2V0IHRoZSBBUzcyNjIgaW5kaWNhdG9yIExFRCBjdXJyZW50IGluIG1pbGxpYW1wcy4KCiAgICA6cGFyYW0gY3VycmVudDogVmFsdWUgaW4gbWlsbGlhbXBzLCBvbmUgb2YgMSwgMiwgNCBvciA4CgogICAgIiIiCiAgICBfYXM3MjYyLkxFRF9DT05UUk9MLnNldF9pbmRpY2F0b3JfY3VycmVudF9saW1pdF9tYShjdXJyZW50KQoKCmRlZiBzZXRfaWxsdW1pbmF0aW9uX2xlZChzdGF0ZSk6CiAgICAiIiJTZXQgdGhlIEFTNzI2MiBpbGx1bWluYXRpb24gTEVEIHN0YXRlLgoKICAgIDpwYXJhbSBzdGF0ZTogVHJ1ZSA9IE9uLCBGYWxzZSA9IE9mZgoKICAgICIiIgogICAgX2FzNzI2Mi5MRURfQ09OVFJPTC5zZXRfaWxsdW1pbmF0aW9uX2VuYWJsZShzdGF0ZSkKCgpkZWYgc2V0X2luZGljYXRvcl9sZWQoc3RhdGUpOgogICAgIiIiU2V0IHRoZSBBUzcyNjIgaW5kaWNhdG9yIExFRCBzdGF0ZS4KCiAgICA6cGFyYW0gc3RhdGU6IFRydWUgPSBPbiwgRmFsc2UgPSBPZmYKCiAgICAiIiIKICAgIF9hczcyNjIuTEVEX0NPTlRST0wuc2V0X2luZGljYXRvcl9lbmFibGUoc3RhdGUpCgoKZGVmIGdldF92ZXJzaW9uKCk6CiAgICAiIiJHZXQgdGhlIGhhcmR3YXJlIHR5cGUsIHZlcnNpb24gYW5kIGZpcm13YXJlIHZlcnNpb24gZnJvbSB0aGUgQVM3MjYyLiIiIgogICAgd2l0aCBfYXM3MjYyLlZFUlNJT04gYXMgVkVSU0lPTjoKICAgICAgICBmd192ZXJzaW9uID0gVkVSU0lPTi5nZXRfZndfdmVyc2lvbigpCiAgICAgICAgaHdfdmVyc2lvbiA9IFZFUlNJT04uZ2V0X2h3X3ZlcnNpb24oKQogICAgICAgIGh3X3R5cGUgPSBWRVJTSU9OLmdldF9od190eXBlKCkKCiAgICByZXR1cm4gaHdfdHlwZSwgaHdfdmVyc2lvbiwgZndfdmVyc2lvbgo8fGZpbV9zdWZmaXh8PgogICAgICAgIEJpdEZpZWxkKCdkYXRhX3JlYWR5JywgMGIwMDAwMDAxMCksCjx8ZmltX2VuZHw+"]
["260220d0443162084f54fad801858b566e9a8444-4","260220d0443162084f54fad801858b566e9a8444","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IFNlcXVlbmNlLCBJdGVyYWJsZSwgU2l6ZWQsIE9wdGlvbmFsLCBUeXBlVmFyLCBHZW5lcmF0b3IsIFR1cGxlCgpmcm9tIC5jb21tb24gaW1wb3J0IENoZWNrcG9pbnQsIHN1YmNoZWNrcG9pbnRzLCBTdGF0dXNNZXNzYWdlCgpUID0gVHlwZVZhcigiVCIpCgoKIyBub2luc3BlY3Rpb24gUHlVbnVzZWRMb2NhbApkZWYgZHVtbXlfY2hlY2twb2ludChwcm9ncmVzczogZmxvYXQsIHN0YXR1czogT3B0aW9uYWxbc3RyXSA9IE5vbmUpIC0+IE5vbmU6CiAgICByZXR1cm4KCgpkZWYgd2l0aF9wcm9ncmVzcyhzZXE6IEl0ZXJhYmxlW1RdLCBjaGVja3BvaW50OiBDaGVja3BvaW50LCBzaXplOiBPcHRpb25hbFtpbnRdID0gTm9uZSwgc3RhdHVzOiBPcHRpb25hbFtzdHJdID0gTm9uZSwKICAgICAgICAgICAgICAgICAgZGl2OiBpbnQgPSAxKSAtPiBHZW5lcmF0b3JbVCwgTm9uZSwgTm9uZV06CiAgICBjaGVja3BvaW50KDAsIHN0YXR1cyBvciAnJykKICAgIGlmIHNpemUgaXMgTm9uZToKICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzZXEsIFNpemVkKSwgJ2BzZXFgIG11c3QgYmUgYSBzZXF1ZW5jZSB1bmxlc3MgYHNpemVgIGlzIGdpdmVuJwogICAgICAgIHNpemUgPSBsZW4oc2VxKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZm9yIGksIGUgaW4gZW51bWVyYXRlKHNlcSk6CiAgICAgICAgeWllbGQgZQoKICAgICAgICBpZiBpICUgZGl2ID09IDA6Cjx8ZmltX2VuZHw+"]
["7216cdbf07e758015364c0e1503815baf4f39947-5","7216cdbf07e758015364c0e1503815baf4f39947","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cywgaW8KaW1wb3J0IHB5dGVzdApmcm9tIHt7IGNvb2tpZWN1dHRlci50b29sX25hbWVfc2x1ZyB9fS5fX21haW5fXyBpbXBvcnQgbWFpbgoKCmRlZiB0ZXN0X3t7IGNvb2tpZWN1dHRlci50b29sX25hbWVfc2x1ZyB9fV9fX21haW5fX2dvb2QoKToKICAgIHdpdGggaW8uU3RyaW5nSU8oKSBhcyBmYWtlX3N0ZGVycjoKICAgICAgICBzeXMuYXJndiA9IFtzeXMuYXJndlswXSwgIi1oIl0KICAgICAgICBvcmlnX3N0ZGVyciA9IHN5cy5zdGRlcnIKICAgICAgICBzeXMuc3RkZXJyID0gZmFrZV9zdGRlcnIKCiAgICAgICAgd2l0aCBweXRlc3QucmFpc2VzKFN5c3RlbUV4aXQpIGFzIGU6CiAgICAgICAgICAgIG1haW4oc3lzLmFyZ3YpCiAgICAgICAgICAgIGFzc2VydCBzdHIoZS52YWx1ZSkgPT0gJzAnCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgYXNzZXJ0ICdVc2FnZTogaW5mbyBbT1BUSU9OU10gJyBpbiBzeXMuc3RkZXJyLmdldHZhbHVlKCkKPHxmaW1fZW5kfD4="]
["ef525eb13a79cc7f46e739a407bdf0350bc3ef99-3","ef525eb13a79cc7f46e739a407bdf0350bc3ef99","PHxmaW1fcHJlZml4fD4KZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCgoKZGVmIGV4Y2VwdGlvbl9jYXRjaGVyKGZ1bmMpOgogICAgIiIiCiAgICBiYXNpY2FsbHkganVzdCB1c2VkIHRvIGNhdGNoIGFuZCBpZ25vcmUgZXhjZXB0aW9ucyB3aGVuIHJ1bm5pbmcgaW4gYnVsay4KICAgIFRoaXMgcHJldmVudHMgdGhlIHdob2xlIHByb2dyYW0gc3RvcHBpbmcgd2hlbiBqdXN0IG9uZSBtb2xlY3VsZSBpcyAnYnJva2VuJy4KICAgICIiIgoKICAgIEB3cmFwcyhmdW5jKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgd3JhcHBlcigqYXJncywgKiprd2FyZ3MpOgoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3YXJncykKPHxmaW1fZW5kfD4="]
["27b5295eb5e4d1baee0c9272f843b658cdd0ff97-1","27b5295eb5e4d1baee0c9272f843b658cdd0ff97","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgUGFya2luZ0xvdEV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgcGFzcwoKCjx8ZmltX2VuZHw+"]
["08c9df755ebd89bd63dd19ca35f50e0242735aa7-5","08c9df755ebd89bd63dd19ca35f50e0242735aa7","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KPHxmaW1fZW5kfD4="]
["efd11f8916a5b4e835c8085631f3344043bdf882-4","efd11f8916a5b4e835c8085631f3344043bdf882","PHxmaW1fcHJlZml4fD4KIiIiSW1wbGVtZW50YXRpb24gb2YgdHJlYWRtaWxsIGFkbWluIGF3cyBwb2xpY3kuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscwoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHJlCgppbXBvcnQgY2xpY2sKCmZyb20gdHJlYWRtaWxsIGltcG9ydCBjbGkKZnJvbSB0cmVhZG1pbGxfYXdzIGltcG9ydCBhd3Njb250ZXh0CgpfTE9HR0VSID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCl9MT0dHRVIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQoKCmNsYXNzIElhbVBvbGljeShjbGljay5QYXJhbVR5cGUpOgogICAgIiIiSUFNUG9saWN5IFBhcmFtVHlwZSIiIgogICAgbmFtZSA9ICdwb2xpY3ktYXJuJwoKICAgIGRlZiBjb252ZXJ0KHNlbGYsIHZhbHVlLCBwYXJhbSwgY3R4KToKICAgICAgICBzdHMgPSBhd3Njb250ZXh0LkdMT0JBTC5zdHMKICAgICAgICBhY2NvdW50aWQgPSBzdHMuZ2V0X2NhbGxlcl9pZGVudGl0eSgpLmdldCgnQWNjb3VudCcpCiAgICAgICAgcGF0dGVybiA9IHInXmxvY2FsOiguKikkJwogICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKHBhdHRlcm4sIHZhbHVlKQogICAgICAgIGlmIG1hdGNoOgogICAgICAgICAgICByZXR1cm4gImFybjphd3M6aWFtOjolczpwb2xpY3kvJXMiICUgKGFjY291bnRpZCwgbWF0Y2guZ3JvdXAoMSkpCiAgICAgICAgcGF0dGVybiA9IHInXmdsb2JhbDooLiopJCcKICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaChwYXR0ZXJuLCB2YWx1ZSkKICAgICAgICBpZiBtYXRjaDoKICAgICAgICAgICAgcmV0dXJuICJhcm46YXdzOmlhbTo6OnBvbGljeS8lcyIgJSBtYXRjaC5ncm91cCgxKQogICAgICAgIHBhdHRlcm4gPSByJ15hcm46YXdzOmlhbTooLiopJCcKICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaChwYXR0ZXJuLCB2YWx1ZSkKICAgICAgICBpZiBtYXRjaDoKICAgICAgICAgICAgcmV0dXJuIHZhbHVlCgogICAgICAgIHNlbGYuZmFpbCgnWyVzXSBpbnZhbGlkIHN5bnRheCwgbXVzdCBiZSBvZiBmb3JtIFtsb2NhbDpwb2xpY3ktbmFtZSwgJwogICAgICAgICAgICAgICAgICAnZ2xvYmFsOnBvbGljeS1uYW1lLCBwb2xpY3ktYXJuXScgJSB2YWx1ZSkKCiAgICAgICAgcmV0dXJuIE5vbmUKCgpkZWYgaW5pdCgpOgogICAgIiIiTWFuYWdlIElBTSBwb2xpY2llcy4iIiIKCiAgICBmb3JtYXR0ZXIgPSBjbGkubWFrZV9mb3JtYXR0ZXIoJ2F3c19wb2xpY3knKQoKICAgIEBjbGljay5ncm91cCgpCiAgICBkZWYgcG9saWN5KCk6CiAgICAgICAgIiIiTWFuYWdlIElBTSBwb2xpY2llcy4iIiIKICAgICAgICBwYXNzCgogICAgQHBvbGljeS5jb21tYW5kKCkKICAgIEBjbGljay5vcHRpb24oJy0tdmVyc2lvbi1pZCcsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgaGVscD0nVmVyc2lvbiBJRCBvZiBwb2xpY3knKQo8fGZpbV9lbmR8Pg=="]
["dfab442207b9afc9f6f6166f51404b8db7aa53ce-1","dfab442207b9afc9f6f6166f51404b8db7aa53ce","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzeXMKCmZyb20gZGphbmdvLmNvcmUuaGFuZGxlcnMud3NnaSBpbXBvcnQgV1NHSUhhbmRsZXIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKb3MuZW52aXJvblsnREpBTkdPX1NFVFRJTkdTX01PRFVMRSddID0gJ2RpZ2l0YWxib29raW5ncy5zZXR0aW5ncycKc3lzLnBhdGguYXBwZW5kKCcvaG9tZS9ub2VsZXZhbnMvd2ViYXBwcy9kaWdpdGFsYm9va2luZ3MnKQpzeXMucGF0aC5hcHBlbmQoJy9ob21lL25vZWxldmFucy93ZWJhcHBzL2RpZ2l0YWxib29raW5ncy9kaWdpdGFsYm9va2luZ3MnKQo8fGZpbV9lbmR8Pg=="]
["3efdb4bcee6f29466bfc7b8ba2e7a7d50caf074f-1","3efdb4bcee6f29466bfc7b8ba2e7a7d50caf074f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGF0dHIKCmZyb20gcm9ib19haS5tb2RlbC5hc3Npc3RhbnQuYXNzaXN0YW50IGltcG9ydCBBc3Npc3RhbnQKZnJvbSByb2JvX2FpLm1vZGVsLmJhc2VfcmVzcG9uc2UgaW1wb3J0IEJhc2VSZXNwb25zZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKQGF0dHIucyhhdXRvX2F0dHJpYnM9VHJ1ZSkKY2xhc3MgQXNzaXN0YW50UmVzcG9uc2UoQmFzZVJlc3BvbnNlKToKPHxmaW1fZW5kfD4="]
["261ef4fac6e291bfc4eb104f43f310943e53042a-1","261ef4fac6e291bfc4eb104f43f310943e53042a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCmZyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1cmxqb2luCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRlZiBnZXRfY29uZmlnKGlzc3Vlcl91cmkpOgogIHVybCA9IHVybGpvaW4oaXNzdWVyX3VyaSwnLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24nKQogIGNvbmZpZyA9IHJlcXVlc3RzLmdldCh1cmwsIHZlcmlmeT1UcnVlKS5qc29uKCkKICByZXR1cm4gY29uZmlnCjx8ZmltX2VuZHw+"]
["261ef4fac6e291bfc4eb104f43f310943e53042a-3","261ef4fac6e291bfc4eb104f43f310943e53042a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCmZyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1cmxqb2luCgpkZWYgZ2V0X2NvbmZpZyhpc3N1ZXJfdXJpKToKICB1cmwgPSB1cmxqb2luKGlzc3Vlcl91cmksJy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uJykKICBjb25maWcgPSByZXF1ZXN0cy5nZXQodXJsLCB2ZXJpZnk9VHJ1ZSkuanNvbigpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICByZXR1cm4gY29uZmlnCjx8ZmltX2VuZHw+"]
["327137888f17be321c14867848bab18f32342fc8-3","327137888f17be321c14867848bab18f32342fc8","PHxmaW1fcHJlZml4fD4KI1dpbGxpYW0gRHUKCgpkZWYgbG9naWMoKToKCjx8ZmltX2hvbGV8PgogICAgICBlbHNlOiByZXR1cm4gRmFsc2UKCiAgI29yIGZ1bmN0aW9uCiAgZGVmIE9SICh4LHkpOgogICAgaWYgeD09MSBvciB5PT0xOgogICAgICAgcmV0dXJuIFRydWUKICAgIGVsc2U6IHJldHVybiBGYWxzZQoKICAjbGlzdCBvZiBBTkQvT1IKICBwcmludChBTkQoMCwwKSkKICBwcmludChBTkQoMCwxKSkKICBwcmludChBTkQoMSwwKSkKICBwcmludChBTkQoMSwxKSkKICAKICBwcmludChPUigwLDApKQogIHByaW50KE9SKDAsMSkpCiAgcHJpbnQoT1IoMSwwKSkKICBwcmludChPUigxLDEpKQppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbG9naWMoKQogIAo8fGZpbV9zdWZmaXh8PgogICNhbmQgZnVuY3Rpb24KICBkZWYgQU5EICh4LHkpOgogICAgICBpZiB4PT0xIGFuZCB5PT0xOgogICAgICAgIHJldHVybiBUcnVlCjx8ZmltX2VuZHw+"]
["2663c3e0bd6880e2bb54846df0a2d09750e6c14c-2","2663c3e0bd6880e2bb54846df0a2d09750e6c14c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5d2lraWJvdCwgcmUKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZSwgdGltZWRlbHRhCmZyb20gc3VicHJvY2VzcyBpbXBvcnQgUG9wZW4sIFBJUEUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgonJycKVGhpcyBzY3JpcHQgbGlzdHMgcGFnZXMgY3JlYXRlZCBkdXJpbmcgbGFzdCB3ZWVrIChmcm9tIE1vbmRheSBvbndhcmRzKSBpbgptYWluc3BhY2U7IGl0IGRvZXMgbm90IHJldHJpZXZlIHBhZ2VzIGNyZWF0ZWQgYnkgYm90cyBvciByZWRpcmVjdCByZW1vdmFscy4KT3V0cHV0IGlzIHByaW50ZWQgdG8gY29uc29sZSwgbGlzdGluZyBwYWdlIHRpdGxlLCBVUkwgYW5kIGF1dGhvci4KPHxmaW1fZW5kfD4="]
["19da8784e60a8ec057091e0839baf128ed5db75e-1","19da8784e60a8ec057091e0839baf128ed5db75e","PHxmaW1fcHJlZml4fD4KIyBpbXBvcnQgeG1sLmV0cmVlLkVsZW1lbnRUcmVlIGFzIEVUCgojIGZyb20gcHlwcm9qIGltcG9ydCBQcm9qLCB0cmFuc2Zvcm0KCiMgaW1wb3J0IG9zCiMgaW1wb3J0IGdsb2IKIyBpbXBvcnQgcmUKIyBpbXBvcnQgZ3ppcAoKIyBmcm9tIG9zIGltcG9ydCBsaXN0ZGlyCiMgZnJvbSBvcy5wYXRoIGltcG9ydCBpc2ZpbGUsIGpvaW4sIGlzZGlyCgojIGZyb20gLnByb3RvLmlucHV0X3BiMiBpbXBvcnQgTGlzYSwgTGlkYXJEYXRhUG9pbnQsIExpZGFyRGF0YUZyYW1lLCBFZ29Qb3NlCgojIGZyb20gLmltYWdlX2NvbnZlcnRlciBpbXBvcnQgY29udmVydF9pbWFnZQoKCiMgIiIiCiMgICBXcmFwcGVyIGZvciBwYiBGcmFtZSBvYmplY3QKIyAiIiIKIyBjbGFzcyBQb2ludENsb3VkRnJhbWU6CiMgICBkZWYgX19pbml0X18oc2VsZiwgcGJmcmFtZSk6CiMgICAgIHNlbGYucGJmcmFtZSA9IHBiZnJhbWUKCiMgICBkZWYgX19lbnRlcl9fKHNlbGYpOgojICAgICByZXR1cm4gc2VsZgoKIyAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCB0cmFjZWJhY2spOgojICAgICBwYXNzCgojICAgZGVmIHNldF9pbWFnZShzZWxmLCBrZXksIHBhdGgsIGRpcmVjdGlvbiA9IFsxLDAsMCwwXSk6CiMgICAgIGltYWdlID0gc2VsZi5wYmZyYW1lLmltYWdlc1trZXldCgojICAgICBpbWFnZS5kaXJlY3Rpb24ueCA9IGRpcmVjdGlvblswXQojICAgICBpbWFnZS5kaXJlY3Rpb24ueSA9IGRpcmVjdGlvblsxXQojICAgICBpbWFnZS5kaXJlY3Rpb24ueiA9IGRpcmVjdGlvblsyXQojICAgICBpbWFnZS5kaXJlY3Rpb24udyA9IGRpcmVjdGlvblszXQoKIyAgICAgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCwgaW1hZ2UuZGF0YSA9IGNvbnZlcnRfaW1hZ2UocGF0aCkKCiMgICBkZWYgc2V0X2xpZGFyX2RhdGEoc2VsZiwgbGlkYXJfZGF0YSk6CiMgICAgIGZvciBpZHgsICh4LHkseixpKSBpbiBlbnVtZXJhdGUobGlkYXJfZGF0YSk6CiMgICAgICAgc2VsZi5wYmZyYW1lLmxpZGFyLnBvaW50cy5hZGQoeD14LCB5PXksIHo9eiwgaT1pKQoKIyAgIGRlZiBzZXRfcG9zaXRpb24oc2VsZiwgY29vcmRpbmF0ZXMsIGVsZXZhdGlvbj0wLAojICAgICByZWZpZD1Ob25lLCBvdXRpZD0nZXBzZzo2NTEwJyk6CgojICAgICBpZiByZWZpZCAhPSBOb25lOgojICAgICAgIGluUHJvaiA9IFByb2ooaW5pdD1yZWZpZCkKIyAgICAgICBvdXRQcm9qID0gUHJvaihpbml0PSdlcHNnOjY1MTAnKQojICAgICAgIHgsIHkgPSB0cmFuc2Zvcm0oaW5Qcm9qLG91dFByb2osIGNvb3JkaW5hdGVzWzBdLCBjb29yZGluYXRlc1sxXSkKIyAgICAgZWxzZToKIyAgICAgICB4LCB5ID0gKGNvb3JkaW5hdGVzWzBdLCBjb29yZGluYXRlc1sxXSkKCiMgICAgIHNlbGYucGJmcmFtZS5lZ29wb3NlLnggPSB4CiMgICAgIHNlbGYucGJmcmFtZS5lZ29wb3NlLnkgPSB5CiMgICAgIHNlbGYucGJmcmFtZS5lZ29wb3NlLnogPSBlbGV2YXRpb24gI1RvZG86IGVsZXZhdGlvbgoKIyBjbGFzcyBQb2ludENsb3VkOgojICAgZGVmIF9faW5pdF9fKHNlbGYpOgojICAgICBzZWxmLnByb3RvX2xpc2EgPSBMaXNhKCkKCiMgICBkZWYgYWRkX2NhdGVnb3J5KHNlbGYsIGlkLCBsYWJlbCk6CiMgICAgIGt2X3BhaXIgPSBzZWxmLnByb3RvX2xpc2EuY2F0ZWdvcmllcy5hZGQoKQojICAgICBrdl9wYWlyLmlkID0gaWQKIyAgICAga3ZfcGFpci5sYWJlbCA9IGxhYmVsCiMgICAgIHJldHVybiBzZWxmCgojICAgZGVmIGFkZF9jYXRlZ29yaWVzKHNlbGYsIGRpY3QpOgojICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkaWN0Lml0ZW1zKCk6CiMgICAgICAgc2VsZi5hZGRfY2F0ZWdvcnkodmFsdWUsIGtleSkKIyAgICAgcmV0dXJuIHNlbGYKCiMgICBkZWYgZnJhbWUoc2VsZiwgaW5kZXgpOgojICAgICBpZiBpbmRleCA8IGxlbihzZWxmLnByb3RvX2xpc2EuZnJhbWVzKToKIyAgICAgICByZXR1cm4gUG9pbnRDbG91ZEZyYW1lKHNlbGYucHJvdG9fbGlzYS5mcmFtZXNbaW5kZXhdKQojICAgICBlbHNlOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgICAgICAgbCA9IGluZGV4IC0gbGVuKHNlbGYucHJvdG9fbGlzYS5mcmFtZXMpCiMgICAgICAgd2hpbGUobCA+PSAwKToKIyAgICAgICAgIGwgLT0gMQojICAgICAgICAgc2VsZi5wcm90b19saXNhLmZyYW1lcy5hZGQoKQo8fGZpbV9lbmR8Pg=="]
["8d31fa97c6e0f82c0da3b573898422fedbab2114-4","8d31fa97c6e0f82c0da3b573898422fedbab2114","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcGF0aApmcm9tIC4gaW1wb3J0IHZpZXdzCgphcHBfbmFtZSA9ICduZXdzJwoKPHxmaW1faG9sZXw+CiAgICBwYXRoKCdwdWJfY29tbWVudC8nLHZpZXdzLnB1YmxpY19jb21tZW50LG5hbWU9J3B1Yl9jb21tZW50JyksCl0KPHxmaW1fc3VmZml4fD4KdXJscGF0dGVybnMgPSBbCiAgICBwYXRoKCcnLHZpZXdzLmluZGV4LG5hbWU9J2luZGV4JyksCiAgICBwYXRoKCc8aW50Om5ld3NfaWQ+Lycsdmlld3MubmV3c19kZXRhaWwsbmFtZT0nbmV3c19kZXRhaWwnKSwKICAgIHBhdGgoJ2xpc3QvJyx2aWV3cy5uZXdzX2xpc3QsbmFtZT0nbmV3c19saXN0JyksCjx8ZmltX2VuZHw+"]
["47376bb925a4f7bb173cf270e6af4a4ee49d23dc-1","47376bb925a4f7bb173cf270e6af4a4ee49d23dc","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KU1VQUE9SVEVEX0FSQ0hJVEVDVFVSRSA9IFsKICAgICdhbGlhcy1mcmVlLXJvc2luYWxpdHktdjEnLApdCjx8ZmltX2VuZHw+"]
["9d1cf5946d15dee2d773b789c4830ef354a6d4a9-3","9d1cf5946d15dee2d773b789c4830ef354a6d4a9","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFzayBpbXBvcnQgQmx1ZXByaW50LCByZWRpcmVjdCwgcmVuZGVyX3RlbXBsYXRlLCBmbGFzaCwgY3VycmVudF9hcHAKZnJvbSBtb25vbGl0aCBpbXBvcnQgYXBpCmZyb20gbW9ub2xpdGguc2VydmljZXMuZm9ybXMgaW1wb3J0IEF1dGhvcml0eUZvcm0KCmF1dGhvcml0aWVzID0gQmx1ZXByaW50KCJhdXRob3JpdGllcyIsIF9fbmFtZV9fKQoKCkBhdXRob3JpdGllcy5yb3V0ZSgiL3JlZ2lzdGVyL2F1dGhvcml0eSIsIG1ldGhvZHM9WyJHRVQiLCAiUE9TVCJdKQpkZWYgY3JlYXRlX2F1dGhvcml0eSgpOgogICAgZm9ybSA9IEF1dGhvcml0eUZvcm0oKQogICAgaWYgZm9ybS52YWxpZGF0ZV9vbl9zdWJtaXQoKToKICAgICAgICBjdXJyZW50X2FwcC5sb2dnZXIuaW5mbyhmIlRyeWluZyB0byByZWdpc3RlciBuZXcgYXV0aG9yaXR5IHtmb3JtLmVtYWlsLmRhdGF9IikKCiAgICAgICAgYXV0aG9yaXR5ID0gYXBpLmdldF9hdXRob3JpdHlfYnlfZW1haWwoZm9ybS5lbWFpbC5kYXRhKQogICAgICAgIGlmIGF1dGhvcml0eToKICAgICAgICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmRlYnVnKCJUaGUgYXV0aG9yaXR5IGFscmVhZHkgZXhpc3RzISIpCiAgICAgICAgICAgIHJldHVybiByZWRpcmVjdCgiL2xvZ2luL2F1dGhvcml0eSIpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgbmV3X2F1dGhvcml0eSA9IGRpY3QoCiAgICAgICAgICAgICAgICBuYW1lPWZvcm0ubmFtZS5kYXRhLAogICAgICAgICAgICAgICAgZW1haWw9Zm9ybS5lbWFpbC5kYXRhLAogICAgICAgICAgICAgICAgcGFzc3dvcmQ9Zm9ybS5wYXNzd29yZC5kYXRhLAogICAgICAgICAgICAgICAgcGhvbmVudW1iZXI9c3RyKGZvcm0ucGhvbmVudW1iZXIuZGF0YSksCiAgICAgICAgICAgICAgICBjb3VudHJ5PWZvcm0uY291bnRyeS5kYXRhLAogICAgICAgICAgICAgICAgc3RhdGU9Zm9ybS5zdGF0ZS5kYXRhLAogICAgICAgICAgICAgICAgY2l0eT1mb3JtLmNpdHkuZGF0YSwKICAgICAgICAgICAgICAgIGxhdD1mb3JtLmxhdC5kYXRhLAogICAgICAgICAgICAgICAgbG9uPWZvcm0ubG9uLmRhdGEsCiAgICAgICAgICAgICkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgICAgICAgICAgcmVnaXN0ZXJlZCA9IGFwaS5yZWdpc3Rlcl9hdXRob3JpdHkobmV3X2F1dGhvcml0eSkKICAgICAgICAgICAgaWYgcmVnaXN0ZXJlZDoKICAgICAgICAgICAgICAgIGZsYXNoKAo8fGZpbV9lbmR8Pg=="]
["a086afc1c610066575ea0abc035c5bca9d297e32-3","a086afc1c610066575ea0abc035c5bca9d297e32","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wIAppbXBvcnQgc3VicHJvY2VzcwoKdGVzdHMgPSBbCiAgICAgICAgKFswLCAwLCAxXSwgWzBdKSwKICAgICAgICAoWzAsIDE1LCAyOF0sIFsxNV0pLAogICAgICAgIChbMCwgMjgsIDE1XSwgWzI4XSksCiAgICAgICAgKFsxMiwgNDcsIDE1XSwgWzQ3XSksCiAgICAgICAgKFswLCAxLCAwLAogICAgICAgICAgMCwgMSwgMF0sIFsxXSksCiAgICAgICAgKFswLCAwLCAxLAogICAgICAgICAgMCwgMCwgMl0sIFswXSksCiAgICAgICAgKFswLCAwLCAxLAogICAgICAgICAgMCwgMSwgMl0sIFswLCAxXSksCiAgICAgICAgKFswLCAwLCAxLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAwLCAxLCAyLAogICAgICAgICAgMCwgMiwgM10sIFswLCAyXSksCjx8ZmltX2VuZHw+"]
["cd5845afe3d5429107d5fe76b078343cf0aad23f-2","cd5845afe3d5429107d5fe76b078343cf0aad23f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNmZwpmcm9tIGtpdnkudWl4LnNjcmVlbm1hbmFnZXIgaW1wb3J0IFNjcmVlbgpmcm9tIGtpdnkubGFuZyBpbXBvcnQgQnVpbGRlcgpmcm9tIGtpdnkucHJvcGVydGllcyBpbXBvcnQgKgpmcm9tIGtpdnkubWV0cmljcyBpbXBvcnQgZHAKaW1wb3J0IHl0dkFwaSBhcyB5dHYKCmZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQKCkJ1aWxkZXIubG9hZF9zdHJpbmcoJycnCgo8U2Vhc29uU2NyZWVuPjoKCW5hbWU6J3NlYXNvbl9zY3JlZW4nCglNREJveExheW91dDoKCQlvcmllbnRhdGlvbjondmVydGljYWwnCQkJCgkJUmVjeWNsZVZpZXc6CgkJCWlkOiBzZWFzb25fcnYKCQkJc2l6ZV9oaW50X3k6Tm9uZQoJCQlrZXlfdmlld2NsYXNzOiAndmlld2NsYXNzJwoJCQlrZXlfc2l6ZTogJ2hlaWdodCcKCQkJYmFyX3dpZHRoOmRwKDgpCgkJCWJhcl9pbmFjdGl2ZV9jb2xvcjouNywuNywuNywuNAkJCgkJCVJlY3ljbGVCb3hMYXlvdXQ6CgkJCQlpZDogc2Vhc29uX3JiCgkJCQlkZWZhdWx0X3NpemU6IE5vbmUsIGRwKDUwKQoJCQkJZGVmYXVsdF9zaXplX2hpbnQ6IE5vbmUsIE5vbmUKCQkJCXNpemVfaGludF94OiBOb25lCgkJCQl3aWR0aDogc2VsZi5taW5pbXVtX3dpZHRoCgkJCQlvcmllbnRhdGlvbjogJ2hvcml6b250YWwnCgkJCQlzcGFjaW5nOmRwKDIpCgkJUmVjeWNsZVZpZXc6CgkJCWlkOiBvdGhlcnNfcnYKCQkJc2l6ZV9oaW50X3k6CgkJCWtleV92aWV3Y2xhc3M6ICd2aWV3Y2xhc3MnCgkJCWtleV9zaXplOiAnaGVpZ2h0JwkKCQkJUmVjeWNsZUJveExheW91dDoKCQkJCWlkOiBvdGhlcnNfcmIKCQkJCWRlZmF1bHRfc2l6ZTogTm9uZSwgTm9uZQoJCQkJZGVmYXVsdF9zaXplX2hpbnQ6IDEsIE5vbmUKCQkJCXNpemVfaGludF95OiBOb25lCgkJCQloZWlnaHQ6IHNlbGYubWluaW11bV9oZWlnaHQKCQkJCW9yaWVudGF0aW9uOiAndmVydGljYWwnCgkJCQlzcGFjaW5nOmRwKDIpCgoKJycnKQoKY2xhc3MgU2Vhc29uU2NyZWVuKFNjcmVlbik6CglzZWFzb25zPU9iamVjdFByb3BlcnR5KFtdKQoJZXBpc29kZXM9T2JqZWN0UHJvcGVydHkoe30pCgljb3VudD0wCgkKCWRlZiBraWxsKHNlbGYsKmEpOgoJCXNlbGYuZXBpc29kZXM9e30KCQlzZWxmLnNlYXNvbnM9JycKCQlzZWxmLmlkcy5zZWFzb25fcnYuc2Nyb2xsX3g9MAoJCglkZWYgb25fc2Vhc29ucyhzZWxmLCphKToKCQkKCQljZmcuU00yPXNlbGYubWFuYWdlcgoJCXNlbGYuaWRzLm90aGVyc19ydi5kYXRhPVt7J3ZpZXdjbGFzcyc6J1lMYWJlbCcsJ3RleHQnOmYnU2VsZWN0IGEgU2Vhc29uIEFib3ZlIHRvIFZpZXcgaXRzIEVwaXNvZGVzJywnaGFsaWduJzonY2VudGVyJywnbWFya3VwJzpUcnVlfV0KCQlpZiBzZWxmLnNlYXNvbnM6CgkJCWRhdGE9W10KCQkJZm9yIG5vLGkgaW4gZW51bWVyYXRlKHNlbGYuc2Vhc29ucywwKToKCQkJCWRhdGEuYXBwZW5kKHsndmlld2NsYXNzJzonUGFnZUJ1dHRvbicsJ3RleHQnOmYne2kudGV4dH0nLCdncm91cCc6J3NlYXNvbicsJ3NpemVfaGludCc6W05vbmUsMV0sJ3dpZHRoJzpkcCgxMDApLCdzZWFzb25fbnVtYmVyJzpubywnc3dpdGNoX3BhZ2UnOnNlbGYuc3dpdGNoX3BhZ2UsJ3NlYXNvbl9jaGVjayc6bm99KQoJCQkJCgkJCXNlbGYuaWRzLnNlYXNvbl9ydi5kYXRhPWRhdGEKCQllbGlmIHNlbGYuc2Vhc29ucyAhPScnOgoJCQlzZWxmLmlkcy5zZWFzb25fcnYuZGF0YT1beyd2aWV3Y2xhc3MnOidZTGFiZWwnLCd0ZXh0JzpmJ0xvYWRpbmcgZmFpbGVkJywnc2l6ZV9oaW50X3gnOk5vbmV9XQoJCQoJCglkZWYgc3dpdGNoX3BhZ2Uoc2VsZixubyx0ZXh0KToKCQlzZWxmLmlkcy5vdGhlcnNfcnYuc2Nyb2xsX3k9MQoJCXNlbGYuY291bnQrPTEKCQl1cmw9c2VsZi5zZWFzb25zW25vXS5hdHRyc1snaHJlZiddCgkJZGVmIGdldF9lcGlzb2RlcyhzZWxmLHVybHosbm8sY291bnQsdGV4dCk6CgkJCXNlbGYuaWRzLm90aGVyc19ydi5kYXRhPVt7J3ZpZXdjbGFzcyc6J1lMYWJlbCcsJ3RleHQnOmYnTG9hZGluZyB7dGV4dH0uLi4nLCdoYWxpZ24nOidjZW50ZXInLCdtYXJrdXAnOlRydWV9XQoJCQlpZiBlOj1zZWxmLmVwaXNvZGVzLmdldChubyk6CgkJCQlzZWxmLmlkcy5vdGhlcnNfcnYuZGF0YT1lCgkJCQlyZXR1cm4KPHxmaW1faG9sZXw+CgkJCQkJZGF0YS5hcHBlbmQoeyd2aWV3Y2xhc3MnOidFcGlzb2RlQnV0dG9uJywnc2Vhc29uX25vJzpubywnc3RleHQnOnRleHQsJ2F0YWcnOiBhdGFnLCdyaXBwbGVfc2NhbGUnOiAwLjB9KQoJCQkJc2VsZi5lcGlzb2Rlc1tub109ZGF0YQoJCQkJaWYgY291bnQ9PXNlbGYuY291bnQ6CgkJCQkJc2VsZi5pZHMub3RoZXJzX3J2LmRhdGE9ZGF0YQoJCQllbHNlOgoJCQkJc2VsZi5pZHMub3RoZXJzX3J2LmRhdGE9W3sndmlld2NsYXNzJzonWUxhYmVsJywndGV4dCc6ZidGYWlsZWQgdG8gTG9hZCB7dGV4dH1bdV1baV1bYl0gXG5bcmVmPXJldHJ5XVRyeSBBZ2Fpbj9bL3JlZl0gWy91XVsvaV1bL2JdICcsJ2hhbGlnbic6J2NlbnRlcicsJ21hcmt1cCc6VHJ1ZSwnb25fcmVmX3ByZXNzJzogbGFtYmRhICphOnNlbGYuc3dpdGNoX3BhZ2Uobm8pfV0KCQkKCQlUaHJlYWQodGFyZ2V0PWdldF9lcGlzb2RlcyxhcmdzPShzZWxmLHVybCxubyxzZWxmLmNvdW50LHRleHQsKSxkYWVtb249VHJ1ZSkuc3RhcnQoKQo8fGZpbV9zdWZmaXh8PgoJCQllPXl0di5nZXRfZXBpc29kZXModXJseikKCQkJaWYgZSBhbmQgRmFsc2Ugbm90IGluIGU6CgkJCQlkYXRhPVtdCgkJCQlmb3IgYXRhZyBpbiBlOgo8fGZpbV9lbmR8Pg=="]
["2639ffc2ae30562dae1cdbf245204e0db496cdd2-2","2639ffc2ae30562dae1cdbf245204e0db496cdd2","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgb3MKaW1wb3J0IHJlCmltcG9ydCBzaHV0aWwKCmltcG9ydCBwaXAuX2ludGVybmFsLnV0aWxzLm1pc2MKCmltcG9ydCBkMV9kZXYudXRpbAoKUkVRVUlSRU1FTlRTX0ZJTEVOQU1FID0gInJlcXVpcmVtZW50cy50eHQiCgoKIyBNb2R1bGVzIGluIG15IGRldiBlbnZpcm9ubWVudCB0aGF0IGFyZSBub3QgcmVxdWlyZWQgYnkgdGhlIHN0YWNrCgpQQUNLQUdFX0VYQ0xVREVfUkVHRVhfTElTVCA9IHsKICAgICJkYXRhb25lLioiLAogICAgImV0ZTMiLAogICAgIkZsYXNrIiwKICAgICJsb2dnaW5nLXRyZWUiLAogICAgIlB5UXQuKiIsCiAgICAicHlxdDUiLAogICAgInB5dGhvbi1tYWdpYyIsCiAgICAicmVkYmFyb24iLAp9CgoKZGVmIG1haW4oKToKICAgIHJlcG9fZGlyID0gZDFfZGV2LnV0aWwuZmluZF9yZXBvX3Jvb3QoKQogICAgcmVxX3BhdGggPSBvcy5wYXRoLmpvaW4ocmVwb19kaXIsIFJFUVVJUkVNRU5UU19GSUxFTkFNRSkKICAgIHJlcV9iYWNrdXBfcGF0aCA9IHJlcV9wYXRoICsgIi5iYWsiCiAgICB0cnk6CiAgICAgICAgb3MucmVtb3ZlKHJlcV9iYWNrdXBfcGF0aCkKICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKICAgICAgICBwYXNzCiAgICBzaHV0aWwubW92ZShyZXFfcGF0aCwgcmVxX2JhY2t1cF9wYXRoKQogICAgcmVxX2xpc3QgPSBzb3J0ZWQoZ2V0X3JlcXMoKSkKICAgIHdyaXRlX3JlcXMocmVxX3BhdGgsIHJlcV9saXN0KQoKCmRlZiBnZXRfcmVxcygpOgogICAgcmVxX2xpc3QgPSBbXQogICAgIyBub2luc3BlY3Rpb24gUHlQcm90ZWN0ZWRNZW1iZXIKICAgIGZvciBwYWNrYWdlX2Rpc3QgaW4gcGlwLl9pbnRlcm5hbC51dGlscy5taXNjLmdldF9pbnN0YWxsZWRfZGlzdHJpYnV0aW9ucygKICAgICAgICBsb2NhbF9vbmx5PVRydWUKICAgICk6CiAgICAgICAgaWYgbm90IGlzX2ZpbHRlcmVkX3BhY2thZ2UocGFja2FnZV9kaXN0LnByb2plY3RfbmFtZSk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgcmVxX3N0ciA9IHN0cihwYWNrYWdlX2Rpc3QuYXNfcmVxdWlyZW1lbnQoKSkKICAgICAgICAgICAgcmVxX2xpc3QuYXBwZW5kKHJlcV9zdHIpCjx8ZmltX2VuZHw+"]
["a060e4893ff35464127543c9e0bbfdb1630706c2-1","a060e4893ff35464127543c9e0bbfdb1630706c2","PHxmaW1fcHJlZml4fD4KIyBweXRob24KCmdsb2JhbCBQWV9DYWxjT2JqZWN0X2luaXQKZ2xvYmFsIFBZX0NhbGNPYmplY3RfSW5wdXRzCgpQWV9DYWxjT2JqZWN0X2luaXQgPSAtMQoKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgUFlfQ2FsY09iamVjdCgpIGZjdG4KIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRlZiBQWV9DYWxjT2JqZWN0ICggYXJnTGlzdCApOgoJY2FsbE1vZGUgPSBzdHIoYXJnTGlzdFswXSkKCWlmIGNhbGxNb2RlID09ICdOb25lJyA6CgkJcmV0VmFsID0gUFlfQ2FsY09iamVjdF9jb21wdXRlKCBhcmdMaXN0ICkJIyBkbyBjb21wdXRlCgllbGlmIGNhbGxNb2RlID09ICdyZWdpc3RlcicgOgoJCWdsb2JhbCBQWV9DYWxjT2JqZWN0X2luaXQgCgkJUFlfQ2FsY09iamVjdF9pbml0ID0gLTEKCQlyZXRWYWwgPSBQWV9DYWxjT2JqZWN0X3JlZ2lzdGVyKCkKCWVsaWYgY2FsbE1vZGUgPT0gJ2NvbXB1dGUnIDoKCQlyZXRWYWwgPSBQWV9DYWxjT2JqZWN0X2NvbXB1dGUoIGFyZ0xpc3QgKQkjIGRvIGNvbXB1dGUKCWVsc2U6CgkJcmV0VmFsID0gW10JIyAjIGJhZCBjYWxsLCByZXR1cm4gZW1wdHkgbGlzdAoJcmV0dXJuIHJldFZhbAoKCmRlZiBQWV9DYWxjT2JqZWN0X3JlZ2lzdGVyKCk6CglhcmcxID0gJ0FyZ3VtZW50VHlwZSA9IE91dHB1dCA7IEFyZ3VtZW50TmFtZSA9IFZhbHVlIDsgTmFtZSA9IFZhbHVlJwoJYXJnMiA9ICdBcmd1bWVudFR5cGUgPSBJbnB1dCA7IEFyZ3VtZW50TmFtZSA9IEluYyA7IE5hbWUgPSBJbmNsaW5hdGlvbiA7IFR5cGUgPSBDYWxjT2JqZWN0JwoJYXJnMyA9ICdBcmd1bWVudFR5cGUgPSBJbnB1dCA7IEFyZ3VtZW50TmFtZSA9IFJpZ2h0QXNjIDsgTmFtZSA9IFJBQU4gOyBUeXBlID0gQ2FsY09iamVjdCcKCWFyZ0xpc3QgPSBbYXJnMSwgYXJnMiwgYXJnM10KCXJldHVybiBhcmdMaXN0CgpkZWYgUFlfQ2FsY09iamVjdF9jb21wdXRlKCBhcmdMaXN0ICk6CgkjIE5PVEU6IGFyZ0xpc3RbMF0gaXMgdGhlIGNhbGwgTW9kZSwgd2hpY2ggaXMgZWl0aGVyIE5vbmUgb3IgJ2NvbXB1dGUnCglnbG9iYWwgUFlfQ2FsY09iamVjdF9pbml0CglnbG9iYWwgUFlfQ2FsY09iamVjdF9JbnB1dHMKCWlmIFBZX0NhbGNPYmplY3RfaW5pdCA8IDAgOgoJCVBZX0NhbGNPYmplY3RfaW5pdCA9IDEKCQlQWV9DYWxjT2JqZWN0X0lucHV0cyA9IGdfUGx1Z2luQXJyYXlJbnRlcmZhY2VIYXNoWydQWV9DYWxjT2JqZWN0X0lucHV0cyddCglpbmMgPSBmbG9hdChhcmdMaXN0W1BZX0NhbGNPYmplY3RfSW5wdXRzWydJbmMnXV0pCSNpbmMgPSBmbG9hdChhcmdMaXN0WzFdKQoJcmFhbiA9IGZsb2F0KGFyZ0xpc3RbUFlfQ2FsY09iamVjdF9JbnB1dHNbJ1JpZ2h0QXNjJ11dKSAgICAjcmFhbiA9IGZsb2F0KGFyZ0xpc3RbMl0pCglyZXRMaXN0ID0gW3NpbihpbmMpKnNpbihyYWFuKV0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoJcmV0dXJuIHJldExpc3QKCjx8ZmltX2VuZHw+"]
["a0940470b249ca465eb15c62d4857fa7f3686296-1","a0940470b249ca465eb15c62d4857fa7f3686296","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdApmcm9tIHJlc3RfZnJhbWV3b3JrLnRlc3QgaW1wb3J0IEFQSUNsaWVudAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIGJ1ZGdldG1lLmFwcHMuY29yZS5tb2RlbHMgaW1wb3J0IFVzZXIKCgpAcHl0ZXN0Lm1hcmsuZGphbmdvX2RiCjx8ZmltX2VuZHw+"]
["eb1bf218bfc4650b6013a23ba1bc3241ddcb169b-3","eb1bf218bfc4650b6013a23ba1bc3241ddcb169b","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgcXVhbmRsLCBtYXRoCgpmcm9tIHNrbGVhcm4gaW1wb3J0IHByZXByb2Nlc3NpbmcsIGNyb3NzX3ZhbGlkYXRpb24sIHN2bQpmcm9tIHNrbGVhcm4ubGluZWFyX21vZGVsIGltcG9ydCBMaW5lYXJSZWdyZXNzaW9uCmZyb20gdGltZSBpbXBvcnQgdGltZQoKc3RhcnQgPSB0aW1lKCkKJycnCmBwcmVwcm9jZXNzaW5nYCB3aWxsIGJlIHVzZWQgdG8gJ3NjYWxlJyB0aGUgbGFiZWxzIGZyb20gMCB0byAxCicnJwoKZGYwICA9IHF1YW5kbC5nZXQoJ1dJS0kvR09PRycpCgpwcmludCgiRG93bmxvYWRpbmcgdGhlIERBVEEgdG9vayB7MDouMmV9IHNlY29uZHMiLmZvcm1hdCh0aW1lKCkgLSBzdGFydCkpCnN0YXJ0ID0gdGltZSgpCmRmICA9IHBkLkRhdGFGcmFtZS5jb3B5KGRmMFtbJ0Fkai4gT3BlbicsICdBZGouIEhpZ2gnLCAnQWRqLiBMb3cnLCAnQWRqLiBDbG9zZScsICdBZGouIFZvbHVtZSddXSkKCmRmWydITF9QQ1QnXSAgICA9IChkZlsnQWRqLiBIaWdoJ10gLSBkZlsnQWRqLiBMb3cnXSkgICAvIGRmWydBZGouIENsb3NlJ10gKiAxMDAuMApkZlsnUENUX2NoYW5nZSddPSAoZGZbJ0Fkai4gQ2xvc2UnXSAtIGRmWydBZGouIE9wZW4nXSkgLyBkZlsnQWRqLiBPcGVuJ10gICogMTAwLjAKCmRmICA9IGRmW1snQWRqLiBDbG9zZScsICdITF9QQ1QnLCAnUENUX2NoYW5nZScsICdBZGouIFZvbHVtZSddXQoKZm9yZWNhc3RfY29sICAgID0gJ0Fkai4gQ2xvc2UnCmRmLmZpbGxuYSgtOTk5OTksIGlucGxhY2U9VHJ1ZSkgIyBmaWxsICJOb3QgQXBwbGljYWJsZSIgKHVzdWFsbHkgTmFOcykgd2l0aCAiLTk5OTk5IiBpbiBwbGFjZQoKcGVyY2VudGNoYW5nZSAgID0gMC4wMSAjIHByZWRpY3QgMSUgZm9yd2FyZCBmcm9tIGN1cnJlbnQgZGF0YSBzZXQKZm9yZWNhc3Rfb3V0ICAgID0gaW50KG1hdGguY2VpbChwZXJjZW50Y2hhbmdlKmxlbihkZikpKQoKZGZbJ2xhYmVsJ10gICAgID0gZGZbZm9yZWNhc3RfY29sXS5zaGlmdCgtZm9yZWNhc3Rfb3V0KQoKZGYuZHJvcG5hKGlucGxhY2U9VHJ1ZSkKCicnJyBEZWZpbmUgWCBhbmQgWSAnJycKIyBkZi5kcm9wbmEoaW5wbGFjZT1UcnVlKQpYICAgPSBucC5hcnJheShkZi5kcm9wKFsnbGFiZWwnXSwgMSkpICAgIyBmZWF0dXJlcyBhcmUgZXZlcnl0aGluZyBleGNlcHQgZm9yIHRoZSBgbGFiZWxzYAp5ICAgPSBucC5hcnJheShkZlsnbGFiZWwnXSkgICAgICAgICAgICAgIyBsYWJlbHMgYXJlIHRoZSBgbGFiZWxzYAoKJycnIFByZXByb2Nlc3NpbmcgY2FuIGFkZCB0byBwcm9jZXNzaW5nIHRpbWUgCiAgICAgICAgYmVjYXVzZSB5b3UgaGF2ZSB0byByZXNjYWxlIHRlc3RpbmcgZGF0YSBhbmQgcHJlZGljdGlvbiBkYXRhIAogICAgICAgIGFsb25nc2lkZSB0cmFpbmluZyBkYXRhIGZvciBhIHByb3BlciBzY2FsaW5nCgogICAgV2l0aCBIRiBUcmFkaW5nLCB5b3Ugd291bGQgZGVmaW5pdGVseSBza2lwIHRoaXMgc3RlcAonJycKc3RhcnQgPSB0aW1lKCkKClggICA9IHByZXByb2Nlc3Npbmcuc2NhbGUoWCkKIyBYICAgPSBYWzotZm9yZWNhc3Rfb3V0KzFdCgpYX3RyYWluLCBYX3Rlc3QsIHlfdHJhaW4sIHlfdGVzdCAgICA9IGNyb3NzX3ZhbGlkYXRpb24udHJhaW5fdGVzdF9zcGxpdChYLCB5LCB0ZXN0X3NpemU9MC4yKQoKcHJpbnQoIlNldHRpbmcgdXAgdGhlIERBVEEgdG9vayB7MDouMmV9IHNlY29uZHMiLmZvcm1hdCh0aW1lKCkgLSBzdGFydCkpCgonJycgTGluZWFyUmVncmVzc2lvbiAnJycKc3RhcnQgPSB0aW1lKCkKCmNsZiA9IExpbmVhclJlZ3Jlc3Npb24oKSAjIGRlZmF1bHQKY2xmLmZpdChYX3RyYWluLCB5X3RyYWluKQoKYWNjdXJhY3kgICAgPSBjbGYuc2NvcmUoWF90ZXN0LHlfdGVzdCkqMTAwLjAKCnByaW50KCJMaW5lYXIgUmVncmVzc2lvbiB0b29rIHswOi4yZX0gc2Vjb25kcywgd2l0aCBhbiBhY2N1cmFjeSBvZiB7MTouMmZ9JSIuZm9ybWF0KHRpbWUoKSAtIHN0YXJ0LCBhY2N1cmFjeSkpCnN0YXJ0ID0gdGltZSgpCgonJycgTGluZWFyUmVncmVzc2lvbiBNdWx0aXByb2Nlc3NpbmcnJycKc3RhcnQgPSB0aW1lKCkKCmNsZiA9IExpbmVhclJlZ3Jlc3Npb24obl9qb2JzPS0xKSAjIG11bHRpcHJvY2Vzc2luZwpjbGYuZml0KFhfdHJhaW4sIHlfdHJhaW4pCgphY2N1cmFjeSAgICA9IGNsZi5zY29yZShYX3Rlc3QseV90ZXN0KSoxMDAuMAoKcHJpbnQoIkxpbmVhciBSZWdyZXNzaW9uIHRvb2sgezA6LjJlfSBzZWNvbmRzLCB3aXRoIGFuIGFjY3VyYWN5IG9mIHsxOi4yZn0lIi5mb3JtYXQodGltZSgpIC0gc3RhcnQsIGFjY3VyYWN5KSkKPHxmaW1faG9sZXw+CmNsZiA9IHN2bS5TVlIoKQpjbGYuZml0KFhfdHJhaW4sIHlfdHJhaW4pCgphY2N1cmFjeSAgICA9IGNsZi5zY29yZShYX3Rlc3QseV90ZXN0KSoxMDAuMAojIHByaW50KCJUaGUgYWNjdXJhY3kgd2FzIHswOi4yZX0iLmZvcm1hdChhY2N1cmFjeSkpCgpwcmludCgiU1ZNIExpbmVhciBLZXJuZWwgdG9vayB7MDouMmV9IHNlY29uZHMsIHdpdGggYW4gYWNjdXJhY3kgb2YgezE6LjJmfSUiLmZvcm1hdCh0aW1lKCkgLSBzdGFydCwgYWNjdXJhY3kpKQpzdGFydCA9IHRpbWUoKQoKJycnIFNWTSBSZWdyZXNzaW9uIFBvbHlub21pYWwnJycgCgpjbGYgPSBzdm0uU1ZSKGtlcm5lbD0ncG9seScpCmNsZi5maXQoWF90cmFpbiwgeV90cmFpbikKCmFjY3VyYWN5ICAgID0gY2xmLnNjb3JlKFhfdGVzdCx5X3Rlc3QpKjEwMC4wCiMgcHJpbnQoIlRoZSBhY2N1cmFjeSB3YXMgezA6LjJlfSIuZm9ybWF0KGFjY3VyYWN5KSkKCnByaW50KCJTVk0gUG9seSBLZXJuZWwgdG9vayB7MDouMmV9IHNlY29uZHMsIHdpdGggYW4gYWNjdXJhY3kgb2YgezE6LjJmfSUiLmZvcm1hdCh0aW1lKCkgLSBzdGFydCwgYWNjdXJhY3kpKQpzdGFydCA9IHRpbWUoKQoKJycnIFNWTSBSZWdyZXNzaW9uIFJCRiAoR2F1c3NpYW4pJycnIAoKY2xmID0gc3ZtLlNWUihrZXJuZWw9J3JiZicpCmNsZi5maXQoWF90cmFpbiwgeV90cmFpbikKCmFjY3VyYWN5ICAgID0gY2xmLnNjb3JlKFhfdGVzdCx5X3Rlc3QpKjEwMC4wCiMgcHJpbnQoIlRoZSBhY2N1cmFjeSB3YXMgezA6LjJlfSIuZm9ybWF0KGFjY3VyYWN5KSkKCnByaW50KCJTVk0gUkJGIEtlcm5lbCB0b29rIHswOi4yZX0gc2Vjb25kcywgd2l0aCBhbiBhY2N1cmFjeSBvZiB7MTouMmZ9JSIuZm9ybWF0KHRpbWUoKSAtIHN0YXJ0LCBhY2N1cmFjeSkpCjx8ZmltX3N1ZmZpeHw+CnN0YXJ0ID0gdGltZSgpCgonJycgU1ZNIFJlZ3Jlc3Npb24gJycnIAoKPHxmaW1fZW5kfD4="]
["a04329be50834f7d19e334370b2bf24c5e48e52d-3","a04329be50834f7d19e334370b2bf24c5e48e52d","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nPXV0Zi04CiMKIyBBdXRob3I6IEx1Y2FzCiMgRGF0ZTogMjAxOC0wOS0wMSAxODo0OTo1MgoiIiIKR2VvbWV0cmljIEluY3JlbWVudHMKClVzaW5nIHB5cHkgdG8gcnVuIHRoaXMgYWxnb3JpdGhtIHNvIHRoYXQgaXQgaXMgbm90IHRvbyBzbG93CgpSZXN1bHQ6OgoKICAgVG90YWwgdGltZTogOS4wODk1LCB3aGVuIHQ9MgogICBUb3RhbCB0aW1lOiA5LjA2OTIsIHdoZW4gdD0zCiAgIFRvdGFsIHRpbWU6IDEwLjIzMDMsIHdoZW4gdD00CiAgIFRvdGFsIHRpbWU6IDEwLjM0MzIsIHdoZW4gdD01CiAgIFRvdGFsIHRpbWU6IDEwLjI1MDAsIHdoZW4gdD02CiAgIFRvdGFsIHRpbWU6IDEyLjIyNjIsIHdoZW4gdD03CiAgIFRvdGFsIHRpbWU6IDEzLjg4ODgsIHdoZW4gdD04CiAgIFRvdGFsIHRpbWU6IDExLjkxMjYsIHdoZW4gdD05CiAgIHB5cHkzIEV4ZXJjaXNlMzBfR2VvbWV0cmljSW5jcmVtZW50cy5weSAgODYuMzBzIHVzZXIgMC42NHMgc3lzdGVtIDk5JSBjcHUgMToyNy44MCB0b3RhbAoiIiIKaW1wb3J0IHRpbWUKaW1wb3J0IHJhbmRvbQoKQ0FTRV9MRU4gPSAxMDAwMDAwCkNBU0VfTlVNQkVSUyA9IDUKCgpkZWYgc2hlbGxfc29ydF9mYWN0b3J5KHQpOgogICAgZGVmIHNoZWxsX3NvcnQoYSk6CiAgICAgICAgc2VxdWVuY2UgPSBbMV0KICAgICAgICBrID0gMQogICAgICAgIHdoaWxlIHNlcXVlbmNlWy0xXSA8IGxlbihhKSAvLyAzOgogICAgICAgICAgICBzZXF1ZW5jZS5hcHBlbmQodCoqaykKICAgICAgICAgICAgayArPSAxCgogICAgICAgIGZvciBoIGluIHNlcXVlbmNlWzo6LTFdOgogICAgICAgICAgICBmb3IgaSBpbiByYW5nZShoLCBsZW4oYSkpOgogICAgICAgICAgICAgICAgaiA9IGkKICAgICAgICAgICAgICAgIHdoaWxlIGogPj0gaCBhbmQgYVtqXSA8IGFbai1oXToKICAgICAgICAgICAgICAgICAgICBhW2pdLCBhW2otaF0gPSBhW2otaF0sIGFbal0KICAgICAgICAgICAgICAgICAgICBqIC09IGgKICAgIHJldHVybiBzaGVsbF9zb3J0CgoKZGVmIHNtb2tlX3Rlc3Qoc29ydCk6CiAgICBhID0gW3JhbmRvbS5yYW5kb20oKSBmb3IgXyBpbiByYW5nZShDQVNFX0xFTildCiAgICBzb3J0KGEpCiAgICBhc3NlcnQgc29ydGVkKGEpID09IGEKICAgIHByaW50KGxlbihhKSkKCgpjbGFzcyBTdG9wV2F0Y2gob2JqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLnN0YXJ0ID0gdGltZS50aW1lKCkKCiAgICBkZWYgc3RvcChzZWxmKToKICAgICAgICByZXR1cm4gdGltZS50aW1lKCkgLSBzZWxmLnN0YXJ0CgoKZGVmIG1haW4oKToKICAgIGNhc2VzID0gWwogICAgICAgIFtyYW5kb20ucmFuZG9tKCkgZm9yIF8gaW4gcmFuZ2UoQ0FTRV9MRU4pXSBmb3IgXyBpbiByYW5nZShDQVNFX05VTUJFUlMpCiAgICBdCiAgICBmb3IgdCBpbiByYW5nZSgyLCAxMCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzb3J0ID0gc2hlbGxfc29ydF9mYWN0b3J5KHQpCiAgICAgICAgY29weWVkX2Nhc2UgPSBbYS5jb3B5KCkgZm9yIGEgaW4gY2FzZXNdCiAgICAgICAgdG90YWxfdGltZSA9IDAuMAogICAgICAgIGZvciBjYXNlIGluIGNvcHllZF9jYXNlOgo8fGZpbV9lbmR8Pg=="]
["c24b295f9977c8e41a45a30b7b78be5ac1f03050-3","c24b295f9977c8e41a45a30b7b78be5ac1f03050","PHxmaW1fcHJlZml4fD4KIiIiClRlc3RzIHRvIG1ha2Ugc3VyZSB0aGUgYmVoYXZpb3VyIG9mIHRoZSBidWlsdGlucyBpcyBzZW5zaWJsZSBhbmQgY29ycmVjdC4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydCwgZGl2aXNpb24sIHVuaWNvZGVfbGl0ZXJhbHMKZnJvbSBmdXR1cmUuYnVpbHRpbnMgaW1wb3J0ICoKZnJvbSBmdXR1cmUudXRpbHMgaW1wb3J0IFBZMwpmcm9tIGZ1dHVyZS50ZXN0cy5iYXNlIGltcG9ydCB1bml0dGVzdAoKaW1wb3J0IHRleHR3cmFwCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQb3BlbiwgUElQRQpmcm9tIG51bWJlcnMgaW1wb3J0IEludGVncmFsCmZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbAoKPHxmaW1fZW5kfD4="]
["f5bd2be1a3ef1e7f78e9a5a8fabf3e6d847a4425-3","f5bd2be1a3ef1e7f78e9a5a8fabf3e6d847a4425","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KZnJvbSAubW9kZWxzIGltcG9ydCAoCiAgICBIb3RlbHMsCiAgICBIb3RlbFR5cGVzLAogICAgUm9vbVR5cGVzLAogICAgUm9vbSwKICAgIFBob3RvLAogICAgUm9vbVBob3RvLAogICAgUGFja2FnZVBob3RvLAogICAgUGFja2FnZXMsCiAgICBQYWNrYWdlVHlwZXMsCiAgICBJdGluaXJlcnksCiAgICBIb3RlbFBhY2thZ2VzLAogICAgU2xpZGVyLAoKCikKPHxmaW1faG9sZXw+CiAgICBwcmVwb3B1bGF0ZWRfZmllbGRzID0geydzbHVnJzogKCduYW1lJywpfSAgIyBuZXcKCgpjbGFzcyBQYWNrYWdlc0FkbWluKGFkbWluLk1vZGVsQWRtaW4pOgogICAgIyBsaXN0X2Rpc3BsYXkgPSAoJ3RpdGxlJywgJ2JvZHknLCkKICAgIHByZXBvcHVsYXRlZF9maWVsZHMgPSB7J3NsdWcnOiAoJ3RpdGxlJywpfSAgIyBuZXcKCgpjbGFzcyBSb29tQWRtaW4oYWRtaW4uTW9kZWxBZG1pbik6CiAgICAjIGxpc3RfZGlzcGxheSA9ICgndGl0bGUnLCAnYm9keScsKQogICAgcHJlcG9wdWxhdGVkX2ZpZWxkcyA9IHsnc2x1Zyc6ICgncm9vbV9OYW1lJywgJ3Jvb21fdHlwZScsKX0gICMgbmV3CgogICAgY2xhc3MgTWV0YToKICAgICAgICBtb2RlbCA9IFJvb20KCgpjbGFzcyBTbGlkZXJBZG1pbihhZG1pbi5Nb2RlbEFkbWluKToKICAgIGxpc3RfZGlzcGxheSA9IFsiX19zdHJfXyIsICJzdGFydF9EYXRlIiwgImVuZF9EYXRlIiwgImFjdGl2ZSIsICJmZWF0dXJlZCJdCgogICAgY2xhc3MgTWV0YToKICAgICAgICBtb2RlbCA9IFNsaWRlcgoKCmFkbWluLnNpdGUucmVnaXN0ZXIoSG90ZWxzLCBIb3RlbHNBZG1pbikKCmFkbWluLnNpdGUucmVnaXN0ZXIoSG90ZWxUeXBlcykKYWRtaW4uc2l0ZS5yZWdpc3RlcihSb29tVHlwZXMpCgphZG1pbi5zaXRlLnJlZ2lzdGVyKFJvb20sIFJvb21BZG1pbikKCmFkbWluLnNpdGUucmVnaXN0ZXIoUGhvdG8pCgphZG1pbi5zaXRlLnJlZ2lzdGVyKFJvb21QaG90bykKCmFkbWluLnNpdGUucmVnaXN0ZXIoUGFja2FnZVBob3RvKQoKYWRtaW4uc2l0ZS5yZWdpc3RlcihQYWNrYWdlcywgUGFja2FnZXNBZG1pbikKCmFkbWluLnNpdGUucmVnaXN0ZXIoUGFja2FnZVR5cGVzKQoKYWRtaW4uc2l0ZS5yZWdpc3RlcihJdGluaXJlcnkpCgphZG1pbi5zaXRlLnJlZ2lzdGVyKEhvdGVsUGFja2FnZXMpCgoKYWRtaW4uc2l0ZS5yZWdpc3RlcihTbGlkZXIsIFNsaWRlckFkbWluKQo8fGZpbV9zdWZmaXh8PgoKCmNsYXNzIEhvdGVsc0FkbWluKGFkbWluLk1vZGVsQWRtaW4pOgogICAgIyBsaXN0X2Rpc3BsYXkgPSAoJ3RpdGxlJywgJ2JvZHknLCkKPHxmaW1fZW5kfD4="]
["26a00f62730768ece5145099f49fc77500d3b2b0-2","26a00f62730768ece5145099f49fc77500d3b2b0","PHxmaW1fcHJlZml4fD4KZnJvbSAuZWFzeXF1aXogaW1wb3J0IFF1aXosIFF1aXpRdWVzdGlvbgoKX192ZXJzaW9uX18gPSAnMC4yJwpfX2F1dGhvcl9fID0gJ1BhYmxvIExhcGXDsWEgTWHDsWVybycKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpfX2NvbnRhY3RfXyA9ICdwbGFwZW5hbWFuZXJvQGdtYWlsLmNvbScKX191cmxfXyA9ICdodHRwczovL2dpdGh1Yi5jb20vcGxhcGVuYW1hbmVyby9lYXN5cXVpeicKX19kZXNjcmlwdGlvbl9fID0gJ1F1aWNrIGFuZCBlYXN5IHF1aXogY3JlYXRpb24gZm9yIElQeXRob24nCl9fa2V5d29yZHNfXyA9ICdxdWl6IElQeXRob24nCjx8ZmltX2VuZHw+"]
["9d429fe1843e938229ee2b557020df5f7c3880ad-4","9d429fe1843e938229ee2b557020df5f7c3880ad","PHxmaW1fcHJlZml4fD4KCmZyb20gLi5zZXF1ZW5jZXIuc2VxdWVuY2VyX2RhdGEgaW1wb3J0IFdhdmUsIEFjcXVpc2l0aW9uQmlucywgQWNxdWlzaXRpb25XZWlnaHQKZnJvbSAuLmxhbmcuZXhjZXB0aW9ucyBpbXBvcnQgUTFUeXBlRXJyb3IKCmNsYXNzIEdlbmVyYXRvckRhdGE6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi53YXZlZm9ybXMgPSB7fQogICAgICAgIHNlbGYud2VpZ2h0cyA9IHt9CiAgICAgICAgc2VsZi5hY3F1aXNpdGlvbnMgPSB7fQoKICAgIGRlZiB0cmFuc2xhdGVfd2F2ZShzZWxmLCB3YXZlKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHdhdmUsIFdhdmUpOgogICAgICAgICAgICByYWlzZSBRMVR5cGVFcnJvcihmJ1Vuc3VwcG9ydGVkIHR5cGUgZm9yIHdhdmU6IHt3YXZlfScpCgogICAgICAgIGlmIHdhdmUubmFtZSBub3QgaW4gc2VsZi53YXZlZm9ybXM6Cjx8ZmltX2VuZHw+"]
["dfbaa34d3454c77af9ca28aa1b4bf28f5fbe9a06-3","dfbaa34d3454c77af9ca28aa1b4bf28f5fbe9a06","PHxmaW1fcHJlZml4fD4KZnJvbSAubWN0cyBpbXBvcnQgcHZfbWN0c19hY3Rpb24KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIC5tb2RlbCBpbXBvcnQgRHVhbE5ldAo8fGZpbV9lbmR8Pg=="]
["a0d403efcb97ecbe03d3a4e51f17a1f2d6e17693-3","a0d403efcb97ecbe03d3a4e51f17a1f2d6e17693","PHxmaW1fcHJlZml4fD4KZnJvbSAubGlua2VkX2xpc3QgaW1wb3J0IExpbmtlZExpc3QKCgpkZWYgdGVzdF9leGlzdHMoKToKICAgICIiIlRoZSBjbGFzcyBleGlzdHMKICAgICIiIgogICAgYXNzZXJ0IExpbmtlZExpc3QKCgpkZWYgdGVzdF9pbnN0YW50aWF0aW9uKCk6CiAgICAiIiJDYW4gc3VjY2Vzc2Z1bGx5IGluc3RhbnRpYXRlIGFuIGVtcHR5IGxpbmtlZCBsaXN0CiAgICAiIiIKICAgIGFzc2VydCBMaW5rZWRMaXN0KCkKCgpkZWYgdGVzdF9pbnNlcnQoKToKICAgICIiIkNhbiBwcm9wZXJseSBpbnNlcnQgaW50byB0aGUgbGlua2VkIGxpc3QKICAgIFRoZSBoZWFkIHByb3BlcnR5IHdpbGwgcHJvcGVybHkgcG9pbnQgdG8gdGhlIGZpcnN0IG5vZGUgaW4gdGhlIGxpbmtlZCBsaXN0CiAgICAiIiIKICAgIGZydWl0cyA9IExpbmtlZExpc3QoKQogICAgZnJ1aXRzLmxsX2luc2VydCgnYXBwbGVzJykKCiAgICBleHBlY3RlZCA9ICdhcHBsZXMnCiAgICBhY3R1YWwgPSBmcnVpdHMuaGVhZC52YWx1ZQoKICAgIGFzc2VydCBleHBlY3RlZCA9PSBhY3R1YWwKCgpkZWYgdGVzdF9pbnNlcnRfdHdvKCk6CiAgICAiIiJDYW4gcHJvcGVybHkgaW5zZXJ0IG11bHRpcGxlIG5vZGVzIGludG8gdGhlIGxpbmtlZCBsaXN0CiAgICAiIiIKICAgIGZydWl0cyA9IExpbmtlZExpc3QoKQogICAgZnJ1aXRzLmxsX2luc2VydCgnYXBwbGVzJykKICAgIGZydWl0cy5sbF9pbnNlcnQoJ2JhbmFuYXMnKQoKICAgIGV4cGVjdGVkID0gJ2JhbmFuYXMnCiAgICBhY3R1YWwgPSBmcnVpdHMuaGVhZC52YWx1ZQoKICAgIGFzc2VydCBleHBlY3RlZCA9PSBhY3R1YWwKCgpkZWYgdGVzdF9pbmNsdWRlcygpOgogICAgIiIiV2lsbCByZXR1cm4gdHJ1ZSB3aGVuIGZpbmRpbmcgYSB2YWx1ZSB3aXRoaW4gdGhlIGxpbmtlZCBsaXN0IHRoYXQgZXhpc3RzCiAgICAiIiIKICAgIGZydWl0cyA9IExpbmtlZExpc3QoKQogICAgZnJ1aXRzLmxsX2luc2VydCgnYXBwbGVzJykKICAgIGZydWl0cy5sbF9pbnNlcnQoJ2JhbmFuYXMnKQogICAgZnJ1aXRzLmxsX2luc2VydCgnZGF0ZXMnKQoKICAgIGFzc2VydCBmcnVpdHMubGxfaW5jbHVkZXMoJ2JhbmFuYXMnKQoKCmRlZiB0ZXN0X25vdF9pbmNsdWRlcygpOgogICAgIiIiV2lsbCByZXR1cm4gZmFsc2Ugd2hlbiBzZWFyY2hpbmcgZm9yIGEgdmFsdWUgaW4gdGhlIGxpbmtlZCBsaXN0IHRoYXQgZG9lcyBub3QgZXhpc3QKICAgICIiIgogICAgZnJ1aXRzID0gTGlua2VkTGlzdCgpCiAgICBmcnVpdHMubGxfaW5zZXJ0KCdhcHBsZXMnKQogICAgZnJ1aXRzLmxsX2luc2VydCgnYmFuYW5hcycpCiAgICBmcnVpdHMubGxfaW5zZXJ0KCdkYXRlcycpCgogICAgYXNzZXJ0IG5vdCBmcnVpdHMubGxfaW5jbHVkZXMoJ3p1Y2NoaW5pJykKCgpkZWYgdGVzdF9wcmludCgpOgogICAgIiIiQ2FuIHByb3Blcmx5IHJldHVybiBhIGNvbGxlY3Rpb24gb2YgYWxsIHRoZSB2YWx1ZXMgdGhhdCBleGlzdCBpbiB0aGUgbGlua2VkIGxpc3QKICAgICIiIgogICAgZnJ1aXRzID0gTGlua2VkTGlzdCgpCiAgICBmcnVpdHMubGxfaW5zZXJ0KCdhcHBsZXMnKQogICAgZnJ1aXRzLmxsX2luc2VydCgnYmFuYW5hcycpCiAgICBmcnVpdHMubGxfaW5zZXJ0KCdkYXRlcycpCgogICAgYXNzZXJ0IGZydWl0cy5sbF9wcmludCgpID09ICctIGRhdGVzIC0tIGJhbmFuYXMgLS0gYXBwbGVzIC0nCgoKZGVmIHRlc3RfcHJpbnRfZW1wdHlfbGwoKToKICAgICIiIkNhbiByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBsaW5rZWQgbGlzdCBpcyBlbXB0eQogICAgIiIiCiAgICBmcnVpdHMgPSBMaW5rZWRMaXN0KCkKCiAgICBhc3NlcnQgZnJ1aXRzLmxsX3ByaW50KCkgPT0gJycKCgpkZWYgdGVzdF9ub192YWx1ZSgpOgogICAgIiIiV2lsbCByZXR1cm4gYSBtZXNzYWdlIGlmIGEgdmFsdWUgaXMgbm90IHByb3ZpZGVkLgogICAgIiIiCiAgICBmcnVpdHMgPSBMaW5rZWRMaXN0KCkKCiAgICBhc3NlcnQgZnJ1aXRzLmxsX2luc2VydCgnJykgPT0gJ05vZGUgbmVlZHMgYSB2YWx1ZScKCgpkZWYgdGVzdF9hcHBlbmQoKToKICAgICIiIkNhbiByZXR1cm4gYXBwZW5kIGEgbmV3IG5vZGUgdG8gdGhlIGVuZCBvZiBhIGxpbmtlZCBsaXN0CiAgICAiIiIKICAgIGZydWl0cyA9IExpbmtlZExpc3QoKQogICAgZnJ1aXRzLmxsX2luc2VydCgnYXBwbGVzJykKCiAgICBleHBlY3RlZCA9ICdhcHBsZXMnCiAgICBhY3R1YWwgPSBmcnVpdHMuaGVhZC52YWx1ZQoKICAgIGFzc2VydCBleHBlY3RlZCA9PSBhY3R1YWwKCgpkZWYgdGVzdF9hcHBlbmRfdHdvKCk6CiAgICAiIiJDYW4gYXBwZW5kIHR3byBub2RlcyB0byB0aGUgZW5kIG9mIGEgbGlua2VkIGxpc3QKICAgICIiIgogICAgZnJ1aXRzID0gTGlua2VkTGlzdCgpCiAgICBmcnVpdHMubGxfYXBwZW5kKCdhcHBsZXMnKQogICAgZnJ1aXRzLmxsX2FwcGVuZCgnYmFuYW5hcycpCgogICAgZXhwZWN0ZWQgPSAnYXBwbGVzJwogICAgYWN0dWFsID0gZnJ1aXRzLmhlYWQudmFsdWUKCiAgICBhc3NlcnQgZXhwZWN0ZWQgPT0gYWN0dWFsCgogICAgZXhwZWN0ZWQgPSAnYmFuYW5hcycKICAgIGFjdHVhbCA9IGZydWl0cy5oZWFkLl9uZXh0LnZhbHVlCgogICAgYXNzZXJ0IGV4cGVjdGVkID09IGFjdHVhbAoKCgpkZWYgdGVzdF9pbnNlcnRfYmVmb3JlKCk6CiAgICAiIiJDYW4gaW5zZXJ0IGEgbmV3IG5vZGUgYmVmb3JlIGEgZ2l2ZW4gdmFsdWUKICAgICIiIgogICAgZnJ1aXRzID0gTGlua2VkTGlzdCgpCiAgICBmcnVpdHMubGxfYXBwZW5kKCdhcHBsZXMnKQogICAgZnJ1aXRzLmxsX2FwcGVuZCgnYmFuYW5hcycpCiAgICBmcnVpdHMubGxfYXBwZW5kKCdwZWFycycpCgogICAgZnJ1aXRzLmxsX2luc2VydF9iZWZvcmUoJ3BlYXJzJywgJ2ZpZ3MnKQoKICAgIGFzc2VydCBmcnVpdHMubGxfcHJpbnQoKSA9PSAnLSBhcHBsZXMgLS0gYmFuYW5hcyAtLSBmaWdzIC0tIHBlYXJzIC0nCgoKZGVmIHRlc3RfaW5zZXJ0X2FmdGVyKCk6CiAgICAiIiJDYW4gaW5zZXJ0IGEgbm9kZSBhZnRlciBhIGdpdmVuIHZhbHVlCiAgICAiIiIKICAgIGZydWl0cyA9IExpbmtlZExpc3QoKQogICAgZnJ1aXRzLmxsX2luc2VydCgnYXBwbGVzJykKICAgIGZydWl0cy5sbF9pbnNlcnQoJ2JhbmFuYXMnKQogICAgZnJ1aXRzLmxsX2luc2VydCgncGVhcnMnKQogICAgZnJ1aXRzLmxsX2luc2VydF9hZnRlcignYmFuYW5hcycsICdmaWdzJykKCgpkZWYgdGVzdF9rX2Zyb21fZW5kKCk6CiAgICAiIiJDYW4gcmV0dXJuIHRoZSB2YWx1ZSBvZiBhIG5vZGUgYXQgdGhlIGt0aCBwb3NpdGlvbiBmcm9tIHRoZSBlbmQgb2YgYSBsaW5rZWQgbGlzdAogICAgIiIiCiAgICBmcnVpdHMgPSBMaW5rZWRMaXN0KCkKICAgIGZydWl0cy5sbF9pbnNlcnQoJ2FwcGxlcycpCiAgICBmcnVpdHMubGxfaW5zZXJ0KCdiYW5hbmFzJykKICAgIGZydWl0cy5sbF9pbnNlcnQoJ3BlYXJzJykKICAgIGZydWl0cy5sbF9pbnNlcnQoJ2ZpZ3MnKQogICAgZnJ1aXRzLmxsX2luc2VydCgnb3JhbmdlcycpCiAgICBrID0gMgoKICAgIGV4cGVjdGVkID0gJ3BlYXJzJwogICAgYWN0dWFsID0gZnJ1aXRzLmxsX2tfZnJvbV9lbmQoaykKCiAgICBhc3NlcnQgZXhwZWN0ZWQgPT0gYWN0dWFsCgoKZGVmIHRlc3Rfa19lbXB0eV9sbCgpOgogICAgIiIiV2lsbCByZXR1cm4gYSBtZXNzYWdlIGlmIHRoZSBsaW5rZWQgbGlzdCBpcyBlbXB0eQogICAgIiIiCiAgICBmcnVpdHMgPSBMaW5rZWRMaXN0KCkKICAgIGsgPSAzCgogICAgZXhwZWN0ZWQgPSAnZW1wdHkgbGlua2VkIGxpc3QnCiAgICBhY3R1YWwgPSBmcnVpdHMubGxfa19mcm9tX2VuZChrKQoKICAgIGFzc2VydCBleHBlY3RlZCA9PSBhY3R1YWwKCgpkZWYgdGVzdF9rX2xhcmdlcl90aGFuX2xsKCk6CiAgICAiIiJXaWxsIHJldHVybiBhIG1lc3NhZ2UgaWYgdGhlIGdpdmUga3RoIHBvc2l0aW9uIGlzIGxhcmdlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIGxpbmtlZCBsaXN0CiAgICAiIiIKICAgIGZydWl0cyA9IExpbmtlZExpc3QoKQogICAgZnJ1aXRzLmxsX2luc2VydCgnYXBwbGVzJykKICAgIGZydWl0cy5sbF9pbnNlcnQoJ2JhbmFuYXMnKQogICAgZnJ1aXRzLmxsX2luc2VydCgncGVhcnMnKQogICAgZnJ1aXRzLmxsX2luc2VydCgnZmlncycpCiAgICBmcnVpdHMubGxfaW5zZXJ0KCdvcmFuZ2VzJykKCiAgICBhc3NlcnQgZnJ1aXRzLmxsX2tfZnJvbV9lbmQoNikgPT0gJ0V4Y2VwdGlvbicKCgpkZWYgdGVzdF9sbF9tZXJnZV9zYW1lX2xlbmd0aCgpOgogICAgIiIiCiAgICAiIiIKICAgIGZydWl0cyA9IExpbmtlZExpc3QoKQogICAgZnJ1aXRzLmxsX2luc2VydCgnYXBwbGVzJykKICAgIGZydWl0cy5sbF9pbnNlcnQoJ2JhbmFuYXMnKQogICAgZnJ1aXRzLmxsX2luc2VydCgncGVhcnMnKQogICAgZnJ1aXRzLmxsX2luc2VydCgnZmlncycpCiAgICBmcnVpdHMubGxfaW5zZXJ0KCdvcmFuZ2VzJykKCjx8ZmltX2hvbGV8PgogICAgdmVnZXRhYmxlcy5sbF9pbnNlcnQoJ3BvdGF0b3MnKQogICAgdmVnZXRhYmxlcy5sbF9pbnNlcnQoJ2NhYmJhZ2VzJykKCiAgICBleHBlY3RlZCA9IGZydWl0cy5oZWFkCiAgICBhY3R1YWwgPSBmcnVpdHMubGxfbWVyZ2UodmVnZXRhYmxlcykKCiAgICBhc3NlcnQgZXhwZWN0ZWQgPT0gYWN0dWFsCgoKZGVmIHRlc3RfbGxfbWVyZ2VfYm90aF9lbXB0eV9saXN0cygpOgogICAgIiIiCiAgICAiIiIKICAgIGZydWl0cyA9IExpbmtlZExpc3QoKQogICAgdmVnZXRhYmxlcyA9IExpbmtlZExpc3QoKQoKICAgIGV4cGVjdGVkID0gJ2VtcHR5IGxpbmtlZCBsaXN0JwogICAgYWN0dWFsID0gZnJ1aXRzLmxsX21lcmdlKHZlZ2V0YWJsZXMpCgogICAgYXNzZXJ0IGV4cGVjdGVkID09IGFjdHVhbAoKCmRlZiB0ZXN0X2xsX21lcmdlX2RpZmZlcmVudF9sZW5ndGhzKCk6CiAgICAiIiIKICAgICIiIgogICAgZnJ1aXRzID0gTGlua2VkTGlzdCgpCiAgICBmcnVpdHMubGxfaW5zZXJ0KCdhcHBsZXMnKQogICAgZnJ1aXRzLmxsX2luc2VydCgnYmFuYW5hcycpCiAgICBmcnVpdHMubGxfaW5zZXJ0KCdwZWFycycpCgogICAgdmVnZXRhYmxlcyA9IExpbmtlZExpc3QoKQogICAgdmVnZXRhYmxlcy5sbF9pbnNlcnQoJ2N1Y3VtZXJzJykKICAgIHZlZ2V0YWJsZXMubGxfaW5zZXJ0KCd0b21hdG9zJykKCiAgICBleHBlY3RlZCA9IGZydWl0cy5oZWFkCiAgICBhY3R1YWwgPSBmcnVpdHMubGxfbWVyZ2UodmVnZXRhYmxlcykKCiAgICBhc3NlcnQgZXhwZWN0ZWQgPT0gYWN0dWFsCgoKZGVmIHRlc3RfbGxfbWVyZ2Vfb25lX2VtcHR5KCk6CiAgICAiIiIKICAgICIiIgogICAgZnJ1aXRzID0gTGlua2VkTGlzdCgpCiAgICBmcnVpdHMubGxfaW5zZXJ0KCdhcHBsZXMnKQogICAgZnJ1aXRzLmxsX2luc2VydCgnYmFuYW5hcycpCiAgICBmcnVpdHMubGxfaW5zZXJ0KCdwZWFycycpCgogICAgdmVnZXRhYmxlcyA9IExpbmtlZExpc3QoKQoKICAgIGV4cGVjdGVkID0gZnJ1aXRzLmhlYWQKICAgIGFjdHVhbCA9IGZydWl0cy5sbF9tZXJnZSh2ZWdldGFibGVzKQoKICAgIGFzc2VydCBleHBlY3RlZCA9PSBhY3R1YWwKICAgIAo8fGZpbV9zdWZmaXh8PgogICAgdmVnZXRhYmxlcyA9IExpbmtlZExpc3QoKQogICAgdmVnZXRhYmxlcy5sbF9pbnNlcnQoJ2N1Y3VtZXJzJykKICAgIHZlZ2V0YWJsZXMubGxfaW5zZXJ0KCd0b21hdG9zJykKICAgIHZlZ2V0YWJsZXMubGxfaW5zZXJ0KCdvbGl2ZXMnKQo8fGZpbV9lbmR8Pg=="]
["eb0ff5ca3bcebf4ce77b45e77ff199c5e277799c-4","eb0ff5ca3bcebf4ce77b45e77ff199c5e277799c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzeXMKaW1wb3J0IGRhdGV0aW1lCgpkZWYgYmFja3VwKGRpcm5hbWUpOgogICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkKICAgIG9zLnN5c3RlbSgibWtkaXIgIiArIHBhdGggKyAiLy4uLy4uLy4uL2JhY2t1cHMvYmFja3VwIiArIGRpcm5hbWUpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIG9zLnN5c3RlbSgiY3AgLXIgIiArIHBhdGggKyAiLy4uL3Jlc3VsdHMgIiArIHBhdGggKwogICAgICAgICAgICAgICIvLi4vLi4vLi4vYmFja3Vwcy9iYWNrdXAiICsgZGlybmFtZSArICIvIikKICAgIG9zLnN5c3RlbSgiY3AgLXIgIiArIHBhdGggKyAiLy4uL3Bvc3Rwcm9jZXNzaW5nICIgKwogICAgICAgICAgICAgIHBhdGggKyAiLy4uLy4uLy4uL2JhY2t1cHMvYmFja3VwIiArIGRpcm5hbWUgKyAiLyIpCjx8ZmltX2VuZHw+"]
["cd856d5446db3b5fad2046e88c4c67f3c029ca01-1","cd856d5446db3b5fad2046e88c4c67f3c029ca01","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uYXBwcyBpbXBvcnQgQXBwQ29uZmlnCjx8ZmltX2hvbGV8PgogICAgbmFtZSA9ICdhcHAnCgogICAgZGVmIHJlYWR5KHNlbGYpOgogICAgICAgICIiIgogICAgICAgIOmhueebruWQr+WKqOeahOi/h+eoi+S4reiiq+i/kOihjOS4pOasoQogICAgICAgIDpyZXR1cm46CiAgICAgICAgIiIiCiAgICAgICAgIyBwcmludCgxKSAgIyDmiZPljbAy5qyh77yMCiAgICAgICAgIyBmcm9tIGFwcC5zaWduYWxzIGltcG9ydCBhcHAgICMg5LiN56ym5ZCIcGVwOOinhOiMg++8jOW6lOivpeS9v+eUqOS4i+mdoueahOaWueW8jwogICAgICAgIGltcG9ydF9tb2R1bGUoJ2FwcC5zaWduYWxzLmFwcCcpCjx8ZmltX3N1ZmZpeHw+CmZyb20gZGphbmdvLnV0aWxzLm1vZHVsZV9sb2FkaW5nIGltcG9ydCBpbXBvcnRfbW9kdWxlCgoKY2xhc3MgQXBwQ29uZmlnKEFwcENvbmZpZyk6Cjx8ZmltX2VuZHw+"]
["de5e50ec7dad6d1a3bc5e303ecfa7220b252f34d-1","de5e50ec7dad6d1a3bc5e303ecfa7220b252f34d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcsIHRpbWUsb3MsIGRhdGV0aW1lLCBwbGF0Zm9ybQpmcm9tIGxvZ2dpbmcuaGFuZGxlcnMgaW1wb3J0IFJvdGF0aW5nRmlsZUhhbmRsZXIKCmRlZiBwYXRoX2NvbnZlcnRlcihpbnB1dF9zdHJpbmcpOgogICAgICAgIGlmIHBsYXRmb3JtLnN5c3RlbSgpID09ICdXaW5kb3dzJzoKICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dF9zdHJpbmcucmVwbGFjZSgiLyIsICJcXCIpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dF9zdHJpbmcucmVwbGFjZSgiXFwiLCAiLyIpCgpjbGFzcyBMb2dnZXIoKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dfZmlsZSk6CiAgICAgICAgZGF0ZVRhZyA9IGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCIlWS0lYi0lZF8lSC0lTS0lUyIpCiAgICAgICAgc2VsZi5sb2dfbG9jYXRpb24gPSBwYXRoX2NvbnZlcnRlcihsb2dfZmlsZSArICJcb2F1dGgtb3V0cHV0LSVzLmxvZyIgJSBkYXRlVGFnKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5sb2dfZmlsZSA9IG9wZW4oc2VsZi5sb2dfbG9jYXRpb24sICJ3KyIsIDEpCiAgICAgICAgc2VsZi5yZW5kZXJfb3V0cHV0ID0gW10KICAgICAgICBzZWxmLmxvZygiT0F1dGggVHJvdWJsZXNob290aW5nIFRvb2wgdjAuMVxuXG4iKQogICAgICAgIHNlbGYubG9nKCJESVNDTEFJTUVSOiBUaGlzIGlzIGFuIG9wZW4gc291cmNlIHRvb2wgbWVhbnQgdG8gaGVscCB2ZXJpZnkgT0F1dGggY2xpZW50IGNvbm5lY3Rpb25zLiBJdCBpcyBub3QgaW50ZW5kZWQgZm9yIHByb2R1Y3Rpb24gdXNlLlxuXG5cbiIpCjx8ZmltX2VuZHw+"]
["5f1dba44eda4b2c4d4c24f88582a79c77bfc7f5b-1","5f1dba44eda4b2c4d4c24f88582a79c77bfc7f5b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBvcwoKZnJvbSBqdW9tYWJvdCBpbXBvcnQgYXBpCmZyb20ganVvbWFib3QuZXhjcyBpbXBvcnQgUHJvYmxlbQoKQURNSU5fUEFTU1dPUkQgPSBvcy5lbnZpcm9uLmdldCgnQURNSU5fUEFTU1dPUkQnLCAnaGFja21lJykKCgphcCA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J2p1b21hYm90JywgYWRkX2hlbHA9RmFsc2UpCmFwLmFkZF9hcmd1bWVudCgnLXAnLCAnLS1wYXNzd29yZCcsIGRlZmF1bHQ9Tm9uZSkKYXAuYWRkX2FyZ3VtZW50KCctaCcsICctLWhlbHAnLCBkZXN0PSdhY3Rpb24nLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J2hlbHAnKQphcC5hZGRfYXJndW1lbnQoJy1sJywgJy0tcHJpY2VsaXN0JywgZGVzdD0nYWN0aW9uJywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PSdwcmljZWxpc3QnKQphcC5hZGRfYXJndW1lbnQoJy1hJywgJy0tYWRkLXByb2R1Y3QnLCBkZXN0PSdhY3Rpb24nLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J2FkZF9wcm9kdWN0JywgaGVscD0nYWRkIGEgbmV3IHByb2R1Y3QnKQphcC5hZGRfYXJndW1lbnQoJy1lJywgJy0tZWRpdC1wcm9kdWN0JywgZGVzdD0nYWN0aW9uJywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PSdlZGl0X3Byb2R1Y3QnLCBoZWxwPSdlZGl0IGEgbmFtZWQgcHJvZHVjdCcpCmFwLmFkZF9hcmd1bWVudCgnLXQnLCAnLS10b2dnbGUtcHJvZHVjdCcsIGRlc3Q9J2FjdGlvbicsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0ndG9nZ2xlX3Byb2R1Y3QnLCBoZWxwPSdlbmFibGUgb3IgZGlzYWJsZSBhIHByb2R1Y3QnKQphcC5hZGRfYXJndW1lbnQoJy1zJywgJy0tc3RhdHMnLCBkZXN0PSdhY3Rpb24nLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J3N0YXRzJywgaGVscD0nc2VlIHlvdXIgcGVyc29uYWwgc3RhdHMnKQphcC5hZGRfYXJndW1lbnQoJy1iJywgJy0tYmlsbGluZy1zdGF0cycsIGRlc3Q9J2FjdGlvbicsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nYmlsbGluZ19zdGF0cycsIGhlbHA9J3NlZSBiaWxsaW5nIHN0YXRpc3RpY3MgaW4gQ1NWIGZvcm0nKQphcC5hZGRfYXJndW1lbnQoJy1CJywgJy0tYmlsbCcsIGRlc3Q9J2JpbGxfc2lnJywgZGVmYXVsdD1Ob25lLCBoZWxwPSdiaWxsIGEgYmlsbGluZyBzdGF0aXN0aWNzIHJlcG9ydCcpCmFwLmFkZF9hcmd1bWVudCgnLS1wcmljZScsIGRlc3Q9J3ByaWNlJywgZGVmYXVsdD1Ob25lLCBoZWxwPSdwcmljZSBmb3IgYSBuZXcgb3IgZWRpdGVkIHByb2R1Y3QnKQphcC5hZGRfYXJndW1lbnQoJ3BhcmFtcycsIG5hcmdzPScqJywgaGVscD0nb3RoZXIgcGFyYW1zLCBkZXBlbmRzIG9uIHRoZSBjb21tYW5kLiB1c3VhbGx5IHRoZSBkcmluayBuYW1lLicpCgpyZWd1bGFyX2NvbW1hbmRzID0gewo8fGZpbV9ob2xlfD4KfQoKYWRtaW5fY29tbWFuZHMgPSB7CiAgICAnYWRkX3Byb2R1Y3QnOiBsYW1iZGEgYXJnczogYXBpLmFkZF9wcm9kdWN0KG5hbWU9YXJncy5wYXJhbXMsIHByaWNlPWFyZ3MucHJpY2UpLAogICAgJ2VkaXRfcHJvZHVjdCc6IGxhbWJkYSBhcmdzOiBhcGkuZWRpdF9wcm9kdWN0KG5hbWU9YXJncy5wYXJhbXMsIHByaWNlPWFyZ3MucHJpY2UpLAogICAgJ3RvZ2dsZV9wcm9kdWN0JzogbGFtYmRhIGFyZ3M6IGFwaS50b2dnbGVfcHJvZHVjdF92aXNpYmxlKG5hbWU9YXJncy5wYXJhbXMpLAogICAgJ2JpbGxpbmdfc3RhdHMnOiBsYW1iZGEgYXJnczogYXBpLmJpbGxpbmdfc3RhdHMoKSwKICAgICdiaWxsJzogbGFtYmRhIGFyZ3M6IGFwaS5iaWxsKGJpbGxfc2lnPWFyZ3MuYmlsbF9zaWcsIGJpbGxlcj1hcmdzLnNlbmRlciksCn0KCmRlZiBfZGlzcGF0Y2hfY29tbWFuZChhY3Rpb24sIGFyZ3MpOgogICAgaWYgYWN0aW9uIGluIGFkbWluX2NvbW1hbmRzOgogICAgICAgIGlmIChhcmdzLnBhc3N3b3JkID09IEFETUlOX1BBU1NXT1JEKToKICAgICAgICAgICAgcmV0dXJuIGFkbWluX2NvbW1hbmRzW2FjdGlvbl0oYXJncykKICAgICAgICBlbHNlOgogICAgICAgICAgICByYWlzZSBQcm9ibGVtKAogICAgICAgICAgICAgICAgJ1NvcnJ5LCB5b3UgbmVlZCB0byBiZSBhbiBhZG1pbiB0byBkbyAlcy4gVXNlIHRoZSBgLXBgIHN3aXRjaCB0byBlbnRlciBhIHBhc3N3b3JkLicgJSBhY3Rpb24sCiAgICAgICAgICAgICAgICBjb2RlPSdub3QtYW4tYWRtaW4nCiAgICAgICAgICAgICkKCiAgICByZXR1cm4gcmVndWxhcl9jb21tYW5kc1thY3Rpb25dKGFyZ3MpCgoKZGVmIHJ1bl9jb21tYW5kKHNlbmRlciwgdGV4dCk6CiAgICAiIiIKICAgIFJ1biBhIGNvbW1hbmQgYW5kIHJldHVybiB0aGUgcmVzcG9uc2UgdGV4dCAob3IgcmFpc2UgYSBQcm9ibGVtKQoKICAgIDpwYXJhbSBzZW5kZXI6IFRoZSBzZW5kZXIgdXNlcm5hbWUuCiAgICA6dHlwZSBzZW5kZXI6IHN0cgogICAgOnBhcmFtIHRleHQ6IFRoZSBjb21tYW5kIChhZnRlciB0aGUgc2xhc2ggY29tbWFuZDsgYXMgc2VudCBieSBTbGFjaykKICAgIDp0eXBlIHRleHQ6IHN0cgogICAgOnJldHVybjogUmVzcG9uc2UgdGV4dAogICAgOnJ0eXBlOiBzdHIKICAgIDpyYWlzZXMgUHJvYmxlbTogaWYgc29tZXRoaW5nIGdvZXMgYXdyeS4KICAgICIiIgogICAgYXJncyA9IGFwLnBhcnNlX2FyZ3ModGV4dC5yZXBsYWNlKCfigJQnLCAnLS0nKS5zcGxpdCgpKQogICAgYWN0aW9uID0gZ2V0YXR0cihhcmdzLCAnYWN0aW9uJywgTm9uZSkgb3IgJ2FkZF9wdXJjaGFzZScKICAgIGlmIGFjdGlvbiA9PSAnaGVscCc6CiAgICAgICAgcmV0dXJuICc6aW5mb3JtYXRpb25fZGVza19wZXJzb246IEhlcmVcJ3Mgc29tZSBoZWxwIGZvciB5b3UhXG5gYGBcbiVzXG5gYGAnICUgYXAuZm9ybWF0X2hlbHAoKQogICAgYXJncy5wYXJhbXMgPSAoJyAnLmpvaW4oYXJncy5wYXJhbXMpKS5zdHJpcCgiIFwnIikKICAgIGFyZ3Muc2VuZGVyID0gc2VuZGVyCgogICAgaWYgYXJncy5iaWxsX3NpZzoKICAgICAgICBhY3Rpb24gPSAnYmlsbCcKCiAgICByZXR1cm4gX2Rpc3BhdGNoX2NvbW1hbmQoYWN0aW9uLCBhcmdzKQo8fGZpbV9zdWZmaXh8PgogICAgJ2FkZF9wdXJjaGFzZSc6IGxhbWJkYSBhcmdzOiBhcGkuYWRkX3B1cmNoYXNlKGFyZ3Muc2VuZGVyLCBhcmdzLnBhcmFtcyksCiAgICAncHJpY2VsaXN0JzogbGFtYmRhIGFyZ3M6IGFwaS5nZXRfcHJpY2VfbGlzdCgpLAogICAgJ3N0YXRzJzogbGFtYmRhIGFyZ3M6IGFwaS5nZXRfb3duX3N0YXRzKHNlbmRlcj1hcmdzLnNlbmRlciksCjx8ZmltX2VuZHw+"]
["cd3fc26a9983c883448088644e098cba1ee1193c-4","cd3fc26a9983c883448088644e098cba1ee1193c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAppbXBvcnQgc3lzCmZyb20gZGV2YXBwcy5hcHAgaW1wb3J0IGFwcCwgcm9vdApmcm9tIGRldmFwcHMgaW1wb3J0IGNvbW1vbgoKaWYgY29tbW9uLlBZMjoKICAgIGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCmVsc2U6CiAgICBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwoKCmRlZiByZXN0b3JlX2FyZ3Yob2F2KToKICAgIHdoaWxlIHN5cy5hcmd2OgogICAgICAgIHN5cy5hcmd2LnBvcCgpCiAgICBzeXMuYXJndi5leHRlbmQob2F2KQoKCmRlZiB0ZXN0X2RlY29fbm9fYXJncyhjYXBzeXMpOgogICAgY2xhc3MgQ2FsYzoKICAgICAgICBkZWYgZG9fcnVuKGNhbGMsIGEsIGIpOgogICAgICAgICAgICByZXR1cm4gYSwgYgoKICAgICAgICBkZWYgZG9fbGlzdChjYWxjLCBhLCAqYik6CiAgICAgICAgICAgIHJldHVybiBhLCBiCgogICAgICAgIGNsYXNzIGlubmVyOgogICAgICAgICAgICBkZWYgZG9faW5uZXIoaW5uZXIsIGEsIGIpOgogICAgICAgICAgICAgICAgcmV0dXJuIHJvb3QoaW5uZXIpLmRvX3J1bihhLCBiKQoKPHxmaW1faG9sZXw+CiAgICBzeXMuc3Rkb3V0ID0gb3V0ID0gU3RyaW5nSU8oKQogICAgdHJ5OgogICAgICAgIGFwcDEgPSBhcHAoQ2FsYykgICMgcnVucyBhbHJlYWR5IHRoZSBhcHAgYnV0IHdlIGNhbid0IGdldCByZXN1bHQKICAgICAgICBhc3NlcnQgb3V0LmdldHZhbHVlKCkuc3RyaXAoKSA9PSAiKCcxJywgJzInKSIKICAgIGZpbmFsbHk6CiAgICAgICAgcmVzdG9yZV9hcmd2KG9hdikKICAgICAgICBzeXMuc3Rkb3V0ID0gb2xkX3N0ZG91dAogICAgICAgICMgd2UgcG9wdWxhdGVkIHRoZSBsb2dnZXIsIGkuZS4gY2hhbmdlZCBnbG9iYWwgc3RhdGU6CiAgICAgICAgIyB3aGljaCBvdGhlciB0ZXN0cyBhc3N1bWUgdG8gYmUgY2xlYW46CiAgICAgICAgY29tbW9uLkNGRyA9IGNmZwo8fGZpbV9zdWZmaXh8PgogICAgY2ZnID0gZGljdChjb21tb24uQ0ZHKQogICAgb2F2ID0gbGlzdChzeXMuYXJndikKICAgIHN5cy5hcmd2ID0gWydfJywgJzEnLCAnMiddCiAgICBvbGRfc3Rkb3V0ID0gc3lzLnN0ZG91dAo8fGZpbV9lbmR8Pg=="]
["7b36269cd5ddf32ef1afa3e98e1ce6115b4d759a-5","7b36269cd5ddf32ef1afa3e98e1ce6115b4d759a","PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YQpmcm9tIGRqYW5nby5jb250cmliLnBvc3RncmVzLmFnZ3JlZ2F0ZXMuZ2VuZXJhbCBpbXBvcnQgQXJyYXlBZ2cKZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBDb3VudCwgUHJlZmV0Y2gsIEYKZnJvbSBuZXR3b3JrLm1vZGVscyBpbXBvcnQgTGlrZSwgTGlrZVBvc3QsIFBvc3QsIFVzZXIKZnJvbSBkamFuZ28udXRpbHMudGltZXpvbmUgaW1wb3J0IG5vdyBhcyB0el9ub3cKCgpkZWYgbGlrZWhpc3RvcnlfY3R4KHJlcXVlc3QpOgogICAgbGFzdF9saWtlc19oaXN0b3J5ID0ge30KICAgIHRyeToKICAgICAgICBsYXN0X2xpa2VzX3Bvc3RzID0gTGlrZVBvc3Qub2JqZWN0cy5hbGwoKVs6NV0KICAgICAgICBsYXN0X2xpa2VzX2hpc3RvcnkgPSBQb3N0Lm9iamVjdHMuZmlsdGVyKAogICAgICAgICAgICBpc19hY3RpdmU9VHJ1ZSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBsaWtlcG9zdF9fcGtfX2luPVtwLmdldCgiaWQiKSBmb3IgcCBpbiBsYXN0X2xpa2VzX3Bvc3RzLnZhbHVlcygpXSwKPHxmaW1fZW5kfD4="]
["a0ca0c42687a7e78abaf9e6ad793d54c7d705ba2-3","a0ca0c42687a7e78abaf9e6ad793d54c7d705ba2",{"$cut":{"chars":100372,"head":"PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIyBjb2Rpbmc9dXRmLTgKCmltcG9ydCBjb2xsZWN0aW9ucwoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQgbWF0cGxvdGxpYgojbWF0cGxvdGxpYi51c2UoJ0FnZycpCmltcG9ydCBuZXRDREY0CmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBzY2lweS5pbnRlcnBvbGF0ZQppbXBvcnQgc2NpcHkubmRpbWFnZQpmcm9tIHNjaXB5Lm9wdGltaXplIGltcG9ydCBjdXJ2ZV9maXQKCgojZnJvbSBudW1iYSBpbXBvcnQgaml0CmZyb20gLiBpbXBvcnQgaGVscGVycyBhcyBoCmZyb20gLiBpbXBvcnQgcmVjUGVha0ZpbmRlcgpmcm9tIC4gaW1wb3J0IHZpcwpmcm9tIC4gaW1wb3J0IGFkdmVjdGlvbgpmcm9tIC4gaW1wb3J0IGF0dGVudWF0aW9uCmZyb20gLiBpbXBvcnQgd3JpdGVyCiNpbXBvcnQgdmlyaWRpcyAgIyBmYW5jeSBuZXcgY29sb3JtYXAKI2ltcG9ydCBWSVNfQ29sb3JtYXBzICAjIHZlcnRpY2FsIHZlbG9jaXR5IGNvbG9yIG1hcAoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCmxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQpzdHJlYW1faGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCnN0cmVhbV9oYW5kbGVyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzJykKc3RyZWFtX2hhbmRsZXIuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKZmlsZV9oYW5kbGVyID0gbG9nZ2luZy5GaWxlSGFuZGxlcihmaWxlbmFtZT0nLi4vdGVzdC5sb2cnLCBtb2RlPSd3JykKZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyUoYXNjdGltZSlzLSUobmFtZSlzLSUobGV2ZWxuYW1lKXMtJShtZXNzYWdlKXMnLCBkYXRlZm10PSclSDolTTolUycpCmZpbGVfaGFuZGxlci5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQpmaWxlX2hhbmRsZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKbG9nZ2VyLmFkZEhhbmRsZXIoZmlsZV9oYW5kbGVyKQpsb2dnZXIuYWRkSGFuZGxlcihzdHJlYW1faGFuZGxlcikKCgptb20yc3RyID0gbGFtYmRhIGw6ICcgJy5qb2luKFsnWjp7MDouMmZ9IHY6ezE6LjJmfSB3OnsyOi4yZn0gc25yOns1Oi4yZn0gfCAnLmZvcm1hdCgqbW9tKSBmb3IgbW9tIGluIGxdKQoKZmxhdHRlbiA9IGxhbWJkYSBsOiBzdW0obWFwKGZsYXR0ZW4sIGwpLCBbXSkgaWYgaXNpbnN0YW5jZShsLGxpc3QpIGVsc2UgW2xdCnBlYWtzMnZlbCA9IGxhbWJkYSB2ZWwsIHBlYWtzOiBbKHZlbFtwZWFrWzBdXSwgdmVsW3BlYWtbMV1dKSBmb3IgcGVhayBpbiBwZWFrc10KdmVsMnN0ciA9IGxhbWJkYSB2ZWw6IFsnKHs6NC4yZn0gezo0LjJmfSknLmZvcm1hdCgqcGFpcikgZm9yIHBhaXIgaW4gdmVsXQoKCmRlZiBwZWFrczJzbnIobm9pc2UsIHosIHBlYWtzKToKICAgICIiImNhbGN1bGF0ZSB0aGUgc25yIGZvciBlYWNoIHBlYWsKICAgIAogICAgQXJnczoKICAgICAgICBub2lzZSAoZmxvYXQpOiBub2lzZSBsZXZlbAogICAgICAgIHogKDFkLWFycmF5KTogc3BlY3RyYWwgcmVmbGVjdGl2aXR5CiAgICAgICAgcGVha3MgKHR1cGVsIG9yIGxpc3Qgb2YgdHVwZWxzKTogYm91bmRhcmllcyBvZiB0aGUgcGVha3MKCiAgICBSZXR1cm5zOgogICAgICAgIFNOUiB2YWx1ZSBvZiB0aGUgcGVha3MgKG9yIGxpc3Qgb2YgdmFsdWVzKQogICAgIiIiCiAgICBpZiBub3QgcGVha3M6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignZW1wdHkgcGVhayBsaXN0JykKICAgIGVsaWYgdHlwZShwZWFrcykgaXMgdHVwbGU6CiAgICAgICAgcmV0dXJuIGgubGluMnoobnAuc3VtKHpbcGVha3NbMF06cGVha3NbMV0gKyAxXS9ub2lzZSkpCiAgICBlbHNlOgogICAgICAgIHJldHVybiBbaC5saW4yeihucC5zdW0oeltwZWFrWzBdOnBlYWtbMV0gKyAxXS9ub2lzZSkpIGZvciBwZWFrIGluIHBlYWtzXQoKZGVmIGdhdXNzX2Z1bmMoeCwgbSwgc2QpOgogICAgIiIiY2FsY3VsYXRlIHRoZSBnYXVzc2lhbiBmdW5jdGlvbiBvbiBhIGdpdmVuIGdyaWQKCiAgICBBcmdzOgogICAgICAgIHggKGFycmF5KTogZ3JpZAogICAgICAgIG0gKGZsb2F0KTogbWVhbgogICAgICAgIHNkIChmbG9hdCk6IHN0YW5kYXJkIGRldmlhdGlvbgoKICAgIFJldHVybnM6CiAgICAgICAgYXJyYXkKICAgICIiIgogICAgYSA9IDEuIC8gKHNkICogbnAuc3FydCgyLiAqIG5wLnBpKSkKICAgIHJldHVybiBhICogbnAuZXhwKC0oeCAtIG0pICoqIDIgLyAoMi4gKiBzZCAqKiAyKSkKCmRlZiBjaGVja19jb25zaXN0ZW5jeShsc3QpOgogICAgIiIiCiAgICBBcmdzOgogICAgICAgIGxzdDogbGlzdCBvZiBzcGVjdHJhIGRpY3Rpb25hcmllcwogICAgICAgICAgICAoaGFzIHRvIGNvbnRhaW4gYGBzeXN0ZW1gYCwgYGB0c2BgLCBgYHJhbmdlYGApCiAgICAiIiIgCiAgICAjdGltZXN0YW1wcyA9IFsne30gezouMWZ9Jy5mb3JtYXQoZWxlbVsnc3lzdGVtJ10sIGVsZW1bJ3RzJ10pIGZvciBlbGVtIGluIGxzdF0KICAgIHRpbWVzdGFtcHMgPSBbJ3t9IHt9Jy5mb3JtYXQoZWxlbVsnc3lzdGVtJ10sIGgudHNfdG9fZHQoZWxlbVsndHMnXSkuc3RyZnRpbWUoJyVtLSVkICVIOiVNOiVTJykpIGZvciBlbGVtIGluIGxzdF0KICAgIGhlaWdodHMgPSBbJ3t9IHs6LjFmfScuZm9ybWF0KGVsZW1bJ3N5c3RlbSddLCBlbGVtWydyYW5nZSddKSBmb3IgZWxlbSBpbiBsc3RdCiAgICBsb2dnZXIuaW5mbygnLS0tLSBjb25zaXN0ZW5jeSBjaGVjayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nKQogICAgbG9nZ2VyLmluZm8oJ3RpbWVzdGFtcHMgJXMnLCB0aW1lc3RhbXBzKQogICAgbG9nZ2VyLmluZm8oJ2hlaWdodHMgICAgJXMnLCBoZWlnaHRzKQogICAgZm9yIHBhaXIgaW4gaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyhsc3QsIDIpOgogICAgICAgIHRpbWVkaWZmID0gcGFpclswXVsndHMnXSAtIHBhaXJbMV1bJ3RzJ10KICAgICAgICBoZWlnaHRkaWZmID0gcGFpclswXVsncmFuZ2UnXSAtIHBh"}}]
["a0a5bb0f8a7cb3f2167cd5f0218b6237c0f15b39-1","a0a5bb0f8a7cb3f2167cd5f0218b6237c0f15b39","PHxmaW1fcHJlZml4fD4KIiIiVGhpcyBmaWxlIGlzIHVzZWQgdG8gc3RvcmUgYWxsIHVzZXIgZmFjaW5nIHRleHQsCndoZXJlIFN0YXJ3b3J0IHRoZW4gdHJhbnNjcmliZXMgaXQgaW50byBrYXRha2FuYS4iIiIKCgpjbGFzcyBrYXRhOgogICAgY2xhc3MgbWVudToKICAgICAgICBjbGFzcyB1bmhlbHBmdWw6CiAgICAgICAgICAgIG5hbWUgPSAi44Km44Oz44OY44Or44OX44OV44OrIOODoeODi+ODpeODvCIKICAgICAgICAgICAgIyB1IG4gaGUgcnUgcHUgZnUgcnUgICBtZSBueXUtIHwgVW5oZWxwZnVsIE1lbnUKICAgICAgICAgICAgbm90aGluZyA9ICLjg4Xjg7wg44OO44K344Oz44KwIiAgIyBkby0gICBubyBzaGkgbiBndSB8IERvIG5vdGhpbmcKICAgICAgICAgICAgc2F2ZSA9ICLjgrvjgqTjg7Qg44OX44Ot44K744K944OrIOOCv+OCpOODoCIKICAgICAgICAgICAgIyBzZSBpIHZ1ICAgcHUgcm8gc2Ugc28gcnUgICB0YSBpIG11IHwgU2F2ZSBQcm9jZXNzb3IgVGltZQogICAgICAgICAgICBjbG9zZSA9ICLjgq/jg63jgrkiICAjIGt1IHJvIHN1IHwgQ2xvc2UKCiAgICAgICAgY2xhc3MgbmV3OgogICAgICAgICAgICBuYW1lID0gIuODi+ODpeODvCDjg5XjgqHjgqTjg6siICAjIG55dS0gICBmYSBpIHJ1IHwgTmV3IEZpbGUKICAgICAgICAgICAgaGVpZ2h0ID0gIuODj+OCpOODiCIgICMgaGEgaSB0byB8IEhlaWdodAogICAgICAgICAgICB3aWR0aCA9ICLjgqbjgqTjg4UiICAjIHUgaSBkenUgfCBXaWR0aAogICAgICAgICAgICBjcmVhdGUgPSAi44Kv44Oq44O844Ko44Kk44OIIOOCq+ODs+ODtOOCoeOCuSIKICAgICAgICAgICAgIyBrdSByaS0gZSBpIHRvICAga2EgbiB2YSBzdSB8IENyZWF0ZSBDYW52YXMKCiAgICAgICAgY2xhc3MgZWRpdDoKICAgICAgICAgICAgbmFtZSA9ICLjgqjjg4Pjg4fjg4giICAjIGUgZGRlIHRvIHwgRWRpdAogICAgICAgICAgICB1bmRvID0gIuOCpuODs+ODieOCpuODvCIgICMgdSBuIGRvIHUtIHwgVW5kbwogICAgICAgICAgICByZWRvID0gIuODquODvOODieODluODvCIgICMgcmktIGRvIHUtIHwgUmVkbwoKICAgICAgICBjbGFzcyBmaWxlc2VsZWN0OgogICAgICAgICAgICBmaWxlID0gIiDjgJDjg5XjgqHjgqTjg6vjgJEiICAjIFtmYSBpIHJ1XSB8IFtGSUxFXQogICAgICAgICAgICBmb2xkZXIgPSAiIOOAkOODleOCqeODq+ODgOODvOOAkSIgICMgW2ZvIHJ1IGRhLV0gfCBbRk9MREVSXQogICAgICAgICAgICBuZXcgPSAi44OL44Ol44O8IOODleOCoeOCpOODqyIgICMgbnl1LSAgIGZhIGkgcnUgfCBOZXcgRmlsZQogICAgICAgICAgICBzYXZlYXMgPSAi44K744Kk44O0IOOCouOCuuKApiIgICMgc2UgaSB2dSAgIGEgenUg4oCmIHwgU2F2ZSBBcy4uLgogICAgICAgICAgICBvcGVuID0gIuOCquODvOODmuODjCDjg5XjgqHjgqTjg6siICAjIG8tIHBlIG51ICAgZmEgaSBydSB8IE9wZW4gRmlsZQogICAgICAgICAgICB3cml0ZSA9ICLjg6njgqTjg4gg44OQ44Kk44OIIiAgIyByYSBpIHRvICAgYmEgaSB0byB8IFdyaXRlIEJ5dGUKCiAgICAgICAgICAgIGNsYXNzIGJ1dHRvbjoKICAgICAgICAgICAgICAgIGRlZmF1bHQgPSAi44K744Kk44O0IOODkuODvOODqyIgICMgc2UgaSB2dSAgIGhpLSBydSB8IFNhdmUgSGVyZQogICAgICAgICAgICAgICAgc3BlY2lhbCA9ICLjgrvjgqTjg7Qg44OS44O844OrXG5cCiAgICDjgJDjg5XjgqHjgqTjg6vjg4rjg6Ag44Kr44OD44OO44OIIOODk+ODvCDjgqjjg6Djg5fjg4bjgqTjg7wg44Kq44OrIOOCoiDjgrnjg5rjgrfjgqLjg6sg44OR44K544CRIgogICAgICAgICAgICAgICAgIyBzZSBpIHZ1ICAgaGktIHJ1IFxuIFtmYSBpIHJ1IG5hIG11ICAga2Egbm5vIHRvICAgYmktCiAgICAgICAgICAgICAgICAjIGUgbXUgcHUgdGUgaS0gICBvIHJ1ICAgYSAgIHN1IHBlIHNoaSBhIHJ1ICAgcGEgc3VdCiAgICAgICAgICAgICAgICAjIFNhdmUgSGVyZVxuW0ZpbGVuYW1lIGNhbm5vdCBiZSBlbXB0eSBvciBhIHNwZWNpYWwgcGF0aF0KICAgICAgICAgICAgICAgIGludmFsaWQgPSAn44K744Kk44O0IOODkuODvOODq1xuXAogICAg44CQ44OV44Kh44Kk44Or44OK44OgIOOCq+ODg+ODjuODiCDjgrPjg7Pjg4bjgqTjg4wg44Ko44OL44O8IOOCquODtDogXFwvOio/Ijw+fOOAkScKICAgICAgICAgICAgICAgICMgc2UgaSB2dSAgIGhpLSBydSBcbiBbZmEgaSBydSBuYSBtdSAgIGthIG5ubyB0bwogICAgICAgICAgICAgICAgIyBrbyBuIHRlIGkgbnUgICBlIG5pLSAgIG8gdnU6IFwvOio/Ijw+fF0KICAgICAgICAgICAgICAgICMgU2F2ZSBIZXJlXG5bRmlsZW5hbWUgY2Fubm90IGNvbnRhaW4gYW55IG9mOiBcLzoqPyI8PnxdCiAgICAgICAgICAgICAgICBjYW5jZWwgPSAi44Kr44Oz44K744OrIiAgIyBrYSBuIHNlIHJ1IHwgQ2FuY2VsCgogICAgICAgIGNsYXNzIGVudHJ5OgogICAgICAgICAgICB4ID0gIuOCqOOCr+OCuiIgICMgZSBrdSB6dSB8IFgKICAgICAgICAgICAgeSA9ICLjg6/jgqQiICAjIHdhIGkgfCBZCiAgICAgICAgICAgIGNvbG91ciA9ICLjgrPjg6njg7wiICAjIGtvIHJhLSB8IENvbG91cgogICAgICAgICAgICBjb25maXJtID0gIuOCs+ODs+ODleOCoeODvOODoCIgICMga28gbiBmYS0gbXUgfCBDb25maXJtCiAgICAgICAgICAgIGNvbG91cl9lcnJvciA9ICLjgrPjg6njg7wg44Og44K544OIIOODk+ODvCDjg5njg4jjgqTjg7zjg7MgMCDjgqLjg7Pjg4kgMTY3NzcyMTUiCiAgICAgICAgICAgICMga28gcmEtICAgbXUgc3UgdG8gICBiaS0gICBiZSB0byBpLSBuICAgMCAgIGEgbiBkbyAgIDE2Nzc3MjE1CiAgICAgICAgICAgICMgQ29sb3VyIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxNjc3NzIxNQogICAgICAgICAgICB4X2Vycm9yID0gIuOCqOOCr+OCuiDjg6Djgrnjg4gg44OT44O8IOODmeODiOOCpOODvOODsyAxIOOCouODs+ODiSB7fSIKICAgICAgICAgICAgIyBlIGt1IHp1ICAgbXUgc3UgdG8gICBiaS0gICBiZSB0byBpLSBuICAgMSAgIGEgbiBkbyAgIHt9CiAgICAgICAgICAgICMgWCBtdXN0IGJlIGJldHdlZW4gMSBhbmQge30KICAgICAgICAgICAgeV9lcnJvciA9ICLjg6/jgqQg44Og44K544OIIOODk+ODvCDjg5njg4jjgqTjg7zjg7MgMSDjgqLjg7Pjg4kge30iCiAgICAgICAgICAgICMgd2EgaSAgIG11IHN1IHRvICAgYmktICAgYmUgdG8gaS0gbiAgIDEgICBhIG4gZG8gICB7fQogICAgICAgICAgICAjIFkgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIHt9CgogICAgY2xhc3MgZ2VuZXJhbDoKICAgICAgICB0aXRsZSA9ICLjg5Xjg6zjgqTjg6Djg4kiICAjIGZ1IHJlIGkgbXUgZG8gfCBGcmFtZWQKCiAgICAgICAgY2xhc3MgY29ycnVwdGlvbnM6CiAgICAgICAgICAgIGFsdGVyY29sb3VyID0gIuOCt+ODpeODg+ODleODquODs+OCsCDjgrPjg6njg7zjgrnigKYiICAjIHNodSBmZnUgcmkgbiBndSAgIGtvIHJhLSBzdSDigKYKICAgICAgICAgICAgIyBTaHVmZmxpbmcgQ29sb3Vycy4uLgogICAgICAgICAgICBwaXhlbGF0ZSA9ICLjg5Tjgq/jgrzjg6zjgqTjg4Hjg7PjgrAg44Kk44Oe44K444Ol4oCmIiAgIyBwaSBrdSB6ZSByZSBpIGNoaSBuIGd1ICAgaSBtYSBqdSDigKYKICAgICAgICAgICAgIyBQaXhlbGF0aW5nIEltYWdlLi4uCiAgICAgICAgICAgIGFsdGVycGl4ZWwgPSAi44K344Ol44OD44OV44Oq44Oz44KwIOODlOOCr+OCuuODq+OCueKApiIgICMgc2h1IGZmdSByaSBuIGd1ICAgcGkga3UgenUgcnUgc3XigKYKICAgICAgICAgICAgIyBTaHVmZmxpbmcgUGl4ZWxzLi4uCgoKY2xhc3MgZW5nOgogICAgY2xhc3MgbWVudToKICAgICAgICBjbGFzcyB1bmhlbHBmdWw6CiAgICAgICAgICAgIG5hbWUgPSAiVW5oZWxwZnVsIE1lbnUiCiAgICAgICAgICAgIG5vdGhpbmcgPSAiRG8gTm90aGluZyIKICAgICAgICAgICAgc2F2ZSA9ICJTYXZlIFByb2Nlc3NvciBUaW1lIgogICAgICAgICAgICBjbG9zZSA9ICJDbG9zZSIKCiAgICAgICAgY2xhc3MgbmV3OgogICAgICAgICAgICBuYW1lID0gIk5ldyBGaWxlIgogICAgICAgICAgICBoZWlnaHQgPSAiSGVpZ2h0IgogICAgICAgICAgICB3aWR0aCA9ICJXaWR0aCIKICAgICAgICAgICAgY3JlYXRlID0gIkNyZWF0ZSBDYW52YXMiCgogICAgICAgIGNsYXNzIGVkaXQ6CiAgICAgICAgICAgIG5hbWUgPSAiRWRpdCIKICAgICAgICAgICAgdW5kbyA9ICJVbmRvIgogICAgICAgICAgICByZWRvID0gIlJlZG8iCjx8ZmltX2hvbGV8PgogICAgICAgICAgICBuZXcgPSAiTmV3IEZpbGUiCiAgICAgICAgICAgIHNhdmVhcyA9ICJTYXZlIEFzLi4uIgogICAgICAgICAgICBvcGVuID0gIk9wZW4gRmlsZSIKICAgICAgICAgICAgd3JpdGUgPSAiV3JpdGUgQnl0ZSIKCiAgICAgICAgICAgIGNsYXNzIGJ1dHRvbjoKICAgICAgICAgICAgICAgIGRlZmF1bHQgPSAiU2F2ZSBIZXJlIgogICAgICAgICAgICAgICAgc3BlY2lhbCA9ICJTYXZlIEhlcmVcblwKW0ZpbGVuYW1lIGNhbm5vdCBiZSBhIGVtcHR5IG9yIGEgc3BlY2lhbCBwYXRoXSIKICAgICAgICAgICAgICAgIGludmFsaWQgPSAnU2F2ZSBIZXJlXG5cCltGaWxlbmFtZSBjYW5ub3QgY29udGFpbiBhbnkgb2Y6IFxcLzoqPyI8PnxdJwogICAgICAgICAgICAgICAgY2FuY2VsID0gIkNhbmNlbCIKCiAgICAgICAgY2xhc3MgZW50cnk6CiAgICAgICAgICAgIHggPSAiWCIKICAgICAgICAgICAgeSA9ICJZIgogICAgICAgICAgICBjb2xvdXIgPSAiQ29sb3VyIgogICAgICAgICAgICBjb25maXJtID0gIkNvbmZpcm0iCiAgICAgICAgICAgIGNvbG91cl9lcnJvciA9ICJDb2xvdXIgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDE2Nzc3MjE1IgogICAgICAgICAgICB4X2Vycm9yID0gIlggbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIHt9IgogICAgICAgICAgICB5X2Vycm9yID0gIlkgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIHt9IgoKICAgIGNsYXNzIGdlbmVyYWw6CiAgICAgICAgdGl0bGUgPSAiRnJhbWVkIgoKICAgICAgICBjbGFzcyBjb3JydXB0aW9uczoKICAgICAgICAgICAgYWx0ZXJjb2xvdXIgPSAiU2h1ZmZsaW5nIENvbG91cnMuLi4iCiAgICAgICAgICAgIHBpeGVsYXRlID0gIlBpeGVsYXRpbmcgSW1hZ2UuLi4iCiAgICAgICAgICAgIGFsdGVycGl4ZWwgPSAiU2h1ZmZsaW5nIFBpeGVscy4uLiIKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgY2xhc3MgZmlsZXNlbGVjdDoKICAgICAgICAgICAgZmlsZSA9ICIgW0ZJTEVdIgogICAgICAgICAgICBmb2xkZXIgPSAiIFtGT0xERVJdIgo8fGZpbV9lbmR8Pg=="]
["cd51619da603897da62c292ab4d32df6bc36412f-1","cd51619da603897da62c292ab4d32df6bc36412f","PHxmaW1fcHJlZml4fD4KIyBQcmVkaWN0IEludGVybmF0aW9uYWwgQWlybGluZSBQYXNzZW5nZXJzICh0K3doYXRldmVyLCBnaXZlbiB0KQppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcwpmcm9tIGF1dG9scm4ucmVncmVzc2lvbi50aW1lc2VyaWVzIGltcG9ydCB0c191dGlscyBhcyB0dQpmcm9tIHNrbGVhcm4ubWV0cmljcyBpbXBvcnQgbWVhbl9zcXVhcmVkX2Vycm9yCgojIC4uLgoKIyBmaXggcmFuZG9tIHNlZWQgZm9yIHJlcHJvZHVjaWJpbGl0eSAgIApucC5yYW5kb20uc2VlZCg3KQoKIyBsb2FkIHRoZSBkYXRhc2V0CiMgbmFtZXM9WyJNb250aCIsICJQYXNzZW5nZXJzIl0KCmRhdGFmcmFtZSA9IHBhbmRhcy5yZWFkX2NzdigKICAgICdhdXRvbHJuL2RhdGFzZXRzL2FpcmxpbmUtcGFzc2VuZ2Vycy5jc3YnLCAKICAgIHVzZWNvbHM9WzFdLCAgCiAgICAjIG5hbWVzPW5hbWVzCiAgICApCmRhdGFzZXQgPSBkYXRhZnJhbWUudmFsdWVzCmRhdGFzZXQgPSBkYXRhc2V0LmFzdHlwZSgnZmxvYXQzMicpCgojIGRhdGFzZXQgPSBkYXRhZnJhbWVbIlBhc3NlbmdlcnMiXS5hc3R5cGUoImZsb2F0MzIiKQoKdHJhaW4sIHZhbCwgdGVzdCA9IHR1LnRyYWluX3ZhbF90ZXN0X3NwbGl0KGRhdGFzZXQpCgp0cmFpblByZWRpY3QsIHZhbFByZWRpY3QgPSBucC5lbXB0eV9saWtlKHRyYWluKSwgbnAuZW1wdHlfbGlrZSh2YWwpCnRlc3RQcmVkaWN0ID0gbnAuZW1wdHlfbGlrZSh0ZXN0KQoKZXBvY2hzID0gMjAwCnRpbWVzdGVwcyA9IDMKc2NvcmluZyA9ICJtc2UiCmJlc3RfbW9kZWxfbmFtZSA9ICdXb3JzdCcKYmVzdF9tb2RlbCA9IE5vbmUKYmVzdF92YWxfc2NvcmUgPSBucC5pbmYKYmVzdF90cmFpbl9zY29yZSA9IG5wLmluZgojIGJlc3RfcmVnX3N0ZCA9IG5wLmluZgoKcHJpbnQoKQpwcmludCgpCnByaW50KCIqKiogQmVzdCBtb2RlbCAlcyBoYXMgdHJhaW4gc2NvcmUgJS4zZiwgdmFsIHNjb3JlICUuM2YgWyVzXSIgJSAoCiAgICBiZXN0X21vZGVsX25hbWUsIGJlc3RfdHJhaW5fc2NvcmUsIGJlc3RfdmFsX3Njb3JlLCBzY29yaW5nKSkKCiMgYmVzdF9hdHRyID0gYmVzdF9yZWdfc2NvcmUsIGJlc3RfcmVnX3N0ZCwgYmVzdF9tb2RlbCwgYmVzdF9tb2RlbF9uYW1lCmJlc3RfYXR0ciA9IGJlc3RfdHJhaW5fc2NvcmUsIGJlc3RfdmFsX3Njb3JlLCBiZXN0X21vZGVsLCBiZXN0X21vZGVsX25hbWUKCm5fdW5pdHMgPSA0CgpuYW1lc19hbmRfbW9kZWxzID0gdHUuY3JlYXRlX3RzX2tlcmFzX21vZGVscygKICAgIG5fdW5pdHM9bl91bml0cywgbGFnPXRpbWVzdGVwcywgbmJfZXBvY2g9ZXBvY2hzKQoKIyAuLi4gcmV0dXJuIGJlc3Qgc3R1ZmYKYmVzdF9hdHRyID0gdHUuZXZhbHVhdGVfdHNfa2VyYXNfbW9kZWxzKAogICAgbmFtZXNfYW5kX21vZGVscywgZGF0YXNldCwgZXBvY2hzLCBiZXN0X2F0dHIsIHRpbWVzdGVwcywgc2NvcmluZykKYmVzdF90cmFpbl9zY29yZSwgYmVzdF92YWxfc2NvcmUsIGJlc3RfbW9kZWwsIGJlc3RfbW9kZWxfbmFtZSA9IGJlc3RfYXR0cgoKIyBjb21wYXJlIHRvIG5haXZlIHNvbHV0aW9uIHkodCkgPSB5KHQrbGFnKSAKCmlmIGJlc3RfbW9kZWxfbmFtZSBub3QgaW4gKCdXb3JzdCcsICduYWl2ZV9wcicpOgoKICAgIHByaW50KCkKICAgIHByaW50KCIqKiogVHJhaW4gYmVzdCBtb2RlbCAnJXMnIiAlIGJlc3RfbW9kZWxfbmFtZSkKICAgIHByaW50KCkKCiAgICAjIHlvdSBtYXkgaGF2ZSB0byByZXNoYXBlIGRhdGEgb25jZSBhZ2FpbiBoZXJlCgogICAgIyAjIHNwbGl0IGludG8gdHJhaW4gYW5kIHRlc3Qgc2V0cwogICAgIyB0cmFpbl9sZW5ndGggPSBpbnQobGVuKGRhdGFzZXQpKjAuNzUpCiAgICAjIHRlc3RfbGVuZ3RoID0gbGVuKGRhdGFzZXQpIC0gdHJhaW5fbGVuZ3RoCiAgICAjICMgdHJhaW4sIHRlc3QgPSBkYXRhc2V0WzA6dHJhaW5fbGVuZ3RoLDpdLCBkYXRhc2V0W3RyYWluX2xlbmd0aDpsZW4oZGF0YXNldCksOl0KICAgICMgdHJhaW4gPSBkYXRhc2V0WzA6dHJhaW5fbGVuZ3RoXQogICAgdHJhaW4gPSBucC5jb25jYXRlbmF0ZSgodHJhaW4sIHZhbCksIGF4aXM9MCkKCiAgICAjIHRlc3QgYmVzdCBtb2RlbAogICAgaWYgYmVzdF9tb2RlbF9uYW1lID09ICJsc3RtX3RzdGVwIjoKICAgICAgICBiZXN0X21vZGVsID0gdHUubmFtZXNfYW5kX2ZjdHNbYmVzdF9tb2RlbF9uYW1lXVswXShuX3VuaXRzKQogICAgZWxzZToKICAgICAgICBiZXN0X21vZGVsID0gdHUubmFtZXNfYW5kX2ZjdHNbYmVzdF9tb2RlbF9uYW1lXVswXSgKICAgICAgICAgICAgbl91bml0cywgdHUubmFtZXNfYW5kX2ZjdHNbYmVzdF9tb2RlbF9uYW1lXVsxXSkKCiAgICB0cmFpblByZWRpY3QsIHRlc3RQcmVkaWN0ID0gdHUudGVzdF9iZXN0X3RzX2tlcmFzX21vZGVsKAogICAgICAgIGJlc3RfbW9kZWxfbmFtZSwgYmVzdF9tb2RlbCwgdHJhaW4sIHRlc3QsIGxhZz10aW1lc3RlcHMsIG5iX2Vwb2NoPWVwb2NocykKCiAgICAjIHBsb3QgdGltZSBzZXJpZXMgZm9yIHRlc3QKCiAgICB0dS5wbG90X3RpbWVfc2VyaWVzX2Zvcl90ZXN0KAogICAgICAgIGJlc3RfbW9kZWxfbmFtZSwgZGF0YXNldCwgdHJhaW5QcmVkaWN0LCB0ZXN0UHJlZGljdCwgbGFnPXRpbWVzdGVwcykKCmVsc2U6CiAgICBwcmludCgiVW5hYmxlIHRvIGZpbmQgYSAnZ29vZC1lbm91Z2gnIHRzIHJlZ3Jlc3Nvci4iKQogICAgcHJpbnQoIkN1cnJlbnQgdGltZS1zZXJpZXMgcmVncmVzc29ycyBzdWNrISIpCgpwcmludCgpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW5wdXQoIj09PSBFbmQgT2YgUHJvZ3JhbSIpCjx8ZmltX2VuZHw+"]
["a0798440c1ccd1b28dbfa2ee09bf8289baa57185-1","a0798440c1ccd1b28dbfa2ee09bf8289baa57185","PHxmaW1fcHJlZml4fD4KZnJvbSB3ZWJzY3JhcHBpbmcud2ViY3Jhd2xlcl9iYXNlIGltcG9ydCBXZWJDcmF3bGVyQmFzZQppbXBvcnQgcmUKaW1wb3J0IG9zCmltcG9ydCByZXF1ZXN0cwppbXBvcnQganNvbgppbXBvcnQgcGlja2xlCmZyb20gd2Vic2NyYXBwaW5nIGltcG9ydCB3ZWJjcmF3bGVyX2xvZ2dlcgpmcm9tIHV0aWxpdGllcyBpbXBvcnQgZXhjZWxfd3JpdGVyCgpjbGFzcyBXZWJDcmF3bGVyVXNhaWQoV2ViQ3Jhd2xlckJhc2UpOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIFdlYkNyYXdsZXJCYXNlLl9faW5pdF9fKHNlbGYpCiAgICAgICAgc2VsZi5kb21haW5fbmFtZSA9ICJodHRwczovL2RlYy51c2FpZC5nb3YiCgogICAgZGVmIGNyYXdsX3F1ZXJ5KHNlbGYsIHF1ZXJ5LCBmb2xkZXJfdG9fc2F2ZSwgc3RhcnRfcGFnZSA9IE5vbmUsIGxvZ19zdGF0dXNfZmlsZW5hbWUgPSAiIik6CiAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZvbGRlcl90b19zYXZlKToKICAgICAgICAgICAgb3MubWFrZWRpcnMoZm9sZGVyX3RvX3NhdmUpCgogICAgICAgIHNlbGYuX3dlYmNyYXdsZXJfbG9nZ2VyID0gd2ViY3Jhd2xlcl9sb2dnZXIuV2ViY3Jhd2xlckxvZ2dlcihsb2dfc3RhdHVzX2ZpbGVuYW1lKQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGFwaV9xdWVyeSA9ICJodHRwczovL2RlYy51c2FpZC5nb3YvYXBpL3FzZWFyY2guYXNoeD9xPSIrcXVlcnkuc3BsaXQoIj9xPSIpWzFdKyImcnR5cGU9SlNPTiIKICAgICAgICAgICAganNvbl9yZXN1bHQgPSBzZWxmLmZldGNoKGFwaV9xdWVyeSwgcmV0dXJuX2pzb249VHJ1ZSkKICAgICAgICAgICAgdG90YWxfY250ID0gbGVuKGpzb25fcmVzdWx0WyJSZWNvcmRzIl0pCiAgICAgICAgICAgIHBpY2tsZS5kdW1wKGpzb25fcmVzdWx0LCBvcGVuKG9zLnBhdGguam9pbihmb2xkZXJfdG9fc2F2ZSwgInJlc3VsdHMucGlja2xlIiksICJ3YiIpKQogICAgICAgICAgICBzZWxmLl93ZWJjcmF3bGVyX2xvZ2dlci51cGRhdGVfd2Vic2NyYXBwaW5nX3Jlc3VsdHMocXVlcnksIFsxXSp0b3RhbF9jbnQsIHRvdGFsX2NudCkKICAgICAgICAgICAgcHJpbnQoJ0RvbmUhJykKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHNlbGYuX3dlYmNyYXdsZXJfbG9nZ2VyLnVwZGF0ZV9zdGF0dXNfZm9yX3F1ZXJ5KHF1ZXJ5LCAiRmluaXNoZWQgd2l0aCBlcnJvcnMiLCBzZWxmLmNoZWNrX3VybChxdWVyeSkpCgogICAgZGVmIHByZXBhcmVfZGF0YXNldChzZWxmLCBmb2xkZXIsIGZpbGVuYW1lKToKICAgICAgICBkZiA9IHNlbGYucHJlcGFyZV9pbml0aWFsX2RhdGFzZXQoZm9sZGVyKQogICAgICAgIGpzb25fcmVzdWx0cyA9IHBpY2tsZS5sb2FkKG9wZW4ob3MucGF0aC5qb2luKGZvbGRlciwgInJlc3VsdHMucGlja2xlIiksICJyYiIpKQogICAgICAgIGRmID0gZGYucmVpbmRleChkZi5pbmRleC50b2xpc3QoKSArIGxpc3QocmFuZ2UoMSwgbGVuKGpzb25fcmVzdWx0c1siUmVjb3JkcyJdKSkpKQogICAgICAgIGZvciBpLCBhcnRpY2xlX2RvYyBpbiBlbnVtZXJhdGUoanNvbl9yZXN1bHRzWyJSZWNvcmRzIl0pOgogICAgICAgICAgICBkZiA9IHNlbGYuZmlsbF9kZl9maWVsZHMoYXJ0aWNsZV9kb2MsIGRmLCBpKQogICAgICAgICAgICBkZiA9IHNlbGYuZmlsbF95ZWFyX2lmX25vdF9mb3VuZChkZiwgaSkKICAgICAgICBpZiBsZW4oZGYpID4gMDoKICAgICAgICAgICAgZXhjZWxfd3JpdGVyLkV4Y2VsV3JpdGVyKCkuc2F2ZV9kZl9pbl9leGNlbChkZiwgZmlsZW5hbWUpCgogICAgZGVmIGZpbGxfZGZfZmllbGRzKHNlbGYsIG1ldGFfZG9jLCBkZiwgaSk6CiAgICAgICAgZGZbInNvdXJjZV9uYW1lIl0udmFsdWVzW2ldID0gIlVTQUlEIgogICAgICAgIGRmWyJhYnN0cmFjdCJdLnZhbHVlc1tpXSA9ICJcbiIuam9pbihtZXRhX2RvY1siQWJzdHJhY3QiXVsidmFsdWUiXSkKICAgICAgICBkZlsidGl0bGUiXS52YWx1ZXNbaV0gPSAiXG4iLmpvaW4obWV0YV9kb2NbIlRpdGxlIl1bInZhbHVlIl0pCiAgICAgICAgZGZbImtleXdvcmRzIl0udmFsdWVzW2ldID0gIjsiLmpvaW4obWV0YV9kb2NbIkRlc2NyaXB0b3JzX1RvcGljYWwiXVsidmFsdWUiXSttZXRhX2RvY1siRGVzY3JpcHRvcnNfR2VvZ3JhcGhpYyJdWyJ2YWx1ZSJdKQogICAgICAgIGRmWyJhdXRob3JzIl0udmFsdWVzW2ldID0gIjsiLmpvaW4obWV0YV9kb2NbIlBlcnNvbmFsX0F1dGhvciJdWyJ2YWx1ZSJdKQogICAgICAgIGRmWyJ5ZWFyIl0udmFsdWVzW2ldID0gc2VsZi5leHRyYWN0X3llYXIoIiAiLmpvaW4obWV0YV9kb2NbIkRhdGVfUmVzb3VyY2VfQ3JlYXRlZCJdWyJ2YWx1ZSJdKSwgZGZbInllYXIiXS52YWx1ZXNbaV0pCiAgICAgICAgZGZbInVybCJdLnZhbHVlc1tpXSA9ICIgIi5qb2luKG1ldGFfZG9jWyJVUkkiXVsidmFsdWUiXSkKICAgICAgICBkZlsiYWZmaWxpYXRpb24iXS52YWx1ZXNbaV0gPSAiOyIuam9pbihtZXRhX2RvY1siSW5zdF9BdXRob3IiXVsidmFsdWUiXSkKICAgICAgICBkZlsiam91cm5hbF9uYW1lIl0udmFsdWVzW2ldID0gIjsiLmpvaW4obWV0YV9kb2NbIlNlcmllc19UaXRsZSJdWyJ2YWx1ZSJdKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZGZbInB1Ymxpc2hlciJdLnZhbHVlc1tpXSA9ICI7Ii5qb2luKG1ldGFfZG9jWyJJbnN0X1B1Ymxpc2hlciJdWyJ2YWx1ZSJdKQogICAgICAgIHJldHVybiBkZgogICAgICAgIAo8fGZpbV9lbmR8Pg=="]
["722330c671ce42cf982e221334b8aa97c23c11d7-1","722330c671ce42cf982e221334b8aa97c23c11d7","PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojICAgICAgICAgICAgICBFWEVSQ0lDSU8gMDkyICAgICAgICAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKJycnIENyaWUgdW0gcHJvZ3JhbWEgcXVlIGxlaWEgbm9tZSwgYW5vIGRlCm5hc2NpbWVudG8gZSBjYXJ0ZWlyYSBkZSB0cmFiYWxobyBlIGNhZGFzdHJlLW8KKGNvbSBpZGFkZSkgZW0gdW0gZGljaW9uw6FyaW8uIFNlIHBvciBhY2FzbyBhCkNUUFMgZm9yIGRpZmVyZW50ZSBkZSBaRVJPLCBvIGRpY2lvbsOhcmlvCnJlY2ViZXLDoSB0YW1iw6ltIG8gYW5vIGRlIGNvbnRyYXRhw6fDo28gZSBvIHNhbMOhcmlvLgpDYWxjdWxlIGUgYWNyZXNjZW50ZSwgYWzDqW0gZGEgaWRhZGUsIGNvbSBxdWFudG9zCmFub3MgYSBwZXNzb2EgdmFpIHNlIGFwb3NlbnRhci4nJycKCmZyb20gdGltZSBpbXBvcnQgc2xlZXAKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZQpmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZGludApmcm9tIG9wZXJhdG9yIGltcG9ydCBpdGVtZ2V0dGVyCiMgVEFCRUxBIERFIENPUkVTICMKYnJhbmNvID0gJ1wwMzNbMTszMG0nCmJyYW5jb19pbiA9ICdcMDMzWzE7NzszMG0nCnZlcm1lbGhvID0gJ1wwMzNbMTszMW0nCnZlcm1lbGhvX2luID0gJ1wwMzNbMTs3OzMxbScKdmVyZGUgPSAnXDAzM1sxOzMybScKdmVyZGVfaW4gPSAnXDAzM1sxOzc7MzJtJwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmFtYXJlbG8gPSAnXDAzM1sxOzMzbScKYW1hcmVsb19pbiA9ICdcMDMzWzE7NzszM20nCmF6dWwgPSAnXDAzM1sxOzM0bScKcm94byA9ICdcMDMzWzE7MzVtJwo8fGZpbV9lbmR8Pg=="]
["f8285405320b9951c770956e344c6d276ba20585-4","f8285405320b9951c770956e344c6d276ba20585","PHxmaW1fcHJlZml4fD4KZnJvbSBpbnRjb2RlIGltcG9ydCBJbnRjb2RlCmltcG9ydCBtYXRoCgoKZGVmIGRhdGFfdG9fYXNjaWkoZGF0YSk6CiAgICByZXR1cm4gIiIuam9pbihtYXAoY2hyLCBkYXRhKSkKCgpkZWYgYXNjaWlfdG9fZGF0YShkYXRhKToKICAgIHJldHVybiBsaXN0KG1hcChvcmQsIGRhdGEpKQoKCmRlZiBtYWluKHBhcnRfaW5wdXQpOgogICAgcHJpbnQoIlBBUlQxIikKCiAgICBjb21wdXRlcnMgPSBbXQogICAgaW5pdGlhbF9tZW1vcnkgPSBwYXJzZV9pbnB1dF9maWxlKHBhcnRfaW5wdXQpCiAgICBmb3IgaSBpbiByYW5nZSg1MCk6CiAgICAgICAgaW5wdXRfYnVmZmVyID0gW10KICAgICAgICBvdXRwdXRfYnVmZmVyID0gW10KICAgICAgICBjb21wdXRlciA9IEludGNvZGUoaW5pdGlhbF9tZW1vcnlbOl0sIGlucHV0X2J1ZmZlciwgb3V0cHV0X2J1ZmZlcikKICAgICAgICBjb21wdXRlci5zZXRfaW5wdXQoaSkKICAgICAgICBjb21wdXRlcnMuYXBwZW5kKGNvbXB1dGVyKQoKICAgICAgICBjb21wdXRlci5ydW5fcHJvZ3JhbSgpCgogICAgbmV0d29ya19tZXNzYWdlcyA9IFtdCiAgICBuYXRfbWVtb3J5ID0gTm9uZQogICAgbmF0X3NlbnRfaGlzdG9yeSA9IHNldCgpCiAgICBwYXJ0MV9jb21wbGV0ZSA9IEZhbHNlCiAgICB3aGlsZSBUcnVlOgogICAgICAgICMgUGFzcyBtZXNzYWdlcyB0byBtYWNoaW5lcwogICAgICAgIGZvciBtZXNzYWdlIGluIG5ldHdvcmtfbWVzc2FnZXM6CiAgICAgICAgICAgICMgSWYgYWRkcmVzcyBpcyAyNTUsIHByaW50IGFuZCBleGl0CiAgICAgICAgICAgIGlmIG1lc3NhZ2VbMF0gPT0gMjU1IGFuZCBub3QgcGFydDFfY29tcGxldGU6CiAgICAgICAgICAgICAgICBwYXJ0MV9jb21wbGV0ZSA9IFRydWUKICAgICAgICAgICAgICAgIHByaW50KG1lc3NhZ2VbMl0pCiAgICAgICAgICAgICAgICBwcmludCgiUEFSVDIiKQoKICAgICAgICAgICAgIyBEaXJlY3QgMjU1IHRvIE5BVAogICAgICAgICAgICBpZiBtZXNzYWdlWzBdID09IDI1NToKICAgICAgICAgICAgICAgIG5hdF9tZW1vcnkgPSAoMCwgbWVzc2FnZVsxXSwgbWVzc2FnZVsyXSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAjIFBhc3MgWCBhbmQgWSBhcyBpbnB1dCB0byB0aGUgY29tcHV0ZXIKICAgICAgICAgICAgYWRkcmVzcywgWCwgWSA9IG1lc3NhZ2UKICAgICAgICAgICAgY29tcHV0ZXJzW2FkZHJlc3NdLnNldF9pbnB1dChYKQogICAgICAgICAgICBjb21wdXRlcnNbYWRkcmVzc10uc2V0X2lucHV0KFkpCgogICAgICAgIG5ldHdvcmtfbWVzc2FnZXMuY2xlYXIoKQoKICAgICAgICAjIElmIHRoZXJlIGlzIG5vIGlucHV0LCBwYXNzIC0xCiAgICAgICAgIyBNb25pdG9yIE5BVAogICAgICAgIG5ldHdvcmtfYWN0aXZlID0gRmFsc2UKICAgICAgICBmb3IgY29tcHV0ZXIgaW4gY29tcHV0ZXJzOgogICAgICAgICAgICBpZiBsZW4oY29tcHV0ZXIuaW5wdXRfYnVmZmVyKSA9PSAwOgogICAgICAgICAgICAgICAgY29tcHV0ZXIuc2V0X2lucHV0KC0xKQogICAgICAgICAgICBlbGlmIHBhcnQxX2NvbXBsZXRlOgogICAgICAgICAgICAgICAgbmV0d29ya19hY3RpdmUgPSBUcnVlCgogICAgICAgIGlmIHBhcnQxX2NvbXBsZXRlIGFuZCBub3QgbmV0d29ya19hY3RpdmU6CiAgICAgICAgICAgICMgU2VuZCBOQVQgcGFja2V0CiAgICAgICAgICAgIGlmIG5hdF9tZW1vcnkgaW4gbmF0X3NlbnRfaGlzdG9yeToKICAgICAgICAgICAgICAgIHByaW50KG5hdF9tZW1vcnlbMl0pCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBuYXRfc2VudF9oaXN0b3J5LmFkZChuYXRfbWVtb3J5KQoKPHxmaW1faG9sZXw+CiAgICAgICAgZm9yIGNvbXB1dGVyIGluIGNvbXB1dGVyczoKICAgICAgICAgICAgY29tcHV0ZXIucnVuX3Byb2dyYW0oKQoKICAgICAgICAjIEdldCBvdXRwdXQKICAgICAgICBmb3IgY29tcHV0ZXIgaW4gY29tcHV0ZXJzOgogICAgICAgICAgICBpZiBsZW4oY29tcHV0ZXIub3V0cHV0X2J1ZmZlcikgPT0gMDoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICBhZGRyZXNzID0gY29tcHV0ZXIub3V0cHV0X2J1ZmZlci5wb3AoMCkKICAgICAgICAgICAgWCA9IGNvbXB1dGVyLm91dHB1dF9idWZmZXIucG9wKDApCiAgICAgICAgICAgIFkgPSBjb21wdXRlci5vdXRwdXRfYnVmZmVyLnBvcCgwKQogICAgICAgICAgICBuZXR3b3JrX21lc3NhZ2VzLmFwcGVuZCgoYWRkcmVzcywgWCwgWSkpCgoKZGVmIHBhcnNlX2lucHV0X2ZpbGUoaW5wdXRfZmlsZV9jb250ZW50cyk6CiAgICByZXR1cm4gbGlzdChtYXAoaW50LCBpbnB1dF9maWxlX2NvbnRlbnRzLnNwbGl0KCIsIikpKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICB3aXRoIG9wZW4oImlucHV0IiwgInIiKSBhcyBpbnB1dF9maWxlOgogICAgICAgIGlucHV0X2ZpbGVfY29udGVudHMgPSBpbnB1dF9maWxlLnJlYWRsaW5lKCkuc3RyaXAoKQogICAgICAgIG1haW4oaW5wdXRfZmlsZV9jb250ZW50cykKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgYWRkcmVzcyA9IG5hdF9tZW1vcnlbMF0KICAgICAgICAgICAgY29tcHV0ZXJzW2FkZHJlc3NdLnNldF9pbnB1dChuYXRfbWVtb3J5WzFdKQogICAgICAgICAgICBjb21wdXRlcnNbYWRkcmVzc10uc2V0X2lucHV0KG5hdF9tZW1vcnlbMl0pCgo8fGZpbV9lbmR8Pg=="]
["26de2718815c155ebe51925af7e134303d70e216-3","26de2718815c155ebe51925af7e134303d70e216","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgoKZnJvbSBkamFuZ28uY29udHJpYi5naXMuZ2VvcyBpbXBvcnQgUG9seWdvbgoKCmNsYXNzIFJlc291cmNlTGluayhvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGUsIGhyZWYpOgogICAgICAgIHNlbGYudHlwZSA9IHR5cGUKICAgICAgICBzZWxmLmhyZWYgPSBocmVmCgoKY2xhc3MgUmVzb3VyY2Uob2JqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpZCwgZGVzY3JpcHRpb24sIGF1dGhvciwgbGlua3MsIHRpdGxlLAogICAgICAgICAgICAgICAgIGNyZWF0ZWRfYXQsIHVwZGF0ZWRfYXQsIGdlb20pOgogICAgICAgIHNlbGYuaWQgPSBpZAogICAgICAgIHNlbGYudGl0bGUgPSB0aXRsZQogICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgogICAgICAgIHNlbGYuYXV0aG9yID0gYXV0aG9yCiAgICAgICAgc2VsZi5saW5rcyA9IGxpbmtzCiAgICAgICAgc2VsZi5jcmVhdGVkX2F0ID0gY3JlYXRlZF9hdAogICAgICAgIHNlbGYudXBkYXRlZF9hdCA9IHVwZGF0ZWRfYXQKICAgICAgICBzZWxmLmdlb20gPSBnZW9tCgoKPHxmaW1faG9sZXw+CiAgICAgICAgc2VsZi5jb3VudCA9IGNvdW50CiAgICAgICAgc2VsZi5yZXN1bHRzID0gcmVzdWx0cwoKCmNsYXNzIEJCb3gob2JqZWN0KToKICAgICIiIgogICAgQm91bmRpbmcgYm94IGZyb20gaW5jb21pbmcgc2VhcmNoIEFQSSByZXF1ZXN0LgogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgeG1pbiwgeW1pbiwgeG1heCwgeW1heCk6CiAgICAgICAgc2VsZi54bWluID0geG1pbgogICAgICAgIHNlbGYueG1heCA9IHhtYXgKICAgICAgICBzZWxmLnltaW4gPSB5bWluCiAgICAgICAgc2VsZi55bWF4ID0geW1heAoKICAgIGRlZiBhcmVhKHNlbGYpOgogICAgICAgIHBvbHlnb24gPSBQb2x5Z29uLmZyb21fYmJveCgoCiAgICAgICAgICAgIHNlbGYueG1pbiwgc2VsZi55bWluLAogICAgICAgICAgICBzZWxmLnhtYXgsIHNlbGYueW1heCkpCiAgICAgICAgcG9seWdvbi5zZXRfc3JpZCg0MzI2KQoKICAgICAgICByZXR1cm4gcG9seWdvbi50cmFuc2Zvcm0oNTA3MCwgY2xvbmU9VHJ1ZSkuYXJlYQo8fGZpbV9zdWZmaXh8PgpjbGFzcyBSZXNvdXJjZUxpc3Qob2JqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcGlfdXJsLCBjYXRhbG9nLCBjb3VudCwgcmVzdWx0cyk6CiAgICAgICAgc2VsZi5hcGlfdXJsID0gYXBpX3VybAogICAgICAgIHNlbGYuY2F0YWxvZyA9IGNhdGFsb2cKPHxmaW1fZW5kfD4="]
["ef2bd4ee511ec964d8aa25378d6515c721e57ae4-1","ef2bd4ee511ec964d8aa25378d6515c721e57ae4","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCgkKaW1wb3J0IHN5cwoKdHJ5OgoJc3lzLmFyZ3ZbMV0KZXhjZXB0IChJbmRleEVycm9yLCBOYW1lRXJyb3IpOgoJcHJpbnQgKCJcbiEhRVJST1I6IGV4cGVjdGVkIGZpbGVuYW1lIGFzIGFuIGFyZ3VtZW50ISEiKQoJZmlsZW5hbWUgPSBpbnB1dCgiRW50ZXIgbmFtZSBvZiBtZXRhc3ByaXRlIGZpbGUgbm93OiAiKQplbHNlOgkKCWZpbGVuYW1lID0gc3lzLmFyZ3ZbMV0KCQphcnJheSA9IFtdCnRhYmxlID0gW10KcGFsbGV0ZSA9IFtdCgkKYmcgPSBbXQptZXRhID0gW10KCmRlZiBMb2FkQXJyYXkoKToKCWZzcmMgPSBvcGVuKGZpbGVuYW1lLCAncmInKQoJZm9yIGkgaW4gcmFuZ2UgKDAsIDk2MCk6CgkJYiA9IG9yZChmc3JjLnJlYWQoMSkpCgkJYXJyYXkuYXBwZW5kKGIpCgoJZm9yIGkgaW4gcmFuZ2UgKDk2MCwgMTAyNCk6CgkJYiA9IG9yZChmc3JjLnJlYWQoMSkpCgkJcGFsbGV0ZS5hcHBlbmQoYikKCQlmc3JjLmNsb3NlCgpkZWYgVGFibGUyeChpZHgsIGlkeFNlZ21lbnQpOgoJYXJyID0gW10KCWFyci5hcHBlbmQoYXJyYXlbaWR4U2VnbWVudF0pCglhcnIuYXBwZW5kKGFycmF5W2lkeFNlZ21lbnQgKyAxXSkKCWFyci5hcHBlbmQoYXJyYXlbaWR4U2VnbWVudCArIDMyXSkKCWFyci5hcHBlbmQoYXJyYXlbaWR4U2VnbWVudCArIDMzXSkKCXRhYmxlLmFwcGVuZChhcnIpCgpkZWYgQWRkUGFsbGV0ZShpZHgsIGlkeFNlZ21lbnQpOgoJcGFsID0gcGFsbGV0ZVtpZHhdCglwID0gcGFsICYgMHgwMwoJc2VnbWVudCA9IHRhYmxlW2lkeFNlZ21lbnRdCglzZWdtZW50LmFwcGVuZChwKQoJdGFibGVbaWR4U2VnbWVudF0gPSBzZWdtZW50CgoJcCA9IChwYWwgJiAweDBDKSA+PiAyCglzZWdtZW50ID0gdGFibGVbaWR4U2VnbWVudCArIDFdCglzZWdtZW50LmFwcGVuZChwKQoJdGFibGVbaWR4U2VnbWVudCArIDFdID0gc2VnbWVudAoKCWlmIChpZHhTZWdtZW50ICsgMTYpID4gMjM5OgoJCXJldHVybgoJcCA9IChwYWwgJiAweDMwKSA+PiA0CglzZWdtZW50ID0gdGFibGVbaWR4U2VnbWVudCArIDE2XQoJc2VnbWVudC5hcHBlbmQocCkKCXRhYmxlW2lkeFNlZ21lbnQgKyAxNl0gPSBzZWdtZW50CgoJcCA9IChwYWwgJiAweEMwKSA+PiA2CglzZWdtZW50ID0gdGFibGVbaWR4U2VnbWVudCArIDE3XQoJc2VnbWVudC5hcHBlbmQocCkKCXRhYmxlW2lkeFNlZ21lbnQgKyAxN10gPSBzZWdtZW50CgpkZWYgWm9vbSggdGFibGVTaXplLCBsaW5lU2l6ZSwgZnVuYyApOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CglpZHhMaW5lPTAKCWlkeFNlZ21lbnQ9MAoJZm9yIGkgaW4gcmFuZ2UgKDAsIHRhYmxlU2l6ZSk6CgkJaWYgaWR4TGluZSA9PSAobGluZVNpemUgLyAyKToKPHxmaW1fZW5kfD4="]
["08987efc47c68f661be27369fb7ac514cfa4bc33-4","08987efc47c68f661be27369fb7ac514cfa4bc33","PHxmaW1fcHJlZml4fD4KIyBNZXJnZSBVc2VyIGFuZCBQcm9maWxlIGZpZWxkcyBpbiBBZG1pbgpmcm9tIGRqYW5nby5jb250cmliLmF1dGguYWRtaW4gaW1wb3J0IFVzZXJBZG1pbgpmcm9tIGRqYW5nby5jb250cmliLmF1dGgubW9kZWxzIGltcG9ydCBVc2VyCgpmcm9tIGRqYW5nby5jb250cmliIGltcG9ydCBhZG1pbgpmcm9tIC5tb2RlbHMgaW1wb3J0IFByb2ZpbGUKCmNsYXNzIFByb2ZpbGVJbmxpbmUoYWRtaW4uU3RhY2tlZElubGluZSk6CiAgICB2ZXJib3NlX25hbWVfcGx1cmFsID0gJ1Byb2ZpbGUnCiAgICBjYW5fZGVsZXRlID0gRmFsc2UKICAgIG1vZGVsID0gUHJvZmlsZQogICAgZmtfbmFtZSA9ICd1c2VyJwoKY2xhc3MgQ3VzdG9tVXNlckFkbWluKFVzZXJBZG1pbik6CiAgICBpbmxpbmVzID0gKFByb2ZpbGVJbmxpbmUsICkKCiAgICBsaXN0X2Rpc3BsYXkgPSAoJ3VzZXJuYW1lJywgJ2VtYWlsJywgJ2dldF9hY3RpdmF0ZWQnLCAnZ2V0X3Bob25lX25vJywgJ2dldF9jcmVkaXQnKQoKCiAgICBkZWYgZ2V0X2FjdGl2YXRlZChzZWxmLCBpbnN0YW5jZSk6CiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnByb2ZpbGUuaXNfYWN0aXZhdGVkCiAgICAKICAgIGRlZiBnZXRfcGhvbmVfbm8oc2VsZiwgaW5zdGFuY2UpOgogICAgICAgIHJldHVybiBpbnN0YW5jZS5wcm9maWxlLnBob25lX25vCiAgICAKICAgIGRlZiBnZXRfY3JlZGl0KHNlbGYsIGluc3RhbmNlKToKICAgICAgICByZXR1cm4gaW5zdGFuY2UucHJvZmlsZS5jcmVkaXQKCiAgICBnZXRfYWN0aXZhdGVkLnNob3J0X2Rlc2NyaXB0aW9uID0gIkFjdGl2YXRlZCIKICAgIGdldF9hY3RpdmF0ZWQuYm9vbGVhbiA9IFRydWUKICAgIGdldF9waG9uZV9uby5zaG9ydF9kZXNjcmlwdGlvbiA9ICJQaG9uZSBOby4iCiAgICBnZXRfY3JlZGl0LnNob3J0X2Rlc2NyaXB0aW9uID0gIkNyZWRpdCIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCmFkbWluLnNpdGUudW5yZWdpc3RlcihVc2VyKQphZG1pbi5zaXRlLnJlZ2lzdGVyKFVzZXIsIEN1c3RvbVVzZXJBZG1pbikKPHxmaW1fZW5kfD4="]
["7ba49c56c1b1d999482141ebf9e8586b735d9d6a-3","7ba49c56c1b1d999482141ebf9e8586b735d9d6a","PHxmaW1fcHJlZml4fD4KIyBTdGFuZGFyZCBMaWJyYXJ5IEltcG9ydHMKaW1wb3J0IHN1YnByb2Nlc3MKaW1wb3J0IG9zCmltcG9ydCBzaHV0aWwKaW1wb3J0IHBhdGhsaWIKCiMgVGhpcmQgUGFydHkgSW1wb3J0cwppbXBvcnQgcHl0ZXN0CgojIExvY2FsIEFwcGxpY2F0aW9uIEltcG9ydHMKZnJvbSB1dGlsLmNvbmZpZ2hvbGRlciBpbXBvcnQgQ29uZmlnSG9sZGVyCmZyb20gZ2xvYmFsX3ZhcmlhYmxlcyBpbXBvcnQgUk9PVF9ESVIKZnJvbSB0ZXN0LmNvbmZ0ZXN0IGltcG9ydCAoCiAgICBsb2FkX2NvbmZpZ3MsCiAgICBkZWxldGVfY29uZmlncywKICAgIGxvYWRfaW5pdF9jb25maWdzLAopCmZyb20gdGVzdC50ZXN0X3ZhcmlhYmxlcyBpbXBvcnQgKAogICAgQ09ORklHVVJBVElPTl9GSUxFX05BTUUsCiAgICBDT05GSUdVUkFUSU9OX0ZJTEVfUEFUSCwKKQpmcm9tIHV0aWwuaGVscGVycyBpbXBvcnQgZ2l0X2FkZF9jb21taXRfcHVzaAoKY29uZmlnaG9sZGVyID0gQ29uZmlnSG9sZGVyKENPTkZJR1VSQVRJT05fRklMRV9OQU1FLCBDT05GSUdVUkFUSU9OX0ZJTEVfUEFUSCkKY29uZmlnaG9sZGVyLmxvYWRfdG9tbCgpCgpBQ1RJT05fSURFTlRJRklFUiA9ICJ1cGRhdGUiCgoKQHB5dGVzdC5maXh0dXJlKHNjb3BlPSJmdW5jdGlvbiIpCmRlZiBpbnRlZ3JhdGlvbl90ZXN0X3NldHVwKHJlcXVlc3QpOgogICAgIiIiVG8gc2V0dXAgYSBtb2NrIGVudmlyb25tZW50IGZvciBpbnRlZ3JhdGlvbiB0ZXN0cy4iIiIKICAgIGNvbmZpZ3MgPSBjb25maWdob2xkZXIudGFibGVfZnVuY19yZXRyaWV2ZV9hZGRpdGlvbmFsX2NvbmZpZ3MoCiAgICAgICAgQUNUSU9OX0lERU5USUZJRVIsIHJlcXVlc3QuZnVuY3Rpb24uX19uYW1lX18KICAgICkKICAgIGxvYWRfY29uZmlncyhjb25maWdob2xkZXIsIGNvbmZpZ3MpCiAgICBVUERBVEVfVEFSR0VUID0gY29uZmlnaG9sZGVyLmdldF9jb25maWdfdmFsdWUoIlVQREFURV9UQVJHRVQiKQogICAgTU9ERUxfVEFSR0VUID0gY29uZmlnaG9sZGVyLmdldF9jb25maWdfdmFsdWUoIk1PREVMX1RBUkdFVCIpCiAgICBvcy5ta2RpcihNT0RFTF9UQVJHRVQpCgogICAgZGVmIGludGVncmF0aW9uX3Rlc3RfdGVhcmRvd24oKToKICAgICAgICBvcy5jaGRpcihST09UX0RJUikKICAgICAgICBvcy5jaGRpcihNT0RFTF9UQVJHRVQpCiAgICAgICAgZm9yIHJlcG8gaW4gb3MubGlzdGRpcigpOgogICAgICAgICAgICBvcy5jaGRpcihyZXBvKQogICAgICAgICAgICBvcy5yZW1vdmUoQURESVRJT05BTF9GSUxFMSkKICAgICAgICAgICAgZ2l0X2FkZF9jb21taXRfcHVzaCgKICAgICAgICAgICAgICAgICJ0ZXN0IGRvbmUsIG5vdyBkZWxldGluZyBhbnkgYWRkaXRpb25hbCBmaWxlcyBhZGRlZC4uLiIKICAgICAgICAgICAgKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIG9zLmNoZGlyKCIuLiIpCjx8ZmltX2VuZHw+"]
["260e9ea733acad354b870788d0c898a08c18eba9-2","260e9ea733acad354b870788d0c898a08c18eba9","PHxmaW1fcHJlZml4fD4KY2xhc3MgVHJhbnNhY3Rpb246CiAgICBvZmZzZXQgPSAwCiAgICBwcmVmaXhVdGlsaXR5ID0gMAoKICAgICMgY29uc3RydWN0b3Igb2YgYSB0cmFuc2FjdGlvbgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZW1zLCB1dGlsaXRpZXMsIHRyYW5zYWN0aW9uVXRpbGl0eSwgcG11cz1Ob25lKToKICAgICAgICBzZWxmLml0ZW1zID0gaXRlbXMKICAgICAgICBzZWxmLnV0aWxpdGllcyA9IHV0aWxpdGllcwogICAgICAgIHNlbGYudHJhbnNhY3Rpb25VdGlsaXR5ID0gdHJhbnNhY3Rpb25VdGlsaXR5CiAgICAgICAgaWYgcG11cyBpcyBub3QgTm9uZToKICAgICAgICAgICAgc2VsZi5wbXVzID0gcG11cwoKICAgIGRlZiBwcm9qZWN0VHJhbnNhY3Rpb24oc2VsZiwgb2Zmc2V0RSk6CiAgICAgICAgbmV3X3RyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb24oc2VsZi5pdGVtcywgc2VsZi51dGlsaXRpZXMsIHNlbGYudHJhbnNhY3Rpb25VdGlsaXR5KQogICAgICAgIHV0aWxpdHlFID0gc2VsZi51dGlsaXRpZXNbb2Zmc2V0RV0KICAgICAgICBuZXdfdHJhbnNhY3Rpb24ucHJlZml4VXRpbGl0eSA9IHNlbGYucHJlZml4VXRpbGl0eSArIHV0aWxpdHlFCiAgICAgICAgbmV3X3RyYW5zYWN0aW9uLnRyYW5zYWN0aW9uVXRpbGl0eSA9IHNlbGYudHJhbnNhY3Rpb25VdGlsaXR5IC0gdXRpbGl0eUUKICAgICAgICBmb3IgaSBpbiByYW5nZShzZWxmLm9mZnNldCwgb2Zmc2V0RSk6CiAgICAgICAgICAgIG5ld190cmFuc2FjdGlvbi50cmFuc2FjdGlvblV0aWxpdHkgLT0gc2VsZi51dGlsaXRpZXNbaV0KICAgICAgICBuZXdfdHJhbnNhY3Rpb24ub2Zmc2V0ID0gb2Zmc2V0RSArIDEKPHxmaW1faG9sZXw+CiAgICBkZWYgZ2V0SXRlbXMoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuaXRlbXMKCiAgICBkZWYgZ2V0UG11cyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5wbXVzCgogICAgZGVmIGdldFV0aWxpdGllcyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi51dGlsaXRpZXMKICAgIAogICAgZGVmIGdldFRyYW5zYWN0aW9uVXRpbGl0eShzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi50cmFuc2FjdGlvblV0aWxpdHkKCiAgICAjIGdldCB0aGUgbGFzdCBwb3NpdGlvbiBpbiB0aGlzIHRyYW5zYWN0aW9uCiAgICBkZWYgZ2V0TGFzdFBvc2l0aW9uKHNlbGYpOgogICAgICAgIHJldHVybiBsZW4oc2VsZi5pdGVtcykgLSAxCgogICAgIyBUaGlzIG1ldGhvZCByZW1vdmVzIHVucHJvbWlzaW5nIGl0ZW1zIGZyb20gdGhlIHRyYW5zYWN0aW9uIGFuZAogICAgIyBhdCB0aGUgc2FtZSB0aW1lIHJlbmFtZSBpdGVtcyBmcm9tIG9sZCBuYW1lcyB0byBuZXcgbmFtZXMKICAgIGRlZiByZW1vdmVVbnByb21pc2luZ0l0ZW1zKHNlbGYsIG9sZE5hbWVzVG9OZXdOYW1lcyk6CiAgICAgICAgdGVtcEl0ZW1zID0gW10KICAgICAgICB0ZW1wVXRpbGl0aWVzID0gW10KICAgICAgICBmb3IgaWR4LCBpdGVtIGluIGVudW1lcmF0ZShzZWxmLml0ZW1zKToKICAgICAgICAgICAgaWYgaXRlbSBpbiBvbGROYW1lc1RvTmV3TmFtZXM6CiAgICAgICAgICAgICAgICB0ZW1wSXRlbXMuYXBwZW5kKG9sZE5hbWVzVG9OZXdOYW1lc1tpdGVtXSkKICAgICAgICAgICAgICAgIHRlbXBVdGlsaXRpZXMuYXBwZW5kKHNlbGYudXRpbGl0aWVzW2lkeF0pCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBzZWxmLnRyYW5zYWN0aW9uVXRpbGl0eSAtPSBzZWxmLnV0aWxpdGllc1tpZHhdCiAgICAgICAgc2VsZi5pdGVtcyA9IHRlbXBJdGVtcwogICAgICAgIHNlbGYudXRpbGl0aWVzID0gdGVtcFV0aWxpdGllcwogICAgICAgIHNlbGYuaW5zZXJ0aW9uU29ydCgpCgogICAgZGVmIGluc2VydGlvblNvcnQoc2VsZik6CiAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKHNlbGYuaXRlbXMpKToKICAgICAgICAgICAgICAga2V5ID0gc2VsZi5pdGVtc1tpXQogICAgICAgICAgICAgICB1dGlsaXR5SiA9IHNlbGYudXRpbGl0aWVzW2ldCiAgICAgICAgICAgICAgIGogPSBpIC0gMQogICAgICAgICAgICAgICB3aGlsZSBqID49IDAgYW5kIGtleSA8IHNlbGYuaXRlbXNbal06CiAgICAgICAgICAgICAgICAgICBzZWxmLml0ZW1zW2ogKyAxXSA9IHNlbGYuaXRlbXNbal0KICAgICAgICAgICAgICAgICAgIHNlbGYudXRpbGl0aWVzW2ogKyAxXSA9IHNlbGYudXRpbGl0aWVzW2pdCiAgICAgICAgICAgICAgICAgICBqIC09IDEKICAgICAgICAgICAgICAgc2VsZi5pdGVtc1tqICsgMV0gPSBrZXkKICAgICAgICAgICAgICAgc2VsZi51dGlsaXRpZXNbaiArIDFdID0gdXRpbGl0eUoKCgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJldHVybiBuZXdfdHJhbnNhY3Rpb24KCjx8ZmltX2VuZHw+"]
["a0e9769eb65ae94f0cc9f3353ddf809a07f0c96a-4","a0e9769eb65ae94f0cc9f3353ddf809a07f0c96a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzb2NrZXQKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHRocmVhZGluZwpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCgp0cnk6CiAgICAjIG5vaW5zcGVjdGlvbiBQeVVucmVzb2x2ZWRSZWZlcmVuY2VzCiAgICBpbXBvcnQgYmV5b25kLlJlYXBlcgpleGNlcHQgTW9kdWxlTm90Rm91bmRFcnJvcjoKICAgIHJhaXNlIE1vZHVsZU5vdEZvdW5kRXJyb3IoImJleW9uZC5SZWFwZXIgbm90IGZvdW5kLiBEb3dubG9hZCBpdCBoZXJlOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwczovL2ZvcnVtLmNvY2tvcy5jb20vc2hvd3RocmVhZC5waHA/dD0xMjk2OTYiKQppbXBvcnQgdHlwaW5nIGFzIHRwCmZyb20gdGtpbnRlciBpbXBvcnQgKgpmcm9tIHRlbXBmaWxlIGltcG9ydCBUZW1wb3JhcnlGaWxlCiMgbm9pbnNwZWN0aW9uIFB5VW5yZXNvbHZlZFJlZmVyZW5jZXMKZnJvbSBiZWF0c2VhcmNoX2RpcnMgaW1wb3J0IEJTX1JPT1QsIEJTX0xJQgpzeXMucGF0aC5hcHBlbmQoQlNfTElCKQpmcm9tIGJlYXRzZWFyY2guYXBwLmNvbnRyb2wgaW1wb3J0IEJTQ29udHJvbGxlciwgQlNSaHl0aG1QbGF5ZXIsIEJTTWlkaVJoeXRobUxvYWRlcgpmcm9tIGJlYXRzZWFyY2gucmh5dGhtIGltcG9ydCBNaWRpUmh5dGhtLCBQb2x5cGhvbmljUmh5dGhtLCBUaW1lU2lnbmF0dXJlLCBVbml0LCBNaWRpRHJ1bU1hcHBpbmdSZWR1Y2VyCmZyb20gYmVhdHNlYXJjaC5hcHAudmlldyBpbXBvcnQgQlNBcHAKZnJvbSBiZWF0c2VhcmNoLmFwcC5jb25maWcgaW1wb3J0IGdldF9hcmd2X3BhcnNlcgpmcm9tIGJlYXRzZWFyY2gudXRpbHMgaW1wb3J0IHNldF9sb2dnaW5nX2xldmVsX2J5X25hbWUKIyBub2luc3BlY3Rpb24gUHlVbnJlc29sdmVkUmVmZXJlbmNlcwppbXBvcnQgbWlkaQojIG5vaW5zcGVjdGlvbiBQeVVucmVzb2x2ZWRSZWZlcmVuY2VzClJlYXBlckFwaSA9IFJlYXBlcgoKCmRlZiBtYWluKGlucHV0X3RyYWNrX25hbWUsIG91dHB1dF90cmFja19uYW1lKToKICAgIGFyZ3MgPSBnZXRfYXJndl9wYXJzZXIoIkJlYXRzZWFyY2ggUmVhcGVyIFBsdWdpbiIpLnBhcnNlX2FyZ3MoKQogICAgc2V0X2xvZ2dpbmdfbGV2ZWxfYnlfbmFtZShhcmdzLmxvZykKCiAgICBwbGF5ZXIgPSBSZWFwZXJSaHl0aG1QbGF5ZXIoKQogICAgcmh5dGhtX2xvYWRlciA9IFJlYXBlck1pZGlSaHl0aG1Mb2FkZXIoKQoKICAgIGRlZiBmaW5kX3JlYXBlcl90aHJlYWRfdGFyZ2V0KCk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICB3aXRoIFJlYXBlckFwaSBhcyBhcGk6CiAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJDb25uZWN0ZWQgdG8gUmVhcGVyIikKCiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgYnNfaW5wdXRfdHJhY2sgPSBSZWFwZXJVdGlscy5maW5kX3RyYWNrX2J5X25hbWUoYXBpLCBpbnB1dF90cmFja19uYW1lKQogICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgYnNfaW5wdXRfdHJhY2sgPSBSZWFwZXJVdGlscy5pbnNlcnRfdHJhY2soYXBpLCAwLCBpbnB1dF90cmFja19uYW1lKQoKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICBic19vdXRwdXRfdHJhY2sgPSBSZWFwZXJVdGlscy5maW5kX3RyYWNrX2J5X25hbWUoYXBpLCBvdXRwdXRfdHJhY2tfbmFtZSkKICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgICAgIGJzX291dHB1dF90cmFjayA9IFJlYXBlclV0aWxzLmluc2VydF90cmFjayhhcGksIDAsIG91dHB1dF90cmFja19uYW1lKQoKICAgICAgICAgICAgcmh5dGhtX2xvYWRlci5zZXRfaW5wdXRfdHJhY2soYnNfaW5wdXRfdHJhY2spCiAgICAgICAgICAgIHBsYXllci5zZXRfb3V0cHV0X3RyYWNrKGJzX291dHB1dF90cmFjaykKCiAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgogICAgICAgICAgICBpZiBub3QgYXBwLmlzX2Nsb3NlZDoKICAgICAgICAgICAgICAgIGFwcC5kZXN0cm95KCkKCiAgICBsb2dnaW5nLmRlYnVnKCJUcnlpbmcgdG8gY29ubmVjdCB0byBSZWFwZXIuLi4iKQogICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZmluZF9yZWFwZXJfdGhyZWFkX3RhcmdldCkuc3RhcnQoKQoKICAgIGxvZ2dpbmcuZGVidWcoIkluaXRpYWxpemluZyBjb250cm9sbGVyLi4uIikKICAgIGNvbnRyb2xsZXIgPSBCU0NvbnRyb2xsZXIocmh5dGhtX3BsYXllcj1wbGF5ZXIpCiAgICBjb250cm9sbGVyLnJlZ2lzdGVyX3JoeXRobV9sb2FkZXIocmh5dGhtX2xvYWRlcikKCiAgICBsb2dnaW5nLmRlYnVnKCJJbml0aWFsaXppbmcgdmlldy4uLiIpCiAgICBhcHAgPSBCU0FwcChjb250cm9sbGVyLCBiYXNlTmFtZT0iYmVhdHNlYXJjaC1yZWFwZXItcGx1Z2luIikKICAgIGFwcC5tYWlubG9vcCgpCgoKY2xhc3MgUmVhcGVyUmh5dGhtUGxheWVyKEJTUmh5dGhtUGxheWVyKToKICAgICIiIkltcGxlbWVudGF0aW9uIG9mIEJTUmh5dGhtUGxheWVyIHRoYXQgdXNlcyBSZWFwZXIgYXMgTUlESSBvdXRwdXQgZm9yIHRoZSByaHl0aG1zIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dHB1dF90cmFjazogc3RyID0gTm9uZSk6CiAgICAgICAgc3VwZXIoUmVhcGVyUmh5dGhtUGxheWVyLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5fdG1wX2ZpbGVzID0gc2V0KCkgICAgICAgICAgICAgICMgdHlwZTogdHAuU2V0W3N0cl0KICAgICAgICBzZWxmLl9zdGFydF9wb3MgPSAtMSAgICAgICAgICAgICAgICAgIyB0eXBlOiBmbG9hdAogICAgICAgIHNlbGYuX2VuZF9wb3MgPSAtMSAgICAgICAgICAgICAgICAgICAjIHR5cGU6IGZsb2F0CiAgICAgICAgc2VsZi5fZW5kX3Bvc19maXJzdF9yaHl0aG0gPSAtMSAgICAgICMgdHlwZTogZmxvYXQKICAgICAgICBzZWxmLl9vdXRwdXRfdHJhY2sgPSBvdXRwdXRfdHJhY2sgICAgIyB0eXBlOiBzdHIKICAgICAgICBzZWxmLl9jdXJyZW50X3JoeXRobXMgPSBbXSAgICAgICAgICAgIyB0eXBlOiB0cC5MaXN0W1BvbHlwaG9uaWNSaHl0aG1dCiAgICAgICAgc2VsZi5faXNfcGxheWluZyA9IEZhbHNlICAgICAgICAgICAgICMgdHlwZTogYm9vbAoKICAgICAgICBpZiBvdXRwdXRfdHJhY2sgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHNlbGYuc2V0X291dHB1dF90cmFjayhvdXRwdXRfdHJhY2spCgogICAgQHByb3BlcnR5CiAgICBkZWYgb3V0cHV0X3RyYWNrKHNlbGYpIC0+IHN0cjoKICAgICAgICByZXR1cm4gc2VsZi5fb3V0cHV0X3RyYWNrCgogICAgQG91dHB1dF90cmFjay5zZXR0ZXIKICAgIGRlZiBvdXRwdXRfdHJhY2soc2VsZiwgb3V0cHV0X3RyYWNrOiBzdHIpIC0+IE5vbmU6CiAgICAgICAgc2VsZi5zZXRfb3V0cHV0X3RyYWNrKG91dHB1dF90cmFjaykKCiAgICBkZWYgc2V0X291dHB1dF90cmFjayhzZWxmLCBvdXRwdXRfdHJhY2s6IHN0ciwgcmVhcGVyX2FwaTogUmVhcGVyQXBpID0gTm9uZSk6CiAgICAgICAgaWYgcmVhcGVyX2FwaSBpcyBOb25lOgogICAgICAgICAgICB3aXRoIFJlYXBlckFwaSBhcyBhcGk6CiAgICAgICAgICAgICAgICBzZWxmLnNldF9vdXRwdXRfdHJhY2sob3V0cHV0X3RyYWNrLCBhcGkpCiAgICAgICAgICAgIHJldHVybgoKICAgICAgICByZWFwZXJfYXBpLk9uU3RvcEJ1dHRvbigpCiAgICAgICAgcmVhcGVyX2FwaS5HZXRTZXRSZXBlYXQoMSkgICMgZW5hYmxlIHJlcGVhdAogICAgICAgIFJlYXBlclV0aWxzLmNsZWFyX3RyYWNrKHJlYXBlcl9hcGksIHNlbGYuX291dHB1dF90cmFjaykKICAgICAgICBzZWxmLl9vdXRwdXRfdHJhY2sgPSBvdXRwdXRfdHJhY2sKCiAgICBkZWYgcGxheWJhY2tfcmh5dGhtcyhzZWxmLCByaHl0aG1zOiB0cC5JdGVyYWJsZVtNaWRpUmh5dGhtXSkgLT4gTm9uZToKICAgICAgICB3aXRoIFJlYXBlckFwaSBhcyBhcGk6CiAgICAgICAgICAgIGFwaS5PblBhdXNlQnV0dG9uKCkKICAgICAgICAgICAgc2VsZi5wb3B1bGF0ZV90cmFjayhhcGksIHJoeXRobXMpCiAgICAgICAgICAgIFJlYXBlclV0aWxzLnNldF90aW1lX3NlbGVjdGlvbihhcGksIHNlbGYuX3N0YXJ0X3Bvcywgc2VsZi5fZW5kX3BvcykKICAgICAgICAgICAgUmVhcGVyVXRpbHMuZW5hYmxlX21ldHJvbm9tZShhcGksIEZhbHNlKQogICAgICAgICAgICBhcGkuUlBSX0NTdXJmX09uTXV0ZUNoYW5nZShzZWxmLm91dHB1dF90cmFjaywgRmFsc2UpICAjIHVubXV0ZSBvdXRwdXQgdHJhY2sKICAgICAgICAgICAgYXBpLlJQUl9DU3VyZl9PblNvbG9DaGFuZ2Uoc2VsZi5vdXRwdXRfdHJhY2ssIFRydWUpICAjIHNvbG8gb3V0cHV0IHRyYWNrCiAgICAgICAgICAgIGFwaS5PblBsYXlCdXR0b24oKQogICAgICAgIHNlbGYuX2lzX3BsYXlpbmcgPSBUcnVlCgogICAgZGVmIHN0b3BfcGxheWJhY2soc2VsZikgLT4gTm9uZToKICAgICAgICB3aXRoIFJlYXBlckFwaSBhcyBhcGk6CiAgICAgICAgICAgIGFwaS5PblN0b3BCdXR0b24oKQoKICAgICAgICAgICAgYXBpLlJQUl9DU3VyZl9Pbk11dGVDaGFuZ2Uoc2VsZi5vdXRwdXRfdHJhY2ssIFRydWUpICAjIG11dGUgb3V0cHV0IHRyYWNrCiAgICAgICAgICAgIGFwaS5SUFJfQ1N1cmZfT25Tb2xvQ2hhbmdlKHNlbGYub3V0cHV0X3RyYWNrLCBGYWxzZSkgICMgdW4tc29sbyBvdXRwdXQgdHJhY2sKCiAgICAgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfcmh5dGhtczoKICAgICAgICAgICAgICAgIGFzc2VydCBzZWxmLl9zdGFydF9wb3MgPiAwCiAgICAgICAgICAgICAgICBhc3NlcnQgc2VsZi5fZW5kX3Bvc19maXJzdF9yaHl0aG0gPiAwCiAgICAgICAgICAgICAgICBSZWFwZXJVdGlscy5zZXRfdGltZV9zZWxlY3Rpb24oYXBpLCBzZWxmLl9zdGFydF9wb3MsIHNlbGYuX2VuZF9wb3NfZmlyc3Rfcmh5dGhtKQoKICAgICAgICAgICAgUmVhcGVyVXRpbHMuZW5hYmxlX21ldHJvbm9tZShhcGksIFRydWUpCiAgICAgICAgc2VsZi5faXNfcGxheWluZyA9IEZhbHNlCgogICAgZGVmIGlzX3BsYXlpbmcoc2VsZikgLT4gYm9vbDoKICAgICAgICByZXR1cm4gc2VsZi5faXNfcGxheWluZwoKICAgIGRlZiBzZXRfcmVwZWF0KHNlbGYsIGVuYWJsZWQ6IGJvb2wpIC0+IE5vbmU6CiAgICAgICAgbG9nZ2luZy5lcnJvcigiUmVhcGVyUmh5dGhtUGxheWVyLnNldF9yZXBlYXQoKSBub3QgYXZhaWxhYmxlLiBSZXBlYXQgaXMgYWx3YXlzIGVuYWJsZWQuIikKCiAgICBkZWYgZ2V0X3JlcGVhdChzZWxmKSAtPiBib29sOgogICAgICAgIHJldHVybiBUcnVlCgogICAgZGVmIGNsZWFuX3RlbXBfZmlsZXMoc2VsZikgLT4gTm9uZToKICAgICAgICBmb3IgZnBhdGggaW4gc2VsZi5fdG1wX2ZpbGVzOgogICAgICAgICAgICBvcy5yZW1vdmUoZnBhdGgpCgogICAgZGVmIHBvcHVsYXRlX3RyYWNrKHNlbGYsIGFwaSwgcmh5dGhtczogdHAuSXRlcmFibGVbTWlkaVJoeXRobV0pIC0+IE5vbmU6CiAgICAgICAgaWYgcmh5dGhtcyA9PSBzZWxmLl9jdXJyZW50X3JoeXRobXM6CiAgICAgICAgICAgIHJldHVybgoKICAgICAgICBSZWFwZXJVdGlscy5jbGVhcl90cmFjayhhcGksIHNlbGYuX291dHB1dF90cmFjaykKICAgICAgICBSZWFwZXJVdGlscy5kZWxldGVfYWxsX3RpbWVfc2lnbmF0dXJlX21hcmtlcnMoYXBpKQogICAgICAgIG1lYXN1cmVfZHVyYXRpb24gPSBSZWFwZXJVdGlscy5nZXRfbWVhc3VyZV9kdXJhdGlvbihhcGkpCgogICAgICAgICMgUmVhcGVyIGZyZWFrcyBvdXQgd2hlbiB3ZSB0cnkgdG8gdGltZSBzZWxlY3Qgc3RhcnRpbmcgZnJvbSAwIHNvCiAgICAgICAgIyB3ZSBwbGFjZSB0aGUgcmh5dGhtcyBhdCB0aGUgc3RhcnQgb2YgdGhlIHNlY29uZCBtZWFzdXJlCiAgICAgICAgYXBpLlNldEVkaXRDdXJQb3MobWVhc3VyZV9kdXJhdGlvbiwgRmFsc2UsIEZhbHNlKQogICAgICAgIHNlbGYuX3N0YXJ0X3BvcyA9IGFwaS5HZXRDdXJzb3JQb3NpdGlvbigpCiAgICAgICAgc2VsZi5fZW5kX3Bvc19maXJzdF9yaHl0aG0gPSAtMQoKICAgICAgICBmb3Igcmh5dGhtIGluIHJoeXRobXM6CiAgICAgICAgICAgIFJlYXBlclV0aWxzLmluc2VydF90aW1lX3NpZ25hdHVyZV9tYXJrZXIoYXBpLCByaHl0aG0udGltZV9zaWduYXR1cmUpCiAgICAgICAgICAgIHRlbXBfZmlsZSA9IHNlbGYucmVuZGVyX3JoeXRobV9hbmRfaW5zZXJ0X3RvX3RyYWNrKHNlbGYuX291dHB1dF90cmFjaywgcmh5dGhtLCBhcGkpCiAgICAgICAgICAgIHNlbGYuX3RtcF9maWxlcy5hZGQodGVtcF9maWxlKQoKICAgICAgICAgICAgaWYgc2VsZi5fZW5kX3Bvc19maXJzdF9yaHl0aG0gPCAwOgogICAgICAgICAgICAgICAgc2VsZi5fZW5kX3Bvc19maXJzdF9yaHl0aG0gPSBhcGkuR2V0Q3Vyc29yUG9zaXRpb24oKQoKICAgICAgICBzZWxmLl9lbmRfcG9zID0gYXBpLkdldEN1cnNvclBvc2l0aW9uKCkKICAgICAgICBzZWxmLl9jdXJyZW50X3JoeXRobXMgPSByaHl0aG1zCgogICAgICAgIHRpbWVfc2lnbmF0dXJlX3Byb2pfc3RhcnQgPSBSZWFwZXJVdGlscy5nZXRfdGltZV9zaWduYXR1cmVfYXRfdGltZShhcGksIDApCiAgICAgICAgUmVhcGVyVXRpbHMuaW5zZXJ0X3RpbWVfc2lnbmF0dXJlX21hcmtlcihhcGksIHRpbWVfc2lnbmF0dXJlX3Byb2pfc3RhcnQpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHJlbmRlcl9yaHl0aG1fYW5kX2luc2VydF90b190cmFjayhvdXRwdXRfdHJhY2ssIHJoeXRobTogTWlkaVJoeXRobSwgcmVhcGVyX2FwaSk6CiAgICAgICAgUmVhcGVyVXRpbHMuc2V0X3NlbGVjdGVkX3RyYWNrcyhyZWFwZXJfYXBpLCBvdXRwdXRfdHJhY2spCiAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKHByZWZpeD0iYmVhdHNlYXJjaC1yZWFwZXIiLCBzdWZmaXg9cmh5dGhtLm5hbWUgKyAiLm1pZCIsIGRlbGV0ZT1GYWxzZSkgYXMgZjoKICAgICAgICAgICAgcGF0dGVybiA9IHJoeXRobS5hc19taWRpX3BhdHRlcm4oKQogICAgICAgICAgICBtaWRpLndyaXRlX21pZGlmaWxlKGYsIHBhdHRlcm4pCiAgICAgICAgICAgIGZwYXRoID0gZi5uYW1lCiAgICAgICAgcmVhcGVyX2FwaS5JbnNlcnRNZWRpYShmcGF0aCwgMCkKICAgICAgICByZXR1cm4gZnBhdGgKCgpjbGFzcyBSZWFwZXJNaWRpUmh5dGhtTG9hZGVyKEJTTWlkaVJoeXRobUxvYWRlcik6CiAgICBTT1VSQ0VfTkFNRSA9ICJSZWFwZXIgTUlESSBtZWRpYSBpdGVtIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnB1dF90cmFjaz1Ob25lKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLl9pbnB1dF90cmFjayA9IGlucHV0X3RyYWNrCgogICAgZGVmIHNldF9pbnB1dF90cmFjayhzZWxmLCB0cmFja19pZCk6CiAgICAgICAgc2VsZi5faW5wdXRfdHJhY2sgPSB0cmFja19pZAoKICAgIGRlZiBpc19hdmFpbGFibGUoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX2lucHV0X3RyYWNrIGlzIG5vdCBOb25lCgogICAgIyBub2luc3BlY3Rpb24gUHlVbmJvdW5kTG9jYWxWYXJpYWJsZQogICAgZGVmIF9fbG9hZF9fKHNlbGYsIHJoeXRobV9yZXNvbHV0aW9uOiBpbnQsCiAgICAgICAgICAgICAgICAgbWFwcGluZ19yZWR1Y2VyOiB0cC5PcHRpb25hbFt0cC5UeXBlW01pZGlEcnVtTWFwcGluZ1JlZHVjZXJdXSkgLT4gTWlkaVJoeXRobToKICAgICAgICB0cmFjayA9IHNlbGYuX2lucHV0X3RyYWNrCgogICAgICAgIHdpdGggUmVhcGVyQXBpIGFzIGFwaToKICAgICAgICAgICAgdHJhY2tfbmFtZSA9IFJlYXBlclV0aWxzLmdldF90cmFja19uYW1lKGFwaSwgdHJhY2spCgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBmaXJzdF9zZWxlY3RlZF9pdGVtID0gbmV4dChSZWFwZXJVdGlscy5zZWxlY3RlZF9pdGVtc19vbl90cmFja19pdGVyKGFwaSwgdHJhY2spKQogICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKICAgICAgICAgICAgICAgIGZpcnN0X3NlbGVjdGVkX2l0ZW0gPSBOb25lCgogICAgICAgICAgICBpZiBmaXJzdF9zZWxlY3RlZF9pdGVtIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgbWVkaWFfdGFrZSA9IGFwaS5HZXRNZWRpYUl0ZW1UYWtlKGZpcnN0X3NlbGVjdGVkX2l0ZW0sIDApCiAgICAgICAgICAgICAgICBtZWRpYV90YWtlX25hbWUgPSBhcGkuR2V0U2V0TWVkaWFJdGVtVGFrZUluZm9fU3RyaW5nKG1lZGlhX3Rha2UsICJQX05BTUUiLCAwLCBGYWxzZSlbM10KICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gYXBpLlJQUl9HZXRNZWRpYUl0ZW1JbmZvX1ZhbHVlKGZpcnN0X3NlbGVjdGVkX2l0ZW0sICJEX1BPU0lUSU9OIikKICAgICAgICAgICAgICAgIHRpbWVfc2lnbmF0dXJlID0gUmVhcGVyVXRpbHMuZ2V0X3RpbWVfc2lnbmF0dXJlX2F0X3RpbWUoYXBpLCBwb3NpdGlvbikKICAgICAgICAgICAgICAgIGJwbSA9IFJlYXBlclV0aWxzLmdldF90ZW1wb19hdF90aW1lKGFwaSwgcG9zaXRpb24pCgogICAgICAgICAgICAgICAgbWlkaV9yZXNvbHV0aW9uID0gUmVhcGVyVXRpbHMuZ2V0X21pZGlfcmVzb2x1dGlvbihhcGksIG1lZGlhX3Rha2UpCiAgICAgICAgICAgICAgICBtaWRpX25vdGVzID0gdHVwbGUoUmVhcGVyVXRpbHMubWlkaV9ub3RlX2l0ZXIoYXBpLCBtZWRpYV90YWtlKSkKCiAgICAgICAgIyBOb3RlOiByYWlzZSBvdXRzaWRlIFJlYXBlckFwaSBjb250ZXh0LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBjYXVnaHQgYnkgYmV5b25kLlJlYXBlcgogICAgICAgIGlmIGZpcnN0X3NlbGVjdGVkX2l0ZW0gaXMgTm9uZToKICAgICAgICAgICAgcmFpc2Ugc2VsZi5Mb2FkaW5nRXJyb3IoIlBsZWFzZSBzZWxlY3QgYSBtZWRpYSBpdGVtIG9uIHRyYWNrIFwiJXNcIiIgJSB0cmFja19uYW1lKQoKICAgICAgICBtaWRpX3RyYWNrID0gbWlkaS5UcmFjayh0aWNrX3JlbGF0aXZlPUZhbHNlKSAgIyBjcmVhdGUgdHJhY2sgYW5kIGFkZCBtZXRhZGF0YSBldmVudHMKCiAgICAgICAgIyBhZGQgbWV0YSBkYXRhCiAgICAgICAgbWlkaV90cmFjay5hcHBlbmQobWlkaS5UcmFja05hbWVFdmVudCh0ZXh0PW1lZGlhX3Rha2VfbmFtZSkpCiAgICAgICAgbWlkaV90cmFjay5hcHBlbmQobWlkaS5TZXRUZW1wb0V2ZW50KGJwbT1icG0pKQogICAgICAgIG1pZGlfdHJhY2suYXBwZW5kKHRpbWVfc2lnbmF0dXJlLnRvX21pZGlfZXZlbnQoKSkKCiAgICAgICAgIyBhZGQgbm90ZSBvbi9vZmYgZXZlbnRzCiAgICAgICAgZm9yIG5vdGUgaW4gbWlkaV9ub3RlczoKICAgICAgICAgICAgaWYgbm90ZS5tdXRlZDoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIG1pZGlfdHJhY2suZXh0ZW5kKG5vdGUudG9fbWlkaV9ldmVudF9wYWlyKCkpCgogICAgICAgICMgc29ydCB0aGUgZXZlbnRzIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIgYW5kIGNvbnZlcnQgdG8gcmVsYXRpdmUgZGVsdGEtdGltZQogICAgICAgIG1pZGlfdHJhY2sgPSBtaWRpLlRyYWNrKHNvcnRlZChtaWRpX3RyYWNrLCBrZXk9bGFtYmRhIGV2ZW50OiBldmVudC50aWNrKSwgdGlja19yZWxhdGl2ZT1GYWxzZSkKICAgICAgICBtaWRpX3RyYWNrLm1ha2VfdGlja3NfcmVsKCkKCiAgICAgICAgIyBhZGQgZW5kIG9mIHRyYWNrIGV2ZW50CiAgICAgICAgbWlkaV90cmFjay5hcHBlbmQobWlkaS5FbmRPZlRyYWNrRXZlbnQoKSkKCiAgICAgICAgIyBjcmVhdGUgbWlkaSBwYXR0ZXJuCiAgICAgICAgbWlkaV9wYXR0ZXJuID0gbWlkaS5QYXR0ZXJuKAogICAgICAgICAgICBbbWlkaV90cmFja10sCiAgICAgICAgICAgIGZvcm1hdD0wLAogICAgICAgICAgICByZXNvbHV0aW9uPW1pZGlfcmVzb2x1dGlvbgogICAgICAgICkKCiAgICAgICAgcmh5dGhtID0gTWlkaVJoeXRobShtaWRpX3BhdHRlcm49bWlkaV9wYXR0ZXJuLCBuYW1lPW1lZGlhX3Rha2VfbmFtZSwgbWlkaV9tYXBwaW5nX3JlZHVjZXJfY2xzPW1hcHBpbmdfcmVkdWNlcikKICAgICAgICByaHl0aG0uc2V0X3Jlc29sdXRpb24ocmh5dGhtX3Jlc29sdXRpb24pCgogICAgICAgIHJldHVybiByaHl0aG0KCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBnZXRfc291cmNlX25hbWUoY2xzKToKICAgICAgICByZXR1cm4gY2xzLlNPVVJDRV9OQU1FCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgpjbGFzcyBSZWFwZXJVdGlsczoKCjx8ZmltX2VuZHw+"]
["a0a5deca778a6ba0e31a53451213eea560c1e4c7-2","a0a5deca778a6ba0e31a53451213eea560c1e4c7","PHxmaW1fcHJlZml4fD4KZnJvbSBmYXN0YXBpIGltcG9ydCBBUElSb3V0ZXIsIERlcGVuZHMKZnJvbSBmYXN0YXBpLnJlc3BvbnNlcyBpbXBvcnQgRmlsZVJlc3BvbnNlCmZyb20gc3FsYWxjaGVteS5vcm0uc2Vzc2lvbiBpbXBvcnQgU2Vzc2lvbgpmcm9tIGFwcC5hcGkucHJvZHVjdHMuc2NoZW1hIGltcG9ydCBQcm9kdWN0RGF0YVBhcmFtcwpmcm9tIGFwcC5hcGkucHJvZHVjdHMudGltZXNlcmllc19wbG90LnNjaGVtYSBpbXBvcnQgVGltZXNlcmllc1Bsb3RQYXJhbXMKZnJvbSBhcHAuZGIgaW1wb3J0IGdldF9zZXNzaW9uCmZyb20gYXBwLnNlcnZpY2VzLnRpbWVzZXJpZXNfcGxvdCBpbXBvcnQgdGltZXNlcmllc19wbG90X2NyZWF0ZQpmcm9tIGFwcC51dGlscy5wcm9kdWN0X2RhdGEgaW1wb3J0IGdlbmVyYXRlUHJvZHVjdERhdGEKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CnJvdXRlciA9IEFQSVJvdXRlcigpCgoKQCByb3V0ZXIucG9zdCgiLyIsIHJlc3BvbnNlX2NsYXNzPUZpbGVSZXNwb25zZSkKPHxmaW1fZW5kfD4="]
["3e08f3479d87cfe23c7782b58b6a86b435a17e88-4","3e08f3479d87cfe23c7782b58b6a86b435a17e88","PHxmaW1fcHJlZml4fD4KZnJvbSBiaWJsaW9waXhlbC5hbmltYXRpb24uY2lyY2xlIGltcG9ydCBDaXJjbGUKZnJvbSBiaWJsaW9waXhlbC5jb2xvcnMgaW1wb3J0IENPTE9SUwoKCmNsYXNzIFBpbldoZWVsKENpcmNsZSk6CiAgICBDT0xPUl9ERUZBVUxUUyA9ICgnY29sb3JzJywgW0NPTE9SUy5SZWQsIENPTE9SUy5HcmVlbiwgQ09MT1JTLkJsdWVdKSwKCiAgICBkZWYgX19pbml0X18oc2VsZiwgbGF5b3V0LCAqKmt3ZHMpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18obGF5b3V0LCAqKmt3ZHMpCiAgICAgICAgc2VsZi5zZXBEZWdyZWVzID0gMzYwLjAgLyBsZW4oc2VsZi5wYWxldHRlKQo8fGZpbV9ob2xlfD4KICAgIGRlZiBzdGVwKHNlbGYsIGFtdD0xKToKICAgICAgICBzZWxmLmxheW91dC5hbGxfb2ZmKCkKICAgICAgICBmb3IgciBpbiByYW5nZSgwLCBzZWxmLnJpbmdDb3VudCk6CiAgICAgICAgICAgIGZvciBjLCBjb2xvciBpbiBlbnVtZXJhdGUoc2VsZi5wYWxldHRlKToKICAgICAgICAgICAgICAgIHNlbGYubGF5b3V0LmZpbGxSaW5nKHIsIGNvbG9yLCBzdGFydEFuZ2xlPSgKICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcERlZ3JlZXMgKiBjKSArIHNlbGYuX3N0ZXAsIGVuZEFuZ2xlPShzZWxmLnNlcERlZ3JlZXMgKiBjKSArIHNlbGYuc2VwRGVncmVlcyArIHNlbGYuX3N0ZXApCgogICAgICAgIHNlbGYuX3N0ZXAgKz0gYW10CiAgICAgICAgc2VsZi5fc3RlcCAlPSAzNjAKPHxmaW1fc3VmZml4fD4KCiAgICBkZWYgcHJlX3J1bihzZWxmKToKICAgICAgICBzZWxmLl9zdGVwID0gMAoKPHxmaW1fZW5kfD4="]
["f83e2c10c3840d624d9fd91b236f865f6982daed-2","f83e2c10c3840d624d9fd91b236f865f6982daed","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKCmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCmRlZiBjcmVhdGVfcGFyc2VyKGV4Y2hhbmdlOiBzdHIsIGlzX2NwcDogYm9vbCk6CiAgICBpZiBpc19jcHA6CiAgICAgICAgZnJvbSBpbXBvcnRsaWIgaW1wb3J0IHV0aWwKCiAgICAgICAgc3NjMmNlX2NwcF9zcGVjID0gdXRpbC5maW5kX3NwZWMoInNzYzJjZV9jcHAiKQogICAgICAgIGlmIHNzYzJjZV9jcHBfc3BlYyBpcyBOb25lOgogICAgICAgICAgICBsb2dnZXIuZXJyb3IoIllvdSBtdXN0IGluc3RhbGwgdGhlIHNzYzJjZV9jcHAgbW9kdWxlIHRvIHVzZSBpdHMgZmVhdHVyZXMuXG4gcGlwIGluc3RhbGwgc3NjMmNlX2NwcCIpCiAgICAgICAgICAgIHJldHVybiBOb25lCgogICAgICAgIGlmIGV4Y2hhbmdlID09ICdkZXJpYml0JzoKICAgICAgICAgICAgZnJvbSBzc2MyY2VfY3BwIGltcG9ydCBEZXJpYml0UGFyc2VyIGFzIFBhcnNlcgogICAgICAgIGVsaWYgZXhjaGFuZ2UgPT0gJ2NvaW5iYXNlJzoKICAgICAgICAgICAgZnJvbSBzc2MyY2VfY3BwIGltcG9ydCBDb2luYmFzZVBhcnNlciBhcyBQYXJzZXIKICAgICAgICBlbGlmIGV4Y2hhbmdlID09ICdjZXgnOgogICAgICAgICAgICBmcm9tIHNzYzJjZV9jcHAgaW1wb3J0IENleFBhcnNlciBhcyBQYXJzZXIKICAgICAgICBlbHNlOgogICAgICAgICAgICBsb2dnZXIuZXJyb3IoZiJVbmtub3duIGV4Y2hhbmdlIHtleGNoYW5nZX0iKQogICAgICAgICAgICByZXR1cm4gTm9uZQogICAgZWxzZToKICAgICAgICBpZiBleGNoYW5nZSA9PSAnZGVyaWJpdCc6CiAgICAgICAgICAgIGZyb20gc3NjMmNlLmRlcmliaXQucGFyc2VyIGltcG9ydCBEZXJpYml0UGFyc2VyIGFzIFBhcnNlcgogICAgICAgIGVsaWYgZXhjaGFuZ2UgPT0gJ2NvaW5iYXNlJzoKICAgICAgICAgICAgZnJvbSBzc2MyY2UuY29pbmJhc2VfcHJvLnBhcnNlciBpbXBvcnQgQ29pbmJhc2VQYXJzZXIgYXMgUGFyc2VyCiAgICAgICAgZWxpZiBleGNoYW5nZSA9PSAnY2V4JzoKICAgICAgICAgICAgZnJvbSBzc2MyY2UuY2V4LnBhcnNlciBpbXBvcnQgQ2V4UGFyc2VyIGFzIFBhcnNlcgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZWxzZToKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGYiVW5rbm93biBleGNoYW5nZSB7ZXhjaGFuZ2V9IikKICAgICAgICAgICAgcmV0dXJuIE5vbmUKCjx8ZmltX2VuZHw+"]
["f8651594da4df544027f9e2ed0e2eac0ee2bd78c-4","f8651594da4df544027f9e2ed0e2eac0ee2bd78c","PHxmaW1fcHJlZml4fD4KIiIicGxhY2Vob2xkZXIKClJldmlzaW9uIElEOiA1NzUzOTcyMmU1Y2YKUmV2aXNlczogYzFiNWFiYWRhMDljCkNyZWF0ZSBEYXRlOiAyMDE5LTEyLTAzIDAwOjU1OjE2LjAxMjI0NwoKIiIiCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgcmV2aXNpb24gaWRlbnRpZmllcnMsIHVzZWQgYnkgQWxlbWJpYy4KcmV2aXNpb24gPSAnNTc1Mzk3MjJlNWNmJwpkb3duX3JldmlzaW9uID0gJ2MxYjVhYmFkYTA5YycKCjx8ZmltX2VuZHw+"]
["9389987b6d4302e73279320a321194a1f488fb0c-3","9389987b6d4302e73279320a321194a1f488fb0c","PHxmaW1fcHJlZml4fD4KIyBCU0QgMy1DbGF1c2UgTGljZW5zZTsgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcGl2YXJza2kvYXdrd2FyZC0xLjAvYmxvYi9tYXN0ZXIvTElDRU5TRQoKaW1wb3J0IGdsb2IKaW1wb3J0IG9zCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IHBsYXRmb3JtCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCBzeXMKaW1wb3J0IGRpc3R1dGlscy51dGlsCjx8ZmltX2VuZHw+"]
["5f35149b76837d8e9556ad52b32d79f7a2e2ff91-1","5f35149b76837d8e9556ad52b32d79f7a2e2ff91","PHxmaW1fcHJlZml4fD4KZGVmIGF1bWVudGFyKHA9MCwgdGF4YT0wKToKICAgIHIgPSBwICsgKHAgKiB0YXhhIC8gMTAwKQogICAgcmV0dXJuIHIKCgpkZWYgZGltaW51aXIocD0wLCB0YXhhPTApOgogICAgciA9IHAgLSAocCAqIHRheGEgLyAxMDApCiAgICByZXR1cm4gcgoKCmRlZiBkb2JybyhwPTApOgogICAgcmV0dXJuIHAgKiAyCgoKZGVmIG1ldGFkZShwPTApOgogICAgcmV0dXJuIHAgLyAyCgoKZGVmIG1vZWRhKHA9MCwgbW9lZGE9J1IkJyk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHJldHVybiBmJ3ttb2VkYX0ge3A6Pi4yZn0nLnJlcGxhY2UoJy4nLCAnLCcpCjx8ZmltX2VuZHw+"]
["275e1e4e72b6fc10921cbba2117dd3015473a0ad-5","275e1e4e72b6fc10921cbba2117dd3015473a0ad","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQsIHByaW50X2Z1bmN0aW9uLCBkaXZpc2lvbgpmcm9tIHNpeC5tb3ZlcyBpbXBvcnQgcmFuZ2UKCmltcG9ydCBjb2xsZWN0aW9ucwppbXBvcnQgc3lzCgppbXBvcnQgbnVtcHkgYXMgbnAKCmltcG9ydCBtYXRwbG90bGliCm1hdHBsb3RsaWIudXNlKCdBZ2cnKQoKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgbWF0cGxvdGxpYi50aWNrZXIgYXMgdGlja2VyCmltcG9ydCBtYXRwbG90bGliLnBhdGNoZXMgYXMgcGF0Y2hlcwoKCl8sIGZpbGVuYW1lID0gc3lzLmFyZ3YKCnJlY29yZHMgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsaXN0KQoKd2l0aCBvcGVuKGZpbGVuYW1lKSBhcyBmOgogICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKICAgICAgICBpZiAnSWdub3JpbmcgcHJlY2lzaW9uJyBpbiBsaW5lOgogICAgICAgICAgICBjb250aW51ZSAgIyBpZ25vcmUgd2FybmluZ3MKICAgICAgICBmb3JtLCBkaW0sIGZjLCB0aW1lLCBzaXplID0gbGluZS5zcGxpdCgpCiAgICAgICAgcmVjb3Jkc1soZm9ybSwgaW50KGRpbSksIGZjKV0uYXBwZW5kKGZsb2F0KHRpbWUpKQoKCmRlZiBzZWxlY3QoZm9ybSwgZGltLCBmYyk6CiAgICByZXR1cm4gcmVjb3Jkc1soZm9ybSwgZGltLCBmYyldCgoKPHxmaW1faG9sZXw+CiAgICB0aWNrcyA9IFsnZmRcX2JlbmR5JywgJ3F1YWRyYXR1cmUnLCAnVUZMQUNTJywgJ1RTRkMkXlxkYWdnZXIkJywgJ1RTRkMnXQoKICAgIGlmIHJpZ2h0X2NsdXR0ZXI6CiAgICAgICAgdHdpbnggPSBheGVzLnR3aW54KCkKICAgICAgICB0d2lueC5nZXRfeWF4aXMoKS5zZXRfdGlja3MoW10pCiAgICAgICAgbCA9IHR3aW54LnNldF95bGFiZWwoJy0nLmpvaW4ocGFydC5jYXBpdGFsaXplKCkgZm9yIHBhcnQgaW4gZm9ybS5zcGxpdCgnXycpKSwgcm90YXRpb249LTkwLCB2YT0nYm90dG9tJykKICAgICAgICB0d2lueC5zcGluZXNbJ3RvcCddLnNldF92aXNpYmxlKEZhbHNlKQogICAgICAgIHR3aW54LnNwaW5lc1snbGVmdCddLnNldF92aXNpYmxlKEZhbHNlKQogICAgICAgIHR3aW54LnNwaW5lc1sncmlnaHQnXS5zZXRfdmlzaWJsZShGYWxzZSkKICAgICAgICB0d2lueC5zcGluZXNbJ2JvdHRvbSddLnNldF92aXNpYmxlKEZhbHNlKQoKICAgIGlmIHRvcF9jbHV0dGVyOgogICAgICAgIGF4ZXMuc2V0X3RpdGxlKCJ7fUQiLmZvcm1hdChkaW0pKQoKICAgIGF4ZXMuc2V0X3hsaW0oeG1pbj0wLjUsIHhtYXg9bGVuKHRpY2tzKSswLjUpCiAgICBheGVzLmdldF94YXhpcygpLnNldF90aWNrcyhsaXN0KHJhbmdlKDEsIGxlbih0aWNrcykrMSkpKQogICAgaWYgYm90dG9tX2NsdXR0ZXI6CiAgICAgICAgYXhlcy5nZXRfeGF4aXMoKS5zZXRfdGlja2xhYmVscyh0aWNrcywgcm90YXRpb249NDApCiAgICBlbHNlOgogICAgICAgIGF4ZXMuZ2V0X3hheGlzKCkuc2V0X3RpY2tsYWJlbHMoW10pCiAgICBheGVzLnlheGlzLmdyaWQoVHJ1ZSwgbGluZXN0eWxlPSdkb3R0ZWQnKQoKICAgIGF4ZXMuc3BpbmVzWyd0b3AnXS5zZXRfdmlzaWJsZShGYWxzZSkKICAgIGF4ZXMuc3BpbmVzWydyaWdodCddLnNldF92aXNpYmxlKEZhbHNlKQoKICAgIGF4ZXMuc2V0X3lzY2FsZSgibG9nIikKICAgIGF4ZXMuc2V0X3lsaW0oeW1pbj0xZS0xLCB5bWF4PTFlMykKICAgIGlmIGxlZnRfY2x1dHRlcjoKICAgICAgICBkZWYgbXlMb2dGb3JtYXQoeSwgcG9zKToKICAgICAgICAgICAgIyBGaW5kIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgcmVxdWlyZWQKICAgICAgICAgICAgZGVjaW1hbHBsYWNlcyA9IGludChucC5tYXhpbXVtKC1ucC5sb2cxMCh5KSwgMCkpICAjID0wIGZvciBudW1iZXJzID49MQogICAgICAgICAgICAjIEluc2VydCB0aGF0IG51bWJlciBpbnRvIGEgZm9ybWF0IHN0cmluZwogICAgICAgICAgICBmb3JtYXRzdHJpbmcgPSAne3s6Lns6MWR9Zn19Jy5mb3JtYXQoZGVjaW1hbHBsYWNlcykKICAgICAgICAgICAgIyBSZXR1cm4gdGhlIGZvcm1hdHRlZCB0aWNrIGxhYmVsCiAgICAgICAgICAgIHJldHVybiBmb3JtYXRzdHJpbmcuZm9ybWF0KHkpCiAgICAgICAgYXhlcy55YXhpcy5zZXRfbWFqb3JfZm9ybWF0dGVyKHRpY2tlci5GdW5jRm9ybWF0dGVyKG15TG9nRm9ybWF0KSkKICAgIGVsc2U6CiAgICAgICAgYXhlcy55YXhpcy5zZXRfbWFqb3JfZm9ybWF0dGVyKHRpY2tlci5GdW5jRm9ybWF0dGVyKGxhbWJkYSB4LCBwb3M6ICIiKSkKCiAgICBmb3IgaSwgZmMgaW4gZW51bWVyYXRlKFsnZmZjLW5vbmFmZmluZScsICdxdWFkcmF0dXJlJywgJ3VmbGFjcycsICd0c2ZjcmVwcicsICd0c2ZjLWRlZmF1bHQnXSk6CiAgICAgICAgdGltZXMgPSBzZWxlY3QoZm9ybSwgZGltLCBmYykKICAgICAgICBpZiBub3QgdGltZXM6CiAgICAgICAgICAgIGF4ZXMuYWRkX3BhdGNoKHBhdGNoZXMuUmVjdGFuZ2xlKChpKzAuNSwgMC4xKSwgMSwgOTk5Ljk5LCBmYWNlY29sb3I9J2dyYXknLCBhbHBoYT0wLjUsIGVkZ2Vjb2xvcj0ibm9uZSIpKQogICAgICAgICAgICBjb250aW51ZQoKICAgICAgICB2cCA9IGF4ZXMudmlvbGlucGxvdChbdGltZXNdLCBwb3NpdGlvbnM9W2krMV0sIHNob3dtZWRpYW5zPVRydWUsIHNob3dleHRyZW1hPUZhbHNlKQogICAgICAgIHZwWydjbWVkaWFucyddLnNldF9jb2xvcignYmxhY2snKQogICAgICAgIGZvciBwYyBpbiB2cFsnYm9kaWVzJ106CiAgICAgICAgICAgIHBjLnNldF9lZGdlY29sb3IoJ2JsYWNrJykKICAgICAgICAgICAgcGMuc2V0X2ZhY2Vjb2xvcignZ3JheScpCgpwbHQucmMoJ3RleHQnLCB1c2V0ZXg9VHJ1ZSkKcGx0LnJjKCdmb250JywgZmFtaWx5PSdzZXJpZicsIHNpemU9JzEwJykKCmZpZyA9IHBsdC5maWd1cmUoZmlnc2l6ZT0oNC44LCA3LjQpKQpwbG90KCdoZWxtaG9sdHonLCAyLCBmaWcuYWRkX3N1YnBsb3QoNDIxKSwgcmlnaHRfY2x1dHRlcj1GYWxzZSwgdG9wX2NsdXR0ZXI9VHJ1ZSkKcGxvdCgnaGVsbWhvbHR6JywgMywgZmlnLmFkZF9zdWJwbG90KDQyMiksIGxlZnRfY2x1dHRlcj1GYWxzZSwgdG9wX2NsdXR0ZXI9VHJ1ZSkKcGxvdCgnZWxhc3RpY2l0eScsIDIsIGZpZy5hZGRfc3VicGxvdCg0MjMpLCByaWdodF9jbHV0dGVyPUZhbHNlKQpwbG90KCdlbGFzdGljaXR5JywgMywgZmlnLmFkZF9zdWJwbG90KDQyNCksIGxlZnRfY2x1dHRlcj1GYWxzZSkKcGxvdCgnaHlwZXJlbGFzdGljaXR5JywgMiwgZmlnLmFkZF9zdWJwbG90KDQyNSksIHJpZ2h0X2NsdXR0ZXI9RmFsc2UpCnBsb3QoJ2h5cGVyZWxhc3RpY2l0eScsIDMsIGZpZy5hZGRfc3VicGxvdCg0MjYpLCBsZWZ0X2NsdXR0ZXI9RmFsc2UpCnBsb3QoJ2hvbHphcGZlbF9vZ2RlbicsIDIsIGZpZy5hZGRfc3VicGxvdCg0MjcpLCByaWdodF9jbHV0dGVyPUZhbHNlLCBib3R0b21fY2x1dHRlcj1UcnVlKQpwbG90KCdob2x6YXBmZWxfb2dkZW4nLCAzLCBmaWcuYWRkX3N1YnBsb3QoNDI4KSwgbGVmdF9jbHV0dGVyPUZhbHNlLCBib3R0b21fY2x1dHRlcj1UcnVlKQpmaWcudGlnaHRfbGF5b3V0KCkKc3AgPSBmaWcuYWRkX3N1YnBsb3QoMTExLCBmcmFtZW9uPUZhbHNlKQpzcC5nZXRfeGF4aXMoKS5zZXRfdmlzaWJsZShGYWxzZSkKc3AuZ2V0X3lheGlzKCkuc2V0X3RpY2tzKFtdKQpzcC5zZXRfeWxhYmVsKCJGb3JtIGNvbXBpbGF0aW9uIHRpbWUgWyRzJF0iLCBsYWJlbHBhZD00MCkKIyBmaWcuc2hvdygpCmZpZy5zYXZlZmlnKCJleGFtcGxlLnBnZiIsIGJib3hfaW5jaGVzPSd0aWdodCcpCjx8ZmltX3N1ZmZpeHw+CmRlZiBwbG90KGZvcm0sIGRpbSwgYXhlcz1Ob25lLCBsZWZ0X2NsdXR0ZXI9VHJ1ZSwgcmlnaHRfY2x1dHRlcj1UcnVlLCB0b3BfY2x1dHRlcj1GYWxzZSwgYm90dG9tX2NsdXR0ZXI9RmFsc2UpOgogICAgaWYgYXhlcyBpcyBOb25lOgogICAgICAgIGF4ZXMgPSBwbHQuYXhlcygpCgo8fGZpbV9lbmR8Pg=="]
["a06691ff4649565d10c618a046ef0255be474b75-1","a06691ff4649565d10c618a046ef0255be474b75","PHxmaW1fcHJlZml4fD4KZnJvbSB2YWx1ZSBpbXBvcnQgQ2FyCgpjYXIxID0gQ2FyKCdrMScsICdyZWQnLCAxMDAwKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmNhcjIgPSBDYXIoJ2syJywgJ2JsYWNrJywgMjAwMCkKCnByaW50KGNhcjEpCnByaW50KGNhcjIpCjx8ZmltX2VuZHw+"]
["3e477cf6f70d63532251fae8143b1eae072b7dbe-3","3e477cf6f70d63532251fae8143b1eae072b7dbe","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIwojICAgICAgRmlsZTogY29uZmlnLnB5CiMgICBQcm9qZWN0OiBsYW9zaGlzeW5jCiMgICAgQXV0aG9yOiBYaWUgV2FuZ3lpCiMKIyAgIENvcHlyaWdodCAoYykgMjAxNyBMYW9zaGlzaHVvLiBBbGwgcmlnaHRzIHJlc2VydmVkLgppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCB0aW1lCgppbXBvcnQgcmVxdWVzdHMKZnJvbSBjZWxlcnkudXRpbHMubG9nIGltcG9ydCBnZXRfdGFza19sb2dnZXIKCmZyb20gY2VsZXJ5X2FwcCBpbXBvcnQgY2VsZXJ5IGFzIGNlbGVyeWFwcApmcm9tIGNlbGVyeV9jb25maWcgaW1wb3J0IFdPUktJTkdfRElSCgpsb2dnZXIgPSBnZXRfdGFza19sb2dnZXIoX19uYW1lX18pCgoKQGNlbGVyeWFwcC50YXNrKAogICAgYmluZD1UcnVlLAogICAgZGVmYXVsdF9yZXRyeV9kZWxheT0xMCwKICAgIG5hbWU9J2xhb3NoaXN5bmMuaGVsbG9fd29ybGQnKQpkZWYgaGVsbG9fd29ybGQoc2VsZik6CiAgICBsb2dnZXIuaW5mbygnaGVsbG8gd29ybGQhJykKICAgIHJldHVybiBUcnVlCgoKS0VZID0gIkJlYXJlciBleUowZVhBaU9pSktWMVFpTENKaGJHY2lPaUpJVXpJMU5pSjkuZXlKMWMyVnlYMmQiIFwKICAgICAgIjFhV1FpT2lKbFpUQm1aV1V5TVMwNE9ESmhMVFEwTVRVdFlqWTFaUzA0TkdReU56RmtabUprT0ciIFwKICAgICAgIk1pTENKcGMzTWlPaUpzYjJkcGJpMWhjR2t0ZGpFaUxDSmxlSEFpT2pFMU16RXpPRGd3TWpJc0kiIFwKICAgICAgIm01aVppSTZNVFE1T1RnMU1qQXlNbjAuYkxVY1o1MVFPUlI3Tno0MEZ4NnZZM2kxVDhOSTdsQ28iIFwKICAgICAgIldCNDd5TE02V3BFIgoKCkBjZWxlcnlhcHAudGFzaygKICAgIGJpbmQ9VHJ1ZSwKICAgIGRlZmF1bHRfcmV0cnlfZGVsYXk9MTAsCiAgICBuYW1lPSdsYW9zaGlzeW5jLmNyYXdsX21vbWVudHVtJykKZGVmIGNyYXdsX21vbWVudHVtKHNlbGYpOgogICAgaGlzdG9yeV9saXN0ID0ganNvbi5sb2FkcygKICAgICAgICByZXF1ZXN0cy5nZXQoJ2h0dHBzOi8vYXBpLm1vbWVudHVtZGFzaC5jb20vYmFja2dyb3VuZHMvaGlzdG9yeScsCiAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM9ZGljdChhdXRob3JpemF0aW9uPUtFWSkpLmNvbnRlbnQpCgogICAgZm9yIGIgaW4gaGlzdG9yeV9saXN0WydoaXN0b3J5J106CiAgICAgICAgZmlsZV9uYW1lID0gdSd7fSAtIG1vbWVudHVtIC0ge30gLSB7fS5qcGcnLmZvcm1hdChiWydkaXNwbGF5X2RhdGUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJbJ3RpdGxlJ10ucmVwbGFjZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLycsICctJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiWydzb3VyY2UnXS5yZXBsYWNlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvJywgJy0nKSkKICAgICAgICBmdWxsX2ZpbGVfbmFtZSA9IG9zLnBhdGguam9pbih1bmljb2RlKFdPUktJTkdfRElSKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1J2xhb3NoaV9zeW5jX2luYm94JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWUpCiAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZnVsbF9maWxlX25hbWUpOgogICAgICAgICAgICBsb2dnZXIuaW5mbyhmaWxlX25hbWUgKyB1JyBhbHJlYWR5IGV4c2l0cy4nKQogICAgICAgICAgICBjb250aW51ZQogICAgICAgIHVybCA9IGJbJ3ByZXZpZXdfdXJsJ10KICAgICAgICBvcGVuKGZ1bGxfZmlsZV9uYW1lLCAid2IiKS5jbG9zZSgpICAjIGNyZWF0ZSB0aGUgZmlsZSBhcyBtdXRleCBzaWduYWwKICAgICAgICBsb2dnZXIuaW5mbyh1J0Rvd25sb2FkaW5nICJ7fSInLmZvcm1hdChmaWxlX25hbWUpKQogICAgICAgIHRyeToKICAgICAgICAgICAgciA9IHJlcXVlc3RzLmdldCh1cmwsIHN0cmVhbT1UcnVlKQogICAgICAgICAgICBpZiByLnN0YXR1c19jb2RlID09IDIwMDoKICAgICAgICAgICAgICAgIHdpdGggb3BlbihmdWxsX2ZpbGVfbmFtZSwgJ3diJykgYXMgZjoKICAgICAgICAgICAgICAgICAgICBmb3IgY2h1bmsgaW4gcjoKICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShjaHVuaykKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ0h0dHAgcmV0dXJuIG5vdCAyMDAse30se30nLmZvcm1hdChyLnN0YXR1c19jb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZSkpCiAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHJlcHIoZSkpCiAgICAgICAgICAgIG9zLnJlbW92ZShmdWxsX2ZpbGVfbmFtZSkKCiAgICBsb2dnZXIuaW5mbygnY3Jhd2xfbW9tZW50dW0gRmluaXNoZWQhJykKICAgIHJldHVybiBUcnVlCgoKQGNlbGVyeWFwcC50YXNrKAogICAgYmluZD1UcnVlLAogICAgZGVmYXVsdF9yZXRyeV9kZWxheT0xMCwKICAgIG5hbWU9J2xhb3NoaXN5bmMuY3Jhd2xfbW9tZW50dW1fcXVvdGUnKQpkZWYgY3Jhd2xfbW9tZW50dW1fcXVvdGUoc2VsZik6CiAgICB0b2RheSA9IGRhdGV0aW1lLmRhdGUudG9kYXkoKQoKICAgIGZvciBpIGluIHJhbmdlKDMwKToKICAgICAgICBkYXRlID0gKHRvZGF5ICsgZGF0ZXRpbWUudGltZWRlbHRhKGRheXM9LWkpKS5zdHJmdGltZSgnJVktJW0tJWQnKQogICAgICAgIGZpbGVfbmFtZSA9IHUne30gLSBtb21lbnR1bV9xdW90ZS50eHQnLmZvcm1hdChkYXRlKQoKICAgICAgICBmdWxsX2ZpbGVfbmFtZSA9IG9zLnBhdGguam9pbih1bmljb2RlKFdPUktJTkdfRElSKSwKPHxmaW1faG9sZXw+CiAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZnVsbF9maWxlX25hbWUpOgogICAgICAgICAgICBsb2dnZXIuaW5mbyhmaWxlX25hbWUgKyB1JyBhbHJlYWR5IGV4c2l0cy4nKQogICAgICAgICAgICBjb250aW51ZQogICAgICAgIG9wZW4oZnVsbF9maWxlX25hbWUsICJ3YiIpLmNsb3NlKCkgICMgY3JlYXRlIHRoZSBmaWxlIGFzIG11dGV4IHNpZ25hbAogICAgICAgIGxvZ2dlci5pbmZvKHUnRG93bmxvYWRpbmcgInt9IicuZm9ybWF0KGZpbGVfbmFtZSkpCiAgICAgICAgdHJ5OgogICAgICAgICAgICByID0gcmVxdWVzdHMuZ2V0KAogICAgICAgICAgICAgICAgJ2h0dHBzOi8vYXBpLm1vbWVudHVtZGFzaC5jb20vZmVlZC9idWxrPycKICAgICAgICAgICAgICAgICdzeW5jVHlwZXM9cXVvdGUmbG9jYWxEYXRlPXt9Jy5mb3JtYXQoZGF0ZSksCiAgICAgICAgICAgICAgICBoZWFkZXJzPWRpY3QoYXV0aG9yaXphdGlvbj1LRVkpKQogICAgICAgICAgICBpZiByLnN0YXR1c19jb2RlID09IDIwMDoKICAgICAgICAgICAgICAgIHJlc19qc29uID0gci5qc29uKClbJ3F1b3RlcyddWzBdCiAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZnVsbF9maWxlX25hbWUsICd3JykgYXMgZjoKICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHUne30gXHJcbiAtLSBCeSB7fScuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICByZXNfanNvblsnYm9keSddLAogICAgICAgICAgICAgICAgICAgICAgICByZXNfanNvblsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb3VyY2UnXSkuZW5jb2RlKCd1dGYtOCcpKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignSHR0cCByZXR1cm4gbm90IDIwMCx7fSx7fScuZm9ybWF0KHIuc3RhdHVzX2NvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lKSkKICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgogICAgICAgICAgICBsb2dnZXIuZXJyb3IocmVwcihlKSkKICAgICAgICAgICAgb3MucmVtb3ZlKGZ1bGxfZmlsZV9uYW1lKQoKICAgIGxvZ2dlci5pbmZvKCdjcmF3bF9tb21lbnR1bV9xdW90ZSBGaW5pc2hlZCEnKQogICAgcmV0dXJuIFRydWUKCgpAY2VsZXJ5YXBwLnRhc2soCiAgICBiaW5kPVRydWUsCiAgICBkZWZhdWx0X3JldHJ5X2RlbGF5PTEwLAogICAgbmFtZT0nbGFvc2hpc3luYy5jcmF3bF9iaW5nX3dhbGxwYXBlcicpCmRlZiBjcmF3bF9iaW5nX3dhbGxwYXBlcihzZWxmKToKICAgIHRvZGF5ID0gZGF0ZXRpbWUuZGF0ZS50b2RheSgpCgogICAgZm9yIGkgaW4gcmFuZ2UoNyk6CiAgICAgICAgZGF0ZSA9ICh0b2RheSArIGRhdGV0aW1lLnRpbWVkZWx0YShkYXlzPS1pKSkuc3RyZnRpbWUoJyVZLSVtLSVkJykKICAgICAgICBmaWxlX25hbWUgPSB1J3t9IC0gYmluZ193YWxscGFwZXIudHh0Jy5mb3JtYXQoZGF0ZSkKCiAgICAgICAgZnVsbF9maWxlX25hbWUgPSBvcy5wYXRoLmpvaW4odW5pY29kZShXT1JLSU5HX0RJUiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSdsYW9zaGlfc3luY19pbmJveCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lKQogICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZ1bGxfZmlsZV9uYW1lKToKICAgICAgICAgICAgbG9nZ2VyLmluZm8oZmlsZV9uYW1lICsgdScgYWxyZWFkeSBleHNpdHMuJykKICAgICAgICAgICAgY29udGludWUKICAgICAgICBvcGVuKGZ1bGxfZmlsZV9uYW1lLCAid2IiKS5jbG9zZSgpICAjIGNyZWF0ZSB0aGUgZmlsZSBhcyBtdXRleCBzaWduYWwKICAgICAgICB0cnk6CiAgICAgICAgICAgIGxvZ2dlci5pbmZvKHUnRG93bmxvYWRpbmcgInt9IicuZm9ybWF0KGZpbGVfbmFtZSkpCiAgICAgICAgICAgIHdpdGggcmVxdWVzdHMuc2Vzc2lvbigpIGFzIHNlc3M6CiAgICAgICAgICAgICAgICByMSA9IHNlc3MuZ2V0KAogICAgICAgICAgICAgICAgICAgICdodHRwczovL3d3dy5iaW5nLmNvbS9IUEltYWdlQXJjaGl2ZS5hc3B4PycKICAgICAgICAgICAgICAgICAgICAnZm9ybWF0PWpzJmlkeD17fSZuPTEmbmM9e30mcGlkPWhwJmludGxGPSYnCiAgICAgICAgICAgICAgICAgICAgJ3F1aXo9MSZmYXY9MScuZm9ybWF0KGksIHRpbWUudGltZSgpKSwgaGVhZGVycz1kaWN0KAogICAgICAgICAgICAgICAgICAgICAgICBDb29raWU9J19FREdFX1M9bWt0PWVuLXVzJnVpPWVuLXVzJlNJRD0wMDgxQjRFNUNGQkU2MDQwM0E2N0JGRUFDRUFENjFENjsnKSkKICAgICAgICAgICAgICAgIGlmIHIxLnN0YXR1c19jb2RlID09IDIwMDoKICAgICAgICAgICAgICAgICAgICByMV9qc29uID0gcjEuanNvbigpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICdIdHRwIHJldHVybiBub3QgMjAwLHt9LHt9Jy5mb3JtYXQocjEuc3RhdHVzX2NvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lKSkKCiAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZnVsbF9maWxlX25hbWUsICd3JykgYXMgZjoKICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHUne31cclxuJy5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgICAgIHIxX2pzb25bJ2ltYWdlcyddWzBdWydjb3B5cmlnaHQnXSkuZW5jb2RlKCd1dGYtOCcpKQoKICAgICAgICAgICAgICAgIGltYWdlX2ZpbGVfbmFtZSA9IHUne30gLSBiaW5nX3dhbGxwYXBlci5qcGcnLmZvcm1hdChkYXRlKQogICAgICAgICAgICAgICAgZnVsbF9pbWFnZV9maWxlX25hbWUgPSBvcy5wYXRoLmpvaW4odW5pY29kZShXT1JLSU5HX0RJUiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1J2xhb3NoaV9zeW5jX2luYm94JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX2ZpbGVfbmFtZSkKCiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyh1J0Rvd25sb2FkaW5nICJ7fSInLmZvcm1hdChpbWFnZV9maWxlX25hbWUpKQoKICAgICAgICAgICAgICAgIHIgPSBzZXNzLmdldCgKICAgICAgICAgICAgICAgICAgICAnaHR0cHM6Ly93d3cuYmluZy5jb20nICsgcjFfanNvblsnaW1hZ2VzJ11bMF1bJ3VybCddLAogICAgICAgICAgICAgICAgICAgIHN0cmVhbT1UcnVlKQogICAgICAgICAgICAgICAgaWYgci5zdGF0dXNfY29kZSA9PSAyMDA6CiAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGZ1bGxfaW1hZ2VfZmlsZV9uYW1lLCAnd2InKSBhcyBmOgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgY2h1bmsgaW4gcjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoY2h1bmspCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ0h0dHAgcmV0dXJuIG5vdCAyMDAse30se30nLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICAgICAgci5zdGF0dXNfY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfZmlsZV9uYW1lKSkKICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgogICAgICAgICAgICBsb2dnZXIuZXJyb3IocmVwcihlKSkKICAgICAgICAgICAgb3MucmVtb3ZlKGZ1bGxfZmlsZV9uYW1lKQoKICAgIGxvZ2dlci5pbmZvKCdjcmF3bF9iaW5nX3dhbGxwYXBlciBGaW5pc2hlZCEnKQogICAgcmV0dXJuIFRydWUKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1J2xhb3NoaV9zeW5jX2luYm94JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWUpCjx8ZmltX2VuZHw+"]
["dff5779cf647f44388289ba1716275a08973c650-3","dff5779cf647f44388289ba1716275a08973c650","PHxmaW1fcHJlZml4fD4KIyBUaGlzIGlzIGFuIGF1dG8tZ2VuZXJhdGVkIERqYW5nbyBtb2RlbCBtb2R1bGUuCiMgWW91J2xsIGhhdmUgdG8gZG8gdGhlIGZvbGxvd2luZyBtYW51YWxseSB0byBjbGVhbiB0aGlzIHVwOgojICAgKiBSZWFycmFuZ2UgbW9kZWxzJyBvcmRlcgojICAgKiBNYWtlIHN1cmUgZWFjaCBtb2RlbCBoYXMgb25lIGZpZWxkIHdpdGggcHJpbWFyeV9rZXk9VHJ1ZQojICAgKiBNYWtlIHN1cmUgZWFjaCBGb3JlaWduS2V5IGhhcyBgb25fZGVsZXRlYCBzZXQgdG8gdGhlIGRlc2lyZWQgYmVoYXZpb3IuCiMgICAqIFJlbW92ZSBgbWFuYWdlZCA9IEZhbHNlYCBsaW5lcyBpZiB5b3Ugd2lzaCB0byBhbGxvdyBEamFuZ28gdG8gY3JlYXRlLCBtb2RpZnksIGFuZCBkZWxldGUgdGhlIHRhYmxlCiMgRmVlbCBmcmVlIHRvIHJlbmFtZSB0aGUgbW9kZWxzLCBidXQgZG9uJ3QgcmVuYW1lIGRiX3RhYmxlIHZhbHVlcyBvciBmaWVsZCBuYW1lcy4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwoKCmNsYXNzIEZyaWRnZShtb2RlbHMuTW9kZWwpOgogICAgZnJpZGdlaWQgPSBtb2RlbHMuQXV0b0ZpZWxkKGRiX2NvbHVtbj0nRnJpZGdlSUQnLCBwcmltYXJ5X2tleT1UcnVlKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgZnJpZGdlbmFtZSA9IG1vZGVscy5DaGFyRmllbGQoZGJfY29sdW1uPSdGcmlkZ2VOYW1lJywgbWF4X2xlbmd0aD0yNTUpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBvd25lciA9IG1vZGVscy5Gb3JlaWduS2V5KCdVc2VycycsIG1vZGVscy5ET19OT1RISU5HLCBkYl9jb2x1bW49J093bmVyJykgICMgRmllbGQgbmFtZSBtYWRlIGxvd2VyY2FzZS4KICAgIGZyaWVuZHMgPSBtb2RlbHMuVGV4dEZpZWxkKGRiX2NvbHVtbj0nRnJpZW5kcycpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBhdXRvX2dlbl9ncm9jZXJ5X2xpc3QgPSBtb2RlbHMuVGV4dEZpZWxkKGRiX2NvbHVtbj0nQXV0b19nZW5fZ3JvY2VyeV9saXN0JywgYmxhbms9VHJ1ZSwgbnVsbD1UcnVlKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgbWFudWFsbHlfYWRkZWRfbGlzdCA9IG1vZGVscy5UZXh0RmllbGQoZGJfY29sdW1uPSdNYW51YWxseV9hZGRlZF9saXN0JywgYmxhbms9VHJ1ZSwgbnVsbD1UcnVlKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgY3JlYXRpb25fZGF0ZSA9IG1vZGVscy5EYXRlVGltZUZpZWxkKCkKICAgIG1vZGlmaWVkX2RhdGUgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZCgpCiAgICBlZmZfYmduX3RzID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoKQogICAgZWZmX2VuZF90cyA9IG1vZGVscy5EYXRlVGltZUZpZWxkKCkKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIG1hbmFnZWQgPSBGYWxzZQogICAgICAgIGRiX3RhYmxlID0gJ0ZyaWRnZScKCgpjbGFzcyBGcmlkZ2VDb250ZW50cyhtb2RlbHMuTW9kZWwpOgogICAgZnJpZGdlaWQgPSBtb2RlbHMuRm9yZWlnbktleShGcmlkZ2UsIG1vZGVscy5ET19OT1RISU5HLCBkYl9jb2x1bW49J0ZyaWRnZUlEJykgICMgRmllbGQgbmFtZSBtYWRlIGxvd2VyY2FzZS4KICAgIGl0ZW1pZCA9IG1vZGVscy5Gb3JlaWduS2V5KCdJdGVtcycsIG1vZGVscy5ET19OT1RISU5HLCBkYl9jb2x1bW49J0l0ZW1JRCcpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBhZGRlZGJ5ID0gbW9kZWxzLkZvcmVpZ25LZXkoJ1VzZXJzJywgbW9kZWxzLkRPX05PVEhJTkcsIGRiX2NvbHVtbj0nQWRkZWRCeScpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBleHBpcmF0aW9uZGF0ZSA9IG1vZGVscy5EYXRlVGltZUZpZWxkKGRiX2NvbHVtbj0nRXhwaXJhdGlvbkRhdGUnKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgc2l6ZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoZGJfY29sdW1uPSdTaXplJywgYmxhbms9VHJ1ZSwgbnVsbD1UcnVlKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgY3JlYXRpb25fZGF0ZSA9IG1vZGVscy5EYXRlVGltZUZpZWxkKCkKICAgIG1vZGlmaWVkX2RhdGUgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZCgpCiAgICBlZmZfYmduX3RzID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoKQogICAgZWZmX2VuZF90cyA9IG1vZGVscy5EYXRlVGltZUZpZWxkKCkKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIG1hbmFnZWQgPSBGYWxzZQogICAgICAgIGRiX3RhYmxlID0gJ0ZyaWRnZV9Db250ZW50cycKCgpjbGFzcyBJdGVtcyhtb2RlbHMuTW9kZWwpOgogICAgaXRlbWlkID0gbW9kZWxzLkF1dG9GaWVsZChkYl9jb2x1bW49J0l0ZW1JRCcsIHByaW1hcnlfa2V5PVRydWUpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBpdGVtbmFtZSA9IG1vZGVscy5DaGFyRmllbGQoZGJfY29sdW1uPSdJdGVtTmFtZScsIG1heF9sZW5ndGg9MjU1KSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgYWdlID0gbW9kZWxzLlRpbWVGaWVsZChkYl9jb2x1bW49J0FnZScpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBpc3BlcmlzaGFibGUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGRiX2NvbHVtbj0naXNQZXJpc2hhYmxlJykgICMgRmllbGQgbmFtZSBtYWRlIGxvd2VyY2FzZS4KICAgIGNhbG9yaWVzID0gbW9kZWxzLkludGVnZXJGaWVsZChkYl9jb2x1bW49J0NhbG9yaWVzJywgYmxhbms9VHJ1ZSwgbnVsbD1UcnVlKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgY3JlYXRpb25fZGF0ZSA9IG1vZGVscy5EYXRlVGltZUZpZWxkKCkKICAgIG1vZGlmaWVkX2RhdGUgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZCgpCiAgICBlZmZfYmduX3RzID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoKQogICAgZWZmX2VuZF90cyA9IG1vZGVscy5EYXRlVGltZUZpZWxkKCkKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIG1hbmFnZWQgPSBGYWxzZQogICAgICAgIGRiX3RhYmxlID0gJ0l0ZW1zJwoKCmNsYXNzIFJlY2lwZXMobW9kZWxzLk1vZGVsKToKICAgIGZyaWRnZWlkID0gbW9kZWxzLkZvcmVpZ25LZXkoRnJpZGdlLCBtb2RlbHMuRE9fTk9USElORywgZGJfY29sdW1uPSdGcmlkZ2VJZCcpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICB1c2VyaWQgPSBtb2RlbHMuRm9yZWlnbktleSgnVXNlcnMnLCBtb2RlbHMuRE9fTk9USElORywgZGJfY29sdW1uPSdVc2VySWQnKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgdGl0bGUgPSBtb2RlbHMuVGV4dEZpZWxkKGRiX2NvbHVtbj0nVGl0bGUnKSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgogICAgc291cmNldXJsID0gbW9kZWxzLlRleHRGaWVsZChkYl9jb2x1bW49J1NvdXJjZVVybCcpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBlZmZfYmduX3RzID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoKQogICAgZWZmX2VuZF90cyA9IG1vZGVscy5EYXRlVGltZUZpZWxkKCkKCiAgICBjbGFzcyBNZXRhOgogICAgICAgIG1hbmFnZWQgPSBGYWxzZQogICAgICAgIGRiX3RhYmxlID0gJ1JlY2lwZXMnCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpjbGFzcyBVc2Vycyhtb2RlbHMuTW9kZWwpOgogICAgdXNlcmlkID0gbW9kZWxzLkF1dG9GaWVsZChkYl9jb2x1bW49J1VzZXJJRCcsIHByaW1hcnlfa2V5PVRydWUpICAjIEZpZWxkIG5hbWUgbWFkZSBsb3dlcmNhc2UuCiAgICBlbWFpbCA9IG1vZGVscy5DaGFyRmllbGQoZGJfY29sdW1uPSdFbWFpbCcsIHVuaXF1ZT1UcnVlLCBtYXhfbGVuZ3RoPTI1NSkgICMgRmllbGQgbmFtZSBtYWRlIGxvd2VyY2FzZS4KICAgIHVzZXJuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChkYl9jb2x1bW49J1VzZXJuYW1lJywgdW5pcXVlPVRydWUsIG1heF9sZW5ndGg9MjU1KSAgIyBGaWVsZCBuYW1lIG1hZGUgbG93ZXJjYXNlLgo8fGZpbV9lbmR8Pg=="]
["72033eba1a07f69c6fb71c9dfcab8e61202c7608-3","72033eba1a07f69c6fb71c9dfcab8e61202c7608","PHxmaW1fcHJlZml4fD4KZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCmZyb20gdHlwaW5nIGltcG9ydCBTZXQsIFR1cGxlCgpmcm9tIGdvYmJsaS5kYXRhc2V0Lm5lc3RlZF9maWxlIGltcG9ydCBOZXN0ZWRGaWxlRGF0YXNldApmcm9tIGdvYmJsaS51dGlsIGltcG9ydCBkb3dubG9hZF9hcmNoaXZlCgoKY2xhc3MgSU1EQkRhdGFzZXQoTmVzdGVkRmlsZURhdGFzZXQpOgogICAgIiIiCjx8ZmltX2hvbGV8PgoKICAgIGRlZiBsYWJlbHMoc2VsZikgLT4gU2V0W3N0cl06CiAgICAgICAgcmV0dXJuIHsicG9zIiwgIm5lZyJ9CgogICAgZGVmIGRvd25sb2FkKHNlbGYsIGRhdGFfZGlyOiBQYXRoKSAtPiBQYXRoOgogICAgICAgIHJldHVybiBkb3dubG9hZF9hcmNoaXZlKAogICAgICAgICAgICAiaHR0cHM6Ly9haS5zdGFuZm9yZC5lZHUvfmFtYWFzL2RhdGEvc2VudGltZW50L2FjbEltZGJfdjEudGFyLmd6IiwgZGF0YV9kaXIKICAgICAgICApCgogICAgZGVmIGZvbGRlcnMoc2VsZikgLT4gVHVwbGVbUGF0aCwgUGF0aF06CiAgICAgICAgcmV0dXJuIFBhdGgoImFjbEltZGIvdHJhaW4iKSwgUGF0aCgiYWNsSW1kYi90ZXN0IikKCiAgICBkZWYgcmVhZF9zb3VyY2VfZmlsZShzZWxmLCBmaWxlX3BhdGg6IFBhdGgpIC0+IHN0cjoKICAgICAgICByZXR1cm4gZmlsZV9wYXRoLnJlYWRfdGV4dCgpCjx8ZmltX3N1ZmZpeHw+CiAgICBnb2JibGkgRGF0YXNldCBmb3IgdGhlIElNREIgc2VudGltZW50IGFuYWx5c2lzIHByb2JsZW0uCgogICAgaHR0cHM6Ly9haS5zdGFuZm9yZC5lZHUvfmFtYWFzL2RhdGEvc2VudGltZW50LwogICAgIiIiCjx8ZmltX2VuZHw+"]
["19c685e286e3934f7762caf2f9da2ffdf9abb3d4-2","19c685e286e3934f7762caf2f9da2ffdf9abb3d4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IEFpcmNyYWZ0CgoKCmNsYXNzIFByZXNzdXJlX0FsdGl0dWRlOgogICAgI2NvbnN0YW50cyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgYWlyIHByZXNzdXJlIGF0IGFsdGl0dWRlCjx8ZmltX2hvbGV8PgogICAgVU5JVkVSU0FMX0dBU19DT05TVEFOVF9SID0gOC4zMTQ0NyAjSU4gai8obW9sLWspCiAgICBNT0xBUl9NQVNTX09GX0RSWV9BSVJfTSA9IDAuMDI4OTY0NCAjaW4ga2cvbW9sCiAgICBFWFBPTkVOVCA9IChFQVJUSF9TVVJGQUNFX0dSQVZJVEFUSU9OQUxfQUNDRUxFUkFUSU9OX2cgKiBNT0xBUl9NQVNTX09GX0RSWV9BSVJfTSkgLyAoVU5JVkVSU0FMX0dBU19DT05TVEFOVF9SICogVEVNUEVSQVRVUkVfTEFQU0VfUkFURV9MKQogICAgbWF4X2FsdGl0dWRlID0gMAogICAgcHJlc3N1cmVfYXRfYWx0aXR1ZGUgPSAwCiAgICBsYXVuY2hfdGVtcCA9IDAKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgcGFzcwoKICAgIGRlZiBlbnRlcl9tYXhfYWx0aXR1ZGUoc2VsZik6CiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgaWYgQWlyY3JhZnQuX3VuaXQgPT0gJ0knOgogICAgICAgICAgICAgICAgICAgIFByZXNzdXJlX0FsdGl0dWRlLm1heF9hbHRpdHVkZSA9IGZsb2F0KGlucHV0KCJQbGVhc2UgZW50ZXIgdGhlIG1heGltdW0gYWx0aXR1ZGUgaW4gZmVldCBNU0w6XG4iKSkKICAgICAgICAgICAgICAgICAgICBQcmVzc3VyZV9BbHRpdHVkZS5tYXhfYWx0aXR1ZGUgKj0gMC4zMDQ4CiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgUHJlc3N1cmVfQWx0aXR1ZGUubWF4X2FsdGl0dWRlID0gZmxvYXQoaW5wdXQoIlBsZWFzZSBlbnRlciB0aGUgbWF4aW11bSBhbHRpdHVkZSBpbiBtZXRlcnMgTVNMOlxuIikpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByZXNzdXJlX0FsdGl0dWRlLm1heF9hbHRpdHVkZQogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgcHJpbnQoIlxuUGxlYXNlIG9ubHkgdXNlIG51bWJlcnMhXG4iKQoKICAgIGRlZiBjYWxjdWxhdGVfcHJlc3N1cmVfYXRfYWx0aXR1ZGUoc2VsZik6CiAgICAgICAgUHJlc3N1cmVfQWx0aXR1ZGUucHJlc3N1cmVfYXRfYWx0aXR1ZGUgPVwKICAgICAgICAgICAgUHJlc3N1cmVfQWx0aXR1ZGUuU1RBTkRBUkRfUFJFU1NVUkVfUG8gKiAoMSAtIChQcmVzc3VyZV9BbHRpdHVkZS5URU1QRVJBVFVSRV9MQVBTRV9SQVRFX0wgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZXNzdXJlX0FsdGl0dWRlLm1heF9hbHRpdHVkZSkgLyBQcmVzc3VyZV9BbHRpdHVkZS5TVEFOREFSRF9URU1QX1RvKSAqKiBQcmVzc3VyZV9BbHRpdHVkZS5FWFBPTkVOVAogICAgICAgIFByZXNzdXJlX0FsdGl0dWRlLnByZXNzdXJlX2F0X2FsdGl0dWRlIC89IDEwMAogICAgICAgIHJldHVybiBQcmVzc3VyZV9BbHRpdHVkZS5wcmVzc3VyZV9hdF9hbHRpdHVkZQoKICAgIGRlZiBlbnRlcl9sYXVuY2hfdGVtcChzZWxmKToKICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBpZiBBaXJjcmFmdC5fdW5pdCA9PSAnSSc6CiAgICAgICAgICAgICAgICAgICAgUHJlc3N1cmVfQWx0aXR1ZGUubGF1bmNoX3RlbXAgPSBmbG9hdChpbnB1dCgiUGxlYXNlIGVudGVyIHRoZSBleHBlY3RlZCB0ZW1wZXJhdHVyZSBAIEFsdGl0dWRlIGluIEZhaHJlbmhlaXQ6IFxuIikpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByZXNzdXJlX0FsdGl0dWRlLmxhdW5jaF90ZW1wCiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgUHJlc3N1cmVfQWx0aXR1ZGUubGF1bmNoX3RlbXAgPSBmbG9hdChpbnB1dCgiUGxlYXNlIGVudGVyIHRoZSBleHBlY3RlZCB0ZW1wZXJhdHVyZSBAIEFsdGl0dWRlIGluIENlbHNpdXM6IFxuIikpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByZXNzdXJlX0FsdGl0dWRlLmxhdW5jaF90ZW1wCiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICBwcmludCgiXG5QbGVhc2UgdXNlIG51bWJlcnMgb25seSIpCgogICAgZGVmIGNvbnZlcnRfbGF1bmNoX3RlbXBfdG9fa2VsdmluKHNlbGYpOiAjSyA9IDUvOSAowrAgRiAtIDMyKSArIDI3MyBhbmQgSyA9IMKwIEMgKyAyNzMKICAgICAgICBpZiBBaXJjcmFmdC5fdW5pdCA9PSAnSSc6CiAgICAgICAgICAgIFByZXNzdXJlX0FsdGl0dWRlLmxhdW5jaF90ZW1wID0gKFByZXNzdXJlX0FsdGl0dWRlLmxhdW5jaF90ZW1wICsgNDU5LjY3KSAqICg1LzkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgUHJlc3N1cmVfQWx0aXR1ZGUubGF1bmNoX3RlbXAgKz0gMjczLjE1CiAgICAgICAgICAgIHJldHVybiBQcmVzc3VyZV9BbHRpdHVkZS5sYXVuY2hfdGVtcAoKICAgIGRlZiBjb252ZXJ0X2xhdW5jaF90ZW1wX2xhcHNlX3JhdGUoc2VsZik6CiAgICAgICAgUHJlc3N1cmVfQWx0aXR1ZGUubGF1bmNoX3RlbXAgKz0gUHJlc3N1cmVfQWx0aXR1ZGUubGF1bmNoX3RlbXAgLSBQcmVzc3VyZV9BbHRpdHVkZS5TVEFOREFSRF9URU1QX1RvIC0gUHJlc3N1cmVfQWx0aXR1ZGUuVEVNUEVSQVRVUkVfTEFQU0VfUkFURV9MICogUHJlc3N1cmVfQWx0aXR1ZGUubWF4X2FsdGl0dWRlCiAgICAgICAgcmV0dXJuIFByZXNzdXJlX0FsdGl0dWRlLmxhdW5jaF90ZW1wCgo8fGZpbV9zdWZmaXh8PgogICAgU1RBTkRBUkRfUFJFU1NVUkVfUG8gPSAxMDEzMjUgI2luIFBhCiAgICBTVEFOREFSRF9URU1QX1RvID0gMjg4LjE1ICNpbiBLCiAgICBFQVJUSF9TVVJGQUNFX0dSQVZJVEFUSU9OQUxfQUNDRUxFUkFUSU9OX2cgPSA5LjgwNjY1ICNpbiBtL3MyCiAgICBURU1QRVJBVFVSRV9MQVBTRV9SQVRFX0wgPSAwLjAwNjUgI2luIEsvbQo8fGZpbV9lbmR8Pg=="]
["3ef0a255f5d7ae26857cbac9ee62a99f2e3e4b9f-2","3ef0a255f5d7ae26857cbac9ee62a99f2e3e4b9f","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHd4Cgpmcm9tIGFic3RyYWN0Lm1hbmFnZXIgaW1wb3J0IEFic3RyYWN0TWFuYWdlcgoKCmNsYXNzIFRlbXBsYXRlTWFuYWdlcihBYnN0cmFjdE1hbmFnZXIpOgoKCXdpbmRvdzogJ1RlbXBsYXRlTWFuYWdlcldpbmRvdycKCglkZWYgSW5pdCggc2VsZiApIC0+IE5vbmU6CgkJc2VsZi53aW5kb3cgPSBUZW1wbGF0ZU1hbmFnZXJXaW5kb3coKQoKPHxmaW1faG9sZXw+CgkJc2VsZi53aW5kb3cuU2hvdygpCgoKbWFuYWdlcjogVGVtcGxhdGVNYW5hZ2VyID0gVGVtcGxhdGVNYW5hZ2VyKCkKCgpjbGFzcyBUZW1wbGF0ZU1hbmFnZXJXaW5kb3cod3guRnJhbWUpOgoKCWRlZiBfX2luaXRfXyhzZWxmKToKCQlzdXBlcihUZW1wbGF0ZU1hbmFnZXJXaW5kb3csIHNlbGYpLl9faW5pdF9fKAoJCQlwYXJlbnQ9d3guR2V0QWN0aXZlV2luZG93KCksCgkJCXRpdGxlPSdNYW5hZ2UgVGVtcGxhdGVzJwoJCSkKCQlzZWxmLkJpbmQoIHd4LkVWVF9DTE9TRSwgbGFtYmRhIGV2dDogc2VsZi5TaG93KEZhbHNlKSwgc2VsZiApCgoKY2xhc3MgVGVtcGxhdGU6CglwYXNzCjx8ZmltX3N1ZmZpeHw+CglkZWYgU3RvcCggc2VsZiApIC0+IE5vbmU6CgkJcGFzcwoKCWRlZiBTaG93TWFuYWdlciggc2VsZiwgKmFyZ3MgKToKPHxmaW1fZW5kfD4="]
["9d03dd5105ffa192b38e3e663b3f4e2ec3d5d495-4","9d03dd5105ffa192b38e3e663b3f4e2ec3d5d495","PHxmaW1fcHJlZml4fD4KIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCmZyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKCmZyb20gYWRqdXRhbnQudGFza3MgaW1wb3J0IG1vZGVscyBhcyB0YXNrX21vZGVscwpmcm9tIGFkanV0YW50LmFwaSBpbXBvcnQgbW9kZWxzIGFzIGFwaV9tb2RlbHMKZnJvbSBhZGp1dGFudC5jb21tb24udGVzdHMgaW1wb3J0IGZha2VfY2xpZW50cwpmcm9tIGRqYW5nby50ZXN0IGltcG9ydCBUZXN0Q2FzZQoKZnJvbSBhZGp1dGFudF9tb2MuYWN0aW9ucyBpbXBvcnQgbWFpbGluZ19saXN0CgoKCgoKY2xhc3MgRmFrZVByb2plY3QoZmFrZV9jbGllbnRzLkZha2VQcm9qZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQogICAgICAgIHNlbGYudGFncyA9IFtdCgogICAgZGVmIGFkZF90YWcoc2VsZiwgdGFnKToKICAgICAgICBzZWxmLnRhZ3MuYXBwZW5kKHRhZykKCiAgICBkZWYgbGlzdF90YWdzKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnRhZ3MKCiAgICBkZWYgZGVsZXRlKHNlbGYpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZGVsKGZha2VfY2xpZW50cy5pZGVudGl0eV9jYWNoZVsicHJvamVjdHMiXVtzZWxmLmlkXSkKCgo8fGZpbV9lbmR8Pg=="]
["cd42118aa8f96acf3123fca1e1019da62c8deb40-1","cd42118aa8f96acf3123fca1e1019da62c8deb40","PHxmaW1fcHJlZml4fD4KIy0qLSBjb2Rpbmc6IFVURi04IC0qLQoKI0NyaWFkbyBwb3IgRWR1YXJkbyBNZWxnYcOnbwojaHR0cHM6Ly9naXRodWIuY29tL3B5dGhvbmJ5dGUvCmltcG9ydCByZXF1ZXN0cwppbXBvcnQgdXJsbGliLnJlcXVlc3QKZnJvbSB0a2ludGVyIGltcG9ydCBUaywgTGFiZWwsIEJ1dHRvbiwgRW50cnkKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IGxydV9jYWNoZQoKIyBjb25maWRlbmNlCiMgaHR0cHM6Ly8yM2h1NG40Z3EwLmV4ZWN1dGUtYXBpLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tL3Byb2R1Y3Rpb24vYXBpL3YxL2NvdGFjb2VzP2lkUHJvZHV0bz01NyZpZENpZGFkZT00ODU0CiMgYXV0aCBlY29tbWVyY2UuY29uZmlkZW5jZXxFQ29tbWVyY2V8bnVsbHwyNzYwfE1Dd0NGSFI5djU0WmgzTlNTdEZUSDZxWlFOY2pSWmJ3QWhSQmNOald5VTd1ZkdKdzYycS91TjhhY1FMK3ZnPT0KCnBpY2NoaW9uaV9pZHMgPSB7CiAgICAiZG9sYXIiOiAnImlkIjoyLCJzaW1ib2xvIjoiVVNEIiwiZGVzY3JpY2FvIjoiRMOzbGFyIChVU0QpIicsCiAgICAiZXVybyI6ICciaWQiOjQsInNpbWJvbG8iOiJFVVIiLCJkZXNjcmljYW8iOiJFdXJvIChFVVIpIicsCiAgICAibGlicmEiOiAnImlkIjo2LCJzaW1ib2xvIjoiR0JQIiwiZGVzY3JpY2FvIjoiTGlicmEgRXN0ZXJsaW5hIChHQlApIicsCiAgICAiZG9sYXJfY2FkIjogJyJpZCI6OSwic2ltYm9sbyI6IkNBRCIsImRlc2NyaWNhbyI6IkTDs2xhciBDYW5hZGVuc2UgKENBRCkiJywKICAgICJkb2xhcl9hdSI6ICciaWQiOjEwLCJzaW1ib2xvIjoiQVVEIiwiZGVzY3JpY2FvIjoiRMOzbGFyIEF1c3RyYWxpYW5vIChBVUQpIicKfQoKY29uZmlkZW5jZV9pZHMgPSB7CiAgICAiZG9sYXIiOiAyOSwKICAgICJldXJvIjogMzUsCiAgICAibGlicmEiOiA1NywKICAgICJkb2xhcl9jYWQiOiA0MywKICAgICJkb2xhcl9hdSI6IDQ1Cn0KCgoKCkBscnVfY2FjaGUobWF4c2l6ZT1Ob25lKQpkZWYgZ2V0X3BpY2NoaW9uaV9jb3RhdGlvbigpOgogICAgcGljY2hpb25pX3Jlc3BvbnNlID0gcmVxdWVzdHMuZ2V0KCdodHRwczovL3d3dy5waWNjaGlvbmkuY29tLmJyJykKICAgIHBpY2NoaW9uaV90ZXh0ID0gcGljY2hpb25pX3Jlc3BvbnNlLnRleHQKICAgIGNvdGF0aW9uX2RhdGEgPSB7fQoKICAgIGZvciBrLHYgaW4gcGljY2hpb25pX2lkcy5pdGVtcygpOgoKICAgICAgICBpZiBrID09ICdkb2xhcic6CiAgICAgICAgICAgIGVuZF9saW5lID0gaW50KHBpY2NoaW9uaV90ZXh0LmZpbmQodikpICsgMTUyCiAgICAgICAgICAgIGJlZ2luX2xpbmUgPSBlbmRfbGluZSAtIDkKICAgICAgICAgICAgY290YXRpb25fZGF0YVtrXSA9IGZsb2F0KHBpY2NoaW9uaV90ZXh0W2JlZ2luX2xpbmU6ZW5kX2xpbmVdKQogICAgICAgICAgICAjIGNvdGF0aW9uX2RhdGEuYXBwZW5kKGZsb2F0KHBpY2NoaW9uaV90ZXh0W2JlZ2luX2xpbmU6ZW5kX2xpbmVdKSkKCiAgICAgICAgZWxpZiBrID09ICdldXJvJzoKICAgICAgICAgICAgZW5kX2xpbmUgPSBpbnQocGljY2hpb25pX3RleHQuZmluZCh2KSkgKyAxNTEKICAgICAgICAgICAgYmVnaW5fbGluZSA9IGVuZF9saW5lIC0gOQogICAgICAgICAgICBjb3RhdGlvbl9kYXRhW2tdID0gZmxvYXQocGljY2hpb25pX3RleHRbYmVnaW5fbGluZTplbmRfbGluZV0pCgogICAgICAgICAgICAjIGNvdGF0aW9uX2RhdGEuYXBwZW5kKGZsb2F0KHBpY2NoaW9uaV90ZXh0W2JlZ2luX2xpbmU6ZW5kX2xpbmVdKSkKCiAgICAgICAgZWxpZiBrID09ICdsaWJyYSc6CiAgICAgICAgICAgIGVuZF9saW5lID0gaW50KHBpY2NoaW9uaV90ZXh0LmZpbmQodikpICsgMTYyCiAgICAgICAgICAgIGJlZ2luX2xpbmUgPSBlbmRfbGluZSAtIDkKICAgICAgICAgICAgY290YXRpb25fZGF0YVtrXSA9IGZsb2F0KHBpY2NoaW9uaV90ZXh0W2JlZ2luX2xpbmU6ZW5kX2xpbmVdKQoKICAgICAgICAgICAgIyBjb3RhdGlvbl9kYXRhLmFwcGVuZChmbG9hdChwaWNjaGlvbmlfdGV4dFtiZWdpbl9saW5lOmVuZF9saW5lXSkpCgogICAgICAgIGVsaWYgayA9PSAnZG9sYXJfY2FkJzoKICAgICAgICAgICAgZW5kX2xpbmUgPSBpbnQocGljY2hpb25pX3RleHQuZmluZCh2KSkgKyAxNjIKICAgICAgICAgICAgYmVnaW5fbGluZSA9IGVuZF9saW5lIC0gOQogICAgICAgICAgICBjb3RhdGlvbl9kYXRhW2tdID0gZmxvYXQocGljY2hpb25pX3RleHRbYmVnaW5fbGluZTplbmRfbGluZV0pCgogICAgICAgICAgICAjIGNvdGF0aW9uX2RhdGEuYXBwZW5kKGZsb2F0KHBpY2NoaW9uaV90ZXh0W2JlZ2luX2xpbmU6ZW5kX2xpbmVdKSkKCiAgICAgICAgZWxpZiBrID09ICdkb2xhcl9hdSc6CiAgICAgICAgICAgIGVuZF9saW5lID0gaW50KHBpY2NoaW9uaV90ZXh0LmZpbmQodikpICsgMTY1CiAgICAgICAgICAgIGJlZ2luX2xpbmUgPSBlbmRfbGluZSAtIDkKICAgICAgICAgICAgY290YXRpb25fZGF0YVtrXSA9IGZsb2F0KHBpY2NoaW9uaV90ZXh0W2JlZ2luX2xpbmU6ZW5kX2xpbmVdKQoKICAgICAgICAgICAgIyBjb3RhdGlvbl9kYXRhLmFwcGVuZChmbG9hdChwaWNjaGlvbmlfdGV4dFtiZWdpbl9saW5lOmVuZF9saW5lXSkpCgogICAgcmV0dXJuIGNvdGF0aW9uX2RhdGEKCkBscnVfY2FjaGUobWF4c2l6ZT1Ob25lKQpkZWYgZ2V0X2NvbmZpZGVuY2UoKToKICAgIHVybCA9ICdodHRwczovLzIzaHU0bjRncTAuZXhlY3V0ZS1hcGkuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20vcHJvZHVjdGlvbi9hcGkvdjEvY290YWNvZXM/aWRQcm9kdXRvPXt9JmlkQ2lkYWRlPTQ4NTQnCiAgICBjb3RhdGlvbl9kYXRhID0gIHt9CgogICAgZm9yIGssdiBpbiBjb25maWRlbmNlX2lkcy5pdGVtcygpOgogICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMuZ2V0KHVybC5mb3JtYXQodiksIGhlYWRlcnM9eydhdXRoJzogJ2Vjb21tZXJjZS5jb25maWRlbmNlfEVDb21tZXJjZXxudWxsfDI3NjB8TUN3Q0ZIUjl2NTRaaDNOU1N0RlRINnFaUU5jalJaYndBaFJCY05qV3lVN3VmR0p3NjJxL3VOOGFjUUwrdmc9PSd9KQogICAgICAgIGNvdGF0aW9uX2RhdGFba10gPSByZXNwb25zZS5qc29uKClbJ2NvdGFjYW8nXQoKICAgIHJldHVybiBjb3RhdGlvbl9kYXRhCgpAbHJ1X2NhY2hlKG1heHNpemU9Tm9uZSkKZGVmIHN0YigpOgogICAgdXJsID0gJ2h0dHBzOi8vd3d3LnN0Yi5jb20uYnIvc2Vydmljb3MvY29udmVyc29yLWRlLW1vZWRhcycKICAgIHBhZ2luYSA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4odXJsKQogICAgdGV4dG8gPSBwYWdpbmEucmVhZCgpLmRlY29kZSgndXRmLTgnKQogICAgY290YXRpb25fZGF0YSA9IHt9CgogICAgc3RiX2xvY2FsX2FtID0gdGV4dG8uZmluZCgnQW1lcmljYW5vPC9zJykKICAgIGZpbmFsID0gc3RiX2xvY2FsX2FtICsgMTU1CiAgICBpbmljaW8gPSBmaW5hbCAtIDUKICAgIHN0Yl9jb3RfZG9sYXIgPSBmbG9hdCh0ZXh0b1tpbmljaW86ZmluYWxdLnJlcGxhY2UoJywnLCAnLicpKQoKCiAgICBzdGJfbG9jYWxfYXUgPSB0ZXh0by5maW5kKCdBdXN0cmFsaWFubzwvcycpCiAgICBmaW5hbF9hdSA9IHN0Yl9sb2NhbF9hdSArIDE1NwogICAgaW5pY2lvX2F1ID0gZmluYWxfYXUgLSA1CiAgICBzdGJfY290X2RvbGFyX2F1ID0gZmxvYXQodGV4dG9baW5pY2lvX2F1OmZpbmFsX2F1XS5yZXBsYWNlKCcsJywgJy4nKSkKCgogICAgc3RiX2xvY2FsX2NhID0gdGV4dG8uZmluZCgnQ2FuYWRlbnNlPC9zJykKICAgIGZpbmFsX2NhID0gc3RiX2xvY2FsX2NhICsgMTU1CiAgICBpbmljaW9fY2EgPSBmaW5hbF9jYSAtIDUKICAgIHN0Yl9jb3RfZG9sYXJfY2EgPSBmbG9hdCh0ZXh0b1tpbmljaW9fY2E6ZmluYWxfY2FdLnJlcGxhY2UoJywnLCAnLicpKQoKCiAgICBzdGJfbG9jYWxfZXVybyA9IHRleHRvLmZpbmQoJ0V1cm88L3MnKQogICAgZmluYWxfZXVybyA9IHN0Yl9sb2NhbF9ldXJvICsgMTUwCiAgICBpbmljaW9fZXVybyA9IGZpbmFsX2V1cm8gLSA1CiAgICBzdGJfY290X2V1cm8gPSBmbG9hdCh0ZXh0b1tpbmljaW9fZXVybzpmaW5hbF9ldXJvXS5yZXBsYWNlKCcsJywgJy4nKSkKCgogICAgc3RiX2xvY2FsX2xpYnJhID0gdGV4dG8uZmluZCgnRXN0ZXJsaW5hPC9zJykKICAgIGZpbmFsX2xpYnJhID0gc3RiX2xvY2FsX2xpYnJhICsgMTU1CiAgICBpbmljaW9fbGlicmEgPSBmaW5hbF9saWJyYSAtIDUKICAgIHN0Yl9jb3RfbGlicmEgPSBmbG9hdCh0ZXh0b1tpbmljaW9fbGlicmE6ZmluYWxfbGlicmFdLnJlcGxhY2UoJywnLCAnLicpKQoKICAgIGNvdGF0aW9uX2RhdGEgPSB7CiAgICAgICAgImRvbGFyIjogc3RiX2NvdF9kb2xhciwKICAgICAgICAiZXVybyI6IHN0Yl9jb3RfZXVybywKICAgICAgICAibGlicmEiOiBzdGJfY290X2xpYnJhLAogICAgICAgICJkb2xhcl9jYWQiOiBzdGJfY290X2RvbGFyX2NhLAogICAgICAgICJkb2xhcl9hdSI6IHN0Yl9jb3RfZG9sYXJfYXUKICAgIH0KCiAgICByZXR1cm4gY290YXRpb25fZGF0YQoKcHJpbnQoJ1Byb2dyYW1hIGFicmluZG8uLi4gQWd1YXJkZS4uLicpCnBpY2NoaW9uaV9kYXRhID0gZ2V0X3BpY2NoaW9uaV9jb3RhdGlvbigpCmNvbmZpZGVuY2VfZGF0YSA9IGdldF9jb25maWRlbmNlKCkKc3RiX2RhdGEgPSBzdGIoKQoKZ3JlZW5fZGF0YSA9IFtdCmdyZWVuX3N0YiA9IFtdCgpsYWJlbHMgPSBbJ1BpY2NoaW9uaScsICdDb25maWRlbmNlJywgJ0dyZWVuJywgJ1NUQicsICdHcmVlbiAtIFNUQiddCm1vbmV5X2xhYmVscyA9IFsnRG9sYXIgQU0nLCAnRXVybycsICdMaWJyYScsICdEb2xhciBDYWQnLCAnRG9sYXIgQVUnLCBdCgpyb290ID0gVGsoKQpyb290LnRpdGxlKCcgQyBPIFQgQSBUIE8gUiAgLSAgMS4wJykKCiMgcGljY2hpb25pIGNvbHVtbgpMYWJlbCh0ZXh0PSdSJCB7Oi4zZn0nLmZvcm1hdChwaWNjaGlvbmlfZGF0YVsnZG9sYXInXSksIHdpZHRoPTE1KS5ncmlkKHJvdz0xLCBjb2x1bW49MSkKTGFiZWwodGV4dD0nUiQgezouM2Z9Jy5mb3JtYXQocGljY2hpb25pX2RhdGFbJ2V1cm8nXSksIHdpZHRoPTE1KS5ncmlkKHJvdz0yLCBjb2x1bW49MSkKTGFiZWwodGV4dD0nUiQgezouM2Z9Jy5mb3JtYXQocGljY2hpb25pX2RhdGFbJ2xpYnJhJ10pLCB3aWR0aD0xNSkuZ3JpZChyb3c9MywgY29sdW1uPTEpCkxhYmVsKHRleHQ9J1IkIHs6LjNmfScuZm9ybWF0KHBpY2NoaW9uaV9kYXRhWydkb2xhcl9jYWQnXSksIHdpZHRoPTE1KS5ncmlkKHJvdz00LCBjb2x1bW49MSkKTGFiZWwodGV4dD0nUiQgezouM2Z9Jy5mb3JtYXQocGljY2hpb25pX2RhdGFbJ2RvbGFyX2F1J10pLCB3aWR0aD0xNSkuZ3JpZChyb3c9NSwgY29sdW1uPTEpCgoKIyBjb25maWRlbmNlIGNvbHVtbgpMYWJlbCh0ZXh0PSdSJCB7Oi4zZn0nLmZvcm1hdChjb25maWRlbmNlX2RhdGFbJ2RvbGFyJ10pLCB3aWR0aD0xNSkuZ3JpZChyb3c9MSwgY29sdW1uPTIpCkxhYmVsKHRleHQ9J1IkIHs6LjNmfScuZm9ybWF0KGNvbmZpZGVuY2VfZGF0YVsnZXVybyddKSwgd2lkdGg9MTUpLmdyaWQocm93PTIsIGNvbHVtbj0yKQpMYWJlbCh0ZXh0PSdSJCB7Oi4zZn0nLmZvcm1hdChjb25maWRlbmNlX2RhdGFbJ2xpYnJhJ10pLCB3aWR0aD0xNSkuZ3JpZChyb3c9MywgY29sdW1uPTIpCkxhYmVsKHRleHQ9J1IkIHs6LjNmfScuZm9ybWF0KGNvbmZpZGVuY2VfZGF0YVsnZG9sYXJfY2FkJ10pLCB3aWR0aD0xNSkuZ3JpZChyb3c9NCwgY29sdW1uPTIpCkxhYmVsKHRleHQ9J1IkIHs6LjNmfScuZm9ybWF0KGNvbmZpZGVuY2VfZGF0YVsnZG9sYXJfYXUnXSksIHdpZHRoPTE1KS5ncmlkKHJvdz01LCBjb2x1bW49MikKCiMgZ3JlZW4gdmFyaWFibGVzIGFuZCBjb2x1bW4KZ3JlZW5fZG9sYXIgPSAoY29uZmlkZW5jZV9kYXRhWydkb2xhciddK3BpY2NoaW9uaV9kYXRhWydkb2xhciddKS8yCmdyZWVuX2V1cm8gPSAoY29uZmlkZW5jZV9kYXRhWydldXJvJ10rcGljY2hpb25pX2RhdGFbJ2V1cm8nXSkvMgo8fGZpbV9ob2xlfD4KTGFiZWwodGV4dD0nUiQgezouM2Z9Jy5mb3JtYXQoZ3JlZW5fZG9sYXIpLCB3aWR0aD0xNSkuZ3JpZChyb3c9MSwgY29sdW1uPTMpCkxhYmVsKHRleHQ9J1IkIHs6LjNmfScuZm9ybWF0KGdyZWVuX2V1cm8pLCB3aWR0aD0xNSkuZ3JpZChyb3c9MiwgY29sdW1uPTMpCkxhYmVsKHRleHQ9J1IkIHs6LjNmfScuZm9ybWF0KGdyZWVuX2xpYnJhKSwgd2lkdGg9MTUpLmdyaWQocm93PTMsIGNvbHVtbj0zKQpMYWJlbCh0ZXh0PSdSJCB7Oi4zZn0nLmZvcm1hdChncmVlbl9kb2xhcl9jYWQpLCB3aWR0aD0xNSkuZ3JpZChyb3c9NCwgY29sdW1uPTMpCkxhYmVsKHRleHQ9J1IkIHs6LjNmfScuZm9ybWF0KGdyZWVuX2RvbGFyX2F1KSwgd2lkdGg9MTUpLmdyaWQocm93PTUsIGNvbHVtbj0zKQoKIyBzdGIgY29sdW1uCkxhYmVsKHRleHQ9J1IkIHs6LjNmfScuZm9ybWF0KHN0Yl9kYXRhWydkb2xhciddKSwgd2lkdGg9MTUpLmdyaWQocm93PTEsIGNvbHVtbj00KQpMYWJlbCh0ZXh0PSdSJCB7Oi4zZn0nLmZvcm1hdChzdGJfZGF0YVsnZXVybyddKSwgd2lkdGg9MTUpLmdyaWQocm93PTIsIGNvbHVtbj00KQpMYWJlbCh0ZXh0PSdSJCB7Oi4zZn0nLmZvcm1hdChzdGJfZGF0YVsnbGlicmEnXSksIHdpZHRoPTE1KS5ncmlkKHJvdz0zLCBjb2x1bW49NCkKTGFiZWwodGV4dD0nUiQgezouM2Z9Jy5mb3JtYXQoc3RiX2RhdGFbJ2RvbGFyX2NhZCddKSwgd2lkdGg9MTUpLmdyaWQocm93PTQsIGNvbHVtbj00KQpMYWJlbCh0ZXh0PSdSJCB7Oi4zZn0nLmZvcm1hdChzdGJfZGF0YVsnZG9sYXJfYXUnXSksIHdpZHRoPTE1KS5ncmlkKHJvdz01LCBjb2x1bW49NCkKCgojIGdyZWVuIC0gc3RiIGNvbHVtbgpMYWJlbCh0ZXh0PSdSJCB7Oi4zZn0nLmZvcm1hdChncmVlbl9kb2xhci1zdGJfZGF0YVsnZG9sYXInXSksIHdpZHRoPTE1KS5ncmlkKHJvdz0xLCBjb2x1bW49NSkKTGFiZWwodGV4dD0nUiQgezouM2Z9Jy5mb3JtYXQoZ3JlZW5fZXVyby1zdGJfZGF0YVsnZXVybyddKSwgd2lkdGg9MTUpLmdyaWQocm93PTIsIGNvbHVtbj01KQpMYWJlbCh0ZXh0PSdSJCB7Oi4zZn0nLmZvcm1hdChncmVlbl9saWJyYS1zdGJfZGF0YVsnbGlicmEnXSksIHdpZHRoPTE1KS5ncmlkKHJvdz0zLCBjb2x1bW49NSkKTGFiZWwodGV4dD0nUiQgezouM2Z9Jy5mb3JtYXQoZ3JlZW5fZG9sYXJfY2FkLXN0Yl9kYXRhWydkb2xhcl9jYWQnXSksIHdpZHRoPTE1KS5ncmlkKHJvdz00LCBjb2x1bW49NSkKTGFiZWwodGV4dD0nUiQgezouM2Z9Jy5mb3JtYXQoZ3JlZW5fZG9sYXJfYXUtc3RiX2RhdGFbJ2RvbGFyX2F1J10pLCB3aWR0aD0xNSkuZ3JpZChyb3c9NSwgY29sdW1uPTUpCgojIHRvcCBhbmQgaG9yaXpvbnRhbCBsYWJlbHMKZm9yIGkgaW4gcmFuZ2UoNSk6CiAgICBMYWJlbCh0ZXh0PWxhYmVsc1tpXSwgd2lkdGg9MTUpLmdyaWQocm93PTAsY29sdW1uPWkrMSkKICAgIGZvciBqIGluIHJhbmdlKDUpOgogICAgICAgIExhYmVsKHRleHQ9bW9uZXlfbGFiZWxzW2pdLCB3aWR0aD0xNSkuZ3JpZChyb3c9aisxLGNvbHVtbj0wKQoKCnByaW50KCdQcm9ncmFtYSBBYmVydG8nKQoKcm9vdC5tYWlubG9vcCgpCnByaW50KCdQcm9ncmFtYSBGZWNoYWRvICEnKQoKPHxmaW1fc3VmZml4fD4KZ3JlZW5fbGlicmEgPSAoY29uZmlkZW5jZV9kYXRhWydsaWJyYSddK3BpY2NoaW9uaV9kYXRhWydsaWJyYSddKS8yCmdyZWVuX2RvbGFyX2NhZCA9IChjb25maWRlbmNlX2RhdGFbJ2RvbGFyX2NhZCddK3BpY2NoaW9uaV9kYXRhWydkb2xhcl9jYWQnXSkvMgpncmVlbl9kb2xhcl9hdSA9IChjb25maWRlbmNlX2RhdGFbJ2RvbGFyX2F1J10rcGljY2hpb25pX2RhdGFbJ2RvbGFyX2F1J10pLzIKCjx8ZmltX2VuZHw+"]
["9d0a71f83699e492adf4ccbed28711f5c9ecdc4f-2","9d0a71f83699e492adf4ccbed28711f5c9ecdc4f",{"$cut":{"chars":21000,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIyAKIyMgQXV0aG9yOiBNZWhkaSBOZWxsZW4sIFV0cmVjaHQgMjAxNwoKaW1wb3J0IHN5cwppbXBvcnQgbWF0aAppbXBvcnQgaXRlcnRvb2xzCmZyb20gY29weSBpbXBvcnQgZGVlcGNvcHkKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCByZQoKCkVYQ0xVREVEV0FURVJTID0gW10gIyBMaXN0IGNvbnRhaW5pbmcgd2F0ZXJzIHRoYXQgaGF2ZSB0byBiZSBleGNsdWRlZCBmcm9tIHRoZSBhbmFseXNpcwpNSU5IQkRJU1QgPSAzLjUKTUlOSEJBTkdMRSA9IDIuMQoKY2xhc3MgQXRvbToKICAgICcnJyBjbGFzcyBmb3IgYXRvbXMgd2l0aCBlbGVtZW50ICcnJwogICAgZGVmIF9faW5pdF9fKHNlbGYsIGF0bm8sIGF0b20sIHJlc24sIHJlc2ksIHh5emMsIGVsZW0sIGNvbm4sIG4sIGxpbmUpOgogICAgICAgIHNlbGYuYXRubyA9IGF0bm8gIyBVbmlxdWUgYXRvbSBudW1iZXIKICAgICAgICBzZWxmLmF0b20gPSBhdG9tICMgYXRvbSBuYW1lIAogICAgICAgIHNlbGYucmVzbiA9IHJlc24gIyBSZXNpZHVlL21vbGVjdWxlIG5hbWUKICAgICAgICBzZWxmLnJlc2kgPSByZXNpICMgUmVzaWR1ZS9tb2xlY3VsZSBpbnRlZ2VyL3NlcXVlbmNlIG51bWJlcgogICAgICAgIHNlbGYueHl6YyA9IHh5emMgIyBDb29yZGluYXRlcyB4eXoKICAgICAgICBzZWxmLmVsZW0gPSBlbGVtICMgRWxlbWVudCBhbmQgY2hhcmdlCiAgICAgICAgc2VsZi5jb25uID0gY29ubiAjIExpc3Qgb2YgY29ubmVjdGVkIGVsZW1lbnRzCiAgICAgICAgc2VsZi5oYnR5ID0gIiIgICAjIHBhcnRpY2lwYXRpbmcgaW4gYSBoeXJvZ2VuIGJvbmQgCiAgICAgICAgc2VsZi5oYm9uID0gMCAgICAjIGhib25kIG9iamVjdAogICAgICAgIHNlbGYubiAgICA9IG4gICAgIyBsaW5lIG51bWJlciBpbiB0aGUgcGRiCiAgICAgICAgc2VsZi5saW5lID0gbGluZSAjIHRoZSByYXcgcGRiIGxpbmUgKHVzZWQgZm9yIGdlbmVyYXRpbmcgcGRiKQoKICAgIGRlZiBjYWxjRGlzdChzZWxmLCBhdG9tMik6CiAgICAgICAgJycnY2FsY3VsYXRlIGRpc3RhbmNlIGJldHdlZW4gYXRvbXMnJycgCiAgICAgICAgcmV0dXJuIG5wLmxpbmFsZy5ub3JtKHNlbGYueHl6Yy1hdG9tMi54eXpjKQoKICAgIGRlZiBjYWxjQW5nbGUoc2VsZiwgYXRvbTEsIGF0b20zKToKICAgICAgICAnJydjYWxjdWxhdGVzIHRoZSBhbmdsZSBsb2NhdGVkIGF0IGF0b20yCiAgICAgICAgYmV0d2VlbiB0aGUgdmVjdG9ycyBhdG9tMS1hdG9tMiBhbmQgCiAgICAgICAgYXRvbTItYXRvbTMnJycKICAgICAgICBhdG9tMiA9IHNlbGYKICAgICAgICBhMjEgPSBhdG9tMi54eXpjIC0gYXRvbTEueHl6YwogICAgICAgIGEyMyA9IGF0b20yLnh5emMgLSBhdG9tMy54eXpjCiAgICAgICAgY29zMyA9IG5wLmRvdChhMjEsIGEyMykgLyAobnAubGluYWxnLm5vcm0oYTIxKSAqIG5wLmxpbmFsZy5ub3JtKGEyMykpCiAgICAgICAgYW5nbGUgPSBucC5hcmNjb3MoY29zMykKICAgICAgICByZXR1cm4gYW5nbGUKIApkZWYgZmluZEhib25kKHdhdGVycywgbW9sZWN1bGVzKToKICAgICcnJ1RoaXMgZnVuY3Rpb24gc2VhcmNoZXMgZm9yIGh5ZHJvZ2VuIGJvbmRzIGFuZCAKICAgIG1hcmtzIHdhdGVycyB0aGF0IGZvcm0gYSBoeWRyb2dlbiBib25kIGJ5IHB1dHRpbmcgYQogICAgaHlkcm9nZW5ib25kIG9iamVjdCBsaXN0IGluIHRoZSB3YXRlciBvYmplY3QnJycKICAgICMgV2F0ZXJzIGFzIGFjY2VwdG9ycwogICAgZm9yIHdhdGVyIGluIHdhdGVyczoKICAgICAgICB3YXRlck8gPSB3YXRlci5veGkKICAgICAgICAjZmluZCBOaXRyb2dlbiBPeGlnZW4gRmx1b3JpZGUKICAgICAgICBmb3IgbW9sIGluIG1vbGVjdWxlczoKICAgICAgICAgICAgbW9sLnNlYXJjaERvbm9ySHlkcm9nZW5zKCkKICAgICAgICAgICAgIyMgV2F0ZXJzIGFzIGFjY2VwdG9ycwogICAgICAgICAgICBmb3IgcGFpciBpbiBtb2wuZG9ub3JQYWlyczoKICAgICAgICAgICAgICAgICMgc2VhcmNoIGNsb3Nlc3Qgd2F0ZXIgb3hpZ2VuCiAgICAgICAgICAgICAgICBpZiBwYWlyLmNoZWNrSGJvbmQod2F0ZXJPKToKICAgICAgICAgICAgICAgICAgICB3YXRlck8uaGJvbiA9IEh5ZHJvZ2VuQm9uZCh3YXRlciwgcGFpciwgIk9BIikKICAgICAgICAgICAgICAgICAgICB3YXRlck8uaGJ0eSA9ICJPQSIKICAgICAgICAgICAgICAgICAgICB3YXRlci5veGkgPSB3YXRlck8KICAgICAgICAgICAgICAgICAgICB3YXRlci5oeWRyb2dlbmJvbmRzICs9IFtIeWRyb2dlbkJvbmQocGFpciwgd2F0ZXIsICJPQSIpXQoKICAgICNXYXRlcnMgYXMgZG9ub3JzCiAgICBmb3IgbW9sIGluIG1vbGVjdWxlczoKICAgICAgICBmb3IgYWNjZXB0b3IgaW4gbW9sLkhhY2NlcHRvcnM6CiAgICAgICAgICAgIGZvciB3YXRlciBpbiB3YXRlcnM6CiAgICAgICAgICAgICAgICBuZXdoeWRyb3MgPSBzZXQoKQogICAgICAgICAgICAgICAgZm9yIGh5ZHJvIGluIHdhdGVyLmh5ZHJvczoKICAgICAgICAgICAgICAgICAgICBIYkRpc3QgPSBhY2NlcHRvci5jYWxjRGlzdChoeWRybykKICAgICAgICAgICAgICAgICAgICBpZihNSU5IQkRJU1QgPiBIYkRpc3QpOgogICAgICAgICAgICAgICAgICAgICAgICBpZihNSU5IQkFOR0xFIDwgaHlkcm8uY2FsY0FuZ2xlKHdhdGVyLm94aSwgYWNjZXB0b3IpKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5ZHJvLmhib24gPSBIeWRyb2dlbkJvbmQoYWNjZXB0b3IsIGh5ZHJvLCAiSEQiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaHlkcm8uaGJ0eSA9ICJIRCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2h5ZHJvcy5hZGQoaHlkcm8pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXRlci5oeWRyb2dlbmJvbmRzICs9IFtIeWRyb2dlbkJvbmQoYWNjZXB0b3IsIGh5ZHJvLCAiSEQiKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCIjIiozMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJIWURST0dFTkJPTkQgRk9VTkQ6IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJhbmdsZTpcdFx0IiwgMTgwKmh5ZHJv"}}]
["a0392867992e65ed89bce0992d709ad0503f3b29-1","a0392867992e65ed89bce0992d709ad0503f3b29","PHxmaW1fcHJlZml4fD4KZnJvbSBsaXB5Yy5wYW5lbHMuUGFuZWwgaW1wb3J0IFBhbmVsCmZyb20gbGlweWMucGFuZWxzLlJpZ2h0UGFuZWwgaW1wb3J0IEluZm9QYW5lbAojZnJvbSBsaXB5Yy5zY2hlZHVsZXIgaW1wb3J0IHNjaGVkdWxlcgoKY2xhc3MgTGVmdFBhbmVsKFBhbmVsKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcHAsIG1hc3RlciwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKG1hc3Rlciwgd2lkdGg9MTUwLCAqYXJncywgKiprd2FyZ3MpCiAgICAgICAgCiAgICAgICAgc2VsZi5hcHAgPSBhcHAKICAgICAgICAKICAgICAgICBzZWxmLmluZm9QYW5lbCA9IEluZm9QYW5lbChzZWxmLCAxMCwgMTApCiAgICAgICAgICAgICAgICAKICAgICAgICBzZWxmLmluZm9QYW5lbC5ncmlkKHJvdz0wLCBjb2x1bW49MCkKICAgICAgICBzZWxmLmluZm9QYW5lbC5zaG93KCkKICAgICAgICAKCiAgICAgICAgc2VsZi5zZXRfZGlzcGxheSA9IHNlbGYuc2V0CiAgICAgICAgc2VsZi5zZXRfcGFnaW5hdGlvbiA9IHNlbGYuc2V0CiAgICAgICAKICAgICAgICBzZWxmLnNjaGVkdWxlcl9pbmZvID0gTm9uZQogICAgCiAgICBkZWYgc2V0KHNlbGYsIG9ianMpOiNkaXNwbGF5IG9ubHkgdGhlIHN0YXR1cyBvZiB0aGUgc2NoZWR1bGVyCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICByZXBvcnQgPSBzZWxmLmFwcC5saWJyYXJ5LnNjaGVkdWxlci5pbmZvKCkKICAgICAgICBpZiBzZWxmLnNjaGVkdWxlcl9pbmZvID09IHJlcG9ydDoKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgc2VsZi5zY2hlZHVsZXJfaW5mbyA9IHJlcG9ydAo8fGZpbV9lbmR8Pg=="]
["e4195c2691210940e27a9c7df2612c66a7480529-2","e4195c2691210940e27a9c7df2612c66a7480529","PHxmaW1fcHJlZml4fD4KIyBpbXBvcnQgZmx5d2hlZWwgcGFja2FnZQppbXBvcnQgZmx5d2hlZWwKZnJvbSB1dGlscy5mbHkubG9hZF9tYW5pZmVzdF9qc29uIGltcG9ydCAqCgpkZWYgaW5pdGlhbGl6ZShjb250ZXh0KToKPHxmaW1faG9sZXw+CmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBjb250ZXh0ID0gZmx5d2hlZWwuR2VhckNvbnRleHQoKSAgIyBHZXQgdGhlIGdlYXIgY29udGV4dC4KICAgIGxvZyA9IGluaXRpYWxpemUoY29udGV4dCkKPHxmaW1fc3VmZml4fD4KCiAgICAjIEFkZCBtYW5pZmVzdC5qc29uIGFzIHRoZSBtYW5pZmVzdF9qc29uIGF0dHJpYnV0ZQogICAgc2V0YXR0cihjb250ZXh0LCAnbWFuaWZlc3RfanNvbicsIGxvYWRfbWFuaWZlc3RfanNvbigpKQoKPHxmaW1fZW5kfD4="]
["f84f49ab591712d01c548d2860f68586f32619d6-1","f84f49ab591712d01c548d2860f68586f32619d6","PHxmaW1fcHJlZml4fD4KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDQuMC4xIG9uIDIwMjItMDEtMjIgMTY6NTUKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKaW1wb3J0IGRqYW5nby5kYi5tb2RlbHMuZGVsZXRpb24KCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGluaXRpYWwgPSBUcnVlCgogICAgZGVwZW5kZW5jaWVzID0gWwogICAgICAgIG1pZ3JhdGlvbnMuc3dhcHBhYmxlX2RlcGVuZGVuY3koc2V0dGluZ3MuQVVUSF9VU0VSX01PREVMKSwKICAgIF0KCiAgICBvcGVyYXRpb25zID0gWwogICAgICAgIG1pZ3JhdGlvbnMuQ3JlYXRlTW9kZWwoCiAgICAgICAgICAgIG5hbWU9J1BsYW4nLAogICAgICAgICAgICBmaWVsZHM9WwogICAgICAgICAgICAgICAgKCdpZCcsIG1vZGVscy5CaWdBdXRvRmllbGQoYXV0b19jcmVhdGVkPVRydWUsIHByaW1hcnlfa2V5PVRydWUsIHNlcmlhbGl6ZT1GYWxzZSwgdmVyYm9zZV9uYW1lPSdJRCcpKSwKICAgICAgICAgICAgICAgICgndGl0bGUnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTApKSwKICAgICAgICAgICAgICAgICgndG90YWxfY29zdCcsIG1vZGVscy5EZWNpbWFsRmllbGQoZGVjaW1hbF9wbGFjZXM9MiwgbWF4X2RpZ2l0cz01MCkpLAogICAgICAgICAgICAgICAgKCdjcmVhdGlvbl9kYXRlJywgbW9kZWxzLkRhdGVUaW1lRmllbGQoYXV0b19ub3dfYWRkPVRydWUpKSwKICAgICAgICAgICAgICAgICgncGF5bWVudF9kYXRlJywgbW9kZWxzLkRhdGVUaW1lRmllbGQoKSksCiAgICAgICAgICAgICAgICAoJ3RvdGFsX21lbWJlcnMnLCBtb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQ9MSkpLAogICAgICAgICAgICAgICAgKCd1c2VyJywgbW9kZWxzLkZvcmVpZ25LZXkob25fZGVsZXRlPWRqYW5nby5kYi5tb2RlbHMuZGVsZXRpb24uQ0FTQ0FERSwgdG89c2V0dGluZ3MuQVVUSF9VU0VSX01PREVMKSksCiAgICAgICAgICAgIF0sCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkNyZWF0ZU1vZGVsKAogICAgICAgICAgICBuYW1lPSdDb3N0cycsCiAgICAgICAgICAgIGZpZWxkcz1bCiAgICAgICAgICAgICAgICAoJ2lkJywgbW9kZWxzLkJpZ0F1dG9GaWVsZChhdXRvX2NyZWF0ZWQ9VHJ1ZSwgcHJpbWFyeV9rZXk9VHJ1ZSwgc2VyaWFsaXplPUZhbHNlLCB2ZXJib3NlX25hbWU9J0lEJykpLAogICAgICAgICAgICAgICAgKCdjb3N0X25hbWUnLCBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjAwKSksCiAgICAgICAgICAgICAgICAoJ2Nvc3QnLCBtb2RlbHMuRGVjaW1hbEZpZWxkKGRlY2ltYWxfcGxhY2VzPTIsIG1heF9kaWdpdHM9NTApKSwKICAgICAgICAgICAgICAgICgnbnVtYmVyX29mX21lbWJlcnMnLCBtb2RlbHMuSW50ZWdlckZpZWxkKCkpLAogICAgICAgICAgICAgICAgKCdwYXltZW50X2RhdGUnLCBtb2RlbHMuRGF0ZVRpbWVGaWVsZCgpKSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgKCdwbGFuJywgbW9kZWxzLkZvcmVpZ25LZXkob25fZGVsZXRlPWRqYW5nby5kYi5tb2RlbHMuZGVsZXRpb24uQ0FTQ0FERSwgdG89J2Nvc3RzcGxpdC5wbGFuJykpLAo8fGZpbV9lbmR8Pg=="]
["e476e39c32e728536b31480a6c30c137addc7748-1","e476e39c32e728536b31480a6c30c137addc7748","PHxmaW1fcHJlZml4fD4KZnJvbSB0a2ludGVyIGltcG9ydCAqCgpkZWYgY2hhbmdlX3NpemUoZXZlbnQpOgogICAgYSA9IHRleHRib3gxLmdldCgxLjAsImVuZCIpCiAgICBhID0gaW50KGEpCiAgICB0ZXh0Ym94M1snd2lkdGgnXSA9IGEKICAgIGIgPSB0ZXh0Ym94Mi5nZXQoMS4wLCAiZW5kIikKICAgIGIgPSBpbnQoYikKICAgIHRleHRib3gzWydoZWlnaHQnXSA9IGIKCmRlZiBmb2N1c19pbihldmVudCk6CiAgICB0ZXh0Ym94M1snYmcnXSA9ICd3aGl0ZScKCmRlZiBmb2N1c19vdXQoZXZlbnQpOgogICAgdGV4dGJveDNbJ2JnJ10gPSAnbGlnaHRncmV5JwoKcm9vdCA9IFRrKCkKCnRleHRib3gxID0gVGV4dCh3aWR0aD0xMCwgaGVpZ2h0PTEpCnRleHRib3gyID0gVGV4dCh3aWR0aD0xMCwgaGVpZ2h0PTEpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KYnV0MSA9IEJ1dHRvbih0ZXh0PSfQmNC30LzQtdC90LjRgtGMJyx3aWR0aD0yMCkKdGV4dGJveDMgPSBUZXh0KHdpZHRoPTMwLCBiZz0nbGlnaHRncmV5JykKCmJ1dDEuYmluZCgnPEJ1dHRvbi0xPicsIGNoYW5nZV9zaXplKQo8fGZpbV9lbmR8Pg=="]
["19caf0129d6e1aaceb443f04ce28d41b18a84105-2","19caf0129d6e1aaceb443f04ce28d41b18a84105","PHxmaW1fcHJlZml4fD4KZnJvbSBiYXNlNjQgaW1wb3J0IGI2NGVuY29kZSwgYjY0ZGVjb2RlCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE11dGFibGVNYXBwaW5nCnRyeToKICAgIGZyb20gQ3J5cHRvLkhhc2ggaW1wb3J0IE1ENSBhcyBtZDUsIFNIQSBhcyBzaGExLCBTSEEyMjQgYXMgc2hhMjI0LCBTSEEyNTYgYXMgc2hhMjU2LCBTSEEzODQgYXMgc2hhMzg0LCBTSEE1MTIgYXMgc2hhNTEyCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgIGZyb20gaGFzaGxpYiBpbXBvcnQgbWQ1LCBzaGExLCBzaGEyMjQsIHNoYTI1Niwgc2hhMzg0LCBzaGE1MTIKZnJvbSBwYmtkZjIgaW1wb3J0IFBCS0RGMgpmcm9tIHN0cnVjdCBpbXBvcnQgcGFjawpmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZGludAppbXBvcnQgcmUsIGRhdGV0aW1lLCBzeXMKClZBTElEX05JQ0tOQU1FID0gcmUuY29tcGlsZShyIlthLXpBLVpcW1xdXFxgX157fVx8XVthLXpBLVowLTktXFtcXVxcYF9ee31cfF17MCwzMX0kIikgIyB1cCB0byAzMiBjaGFyIG5pY2tzCkRVUkFUSU9OX1JFR0VYID0gcmUuY29tcGlsZShyIigoP1A8eWVhcnM+XGQrPyl5KT8oKD9QPHdlZWtzPlxkKz8pdyk/KCg/UDxkYXlzPlxkKz8pZCk/KCg/UDxob3Vycz5cZCs/KWgpPygoP1A8bWludXRlcz5cZCs/KW0pPygoP1A8c2Vjb25kcz5cZCs/KXMpPyIpCklQVjRfTUFQUEVEX0FERFIgPSByZS5jb21waWxlKHIiXjo6ZmZmZjooKFxkezEsM31cLil7M31cZHsxLDN9KSQiKQoKZGVmIGlyY19sb3dlcihzdHIpOgogICAgcmV0dXJuIHN0ci5sb3dlcigpLnJlcGxhY2UoIlsiLCJ7IikucmVwbGFjZSgiXSIsIn0iKS5yZXBsYWNlKCIvIiwifCIpLnJlcGxhY2UoIn4iLCJeIikKCmRlZiBub3coKToKICAgIHJldHVybiBkYXRldGltZS5kYXRldGltZS51dGNub3coKS5yZXBsYWNlKG1pY3Jvc2Vjb25kPTApCgpVTklYX0VQT0NIID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMTk3MCwgMSwgMSwgMCwgMCkKZGVmIGVwb2NoKHV0Y19kYXRldGltZSk6CiAgICBkZWx0YSA9IHV0Y19kYXRldGltZSAtIFVOSVhfRVBPQ0gKICAgIHJldHVybiBpbnQoZGVsdGEudG90YWxfc2Vjb25kcygpKQoKdGltZV9sZW5ndGhzID0gewogICAgInllYXJzIjogMzE1NTc2MDAsICMgMzY1LjI1IGRheXMgdG8gYXZvaWQgbGVhcCB5ZWFyIG5vbnNlbnNlCiAgICAid2Vla3MiOiA2MDQ4MDAsCiAgICAiZGF5cyI6IDg2NDAwLAogICAgImhvdXJzIjogMzYwMCwKICAgICJtaW51dGVzIjogNjAsCiAgICAic2Vjb25kcyI6IDEKfQpkZWYgcGFyc2VfZHVyYXRpb24oZHVyYXRpb25fc3RyaW5nKToKICAgICIiIgogICAgUGFyc2VzIGEgc3RyaW5nIGR1cmF0aW9uIGdpdmVuIGluIDF5MnczZDRoNW02cyBmb3JtYXQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcmV0dXJuaW5nIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2Vjb25kcwogICAgIiIiCiAgICB0cnk6ICMgYXR0ZW1wdCB0byBwYXJzZSBhcyBhIG51bWJlciBvZiBzZWNvbmRzIGlmIHdlIGdldCBqdXN0IGEgbnVtYmVyIGJlZm9yZSB3ZSBnbyB0aHJvdWdoIHRoZSBwYXJzaW5nIHByb2Nlc3MKICAgICAgICByZXR1cm4gaW50KGR1cmF0aW9uX3N0cmluZykKPHxmaW1fZW5kfD4="]
["08f4c15710b6508d86529c76053710190b41a963-1","08f4c15710b6508d86529c76053710190b41a963","PHxmaW1fcHJlZml4fD4KIiIiClRlbXBvcmFyeSBTSUJJUyBMb2dnaW5nCiIiIgppbXBvcnQganNvbgoKZGVmIGxvZ2dpbmcoaWQsIG1lc3NhZ2UsICoqa3dhcmdzKToKICAgIGxvZyA9IGRpY3QoZXhwZXJpbWVudF9zaXRlX2lkPWlkLAogICAgICAgICAgICAgICBlcnJvcj1tZXNzYWdlKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBsb2cudXBkYXRlKGt3YXJncykKICAgIHByaW50KGpzb24uZHVtcHMobG9nLCBzb3J0X2tleXM9VHJ1ZSkpCjx8ZmltX2VuZHw+"]
["cd7e728b9a9d2261308a0d87ec030cc9ebf80e8c-2","cd7e728b9a9d2261308a0d87ec030cc9ebf80e8c","PHxmaW1fcHJlZml4fD4KIiIiU2VudGltZW50IGFuYWx5c2lzIG9mIG1vdmllIHJldmlldyBleGFtcGxlIGRhdGFzZXQgaGFuZGxpbmcuCgoiIiIKX19hdXRob3JfXyA9ICdQYXVsIExhbmRlcycKCmZyb20gdHlwaW5nIGltcG9ydCBUdXBsZSwgVHlwZQpmcm9tIGRhdGFjbGFzc2VzIGltcG9ydCBkYXRhY2xhc3MsIGZpZWxkCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzeXMKZnJvbSBpbyBpbXBvcnQgVGV4dElPQmFzZQo8fGZpbV9ob2xlfD4KZnJvbSB6ZW5zb2xzLmRlZXBsZWFybi5iYXRjaCBpbXBvcnQgKAogICAgQmF0Y2gsCiAgICBCYXRjaEZlYXR1cmVNYXBwaW5nLAogICAgTWFuYWdlckZlYXR1cmVNYXBwaW5nLAogICAgRmllbGRGZWF0dXJlTWFwcGluZywKKQpmcm9tIHplbnNvbHMubmxwIGltcG9ydCBGZWF0dXJlRG9jdW1lbnQKZnJvbSB6ZW5zb2xzLmRlZXBubHAuYmF0Y2ggaW1wb3J0IEZlYXR1cmVEb2N1bWVudERhdGFQb2ludApmcm9tIHplbnNvbHMuZGVlcG5scC5jbGFzc2lmeSBpbXBvcnQgQ2xhc3NpZmljYXRpb25QcmVkaWN0aW9uTWFwcGVyCmZyb20gemVuc29scy5kZWVwbmxwLmZlYXR1cmUgaW1wb3J0IERvY3VtZW50RmVhdHVyZVN0YXNoCmZyb20gLiBpbXBvcnQgRGF0YXNldEZhY3RvcnkKCmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCkBkYXRhY2xhc3MKY2xhc3MgUmV2aWV3Um93U3Rhc2goU3BsaXRLZXlEYXRhZnJhbWVTdGFzaCk6CiAgICAiIiJBIGRhdGFmcmFtZSBiYXNlZCBzdGFzaCBzaW5jZSBvdXIgZGF0YSBoYXBwZW5zIHRvIGJlIGNvbXBvc2VkIG9mIGNvbW1hCiAgICBzZXBhcmF0ZSBmaWxlcy4KCiAgICA6cGFyYW0gZGF0YXNldF9mYWN0b3J5OiB0aGUgY2xhc3MgdGhhdCBwYXJzZXMgdGhlIG9yaWdpbmFsIGNvcnBvcmEgZmlsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhbnMgdGhlIGRhdGEsIGNyZWF0ZXMgYSBQYW5kYXMgZGF0YWZyYW1lCgogICAgIiIiCiAgICBBVFRSX0VYUF9NRVRBID0gKCdkYXRhc2V0X2ZhY3RvcnknLCkKCiAgICBkYXRhc2V0X2ZhY3Rvcnk6IERhdGFzZXRGYWN0b3J5CgogICAgZGVmIF9nZXRfZGF0YWZyYW1lKHNlbGYpIC0+IHBkLkRhdGFGcmFtZToKICAgICAgICByZXR1cm4gc2VsZi5kYXRhc2V0X2ZhY3RvcnkuZGF0YXNldAoKCkBkYXRhY2xhc3MKY2xhc3MgUmV2aWV3KEZlYXR1cmVEb2N1bWVudCk6CiAgICAiIiJSZXByZXNlbnRzIGEgbW92aWUgcmV2aWV3IGNvbnRhaW5pbmcgdGhlIHRleHQgb2YgdGhhdCByZXZpZXcsIGFuZCB0aGUgbGFiZWwKICAgIChnb29kL2JhZCA9PiBwb3NpdGl2ZS9uZWdhdGl2ZSkuCgogICAgIiIiCgogICAgcG9sYXJpdHk6IHN0ciA9IGZpZWxkKGRlZmF1bHQ9Tm9uZSkKICAgICIiIlRoZSBwb2xhcml0eSwgZWl0aGVyIHBvc2l0aXRpdmUgKGBgcGApYCBvciBuZWdhdGl2ZSAoYGBuYGApIG9mIHRoZQogICAgcmV2aWV3LiAgVGhpcyB0YWtlcyB2YWx1ZXMgb2YgYGBOb25lYGAgZm9yIGFkLWhvYyBwcmVkaWN0aW9ucy4KCiAgICBOb3RlIHdlIGNvdWxkIGhhdmUgb3ZlcnJpZGRlbgogICAgOmNsYXNzOmB6ZW5zb2xzLmRlZXBubHAuY2xhc3NpZnkuQ2xhc3NpZmljYXRpb25QcmVkaWN0aW9uTWFwcGVyYCB0byBjcmVhdGUKICAgIHdpdGggYW4gYWRkaXRpb25hbCBgYE5vbmVgYCB2YWx1ZS4KCiAgICAiIiIKCiAgICBjb25maWRlbmNlOiBmbG9hdCA9IGZpZWxkKGRlZmF1bHQ9Tm9uZSkKICAgICIiIkEgcHJvYmFibHkgb2YgdGhlIGNvbmZpZGVuY2Ugb2YgdGhlIHByZWRpY3Rpb24uIiIiCgogICAgIyB3ZSBoYXZlIHRvIGFkZCB0aGlzIG1ldGhvZCB0byB0ZWxsIHRoZSBmcmFtZXdvcmsgaG93IHRvIGNvbWJpbmUgbXVsdGlwbGUKICAgICMgaW5zdGFuY2VzIG9mIHJldmlldyAnZG9jdW1lbnRzJyB3aGVuIGJhdGNoaW5nIG1hbnkgc2VudGVuY2VzIChhcwogICAgIyBkb2N1bWVudHMpIGluIHRvIG9uZSBkb2N1bWVudCAodGhlIGVudGlyZSBiYXRjaCkKICAgIGRlZiBfY29tYmluZV9kb2N1bWVudHMoc2VsZiwgZG9jczogVHVwbGVbRmVhdHVyZURvY3VtZW50XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBUeXBlW0ZlYXR1cmVEb2N1bWVudF0pIC0+IEZlYXR1cmVEb2N1bWVudDoKICAgICAgICByZXR1cm4gc3VwZXIoKS5fY29tYmluZV9kb2N1bWVudHMoZG9jcywgRmVhdHVyZURvY3VtZW50KQoKICAgIGRlZiB3cml0ZShzZWxmLCBkZXB0aDogaW50ID0gMCwgd3JpdGVyOiBUZXh0SU9CYXNlID0gc3lzLnN0ZG91dCk6CiAgICAgICAgaWYgc2VsZi5wb2xhcml0eSBpcyBOb25lOgogICAgICAgICAgICBwb2wgPSAnPG5vbmU+JwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHBvbCA9ICdwb3NpdGl2ZScgaWYgc2VsZi5wb2xhcml0eSA9PSAncCcgZWxzZSAnbmVnYXRpdmUnCiAgICAgICAgc3VwZXIoKS53cml0ZShkZXB0aCwgd3JpdGVyKQogICAgICAgIHNlbGYuX3dyaXRlX2xpbmUoZidwb2xhcml0eToge3BvbH0nLCBkZXB0aCArIDEsIHdyaXRlcikKICAgICAgICBzZWxmLl93cml0ZV9saW5lKGYnY29uZmlkZW5jZToge3NlbGYuY29uZmlkZW5jZX0nLCBkZXB0aCArIDEsIHdyaXRlcikKCgpAZGF0YWNsYXNzCmNsYXNzIFJldmlld0ZlYXR1cmVTdGFzaChEb2N1bWVudEZlYXR1cmVTdGFzaCk6CiAgICAiIiJBIHN0YXNoIHRoYXQgc3Bhd25zIHByb2Nlc3NlcyB0byBwYXJzZSB0aGUgdXR0ZXJhbmNlcyBhbmQgY3JlYXRlcyBpbnN0YW5jZXMKICAgIG9mIDpjbGFzczpgLlJldmlld2AuCgogICAgIiIiCiAgICBkZWYgX19wb3N0X2luaXRfXyhzZWxmKToKICAgICAgICBzdXBlcigpLl9fcG9zdF9pbml0X18oKQogICAgICAgICMgdGVsbCB0aGUgZG9jdW1lbnQgcGFyc2VyIHRvIGNyZWF0ZSBpbnN0YW5jZXMgb2YgYFJldmlld2AgcmF0aGVyIHRoYW4KICAgICAgICAjIHRoZSBkZWZhdWx0IGBGZWF0dXJlRG9jdW1lbnRgLgogICAgICAgIHNlbGYudmVjX21hbmFnZXIuZG9jX3BhcnNlci5kb2NfY2xhc3MgPSBSZXZpZXcKCiAgICBkZWYgX3BhcnNlX2RvY3VtZW50KHNlbGYsIGlkOiBpbnQsIHJvdzogcGQuU2VyaWVzKSAtPiBSZXZpZXc6CiAgICAgICAgIyB0ZXh0IHRvIHBhcnNlIHdpdGggU3BhQ3kKICAgICAgICB0ZXh0ID0gcm93WydzZW50ZW5jZSddCiAgICAgICAgIyB0aGUgY2xhc3MgbGFiZWwKICAgICAgICBwb2xhcml0eSA9IHJvd1sncG9sYXJpdHknXQogICAgICAgIHJldHVybiBzZWxmLnZlY19tYW5hZ2VyLnBhcnNlKHRleHQsIHBvbGFyaXR5KQoKCkBkYXRhY2xhc3MKY2xhc3MgUmV2aWV3UHJlZGljdGlvbk1hcHBlcihDbGFzc2lmaWNhdGlvblByZWRpY3Rpb25NYXBwZXIpOgogICAgIiIiQWRkcyB0aGUgYGBwb2xhcml0eWBgIGF0dHJpYnV0ZSBhcyB0aGUgcmV2aWV3J3Mgc2VudGltZW50IHByZWRpY3Rpb24uCgogICAgIiIiCiAgICBkZWYgbWFwX3Jlc3VsdHMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKSAtPiBUdXBsZVtSZXZpZXddOgogICAgICAgIHJlczogU2V0dGluZ3MgPSBzdXBlcigpLm1hcF9yZXN1bHRzKCphcmdzLCAqKmt3YXJncykKICAgICAgICBmb3IgY2wsIGRvYywgbG9naXRzIGluIHppcChyZXMuY2xhc3NlcywgcmVzLmRvY3MsIHJlcy5sb2dpdHMpOgogICAgICAgICAgICBjb25mID0gbnAuZXhwKGxvZ2l0cykgLyBzdW0obnAuZXhwKGxvZ2l0cykpCiAgICAgICAgICAgICMgbmVnYXRpdmUgbGFiZWwgaXMgdGhlIGZpcnN0IG5vbWluYWwKICAgICAgICAgICAgZG9jLmNvbmZpZGVuY2UgPSBjb25mWzAgaWYgY2wgPT0gJ24nIGVsc2UgMV0KICAgICAgICAgICAgZG9jLnBvbGFyaXR5ID0gY2wKICAgICAgICByZXR1cm4gdHVwbGUocmVzLmRvY3MpCgoKQGRhdGFjbGFzcwpjbGFzcyBSZXZpZXdEYXRhUG9pbnQoRmVhdHVyZURvY3VtZW50RGF0YVBvaW50KToKICAgICIiIkEgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRhIGZvciBhIHJlaXZldyBkb2N1bWVudCBjb250YWluaW5nIHRoZSBzZW50aW1lbnQKICAgIHBvbGFyaXR5IGFzIHRoZSBsYWJlbC4KCiAgICAiIiIKICAgIEBwcm9wZXJ0eQogICAgZGVmIGxhYmVsKHNlbGYpIC0+IHN0cjoKICAgICAgICByZXR1cm4gc2VsZi5kb2MucG9sYXJpdHkKCgpAZGF0YWNsYXNzCmNsYXNzIFJldmlld0JhdGNoKEJhdGNoKToKICAgIExBTkdVQUdFX0ZFQVRVUkVfTUFOQUdFUl9OQU1FID0gJ2xhbmd1YWdlX2ZlYXR1cmVfbWFuYWdlcicKICAgIEdMT1ZFXzUwX0VNQkVERElORyA9ICdnbG92ZV81MF9lbWJlZGRpbmcnCiAgICBHTE9WRV8zMDBfRU1CRURESU5HID0gJ2dsb3ZlXzMwMF9lbWJlZGRpbmcnCiAgICBXT1JEMlZFQ18zMDBfRU1CRURESU5HID0gJ3dvcmQydmVjXzMwMF9lbWJlZGRpbmcnCiAgICBUUkFOU0ZPUk1FUl9GSVhFRF9FTUJFRERJTkcgPSAndHJhbnNmb3JtZXJfZml4ZWRfZW1iZWRkaW5nJwogICAgVFJBTlNGT1JNRVJfVFJBSU5BQkxFX0VNQkVERElORyA9ICd0cmFuc2Zvcm1lcl90cmFpbmFibGVfZW1iZWRkaW5nJwogICAgRU1CRURESU5HX0FUVFJJQlVURVMgPSB7R0xPVkVfNTBfRU1CRURESU5HLCBHTE9WRV8zMDBfRU1CRURESU5HLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgV09SRDJWRUNfMzAwX0VNQkVERElORywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQU5TRk9STUVSX0ZJWEVEX0VNQkVERElORywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQU5TRk9STUVSX1RSQUlOQUJMRV9FTUJFRERJTkd9CiAgICBTVEFUU19BVFRSSUJVVEUgPSAnc3RhdHMnCiAgICBFTlVNU19BVFRSSUJVVEUgPSAnZW51bXMnCiAgICBDT1VOVFNfQVRUUklCVVRFID0gJ2NvdW50cycKICAgIERFUEVOREVOQ0lFU19BVFRSSUJVVEUgPSAnZGVwZW5kZW5jaWVzJwogICAgRU5VTV9FWFBBTkRFUl9BVFRSSUJVVEUgPSAnZW51bV9leHBhbmRlcicKICAgIERFUEVOREVOQ1lfRVhQQU5ERVJfQVRUUklCVEUgPSAnZGVwX2V4cGFuZGVyJwogICAgTEFOR1VBR0VfQVRUUklCVVRFUyA9IHtTVEFUU19BVFRSSUJVVEUsIEVOVU1TX0FUVFJJQlVURSwgQ09VTlRTX0FUVFJJQlVURSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgREVQRU5ERU5DSUVTX0FUVFJJQlVURSwgRU5VTV9FWFBBTkRFUl9BVFRSSUJVVEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIERFUEVOREVOQ1lfRVhQQU5ERVJfQVRUUklCVEV9CiAgICBNQVBQSU5HUyA9IEJhdGNoRmVhdHVyZU1hcHBpbmcoCiAgICAgICAgJ2xhYmVsJywKICAgICAgICBbTWFuYWdlckZlYXR1cmVNYXBwaW5nKAogICAgICAgICAgICAnbGFiZWxfdmVjdG9yaXplcl9tYW5hZ2VyJywKICAgICAgICAgICAgKEZpZWxkRmVhdHVyZU1hcHBpbmcoJ2xhYmVsJywgJ3J2bGFiZWwnLCBUcnVlKSwpKSwKICAgICAgICAgTWFuYWdlckZlYXR1cmVNYXBwaW5nKAogICAgICAgICAgICAgTEFOR1VBR0VfRkVBVFVSRV9NQU5BR0VSX05BTUUsCiAgICAgICAgICAgICAoRmllbGRGZWF0dXJlTWFwcGluZyhHTE9WRV81MF9FTUJFRERJTkcsICd3dmdsb3ZlNTAnLCBUcnVlLCAnZG9jJyksCiAgICAgICAgICAgICAgRmllbGRGZWF0dXJlTWFwcGluZyhHTE9WRV8zMDBfRU1CRURESU5HLCAnd3ZnbG92ZTMwMCcsIFRydWUsICdkb2MnKSwKICAgICAgICAgICAgICBGaWVsZEZlYXR1cmVNYXBwaW5nKFdPUkQyVkVDXzMwMF9FTUJFRERJTkcsICd3MnYzMDAnLCBUcnVlLCAnZG9jJyksCiAgICAgICAgICAgICAgRmllbGRGZWF0dXJlTWFwcGluZyhUUkFOU0ZPUk1FUl9GSVhFRF9FTUJFRERJTkcsICd0cmFuc2Zvcm1lcl9maXhlZCcsIFRydWUsICdkb2MnKSwKICAgICAgICAgICAgICBGaWVsZEZlYXR1cmVNYXBwaW5nKFRSQU5TRk9STUVSX1RSQUlOQUJMRV9FTUJFRERJTkcsICd0cmFuc2Zvcm1lcl90cmFpbmFibGUnLCBUcnVlLCAnZG9jJyksCiAgICAgICAgICAgICAgRmllbGRGZWF0dXJlTWFwcGluZyhTVEFUU19BVFRSSUJVVEUsICdzdGF0cycsIEZhbHNlLCAnZG9jJyksCiAgICAgICAgICAgICAgRmllbGRGZWF0dXJlTWFwcGluZyhFTlVNU19BVFRSSUJVVEUsICdlbnVtJywgVHJ1ZSwgJ2RvYycpLAogICAgICAgICAgICAgIEZpZWxkRmVhdHVyZU1hcHBpbmcoQ09VTlRTX0FUVFJJQlVURSwgJ2NvdW50JywgVHJ1ZSwgJ2RvYycpLAogICAgICAgICAgICAgIEZpZWxkRmVhdHVyZU1hcHBpbmcoREVQRU5ERU5DSUVTX0FUVFJJQlVURSwgJ2RlcCcsIFRydWUsICdkb2MnKSwKICAgICAgICAgICAgICBGaWVsZEZlYXR1cmVNYXBwaW5nKEVOVU1fRVhQQU5ERVJfQVRUUklCVVRFLCAndHJhbnNmb3JtZXJfZW51bV9leHBhbmRlcicsIFRydWUsICdkb2MnKSwKICAgICAgICAgICAgICBGaWVsZEZlYXR1cmVNYXBwaW5nKERFUEVOREVOQ1lfRVhQQU5ERVJfQVRUUklCVEUsICd0cmFuc2Zvcm1lcl9kZXBfZXhwYW5kZXInLCBUcnVlLCAnZG9jJyksCiAgICAgICAgICAgICAgKSldKQoKICAgIGRlZiBfZ2V0X2JhdGNoX2ZlYXR1cmVfbWFwcGluZ3Moc2VsZikgLT4gQmF0Y2hGZWF0dXJlTWFwcGluZzoKICAgICAgICByZXR1cm4gc2VsZi5NQVBQSU5HUwo8fGZpbV9zdWZmaXh8PgppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBudW1weSBhcyBucApmcm9tIHplbnNvbHMuY29uZmlnIGltcG9ydCBTZXR0aW5ncwpmcm9tIHplbnNvbHMuZGF0YWZyYW1lIGltcG9ydCBTcGxpdEtleURhdGFmcmFtZVN0YXNoCjx8ZmltX2VuZHw+"]
["e4b58283ae57e6e91b775b08c4c13d41d9220292-3","e4b58283ae57e6e91b775b08c4c13d41d9220292","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMjAgR3JhcGhjb3JlIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKaW1wb3J0IHRvcmNoCmltcG9ydCB0b3JjaHZpc2lvbgppbXBvcnQgcG9wdG9yY2gKaW1wb3J0IGxvZ2dpbmcKZnJvbSAubW9kZWxfbWFuaXB1bGF0b3IgaW1wb3J0IGNyZWF0ZV9lZmZpY2llbnRuZXQsIHJlc2lkdWFsX25vcm1sYXllcl9pbml0LCByZXBsYWNlX2xheWVyLCBnZXRfbW9kdWxlX2FuZF9wYXJlbnRfYnlfbmFtZSwgbG9hZF9tb2RpZmllZF9tb2RlbCwgZnVsbF9wcmVjaXNpb25fbm9ybSwgcmVjb21wdXRlX21vZGVsCmltcG9ydCBzeXMKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICAgICAgJ3Jlc25ldDM0JzogeyJtb2RlbCI6IHRvcmNodmlzaW9uLm1vZGVscy5yZXNuZXQzNCwgImlucHV0X3NoYXBlIjogKDMsIDIyNCwgMjI0KX0sCiAgICAgICAgICAgICAgICAgICAgJ3Jlc25ldDUwJzogeyJtb2RlbCI6IHRvcmNodmlzaW9uLm1vZGVscy5yZXNuZXQ1MCwgImlucHV0X3NoYXBlIjogKDMsIDIyNCwgMjI0KX0sCiAgICAgICAgICAgICAgICAgICAgJ3Jlc25ldDEwMSc6IHsibW9kZWwiOiB0b3JjaHZpc2lvbi5tb2RlbHMucmVzbmV0MTAxLCAiaW5wdXRfc2hhcGUiOiAoMywgMjI0LCAyMjQpfSwKICAgICAgICAgICAgICAgICAgICAncmVzbmV0MTUyJzogeyJtb2RlbCI6IHRvcmNodmlzaW9uLm1vZGVscy5yZXNuZXQxNTIsICJpbnB1dF9zaGFwZSI6ICgzLCAyMjQsIDIyNCl9LAogICAgICAgICAgICAgICAgICAgICdyZXNuZXh0NTAnOiB7Im1vZGVsIjogdG9yY2h2aXNpb24ubW9kZWxzLnJlc25leHQ1MF8zMng0ZCwgImlucHV0X3NoYXBlIjogKDMsIDIyNCwgMjI0KX0sCiAgICAgICAgICAgICAgICAgICAgJ3Jlc25leHQxMDEnOiB7Im1vZGVsIjogdG9yY2h2aXNpb24ubW9kZWxzLnJlc25leHQxMDFfMzJ4OGQsICJpbnB1dF9zaGFwZSI6ICgzLCAyMjQsIDIyNCl9LAogICAgICAgICAgICAgICAgICAgICdtb2JpbGVuZXQnOiB7Im1vZGVsIjogdG9yY2h2aXNpb24ubW9kZWxzLm1vYmlsZW5ldF92MiwgImlucHV0X3NoYXBlIjogKDMsIDIyNCwgMjI0KX0sCiAgICAgICAgICAgICAgICAgICAgJ2VmZmljaWVudG5ldC1iMCc6IHsibW9kZWwiOiBwYXJ0aWFsKGNyZWF0ZV9lZmZpY2llbnRuZXQsICdlZmZpY2llbnRuZXQtYjAnKSwgImlucHV0X3NoYXBlIjogKDMsIDIyNCwgMjI0KX0sCiAgICAgICAgICAgICAgICAgICAgJ2VmZmljaWVudG5ldC1iMSc6IHsibW9kZWwiOiBwYXJ0aWFsKGNyZWF0ZV9lZmZpY2llbnRuZXQsICdlZmZpY2llbnRuZXQtYjEnKSwgImlucHV0X3NoYXBlIjogKDMsIDI0MCwgMjQwKX0sCiAgICAgICAgICAgICAgICAgICAgJ2VmZmljaWVudG5ldC1iMic6IHsibW9kZWwiOiBwYXJ0aWFsKGNyZWF0ZV9lZmZpY2llbnRuZXQsICdlZmZpY2llbnRuZXQtYjInKSwgImlucHV0X3NoYXBlIjogKDMsIDI2MCwgMjYwKX0sCiAgICAgICAgICAgICAgICAgICAgJ2VmZmljaWVudG5ldC1iMyc6IHsibW9kZWwiOiBwYXJ0aWFsKGNyZWF0ZV9lZmZpY2llbnRuZXQsICdlZmZpY2llbnRuZXQtYjMnKSwgImlucHV0X3NoYXBlIjogKDMsIDMwMCwgMzAwKX0sCiAgICAgICAgICAgICAgICAgICAgJ2VmZmljaWVudG5ldC1iNCc6IHsibW9kZWwiOiBwYXJ0aWFsKGNyZWF0ZV9lZmZpY2llbnRuZXQsICdlZmZpY2llbnRuZXQtYjQnKSwgImlucHV0X3NoYXBlIjogKDMsIDM4MCwgMzgwKX0sCiAgICAgICAgICAgICAgICAgICAgJ2VmZmljaWVudG5ldC1iNSc6IHsibW9kZWwiOiBwYXJ0aWFsKGNyZWF0ZV9lZmZpY2llbnRuZXQsICdlZmZpY2llbnRuZXQtYjUnKSwgImlucHV0X3NoYXBlIjogKDMsIDQ1NiwgNDU2KX0sCiAgICAgICAgICAgICAgICAgICAgJ2VmZmljaWVudG5ldC1iNic6IHsibW9kZWwiOiBwYXJ0aWFsKGNyZWF0ZV9lZmZpY2llbnRuZXQsICdlZmZpY2llbnRuZXQtYjYnKSwgImlucHV0X3NoYXBlIjogKDMsIDUyOCwgNTI4KX0sCiAgICAgICAgICAgICAgICAgICAgJ2VmZmljaWVudG5ldC1iNyc6IHsibW9kZWwiOiBwYXJ0aWFsKGNyZWF0ZV9lZmZpY2llbnRuZXQsICdlZmZpY2llbnRuZXQtYjcnKSwgImlucHV0X3NoYXBlIjogKDMsIDYwMCwgNjAwKX0KICAgICAgICAgICAgICAgICAgICB9CgoKZGVmIGdldF9tb2RlbChvcHRzLCBkYXRhX2luZm8sIHByZXRyYWluZWQ9VHJ1ZSk6CiAgICAiIiIKICAgIHBhcmFtczoKICAgIG9wdHM6IGNvbnRhaW5zIHRoZSB1c2VyIGRlZmluZWQgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMKICAgIGRhdGEgaW5mbzogdGhlIGlucHV0IGFuZCB0aGUgb3V0cHV0IHNoYXBlIG9mIHRoZSBkYXRhCiAgICBwcmV0cmFpbjogaWYgaXQgaXMgdHJ1ZSB0aGUgd2VpZ2h0cyBhcmUgbG9hZGVkIGZyb20gYSBwdWJsaWNseSBhdmFpbGFibGUgcHJldHJhaW5lZCBtb2RlbAogICAgIiIiCiAgICBub3JtX2xheWVyID0gZ2V0X25vcm1fbGF5ZXIob3B0cykKCiAgICBpZiBvcHRzLm1vZGVsIGluIGF2YWlsYWJsZV9tb2RlbHM6CiAgICAgICAgaWYgJ2VmZmljaWVudG5ldCcgaW4gb3B0cy5tb2RlbDoKICAgICAgICAgICAgbW9kZWwgPSBhdmFpbGFibGVfbW9kZWxzW29wdHMubW9kZWxdWyJtb2RlbCJdKHByZXRyYWluZWQ9cHJldHJhaW5lZCwgbnVtX2NsYXNzZXM9ZGF0YV9pbmZvWyJvdXQiXSwgbm9ybV9sYXllcj1ub3JtX2xheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kX3JhdGlvPW9wdHMuZWZmaWNpZW50bmV0X2V4cGFuZF9yYXRpbywgZ3JvdXBfZGltPW9wdHMuZWZmaWNpZW50bmV0X2dyb3VwX2RpbSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBtb2RlbCA9IGF2YWlsYWJsZV9tb2RlbHNbb3B0cy5tb2RlbF1bIm1vZGVsIl0ocHJldHJhaW5lZD1GYWxzZSwgbnVtX2NsYXNzZXM9ZGF0YV9pbmZvWyJvdXQiXSwgbm9ybV9sYXllcj1ub3JtX2xheWVyKQogICAgICAgICAgICBpZiAicmVzbmV0IiBpbiBvcHRzLm1vZGVsIG9yICJyZXNuZXh0IiBpbiBvcHRzLm1vZGVsOgogICAgICAgICAgICAgICAgcmVzaWR1YWxfbm9ybWxheWVyX2luaXQobW9kZWwpICAjIEN1c3RvbSBpbml0IGZvciBiZXR0ZXIgdHJhaW5pbmcKICAgICAgICAgICAgaWYgcHJldHJhaW5lZDoKICAgICAgICAgICAgICAgIG1vZGVsID0gbG9hZF9tb2RpZmllZF9tb2RlbChtb2RlbCwgb3B0cy5tb2RlbCkKCiAgICBpZiBsZW4ob3B0cy5waXBlbGluZV9zcGxpdHMpID4gMDoKICAgICAgICBwaXBlbGluZV9tb2RlbChtb2RlbCwgb3B0cy5waXBlbGluZV9zcGxpdHMpCgogICAgaWYgb3B0cy5wcmVjaXNpb25bLTM6XSA9PSAiLjE2IjoKICAgICAgICBtb2RlbC5oYWxmKCkKICAgICAgICBpZiBvcHRzLmZ1bGxfcHJlY2lzaW9uX25vcm06CiAgICAgICAgICAgIGlmIG9wdHMubm9ybV90eXBlID09ICJiYXRjaCI6CiAgICAgICAgICAgICAgICBub3JtX2xheWVyID0gdG9yY2gubm4uQmF0Y2hOb3JtMmQKICAgICAgICAgICAgICAgIGZ1bGxfcHJlY2lzaW9uX25vcm0obW9kZWwsIG5vcm1fbGF5ZXIpCiAgICAgICAgICAgIGVsaWYgb3B0cy5ub3JtX3R5cGUgPT0gImdyb3VwIjoKICAgICAgICAgICAgICAgIG5vcm1fbGF5ZXIgPSB0b3JjaC5ubi5Hcm91cE5vcm0KICAgICAgICAgICAgICAgIGZ1bGxfcHJlY2lzaW9uX25vcm0obW9kZWwsIG5vcm1fbGF5ZXIpCgogICAgaWYgaGFzYXR0cihvcHRzLCAicmVjb21wdXRlX2NoZWNrcG9pbnRzIikgYW5kIGxlbihvcHRzLnJlY29tcHV0ZV9jaGVja3BvaW50cykgPiAwOgogICAgICAgIHJlY29tcHV0ZV9tb2RlbChtb2RlbCwgb3B0cy5yZWNvbXB1dGVfY2hlY2twb2ludHMpCgogICAgaWYgb3B0cy5ub3JtYWxpemF0aW9uX2xvY2F0aW9uID09ICJpcHUiOgogICAgICAgIGNhc3QgPSAiaGFsZiIgaWYgb3B0cy5wcmVjaXNpb25bOjNdID09ICIxNi4iIGVsc2UgImZ1bGwiCiAgICAgICAgbW9kZWwgPSBOb3JtYWxpemVJbnB1dE1vZGVsKG1vZGVsLCBkYXRhc2V0cy5ub3JtYWxpemF0aW9uX3BhcmFtZXRlcnNbIm1lYW4iXSwgZGF0YXNldHMubm9ybWFsaXphdGlvbl9wYXJhbWV0ZXJzWyJzdGQiXSwgb3V0cHV0X2Nhc3Q9Y2FzdCkKCgogICAgbG9nZ2luZy5pbmZvKG1vZGVsKQoKICAgIHJldHVybiBtb2RlbAoKCmRlZiBwaXBlbGluZV9tb2RlbChtb2RlbCwgcGlwZWxpbmVfc3BsaXRzKToKICAgICIiIgogICAgU3BsaXQgdGhlIG1vZGVsIGludG8gc3RhZ2VzLgogICAgIiIiCiAgICBmb3IgbmFtZSwgbW9kdWxlcyBpbiBtb2RlbC5uYW1lZF9tb2R1bGVzKCk6CiAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgnLicsICcvJykKICAgICAgICBpZiBuYW1lIGluIHBpcGVsaW5lX3NwbGl0czoKICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCctLS0tLS0tLScpCiAgICAgICAgbG9nZ2luZy5pbmZvKG5hbWUpCgogICAgZm9yIHNwbGl0X2lkeCwgc3BsaXQgaW4gZW51bWVyYXRlKHBpcGVsaW5lX3NwbGl0cyk6CiAgICAgICAgc3BsaXRfdG9rZW5zID0gc3BsaXQuc3BsaXQoJy8nKQogICAgICAgIGxvZ2dpbmcuaW5mbyhmJ1Byb2Nlc3NpbmcgcGlwZWxpbmUgc3BsaXQge3NwbGl0X3Rva2Vuc30nKQogICAgICAgIHBhcmVudCwgbm9kZSwgZmllbGRfb3JfaWR4X3N0ciA9IGdldF9tb2R1bGVfYW5kX3BhcmVudF9ieV9uYW1lKG1vZGVsLCBzcGxpdF90b2tlbnMpCiAgICAgICAgaWYgcGFyZW50IGlzIE5vbmU6CiAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoZidTcGxpdCB7c3BsaXR9IG5vdCBmb3VuZCcpCiAgICAgICAgICAgIHN5cy5leGl0KCkKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXBsYWNlX2xheWVyKHBhcmVudCwgZmllbGRfb3JfaWR4X3N0ciwgcG9wdG9yY2guQmVnaW5CbG9jayhpcHVfaWQ9c3BsaXRfaWR4KzEsIGxheWVyX3RvX2NhbGw9bm9kZSkpCgoKZGVmIGdldF9ub3JtX2xheWVyKG9wdHMpOgogICAgaWYgb3B0cy5ub3JtX3R5cGUgPT0gIm5vbmUiOgogICAgICAgIHJldHVybiB0b3JjaC5ubi5JZGVudGl0eQogICAgZWxpZiBvcHRzLm5vcm1fdHlwZSA9PSAiYmF0Y2giOgogICAgICAgIHJldHVybiBsYW1iZGEgeDogdG9yY2gubm4uQmF0Y2hOb3JtMmQoeCwgbW9tZW50dW09b3B0cy5iYXRjaG5vcm1fbW9tZW50dW0pCiAgICBlbGlmIG9wdHMubm9ybV90eXBlID09ICJncm91cCI6CiAgICAgICAgcmV0dXJuIGxhbWJkYSB4OiB0b3JjaC5ubi5Hcm91cE5vcm0ob3B0cy5ub3JtX251bV9ncm91cHMsIHgpCgoKY2xhc3MgTm9ybWFsaXplSW5wdXRNb2RlbCh0b3JjaC5ubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBtZWFuLCBzdGQsIG91dHB1dF9jYXN0PU5vbmUpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYubW9kZWwgPSBtb2RlbAogICAgICAgIG1lYW4gPSB0b3JjaC5hc190ZW5zb3IobWVhbikKICAgICAgICBzdGQgPSB0b3JjaC5hc190ZW5zb3Ioc3RkKQogICAgICAgIHNlbGYubXVsID0gKDEuMC8oMjU1LjAgKiBzdGQpKS52aWV3KC0xLCAxLCAxKQogICAgICAgIHNlbGYuc3ViID0gKG1lYW4gLyBzdGQpLnZpZXcoLTEsIDEsIDEpCiAgICAgICAgc2VsZi5vdXRwdXRfY2FzdCA9IG91dHB1dF9jYXN0CiAgICAgICAgaWYgb3V0cHV0X2Nhc3QgPT0gImZ1bGwiOgogICAgICAgICAgICBzZWxmLm11bCwgc2VsZi5zdWIgPSBzZWxmLm11bC5mbG9hdCgpLCBzZWxmLnN1Yi5mbG9hdCgpCiAgICAgICAgZWxpZiBvdXRwdXRfY2FzdCA9PSAiaGFsZiI6CiAgICAgICAgICAgIHNlbGYubXVsLCBzZWxmLnN1YiA9IHNlbGYubXVsLmhhbGYoKSwgc2VsZi5zdWIuaGFsZigpCgoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIGltZyk6CiAgICAgICAgaWYgc2VsZi5vdXRwdXRfY2FzdCA9PSAiaGFsZiI6CiAgICAgICAgICAgIGltZyA9IGltZy5oYWxmKCkKICAgICAgICBlbGlmIHNlbGYub3V0cHV0X2Nhc3QgPT0gImZ1bGwiOgogICAgICAgICAgICBpbWcgPSBpbWcuZmxvYXQoKQogICAgICAgIGltZyA9IGltZy5tdWwoc2VsZi5tdWwpCiAgICAgICAgaW1nID0gaW1nLnN1YihzZWxmLnN1YikKICAgICAgICByZXR1cm4gc2VsZi5tb2RlbChpbWcpCjx8ZmltX3N1ZmZpeHw+CnN5cy5wYXRoLmFwcGVuZCgnLi4nKQppbXBvcnQgZGF0YXNldHMKCmF2YWlsYWJsZV9tb2RlbHMgPSB7J3Jlc25ldDE4JzogeyJtb2RlbCI6IHRvcmNodmlzaW9uLm1vZGVscy5yZXNuZXQxOCwgImlucHV0X3NoYXBlIjogKDMsIDIyNCwgMjI0KX0sCjx8ZmltX2VuZHw+"]
["262993e59084931bdbe59d4e6575aa75beb3760c-1","262993e59084931bdbe59d4e6575aa75beb3760c","PHxmaW1fcHJlZml4fD4KIy91c3IvYmluL2VudiBweXRob24KCmltcG9ydCBjb25maWdwYXJzZXIKCmltcG9ydCBvcwppbXBvcnQgYXJncGFyc2UKaW1wb3J0IHNobGV4LCBzdWJwcm9jZXNzCmZyb20gdHlwZXMgaW1wb3J0IG5ld19jbGFzcywgcHJlcGFyZV9jbGFzcwoKQVdTX0NPTkZJR19QQVRIPW9zLnBhdGguZXhwYW5kdXNlcihvcy5lbnZpcm9uLmdldCgnQVdTX0NPTkZJR19QQVRIJywgIn4vLmF3cy9jb25maWciKSkKQVdTX0NSRURFTlRJQUxfUEFUSD1vcy5wYXRoLmV4cGFuZHVzZXIob3MuZW52aXJvbi5nZXQoJ0FXU19DUkVERU5USUFMU19QQVRIJywgIn4vLmF3cy9jcmVkZW50aWFscyIpKQoKY2xhc3MgQVdTVmF1bHRNaWdyYXRlKG9iamVjdCk6CiAgICAiIiJBV1MgVmF1bHQgTWlncmF0ZSBDbGFzcyIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzKToKICAgICAgICBzdXBlcihBV1NWYXVsdE1pZ3JhdGUsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLmNvbmZpZyA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoKQogICAgICAgIHNlbGYuY29uZmlnLnJlYWQoQVdTX0NPTkZJR19QQVRIKQogICAgICAgIHNlbGYuY3JlZGVudGlhbHMgPSBjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyKCkKPHxmaW1faG9sZXw+CiAgICBkZWYgZXhlY3V0ZShzZWxmKToKICAgICAgICBpZiBzZWxmLmFyZ3Muc291cmNlX2JhY2tlbmQ6CiAgICAgICAgICAgIGlmIG5vdCBzZWxmLmFyZ3MudGFyZ2V0X2JhY2tlbmQ6CiAgICAgICAgICAgICAgICBwcmludCgiU3BlY2lmeSB0YXJnZXQgYmFja2VuZCB3aXRoIHNvdXJjZSIpCiAgICAgICAgICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgICAgICAgICBzeXMuZXhpdCgyKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgc2VsZi5iYWNrZW5kX21pZ3JhdGUoc2VsZi5hcmdzLnNvdXJjZV9iYWNrZW5kLCBzZWxmLmFyZ3MudGFyZ2V0X2JhY2tlbmQpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5taWdyYXRlX3RvX2F3c192YXVsdCgpCgogICAgZGVmIHByZXBhcmVfZW52KHNlbGYpOgogICAgICAgIHZhdWx0X2VudiA9IG9zLmVudmlyb24uY29weSgpCiAgICAgICAgZm9yIHZhcl9rZXkgaW4gdmF1bHRfZW52LmNvcHkoKToKICAgICAgICAgICAgaWYgdmFyX2tleS5zdGFydHN3aXRoKCJBV1NfIik6CiAgICAgICAgICAgICAgICBkZWwgdmF1bHRfZW52W3Zhcl9rZXldCiAgICAgICAgcmV0dXJuIHZhdWx0X2VudgoKCiAgICBkZWYgbWlncmF0ZV90b19hd3NfdmF1bHQoc2VsZik6CiAgICAgICAgdmF1bHRfZW52ID0gc2VsZi5wcmVwYXJlX2VudigpCgogICAgICAgIGZvciBzZWN0aW9uIGluIHNlbGYuY29uZmlnLnNlY3Rpb25zKCk6CiAgICAgICAgICAgIHByb2ZpbGVfbmFtZSA9IHNlY3Rpb24ucmVwbGFjZSgicHJvZmlsZSAiLCIiKQoKICAgICAgICAgICAgaWYgc2VsZi5jcmVkZW50aWFscy5oYXNfc2VjdGlvbihwcm9maWxlX25hbWUpOgogICAgICAgICAgICAgICAgI2F3c19hY2Nlc3Nfa2V5X2lkID0gY3JlZGVudGlhbHNbcHJvZmlsZV9uYW1lXVsnYXdzX2FjY2Vzc19rZXlfaWQnXQogICAgICAgICAgICAgICAgI2F3c19zZWNyZXRfYWNjZXNzX2tleSA9IGNyZWRlbnRpYWxzW3Byb2ZpbGVfbmFtZV1bJ2F3c19zZWNyZXRfYWNjZXNzX2tleSddCiAgICAgICAgICAgICAgICB2YXVsdF9lbnZbIkFXU19BQ0NFU1NfS0VZX0lEIl0gPSBzZWxmLmNyZWRlbnRpYWxzW3Byb2ZpbGVfbmFtZV1bJ2F3c19hY2Nlc3Nfa2V5X2lkJ10KICAgICAgICAgICAgICAgIHZhdWx0X2VudlsiQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIl0gPSBzZWxmLmNyZWRlbnRpYWxzW3Byb2ZpbGVfbmFtZV1bJ2F3c19zZWNyZXRfYWNjZXNzX2tleSddCiAgICAgICAgICAgICAgICBjb21tYW5kX2FyZ3MgPSBzaGxleC5zcGxpdCgiYXdzLXZhdWx0IGFkZCAlcyAtLWVudiIgJSAocHJvZmlsZV9uYW1lLCkpCiAgICAgICAgICAgICAgICBhd3NfdmF1bHRfY21kID0gc3VicHJvY2Vzcy5Qb3Blbihjb21tYW5kX2FyZ3MsIGVudj12YXVsdF9lbnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCiAgICAgICAgICAgICAgICBhd3NfdmF1bHRfY21kLndhaXQoKQogICAgICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBhd3NfdmF1bHRfY21kLmNvbW11bmljYXRlKCkKICAgICAgICAgICAgICAgIHByaW50KHZhdWx0X2VudikKICAgICAgICAgICAgICAgIGlmIHN0ZGVycjoKICAgICAgICAgICAgICAgICAgICBwcmludChzdGRlcnIpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuYXJncy5yZW1vdmU6CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3JlZGVudGlhbHMucmVtb3ZlX3NlY3Rpb24ocHJvZmlsZV9uYW1lKQoKICAgICAgICB3aXRoIG9wZW4oQVdTX0NSRURFTlRJQUxfUEFUSCwgJ3cnKSBhcyBjcmVkZW50aWFsZmlsZToKICAgICAgICAgICAgc2VsZi5yZWRlbnRpYWxzLndyaXRlKGNyZWRlbnRpYWxmaWxlKQoKICAgICAgICBwYXNzCgogICAgZGVmIGJhY2tlbmRfbWlncmF0ZShzZWxmLCBzb3VyY2UsIHRhcmdldCk6CiAgICAgICAgdmF1bHRfZW52ID0gc2VsZi5wcmVwYXJlX2VudigpCiAgICAgICAgc291cmNlX3ZhdWx0X2VudiA9IHZhdWx0X2Vudi5jb3B5KCkKICAgICAgICBmb3Igc2VjdGlvbiBpbiBzZWxmLmNvbmZpZy5zZWN0aW9ucygpOgogICAgICAgICAgICBwcm9maWxlX25hbWUgPSBzZWN0aW9uLnJlcGxhY2UoInByb2ZpbGUgIiwiIikKICAgICAgICAgICAgaWYgc2VsZi5jb25maWcuaGFzX29wdGlvbihzZWN0aW9uLCdzc29fc3RhcnRfdXJsJykgb3Igc2VsZi5jb25maWcuaGFzX29wdGlvbihzZWN0aW9uLCdzb3VyY2VfcHJvZmlsZScpOgogICAgICAgICAgICAgICAgIyBTa2lwIGlmICdzc29fc3RhcnRfdXJsJyBvciAnc291cmNlX3Byb2ZpbGUnIGlzIGZvdW5kCiAgICAgICAgICAgICAgICAjIEZvciBTU08gdGhlcmUgYXJlIG5vIGNyZWRlbnRpYWxzIHRvIG1pZ3JhdHRlCiAgICAgICAgICAgICAgICAjIEZvciBzb3VyY2UgcHJvZmlsZSB0aGUgY3JlZGVudGlhbHMgYXJlIG1pZ3JhdGVkIGluIGFub3RoZXIgcHJvZmlsZS4KICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGNvbW1hbmRfYXJncyA9IHNobGV4LnNwbGl0KCJhd3MtdmF1bHQgLS1iYWNrZW5kICVzICBleGVjIC0tbm8tc2Vzc2lvbiAlcyAtLSBlbnYgIiAlIChzb3VyY2UsIHByb2ZpbGVfbmFtZSwpKQogICAgICAgICAgICBhd3NfdmF1bHRfY21kID0gc3VicHJvY2Vzcy5Qb3Blbihjb21tYW5kX2FyZ3MsIGVudj1zb3VyY2VfdmF1bHRfZW52LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKICAgICAgICAgICAgYXdzX3ZhdWx0X2NtZC53YWl0KCkKICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBhd3NfdmF1bHRfY21kLmNvbW11bmljYXRlKCkKICAgICAgICAgICAgaWYgc3RkZXJyOgogICAgICAgICAgICAgICAgcHJpbnQoIkVycm9yOiIsIHN0ZGVycikKICAgICAgICAgICAgZWxzZToKCiAgICAgICAgICAgICAgICBmb3VuZF9hd3Nfa2V5cyA9IEZhbHNlCiAgICAgICAgICAgICAgICBmb3IgYXdzX3ZhciBpbiBzdGRvdXQuc3BsaXRsaW5lcygpOgogICAgICAgICAgICAgICAgICAgIGF3c192YXJfa2V5LCBhd3NfdmFyX3ZhbCA9IGF3c192YXIuc3BsaXQoYiI9IikKICAgICAgICAgICAgICAgICAgICBpZiBhd3NfdmFyX2tleSBpbiAoYiJBV1NfQUNDRVNTX0tFWV9JRCIsYiJBV1NfU0VDUkVUX0FDQ0VTU19LRVkiKToKICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfYXdzX2tleXMgPSBUcnVlCiAgICAgICAgICAgICAgICAgICAgICAgIHZhdWx0X2Vudlthd3NfdmFyX2tleS5kZWNvZGUoInV0Zi04IikgXSA9IGF3c192YXJfdmFsLmRlY29kZSgidXRmLTgiKQogICAgICAgICAgICAgICAgaWYgZm91bmRfYXdzX2tleXM6CiAgICAgICAgICAgICAgICAgICAgY29tbWFuZF9hcmdzID0gc2hsZXguc3BsaXQoImF3cy12YXVsdCAtLWJhY2tlbmQgJXMgYWRkICVzIC0tZW52IiAlICh0YXJnZXQsIHByb2ZpbGVfbmFtZSwpKQogICAgICAgICAgICAgICAgICAgIGF3c192YXVsdF9jbWQgPSBzdWJwcm9jZXNzLlBvcGVuKGNvbW1hbmRfYXJncywgZW52PXZhdWx0X2VudiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQogICAgICAgICAgICAgICAgICAgIGF3c192YXVsdF9jbWQud2FpdCgpCiAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBhd3NfdmF1bHRfY21kLmNvbW11bmljYXRlKCkKCiAgICAgICAgICAgICAgICAgICAgaWYgc3RkZXJyOgogICAgICAgICAgICAgICAgICAgICAgICBwcmludChzdGRlcnIpCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIk1pZ3JhdGVkIHN1Y2Nlc3NmdWxseXk6ICVzIiAlIChwcm9maWxlX25hbWUsKSkKCgoKZGVmIG1haW4oKToKCiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nTWlncmF0ZSBmcm9tIHBsYWluIHRleHQgQVdTIENsaSBjcmVkZW50aWFsIGZpbGUgdG8gYXdzLXZhdWx0LicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJhY2tlbmQnLCBoZWxwPScoT3B0aW9uYWwpIHNwZWNpZnkgdGhlIGJhY2tlbmQgdG8gdXNlIHdoZW4gbWlncmF0aW5nIGZyb20gfi8uYXdzL2NyZWRlbnRpYWxzIGZpbGUnKQoKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcmVtb3ZlJywgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUmVtb3ZlIHRoZSBzZWNyZXQgZnJvbSBjcmVkZW50aWFscyBmaWxlLiBJZ25vcmVkIHdpdGggYmFja2VuZCBtaWdyYXRpb24uJykKCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXNvdXJjZS1iYWNrZW5kJywgaGVscD0nU3BlY2lmeSBiYWNrZW5kIHRvIG1pZ3JhdGUgZnJvbS4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS10YXJnZXQtYmFja2VuZCcsIGhlbHA9J1NwZWNpZnkgdGFyZ2V0IGJhY2tlbmQgdG8gbWlncmF0ZSB0by4gV2l0aG91dCBzb3VyY2UgYmFja2VuZCB0aGlzIGlzIGlnbm9yZWQuJykKCiAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQoKICAgIGF3c192YXVsdF9taWdyYXRlID0gQVdTVmF1bHRNaWdyYXRlKGFyZ3MpCiAgICBhd3NfdmF1bHRfbWlncmF0ZS5leGVjdXRlKCkKCgoKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5jcmVkZW50aWFscy5yZWFkKEFXU19DUkVERU5USUFMX1BBVEgpCgogICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKCjx8ZmltX2VuZHw+"]
["e4416699f661f92754cd4e6108f24f5f9f8d5687-5","e4416699f661f92754cd4e6108f24f5f9f8d5687","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIwpmcm9tIC5jaGVieXNoZXZfZ2F1c3MgaW1wb3J0IENoZWJ5c2hldkdhdXNzMSwgQ2hlYnlzaGV2R2F1c3MyCmZyb20gLmNsZW5zaGF3X2N1cnRpcyBpbXBvcnQgQ2xlbnNoYXdDdXJ0aXMKZnJvbSAuZmVqZXIgaW1wb3J0IEZlamVyMSwgRmVqZXIyCmZyb20gLmdhdXNzX2phY29iaSBpbXBvcnQgR2F1c3NKYWNvYmkKZnJvbSAuZ2F1c3Nfa3JvbnJvZCBpbXBvcnQgR2F1c3NLcm9ucm9kCmZyb20gLmdhdXNzX2xlZ2VuZHJlIGltcG9ydCBHYXVzc0xlZ2VuZHJlCmZyb20gLmdhdXNzX2xvYmF0dG8gaW1wb3J0IEdhdXNzTG9iYXR0bwpmcm9tIC5nYXVzc19wYXR0ZXJzb24gaW1wb3J0IEdhdXNzUGF0dGVyc29uCmZyb20gLmdhdXNzX3JhZGF1IGltcG9ydCBHYXVzc1JhZGF1CmZyb20gLm1pZHBvaW50IGltcG9ydCBNaWRwb2ludApmcm9tIC5uZXd0b25fY290ZXMgaW1wb3J0IE5ld3RvbkNvdGVzT3BlbiwgTmV3dG9uQ290ZXNDbG9zZWQKZnJvbSAudHJhcGV6b2lkYWwgaW1wb3J0IFRyYXBlem9pZGFsCgpmcm9tIC50YW5oX3NpbmggaW1wb3J0IHRhbmhfc2luaCwgdGFuaF9zaW5oX2xyCgpmcm9tIC50b29scyBpbXBvcnQgaW50ZWdyYXRlLCBpbnRlZ3JhdGVfc3BsaXQsIGludGVncmF0ZV9hZGFwdGl2ZSwgc2hvdywgcGxvdAoKX19hbGxfXyA9IFsKICAgICJDaGVieXNoZXZHYXVzczEiLAogICAgIkNoZWJ5c2hldkdhdXNzMiIsCiAgICAiQ2xlbnNoYXdDdXJ0aXMiLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAiRmVqZXIxIiwKICAgICJGZWplcjIiLAogICAgIkdhdXNzSmFjb2JpIiwKICAgICJHYXVzc0tyb25yb2QiLAo8fGZpbV9lbmR8Pg=="]
["3e1d171ab24e6d640acd5a875b91571a4a866e5d-1","3e1d171ab24e6d640acd5a875b91571a4a866e5d","PHxmaW1fcHJlZml4fD4KIiIiQ29udGFpbnMgU0dTQmFzZSwgdGhlIGJhc2UgbW9kdWxlIGZvciBzdW1fZ3JhZF9zcXVhcmVkIGV4dGVuc2lvbi4iIiIKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKZnJvbSB0eXBpbmcgaW1wb3J0IFRZUEVfQ0hFQ0tJTkcsIENhbGxhYmxlLCBMaXN0LCBUdXBsZQoKZnJvbSB0b3JjaCBpbXBvcnQgVGVuc29yCmZyb20gdG9yY2gubm4gaW1wb3J0IE1vZHVsZQoKZnJvbSBiYWNrcGFjay5jb3JlLmRlcml2YXRpdmVzLmJhc2VkZXJpdmF0aXZlcyBpbXBvcnQgQmFzZVBhcmFtZXRlckRlcml2YXRpdmVzCmZyb20gYmFja3BhY2suZXh0ZW5zaW9ucy5maXJzdG9yZGVyLmJhc2UgaW1wb3J0IEZpcnN0T3JkZXJNb2R1bGVFeHRlbnNpb24KCmlmIFRZUEVfQ0hFQ0tJTkc6CiAgICBmcm9tIGJhY2twYWNrLmV4dGVuc2lvbnMgaW1wb3J0IFN1bUdyYWRTcXVhcmVkCgoKY2xhc3MgU0dTQmFzZShGaXJzdE9yZGVyTW9kdWxlRXh0ZW5zaW9uKToKICAgICIiIkJhc2UgY2xhc3MgZm9yIGV4dGVuc2lvbnMgY2FsY3VsYXRpbmcgc3VtX2dyYWRfc3F1YXJlZC4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgZGVyaXZhdGl2ZXM6IEJhc2VQYXJhbWV0ZXJEZXJpdmF0aXZlcywgcGFyYW1zOiBMaXN0W3N0cl0gPSBOb25lKToKICAgICAgICAiIiJJbml0aWFsaXphdGlvbi4KCiAgICAgICAgRm9yIGVhY2ggcGFyYW1ldGVyIGEgZnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQgdGhhdCBpcyBuYW1lZCBsaWtlIHRoZSBwYXJhbWV0ZXIKCiAgICAgICAgQXJnczoKICAgICAgICAgICAgZGVyaXZhdGl2ZXM6IGNhbGN1bGF0ZXMgdGhlIGRlcml2YXRpdmVzIHdydCBwYXJhbWV0ZXJzCiAgICAgICAgICAgIHBhcmFtczogbGlzdCBvZiBwYXJhbWV0ZXIgbmFtZXMKICAgICAgICAiIiIKICAgICAgICBzZWxmLmRlcml2YXRpdmVzOiBCYXNlUGFyYW1ldGVyRGVyaXZhdGl2ZXMgPSBkZXJpdmF0aXZlcwogICAgICAgIHNlbGYuTl9heGlzOiBpbnQgPSAwCiAgICAgICAgZm9yIHBhcmFtX3N0ciBpbiBwYXJhbXM6CiAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsIHBhcmFtX3N0cik6CiAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIHBhcmFtX3N0ciwgc2VsZi5fbWFrZV9wYXJhbV9mdW5jdGlvbihwYXJhbV9zdHIpKQogICAgICAgIHN1cGVyKCkuX19pbml0X18ocGFyYW1zPXBhcmFtcykKCiAgICBkZWYgX21ha2VfcGFyYW1fZnVuY3Rpb24oCiAgICAgICAgc2VsZiwgcGFyYW1fc3RyOiBzdHIKICAgICkgLT4gQ2FsbGFibGVbW1N1bUdyYWRTcXVhcmVkLCBNb2R1bGUsIFR1cGxlW1RlbnNvcl0sIFR1cGxlW1RlbnNvcl0sIE5vbmVdLCBUZW5zb3JdOgogICAgICAgICIiIkNyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGNhbGN1bGF0ZXMgc3VtX2dyYWRfc3F1YXJlZC4KCiAgICAgICAgQXJnczoKICAgICAgICAgICAgcGFyYW1fc3RyOiBuYW1lIG9mIHBhcmFtZXRlcgoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBmdW5jdGlvbiB0aGF0IGNhbGN1bGF0ZXMgc3VtX2dyYWRfc3F1YXJlZAogICAgICAgICIiIgoKICAgICAgICBkZWYgcGFyYW1fZnVuY3Rpb24oCiAgICAgICAgICAgIGV4dDogU3VtR3JhZFNxdWFyZWQsCiAgICAgICAgICAgIG1vZHVsZTogTW9kdWxlLAogICAgICAgICAgICBnX2lucDogVHVwbGVbVGVuc29yXSwKICAgICAgICAgICAgZ19vdXQ6IFR1cGxlW1RlbnNvcl0sCiAgICAgICAgICAgIGJwUXVhbnRpdGllczogTm9uZSwKICAgICAgICApIC0+IFRlbnNvcjoKICAgICAgICAgICAgIiIiQ2FsY3VsYXRlcyBzdW1fZ3JhZF9zcXVhcmVkIHdpdGggdGhlIGhlbHAgb2YgZGVyaXZhdGl2ZXMgb2JqZWN0LgoKICAgICAgICAgICAgQXJnczoKICAgICAgICAgICAgICAgIGV4dDogZXh0ZW5zaW9uIHRoYXQgaXMgdXNlZAogICAgICAgICAgICAgICAgbW9kdWxlOiBtb2R1bGUgdGhhdCBwZXJmb3JtZWQgZm9yd2FyZCBwYXNzCiAgICAgICAgICAgICAgICBnX2lucDogaW5wdXQgZ3JhZGllbnQgdGVuc29ycwogICAgICAgICAgICAgICAgZ19vdXQ6IG91dHB1dCBncmFkaWVudCB0ZW5zb3JzCiAgICAgICAgICAgICAgICBicFF1YW50aXRpZXM6IGFkZGl0aW9uYWwgcXVhbnRpdGllcyBmb3Igc2Vjb25kIG9yZGVyCgogICAgICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICAgICAgc3VtX2dyYWRfc3F1YXJlZAogICAgICAgICAgICAiIiIKICAgICAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgICAgIHNlbGYuZGVyaXZhdGl2ZXMucGFyYW1fbWpwKAogICAgICAgICAgICAgICAgICAgIHBhcmFtX3N0ciwgbW9kdWxlLCBnX2lucCwgZ19vdXQsIGdfb3V0WzBdLCBzdW1fYmF0Y2g9RmFsc2UKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICoqIDIKICAgICAgICAgICAgKS5zdW0oc2VsZi5OX2F4aXMpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgcmV0dXJuIHBhcmFtX2Z1bmN0aW9uCjx8ZmltX2VuZHw+"]
["e4d28f22b26646de1b469edf932afbbf39955e25-1","e4d28f22b26646de1b469edf932afbbf39955e25","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IHNjcmFweQo8fGZpbV9ob2xlfD4KICAgIG5hbWUgPSAiYmljY2FtZXJhIgogICAgc3RhcnRfdXJscyA9IFsKICAgICAgICAnaHR0cDovL3d3dy5iaWNjYW1lcmEuY29tL2JjL2MvY29udGVudHMvc2l0ZW1hcC9pbmRleC5qc3AnCiAgICBdCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIF9leHRyYWN0X2Rpc3Bfbm8odXJsKToKICAgICAgICBkaXNwTm8gPSByZS5maW5kYWxsKHInZGlzcE5vPShcZCspJywgdXJsKSAKICAgICAgICBpZiBsZW4oZGlzcE5vKSA9PSAxOgogICAgICAgICAgICByZXR1cm4gZGlzcE5vWzBdCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAKICAgIGRlZiBwYXJzZShzZWxmLCByZXNwb25zZSk6CiAgICAgICAgZm9yIGxpbmsgaW4gcmVzcG9uc2UuY3NzKCdkaXYudG9saW5rY2F0ZWdvcnknKToKICAgICAgICAgICAgdXJsID0gbGluay5jc3MoJ2E6OmF0dHIoImhyZWYiKScpLmV4dHJhY3RfZmlyc3QoKQogICAgICAgICAgICBkaXNwTm8gPSBzZWxmLl9leHRyYWN0X2Rpc3Bfbm8odXJsKSAKICAgICAgICAgICAgaWYgZGlzcE5vIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgeWllbGQgewogICAgICAgICAgICAgICAgICAgICd0eXBlJzogJ2NhdGVnb3J5X3RvcCcsCiAgICAgICAgICAgICAgICAgICAgJ3BhcmVudF9ubyc6IE5vbmUsCiAgICAgICAgICAgICAgICAgICAgJ25vJzogZGlzcE5vLAogICAgICAgICAgICAgICAgICAgICduYW1lJzogbGluay5jc3MoJ2E6OnRleHQnKS5leHRyYWN0X2ZpcnN0KCksCiAgICAgICAgICAgICAgICAgICAgJ3VybCc6IHVybCwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHlpZWxkIHJlc3BvbnNlLmZvbGxvdyh1cmwsIHNlbGYucGFnZV9wYXJzZSkKCiAgICBkZWYgcGFnZV9wYXJzZShzZWxmLCByZXNwb25zZSk6CiAgICAgICAgcGFyZW50X2Rpc3BObyA9IHNlbGYuX2V4dHJhY3RfZGlzcF9ubyhyZXNwb25zZS51cmwpIAogICAgICAgIGNvdW50X2NhdF9saW5rID0gMAogICAgICAgIGZvciBsaW5rIGluIHJlc3BvbnNlLmNzcygnI2NhdE5hdiB1bCA+bGkgPmEnKToKICAgICAgICAgICAgdXJsID0gbGluay5jc3MoJzo6YXR0cigiaHJlZiIpJykuZXh0cmFjdF9maXJzdCgpCiAgICAgICAgICAgIGRpc3BObyA9IHNlbGYuX2V4dHJhY3RfZGlzcF9ubyh1cmwpIAogICAgICAgICAgICBpZiBkaXNwTm8gaXMgbm90IE5vbmUgYW5kIHJlLm1hdGNoKGRpc3BObywgcGFyZW50X2Rpc3BObykgaXMgTm9uZToKICAgICAgICAgICAgICAgIHlpZWxkIHsKICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdjYXRlZ29yeScsCiAgICAgICAgICAgICAgICAgICAgJ3BhcmVudF9ubyc6IHBhcmVudF9kaXNwTm8sCiAgICAgICAgICAgICAgICAgICAgJ25vJzogZGlzcE5vLAogICAgICAgICAgICAgICAgICAgICduYW1lJzogbGluay5jc3MoJ2E6OnRleHQnKS5leHRyYWN0X2ZpcnN0KCksCiAgICAgICAgICAgICAgICAgICAgJ3VybCc6IHVybCwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHlpZWxkIHJlc3BvbnNlLmZvbGxvdyh1cmwsIHNlbGYucGFnZV9wYXJzZSkKICAgICAgICAgICAgICAgIGNvdW50X2NhdF9saW5rICs9IDEKCiAgICAgICAgIyDjgZPjgozku6XkuIrjgIHntLDliIbljJbjgZfjgZ/jgqvjg4bjgrTjg6rjg7zjgYzjgarjgYTloLTlkIgKICAgICAgICBpZiBjb3VudF9jYXRfbGluayA9PSAwOgogICAgICAgICAgICBuZXh0X3BhZ2UgPSByZXNwb25zZS5jc3MoJy5mb290TmF2IHAubmV4dCBhOjphdHRyKCJocmVmIiknKS5leHRyYWN0X2ZpcnN0KCkKICAgICAgICAgICAgZm9yIHByb2RfYm94IGluIHJlc3BvbnNlLmNzcygnLnByb2RfYm94Jyk6CiAgICAgICAgICAgICAgICBkZXRhaWwgPSBwcm9kX2JveC5jc3MoJy5kZXRhaWwnKQogICAgICAgICAgICAgICAgbGluayA9IGRldGFpbC5jc3MoJy5uYW1lIGE6OmF0dHIoImhyZWYiKScpLmV4dHJhY3RfZmlyc3QoKQogICAgICAgICAgICAgICAgZ29vZHNfbm8gPSByZS5maW5kYWxsKHInR09PRFNfTk89KFxkKyknLCBsaW5rKSAKICAgICAgICAgICAgICAgIGlmIGxlbihnb29kc19ubykgPT0gMToKICAgICAgICAgICAgICAgICAgICB5aWVsZCB7CiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogJ2RldGFpbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICdwYXJlbnRfbm8nOiBkaXNwTm8sCiAgICAgICAgICAgICAgICAgICAgICAgICduYW1lJzogZGV0YWlsLmNzcygnLm5hbWUgYTo6dGV4dCcpLmV4dHJhY3RfZmlyc3QoKSwKICAgICAgICAgICAgICAgICAgICAgICAgJ25vJzogZ29vZHNfbm9bMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICdzdG9jayc6IHByb2RfYm94LmNzcygnLmxhYmVsX2NlbGwuYWN0aXZlPnNwYW46OnRleHQnKS5leHRyYWN0X2ZpcnN0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICdiaWNfcHJpY2UnOiBkZXRhaWwuY3NzKCdzcGFuLnZhbDo6dGV4dCcpLmV4dHJhY3RfZmlyc3QoKS5yZXBsYWNlKHInLCcsJycpLAogICAgICAgICAgICAgICAgICAgICAgICAndGltZSc6IGRhdGV0aW1lLmRhdGV0aW1lLnV0Y25vdygpLnN0cmZ0aW1lKCIlWS0lbS0lZCAlSDolTTolUyIpLAogICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogbGluaywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIG5leHRfcGFnZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICB5aWVsZCByZXNwb25zZS5mb2xsb3cobmV4dF9wYWdlLCBzZWxmLnBhZ2VfcGFyc2UpCgo8fGZpbV9zdWZmaXh8PgppbXBvcnQgcmUKaW1wb3J0IGRhdGV0aW1lCgpjbGFzcyBCaWNjYW1lcmFTcGlkZXIoc2NyYXB5LlNwaWRlcik6Cjx8ZmltX2VuZHw+"]
["f812aacdc95a81cbc4c921b125bbdbec42a08cb7-1","f812aacdc95a81cbc4c921b125bbdbec42a08cb7","PHxmaW1fcHJlZml4fD4KZnJvbSBjbGFzZV9CIGltcG9ydCBCCmZyb20gY2xhc2VfQyBpbXBvcnQgQwoKPHxmaW1faG9sZXw+CiAgICAgICAgQy5fX2luaXRfXyhzZWxmLCBhLCBjKSAjIERlZmluZSBzZWxmLmEgPSBhIHkgc2VsZi5jID0gYwo8fGZpbV9zdWZmaXh8PgpjbGFzcyBEKEIsIEMpOgogICAgCiAgICBkZWYgX19pbml0X18oc2VsZiwgYSwgYiwgYyk6CiAgICAgICAgQi5fX2luaXRfXyhzZWxmLCBhLCBiKSAjIERlZmluZSBzZWxmLmEgPSBhIHkgc2VsZi5iID0gYgo8fGZpbV9lbmR8Pg=="]
["2691a120891da2020f8be91cda9659d06543d6e7-5","2691a120891da2020f8be91cda9659d06543d6e7","PHxmaW1fcHJlZml4fD4KI0FuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSB0aGUgcHl0aG9uIG1vZHVsZS4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppbXBvcnQgbXljZmZpCm15Y2ZmaS50ZXN0Lm15YmFzaWMoKQpteWNmZmkudGVzdC5teXByaW50KCJIYWghIEl0IHdvcmtlZC4gTm93LCB3aGF0J3MgMy4xNDErMi43MTg/IikKcHJpbnQobXljZmZpLnRlc3QubXlhZGQoMy4xNDEsIDIuNzE4KSkKPHxmaW1fZW5kfD4="]
["2647f6f7bec9d2f02d5d8fc22793eec41cd959f4-2","2647f6f7bec9d2f02d5d8fc22793eec41cd959f4","PHxmaW1fcHJlZml4fD4KZnJvbSAuZXZlbnRfbW9kZWwgaW1wb3J0IEV2ZW50TW9kZWwKZnJvbSAucGxhY2UgaW1wb3J0IFBsYWNlCgoKY2xhc3MgRXZlbnQ6CiAgICAiIiJFdmVudCBwcmltaXRpdmUKICAgIAogICAgQW4gZXZlbnQgaXMgZGVmaW5lZCBieSBhbiBhY3Rpdml0eSA6Y2xhc3M6YH5hcmNoQUJNLmV2ZW50X21vZGVsLkV2ZW50TW9kZWxgLCB0aGF0IGhhcHBlbnMgYXQgYSBnaXZlbiBwaHlzaWNhbCBsb2NhdGlvbiAKICAgIDpjbGFzczpgfmFyY2hBQk0ucGxhY2UuUGxhY2VgYCwgZm9yIGEgZmluaXRlIHBlcmlvZCBvZiB0aW1lLCBpbiBtaW51dGVzIChkdXJhdGlvbikuCiAgICAiIiIKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIG1vZGVsOiBFdmVudE1vZGVsCiAgICBwbGFjZTogUGxhY2UKICAgIGR1cmF0aW9uOiBpbnQKCjx8ZmltX2VuZHw+"]
["c0fb69e721f5206ba0c6b1e4cd5924a7665af52c-3","c0fb69e721f5206ba0c6b1e4cd5924a7665af52c","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXMtYXNjaWkgLSotCgppbXBvcnQgd3gKaW1wb3J0IHN0cmluZwoKZnJvbSBvcHRpb25zIGltcG9ydCBBZHZhbmNlZE9wdGlvbnMKZnJvbSBtZXNzYWdlIGltcG9ydCBNZXNzYWdlCnRyeToKICAgIGZyb20gb3BlbnR1bWJsci50dW1ibHIgaW1wb3J0IEFwaQpleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBmcm9tIHR1bWJsciBpbXBvcnQgQXBpCmltcG9ydCB3eC5saWIuZmlsZWJyb3dzZWJ1dHRvbiBhcyBmaWxlYnJvd3NlCgpjbGFzcyBQaG90byh3eC5QYW5lbCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50LCBpZCk6CiAgICAgICAgd3guUGFuZWwuX19pbml0X18oc2VsZiwgcGFyZW50LCBpZCkKICAgICAgICBzZWxmLnBhcmVudCA9IHBhcmVudAogICAgICAgIHNlbGYuYXBpID0gc2VsZi5wYXJlbnQuYXBpCiAgICAgICAgc2VsZi50YWdzID0gTm9uZQogICAgICAgIHNlbGYuZGF0ZSA9IE5vbmUKICAgICAgICBzZWxmLnByaXZhdGUgPSAwCgogICAgICAgIHNlbGYucF9tYWluID0gd3guUGFuZWwoc2VsZiwgLTEpCiAgICAgICAgc2VsZi5zX3Bob3RvX3N0YXRpY2JveCA9IHd4LlN0YXRpY0JveChzZWxmLnBfbWFpbiwgLTEsICIiKQogICAgICAgIHNlbGYuYl9vcHRpb25zID0gd3guQnV0dG9uKHNlbGYucF9tYWluLCAtMSwgIkFkdmFuY2VkICBvcHRpb25zIikKICAgICAgICBzZWxmLnNfYnJvd3NlX3N0YXRpY2JveCA9IHd4LlN0YXRpY0JveChzZWxmLnBfbWFpbiwgLTEsICIiKQogICAgICAgIHNlbGYubF9hZGRwaG90byA9IHd4LlN0YXRpY1RleHQoc2VsZi5wX21haW4sIC0xLCAiVXBsb2FkIGEgUGhvdG8iKQogICAgICAgIHNlbGYubF9waG90byA9IHd4LlN0YXRpY1RleHQoc2VsZi5wX21haW4sIC0xLCAiUGhvdG8iKQogICAgICAgIHNlbGYuYl9icm93c2UgPSBmaWxlYnJvd3NlLkZpbGVCcm93c2VCdXR0b24oc2VsZi5wX21haW4sIC0xKQogICAgICAgIHNlbGYubF9zdXBwb3J0cyA9IHd4LlN0YXRpY1RleHQoc2VsZi5wX21haW4sIC0xLCAiU3VwcG9ydHMgSlBFRywgR0lGLCBQTkcgYW5kIEJNUC4gIE1heCBwaG90byBzaXplIGlzIDEwIE1CLiAgICAgIikKICAgICAgICBzZWxmLmxfcGhvdG91cmwgPSB3eC5TdGF0aWNUZXh0KHNlbGYucF9tYWluLCAtMSwgIlBob3RvIFVybCIpCiAgICAgICAgc2VsZi50Y19waG90b3VybCA9IHd4LlRleHRDdHJsKHNlbGYucF9tYWluLCAtMSwgIiIpCiAgICAgICAgc2VsZi5sX2NhcHRpb24gPSB3eC5TdGF0aWNUZXh0KHNlbGYucF9tYWluLCAtMSwgIkNhcHRpb24iKQogICAgICAgIHNlbGYudGNfY2FwdGlvbiA9IHd4LlRleHRDdHJsKHNlbGYucF9tYWluLCAtMSwgIiIsIHN0eWxlPXd4LlRFX01VTFRJTElORSkKICAgICAgICBzZWxmLmxfcGhvdG9saW5rID0gd3guU3RhdGljVGV4dChzZWxmLnBfbWFpbiwgLTEsICJQaG90byBsaW5rcyB0byB0aGUgVVJMIikKICAgICAgICBzZWxmLnRjX3Bob3RvbGluayA9IHd4LlRleHRDdHJsKHNlbGYucF9tYWluLCAtMSwgIiIpCiAgICAgICAgc2VsZi5iX2NyZWF0ZSA9IHd4LkJ1dHRvbihzZWxmLnBfbWFpbiwgLTEsICJDcmVhdGUgcG9zdCIpCiAgICAgICAgc2VsZi5iX2NhbmNlbCA9IHd4LkJ1dHRvbihzZWxmLnBfbWFpbiwgLTEsICJDYW5jZWwiKQogICAgICAgIAogICAgICAgIHNlbGYuQmluZCh3eC5FVlRfQlVUVE9OLCBzZWxmLkFkdmFuY2VkT3B0aW9ucywgaWQgPSBzZWxmLmJfb3B0aW9ucy5HZXRJZCgpKQogICAgICAgIHNlbGYuQmluZCh3eC5FVlRfQlVUVE9OLCBzZWxmLk9uQ3JlYXRlUGhvdG8sIGlkID0gc2VsZi5iX2NyZWF0ZS5HZXRJZCgpKQogICAgICAgIHNlbGYuQmluZCh3eC5FVlRfQlVUVE9OLCBzZWxmLk9uQ2FuY2VsLCBpZCA9IHNlbGYuYl9jYW5jZWwuR2V0SWQoKSkKCiAgICAgICAgc2VsZi5fX3NldF9wcm9wZXJ0aWVzKCkKICAgICAgICBzZWxmLl9fZG9fbGF5b3V0KCkKCiAgICBkZWYgX19zZXRfcHJvcGVydGllcyhzZWxmKToKICAgICAgICBzZWxmLmxfYWRkcGhvdG8uU2V0Rm9udCh3eC5Gb250KDE1LCB3eC5ERUZBVUxULCB3eC5OT1JNQUwsIHd4LkJPTEQsIDAsICIiKSkKICAgICAgICBzZWxmLmxfcGhvdG8uU2V0Rm9udCh3eC5Gb250KDE1LCB3eC5ERUZBVUxULCB3eC5OT1JNQUwsIHd4Lk5PUk1BTCwgMCwgIiIpKQogICAgICAgIHNlbGYubF9zdXBwb3J0cy5TZXRGb250KHd4LkZvbnQoOCwgd3guREVGQVVMVCwgd3guTk9STUFMLCB3eC5CT0xELCAwLCAiIikpCiAgICAgICAgc2VsZi5sX3Bob3RvdXJsLlNldEZvbnQod3guRm9udCgxNSwgd3guREVGQVVMVCwgd3guTk9STUFMLCB3eC5OT1JNQUwsIDAsICIiKSkKICAgICAgICBzZWxmLnRjX3Bob3RvdXJsLlNldE1pblNpemUoKC0xLCAtMSkpCiAgICAgICAgc2VsZi50Y19waG90b3VybC5TZXRGb250KHd4LkZvbnQoMTUsIHd4LkRFRkFVTFQsIHd4Lk5PUk1BTCwgd3guTk9STUFMLCAwLCAiIikpCiAgICAgICAgc2VsZi5sX2NhcHRpb24uU2V0Rm9udCh3eC5Gb250KDE1LCB3eC5ERUZBVUxULCB3eC5OT1JNQUwsIHd4Lk5PUk1BTCwgMCwgIiIpKQogICAgICAgIHNlbGYudGNfY2FwdGlvbi5TZXRGb250KHd4LkZvbnQoMTUsIHd4LkRFRkFVTFQsIHd4Lk5PUk1BTCwgd3guTk9STUFMLCAwLCAiTHVjaWRhIEdyYW5kZSIpKQogICAgICAgICNzZWxmLnRjX2NhcHRpb24uU2V0TWluU2l6ZSgoMTAwLCAxMjApKQogICAgICAgIHNlbGYudGNfcGhvdG9saW5rLlNldEJhY2tncm91bmRDb2xvdXIod3guQ29sb3VyKDI1NSwgMjU1LCAyNTUpKQogICAgICAgIHNlbGYudGNfcGhvdG9saW5rLlNldEZvbnQod3guRm9udCgxMSwgd3guREVGQVVMVCwgd3guTk9STUFMLCB3eC5OT1JNQUwsIDAsICIiKSkKICAgICAgICBzZWxmLnBfbWFpbi5TZXRCYWNrZ3JvdW5kQ29sb3VyKHd4LkNvbG91cigyNTUsIDI1NSwgMjU1KSkKCiAgICBkZWYgX19kb19sYXlvdXQoc2VsZik6CgkgICAgc19tYWluID0gd3guQm94U2l6ZXIod3guVkVSVElDQUwpCgkgICAgc19waG90byA9IHd4LlN0YXRpY0JveFNpemVyKHNlbGYuc19waG90b19zdGF0aWNib3gsIHd4LlZFUlRJQ0FMKQoJICAgIHNfYnV0dG9ucyA9IHd4LkJveFNpemVyKHd4LkhPUklaT05UQUwpCgkgICAgc19waG90b2xpbmsgPSB3eC5Cb3hTaXplcih3eC5WRVJUSUNBTCkKCSAgICBzX3Bob3RvdXJsID0gd3guQm94U2l6ZXIod3guSE9SSVpPTlRBTCkKCSAgICBzX2Jyb3dzZSA9IHd4LlN0YXRpY0JveFNpemVyKHNlbGYuc19icm93c2Vfc3RhdGljYm94LCB3eC5IT1JJWk9OVEFMKQoJICAgIHNfcGhvdG8uQWRkKHNlbGYuYl9vcHRpb25zLCAwLCB3eC5BTEx8d3guQUxJR05fQ0VOVEVSX0hPUklaT05UQUwsIDIpCgkgICAgc19waG90by5BZGQoc2VsZi5sX2FkZHBob3RvLCAwLCB3eC5BTEx8d3guQUxJR05fQ0VOVEVSX1ZFUlRJQ0FMLCAyKQoJICAgIHNfcGhvdG8uQWRkKHNlbGYubF9waG90bywgMCwgd3guQUxMfHd4LkFMSUdOX0NFTlRFUl9WRVJUSUNBTCwgMikKCSAgICBzX2Jyb3dzZS5BZGQoc2VsZi5iX2Jyb3dzZSwgMCwgd3guQUxMfHd4LkFMSUdOX0NFTlRFUl9WRVJUSUNBTCwgMikKCSAgICBzX3Bob3RvLkFkZChzX2Jyb3dzZSwgMCwgd3guRVhQQU5ELCAwKQoJICAgIHNfcGhvdG8uQWRkKHNlbGYubF9zdXBwb3J0cywgMCwgd3guQk9UVE9NLCAyMCkKCSAgICBzX3Bob3RvdXJsLkFkZChzZWxmLmxfcGhvdG91cmwsIDAsIHd4LkFMTCwgMikKCSAgICBzX3Bob3RvdXJsLkFkZChzZWxmLnRjX3Bob3RvdXJsLCAxLCB3eC5BTEx8d3guRVhQQU5ELCAyKQoJICAgIHNfcGhvdG8uQWRkKHNfcGhvdG91cmwsIDAsIHd4LkVYUEFORCwgMCkKCSAgICBzX3Bob3RvLkFkZChzZWxmLmxfY2FwdGlvbiwgMCwgd3guQUxMfHd4LkFMSUdOX0NFTlRFUl9WRVJUSUNBTCwgMikKCSAgICBzX3Bob3RvLkFkZChzZWxmLnRjX2NhcHRpb24sIDEsIHd4LkFMTHx3eC5FWFBBTkQsIDIpCgkgICAgc19waG90b2xpbmsuQWRkKHNlbGYubF9waG90b2xpbmssIDAsIHd4LkFMTCwgMikKCSAgICBzX3Bob3RvbGluay5BZGQoc2VsZi50Y19waG90b2xpbmssIDAsIHd4LkFMTHx3eC5FWFBBTkQsIDIpCgkgICAgc19waG90by5BZGQoc19waG90b2xpbmssIDAsIHd4LkVYUEFORCwgMCkKCSAgICBzX2J1dHRvbnMuQWRkKHNlbGYuYl9jcmVhdGUsIDEsIHd4LkxFRlR8d3guRVhQQU5ELCAyKQoJICAgIHNfYnV0dG9ucy5BZGQoc2VsZi5iX2NhbmNlbCwgMSwgd3guTEVGVHx3eC5FWFBBTkQsIDIpCgkgICAgc19waG90by5BZGQoc19idXR0b25zLCAwLCB3eC5BTEx8d3guRVhQQU5ELCAyKQoJICAgIHNlbGYucF9tYWluLlNldFNpemVyKHNfcGhvdG8pCgkgICAgc19tYWluLkFkZChzZWxmLnBfbWFpbiwgMSwgd3guQUxMfHd4LkVYUEFORCwgMTApCgkgICAgc2VsZi5TZXRTaXplcihzX21haW4pCgkgICAgc19tYWluLkZpdChzZWxmKQoKICAgIGRlZiBBZHZhbmNlZE9wdGlvbnMoc2VsZiwgZXZ0KToKICAgICAgICBzZWxmLm9wdGlvbnMgPSBBZHZhbmNlZE9wdGlvbnMoc2VsZiwgLTEpCiAgICAgICAgc2VsZi5vcHRpb25zLkNlbnRlcigpCiAgICAgICAgaWYgc2VsZi5vcHRpb25zLlNob3dNb2RhbCgpID09IHd4LklEX09LOgogICAgICAgICAgICBzZWxmLnRhZ3MgPSBzZWxmLm9wdGlvbnMudGNfdGFnLkdldFZhbHVlKCkuZW5jb2RlKCd1dGYtOCcpCiAgICAgICAgICAgIHNlbGYudGFncyA9IHN0cmluZy5yZXBsYWNlKHNlbGYudGFncywnICcsICcsJykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBzZWxmLmRhdGUgPSBzZWxmLm9wdGlvbnMudGNfZGF0ZS5HZXRWYWx1ZSgpLmVuY29kZSgndXRmLTgnKQoKICAgICAgICAgICAgaWYgc2VsZi5vcHRpb25zLmNiX3B1Ymxpc2hpbmcuR2V0VmFsdWUoKSA9PSAncHJpdmF0ZSc6CiAgICAgICAgICAgICAgICBzZWxmLnByaXZhdGUgPSAxCjx8ZmltX2VuZHw+"]
["cd0bbd2123a484ada56c18a7bdb558047959584e-1","cd0bbd2123a484ada56c18a7bdb558047959584e","PHxmaW1fcHJlZml4fD4KIyBAZmlsZSBhX3Rlc3RfcGx1Z2luLnB5CiMgQSB0ZXN0aW5nIHBsdWdpbiB1c2VkIHRvIHZlcmlmeSBwYXJzaW5nCiMKIyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbgojCiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQKIyMKCmltcG9ydCB1dWlkCmZyb20gZWRrMnRvb2xsaWIud2luZG93cy50ZWxlbS5jcGVyX3NlY3Rpb25fZGF0YSBpbXBvcnQgU2VjdGlvbkRhdGFQYXJzZXIKCgpjbGFzcyBFWEFNUExFX1BMVUdJTihTZWN0aW9uRGF0YVBhcnNlcik6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGE9YicnKToKICAgICAgICBzdXBlci5fX2luaXRfXyhkYXRhKQoKICAgICMjCiAgICAjIFJldHVybnMgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcGFyc2VyCiAgICAjIwo8fGZpbV9ob2xlfD4KICAgICMgVHJ1ZSBpZiB0aGlzIHBhcnNlciByZWNvZ25pemVzIHRoZSBpbnB1dCBndWlkCiAgICAjIwogICAgZGVmIENhblBhcnNlKHNlbGYsIGd1aWQ6IHV1aWQpIC0+IGJvb2w6CiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgIyMKICAgICMgUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0YSBwYXNzZWQgaW4uIEl0IGlzIGFzc3VtZWQgdGhhdAogICAgIyBpZiB0aGlzIGNhbGwgcnVucywgeW91IGFyZSByZWNpZXZpbmcgc2VjdGlvbiBkYXRhIHlvdSByZWNvZ25pemUKICAgICMjCiAgICBkZWYgUGFyc2Uoc2VsZiwgcHJldHR5OiBib29sLCBkYXRhOiBzdHIpIC0+IHN0cjoKICAgICAgICByZXR1cm4gIiIKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBfX3N0cl9fKHNlbGYpIC0+IHN0cjoKICAgICAgICByZXR1cm4gIkVYQU1QTEUgUExVR0lOIgoKICAgICMjCjx8ZmltX2VuZHw+"]
["c22c9703943ea4e8a27c72906910220f59f9e809-2","c22c9703943ea4e8a27c72906910220f59f9e809",{"$cut":{"chars":20024,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgojIExvYWQgcGFja2FnZXMKIyAgaW1wb3J0IHN5cwojICBpbXBvcnQgb3MKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBzY2FucHkgYXMgc2MKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IHNjYW5vcmFtYQojICBmcm9tIHNrbGVhcm4ubWFuaWZvbGQgaW1wb3J0IFRTTkUKZnJvbSB1bWFwIGltcG9ydCBVTUFQCmZyb20gbWF0cGxvdGxpYiBpbXBvcnQgcHlwbG90IGFzIHBsdAojICBmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IGNtCiMgIGZyb20gc2tsZWFybi5tZXRyaWNzLnBhaXJ3aXNlIGltcG9ydCBjb3NpbmVfc2ltaWxhcml0eQpmcm9tIHNjaXB5LnNwYXRpYWwuZGlzdGFuY2UgaW1wb3J0IGNkaXN0CgoKZGVmIGxhYmVsX3RyYW5zZmVyKGRpc3QsIGxhYmVscyk6CiAgICBjbGFzc19wcm9iID0gcGQuZ2V0X2R1bW1pZXMobGFiZWxzKS50b19udW1weSgpLlQgQCBkaXN0CiAgICBjbGFzc19wcm9iIC89IG5wLmxpbmFsZy5ub3JtKGNsYXNzX3Byb2IsIDIsIGF4aXM9MCkKICAgIHJldHVybiAoY2xhc3NfcHJvYi5UIC0gY2xhc3NfcHJvYi5taW4oMSkpIC8gbnAucHRwKGNsYXNzX3Byb2IsIGF4aXM9MSkKCiMgUGFyc2UgY29tbWFuZC1saW5lIGFyZ3VtZW50cwpwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKICAgIGRlc2NyaXB0aW9uPSdQcmVwcm9jZXNzIHNpbmdsZSBjZWxsIHRyYW5zY3JpcHRvbWljcyBkYXRhLicpCnBhcnNlci5hZGRfYXJndW1lbnQoJy0tZmlsZU5hbWVTVCcsCiAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0nbmFtZScsCiAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nc3RfYWRhdGFfbm9ybS5oNWFkJywKICAgICAgICAgICAgICAgICAgICBoZWxwPScnKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZpbGVOYW1lU0MnLAogICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9J25hbWUnLAogICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J3NjX2FkYXRhX25vcm0uaDVhZCcsCiAgICAgICAgICAgICAgICAgICAgaGVscD0nJykKcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1TVGRlY29udm9sdmVTQ2NsdXN0ZXJJZHMnLAogICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9J25hbWUnLAogICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J1NUZGVjb252b2x2ZV9zY19jbHVzdGVyX2lkcy5jc3YnLAogICAgICAgICAgICAgICAgICAgIGhlbHA9JycpCnBhcnNlci5hZGRfYXJndW1lbnQoJy0tU1RkZWNvbnZvbHZlUHJvcE5vcm1OYW1lJywKICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSduYW1lJywKICAgICAgICAgICAgICAgICAgICB0eXBlPXN0ciwKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSdTVGRlY29udm9sdmVfcHJvcF9ub3JtLmNzdicsCiAgICAgICAgICAgICAgICAgICAgaGVscD0nJykKcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1TVGRlY29udm9sdmVCZXRhTm9ybU5hbWUnLAogICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9J25hbWUnLAogICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J1NUZGVjb252b2x2ZV9iZXRhX25vcm0uY3N2JywKICAgICAgICAgICAgICAgICAgICBoZWxwPScnKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCctLVNUZGVjb252b2x2ZVNDbG9hZGluZ3MnLAogICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9J25hbWUnLAogICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J1NUZGVjb252b2x2ZV9zY19wY2FfZmVhdHVyZV9sb2FkaW5ncy5jc3YnLAogICAgICAgICAgICAgICAgICAgIGhlbHA9JycpCnBhcnNlci5hZGRfYXJndW1lbnQoJy0tU1RkZWNvbnZvbHZlU0NjbHVzdGVyTWFya2VycycsCiAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0nbmFtZScsCiAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nU1RkZWNvbnZvbHZlX3NjX2NsdXN0ZXJfbWFya2Vycy5jc3YnLAogICAgICAgICAgICAgICAgICAgIGhlbHA9JycpCnBhcnNlci5hZGRfYXJndW1lbnQoJy0tU1BPVGxpZ2h0UHJvcE5vcm0nLAogICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9J25hbWUnLAogICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J1NQT1RsaWdodF9wcm9wX25vcm0uY3N2JywKICAgICAgICAgICAgICAgICAgICBoZWxwPScnKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJlc29sdXRpb24nLAogICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9J25hbWUnLAogICAgICAgICAgICAgICAgICAgIHR5cGU9ZmxvYXQsCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0wLjQsCiAgICAgICAgICAgICAgICAgICAgaGVscD0nJykKcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zY2FucHlfVU1BUF9zdF9zYycsCiAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0nbmFtZScsCiAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nc2NhbnB5X1VNQVBfc3Rfc2MucG5nJywKICAgICAgICAgICAgICAgICAgICBoZWxwPScnKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXNjYW5weV9VTUFQX3N0X3NjX0JCS05OJywKICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSduYW1lJywKICAgICAgICAgICAgICAgICAgICB0eXBlPXN0ciwKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSdzY2FucHlfVU1BUF9zdF9zY19CQktOTi5wbmcnLAogICAgICAgICAgICAgICAgICAgIGhlbHA9JycpCnBhcnNlci5hZGRfYXJndW1lbnQoJy0tc2Nhbm9yYW1hX1VNQVBfc3Rfc2MnLAogICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9J25hbWUnLAogICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J3NjYW5vcmFtYV9VTUFQX3N0"}}]
["26dab8cf2b69ad1bb6139bb179b91746b9f857d7-2","26dab8cf2b69ad1bb6139bb179b91746b9f857d7","PHxmaW1fcHJlZml4fD4KIyBweXRob24zCmZyb20gZ29vZXkgaW1wb3J0ICoKaW1wb3J0IHN5cwpmcm9tIHB5ZmFpZHggaW1wb3J0IEZhc3RhCiMgaW5wdXQgcGFyYW1ldGVycwpAR29vZXkocmVxdWlyZWRfY29scz00LCBwcm9ncmFtX25hbWU9ICdzcGxpdCBmYXN0YSBpbnRvIGNodW5rcyBvcHRpbWl6ZWQnLCBoZWFkZXJfYmdfY29sb3I9ICcjRENEQ0RDJywgdGVybWluYWxfZm9udF9jb2xvcj0gJyNEQ0RDREMnLCB0ZXJtaW5hbF9wYW5lbF9jb2xvcj0gJyNEQ0RDREMnKQpkZWYgbWFpbigpOgoJYXAgPSBHb29leVBhcnNlcigpCglhcC5hZGRfYXJndW1lbnQoIi1pbiIsICItLWlucHV0IiwgcmVxdWlyZWQ9VHJ1ZSwgd2lkZ2V0PSdGaWxlQ2hvb3NlcicsIGhlbHA9ImlucHV0IHNpbmdsZSBvciBtdWx0aS1mYXN0YSBmaWxlIikKCWFwLmFkZF9hcmd1bWVudCgiLW91dCIsICItLW91dHB1dCIsIHJlcXVpcmVkPVRydWUsIHdpZGdldD0nRmlsZVNhdmVyJywgaGVscD0ib3V0cHV0IG11bHRpLWZhc3RhIGZpbGUiKQoJYXAuYWRkX2FyZ3VtZW50KCItc3RlcCIsICItLXN0ZXAiLCByZXF1aXJlZD1UcnVlLCB0eXBlPWludCwgaGVscD0ic3RlcCBzaXplIGZvciBjaHVuayBjcmVhdGlvbiwgdHlwZSA9IGludGVnZXIiKQoJYXAuYWRkX2FyZ3VtZW50KCItd2luIiwgIi0td2luZG93IiwgcmVxdWlyZWQ9VHJ1ZSwgdHlwZT1pbnQsIGhlbHA9IndpbmRvdyBzaXplIGZvciBjaHVuayBjcmVhdGlvbiwgdHlwZSA9IGludGVnZXIiKQoJYXJncyA9IHZhcnMoYXAucGFyc2VfYXJncygpKQojIG1haW4KIyBjcmVhdGUgZnVuY3Rpb24gdG8gc3BsaXQgdGhlIGlucHV0IHNlcXVlbmNlIGJhc2VkIG9uIGEgc3BlY2lmaWMgbnVtYmVyIG9mIGNoYXJhY3RlcnMoNjApCglkZWYgc3BsaXRfZXZlcnlfNjAocyk6IHJldHVybiBbc3RyKHMpW2k6aSs2MF0gZm9yIGkgaW4gcmFuZ2UoMCxsZW4oc3RyKHMpKSw2MCldCiMgY3JlYXRlIGZ1bmN0aW9uIHRvIHNsaWNlIGJhc2VkIG9uIHdpbmRvdyBhbmQgc3RlcAoJZGVmIHNsaWNlX2J5X3dpbnN0ZXAocmVjKToKCSAgICBmb3IgaSBpbiByYW5nZSgwLCBmZWF0dXJlc1tyZWNdWzpdLmVuZCAtIGFyZ3NbJ3dpbmRvdyddICsgMSwgYXJnc1snc3RlcCddKToKCSAgICAgICAgcHJpbnQoJycuam9pbihbIj4iLHJlYywiXyIsc3RyKGkrMSksIl8iLHN0cihpICsgYXJnc1snd2luZG93J10pXSkpCgkgICAgICAgIHByaW50KCdcbicuam9pbihzcGxpdF9ldmVyeV82MChmZWF0dXJlc1tyZWNdW2k6aSArIGFyZ3NbJ3dpbmRvdyddXS5zZXEpKSkKCSAgICByZXR1cm4KIyBpbXBvcnQgbXVsdGkgb3Igc2luZ2xlLWZhc3RhIGZpbGUKPHxmaW1faG9sZXw+CiMgaXRlcmF0ZSBpbnB1dCBoZWFkZXJzIHRvIGV4dHJhY3Qgc2VxdWVuY2VzIGFuZCBleHBvcnQgYXMgbXVsdGktZmFzdGEKCXN5cy5zdGRvdXQgPSBvcGVuKGFyZ3NbJ291dHB1dCddLCAnYScpCglmb3Iga2V5IGluIGZlYXR1cmVzLmtleXMoKToKCSAgICBzbGljZV9ieV93aW5zdGVwKGtleSkKCXN5cy5zdGRvdXQuY2xvc2UoKQkKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CgltYWluKCkKPHxmaW1fc3VmZml4fD4KCWZlYXR1cmVzID0gRmFzdGEoYXJnc1snaW5wdXQnXSkKPHxmaW1fZW5kfD4="]
["a03cf276614267a17e9d3ad78ea6dde0b398c820-1","a03cf276614267a17e9d3ad78ea6dde0b398c820","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gcHByaW50IGltcG9ydCBwcHJpbnQKCmRlZiB5aWVsZF93ZWxscyhleHBlcmltZW50cywga2V5d29yZD1Ob25lKToKICAgIGZvciBleHBlcmltZW50IGluIGV4cGVyaW1lbnRzOgogICAgICAgIGZvciBjb25kaXRpb24gaW4gZXhwZXJpbWVudFsnd2VsbHMnXToKICAgICAgICAgICAgZm9yIHdlbGwgaW4gZXhwZXJpbWVudFsnd2VsbHMnXVtjb25kaXRpb25dOgogICAgICAgICAgICAgICAgaWYga2V5d29yZCBpcyBOb25lIG9yIFwKICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZCBpbiBleHBlcmltZW50WydsYWJlbCddIG9yIFwKICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZCA9PSBjb25kaXRpb24gb3IgXAogICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkID09IHdlbGwubGFiZWw6CiAgICAgICAgICAgICAgICAgICAgeWllbGQgZXhwZXJpbWVudCwgY29uZGl0aW9uLCB3ZWxsCgpkZWYgeWllbGRfdW5pcXVlX3dlbGxzKGV4cGVyaW1lbnRzLCBrZXl3b3JkPU5vbmUpOgogICAgcHJldmlvdXNfd2VsbHMgPSBzZXQoKQogICAgZm9yIGV4cGVyaW1lbnQsIGNvbmRpdGlvbiwgd2VsbCBpbiB5aWVsZF93ZWxscyhleHBlcmltZW50cywga2V5d29yZCk6CiAgICAgICAgaWYgd2VsbCBub3QgaW4gcHJldmlvdXNfd2VsbHM6CiAgICAgICAgICAgIHByZXZpb3VzX3dlbGxzLmFkZCh3ZWxsKQogICAgICAgICAgICB5aWVsZCBleHBlcmltZW50LCBjb25kaXRpb24sIHdlbGwKCmRlZiBjbGVhcl9hbGxfcHJvY2Vzc2luZ19zdGVwcygpOgogICAgZ2xvYmFsIF9hbGxfcHJvY2Vzc2luZ19zdGVwcwogICAgX2FsbF9wcm9jZXNzaW5nX3N0ZXBzID0gW10KCmRlZiBydW5fYWxsX3Byb2Nlc3Npbmdfc3RlcHMoZXhwZXJpbWVudHMpOgogICAgZm9yIHN0ZXAgaW4gX2FsbF9wcm9jZXNzaW5nX3N0ZXBzOgogICAgICAgIHN0ZXAoZXhwZXJpbWVudHMpCgpfYWxsX3Byb2Nlc3Npbmdfc3RlcHMgPSBbXQoKCmNsYXNzIFByb2Nlc3NpbmdTdGVwOgogICAgIiIiCiAgICBBIG1vZHVsYXIgdHJhbnNmb3JtYXRpb24gdGhhdCBjYW4gYmUgYXBwbGllZCB0byBmbG93IGN5dG9tZXRyeSBkYXRhLgoKICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgY2xhc3MgaXMgcHJpbWFyaWx5IHRvIGFic3RyYWN0IHRoZSBwcm9jZXNzIG9mIGl0ZXJhdGluZyAKICAgIHRocm91Z2ggdGhlIGRhdGEgc3RydWN0dXJlIGNyZWF0ZWQgYnkgbG9hZF9leHBlcmltZW50cygpLiAgRWFjaCBleHBlcmltZW50IAogICAgY2FuIGNvbnRhaW4gYSBudW1iZXIgb2YgZmxvdyBjeXRvbWV0cnkgZGF0YSBmcmFtZXMuICBJdGVyYXRpbmcgdGhyb3VnaCBhbGwgCiAgICBvZiB0aGVtIHRvIGFwcGx5IGEgY29tbW9uIHRyYW5zZm9ybWF0aW9uIGlzIGNvbW1vbiBlbm91Z2ggdGhhdCBpdCB3YXMgd29ydGggCiAgICBzdXBwb3J0aW5nIHdpdGggYSBiaXQgb2YgYSBmcmFtZXdvcmssIGFuZCB0aGF0J3Mgd2hhdCB0aGlzIGNsYXNzIGlzLgogICAgIiIiCgogICAgZGVmIF9fbmV3X18oY2xzKToKICAgICAgICAiIiIKICAgICAgICBLZWVwIHRyYWNrIG9mIGFsbCB0aGUgcHJvY2Vzc2luZyBzdGVwcyB0aGF0IGdldCBpbnN0YW50aWF0ZWQuICBUaGlzIAogICAgICAgIGZ1bmN0aW9uYWxpdHkgaXMgcmVxdWlyZWQgYnkgcnVuX2FsbF9wcm9jZXNzaW5nX3N0ZXBzKCkuCiAgICAgICAgIiIiCiAgICAgICAgIyBJbXBsZW1lbnQgX19uZXdfXygpIGluc3RlYWQgb2YgX19pbml0X18oKSBiZWNhdXNlIGl0J3MgbGVzcyBsaWtlbHkgCiAgICAgICAgIyB0aGF0IHN1YmNsYXNzZXMgd2lsbCBvdmVyd3JpdGUgX19uZXdfXygpIGFuZCBmb3JnZXQgdG8gY2FsbCB0aGlzIAogICAgICAgICMgbWV0aG9kLgogICAgICAgIHN0ZXAgPSBzdXBlcigpLl9fbmV3X18oY2xzKQogICAgICAgIHN0ZXAudmVyYm9zZSA9IEZhbHNlCiAgICAgICAgX2FsbF9wcm9jZXNzaW5nX3N0ZXBzLmFwcGVuZChzdGVwKQogICAgICAgIHJldHVybiBzdGVwCgogICAgZGVmIF9fY2FsbF9fKHNlbGYsIGV4cGVyaW1lbnRzKToKICAgICAgICAiIiIKICAgICAgICBBcHBseSB0aGlzIHByb2Nlc3Npbmcgc3RlcCB0byBhbGwgb2YgdGhlIGdpdmVuIGV4cGVyaW1lbnRzLgogICAgICAgIAogICAgICAgIFRoZSBhY3R1YWwgcHJvY2Vzc2luZyBpcyBkZWxlZ2F0ZWQgdG8gcHJvY2Vzc19leHBlcmltZW50KCksIHdoaWNoIGNhbiAKICAgICAgICBiZSBvdmVyd3JpdHRlbiBieSBzdWJjbGFzc2VzLiAgVGhlIGRlZmF1bHQgcHJvY2Vzc19leHBlcmltZW50KCkgY2FsbHMgCiAgICAgICAgcHJvY2Vzc193ZWxsKCkgb24gZWFjaCB3ZWxsLCB3aGljaCBuaWNlbHkgYWJzdHJhY3RzIHRoZSBwcm9jZXNzIG9mIAogICAgICAgIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBleHBlcmltZW50IGRhdGEgc3RydWN0dXJlLgogICAgICAgICIiIgogICAgICAgIGZvciBleHBlcmltZW50IGluIGV4cGVyaW1lbnRzOgogICAgICAgICAgICBzZWxmLnByb2Nlc3NfZXhwZXJpbWVudChleHBlcmltZW50KQoKICAgIGRlZiBwcm9jZXNzX2V4cGVyaW1lbnQoc2VsZiwgZXhwZXJpbWVudCk6CiAgICAgICAgIiIiCiAgICAgICAgSXRlcmF0ZSBvdmVyIGFsbCB0aGUgd2VsbHMgaW4gdGhlIGdpdmVuIGV4cGVyaW1lbnQuCiAgICAgICAgCiAgICAgICAgVGhlIHByb2Nlc3Npbmcgb2YgZWFjaCB3ZWxsIGlzIGRlbGVnYXRlZCB0byBwcm9jZXNzX3dlbGwoKSwgd2hpY2ggaXMgYW4gCiAgICAgICAgYWJzdHJhY3QgbWV0aG9kLiAgSWYgcHJvY2Vzc193ZWxsKCkgcmV0dXJucyBhIGRhdGEgZnJhbWUsIGl0IHJlcGxhY2VzIAogICAgICAgIHRoZSBleGlzdGluZyB3ZWxsIGRhdGEuICBJZiBwcm9jZXNzX3dlbGwoKSByZXR1cm5zIE5vbmUsIGl0IGlzIGFzc3VtZWQgCiAgICAgICAgdGhhdCB0aGUgd2VsbCBkYXRhIHdhcyBtb2RpZmllZCBpbiBwbGFjZS4KICAgICAgICAiIiIKICAgICAgICBmb3IgY29uZGl0aW9uLCB3ZWxscyBpbiBleHBlcmltZW50Wyd3ZWxscyddLml0ZW1zKCk6CiAgICAgICAgICAgIGZvciBpLCB3ZWxsIGluIGVudW1lcmF0ZSh3ZWxscyk6CiAgICAgICAgICAgICAgICBwcm9jZXNzZWRfZGF0YSA9IHNlbGYucHJvY2Vzc193ZWxsKGV4cGVyaW1lbnQsIHdlbGwpCiAgICAgICAgICAgICAgICBpZiBwcm9jZXNzZWRfZGF0YSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICBleHBlcmltZW50Wyd3ZWxscyddW2NvbmRpdGlvbl1baV0uZGF0YSA9IHByb2Nlc3NlZF9kYXRhCgogICAgZGVmIHByb2Nlc3Nfd2VsbChzZWxmLCBleHBlcmltZW50LCB3ZWxsKTogICAjIChhYnN0cmFjdCkKICAgICAgICAiIiIKICAgICAgICBQcm9jZXNzIHRoZSBkYXRhIGZyb20gYW4gaW5kaXZpZHVhbCB3ZWxsIGluIGFueSB3YXkuCgogICAgICAgIFRoaXMgbWV0aG9kIGNhbiBlaXRoZXIgcmV0dXJuIGEgbmV3IGRhdGEgZnJhbWUsIHdoaWNoIHdpbGwgcmVwbGFjZSB0aGUgCiAgICAgICAgZXhpc3Rpbmcgb25lIGZvciB0aGUgZ2l2ZW4gd2VsbCwgb3IgaXQgY2FuIGp1c3QgbW9kaWZ5IHRoZSBnaXZlbiB3ZWxsIAogICAgICAgIGluIHBsYWNlLgogICAgICAgICIiIgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3Ioc2VsZi5fX2NsYXNzX18uX19uYW1lX18pCgoKY2xhc3MgS2VlcFJlbGV2YW50Q2hhbm5lbHMoUHJvY2Vzc2luZ1N0ZXApOgogICAgIiIiCiAgICBEaXNjYXJkIGFueSBjaGFubmVscyB0aGF0IGFyZW4ndCBleHBsaWNpdGx5IGxpc3RlZC4KCiAgICBUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBtYWtpbmcgcHJvY2Vzc2luZyBhIGxpdHRsZSBmYXN0ZXIgYW5kIG91dHB1dCBhIAogICAgbGl0dGxlIGNsZWFuZXIgaWYgeW91IGNvbGxlY3RlZCBkYXRhIGZvciBtb3JlIGNoYW5uZWxzIHRoYW4geW91IG5lZWRlZCB0bywgCiAgICBmb3Igd2hhdGV2ZXIgcmVhc29uLgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNoYW5uZWxzPU5vbmUpOgogICAgICAgIHNlbGYuY2hhbm5lbHMgPSBOb25lCgogICAgZGVmIHByb2Nlc3Nfd2VsbChzZWxmLCBleHBlcmltZW50LCB3ZWxsKToKICAgICAgICByZXR1cm4gd2VsbC5kYXRhLnJlaW5kZXgoY29sdW1ucz1zZWxmLmNoYW5uZWxzKQoKCmNsYXNzIExvZ1RyYW5zZm9ybWF0aW9uKFByb2Nlc3NpbmdTdGVwKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgY2hhbm5lbHM9Tm9uZSk6CiAgICAgICAgc2VsZi5jaGFubmVscyA9IGNoYW5uZWxzIG9yIFtdCgogICAgZGVmIHByb2Nlc3Nfd2VsbChzZWxmLCBleHBlcmltZW50LCB3ZWxsKToKICAgICAgICBmb3IgY2hhbm5lbCBpbiBzZWxmLmNoYW5uZWxzOgogICAgICAgICAgICBpZiBjaGFubmVsIGluIHdlbGwuZGF0YS5jb2x1bW5zOgogICAgICAgICAgICAgICAgd2VsbC5kYXRhW2NoYW5uZWxdID0gbnAubG9nMTAod2VsbC5kYXRhW2NoYW5uZWxdKQoKCmNsYXNzIEdhdGluZ1N0ZXAoUHJvY2Vzc2luZ1N0ZXApOgoKICAgIGRlZiBwcm9jZXNzX3dlbGwoc2VsZiwgZXhwZXJpbWVudCwgd2VsbCk6CiAgICAgICAgc2VsZWN0aW9uID0gc2VsZi5nYXRlKGV4cGVyaW1lbnQsIHdlbGwpCgogICAgICAgIGlmIHNlbGVjdGlvbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgogICAgICAgICAgICAgICAgbnVtX2V2ZW50cyA9IGxlbihzZWxlY3Rpb24pCiAgICAgICAgICAgICAgICBudW1fa2VwdCA9IG51bV9ldmVudHMgLSBzdW0oc2VsZWN0aW9uKQogICAgICAgICAgICAgICAgZ2F0ZV9uYW1lID0gc2VsZi5fX2NsYXNzX18uX19uYW1lX18KICAgICAgICAgICAgICAgIHByaW50KCJ7fSAoe30pOiB7fS97fSIuZm9ybWF0KGdhdGVfbmFtZSwgd2VsbC5sYWJlbCwgbnVtX2tlcHQsIGxlbihzZWxlY3Rpb24pKSkKCiAgICAgICAgICAgIHJldHVybiB3ZWxsLmRhdGEuZHJvcCh3ZWxsLmRhdGEuaW5kZXhbc2VsZWN0aW9uXSkKCiAgICBkZWYgZ2F0ZShzZWxmLCBleHBlcmltZW50LCB3ZWxsKToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgoKY2xhc3MgR2F0ZU5vblBvc2l0aXZlRXZlbnRzKEdhdGluZ1N0ZXApOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVscz1Ob25lKToKICAgICAgICBzZWxmLmNoYW5uZWxzID0gTm9uZQoKICAgIGRlZiBnYXRlKHNlbGYsIGV4cGVyaW1lbnQsIHdlbGwpOgogICAgICAgIGNoYW5uZWxzID0gc2VsZi5jaGFubmVscyBvciB3ZWxsLmRhdGEuY29sdW1ucwogICAgICAgIG1hc2tzID0gW3dlbGwuZGF0YVtjaGFubmVsXSA8PSAwIGZvciBjaGFubmVsIGluIGNoYW5uZWxzXQo8fGZpbV9ob2xlfD4KY2xhc3MgR2F0ZVNtYWxsQ2VsbHMoR2F0aW5nU3RlcCk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHRocmVzaG9sZD00MCwgc2F2ZV9zaXplX2NvbD1GYWxzZSk6CiAgICAgICAgc2VsZi50aHJlc2hvbGQgPSB0aHJlc2hvbGQKICAgICAgICBzZWxmLnNhdmVfc2l6ZV9jb2wgPSBzYXZlX3NpemVfY29sCgogICAgZGVmIGdhdGUoc2VsZiwgZXhwZXJpbWVudCwgd2VsbCk6CiAgICAgICAgZnJvbSBzY2lweS5zdGF0cyBpbXBvcnQgbGlucmVncmVzcwogICAgICAgIGZzYywgc3NjID0gd2VsbC5kYXRhWydGU0MtQSddLCB3ZWxsLmRhdGFbJ1NTQy1BJ10KICAgICAgICBtLCBiLCAqcXVhbGl0eSA9IGxpbnJlZ3Jlc3MoZnNjLCBzc2MpCiAgICAgICAgc2l6ZXMgPSBmc2MgKyBtICogc3NjCiAgICAgICAgaWYgc2VsZi5zYXZlX3NpemVfY29sOgogICAgICAgICAgICB3ZWxsLmRhdGFbJ0ZTQy1BICsgbSAqIFNTQy1BJ10gPSBzaXplcwogICAgICAgIHJldHVybiBzaXplcyA8IG5wLnBlcmNlbnRpbGUoc2l6ZXMsIHNlbGYudGhyZXNob2xkKQoKCmNsYXNzIEdhdGVFYXJseUV2ZW50cyhHYXRpbmdTdGVwKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgdGhyb3dhd2F5X3NlY3M9Mik6CiAgICAgICAgc2VsZi50aHJvd2F3YXlfc2VjcyA9IHRocm93YXdheV9zZWNzCgogICAgZGVmIGdhdGUoc2VsZiwgZXhwZXJpbWVudCwgd2VsbCk6CiAgICAgICAgc2VjcyA9IHdlbGwuZGF0YVsnVGltZSddICogZmxvYXQod2VsbC5tZXRhLmdldCgnJFRJTUVTVEVQJywgMC4xKSkKICAgICAgICByZXR1cm4gc2VjcyA8IHNlbGYudGhyb3dhd2F5X3NlY3MKPHxmaW1fc3VmZml4fD4KICAgICAgICByZXR1cm4gbnAuYW55KG5wLnZzdGFjayhtYXNrcyksIGF4aXM9MCkKCgo8fGZpbV9lbmR8Pg=="]
["cd72055c48e38e9d6a48bc749a01d2571ee1922e-2","cd72055c48e38e9d6a48bc749a01d2571ee1922e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IFBpeGVsS2l0IGFzIGtpdApmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZGludCBhcyByYW5kb20KZnJvbSB0aW1lIGltcG9ydCBzbGVlcAoKdCA9IDAKY29sb3JzID0gWwogICAgWzAsIDAsIDJdLAogICAgWzEwLCAxMCwgMTBdLAogICAgWzEwLCAwLCAwXSwKICAgIFsxMCwgMTAsIDBdLAogICAgWzEwLCAwLCAxMF0KXQoKY2xhc3MgQnVsbGV0KCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgcG9zaXRpb249WzQsIDRdLCB2ZWN0b3I9Wy0xLDFdKToKICAgICAgICBzZWxmLnBvc2l0aW9uID0gcG9zaXRpb24KICAgICAgICBzZWxmLnZlY3RvciA9IHZlY3RvcgogICAgICAgIHNlbGYubGlmZSA9IDAKCiAgICBkZWYgZ2V0WChzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5wb3NpdGlvblswXQoKICAgIGRlZiBnZXRZKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnBvc2l0aW9uWzFdCgogICAgZGVmIG1vdmUoc2VsZik6CiAgICAgICAgc2VsZi5wb3NpdGlvblswXSArPSBzZWxmLnZlY3RvclswXQogICAgICAgIHNlbGYucG9zaXRpb25bMV0gKz0gc2VsZi52ZWN0b3JbMV0KICAgICAgICBzZWxmLnBvc2l0aW9uWzBdICU9IDE2CiAgICAgICAgc2VsZi5wb3NpdGlvblsxXSAlPSA4CiAgICAgICAgc2VsZi5saWZlICs9IDEKCmNsYXNzIFNoaXAoKToKICAgIHZlY3RvcnMgPSBbCiAgICAgICAgWzAsLTFdLAogICAgICAgIFsxLC0xXSwKICAgICAgICBbMSwwXSwKICAgICAgICBbMSwxXSwKICAgICAgICBbMCwxXSwKICAgICAgICBbLTEsMV0sCiAgICAgICAgWy0xLDBdLAogICAgICAgIFstMSwtMV0KICAgIF0KICAgIHNwcml0ZXMgPSBbCiAgICAgICAgWwogICAgICAgICAgICBbMCwgMSwgMF0sCiAgICAgICAgICAgIFswLCAxLCAwXSwKICAgICAgICAgICAgWzIsIDMsIDJdCiAgICAgICAgXSwKICAgICAgICBbCiAgICAgICAgICAgIFswLCAwLCAxXSwKICAgICAgICAgICAgWzIsIDEsIDBdLAogICAgICAgICAgICBbMywgMiwgMF0KICAgICAgICBdLAogICAgICAgIFsKICAgICAgICAgICAgWzIsIDAsIDBdLAogICAgICAgICAgICBbMywgMSwgMV0sCiAgICAgICAgICAgIFsyLCAwLCAwXQogICAgICAgIF0sCiAgICAgICAgWwogICAgICAgICAgICBbMywgMiwgMF0sCiAgICAgICAgICAgIFsyLCAxLCAwXSwKICAgICAgICAgICAgWzAsIDAsIDFdCiAgICAgICAgXSwKICAgICAgICBbCiAgICAgICAgICAgIFsyLCAzLCAyXSwKICAgICAgICAgICAgWzAsIDEsIDBdLAogICAgICAgICAgICBbMCwgMSwgMF0KICAgICAgICBdLAogICAgICAgIFsKICAgICAgICAgICAgWzAsIDIsIDNdLAogICAgICAgICAgICBbMCwgMSwgMl0sCiAgICAgICAgICAgIFsxLCAwLCAwXQogICAgICAgIF0sCiAgICAgICAgWwogICAgICAgICAgICBbMCwgMCwgMl0sCiAgICAgICAgICAgIFsxLCAxLCAzXSwKICAgICAgICAgICAgWzAsIDAsIDJdCiAgICAgICAgXSwKICAgICAgICBbCiAgICAgICAgICAgIFsxLCAwLCAwXSwKICAgICAgICAgICAgWzAsIDEsIDJdLAogICAgICAgICAgICBbMCwgMiwgM10KICAgICAgICBdCiAgICBdCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvc2l0aW9uPVs0LCA0XSwgZGlyZWN0aW9uPTApOgogICAgICAgIHNlbGYuZGlyZWN0aW9uID0gZGlyZWN0aW9uCiAgICAgICAgc2VsZi5wb3NpdGlvbiA9IHBvc2l0aW9uCiAgICAgICAgc2VsZi5idWxsZXRzID0gW10KCiAgICBkZWYgZ2V0WChzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5wb3NpdGlvblswXQoKICAgIGRlZiBnZXRZKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnBvc2l0aW9uWzFdCgogICAgZGVmIGdldFNwcml0ZShzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5zcHJpdGVzW3NlbGYuZGlyZWN0aW9uXQoKICAgIGRlZiB0dXJuTGVmdChzZWxmKToKICAgICAgICBzZWxmLmRpcmVjdGlvbiA9IChzZWxmLmRpcmVjdGlvbi0xKSVsZW4oc2VsZi5zcHJpdGVzKQoKICAgIGRlZiB0dXJuUmlnaHQoc2VsZik6CiAgICAgICAgc2VsZi5kaXJlY3Rpb24gPSAoc2VsZi5kaXJlY3Rpb24rMSklbGVuKHNlbGYuc3ByaXRlcykKCiAgICBkZWYgZ2V0VmVjdG9yKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnZlY3RvcnNbc2VsZi5kaXJlY3Rpb25dCgogICAgZGVmIG1vdmVGb3J3YXJkKHNlbGYpOgogICAgICAgIHZlY3RvciA9IHNlbGYuZ2V0VmVjdG9yKCkKICAgICAgICBzZWxmLnBvc2l0aW9uWzBdICs9IHZlY3RvclswXQogICAgICAgIHNlbGYucG9zaXRpb25bMV0gKz0gdmVjdG9yWzFdCiAgICAgICAgc2VsZi5wb3NpdGlvblswXSAlPSAxNgogICAgICAgIHNlbGYucG9zaXRpb25bMV0gJT0gOAoKICAgIGRlZiBmaXJlKHNlbGYpOgogICAgICAgIGlmIGxlbihzZWxmLmJ1bGxldHMpIDwgMzoKICAgICAgICAgICAgc2VsZi5idWxsZXRzLmFwcGVuZChCdWxsZXQobGlzdChzZWxmLnBvc2l0aW9uKSwgc2VsZi5nZXRWZWN0b3IoKSkpCgoKZW5lbWllcyA9IFtTaGlwKFtyYW5kb20oMCwxNSkscmFuZG9tKDAsNyldLCByYW5kb20oMCwgOCkpXQptYWluU2hpcCA9IFNoaXAoKQpraXQub25Kb3lzdGlja0xlZnQgPSBtYWluU2hpcC50dXJuTGVmdApraXQub25Kb3lzdGlja1JpZ2h0ID0gbWFpblNoaXAudHVyblJpZ2h0CmtpdC5vbkpveXN0aWNrVXAgPSBtYWluU2hpcC5tb3ZlRm9yd2FyZApraXQub25CdXR0b25BID0gbWFpblNoaXAubW92ZUZvcndhcmQKa2l0Lm9uSm95c3RpY2tDbGljayA9IG1haW5TaGlwLmZpcmUKa2l0Lm9uQnV0dG9uQiA9IG1haW5TaGlwLmZpcmUKCmRlZiByZW5kZXJNYWluU2hpcCgpOgogICAgZm9yIHksIHJvdyBpbiBlbnVtZXJhdGUobWFpblNoaXAuZ2V0U3ByaXRlKCkpOgogICAgICAgIGZvciB4LCBjIGluIGVudW1lcmF0ZShyb3cpOgogICAgICAgICAgICBraXQuc2V0UGl4ZWwoKG1haW5TaGlwLmdldFgoKSt4LTEpJTE2LCAobWFpblNoaXAuZ2V0WSgpK3ktMSklOCwgY29sb3JzW2NdKQoKZGVmIHJlbmRlckVuZW1pZXMoKToKICAgIGZvciBlbmVteSBpbiBlbmVtaWVzOgogICAgICAgIGlmIHQgJSA5NiA9PSAwOgogICAgICAgICAgICBlbmVteS50dXJuUmlnaHQoKQogICAgICAgIGVsaWYgdCAlIDQ4ID09IDA6Cjx8ZmltX2hvbGV8PgogICAgICAgIGlmIHQgJSAyNCA9PSAwOgogICAgICAgICAgICBlbmVteS5tb3ZlRm9yd2FyZCgpCiAgICAgICAgZm9yIHksIHJvdyBpbiBlbnVtZXJhdGUoZW5lbXkuZ2V0U3ByaXRlKCkpOgogICAgICAgICAgICBmb3IgeCwgYyBpbiBlbnVtZXJhdGUocm93KToKICAgICAgICAgICAgICAgIGlmIGMgIT0gMDoKICAgICAgICAgICAgICAgICAgICBraXQuc2V0UGl4ZWwoKGVuZW15LmdldFgoKSt4LTEpJTE2LCAoZW5lbXkuZ2V0WSgpK3ktMSklOCwgY29sb3JzWyhjKzIpJWxlbihjb2xvcnMpXSkKCmRlZiByZW5kZXJNYWluU2hpcEJ1bGxldHMoKToKICAgIGZvciBpLCBidWxsZXQgaW4gZW51bWVyYXRlKG1haW5TaGlwLmJ1bGxldHMpOgogICAgICAgIGlmIHQgJSAyID09IDA6CiAgICAgICAgICAgIGJ1bGxldC5tb3ZlKCkKICAgICAgICAgICAgaWYgYnVsbGV0LmxpZmUgPiAyMDoKICAgICAgICAgICAgICAgIGRlbCBtYWluU2hpcC5idWxsZXRzW2ldCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBmb3IgaiwgZW5lbXkgaW4gZW51bWVyYXRlKGVuZW1pZXMpOgogICAgICAgICAgICAgICAgICAgIGlmIGVuZW15LmdldFgoKSA9PSBidWxsZXQuZ2V0WCgpIGFuZCBlbmVteS5nZXRZKCkgPT0gYnVsbGV0LmdldFkoKToKICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGVuZW1pZXNbal0KICAgICAgICAgICAgICAgICAgICAgICAgZGVsIG1haW5TaGlwLmJ1bGxldHNbaV0KICAgICAgICBraXQuc2V0UGl4ZWwoYnVsbGV0LmdldFgoKSwgYnVsbGV0LmdldFkoKSwgY29sb3JzWzRdKQoKZGVmIGxvb3AoKToKICAgIGtpdC5zZXRCYWNrZ3JvdW5kKGNvbG9yc1swXSkKICAgIHJlbmRlck1haW5TaGlwQnVsbGV0cygpCiAgICBpZiB0ICUgMjAwID09IDA6CiAgICAgICAgZW5lbWllcy5hcHBlbmQoU2hpcChbcmFuZG9tKDAsMTUpLHJhbmRvbSgwLDcpXSwgcmFuZG9tKDAsIDgpKSkKICAgIHJlbmRlck1haW5TaGlwKCkKICAgIHJlbmRlckVuZW1pZXMoKQoKZGVmIHN0YXJ0KCk6CiAgICBnbG9iYWwgdAogICAgd2hpbGUgVHJ1ZToKICAgICAgICB0ICs9IDEKICAgICAgICBraXQuY2hlY2tDb250cm9scygpCiAgICAgICAgbG9vcCgpCiAgICAgICAga2l0LnJlbmRlcigpCiAgICAgICAgc2xlZXAoMC4wMDEpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGVuZW15LnR1cm5MZWZ0KCkKPHxmaW1fZW5kfD4="]
["f87e77cafa2e64cb1057f9f64c73a64aaec6a855-5","f87e77cafa2e64cb1057f9f64c73a64aaec6a855","PHxmaW1fcHJlZml4fD4KIiIiUGFja2FnZSBidWlsZGVyIGZvciBodG1hX3B5LiIiIgoKPHxmaW1faG9sZXw+CiMgcGlwIGluc3RhbGwgLlt0ZXN0cyxmYXN0XQojIG9yIG9uIHpzaAojIHBpcCBpbnN0YWxsIC4vW3Rlc3RzLGZhc3QvXQoKCiMgLnB5cGlyYwojIFtkaXN0dXRpbHNdCiMgaW5kZXgtc2VydmVycyA9CiMgICAgIHB5cGkKIwojIFtweXBpXQojIHJlcG9zaXRvcnk6IGh0dHBzOi8vdXBsb2FkLnB5cGkub3JnL2xlZ2FjeS8KIyB1c2VybmFtZToKIyBwYXNzd29yZDoKc2V0dXB0b29scy5zZXR1cCgpCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBzZXR1cHRvb2xzCgojIHB5dGhvbiBzZXR1cC5weSBzZGlzdCBiZGlzdF93aGVlbAojIHR3aW5lIHVwbG9hZCBkaXN0LyoKPHxmaW1fZW5kfD4="]
["268555d05905dfc169fcaeba5aeea2765030ad3d-1","268555d05905dfc169fcaeba5aeea2765030ad3d","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmNsYXNzIEJrdEZlYXR1cmUob2JqZWN0KToKICAgIG5hbWUgICAgICAgICAgICA9ICJQb3dlclBvaW50IFRvb2xib3ggVmFyaWF0aW9uIgogICAgcmVsZXZhbnRfYXBwcyAgID0gWyJNaWNyb3NvZnQgUG93ZXJQb2ludCJdCgogICAgY29uZmxpY3RzICAgICAgID0gWyJ0b29sYm94IiwgInRvb2xib3hfd2lkZXNjcmVlbiJdCiAgICBkZXBlbmRlbmNpZXMgICAgPSBbXQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBjb250cnVjdG9yKCk6CiAgICAgICAgaW1wb3J0IG15X3Rvb2xib3gKPHxmaW1fZW5kfD4="]
["13fbbb37042adcafb15724a0aeafaf7eaa8ac120-1","13fbbb37042adcafb15724a0aeafaf7eaa8ac120","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBjdjIKaW1wb3J0IG1hdGgKaW1wb3J0IGhpc3RvZ3JhbSBhcyBoCmltcG9ydCBjdW11bGF0aXZlX2hpc3RvZ3JhbSBhcyBjaAoKaW1nID0gY3YyLmltcmVhZCgnaW1hZ2VzL2ltZzEuanBnJywgY3YyLklNUkVBRF9HUkFZU0NBTEUpCgpoZWlnaHQgPSBpbWcuc2hhcGVbMF0Kd2lkdGggPSBpbWcuc2hhcGVbMV0KcGl4ZWxzID0gd2lkdGggKiBoZWlnaHQKCmhpc3QgPSBoLmhpc3RvZ3JhbShpbWcpCmN1bV9oaXN0ID0gY2guY3VtdWxhdGl2ZV9oaXN0b2dyYW0oaGlzdCkKCmZvciBpIGluIG5wLmFyYW5nZShoZWlnaHQpOgogICAgZm9yIGogaW4gbnAuYXJhbmdlKHdpZHRoKToKPHxmaW1faG9sZXw+CmN2Mi5pbXNob3coJ2ltYWdlcy9pbWFnZV9oaXN0b2dyYW1fZXF1YWxpemF0aW9uJyxpbWcpCmN2Mi53YWl0S2V5KDApCmN2Mi5kZXN0cm95QWxsV2luZG93cygpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgYSA9IGltZy5pdGVtKGksaikKICAgICAgICBiID0gbWF0aC5mbG9vcihjdW1faGlzdFthXSAqIDI1NS4wIC8gcGl4ZWxzKQogICAgICAgIGltZy5pdGVtc2V0KChpLGopLCBiKQoKPHxmaW1fZW5kfD4="]
["a0d91f09b4ab5da6629d9dba664b1b1e9106e56d-2","a0d91f09b4ab5da6629d9dba664b1b1e9106e56d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCgppbXBvcnQgYm90bzMKaW1wb3J0IHBhbmRhcyBhcyBwZAoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQoKcmVnaW9uID0gb3MuZW52aXJvblsicmVnaW9uIl0KZW5kcG9pbnRfbmFtZSA9IG9zLmVudmlyb25bImVuZHBvaW50X25hbWUiXQpjb250ZW50X3R5cGUgPSBvcy5lbnZpcm9uWyJjb250ZW50X3R5cGUiXQpjdXN0b21lcnNfZmdfbmFtZSA9IG9zLmVudmlyb25bImN1c3RvbWVyc19mZ19uYW1lIl0KY2xhaW1zX2ZnX25hbWUgPSBvcy5lbnZpcm9uWyJjbGFpbXNfZmdfbmFtZSJdCgpib3RvX3Nlc3Npb24gPSBib3RvMy5TZXNzaW9uKHJlZ2lvbl9uYW1lPXJlZ2lvbikKZmVhdHVyZXN0b3JlX3J1bnRpbWUgPSBib3RvX3Nlc3Npb24uY2xpZW50KAogICAgc2VydmljZV9uYW1lPSJzYWdlbWFrZXItZmVhdHVyZXN0b3JlLXJ1bnRpbWUiLCByZWdpb25fbmFtZT1yZWdpb24KKQpjbGllbnRfc20gPSBib3RvX3Nlc3Npb24uY2xpZW50KCJzYWdlbWFrZXItcnVudGltZSIsIHJlZ2lvbl9uYW1lPXJlZ2lvbikKCmNvbF9vcmRlciA9IFsKICAgICJpbmNpZGVudF9zZXZlcml0eSIsCiAgICAibnVtX3ZlaGljbGVzX2ludm9sdmVkIiwKICAgICJudW1faW5qdXJpZXMiLAogICAgIm51bV93aXRuZXNzZXMiLAogICAgInBvbGljZV9yZXBvcnRfYXZhaWxhYmxlIiwKICAgICJpbmp1cnlfY2xhaW0iLAogICAgInZlaGljbGVfY2xhaW0iLAogICAgInRvdGFsX2NsYWltX2Ftb3VudCIsCiAgICAiaW5jaWRlbnRfbW9udGgiLAogICAgImluY2lkZW50X2RheSIsCiAgICAiaW5jaWRlbnRfZG93IiwKICAgICJpbmNpZGVudF9ob3VyIiwKICAgICJkcml2ZXJfcmVsYXRpb25zaGlwX3NlbGYiLAogICAgImRyaXZlcl9yZWxhdGlvbnNoaXBfbmEiLAogICAgImRyaXZlcl9yZWxhdGlvbnNoaXBfc3BvdXNlIiwKICAgICJkcml2ZXJfcmVsYXRpb25zaGlwX2NoaWxkIiwKICAgICJkcml2ZXJfcmVsYXRpb25zaGlwX290aGVyIiwKICAgICJpbmNpZGVudF90eXBlX2NvbGxpc2lvbiIsCiAgICAiaW5jaWRlbnRfdHlwZV9icmVha2luIiwKICAgICJpbmNpZGVudF90eXBlX3RoZWZ0IiwKICAgICJjb2xsaXNpb25fdHlwZV9mcm9udCIsCiAgICAiY29sbGlzaW9uX3R5cGVfcmVhciIsCiAgICAiY29sbGlzaW9uX3R5cGVfc2lkZSIsCiAgICAiY29sbGlzaW9uX3R5cGVfbmEiLAogICAgImF1dGhvcml0aWVzX2NvbnRhY3RlZF9wb2xpY2UiLAogICAgImF1dGhvcml0aWVzX2NvbnRhY3RlZF9ub25lIiwKICAgICJhdXRob3JpdGllc19jb250YWN0ZWRfZmlyZSIsCiAgICAiYXV0aG9yaXRpZXNfY29udGFjdGVkX2FtYnVsYW5jZSIsCiAgICAiY3VzdG9tZXJfYWdlIiwKICAgICJjdXN0b21lcl9lZHVjYXRpb24iLAogICAgIm1vbnRoc19hc19jdXN0b21lciIsCiAgICAicG9saWN5X2RlZHVjdGFibGUiLAogICAgInBvbGljeV9hbm51YWxfcHJlbWl1bSIsCiAgICAicG9saWN5X2xpYWJpbGl0eSIsCiAgICAiYXV0b195ZWFyIiwKICAgICJudW1fY2xhaW1zX3Bhc3RfeWVhciIsCiAgICAibnVtX2luc3VyZXJzX3Bhc3RfNV95ZWFycyIsCiAgICAiY3VzdG9tZXJfZ2VuZGVyX21hbGUiLAogICAgImN1c3RvbWVyX2dlbmRlcl9mZW1hbGUiLAogICAgInBvbGljeV9zdGF0ZV9jYSIsCiAgICAicG9saWN5X3N0YXRlX3dhIiwKICAgICJwb2xpY3lfc3RhdGVfYXoiLAogICAgInBvbGljeV9zdGF0ZV9vciIsCiAgICAicG9saWN5X3N0YXRlX252IiwKICAgICJwb2xpY3lfc3RhdGVfaWQiLApdCgoKZGVmIGxhbWJkYV9oYW5kbGVyKGV2ZW50LCBjb250ZXh0KToKICAgICMgR2V0IGRhdGEgZnJvbSBvbmxpbmUgZmVhdHVyZSBzdG9yZQogICAgbG9nZ2VyLmluZm8oZXZlbnQpCiAgICB2YWxfcG9saWN5X2lkID0gc3RyKGV2ZW50WyJxdWVyeVN0cmluZ1BhcmFtZXRlcnMiXVsicG9saWN5X2lkIl0pCgogICAgY2xhaW1zX3Jlc3BvbnNlID0gZmVhdHVyZXN0b3JlX3J1bnRpbWUuZ2V0X3JlY29yZCgKICAgICAgICBGZWF0dXJlR3JvdXBOYW1lPWNsYWltc19mZ19uYW1lLAogICAgICAgIFJlY29yZElkZW50aWZpZXJWYWx1ZUFzU3RyaW5nPXN0cih2YWxfcG9saWN5X2lkKSwKICAgICkKCiAgICBpZiBjbGFpbXNfcmVzcG9uc2UuZ2V0KCJSZWNvcmQiKToKPHxmaW1faG9sZXw+CiAgICBlbHNlOgogICAgICAgIGxvZ2dpbmcuaW5mbygiTm8gUmVjb3JkIHJldHVybmVkIC8gUmVjb3JkIEtleSBpbiBjbGFpbXMgZmVhdHVyZSBncm91cFxuIikKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAic3RhdHVzQ29kZSI6IDQwNCwKICAgICAgICAgICAgImJvZHkiOiBqc29uLmR1bXBzKHsiRXJyb3IiOiAiUmVjb3JkIG5vdCBmb3VuZCBpbiBDTEFJTVMgZmVhdHVyZSBncm91cCJ9KSwKICAgICAgICB9CgogICAgY3VzdG9tZXJzX3Jlc3BvbnNlID0gZmVhdHVyZXN0b3JlX3J1bnRpbWUuZ2V0X3JlY29yZCgKICAgICAgICBGZWF0dXJlR3JvdXBOYW1lPWN1c3RvbWVyc19mZ19uYW1lLAogICAgICAgIFJlY29yZElkZW50aWZpZXJWYWx1ZUFzU3RyaW5nPXN0cih2YWxfcG9saWN5X2lkKSwKICAgICkKCiAgICBpZiBjdXN0b21lcnNfcmVzcG9uc2UuZ2V0KCJSZWNvcmQiKToKICAgICAgICBjdXN0b21lcl9yZWNvcmQgPSBjdXN0b21lcnNfcmVzcG9uc2VbIlJlY29yZCJdCiAgICAgICAgY3VzdG9tZXJfZGYgPSBwZC5EYXRhRnJhbWUoY3VzdG9tZXJfcmVjb3JkKS5zZXRfaW5kZXgoIkZlYXR1cmVOYW1lIikKICAgIGVsc2U6CiAgICAgICAgbG9nZ2luZy5pbmZvKCJObyBSZWNvcmQgcmV0dXJuZWQgLyBSZWNvcmQgS2V5IGluIENVU1RPTUVSUyBmZWF0dXJlIGdyb3VwXG4iKQogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICJzdGF0dXNDb2RlIjogNDA0LAogICAgICAgICAgICAiYm9keSI6IGpzb24uZHVtcHMoCiAgICAgICAgICAgICAgICB7IkVycm9yIjogIlJlY29yZCBub3QgZm91bmQgaW4gQ1VTVE9NRVJTIGZlYXR1cmUgZ3JvdXAifQogICAgICAgICAgICApLAogICAgICAgIH0KCiAgICB0cnk6CiAgICAgICAgYmxlbmRlZF9kZiA9IHBkLmNvbmNhdChbY2xhaW1zX2RmLCBjdXN0b21lcl9kZl0pLmxvY1tjb2xfb3JkZXJdCiAgICAgICAgZGF0YV9pbnB1dCA9ICIsIi5qb2luKGJsZW5kZWRfZGZbIlZhbHVlQXNTdHJpbmciXSkKCiAgICAgICAgbG9nZ2luZy5pbmZvKCJkYXRhX2lucHV0OiAiLCBkYXRhX2lucHV0KQogICAgICAgIHJlc3BvbnNlID0gY2xpZW50X3NtLmludm9rZV9lbmRwb2ludCgKICAgICAgICAgICAgRW5kcG9pbnROYW1lPWVuZHBvaW50X25hbWUsIEJvZHk9ZGF0YV9pbnB1dCwgQ29udGVudFR5cGU9Y29udGVudF90eXBlCiAgICAgICAgKQoKICAgICAgICBzY29yZSA9IGpzb24ubG9hZHMocmVzcG9uc2VbIkJvZHkiXS5yZWFkKCkpCiAgICAgICAgbG9nZ2luZy5pbmZvKGYic2NvcmU6IHtzY29yZX0iKQoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAic3RhdHVzQ29kZSI6IDIwMCwKICAgICAgICAgICAgImJvZHkiOiBqc29uLmR1bXBzKHsicG9saWN5X2lkIjogdmFsX3BvbGljeV9pZCwgInNjb3JlIjogc2NvcmV9KSwKICAgICAgICB9CiAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKGYiaW50ZXJuYWwgZXJyb3IiKQogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICJzdGF0dXNDb2RlIjogNTAwLAogICAgICAgICAgICAiYm9keSI6IGpzb24uZHVtcHMoCiAgICAgICAgICAgICAgICB7IkVycm9yIjogZiJpbnRlcm5hbCBlcnJvci4gQ2hlY2sgTG9ncyBmb3IgbW9yZSBkZXRhaWxzIn0KICAgICAgICAgICAgKSwKICAgICAgICB9Cjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgY2xhaW1zX3JlY29yZCA9IGNsYWltc19yZXNwb25zZVsiUmVjb3JkIl0KICAgICAgICBjbGFpbXNfZGYgPSBwZC5EYXRhRnJhbWUoY2xhaW1zX3JlY29yZCkuc2V0X2luZGV4KCJGZWF0dXJlTmFtZSIpCjx8ZmltX2VuZHw+"]
["a0d91f09b4ab5da6629d9dba664b1b1e9106e56d-4","a0d91f09b4ab5da6629d9dba664b1b1e9106e56d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCgppbXBvcnQgYm90bzMKaW1wb3J0IHBhbmRhcyBhcyBwZAoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQoKcmVnaW9uID0gb3MuZW52aXJvblsicmVnaW9uIl0KZW5kcG9pbnRfbmFtZSA9IG9zLmVudmlyb25bImVuZHBvaW50X25hbWUiXQpjb250ZW50X3R5cGUgPSBvcy5lbnZpcm9uWyJjb250ZW50X3R5cGUiXQpjdXN0b21lcnNfZmdfbmFtZSA9IG9zLmVudmlyb25bImN1c3RvbWVyc19mZ19uYW1lIl0KY2xhaW1zX2ZnX25hbWUgPSBvcy5lbnZpcm9uWyJjbGFpbXNfZmdfbmFtZSJdCgpib3RvX3Nlc3Npb24gPSBib3RvMy5TZXNzaW9uKHJlZ2lvbl9uYW1lPXJlZ2lvbikKZmVhdHVyZXN0b3JlX3J1bnRpbWUgPSBib3RvX3Nlc3Npb24uY2xpZW50KAogICAgc2VydmljZV9uYW1lPSJzYWdlbWFrZXItZmVhdHVyZXN0b3JlLXJ1bnRpbWUiLCByZWdpb25fbmFtZT1yZWdpb24KKQpjbGllbnRfc20gPSBib3RvX3Nlc3Npb24uY2xpZW50KCJzYWdlbWFrZXItcnVudGltZSIsIHJlZ2lvbl9uYW1lPXJlZ2lvbikKCmNvbF9vcmRlciA9IFsKICAgICJpbmNpZGVudF9zZXZlcml0eSIsCiAgICAibnVtX3ZlaGljbGVzX2ludm9sdmVkIiwKICAgICJudW1faW5qdXJpZXMiLAogICAgIm51bV93aXRuZXNzZXMiLAogICAgInBvbGljZV9yZXBvcnRfYXZhaWxhYmxlIiwKICAgICJpbmp1cnlfY2xhaW0iLAogICAgInZlaGljbGVfY2xhaW0iLAogICAgInRvdGFsX2NsYWltX2Ftb3VudCIsCiAgICAiaW5jaWRlbnRfbW9udGgiLAogICAgImluY2lkZW50X2RheSIsCiAgICAiaW5jaWRlbnRfZG93IiwKICAgICJpbmNpZGVudF9ob3VyIiwKICAgICJkcml2ZXJfcmVsYXRpb25zaGlwX3NlbGYiLAogICAgImRyaXZlcl9yZWxhdGlvbnNoaXBfbmEiLAogICAgImRyaXZlcl9yZWxhdGlvbnNoaXBfc3BvdXNlIiwKICAgICJkcml2ZXJfcmVsYXRpb25zaGlwX2NoaWxkIiwKICAgICJkcml2ZXJfcmVsYXRpb25zaGlwX290aGVyIiwKICAgICJpbmNpZGVudF90eXBlX2NvbGxpc2lvbiIsCiAgICAiaW5jaWRlbnRfdHlwZV9icmVha2luIiwKICAgICJpbmNpZGVudF90eXBlX3RoZWZ0IiwKPHxmaW1faG9sZXw+CiAgICAiYXV0aG9yaXRpZXNfY29udGFjdGVkX3BvbGljZSIsCiAgICAiYXV0aG9yaXRpZXNfY29udGFjdGVkX25vbmUiLAogICAgImF1dGhvcml0aWVzX2NvbnRhY3RlZF9maXJlIiwKICAgICJhdXRob3JpdGllc19jb250YWN0ZWRfYW1idWxhbmNlIiwKICAgICJjdXN0b21lcl9hZ2UiLAogICAgImN1c3RvbWVyX2VkdWNhdGlvbiIsCiAgICAibW9udGhzX2FzX2N1c3RvbWVyIiwKICAgICJwb2xpY3lfZGVkdWN0YWJsZSIsCiAgICAicG9saWN5X2FubnVhbF9wcmVtaXVtIiwKICAgICJwb2xpY3lfbGlhYmlsaXR5IiwKICAgICJhdXRvX3llYXIiLAogICAgIm51bV9jbGFpbXNfcGFzdF95ZWFyIiwKICAgICJudW1faW5zdXJlcnNfcGFzdF81X3llYXJzIiwKICAgICJjdXN0b21lcl9nZW5kZXJfbWFsZSIsCiAgICAiY3VzdG9tZXJfZ2VuZGVyX2ZlbWFsZSIsCiAgICAicG9saWN5X3N0YXRlX2NhIiwKICAgICJwb2xpY3lfc3RhdGVfd2EiLAogICAgInBvbGljeV9zdGF0ZV9heiIsCiAgICAicG9saWN5X3N0YXRlX29yIiwKICAgICJwb2xpY3lfc3RhdGVfbnYiLAogICAgInBvbGljeV9zdGF0ZV9pZCIsCl0KCgpkZWYgbGFtYmRhX2hhbmRsZXIoZXZlbnQsIGNvbnRleHQpOgogICAgIyBHZXQgZGF0YSBmcm9tIG9ubGluZSBmZWF0dXJlIHN0b3JlCiAgICBsb2dnZXIuaW5mbyhldmVudCkKICAgIHZhbF9wb2xpY3lfaWQgPSBzdHIoZXZlbnRbInF1ZXJ5U3RyaW5nUGFyYW1ldGVycyJdWyJwb2xpY3lfaWQiXSkKCiAgICBjbGFpbXNfcmVzcG9uc2UgPSBmZWF0dXJlc3RvcmVfcnVudGltZS5nZXRfcmVjb3JkKAogICAgICAgIEZlYXR1cmVHcm91cE5hbWU9Y2xhaW1zX2ZnX25hbWUsCiAgICAgICAgUmVjb3JkSWRlbnRpZmllclZhbHVlQXNTdHJpbmc9c3RyKHZhbF9wb2xpY3lfaWQpLAogICAgKQoKICAgIGlmIGNsYWltc19yZXNwb25zZS5nZXQoIlJlY29yZCIpOgogICAgICAgIGNsYWltc19yZWNvcmQgPSBjbGFpbXNfcmVzcG9uc2VbIlJlY29yZCJdCiAgICAgICAgY2xhaW1zX2RmID0gcGQuRGF0YUZyYW1lKGNsYWltc19yZWNvcmQpLnNldF9pbmRleCgiRmVhdHVyZU5hbWUiKQogICAgZWxzZToKICAgICAgICBsb2dnaW5nLmluZm8oIk5vIFJlY29yZCByZXR1cm5lZCAvIFJlY29yZCBLZXkgaW4gY2xhaW1zIGZlYXR1cmUgZ3JvdXBcbiIpCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgInN0YXR1c0NvZGUiOiA0MDQsCiAgICAgICAgICAgICJib2R5IjoganNvbi5kdW1wcyh7IkVycm9yIjogIlJlY29yZCBub3QgZm91bmQgaW4gQ0xBSU1TIGZlYXR1cmUgZ3JvdXAifSksCiAgICAgICAgfQoKICAgIGN1c3RvbWVyc19yZXNwb25zZSA9IGZlYXR1cmVzdG9yZV9ydW50aW1lLmdldF9yZWNvcmQoCiAgICAgICAgRmVhdHVyZUdyb3VwTmFtZT1jdXN0b21lcnNfZmdfbmFtZSwKICAgICAgICBSZWNvcmRJZGVudGlmaWVyVmFsdWVBc1N0cmluZz1zdHIodmFsX3BvbGljeV9pZCksCiAgICApCgogICAgaWYgY3VzdG9tZXJzX3Jlc3BvbnNlLmdldCgiUmVjb3JkIik6CiAgICAgICAgY3VzdG9tZXJfcmVjb3JkID0gY3VzdG9tZXJzX3Jlc3BvbnNlWyJSZWNvcmQiXQogICAgICAgIGN1c3RvbWVyX2RmID0gcGQuRGF0YUZyYW1lKGN1c3RvbWVyX3JlY29yZCkuc2V0X2luZGV4KCJGZWF0dXJlTmFtZSIpCiAgICBlbHNlOgogICAgICAgIGxvZ2dpbmcuaW5mbygiTm8gUmVjb3JkIHJldHVybmVkIC8gUmVjb3JkIEtleSBpbiBDVVNUT01FUlMgZmVhdHVyZSBncm91cFxuIikKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAic3RhdHVzQ29kZSI6IDQwNCwKICAgICAgICAgICAgImJvZHkiOiBqc29uLmR1bXBzKAogICAgICAgICAgICAgICAgeyJFcnJvciI6ICJSZWNvcmQgbm90IGZvdW5kIGluIENVU1RPTUVSUyBmZWF0dXJlIGdyb3VwIn0KICAgICAgICAgICAgKSwKICAgICAgICB9CgogICAgdHJ5OgogICAgICAgIGJsZW5kZWRfZGYgPSBwZC5jb25jYXQoW2NsYWltc19kZiwgY3VzdG9tZXJfZGZdKS5sb2NbY29sX29yZGVyXQogICAgICAgIGRhdGFfaW5wdXQgPSAiLCIuam9pbihibGVuZGVkX2RmWyJWYWx1ZUFzU3RyaW5nIl0pCgogICAgICAgIGxvZ2dpbmcuaW5mbygiZGF0YV9pbnB1dDogIiwgZGF0YV9pbnB1dCkKICAgICAgICByZXNwb25zZSA9IGNsaWVudF9zbS5pbnZva2VfZW5kcG9pbnQoCiAgICAgICAgICAgIEVuZHBvaW50TmFtZT1lbmRwb2ludF9uYW1lLCBCb2R5PWRhdGFfaW5wdXQsIENvbnRlbnRUeXBlPWNvbnRlbnRfdHlwZQogICAgICAgICkKCiAgICAgICAgc2NvcmUgPSBqc29uLmxvYWRzKHJlc3BvbnNlWyJCb2R5Il0ucmVhZCgpKQogICAgICAgIGxvZ2dpbmcuaW5mbyhmInNjb3JlOiB7c2NvcmV9IikKCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgInN0YXR1c0NvZGUiOiAyMDAsCiAgICAgICAgICAgICJib2R5IjoganNvbi5kdW1wcyh7InBvbGljeV9pZCI6IHZhbF9wb2xpY3lfaWQsICJzY29yZSI6IHNjb3JlfSksCiAgICAgICAgfQogICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbihmImludGVybmFsIGVycm9yIikKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAic3RhdHVzQ29kZSI6IDUwMCwKICAgICAgICAgICAgImJvZHkiOiBqc29uLmR1bXBzKAogICAgICAgICAgICAgICAgeyJFcnJvciI6IGYiaW50ZXJuYWwgZXJyb3IuIENoZWNrIExvZ3MgZm9yIG1vcmUgZGV0YWlscyJ9CiAgICAgICAgICAgICksCiAgICAgICAgfQo8fGZpbV9zdWZmaXh8PgogICAgImNvbGxpc2lvbl90eXBlX2Zyb250IiwKICAgICJjb2xsaXNpb25fdHlwZV9yZWFyIiwKICAgICJjb2xsaXNpb25fdHlwZV9zaWRlIiwKICAgICJjb2xsaXNpb25fdHlwZV9uYSIsCjx8ZmltX2VuZHw+"]
["fd90796b71c175c87606491e140663b1a9ad197f-1","fd90796b71c175c87606491e140663b1a9ad197f","PHxmaW1fcHJlZml4fD4KIyBAYXV0aG9yOiBzYWdhcmthcjEwQGdtYWlsLmNvbQoKY2xhc3MgVHJpZU5vZGU6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5uZXh0ID0gW05vbmUgZm9yIGkgaW4geHJhbmdlKDI2KV0KICAgICAgICBzZWxmLndvcmQgPSBOb25lCgoKY2xhc3MgU29sdXRpb24ob2JqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLnJlcyA9IE5vbmUKICAgICAgICBzZWxmLm0gPSBOb25lCiAgICAgICAgc2VsZi5uID0gTm9uZQoKICAgIGRlZiBmaW5kV29yZHMoc2VsZiwgYm9hcmQsIHdvcmRzKToKICAgICAgICAiIiIKICAgICAgICA6dHlwZSBib2FyZDogTGlzdFtMaXN0W3N0cl1dCjx8ZmltX2hvbGV8PgogICAgICAgICAgICByZXR1cm4gW10KICAgICAgICByb290ID0gVHJpZU5vZGUoKQogICAgICAgIHNlbGYucmVzID0gW10KCiAgICAgICAgZm9yIHdvcmQgaW4gd29yZHM6CiAgICAgICAgICAgIGN1cnIgPSByb290CiAgICAgICAgICAgIGZvciBjaGFyIGluIHdvcmQ6CiAgICAgICAgICAgICAgICBpZHggPSBvcmQoY2hhcikgLSA5NwogICAgICAgICAgICAgICAgaWYgY3Vyci5uZXh0W2lkeF0gPT0gTm9uZToKICAgICAgICAgICAgICAgICAgICBjdXJyLm5leHRbaWR4XSA9IFRyaWVOb2RlKCkKICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyLm5leHRbaWR4XQogICAgICAgICAgICBjdXJyLndvcmQgPSB3b3JkCgogICAgICAgIHNlbGYubSwgc2VsZi5uID0gbGVuKGJvYXJkKSwgbGVuKGJvYXJkWzBdKQogICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLm0pOgogICAgICAgICAgICBmb3IgaiBpbiB4cmFuZ2Uoc2VsZi5uKToKICAgICAgICAgICAgICAgIHNlbGYuZGZzKGJvYXJkLCBpLCBqLCByb290KQogICAgICAgIHJldHVybiBzZWxmLnJlcwoKICAgIGRlZiBkZnMoc2VsZiwgYm9hcmQsIGksIGosIGN1cnJfbm9kZSk6CiAgICAgICAgdG1wID0gYm9hcmRbaV1bal0KICAgICAgICBpZiB0bXAgPT0gJyMnIG9yIGN1cnJfbm9kZS5uZXh0W29yZCh0bXApIC0gOTddID09IE5vbmU6CiAgICAgICAgICAgIHJldHVybgogICAgICAgIGJvYXJkW2ldW2pdID0gJyMnCiAgICAgICAgY3Vycl9ub2RlID0gY3Vycl9ub2RlLm5leHRbb3JkKHRtcCkgLSA5N10KICAgICAgICBpZiBjdXJyX25vZGUud29yZCAhPSBOb25lOgogICAgICAgICAgICBzZWxmLnJlcy5hcHBlbmQoY3Vycl9ub2RlLndvcmQpCiAgICAgICAgICAgIGN1cnJfbm9kZS53b3JkID0gTm9uZQogICAgICAgIG1vdmVzID0gW1stMSwgMF0sIFsxLCAwXSwgWzAsIC0xXSwgWzAsIDFdXQogICAgICAgIGZvciBtb3ZlIGluIG1vdmVzOgogICAgICAgICAgICBpZiAwIDw9IGkgKyBtb3ZlWzBdIDwgc2VsZi5tIGFuZCAwIDw9IGogKyBtb3ZlWzFdIDwgc2VsZi5uOgogICAgICAgICAgICAgICAgc2VsZi5kZnMoYm9hcmQsIGkgKyBtb3ZlWzBdLCBqICsgbW92ZVsxXSwgY3Vycl9ub2RlKQogICAgICAgIGJvYXJkW2ldW2pdID0gdG1wCgo8fGZpbV9zdWZmaXh8PgogICAgICAgIDp0eXBlIHdvcmRzOiBMaXN0W3N0cl0KICAgICAgICA6cnR5cGU6IExpc3Rbc3RyXQogICAgICAgICIiIgogICAgICAgIGlmIGxlbihib2FyZCkgPT0gMCBvciBsZW4oYm9hcmRbMF0pID09IDA6Cjx8ZmltX2VuZHw+"]
["90179d1f1d1bfce346d14cd56bf14bf27328cbd6-3","90179d1f1d1bfce346d14cd56bf14bf27328cbd6","PHxmaW1fcHJlZml4fD4KIiIiIFR5cGVFcnJvciAiIiIKZnJvbSAuYmFzZV9lcnJvciBpbXBvcnQgQmFzZUVycm9yCgoKY2xhc3MgVHlwZUVycm9yKEJhc2VFcnJvcik6CiAgICAiIiIgRXJyb3IgdGhhdCBvY2N1cnMgb24gVHlwZSB2YWxpZGF0aW9uICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGUsIHZhbHVlKToKICAgICAgICBzZWxmLnR5cGVfbmFtZSA9IHR5cGUubmFtZSgpCiAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCgogICAgZGVmIF9fc3RyX18oc2VsZikgLT4gc3RyOgogICAgICAgIHJldHVybiAne30gaXMgbm90IHR5cGUge30nLmZvcm1hdChzZWxmLnZhbHVlLCBzZWxmLnR5cGVfbmFtZSkKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgbmFtZSgpIC0+IHN0cjoKICAgICAgICByZXR1cm4gIlR5cGVFcnJvciIKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICd2YWx1ZSc6IHNlbGYudmFsdWUKICAgICAgICB9Cjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIHRvX2pzb24oc2VsZikgLT4gZGljdDoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAnbmFtZSc6IHNlbGYudHlwZV9uYW1lLAo8fGZpbV9lbmR8Pg=="]
["3e0b45276c5095f828fa973faefbd152f0706b7c-2","3e0b45276c5095f828fa973faefbd152f0706b7c","PHxmaW1fcHJlZml4fD4KZnJvbSAuYWJzdHJhY3RfZ2V0X2FwaV90ZXN0IGltcG9ydCBBYnN0cmFjdEdldEFwaVRlc3QKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIC5hYnN0cmFjdF9wb3N0X2FwaV90ZXN0IGltcG9ydCBBYnN0cmFjdFBvc3RBcGlUZXN0Cjx8ZmltX2VuZHw+"]
["e36efd557115f575856d6a6470d16516f37eca87-2","e36efd557115f575856d6a6470d16516f37eca87","PHxmaW1fcHJlZml4fD4KIiIiClNhaWtpIERpc2NvcmQgQm90CgpodHRwczovL2Rpc2NvcmQuY29tL2FwaS9vYXV0aDIvYXV0aG9yaXplP2NsaWVudF9pZD04ODgxNjQ3NjI1MzIzNDM4MTkmcGVybWlzc2lvbnM9Mjc0ODc4MjA0OTI4JnNjb3BlPWJvdCUyMGFwcGxpY2F0aW9ucy5jb21tYW5kcwoKwqkgQW5pbWUgbm8gU2VrYWksIDIwMjEKIiIiCgojIElNUE9SVFMKCmZyb20gaW8gaW1wb3J0IEJ5dGVzSU8KZnJvbSBqc29uIGltcG9ydCBkdW1wcwojIE5BVElWRSBUTyBQWVRIT04KZnJvbSByZSBpbXBvcnQgY29tcGlsZQpmcm9tIHRyYWNlYmFjayBpbXBvcnQgcHJpbnRfZXhjCgppbXBvcnQgZGlzY29yZCAgIyB0byBjb21tdW5pY2F0ZSB3aXRoIGRpc2NvcmQKZnJvbSBkaXNjb3JkLmV4dCBpbXBvcnQgY29tbWFuZHMgICMgdG8gZ2V0IGRpc2NvcmQgY29tbWFuZHMKZnJvbSBkaXNjb3JkX3NsYXNoIGltcG9ydCBTbGFzaENvbW1hbmQKZnJvbSBkaXNjb3JkX3NsYXNoLmNvbnRleHQgaW1wb3J0IFNsYXNoQ29udGV4dApmcm9tIGRpc2NvcmRfc2xhc2gubW9kZWwgaW1wb3J0IFNsYXNoQ29tbWFuZE9wdGlvblR5cGUKZnJvbSBkaXNjb3JkX3NsYXNoLnV0aWxzLm1hbmFnZV9jb21tYW5kcyBpbXBvcnQgY3JlYXRlX29wdGlvbgoKZnJvbSBjb25maWcgaW1wb3J0IChDT01NQU5EX1BSRUZJWCwgREVCVUdfTU9ERSwgUk9HRVJfUkVBQ1RJT04sCiAgICAgICAgICAgICAgICAgICAgU0FJS0lfQk9UX1ZFUlNJT04sIFNBSUtJX0xMU19FTkRQT0lOVCkKZnJvbSBtb2RlbHMuZXhlcmNpY2UgaW1wb3J0IEV4ZXJjaWNlCmZyb20gdGVtcGxhdGVzLmJvdHN0YXRzIGltcG9ydCBCT1RTVEFUU19URU1QTEFURSwgUE9XRVJFRF9CWQpmcm9tIHRlbXBsYXRlcy5oZWxwIGltcG9ydCBIRUxQX1RFTVBMQVRFCmZyb20gdXRpbHMgaW1wb3J0IGV4Y2VwdGlvbnMKZnJvbSB1dGlscy5leGNlcHRpb25zIGltcG9ydCBFeGVyY2ljZU5vdE51bWJlciwgUGFnZU5vdE51bWJlciwgU2Fpa2lFeGNlcHRpb24KZnJvbSB1dGlscy5odG1sIGltcG9ydCByZW5kZXIKZnJvbSB1dGlscy5sb2cgaW1wb3J0IExvZ0xldmVscywgbG9nCmZyb20gdXRpbHMucmVxdWVzdCBpbXBvcnQgUmVxdWVzdApmcm9tIHV0aWxzLnNhbml0aXplIGltcG9ydCB1cmxfZW5jb2RlCgojIERFRklOSU5HIENMSUVOVC9CT1QgQU5EIElUUyBQUkVGSVgKY2xpZW50ID0gY29tbWFuZHMuQm90KGNvbW1hbmRfcHJlZml4PUNPTU1BTkRfUFJFRklYLCBjYXNlX2luc2Vuc2l0aXZlPVRydWUpCnNsYXNoID0gU2xhc2hDb21tYW5kKGNsaWVudCwgc3luY19jb21tYW5kcz1UcnVlKQoKIyBXSEVOIFRIRSBCT1QgSVMgVVAKCgpJTlRfUkVHRVggPSBjb21waWxlKCJcZCsiKQoKCkBjbGllbnQuZXZlbnQKYXN5bmMgZGVmIG9uX3JlYWR5KCk6CiAgICAjIEdBTUUgQUNUSVZJVFkKICAgIGF3YWl0IGNsaWVudC5jaGFuZ2VfcHJlc2VuY2UoYWN0aXZpdHk9ZGlzY29yZC5HYW1lKG5hbWU9JyFzYWlraWhlbHAnKSkKICAgIGxvZygiU2Fpa2kgaXMgcmVhZHkiLCBsZXZlbD1Mb2dMZXZlbHMuSU5GTykKCgpkZWYgdG9faW50X2xpc3QodGV4dDogc3RyKSAtPiBsaXN0W2ludF06CiAgICBpZiB0ZXh0IGlzIE5vbmUgb3Igc3RyKHRleHQpLnJlcGxhY2UoIiAiLCAiIikgaW4gWyIiLCAiKiJdOgogICAgICAgIHJldHVybiBbXQogICAgcmVzdWx0cyA9IFtpbnQodmFsKSBmb3IgdmFsIGluIElOVF9SRUdFWC5maW5kYWxsKHN0cih0ZXh0KSldCiAgICByZXN1bHRzLnNvcnQoKQogICAgcmV0dXJuIHJlc3VsdHMKCgphc3luYyBkZWYgZ2V0X2xscyhjbGFzc19uYW1lOiBzdHIsIHN1YmplY3Q6IHN0ciwgcGFnZXM6IGxpc3RbaW50XSwgZXhlcmNpY2VzOiBsaXN0W2ludF0gPSBOb25lLCBzdHlsZTogc3RyID0gIiIsIHdpZHRoOiBpbnQgPSBOb25lKToKICAgIGlmIHN1YmplY3QgPT0gImxsY2UiOgogICAgICAgIHJldHVybiBCeXRlc0lPKHJlbmRlcigiPGgxPlB0ZHIgdCdhcyBjcnUgdCfDqXRhaXMgZW4gcGh5c2lxdWUgZnJyIGxhIGxsY2UgeSBhIHIgw6AgZmFpcmUgdHUgc2FpcyBwYXJsZXIgYW5nbGFpcyBhbG9ycyBhcnLDqnRlIGRlIGRlbWFuZGVyIGRlcyBleGVyY2ljZXMgcXVhbmQgaWwgeSBlbiBhIHBhczwvaDE+IikpCiAgICBsb2coIkNvbnZlcnRpbmcgdGhlIHBhZ2VzIHRvIGludGVnZXJzIikKICAgIGZvciBpbmRleCwgcGFnZSBpbiBlbnVtZXJhdGUobGlzdChwYWdlcykpOgogICAgICAgIHRyeToKICAgICAgICAgICAgcGFnZXNbaW5kZXhdID0gaW50KHBhZ2UpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgcmFpc2UgUGFnZU5vdE51bWJlcigKICAgICAgICAgICAgICAgIGYiVGhlIHtwYWdlfSBwYWdlIGRvZXMgbm90IHNlZW0gdG8gYmUgYW4gaW50ZWdlciIpCgogICAgaWYgbGVuKGV4ZXJjaWNlcykgPD0gMDoKICAgICAgICBleGVyY2ljZXMgPSBOb25lCiAgICBpZiBleGVyY2ljZXMgaXMgbm90IE5vbmU6CiAgICAgICAgbG9nKCJDb252ZXJ0aW5nIHRoZSBleGVyY2ljZXMgdG8gaW50ZWdlcnMiKQogICAgICAgIGZvciBpbmRleCwgZXhlcmNpY2UgaW4gZW51bWVyYXRlKGxpc3QoZXhlcmNpY2VzKSk6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIGV4ZXJjaWNlc1tpbmRleF0gPSBpbnQoZXhlcmNpY2UpCiAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICByYWlzZSBFeGVyY2ljZU5vdE51bWJlcigKICAgICAgICAgICAgICAgICAgICBmIlRoZSB7ZXhlcmNpY2V9IHBhZ2UgZG9lcyBub3Qgc2VlbSB0byBiZSBhbiBpbnRlZ2VyIikKICAgIHIgPSBSZXF1ZXN0KHVybD1TQUlLSV9MTFNfRU5EUE9JTlQuZm9ybWF0KAogICAgICAgIHN1YmplY3Q9dXJsX2VuY29kZShzdHIoc3ViamVjdCkuc3RyaXAoKSksCiAgICAgICAgY2xhc3NfbmFtZT11cmxfZW5jb2RlKHN0cihjbGFzc19uYW1lKS5zdHJpcCgpKSwKICAgICAgICBwYWdlcz11cmxfZW5jb2RlKGR1bXBzKHBhZ2VzLCBlbnN1cmVfYXNjaWk9RmFsc2UpKSwKICAgICkpCiAgICB2YWxpZCA9IDAKICAgIHJlc3VsdHMgPSAiIgogICAgZm9yIGRhdGEgaW4gci5qc29uOgogICAgICAgIGV4ZXJjaWNlID0gRXhlcmNpY2UoZGF0YSkKICAgICAgICBpZiBleGVyY2ljZXMgaXMgbm90IE5vbmUgYW5kIG5vdCBleGVyY2ljZS5udW1iZXIgaW4gZXhlcmNpY2VzOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIHJlc3VsdHMgKz0gZXhlcmNpY2UuZHVtcCgpICsgIjxicj48YnI+IgogICAgICAgIHZhbGlkICs9IDEKCiAgICBpZiB2YWxpZCA8PSAwOgogICAgICAgIHJldHVybiBCeXRlc0lPKHJlbmRlcihmIjxoMT5Ob3VzIG4nYXZvbnMgcGFzIHB1IHRyb3V2ZXIgZGUgc29sdXRpb24uPGJyPkxpdnJlOiB7c3ViamVjdH08YnI+UGFnZXM6IHsnLCAnLmpvaW4oW3N0cihwYWdlKSBmb3IgcGFnZSBpbiBwYWdlc10pfTxicj5FeGVyY2ljZXM6IHsnLCAnLmpvaW4oW3N0cihleGVyY2ljZSkgZm9yIGV4ZXJjaWNlIGluIGV4ZXJjaWNlc10pIGlmIGV4ZXJjaWNlcyBpcyBub3QgTm9uZSBlbHNlICcqJ308L2gxPiIsIHdpZHRoPTgwMCkpCgogICAgcmV0dXJuIEJ5dGVzSU8ocmVuZGVyKHJlc3VsdHMsIGNzcz1zdHIoc3R5bGUpLCB3aWR0aD13aWR0aCkpCgoKYXN5bmMgZGVmIGVycm9yX2hhbmRsZXIoY29udGV4dCwgZXJyb3IpOgogICAgaWYgREVCVUdfTU9ERToKICAgICAgICBwcmludF9leGMoKQogICAgaWYgaXNpbnN0YW5jZShlcnJvciwgU2Fpa2lFeGNlcHRpb24pOgogICAgICAgIGF3YWl0IGNvbnRleHQuc2VuZChlcnJvci5TQUZFX01FU1NBR0UuZm9ybWF0KG1lbnRpb249Y29udGV4dC5hdXRob3IubWVudGlvbikpCiAgICBlbHNlOgogICAgICAgIGxvZygiQW4gdW5rbm93biBlcnJvciBvY2N1cmVkOiB7bmFtZX0ge2Vycm9yfSIuZm9ybWF0KAogICAgICAgICAgICBuYW1lPWVycm9yLl9fY2xhc3NfXy5fX25hbWVfXywgZXJyb3I9c3RyKGVycm9yKSksIGxldmVsPUxvZ0xldmVscy5FUlJPUikKICAgICAgICBhd2FpdCBjb250ZXh0LnNlbmQoZXhjZXB0aW9ucy5TYWlraUV4Y2VwdGlvbi5TQUZFX01FU1NBR0UuZm9ybWF0KG1lbnRpb249Y29udGV4dC5hdXRob3IubWVudGlvbikpCgoKQHNsYXNoLnNsYXNoKG5hbWU9InNvbHV0aW9uIiwKICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJEb25uZSBsYSBzb2x1dGlvbiBkJ3VuIGV4ZXJjaWNlIiwKICAgICAgICAgICAgIG9wdGlvbnM9WwogICAgICAgICAgICAgICAgIGNyZWF0ZV9vcHRpb24oCiAgICAgICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzZSIsCiAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJUYSBjbGFzc2UiLAogICAgICAgICAgICAgICAgICAgICBvcHRpb25fdHlwZT1TbGFzaENvbW1hbmRPcHRpb25UeXBlLlNUUklORywKICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9VHJ1ZQogICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgY3JlYXRlX29wdGlvbigKICAgICAgICAgICAgICAgICAgICAgbmFtZT0ibWF0aWVyZSIsCiAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJMYSBtYXRpw6hyZSAocG91ciBjaG9pc2lyIGxlIGxpdnJlKSIsCiAgICAgICAgICAgICAgICAgICAgIG9wdGlvbl90eXBlPVNsYXNoQ29tbWFuZE9wdGlvblR5cGUuU1RSSU5HLAogICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD1UcnVlCiAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICBjcmVhdGVfb3B0aW9uKAogICAgICAgICAgICAgICAgICAgICBuYW1lPSJwYWdlIiwKICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249IkxhIHBhZ2UgKG91IGxlcyBwYWdlcykiLAogICAgICAgICAgICAgICAgICAgICBvcHRpb25fdHlwZT1TbGFzaENvbW1hbmRPcHRpb25UeXBlLlNUUklORywKICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9VHJ1ZQogICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgY3JlYXRlX29wdGlvbigKICAgICAgICAgICAgICAgICAgICAgbmFtZT0iZXhlcmNpY2UiLAogICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0iTCdleGVyY2ljZSAob3UgbGVzIGV4ZXJjaWNlcykgb3UgKiBzaSB0dSB2ZXV4IHRvdXMgbGVzIGV4ZXJjaWNlcyIsCiAgICAgICAgICAgICAgICAgICAgIG9wdGlvbl90eXBlPVNsYXNoQ29tbWFuZE9wdGlvblR5cGUuU1RSSU5HLAogICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD1UcnVlCiAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICBjcmVhdGVfb3B0aW9uKAogICAgICAgICAgICAgICAgICAgICBuYW1lPSJzdHlsZSIsCiAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJTaSB0J2VzIHVuIGRldmVsb3BwZXVyIGV0IHF1ZSB2ZXV4IHJham91dGVyIGR1IENTUyDDoCB0b24gaW1hZ2UgOikiLAogICAgICAgICAgICAgICAgICAgICBvcHRpb25fdHlwZT1TbGFzaENvbW1hbmRPcHRpb25UeXBlLlNUUklORywKICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UKICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgIGNyZWF0ZV9vcHRpb24oCiAgICAgICAgICAgICAgICAgICAgIG5hbWU9IndpZHRoIiwKICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249IlBvdXIgZMOpZmluaXIgbGEgbGFyZ2V1ciBkZSB0b24gaW1hZ2UiLAogICAgICAgICAgICAgICAgICAgICBvcHRpb25fdHlwZT1TbGFzaENvbW1hbmRPcHRpb25UeXBlLklOVEVHRVIsCiAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlCiAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgXSkKYXN5bmMgZGVmIHNvbHV0aW9uKGNvbnRleHQ6IFNsYXNoQ29udGV4dCwgY2xhc3NlOiBzdHIsIG1hdGllcmU6IHN0ciwgcGFnZTogc3RyLCBleGVyY2ljZTogc3RyID0gTm9uZSwgc3R5bGU6IHN0ciA9ICIiLCB3aWR0aDogaW50ID0gTm9uZSk6CiAgICB0cnk6CiAgICAgICAgbG9nKAogICAgICAgICAgICBmIuKGkiAnL3NvbHV0aW9uJyBjYW1lIGZyb20gdGhlIHNlcnZlciB7Y29udGV4dC5ndWlsZH0gKHVzZXI6IHtjb250ZXh0LmF1dGhvcn0pIiwgbGV2ZWw9TG9nTGV2ZWxzLklORk8pCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBsb2coIkdldHRpbmcgdGhlIHJlc3BvbnNlcyBmcm9tIExMUyIpCiAgICAgICAgcGFnZXMgPSB0b19pbnRfbGlzdChwYWdlKQogICAgICAgIGV4ZXJjaWNlcyA9IHRvX2ludF9saXN0KGV4ZXJjaWNlKQogICAgICAgIGF3YWl0IGNvbnRleHQuc2VuZChmIk9uIGNoZXJjaGUgbGVzIHNvbHV0aW9ucyB7Y29udGV4dC5hdXRob3IubWVudGlvbn0iKQo8fGZpbV9lbmR8Pg=="]
["7b29e1883228ed750605de0bae978bd5a72042aa-1","7b29e1883228ed750605de0bae978bd5a72042aa","PHxmaW1fcHJlZml4fD4KIiIiCkFQSSBlbmRwb2ludCBmb3IgZ3JvdXBzCiIiIgoKZnJvbSBmbGFza19qd3RfZXh0ZW5kZWQgaW1wb3J0IGp3dF9yZXF1aXJlZAoKZnJvbSBzZWFtbV9kYXNoYm9hcmQgaW1wb3J0IGF1dGhvcml6ZQpmcm9tIHNlYW1tX2RhdGFzdG9yZS5kYXRhYmFzZS5tb2RlbHMgaW1wb3J0IEdyb3VwCmZyb20gc2VhbW1fZGF0YXN0b3JlLmRhdGFiYXNlLnNjaGVtYSBpbXBvcnQgR3JvdXBTY2hlbWEKCjx8ZmltX2hvbGV8PgoKICAgIGdyb3VwcyA9IEdyb3VwLnF1ZXJ5LmFsbCgpCgogICAgIyB1c2VybmFtZXMgPSBbIFsgdXNlci51c2VybmFtZSBmb3IgdXNlciBpbiBncm91cC51c2VycyBdIGZvciBncm91cCBpbiBncm91cHMgXQoKICAgIGdyb3VwX3NjaGVtYSA9IEdyb3VwU2NoZW1hKG1hbnk9VHJ1ZSkKCiAgICBncm91cHMgPSBncm91cF9zY2hlbWEuZHVtcChncm91cHMpCgogICAgIyBmb3IgaSwgZ3JvdXAgaW4gZW51bWVyYXRlKGdyb3Vwcyk6CiAgICAjICAgIGdyb3VwWyJ1c2VybmFtZXMiXSA9IHVzZXJuYW1lc1tpXQoKICAgIHJldHVybiBncm91cHMsIDIwMAo8fGZpbV9zdWZmaXh8PgoKQGp3dF9yZXF1aXJlZChvcHRpb25hbD1UcnVlKQpAYXV0aG9yaXplLmhhc19yb2xlKCJhZG1pbiIsICJncm91cCBtYW5hZ2VyIikKZGVmIGdldF9ncm91cHMoKToKPHxmaW1fZW5kfD4="]
["9d0256de9d4fffc0b26e90242fb6a0f84c6668d7-1","9d0256de9d4fffc0b26e90242fb6a0f84c6668d7","PHxmaW1fcHJlZml4fD4KIiIiOm1vZDpgc2lkZXIuZGF0ZXRpbWVgIC0tLSBEYXRlIGFuZCB0aW1lIHJlbGF0ZWQgdXRpbGl0aWVzCn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgoKRm9yIG1pbmltdW0gc3VwcG9ydCBvZiB0aW1lIHpvbmVzLCB3aXRob3V0IGFkZGluZyBhbnkgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzCmUuZy4gcHl0el8sIFNpZGVyIGhhZCB0byBpbXBsZW1lbnQgOmNsYXNzOmBVdGNgIGNsYXNzIHdoaWNoIGlzIGEgc3VidHlwZSBvZgo6Y2xhc3M6YGRhdGV0aW1lLnR6aW5mb2AuCgpCZWNhdXNlIDptb2Q6YGRhdGV0aW1lYCBtb2R1bGUgcHJvdmlkZWQgYnkgdGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5CmRvZXNuJ3QgY29udGFpbiBVVEMgb3IgYW55IG90aGVyIDpjbGFzczpgfmRhdGV0aW1lLnR6aW5mb2Agc3VidHlwZQppbXBsZW1lbnRhdGlvbnMuICAoQSBmdW5ueSB0aGluZyBpcyB0aGF0IHRoZSBkb2N1bWVudGF0aW9uIG9mIDptb2Q6YGRhdGV0aW1lYAptb2R1bGUgc2hvd3MgYW4gZXhhbXBsZSBvZiBob3cgdG8gaW1wbGVtZW50IFVUQyA6Y2xhc3M6YH5kYXRldGltZS50emluZm9gLikKCklmIHlvdSB3YW50IG1vcmUgdmFyaW91cyB0aW1lIHpvbmVzIHN1cHBvcnQgdXNlIHRoZSB0aGlyZC1wYXJ0eSBweXR6XwpwYWNrYWdlLgoKLi4gX1VUQzogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db29yZGluYXRlZF9Vbml2ZXJzYWxfVGltZQouLiBfcHl0ejogaHR0cDovL3B5dHouc291cmNlZm9yZ2UubmV0LwoKIiIiCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0LCBkaXZpc2lvbgppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IG51bWJlcnMKCgojOiAoOmNsYXNzOmBkYXRldGltZS50aW1lZGVsdGFgKSBObyBkaWZmZXJlbmNlLgpaRVJPX0RFTFRBID0gZGF0ZXRpbWUudGltZWRlbHRhKDApCgoKY2xhc3MgVXRjKGRhdGV0aW1lLnR6aW5mbyk6CiAgICAiIiJUaGUgOmNsYXNzOmBkYXRldGltZS50emluZm9gIGltcGxlbWVudGF0aW9uIG9mIFVUQ18uCgogICAgLi4gc291cmNlY29kZTo6IHB5Y29uCgogICAgICAgPj4+IGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCiAgICAgICA+Pj4gdXRjID0gVXRjKCkKICAgICAgID4+PiBkdCA9IGRhdGV0aW1lKDIwMTIsIDMsIDE1LCAwLCAxNSwgMzAsIHR6aW5mbz11dGMpCiAgICAgICA+Pj4gZHQKICAgICAgIGRhdGV0aW1lLmRhdGV0aW1lKDIwMTIsIDMsIDE1LCAwLCAxNSwgMzAsIHR6aW5mbz1zaWRlci5kYXRldGltZS5VdGMoKSkKICAgICAgID4+PiB1dGMudXRjb2Zmc2V0KGR0KQogICAgICAgZGF0ZXRpbWUudGltZWRlbHRhKDApCiAgICAgICA+Pj4gdXRjLmRzdChkdCkKICAgICAgIGRhdGV0aW1lLnRpbWVkZWx0YSgwKQogICAgICAgPj4+IHV0Yy50em5hbWUoZHQpCiAgICAgICAnVVRDJwoKICAgICIiIgoKICAgIGRlZiBfX25ld19fKGNscyk6CiAgICAgICAgZ2xvYmFsIFVUQwogICAgICAgIHRyeToKICAgICAgICAgICAgcmV0dXJuIFVUQwogICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CiAgICAgICAgICAgIHJldHVybiBzdXBlcihVdGMsIGNscykuX19uZXdfXyhjbHMpCgogICAgZGVmIHV0Y29mZnNldChzZWxmLCBkYXRldGltZSk6CiAgICAgICAgcmV0dXJuIFpFUk9fREVMVEEKCiAgICBkZWYgZHN0KHNlbGYsIGRhdGV0aW1lKToKICAgICAgICByZXR1cm4gWkVST19ERUxUQQoKICAgIGRlZiB0em5hbWUoc2VsZiwgZGF0ZXRpbWUpOgogICAgICAgIHJldHVybiAnVVRDJwoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICBjbHMgPSB0eXBlKHNlbGYpCiAgICAgICAgcmV0dXJuICd7MH0uezF9KCknLmZvcm1hdChjbHMuX19tb2R1bGVfXywgY2xzLl9fbmFtZV9fKQoKCiM6ICg6Y2xhc3M6YFV0Y2ApIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgOmNsYXNzOmBVdGNgLgpVVEMgPSBVdGMoKQoKCmRlZiB1dGNub3coKToKICAgICIiIlRoZSBjdXJyZW50IHRpbWUgaW4gOmNvbnN0OmBVVENgLiAgVGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5CiAgICBhbHNvIHByb3ZpZGVzIDptZXRoOmBkYXRldGltZS5kYXRldGltZS51dGNub3coKWAgZnVuY3Rpb24gZXhjZXB0CiAgICBpdCByZXR1cm5zIGEgbmFpdmUgOmNsYXNzOmBkYXRldGltZS5kYXRldGltZWAgdmFsdWUuICBUaGlzIGZ1bmN0aW9uCiAgICByZXR1cm5zIHR6LWF3YXJlIDpjbGFzczpgZGF0ZXRpbWUuZGF0ZXRpbWVgIHZhbHVlIGluc3RlYWQuCgogICAgLi4gc291cmNlY29kZTo6IHB5Y29uCgogICAgICAgPj4+IGltcG9ydCBkYXRldGltZQogICAgICAgPj4+IGRhdGV0aW1lLmRhdGV0aW1lLnV0Y25vdygpICAjIGRvY3Rlc3Q6ICtFTExJUFNJUwogICAgICAgZGF0ZXRpbWUuZGF0ZXRpbWUoLi4uKQogICAgICAgPj4+IHV0Y25vdygpICAjIGRvY3Rlc3Q6ICtFTExJUFNJUwogICAgICAgZGF0ZXRpbWUuZGF0ZXRpbWUoLi4uLCB0emluZm89c2lkZXIuZGF0ZXRpbWUuVXRjKCkpCgogICAgOnJldHVybnM6IHRoZSB0ei1hd2FyZSA6Y2xhc3M6YH5kYXRldGltZS5kYXRldGltZWAgdmFsdWUKICAgICAgICAgICAgICBvZiB0aGUgY3VycmVudCB0aW1lCiAgICA6cnR5cGU6IDpjbGFzczpgZGF0ZXRpbWUuZGF0ZXRpbWVgCgogICAgIiIiCiAgICByZXR1cm4gZGF0ZXRpbWUuZGF0ZXRpbWUudXRjbm93KCkucmVwbGFjZSh0emluZm89VVRDKQoKCmNsYXNzIEZpeGVkT2Zmc2V0KGRhdGV0aW1lLnR6aW5mbyk6CiAgICAiIiJGaXhlZCBvZmZzZXQgaW4gbWludXRlcyBlYXN0IGZyb20gOmNvbnN0OmBVVENgLgoKICAgIC4uIHNvdXJjZWNvZGU6OiBweWNvbgoKICAgICAgID4+PiBpbXBvcnQgZGF0ZXRpbWUKICAgICAgID4+PiBkYXkgPSBGaXhlZE9mZnNldChkYXRldGltZS50aW1lZGVsdGEoZGF5cz0xKSkKICAgICAgID4+PiBkYXkKICAgICAgIHNpZGVyLmRhdGV0aW1lLkZpeGVkT2Zmc2V0KDE0NDApCiAgICAgICA+Pj4gZGF5LnR6bmFtZShOb25lKQogICAgICAgJysyNDowMCcKICAgICAgID4+PiBoYWxmID0gRml4ZWRPZmZzZXQoLTcyMCkKICAgICAgID4+PiBoYWxmCiAgICAgICBzaWRlci5kYXRldGltZS5GaXhlZE9mZnNldCgtNzIwKQogICAgICAgPj4+IGhhbGYudHpuYW1lKE5vbmUpCiAgICAgICAnLTEyOjAwJwogICAgICAgPj4+IGhhbGYudXRjb2Zmc2V0KE5vbmUpCiAgICAgICBkYXRldGltZS50aW1lZGVsdGEoLTEsIDQzMjAwKQogICAgICAgPj4+IHplcm8gPSBGaXhlZE9mZnNldCgwKQogICAgICAgPj4+IHplcm8udHpuYW1lKE5vbmUpCiAgICAgICAnVVRDJwogICAgICAgPj4+IHplcm8udXRjb2Zmc2V0KE5vbmUpCiAgICAgICBkYXRldGltZS50aW1lZGVsdGEoMCkKCiAgICA6cGFyYW0gb2Zmc2V0OiB0aGUgb2Zmc2V0IGludGVnZXIgaW4gbWludXRlcywKICAgICAgICAgICAgICAgICAgIG9yIDpjbGFzczpgfmRhdGV0aW1lLnRpbWVkZWx0YWAgKGZyb20gYSBtaW51dGUgdG8gYSBkYXkpCiAgICA6dHlwZSBvZmZzZXQ6IDpjbGFzczpgbnVtYmVycy5JbnRlZ3JhbGAsIDpjbGFzczpgZGF0ZXRpbWUudGltZWRlbHRhYAogICAgOnBhcmFtIG5hbWU6IGFuIG9wdGlvbmFsIG5hbWUuICBpZiBub3QgcHJlc2VudCwgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQKICAgIDp0eXBlIG5hbWU6IDpjbGFzczpgYmFzZXN0cmluZ2AKICAgIDpyYWlzZXMgZXhjZXB0aW9ucy5WYWx1ZUVycm9yOiB3aGVuIGBgb2Zmc2V0YGAncyBwcmVjaXNpb24gaXMgdG9vIHNob3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgdG9vIGxvbmcKCiAgICAiIiIKCiAgICAjOiAoOmNsYXNzOmBkYXRldGltZS50aW1lZGVsdGFgKSBUaGUgbWF4aW11bSBwcmVjaXNpb24gb2YKICAgICM6IDptZXRoOmB1dGNvZmZzZXQoKWAuCiAgICBNQVhfUFJFQ0lTSU9OID0gZGF0ZXRpbWUudGltZWRlbHRhKGRheXM9MSkKCiAgICAjOiAoOmNsYXNzOmBkYXRldGltZS50aW1lZGVsdGFgKSBUaGUgbWluaW11bSBwcmVjaXNpb24gb2YKICAgICM6IDptZXRoOmB1dGNvZmZzZXQoKWAuCiAgICBNSU5fUFJFQ0lTSU9OID0gZGF0ZXRpbWUudGltZWRlbHRhKG1pbnV0ZXM9MSkKCiAgICBkZWYgX19pbml0X18oc2VsZiwgb2Zmc2V0LCBuYW1lPU5vbmUpOgogICAgICAgIGlmIGlzaW5zdGFuY2Uob2Zmc2V0LCBudW1iZXJzLkludGVncmFsKToKICAgICAgICAgICAgb2Zmc2V0ID0gZGF0ZXRpbWUudGltZWRlbHRhKG1pbnV0ZXM9b2Zmc2V0KQogICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2Uob2Zmc2V0LCBkYXRldGltZS50aW1lZGVsdGEpOgogICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ29mZnNldCBtdXN0IGJlIGFuIGludGVnZXIgb3IgZGF0ZXRpbWUudGltZWRlbHRhJykKICAgICAgICBpZiBvZmZzZXQgPCBzZWxmLk1JTl9QUkVDSVNJT04gYW5kIHRvdGFsX3NlY29uZHMob2Zmc2V0KSA+IDA6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3RoZSBtaW5pbXVtIHByZWNpc2lvbiBvZiBvZmZzZXQgaXMgbWludXRlJykKICAgICAgICBlbGlmIG9mZnNldCA+IHNlbGYuTUFYX1BSRUNJU0lPTjoKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndGhlIG1heGltdW0gcHJlY2lzaW9uIG9mIG9mZnNldCBpcyBob3VyJykKICAgICAgICBpZiBuYW1lIGlzIE5vbmU6CiAgICAgICAgICAgIHNlY29uZHMgPSBpbnQodG90YWxfc2Vjb25kcyhvZmZzZXQpKQogICAgICAgICAgICBpZiBzZWNvbmRzICE9IDA6CiAgICAgICAgICAgICAgICBuYW1lID0gJ3swOiswM2R9OnsxOjAyZH0nLmZvcm1hdChzZWNvbmRzIC8vIDM2MDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnMoc2Vjb25kcykgJSAzNjAwIC8vIDYwKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbmFtZSA9ICdVVEMnCiAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShuYW1lLCBiYXNlc3RyaW5nKToKICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCduYW1lIG11c3QgYmUgYSBzdHJpbmcsIG5vdCAnICsgcmVwcihuYW1lKSkKICAgICAgICBzZWxmLm9mZnNldCA9IG9mZnNldAogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKCiAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGRhdGV0aW1lKToKICAgICAgICByZXR1cm4gc2VsZi5vZmZzZXQKCiAgICBkZWYgdHpuYW1lKHNlbGYsIGRhdGV0aW1lKToKICAgICAgICByZXR1cm4gc2VsZi5uYW1lCgogICAgZGVmIGRzdChzZWxmKToKICAgICAgICByZXR1cm4gWkVST19ERUxUQQoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICBjbHMgPSB0eXBlKHNlbGYpCiAgICAgICAgbWluID0gaW50KHRvdGFsX3NlY29uZHMoc2VsZi5vZmZzZXQpIC8gNjApCiAgICAgICAgcmV0dXJuICd7MH0uezF9KHsyIXJ9KScuZm9ybWF0KGNscy5fX21vZHVsZV9fLCBjbHMuX19uYW1lX18sIG1pbikKCgpkZWYgdG90YWxfc2Vjb25kcyh0aW1lZGVsdGEpOgogICAgIiIiRm9yIFB5dGhvbiAyLjYgY29tcGF0aWJpbGl0eS4gIEVxdWl2YWxlbnQgdG8KICAgIDptZXRoOmB0aW1lZGVsdGEudG90YWxfc2Vjb25kcygpIDxkYXRldGltZS50aW1lZGVsdGEudG90YWxfc2Vjb25kcz5gCiAgICBtZXRob2Qgd2hpY2ggd2FzIGludHJvZHVjZWQgaW4gUHl0aG9uIDIuNy4KCiAgICA6cGFyYW0gdGltZWRlbHRhOiB0aGUgdGltZWRlbHRhCiAgICA6dHlwZSB0aW1lZGVsdGE6IDpjbGFzczpgZGF0ZXRpbWUudGltZWRlbHRhYAogICAgOnJldHVybnM6IHRoZSB0b3RhbCBudW1iZXIgb2Ygc2Vjb25kcyBjb250YWluZWQgaW4gdGhlIGR1cmF0aW9uCgogICAgIiIiCiAgICBpZiBub3QgaXNpbnN0YW5jZSh0aW1lZGVsdGEsIGRhdGV0aW1lLnRpbWVkZWx0YSk6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdleHBlY3RlZCBhIGRhdGV0aW1lLnRpbWVkZWx0YSwgbm90ICcgKwogICAgICAgICAgICAgICAgICAgICAgICByZXByKHRpbWVkZWx0YSkpCjx8ZmltX2hvbGV8PgogICAgZGF5cyA9IHRpbWVkZWx0YS5kYXlzCiAgICByZXR1cm4gKG1pY3Jvc2VjICsgKHNlYyArIGRheXMgKiAyNCAqIDM2MDApICogMTAgKiogNikgLyAxMCAqKiA2Cgo8fGZpbV9zdWZmaXh8PgogICAgZWxpZiBoYXNhdHRyKHRpbWVkZWx0YSwgJ3RvdGFsX21pY3Jvc2Vjb25kcycpOgogICAgICAgIHJldHVybiB0aW1lZGVsdGEudG90YWxfbWljcm9zZWNvbmRzKCkKICAgIG1pY3Jvc2VjID0gdGltZWRlbHRhLm1pY3Jvc2Vjb25kcwogICAgc2VjID0gdGltZWRlbHRhLnNlY29uZHMKPHxmaW1fZW5kfD4="]
["f8921e8151c864a70f261efa8e2f38f7c67f4694-1","f8921e8151c864a70f261efa8e2f38f7c67f4694","PHxmaW1fcHJlZml4fD4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkhISBEbyBub3QgY2hhbmdlIHRoaXMgbWFudWFsbHkhICAgICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICMKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKZnJvbSBweWRhbnRpYyBpbXBvcnQgRmllbGQKPHxmaW1faG9sZXw+CmNsYXNzIEdldFN1Z2dlc3RlZFN0aWNrZXJTZXROYW1lKEJhc2VPYmplY3QpOgogICAgIiIiCiAgICBSZXR1cm5zIGEgc3VnZ2VzdGVkIG5hbWUgZm9yIGEgbmV3IHN0aWNrZXIgc2V0IHdpdGggYSBnaXZlbiB0aXRsZQogICAgCiAgICA6cGFyYW0gdGl0bGU6IFN0aWNrZXIgc2V0IHRpdGxlOyAxLTY0IGNoYXJhY3RlcnMKICAgIDp0eXBlIHRpdGxlOiA6Y2xhc3M6YHN0cmAKICAgIAogICAgIiIiCgogICAgSUQ6IHN0ciA9IEZpZWxkKCJnZXRTdWdnZXN0ZWRTdGlja2VyU2V0TmFtZSIsIGFsaWFzPSJAdHlwZSIpCiAgICB0aXRsZTogc3RyID0gRmllbGQoLi4uLCBtaW5fbGVuZ3RoPTEsIG1heF9sZW5ndGg9NjQpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHJlYWQocTogZGljdCkgLT4gR2V0U3VnZ2VzdGVkU3RpY2tlclNldE5hbWU6CiAgICAgICAgcmV0dXJuIEdldFN1Z2dlc3RlZFN0aWNrZXJTZXROYW1lLmNvbnN0cnVjdCgqKnEpCjx8ZmltX3N1ZmZpeHw+Cgpmcm9tIC4uYmFzZV9vYmplY3QgaW1wb3J0IEJhc2VPYmplY3QKCgo8fGZpbV9lbmR8Pg=="]
["47f6d5cdf63a5bcd79d4acb3bd7bded9603b8327-5","47f6d5cdf63a5bcd79d4acb3bd7bded9603b8327","PHxmaW1fcHJlZml4fD4KZnJvbSBlc3RubHRrIGltcG9ydCBUZXh0Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmRlZiBsZW1tYXRpemUodG9rZW4pOgogICAgcmV0dXJuIFRleHQodG9rZW4pLmxlbW1hc1swXS5zcGxpdCgnfCcpCjx8ZmltX2VuZHw+"]
["dfbce87e5893a632e4c9562f0c796f1ef4d52d1c-2","dfbce87e5893a632e4c9562f0c796f1ef4d52d1c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBjdjIKaW1wb3J0IG9zCmltcG9ydCBtYXRoCgpkZWYgbXlfaGlzdG9fMChzb3VyY2VfcGF0aD0nLi90ZXN0X3BpY3R1cmVzL3F1ZWVuXzAuanBnJywgdGFyZ2V0X3BhdGg9Jy4vb3V0cHV0X3BpY3R1cmVzL3JvdW5kXzAvJyk6CiAgICBpbWcgPSBjdjIuaW1yZWFkKHNvdXJjZV9wYXRoKQogICAgaW1nXzEgPSBpbWcKICAgIHNoYXBlID0gaW1nLnNoYXBlCiAgICBvcmlnaW5hbF9oaXN0LCBiaW5zID0gbnAuaGlzdG9ncmFtKGltZy5mbGF0dGVuKCksIDI1NiwgWzAsIDI1Nl0pCiAgICB0ZW1wX2hpc3QgPSBvcmlnaW5hbF9oaXN0LmN1bXN1bSgpL25wLmZsb2F0MzIoaW1nLnNpemUpCiAgICBuZXdfaGlzdCA9IChucC5jbGlwKHRlbXBfaGlzdCoyNTUsIDAsIDI1NSkpLmFzdHlwZSgndWludDgnKQoKICAgIGZvciBpIGluIHJhbmdlKHNoYXBlWzBdKToKICAgICAgICBmb3IgaiBpbiByYW5nZShzaGFwZVsxXSk6CiAgICAgICAgICAgIGltZ18xW2ldW2pdID0gbmV3X2hpc3RbaW1nXzFbaV1bal1dCgogICAgcGF0aF9uZXdfMCA9IHNvdXJjZV9wYXRoLnNwbGl0KCcvJykKICAgIHBhdGhfbmV3XzEgPSBwYXRoX25ld18wWzJdLnNwbGl0KCcuJykKICAgIHRhcmdldF9wYXRoX3RlbXAgPSB0YXJnZXRfcGF0aCArIHBhdGhfbmV3XzFbMF0gKyAnX21vZGlmaWVkLicgKyBwYXRoX25ld18xWzFdCiAgICBjdjIuaW13cml0ZSh0YXJnZXRfcGF0aF90ZW1wLCBpbWdfMSkKICAgIHByaW50KCJvdXRwdXQgcGljdHVyZSBzdWNjZXNzZnVsIGF0IHt9Ii5mb3JtYXQodGFyZ2V0X3BhdGhfdGVtcCkpCgpkZWYgbXlfaGlzdG9fMShzb3VyY2VfcGF0aD0nLi90ZXN0X3BpY3R1cmVzL3F1ZWVuXzAuanBnJywgdGFyZ2V0X3BhdGg9Jy4vb3V0cHV0X3BpY3R1cmVzL3JvdW5kXzAvJyk6CiAgICBpbWcgPSBjdjIuaW1yZWFkKHNvdXJjZV9wYXRoKQogICAgaW1nXzEgPSBpbWcKICAgIHNoYXBlID0gaW1nLnNoYXBlCiAgICBvcmlnaW5hbF9oaXN0LCBiaW5zID0gbnAuaGlzdG9ncmFtKGltZy5mbGF0dGVuKCksIDI1NiwgWzAsIDI1Nl0pCgogICAgdG90YWwgPSAwCiAgICBmb3IgaiBpbiByYW5nZShsZW4ob3JpZ2luYWxfaGlzdCkpOgogICAgICAgIG9yaWdpbmFsX2hpc3Rbal0gPSBtYXRoLnNxcnQoKG9yaWdpbmFsX2hpc3Rbal0pKQogICAgICAgIHRvdGFsICs9IG9yaWdpbmFsX2hpc3Rbal0KCiAgICB0ZW1wX2hpc3QgPSBvcmlnaW5hbF9oaXN0LmN1bXN1bSgpL25wLmZsb2F0MzIodG90YWwpCiAgICBuZXdfaGlzdCA9IChucC5jbGlwKHRlbXBfaGlzdCoyNTUsIDAsIDI1NSkpLmFzdHlwZSgndWludDgnKQoKICAgIGZvciBpIGluIHJhbmdlKHNoYXBlWzBdKToKICAgICAgICBmb3IgaiBpbiByYW5nZShzaGFwZVsxXSk6CiAgICAgICAgICAgIGltZ18xW2ldW2pdID0gbmV3X2hpc3RbaW1nXzFbaV1bal1dCgogICAgcGF0aF9uZXdfMCA9IHNvdXJjZV9wYXRoLnNwbGl0KCcvJykKICAgIHBhdGhfbmV3XzEgPSBwYXRoX25ld18wWzJdLnNwbGl0KCcuJykKICAgIHRhcmdldF9wYXRoX3RlbXAgPSB0YXJnZXRfcGF0aCArIHBhdGhfbmV3XzFbMF0gKyAnX21vZGlmaWVkLicgKyBwYXRoX25ld18xWzFdCiAgICBjdjIuaW13cml0ZSh0YXJnZXRfcGF0aF90ZW1wLCBpbWdfMSkKICAgIHByaW50KCJvdXRwdXQgcGljdHVyZSBzdWNjZXNzZnVsIGF0IHt9Ii5mb3JtYXQodGFyZ2V0X3BhdGhfdGVtcCkpCgpkZWYgbXlfaGlzdG9fMihzb3VyY2VfcGF0aD0nLi90ZXN0X3BpY3R1cmVzL3F1ZWVuXzAuanBnJywgdGFyZ2V0X3BhdGg9Jy4vb3V0cHV0X3BpY3R1cmVzL3JvdW5kXzAvJyk6CiAgICBpbWcgPSBjdjIuaW1yZWFkKHNvdXJjZV9wYXRoKQogICAgaW1nXzEgPSBpbWcKICAgIHNoYXBlID0gaW1nLnNoYXBlCiAgICBvcmlnaW5hbF9oaXN0LCBiaW5zID0gbnAuaGlzdG9ncmFtKGltZy5mbGF0dGVuKCksIDI1NiwgWzAsIDI1Nl0pCgogICAgdG90YWwgPSAwCiAgICBmb3IgaiBpbiByYW5nZShsZW4ob3JpZ2luYWxfaGlzdCkpOgogICAgICAgIG9yaWdpbmFsX2hpc3Rbal0gPSBwb3cob3JpZ2luYWxfaGlzdFtqXSwgMikKICAgICAgICB0b3RhbCArPSBvcmlnaW5hbF9oaXN0W2pdCgogICAgdGVtcF9oaXN0ID0gb3JpZ2luYWxfaGlzdC5jdW1zdW0oKS9ucC5mbG9hdDMyKHRvdGFsKQogICAgbmV3X2hpc3QgPSAobnAuY2xpcCh0ZW1wX2hpc3QqMjU1LCAwLCAyNTUpKS5hc3R5cGUoJ3VpbnQ4JykKCiAgICBmb3IgaSBpbiByYW5nZShzaGFwZVswXSk6CiAgICAgICAgZm9yIGogaW4gcmFuZ2Uoc2hhcGVbMV0pOgogICAgICAgICAgICBpbWdfMVtpXVtqXSA9IG5ld19oaXN0W2ltZ18xW2ldW2pdXQoKICAgIHBhdGhfbmV3XzAgPSBzb3VyY2VfcGF0aC5zcGxpdCgnLycpCiAgICBwYXRoX25ld18xID0gcGF0aF9uZXdfMFsyXS5zcGxpdCgnLicpCiAgICB0YXJnZXRfcGF0aF90ZW1wID0gdGFyZ2V0X3BhdGggKyBwYXRoX25ld18xWzBdICsgJ19tb2RpZmllZC4nICsgcGF0aF9uZXdfMVsxXQogICAgY3YyLmltd3JpdGUodGFyZ2V0X3BhdGhfdGVtcCwgaW1nXzEpCiAgICBwcmludCgib3V0cHV0IHBpY3R1cmUgc3VjY2Vzc2Z1bCBhdCB7fSIuZm9ybWF0KHRhcmdldF9wYXRoX3RlbXApKQoKc291cmNlX2Rpcl9uYW1lID0gJy4vdGVzdF9waWN0dXJlcy8nCnRhcmdldF9kaXJfbmFtZSA9ICcuL291dHB1dF9waWN0dXJlcy9yb3VuZF8yLycKPHxmaW1faG9sZXw+CmZvciBpIGluIHJhbmdlKGxlbihwaWN0dXJlX2xpc3QpKToKICAgIHNvdXJjZV9wID0gc291cmNlX2Rpcl9uYW1lICsgcGljdHVyZV9saXN0W2ldCiAgICB0YXJnZXRfcCA9IHRhcmdldF9kaXJfbmFtZQogICAgbXlfaGlzdG9fMShzb3VyY2VfcCwgdGFyZ2V0X3ApCgoKPHxmaW1fc3VmZml4fD4KCnBpY3R1cmVfbGlzdCA9IG9zLmxpc3RkaXIoc291cmNlX2Rpcl9uYW1lKQpwcmludChwaWN0dXJlX2xpc3QpCgo8fGZpbV9lbmR8Pg=="]
["a02df5e99a48d824cc5c0284679929925e95f94d-2","a02df5e99a48d824cc5c0284679929925e95f94d",{"$cut":{"chars":45912,"head":"PHxmaW1fcHJlZml4fD4KaW1wb3J0IHR5cGluZwoKZnJvbSBwbHVnaW5zLnBlbmd1aW5kcnVtX21vZGVscyBpbXBvcnQgX09wdGlvbgoKR0VORVJBVEVEX1NUT1JZX0NIT0lDRV9PUFRJT05TOiBkaWN0W2ludCwgdHlwaW5nLlR1cGxlW19PcHRpb24sIC4uLl1dID0gewogICAgIyDjg4Djg7Pjgrnjg6zjg4Pjgrnjg7MKICAgIDUwMTAwMTUwNjogKF9PcHRpb24oZ3V0cz0xMCksIF9PcHRpb24oc3RhbWluYT0xMCkpLAoKICAgICMg6Z2S5pil44Gu44OG44OL44K55pel5ZKMCiAgICA1MDEwMDE1MTA6IChfT3B0aW9uKHNwZWVkPTEwKSwgX09wdGlvbihzdGFtaW5hPTEwKSksCgogICAgIyDjgqvjg6njgqrjgrHjgrDjg6vjg6HimaoKICAgIDUwMTAwMTUxMTogKF9PcHRpb24odml0YWw9MTApLCBfT3B0aW9uKHBvd2VyPTEwKSksCgogICAgIyDjg53jg7zjgrrjga/jganjgYbjgZnjgovvvJ8KICAgIDUwMTAwMTUxMzogKF9PcHRpb24ocG93ZXI9MjApLCBfT3B0aW9uKHNraWxsPTQwKSksCgogICAgIyDmg7PjgYTjgIHmnI3jgavoqJfjgZfjgaYKICAgIDUwMTAwMTUxNDogKF9PcHRpb24oc3RhbWluYT0yMCksIF9PcHRpb24oZ3V0cz0yMCkpLAoKICAgICMg5LuK5pel44KC44CB5piO5pel44GL44KJ44KCCiAgICA1MDEwMDE1MTU6IChfT3B0aW9uKHNwZWVkPTIwKSwgX09wdGlvbih3aXo9MjApKSwKCiAgICAjIOaYvOS4i+OBjOOCiuOBruaBqei/lOOBlwogICAgNTAxMDAxNTIwOiAoX09wdGlvbih2aXRhbD01LCB3aXo9NSksIF9PcHRpb24oc2tpbGxfaGludD1UcnVlKSksCgogICAgIyDnibnliKXjgaDjgYvjgonjgZPjgZ0KICAgIDUwMTAwMTcwMjogKF9PcHRpb24oc3RhbWluYT0xMCksIF9PcHRpb24oc3BlZWQ9MTApKSwKCiAgICAjIOOBguOBquOBn+OBqOihjOOBjeOBn+OBhOWgtOaJgAogICAgNTAxMDAxNzAzOiAoX09wdGlvbih3aXo9MTApLCBfT3B0aW9uKHN0YW1pbmE9MTApKSwKCiAgICAjIOWwiuaVrOOBp+OBjeOCi+S6uuOBoOOBi+OCiQogICAgNTAxMDAxNzA0OiAoX09wdGlvbihza2lsbD0zMCksIF9PcHRpb24oc3RhbWluYT01LCBndXRzPTUpLCBfT3B0aW9uKHNwZWVkPTUsIHBvd2VyPTUpKSwKCiAgICAjIOOCguOBhuWwkeOBl+OBoOOBkQogICAgNTAxMDAxNzA1OiAoX09wdGlvbihza2lsbF9oaW50PVRydWUpLCBfT3B0aW9uKHNraWxsX2hpbnQ9VHJ1ZSkpLAoKICAgICMg56CU56m254ax5b+DCiAgICA1MDEwMDE3MDY6IChfT3B0aW9uKHNraWxsX2hpbnQ9VHJ1ZSksIF9PcHRpb24oc2tpbGxfaGludD1UcnVlKSksCgogICAgIyDngrjoo4LjgIHmsLTnnYDjg5Hjg6/jg7zvvIEKICAgIDUwMTAwMTgwMDogKF9PcHRpb24oc3BlZWQ9MTAsIHNraWxsPTE1KSwgX09wdGlvbih3aXo9MjApKSwKCiAgICAjIOODmOOCpOOCq+ODjuOCuOODp+OAgemBiuOBs+OBvuOBl+OCh+KZqgogICAgNTAxMDA0NTExOiAoX09wdGlvbih2aXRhbD0xMCksIF9PcHRpb24odml0YWw9LTUsIHBvd2VyPTUsIGd1dHM9NSkpLAoKICAgICMg5aSP44CB5rqA5Zar5aSn5L2c5oim77yB77yBCiAgICA1MDEwMDE4MDE6IChfT3B0aW9uKHN0YW1pbmE9MTAsIHBvd2VyPTEwKSwgX09wdGlvbih2aXRhbD0xMCwgc3BlZWQ9Miwgc3RhbWluYT0yLCBwb3dlcj0yLCBndXRzPTIsIHdpej0yKSksCgogICAgIyDjgoLjgYYx5Lq644Gu44GK5q+N44Gh44KD44KT44G4CiAgICA1MDEwMDE4MDI6IChfT3B0aW9uKHNraWxsX2hpbnQ9VHJ1ZSksIF9PcHRpb24oZ3V0cz0yMCkpLAoKICAgICMg44OA44Oz44K544Os44OD44K544OzCiAgICA1MDEwMDI1MDY6IChfT3B0aW9uKHdpej0xMCksIF9PcHRpb24oZ3V0cz0xMCkpLAoKICAgICMg44K544K644Kr5rWB5b6M6Lyp5oyH5bCO77yfCiAgICA1MDEwMDI1MTA6IChfT3B0aW9uKHNwZWVkPTEwKSwgX09wdGlvbih3aXo9MTApKSwKCiAgICAjIOOBl+OBo+OBqOOCiuODkeODvOODhuOCo+ODvOOCv+OCpOODoAogICAgNTAxMDAyNTExOiAoX09wdGlvbih2aXRhbD0xMCksIF9PcHRpb24oc3RhbWluYT01LCBwb3dlcj01KSksCgogICAgIyBMYW5kc2NhcGUgY29sb3IKICAgIDUwMTAwMjUxMzogKF9PcHRpb24oZ3V0cz0yMCksIF9PcHRpb24ocG93ZXI9MjApKSwKCiAgICAjIOi2o+WRs+OAgeeJueaKgOOAgeS8keaXpeOBrumBjuOBlOOBl+aWuQogICAgNTAxMDAyNTE0OiAoX09wdGlvbihzdGFtaW5hPTIwKSwgX09wdGlvbihzcGVlZD0xMCwgd2l6PTEwKSksCgogICAgIyDjgqbjg57jg4njg6vimIbnjJvnibnoqJPvvIEKICAgIDUwMTAwMjUxNTogKF9PcHRpb24oc3BlZWQ9MTAsIHBvd2VyPTEwKSwgX09wdGlvbihndXRzPTEwLCB3aXo9MTApKSwKCiAgICAjIOiDjOOCkui/veOBo+OBpuOBj+OCjOOCi+OBi+OCiQogICAgNTAxMDAyNTIwOiAoX09wdGlvbihzcGVlZD01LCBza2lsbD0xNSksIF9PcHRpb24oc2tpbGxfaGludD1UcnVlKSksCgogICAgIyDnp4Hjga7lsI/jgZXjgarpm6rmma/oibIKICAgIDUwMTAwMjcwMjogKF9PcHRpb24oc3RhbWluYT0xMCksIF9PcHRpb24od2l6PTEwKSksCgogICAgIyDjgYLjgarjgZ/jga7llpzjgbbmma/oibIKICAgIDUwMTAwMjcwMzogKF9PcHRpb24ocG93ZXI9MTApLCBfT3B0aW9uKHNwZWVkPTUsIGd1dHM9NSkpLAoKICAgICMg56eB44Go44GC44Gq44Gf44Gu44CB5bCP44GV44Gq6Zuq5pmv6ImyCiAgICA1MDEwMDI3MDQ6IChfT3B0aW9uKHN0YW1pbmE9MTApLCBfT3B0aW9uKHNwZWVkPTEwKSwgX09wdGlvbihwb3dlcj0xMCkpLAoKICAgICMg6Zuo44Gu5pel44Gu6YGO44GU44GX5pa5CiAgICA1MDEwMDI3MDU6IChfT3B0aW9uKGd1dHM9MTApLCBfT3B0aW9uKHNwZWVkPTUsIHdpej01KSksCgogICAgIyDjgbXjgZ/jgorjga7nm7jmgKfjga/jgYTjgYvjgavvvIHvvJ8KICAgIDUwMTAwMjcwNjogKF9PcHRpb24ocG93ZXI9NSwgZ3V0cz01KSwgX09wdGlvbihzdGFtaW5hPTEwKSksCgogICAgIyDjg4Djg7Pjgrnjg6zjg4Pjgrnjg7MKICAgIDUwMTAwMzUwNjogKF9PcHRpb24oc3RhbWluYT0xMCksIF9PcHRpb24ocG93ZXI9MTApKSwKCiAgICAjICLlpbPluJ0idnMuIuW4neeOiyIKICAgIDUwMTAwMzUxMDogKF9PcHRpb24oZ3V0cz0xMCksIF9PcHRpb24o"}}]
["e4c9621c585d6e64c403dd5eee65031cf99e2700-3","e4c9621c585d6e64c403dd5eee65031cf99e2700","PHxmaW1fcHJlZml4fD4KZnJvbSBweW1vbmdvIGltcG9ydCBNb25nb0NsaWVudApmcm9tIHB5bW9uZ28uZGF0YWJhc2UgaW1wb3J0IERhdGFiYXNlCmZyb20gcHltb25nby5jb2xsZWN0aW9uIGltcG9ydCBDb2xsZWN0aW9uCmltcG9ydCB1cmxsaWIucGFyc2UKZnJvbSB0eXBpbmcgaW1wb3J0IE5hbWVkVHVwbGUsIExpc3QKZnJvbSBjb25maWdwYXJzZXIgaW1wb3J0IENvbmZpZ1BhcnNlcgpmcm9tIGRscGlwZS51dGlscyBpbXBvcnQgRExQaXBlTG9nZ2VyCgoKY2xhc3MgTW9uZ29EQkNvbm5lY3Rpb25Db25maWcoTmFtZWRUdXBsZSk6CiAgICBuYW1lOiBzdHIKICAgIHVybDogc3RyCiAgICBwb3J0OiBpbnQKICAgIHVzZXI6IHN0ciA9IE5vbmUKICAgIHB3ZDogc3RyID0gTm9uZQogICAgY2xpZW50OiBNb25nb0NsaWVudCA9IE5vbmUKCgpjbGFzcyBNb25nb0RCQ29ubmVjdDoKCiAgICBfY29ubmVjdGlvbnM6IExpc3RbTW9uZ29EQkNvbm5lY3Rpb25Db25maWddID0gW10KCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgYWRkX2Nvbm5lY3Rpb24oY29uZmlnOiBNb25nb0RCQ29ubmVjdGlvbkNvbmZpZyk6CiAgICAgICAgIiIiCiAgICAgICAgQWRkcyBhIE1vbmdvREJDb25uZWN0aW9uQ29uZmlnIHRvIHRoZSBjb25uZWN0aW9uIGRpY3QKICAgICAgICA6cGFyYW0gY29uZmlnOiBjb25maWcgdGhhdCBzaG91bGQgYmUgYWRkZWQgb2YgdHlwZSBNb25nb0RCQ29ubmVjdGlvbkNvbmZpZwogICAgICAgICIiIgogICAgICAgIE1vbmdvREJDb25uZWN0Ll9jb25uZWN0aW9ucy5hcHBlbmQoY29uZmlnKQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBhZGRfY29ubmVjdGlvbnNfZnJvbV9jb25maWcoY29uZmlnX3BhcnNlcjogQ29uZmlnUGFyc2VyKToKICAgICAgICAiIiIKICAgICAgICBUYWtlcyBhIHBhcnNlZCAuaW5pIGZpbGUgYXMgYXJndW1lbnQgYW5kIGFkZHMgYWxsIGNvbm5lY3Rpb25zIHdpdGggdHlwZT1Nb25nb0RCLAogICAgICAgIEVhY2ggc2VjdGlvbiAoPSBuYW1lKSBtdXN0IGhhdmUgdXJsLCBwb3J0IGFuZCBjYW4gaGF2ZSBwd2QgYW5kIHVzZXIKICAgICAgICA6cGFyYW0gY29uZmlnX3BhcnNlcjogQSBDb25maWdQYXJzZXIgb2YgYSAuaW5pIGZpbGUKICAgICAgICAiIiIKICAgICAgICBmb3Iga2V5IGluIGNvbmZpZ19wYXJzZXIuc2VjdGlvbnMoKToKICAgICAgICAgICAgaWYgY29uZmlnX3BhcnNlcltrZXldWyJ0eXBlIl0gPT0gIk1vbmdvREIiOgogICAgICAgICAgICAgICAgTW9uZ29EQkNvbm5lY3QuYWRkX2Nvbm5lY3Rpb24oTW9uZ29EQkNvbm5lY3Rpb25Db25maWcoCiAgICAgICAgICAgICAgICAgICAgbmFtZT1rZXksCiAgICAgICAgICAgICAgICAgICAgdXJsPWNvbmZpZ19wYXJzZXJba2V5XVsidXJsIl0sCiAgICAgICAgICAgICAgICAgICAgcG9ydD1pbnQoY29uZmlnX3BhcnNlcltrZXldWyJwb3J0Il0pLAogICAgICAgICAgICAgICAgICAgIHB3ZD1jb25maWdfcGFyc2VyW2tleV0uZ2V0KCJwd2QiKSwKICAgICAgICAgICAgICAgICAgICB1c2VyPWNvbmZpZ19wYXJzZXJba2V5XS5nZXQoInVzZXIiKQogICAgICAgICAgICAgICAgKSkKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgZ2V0X2NsaWVudChuYW1lOiBzdHIpIC0+IE1vbmdvQ2xpZW50OgogICAgICAgIGNvbiwgaSA9IE1vbmdvREJDb25uZWN0LmdldF9jb25uZWN0aW9uX2J5X25hbWUobmFtZSkKICAgICAgICBpZiBjb24uY2xpZW50IGlzIE5vbmU6CiAgICAgICAgICAgIGNvbiA9IE1vbmdvREJDb25uZWN0LmNvbm5lY3RfdG8obmFtZSkKICAgICAgICByZXR1cm4gY29uLmNsaWVudAoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBnZXRfZGIobmFtZTogc3RyLCBkYl9uYW1lOiBzdHIpIC0+IERhdGFiYXNlOgogICAgICAgIGNsaWVudCA9IE1vbmdvREJDb25uZWN0LmdldF9jbGllbnQobmFtZSkKICAgICAgICByZXR1cm4gY2xpZW50W2RiX25hbWVdCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGdldF9jb2xsZWN0aW9uKG5hbWU6IHN0ciwgZGJfbmFtZTogc3RyLCBjb2xsZWN0aW9uOiBzdHIpIC0+IENvbGxlY3Rpb246CiAgICAgICAgZGIgPSBNb25nb0RCQ29ubmVjdC5nZXRfZGIobmFtZSwgZGJfbmFtZSkKICAgICAgICByZXR1cm4gZGJbY29sbGVjdGlvbl0KCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgY29ubmVjdF90byhuYW1lOiBzdHIpIC0+IE1vbmdvREJDb25uZWN0aW9uQ29uZmlnOgogICAgICAgICIiIgogICAgICAgIENvbm5lY3QgdG8gY29ubmVjdGlvbiB3aGljaCB3YXMgcHJldmlvdXNseSBhZGRlZCBieSBpdHMgbmFtZQogICAgICAgIDpwYXJhbSBuYW1lOiBLZXkgb2YgdGhlIGNvbm5lY3Rpb24gY29uZmlnIGFzIHN0cmluZwogICAgICAgIDpyZXR1cm46IFRoZSBNb25nb0RCQ29ubmVjdGlvbkNvbmZpZyB3aGljaCB0aGUgY29ubmVjdGlvbiBpcyB0bwogICAgICAgICIiIgogICAgICAgIGNvbiwgaSA9IE1vbmdvREJDb25uZWN0LmdldF9jb25uZWN0aW9uX2J5X25hbWUobmFtZSkKICAgICAgICBETFBpcGVMb2dnZXIubG9nZ2VyLmluZm8oIkNvbm5lY3QgdG8gZGF0YWJhc2UgezB9OnsxfSIuZm9ybWF0KGNvbi51cmwsIHN0cihjb24ucG9ydCkpKQoKICAgICAgICBob3N0ID0gY29uLnVybCArICI6IiArIHN0cihjb24ucG9ydCkKICAgICAgICBpZiBjb24udXNlciBpcyBub3QgTm9uZSBhbmQgY29uLnB3ZCBpcyBub3QgTm9uZToKICAgICAgICAgICAgdXNlciA9IHVybGxpYi5wYXJzZS5xdW90ZV9wbHVzKGNvbi51c2VyKQogICAgICAgICAgICBwd2QgPSB1cmxsaWIucGFyc2UucXVvdGVfcGx1cyhjb24ucHdkKQogICAgICAgICAgICBjb25fc3RyaW5nID0gJ21vbmdvZGI6Ly8lczolc0AlcycgJSAodXNlciwgcHdkLCBob3N0KQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGNvbl9zdHJpbmcgPSAnbW9uZ29kYjovLyVzJyAlIGhvc3QKCiAgICAgICAgZGJfY2xpZW50ID0gTW9uZ29DbGllbnQoY29uX3N0cmluZykKICAgICAgICBuZXdfY29uID0gY29uLl9yZXBsYWNlKGNsaWVudD1kYl9jbGllbnQpCiAgICAgICAgTW9uZ29EQkNvbm5lY3QuX2Nvbm5lY3Rpb25zW2ldID0gbmV3X2NvbgogICAgICAgIHJldHVybiBuZXdfY29uCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGNsb3NlX2Nvbm5lY3Rpb24obmFtZTogc3RyKToKICAgICAgICBjb24sIGkgPSBNb25nb0RCQ29ubmVjdC5nZXRfY29ubmVjdGlvbl9ieV9uYW1lKG5hbWUpCiAgICAgICAgaWYgY29uLmNsaWVudCBpcyBub3QgTm9uZToKICAgICAgICAgICAgY29uLmNsaWVudC5jbG9zZSgpCiAgICAgICAgZGVsIE1vbmdvREJDb25uZWN0Ll9jb25uZWN0aW9uc1tpXQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBnZXRfY29ubmVjdGlvbl9ieV9uYW1lKG5hbWU6IHN0cikgLT4gKE1vbmdvREJDb25uZWN0aW9uQ29uZmlnLCBpbnQpOgogICAgICAgIGZvciBpLCBjb24gaW4gZW51bWVyYXRlKE1vbmdvREJDb25uZWN0Ll9jb25uZWN0aW9ucyk6CiAgICAgICAgICAgIGlmIGNvbi5uYW1lID09IG5hbWU6CiAgICAgICAgICAgICAgICByZXR1cm4gY29uLCBpCiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihuYW1lICsgIjogQ29ubmVjdGlvbiBkb2VzIG5vdCBleGlzdCEiKQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiByZXNldF9jb25uZWN0aW9ucygpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIiIiIENsb3NlIGFsbCBhZGRlZCBjb25uZWN0aW9ucyAiIiIKICAgICAgICBmb3IgY29uIGluIE1vbmdvREJDb25uZWN0Ll9jb25uZWN0aW9uczoKICAgICAgICAgICAgaWYgY29uLmNsaWVudCBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgIGNvbi5jbGllbnQuY2xvc2UoKQo8fGZpbV9lbmR8Pg=="]
["19ec04122cee15ecb6a6f4998b914ddca54b30ba-1","19ec04122cee15ecb6a6f4998b914ddca54b30ba","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cgpmcm9tIHZvc2sgaW1wb3J0IE1vZGVsLCBLYWxkaVJlY29nbml6ZXIsIFNldExvZ0xldmVsCmltcG9ydCBzeXMKaW1wb3J0IG9zCjx8ZmltX2VuZHw+"]
["263e0b455944ac1616a0c4c5169110856a073715-1","263e0b455944ac1616a0c4c5169110856a073715","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IG9zCgppbXBvcnQgcHljaHJvbWVjYXN0CmltcG9ydCByZXF1ZXN0cwoKaW1wb3J0IGNvbmZpZwpmcm9tIGRldmljZWNhY2hlIGltcG9ydCBEZXZpY2VDYWNoZQpmcm9tIG1lZGlhdHlwZSBpbXBvcnQgTWVkaWFUeXBlCgp2b2ljZV9jb21tYW5kcyA9IFtdCnZpZGVvX2RldmljZXMgPSBbXQptdXNpY19kZXZpY2VzID0gW10KCgpkZWYgaXNfdmlkZW9fZGV2aWNlKGNhc3QpOgogICAgcmV0dXJuIGNhc3QuY2FzdF90eXBlID09IHB5Y2hyb21lY2FzdC5DQVNUX1RZUEVfQ0hST01FQ0FTVCBhbmQgKAogICAgICAgICAgICAnTmVzdCcgbm90IGluIGNhc3QubW9kZWxfbmFtZSBvciAnSHViJyBpbiBjYXN0Lm1vZGVsX25hbWUpCgoKZGVmIGFkZF92aWRlb19kZXZpY2UoY2FzdF9uYW1lKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgaWYgY2FzdF9uYW1lID09IGNvbmZpZy5kZWZhdWx0X3ZpZGVvX2RldmljZToKICAgICAgICBjYXN0X25hbWUgKz0gJyAoZGVmYXVsdCknCiAgICB2aWRlb19kZXZpY2VzLmFwcGVuZChjYXN0X25hbWUpCgo8fGZpbV9lbmR8Pg=="]
["903b3cdaf652a88f66c68a189928e1d22460455b-1","903b3cdaf652a88f66c68a189928e1d22460455b",{"$cut":{"chars":17852,"head":"PHxmaW1fcHJlZml4fD4KZnJvbSBpbnRlcnZhbHRyZWUuaV90cmVlX2Z1bmNzIGltcG9ydCAqCmZyb20gaW50ZXJ2YWx0cmVlLmJzX3RyZWVfZnVuY3MgaW1wb3J0IGlub3JkZXJfd2Fsawpmcm9tIC50ZXN0X3JiX3RyZWUgaW1wb3J0IGFzc2VydF9ibGFja19iYWxhbmNlZF90cmVlcywgYXNzZXJ0X3JlbGF0aW9uc2hpcHMsIGFzc2VydF92YWxpZF9yYl90cmVlCmZyb20gaW50ZXJ2YWx0cmVlLnByaW50X3RyZWUgaW1wb3J0IHByaW50X3RyZWVfZGlhZ3JhbQpmcm9tIC50ZXN0X2Vhc3lfaGFzaGVzIGltcG9ydCBpZF9nZW5lcmF0b3IKaW1wb3J0IHJhbmRvbQoKCmRlZiB0ZXN0X2Jhc2ljX2ZpbHRlcl92ZWN0b3JfZ2VuZXJhdGlvbigpOgogICAgdmVjdG9yMSA9IGdlbmVyYXRlX2Jhc2ljX2ZpbHRlcl92ZWN0b3IoJ3Rlc3QxJykKICAgIHZlY3RvcjIgPSBnZW5lcmF0ZV9iYXNpY19maWx0ZXJfdmVjdG9yKCd0ZXN0MicpCiAgICB2ZWN0b3IzID0gZ2VuZXJhdGVfYmFzaWNfZmlsdGVyX3ZlY3RvcigndGVzdDMnKQoKICAgIHZlY3RvcjFwbHVzMiA9IHZlY3RvcjEgfCB2ZWN0b3IyCiAgICBhc3NlcnQgdmVjdG9yMSAmIHZlY3RvcjFwbHVzMiA9PSB2ZWN0b3IxCiAgICBhc3NlcnQgdmVjdG9yMiAmIHZlY3RvcjFwbHVzMiA9PSB2ZWN0b3IyCiAgICBhc3NlcnQgdmVjdG9yMyAmIHZlY3RvcjFwbHVzMiAhPSB2ZWN0b3IzCgoKZGVmIHRlc3RfcmJfaW5zZXJ0aW9uX2ludGVncml0eSgpOgogICAgdGVzdF90cmVlID0gRmlsdGVyYWJsZUludGVydmFsVHJlZSgpCiAgICByYW5kb20uc2VlZCgndGVzdCcpCiAgICBkYXRhID0gbWFwKGxhbWJkYSBfOiAocmFuZG9tLnJhbmRpbnQoMCwgMTAwMCksIHJhbmRvbS5yYW5kaW50KDAsIDIwKSksIHJhbmdlKDAsIDEwMCkpCiAgICBwcmludF90cmVlX2RpYWdyYW0odGVzdF90cmVlKQogICAgZm9yIHZhbHVlIGluIGRhdGE6CiAgICAgICAgaW50ZXJ2YWwgPSBJbnRlcnZhbCh2YWx1ZVswXSwgdmFsdWVbMF0gKyB2YWx1ZVsxXSkKICAgICAgICBub2RlID0gRmlsdGVyYWJsZUludGVydmFsVHJlZU5vZGUoaW50ZXJ2YWwsIHt9KQogICAgICAgIGFkZF9ub2RlKHRlc3RfdHJlZSwgbm9kZSkKICAgICAgICBhc3NlcnQgdGVzdF90cmVlLnJvb3QuYmxhY2sKICAgICAgICBhc3NlcnQgdGVzdF90cmVlLm5pbC5ibGFjawogICAgICAgIGFzc2VydF9ibGFja19iYWxhbmNlZF90cmVlcyh0ZXN0X3RyZWUpCiAgICAgICAgZm9yIG5vZGUgaW4gaW5vcmRlcl93YWxrKHRlc3RfdHJlZS5yb290KToKICAgICAgICAgICAgYXNzZXJ0IG5vZGUuYmxhY2sgb3Igbm90IG5vZGUuYmxhY2sKICAgICAgICAgICAgaWYgbm9kZS5yZWQ6CiAgICAgICAgICAgICAgICBhc3NlcnQgbm9kZS5sZWZ0X2NoaWxkLmJsYWNrIGFuZCBub2RlLnJpZ2h0X2NoaWxkLmJsYWNrCgoKZGVmIGdlbmVyYXRlX25vZGUoaW50ZXJ2YWwsIGZpbHRlcl9zdHJpbmcpOgogICAgaW50ZXJ2YWwgPSBJbnRlcnZhbCgqaW50ZXJ2YWwpCiAgICB2ZWMgPSBnZW5lcmF0ZV9iYXNpY19maWx0ZXJfdmVjdG9yKGZpbHRlcl9zdHJpbmcpCiAgICBub2RlID0gRmlsdGVyYWJsZUludGVydmFsVHJlZU5vZGUoaW50ZXJ2YWwsIGZpbHRlcl9zdHJpbmcsIHZlYykKCiAgICByZXR1cm4gbm9kZQoKCmRlZiB0ZXN0X3JvdGF0aW9ucygpOgogICAgdGVzdF90cmVlID0gRmlsdGVyYWJsZUludGVydmFsVHJlZSgpCiAgICBub2RlX3ggPSBnZW5lcmF0ZV9ub2RlKCg1LCA3KSwgJ05PREUgWCcpCiAgICBub2RlX3kgPSBnZW5lcmF0ZV9ub2RlKCg3LCA5KSwgJ05PREUgWScpCiAgICBub2RlX2FscGhhID0gZ2VuZXJhdGVfbm9kZSgoMywgNiksICdOT0RFIEEnKQogICAgbm9kZV9iZXRhID0gZ2VuZXJhdGVfbm9kZSgoNiwgMTIpLCAnTk9ERSBCJykKICAgIG5vZGVfZ2FtbWEgPSBnZW5lcmF0ZV9ub2RlKCg4LCAxNCksICdOT0RFIEcnKQoKICAgIGNvbGwgPSBbbm9kZV94LCBub2RlX3ksIG5vZGVfYWxwaGEsIG5vZGVfYmV0YSwgbm9kZV9nYW1tYV0KICAgIHJlc3VsdHMgPSBbYWRkX25vZGUodGVzdF90cmVlLCBfKSBmb3IgXyBpbiBjb2xsXQogICAgcmlnaHRfcm90YXRlZF9yZWxhdGlvbnNoaXBzID0gWwogICAgICAgICh0ZXN0X3RyZWUubmlsLCBub2RlX3gsICJwYXJlbnQiKSwKICAgICAgICAobm9kZV95LCBub2RlX3gsICJyaWdodF9jaGlsZCIpLAogICAgICAgIChub2RlX2FscGhhLCBub2RlX3gsICJsZWZ0X2NoaWxkIiksCiAgICAgICAgKG5vZGVfYmV0YSwgbm9kZV95LCAibGVmdF9jaGlsZCIpLAogICAgICAgIChub2RlX2dhbW1hLCBub2RlX3ksICJyaWdodF9jaGlsZCIpCiAgICBdCgogICAgbGVmdF9yb3RhdGVkX3JlbGF0aW9uc2hpcHMgPSBbCiAgICAgICAgKHRlc3RfdHJlZS5uaWwsIG5vZGVfeSwgInBhcmVudCIpLAogICAgICAgIChub2RlX3gsIG5vZGVfeSwgImxlZnRfY2hpbGQiKSwKICAgICAgICAobm9kZV9hbHBoYSwgbm9kZV94LCAibGVmdF9jaGlsZCIpLAogICAgICAgIChub2RlX2JldGEsIG5vZGVfeCwgInJpZ2h0X2NoaWxkIiksCiAgICAgICAgKG5vZGVfZ2FtbWEsIG5vZGVfeSwgInJpZ2h0X2NoaWxkIikKICAgIF0KCiAgICB2ZWMgPSBnZW5lcmF0ZV9iYXNpY19maWx0ZXJfdmVjdG9yCgogICAgYXNzZXJ0X3JlbGF0aW9uc2hpcHMocmlnaHRfcm90YXRlZF9yZWxhdGlvbnNoaXBzKQogICAgZ3FuID0gZ2VuZXJhdGVfcXVlcnlfbm9kZQogICAgYXNzZXJ0IGdxbihwYXlsb2FkPSdOT0RFIFgnKSBub3QgaW4gbm9kZV95CiAgICBhc3NlcnQgZ3FuKHBheWxvYWQ9J05PREUgRycpIGluIG5vZGVfeAogICAgYXNzZXJ0IGdxbihwYXlsb2FkPSdOT0RFIFknKSBpbiBub2RlX3gKICAgIGFzc2VydCBncW4ocGF5bG9hZD0nTk9ERSBBJykgbm90IGluIG5vZGVfeQoKICAgICMgYXNzZXJ0IG5vZGVfeS5zdWJ0cmVlX21pbmltdW0gPT0gNgogICAgYXNzZXJ0IG5vZGVfeC5zdWJ0cmVlX21heGltdW0gPT0gMTQKCiAgICBsZWZ0X3JvdGF0ZSh0ZXN0X3RyZWUsIG5vZGVfeCkKICAgIGFzc2VydF9yZWxhdGlvbnNoaXBzKGxlZnRfcm90YXRlZF9yZWxhdGlvbnNoaXBzKQoKICAgIGFzc2VydCBncW4ocGF5bG9hZD0nTk9ERSBYJykgaW4gbm9k"}}]
["39bd6950532fcd4b2dbfb60c431b732c8cbf3de8-2","39bd6950532fcd4b2dbfb60c431b732c8cbf3de8","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiIKR2VuZXJhdGUgUnVieSBjb2RlIHdpdGggVVJMcyBhbmQgZmlsZSBoYXNoZXMgZm9yIHBhY2thZ2VzIGZyb20gUHlQaQooaS5lLiwgYnVpbGRlciBpdHNlbGYgYXMgd2VsbCBhcyBpdHMgZGVwZW5kZW5jaWVzKSB0byBiZSBpbmNsdWRlZAppbiB0aGUgSG9tZWJyZXcgZm9ybXVsYSBhZnRlciBhIG5ldyByZWxlYXNlIG9mIEJ1aWxkZXIgaGFzIGJlZW4gcHVibGlzaGVkCm9uIFB5UGkuCjxodHRwczovL2dpdGh1Yi5jb20venh5bGUvaG9tZWJyZXctdGFwcy9ibG9iL21hc3Rlci9Gb3JtdWxhL2J1aWxkZXIucmI+CiIiIgoKaW1wb3J0IGhhc2hsaWIKaW1wb3J0IG9zCgppbXBvcnQgb3NzMgppbXBvcnQgcmVxdWVzdHMKCmZyb20gYnVpbGRlciBpbXBvcnQgX192ZXJzaW9uX18sIF9fcHJvamVjdF9fLCBfX2Rlc2NyaXB0aW9uX18sIF9faG9tZXBhZ2VfXywgX19saWNlbnNlX18sIF9fcHl0aG9uX3ZlcnNpb25fXwoKVkVSU0lPTlMgPSB7CiAgICAjIEJ5IGRlZmF1bHQsIHdlIHVzZSB0aGUgbGF0ZXN0IHBhY2thZ2VzLiBCdXQgc29tZXRpbWVzIFJlcXVlc3RzIGhhcyBhIG1heGltdW0gc3VwcG9ydGVkIHZlcnNpb25zLgogICAgIyBUYWtlIGEgbG9vayBoZXJlIGJlZm9yZSBtYWtpbmcgYSByZWxlYXNlOiA8aHR0cHM6Ly9naXRodWIuY29tL3BzZi9yZXF1ZXN0cy9ibG9iL21hc3Rlci9zZXR1cC5weT4KfQoKREVQRU5ERU5DSUVTID0gWwogICAgJ3VybGxpYjMnLAogICAgJ2lkbmEnLAogICAgJ2NoYXJkZXQnLAogICAgJ2NlcnRpZmknLAogICAgJ3JlcXVlc3RzJywKICAgICdNYXJrdXBTYWZlJywKICAgICdKaW5qYTInLAogICAgJ3B5dGhvbi1lZGl0b3InLAogICAgJ2JsZXNzZWQnLAogICAgJ3JlYWRjaGFyJywKICAgICdzaXgnLAogICAgJ3djd2lkdGgnLAogICAgJ2lucXVpcmVyJywKXQoKTUlSUk9SID0gIm1pcnJvcnMuY2xvdWQudGVuY2VudC5jb20vcHlwaSIKCjx8ZmltX2hvbGV8PgogICAgaGFzaGVyID0gaGFzaGxpYi5zaGEyNTYoKQogICAgdmVyc2lvbiA9IFZFUlNJT05TLmdldChwYWNrYWdlX25hbWUpCiAgICBpZiBwYWNrYWdlX25hbWUgbm90IGluIFZFUlNJT05TOgogICAgICAgICMgTGF0ZXN0IHZlcnNpb24KICAgICAgICByZWxlYXNlX2J1bmRsZSA9IHJlc3BbJ3VybHMnXQogICAgZWxzZToKICAgICAgICByZWxlYXNlX2J1bmRsZSA9IHJlc3BbJ3JlbGVhc2VzJ11bdmVyc2lvbl0KCiAgICBmb3IgcmVsZWFzZSBpbiByZWxlYXNlX2J1bmRsZToKICAgICAgICBkb3dubG9hZF91cmwgPSByZWxlYXNlWyd1cmwnXQogICAgICAgIGlmIGRvd25sb2FkX3VybC5lbmRzd2l0aCgnLnRhci5neicpOgogICAgICAgICAgICBkb3dubG9hZF91cmwgPSBkb3dubG9hZF91cmwucmVwbGFjZSgiZmlsZXMucHl0aG9uaG9zdGVkLm9yZyIsIE1JUlJPUikKICAgICAgICAgICAgaGFzaGVyLnVwZGF0ZShyZXF1ZXN0cy5nZXQoZG93bmxvYWRfdXJsKS5jb250ZW50KQogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgJ25hbWUnOiBwYWNrYWdlX25hbWUsCiAgICAgICAgICAgICAgICAndXJsJzogZG93bmxvYWRfdXJsLAogICAgICAgICAgICAgICAgJ3NoYTI1Nic6IGhhc2hlci5oZXhkaWdlc3QoKSwKICAgICAgICAgICAgfQogICAgZWxzZToKICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoZid7cGFja2FnZV9uYW1lfTogZG93bmxvYWQgbm90IGZvdW5kOiB7cmVzcH0nKQoKCmRlZiBtYWluKCk6CiAgICBwYWNrYWdlX21ldGFfbWFwID0gewogICAgICAgIHBhY2thZ2VfbmFtZTogZ2V0X3BhY2thZ2VfbWV0YShwYWNrYWdlX25hbWUpCiAgICAgICAgZm9yIHBhY2thZ2VfbmFtZSBpbiBERVBFTkRFTkNJRVMKICAgIH0KCiAgICBwcmludCgpCiAgICBwcmludChmIiAgZGVwZW5kc19vbiBcInB5dGhvbkB7X19weXRob25fdmVyc2lvbl9ffVwiIikKICAgIHByaW50KCkKCiAgICBmb3IgZGVwX21ldGEgaW4gcGFja2FnZV9tZXRhX21hcC52YWx1ZXMoKToKICAgICAgICBwcmludCgnICByZXNvdXJjZSAie25hbWV9IiBkbycuZm9ybWF0KG5hbWU9ZGVwX21ldGFbJ25hbWUnXSkpCiAgICAgICAgcHJpbnQoJyAgICB1cmwgInt1cmx9IicuZm9ybWF0KHVybD1kZXBfbWV0YVsndXJsJ10pKQogICAgICAgIHByaW50KCcgICAgc2hhMjU2ICJ7c2hhMjU2fSInLmZvcm1hdChzaGEyNTY9ZGVwX21ldGFbJ3NoYTI1NiddKSkKICAgICAgICBwcmludCgnICBlbmQnKQogICAgICAgIHByaW50KCcnKQoKCmVudiA9IGRpY3QoKQp3aXRoIG9wZW4oIi4uLy5lbnYiKSBhcyBmOgogICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCiAgICBmb3IgbGluZSBpbiBsaW5lczoKICAgICAgICBrLCB2ID0gbGluZS5zdHJpcCgpLnNwbGl0KCI9IikKICAgICAgICBlbnYudXBkYXRlKHtrOiB2fSkKCm9zLmNoZGlyKCIuLi8uLi8iKQpmaWxlbmFtZSA9IGYie19fcHJvamVjdF9ffS17X192ZXJzaW9uX199IgpleHRlbnNpb24gPSAiLnRhci5neiIKCgpkZWYgY29tcHJlc3NpbmcoKToKICAgIGNtZCA9IGYidGFyIC16Y2YgIHtmaWxlbmFtZX17ZXh0ZW5zaW9ufSIKICAgIGV4Y2x1ZGVfcGF0dGVybiA9IFsKICAgICAgICBmJ3tfX3Byb2plY3RfX30vdmVudicsCiAgICAgICAgZid7X19wcm9qZWN0X199Ly5naXQnLAogICAgICAgIGYne19fcHJvamVjdF9ffS8uaWRlYScsCiAgICAgICAgZid7X19wcm9qZWN0X199L19fcHljYWNoZV9fJywKICAgICAgICBmJ3tfX3Byb2plY3RfX30vLmVudicsCiAgICAgICAgIicqLnB5YyciCiAgICBdCgogICAgZm9yIHBhdHRlcm4gaW4gZXhjbHVkZV9wYXR0ZXJuOgogICAgICAgIGNtZCArPSBmIiAtLWV4Y2x1ZGU9e3BhdHRlcm59IgoKICAgIGNtZCArPSBmIiB7X19wcm9qZWN0X199IgogICAgZXhpdF9jb2RlID0gb3Muc3lzdGVtKGNtZCkKICAgIGFzc2VydCBleGl0X2NvZGUgPT0gMAoKCmRlZiB1cGxvYWRfb3NzKCk6CiAgICBhY2Nlc3Nfa2V5X2lkID0gZW52LmdldCgiYWNjZXNzX2tleV9pZCIpCiAgICBhY2Nlc3Nfa2V5X3NlY3JldCA9IGVudi5nZXQoImFjY2Vzc19rZXlfc2VjcmV0IikKICAgIGVuZHBvaW50ID0gZW52LmdldCgiZW5kcG9pbnQiKQogICAgYnVja2V0X25hbWUgPSBlbnYuZ2V0KCJidWNrZXRfbmFtZSIpCgogICAgYnVja2V0ID0gb3NzMi5CdWNrZXQob3NzMi5BdXRoKGFjY2Vzc19rZXlfaWQsIGFjY2Vzc19rZXlfc2VjcmV0KSwgZW5kcG9pbnQsIGJ1Y2tldF9uYW1lKQogICAgb2JqZWN0X25hbWUgPSBmJ3RhcmJhbGxzL3tmaWxlbmFtZX17ZXh0ZW5zaW9ufScKICAgIGZpbGUgPSBmJy4ve2ZpbGVuYW1lfXtleHRlbnNpb259JwogICAgd2l0aCBvcGVuKGZpbGUsICdyYicpIGFzIGY6CiAgICAgICAgYnVja2V0LnB1dF9vYmplY3Qob2JqZWN0X25hbWUsIGYpCgogICAgdXJsID0gZiJodHRwczovL3tidWNrZXRfbmFtZX0ue2VuZHBvaW50fS97b2JqZWN0X25hbWV9IgogICAgcHJpbnQoZiIgIHVybCBcInt1cmx9XCIiKQoKICAgIGhhc2hfdmFsdWUgPSBoYXNoX2ZpbGUoZmlsZSkKICAgIHByaW50KGYiICBzaGEyNTYgXCJ7aGFzaF92YWx1ZX1cIiIpCiAgICBwcmludChmIiAgbGljZW5zZSBcIntfX2xpY2Vuc2VfX31cIiIpCgoKZGVmIGhhc2hfZmlsZShmaWxlKToKICAgIGhhc2hlciA9IGhhc2hsaWIuc2hhMjU2KCkKCiAgICB3aXRoIG9wZW4oZmlsZSwgJ3JiJykgYXMgZjoKICAgICAgICBoYXNoZXIudXBkYXRlKGYucmVhZCgpKQogICAgICAgIHNoYTI1NiA9IGhhc2hlci5oZXhkaWdlc3QoKQogICAgICAgIHJldHVybiBzaGEyNTYKCgpkZWYgcHJpbnRfbWV0YWRhdGEoKToKICAgIHByaW50KCJjbGFzcyBCdWlsZGVyIDwgRm9ybXVsYSIpCiAgICBwcmludCgiICBpbmNsdWRlIExhbmd1YWdlOjpQeXRob246OlZpcnR1YWxlbnYiKQogICAgcHJpbnQoKQogICAgcHJpbnQoZiIgIGRlc2MgXCJ7X19kZXNjcmlwdGlvbl9ffVwiIikKICAgIHByaW50KGYiICBob21lcGFnZSBcIntfX2hvbWVwYWdlX199XCIiKQoKCmRlZiBidWlsZF9ib3R0bGUoKToKICAgIHBhc3MKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgY29tcHJlc3NpbmcoKQogICAgcHJpbnRfbWV0YWRhdGEoKQogICAgdXBsb2FkX29zcygpCiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KCmRlZiBnZXRfcGFja2FnZV9tZXRhKHBhY2thZ2VfbmFtZSk6CiAgICBhcGlfdXJsID0gZidodHRwczovL3B5cGkub3JnL3B5cGkve3BhY2thZ2VfbmFtZX0vanNvbicKICAgIHJlc3AgPSByZXF1ZXN0cy5nZXQoYXBpX3VybCkuanNvbigpCjx8ZmltX2VuZHw+"]
["cd9bb753c149f7121c92f0e4360eaab912eaf785-3","cd9bb753c149f7121c92f0e4360eaab912eaf785","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgdGltZSxzeXMsdGhyZWFkaW5nCmltcG9ydCByb3NweQpmcm9tIHN0ZF9tc2dzLm1zZyBpbXBvcnQgKgpmcm9tIHJhc3BpbW91c2Vfcm9zLm1zZyBpbXBvcnQgKgpmcm9tIHJhc3BpbW91c2Vfcm9zLnNydiBpbXBvcnQgKgpmcm9tIGNoZWNrX2RyaXZlcl9pbyBpbXBvcnQgKgoKY2xhc3MgUlAob2JqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKCXNlbGYuX19saWdodHNlbnNvcl9zdWIgPSByb3NweS5TdWJzY3JpYmVyKCcvcmFzcGltb3VzZS9saWdodHNlbnNvcnMnLCBMaWdodFNlbnNvclZhbHVlcywgc2VsZi5saWdodHNlbnNvcl9jYWxsYmFjaykKCXNlbGYuX19sdiA9IExpZ2h0U2Vuc29yVmFsdWVzKCkKCXNlbGYucCA9IHJvc3B5LmdldF9wYXJhbSgnfnBfZ2FpbicsIDAuMSkKCXJvc3B5Lm9uX3NodXRkb3duKHNlbGYuc2h1dGRvd25faG9vaykKCiAgICBkZWYgbGlnaHRzZW5zb3JfY2FsbGJhY2soc2VsZiwgZGF0YSk6CglzZWxmLl9fbHYgPSBkYXRhCgogICAgZGVmIGdldF9sZWZ0X2xpZ2h0c2Vuc29yKHNlbGYpOgogICAgICAgIHJldHVybihzZWxmLl9fbHYubGVmdF9zaWRlKQoKICAgIGRlZiBnZXRfcmlnaHRfbGlnaHRzZW5zb3Ioc2VsZik6CiAgICAgICAgcmV0dXJuKHNlbGYuX19sdi5yaWdodF9zaWRlKQoKICAgIGRlZiBnZXRfZm9yd2FyZF9saWdodHNlbnNvcihzZWxmKToKCXJldHVybihzZWxmLl9fbHYubGVmdF9mb3J3YXJkICsgc2VsZi5fX2x2LnJpZ2h0X2ZvcndhcmQpICogMC41CgogICAgZGVmIHNodXRkb3duX2hvb2soc2VsZik6CglwcmludCBwb3NfY29udHJvbCgwLCAwLCAwKQoJcHJpbnQgc3dpdGNoX21vdG9ycyhGYWxzZSkKCgppZiBfX25hbWVfXz09J19fbWFpbl9fJzoKICAgIHJvc3B5LmluaXRfbm9kZSgicmFzcGltb3VzZSIpCgogICAgcnAgPSBSUCgpCiAgICBwcmludCBzd2l0Y2hfbW90b3JzKFRydWUpCiAgICBwcmludCBycC5wCiAgICB0YXJnZXQgPSA4NTAKICAgIG1vdGVyID0gNTAwCiAgICByYXdfY29udHJvbChtb3RlciwgbW90ZXIpCgogICAgd2hpbGUgbm90IHJvc3B5LmlzX3NodXRkb3duKCk6CgkJdHJ5OgoJCSN0aHJlYWQKICAgICAgIAl0PXRocmVhZGluZy5UaW1lcigwLjE1LExpZ2h0U2Vuc29yVmFsdWVzKQogICAgICAgCQl0LnN0YXJ0KCkKICAgICAgIAkJdGltZS5zbGVlcCgwLjE1KQogICAgICAgCQl0LmNhbmNlbCgpCgogICAgICAgCSNsaWdodHNlbnNvcnMgZGF0YQoJICAgCQlkYXRhX2wgPSBycC5nZXRfbGVmdF9saWdodHNlbnNvcigpCgkgICAJCWRhdGFfciA9IHJwLmdldF9yaWdodF9saWdodHNlbnNvcigpCiAgICAgICAJCWRhdGFfZiA9IHJwLmdldF9mb3J3YXJkX2xpZ2h0c2Vuc29yKCkKCiAgICAgICAJI3R1cm4gcmlnaHQKPHxmaW1faG9sZXw+CgkJCQltb3Rvcl9yPS0zMDAKICAgICAgICAgICAJCW1vdG9yX2w9MzAwCiAgICAgICAgICAgCQlyYXdfY29udHJvbChtb3Rvcl9sLG1vdG9yX3IpCgkgICAJCQl0aW1lLnNsZWVwKDAuNSkKICAgICAgICAgICAJCWNvbnRpbnVlCgoJICAgCQlpZiBkYXRhX2wgPD0gOTA6CgkgICAJCQlicmVhawoKICAgICAgIAkjdHJhY2UgbGVmdCB3YWxsCgkgICAJCWUgPSBycC5wKihkYXRhX2wgLSB0YXJnZXQpICMtIChkYXRhX3IgLSB0YXJnZXQpCgkgICAJCW1vdGVyX3IgPSBtb3RlciAtIGUKCSAgIAkJbW90ZXJfbCA9IG1vdGVyICsgZQoJICAgCQlyYXdfY29udHJvbChtb3Rlcl9sLCBtb3Rlcl9yKQoJICAgCSNycC5yLnNsZWVwKCkKCQlleGNlcHQgcm9zcHkuUk9TSW50ZXJydXB0RXhjZXB0aW9uOgoJICAgIAlwYXNzCiAgICByYXdfY29udHJvbCgwLDApCiAgICBwcmludCAic3RvcCBub3cgOiByYXdfY29udHJvbCgwLDApIgo8fGZpbV9zdWZmaXh8PgogICAgICAgCQlpZiBkYXRhX2YgPj0gMjIwMDogIAo8fGZpbV9lbmR8Pg=="]
["267df5b81169228866da4fc668b8b3d2967377da-1","267df5b81169228866da4fc668b8b3d2967377da","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCgppbXBvcnQgc3JlX2NvbXBpbGUKaW1wb3J0IHNyZV9wYXJzZQppbXBvcnQgdW5pdHRlc3QKCmZyb20gc3JlX3Rvb2xzLnV0aWxzIGltcG9ydCBjcmVhdGVfc3VicGF0dGVybiwgY2xvbmVfc3VicGF0dGVybgpmcm9tIHNyZV90b29scy5fc2ltcGxpZnkgaW1wb3J0IF92YWxfZXEKCgpjbGFzcyBUZXN0Q3JlYXRlUmVnZXgodW5pdHRlc3QuVGVzdENhc2UpOgogICAgZGVmIHRlc3RfY2xvbmVfYmFzaWMoc2VsZik6CiAgICAgICAgb3JpZyA9IHNyZV9wYXJzZS5wYXJzZShyImF7Mn0iKQogICAgICAgIG5ldyA9IGNsb25lX3N1YnBhdHRlcm4ob3JpZykKICAgICAgICBzcmVfY29tcGlsZS5jb21waWxlKG5ldykKICAgICAgICBhc3NlcnQgX3ZhbF9lcShvcmlnLCBuZXcpCgogICAgZGVmIHRlc3RfY3JlYXRlX2Jhc2ljKHNlbGYpOgogICAgICAgIG9yaWcgPSBzcmVfcGFyc2UucGFyc2UociJhezJ9IikKICAgICAgICBuZXcgPSBjcmVhdGVfc3VicGF0dGVybihvcmlnLmRhdGEpCiAgICAgICAgc3JlX2NvbXBpbGUuY29tcGlsZShuZXcpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBhc3NlcnQgX3ZhbF9lcShvcmlnLCBuZXcpCjx8ZmltX2VuZHw+"]
["a0d3b513f5b4ed1f268637e858081c34a15f5b16-2","a0d3b513f5b4ed1f268637e858081c34a15f5b16","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gYmxvY2tzdGFjay5jbGllbnQgaW1wb3J0IEJsb2Nrc3RhY2tDbGllbnQKCm5hbWUgPSAnVDUnCnRva2VuID0gb3MuZW52aXJvbi5nZXQoJ0JLX1RPS0VOJykKPHxmaW1faG9sZXw+CnByaW50KGFzc2V0KQphc3NldCA9IGJsdWUuYXNzZXRzLmdldCgnVDUnKQpwcmludChhc3NldC5hbW91bnQpCjx8ZmltX3N1ZmZpeHw+CmNsaWVudCA9IEJsb2Nrc3RhY2tDbGllbnQoYmFzZV91cmk9KCclcy9hcGknICUgb3MuZW52aXJvblsnQktfSU5TVEFOQ0UnXSksIHRva2VuPXRva2VuKQpibHVlID0gY2xpZW50LndhbGxldHMuZ2V0KCdCbHVlJykKaXNzdWVyID0gY2xpZW50Lmlzc3Vlcgphc3NldCA9IGlzc3Vlci5hc3NldHMuY3JlYXRlKCdCbHVlJywgJ1Q1JywgMTAwMCkKPHxmaW1fZW5kfD4="]
["90246ce3f49edea1bdcdb012052b9b176d427ce9-1","90246ce3f49edea1bdcdb012052b9b176d427ce9","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiIgrmnKzmlofku7bkuK3nmoTlh73mlbDnlKjmnaXop6PmnpBqc29u5qCR77yM5a+5bXlzcWzkuK3nmoRmb3JtYXQ9anNvbueahOe7k+aenOi/m+ihjOino+aekO+8jOaWueS+vwrlkI7pnaLnmoTlpITnkIYKIiIiCgp0cnVlID0gVHJ1ZQpmYWxzZSA9IEZhbHNlCgoKZGVmIHBhcnNlX2RpY3QoYXJnLCBsZXZlbCwgcGFyZW50X2tleSwgdG90YWxfZGljdCk6CiAgICAiIiIKICAgIOaVtOeQhmpzb27moJHvvIzlsIZrZXnku6UiLyLliJLliIYKICAgIOekuuS+i++8mgogICAgICAgID4+PiBleGFtcGxlID0geyJmaXJzdCI6IHsicXVlcnkiOiAic2VsZWN0IiwgInVwZGF0ZSI6IHsiYSI6ICJiIn19fQogICAgICAgID4+PiByZXN1bHQgPSB7fQogICAgICAgID4+PiBwYXJzZV9kaWN0KGV4YW1wbGUsIDAsICIiLCByZXN1bHQpCiAgICAgICAgPj4+IHJlc3VsdAogICAgICAgIHsKICAgICAgICAgICAgJy9maXJzdC91cGRhdGUvYSc6IFszLCAwLCAnYiddLAogICAgICAgICAgICAnL2ZpcnN0L3VwZGF0ZSc6IFsyLCAyLCB7J2EnOiAnYid9XSwKICAgICAgICAgICAgJy9maXJzdCc6IFsxLCAyLCB7J3F1ZXJ5JzogJ3NlbGVjdCcsICd1cGRhdGUnOiB7J2EnOiAnYid9fV0sCiAgICAgICAgICAgICcvZmlyc3QvcXVlcnknOiBbMiwgMCwgJ3NlbGVjdCddCiAgICAgICAgfQogICAgJy9maXJzdC9xdWVyeSc6IFsyLCAwLCAnc2VsZWN0J10gCiAgICDliJfooajnrKzkuIDkuKrlhYPntKDku6PooahrZXnnmoTmt7HluqYKICAgIOesrOS6jOS4quWFg+e0oOS7o+ihqOWtkOWFg+e0oOexu+Wei++8jOmAmui/h+WHveaVsGNoZWNrX3R5cGXliKTmlq0KICAgIOesrOS4ieS4quWFg+e0oOS4uuWtkOWFg+e0oOeahOWAvAogICAgIiIiCgogICAgaWYgaXNpbnN0YW5jZShhcmcsIGRpY3QpOgogICAgICAgIGxldmVsID0gbGV2ZWwgKyAxCiAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gYXJnLml0ZW1zKCk6CiAgICAgICAgICAgIHRlbXBfa2V5ID0gIi8iLmpvaW4oW3BhcmVudF9rZXksIGtleV0pCiAgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9IGNoZWNrX3R5cGUodmFsdWUpCiAgICAgICAgICAgIHRvdGFsX2RpY3QudXBkYXRlKHt0ZW1wX2tleTogW2xldmVsLCBjb250ZW50X3R5cGUsIHZhbHVlXX0pCiAgICAgICAgICAgIHBhcnNlX2RpY3QodmFsdWUsIGxldmVsLCB0ZW1wX2tleSwgdG90YWxfZGljdCkKICAgIGVsaWYgaXNpbnN0YW5jZShhcmcsIGxpc3QpOgogICAgICAgIGZvciBpbmRleCwgdmFsdWUgaW4gZW51bWVyYXRlKGFyZyk6CiAgICAgICAgICAgIGxpc3RfdGVtcF9rZXkgPSAiLyIuam9pbihbcGFyZW50X2tleSwgc3RyKGluZGV4KV0pCiAgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9IGNoZWNrX3R5cGUodmFsdWUpCiAgICAgICAgICAgIHRvdGFsX2RpY3QudXBkYXRlKHtsaXN0X3RlbXBfa2V5OiBbbGV2ZWwsIGNvbnRlbnRfdHlwZSwgdmFsdWVdfSkKICAgICAgICAgICAgcGFyc2VfZGljdCh2YWx1ZSwgbGV2ZWwsIGxpc3RfdGVtcF9rZXksIHRvdGFsX2RpY3QpCiAgICBlbHNlOgogICAgICAgIHBhc3MKCgpkZWYgZ2V0X2FsbF9wYXJlbnQoY2hpbGRyZW4pOgogICAgIiIiCiAgICAiIiIKCiAgICBwYXJlbnRfZGljdCA9IHt9CiAgICBmb3IgdmFsdWUgaW4gY2hpbGRyZW46CiAgICAgICAgcGFyZW50X2RpY3QudXBkYXRlKHt2YWx1ZVswXTogIi8iLmpvaW4odmFsdWVbMF0uc3BsaXQoIi8iKVs6LTFdKX0pCiAgICByZXR1cm4gcGFyZW50X2RpY3QKCgpkZWYgZ2V0X2RpcmVjdF9jaGlsZHJlbihwYXJlbnRfa2V5LCBwYXJlbnRfZGljdCk6CiAgICAiIiIKICAgIOiOt+WPluafkOS4queItmtleeeahOebtOaOpeWtkGtleQogICAgIiIiCgogICAgY2hpbGRyZW5fbGlzdCA9IFtdCiAgICBmb3Iga2V5LCB2YWx1ZSBpbiBwYXJlbnRfZGljdC5pdGVtcygpOgogICAgICAgIGlmIHZhbHVlID09IHBhcmVudF9rZXk6CiAgICAgICAgICAgIGNoaWxkcmVuX2xpc3QuYXBwZW5kKGtleSkKICAgIHJldHVybiBjaGlsZHJlbl9saXN0CgoKZGVmIHNhdmVfdG9fZGIoY2xpZW50LCBwbGFuaXRlbSk6CiAgICBvYmplY3RfaWQgPSBjbGllbnQuZ2V0X2NvbGxlY3Rpb24oInBsYW5pdGVtIikuaW5zZXJ0KHBsYW5pdGVtKQogICAgcmV0dXJuIG9iamVjdF9pZAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZGVmIGdldF9pdGVtX2xldmVsKGtleSk6CiAgICAiIiIKICAgIOiOt+WPlmtleeeahOa3seW6pu+8jOS9v+eUqDFfMV8x6L+Z56eN5b2i5byP6KGo56S6Cjx8ZmltX2VuZHw+"]
["7229be8d276eead59ae0b90fb72cb58d60b35dc5-4","7229be8d276eead59ae0b90fb72cb58d60b35dc5","PHxmaW1fcHJlZml4fD4KIiIiQ3VzdG9taXplZCBQbG90IFdpZGdldHMuCiIiIgoKZnJvbSBweXF0Z3JhcGggaW1wb3J0IFBsb3RXaWRnZXQKaW1wb3J0IHB5cXRncmFwaCBhcyBwZwoKPHxmaW1faG9sZXw+CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCgogICAgICAgICMgQWRkIEJhY2tncm91bmQgY29sb3VyIHRvIHdoaXRlCiAgICAgICAgc2VsZi5zZXRCYWNrZ3JvdW5kKCd3JykKICAgICAgICAKICAgICAgICAjIEFkZCBBeGlzIExhYmVscwogICAgICAgIHNlbGYuc2V0TGFiZWwoJ2xlZnQnLCB5X2xhYmVsLCBzaXplPTI0KQogICAgICAgIHNlbGYuc2V0TGFiZWwoJ2JvdHRvbScsIHhfbGFiZWwsIHNpemU9MjQpCgogICAgICAgICMgQWRkIGdyaWQKICAgICAgICBzZWxmLnNob3dHcmlkKHg9VHJ1ZSwgeT1UcnVlKQoKICAgICAgICAjcGVuID0gcGcubWtQZW4oY29sb3I9KDI1NSwgMCwgMCksIHdpZHRoPTMpCiAgICAgICAgI3NlbGYucGxvdChob3VyLCB0ZW1wZXJhdHVyZSwgbmFtZT0iU2Vuc29yIDEiLCAgcGVuPXBlbikKPHxmaW1fc3VmZml4fD4KY2xhc3MgU2ltcGxlUGxvdChQbG90V2lkZ2V0KToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgeF9sYWJlbCwgeV9sYWJlbCwgKmFyZ3MsICoqa3dhcmdzKToKCjx8ZmltX2VuZHw+"]
["e49a202b90feb2dc885fc9616d11288f494f4f12-3","e49a202b90feb2dc885fc9616d11288f494f4f12","PHxmaW1fcHJlZml4fD4KZnJvbSBwcm9qZWN0LmRlY29yYXRpb24ub3JuYW1lbnQgaW1wb3J0IE9ybmFtZW50CmZyb20gcHJvamVjdC5kZWNvcmF0aW9uLnBsYW50IGltcG9ydCBQbGFudAoKCmNsYXNzIERlY29yYXRpb25SZXBvc2l0b3J5OgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYuZGVjb3JhdGlvbnMgPSBbXQoKICAgIGRlZiBhZGQoc2VsZiwgZGVjb3JhdGlvbik6CiAgICAgICAgc2VsZi5kZWNvcmF0aW9ucy5hcHBlbmQoZGVjb3JhdGlvbikKCiAgICBkZWYgcmVtb3ZlKHNlbGYsIGRlY29yYXRpb24pOgogICAgICAgIGlmIGRlY29yYXRpb24gbm90IGluIHNlbGYuZGVjb3JhdGlvbnM6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgICAgICBzZWxmLmRlY29yYXRpb25zLnJlbW92ZShkZWNvcmF0aW9uKQogICAgICAgIHJldHVybiBUcnVlCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIF9nZXRfZGVjb3JhdGlvbihvYmpfdHlwZSwgbGlzdF9vZl9vYmopOgogICAgICAgIHJldHVybiBbb2JqIGZvciBvYmogaW4gbGlzdF9vZl9vYmogaWYgb2JqLl9fY2xhc3NfXy5fX25hbWVfXyA9PSBvYmpfdHlwZV0KCiAgICBkZWYgZmluZF9ieV90eXBlKHNlbGYsIGRlY29yYXRpb25fdHlwZSk6CiAgICAgICAgZmlsdGVyZWRfZGVjb3JhdGlvbiA9IHNlbGYuX2dldF9kZWNvcmF0aW9uKGRlY29yYXRpb25fdHlwZSwgc2VsZi5kZWNvcmF0aW9ucykKICAgICAgICBpZiBub3QgZmlsdGVyZWRfZGVjb3JhdGlvbjoKICAgICAgICAgICAgcmV0dXJuICJOb25lIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgIHJldHVybiBmaWx0ZXJlZF9kZWNvcmF0aW9uWzBdCgoKPHxmaW1fZW5kfD4="]
["9d167058d9896ce8f3740d92584b628b4a5ba1d4-1","9d167058d9896ce8f3740d92584b628b4a5ba1d4","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIENvcHlyaWdodCAyMDE3IEdvb2dsZSBJbmMuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMgdm9pY2Vtb25rZXkgYXNzaXN0YW50IGZvciBkaWdpdGFsIGNyYWZ0cyBmbGV4IDIwMTggZ3JvdXAgcHJvamVjdAoKIiIiQSBkZW1vIG9mIHRoZSBHb29nbGUgQ2xvdWRTcGVlY2ggcmVjb2duaXplci4iIiIKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IGFpeS5hdWRpbwppbXBvcnQgYWl5LmNsb3Vkc3BlZWNoCmltcG9ydCBhaXkudm9pY2VoYXQKZnJvbSBkYXRhYmFzZSBpbXBvcnQgKgoKZGVmIG1haW4oKToKICAgIHJlY29nbml6ZXIgPSBhaXkuY2xvdWRzcGVlY2guZ2V0X3JlY29nbml6ZXIoKQogICAgcmVjb2duaXplci5leHBlY3RfcGhyYXNlKCd2b2ljZSBtb25rZXknKQogICAgcmVjb2duaXplci5leHBlY3RfcGhyYXNlKCduZXcgdGFzaycpCiAgICByZWNvZ25pemVyLmV4cGVjdF9waHJhc2UoJ2dvb2RieWUnKQoKICAgIGJ1dHRvbiA9IGFpeS52b2ljZWhhdC5nZXRfYnV0dG9uKCkKICAgIGxlZCA9IGFpeS52b2ljZWhhdC5nZXRfbGVkKCkKICAgIGFpeS5hdWRpby5nZXRfcmVjb3JkZXIoKS5zdGFydCgpCgogICAgICAgICAKICAgIAogICAgd2hpbGUgVHJ1ZToKICAgICAgICBwcmludCgnUHJlc3MgdGhlIGJ1dHRvbiBhbmQgc3BlYWsnKQogICAgICAgIGJ1dHRvbi53YWl0X2Zvcl9wcmVzcygpCiAgICAgICAgcHJpbnQoJ0xpc3RlbmluZy4uLicpCiAgICAgICAgdGV4dCA9IHJlY29nbml6ZXIucmVjb2duaXplKCkKICAgICAgICBpZiBub3QgdGV4dDoKICAgICAgICAgICAgcHJpbnQoJ1NvcnJ5LCBJIGRpZCBub3QgaGVhciB5b3UuJykKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCgnWW91IHNhaWQgIicsIHRleHQsICciJykKICAgICAgICAgICAgaWYgJ3ZvaWNlIG1vbmtleScgaW4gdGV4dDoKICAgICAgICAgICAgICAgIGFpeS5hdWRpby5zYXkoJ0hlbGxvIFdvcmxkIScpCiAgICAgICAgICAgIGVsaWYgJ25ldyB0YXNrJyBpbiB0ZXh0OgogICAgICAgICAgICAgICAgbXl0YXNrID0gdGV4dC5yZXBsYWNlKCduZXcgdGFzaycsICcnLCAxKQogICAgICAgICAgICAgICAgYWl5LmF1ZGlvLnNheSgnVGFzayByZWNvcmRlZC4nICsgbXl0YXNrKQogICAgICAgICAgICAgICAgaW5zZXJ0VGFzayhzdHIobXl0YXNrKSkKICAgICAgICAgICAgICAgIHByaW50KG15dGFzaykKCQkKICAgICAgICAgICAgZWxpZiAnZ29vZGJ5ZScgaW4gdGV4dDoKICAgICAgICAgICAgICAgIGJyZWFrCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbWFpbigpCjx8ZmltX2VuZHw+"]
["9d105b1d34717e1ff531c1f43282c23ba7a9ca11-1","9d105b1d34717e1ff531c1f43282c23ba7a9ca11","PHxmaW1fcHJlZml4fD4KIwojIEF1dGhvcjogUWltaW5nIFN1biA8b3NpcnB0LnN1bkBnbWFpbC5jb20+CiMKCmltcG9ydCB1bml0dGVzdApmcm9tIHB5c2NmIGltcG9ydCBndG8KZnJvbSBweXNjZiBpbXBvcnQgc2NmCgptb2wgPSBndG8uTW9sZSgpCm1vbC52ZXJib3NlID0gMAptb2wub3V0cHV0ID0gTm9uZSMib3V0X2J6Igptb2wuYXRvbSA9IFsKICAgIFsiQyIsICgtMC42NTgzMDcxOSwgIDAuNjExMjMyODcsIC0wLjAwODAwMTQ4KV0sCiAgICBbIkMiLCAoIDAuNzM2ODUyODEsICAwLjYxMTIzMjg3LCAtMC4wMDgwMDE0OCldLAogICAgWyJDIiwgKCAxLjQzNDM5MDgxLCAgMS44MTg5ODM4NywgLTAuMDA4MDAxNDgpXSwKICAgIFsiQyIsICggMC43MzY3MzY4MSwgIDMuMDI3NDkyODcsIC0wLjAwOTIwMDQ4KV0sCiAgICBbIkMiLCAoLTAuNjU4MDg4MTksICAzLjAyNzQxNDg3LCAtMC4wMDk2Nzk0OCldLAogICAgWyJDIiwgKC0xLjM1NTY4OTE5LCAgMS44MTkyMDg4NywgLTAuMDA4NjgzNDgpXSwKICAgIFsiSCIsICgtMS4yMDgwNjYxOSwgLTAuMzQxMDg0MTMsIC0wLjAwNzU1MTQ4KV0sCiAgICBbIkgiLCAoIDEuMjg2MzYwODEsIC0wLjM0MTI4MDEzLCAtMC4wMDY2ODY0OCldLAogICAgWyJIIiwgKCAyLjUzNDA3MDgxLCAgMS44MTkwNjM4NywgLTAuMDA3MzY3NDgpXSwKICAgIFsiSCIsICggMS4yODY5MzY4MSwgIDMuOTc5NjM1ODcsIC0wLjAwOTI1OTQ4KV0sCiAgICBbIkgiLCAoLTEuMjA4MjEwMTksICAzLjk3OTY5NTg3LCAtMC4wMTA2MzI0OCldLAogICAgWyJIIiwgKC0yLjQ1NTI5MzE5LCAgMS44MTkzOTE4NywgLTAuMDA4ODYzNDgpXSxdCgoKbW9sLmJhc2lzID0geyJIIjogJ2NjcHZkeicsCiAgICAgICAgICAgICAiQyI6ICdjY3B2ZHonLH0KbW9sLmJ1aWxkKCkKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmNsYXNzIEtub3dWYWx1ZXModW5pdHRlc3QuVGVzdENhc2UpOgogICAgZGVmIHRlc3RfbnJfcmhmKHNlbGYpOgogICAgICAgIHJoZiA9IHNjZi5SSEYobW9sKQogICAgICAgIHJoZi5jb252X3RvbCA9IDFlLTExCjx8ZmltX2VuZHw+"]
["d0c03e6845f407fc686016c6e7444360b665857a-1","d0c03e6845f407fc686016c6e7444360b665857a","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IHJlCmltcG9ydCBzdWJwcm9jZXNzCmZyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCmZyb20gb3MucGF0aCBpbXBvcnQgam9pbiwgYWJzcGF0aCwgaXNmaWxlLCBpc2RpcgoKU0RLX1ZFUiA9ICIxMTc3NS4zIgoKU0RLX0RJUiA9ICJDOlxcUHJvZ3JhbSBGaWxlcyAoeDg2KVxcTWljcm9zb2Z0IFhib3ggMzYwIFNES1xcYmluXFx3aW4zMiIKCkhFQURFUl9SRSA9IHJlLmNvbXBpbGUociJETExcc25hbWVccyo6XHMqKFtcd1xXXXswLH0/KVxyXG4iKQpFWFBPUlRfUkUgPSByZS5jb21waWxlKHIiXHMrKFxkKylccysoW1x3XFddezAsfT8pXHJcbiIpCgpkZWYgZHVtcGJpbihjb21tYW5kOiBzdHIsIGZpbGVuYW1lOiBzdHIpIC0+IHN0cjoKCWdsb2JhbCBTREtfRElSCgoJcCA9IHN1YnByb2Nlc3MuUG9wZW4oW2pvaW4oU0RLX0RJUiwgImR1bXBiaW4uZXhlIiksICIvIiArIGNvbW1hbmQudXBwZXIoKSwgYWJzcGF0aChmaWxlbmFtZSldLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzaGVsbD1UcnVlKQoJKG91dHB1dCwgZXJyKSA9IHAuY29tbXVuaWNhdGUoKQoJaWYgcC53YWl0KCkgIT0gMDoKCQlwcmludCgiRXJyb3IhIikKCXJldHVybiBvdXRwdXQuZGVjb2RlKCJ1dGY4IikKCmRlZiBmZXRjaF92ZXJzaW9uKHM6IHN0cikgLT4gKHN0ciwgTm9uZSk6CglnbG9iYWwgSEVBREVSX1JFCgoJbWF0Y2hlcyA9IEhFQURFUl9SRS5zZWFyY2gocykKCWlmIG1hdGNoZXM6CgkJcmV0dXJuIG1hdGNoZXMuZ3JvdXAoMSkKCmRlZiBjcmVhdGVfZGVmKGlmaWxlOiBzdHIsIG9maWxlOiBzdHIsIHZlcmJvc2U6IGJvb2wgPSBGYWxzZSkgLT4gTm9uZToKCWdsb2JhbCBFWFBPUlRfUkUKCglhc3NlcnQgaXNmaWxlKGlmaWxlKSwgIklucHV0IGZpbGUgZG9lc24ndCBleGlzdCEiCgoJcmVzID0gZHVtcGJpbigiaGVhZGVycyIsIGlmaWxlKQoJbGliX3ZlciA9IGZldGNoX3ZlcnNpb24ocmVzKQoJYXNzZXJ0IGxpYl92ZXIsICJFcnJvciBsb2NhdGluZyBsaWJyYXJ5IHZlcnNpb24hIgoJcmVzID0gZHVtcGJpbigiZXhwb3J0cyIsIGlmaWxlKQoJd2l0aCBvcGVuKG9maWxlLCAid2IiKSBhcyBmOgoJCWlmIHZlcmJvc2U6IHByaW50KGYiTElCUkFSWSB7bGliX3Zlcn0iKQoJCWYud3JpdGUoZiJMSUJSQVJZIHtsaWJfdmVyfVxyXG4iLmVuY29kZSgiYXNjaWkiKSkKCQlpZiB2ZXJib3NlOiBwcmludCgiRVhQT1JUUyIpCgkJZi53cml0ZSgiRVhQT1JUU1xyXG4iLmVuY29kZSgiYXNjaWkiKSkKCgkJIyBpZiBkZWJ1ZzogcHJpbnQoIlBhcnNpbmcgZHVtcGJpbiByZXNwb25zZS4uLiIpCgkJY2xlYW4gPSBbXQoJCWZvciAob3JkaW5hbCwgZnVuYykgaW4gRVhQT1JUX1JFLmZpbmRhbGwocmVzLCByZS5NVUxUSUxJTkUpOgoJCQlpZiBub3QgZnVuYy5zdGFydHN3aXRoKCIuIik6Cjx8ZmltX2hvbGV8PgoJCSMgaWYgZGVidWc6IHByaW50KCJTb3J0aW5nIHJlc3VsdHMgYnkgb3JkaW5hbC4uLiIpCgkJY2xlYW4uc29ydChrZXk9bGFtYmRhIGk6IGlbMF0pCgkJZm9yIChvcmRpbmFsLCBmdW5jKSBpbiBjbGVhbjoKCQkJaWYgdmVyYm9zZTogcHJpbnQoZiJcdHtmdW5jfSBAe29yZGluYWx9IikKCQkJZi53cml0ZShmIlx0e2Z1bmN9IEB7b3JkaW5hbH1cclxuIi5lbmNvZGUoImFzY2lpIikpCgpkZWYgbWFpbigpIC0+IE5vbmU6CglnbG9iYWwgU0RLX0RJUiwgU0RLX1ZFUgoKCXBhcnNlciA9IEFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSJBIHNjcmlwdCB0byBjcmVhdGUgLmRlZiBmaWxlcyBmcm9tIFhib3ggMzYwIGxpYnJhcmllcyB1c2luZyBkdW1wYmluIGluIHRoZSBTREsiKQoJcGFyc2VyLmFkZF9hcmd1bWVudCgiaWZpbGUiLCB0eXBlPXN0ciwgaGVscD0iVGhlIGxpYnJhcnkgeW91IHdhbnQgdG8gZHVtcCBleHBvcnRzIGZyb20iKQoJcGFyc2VyLmFkZF9hcmd1bWVudCgib2ZpbGUiLCB0eXBlPXN0ciwgaGVscD0iVGhlIGZpbGUgeW91IHdhbnQgdG8gd3JpdGUgdGhlIGRlZmluaXRpb25zIHRvIikKCXBhcnNlci5hZGRfYXJndW1lbnQoIi12IiwgIi0tdmVyYm9zZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IlByaW50IHZlcmJvc2UgaW5mb3JtYXRpb24gb3V0IikKCWFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCgoJYXNzZXJ0IGlzZGlyKFNES19ESVIpLCAiVGhlIFhib3ggMzYwIFNESyBkb2Vzbid0IGFwcGVhciB0byBiZSBpbnN0YWxsZWQiCglhc3NlcnQgaXNmaWxlKGFyZ3MuaWZpbGUpLCAiVGhlIGlucHV0IGZpbGUgZG9lc24ndCBleGlzdCIKCgljcmVhdGVfZGVmKGFyZ3MuaWZpbGUsIGFyZ3Mub2ZpbGUsIGFyZ3MudmVyYm9zZSkKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CgltYWluKCkKPHxmaW1fc3VmZml4fD4KCQkJCWNsZWFuLmFwcGVuZCgoaW50KG9yZGluYWwpLCBmdW5jKSkKCjx8ZmltX2VuZHw+"]
["e47b1bb3a1a6c67923a36782b7b212f75519d980-1","e47b1bb3a1a6c67923a36782b7b212f75519d980","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAxOSBUaGUgQW1wbGlHcmFwaCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgojCiMgVGhpcyBmaWxlIGlzIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuCiMgQSBjb3B5IG9mIHRoZSBMaWNlbmNlIGlzIGF2YWlsYWJsZSBpbiBMSUNFTkNFLCBvciBhdDoKIwojICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHB5dGVzdAoKZnJvbSBhbXBsaWdyYXBoLmxhdGVudF9mZWF0dXJlcyBpbXBvcnQgVHJhbnNFLCBEaXN0TXVsdCwgQ29tcGxFeCwgSG9sRSwgUmFuZG9tQmFzZWxpbmUKZnJvbSBhbXBsaWdyYXBoLmRhdGFzZXRzIGltcG9ydCBsb2FkX3duMTgKZnJvbSBhbXBsaWdyYXBoLmV2YWx1YXRpb24gaW1wb3J0IGV2YWx1YXRlX3BlcmZvcm1hbmNlLCBoaXRzX2F0X25fc2NvcmUKCmRlZiB0ZXN0X2ZpdF9wcmVkaWN0X1RyYW5zRV9lYXJseV9zdG9wcGluZ193aXRoX2ZpbHRlcigpOgogICAgWCA9IGxvYWRfd24xOCgpCiAgICBtb2RlbCA9IFRyYW5zRShiYXRjaGVzX2NvdW50PTEsIHNlZWQ9NTU1LCBlcG9jaHM9Nywgaz01MCwgbG9zcz0ncGFpcndpc2UnLCBsb3NzX3BhcmFtcz17J21hcmdpbic6IDV9LAogICAgICAgICAgICAgICAgICAgdmVyYm9zZT1UcnVlLCBvcHRpbWl6ZXI9J2FkYWdyYWQnLCBvcHRpbWl6ZXJfcGFyYW1zPXsnbHInOjAuMX0pCiAgICBYX2ZpbHRlciA9IG5wLmNvbmNhdGVuYXRlKChYWyd0cmFpbiddLCBYWyd2YWxpZCddLCBYWyd0ZXN0J10pKQogICAgbW9kZWwuZml0KFhbJ3RyYWluJ10sIFRydWUsIHsneF92YWxpZCc6IFhbJ3ZhbGlkJ11bOjoxMDBdLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NyaXRlcmlhJzonbXJyJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd4X2ZpbHRlcic6WF9maWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdG9wX2ludGVydmFsJzogMiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdidXJuX2luJzoxLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NoZWNrX2ludGVydmFsJzoyfSkKICAgIAogICAgeSwgXyA9IG1vZGVsLnByZWRpY3QoWFsndGVzdCddWzoxXSwgZ2V0X3JhbmtzPVRydWUpCiAgICBwcmludCh5KQogICAgCgpkZWYgdGVzdF9maXRfcHJlZGljdF9UcmFuc0VfZWFybHlfc3RvcHBpbmdfd2l0aG91dF9maWx0ZXIoKToKICAgIFggPSBsb2FkX3duMTgoKQogICAgbW9kZWwgPSBUcmFuc0UoYmF0Y2hlc19jb3VudD0xLCBzZWVkPTU1NSwgZXBvY2hzPTcsIGs9NTAsIGxvc3M9J3BhaXJ3aXNlJywgbG9zc19wYXJhbXM9eydtYXJnaW4nOiA1fSwKICAgICAgICAgICAgICAgICAgIHZlcmJvc2U9VHJ1ZSwgb3B0aW1pemVyPSdhZGFncmFkJywgb3B0aW1pemVyX3BhcmFtcz17J2xyJzowLjF9KQogICAgbW9kZWwuZml0KFhbJ3RyYWluJ10sIFRydWUsIHsneF92YWxpZCc6IFhbJ3ZhbGlkJ11bOjoxMDBdLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NyaXRlcmlhJzonbXJyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0b3BfaW50ZXJ2YWwnOiAyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2J1cm5faW4nOjEsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2hlY2tfaW50ZXJ2YWwnOjJ9KQogICAgCiAgICB5LCBfID0gbW9kZWwucHJlZGljdChYWyd0ZXN0J11bOjFdLCBnZXRfcmFua3M9VHJ1ZSkKICAgIHByaW50KHkpCgpkZWYgdGVzdF9ldmFsdWF0ZV9SYW5kb21CYXNlbGluZSgpOgogICAgbW9kZWwgPSBSYW5kb21CYXNlbGluZShzZWVkPTApCiAgICBYID0gbG9hZF93bjE4KCkKICAgIG1vZGVsLmZpdChYWyJ0cmFpbiJdKQogICAgcmFua3MgPSBldmFsdWF0ZV9wZXJmb3JtYW5jZShYWyJ0ZXN0Il0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbD1tb2RlbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9kZWZhdWx0X3Byb3RvY29sPUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JydXB0X3NpZGU9J3MrbycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2U9RmFsc2UpCiAgICBoaXRzMTAgPSBoaXRzX2F0X25fc2NvcmUocmFua3MsIG49MTApCiAgICBoaXRzMSA9IGhpdHNfYXRfbl9zY29yZShyYW5rcywgbj0xKQogICAgYXNzZXJ0KGhpdHMxMD09MC4wMDAyIGFuZCBoaXRzMT09MC4wKQogICAgCmRlZiB0ZXN0X2ZpdF9wcmVkaWN0X3RyYW5zRSgpOgogICAgbW9kZWwgPSBUcmFuc0UoYmF0Y2hlc19jb3VudD0xLCBzZWVkPTU1NSwgZXBvY2hzPTIwLCBrPTEwLCBsb3NzPSdwYWlyd2lzZScsIGxvc3NfcGFyYW1zPXsnbWFyZ2luJzogNX0sIAogICAgICAgICAgICAgICAgICAgb3B0aW1pemVyPSdhZGFncmFkJywgb3B0aW1pemVyX3BhcmFtcz17J2xyJzowLjF9KQogICAgWCA9IG5wLmFycmF5KFtbJ2EnLCAneScsICdiJ10sCiAgICAgICAgICAgICAgICAgIFsnYicsICd5JywgJ2EnXSwKICAgICAgICAgICAgICAgICAgWydhJywgJ3knLCAnYyddLAogICAgICAgICAgICAgICAgICBbJ2MnLCAneScsICdhJ10sCiAgICAgICAgICAgICAgICAgIFsnYScsICd5JywgJ2QnXSwKICAgICAgICAgICAgICAgICAgWydjJywgJ3knLCAnZCddLAogICAgICAgICAgICAgICAgICBbJ2InLCAneScsICdjJ10sCiAgICAgICAgICAgICAgICAgIFsnZicsICd5JywgJ2UnXV0pCiAgICBtb2RlbC5maXQoWCkKICAgIHlfcHJlZCwgXyA9IG1vZGVsLnByZWRpY3QobnAuYXJyYXkoW1snZicsICd5JywgJ2UnXSwgWydiJywgJ3knLCAnZCddXSksIGdldF9yYW5rcz1UcnVlKQogICAgcHJpbnQoeV9wcmVkKQogICAgYXNzZXJ0IHlfcHJlZFswXSA+IHlfcHJlZFsxXQoKCmRlZiB0ZXN0X2ZpdF9wcmVkaWN0X0Rpc3RNdWx0KCk6CiAgICBtb2RlbCA9IERpc3RNdWx0KGJhdGNoZXNfY291bnQ9Miwgc2VlZD01NTUsIGVwb2Nocz0yMCwgaz0xMCwgbG9zcz0ncGFpcndpc2UnLCBsb3NzX3BhcmFtcz17J21hcmdpbic6IDV9LCAKICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemVyPSdhZGFncmFkJywgb3B0aW1pemVyX3BhcmFtcz17J2xyJzowLjF9KQogICAgWCA9IG5wLmFycmF5KFtbJ2EnLCAneScsICdiJ10sCiAgICAgICAgICAgICAgICAgIFsnYicsICd5JywgJ2EnXSwKICAgICAgICAgICAgICAgICAgWydhJywgJ3knLCAnYyddLAogICAgICAgICAgICAgICAgICBbJ2MnLCAneScsICdhJ10sCiAgICAgICAgICAgICAgICAgIFsnYScsICd5JywgJ2QnXSwKICAgICAgICAgICAgICAgICAgWydjJywgJ3knLCAnZCddLAogICAgICAgICAgICAgICAgICBbJ2InLCAneScsICdjJ10sCiAgICAgICAgICAgICAgICAgIFsnZicsICd5JywgJ2UnXV0pCiAgICBtb2RlbC5maXQoWCkKICAgIHlfcHJlZCwgXyA9IG1vZGVsLnByZWRpY3QobnAuYXJyYXkoW1snZicsICd5JywgJ2UnXSwgWydiJywgJ3knLCAnZCddXSksIGdldF9yYW5rcz1UcnVlKQogICAgcHJpbnQoeV9wcmVkKQogICAgYXNzZXJ0IHlfcHJlZFswXSA+IHlfcHJlZFsxXQoKCmRlZiB0ZXN0X2ZpdF9wcmVkaWN0X0NvbXBsZUV4KCk6CiAgICBtb2RlbCA9IENvbXBsRXgoYmF0Y2hlc19jb3VudD0xLCBzZWVkPTU1NSwgZXBvY2hzPTIwLCBrPTEwLAogICAgICAgICAgICAgICAgICAgIGxvc3M9J3BhaXJ3aXNlJywgbG9zc19wYXJhbXM9eydtYXJnaW4nOiAxfSwgcmVndWxhcml6ZXI9J0xQJywKICAgICAgICAgICAgICAgICAgICByZWd1bGFyaXplcl9wYXJhbXM9eydsYW1iZGEnOiAwLjEsICdwJzogMn0sIAogICAgICAgICAgICAgICAgICAgIG9wdGltaXplcj0nYWRhZ3JhZCcsIG9wdGltaXplcl9wYXJhbXM9eydscic6MC4xfSkKICAgIFggPSBucC5hcnJheShbWydhJywgJ3knLCAnYiddLAogICAgICAgICAgICAgICAgICBbJ2InLCAneScsICdhJ10sCiAgICAgICAgICAgICAgICAgIFsnYScsICd5JywgJ2MnXSwKICAgICAgICAgICAgICAgICAgWydjJywgJ3knLCAnYSddLAogICAgICAgICAgICAgICAgICBbJ2EnLCAneScsICdkJ10sCiAgICAgICAgICAgICAgICAgIFsnYycsICd5JywgJ2QnXSwKICAgICAgICAgICAgICAgICAgWydiJywgJ3knLCAnYyddLAogICAgICAgICAgICAgICAgICBbJ2YnLCAneScsICdlJ11dKQogICAgbW9kZWwuZml0KFgpCiAgICB5X3ByZWQsIF8gPSBtb2RlbC5wcmVkaWN0KG5wLmFycmF5KFtbJ2YnLCAneScsICdlJ10sIFsnYicsICd5JywgJ2QnXV0pLCBnZXRfcmFua3M9VHJ1ZSkKICAgIHByaW50KHlfcHJlZCkKICAgIGFzc2VydCB5X3ByZWRbMF0gPiB5X3ByZWRbMV0KCgpkZWYgdGVzdF9maXRfcHJlZGljdF9Ib2xFKCk6CiAgICBtb2RlbCA9IEhvbEUoYmF0Y2hlc19jb3VudD0xLCBzZWVkPTU1NSwgZXBvY2hzPTIwLCBrPTEwLAogICAgICAgICAgICAgICAgIGxvc3M9J3BhaXJ3aXNlJywgbG9zc19wYXJhbXM9eydtYXJnaW4nOiAxfSwgcmVndWxhcml6ZXI9J0xQJywKICAgICAgICAgICAgICAgICByZWd1bGFyaXplcl9wYXJhbXM9eydsYW1iZGEnOiAwLjEsICdwJzogMn0sIAogICAgICAgICAgICAgICAgIG9wdGltaXplcj0nYWRhZ3JhZCcsIG9wdGltaXplcl9wYXJhbXM9eydscic6MC4xfSkKICAgIFggPSBucC5hcnJheShbWydhJywgJ3knLCAnYiddLAogICAgICAgICAgICAgICAgICBbJ2InLCAneScsICdhJ10sCiAgICAgICAgICAgICAgICAgIFsnYScsICd5JywgJ2MnXSwKICAgICAgICAgICAgICAgICAgWydjJywgJ3knLCAnYSddLAogICAgICAgICAgICAgICAgICBbJ2EnLCAneScsICdkJ10sCiAgICAgICAgICAgICAgICAgIFsnYycsICd5JywgJ2QnXSwKICAgICAgICAgICAgICAgICAgWydiJywgJ3knLCAnYyddLAogICAgICAgICAgICAgICAgICBbJ2YnLCAneScsICdlJ11dKQogICAgbW9kZWwuZml0KFgpCiAgICB5X3ByZWQsIF8gPSBtb2RlbC5wcmVkaWN0KG5wLmFycmF5KFtbJ2YnLCAneScsICdlJ10sIFsnYicsICd5JywgJ2QnXV0pLCBnZXRfcmFua3M9VHJ1ZSkKICAgIHByaW50KHlfcHJlZCkKICAgIGFzc2VydCB5X3ByZWRbMF0gPiB5X3ByZWRbMV0KCgpkZWYgdGVzdF9yZXRyYWluKCk6CiAgICBtb2RlbCA9IENvbXBsRXgoYmF0Y2hlc19jb3VudD0xLCBzZWVkPTU1NSwgZXBvY2hzPTIwLCBrPTEwLAogICAgICAgICAgICAgICAgICAgIGxvc3M9J3BhaXJ3aXNlJywgbG9zc19wYXJhbXM9eydtYXJnaW4nOiAxfSwgcmVndWxhcml6ZXI9J0xQJywKICAgICAgICAgICAgICAgICAgICByZWd1bGFyaXplcl9wYXJhbXM9eydsYW1iZGEnOiAwLjEsICdwJzogMn0sIAo8fGZpbV9ob2xlfD4KICAgIFggPSBucC5hcnJheShbWydhJywgJ3knLCAnYiddLAogICAgICAgICAgICAgICAgICBbJ2InLCAneScsICdhJ10sCiAgICAgICAgICAgICAgICAgIFsnYScsICd5JywgJ2MnXSwKICAgICAgICAgICAgICAgICAgWydjJywgJ3knLCAnYSddLAogICAgICAgICAgICAgICAgICBbJ2EnLCAneScsICdkJ10sCiAgICAgICAgICAgICAgICAgIFsnYycsICd5JywgJ2QnXSwKICAgICAgICAgICAgICAgICAgWydiJywgJ3knLCAnYyddLAogICAgICAgICAgICAgICAgICBbJ2YnLCAneScsICdlJ11dKQogICAgbW9kZWwuZml0KFgpCiAgICB5X3ByZWRfMXN0LCBfID0gbW9kZWwucHJlZGljdChucC5hcnJheShbWydmJywgJ3knLCAnZSddLCBbJ2InLCAneScsICdkJ11dKSwgZ2V0X3JhbmtzPVRydWUpCiAgICBtb2RlbC5maXQoWCkKICAgIHlfcHJlZF8ybmQsIF8gPSBtb2RlbC5wcmVkaWN0KG5wLmFycmF5KFtbJ2YnLCAneScsICdlJ10sIFsnYicsICd5JywgJ2QnXV0pLCBnZXRfcmFua3M9VHJ1ZSkKICAgIG5wLnRlc3RpbmcuYXNzZXJ0X2FycmF5X2VxdWFsKHlfcHJlZF8xc3QsIHlfcHJlZF8ybmQpCgoKZGVmIHRlc3RfZml0X3ByZWRpY3Rfd24xOF9UcmFuc0UoKToKICAgIFggPSBsb2FkX3duMTgoKQogICAgbW9kZWwgPSBUcmFuc0UoYmF0Y2hlc19jb3VudD0xLCBzZWVkPTU1NSwgZXBvY2hzPTUsIGs9MTAwLCBsb3NzPSdwYWlyd2lzZScsIGxvc3NfcGFyYW1zPXsnbWFyZ2luJzogNX0sCiAgICAgICAgICAgICAgICAgICB2ZXJib3NlPVRydWUsIG9wdGltaXplcj0nYWRhZ3JhZCcsIG9wdGltaXplcl9wYXJhbXM9eydscic6IDAuMX0pCiAgICBtb2RlbC5maXQoWFsndHJhaW4nXSkKICAgIHksIF8gPSBtb2RlbC5wcmVkaWN0KFhbJ3Rlc3QnXVs6MV0sIGdldF9yYW5rcz1UcnVlKQoKICAgIHByaW50KHkpCgoKZGVmIHRlc3RfbWlzc2luZ19lbnRpdHlfQ29tcGxFeCgpOgoKICAgIFggPSBucC5hcnJheShbWydhJywgJ3knLCAnYiddLAogICAgICAgICAgICAgICAgICBbJ2InLCAneScsICdhJ10sCiAgICAgICAgICAgICAgICAgIFsnYScsICd5JywgJ2MnXSwKICAgICAgICAgICAgICAgICAgWydjJywgJ3knLCAnYSddLAogICAgICAgICAgICAgICAgICBbJ2EnLCAneScsICdkJ10sCiAgICAgICAgICAgICAgICAgIFsnYycsICd5JywgJ2QnXSwKICAgICAgICAgICAgICAgICAgWydiJywgJ3knLCAnYyddLAogICAgICAgICAgICAgICAgICBbJ2YnLCAneScsICdlJ11dKQogICAgbW9kZWwgPSBDb21wbEV4KGJhdGNoZXNfY291bnQ9MSwgc2VlZD01NTUsIGVwb2Nocz0yLCBrPTUpCiAgICBtb2RlbC5maXQoWCkKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICBtb2RlbC5wcmVkaWN0KFsnYScsICd5JywgJ3p6enp6enp6enp6J10pCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgbW9kZWwucHJlZGljdChbJ2EnLCAneHh4eHh4eHh4eCcsICdlJ10pCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgbW9kZWwucHJlZGljdChbJ3p6enp6enp6JywgJ3knLCAnZSddKQoKCmRlZiB0ZXN0X2ZpdF9wcmVkaWN0X3duMThfQ29tcGxFeCgpOgogICAgWCA9IGxvYWRfd24xOCgpCiAgICBtb2RlbCA9IENvbXBsRXgoYmF0Y2hlc19jb3VudD0xLCBzZWVkPTU1NSwgZXBvY2hzPTUsIGs9MTAwLAogICAgICAgICAgICAgICAgICAgIGxvc3M9J3BhaXJ3aXNlJywgbG9zc19wYXJhbXM9eydtYXJnaW4nOiAxfSwgcmVndWxhcml6ZXI9J0xQJywKICAgICAgICAgICAgICAgICAgICByZWd1bGFyaXplcl9wYXJhbXM9eydsYW1iZGEnOiAwLjEsICdwJzogMn0sIAogICAgICAgICAgICAgICAgICAgIG9wdGltaXplcj0nYWRhZ3JhZCcsIG9wdGltaXplcl9wYXJhbXM9eydscic6MC4xfSkKICAgIG1vZGVsLmZpdChYWyd0cmFpbiddKQogICAgeSA9IG1vZGVsLnByZWRpY3QoWFsndGVzdCddWzoxXSwgZ2V0X3JhbmtzPVRydWUpCiAgICBwcmludCh5KQoKCmRlZiB0ZXN0X2xvb2t1cF9lbWJlZGRpbmdzKCk6CiAgICBtb2RlbCA9IERpc3RNdWx0KGJhdGNoZXNfY291bnQ9Miwgc2VlZD01NTUsIGVwb2Nocz0yMCwgaz0xMCwgbG9zcz0ncGFpcndpc2UnLCBsb3NzX3BhcmFtcz17J21hcmdpbic6IDV9LCAKICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemVyPSdhZGFncmFkJywgb3B0aW1pemVyX3BhcmFtcz17J2xyJzowLjF9KQogICAgWCA9IG5wLmFycmF5KFtbJ2EnLCAneScsICdiJ10sCiAgICAgICAgICAgICAgICAgIFsnYicsICd5JywgJ2EnXSwKICAgICAgICAgICAgICAgICAgWydhJywgJ3knLCAnYyddLAogICAgICAgICAgICAgICAgICBbJ2MnLCAneScsICdhJ10sCiAgICAgICAgICAgICAgICAgIFsnYScsICd5JywgJ2QnXSwKICAgICAgICAgICAgICAgICAgWydjJywgJ3knLCAnZCddLAogICAgICAgICAgICAgICAgICBbJ2InLCAneScsICdjJ10sCiAgICAgICAgICAgICAgICAgIFsnZicsICd5JywgJ2UnXV0pCiAgICBtb2RlbC5maXQoWCkKICAgIG1vZGVsLmdldF9lbWJlZGRpbmdzKFsnYScsICdiJ10sIGVtYmVkZGluZ190eXBlPSdlbnRpdHknKQoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZXI9J2FkYWdyYWQnLCBvcHRpbWl6ZXJfcGFyYW1zPXsnbHInOjAuMX0pCjx8ZmltX2VuZHw+"]
["2685b96bc09c63c3c272e2a535f27737935bbecf-1","2685b96bc09c63c3c272e2a535f27737935bbecf","PHxmaW1fcHJlZml4fD4KJycnCiAgICBDSEFQVEVSIFRXTwogICAgICAgIEVuZC10by1FbmQgTWFjaGluZSBMZWFybmluZyBQcm9qZWN0CiAgICAgICAgMS4gTG9vayBhdCB0aGUgYmlnIHBpY3R1cmUuCiAgICAgICAgMi4gR2V0IHRoZSBkYXRhLgogICAgICAgIDMuIERpc2NvdmVyIGFuZCB2aXN1YWxpemUgdGhlIGRhdGEgdG8gZ2FpbiBpbnNpZ2h0cy4KICAgICAgICA0LiBQcmVwYXJlIHRoZSBkYXRhIGZvciBNYWNoaW5lIExlYXJuaW5nIGFsZ29yaXRobXMuCiAgICAgICAgNS4gU2VsZWN0IGEgbW9kZWwgYW5kIHRyYWluIGl0LgogICAgICAgIDYuIEZpbmUtdHVuZSB5b3VyIG1vZGVsLgogICAgICAgIDcuIFByZXNlbnQgeW91ciBzb2x1dGlvbi4KICAgICAgICA4LiBMYXVuY2gsIG1vbml0b3IsIGFuZCBtYWludGFpbiB5b3VyIHN5c3RlbS4KCiAgICAtIFVzaW5nIEVOVjAwX0hBTkRTT05fTUxfU0NJS0lUTEVBUk5fS0VSQVNfVEVOU09SRkxPVyAtRW52aXJvbm1lbnQgUHl0aG9uIDMuNy54IE1hY1BybwonJycKCiMgV2Ugd2lsbCB1c2Ugd2UgY2hvc2UgdGhlIENhbGlmb3JuaWEgSG91c2luZyBQcmljZXMgZGF0YXNldCBmcm9tIHRoZSBTdGF0TGliIHJlcG9zaXRvcnkKCicnJwogICAgICAgIFdlbGNvbWUgdG8gTWFjaGluZSBMZWFybmluZyBIb3VzaW5nIENvcnBvcmF0aW9uISBUaGUgZmlyc3QgdGFzayB5b3UgYXJlIGFza2VkIHRvIHBlcmZvcm0gaXMgdG8gYnVpbGQgYSBtb2RlbCBvZiBob3VzaW5nIHByaWNlcyBpbiBDYWxpZm9ybmlhIHVzaW5nIHRoZSBDYWxpZm9ybmlhIGNlbuKAkCBzdXMgZGF0YS4gVGhpcyBkYXRhIGhhcyBtZXRyaWNzIHN1Y2ggYXMgdGhlIHBvcHVsYXRpb24sIG1lZGlhbiBpbmNvbWUsIG1lZGlhbiBob3VzaW5nIHByaWNlLCBhbmQgc28gb24gZm9yIGVhY2ggYmxvY2sgZ3JvdXAgaW4gQ2FsaWZvcm5pYS4gQmxvY2sgZ3JvdXBzIGFyZSB0aGUgc21hbGxlc3QgZ2VvZ3JhcGhpY2FsIHVuaXQgZm9yIHdoaWNoIHRoZSBVUyBDZW5zdXMgQnVyZWF1IHB1Ymxpc2hlcyBzYW1wbGUgZGF0YSAoYSBibG9jayBncm91cCB0eXBpY2FsbHkgaGFzIGEgcG9wdWxhdGlvbiBvZiA2MDAgdG8gMywwMDAgcGVvcGxlKS4gV2Ugd2lsbCBqdXN0IGNhbGwgdGhlbSDigJxkaXN0cmljdHPigJ0gZm9yIHNob3J0LgogICAgICAgIFlvdXIgbW9kZWwgc2hvdWxkIGxlYXJuIGZyb20gdGhpcyBkYXRhIGFuZCBiZSBhYmxlIHRvIHByZWRpY3QgdGhlIG1lZGlhbiBob3VzaW5nIHByaWNlIGluIGFueSBkaXN0cmljdCwgZ2l2ZW4gYWxsIHRoZSBvdGhlciBtZXRyaWNzLgonJycKCiMgU3RlcCAyCgonJycKICAgICAgICBPa2F5LCB3aXRoIGFsbCB0aGlzIGluZm9ybWF0aW9uIHlvdSBhcmUgbm93IHJlYWR5IHRvIHN0YXJ0IGRlc2lnbmluZyB5b3VyIHN5c3RlbS4gRmlyc3QsIHlvdSBuZWVkIHRvIGZyYW1lIHRoZSBwcm9ibGVtOiBpcyBpdCBzdXBlcnZpc2VkLCB1bnN1cGVydmlzZWQsIG9yIFJlaW5mb3JjZeKAkCBtZW50IExlYXJuaW5nPyBJcyBpdCBhIGNsYXNzaWZpY2F0aW9uIHRhc2ssIGEgcmVncmVzc2lvbiB0YXNrLCBvciBzb21ldGhpbmcgZWxzZT8gU2hvdWxkIHlvdSB1c2UgYmF0Y2ggbGVhcm5pbmcgb3Igb25saW5lIGxlYXJuaW5nIHRlY2huaXF1ZXM/IEJlZm9yZSB5b3UgcmVhZCBvbiwgcGF1c2UgYW5kIHRyeSB0byBhbnN3ZXIgdGhlc2UgcXVlc3Rpb25zIGZvciB5b3Vyc2VsZi4KICAgICAgICBIYXZlIHlvdSBmb3VuZCB0aGUgYW5zd2Vycz8gTGV04oCZcyBzZWU6IGl0IGlzIGNsZWFybHkgYSB0eXBpY2FsIHN1cGVydmlzZWQgbGVhcm5pbmcgdGFzayBzaW5jZSB5b3UgYXJlIGdpdmVuIGxhYmVsZWQgdHJhaW5pbmcgZXhhbXBsZXMgKGVhY2ggaW5zdGFuY2UgY29tZXMgd2l0aCB0aGUgZXhwZWN0ZWQgb3V0cHV0LCBpLmUuLCB0aGUgZGlzdHJpY3TigJlzIG1lZGlhbiBob3VzaW5nIHByaWNlKS4gTW9yZW92ZXIsIGl0IGlzIGFsc28gYSB0eXBpY2FsIHJlZ3Jlc+KAkCBzaW9uIHRhc2ssIHNpbmNlIHlvdSBhcmUgYXNrZWQgdG8gcHJlZGljdCBhIHZhbHVlLiBNb3JlIHNwZWNpZmljYWxseSwgdGhpcyBpcyBhIG11bHRpcGxlIHJlZ3Jlc3Npb24gcHJvYmxlbSBzaW5jZSB0aGUgc3lzdGVtIHdpbGwgdXNlIG11bHRpcGxlIGZlYXR1cmVzIHRvIG1ha2UgYSBwcmVkaWN0aW9uIChpdCB3aWxsIHVzZSB0aGUgZGlzdHJpY3TigJlzIHBvcHVsYXRpb24sIHRoZSBtZWRpYW4gaW5jb21lLCBldGMuKS4gSXQgaXMgYWxzbyBhIHVuaXZhcmlhdGUgcmVncmVzc2lvbiBwcm9ibGVtIHNpbmNlIHdlIGFyZSBvbmx5IHRyeWluZyB0byBwcmVkaWN0IGEgc2luZ2xlIHZhbHVlIGZvciBlYWNoIGRpc3RyaWN0LiBJZiB3ZSB3ZXJlIHRyeWluZyB0byBwcmVkaWN0IG11bHRpcGxlIHZhbHVlcyBwZXIgZGlzdHJpY3QsIGl0IHdvdWxkIGJlIGEgbXVsdGl2YXJpYXRlIHJlZ3Jlc3Npb24gcHJvYmxlbS4gRmluYWxseSwgdGhlcmUgaXMgbm8gY29udGludW91cyBmbG93IG9mIGRhdGEgY29taW5nIGluIHRoZSBzeXN0ZW0sIHRoZXJlIGlzIG5vIHBhcnRpY3VsYXIgbmVlZCB0byBhZGp1c3QgdG8gY2hhbmdpbmcgZGF0YSByYXBpZGx5LCBhbmQgdGhlIGRhdGEgaXMgc21hbGwgZW5vdWdoIHRvIGZpdCBpbiBtZW1vcnksIHNvIHBsYWluIGJhdGNoIGxlYXJuaW5nIHNob3VsZCBkbyBqdXN0IGZpbmUuCicnJwoKaW1wb3J0IG9zCjx8ZmltX2hvbGV8PgppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKCmZyb20gemxpYiBpbXBvcnQgY3JjMzIgICAjIFRoaXMgbGlicmFyeSB0byBjcmVhdGUgYSBoYXNoIGlkZW50aWZpZXIgdG8gbm90IHJlcGVhdCBvdXIgdHJhaW5pbmcgc2V0CmZyb20gc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24gaW1wb3J0IHRyYWluX3Rlc3Rfc3BsaXQKCkRPV05MT0FEX1JPT1QgPSAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2FnZXJvbi9oYW5kc29uLW1sMi9tYXN0ZXIvIgpIT1VTSU5HX1BBVEggPSBvcy5wYXRoLmpvaW4oImRhdGFzZXRzIiwgImhvdXNpbmciKQpIT1VTSU5HX1VSTCA9IERPV05MT0FEX1JPT1QgKyAiZGF0YXNldHMvaG91c2luZy9ob3VzaW5nLnRneiIKCmRlZiBmZXRjaF9ob3VzaW5nX2RhdGEoaG91c2luZ191cmw9SE9VU0lOR19VUkwsIGhvdXNpbmdfcGF0aD1IT1VTSU5HX1BBVEgpOgogICAgaWYgbm90IG9zLnBhdGguaXNkaXIoaG91c2luZ19wYXRoKToKICAgICAgICBvcy5tYWtlZGlycyhob3VzaW5nX3BhdGgpCiAgICB0Z3pfcGF0aCA9IG9zLnBhdGguam9pbihob3VzaW5nX3BhdGgsICJob3VzaW5nLnRneiIpCiAgICB1cmxsaWIucmVxdWVzdC51cmxyZXRyaWV2ZShob3VzaW5nX3VybCwgdGd6X3BhdGgpCiAgICBob3VzaW5nX3RneiA9IHRhcmZpbGUub3Blbih0Z3pfcGF0aCkKICAgIGhvdXNpbmdfdGd6LmV4dHJhY3RhbGwocGF0aCA9IGhvdXNpbmdfcGF0aCkKICAgIGhvdXNpbmdfdGd6LmNsb3NlKCkKCmltcG9ydCBwYW5kYXMgYXMgcGQKCmRlZiBsb2FkX2hvdXNpbmdfZGF0YShob3VzaW5nX3BhdGggPSBIT1VTSU5HX1BBVEgpOgogICAgY3N2X3BhdGggPSBvcy5wYXRoLmpvaW4oaG91c2luZ19wYXRoLCAiaG91c2luZy5jc3YiKQogICAgcmV0dXJuIHBkLnJlYWRfY3N2KGNzdl9wYXRoKQoKCmRlZiBIb3VzaW5nX2hpc3QoKToKICAgIGhvdXNpbmcuaGlzdChiaW5zPTUwLCBmaWdzaXplPSgyMCwxNSkpCiAgICBwbHQuc2hvdygpCgoKIyBDcmVhdGUgYSBUZXN0IFNldApkZWYgc3BsaXRfdHJhaW5fdGVzdChkYXRhLHRlc3RfcmF0aW8pOgogICAgc2h1ZmZsZWRfaW5kaWNlcyA9IG5wLnJhbmRvbS5wZXJtdXRhdGlvbihsZW4oZGF0YSkpCiAgICB0ZXN0X3NldF9zaXplICAgID0gaW50KGxlbihkYXRhKSAqIHRlc3RfcmF0aW8pCiAgICB0ZXN0X2luZGljZXMgICAgID0gc2h1ZmZsZWRfaW5kaWNlc1s6dGVzdF9zZXRfc2l6ZV0KICAgIHRyYWluX2luZGljZXMgICAgPSBzaHVmZmxlZF9pbmRpY2VzW3Rlc3Rfc2V0X3NpemU6XQogICAgcmV0dXJuIGRhdGEuaWxvY1t0cmFpbl9pbmRpY2VzXSwgZGF0YS5pbG9jW3Rlc3RfaW5kaWNlc10KCgpkZWYgdGVzdF9zZXRfY2hlY2soaWRlbnRpZmllciwgdGVzdF9yYXRpbyk6CiAgICByZXR1cm4gY3JjMzIobnAuaW50NjQoaWRlbnRpZmllcikpICYgMHhmZmZmZmZmZiA8IHRlc3RfcmF0aW8gKiAyKiozMgoKZGVmIHNwbGl0X3RyYWluX3Rlc3RfYnlfaWQoZGF0YSwgdGVzdF9yYXRpbywgaWRfY29sdW1uKToKICAgIGlkcyA9IGRhdGFbaWRfY29sdW1uXQogICAgaW5fdGVzdF9zZXQgPSBpZHMuYXBwbHkobGFtYmRhIGlkXzogdGVzdF9zZXRfY2hlY2soaWRfLCB0ZXN0X3JhdGlvKSkKICAgIHJldHVybiBkYXRhLmxvY1t+aW5fdGVzdF9zZXRdLCBkYXRhLmxvY1tpbl90ZXN0X3NldF0KCmRlZiBlbnN1cmVfb3VyX2RhdGFzZXRfbm9fcmVwZXRpdGlvbihkYXRhKToKICAgIHByaW50KCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKQogICAgcHJpbnQoIj09PT09PT0gQWRkaW5nIGEgSGFzaGluZyBEYXRhIHRvIHByZXZlbnQgZnJvbSB1c2luZyBzYW1lIHRlc3Rpbmcgc2V0ID09PT09PT09PSIpCiAgICBwcmludCgiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IikKICAgIGhvdXNpbmdfd2l0aF9pZCA9IGRhdGEucmVzZXRfaW5kZXgoKSAjIGFkZHMgYW4gYGluZGV4YCBjb2x1bW4KICAgIHRyYWluX3NldCwgdGVzdF9zZXQgPSBzcGxpdF90cmFpbl90ZXN0X2J5X2lkKGhvdXNpbmdfd2l0aF9pZCwgMC4yLCAiaW5kZXgiKQogICAgIyBUaGlzIGlzIHRoZSBtb3N0IHN0YWJsZSBtZXRob2Qgd2l0aCBpZGVudGlmZXIgY29sdW1uIHNpbmNlIHdlIGRvbid0IGhhdmUgYmVmb3JlCiAgICBob3VzaW5nX3dpdGhfaWRbImlkIl0gPSBkYXRhWyJsb25naXR1ZGUiXSAqIDEwMDAgKyBkYXRhWyJsYXRpdHVkZSJdCiAgICB0cmFpbl9zZXQsIHRlc3Rfc2V0ID0gc3BsaXRfdHJhaW5fdGVzdF9ieV9pZChob3VzaW5nX3dpdGhfaWQsIDAuMiwgImlkIikKICAgIHByaW50KCJPcmlnaW5hbCBEYXRhIHNldCIpCiAgICBwcmludChob3VzaW5nX3dpdGhfaWQpCiAgICBwcmludCgiVHJhaW5pbmcgc2V0IikKICAgIHByaW50KHRyYWluX3NldCkKICAgIHByaW50KCJUZXN0aW5nIHNldCIpCiAgICBwcmludCh0ZXN0X3NldCkKCgpkZWYgc3BsaXRpbmdfYW5vdGhlcl9tZXRob2RfZnJvbV9za2xlYXJuKGRhdGEpOgogICAgcHJpbnQoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpCiAgICBwcmludCgiPT09PT09PT09PT09PT09PSBTUExJVElORyBVU0lORyBTS0xFQVJOIExJQlJBUlkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IikKICAgIHByaW50KCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKQogICAgIyBIZXJlIHlvdSB3aWxsIG5lZWQgc2tsZWFybi5tb2RlbF9zZWxlY3Rpb24KICAgIHRyYWluX3NldCwgdGVzdF9zZXQgPSB0cmFpbl90ZXN0X3NwbGl0KGRhdGEsIHRlc3Rfc2l6ZSA9IDAuMiwgcmFuZG9tX3N0YXRlID0gNDIpCiAgICBwcmludCgiT3JpZ2luYWwgRGF0YSBzZXQiKQogICAgcHJpbnQoZGF0YSkKICAgIHByaW50KCJUcmFpbmluZyBzZXQiKQogICAgcHJpbnQodHJhaW5fc2V0KQogICAgcHJpbnQoIlRlc3Rpbmcgc2V0IikKICAgIHByaW50KHRlc3Rfc2V0KQoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIGZldGNoX2hvdXNpbmdfZGF0YSgpCiAgICBob3VzaW5nID0gbG9hZF9ob3VzaW5nX2RhdGEoKQogICAgI3ByaW50KGhvdXNpbmcuaGVhZCgpKQogICAgI3ByaW50KGhvdXNpbmcuaW5mbygpKQogICAgI3ByaW50KGhvdXNpbmdbJ29jZWFuX3Byb3hpbWl0eSddLnZhbHVlX2NvdW50cygpKQogICAgI0hvdXNpbmdfaGlzdCgpCiAgICB0cmFpbl9zZXQsIHRlc3Rfc2V0ID0gc3BsaXRfdHJhaW5fdGVzdChob3VzaW5nLCAwLjIpCiAgICBwcmludChmIlRoZSBzaXplIG9mIHRyYWluaW5nIHNldCBpcyA9IHtsZW4odHJhaW5fc2V0KX0gYW5kIHRoZSBzaXplIG9mIHRlc3Qgc2V0IGlzID0ge2xlbih0ZXN0X3NldCl9IikKICAgICNlbnN1cmVfb3VyX2RhdGFzZXRfbm9fcmVwZXRpdGlvbihob3VzaW5nKQogICAgc3BsaXRpbmdfYW5vdGhlcl9tZXRob2RfZnJvbV9za2xlYXJuKGhvdXNpbmcpCiAgICAjIDU2IHwgQ2hhcHRlciAyOiBFbmQtdG8tRW5kIE1hY2hpbmUgTGVhcm5pbmcgUHJvamVjdAo8fGZpbV9zdWZmaXh8PgppbXBvcnQgdGFyZmlsZQpmcm9tIHNpeC5tb3ZlcyBpbXBvcnQgdXJsbGliCgppbXBvcnQgbnVtcHkgYXMgbnAKPHxmaW1fZW5kfD4="]
["3978a1e70fdc165ec51fd62242f3ee05df0b2e45-3","3978a1e70fdc165ec51fd62242f3ee05df0b2e45","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKCm51bXMgPSBbOSw2LDQsMiwzLDUsNywwLDFdCgojIFNvcnRpbmcgICBUaW1lOiBPKG5sb2duKSAgU3BhY2U6IE8oMSkKZGVmIG1pc3NpbmdOdW1iZXJTb3J0aW5nKG51bXM6IExpc3RbaW50XSkgLT4gaW50OgogICAgbnVtcy5zb3J0KCkKICAgIGlmIG51bXNbLTFdICE9IGxlbihudW1zKToKICAgICAgICByZXR1cm4gbGVuKG51bXMpCiAgICBlbGlmIG51bXNbMF0gIT0gMDoKICAgICAgICByZXR1cm4gMAogICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKG51bXMpKTogCiAgICAgICAgZXhwZWN0ZWRfbnVtID0gbnVtc1tpLTFdICsgMSAKICAgICAgICBpZiBudW1zW2ldICE9IGV4cGVjdGVkX251bTogCiAgICAgICAgICAgIHJldHVybiBleHBlY3RlZF9udW0KCiMgSGFzaHNldCAgIFRpbWU6IE8obikgIFNwYWNlOiBPKG4pCmRlZiBtaXNzaW5nTnVtYmVySGFzaFNldChudW1zOiBMaXN0W2ludF0pIC0+IGludDoKICAgIG51bXNfc2V0ID0gc2V0KG51bXMpCiAgICBmb3IgbnVtYmVyIGluIHJhbmdlKGxlbihudW1zKSArIDEpOiAKICAgICAgICBpZiBudW1iZXIgbm90IGluIG51bXNfc2V0OiAKICAgICAgICAgICAgcmV0dXJuIG51bWJlcgoKIyBYT1IgICAgICAgVGltZTogTyhuKSAgU3BhY2U6IE8oMSkKZGVmIG1pc3NpbmdOdW1iZXJYT1IobnVtczogTGlzdFtpbnRdKSAtPiBpbnQ6IAogICAgbWlzc2luZyA9IGxlbihudW1zKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBmb3IgaSwgbnVtIGluIGVudW1lcmF0ZShudW1zKTogCiAgICAgICAgbWlzc2luZyBePSBpIF4gbnVtCiAgICByZXR1cm4gbWlzc2luZwoKPHxmaW1fZW5kfD4="]
["3978a1e70fdc165ec51fd62242f3ee05df0b2e45-5","3978a1e70fdc165ec51fd62242f3ee05df0b2e45","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKCm51bXMgPSBbOSw2LDQsMiwzLDUsNywwLDFdCgojIFNvcnRpbmcgICBUaW1lOiBPKG5sb2duKSAgU3BhY2U6IE8oMSkKZGVmIG1pc3NpbmdOdW1iZXJTb3J0aW5nKG51bXM6IExpc3RbaW50XSkgLT4gaW50OgogICAgbnVtcy5zb3J0KCkKICAgIGlmIG51bXNbLTFdICE9IGxlbihudW1zKToKICAgICAgICByZXR1cm4gbGVuKG51bXMpCiAgICBlbGlmIG51bXNbMF0gIT0gMDoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJldHVybiAwCjx8ZmltX2VuZHw+"]
["39bc0a1f250c1cd242552cd8c0555791cb44ed46-2","39bc0a1f250c1cd242552cd8c0555791cb44ed46","PHxmaW1fcHJlZml4fD4KciIiIgpSaWJib25zCiIiIgojKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIyAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWlrZSBIYW5zZW4gPG1oYW5zZW5AZ21haWwuY29tPiwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojCiMgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkKIwojICAgIFRoaXMgY29kZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo8fGZpbV9lbmR8Pg=="]
["e471b910e2c0f711c673b225ed234f276dede294-2","e471b910e2c0f711c673b225ed234f276dede294","PHxmaW1fcHJlZml4fD4KZnJvbSBrZXJhc19kaW5nIGltcG9ydCBEaW5nCmZyb20ga2VyYXNfZGluZy51dGlscyBpbXBvcnQgSW52aXNpYmxlQXVkaW8KCgpkZWYgdGVzdF9pbnZpc2libGVfYXVkaW8oKToKICAgIEludmlzaWJsZUF1ZGlvKERpbmcoKS5fcGF0aCkucGxheSgpCiAgICBJbnZpc2libGVBdWRpbyhEaW5nKCkuX3BhdGgpLl9yZXByX2h0bWxfKCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgSW52aXNpYmxlQXVkaW8oRGluZygicmFuZG9tIikuX3BhdGgpLl9yZXByX2h0bWxfKCkKICAgIGZvciBzYW1wbGUgaW4gRGluZy5hdmFpbGFibGVfc2FtcGxlczoKICAgICAgICBJbnZpc2libGVBdWRpbyhEaW5nKHNhbXBsZSkuX3BhdGgpLnBsYXkoKQo8fGZpbV9lbmR8Pg=="]
["84616cb7bf3c9de03b17d04a7721b7fa4bd7c3d9-1","84616cb7bf3c9de03b17d04a7721b7fa4bd7c3d9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Lm1vY2sKCmltcG9ydCBweXRlc3QKaW1wb3J0IHRyaW8KCmZyb20gYXR0YWNrX3N1cmZhY2VfcHlweS5jb3JlIGltcG9ydCB1dGlscwoKCjx8ZmltX2hvbGV8PgogICAgICAgIHlpZWxkIGZhaWxfYWZ0ZXJfbW9jawoKCmRlZiB0ZXN0X3RpbWVvdXRfY29udGV4dF9tYW5hZ2VyX2FjdHVhbGx5X2NhbGxzX3RyaW9fbWV0aG9kKGZhaWxfYWZ0ZXJfbW9jayk6CiAgICB0aW1lb3V0X3NlbnRpbmVsID0gLTEKCiAgICB3aXRoIHV0aWxzLnRpbWVvdXQodGltZW91dF9zZW50aW5lbCk6CiAgICAgICAgLi4uCiAgICBmYWlsX2FmdGVyX21vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgodGltZW91dF9zZW50aW5lbCkKCgpkZWYgdGVzdF90aW1lb3V0X2NvbnRleHRfbWFuYWdlcl9yYWlzZXNfdGltZW91dF9lcnJvcl9pZl90b29fc2xvd19lcnJvcl9vY2N1cnJlZChmYWlsX2FmdGVyX21vY2spOgogICAgZmFpbF9hZnRlcl9tb2NrKCkuX19lbnRlcl9fLnNpZGVfZWZmZWN0ID0gdHJpby5Ub29TbG93RXJyb3IoKQogICAgd2l0aCBweXRlc3QucmFpc2VzKFRpbWVvdXRFcnJvcik6CiAgICAgICAgd2l0aCB1dGlscy50aW1lb3V0KC0xKToKICAgICAgICAgICAgLi4uCjx8ZmltX3N1ZmZpeHw+CkBweXRlc3QuZml4dHVyZQpkZWYgZmFpbF9hZnRlcl9tb2NrKCk6CiAgICBmYWlsX2FmdGVyX21vY2sgPSB1bml0dGVzdC5tb2NrLk1hZ2ljTW9jayhuYW1lPSd0cmlvLW1vY2snKQogICAgd2l0aCB1bml0dGVzdC5tb2NrLnBhdGNoKCdhdHRhY2tfc3VyZmFjZV9weXB5LmNvcmUudXRpbHMudHJpby5mYWlsX2FmdGVyJywgZmFpbF9hZnRlcl9tb2NrKToKPHxmaW1fZW5kfD4="]
["3e7195bb715234b8f272d88abe18f7ff4f335f89-2","3e7195bb715234b8f272d88abe18f7ff4f335f89","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCgoKZGVmIHRvcF9sZXNzb25zX2pzb24ocGFnZSk6CiAgICByZXR1cm4gcmVxdWVzdHMuZ2V0KCJodHRwczovL3N0ZXBpay5vcmc6NDQzL2FwaS90b3AtbGVzc29ucz9wYWdlPXt9Ii5mb3JtYXQocGFnZSkpLmpzb24oKQoKCmRlZiB0b3BfbGVzc29uc19pbmRpY2VzKCk6CiAgICBpZHhzID0gW10KICAgIGN1cl9wYWdlID0gMQoKICAgIHdoaWxlIFRydWU6CiAgICAgICAgciA9IHRvcF9sZXNzb25zX2pzb24oY3VyX3BhZ2UpCgogICAgICAgIGZvciB0b3BfbGVzc29uIGluIHJbInRvcC1sZXNzb25zIl06CiAgICAgICAgICAgIGlkeHMuYXBwZW5kKHRvcF9sZXNzb25bImxlc3NvbiJdKQoKICAgICAgICBpZiBub3QgclsibWV0YSJdWyJoYXNfbmV4dCJdOgogICAgICAgICAgICBicmVhawoKICAgICAgICBjdXJfcGFnZSArPSAxCgogICAgcmV0dXJuIGlkeHMKCgpkZWYgbGVzc29uX2luZm8oaWR4KToKICAgIHIgPSByZXF1ZXN0cy5nZXQoImh0dHBzOi8vc3RlcGlrLm9yZzo0NDMvYXBpL2xlc3NvbnMve30iLmZvcm1hdChpZHgpKS5qc29uKCkKICAgIGxlc3NvbiA9IHJbImxlc3NvbnMiXVswXQoKICAgIHJldHVybiBsZXNzb25bInRpdGxlIl0sIGxlc3Nvblsidmlld2VkX2J5Il0sIGxlc3NvblsicGFzc2VkX2J5Il0KCgpkZWYgZ2VuZXJhdGVfaHRtbCh0b3BfbGVzc29ucyk6CiAgICBodG1sX2NvbnRhaW5lciA9IFtdCgogICAgaGVhZGVyID0gIiIiCiAgICA8IURPQ1RZUEUgaHRtbD4KICAgIDxodG1sPgogICAgPGhlYWQ+CiAgICAgICAgPG1ldGEgY2hhcnNldD11dGYtOCAvPgogICAgICAgIDx0aXRsZT5Ub3AgbGVzc29ucyBzb3J0ZWQgYnkgbnVtYmVyIG9mIHZpZXdzPC90aXRsZT4KICAgIDwvaGVhZD4KICAgICIiIgogICAgaHRtbF9jb250YWluZXIuYXBwZW5kKGhlYWRlcikKCiAgICBib2R5ID0gIiIiCiAgICA8Ym9keT4KICAgIDx0YWJsZSBib3JkZXIgPSAnMScgYWxpZ24gPSAnY2VudGVyJz4KICAgICAgICA8dHI+Cjx8ZmltX2hvbGV8PgogICAgICAgIDwvdHI+CiAgICAiIiIKICAgIGh0bWxfY29udGFpbmVyLmFwcGVuZChib2R5KQoKICAgIGxlc3Nvbl90ZW1wbGF0ZSA9ICIiIgogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkPnswfTwvdGQ+CiAgICAgICAgICAgIDx0ZD57MX08L3RkPgogICAgICAgICAgICA8dGQ+ezJ9PC90ZD4KICAgICAgICA8L3RyPgogICAgIiIiCgogICAgZm9yIGxlc3NvbiBpbiB0b3BfbGVzc29uczoKICAgICAgICBodG1sX2NvbnRhaW5lci5hcHBlbmQobGVzc29uX3RlbXBsYXRlLmZvcm1hdCgqbGVzc29uKSkKCiAgICBmb290ZXIgPSAiIiIKICAgIDwvdGFibGU+CiAgICA8L2JvZHk+CiAgICA8L2h0bWw+CiAgICAiIiIKICAgIGh0bWxfY29udGFpbmVyLmFwcGVuZChmb290ZXIpCgogICAgcmV0dXJuICIiLmpvaW4oaHRtbF9jb250YWluZXIpCgoKZGVmIG1haW4oKToKICAgIGlkeHMgPSB0b3BfbGVzc29uc19pbmRpY2VzKCkKCiAgICB0b3BfbGVzc29ucyA9IFtdCgogICAgZm9yIGlkeCBpbiBpZHhzOgogICAgICAgIHRvcF9sZXNzb25zLmFwcGVuZChsZXNzb25faW5mbyhpZHgpKQoKICAgIHRvcF9sZXNzb25zID0gc29ydGVkKHRvcF9sZXNzb25zLCBrZXk9bGFtYmRhIHg6IHhbMV0sIHJldmVyc2U9VHJ1ZSkKCiAgICAjIEdlbmVyYXRlIGh0bWwgYW5kIHdyaXRlIGl0IHRvIGZpbGUKICAgIHdpdGggb3BlbigidG9wX2xlc3NvbnMuaHRtbCIsICJ3KyIpIGFzIGY6CiAgICAgICAgZi53cml0ZShnZW5lcmF0ZV9odG1sKHRvcF9sZXNzb25zKSkKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgPHRoPkNvdXJzZSB0aXRsZTwvdGg+CiAgICAgICAgICAgIDx0aD5WaWV3ZWQgYnk8L3RoPgogICAgICAgICAgICA8dGg+UGFzc2VkIGJ5PC90aD4KPHxmaW1fZW5kfD4="]
["e4d4eb969607c99f6bbf37f18d24cbdf19701b5c-1","e4d4eb969607c99f6bbf37f18d24cbdf19701b5c","PHxmaW1fcHJlZml4fD4KIiIiRGVjbGFyZSBBUEkgZW5kcG9pbnRzIGZvciB1c2VyIGFuZCBvcmdhbmlzYXRpb24gd2l0aCBEamFuZ28gUmVzdEZyYW1ld29yayB2aWV3c2V0cy4iIiIKZnJvbSBkamFuZ28uY29udHJpYi5hdXRoIGltcG9ydCBnZXRfdXNlcl9tb2RlbAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cgpmcm9tIHJlc3RfZnJhbWV3b3JrIGltcG9ydCB2aWV3c2V0cwpmcm9tIHJlc3RfZnJhbWV3b3JrLmRlY29yYXRvcnMgaW1wb3J0IGFjdGlvbgpmcm9tIHJlc3RfZnJhbWV3b3JrLnJlc3BvbnNlIGltcG9ydCBSZXNwb25zZQo8fGZpbV9lbmR8Pg=="]
["e42cac420f7b7f6876c0f93f1c0716b8681f7978-4","e42cac420f7b7f6876c0f93f1c0716b8681f7978","PHxmaW1fcHJlZml4fD4K77u/aW1wb3J0IG51bXB5IGFzIG5wCgoKZGVmIGdldG1heCh2KToKICAgICIiIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBSZXR1cm5zIHRoZSBtYXggZWxlbWVudCBvZiBhIHZlY3Rvci4gCiAgICBBbHNvIHJlcGxhY2VzIGFsbCBlbGVtZW50cyB8eHw+PW1heF94IGJ5IHNpZ24oeCltYXhfeC4KICAgICIiIgogICAgbWF4ID0gbnAubWF4KHYpCjx8ZmltX2VuZHw+"]
["6efcf16bd4e51000e201a3953fc95a4815d33ff7-2","6efcf16bd4e51000e201a3953fc95a4815d33ff7","PHxmaW1fcHJlZml4fD4KZGVmIGZhdG9yaWFsKG51bWJlcik6CglmYXRvcmlhbCA9IDEKCWZvciBpIGluIHJhbmdlKDIsIChudW1iZXIrMSkpOgo8fGZpbV9ob2xlfD4KCXJldHVybiBmYXRvcmlhbAoKbnVtYmVyID0gaW50KGlucHV0KCJEaWdpdGUgdW0gbnVtZXJvOiAiKSkKcHJpbnQoIk51bWVybyBkaWdpdGFkbzoge30uIi5mb3JtYXQobnVtYmVyKSkKcHJpbnQoIkZhdG9yaWFsIGRlc3RlIG51bWVybzoge30uIi5mb3JtYXQoZmF0b3JpYWwobnVtYmVyKSkpCjx8ZmltX3N1ZmZpeHw+CgkJZmF0b3JpYWwgPSBmYXRvcmlhbCAqIGkKCjx8ZmltX2VuZHw+"]
["f8766c8ddc7b4c6a91930fa2ad070c950d2c1e2d-1","f8766c8ddc7b4c6a91930fa2ad070c950d2c1e2d","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgZGF0ZXRpbWUKCmZyb20gcGVld2VlIGltcG9ydCAqCjx8ZmltX2hvbGV8PgoKREI9Tm9uZQoKCmRlZiBkYl9pbml0KCk6CiAgICBnbG9iYWwgREIKICAgIGlmIERCX0ZJTEUgaXMgTm9uZSBvciBsZW4oREJfRklMRSkgPT0gMDoKICAgICAgICByYWlzZSBFeGNlcHRpb24oIkRhdGFiYXNlIGZpbGUgaXMgaW52YWlsZDogJXMiICUgREJfRklMRSkKICAgIHV0aWxzLm1rZGlyX29mX2ZpbGUoREJfRklMRSkKICAgIERCID0gU3FsaXRlRGF0YWJhc2UoREJfRklMRSkKICAgIHJldHVybiBEQgoKCmNsYXNzIEJhc2VNb2RlbChNb2RlbCk6CiAgICBjbGFzcyBNZXRhOgogICAgICAgIGRhdGFiYXNlID0gZGJfaW5pdCgpCgoKY2xhc3MgUWVtdVZNKEJhc2VNb2RlbCk6CiAgICBxZW11bmFtZSA9IFRleHRGaWVsZCh1bmlxdWU9VHJ1ZSkKICAgIG1lbW9yeSA9IEludGVnZXJGaWVsZCgpCiAgICBuY3B1ID0gSW50ZWdlckZpZWxkKCkKICAgIGltYWdlX3NpemUgPSBUZXh0RmllbGQoKQogICAgZGlzayA9IFRleHRGaWVsZCgpCiAgICBpZnVwX3NjcmlwdCA9IFRleHRGaWVsZCgpCiAgICBpZmRvd25fc2NyaXB0ID0gVGV4dEZpZWxkKCkKICAgIHFlbXVfcGlkZmlsZSA9IFRleHRGaWVsZCgpCiAgICBjb250cm9sbGVyX3NjcmlwdCA9IFRleHRGaWVsZCgpCiAgICBpZm1hYyA9IFRleHRGaWVsZCgpCiAgICB2bmNwb3J0ID0gSW50ZWdlckZpZWxkKCkKICAgIHV1aWQgPSBUZXh0RmllbGQoKQogICAgY3JlYXRlZF9kYXRlID0gRGF0ZVRpbWVGaWVsZChkZWZhdWx0PWRhdGV0aW1lLmRhdGV0aW1lLm5vdykKICAgIHFlbXVfcHJvZ3JhbSA9IFRleHRGaWVsZCgncWVtdS1zeXN0ZW0teDg2XzY0JykKICAgIGJyaWRnZSA9IFRleHRGaWVsZChkZWZhdWx0PSdicjAnKQoKCmNsYXNzIFZpcnRCTUMoQmFzZU1vZGVsKToKICAgIHZtID0gRm9yZWlnbktleUZpZWxkKFFlbXVWTSwgcmVsYXRlZF9uYW1lPSd2bScpCiAgICBibWNuYW1lID0gVGV4dEZpZWxkKHVuaXF1ZT1UcnVlKQogICAgbnVtYmVyID0gSW50ZWdlckZpZWxkKCkKICAgIHV1aWQgPSBUZXh0RmllbGQoKQogICAgdG11eF9uYW1lID0gVGV4dEZpZWxkKCkKICAgIGNyZWF0ZWRfZGF0ZSA9IERhdGVUaW1lRmllbGQoZGVmYXVsdD1kYXRldGltZS5kYXRldGltZS5ub3cpCiAgICBsaXN0ZW5fYWRkciA9IFRleHRGaWVsZChkZWZhdWx0PScxMjcuMC4wLjEnKQogICAgaXBtaV9wb3J0ID0gSW50ZWdlckZpZWxkKGRlZmF1bHQ9OTAwMSkKICAgIGZha2VfaXBtaV9tYWNfcG9ydCA9IFRleHRGaWVsZCgpCiAgICBzZXJpYWxfcG9ydCA9IEludGVnZXJGaWVsZChkZWZhdWx0PTkwMDIpCiAgICB0ZWxuZXRfcG9ydCA9IEludGVnZXJGaWVsZChkZWZhdWx0PTkwMDMpCiAgICBsYW5fY29uZmlnX3Byb2dyYW0gPSBUZXh0RmllbGQoKQogICAgY2hhc3Npc19jb250cm9sX3Byb2dyYW0gPSBUZXh0RmllbGQoKQogICAgaXBtaV9zaW0gPSBUZXh0RmllbGQoKQogICAgaXBtaV9jb25maWdfZmlsZSA9IFRleHRGaWVsZCgpCiAgICBzdGF0dXNfZmlsZSA9IFRleHRGaWVsZChkZWZhdWx0PScvdG1wL3ZibWNfcWVtdS5zdGF0dXMnKQogICAgaXBtaV9vcF9yZWNvcmRfZmlsZSA9IFRleHRGaWVsZCgpCiAgICBpcG1pdXNyID0gVGV4dEZpZWxkKCkKICAgIGlwbWlwYXNzID0gVGV4dEZpZWxkKCkKCgpkZWYgX2NyZWF0ZV90YWJsZXModGFibGVzKToKICAgIGdsb2JhbCBEQgogICAgREIuY3JlYXRlX3RhYmxlcyh0YWJsZXMpCgoKZGVmIGluaXRfZGIoKToKICAgIF9jcmVhdGVfdGFibGVzKFtWaXJ0Qk1DLCBRZW11Vk1dKQoKCmRlZiByZW1vdmVfZGIoKToKICAgIHV0aWxzLnJtZmlsZShEQl9GSUxFKQoKCmRlZiBtYW5hZ2UoYXJncyk6CiAgICBpZiBhcmdzLmluaXQ6CiAgICAgICAgaW5pdF9kYigpCiAgICBpZiBhcmdzLnJlbW92ZToKICAgICAgICByZW1vdmVfZGIoKQo8fGZpbV9zdWZmaXh8PgoKaW1wb3J0IHZpcnRibWMudXRpbHMgYXMgdXRpbHMKZnJvbSB2aXJ0Ym1jLmNvbmZpZyBpbXBvcnQgREJfRklMRQoKPHxmaW1fZW5kfD4="]
["3956c612a837cfca3ac9f6cd1e72cb8901b99b73-3","3956c612a837cfca3ac9f6cd1e72cb8901b99b73","PHxmaW1fcHJlZml4fD4KIyAtICogLSBjb2Rpbmc6IDx1dGYtOD4gLSAqIC0KCgojIFRoaXMgcHJvZ3JhbSBpcyB1c2VkIHRvIHByb2Nlc3MgVHdpdHRlciByYXcgZGF0YSwKIyBieSB1c2luZyBOTFRLIHRva2VuaXphdGlvbgoKaW1wb3J0IGNzdgppbXBvcnQgc3lzCmltcG9ydCBzdHJpbmcKZnJvbSBubHRrLmNvcnB1cyBpbXBvcnQgc3RvcHdvcmRzCmZyb20gbmx0ay50b2tlbml6ZSBpbXBvcnQgd29yZF90b2tlbml6ZQoKCiNyZWxvYWQoc3lzKQojc3lzLnNldGRlZmF1bHRlbmNvZGluZygndXRmLTgnKQoKCmRlZiBwcm9jZXNzRGF0YSgpOgogICAgc3RvcFdvcmRzID0gc3RvcHdvcmRzLndvcmRzKCdlbmdsaXNoJykKICAgIHB1bmN0dWF0aW9uID0gbGlzdChzdHJpbmcucHVuY3R1YXRpb24pCiAgICBzdG9wID0gc3RvcFdvcmRzICsgcHVuY3R1YXRpb24KICAgIHByZWZpeCA9ICgncnQnLCAnaHR0cHMnLCAiJyIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICB3aXRoIG9wZW4oJ3N0YXRpYy9Ud2l0dGVyRGF0YS5jc3YnLCAncicpIGFzIGNzdkZpbGUxOgogICAgICAgIHJlYWRPYmogPSBjc3YucmVhZGVyKGNzdkZpbGUxKQogICAgICAgIGNzdkZpbGUyID0gb3Blbignc3RhdGljL1Rva2VuaXphdGlvbi5jc3YnLCAndycpCjx8ZmltX2VuZHw+"]
["f80eaff9d279db136f12e94d299b0d1f05eebe15-3","f80eaff9d279db136f12e94d299b0d1f05eebe15","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCmltcG9ydCBvcwppbXBvcnQgbnVtcHkKZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBmaW5kX3BhY2thZ2VzLCBzZXR1cCwgRXh0ZW5zaW9uCmZyb20gQ3l0aG9uLkJ1aWxkIGltcG9ydCBjeXRob25pemUKCgpleHRlbnNpb25zID0gWwogICAgRXh0ZW5zaW9uKAogICAgICAgICJmYXN0X2Z1bmN0aW9ucy5oYXZlcnNpbmUiLCAKICAgICAgICBbImZhc3RfZnVuY3Rpb25zL2hhdmVyc2luZS5weXgiXSwKICAgICAgICBpbmNsdWRlX2RpcnM9W251bXB5LmdldF9pbmNsdWRlKCldCiAgICApLAogICAgRXh0ZW5zaW9uKAogICAgICAgICJmYXN0X2Z1bmN0aW9ucy5nZW9kZXNpYyIsIAogICAgICAgIFsiZmFzdF9mdW5jdGlvbnMvZ2VvZGVzaWMucHl4Il0sCiAgICAgICAgaW5jbHVkZV9kaXJzPVtudW1weS5nZXRfaW5jbHVkZSgpXQogICAgKQpdCgpwYWNrYWdlX25hbWUgPSAiZmFzdF9mdW5jdGlvbnMiCgpjb25maWcgPSB7CiAgICAibmFtZSI6IHBhY2thZ2VfbmFtZSwKICAgICJhdXRob3IiOiAiUnlhbiBDdWxsaWdhbiIsCiAgICAiYXV0aG9yX2VtYWlsIjogInJyY3VsbGlnYW5AZ21haWwuY29tIiwKICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL1RoZUN1bGxpZ2FuTWFuL2Zhc3QtZnVuY3Rpb25zIiwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgImRlc2NyaXB0aW9uIjogImZhc3QtZnVuY3Rpb25zIiwKICAgICJsb25nX2Rlc2NyaXB0aW9uIjogImZhc3QtZnVuY3Rpb25zIiwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAidmVyc2lvbiI6ICIwLjAuMSIsCjx8ZmltX2VuZHw+"]
["9d249c997cfd855f2c36543f3a446a79b56754c9-3","9d249c997cfd855f2c36543f3a446a79b56754c9","PHxmaW1fcHJlZml4fD4KIyBkcmF3IHRvIGRyYXdQaXhlbHMKIyBpZiBjYWxscyB0d28gb3ZlciwgbW9kaWZ5aW5nIHVzZXMgZm9yIHF1YWQKZnJvbSBPcGVuR0wuR0xVVCBpbXBvcnQgKgpmcm9tIE9wZW5HTC5HTFUgaW1wb3J0ICoKZnJvbSBPcGVuR0wuR0wgaW1wb3J0ICoKZnJvbSBQSUwgaW1wb3J0IEltYWdlCgppbXBvcnQgbnVtcHkKCgpjbGFzcyBUZXh0dXJlKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi50ZXhJZCA9IDAKICAgICAgICBzZWxmLmltYWdlID0gMAoKICAgIGRlZiBMb2FkVGV4dHVyZShzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgc2VsZi50ZXhJZCA9IGdsR2VuVGV4dHVyZXMoMSkKICAgICAgICByZXNvdXJjZXNSb290ID0gIlJlc291cmNlcy9JbWFnZS8iCjx8ZmltX2hvbGV8PgogICAgICAgIHRyeToKICAgICAgICAgICAgaW1hZ2VEYXRhID0gc2VsZi5pbWFnZS50b3N0cmluZygicmF3IiwgIlJHQkEiLCAwLCAtMSkKICAgICAgICBleGNlcHQgU3lzdGVtRXJyb3I6CiAgICAgICAgICAgIGltYWdlRGF0YSA9IHNlbGYuaW1hZ2UudG9zdHJpbmcoInJhdyIsICJSR0JYIiwgMCwgLTEpCgogICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgc2VsZi50ZXhJZCkKICAgICAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpCiAgICAgICAgcmVzdWx0ID0gZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIHNlbGYuaW1hZ2Uuc2l6ZVswXSwgc2VsZi5pbWFnZS5zaXplWzFdLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLAogICAgICAgICAgICAgICAgICAgICBpbWFnZURhdGEpCiAgICAgICAgaWYgcmVzdWx0ID09IEdMVV9JTlZBTElEX1ZBTFVFOgogICAgICAgICAgICBwcmludCAnR0xVIElOVkFMSUQgVkFMVUUgPT4gQ25naW5lOiAyNycKICAgICAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QKQogICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVApCiAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKQogICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUikKCgogICAgZGVmIFJlbW92ZVRleHR1cmUoc2VsZiwgZmlsZW5hbWUpOgogICAgICAgIHBhc3MKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmltYWdlID0gSW1hZ2Uub3BlbihyZXNvdXJjZXNSb290ICsgZmlsZW5hbWUpCiAgICAgICAgSW1hZ2VfRGF0YSA9IG51bXB5LmFycmF5KGxpc3Qoc2VsZi5pbWFnZS5nZXRkYXRhKCkpLCBudW1weS5pbnQ4KQogICAgICAgIHhzaXplID0gc2VsZi5pbWFnZS5zaXplWzBdICMgaW1hZ2Uuc2l6ZVswXSAtPiB4U2NhbGUKICAgICAgICB5c2l6ZSA9IHNlbGYuaW1hZ2Uuc2l6ZVsxXQo8fGZpbV9lbmR8Pg=="]
["9d320dd3d57ccce011cf902e948a1779e41d0263-1","9d320dd3d57ccce011cf902e948a1779e41d0263","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGRpc2NvcmQKZnJvbSBkaXNjb3JkLmV4dCBpbXBvcnQgY29tbWFuZHMKCmltcG9ydCBvcwppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHJhbmRvbQppbXBvcnQgcmUKaW1wb3J0IHJvb20gICAgICAjIG11bHRpcGxlIHNlcnZlci1jaGFubmVsIGluc3RhbmNlcwppbXBvcnQgYXN5bmNpbwppbXBvcnQgc3RhcnRlcnMgICMgcHJvbXB0IGxpc3RzCgp2ZXJzaW9uX3N0cmluZyA9ICcxLjExIEltcG9ydHMgbm93IGltcG9ydGluZycKZGVzY3JpcHRpb24gPSAnQW9pLCBCbHVlIEFuZ2VsIFdyaXRpbmcgQm90IChieSBxeXVsaS9zIzczNzcpXG52ZXIuICcgKyB2ZXJzaW9uX3N0cmluZwpib3RfcHJlZml4ID0gJzo6JwoKPHxmaW1faG9sZXw+CiAgICBwcmludCgnTG9naW4gc3VjY2Vzc2Z1bCwgdmVyc2lvbiB7fScuZm9ybWF0KHZlcnNpb25fc3RyaW5nKSkKICAgIHByaW50KCdOYW1lIDoge30nLmZvcm1hdChhb2kudXNlci5uYW1lKSkKICAgIHByaW50KCdJRCA6IHt9Jy5mb3JtYXQoYW9pLnVzZXIuaWQpKQogICAgcHJpbnQoZGF0ZXRpbWUuZGF0ZXRpbWUudXRjbm93KCkuc3RyZnRpbWUoIiVhICViICVkICVIOiVNOiVTIFVUQyAlWiAlWSIpKQogICAgcHJpbnQoZGlzY29yZC5fX3ZlcnNpb25fXykKCgpAYW9pLmV2ZW50CmFzeW5jIGRlZiBvbl9tZXNzYWdlKG1lc3NhZ2UpOgogICAgIyBwcmV2ZW50IHJlcGx5IHRvIHNlbGYKICAgIGlmIG1lc3NhZ2UuYXV0aG9yID09IGFvaS51c2VyOgogICAgICAgIHJldHVybgoKICAgICMgcHJldmVudCByZXBseSB0byBAZXZlcnlvbmUKICAgIGlmIG1lc3NhZ2UubWVudGlvbl9ldmVyeW9uZToKICAgICAgICByZXR1cm4KCiAgICAjIFJlc3BvbmQgdG8gb3duIG1lbnRpb25zCiAgICBpZiBhb2kudXNlci5tZW50aW9uZWRfaW4obWVzc2FnZSk6CiAgICAgICAgdGhhbmsgPSByZS5jb21waWxlKHInXGIodGhhbmtzKnx0eSh2bSkqfHRoeHx0aGFua3lvdSlcYicsIHJlLklHTk9SRUNBU0UpCiAgICAgICAgaWYgcmUuc2VhcmNoKHRoYW5rLCBtZXNzYWdlLmNsZWFuX2NvbnRlbnQpIGlzIG5vdCBOb25lOgogICAgICAgICAgICByYW5kID0gcmFuZG9tLnJhbmRpbnQoMCwxKQogICAgICAgICAgICBpZiByYW5kID09IDA6CiAgICAgICAgICAgICAgICBhd2FpdCBhb2kuYWRkX3JlYWN0aW9uKG1lc3NhZ2UsIHJhbmRvbS5jaG9pY2UoWydcVTAwMDFGNjE4JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFUwMDAwMjY2NScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xVMDAwMUY0OTUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcVTAwMDFGNDlEJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFUwMDAwMjc2MycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xVMDAwMUY0OEMnXSkpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBhd2FpdCBhb2kuc2VuZF9tZXNzYWdlKG1lc3NhZ2UuY2hhbm5lbCwgcmFuZG9tLmNob2ljZShbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1lvdVwncmUgYWJzb2x1dGVseSB3ZWxjb21lIVxVMDAwMDI2NjUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBbHdheXMuIFxVMDAwMUY2MTgnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcVTAwMDFGOTE2XFUwMDAxRjQ5NSddKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBhd2FpdCBhb2kuc2VuZF9tZXNzYWdlKG1lc3NhZ2UuY2hhbm5lbCwgcmFuZG9tLmNob2ljZShbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRGlkIHlvdSBjYWxsPycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRXZlcnlvbmUgYmVsaWV2ZXMgaW4gbWUuIFNvLCBJXCdsbCBmaWdodCBmb3IgZXZlcnlvbmUuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGdWxsIHNwZWVkIGFoZWFkIScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU29ycnksIHdoYXQgd2VyZSB5b3Ugc2F5aW5nIC4uLj8nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RvblwndCBnZXQgYWhlYWQgb2YgeW91cnNlbGYgbm93IC4uLicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFUwMDAxRjMxRlxVMDAwMUYzMUZcVTAwMDFGMzFGJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJIGhlYXIgdGhlIHNob3cgSVwnbSBmcm9tIGlzblwndCB3b3J0aCB3YXRjaGluZy5cblNvIHRoZW4gICAuLi4gd2hlbiBkb2VzIGl0IGJlY29tZSAqbXkqIHNob3cgLi4uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdgOjpoZWxwYCBpcyB3aGF0IHlvdVwncmUgYWZ0ZXIsIHN3ZWV0dW1zLicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSkKCiAgICAjIENvbnRpbnVlIHRvIHByb2Nlc3Mgbm9ybWFsIGJvdCBjb21tYW5kcwogICAgYXdhaXQgYW9pLnByb2Nlc3NfY29tbWFuZHMobWVzc2FnZSkKCiNpbmZvCkBhb2kuY29tbWFuZChwYXNzX2NvbnRleHQ9VHJ1ZSwgaGVscD0nR2V0dGluZyBTdGFydGVkIEd1aWRlISAod2FybmluZzogbG9uZyknKQphc3luYyBkZWYgYm90X2luZm8oY3R4KToKICAgIGF3YWl0IGFvaS5zYXkoIiIiSGlpaWlpaWksIGV2ZXJ5b25lISBCbHVlIEFuZ2VsIGlzIGhlcmUhClNvLCBsZXQncyBnZXQgc3RhcnRlZC4KCjpibHVlX2hlYXJ0OiAqKldvcmQgV2FycyoqIDpibHVlX2hlYXJ0OgpXYW50IHRvIGNoYWxsZW5nZSBwZW9wbGUgdG8gYSBkdWVsPyBUeXBlIGA6OmZpZ2h0IHN0YXJ0YCB0byBnZXQgYSByb29tIHNldCB1cC4KYDo6ZmlnaHQgam9pbmAgYWRkcyB5b3UgaW4gZm9yIG5vdGlmaWNhdGlvbnMgaWYgYSByb29tIGV4aXN0cyBpbiB0aGF0IGNoYW5uZWwhCgpUaGUgZGVmYXVsdCB0aW1pbmdzIGlzIGEgZGVsYXkgb2YgNSBtaW51dGVzIGFuZCBhIGR1cmF0aW9uIG9mIDE1LgpUeXBlIHVwIHRvIHR3byBudW1iZXJzIGFmdGVyIHRvIGNoYW5nZSB0aGUgZGVsYXkgYW5kIHRoZW4gdGhlIGR1cmF0aW9uLgpgOjpmaWdodCBzdGFydCAwYCBiZWdpbnMgYXQgb25jZSBhbmQgZ29lcyBmb3IgMTUhCmA6OmZpZ2h0IHN0YXJ0IDMgMjBgIHN0YXJ0cyBpbiAzIG1pbnV0ZXMgYW5kIGdvZXMgZm9yIDIwLgogIChTb3JyeSwgbm9uLWludGVnZXJzIGFyZW4ndCBhbGxvd2VkLikKCldoZW4gc3VibWl0dGluZyB5b3VyIHJlc3VsdCwgYDo6ZmlnaHQgcmVzdWx0IFtwcm9ncmVzcyAuLi5dYCAqZG9lcyogYWNjZXB0IG5vbi1udW1iZXIgYW5zd2VycyEKClVzZSBgOjpmaWdodCBjYW5jZWxgIGF0IGFueSB0aW1lIGlmIHlvdSBkZWNpZGUgaXQncyBub3QgZm9yIHlvdSB+CgoKOmJsdWVfaGVhcnQ6ICoqU3RhcnRlcnMqKiA6Ymx1ZV9oZWFydDoKU29+c28sIG5lZWQgc29tZXRoaW5nPyBUaGVzZSBhcmUgcmFuZG9tIHByb21wdHMuCgpgOjpzdGFydGVyIHdvcmRgIGZvciBhIHJhbmRvbSB3b3JkIQpgOjpzdGFydGVyIGRyZWFtYCB0byBiZSB2aXNpdGVkIGJ5IGEgbXlzdGVyeSAuLi4KYDo6c3RhcnRlciBvbWVuYCwgaWYgaXQncyBhbHdheXMgSGFsbG93ZWVuIH4KClR5cGUgYDo6aGVscCBzdGFydGVyYCB0byBzZWUgYWxsIHRoZSBvcHRpb25zIQoKCjpibHVlX2hlYXJ0OiAqKiggzaHCsCDNnMqWIM2hwrApKiogOmJsdWVfaGVhcnQ6CmA6Omxlbm55YApgOjpsZW5ueSAzYAoKVHJ5IGl0LiA7KQoKCjpibHVlX2hlYXJ0OjpibHVlX2hlYXJ0OjpibHVlX2hlYXJ0OgpVc2UgYDo6aGVscGAgZm9yIG1vcmUgZGV0YWlscywgYW5kIHNlbmQgYnVncy9mZWF0dXJlIHJlcXVlc3RzL2p1bmsgbWFpbCB0byBgcXl1bGkvcyM3Mzc3YC4gKEl0J3MgT0suIEknbSAqZmF2fm91cn5pdGV+KiBnaXJsIH5+LikKCnhveG8gOmhlYXJ0X2V4Y2xhbWF0aW9uOjpjYWxsX21lOjpjYWxsX21lOiIiIikKCiMgRnVuCkBhb2kuY29tbWFuZChwYXNzX2NvbnRleHQ9VHJ1ZSwgZGVzY3JpcHRpb249J1R5cGUgYSBudW1iZXIoIM2hwrAgzZzKliDNocKwKScpCmFzeW5jIGRlZiBsZW5ueShjdHgsIG4gOiBpbnQgPSAxKToKICAgIGlmIG4gPCAxMjoKICAgICAgICBtc2cgPSAnJwogICAgICAgIHJhbmQgPSByYW5kb20ucmFuZGludCgwLDIpCgogICAgICAgIGlmIHJhbmQgPT0gMDoKICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgICAgICAgICAgICBtc2cgKz0gJyAgICAnKmkgKyAnKCDNocKwIM2cypYgzaHCsClcbicKICAgICAgICBlbGlmIHJhbmQgPT0gMToKICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgICAgICAgICAgICBpZiBpIDw9IG4vMjoKICAgICAgICAgICAgICAgICAgICBtc2cgKz0gJyAgICAnKmkgKyAnKCDNocKwIM2cypYgzaHCsClcbicKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgbXNnICs9IChuLWkpKicgICAgJyArICcoIM2hwrAgzZzKliDNocKwKVxuJwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG4pOgogICAgICAgICAgICAgICAgaWYgaSAlIDMgPT0gMDoKICAgICAgICAgICAgICAgICAgICBtc2cgKz0gJyggzaHCsCDNnMqWIM2hwrApXG4nCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIG1zZyArPSAnICAgICAgICAgICcqcmFuZG9tLnJhbmRpbnQoMSw0KSArICcoIM2hwrAgzZzKliDNocKwKVxuJwoKICAgICAgICBhd2FpdCBhb2kuc2F5KG1zZykKCiAgICBlbHNlOgogICAgICAgIHRyeToKICAgICAgICAgICAgYXdhaXQgYW9pLnNheSgnKCDNocKwIM2cypYgzaHCsCkgICcgKiBuKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgYXdhaXQgYW9pLnNheSgnV29haCEgQnJlYWtpbmcgdGhhdCBjaGFyYWN0ZXIgbGltaXQoIM2hwrAgzZzKliDNocKwKScpCgoKIzo6cmFuZG9tIHdvcmQKQGFvaS5ncm91cChwYXNzX2NvbnRleHQ9VHJ1ZSwgaGVscD0nUGlja3MgZnJvbSBhIGxpc3QuIFN1Yi1jb21tYW5kIHJlcXVpcmVkLiAoOjpoZWxwIHN0YXJ0ZXIpJykKYXN5bmMgZGVmIHN0YXJ0ZXIoY3R4KToKICAgIGlmIGN0eC5pbnZva2VkX3N1YmNvbW1hbmQgaXMgTm9uZToKICAgICAgICBhd2FpdCBhb2kuc2F5KCdCZSBjbGVhcmVyISBgOjpoZWxwIHN0YXJ0ZXJgIHRvIHNlZSBvcHRpb25z4piGJykKCkBzdGFydGVyLmNvbW1hbmQocGFzc19jb250ZXh0PVRydWUsIGhlbHA9J1JhbmRvbSB3b3JkJykKYXN5bmMgZGVmIHdvcmQoY3R4KToKICAgIHcgPSBzdGFydGVycy5yYW5kX3dvcmQoKQogICAgYXdhaXQgYW9pLnNheSgnOnN0YXI6IC0gYHt9YCAtIDpzdGFyOicuZm9ybWF0KHcpKQoKQHN0YXJ0ZXIuY29tbWFuZChwYXNzX2NvbnRleHQ9VHJ1ZSkKYXN5bmMgZGVmIHByb21wdChjdHgpOgogICAgYXdhaXQgYW9pLnNheShzdGFydGVycy5yYW5kX3Byb21wdCgpKQoKQHN0YXJ0ZXIuY29tbWFuZChwYXNzX2NvbnRleHQ9VHJ1ZSwgaGVscD0nU2NpZW5jZSBmaWN0aW9uL2ZhbnRhc3knKQphc3luYyBkZWYgc2ZmKGN0eCk6CiAgICBhd2FpdCBhb2kuc2F5KHN0YXJ0ZXJzLnJhbmRfc2ZmKCkpCiAgICAKQHN0YXJ0ZXIuY29tbWFuZChwYXNzX2NvbnRleHQ9VHJ1ZSkKYXN5bmMgZGVmIG9tZW4oY3R4KToKICAgIGF3YWl0IGFvaS5zYXkoc3RhcnRlcnMucmFuZF9vbWVuKCkpCgpAc3RhcnRlci5jb21tYW5kKHBhc3NfY29udGV4dD1UcnVlLCBoZWxwPSdNeXN0ZXJ5IHRpdGxlcycpCmFzeW5jIGRlZiBkb3lsZShjdHgpOgogICAgYXdhaXQgYW9pLnNheShzdGFydGVycy5yYW5kX2RveWxlKCkpCgpAc3RhcnRlci5jb21tYW5kKHBhc3NfY29udGV4dD1UcnVlKQphc3luYyBkZWYgZHJlYW0oY3R4KToKICAgIGF3YWl0IGFvaS5zYXkoc3RhcnRlcnMucmFuZF9kcmVhbSgpKQoKQHN0YXJ0ZXIuY29tbWFuZChwYXNzX2NvbnRleHQ9VHJ1ZSwgaGVscD0nQ2l0eSBleHBsb3JlcicpCmFzeW5jIGRlZiBleHBsb3JlKGN0eCk6CiAgICBhd2FpdCBhb2kuc2F5KHN0YXJ0ZXJzLnJhbmRfZXhwbG9yZSgpKQoKQHN0YXJ0ZXIuY29tbWFuZChwYXNzX2NvbnRleHQ9VHJ1ZSkKYXN5bmMgZGVmIG1vb2QoY3R4KToKICAgIGF3YWl0IGFvaS5zYXkoc3RhcnRlcnMucmFuZF9tb29kKCkpCgogICAgCiMgV3JpdGUtRmlnaHQKQGFvaS5ncm91cChwYXNzX2NvbnRleHQ9VHJ1ZSwgaGVscD0nQmVnaW4gYSB3b3JkIHdhci4nKQphc3luYyBkZWYgZmlnaHQoY3R4KToKICAgIGlmIGN0eC5pbnZva2VkX3N1YmNvbW1hbmQgaXMgTm9uZToKICAgICAgICBhd2FpdCBhb2kuc2F5KHJhbmRvbS5jaG9pY2UoWydEaWQgeW91IHdhbnQgdG8gc3RhcnQgYSBmaWdodD8gU2F5IGA6OmZpZ2h0IHN0YXJ0YCwgTy1LPycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlcmVcJ3Mgbm8gZmlnaHQgb24gcmlnaHQgbm93LiBUcnkgYDo6ZmlnaHQgc3RhcnRgIGlmIHlvdSB3YW50ZWQgdG8gZ28hJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkpCgojIHN0YXJ0IGEgYmF0dGxlCkBmaWdodC5jb21tYW5kKHBhc3NfY29udGV4dD1UcnVlLCBoZWxwPSdbd2FpdD01XSBbZHVyYXRpb249MTVdJykKYXN5bmMgZGVmIHN0YXJ0KGN0eCwgd2FpdDppbnQ9NSwgZHVyYXRpb246aW50PTE1KToKICAgIG5vbmNlID0gcmFuZG9tLmdldHJhbmRiaXRzKDI0KQogICAgc3VjY2VzcyA9IHJvb20uc3RhcnQoY3R4LCBub25jZSkKICAgIAogICAgaWYgc3VjY2VzczoKICAgICAgICBhd2FpdCBhb2kuc2F5KHJhbmRvbS5jaG9pY2UoWydPLUssIGxldFwncyBnZXQgdGhpcyB3cml0ZS1maWdodCBzdGFydGVkIScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTGV0XCdzIGRvIHRoaXMsIGhlcmUgd2UgZ28hJ10pICsgJ1xuXG4qKkJlZ2lubmluZyBpbiB7fSBtaW51dGVzIGZvciB7fSBtaW51dGVzLioqIFR5cGUgYDo6ZmlnaHQgam9pbmAgdG8gZW50ZXIuJy5mb3JtYXQod2FpdCwgZHVyYXRpb24pKQogICAgICAgIHJvb20uYWRkX3BhcnRpY2lwYW50KGN0eCkKICAgICAgICBhd2FpdCBhc3luY2lvLnNsZWVwKHdhaXQqNjApCgogICAgICAgICMgY2hlY2sgaWYgZmlnaHQgaXMgc3RpbGwgYWN0aXZlIGFmdGVyIHdhaXQKICAgICAgICBpZiBub3Qgcm9vbS5hY3RpdmUoY3R4LCBub25jZSk6CiAgICAgICAgICAgIHJldHVybgoKICAgICAgICBwbGF5ZXJzID0gJywgJy5qb2luKHJvb20uZ2V0X3BhcnRpY2lwYW50cyhjdHgpKQogICAgICAgIGF3YWl0IGFvaS5zYXkocmFuZG9tLmNob2ljZShbCiAgICAgICAgICAgICAgICAgICAgICAgICdIZXJlIHdlIGdvLiB7fSwgZmlpaWlpaWlnaHQgc3RhcnQhJy5mb3JtYXQocGxheWVycyksCiAgICAgICAgICAgICAgICAgICAgICAgICd7fS4gUmVhZHk/IEdPIScuZm9ybWF0KHBsYXllcnMpLAogICAgICAgICAgICAgICAgICAgICAgICAnUGxheXRpbWVcJ3Mgb3Zlciwge30sIGl0XCdzIHRpbWUgdG8gZHVlbCEnLmZvcm1hdChwbGF5ZXJzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSkKICAgICAgICBhd2FpdCBhc3luY2lvLnNsZWVwKGR1cmF0aW9uKjYwKQogICAgICAgIAogICAgICAgICMgY2hlY2sgaWYgZmlnaHQgaXMgc3RpbGwgYWN0aXZlIGFmdGVyIHRpbWUgZW5kcwogICAgICAgIGlmIG5vdCByb29tLmFjdGl2ZShjdHgsIG5vbmNlKToKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIHJvb20udGVybWluYXRlKGN0eCwgY29tcGxldGVkPVRydWUpCiAgICAgICAgYXdhaXQgYW9pLnNheSgnOmNsb2NrOiBBYWFhYW5kIHRoYXRcJ3MgdGltZSFcbioqQ2FsbGluZyB7fS4gWW91IGhhdmUgdGhyZWUgbWludXRlcyB0byBzdWJtaXQgeW91ciByZXN1bHRzIHdpdGggYDo6ZmlnaHQgcmVzdWx0ICMjYC4qKicuZm9ybWF0KHBsYXllcnMpKQogICAgICAgIGF3YWl0IGFzeW5jaW8uc2xlZXAoMTgwKQoKICAgICAgICByZXN1bHRzID0gcm9vbS5nZW5lcmF0ZV9yZXN1bHRzKGN0eCkKICAgICAgICBpZiByZXN1bHRzOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBrZXlzID0gc29ydGVkKHJlc3VsdHMsIGtleT1yZXN1bHRzLmdldCwgcmV2ZXJzZT1UcnVlKQogICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICBwcmludCgnWyFdIGVycm9yIHNvcnRpbmcsIHVzaW5nIHJlc3VsdHMgYXMgZ2l2ZW4uLi4uJykKICAgICAgICAgICAgICAgIHByaW50KCdyZXN1bHRzOnt9Jy5mb3JtYXQocmVzdWx0cykpCiAgICAgICAgICAgICAgICBrZXlzID0gcmVzdWx0cwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGZvcm1hdHRlZCA9ICcnCiAgICAgICAgICAgIHByaW50KCdhdHRlbXB0aW5nIHRvIHNvcnQgd2l0aCByZXN1bHRzIHt9Jy5mb3JtYXQocmVzdWx0cykpCiAgICAgICAgICAgIGZvciByIGluIGtleXM6CiAgICAgICAgICAgICAgICBmb3JtYXR0ZWQgKz0gJ3s6MjUuMjB9e31cbicuZm9ybWF0KHIuZGlzcGxheV9uYW1lLCAnICcuam9pbihyZXN1bHRzW3JdKSkKICAgICAgICAgICAgYXdhaXQgYW9pLnNheSgoJycnU28gaGV5LCBoZXJlIGFyZSB0aGUgcmVzdWx0cyBmcm9tIHRoZSBsYXN0IGJhdHRsZTpcbmBgYHt9YGBgXG4nJycpLmZvcm1hdChmb3JtYXR0ZWQpICsgcmFuZG9tLmNob2ljZShbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoYW5rcyBmb3IgcGxheWluZyEgOnN0YXIyOicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05pY2Ugb25lISEgOnN0YXIyOicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0dvb2Qgd29yaywgZXZlcnlib2R5eXkhIDpzdGFyMjonCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkpCiAgICAgICAgCiAgICBlbHNlOgogICAgICAgIGF3YWl0IGFvaS5zYXkoJ0hleSwgb25lIGJhdHRsZSBpbiBoZXJlIGF0IGEgdGltZSwgTy1LPycpCgojIGNhbmNlbCBjdXJyZW50IGJhdHRsZQpAZmlnaHQuY29tbWFuZChwYXNzX2NvbnRleHQ9VHJ1ZSkKYXN5bmMgZGVmIGNhbmNlbChjdHgpOgogICAgaWYgcm9vbS5hY3RpdmUoY3R4KToKICAgICAgICByb29tLnRlcm1pbmF0ZShjdHgsIGNvbXBsZXRlZD1GYWxzZSkKICAgICAgICBhd2FpdCBhb2kuc2F5KHJhbmRvbS5jaG9pY2UoWydBdywgY2hhbmdlZCB5b3VyIG1pbmQ/IEZpaWlpaWluZSB+JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdOZXh0IHRpbWU/IElcJ2xsIGhvbGQgeW91IHRvIGl0IScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSHVoPyBDb2xkIGZlZXQ/IFRoYXRcJ3MgZmluZSwgdG9vLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pKQogICAgZWxzZToKICAgICAgICBhd2FpdCBhb2kuc2F5KCdUaGVyZVwncyBubyBmaWdodCBvbiBoZXJlLCBzaWxseS4nKQoKIyBqb2luIGZpZ2h0CkBmaWdodC5jb21tYW5kKHBhc3NfY29udGV4dD1UcnVlKQphc3luYyBkZWYgam9pbihjdHgpOgogICAgaWYgcm9vbS5hZGRfcGFydGljaXBhbnQoY3R4KToKICAgICAgICBhd2FpdCBhb2kuYWRkX3JlYWN0aW9uKGN0eC5tZXNzYWdlLChyYW5kb20uY2hvaWNlKFsnXFUwMDAxRjQ0RCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xVMDAwMUY0NEInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcVTAwMDFGNDRGJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFUwMDAwMjcwQyddKSkpCiAgICBlbHNlOgogICAgICAgIGF3YWl0IGFvaS5zYXkoJ1RoZXJlXCdzIG5vdGhpbmcgdG8gam9pbiBub3cuIFRyeSBgOjpmaWdodCBzdGFydGA/JykKIyB1cGRhdGUgcmVzdWx0cwpAZmlnaHQuY29tbWFuZChwYXNzX2NvbnRleHQ9VHJ1ZSkKYXN5bmMgZGVmIHJlc3VsdChjdHgsICpwcm9ncmVzcyk6CiAgICBpZiByb29tLnVwZGF0ZV9wYXJ0aWNpcGFudChjdHgsIHByb2dyZXNzKToKICAgICAgICBhd2FpdCBhb2kuYWRkX3JlYWN0aW9uKGN0eC5tZXNzYWdlLChyYW5kb20uY2hvaWNlKFsnXFUwMDAwMjcyOCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xVMDAwMDI2NjUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcVTAwMDFGMzg5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFUwMDAxRjM4NiddKSkpCiAgICAgICAgcHJpbnQoJ1Byb2dyZXNzIHNhdmVkIGZvciB7fScuZm9ybWF0KGN0eC5tZXNzYWdlLmF1dGhvci5kaXNwbGF5X25hbWUpKQogICAgZWxzZToKICAgICAgICBhd2FpdCBhb2kuc2F5KCdUaGVyZVwncyBub3RoaW5nIHRvIHVwZGF0ZS4gVHJ5IGA6OmZpZ2h0IHN0YXJ0YD8nKQoKCmFvaS5ydW4ob3MuZ2V0ZW52KCdESVNDT1JEX1RPS0VOJykpCjx8ZmltX3N1ZmZpeHw+CmFvaSA9IGNvbW1hbmRzLkJvdChkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbiwgY29tbWFuZF9wcmVmaXg9Ym90X3ByZWZpeCkKCkBhb2kuZXZlbnQKYXN5bmMgZGVmIG9uX3JlYWR5KCk6Cjx8ZmltX2VuZHw+"]
["f8af684245d97686ee1cde36fb6c4f7fda3284ed-4","f8af684245d97686ee1cde36fb6c4f7fda3284ed","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uY29udHJpYi5zeW5kaWNhdGlvbi5mZWVkcyBpbXBvcnQgRmVlZCwgRmVlZERvZXNOb3RFeGlzdApmcm9tIGRqYW5nby5jb3JlLmV4Y2VwdGlvbnMgaW1wb3J0IE9iamVjdERvZXNOb3RFeGlzdApmcm9tIGRqYW5nby5jb250cmliLnNpdGVzLm1vZGVscyBpbXBvcnQgU2l0ZQpmcm9tIGxpdGhpdW0uY29uZiBpbXBvcnQgc2V0dGluZ3MKZnJvbSBsaXRoaXVtLmJsb2cubW9kZWxzIGltcG9ydCBQb3N0CgpjbGFzcyBMYXRlc3RQb3N0cyhGZWVkKToKICAgIHNpdGUgPSBTaXRlLm9iamVjdHMuZ2V0X2N1cnJlbnQoKQogICAgZGVzY3JpcHRpb25fdGVtcGxhdGUgPSAnYmxvZy9mZWVkX2Rlc2NyaXB0aW9uLmh0bWwnIAogICAgCiAgICBkZWYgdGl0bGUoc2VsZik6CiAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ19zaXRlJyk6CiAgICAgICAgICAgIHNlbGYuX3NpdGUgPSBTaXRlLm9iamVjdHMuZ2V0X2N1cnJlbnQoKQogICAgICAgIHJldHVybiB1IiVzIGZlZWQiICUgc2VsZi5fc2l0ZS5uYW1lCiAgICAKICAgIGRlZiBsaW5rKHNlbGYpOgogICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdfc2l0ZScpOgogICAgICAgICAgICBzZWxmLl9zaXRlID0gU2l0ZS5vYmplY3RzLmdldF9jdXJyZW50KCkKICAgICAgICByZXR1cm4gImh0dHA6Ly8lcy8iICUgKHNlbGYuX3NpdGUuZG9tYWluKQogICAgCiAgICBkZWYgZGVzY3JpcHRpb24oc2VsZik6CiAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ19zaXRlJyk6CiAgICAgICAgICAgIHNlbGYuX3NpdGUgPSBTaXRlLm9iamVjdHMuZ2V0X2N1cnJlbnQoKQogICAgICAgIHJldHVybiB1IkxhdGVzdCBwb3N0cyBhdCAlcyIgJSBzZWxmLl9zaXRlLm5hbWUKICAgIAogICAgZGVmIGl0ZW1fcHViZGF0ZShzZWxmLCBpdGVtKToKICAgICAgICByZXR1cm4gaXRlbS5wdWJfZGF0ZQogICAgCiAgICBkZWYgaXRlbV9hdXRob3JfbmFtZShzZWxmLCBpdGVtKToKICAgICAgICByZXR1cm4gJyVzICVzJyAlIChpdGVtLmF1dGhvci5maXJzdF9uYW1lLCBpdGVtLmF1dGhvci5sYXN0X25hbWUpCiAgICAKICAgIGRlZiBpdGVtX2F1dGhvcl9lbWFpbChzZWxmLCBpdGVtKToKICAgICAgICByZXR1cm4gaXRlbS5hdXRob3IuZW1haWwKICAgIAogICAgZGVmIGdldF9xdWVyeV9zZXQoc2VsZik6CiAgICAgICAgcmV0dXJuIFBvc3Qub25fc2l0ZS5kaXNhbGxvd19mdXR1cmUoKQogICAgCiAgICBkZWYgaXRlbXMoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3F1ZXJ5X3NldCgpWzpzZXR0aW5ncy5CTE9HX0ZFRURfSVRFTVNdCgpjbGFzcyBMYXRlc3RQb3N0c0J5VGFnKExhdGVzdFBvc3RzKToKICAgIGRlZiBnZXRfb2JqZWN0KHNlbGYsIHRhZ3MpOgogICAgICAgIGlmIGxlbih0YWdzKSAhPSAxOgogICAgICAgICAgICByYWlzZSBPYmplY3REb2VzTm90RXhpc3QKICAgICAgICBzZWxmLnRhZyA9IHRhZ3NbMF0KICAgIAogICAgZGVmIGl0ZW1zKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmdldF9xdWVyeV9zZXQoKS5maWx0ZXIoY2F0ZWdvcnlfX3NsdWc9c2VsZi50YWcpWzpzZXR0aW5ncy5CTE9HX0ZFRURfSVRFTVNdCgpjbGFzcyBMYXRlc3RQb3N0c0J5QXV0aG9yKExhdGVzdFBvc3RzKToKICAgIGRlZiBnZXRfb2JqZWN0KHNlbGYsIGF1dGhvcnMpOgo8fGZpbV9ob2xlfD4KICAgIGRlZiBpdGVtcyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5nZXRfcXVlcnlfc2V0KCkuZmlsdGVyKGF1dGhvcl9fdXNlcm5hbWU9c2VsZi5hdXRob3IpWzpzZXR0aW5ncy5CTE9HX0ZFRURfSVRFTVNdCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgaWYgbGVuKGF1dGhvcnMpICE9IDE6CiAgICAgICAgICAgIHJhaXNlIE9iamVjdERvZXNOb3RFeGlzdAogICAgICAgIHNlbGYuYXV0aG9yID0gYXV0aG9yc1swXQogICAgCjx8ZmltX2VuZHw+"]
["e4d64b2cb5198e88aac0063cab95bf210e6cba19-4","e4d64b2cb5198e88aac0063cab95bf210e6cba19","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBjUGlja2xlCgojcGFyc2UgaW5wdXQgYXJndW1lbnRzCnBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSJDcmVhdGUgYSBtYXBwaW5nIGZyb20gaWRlbnRpZmllciB0byBnb2xkIGtleXMgKyAubm9tdyBmaWxlIHdpbGwgYmUgY3JlYXRlZCB0byBldmFsdWF0ZSIpCgpwYXJzZXIuYWRkX2FyZ3VtZW50KCItYyIsIGRlc3Q9ImNvbXBldGl0aW9uIiwgaGVscD0ic3ZhbDIwMTMgfCBzdmFsMjAxNSIsICAgICAgICAgICAgICByZXF1aXJlZD1UcnVlKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItaSIsIGRlc3Q9ImlucHV0X3BhdGgiLCAgaGVscD0iZnVsbCBwYXRoIHRvIGZpbGUgd2l0aCBnb2xkIGtleXMiLCByZXF1aXJlZD1UcnVlKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItbyIsIGRlc3Q9Im91dHB1dF9wYXRoIiwgaGVscD0icGF0aCB3aGVyZSBvdXRwdXQgd2lsbCBiZSBzdG9yZWQiLCByZXF1aXJlZD1UcnVlKQoKYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCmRlZiBpZGVudGlmaWVyaXNfc3ZhbDIwMTUocGF0aCk6CiAgICAnJycKICAgIGNyZWF0ZSBtYXBwaW5nIGlkZW50aWZpZXJzIHRvIGdvbGQgc2Vuc2Uga2V5cyBzdmFsMjAxNQogICAgCiAgICBAdHlwZSAgcGF0aDogc3RyCiAgICBAcGFyYW0gcGF0aDogcGF0aCB0byBnb2xkIGtleXMgb2Ygc3ZhbDIwMTUKICAgIAogICAgQHJ0eXBlOiBkaWN0CiAgICBAcmV0dXJuOiBtYXBwaW5nIGZyb20gaWRlbnRpZmllciB0byBsaXN0IG9mIGdvbGQga2V5cwogICAgJycnCiAgICBtYXBwaW5nID0ge30KICAgIAogICAgd2l0aCBvcGVuKHBhdGgpIGFzIGluZmlsZToKICAgICAgICB3aXRoIG9wZW4ocGF0aCsnLm5vbXcnLCd3JykgYXMgb3V0ZmlsZToKICAgICAgICAgICAgZm9yIGxpbmUgaW4gaW5maWxlOgogICAgICAgICAgICAgICAgc3BsaXQgICAgICAgICAgICAgICA9IGxpbmUuc3RyaXAoKS5zcGxpdCgpCiAgICAgICAgICAgICAgICBpZGVudGlmaWVyICAgICAgICAgID0gc3BsaXRbMF0KICAgICAgICAgICAgICAgIGdvbGRfa2V5cyAgICAgICAgICAgPSBbaXRlbVszOl0gZm9yIGl0ZW0gaW4gc3BsaXQgaWYgaXRlbS5zdGFydHN3aXRoKCd3bjonKV0KICAgICAgICAgICAgICAgIG13ICAgICAgICAgICAgICAgICAgPSBzcGxpdFswXSAhPSBzcGxpdFsxXQogICAgIAogICAgICAgICAgICAgICAgaWYgZ29sZF9rZXlzOgogICAgICAgICAgICAgICAgICAgIGlmIGFsbChbJ18nIG5vdCBpbiBnb2xkX2tleSBmb3IgZ29sZF9rZXkgaW4gZ29sZF9rZXlzXSk6CiAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbaWRlbnRpZmllcl0gPSB7J2dvbGRfa2V5cycgOiBnb2xkX2tleXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXcnICAgICAgICA6IG13fQogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgI2lmIG13OgogICAgICAgICAgICAgICAgICAgICAgICAjICAgIG1hcHBpbmdbc3BsaXRbMV1dID0geydnb2xkX2tleXMnICAgOiBnb2xkX2tleXMsCiAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICdtdycgICAgICAgIDogbXd9IAogICAgICAgICAgICAgICAgICAgICAgICBvdXRmaWxlLndyaXRlKGxpbmUpCiAgICByZXR1cm4gbWFwcGluZwoKaWYgYXJncy5jb21wZXRpdGlvbiA9PSAic3ZhbDIwMTMiOgogICAgbWFwcGluZyA9IHt9CiAgICB3aXRoIG9wZW4oYXJncy5pbnB1dF9wYXRoKSBhcyBpbmZpbGU6CiAgICAgICAgd2l0aCBvcGVuKGFyZ3MuaW5wdXRfcGF0aCsnLm5vbXcnLCd3JykgYXMgb3V0ZmlsZToKICAgICAgICAgICAgZm9yIGxpbmUgaW4gaW5maWxlOgogICAgICAgICAgICAgICAgZ29sZF9rZXlzID0gbGluZS5zdHJpcCgpLnNwbGl0KClbMjpdCiAgICAgICAgICAgICAgICBpZiBhbnkoWydfJyBpbiBnb2xkX2tleSBmb3IgZ29sZF9rZXkgaW4gZ29sZF9rZXlzXSk6CiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBsaW5lLnN0cmlwKCkuc3BsaXQoKVsxXQogICAgICAgICAgICAgICAgbWFwcGluZ1tpZGVudGlmaWVyXSA9IHsnZ29sZF9rZXlzJzogZ29sZF9rZXlzLCAnbXcnOiBGYWxzZX0KICAgICAgICAgICAgICAgIG91dGZpbGUud3JpdGUobGluZSkKCmVsaWYgYXJncy5jb21wZXRpdGlvbiA9PSAic3ZhbDIwMTUiOgogICAgbWFwcGluZyA9IGlkZW50aWZpZXJpc19zdmFsMjAxNShhcmdzLmlucHV0X3BhdGgpCgo8fGZpbV9ob2xlfD4Kd2l0aCBvcGVuKGFyZ3Mub3V0cHV0X3BhdGgsInciKSBhcyBvdXRmaWxlOgogICAgY1BpY2tsZS5kdW1wKG1hcHBpbmcsb3V0ZmlsZSkKPHxmaW1fc3VmZml4fD4KcHJpbnQKcHJpbnQoYXJncy5jb21wZXRpdGlvbikKcHJpbnQobGVuKG1hcHBpbmcpKQpwcmludChhcmdzLmlucHV0X3BhdGgpCjx8ZmltX2VuZHw+"]
["39e5d0a97460679118655a2078d2b006af7ed97d-2","39e5d0a97460679118655a2078d2b006af7ed97d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBzeWNvcGcKaW1wb3J0IHJlcXVlc3RzIAoKZnJvbSBkaXNjb3JkIGltcG9ydCBXZWJob29rLCBSZXF1ZXN0c1dlYmhvb2tBZGFwdGVyCmZyb20gdXJsbGliLnBhcnNlIGltcG9ydCBxdW90ZSAjIHVybGVuY29kZQpmcm9tIGNlbGVyeSBpbXBvcnQgQ2VsZXJ5CmZyb20gb3MgaW1wb3J0IGdldGVudgpmcm9tIHRpbWUgaW1wb3J0IHNsZWVwLCB0aW1lCmZyb20gZXJnb2RleCBpbXBvcnQgZ2V0RXJnb2RleFRva2VuCmZyb20gY29pbmV4IGltcG9ydCBwdXRMYXRlc3RPSExDViwgY2xlYW51cEhpc3RvcnkKZnJvbSB2YWxpZGF0b3IgaW1wb3J0IGhlaWdodAoKIyBodHRwOi8vd3d3LmluZXMtcGFua2VyLmNvbS8yMDIwLzEwLzI5L3JldHJ5LWNlbGVyeS10YXNrcy5odG1sCiMgaHR0cDovL3d3dy5pbmVzLXBhbmtlci5jb20vMjAyMC8xMC8yOC9jZWxlcnktZXhwbGFpbmVkLmh0bWwKCiMgQURNSU5fRU1BSUwgPSAnJyAjIFRPRE86IG1vdmUgdGhpcyB0byBjb25maWcKQVBJX1VSTCA9IGdldGVudignQVBJX1VSTCcpClBPU1RHUkVTX0NPTk4gPSBnZXRlbnYoJ1BPU1RHUkVTX0NPTk4nKQpFUkdPUEFEX0RJU0NPUkRfV0VCSE9PSyA9IGdldGVudignRVJHT1BBRF9ESVNDT1JEX1dFQkhPT0snKQpFUkdPUEFEX0FQSV9VUkwgPSBnZXRlbnYoJ0VSR09QQURfQVBJX1VSTCcpCmVyZ29fd2F0Y2hfYXBpOiBzdHIgPSBmJ2h0dHBzOi8vZXJnby53YXRjaC9hcGkvc2lnbWF1c2Qvc3RhdGUnCm5lcmcyZXJnID0gMTAqKjkKaGVhZGVycyA9IHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nfQpzdGFraW5nQm9keSA9IHsnYXBpS2V5JzogZ2V0ZW52KCdFUkdPUEFEX0FQSUtFWScpLCAnbnVtQm94ZXMnOiA1MH0KCkRFQlVHID0gVHJ1ZQoKaW1wb3J0IGNlbGVyeWNvbmZpZwpjZWxlcnkgPSBDZWxlcnkoX19uYW1lX18pCmNlbGVyeS5jb25maWdfZnJvbV9vYmplY3QoY2VsZXJ5Y29uZmlnKQoKI3JlZ2lvbiBMT0dHSU5HCmltcG9ydCBsb2dnaW5nCmxldmVsbmFtZSA9IChsb2dnaW5nLldBUk4sIGxvZ2dpbmcuREVCVUcpW0RFQlVHXQpsb2dnaW5nLmJhc2ljQ29uZmlnKGZvcm1hdD0ne2FzY3RpbWV9OntuYW1lOj44c306e2xldmVsbmFtZTo8OHN9Ojp7bWVzc2FnZX0nLCBzdHlsZT0neycsIGxldmVsPWxldmVsbmFtZSkKCmltcG9ydCBpbnNwZWN0Cm15c2VsZiA9IGxhbWJkYTogaW5zcGVjdC5zdGFjaygpWzFdWzNdCiNlbmRyZWdpb24gTE9HR0lORwoKY2xhc3MgVGFza0ZhaWx1cmUoRXhjZXB0aW9uKToKICAgcGFzcwoKI3JlZ2lvbiBST1VUSU5HCkBjZWxlcnkudGFzayhuYW1lPSJjcmVhdGVfdGFzayIpCmRlZiBjcmVhdGVfdGFzayh0YXNrX3R5cGUpOgogICAgZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKICAgICMgc2xlZXAoaW50KHRhc2tfdHlwZSkgKiAxMCkKICAgIG5vdyA9IGRhdGV0aW1lLm5vdygpLmlzb2Zvcm1hdCgpCiAgICBhbGVydEFkbWluKCdjdXJyZW50IHV0YycsIHN0cihub3cpKQoKICAgIHJldHVybiB7J2N1cnJlbnQgdGltZSc6IG5vd30KCkBjZWxlcnkudGFzayhuYW1lPSdyZWRlZW1fZXJnb3BhZCcsIGJpbmQ9VHJ1ZSwgZGVmYXVsdF9yZXRyeV9kZWxheT0zMDAsIG1heF9yZXRyaWVzPTIsIHJldHJ5X2JhY2tvZmY9VHJ1ZSkKZGVmIHJlZGVlbV9lcmdvcGFkKHNlbGYpOgogICAgdHJ5OgogICAgICAgIHJlcyA9IHJlcXVlc3RzLmdldCgnaHR0cHM6Ly9lcmdvcGFkLmlvL2FwaS92ZXN0aW5nL3JlZGVlbS9ZMkpES2NYTjV6cnozTnhwSnFoR2NKemdQUnFRY21NaExxc1gzVGtrcU14UUtLODZTaDNoQVpVdVV3ZVJaOTdTTHVDWUxpQjJkdW9FcFlZMlppbTNqNWFKckRRY3N2d3lMRzJpeExMemdNYVdmQmhUcXhTYnYxVmdRUWtWTUtyQTRDeDZBaXlXSmRlWFNKQTZVTW1rR2N4TkNBTmJDdzdkbXJEUzZLYm5yYVRBSmg2UWo2czlyNTZwV01lVFhLV0Z4RFFTbm1CNG9aMW8xeTZlcXlQZ2FtUnNvTnVFakZCSnRrVFdLcVlvRjhGc3ZxdXZienNzWk1wRjZGaEExZmtpSDNuOG9LcHhBUldSTGp4MlF3c0w2VzVoeXlkWjhWRkszU3FZc3dGdlJuQ21lNVl3aTRHdmhIZWV1a1c0dzFtaFZ4NnNiQWFKaWhXTEh2c3liUlhMV1RvVVhjcVhmcVlBR3lWUkp6RDFyQ2VOYThrVWI3S0hSYnpneW5IQ1pSNjhLaGkzRzd1clN1bkI5UlBUcDFFZHVMMjY0WVY1cG1STHRvTm5IOW1mMmhBa2ttcXd5ZGk5TG9VTHhyd3NSdnAnLCB2ZXJpZnk9RmFsc2UpCiAgICAgICAgaWYgcmVzLm9rOgogICAgICAgICAgICByZXR1cm4gcmVzLmpzb24oKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJhaXNlIFRhc2tGYWlsdXJlKGYncmVkZWVtX2VyZ29wYWQ6IHtyZXMudGV4dH0nKQogICAgICAgICAgICAjIHJldHVybiB7J3N0YXR1cyc6ICdmYWlsZWQnLCAnbWVzc2FnZSc6IHJlcy50ZXh0fQoKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBsb2dnaW5nLmVycm9yKGYne215c2VsZigpfToge2V9JykKICAgICAgICBzZWxmLnJldHJ5KGV4Yz1lKQoKZGVmIGFsZXJ0QWRtaW4oc3ViamVjdCwgYm9keSk6CiAgICByZXR1cm4ge30gCiAgICAKICAgIHRyeToKICAgICAgICB3ZWJob29rID0gV2ViaG9vay5mcm9tX3VybChFUkdPUEFEX0RJU0NPUkRfV0VCSE9PSywgYWRhcHRlcj1SZXF1ZXN0c1dlYmhvb2tBZGFwdGVyKCkpICAgICAgIAogICAgICAgIHdlYmhvb2suc2VuZChjb250ZW50PWYnOmJhbmdiYW5nOkNFTEVSWTpiYW5nYmFuZzpcbnN1YmplY3Q6IGB7c3ViamVjdH1gXG5ib2R5OiBge2JvZHl9YCcpCgogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIGxvZ2dpbmcuZXJyb3IoZidFUlI6e215c2VsZigpfTogY2Fubm90IGRpc3BsYXkgZGlzY29yZCBtc2cgKHtlfSknKQogICAgICAgIAogICAgcmV0dXJuIHsnc3RhdHVzJzogJ2VtYWlsZWQnLCAnbWVzc2FnZSc6ICdmYWlsZWQgdG8gc2VuZCBlbWFpbCd9CgpAY2VsZXJ5LnRhc2sobmFtZT0ndmFsaWRhdGVfaGVpZ2h0JywgYmluZD1UcnVlLCBkZWZhdWx0X3JldHJ5X2RlbGF5PTMwMCwgbWF4X3JldHJpZXM9MiwgcmV0cnlfYmFja29mZj1UcnVlKQphc3luYyBkZWYgdmFsaWRhdGVfaGVpZ2h0KHNlbGYpOgogICAgdHJ5OgogICAgICAgIGF3YWl0IGhlaWdodCgpCgogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIGxvZ2dpbmcuZXJyb3IoZid7bXlzZWxmKCl9OiB7ZX0nKQogICAgICAgIGFsZXJ0QWRtaW4oZidGQUlMOiB7bXlzZWxmKCl9JywgZidzdGFraW5nLnNuYXBzaG90XG5lcnI6IHtlfScpCiAgICAgICAgc2VsZi5yZXRyeShleGM9ZSkKCiMgY2VsZXJ5IGNhbGwgInNuYXBzaG90X3N0YWtpbmciCkBjZWxlcnkudGFzayhuYW1lPSdzbmFwc2hvdF9zdGFraW5nJywgYmluZD1UcnVlLCBkZWZhdWx0X3JldHJ5X2RlbGF5PTMwMCwgbWF4X3JldHJpZXM9MiwgcmV0cnlfYmFja29mZj1UcnVlKQpkZWYgc25hcHNob3Rfc3Rha2luZyhzZWxmKToKICAgIHRyeToKICAgICAgICBhbGVydEFkbWluKCdzbmFwc2hvdCBiZWdpbicsIGYnaHR0cDovL2Zsb3dlcjo1NTU1L3Rhc2sve3NlbGYucmVxdWVzdC5pZH0nKQogICAgICAgIHVybEF1dGggPSBmJ3tFUkdPUEFEX0FQSV9VUkx9L2F1dGgvdG9rZW4nCiAgICAgICAgdXJsU25hcHNob3QgPSBmJ3tFUkdPUEFEX0FQSV9VUkx9L3N0YWtpbmcvc25hcHNob3QnCiAgICAgICAgdXNlcm5hbWUgPSBnZXRlbnYoJ1NOQVBTSE9UX1VTRVJOQU1FJykKICAgICAgICBwYXNzd29yZCA9IGdldGVudignU05BUFNIT1RfUEFTU1dPUkQnKQogICAgICAgIGhlYWRlcnMgPSB7J2FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfQogICAgICAgIGRhdGEgPSBmIiIiZ3JhbnRfdHlwZT0mdXNlcm5hbWU9e3F1b3RlKHVzZXJuYW1lKX0mcGFzc3dvcmQ9e3F1b3RlKHBhc3N3b3JkKX0mc2NvcGU9JmNsaWVudF9pZD0mY2xpZW50X3NlY3JldD0iIiIKICAgICAgICAKICAgICAgICAjIGF1dGggdXNlcgogICAgICAgIHJlcyA9IHJlcXVlc3RzLnBvc3QodXJsQXV0aCwgaGVhZGVycz1oZWFkZXJzLCBkYXRhPWRhdGEpCiAgICAgICAgbG9nZ2luZy5kZWJ1ZyhyZXMudGV4dCkKICAgICAgICB0cnk6CiAgICAgICAgICAgIGJlYXJlclRva2VuID0gcmVzLmpzb24oKVsnYWNjZXNzX3Rva2VuJ10KPHxmaW1faG9sZXw+CiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICBhbGVydEFkbWluKCdzbmFwc2hvdCBlcnJvcicsIHJlcy50ZXh0KQogICAgICAgICAgICByYWlzZSBUYXNrRmFpbHVyZShmJ3NuYXBzaG90X3N0YWtpbmc6IHtyZXMudGV4dH0nKQoKICAgICAgICAjIGNhbGwgc25hcHNob3QKICAgICAgICB0cnk6IAogICAgICAgICAgICByZXMgPSByZXF1ZXN0cy5nZXQodXJsU25hcHNob3QsIGhlYWRlcnM9ZGljdChoZWFkZXJzLCAqKnsnQXV0aG9yaXphdGlvbic6IGYnQmVhcmVyIHtiZWFyZXJUb2tlbn0nfSkpCiAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcocmVzLnRleHQpCiAgICAgICAgICAgIGFsZXJ0QWRtaW4oJ3NuYXBzaG90IHN1Y2Nlc3MnLCBmImZvdW5kIHtsZW4ocmVzLmpzb24oKVsnc3Rha2VycyddKX0gc3Rha2VycyIpCiAgICAgICAgZXhjZXB0OiAKICAgICAgICAgICAgcGFzcwogICAgICAgIAogICAgICAgIHJldHVybiByZXMuanNvbigpCgogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIGxvZ2dpbmcuZXJyb3IoZid7bXlzZWxmKCl9OiB7ZX0nKQogICAgICAgIGFsZXJ0QWRtaW4oZidGQUlMOiB7bXlzZWxmKCl9JywgZidzdGFraW5nLnNuYXBzaG90XG5lcnI6IHtlfScpCiAgICAgICAgc2VsZi5yZXRyeShleGM9ZSkKCiMgcHJvYWN0aXZlIG5vdGlmeSBvbiBlcnIKIyByZXEgYXV0aCBlbmRwb2ludAojICEhIGNhbGwgdG9wIG9mIGhvdXI7IGZvbGxvdyB3aXRoIGNvbXBvdW5kIGNhbGwgMTUgbWlucyBsYXRlcgpAY2VsZXJ5LnRhc2sobmFtZT0nZW1pdF9zdGFraW5nJywgYmluZD1UcnVlLCBkZWZhdWx0X3JldHJ5X2RlbGF5PTE4MCwgbWF4X3JldHJpZXM9MjApCmRlZiBlbWl0X3N0YWtpbmcoc2VsZik6CiAgICB0cnk6CiAgICAgICAgcmVzID0gcmVxdWVzdHMucG9zdChmJ3tBUElfVVJMfS9zdGFraW5nL2VtaXQnLCBoZWFkZXJzPWhlYWRlcnMsIGpzb249c3Rha2luZ0JvZHksIHZlcmlmeT1GYWxzZSkgICAgICAgIAogICAgICAgIGlmIHJlcy5vazoKICAgICAgICAgICAgcmV0dXJuIHJlcy5qc29uKCkKICAgICAgICBlbGlmICdUb28gZWFybHkgZm9yIGEgbmV3IGVtaXNzaW9uJyBpbiByZXMudGV4dDoKICAgICAgICAgICAgcmV0dXJuIHsnc3RhdHVzJzogJ2NvbXBsZXRlZCcsICdtZXNzYWdlJzogJ3RvbyBlYXJseSd9CiAgICAgICAgZWxzZToKICAgICAgICAgICByYWlzZSBUYXNrRmFpbHVyZShmJ3tyZXMudGV4dH0nKQoKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBsb2dnaW5nLmVycm9yKGYne215c2VsZigpfToge2V9JykKICAgICAgICBhbGVydEFkbWluKGYnRkFJTDoge215c2VsZigpfScsIGYnc3Rha2luZy5lbWl0XG5lcnI6IHtlfScpCiAgICAgICAgc2VsZi5yZXRyeShleGM9ZSkKCkBjZWxlcnkudGFzayhuYW1lPSdjb21wb3VuZF9zdGFraW5nJywgYmluZD1UcnVlLCBkZWZhdWx0X3JldHJ5X2RlbGF5PTMwMCwgbWF4X3JldHJpZXM9MiwgcmV0cnlfYmFja29mZj1UcnVlKQpkZWYgY29tcG91bmRfc3Rha2luZyhzZWxmKToKICAgIHRyeTogICAgICAKICAgICAgICByZW1haW5pbmdCb3hlcyA9IDEKICAgICAgICBpID0gMAogICAgICAgIHdoaWxlIHJlbWFpbmluZ0JveGVzID4gMCBhbmQgKGkgPCA1KToKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgcmVzID0gcmVxdWVzdHMucG9zdChmJ3tBUElfVVJMfS9zdGFraW5nL2NvbXBvdW5kJywgaGVhZGVycz1oZWFkZXJzLCBqc29uPXN0YWtpbmdCb2R5LCB2ZXJpZnk9RmFsc2UpCiAgICAgICAgICAgICAgICBpZiByZXMub2s6CiAgICAgICAgICAgICAgICAgICAgaWYgcmVzLmpzb24oKToKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQm94ZXMgPSBpbnQocmVzLmpzb24oKVsncmVtYWluaW5nQm94ZXMnXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvdW5kVHggPSByZXMuanNvbigpWydjb21wb3VuZFR4J10KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoZidjb21wb3VuZFR4OiB7Y29tcG91bmRUeH0nKQogICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geydyZXMnOiByZXMudGV4dH0KICAgICAgICAgICAgICAgIGVsaWYgJ1RvbyBlYXJseSBmb3IgYSBuZXcgZW1pc3Npb24nIGluIHJlcy50ZXh0OgogICAgICAgICAgICAgICAgICAgIHJldHVybiB7J3N0YXR1cyc6ICdjb21wbGV0ZScsICdtZXNzYWdlJzogJ3RvbyBlYXJseSd9CiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIGFsZXJ0QWRtaW4oZidGQUlMOiB7bXlzZWxmKCl9JywgZidzdGFraW5nLmNvbXBvdW5kXG5yZW1haW5pbmdTdGFrZXJzID4gMCBhZnRlciA1IGF0dGVtcHRzICh7QVBJX1VSTH0vc3Rha2luZy9jb21wb3VuZCknKQogICAgICAgICAgICAgICAgICAgIHJhaXNlIFRhc2tGYWlsdXJlKHJlcy50ZXh0KQogICAgICAgICAgICAgICAgaSArPSAxCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoZid7bXlzZWxmKCl9OiBlcnJvciBjYWxsaW5nIC9zdGFraW5nL2NvbXBvdW5kIGZyb20gdGFza3MsIHN0b3BwaW5nXG57ZX0nKQogICAgICAgICAgICAgICAgaSA9IDUKCiAgICAgICAgdHJ5OiBtc2cgPSByZXMuanNvbigpIAogICAgICAgIGV4Y2VwdDogbXNnID0gcmVzLnRleHQKICAgICAgICByZXR1cm4geydzdGF0dXMnOiAnY29tcGxldGUnLCAnbXNnJzogbXNnfQoKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBsb2dnaW5nLmVycm9yKGYne215c2VsZigpfToge2V9JykKICAgICAgICBhbGVydEFkbWluKGYnRkFJTDoge215c2VsZigpfScsIGYnc3Rha2luZy5jb21wb3VuZFxuZXJyOiB7ZX0nKQogICAgICAgIHNlbGYucmV0cnkoZXhjPWUpCgpAY2VsZXJ5LnRhc2soYmluZD1UcnVlLCBkZWZhdWx0X3JldHJ5X2RlbGF5PTMwMCwgbWF4X3JldHJpZXM9MiwgcmV0cnlfYmFja29mZj1UcnVlKQpkZWYgaGVsbG8oc2VsZiwgd29yZDogc3RyKSAtPiBzdHI6CiAgICB0cnk6CiAgICAgICAgcmV0dXJuIHsiSGVsbG8iOiB3b3JkfQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIGxvZ2dpbmcuZXJyb3IoZid7bXlzZWxmKCl9OiB7ZX0nKQogICAgICAgIHNlbGYucmV0cnkoZXhjPWUpCgpAY2VsZXJ5LnRhc2sobmFtZT0nc2NyYXBlX3ByaWNlX2RhdGEnLCBhY2tzX2xhdGU9VHJ1ZSwgYmluZD1UcnVlLCBkZWZhdWx0X3JldHJ5X2RlbGF5PTMwMCwgbWF4X3JldHJpZXM9MiwgcmV0cnlfYmFja29mZj1UcnVlKQpkZWYgc2NyYXBlX3ByaWNlX2RhdGEoc2VsZik6CiAgICB0cnk6CiAgICAgICAgcmVzID0gcmVxdWVzdHMuZ2V0KGVyZ29fd2F0Y2hfYXBpKS5qc29uKCkKICAgICAgICBpZiByZXM6CiAgICAgICAgICAgIHNpZ1VzZFByaWNlID0gMS8ocmVzWydwZWdfcmF0ZV9uYW5vJ10vbmVyZzJlcmcpCiAgICAgICAgICAgIGNpcmNfc2lndXNkX2NlbnRzID0gcmVzWydjaXJjX3NpZ3VzZCddLzEwMC4wICAjIGdpdmVuIGluIGNlbnRzCiAgICAgICAgICAgIHBlZ19yYXRlX25hbm8gPSByZXNbJ3BlZ19yYXRlX25hbm8nXSAgIyBhbHNvIFNpZ1VTRAogICAgICAgICAgICByZXNlcnZlcyA9IHJlc1sncmVzZXJ2ZXMnXSAgIyB0b3RhbCBhbXQgaW4gcmVzZXJ2ZXMgKG5hbm9lcmcpCiAgICAgICAgICAgICMgbG93ZXIgb2YgcmVzZXJ2ZXMgb3IgU2lnVVNEKlNpZ1VTRF9pbl9jaXJjdWxhdGlvbgogICAgICAgICAgICBsaWFiaWxpdGllcyA9IG1pbihjaXJjX3NpZ3VzZF9jZW50cyAqIHBlZ19yYXRlX25hbm8sIHJlc2VydmVzKQogICAgICAgICAgICBlcXVpdHkgPSByZXNlcnZlcyAtIGxpYWJpbGl0aWVzICAjIGZpbmQgZXF1aXR5LCBhdCBsZWFzdCAwCiAgICAgICAgICAgIGlmIGVxdWl0eSA8IDA6CiAgICAgICAgICAgICAgICBlcXVpdHkgPSAwCiAgICAgICAgICAgIGlmIHJlc1snY2lyY19zaWdyc3YnXSA8PSAxOgogICAgICAgICAgICAgICAgc2lnUnN2UHJpY2UgPSAwLjAKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHNpZ1JzdlByaWNlID0gZXF1aXR5L3Jlc1snY2lyY19zaWdyc3YnXS9uZXJnMmVyZyAgIyBTaWdSU1YKICAgICAgICAgICAgd2l0aCBwc3ljb3BnLmNvbm5lY3QoUE9TVEdSRVNfQ09OTikgYXMgY29uOgogICAgICAgICAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCiAgICAgICAgICAgICAgICBzcWwgPSBmIiIiCiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0IGludG8gImVyZ293YXRjaF9FUkcvc2lnVVNEL3NpZ1JTVl9jb250aW51b3VzXzVtIiAodGltZXN0YW1wX3V0YywgInNpZ1VTRCIsICJzaWdSU1YiKSAKICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgKHRpbWVzdGFtcCAnZXBvY2gnK3t0aW1lKCl9KklOVEVSVkFMICcxIHNlY29uZCcsIHtzaWdVc2RQcmljZX0sIHtzaWdSc3ZQcmljZX0pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nIHRpbWVzdGFtcF91dGMKICAgICAgICAgICAgICAgICIiIgogICAgICAgICAgICAgICAgaW5zID0gY3VyLmV4ZWN1dGUoc3FsKS5mZXRjaG9uZSgpWzBdCiAgICAgICAgICAgIHJldHVybiB7J3N0YXR1cyc6ICdzdWNjZXNzJywgJ3NxbCc6IHNxbCwgJ21lc3NhZ2UgKHRpbWVzdGFtcF91dGMpJzogaW5zfQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiB7J3N0YXR1cyc6ICdmYWlsZWQnLCAnbWVzc2FnZSc6IHJlcy50ZXh0fQoKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBsb2dnaW5nLmVycm9yKGYne215c2VsZigpfToge2V9JykKICAgICAgICBzZWxmLnJldHJ5KGV4Yz1lKQoKQGNlbGVyeS50YXNrKG5hbWU9J3NjcmFwZV9wcmljZV9lcmdvZGV4JywgYWNrc19sYXRlPVRydWUsIGJpbmQ9VHJ1ZSwgZGVmYXVsdF9yZXRyeV9kZWxheT0zMDAsIG1heF9yZXRyaWVzPTIsIHJldHJ5X2JhY2tvZmY9VHJ1ZSkKZGVmIHNjcmFwZV9wcmljZV9lcmdvZGV4KHNlbGYpOgogICAgdHJ5OgogICAgICAgIHJlcyA9IGdldEVyZ29kZXhUb2tlbigpCiAgICAgICAgaWYgcmVzOgogICAgICAgICAgICB3aXRoIHBzeWNvcGcuY29ubmVjdChQT1NUR1JFU19DT05OKSBhcyBjb246CiAgICAgICAgICAgICAgICBjdXIgPSBjb24uY3Vyc29yKCkKICAgICAgICAgICAgICAgIHNxbCA9IGYiIiIKICAgICAgICAgICAgICAgICAgICBpbnNlcnQgaW50byAiZXJnb2RleF9FUkcvZXJnb2RleFRva2VuX2NvbnRpbnVvdXNfNW0iICh0aW1lc3RhbXBfdXRjLCBzaWd1c2QsIHNpZ3JzdiwgZXJkb2dlLCBsdW5hZG9nLCBlcmdvcGFkLCBuZXRhKSAKICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgKHRpbWVzdGFtcCAnZXBvY2gnK3t0aW1lKCl9KklOVEVSVkFMICcxIHNlY29uZCcsIHtyZXNbJ3NpZ3VzZCddWzBdfSwge3Jlc1snc2lncnN2J11bMF19LCB7cmVzWydlcmRvZ2UnXVswXX0sIHtyZXNbJ2x1bmFkb2cnXVswXX0sIHtyZXNbJ2VyZ29wYWQnXVswXX0sIHtyZXNbJ25ldGEnXVswXX0pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nIHRpbWVzdGFtcF91dGMKICAgICAgICAgICAgICAgICIiIgogICAgICAgICAgICAgICAgaW5zID0gY3VyLmV4ZWN1dGUoc3FsKS5mZXRjaG9uZSgpWzBdCiAgICAgICAgICAgIHJldHVybiB7J3N0YXR1cyc6ICdzdWNjZXNzJywgJ3NxbCc6IHNxbCwgJ21lc3NhZ2UgKHRpbWVzdGFtcF91dGMpJzogaW5zfQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiB7J3N0YXR1cyc6ICdmYWlsZWQnLCAnbWVzc2FnZSc6IHJlcy50ZXh0fQogICAgICAgICAgICAKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBsb2dnaW5nLmVycm9yKGYne215c2VsZigpfToge2V9JykKICAgICAgICBzZWxmLnJldHJ5KGV4Yz1lKQoKQGNlbGVyeS50YXNrKG5hbWU9J2NsZWFudXBfY29udGludW91c181bScsIGFja3NfbGF0ZT1UcnVlLCBiaW5kPVRydWUsIGRlZmF1bHRfcmV0cnlfZGVsYXk9MzAwLCBtYXhfcmV0cmllcz0yLCByZXRyeV9iYWNrb2ZmPVRydWUpCmRlZiBjbGVhbnVwX2NvbnRpbnVvdXNfNW0oc2VsZik6CiAgICB0cnk6CiAgICAgICAgd2l0aCBwc3ljb3BnLmNvbm5lY3QoUE9TVEdSRVNfQ09OTikgYXMgY29uOgogICAgICAgICAgICBjdXIgPSBjb24uY3Vyc29yKCkKICAgICAgICAgICAgc3FsMSA9IGYiIiJkZWxldGUgZnJvbSAiZXJnb2RleF9FUkcvZXJnb2RleFRva2VuX2NvbnRpbnVvdXNfNW0iIHdoZXJlIHRpbWVzdGFtcF91dGMgPCBDVVJSRU5UX0RBVEUgLSBJTlRFUlZBTCAnNSB5ZWFycycgcmV0dXJuaW5nIHRpbWVzdGFtcF91dGMiIiIKICAgICAgICAgICAgc3FsMiA9IGYiIiJkZWxldGUgZnJvbSAiZXJnb3dhdGNoX0VSRy9zaWdVU0Qvc2lnUlNWX2NvbnRpbnVvdXNfNW0iIHdoZXJlIHRpbWVzdGFtcF91dGMgPCBDVVJSRU5UX0RBVEUgLSBJTlRFUlZBTCAnNSB5ZWFycycgcmV0dXJuaW5nIHRpbWVzdGFtcF91dGMiIiIKICAgICAgICAgICAgZGx0MSA9IGN1ci5leGVjdXRlKHNxbDEpLmZldGNob25lKClbMF0KICAgICAgICAgICAgZGx0MiA9IGN1ci5leGVjdXRlKHNxbDIpLmZldGNob25lKClbMF0KCiAgICAgICAgICAgIHJldHVybiB7J3N0YXR1cyc6ICdzdWNjZXNzJywgJ3NxbCc6IGYne3NxbDF9XG57c3FsMn0nLCAnbWVzc2FnZSAodGltZXN0YW1wX3V0YyknOiBmJ3tkbHQxfVxue2RsdDJ9J30KICAgICAgICAgICAgCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgbG9nZ2luZy5lcnJvcihmJ3tteXNlbGYoKX06IHtlfScpCiAgICAgICAgc2VsZi5yZXRyeShleGM9ZSkKCkBjZWxlcnkudGFzayhuYW1lPSdjb2luZXhfc2NyYXBlX2FsbCcsIGFja3NfbGF0ZT1UcnVlLCBiaW5kPVRydWUsIGRlZmF1bHRfcmV0cnlfZGVsYXk9MzAwLCBtYXhfcmV0cmllcz0yLCByZXRyeV9iYWNrb2ZmPVRydWUpCmRlZiBjb2luZXhfc2NyYXBlX2FsbChzZWxmKToKICAgIHRyeToKICAgICAgICByZXMgPSBwdXRMYXRlc3RPSExDVigpCiAgICAgICAgcmV0dXJuIHJlcwoKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBsb2dnaW5nLmVycm9yKGYne215c2VsZigpfToge2V9JykKICAgICAgICBzZWxmLnJldHJ5KGV4Yz1lKQoKQGNlbGVyeS50YXNrKG5hbWU9J2NvaW5leF9jbGVhbnVwJywgYWNrc19sYXRlPVRydWUsIGJpbmQ9VHJ1ZSwgZGVmYXVsdF9yZXRyeV9kZWxheT0zMDAsIG1heF9yZXRyaWVzPTIsIHJldHJ5X2JhY2tvZmY9VHJ1ZSkKZGVmIGNvaW5leF9jbGVhbnVwX2FsbChzZWxmKToKICAgIHRyeToKICAgICAgICByZXMgPSBjbGVhbnVwSGlzdG9yeSgpCiAgICAgICAgaWYgcmVzOgogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBsb2dnaW5nLmVycm9yKGYne215c2VsZigpfToge2V9JykKICAgICAgICBzZWxmLnJldHJ5KGV4Yz1lKQojZW5kcmVnaW9uIFJPVVRJTkcKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZyhiZWFyZXJUb2tlbikKPHxmaW1fZW5kfD4="]
["844d460a4b0e05fbf6dd57a6db09d9a6bb44ad36-2","844d460a4b0e05fbf6dd57a6db09d9a6bb44ad36","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHN5cwoKaW1wb3J0IHRyZWVmaWxlcyBhcyB0ZgoKCmRlZiBtYWluKCk6CiAgICBsb2cuaW5mbyhmIlJlY2VpdmVkIHthcmdzfSIpCgoKbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuREVCVUcpCiAgICBsb2cgPSB0Zi5nZXRfY3N2X2xvZ2dlcigpCgogICAgYXJncyA9IGpzb24ubG9hZHMoIiAiLmpvaW4oc3lzLmFyZ3ZbMTpdKSkKPHxmaW1fZW5kfD4="]
["e46eb5680e98c7f09f3f11b009ddd964a072f718-1","e46eb5680e98c7f09f3f11b009ddd964a072f718",{"$cut":{"chars":44612,"head":"PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbgojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoKIiIiVGhlIG1haW4gd2luZG93LiIiIgoKaW1wb3J0IG1hdGgKaW1wb3J0IG9zCmltcG9ydCB0a2ludGVyIGFzIHRrCmltcG9ydCB0a2ludGVyLm1lc3NhZ2Vib3ggYXMgdHRrX21lc3NhZ2Vib3gKaW1wb3J0IHRraW50ZXIuc2Nyb2xsZWR0ZXh0IGFzIHRrX3Njcm9sbGVkdGV4dAppbXBvcnQgd2ViYnJvd3Nlcgpmcm9tIHRraW50ZXIgaW1wb3J0IHR0awpmcm9tIHR5cGluZyBpbXBvcnQgKgoKaW1wb3J0IG1hcmtkb3duMgpmcm9tIHRrX2h0bWxfd2lkZ2V0cyBpbXBvcnQgSFRNTFNjcm9sbGVkVGV4dAoKZnJvbSBteV90b2RvX2FwcC5hcHAuY29uZmlnIGltcG9ydCBDb25maWcKZnJvbSBteV90b2RvX2FwcC5hcHAubW92ZXRhc2tfZGlhbG9nIGltcG9ydCBNb3ZlVGFza0RpYWxvZwpmcm9tIG15X3RvZG9fYXBwLmFwcC50YXNrbGlzdF9kaWFsb2cgaW1wb3J0IEFkZE9yRWRpdFRhc2tMaXN0RGlhbG9nCmZyb20gbXlfdG9kb19hcHAuYXBwLnRoZW1lIGltcG9ydCBUaGVtZQpmcm9tIG15X3RvZG9fYXBwLmVuZ2luZS5lbmdpbmUgaW1wb3J0IFRhc2tFbmdpbmUsIEluc2VydFRvCmZyb20gbXlfdG9kb19hcHAuZW5naW5lLnRhc2sgaW1wb3J0IFRhc2tEYXRhYmFzZQoKCmNsYXNzIE1haW5XaW5kb3c6CiAgICAiIiJBIG1haW4gd2luZG93LiIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYjogVGFza0RhdGFiYXNlLCBjb25maWc6IENvbmZpZywgaW1hZ2VzX3BhdGg6IHN0cikgLT4gTm9uZToKICAgICAgICBzZWxmLl9lbmdpbmU6IFRhc2tFbmdpbmUgPSBUYXNrRW5naW5lKGRiKQogICAgICAgIHNlbGYuX2NvbmZpZzogQ29uZmlnID0gY29uZmlnCiAgICAgICAgc2VsZi5faW1hZ2VzX3BhdGggPSBpbWFnZXNfcGF0aAogICAgICAgIHNlbGYuX2xheW91dCgpCiAgICAgICAgc2VsZi5fdXBkYXRlX3Rhc2tsaXN0X3RyZWV2aWV3KCkKCiAgICBkZWYgX2xheW91dChzZWxmKSAtPiBOb25lOgogICAgICAgIHNlbGYuX3Jvb3QgPSB0ay5UaygpCiAgICAgICAgc2VsZi5fcm9vdC50aXRsZSgnTXkgVG9kbycpCiAgICAgICAgc2VsZi5fcm9vdC5nZW9tZXRyeShzZWxmLl9jb25maWcubWFpbl93aW5kb3dfZ2VvbWV0cnkpCiAgICAgICAgaWYgc2VsZi5fY29uZmlnLm1haW5fd2luZG93X3pvb21lZDoKICAgICAgICAgICAgc2VsZi5fcm9vdC5zdGF0ZSgnem9vbWVkJykKICAgICAgICBzZWxmLl9yb290LmdyaWRfcm93Y29uZmlndXJlKDAsIHdlaWdodD0xKQogICAgICAgIHNlbGYuX3Jvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgd2VpZ2h0PTApCiAgICAgICAgc2VsZi5fcm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgxLCB3ZWlnaHQ9MCwgbWluc2l6ZT03MDApCiAgICAgICAgc2VsZi5fcm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgyLCB3ZWlnaHQ9MSkKICAgICAgICBzZWxmLl9yb290LmJpbmQoJzxBbnktS2V5UHJlc3M+Jywgc2VsZi5fa2V5X3ByZXNzZWQpCiAgICAgICAgc2VsZi5fcm9vdC5iaW5kKCI8Q29uZmlndXJlPiIsIHNlbGYuX2NvbmZpZ3VyZSkKCiAgICAgICAgU1RZTEVfVEFTS0xJU1RfVFJFRVZJRVcgPSAndGFza2xpc3RfdHJlZXZpZXcuVHJlZXZpZXcnCiAgICAgICAgU1RZTEVfVEFTS19UUkVFVklFVyA9ICd0YXNrX3RyZWV2aWV3LlRyZWV2aWV3JwogICAgICAgIFNUWUxFX0xFRlRfRlJBTUUgPSAnbGVmdC5URnJhbWUnCiAgICAgICAgU1RZTEVfQ0VOVEVSX0ZSQU1FID0gJ2NlbnRlci5URnJhbWUnCiAgICAgICAgU1RZTEVfUklHSFRfRlJBTUUgPSAncmlnaHQuVEZyYW1lJwoKICAgICAgICBzdHlsZSA9IHR0ay5TdHlsZShzZWxmLl9yb290KQogICAgICAgIHNlbGYuX3RoZW1lID0gVGhlbWUoKQogICAgICAgIHNlbGYuX3RoZW1lLmZvbnRmYW1pbHkgPSBzZWxmLl9jb25maWcudGhlbWVfZm9udGZhbWlseQogICAgICAgIHNlbGYuX3RoZW1lLm1vbm9zcGFjZWRfZm9udGZhbWlseSA9IHNlbGYuX2NvbmZpZy50aGVtZV9tb25vc3BhY2VkX2ZvbnRmYW1pbHkKICAgICAgICBzZWxmLl90aGVtZS5jb25maWd1cmVfc3R5bGUoc3R5bGUpCiAgICAgICAgc2VsZi5fdGhlbWUuY29uZmlndXJlX2FjY2VudF90cmVldmlld19zdHlsZShzdHlsZSwgU1RZTEVfVEFTS0xJU1RfVFJFRVZJRVcsIHNlbGYuX3RoZW1lLm5vcm1hbF9mb250KQogICAgICAgIHNlbGYuX3RoZW1lLmNvbmZpZ3VyZV9tYWluX3RyZWV2aWV3X3N0eWxlKHN0eWxlLCBTVFlMRV9UQVNLX1RSRUVWSUVXLCBzZWxmLl90aGVtZS5ub3JtYWxfZm9udCkKICAgICAgICBzZWxmLl90aGVtZS5jb25maWd1cmVfYWNjZW50X2ZyYW1lX3N0eWxlKHN0eWxlLCBTVFlMRV9MRUZUX0ZSQU1FKQogICAgICAgIHNlbGYuX3RoZW1lLmNvbmZpZ3VyZV9tYWluX2ZyYW1lX3N0eWxlKHN0eWxlLCBTVFlMRV9DRU5URVJfRlJBTUUpCiAgICAgICAgc2VsZi5fdGhlbWUuY29uZmlndXJlX3N1Yl9mcmFtZV9zdHlsZShzdHlsZSwgU1RZTEVfUklHSFRfRlJBTUUpCgogICAgICAgICMgQXZvaWQgVHJlZXZpZXcgYnVnOiBodHRwczovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTM2NDY4CiAgICAgICAgIyBkZWYgZml4ZWRfbWFwKG9wdGlvbik6CiAgICAgICAgIyAgICAgcmV0dXJuIFtlIGZvciBlIGluIHN0eWxlLm1hcCgnVHJlZXZpZXcnLCBxdWVyeV9vcHQ9b3B0aW9uKSBpZiBlWzoyXSAhPSAoJyFkaXNhYmxlZCcsICchc2VsZWN0ZWQnKV0KICAgICAgICAjIHN0eWxlLm1hcCgnVHJlZXZpZXcnLCBmb3JlZ3JvdW5kPWZpeGVkX21hcCgnZm9yZWdyb3VuZCcpLCBiYWNrZ3JvdW5kPWZpeGVkX21hcCgnYmFja2dyb3VuZCcpKQoKICAgICAgICBzZWxmLl9pbWFnZXMgPSBkaWN0KCkKCiAgICAgICAgZGVmIGFkZF9pbWFnZShrZXk6IHN0ciwgZmlsZW5hbWU6IHN0cik6CiAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5faW1hZ2VzX3BhdGgsIGZpbGVuYW1lKQogICAgICAgICAgICBzZWxmLl9pbWFnZXNba2V5XSA9IHRrLlBob3RvSW1hZ2UoZmlsZT1wYXRoKQoKICAgICAgICBhZGRfaW1hZ2UoJ2ljb25fYWRkX2FjY2VudCcsICdpY19hZGRfY2ly"}}]
["3e8c39e8d725ce4c38b8be9a41fc7a103ed02325-2","3e8c39e8d725ce4c38b8be9a41fc7a103ed02325","PHxmaW1fcHJlZml4fD4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cAoKd2l0aCBvcGVuKCJSRUFETUUubWQiLCAiciIpIGFzIGZoOgogICAgbG9uZ19kZXNjcmlwdGlvbiA9IGZoLnJlYWQoKQoKc2V0dXAoCiAgICBuYW1lICAgICAgICAgPSAibnB0IiwKICAgIHZlcnNpb24gICAgICA9ICIwLjEuMCIsCiAgICBhdXRob3IgICAgICAgPSAiQ29saW4gUGVya2lucyIsCiAgICBhdXRob3JfZW1haWwgPSAiY3NwQGNzcGVya2lucy5vcmciLAogICAgZGVzY3JpcHRpb24gID0gIkFjY2VzcyB0aGUgSUVURiBEYXRhIFRyYWNrZXIgYW5kIFJGQyBJbmRleCIsCiAgICBsb25nX2Rlc2NyaXB0aW9uID0gbG9uZ19kZXNjcmlwdGlvbiwKICAgIGxvbmdfZGVzY3JpcHRpb25fY29udGVudF90eXBlPSJ0ZXh0L21hcmtkb3duIiwKICAgIHVybD0iaHR0cHM6Ly9naXRodWIuY29tL2dsYXNnb3ctaXBsL2lwcy1wcm90b2Rlc2MtY29kZSIsCiAgICBwYWNrYWdlcyA9IFsnbnB0J10sCiAgICBwYWNrYWdlX2RhdGEgPSB7CiAgICAgICAgJ25wdCc6IFsncHkudHlwZWQnLCAnZ3JhbW1hcl9yZmMudHh0JyAsICdncmFtbWFyX2FzY2lpZGlhZ3JhbXMudHh0J10sCjx8ZmltX2hvbGV8PgogICAgICAgIF0KICAgIH0sCiAgICBjbGFzc2lmaWVycz1bCiAgICAgICAgIlByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzIiwKICAgICAgICAiTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogQlNEIExpY2Vuc2UiLAogICAgICAgICJPcGVyYXRpbmcgU3lzdGVtIDo6IE9TIEluZGVwZW5kZW50IiwKICAgIF0sCiAgICBweXRob25fcmVxdWlyZXM9Jz49My43JwopCgo8fGZpbV9zdWZmaXh8PgogICAgfSwKICAgIGVudHJ5X3BvaW50cyA9IHsKICAgICAgICAnY29uc29sZV9zY3JpcHRzJzogWwogICAgICAgICAgICAnbnB0ID0gbnB0Ll9fbWFpbl9fOm1haW4nCjx8ZmltX2VuZHw+"]
["e428e3dfdb06bb4a041a9280b780dcb5cc3b161c-3","e428e3dfdb06bb4a041a9280b780dcb5cc3b161c","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojLSotIGNvZGluZzogdXRmLTggLSotCgojIGltcG9ydCB0aGUgTW9uZ29DbGllbnQgY2xhc3MKZnJvbSB4bWxycGMuY2xpZW50IGltcG9ydCBib29sZWFuCmZyb20gcHltb25nbyBpbXBvcnQgTW9uZ29DbGllbnQsIGVycm9ycwppbXBvcnQgb3MKCmZyb20gZmxhc2sgaW1wb3J0IEZsYXNrLCByZXF1ZXN0LCBqc29uaWZ5CmFwcCA9IEZsYXNrKF9fbmFtZV9fKQoKCiMgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgTW9uZ29EQiBob3N0IChkZWZhdWx0IHBvcnQgaXMgMjcwMTcpCkRPTUFJTiA9ICcxNzIuMTguMC4yJwpQT1JUID0gMjcwMTcKCmNsaWVudCA9IE1vbmdvQ2xpZW50KAogICAgICAgICAgICBob3N0ID0gWyBzdHIoRE9NQUlOKSArICI6IiArIHN0cihQT1JUKSBdLAogICAgICAgICAgICBzZXJ2ZXJTZWxlY3Rpb25UaW1lb3V0TVMgPSAzMDAwLCAjIDMgc2Vjb25kIHRpbWVvdXQKICAgICAgICAgICAgdXNlcm5hbWUgPSAicm9vdCIsCiAgICAgICAgICAgIHBhc3N3b3JkID0gIjEyMzQiLAogICAgICAgICkKCnByaW50ICgic2VydmVyIHZlcnNpb246IiwgY2xpZW50LnNlcnZlcl9pbmZvKClbInZlcnNpb24iXSkKZGF0YWJhc2VfbmFtZXMgPSBjbGllbnQubGlzdF9kYXRhYmFzZV9uYW1lcygpCgpkYiA9IGNsaWVudC5tZXNzYWdlcwpjb2xsZWN0aW9uID0gZGIuY29sbGVjdGlvbgoKCkBhcHAucm91dGUoJy8nKQpkZWYgcm9vdCgpOgogICAgcmV0dXJuICdNRVNTQUdFIFNFUlZJQ0UnCgoKZGVmIG1hcmtfb2xkKG1lc3NhZ2UsIHJlY2lwaWVudCk6CiAgICBwcmVzZW50X3JlY29yZCA9IGNvbGxlY3Rpb24uZmluZF9vbmUoeyJtZXNzYWdlIiA6IG1lc3NhZ2V9LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7InJlY2lwaWVudCIgOiByZWNpcGllbnR9KQogICAgbmV3X3JlY29yZCA9IHsnJHNldCc6eyJuZXdfc3RhdGUiIDogRmFsc2V9fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICBjb2xsZWN0aW9uLnVwZGF0ZV9vbmUocHJlc2VudF9yZWNvcmQsIG5ld19yZWNvcmQpCiAgICAKCmRlZiBtYXJrX25ldyhtZXNzYWdlLCByZWNpcGllbnQpOgogICAgcHJlc2VudF9yZWNvcmQgPSBjb2xsZWN0aW9uLmZpbmRfb25lKHsibWVzc2FnZSIgOiBtZXNzYWdlfSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJyZWNpcGllbnQiIDogcmVjaXBpZW50fSkKICAgIG5ld19yZWNvcmQgPSB7JyRzZXQnOnsibmV3X3N0YXRlIiA6IFRydWV9fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICBjb2xsZWN0aW9uLnVwZGF0ZV9vbmUocHJlc2VudF9yZWNvcmQsIG5ld19yZWNvcmQpCgoKZGVmIGRlbGV0ZV9zaW5nbGUobWVzc2FnZSk6CiAgICBjb2xsZWN0aW9uLmRlbGV0ZV9vbmUoeyJtZXNzYWdlIiA6IG1lc3NhZ2V9KQoKCmRlZiBkZWxldGVfbXVsdGlwbGUocmVjaXBpZW50KToKICAgIGNvbGxlY3Rpb24uZGVsZXRlX21hbnkoeyJyZWNpcGllbnQiIDogcmVjaXBpZW50fSkKICAgIAoKQGFwcC5yb3V0ZSgnL21lc3NhZ2VzL3NlbmQnLCBtZXRob2RzPVsnUE9TVCddKQpkZWYgc3RvcmVfbWVzc2FnZSgpOgogICAgcmVxdWVzdF9qc29uID0gcmVxdWVzdC5nZXRfanNvbigpCiAgICBwcmludChyZXF1ZXN0X2pzb24pCiAgICAKICAgICMgaWYgcmVxdWVzdF9qc29uID09IE5vbmU6CiAgICAjICAgICByZXR1cm4ganNvbmlmeSh7J2Vycm9yJzoiTm8gdmFsaWQgSlNPTiBib2R5IHNlbnQuIn0pCgogICAgcHJpbnQoIlNlbmRpbmcgbWVzc2FnZS4uIikKICAgICMgbWVzc2FnZV9yZWNvcmQgPSB7CiAgICAjICAgICAibWVzc2FnZSIgOiBtZXNzYWdlLAogICAgIyAgICAgInJlY2lwaWVudCIgOiByZWNpcGllbnQsCiAgICAjICAgICAibmV3X3N0YXRlIiA6IFRydWUKICAgICMgfQogICAgIyBjb2xsZWN0aW9uLmluc2VydF9vbmUobWVzc2FnZV9yZWNvcmQpCgoKQGFwcC5yb3V0ZSgnL21lc3NhZ2VzJykKZGVmIGZldGNoX2FsbCgpOgogICAgcHJpbnQoIkxpc3RpbmcgYWxsIG1lc3NhZ2VzOiIpCiAgICByZXN1bHQgPSBjb2xsZWN0aW9uLmZpbmQoe30pCiAgICBtZXNzYWdlc19saXN0ID0gbGlzdCgpCgogICAgZm9yIGRvY3VtZW50IGluIHJlc3VsdDoKICAgICAgICBwcmludChkb2N1bWVudCkKICAgICAgICBtZXNzYWdlc19saXN0ID0gbGlzdC5hcHBlbmQoZG9jdW1lbnQpCgogICAgcmV0dXJuIGpzb25pZnkobWVzc2FnZXNfbGlzdCkKCgo8fGZpbV9ob2xlfD4KICAgIGZvciBkb2N1bWVudCBpbiByZXN1bHQ6CiAgICAgICAgcHJpbnQoZG9jdW1lbnQpCiAgICByZXR1cm4gcmVzdWx0CgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW4oKQo8fGZpbV9zdWZmaXh8PgpAYXBwLnJvdXRlKCcvbWVzc2FnZXMvbmV3JykKZGVmIGZldGNoX25ldygpOgogICAgcHJpbnQoIkxpc3RpbmcgbmV3IG1lc3NhZ2VzOiIpCiAgICByZXN1bHQgPSBjb2xsZWN0aW9uLmZpbmQoeyJuZXdfc3RhdGUiIDogVHJ1ZX0pCjx8ZmltX2VuZHw+"]
["84143684edd05879143ef97171476156f0fa04e0-2","84143684edd05879143ef97171476156f0fa04e0","PHxmaW1fcHJlZml4fD4KZnJvbSBtb2RlbC5oaWVyYXJjaF9tb2RlbCBpbXBvcnQgSGllcmFyY2hfTUVHTmV0TW9kZWwsIEhpZXJhcmNoR3JhcGhNb2RlbApmcm9tIG1vZGVsLmRhdGEuZ3JhcGggaW1wb3J0IEdhdXNzaWFuRGlzdGFuY2UKZnJvbSBtb2RlbC5kYXRhLmNyeXN0YWwgaW1wb3J0IENyeXN0YWxHcmFwaApmcm9tIG1vZGVsLnV0aWxzLnByZXByb2Nlc3NpbmcgaW1wb3J0IGdldF9ncmFwaF9mcm9tX3NjaG5ldF9kYXRhCmZyb20gbW9kZWwubGF5ZXJzIGltcG9ydCBfQ1VTVE9NX09CSkVDVFMKZnJvbSB0ZW5zb3JmbG93LmtlcmFzLmJhY2tlbmQgaW1wb3J0IHJlbHUKZnJvbSB0ZW5zb3JmbG93LmtlcmFzLm1vZGVscyBpbXBvcnQgbG9hZF9tb2RlbAoKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBpY2tsZSBhcyBwa2wKaW1wb3J0IHNodXRpbAppbXBvcnQgb3MKaW1wb3J0IGdsb2IKaW1wb3J0IGFyZ3BhcnNlCgpmcm9tIG51bXB5LnJhbmRvbSBpbXBvcnQgc2VlZAppbXBvcnQgdGVuc29yZmxvdyBhcyB0ZgpzZWVkKDk5OSkKdGYucmFuZG9tLnNldF9zZWVkKDQyKQoKIiIiClBhcnNlIGlucHV0IGFyZ3VtZW50cwoiIiIKcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J1RyYWluIEFNRC1OZXQnKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW1hdGVyaWFsX2ZpbGUnLAogICAgICAgICAgICAgICAgICAgIGhlbHA9J2RhdGFzZXQgd2l0aCBtYXRlcmlhbCBpbmZvcm1hdGlvbicsIHR5cGU9c3RyKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW1vdGlmX2ZpbGUnLAogICAgICAgICAgICAgICAgICAgIGhlbHA9J21vdGlmIGluZm9ybWF0aW9uIGZvciBlYWNoIG1hdGVyaWFsJywgdHlwZT1zdHIpCnBhcnNlci5hZGRfYXJndW1lbnQoJy0tc2F2ZV9uYW1lJywKICAgICAgICAgICAgICAgICAgICBoZWxwPSd3aGVyZSB0byBzYXZlIHRoZSBtb2RlbCcsIHR5cGU9c3RyKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXByZWRpY3QnLCBkZWZhdWx0PSdiYW5kX2dhcCcsCiAgICAgICAgICAgICAgICAgICAgaGVscD0nYXR0cmlidXRlIHRvIHByZWRpY3QgKGJhbmRfZ2FwIG9yIGZvcm1hdGlvbl9lbmVyZ3lfcGVyX2F0b20pJywgdHlwZT1zdHIpCnBhcnNlci5hZGRfYXJndW1lbnQoJy0tZXBvY2hzJywgZGVmYXVsdD0xMDAwLAogICAgICAgICAgICAgICAgICAgIGhlbHA9J21heGltdW0gbnVtYmVycyBvZiBlcG9jaHMnLCB0eXBlPWludCkKcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1wYXRpZW5jZScsIGRlZmF1bHQ9MTAwLAogICAgICAgICAgICAgICAgICAgIGhlbHA9J3N0b3AgdHJhaW5pbmcgaWYgbm8gaW1wcm92ZW1lbnQgZm9yIG51bWJlciBvZiBlcG9jaHMnLCB0eXBlPWludCkKcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1sZWFybmluZ19yYXRlJywgZGVmYXVsdD0wLjAwMDA1LAogICAgICAgICAgICAgICAgICAgIGhlbHA9J2xlYXJuaW5nIHJhdGUgaW4gdHJhaW5pbmcnLCB0eXBlPWZsb2F0KQpwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJhdGNoX3NpemUnLCBkZWZhdWx0PTMyLAogICAgICAgICAgICAgICAgICAgIGhlbHA9J2JhdGNoIHNpemUgZHVyaW5nIHRyYWluaW5nJywgdHlwZT1pbnQpCnBhcnNlci5hZGRfYXJndW1lbnQoJy0tYXRvbV9jdXRvZmYnLCBkZWZhdWx0PTUuLAogICAgICAgICAgICAgICAgICAgIGhlbHA9J2N1dG9mZiBmb3IgYXRvbSBkaXN0YW5jZSB0aGF0IGFyZSBjb25zaWRlcmVkIGNvbm5lY3RlZCBpbiB0aGUgZ3JhcGgnLCB0eXBlPWZsb2F0KQpwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW1vdGlmX2N1dG9mZicsIGRlZmF1bHQ9MTEuLAogICAgICAgICAgICAgICAgICAgIGhlbHA9J2N1dG9mZiBmb3IgbW90aWYgZGlzdGFuY2UgdGhhdCBhcmUgY29uc2lkZXJlZCBjb25uZWN0ZWQgaW4gdGhlIGdyYXBoJywgdHlwZT1mbG9hdCkKcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1yYmZfZWRnZV9kaW1fYXRvbScsIGRlZmF1bHQ9MTAwLAogICAgICAgICAgICAgICAgICAgIGhlbHA9J2RpbWVuc2lvbiBvZiBSQkYgKHJhZGlhbCBiYXNpcyBmdW5jdGlvbikgZm9yIGF0b21zJywgdHlwZT1pbnQpCnBhcnNlci5hZGRfYXJndW1lbnQoJy0tcmJmX2VkZ2VfZGltX21vdGlmJywgZGVmYXVsdD0xMDAsCiAgICAgICAgICAgICAgICAgICAgaGVscD0nZGltZW5zaW9uIG9mIFJCRiAocmFkaWFsIGJhc2lzIGZ1bmN0aW9uKSBmb3IgbW90aWZzJywgdHlwZT1pbnQpCgphcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQoKdHJhaW5pbmdfcGF0aWVuY2UgPSBhcmdzLnBhdGllbmNlCm1heF9lcG9jaHMgPSBhcmdzLmVwb2NocwpwcmVkaWN0ID0gYXJncy5wcmVkaWN0CmF0b21fY3V0b2ZmID0gYXJncy5hdG9tX2N1dG9mZgptb3RpZl9jdXRvZmYgPSBhcmdzLm1vdGlmX2N1dG9mZgpyYmZfZWRnZV9kaW1fYXRvbSA9IGFyZ3MucmJmX2VkZ2VfZGltX2F0b20KcmJmX2VkZ2VfZGltX21vdGlmID0gYXJncy5yYmZfZWRnZV9kaW1fbW90aWYKbGVhcm5pbmdfcmF0ZSA9IGFyZ3MubGVhcm5pbmdfcmF0ZQpiYXRjaF9zaXplID0gYXJncy5iYXRjaF9zaXplCm1hdGVyaWFsX2ZpbGUgPSBhcmdzLm1hdGVyaWFsX2ZpbGUKbW90aWZfZmlsZSA9IGFyZ3MubW90aWZfZmlsZQpzYXZlX25hbWUgPSBhcmdzLnNhdmVfbmFtZQoKZGVmIGxvYWRfYW5kX3NhdmVfYmVzdChtb2RlbCk6CiAgICAjIGxvYWQgYmVzdCBtb2RlbAogICAgbGlzdF9vZl9maWxlcyA9IGdsb2IuZ2xvYignY2FsbGJhY2svKicpCiAgICBsYXRlc3RfZmlsZSA9IG1heChsaXN0X29mX2ZpbGVzLCBrZXk9b3MucGF0aC5nZXRjdGltZSkKICAgIHByaW50KGxhdGVzdF9maWxlKQogICAgbG9hZGVkX21vZGVsID0gbG9hZF9tb2RlbChsYXRlc3RfZmlsZSwgY3VzdG9tX29iamVjdHM9X0NVU1RPTV9PQkpFQ1RTKQogICAgY29uZmlnID0gewo8fGZpbV9ob2xlfD4KICAgICAgICAnbW9kZWwnOiBsb2FkZWRfbW9kZWwKICAgIH0KICAgIGJlc3RfbW9kZWwgPSBIaWVyYXJjaEdyYXBoTW9kZWwoKipjb25maWcpCiAgICAKICAgIGJlc3RfbW9kZWwuc2F2ZV9tb2RlbChzYXZlX25hbWUpCiAgICAKICAgIHJldHVybiBiZXN0X21vZGVsCgogICAgIAojIGxvYWQgZGF0YQoobWF0ZXJpYWxzLCBzcGxpdHMpID0gcGtsLmxvYWQoIG9wZW4obWF0ZXJpYWxfZmlsZSwgJ3JiJykgKQp0cmFpbl9taWRzLCB2YWxpZGF0ZV9taWRzLCB0ZXN0X21pZHMgPSBzcGxpdHMKCmF0b21fZ3JhcGhfY29udmVydGVyID0gQ3J5c3RhbEdyYXBoKGN1dG9mZj1hdG9tX2N1dG9mZiwgCiAgICBib25kX2NvbnZlcnRlcj1HYXVzc2lhbkRpc3RhbmNlKG5wLmxpbnNwYWNlKDAsIGF0b21fY3V0b2ZmLCByYmZfZWRnZV9kaW1fYXRvbSksIDAuNSkpCgptb3RpZl9ncmFwaF9jb252ZXJ0ZXIgPSBDcnlzdGFsR3JhcGgoY3V0b2ZmPW1vdGlmX2N1dG9mZiwgCiAgICBib25kX2NvbnZlcnRlcj1HYXVzc2lhbkRpc3RhbmNlKG5wLmxpbnNwYWNlKDAsIG1vdGlmX2N1dG9mZiwgcmJmX2VkZ2VfZGltX21vdGlmKSwgMC41KSkKCgpwcmludCgnZ2V0IGRhdGEnKQptb3RpZl9kYXRhID0gcGQuRGF0YUZyYW1lKCBwZC5yZWFkX3BpY2tsZShtb3RpZl9maWxlKSApCm1vdGlmX2RhdGEuc2V0X2luZGV4KCdfbWlkJywgaW5wbGFjZT1UcnVlKQoKcHJpbnQoJ2NvbnZlcnQgZGF0YScpCnRyYWluX2dyYXBoc19tb3RpZiA9IFtdCnRyYWluX2dyYXBoc19hdG9tID0gW10KdHJhaW5fdGFyZ2V0cyA9IFtdCm1pZHMgPSB0cmFpbl9taWRzCmZvciBtaWQgaW4gbWlkczoKICAgIGlmIG1pZCBpbiBtb3RpZl9kYXRhLmluZGV4OgogICAgICAgIHRyeToKICAgICAgICAgICAgbGFiZWwgPSBtb3RpZl9kYXRhLmxvY1ttaWQsICJfIiArIHByZWRpY3RdWzAsIDBdICAgICAgICAgICAgCiAgICAgICAgICAgIG1vdGlmX2dyYXBoLCBtb3RpZl9kaW0gPSBnZXRfZ3JhcGhfZnJvbV9zY2huZXRfZGF0YShtb3RpZl9kYXRhLmxvY1ttaWRdKSAgICAgICAgICAgIAogICAgICAgICAgICBhdG9tX2dyYXBoID0gYXRvbV9ncmFwaF9jb252ZXJ0ZXIuY29udmVydCggbWF0ZXJpYWxzLmxvY1ttaWQsICdzdHJ1Y3R1cmUnXSApCiAgICAgICAgICAgIAogICAgICAgICAgICB0cmFpbl90YXJnZXRzLmFwcGVuZChsYWJlbCkKICAgICAgICAgICAgdHJhaW5fZ3JhcGhzX21vdGlmLmFwcGVuZChtb3RpZl9ncmFwaCkKICAgICAgICAgICAgdHJhaW5fZ3JhcGhzX2F0b20uYXBwZW5kKGF0b21fZ3JhcGgpCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAjIGlzb2xhdGVkIGF0b21zLCBkb24ndCB1c2UgdGhpcyBtYXRlcmlhbAogICAgICAgICAgICBwcmludChmJ2NvdWxkIG5vdCBwcm9jZXNzIHttaWR9LiBjaGVjayBmb3IgaXNvbGF0ZWQgYXRvbXMnKQogICAgICAgICAgICBjb250aW51ZQoKdmFsaWRhdGVfZ3JhcGhzX21vdGlmID0gW10KdmFsaWRhdGVfZ3JhcGhzX2F0b20gPSBbXQp2YWxpZGF0ZV90YXJnZXRzID0gW10KbWlkcyA9IHZhbGlkYXRlX21pZHMKZm9yIG1pZCBpbiBtaWRzOgogICAgaWYgbWlkIGluIG1vdGlmX2RhdGEuaW5kZXg6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBsYWJlbCA9IG1vdGlmX2RhdGEubG9jW21pZCwgIl8iICsgcHJlZGljdF1bMCwgMF0KICAgICAgICAgICAgZ3JhcGgsIG1vdGlmX2RpbSA9IGdldF9ncmFwaF9mcm9tX3NjaG5ldF9kYXRhKG1vdGlmX2RhdGEubG9jW21pZF0pICAgICAgICAgICAgCiAgICAgICAgICAgIGF0b21fZ3JhcGggPSBhdG9tX2dyYXBoX2NvbnZlcnRlci5jb252ZXJ0KCBtYXRlcmlhbHMubG9jW21pZCwgJ3N0cnVjdHVyZSddICkKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhbGlkYXRlX3RhcmdldHMuYXBwZW5kKGxhYmVsKQogICAgICAgICAgICB2YWxpZGF0ZV9ncmFwaHNfbW90aWYuYXBwZW5kKGdyYXBoKQogICAgICAgICAgICB2YWxpZGF0ZV9ncmFwaHNfYXRvbS5hcHBlbmQoYXRvbV9ncmFwaCkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICMgaXNvbGF0ZWQgYXRvbXMsIGRvbid0IHVzZSB0aGlzIG1hdGVyaWFsCiAgICAgICAgICAgIGNvbnRpbnVlCnByaW50KCdpbml0aWFsaXppbmcgbW9kZWxzLi4uJykKCm1vZGVsID0gSGllcmFyY2hfTUVHTmV0TW9kZWwobmZlYXRfZWRnZV9hdG9tPXJiZl9lZGdlX2RpbV9hdG9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5mZWF0X25vZGVfYXRvbT1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5mZWF0X2VkZ2VfbW90aWY9cmJmX2VkZ2VfZGltX21vdGlmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5mZWF0X25vZGVfbW90aWY9bW90aWZfZGltLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fb3V0cHV0X2VtYmVkZGluZyA9IDE2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fbGFzdF9sYXllciA9IDMyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxyID0gbGVhcm5pbmdfcmF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3QgPSByZWx1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0b21fZ3JhcGhfY29udmVydGVyPWF0b21fZ3JhcGhfY29udmVydGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdGlmX2dyYXBoX2NvbnZlcnRlcj1tb3RpZl9ncmFwaF9jb252ZXJ0ZXIpCgojIGJlZm9yZSB0cmFpbmluZzogZGVsZXRlIGNhbGxiYWNrIGZvbGRlciB0byBtYWtlIHN1cmUgZWFybHkgc3RvcHBpbmcgd29ya3MKaWYgb3MucGF0aC5leGlzdHMoJ2NhbGxiYWNrLycpOgogICAgc2h1dGlsLnJtdHJlZSgnY2FsbGJhY2svJykKb3MubWFrZWRpcnMoJ2NhbGxiYWNrLycpCgojIHRyYWluCmhpc3RvcnkgPSBtb2RlbC50cmFpbl9mcm9tX2dyYXBocyh0cmFpbl9ncmFwaHNfYXRvbSwgdHJhaW5fZ3JhcGhzX21vdGlmLCB0cmFpbl90YXJnZXRzLAogICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZV9ncmFwaHNfYXRvbSwgdmFsaWRhdGVfZ3JhcGhzX21vdGlmLCB2YWxpZGF0ZV90YXJnZXRzLAogICAgICAgICAgICAgICAgICAgICAgICBlcG9jaHM9bWF4X2Vwb2NocywgYmF0Y2hfc2l6ZSA9IGJhdGNoX3NpemUsIAogICAgICAgICAgICAgICAgICAgICAgICBwYXRpZW5jZSA9IHRyYWluaW5nX3BhdGllbmNlLCB2ZXJib3NlPTIpCgpiZXN0X21vZGVsID0gbG9hZF9hbmRfc2F2ZV9iZXN0KG1vZGVsKQoKCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgJ2F0b21fZ3JhcGhfY29udmVydGVyJzogbW9kZWwuYXRvbV9ncmFwaF9jb252ZXJ0ZXIsCiAgICAgICAgJ21vdGlmX2dyYXBoX2NvbnZlcnRlcic6IG1vZGVsLm1vdGlmX2dyYXBoX2NvbnZlcnRlciwKICAgICAgICAndGFyZ2V0X3NjYWxlcic6IG1vZGVsLnRhcmdldF9zY2FsZXIsCiAgICAgICAgJ21ldGFkYXRhJzogbW9kZWwubWV0YWRhdGEsIAo8fGZpbV9lbmR8Pg=="]
["de431d2a86340f75dd34ff40d910777f98bee0e6-3","de431d2a86340f75dd34ff40d910777f98bee0e6","PHxmaW1fcHJlZml4fD4KIiIiTW9kdWxlIHRvIGhhbmRsZSBvdmVyIHJ1bm5pbmcgb2YgZGF0YXNldCBjb252ZXJzaW9ucyIiIgoKCmltcG9ydCBiaW9zCmltcG9ydCBjbGljawoKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCgpmcm9tIG1hdGF0aWthLmRhdGFzZXQgaW1wb3J0IERhdGFzZXQKZnJvbSBtYXRhdGlrYSBpbXBvcnQgY2hhcnRqcwpmcm9tIGlwbG90dGVyIGltcG9ydCBDaGFydEpTUGxvdHRlcgoKZnJvbSBtYXRhdGlrYV9kYXRhc2V0X2NvbnZlcnRlci5leHBvcnRfdG9fbWQgaW1wb3J0IGNvbnZlcnRfZXhwb3J0X2RhdGFzZXQKZnJvbSBtYXRhdGlrYV9kYXRhc2V0X2NvbnZlcnRlci5nb29nbGVfdGFibGVfdG9fbWQgaW1wb3J0IGNvbnZlcnRfZ29vZ2xlX3RhYmxlX2RhdGFzZXQKZnJvbSBtYXRhdGlrYV9kYXRhc2V0X2NvbnZlcnRlci5jaGFydGpzX3RvX2h0bWwgaW1wb3J0IGNvbnZlcnRfY2hhcnRqc19kYXRhc2V0CgpwbG90dGVyID0gQ2hhcnRKU1Bsb3R0ZXIoKQoKCmRlZiBjb252ZXJ0X2FsbChkYXRhc2V0X2Rpcl9wYXRoLCByYXdkYXRhX2Rpcl9wYXRoLCBvdXRwdXRfZGlyX3BhdGgpOgoKICAgIGlmIG5vdCBvdXRwdXRfZGlyX3BhdGguZXhpc3RzKCk6CiAgICAgICAgb3V0cHV0X2Rpcl9wYXRoLm1rZGlyKHBhcmVudHM9VHJ1ZSkKCiAgICBmb3IgZmlsZSBpbiBkYXRhc2V0X2Rpcl9wYXRoLml0ZXJkaXIoKToKICAgICAgICBpZiBmaWxlLm5hbWUuZW5kc3dpdGgoIi55YW1sIikgb3IgZmlsZS5uYW1lLmVuZHN3aXRoKCIueW1sIik6CgogICAgICAgICAgICB5YW1sX2RpY3QgPSBiaW9zLnJlYWQoc3RyKGZpbGUuYWJzb2x1dGUoKSkpCgogICAgICAgICAgICBuZXdfZGF0YXNldCA9IERhdGFzZXQuZnJvbV9kaWN0KHlhbWxfZGljdCkKCiAgICAgICAgICAgIHlhbWxfZmlsZV9uYW1lID0gUGF0aChmaWxlKS5zdGVtCgogICAgICAgICAgICAjIG15X2RhdGFzZXRfY2hhcnQgPSBOb25lCgogICAgICAgICAgICBkYXRhc2V0X2RpY3QgPSBuZXdfZGF0YXNldC50b19kaWN0KCkKCiAgICAgICAgICAgIHZpc3VhbGlzYXRpb24gPSBkYXRhc2V0X2RpY3QuZ2V0KCJ2aXN1YWxpc2F0aW9uIikKCiAgICAgICAgICAgIGlmIG5vdCB2aXN1YWxpc2F0aW9uOgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgZWxpZiAiZ29vZ2xlIiBpbiB2aXN1YWxpc2F0aW9uOgogICAgICAgICAgICAgICAgY29udmVydF9nb29nbGVfdGFibGVfZGF0YXNldCgKICAgICAgICAgICAgICAgICAgICBkYXRhc2V0X2RpY3QsIHlhbWxfZmlsZV9uYW1lLCBvdXRwdXRfZGlyX3BhdGgKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgZWxpZiAiY2hhcnRqcyIgaW4gdmlzdWFsaXNhdGlvbjoKICAgICAgICAgICAgICAgIGNvbnZlcnRfY2hhcnRqc19kYXRhc2V0KAogICAgICAgICAgICAgICAgICAgIG5ld19kYXRhc2V0LAogICAgICAgICAgICAgICAgICAgIGRhdGFzZXRfZGljdCwKICAgICAgICAgICAgICAgICAgICB5YW1sX2ZpbGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICByYXdkYXRhX2Rpcl9wYXRoLAogICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXJfcGF0aCwKICAgICAgICAgICAgICAgICkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIGNsaWNrLnNlY2hvKGYiRGlkIG5vdCBjb252ZXJ0IHt5YW1sX2ZpbGVfbmFtZX0iLCBmZz0icmVkIikKICAgICAgICAgICAgICAgIGNvbnRpbnVlCjx8ZmltX2VuZHw+"]
["e4cf2474ca0cd86e03da85b3bf8b8d56b31d560c-1","e4cf2474ca0cd86e03da85b3bf8b8d56b31d560c","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwo8fGZpbV9ob2xlfD4KCmZyb20gc25hcHMuTm90aWZpY2F0aW9uIGltcG9ydCBTY3JlZW5zaG90Tm90aWZpY2F0aW9uCmZyb20gc25hcHMuU2NyZWVuc2hvdCBpbXBvcnQgU2NyZWVuc2hvdAoKCmRlZiBtYWluKCk6CgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J1NOQVBTIHVzZXMgdGhlIG5vdGlmaWNhdGlvbiBzeXN0ZW0gdG8gcHJvbXB0IHVzZXJzIGZvciBhbiBhY3Rpb24gcG9zdC1zY3JlZW5zaG90LicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXZlcnNpb24nLCBhY3Rpb249J3ZlcnNpb24nLCB2ZXJzaW9uPWYne19fcGFja2FnZV9uYW1lX199IHtfX3ZlcnNpb25fX30nKQoKICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCgogICAgaW1hZ2VfbmFtZSA9IFNjcmVlbnNob3QoKS5jYXB0dXJlKCkKICAgIFNjcmVlbnNob3ROb3RpZmljYXRpb24oc3VtbWFyeT0nU2NyZWVuc2hvdCB0YWtlbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk9J1doYXQgYWN0aW9uIHdvdWxkIHlvdSBsaWtlIHRvIHRha2U/JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9kYXRhPXsnaW1hZ2VfbmFtZSc6IGltYWdlX25hbWV9KQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KaW1wb3J0IGFyZ3BhcnNlCgpmcm9tIHNuYXBzIGltcG9ydCBfX3BhY2thZ2VfbmFtZV9fCmZyb20gc25hcHMgaW1wb3J0IF9fdmVyc2lvbl9fCjx8ZmltX2VuZHw+"]
["9010a7cf5de037ba63b3474bce364210a08a4340-1","9010a7cf5de037ba63b3474bce364210a08a4340","PHxmaW1fcHJlZml4fD4KIwojIHRlbXBvR0FOOiBBIFRlbXBvcmFsbHkgQ29oZXJlbnQsIFZvbHVtZXRyaWMgR0FOIGZvciBTdXBlci1yZXNvbHV0aW9uIEZsdWlkIEZsb3cKIyBDb3B5cmlnaHQgMjAxOCBZb3UgWGllLCBFcmlrIEZyYW56LCBNZW5neXUgQ2h1LCBOaWxzIFRodWVyZXkKIwojIFBsdW1lIGRhdGEgZ2VuZXJhdGlvbiwgM0QKIwoKZnJvbSBtYW50YSBpbXBvcnQgKgppbXBvcnQgb3MsIHNodXRpbCwgbWF0aCwgc3lzLCB0aW1lCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCnN5cy5wYXRoLmFwcGVuZCgiLi4vdG9vbHMiKQppbXBvcnQgcGFyYW1oZWxwZXJzIGFzIHBoCmltcG9ydCB1bmlpbwoKb3V0cHV0cGF0aCA9ICIuLi8zZGRhdGFfc2ltX3Rlc3QvIiAjIGRlZmF1bHQgdGFyZ2V0LCBidXQgYWN0dWFsIHBhdGggc2V0IGJ5IGdldE5leHRTaW1QYXRoIGJlbG93IApzaW1ObyAgICAgICAgICAgPSAgICAgMzAwNgpvdXRwdXRwYXRoLHNpbU5vID0gcGguZ2V0TmV4dFNpbVBhdGgoc2ltTm8sIG91dHB1dHBhdGgpCmJhc2VQYXRoICAgICAgICA9ICAgICBwaC5nZXRQYXJhbSggImJhc2VQYXRoIiwgICAgICAgICIuLi9kYXRhLyIgICAgICAgICkKc2F2ZWRhdGEJCT0gaW50KHBoLmdldFBhcmFtKCAic2F2ZWRhdGEiLCAgICAgICAgMSkpPjAKCmRlZiBjdWJlU2V0dXAoIGxlbiwgc2V0dXBGYWN0b3IsIGRpbSApOgoJcmVzID0gaW50KHNldHVwRmFjdG9yKmxlbikKCWdzID0gdmVjMyhyZXMscmVzLHJlcykKCWlmIChkaW09PTIpOiBncy56ID0gMSAgIyAyRCB0ZXN0CgoJbWFpbkR0ID0gMC41CglzID0gRmx1aWRTb2x2ZXIobmFtZT0nbWFpbicsIGdyaWRTaXplID0gZ3MsIGRpbSA9IGRpbSkKCXMudGltZXN0ZXAgPSBtYWluRHQvaW50KHNldHVwRmFjdG9yKQoKCXZlbAkgPSBzLmNyZWF0ZShNQUNHcmlkKQoJZmxhZ3MgICA9IHMuY3JlYXRlKEZsYWdHcmlkKQoJZGVuc2l0eSA9IHMuY3JlYXRlKFJlYWxHcmlkKQoJcHJlc3N1cmU9IHMuY3JlYXRlKFJlYWxHcmlkKQoJdm9ydGljaXR5PSBzLmNyZWF0ZShWZWMzR3JpZCkjdm9ydGljaXR5Cglub3JtICAgICA9IHMuY3JlYXRlKFJlYWxHcmlkKQoKCWJXaWR0aD0xICogc2V0dXBGYWN0b3IKCWZsYWdzLmluaXREb21haW4oYm91bmRhcnlXaWR0aD1iV2lkdGgpCglmbGFncy5maWxsR3JpZCgpCglzZXRPcGVuQm91bmQoZmxhZ3MsIGJXaWR0aCwneFh5WXpaJyxGbGFnT3V0Zmxvd3xGbGFnRW1wdHkpIAoKCSMgbm9pc2UgZmllbGQKCW5vaXNlID0gcy5jcmVhdGUoTm9pc2VGaWVsZCwgZml4ZWRTZWVkPTI2NSwgbG9hZEZyb21GaWxlPVRydWUpCglub2lzZS5wb3NTY2FsZSA9IHZlYzMoMTUpCglub2lzZS5jbGFtcCA9IFRydWUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoJbm9pc2UuY2xhbXBOZWcgPSAtMC41Cglub2lzZS5jbGFtcFBvcyA9IDEuNQoJbm9pc2UudmFsU2NhbGUgPSAyCglub2lzZS52YWxPZmZzZXQgPSAwLjc1Cjx8ZmltX2VuZHw+"]
["269552881a97541e9922e09da914ae128def7aa9-2","269552881a97541e9922e09da914ae128def7aa9","PHxmaW1fcHJlZml4fD4KZnJvbSBmbGFzayBpbXBvcnQgRmxhc2sKZnJvbSBsb2dnaW5nLmNvbmZpZyBpbXBvcnQgZGljdENvbmZpZwoKZGljdENvbmZpZyh7Cjx8ZmltX2hvbGV8Pgp9KQoKYXBwID0gRmxhc2soX19uYW1lX18pCgoKaW1wb3J0IGJvb2ttYXJrcy52aWV3cwo8fGZpbV9zdWZmaXh8PgogICAgJ3ZlcnNpb24nOiAxLAogICAgJ3Jvb3QnOiB7CiAgICAgICAgJ2xldmVsJzogJ0RFQlVHJwogICAgfQo8fGZpbV9lbmR8Pg=="]
["8429ff97d5af171c5f844210d2bb29e62b6cae73-1","8429ff97d5af171c5f844210d2bb29e62b6cae73","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNvZGVjcwppbXBvcnQgb3MKZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBjYWxsCgpmcm9tIFBJTCBpbXBvcnQgSW1hZ2UKaW1wb3J0IGF2Cgpmcm9tIG9jZF9iYWNrZW5kLmV4Y2VwdGlvbnMgaW1wb3J0IFVuc3VwcG9ydGVkQ29udGVudFR5cGUKZnJvbSBvY2RfYmFja2VuZC5sb2cgaW1wb3J0IGdldF9zb3VyY2VfbG9nZ2VyCmZyb20gb2NkX2JhY2tlbmQuc2V0dGluZ3MgaW1wb3J0IFRFTVBfRElSX1BBVEgKCmxvZyA9IGdldF9zb3VyY2VfbG9nZ2VyKCdlbnJpY2hlcl90YXNrJykKCgpjbGFzcyBNZWRpYUVucmljaG1lbnRFeGNlcHRpb24oRXhjZXB0aW9uKToKICAgIHBhc3MKCgpjbGFzcyBCYXNlTWVkaWFFbnJpY2htZW50VGFzayhvYmplY3QpOgogICAgIiIiVGhlIGJhc2UgY2xhc3MgdGhhdCBtZWRpYSBlbnJpY2htZW50IHRhc2tzIHNob3VsZCBpbmhlcml0LiIiIgoKICAgICM6IFRoZSBjb250ZW50IHR5cGVzIHRoYXQgdGhlIHRhc2tzIGlzIGFibGUgdG8gcHJvY2VzcwogICAgY29udGVudF90eXBlcyA9IFtdCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lZGlhX2l0ZW0sIGNvbnRlbnRfdHlwZSwgZmlsZV9vYmplY3QsIGVucmljaG1lbnRfZGF0YSwKICAgICAgICAgICAgICAgICBvYmplY3RfaWQsIGNvbWJpbmVkX2luZGV4X2RvYywgZG9jKToKICAgICAgICBpZiBzZWxmLmNvbnRlbnRfdHlwZXMgaXMgbm90ICcqJyBhbmQgY29udGVudF90eXBlLmxvd2VyKCkgbm90XAogICAgICAgICAgIGluIHNlbGYuY29udGVudF90eXBlczoKICAgICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRDb250ZW50VHlwZSgpCgogICAgICAgIHJldHVybiBzZWxmLmVucmljaF9pdGVtKG1lZGlhX2l0ZW0sIGNvbnRlbnRfdHlwZSwgZmlsZV9vYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5yaWNobWVudF9kYXRhLCBvYmplY3RfaWQsIGNvbWJpbmVkX2luZGV4X2RvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2MpCgogICAgZGVmIGVucmljaF9pdGVtKHNlbGYsIG1lZGlhX2l0ZW0sIGNvbnRlbnRfdHlwZSwgZmlsZV9vYmplY3QsCiAgICAgICAgICAgICAgICAgICAgZW5yaWNobWVudF9kYXRhLCBvYmplY3RfaWQsIGNvbWJpbmVkX2luZGV4X2RvYywgZG9jKToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgoKY2xhc3MgTWVkaWFUeXBlKEJhc2VNZWRpYUVucmljaG1lbnRUYXNrKToKICAgIGNvbnRlbnRfdHlwZXMgPSAnKicKCiAgICBtZWRpYV90eXBlcyA9ICgKICAgICAgICAoCiAgICAgICAgICAgICd2aWRlbycsICgKICAgICAgICAgICAgICAgICd2aWRlby9vZ2cnLAogICAgICAgICAgICAgICAgJ3ZpZGVvL01QMlQnLAogICAgICAgICAgICAgICAgJ3ZpZGVvL21wZWcnLAogICAgICAgICAgICAgICAgJ3ZpZGVvL21wNCcsCiAgICAgICAgICAgICAgICAndmlkZW8vd2VibScKICAgICAgICAgICAgKQogICAgICAgICksCiAgICAgICAgKAogICAgICAgICAgICAnaW1hZ2UnLCAoCiAgICAgICAgICAgICAgICAnaW1hZ2UvanBlZycsCiAgICAgICAgICAgICAgICAnaW1hZ2UvcG5nJywKICAgICAgICAgICAgICAgICdpbWFnZS90aWZmJwogICAgICAgICAgICApCiAgICAgICAgKQogICAgKQoKICAgIGRlZiBlbnJpY2hfaXRlbShzZWxmLCBtZWRpYV9pdGVtLCBjb250ZW50X3R5cGUsIGZpbGVfb2JqZWN0LAogICAgICAgICAgICAgICAgICAgIGVucmljaG1lbnRfZGF0YSwgb2JqZWN0X2lkLCBjb21iaW5lZF9pbmRleF9kb2MsIGRvYyk6CiAgICAgICAgaXRlbV9tZWRpYV90eXBlID0gJ3Vua293bicKCiAgICAgICAgZm9yIG1lZGlhX3R5cGUsIGNvbnRlbnRfdHlwZXMgaW4gc2VsZi5tZWRpYV90eXBlczoKICAgICAgICAgICAgaWYgY29udGVudF90eXBlIGluIGNvbnRlbnRfdHlwZXM6CiAgICAgICAgICAgICAgICBpdGVtX21lZGlhX3R5cGUgPSBtZWRpYV90eXBlCiAgICAgICAgICAgICAgICBicmVhawoKICAgICAgICBlbnJpY2htZW50X2RhdGFbJ21lZGlhX3R5cGUnXSA9IGl0ZW1fbWVkaWFfdHlwZQoKCmNsYXNzIEltYWdlTWV0YWRhdGEoQmFzZU1lZGlhRW5yaWNobWVudFRhc2spOgogICAgY29udGVudF90eXBlcyA9IFsKICAgICAgICAnaW1hZ2UvanBlZycsCiAgICAgICAgJ2ltYWdlL3BuZycsCiAgICAgICAgJ2ltYWdlL3RpZmYnCiAgICBdCgogICAgZGVmIGVucmljaF9pdGVtKHNlbGYsIG1lZGlhX2l0ZW0sIGNvbnRlbnRfdHlwZSwgZmlsZV9vYmplY3QsCiAgICAgICAgICAgICAgICAgICAgZW5yaWNobWVudF9kYXRhLCBvYmplY3RfaWQsIGNvbWJpbmVkX2luZGV4X2RvYywgZG9jKToKICAgICAgICBpbWcgPSBJbWFnZS5vcGVuKGZpbGVfb2JqZWN0KQogICAgICAgIGVucmljaG1lbnRfZGF0YVsnaW1hZ2VfZm9ybWF0J10gPSBpbWcuZm9ybWF0CiAgICAgICAgZW5yaWNobWVudF9kYXRhWydpbWFnZV9tb2RlJ10gPSBpbWcubW9kZQogICAgICAgIGVucmljaG1lbnRfZGF0YVsncmVzb2x1dGlvbiddID0gewogICAgICAgICAgICAnd2lkdGgnOiBpbWcuc2l6ZVswXSwKICAgICAgICAgICAgJ2hlaWdodCc6IGltZy5zaXplWzFdLAogICAgICAgICAgICAndG90YWxfcGl4ZWxzJzogaW1nLnNpemVbMF0gKiBpbWcuc2l6ZVsxXQogICAgICAgIH0KCgpjbGFzcyBWaWVkZW9NZXRhZGF0YShCYXNlTWVkaWFFbnJpY2htZW50VGFzayk6CiAgICBjb250ZW50X3R5cGVzID0gWwogICAgICAgICd2aWRlby9vZ2cnLAogICAgICAgICd2aWRlby9NUDJUJywKICAgICAgICAndmlkZW8vbXBlZycsCiAgICAgICAgJ3ZpZGVvL21wNCcsCiAgICAgICAgJ3ZpZGVvL3dlYm0nCiAgICBdCgogICAgZGVmIGVucmljaF9pdGVtKHNlbGYsIG1lZGlhX2l0ZW0sIGNvbnRlbnRfdHlwZSwgZmlsZV9vYmplY3QsCiAgICAgICAgICAgICAgICAgICAgZW5yaWNobWVudF9kYXRhLCBvYmplY3RfaWQsIGNvbWJpbmVkX2luZGV4X2RvYywgZG9jKToKICAgICAgICBwYXNzCgoKY2xhc3MgUERGVG9UZXh0KEJhc2VNZWRpYUVucmljaG1lbnRUYXNrKToKICAgIGNvbnRlbnRfdHlwZXMgPSAnKicKCiAgICBkZWYgZW5yaWNoX2l0ZW0oc2VsZiwgbWVkaWFfaXRlbSwgY29udGVudF90eXBlLCBmaWxlX29iamVjdCwKICAgICAgICAgICAgICAgICAgICBlbnJpY2htZW50X2RhdGEsIG9iamVjdF9pZCwgY29tYmluZWRfaW5kZXhfZG9jLCBkb2MpOgogICAgICAgIHJldGNvZGUgPSBjYWxsKCIvdXNyL2xvY2FsL2Jpbi9kb2NzcGxpdCB0ZXh0IC1sIG5sZCAlcyAtbyAlcyIgJSAoCiAgICAgICAgICAgIGZpbGVfb2JqZWN0Lm5hbWUsIFRFTVBfRElSX1BBVEgsKSwgc2hlbGw9VHJ1ZSkKICAgICAgICBvY3JfZmlsZSA9IHUnJXMudHh0JyAlIChvcy5wYXRoLnNwbGl0ZXh0KGZpbGVfb2JqZWN0Lm5hbWUpWzBdLCkKICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvY3JfZmlsZSk6CiAgICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4ob2NyX2ZpbGUsICdyJywgJ3V0Zi04JykgYXMgaW5fZmlsZToKICAgICAgICAgICAgICAgIGVucmljaG1lbnRfZGF0YVsndGV4dCddID0gaW5fZmlsZS5yZWFkKCkKICAgICAgICBlbHNlOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGxvZy5lcnJvcih1J09DUiBvZiBvYmplY3QgJXMgcmVzdWx0ZWQgaW4gZXJyb3IgY29kZTogJXMnICUgKAogICAgICAgICAgICAgICAgb2JqZWN0X2lkLCByZXRjb2RlLCkpCjx8ZmltX2VuZHw+"]
["f871314e3afdd0a6fc88221c4559ab0bc0205677-1","f871314e3afdd0a6fc88221c4559ab0bc0205677","PHxmaW1fcHJlZml4fD4KIy0qLSBjb2Rpbmc6dXRmLTggLSotCmZyb20gYnM0IGltcG9ydCBCZWF1dGlmdWxTb3VwLE5hdmlnYWJsZVN0cmluZwpmcm9tIGNvbW1vbiBpbXBvcnQgbG9nZ2VyCmltcG9ydCBIVE1MUGFyc2VyCgojIOaKpeitpueahOmCruS7tuimgei9rOaIkOWbvueJh+WPkee7meW+ruS/oeacuuWZqOS6uu+8jOmBh+WIsOWtl+S9k+mXrumimO+8jCBvdXQuanBn5Zu+54mH5piv5Lmx56CB77yM5Y+N5Y+N5aSN5aSN5a6e6Le16Kej5Yaz77yaCiMgMi7lv4XpobvopoHkv67mlLnnvZHpobXvvIzliqDlhaUgPCBtZXRhIGNoYXJzZXQgPSAiVVRGLTjigJ0+5YiwSFRNTOmHjOmdogpkZWYgX19pbnNlcnRfbWV0YShodG1sKToKCWh0bWxfcGFyc2VyID0gSFRNTFBhcnNlci5IVE1MUGFyc2VyKCkKCWh0bWwgPSBodG1sX3BhcnNlci51bmVzY2FwZShodG1sKSAgIyDlhYjmioogJnF1b3TovazmiJAiCglodG1sX3BvcyA9IGh0bWwuZmluZCgiPGhlYWQ+IikKCWlmIGh0bWxfcG9zID09IC0xOgoJCWxvZ2dlci5lcnJvcigi5peg5rOV5Zyo6YKu5Lu255qESFRNTOaWh+acrOS4reafpeaJvuWIsDxoZWFkPuagh+iusO+8jOaPkuWFpW1ldGEtY2hhcnNldOWksei0pSIpCgkJcmV0dXJuIGh0bWwKCW1ldGEgPSAiPG1ldGEgY2hhcnNldD1cIlVURi04XCI+IgoJaHRtbF9wb3MgPSBodG1sX3BvcyArIDYKCWh0bWwgPSBodG1sWzpodG1sX3Bvc10gKyBtZXRhICsgaHRtbFtodG1sX3BvczpdCglyZXR1cm4gaHRtbAoKCjx8ZmltX2hvbGV8PgoKCWJzID0gQmVhdXRpZnVsU291cChodG1sKQoJYm9keSA9IGJzLmJvZHkKCglmdWxsX2NvbnRlbnQgPSBfX2NsZWFyKGJvZHksY29uZmlnKQoKCSPpmZDlrprkuIDkuIvlj5HliLBRUeS4reeahOaWh+acrOmVv+W6pu+8jOWkqumVv+S6hgoJbWF4ID0gY29uZmlnLm1vbml0b3JfbWF4X3RleHRfbGVuZ3RoCglpZiBsZW4oZnVsbF9jb250ZW50KT4gbWF4OgoJCXJldHVybiBmdWxsX2NvbnRlbnRbMDptYXhdCgllbHNlOgoJCXJldHVybiBmdWxsX2NvbnRlbnQKCmxpbmVfZWxlbWVudHMgPSBbJ2JyJywncCcsJ2gxJywnaDInLCdoMycsJ2g0JywnaDUnXQoKZGVmIF9fY2xlYXIocGFyZW50X25vZGUsY29uZmlnKToKCSMgcmV0dXJuIGJzLnByZXR0aWZ5KCkKCWNvbnRlbnQgPSAiIgoJIyBwcmludCBwYXJlbnRfbm9kZQoJaWYgaXNpbnN0YW5jZShwYXJlbnRfbm9kZSwgTmF2aWdhYmxlU3RyaW5nKToKCQlyZXR1cm4gcGFyZW50X25vZGUuc3RyaW5nCgoJaWYgcGFyZW50X25vZGUubmFtZSBpbiBsaW5lX2VsZW1lbnRzOgoJCWNvbnRlbnQgKz0gIlxuIgoKCWNoaWxkcmVuID0gcGFyZW50X25vZGUuY29udGVudHMKCglmb3IgY2hpbGQgaW4gY2hpbGRyZW46CgkJaWYgY2hpbGQubmFtZSA9PSAidGFibGUiOgoJCQljb250ZW50ICs9IHBhcnNlX3RhYmxlKGNoaWxkLGNvbmZpZykKCQllbHNlOgoJCQljb250ZW50ICs9IF9fY2xlYXIoY2hpbGQsY29uZmlnKQoKCXJldHVybiBjb250ZW50CgoKZGVmIHBhcnNlX3RhYmxlKHRhYixjb25maWcpOgoJY29udGVudCA9ICJcbiIKCWxpbmUgPSAwCgoJZm9yIHRyIGluIHRhYi5maW5kQWxsKCd0cicpOgoKCQlpZiBsaW5lID4gY29uZmlnLm1vbml0b3JfbWF4X3RhYmxlX2xpbmU6YnJlYWsKCgkJY29udGVudCArPSAifCIKCQlmb3IgdGQgaW4gdHIuZmluZEFsbCgndGgnKToKCQkJY29udGVudCArPSB0ZC5nZXRUZXh0KCkuc3RyaXAoKSArICJ8IgoJCWZvciB0ZCBpbiB0ci5maW5kQWxsKCd0ZCcpOgoJCQljb250ZW50ICs9IHRkLmdldFRleHQoKS5zdHJpcCgpICsgInwiCgkJY29udGVudCA9IGNvbnRlbnQgKyAiXG4iCgoJCWxpbmUgKz0gMQoJY29udGVudCA9IGNvbnRlbnQgKyAiLi4uXG4iCglyZXR1cm4gY29udGVudAoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CglzPSI8IURPQ1RZUEUgaHRtbD48aHRtbD48aGVhZD48bWV0YSBjaGFyc2V0PXV0Zi04Pjx0aXRsZT48L3RpdGxlPjxzdHlsZSB0eXBlPXRleHQvY3NzPnRhYmxlLCB0ZCwgdGh7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlcjoxcHggc29saWQgYmx1ZTt9dGh7aGVpZ2h0OiA0MHB4O2JhY2tncm91bmQtY29sb3I6ICNFRkVFRUU7fXRke2hlaWdodDogMzBweDt0ZXh0LWFsaWduOiBjZW50ZXI7fTwvc3R5bGU+PC9oZWFkPjxib2R5PjxkaXY+PGhlYWRlcj48aDE+PC9oMT48L2hlYWRlcj48ZGl2PjxoND7pooTnlZnlpIfms6jvvJrorqLljZXotoXml7Y8L2g0PjxoMz7miqXorablhoXlrrnvvJo8L2gzPjxwPjxmb250IGNvbG9yPSdyZWQnPuWcqOi/h+WOu+OAkDHjgJHliIbpkp/vvIzlh7rnjrDotoXml7borqLljZXmiJbogIXotoXml7bjgJAw44CR56eS5pyq5a6M5oiQ6K6i5Y2V77yM6L6+5Yiw5LqG44CQNDHjgJHnrJTvvIzotoXov4fkuobmiqXorabpmIjlgLzjgJAw44CR56yULOe7n+iuoeaXtumXtOaute+8muOAkDIwMTgwNzA1MTYxM+OAkS3jgJAyMDE4MDcwNTE2MTTjgJEs6K+35YWz5rOo77yBPC9mb250PjwvcD48aDU+5Lul5LiL5Li65ZCE5Liq6LaF5pe26K6i5Y2V5YW35L2T5L+h5oGv77yaPC9oNT48dGFibGU+PHRyPjx0aD7orqLljZXlj7c8L3RoPjx0aD7llYbmiLflkI3np7A8L3RoPjx0aD7mlK/ku5jmlrnlvI88L3RoPjx0aD7pgJrpgZPlkI3np7A8L3RoPjx0aD7pk7booYzlkI3np7A8L3RoPjx0aD7kuqTmmJPph5Hpop08L3RoPjx0aD7lk43lupTnoIE8L3RoPjx0aD7lk43lupTkv6Hmga88L3RoPjwvdHI+PHRyPjx0ZD5qazAzMTgwNTE2MTM1OTAwNTM2NzM5NTI3MTwvdGQ+PHRkPjAwMDAxMDU8L3RkPjx0ZD4wMzwvdGQ+PHRkPi08L3RkPjx0ZD4wMTAyPC90ZD48dGQ+MC4xMTwvdGQ+PHRkPi08L3RkPjx0ZD4tPC90ZD48L3RyPjx0cj48dGQ+amswMzE4MDUxNjEzNTc0OTAxNzQ0ODc2NjU8L3RkPjx0ZD4wMDAwMTA1PC90ZD48dGQ+MDM8L3RkPjx0ZD4tPC90ZD48dGQ+MDEwMjwvdGQ+PHRkPjAuMTE8L3RkPjx0ZD4tPC90ZD48dGQ+LTwvdGQ+PC90cj48dHI+PHRkPmprMDMxODA1MTYxMzU2NjA3MDY4NDgyODcxPC90ZD48dGQ+MDAwMDEwNTwvdGQ+PHRkPjAzPC90ZD48dGQ+LTwvdGQ+PHRkPjAxMDI8L3RkPjx0ZD4wLjExPC90ZD48dGQ+LTwvdGQ+PHRkPi08L3RkPjwvdHI+PHRyPjx0ZD5qazAzMTgwNTE2MTM1NDM5MzYzODUxODM3MTwvdGQ+PHRkPjAwMDAxMDU8L3RkPjx0ZD4wMzwvdGQ+PHRkPi08L3RkPjx0ZD4wMTAyPC90ZD48dGQ+MC4xMTwvdGQ+PHRkPi08L3RkPjx0ZD4tPC90ZD48L3RyPjx0cj48dGQ+amswMzE4MDUxNjEzNTMwODIwOTI5MjcyNjc8L3RkPjx0ZD4wMDAwMTA1PC90ZD48dGQ+MDM8L3RkPjx0ZD4tPC90ZD48dGQ+MDEwMjwvdGQ+PHRkPjAuMTE8L3RkPjx0ZD4tPC90ZD48dGQ+LTwvdGQ+PC90cj48dHI+PHRkPmprMDMxODA1MTYxMzUxNjg3NDA4MjA4Nzg3PC90ZD48dGQ+MDAwMDEwNTwvdGQ+PHRkPjAzPC90ZD48dGQ+LTwvdGQ+PHRkPjAxMDI8L3RkPjx0ZD4wLjExPC90ZD48dGQ+LTwvdGQ+PHRkPi08L3RkPjwvdHI+PHRyPjx0ZD5qazAzMTgwNTE2MTM1MDcwNzk5NTg2MzQ3MTwvdGQ+PHRkPjAwMDAxMDU8L3RkPjx0ZD4wMzwvdGQ+PHRkPi08L3RkPjx0ZD4wMTAyPC90ZD48dGQ+MC4xMTwvdGQ+PHRkPi08L3RkPjx0ZD4tPC90ZD48L3RyPjx0cj48dGQ+amswMzE4MDUxNjEzNDk1NDI2MjgxNTgyMDk8L3RkPjx0ZD4wMDAwMTA1PC90ZD48dGQ+MDM8L3RkPjx0ZD4tPC90ZD48dGQ+MDEwMjwvdGQ+PHRkPjAuMTE8L3RkPjx0ZD4tPC90ZD48dGQ+LTwvdGQ+PC90cj48dHI+PHRkPmprMDMxODA1MTYxMzQ3NTYwNTMxMDYyMjAxPC90ZD48dGQ+MDAwMDEwNTwvdGQ+PHRkPjAzPC90ZD48dGQ+LTwvdGQ+PHRkPjAxMDI8L3RkPjx0ZD4wLjExPC90ZD48dGQ+LTwvdGQ+PHRkPi08L3RkPjwvdHI+PHRyPjx0ZD5qazAzMTgwNTE2MTM0NjUyNTM4MzA5NzQ0MjwvdGQ+PHRkPjAwMDAxMDU8L3RkPjx0ZD4wMzwvdGQ+PHRkPi08L3RkPjx0ZD4wMTAyPC90ZD48dGQ+MC4xMTwvdGQ+PHRkPi08L3RkPjx0ZD4tPC90ZD48L3RyPjx0cj48dGQ+amswMzE4MDUxNjEzNDUxMjA2MzYwNjQ4MTk8L3RkPjx0ZD4wMDAwMTA1PC90ZD48dGQ+MDM8L3RkPjx0ZD4tPC90ZD48dGQ+MDEwMjwvdGQ+PHRkPjAuMTE8L3RkPjx0ZD4tPC90ZD48dGQ+LTwvdGQ+PC90cj48dHI+PHRkPmprMDMxODA1MTYxMzQzNTU4NjkyNjM5NDc4PC90ZD48dGQ+MDAwMDEwNTwvdGQ+PHRkPjAzPC90ZD48dGQ+LTwvdGQ+PHRkPjAxMDI8L3RkPjx0ZD4wLjExPC90ZD48dGQ+LTwvdGQ+PHRkPi08L3RkPjwvdHI+PHRyPjx0ZD5qazAzMTgwNTE2MTM0MjUzMTcwNTM0MjQ3MzwvdGQ+PHRkPjAwMDAxMDU8L3RkPjx0ZD4wMzwvdGQ+PHRkPi08L3RkPjx0ZD4wMTAyPC90ZD48dGQ+MC4xMTwvdGQ+PHRkPi08L3RkPjx0ZD4tPC90ZD48L3RyPjx0cj48dGQ+amswMzE4MDUxNjEzNDE3MzM5NzM0NjYxMDM8L3RkPjx0ZD4wMDAwMTA1PC90ZD48dGQ+MDM8L3RkPjx0ZD4tPC90ZD48dGQ+MDEwMjwvdGQ+PHRkPjAuMTE8L3RkPjx0ZD4tPC90ZD48dGQ+LTwvdGQ+PC90cj48dHI+PHRkPmprMDMxODA1MTYxMzQwOTIyMzI3NDEyMDIwPC90ZD48dGQ+MDAwMDEwNTwvdGQ+PHRkPjAzPC90ZD48dGQ+LTwvdGQ+PHRkPjAxMDI8L3RkPjx0ZD4wLjExPC90ZD48dGQ+LTwvdGQ+PHRkPi08L3RkPjwvdHI+PHRyPjx0ZD5qazAzMTgwNTE2MTMzODIwMjMyMDgwMjM1MTwvdGQ+PHRkPjAwMDAxMDU8L3RkPjx0ZD4wMzwvdGQ+PHRkPkhZTDwvdGQ+PHRkPjAxMDI8L3RkPjx0ZD4wLjExPC90ZD48dGQ+LTwvdGQ+PHRkPi08L3RkPjwvdHI+PHRyPjx0ZD5qazAzMTgwNTE2MTMzNzU0OTM0NzAwODc4OTwvdGQ+PHRkPjAwMDAxMDU8L3RkPjx0ZD4wMzwvdGQ+PHRkPi08L3RkPjx0ZD4wMTAyPC90ZD48dGQ+MC4xMTwvdGQ+PHRkPi08L3RkPjx0ZD4tPC90ZD48L3RyPjx0cj48dGQ+amswMzE4MDUxNjEzMzUwMzc1NTk1OTg1MDY8L3RkPjx0ZD4wMDAwMTA1PC90ZD48dGQ+MDM8L3RkPjx0ZD4tPC90ZD48dGQ+MDEwMjwvdGQ+PHRkPjAuMTE8L3RkPjx0ZD4tPC90ZD48dGQ+LTwvdGQ+PC90cj48dHI+PHRkPmprMDMxODA1MTYxMzM0NDk0NzQ3MTExMzA3PC90ZD48dGQ+MDAwMDEwNTwvdGQ+PHRkPjAzPC90ZD48dGQ+LTwvdGQ+PHRkPjAxMDI8L3RkPjx0ZD4wLjExPC90ZD48dGQ+LTwvdGQ+PHRkPi08L3RkPjwvdHI+PHRyPjx0ZD5qazAzMTgwNTE2MTMzMzQ1NTAzMjU3MTAyMDwvdGQ+PHRkPjAwMDAxMDU8L3RkPjx0ZD4wMzwvdGQ+PHRkPi08L3RkPjx0ZD4wMTAyPC90ZD48dGQ+MC4xMTwvdGQ+PHRkPi08L3RkPjx0ZD4tPC90ZD48L3RyPjx0cj48dGQ+amswMzE4MDUxNjEzMzE1MjE5NzY3NjUwNTM8L3RkPjx0ZD4wMDAwMTA1PC90ZD48dGQ+MDM8L3RkPjx0ZD4tPC90ZD48dGQ+MDEwMjwvdGQ+PHRkPjAuMTE8L3RkPjx0ZD4tPC90ZD48dGQ+LTwvdGQ+PC90cj48dHI+PHRkPmprMDMxODA1MTYxMzMwMzk3NTc5MDc5MjEwPC90ZD48dGQ+MDAwMDEwNTwvdGQ+PHRkPjAzPC90ZD48dGQ+LTwvdGQ+PHRkPjAxMDI8L3RkPjx0ZD4wLjExPC90ZD48dGQ+LTwvdGQ+PHRkPi08L3RkPjwvdHI+PHRyPjx0ZD5qazAzMTgwNTE2MTMyOTg0ODIzNzg1MTU3MDwvdGQ+PHRkPjAwMDAxMDU8L3RkPjx0ZD4wMzwvdGQ+PHRkPi08L3RkPjx0ZD4wMTAyPC90ZD48dGQ+MC4xMTwvdGQ+PHRkPi08L3RkPjx0ZD4tPC90ZD48L3RyPjx0cj48dGQ+amswMzE4MDUxNjEzMjcwNDYxODU5OTAxMTU8L3RkPjx0ZD4wMDAwMTA1PC90ZD48dGQ+MDM8L3RkPjx0ZD4tPC90ZD48dGQ+MDEwMjwvdGQ+PHRkPjAuMTE8L3RkPjx0ZD4tPC90ZD48dGQ+LTwvdGQ+PC90cj48dHI+PHRkPmprMDMxODA1MTYxMzI2MDE1MTUwNTMzNTAwPC90ZD48dGQ+MDAwMDEwNTwvdGQ+PHRkPjAzPC90ZD48dGQ+LTwvdGQ+PHRkPjAxMDI8L3RkPjx0ZD4wLjExPC90ZD48dGQ+LTwvdGQ+PHRkPi08L3RkPjwvdHI+PHRyPjx0ZD5qazAzMTgwNTE2MTMyNDQwOTk3ODE0MDk3NzwvdGQ+PHRkPjAwMDAxMDU8L3RkPjx0ZD4wMzwvdGQ+PHRkPi08L3RkPjx0ZD4wMTAyPC90ZD48dGQ+MC4xMTwvdGQ+PHRkPi08L3RkPjx0ZD4tPC90ZD48L3RyPjx0cj48dGQ+amswMzE4MDUxNjEzMjMyMTQxNDIzMTMzNjQ8L3RkPjx0ZD4wMDAwMTA1PC90ZD48dGQ+MDM8L3RkPjx0ZD4tPC90ZD48dGQ+MDEwMjwvdGQ+PHRkPjAuMTE8L3RkPjx0ZD4tPC90ZD48dGQ+LTwvdGQ+PC90cj48dHI+PHRkPmprMDMxODA1MTYxMzIyNTc2MjU1MDU0NTU4PC90ZD48dGQ+MDAwMDEwNTwvdGQ+PHRkPjAzPC90ZD48dGQ+LTwvdGQ+PHRkPjAxMDI8L3RkPjx0ZD4wLjExPC90ZD48dGQ+LTwvdGQ+PHRkPi08L3RkPjwvdHI+PHRyPjx0ZD5qazAzMTgwNTE2MTMyMTkzMDk0NDE3MDAzMzwvdGQ+PHRkPjAwMDAxMDU8L3RkPjx0ZD4wMzwvdGQ+PHRkPi08L3RkPjx0ZD4wMTAyPC90ZD48dGQ+MC4xMTwvdGQ+PHRkPi08L3RkPjx0ZD4tPC90ZD48L3RyPjx0cj48dGQ+amswMzE4MDUxNjEzMTk4MTM5ODIxNzUxODI8L3RkPjx0ZD4wMDAwMTA1PC90ZD48dGQ+MDM8L3RkPjx0ZD4tPC90ZD48dGQ+MDEwMjwvdGQ+PHRkPjAuMTE8L3RkPjx0ZD4tPC90ZD48dGQ+LTwvdGQ+PC90cj48dHI+PHRkPmprMDMxODA1MTYxMzE4NDk2MTAyNjg0ODAzPC90ZD48dGQ+MDAwMDEwNTwvdGQ+PHRkPjAzPC90ZD48dGQ+LTwvdGQ+PHRkPjAxMDI8L3RkPjx0ZD4wLjExPC90ZD48dGQ+LTwvdGQ+PHRkPi08L3RkPjwvdHI+PHRyPjx0ZD5qazAzMTgwNTE2MTMxNjQ4MTMyOTY1NTY2MjwvdGQ+PHRkPjAwMDAxMDU8L3RkPjx0ZD4wMzwvdGQ+PHRkPi08L3RkPjx0ZD4wMTAyPC90ZD48dGQ+MC4xMTwvdGQ+PHRkPi08L3RkPjx0ZD4tPC90ZD48L3RyPjx0cj48dGQ+amswMzE4MDUxNjEzMTU1Mzg1OTM0MzA4MDc8L3RkPjx0ZD4wMDAwMTA1PC90ZD48dGQ+MDM8L3RkPjx0ZD4tPC90ZD48dGQ+MDEwMjwvdGQ+PHRkPjAuMTE8L3RkPjx0ZD4tPC90ZD48dGQ+LTwvdGQ+PC90cj48dHI+PHRkPmprMDMxODA1MTYxMzA4Mjc1NzUyOTg1MTQwPC90ZD48dGQ+MDAwMDEwNTwvdGQ+PHRkPjAzPC90ZD48dGQ+LTwvdGQ+PHRkPjAxMDI8L3RkPjx0ZD4wLjExPC90ZD48dGQ+LTwvdGQ+PHRkPi08L3RkPjwvdHI+PHRyPjx0ZD5qazAzMTgwNTE2MTMwODQ2NDk2MDI0ODY2OTwvdGQ+PHRkPjAwMDAxMDU8L3RkPjx0ZD4wMzwvdGQ+PHRkPi08L3RkPjx0ZD4wMTAyPC90ZD48dGQ+MC4xMTwvdGQ+PHRkPi08L3RkPjx0ZD4tPC90ZD48L3RyPjx0cj48dGQ+amswMzE4MDUxNjEzMDU5ODU3NzY3MjYzODY8L3RkPjx0ZD4wMDAwMTA1PC90ZD48dGQ+MDM8L3RkPjx0ZD5IWUw8L3RkPjx0ZD4wMTAyPC90ZD48dGQ+MC4xMTwvdGQ+PHRkPi08L3RkPjx0ZD4tPC90ZD48L3RyPjx0cj48dGQ+amswMzE4MDUxNjEzMDUyNzcwMzMzNTI1MjE8L3RkPjx0ZD4wMDAwMTA1PC90ZD48dGQ+MDM8L3RkPjx0ZD5IWUw8L3RkPjx0ZD4wMTAyPC90ZD48dGQ+MC4xMTwvdGQ+PHRkPi08L3RkPjx0ZD4tPC90ZD48L3RyPjx0cj48dGQ+amswMzE4MDUxNjEzMDI2MTYwNTI5Mzk2Mzg8L3RkPjx0ZD4wMDAwMTA1PC90ZD48dGQ+MDM8L3RkPjx0ZD4tPC90ZD48dGQ+MDEwMjwvdGQ+PHRkPjAuMTE8L3RkPjx0ZD4tPC90ZD48dGQ+LTwvdGQ+PC90cj48dHI+PHRkPmprMDMxODA1MTYxMzAyNTMyMjc0MjMzNTc4PC90ZD48dGQ+MDAwMDEwNTwvdGQ+PHRkPjAzPC90ZD48dGQ+LTwvdGQ+PHRkPjAxMDI8L3RkPjx0ZD4wLjExPC90ZD48dGQ+LTwvdGQ+PHRkPi08L3RkPjwvdHI+PHRyPjx0ZD5qazAzMTgwNTE2MTI1OTgxNzg0NDgyNjI5ODwvdGQ+PHRkPjAwMDAxMDU8L3RkPjx0ZD4wMzwvdGQ+PHRkPi08L3RkPjx0ZD4wMTAyPC90ZD48dGQ+MC4xMTwvdGQ+PHRkPi08L3RkPjx0ZD4tPC90ZD48L3RyPjx0cj48dGQ+amswMzE4MDUxNjEyNTk3MTgzMTMxMDkzNzE8L3RkPjx0ZD4wMDAwMTA1PC90ZD48dGQ+MDM8L3RkPjx0ZD4tPC90ZD48dGQ+MDEwMjwvdGQ+PHRkPjAuMTE8L3RkPjx0ZD4tPC90ZD48dGQ+LTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PumihOitpuetiee6p++8muS4pemHjSEsPC9icj48L2JyPjxkaXY+PHA+44CQ5Lul5LiL5YaF5a655Y+v5b+955Wl44CRIOS4uuWumuS9jeaKpeitpuezu+e7n+mXrumimOmihOeVme+8jOivu+WPluinhOWImeS/oeaBr++8mjwvYnI+6YCa55+l6YKu5Lu25Y+R6YCB5pe26Ze0WzIwMTgtMDctMDUgMTY6MTQ6MDAgMDIwXSw8L2JyPjwvcD48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPiIKCglwcmludCBjbGVhbl9odG1sKHMpCjx8ZmltX3N1ZmZpeHw+CiPljrvpmaRodG1s5Lit55qE5qCH562+5ZKM6KGo5qC877yM55So5LqOcXHkuK3mmL7npLoKI3Fx5q+U6L6D5pON6JuL55qE5piv77yM5peg5rOV5Y+R6YCB5Zu+54mH5L+h5oGvCmRlZiBjbGVhbl9odG1sKGh0bWwsY29uZmlnKToKCV9faW5zZXJ0X21ldGEoaHRtbCkKPHxmaW1fZW5kfD4="]
["724aa07a513d5ecc0bae9345ee5edac1d849775c-2","724aa07a513d5ecc0bae9345ee5edac1d849775c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKaW1wb3J0IHNpeApmcm9tIHNpeC5tb3ZlcyBpbXBvcnQgcmFuZ2UKCmltcG9ydCB0aW1laXQKCmZyb20gcHlzaXN0ZW5jZSBpbXBvcnQgbWFrZV9saXN0CmZyb20gcHlyc2lzdGVudCBpbXBvcnQgdiwgcwoKCiMgbGlicmFyeQpNVVRBQkxFID0gJ2J1aWx0LWluIG11dGFibGUnClBZUlNJU1RFTlQgPSAncHlyc2lzdGVudCcKUFlTSVNURU5DRSA9ICdweXNpc3RlbmNlJwoKIyBvcGVyYXRpb25zClZFQ1RPUl9BUFBFTkQgPSAndmVjdG9yIGFwcGVuZCcKVkVDVE9SX1BVU0ggPSAndmVjdG9yIHB1c2gnClZFQ1RPUl9NVVRBVEVfQkVHID0gJ3ZlY3RvciBtdXRhdGUgYmVnaW5uaW5nJwpWRUNUT1JfTVVUQVRFX01JRCA9ICd2ZWN0b3IgbXV0YXRlIG1pZGRsZScKVkVDVE9SX01VVEFURV9FTkQgPSAndmVjdG9yIG11dGF0ZSBlbmQnCgpkZWYgYmVuY2htYXJrcyhzaXplKToKICAgIHB5c19saXN0ID0gbWFrZV9saXN0KCpyYW5nZShzaXplKSkKICAgIHB5cl9saXN0ID0gdigqcmFuZ2Uoc2l6ZSkpCiAgICBtdXRfbGlzdCA9IGxpc3QocmFuZ2Uoc2l6ZSkpCgogICAgcHlzX3ZlY3Rvcl9hcHBlbmQgPSBwYXJ0aWFsKHB5c19saXN0LmNvbmNhdCwgbWFrZV9saXN0KDEpKQogICAgcHlyX3ZlY3Rvcl9hcHBlbmQgPSBwYXJ0aWFsKHB5cl9saXN0LmFwcGVuZCwgMSkKICAgIG11dF92ZWN0b3JfYXBwZW5kID0gcGFydGlhbChtdXRfbGlzdC5hcHBlbmQsIDEpCgogICAgbXV0X2xpc3QgPSBsaXN0KHJhbmdlKHNpemUpKQoKICAgIHB5c192ZWN0b3JfcHVzaCA9IHBhcnRpYWwocHlzX2xpc3QuY29ucywgMSkKICAgIHB5cl92ZWN0b3JfcHVzaCA9IHBhcnRpYWwodigxKS5leHRlbmQsIHB5cl9saXN0KQogICAgbXV0X3ZlY3Rvcl9wdXNoID0gcGFydGlhbChtdXRfbGlzdC5pbnNlcnQsIDAsIDEpCgogICAgbXV0X2xpc3QgPSBsaXN0KHJhbmdlKHNpemUpKQoKICAgIHB5c192ZWN0b3JfbXV0YXRlX2JlZ2lubmluZyA9IHBhcnRpYWwoX3B5c19zZXQsIDAsICduZXctdmFsdWUnLCBweXNfbGlzdCkKICAgIHB5cl92ZWN0b3JfbXV0YXRlX2JlZ2lubmluZyA9IHBhcnRpYWwocHlyX2xpc3QuYXNzb2MsIDAsICduZXctdmFsdWUnKQogICAgbXV0X3ZlY3Rvcl9tdXRhdGVfYmVnaW5uaW5nID0gcGFydGlhbChtdXRfbGlzdC5fX3NldGl0ZW1fXywgMCwgJ25ldy12YWx1ZScpCgogICAgbXV0X2xpc3QgPSBsaXN0KHJhbmdlKHNpemUpKQoKICAgIG1pZGRsZV9pbmRleCA9IHNpemUgLy8gMgogICAgcHlzX3ZlY3Rvcl9tdXRhdGVfbWlkZGxlID0gcGFydGlhbChfcHlzX3NldCwgbWlkZGxlX2luZGV4LCAnbmV3LXZhbHVlJywgcHlzX2xpc3QpCiAgICBweXJfdmVjdG9yX211dGF0ZV9taWRkbGUgPSBwYXJ0aWFsKHB5cl9saXN0LmFzc29jLCBtaWRkbGVfaW5kZXgsICduZXctdmFsdWUnKQogICAgbXV0X3ZlY3Rvcl9tdXRhdGVfbWlkZGxlID0gcGFydGlhbChtdXRfbGlzdC5fX3NldGl0ZW1fXywgbWlkZGxlX2luZGV4LCAnbmV3LXZhbHVlJykKCiAgICBtdXRfbGlzdCA9IGxpc3QocmFuZ2Uoc2l6ZSkpCgogICAgcHlzX3ZlY3Rvcl9tdXRhdGVfZW5kID0gcGFydGlhbChfcHlzX3NldCwgc2l6ZS0xLCAnbmV3LXZhbHVlJywgcHlzX2xpc3QpCiAgICBweXJfdmVjdG9yX211dGF0ZV9lbmQgPSBwYXJ0aWFsKHB5cl9saXN0LmFzc29jLCBzaXplLTEsICduZXctdmFsdWUnKQogICAgbXV0X3ZlY3Rvcl9tdXRhdGVfZW5kID0gcGFydGlhbChtdXRfbGlzdC5fX3NldGl0ZW1fXywgc2l6ZS0xLCAnbmV3LXZhbHVlJykKCiAgICBiZW5jaG1hcmtzID0gWwogICAgICAgIChNVVRBQkxFLCBWRUNUT1JfQVBQRU5ELCBtdXRfdmVjdG9yX2FwcGVuZCksCiAgICAgICAgKFBZUlNJU1RFTlQsIFZFQ1RPUl9BUFBFTkQsIHB5cl92ZWN0b3JfYXBwZW5kKSwKICAgICAgICAoUFlTSVNURU5DRSwgVkVDVE9SX0FQUEVORCwgcHlzX3ZlY3Rvcl9hcHBlbmQpLAoKICAgICAgICAoTVVUQUJMRSwgVkVDVE9SX1BVU0gsIG11dF92ZWN0b3JfcHVzaCksCiAgICAgICAgKFBZUlNJU1RFTlQsIFZFQ1RPUl9QVVNILCBweXJfdmVjdG9yX3B1c2gpLAogICAgICAgIChQWVNJU1RFTkNFLCBWRUNUT1JfUFVTSCwgcHlzX3ZlY3Rvcl9wdXNoKSwKCiAgICAgICAgKE1VVEFCTEUsIFZFQ1RPUl9NVVRBVEVfQkVHLCBtdXRfdmVjdG9yX211dGF0ZV9iZWdpbm5pbmcpLAogICAgICAgIChQWVJTSVNURU5ULCBWRUNUT1JfTVVUQVRFX0JFRywgcHlyX3ZlY3Rvcl9tdXRhdGVfYmVnaW5uaW5nKSwKICAgICAgICAoUFlTSVNURU5DRSwgVkVDVE9SX01VVEFURV9CRUcsIHB5c192ZWN0b3JfbXV0YXRlX2JlZ2lubmluZyksCgogICAgICAgIChNVVRBQkxFLCBWRUNUT1JfTVVUQVRFX01JRCwgbXV0X3ZlY3Rvcl9tdXRhdGVfbWlkZGxlKSwKICAgICAgICAoUFlSU0lTVEVOVCwgVkVDVE9SX01VVEFURV9NSUQsIHB5cl92ZWN0b3JfbXV0YXRlX21pZGRsZSksCiAgICAgICAgKFBZU0lTVEVOQ0UsIFZFQ1RPUl9NVVRBVEVfTUlELCBweXNfdmVjdG9yX211dGF0ZV9taWRkbGUpLAoKICAgICAgICAoTVVUQUJMRSwgVkVDVE9SX01VVEFURV9FTkQsIG11dF92ZWN0b3JfbXV0YXRlX2VuZCksCiAgICAgICAgKFBZUlNJU1RFTlQsIFZFQ1RPUl9NVVRBVEVfRU5ELCBweXJfdmVjdG9yX211dGF0ZV9lbmQpLAogICAgICAgIChQWVNJU1RFTkNFLCBWRUNUT1JfTVVUQVRFX0VORCwgcHlzX3ZlY3Rvcl9tdXRhdGVfZW5kKSwKICAgIF0KICAgIHJldHVybiBiZW5jaG1hcmtzCgoKIyBVdGlsaXRpZXMKCmRlZiBfcHlzX3Rha2UobiwgbCk6CiAgICByZXN1bHQgPSBbXQogICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgICAgcmVzdWx0LmFwcGVuZChsLmZpcnN0KQogICAgICAgIGwgPSBsLnJlc3QKICAgIHJldHVybiBtYWtlX2xpc3QoKnJlc3VsdCkKCmRlZiBfcHlzX2Ryb3AobiwgbCk6CiAgICBvcmlnbCA9IGwKICAgIGZvciBpIGluIHJhbmdlKG4pOgogICAgICAgIGwgPSBsLnJlc3QKICAgIHJldHVybiBsCgpkZWYgX3B5c19pbnNlcnQoaSwgbmV3diwgbCk6CiAgICBpZiBpID09IDA6CiAgICAgICAgcmV0dXJuIGwuY29ucyhuZXd2KQogICAgYWZ0ZXIgPSBfcHlzX2Ryb3AoaSwgbCkKICAgIGlmIGFmdGVyIGlzIE5vbmU6CiAgICAgICAgYWZ0ZXIgPSBtYWtlX2xpc3QoKQogICAgcmV0dXJuIF9weXNfdGFrZShpLCBsKS5jb25jYXQoYWZ0ZXIuY29ucyhuZXd2KSkKCmRlZiBfcHlzX3NldChpLCBuZXd2LCBsKToKICAgIGFmdGVyID0gX3B5c19kcm9wKGkgKyAxLCBsKQogICAgaWYgYWZ0ZXIgaXMgbm90IE5vbmU6CiAgICAgICAgbmV3X2FuZF9hZnRlciA9IGFmdGVyLmNvbnMobmV3dikKICAgIGVsc2U6CiAgICAgICAgbmV3X2FuZF9hZnRlciA9IG1ha2VfbGlzdChuZXd2KQogICAgaWYgaSA9PSAwOgogICAgICAgIHJldHVybiBuZXdfYW5kX2FmdGVyCiAgICByZXR1cm4gX3B5c190YWtlKGksIGwpLmNvbmNhdChuZXdfYW5kX2FmdGVyKQoKCiMgQmVuY2htYXJrCgpmb3Igc2l6ZSBpbiBzeXMuYXJndlsxOl06CiAgICBzaXplID0gaW50KHNpemUpCiAgICBwcmludCAiPT09PSBkYXRhIHN0cnVjdHVyZSBiZW5jaG1hcmtzID09PT0iCiAgICBwcmludAogICAgcHJpbnQgImluaXRpYWwgc3RydWN0dXJlIHNpemUgaXMge30iLmZvcm1hdChzaXplKQogICAgcHJpbnQgInRpbWVzIGFyZSBmb3IgMTBrIG9wcyIKICAgIHByaW50ICJtdXRhYmxlIHZlcnNpb25zIGFyZSBsZWZ0IHRvIGdyb3cgYmV0d2VlbiBvcGVyYXRpb25zLCBzbyB0aW1pbmdzIG1heSBiZSBza2V3ZWQuIgogICAgcHJpbnQKICAgIGZvciBsaWIsIG9wLCBmdW5jIGluIGJlbmNobWFya3Moc2l6ZSk6CiAgICAgICAgcmVzdWx0ID0gdGltZWl0LnRpbWVpdChzZXR1cD0nZ2MuZW5hYmxlKCknLCBzdG10PWZ1bmMsIG51bWJlcj0xMDAwMCkKICAgICAgICBtaWxsaXNlY29uZHMgPSByZXN1bHQgKiAxMDAwCiAgICAgICAgcHJpbnQoIns6PDIwfSB7OjwyNX0gezo+MjIuMmZ9IG1pbGxpc2Vjb25kcyIuZm9ybWF0KGxpYiwgb3AsIG1pbGxpc2Vjb25kcykpCgoKIyBBTkFMWVNJUyBPRiBSRVNVTFRTOgoKIyByaWdodCBub3csICphbGwqIG9mIHRoaXMgYW5hbHlzaXMgaXMgYWJvdXQgdmVjdG9ycy4gTWFwcyB0byBjb21lLgoKIyBQWVNJU1RFTkNFCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyAtIHB5c2lzdGVuY2UgY29uY2F0IGlzIGV4dHJlbWVseSBzbG93LCBiZWNhdXNlIGl0J3MganVzdCBhIGxpbmtlZCBsaXN0LAojICAgbWVhbmluZyB0aGUgbGlzdCBtdXN0IGJlIHJldmVyc2VkIGFuZCBjb25zZWQgb250byBuZXcgcGFydC4KIyAgIC0gcHlweSBzcGVlZHMgaXQgdXAgUVVJVEUgYSBiaXQgcmVsYXRpdmUgdG8gQ1B5dGhvbiwgYnV0IHN0aWxsIHZlcnkgc2xvdwojIC0gZ2V0dGluZyB0aGUgbGVuZ3RoIG9mIGEgcHlzaXN0ZW5jZSBsaXN0IGlzIHZlcnkgc2xvdywgYmVjYXVzZSB0aGV5IGRvCjx8ZmltX2VuZHw+"]
["26f2aabd59bb7caadbf108ea8eeee3f6ee93644d-3","26f2aabd59bb7caadbf108ea8eeee3f6ee93644d","PHxmaW1fcHJlZml4fD4KIiIiCkZhY8ynYSB1bSBwcm9ncmFtYSBwYXJhIHNpbXVsYXIgdW1hIHNpdHVhY8ynYcyDbyBzaW1wbGVzIGRlIGRlcG/MgXNpdG8sIHJldGlyYWRhIGUgY29uc3VsdGEgZW0gdW0gYmFuY28uIEV4aWJhIG8gc2VndWludGUgbWVudSBjb20gYXMgb3BjzKdvzINlczoKCjEgLSBEZXBvzIFzaXRvCjIgLSBSZXRpcmFkYQozIC0gU2FsZG8KNCAtIFNhaXIgZG8gYWxnb3JpdG1vClNlIGEgZXNjb2xoYSBkbyB1c3VhzIFyaW8gZm9yIGRlcG/MgXNpdG8gb3UgcmV0aXJhZGEsIG8gYWxnb3JpdG1vIGRldmVyYcyBIHBlZGlyIG8gdmFsb3IgZGEgb3BlcmFjzKdhzINvIGUKYXR1YWxpemFyIGF1dG9tYXRpY2FtZW50ZSBvIHZhbG9yIGV4aXN0ZW50ZSBuYSBjb250YS4gTyBhbGdvcml0bW8gZGV2ZXJhzIEgc2VyIHV0aWxpemFkbyBhdGXMgSBxdWUgbyB1c3VhzIFyaW8gZXNjb2xoYSBhIG9wY8ynYcyDbyBzYWlyIGRvIGFsZ29yaXRtby4KIiIiCnZhbG9yX25hX2NvbnRhID0gWzEwMDAwMF0Kb3BjYW8gPSAiRU5UUkFSIgp3aGlsZSBvcGNhbyAhPSAiU0FJUiI6CiAgICBwcmludCgiPSIgKiAzNCkKICAgIHByaW50KCIrPT09QkVNIFZJTkRPIEFPIEJBTkNPIENFTlRSQUw9PT0rIikKICAgIHByaW50KCI9IiozNCkKICAgIHByaW50KCIiIgoxIC0gRGVww7NzaXRvCjIgLSBSZXRpcmFkYQozIC0gU2FsZG8KNCAtIFNhaXIgZG8gYWxnb3JpdG1vIiIiKQogICAgcHJpbnQoIj0iICogMzQpCiAgICBlc2NvbGhhID0gaW50KGlucHV0KCJESUdJVEUgVU1BIE9Qw4fDg086ICIpKQogICAgcHJpbnQoIj0iICogMzQpCiAgICBpZiBlc2NvbGhhID09IDE6CiAgICAgICAgZGVwb3NpdG8gPSBpbnQoaW5wdXQoIlF1YW50byBpcsOhIGRlcG9zaXRhcj8gUiQgIikpCiAgICAgICAgZGVwb3NpdGFkbyA9IHZhbG9yX25hX2NvbnRhWzBdICsgZGVwb3NpdG8KICAgICAgICB2YWxvcl9uYV9jb250YVswXSA9IGRlcG9zaXRhZG8KICAgIGVsaWYgZXNjb2xoYSA9PSAyOgogICAgICAgICAgICByZXRpcmEgPSBpbnQoaW5wdXQoIlF1YW50byBpcsOhIHJldGlyYXI/IFIkICIpKQogICAgICAgICAgICByZXRpcmFkbyA9IHZhbG9yX25hX2NvbnRhWzBdIC0gcmV0aXJhCiAgICAgICAgICAgIHZhbG9yX25hX2NvbnRhWzBdID0gcmV0aXJhZG8KICAgIGVsaWYgZXNjb2xoYSA9PSAzOgogICAgICAgICAgICBwcmludChmIk8gU0FMRE8gQVRVQUwgw4kgREUgUiQge3ZhbG9yX25hX2NvbnRhfSIpCiAgICBlbGlmIGVzY29saGEgPT0gNDoKPHxmaW1faG9sZXw+CnByaW50KCI9PT1PQlJJR0FETyBFIFZPTFRFIFNFTVBSRT09PSIpCgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgb3BjYW8gPSAiU0FJUiIKCjx8ZmltX2VuZHw+"]
["e4aaa624987b3a042a784fc9454a25f9a162ce71-3","e4aaa624987b3a042a784fc9454a25f9a162ce71","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgKGMpIDIwMjAgR3JhcGhjb3JlIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KaW1wb3J0IHBkYgppbXBvcnQgb3MKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gc2NpcHkgaW1wb3J0IHN0YXRzCmltcG9ydCBjdHlwZXMKaW1wb3J0IHBvcGFydApmcm9tIHNwYXJzZV9hdHRlbnRpb25fdXRpbHMgaW1wb3J0IEhlYWRzLCBDb252ZXJ0Cgpzb19wYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSksCiAgICAgICAgICAgICAgICAgICAgICAgIi4uLy4uL2N1c3RvbV9vcHMuc28iKQpjdHlwZXMuY2RsbC5Mb2FkTGlicmFyeShzb19wYXRoKQoKIyBTZXF1ZW5jZSBQYXJhbWV0ZXJzCm5fYmF0Y2ggPSAxCm5faGVhZHMgPSA0Cm5faGlkZGVuID0gMjU2CnNlcXVlbmNlX2xlbmd0aCA9IDEwMjQKYmxvY2tzaXplID0gWzE2LCAxNiwgMTZdCgojIEF0dGVudGlvbiBwYXJhbWV0ZXJzCndpbmRvd19zaXplID0gMTI4Cm5fc3VtbWFyeV9ibG9ja3MgPSAxCm5fd2luZG93cyA9IHNlcXVlbmNlX2xlbmd0aC8vd2luZG93X3NpemUKbl9ibG9ja19ncmFtID0gNAoKIyBBVFRFTlRJT04gUEFUVEVSTiBERUZJTklUSU9OCiMgdXNlIHRoZSBwcmVkZWZpbmVkIHNwYXJzZSBhdHRlbnRpb24gaGVhZHMKYXNzZXJ0IHNlcXVlbmNlX2xlbmd0aCAlIHdpbmRvd19zaXplID09IDAsICJTZXF1ZW5jZSBsZW5ndGggbXVzdCBiZSBkaXZpc2libGUgYnkgd2luZG93IGxlbmd0aCIKaGVhZDEgPSBIZWFkcy5jYXVzYWxfd2luZG93c193aXRoX3N1bW1hcmllcyh3aW5kb3dfc2l6ZSwgbl93aW5kb3dzLCBuX3N1bW1hcnlfYmxvY2tzLCBibG9ja3NpemVbLTI6XSkKaGVhZDIgPSBIZWFkcy5jYXVzYWxfYmxvY2tfZ3JhbShzZXF1ZW5jZV9sZW5ndGgsIG5fYmxvY2tfZ3JhbSwgYmxvY2tzaXplWy0yOl0pCgojIFVzZSBlYWNoIGhlYWQgdHdpY2UgKG11bHRpLWhlYWQgYXR0ZW50aW9uIHdpdGggNCBoZWFkcykKYmxvY2tzLCBzcGFyc2l0eSwgYnNyX3Joc19sZW5ndGhzX3Blcl8yZF9wbGFuZSA9IFwKICAgICAgICBIZWFkcy5jb25jYXRlbmF0ZV9oZWFkcyhbaGVhZDEsIGhlYWQyXSwgWzIsIDJdKQoKIyBCVUlMRCBUSEUgTU9ERUwgSU4gUE9QQVJUCmJ1aWxkZXIgPSBwb3BhcnQuQnVpbGRlcigpCgojIElOUFVUUwojIFRoZSBtYWluIGlucHV0IHRvIGF0dGVudGlvbiBpcyBhIHRlbnNvciBhY3RpdmF0aW9uIHdpdGggZGltcyBbQiwgUywgSF0KcGxhY2Vob2xkZXJfaW5mbyA9IHBvcGFydC5UZW5zb3JJbmZvKCJGTE9BVDE2IiwgW25fYmF0Y2gsIHNlcXVlbmNlX2xlbmd0aCwgbl9oaWRkZW5dKQppbnB1dF94ID0gYnVpbGRlci5hZGRJbnB1dFRlbnNvcihwbGFjZWhvbGRlcl9pbmZvLCAnaW5wdXRfeCcpCnByaW50KCdJbnB1dCBwbGFjZWhvbGRlciBoYXMgc2hhcGU6ICcsIGJ1aWxkZXIuZ2V0VGVuc29yU2hhcGUoaW5wdXRfeCkpCgojIFdlaWdodHMgZm9yIHRoZSBxdWVyeQpzY2FsZSA9IG5wLnNxcnQoMS8obl9oaWRkZW4pKQpxdWVyeV93ZWlnaHRzID0gc3RhdHMudHJ1bmNub3JtKC0xLCAxLCBsb2M9MC4wLCBzY2FsZT1zY2FsZSkucnZzKHNpemU9KG5faGlkZGVuLCBuX2hpZGRlbikpCnF1ZXJ5X3dlaWdodHMgPSBidWlsZGVyLmFkZEluaXRpYWxpemVkSW5wdXRUZW5zb3IobnAuZmxvYXQxNihxdWVyeV93ZWlnaHRzKSwgJ3F1ZXJ5X3dlaWdodHMnKQpwcmludCgnUXVlcnkgd2VpZ2h0cyBzaGFwZTogJywgYnVpbGRlci5nZXRUZW5zb3JTaGFwZShxdWVyeV93ZWlnaHRzKSkKCiMgV2VpZ2h0cyBmb3IgdGhlIGtleQpzY2FsZSA9IG5wLnNxcnQoMS8obl9oaWRkZW4pKQprZXlfd2VpZ2h0cyA9IHN0YXRzLnRydW5jbm9ybSgtMSwgMSwgbG9jPTAuMCwgc2NhbGU9c2NhbGUpLnJ2cyhzaXplPShuX2hpZGRlbiwgbl9oaWRkZW4pKQprZXlfd2VpZ2h0cyA9IGJ1aWxkZXIuYWRkSW5pdGlhbGl6ZWRJbnB1dFRlbnNvcihucC5mbG9hdDE2KGtleV93ZWlnaHRzKSwgJ2tleV93ZWlnaHRzJykKcHJpbnQoJ0tleSB3ZWlnaHRzIHNoYXBlOiAnLCBidWlsZGVyLmdldFRlbnNvclNoYXBlKGtleV93ZWlnaHRzKSkKCiMgV2VpZ2h0cyBmb3IgdGhlIHZhbHVlCnNjYWxlID0gbnAuc3FydCgxLyhuX2hpZGRlbikpCnZhbHVlX3dlaWdodHMgPSBzdGF0cy50cnVuY25vcm0oLTEsIDEsIGxvYz0wLjAsIHNjYWxlPXNjYWxlKS5ydnMoc2l6ZT0obl9oaWRkZW4sIG5faGlkZGVuKSkKdmFsdWVfd2VpZ2h0cyA9IGJ1aWxkZXIuYWRkSW5pdGlhbGl6ZWRJbnB1dFRlbnNvcihucC5mbG9hdDE2KHZhbHVlX3dlaWdodHMpLCAndmFsdWVfd2VpZ2h0cycpCnByaW50KCdWYWx1ZSB3ZWlnaHRzIGhhdmUgc2hhcGU6ICcsIGJ1aWxkZXIuZ2V0VGVuc29yU2hhcGUodmFsdWVfd2VpZ2h0cykpCgojIEF0dGVudGlvbiBwcm9qZWN0aW9uIHdlaWdodHMKc2NhbGUgPSBucC5zcXJ0KDEvbl9oaWRkZW4pCnByb2plY3Rpb25fd2VpZ2h0cyA9IHN0YXRzLnRydW5jbm9ybSgtMSwgMSwgbG9jPTAuMCwgc2NhbGU9c2NhbGUpLnJ2cyhzaXplPShuX2hpZGRlbiwgbl9oaWRkZW4pKQpwcm9qZWN0aW9uX3dlaWdodHMgPSBidWlsZGVyLmFkZEluaXRpYWxpemVkSW5wdXRUZW5zb3IobnAuZmxvYXQxNihwcm9qZWN0aW9uX3dlaWdodHMpLCAncHJvamVjdGlvbl93ZWlnaHRzJykKcHJpbnQoJ1Byb2plY3Rpb25fd2VpZ2h0cyBoYXZlIHNoYXBlOiAnLCBidWlsZGVyLmdldFRlbnNvclNoYXBlKHByb2plY3Rpb25fd2VpZ2h0cykpCgojIE5vcm0gcGFyYW1ldGVycwpnYW1tYSA9IGJ1aWxkZXIuYWRkSW5pdGlhbGl6ZWRJbnB1dFRlbnNvcihucC5vbmVzKFtuX2hpZGRlbl0sIGR0eXBlPW5wLmZsb2F0MTYpLCAnYXR0ZW50aW9uL2dhbW1hJykKcHJpbnQoJ2F0dGVudGlvbi9nYW1tYSBzaGFwZTogJywgYnVpbGRlci5nZXRUZW5zb3JTaGFwZShnYW1tYSkpCgpiZXRhID0gYnVpbGRlci5haU9ubnguY29uc3RhbnQobnAuZmxvYXQxNihucC56ZXJvcyhbbl9oaWRkZW5dKSksICJGTE9BVDE2IikKcHJpbnQoJ2F0dGVudGlvbi9iZXRhIHNoYXBlOiAnLCBidWlsZGVyLmdldFRlbnNvclNoYXBlKGJldGEpKQoKCiMgU29tZSBoZWxwZXIgZnVuY3Rpb25zIGZvciBkZWFsaW5nIHdpdGggYXR0ZW50aW9uIGhlYWRzCjx8ZmltX2hvbGV8PgogICAgdGVuc29yID0gYnVpbGRlci5yZXNoYXBlX2NvbnN0KGJ1aWxkZXIuYWlPbm54LCBbdGVuc29yXSwgY29tYl9zaGFwZSkKICAgIHJldHVybiB0ZW5zb3IKCgpkZWYgdHJhbnNwb3NlX2hlYWRzKHRlbnNvciwgaXNfa2V5cz1GYWxzZSk6CiAgICBwZXJtID0gWzAsIDIsIDEsIDNdIGlmIG5vdCBpc19rZXlzIGVsc2UgWzAsIDIsIDMsIDFdCiAgICByZXR1cm4gYnVpbGRlci5haU9ubngudHJhbnNwb3NlKFt0ZW5zb3JdLCBwZXJtPXBlcm0pCgojIEFUVEVOVElPTiBCTE9DSwojIDEuIFFLCnF1ZXJpZXMgPSBidWlsZGVyLmFpT25ueC5tYXRtdWwoW2lucHV0X3gsIHF1ZXJ5X3dlaWdodHNdLCAiUSIpCnF1ZXJpZXMgPSBleHRyYWN0X2hlYWRzKHF1ZXJpZXMpCnF1ZXJpZXMgPSB0cmFuc3Bvc2VfaGVhZHMocXVlcmllcykKCmtleXMgPSBidWlsZGVyLmFpT25ueC5tYXRtdWwoW2lucHV0X3gsIGtleV93ZWlnaHRzXSwgIksiKQprZXlzID0gZXh0cmFjdF9oZWFkcyhrZXlzKQprZXlzID0gdHJhbnNwb3NlX2hlYWRzKGtleXMsIGlzX2tleXM9VHJ1ZSkKCiMgMi4gTUFUTVVMCiMgTXVsdGlwbHkgdGhlIHF1ZXJpZXMgYW5kIGtleXMgaW4gYSBzcGFyc2Ugd2F5CmxvZ2l0cyA9IGJ1aWxkZXIuY3VzdG9tT3Aob3BOYW1lID0gIkJTTWF0TXVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBvcFZlcnNpb24gPSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbiA9ICJhaS5ncmFwaGNvcmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0cyA9IFtxdWVyaWVzLCBrZXlzXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAiYnNyX3Joc19sZW5ndGhzX3Blcl8yZF9wbGFuZSI6IGJzcl9yaHNfbGVuZ3Roc19wZXJfMmRfcGxhbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXRyaXhfZGltcyI6IFtzZXF1ZW5jZV9sZW5ndGgsIG5faGlkZGVuLy9uX2hlYWRzLCBzZXF1ZW5jZV9sZW5ndGhdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiYmxvY2tfc2l6ZSI6IGJsb2Nrc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYXJzaXR5X21hc2siOiBzcGFyc2l0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImJzbWF0bXVsX3R5cGUiOiAxLCAgIyBEZW5zZSBAIERlbnNlIC0+IFNwYXJzZSBvdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgInRyYW5zcG9zZV9yaHMiOiBGYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lbW9yeV9jeWNsZV9yYXRpbyI6IDAuNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImluX3R5cGUiOiAiZmxvYXQxNiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXRfdHlwZSI6ICJmbG9hdDE2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBwX3R5cGUiOiAiZmxvYXQxNiIKICAgICAgICAgICAgICAgICAgICAgICAgICB9KVswXQoKIyBUaGUgZ3JhZGllbnRzIG9mIHRoZSBsb2dpdHMgd2lsbCBoYXZlIHRoZSBmb2xsb3dpbmcgbmFtZQojIHdlJ2xsIHNob3cgaG93IHRvIGluc3BlY3QgdGhlbSBhdCB0aGUgZW5kIG9mIHRoZSBkZW1vCmRsb2dpdHMgPSBwb3BhcnQucmVzZXJ2ZWRHcmFkaWVudFByZWZpeCgpICsgbG9naXRzCgojIFNlbGYgYXR0ZW50aW9uIHNjYWxlcyB0aGUgbG9naXRzIGJ5IGhlYWQgc2l6ZSB0byBjb250cm9sIHZhcmlhbmNlLgp2YXJpYW5jZV9zY2FsZSA9IG5wLmFycmF5KFtucC5zcXJ0KDEuMC8obl9oaWRkZW4vbl9oZWFkcykpXSkKdmFyaWFuY2Vfc2NhbGUgPSBidWlsZGVyLmFpT25ueC5jb25zdGFudChucC5mbG9hdDE2KHZhcmlhbmNlX3NjYWxlKSwgInZhcmlhbmNlX3NjYWxlIikKc2NhbGVkX2xvZ2l0cyA9IGJ1aWxkZXIuYWlPbm54Lm11bChbbG9naXRzLCB2YXJpYW5jZV9zY2FsZV0sICJsb2dpdHNfc2NhbGluZyIpCgojIE5leHQgYXBwbHkgdGhlIHNwZWNpYWwgQnNTb2Z0bWF4IHRvIGNvbnZlcnQgdGhlIGxvZ2l0cyBpbnRvIHByb2JhYmlsaXRpZXMKIyB0aGlzIHdpbGwgdHJlYXQgemVyby1ibG9ja3MgYXMgaGF2aW5nIDAgcHJvYmFiaWxpdHkuIFRoZXJlJ3MgYWxzbyBvbiBvcHRpb24KIyB0byBhcHBseSBjYXVzYWwgbWFza2luZyAocGVyIGdyb3VwKSwgd2hpY2ggd2UgdXNlCnByb2JzID0gYnVpbGRlci5jdXN0b21PcChvcE5hbWUgPSAiQnNTb2Z0bWF4IiwKICAgICAgICAgICAgICAgICAgICAgICAgIG9wVmVyc2lvbiA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW4gPSAiYWkuZ3JhcGhjb3JlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0cyA9IFtzY2FsZWRfbG9naXRzXSwKICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hdHJpeERpbXMiOiBbbl9iYXRjaCwgbl9oZWFkcywgc2VxdWVuY2VfbGVuZ3RoLCBzZXF1ZW5jZV9sZW5ndGhdLAogICAgICAgICAgICAgICAgICAgICAgICAgICJibG9ja1NpemUiOiBibG9ja3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYXJzaXR5Ijogc3BhcnNpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgImdyb3VwU2l6ZXMiOiBic3JfcmhzX2xlbmd0aHNfcGVyXzJkX3BsYW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJCbG9ja01hc2tQZXJHcm91cCI6ICJaZXJvVXBwZXJUcmlhbmdsZSAiICogbGVuKGJzcl9yaHNfbGVuZ3Roc19wZXJfMmRfcGxhbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICB9KVswXQoKIyBUaGUgZ3JhZGllbnRzIHdydCBwcm9iYWJpbGl0aWVzIHdpbGwgaGF2ZSB0aGUgbmFtZSAoY2FuIGJlIHZpc3VhbGl6ZWQgaW4gdGhlIHNhbWUgd2F5CiMgYXMgZGxvZ2l0cwpkcHJvYnMgPSBwb3BhcnQucmVzZXJ2ZWRHcmFkaWVudFByZWZpeCgpICsgcHJvYnMKCiMgQ29uc3RydWN0IHRoZSB2YWx1ZXMgYmFzZWQgb24gdGhlIGF0dGVudGlvbiBzb2Z0bWF4IHByb2JhYmlsaXRpZXMKdmFsdWVzID0gYnVpbGRlci5haU9ubngubWF0bXVsKFtpbnB1dF94LCB2YWx1ZV93ZWlnaHRzXSwgIlYiKQp2YWx1ZXMgPSBleHRyYWN0X2hlYWRzKHZhbHVlcykKdmFsdWVzID0gdHJhbnNwb3NlX2hlYWRzKHZhbHVlcykKCiMgTXVsdGlwbHkgdGhlIHNwYXJzZSBwcm9iYWJpbGl0aWVzIHdpdGggdGhlIGRlbnNlIHZhbHVlcyB0byBwcm9kdWNlIGEgZGVuc2Ugb3V0cHV0CiMgVGhpcyByZXF1aXJlcyB0aGUgb3BlcmF0aW9uICh2YWx1ZXMuVCBAIHByb2JzLlQpLlQKIyBUbyB0cmFuc3Bvc2UgdGhlIHByb2JzIHdlIHNldCB0aGUgdHJhbnNwb3NlX3JocyBmbGFnIHRvIFRydWUKIyBUaGlzIG1lYW5zIHRoZSBtYXRtdWwgc2hhcGVzIGFyZSBbbl9oaWRkZW4vbl9oZWFkcywgKHNlcV0geCBbc2VxKSwgc2VxXSwgaW4gc2hvcnQKbWF0bXVsX2RpbXMgPSBbbl9oaWRkZW4vL25faGVhZHMsIHNlcXVlbmNlX2xlbmd0aCwgc2VxdWVuY2VfbGVuZ3RoXQp2YWx1ZXNfdCA9IGJ1aWxkZXIuYWlPbm54LnRyYW5zcG9zZShbdmFsdWVzXSwgcGVybT1bMCwgMSwgMywgMl0pCmF0dGVuZGVkVmFsdWVzX3QgPSBidWlsZGVyLmN1c3RvbU9wKG9wTmFtZSA9ICJCU01hdE11bCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wVmVyc2lvbiA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbiA9ICJhaS5ncmFwaGNvcmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHMgPSBbdmFsdWVzX3QsIHByb2JzXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJic3JfcmhzX2xlbmd0aHNfcGVyXzJkX3BsYW5lIjogYnNyX3Joc19sZW5ndGhzX3Blcl8yZF9wbGFuZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXRyaXhfZGltcyI6IG1hdG11bF9kaW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJsb2NrX3NpemUiOiBibG9ja3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhcnNpdHlfbWFzayI6IHNwYXJzaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJzbWF0bXVsX3R5cGUiOiAwLCAgIyBEZW5zZSBAIFNwYXJzZSAtPiBEZW5zZSBPdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0cmFuc3Bvc2VfcmhzIjogVHJ1ZSwgICMgdGhpcyB3aWxsIHRyYW5zcG9zZSB0aGUgcHJvYmFiaWxpdGllcyBtYXRyaXggZm9yICh2YWx1ZXMuVCBAIHByb2JzLlQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtb3J5X2N5Y2xlX3JhdGlvIjogMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluX3R5cGUiOiAiZmxvYXQxNiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3V0X3R5cGUiOiAiZmxvYXQxNiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHBfdHlwZSI6ICJmbG9hdDE2IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVswXQphdHRlbmRlZFZhbHVlcyA9IGJ1aWxkZXIuYWlPbm54LnRyYW5zcG9zZShbYXR0ZW5kZWRWYWx1ZXNfdF0sIHBlcm0gPSBbMCwgMSwgMywgMl0pCiMgRXZlcnl0aGluZyBmb2xsb3dpbmcgdGhpcyBsaW5lIGlzIHRoZSBzYW1lIGFzIGluIHJlZ3VsYXIgZGVuc2UgYXR0ZW50aW9uLgoKIyAzLiBQUk9KRUNUSU9OIE9GIEFUVEVOREVEIFZBTFVFUwojIGF0dGVuZGVkVmFsdWVzIGFyZSBkZW5zZSBhbmQgY2FuIGJlIHByb2plY3RlZCBhcyB1c3VhbAojIFRyYW5zcG9zZSBbQiwgSCwgUywgbl9oXSAtPiBbQiwgUywgSCwgbl9oXQphdHRlbmRlZFZhbHVlcyA9IGJ1aWxkZXIuYWlPbm54LnRyYW5zcG9zZShbYXR0ZW5kZWRWYWx1ZXNdLCBwZXJtID0gWzAsIDIsIDEsIDNdKQoKIyBSZXNoYXBlIFtCLCBTLCBILCBuX2hdIC0+IFtCLCBTLCBoaWRkZW5dCmF0dGVuZGVkVmFsdWVzID0gYnVpbGRlci5yZXNoYXBlX2NvbnN0KGJ1aWxkZXIuYWlPbm54LCBbYXR0ZW5kZWRWYWx1ZXNdLCBbbl9iYXRjaCwgc2VxdWVuY2VfbGVuZ3RoLCBuX2hpZGRlbl0pCnggPSBidWlsZGVyLmFpT25ueC5tYXRtdWwoW2F0dGVuZGVkVmFsdWVzLCBwcm9qZWN0aW9uX3dlaWdodHNdLCAiYXR0ZW5kZWRWYWx1ZXNAcHJvamVjdGlvbl93ZWlnaHRzIikKCiMgNC4gRFJPUE9VVCwgU0tJUCBDT05ORUNULCBOT1JNCmRyb3BvdXRfcHJvYiA9IDAuMQp4ID0gYnVpbGRlci5haU9ubnguZHJvcG91dChbeF0sIDEsIGRyb3BvdXRfcHJvYilbMF0KeCA9IGJ1aWxkZXIuYWlPbm54LmFkZChbaW5wdXRfeCwgeF0pCgojIEdyb3VwIG5vcm1hbGl6YXRpb24gb24gMkQgdGVuc29yCnggPSBidWlsZGVyLnJlc2hhcGVfY29uc3QoYnVpbGRlci5haU9ubngsIFt4XSwgW25fYmF0Y2gqc2VxdWVuY2VfbGVuZ3RoLCBuX2hpZGRlbl0pCnggPSBidWlsZGVyLmFpR3JhcGhjb3JlLmdyb3Vwbm9ybWFsaXphdGlvbihbeCwgZ2FtbWEsIGJldGFdLCAxLCAxZS02KVswXQp4ID0gYnVpbGRlci5yZXNoYXBlX2NvbnN0KGJ1aWxkZXIuYWlPbm54LCBbeF0sIFtuX2JhdGNoLCBzZXF1ZW5jZV9sZW5ndGgsIG5faGlkZGVuXSkKCiMgTE9TUwojIHNvbWV0aGluZyBhcmJpdHJhcnkganVzdCBzbyB0aGUgZ3JhcGggY29tcGlsZXMgYW5kIGdlbmVyYXRlcyBncmFkcwpsb3NzID0gYnVpbGRlci5haUdyYXBoY29yZS5sMWxvc3MoW3hdLCAxLjApCgojIERlc2NyaWJlIGhvdyB0byBydW4gdGhlIG1vZGVsCmFuY2hvcl9kZXNjID0ge2xvc3M6IHBvcGFydC5BbmNob3JSZXR1cm5UeXBlKCJBTEwiKSwKICAgICAgICAgICAgICAgcHJvYnM6IHBvcGFydC5BbmNob3JSZXR1cm5UeXBlKCJBTEwiKSwKICAgICAgICAgICAgICAgZHByb2JzOiBwb3BhcnQuQW5jaG9yUmV0dXJuVHlwZSgiQUxMIil9CmRhdGFGbG93ID0gcG9wYXJ0LkRhdGFGbG93KDEsIGFuY2hvcl9kZXNjKQpzZXNzaW9uID0gcG9wYXJ0LlRyYWluaW5nU2Vzc2lvbihmbk1vZGVsID0gYnVpbGRlci5nZXRNb2RlbFByb3RvKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvc3MgPSBsb3NzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VJbmZvID0gcG9wYXJ0LkRldmljZU1hbmFnZXIoKS5hY3F1aXJlQXZhaWxhYmxlRGV2aWNlKDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZXIgPSBwb3BhcnQuQ29uc3RTR0QoMC4wMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFGbG93ID0gZGF0YUZsb3cpCgojIENPTVBJTEUKc2Vzc2lvbi5wcmVwYXJlRGV2aWNlKCkKCiMgUlVOIEEgU1RFUCAoRldELCBCV0QsIFVQREFURSkKc2Vzc2lvbi53ZWlnaHRzRnJvbUhvc3QoKQphbmNob3JzID0gc2Vzc2lvbi5pbml0QW5jaG9yQXJyYXlzKCkKZmVlZF9kaWN0ID0gewogICAgaW5wdXRfeDogbnAuZmxvYXQxNihucC5yYW5kb20ucmFuZG4obl9iYXRjaCwgc2VxdWVuY2VfbGVuZ3RoLCBuX2hpZGRlbikpCn0Kc3RlcGlvID0gcG9wYXJ0LlB5U3RlcElPKGZlZWRfZGljdCwgYW5jaG9ycykKc2Vzc2lvbi5ydW4oc3RlcGlvKQoKIyBJTlNQRUNUCiMgRGVuc2UgdGVuc29ycyBjYW4gYmUgaW5zcGVjdGVkIGRpcmVjdGx5LiBIZXJlIHdlIHNob3cgaG93IHRvIGluc3BlY3QgdGhlCiMgYmxvY2stc3BhcnNlIGdyYWRpZW50IG9mIHRoZSBwcm9iYWJpbGl0aWVzIGJ5IGZpcnN0IGNvbnZlcnRpbmcgaXQgdG8gYQojIG51bXB5IGFycmF5CmdyYWRCbG9ja3MgPSBhbmNob3JzW2Rwcm9ic10KbnVtcHlTaGFwZSA9IFtuX2JhdGNoLCBuX2hlYWRzLCBzZXF1ZW5jZV9sZW5ndGgsIHNlcXVlbmNlX2xlbmd0aF0KZ3JhZEFycmF5ID0gQ29udmVydC50b19ucF9hcnJheShudW1weVNoYXBlLCBncmFkQmxvY2tzLCBzcGFyc2l0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBic3JfcmhzX2xlbmd0aHNfcGVyXzJkX3BsYW5lLCBibG9ja3NpemVbLTI6XSkKcHJpbnQoIk1lYW4gb2YgbWF4IHByb2IgZ3JhZCBvbiBlYWNoIHJvdzogIiwgbnAubWVhbihucC5tYXgoZ3JhZEFycmF5LCBheGlzPS0xKSkpCnByaW50KCJEb25lIikKPHxmaW1fc3VmZml4fD4KZGVmIGV4dHJhY3RfaGVhZHModGVuc29yKToKICAgICMgRGVzaXJlZCBzaGFwZSBhZnRlciByZXNoYXBlCiAgICBhc3NlcnQgbl9oaWRkZW4gJSBuX2hlYWRzID09IDAKICAgIGNvbWJfc2hhcGUgPSBbbl9iYXRjaCwgc2VxdWVuY2VfbGVuZ3RoLCBuX2hlYWRzLCBuX2hpZGRlbi8vbl9oZWFkc10KPHxmaW1fZW5kfD4="]
["39c7eddca500cb9cb21102e10d9463f7dacb8409-1","39c7eddca500cb9cb21102e10d9463f7dacb8409","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKZGVmIGRmdCh4KToKICAgICNGb3JtdWxhIGRhIERGVCB1c2FkYSBjb21vIGJhc2UKICAgIE4gPSBsZW4oeCkKICAgIFggPSBbMF0gKiBOCiAgICAKICAgIGZvciBrIGluIHJhbmdlKE4pOgogICAgICAgIHJlID0gMAogICAgICAgIGltID0gMAogICAgICAgIGZvciBuIGluIHJhbmdlKE4pOgogICAgICAgICAgICBwaGkgPSAoMiptYXRoLnBpKmsqbikvTgogICAgICAgICAgICByZSArPSB4W25dKm1hdGguY29zKHBoaSkKICAgICAgICAgICAgaW0gLT0geFtuXSptYXRoLnNpbihwaGkpCiAgICAgICAgcmUgPSByZS9OCiAgICAgICAgaW0gPSBpbS9OCiAgICAgICAgCiAgICAgICAgZnJlcSA9IGsKICAgICAgICBhbXAgPSBtYXRoLnNxcnQocmUqcmUraW0qaW0pCjx8ZmltX2hvbGV8PgogICAgcmV0dXJuIFgKPHxmaW1fc3VmZml4fD4KICAgICAgICBwaGFzZSA9IG1hdGguYXRhbjIoaW0sIHJlKQogICAgICAgIFhba10gPSBbcmUsIGltLCBmcmVxLCBhbXAsIHBoYXNlXQo8fGZpbV9lbmR8Pg=="]
["39c7eddca500cb9cb21102e10d9463f7dacb8409-2","39c7eddca500cb9cb21102e10d9463f7dacb8409","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKZGVmIGRmdCh4KToKICAgICNGb3JtdWxhIGRhIERGVCB1c2FkYSBjb21vIGJhc2UKICAgIE4gPSBsZW4oeCkKICAgIFggPSBbMF0gKiBOCiAgICAKICAgIGZvciBrIGluIHJhbmdlKE4pOgogICAgICAgIHJlID0gMAogICAgICAgIGltID0gMAogICAgICAgIGZvciBuIGluIHJhbmdlKE4pOgogICAgICAgICAgICBwaGkgPSAoMiptYXRoLnBpKmsqbikvTgogICAgICAgICAgICByZSArPSB4W25dKm1hdGguY29zKHBoaSkKICAgICAgICAgICAgaW0gLT0geFtuXSptYXRoLnNpbihwaGkpCjx8ZmltX2hvbGV8PgogICAgICAgIGFtcCA9IG1hdGguc3FydChyZSpyZStpbSppbSkKICAgICAgICBwaGFzZSA9IG1hdGguYXRhbjIoaW0sIHJlKQogICAgICAgIFhba10gPSBbcmUsIGltLCBmcmVxLCBhbXAsIHBoYXNlXQogICAgcmV0dXJuIFgKPHxmaW1fc3VmZml4fD4KICAgICAgICByZSA9IHJlL04KICAgICAgICBpbSA9IGltL04KICAgICAgICAKICAgICAgICBmcmVxID0gawo8fGZpbV9lbmR8Pg=="]
["39c7eddca500cb9cb21102e10d9463f7dacb8409-3","39c7eddca500cb9cb21102e10d9463f7dacb8409","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKZGVmIGRmdCh4KToKICAgICNGb3JtdWxhIGRhIERGVCB1c2FkYSBjb21vIGJhc2UKICAgIE4gPSBsZW4oeCkKICAgIFggPSBbMF0gKiBOCiAgICAKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZm9yIGsgaW4gcmFuZ2UoTik6CiAgICAgICAgcmUgPSAwCiAgICAgICAgaW0gPSAwCiAgICAgICAgZm9yIG4gaW4gcmFuZ2UoTik6Cjx8ZmltX2VuZHw+"]
["39c7eddca500cb9cb21102e10d9463f7dacb8409-4","39c7eddca500cb9cb21102e10d9463f7dacb8409","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKZGVmIGRmdCh4KToKICAgICNGb3JtdWxhIGRhIERGVCB1c2FkYSBjb21vIGJhc2UKICAgIE4gPSBsZW4oeCkKICAgIFggPSBbMF0gKiBOCiAgICAKICAgIGZvciBrIGluIHJhbmdlKE4pOgogICAgICAgIHJlID0gMAogICAgICAgIGltID0gMAogICAgICAgIGZvciBuIGluIHJhbmdlKE4pOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHBoaSA9ICgyKm1hdGgucGkqaypuKS9OCiAgICAgICAgICAgIHJlICs9IHhbbl0qbWF0aC5jb3MocGhpKQogICAgICAgICAgICBpbSAtPSB4W25dKm1hdGguc2luKHBoaSkKPHxmaW1fZW5kfD4="]
["39c7eddca500cb9cb21102e10d9463f7dacb8409-5","39c7eddca500cb9cb21102e10d9463f7dacb8409","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG1hdGgKZGVmIGRmdCh4KToKICAgICNGb3JtdWxhIGRhIERGVCB1c2FkYSBjb21vIGJhc2UKICAgIE4gPSBsZW4oeCkKICAgIFggPSBbMF0gKiBOCiAgICAKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIHBoaSA9ICgyKm1hdGgucGkqaypuKS9OCiAgICAgICAgICAgIHJlICs9IHhbbl0qbWF0aC5jb3MocGhpKQogICAgICAgICAgICBpbSAtPSB4W25dKm1hdGguc2luKHBoaSkKICAgICAgICByZSA9IHJlL04KICAgICAgICBpbSA9IGltL04KICAgICAgICAKICAgICAgICBmcmVxID0gawogICAgICAgIGFtcCA9IG1hdGguc3FydChyZSpyZStpbSppbSkKICAgICAgICBwaGFzZSA9IG1hdGguYXRhbjIoaW0sIHJlKQogICAgICAgIFhba10gPSBbcmUsIGltLCBmcmVxLCBhbXAsIHBoYXNlXQogICAgcmV0dXJuIFgKPHxmaW1fc3VmZml4fD4KICAgIGZvciBrIGluIHJhbmdlKE4pOgogICAgICAgIHJlID0gMAogICAgICAgIGltID0gMAogICAgICAgIGZvciBuIGluIHJhbmdlKE4pOgo8fGZpbV9lbmR8Pg=="]
["261cf9574c2411e4eac2de9446d6f70352f8c733-1","261cf9574c2411e4eac2de9446d6f70352f8c733","PHxmaW1fcHJlZml4fD4KZnJvbSAuX21haW4gaW1wb3J0ICoKIiIiCi0tLS0tLS0tLS0tLS0tCm92ZXJsb2FkaW5nLnB5Ci0tLS0tLS0tLS0tLS0tCgpGdW5jdGlvbiBvdmVybG9hZGluZyBmb3IgUHl0aG9uIDMKCiogUHJvamVjdCByZXBvc2l0b3J5OiBodHRwczovL2dpdGh1Yi5jb20vdG90bzExMjM1OC9vdmVybG9hZGluZy5weQoqIERvY3VtZW50YXRpb246IGh0dHBzOi8vb3ZlcmxvYWRpbmcucmVhZHRoZWRvY3Mub3JnLwoKPHxmaW1faG9sZXw+CgpfX3ZlcnNpb25fXyA9ICcxLjExJwpfX2FsbF9fID0gWydvdmVybG9hZCcsICdvdmVybG9hZGVkJywgJ292ZXJsb2FkcyddCjx8ZmltX3N1ZmZpeHw+CkNvcHlyaWdodCDCqSAyMDE04oCTMjAxNiBLYWxsZSBUdXVyZS4gUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgpDb3B5cmlnaHQgwqkgMjAyMeKAkzIwMjEgTC4gUGhhbS1Ucm9uZyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuCgoiIiIKPHxmaW1fZW5kfD4="]
["8417c80f9eb1bfb3bdcf9a76ae48bf648cf7919c-1","8417c80f9eb1bfb3bdcf9a76ae48bf648cf7919c","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMCBUaGUgTWVybGluIEF1dGhvcnMKIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgppbXBvcnQganNvbgppbXBvcnQgbG9nZ2luZwpmcm9tIGh0dHAgaW1wb3J0IEhUVFBTdGF0dXMKZnJvbSB0eXBpbmcgaW1wb3J0IEFueSwgRGljdAoKaW1wb3J0IG9yanNvbgppbXBvcnQgdG9ybmFkby53ZWIKZnJvbSBrZnNlcnZpbmcua2Ztb2RlbCBpbXBvcnQgS0ZNb2RlbAoKCmNsYXNzIEhUVFBIYW5kbGVyKHRvcm5hZG8ud2ViLlJlcXVlc3RIYW5kbGVyKToKICAgIGRlZiBpbml0aWFsaXplKHNlbGYsIG1vZGVsczogRGljdFtzdHIsIEtGTW9kZWxdKToKICAgICAgICBzZWxmLm1vZGVscyA9IG1vZGVscyAgIyBweWxpbnQ6ZGlzYWJsZT1hdHRyaWJ1dGUtZGVmaW5lZC1vdXRzaWRlLWluaXQKCiAgICBkZWYgZ2V0X21vZGVsKHNlbGYsIG5hbWU6IHN0cik6CiAgICAgICAgaWYgbmFtZSBub3QgaW4gc2VsZi5tb2RlbHM6CiAgICAgICAgICAgIHJhaXNlIHRvcm5hZG8ud2ViLkhUVFBFcnJvcigKICAgICAgICAgICAgICAgIHN0YXR1c19jb2RlPUhUVFBTdGF0dXMuTk9UX0ZPVU5ELAogICAgICAgICAgICAgICAgcmVhc29uPSJNb2RlbCB3aXRoIG5hbWUgJXMgZG9lcyBub3QgZXhpc3QuIiAlIG5hbWUKICAgICAgICAgICAgKQogICAgICAgIG1vZGVsID0gc2VsZi5tb2RlbHNbbmFtZV0KICAgICAgICBpZiBub3QgbW9kZWwucmVhZHk6CiAgICAgICAgICAgIG1vZGVsLmxvYWQoKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcmV0dXJuIG1vZGVsCgo8fGZpbV9lbmR8Pg=="]
["8417c80f9eb1bfb3bdcf9a76ae48bf648cf7919c-2","8417c80f9eb1bfb3bdcf9a76ae48bf648cf7919c","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMCBUaGUgTWVybGluIEF1dGhvcnMKIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgppbXBvcnQganNvbgppbXBvcnQgbG9nZ2luZwpmcm9tIGh0dHAgaW1wb3J0IEhUVFBTdGF0dXMKZnJvbSB0eXBpbmcgaW1wb3J0IEFueSwgRGljdAoKaW1wb3J0IG9yanNvbgppbXBvcnQgdG9ybmFkby53ZWIKZnJvbSBrZnNlcnZpbmcua2Ztb2RlbCBpbXBvcnQgS0ZNb2RlbAoKCmNsYXNzIEhUVFBIYW5kbGVyKHRvcm5hZG8ud2ViLlJlcXVlc3RIYW5kbGVyKToKICAgIGRlZiBpbml0aWFsaXplKHNlbGYsIG1vZGVsczogRGljdFtzdHIsIEtGTW9kZWxdKToKICAgICAgICBzZWxmLm1vZGVscyA9IG1vZGVscyAgIyBweWxpbnQ6ZGlzYWJsZT1hdHRyaWJ1dGUtZGVmaW5lZC1vdXRzaWRlLWluaXQKCiAgICBkZWYgZ2V0X21vZGVsKHNlbGYsIG5hbWU6IHN0cik6CiAgICAgICAgaWYgbmFtZSBub3QgaW4gc2VsZi5tb2RlbHM6CiAgICAgICAgICAgIHJhaXNlIHRvcm5hZG8ud2ViLkhUVFBFcnJvcigKICAgICAgICAgICAgICAgIHN0YXR1c19jb2RlPUhUVFBTdGF0dXMuTk9UX0ZPVU5ELAogICAgICAgICAgICAgICAgcmVhc29uPSJNb2RlbCB3aXRoIG5hbWUgJXMgZG9lcyBub3QgZXhpc3QuIiAlIG5hbWUKICAgICAgICAgICAgKQogICAgICAgIG1vZGVsID0gc2VsZi5tb2RlbHNbbmFtZV0KICAgICAgICBpZiBub3QgbW9kZWwucmVhZHk6CiAgICAgICAgICAgIG1vZGVsLmxvYWQoKQogICAgICAgIHJldHVybiBtb2RlbAoKICAgIGRlZiBnZXRfaGVhZGVycyhzZWxmLCByZXF1ZXN0KToKICAgICAgICByZXR1cm4ge2s6diBmb3IgKGssIHYpIGluIHJlcXVlc3QuaGVhZGVycy5nZXRfYWxsKCl9CgogICAgZGVmIHZhbGlkYXRlKHNlbGYsIHJlcXVlc3QpOgogICAgICAgIHRyeToKICAgICAgICAgICAgYm9keSA9IG9yanNvbi5sb2FkcyhyZXF1ZXN0LmJvZHkpCiAgICAgICAgZXhjZXB0IGpzb24uZGVjb2Rlci5KU09ORGVjb2RlRXJyb3IgYXMgZToKICAgICAgICAgICAgcmFpc2UgdG9ybmFkby53ZWIuSFRUUEVycm9yKAogICAgICAgICAgICAgICAgc3RhdHVzX2NvZGU9SFRUUFN0YXR1cy5CQURfUkVRVUVTVCwKICAgICAgICAgICAgICAgIHJlYXNvbj0iVW5yZWNvZ25pemVkIHJlcXVlc3QgZm9ybWF0OiAlcyIgJSBlCiAgICAgICAgICAgICkKICAgICAgICByZXR1cm4gYm9keQoKCmNsYXNzIEN1c3RvbVByZWRpY3RIYW5kbGVyKEhUVFBIYW5kbGVyKToKICAgIGRlZiBwb3N0KHNlbGYsIG5hbWU6IHN0cik6CiAgICAgICAgbW9kZWwgPSBzZWxmLmdldF9tb2RlbChuYW1lKQoKICAgICAgICByZXF1ZXN0ID0gc2VsZi52YWxpZGF0ZShzZWxmLnJlcXVlc3QpCiAgICAgICAgaGVhZGVycyA9IHNlbGYuZ2V0X2hlYWRlcnMoc2VsZi5yZXF1ZXN0KQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJlcXVlc3QgPSBtb2RlbC5wcmVwcm9jZXNzKHJlcXVlc3QpCiAgICAgICAgcmVzcG9uc2UgPSBtb2RlbC5wcmVkaWN0KHJlcXVlc3QsIGhlYWRlcnM9aGVhZGVycykKICAgICAgICByZXNwb25zZSA9IG1vZGVsLnBvc3Rwcm9jZXNzKHJlc3BvbnNlKQoKPHxmaW1fZW5kfD4="]
["903afc641a4e0a6f70077a20d9e848c6b5591563-1","903afc641a4e0a6f70077a20d9e848c6b5591563","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCgpmcm9tIHh0Y29jb3Rvb2xzLmNvY28gaW1wb3J0IENPQ08KCmZyb20gbW1wb3NlLmFwaXMgaW1wb3J0IChpbmZlcmVuY2VfYm90dG9tX3VwX3Bvc2VfbW9kZWwsIGluaXRfcG9zZV9tb2RlbCwKICAgICAgICAgICAgICAgICAgICAgICAgIHZpc19wb3NlX3Jlc3VsdCkKCmltcG9ydCBudW1weSBhcyBucAoKZGVmIG1haW4oKToKICAgICIiIlZpc3VhbGl6ZSB0aGUgZGVtbyBpbWFnZXMuIiIiCiAgICBwYXJzZXIgPSBBcmd1bWVudFBhcnNlcigpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdwb3NlX2NvbmZpZycsIGhlbHA9J0NvbmZpZyBmaWxlIGZvciBkZXRlY3Rpb24nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgncG9zZV9jaGVja3BvaW50JywgaGVscD0nQ2hlY2twb2ludCBmaWxlJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0taW1nLXJvb3QnLCB0eXBlPXN0ciwgZGVmYXVsdD0nJywgaGVscD0nSW1hZ2Ugcm9vdCcpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWpzb24tZmlsZScsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgZGVmYXVsdD0nJywKICAgICAgICBoZWxwPSdKc29uIGZpbGUgY29udGFpbmluZyBpbWFnZSBpbmZvLicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXNob3cnLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBoZWxwPSd3aGV0aGVyIHRvIHNob3cgaW1nJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tb3V0LWltZy1yb290JywKICAgICAgICB0eXBlPXN0ciwKICAgICAgICBkZWZhdWx0PScnLAogICAgICAgIGhlbHA9J1Jvb3Qgb2YgdGhlIG91dHB1dCBpbWcgZmlsZS4gJwogICAgICAgICdEZWZhdWx0IG5vdCBzYXZpbmcgdGhlIHZpc3VhbGl6YXRpb24gaW1hZ2VzLicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWRldmljZScsIGRlZmF1bHQ9J2N1ZGE6MCcsIGhlbHA9J0RldmljZSB1c2VkIGZvciBpbmZlcmVuY2UnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1rcHQtdGhyJywgdHlwZT1mbG9hdCwgZGVmYXVsdD0wLjMsIGhlbHA9J0tleXBvaW50IHNjb3JlIHRocmVzaG9sZCcpCgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS10YWcnLHR5cGU9c3RyLGhlbHA9J2ZvciB0YWcgdXNlJykKICAgIAogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCiAgICAjYXNzZXJ0IGFyZ3Muc2hvdyBvciAoYXJncy5vdXRfaW1nX3Jvb3QgIT0gJycpCgogICAgY29jbyA9IENPQ08oYXJncy5qc29uX2ZpbGUpCiAgICAjIGJ1aWxkIHRoZSBwb3NlIG1vZGVsIGZyb20gYSBjb25maWcgZmlsZSBhbmQgYSBjaGVja3BvaW50IGZpbGUKICAgIHBvc2VfbW9kZWwgPSBpbml0X3Bvc2VfbW9kZWwoCiAgICAgICAgYXJncy5wb3NlX2NvbmZpZywgYXJncy5wb3NlX2NoZWNrcG9pbnQsIGRldmljZT1hcmdzLmRldmljZS5sb3dlcigpKQoKICAgIGRhdGFzZXQgPSBwb3NlX21vZGVsLmNmZy5kYXRhWyd0ZXN0J11bJ3R5cGUnXQogICAgcHJpbnQgKGRhdGFzZXQpCiAgICAjYXNzZXJ0IChkYXRhc2V0ID09ICdCb3R0b21VcENvY29EYXRhc2V0JykKCiAgICBpbWdfa2V5cyA9IGxpc3QoY29jby5pbWdzLmtleXMoKSkKCiAgICAjIG9wdGlvbmFsCiAgICByZXR1cm5faGVhdG1hcCA9IFRydWUKCiAgICByZXR1cm5fZGVjb252X2ZlYXR1cmUgPSBUcnVlCiAgICByZXR1cm5fYmFja2JvbmVfZmVhdHVyZSA9IFRydWUKICAgIAogICAgIyBlLmcuIHVzZSAoJ2JhY2tib25lJywgKSB0byByZXR1cm4gYmFja2JvbmUgZmVhdHVyZQogICAgb3V0cHV0X2xheWVyX25hbWVzID0gTm9uZQoKCiAgICBkZWNvbnZfZmVhdHVyZV9saXN0ID0gW10KICAgIGJhY2tib25lX2ZlYXR1cmVfbGlzdCA9IFtdCiAgICBoZWF0bWFwX2xpc3QgPSBbXQogICAgCiAgICBzYW1wbGVfTiA9IDUKICAgIAogICAgIyBwcm9jZXNzIGVhY2ggaW1hZ2UKICAgIGZvciBpIGluIHJhbmdlKHNhbXBsZV9OKToKCiAgICAgICAgaWYgaSA9PSBsZW4oaW1nX2tleXMpLTE6CiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgaW1hZ2VfaWQgPSBpbWdfa2V5c1tpXQoKICAgICAgICAKICAgICAgICBpbWFnZSA9IGNvY28ubG9hZEltZ3MoaW1hZ2VfaWQpWzBdCiAgICAgICAgaW1hZ2VfbmFtZSA9IG9zLnBhdGguam9pbihhcmdzLmltZ19yb290LCBpbWFnZVsnZmlsZV9uYW1lJ10pCgogICAgICAgIHByaW50IChpbWFnZV9uYW1lKQogICAgICAgICMgdGVzdCBhIHNpbmdsZSBpbWFnZSwgd2l0aCBhIGxpc3Qgb2YgYmJveGVzLiAgICAgICAgCiAgICAgICAgCiAgICAgICAgcG9zZV9yZXN1bHRzLCByZXR1cm5lZF9vdXRwdXRzID0gaW5mZXJlbmNlX2JvdHRvbV91cF9wb3NlX21vZGVsKAogICAgICAgICAgICBwb3NlX21vZGVsLAogICAgICAgICAgICBpbWFnZV9uYW1lLAogICAgICAgICAgICByZXR1cm5faGVhdG1hcD1yZXR1cm5faGVhdG1hcCwKICAgICAgICAgICAgcmV0dXJuX2JhY2tib25lX2ZlYXR1cmUgPSByZXR1cm5fYmFja2JvbmVfZmVhdHVyZSwKICAgICAgICAgICAgcmV0dXJuX2RlY29udl9mZWF0dXJlID0gcmV0dXJuX2RlY29udl9mZWF0dXJlLAogICAgICAgICAgICBvdXRwdXRzPW91dHB1dF9sYXllcl9uYW1lcykgICAgCgogICAgICAgICMgc2hvdyB0aGUgcmVzdWx0cwoKCiAgICAgICAgZm9yIGUgaW4gcmV0dXJuZWRfb3V0cHV0czoKCiAgICAgICAgICAgIGhlYXRtYXAgPSBlWydoZWF0bWFwJ10KICAgICAgICAgICAgcHJpbnQgKGhlYXRtYXAuc2hhcGUpCiAgICAgICAgICAgIAogICAgICAgICAgICBkZWNvbnZfZmVhdHVyZSA9IGVbJ2RlY29udl9mZWF0dXJlJ11bMF0uZGV0YWNoKCkuY3B1KCkKICAgICAgICAgICAgCiAgICAgICAgICAgIGJhY2tib25lX2ZlYXR1cmUgPSBlWydiYWNrYm9uZV9mZWF0dXJlJ11bMF0uZGV0YWNoKCkuY3B1KCkKICAgICAgICAgICAgCiAgICAgICAgICAgIGRlY29udl9udW1fZmVhdHVyZSA9IGRlY29udl9mZWF0dXJlLnNoYXBlWzFdCiAgICAgICAgICAgIGJhY2tib25lX251bV9mZWF0dXJlID0gYmFja2JvbmVfZmVhdHVyZS5zaGFwZVsxXQogICAgICAgICAgICBoZWF0bWFwX251bV9mZWF0dXJlID0gaGVhdG1hcC5zaGFwZVsxXQogICAgICAgICAgICAKICAgICAgICAgICAgYmFja2JvbmVfZmVhdHVyZV9yZW9yZGVyZWQgPSBucC50cmFuc3Bvc2UoYmFja2JvbmVfZmVhdHVyZSwoMCwyLDMsMSkpLnJlc2hhcGUoLTEsYmFja2JvbmVfbnVtX2ZlYXR1cmUpCgogICAgICAgICAgICBkZWNvbnZfZmVhdHVyZV9yZW9yZGVyZWQgPSBucC50cmFuc3Bvc2UoZGVjb252X2ZlYXR1cmUsKDAsMiwzLDEpKS5yZXNoYXBlKC0xLGRlY29udl9udW1fZmVhdHVyZSkKCiAgICAgICAgICAgIGhlYXRtYXBfcmVvcmRlcmVkID0gbnAudHJhbnNwb3NlKGhlYXRtYXAsKDAsMiwzLDEpKS5yZXNoYXBlKC0xLGhlYXRtYXBfbnVtX2ZlYXR1cmUpCiAgICAgICAgICAgIAogICAgICAgICAgICBiYWNrYm9uZV9mZWF0dXJlX2xpc3QuYXBwZW5kKGJhY2tib25lX2ZlYXR1cmVfcmVvcmRlcmVkKQogICAgICAgICAgICBkZWNvbnZfZmVhdHVyZV9saXN0LmFwcGVuZChkZWNvbnZfZmVhdHVyZV9yZW9yZGVyZWQpCiAgICAgICAgICAgIGhlYXRtYXBfbGlzdC5hcHBlbmQoaGVhdG1hcF9yZW9yZGVyZWQpCgogICAgZGVjb252X2ZlYXR1cmVzID0gbnAuY29uY2F0ZW5hdGUoZGVjb252X2ZlYXR1cmVfbGlzdCxheGlzPTApCiAgICBiYWNrYm9uZV9mZWF0dXJlcyA9IG5wLmNvbmNhdGVuYXRlKGJhY2tib25lX2ZlYXR1cmVfbGlzdCxheGlzPTApCiAgICBoZWF0bWFwcyA9IG5wLmNvbmNhdGVuYXRlKGhlYXRtYXBfbGlzdCxheGlzPTApCjx8ZmltX2hvbGV8PgogICAgcHJpbnQgKCdoZWF0bWFwcycsaGVhdG1hcHMuc2hhcGUpCiAgICAKICAgIG5wLnNhdmV6X2NvbXByZXNzZWQoJ3t9X2ZlYXR1cmVzJy5mb3JtYXQoYXJncy50YWcpLAogICAgICAgICAgICAgICAgICAgICAgICBkZWNvbnZfZmVhdHVyZXM9ZGVjb252X2ZlYXR1cmVzLAogICAgICAgICAgICAgICAgICAgICAgICBiYWNrYm9uZV9mZWF0dXJlcyA9IGJhY2tib25lX2ZlYXR1cmVzLAogICAgICAgICAgICAgICAgICAgICAgICBoZWF0bWFwcz1oZWF0bWFwcwogICAgKQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIG1haW4oKQo8fGZpbV9zdWZmaXh8PgoKICAgIAogICAgcHJpbnQgKCdkZWNvbnZfZmVhdHVyZXMnLGRlY29udl9mZWF0dXJlcy5zaGFwZSkKICAgIHByaW50ICgnYmFja2JvbmVfZmVhdHVyZXMnLGJhY2tib25lX2ZlYXR1cmVzLnNoYXBlKQo8fGZpbV9lbmR8Pg=="]
["903afc641a4e0a6f70077a20d9e848c6b5591563-2","903afc641a4e0a6f70077a20d9e848c6b5591563","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCgpmcm9tIHh0Y29jb3Rvb2xzLmNvY28gaW1wb3J0IENPQ08KCmZyb20gbW1wb3NlLmFwaXMgaW1wb3J0IChpbmZlcmVuY2VfYm90dG9tX3VwX3Bvc2VfbW9kZWwsIGluaXRfcG9zZV9tb2RlbCwKICAgICAgICAgICAgICAgICAgICAgICAgIHZpc19wb3NlX3Jlc3VsdCkKCmltcG9ydCBudW1weSBhcyBucAoKZGVmIG1haW4oKToKICAgICIiIlZpc3VhbGl6ZSB0aGUgZGVtbyBpbWFnZXMuIiIiCiAgICBwYXJzZXIgPSBBcmd1bWVudFBhcnNlcigpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdwb3NlX2NvbmZpZycsIGhlbHA9J0NvbmZpZyBmaWxlIGZvciBkZXRlY3Rpb24nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgncG9zZV9jaGVja3BvaW50JywgaGVscD0nQ2hlY2twb2ludCBmaWxlJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0taW1nLXJvb3QnLCB0eXBlPXN0ciwgZGVmYXVsdD0nJywgaGVscD0nSW1hZ2Ugcm9vdCcpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWpzb24tZmlsZScsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgZGVmYXVsdD0nJywKICAgICAgICBoZWxwPSdKc29uIGZpbGUgY29udGFpbmluZyBpbWFnZSBpbmZvLicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXNob3cnLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBoZWxwPSd3aGV0aGVyIHRvIHNob3cgaW1nJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tb3V0LWltZy1yb290JywKICAgICAgICB0eXBlPXN0ciwKICAgICAgICBkZWZhdWx0PScnLAogICAgICAgIGhlbHA9J1Jvb3Qgb2YgdGhlIG91dHB1dCBpbWcgZmlsZS4gJwogICAgICAgICdEZWZhdWx0IG5vdCBzYXZpbmcgdGhlIHZpc3VhbGl6YXRpb24gaW1hZ2VzLicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWRldmljZScsIGRlZmF1bHQ9J2N1ZGE6MCcsIGhlbHA9J0RldmljZSB1c2VkIGZvciBpbmZlcmVuY2UnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1rcHQtdGhyJywgdHlwZT1mbG9hdCwgZGVmYXVsdD0wLjMsIGhlbHA9J0tleXBvaW50IHNjb3JlIHRocmVzaG9sZCcpCgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS10YWcnLHR5cGU9c3RyLGhlbHA9J2ZvciB0YWcgdXNlJykKICAgIAogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCiAgICAjYXNzZXJ0IGFyZ3Muc2hvdyBvciAoYXJncy5vdXRfaW1nX3Jvb3QgIT0gJycpCgogICAgY29jbyA9IENPQ08oYXJncy5qc29uX2ZpbGUpCiAgICAjIGJ1aWxkIHRoZSBwb3NlIG1vZGVsIGZyb20gYSBjb25maWcgZmlsZSBhbmQgYSBjaGVja3BvaW50IGZpbGUKICAgIHBvc2VfbW9kZWwgPSBpbml0X3Bvc2VfbW9kZWwoCiAgICAgICAgYXJncy5wb3NlX2NvbmZpZywgYXJncy5wb3NlX2NoZWNrcG9pbnQsIGRldmljZT1hcmdzLmRldmljZS5sb3dlcigpKQoKICAgIGRhdGFzZXQgPSBwb3NlX21vZGVsLmNmZy5kYXRhWyd0ZXN0J11bJ3R5cGUnXQogICAgcHJpbnQgKGRhdGFzZXQpCiAgICAjYXNzZXJ0IChkYXRhc2V0ID09ICdCb3R0b21VcENvY29EYXRhc2V0JykKCiAgICBpbWdfa2V5cyA9IGxpc3QoY29jby5pbWdzLmtleXMoKSkKCiAgICAjIG9wdGlvbmFsCiAgICByZXR1cm5faGVhdG1hcCA9IFRydWUKCiAgICByZXR1cm5fZGVjb252X2ZlYXR1cmUgPSBUcnVlCiAgICByZXR1cm5fYmFja2JvbmVfZmVhdHVyZSA9IFRydWUKICAgIAogICAgIyBlLmcuIHVzZSAoJ2JhY2tib25lJywgKSB0byByZXR1cm4gYmFja2JvbmUgZmVhdHVyZQogICAgb3V0cHV0X2xheWVyX25hbWVzID0gTm9uZQoKCiAgICBkZWNvbnZfZmVhdHVyZV9saXN0ID0gW10KICAgIGJhY2tib25lX2ZlYXR1cmVfbGlzdCA9IFtdCiAgICBoZWF0bWFwX2xpc3QgPSBbXQogICAgCiAgICBzYW1wbGVfTiA9IDUKICAgIAogICAgIyBwcm9jZXNzIGVhY2ggaW1hZ2UKICAgIGZvciBpIGluIHJhbmdlKHNhbXBsZV9OKToKCiAgICAgICAgaWYgaSA9PSBsZW4oaW1nX2tleXMpLTE6CiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgaW1hZ2VfaWQgPSBpbWdfa2V5c1tpXQoKICAgICAgICAKICAgICAgICBpbWFnZSA9IGNvY28ubG9hZEltZ3MoaW1hZ2VfaWQpWzBdCiAgICAgICAgaW1hZ2VfbmFtZSA9IG9zLnBhdGguam9pbihhcmdzLmltZ19yb290LCBpbWFnZVsnZmlsZV9uYW1lJ10pCgogICAgICAgIHByaW50IChpbWFnZV9uYW1lKQogICAgICAgICMgdGVzdCBhIHNpbmdsZSBpbWFnZSwgd2l0aCBhIGxpc3Qgb2YgYmJveGVzLiAgICAgICAgCiAgICAgICAgCiAgICAgICAgcG9zZV9yZXN1bHRzLCByZXR1cm5lZF9vdXRwdXRzID0gaW5mZXJlbmNlX2JvdHRvbV91cF9wb3NlX21vZGVsKAogICAgICAgICAgICBwb3NlX21vZGVsLAogICAgICAgICAgICBpbWFnZV9uYW1lLAogICAgICAgICAgICByZXR1cm5faGVhdG1hcD1yZXR1cm5faGVhdG1hcCwKICAgICAgICAgICAgcmV0dXJuX2JhY2tib25lX2ZlYXR1cmUgPSByZXR1cm5fYmFja2JvbmVfZmVhdHVyZSwKICAgICAgICAgICAgcmV0dXJuX2RlY29udl9mZWF0dXJlID0gcmV0dXJuX2RlY29udl9mZWF0dXJlLAogICAgICAgICAgICBvdXRwdXRzPW91dHB1dF9sYXllcl9uYW1lcykgICAgCgogICAgICAgICMgc2hvdyB0aGUgcmVzdWx0cwoKCiAgICAgICAgZm9yIGUgaW4gcmV0dXJuZWRfb3V0cHV0czoKCjx8ZmltX2hvbGV8PgogICAgICAgICAgICAKICAgICAgICAgICAgYmFja2JvbmVfZmVhdHVyZSA9IGVbJ2JhY2tib25lX2ZlYXR1cmUnXVswXS5kZXRhY2goKS5jcHUoKQogICAgICAgICAgICAKICAgICAgICAgICAgZGVjb252X251bV9mZWF0dXJlID0gZGVjb252X2ZlYXR1cmUuc2hhcGVbMV0KICAgICAgICAgICAgYmFja2JvbmVfbnVtX2ZlYXR1cmUgPSBiYWNrYm9uZV9mZWF0dXJlLnNoYXBlWzFdCiAgICAgICAgICAgIGhlYXRtYXBfbnVtX2ZlYXR1cmUgPSBoZWF0bWFwLnNoYXBlWzFdCiAgICAgICAgICAgIAogICAgICAgICAgICBiYWNrYm9uZV9mZWF0dXJlX3Jlb3JkZXJlZCA9IG5wLnRyYW5zcG9zZShiYWNrYm9uZV9mZWF0dXJlLCgwLDIsMywxKSkucmVzaGFwZSgtMSxiYWNrYm9uZV9udW1fZmVhdHVyZSkKCiAgICAgICAgICAgIGRlY29udl9mZWF0dXJlX3Jlb3JkZXJlZCA9IG5wLnRyYW5zcG9zZShkZWNvbnZfZmVhdHVyZSwoMCwyLDMsMSkpLnJlc2hhcGUoLTEsZGVjb252X251bV9mZWF0dXJlKQoKICAgICAgICAgICAgaGVhdG1hcF9yZW9yZGVyZWQgPSBucC50cmFuc3Bvc2UoaGVhdG1hcCwoMCwyLDMsMSkpLnJlc2hhcGUoLTEsaGVhdG1hcF9udW1fZmVhdHVyZSkKICAgICAgICAgICAgCiAgICAgICAgICAgIGJhY2tib25lX2ZlYXR1cmVfbGlzdC5hcHBlbmQoYmFja2JvbmVfZmVhdHVyZV9yZW9yZGVyZWQpCiAgICAgICAgICAgIGRlY29udl9mZWF0dXJlX2xpc3QuYXBwZW5kKGRlY29udl9mZWF0dXJlX3Jlb3JkZXJlZCkKICAgICAgICAgICAgaGVhdG1hcF9saXN0LmFwcGVuZChoZWF0bWFwX3Jlb3JkZXJlZCkKCiAgICBkZWNvbnZfZmVhdHVyZXMgPSBucC5jb25jYXRlbmF0ZShkZWNvbnZfZmVhdHVyZV9saXN0LGF4aXM9MCkKICAgIGJhY2tib25lX2ZlYXR1cmVzID0gbnAuY29uY2F0ZW5hdGUoYmFja2JvbmVfZmVhdHVyZV9saXN0LGF4aXM9MCkKICAgIGhlYXRtYXBzID0gbnAuY29uY2F0ZW5hdGUoaGVhdG1hcF9saXN0LGF4aXM9MCkKCiAgICAKICAgIHByaW50ICgnZGVjb252X2ZlYXR1cmVzJyxkZWNvbnZfZmVhdHVyZXMuc2hhcGUpCiAgICBwcmludCAoJ2JhY2tib25lX2ZlYXR1cmVzJyxiYWNrYm9uZV9mZWF0dXJlcy5zaGFwZSkKICAgIHByaW50ICgnaGVhdG1hcHMnLGhlYXRtYXBzLnNoYXBlKQogICAgCiAgICBucC5zYXZlel9jb21wcmVzc2VkKCd7fV9mZWF0dXJlcycuZm9ybWF0KGFyZ3MudGFnKSwKICAgICAgICAgICAgICAgICAgICAgICAgZGVjb252X2ZlYXR1cmVzPWRlY29udl9mZWF0dXJlcywKICAgICAgICAgICAgICAgICAgICAgICAgYmFja2JvbmVfZmVhdHVyZXMgPSBiYWNrYm9uZV9mZWF0dXJlcywKICAgICAgICAgICAgICAgICAgICAgICAgaGVhdG1hcHM9aGVhdG1hcHMKICAgICkKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgaGVhdG1hcCA9IGVbJ2hlYXRtYXAnXQogICAgICAgICAgICBwcmludCAoaGVhdG1hcC5zaGFwZSkKICAgICAgICAgICAgCiAgICAgICAgICAgIGRlY29udl9mZWF0dXJlID0gZVsnZGVjb252X2ZlYXR1cmUnXVswXS5kZXRhY2goKS5jcHUoKQo8fGZpbV9lbmR8Pg=="]
["903afc641a4e0a6f70077a20d9e848c6b5591563-3","903afc641a4e0a6f70077a20d9e848c6b5591563","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCgpmcm9tIHh0Y29jb3Rvb2xzLmNvY28gaW1wb3J0IENPQ08KCmZyb20gbW1wb3NlLmFwaXMgaW1wb3J0IChpbmZlcmVuY2VfYm90dG9tX3VwX3Bvc2VfbW9kZWwsIGluaXRfcG9zZV9tb2RlbCwKICAgICAgICAgICAgICAgICAgICAgICAgIHZpc19wb3NlX3Jlc3VsdCkKCmltcG9ydCBudW1weSBhcyBucAoKZGVmIG1haW4oKToKICAgICIiIlZpc3VhbGl6ZSB0aGUgZGVtbyBpbWFnZXMuIiIiCiAgICBwYXJzZXIgPSBBcmd1bWVudFBhcnNlcigpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdwb3NlX2NvbmZpZycsIGhlbHA9J0NvbmZpZyBmaWxlIGZvciBkZXRlY3Rpb24nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgncG9zZV9jaGVja3BvaW50JywgaGVscD0nQ2hlY2twb2ludCBmaWxlJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0taW1nLXJvb3QnLCB0eXBlPXN0ciwgZGVmYXVsdD0nJywgaGVscD0nSW1hZ2Ugcm9vdCcpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWpzb24tZmlsZScsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgZGVmYXVsdD0nJywKICAgICAgICBoZWxwPSdKc29uIGZpbGUgY29udGFpbmluZyBpbWFnZSBpbmZvLicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXNob3cnLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBoZWxwPSd3aGV0aGVyIHRvIHNob3cgaW1nJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tb3V0LWltZy1yb290JywKICAgICAgICB0eXBlPXN0ciwKICAgICAgICBkZWZhdWx0PScnLAogICAgICAgIGhlbHA9J1Jvb3Qgb2YgdGhlIG91dHB1dCBpbWcgZmlsZS4gJwogICAgICAgICdEZWZhdWx0IG5vdCBzYXZpbmcgdGhlIHZpc3VhbGl6YXRpb24gaW1hZ2VzLicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWRldmljZScsIGRlZmF1bHQ9J2N1ZGE6MCcsIGhlbHA9J0RldmljZSB1c2VkIGZvciBpbmZlcmVuY2UnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1rcHQtdGhyJywgdHlwZT1mbG9hdCwgZGVmYXVsdD0wLjMsIGhlbHA9J0tleXBvaW50IHNjb3JlIHRocmVzaG9sZCcpCgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS10YWcnLHR5cGU9c3RyLGhlbHA9J2ZvciB0YWcgdXNlJykKICAgIAogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCiAgICAjYXNzZXJ0IGFyZ3Muc2hvdyBvciAoYXJncy5vdXRfaW1nX3Jvb3QgIT0gJycpCgogICAgY29jbyA9IENPQ08oYXJncy5qc29uX2ZpbGUpCiAgICAjIGJ1aWxkIHRoZSBwb3NlIG1vZGVsIGZyb20gYSBjb25maWcgZmlsZSBhbmQgYSBjaGVja3BvaW50IGZpbGUKICAgIHBvc2VfbW9kZWwgPSBpbml0X3Bvc2VfbW9kZWwoCiAgICAgICAgYXJncy5wb3NlX2NvbmZpZywgYXJncy5wb3NlX2NoZWNrcG9pbnQsIGRldmljZT1hcmdzLmRldmljZS5sb3dlcigpKQoKICAgIGRhdGFzZXQgPSBwb3NlX21vZGVsLmNmZy5kYXRhWyd0ZXN0J11bJ3R5cGUnXQogICAgcHJpbnQgKGRhdGFzZXQpCiAgICAjYXNzZXJ0IChkYXRhc2V0ID09ICdCb3R0b21VcENvY29EYXRhc2V0JykKCiAgICBpbWdfa2V5cyA9IGxpc3QoY29jby5pbWdzLmtleXMoKSkKCiAgICAjIG9wdGlvbmFsCiAgICByZXR1cm5faGVhdG1hcCA9IFRydWUKCiAgICByZXR1cm5fZGVjb252X2ZlYXR1cmUgPSBUcnVlCiAgICByZXR1cm5fYmFja2JvbmVfZmVhdHVyZSA9IFRydWUKICAgIAogICAgIyBlLmcuIHVzZSAoJ2JhY2tib25lJywgKSB0byByZXR1cm4gYmFja2JvbmUgZmVhdHVyZQo8fGZpbV9ob2xlfD4KICAgIGJhY2tib25lX2ZlYXR1cmVfbGlzdCA9IFtdCiAgICBoZWF0bWFwX2xpc3QgPSBbXQogICAgCiAgICBzYW1wbGVfTiA9IDUKICAgIAogICAgIyBwcm9jZXNzIGVhY2ggaW1hZ2UKICAgIGZvciBpIGluIHJhbmdlKHNhbXBsZV9OKToKCiAgICAgICAgaWYgaSA9PSBsZW4oaW1nX2tleXMpLTE6CiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgaW1hZ2VfaWQgPSBpbWdfa2V5c1tpXQoKICAgICAgICAKICAgICAgICBpbWFnZSA9IGNvY28ubG9hZEltZ3MoaW1hZ2VfaWQpWzBdCiAgICAgICAgaW1hZ2VfbmFtZSA9IG9zLnBhdGguam9pbihhcmdzLmltZ19yb290LCBpbWFnZVsnZmlsZV9uYW1lJ10pCgogICAgICAgIHByaW50IChpbWFnZV9uYW1lKQogICAgICAgICMgdGVzdCBhIHNpbmdsZSBpbWFnZSwgd2l0aCBhIGxpc3Qgb2YgYmJveGVzLiAgICAgICAgCiAgICAgICAgCiAgICAgICAgcG9zZV9yZXN1bHRzLCByZXR1cm5lZF9vdXRwdXRzID0gaW5mZXJlbmNlX2JvdHRvbV91cF9wb3NlX21vZGVsKAogICAgICAgICAgICBwb3NlX21vZGVsLAogICAgICAgICAgICBpbWFnZV9uYW1lLAogICAgICAgICAgICByZXR1cm5faGVhdG1hcD1yZXR1cm5faGVhdG1hcCwKICAgICAgICAgICAgcmV0dXJuX2JhY2tib25lX2ZlYXR1cmUgPSByZXR1cm5fYmFja2JvbmVfZmVhdHVyZSwKICAgICAgICAgICAgcmV0dXJuX2RlY29udl9mZWF0dXJlID0gcmV0dXJuX2RlY29udl9mZWF0dXJlLAogICAgICAgICAgICBvdXRwdXRzPW91dHB1dF9sYXllcl9uYW1lcykgICAgCgogICAgICAgICMgc2hvdyB0aGUgcmVzdWx0cwoKCiAgICAgICAgZm9yIGUgaW4gcmV0dXJuZWRfb3V0cHV0czoKCiAgICAgICAgICAgIGhlYXRtYXAgPSBlWydoZWF0bWFwJ10KICAgICAgICAgICAgcHJpbnQgKGhlYXRtYXAuc2hhcGUpCiAgICAgICAgICAgIAogICAgICAgICAgICBkZWNvbnZfZmVhdHVyZSA9IGVbJ2RlY29udl9mZWF0dXJlJ11bMF0uZGV0YWNoKCkuY3B1KCkKICAgICAgICAgICAgCiAgICAgICAgICAgIGJhY2tib25lX2ZlYXR1cmUgPSBlWydiYWNrYm9uZV9mZWF0dXJlJ11bMF0uZGV0YWNoKCkuY3B1KCkKICAgICAgICAgICAgCiAgICAgICAgICAgIGRlY29udl9udW1fZmVhdHVyZSA9IGRlY29udl9mZWF0dXJlLnNoYXBlWzFdCiAgICAgICAgICAgIGJhY2tib25lX251bV9mZWF0dXJlID0gYmFja2JvbmVfZmVhdHVyZS5zaGFwZVsxXQogICAgICAgICAgICBoZWF0bWFwX251bV9mZWF0dXJlID0gaGVhdG1hcC5zaGFwZVsxXQogICAgICAgICAgICAKICAgICAgICAgICAgYmFja2JvbmVfZmVhdHVyZV9yZW9yZGVyZWQgPSBucC50cmFuc3Bvc2UoYmFja2JvbmVfZmVhdHVyZSwoMCwyLDMsMSkpLnJlc2hhcGUoLTEsYmFja2JvbmVfbnVtX2ZlYXR1cmUpCgogICAgICAgICAgICBkZWNvbnZfZmVhdHVyZV9yZW9yZGVyZWQgPSBucC50cmFuc3Bvc2UoZGVjb252X2ZlYXR1cmUsKDAsMiwzLDEpKS5yZXNoYXBlKC0xLGRlY29udl9udW1fZmVhdHVyZSkKCiAgICAgICAgICAgIGhlYXRtYXBfcmVvcmRlcmVkID0gbnAudHJhbnNwb3NlKGhlYXRtYXAsKDAsMiwzLDEpKS5yZXNoYXBlKC0xLGhlYXRtYXBfbnVtX2ZlYXR1cmUpCiAgICAgICAgICAgIAogICAgICAgICAgICBiYWNrYm9uZV9mZWF0dXJlX2xpc3QuYXBwZW5kKGJhY2tib25lX2ZlYXR1cmVfcmVvcmRlcmVkKQogICAgICAgICAgICBkZWNvbnZfZmVhdHVyZV9saXN0LmFwcGVuZChkZWNvbnZfZmVhdHVyZV9yZW9yZGVyZWQpCiAgICAgICAgICAgIGhlYXRtYXBfbGlzdC5hcHBlbmQoaGVhdG1hcF9yZW9yZGVyZWQpCgogICAgZGVjb252X2ZlYXR1cmVzID0gbnAuY29uY2F0ZW5hdGUoZGVjb252X2ZlYXR1cmVfbGlzdCxheGlzPTApCiAgICBiYWNrYm9uZV9mZWF0dXJlcyA9IG5wLmNvbmNhdGVuYXRlKGJhY2tib25lX2ZlYXR1cmVfbGlzdCxheGlzPTApCiAgICBoZWF0bWFwcyA9IG5wLmNvbmNhdGVuYXRlKGhlYXRtYXBfbGlzdCxheGlzPTApCgogICAgCiAgICBwcmludCAoJ2RlY29udl9mZWF0dXJlcycsZGVjb252X2ZlYXR1cmVzLnNoYXBlKQogICAgcHJpbnQgKCdiYWNrYm9uZV9mZWF0dXJlcycsYmFja2JvbmVfZmVhdHVyZXMuc2hhcGUpCiAgICBwcmludCAoJ2hlYXRtYXBzJyxoZWF0bWFwcy5zaGFwZSkKICAgIAogICAgbnAuc2F2ZXpfY29tcHJlc3NlZCgne31fZmVhdHVyZXMnLmZvcm1hdChhcmdzLnRhZyksCiAgICAgICAgICAgICAgICAgICAgICAgIGRlY29udl9mZWF0dXJlcz1kZWNvbnZfZmVhdHVyZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tib25lX2ZlYXR1cmVzID0gYmFja2JvbmVfZmVhdHVyZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlYXRtYXBzPWhlYXRtYXBzCiAgICApCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICBvdXRwdXRfbGF5ZXJfbmFtZXMgPSBOb25lCgoKICAgIGRlY29udl9mZWF0dXJlX2xpc3QgPSBbXQo8fGZpbV9lbmR8Pg=="]
["903afc641a4e0a6f70077a20d9e848c6b5591563-4","903afc641a4e0a6f70077a20d9e848c6b5591563","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCgpmcm9tIHh0Y29jb3Rvb2xzLmNvY28gaW1wb3J0IENPQ08KCmZyb20gbW1wb3NlLmFwaXMgaW1wb3J0IChpbmZlcmVuY2VfYm90dG9tX3VwX3Bvc2VfbW9kZWwsIGluaXRfcG9zZV9tb2RlbCwKICAgICAgICAgICAgICAgICAgICAgICAgIHZpc19wb3NlX3Jlc3VsdCkKCmltcG9ydCBudW1weSBhcyBucAoKZGVmIG1haW4oKToKICAgICIiIlZpc3VhbGl6ZSB0aGUgZGVtbyBpbWFnZXMuIiIiCiAgICBwYXJzZXIgPSBBcmd1bWVudFBhcnNlcigpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdwb3NlX2NvbmZpZycsIGhlbHA9J0NvbmZpZyBmaWxlIGZvciBkZXRlY3Rpb24nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgncG9zZV9jaGVja3BvaW50JywgaGVscD0nQ2hlY2twb2ludCBmaWxlJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0taW1nLXJvb3QnLCB0eXBlPXN0ciwgZGVmYXVsdD0nJywgaGVscD0nSW1hZ2Ugcm9vdCcpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWpzb24tZmlsZScsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgZGVmYXVsdD0nJywKICAgICAgICBoZWxwPSdKc29uIGZpbGUgY29udGFpbmluZyBpbWFnZSBpbmZvLicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXNob3cnLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBoZWxwPSd3aGV0aGVyIHRvIHNob3cgaW1nJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tb3V0LWltZy1yb290JywKICAgICAgICB0eXBlPXN0ciwKICAgICAgICBkZWZhdWx0PScnLAogICAgICAgIGhlbHA9J1Jvb3Qgb2YgdGhlIG91dHB1dCBpbWcgZmlsZS4gJwogICAgICAgICdEZWZhdWx0IG5vdCBzYXZpbmcgdGhlIHZpc3VhbGl6YXRpb24gaW1hZ2VzLicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWRldmljZScsIGRlZmF1bHQ9J2N1ZGE6MCcsIGhlbHA9J0RldmljZSB1c2VkIGZvciBpbmZlcmVuY2UnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1rcHQtdGhyJywgdHlwZT1mbG9hdCwgZGVmYXVsdD0wLjMsIGhlbHA9J0tleXBvaW50IHNjb3JlIHRocmVzaG9sZCcpCgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS10YWcnLHR5cGU9c3RyLGhlbHA9J2ZvciB0YWcgdXNlJykKICAgIAogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCiAgICAjYXNzZXJ0IGFyZ3Muc2hvdyBvciAoYXJncy5vdXRfaW1nX3Jvb3QgIT0gJycpCgogICAgY29jbyA9IENPQ08oYXJncy5qc29uX2ZpbGUpCiAgICAjIGJ1aWxkIHRoZSBwb3NlIG1vZGVsIGZyb20gYSBjb25maWcgZmlsZSBhbmQgYSBjaGVja3BvaW50IGZpbGUKICAgIHBvc2VfbW9kZWwgPSBpbml0X3Bvc2VfbW9kZWwoCiAgICAgICAgYXJncy5wb3NlX2NvbmZpZywgYXJncy5wb3NlX2NoZWNrcG9pbnQsIGRldmljZT1hcmdzLmRldmljZS5sb3dlcigpKQoKICAgIGRhdGFzZXQgPSBwb3NlX21vZGVsLmNmZy5kYXRhWyd0ZXN0J11bJ3R5cGUnXQogICAgcHJpbnQgKGRhdGFzZXQpCiAgICAjYXNzZXJ0IChkYXRhc2V0ID09ICdCb3R0b21VcENvY29EYXRhc2V0JykKCiAgICBpbWdfa2V5cyA9IGxpc3QoY29jby5pbWdzLmtleXMoKSkKCiAgICAjIG9wdGlvbmFsCiAgICByZXR1cm5faGVhdG1hcCA9IFRydWUKCiAgICByZXR1cm5fZGVjb252X2ZlYXR1cmUgPSBUcnVlCiAgICByZXR1cm5fYmFja2JvbmVfZmVhdHVyZSA9IFRydWUKICAgIAogICAgIyBlLmcuIHVzZSAoJ2JhY2tib25lJywgKSB0byByZXR1cm4gYmFja2JvbmUgZmVhdHVyZQogICAgb3V0cHV0X2xheWVyX25hbWVzID0gTm9uZQoKCiAgICBkZWNvbnZfZmVhdHVyZV9saXN0ID0gW10KICAgIGJhY2tib25lX2ZlYXR1cmVfbGlzdCA9IFtdCiAgICBoZWF0bWFwX2xpc3QgPSBbXQogICAgCiAgICBzYW1wbGVfTiA9IDUKICAgIAogICAgIyBwcm9jZXNzIGVhY2ggaW1hZ2UKICAgIGZvciBpIGluIHJhbmdlKHNhbXBsZV9OKToKCiAgICAgICAgaWYgaSA9PSBsZW4oaW1nX2tleXMpLTE6CiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgaW1hZ2VfaWQgPSBpbWdfa2V5c1tpXQoKICAgICAgICAKICAgICAgICBpbWFnZSA9IGNvY28ubG9hZEltZ3MoaW1hZ2VfaWQpWzBdCiAgICAgICAgaW1hZ2VfbmFtZSA9IG9zLnBhdGguam9pbihhcmdzLmltZ19yb290LCBpbWFnZVsnZmlsZV9uYW1lJ10pCgogICAgICAgIHByaW50IChpbWFnZV9uYW1lKQogICAgICAgICMgdGVzdCBhIHNpbmdsZSBpbWFnZSwgd2l0aCBhIGxpc3Qgb2YgYmJveGVzLiAgICAgICAgCiAgICAgICAgCiAgICAgICAgcG9zZV9yZXN1bHRzLCByZXR1cm5lZF9vdXRwdXRzID0gaW5mZXJlbmNlX2JvdHRvbV91cF9wb3NlX21vZGVsKAogICAgICAgICAgICBwb3NlX21vZGVsLAogICAgICAgICAgICBpbWFnZV9uYW1lLAogICAgICAgICAgICByZXR1cm5faGVhdG1hcD1yZXR1cm5faGVhdG1hcCwKICAgICAgICAgICAgcmV0dXJuX2JhY2tib25lX2ZlYXR1cmUgPSByZXR1cm5fYmFja2JvbmVfZmVhdHVyZSwKICAgICAgICAgICAgcmV0dXJuX2RlY29udl9mZWF0dXJlID0gcmV0dXJuX2RlY29udl9mZWF0dXJlLAogICAgICAgICAgICBvdXRwdXRzPW91dHB1dF9sYXllcl9uYW1lcykgICAgCgogICAgICAgICMgc2hvdyB0aGUgcmVzdWx0cwoKCiAgICAgICAgZm9yIGUgaW4gcmV0dXJuZWRfb3V0cHV0czoKCiAgICAgICAgICAgIGhlYXRtYXAgPSBlWydoZWF0bWFwJ10KICAgICAgICAgICAgcHJpbnQgKGhlYXRtYXAuc2hhcGUpCiAgICAgICAgICAgIAogICAgICAgICAgICBkZWNvbnZfZmVhdHVyZSA9IGVbJ2RlY29udl9mZWF0dXJlJ11bMF0uZGV0YWNoKCkuY3B1KCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAKICAgICAgICAgICAgYmFja2JvbmVfZmVhdHVyZSA9IGVbJ2JhY2tib25lX2ZlYXR1cmUnXVswXS5kZXRhY2goKS5jcHUoKQogICAgICAgICAgICAKICAgICAgICAgICAgZGVjb252X251bV9mZWF0dXJlID0gZGVjb252X2ZlYXR1cmUuc2hhcGVbMV0KPHxmaW1fZW5kfD4="]
["2667774bbda1ff104d51481f1311b198b9342d56-1","2667774bbda1ff104d51481f1311b198b9342d56","PHxmaW1fcHJlZml4fD4KIiIiCkNyZWF0ZWQgYnk6IE1ldG8gVHJhamtvdnNraQpFbWFpbDogbWV0b3RAaG90bWFpbC5jb20KIiIiCgppbXBvcnQgY3N2CmltcG9ydCBvcwppbXBvcnQgbWF0aAoKIiIiCmZvciBlYXNpbHkgZGF0YSBtYW5pcHVsYXRpb24sIHRoZSBkYXRhIGRpY3Rpb25hcmllcyB3aWxsIGJlIHN0cnVjdHVyZWQgbGlrZSB0aGlzCmRhdGEgPSB7CiAgICBpZCA6IHsKICAgICAgICBuYW1lOiBYWFhYLAogICAgICAgIC8vIGFsbCBzZXJpZXMgbGlrZSBrZXlzLCBmb3IgZXhhbXBsZToKICAgICAgICAnUG9wdWxhdGlvbiBhbm51YWwgcmF0ZSBvZiBpbmNyZWFzZSAocGVyY2VudCknOiAvLyBsaXN0IG9mIGFsbCB5ZWFycwogICAgICAgIFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgeWVhcjogWVlZWSwKICAgICAgICAgICAgICAgIHZhbHVlOiBaWiwKICAgICAgICAgICAgICAgIGZvb3Rub3RlczogV1dXV1dXV1dXV1dXV1cKICAgICAgICAgICAgfSwKICAgICAgICAgICAgLi4uCiAgICAgICAgXSwKICAgICAgICAuLi4KICAgIH0sCiAgICAuLi4KfQoiIiIKZGF0YV9ieV9yZWdpb24gPSB7fQpkYXRhX2J5X2NvdW50cnkgPSB7fQojIGluIHRoZSBhbnN3ZXJzIGFycmF5IHdlJ2xsIHN0b3JlIHRoZSBxdWVzdGlvbnMgYW5kIGFuc3dlcnMgbGlrZSB0dXBsZXMgKHF1ZXN0aW9uLCBhbnN3ZXIpCmFuc3dlcnMgPSBbXQoiIiIKSG93IHRvIGdldCBhbGwgcmVnaW9ucyBhbmQgSURzPwpHbyB0byAtIGh0dHA6Ly9kYXRhLnVuLm9yZy8KUmlnaHQgY2xpY2sgYW55d2hlcmUgYW5kIGNsaWNrICJJbnNwZWN0IGVsZW1lbnQiCkluIHRoZSBjb25zb2xlLCBjb3B5LXBhc3RlIHRoaXMgSmF2YVNjcmlwdCBzY3JpcHQgYW5kIHByZXNzIGVudGVyOgoKYWxsUmVnaW9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5Db3VudHJ5TGlzdCIpWzFdLmNoaWxkcmVuWzBdLmNoaWxkcmVuCm5SZWdpb25zID0gYWxsUmVnaW9ucy5sZW5ndGgKZGljdFJlZ2lvbnMgPSB7fQoKZm9yIChpPTE7IGk8blJlZ2lvbnM7IGkrKykgewoJYSA9IGFsbFJlZ2lvbnNbaV0uY2hpbGRyZW5bMF0KCWZpcnN0ID0gYS5ocmVmLmxhc3RJbmRleE9mKCJnIikgKyAxCglsYXN0ID0gYS5ocmVmLmxlbmd0aCAtIDUKCglpZCA9IGEuaHJlZi5zdWJzdHJpbmcoZmlyc3QsIGxhc3QpCglyZWdpb24gPSBhLmlubmVyVGV4dAogICAgCglkaWN0UmVnaW9uc1tpZF0gPSByZWdpb24KfQoKY29uc29sZS5sb2coZGljdFJlZ2lvbnMpCiIiIgpub3JfcmVnaW9uX2NvdW50cnkgPSB7CiAgICAxOiAiVG90YWwsIGFsbCBjb3VudHJpZXMgb3IgYXJlYXMiLAogICAgMTU4OiAiT3RoZXIgbm9uLXNwZWNpZmllZCBhcmVhcyIKfQpyZWdpb25zID0gewogICAgMjogIkFmcmljYSIsIAogICAgNTogIlNvdXRoIEFtZXJpY2EiLCAKICAgIDk6ICJPY2VhbmlhIiwgCiAgICAxMTogIldlc3Rlcm4gQWZyaWNhIiwgCiAgICAxMzogIkNlbnRyYWwgQW1lcmljYSIsIAogICAgMTQ6ICJFYXN0ZXJuIEFmcmljYSIsIAogICAgMTU6ICJOb3J0aGVybiBBZnJpY2EiLCAKICAgIDE3OiAiTWlkZGxlIEFmcmljYSIsIAogICAgMTg6ICJTb3V0aGVybiBBZnJpY2EiLCAKICAgIDE5OiAiQW1lcmljYXMiLCAKICAgIDIxOiAiTm9ydGhlcm4gQW1lcmljYSIsIAogICAgMjk6ICJDYXJpYmJlYW4iLCAKICAgIDMwOiAiRWFzdGVybiBBc2lhIiwgCiAgICAzNDogIlNvdXRoZXJuIEFzaWEiLCAKICAgIDM1OiAiU291dGgtZWFzdGVybiBBc2lhIiwgCiAgICAzOTogIlNvdXRoZXJuIEV1cm9wZSIsIAogICAgNTM6ICJBdXN0cmFsaWEgYW5kIE5ldyBaZWFsYW5kIiwgCiAgICA1NDogIk1lbGFuZXNpYSIsIAogICAgNTc6ICJNaWNyb25lc2lhIiwgCiAgICA2MTogIlBvbHluZXNpYSIsIAogICAgMTQyOiAiQXNpYSIsIAogICAgMTQzOiAiQ2VudHJhbCBBc2lhIiwgCiAgICAxNDU6ICJXZXN0ZXJuIEFzaWEiLCAKICAgIDE1MDogIkV1cm9wZSIsIAogICAgMTUxOiAiRWFzdGVybiBFdXJvcGUiLCAKICAgIDE1NDogIk5vcnRoZXJuIEV1cm9wZSIsIAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAxNTU6ICJXZXN0ZXJuIEV1cm9wZSIsIAogICAgMjAyOiAiU3ViLVNhaGFyYW4gQWZyaWNhIiwgCiAgICA0MTk6ICJMYXRpbiBBbWVyaWNhICYgdGhlIENhcmliYmVhbiIKPHxmaW1fZW5kfD4="]
["2667774bbda1ff104d51481f1311b198b9342d56-2","2667774bbda1ff104d51481f1311b198b9342d56",{"$cut":{"chars":18432,"head":"PHxmaW1fcHJlZml4fD4KIiIiCkNyZWF0ZWQgYnk6IE1ldG8gVHJhamtvdnNraQpFbWFpbDogbWV0b3RAaG90bWFpbC5jb20KIiIiCgppbXBvcnQgY3N2CmltcG9ydCBvcwppbXBvcnQgbWF0aAoKIiIiCmZvciBlYXNpbHkgZGF0YSBtYW5pcHVsYXRpb24sIHRoZSBkYXRhIGRpY3Rpb25hcmllcyB3aWxsIGJlIHN0cnVjdHVyZWQgbGlrZSB0aGlzCmRhdGEgPSB7CiAgICBpZCA6IHsKICAgICAgICBuYW1lOiBYWFhYLAogICAgICAgIC8vIGFsbCBzZXJpZXMgbGlrZSBrZXlzLCBmb3IgZXhhbXBsZToKICAgICAgICAnUG9wdWxhdGlvbiBhbm51YWwgcmF0ZSBvZiBpbmNyZWFzZSAocGVyY2VudCknOiAvLyBsaXN0IG9mIGFsbCB5ZWFycwogICAgICAgIFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgeWVhcjogWVlZWSwKICAgICAgICAgICAgICAgIHZhbHVlOiBaWiwKICAgICAgICAgICAgICAgIGZvb3Rub3RlczogV1dXV1dXV1dXV1dXV1cKICAgICAgICAgICAgfSwKICAgICAgICAgICAgLi4uCiAgICAgICAgXSwKICAgICAgICAuLi4KICAgIH0sCiAgICAuLi4KfQoiIiIKZGF0YV9ieV9yZWdpb24gPSB7fQpkYXRhX2J5X2NvdW50cnkgPSB7fQojIGluIHRoZSBhbnN3ZXJzIGFycmF5IHdlJ2xsIHN0b3JlIHRoZSBxdWVzdGlvbnMgYW5kIGFuc3dlcnMgbGlrZSB0dXBsZXMgKHF1ZXN0aW9uLCBhbnN3ZXIpCmFuc3dlcnMgPSBbXQoiIiIKSG93IHRvIGdldCBhbGwgcmVnaW9ucyBhbmQgSURzPwpHbyB0byAtIGh0dHA6Ly9kYXRhLnVuLm9yZy8KUmlnaHQgY2xpY2sgYW55d2hlcmUgYW5kIGNsaWNrICJJbnNwZWN0IGVsZW1lbnQiCkluIHRoZSBjb25zb2xlLCBjb3B5LXBhc3RlIHRoaXMgSmF2YVNjcmlwdCBzY3JpcHQgYW5kIHByZXNzIGVudGVyOgoKYWxsUmVnaW9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5Db3VudHJ5TGlzdCIpWzFdLmNoaWxkcmVuWzBdLmNoaWxkcmVuCm5SZWdpb25zID0gYWxsUmVnaW9ucy5sZW5ndGgKZGljdFJlZ2lvbnMgPSB7fQoKZm9yIChpPTE7IGk8blJlZ2lvbnM7IGkrKykgewoJYSA9IGFsbFJlZ2lvbnNbaV0uY2hpbGRyZW5bMF0KCWZpcnN0ID0gYS5ocmVmLmxhc3RJbmRleE9mKCJnIikgKyAxCglsYXN0ID0gYS5ocmVmLmxlbmd0aCAtIDUKCglpZCA9IGEuaHJlZi5zdWJzdHJpbmcoZmlyc3QsIGxhc3QpCglyZWdpb24gPSBhLmlubmVyVGV4dAogICAgCglkaWN0UmVnaW9uc1tpZF0gPSByZWdpb24KfQoKY29uc29sZS5sb2coZGljdFJlZ2lvbnMpCiIiIgpub3JfcmVnaW9uX2NvdW50cnkgPSB7CiAgICAxOiAiVG90YWwsIGFsbCBjb3VudHJpZXMgb3IgYXJlYXMiLAogICAgMTU4OiAiT3RoZXIgbm9uLXNwZWNpZmllZCBhcmVhcyIKfQpyZWdpb25zID0gewogICAgMjogIkFmcmljYSIsIAogICAgNTogIlNvdXRoIEFtZXJpY2EiLCAKICAgIDk6ICJPY2VhbmlhIiwgCiAgICAxMTogIldlc3Rlcm4gQWZyaWNhIiwgCiAgICAxMzogIkNlbnRyYWwgQW1lcmljYSIsIAogICAgMTQ6ICJFYXN0ZXJuIEFmcmljYSIsIAogICAgMTU6ICJOb3J0aGVybiBBZnJpY2EiLCAKICAgIDE3OiAiTWlkZGxlIEFmcmljYSIsIAogICAgMTg6ICJTb3V0aGVybiBBZnJpY2EiLCAKICAgIDE5OiAiQW1lcmljYXMiLCAKICAgIDIxOiAiTm9ydGhlcm4gQW1lcmljYSIsIAogICAgMjk6ICJDYXJpYmJlYW4iLCAKICAgIDMwOiAiRWFzdGVybiBBc2lhIiwgCiAgICAzNDogIlNvdXRoZXJuIEFzaWEiLCAKICAgIDM1OiAiU291dGgtZWFzdGVybiBBc2lhIiwgCiAgICAzOTogIlNvdXRoZXJuIEV1cm9wZSIsIAogICAgNTM6ICJBdXN0cmFsaWEgYW5kIE5ldyBaZWFsYW5kIiwgCiAgICA1NDogIk1lbGFuZXNpYSIsIAogICAgNTc6ICJNaWNyb25lc2lhIiwgCiAgICA2MTogIlBvbHluZXNpYSIsIAogICAgMTQyOiAiQXNpYSIsIAogICAgMTQzOiAiQ2VudHJhbCBBc2lhIiwgCiAgICAxNDU6ICJXZXN0ZXJuIEFzaWEiLCAKICAgIDE1MDogIkV1cm9wZSIsIAogICAgMTUxOiAiRWFzdGVybiBFdXJvcGUiLCAKICAgIDE1NDogIk5vcnRoZXJuIEV1cm9wZSIsIAogICAgMTU1OiAiV2VzdGVybiBFdXJvcGUiLCAKICAgIDIwMjogIlN1Yi1TYWhhcmFuIEFmcmljYSIsIAogICAgNDE5OiAiTGF0aW4gQW1lcmljYSAmIHRoZSBDYXJpYmJlYW4iCn0KCmRlZiBsb2FkX2RpY3Rpb25hcmllcygpOgogICAgIiIiIFJlYWRzIHRoZSBkYXRhIGZyb20gdGhlIGRhdGEuY3N2IGZpbGUgYW5kIGZpbGwgdGhlIGRpY3Rpb25hcmllcy4KICAgICIiIgogICAgZ2xvYmFsIGRhdGFfYnlfcmVnaW9uCiAgICBnbG9iYWwgZGF0YV9ieV9jb3VudHJ5CgogICAgIyBvcGVkIHRoZSBkYXRhLmNzdiBmaWxlIGZvciByZWFkaW5nIGFuZCBmaWxsIGRhdGFfYnlfcmVnaW9uIGFuZCBkYXRhX2J5X2NvdW50cnkKICAgIGRhdGFfZmlsZSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSArICdcXGRhdGEuY3N2JwogICAgCiAgICB3aXRoIG9wZW4oZGF0YV9maWxlLCBlbmNvZGluZz0ndXRmLTgnLCBtb2RlPSdyJykgYXMgZmlsZToKICAgICAgICByZWFkZXIgPSBjc3YucmVhZGVyKGZpbGUpCiAgICAgICAgbmV4dChyZWFkZXIpICMgaWdub3JlIHRoZSBjb2x1bW4ncyBuYW1lcwoKICAgICAgICAjIHJlYWQgcm93IGJ5IHJvdwogICAgICAgIGZvciByb3cgaW4gcmVhZGVyOgogICAgICAgICAgICByb3dfaWQgPSBpbnQocm93WzBdKQogICAgICAgICAgICAKICAgICAgICAgICAgIyBjaGVjayBpZiB0aGlzIGlzIGEgcmVnaW9uLCBhIGNvdW50cnkgb3IgdGhlIG5vcl9yZWdpb25fY291bnRyeSdzIGRhdGEKICAgICAgICAgICAgaWYgcm93X2lkIGluIG5vcl9yZWdpb25fY291bnRyeToKICAgICAgICAgICAgICAgIGNvbnRpbnVlICMgaWdub3JlIHRoZSBub3JfcmVnaW9uX2NvdW50cnkncyBkYXRhCiAgICAgICAgICAgIGVsaWYgcm93X2lkIGluIHJlZ2lvbnM6CiAgICAgICAgICAgICAgICBpbnNlcnRfaXRlbV9pbl9kaWN0KGRhdGFfYnlfcmVnaW9uLCByb3cpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBpbnNlcnRfaXRlbV9pbl9kaWN0KGRhdGFfYnlfY291bnRyeSwgcm93KQoKZGVmIHdyaXRl"}}]
["2667774bbda1ff104d51481f1311b198b9342d56-3","2667774bbda1ff104d51481f1311b198b9342d56","PHxmaW1fcHJlZml4fD4KIiIiCkNyZWF0ZWQgYnk6IE1ldG8gVHJhamtvdnNraQpFbWFpbDogbWV0b3RAaG90bWFpbC5jb20KIiIiCgppbXBvcnQgY3N2CmltcG9ydCBvcwppbXBvcnQgbWF0aAoKIiIiCmZvciBlYXNpbHkgZGF0YSBtYW5pcHVsYXRpb24sIHRoZSBkYXRhIGRpY3Rpb25hcmllcyB3aWxsIGJlIHN0cnVjdHVyZWQgbGlrZSB0aGlzCmRhdGEgPSB7CiAgICBpZCA6IHsKICAgICAgICBuYW1lOiBYWFhYLAogICAgICAgIC8vIGFsbCBzZXJpZXMgbGlrZSBrZXlzLCBmb3IgZXhhbXBsZToKICAgICAgICAnUG9wdWxhdGlvbiBhbm51YWwgcmF0ZSBvZiBpbmNyZWFzZSAocGVyY2VudCknOiAvLyBsaXN0IG9mIGFsbCB5ZWFycwogICAgICAgIFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgeWVhcjogWVlZWSwKICAgICAgICAgICAgICAgIHZhbHVlOiBaWiwKICAgICAgICAgICAgICAgIGZvb3Rub3RlczogV1dXV1dXV1dXV1dXV1cKICAgICAgICAgICAgfSwKICAgICAgICAgICAgLi4uCiAgICAgICAgXSwKICAgICAgICAuLi4KICAgIH0sCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIC4uLgo8fGZpbV9lbmR8Pg=="]
["a0b93a569a3e49fec24ed4e5d11dd0ef1158e354-1","a0b93a569a3e49fec24ed4e5d11dd0ef1158e354","PHxmaW1fcHJlZml4fD4KIyBsaXN0PVsxLDIzLDQ2NSwxMzIsNDU2LDEzMiw0LDMsMSw2NTQsNjEsNiw0Nzg5LDc0LDYxXQojIGxpc3Quc29ydChyZXZlcnNlPVRydWUpCiMgcHJpbnQobGlzdCkKIiIi5a+55pWw5a2X5YiX6KGo6L+b6KGM5Y2H5bqP5o6S5YiX77yI5aSnIC0tPiDlsI/vvIkiIiIKbGlzdDE9WzIzLDQ2NSwxMzIsNDU2LDEzMiw0LDMsMSw2NTQsNjEsNiw0Nzg5LDc0LDYxXQpmb3IgcjEgaW4gcmFuZ2UobGVuKGxpc3QxKS0xKToKPHxmaW1faG9sZXw+CnByaW50KGxpc3QxKQoKCjx8ZmltX3N1ZmZpeHw+CiAgICBmb3IgcjIgaW4gcmFuZ2UocjErMSxsZW4obGlzdDEpKToKICAgICAgICBpZiBsaXN0MVtyMV0gPCBsaXN0MVtyMl06CiAgICAgICAgICAgIGxpc3QxW3IxXSxsaXN0MVtyMl09bGlzdDFbcjJdLGxpc3QxW3IxXQo8fGZpbV9lbmR8Pg=="]
["a0b93a569a3e49fec24ed4e5d11dd0ef1158e354-2","a0b93a569a3e49fec24ed4e5d11dd0ef1158e354","PHxmaW1fcHJlZml4fD4KIyBsaXN0PVsxLDIzLDQ2NSwxMzIsNDU2LDEzMiw0LDMsMSw2NTQsNjEsNiw0Nzg5LDc0LDYxXQojIGxpc3Quc29ydChyZXZlcnNlPVRydWUpCiMgcHJpbnQobGlzdCkKIiIi5a+55pWw5a2X5YiX6KGo6L+b6KGM5Y2H5bqP5o6S5YiX77yI5aSnIC0tPiDlsI/vvIkiIiIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpsaXN0MT1bMjMsNDY1LDEzMiw0NTYsMTMyLDQsMywxLDY1NCw2MSw2LDQ3ODksNzQsNjFdCmZvciByMSBpbiByYW5nZShsZW4obGlzdDEpLTEpOgogICAgZm9yIHIyIGluIHJhbmdlKHIxKzEsbGVuKGxpc3QxKSk6CiAgICAgICAgaWYgbGlzdDFbcjFdIDwgbGlzdDFbcjJdOgo8fGZpbV9lbmR8Pg=="]
["a0b93a569a3e49fec24ed4e5d11dd0ef1158e354-3","a0b93a569a3e49fec24ed4e5d11dd0ef1158e354","PHxmaW1fcHJlZml4fD4KIyBsaXN0PVsxLDIzLDQ2NSwxMzIsNDU2LDEzMiw0LDMsMSw2NTQsNjEsNiw0Nzg5LDc0LDYxXQojIGxpc3Quc29ydChyZXZlcnNlPVRydWUpCiMgcHJpbnQobGlzdCkKIiIi5a+55pWw5a2X5YiX6KGo6L+b6KGM5Y2H5bqP5o6S5YiX77yI5aSnIC0tPiDlsI/vvIkiIiIKbGlzdDE9WzIzLDQ2NSwxMzIsNDU2LDEzMiw0LDMsMSw2NTQsNjEsNiw0Nzg5LDc0LDYxXQpmb3IgcjEgaW4gcmFuZ2UobGVuKGxpc3QxKS0xKToKPHxmaW1faG9sZXw+CnByaW50KGxpc3QxKQoKCjx8ZmltX3N1ZmZpeHw+CiAgICBmb3IgcjIgaW4gcmFuZ2UocjErMSxsZW4obGlzdDEpKToKICAgICAgICBpZiBsaXN0MVtyMV0gPCBsaXN0MVtyMl06CiAgICAgICAgICAgIGxpc3QxW3IxXSxsaXN0MVtyMl09bGlzdDFbcjJdLGxpc3QxW3IxXQo8fGZpbV9lbmR8Pg=="]
["a0b93a569a3e49fec24ed4e5d11dd0ef1158e354-4","a0b93a569a3e49fec24ed4e5d11dd0ef1158e354","PHxmaW1fcHJlZml4fD4KIyBsaXN0PVsxLDIzLDQ2NSwxMzIsNDU2LDEzMiw0LDMsMSw2NTQsNjEsNiw0Nzg5LDc0LDYxXQojIGxpc3Quc29ydChyZXZlcnNlPVRydWUpCjx8ZmltX2hvbGV8PgogICAgZm9yIHIyIGluIHJhbmdlKHIxKzEsbGVuKGxpc3QxKSk6CiAgICAgICAgaWYgbGlzdDFbcjFdIDwgbGlzdDFbcjJdOgogICAgICAgICAgICBsaXN0MVtyMV0sbGlzdDFbcjJdPWxpc3QxW3IyXSxsaXN0MVtyMV0KcHJpbnQobGlzdDEpCgoKPHxmaW1fc3VmZml4fD4KIyBwcmludChsaXN0KQoiIiLlr7nmlbDlrZfliJfooajov5vooYzljYfluo/mjpLliJfvvIjlpKcgLS0+IOWwj++8iSIiIgpsaXN0MT1bMjMsNDY1LDEzMiw0NTYsMTMyLDQsMywxLDY1NCw2MSw2LDQ3ODksNzQsNjFdCmZvciByMSBpbiByYW5nZShsZW4obGlzdDEpLTEpOgo8fGZpbV9lbmR8Pg=="]
["84351064aa84d7a4916fd1525634d716b58c3087-1","84351064aa84d7a4916fd1525634d716b58c3087",{"$cut":{"chars":16572,"head":"PHxmaW1fcHJlZml4fD4KIyBDcmVhdGVkIGJ5IGh0dHA6I29sZWRkaXNwbGF5LnNxdWl4LmNoLyBDb25zaWRlciBhIGRvbmF0aW9uCiMgSW4gY2FzZSBvZiBwcm9ibGVtcyBtYWtlIHN1cmUgdGhhdCB5b3UgYXJlIHVzaW5nIHRoZSBmb250IGZpbGUgd2l0aCB0aGUgY29ycmVjdCB2ZXJzaW9uIQoKU2Fuc1NlcmlmX2JvbGRfMTdCaXRtYXBzID0gWwoJIyBCaXRtYXAgRGF0YToKCTB4MDAsICMgJyAnCgkweEVFLDB4RUUsMHhFRSwweEVFLDB4MEUsMHhFRSwgIyAnIScKCTB4Q0QsMHg5QiwweDM2LDB4NkMsMHhDMCwgIyAnIicKCTB4MEMsMHg0MCwweDY2LDB4MDMsMHgzMCwweEZGLDB4RTcsMHhGRiwweDBDLDB4QzAsMHg2NiwweDFGLDB4RkMsMHhGRiwweEUxLDB4OTgsMHgwQywweEMwLDB4NjYsMHgwMCwgIyAnIycKCTB4MDgsMHgwMiwweDAzLDB4RTEsMHhGQywweEU5LDB4M0EsMHgwRiwweDgxLDB4RkMsMHgwRiwweDgyLDB4RTgsMHhCQiwweEZFLDB4N0UsMHgwMiwweDAwLDB4ODAsMHgyMCwgIyAnJCcKCTB4N0MsMHgxOCwweDYzLDB4MTgsMHgzMSwweDlDLDB4MTgsMHhDQywweDBDLDB4NkMsMHgwNiwweDNGLDB4RjEsMHhGRiwweDhDLDB4MDYsMHhDNiwweDA3LDB4NjMsMHgwNywweDMxLDB4ODMsMHgwOCwweDgzLDB4MDMsMHg4MCwgIyAnJScKCTB4MUYsMHgwMCwweEZFLDB4MDMsMHg4OCwweDBFLDB4MDAsMHgxQywweDAxLDB4RjksMHhDRiwweEY3LDB4MzksMHhGOCwweEUzLDB4RTMsMHhDNywweDA3LDB4RkUsMHgwRiwweEJDLCAjICcmJwoJMHhEQiwweDZDLCAjICcnJwoJMHgzOCwweEM3LDB4MUMsMHhFMywweDhFLDB4MzgsMHhFMywweDhFLDB4MUMsMHg3MCwweEMzLDB4ODAsICMgJygnCgkweEUxLDB4ODcsMHgxQywweDM4LDB4RTMsMHg4RSwweDM4LDB4RTMsMHg5QywweDcxLDB4OEUsMHgwMCwgIyAnKScKCTB4MTAsMHg5MiwweEZFLDB4MzgsMHgzOCwweEZFLDB4OTIsMHgxMCwgIyAnIycKCTB4MEMsMHgwMSwweDgwLDB4MzAsMHgwNiwweDBGLDB4RkQsMHhGRiwweDgzLDB4MDAsMHg2MCwweDBDLDB4MDEsMHg4MCwgIyAnKycKCTB4NzMsMHg5QywweEVFLDB4NjAsICMgJywnCgkweEZCLDB4RTAsICMgJy0nCgkweEVFLDB4RTAsICMgJy4nCgkweDBDLDB4MTgsMHg2MCwweEMxLDB4ODIsMHgwQywweDE4LDB4MjAsMHhDMSwweDgzLDB4MEMsMHgxOCwweDAwLCAjICcvJwoJMHgxRSwweDBGLDB4RjEsMHhDRSwweDcwLDB4RUUsMHgxRCwweEMzLDB4QjgsMHg3NywweDBFLDB4RTEsMHhDRSwweDcxLDB4RkUsMHgwRiwweDAwLCAjICcwJwoJMHg3QywweDNGLDB4MEQsMHhDMCwweDcwLDB4MUMsMHgwNywweDAxLDB4QzAsMHg3MCwweDFDLDB4MDcsMHgwRiwweEZCLDB4RkUsICMgJzEnCgkweDdFLDB4M0YsMHhDQywweDdBLDB4MEUsMHgwMywweDgwLDB4RTAsMHg3MCwweDdDLDB4M0UsMHgxRiwweDBGLDB4RkIsMHhGRSwgIyAnMicKCTB4N0UsMHgzRiwweEU4LDB4MzgsMHgwRSwweDAzLDB4OEYsMHg4MywweEYwLDB4MEUsMHgwMywweEEwLDB4RUYsMHhGMSwweEY4LCAjICczJwoJMHgwNywweDgwLDB4RjgsMHgxRiwweDgzLDB4QjgsMHgzMywweDg2LDB4MzgsMHhFMywweDhGLDB4RkUsMHhGRiwweEUwLDB4MzgsMHgwMywweDgwLDB4MzgsICMgJzQnCgkweEZGLDB4M0YsMHhDRSwweDAzLDB4ODAsMHhGRSwweDNGLDB4QzgsMHg3OCwweDBFLDB4MDMsMHhBMSwweEVGLDB4RjEsMHhGOCwgIyAnNScKCTB4MUYsMHgwNywweEYxLDB4QzIsMHg3MCwweDBGLDB4RjEsMHhGRiwweDNDLDB4RjcsMHgwRSwweEUxLDB4Q0UsMHg3OSwweEZFLDB4MEYsMHg4MCwgIyAnNicKCTB4RkYsMHhCRiwweEUwLDB4NzgsMHgxQywweDBGLDB4MDMsMHg4MCwweEUwLDB4NzAsMHgxQywweDBFLDB4MDMsMHg4MSwweEUwLCAjICc3JwoJMHgzRiwweDBGLDB4RjMsMHg4NywweDcwLDB4RUUsMHgxQywweEZGLDB4MUYsMHhFNywweDBFLDB4RTEsMHhEQywweDM5LDB4RkUsMHgxRiwweDgwLCAjICc4JwoJMHgzRSwweDBGLDB4RjMsMHhDRSwweDcwLDB4RUUsMHgxRCwweEU3LDB4OUYsMHhGMSwweEZFLDB4MDEsMHhDOCwweDcxLDB4RkMsMHgxRiwweDAwLCAjICc5JwoJMHhFRSwweEUwLDB4MDAsMHhFRSwweEUwLCAjICc6JwoJMHg3MywweDlDLDB4MDAsMHgwMSwweENFLDB4NzMsMHhCOSwweDgwLCAjICcnCgkweDAwLDB4MjAsMHgxRSwweDBGLDB4QzcsMHhFMCwweEYwLDB4MEYsMHgwMCwweDdFLDB4MDAsMHhGQywweDAxLDB4RTAsMHgwMiwgIyAnPCcKCTB4RkYsMHhFRiwweEZFLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhFRiwweEZFLCAjICc9JwoJMHg4MCwweDBGLDB4MDAsMHg3RSwweDAwLDB4RkMsMHgwMSwweEUwLDB4MUUsMHgwRiwweEM3LDB4RTAsMHhGMCwweDA4LDB4MDAsICMgJz4nCgkweDdDLDB4N0YsMHhBMSwweEMwLDB4RTAsMHhGMCwweEYwLDB4RjAsMHg3MCwweDAwLDB4MUMsMHgwRSwweDA3LDB4MDAsICMgJz8nCgkweDA3LDB4RTAsMHgxRiwweEYwLDB4MzgsMHgzQywweDcwLDB4MEMsMHg2NywweDY2LDB4Q0YsMHhFNiwweENDLDB4NjYsMHhDQywweDY2LDB4Q0MsMHg2RSwweENGLDB4RkMsMHg2NywweDcwLDB4NzAsMHgwMCwweDM4LDB4MzAsMHgxRiwweEUwLDB4MDcsMHhDMCwgIyAnQCcKCTB4MDcsMHgwMCwweDNFLDB4MDAsMHhGOCwweDA3LDB4NzAsMHgxRCwweEMwLDB4NjMsMHgwMywweDhFLDB4MEYsMHhGOCwweDdGLDB4RjEsMHhDMSwweEM3LDB4MDcsMHgzOCwweDBFLCAjICdBJwoJMHhGRSwweDFGLDB4RjMsMHg4RSwweDcxLDB4Q0UsMHgzOSwweEZFLDB4M0YsMHhFNywweDBFLDB4RTEsMHhEQywweDNCLDB4RkUsMHg3RiwweDgwLCAjICdCJwoJMHgwRiwweEMzLDB4RkUsMHg3OCwweDJGLDB4MDAsMHhFMCwweDBFLDB4MDAsMHhFMCwweDBFLDB4MDAsMHhGMCwweDA3LDB4ODIsMHgzRiwweEUwLDB4RkMsICMgJ0MnCgkweEZFLDB4MEYsMHhGOCwweEUzLDB4Q0UsMHgxRSwweEUwLDB4RUUsMHgwRSwweEUwLDB4RUUsMHgwRSwweEUxLDB4RUUsMHgzQywweEZGLDB4OEYsMHhFMCwgIyAnRCcKCTB4RkYsMHhCRiwweEVFLDB4MDMsMHg4MCwweEUwLDB4M0YsMHhDRiwweEYzLDB4ODAsMHhFMCwweDM4LDB4MEYsMHhG"}}]
["84351064aa84d7a4916fd1525634d716b58c3087-2","84351064aa84d7a4916fd1525634d716b58c3087",{"$cut":{"chars":16572,"head":"PHxmaW1fcHJlZml4fD4KIyBDcmVhdGVkIGJ5IGh0dHA6I29sZWRkaXNwbGF5LnNxdWl4LmNoLyBDb25zaWRlciBhIGRvbmF0aW9uCiMgSW4gY2FzZSBvZiBwcm9ibGVtcyBtYWtlIHN1cmUgdGhhdCB5b3UgYXJlIHVzaW5nIHRoZSBmb250IGZpbGUgd2l0aCB0aGUgY29ycmVjdCB2ZXJzaW9uIQoKU2Fuc1NlcmlmX2JvbGRfMTdCaXRtYXBzID0gWwoJIyBCaXRtYXAgRGF0YToKCTB4MDAsICMgJyAnCgkweEVFLDB4RUUsMHhFRSwweEVFLDB4MEUsMHhFRSwgIyAnIScKCTB4Q0QsMHg5QiwweDM2LDB4NkMsMHhDMCwgIyAnIicKCTB4MEMsMHg0MCwweDY2LDB4MDMsMHgzMCwweEZGLDB4RTcsMHhGRiwweDBDLDB4QzAsMHg2NiwweDFGLDB4RkMsMHhGRiwweEUxLDB4OTgsMHgwQywweEMwLDB4NjYsMHgwMCwgIyAnIycKCTB4MDgsMHgwMiwweDAzLDB4RTEsMHhGQywweEU5LDB4M0EsMHgwRiwweDgxLDB4RkMsMHgwRiwweDgyLDB4RTgsMHhCQiwweEZFLDB4N0UsMHgwMiwweDAwLDB4ODAsMHgyMCwgIyAnJCcKCTB4N0MsMHgxOCwweDYzLDB4MTgsMHgzMSwweDlDLDB4MTgsMHhDQywweDBDLDB4NkMsMHgwNiwweDNGLDB4RjEsMHhGRiwweDhDLDB4MDYsMHhDNiwweDA3LDB4NjMsMHgwNywweDMxLDB4ODMsMHgwOCwweDgzLDB4MDMsMHg4MCwgIyAnJScKCTB4MUYsMHgwMCwweEZFLDB4MDMsMHg4OCwweDBFLDB4MDAsMHgxQywweDAxLDB4RjksMHhDRiwweEY3LDB4MzksMHhGOCwweEUzLDB4RTMsMHhDNywweDA3LDB4RkUsMHgwRiwweEJDLCAjICcmJwoJMHhEQiwweDZDLCAjICcnJwoJMHgzOCwweEM3LDB4MUMsMHhFMywweDhFLDB4MzgsMHhFMywweDhFLDB4MUMsMHg3MCwweEMzLDB4ODAsICMgJygnCgkweEUxLDB4ODcsMHgxQywweDM4LDB4RTMsMHg4RSwweDM4LDB4RTMsMHg5QywweDcxLDB4OEUsMHgwMCwgIyAnKScKCTB4MTAsMHg5MiwweEZFLDB4MzgsMHgzOCwweEZFLDB4OTIsMHgxMCwgIyAnIycKCTB4MEMsMHgwMSwweDgwLDB4MzAsMHgwNiwweDBGLDB4RkQsMHhGRiwweDgzLDB4MDAsMHg2MCwweDBDLDB4MDEsMHg4MCwgIyAnKycKCTB4NzMsMHg5QywweEVFLDB4NjAsICMgJywnCgkweEZCLDB4RTAsICMgJy0nCgkweEVFLDB4RTAsICMgJy4nCgkweDBDLDB4MTgsMHg2MCwweEMxLDB4ODIsMHgwQywweDE4LDB4MjAsMHhDMSwweDgzLDB4MEMsMHgxOCwweDAwLCAjICcvJwoJMHgxRSwweDBGLDB4RjEsMHhDRSwweDcwLDB4RUUsMHgxRCwweEMzLDB4QjgsMHg3NywweDBFLDB4RTEsMHhDRSwweDcxLDB4RkUsMHgwRiwweDAwLCAjICcwJwoJMHg3QywweDNGLDB4MEQsMHhDMCwweDcwLDB4MUMsMHgwNywweDAxLDB4QzAsMHg3MCwweDFDLDB4MDcsMHgwRiwweEZCLDB4RkUsICMgJzEnCgkweDdFLDB4M0YsMHhDQywweDdBLDB4MEUsMHgwMywweDgwLDB4RTAsMHg3MCwweDdDLDB4M0UsMHgxRiwweDBGLDB4RkIsMHhGRSwgIyAnMicKCTB4N0UsMHgzRiwweEU4LDB4MzgsMHgwRSwweDAzLDB4OEYsMHg4MywweEYwLDB4MEUsMHgwMywweEEwLDB4RUYsMHhGMSwweEY4LCAjICczJwoJMHgwNywweDgwLDB4RjgsMHgxRiwweDgzLDB4QjgsMHgzMywweDg2LDB4MzgsMHhFMywweDhGLDB4RkUsMHhGRiwweEUwLDB4MzgsMHgwMywweDgwLDB4MzgsICMgJzQnCgkweEZGLDB4M0YsMHhDRSwweDAzLDB4ODAsMHhGRSwweDNGLDB4QzgsMHg3OCwweDBFLDB4MDMsMHhBMSwweEVGLDB4RjEsMHhGOCwgIyAnNScKCTB4MUYsMHgwNywweEYxLDB4QzIsMHg3MCwweDBGLDB4RjEsMHhGRiwweDNDLDB4RjcsMHgwRSwweEUxLDB4Q0UsMHg3OSwweEZFLDB4MEYsMHg4MCwgIyAnNicKCTB4RkYsMHhCRiwweEUwLDB4NzgsMHgxQywweDBGLDB4MDMsMHg4MCwweEUwLDB4NzAsMHgxQywweDBFLDB4MDMsMHg4MSwweEUwLCAjICc3JwoJMHgzRiwweDBGLDB4RjMsMHg4NywweDcwLDB4RUUsMHgxQywweEZGLDB4MUYsMHhFNywweDBFLDB4RTEsMHhEQywweDM5LDB4RkUsMHgxRiwweDgwLCAjICc4JwoJMHgzRSwweDBGLDB4RjMsMHhDRSwweDcwLDB4RUUsMHgxRCwweEU3LDB4OUYsMHhGMSwweEZFLDB4MDEsMHhDOCwweDcxLDB4RkMsMHgxRiwweDAwLCAjICc5JwoJMHhFRSwweEUwLDB4MDAsMHhFRSwweEUwLCAjICc6JwoJMHg3MywweDlDLDB4MDAsMHgwMSwweENFLDB4NzMsMHhCOSwweDgwLCAjICcnCgkweDAwLDB4MjAsMHgxRSwweDBGLDB4QzcsMHhFMCwweEYwLDB4MEYsMHgwMCwweDdFLDB4MDAsMHhGQywweDAxLDB4RTAsMHgwMiwgIyAnPCcKPHxmaW1faG9sZXw+CgkweDA3LDB4MDAsMHgzRSwweDAwLDB4RjgsMHgwNywweDcwLDB4MUQsMHhDMCwweDYzLDB4MDMsMHg4RSwweDBGLDB4RjgsMHg3RiwweEYxLDB4QzEsMHhDNywweDA3LDB4MzgsMHgwRSwgIyAnQScKCTB4RkUsMHgxRiwweEYzLDB4OEUsMHg3MSwweENFLDB4MzksMHhGRSwweDNGLDB4RTcsMHgwRSwweEUxLDB4REMsMHgzQiwweEZFLDB4N0YsMHg4MCwgIyAnQicKCTB4MEYsMHhDMywweEZFLDB4NzgsMHgyRiwweDAwLDB4RTAsMHgwRSwweDAwLDB4RTAsMHgwRSwweDAwLDB4RjAsMHgwNywweDgyLDB4M0YsMHhFMCwweEZDLCAjICdDJwoJMHhGRSwweDBGLDB4RjgsMHhFMywweENFLDB4MUUsMHhFMCwweEVFLDB4MEUsMHhFMCwweEVFLDB4MEUsMHhFMSwweEVFLDB4M0MsMHhGRiwweDhGLDB4RTAsICMgJ0QnCgkweEZGLDB4QkYsMHhFRSwweDAzLDB4ODAsMHhFMCwweDNGLDB4Q0YsMHhGMywweDgwLDB4RTAsMHgzOCwweDBGLDB4RkIsMHhGRSwgIyAnRScKCTB4RkYsMHhCRiwweEVFLDB4MDMsMHg4MCwweEUwLDB4M0YsMHhFRiwweEZCLDB4ODAsMHhFMCwweDM4LDB4MEUsMHgwMywweDgwLCAjICdGJwoJMHgwRiwweEMxLDB4RkYsMHgxRSwweDA5LDB4RTAsMHgwRSwweDAwLDB4NzAsMHhGQiwweDg3LDB4REMsMHgwRSwweEYwLDB4NzMsMHhDMywweDhGLDB4RkMsMHgxRiwweEMwLCAjICdHJwoJMHhFMCwweEVFLDB4MEUsMHhFMCwweEVFLDB4MEUsMHhFMCwweEVGLDB4RkUsMHhGRiwweEVFLDB4MEUsMHhFMCwweEVFLDB4MEUsMHhFMCwweEVFLDB4MEUsICMgJ0gnCgkweEVFLDB4RUUsMHhFRSwweEVFLDB4RUUsMHhFRSwgIyAnSScKCTB4MUMsMHgzOCwweDcwLDB4"}}]
["8438612a1c89e9d4b73250b16cc8f1f1a0c12275-1","8438612a1c89e9d4b73250b16cc8f1f1a0c12275","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCByZXF1ZXN0cwoKZnJvbSBwdWxsb3ZlciBpbXBvcnQgVXNlcgoKCmNsYXNzIFRlc3RVc2VyKHVuaXR0ZXN0LlRlc3RDYXNlKToKCiAgICBfVVNFUl9LRVkgPSAna2V5JwogICAgX1VTRVIgPSBVc2VyKF9VU0VSX0tFWSkKPHxmaW1faG9sZXw+CiAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwocmVxdWVzdC5kYXRhLCB7J3VzZXInOiBzZWxmLl9VU0VSX0tFWX0pCgogICAgZGVmIHRlc3Rfc3RyKHNlbGYpOgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHNlbGYuX1VTRVIpLCAnVXNlcih7MH0pJy5mb3JtYXQoc2VsZi5fVVNFUl9LRVkpKQo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiB0ZXN0X3NpZ24oc2VsZik6CiAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3RzLlJlcXVlc3QoZGF0YT17fSkKICAgICAgICBzZWxmLl9VU0VSLnNpZ24ocmVxdWVzdCkKPHxmaW1fZW5kfD4="]
["8438612a1c89e9d4b73250b16cc8f1f1a0c12275-2","8438612a1c89e9d4b73250b16cc8f1f1a0c12275","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCByZXF1ZXN0cwoKZnJvbSBwdWxsb3ZlciBpbXBvcnQgVXNlcgoKCmNsYXNzIFRlc3RVc2VyKHVuaXR0ZXN0LlRlc3RDYXNlKToKCiAgICBfVVNFUl9LRVkgPSAna2V5JwogICAgX1VTRVIgPSBVc2VyKF9VU0VSX0tFWSkKCiAgICBkZWYgdGVzdF9zaWduKHNlbGYpOgogICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0cy5SZXF1ZXN0KGRhdGE9e30pCiAgICAgICAgc2VsZi5fVVNFUi5zaWduKHJlcXVlc3QpCiAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwocmVxdWVzdC5kYXRhLCB7J3VzZXInOiBzZWxmLl9VU0VSX0tFWX0pCgogICAgZGVmIHRlc3Rfc3RyKHNlbGYpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2VsZi5fVVNFUiksICdVc2VyKHswfSknLmZvcm1hdChzZWxmLl9VU0VSX0tFWSkpCjx8ZmltX2VuZHw+"]
["8438612a1c89e9d4b73250b16cc8f1f1a0c12275-3","8438612a1c89e9d4b73250b16cc8f1f1a0c12275","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCByZXF1ZXN0cwoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIHB1bGxvdmVyIGltcG9ydCBVc2VyCgoKY2xhc3MgVGVzdFVzZXIodW5pdHRlc3QuVGVzdENhc2UpOgo8fGZpbV9lbmR8Pg=="]
["8438612a1c89e9d4b73250b16cc8f1f1a0c12275-4","8438612a1c89e9d4b73250b16cc8f1f1a0c12275","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IHJlcXVlc3RzCgpmcm9tIHB1bGxvdmVyIGltcG9ydCBVc2VyCgo8fGZpbV9lbmR8Pg=="]
["e4e7a1b638a9cb9dabe5b0b001c31edf1d565b43-1","e4e7a1b638a9cb9dabe5b0b001c31edf1d565b43","PHxmaW1fcHJlZml4fD4KCmZyb20gLmZhbWlseSBpbXBvcnQgRmFtaWx5CmZyb20gLmZhbWlseV9iYXRjaCBpbXBvcnQgRmFtaWx5QmF0Y2gKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIC5ncm91cCBpbXBvcnQgR3JvdXAKPHxmaW1fZW5kfD4="]
["e4e7a1b638a9cb9dabe5b0b001c31edf1d565b43-2","e4e7a1b638a9cb9dabe5b0b001c31edf1d565b43","PHxmaW1fcHJlZml4fD4KCmZyb20gLmZhbWlseSBpbXBvcnQgRmFtaWx5Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuZmFtaWx5X2JhdGNoIGltcG9ydCBGYW1pbHlCYXRjaApmcm9tIC5ncm91cCBpbXBvcnQgR3JvdXAKPHxmaW1fZW5kfD4="]
["e4e7a1b638a9cb9dabe5b0b001c31edf1d565b43-3","e4e7a1b638a9cb9dabe5b0b001c31edf1d565b43","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmZyb20gLmZhbWlseSBpbXBvcnQgRmFtaWx5CmZyb20gLmZhbWlseV9iYXRjaCBpbXBvcnQgRmFtaWx5QmF0Y2gKZnJvbSAuZ3JvdXAgaW1wb3J0IEdyb3VwCjx8ZmltX2VuZHw+"]
["e4e7a1b638a9cb9dabe5b0b001c31edf1d565b43-4","e4e7a1b638a9cb9dabe5b0b001c31edf1d565b43","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuZmFtaWx5IGltcG9ydCBGYW1pbHkKZnJvbSAuZmFtaWx5X2JhdGNoIGltcG9ydCBGYW1pbHlCYXRjaApmcm9tIC5ncm91cCBpbXBvcnQgR3JvdXAKPHxmaW1fZW5kfD4="]
["0811e8cf1140d055178f5dfe0b8ebd8c05deaecf-1","0811e8cf1140d055178f5dfe0b8ebd8c05deaecf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNxbGl0ZTMKY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgnanVzaG8vYWRkcmVzcy5kYicpCmMgPSBjb25uLmN1cnNvcigpCgojIENyZWF0ZSB0YWJsZQpjLmV4ZWN1dGUoJycnQ1JFQVRFIFRBQkxFIGFkZHJlc3MKICAgICAgICAgICAgIChhZG1pbl9kaXZpc2lvbl9jb2RlIHRleHQsIG9sZF9wb3N0YWxfY29kZSB0ZXh0LCBwb3N0YWxfY29kZSB0ZXh0LAogICAgICAgICAgICAgIHByZWZlY3R1cmVfa2FuYSB0ZXh0LCBjaXR5X2thbmEgdGV4dCwgdG93bl9hcmVhX2thbmEgdGV4dCwgCiAgICAgICAgICAgICAgcHJlZmVjdHVyZV9rYW5qaSB0ZXh0LCBjaXR5X2thbmppIHRleHQsIHRvd25fYXJlYV9rYW5qaSB0ZXh0LCAKICAgICAgICAgICAgICBwcmVmZWN0dXJlX2VuZyB0ZXh0LCBjaXR5X2VuZyB0ZXh0LCB0b3duX2FyZWFfZW5nIHRleHQsCiAgICAgICAgICAgICAgbXVsdGlwbGVfcG9zdGFsX2NvZGUgaW50ZWdlciwgbXVsdGlwbGVfYWRkcmVzcyBpbnRlZ2VyLCAKICAgICAgICAgICAgICBoYXNfY2hvbWUgaW50ZWdlciwgbXVsdGlwbGVfdG93bl9hcmVhIGludGVnZXIpJycnKQoKYy5leGVjdXRlKCJjcmVhdGUgaW5kZXggcG9zdGFsX2NvZGVfaW5kZXggb24gYWRkcmVzcyhwb3N0YWxfY29kZSkiKQpjLmV4ZWN1dGUoImNyZWF0ZSBpbmRleCBwcmVmZWN0dXJlX2thbmFfaW5kZXggb24gYWRkcmVzcyhwcmVmZWN0dXJlX2thbmEpIikKYy5leGVjdXRlKCJjcmVhdGUgaW5kZXggY2l0eV9rYW5hX2luZGV4IG9uIGFkZHJlc3MoY2l0eV9rYW5hKSIpCmMuZXhlY3V0ZSgiY3JlYXRlIGluZGV4IHRvd25fYXJlYV9rYW5hX3NpbmRleCBvbiBhZGRyZXNzKHRvd25fYXJlYV9rYW5hKSIpCmMuZXhlY3V0ZSgiY3JlYXRlIGluZGV4IHByZWZlY3R1cmVfa2FuamlfaW5kZXggb24gYWRkcmVzcyhwcmVmZWN0dXJlX2thbmppKSIpCmMuZXhlY3V0ZSgiY3JlYXRlIGluZGV4IGNpdHlfa2FuamlfaW5kZXggb24gYWRkcmVzcyhjaXR5X2thbmppKSIpCmMuZXhlY3V0ZSgiY3JlYXRlIGluZGV4IHRvd25fYXJlYV9rYW5qaV9pbmRleCBvbiBhZGRyZXNzKHRvd25fYXJlYV9rYW5qaSkiKQpjLmV4ZWN1dGUoImNyZWF0ZSBpbmRleCBwcmVmZWN0dXJlX2VuZ19pbmRleCBvbiBhZGRyZXNzKHByZWZlY3R1cmVfZW5nKSIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KYy5leGVjdXRlKCJjcmVhdGUgaW5kZXggY2l0eV9lbmdfaW5kZXggb24gYWRkcmVzcyhjaXR5X2VuZykiKQpjLmV4ZWN1dGUoImNyZWF0ZSBpbmRleCB0b3duX2FyZWFfZW5nX2luZGV4IG9uIGFkZHJlc3ModG93bl9hcmVhX2VuZykiKQoKIyBTYXZlIChjb21taXQpIHRoZSBjaGFuZ2VzCjx8ZmltX2VuZHw+"]
["0811e8cf1140d055178f5dfe0b8ebd8c05deaecf-2","0811e8cf1140d055178f5dfe0b8ebd8c05deaecf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNxbGl0ZTMKY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgnanVzaG8vYWRkcmVzcy5kYicpCmMgPSBjb25uLmN1cnNvcigpCgojIENyZWF0ZSB0YWJsZQpjLmV4ZWN1dGUoJycnQ1JFQVRFIFRBQkxFIGFkZHJlc3MKICAgICAgICAgICAgIChhZG1pbl9kaXZpc2lvbl9jb2RlIHRleHQsIG9sZF9wb3N0YWxfY29kZSB0ZXh0LCBwb3N0YWxfY29kZSB0ZXh0LAogICAgICAgICAgICAgIHByZWZlY3R1cmVfa2FuYSB0ZXh0LCBjaXR5X2thbmEgdGV4dCwgdG93bl9hcmVhX2thbmEgdGV4dCwgCiAgICAgICAgICAgICAgcHJlZmVjdHVyZV9rYW5qaSB0ZXh0LCBjaXR5X2thbmppIHRleHQsIHRvd25fYXJlYV9rYW5qaSB0ZXh0LCAKICAgICAgICAgICAgICBwcmVmZWN0dXJlX2VuZyB0ZXh0LCBjaXR5X2VuZyB0ZXh0LCB0b3duX2FyZWFfZW5nIHRleHQsCiAgICAgICAgICAgICAgbXVsdGlwbGVfcG9zdGFsX2NvZGUgaW50ZWdlciwgbXVsdGlwbGVfYWRkcmVzcyBpbnRlZ2VyLCAKICAgICAgICAgICAgICBoYXNfY2hvbWUgaW50ZWdlciwgbXVsdGlwbGVfdG93bl9hcmVhIGludGVnZXIpJycnKQoKYy5leGVjdXRlKCJjcmVhdGUgaW5kZXggcG9zdGFsX2NvZGVfaW5kZXggb24gYWRkcmVzcyhwb3N0YWxfY29kZSkiKQpjLmV4ZWN1dGUoImNyZWF0ZSBpbmRleCBwcmVmZWN0dXJlX2thbmFfaW5kZXggb24gYWRkcmVzcyhwcmVmZWN0dXJlX2thbmEpIikKYy5leGVjdXRlKCJjcmVhdGUgaW5kZXggY2l0eV9rYW5hX2luZGV4IG9uIGFkZHJlc3MoY2l0eV9rYW5hKSIpCmMuZXhlY3V0ZSgiY3JlYXRlIGluZGV4IHRvd25fYXJlYV9rYW5hX3NpbmRleCBvbiBhZGRyZXNzKHRvd25fYXJlYV9rYW5hKSIpCmMuZXhlY3V0ZSgiY3JlYXRlIGluZGV4IHByZWZlY3R1cmVfa2FuamlfaW5kZXggb24gYWRkcmVzcyhwcmVmZWN0dXJlX2thbmppKSIpCmMuZXhlY3V0ZSgiY3JlYXRlIGluZGV4IGNpdHlfa2FuamlfaW5kZXggb24gYWRkcmVzcyhjaXR5X2thbmppKSIpCmMuZXhlY3V0ZSgiY3JlYXRlIGluZGV4IHRvd25fYXJlYV9rYW5qaV9pbmRleCBvbiBhZGRyZXNzKHRvd25fYXJlYV9rYW5qaSkiKQpjLmV4ZWN1dGUoImNyZWF0ZSBpbmRleCBwcmVmZWN0dXJlX2VuZ19pbmRleCBvbiBhZGRyZXNzKHByZWZlY3R1cmVfZW5nKSIpCmMuZXhlY3V0ZSgiY3JlYXRlIGluZGV4IGNpdHlfZW5nX2luZGV4IG9uIGFkZHJlc3MoY2l0eV9lbmcpIikKYy5leGVjdXRlKCJjcmVhdGUgaW5kZXggdG93bl9hcmVhX2VuZ19pbmRleCBvbiBhZGRyZXNzKHRvd25fYXJlYV9lbmcpIikKPHxmaW1faG9sZXw+CiMgV2UgY2FuIGFsc28gY2xvc2UgdGhlIGNvbm5lY3Rpb24gaWYgd2UgYXJlIGRvbmUgd2l0aCBpdC4KIyBKdXN0IGJlIHN1cmUgYW55IGNoYW5nZXMgaGF2ZSBiZWVuIGNvbW1pdHRlZCBvciB0aGV5IHdpbGwgYmUgbG9zdC4KY29ubi5jbG9zZSgpCjx8ZmltX3N1ZmZpeHw+CgojIFNhdmUgKGNvbW1pdCkgdGhlIGNoYW5nZXMKY29ubi5jb21taXQoKQoKPHxmaW1fZW5kfD4="]
["0811e8cf1140d055178f5dfe0b8ebd8c05deaecf-3","0811e8cf1140d055178f5dfe0b8ebd8c05deaecf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNxbGl0ZTMKY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgnanVzaG8vYWRkcmVzcy5kYicpCmMgPSBjb25uLmN1cnNvcigpCgojIENyZWF0ZSB0YWJsZQpjLmV4ZWN1dGUoJycnQ1JFQVRFIFRBQkxFIGFkZHJlc3MKICAgICAgICAgICAgIChhZG1pbl9kaXZpc2lvbl9jb2RlIHRleHQsIG9sZF9wb3N0YWxfY29kZSB0ZXh0LCBwb3N0YWxfY29kZSB0ZXh0LAogICAgICAgICAgICAgIHByZWZlY3R1cmVfa2FuYSB0ZXh0LCBjaXR5X2thbmEgdGV4dCwgdG93bl9hcmVhX2thbmEgdGV4dCwgCiAgICAgICAgICAgICAgcHJlZmVjdHVyZV9rYW5qaSB0ZXh0LCBjaXR5X2thbmppIHRleHQsIHRvd25fYXJlYV9rYW5qaSB0ZXh0LCAKICAgICAgICAgICAgICBwcmVmZWN0dXJlX2VuZyB0ZXh0LCBjaXR5X2VuZyB0ZXh0LCB0b3duX2FyZWFfZW5nIHRleHQsCiAgICAgICAgICAgICAgbXVsdGlwbGVfcG9zdGFsX2NvZGUgaW50ZWdlciwgbXVsdGlwbGVfYWRkcmVzcyBpbnRlZ2VyLCAKICAgICAgICAgICAgICBoYXNfY2hvbWUgaW50ZWdlciwgbXVsdGlwbGVfdG93bl9hcmVhIGludGVnZXIpJycnKQoKYy5leGVjdXRlKCJjcmVhdGUgaW5kZXggcG9zdGFsX2NvZGVfaW5kZXggb24gYWRkcmVzcyhwb3N0YWxfY29kZSkiKQpjLmV4ZWN1dGUoImNyZWF0ZSBpbmRleCBwcmVmZWN0dXJlX2thbmFfaW5kZXggb24gYWRkcmVzcyhwcmVmZWN0dXJlX2thbmEpIikKYy5leGVjdXRlKCJjcmVhdGUgaW5kZXggY2l0eV9rYW5hX2luZGV4IG9uIGFkZHJlc3MoY2l0eV9rYW5hKSIpCmMuZXhlY3V0ZSgiY3JlYXRlIGluZGV4IHRvd25fYXJlYV9rYW5hX3NpbmRleCBvbiBhZGRyZXNzKHRvd25fYXJlYV9rYW5hKSIpCmMuZXhlY3V0ZSgiY3JlYXRlIGluZGV4IHByZWZlY3R1cmVfa2FuamlfaW5kZXggb24gYWRkcmVzcyhwcmVmZWN0dXJlX2thbmppKSIpCmMuZXhlY3V0ZSgiY3JlYXRlIGluZGV4IGNpdHlfa2FuamlfaW5kZXggb24gYWRkcmVzcyhjaXR5X2thbmppKSIpCmMuZXhlY3V0ZSgiY3JlYXRlIGluZGV4IHRvd25fYXJlYV9rYW5qaV9pbmRleCBvbiBhZGRyZXNzKHRvd25fYXJlYV9rYW5qaSkiKQpjLmV4ZWN1dGUoImNyZWF0ZSBpbmRleCBwcmVmZWN0dXJlX2VuZ19pbmRleCBvbiBhZGRyZXNzKHByZWZlY3R1cmVfZW5nKSIpCmMuZXhlY3V0ZSgiY3JlYXRlIGluZGV4IGNpdHlfZW5nX2luZGV4IG9uIGFkZHJlc3MoY2l0eV9lbmcpIikKYy5leGVjdXRlKCJjcmVhdGUgaW5kZXggdG93bl9hcmVhX2VuZ19pbmRleCBvbiBhZGRyZXNzKHRvd25fYXJlYV9lbmcpIikKCiMgU2F2ZSAoY29tbWl0KSB0aGUgY2hhbmdlcwpjb25uLmNvbW1pdCgpCgojIFdlIGNhbiBhbHNvIGNsb3NlIHRoZSBjb25uZWN0aW9uIGlmIHdlIGFyZSBkb25lIHdpdGggaXQuCiMgSnVzdCBiZSBzdXJlIGFueSBjaGFuZ2VzIGhhdmUgYmVlbiBjb21taXR0ZWQgb3IgdGhleSB3aWxsIGJlIGxvc3QuCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY29ubi5jbG9zZSgpCjx8ZmltX2VuZHw+"]
["0811e8cf1140d055178f5dfe0b8ebd8c05deaecf-4","0811e8cf1140d055178f5dfe0b8ebd8c05deaecf","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IHNxbGl0ZTMKY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgnanVzaG8vYWRkcmVzcy5kYicpCmMgPSBjb25uLmN1cnNvcigpCgo8fGZpbV9lbmR8Pg=="]
["0811e8cf1140d055178f5dfe0b8ebd8c05deaecf-5","0811e8cf1140d055178f5dfe0b8ebd8c05deaecf","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNxbGl0ZTMKY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgnanVzaG8vYWRkcmVzcy5kYicpCmMgPSBjb25uLmN1cnNvcigpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgQ3JlYXRlIHRhYmxlCmMuZXhlY3V0ZSgnJydDUkVBVEUgVEFCTEUgYWRkcmVzcwogICAgICAgICAgICAgKGFkbWluX2RpdmlzaW9uX2NvZGUgdGV4dCwgb2xkX3Bvc3RhbF9jb2RlIHRleHQsIHBvc3RhbF9jb2RlIHRleHQsCiAgICAgICAgICAgICAgcHJlZmVjdHVyZV9rYW5hIHRleHQsIGNpdHlfa2FuYSB0ZXh0LCB0b3duX2FyZWFfa2FuYSB0ZXh0LCAKPHxmaW1fZW5kfD4="]
["f853c1f606ce93b2aafa1003e2986c5491c9ced4-1","f853c1f606ce93b2aafa1003e2986c5491c9ced4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBqc29uCgpJTlBVVF9DU1YgPSAnTWFuUHJvai5jc3YnCk9VVFBVVF9KU09OID0gJ3B2ZGFyaWxlcy5qc29uJwo8fGZpbV9lbmR8Pg=="]
["f853c1f606ce93b2aafa1003e2986c5491c9ced4-2","f853c1f606ce93b2aafa1003e2986c5491c9ced4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQganNvbgoKSU5QVVRfQ1NWID0gJ01hblByb2ouY3N2JwpPVVRQVVRfSlNPTiA9ICdwdmRhcmlsZXMuanNvbicKCmRlZiBjbGVhbm1hbmlmZXN0b3MoaW5wdXRfY3N2KToKICAgICIiIgogICAgQ2xlYW5zIG1hbmlmZXN0byBkYXRhIHRvIGdldCByaWxlIHNjb3JlcyAoTFItc2NvcmVzKQogICAgIiIiCgogICAgaW5wdXQgPSBwZC5yZWFkX2NzdihpbnB1dF9jc3YsIGRlbGltaXRlcj0nLCcpCiAgICBpbnB1dC5maWxsbmEodmFsdWU9MC4wLCBpbnBsYWNlPVRydWUpCiAgICBkYXRhID0gW10KCiAgICBmb3Igcm93IGluIHJhbmdlKGxlbihpbnB1dCkpOgogICAgICAgIGlmIGlucHV0LmxvY1tyb3csICdwYXJ0eW5hbWUnXSA9PSAnUGFydGlqIHZhbiBkZSBBcmJlaWQgKFAudi5kLkEuKSc6CiAgICAgICAgICAgIHllYXIgPSBpbnQoaW5wdXQubG9jW3JvdywgJ2RhdGUnXSkKICAgICAgICAgICAgcmlsZSA9IGlucHV0LmxvY1tyb3csICdyaWxlJ10KICAgICAgICAgICAgZGF0YS5hcHBlbmQoeyd5ZWFyJzogeWVhciwgJ3JpbGUnOiByaWxlfSkKICAgICAgICAgICAgIyBtYW5pZmVzdG9zW2lucHV0LmxvY1tyb3csICdkYXRlJ11dW2lucHV0LmxvY1tyb3csICdwYXJ0eW5hbWUnXV0gPSBpbnB1dC5sb2Nbcm93LCAncmlsZSddCgogICAgcHJpbnQoZGF0YSkKICAgIHJldHVybiBkYXRhCgoKZGVmIGNvbnZlcnQoZGF0YSwgb3V0cHV0SlNPTik6CiAgICAiIiIKICAgIENvbnZlcnRzIHNlbGVjdGVkIGRhdGEgdG8gSlNPTiBmb3JtYXQKICAgICIiIgoKICAgIHdpdGggb3BlbihvdXRwdXRKU09OLCAndycpIGFzIG91dHB1dDoKICAgICAgICBvdXRwdXQud3JpdGUoanNvbi5kdW1wcyhkYXRhKSkKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAjIGdldCBkYXRhCiAgICBkYXRhID0gY2xlYW5tYW5pZmVzdG9zKElOUFVUX0NTVikKCjx8ZmltX2VuZHw+"]
["f853c1f606ce93b2aafa1003e2986c5491c9ced4-3","f853c1f606ce93b2aafa1003e2986c5491c9ced4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQganNvbgoKSU5QVVRfQ1NWID0gJ01hblByb2ouY3N2JwpPVVRQVVRfSlNPTiA9ICdwdmRhcmlsZXMuanNvbicKCmRlZiBjbGVhbm1hbmlmZXN0b3MoaW5wdXRfY3N2KToKICAgICIiIgogICAgQ2xlYW5zIG1hbmlmZXN0byBkYXRhIHRvIGdldCByaWxlIHNjb3JlcyAoTFItc2NvcmVzKQogICAgIiIiCgogICAgaW5wdXQgPSBwZC5yZWFkX2NzdihpbnB1dF9jc3YsIGRlbGltaXRlcj0nLCcpCiAgICBpbnB1dC5maWxsbmEodmFsdWU9MC4wLCBpbnBsYWNlPVRydWUpCiAgICBkYXRhID0gW10KCiAgICBmb3Igcm93IGluIHJhbmdlKGxlbihpbnB1dCkpOgogICAgICAgIGlmIGlucHV0LmxvY1tyb3csICdwYXJ0eW5hbWUnXSA9PSAnUGFydGlqIHZhbiBkZSBBcmJlaWQgKFAudi5kLkEuKSc6CiAgICAgICAgICAgIHllYXIgPSBpbnQoaW5wdXQubG9jW3JvdywgJ2RhdGUnXSkKICAgICAgICAgICAgcmlsZSA9IGlucHV0LmxvY1tyb3csICdyaWxlJ10KICAgICAgICAgICAgZGF0YS5hcHBlbmQoeyd5ZWFyJzogeWVhciwgJ3JpbGUnOiByaWxlfSkKICAgICAgICAgICAgIyBtYW5pZmVzdG9zW2lucHV0LmxvY1tyb3csICdkYXRlJ11dW2lucHV0LmxvY1tyb3csICdwYXJ0eW5hbWUnXV0gPSBpbnB1dC5sb2Nbcm93LCAncmlsZSddCgogICAgcHJpbnQoZGF0YSkKICAgIHJldHVybiBkYXRhCgoKZGVmIGNvbnZlcnQoZGF0YSwgb3V0cHV0SlNPTik6Cjx8ZmltX2hvbGV8PgogICAgd2l0aCBvcGVuKG91dHB1dEpTT04sICd3JykgYXMgb3V0cHV0OgogICAgICAgIG91dHB1dC53cml0ZShqc29uLmR1bXBzKGRhdGEpKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAjIGdldCBkYXRhCiAgICBkYXRhID0gY2xlYW5tYW5pZmVzdG9zKElOUFVUX0NTVikKCiAgICAjIHBhc3RlIGRhdGEgdG8ganNvbgogICAgY29udmVydChkYXRhLCBPVVRQVVRfSlNPTikKPHxmaW1fc3VmZml4fD4KICAgICIiIgogICAgQ29udmVydHMgc2VsZWN0ZWQgZGF0YSB0byBKU09OIGZvcm1hdAogICAgIiIiCgo8fGZpbV9lbmR8Pg=="]
["f853c1f606ce93b2aafa1003e2986c5491c9ced4-4","f853c1f606ce93b2aafa1003e2986c5491c9ced4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQganNvbgoKSU5QVVRfQ1NWID0gJ01hblByb2ouY3N2JwpPVVRQVVRfSlNPTiA9ICdwdmRhcmlsZXMuanNvbicKCmRlZiBjbGVhbm1hbmlmZXN0b3MoaW5wdXRfY3N2KToKICAgICIiIgogICAgQ2xlYW5zIG1hbmlmZXN0byBkYXRhIHRvIGdldCByaWxlIHNjb3JlcyAoTFItc2NvcmVzKQogICAgIiIiCgogICAgaW5wdXQgPSBwZC5yZWFkX2NzdihpbnB1dF9jc3YsIGRlbGltaXRlcj0nLCcpCiAgICBpbnB1dC5maWxsbmEodmFsdWU9MC4wLCBpbnBsYWNlPVRydWUpCiAgICBkYXRhID0gW10KCiAgICBmb3Igcm93IGluIHJhbmdlKGxlbihpbnB1dCkpOgogICAgICAgIGlmIGlucHV0LmxvY1tyb3csICdwYXJ0eW5hbWUnXSA9PSAnUGFydGlqIHZhbiBkZSBBcmJlaWQgKFAudi5kLkEuKSc6CiAgICAgICAgICAgIHllYXIgPSBpbnQoaW5wdXQubG9jW3JvdywgJ2RhdGUnXSkKICAgICAgICAgICAgcmlsZSA9IGlucHV0LmxvY1tyb3csICdyaWxlJ10KICAgICAgICAgICAgZGF0YS5hcHBlbmQoeyd5ZWFyJzogeWVhciwgJ3JpbGUnOiByaWxlfSkKICAgICAgICAgICAgIyBtYW5pZmVzdG9zW2lucHV0LmxvY1tyb3csICdkYXRlJ11dW2lucHV0LmxvY1tyb3csICdwYXJ0eW5hbWUnXV0gPSBpbnB1dC5sb2Nbcm93LCAncmlsZSddCgogICAgcHJpbnQoZGF0YSkKICAgIHJldHVybiBkYXRhCgoKPHxmaW1faG9sZXw+CgogICAgd2l0aCBvcGVuKG91dHB1dEpTT04sICd3JykgYXMgb3V0cHV0OgogICAgICAgIG91dHB1dC53cml0ZShqc29uLmR1bXBzKGRhdGEpKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAjIGdldCBkYXRhCiAgICBkYXRhID0gY2xlYW5tYW5pZmVzdG9zKElOUFVUX0NTVikKCiAgICAjIHBhc3RlIGRhdGEgdG8ganNvbgogICAgY29udmVydChkYXRhLCBPVVRQVVRfSlNPTikKPHxmaW1fc3VmZml4fD4KZGVmIGNvbnZlcnQoZGF0YSwgb3V0cHV0SlNPTik6CiAgICAiIiIKICAgIENvbnZlcnRzIHNlbGVjdGVkIGRhdGEgdG8gSlNPTiBmb3JtYXQKICAgICIiIgo8fGZpbV9lbmR8Pg=="]
["f853c1f606ce93b2aafa1003e2986c5491c9ced4-5","f853c1f606ce93b2aafa1003e2986c5491c9ced4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQganNvbgoKSU5QVVRfQ1NWID0gJ01hblByb2ouY3N2JwpPVVRQVVRfSlNPTiA9ICdwdmRhcmlsZXMuanNvbicKCmRlZiBjbGVhbm1hbmlmZXN0b3MoaW5wdXRfY3N2KToKICAgICIiIgogICAgQ2xlYW5zIG1hbmlmZXN0byBkYXRhIHRvIGdldCByaWxlIHNjb3JlcyAoTFItc2NvcmVzKQogICAgIiIiCgogICAgaW5wdXQgPSBwZC5yZWFkX2NzdihpbnB1dF9jc3YsIGRlbGltaXRlcj0nLCcpCiAgICBpbnB1dC5maWxsbmEodmFsdWU9MC4wLCBpbnBsYWNlPVRydWUpCiAgICBkYXRhID0gW10KCiAgICBmb3Igcm93IGluIHJhbmdlKGxlbihpbnB1dCkpOgogICAgICAgIGlmIGlucHV0LmxvY1tyb3csICdwYXJ0eW5hbWUnXSA9PSAnUGFydGlqIHZhbiBkZSBBcmJlaWQgKFAudi5kLkEuKSc6CiAgICAgICAgICAgIHllYXIgPSBpbnQoaW5wdXQubG9jW3JvdywgJ2RhdGUnXSkKICAgICAgICAgICAgcmlsZSA9IGlucHV0LmxvY1tyb3csICdyaWxlJ10KICAgICAgICAgICAgZGF0YS5hcHBlbmQoeyd5ZWFyJzogeWVhciwgJ3JpbGUnOiByaWxlfSkKICAgICAgICAgICAgIyBtYW5pZmVzdG9zW2lucHV0LmxvY1tyb3csICdkYXRlJ11dW2lucHV0LmxvY1tyb3csICdwYXJ0eW5hbWUnXV0gPSBpbnB1dC5sb2Nbcm93LCAncmlsZSddCgogICAgcHJpbnQoZGF0YSkKICAgIHJldHVybiBkYXRhCgoKZGVmIGNvbnZlcnQoZGF0YSwgb3V0cHV0SlNPTik6CiAgICAiIiIKICAgIENvbnZlcnRzIHNlbGVjdGVkIGRhdGEgdG8gSlNPTiBmb3JtYXQKICAgICIiIgoKICAgIHdpdGggb3BlbihvdXRwdXRKU09OLCAndycpIGFzIG91dHB1dDoKICAgICAgICBvdXRwdXQud3JpdGUoanNvbi5kdW1wcyhkYXRhKSkKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAjIGdldCBkYXRhCiAgICBkYXRhID0gY2xlYW5tYW5pZmVzdG9zKElOUFVUX0NTVikKCjx8ZmltX2VuZHw+"]
["cd8b6aaa51986c8f12fcdde13081ad7af536ef47-1","cd8b6aaa51986c8f12fcdde13081ad7af536ef47","PHxmaW1fcHJlZml4fD4KZnJvbSBwcmVyZWlzZS5nYXRoZXIud2luZGRhdGEuaHJyci5jb25zdGFudHMgaW1wb3J0ICgKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgREVGQVVMVF9IT1VSU19GT1JFQ0FTVEVELAogICAgREVGQVVMVF9QUk9EVUNULAo8fGZpbV9lbmR8Pg=="]
["cd8b6aaa51986c8f12fcdde13081ad7af536ef47-2","cd8b6aaa51986c8f12fcdde13081ad7af536ef47","PHxmaW1fcHJlZml4fD4KZnJvbSBwcmVyZWlzZS5nYXRoZXIud2luZGRhdGEuaHJyci5jb25zdGFudHMgaW1wb3J0ICgKICAgIERFRkFVTFRfSE9VUlNfRk9SRUNBU1RFRCwKICAgIERFRkFVTFRfUFJPRFVDVCwKKQoKCmRlZiBmb3JtYXR0ZWRfZmlsZW5hbWUoCiAgICBkdCwgcHJvZHVjdD1ERUZBVUxUX1BST0RVQ1QsIGhvdXJzX2ZvcmVjYXN0ZWQ9REVGQVVMVF9IT1VSU19GT1JFQ0FTVEVECik6CiAgICAiIiJEZXRlcm1pbmlzdGljYWxseSByZXR1cm5zIGEgZ3JpYiBmaWxlbmFtZQoKICAgIDpwYXJhbSBkYXRldGltZS5kYXRldGltZSBkdDogZGF0ZXRpbWUgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAgdGhlIGRhdGEgYmVpbmcgc3RvcmVkCiAgICA6cGFyYW0gc3RyaW5nIHByb2R1Y3Q6IHByb2R1Y3QgYXNzb2NpYXRlZCB3aXRoIHRoZQo8fGZpbV9ob2xlfD4KICAgIDpwYXJhbSBzdHJpbmcgaG91cnNfZm9yZWNhc3RlZDogaG93IG1hbnkgaG91cnMgaW50bwogICAgICAgIHRoZSBmdXR1cmUgdGhlIGRhdGEgaXMgZm9yZWNhc3RlZAoKICAgIDpyZXR1cm46ICgqc3RyKikgLS0gYSBmaWxlbmFtZQogICAgIiIiCiAgICByZXR1cm4gZiJ7ZHQuc3RyZnRpbWUoJyVZXyVtXyVkXyVIaHInKX1fe3Byb2R1Y3R9X3tob3Vyc19mb3JlY2FzdGVkfS5ncmliMiIKCgpkZWYgZ2V0X2luZGljZXNfdGhhdF9jb250YWluX3NlbGVjdG9yKGlucHV0X2xpc3QsIHNlbGVjdG9ycyk6CiAgICAiIiJHZW5lcmF0ZXMgbGlzdCBvZiBpbmRpY2VzIG9mIHN0cmluZ3MgaW4gaW5wdXRfbGlzdCB0aGF0CiAgICBjb250YWluIGEgc3RyaW5nIGluc2lkZSBvZiBzZWxlY3RvcnMKCiAgICA6cGFyYW0gbGlzdCBpbnB1dF9saXN0OiBsaXN0IG9mIHN0cmluZ3MKICAgIDpwYXJhbSBsaXN0IHNlbGVjdG9yczogbGlzdCBvZiBzdHJpbmdzCgogICAgOnJldHVybjogKCpsaXN0KikgLS0gbGlzdCBvZiBpbmRpY2VzIG9mIHN0cmluZ3MgaW4gaW5wdXRfbGlzdAogICAgICAgIHRoYXQgY29udGFpbiBhIHN0cmluZyBpbnNpZGUgb2Ygc2VsZWN0b3JzCiAgICAiIiIKICAgIHJldHVybiBbCiAgICAgICAgaQogICAgICAgIGZvciBpLCBpdGVtIGluIGVudW1lcmF0ZShpbnB1dF9saXN0KQogICAgICAgIGlmIGFueShbc2VsZWN0b3IgaW4gaXRlbSBmb3Igc2VsZWN0b3IgaW4gc2VsZWN0b3JzXSkKICAgIF0KPHxmaW1fc3VmZml4fD4KICAgICAgICBkYXRhIGJlaW5nIHN0b3JlZAo8fGZpbV9lbmR8Pg=="]
["26cd63bd7789a2b54f001fe3ee9013046d754902-1","26cd63bd7789a2b54f001fe3ee9013046d754902","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgcHN5Y29wZzIKZnJvbSBjb21tb24uYmFzaWNfb3BlcmF0aW9uIGltcG9ydCAqCmZyb20gdHJpYW5nbGUudHJpYSBpbXBvcnQgKgoKZGVmIHRlc3RfZHVtbXkoY29ubik6CiAgICB2ID0gJ3YnICAgICAKICAgIGN1ciA9IGNvbm4uY3Vyc29yKCkgICAgCiAgICBjdXIuZXhlY3V0ZSgiZHJvcCB0YWJsZSBpZiBleGlzdHMgJXMiICUgdikKICAgIGN1ci5leGVjdXRlKCJjcmVhdGUgdGFibGUgJXMoZnJvbV9pZCBpbnQsIHRvX2lkIGludCwgdmFsdWUgcmVhbCBERUZBVUxUIDEpIiAlICh2KSkKICAgIGYgPSBvcGVuKCJkYXRhL3AycC1HbnV0ZWxsYTA4LnR4dCIpCiAgICBjdXIuY29weV9mcm9tKGYsIHYsIGNvbHVtbnM9KCdmcm9tX2lkJywgJ3RvX2lkJykpCiAgICBwcmludCAiZGF0YSBsb2FkZWQiCiAgICBjb3VudF90cmlhbmdsZSh2LCBjb25uKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iIDoKICAgIGNvbm4gPSBwc3ljb3BnMi5jb25uZWN0KGRhdGFiYXNlPSJteWRiIiwgaG9zdD0iMTI3LjAuMC4xIikKICAgIHRlc3RfZHVtbXkoY29ubikgICAgCjx8ZmltX2VuZHw+"]
["26cd63bd7789a2b54f001fe3ee9013046d754902-2","26cd63bd7789a2b54f001fe3ee9013046d754902","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgcHN5Y29wZzIKZnJvbSBjb21tb24uYmFzaWNfb3BlcmF0aW9uIGltcG9ydCAqCmZyb20gdHJpYW5nbGUudHJpYSBpbXBvcnQgKgoKZGVmIHRlc3RfZHVtbXkoY29ubik6CiAgICB2ID0gJ3YnICAgICAKICAgIGN1ciA9IGNvbm4uY3Vyc29yKCkgICAgCiAgICBjdXIuZXhlY3V0ZSgiZHJvcCB0YWJsZSBpZiBleGlzdHMgJXMiICUgdikKICAgIGN1ci5leGVjdXRlKCJjcmVhdGUgdGFibGUgJXMoZnJvbV9pZCBpbnQsIHRvX2lkIGludCwgdmFsdWUgcmVhbCBERUZBVUxUIDEpIiAlICh2KSkKICAgIGYgPSBvcGVuKCJkYXRhL3AycC1HbnV0ZWxsYTA4LnR4dCIpCiAgICBjdXIuY29weV9mcm9tKGYsIHYsIGNvbHVtbnM9KCdmcm9tX2lkJywgJ3RvX2lkJykpCiAgICBwcmludCAiZGF0YSBsb2FkZWQiCiAgICBjb3VudF90cmlhbmdsZSh2LCBjb25uKQoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIiA6CiAgICBjb25uID0gcHN5Y29wZzIuY29ubmVjdChkYXRhYmFzZT0ibXlkYiIsIGhvc3Q9IjEyNy4wLjAuMSIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHRlc3RfZHVtbXkoY29ubikgICAgCjx8ZmltX2VuZHw+"]
["a0d006964f4c095f7db3f424846804d3395e8185-1","a0d006964f4c095f7db3f424846804d3395e8185","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGltYXRoCmltcG9ydCBpbG9hZAppbXBvcnQgZmFjZV9yZWNvZ25pdGlvbgpmcm9tIG51bXB5IGltcG9ydCBhcnJheQppbXBvcnQgZGxpYgoKCiMgTG9hZCBuZWNlc3NhcnkgcmVzb3VyY2VzCiMgcHJlZGljdG9yX3BvaW50cyBpcyBhIGNvbGxlY3Rpb24gb2YgcG9pbnRzIHRoYXQgdGhlIHByZWRpY3RvciBwbGFjZXMgYXJvdW5kIGEgZmFjZQojIGltYWdlIGlzIGEgcGljdHVyZSByZWFkIGJ5IHRoZSBwcmVkaWN0b3IgdG8gcGxhY2UgdGhvc2UgcG9pbnRzCnByZWRpY3Rvcl9wb2ludHMgPSAicmVzb3VyY2VzL3NoYXBlX3ByZWRpY3Rvcl82OF9mYWNlX2xhbmRtYXJrcy5kYXQiCmltYWdlID0gZmFjZV9yZWNvZ25pdGlvbi5sb2FkX2ltYWdlX2ZpbGUoInJlc291cmNlcy9pbWFnZS5wbmciKQoKIyBMb2FkIGRldGVjdG9yIGFuZCBwcmVkaWN0b3IKZGV0ZWN0b3IgPSBkbGliLmdldF9mcm9udGFsX2ZhY2VfZGV0ZWN0b3IoKQpwcmVkaWN0b3IgPSBkbGliLnNoYXBlX3ByZWRpY3RvcihwcmVkaWN0b3JfcG9pbnRzKQpkZXRlY3Rpb24gPSBkZXRlY3RvcihpbWFnZSkKCiMgUGxhY2UgcG9pbnRzCmZvciBrLCBkIGluIGVudW1lcmF0ZShkZXRlY3Rpb24pOgogICAgc2hhcGUgPSBwcmVkaWN0b3IoaW1hZ2UsIGQpCgojIEZ1bmN0aW9uIHRvIGZpbmQgY29vcmRpbmF0ZXMgb2YgdGhvc2UgcG9pbnRzIGluIHRoZSBpbWFnZSB1c2luZyBzaGFwZQpkZWYgZmluZF9jb29yZHMobik6CiAgICB4YyA9IHNoYXBlLnBhcnQobikueAogICAgeWMgPSBzaGFwZS5wYXJ0KG4pLnkKCiAgICByZXR1cm4gYXJyYXkoW3hjLCB5Y10pCgojIEFzc2lnbiBlYWNoIG5lY2Vzc2FyeSBjb29yZGluYXRlIGZvciBvdXIgcHJvamVjdCB0byBhIHZhcmlhYmxlCiMgVGhpcyBpcyB3cml0dGVuIHdpdGggcmVzcGVjdCB0byB0aGUgdmlld2VyIC0tIHRoZSBsZWZ0IGV5ZSBpbiB0aGlzIGNhc2UgaXMgdGhlIHJpZ2h0IGV5ZSBvZiB0aGUgc3ViamVjdApsX2V5ZV9sX2Nvcm5lciA9IGZpbmRfY29vcmRzKDM3KQpsX2V5ZV91cHBlciA9IGZpbmRfY29vcmRzKDM4KQpsX2V5ZV9yX2Nvcm5lciA9IGZpbmRfY29vcmRzKDQwKQpsX2V5ZV9sb3dlciA9IGZpbmRfY29vcmRzKDQxKQoKIyBUaGVyZSBzZWVtcyB0byBiZSBtb3JlIGFjY3VyYWN5IHVzaW5nIHBlcmZlY3Qgc3ltbWV0cnkgYmV0d2VlbiB0aGUgcG9pbnRzLCByYXRoZXIgdGhhbiB0cmFuc2xhdGluZyB0aGVtLCBzbyB0aGUKIyBzZXR1cCBoZXJlIGlzIGEgbGl0dGxlIGRpZmZlcmVudApyX2V5ZV9sX2Nvcm5lciA9IGZpbmRfY29vcmRzKDQzKQpyX2V5ZV91cHBlciA9IGZpbmRfY29vcmRzKDQ0KQpyX2V5ZV9yX2Nvcm5lciA9IGZpbmRfY29vcmRzKDQ2KQpyX2V5ZV9sb3dlciA9IGZpbmRfY29vcmRzKDQ3KQoKIyBDYWxjdWxhdGUgaW1hZ2UgcGxhY2VtZW50IG9mZnNldApmbGFyZV9vZmZzZXQgPSBpbG9hZC5mbGFyZS5jb2ZmKCkKCiMgQ29tcHV0ZSBhIHBvaW50IG5lYXIgdGhlIGNlbnRlciBvZiBlYWNoIGV5ZSBmb3IgdGhlIGltYWdlIHRvIGJlIHBsYWNlZApsX2ZsYXJlX2F2ZyA9IGltYXRoLnNlZ19hdmcobF9leWVfbF9jb3JuZXIsIGxfZXllX3JfY29ybmVyLCBsX2V5ZV9sb3dlciwgbF9leWVfdXBwZXIpCnJfZmxhcmVfYXZnID0gaW1hdGguc2VnX2F2ZyhyX2V5ZV9sX2Nvcm5lciwgcl9leWVfcl9jb3JuZXIsIHJfZXllX3VwcGVyLCByX2V5ZV9sb3dlcikKCiMgQ29tcHV0ZSB0aGUgcG9zaXRpb24gdG8gcGxhY2UgZWFjaCBpbWFnZQojIEJ5IGRlZmF1bHQsIGltYWdlcyBhcmUgcGxhY2VkIGJlZ2lubmluZyBhdCB0aGVpciB1cHBlci1sZWZ0IGNvcm5lcgppbWF0aC5sX2ZsYXJlX2xvYyA9IGxfZmxhcmVfYXZnIC0gZmxhcmVfb2Zmc2V0CmltYXRoLnJfZmxhcmVfbG9jID0gcl9mbGFyZV9hdmcgLSBmbGFyZV9vZmZzZXQKCiMgQ29udmVydCB0aGUgZmxhcmUgbG9jYXRpb25zIHRvIHNpbmdsZSBpbnRlZ2VycwppbnRfbF9mbGFyZV9sb2N4ID0gaW50KGltYXRoLmxfZmxhcmVfbG9jLngpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW50X2xfZmxhcmVfbG9jeSA9IGludChpbWF0aC5sX2ZsYXJlX2xvYy55KQppbnRfcl9mbGFyZV9sb2N4ID0gaW50KGltYXRoLnJfZmxhcmVfbG9jLngpCmludF9yX2ZsYXJlX2xvY3kgPSBpbnQoaW1hdGgucl9mbGFyZV9sb2MueSkKCjx8ZmltX2VuZHw+"]
["a0d006964f4c095f7db3f424846804d3395e8185-2","a0d006964f4c095f7db3f424846804d3395e8185","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGltYXRoCmltcG9ydCBpbG9hZAppbXBvcnQgZmFjZV9yZWNvZ25pdGlvbgpmcm9tIG51bXB5IGltcG9ydCBhcnJheQppbXBvcnQgZGxpYgoKCiMgTG9hZCBuZWNlc3NhcnkgcmVzb3VyY2VzCiMgcHJlZGljdG9yX3BvaW50cyBpcyBhIGNvbGxlY3Rpb24gb2YgcG9pbnRzIHRoYXQgdGhlIHByZWRpY3RvciBwbGFjZXMgYXJvdW5kIGEgZmFjZQojIGltYWdlIGlzIGEgcGljdHVyZSByZWFkIGJ5IHRoZSBwcmVkaWN0b3IgdG8gcGxhY2UgdGhvc2UgcG9pbnRzCnByZWRpY3Rvcl9wb2ludHMgPSAicmVzb3VyY2VzL3NoYXBlX3ByZWRpY3Rvcl82OF9mYWNlX2xhbmRtYXJrcy5kYXQiCmltYWdlID0gZmFjZV9yZWNvZ25pdGlvbi5sb2FkX2ltYWdlX2ZpbGUoInJlc291cmNlcy9pbWFnZS5wbmciKQoKIyBMb2FkIGRldGVjdG9yIGFuZCBwcmVkaWN0b3IKZGV0ZWN0b3IgPSBkbGliLmdldF9mcm9udGFsX2ZhY2VfZGV0ZWN0b3IoKQpwcmVkaWN0b3IgPSBkbGliLnNoYXBlX3ByZWRpY3RvcihwcmVkaWN0b3JfcG9pbnRzKQpkZXRlY3Rpb24gPSBkZXRlY3RvcihpbWFnZSkKCiMgUGxhY2UgcG9pbnRzCmZvciBrLCBkIGluIGVudW1lcmF0ZShkZXRlY3Rpb24pOgogICAgc2hhcGUgPSBwcmVkaWN0b3IoaW1hZ2UsIGQpCgojIEZ1bmN0aW9uIHRvIGZpbmQgY29vcmRpbmF0ZXMgb2YgdGhvc2UgcG9pbnRzIGluIHRoZSBpbWFnZSB1c2luZyBzaGFwZQpkZWYgZmluZF9jb29yZHMobik6CiAgICB4YyA9IHNoYXBlLnBhcnQobikueAogICAgeWMgPSBzaGFwZS5wYXJ0KG4pLnkKCiAgICByZXR1cm4gYXJyYXkoW3hjLCB5Y10pCgojIEFzc2lnbiBlYWNoIG5lY2Vzc2FyeSBjb29yZGluYXRlIGZvciBvdXIgcHJvamVjdCB0byBhIHZhcmlhYmxlCiMgVGhpcyBpcyB3cml0dGVuIHdpdGggcmVzcGVjdCB0byB0aGUgdmlld2VyIC0tIHRoZSBsZWZ0IGV5ZSBpbiB0aGlzIGNhc2UgaXMgdGhlIHJpZ2h0IGV5ZSBvZiB0aGUgc3ViamVjdApsX2V5ZV9sX2Nvcm5lciA9IGZpbmRfY29vcmRzKDM3KQpsX2V5ZV91cHBlciA9IGZpbmRfY29vcmRzKDM4KQpsX2V5ZV9yX2Nvcm5lciA9IGZpbmRfY29vcmRzKDQwKQpsX2V5ZV9sb3dlciA9IGZpbmRfY29vcmRzKDQxKQo8fGZpbV9ob2xlfD4Kcl9leWVfdXBwZXIgPSBmaW5kX2Nvb3Jkcyg0NCkKcl9leWVfcl9jb3JuZXIgPSBmaW5kX2Nvb3Jkcyg0NikKcl9leWVfbG93ZXIgPSBmaW5kX2Nvb3Jkcyg0NykKCiMgQ2FsY3VsYXRlIGltYWdlIHBsYWNlbWVudCBvZmZzZXQKZmxhcmVfb2Zmc2V0ID0gaWxvYWQuZmxhcmUuY29mZigpCgojIENvbXB1dGUgYSBwb2ludCBuZWFyIHRoZSBjZW50ZXIgb2YgZWFjaCBleWUgZm9yIHRoZSBpbWFnZSB0byBiZSBwbGFjZWQKbF9mbGFyZV9hdmcgPSBpbWF0aC5zZWdfYXZnKGxfZXllX2xfY29ybmVyLCBsX2V5ZV9yX2Nvcm5lciwgbF9leWVfbG93ZXIsIGxfZXllX3VwcGVyKQpyX2ZsYXJlX2F2ZyA9IGltYXRoLnNlZ19hdmcocl9leWVfbF9jb3JuZXIsIHJfZXllX3JfY29ybmVyLCByX2V5ZV91cHBlciwgcl9leWVfbG93ZXIpCgojIENvbXB1dGUgdGhlIHBvc2l0aW9uIHRvIHBsYWNlIGVhY2ggaW1hZ2UKIyBCeSBkZWZhdWx0LCBpbWFnZXMgYXJlIHBsYWNlZCBiZWdpbm5pbmcgYXQgdGhlaXIgdXBwZXItbGVmdCBjb3JuZXIKaW1hdGgubF9mbGFyZV9sb2MgPSBsX2ZsYXJlX2F2ZyAtIGZsYXJlX29mZnNldAppbWF0aC5yX2ZsYXJlX2xvYyA9IHJfZmxhcmVfYXZnIC0gZmxhcmVfb2Zmc2V0CgojIENvbnZlcnQgdGhlIGZsYXJlIGxvY2F0aW9ucyB0byBzaW5nbGUgaW50ZWdlcnMKaW50X2xfZmxhcmVfbG9jeCA9IGludChpbWF0aC5sX2ZsYXJlX2xvYy54KQppbnRfbF9mbGFyZV9sb2N5ID0gaW50KGltYXRoLmxfZmxhcmVfbG9jLnkpCmludF9yX2ZsYXJlX2xvY3ggPSBpbnQoaW1hdGgucl9mbGFyZV9sb2MueCkKaW50X3JfZmxhcmVfbG9jeSA9IGludChpbWF0aC5yX2ZsYXJlX2xvYy55KQoKIyBDb252ZXJ0IGZsYXJlIGxvY2F0aW9ucyB0byB0dXBsZXMgLS0gd2UgY2Fubm90IHVzZSBhcnJheXMgZm9yIGltYWdlIHBsYWNlbWVudAppX2xfZmxhcmVfbG9jID0gKGludF9sX2ZsYXJlX2xvY3gsIGludF9sX2ZsYXJlX2xvY3kpCmlfcl9mbGFyZV9sb2MgPSAoaW50X3JfZmxhcmVfbG9jeCwgaW50X3JfZmxhcmVfbG9jeSkKCiMgTG9hZCB0aGUgYmFzZSBwb3J0cmFpdCwgcGFzdGUgdGhlIGxlbnMgZmxhcmVzLCBhbmQgc2F2ZSB0aGUgbmV3IGltYWdlCmlsb2FkLmJhY2tncm91bmQub3Blbi5wYXN0ZShpbG9hZC5mbGFyZS5vcGVuLCBpX2xfZmxhcmVfbG9jLCBpbG9hZC5mbGFyZS5vcGVuLmNvbnZlcnQoJ1JHQkEnKSkKaWxvYWQuYmFja2dyb3VuZC5vcGVuLnBhc3RlKGlsb2FkLmZsYXJlLm9wZW4sIGlfcl9mbGFyZV9sb2MsIGlsb2FkLmZsYXJlLm9wZW4uY29udmVydCgnUkdCQScpKQppbG9hZC5iYWNrZ3JvdW5kLm9wZW4uc2F2ZSgicmVzb3VyY2VzL25ld19pbWFnZV9tb2RpZmllZC5wbmciKQo8fGZpbV9zdWZmaXh8PgoKIyBUaGVyZSBzZWVtcyB0byBiZSBtb3JlIGFjY3VyYWN5IHVzaW5nIHBlcmZlY3Qgc3ltbWV0cnkgYmV0d2VlbiB0aGUgcG9pbnRzLCByYXRoZXIgdGhhbiB0cmFuc2xhdGluZyB0aGVtLCBzbyB0aGUKIyBzZXR1cCBoZXJlIGlzIGEgbGl0dGxlIGRpZmZlcmVudApyX2V5ZV9sX2Nvcm5lciA9IGZpbmRfY29vcmRzKDQzKQo8fGZpbV9lbmR8Pg=="]
["a0d006964f4c095f7db3f424846804d3395e8185-3","a0d006964f4c095f7db3f424846804d3395e8185","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGltYXRoCmltcG9ydCBpbG9hZAppbXBvcnQgZmFjZV9yZWNvZ25pdGlvbgpmcm9tIG51bXB5IGltcG9ydCBhcnJheQppbXBvcnQgZGxpYgoKCiMgTG9hZCBuZWNlc3NhcnkgcmVzb3VyY2VzCiMgcHJlZGljdG9yX3BvaW50cyBpcyBhIGNvbGxlY3Rpb24gb2YgcG9pbnRzIHRoYXQgdGhlIHByZWRpY3RvciBwbGFjZXMgYXJvdW5kIGEgZmFjZQojIGltYWdlIGlzIGEgcGljdHVyZSByZWFkIGJ5IHRoZSBwcmVkaWN0b3IgdG8gcGxhY2UgdGhvc2UgcG9pbnRzCjx8ZmltX2hvbGV8PgpkZXRlY3RvciA9IGRsaWIuZ2V0X2Zyb250YWxfZmFjZV9kZXRlY3RvcigpCnByZWRpY3RvciA9IGRsaWIuc2hhcGVfcHJlZGljdG9yKHByZWRpY3Rvcl9wb2ludHMpCmRldGVjdGlvbiA9IGRldGVjdG9yKGltYWdlKQoKIyBQbGFjZSBwb2ludHMKZm9yIGssIGQgaW4gZW51bWVyYXRlKGRldGVjdGlvbik6CiAgICBzaGFwZSA9IHByZWRpY3RvcihpbWFnZSwgZCkKCiMgRnVuY3Rpb24gdG8gZmluZCBjb29yZGluYXRlcyBvZiB0aG9zZSBwb2ludHMgaW4gdGhlIGltYWdlIHVzaW5nIHNoYXBlCmRlZiBmaW5kX2Nvb3JkcyhuKToKICAgIHhjID0gc2hhcGUucGFydChuKS54CiAgICB5YyA9IHNoYXBlLnBhcnQobikueQoKICAgIHJldHVybiBhcnJheShbeGMsIHljXSkKCiMgQXNzaWduIGVhY2ggbmVjZXNzYXJ5IGNvb3JkaW5hdGUgZm9yIG91ciBwcm9qZWN0IHRvIGEgdmFyaWFibGUKIyBUaGlzIGlzIHdyaXR0ZW4gd2l0aCByZXNwZWN0IHRvIHRoZSB2aWV3ZXIgLS0gdGhlIGxlZnQgZXllIGluIHRoaXMgY2FzZSBpcyB0aGUgcmlnaHQgZXllIG9mIHRoZSBzdWJqZWN0CmxfZXllX2xfY29ybmVyID0gZmluZF9jb29yZHMoMzcpCmxfZXllX3VwcGVyID0gZmluZF9jb29yZHMoMzgpCmxfZXllX3JfY29ybmVyID0gZmluZF9jb29yZHMoNDApCmxfZXllX2xvd2VyID0gZmluZF9jb29yZHMoNDEpCgojIFRoZXJlIHNlZW1zIHRvIGJlIG1vcmUgYWNjdXJhY3kgdXNpbmcgcGVyZmVjdCBzeW1tZXRyeSBiZXR3ZWVuIHRoZSBwb2ludHMsIHJhdGhlciB0aGFuIHRyYW5zbGF0aW5nIHRoZW0sIHNvIHRoZQojIHNldHVwIGhlcmUgaXMgYSBsaXR0bGUgZGlmZmVyZW50CnJfZXllX2xfY29ybmVyID0gZmluZF9jb29yZHMoNDMpCnJfZXllX3VwcGVyID0gZmluZF9jb29yZHMoNDQpCnJfZXllX3JfY29ybmVyID0gZmluZF9jb29yZHMoNDYpCnJfZXllX2xvd2VyID0gZmluZF9jb29yZHMoNDcpCgojIENhbGN1bGF0ZSBpbWFnZSBwbGFjZW1lbnQgb2Zmc2V0CmZsYXJlX29mZnNldCA9IGlsb2FkLmZsYXJlLmNvZmYoKQoKIyBDb21wdXRlIGEgcG9pbnQgbmVhciB0aGUgY2VudGVyIG9mIGVhY2ggZXllIGZvciB0aGUgaW1hZ2UgdG8gYmUgcGxhY2VkCmxfZmxhcmVfYXZnID0gaW1hdGguc2VnX2F2ZyhsX2V5ZV9sX2Nvcm5lciwgbF9leWVfcl9jb3JuZXIsIGxfZXllX2xvd2VyLCBsX2V5ZV91cHBlcikKcl9mbGFyZV9hdmcgPSBpbWF0aC5zZWdfYXZnKHJfZXllX2xfY29ybmVyLCByX2V5ZV9yX2Nvcm5lciwgcl9leWVfdXBwZXIsIHJfZXllX2xvd2VyKQoKIyBDb21wdXRlIHRoZSBwb3NpdGlvbiB0byBwbGFjZSBlYWNoIGltYWdlCiMgQnkgZGVmYXVsdCwgaW1hZ2VzIGFyZSBwbGFjZWQgYmVnaW5uaW5nIGF0IHRoZWlyIHVwcGVyLWxlZnQgY29ybmVyCmltYXRoLmxfZmxhcmVfbG9jID0gbF9mbGFyZV9hdmcgLSBmbGFyZV9vZmZzZXQKaW1hdGgucl9mbGFyZV9sb2MgPSByX2ZsYXJlX2F2ZyAtIGZsYXJlX29mZnNldAoKIyBDb252ZXJ0IHRoZSBmbGFyZSBsb2NhdGlvbnMgdG8gc2luZ2xlIGludGVnZXJzCmludF9sX2ZsYXJlX2xvY3ggPSBpbnQoaW1hdGgubF9mbGFyZV9sb2MueCkKaW50X2xfZmxhcmVfbG9jeSA9IGludChpbWF0aC5sX2ZsYXJlX2xvYy55KQppbnRfcl9mbGFyZV9sb2N4ID0gaW50KGltYXRoLnJfZmxhcmVfbG9jLngpCmludF9yX2ZsYXJlX2xvY3kgPSBpbnQoaW1hdGgucl9mbGFyZV9sb2MueSkKCiMgQ29udmVydCBmbGFyZSBsb2NhdGlvbnMgdG8gdHVwbGVzIC0tIHdlIGNhbm5vdCB1c2UgYXJyYXlzIGZvciBpbWFnZSBwbGFjZW1lbnQKaV9sX2ZsYXJlX2xvYyA9IChpbnRfbF9mbGFyZV9sb2N4LCBpbnRfbF9mbGFyZV9sb2N5KQppX3JfZmxhcmVfbG9jID0gKGludF9yX2ZsYXJlX2xvY3gsIGludF9yX2ZsYXJlX2xvY3kpCgojIExvYWQgdGhlIGJhc2UgcG9ydHJhaXQsIHBhc3RlIHRoZSBsZW5zIGZsYXJlcywgYW5kIHNhdmUgdGhlIG5ldyBpbWFnZQppbG9hZC5iYWNrZ3JvdW5kLm9wZW4ucGFzdGUoaWxvYWQuZmxhcmUub3BlbiwgaV9sX2ZsYXJlX2xvYywgaWxvYWQuZmxhcmUub3Blbi5jb252ZXJ0KCdSR0JBJykpCmlsb2FkLmJhY2tncm91bmQub3Blbi5wYXN0ZShpbG9hZC5mbGFyZS5vcGVuLCBpX3JfZmxhcmVfbG9jLCBpbG9hZC5mbGFyZS5vcGVuLmNvbnZlcnQoJ1JHQkEnKSkKaWxvYWQuYmFja2dyb3VuZC5vcGVuLnNhdmUoInJlc291cmNlcy9uZXdfaW1hZ2VfbW9kaWZpZWQucG5nIikKPHxmaW1fc3VmZml4fD4KcHJlZGljdG9yX3BvaW50cyA9ICJyZXNvdXJjZXMvc2hhcGVfcHJlZGljdG9yXzY4X2ZhY2VfbGFuZG1hcmtzLmRhdCIKaW1hZ2UgPSBmYWNlX3JlY29nbml0aW9uLmxvYWRfaW1hZ2VfZmlsZSgicmVzb3VyY2VzL2ltYWdlLnBuZyIpCgojIExvYWQgZGV0ZWN0b3IgYW5kIHByZWRpY3Rvcgo8fGZpbV9lbmR8Pg=="]
["a0d006964f4c095f7db3f424846804d3395e8185-4","a0d006964f4c095f7db3f424846804d3395e8185","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGltYXRoCmltcG9ydCBpbG9hZAppbXBvcnQgZmFjZV9yZWNvZ25pdGlvbgpmcm9tIG51bXB5IGltcG9ydCBhcnJheQppbXBvcnQgZGxpYgoKCiMgTG9hZCBuZWNlc3NhcnkgcmVzb3VyY2VzCiMgcHJlZGljdG9yX3BvaW50cyBpcyBhIGNvbGxlY3Rpb24gb2YgcG9pbnRzIHRoYXQgdGhlIHByZWRpY3RvciBwbGFjZXMgYXJvdW5kIGEgZmFjZQojIGltYWdlIGlzIGEgcGljdHVyZSByZWFkIGJ5IHRoZSBwcmVkaWN0b3IgdG8gcGxhY2UgdGhvc2UgcG9pbnRzCnByZWRpY3Rvcl9wb2ludHMgPSAicmVzb3VyY2VzL3NoYXBlX3ByZWRpY3Rvcl82OF9mYWNlX2xhbmRtYXJrcy5kYXQiCmltYWdlID0gZmFjZV9yZWNvZ25pdGlvbi5sb2FkX2ltYWdlX2ZpbGUoInJlc291cmNlcy9pbWFnZS5wbmciKQoKPHxmaW1faG9sZXw+CgojIFBsYWNlIHBvaW50cwpmb3IgaywgZCBpbiBlbnVtZXJhdGUoZGV0ZWN0aW9uKToKICAgIHNoYXBlID0gcHJlZGljdG9yKGltYWdlLCBkKQoKIyBGdW5jdGlvbiB0byBmaW5kIGNvb3JkaW5hdGVzIG9mIHRob3NlIHBvaW50cyBpbiB0aGUgaW1hZ2UgdXNpbmcgc2hhcGUKZGVmIGZpbmRfY29vcmRzKG4pOgogICAgeGMgPSBzaGFwZS5wYXJ0KG4pLngKICAgIHljID0gc2hhcGUucGFydChuKS55CgogICAgcmV0dXJuIGFycmF5KFt4YywgeWNdKQoKIyBBc3NpZ24gZWFjaCBuZWNlc3NhcnkgY29vcmRpbmF0ZSBmb3Igb3VyIHByb2plY3QgdG8gYSB2YXJpYWJsZQojIFRoaXMgaXMgd3JpdHRlbiB3aXRoIHJlc3BlY3QgdG8gdGhlIHZpZXdlciAtLSB0aGUgbGVmdCBleWUgaW4gdGhpcyBjYXNlIGlzIHRoZSByaWdodCBleWUgb2YgdGhlIHN1YmplY3QKbF9leWVfbF9jb3JuZXIgPSBmaW5kX2Nvb3JkcygzNykKbF9leWVfdXBwZXIgPSBmaW5kX2Nvb3JkcygzOCkKbF9leWVfcl9jb3JuZXIgPSBmaW5kX2Nvb3Jkcyg0MCkKbF9leWVfbG93ZXIgPSBmaW5kX2Nvb3Jkcyg0MSkKCiMgVGhlcmUgc2VlbXMgdG8gYmUgbW9yZSBhY2N1cmFjeSB1c2luZyBwZXJmZWN0IHN5bW1ldHJ5IGJldHdlZW4gdGhlIHBvaW50cywgcmF0aGVyIHRoYW4gdHJhbnNsYXRpbmcgdGhlbSwgc28gdGhlCiMgc2V0dXAgaGVyZSBpcyBhIGxpdHRsZSBkaWZmZXJlbnQKcl9leWVfbF9jb3JuZXIgPSBmaW5kX2Nvb3Jkcyg0MykKcl9leWVfdXBwZXIgPSBmaW5kX2Nvb3Jkcyg0NCkKcl9leWVfcl9jb3JuZXIgPSBmaW5kX2Nvb3Jkcyg0NikKcl9leWVfbG93ZXIgPSBmaW5kX2Nvb3Jkcyg0NykKCiMgQ2FsY3VsYXRlIGltYWdlIHBsYWNlbWVudCBvZmZzZXQKZmxhcmVfb2Zmc2V0ID0gaWxvYWQuZmxhcmUuY29mZigpCgojIENvbXB1dGUgYSBwb2ludCBuZWFyIHRoZSBjZW50ZXIgb2YgZWFjaCBleWUgZm9yIHRoZSBpbWFnZSB0byBiZSBwbGFjZWQKbF9mbGFyZV9hdmcgPSBpbWF0aC5zZWdfYXZnKGxfZXllX2xfY29ybmVyLCBsX2V5ZV9yX2Nvcm5lciwgbF9leWVfbG93ZXIsIGxfZXllX3VwcGVyKQpyX2ZsYXJlX2F2ZyA9IGltYXRoLnNlZ19hdmcocl9leWVfbF9jb3JuZXIsIHJfZXllX3JfY29ybmVyLCByX2V5ZV91cHBlciwgcl9leWVfbG93ZXIpCgojIENvbXB1dGUgdGhlIHBvc2l0aW9uIHRvIHBsYWNlIGVhY2ggaW1hZ2UKIyBCeSBkZWZhdWx0LCBpbWFnZXMgYXJlIHBsYWNlZCBiZWdpbm5pbmcgYXQgdGhlaXIgdXBwZXItbGVmdCBjb3JuZXIKaW1hdGgubF9mbGFyZV9sb2MgPSBsX2ZsYXJlX2F2ZyAtIGZsYXJlX29mZnNldAppbWF0aC5yX2ZsYXJlX2xvYyA9IHJfZmxhcmVfYXZnIC0gZmxhcmVfb2Zmc2V0CgojIENvbnZlcnQgdGhlIGZsYXJlIGxvY2F0aW9ucyB0byBzaW5nbGUgaW50ZWdlcnMKaW50X2xfZmxhcmVfbG9jeCA9IGludChpbWF0aC5sX2ZsYXJlX2xvYy54KQppbnRfbF9mbGFyZV9sb2N5ID0gaW50KGltYXRoLmxfZmxhcmVfbG9jLnkpCmludF9yX2ZsYXJlX2xvY3ggPSBpbnQoaW1hdGgucl9mbGFyZV9sb2MueCkKaW50X3JfZmxhcmVfbG9jeSA9IGludChpbWF0aC5yX2ZsYXJlX2xvYy55KQoKIyBDb252ZXJ0IGZsYXJlIGxvY2F0aW9ucyB0byB0dXBsZXMgLS0gd2UgY2Fubm90IHVzZSBhcnJheXMgZm9yIGltYWdlIHBsYWNlbWVudAppX2xfZmxhcmVfbG9jID0gKGludF9sX2ZsYXJlX2xvY3gsIGludF9sX2ZsYXJlX2xvY3kpCmlfcl9mbGFyZV9sb2MgPSAoaW50X3JfZmxhcmVfbG9jeCwgaW50X3JfZmxhcmVfbG9jeSkKCiMgTG9hZCB0aGUgYmFzZSBwb3J0cmFpdCwgcGFzdGUgdGhlIGxlbnMgZmxhcmVzLCBhbmQgc2F2ZSB0aGUgbmV3IGltYWdlCmlsb2FkLmJhY2tncm91bmQub3Blbi5wYXN0ZShpbG9hZC5mbGFyZS5vcGVuLCBpX2xfZmxhcmVfbG9jLCBpbG9hZC5mbGFyZS5vcGVuLmNvbnZlcnQoJ1JHQkEnKSkKaWxvYWQuYmFja2dyb3VuZC5vcGVuLnBhc3RlKGlsb2FkLmZsYXJlLm9wZW4sIGlfcl9mbGFyZV9sb2MsIGlsb2FkLmZsYXJlLm9wZW4uY29udmVydCgnUkdCQScpKQppbG9hZC5iYWNrZ3JvdW5kLm9wZW4uc2F2ZSgicmVzb3VyY2VzL25ld19pbWFnZV9tb2RpZmllZC5wbmciKQo8fGZpbV9zdWZmaXh8PgojIExvYWQgZGV0ZWN0b3IgYW5kIHByZWRpY3RvcgpkZXRlY3RvciA9IGRsaWIuZ2V0X2Zyb250YWxfZmFjZV9kZXRlY3RvcigpCnByZWRpY3RvciA9IGRsaWIuc2hhcGVfcHJlZGljdG9yKHByZWRpY3Rvcl9wb2ludHMpCmRldGVjdGlvbiA9IGRldGVjdG9yKGltYWdlKQo8fGZpbV9lbmR8Pg=="]
["26f2cf8384cd7af575918e9d15dccd785295760b-1","26f2cf8384cd7af575918e9d15dccd785295760b","PHxmaW1fcHJlZml4fD4KZnJvbSBlZGlmYWN0LmluY29taW5nLm1vZGVscy5pbnRlcmNoYW5nZSBpbXBvcnQgSW50ZXJjaGFuZ2VIZWFkZXIKZnJvbSBlZGlmYWN0LmluY29taW5nLm1vZGVscy5tZXNzYWdlIGltcG9ydCBNZXNzYWdlU2VnbWVudEJlZ2lubmluZ0RldGFpbHMKZnJvbSBlZGlmYWN0LmluY29taW5nLm1vZGVscy50cmFuc2FjdGlvbiBpbXBvcnQgVHJhbnNhY3Rpb25SZWdpc3RyYXRpb25EZXRhaWxzLCBUcmFuc2FjdGlvblBhdGllbnREZXRhaWxzCmZyb20gZWRpZmFjdC5pbmNvbWluZy5wYXJzZXIgaW1wb3J0IEVkaWZhY3REaWN0CgpTRUNUSU9OX1NFUEFSQVRPUiA9ICIrIgpTVUJfU0VDVElPTl9TRVBBUkFUT1IgPSAiOiIKCgpkZWYgZ2V0X3ZhbHVlX2luX2RpY3QoZGljdF90b19zZWFyY2g6IEVkaWZhY3REaWN0LCBrZXlfdG9fZmluZDogc3RyKSAtPiBzdHI6CiAgICAiIiIKICAgIEV4dHJhY3QgdGhlIHZhbHVlIHNlZ21lbnQgb3V0IG9mIHRoZSBkaWN0aW9uYXJ5IHByb3ZpZGVkIGJhc2VkIHVwb24gdGhlIGtleS4gV2lsbCByZXR1cm4gdGhlIGZpcnN0IHJlc3VsdC4KICAgIDpwYXJhbSBkaWN0X3RvX3NlYXJjaDogVGhlIGRpY3Rpb25hcnkgb2Yga2V5IHZhbHVlIHBhaXJzLgogICAgVGhpcyBpcyBhIGxpc3Qgb2YgdHVwbGVzIHNvIG5lZWQgdG8gbG9vcCB0aHJvdWdoIHRoZSBkaWN0LgogICAgOnBhcmFtIGtleV90b19maW5kOiBUaGUga2V5IHRvIGZpbmQgd2l0aGluIHRoZSBkaWN0LgogICAgOnJldHVybjogVGhlIFZhbHVlIGFzIGEgc3RyaW5nLgogICAgIiIiCiAgICB2YWx1ZSA9IFt2YWx1ZSBmb3Iga2V5LCB2YWx1ZSBpbiBkaWN0X3RvX3NlYXJjaCBpZiBrZXkgPT0ga2V5X3RvX2ZpbmRdWzBdCiAgICByZXR1cm4gdmFsdWUKCgpkZWYgY3JlYXRlX2ludGVyY2hhbmdlX2hlYWRlcihpbnRlcmNoYW5nZV9oZWFkZXJfZGljdDogRWRpZmFjdERpY3QpIC0+IEludGVyY2hhbmdlSGVhZGVyOgogICAgIiIiCiAgICBDcmVhdGVzIGFuIGluY29taW5nIGludGVyY2hhbmdlIGhlYWRlciBmcm9tIHRoZSBpbnRlcmNoYW5nZSBoZWFkZXIgZGljdGlvbmFyeS4KICAgIFNpbmNlIHRoZSBpbnRlcmNoYW5nZSBoZWFkZXIgZGV0YWlscyBhcmUgYWxsIGluIHRoZSBvbmUgbGluZSB3ZSBleHRyYWN0IHRoZSBkZXRhaWxzCiAgICBmcm9tIGhlcmUuCiAgICA6cGFyYW0gaW50ZXJjaGFuZ2VfaGVhZGVyX2RpY3Q6IFdpbGwganVzdCBiZSBhIGxpc3Qgb2YgMQogICAgY29udGFpbmluZyBhIGtleSB2YWx1ZSB0dXBsZSBvZiB0aGUgaW50ZXJjaGFuZ2UgaGVhZGVyIGRldGFpbHMuCiAgICA6cmV0dXJuOiBJbnRlcmNoYW5nZUhlYWRlcjogVGhlIGluY29taW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlZGlmYWN0IGludGVyY2hhbmdlIGhlYWRlci4KICAgICIiIgogICAgaGVhZGVyX3NlZ21lbnQgPSBpbnRlcmNoYW5nZV9oZWFkZXJfZGljdFswXQogICAgaGVhZGVyX3NlZ21lbnRfdmFsdWUgPSBoZWFkZXJfc2VnbWVudFsxXQogICAgaGVhZGVyX3NlZ21lbnRfdmFsdWVzID0gaGVhZGVyX3NlZ21lbnRfdmFsdWUuc3BsaXQoU0VDVElPTl9TRVBBUkFUT1IpCiAgICBzZW5kZXIgPSBoZWFkZXJfc2VnbWVudF92YWx1ZXNbMV0KICAgIHJlY2lwaWVudCA9IGhlYWRlcl9zZWdtZW50X3ZhbHVlc1syXQogICAgZGF0ZV90aW1lID0gaGVhZGVyX3NlZ21lbnRfdmFsdWVzWzNdCiAgICByZXR1cm4gSW50ZXJjaGFuZ2VIZWFkZXIoc2VuZGVyLCByZWNpcGllbnQsIGRhdGVfdGltZSkKCgpkZWYgY3JlYXRlX21lc3NhZ2Vfc2VnbWVudF9iZWdpbm5pbmcobWVzc2FnZV9iZWdpbm5pbmdfZGljdDogRWRpZmFjdERpY3QpIC0+IE1lc3NhZ2VTZWdtZW50QmVnaW5uaW5nRGV0YWlsczoKICAgICIiIgogICAgQ3JlYXRlcyBhbiBpbmNvbWluZyBtZXNzYWdlIGJlZ2lubmluZyBmcm9tIHRoZSBtZXNzYWdlIGJlZ2lubmluZyBkaWN0aW9uYXJ5LgogICAgOnBhcmFtIG1lc3NhZ2VfYmVnaW5uaW5nX2RpY3Q6IFRoZSBkaWN0aW9uYXJ5IHdpbGwgY29udGFpbiBhIGxpc3Qgb2YgbGluZXMgcmVsZXZhbnQgdG8gdGhlCiAgICBtZXNzYWdlIGJlZ2lubmluZyBzZWN0aW9uIEJHTS4KICAgIDpyZXR1cm46IE1lc3NhZ2VTZWdtZW50QmVnaW5uaW5nRGV0YWlsczogVGhlIGluY29taW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlZGlmYWN0IG1lc3NhZ2UgYmVnaW5uaW5nIGRldGFpbHMuCiAgICAiIiIKICAgIHJlZmVyZW5jZV9zZWdtZW50ID0gZ2V0X3ZhbHVlX2luX2RpY3QoZGljdF90b19zZWFyY2g9bWVzc2FnZV9iZWdpbm5pbmdfZGljdCwga2V5X3RvX2ZpbmQ9IlJGRiIpCiAgICByZWZlcmVuY2VfdmFsdWVzID0gcmVmZXJlbmNlX3NlZ21lbnQuc3BsaXQoU1VCX1NFQ1RJT05fU0VQQVJBVE9SKQogICAgcmVmZXJlbmNlX251bWJlciA9IHJlZmVyZW5jZV92YWx1ZXNbMV0KICAgIHJldHVybiBNZXNzYWdlU2VnbWVudEJlZ2lubmluZ0RldGFpbHMocmVmZXJlbmNlX251bWJlcikKCgpkZWYgY3JlYXRlX3RyYW5zYWN0aW9uX3JlZ2lzdHJhdGlvbihtZXNzYWdlX3JlZ2lzdHJhdGlvbl9kaWN0OiBFZGlmYWN0RGljdCkgLT4gVHJhbnNhY3Rpb25SZWdpc3RyYXRpb25EZXRhaWxzOgogICAgIiIiCiAgICBDcmVhdGVzIGFuIGluY29taW5nIG1lc3NhZ2UgcmVnaXN0cmF0aW9uIGZyb20gdGhlIG1lc3NhZ2UgcmVnaXN0cmF0aW9uIGRpY3Rpb25hcnkuCiAgICA6cGFyYW0gbWVzc2FnZV9yZWdpc3RyYXRpb25fZGljdDogVGhlIGRpY3Rpb25hcnkgd2lsbCBjb250YWluIGEgbGlzdCBvZiBsaW5lcyByZWxldmFudCB0byB0aGUKICAgIG1lc3NhZ2UgcmVnaXN0cmF0aW9uIHNlY3Rpb24gUzAxLgogICAgOnJldHVybjogVHJhbnNhY3Rpb25SZWdpc3RyYXRpb25EZXRhaWxzOiBUaGUgaW5jb21pbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVkaWZhY3QgbWVzc2FnZSByZWdpc3RyYXRpb24uCiAgICAiIiIKICAgIHRyYW5zYWN0aW9uX3NlZ21lbnQgPSBnZXRfdmFsdWVfaW5fZGljdChkaWN0X3RvX3NlYXJjaD1tZXNzYWdlX3JlZ2lzdHJhdGlvbl9kaWN0LCBrZXlfdG9fZmluZD0iUkZGIikKICAgIHRyYW5zYWN0aW9uX3ZhbHVlcyA9IHRyYW5zYWN0aW9uX3NlZ21lbnQuc3BsaXQoU1VCX1NFQ1RJT05fU0VQQVJBVE9SKQogICAgdHJhbnNhY3Rpb25fbnVtYmVyID0gdHJhbnNhY3Rpb25fdmFsdWVzWzFdCiAgICByZXR1cm4gVHJhbnNhY3Rpb25SZWdpc3RyYXRpb25EZXRhaWxzKHRyYW5zYWN0aW9uX251bWJlcikKCgpkZWYgY3JlYXRlX3RyYW5zYWN0aW9uX3BhdGllbnQobWVzc2FnZV9wYXRpZW50X2RpY3Q6IEVkaWZhY3REaWN0KSAtPiBUcmFuc2FjdGlvblBhdGllbnREZXRhaWxzOgogICAgIiIiCjx8ZmltX2hvbGV8PgogICAgIiIiCiAgICBwYXRpZW50X2RldGFpbHNfc2VnbWVudCA9IGdldF92YWx1ZV9pbl9kaWN0KGRpY3RfdG9fc2VhcmNoPW1lc3NhZ2VfcGF0aWVudF9kaWN0LCBrZXlfdG9fZmluZD0iUE5BIikKICAgIHBhdGllbnRfZGV0YWlsc19zZWdtZW50X3ZhbHVlcyA9IHBhdGllbnRfZGV0YWlsc19zZWdtZW50LnJlcGxhY2UoU1VCX1NFQ1RJT05fU0VQQVJBVE9SLCBTRUNUSU9OX1NFUEFSQVRPUikuc3BsaXQoCiAgICAgICAgU0VDVElPTl9TRVBBUkFUT1IpCiAgICBuaHNfbnVtYmVyID0gcGF0aWVudF9kZXRhaWxzX3NlZ21lbnRfdmFsdWVzWzFdCiAgICByZXR1cm4gVHJhbnNhY3Rpb25QYXRpZW50RGV0YWlscyhuaHNfbnVtYmVyKQo8fGZpbV9zdWZmaXh8PgogICAgQ3JlYXRlcyBhbiBpbmNvbWluZyBtZXNzYWdlIHBhdGllbnQgZnJvbSB0aGUgbWVzc2FnZSBtZXNzYWdlIHBhdGllbnQgZGljdGlvbmFyeS4KICAgIDpwYXJhbSBtZXNzYWdlX3BhdGllbnRfZGljdDogVGhlIGRpY3Rpb25hcnkgd2lsbCBjb250YWluIGEgbGlzdCBvZiBsaW5lcyByZWxldmFudCB0byB0aGUKICAgIG1lc3NhZ2UgcGF0aWVudCBzZWN0aW9uIFMwMi4KICAgIDpyZXR1cm46IFRyYW5zYWN0aW9uUGF0aWVudERldGFpbHM6IFRoZSBpbmNvbWluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZWRpZmFjdCBtZXNzYWdlIHBhdGllbnQuCjx8ZmltX2VuZHw+"]
["26f2cf8384cd7af575918e9d15dccd785295760b-2","26f2cf8384cd7af575918e9d15dccd785295760b","PHxmaW1fcHJlZml4fD4KZnJvbSBlZGlmYWN0LmluY29taW5nLm1vZGVscy5pbnRlcmNoYW5nZSBpbXBvcnQgSW50ZXJjaGFuZ2VIZWFkZXIKZnJvbSBlZGlmYWN0LmluY29taW5nLm1vZGVscy5tZXNzYWdlIGltcG9ydCBNZXNzYWdlU2VnbWVudEJlZ2lubmluZ0RldGFpbHMKZnJvbSBlZGlmYWN0LmluY29taW5nLm1vZGVscy50cmFuc2FjdGlvbiBpbXBvcnQgVHJhbnNhY3Rpb25SZWdpc3RyYXRpb25EZXRhaWxzLCBUcmFuc2FjdGlvblBhdGllbnREZXRhaWxzCmZyb20gZWRpZmFjdC5pbmNvbWluZy5wYXJzZXIgaW1wb3J0IEVkaWZhY3REaWN0CgpTRUNUSU9OX1NFUEFSQVRPUiA9ICIrIgpTVUJfU0VDVElPTl9TRVBBUkFUT1IgPSAiOiIKCgpkZWYgZ2V0X3ZhbHVlX2luX2RpY3QoZGljdF90b19zZWFyY2g6IEVkaWZhY3REaWN0LCBrZXlfdG9fZmluZDogc3RyKSAtPiBzdHI6CiAgICAiIiIKICAgIEV4dHJhY3QgdGhlIHZhbHVlIHNlZ21lbnQgb3V0IG9mIHRoZSBkaWN0aW9uYXJ5IHByb3ZpZGVkIGJhc2VkIHVwb24gdGhlIGtleS4gV2lsbCByZXR1cm4gdGhlIGZpcnN0IHJlc3VsdC4KICAgIDpwYXJhbSBkaWN0X3RvX3NlYXJjaDogVGhlIGRpY3Rpb25hcnkgb2Yga2V5IHZhbHVlIHBhaXJzLgogICAgVGhpcyBpcyBhIGxpc3Qgb2YgdHVwbGVzIHNvIG5lZWQgdG8gbG9vcCB0aHJvdWdoIHRoZSBkaWN0LgogICAgOnBhcmFtIGtleV90b19maW5kOiBUaGUga2V5IHRvIGZpbmQgd2l0aGluIHRoZSBkaWN0LgogICAgOnJldHVybjogVGhlIFZhbHVlIGFzIGEgc3RyaW5nLgogICAgIiIiCiAgICB2YWx1ZSA9IFt2YWx1ZSBmb3Iga2V5LCB2YWx1ZSBpbiBkaWN0X3RvX3NlYXJjaCBpZiBrZXkgPT0ga2V5X3RvX2ZpbmRdWzBdCiAgICByZXR1cm4gdmFsdWUKCgo8fGZpbV9ob2xlfD4KICAgIGZyb20gaGVyZS4KICAgIDpwYXJhbSBpbnRlcmNoYW5nZV9oZWFkZXJfZGljdDogV2lsbCBqdXN0IGJlIGEgbGlzdCBvZiAxCiAgICBjb250YWluaW5nIGEga2V5IHZhbHVlIHR1cGxlIG9mIHRoZSBpbnRlcmNoYW5nZSBoZWFkZXIgZGV0YWlscy4KICAgIDpyZXR1cm46IEludGVyY2hhbmdlSGVhZGVyOiBUaGUgaW5jb21pbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVkaWZhY3QgaW50ZXJjaGFuZ2UgaGVhZGVyLgogICAgIiIiCiAgICBoZWFkZXJfc2VnbWVudCA9IGludGVyY2hhbmdlX2hlYWRlcl9kaWN0WzBdCiAgICBoZWFkZXJfc2VnbWVudF92YWx1ZSA9IGhlYWRlcl9zZWdtZW50WzFdCiAgICBoZWFkZXJfc2VnbWVudF92YWx1ZXMgPSBoZWFkZXJfc2VnbWVudF92YWx1ZS5zcGxpdChTRUNUSU9OX1NFUEFSQVRPUikKICAgIHNlbmRlciA9IGhlYWRlcl9zZWdtZW50X3ZhbHVlc1sxXQogICAgcmVjaXBpZW50ID0gaGVhZGVyX3NlZ21lbnRfdmFsdWVzWzJdCiAgICBkYXRlX3RpbWUgPSBoZWFkZXJfc2VnbWVudF92YWx1ZXNbM10KICAgIHJldHVybiBJbnRlcmNoYW5nZUhlYWRlcihzZW5kZXIsIHJlY2lwaWVudCwgZGF0ZV90aW1lKQoKCmRlZiBjcmVhdGVfbWVzc2FnZV9zZWdtZW50X2JlZ2lubmluZyhtZXNzYWdlX2JlZ2lubmluZ19kaWN0OiBFZGlmYWN0RGljdCkgLT4gTWVzc2FnZVNlZ21lbnRCZWdpbm5pbmdEZXRhaWxzOgogICAgIiIiCiAgICBDcmVhdGVzIGFuIGluY29taW5nIG1lc3NhZ2UgYmVnaW5uaW5nIGZyb20gdGhlIG1lc3NhZ2UgYmVnaW5uaW5nIGRpY3Rpb25hcnkuCiAgICA6cGFyYW0gbWVzc2FnZV9iZWdpbm5pbmdfZGljdDogVGhlIGRpY3Rpb25hcnkgd2lsbCBjb250YWluIGEgbGlzdCBvZiBsaW5lcyByZWxldmFudCB0byB0aGUKICAgIG1lc3NhZ2UgYmVnaW5uaW5nIHNlY3Rpb24gQkdNLgogICAgOnJldHVybjogTWVzc2FnZVNlZ21lbnRCZWdpbm5pbmdEZXRhaWxzOiBUaGUgaW5jb21pbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVkaWZhY3QgbWVzc2FnZSBiZWdpbm5pbmcgZGV0YWlscy4KICAgICIiIgogICAgcmVmZXJlbmNlX3NlZ21lbnQgPSBnZXRfdmFsdWVfaW5fZGljdChkaWN0X3RvX3NlYXJjaD1tZXNzYWdlX2JlZ2lubmluZ19kaWN0LCBrZXlfdG9fZmluZD0iUkZGIikKICAgIHJlZmVyZW5jZV92YWx1ZXMgPSByZWZlcmVuY2Vfc2VnbWVudC5zcGxpdChTVUJfU0VDVElPTl9TRVBBUkFUT1IpCiAgICByZWZlcmVuY2VfbnVtYmVyID0gcmVmZXJlbmNlX3ZhbHVlc1sxXQogICAgcmV0dXJuIE1lc3NhZ2VTZWdtZW50QmVnaW5uaW5nRGV0YWlscyhyZWZlcmVuY2VfbnVtYmVyKQoKCmRlZiBjcmVhdGVfdHJhbnNhY3Rpb25fcmVnaXN0cmF0aW9uKG1lc3NhZ2VfcmVnaXN0cmF0aW9uX2RpY3Q6IEVkaWZhY3REaWN0KSAtPiBUcmFuc2FjdGlvblJlZ2lzdHJhdGlvbkRldGFpbHM6CiAgICAiIiIKICAgIENyZWF0ZXMgYW4gaW5jb21pbmcgbWVzc2FnZSByZWdpc3RyYXRpb24gZnJvbSB0aGUgbWVzc2FnZSByZWdpc3RyYXRpb24gZGljdGlvbmFyeS4KICAgIDpwYXJhbSBtZXNzYWdlX3JlZ2lzdHJhdGlvbl9kaWN0OiBUaGUgZGljdGlvbmFyeSB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIGxpbmVzIHJlbGV2YW50IHRvIHRoZQogICAgbWVzc2FnZSByZWdpc3RyYXRpb24gc2VjdGlvbiBTMDEuCiAgICA6cmV0dXJuOiBUcmFuc2FjdGlvblJlZ2lzdHJhdGlvbkRldGFpbHM6IFRoZSBpbmNvbWluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZWRpZmFjdCBtZXNzYWdlIHJlZ2lzdHJhdGlvbi4KICAgICIiIgogICAgdHJhbnNhY3Rpb25fc2VnbWVudCA9IGdldF92YWx1ZV9pbl9kaWN0KGRpY3RfdG9fc2VhcmNoPW1lc3NhZ2VfcmVnaXN0cmF0aW9uX2RpY3QsIGtleV90b19maW5kPSJSRkYiKQogICAgdHJhbnNhY3Rpb25fdmFsdWVzID0gdHJhbnNhY3Rpb25fc2VnbWVudC5zcGxpdChTVUJfU0VDVElPTl9TRVBBUkFUT1IpCiAgICB0cmFuc2FjdGlvbl9udW1iZXIgPSB0cmFuc2FjdGlvbl92YWx1ZXNbMV0KICAgIHJldHVybiBUcmFuc2FjdGlvblJlZ2lzdHJhdGlvbkRldGFpbHModHJhbnNhY3Rpb25fbnVtYmVyKQoKCmRlZiBjcmVhdGVfdHJhbnNhY3Rpb25fcGF0aWVudChtZXNzYWdlX3BhdGllbnRfZGljdDogRWRpZmFjdERpY3QpIC0+IFRyYW5zYWN0aW9uUGF0aWVudERldGFpbHM6CiAgICAiIiIKICAgIENyZWF0ZXMgYW4gaW5jb21pbmcgbWVzc2FnZSBwYXRpZW50IGZyb20gdGhlIG1lc3NhZ2UgbWVzc2FnZSBwYXRpZW50IGRpY3Rpb25hcnkuCiAgICA6cGFyYW0gbWVzc2FnZV9wYXRpZW50X2RpY3Q6IFRoZSBkaWN0aW9uYXJ5IHdpbGwgY29udGFpbiBhIGxpc3Qgb2YgbGluZXMgcmVsZXZhbnQgdG8gdGhlCiAgICBtZXNzYWdlIHBhdGllbnQgc2VjdGlvbiBTMDIuCiAgICA6cmV0dXJuOiBUcmFuc2FjdGlvblBhdGllbnREZXRhaWxzOiBUaGUgaW5jb21pbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVkaWZhY3QgbWVzc2FnZSBwYXRpZW50LgogICAgIiIiCiAgICBwYXRpZW50X2RldGFpbHNfc2VnbWVudCA9IGdldF92YWx1ZV9pbl9kaWN0KGRpY3RfdG9fc2VhcmNoPW1lc3NhZ2VfcGF0aWVudF9kaWN0LCBrZXlfdG9fZmluZD0iUE5BIikKICAgIHBhdGllbnRfZGV0YWlsc19zZWdtZW50X3ZhbHVlcyA9IHBhdGllbnRfZGV0YWlsc19zZWdtZW50LnJlcGxhY2UoU1VCX1NFQ1RJT05fU0VQQVJBVE9SLCBTRUNUSU9OX1NFUEFSQVRPUikuc3BsaXQoCiAgICAgICAgU0VDVElPTl9TRVBBUkFUT1IpCiAgICBuaHNfbnVtYmVyID0gcGF0aWVudF9kZXRhaWxzX3NlZ21lbnRfdmFsdWVzWzFdCiAgICByZXR1cm4gVHJhbnNhY3Rpb25QYXRpZW50RGV0YWlscyhuaHNfbnVtYmVyKQo8fGZpbV9zdWZmaXh8PgpkZWYgY3JlYXRlX2ludGVyY2hhbmdlX2hlYWRlcihpbnRlcmNoYW5nZV9oZWFkZXJfZGljdDogRWRpZmFjdERpY3QpIC0+IEludGVyY2hhbmdlSGVhZGVyOgogICAgIiIiCiAgICBDcmVhdGVzIGFuIGluY29taW5nIGludGVyY2hhbmdlIGhlYWRlciBmcm9tIHRoZSBpbnRlcmNoYW5nZSBoZWFkZXIgZGljdGlvbmFyeS4KICAgIFNpbmNlIHRoZSBpbnRlcmNoYW5nZSBoZWFkZXIgZGV0YWlscyBhcmUgYWxsIGluIHRoZSBvbmUgbGluZSB3ZSBleHRyYWN0IHRoZSBkZXRhaWxzCjx8ZmltX2VuZHw+"]
["26f2cf8384cd7af575918e9d15dccd785295760b-3","26f2cf8384cd7af575918e9d15dccd785295760b","PHxmaW1fcHJlZml4fD4KZnJvbSBlZGlmYWN0LmluY29taW5nLm1vZGVscy5pbnRlcmNoYW5nZSBpbXBvcnQgSW50ZXJjaGFuZ2VIZWFkZXIKZnJvbSBlZGlmYWN0LmluY29taW5nLm1vZGVscy5tZXNzYWdlIGltcG9ydCBNZXNzYWdlU2VnbWVudEJlZ2lubmluZ0RldGFpbHMKZnJvbSBlZGlmYWN0LmluY29taW5nLm1vZGVscy50cmFuc2FjdGlvbiBpbXBvcnQgVHJhbnNhY3Rpb25SZWdpc3RyYXRpb25EZXRhaWxzLCBUcmFuc2FjdGlvblBhdGllbnREZXRhaWxzCmZyb20gZWRpZmFjdC5pbmNvbWluZy5wYXJzZXIgaW1wb3J0IEVkaWZhY3REaWN0CgpTRUNUSU9OX1NFUEFSQVRPUiA9ICIrIgpTVUJfU0VDVElPTl9TRVBBUkFUT1IgPSAiOiIKCgpkZWYgZ2V0X3ZhbHVlX2luX2RpY3QoZGljdF90b19zZWFyY2g6IEVkaWZhY3REaWN0LCBrZXlfdG9fZmluZDogc3RyKSAtPiBzdHI6CiAgICAiIiIKICAgIEV4dHJhY3QgdGhlIHZhbHVlIHNlZ21lbnQgb3V0IG9mIHRoZSBkaWN0aW9uYXJ5IHByb3ZpZGVkIGJhc2VkIHVwb24gdGhlIGtleS4gV2lsbCByZXR1cm4gdGhlIGZpcnN0IHJlc3VsdC4KICAgIDpwYXJhbSBkaWN0X3RvX3NlYXJjaDogVGhlIGRpY3Rpb25hcnkgb2Yga2V5IHZhbHVlIHBhaXJzLgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBUaGlzIGlzIGEgbGlzdCBvZiB0dXBsZXMgc28gbmVlZCB0byBsb29wIHRocm91Z2ggdGhlIGRpY3QuCiAgICA6cGFyYW0ga2V5X3RvX2ZpbmQ6IFRoZSBrZXkgdG8gZmluZCB3aXRoaW4gdGhlIGRpY3QuCiAgICA6cmV0dXJuOiBUaGUgVmFsdWUgYXMgYSBzdHJpbmcuCiAgICAiIiIKPHxmaW1fZW5kfD4="]
["f5ae8dea344374999d6b0dc93c2bc0ca2c6d74d8-1","f5ae8dea344374999d6b0dc93c2bc0ca2c6d74d8",{"$cut":{"chars":67152,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgpmcm9tIFVpQXV0b1Rlc3RMaWIgaW1wb3J0IFVpVGVzdExpYgpmcm9tIHJvYm90LmFwaSBpbXBvcnQgbG9nZ2VyCmZyb20gcm9ib3QubGlicmFyaWVzLkJ1aWx0SW4gaW1wb3J0IEJ1aWx0SW4KaW1wb3J0IHRpbWUKaW1wb3J0IHJlCmltcG9ydCByYW5kb20KCmNsYXNzIFVpS3BpVGVzdChVaVRlc3RMaWIpOgogICAgIiIiCiAgICBUZXN0IExpYiBmb3IgVWkgQXV0b21hdGlvbiB0ZXN0CiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBTZXJpYWwgPSBOb25lKToKICAgICAgICBVaVRlc3RMaWIuX19pbml0X18oc2VsZiwgU2VyaWFsKQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIwogICAgIyAgICAgICBUZWxlcGhvbnkgYW5kIHBob25lYm9vawogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgZGVmIGRpYWxfbnVtYmVyKHNlbGYsIG51bWJlcik6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLm9wZW5fYXBwbGljYXRpb24oImNvbS5hbmRyb2lkLmRpYWxlci8uRGlhbHRhY3RzQWN0aXZpdHkgLS1hY3Rpdml0eS1jbGVhci10b3AiKQogICAgICAgICAgICBzZWxmLndhaXRfZm9yX3VpX2V4aXN0cygxNTAwLCByZXNvdXJjZUlkPSJjb20uYW5kcm9pZC5kaWFsZXI6aWQvZmxvYXRpbmdfYWN0aW9uX2J1dHRvbiIpCiAgICAgICAgICAgIHNlbGYuY2xpY2tfdWkocmVzb3VyY2VJZD0iY29tLmFuZHJvaWQuZGlhbGVyOmlkL2Zsb2F0aW5nX2FjdGlvbl9idXR0b24iKQogICAgICAgICAgICBzZWxmLnR5cGVfdGV4dChudW1iZXIsIHJlc291cmNlSWQ9ImNvbS5hbmRyb2lkLmRpYWxlcjppZC9kaWdpdHMiKQogICAgICAgICAgICB0aW1lLnNsZWVwKDEpCiAgICAgICAgICAgIHNlbGYuY2xpY2tfdWkocmVzb3VyY2VJZD0iY29tLmFuZHJvaWQuZGlhbGVyOmlkL2RpYWxwYWRfZmxvYXRpbmdfYWN0aW9uX2J1dHRvbiIpCiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKICAgICAgICAgICAgcHJpbnQgRXhjZXB0aW9uLCAiOiIsIGUKICAgICAgICAgICAgcHJpbnQgIkV4Y2VwdGlvbiBoYXBwZW5zIgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBkZWYgYWRkX25ld19jb250YWN0KHNlbGYsIG5hbWUsIG51bWJlcik6CiAgICAgICAgIiIiQWRkIGNvbnRhY3Qgd2l0aCBuYW1lIGFuZCBudW1iZXIiIiIKICAgICAgICBhZGRfYnRuID0gJ2NvbS5hbmRyb2lkLmNvbnRhY3RzOmlkL2Zsb2F0aW5nX2FjdGlvbl9idXR0b24nCiAgICAgICAgc2F2ZV9idG4gPSAnY29tLmFuZHJvaWQuY29udGFjdHM6aWQvc2F2ZV9tZW51X2l0ZW0nCiAgICAgICAgaWYgc2VsZi53YWl0X2Zvcl91aV9leGlzdHMoMTAwMCwgcmVzb3VyY2VJZD1hZGRfYnRuKToKICAgICAgICAgICAgc2VsZi5jbGlja191aShyZXNvdXJjZUlkPWFkZF9idG4pCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgaWYgc2VsZi53YWl0X2Zvcl91aV9leGlzdHMoMzAwLCB0ZXh0Q29udGFpbnM9J1lvdSBjYW4gc3luY2hyb25pemUgeW91cicpOgogICAgICAgICAgICBzZWxmLmNsaWNrX3RleHQoJ1BIT05FJykKICAgICAgICBzZWxmLndhaXRfZm9yX3VpX2V4aXN0cygxMDAwLCB0ZXh0PSdBZGQgbmV3IGNvbnRhY3QnKQogICAgICAgIHNlbGYudHlwZV90ZXh0KG5hbWUsIHRleHQ9J05hbWUnLCBjbGFzc05hbWU9J2FuZHJvaWQud2lkZ2V0LkVkaXRUZXh0JykKICAgICAgICBzZWxmLnR5cGVfdGV4dChudW1iZXIsIHRleHQ9J1Bob25lJywgY2xhc3NOYW1lPSdhbmRyb2lkLndpZGdldC5FZGl0VGV4dCcpCiAgICAgICAgc2VsZi5jbGlja191aShyZXNvdXJjZUlkPXNhdmVfYnRuKQoKICAgIGRlZiBkZWxldGVfY29udGFjdChzZWxmLCBuYW1lKToKICAgICAgICAiIiJkZWxldGUgY29udGFjdHMiIiIKICAgICAgICBsYXJnZV9pY29uID0gJ2NvbS5hbmRyb2lkLmNvbnRhY3RzOmlkL3Bob3RvX3RvdWNoX2ludGVyY2VwdF9vdmVybGF5JwogICAgICAgIGlmIHNlbGYuc2Nyb2xsX3RvX2ZpbmQodGV4dD1uYW1lKToKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIHNlbGYuY2xpY2tfdWkodGV4dD0iT0siKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIGRlZiB3YWl0X2FuZF9jb25uZWN0aW9uKHNlbGYsIHRpbWVvdXQ9OCk6CiAgICAgICAgIiIiV2FpdCA1IHNlY29uZHMgdG8gZW5kIGNhbGwgd2hlbiBjb25uZWN0ZWQuIiIiCiAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgICAgIHdoaWxlICh0aW1lLnRpbWUoKSAtIHN0YXJ0KSA8IGludCh0aW1lb3V0KToKICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5nZXRfY2FsbF9zdGF0dXMoKQogICAgICAgICAgICBwcmludCAnd2FpdF9hbmRfY29ubmVjdGlvbiBjYWxsIHN0YXR1czonLCBzdGF0dXMKICAgICAgICAgICAgaWYgc3RhdHVzID09ICcyJzoKICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZGVmIHdhaXRfZW5kX2NhbGwoc2VsZiwgdGltZW91dCA9IDQpOgogICAgICAgICIiIldhaXQgY2FsbCBlc3RhYmxpc2hlZCBhbmQgZW5kIGNhbGwgYWZ0ZXIgdGltZW91dCIiIgogICAgICAgIHRyeToKICAgICAgICAgICAgaWYgc2VsZi53YWl0X2FuZF9jb25uZWN0aW9uKDgpOgogICAgICAgICAgICAgICAgc2VsZi53YWl0X2Zvcl91aV9nb25lKDE1MDAwLCB0ZXh0Q29udGFpbnM9IkNhbGxpbmcgdmlhIikKICAgICAgICAgICAgICAgIHNlbGYubG9nbXNnKCJDYWxsaW5nIHZpYSBlbmQiKQogICAgICAgICAgICAgICAgc2VsZi53YWl0X2Zvcl91aV9leGlzdHMoODAwMCwgcmVzb3VyY2VJZD0nY29tLmFuZHJvaWQuZGlhbGVyOmlkL2VsYXBzZWRUaW1lJykKICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoaW50KHRpbWVvdXQpKQogICAgICAgICAgICAg"}}]
["f5ae8dea344374999d6b0dc93c2bc0ca2c6d74d8-2","f5ae8dea344374999d6b0dc93c2bc0ca2c6d74d8",{"$cut":{"chars":42984,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgpmcm9tIFVpQXV0b1Rlc3RMaWIgaW1wb3J0IFVpVGVzdExpYgpmcm9tIHJvYm90LmFwaSBpbXBvcnQgbG9nZ2VyCmZyb20gcm9ib3QubGlicmFyaWVzLkJ1aWx0SW4gaW1wb3J0IEJ1aWx0SW4KaW1wb3J0IHRpbWUKaW1wb3J0IHJlCmltcG9ydCByYW5kb20KCmNsYXNzIFVpS3BpVGVzdChVaVRlc3RMaWIpOgogICAgIiIiCiAgICBUZXN0IExpYiBmb3IgVWkgQXV0b21hdGlvbiB0ZXN0CiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBTZXJpYWwgPSBOb25lKToKICAgICAgICBVaVRlc3RMaWIuX19pbml0X18oc2VsZiwgU2VyaWFsKQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIwogICAgIyAgICAgICBUZWxlcGhvbnkgYW5kIHBob25lYm9vawogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgZGVmIGRpYWxfbnVtYmVyKHNlbGYsIG51bWJlcik6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLm9wZW5fYXBwbGljYXRpb24oImNvbS5hbmRyb2lkLmRpYWxlci8uRGlhbHRhY3RzQWN0aXZpdHkgLS1hY3Rpdml0eS1jbGVhci10b3AiKQogICAgICAgICAgICBzZWxmLndhaXRfZm9yX3VpX2V4aXN0cygxNTAwLCByZXNvdXJjZUlkPSJjb20uYW5kcm9pZC5kaWFsZXI6aWQvZmxvYXRpbmdfYWN0aW9uX2J1dHRvbiIpCiAgICAgICAgICAgIHNlbGYuY2xpY2tfdWkocmVzb3VyY2VJZD0iY29tLmFuZHJvaWQuZGlhbGVyOmlkL2Zsb2F0aW5nX2FjdGlvbl9idXR0b24iKQogICAgICAgICAgICBzZWxmLnR5cGVfdGV4dChudW1iZXIsIHJlc291cmNlSWQ9ImNvbS5hbmRyb2lkLmRpYWxlcjppZC9kaWdpdHMiKQogICAgICAgICAgICB0aW1lLnNsZWVwKDEpCiAgICAgICAgICAgIHNlbGYuY2xpY2tfdWkocmVzb3VyY2VJZD0iY29tLmFuZHJvaWQuZGlhbGVyOmlkL2RpYWxwYWRfZmxvYXRpbmdfYWN0aW9uX2J1dHRvbiIpCiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKICAgICAgICAgICAgcHJpbnQgRXhjZXB0aW9uLCAiOiIsIGUKICAgICAgICAgICAgcHJpbnQgIkV4Y2VwdGlvbiBoYXBwZW5zIgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBkZWYgYWRkX25ld19jb250YWN0KHNlbGYsIG5hbWUsIG51bWJlcik6CiAgICAgICAgIiIiQWRkIGNvbnRhY3Qgd2l0aCBuYW1lIGFuZCBudW1iZXIiIiIKICAgICAgICBhZGRfYnRuID0gJ2NvbS5hbmRyb2lkLmNvbnRhY3RzOmlkL2Zsb2F0aW5nX2FjdGlvbl9idXR0b24nCiAgICAgICAgc2F2ZV9idG4gPSAnY29tLmFuZHJvaWQuY29udGFjdHM6aWQvc2F2ZV9tZW51X2l0ZW0nCiAgICAgICAgaWYgc2VsZi53YWl0X2Zvcl91aV9leGlzdHMoMTAwMCwgcmVzb3VyY2VJZD1hZGRfYnRuKToKICAgICAgICAgICAgc2VsZi5jbGlja191aShyZXNvdXJjZUlkPWFkZF9idG4pCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgaWYgc2VsZi53YWl0X2Zvcl91aV9leGlzdHMoMzAwLCB0ZXh0Q29udGFpbnM9J1lvdSBjYW4gc3luY2hyb25pemUgeW91cicpOgogICAgICAgICAgICBzZWxmLmNsaWNrX3RleHQoJ1BIT05FJykKICAgICAgICBzZWxmLndhaXRfZm9yX3VpX2V4aXN0cygxMDAwLCB0ZXh0PSdBZGQgbmV3IGNvbnRhY3QnKQogICAgICAgIHNlbGYudHlwZV90ZXh0KG5hbWUsIHRleHQ9J05hbWUnLCBjbGFzc05hbWU9J2FuZHJvaWQud2lkZ2V0LkVkaXRUZXh0JykKICAgICAgICBzZWxmLnR5cGVfdGV4dChudW1iZXIsIHRleHQ9J1Bob25lJywgY2xhc3NOYW1lPSdhbmRyb2lkLndpZGdldC5FZGl0VGV4dCcpCiAgICAgICAgc2VsZi5jbGlja191aShyZXNvdXJjZUlkPXNhdmVfYnRuKQoKICAgIGRlZiBkZWxldGVfY29udGFjdChzZWxmLCBuYW1lKToKICAgICAgICAiIiJkZWxldGUgY29udGFjdHMiIiIKICAgICAgICBsYXJnZV9pY29uID0gJ2NvbS5hbmRyb2lkLmNvbnRhY3RzOmlkL3Bob3RvX3RvdWNoX2ludGVyY2VwdF9vdmVybGF5JwogICAgICAgIGlmIHNlbGYuc2Nyb2xsX3RvX2ZpbmQodGV4dD1uYW1lKToKICAgICAgICAgICAgc2VsZi5jbGlja191aSh0ZXh0PW5hbWUpCiAgICAgICAgICAgIHNlbGYud2FpdF9mb3JfdWlfZXhpc3RzKDEwMDAsIHJlc291cmNlSWQ9bGFyZ2VfaWNvbikKICAgICAgICAgICAgc2VsZi5wcmVzc19rZXkoJ21lbnUnKQogICAgICAgICAgICBzZWxmLmNsaWNrX3VpKHRleHQ9J0RlbGV0ZScpCiAgICAgICAgICAgIHNlbGYuY2xpY2tfdWkodGV4dD0iT0siKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIGRlZiB3YWl0X2FuZF9jb25uZWN0aW9uKHNlbGYsIHRpbWVvdXQ9OCk6CiAgICAgICAgIiIiV2FpdCA1IHNlY29uZHMgdG8gZW5kIGNhbGwgd2hlbiBjb25uZWN0ZWQuIiIiCiAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgICAgIHdoaWxlICh0aW1lLnRpbWUoKSAtIHN0YXJ0KSA8IGludCh0aW1lb3V0KToKICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5nZXRfY2FsbF9zdGF0dXMoKQogICAgICAgICAgICBwcmludCAnd2FpdF9hbmRfY29ubmVjdGlvbiBjYWxsIHN0YXR1czonLCBzdGF0dXMKICAgICAgICAgICAgaWYgc3RhdHVzID09ICcyJzoKICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZGVmIHdhaXRfZW5kX2NhbGwoc2VsZiwgdGltZW91dCA9IDQpOgogICAgICAgICIiIldhaXQgY2FsbCBlc3RhYmxpc2hlZCBhbmQgZW5kIGNhbGwgYWZ0ZXIgdGltZW91dCIiIgogICAgICAgIHRyeToKICAgICAgICAgICAgaWYgc2VsZi53YWl0X2FuZF9jb25uZWN0aW9uKDgpOgogICAgICAgICAgICAgICAgc2VsZi53YWl0X2Zvcl91aV9nb25lKDE1MDAwLCB0ZXh0Q29udGFpbnM9IkNhbGxpbmcgdmlhIikKICAgICAgICAgICAgICAgIHNlbGYubG9nbXNnKCJD"}}]
["f5ae8dea344374999d6b0dc93c2bc0ca2c6d74d8-3","f5ae8dea344374999d6b0dc93c2bc0ca2c6d74d8",{"$cut":{"chars":67152,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgpmcm9tIFVpQXV0b1Rlc3RMaWIgaW1wb3J0IFVpVGVzdExpYgpmcm9tIHJvYm90LmFwaSBpbXBvcnQgbG9nZ2VyCmZyb20gcm9ib3QubGlicmFyaWVzLkJ1aWx0SW4gaW1wb3J0IEJ1aWx0SW4KaW1wb3J0IHRpbWUKaW1wb3J0IHJlCmltcG9ydCByYW5kb20KCmNsYXNzIFVpS3BpVGVzdChVaVRlc3RMaWIpOgogICAgIiIiCiAgICBUZXN0IExpYiBmb3IgVWkgQXV0b21hdGlvbiB0ZXN0CiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBTZXJpYWwgPSBOb25lKToKICAgICAgICBVaVRlc3RMaWIuX19pbml0X18oc2VsZiwgU2VyaWFsKQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIwogICAgIyAgICAgICBUZWxlcGhvbnkgYW5kIHBob25lYm9vawogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgZGVmIGRpYWxfbnVtYmVyKHNlbGYsIG51bWJlcik6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLm9wZW5fYXBwbGljYXRpb24oImNvbS5hbmRyb2lkLmRpYWxlci8uRGlhbHRhY3RzQWN0aXZpdHkgLS1hY3Rpdml0eS1jbGVhci10b3AiKQogICAgICAgICAgICBzZWxmLndhaXRfZm9yX3VpX2V4aXN0cygxNTAwLCByZXNvdXJjZUlkPSJjb20uYW5kcm9pZC5kaWFsZXI6aWQvZmxvYXRpbmdfYWN0aW9uX2J1dHRvbiIpCiAgICAgICAgICAgIHNlbGYuY2xpY2tfdWkocmVzb3VyY2VJZD0iY29tLmFuZHJvaWQuZGlhbGVyOmlkL2Zsb2F0aW5nX2FjdGlvbl9idXR0b24iKQogICAgICAgICAgICBzZWxmLnR5cGVfdGV4dChudW1iZXIsIHJlc291cmNlSWQ9ImNvbS5hbmRyb2lkLmRpYWxlcjppZC9kaWdpdHMiKQogICAgICAgICAgICB0aW1lLnNsZWVwKDEpCiAgICAgICAgICAgIHNlbGYuY2xpY2tfdWkocmVzb3VyY2VJZD0iY29tLmFuZHJvaWQuZGlhbGVyOmlkL2RpYWxwYWRfZmxvYXRpbmdfYWN0aW9uX2J1dHRvbiIpCiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKICAgICAgICAgICAgcHJpbnQgRXhjZXB0aW9uLCAiOiIsIGUKICAgICAgICAgICAgcHJpbnQgIkV4Y2VwdGlvbiBoYXBwZW5zIgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBkZWYgYWRkX25ld19jb250YWN0KHNlbGYsIG5hbWUsIG51bWJlcik6CiAgICAgICAgIiIiQWRkIGNvbnRhY3Qgd2l0aCBuYW1lIGFuZCBudW1iZXIiIiIKICAgICAgICBhZGRfYnRuID0gJ2NvbS5hbmRyb2lkLmNvbnRhY3RzOmlkL2Zsb2F0aW5nX2FjdGlvbl9idXR0b24nCiAgICAgICAgc2F2ZV9idG4gPSAnY29tLmFuZHJvaWQuY29udGFjdHM6aWQvc2F2ZV9tZW51X2l0ZW0nCiAgICAgICAgaWYgc2VsZi53YWl0X2Zvcl91aV9leGlzdHMoMTAwMCwgcmVzb3VyY2VJZD1hZGRfYnRuKToKICAgICAgICAgICAgc2VsZi5jbGlja191aShyZXNvdXJjZUlkPWFkZF9idG4pCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgaWYgc2VsZi53YWl0X2Zvcl91aV9leGlzdHMoMzAwLCB0ZXh0Q29udGFpbnM9J1lvdSBjYW4gc3luY2hyb25pemUgeW91cicpOgogICAgICAgICAgICBzZWxmLmNsaWNrX3RleHQoJ1BIT05FJykKICAgICAgICBzZWxmLndhaXRfZm9yX3VpX2V4aXN0cygxMDAwLCB0ZXh0PSdBZGQgbmV3IGNvbnRhY3QnKQogICAgICAgIHNlbGYudHlwZV90ZXh0KG5hbWUsIHRleHQ9J05hbWUnLCBjbGFzc05hbWU9J2FuZHJvaWQud2lkZ2V0LkVkaXRUZXh0JykKICAgICAgICBzZWxmLnR5cGVfdGV4dChudW1iZXIsIHRleHQ9J1Bob25lJywgY2xhc3NOYW1lPSdhbmRyb2lkLndpZGdldC5FZGl0VGV4dCcpCiAgICAgICAgc2VsZi5jbGlja191aShyZXNvdXJjZUlkPXNhdmVfYnRuKQoKICAgIGRlZiBkZWxldGVfY29udGFjdChzZWxmLCBuYW1lKToKICAgICAgICAiIiJkZWxldGUgY29udGFjdHMiIiIKICAgICAgICBsYXJnZV9pY29uID0gJ2NvbS5hbmRyb2lkLmNvbnRhY3RzOmlkL3Bob3RvX3RvdWNoX2ludGVyY2VwdF9vdmVybGF5JwogICAgICAgIGlmIHNlbGYuc2Nyb2xsX3RvX2ZpbmQodGV4dD1uYW1lKToKICAgICAgICAgICAgc2VsZi5jbGlja191aSh0ZXh0PW5hbWUpCiAgICAgICAgICAgIHNlbGYud2FpdF9mb3JfdWlfZXhpc3RzKDEwMDAsIHJlc291cmNlSWQ9bGFyZ2VfaWNvbikKICAgICAgICAgICAgc2VsZi5wcmVzc19rZXkoJ21lbnUnKQogICAgICAgICAgICBzZWxmLmNsaWNrX3VpKHRleHQ9J0RlbGV0ZScpCiAgICAgICAgICAgIHNlbGYuY2xpY2tfdWkodGV4dD0iT0siKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIGRlZiB3YWl0X2FuZF9jb25uZWN0aW9uKHNlbGYsIHRpbWVvdXQ9OCk6CiAgICAgICAgIiIiV2FpdCA1IHNlY29uZHMgdG8gZW5kIGNhbGwgd2hlbiBjb25uZWN0ZWQuIiIiCiAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgICAgIHdoaWxlICh0aW1lLnRpbWUoKSAtIHN0YXJ0KSA8IGludCh0aW1lb3V0KToKICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5nZXRfY2FsbF9zdGF0dXMoKQogICAgICAgICAgICBwcmludCAnd2FpdF9hbmRfY29ubmVjdGlvbiBjYWxsIHN0YXR1czonLCBzdGF0dXMKICAgICAgICAgICAgaWYgc3RhdHVzID09ICcyJzoKICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZGVmIHdhaXRfZW5kX2NhbGwoc2VsZiwgdGltZW91dCA9IDQpOgogICAgICAgICIiIldhaXQgY2FsbCBlc3RhYmxpc2hlZCBhbmQgZW5kIGNhbGwgYWZ0ZXIgdGltZW91dCIiIgogICAgICAgIHRyeToKICAgICAgICAgICAgaWYgc2VsZi53YWl0X2FuZF9jb25uZWN0aW9uKDgpOgogICAgICAgICAgICAgICAgc2VsZi53YWl0X2Zvcl91aV9nb25lKDE1MDAwLCB0ZXh0Q29udGFpbnM9IkNhbGxpbmcgdmlhIikKICAgICAgICAgICAgICAgIHNlbGYubG9nbXNnKCJD"}}]
["f5ae8dea344374999d6b0dc93c2bc0ca2c6d74d8-4","f5ae8dea344374999d6b0dc93c2bc0ca2c6d74d8",{"$cut":{"chars":30164,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgpmcm9tIFVpQXV0b1Rlc3RMaWIgaW1wb3J0IFVpVGVzdExpYgpmcm9tIHJvYm90LmFwaSBpbXBvcnQgbG9nZ2VyCmZyb20gcm9ib3QubGlicmFyaWVzLkJ1aWx0SW4gaW1wb3J0IEJ1aWx0SW4KaW1wb3J0IHRpbWUKaW1wb3J0IHJlCmltcG9ydCByYW5kb20KCmNsYXNzIFVpS3BpVGVzdChVaVRlc3RMaWIpOgogICAgIiIiCiAgICBUZXN0IExpYiBmb3IgVWkgQXV0b21hdGlvbiB0ZXN0CiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBTZXJpYWwgPSBOb25lKToKICAgICAgICBVaVRlc3RMaWIuX19pbml0X18oc2VsZiwgU2VyaWFsKQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIwogICAgIyAgICAgICBUZWxlcGhvbnkgYW5kIHBob25lYm9vawogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgZGVmIGRpYWxfbnVtYmVyKHNlbGYsIG51bWJlcik6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLm9wZW5fYXBwbGljYXRpb24oImNvbS5hbmRyb2lkLmRpYWxlci8uRGlhbHRhY3RzQWN0aXZpdHkgLS1hY3Rpdml0eS1jbGVhci10b3AiKQogICAgICAgICAgICBzZWxmLndhaXRfZm9yX3VpX2V4aXN0cygxNTAwLCByZXNvdXJjZUlkPSJjb20uYW5kcm9pZC5kaWFsZXI6aWQvZmxvYXRpbmdfYWN0aW9uX2J1dHRvbiIpCiAgICAgICAgICAgIHNlbGYuY2xpY2tfdWkocmVzb3VyY2VJZD0iY29tLmFuZHJvaWQuZGlhbGVyOmlkL2Zsb2F0aW5nX2FjdGlvbl9idXR0b24iKQogICAgICAgICAgICBzZWxmLnR5cGVfdGV4dChudW1iZXIsIHJlc291cmNlSWQ9ImNvbS5hbmRyb2lkLmRpYWxlcjppZC9kaWdpdHMiKQogICAgICAgICAgICB0aW1lLnNsZWVwKDEpCiAgICAgICAgICAgIHNlbGYuY2xpY2tfdWkocmVzb3VyY2VJZD0iY29tLmFuZHJvaWQuZGlhbGVyOmlkL2RpYWxwYWRfZmxvYXRpbmdfYWN0aW9uX2J1dHRvbiIpCiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKICAgICAgICAgICAgcHJpbnQgRXhjZXB0aW9uLCAiOiIsIGUKICAgICAgICAgICAgcHJpbnQgIkV4Y2VwdGlvbiBoYXBwZW5zIgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBkZWYgYWRkX25ld19jb250YWN0KHNlbGYsIG5hbWUsIG51bWJlcik6CiAgICAgICAgIiIiQWRkIGNvbnRhY3Qgd2l0aCBuYW1lIGFuZCBudW1iZXIiIiIKICAgICAgICBhZGRfYnRuID0gJ2NvbS5hbmRyb2lkLmNvbnRhY3RzOmlkL2Zsb2F0aW5nX2FjdGlvbl9idXR0b24nCiAgICAgICAgc2F2ZV9idG4gPSAnY29tLmFuZHJvaWQuY29udGFjdHM6aWQvc2F2ZV9tZW51X2l0ZW0nCiAgICAgICAgaWYgc2VsZi53YWl0X2Zvcl91aV9leGlzdHMoMTAwMCwgcmVzb3VyY2VJZD1hZGRfYnRuKToKICAgICAgICAgICAgc2VsZi5jbGlja191aShyZXNvdXJjZUlkPWFkZF9idG4pCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgaWYgc2VsZi53YWl0X2Zvcl91aV9leGlzdHMoMzAwLCB0ZXh0Q29udGFpbnM9J1lvdSBjYW4gc3luY2hyb25pemUgeW91cicpOgogICAgICAgICAgICBzZWxmLmNsaWNrX3RleHQoJ1BIT05FJykKICAgICAgICBzZWxmLndhaXRfZm9yX3VpX2V4aXN0cygxMDAwLCB0ZXh0PSdBZGQgbmV3IGNvbnRhY3QnKQogICAgICAgIHNlbGYudHlwZV90ZXh0KG5hbWUsIHRleHQ9J05hbWUnLCBjbGFzc05hbWU9J2FuZHJvaWQud2lkZ2V0LkVkaXRUZXh0JykKICAgICAgICBzZWxmLnR5cGVfdGV4dChudW1iZXIsIHRleHQ9J1Bob25lJywgY2xhc3NOYW1lPSdhbmRyb2lkLndpZGdldC5FZGl0VGV4dCcpCiAgICAgICAgc2VsZi5jbGlja191aShyZXNvdXJjZUlkPXNhdmVfYnRuKQoKICAgIGRlZiBkZWxldGVfY29udGFjdChzZWxmLCBuYW1lKToKICAgICAgICAiIiJkZWxldGUgY29udGFjdHMiIiIKICAgICAgICBsYXJnZV9pY29uID0gJ2NvbS5hbmRyb2lkLmNvbnRhY3RzOmlkL3Bob3RvX3RvdWNoX2ludGVyY2VwdF9vdmVybGF5JwogICAgICAgIGlmIHNlbGYuc2Nyb2xsX3RvX2ZpbmQodGV4dD1uYW1lKToKICAgICAgICAgICAgc2VsZi5jbGlja191aSh0ZXh0PW5hbWUpCiAgICAgICAgICAgIHNlbGYud2FpdF9mb3JfdWlfZXhpc3RzKDEwMDAsIHJlc291cmNlSWQ9bGFyZ2VfaWNvbikKICAgICAgICAgICAgc2VsZi5wcmVzc19rZXkoJ21lbnUnKQogICAgICAgICAgICBzZWxmLmNsaWNrX3VpKHRleHQ9J0RlbGV0ZScpCiAgICAgICAgICAgIHNlbGYuY2xpY2tfdWkodGV4dD0iT0siKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIGRlZiB3YWl0X2FuZF9jb25uZWN0aW9uKHNlbGYsIHRpbWVvdXQ9OCk6CiAgICAgICAgIiIiV2FpdCA1IHNlY29uZHMgdG8gZW5kIGNhbGwgd2hlbiBjb25uZWN0ZWQuIiIiCiAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgICAgIHdoaWxlICh0aW1lLnRpbWUoKSAtIHN0YXJ0KSA8IGludCh0aW1lb3V0KToKICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5nZXRfY2FsbF9zdGF0dXMoKQogICAgICAgICAgICBwcmludCAnd2FpdF9hbmRfY29ubmVjdGlvbiBjYWxsIHN0YXR1czonLCBzdGF0dXMKICAgICAgICAgICAgaWYgc3RhdHVzID09ICcyJzoKICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZGVmIHdhaXRfZW5kX2NhbGwoc2VsZiwgdGltZW91dCA9IDQpOgogICAgICAgICIiIldhaXQgY2FsbCBlc3RhYmxpc2hlZCBhbmQgZW5kIGNhbGwgYWZ0ZXIgdGltZW91dCIiIgogICAgICAgIHRyeToKICAgICAgICAgICAgaWYgc2VsZi53YWl0X2FuZF9jb25uZWN0aW9uKDgpOgogICAgICAgICAgICAgICAgc2VsZi53YWl0X2Zvcl91aV9nb25lKDE1MDAwLCB0ZXh0Q29udGFpbnM9IkNhbGxpbmcgdmlhIikKICAgICAgICAgICAgICAgIHNlbGYubG9nbXNnKCJD"}}]
["f5ae8dea344374999d6b0dc93c2bc0ca2c6d74d8-5","f5ae8dea344374999d6b0dc93c2bc0ca2c6d74d8",{"$cut":{"chars":39836,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgpmcm9tIFVpQXV0b1Rlc3RMaWIgaW1wb3J0IFVpVGVzdExpYgpmcm9tIHJvYm90LmFwaSBpbXBvcnQgbG9nZ2VyCmZyb20gcm9ib3QubGlicmFyaWVzLkJ1aWx0SW4gaW1wb3J0IEJ1aWx0SW4KaW1wb3J0IHRpbWUKaW1wb3J0IHJlCmltcG9ydCByYW5kb20KCmNsYXNzIFVpS3BpVGVzdChVaVRlc3RMaWIpOgogICAgIiIiCiAgICBUZXN0IExpYiBmb3IgVWkgQXV0b21hdGlvbiB0ZXN0CiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBTZXJpYWwgPSBOb25lKToKICAgICAgICBVaVRlc3RMaWIuX19pbml0X18oc2VsZiwgU2VyaWFsKQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIwogICAgIyAgICAgICBUZWxlcGhvbnkgYW5kIHBob25lYm9vawogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgZGVmIGRpYWxfbnVtYmVyKHNlbGYsIG51bWJlcik6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLm9wZW5fYXBwbGljYXRpb24oImNvbS5hbmRyb2lkLmRpYWxlci8uRGlhbHRhY3RzQWN0aXZpdHkgLS1hY3Rpdml0eS1jbGVhci10b3AiKQogICAgICAgICAgICBzZWxmLndhaXRfZm9yX3VpX2V4aXN0cygxNTAwLCByZXNvdXJjZUlkPSJjb20uYW5kcm9pZC5kaWFsZXI6aWQvZmxvYXRpbmdfYWN0aW9uX2J1dHRvbiIpCiAgICAgICAgICAgIHNlbGYuY2xpY2tfdWkocmVzb3VyY2VJZD0iY29tLmFuZHJvaWQuZGlhbGVyOmlkL2Zsb2F0aW5nX2FjdGlvbl9idXR0b24iKQogICAgICAgICAgICBzZWxmLnR5cGVfdGV4dChudW1iZXIsIHJlc291cmNlSWQ9ImNvbS5hbmRyb2lkLmRpYWxlcjppZC9kaWdpdHMiKQogICAgICAgICAgICB0aW1lLnNsZWVwKDEpCiAgICAgICAgICAgIHNlbGYuY2xpY2tfdWkocmVzb3VyY2VJZD0iY29tLmFuZHJvaWQuZGlhbGVyOmlkL2RpYWxwYWRfZmxvYXRpbmdfYWN0aW9uX2J1dHRvbiIpCiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKICAgICAgICAgICAgcHJpbnQgRXhjZXB0aW9uLCAiOiIsIGUKICAgICAgICAgICAgcHJpbnQgIkV4Y2VwdGlvbiBoYXBwZW5zIgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBkZWYgYWRkX25ld19jb250YWN0KHNlbGYsIG5hbWUsIG51bWJlcik6CiAgICAgICAgIiIiQWRkIGNvbnRhY3Qgd2l0aCBuYW1lIGFuZCBudW1iZXIiIiIKICAgICAgICBhZGRfYnRuID0gJ2NvbS5hbmRyb2lkLmNvbnRhY3RzOmlkL2Zsb2F0aW5nX2FjdGlvbl9idXR0b24nCiAgICAgICAgc2F2ZV9idG4gPSAnY29tLmFuZHJvaWQuY29udGFjdHM6aWQvc2F2ZV9tZW51X2l0ZW0nCiAgICAgICAgaWYgc2VsZi53YWl0X2Zvcl91aV9leGlzdHMoMTAwMCwgcmVzb3VyY2VJZD1hZGRfYnRuKToKICAgICAgICAgICAgc2VsZi5jbGlja191aShyZXNvdXJjZUlkPWFkZF9idG4pCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgaWYgc2VsZi53YWl0X2Zvcl91aV9leGlzdHMoMzAwLCB0ZXh0Q29udGFpbnM9J1lvdSBjYW4gc3luY2hyb25pemUgeW91cicpOgogICAgICAgICAgICBzZWxmLmNsaWNrX3RleHQoJ1BIT05FJykKICAgICAgICBzZWxmLndhaXRfZm9yX3VpX2V4aXN0cygxMDAwLCB0ZXh0PSdBZGQgbmV3IGNvbnRhY3QnKQogICAgICAgIHNlbGYudHlwZV90ZXh0KG5hbWUsIHRleHQ9J05hbWUnLCBjbGFzc05hbWU9J2FuZHJvaWQud2lkZ2V0LkVkaXRUZXh0JykKICAgICAgICBzZWxmLnR5cGVfdGV4dChudW1iZXIsIHRleHQ9J1Bob25lJywgY2xhc3NOYW1lPSdhbmRyb2lkLndpZGdldC5FZGl0VGV4dCcpCiAgICAgICAgc2VsZi5jbGlja191aShyZXNvdXJjZUlkPXNhdmVfYnRuKQoKICAgIGRlZiBkZWxldGVfY29udGFjdChzZWxmLCBuYW1lKToKICAgICAgICAiIiJkZWxldGUgY29udGFjdHMiIiIKICAgICAgICBsYXJnZV9pY29uID0gJ2NvbS5hbmRyb2lkLmNvbnRhY3RzOmlkL3Bob3RvX3RvdWNoX2ludGVyY2VwdF9vdmVybGF5JwogICAgICAgIGlmIHNlbGYuc2Nyb2xsX3RvX2ZpbmQodGV4dD1uYW1lKToKICAgICAgICAgICAgc2VsZi5jbGlja191aSh0ZXh0PW5hbWUpCiAgICAgICAgICAgIHNlbGYud2FpdF9mb3JfdWlfZXhpc3RzKDEwMDAsIHJlc291cmNlSWQ9bGFyZ2VfaWNvbikKICAgICAgICAgICAgc2VsZi5wcmVzc19rZXkoJ21lbnUnKQogICAgICAgICAgICBzZWxmLmNsaWNrX3VpKHRleHQ9J0RlbGV0ZScpCiAgICAgICAgICAgIHNlbGYuY2xpY2tfdWkodGV4dD0iT0siKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIGRlZiB3YWl0X2FuZF9jb25uZWN0aW9uKHNlbGYsIHRpbWVvdXQ9OCk6CiAgICAgICAgIiIiV2FpdCA1IHNlY29uZHMgdG8gZW5kIGNhbGwgd2hlbiBjb25uZWN0ZWQuIiIiCiAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgICAgIHdoaWxlICh0aW1lLnRpbWUoKSAtIHN0YXJ0KSA8IGludCh0aW1lb3V0KToKICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5nZXRfY2FsbF9zdGF0dXMoKQogICAgICAgICAgICBwcmludCAnd2FpdF9hbmRfY29ubmVjdGlvbiBjYWxsIHN0YXR1czonLCBzdGF0dXMKICAgICAgICAgICAgaWYgc3RhdHVzID09ICcyJzoKICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZGVmIHdhaXRfZW5kX2NhbGwoc2VsZiwgdGltZW91dCA9IDQpOgogICAgICAgICIiIldhaXQgY2FsbCBlc3RhYmxpc2hlZCBhbmQgZW5kIGNhbGwgYWZ0ZXIgdGltZW91dCIiIgogICAgICAgIHRyeToKICAgICAgICAgICAgaWYgc2VsZi53YWl0X2FuZF9jb25uZWN0aW9uKDgpOgogICAgICAgICAgICAgICAgc2VsZi53YWl0X2Zvcl91aV9nb25lKDE1MDAwLCB0ZXh0Q29udGFpbnM9IkNhbGxpbmcgdmlhIikKICAgICAgICAgICAgICAgIHNlbGYubG9nbXNnKCJD"}}]
["8456d13246a2fd5858ce90f5a4d5b2e789c9fb7d-1","8456d13246a2fd5858ce90f5a4d5b2e789c9fb7d","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmRlZiB0ZXN0X2hlYWx0aGNoZWNrKCkgLT4gTm9uZToKICAgIGZyb20gYm90LmJvdCBpbXBvcnQgaGVhbHRoY2hlY2sKICAgIGFzc2VydCBoZWFsdGhjaGVjaygpID09ICdPSycKPHxmaW1fZW5kfD4="]
["8456d13246a2fd5858ce90f5a4d5b2e789c9fb7d-2","8456d13246a2fd5858ce90f5a4d5b2e789c9fb7d","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIHRlc3RfaGVhbHRoY2hlY2soKSAtPiBOb25lOgogICAgZnJvbSBib3QuYm90IGltcG9ydCBoZWFsdGhjaGVjawogICAgYXNzZXJ0IGhlYWx0aGNoZWNrKCkgPT0gJ09LJwo8fGZpbV9lbmR8Pg=="]
["8456d13246a2fd5858ce90f5a4d5b2e789c9fb7d-3","8456d13246a2fd5858ce90f5a4d5b2e789c9fb7d","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIHRlc3RfaGVhbHRoY2hlY2soKSAtPiBOb25lOgogICAgZnJvbSBib3QuYm90IGltcG9ydCBoZWFsdGhjaGVjawogICAgYXNzZXJ0IGhlYWx0aGNoZWNrKCkgPT0gJ09LJwo8fGZpbV9lbmR8Pg=="]
["8456d13246a2fd5858ce90f5a4d5b2e789c9fb7d-4","8456d13246a2fd5858ce90f5a4d5b2e789c9fb7d","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIHRlc3RfaGVhbHRoY2hlY2soKSAtPiBOb25lOgogICAgZnJvbSBib3QuYm90IGltcG9ydCBoZWFsdGhjaGVjawogICAgYXNzZXJ0IGhlYWx0aGNoZWNrKCkgPT0gJ09LJwo8fGZpbV9lbmR8Pg=="]
["5fb40d8f5e091012fd02909a902ea5986b87f721-1","5fb40d8f5e091012fd02909a902ea5986b87f721","PHxmaW1fcHJlZml4fD4KIyBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIGNyZWF0ZSBtb2R1bGVzIGFuZCB3ZSB3aWxsIHVzZSBpdCBmb3IgdGhlIGltcG9ydCBtb2R1bGVzIGFuZCBwYWNrYWdlcyBmaWxlICYgdmlydHVhbCBlbnZpb3JubWVudCBmaWxlIGFzIHdlbGwKZnJvbSBwaXAuX3ZlbmRvci5jb2xvcmFtYSBpbXBvcnQgaW5pdCwgRm9yZQpkZWYgZGlzcGxheShtc2csIGlzX3dhcm5pbmc9RmFsc2UpOgogICAgaWYgaXNfd2FybmluZzoKICAgICAgICBwcmludChGb3JlLlJFRCArIG1zZykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZWxzZToKICAgICAgICBwcmludChGb3JlLkdSRUVOICsgbXNnKQo8fGZpbV9lbmR8Pg=="]
["5fb40d8f5e091012fd02909a902ea5986b87f721-2","5fb40d8f5e091012fd02909a902ea5986b87f721","PHxmaW1fcHJlZml4fD4KIyBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIGNyZWF0ZSBtb2R1bGVzIGFuZCB3ZSB3aWxsIHVzZSBpdCBmb3IgdGhlIGltcG9ydCBtb2R1bGVzIGFuZCBwYWNrYWdlcyBmaWxlICYgdmlydHVhbCBlbnZpb3JubWVudCBmaWxlIGFzIHdlbGwKZnJvbSBwaXAuX3ZlbmRvci5jb2xvcmFtYSBpbXBvcnQgaW5pdCwgRm9yZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRlZiBkaXNwbGF5KG1zZywgaXNfd2FybmluZz1GYWxzZSk6CiAgICBpZiBpc193YXJuaW5nOgogICAgICAgIHByaW50KEZvcmUuUkVEICsgbXNnKQogICAgZWxzZToKPHxmaW1fZW5kfD4="]
["5fb40d8f5e091012fd02909a902ea5986b87f721-3","5fb40d8f5e091012fd02909a902ea5986b87f721","PHxmaW1fcHJlZml4fD4KIyBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIGNyZWF0ZSBtb2R1bGVzIGFuZCB3ZSB3aWxsIHVzZSBpdCBmb3IgdGhlIGltcG9ydCBtb2R1bGVzIGFuZCBwYWNrYWdlcyBmaWxlICYgdmlydHVhbCBlbnZpb3JubWVudCBmaWxlIGFzIHdlbGwKZnJvbSBwaXAuX3ZlbmRvci5jb2xvcmFtYSBpbXBvcnQgaW5pdCwgRm9yZQpkZWYgZGlzcGxheShtc2csIGlzX3dhcm5pbmc9RmFsc2UpOgogICAgaWYgaXNfd2FybmluZzoKPHxmaW1faG9sZXw+CiAgICBlbHNlOgogICAgICAgIHByaW50KEZvcmUuR1JFRU4gKyBtc2cpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcHJpbnQoRm9yZS5SRUQgKyBtc2cpCjx8ZmltX2VuZHw+"]
["5fb40d8f5e091012fd02909a902ea5986b87f721-4","5fb40d8f5e091012fd02909a902ea5986b87f721","PHxmaW1fcHJlZml4fD4KIyBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIGNyZWF0ZSBtb2R1bGVzIGFuZCB3ZSB3aWxsIHVzZSBpdCBmb3IgdGhlIGltcG9ydCBtb2R1bGVzIGFuZCBwYWNrYWdlcyBmaWxlICYgdmlydHVhbCBlbnZpb3JubWVudCBmaWxlIGFzIHdlbGwKZnJvbSBwaXAuX3ZlbmRvci5jb2xvcmFtYSBpbXBvcnQgaW5pdCwgRm9yZQpkZWYgZGlzcGxheShtc2csIGlzX3dhcm5pbmc9RmFsc2UpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBpZiBpc193YXJuaW5nOgogICAgICAgIHByaW50KEZvcmUuUkVEICsgbXNnKQogICAgZWxzZToKICAgICAgICBwcmludChGb3JlLkdSRUVOICsgbXNnKQo8fGZpbV9lbmR8Pg=="]
["5fb40d8f5e091012fd02909a902ea5986b87f721-5","5fb40d8f5e091012fd02909a902ea5986b87f721","PHxmaW1fcHJlZml4fD4KIyBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIGNyZWF0ZSBtb2R1bGVzIGFuZCB3ZSB3aWxsIHVzZSBpdCBmb3IgdGhlIGltcG9ydCBtb2R1bGVzIGFuZCBwYWNrYWdlcyBmaWxlICYgdmlydHVhbCBlbnZpb3JubWVudCBmaWxlIGFzIHdlbGwKZnJvbSBwaXAuX3ZlbmRvci5jb2xvcmFtYSBpbXBvcnQgaW5pdCwgRm9yZQo8fGZpbV9ob2xlfD4KICAgICAgICBwcmludChGb3JlLkdSRUVOICsgbXNnKQo8fGZpbV9zdWZmaXh8PgpkZWYgZGlzcGxheShtc2csIGlzX3dhcm5pbmc9RmFsc2UpOgogICAgaWYgaXNfd2FybmluZzoKICAgICAgICBwcmludChGb3JlLlJFRCArIG1zZykKICAgIGVsc2U6Cjx8ZmltX2VuZHw+"]
["ef59044b558b77e23f4913f62dd1ed72b1cb09c2-1","ef59044b558b77e23f4913f62dd1ed72b1cb09c2","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGxvZ2dpbmcKCmZyb20gcmVzdF9mcmFtZXdvcmsuYXV0aGVudGljYXRpb24gaW1wb3J0IFNlc3Npb25BdXRoZW50aWNhdGlvbgpmcm9tIHJlc3RfZnJhbWV3b3JrLnBlcm1pc3Npb25zIGltcG9ydCBJc0F1dGhlbnRpY2F0ZWQsIEJhc2VQZXJtaXNzaW9uCmZyb20gcmVzdF9mcmFtZXdvcmsudGhyb3R0bGluZyBpbXBvcnQgU2ltcGxlUmF0ZVRocm90dGxlCmZyb20gcmVzdF9mcmFtZXdvcmsudmlld3MgaW1wb3J0IEFQSVZpZXcKCmZyb20gYXV0aG11bHRpdG9rZW4uYXV0aGVudGljYXRpb24gaW1wb3J0IE11bHRpVG9rZW5BdXRoZW50aWNhdGlvbgoKCmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCmNsYXNzIFRva2VuUmF0ZVRocm90dGxlKFNpbXBsZVJhdGVUaHJvdHRsZSk6CiAgICAiIiIKICAgIExpbWl0cyB0aGUgcmF0ZSBvZiBBUEkgY2FsbHMgdGhhdCBtYXkgYmUgbWFkZSBieSBhIGdpdmVuIHVzZXIuCiAgICBUaGUgdXNlcidzIHRva2VuIHdpbGwgYmUgdXNlZCBhcyBhIHVuaXF1ZSBjYWNoZSBrZXkgaWYgdGhlIHVzZXIgaGFzIG9uZTsKICAgIGZhaWxpbmcgdGhhdCB0aGUgdXNlcidzIHVzZXIgSUQgd2lsbCBiZSB1c2VkOyBmb3IgYW5vbnltb3VzIHJlcXVlc3RzLAogICAgdGhlIElQIGFkZHJlc3Mgb2YgdGhlIHJlcXVlc3Qgd2lsbCBiZSB1c2VkLgoKICAgIFRocm90dGxpbmcgcmF0ZSBzZXQgaW4gc2V0dGluZ3MucHkKICAgICIiIgogICAgc2NvcGUgPSAnYXBpX3Rva2VuJwoKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIGlkZW50ID0gcmVxdWVzdC51c2VyLnBrCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWRlbnQgPSBzZWxmLmdldF9pZGVudChyZXF1ZXN0KQoKICAgICAgICByZXR1cm4gc2VsZi5jYWNoZV9mb3JtYXQgJSB7CiAgICAgICAgICAgICdzY29wZSc6IHNlbGYuc2NvcGUsCiAgICAgICAgICAgICdpZGVudCc6IGlkZW50CiAgICAgICAgfQoKCmNsYXNzIEJ1cnN0VG9rZW5SYXRlKFRva2VuUmF0ZVRocm90dGxlKToKICAgIHNjb3BlID0gJ3Rva2VuX2J1cnN0JwoKCmNsYXNzIFN1c3RhaW5lZFRva2VuUmF0ZShUb2tlblJhdGVUaHJvdHRsZSk6CiAgICBzY29wZSA9ICd0b2tlbl9zdXN0YWluZWQnCgoKY2xhc3MgQWNjZXB0ZWRUQ3MoQmFzZVBlcm1pc3Npb24pOgogICAgbWVzc2FnZSA9ICdUZXJtcyBhbmQgQ29uZGl0aW9ucyBub3QgeWV0IGFjY2VwdGVkJwoKICAgIGRlZiBoYXNfcGVybWlzc2lvbihzZWxmLCByZXF1ZXN0LCB2aWV3KToKICAgICAgICByZXR1cm4gKGhhc2F0dHIocmVxdWVzdC51c2VyLCAnc21hcnRjYW1icmlkZ2VfdXNlcicpIGFuZAogICAgICAgICAgICAgICAgcmVxdWVzdC51c2VyLnNtYXJ0Y2FtYnJpZGdlX3VzZXIuYWNjZXB0ZWRfdGNzKQoKCmRlZmF1bHRfYXV0aGVudGljYXRpb24gPSAoTXVsdGlUb2tlbkF1dGhlbnRpY2F0aW9uLCBTZXNzaW9uQXV0aGVudGljYXRpb24pCmRlZmF1bHRfcGVybWlzc2lvbiA9IChJc0F1dGhlbnRpY2F0ZWQsIEFjY2VwdGVkVENzKQpkZWZhdWx0X3Rocm90dGxlID0gKEJ1cnN0VG9rZW5SYXRlLCBTdXN0YWluZWRUb2tlblJhdGUsKQoKCmNsYXNzIEF1dGhlbnRpY2F0ZWRkQVBJVmlldyhBUElWaWV3KToKICAgICcnJwogICAgQSBBUElWaWVyIHN1YmNsYXNzIHRoYXQgZGVmYXVsdHMgYXV0aG4vYXV0aHovdGhyb3R0bGluZwogICAgJycnCiAgICBhdXRoZW50aWNhdGlvbl9jbGFzc2VzID0gZGVmYXVsdF9hdXRoZW50aWNhdGlvbgogICAgcGVybWlzc2lvbl9jbGFzc2VzID0gZGVmYXVsdF9wZXJtaXNzaW9uCiAgICB0aHJvdHRsZV9jbGFzc2VzID0gZGVmYXVsdF90aHJvdHRsZQoKICAgIGRlZiBpbml0aWFsKHNlbGYsIHJlcXVlc3QsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgJycnIEhvb2sgaW5pdGlhbCgpIHRvIGxvZyBhdXRoZW50aWNhdGVkIHJlcXVlc3RzICcnJwogICAgICAgIHN1cGVyKCkuaW5pdGlhbChyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpCiAgICAgICAgbmFtZSA9IHJlcXVlc3QuYXV0aC5uYW1lIGlmIHJlcXVlc3QuYXV0aCBpcyBub3QgTm9uZSBlbHNlICcnCiAgICAgICAgbG9nZ2VyLmluZm8oCiAgICAgICAgICAgICdBVVRIOiB8JXN8JXN8JXN8JywKICAgICAgICAgICAgcmVxdWVzdC5wYXRoLAogICAgICAgICAgICByZXF1ZXN0LnVzZXIuZ2V0X3VzZXJuYW1lKCksCiAgICAgICAgICAgIG5hbWUKICAgICAgICApCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgZ2V0X2NhY2hlX2tleShzZWxmLCByZXF1ZXN0LCB2aWV3KToKICAgICAgICBpZiByZXF1ZXN0LmF1dGggaXMgbm90IE5vbmU6CiAgICAgICAgICAgIGlkZW50ID0gcmVxdWVzdC5hdXRoLmRpZ2VzdAogICAgICAgIGVsaWYgcmVxdWVzdC51c2VyLmlzX2F1dGhlbnRpY2F0ZWQ6Cjx8ZmltX2VuZHw+"]
["f25239244260314f1ccaf0a23cec94bd2e7a449e-1","f25239244260314f1ccaf0a23cec94bd2e7a449e","PHxmaW1fcHJlZml4fD4KJycnc291cmNlIGZpbmRlciBkb2MKCmN1cnJlbnRseSwgY3J1c2ggdXNlcyBuZW1vIGxpYnJhcnkgKGh0dHBzOi8vZ2l0aHViLmNvbS9zaW1vbnNvYnMvbmVtbykgdG8gc2VhcmNoIGZvciBwb2ludCBzb3VyY2VzIGluIG1hcHMgdXNpbmcKcmVhbC1zcGFjZSBtYXRjaGVkIGZpbHRlci4gdGhlcmVmb3JlLCB0aGlzIG1vZHVsZSBpcyBkZXNpZ25lZCB0byBoYW5kbGUgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gY3J1c2ggYW5kIG5lbW8uCmhhdmluZyBzYWlkIHRoYXQsIHRoZXJlIGlzIG5lY2Vzc2FyeSBmb3IgY3J1c2ggdG8gdXNlIG5lbW8gZXhjbHVzaXZlbHkuIGluIHRoZSBmdXR1cmUgcmVsZWFzZSwgd2Ugd291bGQgbGlrZSB0byBtYWtlCnRoaXMgbW9kdWx1cyBzbyB0aGF0IHdlIGNhbiBwbHVnIGluIGFueSBhbHRlcm5hdGl2ZSBzb3VyY2UgZmluZGVyIGxpYnJhcmllcy4KCicnJwoKaW1wb3J0IHlhbWwKCnRyeToKICAgIGltcG9ydCBuZW1vCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgIHBhc3MKCgpjbGFzcyBTb3VyY2VGaW5kZXIob2JqZWN0KToKICAgICIiIgogICAgZGVmaW5lIHRoZSB0b3AgbGV2ZWwgYXBpIGZvciBhbnkgU291cmNlRmluZGVyIGNsYXNzIGFuZCBzdWJjbGFzcy4gYW55IHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHNvdXJjZWZpbmRlcgogICAgY2xhc3NlcyBzaG91bGQgaW5oZXJpdCBmcm9tIHRoaXMgY2xhc3MuCiAgICAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgcGFzcwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKY2xhc3MgTmVtbyhTb3VyY2VGaW5kZXIpOgogICAgIiIiCjx8ZmltX2VuZHw+"]
["842ac5b9555cfe6d3e617c29f1f7977fec1a4a0b-1","842ac5b9555cfe6d3e617c29f1f7977fec1a4a0b","PHxmaW1fcHJlZml4fD4KCiMgQ29weXJpZ2h0IChDKSAyMDE0IC0gT3NjYXIgQ2FtcG9zIDxvc2Nhci5jYW1wb3NAbWVtYmVyLmZzZi5vcmc+CiMgVGhpcyBwcm9ncmFtIGlzIEZyZWUgU29mdHdhcmUgc2VlIExJQ0VOU0UgZmlsZSBmb3IgZGV0YWlscwoKaW1wb3J0IHN1YmxpbWUKaW1wb3J0IHN1YmxpbWVfcGx1Z2luCgpmcm9tIC4uYW5hY29uZGFfbGliIGltcG9ydCB3b3JrZXIsIGNhbGxiYWNrCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpjbGFzcyBBbmFjb25kYUJhc2VCdWlsZChvYmplY3QpOgogICAgIiIiQmFzZSBjbGFzcyBmb3IgYWxsIGFuYWNvbmRhIGJ1aWxkZXJzCiAgICAiIiIKCjx8ZmltX2VuZHw+"]
["842ac5b9555cfe6d3e617c29f1f7977fec1a4a0b-2","842ac5b9555cfe6d3e617c29f1f7977fec1a4a0b","PHxmaW1fcHJlZml4fD4KCiMgQ29weXJpZ2h0IChDKSAyMDE0IC0gT3NjYXIgQ2FtcG9zIDxvc2Nhci5jYW1wb3NAbWVtYmVyLmZzZi5vcmc+CiMgVGhpcyBwcm9ncmFtIGlzIEZyZWUgU29mdHdhcmUgc2VlIExJQ0VOU0UgZmlsZSBmb3IgZGV0YWlscwoKaW1wb3J0IHN1YmxpbWUKaW1wb3J0IHN1YmxpbWVfcGx1Z2luCgpmcm9tIC4uYW5hY29uZGFfbGliIGltcG9ydCB3b3JrZXIsIGNhbGxiYWNrCgoKY2xhc3MgQW5hY29uZGFCYXNlQnVpbGQob2JqZWN0KToKICAgICIiIkJhc2UgY2xhc3MgZm9yIGFsbCBhbmFjb25kYSBidWlsZGVycwogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4ZWN1dGFibGUsICpwYXJhbXMpOgogICAgICAgIHNlbGYuYnVmZmVyID0gIiIKPHxmaW1faG9sZXw+CmNsYXNzIEFuYWNvbmRhUHl0aG9uQnVpbGQoc3VibGltZV9wbHVnaW4uVGV4dENvbW1hbmQpOgogICAgIiIiQnVpbGQgdGhlIGN1cnJlbnQgYnVmZmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIHB5dGhvbiBpbnRlcnByZXRlcgogICAgIiIiCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5leGVjdXRhYmxlID0gZXhlY3V0YWJsZQogICAgICAgIHNlbGYucGFyYW1zID0gcGFyYW1zCgoKPHxmaW1fZW5kfD4="]
["842ac5b9555cfe6d3e617c29f1f7977fec1a4a0b-3","842ac5b9555cfe6d3e617c29f1f7977fec1a4a0b","PHxmaW1fcHJlZml4fD4KCiMgQ29weXJpZ2h0IChDKSAyMDE0IC0gT3NjYXIgQ2FtcG9zIDxvc2Nhci5jYW1wb3NAbWVtYmVyLmZzZi5vcmc+CiMgVGhpcyBwcm9ncmFtIGlzIEZyZWUgU29mdHdhcmUgc2VlIExJQ0VOU0UgZmlsZSBmb3IgZGV0YWlscwoKaW1wb3J0IHN1YmxpbWUKaW1wb3J0IHN1YmxpbWVfcGx1Z2luCgpmcm9tIC4uYW5hY29uZGFfbGliIGltcG9ydCB3b3JrZXIsIGNhbGxiYWNrCgoKY2xhc3MgQW5hY29uZGFCYXNlQnVpbGQob2JqZWN0KToKICAgICIiIkJhc2UgY2xhc3MgZm9yIGFsbCBhbmFjb25kYSBidWlsZGVycwogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4ZWN1dGFibGUsICpwYXJhbXMpOgogICAgICAgIHNlbGYuYnVmZmVyID0gIiIKICAgICAgICBzZWxmLmV4ZWN1dGFibGUgPSBleGVjdXRhYmxlCiAgICAgICAgc2VsZi5wYXJhbXMgPSBwYXJhbXMKPHxmaW1faG9sZXw+CiAgICAiIiIKPHxmaW1fc3VmZml4fD4KCgpjbGFzcyBBbmFjb25kYVB5dGhvbkJ1aWxkKHN1YmxpbWVfcGx1Z2luLlRleHRDb21tYW5kKToKICAgICIiIkJ1aWxkIHRoZSBjdXJyZW50IGJ1ZmZlciB1c2luZyB0aGUgY29uZmlndXJlZCBweXRob24gaW50ZXJwcmV0ZXIKPHxmaW1fZW5kfD4="]
["3987fe583a241649feed3010d77c19cd6373b974-1","3987fe583a241649feed3010d77c19cd6373b974","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAoKZG9jMnZlY19yZXN1bHQgPSBwZC5yZWFkX2NzdigicmVzdWx0XFxkb2MydmVjLmNzdiIsIGhlYWRlciA9IDApCmJvd19yZXN1bHQgPSBwZC5yZWFkX2NzdigicmVzdWx0XFxCT1dfY2hpX3RmaWRmLmNzdiIsIGhlYWRlciA9IDApCgpudW1fcmV2aWV3cyA9IGJvd19yZXN1bHRbImlkIl0uc2l6ZQoKPHxmaW1faG9sZXw+CmZvciBpIGluIHJhbmdlKG51bV9yZXZpZXdzKToKICAgIHNjb3JlID0gKGRvYzJ2ZWNfcmVzdWx0WyJzZW50aW1lbnQiXVtpXSArIGJvd19yZXN1bHRbInNlbnRpbWVudCJdW2ldKSAvIDIuMAogICAgb3V0LndyaXRlKGRvYzJ2ZWNfcmVzdWx0WyJpZCJdW2ldICsgIiwiICsgc3RyKHNjb3JlKSArICJcbiIpCm91dC5jbG9zZSgpCjx8ZmltX3N1ZmZpeHw+Cm91dCA9IG9wZW4oInJlc3VsdFxcZW5zZW1ibGVfY29tYmluZS5jc3YiLCAndycpCm91dC53cml0ZSgiXCJpZFwiIiArICIsIiArICJcInNlbnRpbWVudFwiIikKb3V0LndyaXRlKCJcbiIpCgo8fGZpbV9lbmR8Pg=="]
["3987fe583a241649feed3010d77c19cd6373b974-2","3987fe583a241649feed3010d77c19cd6373b974","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAoKZG9jMnZlY19yZXN1bHQgPSBwZC5yZWFkX2NzdigicmVzdWx0XFxkb2MydmVjLmNzdiIsIGhlYWRlciA9IDApCmJvd19yZXN1bHQgPSBwZC5yZWFkX2NzdigicmVzdWx0XFxCT1dfY2hpX3RmaWRmLmNzdiIsIGhlYWRlciA9IDApCjx8ZmltX2VuZHw+"]
["3987fe583a241649feed3010d77c19cd6373b974-3","3987fe583a241649feed3010d77c19cd6373b974","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpkb2MydmVjX3Jlc3VsdCA9IHBkLnJlYWRfY3N2KCJyZXN1bHRcXGRvYzJ2ZWMuY3N2IiwgaGVhZGVyID0gMCkKYm93X3Jlc3VsdCA9IHBkLnJlYWRfY3N2KCJyZXN1bHRcXEJPV19jaGlfdGZpZGYuY3N2IiwgaGVhZGVyID0gMCkKCm51bV9yZXZpZXdzID0gYm93X3Jlc3VsdFsiaWQiXS5zaXplCjx8ZmltX2VuZHw+"]
["3987fe583a241649feed3010d77c19cd6373b974-4","3987fe583a241649feed3010d77c19cd6373b974","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhbmRhcyBhcyBwZAoKZG9jMnZlY19yZXN1bHQgPSBwZC5yZWFkX2NzdigicmVzdWx0XFxkb2MydmVjLmNzdiIsIGhlYWRlciA9IDApCmJvd19yZXN1bHQgPSBwZC5yZWFkX2NzdigicmVzdWx0XFxCT1dfY2hpX3RmaWRmLmNzdiIsIGhlYWRlciA9IDApCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCm51bV9yZXZpZXdzID0gYm93X3Jlc3VsdFsiaWQiXS5zaXplCgpvdXQgPSBvcGVuKCJyZXN1bHRcXGVuc2VtYmxlX2NvbWJpbmUuY3N2IiwgJ3cnKQo8fGZpbV9lbmR8Pg=="]
["f291cc66b13ac0a3a64cae157d436f07cd05b0e8-1","f291cc66b13ac0a3a64cae157d436f07cd05b0e8","PHxmaW1fcHJlZml4fD4KJycnCkNyZWF0ZWQgb24gMTIgRmViIDIwMTQKCkBhdXRob3I6IHBldGVyYgonJycKaW1wb3J0IGxvZ2dpbmcKZnJvbSBibHVlc2hlZC51dGlscy51dGlscyBpbXBvcnQgbG9hZHMsIGR1bXBzCmZyb20gYmx1ZXNoZWQuaGFuZGxlcnMuYmFzZV9oYW5kbGVyIGltcG9ydCBCYXNlSGFuZGxlcgpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAoKCmNsYXNzIFJlc3RIYW5kbGVyKEJhc2VIYW5kbGVyKToKICAgICIiIgogICAgICAgIFNpbXBsZSByZXN0IGhhbmxkZXIgd2l0aCAgbm8gYXV0aGVudGljYXRpb24KICAgICAgICB0aGF0IGV4cGVjdHMgdGhlIGZlY3RoX2FuZF9jYXJyeSBtaXhpbiB0byBiZQogICAgICAgIG1peGVkIGludG8gdGhlIGNvbnRyb2wKICAgICIiIgogICAgCiAgICAgCiAgICBkZWYgcHJlcGFyZShzZWxmKToKICAgICAgICBpZiBzZWxmLnJlcXVlc3QuaGVhZGVycy5nZXQoIkNvbnRlbnQtVHlwZSIpID09ICJhcHBsaWNhdGlvbi9qc29uIiBhbmQgXAogICAgICAgICAgICBzZWxmLnJlcXVlc3QuYm9keToKICAgICAgICAgICAgc2VsZi5qc29uX2FyZ3MgPSBsb2FkcyhzdHIoc2VsZi5yZXF1ZXN0LmJvZHksZW5jb2Rpbmc9IlVURi04IikpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5qc29uX2FyZ3MgPSBOb25lCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgIGRlZiByZXF1aXJlX2pzb25fY29udGVudChzZWxmKToKICAgICAgICBpZiBzZWxmLnJlcXVlc3QuaGVhZGVycy5nZXQoIkNvbnRlbnQtVHlwZSIpICE9ICJhcHBsaWNhdGlvbi9qc29uIjoKICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb250ZW50LVR5cGUgJ2FwcGxpY2F0aW9uL2pzb24nIHJlcXVpcmVkIikKICAgIAogICAgCiAgICBkZWYgZ2V0KHNlbGYsIHJlc291cmNlX3BhdGgpOgogICAgICAgICIiIgogICAgICAgICAgICBHZXQgZ29lcyB0byBmZXRjaF9hbmRfY2FycnlfbWl4aW4gZmV0Y2ggb3IgcmV0dXJucyB0aGUgbWV0YSBkYXRhCiAgICAgICAgIiIiCiAgICAgICAgbG9nZ2luZy5pbmZvKCJnZXQgJXMiLHJlc291cmNlX3BhdGgpCiAgICAgICAgaWYgcmVzb3VyY2VfcGF0aCBpcyBOb25lIG9yIHJlc291cmNlX3BhdGggaXMgIiI6CiAgICAgICAgICAgIHNlbGYud3JpdGUoT3JkZXJlZERpY3QoWwogICAgICAgICAgICAgICAgKCJ0YXJnZXQiLCAicmVzdC1hcGkiKSwKICAgICAgICAgICAgICAgICgidmVyc2lvbiIsIDEpLAogICAgICAgICAgICAgICAgKCJwb3N0X21ldGhvZHMiLCBzZWxmLmNvbnRyb2wuX2ZjX21ldGhvZHMpLAogICAgICAgICAgICAgICAgKCJtb2RlbCIsIHNlbGYuY29udHJvbC5fZmNfZGVzY3JpcHRpb24pCiAgICAgICAgICAgIF0pKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHJlc291cmNlcyA9IHJlc291cmNlX3BhdGguc3BsaXQoIi8iKQogICAgICAgICAgICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZXNbMF0KICAgICAgICAgICAgICAgIGlkID0gcmVzb3VyY2VzWzFdIGlmIGxlbihyZXNvdXJjZXMpID4gMSBlbHNlIE5vbmUKICAgICAgICAgICAgICAgIGxpbWl0ID0gaW50KHNlbGYuZ2V0X2FyZ3VtZW50KCJsaW1pdCIsIDEwKSkKICAgICAgICAgICAgICAgIG9mZnNldCA9IGludChzZWxmLmdldF9hcmd1bWVudCgib2Zmc2V0IiwgMCkpCiAgICAgICAgICAgICAgICBhdHRyID0gc2VsZi5nZXRfYXJndW1lbnQoImF0dHIiLCBOb25lKQogICAgICAgICAgICAgICAgZmlsdGVyID0gc2VsZi5nZXRfYXJndW1lbnQoImZpbHRlciIsIE5vbmUpCiAgICAgICAgICAgICAgICBtYXRjaCA9IHNlbGYuZ2V0X2FyZ3VtZW50KCJtYXRjaCIsIE5vbmUpCiAgICAgICAgICAgICAgICBvcmRlcl9ieSA9IHNlbGYuZ2V0X2FyZ3VtZW50KCJvcmRlcl9ieSIsIE5vbmUpCiAgICAgICAgICAgICAgICBvcmRlcl9ieV9hc2MgPSBzZWxmLmdldF9hcmd1bWVudCgib3JkZXJfYnlfYXNjIiwgJ2ZhbHNlJykubG93ZXIoKSA9PSAidHJ1ZSIKICAgICAgICAgICAgICAgIGRlcHRoID0gaW50KHNlbGYuZ2V0X2FyZ3VtZW50KCJkZXB0aCIsIDApKQogICAgICAgICAgICAgICAgaWdub3JlID0gc2VsZi5nZXRfYXJndW1lbnQoImlnbm9yZSIsTm9uZSkKICAgICAgICAgICAgICAgIGluY2x1ZGUgPSBzZWxmLmdldF9hcmd1bWVudCgiaW5jbHVkZSIsTm9uZSkKICAgICAgICAgICAgICAgIGlmIGlnbm9yZToKICAgICAgICAgICAgICAgICAgICBpZ25vcmUgPSBpZ25vcmUuc3BsaXQoIiwiKQogICAgICAgICAgICAgICAgaWYgaW5jbHVkZToKICAgICAgICAgICAgICAgICAgICBpbmNsdWRlID0gaW5jbHVkZS5zcGxpdCgiLCIpCiAgICAgICAgICAgICAgICByZXN1bHQgPSB7InJlc3VsdCI6IHNlbGYuY29udHJvbC5mZXRjaCgxLHJlc291cmNlLGlkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHI9YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcj1maWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaD1tYXRjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0PWxpbWl0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD1vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcl9ieT1vcmRlcl9ieSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyX2J5X2FzYz1vcmRlcl9ieV9hc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aD1kZXB0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZT1pZ25vcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlPWluY2x1ZGUpfQogICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgogICAgICAgICAgICAgICAgcmVzdWx0ID0geyJlcnJvciI6IHN0cihleCl9CiAgICAgICAgICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbihleCkKICAgICAgICAgICAgc2VsZi5zZXRfaGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCIpCiAgICAgICAgICAgIHNlbGYud3JpdGUoZHVtcHMocmVzdWx0KSkKICAgICAgICAKICAgIAogICAgZGVmIHBvc3Qoc2VsZixyZXNvdXJjZV9wYXRoKToKICAgICAgICAiIiIKICAgICAgICAgICAgUG9zdCBjYWxscyBwdWJsaWMgbWV0aG9kcyBvbiB0aGUgY29udHJvbAogICAgICAgICIiIgogICAgICAgIHNlbGYucmVxdWlyZV9qc29uX2NvbnRlbnQoKQo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZyhyZXNvdXJjZV9wYXRoKQogICAgICAgICAgICBhcmdzID0gc2VsZi5qc29uX2FyZ3Mgb3Ige30KICAgICAgICAgICAgCiAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoc2VsZi5jb250cm9sLCBhY3Rpb24pCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgcmVzdWx0ID0gbWV0aG9kKHNlbGYuY3VycmVudF91c2VyLCAqKmFyZ3MpCiAgICAgICAgICAgIHNlbGYud3JpdGUoZHVtcHMoeyJyZXN1bHQiOiByZXN1bHR9LGluZGVudD0yKSkKICAgICAgICAgICAgc2VsZi5jb250cm9sLl9mbHVzaCgpCiAgICAgICAgICAgIAogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6CiAgICAgICAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKGV4KQogICAgICAgICAgICBlcnJvciA9IHN0cihleCkKICAgICAgICAgICAgc2VsZi53cml0ZShkdW1wcyh7InJlc3VsdCI6IE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciIgOiBlcnJvciB9LGluZGVudD0yKSkKICAgICAgICAgICAgc2VsZi5jb250cm9sLl9mbHVzaChleCkKICAgICAgICAgICAgCiAgICAgICAgCiAgICBkZWYgcHV0KHNlbGYscmVzb3VyY2VfcGF0aCk6CiAgICAgICAgIiIiCiAgICAgICAgICAgIFB1dCBnb2VzIHRvIGZldGNoX2FuZF9jYXJyeV9taXhpbiBjYXJyeQogICAgICAgICIiIgogICAgICAgIHNlbGYucmVxdWlyZV9qc29uX2NvbnRlbnQoKQogICAgICAgIGxvZ2dpbmcuaW5mbygicHV0ICVzIC0gJXMiLHJlc291cmNlX3BhdGgsIHNlbGYuanNvbl9hcmdzKQogICAgICAgIHRyeToKICAgICAgICAgICAgcmVzb3VyY2VzID0gcmVzb3VyY2VfcGF0aC5zcGxpdCgiLyIpCiAgICAgICAgICAgIHJlc291cmNlID0gcmVzb3VyY2VzWzBdCiAgICAgICAgICAgIGlkID0gaW50KHJlc291cmNlc1sxXSkgaWYgbGVuKHJlc291cmNlcykgPiAxIGVsc2UgTm9uZQogICAgICAgICAgICBhcmdzID0gc2VsZi5qc29uX2FyZ3MKICAgICAgICAgICAgaXRlbSA9IGFyZ3MuZ2V0KCJpdGVtIikKICAgICAgICAgICAgaWYgaXRlbSBpcyBOb25lOgogICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJqc29uIHBheWxvYWQ6IHtpdGVtOm9iaiwgKHRvX2FkZDpbYXR0cix0eXBlLGlkXV0pLCAodG9fcmVtb3ZlOlthdHRyLHR5cGUsaWRdXSl9IikKICAgICAgICAgICAgaWYgaXRlbS5nZXQoIl90eXBlIikgaXMgTm9uZSBhbmQgcmVzb3VyY2UgaW4gW05vbmUsIiJdOgogICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJObyByZXNvdXJjZSBzcGVjaWZpZWQiKQogICAgICAgICAgICBpZiBpdGVtLmdldCgiX3R5cGUiKSBpcyBOb25lOgogICAgICAgICAgICAgICAgaXRlbVsiX3R5cGUiXSA9IHJlc291cmNlCiAgICAgICAgICAgIHJlc3VsdCA9IHsicmVzdWx0Ijogc2VsZi5jb250cm9sLmNhcnJ5KHNlbGYuZ2V0X2N1cnJlbnRfdXNlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5nZXQoInRvX2FkZCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmdldCgidG9fcmVtb3ZlIikpLCAiYWN0aW9uIjogInNhdmVkIiB9CiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleDoKICAgICAgICAgICAgcmVzdWx0ID0geyJlcnJvciI6IHN0cihleCl9CiAgICAgICAgICAgIHNlbGYuY29udHJvbC5fZmx1c2goZXgpCiAgICAgICAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKGV4KQogICAgICAgIHNlbGYuc2V0X2hlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgiKQogICAgICAgIHNlbGYud3JpdGUoZHVtcHMocmVzdWx0KSkKICAgICAgICBzZWxmLmNvbnRyb2wuX2ZsdXNoKCkKICAgICAgICAKICAgICAgICAKICAgIGRlZiBkZWxldGUoc2VsZiwgcmVzb3VyY2VfcGF0aCk6CiAgICAgICAgIiIiCiAgICAgICAgICAgIFB1dCBnb2VzIHRvIGZldGNoX2FuZF9jYXJyeV9taXhpbiBjYXJyeQogICAgICAgICIiIgogICAgICAgIHNlbGYucmVxdWlyZV9qc29uX2NvbnRlbnQoKQogICAgICAgIGxvZ2dpbmcuaW5mbygiZGVsZXRlICVzIixyZXNvdXJjZV9wYXRoKQogICAgICAgIHRyeToKICAgICAgICAgICAgcmVzb3VyY2VzID0gcmVzb3VyY2VfcGF0aC5zcGxpdCgiLyIpCiAgICAgICAgICAgIHJlc291cmNlID0gcmVzb3VyY2VzWzBdCiAgICAgICAgICAgIGlkID0gaW50KHJlc291cmNlc1sxXSkKICAgICAgICAgICAgcmVzdWx0ID0geyJyZXN1bHQiOiBzZWxmLmNvbnRyb2wuY2FycnkoMSx7ImlkIjotaWQsIl90eXBlIjpyZXNvdXJjZX0pICwgImFjdGlvbiI6ICJkZWxldGVkIn0KICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgogICAgICAgICAgICByZXN1bHQgPSB7ImVycm9yIjogc3RyKGV4KX0KICAgICAgICAgICAgbG9nZ2luZy5leGNlcHRpb24oZXgpCiAgICAgICAgc2VsZi5zZXRfaGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCIpCiAgICAgICAgc2VsZi53cml0ZShkdW1wcyhyZXN1bHQpKQogICAgICAgIAogICAgCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgbG9nZ2luZy5pbmZvKCJwb3N0ICVzIC0gJXMiLHJlc291cmNlX3BhdGgsIHNlbGYuanNvbl9hcmdzKQogICAgICAgIHJlc291cmNlcyA9IHJlc291cmNlX3BhdGguc3BsaXQoIi8iKQogICAgICAgIGFjdGlvbiA9IHJlc291cmNlc1swXQogICAgICAgIHRyeToKPHxmaW1fZW5kfD4="]
["f291cc66b13ac0a3a64cae157d436f07cd05b0e8-2","f291cc66b13ac0a3a64cae157d436f07cd05b0e8","PHxmaW1fcHJlZml4fD4KJycnCkNyZWF0ZWQgb24gMTIgRmViIDIwMTQKCkBhdXRob3I6IHBldGVyYgonJycKaW1wb3J0IGxvZ2dpbmcKZnJvbSBibHVlc2hlZC51dGlscy51dGlscyBpbXBvcnQgbG9hZHMsIGR1bXBzCmZyb20gYmx1ZXNoZWQuaGFuZGxlcnMuYmFzZV9oYW5kbGVyIGltcG9ydCBCYXNlSGFuZGxlcgpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAoKCmNsYXNzIFJlc3RIYW5kbGVyKEJhc2VIYW5kbGVyKToKICAgICIiIgogICAgICAgIFNpbXBsZSByZXN0IGhhbmxkZXIgd2l0aCAgbm8gYXV0aGVudGljYXRpb24KICAgICAgICB0aGF0IGV4cGVjdHMgdGhlIGZlY3RoX2FuZF9jYXJyeSBtaXhpbiB0byBiZQogICAgICAgIG1peGVkIGludG8gdGhlIGNvbnRyb2wKICAgICIiIgogICAgCiAgICAgCiAgICBkZWYgcHJlcGFyZShzZWxmKToKICAgICAgICBpZiBzZWxmLnJlcXVlc3QuaGVhZGVycy5nZXQoIkNvbnRlbnQtVHlwZSIpID09ICJhcHBsaWNhdGlvbi9qc29uIiBhbmQgXAogICAgICAgICAgICBzZWxmLnJlcXVlc3QuYm9keToKICAgICAgICAgICAgc2VsZi5qc29uX2FyZ3MgPSBsb2FkcyhzdHIoc2VsZi5yZXF1ZXN0LmJvZHksZW5jb2Rpbmc9IlVURi04IikpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5qc29uX2FyZ3MgPSBOb25lCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgIGRlZiByZXF1aXJlX2pzb25fY29udGVudChzZWxmKToKICAgICAgICBpZiBzZWxmLnJlcXVlc3QuaGVhZGVycy5nZXQoIkNvbnRlbnQtVHlwZSIpICE9ICJhcHBsaWNhdGlvbi9qc29uIjoKICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb250ZW50LVR5cGUgJ2FwcGxpY2F0aW9uL2pzb24nIHJlcXVpcmVkIikKICAgIAogICAgCiAgICBkZWYgZ2V0KHNlbGYsIHJlc291cmNlX3BhdGgpOgogICAgICAgICIiIgogICAgICAgICAgICBHZXQgZ29lcyB0byBmZXRjaF9hbmRfY2FycnlfbWl4aW4gZmV0Y2ggb3IgcmV0dXJucyB0aGUgbWV0YSBkYXRhCiAgICAgICAgIiIiCiAgICAgICAgbG9nZ2luZy5pbmZvKCJnZXQgJXMiLHJlc291cmNlX3BhdGgpCiAgICAgICAgaWYgcmVzb3VyY2VfcGF0aCBpcyBOb25lIG9yIHJlc291cmNlX3BhdGggaXMgIiI6CiAgICAgICAgICAgIHNlbGYud3JpdGUoT3JkZXJlZERpY3QoWwogICAgICAgICAgICAgICAgKCJ0YXJnZXQiLCAicmVzdC1hcGkiKSwKICAgICAgICAgICAgICAgICgidmVyc2lvbiIsIDEpLAogICAgICAgICAgICAgICAgKCJwb3N0X21ldGhvZHMiLCBzZWxmLmNvbnRyb2wuX2ZjX21ldGhvZHMpLAogICAgICAgICAgICAgICAgKCJtb2RlbCIsIHNlbGYuY29udHJvbC5fZmNfZGVzY3JpcHRpb24pCiAgICAgICAgICAgIF0pKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHJlc291cmNlcyA9IHJlc291cmNlX3BhdGguc3BsaXQoIi8iKQogICAgICAgICAgICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZXNbMF0KICAgICAgICAgICAgICAgIGlkID0gcmVzb3VyY2VzWzFdIGlmIGxlbihyZXNvdXJjZXMpID4gMSBlbHNlIE5vbmUKICAgICAgICAgICAgICAgIGxpbWl0ID0gaW50KHNlbGYuZ2V0X2FyZ3VtZW50KCJsaW1pdCIsIDEwKSkKICAgICAgICAgICAgICAgIG9mZnNldCA9IGludChzZWxmLmdldF9hcmd1bWVudCgib2Zmc2V0IiwgMCkpCiAgICAgICAgICAgICAgICBhdHRyID0gc2VsZi5nZXRfYXJndW1lbnQoImF0dHIiLCBOb25lKQogICAgICAgICAgICAgICAgZmlsdGVyID0gc2VsZi5nZXRfYXJndW1lbnQoImZpbHRlciIsIE5vbmUpCiAgICAgICAgICAgICAgICBtYXRjaCA9IHNlbGYuZ2V0X2FyZ3VtZW50KCJtYXRjaCIsIE5vbmUpCiAgICAgICAgICAgICAgICBvcmRlcl9ieSA9IHNlbGYuZ2V0X2FyZ3VtZW50KCJvcmRlcl9ieSIsIE5vbmUpCiAgICAgICAgICAgICAgICBvcmRlcl9ieV9hc2MgPSBzZWxmLmdldF9hcmd1bWVudCgib3JkZXJfYnlfYXNjIiwgJ2ZhbHNlJykubG93ZXIoKSA9PSAidHJ1ZSIKICAgICAgICAgICAgICAgIGRlcHRoID0gaW50KHNlbGYuZ2V0X2FyZ3VtZW50KCJkZXB0aCIsIDApKQogICAgICAgICAgICAgICAgaWdub3JlID0gc2VsZi5nZXRfYXJndW1lbnQoImlnbm9yZSIsTm9uZSkKICAgICAgICAgICAgICAgIGluY2x1ZGUgPSBzZWxmLmdldF9hcmd1bWVudCgiaW5jbHVkZSIsTm9uZSkKICAgICAgICAgICAgICAgIGlmIGlnbm9yZToKICAgICAgICAgICAgICAgICAgICBpZ25vcmUgPSBpZ25vcmUuc3BsaXQoIiwiKQogICAgICAgICAgICAgICAgaWYgaW5jbHVkZToKICAgICAgICAgICAgICAgICAgICBpbmNsdWRlID0gaW5jbHVkZS5zcGxpdCgiLCIpCiAgICAgICAgICAgICAgICByZXN1bHQgPSB7InJlc3VsdCI6IHNlbGYuY29udHJvbC5mZXRjaCgxLHJlc291cmNlLGlkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHI9YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcj1maWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaD1tYXRjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0PWxpbWl0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD1vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcl9ieT1vcmRlcl9ieSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyX2J5X2FzYz1vcmRlcl9ieV9hc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aD1kZXB0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZT1pZ25vcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlPWluY2x1ZGUpfQogICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgogICAgICAgICAgICAgICAgcmVzdWx0ID0geyJlcnJvciI6IHN0cihleCl9CiAgICAgICAgICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbihleCkKICAgICAgICAgICAgc2VsZi5zZXRfaGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCIpCiAgICAgICAgICAgIHNlbGYud3JpdGUoZHVtcHMocmVzdWx0KSkKICAgICAgICAKICAgIAogICAgZGVmIHBvc3Qoc2VsZixyZXNvdXJjZV9wYXRoKToKICAgICAgICAiIiIKICAgICAgICAgICAgUG9zdCBjYWxscyBwdWJsaWMgbWV0aG9kcyBvbiB0aGUgY29udHJvbAogICAgICAgICIiIgogICAgICAgIHNlbGYucmVxdWlyZV9qc29uX2NvbnRlbnQoKQogICAgICAgIGxvZ2dpbmcuaW5mbygicG9zdCAlcyAtICVzIixyZXNvdXJjZV9wYXRoLCBzZWxmLmpzb25fYXJncykKICAgICAgICByZXNvdXJjZXMgPSByZXNvdXJjZV9wYXRoLnNwbGl0KCIvIikKICAgICAgICBhY3Rpb24gPSByZXNvdXJjZXNbMF0KICAgICAgICB0cnk6CiAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcocmVzb3VyY2VfcGF0aCkKICAgICAgICAgICAgYXJncyA9IHNlbGYuanNvbl9hcmdzIG9yIHt9CiAgICAgICAgICAgIAogICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYuY29udHJvbCwgYWN0aW9uKQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHJlc3VsdCA9IG1ldGhvZChzZWxmLmN1cnJlbnRfdXNlciwgKiphcmdzKQogICAgICAgICAgICBzZWxmLndyaXRlKGR1bXBzKHsicmVzdWx0IjogcmVzdWx0fSxpbmRlbnQ9MikpCiAgICAgICAgICAgIHNlbGYuY29udHJvbC5fZmx1c2goKQogICAgICAgICAgICAKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgogICAgICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbihleCkKICAgICAgICAgICAgZXJyb3IgPSBzdHIoZXgpCiAgICAgICAgICAgIHNlbGYud3JpdGUoZHVtcHMoeyJyZXN1bHQiOiBOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IiIDogZXJyb3IgfSxpbmRlbnQ9MikpCiAgICAgICAgICAgIHNlbGYuY29udHJvbC5fZmx1c2goZXgpCiAgICAgICAgICAgIAogICAgICAgIAogICAgZGVmIHB1dChzZWxmLHJlc291cmNlX3BhdGgpOgogICAgICAgICIiIgogICAgICAgICAgICBQdXQgZ29lcyB0byBmZXRjaF9hbmRfY2FycnlfbWl4aW4gY2FycnkKICAgICAgICAiIiIKICAgICAgICBzZWxmLnJlcXVpcmVfanNvbl9jb250ZW50KCkKICAgICAgICBsb2dnaW5nLmluZm8oInB1dCAlcyAtICVzIixyZXNvdXJjZV9wYXRoLCBzZWxmLmpzb25fYXJncykKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJlc291cmNlcyA9IHJlc291cmNlX3BhdGguc3BsaXQoIi8iKQogICAgICAgICAgICByZXNvdXJjZSA9IHJlc291cmNlc1swXQogICAgICAgICAgICBpZCA9IGludChyZXNvdXJjZXNbMV0pIGlmIGxlbihyZXNvdXJjZXMpID4gMSBlbHNlIE5vbmUKICAgICAgICAgICAgYXJncyA9IHNlbGYuanNvbl9hcmdzCiAgICAgICAgICAgIGl0ZW0gPSBhcmdzLmdldCgiaXRlbSIpCiAgICAgICAgICAgIGlmIGl0ZW0gaXMgTm9uZToKICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigianNvbiBwYXlsb2FkOiB7aXRlbTpvYmosICh0b19hZGQ6W2F0dHIsdHlwZSxpZF1dKSwgKHRvX3JlbW92ZTpbYXR0cix0eXBlLGlkXV0pfSIpCiAgICAgICAgICAgIGlmIGl0ZW0uZ2V0KCJfdHlwZSIpIGlzIE5vbmUgYW5kIHJlc291cmNlIGluIFtOb25lLCIiXToKICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTm8gcmVzb3VyY2Ugc3BlY2lmaWVkIikKICAgICAgICAgICAgaWYgaXRlbS5nZXQoIl90eXBlIikgaXMgTm9uZToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgaXRlbVsiX3R5cGUiXSA9IHJlc291cmNlCjx8ZmltX2VuZHw+"]
["f291cc66b13ac0a3a64cae157d436f07cd05b0e8-3","f291cc66b13ac0a3a64cae157d436f07cd05b0e8","PHxmaW1fcHJlZml4fD4KJycnCkNyZWF0ZWQgb24gMTIgRmViIDIwMTQKCkBhdXRob3I6IHBldGVyYgonJycKaW1wb3J0IGxvZ2dpbmcKZnJvbSBibHVlc2hlZC51dGlscy51dGlscyBpbXBvcnQgbG9hZHMsIGR1bXBzCmZyb20gYmx1ZXNoZWQuaGFuZGxlcnMuYmFzZV9oYW5kbGVyIGltcG9ydCBCYXNlSGFuZGxlcgpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAoKCmNsYXNzIFJlc3RIYW5kbGVyKEJhc2VIYW5kbGVyKToKICAgICIiIgogICAgICAgIFNpbXBsZSByZXN0IGhhbmxkZXIgd2l0aCAgbm8gYXV0aGVudGljYXRpb24KICAgICAgICB0aGF0IGV4cGVjdHMgdGhlIGZlY3RoX2FuZF9jYXJyeSBtaXhpbiB0byBiZQogICAgICAgIG1peGVkIGludG8gdGhlIGNvbnRyb2wKICAgICIiIgogICAgCiAgICAgCiAgICBkZWYgcHJlcGFyZShzZWxmKToKICAgICAgICBpZiBzZWxmLnJlcXVlc3QuaGVhZGVycy5nZXQoIkNvbnRlbnQtVHlwZSIpID09ICJhcHBsaWNhdGlvbi9qc29uIiBhbmQgXAogICAgICAgICAgICBzZWxmLnJlcXVlc3QuYm9keToKICAgICAgICAgICAgc2VsZi5qc29uX2FyZ3MgPSBsb2FkcyhzdHIoc2VsZi5yZXF1ZXN0LmJvZHksZW5jb2Rpbmc9IlVURi04IikpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5qc29uX2FyZ3MgPSBOb25lCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgIGRlZiByZXF1aXJlX2pzb25fY29udGVudChzZWxmKToKICAgICAgICBpZiBzZWxmLnJlcXVlc3QuaGVhZGVycy5nZXQoIkNvbnRlbnQtVHlwZSIpICE9ICJhcHBsaWNhdGlvbi9qc29uIjoKICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb250ZW50LVR5cGUgJ2FwcGxpY2F0aW9uL2pzb24nIHJlcXVpcmVkIikKICAgIAogICAgCiAgICBkZWYgZ2V0KHNlbGYsIHJlc291cmNlX3BhdGgpOgogICAgICAgICIiIgogICAgICAgICAgICBHZXQgZ29lcyB0byBmZXRjaF9hbmRfY2FycnlfbWl4aW4gZmV0Y2ggb3IgcmV0dXJucyB0aGUgbWV0YSBkYXRhCiAgICAgICAgIiIiCiAgICAgICAgbG9nZ2luZy5pbmZvKCJnZXQgJXMiLHJlc291cmNlX3BhdGgpCiAgICAgICAgaWYgcmVzb3VyY2VfcGF0aCBpcyBOb25lIG9yIHJlc291cmNlX3BhdGggaXMgIiI6CiAgICAgICAgICAgIHNlbGYud3JpdGUoT3JkZXJlZERpY3QoWwogICAgICAgICAgICAgICAgKCJ0YXJnZXQiLCAicmVzdC1hcGkiKSwKICAgICAgICAgICAgICAgICgidmVyc2lvbiIsIDEpLAogICAgICAgICAgICAgICAgKCJwb3N0X21ldGhvZHMiLCBzZWxmLmNvbnRyb2wuX2ZjX21ldGhvZHMpLAogICAgICAgICAgICAgICAgKCJtb2RlbCIsIHNlbGYuY29udHJvbC5fZmNfZGVzY3JpcHRpb24pCiAgICAgICAgICAgIF0pKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHJlc291cmNlcyA9IHJlc291cmNlX3BhdGguc3BsaXQoIi8iKQogICAgICAgICAgICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZXNbMF0KICAgICAgICAgICAgICAgIGlkID0gcmVzb3VyY2VzWzFdIGlmIGxlbihyZXNvdXJjZXMpID4gMSBlbHNlIE5vbmUKICAgICAgICAgICAgICAgIGxpbWl0ID0gaW50KHNlbGYuZ2V0X2FyZ3VtZW50KCJsaW1pdCIsIDEwKSkKICAgICAgICAgICAgICAgIG9mZnNldCA9IGludChzZWxmLmdldF9hcmd1bWVudCgib2Zmc2V0IiwgMCkpCiAgICAgICAgICAgICAgICBhdHRyID0gc2VsZi5nZXRfYXJndW1lbnQoImF0dHIiLCBOb25lKQogICAgICAgICAgICAgICAgZmlsdGVyID0gc2VsZi5nZXRfYXJndW1lbnQoImZpbHRlciIsIE5vbmUpCiAgICAgICAgICAgICAgICBtYXRjaCA9IHNlbGYuZ2V0X2FyZ3VtZW50KCJtYXRjaCIsIE5vbmUpCiAgICAgICAgICAgICAgICBvcmRlcl9ieSA9IHNlbGYuZ2V0X2FyZ3VtZW50KCJvcmRlcl9ieSIsIE5vbmUpCiAgICAgICAgICAgICAgICBvcmRlcl9ieV9hc2MgPSBzZWxmLmdldF9hcmd1bWVudCgib3JkZXJfYnlfYXNjIiwgJ2ZhbHNlJykubG93ZXIoKSA9PSAidHJ1ZSIKICAgICAgICAgICAgICAgIGRlcHRoID0gaW50KHNlbGYuZ2V0X2FyZ3VtZW50KCJkZXB0aCIsIDApKQogICAgICAgICAgICAgICAgaWdub3JlID0gc2VsZi5nZXRfYXJndW1lbnQoImlnbm9yZSIsTm9uZSkKICAgICAgICAgICAgICAgIGluY2x1ZGUgPSBzZWxmLmdldF9hcmd1bWVudCgiaW5jbHVkZSIsTm9uZSkKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICByZXN1bHQgPSB7InJlc3VsdCI6IHNlbGYuY29udHJvbC5mZXRjaCgxLHJlc291cmNlLGlkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHI9YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcj1maWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaD1tYXRjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0PWxpbWl0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD1vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcl9ieT1vcmRlcl9ieSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyX2J5X2FzYz1vcmRlcl9ieV9hc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aD1kZXB0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZT1pZ25vcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlPWluY2x1ZGUpfQogICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgogICAgICAgICAgICAgICAgcmVzdWx0ID0geyJlcnJvciI6IHN0cihleCl9CiAgICAgICAgICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbihleCkKICAgICAgICAgICAgc2VsZi5zZXRfaGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCIpCiAgICAgICAgICAgIHNlbGYud3JpdGUoZHVtcHMocmVzdWx0KSkKICAgICAgICAKICAgIAogICAgZGVmIHBvc3Qoc2VsZixyZXNvdXJjZV9wYXRoKToKICAgICAgICAiIiIKICAgICAgICAgICAgUG9zdCBjYWxscyBwdWJsaWMgbWV0aG9kcyBvbiB0aGUgY29udHJvbAogICAgICAgICIiIgogICAgICAgIHNlbGYucmVxdWlyZV9qc29uX2NvbnRlbnQoKQogICAgICAgIGxvZ2dpbmcuaW5mbygicG9zdCAlcyAtICVzIixyZXNvdXJjZV9wYXRoLCBzZWxmLmpzb25fYXJncykKICAgICAgICByZXNvdXJjZXMgPSByZXNvdXJjZV9wYXRoLnNwbGl0KCIvIikKICAgICAgICBhY3Rpb24gPSByZXNvdXJjZXNbMF0KICAgICAgICB0cnk6CiAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcocmVzb3VyY2VfcGF0aCkKICAgICAgICAgICAgYXJncyA9IHNlbGYuanNvbl9hcmdzIG9yIHt9CiAgICAgICAgICAgIAogICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYuY29udHJvbCwgYWN0aW9uKQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHJlc3VsdCA9IG1ldGhvZChzZWxmLmN1cnJlbnRfdXNlciwgKiphcmdzKQogICAgICAgICAgICBzZWxmLndyaXRlKGR1bXBzKHsicmVzdWx0IjogcmVzdWx0fSxpbmRlbnQ9MikpCiAgICAgICAgICAgIHNlbGYuY29udHJvbC5fZmx1c2goKQogICAgICAgICAgICAKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgogICAgICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbihleCkKICAgICAgICAgICAgZXJyb3IgPSBzdHIoZXgpCiAgICAgICAgICAgIHNlbGYud3JpdGUoZHVtcHMoeyJyZXN1bHQiOiBOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IiIDogZXJyb3IgfSxpbmRlbnQ9MikpCiAgICAgICAgICAgIHNlbGYuY29udHJvbC5fZmx1c2goZXgpCiAgICAgICAgICAgIAogICAgICAgIAogICAgZGVmIHB1dChzZWxmLHJlc291cmNlX3BhdGgpOgogICAgICAgICIiIgogICAgICAgICAgICBQdXQgZ29lcyB0byBmZXRjaF9hbmRfY2FycnlfbWl4aW4gY2FycnkKICAgICAgICAiIiIKICAgICAgICBzZWxmLnJlcXVpcmVfanNvbl9jb250ZW50KCkKICAgICAgICBsb2dnaW5nLmluZm8oInB1dCAlcyAtICVzIixyZXNvdXJjZV9wYXRoLCBzZWxmLmpzb25fYXJncykKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJlc291cmNlcyA9IHJlc291cmNlX3BhdGguc3BsaXQoIi8iKQogICAgICAgICAgICByZXNvdXJjZSA9IHJlc291cmNlc1swXQogICAgICAgICAgICBpZCA9IGludChyZXNvdXJjZXNbMV0pIGlmIGxlbihyZXNvdXJjZXMpID4gMSBlbHNlIE5vbmUKICAgICAgICAgICAgYXJncyA9IHNlbGYuanNvbl9hcmdzCiAgICAgICAgICAgIGl0ZW0gPSBhcmdzLmdldCgiaXRlbSIpCiAgICAgICAgICAgIGlmIGl0ZW0gaXMgTm9uZToKICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigianNvbiBwYXlsb2FkOiB7aXRlbTpvYmosICh0b19hZGQ6W2F0dHIsdHlwZSxpZF1dKSwgKHRvX3JlbW92ZTpbYXR0cix0eXBlLGlkXV0pfSIpCiAgICAgICAgICAgIGlmIGl0ZW0uZ2V0KCJfdHlwZSIpIGlzIE5vbmUgYW5kIHJlc291cmNlIGluIFtOb25lLCIiXToKICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTm8gcmVzb3VyY2Ugc3BlY2lmaWVkIikKICAgICAgICAgICAgaWYgaXRlbS5nZXQoIl90eXBlIikgaXMgTm9uZToKICAgICAgICAgICAgICAgIGl0ZW1bIl90eXBlIl0gPSByZXNvdXJjZQogICAgICAgICAgICByZXN1bHQgPSB7InJlc3VsdCI6IHNlbGYuY29udHJvbC5jYXJyeShzZWxmLmdldF9jdXJyZW50X3VzZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuZ2V0KCJ0b19hZGQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5nZXQoInRvX3JlbW92ZSIpKSwgImFjdGlvbiI6ICJzYXZlZCIgfQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6CiAgICAgICAgICAgIHJlc3VsdCA9IHsiZXJyb3IiOiBzdHIoZXgpfQogICAgICAgICAgICBzZWxmLmNvbnRyb2wuX2ZsdXNoKGV4KQogICAgICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbihleCkKICAgICAgICBzZWxmLnNldF9oZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04IikKICAgICAgICBzZWxmLndyaXRlKGR1bXBzKHJlc3VsdCkpCiAgICAgICAgc2VsZi5jb250cm9sLl9mbHVzaCgpCiAgICAgICAgCiAgICAgICAgCiAgICBkZWYgZGVsZXRlKHNlbGYsIHJlc291cmNlX3BhdGgpOgogICAgICAgICIiIgogICAgICAgICAgICBQdXQgZ29lcyB0byBmZXRjaF9hbmRfY2FycnlfbWl4aW4gY2FycnkKICAgICAgICAiIiIKICAgICAgICBzZWxmLnJlcXVpcmVfanNvbl9jb250ZW50KCkKICAgICAgICBsb2dnaW5nLmluZm8oImRlbGV0ZSAlcyIscmVzb3VyY2VfcGF0aCkKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJlc291cmNlcyA9IHJlc291cmNlX3BhdGguc3BsaXQoIi8iKQogICAgICAgICAgICByZXNvdXJjZSA9IHJlc291cmNlc1swXQogICAgICAgICAgICBpZCA9IGludChyZXNvdXJjZXNbMV0pCiAgICAgICAgICAgIHJlc3VsdCA9IHsicmVzdWx0Ijogc2VsZi5jb250cm9sLmNhcnJ5KDEseyJpZCI6LWlkLCJfdHlwZSI6cmVzb3VyY2V9KSAsICJhY3Rpb24iOiAiZGVsZXRlZCJ9CiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleDoKICAgICAgICAgICAgcmVzdWx0ID0geyJlcnJvciI6IHN0cihleCl9CiAgICAgICAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKGV4KQogICAgICAgIHNlbGYuc2V0X2hlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgiKQogICAgICAgIHNlbGYud3JpdGUoZHVtcHMocmVzdWx0KSkKICAgICAgICAKICAgIAo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgaWYgaWdub3JlOgogICAgICAgICAgICAgICAgICAgIGlnbm9yZSA9IGlnbm9yZS5zcGxpdCgiLCIpCiAgICAgICAgICAgICAgICBpZiBpbmNsdWRlOgogICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgPSBpbmNsdWRlLnNwbGl0KCIsIikKPHxmaW1fZW5kfD4="]
["f291cc66b13ac0a3a64cae157d436f07cd05b0e8-4","f291cc66b13ac0a3a64cae157d436f07cd05b0e8","PHxmaW1fcHJlZml4fD4KJycnCkNyZWF0ZWQgb24gMTIgRmViIDIwMTQKCkBhdXRob3I6IHBldGVyYgonJycKaW1wb3J0IGxvZ2dpbmcKZnJvbSBibHVlc2hlZC51dGlscy51dGlscyBpbXBvcnQgbG9hZHMsIGR1bXBzCmZyb20gYmx1ZXNoZWQuaGFuZGxlcnMuYmFzZV9oYW5kbGVyIGltcG9ydCBCYXNlSGFuZGxlcgpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAoKCmNsYXNzIFJlc3RIYW5kbGVyKEJhc2VIYW5kbGVyKToKICAgICIiIgogICAgICAgIFNpbXBsZSByZXN0IGhhbmxkZXIgd2l0aCAgbm8gYXV0aGVudGljYXRpb24KICAgICAgICB0aGF0IGV4cGVjdHMgdGhlIGZlY3RoX2FuZF9jYXJyeSBtaXhpbiB0byBiZQogICAgICAgIG1peGVkIGludG8gdGhlIGNvbnRyb2wKICAgICIiIgogICAgCiAgICAgCiAgICBkZWYgcHJlcGFyZShzZWxmKToKICAgICAgICBpZiBzZWxmLnJlcXVlc3QuaGVhZGVycy5nZXQoIkNvbnRlbnQtVHlwZSIpID09ICJhcHBsaWNhdGlvbi9qc29uIiBhbmQgXAogICAgICAgICAgICBzZWxmLnJlcXVlc3QuYm9keToKICAgICAgICAgICAgc2VsZi5qc29uX2FyZ3MgPSBsb2FkcyhzdHIoc2VsZi5yZXF1ZXN0LmJvZHksZW5jb2Rpbmc9IlVURi04IikpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5qc29uX2FyZ3MgPSBOb25lCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgIGRlZiByZXF1aXJlX2pzb25fY29udGVudChzZWxmKToKICAgICAgICBpZiBzZWxmLnJlcXVlc3QuaGVhZGVycy5nZXQoIkNvbnRlbnQtVHlwZSIpICE9ICJhcHBsaWNhdGlvbi9qc29uIjoKICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb250ZW50LVR5cGUgJ2FwcGxpY2F0aW9uL2pzb24nIHJlcXVpcmVkIikKICAgIAogICAgCiAgICBkZWYgZ2V0KHNlbGYsIHJlc291cmNlX3BhdGgpOgogICAgICAgICIiIgogICAgICAgICAgICBHZXQgZ29lcyB0byBmZXRjaF9hbmRfY2FycnlfbWl4aW4gZmV0Y2ggb3IgcmV0dXJucyB0aGUgbWV0YSBkYXRhCiAgICAgICAgIiIiCiAgICAgICAgbG9nZ2luZy5pbmZvKCJnZXQgJXMiLHJlc291cmNlX3BhdGgpCiAgICAgICAgaWYgcmVzb3VyY2VfcGF0aCBpcyBOb25lIG9yIHJlc291cmNlX3BhdGggaXMgIiI6CiAgICAgICAgICAgIHNlbGYud3JpdGUoT3JkZXJlZERpY3QoWwogICAgICAgICAgICAgICAgKCJ0YXJnZXQiLCAicmVzdC1hcGkiKSwKICAgICAgICAgICAgICAgICgidmVyc2lvbiIsIDEpLAogICAgICAgICAgICAgICAgKCJwb3N0X21ldGhvZHMiLCBzZWxmLmNvbnRyb2wuX2ZjX21ldGhvZHMpLAogICAgICAgICAgICAgICAgKCJtb2RlbCIsIHNlbGYuY29udHJvbC5fZmNfZGVzY3JpcHRpb24pCiAgICAgICAgICAgIF0pKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHJlc291cmNlcyA9IHJlc291cmNlX3BhdGguc3BsaXQoIi8iKQogICAgICAgICAgICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZXNbMF0KICAgICAgICAgICAgICAgIGlkID0gcmVzb3VyY2VzWzFdIGlmIGxlbihyZXNvdXJjZXMpID4gMSBlbHNlIE5vbmUKICAgICAgICAgICAgICAgIGxpbWl0ID0gaW50KHNlbGYuZ2V0X2FyZ3VtZW50KCJsaW1pdCIsIDEwKSkKICAgICAgICAgICAgICAgIG9mZnNldCA9IGludChzZWxmLmdldF9hcmd1bWVudCgib2Zmc2V0IiwgMCkpCiAgICAgICAgICAgICAgICBhdHRyID0gc2VsZi5nZXRfYXJndW1lbnQoImF0dHIiLCBOb25lKQogICAgICAgICAgICAgICAgZmlsdGVyID0gc2VsZi5nZXRfYXJndW1lbnQoImZpbHRlciIsIE5vbmUpCiAgICAgICAgICAgICAgICBtYXRjaCA9IHNlbGYuZ2V0X2FyZ3VtZW50KCJtYXRjaCIsIE5vbmUpCiAgICAgICAgICAgICAgICBvcmRlcl9ieSA9IHNlbGYuZ2V0X2FyZ3VtZW50KCJvcmRlcl9ieSIsIE5vbmUpCiAgICAgICAgICAgICAgICBvcmRlcl9ieV9hc2MgPSBzZWxmLmdldF9hcmd1bWVudCgib3JkZXJfYnlfYXNjIiwgJ2ZhbHNlJykubG93ZXIoKSA9PSAidHJ1ZSIKICAgICAgICAgICAgICAgIGRlcHRoID0gaW50KHNlbGYuZ2V0X2FyZ3VtZW50KCJkZXB0aCIsIDApKQogICAgICAgICAgICAgICAgaWdub3JlID0gc2VsZi5nZXRfYXJndW1lbnQoImlnbm9yZSIsTm9uZSkKICAgICAgICAgICAgICAgIGluY2x1ZGUgPSBzZWxmLmdldF9hcmd1bWVudCgiaW5jbHVkZSIsTm9uZSkKICAgICAgICAgICAgICAgIGlmIGlnbm9yZToKICAgICAgICAgICAgICAgICAgICBpZ25vcmUgPSBpZ25vcmUuc3BsaXQoIiwiKQogICAgICAgICAgICAgICAgaWYgaW5jbHVkZToKICAgICAgICAgICAgICAgICAgICBpbmNsdWRlID0gaW5jbHVkZS5zcGxpdCgiLCIpCiAgICAgICAgICAgICAgICByZXN1bHQgPSB7InJlc3VsdCI6IHNlbGYuY29udHJvbC5mZXRjaCgxLHJlc291cmNlLGlkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHI9YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcj1maWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaD1tYXRjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0PWxpbWl0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD1vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcl9ieT1vcmRlcl9ieSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyX2J5X2FzYz1vcmRlcl9ieV9hc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aD1kZXB0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZT1pZ25vcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlPWluY2x1ZGUpfQogICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgogICAgICAgICAgICAgICAgcmVzdWx0ID0geyJlcnJvciI6IHN0cihleCl9CiAgICAgICAgICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbihleCkKICAgICAgICAgICAgc2VsZi5zZXRfaGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCIpCiAgICAgICAgICAgIHNlbGYud3JpdGUoZHVtcHMocmVzdWx0KSkKICAgICAgICAKICAgIAogICAgZGVmIHBvc3Qoc2VsZixyZXNvdXJjZV9wYXRoKToKICAgICAgICAiIiIKICAgICAgICAgICAgUG9zdCBjYWxscyBwdWJsaWMgbWV0aG9kcyBvbiB0aGUgY29udHJvbAogICAgICAgICIiIgogICAgICAgIHNlbGYucmVxdWlyZV9qc29uX2NvbnRlbnQoKQogICAgICAgIGxvZ2dpbmcuaW5mbygicG9zdCAlcyAtICVzIixyZXNvdXJjZV9wYXRoLCBzZWxmLmpzb25fYXJncykKICAgICAgICByZXNvdXJjZXMgPSByZXNvdXJjZV9wYXRoLnNwbGl0KCIvIikKICAgICAgICBhY3Rpb24gPSByZXNvdXJjZXNbMF0KICAgICAgICB0cnk6CiAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcocmVzb3VyY2VfcGF0aCkKICAgICAgICAgICAgYXJncyA9IHNlbGYuanNvbl9hcmdzIG9yIHt9CiAgICAgICAgICAgIAogICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYuY29udHJvbCwgYWN0aW9uKQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHJlc3VsdCA9IG1ldGhvZChzZWxmLmN1cnJlbnRfdXNlciwgKiphcmdzKQogICAgICAgICAgICBzZWxmLndyaXRlKGR1bXBzKHsicmVzdWx0IjogcmVzdWx0fSxpbmRlbnQ9MikpCiAgICAgICAgICAgIHNlbGYuY29udHJvbC5fZmx1c2goKQogICAgICAgICAgICAKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgogICAgICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbihleCkKICAgICAgICAgICAgZXJyb3IgPSBzdHIoZXgpCiAgICAgICAgICAgIHNlbGYud3JpdGUoZHVtcHMoeyJyZXN1bHQiOiBOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IiIDogZXJyb3IgfSxpbmRlbnQ9MikpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgc2VsZi5jb250cm9sLl9mbHVzaChleCkKICAgICAgICAgICAgCiAgICAgICAgCjx8ZmltX2VuZHw+"]
["f291cc66b13ac0a3a64cae157d436f07cd05b0e8-5","f291cc66b13ac0a3a64cae157d436f07cd05b0e8","PHxmaW1fcHJlZml4fD4KJycnCkNyZWF0ZWQgb24gMTIgRmViIDIwMTQKCkBhdXRob3I6IHBldGVyYgonJycKaW1wb3J0IGxvZ2dpbmcKZnJvbSBibHVlc2hlZC51dGlscy51dGlscyBpbXBvcnQgbG9hZHMsIGR1bXBzCmZyb20gYmx1ZXNoZWQuaGFuZGxlcnMuYmFzZV9oYW5kbGVyIGltcG9ydCBCYXNlSGFuZGxlcgpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAoKCmNsYXNzIFJlc3RIYW5kbGVyKEJhc2VIYW5kbGVyKToKICAgICIiIgogICAgICAgIFNpbXBsZSByZXN0IGhhbmxkZXIgd2l0aCAgbm8gYXV0aGVudGljYXRpb24KICAgICAgICB0aGF0IGV4cGVjdHMgdGhlIGZlY3RoX2FuZF9jYXJyeSBtaXhpbiB0byBiZQogICAgICAgIG1peGVkIGludG8gdGhlIGNvbnRyb2wKICAgICIiIgogICAgCiAgICAgCiAgICBkZWYgcHJlcGFyZShzZWxmKToKICAgICAgICBpZiBzZWxmLnJlcXVlc3QuaGVhZGVycy5nZXQoIkNvbnRlbnQtVHlwZSIpID09ICJhcHBsaWNhdGlvbi9qc29uIiBhbmQgXAogICAgICAgICAgICBzZWxmLnJlcXVlc3QuYm9keToKICAgICAgICAgICAgc2VsZi5qc29uX2FyZ3MgPSBsb2FkcyhzdHIoc2VsZi5yZXF1ZXN0LmJvZHksZW5jb2Rpbmc9IlVURi04IikpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5qc29uX2FyZ3MgPSBOb25lCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgIGRlZiByZXF1aXJlX2pzb25fY29udGVudChzZWxmKToKICAgICAgICBpZiBzZWxmLnJlcXVlc3QuaGVhZGVycy5nZXQoIkNvbnRlbnQtVHlwZSIpICE9ICJhcHBsaWNhdGlvbi9qc29uIjoKICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb250ZW50LVR5cGUgJ2FwcGxpY2F0aW9uL2pzb24nIHJlcXVpcmVkIikKICAgIAogICAgCiAgICBkZWYgZ2V0KHNlbGYsIHJlc291cmNlX3BhdGgpOgogICAgICAgICIiIgogICAgICAgICAgICBHZXQgZ29lcyB0byBmZXRjaF9hbmRfY2FycnlfbWl4aW4gZmV0Y2ggb3IgcmV0dXJucyB0aGUgbWV0YSBkYXRhCiAgICAgICAgIiIiCiAgICAgICAgbG9nZ2luZy5pbmZvKCJnZXQgJXMiLHJlc291cmNlX3BhdGgpCiAgICAgICAgaWYgcmVzb3VyY2VfcGF0aCBpcyBOb25lIG9yIHJlc291cmNlX3BhdGggaXMgIiI6CiAgICAgICAgICAgIHNlbGYud3JpdGUoT3JkZXJlZERpY3QoWwogICAgICAgICAgICAgICAgKCJ0YXJnZXQiLCAicmVzdC1hcGkiKSwKICAgICAgICAgICAgICAgICgidmVyc2lvbiIsIDEpLAogICAgICAgICAgICAgICAgKCJwb3N0X21ldGhvZHMiLCBzZWxmLmNvbnRyb2wuX2ZjX21ldGhvZHMpLAogICAgICAgICAgICAgICAgKCJtb2RlbCIsIHNlbGYuY29udHJvbC5fZmNfZGVzY3JpcHRpb24pCiAgICAgICAgICAgIF0pKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHJlc291cmNlcyA9IHJlc291cmNlX3BhdGguc3BsaXQoIi8iKQogICAgICAgICAgICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZXNbMF0KICAgICAgICAgICAgICAgIGlkID0gcmVzb3VyY2VzWzFdIGlmIGxlbihyZXNvdXJjZXMpID4gMSBlbHNlIE5vbmUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgbGltaXQgPSBpbnQoc2VsZi5nZXRfYXJndW1lbnQoImxpbWl0IiwgMTApKQogICAgICAgICAgICAgICAgb2Zmc2V0ID0gaW50KHNlbGYuZ2V0X2FyZ3VtZW50KCJvZmZzZXQiLCAwKSkKICAgICAgICAgICAgICAgIGF0dHIgPSBzZWxmLmdldF9hcmd1bWVudCgiYXR0ciIsIE5vbmUpCiAgICAgICAgICAgICAgICBmaWx0ZXIgPSBzZWxmLmdldF9hcmd1bWVudCgiZmlsdGVyIiwgTm9uZSkKPHxmaW1fZW5kfD4="]
["c218d6a262242e805ba4bbfdabe106e197ea7f74-1","c218d6a262242e805ba4bbfdabe106e197ea7f74","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDEuMTAgb24gMjAxNy0wMi0wNiAxOTowNApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKaW1wb3J0IGdhbWUubW9kZWxzCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKPHxmaW1faG9sZXw+CgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCiAgICAgICAgICAgIG1vZGVsX25hbWU9J2dhbWUnLAogICAgICAgICAgICBuYW1lPSdnYW1lX3NldCcsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5DaGFyRmllbGQoZGVmYXVsdD1nYW1lLm1vZGVscy5jcmVhdGVfZ2FtZV9zZXQsIG1heF9sZW5ndGg9MTAwKSwKICAgICAgICApLAogICAgXQo8fGZpbV9zdWZmaXh8PgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ2dhbWUnLCAnMDAwM19hdXRvXzIwMTcwMjA2XzE2MzUnKSwKICAgIF0KPHxmaW1fZW5kfD4="]
["c218d6a262242e805ba4bbfdabe106e197ea7f74-2","c218d6a262242e805ba4bbfdabe106e197ea7f74","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDEuMTAgb24gMjAxNy0wMi0wNiAxOTowNApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKaW1wb3J0IGdhbWUubW9kZWxzCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCiAgICAgICAgKCdnYW1lJywgJzAwMDNfYXV0b18yMDE3MDIwNl8xNjM1JyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFsdGVyRmllbGQoCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgbW9kZWxfbmFtZT0nZ2FtZScsCiAgICAgICAgICAgIG5hbWU9J2dhbWVfc2V0JywKICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkNoYXJGaWVsZChkZWZhdWx0PWdhbWUubW9kZWxzLmNyZWF0ZV9nYW1lX3NldCwgbWF4X2xlbmd0aD0xMDApLAo8fGZpbV9lbmR8Pg=="]
["c218d6a262242e805ba4bbfdabe106e197ea7f74-3","c218d6a262242e805ba4bbfdabe106e197ea7f74","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBHZW5lcmF0ZWQgYnkgRGphbmdvIDEuMTAgb24gMjAxNy0wMi0wNiAxOTowNApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKaW1wb3J0IGdhbWUubW9kZWxzCgoKY2xhc3MgTWlncmF0aW9uKG1pZ3JhdGlvbnMuTWlncmF0aW9uKToKCiAgICBkZXBlbmRlbmNpZXMgPSBbCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAoJ2dhbWUnLCAnMDAwM19hdXRvXzIwMTcwMjA2XzE2MzUnKSwKPHxmaW1fZW5kfD4="]
["dec90e45d623d229f5686fd1ec0007fa63b2d7e9-1","dec90e45d623d229f5686fd1ec0007fa63b2d7e9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhdGhsaWIKaW1wb3J0IHJlcXVlc3RzCmltcG9ydCB0aW1lCmltcG9ydCBqc29uCmltcG9ydCB6aXBmaWxlCmltcG9ydCB0cWRtCgoKemlwX3VybCA9ICIiCmRhdGFzZXRfcGF0aCA9IHBhdGhsaWIuUGF0aCgiZGF0YXNldHMiLCAidGR0NDI2NSIpCgojIyBUbyBza2lwIGF1dGhlbnRpY2F0aW9uCiMgZ3JvdXBfbnVtYmVyPTE1MAojIHBhc3N3b3JkPSJqSzRDOEc3TEtiQkpLZFA1eW9INVJTaGpvQyIKCgpjbGFzcyBSZXF1ZXN0V3JhcHBlcjoKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5zZXJ2ZXJfdXJsID0gImh0dHBzOi8vdGR0NDI2NS1hbm5vdGVyaW5nLmlkaS5udG51Lm5vIgogICAgICAgIHNlbGYuZ2V0X3Rva2VuKCkKCiAgICBkZWYgZ2V0X3Rva2VuKHNlbGYpOgogICAgICAgICMgZ3JvdXBfbnVtYmVyID0gaW5wdXQoImdyb3VwIG51bWJlcjoiKQogICAgICAgIGdyb3VwX251bWJlcj0xNTAKICAgICAgICAjIHRyeToKICAgICAgICAjICAgICBncm91cF9udW1iZXIgPSBpbnQoZ3JvdXBfbnVtYmVyLnN0cmlwKCkpCiAgICAgICAgIyBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICMgICAgIHByaW50KCJOb3QgYSBudW1iZXIuIFdyaXRlIGluIHlvdXIgZ3JvdXAgbnVtYmVyLiIpCiAgICAgICAgIyAgICAgZXhpdCgpCiAgICAgICAgdXNlciA9IGYiZ3JvdXB7Z3JvdXBfbnVtYmVyfSIKICAgICAgICBzZWxmLnVzZXIgPSB1c2VyCiAgICAgICAgIyBwYXNzd29yZCA9IGlucHV0KCJUeXBlIGluIHBhc3N3b3JkIChHaXZlbiBpbiB0aGUgYXNzaWdubWVudCBQREYpOiIpCiAgICAgICAgcGFzc3dvcmQ9ImpLNEM4RzdMS2JCSktkUDV5b0g1UlNoam9DIgogICAgICAgIGRhdGEgPSB7InVzZXJuYW1lIjogdXNlciwgInBhc3N3b3JkIjogcGFzc3dvcmQuc3RyaXAoKSwgImVtYWlsIjogIiJ9CiAgICAgICAgciA9IHJlcXVlc3RzLnBvc3QoZiJ7c2VsZi5zZXJ2ZXJfdXJsfS9hcGkvdjEvYXV0aC9sb2dpbiIsIGRhdGE9ZGF0YSkKICAgICAgICBpZiByLnN0YXR1c19jb2RlICE9IDIwMDoKICAgICAgICAgICAgcHJpbnQoIkNvdWxkIG5vdCBhdXRob3JpemUgeW91LiIpCiAgICAgICAgICAgIHByaW50KHIpCiAgICAgICAgICAgIGV4aXQoKQoKICAgICAgICBhdXRoX3N0cmluZyA9ICJUb2tlbiAiICsgci5qc29uKClbImtleSJdCiAgICAgICAgc2VsZi5oZWFkZXJzID0geyJBdXRob3JpemF0aW9uIjogYXV0aF9zdHJpbmd9CiAgICAgICAgcHJpbnQoIkF1dGhlbnRpY2F0aW9uIE9LLiIpCgogICAgZGVmIGRvX3JlcXVlc3Qoc2VsZiwgcGF0aCk6CiAgICAgICAgdXJsID0gZiJ7c2VsZi5zZXJ2ZXJfdXJsfXtwYXRofSIKICAgICAgICByID0gcmVxdWVzdHMuZ2V0KHVybCwgaGVhZGVycz1zZWxmLmhlYWRlcnMpCiAgICAgICAgcmV0dXJuIHIKCiAgICBkZWYgZG93bmxvYWQoc2VsZiwgcGF0aCwgdGFyZ2V0X3BhdGgpOgogICAgICAgIHVybCA9IGYie3NlbGYuc2VydmVyX3VybH17cGF0aH0iCiAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5nZXQodXJsLCBzdHJlYW09VHJ1ZSwgaGVhZGVycz1zZWxmLmhlYWRlcnMpCiAgICAgICAgdG90YWxfbGVuZ3RoID0gaW50KHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCJjb250ZW50LWxlbmd0aCIpKQogICAgICAgIGFzc2VydCByZXNwb25zZS5zdGF0dXNfY29kZSA9PSAyMDAsIFwKICAgICAgICAgICAgZiJEaWQgbm90IGRvd25sb2FkIHRoZSBpbWFnZXMuIENvbnRhY3QgdGhlIFRBLiBTdGF0dXMgY29kZToge3Jlc3BvbnNlLnN0YXR1c19jb2RlfSIKICAgICAgICB3aXRoIG9wZW4odGFyZ2V0X3BhdGgsICJ3YiIpIGFzIGZwOgogICAgICAgICAgICBmb3IgZGF0YSBpbiB0cWRtLnRxZG0oCiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuaXRlcl9jb250ZW50KGNodW5rX3NpemU9NDA5NiksIHRvdGFsPXRvdGFsX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICBkZXNjPSJEb3dubG9hZGluZyBpbWFnZXMuIik6CiAgICAgICAgICAgICAgICBmcC53cml0ZShkYXRhKQoKCmRlZiBkb3dubG9hZF9sYWJlbHMocmVxdWVzdF93cmFwcGVyKToKICAgIHN0YXR1c19jb2RlID0gMjAyCiAgICBwcmludCgiRmV0Y2hpbmcgbGFiZWxzLiIpCiAgICB3aGlsZSBzdGF0dXNfY29kZSA9PSAyMDI6CiAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0X3dyYXBwZXIuZG9fcmVxdWVzdCgiL2FwaS92MS9kb3dubG9hZC8wL2Rvd25sb2FkIikKICAgICAgICBzdGF0dXNfY29kZSA9IHJlc3BvbnNlLnN0YXR1c19jb2RlCiAgICAgICAgaWYgc3RhdHVzX2NvZGUgPT0gMjAyOgogICAgICAgICAgICBwcmludCgiVGhlIGxhYmVzIGFyZSBiZWluZyBnZW5lcmF0ZWQgb24gdGhlIHNlcnZlciAtIHRoaXMgY291bGQgdGFrZSB1cCB0byAyIG1pbnV0ZXMuIikKICAgICAgICAgICAgcHJpbnQoIlNsZWVwaW5nIHRoZSBwcm9qZWN0IGZvciAyIG1pbnV0ZXMgLSBkbyBub3QgaW50ZXJycHV0IHRoZSBwcm9ncmFtIikKICAgICAgICAgICAgdGltZS5zbGVlcCg2MCoyKQogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGJyZWFrCiAgICBpZiBzdGF0dXNfY29kZSAhPSAyMDA6CiAgICAgICAgcHJpbnQoIkZhaWx1cmUgb24gZG93bmxvYWQgb2YgZGF0YXNldC4gQ29udGFjdCBhIFRBLiIpCiAgICAgICAgZXhpdCgpCiAgICBsYWJlbHMgPSBqc29uLmxvYWRzKHJlc3BvbnNlLnRleHQpCiAgICBsYWJlbF9wYXRoID0gZGF0YXNldF9wYXRoLmpvaW5wYXRoKCJ0cmFpbiIsICJsYWJlbHMuanNvbiIpCiAgICB3aXRoIG9wZW4obGFiZWxfcGF0aCwgInciKSBhcyBmcDoKICAgICAgICBqc29uLmR1bXAobGFiZWxzLCBmcCkKICAgIHByaW50KCJMYWJlbHMgZG93bmxvYWRlZC4iKQoKCmRlZiBtYWtlX2ltYWdlX3N5bWxpbmtzKHdvcmtfZGF0YXNldCwgdGFyZ2V0X3BhdGgpOgogICAgZm9yIHN1YnNldCBpbiBbInRlc3QiLCAidHJhaW4iXToKICAgICAgICBpbWFnZV9zb3VyY2UgPSB3b3JrX2RhdGFzZXQuam9pbnBhdGgoc3Vic2V0LCAiaW1hZ2VzIikKICAgICAgICB0YXJnZXRfcGF0aC5qb2lucGF0aChzdWJzZXQsICJpbWFnZXMiKS5zeW1saW5rX3RvKAogICAgICAgICAgICBpbWFnZV9zb3VyY2UKICAgICAgICApCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgpkZWYgZG93bmxvYWRfaW1hZ2VzKHJlcXVlc3Rfd3JhcHBlcik6CiAgICBwcmludCgiRXh0cmFjdGluZyBpbWFnZXMuIikKPHxmaW1fZW5kfD4="]
["dec90e45d623d229f5686fd1ec0007fa63b2d7e9-2","dec90e45d623d229f5686fd1ec0007fa63b2d7e9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhdGhsaWIKaW1wb3J0IHJlcXVlc3RzCmltcG9ydCB0aW1lCmltcG9ydCBqc29uCmltcG9ydCB6aXBmaWxlCmltcG9ydCB0cWRtCgoKemlwX3VybCA9ICIiCmRhdGFzZXRfcGF0aCA9IHBhdGhsaWIuUGF0aCgiZGF0YXNldHMiLCAidGR0NDI2NSIpCgojIyBUbyBza2lwIGF1dGhlbnRpY2F0aW9uCiMgZ3JvdXBfbnVtYmVyPTE1MAojIHBhc3N3b3JkPSJqSzRDOEc3TEtiQkpLZFA1eW9INVJTaGpvQyIKCgpjbGFzcyBSZXF1ZXN0V3JhcHBlcjoKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5zZXJ2ZXJfdXJsID0gImh0dHBzOi8vdGR0NDI2NS1hbm5vdGVyaW5nLmlkaS5udG51Lm5vIgogICAgICAgIHNlbGYuZ2V0X3Rva2VuKCkKCiAgICBkZWYgZ2V0X3Rva2VuKHNlbGYpOgogICAgICAgICMgZ3JvdXBfbnVtYmVyID0gaW5wdXQoImdyb3VwIG51bWJlcjoiKQogICAgICAgIGdyb3VwX251bWJlcj0xNTAKICAgICAgICAjIHRyeToKICAgICAgICAjICAgICBncm91cF9udW1iZXIgPSBpbnQoZ3JvdXBfbnVtYmVyLnN0cmlwKCkpCiAgICAgICAgIyBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICMgICAgIHByaW50KCJOb3QgYSBudW1iZXIuIFdyaXRlIGluIHlvdXIgZ3JvdXAgbnVtYmVyLiIpCiAgICAgICAgIyAgICAgZXhpdCgpCiAgICAgICAgdXNlciA9IGYiZ3JvdXB7Z3JvdXBfbnVtYmVyfSIKICAgICAgICBzZWxmLnVzZXIgPSB1c2VyCiAgICAgICAgIyBwYXNzd29yZCA9IGlucHV0KCJUeXBlIGluIHBhc3N3b3JkIChHaXZlbiBpbiB0aGUgYXNzaWdubWVudCBQREYpOiIpCiAgICAgICAgcGFzc3dvcmQ9ImpLNEM4RzdMS2JCSktkUDV5b0g1UlNoam9DIgogICAgICAgIGRhdGEgPSB7InVzZXJuYW1lIjogdXNlciwgInBhc3N3b3JkIjogcGFzc3dvcmQuc3RyaXAoKSwgImVtYWlsIjogIiJ9CiAgICAgICAgciA9IHJlcXVlc3RzLnBvc3QoZiJ7c2VsZi5zZXJ2ZXJfdXJsfS9hcGkvdjEvYXV0aC9sb2dpbiIsIGRhdGE9ZGF0YSkKICAgICAgICBpZiByLnN0YXR1c19jb2RlICE9IDIwMDoKICAgICAgICAgICAgcHJpbnQoIkNvdWxkIG5vdCBhdXRob3JpemUgeW91LiIpCiAgICAgICAgICAgIHByaW50KHIpCiAgICAgICAgICAgIGV4aXQoKQoKICAgICAgICBhdXRoX3N0cmluZyA9ICJUb2tlbiAiICsgci5qc29uKClbImtleSJdCiAgICAgICAgc2VsZi5oZWFkZXJzID0geyJBdXRob3JpemF0aW9uIjogYXV0aF9zdHJpbmd9CiAgICAgICAgcHJpbnQoIkF1dGhlbnRpY2F0aW9uIE9LLiIpCgogICAgZGVmIGRvX3JlcXVlc3Qoc2VsZiwgcGF0aCk6CiAgICAgICAgdXJsID0gZiJ7c2VsZi5zZXJ2ZXJfdXJsfXtwYXRofSIKICAgICAgICByID0gcmVxdWVzdHMuZ2V0KHVybCwgaGVhZGVycz1zZWxmLmhlYWRlcnMpCiAgICAgICAgcmV0dXJuIHIKCiAgICBkZWYgZG93bmxvYWQoc2VsZiwgcGF0aCwgdGFyZ2V0X3BhdGgpOgogICAgICAgIHVybCA9IGYie3NlbGYuc2VydmVyX3VybH17cGF0aH0iCiAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5nZXQodXJsLCBzdHJlYW09VHJ1ZSwgaGVhZGVycz1zZWxmLmhlYWRlcnMpCiAgICAgICAgdG90YWxfbGVuZ3RoID0gaW50KHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCJjb250ZW50LWxlbmd0aCIpKQogICAgICAgIGFzc2VydCByZXNwb25zZS5zdGF0dXNfY29kZSA9PSAyMDAsIFwKICAgICAgICAgICAgZiJEaWQgbm90IGRvd25sb2FkIHRoZSBpbWFnZXMuIENvbnRhY3QgdGhlIFRBLiBTdGF0dXMgY29kZToge3Jlc3BvbnNlLnN0YXR1c19jb2RlfSIKICAgICAgICB3aXRoIG9wZW4odGFyZ2V0X3BhdGgsICJ3YiIpIGFzIGZwOgogICAgICAgICAgICBmb3IgZGF0YSBpbiB0cWRtLnRxZG0oCiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuaXRlcl9jb250ZW50KGNodW5rX3NpemU9NDA5NiksIHRvdGFsPXRvdGFsX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICBkZXNjPSJEb3dubG9hZGluZyBpbWFnZXMuIik6CiAgICAgICAgICAgICAgICBmcC53cml0ZShkYXRhKQoKCmRlZiBkb3dubG9hZF9sYWJlbHMocmVxdWVzdF93cmFwcGVyKToKICAgIHN0YXR1c19jb2RlID0gMjAyCiAgICBwcmludCgiRmV0Y2hpbmcgbGFiZWxzLiIpCiAgICB3aGlsZSBzdGF0dXNfY29kZSA9PSAyMDI6CiAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0X3dyYXBwZXIuZG9fcmVxdWVzdCgiL2FwaS92MS9kb3dubG9hZC8wL2Rvd25sb2FkIikKICAgICAgICBzdGF0dXNfY29kZSA9IHJlc3BvbnNlLnN0YXR1c19jb2RlCiAgICAgICAgaWYgc3RhdHVzX2NvZGUgPT0gMjAyOgogICAgICAgICAgICBwcmludCgiVGhlIGxhYmVzIGFyZSBiZWluZyBnZW5lcmF0ZWQgb24gdGhlIHNlcnZlciAtIHRoaXMgY291bGQgdGFrZSB1cCB0byAyIG1pbnV0ZXMuIikKICAgICAgICAgICAgcHJpbnQoIlNsZWVwaW5nIHRoZSBwcm9qZWN0IGZvciAyIG1pbnV0ZXMgLSBkbyBub3QgaW50ZXJycHV0IHRoZSBwcm9ncmFtIikKICAgICAgICAgICAgdGltZS5zbGVlcCg2MCoyKQogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGJyZWFrCiAgICBpZiBzdGF0dXNfY29kZSAhPSAyMDA6CiAgICAgICAgcHJpbnQoIkZhaWx1cmUgb24gZG93bmxvYWQgb2YgZGF0YXNldC4gQ29udGFjdCBhIFRBLiIpCiAgICAgICAgZXhpdCgpCiAgICBsYWJlbHMgPSBqc29uLmxvYWRzKHJlc3BvbnNlLnRleHQpCiAgICBsYWJlbF9wYXRoID0gZGF0YXNldF9wYXRoLmpvaW5wYXRoKCJ0cmFpbiIsICJsYWJlbHMuanNvbiIpCiAgICB3aXRoIG9wZW4obGFiZWxfcGF0aCwgInciKSBhcyBmcDoKICAgICAgICBqc29uLmR1bXAobGFiZWxzLCBmcCkKICAgIHByaW50KCJMYWJlbHMgZG93bmxvYWRlZC4iKQoKCmRlZiBtYWtlX2ltYWdlX3N5bWxpbmtzKHdvcmtfZGF0YXNldCwgdGFyZ2V0X3BhdGgpOgogICAgZm9yIHN1YnNldCBpbiBbInRlc3QiLCAidHJhaW4iXToKICAgICAgICBpbWFnZV9zb3VyY2UgPSB3b3JrX2RhdGFzZXQuam9pbnBhdGgoc3Vic2V0LCAiaW1hZ2VzIikKICAgICAgICB0YXJnZXRfcGF0aC5qb2lucGF0aChzdWJzZXQsICJpbWFnZXMiKS5zeW1saW5rX3RvKAogICAgICAgICAgICBpbWFnZV9zb3VyY2UKICAgICAgICApCgoKZGVmIGRvd25sb2FkX2ltYWdlcyhyZXF1ZXN0X3dyYXBwZXIpOgogICAgcHJpbnQoIkV4dHJhY3RpbmcgaW1hZ2VzLiIpCiAgICB3b3JrX2RhdGFzZXQgPSBwYXRobGliLlBhdGgoIi93b3JrIiwgImRhdGFzZXRzIiwgInRkdDQyNjUiKQogICAgaW1hZ2VfZGlyID0gZGF0YXNldF9wYXRoLmpvaW5wYXRoKCJ0cmFpbiIsICJpbWFnZXMiKQogICAgdG9fZGVsZXRlID0gW2ltYWdlX2RpciwgaW1hZ2VfZGlyLnBhcmVudC5wYXJlbnQuam9pbnBhdGgoInRlc3QiLCAiaW1hZ2VzIildCiAgICBpZiBpbWFnZV9kaXIuaXNfZGlyKCk6CiAgICAgICAgcHJpbnQoIlRoZSBpbWFnZXMgYWxyZWFkeSBleGlzdHMuIikKICAgICAgICBwcmludChmIklmIHRoZXJlIGFyZSBhbnkgaW1hZ2VzIG1pc3NpbmcsIHlvdSBjYW4gZG93bmxvYWQgYWdhaW4sIGJ1dCBmaXJzdCB5b3UgaGF2ZSB0byBkZWxldGUgdGhlIGRpcmVjdG9yeSB7dG9fZGVsZXRlfSIpCiAgICAgICAgcmV0dXJuCjx8ZmltX2hvbGV8PgogICAgICAgIHJldHVybgogICAgemlwX3BhdGggPSBwYXRobGliLlBhdGgoImRhdGFzZXRzIiwgInRkdDQyNjUiLCAiaW1hZ2VzX21pbmkuemlwIikKICAgIGlmIG5vdCB6aXBfcGF0aC5pc19maWxlKCk6CiAgICAgICAgcHJpbnQoZiJEaWQgbm90IGZpbmQgdGhlIGltYWdlIHppcCBmaWxlLiBHbyB0bzoge3ppcF91cmx9IGFuZCBwbGFjZSBpdCBhdCB0aGUgcGF0aDoge3ppcF9wYXRofSIpCiAgICAgICAgZXhpdCgpCiAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh6aXBfcGF0aCwgInIiKSBhcyBmcDoKICAgICAgICBmcC5leHRyYWN0YWxsKGRhdGFzZXRfcGF0aCkKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAjIERvd25sb2FkIGxhYmVscwogICAgcmVxdWVzdF93cmFwcGVyID0gUmVxdWVzdFdyYXBwZXIoKQogICAgZGF0YXNldF9wYXRoLmpvaW5wYXRoKCJ0cmFpbiIpLm1rZGlyKGV4aXN0X29rPVRydWUsIHBhcmVudHM9VHJ1ZSkKICAgIGRhdGFzZXRfcGF0aC5qb2lucGF0aCgidGVzdCIpLm1rZGlyKGV4aXN0X29rPVRydWUsIHBhcmVudHM9VHJ1ZSkKICAgIGRvd25sb2FkX2ltYWdlcyhyZXF1ZXN0X3dyYXBwZXIpCiAgICBkb3dubG9hZF9sYWJlbHMocmVxdWVzdF93cmFwcGVyKQogICAgcHJpbnQoIkRhdGFzZXQgZXh0cmFjdGVkIHRvOiIsIGRhdGFzZXRfcGF0aCkKPHxmaW1fc3VmZml4fD4KICAgIGlmIHdvcmtfZGF0YXNldC5pc19kaXIoKToKICAgICAgICBwcmludCgiWW91IGFyZSB3b3JraW5nIG9uIGEgY29tcHV0ZXIgd2l0aCB0aGUgZGF0YXNldCB1bmRlciB3b3JrX2RhdGFzZXQuIikKICAgICAgICBwcmludCgiV2UncmUgZ29pbmcgdG8gY29weSBhbGwgaW1hZ2UgZmlsZXMgdG8geW91ciBkaXJlY3RvcnkiKQogICAgICAgIG1ha2VfaW1hZ2Vfc3ltbGlua3Mod29ya19kYXRhc2V0LCBkYXRhc2V0X3BhdGgpCjx8ZmltX2VuZHw+"]
["dec90e45d623d229f5686fd1ec0007fa63b2d7e9-3","dec90e45d623d229f5686fd1ec0007fa63b2d7e9","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHBhdGhsaWIKaW1wb3J0IHJlcXVlc3RzCmltcG9ydCB0aW1lCmltcG9ydCBqc29uCmltcG9ydCB6aXBmaWxlCmltcG9ydCB0cWRtCgoKemlwX3VybCA9ICIiCmRhdGFzZXRfcGF0aCA9IHBhdGhsaWIuUGF0aCgiZGF0YXNldHMiLCAidGR0NDI2NSIpCgojIyBUbyBza2lwIGF1dGhlbnRpY2F0aW9uCiMgZ3JvdXBfbnVtYmVyPTE1MAojIHBhc3N3b3JkPSJqSzRDOEc3TEtiQkpLZFA1eW9INVJTaGpvQyIKCgpjbGFzcyBSZXF1ZXN0V3JhcHBlcjoKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5zZXJ2ZXJfdXJsID0gImh0dHBzOi8vdGR0NDI2NS1hbm5vdGVyaW5nLmlkaS5udG51Lm5vIgogICAgICAgIHNlbGYuZ2V0X3Rva2VuKCkKCiAgICBkZWYgZ2V0X3Rva2VuKHNlbGYpOgogICAgICAgICMgZ3JvdXBfbnVtYmVyID0gaW5wdXQoImdyb3VwIG51bWJlcjoiKQogICAgICAgIGdyb3VwX251bWJlcj0xNTAKICAgICAgICAjIHRyeToKICAgICAgICAjICAgICBncm91cF9udW1iZXIgPSBpbnQoZ3JvdXBfbnVtYmVyLnN0cmlwKCkpCiAgICAgICAgIyBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICMgICAgIHByaW50KCJOb3QgYSBudW1iZXIuIFdyaXRlIGluIHlvdXIgZ3JvdXAgbnVtYmVyLiIpCiAgICAgICAgIyAgICAgZXhpdCgpCiAgICAgICAgdXNlciA9IGYiZ3JvdXB7Z3JvdXBfbnVtYmVyfSIKICAgICAgICBzZWxmLnVzZXIgPSB1c2VyCiAgICAgICAgIyBwYXNzd29yZCA9IGlucHV0KCJUeXBlIGluIHBhc3N3b3JkIChHaXZlbiBpbiB0aGUgYXNzaWdubWVudCBQREYpOiIpCiAgICAgICAgcGFzc3dvcmQ9ImpLNEM4RzdMS2JCSktkUDV5b0g1UlNoam9DIgogICAgICAgIGRhdGEgPSB7InVzZXJuYW1lIjogdXNlciwgInBhc3N3b3JkIjogcGFzc3dvcmQuc3RyaXAoKSwgImVtYWlsIjogIiJ9CiAgICAgICAgciA9IHJlcXVlc3RzLnBvc3QoZiJ7c2VsZi5zZXJ2ZXJfdXJsfS9hcGkvdjEvYXV0aC9sb2dpbiIsIGRhdGE9ZGF0YSkKICAgICAgICBpZiByLnN0YXR1c19jb2RlICE9IDIwMDoKICAgICAgICAgICAgcHJpbnQoIkNvdWxkIG5vdCBhdXRob3JpemUgeW91LiIpCiAgICAgICAgICAgIHByaW50KHIpCiAgICAgICAgICAgIGV4aXQoKQoKICAgICAgICBhdXRoX3N0cmluZyA9ICJUb2tlbiAiICsgci5qc29uKClbImtleSJdCiAgICAgICAgc2VsZi5oZWFkZXJzID0geyJBdXRob3JpemF0aW9uIjogYXV0aF9zdHJpbmd9CiAgICAgICAgcHJpbnQoIkF1dGhlbnRpY2F0aW9uIE9LLiIpCgogICAgZGVmIGRvX3JlcXVlc3Qoc2VsZiwgcGF0aCk6CiAgICAgICAgdXJsID0gZiJ7c2VsZi5zZXJ2ZXJfdXJsfXtwYXRofSIKICAgICAgICByID0gcmVxdWVzdHMuZ2V0KHVybCwgaGVhZGVycz1zZWxmLmhlYWRlcnMpCiAgICAgICAgcmV0dXJuIHIKCiAgICBkZWYgZG93bmxvYWQoc2VsZiwgcGF0aCwgdGFyZ2V0X3BhdGgpOgogICAgICAgIHVybCA9IGYie3NlbGYuc2VydmVyX3VybH17cGF0aH0iCiAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5nZXQodXJsLCBzdHJlYW09VHJ1ZSwgaGVhZGVycz1zZWxmLmhlYWRlcnMpCiAgICAgICAgdG90YWxfbGVuZ3RoID0gaW50KHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCJjb250ZW50LWxlbmd0aCIpKQogICAgICAgIGFzc2VydCByZXNwb25zZS5zdGF0dXNfY29kZSA9PSAyMDAsIFwKICAgICAgICAgICAgZiJEaWQgbm90IGRvd25sb2FkIHRoZSBpbWFnZXMuIENvbnRhY3QgdGhlIFRBLiBTdGF0dXMgY29kZToge3Jlc3BvbnNlLnN0YXR1c19jb2RlfSIKICAgICAgICB3aXRoIG9wZW4odGFyZ2V0X3BhdGgsICJ3YiIpIGFzIGZwOgogICAgICAgICAgICBmb3IgZGF0YSBpbiB0cWRtLnRxZG0oCiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuaXRlcl9jb250ZW50KGNodW5rX3NpemU9NDA5NiksIHRvdGFsPXRvdGFsX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICBkZXNjPSJEb3dubG9hZGluZyBpbWFnZXMuIik6CiAgICAgICAgICAgICAgICBmcC53cml0ZShkYXRhKQoKCmRlZiBkb3dubG9hZF9sYWJlbHMocmVxdWVzdF93cmFwcGVyKToKICAgIHN0YXR1c19jb2RlID0gMjAyCiAgICBwcmludCgiRmV0Y2hpbmcgbGFiZWxzLiIpCiAgICB3aGlsZSBzdGF0dXNfY29kZSA9PSAyMDI6CiAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0X3dyYXBwZXIuZG9fcmVxdWVzdCgiL2FwaS92MS9kb3dubG9hZC8wL2Rvd25sb2FkIikKICAgICAgICBzdGF0dXNfY29kZSA9IHJlc3BvbnNlLnN0YXR1c19jb2RlCiAgICAgICAgaWYgc3RhdHVzX2NvZGUgPT0gMjAyOgogICAgICAgICAgICBwcmludCgiVGhlIGxhYmVzIGFyZSBiZWluZyBnZW5lcmF0ZWQgb24gdGhlIHNlcnZlciAtIHRoaXMgY291bGQgdGFrZSB1cCB0byAyIG1pbnV0ZXMuIikKICAgICAgICAgICAgcHJpbnQoIlNsZWVwaW5nIHRoZSBwcm9qZWN0IGZvciAyIG1pbnV0ZXMgLSBkbyBub3QgaW50ZXJycHV0IHRoZSBwcm9ncmFtIikKICAgICAgICAgICAgdGltZS5zbGVlcCg2MCoyKQogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGJyZWFrCiAgICBpZiBzdGF0dXNfY29kZSAhPSAyMDA6CiAgICAgICAgcHJpbnQoIkZhaWx1cmUgb24gZG93bmxvYWQgb2YgZGF0YXNldC4gQ29udGFjdCBhIFRBLiIpCiAgICAgICAgZXhpdCgpCiAgICBsYWJlbHMgPSBqc29uLmxvYWRzKHJlc3BvbnNlLnRleHQpCiAgICBsYWJlbF9wYXRoID0gZGF0YXNldF9wYXRoLmpvaW5wYXRoKCJ0cmFpbiIsICJsYWJlbHMuanNvbiIpCiAgICB3aXRoIG9wZW4obGFiZWxfcGF0aCwgInciKSBhcyBmcDoKICAgICAgICBqc29uLmR1bXAobGFiZWxzLCBmcCkKICAgIHByaW50KCJMYWJlbHMgZG93bmxvYWRlZC4iKQoKCmRlZiBtYWtlX2ltYWdlX3N5bWxpbmtzKHdvcmtfZGF0YXNldCwgdGFyZ2V0X3BhdGgpOgogICAgZm9yIHN1YnNldCBpbiBbInRlc3QiLCAidHJhaW4iXToKICAgICAgICBpbWFnZV9zb3VyY2UgPSB3b3JrX2RhdGFzZXQuam9pbnBhdGgoc3Vic2V0LCAiaW1hZ2VzIikKICAgICAgICB0YXJnZXRfcGF0aC5qb2lucGF0aChzdWJzZXQsICJpbWFnZXMiKS5zeW1saW5rX3RvKAogICAgICAgICAgICBpbWFnZV9zb3VyY2UKICAgICAgICApCgoKZGVmIGRvd25sb2FkX2ltYWdlcyhyZXF1ZXN0X3dyYXBwZXIpOgogICAgcHJpbnQoIkV4dHJhY3RpbmcgaW1hZ2VzLiIpCiAgICB3b3JrX2RhdGFzZXQgPSBwYXRobGliLlBhdGgoIi93b3JrIiwgImRhdGFzZXRzIiwgInRkdDQyNjUiKQogICAgaW1hZ2VfZGlyID0gZGF0YXNldF9wYXRoLmpvaW5wYXRoKCJ0cmFpbiIsICJpbWFnZXMiKQogICAgdG9fZGVsZXRlID0gW2ltYWdlX2RpciwgaW1hZ2VfZGlyLnBhcmVudC5wYXJlbnQuam9pbnBhdGgoInRlc3QiLCAiaW1hZ2VzIildCiAgICBpZiBpbWFnZV9kaXIuaXNfZGlyKCk6CiAgICAgICAgcHJpbnQoIlRoZSBpbWFnZXMgYWxyZWFkeSBleGlzdHMuIikKICAgICAgICBwcmludChmIklmIHRoZXJlIGFyZSBhbnkgaW1hZ2VzIG1pc3NpbmcsIHlvdSBjYW4gZG93bmxvYWQgYWdhaW4sIGJ1dCBmaXJzdCB5b3UgaGF2ZSB0byBkZWxldGUgdGhlIGRpcmVjdG9yeSB7dG9fZGVsZXRlfSIpCiAgICAgICAgcmV0dXJuCiAgICBpZiB3b3JrX2RhdGFzZXQuaXNfZGlyKCk6CiAgICAgICAgcHJpbnQoIllvdSBhcmUgd29ya2luZyBvbiBhIGNvbXB1dGVyIHdpdGggdGhlIGRhdGFzZXQgdW5kZXIgd29ya19kYXRhc2V0LiIpCiAgICAgICAgcHJpbnQoIldlJ3JlIGdvaW5nIHRvIGNvcHkgYWxsIGltYWdlIGZpbGVzIHRvIHlvdXIgZGlyZWN0b3J5IikKICAgICAgICBtYWtlX2ltYWdlX3N5bWxpbmtzKHdvcmtfZGF0YXNldCwgZGF0YXNldF9wYXRoKQogICAgICAgIHJldHVybgogICAgemlwX3BhdGggPSBwYXRobGliLlBhdGgoImRhdGFzZXRzIiwgInRkdDQyNjUiLCAiaW1hZ2VzX21pbmkuemlwIikKICAgIGlmIG5vdCB6aXBfcGF0aC5pc19maWxlKCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBwcmludChmIkRpZCBub3QgZmluZCB0aGUgaW1hZ2UgemlwIGZpbGUuIEdvIHRvOiB7emlwX3VybH0gYW5kIHBsYWNlIGl0IGF0IHRoZSBwYXRoOiB7emlwX3BhdGh9IikKICAgICAgICBleGl0KCkKPHxmaW1fZW5kfD4="]
["260d210fc73da1ae0c3e1bb20491788b779d5b48-1","260d210fc73da1ae0c3e1bb20491788b779d5b48","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cgpmcm9tIHR5cGluZyBpbXBvcnQgVFlQRV9DSEVDS0lORywgTGlzdCwgTGl0ZXJhbCwgVHlwZWREaWN0Cgpmcm9tIHR5cGluZ19leHRlbnNpb25zIGltcG9ydCBOb3RSZXF1aXJlZAo8fGZpbV9lbmR8Pg=="]
["260d210fc73da1ae0c3e1bb20491788b779d5b48-2","260d210fc73da1ae0c3e1bb20491788b779d5b48","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKZnJvbSB0eXBpbmcgaW1wb3J0IFRZUEVfQ0hFQ0tJTkcsIExpc3QsIExpdGVyYWwsIFR5cGVkRGljdAoKZnJvbSB0eXBpbmdfZXh0ZW5zaW9ucyBpbXBvcnQgTm90UmVxdWlyZWQKCmlmIFRZUEVfQ0hFQ0tJTkc6CiAgICBmcm9tIC5maWxlIGltcG9ydCBGaWxlUGF5bG9hZAoKUmVsYXRpb25QYXlsb2FkID0gTGl0ZXJhbFsiQmxvY2siLCAiQmxvY2tlZE90aGVyIiwgIkZyaWVuZCIsICJJbmNvbWluZyIsICJOb25lIiwgIk91dGdvaW5nIiwgIlVzZXIiXQoKCmNsYXNzIFVzZXJCb3RQYXlsb2FkKFR5cGVkRGljdCk6CiAgICBvd25lcjogc3RyCgoKY2xhc3MgU3RhdHVzUGF5bG9hZChUeXBlZERpY3QpOgogICAgdGV4dDogTm90UmVxdWlyZWRbc3RyXQogICAgcHJlc2VuY2U6IE5vdFJlcXVpcmVkW0xpdGVyYWxbIkJ1c3kiLCAiSWRsZSIsICJPbmxpbmUiLCAiSW52aXNpYmxlIl1dCgoKY2xhc3MgVXNlclJlbGF0aW9uUGF5bG9hZChUeXBlZERpY3QpOgogICAgc3RhdHVzOiBSZWxhdGlvblBheWxvYWQKICAgIF9pZDogc3RyCgoKY2xhc3MgVXNlclBheWxvYWQoVHlwZWREaWN0KToKPHxmaW1faG9sZXw+CiAgICByZWxhdGlvbnM6IE5vdFJlcXVpcmVkW0xpc3RbVXNlclJlbGF0aW9uUGF5bG9hZF1dCiAgICBiYWRnZXM6IE5vdFJlcXVpcmVkW2ludF0KICAgIHN0YXR1czogTm90UmVxdWlyZWRbU3RhdHVzUGF5bG9hZF0KICAgIG9ubGluZTogTm90UmVxdWlyZWRbYm9vbF0KICAgIHJlbGF0aW9uc2hpcDogTm90UmVxdWlyZWRbVXNlclJlbGF0aW9uUGF5bG9hZF0KICAgIGZsYWdzOiBOb3RSZXF1aXJlZFtpbnRdCgoKY2xhc3MgVXNlclByb2ZpbGVQYXlsb2FkKFR5cGVkRGljdCk6CiAgICBjb250ZW50OiBOb3RSZXF1aXJlZFtzdHJdCiAgICBiYWNrZ3JvdW5kOiBOb3RSZXF1aXJlZFtGaWxlUGF5bG9hZF0KPHxmaW1fc3VmZml4fD4KICAgIF9pZDogc3RyCiAgICB1c2VybmFtZTogc3RyCiAgICBhdmF0YXI6IE5vdFJlcXVpcmVkW0ZpbGVQYXlsb2FkXQogICAgYm90OiBOb3RSZXF1aXJlZFtVc2VyQm90UGF5bG9hZF0KPHxmaW1fZW5kfD4="]
["ffe45ef816f7c3151eefa348a03d0f9f2cddf4d8-1","ffe45ef816f7c3151eefa348a03d0f9f2cddf4d8","PHxmaW1fcHJlZml4fD4KaW1wb3J0IFB5UGx1TUEKCgpjbGFzcyBQaHlsb1NlcUZpbHRlclBsdWdpbjoKICAgIGRlZiBpbnB1dChzZWxmLCBmaWxlbmFtZSk6CiAgICAgIHNlbGYucGFyYW1ldGVycyA9IGRpY3QoKQogICAgICBwYXJhbWZpbGUgPSBvcGVuKGZpbGVuYW1lLCAncicpCiAgICAgIGZvciBsaW5lIGluIHBhcmFtZmlsZToKICAgICAgICAgY29udGVudHMgPSBsaW5lLnNwbGl0KCdcdCcpCiAgICAgICAgIHNlbGYucGFyYW1ldGVyc1tjb250ZW50c1swXV0gPSBjb250ZW50c1sxXS5zdHJpcCgpCgogICAgICBzZWxmLm90dV9maWxlID0gb3BlbihQeVBsdU1BLnByZWZpeCgpKyIvIitzZWxmLnBhcmFtZXRlcnNbIk9UVSJdLCAncicpCiAgICAgIHNlbGYudGF4X2ZpbGUgPSBvcGVuKFB5UGx1TUEucHJlZml4KCkrIi8iK3NlbGYucGFyYW1ldGVyc1siVEFYIl0sICdyJykKICAgICAgc2FtcGxlX2ZpbGUgPW9wZW4oUHlQbHVNQS5wcmVmaXgoKSsiLyIrc2VsZi5wYXJhbWV0ZXJzWyJNRVRBIl0sICdyJykKICAgICAgc2VsZi50aHJlc2hvbGQgPSBmbG9hdChzZWxmLnBhcmFtZXRlcnNbInRocmVzaG9sZCJdKQogICAgICAjSWRlYTogWmVybyBvdXQgKGRvbid0IHJlbW92ZSkgT1RVcyBpbiBsZXNzIHRoYW4gNTAlIG9mIGEgY2F0ZWdvcnkgc2V0CiAgICAgICMgVGhlbiBvbmNlIGV2ZXJ5dGhpbmcgaXMgZG9uZSwgcmVtb3ZlIHRob3NlIHdpdGggemVybyBvdmVyIGFsbCBzYW1wbGVzCgogICAgICBzYW1wbGVfZmlsZS5yZWFkbGluZSgpCiAgICAgIGN1cl9zYW1wbGUgPSAiQkxBSCIKICAgICAgY3VyX3NhbXBsZV9pZHggPSAtMQogICAgICBzZWxmLmNhdGVnb3JpZXMgPSBbLTFdCiAgICAgIGZvciBsaW5lIGluIHNhbXBsZV9maWxlOgogICAgICAgICBjb250ZW50cyA9IGxpbmUuc3RyaXAoKS5zcGxpdCgiLCIpCiAgICAgICAgIGlmIChjb250ZW50c1sxXSAhPSBjdXJfc2FtcGxlKToKICAgICAgICAgICAgIGN1cl9zYW1wbGUgPSBjb250ZW50c1sxXQogICAgICAgICAgICAgY3VyX3NhbXBsZV9pZHggKz0gMQogICAgICAgICBzZWxmLmNhdGVnb3JpZXMuYXBwZW5kKGN1cl9zYW1wbGVfaWR4KQoKICAgIGRlZiBydW4oc2VsZik6CiAgICAgICBwYXNzCgogICAgZGVmIG91dHB1dChzZWxmLCBmaWxlbmFtZSk6CiAgICAgIG90dV9maWx0ZXJfZmlsZSA9IG9wZW4oZmlsZW5hbWUrIi8iK3NlbGYucGFyYW1ldGVyc1siT1RVRmlsdGVyIl0sICd3JykKICAgICAgb3R1X2ZpbHRlcl9maWxlLndyaXRlKHNlbGYub3R1X2ZpbGUucmVhZGxpbmUoKSkKCiAgICAgIHRvUmVtb3ZlID0gW10KICAgICAgZm9yIGxpbmUgaW4gc2VsZi5vdHVfZmlsZToKICAgICAgICAgIGNvbnRlbnRzID0gbGluZS5zdHJpcCgpLnNwbGl0KCcsJykKICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihjb250ZW50cykpOgogICAgICAgICAgICAgIGNhdCA9IHNlbGYuY2F0ZWdvcmllc1tpXQogICAgICAgICAgICAgIGlmIChjYXQgIT0gLTEpOgogICAgICAgICAgICAgICAgICBpZiAoY2F0ICE9IG9sZGNhdCk6CiAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNhdCAhPSAwKSBhbmQgKG51bWtpdHRlbnMvbnVtY2F0cyA8IChzZWxmLnRocmVzaG9sZC9mbG9hdCgxMDApKSkpOgogICAgICAgICAgICAgICAgICAgICAgICAgICMgV2FsayBiYWNrd2FyZHMsIHplcm8gb3V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IGktMQogICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzZWxmLmNhdGVnb3JpZXNbal0gPT0gb2xkY2F0KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNbal0gPSBzdHIoMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiAtPSAxCiAgICAgICAgICAgICAgICAgICAgICAjZWxpZiAoY2F0ICE9IDApOgogICAgICAgICAgICAgICAgICAgICAgIyAgICBwcmludCgiS0VFUElORzogIitzdHIobnVta2l0dGVucykrIiAiK3N0cihudW1jYXRzKSkKICAgICAgICAgICAgICAgICAgICAgIG51bWtpdHRlbnMgPSAwLjAKICAgICAgICAgICAgICAgICAgICAgIG51bWNhdHMgPSAwLjAKICAgICAgICAgICAgICAgICAgICAgIGlmIChmbG9hdChjb250ZW50c1tpXSkgIT0gMCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBudW1raXR0ZW5zICs9IDEuMAogICAgICAgICAgICAgICAgICAgICAgbnVtY2F0cyArPSAxLjAKICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgIGlmIChmbG9hdChjb250ZW50c1tpXSkgIT0gMCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBudW1raXR0ZW5zICs9IDEuMAogICAgICAgICAgICAgICAgICAgICAgbnVtY2F0cyArPSAxLjAKICAgICAgICAgICAgICBvbGRjYXQgPSBjYXQKICAgICAgICAgICMgT25lIGZpbmFsIHRpbWUKICAgICAgICAgIGlmIChudW1raXR0ZW5zL251bWNhdHMgPCAoc2VsZi50aHJlc2hvbGQvZmxvYXQoMTAwKSkpOgogICAgICAgICAgICAgaiA9IGxlbihjb250ZW50cyktMQogICAgICAgICAgICAgd2hpbGUgKHNlbGYuY2F0ZWdvcmllc1tqXSA9PSBvbGRjYXQpOgogICAgICAgICAgICAgICAgY29udGVudHNbal0gPSBzdHIoMCkKICAgICAgICAgICAgICAgIGogLT0gMQogICAgICAgICAgI2Vsc2U6CiAgICAgICAgICAjICAgcHJpbnQoIktFRVBJTkc6ICIrc3RyKG51bWtpdHRlbnMpKyIgIitzdHIobnVtY2F0cykpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgICAjIElmIGFsbCBhcmUgemVybywgYWRkIHRvIHJlbW92ZSBzZXQKICAgICAgICAgIHplcm9GbGFnID0gVHJ1ZQogICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKGNvbnRlbnRzKSk6Cjx8ZmltX2VuZHw+"]
["ffe45ef816f7c3151eefa348a03d0f9f2cddf4d8-2","ffe45ef816f7c3151eefa348a03d0f9f2cddf4d8","PHxmaW1fcHJlZml4fD4KaW1wb3J0IFB5UGx1TUEKCgpjbGFzcyBQaHlsb1NlcUZpbHRlclBsdWdpbjoKICAgIGRlZiBpbnB1dChzZWxmLCBmaWxlbmFtZSk6CiAgICAgIHNlbGYucGFyYW1ldGVycyA9IGRpY3QoKQogICAgICBwYXJhbWZpbGUgPSBvcGVuKGZpbGVuYW1lLCAncicpCiAgICAgIGZvciBsaW5lIGluIHBhcmFtZmlsZToKICAgICAgICAgY29udGVudHMgPSBsaW5lLnNwbGl0KCdcdCcpCiAgICAgICAgIHNlbGYucGFyYW1ldGVyc1tjb250ZW50c1swXV0gPSBjb250ZW50c1sxXS5zdHJpcCgpCgogICAgICBzZWxmLm90dV9maWxlID0gb3BlbihQeVBsdU1BLnByZWZpeCgpKyIvIitzZWxmLnBhcmFtZXRlcnNbIk9UVSJdLCAncicpCiAgICAgIHNlbGYudGF4X2ZpbGUgPSBvcGVuKFB5UGx1TUEucHJlZml4KCkrIi8iK3NlbGYucGFyYW1ldGVyc1siVEFYIl0sICdyJykKICAgICAgc2FtcGxlX2ZpbGUgPW9wZW4oUHlQbHVNQS5wcmVmaXgoKSsiLyIrc2VsZi5wYXJhbWV0ZXJzWyJNRVRBIl0sICdyJykKICAgICAgc2VsZi50aHJlc2hvbGQgPSBmbG9hdChzZWxmLnBhcmFtZXRlcnNbInRocmVzaG9sZCJdKQogICAgICAjSWRlYTogWmVybyBvdXQgKGRvbid0IHJlbW92ZSkgT1RVcyBpbiBsZXNzIHRoYW4gNTAlIG9mIGEgY2F0ZWdvcnkgc2V0CiAgICAgICMgVGhlbiBvbmNlIGV2ZXJ5dGhpbmcgaXMgZG9uZSwgcmVtb3ZlIHRob3NlIHdpdGggemVybyBvdmVyIGFsbCBzYW1wbGVzCgogICAgICBzYW1wbGVfZmlsZS5yZWFkbGluZSgpCiAgICAgIGN1cl9zYW1wbGUgPSAiQkxBSCIKICAgICAgY3VyX3NhbXBsZV9pZHggPSAtMQogICAgICBzZWxmLmNhdGVnb3JpZXMgPSBbLTFdCiAgICAgIGZvciBsaW5lIGluIHNhbXBsZV9maWxlOgogICAgICAgICBjb250ZW50cyA9IGxpbmUuc3RyaXAoKS5zcGxpdCgiLCIpCiAgICAgICAgIGlmIChjb250ZW50c1sxXSAhPSBjdXJfc2FtcGxlKToKICAgICAgICAgICAgIGN1cl9zYW1wbGUgPSBjb250ZW50c1sxXQogICAgICAgICAgICAgY3VyX3NhbXBsZV9pZHggKz0gMQogICAgICAgICBzZWxmLmNhdGVnb3JpZXMuYXBwZW5kKGN1cl9zYW1wbGVfaWR4KQoKICAgIGRlZiBydW4oc2VsZik6CiAgICAgICBwYXNzCgogICAgZGVmIG91dHB1dChzZWxmLCBmaWxlbmFtZSk6CiAgICAgIG90dV9maWx0ZXJfZmlsZSA9IG9wZW4oZmlsZW5hbWUrIi8iK3NlbGYucGFyYW1ldGVyc1siT1RVRmlsdGVyIl0sICd3JykKICAgICAgb3R1X2ZpbHRlcl9maWxlLndyaXRlKHNlbGYub3R1X2ZpbGUucmVhZGxpbmUoKSkKCiAgICAgIHRvUmVtb3ZlID0gW10KICAgICAgZm9yIGxpbmUgaW4gc2VsZi5vdHVfZmlsZToKICAgICAgICAgIGNvbnRlbnRzID0gbGluZS5zdHJpcCgpLnNwbGl0KCcsJykKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNhdCAhPSAwKSBhbmQgKG51bWtpdHRlbnMvbnVtY2F0cyA8IChzZWxmLnRocmVzaG9sZC9mbG9hdCgxMDApKSkpOgogICAgICAgICAgICAgICAgICAgICAgICAgICMgV2FsayBiYWNrd2FyZHMsIHplcm8gb3V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IGktMQogICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzZWxmLmNhdGVnb3JpZXNbal0gPT0gb2xkY2F0KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNbal0gPSBzdHIoMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiAtPSAxCiAgICAgICAgICAgICAgICAgICAgICAjZWxpZiAoY2F0ICE9IDApOgogICAgICAgICAgICAgICAgICAgICAgIyAgICBwcmludCgiS0VFUElORzogIitzdHIobnVta2l0dGVucykrIiAiK3N0cihudW1jYXRzKSkKICAgICAgICAgICAgICAgICAgICAgIG51bWtpdHRlbnMgPSAwLjAKICAgICAgICAgICAgICAgICAgICAgIG51bWNhdHMgPSAwLjAKICAgICAgICAgICAgICAgICAgICAgIGlmIChmbG9hdChjb250ZW50c1tpXSkgIT0gMCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBudW1raXR0ZW5zICs9IDEuMAogICAgICAgICAgICAgICAgICAgICAgbnVtY2F0cyArPSAxLjAKICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgIGlmIChmbG9hdChjb250ZW50c1tpXSkgIT0gMCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBudW1raXR0ZW5zICs9IDEuMAogICAgICAgICAgICAgICAgICAgICAgbnVtY2F0cyArPSAxLjAKICAgICAgICAgICAgICBvbGRjYXQgPSBjYXQKICAgICAgICAgICMgT25lIGZpbmFsIHRpbWUKICAgICAgICAgIGlmIChudW1raXR0ZW5zL251bWNhdHMgPCAoc2VsZi50aHJlc2hvbGQvZmxvYXQoMTAwKSkpOgogICAgICAgICAgICAgaiA9IGxlbihjb250ZW50cyktMQogICAgICAgICAgICAgd2hpbGUgKHNlbGYuY2F0ZWdvcmllc1tqXSA9PSBvbGRjYXQpOgogICAgICAgICAgICAgICAgY29udGVudHNbal0gPSBzdHIoMCkKICAgICAgICAgICAgICAgIGogLT0gMQogICAgICAgICAgI2Vsc2U6CiAgICAgICAgICAjICAgcHJpbnQoIktFRVBJTkc6ICIrc3RyKG51bWtpdHRlbnMpKyIgIitzdHIobnVtY2F0cykpCgogICAgICAgICAgIyBJZiBhbGwgYXJlIHplcm8sIGFkZCB0byByZW1vdmUgc2V0CiAgICAgICAgICB6ZXJvRmxhZyA9IFRydWUKICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihjb250ZW50cykpOgogICAgICAgICAgICAgIGlmIChmbG9hdChjb250ZW50c1tpXSkgIT0gMCk6CiAgICAgICAgICAgICAgICAgemVyb0ZsYWcgPSBGYWxzZQogICAgICAgICAgaWYgKHplcm9GbGFnKToKICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoY29udGVudHNbMF0pCiAgICAgICAgICAgICAgI3ByaW50KCJSRU1PVklORyAiK2NvbnRlbnRzWzBdKQogICAgICAgICAgZWxzZToKICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oY29udGVudHMpKToKICAgICAgICAgICAgICAgIG90dV9maWx0ZXJfZmlsZS53cml0ZShjb250ZW50c1tpXSkKICAgICAgICAgICAgICAgIGlmIChpID09IGxlbihjb250ZW50cyktMSk6CiAgICAgICAgICAgICAgICAgIG90dV9maWx0ZXJfZmlsZS53cml0ZSgnXG4nKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgb3R1X2ZpbHRlcl9maWxlLndyaXRlKCcsJykKICAgICAgCiAgICAgIAogICAgICAKICAgICAgdGF4X2ZpbHRlcl9maWxlID0gb3BlbihmaWxlbmFtZSsiLyIrc2VsZi5wYXJhbWV0ZXJzWyJUQVhGaWx0ZXIiXSwgJ3cnKQogICAgICB0YXhfZmlsdGVyX2ZpbGUud3JpdGUoc2VsZi50YXhfZmlsZS5yZWFkbGluZSgpKSAjSGVhZGVyCiAgICAgIAogICAgICAKICAgICAgZm9yIGxpbmUgaW4gc2VsZi50YXhfZmlsZToKICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKICAgICAgICAgIGNvbnRlbnRzID0gbGluZS5zcGxpdCgnLCcpCiAgICAgIAogICAgICAgICAgaWYgKGNvbnRlbnRzWzBdIG5vdCBpbiB0b1JlbW92ZSk6CiAgICAgICAgICAgICAgdGF4X2ZpbHRlcl9maWxlLndyaXRlKGxpbmUrIlxuIikKCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oY29udGVudHMpKToKICAgICAgICAgICAgICBjYXQgPSBzZWxmLmNhdGVnb3JpZXNbaV0KICAgICAgICAgICAgICBpZiAoY2F0ICE9IC0xKToKICAgICAgICAgICAgICAgICAgaWYgKGNhdCAhPSBvbGRjYXQpOgo8fGZpbV9lbmR8Pg=="]
["ffe45ef816f7c3151eefa348a03d0f9f2cddf4d8-3","ffe45ef816f7c3151eefa348a03d0f9f2cddf4d8","PHxmaW1fcHJlZml4fD4KaW1wb3J0IFB5UGx1TUEKCgpjbGFzcyBQaHlsb1NlcUZpbHRlclBsdWdpbjoKICAgIGRlZiBpbnB1dChzZWxmLCBmaWxlbmFtZSk6CiAgICAgIHNlbGYucGFyYW1ldGVycyA9IGRpY3QoKQogICAgICBwYXJhbWZpbGUgPSBvcGVuKGZpbGVuYW1lLCAncicpCiAgICAgIGZvciBsaW5lIGluIHBhcmFtZmlsZToKICAgICAgICAgY29udGVudHMgPSBsaW5lLnNwbGl0KCdcdCcpCiAgICAgICAgIHNlbGYucGFyYW1ldGVyc1tjb250ZW50c1swXV0gPSBjb250ZW50c1sxXS5zdHJpcCgpCgogICAgICBzZWxmLm90dV9maWxlID0gb3BlbihQeVBsdU1BLnByZWZpeCgpKyIvIitzZWxmLnBhcmFtZXRlcnNbIk9UVSJdLCAncicpCiAgICAgIHNlbGYudGF4X2ZpbGUgPSBvcGVuKFB5UGx1TUEucHJlZml4KCkrIi8iK3NlbGYucGFyYW1ldGVyc1siVEFYIl0sICdyJykKICAgICAgc2FtcGxlX2ZpbGUgPW9wZW4oUHlQbHVNQS5wcmVmaXgoKSsiLyIrc2VsZi5wYXJhbWV0ZXJzWyJNRVRBIl0sICdyJykKICAgICAgc2VsZi50aHJlc2hvbGQgPSBmbG9hdChzZWxmLnBhcmFtZXRlcnNbInRocmVzaG9sZCJdKQogICAgICAjSWRlYTogWmVybyBvdXQgKGRvbid0IHJlbW92ZSkgT1RVcyBpbiBsZXNzIHRoYW4gNTAlIG9mIGEgY2F0ZWdvcnkgc2V0CiAgICAgICMgVGhlbiBvbmNlIGV2ZXJ5dGhpbmcgaXMgZG9uZSwgcmVtb3ZlIHRob3NlIHdpdGggemVybyBvdmVyIGFsbCBzYW1wbGVzCgogICAgICBzYW1wbGVfZmlsZS5yZWFkbGluZSgpCiAgICAgIGN1cl9zYW1wbGUgPSAiQkxBSCIKICAgICAgY3VyX3NhbXBsZV9pZHggPSAtMQogICAgICBzZWxmLmNhdGVnb3JpZXMgPSBbLTFdCiAgICAgIGZvciBsaW5lIGluIHNhbXBsZV9maWxlOgogICAgICAgICBjb250ZW50cyA9IGxpbmUuc3RyaXAoKS5zcGxpdCgiLCIpCiAgICAgICAgIGlmIChjb250ZW50c1sxXSAhPSBjdXJfc2FtcGxlKToKICAgICAgICAgICAgIGN1cl9zYW1wbGUgPSBjb250ZW50c1sxXQogICAgICAgICAgICAgY3VyX3NhbXBsZV9pZHggKz0gMQo8fGZpbV9ob2xlfD4KICAgIGRlZiBydW4oc2VsZik6CiAgICAgICBwYXNzCgogICAgZGVmIG91dHB1dChzZWxmLCBmaWxlbmFtZSk6CiAgICAgIG90dV9maWx0ZXJfZmlsZSA9IG9wZW4oZmlsZW5hbWUrIi8iK3NlbGYucGFyYW1ldGVyc1siT1RVRmlsdGVyIl0sICd3JykKICAgICAgb3R1X2ZpbHRlcl9maWxlLndyaXRlKHNlbGYub3R1X2ZpbGUucmVhZGxpbmUoKSkKCiAgICAgIHRvUmVtb3ZlID0gW10KICAgICAgZm9yIGxpbmUgaW4gc2VsZi5vdHVfZmlsZToKICAgICAgICAgIGNvbnRlbnRzID0gbGluZS5zdHJpcCgpLnNwbGl0KCcsJykKICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihjb250ZW50cykpOgogICAgICAgICAgICAgIGNhdCA9IHNlbGYuY2F0ZWdvcmllc1tpXQogICAgICAgICAgICAgIGlmIChjYXQgIT0gLTEpOgogICAgICAgICAgICAgICAgICBpZiAoY2F0ICE9IG9sZGNhdCk6CiAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNhdCAhPSAwKSBhbmQgKG51bWtpdHRlbnMvbnVtY2F0cyA8IChzZWxmLnRocmVzaG9sZC9mbG9hdCgxMDApKSkpOgogICAgICAgICAgICAgICAgICAgICAgICAgICMgV2FsayBiYWNrd2FyZHMsIHplcm8gb3V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IGktMQogICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzZWxmLmNhdGVnb3JpZXNbal0gPT0gb2xkY2F0KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNbal0gPSBzdHIoMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiAtPSAxCiAgICAgICAgICAgICAgICAgICAgICAjZWxpZiAoY2F0ICE9IDApOgogICAgICAgICAgICAgICAgICAgICAgIyAgICBwcmludCgiS0VFUElORzogIitzdHIobnVta2l0dGVucykrIiAiK3N0cihudW1jYXRzKSkKICAgICAgICAgICAgICAgICAgICAgIG51bWtpdHRlbnMgPSAwLjAKICAgICAgICAgICAgICAgICAgICAgIG51bWNhdHMgPSAwLjAKICAgICAgICAgICAgICAgICAgICAgIGlmIChmbG9hdChjb250ZW50c1tpXSkgIT0gMCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBudW1raXR0ZW5zICs9IDEuMAogICAgICAgICAgICAgICAgICAgICAgbnVtY2F0cyArPSAxLjAKICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgIGlmIChmbG9hdChjb250ZW50c1tpXSkgIT0gMCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBudW1raXR0ZW5zICs9IDEuMAogICAgICAgICAgICAgICAgICAgICAgbnVtY2F0cyArPSAxLjAKICAgICAgICAgICAgICBvbGRjYXQgPSBjYXQKICAgICAgICAgICMgT25lIGZpbmFsIHRpbWUKICAgICAgICAgIGlmIChudW1raXR0ZW5zL251bWNhdHMgPCAoc2VsZi50aHJlc2hvbGQvZmxvYXQoMTAwKSkpOgogICAgICAgICAgICAgaiA9IGxlbihjb250ZW50cyktMQogICAgICAgICAgICAgd2hpbGUgKHNlbGYuY2F0ZWdvcmllc1tqXSA9PSBvbGRjYXQpOgogICAgICAgICAgICAgICAgY29udGVudHNbal0gPSBzdHIoMCkKICAgICAgICAgICAgICAgIGogLT0gMQogICAgICAgICAgI2Vsc2U6CiAgICAgICAgICAjICAgcHJpbnQoIktFRVBJTkc6ICIrc3RyKG51bWtpdHRlbnMpKyIgIitzdHIobnVtY2F0cykpCgogICAgICAgICAgIyBJZiBhbGwgYXJlIHplcm8sIGFkZCB0byByZW1vdmUgc2V0CiAgICAgICAgICB6ZXJvRmxhZyA9IFRydWUKICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihjb250ZW50cykpOgogICAgICAgICAgICAgIGlmIChmbG9hdChjb250ZW50c1tpXSkgIT0gMCk6CiAgICAgICAgICAgICAgICAgemVyb0ZsYWcgPSBGYWxzZQogICAgICAgICAgaWYgKHplcm9GbGFnKToKICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoY29udGVudHNbMF0pCiAgICAgICAgICAgICAgI3ByaW50KCJSRU1PVklORyAiK2NvbnRlbnRzWzBdKQogICAgICAgICAgZWxzZToKICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oY29udGVudHMpKToKICAgICAgICAgICAgICAgIG90dV9maWx0ZXJfZmlsZS53cml0ZShjb250ZW50c1tpXSkKICAgICAgICAgICAgICAgIGlmIChpID09IGxlbihjb250ZW50cyktMSk6CiAgICAgICAgICAgICAgICAgIG90dV9maWx0ZXJfZmlsZS53cml0ZSgnXG4nKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgb3R1X2ZpbHRlcl9maWxlLndyaXRlKCcsJykKICAgICAgCiAgICAgIAogICAgICAKICAgICAgdGF4X2ZpbHRlcl9maWxlID0gb3BlbihmaWxlbmFtZSsiLyIrc2VsZi5wYXJhbWV0ZXJzWyJUQVhGaWx0ZXIiXSwgJ3cnKQogICAgICB0YXhfZmlsdGVyX2ZpbGUud3JpdGUoc2VsZi50YXhfZmlsZS5yZWFkbGluZSgpKSAjSGVhZGVyCiAgICAgIAogICAgICAKICAgICAgZm9yIGxpbmUgaW4gc2VsZi50YXhfZmlsZToKICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKICAgICAgICAgIGNvbnRlbnRzID0gbGluZS5zcGxpdCgnLCcpCiAgICAgIAogICAgICAgICAgaWYgKGNvbnRlbnRzWzBdIG5vdCBpbiB0b1JlbW92ZSk6CiAgICAgICAgICAgICAgdGF4X2ZpbHRlcl9maWxlLndyaXRlKGxpbmUrIlxuIikKCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIHNlbGYuY2F0ZWdvcmllcy5hcHBlbmQoY3VyX3NhbXBsZV9pZHgpCgo8fGZpbV9lbmR8Pg=="]
["ffe45ef816f7c3151eefa348a03d0f9f2cddf4d8-4","ffe45ef816f7c3151eefa348a03d0f9f2cddf4d8","PHxmaW1fcHJlZml4fD4KaW1wb3J0IFB5UGx1TUEKCgpjbGFzcyBQaHlsb1NlcUZpbHRlclBsdWdpbjoKICAgIGRlZiBpbnB1dChzZWxmLCBmaWxlbmFtZSk6CiAgICAgIHNlbGYucGFyYW1ldGVycyA9IGRpY3QoKQogICAgICBwYXJhbWZpbGUgPSBvcGVuKGZpbGVuYW1lLCAncicpCiAgICAgIGZvciBsaW5lIGluIHBhcmFtZmlsZToKICAgICAgICAgY29udGVudHMgPSBsaW5lLnNwbGl0KCdcdCcpCiAgICAgICAgIHNlbGYucGFyYW1ldGVyc1tjb250ZW50c1swXV0gPSBjb250ZW50c1sxXS5zdHJpcCgpCgogICAgICBzZWxmLm90dV9maWxlID0gb3BlbihQeVBsdU1BLnByZWZpeCgpKyIvIitzZWxmLnBhcmFtZXRlcnNbIk9UVSJdLCAncicpCiAgICAgIHNlbGYudGF4X2ZpbGUgPSBvcGVuKFB5UGx1TUEucHJlZml4KCkrIi8iK3NlbGYucGFyYW1ldGVyc1siVEFYIl0sICdyJykKICAgICAgc2FtcGxlX2ZpbGUgPW9wZW4oUHlQbHVNQS5wcmVmaXgoKSsiLyIrc2VsZi5wYXJhbWV0ZXJzWyJNRVRBIl0sICdyJykKICAgICAgc2VsZi50aHJlc2hvbGQgPSBmbG9hdChzZWxmLnBhcmFtZXRlcnNbInRocmVzaG9sZCJdKQogICAgICAjSWRlYTogWmVybyBvdXQgKGRvbid0IHJlbW92ZSkgT1RVcyBpbiBsZXNzIHRoYW4gNTAlIG9mIGEgY2F0ZWdvcnkgc2V0CiAgICAgICMgVGhlbiBvbmNlIGV2ZXJ5dGhpbmcgaXMgZG9uZSwgcmVtb3ZlIHRob3NlIHdpdGggemVybyBvdmVyIGFsbCBzYW1wbGVzCgogICAgICBzYW1wbGVfZmlsZS5yZWFkbGluZSgpCiAgICAgIGN1cl9zYW1wbGUgPSAiQkxBSCIKICAgICAgY3VyX3NhbXBsZV9pZHggPSAtMQogICAgICBzZWxmLmNhdGVnb3JpZXMgPSBbLTFdCiAgICAgIGZvciBsaW5lIGluIHNhbXBsZV9maWxlOgogICAgICAgICBjb250ZW50cyA9IGxpbmUuc3RyaXAoKS5zcGxpdCgiLCIpCiAgICAgICAgIGlmIChjb250ZW50c1sxXSAhPSBjdXJfc2FtcGxlKToKICAgICAgICAgICAgIGN1cl9zYW1wbGUgPSBjb250ZW50c1sxXQogICAgICAgICAgICAgY3VyX3NhbXBsZV9pZHggKz0gMQogICAgICAgICBzZWxmLmNhdGVnb3JpZXMuYXBwZW5kKGN1cl9zYW1wbGVfaWR4KQoKICAgIGRlZiBydW4oc2VsZik6CiAgICAgICBwYXNzCgogICAgZGVmIG91dHB1dChzZWxmLCBmaWxlbmFtZSk6CiAgICAgIG90dV9maWx0ZXJfZmlsZSA9IG9wZW4oZmlsZW5hbWUrIi8iK3NlbGYucGFyYW1ldGVyc1siT1RVRmlsdGVyIl0sICd3JykKICAgICAgb3R1X2ZpbHRlcl9maWxlLndyaXRlKHNlbGYub3R1X2ZpbGUucmVhZGxpbmUoKSkKCiAgICAgIHRvUmVtb3ZlID0gW10KICAgICAgZm9yIGxpbmUgaW4gc2VsZi5vdHVfZmlsZToKICAgICAgICAgIGNvbnRlbnRzID0gbGluZS5zdHJpcCgpLnNwbGl0KCcsJykKICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihjb250ZW50cykpOgogICAgICAgICAgICAgIGNhdCA9IHNlbGYuY2F0ZWdvcmllc1tpXQogICAgICAgICAgICAgIGlmIChjYXQgIT0gLTEpOgogICAgICAgICAgICAgICAgICBpZiAoY2F0ICE9IG9sZGNhdCk6CiAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNhdCAhPSAwKSBhbmQgKG51bWtpdHRlbnMvbnVtY2F0cyA8IChzZWxmLnRocmVzaG9sZC9mbG9hdCgxMDApKSkpOgogICAgICAgICAgICAgICAgICAgICAgICAgICMgV2FsayBiYWNrd2FyZHMsIHplcm8gb3V0Cjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgICAgICAgI2VsaWYgKGNhdCAhPSAwKToKICAgICAgICAgICAgICAgICAgICAgICMgICAgcHJpbnQoIktFRVBJTkc6ICIrc3RyKG51bWtpdHRlbnMpKyIgIitzdHIobnVtY2F0cykpCiAgICAgICAgICAgICAgICAgICAgICBudW1raXR0ZW5zID0gMC4wCiAgICAgICAgICAgICAgICAgICAgICBudW1jYXRzID0gMC4wCiAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxvYXQoY29udGVudHNbaV0pICE9IDApOgogICAgICAgICAgICAgICAgICAgICAgICAgbnVta2l0dGVucyArPSAxLjAKICAgICAgICAgICAgICAgICAgICAgIG51bWNhdHMgKz0gMS4wCiAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxvYXQoY29udGVudHNbaV0pICE9IDApOgogICAgICAgICAgICAgICAgICAgICAgICAgbnVta2l0dGVucyArPSAxLjAKICAgICAgICAgICAgICAgICAgICAgIG51bWNhdHMgKz0gMS4wCiAgICAgICAgICAgICAgb2xkY2F0ID0gY2F0CiAgICAgICAgICAjIE9uZSBmaW5hbCB0aW1lCiAgICAgICAgICBpZiAobnVta2l0dGVucy9udW1jYXRzIDwgKHNlbGYudGhyZXNob2xkL2Zsb2F0KDEwMCkpKToKICAgICAgICAgICAgIGogPSBsZW4oY29udGVudHMpLTEKICAgICAgICAgICAgIHdoaWxlIChzZWxmLmNhdGVnb3JpZXNbal0gPT0gb2xkY2F0KToKICAgICAgICAgICAgICAgIGNvbnRlbnRzW2pdID0gc3RyKDApCiAgICAgICAgICAgICAgICBqIC09IDEKICAgICAgICAgICNlbHNlOgogICAgICAgICAgIyAgIHByaW50KCJLRUVQSU5HOiAiK3N0cihudW1raXR0ZW5zKSsiICIrc3RyKG51bWNhdHMpKQoKICAgICAgICAgICMgSWYgYWxsIGFyZSB6ZXJvLCBhZGQgdG8gcmVtb3ZlIHNldAogICAgICAgICAgemVyb0ZsYWcgPSBUcnVlCiAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oY29udGVudHMpKToKICAgICAgICAgICAgICBpZiAoZmxvYXQoY29udGVudHNbaV0pICE9IDApOgogICAgICAgICAgICAgICAgIHplcm9GbGFnID0gRmFsc2UKICAgICAgICAgIGlmICh6ZXJvRmxhZyk6CiAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGNvbnRlbnRzWzBdKQogICAgICAgICAgICAgICNwcmludCgiUkVNT1ZJTkcgIitjb250ZW50c1swXSkKICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGNvbnRlbnRzKSk6CiAgICAgICAgICAgICAgICBvdHVfZmlsdGVyX2ZpbGUud3JpdGUoY29udGVudHNbaV0pCiAgICAgICAgICAgICAgICBpZiAoaSA9PSBsZW4oY29udGVudHMpLTEpOgogICAgICAgICAgICAgICAgICBvdHVfZmlsdGVyX2ZpbGUud3JpdGUoJ1xuJykKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIG90dV9maWx0ZXJfZmlsZS53cml0ZSgnLCcpCiAgICAgIAogICAgICAKICAgICAgCiAgICAgIHRheF9maWx0ZXJfZmlsZSA9IG9wZW4oZmlsZW5hbWUrIi8iK3NlbGYucGFyYW1ldGVyc1siVEFYRmlsdGVyIl0sICd3JykKICAgICAgdGF4X2ZpbHRlcl9maWxlLndyaXRlKHNlbGYudGF4X2ZpbGUucmVhZGxpbmUoKSkgI0hlYWRlcgogICAgICAKICAgICAgCiAgICAgIGZvciBsaW5lIGluIHNlbGYudGF4X2ZpbGU6CiAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCiAgICAgICAgICBjb250ZW50cyA9IGxpbmUuc3BsaXQoJywnKQogICAgICAKICAgICAgICAgIGlmIChjb250ZW50c1swXSBub3QgaW4gdG9SZW1vdmUpOgogICAgICAgICAgICAgIHRheF9maWx0ZXJfZmlsZS53cml0ZShsaW5lKyJcbiIpCgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBpLTEKICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc2VsZi5jYXRlZ29yaWVzW2pdID09IG9sZGNhdCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzW2pdID0gc3RyKDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogLT0gMQo8fGZpbV9lbmR8Pg=="]
["ffe45ef816f7c3151eefa348a03d0f9f2cddf4d8-5","ffe45ef816f7c3151eefa348a03d0f9f2cddf4d8","PHxmaW1fcHJlZml4fD4KaW1wb3J0IFB5UGx1TUEKCgpjbGFzcyBQaHlsb1NlcUZpbHRlclBsdWdpbjoKICAgIGRlZiBpbnB1dChzZWxmLCBmaWxlbmFtZSk6CiAgICAgIHNlbGYucGFyYW1ldGVycyA9IGRpY3QoKQogICAgICBwYXJhbWZpbGUgPSBvcGVuKGZpbGVuYW1lLCAncicpCiAgICAgIGZvciBsaW5lIGluIHBhcmFtZmlsZToKICAgICAgICAgY29udGVudHMgPSBsaW5lLnNwbGl0KCdcdCcpCiAgICAgICAgIHNlbGYucGFyYW1ldGVyc1tjb250ZW50c1swXV0gPSBjb250ZW50c1sxXS5zdHJpcCgpCgogICAgICBzZWxmLm90dV9maWxlID0gb3BlbihQeVBsdU1BLnByZWZpeCgpKyIvIitzZWxmLnBhcmFtZXRlcnNbIk9UVSJdLCAncicpCiAgICAgIHNlbGYudGF4X2ZpbGUgPSBvcGVuKFB5UGx1TUEucHJlZml4KCkrIi8iK3NlbGYucGFyYW1ldGVyc1siVEFYIl0sICdyJykKICAgICAgc2FtcGxlX2ZpbGUgPW9wZW4oUHlQbHVNQS5wcmVmaXgoKSsiLyIrc2VsZi5wYXJhbWV0ZXJzWyJNRVRBIl0sICdyJykKPHxmaW1faG9sZXw+CiAgICAgIHNhbXBsZV9maWxlLnJlYWRsaW5lKCkKICAgICAgY3VyX3NhbXBsZSA9ICJCTEFIIgogICAgICBjdXJfc2FtcGxlX2lkeCA9IC0xCiAgICAgIHNlbGYuY2F0ZWdvcmllcyA9IFstMV0KICAgICAgZm9yIGxpbmUgaW4gc2FtcGxlX2ZpbGU6CiAgICAgICAgIGNvbnRlbnRzID0gbGluZS5zdHJpcCgpLnNwbGl0KCIsIikKICAgICAgICAgaWYgKGNvbnRlbnRzWzFdICE9IGN1cl9zYW1wbGUpOgogICAgICAgICAgICAgY3VyX3NhbXBsZSA9IGNvbnRlbnRzWzFdCiAgICAgICAgICAgICBjdXJfc2FtcGxlX2lkeCArPSAxCiAgICAgICAgIHNlbGYuY2F0ZWdvcmllcy5hcHBlbmQoY3VyX3NhbXBsZV9pZHgpCgogICAgZGVmIHJ1bihzZWxmKToKICAgICAgIHBhc3MKCiAgICBkZWYgb3V0cHV0KHNlbGYsIGZpbGVuYW1lKToKICAgICAgb3R1X2ZpbHRlcl9maWxlID0gb3BlbihmaWxlbmFtZSsiLyIrc2VsZi5wYXJhbWV0ZXJzWyJPVFVGaWx0ZXIiXSwgJ3cnKQogICAgICBvdHVfZmlsdGVyX2ZpbGUud3JpdGUoc2VsZi5vdHVfZmlsZS5yZWFkbGluZSgpKQoKICAgICAgdG9SZW1vdmUgPSBbXQogICAgICBmb3IgbGluZSBpbiBzZWxmLm90dV9maWxlOgogICAgICAgICAgY29udGVudHMgPSBsaW5lLnN0cmlwKCkuc3BsaXQoJywnKQogICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGNvbnRlbnRzKSk6CiAgICAgICAgICAgICAgY2F0ID0gc2VsZi5jYXRlZ29yaWVzW2ldCiAgICAgICAgICAgICAgaWYgKGNhdCAhPSAtMSk6CiAgICAgICAgICAgICAgICAgIGlmIChjYXQgIT0gb2xkY2F0KToKICAgICAgICAgICAgICAgICAgICAgIGlmICgoY2F0ICE9IDApIGFuZCAobnVta2l0dGVucy9udW1jYXRzIDwgKHNlbGYudGhyZXNob2xkL2Zsb2F0KDEwMCkpKSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXYWxrIGJhY2t3YXJkcywgemVybyBvdXQKICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gaS0xCiAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHNlbGYuY2F0ZWdvcmllc1tqXSA9PSBvbGRjYXQpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50c1tqXSA9IHN0cigwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqIC09IDEKICAgICAgICAgICAgICAgICAgICAgICNlbGlmIChjYXQgIT0gMCk6CiAgICAgICAgICAgICAgICAgICAgICAjICAgIHByaW50KCJLRUVQSU5HOiAiK3N0cihudW1raXR0ZW5zKSsiICIrc3RyKG51bWNhdHMpKQogICAgICAgICAgICAgICAgICAgICAgbnVta2l0dGVucyA9IDAuMAogICAgICAgICAgICAgICAgICAgICAgbnVtY2F0cyA9IDAuMAogICAgICAgICAgICAgICAgICAgICAgaWYgKGZsb2F0KGNvbnRlbnRzW2ldKSAhPSAwKToKICAgICAgICAgICAgICAgICAgICAgICAgIG51bWtpdHRlbnMgKz0gMS4wCiAgICAgICAgICAgICAgICAgICAgICBudW1jYXRzICs9IDEuMAogICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgaWYgKGZsb2F0KGNvbnRlbnRzW2ldKSAhPSAwKToKICAgICAgICAgICAgICAgICAgICAgICAgIG51bWtpdHRlbnMgKz0gMS4wCiAgICAgICAgICAgICAgICAgICAgICBudW1jYXRzICs9IDEuMAogICAgICAgICAgICAgIG9sZGNhdCA9IGNhdAogICAgICAgICAgIyBPbmUgZmluYWwgdGltZQogICAgICAgICAgaWYgKG51bWtpdHRlbnMvbnVtY2F0cyA8IChzZWxmLnRocmVzaG9sZC9mbG9hdCgxMDApKSk6CiAgICAgICAgICAgICBqID0gbGVuKGNvbnRlbnRzKS0xCiAgICAgICAgICAgICB3aGlsZSAoc2VsZi5jYXRlZ29yaWVzW2pdID09IG9sZGNhdCk6CiAgICAgICAgICAgICAgICBjb250ZW50c1tqXSA9IHN0cigwKQogICAgICAgICAgICAgICAgaiAtPSAxCiAgICAgICAgICAjZWxzZToKICAgICAgICAgICMgICBwcmludCgiS0VFUElORzogIitzdHIobnVta2l0dGVucykrIiAiK3N0cihudW1jYXRzKSkKCiAgICAgICAgICAjIElmIGFsbCBhcmUgemVybywgYWRkIHRvIHJlbW92ZSBzZXQKICAgICAgICAgIHplcm9GbGFnID0gVHJ1ZQogICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKGNvbnRlbnRzKSk6CiAgICAgICAgICAgICAgaWYgKGZsb2F0KGNvbnRlbnRzW2ldKSAhPSAwKToKICAgICAgICAgICAgICAgICB6ZXJvRmxhZyA9IEZhbHNlCiAgICAgICAgICBpZiAoemVyb0ZsYWcpOgogICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChjb250ZW50c1swXSkKICAgICAgICAgICAgICAjcHJpbnQoIlJFTU9WSU5HICIrY29udGVudHNbMF0pCiAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihjb250ZW50cykpOgogICAgICAgICAgICAgICAgb3R1X2ZpbHRlcl9maWxlLndyaXRlKGNvbnRlbnRzW2ldKQogICAgICAgICAgICAgICAgaWYgKGkgPT0gbGVuKGNvbnRlbnRzKS0xKToKICAgICAgICAgICAgICAgICAgb3R1X2ZpbHRlcl9maWxlLndyaXRlKCdcbicpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICBvdHVfZmlsdGVyX2ZpbGUud3JpdGUoJywnKQogICAgICAKICAgICAgCiAgICAgIAogICAgICB0YXhfZmlsdGVyX2ZpbGUgPSBvcGVuKGZpbGVuYW1lKyIvIitzZWxmLnBhcmFtZXRlcnNbIlRBWEZpbHRlciJdLCAndycpCiAgICAgIHRheF9maWx0ZXJfZmlsZS53cml0ZShzZWxmLnRheF9maWxlLnJlYWRsaW5lKCkpICNIZWFkZXIKICAgICAgCiAgICAgIAogICAgICBmb3IgbGluZSBpbiBzZWxmLnRheF9maWxlOgogICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQogICAgICAgICAgY29udGVudHMgPSBsaW5lLnNwbGl0KCcsJykKICAgICAgCiAgICAgICAgICBpZiAoY29udGVudHNbMF0gbm90IGluIHRvUmVtb3ZlKToKICAgICAgICAgICAgICB0YXhfZmlsdGVyX2ZpbGUud3JpdGUobGluZSsiXG4iKQoKPHxmaW1fc3VmZml4fD4KICAgICAgc2VsZi50aHJlc2hvbGQgPSBmbG9hdChzZWxmLnBhcmFtZXRlcnNbInRocmVzaG9sZCJdKQogICAgICAjSWRlYTogWmVybyBvdXQgKGRvbid0IHJlbW92ZSkgT1RVcyBpbiBsZXNzIHRoYW4gNTAlIG9mIGEgY2F0ZWdvcnkgc2V0CiAgICAgICMgVGhlbiBvbmNlIGV2ZXJ5dGhpbmcgaXMgZG9uZSwgcmVtb3ZlIHRob3NlIHdpdGggemVybyBvdmVyIGFsbCBzYW1wbGVzCgo8fGZpbV9lbmR8Pg=="]
["5fc4fd7bf49069d1898a208dc4bf5aca92380e5c-1","5fc4fd7bf49069d1898a208dc4bf5aca92380e5c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmZyb20gYXBwIGltcG9ydCAqCmNsYXNzIFRlc3RQcmVkaWN0SW1hZ2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgQVBQX1JPT1RfRk9MREVSID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCiAgICBkZWYgdGVzdF9kb2dfZGV0ZWN0b3Ioc2VsZik6CiAgICAgICAgaW1hZ2UxPW9zLnBhdGguam9pbihBUFBfUk9PVF9GT0xERVIsICd7fScuZm9ybWF0KCJkb2dJbWFnZXMvdHJhaW4vMDIxLkJlbGdpYW5fc2hlZXBkb2cvQmVsZ2lhbl9zaGVlcGRvZ18wMTQ5Mi5qcGciKSkKICAgICAgICBpbWFnZTI9b3MucGF0aC5qb2luKEFQUF9ST09UX0ZPTERFUiwgJ3t9Jy5mb3JtYXQoImRvZ0ltYWdlcy90cmFpbi8wMjIuQmVsZ2lhbl90ZXJ2dXJlbi9CZWxnaWFuX3RlcnZ1cmVuXzAxNTYzLmpwZyIpKQogICAgICAgIGltYWdlMz1vcy5wYXRoLmpvaW4oQVBQX1JPT1RfRk9MREVSLCAne30nLmZvcm1hdCgibGZ3L0Jlbl9Ib3dsYW5kL0Jlbl9Ib3dsYW5kXzAwMDEuanBnIikpCiAgICAgICAgaW1hZ2U0PW9zLnBhdGguam9pbihBUFBfUk9PVF9GT0xERVIsICd7fScuZm9ybWF0KCJsZncvQmVuX0hvd2xhbmQiKSkKICAgICAgICBpbWFnZTU9b3MucGF0aC5qb2luKEFQUF9ST09UX0ZPTERFUiwgJ3t9Jy5mb3JtYXQoInRlc3QiKSkKICAgICAgCgogICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZG9nX2RldGVjdG9yKGltYWdlMSksVHJ1ZSkKICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGRvZ19kZXRlY3RvcihpbWFnZTIpLFRydWUpCiAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChkb2dfZGV0ZWN0b3IoaW1hZ2UzKSxGYWxzZSkKICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGRvZ19kZXRlY3RvcihpbWFnZTQpLEZhbHNlKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChkb2dfZGV0ZWN0b3IoaW1hZ2U1KSxGYWxzZSkKPHxmaW1fZW5kfD4="]
["5fc4fd7bf49069d1898a208dc4bf5aca92380e5c-2","5fc4fd7bf49069d1898a208dc4bf5aca92380e5c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmZyb20gYXBwIGltcG9ydCAqCmNsYXNzIFRlc3RQcmVkaWN0SW1hZ2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgQVBQX1JPT1RfRk9MREVSID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCiAgICBkZWYgdGVzdF9kb2dfZGV0ZWN0b3Ioc2VsZik6CiAgICAgICAgaW1hZ2UxPW9zLnBhdGguam9pbihBUFBfUk9PVF9GT0xERVIsICd7fScuZm9ybWF0KCJkb2dJbWFnZXMvdHJhaW4vMDIxLkJlbGdpYW5fc2hlZXBkb2cvQmVsZ2lhbl9zaGVlcGRvZ18wMTQ5Mi5qcGciKSkKICAgICAgICBpbWFnZTI9b3MucGF0aC5qb2luKEFQUF9ST09UX0ZPTERFUiwgJ3t9Jy5mb3JtYXQoImRvZ0ltYWdlcy90cmFpbi8wMjIuQmVsZ2lhbl90ZXJ2dXJlbi9CZWxnaWFuX3RlcnZ1cmVuXzAxNTYzLmpwZyIpKQogICAgICAgIGltYWdlMz1vcy5wYXRoLmpvaW4oQVBQX1JPT1RfRk9MREVSLCAne30nLmZvcm1hdCgibGZ3L0Jlbl9Ib3dsYW5kL0Jlbl9Ib3dsYW5kXzAwMDEuanBnIikpCiAgICAgICAgaW1hZ2U0PW9zLnBhdGguam9pbihBUFBfUk9PVF9GT0xERVIsICd7fScuZm9ybWF0KCJsZncvQmVuX0hvd2xhbmQiKSkKICAgICAgICBpbWFnZTU9b3MucGF0aC5qb2luKEFQUF9ST09UX0ZPTERFUiwgJ3t9Jy5mb3JtYXQoInRlc3QiKSkKICAgICAgCgogICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZG9nX2RldGVjdG9yKGltYWdlMSksVHJ1ZSkKICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGRvZ19kZXRlY3RvcihpbWFnZTIpLFRydWUpCiAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChkb2dfZGV0ZWN0b3IoaW1hZ2UzKSxGYWxzZSkKICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGRvZ19kZXRlY3RvcihpbWFnZTQpLEZhbHNlKQogICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZG9nX2RldGVjdG9yKGltYWdlNSksRmFsc2UpCiAgICBkZWYgdGVzdF9mYWNlX2RldGVjdG9yKHNlbGYpOgogICAgICAgIGltYWdlMT1vcy5wYXRoLmpvaW4oQVBQX1JPT1RfRk9MREVSLCAne30nLmZvcm1hdCgiZG9nSW1hZ2VzL3RyYWluLzAyMS5CZWxnaWFuX3NoZWVwZG9nL0JlbGdpYW5fc2hlZXBkb2dfMDE0OTIuanBnIikpCiAgICAgICAgaW1hZ2UyPW9zLnBhdGguam9pbihBUFBfUk9PVF9GT0xERVIsICd7fScuZm9ybWF0KCJkb2dJbWFnZXMvdHJhaW4vMDIyLkJlbGdpYW5fdGVydnVyZW4vQmVsZ2lhbl90ZXJ2dXJlbl8wMTU2My5qcGciKSkKICAgICAgICBpbWFnZTM9b3MucGF0aC5qb2luKEFQUF9ST09UX0ZPTERFUiwgJ3t9Jy5mb3JtYXQoImxmdy9CZW5fSG93bGFuZC9CZW5fSG93bGFuZF8wMDAxLmpwZyIpKQogICAgICAgIGltYWdlND1vcy5wYXRoLmpvaW4oQVBQX1JPT1RfRk9MREVSLCAne30nLmZvcm1hdCgibGZ3L0Jlbl9Ib3dsYW5kIikpCiAgICAgICAgaW1hZ2U1PW9zLnBhdGguam9pbihBUFBfUk9PVF9GT0xERVIsICd7fScuZm9ybWF0KCJ0ZXN0IikpCiAgICAgIAoKICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGZhY2VfZGV0ZWN0b3IoaW1hZ2UxKSxGYWxzZSkKICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGZhY2VfZGV0ZWN0b3IoaW1hZ2UyKSxGYWxzZSkKICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGZhY2VfZGV0ZWN0b3IoaW1hZ2UzKSxUcnVlKQogICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZmFjZV9kZXRlY3RvcihpbWFnZTQpLEZhbHNlKQogICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZmFjZV9kZXRlY3RvcihpbWFnZTUpLEZhbHNlKQogICAgZGVmIHRlc3RfcHJlZGljdEltYWdlKHNlbGYpOgogICAgICAgIGltYWdlMT1vcy5wYXRoLmpvaW4oQVBQX1JPT1RfRk9MREVSLCAne30nLmZvcm1hdCgiZG9nSW1hZ2VzL3RyYWluLzAyMS5CZWxnaWFuX3NoZWVwZG9nL0JlbGdpYW5fc2hlZXBkb2dfMDE0OTIuanBnIikpCiAgICAgICAgaW1hZ2UyPW9zLnBhdGguam9pbihBUFBfUk9PVF9GT0xERVIsICd7fScuZm9ybWF0KCJkb2dJbWFnZXMvdHJhaW4vMDIyLkJlbGdpYW5fdGVydnVyZW4vQmVsZ2lhbl90ZXJ2dXJlbl8wMTU2My5qcGciKSkKICAgICAgICBpbWFnZTM9b3MucGF0aC5qb2luKEFQUF9ST09UX0ZPTERFUiwgJ3t9Jy5mb3JtYXQoImxmdy9CZW5fSG93bGFuZC9CZW5fSG93bGFuZF8wMDAxLmpwZyIpKQogICAgICAgIAo8fGZpbV9ob2xlfD4KICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJlc3VsdCwiQmVsZ2lhbl9zaGVlcGRvZyIpCgogICAgICAgIF8scmVzdWx0PXByZWRpY3RJbWFnZShpbWFnZTIsbW9kZWwpCiAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyZXN1bHQsIkJlbGdpYW5fdGVydnVyZW4iKQoKICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIHByZWRpY3RJbWFnZSxpbWFnZTEsTm9uZSkKICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIHByZWRpY3RJbWFnZSxpbWFnZTMsTm9uZSkKCiAgICAgICAKICAgICAgICAKCiAgICAgICAgCgo8fGZpbV9zdWZmaXh8PgogICAgICAgIG1vZGVsPWxvYWRfUmVzTmV0NTBNb2RlbCgpCiAgICAgICAKCiAgICAgICAgXyxyZXN1bHQ9cHJlZGljdEltYWdlKGltYWdlMSxtb2RlbCkKPHxmaW1fZW5kfD4="]
["5fb4b15c345b42a5f6fa9f2e51ce39e244ad45c7-1","5fb4b15c345b42a5f6fa9f2e51ce39e244ad45c7","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMgoKIiIic2ltcGxlIHV0aWxpdHkgdG8gZmluZCB0aGUgY2xvc2VzdCBwcmltZSBudW1iZXIgdG8gYSBwcm92aWRlZCBudW1iZXIiIiIKCmRlZiBpc3ByaW1lKG51bWJlcik6CiAgICAidGVzdHMgaWYgYSBudW1iZXIgaXMgcHJpbWUiCgogICAgaWYgbnVtYmVyIDwgMjogcmV0dXJuIEZhbHNlCiAgICBpZiBudW1iZXIgPT0gMjogcmV0dXJuIFRydWUKICAgIGlmIG51bWJlciAlIDIgPT0gMDogcmV0dXJuIEZhbHNlCgogICAgcmV0dXJuIF9faXNwcmltZShudW1iZXIpCgpkZWYgX19pc3ByaW1lKG51bWJlcik6CiAgICAiaW50ZXJuYWwgdGVzdCBmb3IgcHJpbWFsaXR5OyBhc3N1bWVzIGlucHV0IGlzIGFuIG9kZCBudW1iZXIgZ3JlYXRlciB0aGFuIDEgdG8gaW1wcm92ZSBzcGVlZCIKCiAgICBmb3IgdGVzdCBpbiByYW5nZSgzLCBfX2xhc3R0ZXN0KG51bWJlciksIDIpOgogICAgICAgIGlmIG51bWJlciAlIHRlc3QgPT0gMDoKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICByZXR1cm4gVHJ1ZQoKZnJvbSBtYXRoIGltcG9ydCBzcXJ0CmRlZiBfX2xhc3R0ZXN0KG51bWJlcik6CiAgICAiIiJpbnRlcm5hbCBzcXVhcmUgcm9vdCBjYWxjdWxhdG9yIHRvIGRldGVybWluZSB0aGUgbGFzdCBudW1iZXIgd2hpY2ggc2hvdWxkIGJlIHRlc3RlZAogICAgYW5kIHByb3ZpZGUgYSB2YWx1ZSBncmVhdGVyIHRoYW4gdGhhdCBmb3IgcGFzc2luZyB0byByYW5nZSgpIiIiCgogICAgcmV0dXJuIGludChzcXJ0KG51bWJlcikpICsgMQoKUE9TSVRJVkU9MQpORUdBVElWRT0tMQo8fGZpbV9ob2xlfD4KICAgIGlmIGNvdW50IDwgMTogcmFpc2UgQXJndW1lbnRFcnJvcigiY291bnQgbXVzdCBiZSBwb3NpdGl2ZSIpCiAgICBpZiBkaXJlY3Rpb24gIT0gUE9TSVRJVkUgYW5kIGRpcmVjdGlvbiAhPSBORUdBVElWRTogcmFpc2UgQXJndW1lbnRFcnJvcigiZGlyZWN0aW9uIG11c3QgYmUgUE9TSVRJVkUgb3IgTkVHQVRJVkUiKQogICAgaWYgbnVtYmVyIDwgMjoKICAgICAgICBpZiBkaXIgPT0gTkVHQVRJVkU6CiAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IoIm5vIHByaW1lcyBsZXNzIHRoYW4gMiIpCiAgICAgICAgbnVtYmVyID0gMgoKICAgIGlmIG51bWJlciA9PSAyOgogICAgICAgIHlpZWxkIDIKICAgICAgICAjIHRoZXJlIGFyZSBubyBudW1iZXJzIGxlc3MgdGhhbiAyIHdoaWNoIGFyZSBwcmltZTsgYWxzbyBpZiB0aGV5IG9ubHkgYXNrZWQgZm9yIDEgbnVtYmVyLCB3ZSBhcmUgZG9uZQogICAgICAgIGlmIGRpcmVjdGlvbiA9PSBORUdBVElWRSBvciBjb3VudCA9PSAxOiByYWlzZSBTdG9wSXRlcmF0aW9uKCkKICAgICAgICAjIG5vdyB0aGF0IHdlJ3ZlIHRha2VuIGNhcmUgb2YgdGhlIGVkZ2UgY2FzZSwgd2UgY29udGludWUgZnJvbSAzCiAgICAgICAgbnVtYmVyID0gMwogICAgICAgIGNvdW50IC09IDEKICAgIGVsaWYgbnVtYmVyICUgMiA9PSAwOgogICAgICAgICMgaWYgdGhlIG51bWJlciBpcyBldmVuLCBqdXN0IGFkZCAxIGluIHRoZSBwcm9wZXIgZGlyZWN0aW9uIGFuZCBpdCB3aWxsIGJlIG9kZCwgdGhlbiBpdGVyYXRpb24gY2FuIHByb2NlZWQgbm9ybWFsbHkKICAgICAgICBudW1iZXIgKz0gZGlyZWN0aW9uCgogICAgZm9yIHByaW1ldGVzdCBpbiBpdGVydG9vbHMuY291bnQobnVtYmVyLCAyKmRpcmVjdGlvbik6CiAgICAgICAgaWYgcHJpbWV0ZXN0IDwgMTogcmFpc2UgU3RvcEl0ZXJhdGlvbigpCiAgICAgICAgaWYgX19pc3ByaW1lKHByaW1ldGVzdCk6CiAgICAgICAgICAgIHlpZWxkIHByaW1ldGVzdAogICAgICAgICAgICBjb3VudCAtPSAxCiAgICAgICAgaWYgY291bnQgPT0gMDogcmFpc2UgU3RvcEl0ZXJhdGlvbigpCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgZnJvbSBzeXMgaW1wb3J0IGFyZ3YKCiAgICBudW1iZXIgPSBpbnQoYXJndlsxXSkKICAgIGNvdW50ID0gMQogICAgaWYgbGVuKGFyZ3YpID4gMjogY291bnQgPSBpbnQoYXJndlsyXSkKICAgIGRpcmVjdGlvbiA9IFBPU0lUSVZFCiAgICBpZiBsZW4oYXJndikgPiAzOgogICAgICAgIGRpcmVjdGlvbiA9IGFyZ3ZbM10udXBwZXIoKQogICAgICAgIGlmIGRpcmVjdGlvbiA9PSAiUE9TSVRJVkUiOgogICAgICAgICAgICBkaXJlY3Rpb24gPSBQT1NJVElWRQogICAgICAgIGVsaWYgZGlyZWN0aW9uID09ICJORUdBVElWRSI6CiAgICAgICAgICAgIGRpcmVjdGlvbiA9IE5FR0FUSVZFCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQgJ2RpcmVjdGlvbiBtdXN0IGJlICJwb3NpdGl2ZSIgb3IgIm5lZ2F0aXZlIicKICAgICAgICAgICAgZXhpdCgxKQoKICAgIGZvciBwcmltZSBpbiBjbG9zZXN0cHJpbWVzKG51bWJlciwgY291bnQsIGRpcmVjdGlvbik6CiAgICAgICAgcHJpbnQgcHJpbWUKPHxmaW1fc3VmZml4fD4KaW1wb3J0IGl0ZXJ0b29scwpkZWYgY2xvc2VzdHByaW1lcyhudW1iZXIsIGNvdW50PTEsIGRpcmVjdGlvbj1QT1NJVElWRSk6CiAgICAiZGV0ZXJtaW5lIHVwIHRvIGNvdW50IGNsb3Nlc3QgcHJpbWVzIHRvIHRoZSBwcm92aWRlZCBudW1iZXIsIHdoaWNoIG1heSBpbmNsdWRlIHRoZSBudW1iZXIgaXRzZWxmIgoKPHxmaW1fZW5kfD4="]
["5fb4b15c345b42a5f6fa9f2e51ce39e244ad45c7-2","5fb4b15c345b42a5f6fa9f2e51ce39e244ad45c7","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMgoKIiIic2ltcGxlIHV0aWxpdHkgdG8gZmluZCB0aGUgY2xvc2VzdCBwcmltZSBudW1iZXIgdG8gYSBwcm92aWRlZCBudW1iZXIiIiIKCmRlZiBpc3ByaW1lKG51bWJlcik6CiAgICAidGVzdHMgaWYgYSBudW1iZXIgaXMgcHJpbWUiCgogICAgaWYgbnVtYmVyIDwgMjogcmV0dXJuIEZhbHNlCiAgICBpZiBudW1iZXIgPT0gMjogcmV0dXJuIFRydWUKICAgIGlmIG51bWJlciAlIDIgPT0gMDogcmV0dXJuIEZhbHNlCgogICAgcmV0dXJuIF9faXNwcmltZShudW1iZXIpCgo8fGZpbV9ob2xlfD4KICAgICAgICBpZiBudW1iZXIgJSB0ZXN0ID09IDA6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgcmV0dXJuIFRydWUKCmZyb20gbWF0aCBpbXBvcnQgc3FydApkZWYgX19sYXN0dGVzdChudW1iZXIpOgogICAgIiIiaW50ZXJuYWwgc3F1YXJlIHJvb3QgY2FsY3VsYXRvciB0byBkZXRlcm1pbmUgdGhlIGxhc3QgbnVtYmVyIHdoaWNoIHNob3VsZCBiZSB0ZXN0ZWQKICAgIGFuZCBwcm92aWRlIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHRoYXQgZm9yIHBhc3NpbmcgdG8gcmFuZ2UoKSIiIgoKICAgIHJldHVybiBpbnQoc3FydChudW1iZXIpKSArIDEKClBPU0lUSVZFPTEKTkVHQVRJVkU9LTEKaW1wb3J0IGl0ZXJ0b29scwpkZWYgY2xvc2VzdHByaW1lcyhudW1iZXIsIGNvdW50PTEsIGRpcmVjdGlvbj1QT1NJVElWRSk6CiAgICAiZGV0ZXJtaW5lIHVwIHRvIGNvdW50IGNsb3Nlc3QgcHJpbWVzIHRvIHRoZSBwcm92aWRlZCBudW1iZXIsIHdoaWNoIG1heSBpbmNsdWRlIHRoZSBudW1iZXIgaXRzZWxmIgoKICAgIGlmIGNvdW50IDwgMTogcmFpc2UgQXJndW1lbnRFcnJvcigiY291bnQgbXVzdCBiZSBwb3NpdGl2ZSIpCiAgICBpZiBkaXJlY3Rpb24gIT0gUE9TSVRJVkUgYW5kIGRpcmVjdGlvbiAhPSBORUdBVElWRTogcmFpc2UgQXJndW1lbnRFcnJvcigiZGlyZWN0aW9uIG11c3QgYmUgUE9TSVRJVkUgb3IgTkVHQVRJVkUiKQogICAgaWYgbnVtYmVyIDwgMjoKICAgICAgICBpZiBkaXIgPT0gTkVHQVRJVkU6CiAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IoIm5vIHByaW1lcyBsZXNzIHRoYW4gMiIpCiAgICAgICAgbnVtYmVyID0gMgoKICAgIGlmIG51bWJlciA9PSAyOgogICAgICAgIHlpZWxkIDIKICAgICAgICAjIHRoZXJlIGFyZSBubyBudW1iZXJzIGxlc3MgdGhhbiAyIHdoaWNoIGFyZSBwcmltZTsgYWxzbyBpZiB0aGV5IG9ubHkgYXNrZWQgZm9yIDEgbnVtYmVyLCB3ZSBhcmUgZG9uZQogICAgICAgIGlmIGRpcmVjdGlvbiA9PSBORUdBVElWRSBvciBjb3VudCA9PSAxOiByYWlzZSBTdG9wSXRlcmF0aW9uKCkKICAgICAgICAjIG5vdyB0aGF0IHdlJ3ZlIHRha2VuIGNhcmUgb2YgdGhlIGVkZ2UgY2FzZSwgd2UgY29udGludWUgZnJvbSAzCiAgICAgICAgbnVtYmVyID0gMwogICAgICAgIGNvdW50IC09IDEKICAgIGVsaWYgbnVtYmVyICUgMiA9PSAwOgogICAgICAgICMgaWYgdGhlIG51bWJlciBpcyBldmVuLCBqdXN0IGFkZCAxIGluIHRoZSBwcm9wZXIgZGlyZWN0aW9uIGFuZCBpdCB3aWxsIGJlIG9kZCwgdGhlbiBpdGVyYXRpb24gY2FuIHByb2NlZWQgbm9ybWFsbHkKICAgICAgICBudW1iZXIgKz0gZGlyZWN0aW9uCgogICAgZm9yIHByaW1ldGVzdCBpbiBpdGVydG9vbHMuY291bnQobnVtYmVyLCAyKmRpcmVjdGlvbik6CiAgICAgICAgaWYgcHJpbWV0ZXN0IDwgMTogcmFpc2UgU3RvcEl0ZXJhdGlvbigpCiAgICAgICAgaWYgX19pc3ByaW1lKHByaW1ldGVzdCk6CiAgICAgICAgICAgIHlpZWxkIHByaW1ldGVzdAogICAgICAgICAgICBjb3VudCAtPSAxCiAgICAgICAgaWYgY291bnQgPT0gMDogcmFpc2UgU3RvcEl0ZXJhdGlvbigpCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgZnJvbSBzeXMgaW1wb3J0IGFyZ3YKCiAgICBudW1iZXIgPSBpbnQoYXJndlsxXSkKICAgIGNvdW50ID0gMQogICAgaWYgbGVuKGFyZ3YpID4gMjogY291bnQgPSBpbnQoYXJndlsyXSkKICAgIGRpcmVjdGlvbiA9IFBPU0lUSVZFCiAgICBpZiBsZW4oYXJndikgPiAzOgogICAgICAgIGRpcmVjdGlvbiA9IGFyZ3ZbM10udXBwZXIoKQogICAgICAgIGlmIGRpcmVjdGlvbiA9PSAiUE9TSVRJVkUiOgogICAgICAgICAgICBkaXJlY3Rpb24gPSBQT1NJVElWRQogICAgICAgIGVsaWYgZGlyZWN0aW9uID09ICJORUdBVElWRSI6CiAgICAgICAgICAgIGRpcmVjdGlvbiA9IE5FR0FUSVZFCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQgJ2RpcmVjdGlvbiBtdXN0IGJlICJwb3NpdGl2ZSIgb3IgIm5lZ2F0aXZlIicKICAgICAgICAgICAgZXhpdCgxKQoKICAgIGZvciBwcmltZSBpbiBjbG9zZXN0cHJpbWVzKG51bWJlciwgY291bnQsIGRpcmVjdGlvbik6CiAgICAgICAgcHJpbnQgcHJpbWUKPHxmaW1fc3VmZml4fD4KZGVmIF9faXNwcmltZShudW1iZXIpOgogICAgImludGVybmFsIHRlc3QgZm9yIHByaW1hbGl0eTsgYXNzdW1lcyBpbnB1dCBpcyBhbiBvZGQgbnVtYmVyIGdyZWF0ZXIgdGhhbiAxIHRvIGltcHJvdmUgc3BlZWQiCgogICAgZm9yIHRlc3QgaW4gcmFuZ2UoMywgX19sYXN0dGVzdChudW1iZXIpLCAyKToKPHxmaW1fZW5kfD4="]
["5fb4b15c345b42a5f6fa9f2e51ce39e244ad45c7-3","5fb4b15c345b42a5f6fa9f2e51ce39e244ad45c7","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMgoKIiIic2ltcGxlIHV0aWxpdHkgdG8gZmluZCB0aGUgY2xvc2VzdCBwcmltZSBudW1iZXIgdG8gYSBwcm92aWRlZCBudW1iZXIiIiIKCmRlZiBpc3ByaW1lKG51bWJlcik6CiAgICAidGVzdHMgaWYgYSBudW1iZXIgaXMgcHJpbWUiCgogICAgaWYgbnVtYmVyIDwgMjogcmV0dXJuIEZhbHNlCiAgICBpZiBudW1iZXIgPT0gMjogcmV0dXJuIFRydWUKICAgIGlmIG51bWJlciAlIDIgPT0gMDogcmV0dXJuIEZhbHNlCgogICAgcmV0dXJuIF9faXNwcmltZShudW1iZXIpCgpkZWYgX19pc3ByaW1lKG51bWJlcik6CiAgICAiaW50ZXJuYWwgdGVzdCBmb3IgcHJpbWFsaXR5OyBhc3N1bWVzIGlucHV0IGlzIGFuIG9kZCBudW1iZXIgZ3JlYXRlciB0aGFuIDEgdG8gaW1wcm92ZSBzcGVlZCIKCiAgICBmb3IgdGVzdCBpbiByYW5nZSgzLCBfX2xhc3R0ZXN0KG51bWJlciksIDIpOgogICAgICAgIGlmIG51bWJlciAlIHRlc3QgPT0gMDoKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICByZXR1cm4gVHJ1ZQoKZnJvbSBtYXRoIGltcG9ydCBzcXJ0CmRlZiBfX2xhc3R0ZXN0KG51bWJlcik6CiAgICAiIiJpbnRlcm5hbCBzcXVhcmUgcm9vdCBjYWxjdWxhdG9yIHRvIGRldGVybWluZSB0aGUgbGFzdCBudW1iZXIgd2hpY2ggc2hvdWxkIGJlIHRlc3RlZAogICAgYW5kIHByb3ZpZGUgYSB2YWx1ZSBncmVhdGVyIHRoYW4gdGhhdCBmb3IgcGFzc2luZyB0byByYW5nZSgpIiIiCgogICAgcmV0dXJuIGludChzcXJ0KG51bWJlcikpICsgMQoKUE9TSVRJVkU9MQpORUdBVElWRT0tMQppbXBvcnQgaXRlcnRvb2xzCmRlZiBjbG9zZXN0cHJpbWVzKG51bWJlciwgY291bnQ9MSwgZGlyZWN0aW9uPVBPU0lUSVZFKToKICAgICJkZXRlcm1pbmUgdXAgdG8gY291bnQgY2xvc2VzdCBwcmltZXMgdG8gdGhlIHByb3ZpZGVkIG51bWJlciwgd2hpY2ggbWF5IGluY2x1ZGUgdGhlIG51bWJlciBpdHNlbGYiCgogICAgaWYgY291bnQgPCAxOiByYWlzZSBBcmd1bWVudEVycm9yKCJjb3VudCBtdXN0IGJlIHBvc2l0aXZlIikKICAgIGlmIGRpcmVjdGlvbiAhPSBQT1NJVElWRSBhbmQgZGlyZWN0aW9uICE9IE5FR0FUSVZFOiByYWlzZSBBcmd1bWVudEVycm9yKCJkaXJlY3Rpb24gbXVzdCBiZSBQT1NJVElWRSBvciBORUdBVElWRSIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGlmIG51bWJlciA8IDI6CiAgICAgICAgaWYgZGlyID09IE5FR0FUSVZFOgogICAgICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yKCJubyBwcmltZXMgbGVzcyB0aGFuIDIiKQogICAgICAgIG51bWJlciA9IDIKPHxmaW1fZW5kfD4="]
["5fb4b15c345b42a5f6fa9f2e51ce39e244ad45c7-4","5fb4b15c345b42a5f6fa9f2e51ce39e244ad45c7","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMgoKIiIic2ltcGxlIHV0aWxpdHkgdG8gZmluZCB0aGUgY2xvc2VzdCBwcmltZSBudW1iZXIgdG8gYSBwcm92aWRlZCBudW1iZXIiIiIKCmRlZiBpc3ByaW1lKG51bWJlcik6CiAgICAidGVzdHMgaWYgYSBudW1iZXIgaXMgcHJpbWUiCgogICAgaWYgbnVtYmVyIDwgMjogcmV0dXJuIEZhbHNlCiAgICBpZiBudW1iZXIgPT0gMjogcmV0dXJuIFRydWUKICAgIGlmIG51bWJlciAlIDIgPT0gMDogcmV0dXJuIEZhbHNlCgogICAgcmV0dXJuIF9faXNwcmltZShudW1iZXIpCgpkZWYgX19pc3ByaW1lKG51bWJlcik6CiAgICAiaW50ZXJuYWwgdGVzdCBmb3IgcHJpbWFsaXR5OyBhc3N1bWVzIGlucHV0IGlzIGFuIG9kZCBudW1iZXIgZ3JlYXRlciB0aGFuIDEgdG8gaW1wcm92ZSBzcGVlZCIKCiAgICBmb3IgdGVzdCBpbiByYW5nZSgzLCBfX2xhc3R0ZXN0KG51bWJlciksIDIpOgogICAgICAgIGlmIG51bWJlciAlIHRlc3QgPT0gMDoKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICByZXR1cm4gVHJ1ZQoKZnJvbSBtYXRoIGltcG9ydCBzcXJ0CmRlZiBfX2xhc3R0ZXN0KG51bWJlcik6CiAgICAiIiJpbnRlcm5hbCBzcXVhcmUgcm9vdCBjYWxjdWxhdG9yIHRvIGRldGVybWluZSB0aGUgbGFzdCBudW1iZXIgd2hpY2ggc2hvdWxkIGJlIHRlc3RlZAogICAgYW5kIHByb3ZpZGUgYSB2YWx1ZSBncmVhdGVyIHRoYW4gdGhhdCBmb3IgcGFzc2luZyB0byByYW5nZSgpIiIiCgogICAgcmV0dXJuIGludChzcXJ0KG51bWJlcikpICsgMQoKUE9TSVRJVkU9MQpORUdBVElWRT0tMQppbXBvcnQgaXRlcnRvb2xzCmRlZiBjbG9zZXN0cHJpbWVzKG51bWJlciwgY291bnQ9MSwgZGlyZWN0aW9uPVBPU0lUSVZFKToKICAgICJkZXRlcm1pbmUgdXAgdG8gY291bnQgY2xvc2VzdCBwcmltZXMgdG8gdGhlIHByb3ZpZGVkIG51bWJlciwgd2hpY2ggbWF5IGluY2x1ZGUgdGhlIG51bWJlciBpdHNlbGYiCgogICAgaWYgY291bnQgPCAxOiByYWlzZSBBcmd1bWVudEVycm9yKCJjb3VudCBtdXN0IGJlIHBvc2l0aXZlIikKICAgIGlmIGRpcmVjdGlvbiAhPSBQT1NJVElWRSBhbmQgZGlyZWN0aW9uICE9IE5FR0FUSVZFOiByYWlzZSBBcmd1bWVudEVycm9yKCJkaXJlY3Rpb24gbXVzdCBiZSBQT1NJVElWRSBvciBORUdBVElWRSIpCiAgICBpZiBudW1iZXIgPCAyOgogICAgICAgIGlmIGRpciA9PSBORUdBVElWRToKICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvcigibm8gcHJpbWVzIGxlc3MgdGhhbiAyIikKICAgICAgICBudW1iZXIgPSAyCgogICAgaWYgbnVtYmVyID09IDI6CiAgICAgICAgeWllbGQgMgogICAgICAgICMgdGhlcmUgYXJlIG5vIG51bWJlcnMgbGVzcyB0aGFuIDIgd2hpY2ggYXJlIHByaW1lOyBhbHNvIGlmIHRoZXkgb25seSBhc2tlZCBmb3IgMSBudW1iZXIsIHdlIGFyZSBkb25lCiAgICAgICAgaWYgZGlyZWN0aW9uID09IE5FR0FUSVZFIG9yIGNvdW50ID09IDE6IHJhaXNlIFN0b3BJdGVyYXRpb24oKQogICAgICAgICMgbm93IHRoYXQgd2UndmUgdGFrZW4gY2FyZSBvZiB0aGUgZWRnZSBjYXNlLCB3ZSBjb250aW51ZSBmcm9tIDMKICAgICAgICBudW1iZXIgPSAzCiAgICAgICAgY291bnQgLT0gMQogICAgZWxpZiBudW1iZXIgJSAyID09IDA6CiAgICAgICAgIyBpZiB0aGUgbnVtYmVyIGlzIGV2ZW4sIGp1c3QgYWRkIDEgaW4gdGhlIHByb3BlciBkaXJlY3Rpb24gYW5kIGl0IHdpbGwgYmUgb2RkLCB0aGVuIGl0ZXJhdGlvbiBjYW4gcHJvY2VlZCBub3JtYWxseQo8fGZpbV9ob2xlfD4KICAgIGZvciBwcmltZXRlc3QgaW4gaXRlcnRvb2xzLmNvdW50KG51bWJlciwgMipkaXJlY3Rpb24pOgogICAgICAgIGlmIHByaW1ldGVzdCA8IDE6IHJhaXNlIFN0b3BJdGVyYXRpb24oKQogICAgICAgIGlmIF9faXNwcmltZShwcmltZXRlc3QpOgogICAgICAgICAgICB5aWVsZCBwcmltZXRlc3QKICAgICAgICAgICAgY291bnQgLT0gMQogICAgICAgIGlmIGNvdW50ID09IDA6IHJhaXNlIFN0b3BJdGVyYXRpb24oKQoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIGZyb20gc3lzIGltcG9ydCBhcmd2CgogICAgbnVtYmVyID0gaW50KGFyZ3ZbMV0pCiAgICBjb3VudCA9IDEKICAgIGlmIGxlbihhcmd2KSA+IDI6IGNvdW50ID0gaW50KGFyZ3ZbMl0pCiAgICBkaXJlY3Rpb24gPSBQT1NJVElWRQogICAgaWYgbGVuKGFyZ3YpID4gMzoKICAgICAgICBkaXJlY3Rpb24gPSBhcmd2WzNdLnVwcGVyKCkKICAgICAgICBpZiBkaXJlY3Rpb24gPT0gIlBPU0lUSVZFIjoKICAgICAgICAgICAgZGlyZWN0aW9uID0gUE9TSVRJVkUKICAgICAgICBlbGlmIGRpcmVjdGlvbiA9PSAiTkVHQVRJVkUiOgogICAgICAgICAgICBkaXJlY3Rpb24gPSBORUdBVElWRQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50ICdkaXJlY3Rpb24gbXVzdCBiZSAicG9zaXRpdmUiIG9yICJuZWdhdGl2ZSInCiAgICAgICAgICAgIGV4aXQoMSkKCiAgICBmb3IgcHJpbWUgaW4gY2xvc2VzdHByaW1lcyhudW1iZXIsIGNvdW50LCBkaXJlY3Rpb24pOgogICAgICAgIHByaW50IHByaW1lCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgbnVtYmVyICs9IGRpcmVjdGlvbgoKPHxmaW1fZW5kfD4="]
["5fb4b15c345b42a5f6fa9f2e51ce39e244ad45c7-5","5fb4b15c345b42a5f6fa9f2e51ce39e244ad45c7","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMgoKIiIic2ltcGxlIHV0aWxpdHkgdG8gZmluZCB0aGUgY2xvc2VzdCBwcmltZSBudW1iZXIgdG8gYSBwcm92aWRlZCBudW1iZXIiIiIKCmRlZiBpc3ByaW1lKG51bWJlcik6CiAgICAidGVzdHMgaWYgYSBudW1iZXIgaXMgcHJpbWUiCgogICAgaWYgbnVtYmVyIDwgMjogcmV0dXJuIEZhbHNlCiAgICBpZiBudW1iZXIgPT0gMjogcmV0dXJuIFRydWUKICAgIGlmIG51bWJlciAlIDIgPT0gMDogcmV0dXJuIEZhbHNlCgogICAgcmV0dXJuIF9faXNwcmltZShudW1iZXIpCgpkZWYgX19pc3ByaW1lKG51bWJlcik6CiAgICAiaW50ZXJuYWwgdGVzdCBmb3IgcHJpbWFsaXR5OyBhc3N1bWVzIGlucHV0IGlzIGFuIG9kZCBudW1iZXIgZ3JlYXRlciB0aGFuIDEgdG8gaW1wcm92ZSBzcGVlZCIKCiAgICBmb3IgdGVzdCBpbiByYW5nZSgzLCBfX2xhc3R0ZXN0KG51bWJlciksIDIpOgogICAgICAgIGlmIG51bWJlciAlIHRlc3QgPT0gMDoKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICByZXR1cm4gVHJ1ZQoKZnJvbSBtYXRoIGltcG9ydCBzcXJ0CmRlZiBfX2xhc3R0ZXN0KG51bWJlcik6CiAgICAiIiJpbnRlcm5hbCBzcXVhcmUgcm9vdCBjYWxjdWxhdG9yIHRvIGRldGVybWluZSB0aGUgbGFzdCBudW1iZXIgd2hpY2ggc2hvdWxkIGJlIHRlc3RlZAogICAgYW5kIHByb3ZpZGUgYSB2YWx1ZSBncmVhdGVyIHRoYW4gdGhhdCBmb3IgcGFzc2luZyB0byByYW5nZSgpIiIiCgogICAgcmV0dXJuIGludChzcXJ0KG51bWJlcikpICsgMQoKUE9TSVRJVkU9MQpORUdBVElWRT0tMQppbXBvcnQgaXRlcnRvb2xzCmRlZiBjbG9zZXN0cHJpbWVzKG51bWJlciwgY291bnQ9MSwgZGlyZWN0aW9uPVBPU0lUSVZFKToKICAgICJkZXRlcm1pbmUgdXAgdG8gY291bnQgY2xvc2VzdCBwcmltZXMgdG8gdGhlIHByb3ZpZGVkIG51bWJlciwgd2hpY2ggbWF5IGluY2x1ZGUgdGhlIG51bWJlciBpdHNlbGYiCgogICAgaWYgY291bnQgPCAxOiByYWlzZSBBcmd1bWVudEVycm9yKCJjb3VudCBtdXN0IGJlIHBvc2l0aXZlIikKICAgIGlmIGRpcmVjdGlvbiAhPSBQT1NJVElWRSBhbmQgZGlyZWN0aW9uICE9IE5FR0FUSVZFOiByYWlzZSBBcmd1bWVudEVycm9yKCJkaXJlY3Rpb24gbXVzdCBiZSBQT1NJVElWRSBvciBORUdBVElWRSIpCiAgICBpZiBudW1iZXIgPCAyOgogICAgICAgIGlmIGRpciA9PSBORUdBVElWRToKICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvcigibm8gcHJpbWVzIGxlc3MgdGhhbiAyIikKICAgICAgICBudW1iZXIgPSAyCgogICAgaWYgbnVtYmVyID09IDI6CiAgICAgICAgeWllbGQgMgogICAgICAgICMgdGhlcmUgYXJlIG5vIG51bWJlcnMgbGVzcyB0aGFuIDIgd2hpY2ggYXJlIHByaW1lOyBhbHNvIGlmIHRoZXkgb25seSBhc2tlZCBmb3IgMSBudW1iZXIsIHdlIGFyZSBkb25lCiAgICAgICAgaWYgZGlyZWN0aW9uID09IE5FR0FUSVZFIG9yIGNvdW50ID09IDE6IHJhaXNlIFN0b3BJdGVyYXRpb24oKQogICAgICAgICMgbm93IHRoYXQgd2UndmUgdGFrZW4gY2FyZSBvZiB0aGUgZWRnZSBjYXNlLCB3ZSBjb250aW51ZSBmcm9tIDMKICAgICAgICBudW1iZXIgPSAzCiAgICAgICAgY291bnQgLT0gMQogICAgZWxpZiBudW1iZXIgJSAyID09IDA6CiAgICAgICAgIyBpZiB0aGUgbnVtYmVyIGlzIGV2ZW4sIGp1c3QgYWRkIDEgaW4gdGhlIHByb3BlciBkaXJlY3Rpb24gYW5kIGl0IHdpbGwgYmUgb2RkLCB0aGVuIGl0ZXJhdGlvbiBjYW4gcHJvY2VlZCBub3JtYWxseQogICAgICAgIG51bWJlciArPSBkaXJlY3Rpb24KCiAgICBmb3IgcHJpbWV0ZXN0IGluIGl0ZXJ0b29scy5jb3VudChudW1iZXIsIDIqZGlyZWN0aW9uKToKICAgICAgICBpZiBwcmltZXRlc3QgPCAxOiByYWlzZSBTdG9wSXRlcmF0aW9uKCkKICAgICAgICBpZiBfX2lzcHJpbWUocHJpbWV0ZXN0KToKICAgICAgICAgICAgeWllbGQgcHJpbWV0ZXN0CiAgICAgICAgICAgIGNvdW50IC09IDEKICAgICAgICBpZiBjb3VudCA9PSAwOiByYWlzZSBTdG9wSXRlcmF0aW9uKCkKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBmcm9tIHN5cyBpbXBvcnQgYXJndgoKICAgIG51bWJlciA9IGludChhcmd2WzFdKQogICAgY291bnQgPSAxCiAgICBpZiBsZW4oYXJndikgPiAyOiBjb3VudCA9IGludChhcmd2WzJdKQogICAgZGlyZWN0aW9uID0gUE9TSVRJVkUKPHxmaW1faG9sZXw+CiAgICAgICAgZWxpZiBkaXJlY3Rpb24gPT0gIk5FR0FUSVZFIjoKICAgICAgICAgICAgZGlyZWN0aW9uID0gTkVHQVRJVkUKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCAnZGlyZWN0aW9uIG11c3QgYmUgInBvc2l0aXZlIiBvciAibmVnYXRpdmUiJwogICAgICAgICAgICBleGl0KDEpCgogICAgZm9yIHByaW1lIGluIGNsb3Nlc3RwcmltZXMobnVtYmVyLCBjb3VudCwgZGlyZWN0aW9uKToKICAgICAgICBwcmludCBwcmltZQo8fGZpbV9zdWZmaXh8PgogICAgaWYgbGVuKGFyZ3YpID4gMzoKICAgICAgICBkaXJlY3Rpb24gPSBhcmd2WzNdLnVwcGVyKCkKICAgICAgICBpZiBkaXJlY3Rpb24gPT0gIlBPU0lUSVZFIjoKICAgICAgICAgICAgZGlyZWN0aW9uID0gUE9TSVRJVkUKPHxmaW1fZW5kfD4="]
["840dfbd06ee6455f49b4a0978f6315c38058a81f-1","840dfbd06ee6455f49b4a0978f6315c38058a81f","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIKQ3JlYXRlZCBvbiBUdWUgQXByIDMwIDIxOjQ5OjU1IDIwMTkKCkBhdXRob3I6IGNyeXN0YWwKIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IG9zCmltcG9ydCB3YXJuaW5ncwoKZGVmIGNyZWF0ZU91dHB1dEZvbGRlck5hbWUob3V0cHV0UGF0aCwgS21heCwgZGF0YXNldCwgZXBvY2gsIGJhdGNoX2l0ZXIsIHNjYWxlLCBiYXRjaHNpemUscmVwPTEsIHNmPTAuMSk6Cjx8ZmltX2VuZHw+"]
["840dfbd06ee6455f49b4a0978f6315c38058a81f-2","840dfbd06ee6455f49b4a0978f6315c38058a81f","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIKQ3JlYXRlZCBvbiBUdWUgQXByIDMwIDIxOjQ5OjU1IDIwMTkKCkBhdXRob3I6IGNyeXN0YWwKIiIiCmltcG9ydCBvcwppbXBvcnQgd2FybmluZ3MKCmRlZiBjcmVhdGVPdXRwdXRGb2xkZXJOYW1lKG91dHB1dFBhdGgsIEttYXgsIGRhdGFzZXQsIGVwb2NoLCBiYXRjaF9pdGVyLCBzY2FsZSwgYmF0Y2hzaXplLHJlcD0xLCBzZj0wLjEpOgogICAgCiAgICBpZiBub3QgaXNpbnN0YW5jZShLbWF4LCBzdHIpOgogICAgICAgIEttYXggPSBzdHIoS21heCkKICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGFzZXQsIHN0cik6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVGhlIGlucHV0IGZvciBkYXRhc2V0IHNob3VsZCBiZSBhIHN0cmluZyIpCiAgICBpZiBub3QgaXNpbnN0YW5jZShlcG9jaCwgc3RyKToKICAgICAgICBlcG9jaCA9IHN0cihlcG9jaCkKICAgIGlmIG5vdCBpc2luc3RhbmNlKGJhdGNoX2l0ZXIsIHN0cik6CiAgICAgICAgYmF0Y2hfaXRlciA9IHN0cihiYXRjaF9pdGVyKQogICAgaWYgbm90IGlzaW5zdGFuY2Uoc2NhbGUsIHN0cik6CiAgICAgICAgc2NhbGUgPSBzdHIoc2NhbGUpCiAgICBpZiBub3QgaXNpbnN0YW5jZShiYXRjaHNpemUsIHN0cik6CiAgICAgICAgYmF0Y2hzaXplID0gc3RyKGJhdGNoc2l6ZSkKICAgIGlmIG5vdCBpc2luc3RhbmNlKHJlcCwgc3RyKToKICAgICAgICByZXAgPSBzdHIocmVwKQogICAgaWYgbm90IGlzaW5zdGFuY2Uoc2YsIHN0cik6CiAgICAgICAgc2YgPSBzdHIoc2YpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIAogICAgZm9sZGVyTmFtZSA9ICdLbWF4JyArIEttYXggKyBkYXRhc2V0ICsgJ2Vwb2NoJyArIGVwb2NoICsgJ2JhdGNoX2l0ZXInICsgYmF0Y2hfaXRlciArICdzY2FsZScgKyBzY2FsZSArICdicycgKyBiYXRjaHNpemUgKyAncmVwJysgcmVwICsgJ3NmJyArIHNmICAgIAogICAgd2hvbGVGb2xkZXJOYW1lID0gb3MucGF0aC5qb2luKG91dHB1dFBhdGgsIGZvbGRlck5hbWUpCgo8fGZpbV9lbmR8Pg=="]
["840dfbd06ee6455f49b4a0978f6315c38058a81f-3","840dfbd06ee6455f49b4a0978f6315c38058a81f","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIKQ3JlYXRlZCBvbiBUdWUgQXByIDMwIDIxOjQ5OjU1IDIwMTkKCkBhdXRob3I6IGNyeXN0YWwKIiIiCmltcG9ydCBvcwppbXBvcnQgd2FybmluZ3MKCmRlZiBjcmVhdGVPdXRwdXRGb2xkZXJOYW1lKG91dHB1dFBhdGgsIEttYXgsIGRhdGFzZXQsIGVwb2NoLCBiYXRjaF9pdGVyLCBzY2FsZSwgYmF0Y2hzaXplLHJlcD0xLCBzZj0wLjEpOgogICAgCiAgICBpZiBub3QgaXNpbnN0YW5jZShLbWF4LCBzdHIpOgogICAgICAgIEttYXggPSBzdHIoS21heCkKICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGFzZXQsIHN0cik6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVGhlIGlucHV0IGZvciBkYXRhc2V0IHNob3VsZCBiZSBhIHN0cmluZyIpCiAgICBpZiBub3QgaXNpbnN0YW5jZShlcG9jaCwgc3RyKToKICAgICAgICBlcG9jaCA9IHN0cihlcG9jaCkKICAgIGlmIG5vdCBpc2luc3RhbmNlKGJhdGNoX2l0ZXIsIHN0cik6CiAgICAgICAgYmF0Y2hfaXRlciA9IHN0cihiYXRjaF9pdGVyKQogICAgaWYgbm90IGlzaW5zdGFuY2Uoc2NhbGUsIHN0cik6CiAgICAgICAgc2NhbGUgPSBzdHIoc2NhbGUpCiAgICBpZiBub3QgaXNpbnN0YW5jZShiYXRjaHNpemUsIHN0cik6CiAgICAgICAgYmF0Y2hzaXplID0gc3RyKGJhdGNoc2l6ZSkKICAgIGlmIG5vdCBpc2luc3RhbmNlKHJlcCwgc3RyKToKICAgICAgICByZXAgPSBzdHIocmVwKQogICAgaWYgbm90IGlzaW5zdGFuY2Uoc2YsIHN0cik6CiAgICAgICAgc2YgPSBzdHIoc2YpCiAgICAKICAgIGZvbGRlck5hbWUgPSAnS21heCcgKyBLbWF4ICsgZGF0YXNldCArICdlcG9jaCcgKyBlcG9jaCArICdiYXRjaF9pdGVyJyArIGJhdGNoX2l0ZXIgKyAnc2NhbGUnICsgc2NhbGUgKyAnYnMnICsgYmF0Y2hzaXplICsgJ3JlcCcrIHJlcCArICdzZicgKyBzZiAgICAKICAgIHdob2xlRm9sZGVyTmFtZSA9IG9zLnBhdGguam9pbihvdXRwdXRQYXRoLCBmb2xkZXJOYW1lKQoKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh3aG9sZUZvbGRlck5hbWUpOgogICAgICAgIG9zLm1ha2VkaXJzKHdob2xlRm9sZGVyTmFtZSkKICAgIGVsc2U6CiAgICAgICAgd2FybmluZ3Mud2FybigiVGhlIGZvbGRlciBoYXMgYWxyZWFkeSBleGlzdGVkIikKICAgIHJldHVybiB3aG9sZUZvbGRlck5hbWUKCiAgICAjIGlmIG9zLnBhdGguZXhpc3RzKHdob2xlRm9sZGVyTmFtZSk6CiAgICAgICAgIyMgY2hlY2sgaWYgdGhpcyBmb2xkZXIgZXhpc2l0cyBpbiBvdXRwdXRQYXRoLAogICAgIyAgICByYWlzZSBWYWx1ZUVycm9yKCJUaGUgZm9sZGVyIGhhcyBhbHJlYWR5IGV4aXNpdHMiKQogICAgIyBlbHNlOgogICAgICAgICMjIGlmIG5vdCwgY3JlYXRlIGEgZm9sZGVyIHdpdGggZm9sZGVyTmFtZSBpbiBvdXRwdXRQYXRoCiAgICAjICAgIG9zLm1ha2VkaXJzKHdob2xlRm9sZGVyTmFtZSkKICAgICAgICAKICAgICMgcmV0dXJuIHdob2xlRm9sZGVyTmFtZQogICAgCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIGNyZWF0ZUZ1bGxPdXRwdXRGaWxlTmFtZSh3aG9sZUZvbGRlck5hbWUsIGZpbGVOYW1lKToKICAgIGlmIG5vdCBpc2luc3RhbmNlKGZpbGVOYW1lLCBzdHIpOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlRoZSBmaWxlTmFtZSBzaG91bGQgYmUgb2Ygc3RyaW5nIHR5cGUiKQogICAgZWxzZToKPHxmaW1fZW5kfD4="]
["840dfbd06ee6455f49b4a0978f6315c38058a81f-4","840dfbd06ee6455f49b4a0978f6315c38058a81f","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIKQ3JlYXRlZCBvbiBUdWUgQXByIDMwIDIxOjQ5OjU1IDIwMTkKCkBhdXRob3I6IGNyeXN0YWwKIiIiCmltcG9ydCBvcwppbXBvcnQgd2FybmluZ3MKCmRlZiBjcmVhdGVPdXRwdXRGb2xkZXJOYW1lKG91dHB1dFBhdGgsIEttYXgsIGRhdGFzZXQsIGVwb2NoLCBiYXRjaF9pdGVyLCBzY2FsZSwgYmF0Y2hzaXplLHJlcD0xLCBzZj0wLjEpOgogICAgCiAgICBpZiBub3QgaXNpbnN0YW5jZShLbWF4LCBzdHIpOgogICAgICAgIEttYXggPSBzdHIoS21heCkKICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGFzZXQsIHN0cik6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVGhlIGlucHV0IGZvciBkYXRhc2V0IHNob3VsZCBiZSBhIHN0cmluZyIpCiAgICBpZiBub3QgaXNpbnN0YW5jZShlcG9jaCwgc3RyKToKICAgICAgICBlcG9jaCA9IHN0cihlcG9jaCkKICAgIGlmIG5vdCBpc2luc3RhbmNlKGJhdGNoX2l0ZXIsIHN0cik6CiAgICAgICAgYmF0Y2hfaXRlciA9IHN0cihiYXRjaF9pdGVyKQogICAgaWYgbm90IGlzaW5zdGFuY2Uoc2NhbGUsIHN0cik6CiAgICAgICAgc2NhbGUgPSBzdHIoc2NhbGUpCiAgICBpZiBub3QgaXNpbnN0YW5jZShiYXRjaHNpemUsIHN0cik6CiAgICAgICAgYmF0Y2hzaXplID0gc3RyKGJhdGNoc2l6ZSkKICAgIGlmIG5vdCBpc2luc3RhbmNlKHJlcCwgc3RyKToKICAgICAgICByZXAgPSBzdHIocmVwKQogICAgaWYgbm90IGlzaW5zdGFuY2Uoc2YsIHN0cik6CiAgICAgICAgc2YgPSBzdHIoc2YpCiAgICAKICAgIGZvbGRlck5hbWUgPSAnS21heCcgKyBLbWF4ICsgZGF0YXNldCArICdlcG9jaCcgKyBlcG9jaCArICdiYXRjaF9pdGVyJyArIGJhdGNoX2l0ZXIgKyAnc2NhbGUnICsgc2NhbGUgKyAnYnMnICsgYmF0Y2hzaXplICsgJ3JlcCcrIHJlcCArICdzZicgKyBzZiAgICAKICAgIHdob2xlRm9sZGVyTmFtZSA9IG9zLnBhdGguam9pbihvdXRwdXRQYXRoLCBmb2xkZXJOYW1lKQoKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh3aG9sZUZvbGRlck5hbWUpOgogICAgICAgIG9zLm1ha2VkaXJzKHdob2xlRm9sZGVyTmFtZSkKICAgIGVsc2U6CiAgICAgICAgd2FybmluZ3Mud2FybigiVGhlIGZvbGRlciBoYXMgYWxyZWFkeSBleGlzdGVkIikKICAgIHJldHVybiB3aG9sZUZvbGRlck5hbWUKCiAgICAjIGlmIG9zLnBhdGguZXhpc3RzKHdob2xlRm9sZGVyTmFtZSk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAjIyBjaGVjayBpZiB0aGlzIGZvbGRlciBleGlzaXRzIGluIG91dHB1dFBhdGgsCjx8ZmltX2VuZHw+"]
["840dfbd06ee6455f49b4a0978f6315c38058a81f-5","840dfbd06ee6455f49b4a0978f6315c38058a81f","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQoiIiIKQ3JlYXRlZCBvbiBUdWUgQXByIDMwIDIxOjQ5OjU1IDIwMTkKCkBhdXRob3I6IGNyeXN0YWwKIiIiCmltcG9ydCBvcwppbXBvcnQgd2FybmluZ3MKCmRlZiBjcmVhdGVPdXRwdXRGb2xkZXJOYW1lKG91dHB1dFBhdGgsIEttYXgsIGRhdGFzZXQsIGVwb2NoLCBiYXRjaF9pdGVyLCBzY2FsZSwgYmF0Y2hzaXplLHJlcD0xLCBzZj0wLjEpOgogICAgCiAgICBpZiBub3QgaXNpbnN0YW5jZShLbWF4LCBzdHIpOgogICAgICAgIEttYXggPSBzdHIoS21heCkKICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGFzZXQsIHN0cik6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVGhlIGlucHV0IGZvciBkYXRhc2V0IHNob3VsZCBiZSBhIHN0cmluZyIpCiAgICBpZiBub3QgaXNpbnN0YW5jZShlcG9jaCwgc3RyKToKICAgICAgICBlcG9jaCA9IHN0cihlcG9jaCkKICAgIGlmIG5vdCBpc2luc3RhbmNlKGJhdGNoX2l0ZXIsIHN0cik6Cjx8ZmltX2hvbGV8PgogICAgaWYgbm90IGlzaW5zdGFuY2Uoc2NhbGUsIHN0cik6CiAgICAgICAgc2NhbGUgPSBzdHIoc2NhbGUpCiAgICBpZiBub3QgaXNpbnN0YW5jZShiYXRjaHNpemUsIHN0cik6CiAgICAgICAgYmF0Y2hzaXplID0gc3RyKGJhdGNoc2l6ZSkKICAgIGlmIG5vdCBpc2luc3RhbmNlKHJlcCwgc3RyKToKICAgICAgICByZXAgPSBzdHIocmVwKQogICAgaWYgbm90IGlzaW5zdGFuY2Uoc2YsIHN0cik6CiAgICAgICAgc2YgPSBzdHIoc2YpCiAgICAKICAgIGZvbGRlck5hbWUgPSAnS21heCcgKyBLbWF4ICsgZGF0YXNldCArICdlcG9jaCcgKyBlcG9jaCArICdiYXRjaF9pdGVyJyArIGJhdGNoX2l0ZXIgKyAnc2NhbGUnICsgc2NhbGUgKyAnYnMnICsgYmF0Y2hzaXplICsgJ3JlcCcrIHJlcCArICdzZicgKyBzZiAgICAKICAgIHdob2xlRm9sZGVyTmFtZSA9IG9zLnBhdGguam9pbihvdXRwdXRQYXRoLCBmb2xkZXJOYW1lKQoKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh3aG9sZUZvbGRlck5hbWUpOgogICAgICAgIG9zLm1ha2VkaXJzKHdob2xlRm9sZGVyTmFtZSkKICAgIGVsc2U6CiAgICAgICAgd2FybmluZ3Mud2FybigiVGhlIGZvbGRlciBoYXMgYWxyZWFkeSBleGlzdGVkIikKICAgIHJldHVybiB3aG9sZUZvbGRlck5hbWUKCiAgICAjIGlmIG9zLnBhdGguZXhpc3RzKHdob2xlRm9sZGVyTmFtZSk6CiAgICAgICAgIyMgY2hlY2sgaWYgdGhpcyBmb2xkZXIgZXhpc2l0cyBpbiBvdXRwdXRQYXRoLAogICAgIyAgICByYWlzZSBWYWx1ZUVycm9yKCJUaGUgZm9sZGVyIGhhcyBhbHJlYWR5IGV4aXNpdHMiKQogICAgIyBlbHNlOgogICAgICAgICMjIGlmIG5vdCwgY3JlYXRlIGEgZm9sZGVyIHdpdGggZm9sZGVyTmFtZSBpbiBvdXRwdXRQYXRoCiAgICAjICAgIG9zLm1ha2VkaXJzKHdob2xlRm9sZGVyTmFtZSkKICAgICAgICAKICAgICMgcmV0dXJuIHdob2xlRm9sZGVyTmFtZQogICAgCmRlZiBjcmVhdGVGdWxsT3V0cHV0RmlsZU5hbWUod2hvbGVGb2xkZXJOYW1lLCBmaWxlTmFtZSk6CiAgICBpZiBub3QgaXNpbnN0YW5jZShmaWxlTmFtZSwgc3RyKToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJUaGUgZmlsZU5hbWUgc2hvdWxkIGJlIG9mIHN0cmluZyB0eXBlIikKICAgIGVsc2U6CiAgICAgICAgZnVsbEZpbGVOYW1lID0gb3MucGF0aC5qb2luKHdob2xlRm9sZGVyTmFtZSwgZmlsZU5hbWUpCiAgICByZXR1cm4gZnVsbEZpbGVOYW1lCiAgICAgICAgCiAgICAKICAgIAogICAgCiAgICAKICAgIAogICAgCiAgICAKICAgIAogICAgCiAgICAKPHxmaW1fc3VmZml4fD4KICAgICAgICBiYXRjaF9pdGVyID0gc3RyKGJhdGNoX2l0ZXIpCjx8ZmltX2VuZHw+"]
["084048e53339ffcc694229f147e689e398d82987-1","084048e53339ffcc694229f147e689e398d82987","PHxmaW1fcHJlZml4fD4KIyAlJQppbXBvcnQgcGxvdGx5LmdyYXBoX29iamVjdHMgYXMgZ28KaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgc3lzCgoKZGVmIG5vcm1hbGl6ZShkZik6CiAgICBpbml0aWFsX29wZW4gPSBkZi5pbG9jWzBdLk9wZW4KICAgIGRmW1siT3BlbiIsICJIaWdoIiwgIkxvdyIsICJDbG9zZSJdXSA9IGRmW1siT3BlbiIsICJIaWdoIiwgIkxvdyIsICJDbG9zZSJdXS5kaXZpZGUoaW5pdGlhbF9vcGVuKQogICAgcmV0dXJuIGRmCgoKZGF4X2RhdGEgPSBub3JtYWxpemUocGQucmVhZF9jc3YoIi4uL2RhdGEvXmRheF9kLmNzdiIpKQpzaGNfZGF0YSA9IG5vcm1hbGl6ZShwZC5yZWFkX2NzdigiLi4vZGF0YS9ec2hjX2QuY3N2IikpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4Kc3B4X2RhdGEgPSBub3JtYWxpemUocGQucmVhZF9jc3YoIi4uL2RhdGEvXnNweF9kLmNzdiIpKQp3aWdfZGF0YSA9IG5vcm1hbGl6ZShwZC5yZWFkX2NzdigiLi4vZGF0YS93aWdfZC5jc3YiKSkKCgo8fGZpbV9lbmR8Pg=="]
["084048e53339ffcc694229f147e689e398d82987-2","084048e53339ffcc694229f147e689e398d82987","PHxmaW1fcHJlZml4fD4KIyAlJQppbXBvcnQgcGxvdGx5LmdyYXBoX29iamVjdHMgYXMgZ28KaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgc3lzCgoKZGVmIG5vcm1hbGl6ZShkZik6CiAgICBpbml0aWFsX29wZW4gPSBkZi5pbG9jWzBdLk9wZW4KICAgIGRmW1siT3BlbiIsICJIaWdoIiwgIkxvdyIsICJDbG9zZSJdXSA9IGRmW1siT3BlbiIsICJIaWdoIiwgIkxvdyIsICJDbG9zZSJdXS5kaXZpZGUoaW5pdGlhbF9vcGVuKQogICAgcmV0dXJuIGRmCgoKZGF4X2RhdGEgPSBub3JtYWxpemUocGQucmVhZF9jc3YoIi4uL2RhdGEvXmRheF9kLmNzdiIpKQpzaGNfZGF0YSA9IG5vcm1hbGl6ZShwZC5yZWFkX2NzdigiLi4vZGF0YS9ec2hjX2QuY3N2IikpCnNweF9kYXRhID0gbm9ybWFsaXplKHBkLnJlYWRfY3N2KCIuLi9kYXRhL15zcHhfZC5jc3YiKSkKd2lnX2RhdGEgPSBub3JtYWxpemUocGQucmVhZF9jc3YoIi4uL2RhdGEvd2lnX2QuY3N2IikpCgoKZmlnID0gZ28uRmlndXJlKGRhdGE9W2dvLkNhbmRsZXN0aWNrKG5hbWU9J0RBWCcsIHg9ZGF4X2RhdGFbJ0RhdGUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW49ZGF4X2RhdGFbJ09wZW4nXSwgaGlnaD1kYXhfZGF0YVsnSGlnaCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93PWRheF9kYXRhWydMb3cnXSwgY2xvc2U9ZGF4X2RhdGFbJ0Nsb3NlJ10pLAoKICAgICAgICAgICAgICAgICAgICAgIGdvLkNhbmRsZXN0aWNrKG5hbWU9J1NTRSBDb21wb3NpdGUnLCB4PXNoY19kYXRhWydEYXRlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNyZWFzaW5nX2xpbmVfY29sb3I9J3llbGxvdycsIGRlY3JlYXNpbmdfbGluZV9jb2xvcj0ncHVycGxlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW49c2hjX2RhdGFbJ09wZW4nXSwgaGlnaD1zaGNfZGF0YVsnSGlnaCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93PXNoY19kYXRhWydMb3cnXSwgY2xvc2U9c2hjX2RhdGFbJ0Nsb3NlJ10pLAo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvdz1zcHhfZGF0YVsnTG93J10sIGNsb3NlPXNweF9kYXRhWydDbG9zZSddKSwKCiAgICAgICAgICAgICAgICAgICAgICBnby5DYW5kbGVzdGljayhuYW1lPSdXSUcnLCB4PXdpZ19kYXRhWydEYXRlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNyZWFzaW5nX2xpbmVfY29sb3I9J3NwcmluZ2dyZWVuJywgZGVjcmVhc2luZ19saW5lX2NvbG9yPSdmdWNoc2lhJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW49d2lnX2RhdGFbJ09wZW4nXSwgaGlnaD13aWdfZGF0YVsnSGlnaCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93PXdpZ19kYXRhWydMb3cnXSwgY2xvc2U9d2lnX2RhdGFbJ0Nsb3NlJ10pCiAgICAgICAgICAgICAgICAgICAgICBdKQoKZmlnLnVwZGF0ZV9sYXlvdXQodGl0bGU9eyd0ZXh0JzogJ0NvdmlkIGltcGFjdCBvbiBzdG9jayBtYXJrZXQnLCAneGFuY2hvcic6ICJjZW50ZXIiLCAneCc6IDAuNX0pCgojIGZpZy51cGRhdGVfbGF5b3V0KAojICAgICB0aXRsZT0nVGhlIEdyZWF0IFJlY2Vzc2lvbicsCiMgICAgIHlheGlzX3RpdGxlPSdBQVBMIFN0b2NrJywKIyAgICAgc2hhcGVzPVtkaWN0KAojICAgICAgICAgeDA9JzIwMTYtMTItMDknLCB4MT0nMjAxNi0xMi0wOScsIHkwPTAsIHkxPTEsIHhyZWY9J3gnLCB5cmVmPSdwYXBlcicsCiMgICAgICAgICBsaW5lX3dpZHRoPTIpXSwKIyAgICAgYW5ub3RhdGlvbnM9W2RpY3QoCiMgICAgICAgICB4PScyMDE2LTEyLTA5JywgeT0wLjA1LCB4cmVmPSd4JywgeXJlZj0ncGFwZXInLAojICAgICAgICAgc2hvd2Fycm93PUZhbHNlLCB4YW5jaG9yPSdsZWZ0JywgdGV4dD0nSW5jcmVhc2UgUGVyaW9kIEJlZ2lucycpXQojICkKYXJncyA9IHN5cy5hcmd2CmlmIGxlbihhcmdzKSA+IDE6CiAgICBpZiBhcmdzWzFdID09ICIxIjoKICAgICAgICBuYW1lID0gYXJnc1swXS5zcGxpdCgiLiIpWzBdCiAgICAgICAgcGF0aCA9ICIuLi9wbG90cy8iCiAgICAgICAgZmlnLndyaXRlX2h0bWwoInt9e30uaHRtbCIuZm9ybWF0KHBhdGgsIG5hbWUpKQogICAgICAgIHByaW50KCJUaGUgcGxvdCB3YXMgc2F2ZWQgdG8ge317fS5odG1sIi5mb3JtYXQocGF0aCwgbmFtZSkpCiAgICBlbHNlOgogICAgICAgIGZpZy5zaG93KCkKZWxzZToKICAgIGZpZy5zaG93KCkKCiMgJSUKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgICAgICAgICAgICAgICBnby5DYW5kbGVzdGljayhuYW1lPSdTJlAgNTAwJywgeD1zcHhfZGF0YVsnRGF0ZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jcmVhc2luZ19saW5lX2NvbG9yPSdibHVlJywgZGVjcmVhc2luZ19saW5lX2NvbG9yPSdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Blbj1zcHhfZGF0YVsnT3BlbiddLCBoaWdoPXNweF9kYXRhWydIaWdoJ10sCjx8ZmltX2VuZHw+"]
["084048e53339ffcc694229f147e689e398d82987-3","084048e53339ffcc694229f147e689e398d82987","PHxmaW1fcHJlZml4fD4KIyAlJQppbXBvcnQgcGxvdGx5LmdyYXBoX29iamVjdHMgYXMgZ28KaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgc3lzCgoKZGVmIG5vcm1hbGl6ZShkZik6CiAgICBpbml0aWFsX29wZW4gPSBkZi5pbG9jWzBdLk9wZW4KICAgIGRmW1siT3BlbiIsICJIaWdoIiwgIkxvdyIsICJDbG9zZSJdXSA9IGRmW1siT3BlbiIsICJIaWdoIiwgIkxvdyIsICJDbG9zZSJdXS5kaXZpZGUoaW5pdGlhbF9vcGVuKQogICAgcmV0dXJuIGRmCgo8fGZpbV9ob2xlfD4Kd2lnX2RhdGEgPSBub3JtYWxpemUocGQucmVhZF9jc3YoIi4uL2RhdGEvd2lnX2QuY3N2IikpCgoKZmlnID0gZ28uRmlndXJlKGRhdGE9W2dvLkNhbmRsZXN0aWNrKG5hbWU9J0RBWCcsIHg9ZGF4X2RhdGFbJ0RhdGUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW49ZGF4X2RhdGFbJ09wZW4nXSwgaGlnaD1kYXhfZGF0YVsnSGlnaCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93PWRheF9kYXRhWydMb3cnXSwgY2xvc2U9ZGF4X2RhdGFbJ0Nsb3NlJ10pLAoKICAgICAgICAgICAgICAgICAgICAgIGdvLkNhbmRsZXN0aWNrKG5hbWU9J1NTRSBDb21wb3NpdGUnLCB4PXNoY19kYXRhWydEYXRlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNyZWFzaW5nX2xpbmVfY29sb3I9J3llbGxvdycsIGRlY3JlYXNpbmdfbGluZV9jb2xvcj0ncHVycGxlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW49c2hjX2RhdGFbJ09wZW4nXSwgaGlnaD1zaGNfZGF0YVsnSGlnaCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93PXNoY19kYXRhWydMb3cnXSwgY2xvc2U9c2hjX2RhdGFbJ0Nsb3NlJ10pLAoKICAgICAgICAgICAgICAgICAgICAgIGdvLkNhbmRsZXN0aWNrKG5hbWU9J1MmUCA1MDAnLCB4PXNweF9kYXRhWydEYXRlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNyZWFzaW5nX2xpbmVfY29sb3I9J2JsdWUnLCBkZWNyZWFzaW5nX2xpbmVfY29sb3I9J29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuPXNweF9kYXRhWydPcGVuJ10sIGhpZ2g9c3B4X2RhdGFbJ0hpZ2gnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvdz1zcHhfZGF0YVsnTG93J10sIGNsb3NlPXNweF9kYXRhWydDbG9zZSddKSwKCiAgICAgICAgICAgICAgICAgICAgICBnby5DYW5kbGVzdGljayhuYW1lPSdXSUcnLCB4PXdpZ19kYXRhWydEYXRlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNyZWFzaW5nX2xpbmVfY29sb3I9J3NwcmluZ2dyZWVuJywgZGVjcmVhc2luZ19saW5lX2NvbG9yPSdmdWNoc2lhJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW49d2lnX2RhdGFbJ09wZW4nXSwgaGlnaD13aWdfZGF0YVsnSGlnaCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93PXdpZ19kYXRhWydMb3cnXSwgY2xvc2U9d2lnX2RhdGFbJ0Nsb3NlJ10pCiAgICAgICAgICAgICAgICAgICAgICBdKQoKZmlnLnVwZGF0ZV9sYXlvdXQodGl0bGU9eyd0ZXh0JzogJ0NvdmlkIGltcGFjdCBvbiBzdG9jayBtYXJrZXQnLCAneGFuY2hvcic6ICJjZW50ZXIiLCAneCc6IDAuNX0pCgojIGZpZy51cGRhdGVfbGF5b3V0KAojICAgICB0aXRsZT0nVGhlIEdyZWF0IFJlY2Vzc2lvbicsCiMgICAgIHlheGlzX3RpdGxlPSdBQVBMIFN0b2NrJywKIyAgICAgc2hhcGVzPVtkaWN0KAojICAgICAgICAgeDA9JzIwMTYtMTItMDknLCB4MT0nMjAxNi0xMi0wOScsIHkwPTAsIHkxPTEsIHhyZWY9J3gnLCB5cmVmPSdwYXBlcicsCiMgICAgICAgICBsaW5lX3dpZHRoPTIpXSwKIyAgICAgYW5ub3RhdGlvbnM9W2RpY3QoCiMgICAgICAgICB4PScyMDE2LTEyLTA5JywgeT0wLjA1LCB4cmVmPSd4JywgeXJlZj0ncGFwZXInLAojICAgICAgICAgc2hvd2Fycm93PUZhbHNlLCB4YW5jaG9yPSdsZWZ0JywgdGV4dD0nSW5jcmVhc2UgUGVyaW9kIEJlZ2lucycpXQojICkKYXJncyA9IHN5cy5hcmd2CmlmIGxlbihhcmdzKSA+IDE6CiAgICBpZiBhcmdzWzFdID09ICIxIjoKICAgICAgICBuYW1lID0gYXJnc1swXS5zcGxpdCgiLiIpWzBdCiAgICAgICAgcGF0aCA9ICIuLi9wbG90cy8iCiAgICAgICAgZmlnLndyaXRlX2h0bWwoInt9e30uaHRtbCIuZm9ybWF0KHBhdGgsIG5hbWUpKQogICAgICAgIHByaW50KCJUaGUgcGxvdCB3YXMgc2F2ZWQgdG8ge317fS5odG1sIi5mb3JtYXQocGF0aCwgbmFtZSkpCiAgICBlbHNlOgogICAgICAgIGZpZy5zaG93KCkKZWxzZToKICAgIGZpZy5zaG93KCkKCiMgJSUKPHxmaW1fc3VmZml4fD4KCmRheF9kYXRhID0gbm9ybWFsaXplKHBkLnJlYWRfY3N2KCIuLi9kYXRhL15kYXhfZC5jc3YiKSkKc2hjX2RhdGEgPSBub3JtYWxpemUocGQucmVhZF9jc3YoIi4uL2RhdGEvXnNoY19kLmNzdiIpKQpzcHhfZGF0YSA9IG5vcm1hbGl6ZShwZC5yZWFkX2NzdigiLi4vZGF0YS9ec3B4X2QuY3N2IikpCjx8ZmltX2VuZHw+"]
["084048e53339ffcc694229f147e689e398d82987-4","084048e53339ffcc694229f147e689e398d82987","PHxmaW1fcHJlZml4fD4KIyAlJQppbXBvcnQgcGxvdGx5LmdyYXBoX29iamVjdHMgYXMgZ28KaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgc3lzCgoKZGVmIG5vcm1hbGl6ZShkZik6CiAgICBpbml0aWFsX29wZW4gPSBkZi5pbG9jWzBdLk9wZW4KICAgIGRmW1siT3BlbiIsICJIaWdoIiwgIkxvdyIsICJDbG9zZSJdXSA9IGRmW1siT3BlbiIsICJIaWdoIiwgIkxvdyIsICJDbG9zZSJdXS5kaXZpZGUoaW5pdGlhbF9vcGVuKQogICAgcmV0dXJuIGRmCgoKZGF4X2RhdGEgPSBub3JtYWxpemUocGQucmVhZF9jc3YoIi4uL2RhdGEvXmRheF9kLmNzdiIpKQpzaGNfZGF0YSA9IG5vcm1hbGl6ZShwZC5yZWFkX2NzdigiLi4vZGF0YS9ec2hjX2QuY3N2IikpCnNweF9kYXRhID0gbm9ybWFsaXplKHBkLnJlYWRfY3N2KCIuLi9kYXRhL15zcHhfZC5jc3YiKSkKd2lnX2RhdGEgPSBub3JtYWxpemUocGQucmVhZF9jc3YoIi4uL2RhdGEvd2lnX2QuY3N2IikpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgpmaWcgPSBnby5GaWd1cmUoZGF0YT1bZ28uQ2FuZGxlc3RpY2sobmFtZT0nREFYJywgeD1kYXhfZGF0YVsnRGF0ZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Blbj1kYXhfZGF0YVsnT3BlbiddLCBoaWdoPWRheF9kYXRhWydIaWdoJ10sCjx8ZmltX2VuZHw+"]
["084048e53339ffcc694229f147e689e398d82987-5","084048e53339ffcc694229f147e689e398d82987","PHxmaW1fcHJlZml4fD4KIyAlJQppbXBvcnQgcGxvdGx5LmdyYXBoX29iamVjdHMgYXMgZ28KaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgc3lzCgoKZGVmIG5vcm1hbGl6ZShkZik6CiAgICBpbml0aWFsX29wZW4gPSBkZi5pbG9jWzBdLk9wZW4KICAgIGRmW1siT3BlbiIsICJIaWdoIiwgIkxvdyIsICJDbG9zZSJdXSA9IGRmW1siT3BlbiIsICJIaWdoIiwgIkxvdyIsICJDbG9zZSJdXS5kaXZpZGUoaW5pdGlhbF9vcGVuKQogICAgcmV0dXJuIGRmCgoKZGF4X2RhdGEgPSBub3JtYWxpemUocGQucmVhZF9jc3YoIi4uL2RhdGEvXmRheF9kLmNzdiIpKQpzaGNfZGF0YSA9IG5vcm1hbGl6ZShwZC5yZWFkX2NzdigiLi4vZGF0YS9ec2hjX2QuY3N2IikpCnNweF9kYXRhID0gbm9ybWFsaXplKHBkLnJlYWRfY3N2KCIuLi9kYXRhL15zcHhfZC5jc3YiKSkKd2lnX2RhdGEgPSBub3JtYWxpemUocGQucmVhZF9jc3YoIi4uL2RhdGEvd2lnX2QuY3N2IikpCgoKZmlnID0gZ28uRmlndXJlKGRhdGE9W2dvLkNhbmRsZXN0aWNrKG5hbWU9J0RBWCcsIHg9ZGF4X2RhdGFbJ0RhdGUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW49ZGF4X2RhdGFbJ09wZW4nXSwgaGlnaD1kYXhfZGF0YVsnSGlnaCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93PWRheF9kYXRhWydMb3cnXSwgY2xvc2U9ZGF4X2RhdGFbJ0Nsb3NlJ10pLAoKICAgICAgICAgICAgICAgICAgICAgIGdvLkNhbmRsZXN0aWNrKG5hbWU9J1NTRSBDb21wb3NpdGUnLCB4PXNoY19kYXRhWydEYXRlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNyZWFzaW5nX2xpbmVfY29sb3I9J3llbGxvdycsIGRlY3JlYXNpbmdfbGluZV9jb2xvcj0ncHVycGxlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW49c2hjX2RhdGFbJ09wZW4nXSwgaGlnaD1zaGNfZGF0YVsnSGlnaCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93PXNoY19kYXRhWydMb3cnXSwgY2xvc2U9c2hjX2RhdGFbJ0Nsb3NlJ10pLAoKICAgICAgICAgICAgICAgICAgICAgIGdvLkNhbmRsZXN0aWNrKG5hbWU9J1MmUCA1MDAnLCB4PXNweF9kYXRhWydEYXRlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNyZWFzaW5nX2xpbmVfY29sb3I9J2JsdWUnLCBkZWNyZWFzaW5nX2xpbmVfY29sb3I9J29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuPXNweF9kYXRhWydPcGVuJ10sIGhpZ2g9c3B4X2RhdGFbJ0hpZ2gnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvdz1zcHhfZGF0YVsnTG93J10sIGNsb3NlPXNweF9kYXRhWydDbG9zZSddKSwKCiAgICAgICAgICAgICAgICAgICAgICBnby5DYW5kbGVzdGljayhuYW1lPSdXSUcnLCB4PXdpZ19kYXRhWydEYXRlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNyZWFzaW5nX2xpbmVfY29sb3I9J3NwcmluZ2dyZWVuJywgZGVjcmVhc2luZ19saW5lX2NvbG9yPSdmdWNoc2lhJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW49d2lnX2RhdGFbJ09wZW4nXSwgaGlnaD13aWdfZGF0YVsnSGlnaCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93PXdpZ19kYXRhWydMb3cnXSwgY2xvc2U9d2lnX2RhdGFbJ0Nsb3NlJ10pCiAgICAgICAgICAgICAgICAgICAgICBdKQoKZmlnLnVwZGF0ZV9sYXlvdXQodGl0bGU9eyd0ZXh0JzogJ0NvdmlkIGltcGFjdCBvbiBzdG9jayBtYXJrZXQnLCAneGFuY2hvcic6ICJjZW50ZXIiLCAneCc6IDAuNX0pCgojIGZpZy51cGRhdGVfbGF5b3V0KAojICAgICB0aXRsZT0nVGhlIEdyZWF0IFJlY2Vzc2lvbicsCiMgICAgIHlheGlzX3RpdGxlPSdBQVBMIFN0b2NrJywKIyAgICAgc2hhcGVzPVtkaWN0KAojICAgICAgICAgeDA9JzIwMTYtMTItMDknLCB4MT0nMjAxNi0xMi0wOScsIHkwPTAsIHkxPTEsIHhyZWY9J3gnLCB5cmVmPSdwYXBlcicsCiMgICAgICAgICBsaW5lX3dpZHRoPTIpXSwKIyAgICAgYW5ub3RhdGlvbnM9W2RpY3QoCiMgICAgICAgICB4PScyMDE2LTEyLTA5JywgeT0wLjA1LCB4cmVmPSd4JywgeXJlZj0ncGFwZXInLAojICAgICAgICAgc2hvd2Fycm93PUZhbHNlLCB4YW5jaG9yPSdsZWZ0JywgdGV4dD0nSW5jcmVhc2UgUGVyaW9kIEJlZ2lucycpXQojICkKYXJncyA9IHN5cy5hcmd2CmlmIGxlbihhcmdzKSA+IDE6CiAgICBpZiBhcmdzWzFdID09ICIxIjoKICAgICAgICBuYW1lID0gYXJnc1swXS5zcGxpdCgiLiIpWzBdCiAgICAgICAgcGF0aCA9ICIuLi9wbG90cy8iCiAgICAgICAgZmlnLndyaXRlX2h0bWwoInt9e30uaHRtbCIuZm9ybWF0KHBhdGgsIG5hbWUpKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcHJpbnQoIlRoZSBwbG90IHdhcyBzYXZlZCB0byB7fXt9Lmh0bWwiLmZvcm1hdChwYXRoLCBuYW1lKSkKPHxmaW1fZW5kfD4="]
["5f956eff22b1cd1a73f2e5cf7ba7ddeb7baef908-1","5f956eff22b1cd1a73f2e5cf7ba7ddeb7baef908","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHV1aWQKCmltcG9ydCBweXRlc3QKCmZyb20gYXBwbGl0b29scy5leWVzIGltcG9ydCBFeWVzCmZyb20gYXBwbGl0b29scy50YXJnZXQgaW1wb3J0IFRhcmdldAoKCjx8ZmltX2hvbGV8PgogICAgZXllcyA9IEV5ZXMoJ2h0dHBzOi8vbG9jYWxob3N0LmFwcGxpdG9vbHMuY29tJykKICAgIGRyaXZlciA9IGV5ZXMub3Blbihkcml2ZXIsICJQeXRob24gU0RLIiwgIlRlc3REZWxldGUiLCB7J3dpZHRoJzogODAwLCAnaGVpZ2h0JzogNTk5fSkKICAgIGRyaXZlci5nZXQoImh0dHBzOi8vYXBwbGl0b29scy5jb20vaGVsbG93b3JsZCIpCiAgICBleWVzLmNoZWNrKCJIZWxsbyIsIFRhcmdldC53aW5kb3coKSkKICAgIHJlc3VsdHMgPSBleWVzLmNsb3NlKCkKICAgIHJlc3VsdHMuZGVsZXRlKCkKICAgIGV5ZXMuYWJvcnRfaWZfbm90X2Nsb3NlZCgpCgoKQHB5dGVzdC5tYXJrLmJyb3dzZXIoJ2Nocm9tZScpCkBweXRlc3QubWFyay5wbGF0Zm9ybSgnTGludXgnKQpkZWYgdGVzdF9kaXJlY3RseV9zZXRfdmlld3BvcnRfc2l6ZShleWVzLCBkcml2ZXIpOgogICAgcmVxdWlyZWRfdmlld3BvcnQgPSB7J3dpZHRoJzogNDUwLCAnaGVpZ2h0JzogMzAwfQogICAgZXllcy5zZXRfdmlld3BvcnRfc2l6ZShkcml2ZXIsIHJlcXVpcmVkX3ZpZXdwb3J0KQogICAgZHJpdmVyID0gZXllcy5vcGVuKGRyaXZlciwgIlB5dGhvbiBTREsiLCAiVGVzdFZpZXdQb3J0LURpcmVjdGx5U2V0Vmlld3BvcnR0IikKICAgIGFzc2VydCByZXF1aXJlZF92aWV3cG9ydCA9PSBleWVzLmdldF92aWV3cG9ydF9zaXplKCkKICAgIGFzc2VydCByZXF1aXJlZF92aWV3cG9ydCA9PSBkcml2ZXIuZ2V0X3ZpZXdwb3J0X3NpemUoKQo8fGZpbV9zdWZmaXh8PgpAcHl0ZXN0Lm1hcmsuYnJvd3NlcignY2hyb21lJykKQHB5dGVzdC5tYXJrLnBsYXRmb3JtKCdMaW51eCcpCkBweXRlc3QubWFyay5za2lwKCJEZXBlbmRpbmcgb24gRmx1ZW50IEFQSS4gTm90IGltcGxlbWVudGVkIHlldCIpCmRlZiB0ZXN0X3NlcnZlcl9jb25uZWN0b3IoZHJpdmVyKToKPHxmaW1fZW5kfD4="]
["5f956eff22b1cd1a73f2e5cf7ba7ddeb7baef908-2","5f956eff22b1cd1a73f2e5cf7ba7ddeb7baef908","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHV1aWQKCmltcG9ydCBweXRlc3QKCmZyb20gYXBwbGl0b29scy5leWVzIGltcG9ydCBFeWVzCmZyb20gYXBwbGl0b29scy50YXJnZXQgaW1wb3J0IFRhcmdldAoKCkBweXRlc3QubWFyay5icm93c2VyKCdjaHJvbWUnKQpAcHl0ZXN0Lm1hcmsucGxhdGZvcm0oJ0xpbnV4JykKQHB5dGVzdC5tYXJrLnNraXAoIkRlcGVuZGluZyBvbiBGbHVlbnQgQVBJLiBOb3QgaW1wbGVtZW50ZWQgeWV0IikKZGVmIHRlc3Rfc2VydmVyX2Nvbm5lY3Rvcihkcml2ZXIpOgogICAgZXllcyA9IEV5ZXMoJ2h0dHBzOi8vbG9jYWxob3N0LmFwcGxpdG9vbHMuY29tJykKICAgIGRyaXZlciA9IGV5ZXMub3Blbihkcml2ZXIsICJQeXRob24gU0RLIiwgIlRlc3REZWxldGUiLCB7J3dpZHRoJzogODAwLCAnaGVpZ2h0JzogNTk5fSkKICAgIGRyaXZlci5nZXQoImh0dHBzOi8vYXBwbGl0b29scy5jb20vaGVsbG93b3JsZCIpCiAgICBleWVzLmNoZWNrKCJIZWxsbyIsIFRhcmdldC53aW5kb3coKSkKICAgIHJlc3VsdHMgPSBleWVzLmNsb3NlKCkKICAgIHJlc3VsdHMuZGVsZXRlKCkKICAgIGV5ZXMuYWJvcnRfaWZfbm90X2Nsb3NlZCgpCgoKQHB5dGVzdC5tYXJrLmJyb3dzZXIoJ2Nocm9tZScpCkBweXRlc3QubWFyay5wbGF0Zm9ybSgnTGludXgnKQpkZWYgdGVzdF9kaXJlY3RseV9zZXRfdmlld3BvcnRfc2l6ZShleWVzLCBkcml2ZXIpOgogICAgcmVxdWlyZWRfdmlld3BvcnQgPSB7J3dpZHRoJzogNDUwLCAnaGVpZ2h0JzogMzAwfQogICAgZXllcy5zZXRfdmlld3BvcnRfc2l6ZShkcml2ZXIsIHJlcXVpcmVkX3ZpZXdwb3J0KQogICAgZHJpdmVyID0gZXllcy5vcGVuKGRyaXZlciwgIlB5dGhvbiBTREsiLCAiVGVzdFZpZXdQb3J0LURpcmVjdGx5U2V0Vmlld3BvcnR0IikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgYXNzZXJ0IHJlcXVpcmVkX3ZpZXdwb3J0ID09IGV5ZXMuZ2V0X3ZpZXdwb3J0X3NpemUoKQogICAgYXNzZXJ0IHJlcXVpcmVkX3ZpZXdwb3J0ID09IGRyaXZlci5nZXRfdmlld3BvcnRfc2l6ZSgpCjx8ZmltX2VuZHw+"]
["900312a1ae98a8296e4e2fe51f7e2beb95306df3-1","900312a1ae98a8296e4e2fe51f7e2beb95306df3","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ29fcnEgaW1wb3J0IGpvYgpmcm9tIGRqYW5nby5jb3JlLm1haWwgaW1wb3J0IHNlbmRfbWFpbAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gd2hpc3RsZS5tYW5hZ2VycyBpbXBvcnQgTm90aWZpY2F0aW9uTWFuYWdlcgpmcm9tIHdoaXN0bGUgaW1wb3J0IHNldHRpbmdzIGFzIHdoaXN0bGVfc2V0dGluZ3MKCgo8fGZpbV9lbmR8Pg=="]
["723b0fce8eca17e81fbf087f19f79ad92dd4cb54-1","723b0fce8eca17e81fbf087f19f79ad92dd4cb54","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBwaWNrbGUKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gYnM0IGltcG9ydCBCZWF1dGlmdWxTb3VwCgp0cmFpbl9wYXRoID0gImRhdGEvaW1kYi90cmFpbi8iCnRlc3RfcGF0aCA9ICJkYXRhL2ltZGIvdHJhaW4vIgoKc2F2ZV9wYXRoID0gImRhdGEvaW1kYi9pbWRiLnBjbCIKCmxhYmVsX2RpYyA9IHsibmVnIjowLCAicG9zIjoxfQoKZGVmIGdldF9pbWRiKCk6CgogICAgdHJhaW5fZGF0YSA9IFtdCiAgICB0cmFpbl9sYWJlbHMgPSBbXQoKICAgIHRlc3RfZGF0YSA9IFtdCiAgICB0ZXN0X2xhYmVscyA9IFtdCgogICAgaWYgb3MucGF0aC5leGlzdHMoc2F2ZV9wYXRoKToKICAgICAgICBwcmludCgibG9hZGluZyBpbWRiIGRhdGEgZnJvbSBwaWNrbGUuLi4iKQogICAgICAgIHdpdGggb3BlbihzYXZlX3BhdGgsIG1vZGU9J3JiJykgYXMgZjoKICAgICAgICAgICAgZGF0YSA9IHBpY2tsZS5sb2FkKGYpCgogICAgICAgIHRyYWluX2RhdGEsIHRyYWluX2xhYmVscywgdGVzdF9kYXRhLCB0ZXN0X2xhYmVscyA9IGRhdGEKICAgICAgICByZXR1cm4gdHJhaW5fZGF0YSwgdHJhaW5fbGFiZWxzLCB0ZXN0X2RhdGEsIHRlc3RfbGFiZWxzCiAgICAjIHJlYWQgdHJhaW4gZmlsZXMKICAgIGlmIG9zLnBhdGguZXhpc3RzKHRyYWluX3BhdGgpOgogICAgICAgIGZvciBrZXksIHZhbCBpbiBsYWJlbF9kaWMuaXRlbXMoKToKICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbih0cmFpbl9wYXRoLCBrZXkpCiAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgogICAgICAgICAgICAgICAgZGF0YSA9IHJlYWRfcmV2aWV3cyhwYXRoKQogICAgICAgICAgICAgICAgbCA9IGxlbihkYXRhKQogICAgICAgICAgICAgICAgbGFiZWxzID0gbnAuZnVsbCgobCwpLCB2YWwpCiAgICAgICAgICAgICAgICB0cmFpbl9kYXRhLmV4dGVuZChkYXRhKQogICAgICAgICAgICAgICAgdHJhaW5fbGFiZWxzLmV4dGVuZChsYWJlbHMpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByYWlzZSBGaWxlTm90Rm91bmRFcnJvcgogICAgZWxzZToKICAgICAgICByYWlzZSBGaWxlTm90Rm91bmRFcnJvcgoKICAgICMgcmVhZCB0ZXN0IGZpbGVzCiAgICBpZiBvcy5wYXRoLmV4aXN0cyh0ZXN0X3BhdGgpOgogICAgICAgIGZvciBrZXksIHZhbCBpbiBsYWJlbF9kaWMuaXRlbXMoKToKICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZXN0X3BhdGgsIGtleSkKICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6CiAgICAgICAgICAgICAgICBkYXRhID0gcmVhZF9yZXZpZXdzKHBhdGgpCiAgICAgICAgICAgICAgICBsID0gbGVuKGRhdGEpCiAgICAgICAgICAgICAgICBsYWJlbHMgPSBucC5mdWxsKChsLCksIHZhbCkKICAgICAgICAgICAgICAgIHRlc3RfZGF0YS5leHRlbmQoZGF0YSkKICAgICAgICAgICAgICAgIHRlc3RfbGFiZWxzLmV4dGVuZChsYWJlbHMpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByYWlzZSBGaWxlTm90Rm91bmRFcnJvcgo8fGZpbV9ob2xlfD4KCiAgICB3aXRoIG9wZW4oc2F2ZV9wYXRoLCBtb2RlPSd3YicpIGFzIGY6CiAgICAgICAgcGlja2xlLmR1bXAoW3RyYWluX2RhdGEsIHRyYWluX2xhYmVscywgdGVzdF9kYXRhLCB0ZXN0X2xhYmVsc10sIGYpCiAgICByZXR1cm4gdHJhaW5fZGF0YSwgdHJhaW5fbGFiZWxzLCB0ZXN0X2RhdGEsIHRlc3RfbGFiZWxzCgpkZWYgcmVhZF9yZXZpZXdzKHBhdGgpOgogICAgcmV2aWV3X2ZpbGVzID0gW29zLnBhdGguam9pbihwYXRoLCBmKQogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKHBhdGgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGYuZW5kc3dpdGgoIi50eHQiKV0KCiAgICByZXZpZXdzID0gW10KICAgIGZvciBmaWxlIGluIHJldmlld19maWxlczoKICAgICAgICByZXZpZXcgPSBvcGVuKGZpbGUsIG1vZGU9J3InKS5yZWFkKCkKICAgICAgICBicyA9IEJlYXV0aWZ1bFNvdXAocmV2aWV3LCAiaHRtbC5wYXJzZXIiKQogICAgICAgIGxvd2VyX2Nhc2UgPSBicy5nZXRfdGV4dCgpLmxvd2VyKCkKICAgICAgICBzZW50ZW5jZXMgPSBsb3dlcl9jYXNlLnNwbGl0KCcuICcpCiAgICAgICAgcmV2aWV3cy5hcHBlbmQoc2VudGVuY2VzKQogICAgcmV0dXJuIHJldmlld3MKPHxmaW1fc3VmZml4fD4KICAgIGVsc2U6CiAgICAgICAgcmFpc2UgRmlsZU5vdEZvdW5kRXJyb3IKCiAgICBhc3NlcnQgbGVuKHRyYWluX2RhdGEpPT1sZW4odHJhaW5fbGFiZWxzKSA9PSBsZW4odGVzdF9kYXRhKSA9PSBsZW4odGVzdF9sYWJlbHMpCjx8ZmltX2VuZHw+"]
["723b0fce8eca17e81fbf087f19f79ad92dd4cb54-2","723b0fce8eca17e81fbf087f19f79ad92dd4cb54","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IHBpY2tsZQppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKCjx8ZmltX2VuZHw+"]
["723b0fce8eca17e81fbf087f19f79ad92dd4cb54-3","723b0fce8eca17e81fbf087f19f79ad92dd4cb54","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBwaWNrbGUKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gYnM0IGltcG9ydCBCZWF1dGlmdWxTb3VwCgp0cmFpbl9wYXRoID0gImRhdGEvaW1kYi90cmFpbi8iCnRlc3RfcGF0aCA9ICJkYXRhL2ltZGIvdHJhaW4vIgoKc2F2ZV9wYXRoID0gImRhdGEvaW1kYi9pbWRiLnBjbCIKCmxhYmVsX2RpYyA9IHsibmVnIjowLCAicG9zIjoxfQoKZGVmIGdldF9pbWRiKCk6CgogICAgdHJhaW5fZGF0YSA9IFtdCiAgICB0cmFpbl9sYWJlbHMgPSBbXQoKICAgIHRlc3RfZGF0YSA9IFtdCiAgICB0ZXN0X2xhYmVscyA9IFtdCgogICAgaWYgb3MucGF0aC5leGlzdHMoc2F2ZV9wYXRoKToKICAgICAgICBwcmludCgibG9hZGluZyBpbWRiIGRhdGEgZnJvbSBwaWNrbGUuLi4iKQogICAgICAgIHdpdGggb3BlbihzYXZlX3BhdGgsIG1vZGU9J3JiJykgYXMgZjoKICAgICAgICAgICAgZGF0YSA9IHBpY2tsZS5sb2FkKGYpCgogICAgICAgIHRyYWluX2RhdGEsIHRyYWluX2xhYmVscywgdGVzdF9kYXRhLCB0ZXN0X2xhYmVscyA9IGRhdGEKICAgICAgICByZXR1cm4gdHJhaW5fZGF0YSwgdHJhaW5fbGFiZWxzLCB0ZXN0X2RhdGEsIHRlc3RfbGFiZWxzCiAgICAjIHJlYWQgdHJhaW4gZmlsZXMKICAgIGlmIG9zLnBhdGguZXhpc3RzKHRyYWluX3BhdGgpOgogICAgICAgIGZvciBrZXksIHZhbCBpbiBsYWJlbF9kaWMuaXRlbXMoKToKICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbih0cmFpbl9wYXRoLCBrZXkpCiAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgogICAgICAgICAgICAgICAgZGF0YSA9IHJlYWRfcmV2aWV3cyhwYXRoKQogICAgICAgICAgICAgICAgbCA9IGxlbihkYXRhKQogICAgICAgICAgICAgICAgbGFiZWxzID0gbnAuZnVsbCgobCwpLCB2YWwpCiAgICAgICAgICAgICAgICB0cmFpbl9kYXRhLmV4dGVuZChkYXRhKQogICAgICAgICAgICAgICAgdHJhaW5fbGFiZWxzLmV4dGVuZChsYWJlbHMpCjx8ZmltX2hvbGV8PgogICAgZWxzZToKICAgICAgICByYWlzZSBGaWxlTm90Rm91bmRFcnJvcgoKICAgICMgcmVhZCB0ZXN0IGZpbGVzCiAgICBpZiBvcy5wYXRoLmV4aXN0cyh0ZXN0X3BhdGgpOgogICAgICAgIGZvciBrZXksIHZhbCBpbiBsYWJlbF9kaWMuaXRlbXMoKToKICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZXN0X3BhdGgsIGtleSkKICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6CiAgICAgICAgICAgICAgICBkYXRhID0gcmVhZF9yZXZpZXdzKHBhdGgpCiAgICAgICAgICAgICAgICBsID0gbGVuKGRhdGEpCiAgICAgICAgICAgICAgICBsYWJlbHMgPSBucC5mdWxsKChsLCksIHZhbCkKICAgICAgICAgICAgICAgIHRlc3RfZGF0YS5leHRlbmQoZGF0YSkKICAgICAgICAgICAgICAgIHRlc3RfbGFiZWxzLmV4dGVuZChsYWJlbHMpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByYWlzZSBGaWxlTm90Rm91bmRFcnJvcgogICAgZWxzZToKICAgICAgICByYWlzZSBGaWxlTm90Rm91bmRFcnJvcgoKICAgIGFzc2VydCBsZW4odHJhaW5fZGF0YSk9PWxlbih0cmFpbl9sYWJlbHMpID09IGxlbih0ZXN0X2RhdGEpID09IGxlbih0ZXN0X2xhYmVscykKCiAgICB3aXRoIG9wZW4oc2F2ZV9wYXRoLCBtb2RlPSd3YicpIGFzIGY6CiAgICAgICAgcGlja2xlLmR1bXAoW3RyYWluX2RhdGEsIHRyYWluX2xhYmVscywgdGVzdF9kYXRhLCB0ZXN0X2xhYmVsc10sIGYpCiAgICByZXR1cm4gdHJhaW5fZGF0YSwgdHJhaW5fbGFiZWxzLCB0ZXN0X2RhdGEsIHRlc3RfbGFiZWxzCgpkZWYgcmVhZF9yZXZpZXdzKHBhdGgpOgogICAgcmV2aWV3X2ZpbGVzID0gW29zLnBhdGguam9pbihwYXRoLCBmKQogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKHBhdGgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGYuZW5kc3dpdGgoIi50eHQiKV0KCiAgICByZXZpZXdzID0gW10KICAgIGZvciBmaWxlIGluIHJldmlld19maWxlczoKICAgICAgICByZXZpZXcgPSBvcGVuKGZpbGUsIG1vZGU9J3InKS5yZWFkKCkKICAgICAgICBicyA9IEJlYXV0aWZ1bFNvdXAocmV2aWV3LCAiaHRtbC5wYXJzZXIiKQogICAgICAgIGxvd2VyX2Nhc2UgPSBicy5nZXRfdGV4dCgpLmxvd2VyKCkKICAgICAgICBzZW50ZW5jZXMgPSBsb3dlcl9jYXNlLnNwbGl0KCcuICcpCiAgICAgICAgcmV2aWV3cy5hcHBlbmQoc2VudGVuY2VzKQogICAgcmV0dXJuIHJldmlld3MKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yCjx8ZmltX2VuZHw+"]
["723b0fce8eca17e81fbf087f19f79ad92dd4cb54-4","723b0fce8eca17e81fbf087f19f79ad92dd4cb54","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmltcG9ydCBwaWNrbGUKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gYnM0IGltcG9ydCBCZWF1dGlmdWxTb3VwCgp0cmFpbl9wYXRoID0gImRhdGEvaW1kYi90cmFpbi8iCnRlc3RfcGF0aCA9ICJkYXRhL2ltZGIvdHJhaW4vIgoKc2F2ZV9wYXRoID0gImRhdGEvaW1kYi9pbWRiLnBjbCIKCmxhYmVsX2RpYyA9IHsibmVnIjowLCAicG9zIjoxfQoKZGVmIGdldF9pbWRiKCk6CgogICAgdHJhaW5fZGF0YSA9IFtdCiAgICB0cmFpbl9sYWJlbHMgPSBbXQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgdGVzdF9kYXRhID0gW10KICAgIHRlc3RfbGFiZWxzID0gW10KCjx8ZmltX2VuZHw+"]
["f2832bc1ad7c947665e7abf2c0c72c1017784461-1","f2832bc1ad7c947665e7abf2c0c72c1017784461","PHxmaW1fcHJlZml4fD4KZnJvbSBtYW5hZ2VfdXNlcnMuQW5zaWJsZVVzZXJzIGltcG9ydCBBbnNpYmxlVXNlcnMgICMgbm9xYQpmcm9tIG1hbmFnZV91c2VycyBpbXBvcnQgc2NyaXB0X2hlbHBlcnMgICMgbm9xYQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gbWFuYWdlX3VzZXJzLmV4Y2VwdGlvbnMgaW1wb3J0ICggICMgbm9xYQogICAgRHVwbGljYXRlVXNlckVycm9yLAogICAgTm9TdWNoVXNlckVycm9yLAogICAgU1NIS2V5Tm90Rm91bmRFcnJvciwKPHxmaW1fZW5kfD4="]
["f2832bc1ad7c947665e7abf2c0c72c1017784461-2","f2832bc1ad7c947665e7abf2c0c72c1017784461","PHxmaW1fcHJlZml4fD4KZnJvbSBtYW5hZ2VfdXNlcnMuQW5zaWJsZVVzZXJzIGltcG9ydCBBbnNpYmxlVXNlcnMgICMgbm9xYQpmcm9tIG1hbmFnZV91c2VycyBpbXBvcnQgc2NyaXB0X2hlbHBlcnMgICMgbm9xYQpmcm9tIG1hbmFnZV91c2Vycy5leGNlcHRpb25zIGltcG9ydCAoICAjIG5vcWEKICAgIER1cGxpY2F0ZVVzZXJFcnJvciwKICAgIE5vU3VjaFVzZXJFcnJvciwKICAgIFNTSEtleU5vdEZvdW5kRXJyb3IsCikKCl9fYXV0aG9yX18gPSAnZ2Vva2FsYS0gaHR0cHM6Ly9naXRodWIuY29tL2dlb2thbGEnCl9fdmVyc2lvbl9fID0gJzIuMC4xJwoiIiIKICAgIFRoaXMgbW9kdWxlIGlzIGRlc2lnbmVkIHRvIGZhY2lsaXRhdGUgbWFuYWdlbWVudCBvZiB1c2VycyB0aHJvdWdoIGEKICAgIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCBzeXN0ZW0gd2hlbiBjZW50cmFsaXNlZCBhY2NvdW50IG1hbmFnZW1lbnQgKHN1Y2gKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgYXMgTERBUCkgaXMgbm90IGltcGxlbWVudGVkLgoKICAgIEl0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdGhyb3VnaCB0aGUgJ21hbnVzZScgdXRpbGl0eSB0aGF0IGlzIGRlcGxveWVkCiAgICB3aXRoIGl0Lgo8fGZpbV9lbmR8Pg=="]
["f2832bc1ad7c947665e7abf2c0c72c1017784461-3","f2832bc1ad7c947665e7abf2c0c72c1017784461","PHxmaW1fcHJlZml4fD4KZnJvbSBtYW5hZ2VfdXNlcnMuQW5zaWJsZVVzZXJzIGltcG9ydCBBbnNpYmxlVXNlcnMgICMgbm9xYQpmcm9tIG1hbmFnZV91c2VycyBpbXBvcnQgc2NyaXB0X2hlbHBlcnMgICMgbm9xYQpmcm9tIG1hbmFnZV91c2Vycy5leGNlcHRpb25zIGltcG9ydCAoICAjIG5vcWEKICAgIER1cGxpY2F0ZVVzZXJFcnJvciwKICAgIE5vU3VjaFVzZXJFcnJvciwKICAgIFNTSEtleU5vdEZvdW5kRXJyb3IsCikKCl9fYXV0aG9yX18gPSAnZ2Vva2FsYS0gaHR0cHM6Ly9naXRodWIuY29tL2dlb2thbGEnCl9fdmVyc2lvbl9fID0gJzIuMC4xJwoiIiIKICAgIFRoaXMgbW9kdWxlIGlzIGRlc2lnbmVkIHRvIGZhY2lsaXRhdGUgbWFuYWdlbWVudCBvZiB1c2VycyB0aHJvdWdoIGEKICAgIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCBzeXN0ZW0gd2hlbiBjZW50cmFsaXNlZCBhY2NvdW50IG1hbmFnZW1lbnQgKHN1Y2gKICAgIGFzIExEQVApIGlzIG5vdCBpbXBsZW1lbnRlZC4KCiAgICBJdCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRocm91Z2ggdGhlICdtYW51c2UnIHV0aWxpdHkgdGhhdCBpcyBkZXBsb3llZAogICAgd2l0aCBpdC4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIFNlZSBMSUNFTlNFIGZpbGUgb24gZ2l0aHViIGZvciBsaWNlbnNlIGRldGFpbHMuCiIiIgo8fGZpbV9lbmR8Pg=="]
["f2832bc1ad7c947665e7abf2c0c72c1017784461-4","f2832bc1ad7c947665e7abf2c0c72c1017784461","PHxmaW1fcHJlZml4fD4KZnJvbSBtYW5hZ2VfdXNlcnMuQW5zaWJsZVVzZXJzIGltcG9ydCBBbnNpYmxlVXNlcnMgICMgbm9xYQpmcm9tIG1hbmFnZV91c2VycyBpbXBvcnQgc2NyaXB0X2hlbHBlcnMgICMgbm9xYQpmcm9tIG1hbmFnZV91c2Vycy5leGNlcHRpb25zIGltcG9ydCAoICAjIG5vcWEKICAgIER1cGxpY2F0ZVVzZXJFcnJvciwKICAgIE5vU3VjaFVzZXJFcnJvciwKICAgIFNTSEtleU5vdEZvdW5kRXJyb3IsCikKCl9fYXV0aG9yX18gPSAnZ2Vva2FsYS0gaHR0cHM6Ly9naXRodWIuY29tL2dlb2thbGEnCl9fdmVyc2lvbl9fID0gJzIuMC4xJwoiIiIKICAgIFRoaXMgbW9kdWxlIGlzIGRlc2lnbmVkIHRvIGZhY2lsaXRhdGUgbWFuYWdlbWVudCBvZiB1c2VycyB0aHJvdWdoIGEKICAgIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCBzeXN0ZW0gd2hlbiBjZW50cmFsaXNlZCBhY2NvdW50IG1hbmFnZW1lbnQgKHN1Y2gKICAgIGFzIExEQVApIGlzIG5vdCBpbXBsZW1lbnRlZC4KCiAgICBJdCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRocm91Z2ggdGhlICdtYW51c2UnIHV0aWxpdHkgdGhhdCBpcyBkZXBsb3llZAogICAgd2l0aCBpdC4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIFNlZSBMSUNFTlNFIGZpbGUgb24gZ2l0aHViIGZvciBsaWNlbnNlIGRldGFpbHMuCiIiIgo8fGZpbV9lbmR8Pg=="]
["39fb4ec58097905cf53625548ac3315b23ad0a61-1","39fb4ec58097905cf53625548ac3315b23ad0a61","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KIyAtKi0gY29kaW5nOnV0Zi04IC0qLQoiIiIgCkJlYW0gU2VhcmNoIG1vZHVsZSBmb3IgUGFyc2VyCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscyAjIGNvbXBhdGlibGUgd2l0aCBweXRob24zIHVuaWNvZGUgY29kaW5nCgppbXBvcnQgdGltZQppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKaW1wb3J0IHN5cyxvcwoKcGtnX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSAjIC4uLi9kZWVwbmxwLy4Kc3lzLnBhdGguYXBwZW5kKHBrZ19wYXRoKQoKZnJvbSBwYXJzZSBpbXBvcnQgdHJhbnNpdGlvbl9zeXN0ZW0gICAgIyBhYnNvbHV0ZSBpbXBvcnQKZnJvbSBwYXJzZSBpbXBvcnQgcmVhZGVyCmZyb20gcGFyc2UudHJhbnNpdGlvbl9zeXN0ZW0gaW1wb3J0IENvbmZpZ3VyYXRpb24KCmNsYXNzIEh5cG90aGVzaXMob2JqZWN0KToKICAgIHRva2VucyA9IFtdICAgICAjIHNlcXVlbmNlIG9mIHRva2VucyBvZiBjdXJyZW50IGh5cHMKICAgIHNjb3JlID0gMC4wICAgICAjZXZhbHVhdGlvbiBzY29yZSBvZiBjdXJyZW50IGh5cHMKCiAgICBkZWYgX19pbml0X18oc2VsZiwgdG9rZW5zLCBzY29yZSk6CiAgICAgICAgc2VsZi50b2tlbnMgPSB0b2tlbnMKICAgICAgICBzZWxmLnNjb3JlID0gc2NvcmUKCiAgICBkZWYgZXh0ZW5kKHNlbGYsIHRva2VuLCBzY29yZSk6CiAgICAgICAgIiIiIFJldHVybiBhIG5ldyBIcHlzIGJhc2VkIG9uIGxhc3Qgc3RlcCB3aXRoIG5ldyBzY29yZQogICAgICAgICIiIgogICAgICAgIHJldHVybiBIeXBvdGhlc2lzKHNlbGYudG9rZW5zICsgdG9rZW4sIHNlbGYuc2NvcmUgKyBzY29yZSkKCiAgICBAcHJvcGVydHkKICAgIGRlZiBsYXRlc3RfdG9rZW4oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYudG9rZW5zWy0xXSBpZiBsZW4odG9rZW5zKSA+IDAgZWxzZSBOb25lCgoKY2xhc3MgQmVhbVNlYXJjaChvYmplY3QpOgogICAgIiIiIE1haW50YWluIGEgQmVhbSBzaXplIG9mIEsgd2l0aCB0aGUgaGlnaGVzdCBzY29yZWQgSHlwb3RoZXNpcwogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgYmVhbV9zaXplKToKICAgICAgICBzZWxmLl9iZWFtX3NpemUgPSBiZWFtX3NpemUKICAgICAgICBzZWxmLl9oeXBzID0gW0h5cG90aGVzaXMoW10sIDAuMCldICogc2VsZi5fYmVhbV9zaXplICAgIyBhIGxpc3Qgb2YgZW1wdHkgaHlwb3RoZXNpcwoKICAgIGRlZiBzZWFyY2goc2VsZiwgc2VzcywgbW9kZWwsIGZlYXR1cmUpOgogICAgICAgICIiIiBSZXR1cm4gdGhlIGhpZ2hlc3Qgc2NvcmVkIHRvcCBLIGh5cHMKICAgICAgICAiIiIKICAgICAgICByZXN1bHRzID0gW10KICAgICAgICBsYXRlc3RfdG9rZW5zID0gW2gubGF0ZXN0X3Rva2VuIGZvciBoIGluIHNlbGYuaHlwc10gICAjIGxhc3RfdG9rZW5zIG9mIHByZXZpb3VzIHN0ZXAKICAgICAgICB0b3BfaWRzLCB0b3Bfc2NvcmVzID0gbW9kZWwuZGVjb2RlX3RvcEsoc2VzcywgZmVhdHVyZSkKCiAgICAgICAgIyBFeHRlbmQgZWFjaCBoeXBvdGhlc2lzLgogICAgICAgIGFsbF9oeXBzID0gW10KICAgICAgICBmb3IgaSBpbiByYW5nZShzZWxmLl9iZWFtX3NpemUpOgogICAgICAgICAgICAjZm9yIHRoZSBpdGggaHlwcywgZXh0ZW5kIGl0IHNlcXVlbmNlCiAgICAgICAgICAgIGggPSBzZWxmLl9oeXBzW2ldCiAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKGxlbih0b3BfaWRzKSk6CiAgICAgICAgICAgICAgICBhbGxfaHlwcy5hcHBlbmQoaC5leHRlbmQodG9wX2lkc1tqXSwgdG9wX3Njb3Jlc1tqXSkpICAgIyBhcHBlbmQgbmV3IEh5cHMKICAgICAgICAjIEdldCB0b3BLIGh5cHMKICAgICAgICByZXR1cm4gc2VsZi5nZXRfdG9wayhhbGxfaHlwcykKICAgIAogICAgZGVmIGdldF90b3BrKHNlbGYsIGh5cHMpOgogICAgICAgICIiIlNvcnQgdGhlIGh5cHMgYmFzZWQgb24gc2NvcmUuCiAgICAgICAgQXJnczoKICAgICAgICAgIGh5cHM6IEEgbGlzdCBvZiBoeXBvdGhlc2lzLgogICAgICAgIFJldHVybnM6CiAgICAgICAgICBoeXBzOiBBIGxpc3Qgb2Ygc29ydGVkIGh5cG90aGVzaXMgaW4gbWluaW51bSBnbG9iYWwgc2NvcmUgKG5lZ2F0aXZlIGxvZyBsaWtlbGlob29kKSwgYWNoaWV2ZSBtYXggbGlrZWxpaG9vZAogICAgICAgICIiIgogICAgICAgIHJldHVybiBzb3J0ZWQoaHlwcywga2V5PWxhbWJkYSBoOiBoLnNjb3JlLCByZXZlcnNlPUZhbHNlKSAgIyBpbmNyZWFzZSBvcmRlcgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAKICAgIEBwcm9wZXJ0eQogICAgZGVmIGh5cHMoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX2h5cHMKPHxmaW1fZW5kfD4="]
["e4ed617acf40933d9baabc3ae7a60cfeadd37d1d-1","e4ed617acf40933d9baabc3ae7a60cfeadd37d1d","PHxmaW1fcHJlZml4fD4KIiIiClEgTGVhcm5pbmcgaXMgYmFzZWQgb24gdGhlIEJlbGxtYW4gVXBkYXRlIEZ1bmN0aW9uOgogICAgVShTKSA9IFIoUykgKyBnYW1tYSAqIG1heCBvZiBFW1UoUycpXQoKU2luY2Ugd2UgZG8gbm90IGtub3cgdGhlIGFjdHVhbCB2YWx1ZSBvZiBVKFMnKSwgd2UgYXBwcm94aW1hdGUgaXQgYnkgbWF4KEEpIG9mIFEoUywgQSkKYW5kIGl0ZXJhdGl2ZWx5IHVwZGF0ZSBRKFMsQSkgc28gaXQgY29udmVyZ2VzIHRvIFUoUycpCgpRKFMsQSkgPSAoMS1hbHBoYSkgKiBRKFMsQSkgKyBhbHBoYSAqIChyZXdhcmQgKyBnYW1tYSAqIG1heCBRKFMnLCBBJykpCgpBbHNvLCB0byBwcmV2ZW50IHRoZSBhZ2VudCBmcm9tIHN0dWNrIGluIGEgbG9jYWwgbWF4aW1hLCB3ZSB1c2UgdGhlIGh5cGVyLXBhcmFtZXRlcgplcHNpbG9uIHRvIGVuY291cmFnZSB0aGUgYWdlbnQgdG8gZXhwbG9yZSB1bnNlZW4gYXJlYS4KIiIiCgpmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgZ3ltCmltcG9ydCByYW5kb20KaW1wb3J0IG1hdGgKCgpkZWYgcHJpbnRfZnJhbWVzKGZyYW1lcyk6CiAgICBmb3IgaSwgZnJhbWUgaW4gZW51bWVyYXRlKGZyYW1lcyk6CiAgICAgICAgcHJpbnQoZnJhbWVbJ2ZyYW1lJ10pCiAgICAgICAgcHJpbnQoZidUaW1lc3RhbXA6IHtpICsgMX0nKQogICAgICAgIHByaW50KGYiU3RhdGU6IHtmcmFtZVsnc3RhdGUnXX0iKQogICAgICAgIHByaW50KGYiQWN0aW9uOiB7ZnJhbWVbJ2FjdGlvbiddfSIpCiAgICAgICAgcHJpbnQoZiJSZXdhcmQ6IHtmcmFtZVsncmV3YXJkJ119IikKICAgICAgICBzbGVlcCgwLjEpCgoKY2xhc3MgUV9MZWFybjoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGVudj1neW0ubWFrZSgnVGF4aS12MycpLCBhbHBoYT0wLjEsIGdhbW1hPTAuNiwgZXBzaWxvbl9oaWdoPTAuMSwgZXBzaWxvbl9sb3c9MC4wMDA1LCBkZWNheT0yMDApOgogICAgICAgIHNlbGYuYWxwaGEgPSBhbHBoYQogICAgICAgIHNlbGYuZ2FtbWEgPSBnYW1tYQogICAgICAgIHNlbGYuZXBzaWxvbl9oaWdoID0gZXBzaWxvbl9oaWdoCjx8ZmltX2VuZHw+"]
["f250306caa7efe2eca9637841942a77b8aa51624-1","f250306caa7efe2eca9637841942a77b8aa51624",{"$cut":{"chars":32592,"head":"PHxmaW1fcHJlZml4fD4KIyBTdGFuZGFyZCBtb2R1bGVzCmltcG9ydCB1bml0dGVzdAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IGNvcHkKCiMgcHlwU1FVRUFLIG1vZHVsZXMKIyBpbXBvcnQgcHlwc3F1ZWFrLmdhdGVzIGFzIGd0CmZyb20gcHlwc3F1ZWFrLmdhdGVzIGltcG9ydCBJLCBYLCBaLCBILCBDTk9UCmZyb20gcHlwc3F1ZWFrLmFwaSBpbXBvcnQgcVJlZywgcU9wLCBxT3JhY2xlCmZyb20gcHlwc3F1ZWFrLmVycm9ycyBpbXBvcnQgKElsbGVnYWxDb3B5QXR0ZW1wdCwgSWxsZWdhbFJlZ2lzdGVyUmVmZXJlbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcm9uZ1NoYXBlRXJyb3IsIE5vblVuaXRhcnlJbnB1dEVycm9yKQpmcm9tIHB5cHNxdWVhay5ub2lzZSBpbXBvcnQgZGFtcGluZ19tYXAKCgpjbGFzcyBxUmVnU3VjY2Vzcyh1bml0dGVzdC5UZXN0Q2FzZSk6CgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICMgVGVzdCByZWdpc3RlciBhbmQgb3BlcmF0b3IKICAgICAgICBzZWxmLnRlc3RfcmVnID0gcVJlZygpCiAgICAgICAgc2VsZi50ZXN0X29wID0gcU9wKCkKCiAgICBkZWYgdGVzdF9rbm93bl9tZWFzdXJlbWVudF9yZXN1bHRzKHNlbGYpOgogICAgICAgICcnJwogICAgICAgIFZlcmlmaWVzIHRoYXQgdGhlIHByb3BlciBwb3N0LW1lYXN1cmVtZW50IHN0YXRlIG9jY3VycyBpbiBzZXZlcmFsCiAgICAgICAgY2FzZXMuCiAgICAgICAgJycnCgogICAgICAgICMgTWVhc3VyZSB8MD4gY29ycmVjdGx5CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzZWxmLnRlc3RfcmVnLm1lYXN1cmUoMCkpCiAgICAgICAgbnAudGVzdGluZy5hc3NlcnRfYXJyYXlfZXF1YWwobnAuYXJyYXkoWzEsIDBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3RfcmVnLmR1bXBfc3RhdGUoKSkKCiAgICAgICAgIyBNZWFzdXJlIHwwMT4gY29ycmVjdGx5CiAgICAgICAgc2VsZi50ZXN0X3JlZyArPSAxCiAgICAgICAgWC5vbihzZWxmLnRlc3RfcmVnLCAwKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VsZi50ZXN0X3JlZy5tZWFzdXJlKDApKQogICAgICAgIG5wLnRlc3RpbmcuYXNzZXJ0X2FycmF5X2VxdWFsKG5wLmFycmF5KFswLCAxLCAwLCAwXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0X3JlZy5kdW1wX3N0YXRlKCkpCgogICAgICAgICMgTm93IGxldCdzIG1lYXN1cmUgdGhlIG9ic2VydmFibGUgWCBvbiB0aGUKICAgICAgICAjIHN1cGVycG9zaXRpb24gc3RhdGUgKHwwMD4gLSB8MDE+KS9zcXJ0KDIpLgogICAgICAgIEgub24oc2VsZi50ZXN0X3JlZywgMCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBzZWxmLnRlc3RfcmVnLm1lYXN1cmVfb2JzZXJ2YWJsZShJLmtyb24oWCkpKQoKICAgIGRlZiB0ZXN0X21lYXN1cmVtZW50X2NvbGxhcHNlc19yZWdpc3Rlcl9zdGF0ZShzZWxmKToKICAgICAgICAnJycKICAgICAgICBDaGVjayB0aGF0IGEgYGBxUmVnYGAgaW4gdGhlIG5vcm1hbGl6ZWQgdmVyc2lvbiBvZiB0aGUgc3RhdGUKICAgICAgICB8MDA+ICsgfDEwPiBjb3JyZWN0bHkgY29sbGFwc2VzIG9uIG1lYXN1cmVtZW50IG9mIHF1Yml0IDAgdG8gZWl0aGVyCiAgICAgICAgfDAwPiBvciB8MTA+LgogICAgICAgICcnJwogICAgICAgIGluaXRpYWxseVN1cGVycG9zZWRSZWdpc3RlciA9IHFSZWcoMikKICAgICAgICBILm9uKGluaXRpYWxseVN1cGVycG9zZWRSZWdpc3RlciwgMSkKICAgICAgICBtZWFzdXJlbWVudF9vdXRjb21lID0gaW5pdGlhbGx5U3VwZXJwb3NlZFJlZ2lzdGVyLm1lYXN1cmUoMSkKCiAgICAgICAgaWYgbWVhc3VyZW1lbnRfb3V0Y29tZSA9PSAwOgogICAgICAgICAgICBucC50ZXN0aW5nLmFzc2VydF9hcnJheV9lcXVhbCgKICAgICAgICAgICAgICAgIGluaXRpYWxseVN1cGVycG9zZWRSZWdpc3Rlci5kdW1wX3N0YXRlKCksIFsxLCAwLCAwLCAwXSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBucC50ZXN0aW5nLmFzc2VydF9hcnJheV9lcXVhbCgKICAgICAgICAgICAgICAgIGluaXRpYWxseVN1cGVycG9zZWRSZWdpc3Rlci5kdW1wX3N0YXRlKCksIFswLCAwLCAxLCAwXSkKCiAgICBkZWYgdGVzdF9tZWFzdXJlbWVudF9vbl9maXZlX3F1Yml0X3N0YXRlKHNlbGYpOgogICAgICAgIHJlZ2lzdGVyID0gcVJlZyg1KQogICAgICAgIFgub24ocmVnaXN0ZXIsIDMpCiAgICAgICAgWC5vbihyZWdpc3RlciwgMCkKICAgICAgICBILm9uKHJlZ2lzdGVyLCAxKQoKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdGVyLm1lYXN1cmUoMyksIDEpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWdpc3Rlci5tZWFzdXJlKDQpLCAwKQoKICAgIGRlZiB0ZXN0X25vX3RhcmdldF9zaXplX21hdGNoKHNlbGYpOgogICAgICAgICcnJwogICAgICAgIE5vIHRhcmdldHMgc2hvdWxkIGJlIG5lY2Vzc2FyeSBmb3IgYSBgYHFPcGBgIGFjdGluZyBvbiBhIGBgcVJlZ2BgIG9mCiAgICAgICAgdGhlIHNhbWUgc2l6ZS4KICAgICAgICAnJycKCiAgICAgICAgc2VsZi50ZXN0X29wLm9uKHNlbGYudGVzdF9yZWcpCiAgICAgICAgbnAudGVzdGluZy5hc3NlcnRfYXJyYXlfZXF1YWwoc2VsZi50ZXN0X3JlZy5kdW1wX3N0YXRlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnAuYXJyYXkoWzEsIDBdKSkKCiAgICBkZWYgdGVzdF9tZWFzdXJlX29ic2VydmFibGVfc21hbGxlcl90aGFuX3JlZyhzZWxmKToKICAgICAgICAnJycKICAgICAgICBWZXJpZmllcyBkZWZhdWx0IGJlaGF2aW9yIG9mIGBgcVJlZi5tZWFzdXJlX29ic2VydmFibGUoKWBgIGlzIHRvIHByZWZpeAogICAgICAgIG9ic2VydmFibGUgb24gdGhlIGxlZnQgd2l0aCB0aGUgaWRlbnRpdHkgd2hlbgogICAgICAgIGBgcVJlZy5zaXplKCkgPiBvYnNlcnZhYmxlLnNpemUoKWBgLgogICAgICAgICcnJwoKICAgICAgICAjIE1ha2UgdGhlIHN0YXRlIDEvc3FydCgyKSAofDEwMD4gKyB8MTAxPikgYW5kIHRoZW4gbWVhc3VyZQogICAgICAgICMgSSAoeCkgSSAoeCkgWC4KICAgICAgICBYLm9uKHNlbGYudGVz"}}]
["f250306caa7efe2eca9637841942a77b8aa51624-2","f250306caa7efe2eca9637841942a77b8aa51624","PHxmaW1fcHJlZml4fD4KIyBTdGFuZGFyZCBtb2R1bGVzCmltcG9ydCB1bml0dGVzdAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IGNvcHkKCiMgcHlwU1FVRUFLIG1vZHVsZXMKIyBpbXBvcnQgcHlwc3F1ZWFrLmdhdGVzIGFzIGd0CmZyb20gcHlwc3F1ZWFrLmdhdGVzIGltcG9ydCBJLCBYLCBaLCBILCBDTk9UCmZyb20gcHlwc3F1ZWFrLmFwaSBpbXBvcnQgcVJlZywgcU9wLCBxT3JhY2xlCmZyb20gcHlwc3F1ZWFrLmVycm9ycyBpbXBvcnQgKElsbGVnYWxDb3B5QXR0ZW1wdCwgSWxsZWdhbFJlZ2lzdGVyUmVmZXJlbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcm9uZ1NoYXBlRXJyb3IsIE5vblVuaXRhcnlJbnB1dEVycm9yKQpmcm9tIHB5cHNxdWVhay5ub2lzZSBpbXBvcnQgZGFtcGluZ19tYXAKCgpjbGFzcyBxUmVnU3VjY2Vzcyh1bml0dGVzdC5UZXN0Q2FzZSk6CgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICMgVGVzdCByZWdpc3RlciBhbmQgb3BlcmF0b3IKICAgICAgICBzZWxmLnRlc3RfcmVnID0gcVJlZygpCiAgICAgICAgc2VsZi50ZXN0X29wID0gcU9wKCkKCiAgICBkZWYgdGVzdF9rbm93bl9tZWFzdXJlbWVudF9yZXN1bHRzKHNlbGYpOgogICAgICAgICcnJwogICAgICAgIFZlcmlmaWVzIHRoYXQgdGhlIHByb3BlciBwb3N0LW1lYXN1cmVtZW50IHN0YXRlIG9jY3VycyBpbiBzZXZlcmFsCiAgICAgICAgY2FzZXMuCiAgICAgICAgJycnCgogICAgICAgICMgTWVhc3VyZSB8MD4gY29ycmVjdGx5CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzZWxmLnRlc3RfcmVnLm1lYXN1cmUoMCkpCiAgICAgICAgbnAudGVzdGluZy5hc3NlcnRfYXJyYXlfZXF1YWwobnAuYXJyYXkoWzEsIDBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3RfcmVnLmR1bXBfc3RhdGUoKSkKCiAgICAgICAgIyBNZWFzdXJlIHwwMT4gY29ycmVjdGx5CiAgICAgICAgc2VsZi50ZXN0X3JlZyArPSAxCiAgICAgICAgWC5vbihzZWxmLnRlc3RfcmVnLCAwKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VsZi50ZXN0X3JlZy5tZWFzdXJlKDApKQogICAgICAgIG5wLnRlc3RpbmcuYXNzZXJ0X2FycmF5X2VxdWFsKG5wLmFycmF5KFswLCAxLCAwLCAwXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0X3JlZy5kdW1wX3N0YXRlKCkpCgogICAgICAgICMgTm93IGxldCdzIG1lYXN1cmUgdGhlIG9ic2VydmFibGUgWCBvbiB0aGUKICAgICAgICAjIHN1cGVycG9zaXRpb24gc3RhdGUgKHwwMD4gLSB8MDE+KS9zcXJ0KDIpLgogICAgICAgIEgub24oc2VsZi50ZXN0X3JlZywgMCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBzZWxmLnRlc3RfcmVnLm1lYXN1cmVfb2JzZXJ2YWJsZShJLmtyb24oWCkpKQoKICAgIGRlZiB0ZXN0X21lYXN1cmVtZW50X2NvbGxhcHNlc19yZWdpc3Rlcl9zdGF0ZShzZWxmKToKICAgICAgICAnJycKICAgICAgICBDaGVjayB0aGF0IGEgYGBxUmVnYGAgaW4gdGhlIG5vcm1hbGl6ZWQgdmVyc2lvbiBvZiB0aGUgc3RhdGUKICAgICAgICB8MDA+ICsgfDEwPiBjb3JyZWN0bHkgY29sbGFwc2VzIG9uIG1lYXN1cmVtZW50IG9mIHF1Yml0IDAgdG8gZWl0aGVyCiAgICAgICAgfDAwPiBvciB8MTA+LgogICAgICAgICcnJwogICAgICAgIGluaXRpYWxseVN1cGVycG9zZWRSZWdpc3RlciA9IHFSZWcoMikKICAgICAgICBILm9uKGluaXRpYWxseVN1cGVycG9zZWRSZWdpc3RlciwgMSkKICAgICAgICBtZWFzdXJlbWVudF9vdXRjb21lID0gaW5pdGlhbGx5U3VwZXJwb3NlZFJlZ2lzdGVyLm1lYXN1cmUoMSkKCiAgICAgICAgaWYgbWVhc3VyZW1lbnRfb3V0Y29tZSA9PSAwOgogICAgICAgICAgICBucC50ZXN0aW5nLmFzc2VydF9hcnJheV9lcXVhbCgKICAgICAgICAgICAgICAgIGluaXRpYWxseVN1cGVycG9zZWRSZWdpc3Rlci5kdW1wX3N0YXRlKCksIFsxLCAwLCAwLCAwXSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBucC50ZXN0aW5nLmFzc2VydF9hcnJheV9lcXVhbCgKICAgICAgICAgICAgICAgIGluaXRpYWxseVN1cGVycG9zZWRSZWdpc3Rlci5kdW1wX3N0YXRlKCksIFswLCAwLCAxLCAwXSkKCiAgICBkZWYgdGVzdF9tZWFzdXJlbWVudF9vbl9maXZlX3F1Yml0X3N0YXRlKHNlbGYpOgogICAgICAgIHJlZ2lzdGVyID0gcVJlZyg1KQogICAgICAgIFgub24ocmVnaXN0ZXIsIDMpCiAgICAgICAgWC5vbihyZWdpc3RlciwgMCkKICAgICAgICBILm9uKHJlZ2lzdGVyLCAxKQoKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdGVyLm1lYXN1cmUoMyksIDEpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWdpc3Rlci5tZWFzdXJlKDQpLCAwKQoKICAgIGRlZiB0ZXN0X25vX3RhcmdldF9zaXplX21hdGNoKHNlbGYpOgogICAgICAgICcnJwogICAgICAgIE5vIHRhcmdldHMgc2hvdWxkIGJlIG5lY2Vzc2FyeSBmb3IgYSBgYHFPcGBgIGFjdGluZyBvbiBhIGBgcVJlZ2BgIG9mCiAgICAgICAgdGhlIHNhbWUgc2l6ZS4KICAgICAgICAnJycKCiAgICAgICAgc2VsZi50ZXN0X29wLm9uKHNlbGYudGVzdF9yZWcpCiAgICAgICAgbnAudGVzdGluZy5hc3NlcnRfYXJyYXlfZXF1YWwoc2VsZi50ZXN0X3JlZy5kdW1wX3N0YXRlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnAuYXJyYXkoWzEsIDBdKSkKCiAgICBkZWYgdGVzdF9tZWFzdXJlX29ic2VydmFibGVfc21hbGxlcl90aGFuX3JlZyhzZWxmKToKICAgICAgICAnJycKICAgICAgICBWZXJpZmllcyBkZWZhdWx0IGJlaGF2aW9yIG9mIGBgcVJlZi5tZWFzdXJlX29ic2VydmFibGUoKWBgIGlzIHRvIHByZWZpeAogICAgICAgIG9ic2VydmFibGUgb24gdGhlIGxlZnQgd2l0aCB0aGUgaWRlbnRpdHkgd2hlbgogICAgICAgIGBgcVJlZy5zaXplKCkgPiBvYnNlcnZhYmxlLnNpemUoKWBgLgogICAgICAgICcnJwoKICAgICAgICAjIE1ha2UgdGhlIHN0YXRlIDEvc3FydCgyKSAofDEwMD4gKyB8MTAxPikgYW5kIHRoZW4gbWVhc3VyZQogICAgICAgICMgSSAoeCkgSSAoeCkgWC4KICAgICAgICBYLm9uKHNlbGYudGVzdF9yZWcsIDIpCiAgICAgICAgSC5vbihzZWxmLnRlc3RfcmVnLCAwKQogICAgICAgIHJlc3VsdCA9IHNlbGYudGVzdF9yZWcubWVhc3VyZV9vYnNlcnZhYmxlKFgpCgogICAgICAgIHN0YXRlX2hhZGFtYXJkID0gbnAuemVyb3MoOCkKICAgICAgICBzdGF0ZV9oYWRhbWFyZFs0XSA9IDEvbnAuc3FydCgyKQogICAgICAgIHN0YXRlX2hhZGFtYXJkWzVdID0gMS9ucC5zcXJ0KDIpCgogICAgICAgIG5wLnRlc3RpbmcuYXNzZXJ0X2FycmF5X2FsbW9zdF9lcXVhbChzdGF0ZV9oYWRhbWFyZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0X3JlZy5kdW1wX3N0YXRlKCkpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCByZXN1bHQpCgogICAgZGVmIHRlc3Rfb3BlcmF0b3Jfb3ZlcmxvYWRpbmdfbWlzYyhzZWxmKToKICAgICAgICAnJycKICAgICAgICBUZXN0cyB0aGF0IHNldmVyYWwgb3BlcmF0b3Igb3ZlcmxvYWRpbmcgbWV0aG9kcyBiZWhhdmUgY29ycmVjdGx5CiAgICAgICAgZm9yIGBgcVJlZ2BgIG9iamVjdHMuCiAgICAgICAgJycnCgogICAgICAgIHRlbXBfcmVnID0gcVJlZygpCiAgICAgICAgWC5vbih0ZW1wX3JlZykKICAgICAgICB0ZW1wX3JlZyArPSAxCiAgICAgICAgc2VsZi50ZXN0X3JlZyAqPSB0ZW1wX3JlZwogICAgICAgIHN0YXRlXzAwMSA9IG5wLmFycmF5KFswLCAxLCAwLCAwLCAwLCAwLCAwLCAwXSkKICAgICAgICBucC50ZXN0aW5nLmFzc2VydF9hcnJheV9lcXVhbChzdGF0ZV8wMDEsIHNlbGYudGVzdF9yZWcuZHVtcF9zdGF0ZSgpKQoKICAgICAgICB0ZW1wX3JlZyA9IHFSZWcoKQogICAgICAgIFgub24odGVtcF9yZWcpCiAgICAgICAgYV9uZXdfcmVnID0gc2VsZi50ZXN0X3JlZyAqIHRlbXBfcmVnCiAgICAgICAgc3RhdGVfMDAxMSA9IG5wLnplcm9zKDE2KQogICAgICAgIHN0YXRlXzAwMTFbM10gPSAxCiAgICAgICAgbnAudGVzdGluZy5hc3NlcnRfYXJyYXlfZXF1YWwoc3RhdGVfMDAxMSwgYV9uZXdfcmVnLmR1bXBfc3RhdGUoKSkKCiAgICBkZWYgdGVzdF9vcGVyYXRvcl9vdmVybG9hZGluZ19pYWRkKHNlbGYpOgogICAgICAgICcnJwogICAgICAgIFRlc3RzIHRoYXQgYCs9YCBhZGRzIG9uZSBvciBtb3JlIHF1Yml0cyB0byByZWdpc3Rlci4KICAgICAgICAnJycKCiAgICAgICAgcSA9IHFSZWcoKQogICAgICAgIHEgKz0gMwoKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQsIGxlbihxKSkKCiAgICBkZWYgdGVzdF9vcGVyYXRvcl9vdmVybG9hZGluZ19pbXVsX2RlcmVmZXJlbmNlc19hcmcoc2VsZik6CiAgICAgICAgJycnCiAgICAgICAgQ2hlY2tzIHRoYXQgYCo9YCBkZXJlZmVyZW5jZXMgdGhlIHJpZ2h0IGhhbmQgb3BlcmFuZC4KICAgICAgICAnJycKCiAgICAgICAgcSA9IHFSZWcoKQogICAgICAgIHAgPSBxUmVnKCkKCiAgICAgICAgcSAqPSBwCgogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLl9xUmVnX19pc19kZXJlZmVyZW5jZWQpCiAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShxLl9xUmVnX19pc19kZXJlZmVyZW5jZWQpCgoKY2xhc3MgcVJlZ0ZhaWx1cmUodW5pdHRlc3QuVGVzdENhc2UpOgoKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAjIFRlc3QgcmVnaXN0ZXIgYW5kIG9wZXJhdG9yCiAgICAgICAgc2VsZi50ZXN0X3JlZyA9IHFSZWcoKQogICAgICAgIHNlbGYudGVzdF9vcCA9IHFPcCgpCgogICAgZGVmIHRlc3RfY29weV9hdHRlbXB0KHNlbGYpOgogICAgICAgICcnJwogICAgICAgIFZlcmlmaWVzIHRoYXQgY29weSBhdHRlbXB0cyBvbiBhIGBgcVJlZ2BgIG9iamVjdCBmYWlsLgogICAgICAgICcnJwoKICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbGxlZ2FsQ29weUF0dGVtcHQsIGNvcHkuY29weSwgc2VsZi50ZXN0X3JlZykKICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbGxlZ2FsQ29weUF0dGVtcHQsIGNvcHkuZGVlcGNvcHksIHNlbGYudGVzdF9yZWcpCgogICAgZGVmIHRlc3RfcVJlZ19jb25zdHJ1Y3Rpb25fZmFpbHNfd2l0aF9ub25faW50ZWdlcl9jcmVhdGlvbl9hcmcoc2VsZik6CiAgICAgICAgJycnCiAgICAgICAgVmVyaWZpZXMgdGhhdCBgYHFSZWdgYCBpbml0aWFsaXphdGlvbiBmYWlscyB3aXRoIG5vbi1pbnRlZ2VyCiAgICAgICAgYGBuX3F1Yml0c2BgLgogICAgICAgICcnJwoKICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHFSZWcsIDEuMSkKCiAgICBkZWYgdGVzdF9xUmVnX2NvbnN0cnVjdGlvbl9mYWlsc193aXRoX2NyZWF0aW9uX2FyZ19sZXNzX3RoYW5fb25lKHNlbGYpOgogICAgICAgICcnJwogICAgICAgIFZlcmlmaWVzIHRoYXQgYGBxUmVnYGAgaW5pdGlhbGl6YXRpb24gZmFpbHMgd2l0aCBgYG5fcXViaXRzYGAgbGVzcyB0aGFuCiAgICAgICAgb25lLgogICAgICAgICcnJwoKICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBxUmVnLCAwKQogICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHFSZWcsIC0xKQoKICAgIGRlZiB0ZXN0X211bHRfY2hlY2tzX2JvdGhfcmVnc19mb3JfZGVyZWZlcmVuY2Uoc2VsZik6CiAgICAgICAgJycnCiAgICAgICAgVmVyaWZpZXMgdGhhdCBtdWx0aXBsaWNhdGlvbiBjaGVja3Mgd2hldGhlciBib3RoIGFyZ3VtZW50IHJlZ2lzdGVycyBhcmUKICAgICAgICBkZXJlZmVyZW5jZWQuCiAgICAgICAgJycnCgogICAgICAgIGEgPSBxUmVnKCkKICAgICAgICBiID0gYSAqIHFSZWcoKQoKICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbGxlZ2FsUmVnaXN0ZXJSZWZlcmVuY2UsIGEuX19tdWxfXywgYikKICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbGxlZ2FsUmVnaXN0ZXJSZWZlcmVuY2UsIGIuX19tdWxfXywgYSkKICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbGxlZ2FsUmVnaXN0ZXJSZWZlcmVuY2UsIGEuX19pbXVsX18sIGIpCiAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSWxsZWdhbFJlZ2lzdGVyUmVmZXJlbmNlLCBiLl9faW11bF9fLCBhKQoKICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX2RlcmVmZXJlbmNpbmcoc2VsZik6CiAgICAgICAgJycnCiAgICAgICAgVmVyaWZpZXMgdGhhdCBgYHFSZWdgYCBpbnN0YW5jZXMgZ2V0IGRlcmVmZXJlbmNlZCBpbiBjYXNlcyB3aGVyZQogICAgICAgIHRoZSBuby1jbG9uaW5nIHRoZW9yZW0gd291bGQgYmUgdmlvbGF0ZWQuCiAgICAgICAgJycnCgogICAgICAgICMgTXVsdGlwbGljYXRpb24gb3BlcmF0aW9uIGRlcmVmZXJlbmNlcyByZWdpc3Rlci4KICAgICAgICBhID0gcVJlZygpCiAgICAgICAgWC5vbihhKQogICAgICAgIGIgPSBxUmVnKCkKICAgICAgICBjID0gYSAqIGIKICAgICAgICBkID0gcVJlZygpCiAgICAgICAgZCAqPSBjCiAgICAgICAgc3RhdGVfMDEwID0gbnAuemVyb3MoOCkKICAgICAgICBzdGF0ZV8wMTBbMl0gPSAxCgogICAgICAgICMgYSwgYiwgYW5kIGMgc2hvdWxkIGFsbCBiZSBkZXJlZmVyZW5jZWQuIEQgc2hvdWxkIGJlIGluIHwwMDEwPgogICAgICAgIG5wLnRlc3RpbmcuYXNzZXJ0X2FycmF5X2VxdWFsKHN0YXRlXzAxMCwgZC5kdW1wX3N0YXRlKCkpCgogICAgICAgIGRlcmVmID0gW2EsIGIsIGNdCiAgICAgICAgZm9yIHJlZ2lzdGVyIGluIGRlcmVmOgoKICAgICAgICAgICAgIyBDaGVja3MgdGhhdCB0aGUgZGVyZWZlcmVuY2VkIHJlZ2lzdGVyIGlzIGZ1bGx5IGRlYWQgKGkuZS4gYWxsCiAgICAgICAgICAgICMgbWV0aG9kcyBjYWxsZWQgd2l0aCBvciBvbiBpdCByYWlzZSBhbiBleGNlcHRpb24uCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElsbGVnYWxSZWdpc3RlclJlZmVyZW5jZSwgcmVnaXN0ZXIubWVhc3VyZSwgMCkKICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSWxsZWdhbFJlZ2lzdGVyUmVmZXJlbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rlci5tZWFzdXJlX29ic2VydmFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFopCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElsbGVnYWxSZWdpc3RlclJlZmVyZW5jZSwgcmVnaXN0ZXIucGVlaykKICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSWxsZWdhbFJlZ2lzdGVyUmVmZXJlbmNlLCByZWdpc3Rlci5kdW1wX3N0YXRlKQogICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbGxlZ2FsUmVnaXN0ZXJSZWZlcmVuY2UsIHJlZ2lzdGVyLl9faWFkZF9fLCAxKQogICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbGxlZ2FsUmVnaXN0ZXJSZWZlcmVuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyLl9fbXVsX18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFSZWcoKSkKICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSWxsZWdhbFJlZ2lzdGVyUmVmZXJlbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rlci5fX2ltdWxfXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcVJlZygpKQogICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbGxlZ2FsUmVnaXN0ZXJSZWZlcmVuY2UsIGxlbiwgcmVnaXN0ZXIpCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElsbGVnYWxSZWdpc3RlclJlZmVyZW5jZSwgWC5vbiwgcmVnaXN0ZXIsIDApCgogICAgZGVmIHRlc3RfYmFkX21lYXN1cmVtZW50X2luZGV4KHNlbGYpOgogICAgICAgICcnJwogICAgICAgIFRoZSBgYHFSZWcubWVhc3VyZSgpYGAgbWV0aG9kIHRocm93cyBhbiBgYEluZGV4RXJyb3JgYCB3aGVuIHRoZQogICAgICAgIGFyZ3VtZW50IGlzbid0IGEgbm9ubmVnYXRpdmUgaW50ZWdlci4KICAgICAgICAnJycKCiAgICAgICAgYmFkX2xvY3MgPSBbMi40LCA4aiwgLTIsICd0d2VsdmUnXQoKICAgICAgICBmb3IgbG9jIGluIGJhZF9sb2NzOgogICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBzZWxmLnRlc3RfcmVnLm1lYXN1cmUsIGxvYykKCiAgICBkZWYgdGVzdF9uZWdhdGl2ZV9tZWFzdXJlbWVudF9pbmRleF9mYWlscyhzZWxmKToKICAgICAgICAnJycKICAgICAgICBNZWFzdXJlbWVudCBzaG91bGQgZmFpbCBmb3IgYSBuZWdhdGl2ZSBxdWJpdCBsb2NhdGlvbiBpbmRleC4KICAgICAgICAnJycKCiAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgc2VsZi50ZXN0X3JlZy5tZWFzdXJlLCAtMSkKCiAgICBkZWYgdGVzdF9tZWFzdXJlX29ic2VydmFibGVfYmFkX2lucHV0KHNlbGYpOgogICAgICAgICcnJwogICAgICAgIFRoZSBgYHFSZWcubWVhc3VyZV9vYnNlcnZhYmxlKClgYCBtZXRob2Qgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZgogICAgICAgIGNhbGxlZCB3aXRoIGEgbm9uIGBgcU9wYGAgb2JqZWN0LgogICAgICAgICcnJwoKICAgICAgICBpbnZhbGlkX29wcyA9IFsnYScsCiAgICAgICAgICAgICAgICAgICAgICAgWydwZWFzJywgJ2FuZCcsICdtb3JlJywgJ3BlYXMnXSwKICAgICAgICAgICAgICAgICAgICAgICA3MSwKICAgICAgICAgICAgICAgICAgICAgICBucC5leWUoOCksCiAgICAgICAgICAgICAgICAgICAgICAgbnAuZXllKDIpXQoKICAgICAgICBmb3Igb3AgaW4gaW52YWxpZF9vcHM6CiAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50ZXN0X3JlZy5tZWFzdXJlX29ic2VydmFibGUsIG9wKQoKICAgIGRlZiB0ZXN0X19nZW5lcmF0ZVN0YXRlVHJhbnNpdGlvblByb2JhYmlsaXRpZXMoc2VsZik6CiAgICAgICAgJycnCiAgICAgICAgQ2hlY2tzIHRoYXQgYSBgYE5vblVuaXRhcnlJbnB1dEVycm9yYGAgaXMgdGhyb3duIGZvciBub251bml0YXJ5CiAgICAgICAgYXJndW1lbnRzLgogICAgICAgICcnJwogICAgICAgIG5vblVuaXRhcnlNYXRyaXggPSBucC5leWUoNCkKICAgICAgICBub25Vbml0YXJ5TWF0cml4WzAsIDBdID0gMAoKICAgICAgICB0d29RdWJpdFJlZ2lzdGVyID0gcVJlZygyKQoKICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKICAgICAgICAgICAgTm9uVW5pdGFyeUlucHV0RXJyb3IsCiAgICAgICAgICAgIHR3b1F1Yml0UmVnaXN0ZXIuX2dlbmVyYXRlU3RhdGVUcmFuc2l0aW9uUHJvYmFiaWxpdGllcywKICAgICAgICAgICAgbm9uVW5pdGFyeU1hdHJpeCkKCiAgICBkZWYgdGVzdF9vcGVyYXRvcl9vdmVybG9hZGluZ19pYWRkX2ZhaWxzX2Zvcl9ub25pbnQoc2VsZik6CiAgICAgICAgJycnCiAgICAgICAgQ2hlY2tzIHRoYXQgYSBWYWx1ZUVycm9yIGlzIHRocm93biBmb3Igbm9uaW50ZWdlciByaWdodCBoYW5kIG9wZXJhbmQKICAgICAgICB0byBgKz1gLgogICAgICAgICcnJwoKICAgICAgICBxID0gcVJlZygpCgogICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHEuX19pYWRkX18sIDMuMikKCiAgICBkZWYgdGVzdF9vcGVyYXRvcl9vdmVybG9hZGluZ19pYWRkX2ZhaWxzX2Zvcl9uZWdhdGl2ZV9hcmcoc2VsZik6CiAgICAgICAgJycnCiAgICAgICAgQ2hlY2tzIHRoYXQgYSBWYWx1ZUVycm9yIGlzIHRocm93cyBmb3IgbmVnYXRpdmUgcmlnaHQgaGFuZCBvcGVyYW5kIHRvCiAgICAgICAgYCs9YC4KICAgICAgICAnJycKCiAgICAgICAgcSA9IHFSZWcoKQoKICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBxLl9faWFkZF9fLCAtMikKCiAgICBkZWYgdGVzdF9vcGVyYXRvcl9vdmVybG9hZGluZ19pbXVsX2ZhaWxzX2Zvcl9ub25fcXJlZ19hcmcoc2VsZik6CiAgICAgICAgJycnCiAgICAgICAgQ2hlY2tzIHRoYXQgYCo9YCB0aHJvd3MgYSBUeXBlRXJyb3Igd2hlbiB0aGUgcmlnaHQgaGFuZCBvcGVyYW5kIGlzCiAgICAgICAgbm90IGEgYHFSZWdgLgogICAgICAgICcnJwoKICAgICAgICBxID0gcVJlZygpCiAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBxLl9faW11bF9fLCA0KQoKICAgIGRlZiB0ZXN0X29wZXJhdG9yX292ZXJsb2FkaW5nX2ltdWxfb25fZGVyZWZlcmVuY2VkX2FyZ3NfZmFpbHMoc2VsZik6CiAgICAgICAgJycnCiAgICAgICAgQ2hlY2tzIHRoYXQgYCo9YCBmYWlscyB3aGVuIGVpdGhlciBpbnZvbHZlZCByZWdpc3RlciBpcyBkZXJlZmVyZW5jZWQuCiAgICAgICAgJycnCgogICAgICAgIHEgPSBxUmVnKCkKICAgICAgICBwID0gcVJlZygpCiAgICAgICAgcSAqPSBwCiAgICAgICAgciA9IHFSZWcoKQoKICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbGxlZ2FsUmVnaXN0ZXJSZWZlcmVuY2UsIHEuX19pbXVsX18sIHApCiAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSWxsZWdhbFJlZ2lzdGVyUmVmZXJlbmNlLCBwLl9faW11bF9fLCByKQoKCmNsYXNzIHFPcFN1Y2Nlc3ModW5pdHRlc3QuVGVzdENhc2UpOgoKICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAjIFRlc3QgcmVnaXN0ZXIgYW5kIG9wZXJhdG9yCiAgICAgICAgc2VsZi50ZXN0X3JlZyA9IHFSZWcoKQogICAgICAgIHNlbGYudGVzdF9vcCA9IHFPcCgpCgogICAgZGVmIHRlc3Rfa25vd25fb3BlcmF0aW9uX3Jlc3VsdHMoc2VsZik6CiAgICAgICAgJycnCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBWZXJpZmllcyB0aGUgcmVzdWx0aW5nIHN0YXRlIG9mIHNldmVyYWwgb3BlcmF0aW9ucy4KICAgICAgICAnJycKCiAgICAgICAgdGVzdF9yZXN1bHRzID0gW10KPHxmaW1fZW5kfD4="]
["f250306caa7efe2eca9637841942a77b8aa51624-3","f250306caa7efe2eca9637841942a77b8aa51624","PHxmaW1fcHJlZml4fD4KIyBTdGFuZGFyZCBtb2R1bGVzCmltcG9ydCB1bml0dGVzdAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IGNvcHkKCiMgcHlwU1FVRUFLIG1vZHVsZXMKIyBpbXBvcnQgcHlwc3F1ZWFrLmdhdGVzIGFzIGd0CmZyb20gcHlwc3F1ZWFrLmdhdGVzIGltcG9ydCBJLCBYLCBaLCBILCBDTk9UCmZyb20gcHlwc3F1ZWFrLmFwaSBpbXBvcnQgcVJlZywgcU9wLCBxT3JhY2xlCmZyb20gcHlwc3F1ZWFrLmVycm9ycyBpbXBvcnQgKElsbGVnYWxDb3B5QXR0ZW1wdCwgSWxsZWdhbFJlZ2lzdGVyUmVmZXJlbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcm9uZ1NoYXBlRXJyb3IsIE5vblVuaXRhcnlJbnB1dEVycm9yKQpmcm9tIHB5cHNxdWVhay5ub2lzZSBpbXBvcnQgZGFtcGluZ19tYXAKCgpjbGFzcyBxUmVnU3VjY2Vzcyh1bml0dGVzdC5UZXN0Q2FzZSk6CgogICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICMgVGVzdCByZWdpc3RlciBhbmQgb3BlcmF0b3IKICAgICAgICBzZWxmLnRlc3RfcmVnID0gcVJlZygpCiAgICAgICAgc2VsZi50ZXN0X29wID0gcU9wKCkKCiAgICBkZWYgdGVzdF9rbm93bl9tZWFzdXJlbWVudF9yZXN1bHRzKHNlbGYpOgogICAgICAgICcnJwogICAgICAgIFZlcmlmaWVzIHRoYXQgdGhlIHByb3BlciBwb3N0LW1lYXN1cmVtZW50IHN0YXRlIG9jY3VycyBpbiBzZXZlcmFsCiAgICAgICAgY2FzZXMuCiAgICAgICAgJycnCgogICAgICAgICMgTWVhc3VyZSB8MD4gY29ycmVjdGx5CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzZWxmLnRlc3RfcmVnLm1lYXN1cmUoMCkpCiAgICAgICAgbnAudGVzdGluZy5hc3NlcnRfYXJyYXlfZXF1YWwobnAuYXJyYXkoWzEsIDBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3RfcmVnLmR1bXBfc3RhdGUoKSkKCiAgICAgICAgIyBNZWFzdXJlIHwwMT4gY29ycmVjdGx5CiAgICAgICAgc2VsZi50ZXN0X3JlZyArPSAxCiAgICAgICAgWC5vbihzZWxmLnRlc3RfcmVnLCAwKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VsZi50ZXN0X3JlZy5tZWFzdXJlKDApKQogICAgICAgIG5wLnRlc3RpbmcuYXNzZXJ0X2FycmF5X2VxdWFsKG5wLmFycmF5KFswLCAxLCAwLCAwXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0X3JlZy5kdW1wX3N0YXRlKCkpCgogICAgICAgICMgTm93IGxldCdzIG1lYXN1cmUgdGhlIG9ic2VydmFibGUgWCBvbiB0aGUKICAgICAgICAjIHN1cGVycG9zaXRpb24gc3RhdGUgKHwwMD4gLSB8MDE+KS9zcXJ0KDIpLgogICAgICAgIEgub24oc2VsZi50ZXN0X3JlZywgMCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBzZWxmLnRlc3RfcmVnLm1lYXN1cmVfb2JzZXJ2YWJsZShJLmtyb24oWCkpKQoKICAgIGRlZiB0ZXN0X21lYXN1cmVtZW50X2NvbGxhcHNlc19yZWdpc3Rlcl9zdGF0ZShzZWxmKToKICAgICAgICAnJycKICAgICAgICBDaGVjayB0aGF0IGEgYGBxUmVnYGAgaW4gdGhlIG5vcm1hbGl6ZWQgdmVyc2lvbiBvZiB0aGUgc3RhdGUKICAgICAgICB8MDA+ICsgfDEwPiBjb3JyZWN0bHkgY29sbGFwc2VzIG9uIG1lYXN1cmVtZW50IG9mIHF1Yml0IDAgdG8gZWl0aGVyCiAgICAgICAgfDAwPiBvciB8MTA+LgogICAgICAgICcnJwogICAgICAgIGluaXRpYWxseVN1cGVycG9zZWRSZWdpc3RlciA9IHFSZWcoMikKICAgICAgICBILm9uKGluaXRpYWxseVN1cGVycG9zZWRSZWdpc3RlciwgMSkKICAgICAgICBtZWFzdXJlbWVudF9vdXRjb21lID0gaW5pdGlhbGx5U3VwZXJwb3NlZFJlZ2lzdGVyLm1lYXN1cmUoMSkKCiAgICAgICAgaWYgbWVhc3VyZW1lbnRfb3V0Y29tZSA9PSAwOgogICAgICAgICAgICBucC50ZXN0aW5nLmFzc2VydF9hcnJheV9lcXVhbCgKICAgICAgICAgICAgICAgIGluaXRpYWxseVN1cGVycG9zZWRSZWdpc3Rlci5kdW1wX3N0YXRlKCksIFsxLCAwLCAwLCAwXSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBucC50ZXN0aW5nLmFzc2VydF9hcnJheV9lcXVhbCgKICAgICAgICAgICAgICAgIGluaXRpYWxseVN1cGVycG9zZWRSZWdpc3Rlci5kdW1wX3N0YXRlKCksIFswLCAwLCAxLCAwXSkKCiAgICBkZWYgdGVzdF9tZWFzdXJlbWVudF9vbl9maXZlX3F1Yml0X3N0YXRlKHNlbGYpOgogICAgICAgIHJlZ2lzdGVyID0gcVJlZyg1KQogICAgICAgIFgub24ocmVnaXN0ZXIsIDMpCiAgICAgICAgWC5vbihyZWdpc3RlciwgMCkKICAgICAgICBILm9uKHJlZ2lzdGVyLCAxKQoKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdGVyLm1lYXN1cmUoMyksIDEpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWdpc3Rlci5tZWFzdXJlKDQpLCAwKQoKICAgIGRlZiB0ZXN0X25vX3RhcmdldF9zaXplX21hdGNoKHNlbGYpOgogICAgICAgICcnJwogICAgICAgIE5vIHRhcmdldHMgc2hvdWxkIGJlIG5lY2Vzc2FyeSBmb3IgYSBgYHFPcGBgIGFjdGluZyBvbiBhIGBgcVJlZ2BgIG9mCiAgICAgICAgdGhlIHNhbWUgc2l6ZS4KICAgICAgICAnJycKCiAgICAgICAgc2VsZi50ZXN0X29wLm9uKHNlbGYudGVzdF9yZWcpCiAgICAgICAgbnAudGVzdGluZy5hc3NlcnRfYXJyYXlfZXF1YWwoc2VsZi50ZXN0X3JlZy5kdW1wX3N0YXRlKCksCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucC5hcnJheShbMSwgMF0pKQoKPHxmaW1fZW5kfD4="]
["085da8ffaf4a18c5f8afd265c989532b9a3ade13-1","085da8ffaf4a18c5f8afd265c989532b9a3ade13","PHxmaW1fcHJlZml4fD4KZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MsIFZhbHVlLCBNYW5hZ2VyCmZyb20gbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzIGltcG9ydCBTeW5jTWFuYWdlcgppbXBvcnQgdGltZQppbXBvcnQgbWF0aAppbXBvcnQgb3MKaW1wb3J0IGNvbmZpZwppbXBvcnQgc2lnbmFsCgpjbGFzcyBTZXJ2bzoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2b19pZCk6CiAgICAgICAgc2VsZi5zZXJ2b19pZCA9IHNlcnZvX2lkCiAgICAgICAgc2VsZi5hbmdsZSA9IFZhbHVlKCdmJywgMC4wKQogICAgICAgIHNlbGYuc3RvcF9zaWduYWwgPSBWYWx1ZSgnYicsIEZhbHNlKQoKICAgICAgICAjIGh0dHA6Ly9qdHVzaG1hbi5naXRodWIuaW8vYmxvZy8yMDE0LzAxLzE0L3B5dGhvbi18LW11bHRpcHJvY2Vzc2luZy1hbmQtaW50ZXJydXB0cy8KICAgICAgICBtYW5hZ2VyID0gU3luY01hbmFnZXIoKSAjIGluc3RlYWQgb2YgcmVndWxhciBNYW5hZ2VyIGJlY2F1c2Ugd2Ugd2FudCB0byBpZ25vcmUga2IgaW50ZXJydXB0CiAgICAgICAgbWFuYWdlci5zdGFydChTZXJ2by5pbml0X21ncikgIyBzdGFydCB0aGUgbWFuYWdlciBleHBsaWNpdGx5CiAgICAgICAgc2VsZi5jb21tYW5kX3F1ZXVlID0gbWFuYWdlci5saXN0KFtdKQogICAgICAgIHNlbGYuY3VycmVudF9jb21tYW5kID0gbWFuYWdlci5kaWN0KCkKCiAgICAgICAgc2VsZi5maW5pc2hlZCA9IFZhbHVlKCdiJywgRmFsc2UpCgogICAgZGVmIHJvdGF0ZShzZWxmLCBkZWcsIHRpbWVmcmFtZSA9IE5vbmUpOgogICAgICAgIHNlbGYuY29tbWFuZF9xdWV1ZS5hcHBlbmQoeyd0YXJnZXRfYW5nbGUnOiBkZWcsICd0aW1lZnJhbWUnOiB0aW1lZnJhbWV9KQogICAgICAgIGlmIG5vdCBzZWxmLmN1cnJlbnRfY29tbWFuZDogc2VsZi5uZXh0X2NvbW1hbmQoKQoKICAgIGRlZiBzbGVlcChzZWxmLCB0aW1lZnJhbWUpOgogICAgICAgIHNlbGYuY29tbWFuZF9xdWV1ZS5hcHBlbmQoeyd0aW1lZnJhbWUnOiB0aW1lZnJhbWV9KQogICAgICAgIGlmIG5vdCBzZWxmLmN1cnJlbnRfY29tbWFuZDogc2VsZi5uZXh0X2NvbW1hbmQoKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIGlzX2ZpbmlzaGVkKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmZpbmlzaGVkLnZhbHVlCgogICAgZGVmIHN0b3Aoc2VsZik6Cjx8ZmltX2VuZHw+"]
["085da8ffaf4a18c5f8afd265c989532b9a3ade13-2","085da8ffaf4a18c5f8afd265c989532b9a3ade13","PHxmaW1fcHJlZml4fD4KZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MsIFZhbHVlLCBNYW5hZ2VyCmZyb20gbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzIGltcG9ydCBTeW5jTWFuYWdlcgppbXBvcnQgdGltZQppbXBvcnQgbWF0aAppbXBvcnQgb3MKaW1wb3J0IGNvbmZpZwppbXBvcnQgc2lnbmFsCgpjbGFzcyBTZXJ2bzoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2b19pZCk6CiAgICAgICAgc2VsZi5zZXJ2b19pZCA9IHNlcnZvX2lkCiAgICAgICAgc2VsZi5hbmdsZSA9IFZhbHVlKCdmJywgMC4wKQogICAgICAgIHNlbGYuc3RvcF9zaWduYWwgPSBWYWx1ZSgnYicsIEZhbHNlKQoKICAgICAgICAjIGh0dHA6Ly9qdHVzaG1hbi5naXRodWIuaW8vYmxvZy8yMDE0LzAxLzE0L3B5dGhvbi18LW11bHRpcHJvY2Vzc2luZy1hbmQtaW50ZXJydXB0cy8KICAgICAgICBtYW5hZ2VyID0gU3luY01hbmFnZXIoKSAjIGluc3RlYWQgb2YgcmVndWxhciBNYW5hZ2VyIGJlY2F1c2Ugd2Ugd2FudCB0byBpZ25vcmUga2IgaW50ZXJydXB0CiAgICAgICAgbWFuYWdlci5zdGFydChTZXJ2by5pbml0X21ncikgIyBzdGFydCB0aGUgbWFuYWdlciBleHBsaWNpdGx5CiAgICAgICAgc2VsZi5jb21tYW5kX3F1ZXVlID0gbWFuYWdlci5saXN0KFtdKQogICAgICAgIHNlbGYuY3VycmVudF9jb21tYW5kID0gbWFuYWdlci5kaWN0KCkKCiAgICAgICAgc2VsZi5maW5pc2hlZCA9IFZhbHVlKCdiJywgRmFsc2UpCgogICAgZGVmIHJvdGF0ZShzZWxmLCBkZWcsIHRpbWVmcmFtZSA9IE5vbmUpOgogICAgICAgIHNlbGYuY29tbWFuZF9xdWV1ZS5hcHBlbmQoeyd0YXJnZXRfYW5nbGUnOiBkZWcsICd0aW1lZnJhbWUnOiB0aW1lZnJhbWV9KQogICAgICAgIGlmIG5vdCBzZWxmLmN1cnJlbnRfY29tbWFuZDogc2VsZi5uZXh0X2NvbW1hbmQoKQoKICAgIGRlZiBzbGVlcChzZWxmLCB0aW1lZnJhbWUpOgogICAgICAgIHNlbGYuY29tbWFuZF9xdWV1ZS5hcHBlbmQoeyd0aW1lZnJhbWUnOiB0aW1lZnJhbWV9KQogICAgICAgIGlmIG5vdCBzZWxmLmN1cnJlbnRfY29tbWFuZDogc2VsZi5uZXh0X2NvbW1hbmQoKQoKICAgIGRlZiBpc19maW5pc2hlZChzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5maW5pc2hlZC52YWx1ZQoKICAgIGRlZiBzdG9wKHNlbGYpOgogICAgICAgIGRlbCBzZWxmLmNvbW1hbmRfcXVldWVbOl0KICAgICAgICBzZWxmLnN0b3Bfc2lnbmFsLnZhbHVlID0gVHJ1ZQoKICAgIGRlZiB1cGRhdGUoc2VsZik6CiAgICAgICAgaWYgbm90IHNlbGYuY3VycmVudF9jb21tYW5kIGFuZCBsZW4oc2VsZi5jb21tYW5kX3F1ZXVlKSA9PSAwOgogICAgICAgICAgICBzZWxmLmZpbmlzaGVkLnZhbHVlID0gVHJ1ZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYuZmluaXNoZWQudmFsdWUgPSBGYWxzZQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGVsYXBzZWRfdGltZSA9IFNlcnZvLnRpbWVfaW5fbWlsbGlzKCkgLSBzZWxmLmN1cnJlbnRfY29tbWFuZFsnc3RhcnRfdGltZSddCgogICAgICAgICAgICBpZiAndGFyZ2V0X2FuZ2xlJyBpbiBzZWxmLmN1cnJlbnRfY29tbWFuZDoKICAgICAgICAgICAgICAgIHNlbGYuYW5nbGUudmFsdWUgPSBTZXJ2by5lYXNlX2luX291dF9zaW5lKAogICAgICAgICAgICAgICAgICAgIGVsYXBzZWRfdGltZSwgc2VsZi5jdXJyZW50X2NvbW1hbmRbJ3N0YXJ0X2FuZ2xlJ10sIHNlbGYuY3VycmVudF9jb21tYW5kWyd0YXJnZXRfYW5nbGUnXSwgc2VsZi5jdXJyZW50X2NvbW1hbmRbJ3RpbWVmcmFtZSddCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgc2VsZi5jYXBfYW5nbGUoKQogICAgICAgICAgICAgICAgc2VsZi5jYW5fcm90YXRlKCkKCiAgICAgICAgICAgIGlmIGVsYXBzZWRfdGltZSA+IHNlbGYuY3VycmVudF9jb21tYW5kWyd0aW1lZnJhbWUnXToKICAgICAgICAgICAgICAgIHNlbGYubmV4dF9jb21tYW5kKCkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHBhc3MKCiAgICAgICAgaWYgc2VsZi5zdG9wX3NpZ25hbC52YWx1ZToKICAgICAgICAgICAgc2VsZi5uZXh0X2NvbW1hbmQoKQoKICAgICAgICAjIGlmIG5vdCBzZWxmLmN1cnJlbnRfY29tbWFuZCBhbmQgbGVuKHNlbGYuY29tbWFuZF9xdWV1ZSkgPT0gMDoKICAgICAgICAjICAgICBzZWxmLmZpbmlzaGVkLnZhbHVlID0gVHJ1ZQogICAgICAgICMgZWxzZToKICAgICAgICAjICAgICBzZWxmLmZpbmlzaGVkLnZhbHVlID0gRmFsc2UKCjx8ZmltX2hvbGV8PgogICAgICAgICAgICBzZWxmLmFuZ2xlLnZhbHVlID0gMAoKICAgIGRlZiBuZXh0X2NvbW1hbmQoc2VsZik6CiAgICAgICAgc2VsZi5zdG9wX3NpZ25hbC52YWx1ZSA9IEZhbHNlCiAgICAgICAgc2VsZi5jdXJyZW50X2NvbW1hbmQuY2xlYXIoKQogICAgICAgIGlmIGxlbihzZWxmLmNvbW1hbmRfcXVldWUpID09IDA6IHJldHVybgogICAgICAgIHNlbGYuY3VycmVudF9jb21tYW5kLnVwZGF0ZShzZWxmLmNvbW1hbmRfcXVldWUucG9wKDApKQoKICAgICAgICBpZiAndGFyZ2V0X2FuZ2xlJyBpbiBzZWxmLmN1cnJlbnRfY29tbWFuZDoKICAgICAgICAgICAgc2VsZi5jdXJyZW50X2NvbW1hbmRbJ3N0YXJ0X2FuZ2xlJ10gPSBzZWxmLmFuZ2xlLnZhbHVlCgogICAgICAgIHNlbGYuY3VycmVudF9jb21tYW5kWydzdGFydF90aW1lJ10gPSBTZXJ2by50aW1lX2luX21pbGxpcygpCgogICAgZGVmIGNhbl9yb3RhdGUoc2VsZik6CiAgICAgICAgZGlyZWN0aW9uID0gJ2FzYycgaWYgc2VsZi5hbmdsZS52YWx1ZSA8IHNlbGYuY3VycmVudF9jb21tYW5kWyd0YXJnZXRfYW5nbGUnXSBlbHNlICdkZXNjJwoKICAgICAgICBjYW5ub3QgPSBtYXRoLmNlaWwoc2VsZi5hbmdsZS52YWx1ZSkgPj0gc2VsZi5jdXJyZW50X2NvbW1hbmRbJ3RhcmdldF9hbmdsZSddIGFuZCBkaXJlY3Rpb24gPT0gJ2FzYycKICAgICAgICBjYW5ub3QgPSBjYW5ub3Qgb3IgbWF0aC5mbG9vcihzZWxmLmFuZ2xlLnZhbHVlKSA8PSBzZWxmLmN1cnJlbnRfY29tbWFuZFsndGFyZ2V0X2FuZ2xlJ10gYW5kIGRpcmVjdGlvbiA9PSAnZGVzYycKCiAgICAgICAgaWYgY2Fubm90OiBzZWxmLnN0b3Bfc2lnbmFsLnZhbHVlID0gVHJ1ZQoKICAgICAgICByZXR1cm4gY2Fubm90CgogICAgZGVmIGFsdGVyX3B3bShzZWxmKToKICAgICAgICBpZiBzZWxmLmlzX2ZpbmlzaGVkKCk6IHJldHVybgogICAgICAgIHB3bSA9IHNlbGYuYW5nbGUudmFsdWUgKiAoKGNvbmZpZy5TRVJWT19NQVhfV0lEVEggLSBjb25maWcuU0VSVk9fTUlOX1dJRFRIKSAvIDE4MC4wKSAjIDEgZGVncmVlID0gbWF4IGhpZ2ggcHVsc2UgdGltZSAvIDE4MAogICAgICAgIHB3bSArPSBjb25maWcuU0VSVk9fTUlOX1dJRFRIICAjIGFkZCBtaW5pbXVtIGhpZ2ggcHVsc2UgdGltZQoKICAgICAgICBvcy5zeXN0ZW0oImVjaG8gIiArIHN0cihzZWxmLnNlcnZvX2lkKSArICI9IiArIHN0cihtYXRoLmNlaWwocHdtKSkgKyAiID4gL2Rldi9zZXJ2b2JsYXN0ZXIiKQoKICAgIGRlZiBkZWNyZWFzZV9wd20oc2VsZiwgdmFsKToKICAgICAgICBvcy5zeXN0ZW0oImVjaG8gIiArIHN0cihzZWxmLnNlcnZvX2lkKSArICI9LSIgKyBzdHIodmFsKSArICIgPiAvZGV2L3NlcnZvYmxhc3RlciIpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGVhc2VfaW5fb3V0X3NpbmUoZWxhcHNlZF90aW1lLCBiZWdpbiwgZW5kLCB0aW1lZnJhbWUpOgogICAgICAgIGIgPSBiZWdpbgogICAgICAgIGMgPSBtYXRoLmZhYnMoZW5kIC0gYmVnaW4pCiAgICAgICAgYmVnaW4gPSAwCgogICAgICAgIHBvcyA9IC1jIC8gMiAqIChtYXRoLmNvcyhtYXRoLnBpICogZWxhcHNlZF90aW1lIC8gdGltZWZyYW1lKSAtIDEpCgogICAgICAgIGlmIGIgPiBlbmQ6CiAgICAgICAgICAgIHJldHVybiBtYXRoLmZhYnMocG9zIC0gYikKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gcG9zICsgYgoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiB0aW1lX2luX21pbGxpcygpOgogICAgICAgIHJldHVybiBpbnQocm91bmQodGltZS50aW1lKCkgKiAxMDAwKSkKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgaW5pdF9tZ3IoKToKICAgICAgICAjIGlnbm9yZSBrYiBpbnRlcnJ1cHQgaW4gU3luY01hbmFnZXIKICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfSUdOKQo8fGZpbV9zdWZmaXh8PgogICAgZGVmIGNhcF9hbmdsZShzZWxmKToKICAgICAgICBpZiBzZWxmLmFuZ2xlLnZhbHVlID4gMTgwOgogICAgICAgICAgICBzZWxmLmFuZ2xlLnZhbHVlID0gMTgwCiAgICAgICAgZWxpZiBzZWxmLmFuZ2xlLnZhbHVlIDwgMDoKPHxmaW1fZW5kfD4="]
["085da8ffaf4a18c5f8afd265c989532b9a3ade13-3","085da8ffaf4a18c5f8afd265c989532b9a3ade13","PHxmaW1fcHJlZml4fD4KZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MsIFZhbHVlLCBNYW5hZ2VyCmZyb20gbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzIGltcG9ydCBTeW5jTWFuYWdlcgppbXBvcnQgdGltZQppbXBvcnQgbWF0aAppbXBvcnQgb3MKaW1wb3J0IGNvbmZpZwppbXBvcnQgc2lnbmFsCgpjbGFzcyBTZXJ2bzoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2b19pZCk6CiAgICAgICAgc2VsZi5zZXJ2b19pZCA9IHNlcnZvX2lkCiAgICAgICAgc2VsZi5hbmdsZSA9IFZhbHVlKCdmJywgMC4wKQogICAgICAgIHNlbGYuc3RvcF9zaWduYWwgPSBWYWx1ZSgnYicsIEZhbHNlKQoKICAgICAgICAjIGh0dHA6Ly9qdHVzaG1hbi5naXRodWIuaW8vYmxvZy8yMDE0LzAxLzE0L3B5dGhvbi18LW11bHRpcHJvY2Vzc2luZy1hbmQtaW50ZXJydXB0cy8KICAgICAgICBtYW5hZ2VyID0gU3luY01hbmFnZXIoKSAjIGluc3RlYWQgb2YgcmVndWxhciBNYW5hZ2VyIGJlY2F1c2Ugd2Ugd2FudCB0byBpZ25vcmUga2IgaW50ZXJydXB0CiAgICAgICAgbWFuYWdlci5zdGFydChTZXJ2by5pbml0X21ncikgIyBzdGFydCB0aGUgbWFuYWdlciBleHBsaWNpdGx5CiAgICAgICAgc2VsZi5jb21tYW5kX3F1ZXVlID0gbWFuYWdlci5saXN0KFtdKQogICAgICAgIHNlbGYuY3VycmVudF9jb21tYW5kID0gbWFuYWdlci5kaWN0KCkKCiAgICAgICAgc2VsZi5maW5pc2hlZCA9IFZhbHVlKCdiJywgRmFsc2UpCgogICAgZGVmIHJvdGF0ZShzZWxmLCBkZWcsIHRpbWVmcmFtZSA9IE5vbmUpOgogICAgICAgIHNlbGYuY29tbWFuZF9xdWV1ZS5hcHBlbmQoeyd0YXJnZXRfYW5nbGUnOiBkZWcsICd0aW1lZnJhbWUnOiB0aW1lZnJhbWV9KQogICAgICAgIGlmIG5vdCBzZWxmLmN1cnJlbnRfY29tbWFuZDogc2VsZi5uZXh0X2NvbW1hbmQoKQoKICAgIGRlZiBzbGVlcChzZWxmLCB0aW1lZnJhbWUpOgogICAgICAgIHNlbGYuY29tbWFuZF9xdWV1ZS5hcHBlbmQoeyd0aW1lZnJhbWUnOiB0aW1lZnJhbWV9KQogICAgICAgIGlmIG5vdCBzZWxmLmN1cnJlbnRfY29tbWFuZDogc2VsZi5uZXh0X2NvbW1hbmQoKQoKICAgIGRlZiBpc19maW5pc2hlZChzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5maW5pc2hlZC52YWx1ZQoKICAgIGRlZiBzdG9wKHNlbGYpOgogICAgICAgIGRlbCBzZWxmLmNvbW1hbmRfcXVldWVbOl0KICAgICAgICBzZWxmLnN0b3Bfc2lnbmFsLnZhbHVlID0gVHJ1ZQoKICAgIGRlZiB1cGRhdGUoc2VsZik6CiAgICAgICAgaWYgbm90IHNlbGYuY3VycmVudF9jb21tYW5kIGFuZCBsZW4oc2VsZi5jb21tYW5kX3F1ZXVlKSA9PSAwOgogICAgICAgICAgICBzZWxmLmZpbmlzaGVkLnZhbHVlID0gVHJ1ZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYuZmluaXNoZWQudmFsdWUgPSBGYWxzZQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGVsYXBzZWRfdGltZSA9IFNlcnZvLnRpbWVfaW5fbWlsbGlzKCkgLSBzZWxmLmN1cnJlbnRfY29tbWFuZFsnc3RhcnRfdGltZSddCgogICAgICAgICAgICBpZiAndGFyZ2V0X2FuZ2xlJyBpbiBzZWxmLmN1cnJlbnRfY29tbWFuZDoKICAgICAgICAgICAgICAgIHNlbGYuYW5nbGUudmFsdWUgPSBTZXJ2by5lYXNlX2luX291dF9zaW5lKAogICAgICAgICAgICAgICAgICAgIGVsYXBzZWRfdGltZSwgc2VsZi5jdXJyZW50X2NvbW1hbmRbJ3N0YXJ0X2FuZ2xlJ10sIHNlbGYuY3VycmVudF9jb21tYW5kWyd0YXJnZXRfYW5nbGUnXSwgc2VsZi5jdXJyZW50X2NvbW1hbmRbJ3RpbWVmcmFtZSddCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgc2VsZi5jYXBfYW5nbGUoKQogICAgICAgICAgICAgICAgc2VsZi5jYW5fcm90YXRlKCkKCiAgICAgICAgICAgIGlmIGVsYXBzZWRfdGltZSA+IHNlbGYuY3VycmVudF9jb21tYW5kWyd0aW1lZnJhbWUnXToKICAgICAgICAgICAgICAgIHNlbGYubmV4dF9jb21tYW5kKCkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHBhc3MKCiAgICAgICAgaWYgc2VsZi5zdG9wX3NpZ25hbC52YWx1ZToKICAgICAgICAgICAgc2VsZi5uZXh0X2NvbW1hbmQoKQoKICAgICAgICAjIGlmIG5vdCBzZWxmLmN1cnJlbnRfY29tbWFuZCBhbmQgbGVuKHNlbGYuY29tbWFuZF9xdWV1ZSkgPT0gMDoKICAgICAgICAjICAgICBzZWxmLmZpbmlzaGVkLnZhbHVlID0gVHJ1ZQogICAgICAgICMgZWxzZToKICAgICAgICAjICAgICBzZWxmLmZpbmlzaGVkLnZhbHVlID0gRmFsc2UKCiAgICBkZWYgY2FwX2FuZ2xlKHNlbGYpOgogICAgICAgIGlmIHNlbGYuYW5nbGUudmFsdWUgPiAxODA6CiAgICAgICAgICAgIHNlbGYuYW5nbGUudmFsdWUgPSAxODAKICAgICAgICBlbGlmIHNlbGYuYW5nbGUudmFsdWUgPCAwOgogICAgICAgICAgICBzZWxmLmFuZ2xlLnZhbHVlID0gMAoKICAgIGRlZiBuZXh0X2NvbW1hbmQoc2VsZik6CiAgICAgICAgc2VsZi5zdG9wX3NpZ25hbC52YWx1ZSA9IEZhbHNlCiAgICAgICAgc2VsZi5jdXJyZW50X2NvbW1hbmQuY2xlYXIoKQogICAgICAgIGlmIGxlbihzZWxmLmNvbW1hbmRfcXVldWUpID09IDA6IHJldHVybgogICAgICAgIHNlbGYuY3VycmVudF9jb21tYW5kLnVwZGF0ZShzZWxmLmNvbW1hbmRfcXVldWUucG9wKDApKQoKICAgICAgICBpZiAndGFyZ2V0X2FuZ2xlJyBpbiBzZWxmLmN1cnJlbnRfY29tbWFuZDoKICAgICAgICAgICAgc2VsZi5jdXJyZW50X2NvbW1hbmRbJ3N0YXJ0X2FuZ2xlJ10gPSBzZWxmLmFuZ2xlLnZhbHVlCgogICAgICAgIHNlbGYuY3VycmVudF9jb21tYW5kWydzdGFydF90aW1lJ10gPSBTZXJ2by50aW1lX2luX21pbGxpcygpCgogICAgZGVmIGNhbl9yb3RhdGUoc2VsZik6CiAgICAgICAgZGlyZWN0aW9uID0gJ2FzYycgaWYgc2VsZi5hbmdsZS52YWx1ZSA8IHNlbGYuY3VycmVudF9jb21tYW5kWyd0YXJnZXRfYW5nbGUnXSBlbHNlICdkZXNjJwoKICAgICAgICBjYW5ub3QgPSBtYXRoLmNlaWwoc2VsZi5hbmdsZS52YWx1ZSkgPj0gc2VsZi5jdXJyZW50X2NvbW1hbmRbJ3RhcmdldF9hbmdsZSddIGFuZCBkaXJlY3Rpb24gPT0gJ2FzYycKICAgICAgICBjYW5ub3QgPSBjYW5ub3Qgb3IgbWF0aC5mbG9vcihzZWxmLmFuZ2xlLnZhbHVlKSA8PSBzZWxmLmN1cnJlbnRfY29tbWFuZFsndGFyZ2V0X2FuZ2xlJ10gYW5kIGRpcmVjdGlvbiA9PSAnZGVzYycKCiAgICAgICAgaWYgY2Fubm90OiBzZWxmLnN0b3Bfc2lnbmFsLnZhbHVlID0gVHJ1ZQoKICAgICAgICByZXR1cm4gY2Fubm90CgogICAgZGVmIGFsdGVyX3B3bShzZWxmKToKICAgICAgICBpZiBzZWxmLmlzX2ZpbmlzaGVkKCk6IHJldHVybgogICAgICAgIHB3bSA9IHNlbGYuYW5nbGUudmFsdWUgKiAoKGNvbmZpZy5TRVJWT19NQVhfV0lEVEggLSBjb25maWcuU0VSVk9fTUlOX1dJRFRIKSAvIDE4MC4wKSAjIDEgZGVncmVlID0gbWF4IGhpZ2ggcHVsc2UgdGltZSAvIDE4MAogICAgICAgIHB3bSArPSBjb25maWcuU0VSVk9fTUlOX1dJRFRIICAjIGFkZCBtaW5pbXVtIGhpZ2ggcHVsc2UgdGltZQoKICAgICAgICBvcy5zeXN0ZW0oImVjaG8gIiArIHN0cihzZWxmLnNlcnZvX2lkKSArICI9IiArIHN0cihtYXRoLmNlaWwocHdtKSkgKyAiID4gL2Rldi9zZXJ2b2JsYXN0ZXIiKQoKICAgIGRlZiBkZWNyZWFzZV9wd20oc2VsZiwgdmFsKToKICAgICAgICBvcy5zeXN0ZW0oImVjaG8gIiArIHN0cihzZWxmLnNlcnZvX2lkKSArICI9LSIgKyBzdHIodmFsKSArICIgPiAvZGV2L3NlcnZvYmxhc3RlciIpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGVhc2VfaW5fb3V0X3NpbmUoZWxhcHNlZF90aW1lLCBiZWdpbiwgZW5kLCB0aW1lZnJhbWUpOgogICAgICAgIGIgPSBiZWdpbgogICAgICAgIGMgPSBtYXRoLmZhYnMoZW5kIC0gYmVnaW4pCiAgICAgICAgYmVnaW4gPSAwCgogICAgICAgIHBvcyA9IC1jIC8gMiAqIChtYXRoLmNvcyhtYXRoLnBpICogZWxhcHNlZF90aW1lIC8gdGltZWZyYW1lKSAtIDEpCgogICAgICAgIGlmIGIgPiBlbmQ6CiAgICAgICAgICAgIHJldHVybiBtYXRoLmZhYnMocG9zIC0gYikKICAgICAgICBlbHNlOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHJldHVybiBwb3MgKyBiCgo8fGZpbV9lbmR8Pg=="]
["085da8ffaf4a18c5f8afd265c989532b9a3ade13-4","085da8ffaf4a18c5f8afd265c989532b9a3ade13","PHxmaW1fcHJlZml4fD4KZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MsIFZhbHVlLCBNYW5hZ2VyCmZyb20gbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzIGltcG9ydCBTeW5jTWFuYWdlcgppbXBvcnQgdGltZQppbXBvcnQgbWF0aAppbXBvcnQgb3MKaW1wb3J0IGNvbmZpZwppbXBvcnQgc2lnbmFsCgpjbGFzcyBTZXJ2bzoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2b19pZCk6CiAgICAgICAgc2VsZi5zZXJ2b19pZCA9IHNlcnZvX2lkCiAgICAgICAgc2VsZi5hbmdsZSA9IFZhbHVlKCdmJywgMC4wKQogICAgICAgIHNlbGYuc3RvcF9zaWduYWwgPSBWYWx1ZSgnYicsIEZhbHNlKQoKICAgICAgICAjIGh0dHA6Ly9qdHVzaG1hbi5naXRodWIuaW8vYmxvZy8yMDE0LzAxLzE0L3B5dGhvbi18LW11bHRpcHJvY2Vzc2luZy1hbmQtaW50ZXJydXB0cy8KICAgICAgICBtYW5hZ2VyID0gU3luY01hbmFnZXIoKSAjIGluc3RlYWQgb2YgcmVndWxhciBNYW5hZ2VyIGJlY2F1c2Ugd2Ugd2FudCB0byBpZ25vcmUga2IgaW50ZXJydXB0CiAgICAgICAgbWFuYWdlci5zdGFydChTZXJ2by5pbml0X21ncikgIyBzdGFydCB0aGUgbWFuYWdlciBleHBsaWNpdGx5CiAgICAgICAgc2VsZi5jb21tYW5kX3F1ZXVlID0gbWFuYWdlci5saXN0KFtdKQogICAgICAgIHNlbGYuY3VycmVudF9jb21tYW5kID0gbWFuYWdlci5kaWN0KCkKCiAgICAgICAgc2VsZi5maW5pc2hlZCA9IFZhbHVlKCdiJywgRmFsc2UpCgogICAgZGVmIHJvdGF0ZShzZWxmLCBkZWcsIHRpbWVmcmFtZSA9IE5vbmUpOgogICAgICAgIHNlbGYuY29tbWFuZF9xdWV1ZS5hcHBlbmQoeyd0YXJnZXRfYW5nbGUnOiBkZWcsICd0aW1lZnJhbWUnOiB0aW1lZnJhbWV9KQogICAgICAgIGlmIG5vdCBzZWxmLmN1cnJlbnRfY29tbWFuZDogc2VsZi5uZXh0X2NvbW1hbmQoKQoKICAgIGRlZiBzbGVlcChzZWxmLCB0aW1lZnJhbWUpOgogICAgICAgIHNlbGYuY29tbWFuZF9xdWV1ZS5hcHBlbmQoeyd0aW1lZnJhbWUnOiB0aW1lZnJhbWV9KQogICAgICAgIGlmIG5vdCBzZWxmLmN1cnJlbnRfY29tbWFuZDogc2VsZi5uZXh0X2NvbW1hbmQoKQoKICAgIGRlZiBpc19maW5pc2hlZChzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5maW5pc2hlZC52YWx1ZQoKICAgIGRlZiBzdG9wKHNlbGYpOgogICAgICAgIGRlbCBzZWxmLmNvbW1hbmRfcXVldWVbOl0KICAgICAgICBzZWxmLnN0b3Bfc2lnbmFsLnZhbHVlID0gVHJ1ZQoKICAgIGRlZiB1cGRhdGUoc2VsZik6CiAgICAgICAgaWYgbm90IHNlbGYuY3VycmVudF9jb21tYW5kIGFuZCBsZW4oc2VsZi5jb21tYW5kX3F1ZXVlKSA9PSAwOgogICAgICAgICAgICBzZWxmLmZpbmlzaGVkLnZhbHVlID0gVHJ1ZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYuZmluaXNoZWQudmFsdWUgPSBGYWxzZQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGVsYXBzZWRfdGltZSA9IFNlcnZvLnRpbWVfaW5fbWlsbGlzKCkgLSBzZWxmLmN1cnJlbnRfY29tbWFuZFsnc3RhcnRfdGltZSddCgogICAgICAgICAgICBpZiAndGFyZ2V0X2FuZ2xlJyBpbiBzZWxmLmN1cnJlbnRfY29tbWFuZDoKICAgICAgICAgICAgICAgIHNlbGYuYW5nbGUudmFsdWUgPSBTZXJ2by5lYXNlX2luX291dF9zaW5lKAogICAgICAgICAgICAgICAgICAgIGVsYXBzZWRfdGltZSwgc2VsZi5jdXJyZW50X2NvbW1hbmRbJ3N0YXJ0X2FuZ2xlJ10sIHNlbGYuY3VycmVudF9jb21tYW5kWyd0YXJnZXRfYW5nbGUnXSwgc2VsZi5jdXJyZW50X2NvbW1hbmRbJ3RpbWVmcmFtZSddCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgc2VsZi5jYXBfYW5nbGUoKQogICAgICAgICAgICAgICAgc2VsZi5jYW5fcm90YXRlKCkKCiAgICAgICAgICAgIGlmIGVsYXBzZWRfdGltZSA+IHNlbGYuY3VycmVudF9jb21tYW5kWyd0aW1lZnJhbWUnXToKICAgICAgICAgICAgICAgIHNlbGYubmV4dF9jb21tYW5kKCkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHBhc3MKCiAgICAgICAgaWYgc2VsZi5zdG9wX3NpZ25hbC52YWx1ZToKICAgICAgICAgICAgc2VsZi5uZXh0X2NvbW1hbmQoKQoKICAgICAgICAjIGlmIG5vdCBzZWxmLmN1cnJlbnRfY29tbWFuZCBhbmQgbGVuKHNlbGYuY29tbWFuZF9xdWV1ZSkgPT0gMDoKICAgICAgICAjICAgICBzZWxmLmZpbmlzaGVkLnZhbHVlID0gVHJ1ZQogICAgICAgICMgZWxzZToKICAgICAgICAjICAgICBzZWxmLmZpbmlzaGVkLnZhbHVlID0gRmFsc2UKCiAgICBkZWYgY2FwX2FuZ2xlKHNlbGYpOgogICAgICAgIGlmIHNlbGYuYW5nbGUudmFsdWUgPiAxODA6CiAgICAgICAgICAgIHNlbGYuYW5nbGUudmFsdWUgPSAxODAKICAgICAgICBlbGlmIHNlbGYuYW5nbGUudmFsdWUgPCAwOgogICAgICAgICAgICBzZWxmLmFuZ2xlLnZhbHVlID0gMAoKICAgIGRlZiBuZXh0X2NvbW1hbmQoc2VsZik6CiAgICAgICAgc2VsZi5zdG9wX3NpZ25hbC52YWx1ZSA9IEZhbHNlCiAgICAgICAgc2VsZi5jdXJyZW50X2NvbW1hbmQuY2xlYXIoKQogICAgICAgIGlmIGxlbihzZWxmLmNvbW1hbmRfcXVldWUpID09IDA6IHJldHVybgogICAgICAgIHNlbGYuY3VycmVudF9jb21tYW5kLnVwZGF0ZShzZWxmLmNvbW1hbmRfcXVldWUucG9wKDApKQoKICAgICAgICBpZiAndGFyZ2V0X2FuZ2xlJyBpbiBzZWxmLmN1cnJlbnRfY29tbWFuZDoKICAgICAgICAgICAgc2VsZi5jdXJyZW50X2NvbW1hbmRbJ3N0YXJ0X2FuZ2xlJ10gPSBzZWxmLmFuZ2xlLnZhbHVlCgogICAgICAgIHNlbGYuY3VycmVudF9jb21tYW5kWydzdGFydF90aW1lJ10gPSBTZXJ2by50aW1lX2luX21pbGxpcygpCgogICAgZGVmIGNhbl9yb3RhdGUoc2VsZik6CiAgICAgICAgZGlyZWN0aW9uID0gJ2FzYycgaWYgc2VsZi5hbmdsZS52YWx1ZSA8IHNlbGYuY3VycmVudF9jb21tYW5kWyd0YXJnZXRfYW5nbGUnXSBlbHNlICdkZXNjJwoKICAgICAgICBjYW5ub3QgPSBtYXRoLmNlaWwoc2VsZi5hbmdsZS52YWx1ZSkgPj0gc2VsZi5jdXJyZW50X2NvbW1hbmRbJ3RhcmdldF9hbmdsZSddIGFuZCBkaXJlY3Rpb24gPT0gJ2FzYycKICAgICAgICBjYW5ub3QgPSBjYW5ub3Qgb3IgbWF0aC5mbG9vcihzZWxmLmFuZ2xlLnZhbHVlKSA8PSBzZWxmLmN1cnJlbnRfY29tbWFuZFsndGFyZ2V0X2FuZ2xlJ10gYW5kIGRpcmVjdGlvbiA9PSAnZGVzYycKCiAgICAgICAgaWYgY2Fubm90OiBzZWxmLnN0b3Bfc2lnbmFsLnZhbHVlID0gVHJ1ZQoKICAgICAgICByZXR1cm4gY2Fubm90Cjx8ZmltX2hvbGV8PgogICAgICAgIHB3bSArPSBjb25maWcuU0VSVk9fTUlOX1dJRFRIICAjIGFkZCBtaW5pbXVtIGhpZ2ggcHVsc2UgdGltZQoKICAgICAgICBvcy5zeXN0ZW0oImVjaG8gIiArIHN0cihzZWxmLnNlcnZvX2lkKSArICI9IiArIHN0cihtYXRoLmNlaWwocHdtKSkgKyAiID4gL2Rldi9zZXJ2b2JsYXN0ZXIiKQoKICAgIGRlZiBkZWNyZWFzZV9wd20oc2VsZiwgdmFsKToKICAgICAgICBvcy5zeXN0ZW0oImVjaG8gIiArIHN0cihzZWxmLnNlcnZvX2lkKSArICI9LSIgKyBzdHIodmFsKSArICIgPiAvZGV2L3NlcnZvYmxhc3RlciIpCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGVhc2VfaW5fb3V0X3NpbmUoZWxhcHNlZF90aW1lLCBiZWdpbiwgZW5kLCB0aW1lZnJhbWUpOgogICAgICAgIGIgPSBiZWdpbgogICAgICAgIGMgPSBtYXRoLmZhYnMoZW5kIC0gYmVnaW4pCiAgICAgICAgYmVnaW4gPSAwCgogICAgICAgIHBvcyA9IC1jIC8gMiAqIChtYXRoLmNvcyhtYXRoLnBpICogZWxhcHNlZF90aW1lIC8gdGltZWZyYW1lKSAtIDEpCgogICAgICAgIGlmIGIgPiBlbmQ6CiAgICAgICAgICAgIHJldHVybiBtYXRoLmZhYnMocG9zIC0gYikKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gcG9zICsgYgoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiB0aW1lX2luX21pbGxpcygpOgogICAgICAgIHJldHVybiBpbnQocm91bmQodGltZS50aW1lKCkgKiAxMDAwKSkKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgaW5pdF9tZ3IoKToKICAgICAgICAjIGlnbm9yZSBrYiBpbnRlcnJ1cHQgaW4gU3luY01hbmFnZXIKICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfSUdOKQo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiBhbHRlcl9wd20oc2VsZik6CiAgICAgICAgaWYgc2VsZi5pc19maW5pc2hlZCgpOiByZXR1cm4KICAgICAgICBwd20gPSBzZWxmLmFuZ2xlLnZhbHVlICogKChjb25maWcuU0VSVk9fTUFYX1dJRFRIIC0gY29uZmlnLlNFUlZPX01JTl9XSURUSCkgLyAxODAuMCkgIyAxIGRlZ3JlZSA9IG1heCBoaWdoIHB1bHNlIHRpbWUgLyAxODAKPHxmaW1fZW5kfD4="]
["cd58ba6348662143f2584a02dbfaa8df02e5f482-1","cd58ba6348662143f2584a02dbfaa8df02e5f482","PHxmaW1fcHJlZml4fD4KZnJvbSAuIGltcG9ydCBjb25uZWN0b3JzICAjIG5vcWEKZnJvbSAuIGltcG9ydCBlbGVtZW50cyAgIyBub3FhCmZyb20gLiBpbXBvcnQgb3BzICAjIG5vcWEKZnJvbSAuIGltcG9ydCBwbGFucyAgIyBub3FhCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuIGltcG9ydCBydWxlcyAgIyBub3FhCmZyb20gLiBpbXBvcnQgc2l0ZXMgICMgbm9xYQpmcm9tIC4gaW1wb3J0IHRhcmdldHMgICMgbm9xYQo8fGZpbV9lbmR8Pg=="]
["cd58ba6348662143f2584a02dbfaa8df02e5f482-2","cd58ba6348662143f2584a02dbfaa8df02e5f482","PHxmaW1fcHJlZml4fD4KZnJvbSAuIGltcG9ydCBjb25uZWN0b3JzICAjIG5vcWEKZnJvbSAuIGltcG9ydCBlbGVtZW50cyAgIyBub3FhCmZyb20gLiBpbXBvcnQgb3BzICAjIG5vcWEKZnJvbSAuIGltcG9ydCBwbGFucyAgIyBub3FhCmZyb20gLiBpbXBvcnQgcnVsZXMgICMgbm9xYQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gLiBpbXBvcnQgc2l0ZXMgICMgbm9xYQpmcm9tIC4gaW1wb3J0IHRhcmdldHMgICMgbm9xYQo8fGZpbV9lbmR8Pg=="]
["cd58ba6348662143f2584a02dbfaa8df02e5f482-3","cd58ba6348662143f2584a02dbfaa8df02e5f482","PHxmaW1fcHJlZml4fD4KZnJvbSAuIGltcG9ydCBjb25uZWN0b3JzICAjIG5vcWEKZnJvbSAuIGltcG9ydCBlbGVtZW50cyAgIyBub3FhCmZyb20gLiBpbXBvcnQgb3BzICAjIG5vcWEKZnJvbSAuIGltcG9ydCBwbGFucyAgIyBub3FhCmZyb20gLiBpbXBvcnQgcnVsZXMgICMgbm9xYQpmcm9tIC4gaW1wb3J0IHNpdGVzICAjIG5vcWEKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIC4gaW1wb3J0IHRhcmdldHMgICMgbm9xYQo8fGZpbV9lbmR8Pg=="]
["cd58ba6348662143f2584a02dbfaa8df02e5f482-4","cd58ba6348662143f2584a02dbfaa8df02e5f482","PHxmaW1fcHJlZml4fD4KZnJvbSAuIGltcG9ydCBjb25uZWN0b3JzICAjIG5vcWEKZnJvbSAuIGltcG9ydCBlbGVtZW50cyAgIyBub3FhCmZyb20gLiBpbXBvcnQgb3BzICAjIG5vcWEKZnJvbSAuIGltcG9ydCBwbGFucyAgIyBub3FhCmZyb20gLiBpbXBvcnQgcnVsZXMgICMgbm9xYQpmcm9tIC4gaW1wb3J0IHNpdGVzICAjIG5vcWEKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIC4gaW1wb3J0IHRhcmdldHMgICMgbm9xYQo8fGZpbV9lbmR8Pg=="]
["39bc1a02621914f8e5bcac1ab8fe1c6adb5d5bb7-1","39bc1a02621914f8e5bcac1ab8fe1c6adb5d5bb7","PHxmaW1fcHJlZml4fD4KZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgc2VyaWFsaXplcnMKCmZyb20gc2ltcGxlX2RqYW5nb19hcHAuc2ltcGxlYXBwLm1vZGVscyBpbXBvcnQgUGV0Cjx8ZmltX2hvbGV8PgogICAgICAgIG1vZGVsID0gUGV0CiAgICAgICAgZmllbGRzID0gJ19fYWxsX18nCjx8ZmltX3N1ZmZpeHw+CgoKY2xhc3MgUGV0U2VyaWFsaXplcihzZXJpYWxpemVycy5IeXBlcmxpbmtlZE1vZGVsU2VyaWFsaXplcik6CiAgICBjbGFzcyBNZXRhOgo8fGZpbV9lbmR8Pg=="]
["0810c5846ee93e4939b52cdbf095874412da3e8b-1","0810c5846ee93e4939b52cdbf095874412da3e8b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCBtb3RsZXlsb2cubW90bGV5Z2xvYmJlciBhcyBnbG9iYmVyCmNsYXNzIFRlc3RNb3RsZXlHbG9iYmVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiB0ZXN0X2dsb2JiZXIoc2VsZik6CiAgICAgICAgc2FtcGxlcyA9IHsKICAgICAgICAgICAgIioudGhpbmciIDogewogICAgICAgICAgICAgICAgInJlZ2V4IiAgIDogIl4uKlwudGhpbmckIiwKICAgICAgICAgICAgICAgICJtYXRjaGVzIiA6IFsiaGVsbG8udGhpbmciLCAiLnRoaW5nIiwgIkJvcmsudGhpbmciLCJhLmIudGhpbmciXSwKICAgICAgICAgICAgICAgICJtaXNzZXMiICA6IFsiaGVsbG90aGluZyIsICJ0aGluZyIsICJCb3JrdGhpbmciLCAiaGVsbG8udGhpbmcyIiBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkbyoudGhpbmciOiB7CiAgICAgICAgICAgICAgICAicmVnZXgiICA6ICJeZG8uKlwudGhpbmckIiwKICAgICAgICAgICAgICAgICJtYXRjaGVzIjogWyJkb2hlbGxvLnRoaW5nIiwgImRvLnRoaW5nIiwgImRvRE8udGhpbmciLCAiZG8uZ2V0LnRoaW5nIl0sCiAgICAgICAgICAgICAgICAibWlzc2VzIiA6IFsiZG9oZWxsb3RoaW5nIiwgImRvdGhpbmciLCAiRE90aGluZyIsICJEby5nZXQudGhpbmciXQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciBnbG9iIGluIHNhbXBsZXM6CiAgICAgICAgICAgIGV4cFJlZ2V4ID0gc2FtcGxlc1tnbG9iXVsicmVnZXgiXQogICAgICAgICAgICBhY3RSZWdleCA9IGdsb2JiZXIuZ2xvYl90b19yZShnbG9iKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cFJlZ2V4LGFjdFJlZ2V4KQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIG1hdGNoZXMgID0gc2FtcGxlc1tnbG9iXVsibWF0Y2hlcyJdCiAgICAgICAgICAgIGZvciBtIGluIG1hdGNoZXM6CiAgICAgICAgICAgICAgICByZXN1bHQgPSBnbG9iYmVyLnN0cmluZ19tYXRjaGVzX2dsb2IobSxnbG9iKQogICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCxmInttfSBkaWQgbm90IG1hdGNoIHtnbG9ifS4iKQo8fGZpbV9lbmR8Pg=="]
["0810c5846ee93e4939b52cdbf095874412da3e8b-2","0810c5846ee93e4939b52cdbf095874412da3e8b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCBtb3RsZXlsb2cubW90bGV5Z2xvYmJlciBhcyBnbG9iYmVyCmNsYXNzIFRlc3RNb3RsZXlHbG9iYmVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiB0ZXN0X2dsb2JiZXIoc2VsZik6CiAgICAgICAgc2FtcGxlcyA9IHsKICAgICAgICAgICAgIioudGhpbmciIDogewogICAgICAgICAgICAgICAgInJlZ2V4IiAgIDogIl4uKlwudGhpbmckIiwKICAgICAgICAgICAgICAgICJtYXRjaGVzIiA6IFsiaGVsbG8udGhpbmciLCAiLnRoaW5nIiwgIkJvcmsudGhpbmciLCJhLmIudGhpbmciXSwKICAgICAgICAgICAgICAgICJtaXNzZXMiICA6IFsiaGVsbG90aGluZyIsICJ0aGluZyIsICJCb3JrdGhpbmciLCAiaGVsbG8udGhpbmcyIiBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkbyoudGhpbmciOiB7CiAgICAgICAgICAgICAgICAicmVnZXgiICA6ICJeZG8uKlwudGhpbmckIiwKICAgICAgICAgICAgICAgICJtYXRjaGVzIjogWyJkb2hlbGxvLnRoaW5nIiwgImRvLnRoaW5nIiwgImRvRE8udGhpbmciLCAiZG8uZ2V0LnRoaW5nIl0sCiAgICAgICAgICAgICAgICAibWlzc2VzIiA6IFsiZG9oZWxsb3RoaW5nIiwgImRvdGhpbmciLCAiRE90aGluZyIsICJEby5nZXQudGhpbmciXQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciBnbG9iIGluIHNhbXBsZXM6CiAgICAgICAgICAgIGV4cFJlZ2V4ID0gc2FtcGxlc1tnbG9iXVsicmVnZXgiXQogICAgICAgICAgICBhY3RSZWdleCA9IGdsb2JiZXIuZ2xvYl90b19yZShnbG9iKQo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQsZiJ7bX0gZGlkIG5vdCBtYXRjaCB7Z2xvYn0uIikKICAgICAgICAgICAgbWlzc2VzICAgPSBzYW1wbGVzW2dsb2JdWyJtaXNzZXMiXQogICAgICAgICAgICBmb3IgbSBpbiBtaXNzZXM6CiAgICAgICAgICAgICAgICByZXN1bHQgPSBnbG9iYmVyLnN0cmluZ19tYXRjaGVzX2dsb2IobSxnbG9iKQogICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQsZiJ7bX0gdW5leHBlY3RhbnRseSBtYXRjaGVkIHtnbG9ifS4iKQoKaWYgX19uYW1lX189PSdfX21haW5fXyc6CiAgICB1bml0dGVzdC5tYWluKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBSZWdleCxhY3RSZWdleCkKICAgICAgICAgICAgbWF0Y2hlcyAgPSBzYW1wbGVzW2dsb2JdWyJtYXRjaGVzIl0KICAgICAgICAgICAgZm9yIG0gaW4gbWF0Y2hlczoKICAgICAgICAgICAgICAgIHJlc3VsdCA9IGdsb2JiZXIuc3RyaW5nX21hdGNoZXNfZ2xvYihtLGdsb2IpCjx8ZmltX2VuZHw+"]
["0810c5846ee93e4939b52cdbf095874412da3e8b-3","0810c5846ee93e4939b52cdbf095874412da3e8b","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CmltcG9ydCBtb3RsZXlsb2cubW90bGV5Z2xvYmJlciBhcyBnbG9iYmVyCmNsYXNzIFRlc3RNb3RsZXlHbG9iYmVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgIGRlZiB0ZXN0X2dsb2JiZXIoc2VsZik6CiAgICAgICAgc2FtcGxlcyA9IHsKICAgICAgICAgICAgIioudGhpbmciIDogewogICAgICAgICAgICAgICAgInJlZ2V4IiAgIDogIl4uKlwudGhpbmckIiwKICAgICAgICAgICAgICAgICJtYXRjaGVzIiA6IFsiaGVsbG8udGhpbmciLCAiLnRoaW5nIiwgIkJvcmsudGhpbmciLCJhLmIudGhpbmciXSwKICAgICAgICAgICAgICAgICJtaXNzZXMiICA6IFsiaGVsbG90aGluZyIsICJ0aGluZyIsICJCb3JrdGhpbmciLCAiaGVsbG8udGhpbmcyIiBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkbyoudGhpbmciOiB7CiAgICAgICAgICAgICAgICAicmVnZXgiICA6ICJeZG8uKlwudGhpbmckIiwKICAgICAgICAgICAgICAgICJtYXRjaGVzIjogWyJkb2hlbGxvLnRoaW5nIiwgImRvLnRoaW5nIiwgImRvRE8udGhpbmciLCAiZG8uZ2V0LnRoaW5nIl0sCiAgICAgICAgICAgICAgICAibWlzc2VzIiA6IFsiZG9oZWxsb3RoaW5nIiwgImRvdGhpbmciLCAiRE90aGluZyIsICJEby5nZXQudGhpbmciXQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciBnbG9iIGluIHNhbXBsZXM6CiAgICAgICAgICAgIGV4cFJlZ2V4ID0gc2FtcGxlc1tnbG9iXVsicmVnZXgiXQogICAgICAgICAgICBhY3RSZWdleCA9IGdsb2JiZXIuZ2xvYl90b19yZShnbG9iKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cFJlZ2V4LGFjdFJlZ2V4KQo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgbWlzc2VzICAgPSBzYW1wbGVzW2dsb2JdWyJtaXNzZXMiXQogICAgICAgICAgICBmb3IgbSBpbiBtaXNzZXM6CiAgICAgICAgICAgICAgICByZXN1bHQgPSBnbG9iYmVyLnN0cmluZ19tYXRjaGVzX2dsb2IobSxnbG9iKQogICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQsZiJ7bX0gdW5leHBlY3RhbnRseSBtYXRjaGVkIHtnbG9ifS4iKQoKaWYgX19uYW1lX189PSdfX21haW5fXyc6CiAgICB1bml0dGVzdC5tYWluKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgbWF0Y2hlcyAgPSBzYW1wbGVzW2dsb2JdWyJtYXRjaGVzIl0KICAgICAgICAgICAgZm9yIG0gaW4gbWF0Y2hlczoKICAgICAgICAgICAgICAgIHJlc3VsdCA9IGdsb2JiZXIuc3RyaW5nX21hdGNoZXNfZ2xvYihtLGdsb2IpCiAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LGYie219IGRpZCBub3QgbWF0Y2gge2dsb2J9LiIpCjx8ZmltX2VuZHw+"]
["840ce1abe7c7d1ddb570e676a0a4e03161f71f1e-1","840ce1abe7c7d1ddb570e676a0a4e03161f71f1e","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgpjbGFzcyBNb2RpZmllZERDR0FOR2VuZXJhdG9yKG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZGltLCBoLCB3LCBvdXRfZmVhdHVyZXM9MTYsIHpfc2l6ZT0xMjgsIGNvbmRpdGlvbl92ZWN0b3Jfc2l6ZT0wKToKICAgICAgICBzdXBlcihNb2RpZmllZERDR0FOR2VuZXJhdG9yLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi56X3NpemUgPSB6X3NpemUKICAgICAgICBzZWxmLmhfaW4gPSBpbnQoaCAvIDgpCiAgICAgICAgc2VsZi53X2luID0gaW50KHcgLyA4KQogICAgICAgIHNlbGYuaF9taWQgPSBpbnQoaCAvIDQpCiAgICAgICAgc2VsZi53X21pZCA9IGludCh3IC8gNCkKICAgICAgICBzZWxmLmggPSBoCiAgICAgICAgc2VsZi53ID0gdwogICAgICAgIHNlbGYuY29uZGl0aW9uX3ZlY3Rvcl9zaXplID0gY29uZGl0aW9uX3ZlY3Rvcl9zaXplCiAgICAgICAgc2VsZi5jb25kaXRpb25hbCA9IHNlbGYuY29uZGl0aW9uX3ZlY3Rvcl9zaXplID4gMAoKICAgICAgICBzZWxmLm91dF9mZWF0dXJlcyA9IG91dF9mZWF0dXJlcwogICAgICAgIG5vcm1fY2xhc3MgPSBubi5JZGVudGl0eQogICAgICAgIHByZXByb2Nlc3MgPSBubi5TZXF1ZW50aWFsKAogICAgICAgICAgICBubi5MaW5lYXIoc2VsZi56X3NpemUgKyBzZWxmLmNvbmRpdGlvbl92ZWN0b3Jfc2l6ZSwgNCAqIHNlbGYuaF9pbiAqIHNlbGYud19pbiAqIGRpbSksCiAgICAgICAgICAgIG5uLkVMVSgpLAogICAgICAgICkKICAgICAgICBibG9jazEgPSBubi5TZXF1ZW50aWFsKAogICAgICAgICAgICBubi5Db252VHJhbnNwb3NlMmQoNCAqIGRpbSwgMiAqIGRpbSwgMiwgc3RyaWRlPTIpLAogICAgICAgICAgICBub3JtX2NsYXNzKCksCiAgICAgICAgICAgIG5uLlJlTFUoVHJ1ZSksCiAgICAgICAgKQoKICAgICAgICBwcmVwcm9jZXNzXzEgPSBubi5TZXF1ZW50aWFsKAogICAgICAgICAgICBubi5MaW5lYXIoc2VsZi56X3NpemUgKyBzZWxmLmNvbmRpdGlvbl92ZWN0b3Jfc2l6ZSwgMiAqIHNlbGYuaF9taWQgKiBzZWxmLndfbWlkICogZGltKSwKICAgICAgICAgICAgbm4uRUxVKCksCiAgICAgICAgKQogICAgICAgIHNlbGYucHJlcHJvY2Vzc18xID0gcHJlcHJvY2Vzc18xCiAgICAgICAgYmxvY2syID0gbm4uU2VxdWVudGlhbCgKICAgICAgICAgICAgbm4uQ29udlRyYW5zcG9zZTJkKDIgKiBkaW0gKyAyICogZGltLCBkaW0sIDIsIHN0cmlkZT0yLCBwYWRkaW5nPTApLAogICAgICAgICAgICBub3JtX2NsYXNzKCksCiAgICAgICAgICAgIG5uLlJlTFUoVHJ1ZSksCiAgICAgICAgKQoKICAgICAgICBkZWNvbnZfb3V0ID0gbm4uQ29udlRyYW5zcG9zZTJkKGRpbSwgc2VsZi5vdXRfZmVhdHVyZXMsIDIsIHN0cmlkZT0yLCBwYWRkaW5nPTApCgogICAgICAgIHNlbGYub3V0cHV0X2ludGVuc2l0eSA9IG5uLkNvbnYyZChzZWxmLm91dF9mZWF0dXJlcywgMSwga2VybmVsX3NpemU9MSwgc3RyaWRlPTEsIHBhZGRpbmc9MCkKICAgICAgICBzZWxmLmRpbSA9IGRpbQogICAgICAgIHNlbGYuYmxvY2sxID0gYmxvY2sxCiAgICAgICAgc2VsZi5ibG9jazIgPSBibG9jazIKICAgICAgICBzZWxmLmRlY29udl9vdXQgPSBkZWNvbnZfb3V0CiAgICAgICAgc2VsZi5wcmVwcm9jZXNzID0gcHJlcHJvY2VzcwoKICAgICAgICBzZWxmLmVwcyA9IDFlLTYKICAgICAgICBzZWxmLm91dHB1dF9ubCA9IG5uLlNpZ21vaWQoKQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIGlucHV0X3RlbnNvciwgY29uZD1Ob25lKToKICAgICAgICBpZiBzZWxmLmNvbmRpdGlvbmFsOgogICAgICAgICAgICBpbnB1dF90ZW5zb3IgPSB0b3JjaC5jYXQoW2lucHV0X3RlbnNvciwgY29uZF0sIGRpbT0tMSkKICAgICAgICBvdXRwdXQgPSBzZWxmLnByZXByb2Nlc3MoaW5wdXRfdGVuc29yKQogICAgICAgIG91dHB1dCA9IG91dHB1dC52aWV3KC0xLCA0ICogc2VsZi5kaW0sIHNlbGYuaF9pbiwgc2VsZi53X2luKQogICAgICAgIG91dHB1dCA9IHNlbGYuYmxvY2sxKG91dHB1dCkgICMgeDIgOCw4CiAgICAgICAgb3V0cHV0X3ogPSBzZWxmLnByZXByb2Nlc3NfMShpbnB1dF90ZW5zb3IpLnZpZXcoLTEsIDIgKiBzZWxmLmRpbSwgc2VsZi5oX21pZCwgc2VsZi53X21pZCkKICAgICAgICBvdXRwdXQgPSB0b3JjaC5jYXQoW291dHB1dCwgb3V0cHV0X3pdLCBkaW09MSkKICAgICAgICBvdXRwdXQgPSBzZWxmLmJsb2NrMihvdXRwdXQpICAjIHgyIDE2LDE2CiAgICAgICAgb3V0cHV0ID0gc2VsZi5kZWNvbnZfb3V0KG91dHB1dCkKICAgICAgICBvdXRwdXRfaW50ZW5zaXR5ID0gc2VsZi5vdXRwdXRfbmwoc2VsZi5vdXRwdXRfaW50ZW5zaXR5KG91dHB1dCkpCiAgICAgICAgb3V0cHV0ID0gb3V0cHV0X2ludGVuc2l0eQogICAgICAgIHJldHVybiBvdXRwdXQudmlldygtMSwgMSwgc2VsZi5oLCBzZWxmLncpCgoKY2xhc3MgRENHQU5HZW5lcmF0b3Iobm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaW0sIGgsIHcsIG91dF9mZWF0dXJlcz0xNiwgel9zaXplPTEyOCwgY29uZGl0aW9uX3ZlY3Rvcl9zaXplPTApOgogICAgICAgIHN1cGVyKERDR0FOR2VuZXJhdG9yLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi56X3NpemUgPSB6X3NpemUKICAgICAgICBzZWxmLmhfaW4gPSBpbnQoaCAvIDgpCiAgICAgICAgc2VsZi53X2luID0gaW50KHcgLyA4KQogICAgICAgIHNlbGYuaF9taWQgPSBpbnQoaCAvIDQpCiAgICAgICAgc2VsZi53X21pZCA9IGludCh3IC8gNCkKICAgICAgICBzZWxmLmggPSBoCiAgICAgICAgc2VsZi53ID0gdwogICAgICAgIHNlbGYuY29uZGl0aW9uX3ZlY3Rvcl9zaXplID0gY29uZGl0aW9uX3ZlY3Rvcl9zaXplCiAgICAgICAgc2VsZi5jb25kaXRpb25hbCA9IHNlbGYuY29uZGl0aW9uX3ZlY3Rvcl9zaXplID4gMAoKICAgICAgICBzZWxmLm91dF9mZWF0dXJlcyA9IG91dF9mZWF0dXJlcwogICAgICAgIG5vcm1fY2xhc3MgPSBubi5JZGVudGl0eQogICAgICAgIHByZXByb2Nlc3MgPSBubi5TZXF1ZW50aWFsKAogICAgICAgICAgICBubi5MaW5lYXIoc2VsZi56X3NpemUgKyBzZWxmLmNvbmRpdGlvbl92ZWN0b3Jfc2l6ZSwgNCAqIHNlbGYuaF9pbiAqIHNlbGYud19pbiAqIGRpbSksCiAgICAgICAgICAgIG5uLkVMVSgpLAogICAgICAgICkKICAgICAgICBibG9jazEgPSBubi5TZXF1ZW50aWFsKAogICAgICAgICAgICBubi5Db252VHJhbnNwb3NlMmQoNCAqIGRpbSwgMiAqIGRpbSwgKDQsIDQpLCBzdHJpZGU9MiwgcGFkZGluZz0xKSwKICAgICAgICAgICAgbm9ybV9jbGFzcygpLAogICAgICAgICAgICBubi5SZUxVKFRydWUpLAogICAgICAgICkKICAgICAgICBibG9jazIgPSBubi5TZXF1ZW50aWFsKAogICAgICAgICAgICBubi5Db252VHJhbnNwb3NlMmQoMiAqIGRpbSwgZGltLCAoNCwgNCksIHN0cmlkZT0yLCBwYWRkaW5nPTEpLAogICAgICAgICAgICBub3JtX2NsYXNzKCksCiAgICAgICAgICAgIG5uLlJlTFUoVHJ1ZSksCiAgICAgICAgKQogICAgICAgIGRlY29udl9vdXQgPSBubi5Db252VHJhbnNwb3NlMmQoZGltLCBzZWxmLm91dF9mZWF0dXJlcywgKDQsIDQpLCBzdHJpZGU9MiwgcGFkZGluZz0xKQoKICAgICAgICBzZWxmLm91dHB1dF9pbnRlbnNpdHkgPSBubi5Db252MmQoc2VsZi5vdXRfZmVhdHVyZXMsIDEsIGtlcm5lbF9zaXplPTEsIHN0cmlkZT0xLCBwYWRkaW5nPTApCiAgICAgICAgc2VsZi5kaW0gPSBkaW0KICAgICAgICBzZWxmLmJsb2NrMSA9IGJsb2NrMQogICAgICAgIHNlbGYuYmxvY2syID0gYmxvY2syCiAgICAgICAgc2VsZi5kZWNvbnZfb3V0ID0gZGVjb252X291dAogICAgICAgIHNlbGYucHJlcHJvY2VzcyA9IHByZXByb2Nlc3MKICAgICAgICBzZWxmLmVwcyA9IDFlLTYKICAgICAgICBzZWxmLm91dHB1dF9ubCA9IG5uLlNpZ21vaWQoKQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIGlucHV0X3RlbnNvciwgY29uZD1Ob25lKToKICAgICAgICBpZiBzZWxmLmNvbmRpdGlvbmFsOgogICAgICAgICAgICBpbnB1dF90ZW5zb3IgPSB0b3JjaC5jYXQoW2lucHV0X3RlbnNvciwgY29uZF0sIGRpbT0tMSkKICAgICAgICBvdXRwdXQgPSBzZWxmLnByZXByb2Nlc3MoaW5wdXRfdGVuc29yKQogICAgICAgIG91dHB1dCA9IG91dHB1dC52aWV3KC0xLCA0ICogc2VsZi5kaW0sIHNlbGYuaF9pbiwgc2VsZi53X2luKQogICAgICAgIG91dHB1dCA9IHNlbGYuYmxvY2sxKG91dHB1dCkgICMgeDIgOCw4CiAgICAgICAgIyBvdXRwdXRfeiA9IHNlbGYucHJlcHJvY2Vzc18xKGlucHV0X3RlbnNvcikudmlldygtMSwgMiAqIHNlbGYuZGltLCBzZWxmLmhfbWlkLCBzZWxmLndfbWlkKQogICAgICAgICMgb3V0cHV0ID0gdG9yY2guY2F0KFtvdXRwdXQsIG91dHB1dF96XSwgZGltPTEpCiAgICAgICAgb3V0cHV0ID0gc2VsZi5ibG9jazIob3V0cHV0KSAgIyB4MiAxNiwxNgogICAgICAgIG91dHB1dCA9IHNlbGYuZGVjb252X291dChvdXRwdXQpCiAgICAgICAgb3V0cHV0X2ludGVuc2l0eSA9IHNlbGYub3V0cHV0X25sKHNlbGYub3V0cHV0X2ludGVuc2l0eShvdXRwdXQpKQogICAgICAgIG91dHB1dCA9IG91dHB1dF9pbnRlbnNpdHkKICAgICAgICByZXR1cm4gb3V0cHV0LnZpZXcoLTEsIDEsIHNlbGYuaCwgc2VsZi53KQoKCmNsYXNzIERpc2NyaW1pbmF0b3Iobm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaW0sIGgsIHcsIGNvbmRpdGlvbl92ZWN0b3Jfc2l6ZT0wKToKICAgICAgICBzdXBlcihEaXNjcmltaW5hdG9yLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5oID0gaAogICAgICAgIHNlbGYudyA9IHcKICAgICAgICBzZWxmLmhfaW4gPSBpbnQoaCAvIDgpCiAgICAgICAgc2VsZi53X2luID0gaW50KHcgLyA4KQogICAgICAgIHNlbGYuZGltID0gZGltCiAgICAgICAgc2VsZi5jb25kaXRpb25fdmVjdG9yX3NpemUgPSBjb25kaXRpb25fdmVjdG9yX3NpemUKICAgICAgICBzZWxmLmNvbmRpdGlvbmFsID0gc2VsZi5jb25kaXRpb25fdmVjdG9yX3NpemUgPiAwCiAgICAgICAgbWFpbiA9IG5uLlNlcXVlbnRpYWwoCiAgICAgICAgICAgIG5uLkNvbnYyZCgxICsgc2VsZi5jb25kaXRpb25fdmVjdG9yX3NpemUsIGRpbSwgNSwgc3RyaWRlPTIsIHBhZGRpbmc9MiksCgogICAgICAgICAgICBubi5MZWFreVJlTFUoaW5wbGFjZT1UcnVlKSwKICAgICAgICAgICAgbm4uQ29udjJkKGRpbSwgMiAqIGRpbSwgNSwgc3RyaWRlPTIsIHBhZGRpbmc9MiksCgogICAgICAgICAgICBubi5MZWFreVJlTFUoaW5wbGFjZT1UcnVlKSwKICAgICAgICAgICAgbm4uQ29udjJkKDIgKiBkaW0sIDQgKiBkaW0sIDUsIHN0cmlkZT0yLCBwYWRkaW5nPTIpLAoKICAgICAgICAgICAgbm4uTGVha3lSZUxVKGlucGxhY2U9VHJ1ZSksCgogICAgICAgICkKICAgICAgICBzZWxmLm1haW4gPSBtYWluCiAgICAgICAgc2VsZi5vdXRwdXRfc2l6ZSA9ICg0ICogc2VsZi5oX2luICogc2VsZi53X2luICogZGltKQogICAgICAgIHNlbGYub3V0cHV0ID0gbm4uTGluZWFyKHNlbGYub3V0cHV0X3NpemUsIDEpCgogICAgZGVmIGZvcndhcmQoc2VsZiwgaW5wdXQsIGNvbmQ9Tm9uZSk6CiAgICAgICAgaW5wdXQgPSBpbnB1dC52aWV3KC0xLCAxLCBzZWxmLmgsIHNlbGYudykKICAgICAgICBpZiBzZWxmLmNvbmRpdGlvbmFsOgogICAgICAgICAgICBjb25kID0gY29uZC5yZXNoYXBlKFstMSwgc2VsZi5jb25kaXRpb25fdmVjdG9yX3NpemUsIDEsIDFdKQogICAgICAgICAgICBjb25kID0gY29uZC5yZXBlYXQoWzEsIDEsIHNlbGYuaCwgc2VsZi53XSkKICAgICAgICAgICAgaW5wdXQgPSB0b3JjaC5jYXQoW2lucHV0LCBjb25kXSwgZGltPTEpCiAgICAgICAgb3V0ID0gc2VsZi5tYWluKGlucHV0KQogICAgICAgIG91dCA9IG91dC52aWV3KC0xLCA0ICogc2VsZi5oX2luICogc2VsZi53X2luICogc2VsZi5kaW0pCiAgICAgICAgb3V0ID0gc2VsZi5vdXRwdXQob3V0KQogICAgICAgIHJldHVybiBvdXQudmlldygtMSkKCgpjbGFzcyBFbmNvZGVyKG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZGltLCB6X3NpemUsIGgsIHcsIGNvbmRpdGlvbl92ZWN0b3Jfc2l6ZT0wKToKICAgICAgICBzdXBlcihFbmNvZGVyLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5oID0gaAogICAgICAgIHNlbGYudyA9IHcKICAgICAgICBzZWxmLnpfc2l6ZSA9IHpfc2l6ZQogICAgICAgIHNlbGYuaF9pbiA9IGludChoIC8gOCkKICAgICAgICBzZWxmLndfaW4gPSBpbnQodyAvIDgpCiAgICAgICAgc2VsZi5kaW0gPSBkaW0KICAgICAgICBzZWxmLmNvbmRpdGlvbl92ZWN0b3Jfc2l6ZSA9IGNvbmRpdGlvbl92ZWN0b3Jfc2l6ZQogICAgICAgIHNlbGYuY29uZGl0aW9uYWwgPSBzZWxmLmNvbmRpdGlvbl92ZWN0b3Jfc2l6ZSA+IDAKICAgICAgICBtYWluID0gbm4uU2VxdWVudGlhbCgKICAgICAgICAgICAgbm4uQ29udjJkKDEgKyBzZWxmLmNvbmRpdGlvbl92ZWN0b3Jfc2l6ZSwgZGltLCAoNSwgNSksIHN0cmlkZT0oMiwgMiksIHBhZGRpbmc9KDIsIDIpKSwKCiAgICAgICAgICAgIG5uLkxlYWt5UmVMVShpbnBsYWNlPVRydWUpLAogICAgICAgICAgICBubi5Db252MmQoZGltLCAyICogZGltLCAoNSwgNSksIHN0cmlkZT0oMiwgMiksIHBhZGRpbmc9KDIsIDIpKSwKCiAgICAgICAgICAgIG5uLkxlYWt5UmVMVShpbnBsYWNlPVRydWUpLAogICAgICAgICAgICBubi5Db252MmQoMiAqIGRpbSwgNCAqIGRpbSwgKDUsIDUpLCBzdHJpZGU9KDIsIDIpLCBwYWRkaW5nPSgyLCAyKSksCgogICAgICAgICAgICBubi5MZWFreVJlTFUoaW5wbGFjZT1UcnVlKSwKCiAgICAgICAgKQogICAgICAgIHNlbGYubWFpbiA9IG1haW4KICAgICAgICBzZWxmLm91dHB1dF9zaXplID0gKDQgKiBzZWxmLmhfaW4gKiBzZWxmLndfaW4gKiBkaW0pCiAgICAgICAgc2VsZi5vdXRwdXRfbXUgPSBubi5MaW5lYXIoc2VsZi5vdXRwdXRfc2l6ZSwgel9zaXplKQogICAgICAgIHNlbGYub3V0cHV0X2xvZ192YXIgPSBubi5MaW5lYXIoc2VsZi5vdXRwdXRfc2l6ZSwgel9zaXplKQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIGlucHV0LCBjb25kPU5vbmUpOgogICAgICAgIGlucHV0ID0gaW5wdXQudmlldygtMSwgMSwgc2VsZi5oLCBzZWxmLncpCiAgICAgICAgaWYgc2VsZi5jb25kaXRpb25hbDoKICAgICAgICAgICAgY29uZCA9IGNvbmQucmVzaGFwZShbLTEsIHNlbGYuY29uZGl0aW9uX3ZlY3Rvcl9zaXplLCAxLCAxXSkKICAgICAgICAgICAgY29uZCA9IGNvbmQucmVwZWF0KFsxLCAxLCBzZWxmLmgsIHNlbGYud10pCiAgICAgICAgICAgIGlucHV0ID0gdG9yY2guY2F0KFtpbnB1dCwgY29uZF0sIGRpbT0xKQoKICAgICAgICBvdXQgPSBzZWxmLm1haW4oaW5wdXQpCiAgICAgICAgb3V0ID0gb3V0LnZpZXcoLTEsIDQgKiBzZWxmLmhfaW4gKiBzZWxmLndfaW4gKiBzZWxmLmRpbSkKICAgICAgICBvdXRfbXUgPSBzZWxmLm91dHB1dF9tdShvdXQpCiAgICAgICAgb3V0X2xvZ3ZhciA9IHNlbGYub3V0cHV0X2xvZ192YXIob3V0KQogICAgICAgIHJldHVybiBvdXRfbXUudmlldygtMSwgc2VsZi56X3NpemUpLCBvdXRfbG9ndmFyLnZpZXcoLTEsIHNlbGYuel9zaXplKQo8fGZpbV9zdWZmaXh8PgppbXBvcnQgdG9yY2gKZnJvbSB0b3JjaCBpbXBvcnQgbm4KCgo8fGZpbV9lbmR8Pg=="]
["840ce1abe7c7d1ddb570e676a0a4e03161f71f1e-2","840ce1abe7c7d1ddb570e676a0a4e03161f71f1e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCmZyb20gdG9yY2ggaW1wb3J0IG5uCgoKY2xhc3MgTW9kaWZpZWREQ0dBTkdlbmVyYXRvcihubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpbSwgaCwgdywgb3V0X2ZlYXR1cmVzPTE2LCB6X3NpemU9MTI4LCBjb25kaXRpb25fdmVjdG9yX3NpemU9MCk6CiAgICAgICAgc3VwZXIoTW9kaWZpZWREQ0dBTkdlbmVyYXRvciwgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYuel9zaXplID0gel9zaXplCiAgICAgICAgc2VsZi5oX2luID0gaW50KGggLyA4KQogICAgICAgIHNlbGYud19pbiA9IGludCh3IC8gOCkKICAgICAgICBzZWxmLmhfbWlkID0gaW50KGggLyA0KQogICAgICAgIHNlbGYud19taWQgPSBpbnQodyAvIDQpCiAgICAgICAgc2VsZi5oID0gaAogICAgICAgIHNlbGYudyA9IHcKICAgICAgICBzZWxmLmNvbmRpdGlvbl92ZWN0b3Jfc2l6ZSA9IGNvbmRpdGlvbl92ZWN0b3Jfc2l6ZQogICAgICAgIHNlbGYuY29uZGl0aW9uYWwgPSBzZWxmLmNvbmRpdGlvbl92ZWN0b3Jfc2l6ZSA+IDAKCiAgICAgICAgc2VsZi5vdXRfZmVhdHVyZXMgPSBvdXRfZmVhdHVyZXMKICAgICAgICBub3JtX2NsYXNzID0gbm4uSWRlbnRpdHkKICAgICAgICBwcmVwcm9jZXNzID0gbm4uU2VxdWVudGlhbCgKICAgICAgICAgICAgbm4uTGluZWFyKHNlbGYuel9zaXplICsgc2VsZi5jb25kaXRpb25fdmVjdG9yX3NpemUsIDQgKiBzZWxmLmhfaW4gKiBzZWxmLndfaW4gKiBkaW0pLAogICAgICAgICAgICBubi5FTFUoKSwKICAgICAgICApCiAgICAgICAgYmxvY2sxID0gbm4uU2VxdWVudGlhbCgKICAgICAgICAgICAgbm4uQ29udlRyYW5zcG9zZTJkKDQgKiBkaW0sIDIgKiBkaW0sIDIsIHN0cmlkZT0yKSwKICAgICAgICAgICAgbm9ybV9jbGFzcygpLAogICAgICAgICAgICBubi5SZUxVKFRydWUpLAogICAgICAgICkKCiAgICAgICAgcHJlcHJvY2Vzc18xID0gbm4uU2VxdWVudGlhbCgKICAgICAgICAgICAgbm4uTGluZWFyKHNlbGYuel9zaXplICsgc2VsZi5jb25kaXRpb25fdmVjdG9yX3NpemUsIDIgKiBzZWxmLmhfbWlkICogc2VsZi53X21pZCAqIGRpbSksCiAgICAgICAgICAgIG5uLkVMVSgpLAogICAgICAgICkKICAgICAgICBzZWxmLnByZXByb2Nlc3NfMSA9IHByZXByb2Nlc3NfMQogICAgICAgIGJsb2NrMiA9IG5uLlNlcXVlbnRpYWwoCiAgICAgICAgICAgIG5uLkNvbnZUcmFuc3Bvc2UyZCgyICogZGltICsgMiAqIGRpbSwgZGltLCAyLCBzdHJpZGU9MiwgcGFkZGluZz0wKSwKICAgICAgICAgICAgbm9ybV9jbGFzcygpLAogICAgICAgICAgICBubi5SZUxVKFRydWUpLAogICAgICAgICkKCiAgICAgICAgZGVjb252X291dCA9IG5uLkNvbnZUcmFuc3Bvc2UyZChkaW0sIHNlbGYub3V0X2ZlYXR1cmVzLCAyLCBzdHJpZGU9MiwgcGFkZGluZz0wKQoKICAgICAgICBzZWxmLm91dHB1dF9pbnRlbnNpdHkgPSBubi5Db252MmQoc2VsZi5vdXRfZmVhdHVyZXMsIDEsIGtlcm5lbF9zaXplPTEsIHN0cmlkZT0xLCBwYWRkaW5nPTApCiAgICAgICAgc2VsZi5kaW0gPSBkaW0KICAgICAgICBzZWxmLmJsb2NrMSA9IGJsb2NrMQogICAgICAgIHNlbGYuYmxvY2syID0gYmxvY2syCiAgICAgICAgc2VsZi5kZWNvbnZfb3V0ID0gZGVjb252X291dAogICAgICAgIHNlbGYucHJlcHJvY2VzcyA9IHByZXByb2Nlc3MKCiAgICAgICAgc2VsZi5lcHMgPSAxZS02CiAgICAgICAgc2VsZi5vdXRwdXRfbmwgPSBubi5TaWdtb2lkKCkKCiAgICBkZWYgZm9yd2FyZChzZWxmLCBpbnB1dF90ZW5zb3IsIGNvbmQ9Tm9uZSk6CiAgICAgICAgaWYgc2VsZi5jb25kaXRpb25hbDoKICAgICAgICAgICAgaW5wdXRfdGVuc29yID0gdG9yY2guY2F0KFtpbnB1dF90ZW5zb3IsIGNvbmRdLCBkaW09LTEpCiAgICAgICAgb3V0cHV0ID0gc2VsZi5wcmVwcm9jZXNzKGlucHV0X3RlbnNvcikKICAgICAgICBvdXRwdXQgPSBvdXRwdXQudmlldygtMSwgNCAqIHNlbGYuZGltLCBzZWxmLmhfaW4sIHNlbGYud19pbikKICAgICAgICBvdXRwdXQgPSBzZWxmLmJsb2NrMShvdXRwdXQpICAjIHgyIDgsOAogICAgICAgIG91dHB1dF96ID0gc2VsZi5wcmVwcm9jZXNzXzEoaW5wdXRfdGVuc29yKS52aWV3KC0xLCAyICogc2VsZi5kaW0sIHNlbGYuaF9taWQsIHNlbGYud19taWQpCiAgICAgICAgb3V0cHV0ID0gdG9yY2guY2F0KFtvdXRwdXQsIG91dHB1dF96XSwgZGltPTEpCiAgICAgICAgb3V0cHV0ID0gc2VsZi5ibG9jazIob3V0cHV0KSAgIyB4MiAxNiwxNgogICAgICAgIG91dHB1dCA9IHNlbGYuZGVjb252X291dChvdXRwdXQpCiAgICAgICAgb3V0cHV0X2ludGVuc2l0eSA9IHNlbGYub3V0cHV0X25sKHNlbGYub3V0cHV0X2ludGVuc2l0eShvdXRwdXQpKQogICAgICAgIG91dHB1dCA9IG91dHB1dF9pbnRlbnNpdHkKICAgICAgICByZXR1cm4gb3V0cHV0LnZpZXcoLTEsIDEsIHNlbGYuaCwgc2VsZi53KQoKCmNsYXNzIERDR0FOR2VuZXJhdG9yKG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZGltLCBoLCB3LCBvdXRfZmVhdHVyZXM9MTYsIHpfc2l6ZT0xMjgsIGNvbmRpdGlvbl92ZWN0b3Jfc2l6ZT0wKToKICAgICAgICBzdXBlcihEQ0dBTkdlbmVyYXRvciwgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYuel9zaXplID0gel9zaXplCiAgICAgICAgc2VsZi5oX2luID0gaW50KGggLyA4KQogICAgICAgIHNlbGYud19pbiA9IGludCh3IC8gOCkKICAgICAgICBzZWxmLmhfbWlkID0gaW50KGggLyA0KQogICAgICAgIHNlbGYud19taWQgPSBpbnQodyAvIDQpCiAgICAgICAgc2VsZi5oID0gaAogICAgICAgIHNlbGYudyA9IHcKICAgICAgICBzZWxmLmNvbmRpdGlvbl92ZWN0b3Jfc2l6ZSA9IGNvbmRpdGlvbl92ZWN0b3Jfc2l6ZQogICAgICAgIHNlbGYuY29uZGl0aW9uYWwgPSBzZWxmLmNvbmRpdGlvbl92ZWN0b3Jfc2l6ZSA+IDAKCiAgICAgICAgc2VsZi5vdXRfZmVhdHVyZXMgPSBvdXRfZmVhdHVyZXMKICAgICAgICBub3JtX2NsYXNzID0gbm4uSWRlbnRpdHkKICAgICAgICBwcmVwcm9jZXNzID0gbm4uU2VxdWVudGlhbCgKICAgICAgICAgICAgbm4uTGluZWFyKHNlbGYuel9zaXplICsgc2VsZi5jb25kaXRpb25fdmVjdG9yX3NpemUsIDQgKiBzZWxmLmhfaW4gKiBzZWxmLndfaW4gKiBkaW0pLAogICAgICAgICAgICBubi5FTFUoKSwKICAgICAgICApCiAgICAgICAgYmxvY2sxID0gbm4uU2VxdWVudGlhbCgKICAgICAgICAgICAgbm4uQ29udlRyYW5zcG9zZTJkKDQgKiBkaW0sIDIgKiBkaW0sICg0LCA0KSwgc3RyaWRlPTIsIHBhZGRpbmc9MSksCiAgICAgICAgICAgIG5vcm1fY2xhc3MoKSwKICAgICAgICAgICAgbm4uUmVMVShUcnVlKSwKICAgICAgICApCiAgICAgICAgYmxvY2syID0gbm4uU2VxdWVudGlhbCgKICAgICAgICAgICAgbm4uQ29udlRyYW5zcG9zZTJkKDIgKiBkaW0sIGRpbSwgKDQsIDQpLCBzdHJpZGU9MiwgcGFkZGluZz0xKSwKICAgICAgICAgICAgbm9ybV9jbGFzcygpLAogICAgICAgICAgICBubi5SZUxVKFRydWUpLAogICAgICAgICkKICAgICAgICBkZWNvbnZfb3V0ID0gbm4uQ29udlRyYW5zcG9zZTJkKGRpbSwgc2VsZi5vdXRfZmVhdHVyZXMsICg0LCA0KSwgc3RyaWRlPTIsIHBhZGRpbmc9MSkKCiAgICAgICAgc2VsZi5vdXRwdXRfaW50ZW5zaXR5ID0gbm4uQ29udjJkKHNlbGYub3V0X2ZlYXR1cmVzLCAxLCBrZXJuZWxfc2l6ZT0xLCBzdHJpZGU9MSwgcGFkZGluZz0wKQogICAgICAgIHNlbGYuZGltID0gZGltCiAgICAgICAgc2VsZi5ibG9jazEgPSBibG9jazEKICAgICAgICBzZWxmLmJsb2NrMiA9IGJsb2NrMgogICAgICAgIHNlbGYuZGVjb252X291dCA9IGRlY29udl9vdXQKICAgICAgICBzZWxmLnByZXByb2Nlc3MgPSBwcmVwcm9jZXNzCiAgICAgICAgc2VsZi5lcHMgPSAxZS02CiAgICAgICAgc2VsZi5vdXRwdXRfbmwgPSBubi5TaWdtb2lkKCkKCiAgICBkZWYgZm9yd2FyZChzZWxmLCBpbnB1dF90ZW5zb3IsIGNvbmQ9Tm9uZSk6CiAgICAgICAgaWYgc2VsZi5jb25kaXRpb25hbDoKICAgICAgICAgICAgaW5wdXRfdGVuc29yID0gdG9yY2guY2F0KFtpbnB1dF90ZW5zb3IsIGNvbmRdLCBkaW09LTEpCiAgICAgICAgb3V0cHV0ID0gc2VsZi5wcmVwcm9jZXNzKGlucHV0X3RlbnNvcikKICAgICAgICBvdXRwdXQgPSBvdXRwdXQudmlldygtMSwgNCAqIHNlbGYuZGltLCBzZWxmLmhfaW4sIHNlbGYud19pbikKICAgICAgICBvdXRwdXQgPSBzZWxmLmJsb2NrMShvdXRwdXQpICAjIHgyIDgsOAogICAgICAgICMgb3V0cHV0X3ogPSBzZWxmLnByZXByb2Nlc3NfMShpbnB1dF90ZW5zb3IpLnZpZXcoLTEsIDIgKiBzZWxmLmRpbSwgc2VsZi5oX21pZCwgc2VsZi53X21pZCkKICAgICAgICAjIG91dHB1dCA9IHRvcmNoLmNhdChbb3V0cHV0LCBvdXRwdXRfel0sIGRpbT0xKQogICAgICAgIG91dHB1dCA9IHNlbGYuYmxvY2syKG91dHB1dCkgICMgeDIgMTYsMTYKICAgICAgICBvdXRwdXQgPSBzZWxmLmRlY29udl9vdXQob3V0cHV0KQogICAgICAgIG91dHB1dF9pbnRlbnNpdHkgPSBzZWxmLm91dHB1dF9ubChzZWxmLm91dHB1dF9pbnRlbnNpdHkob3V0cHV0KSkKICAgICAgICBvdXRwdXQgPSBvdXRwdXRfaW50ZW5zaXR5CiAgICAgICAgcmV0dXJuIG91dHB1dC52aWV3KC0xLCAxLCBzZWxmLmgsIHNlbGYudykKCgpjbGFzcyBEaXNjcmltaW5hdG9yKG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZGltLCBoLCB3LCBjb25kaXRpb25fdmVjdG9yX3NpemU9MCk6CiAgICAgICAgc3VwZXIoRGlzY3JpbWluYXRvciwgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYuaCA9IGgKICAgICAgICBzZWxmLncgPSB3CiAgICAgICAgc2VsZi5oX2luID0gaW50KGggLyA4KQogICAgICAgIHNlbGYud19pbiA9IGludCh3IC8gOCkKICAgICAgICBzZWxmLmRpbSA9IGRpbQogICAgICAgIHNlbGYuY29uZGl0aW9uX3ZlY3Rvcl9zaXplID0gY29uZGl0aW9uX3ZlY3Rvcl9zaXplCiAgICAgICAgc2VsZi5jb25kaXRpb25hbCA9IHNlbGYuY29uZGl0aW9uX3ZlY3Rvcl9zaXplID4gMAogICAgICAgIG1haW4gPSBubi5TZXF1ZW50aWFsKAogICAgICAgICAgICBubi5Db252MmQoMSArIHNlbGYuY29uZGl0aW9uX3ZlY3Rvcl9zaXplLCBkaW0sIDUsIHN0cmlkZT0yLCBwYWRkaW5nPTIpLAoKICAgICAgICAgICAgbm4uTGVha3lSZUxVKGlucGxhY2U9VHJ1ZSksCiAgICAgICAgICAgIG5uLkNvbnYyZChkaW0sIDIgKiBkaW0sIDUsIHN0cmlkZT0yLCBwYWRkaW5nPTIpLAoKICAgICAgICAgICAgbm4uTGVha3lSZUxVKGlucGxhY2U9VHJ1ZSksCiAgICAgICAgICAgIG5uLkNvbnYyZCgyICogZGltLCA0ICogZGltLCA1LCBzdHJpZGU9MiwgcGFkZGluZz0yKSwKCiAgICAgICAgICAgIG5uLkxlYWt5UmVMVShpbnBsYWNlPVRydWUpLAoKICAgICAgICApCiAgICAgICAgc2VsZi5tYWluID0gbWFpbgogICAgICAgIHNlbGYub3V0cHV0X3NpemUgPSAoNCAqIHNlbGYuaF9pbiAqIHNlbGYud19pbiAqIGRpbSkKICAgICAgICBzZWxmLm91dHB1dCA9IG5uLkxpbmVhcihzZWxmLm91dHB1dF9zaXplLCAxKQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIGlucHV0LCBjb25kPU5vbmUpOgogICAgICAgIGlucHV0ID0gaW5wdXQudmlldygtMSwgMSwgc2VsZi5oLCBzZWxmLncpCiAgICAgICAgaWYgc2VsZi5jb25kaXRpb25hbDoKICAgICAgICAgICAgY29uZCA9IGNvbmQucmVzaGFwZShbLTEsIHNlbGYuY29uZGl0aW9uX3ZlY3Rvcl9zaXplLCAxLCAxXSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBjb25kID0gY29uZC5yZXBlYXQoWzEsIDEsIHNlbGYuaCwgc2VsZi53XSkKICAgICAgICAgICAgaW5wdXQgPSB0b3JjaC5jYXQoW2lucHV0LCBjb25kXSwgZGltPTEpCjx8ZmltX2VuZHw+"]
["840ce1abe7c7d1ddb570e676a0a4e03161f71f1e-3","840ce1abe7c7d1ddb570e676a0a4e03161f71f1e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRvcmNoCmZyb20gdG9yY2ggaW1wb3J0IG5uCgoKY2xhc3MgTW9kaWZpZWREQ0dBTkdlbmVyYXRvcihubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpbSwgaCwgdywgb3V0X2ZlYXR1cmVzPTE2LCB6X3NpemU9MTI4LCBjb25kaXRpb25fdmVjdG9yX3NpemU9MCk6CiAgICAgICAgc3VwZXIoTW9kaWZpZWREQ0dBTkdlbmVyYXRvciwgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYuel9zaXplID0gel9zaXplCiAgICAgICAgc2VsZi5oX2luID0gaW50KGggLyA4KQogICAgICAgIHNlbGYud19pbiA9IGludCh3IC8gOCkKICAgICAgICBzZWxmLmhfbWlkID0gaW50KGggLyA0KQogICAgICAgIHNlbGYud19taWQgPSBpbnQodyAvIDQpCiAgICAgICAgc2VsZi5oID0gaAogICAgICAgIHNlbGYudyA9IHcKICAgICAgICBzZWxmLmNvbmRpdGlvbl92ZWN0b3Jfc2l6ZSA9IGNvbmRpdGlvbl92ZWN0b3Jfc2l6ZQogICAgICAgIHNlbGYuY29uZGl0aW9uYWwgPSBzZWxmLmNvbmRpdGlvbl92ZWN0b3Jfc2l6ZSA+IDAKCiAgICAgICAgc2VsZi5vdXRfZmVhdHVyZXMgPSBvdXRfZmVhdHVyZXMKICAgICAgICBub3JtX2NsYXNzID0gbm4uSWRlbnRpdHkKICAgICAgICBwcmVwcm9jZXNzID0gbm4uU2VxdWVudGlhbCgKICAgICAgICAgICAgbm4uTGluZWFyKHNlbGYuel9zaXplICsgc2VsZi5jb25kaXRpb25fdmVjdG9yX3NpemUsIDQgKiBzZWxmLmhfaW4gKiBzZWxmLndfaW4gKiBkaW0pLAogICAgICAgICAgICBubi5FTFUoKSwKICAgICAgICApCiAgICAgICAgYmxvY2sxID0gbm4uU2VxdWVudGlhbCgKICAgICAgICAgICAgbm4uQ29udlRyYW5zcG9zZTJkKDQgKiBkaW0sIDIgKiBkaW0sIDIsIHN0cmlkZT0yKSwKICAgICAgICAgICAgbm9ybV9jbGFzcygpLAogICAgICAgICAgICBubi5SZUxVKFRydWUpLAogICAgICAgICkKCiAgICAgICAgcHJlcHJvY2Vzc18xID0gbm4uU2VxdWVudGlhbCgKICAgICAgICAgICAgbm4uTGluZWFyKHNlbGYuel9zaXplICsgc2VsZi5jb25kaXRpb25fdmVjdG9yX3NpemUsIDIgKiBzZWxmLmhfbWlkICogc2VsZi53X21pZCAqIGRpbSksCiAgICAgICAgICAgIG5uLkVMVSgpLAogICAgICAgICkKICAgICAgICBzZWxmLnByZXByb2Nlc3NfMSA9IHByZXByb2Nlc3NfMQogICAgICAgIGJsb2NrMiA9IG5uLlNlcXVlbnRpYWwoCiAgICAgICAgICAgIG5uLkNvbnZUcmFuc3Bvc2UyZCgyICogZGltICsgMiAqIGRpbSwgZGltLCAyLCBzdHJpZGU9MiwgcGFkZGluZz0wKSwKICAgICAgICAgICAgbm9ybV9jbGFzcygpLAogICAgICAgICAgICBubi5SZUxVKFRydWUpLAogICAgICAgICkKCiAgICAgICAgZGVjb252X291dCA9IG5uLkNvbnZUcmFuc3Bvc2UyZChkaW0sIHNlbGYub3V0X2ZlYXR1cmVzLCAyLCBzdHJpZGU9MiwgcGFkZGluZz0wKQoKICAgICAgICBzZWxmLm91dHB1dF9pbnRlbnNpdHkgPSBubi5Db252MmQoc2VsZi5vdXRfZmVhdHVyZXMsIDEsIGtlcm5lbF9zaXplPTEsIHN0cmlkZT0xLCBwYWRkaW5nPTApCiAgICAgICAgc2VsZi5kaW0gPSBkaW0KICAgICAgICBzZWxmLmJsb2NrMSA9IGJsb2NrMQogICAgICAgIHNlbGYuYmxvY2syID0gYmxvY2syCiAgICAgICAgc2VsZi5kZWNvbnZfb3V0ID0gZGVjb252X291dAogICAgICAgIHNlbGYucHJlcHJvY2VzcyA9IHByZXByb2Nlc3MKCiAgICAgICAgc2VsZi5lcHMgPSAxZS02CiAgICAgICAgc2VsZi5vdXRwdXRfbmwgPSBubi5TaWdtb2lkKCkKCiAgICBkZWYgZm9yd2FyZChzZWxmLCBpbnB1dF90ZW5zb3IsIGNvbmQ9Tm9uZSk6CiAgICAgICAgaWYgc2VsZi5jb25kaXRpb25hbDoKICAgICAgICAgICAgaW5wdXRfdGVuc29yID0gdG9yY2guY2F0KFtpbnB1dF90ZW5zb3IsIGNvbmRdLCBkaW09LTEpCiAgICAgICAgb3V0cHV0ID0gc2VsZi5wcmVwcm9jZXNzKGlucHV0X3RlbnNvcikKICAgICAgICBvdXRwdXQgPSBvdXRwdXQudmlldygtMSwgNCAqIHNlbGYuZGltLCBzZWxmLmhfaW4sIHNlbGYud19pbikKICAgICAgICBvdXRwdXQgPSBzZWxmLmJsb2NrMShvdXRwdXQpICAjIHgyIDgsOAogICAgICAgIG91dHB1dF96ID0gc2VsZi5wcmVwcm9jZXNzXzEoaW5wdXRfdGVuc29yKS52aWV3KC0xLCAyICogc2VsZi5kaW0sIHNlbGYuaF9taWQsIHNlbGYud19taWQpCiAgICAgICAgb3V0cHV0ID0gdG9yY2guY2F0KFtvdXRwdXQsIG91dHB1dF96XSwgZGltPTEpCiAgICAgICAgb3V0cHV0ID0gc2VsZi5ibG9jazIob3V0cHV0KSAgIyB4MiAxNiwxNgogICAgICAgIG91dHB1dCA9IHNlbGYuZGVjb252X291dChvdXRwdXQpCiAgICAgICAgb3V0cHV0X2ludGVuc2l0eSA9IHNlbGYub3V0cHV0X25sKHNlbGYub3V0cHV0X2ludGVuc2l0eShvdXRwdXQpKQogICAgICAgIG91dHB1dCA9IG91dHB1dF9pbnRlbnNpdHkKICAgICAgICByZXR1cm4gb3V0cHV0LnZpZXcoLTEsIDEsIHNlbGYuaCwgc2VsZi53KQoKCmNsYXNzIERDR0FOR2VuZXJhdG9yKG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZGltLCBoLCB3LCBvdXRfZmVhdHVyZXM9MTYsIHpfc2l6ZT0xMjgsIGNvbmRpdGlvbl92ZWN0b3Jfc2l6ZT0wKToKICAgICAgICBzdXBlcihEQ0dBTkdlbmVyYXRvciwgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYuel9zaXplID0gel9zaXplCiAgICAgICAgc2VsZi5oX2luID0gaW50KGggLyA4KQogICAgICAgIHNlbGYud19pbiA9IGludCh3IC8gOCkKICAgICAgICBzZWxmLmhfbWlkID0gaW50KGggLyA0KQogICAgICAgIHNlbGYud19taWQgPSBpbnQodyAvIDQpCiAgICAgICAgc2VsZi5oID0gaAogICAgICAgIHNlbGYudyA9IHcKICAgICAgICBzZWxmLmNvbmRpdGlvbl92ZWN0b3Jfc2l6ZSA9IGNvbmRpdGlvbl92ZWN0b3Jfc2l6ZQogICAgICAgIHNlbGYuY29uZGl0aW9uYWwgPSBzZWxmLmNvbmRpdGlvbl92ZWN0b3Jfc2l6ZSA+IDAKCiAgICAgICAgc2VsZi5vdXRfZmVhdHVyZXMgPSBvdXRfZmVhdHVyZXMKICAgICAgICBub3JtX2NsYXNzID0gbm4uSWRlbnRpdHkKICAgICAgICBwcmVwcm9jZXNzID0gbm4uU2VxdWVudGlhbCgKICAgICAgICAgICAgbm4uTGluZWFyKHNlbGYuel9zaXplICsgc2VsZi5jb25kaXRpb25fdmVjdG9yX3NpemUsIDQgKiBzZWxmLmhfaW4gKiBzZWxmLndfaW4gKiBkaW0pLAogICAgICAgICAgICBubi5FTFUoKSwKICAgICAgICApCiAgICAgICAgYmxvY2sxID0gbm4uU2VxdWVudGlhbCgKICAgICAgICAgICAgbm4uQ29udlRyYW5zcG9zZTJkKDQgKiBkaW0sIDIgKiBkaW0sICg0LCA0KSwgc3RyaWRlPTIsIHBhZGRpbmc9MSksCiAgICAgICAgICAgIG5vcm1fY2xhc3MoKSwKICAgICAgICAgICAgbm4uUmVMVShUcnVlKSwKICAgICAgICApCiAgICAgICAgYmxvY2syID0gbm4uU2VxdWVudGlhbCgKICAgICAgICAgICAgbm4uQ29udlRyYW5zcG9zZTJkKDIgKiBkaW0sIGRpbSwgKDQsIDQpLCBzdHJpZGU9MiwgcGFkZGluZz0xKSwKICAgICAgICAgICAgbm9ybV9jbGFzcygpLAogICAgICAgICAgICBubi5SZUxVKFRydWUpLAogICAgICAgICkKICAgICAgICBkZWNvbnZfb3V0ID0gbm4uQ29udlRyYW5zcG9zZTJkKGRpbSwgc2VsZi5vdXRfZmVhdHVyZXMsICg0LCA0KSwgc3RyaWRlPTIsIHBhZGRpbmc9MSkKCiAgICAgICAgc2VsZi5vdXRwdXRfaW50ZW5zaXR5ID0gbm4uQ29udjJkKHNlbGYub3V0X2ZlYXR1cmVzLCAxLCBrZXJuZWxfc2l6ZT0xLCBzdHJpZGU9MSwgcGFkZGluZz0wKQogICAgICAgIHNlbGYuZGltID0gZGltCiAgICAgICAgc2VsZi5ibG9jazEgPSBibG9jazEKICAgICAgICBzZWxmLmJsb2NrMiA9IGJsb2NrMgogICAgICAgIHNlbGYuZGVjb252X291dCA9IGRlY29udl9vdXQKICAgICAgICBzZWxmLnByZXByb2Nlc3MgPSBwcmVwcm9jZXNzCiAgICAgICAgc2VsZi5lcHMgPSAxZS02CiAgICAgICAgc2VsZi5vdXRwdXRfbmwgPSBubi5TaWdtb2lkKCkKCiAgICBkZWYgZm9yd2FyZChzZWxmLCBpbnB1dF90ZW5zb3IsIGNvbmQ9Tm9uZSk6CiAgICAgICAgaWYgc2VsZi5jb25kaXRpb25hbDoKICAgICAgICAgICAgaW5wdXRfdGVuc29yID0gdG9yY2guY2F0KFtpbnB1dF90ZW5zb3IsIGNvbmRdLCBkaW09LTEpCiAgICAgICAgb3V0cHV0ID0gc2VsZi5wcmVwcm9jZXNzKGlucHV0X3RlbnNvcikKICAgICAgICBvdXRwdXQgPSBvdXRwdXQudmlldygtMSwgNCAqIHNlbGYuZGltLCBzZWxmLmhfaW4sIHNlbGYud19pbikKICAgICAgICBvdXRwdXQgPSBzZWxmLmJsb2NrMShvdXRwdXQpICAjIHgyIDgsOAogICAgICAgICMgb3V0cHV0X3ogPSBzZWxmLnByZXByb2Nlc3NfMShpbnB1dF90ZW5zb3IpLnZpZXcoLTEsIDIgKiBzZWxmLmRpbSwgc2VsZi5oX21pZCwgc2VsZi53X21pZCkKICAgICAgICAjIG91dHB1dCA9IHRvcmNoLmNhdChbb3V0cHV0LCBvdXRwdXRfel0sIGRpbT0xKQogICAgICAgIG91dHB1dCA9IHNlbGYuYmxvY2syKG91dHB1dCkgICMgeDIgMTYsMTYKICAgICAgICBvdXRwdXQgPSBzZWxmLmRlY29udl9vdXQob3V0cHV0KQogICAgICAgIG91dHB1dF9pbnRlbnNpdHkgPSBzZWxmLm91dHB1dF9ubChzZWxmLm91dHB1dF9pbnRlbnNpdHkob3V0cHV0KSkKICAgICAgICBvdXRwdXQgPSBvdXRwdXRfaW50ZW5zaXR5CiAgICAgICAgcmV0dXJuIG91dHB1dC52aWV3KC0xLCAxLCBzZWxmLmgsIHNlbGYudykKCgpjbGFzcyBEaXNjcmltaW5hdG9yKG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZGltLCBoLCB3LCBjb25kaXRpb25fdmVjdG9yX3NpemU9MCk6CiAgICAgICAgc3VwZXIoRGlzY3JpbWluYXRvciwgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYuaCA9IGgKICAgICAgICBzZWxmLncgPSB3CiAgICAgICAgc2VsZi5oX2luID0gaW50KGggLyA4KQogICAgICAgIHNlbGYud19pbiA9IGludCh3IC8gOCkKICAgICAgICBzZWxmLmRpbSA9IGRpbQogICAgICAgIHNlbGYuY29uZGl0aW9uX3ZlY3Rvcl9zaXplID0gY29uZGl0aW9uX3ZlY3Rvcl9zaXplCiAgICAgICAgc2VsZi5jb25kaXRpb25hbCA9IHNlbGYuY29uZGl0aW9uX3ZlY3Rvcl9zaXplID4gMAogICAgICAgIG1haW4gPSBubi5TZXF1ZW50aWFsKAogICAgICAgICAgICBubi5Db252MmQoMSArIHNlbGYuY29uZGl0aW9uX3ZlY3Rvcl9zaXplLCBkaW0sIDUsIHN0cmlkZT0yLCBwYWRkaW5nPTIpLAoKICAgICAgICAgICAgbm4uTGVha3lSZUxVKGlucGxhY2U9VHJ1ZSksCiAgICAgICAgICAgIG5uLkNvbnYyZChkaW0sIDIgKiBkaW0sIDUsIHN0cmlkZT0yLCBwYWRkaW5nPTIpLAoKICAgICAgICAgICAgbm4uTGVha3lSZUxVKGlucGxhY2U9VHJ1ZSksCiAgICAgICAgICAgIG5uLkNvbnYyZCgyICogZGltLCA0ICogZGltLCA1LCBzdHJpZGU9MiwgcGFkZGluZz0yKSwKCiAgICAgICAgICAgIG5uLkxlYWt5UmVMVShpbnBsYWNlPVRydWUpLAoKICAgICAgICApCiAgICAgICAgc2VsZi5tYWluID0gbWFpbgogICAgICAgIHNlbGYub3V0cHV0X3NpemUgPSAoNCAqIHNlbGYuaF9pbiAqIHNlbGYud19pbiAqIGRpbSkKICAgICAgICBzZWxmLm91dHB1dCA9IG5uLkxpbmVhcihzZWxmLm91dHB1dF9zaXplLCAxKQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIGlucHV0LCBjb25kPU5vbmUpOgogICAgICAgIGlucHV0ID0gaW5wdXQudmlldygtMSwgMSwgc2VsZi5oLCBzZWxmLncpCiAgICAgICAgaWYgc2VsZi5jb25kaXRpb25hbDoKICAgICAgICAgICAgY29uZCA9IGNvbmQucmVzaGFwZShbLTEsIHNlbGYuY29uZGl0aW9uX3ZlY3Rvcl9zaXplLCAxLCAxXSkKICAgICAgICAgICAgY29uZCA9IGNvbmQucmVwZWF0KFsxLCAxLCBzZWxmLmgsIHNlbGYud10pCiAgICAgICAgICAgIGlucHV0ID0gdG9yY2guY2F0KFtpbnB1dCwgY29uZF0sIGRpbT0xKQogICAgICAgIG91dCA9IHNlbGYubWFpbihpbnB1dCkKICAgICAgICBvdXQgPSBvdXQudmlldygtMSwgNCAqIHNlbGYuaF9pbiAqIHNlbGYud19pbiAqIHNlbGYuZGltKQogICAgICAgIG91dCA9IHNlbGYub3V0cHV0KG91dCkKICAgICAgICByZXR1cm4gb3V0LnZpZXcoLTEpCgoKY2xhc3MgRW5jb2Rlcihubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpbSwgel9zaXplLCBoLCB3LCBjb25kaXRpb25fdmVjdG9yX3NpemU9MCk6CiAgICAgICAgc3VwZXIoRW5jb2Rlciwgc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYuaCA9IGgKICAgICAgICBzZWxmLncgPSB3CiAgICAgICAgc2VsZi56X3NpemUgPSB6X3NpemUKICAgICAgICBzZWxmLmhfaW4gPSBpbnQoaCAvIDgpCiAgICAgICAgc2VsZi53X2luID0gaW50KHcgLyA4KQo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgbm4uQ29udjJkKDEgKyBzZWxmLmNvbmRpdGlvbl92ZWN0b3Jfc2l6ZSwgZGltLCAoNSwgNSksIHN0cmlkZT0oMiwgMiksIHBhZGRpbmc9KDIsIDIpKSwKCiAgICAgICAgICAgIG5uLkxlYWt5UmVMVShpbnBsYWNlPVRydWUpLAogICAgICAgICAgICBubi5Db252MmQoZGltLCAyICogZGltLCAoNSwgNSksIHN0cmlkZT0oMiwgMiksIHBhZGRpbmc9KDIsIDIpKSwKCiAgICAgICAgICAgIG5uLkxlYWt5UmVMVShpbnBsYWNlPVRydWUpLAogICAgICAgICAgICBubi5Db252MmQoMiAqIGRpbSwgNCAqIGRpbSwgKDUsIDUpLCBzdHJpZGU9KDIsIDIpLCBwYWRkaW5nPSgyLCAyKSksCgogICAgICAgICAgICBubi5MZWFreVJlTFUoaW5wbGFjZT1UcnVlKSwKCiAgICAgICAgKQogICAgICAgIHNlbGYubWFpbiA9IG1haW4KICAgICAgICBzZWxmLm91dHB1dF9zaXplID0gKDQgKiBzZWxmLmhfaW4gKiBzZWxmLndfaW4gKiBkaW0pCiAgICAgICAgc2VsZi5vdXRwdXRfbXUgPSBubi5MaW5lYXIoc2VsZi5vdXRwdXRfc2l6ZSwgel9zaXplKQogICAgICAgIHNlbGYub3V0cHV0X2xvZ192YXIgPSBubi5MaW5lYXIoc2VsZi5vdXRwdXRfc2l6ZSwgel9zaXplKQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIGlucHV0LCBjb25kPU5vbmUpOgogICAgICAgIGlucHV0ID0gaW5wdXQudmlldygtMSwgMSwgc2VsZi5oLCBzZWxmLncpCiAgICAgICAgaWYgc2VsZi5jb25kaXRpb25hbDoKICAgICAgICAgICAgY29uZCA9IGNvbmQucmVzaGFwZShbLTEsIHNlbGYuY29uZGl0aW9uX3ZlY3Rvcl9zaXplLCAxLCAxXSkKICAgICAgICAgICAgY29uZCA9IGNvbmQucmVwZWF0KFsxLCAxLCBzZWxmLmgsIHNlbGYud10pCiAgICAgICAgICAgIGlucHV0ID0gdG9yY2guY2F0KFtpbnB1dCwgY29uZF0sIGRpbT0xKQoKICAgICAgICBvdXQgPSBzZWxmLm1haW4oaW5wdXQpCiAgICAgICAgb3V0ID0gb3V0LnZpZXcoLTEsIDQgKiBzZWxmLmhfaW4gKiBzZWxmLndfaW4gKiBzZWxmLmRpbSkKICAgICAgICBvdXRfbXUgPSBzZWxmLm91dHB1dF9tdShvdXQpCiAgICAgICAgb3V0X2xvZ3ZhciA9IHNlbGYub3V0cHV0X2xvZ192YXIob3V0KQogICAgICAgIHJldHVybiBvdXRfbXUudmlldygtMSwgc2VsZi56X3NpemUpLCBvdXRfbG9ndmFyLnZpZXcoLTEsIHNlbGYuel9zaXplKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuZGltID0gZGltCiAgICAgICAgc2VsZi5jb25kaXRpb25fdmVjdG9yX3NpemUgPSBjb25kaXRpb25fdmVjdG9yX3NpemUKICAgICAgICBzZWxmLmNvbmRpdGlvbmFsID0gc2VsZi5jb25kaXRpb25fdmVjdG9yX3NpemUgPiAwCiAgICAgICAgbWFpbiA9IG5uLlNlcXVlbnRpYWwoCjx8ZmltX2VuZHw+"]
["f8c0de20cb3da337cd9fe17296a1a00b1e3d7fef-1","f8c0de20cb3da337cd9fe17296a1a00b1e3d7fef","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMSBBeGlzIENvbW11bmljYXRpb25zIEFCLgojCiMgRm9yIGEgZnVsbCBsaXN0IG9mIGluZGl2aWR1YWwgY29udHJpYnV0b3JzLCBwbGVhc2Ugc2VlIHRoZSBjb21taXQgaGlzdG9yeS4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIiIiRmFrZSBjZWxlcnkgbGlicmFyeSBoZWxwZXJzLiIiIgoKCmNsYXNzIEZha2VDZWxlcnlSZXN1bHQ6CiAgICAiIiJGYWtlIEFzeW5jUmVzdWx0IGZvciBjZWxlcnkuIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXR1cywgcmVzdWx0LCB0YXNrX2lkLCBmYWtlX2FwcCk6CiAgICAgICAgIiIiSW5pdCB3aXRoIGEgY2VsZXJ5IHN0YXR1cyBhbmQgYSByZXN1bHQgZGljdGlvbmFyeS4iIiIKICAgICAgICBzZWxmLnN0YXR1cyA9IHN0YXR1cwogICAgICAgIHNlbGYucmVzdWx0ID0gcmVzdWx0CiAgICAgICAgc2VsZi50YXNrX2lkID0gdGFza19pZAogICAgICAgIHNlbGYuZmFrZV9hcHAgPSBmYWtlX2FwcAoKICAgIGRlZiBmb3JnZXQoc2VsZik6CiAgICAgICAgIiIiRm9yZ2V0IGEgcmVzdWx0LiIiIgogICAgICAgIHNlbGYuZmFrZV9hcHAucmVzdWx0cy5wb3Aoc2VsZi50YXNrX2lkKQoKICAgIGRlZiBnZXQoc2VsZik6CiAgICAgICAgIiIiR2V0IGEgcmVzdWx0LiIiIgogICAgICAgIHNlbGYuZmFrZV9hcHAucmVjZWl2ZWQuYXBwZW5kKHNlbGYudGFza19pZCkKCgpjbGFzcyBUYXNrOiAgIyBweWxpbnQ6ZGlzYWJsZT10b28tZmV3LXB1YmxpYy1tZXRob2RzCiAgICAiIiJGYWtlIHRhc2suIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhc2tfaWQpOgogICAgICAgICIiIkZha2UgdGFzay4iIiIKICAgICAgICAjIHB5bGludDpkaXNhYmxlPWludmFsaWQtbmFtZQo8fGZpbV9ob2xlfD4KY2xhc3MgRmFrZUNlbGVyeTogICMgcHlsaW50OmRpc2FibGU9dG9vLWZldy1wdWJsaWMtbWV0aG9kcwogICAgIiIiQSBmYWtlIGNlbGVyeSBhcHBsaWNhdGlvbi4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgdGFza19pZCwgc3RhdHVzLCByZXN1bHQpOgogICAgICAgICIiIkluaXQgd2l0aCBhIHRhc2tfaWQgc3RhdHVzIGFuZCBhIHJlc3VsdCBkaWN0aW9uYXJ5LgoKICAgICAgICBUaGUgcmVzdWx0cyBkaWN0aW9uYXJ5IGNyZWF0ZWQgYWZ0ZXIgaW5pdCBjYW4gYmUgYXBwZW5kZWQKICAgICAgICBhZnRlciB0aGUgZmFjdCBpZiBuZWNlc3NhcnkuCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5yZWNlaXZlZCA9IFtdCiAgICAgICAgc2VsZi5yZXN1bHRzID0ge3Rhc2tfaWQ6IEZha2VDZWxlcnlSZXN1bHQoc3RhdHVzLCByZXN1bHQsIHRhc2tfaWQsIHNlbGYpfQoKICAgICMgcHlsaW50OmRpc2FibGU9aW52YWxpZC1uYW1lCiAgICBkZWYgQXN5bmNSZXN1bHQoc2VsZiwgdGFza19pZCk6CiAgICAgICAgIiIiR2V0IHRoZSByZXN1bHRzIG9mIGEgc3BlY2lmaWMgdGFzayBJRC4iIiIKICAgICAgICByZXR1cm4gc2VsZi5yZXN1bHRzLmdldCh0YXNrX2lkKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYuaWQgPSB0YXNrX2lkCgoKPHxmaW1fZW5kfD4="]
["f8c0de20cb3da337cd9fe17296a1a00b1e3d7fef-2","f8c0de20cb3da337cd9fe17296a1a00b1e3d7fef","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMSBBeGlzIENvbW11bmljYXRpb25zIEFCLgojCiMgRm9yIGEgZnVsbCBsaXN0IG9mIGluZGl2aWR1YWwgY29udHJpYnV0b3JzLCBwbGVhc2Ugc2VlIHRoZSBjb21taXQgaGlzdG9yeS4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoiIiJGYWtlIGNlbGVyeSBsaWJyYXJ5IGhlbHBlcnMuIiIiCgoKPHxmaW1fZW5kfD4="]
["f8c0de20cb3da337cd9fe17296a1a00b1e3d7fef-3","f8c0de20cb3da337cd9fe17296a1a00b1e3d7fef","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMSBBeGlzIENvbW11bmljYXRpb25zIEFCLgojCiMgRm9yIGEgZnVsbCBsaXN0IG9mIGluZGl2aWR1YWwgY29udHJpYnV0b3JzLCBwbGVhc2Ugc2VlIHRoZSBjb21taXQgaGlzdG9yeS4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCjx8ZmltX2VuZHw+"]
["4b3bb42e2498b36c65c4f0c750e580eac5a84369-1","4b3bb42e2498b36c65c4f0c750e580eac5a84369","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBwcm94eSBtb2R1bGUKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBibG9ja2NhbnZhcy5wbG90LnNlbGVjdGFibGVfcGxvdCBpbXBvcnQgKgo8fGZpbV9lbmR8Pg=="]
["4b3bb42e2498b36c65c4f0c750e580eac5a84369-2","4b3bb42e2498b36c65c4f0c750e580eac5a84369","PHxmaW1fcHJlZml4fD4KIyBwcm94eSBtb2R1bGUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIGJsb2NrY2FudmFzLnBsb3Quc2VsZWN0YWJsZV9wbG90IGltcG9ydCAqCjx8ZmltX2VuZHw+"]
["4b3bb42e2498b36c65c4f0c750e580eac5a84369-3","4b3bb42e2498b36c65c4f0c750e580eac5a84369","PHxmaW1fcHJlZml4fD4KIyBwcm94eSBtb2R1bGUKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIGJsb2NrY2FudmFzLnBsb3Quc2VsZWN0YWJsZV9wbG90IGltcG9ydCAqCjx8ZmltX2VuZHw+"]
["f2af02135779ee536e4a9dea897a1a1f5defac11-1","f2af02135779ee536e4a9dea897a1a1f5defac11","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zLHN5cyxzaHV0aWwKaW1wb3J0IG9wdHBhcnNlCmltcG9ydCBsb2dnaW5nCmZyb20gcGJjb3JlLmlvLmFsaWduLkNtcEg1SU8gaW1wb3J0ICoKZnJvbSBwYmNvcmUuaW8gaW1wb3J0IG9wZW5JbmRleGVkQWxpZ25tZW50RmlsZQpmcm9tIGl0ZXJ0b29scyBpbXBvcnQgZ3JvdXBieQpmcm9tIHNtYWxyIGltcG9ydCBTbWFsclJ1bm5lcgppbXBvcnQgU21hbHJDb25maWcKZnJvbSBpdGVydG9vbHMgaW1wb3J0IGdyb3VwYnkKCmNsYXNzIFNtYWxyX211bHRpY29udGlnX3J1bm5lcjoKCWRlZiBfX2luaXRfXyAoIHNlbGYgKToKCQkiIiIKCgkJIiIiCgkJc2VsZi5Db25maWcgID0gU21hbHJDb25maWcuUnVubmVyQ29uZmlnKCApCgoJZGVmIGdldF9yZWZlcmVuY2VfY29udGlncyggc2VsZiwgY21waDUgKToKCQkiIiIKCQlQdWxsIG91dCB0aGUgbGlzdCBvZiBjb250aWdzIGluIHRoZSBoNSBmaWxlLgoJCSIiIgoJCSMgcmVhZGVyICA9IENtcEg1UmVhZGVyKGNtcGg1KQoJCXJlYWRlciAgPSBvcGVuSW5kZXhlZEFsaWdubWVudEZpbGUoY21waDUsIHNlbGYuQ29uZmlnLnJlZikKCQljb250aWdzID0gc2V0KG1hcChsYW1iZGEgeDogKHhbM10sIHhbMl0pLCByZWFkZXIucmVmZXJlbmNlSW5mb1RhYmxlKSkKCQlyZXR1cm4gY29udGlncwoKCWRlZiBmYXN0YV9pdGVyKHNlbGYsIGZhc3RhX25hbWUpOgoJCSIiIgoJCUdpdmVuIGEgZmFzdGEgZmlsZSwgeWllbGQgdHVwbGVzIG9mIChoZWFkZXIsIHNlcXVlbmNlKS4KCQkiIiIKCQlmaCA9IG9wZW4oZmFzdGFfbmFtZSkKCQkjIGRpdGNoIHRoZSBib29sZWFuICh4WzBdKSBhbmQganVzdCBrZWVwIHRoZSBoZWFkZXIgb3Igc2VxdWVuY2Ugc2luY2UKCQkjIHdlIGtub3cgdGhleSBhbHRlcm5hdGUuCgkJZmFpdGVyID0gKHhbMV0gZm9yIHggaW4gZ3JvdXBieShmaCwgbGFtYmRhIGxpbmU6IGxpbmVbMF0gPT0gIj4iKSkKCQlmb3IgaGVhZGVyIGluIGZhaXRlcjoKCQkJIyBkcm9wIHRoZSAiPiIKCQkJaGVhZGVyID0gaGVhZGVyLm5leHQoKVsxOl0uc3RyaXAoKQoJCQkjIGpvaW4gYWxsIHNlcXVlbmNlIGxpbmVzIHRvIG9uZS4KCQkJc2VxID0gIiIuam9pbihzLnN0cmlwKCkgZm9yIHMgaW4gZmFpdGVyLm5leHQoKSkKCQkJeWllbGQgaGVhZGVyLCBzZXEKCglkZWYgY2hlY2tfY29udGlnX25hbWVzKCBzZWxmLCBjb250aWdzICk6CgkJIyBDaGVjayBjbXAuaDUgY29udGlnIG5hbWVzIGFnYWluc3QgbmFtZXMgaW4gdGhlIG5hdGl2ZSBjbXAuaDUKCQljbXBfY29udGlnX25hbWVzID0gc2V0KG1hcChsYW1iZGEgeDogeFswXSwgY29udGlncykpCgkJCgkJZmFfaXRlciAgICAgICAgICA9IHNlbGYuZmFzdGFfaXRlcihzZWxmLkNvbmZpZy5yZWYpCgkJI2YgPSBvcGVuKHNlbGYuQ29uZmlnLnJlZisiLnRtcCIsICJ3IikKCQlmb3IgbmFtZSxzZXEgaW4gZmFfaXRlcjoKCQkJI2lmIG5hbWUuZmluZCgifHF1aXZlciIpPi0xOgoJCQkjCW5hbWUgPSBuYW1lLnNwbGl0KCJ8IilbMF0KCQkJIwlmLndyaXRlKCI+JXNcbiIgJSBuYW1lKQoJCQkjCWYud3JpdGUoIiVzXG4iICUgc2VxKQkKCQkJaWYgbmFtZSBub3QgaW4gY21wX2NvbnRpZ19uYW1lczoKCQkJCXJhaXNlIEV4Y2VwdGlvbigiJXMgaW4gJXMgbm90IGZvdW5kIGluICVzISIgJSAobmFtZSwgc2VsZi5Db25maWcucmVmLCBzZWxmLkNvbmZpZy5uYXRpdmVfY21waDUpKQoJCQllbHNlOgoJCQkJcGFzcwoJCSNmLmNsb3NlKCkKCQkjc2VsZi5Db25maWcucmVmID0gc2VsZi5Db25maWcucmVmKyIudG1wIgoKCWRlZiBydW4oIHNlbGYgKToKCQluYXRfY29udGlncyAgPSBzZWxmLmdldF9yZWZlcmVuY2VfY29udGlncyhzZWxmLkNvbmZpZy5uYXRpdmVfY21waDUpCgkJc2VsZi5jaGVja19jb250aWdfbmFtZXMoIG5hdF9jb250aWdzICkKCQkKCQlwcmludCAiUHJlcGFyaW5nIHRvIGl0ZXJhdGUgb3ZlciBhbGwgY29udGlncyBpbiAlcyIgJSBzZWxmLkNvbmZpZy5uYXRpdmVfY21waDUKCQlmb3IgbmF0X2NvbnRpZyBpbiBuYXRfY29udGlnczoKCQkJcHJpbnQgIgktICVzICglcykiICUgKG5hdF9jb250aWdbMV0sIG5hdF9jb250aWdbMF0pCgoJCWlmIHNlbGYuQ29uZmlnLm9wdHMuU01zbjoKCQkJcHJvdG9jb2wgPSAiU01zbiIKCQllbGlmIHNlbGYuQ29uZmlnLm9wdHMuU01wOgoJCQlwcm90b2NvbCA9ICJTTXAiCgkJZWxzZToKCQkJcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHBpcGVsaW5lIHByb3RvY29sISBVc2UgLS1TTXNuIG9yIC0tU01wISIpCgoJCWFic19pbnB1dF9mbiA9IG9zLnBhdGguYWJzcGF0aChzZWxmLkNvbmZpZy5pbnB1dF9maWxlKQoJCWZvciBpLG5hdF9jb250aWcgaW4gZW51bWVyYXRlKG5hdF9jb250aWdzKToKCQkJZGlyX25hbWUgPSAiJXNfJXMiICUgKG5hdF9jb250aWdbMF0sIHByb3RvY29sKQoJCQlpZiBvcy5wYXRoLmV4aXN0cyhkaXJfbmFtZSk6CgkJCQlzaHV0aWwucm10cmVlKGRpcl9uYW1lKQoJCQlvcy5ta2RpcihkaXJfbmFtZSkKCQkJb3MuY2hkaXIoZGlyX25hbWUpCgkJCXJ1bm5lciA9IFNtYWxyUnVubmVyKCBpLCBuYXRfY29udGlnLCBhYnNfaW5wdXRfZm4sIHNlbGYuQ29uZmlnICkKCQkJcnVubmVyLnJ1bigpCgkJCW9zLmNoZGlyKCIuLi8iKQoJCQpkZWYgbWFpbigpOgoJYXBwID0gU21hbHJfbXVsdGljb250aWdfcnVubmVyKCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoJc3lzLmV4aXQoIGFwcC5ydW4oKSApCjx8ZmltX2VuZHw+"]
["4b5201ffd4f5f23efaf43bf3a2d7bf6efd36698a-1","4b5201ffd4f5f23efaf43bf3a2d7bf6efd36698a","PHxmaW1fcHJlZml4fD4KCgpmcm9tIC4udXRpbHMgaW1wb3J0IE9iamVjdAoKCmNsYXNzIFRleHRFbnRpdHlUeXBlTWVudGlvbk5hbWUoT2JqZWN0KToKICAgICIiIgogICAgQSB0ZXh0IHNob3dzIGluc3RlYWQgb2YgYSByYXcgbWVudGlvbiBvZiB0aGUgdXNlciAoZS5nLiwgd2hlbiB0aGUgdXNlciBoYXMgbm8gdXNlcm5hbWUpIAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgQXR0cmlidXRlczoKICAgICAgICBJRCAoOm9iajpgc3RyYCk6IGBgVGV4dEVudGl0eVR5cGVNZW50aW9uTmFtZWBgCgogICAgQXJnczoKPHxmaW1fZW5kfD4="]
["4b5201ffd4f5f23efaf43bf3a2d7bf6efd36698a-2","4b5201ffd4f5f23efaf43bf3a2d7bf6efd36698a","PHxmaW1fcHJlZml4fD4KCgpmcm9tIC4udXRpbHMgaW1wb3J0IE9iamVjdAoKCmNsYXNzIFRleHRFbnRpdHlUeXBlTWVudGlvbk5hbWUoT2JqZWN0KToKICAgICIiIgogICAgQSB0ZXh0IHNob3dzIGluc3RlYWQgb2YgYSByYXcgbWVudGlvbiBvZiB0aGUgdXNlciAoZS5nLiwgd2hlbiB0aGUgdXNlciBoYXMgbm8gdXNlcm5hbWUpIAoKICAgIEF0dHJpYnV0ZXM6CiAgICAgICAgSUQgKDpvYmo6YHN0cmApOiBgYFRleHRFbnRpdHlUeXBlTWVudGlvbk5hbWVgYAoKICAgIEFyZ3M6CiAgICAgICAgdXNlcl9pZCAoOm9iajpgaW50YCk6CiAgICAgICAgICAgIElkZW50aWZpZXIgb2YgdGhlIG1lbnRpb25lZCB1c2VyCgogICAgUmV0dXJuczoKICAgICAgICBUZXh0RW50aXR5VHlwZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgUmFpc2VzOgogICAgICAgIDpjbGFzczpgdGVsZWdyYW0uRXJyb3JgCiAgICAiIiIKPHxmaW1fZW5kfD4="]
["4b5201ffd4f5f23efaf43bf3a2d7bf6efd36698a-3","4b5201ffd4f5f23efaf43bf3a2d7bf6efd36698a","PHxmaW1fcHJlZml4fD4KCgpmcm9tIC4udXRpbHMgaW1wb3J0IE9iamVjdAoKCmNsYXNzIFRleHRFbnRpdHlUeXBlTWVudGlvbk5hbWUoT2JqZWN0KToKICAgICIiIgogICAgQSB0ZXh0IHNob3dzIGluc3RlYWQgb2YgYSByYXcgbWVudGlvbiBvZiB0aGUgdXNlciAoZS5nLiwgd2hlbiB0aGUgdXNlciBoYXMgbm8gdXNlcm5hbWUpIAoKICAgIEF0dHJpYnV0ZXM6CiAgICAgICAgSUQgKDpvYmo6YHN0cmApOiBgYFRleHRFbnRpdHlUeXBlTWVudGlvbk5hbWVgYAoKICAgIEFyZ3M6CiAgICAgICAgdXNlcl9pZCAoOm9iajpgaW50YCk6CiAgICAgICAgICAgIElkZW50aWZpZXIgb2YgdGhlIG1lbnRpb25lZCB1c2VyCgogICAgUmV0dXJuczoKICAgICAgICBUZXh0RW50aXR5VHlwZQoKICAgIFJhaXNlczoKICAgICAgICA6Y2xhc3M6YHRlbGVncmFtLkVycm9yYAogICAgIiIiCiAgICBJRCA9ICJ0ZXh0RW50aXR5VHlwZU1lbnRpb25OYW1lIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1c2VyX2lkLCAqKmt3YXJncyk6CiAgICAgICAgCiAgICAgICAgc2VsZi51c2VyX2lkID0gdXNlcl9pZCAgIyBpbnQKCiAgICBAc3RhdGljbWV0aG9kCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiByZWFkKHE6IGRpY3QsICphcmdzKSAtPiAiVGV4dEVudGl0eVR5cGVNZW50aW9uTmFtZSI6CiAgICAgICAgdXNlcl9pZCA9IHEuZ2V0KCd1c2VyX2lkJykKICAgICAgICByZXR1cm4gVGV4dEVudGl0eVR5cGVNZW50aW9uTmFtZSh1c2VyX2lkKQo8fGZpbV9lbmR8Pg=="]
["4b5201ffd4f5f23efaf43bf3a2d7bf6efd36698a-4","4b5201ffd4f5f23efaf43bf3a2d7bf6efd36698a","PHxmaW1fcHJlZml4fD4KCgpmcm9tIC4udXRpbHMgaW1wb3J0IE9iamVjdAoKCmNsYXNzIFRleHRFbnRpdHlUeXBlTWVudGlvbk5hbWUoT2JqZWN0KToKICAgICIiIgogICAgQSB0ZXh0IHNob3dzIGluc3RlYWQgb2YgYSByYXcgbWVudGlvbiBvZiB0aGUgdXNlciAoZS5nLiwgd2hlbiB0aGUgdXNlciBoYXMgbm8gdXNlcm5hbWUpIAoKICAgIEF0dHJpYnV0ZXM6CiAgICAgICAgSUQgKDpvYmo6YHN0cmApOiBgYFRleHRFbnRpdHlUeXBlTWVudGlvbk5hbWVgYAoKICAgIEFyZ3M6CiAgICAgICAgdXNlcl9pZCAoOm9iajpgaW50YCk6CiAgICAgICAgICAgIElkZW50aWZpZXIgb2YgdGhlIG1lbnRpb25lZCB1c2VyCgogICAgUmV0dXJuczoKICAgICAgICBUZXh0RW50aXR5VHlwZQoKICAgIFJhaXNlczoKICAgICAgICA6Y2xhc3M6YHRlbGVncmFtLkVycm9yYAogICAgIiIiCiAgICBJRCA9ICJ0ZXh0RW50aXR5VHlwZU1lbnRpb25OYW1lIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1c2VyX2lkLCAqKmt3YXJncyk6CiAgICAgICAgCiAgICAgICAgc2VsZi51c2VyX2lkID0gdXNlcl9pZCAgIyBpbnQKCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgcmVhZChxOiBkaWN0LCAqYXJncykgLT4gIlRleHRFbnRpdHlUeXBlTWVudGlvbk5hbWUiOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgdXNlcl9pZCA9IHEuZ2V0KCd1c2VyX2lkJykKICAgICAgICByZXR1cm4gVGV4dEVudGl0eVR5cGVNZW50aW9uTmFtZSh1c2VyX2lkKQo8fGZpbV9lbmR8Pg=="]
["a05c953c9f672126bc2fb266f23c5f965e752da8-1","a05c953c9f672126bc2fb266f23c5f965e752da8","PHxmaW1fcHJlZml4fD4KX192ZXJzaW9uX18gPSAiMC4wLjEiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IGR2b2NfbW9kZWwuY29uc3RhbnRzCmZyb20gZHZvY19tb2RlbC5jYWxjdWxhdGlvbnMgaW1wb3J0ICoKZnJvbSBkdm9jX21vZGVsLnJlZmVyZW5jZV9mcmFtZXMgaW1wb3J0ICoKaW1wb3J0IGR2b2NfbW9kZWwuc2ltdWxhdGUKPHxmaW1fZW5kfD4="]
["a05c953c9f672126bc2fb266f23c5f965e752da8-2","a05c953c9f672126bc2fb266f23c5f965e752da8","PHxmaW1fcHJlZml4fD4KX192ZXJzaW9uX18gPSAiMC4wLjEiCmltcG9ydCBkdm9jX21vZGVsLmNvbnN0YW50cwpmcm9tIGR2b2NfbW9kZWwuY2FsY3VsYXRpb25zIGltcG9ydCAqCmZyb20gZHZvY19tb2RlbC5yZWZlcmVuY2VfZnJhbWVzIGltcG9ydCAqCmltcG9ydCBkdm9jX21vZGVsLnNpbXVsYXRlCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IGR2b2NfbW9kZWwuZWxlbWVudHMKZnJvbSBkdm9jX21vZGVsLmR2b2MgaW1wb3J0ICoKZnJvbSBkdm9jX21vZGVsLmRyb29wIGltcG9ydCAqCjx8ZmltX2VuZHw+"]
["a05c953c9f672126bc2fb266f23c5f965e752da8-3","a05c953c9f672126bc2fb266f23c5f965e752da8","PHxmaW1fcHJlZml4fD4KX192ZXJzaW9uX18gPSAiMC4wLjEiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IGR2b2NfbW9kZWwuY29uc3RhbnRzCmZyb20gZHZvY19tb2RlbC5jYWxjdWxhdGlvbnMgaW1wb3J0ICoKZnJvbSBkdm9jX21vZGVsLnJlZmVyZW5jZV9mcmFtZXMgaW1wb3J0ICoKaW1wb3J0IGR2b2NfbW9kZWwuc2ltdWxhdGUKPHxmaW1fZW5kfD4="]
["47bb3922a1c8a6fb05442db05e1c5bb832d2b2d3-1","47bb3922a1c8a6fb05442db05e1c5bb832d2b2d3","PHxmaW1fcHJlZml4fD4KY3NzX2NvZGUgPSAnJycKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgICAgYm9keSB7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyMjI7CiAgICAgICAgICAgIGNvbG9yOiAjYmJiOwogICAgICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIH0KICAgICAgICBheyBjb2xvcjogY29ybmZsb3dlcmJsdWU7IH0KICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2VDb250YWluZXIgewogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlOwogICAgICAgICAgICBtaW4taGVpZ2h0OiAxMDAlOwogICAgICAgIH0KCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIHsKICAgICAgICAgICAgd2lkdGg6IDkwJTsKICAgICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CgogICAgICAgIC5tb25hY28td29ya2JlbmNoIC53ZWxjb21lUGFnZSAucm93IHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZmxleC1mbG93OiByb3c7CiAgICAgICAgfQoKICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UgLnJvdyAuc2VjdGlvbiB7CiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQoKICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UgLnJvdyAuc3BsYXNoIHsKICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB9CgogICAgICAgIC5tb25hY28td29ya2JlbmNoIC53ZWxjb21lUGFnZSAucm93IC5jb21tYW5kcyB7CiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQoKICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UgLnJvdyAuY29tbWFuZHMgLmxpc3QgewogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIHAgewogICAgICAgICAgICBmb250LXNpemU6IDEuM2VtOwogICAgICAgIH0KCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIC5rZXlib2FyZCB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAiTHVjaWRhIEdyYW5kZSIsIHNhbnMtc2VyaWY7LyogS2V5Ym9hcmQgc2hvcnRjdXRzICovCiAgICAgICAgfQoKICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UgYSB7CiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICB9CgogICAgICAgIC5tb25hY28td29ya2JlbmNoIC53ZWxjb21lUGFnZSBhOmZvY3VzIHsKICAgICAgICAgICAgb3V0bGluZTogMXB4IHNvbGlkIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjsKICAgICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7CiAgICAgICAgfQoKICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UgaDEgewogICAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICAgICAgZm9udC1zaXplOiAzLjZlbTsKICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIGgxLCBoMnsgY29sb3I6ICNjY2M7IH0KICAgICAgICBoM3sgY29sb3I6ICNmZmY7IH0KCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIC50aXRsZSB7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IDFlbTsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMWVtOwogICAgICAgICAgICBmbGV4OiAxIDEwMCU7CiAgICAgICAgfQoKICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UgLnN1YnRpdGxlIHsKICAgICAgICAgICAgbWFyZ2luLXRvcDogLjhlbTsKICAgICAgICAgICAgZm9udC1zaXplOiAyLjZlbTsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgIH0KCiAgICAgICAgLmhjLWJsYWNrIC5tb25hY28td29ya2JlbmNoIC53ZWxjb21lUGFnZSAuc3VidGl0bGUgewogICAgICAgICAgICBmb250LXdlaWdodDogMjAwOwogICAgICAgIH0KCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIC5zcGxhc2gsCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIC5jb21tYW5kcyB7CiAgICAgICAgICAgIGZsZXg6IDEgMSAwOwogICAgICAgIH0KCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIGgyIHsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDIwMDsKICAgICAgICAgICAgbWFyZ2luLXRvcDogMTdweDsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICAgICAgICBmb250LXNpemU6IDEuOWVtOwogICAgICAgICAgICBsaW5lLWhlaWdodDogaW5pdGlhbDsKICAgICAgICB9CgogICAgICAgIC5tb25hY28td29ya2JlbmNoIC53ZWxjb21lUGFnZSAuc3BsYXNoIC5zZWN0aW9uIHsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNWVtOwogICAgICAgIH0KCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIC5zcGxhc2ggdWwgewogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zZW07CiAgICAgICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgfQoKICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UgLnNwbGFzaCBsaSB7CiAgICAgICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgfQoKICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UuZW1wdHlSZWNlbnQgLnNwbGFzaCAucmVjZW50IC5saXN0IHsKICAgICAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICB9CiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIC5zcGxhc2ggLnJlY2VudCAubm9uZSB7CiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgfQogICAgICAgIC5tb25hY28td29ya2JlbmNoIC53ZWxjb21lUGFnZS5lbXB0eVJlY2VudCAuc3BsYXNoIC5yZWNlbnQgLm5vbmUgewogICAgICAgICAgICBkaXNwbGF5OiBpbml0aWFsOwogICAgICAgIH0KCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIC5zcGxhc2ggLnJlY2VudCBsaS5tb3JlUmVjZW50IHsKICAgICAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICAgIH0KCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIC5zcGxhc2ggLnJlY2VudCAucGF0aCB7CiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMGVtOwogICAgICAgIH0KCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIC5zcGxhc2ggLnRpdGxlLAogICAgICAgIC5tb25hY28td29ya2JlbmNoIC53ZWxjb21lUGFnZSAuc3BsYXNoIC5zaG93T25TdGFydHVwIHsKICAgICAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB9CgogICAgICAgIC5tb25hY28td29ya2JlbmNoIC53ZWxjb21lUGFnZSAuc3BsYXNoIC5zaG93T25TdGFydHVwID4gLmNoZWNrYm94IHsKICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsKICAgICAgICB9CgogICAgICAgIC5tb25hY28td29ya2JlbmNoIC53ZWxjb21lUGFnZSAuY29tbWFuZHMgLmxpc3QgewogICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lOwogICAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIH0KICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UgLmNvbW1hbmRzIC5pdGVtIHsKICAgICAgICAgICAgbWFyZ2luOiA3cHggMHB4Owo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgcGFkZGluZzogMTJweCAxMHB4OwogICAgICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gMnB4KTsKICAgICAgICAgICAgaGVpZ2h0OiA1ZW07CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zZW07CiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgICAgIGNvbG9yOiAjY2NjOwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTExOwogICAgICAgICAgICBvcGFjaXR5OjAuNjsKICAgICAgICAgICAgZmlsdGVyOmFscGhhKG9wYWNpdHk9NjApOwoKICAgICAgICB9CiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIC5jb21tYW5kcyAuaXRlbSBidXR0b246aG92ZXJ7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7CiAgICAgICAgfQoKICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UgLmNvbW1hbmRzIC5pdGVtIGJ1dHRvbiA+IHNwYW4gewogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgICAgIHdpZHRoOjEwMCU7CiAgICAgICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgIH0KCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIC5jb21tYW5kcyAuaXRlbSBidXR0b24gaDMgewogICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgICAgICBmb250LXNpemU6IDFlbTsKICAgICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAuMjVlbTsKICAgICAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB9CgogICAgICAgIC5tb25hY28td29ya2JlbmNoIC53ZWxjb21lUGFnZSAuY29tbWFuZHMgLml0ZW0gYnV0dG9uIHsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIH0KCiAgICAgICAgLmhjLWJsYWNrIC5tb25hY28td29ya2JlbmNoIC53ZWxjb21lUGFnZSAuY29tbWFuZHMgLml0ZW0gYnV0dG9uID4gaDMgewogICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICB9CgogICAgICAgIC5tb25hY28td29ya2JlbmNoIC53ZWxjb21lUGFnZSAuY29tbWFuZHMgLml0ZW0gYnV0dG9uOmZvY3VzIHsKICAgICAgICAgICAgb3V0bGluZS1zdHlsZTogc29saWQ7CiAgICAgICAgICAgIG91dGxpbmUtd2lkdGg6IDFweDsKICAgICAgICB9CgogICAgICAgIC5oYy1ibGFjayAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UgLmNvbW1hbmRzIC5pdGVtIGJ1dHRvbiB7CiAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4OwogICAgICAgICAgICBib3JkZXItc3R5bGU6IHNvbGlkOwogICAgICAgIH0KCiAgICAgICAgLmhjLWJsYWNrIC5tb25hY28td29ya2JlbmNoIC53ZWxjb21lUGFnZSAuY29tbWFuZHMgLml0ZW0gYnV0dG9uOmhvdmVyIHsKICAgICAgICAgICAgb3V0bGluZS13aWR0aDogMXB4OwogICAgICAgICAgICBvdXRsaW5lLXN0eWxlOiBkYXNoZWQ7CiAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtNXB4OwogICAgICAgIH0KCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIC5jb21tYW5kcyAuaXRlbSBidXR0b24gLmVuYWJsZWRFeHRlbnNpb24gewogICAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIH0KICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UgLmNvbW1hbmRzIC5pdGVtIGJ1dHRvbiAuaW5zdGFsbEV4dGVuc2lvbi5pbnN0YWxsZWQgewogICAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIH0KICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UgLmNvbW1hbmRzIC5pdGVtIGJ1dHRvbiAuZW5hYmxlZEV4dGVuc2lvbi5pbnN0YWxsZWQgewogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmU7CiAgICAgICAgfQoKICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2VDb250YWluZXIubWF4LWhlaWdodC02ODVweCAudGl0bGUgewogICAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIH0KCiAgICAgICAgLmZpbGUtaWNvbnMtZW5hYmxlZCAuc2hvdy1maWxlLWljb25zIC52c19jb2RlX3dlbGNvbWVfcGFnZS1uYW1lLWZpbGUtaWNvbi5maWxlLWljb246OmJlZm9yZSB7CiAgICAgICAgICAgIGNvbnRlbnQ6ICcgJzsKICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcuLi8uLi9jb2RlLWljb24uc3ZnJyk7CiAgICAgICAgfQoKICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UgLm1hYy1vbmx5LAogICAgICAgIC5tb25hY28td29ya2JlbmNoIC53ZWxjb21lUGFnZSAud2luZG93cy1vbmx5LAogICAgICAgIC5tb25hY28td29ya2JlbmNoIC53ZWxjb21lUGFnZSAubGludXgtb25seSB7CiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgfQogICAgICAgIC5tb25hY28td29ya2JlbmNoLm1hYyAud2VsY29tZVBhZ2UgLm1hYy1vbmx5IHsKICAgICAgICAgICAgZGlzcGxheTogaW5pdGlhbDsKICAgICAgICB9CiAgICAgICAgLm1vbmFjby13b3JrYmVuY2gud2luZG93cyAud2VsY29tZVBhZ2UgLndpbmRvd3Mtb25seSB7CiAgICAgICAgICAgIGRpc3BsYXk6IGluaXRpYWw7CiAgICAgICAgfQogICAgICAgIC5tb25hY28td29ya2JlbmNoLmxpbnV4IC53ZWxjb21lUGFnZSAubGludXgtb25seSB7CiAgICAgICAgICAgIGRpc3BsYXk6IGluaXRpYWw7CiAgICAgICAgfQogICAgICAgIC5tb25hY28td29ya2JlbmNoLm1hYyAud2VsY29tZVBhZ2UgbGkubWFjLW9ubHkgewogICAgICAgICAgICBkaXNwbGF5OiBsaXN0LWl0ZW07CiAgICAgICAgfQogICAgICAgIC5tb25hY28td29ya2JlbmNoLndpbmRvd3MgLndlbGNvbWVQYWdlIGxpLndpbmRvd3Mtb25seSB7CiAgICAgICAgICAgIGRpc3BsYXk6IGxpc3QtaXRlbTsKICAgICAgICB9CiAgICAgICAgLm1vbmFjby13b3JrYmVuY2gubGludXggLndlbGNvbWVQYWdlIGxpLmxpbnV4LW9ubHkgewogICAgICAgICAgICBkaXNwbGF5OiBsaXN0LWl0ZW07CiAgICAgICAgfQoKICAgIDwvc3R5bGU+CicnJwo8fGZpbV9zdWZmaXh8PgoKICAgICAgICB9CiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIC5jb21tYW5kcyAuaXRlbSBidXR0b24gewogICAgICAgICAgICBtYXJnaW46IDFweDsKPHxmaW1fZW5kfD4="]
["47bb3922a1c8a6fb05442db05e1c5bb832d2b2d3-2","47bb3922a1c8a6fb05442db05e1c5bb832d2b2d3","PHxmaW1fcHJlZml4fD4KY3NzX2NvZGUgPSAnJycKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgICAgYm9keSB7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyMjI7CiAgICAgICAgICAgIGNvbG9yOiAjYmJiOwogICAgICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIH0KICAgICAgICBheyBjb2xvcjogY29ybmZsb3dlcmJsdWU7IH0KICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2VDb250YWluZXIgewogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlOwogICAgICAgICAgICBtaW4taGVpZ2h0OiAxMDAlOwogICAgICAgIH0KCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIHsKICAgICAgICAgICAgd2lkdGg6IDkwJTsKICAgICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CgogICAgICAgIC5tb25hY28td29ya2JlbmNoIC53ZWxjb21lUGFnZSAucm93IHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZmxleC1mbG93OiByb3c7CiAgICAgICAgfQoKICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UgLnJvdyAuc2VjdGlvbiB7CiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQoKICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UgLnJvdyAuc3BsYXNoIHsKICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB9CgogICAgICAgIC5tb25hY28td29ya2JlbmNoIC53ZWxjb21lUGFnZSAucm93IC5jb21tYW5kcyB7CiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQoKICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UgLnJvdyAuY29tbWFuZHMgLmxpc3QgewogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIHAgewogICAgICAgICAgICBmb250LXNpemU6IDEuM2VtOwogICAgICAgIH0KCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIC5rZXlib2FyZCB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAiTHVjaWRhIEdyYW5kZSIsIHNhbnMtc2VyaWY7LyogS2V5Ym9hcmQgc2hvcnRjdXRzICovCiAgICAgICAgfQoKICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UgYSB7CiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICB9CgogICAgICAgIC5tb25hY28td29ya2JlbmNoIC53ZWxjb21lUGFnZSBhOmZvY3VzIHsKICAgICAgICAgICAgb3V0bGluZTogMXB4IHNvbGlkIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjsKICAgICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7CiAgICAgICAgfQoKICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UgaDEgewogICAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICAgICAgZm9udC1zaXplOiAzLjZlbTsKICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIGgxLCBoMnsgY29sb3I6ICNjY2M7IH0KICAgICAgICBoM3sgY29sb3I6ICNmZmY7IH0KCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIC50aXRsZSB7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IDFlbTsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMWVtOwogICAgICAgICAgICBmbGV4OiAxIDEwMCU7CiAgICAgICAgfQoKICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UgLnN1YnRpdGxlIHsKICAgICAgICAgICAgbWFyZ2luLXRvcDogLjhlbTsKICAgICAgICAgICAgZm9udC1zaXplOiAyLjZlbTsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgIH0KCiAgICAgICAgLmhjLWJsYWNrIC5tb25hY28td29ya2JlbmNoIC53ZWxjb21lUGFnZSAuc3VidGl0bGUgewogICAgICAgICAgICBmb250LXdlaWdodDogMjAwOwogICAgICAgIH0KCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIC5zcGxhc2gsCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIC5jb21tYW5kcyB7CiAgICAgICAgICAgIGZsZXg6IDEgMSAwOwogICAgICAgIH0KCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIGgyIHsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDIwMDsKICAgICAgICAgICAgbWFyZ2luLXRvcDogMTdweDsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICAgICAgICBmb250LXNpemU6IDEuOWVtOwogICAgICAgICAgICBsaW5lLWhlaWdodDogaW5pdGlhbDsKICAgICAgICB9CgogICAgICAgIC5tb25hY28td29ya2JlbmNoIC53ZWxjb21lUGFnZSAuc3BsYXNoIC5zZWN0aW9uIHsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNWVtOwogICAgICAgIH0KCiAgICAgICAgLm1vbmFjby13b3JrYmVuY2ggLndlbGNvbWVQYWdlIC5zcGxhc2ggdWwgewogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zZW07CiAgICAgICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgfQoKICAgICAgICAubW9uYWNvLXdvcmtiZW5jaCAud2VsY29tZVBhZ2UgLnNwbGFzaCBsaSB7CiAgICAgICAgICAgIG1pbi13aWR0aDogMDsKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKPHxmaW1fZW5kfD4="]
["844b5b8e939874e9040154207fe2b0b141ea265c-1","844b5b8e939874e9040154207fe2b0b141ea265c",{"$cut":{"chars":20804,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGVuY29kaW5nOiB1dGYtOCAtKi0KCiMgQ29weXJpZ2h0IDIwMTQsIFNpbW9uIEhhcnJpc29uCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCnRyeToKICAgIGZyb20gc2hhcGVseS5nZW9zIGltcG9ydCBSZWFkaW5nRXJyb3IKICAgIGZyb20gc2hhcGVseS53a3QgaW1wb3J0IGxvYWRzIGFzIHdrdF9mcm9tX3N0cmluZ19sb2FkZXIKZXhjZXB0IEltcG9ydEVycm9yOgogICAgcHJpbnQoIlBsZWFzZSBpbnN0YWxsIGV4dGVuc2lvbiByZXF1aXJlbWVudHMuIFNlZSBSRUFETUUucnN0LiIpCgpmcm9tIHB5Mm5lbyBpbXBvcnQgTm9kZSwgU2VydmVyUGx1Z2luCmZyb20gcHkybmVvLmVycm9yIGltcG9ydCBHcmFwaEVycm9yCmZyb20gcHkybmVvLnBhY2thZ2VzLmpzb25zdHJlYW0gaW1wb3J0IGFzc2VtYmxlZApmcm9tIHB5Mm5lby5leHQuc3BhdGlhbC5leGNlcHRpb25zIGltcG9ydCAoCiAgICBHZW9tZXRyeUV4aXN0c0Vycm9yLCBJbnZhbGlkV0tURXJyb3IsIExheWVyTm90Rm91bmRFcnJvciwKICAgIE5vZGVOb3RGb3VuZEVycm9yKQpmcm9tIHB5Mm5lby5leHQuc3BhdGlhbC51dGlsIGltcG9ydCBwYXJzZV9sYXRfbG9uZwoKCkVYVEVOU0lPTl9OQU1FID0gIlNwYXRpYWxQbHVnaW4iCldLVF9QUk9QRVJUWSA9ICJ3a3QiCk5BTUVfUFJPUEVSVFkgPSAiX3B5Mm5lb19nZW9tZXRyeV9uYW1lIgoKIyB3a3QgaW5kZXggY29uZmlnIGZvciB0aGUgY29udHJpYiBzcGF0aWFsIGV4dGVuc2lvbgpFWFRFTlNJT05fQ09ORklHID0gewogICAgJ2Zvcm1hdCc6ICdXS1QnLAogICAgJ25vZGVQcm9wZXJ0eU5hbWUnOiBXS1RfUFJPUEVSVFksCn0KCiMgc2hhcGUgaWRlbnRpZmllcnMKTVVMVElQT0xZR09OID0gJ011bHRpUG9seWdvbicKUE9JTlQgPSAnUG9pbnQnCgojIGEgYmFzZWxpbmUgbGFiZWwgc28gd2UgY2FuIHJldGlldmUgYWxsIGRhdGEgYWRkZWQgdmlhIHRoaXMgZXh0ZW5zaW9uCkRFRkFVTFRfTEFCRUwgPSAncHkybmVvX3NwYXRpYWwnCgoKY2xhc3MgU3BhdGlhbChTZXJ2ZXJQbHVnaW4pOgogICAgIiIiIEFuIEFQSSBleHRlbnNpb24gdG8gcHkybmVvIGZvciBXS1QgdHlwZSBHSVMgb3BlcmF0aW9ucy4KICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGdyYXBoKToKICAgICAgICBzdXBlcihTcGF0aWFsLCBzZWxmKS5fX2luaXRfXyhncmFwaCwgRVhURU5TSU9OX05BTUUpCgogICAgZGVmIF9nZXRfZGF0YV9ub2RlcyhzZWxmLCBnZW9tZXRyeV9ub2Rlcyk6CiAgICAgICAgaWRzID0gW24uX2lkIGZvciBuIGluIGdlb21ldHJ5X25vZGVzXQogICAgICAgIHF1ZXJ5ID0gKAogICAgICAgICAgICAiTUFUQ0ggKG4pLVs6TE9DQVRFU10tPihkYXRhX25vZGUpICIKICAgICAgICAgICAgIldIRVJFIGlkKG4pIElOIHtpZHN9IFJFVFVSTiBkYXRhX25vZGUgIgogICAgICAgICkKCiAgICAgICAgcGFyYW1zID0gewogICAgICAgICAgICAnaWRzJzogaWRzLAogICAgICAgIH0KCiAgICAgICAgcmVzdWx0cyA9IHNlbGYuZ3JhcGguY3lwaGVyLmV4ZWN1dGUocXVlcnksIHBhcmFtcykKICAgICAgICBub2RlcyA9IFtyZWNvcmRbMF0gZm9yIHJlY29yZCBpbiByZXN1bHRzXQoKICAgICAgICByZXR1cm4gbm9kZXMKCiAgICBkZWYgX2V4ZWN1dGVfc3BhdGlhbF9yZXF1ZXN0KHNlbGYsIHJlc291cmNlLCBzcGF0aWFsX3BheWxvYWQpOgogICAgICAgIHRyeToKICAgICAgICAgICAganNvbl9zdHJlYW0gPSByZXNvdXJjZS5wb3N0KHNwYXRpYWxfcGF5bG9hZCkKICAgICAgICBleGNlcHQgR3JhcGhFcnJvciBhcyBleGM6CiAgICAgICAgICAgIGlmICdOdWxsUG9pbnRlckV4Y2VwdGlvbicgaW4gZXhjLmZ1bGxfbmFtZToKICAgICAgICAgICAgICAgICMgbm8gcmVzdWx0cyBsZWFkcyB0byBhIE51bGxQb2ludGVyRXhjZXB0aW9uLgogICAgICAgICAgICAgICAgIyB0aGlzIGlzIHByb2JhYmx5IGEgYnVnIG9uIHRoZSBKYXZhIHNpZGUsIGJ1dCB0aGlzCiAgICAgICAgICAgICAgICAjIGhhcHBlbnMgd2l0aCBzb21lIHJlc291cmNlcyBhbmQgbXVzdCBiZSBtYW5hZ2VkLgogICAgICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgICAgIHJhaXNlCgogICAgICAgIGlmIGpzb25fc3RyZWFtLnN0YXR1c19jb2RlID09IDIwNDoKICAgICAgICAgICAgIyBubyBjb250ZW50CiAgICAgICAgICAgIHJldHVybiBbXQoKICAgICAgICBnZW9tZXRyeV9ub2RlcyA9IG1hcChOb2RlLmh5ZHJhdGUsIGFzc2VtYmxlZChqc29uX3N0cmVhbSkpCiAgICAgICAgbm9kZXMgPSBzZWxmLl9nZXRfZGF0YV9ub2RlcyhnZW9tZXRyeV9ub2RlcykKCiAgICAgICAgcmV0dXJuIG5vZGVzCgogICAgZGVmIF9nZXRfc2hhcGVfZnJvbV93a3Qoc2VsZiwgd2t0X3N0cmluZyk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzaGFwZSA9IHdrdF9mcm9tX3N0cmluZ19sb2FkZXIod2t0X3N0cmluZykKICAgICAgICBleGNlcHQgUmVhZGluZ0Vycm9yOgogICAgICAgICAgICByYWlzZSBJbnZhbGlkV0tURXJyb3IoCiAgICAgICAgICAgICAgICAnSW52YWxpZCBXS1Q6e30nLmZvcm1h"}}]
["844b5b8e939874e9040154207fe2b0b141ea265c-2","844b5b8e939874e9040154207fe2b0b141ea265c","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGVuY29kaW5nOiB1dGYtOCAtKi0KCiMgQ29weXJpZ2h0IDIwMTQsIFNpbW9uIEhhcnJpc29uCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCnRyeToKICAgIGZyb20gc2hhcGVseS5nZW9zIGltcG9ydCBSZWFkaW5nRXJyb3IKICAgIGZyb20gc2hhcGVseS53a3QgaW1wb3J0IGxvYWRzIGFzIHdrdF9mcm9tX3N0cmluZ19sb2FkZXIKZXhjZXB0IEltcG9ydEVycm9yOgogICAgcHJpbnQoIlBsZWFzZSBpbnN0YWxsIGV4dGVuc2lvbiByZXF1aXJlbWVudHMuIFNlZSBSRUFETUUucnN0LiIpCgpmcm9tIHB5Mm5lbyBpbXBvcnQgTm9kZSwgU2VydmVyUGx1Z2luCmZyb20gcHkybmVvLmVycm9yIGltcG9ydCBHcmFwaEVycm9yCmZyb20gcHkybmVvLnBhY2thZ2VzLmpzb25zdHJlYW0gaW1wb3J0IGFzc2VtYmxlZApmcm9tIHB5Mm5lby5leHQuc3BhdGlhbC5leGNlcHRpb25zIGltcG9ydCAoCiAgICBHZW9tZXRyeUV4aXN0c0Vycm9yLCBJbnZhbGlkV0tURXJyb3IsIExheWVyTm90Rm91bmRFcnJvciwKICAgIE5vZGVOb3RGb3VuZEVycm9yKQpmcm9tIHB5Mm5lby5leHQuc3BhdGlhbC51dGlsIGltcG9ydCBwYXJzZV9sYXRfbG9uZwoKCkVYVEVOU0lPTl9OQU1FID0gIlNwYXRpYWxQbHVnaW4iCldLVF9QUk9QRVJUWSA9ICJ3a3QiCk5BTUVfUFJPUEVSVFkgPSAiX3B5Mm5lb19nZW9tZXRyeV9uYW1lIgoKIyB3a3QgaW5kZXggY29uZmlnIGZvciB0aGUgY29udHJpYiBzcGF0aWFsIGV4dGVuc2lvbgpFWFRFTlNJT05fQ09ORklHID0gewogICAgJ2Zvcm1hdCc6ICdXS1QnLAogICAgJ25vZGVQcm9wZXJ0eU5hbWUnOiBXS1RfUFJPUEVSVFksCn0KCiMgc2hhcGUgaWRlbnRpZmllcnMKTVVMVElQT0xZR09OID0gJ011bHRpUG9seWdvbicKUE9JTlQgPSAnUG9pbnQnCgojIGEgYmFzZWxpbmUgbGFiZWwgc28gd2UgY2FuIHJldGlldmUgYWxsIGRhdGEgYWRkZWQgdmlhIHRoaXMgZXh0ZW5zaW9uCkRFRkFVTFRfTEFCRUwgPSAncHkybmVvX3NwYXRpYWwnCgoKY2xhc3MgU3BhdGlhbChTZXJ2ZXJQbHVnaW4pOgogICAgIiIiIEFuIEFQSSBleHRlbnNpb24gdG8gcHkybmVvIGZvciBXS1QgdHlwZSBHSVMgb3BlcmF0aW9ucy4KICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGdyYXBoKToKICAgICAgICBzdXBlcihTcGF0aWFsLCBzZWxmKS5fX2luaXRfXyhncmFwaCwgRVhURU5TSU9OX05BTUUpCgogICAgZGVmIF9nZXRfZGF0YV9ub2RlcyhzZWxmLCBnZW9tZXRyeV9ub2Rlcyk6CiAgICAgICAgaWRzID0gW24uX2lkIGZvciBuIGluIGdlb21ldHJ5X25vZGVzXQogICAgICAgIHF1ZXJ5ID0gKAogICAgICAgICAgICAiTUFUQ0ggKG4pLVs6TE9DQVRFU10tPihkYXRhX25vZGUpICIKICAgICAgICAgICAgIldIRVJFIGlkKG4pIElOIHtpZHN9IFJFVFVSTiBkYXRhX25vZGUgIgogICAgICAgICkKCiAgICAgICAgcGFyYW1zID0gewogICAgICAgICAgICAnaWRzJzogaWRzLAogICAgICAgIH0KCiAgICAgICAgcmVzdWx0cyA9IHNlbGYuZ3JhcGguY3lwaGVyLmV4ZWN1dGUocXVlcnksIHBhcmFtcykKICAgICAgICBub2RlcyA9IFtyZWNvcmRbMF0gZm9yIHJlY29yZCBpbiByZXN1bHRzXQoKICAgICAgICByZXR1cm4gbm9kZXMKCiAgICBkZWYgX2V4ZWN1dGVfc3BhdGlhbF9yZXF1ZXN0KHNlbGYsIHJlc291cmNlLCBzcGF0aWFsX3BheWxvYWQpOgogICAgICAgIHRyeToKICAgICAgICAgICAganNvbl9zdHJlYW0gPSByZXNvdXJjZS5wb3N0KHNwYXRpYWxfcGF5bG9hZCkKICAgICAgICBleGNlcHQgR3JhcGhFcnJvciBhcyBleGM6CiAgICAgICAgICAgIGlmICdOdWxsUG9pbnRlckV4Y2VwdGlvbicgaW4gZXhjLmZ1bGxfbmFtZToKICAgICAgICAgICAgICAgICMgbm8gcmVzdWx0cyBsZWFkcyB0byBhIE51bGxQb2ludGVyRXhjZXB0aW9uLgogICAgICAgICAgICAgICAgIyB0aGlzIGlzIHByb2JhYmx5IGEgYnVnIG9uIHRoZSBKYXZhIHNpZGUsIGJ1dCB0aGlzCiAgICAgICAgICAgICAgICAjIGhhcHBlbnMgd2l0aCBzb21lIHJlc291cmNlcyBhbmQgbXVzdCBiZSBtYW5hZ2VkLgogICAgICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgICAgIHJhaXNlCgogICAgICAgIGlmIGpzb25fc3RyZWFtLnN0YXR1c19jb2RlID09IDIwNDoKICAgICAgICAgICAgIyBubyBjb250ZW50CiAgICAgICAgICAgIHJldHVybiBbXQoKICAgICAgICBnZW9tZXRyeV9ub2RlcyA9IG1hcChOb2RlLmh5ZHJhdGUsIGFzc2VtYmxlZChqc29uX3N0cmVhbSkpCiAgICAgICAgbm9kZXMgPSBzZWxmLl9nZXRfZGF0YV9ub2RlcyhnZW9tZXRyeV9ub2RlcykKCiAgICAgICAgcmV0dXJuIG5vZGVzCgogICAgZGVmIF9nZXRfc2hhcGVfZnJvbV93a3Qoc2VsZiwgd2t0X3N0cmluZyk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzaGFwZSA9IHdrdF9mcm9tX3N0cmluZ19sb2FkZXIod2t0X3N0cmluZykKICAgICAgICBleGNlcHQgUmVhZGluZ0Vycm9yOgogICAgICAgICAgICByYWlzZSBJbnZhbGlkV0tURXJyb3IoCiAgICAgICAgICAgICAgICAnSW52YWxpZCBXS1Q6e30nLmZvcm1hdCh3a3Rfc3RyaW5nKQogICAgICAgICAgICApCgogICAgICAgIHJldHVybiBzaGFwZQoKICAgIGRlZiBfZ2V0X3drdF9mcm9tX3NoYXBlKHNlbGYsIHNoYXBlKToKICAgICAgICBpZiBzaGFwZS50eXBlID09IFBPSU5UOgogICAgICAgICAgICAjIHdlIGlnbm9yZSB0aGUgYHRvX3drdGAgYXBpIGJlY2F1c2Ugb2Ygcm91bmRpbmcgcHJlY2lzaW9uIGVycm9ycwogICAgICAgICAgICAjIGZyb20gc2hhcGVseSBhbmQgYmVjYXVzZSBvZiBuZW80aiBkcm9wcGluZyB0cmFpbGluZyB6ZXJvcywgYW5kCiAgICAgICAgICAgICMgd2UgTUFUQ0ggb24gd2t0IHN0cmluZ3MuCiAgICAgICAgICAgIHdrdCA9ICdQT0lOVCAoe3h9IHt5fSknLmZvcm1hdCh4PXNoYXBlLngsIHk9c2hhcGUueSkKICAgICAgICBlbHNlOgogICAgICAgICAgICB3a3QgPSBzaGFwZS53a3QKCiAgICAgICAgcmV0dXJuIHdrdAoKICAgIGRlZiBfZ2VvbWV0cnlfZXhpc3RzKHNlbGYsIHNoYXBlLCBnZW9tZXRyeV9uYW1lKToKICAgICAgICBtYXRjaCA9ICJNQVRDSCAobjp7bGFiZWx9ICIuZm9ybWF0KGxhYmVsPXNoYXBlLnR5cGUpCiAgICAgICAgcXVlcnkgPSBtYXRjaCArICJ7X3B5Mm5lb19nZW9tZXRyeV9uYW1lOntnZW9tZXRyeV9uYW1lfX0pIFJFVFVSTiBuIgogICAgICAgIHBhcmFtcyA9IHsKICAgICAgICAgICAgJ2dlb21ldHJ5X25hbWUnOiBnZW9tZXRyeV9uYW1lLAogICAgICAgICAgICAnd2t0Jzogc2hhcGUud2t0LAogICAgICAgIH0KCiAgICAgICAgZXhpc3RzID0gc2VsZi5ncmFwaC5jeXBoZXIuZXhlY3V0ZShxdWVyeSwgcGFyYW1zKQoKICAgICAgICByZXR1cm4gYm9vbChleGlzdHMpCgogICAgZGVmIF9sYXllcl9leGlzdHMoc2VsZiwgbGF5ZXJfbmFtZSk6CiAgICAgICAgcXVlcnkgPSAiTUFUQ0ggKGwge2xheWVyOntsYXllcl9uYW1lfX0pPC1bOkxBWUVSXS0oKSBSRVRVUk4gbCIKICAgICAgICBwYXJhbXMgPSB7J2xheWVyX25hbWUnOiBsYXllcl9uYW1lfQogICAgICAgIGV4aXN0cyA9IHNlbGYuZ3JhcGguY3lwaGVyLmV4ZWN1dGUocXVlcnksIHBhcmFtcykKCiAgICAgICAgcmV0dXJuIGJvb2woZXhpc3RzKQoKICAgIGRlZiBjcmVhdGVfbGF5ZXIoc2VsZiwgbGF5ZXJfbmFtZSk6CiAgICAgICAgIiIiIENyZWF0ZSBhIExheWVyIHRvIGFkZCBnZW9tZXRyaWVzIHRvLiBJZiBhIExheWVyIHdpdGggdGhlCiAgICAgICAgbmFtZSBwcm9wZXJ0eSB2YWx1ZSBvZiBgYGxheWVyX25hbWVgYCBhbHJlYWR5IGV4aXN0cywgbm90aGluZwogICAgICAgIGhhcHBlbnMuCgogICAgICAgICIiIgogICAgICAgIHJlc291cmNlID0gc2VsZi5yZXNvdXJjZXNbJ2FkZEVkaXRhYmxlTGF5ZXInXQogICAgICAgIHNwYXRpYWxfZGF0YSA9IGRpY3QobGF5ZXI9bGF5ZXJfbmFtZSwgKipFWFRFTlNJT05fQ09ORklHKQogICAgICAgIHJhdyA9IHJlc291cmNlLnBvc3Qoc3BhdGlhbF9kYXRhKQogICAgICAgIGxheWVyID0gYXNzZW1ibGVkKHJhdykKCiAgICAgICAgcmV0dXJuIGxheWVyCgogICAgZGVmIGdldF9sYXllcihzZWxmLCBsYXllcl9uYW1lKToKICAgICAgICByZXNvdXJjZSA9IHNlbGYucmVzb3VyY2VzWydnZXRMYXllciddCiAgICAgICAgc3BhdGlhbF9kYXRhID0gZGljdChsYXllcj1sYXllcl9uYW1lLCAqKkVYVEVOU0lPTl9DT05GSUcpCiAgICAgICAgcmF3ID0gcmVzb3VyY2UucG9zdChzcGF0aWFsX2RhdGEpCiAgICAgICAgbGF5ZXIgPSBhc3NlbWJsZWQocmF3KQoKICAgICAgICByZXR1cm4gbGF5ZXIKCiAgICBkZWYgZGVsZXRlX2xheWVyKHNlbGYsIGxheWVyX25hbWUpOgogICAgICAgICIiIiBSZW1vdmUgYSBHSVMgbWFwIExheWVyLgoKICAgICAgICBUaGlzIHdpbGwgcmVtb3ZlIGEgcmVwcmVzZW50YXRpb24gb2YgYSBHSVMgbWFwIExheWVyIGZyb20gdGhlIE5lbzRqCiAgICAgICAgZGF0YSBzdG9yZSAtIGl0IHdpbGwgbm90IHJlbW92ZSBhbnkgbm9kZXMgeW91IG1heSBoYXZlIGFkZGVkIHRvIGl0LgoKICAgICAgICBUaGUgb3BlcmF0aW9uIHJlbW92ZXMgdGhlIGxheWVyIGRhdGEgZnJvbSB0aGUgaW50ZXJuYWwgR0lTIFItdHJlZQogICAgICAgIG1vZGVsIGFuZCByZW1vdmVzIHRoZSBsYXllcidzIGxhYmVsIGZyb20gYWxsIG5vZGVzIHRoYXQgZXhpc3Qgb24gaXQuCiAgICAgICAgSXQgZG9lcyBub3QgZGVzdHJveSBhbnkgTm9kZXMgb24gdGhlIERCIC0gdXNlIHRoZSBzdGFuZGFyZCBweTJuZW8KICAgICAgICBsaWJyYXJ5IGZvciB0aGVzZSBhY3Rpb25zLgoKICAgICAgICA6UmFpc2VzOgogICAgICAgICAgICBMYXllck5vdEZvdW5kRXJyb3IgaWYgdGhlIGluZGV4IGRvZXMgbm90IGV4aXN0LgoKICAgICAgICAiIiIKICAgICAgICBpZiBub3Qgc2VsZi5fbGF5ZXJfZXhpc3RzKGxheWVyX25hbWUpOgogICAgICAgICAgICByYWlzZSBMYXllck5vdEZvdW5kRXJyb3IoCiAgICAgICAgICAgICAgICAnTGF5ZXIgTm90IEZvdW5kOiAie30iJy5mb3JtYXQobGF5ZXJfbmFtZSkKICAgICAgICAgICAgKQoKICAgICAgICBncmFwaCA9IHNlbGYuZ3JhcGgKCiAgICAgICAgIyBUaGVyZSBpcyBubyBSZXNvdXJjZSBmb3IgdGhpcyBhY3Rpb24gc28gaW4gdGhlIG1lYW50aW1lIHdlIHVzZQogICAgICAgICMgdGhlIGNvcmUgcHkybmVvIGN5cGhlciBhcGkuCgogICAgICAgICMgcmVtb3ZlIGxhYmVscyBhbmQgcHJvcGVydGllcyBvbiBOb2RlcyByZWxhdGluZyB0byB0aGlzIGxheWVyCiAgICAgICAgcXVlcnkgPSAoCiAgICAgICAgICAgICJNQVRDSCAobjp7bGF5ZXJfbmFtZX0pICIKICAgICAgICAgICAgIlJFTU9WRSBuOntkZWZhdWx0X2xhYmVsfSAiCiAgICAgICAgICAgICJSRU1PVkUgbjp7bGF5ZXJfbmFtZX0gIgogICAgICAgICAgICAiUkVNT1ZFIG46e3BvaW50X2xhYmVsfSAiCiAgICAgICAgICAgICJSRU1PVkUgbjp7bXVsdGlwb2x5Z29uX2xhYmVsfSAiCiAgICAgICAgICAgICJSRU1PVkUgbi57aW50ZXJuYWxfbmFtZX0iLmZvcm1hdCgKICAgICAgICAgICAgICAgIGxheWVyX25hbWU9bGF5ZXJfbmFtZSwgZGVmYXVsdF9sYWJlbD1ERUZBVUxUX0xBQkVMLAogICAgICAgICAgICAgICAgcG9pbnRfbGFiZWw9UE9JTlQsIG11bHRpcG9seWdvbl9sYWJlbD1NVUxUSVBPTFlHT04sCiAgICAgICAgICAgICAgICBpbnRlcm5hbF9uYW1lPU5BTUVfUFJPUEVSVFkKICAgICAgICAgICAgKQogICAgICAgICkKCiAgICAgICAgZ3JhcGguY3lwaGVyLmV4ZWN1dGUocXVlcnkpCgogICAgICAgICMgcmVtb3ZlIHRoZSBib3VuZGluZyBib3gsIG1ldGFkYXRhIGFuZCByb290IGZyb20gdGhlIHJ0cmVlIGluZGV4CiAgICAgICAgcXVlcnkgPSAoCiAgICAgICAgICAgICJNQVRDSCAobCB7IGxheWVyOntsYXllcl9uYW1lfSB9KS1bcl9sYXllcjpMQVlFUl0tKCksICIKICAgICAgICAgICAgIihtZXRhZGF0YSk8LVtyX21ldGE6UlRSRUVfTUVUQURBVEFdLShsKSwgIgogICAgICAgICAgICAiKCktW2xvY2F0ZV9yZWw6TE9DQVRFU10tKGdlb21ldHJ5X25vZGUpLVtyX3JlZjpSVFJFRV9SRUZFUkVOQ0VdLSIKICAgICAgICAgICAgIihib3VuZGluZ19ib3gpLVtyX3Jvb3Q6UlRSRUVfUk9PVF0tKGwpICIKICAgICAgICAgICAgIkRFTEVURSBsb2NhdGVfcmVsLCByX21ldGEsIHJfbGF5ZXIsIHJfcmVmLCByX3Jvb3QsICIKICAgICAgICAgICAgIm1ldGFkYXRhLCBnZW9tZXRyeV9ub2RlLCBib3VuZGluZ19ib3gsIGwiCiAgICAgICAgKQoKICAgICAgICBwYXJhbXMgPSB7CiAgICAgICAgICAgICdsYXllcl9uYW1lJzogbGF5ZXJfbmFtZQogICAgICAgIH0KCiAgICAgICAgZ3JhcGguY3lwaGVyLmV4ZWN1dGUocXVlcnksIHBhcmFtcykKCiAgICBkZWYgY3JlYXRlX2dlb21ldHJ5KAogICAgICAgICAgICBzZWxmLCBnZW9tZXRyeV9uYW1lLCB3a3Rfc3RyaW5nLCBsYXllcl9uYW1lLCBsYWJlbHM9Tm9uZSwKICAgICAgICAgICAgbm9kZV9pZD1Ob25lLCBzcGF0aWFsX2lkPU5vbmUpOgogICAgICAgICIiIiBDcmVhdGUgYSBnZW9tZXRyeSBvZiB0eXBlIFdlbGwgS25vd24gVGV4dCAoV0tUKS4KCiAgICAgICAgSW50ZXJuYWxseSB0aGlzIGNyZWF0ZXMgYSBub2RlIGluIHlvdXIgZ3JhcGggd2l0aCBhIHdrdCBwcm9wZXJ0eQogICAgICAgIGFuZCBhbHNvIGFkZHMgaXQgdG8gYSBHSVMgbWFwIGxheWVyIChhbiBpbmRleCkuIE9wdGlvbmFseSBhZGQKICAgICAgICBMYWJlbHMgdG8gdGhlIE5vZGUuCgogICAgICAgIDpQYXJhbXM6CiAgICAgICAgICAgIGdlb21ldHJ5X25hbWUgOiBzdHIKICAgICAgICAgICAgICAgIEEgdW5pcXVlIG5hbWUgZm9yIHRoZSBnZW9tZXRyeS4KICAgICAgICAgICAgd2t0X3N0cmluZyA6IHN0cgogICAgICAgICAgICAgICAgQSBXZWxsIEtub3duIFRleHQgc3RyaW5nIG9mIGFueSBnZW9tZXRyeQogICAgICAgICAgICBsYXllcl9uYW1lIDogc3RyCiAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgdG8gYWRkIHRoZSBnZW9tZXRyeSB0by4KICAgICAgICAgICAgbGFiZWxzIDogbGlzdAogICAgICAgICAgICAgICAgT3B0aW9uYWwgbGlzdCBvZiBMYWJlbCBuYW1lcyB0byBhcHBseSB0byB0aGUgZ2VvbWV0cnkgTm9kZS4KCiAgICAgICAgICAgIG5vZGVfaWQgOiBpbnQKICAgICAgICAgICAgICAgIE9wdGlvbmFsIC0gdGhlIGludGVybmFsIElEIHVzZWQgYnkgbmVvNGogdG8gdW5pcXVlbHkgaWRlbnRpZnkKICAgICAgICAgICAgICAgIGEgTm9kZS4gV2hlbiBwcm92aWRlZCwgYW4gdXBkYXRlIG9wZXJhdGlvbiBpbiB0aGUgYXBwbGljYXRpb24KICAgICAgICAgICAgICAgIGdyYXBoIHdpbGwgYmUgY2FycmllZCBvdXQgaW5zdGVhZCBvZiB0aGUgdXN1YWwgY3JlYXRlLCBtYWtpbmcKICAgICAgICAgICAgICAgIHRoaXMgTm9kZSBzcGF0aWFsbHkgYXdhcmUgYnkgYWRkaW5nIGEgJ3drdCcgcHJvcGVydHkgdG8gaXQuCiAgICAgICAgICAgICAgICBJdCBpcyB0aGVuIGFkZGVkIHRvIHRoZSBMYXllciAoaW5kZXhlZCkgYXMgbm9ybWFsLgoKICAgICAgICA6UmFpc2VzOgogICAgICAgICAgICBMYXllck5vdEZvdW5kRXJyb3IgaWYgdGhlIGluZGV4IGRvZXMgbm90IGV4aXN0LgogICAgICAgICAgICBJbnZhbGlkV0tURXJyb3IgaWYgdGhlIFdLVCBjYW5ub3QgYmUgcmVhZC4KCiAgICAgICAgIiIiCiAgICAgICAgaWYgbm90IHNlbGYuX2xheWVyX2V4aXN0cyhsYXllcl9uYW1lKToKICAgICAgICAgICAgcmFpc2UgTGF5ZXJOb3RGb3VuZEVycm9yKAogICAgICAgICAgICAgICAgJ0xheWVyIE5vdCBGb3VuZDogInswfSIuJywKICAgICAgICAgICAgICAgICdVc2UgYGBjcmVhdGVfbGF5ZXIobGF5ZXJfbmFtZT0iezB9IiIpYGAgZmlyc3QuJy5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgbGF5ZXJfbmFtZSkKICAgICAgICAgICAgKQoKICAgICAgICBzaGFwZSA9IHNlbGYuX2dldF9zaGFwZV9mcm9tX3drdCh3a3Rfc3RyaW5nKQoKICAgICAgICBpZiBzZWxmLl9nZW9tZXRyeV9leGlzdHMoc2hhcGUsIGdlb21ldHJ5X25hbWUpOgogICAgICAgICAgICByYWlzZSBHZW9tZXRyeUV4aXN0c0Vycm9yKAogICAgICAgICAgICAgICAgJ2dlb21ldHJ5IGFscmVhZHkgZXhpc3RzLiBpZ25vcmluZyByZXF1ZXN0LicKICAgICAgICAgICAgKQoKICAgICAgICBncmFwaCA9IHNlbGYuZ3JhcGgKICAgICAgICByZXNvdXJjZSA9IHNlbGYucmVzb3VyY2VzWydhZGRHZW9tZXRyeVdLVFRvTGF5ZXInXQoKICAgICAgICBsYWJlbHMgPSBsYWJlbHMgb3IgW10KICAgICAgICBsYWJlbHMuZXh0ZW5kKFtERUZBVUxUX0xBQkVMLCBsYXllcl9uYW1lLCBzaGFwZS50eXBlXSkKICAgICAgICB3a3QgPSBzZWxmLl9nZXRfd2t0X2Zyb21fc2hhcGUoc2hhcGUpCgogICAgICAgIHBhcmFtcyA9IHsKICAgICAgICAgICAgTkFNRV9QUk9QRVJUWTogZ2VvbWV0cnlfbmFtZSwKICAgICAgICB9CgogICAgICAgIGlmIG5vZGVfaWQ6CiAgICAgICAgICAgIHF1ZXJ5ID0gJ01BVENIIChuKSBXSEVSRSBpZChuKSA9IHtub2RlX2lkfSBSRVRVUk4gbicKICAgICAgICAgICAgcGFyYW1zID0geydub2RlX2lkJzogbm9kZV9pZH0KICAgICAgICAgICAgcmVzdWx0cyA9IGdyYXBoLmN5cGhlci5leGVjdXRlKHF1ZXJ5LCBwYXJhbXMpCiAgICAgICAgICAgIGlmIG5vdCByZXN1bHRzOgogICAgICAgICAgICAgICAgcmFpc2UgTm9kZU5vdEZvdW5kRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgJ05vZGUgbm90IGZvdW5kOiAie30iJy5mb3JtYXQobm9kZV9pZCkKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgIHJlY29yZCA9IHJlc3VsdHNbMF0KICAgICAgICAgICAgbm9kZSA9IHJlY29yZFswXQogICAgICAgICAgICBub2RlW05BTUVfUFJPUEVSVFldID0gZ2VvbWV0cnlfbmFtZQogICAgICAgICAgICBub2RlLmFkZF9sYWJlbHMoKnR1cGxlKGxhYmVscykpCiAgICAgICAgICAgIG5vZGUucHVzaCgpCgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG5vZGUgPSBOb2RlKCpsYWJlbHMsICoqcGFyYW1zKQogICAgICAgICAgICBncmFwaC5jcmVhdGUobm9kZSkKCiAgICAgICAgc3BhdGlhbF9kYXRhID0gewogICAgICAgICAgICAnZ2VvbWV0cnknOiB3a3QsCiAgICAgICAgICAgICdsYXllcic6IGxheWVyX25hbWUsCiAgICAgICAgfQoKICAgICAgICByZXNvdXJjZS5wb3N0KHNwYXRpYWxfZGF0YSkKCiAgICAgICAgIyBub3cgcmVsYXRlIHRoZSBnZW9tZXRyeSB0byBvdXIgYXBwbGljYXRpb24gbm9kZQogICAgICAgIHF1ZXJ5ID0gKAogICAgICAgICAgICAiTUFUQ0ggKGwgeyBsYXllcjp7bGF5ZXJfbmFtZX0gfSk8LVtyX2xheWVyOkxBWUVSXS0iCiAgICAgICAgICAgICIocm9vdCB7IG5hbWU6J3NwYXRpYWxfcm9vdCcgfSksICIKICAgICAgICAgICAgIihiYm94KS1bcl9yb290OlJUUkVFX1JPT1RdLShsKSwgIgogICAgICAgICAgICAiKGdlb21ldHJ5X25vZGUpLVtyX3JlZjpSVFJFRV9SRUZFUkVOQ0VdLShiYm94KSwgIgogICAgICAgICAgICAiKGFwcGxpY2F0aW9uX25vZGUgeyBfcHkybmVvX2dlb21ldHJ5X25hbWU6e2dlb21ldHJ5X25hbWV9IH0pICIKICAgICAgICAgICAgIldIRVJFIGdlb21ldHJ5X25vZGUud2t0ID0ge3drdH0gIgogICAgICAgICAgICAiQ1JFQVRFIFVOSVFVRSAoZ2VvbWV0cnlfbm9kZSktWzpMT0NBVEVTXS0+KGFwcGxpY2F0aW9uX25vZGUpIgogICAgICAgICkKCiAgICAgICAgcGFyYW1zID0gewogICAgICAgICAgICAnd2t0Jzogd2t0LAogICAgICAgICAgICAnbGF5ZXJfbmFtZSc6IGxheWVyX25hbWUsCiAgICAgICAgICAgICdnZW9tZXRyeV9uYW1lJzogZ2VvbWV0cnlfbmFtZSwKICAgICAgICB9CgogICAgICAgIGdyYXBoLmN5cGhlci5leGVjdXRlKHF1ZXJ5LCBwYXJhbXMpCgogICAgZGVmIGRlbGV0ZV9nZW9tZXRyeShzZWxmLCBnZW9tZXRyeV9uYW1lLCB3a3Rfc3RyaW5nLCBsYXllcl9uYW1lKToKICAgICAgICAiIiIgUmVtb3ZlIGEgZ2VvbWV0cnkgbm9kZSBmcm9tIGEgR0lTIG1hcCBsYXllci4KCiAgICAgICAgOlBhcmFtczoKICAgICAgICAgICAgZ2VvbWV0cnlfbmFtZSA6IHN0cgogICAgICAgICAgICAgICAgVGhlIHVuaXF1ZSBuYW1lIG9mIHRoZSBnZW9tZXRyeSB0byBkZWxldGUuCiAgICAgICAgICAgIHdrdF9zdHJpbmcgOiBzdHIKICAgICAgICAgICAgICAgIEEgV2VsbCBLbm93biBUZXh0IHN0cmluZyBvZiBhbnkgZ2VvbWV0cnkKICAgICAgICAgICAgbGF5ZXJfbmFtZSA6IHN0cgogICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGxheWVyL2luZGV4IHRvIHJlbW92ZSB0aGUgZ2VvbWV0cnkgZnJvbS4KCiAgICAgICAgOlJhaXNlczoKICAgICAgICAgICAgTGF5ZXJOb3RGb3VuZEVycm9yIGlmIHRoZSBpbmRleCBkb2VzIG5vdCBleGlzdC4KICAgICAgICAgICAgSW52YWxpZFdLVEVycm9yIGlmIHRoZSBXS1QgY2Fubm90IGJlIHJlYWQuCgogICAgICAgICIiIgogICAgICAgIGlmIG5vdCBzZWxmLl9sYXllcl9leGlzdHMobGF5ZXJfbmFtZSk6CiAgICAgICAgICAgIHJhaXNlIExheWVyTm90Rm91bmRFcnJvcigKICAgICAgICAgICAgICAgICdMYXllciBOb3QgRm91bmQ6ICJ7fSInLmZvcm1hdChsYXllcl9uYW1lKQogICAgICAgICAgICApCgogICAgICAgIGdyYXBoID0gc2VsZi5ncmFwaAogICAgICAgIHNoYXBlID0gc2VsZi5fZ2V0X3NoYXBlX2Zyb21fd2t0KHdrdF9zdHJpbmcpCgogICAgICAgICMgVGhlcmUgaXMgbm8gUmVzb3VyY2UgZm9yIHRoaXMgYWN0aW9uIHNvIGluIHRoZSBtZWFudGltZSB3ZSB1c2UKICAgICAgICAjIHRoZSBjb3JlIHB5Mm5lbyBjeXBoZXIgYXBpLgoKICAgICAgICAjIHJlbW92ZSB0aGUgbm9kZSBmcm9tIHRoZSBncmFwaAogICAgICAgIG1hdGNoID0gIk1BVENIIChuOntsYWJlbH0iLmZvcm1hdChsYWJlbD1zaGFwZS50eXBlKQogICAgICAgIHF1ZXJ5ID0gbWF0Y2ggKyAoCiAgICAgICAgICAgICJ7IF9weTJuZW9fZ2VvbWV0cnlfbmFtZTp7Z2VvbWV0cnlfbmFtZX0gfSkgIgogICAgICAgICAgICAiT1BUSU9OQUwgTUFUQ0ggbjwtW3JdLSgpICIKICAgICAgICAgICAgIkRFTEVURSByLCBuIgogICAgICAgICkKICAgICAgICBwYXJhbXMgPSB7CiAgICAgICAgICAgICdsYWJlbCc6IHNoYXBlLnR5cGUsCiAgICAgICAgICAgICdnZW9tZXRyeV9uYW1lJzogZ2VvbWV0cnlfbmFtZSwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIH0KICAgICAgICBncmFwaC5jeXBoZXIuZXhlY3V0ZShxdWVyeSwgcGFyYW1zKQoKICAgICAgICAjIHRpZHkgdXAgdGhlIGluZGV4LiBUaGlzIHdpbGwgcmVtb3ZlIHRoZSBub2RlLAo8fGZpbV9lbmR8Pg=="]
["844b5b8e939874e9040154207fe2b0b141ea265c-3","844b5b8e939874e9040154207fe2b0b141ea265c",{"$cut":{"chars":19172,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGVuY29kaW5nOiB1dGYtOCAtKi0KCiMgQ29weXJpZ2h0IDIwMTQsIFNpbW9uIEhhcnJpc29uCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCnRyeToKICAgIGZyb20gc2hhcGVseS5nZW9zIGltcG9ydCBSZWFkaW5nRXJyb3IKICAgIGZyb20gc2hhcGVseS53a3QgaW1wb3J0IGxvYWRzIGFzIHdrdF9mcm9tX3N0cmluZ19sb2FkZXIKZXhjZXB0IEltcG9ydEVycm9yOgogICAgcHJpbnQoIlBsZWFzZSBpbnN0YWxsIGV4dGVuc2lvbiByZXF1aXJlbWVudHMuIFNlZSBSRUFETUUucnN0LiIpCgpmcm9tIHB5Mm5lbyBpbXBvcnQgTm9kZSwgU2VydmVyUGx1Z2luCmZyb20gcHkybmVvLmVycm9yIGltcG9ydCBHcmFwaEVycm9yCmZyb20gcHkybmVvLnBhY2thZ2VzLmpzb25zdHJlYW0gaW1wb3J0IGFzc2VtYmxlZApmcm9tIHB5Mm5lby5leHQuc3BhdGlhbC5leGNlcHRpb25zIGltcG9ydCAoCiAgICBHZW9tZXRyeUV4aXN0c0Vycm9yLCBJbnZhbGlkV0tURXJyb3IsIExheWVyTm90Rm91bmRFcnJvciwKICAgIE5vZGVOb3RGb3VuZEVycm9yKQpmcm9tIHB5Mm5lby5leHQuc3BhdGlhbC51dGlsIGltcG9ydCBwYXJzZV9sYXRfbG9uZwoKCkVYVEVOU0lPTl9OQU1FID0gIlNwYXRpYWxQbHVnaW4iCldLVF9QUk9QRVJUWSA9ICJ3a3QiCk5BTUVfUFJPUEVSVFkgPSAiX3B5Mm5lb19nZW9tZXRyeV9uYW1lIgoKIyB3a3QgaW5kZXggY29uZmlnIGZvciB0aGUgY29udHJpYiBzcGF0aWFsIGV4dGVuc2lvbgpFWFRFTlNJT05fQ09ORklHID0gewogICAgJ2Zvcm1hdCc6ICdXS1QnLAogICAgJ25vZGVQcm9wZXJ0eU5hbWUnOiBXS1RfUFJPUEVSVFksCn0KCiMgc2hhcGUgaWRlbnRpZmllcnMKTVVMVElQT0xZR09OID0gJ011bHRpUG9seWdvbicKUE9JTlQgPSAnUG9pbnQnCgojIGEgYmFzZWxpbmUgbGFiZWwgc28gd2UgY2FuIHJldGlldmUgYWxsIGRhdGEgYWRkZWQgdmlhIHRoaXMgZXh0ZW5zaW9uCkRFRkFVTFRfTEFCRUwgPSAncHkybmVvX3NwYXRpYWwnCgoKY2xhc3MgU3BhdGlhbChTZXJ2ZXJQbHVnaW4pOgogICAgIiIiIEFuIEFQSSBleHRlbnNpb24gdG8gcHkybmVvIGZvciBXS1QgdHlwZSBHSVMgb3BlcmF0aW9ucy4KICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGdyYXBoKToKICAgICAgICBzdXBlcihTcGF0aWFsLCBzZWxmKS5fX2luaXRfXyhncmFwaCwgRVhURU5TSU9OX05BTUUpCgogICAgZGVmIF9nZXRfZGF0YV9ub2RlcyhzZWxmLCBnZW9tZXRyeV9ub2Rlcyk6CiAgICAgICAgaWRzID0gW24uX2lkIGZvciBuIGluIGdlb21ldHJ5X25vZGVzXQogICAgICAgIHF1ZXJ5ID0gKAogICAgICAgICAgICAiTUFUQ0ggKG4pLVs6TE9DQVRFU10tPihkYXRhX25vZGUpICIKICAgICAgICAgICAgIldIRVJFIGlkKG4pIElOIHtpZHN9IFJFVFVSTiBkYXRhX25vZGUgIgogICAgICAgICkKCiAgICAgICAgcGFyYW1zID0gewogICAgICAgICAgICAnaWRzJzogaWRzLAogICAgICAgIH0KCiAgICAgICAgcmVzdWx0cyA9IHNlbGYuZ3JhcGguY3lwaGVyLmV4ZWN1dGUocXVlcnksIHBhcmFtcykKICAgICAgICBub2RlcyA9IFtyZWNvcmRbMF0gZm9yIHJlY29yZCBpbiByZXN1bHRzXQoKICAgICAgICByZXR1cm4gbm9kZXMKCiAgICBkZWYgX2V4ZWN1dGVfc3BhdGlhbF9yZXF1ZXN0KHNlbGYsIHJlc291cmNlLCBzcGF0aWFsX3BheWxvYWQpOgogICAgICAgIHRyeToKICAgICAgICAgICAganNvbl9zdHJlYW0gPSByZXNvdXJjZS5wb3N0KHNwYXRpYWxfcGF5bG9hZCkKICAgICAgICBleGNlcHQgR3JhcGhFcnJvciBhcyBleGM6CiAgICAgICAgICAgIGlmICdOdWxsUG9pbnRlckV4Y2VwdGlvbicgaW4gZXhjLmZ1bGxfbmFtZToKICAgICAgICAgICAgICAgICMgbm8gcmVzdWx0cyBsZWFkcyB0byBhIE51bGxQb2ludGVyRXhjZXB0aW9uLgogICAgICAgICAgICAgICAgIyB0aGlzIGlzIHByb2JhYmx5IGEgYnVnIG9uIHRoZSBKYXZhIHNpZGUsIGJ1dCB0aGlzCiAgICAgICAgICAgICAgICAjIGhhcHBlbnMgd2l0aCBzb21lIHJlc291cmNlcyBhbmQgbXVzdCBiZSBtYW5hZ2VkLgogICAgICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgICAgIHJhaXNlCgogICAgICAgIGlmIGpzb25fc3RyZWFtLnN0YXR1c19jb2RlID09IDIwNDoKICAgICAgICAgICAgIyBubyBjb250ZW50CiAgICAgICAgICAgIHJldHVybiBbXQoKICAgICAgICBnZW9tZXRyeV9ub2RlcyA9IG1hcChOb2RlLmh5ZHJhdGUsIGFzc2VtYmxlZChqc29uX3N0cmVhbSkpCiAgICAgICAgbm9kZXMgPSBzZWxmLl9nZXRfZGF0YV9ub2RlcyhnZW9tZXRyeV9ub2RlcykKCiAgICAgICAgcmV0dXJuIG5vZGVzCgogICAgZGVmIF9nZXRfc2hhcGVfZnJvbV93a3Qoc2VsZiwgd2t0X3N0cmluZyk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzaGFwZSA9IHdrdF9mcm9tX3N0cmluZ19sb2FkZXIod2t0X3N0cmluZykKICAgICAgICBleGNlcHQgUmVhZGluZ0Vycm9yOgogICAgICAgICAgICByYWlzZSBJbnZhbGlkV0tURXJyb3IoCiAgICAgICAgICAgICAgICAnSW52YWxpZCBXS1Q6e30nLmZvcm1h"}}]
["844b5b8e939874e9040154207fe2b0b141ea265c-4","844b5b8e939874e9040154207fe2b0b141ea265c",{"$cut":{"chars":21716,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGVuY29kaW5nOiB1dGYtOCAtKi0KCiMgQ29weXJpZ2h0IDIwMTQsIFNpbW9uIEhhcnJpc29uCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCnRyeToKICAgIGZyb20gc2hhcGVseS5nZW9zIGltcG9ydCBSZWFkaW5nRXJyb3IKICAgIGZyb20gc2hhcGVseS53a3QgaW1wb3J0IGxvYWRzIGFzIHdrdF9mcm9tX3N0cmluZ19sb2FkZXIKZXhjZXB0IEltcG9ydEVycm9yOgogICAgcHJpbnQoIlBsZWFzZSBpbnN0YWxsIGV4dGVuc2lvbiByZXF1aXJlbWVudHMuIFNlZSBSRUFETUUucnN0LiIpCgpmcm9tIHB5Mm5lbyBpbXBvcnQgTm9kZSwgU2VydmVyUGx1Z2luCmZyb20gcHkybmVvLmVycm9yIGltcG9ydCBHcmFwaEVycm9yCmZyb20gcHkybmVvLnBhY2thZ2VzLmpzb25zdHJlYW0gaW1wb3J0IGFzc2VtYmxlZApmcm9tIHB5Mm5lby5leHQuc3BhdGlhbC5leGNlcHRpb25zIGltcG9ydCAoCiAgICBHZW9tZXRyeUV4aXN0c0Vycm9yLCBJbnZhbGlkV0tURXJyb3IsIExheWVyTm90Rm91bmRFcnJvciwKICAgIE5vZGVOb3RGb3VuZEVycm9yKQpmcm9tIHB5Mm5lby5leHQuc3BhdGlhbC51dGlsIGltcG9ydCBwYXJzZV9sYXRfbG9uZwoKCkVYVEVOU0lPTl9OQU1FID0gIlNwYXRpYWxQbHVnaW4iCldLVF9QUk9QRVJUWSA9ICJ3a3QiCk5BTUVfUFJPUEVSVFkgPSAiX3B5Mm5lb19nZW9tZXRyeV9uYW1lIgoKIyB3a3QgaW5kZXggY29uZmlnIGZvciB0aGUgY29udHJpYiBzcGF0aWFsIGV4dGVuc2lvbgpFWFRFTlNJT05fQ09ORklHID0gewogICAgJ2Zvcm1hdCc6ICdXS1QnLAogICAgJ25vZGVQcm9wZXJ0eU5hbWUnOiBXS1RfUFJPUEVSVFksCn0KCiMgc2hhcGUgaWRlbnRpZmllcnMKTVVMVElQT0xZR09OID0gJ011bHRpUG9seWdvbicKUE9JTlQgPSAnUG9pbnQnCgojIGEgYmFzZWxpbmUgbGFiZWwgc28gd2UgY2FuIHJldGlldmUgYWxsIGRhdGEgYWRkZWQgdmlhIHRoaXMgZXh0ZW5zaW9uCkRFRkFVTFRfTEFCRUwgPSAncHkybmVvX3NwYXRpYWwnCgoKY2xhc3MgU3BhdGlhbChTZXJ2ZXJQbHVnaW4pOgogICAgIiIiIEFuIEFQSSBleHRlbnNpb24gdG8gcHkybmVvIGZvciBXS1QgdHlwZSBHSVMgb3BlcmF0aW9ucy4KICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGdyYXBoKToKICAgICAgICBzdXBlcihTcGF0aWFsLCBzZWxmKS5fX2luaXRfXyhncmFwaCwgRVhURU5TSU9OX05BTUUpCgogICAgZGVmIF9nZXRfZGF0YV9ub2RlcyhzZWxmLCBnZW9tZXRyeV9ub2Rlcyk6CiAgICAgICAgaWRzID0gW24uX2lkIGZvciBuIGluIGdlb21ldHJ5X25vZGVzXQogICAgICAgIHF1ZXJ5ID0gKAogICAgICAgICAgICAiTUFUQ0ggKG4pLVs6TE9DQVRFU10tPihkYXRhX25vZGUpICIKICAgICAgICAgICAgIldIRVJFIGlkKG4pIElOIHtpZHN9IFJFVFVSTiBkYXRhX25vZGUgIgogICAgICAgICkKCiAgICAgICAgcGFyYW1zID0gewogICAgICAgICAgICAnaWRzJzogaWRzLAogICAgICAgIH0KCiAgICAgICAgcmVzdWx0cyA9IHNlbGYuZ3JhcGguY3lwaGVyLmV4ZWN1dGUocXVlcnksIHBhcmFtcykKICAgICAgICBub2RlcyA9IFtyZWNvcmRbMF0gZm9yIHJlY29yZCBpbiByZXN1bHRzXQoKICAgICAgICByZXR1cm4gbm9kZXMKCiAgICBkZWYgX2V4ZWN1dGVfc3BhdGlhbF9yZXF1ZXN0KHNlbGYsIHJlc291cmNlLCBzcGF0aWFsX3BheWxvYWQpOgogICAgICAgIHRyeToKICAgICAgICAgICAganNvbl9zdHJlYW0gPSByZXNvdXJjZS5wb3N0KHNwYXRpYWxfcGF5bG9hZCkKICAgICAgICBleGNlcHQgR3JhcGhFcnJvciBhcyBleGM6CiAgICAgICAgICAgIGlmICdOdWxsUG9pbnRlckV4Y2VwdGlvbicgaW4gZXhjLmZ1bGxfbmFtZToKICAgICAgICAgICAgICAgICMgbm8gcmVzdWx0cyBsZWFkcyB0byBhIE51bGxQb2ludGVyRXhjZXB0aW9uLgogICAgICAgICAgICAgICAgIyB0aGlzIGlzIHByb2JhYmx5IGEgYnVnIG9uIHRoZSBKYXZhIHNpZGUsIGJ1dCB0aGlzCiAgICAgICAgICAgICAgICAjIGhhcHBlbnMgd2l0aCBzb21lIHJlc291cmNlcyBhbmQgbXVzdCBiZSBtYW5hZ2VkLgogICAgICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgICAgIHJhaXNlCgogICAgICAgIGlmIGpzb25fc3RyZWFtLnN0YXR1c19jb2RlID09IDIwNDoKICAgICAgICAgICAgIyBubyBjb250ZW50CiAgICAgICAgICAgIHJldHVybiBbXQoKICAgICAgICBnZW9tZXRyeV9ub2RlcyA9IG1hcChOb2RlLmh5ZHJhdGUsIGFzc2VtYmxlZChqc29uX3N0cmVhbSkpCiAgICAgICAgbm9kZXMgPSBzZWxmLl9nZXRfZGF0YV9ub2RlcyhnZW9tZXRyeV9ub2RlcykKCiAgICAgICAgcmV0dXJuIG5vZGVzCgogICAgZGVmIF9nZXRfc2hhcGVfZnJvbV93a3Qoc2VsZiwgd2t0X3N0cmluZyk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzaGFwZSA9IHdrdF9mcm9tX3N0cmluZ19sb2FkZXIod2t0X3N0cmluZykKICAgICAgICBleGNlcHQgUmVhZGluZ0Vycm9yOgogICAgICAgICAgICByYWlzZSBJbnZhbGlkV0tURXJyb3IoCiAgICAgICAgICAgICAgICAnSW52YWxpZCBXS1Q6e30nLmZvcm1h"}}]
["844b5b8e939874e9040154207fe2b0b141ea265c-5","844b5b8e939874e9040154207fe2b0b141ea265c",{"$cut":{"chars":23496,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGVuY29kaW5nOiB1dGYtOCAtKi0KCiMgQ29weXJpZ2h0IDIwMTQsIFNpbW9uIEhhcnJpc29uCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCnRyeToKICAgIGZyb20gc2hhcGVseS5nZW9zIGltcG9ydCBSZWFkaW5nRXJyb3IKICAgIGZyb20gc2hhcGVseS53a3QgaW1wb3J0IGxvYWRzIGFzIHdrdF9mcm9tX3N0cmluZ19sb2FkZXIKZXhjZXB0IEltcG9ydEVycm9yOgogICAgcHJpbnQoIlBsZWFzZSBpbnN0YWxsIGV4dGVuc2lvbiByZXF1aXJlbWVudHMuIFNlZSBSRUFETUUucnN0LiIpCgpmcm9tIHB5Mm5lbyBpbXBvcnQgTm9kZSwgU2VydmVyUGx1Z2luCmZyb20gcHkybmVvLmVycm9yIGltcG9ydCBHcmFwaEVycm9yCmZyb20gcHkybmVvLnBhY2thZ2VzLmpzb25zdHJlYW0gaW1wb3J0IGFzc2VtYmxlZApmcm9tIHB5Mm5lby5leHQuc3BhdGlhbC5leGNlcHRpb25zIGltcG9ydCAoCiAgICBHZW9tZXRyeUV4aXN0c0Vycm9yLCBJbnZhbGlkV0tURXJyb3IsIExheWVyTm90Rm91bmRFcnJvciwKICAgIE5vZGVOb3RGb3VuZEVycm9yKQpmcm9tIHB5Mm5lby5leHQuc3BhdGlhbC51dGlsIGltcG9ydCBwYXJzZV9sYXRfbG9uZwoKCkVYVEVOU0lPTl9OQU1FID0gIlNwYXRpYWxQbHVnaW4iCldLVF9QUk9QRVJUWSA9ICJ3a3QiCk5BTUVfUFJPUEVSVFkgPSAiX3B5Mm5lb19nZW9tZXRyeV9uYW1lIgoKIyB3a3QgaW5kZXggY29uZmlnIGZvciB0aGUgY29udHJpYiBzcGF0aWFsIGV4dGVuc2lvbgpFWFRFTlNJT05fQ09ORklHID0gewogICAgJ2Zvcm1hdCc6ICdXS1QnLAogICAgJ25vZGVQcm9wZXJ0eU5hbWUnOiBXS1RfUFJPUEVSVFksCn0KCiMgc2hhcGUgaWRlbnRpZmllcnMKTVVMVElQT0xZR09OID0gJ011bHRpUG9seWdvbicKUE9JTlQgPSAnUG9pbnQnCgojIGEgYmFzZWxpbmUgbGFiZWwgc28gd2UgY2FuIHJldGlldmUgYWxsIGRhdGEgYWRkZWQgdmlhIHRoaXMgZXh0ZW5zaW9uCkRFRkFVTFRfTEFCRUwgPSAncHkybmVvX3NwYXRpYWwnCgoKY2xhc3MgU3BhdGlhbChTZXJ2ZXJQbHVnaW4pOgogICAgIiIiIEFuIEFQSSBleHRlbnNpb24gdG8gcHkybmVvIGZvciBXS1QgdHlwZSBHSVMgb3BlcmF0aW9ucy4KICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGdyYXBoKToKICAgICAgICBzdXBlcihTcGF0aWFsLCBzZWxmKS5fX2luaXRfXyhncmFwaCwgRVhURU5TSU9OX05BTUUpCgogICAgZGVmIF9nZXRfZGF0YV9ub2RlcyhzZWxmLCBnZW9tZXRyeV9ub2Rlcyk6CiAgICAgICAgaWRzID0gW24uX2lkIGZvciBuIGluIGdlb21ldHJ5X25vZGVzXQogICAgICAgIHF1ZXJ5ID0gKAogICAgICAgICAgICAiTUFUQ0ggKG4pLVs6TE9DQVRFU10tPihkYXRhX25vZGUpICIKICAgICAgICAgICAgIldIRVJFIGlkKG4pIElOIHtpZHN9IFJFVFVSTiBkYXRhX25vZGUgIgogICAgICAgICkKCiAgICAgICAgcGFyYW1zID0gewogICAgICAgICAgICAnaWRzJzogaWRzLAo8fGZpbV9ob2xlfD4KCiAgICAgICAgcmV0dXJuIG5vZGVzCgogICAgZGVmIF9leGVjdXRlX3NwYXRpYWxfcmVxdWVzdChzZWxmLCByZXNvdXJjZSwgc3BhdGlhbF9wYXlsb2FkKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIGpzb25fc3RyZWFtID0gcmVzb3VyY2UucG9zdChzcGF0aWFsX3BheWxvYWQpCiAgICAgICAgZXhjZXB0IEdyYXBoRXJyb3IgYXMgZXhjOgogICAgICAgICAgICBpZiAnTnVsbFBvaW50ZXJFeGNlcHRpb24nIGluIGV4Yy5mdWxsX25hbWU6CiAgICAgICAgICAgICAgICAjIG5vIHJlc3VsdHMgbGVhZHMgdG8gYSBOdWxsUG9pbnRlckV4Y2VwdGlvbi4KICAgICAgICAgICAgICAgICMgdGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBvbiB0aGUgSmF2YSBzaWRlLCBidXQgdGhpcwogICAgICAgICAgICAgICAgIyBoYXBwZW5zIHdpdGggc29tZSByZXNvdXJjZXMgYW5kIG11c3QgYmUgbWFuYWdlZC4KICAgICAgICAgICAgICAgIHJldHVybiBbXQogICAgICAgICAgICByYWlzZQoKICAgICAgICBpZiBqc29uX3N0cmVhbS5zdGF0dXNfY29kZSA9PSAyMDQ6CiAgICAgICAgICAgICMgbm8gY29udGVudAogICAgICAgICAgICByZXR1cm4gW10KCiAgICAgICAgZ2VvbWV0cnlfbm9kZXMgPSBtYXAoTm9kZS5oeWRyYXRlLCBhc3NlbWJsZWQoanNvbl9zdHJlYW0pKQogICAgICAgIG5vZGVzID0gc2VsZi5fZ2V0X2RhdGFfbm9kZXMoZ2VvbWV0cnlfbm9kZXMpCgogICAgICAgIHJldHVybiBub2RlcwoKICAgIGRlZiBfZ2V0X3NoYXBlX2Zyb21fd2t0KHNlbGYsIHdrdF9zdHJpbmcpOgogICAgICAgIHRyeToKICAgICAgICAgICAgc2hhcGUgPSB3a3RfZnJvbV9zdHJpbmdfbG9hZGVyKHdrdF9zdHJpbmcpCiAgICAgICAgZXhjZXB0IFJlYWRpbmdFcnJvcjoKICAgICAgICAgICAgcmFpc2UgSW52YWxpZFdLVEVycm9yKAogICAgICAgICAgICAgICAgJ0ludmFsaWQgV0tUOnt9Jy5mb3JtYXQod2t0X3N0cmluZykKICAgICAgICAgICAgKQoKICAgICAgICByZXR1cm4gc2hhcGUKCiAgICBkZWYgX2dldF93a3RfZnJvbV9zaGFwZShzZWxmLCBzaGFwZSk6CiAgICAgICAgaWYgc2hh"}}]
["f290768d1eff432d3e0f319a6f940a3b03ed74cb-1","f290768d1eff432d3e0f319a6f940a3b03ed74cb","PHxmaW1fcHJlZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAoKaW1wb3J0IG9zLCB0aW1lLCBzb2NrZXQKCmZyb20gbXBhcnRzLm1hbmFnZXIgaW1wb3J0IFRhc2sKZnJvbSBtcGFydHMuaG9zdCBpbXBvcnQgQ0FQVFVSRSwgRElTQ0FSRCwgU1RERVJSCmZyb20gbXBhcnRzLnV0aWwgaW1wb3J0ICoKCl9fYWxsX18gPSBbIkluaXREQiIsICJQb3N0Z3JlcyIsICJQR1ZhbCIsICJQR09wdHNQcm92aWRlciJdCgpVU0VfREVCVUdfTElCQyA9IEZhbHNlCgpjbGFzcyBJbml0REIoVGFzayk6CiAgICBfX2luZm9fXyA9IFsiaG9zdCIsICJkYmRpciJdCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBnKToKICAgICAgICBkYmRpciA9IHBnLmRiZGlyCiAgICAgICAgVGFzay5fX2luaXRfXyhzZWxmLCBob3N0ID0gaG9zdCwgZGJkaXIgPSBkYmRpcikKICAgICAgICBzZWxmLmhvc3QgPSBob3N0CiAgICAgICAgc2VsZi5kYmRpciA9IGRiZGlyCiAgICAgICAgc2VsZi5wZyA9IHBnCiAgICAgICAgc2VsZi50cnVzdCA9IFtdCgogICAgZGVmIGFkZFRydXN0KHNlbGYsIGhvc3QpOgogICAgICAgIHJvdXRlID0gc2VsZi5ob3N0LnJvdXRlVG9Ib3N0KGhvc3QpCiAgICAgICAgIyBQb3N0Z3JlcyByZXF1aXJlcyBhIENJRFIgYWRkcmVzcwogICAgICAgIGFpID0gc29ja2V0LmdldGFkZHJpbmZvKHJvdXRlLCBOb25lLCBzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgIHNlbGYudHJ1c3QuYXBwZW5kKGFpWzBdWzRdWzBdICsgIi8zMiIpCiAgICAgICAgcmV0dXJuIHNlbGYKCiAgICBkZWYgc3RhcnQoc2VsZik6CiAgICAgICAgZGJkaXIgPSBzZWxmLmRiZGlyCgogICAgICAgICMgSXMgdGhlcmUgYWxyZWFkeSBhIGRhdGFiYXNlIGhlcmU/CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLmhvc3Quci5yZWFkRmlsZShvcy5wYXRoLmpvaW4oZGJkaXIsICJQR19WRVJTSU9OIikpCiAgICAgICAgICAgICMgWWVwLiAgQWxsIHNldC4KICAgICAgICAgICAgc2VsZi5sb2coIkRhdGFiYXNlIGFscmVhZHkgZXhpc3RzIikKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CiAgICAgICAgICAgIHBhc3MKCiAgICAgICAgIyBDcmVhdGUgdGhlIGRpcmVjdG9yeQogICAgICAgIHNlbGYuaG9zdC5yLnJ1bihbIm1rZGlyIiwgIi1wIiwgZGJkaXJdKQoKICAgICAgICAjIEluaXRpYWxpemUgdGhlIGRhdGFiYXNlCiAgICAgICAgc2VsZi5wZy5pbml0ZGIoZGJkaXIpCgogICAgICAgICMgU2V0IHVwIHRydXN0CiAgICAgICAgZm9yIHQgaW4gc2VsZi50cnVzdDoKICAgICAgICAgICAgaGJhID0gIlxuaG9zdCBhbGwgYWxsICVzIHRydXN0XG4iICUgdAogICAgICAgICAgICBzZWxmLmhvc3Quci53cml0ZUZpbGUob3MucGF0aC5qb2luKGRiZGlyLCAicGdfaGJhLmNvbmYiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhiYSwgbm9DaGVjayA9IFRydWUsIGFwcGVuZCA9IFRydWUpCgpjbGFzcyBQb3N0Z3JlcyhUYXNrKToKICAgIF9faW5mb19fID0gWyJob3N0IiwgInBnUGF0aCIsICJwZ0J1aWxkIiwgImRiZGlyIiwgIm1hbGxvYyIsICIqZHluT3B0cyJdCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBnUGF0aCwgcGdCdWlsZCwgZGJkaXIsIG1hbGxvYyA9ICJnbGliYyIsICoqb3B0cyk6CiAgICAgICAgVGFzay5fX2luaXRfXyhzZWxmLCBob3N0ID0gaG9zdCkKICAgICAgICBzZWxmLmhvc3QgPSBob3N0CiAgICAgICAgc2VsZi5wZ1BhdGggPSBwZ1BhdGgKICAgICAgICBzZWxmLnBnQnVpbGQgPSBwZ0J1aWxkCiAgICAgICAgc2VsZi5kYmRpciA9IGRiZGlyCiAgICAgICAgc2VsZi5tYWxsb2MgPSBtYWxsb2MKICAgICAgICAjIEZvciBjdXN0b20gUG9zdGdyZXMgYnVpbGRzLCB3ZSBoYXZlIHRvIHBvaW50IGl0IHRvIGl0cwogICAgICAgICMgbGlicmFyaWVzIG9yIGl0IHdpbGwgdHJ5IHRvIHVzZSB0aGUgc3lzdGVtIGxpYnJhcmllcy4gIEF0CiAgICAgICAgIyBiZXN0LCBpdCB3aWxsIHByb2JhYmx5IGhhdmUgdGhlIHdyb25nIGRlZmF1bHQgc29ja2V0IHBhdGguCiAgICAgICAgc2VsZi5fX2FkZEVudiA9IHsiTERfTElCUkFSWV9QQVRIIiA6IG9zLnBhdGguam9pbihwZ1BhdGgsIHBnQnVpbGQsICJsaWIiKX0KICAgICAgICBpZiBVU0VfREVCVUdfTElCQzoKICAgICAgICAgICAgc2VsZi5fX2FkZEVudlsiTERfTElCUkFSWV9QQVRIIl0gKz0gIjovdXNyL2xpYi9kZWJ1ZyIKICAgICAgICBpZiBtYWxsb2MgPT0gImdsaWJjIjoKICAgICAgICAgICAgcGFzcwogICAgICAgIGVsaWYgbWFsbG9jID09ICJ0Y21hbGxvYyI6CiAgICAgICAgICAgIHNlbGYuX19hZGRFbnZbIkxEX1BSRUxPQUQiXSA9ICIvdXNyL2xpYi9saWJ0Y21hbGxvY19taW5pbWFsLnNvIgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVua25vd24gbWFsbG9jICVzIiAlIG1hbGxvYykKICAgICAgICBzZWxmLl9fdXNlck9wdHMgPSBvcHRzCiAgICAgICAgc2VsZi5keW5PcHRzID0ge30KCiAgICBkZWYgY29ubmluZm8oc2VsZiwgZnJvbUhvc3QsIGRibmFtZSA9IE5vbmUpOgogICAgICAgIGlmIGZyb21Ib3N0ID09IHNlbGYuaG9zdDoKICAgICAgICAgICAgY2kgPSBbXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGNpID0gWyJob3N0PSVzIiAlIChmcm9tSG9zdC5yb3V0ZVRvSG9zdChzZWxmLmhvc3QpKV0KICAgICAgICBpZiBkYm5hbWU6CiAgICAgICAgICAgIGNpLmFwcGVuZCgiZGJuYW1lPSVzIiAlIGRibmFtZSkKICAgICAgICByZXR1cm4gIiAiLmpvaW4oY2kpCgogICAgZGVmIGNvbm5hcmdzKHNlbGYsIGZyb21Ib3N0LCBkYm5hbWUgPSBOb25lKToKICAgICAgICBpZiBmcm9tSG9zdCA9PSBzZWxmLmhvc3Q6CiAgICAgICAgICAgIGNhID0gW10KICAgICAgICBlbHNlOgogICAgICAgICAgICBjYSA9IFsiLWgiLCBmcm9tSG9zdC5yb3V0ZVRvSG9zdChzZWxmLmhvc3QpXQogICAgICAgIGlmIGRibmFtZToKICAgICAgICAgICAgY2EuZXh0ZW5kKFsiLWQiLCBkYm5hbWVdKQogICAgICAgIHJldHVybiBjYQoKICAgIGRlZiBfX2JpbihzZWxmLCBuYW1lKToKICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYucGdQYXRoLCBzZWxmLnBnQnVpbGQsICJiaW4iLCBuYW1lKQoKICAgIGRlZiBpbml0ZGIoc2VsZiwgZGJkaXIpOgogICAgICAgIHNlbGYuaG9zdC5yLnJ1bihbc2VsZi5fX2JpbigiaW5pdGRiIiksIGRiZGlyXSwgYWRkRW52ID0gc2VsZi5fX2FkZEVudikKCiAgICBkZWYgcHNxbChzZWxmLCBzcWwsIGRibmFtZSA9IE5vbmUsIGRpc2NhcmQgPSBGYWxzZSwgYXJncyA9IFsiLUEiLCAiLXQiXSk6CiAgICAgICAgcCA9IHNlbGYuaG9zdC5yLnJ1bihbc2VsZi5fX2JpbigicHNxbCIpXSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbm5hcmdzKHNlbGYuaG9zdCwgZGJuYW1lID0gZGJuYW1lKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzICsgWyItYyIsIHNxbF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQgPSBESVNDQVJEIGlmIGRpc2NhcmQgZWxzZSBDQVBUVVJFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRW52ID0gc2VsZi5fX2FkZEVudikKICAgICAgICBpZiBkaXNjYXJkOgogICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgIHJldHVybiBwLnN0ZG91dFJlYWQoKQoKICAgIGRlZiBkYkV4aXN0cyhzZWxmLCBuYW1lKToKICAgICAgICByZXMgPSBzZWxmLnBzcWwoInNlbGVjdCBjb3VudCgxKSBmcm9tIHBnX2NhdGFsb2cucGdfZGF0YWJhc2UgIgogICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUgZGF0bmFtZSA9ICclcyciICUgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgZGJuYW1lID0gInRlbXBsYXRlMSIpCiAgICAgICAgcmV0dXJuIGJvb2woaW50KHJlcykpCgogICAgZGVmIGNyZWF0ZURCKHNlbGYsIG5hbWUpOgogICAgICAgIHNlbGYuaG9zdC5yLnJ1bihbc2VsZi5fX2JpbigiY3JlYXRlZGIiKSwgbmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVudiA9IHNlbGYuX19hZGRFbnYpCgogICAgZGVmIHRhYmxlRXhpc3RzKHNlbGYsIG5hbWUsIGRibmFtZSA9IE5vbmUpOgogICAgICAgIHJlcyA9IHNlbGYucHNxbCgic2VsZWN0IGNvdW50KDEpIGZyb20gcGdfdGFibGVzICIKICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIHNjaGVtYW5hbWUgPSAncHVibGljJyAiCiAgICAgICAgICAgICAgICAgICAgICAgICJhbmQgdGFibGVuYW1lID0gJyVzJyIgJSBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBkYm5hbWUgPSBkYm5hbWUpCiAgICAgICAgcmV0dXJuIGJvb2woaW50KHJlcykpCgogICAgZGVmIF9fZ2V0UG9zdG1hc3RlcihzZWxmKToKICAgICAgICAjIEZpbmQgdGhlIHBvc3RtYXN0ZXIKICAgICAgICBwcyA9IHNlbGYuaG9zdC5yLnByb2NMaXN0KCkKICAgICAgICBydW5uaW5nID0gRmFsc2UKICAgICAgICBmb3IgcGlkLCBpbmZvIGluIHBzLml0ZXJpdGVtcygpOgogICAgICAgICAgICBpZiBpbmZvWyJzdGF0dXMiXVsiTmFtZSJdID09ICJwb3N0Z3JlcyI6CiAgICAgICAgICAgICAgICBydW5uaW5nID0gVHJ1ZQogICAgICAgICAgICAgICAgaWYgbGVuKGluZm9bImNtZGxpbmUiXSkgYW5kIGluZm9bImNtZGxpbmUiXVswXS5zdGFydHN3aXRoKCIvIik6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBpZAogICAgICAgIGlmIHJ1bm5pbmc6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlBvc3RncmVzIGlzIHJ1bm5pbmcsIGJ1dCBmYWlsZWQgdG8gZmluZCBwb3N0bWFzdGVyIikKCiAgICBkZWYgX19nZXRBbGxPcHRzKHNlbGYsIG0pOgogICAgICAgICMgU2V0IHNvbWUgZGVmYXVsdHMKICAgICAgICBvcHRzID0geyJkYXRlc3R5bGUiOiAiaXNvLCBtZHkiLAogICAgICAgICAgICAgICAgImxjX21lc3NhZ2VzIjogIkMiLAogICAgICAgICAgICAgICAgImxjX21vbmV0YXJ5IjogIkMiLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAibGNfbnVtZXJpYyI6ICJDIiwKICAgICAgICAgICAgICAgICJsY190aW1lIjogIkMifQo8fGZpbV9lbmR8Pg=="]
["f8c5786b527e2d178d82a2f1f987b27b818e1986-1","f8c5786b527e2d178d82a2f1f987b27b818e1986","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGd5bQpmcm9tIGd5bS53cmFwcGVycyBpbXBvcnQgUmVjb3JkVmlkZW8sIFRpbWVMaW1pdAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRpbWUKCmZyb20gLmNvbW1vbiBpbXBvcnQgTXVsdGlhZ2VudEVudgoKY2xhc3MgR3ltRW52KE11bHRpYWdlbnRFbnYpOgogICAgIiIiCiAgICBNdWx0aS1hZ2VudCB3cmFwcGVyIGZvciBzaW5nbGUtYWdlbnQgT3BlbkFJIEd5bSBlbnZpcm9ubWVudHMuCiAgICAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnLCBzcGVjX29ubHk9RmFsc2UpOiAgIyBUT0RPOiBBbGxvdyBjb25maWcgdG8gc3BlY2lmeSBwcmVwcm9jZXNzb3Igc3RhY2sKICAgICAgICBhc3NlcnQgIm5hbWUiIGluIGNvbmZpZywgIm11c3Qgc3BlY2lmeSBuYW1lIG9mIGd5bSBlbnZpcm9ubWVudCIKICAgICAgICBzZWxmLl9lbnYgPSBneW0ubWFrZShjb25maWcuZ2V0KCJuYW1lIikpCiAgICAgICAgc3VwZXIoR3ltRW52LCBzZWxmKS5fX2luaXRfXyhneW0ubWFrZShjb25maWcuZ2V0KCJuYW1lIikpKQoKICAgICAgICBzZWxmLl9hZ2VudF9pZCA9IGNvbmZpZy5nZXQoImFnZW50X2lkIiwgImFnZW50IikKCiAgICAgICAgc2VsZi5vYnNlcnZhdGlvbl9zcGFjZXMgPSB7c2VsZi5fYWdlbnRfaWQ6IHNlbGYuX2Vudi5vYnNlcnZhdGlvbl9zcGFjZX0KICAgICAgICBzZWxmLmFjdGlvbl9zcGFjZXMgPSB7c2VsZi5fYWdlbnRfaWQ6IHNlbGYuX2Vudi5hY3Rpb25fc3BhY2V9CiAgICAKICAgIGRlZiByZXNldChzZWxmKToKICAgICAgICBvYnMgPSBzZWxmLl9lbnYucmVzZXQoKQogICAgICAgIHJldHVybiB7c2VsZi5fYWdlbnRfaWQ6IG9ic30KICAgIAogICAgZGVmIHN0ZXAoc2VsZiwgYWN0aW9uKToKICAgICAgICBvYnMsIHJldywgZG9uZSwgaW5mbyA9IHNlbGYuX2Vudi5zdGVwKGFjdGlvbltzZWxmLl9hZ2VudF9pZF0pCiAgICAgICAgb2JzID0ge3NlbGYuX2FnZW50X2lkOiBvYnN9CiAgICAgICAgcmV3ID0ge3NlbGYuX2FnZW50X2lkOiByZXd9CiAgICAgICAgZG9uZSA9IHtzZWxmLl9hZ2VudF9pZDogZG9uZX0KICAgICAgICByZXR1cm4gb2JzLCByZXcsIGRvbmUsIGluZm8KICAgIAogICAgZGVmIHZpc3VhbGl6ZShzZWxmLCAKICAgICAgICAgICAgICAgICAgcG9saWNpZXM9e30sCiAgICAgICAgICAgICAgICAgIHBvbGljeV9mbj1Ob25lLAogICAgICAgICAgICAgICAgICBtYXhfZXBpc29kZXM9Tm9uZSwgCiAgICAgICAgICAgICAgICAgIG1heF9zdGVwcz1Ob25lLAogICAgICAgICAgICAgICAgICBzcGVlZD0xLAogICAgICAgICAgICAgICAgICByZWNvcmRfcGF0aD1Ob25lLAogICAgICAgICAgICAgICAgICBoZWFkbGVzcz1GYWxzZSwKICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOiAgIyBUT0RPOiBOZWVkIHRvIHRoaW5rIG1vcmUgYWJvdXQgdGhlIHZpc3VhbGl6YXRpb24gcGlwZWxpbmUKICAgICAgICBlbnYgPSBzZWxmLl9lbnYgICMgTk9URTogV2Ugd2lsbCBhcHBseSBtdWx0aXBsZSB3cmFwcGVycyBhcm91bmQgdGhlIGJhc2UgZW52aXJvbm1lbnQKCiAgICAgICAgIyBFbmZvcmNlIHN0ZXAgbGltaXQKICAgICAgICBpZiBtYXhfc3RlcHMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIGVudiA9VGltZUxpbWl0KGVudiwgbWF4X2VwaXNvZGVfc3RlcHM9bWF4X3N0ZXBzKSAgIyBOT1RFOiBXZSBkb24ndCBuZWVkIHRvIHVzZSBhIHdyYXBwZXIgZm9yIHRoaXMKCiAgICAgICAgIyBFbmFibGUgdmlkZW8gcmVjb3JkaW5nIGlmIHJlcXVlc3RlZAogICAgICAgIGlmIHJlY29yZF9wYXRoIGlzIG5vdCBOb25lOgoKICAgICAgICAgICAgIyBOT1RFOiBOZWVkIHRvIHByb3ZpZGUgdGhlIGVwaXNvZGVfdHJpZ2dlciB0byByZWNvcmQgZXZlcnkgZXBpc29kZQogICAgICAgICAgICBlbnYgPSBSZWNvcmRWaWRlbyhlbnYsIHJlY29yZF9wYXRoLCBlcGlzb2RlX3RyaWdnZXI9bGFtYmRhIGlkOiBUcnVlKSAgIyBUT0RPOiBIb3cgZG8gd2UgcmVjb3JkIGZvciBQZXR0aW5nWm9vIGVudmlyb25tZW50cz8KCiAgICAgICAgIyBCZWdpbiB2aXN1YWxpemF0aW9uCiAgICAgICAgaWYgbWF4X2VwaXNvZGVzIGlzIE5vbmU6CiAgICAgICAgICAgIG1heF9lcGlzb2RlcyA9IG5wLmluZgoKICAgICAgICBpZiBtYXhfc3RlcHMgaXMgTm9uZToKICAgICAgICAgICAgbWF4X3N0ZXBzID0gbnAuaW5mCgogICAgICAgIHN0ZXBfaW50ZXJ2YWwgPSA1MC4wIC8gc3BlZWQKCiAgICAgICAgZXBpc29kZXMgPSAwCiAgICAgICAgd2hpbGUgZXBpc29kZXMgPCBtYXhfZXBpc29kZXM6CiAgICAgICAgICAgIG9icyA9IGVudi5yZXNldCgpCiAgICAgICAgICAgIHN0ZXAgPSAwCgogICAgICAgICAgICAjIFJlbmRlciBpZiBub3QgaW4gaGVhZGxlc3MgbW9kZQogICAgICAgICAgICBpZiBub3QgaGVhZGxlc3M6CiAgICAgICAgICAgICAgICBlbnYucmVuZGVyKG1vZGU9Imh1bWFuIikKICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoc3RlcF9pbnRlcnZhbCkKCiAgICAgICAgICAgICMgQnVpbGQgYWdlbnRzIGZvciB0aGlzIGVwaXNvZGUsIHRvIGtlZXAgdHJhY2sgb2YgaW50ZXJuYWwgc3RhdGVzCiAgICAgICAgICAgIGFnZW50cyA9IHt9CiAgICAgICAgICAgIGRvbmVzID0ge30KICAgICAgICAgICAgZm9yIGFnZW50X2lkIGluIG9icy5rZXlzKCk6CiAgICAgICAgICAgICAgICBpZiBwb2xpY3lfZm4gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgcG9saWN5X2lkID0gcG9saWN5X2ZuKGFnZW50X2lkKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBwb2xpY3lfaWQgPSBhZ2VudF9pZAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIGFnZW50c1thZ2VudF9pZF0gPSBwb2xpY2llc1twb2xpY3lfaWRdLm1ha2VfYWdlbnQoKQogICAgICAgICAgICAgICAgZG9uZXNbYWdlbnRfaWRdID0gRmFsc2UKCiAgICAgICAgICAgICMgUnVuIGVwaXNvZGUKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIG9icywgcmV3YXJkcywgZG9uZXMsIGluZm8gPSBlbnYuc3RlcChhY3Rpb25zKQogICAgICAgICAgICAgICAgc3RlcCArPSAxCgogICAgICAgICAgICAgICAgIyBSZW5kZXIgaWYgbm90IGluIGhlYWRsZXNzIG1vZGUKICAgICAgICAgICAgICAgIGlmIG5vdCBoZWFkbGVzczoKICAgICAgICAgICAgICAgICAgICBlbnYucmVuZGVyKG1vZGU9Imh1bWFuIikKICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKHN0ZXBfaW50ZXJ2YWwpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHdoaWxlIHN0ZXAgPCBtYXhfc3RlcHMgYW5kIG5vdCBhbGwoZG9uZXMudmFsdWVzKCkpOgogICAgICAgICAgICAgICAgYWN0aW9ucyA9IHt9CiAgICAgICAgICAgICAgICBmb3IgYWdlbnRfaWQsIG9iIGluIG9icy5pdGVtcygpOgogICAgICAgICAgICAgICAgICAgIGFjdGlvbnNbYWdlbnRfaWRdLCBfID0gYWdlbnRzW2FnZW50X2lkXS5hY3Qob2IpICAjIE5PVEU6IE1heSByZXR1cm4gYWRkaXRpb25hbCBpbmZvCjx8ZmltX2VuZHw+"]
["f8c5786b527e2d178d82a2f1f987b27b818e1986-2","f8c5786b527e2d178d82a2f1f987b27b818e1986","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGd5bQpmcm9tIGd5bS53cmFwcGVycyBpbXBvcnQgUmVjb3JkVmlkZW8sIFRpbWVMaW1pdAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRpbWUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZnJvbSAuY29tbW9uIGltcG9ydCBNdWx0aWFnZW50RW52CgpjbGFzcyBHeW1FbnYoTXVsdGlhZ2VudEVudik6Cjx8ZmltX2VuZHw+"]
["f8c5786b527e2d178d82a2f1f987b27b818e1986-3","f8c5786b527e2d178d82a2f1f987b27b818e1986","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGd5bQpmcm9tIGd5bS53cmFwcGVycyBpbXBvcnQgUmVjb3JkVmlkZW8sIFRpbWVMaW1pdAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRpbWUKCmZyb20gLmNvbW1vbiBpbXBvcnQgTXVsdGlhZ2VudEVudgoKY2xhc3MgR3ltRW52KE11bHRpYWdlbnRFbnYpOgogICAgIiIiCiAgICBNdWx0aS1hZ2VudCB3cmFwcGVyIGZvciBzaW5nbGUtYWdlbnQgT3BlbkFJIEd5bSBlbnZpcm9ubWVudHMuCiAgICAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnLCBzcGVjX29ubHk9RmFsc2UpOiAgIyBUT0RPOiBBbGxvdyBjb25maWcgdG8gc3BlY2lmeSBwcmVwcm9jZXNzb3Igc3RhY2sKICAgICAgICBhc3NlcnQgIm5hbWUiIGluIGNvbmZpZywgIm11c3Qgc3BlY2lmeSBuYW1lIG9mIGd5bSBlbnZpcm9ubWVudCIKICAgICAgICBzZWxmLl9lbnYgPSBneW0ubWFrZShjb25maWcuZ2V0KCJuYW1lIikpCiAgICAgICAgc3VwZXIoR3ltRW52LCBzZWxmKS5fX2luaXRfXyhneW0ubWFrZShjb25maWcuZ2V0KCJuYW1lIikpKQoKICAgICAgICBzZWxmLl9hZ2VudF9pZCA9IGNvbmZpZy5nZXQoImFnZW50X2lkIiwgImFnZW50IikKCiAgICAgICAgc2VsZi5vYnNlcnZhdGlvbl9zcGFjZXMgPSB7c2VsZi5fYWdlbnRfaWQ6IHNlbGYuX2Vudi5vYnNlcnZhdGlvbl9zcGFjZX0KICAgICAgICBzZWxmLmFjdGlvbl9zcGFjZXMgPSB7c2VsZi5fYWdlbnRfaWQ6IHNlbGYuX2Vudi5hY3Rpb25fc3BhY2V9CiAgICAKICAgIGRlZiByZXNldChzZWxmKToKICAgICAgICBvYnMgPSBzZWxmLl9lbnYucmVzZXQoKQogICAgICAgIHJldHVybiB7c2VsZi5fYWdlbnRfaWQ6IG9ic30KICAgIAogICAgZGVmIHN0ZXAoc2VsZiwgYWN0aW9uKToKICAgICAgICBvYnMsIHJldywgZG9uZSwgaW5mbyA9IHNlbGYuX2Vudi5zdGVwKGFjdGlvbltzZWxmLl9hZ2VudF9pZF0pCiAgICAgICAgb2JzID0ge3NlbGYuX2FnZW50X2lkOiBvYnN9CiAgICAgICAgcmV3ID0ge3NlbGYuX2FnZW50X2lkOiByZXd9CiAgICAgICAgZG9uZSA9IHtzZWxmLl9hZ2VudF9pZDogZG9uZX0KICAgICAgICByZXR1cm4gb2JzLCByZXcsIGRvbmUsIGluZm8KICAgIAogICAgZGVmIHZpc3VhbGl6ZShzZWxmLCAKICAgICAgICAgICAgICAgICAgcG9saWNpZXM9e30sCiAgICAgICAgICAgICAgICAgIHBvbGljeV9mbj1Ob25lLAogICAgICAgICAgICAgICAgICBtYXhfZXBpc29kZXM9Tm9uZSwgCiAgICAgICAgICAgICAgICAgIG1heF9zdGVwcz1Ob25lLAogICAgICAgICAgICAgICAgICBzcGVlZD0xLAogICAgICAgICAgICAgICAgICByZWNvcmRfcGF0aD1Ob25lLAogICAgICAgICAgICAgICAgICBoZWFkbGVzcz1GYWxzZSwKICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOiAgIyBUT0RPOiBOZWVkIHRvIHRoaW5rIG1vcmUgYWJvdXQgdGhlIHZpc3VhbGl6YXRpb24gcGlwZWxpbmUKICAgICAgICBlbnYgPSBzZWxmLl9lbnYgICMgTk9URTogV2Ugd2lsbCBhcHBseSBtdWx0aXBsZSB3cmFwcGVycyBhcm91bmQgdGhlIGJhc2UgZW52aXJvbm1lbnQKCiAgICAgICAgIyBFbmZvcmNlIHN0ZXAgbGltaXQKICAgICAgICBpZiBtYXhfc3RlcHMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIGVudiA9VGltZUxpbWl0KGVudiwgbWF4X2VwaXNvZGVfc3RlcHM9bWF4X3N0ZXBzKSAgIyBOT1RFOiBXZSBkb24ndCBuZWVkIHRvIHVzZSBhIHdyYXBwZXIgZm9yIHRoaXMKCiAgICAgICAgIyBFbmFibGUgdmlkZW8gcmVjb3JkaW5nIGlmIHJlcXVlc3RlZAogICAgICAgIGlmIHJlY29yZF9wYXRoIGlzIG5vdCBOb25lOgoKICAgICAgICAgICAgIyBOT1RFOiBOZWVkIHRvIHByb3ZpZGUgdGhlIGVwaXNvZGVfdHJpZ2dlciB0byByZWNvcmQgZXZlcnkgZXBpc29kZQogICAgICAgICAgICBlbnYgPSBSZWNvcmRWaWRlbyhlbnYsIHJlY29yZF9wYXRoLCBlcGlzb2RlX3RyaWdnZXI9bGFtYmRhIGlkOiBUcnVlKSAgIyBUT0RPOiBIb3cgZG8gd2UgcmVjb3JkIGZvciBQZXR0aW5nWm9vIGVudmlyb25tZW50cz8KCiAgICAgICAgIyBCZWdpbiB2aXN1YWxpemF0aW9uCiAgICAgICAgaWYgbWF4X2VwaXNvZGVzIGlzIE5vbmU6CiAgICAgICAgICAgIG1heF9lcGlzb2RlcyA9IG5wLmluZgoKICAgICAgICBpZiBtYXhfc3RlcHMgaXMgTm9uZToKICAgICAgICAgICAgbWF4X3N0ZXBzID0gbnAuaW5mCgogICAgICAgIHN0ZXBfaW50ZXJ2YWwgPSA1MC4wIC8gc3BlZWQKCiAgICAgICAgZXBpc29kZXMgPSAwCiAgICAgICAgd2hpbGUgZXBpc29kZXMgPCBtYXhfZXBpc29kZXM6CiAgICAgICAgICAgIG9icyA9IGVudi5yZXNldCgpCiAgICAgICAgICAgIHN0ZXAgPSAwCgogICAgICAgICAgICAjIFJlbmRlciBpZiBub3QgaW4gaGVhZGxlc3MgbW9kZQogICAgICAgICAgICBpZiBub3QgaGVhZGxlc3M6CiAgICAgICAgICAgICAgICBlbnYucmVuZGVyKG1vZGU9Imh1bWFuIikKICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoc3RlcF9pbnRlcnZhbCkKCiAgICAgICAgICAgICMgQnVpbGQgYWdlbnRzIGZvciB0aGlzIGVwaXNvZGUsIHRvIGtlZXAgdHJhY2sgb2YgaW50ZXJuYWwgc3RhdGVzCiAgICAgICAgICAgIGFnZW50cyA9IHt9Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgZG9uZXMgPSB7fQogICAgICAgICAgICBmb3IgYWdlbnRfaWQgaW4gb2JzLmtleXMoKToKICAgICAgICAgICAgICAgIGlmIHBvbGljeV9mbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICBwb2xpY3lfaWQgPSBwb2xpY3lfZm4oYWdlbnRfaWQpCjx8ZmltX2VuZHw+"]
["f8c5786b527e2d178d82a2f1f987b27b818e1986-4","f8c5786b527e2d178d82a2f1f987b27b818e1986","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGd5bQpmcm9tIGd5bS53cmFwcGVycyBpbXBvcnQgUmVjb3JkVmlkZW8sIFRpbWVMaW1pdAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRpbWUKCmZyb20gLmNvbW1vbiBpbXBvcnQgTXVsdGlhZ2VudEVudgoKY2xhc3MgR3ltRW52KE11bHRpYWdlbnRFbnYpOgogICAgIiIiCiAgICBNdWx0aS1hZ2VudCB3cmFwcGVyIGZvciBzaW5nbGUtYWdlbnQgT3BlbkFJIEd5bSBlbnZpcm9ubWVudHMuCiAgICAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnLCBzcGVjX29ubHk9RmFsc2UpOiAgIyBUT0RPOiBBbGxvdyBjb25maWcgdG8gc3BlY2lmeSBwcmVwcm9jZXNzb3Igc3RhY2sKPHxmaW1faG9sZXw+CiAgICAgICAgc2VsZi5fYWdlbnRfaWQgPSBjb25maWcuZ2V0KCJhZ2VudF9pZCIsICJhZ2VudCIpCgogICAgICAgIHNlbGYub2JzZXJ2YXRpb25fc3BhY2VzID0ge3NlbGYuX2FnZW50X2lkOiBzZWxmLl9lbnYub2JzZXJ2YXRpb25fc3BhY2V9CiAgICAgICAgc2VsZi5hY3Rpb25fc3BhY2VzID0ge3NlbGYuX2FnZW50X2lkOiBzZWxmLl9lbnYuYWN0aW9uX3NwYWNlfQogICAgCiAgICBkZWYgcmVzZXQoc2VsZik6CiAgICAgICAgb2JzID0gc2VsZi5fZW52LnJlc2V0KCkKICAgICAgICByZXR1cm4ge3NlbGYuX2FnZW50X2lkOiBvYnN9CiAgICAKICAgIGRlZiBzdGVwKHNlbGYsIGFjdGlvbik6CiAgICAgICAgb2JzLCByZXcsIGRvbmUsIGluZm8gPSBzZWxmLl9lbnYuc3RlcChhY3Rpb25bc2VsZi5fYWdlbnRfaWRdKQogICAgICAgIG9icyA9IHtzZWxmLl9hZ2VudF9pZDogb2JzfQogICAgICAgIHJldyA9IHtzZWxmLl9hZ2VudF9pZDogcmV3fQogICAgICAgIGRvbmUgPSB7c2VsZi5fYWdlbnRfaWQ6IGRvbmV9CiAgICAgICAgcmV0dXJuIG9icywgcmV3LCBkb25lLCBpbmZvCiAgICAKICAgIGRlZiB2aXN1YWxpemUoc2VsZiwgCiAgICAgICAgICAgICAgICAgIHBvbGljaWVzPXt9LAogICAgICAgICAgICAgICAgICBwb2xpY3lfZm49Tm9uZSwKICAgICAgICAgICAgICAgICAgbWF4X2VwaXNvZGVzPU5vbmUsIAogICAgICAgICAgICAgICAgICBtYXhfc3RlcHM9Tm9uZSwKICAgICAgICAgICAgICAgICAgc3BlZWQ9MSwKICAgICAgICAgICAgICAgICAgcmVjb3JkX3BhdGg9Tm9uZSwKICAgICAgICAgICAgICAgICAgaGVhZGxlc3M9RmFsc2UsCiAgICAgICAgICAgICAgICAgICoqa3dhcmdzKTogICMgVE9ETzogTmVlZCB0byB0aGluayBtb3JlIGFib3V0IHRoZSB2aXN1YWxpemF0aW9uIHBpcGVsaW5lCiAgICAgICAgZW52ID0gc2VsZi5fZW52ICAjIE5PVEU6IFdlIHdpbGwgYXBwbHkgbXVsdGlwbGUgd3JhcHBlcnMgYXJvdW5kIHRoZSBiYXNlIGVudmlyb25tZW50CgogICAgICAgICMgRW5mb3JjZSBzdGVwIGxpbWl0CiAgICAgICAgaWYgbWF4X3N0ZXBzIGlzIG5vdCBOb25lOgogICAgICAgICAgICBlbnYgPVRpbWVMaW1pdChlbnYsIG1heF9lcGlzb2RlX3N0ZXBzPW1heF9zdGVwcykgICMgTk9URTogV2UgZG9uJ3QgbmVlZCB0byB1c2UgYSB3cmFwcGVyIGZvciB0aGlzCgogICAgICAgICMgRW5hYmxlIHZpZGVvIHJlY29yZGluZyBpZiByZXF1ZXN0ZWQKICAgICAgICBpZiByZWNvcmRfcGF0aCBpcyBub3QgTm9uZToKCiAgICAgICAgICAgICMgTk9URTogTmVlZCB0byBwcm92aWRlIHRoZSBlcGlzb2RlX3RyaWdnZXIgdG8gcmVjb3JkIGV2ZXJ5IGVwaXNvZGUKICAgICAgICAgICAgZW52ID0gUmVjb3JkVmlkZW8oZW52LCByZWNvcmRfcGF0aCwgZXBpc29kZV90cmlnZ2VyPWxhbWJkYSBpZDogVHJ1ZSkgICMgVE9ETzogSG93IGRvIHdlIHJlY29yZCBmb3IgUGV0dGluZ1pvbyBlbnZpcm9ubWVudHM/CgogICAgICAgICMgQmVnaW4gdmlzdWFsaXphdGlvbgogICAgICAgIGlmIG1heF9lcGlzb2RlcyBpcyBOb25lOgogICAgICAgICAgICBtYXhfZXBpc29kZXMgPSBucC5pbmYKCiAgICAgICAgaWYgbWF4X3N0ZXBzIGlzIE5vbmU6CiAgICAgICAgICAgIG1heF9zdGVwcyA9IG5wLmluZgoKICAgICAgICBzdGVwX2ludGVydmFsID0gNTAuMCAvIHNwZWVkCgogICAgICAgIGVwaXNvZGVzID0gMAogICAgICAgIHdoaWxlIGVwaXNvZGVzIDwgbWF4X2VwaXNvZGVzOgogICAgICAgICAgICBvYnMgPSBlbnYucmVzZXQoKQogICAgICAgICAgICBzdGVwID0gMAoKICAgICAgICAgICAgIyBSZW5kZXIgaWYgbm90IGluIGhlYWRsZXNzIG1vZGUKICAgICAgICAgICAgaWYgbm90IGhlYWRsZXNzOgogICAgICAgICAgICAgICAgZW52LnJlbmRlcihtb2RlPSJodW1hbiIpCiAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKHN0ZXBfaW50ZXJ2YWwpCgogICAgICAgICAgICAjIEJ1aWxkIGFnZW50cyBmb3IgdGhpcyBlcGlzb2RlLCB0byBrZWVwIHRyYWNrIG9mIGludGVybmFsIHN0YXRlcwogICAgICAgICAgICBhZ2VudHMgPSB7fQogICAgICAgICAgICBkb25lcyA9IHt9CiAgICAgICAgICAgIGZvciBhZ2VudF9pZCBpbiBvYnMua2V5cygpOgogICAgICAgICAgICAgICAgaWYgcG9saWN5X2ZuIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgIHBvbGljeV9pZCA9IHBvbGljeV9mbihhZ2VudF9pZCkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgcG9saWN5X2lkID0gYWdlbnRfaWQKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBhZ2VudHNbYWdlbnRfaWRdID0gcG9saWNpZXNbcG9saWN5X2lkXS5tYWtlX2FnZW50KCkKICAgICAgICAgICAgICAgIGRvbmVzW2FnZW50X2lkXSA9IEZhbHNlCgogICAgICAgICAgICAjIFJ1biBlcGlzb2RlCiAgICAgICAgICAgIHdoaWxlIHN0ZXAgPCBtYXhfc3RlcHMgYW5kIG5vdCBhbGwoZG9uZXMudmFsdWVzKCkpOgogICAgICAgICAgICAgICAgYWN0aW9ucyA9IHt9CiAgICAgICAgICAgICAgICBmb3IgYWdlbnRfaWQsIG9iIGluIG9icy5pdGVtcygpOgogICAgICAgICAgICAgICAgICAgIGFjdGlvbnNbYWdlbnRfaWRdLCBfID0gYWdlbnRzW2FnZW50X2lkXS5hY3Qob2IpICAjIE5PVEU6IE1heSByZXR1cm4gYWRkaXRpb25hbCBpbmZvCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIG9icywgcmV3YXJkcywgZG9uZXMsIGluZm8gPSBlbnYuc3RlcChhY3Rpb25zKQogICAgICAgICAgICAgICAgc3RlcCArPSAxCgogICAgICAgICAgICAgICAgIyBSZW5kZXIgaWYgbm90IGluIGhlYWRsZXNzIG1vZGUKICAgICAgICAgICAgICAgIGlmIG5vdCBoZWFkbGVzczoKICAgICAgICAgICAgICAgICAgICBlbnYucmVuZGVyKG1vZGU9Imh1bWFuIikKICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKHN0ZXBfaW50ZXJ2YWwpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgYXNzZXJ0ICJuYW1lIiBpbiBjb25maWcsICJtdXN0IHNwZWNpZnkgbmFtZSBvZiBneW0gZW52aXJvbm1lbnQiCiAgICAgICAgc2VsZi5fZW52ID0gZ3ltLm1ha2UoY29uZmlnLmdldCgibmFtZSIpKQogICAgICAgIHN1cGVyKEd5bUVudiwgc2VsZikuX19pbml0X18oZ3ltLm1ha2UoY29uZmlnLmdldCgibmFtZSIpKSkKCjx8ZmltX2VuZHw+"]
["f8c5786b527e2d178d82a2f1f987b27b818e1986-5","f8c5786b527e2d178d82a2f1f987b27b818e1986","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGd5bQpmcm9tIGd5bS53cmFwcGVycyBpbXBvcnQgUmVjb3JkVmlkZW8sIFRpbWVMaW1pdAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRpbWUKCmZyb20gLmNvbW1vbiBpbXBvcnQgTXVsdGlhZ2VudEVudgoKY2xhc3MgR3ltRW52KE11bHRpYWdlbnRFbnYpOgogICAgIiIiCiAgICBNdWx0aS1hZ2VudCB3cmFwcGVyIGZvciBzaW5nbGUtYWdlbnQgT3BlbkFJIEd5bSBlbnZpcm9ubWVudHMuCiAgICAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnLCBzcGVjX29ubHk9RmFsc2UpOiAgIyBUT0RPOiBBbGxvdyBjb25maWcgdG8gc3BlY2lmeSBwcmVwcm9jZXNzb3Igc3RhY2sKICAgICAgICBhc3NlcnQgIm5hbWUiIGluIGNvbmZpZywgIm11c3Qgc3BlY2lmeSBuYW1lIG9mIGd5bSBlbnZpcm9ubWVudCIKICAgICAgICBzZWxmLl9lbnYgPSBneW0ubWFrZShjb25maWcuZ2V0KCJuYW1lIikpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzdXBlcihHeW1FbnYsIHNlbGYpLl9faW5pdF9fKGd5bS5tYWtlKGNvbmZpZy5nZXQoIm5hbWUiKSkpCgogICAgICAgIHNlbGYuX2FnZW50X2lkID0gY29uZmlnLmdldCgiYWdlbnRfaWQiLCAiYWdlbnQiKQoKPHxmaW1fZW5kfD4="]
["5fa27aa31e51fae6ababc6bfc64080ef0a71e514-1","5fa27aa31e51fae6ababc6bfc64080ef0a71e514","PHxmaW1fcHJlZml4fD4KbWluID0gaW50KGlucHV0KCJFbnRlciBtaW51dGVzICIpKQpkYXlzPW1pbi8oMjQqNjApCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KeWVhciA9ZGF5cy8zNjUKZGF5cz1kYXlzJTM2NQpwcmludChtaW4sIiBtaW51dGVzIGlzIGFwcHJveGltYXRlbHkgIixpbnQoeWVhciksIiB5ZWFycyBhbmQgIixpbnQoZGF5cyksIiBkYXlzIikKPHxmaW1fZW5kfD4="]
["5fa27aa31e51fae6ababc6bfc64080ef0a71e514-2","5fa27aa31e51fae6ababc6bfc64080ef0a71e514","PHxmaW1fcHJlZml4fD4KbWluID0gaW50KGlucHV0KCJFbnRlciBtaW51dGVzICIpKQpkYXlzPW1pbi8oMjQqNjApCnllYXIgPWRheXMvMzY1CmRheXM9ZGF5cyUzNjUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpwcmludChtaW4sIiBtaW51dGVzIGlzIGFwcHJveGltYXRlbHkgIixpbnQoeWVhciksIiB5ZWFycyBhbmQgIixpbnQoZGF5cyksIiBkYXlzIikKPHxmaW1fZW5kfD4="]
["5fa27aa31e51fae6ababc6bfc64080ef0a71e514-3","5fa27aa31e51fae6ababc6bfc64080ef0a71e514","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KbWluID0gaW50KGlucHV0KCJFbnRlciBtaW51dGVzICIpKQpkYXlzPW1pbi8oMjQqNjApCnllYXIgPWRheXMvMzY1CmRheXM9ZGF5cyUzNjUKPHxmaW1fZW5kfD4="]
["5fa27aa31e51fae6ababc6bfc64080ef0a71e514-4","5fa27aa31e51fae6ababc6bfc64080ef0a71e514","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KbWluID0gaW50KGlucHV0KCJFbnRlciBtaW51dGVzICIpKQpkYXlzPW1pbi8oMjQqNjApCnllYXIgPWRheXMvMzY1CmRheXM9ZGF5cyUzNjUKPHxmaW1fZW5kfD4="]
["5fa27aa31e51fae6ababc6bfc64080ef0a71e514-5","5fa27aa31e51fae6ababc6bfc64080ef0a71e514","PHxmaW1fcHJlZml4fD4KbWluID0gaW50KGlucHV0KCJFbnRlciBtaW51dGVzICIpKQpkYXlzPW1pbi8oMjQqNjApCnllYXIgPWRheXMvMzY1CmRheXM9ZGF5cyUzNjUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpwcmludChtaW4sIiBtaW51dGVzIGlzIGFwcHJveGltYXRlbHkgIixpbnQoeWVhciksIiB5ZWFycyBhbmQgIixpbnQoZGF5cyksIiBkYXlzIikKPHxmaW1fZW5kfD4="]
["f2c58c6b6bb1b822892e680c5a524e4544ccc18d-1","f2c58c6b6bb1b822892e680c5a524e4544ccc18d","PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEJvb3RzdHJhcFNhbXBsZXIKIyB0ZXh0LgppbXBvcnQgcGFuZGFzCmZyb20gbmltYnVzbWwucHJlcHJvY2Vzc2luZy5maWx0ZXIgaW1wb3J0IEJvb3RzdHJhcFNhbXBsZXIKCiMgY3JlYXRlIHRoZSBkYXRhCmN1c3RvbWVyX3Jldmlld3MgPSBwYW5kYXMuRGF0YUZyYW1lKGRhdGE9ZGljdChyZXZpZXc9WwogICAgIkkgcmVhbGx5IGRpZCBub3QgbGlrZSB0aGUgdGFzdGUgb2YgaXQiLAogICAgIkl0IHdhcyBzdXJwcmlzaW5nbHkgcXVpdGUgZ29vZCEiLAogICAgIkkgd2lsbCBuZXZlciBldmVyIGV2ZXIgZ28gdG8gdGhhdCBwbGFjZSBhZ2FpbiEhIiwKICAgICJUaGUgYmVzdCBldmVyISEgSXQgd2FzIGFtYXppbmdseSBnb29kIGFuZCBzdXBlciBmYXN0IiwKICAgICJJIHdpc2ggSSBoYWQgZ29uZSBlYXJsaWVyLCBpdCB3YXMgdGhhdCBncmVhdCIsCiAgICAic29tZXdoYXQgZGlzc2Fwb2ludGluZy4gSSdkIHByb2JhYmx5IHdvbnQgdHJ5IGFnYWluIiwKICAgICJOZXZlciB2aXNpdCBhZ2Fpbi4uLiByYXNjYWxzISJdKSkKCnNhbXBsZSA9IEJvb3RzdHJhcFNhbXBsZXIocG9vbF9zaXplPTIwLCBjb21wbGVtZW50PVRydWUpCgp5ID0gc2FtcGxlLmZpdF90cmFuc2Zvcm0oY3VzdG9tZXJfcmV2aWV3cykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKIyB2aWV3IHRoZSBzZW50aW1lbnQgc2NvcmVzISEKcHJpbnQoeSkKPHxmaW1fZW5kfD4="]
["f2c58c6b6bb1b822892e680c5a524e4544ccc18d-2","f2c58c6b6bb1b822892e680c5a524e4544ccc18d","PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEJvb3RzdHJhcFNhbXBsZXIKIyB0ZXh0LgppbXBvcnQgcGFuZGFzCmZyb20gbmltYnVzbWwucHJlcHJvY2Vzc2luZy5maWx0ZXIgaW1wb3J0IEJvb3RzdHJhcFNhbXBsZXIKCjx8ZmltX2hvbGV8PgogICAgIkkgd2lsbCBuZXZlciBldmVyIGV2ZXIgZ28gdG8gdGhhdCBwbGFjZSBhZ2FpbiEhIiwKICAgICJUaGUgYmVzdCBldmVyISEgSXQgd2FzIGFtYXppbmdseSBnb29kIGFuZCBzdXBlciBmYXN0IiwKICAgICJJIHdpc2ggSSBoYWQgZ29uZSBlYXJsaWVyLCBpdCB3YXMgdGhhdCBncmVhdCIsCiAgICAic29tZXdoYXQgZGlzc2Fwb2ludGluZy4gSSdkIHByb2JhYmx5IHdvbnQgdHJ5IGFnYWluIiwKICAgICJOZXZlciB2aXNpdCBhZ2Fpbi4uLiByYXNjYWxzISJdKSkKCnNhbXBsZSA9IEJvb3RzdHJhcFNhbXBsZXIocG9vbF9zaXplPTIwLCBjb21wbGVtZW50PVRydWUpCgp5ID0gc2FtcGxlLmZpdF90cmFuc2Zvcm0oY3VzdG9tZXJfcmV2aWV3cykKCiMgdmlldyB0aGUgc2VudGltZW50IHNjb3JlcyEhCnByaW50KHkpCjx8ZmltX3N1ZmZpeHw+CiMgY3JlYXRlIHRoZSBkYXRhCmN1c3RvbWVyX3Jldmlld3MgPSBwYW5kYXMuRGF0YUZyYW1lKGRhdGE9ZGljdChyZXZpZXc9WwogICAgIkkgcmVhbGx5IGRpZCBub3QgbGlrZSB0aGUgdGFzdGUgb2YgaXQiLAogICAgIkl0IHdhcyBzdXJwcmlzaW5nbHkgcXVpdGUgZ29vZCEiLAo8fGZpbV9lbmR8Pg=="]
["c215ef79f348ec52475e91840d45861a29a2fbb4-1","c215ef79f348ec52475e91840d45861a29a2fbb4","PHxmaW1fcHJlZml4fD4KZnJvbSBiYXNlNjQgaW1wb3J0IGI2NGVuY29kZQpmcm9tIGZsYXNrIGltcG9ydCBGbGFzaywgcmVuZGVyX3RlbXBsYXRlLCByZWRpcmVjdCwgcmVxdWVzdCwgdXJsX2Zvcixqc29uaWZ5CmZyb20gZmxhc2tfc3FsYWxjaGVteSBpbXBvcnQgU1FMQWxjaGVteQpmcm9tIHdlcmt6ZXVnLnNlY3VyaXR5IGltcG9ydCBnZW5lcmF0ZV9wYXNzd29yZF9oYXNoLCBjaGVja19wYXNzd29yZF9oYXNoCmZyb20gZmxhc2tfbWFpbCBpbXBvcnQgTWFpbCxNZXNzYWdlCmZyb20gaXRzZGFuZ2Vyb3VzIGltcG9ydCBVUkxTYWZlVGltZWRTZXJpYWxpemVyCmltcG9ydCBkYXRldGltZQpmcm9tIHB5dHogaW1wb3J0IHRpbWV6b25lCmZyb20gZW5jcnlwdCBpbXBvcnQgZGVjcnlwdF93aXRoX0FFUwppbXBvcnQgdGltZQphcHAgPSBGbGFzayhfX25hbWVfXykKCmFwcC5jb25maWdbJ1NFQ1JFVF9LRVknXSA9ICchOW1AUy1kVGh5SWxXW3BIUWJOXicKYXBwLmNvbmZpZ1snU1FMQUxDSEVNWV9EQVRBQkFTRV9VUkknXSA9ICdzcWxpdGU6Ly8vZm9vLmRiJwphcHAuY29uZmlnWydTUUxBTENIRU1ZX1RSQUNLX01PRElGSUNBVElPTlMnXSA9IEZhbHNlCmFwcC5jb25maWdbJ1NFQ1VSSVRZX1BBU1NXT1JEX1NBTFQnXSA9ICchOW1AUy1kVGh5SWxXW3BIUWJOXnNhbHQnCgphcHAuY29uZmlnWydNQUlMX1NFUlZFUiddID0gJ3NtdHAuZ29vZ2xlbWFpbC5jb20nCmFwcC5jb25maWdbJ01BSUxfVVNFX1RMUyddID0gRmFsc2UKYXBwLmNvbmZpZ1snTUFJTF9VU0VfU1NMJ10gPSBUcnVlCmFwcC5jb25maWdbJ01BSUxfUE9SVCddID0gNDY1CmFwcC5jb25maWdbJ01BSUxfVVNFUk5BTUUnXSA9ICJoYnV0dDg3Nzg3N0BnbWFpbC5jb20iCmFwcC5jb25maWdbJ01BSUxfUEFTU1dPUkQnXSA9ICdmZmNscHpmYWt6c2Rib3h1JwphcHAuY29uZmlnWydNQUlMX0RFRkFVTFRfU0VOREVSJ10gPSAiaGJ1dHQ4Nzc4NzdAZ21haWwuY29tIgoKbWFpbCA9IE1haWwoYXBwKQoKZGIgPSBTUUxBbGNoZW15KGFwcCkKZnJvbSBtb2RlbHMgaW1wb3J0IFVzZXIsVHJhbnNhY3Rpb24sQmlsbFRyYW5zYWN0aW9uCgpkYi5jcmVhdGVfYWxsKCkKaWYoVXNlci5xdWVyeS5maWx0ZXJfYnkodXNlcm5hbWUgPSAnZ2VwY28nKS5maXJzdCgpIGlzIE5vbmUpOgogICAgZGIuc2Vzc2lvbi5hZGQoIFVzZXIodXNlcm5hbWUgPSAnZ2VwY28nLGVtYWlsID0gJ2dlcGNvQGdtYWlsLmNvbScscGFzc3dvcmQgPSBnZW5lcmF0ZV9wYXNzd29yZF9oYXNoKCcxMjM0NTY3OCcsIG1ldGhvZD0nc2hhMjU2JyksY29uZmlybWVkPVRydWUsYmFsYW5jZT0wKSApCmRiLnNlc3Npb24uY29tbWl0KCkKCkBhcHAucm91dGUoJy9zaWduaW4nLG1ldGhvZHMgPSBbJ1BPU1QnXSkKZGVmIGxvZ2luKCk6CiAgICBkYXRhID0gcmVxdWVzdC5nZXRfanNvbigpCiAgICB1c2VybmFtZSA9IGRhdGEuZ2V0KCd1c2VybmFtZScpCiAgICBwYXNzd29yZCA9IGRhdGEuZ2V0KCdwYXNzd29yZCcpCiAgICBzZWNyZXRfa2V5ID0gZGF0YS5nZXQoJ2tleScpCiAgICBpZihkZWNyeXB0aW9uKHNlY3JldF9rZXkpPT1GYWxzZSk6CiAgICAgICAgcmV0dXJuICdlcnJvcicKICAgIHVzZXIgPSBVc2VyLnF1ZXJ5LmZpbHRlcl9ieSh1c2VybmFtZSA9IHVzZXJuYW1lKS5maXJzdCgpCiAgICBpZiB1c2VyOgogICAgICAgIGlmIGNoZWNrX3Bhc3N3b3JkX2hhc2godXNlci5wYXNzd29yZCwgcGFzc3dvcmQpOgogICAgICAgICAgICBpZih1c2VyLmNvbmZpcm1lZCBpcyBGYWxzZSk6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1BsZWFzZSBjb25maXJtIHlvdXIgZW1haWwgZmlyc3QuJwogICAgICAgICAgICByZXR1cm4gJ2FjY291bnQgbG9naW4gc2NjdWVzc2Z1bGx5JwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiAid3JvbmcgdXNlcm5hbWUgb3IgcGFzc3dvcmQiCiAgICBlbHNlOgogICAgICAgIHJldHVybiAid3JvbmcgdXNlcm5hbWUgb3IgcGFzc3dvcmQiCgoKQGFwcC5yb3V0ZSgnL3NpZ251cCcsIG1ldGhvZHM9WydQT1NUJ10pCmRlZiBzaWdudXAoKToKICAgIHRyeToKICAgICAgICBkYXRhID0gcmVxdWVzdC5nZXRfanNvbigpCiAgICAgICAgdXNlcm5hbWUgPSBkYXRhLmdldCgndXNlcm5hbWUnKQogICAgICAgICMgaWYoJyAnIGluIHVzZXJuYW1lKToKICAgICAgICAjICAgICByZXR1cm4gJ2Vycm9yJwogICAgICAgIGVtYWlsID0gZGF0YS5nZXQoJ2VtYWlsJykKICAgICAgICBwYXNzd29yZCA9IGRhdGEuZ2V0KCdwYXNzd29yZCcpCiAgICAgICAgc2VjcmV0X2tleSA9IGRhdGEuZ2V0KCdrZXknKQo8fGZpbV9ob2xlfD4KICAgICAgICBpZihVc2VyLnF1ZXJ5LmZpbHRlcl9ieShlbWFpbD1lbWFpbCkuZmlyc3QoKSk6CiAgICAgICAgICAgIHJldHVybiAnZW1haWwgYWxyZWFkeSBleGlzdHMnCiAgICAgICAgaGFzaGVkX3Bhc3N3b3JkID0gZ2VuZXJhdGVfcGFzc3dvcmRfaGFzaChwYXNzd29yZCwgbWV0aG9kPSdzaGEyNTYnKQogICAgICAgIG5ld191c2VyID0gVXNlcigKICAgICAgICAgICAgdXNlcm5hbWUgPSB1c2VybmFtZSwKICAgICAgICAgICAgZW1haWwgPSBlbWFpbCwKICAgICAgICAgICAgcGFzc3dvcmQgPSBoYXNoZWRfcGFzc3dvcmQsCiAgICAgICAgICAgIGNvbmZpcm1lZD1GYWxzZSwKICAgICAgICAgICAgYmFsYW5jZT0xMDAKICAgICAgICAgICAgKQogICAgICAgIHRva2VuID0gZ2VuZXJhdGVfY29uZmlybWF0aW9uX3Rva2VuKG5ld191c2VyLmVtYWlsKQogICAgICAgIGNvbmZpcm1fdXJsID0gdXJsX2ZvcignY29uZmlybV9lbWFpbCcsIHRva2VuPXRva2VuLCBfZXh0ZXJuYWw9VHJ1ZSkKICAgICAgICBodG1sID0gcmVuZGVyX3RlbXBsYXRlKCdhY3RpdmF0ZS5odG1sJywgY29uZmlybV91cmw9Y29uZmlybV91cmwpCiAgICAgICAgc3ViamVjdCA9ICJBd2FhelBheSEgUGxlYXNlIGNvbmZpcm0geW91ciBlbWFpbCIKICAgICAgICBzZW5kX2VtYWlsKG5ld191c2VyLmVtYWlsLCBzdWJqZWN0LCBodG1sKQogICAgICAgIGRiLnNlc3Npb24uYWRkKG5ld191c2VyKQogICAgICAgIGRiLnNlc3Npb24uY29tbWl0KCkKICAgICAgICByZXR1cm4gJ2FjY291bnQgY3JlYXRlZCBzY2N1ZXNzZnVsbHknCiAgICBleGNlcHQ6CiAgICAgICAgcmV0dXJuICdlcnJvciBvY2N1cmVkJwoKCgpAYXBwLnJvdXRlKCcvZmV0Y2hiYWxhbmNlJywgbWV0aG9kcz1bJ1BPU1QnXSkKZGVmIGZldGNoYmFsYW5jZSgpOgogICAgdHJ5OgogICAgICAgIGRhdGEgPSByZXF1ZXN0LmdldF9qc29uKCkKICAgICAgICB1c2VybmFtZSA9IGRhdGEuZ2V0KCd1c2VybmFtZScpCiAgICAgICAgc2VjcmV0X2tleSA9IGRhdGEuZ2V0KCdrZXknKQogICAgICAgIGlmKGRlY3J5cHRpb24oc2VjcmV0X2tleSk9PUZhbHNlKToKICAgICAgICAgICAgcmV0dXJuICdlcnJvcicKICAgICAgICB1c2VyID0gVXNlci5xdWVyeS5maWx0ZXJfYnkodXNlcm5hbWU9dXNlcm5hbWUpLmZpcnN0KCkKICAgICAgICBpZih1c2VyLmNvbmZpcm1lZCk6CiAgICAgICAgICAgIHJldHVybiBzdHIodXNlci5iYWxhbmNlKQogICAgICAgIHJldHVybiAnYmFsYW5jZSBmZXRjaCBmYWlsZWQnCiAgICBleGNlcHQ6CiAgICAgICAgcmV0dXJuICdiYWxhbmNlIGZldGNoIGZhaWxlZCcKCgoKQGFwcC5yb3V0ZSgnL3NlbmRtb25leScsIG1ldGhvZHM9WydQT1NUJ10pCmRlZiBzZW5kbW9uZXkoKToKICAgIGRhdGEgPSByZXF1ZXN0LmdldF9qc29uKCkKICAgIGZyb211c2VybmFtZSA9IGRhdGEuZ2V0KCdmcm9tdXNlcm5hbWUnKQogICAgdG91c2VybmFtZSA9IGRhdGEuZ2V0KCd0b3VzZXJuYW1lJykKICAgIGFtb3VudCA9IGludChkYXRhLmdldCgnYW1vdW50JykpCiAgICBzZWNyZXRfa2V5ID0gZGF0YS5nZXQoJ2tleScpCiAgICBpZihkZWNyeXB0aW9uKHNlY3JldF9rZXkpPT1GYWxzZSk6CiAgICAgICAgcmV0dXJuICdlcnJvcicKICAgIGlmKGFtb3VudDw9MCk6CiAgICAgICAgcmV0dXJuICJpbmNvcnJlY3QgYW1vdW50IgogICAgZnJvbWdvb2QgPSBGYWxzZQogICAgdG9nb29kID0gRmFsc2UKICAgIHRyeToKICAgICAgICBmcm9tdXNlciA9IFVzZXIucXVlcnkuZmlsdGVyX2J5KHVzZXJuYW1lPWZyb211c2VybmFtZSkuZmlyc3QoKQogICAgICAgIGlmIGZyb211c2VyOgogICAgICAgICAgICBpZihmcm9tdXNlci5iYWxhbmNlLWFtb3VudDwwKToKICAgICAgICAgICAgICAgIHJldHVybiAibG93IGJhbGFuY2UiCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBmcm9tZ29vZCA9IFRydWUKICAgICAgICAgICAgICAgIGZyb211c2VyLmJhbGFuY2UgPSBmcm9tdXNlci5iYWxhbmNlLWFtb3VudAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiAnZXJyb3InCiAgICAgICAgdG91c2VyID0gVXNlci5xdWVyeS5maWx0ZXJfYnkodXNlcm5hbWU9dG91c2VybmFtZSkuZmlyc3QoKQogICAgICAgIGlmKHRvdXNlcik6CiAgICAgICAgICAgIHRvZ29vZCA9IFRydWUKICAgICAgICAgICAgdG91c2VyLmJhbGFuY2UgPSB0b3VzZXIuYmFsYW5jZSthbW91bnQKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gJ2Vycm9yJwogICAgICAgIGlmKHRvZ29vZCBhbmQgZnJvbWdvb2QpOgogICAgICAgICAgICB0cmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uKGZyb211c2VyX2lkPWZyb211c2VyLmlkLHRvdXNlcl9pZD10b3VzZXIuaWQsYW1vdW50PWFtb3VudCxkYXRlPWRhdGV0aW1lLmRhdGV0aW1lLm5vdyh0aW1lem9uZSgnQXNpYS9LYXJhY2hpJykpKQogICAgICAgICAgICBkYi5zZXNzaW9uLmFkZChmcm9tdXNlcikKICAgICAgICAgICAgZGIuc2Vzc2lvbi5hZGQodG91c2VyKQogICAgICAgICAgICBkYi5zZXNzaW9uLmFkZCh0cmFuc2FjdGlvbikKICAgICAgICAgICAgZGIuc2Vzc2lvbi5jb21taXQoKQogICAgICAgICAgICByZXR1cm4gInN1Y2Nlc3MiCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuICdlcnJvcicKICAgIGV4Y2VwdDoKICAgICAgICByZXR1cm4gImVycm9yIgoKCgoKQGFwcC5yb3V0ZSgnL3BheWJpbGwnLCBtZXRob2RzPVsnUE9TVCddKQpkZWYgcGF5YmlsbCgpOgogICAgdHJ5OgogICAgICAgIGRhdGEgPSByZXF1ZXN0LmdldF9qc29uKCkKICAgICAgICBiaWxsbnVtYmVyID0gaW50KGRhdGEuZ2V0KCdiaWxsbnVtYmVyJykpCiAgICAgICAgdXNlcm5hbWUgPSBkYXRhLmdldCgndXNlcm5hbWUnKQogICAgICAgIGNvbXBhbnk9J2dlcGNvJwogICAgICAgIHNlY3JldF9rZXkgPSBkYXRhLmdldCgna2V5JykKICAgICAgICBpZihkZWNyeXB0aW9uKHNlY3JldF9rZXkpPT1GYWxzZSk6CiAgICAgICAgICAgIHJldHVybiAnZXJyb3InCiAgICAgICAgYmlsbF9hbW91bnQgPSAyMAogICAgICAgIGlmKGJpbGxudW1iZXI8MTAwMDAwMDAwMDAwMDAgb3IgYmlsbG51bWJlcj49MTAwMDAwMDAwMDAwMDAwKToKICAgICAgICAgICAgcmV0dXJuICdiaWxsIG51bWJlciBpbmNvcnJlY3QnCiAgICAgICAgdXNlciA9IFVzZXIucXVlcnkuZmlsdGVyX2J5KHVzZXJuYW1lPXVzZXJuYW1lKS5maXJzdCgpCiAgICAgICAgYmlsbCA9IFVzZXIucXVlcnkuZmlsdGVyX2J5KHVzZXJuYW1lPWNvbXBhbnkpLmZpcnN0KCkKICAgICAgICBpZiB1c2VyIGFuZCBiaWxsOgogICAgICAgICAgICBpZih1c2VyLmJhbGFuY2U8YmlsbF9hbW91bnQpOgogICAgICAgICAgICAgICAgcmV0dXJuICJsb3cgYmFsYW5jZSIKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGJpbGx0cmFuc2FjdGlvbiA9IEJpbGxUcmFuc2FjdGlvbih1c2VyX2lkPXVzZXIuaWQsY29tcGFueT1jb21wYW55LGJpbGxfdHlwZT0nZWxlY3RyaWNpdHknLGFtb3VudD1iaWxsX2Ftb3VudCxkYXRlPWRhdGV0aW1lLmRhdGV0aW1lLm5vdyh0aW1lem9uZSgnQXNpYS9LYXJhY2hpJykpKQogICAgICAgICAgICAgICAgdXNlci5iYWxhbmNlID0gdXNlci5iYWxhbmNlLWJpbGxfYW1vdW50CiAgICAgICAgICAgICAgICBiaWxsLmJhbGFuY2UgPSBiaWxsLmJhbGFuY2UrYmlsbF9hbW91bnQKICAgICAgICAgICAgICAgIGRiLnNlc3Npb24uYWRkKGJpbGx0cmFuc2FjdGlvbikKICAgICAgICAgICAgICAgIGRiLnNlc3Npb24uYWRkKHVzZXIpCiAgICAgICAgICAgICAgICBkYi5zZXNzaW9uLmFkZChiaWxsKQogICAgICAgICAgICAgICAgZGIuc2Vzc2lvbi5jb21taXQoKQogICAgICAgICAgICAgICAgcmV0dXJuICJzdWNjZXNzIgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiAnZXJyb3InCiAgICBleGNlcHQ6CiAgICAgICAgcmV0dXJuICdlcnJvcicKCkBhcHAucm91dGUoJy90cmFuc2FjdGlvbmhpc3RvcnknLCBtZXRob2RzPVsnUE9TVCddKQpkZWYgdHJhbnNhY3Rpb25oaXN0b3J5KCk6CiAgICB0cnk6CiAgICAgICAgZGF0YSA9IHJlcXVlc3QuZ2V0X2pzb24oKQogICAgICAgIHVzZXJuYW1lID0gZGF0YS5nZXQoJ3VzZXJuYW1lJykKICAgICAgICBjb21wYW55PSdnZXBjbycKICAgICAgICBzZWNyZXRfa2V5ID0gZGF0YS5nZXQoJ2tleScpCiAgICAgICAgaWYoZGVjcnlwdGlvbihzZWNyZXRfa2V5KT09RmFsc2UpOgogICAgICAgICAgICByZXR1cm4gJ2Vycm9yJwogICAgICAgIHVzZXIgPSBVc2VyLnF1ZXJ5LmZpbHRlcl9ieSh1c2VybmFtZT11c2VybmFtZSkuZmlyc3QoKQogICAgICAgIGJpbGwgPSBVc2VyLnF1ZXJ5LmZpbHRlcl9ieSh1c2VybmFtZT1jb21wYW55KS5maXJzdCgpCiAgICAgICAgcmV0dXJuX2RhdGEgPSBbXQogICAgICAgIGlmIHVzZXIgYW5kIGJpbGw6CiAgICAgICAgICAgIGFsbF90cmFuc2FjdGlvbnMgPSBbXQogICAgICAgICAgICBuZWdhdGl2ZV90cmFuc2FjdGlvbnMgPSBUcmFuc2FjdGlvbi5xdWVyeS5maWx0ZXJfYnkoZnJvbXVzZXJfaWQ9dXNlci5pZCkuYWxsKCkKICAgICAgICAgICAgcG9zaXRpdmVfdHJhbnNhY3Rpb25zID0gVHJhbnNhY3Rpb24ucXVlcnkuZmlsdGVyX2J5KHRvdXNlcl9pZD11c2VyLmlkKS5hbGwoKQogICAgICAgICAgICBiaWxsX3RyYW5zYWN0aW9ucyA9IEJpbGxUcmFuc2FjdGlvbi5xdWVyeS5maWx0ZXJfYnkodXNlcl9pZD11c2VyLmlkKS5hbGwoKQogICAgICAgICAgICBmb3IgaSBpbiBuZWdhdGl2ZV90cmFuc2FjdGlvbnM6CiAgICAgICAgICAgICAgICBhbGxfdHJhbnNhY3Rpb25zLmFwcGVuZChpKQogICAgICAgICAgICBmb3IgaSBpbiBwb3NpdGl2ZV90cmFuc2FjdGlvbnM6CiAgICAgICAgICAgICAgICBhbGxfdHJhbnNhY3Rpb25zLmFwcGVuZChpKQogICAgICAgICAgICBmb3IgaSBpbiBiaWxsX3RyYW5zYWN0aW9uczoKICAgICAgICAgICAgICAgIGFsbF90cmFuc2FjdGlvbnMuYXBwZW5kKGkpCiAgICAgICAgICAgIGZvciBpIGluIGFsbF90cmFuc2FjdGlvbnM6CiAgICAgICAgICAgICAgICB0ZW1wX2RhdGUgPSBpLmRhdGUuc3RyZnRpbWUoIiViICVkICVZICVIOiVNOiVTIikKICAgICAgICAgICAgICAgIGlmKHR5cGUoaSkgaXMgVHJhbnNhY3Rpb24pOgogICAgICAgICAgICAgICAgICAgIGlmKGkuZnJvbXVzZXJfaWQ9PXVzZXIuaWQpOgogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX3VzZXJuYW1lID0gVXNlci5xdWVyeS5maWx0ZXJfYnkoaWQ9aS50b3VzZXJfaWQpLmZpcnN0KCkKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9hbW91bnQgPSAnLScrc3RyKGkuYW1vdW50KQogICAgICAgICAgICAgICAgICAgIGVsaWYoaS50b3VzZXJfaWQ9PXVzZXIuaWQpOgogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX3VzZXJuYW1lID0gVXNlci5xdWVyeS5maWx0ZXJfYnkoaWQ9aS5mcm9tdXNlcl9pZCkuZmlyc3QoKQogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX2Ftb3VudCA9ICcrJytzdHIoaS5hbW91bnQpCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9hbW91bnQgPSAndW5hdmFpbGFibGUnCiAgICAgICAgICAgICAgICAgICAgdGVtcF90eXBlID0gJ1RyYW5zYWN0aW9uJwogICAgICAgICAgICAgICAgZWxpZih0eXBlKGkpIGlzIEJpbGxUcmFuc2FjdGlvbik6CiAgICAgICAgICAgICAgICAgICAgdGVtcF91c2VybmFtZSA9IFVzZXIucXVlcnkuZmlsdGVyX2J5KHVzZXJuYW1lPWNvbXBhbnkpLmZpcnN0KCkKICAgICAgICAgICAgICAgICAgICBpZihpLnVzZXJfaWQ9PXVzZXIuaWQpOgogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX2Ftb3VudCA9ICctJytzdHIoaS5hbW91bnQpCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9hbW91bnQgPSAndW5hdmFpbGFibGUnCiAgICAgICAgICAgICAgICAgICAgdGVtcF90eXBlID0gJ0JpbGwnCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHRlbXBfYW1vdW50ID0gJ3VuYXZhaWxhYmxlJwogICAgICAgICAgICAgICAgICAgIHRlbXBfdHlwZSA9ICd1bmF2YWlsYWJsZScKICAgICAgICAgICAgICAgIGlmKHRlbXBfdXNlcm5hbWUpOgogICAgICAgICAgICAgICAgICAgIHRlbXBfdXNlcm5hbWUgPSB0ZW1wX3VzZXJuYW1lLnVzZXJuYW1lCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHRlbXBfdXNlcm5hbWUgPSAndW5hdmFpbGFibGUnCgogICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25fZGF0YSA9IHsnZGF0ZSc6dGVtcF9kYXRlLCd1c2VybmFtZSc6dGVtcF91c2VybmFtZSwnYW1vdW50Jzp0ZW1wX2Ftb3VudCwndHlwZSc6dGVtcF90eXBlfQogICAgICAgICAgICAgICAgcmV0dXJuX2RhdGEuYXBwZW5kKHRyYW5zYWN0aW9uX2RhdGEpCiAgICAgICAgICAgIHJldHVybiBqc29uaWZ5KHJldHVybl9kYXRhKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiAnZXJyb3InCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgcmV0dXJuIHN0cihlKQoKCgpAYXBwLnJvdXRlKCcvY29uZmlybS88dG9rZW4+JykKZGVmIGNvbmZpcm1fZW1haWwodG9rZW4pOgogICAgdHJ5OgogICAgICAgIGVtYWlsID0gY29uZmlybV90b2tlbih0b2tlbikKICAgIGV4Y2VwdDoKICAgICAgICByZXR1cm4gJ1RoZSBjb25maXJtYXRpb24gbGluayBpcyBpbnZhbGlkIG9yIGhhcyBleHBpcmVkLicKICAgIHVzZXIgPSBVc2VyLnF1ZXJ5LmZpbHRlcl9ieShlbWFpbD1lbWFpbCkuZmlyc3Rfb3JfNDA0KCkKICAgIGlmIHVzZXIuY29uZmlybWVkOgogICAgICAgIHJldHVybiByZWRpcmVjdCh1cmxfZm9yKCdsb2dpbicpKQogICAgZWxzZToKICAgICAgICB1c2VyLmNvbmZpcm1lZCA9IFRydWUKICAgICAgICBkYi5zZXNzaW9uLmFkZCh1c2VyKQogICAgICAgIGRiLnNlc3Npb24uY29tbWl0KCkKICAgICAgICByZXR1cm4gJ1lvdSBoYXZlIGNvbmZpcm1lZCB5b3VyIGFjY291bnQgYW5kIGNhbiBsb2dpbiBub3cuIFRoYW5rcyEnCgoKCmRlZiBnZW5lcmF0ZV9jb25maXJtYXRpb25fdG9rZW4oZW1haWwpOgogICAgc2VyaWFsaXplciA9IFVSTFNhZmVUaW1lZFNlcmlhbGl6ZXIoYXBwLmNvbmZpZ1snU0VDUkVUX0tFWSddKQogICAgcmV0dXJuIHNlcmlhbGl6ZXIuZHVtcHMoZW1haWwsIHNhbHQ9YXBwLmNvbmZpZ1snU0VDVVJJVFlfUEFTU1dPUkRfU0FMVCddKQpkZWYgY29uZmlybV90b2tlbih0b2tlbiwgZXhwaXJhdGlvbj0zNjAwKToKICAgIHNlcmlhbGl6ZXIgPSBVUkxTYWZlVGltZWRTZXJpYWxpemVyKGFwcC5jb25maWdbJ1NFQ1JFVF9LRVknXSkKICAgIHRyeToKICAgICAgICBlbWFpbCA9IHNlcmlhbGl6ZXIubG9hZHMoCiAgICAgICAgICAgIHRva2VuLAogICAgICAgICAgICBzYWx0PWFwcC5jb25maWdbJ1NFQ1VSSVRZX1BBU1NXT1JEX1NBTFQnXSwKICAgICAgICAgICAgbWF4X2FnZT1leHBpcmF0aW9uCiAgICAgICAgKQogICAgZXhjZXB0OgogICAgICAgIHJldHVybiBGYWxzZQogICAgcmV0dXJuIGVtYWlsCgpkZWYgc2VuZF9lbWFpbCh0bywgc3ViamVjdCwgdGVtcGxhdGUpOgogICAgbXNnID0gTWVzc2FnZSgKICAgICAgICBzdWJqZWN0LAogICAgICAgIHJlY2lwaWVudHM9W3RvXSwKICAgICAgICBodG1sPXRlbXBsYXRlLAogICAgICAgIHNlbmRlcj1hcHAuY29uZmlnWydNQUlMX0RFRkFVTFRfU0VOREVSJ10KICAgICkKICAgIG1haWwuc2VuZChtc2cpCgoKZGVmIGRlY3J5cHRpb24oc2VjcmV0X2tleSk6CiAgICB0cnk6CiAgICAJc2VjcmV0X2tleSA9IGRlY3J5cHRfd2l0aF9BRVMoc2VjcmV0X2tleSwiaGFzc2FuIiwiYnV0dCIpCiAgICAJc2VjcmV0X2tleSA9IGludChzZWNyZXRfa2V5KQogICAgCXQgPSBpbnQodGltZS50aW1lKCkpCiAgICAJIyBjaGFuZ2UgMzAgdG8gMTAgYXQgZW5kIG9mIHByb2plY3QuIDMwIGZvciB0ZXN0aW5nIG9ubHkuCiAgICAJaWYodC1zZWNyZXRfa2V5PC0xMCBvciB0LXNlY3JldF9rZXk+MTApOgogICAgCQlyZXR1cm4gRmFsc2UKICAgIAllbHNlOgogICAgCQlyZXR1cm4gVHJ1ZQogICAgZXhjZXB0OgogICAgICAgIHJldHVybiBGYWxzZQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBhcHAucnVuKCkKPHxmaW1fc3VmZml4fD4KICAgICAgICBpZihkZWNyeXB0aW9uKHNlY3JldF9rZXkpPT1GYWxzZSk6CiAgICAgICAgICAgIHJldHVybiAnZXJyb3InCiAgICAgICAgaWYoVXNlci5xdWVyeS5maWx0ZXJfYnkodXNlcm5hbWU9dXNlcm5hbWUpLmZpcnN0KCkpOgogICAgICAgICAgICByZXR1cm4gInVzZXJuYW1lIGFscmVhZHkgZXhpc3RzIgo8fGZpbV9lbmR8Pg=="]
["c215ef79f348ec52475e91840d45861a29a2fbb4-2","c215ef79f348ec52475e91840d45861a29a2fbb4","PHxmaW1fcHJlZml4fD4KZnJvbSBiYXNlNjQgaW1wb3J0IGI2NGVuY29kZQpmcm9tIGZsYXNrIGltcG9ydCBGbGFzaywgcmVuZGVyX3RlbXBsYXRlLCByZWRpcmVjdCwgcmVxdWVzdCwgdXJsX2Zvcixqc29uaWZ5CmZyb20gZmxhc2tfc3FsYWxjaGVteSBpbXBvcnQgU1FMQWxjaGVteQpmcm9tIHdlcmt6ZXVnLnNlY3VyaXR5IGltcG9ydCBnZW5lcmF0ZV9wYXNzd29yZF9oYXNoLCBjaGVja19wYXNzd29yZF9oYXNoCmZyb20gZmxhc2tfbWFpbCBpbXBvcnQgTWFpbCxNZXNzYWdlCmZyb20gaXRzZGFuZ2Vyb3VzIGltcG9ydCBVUkxTYWZlVGltZWRTZXJpYWxpemVyCmltcG9ydCBkYXRldGltZQpmcm9tIHB5dHogaW1wb3J0IHRpbWV6b25lCmZyb20gZW5jcnlwdCBpbXBvcnQgZGVjcnlwdF93aXRoX0FFUwppbXBvcnQgdGltZQphcHAgPSBGbGFzayhfX25hbWVfXykKCmFwcC5jb25maWdbJ1NFQ1JFVF9LRVknXSA9ICchOW1AUy1kVGh5SWxXW3BIUWJOXicKYXBwLmNvbmZpZ1snU1FMQUxDSEVNWV9EQVRBQkFTRV9VUkknXSA9ICdzcWxpdGU6Ly8vZm9vLmRiJwphcHAuY29uZmlnWydTUUxBTENIRU1ZX1RSQUNLX01PRElGSUNBVElPTlMnXSA9IEZhbHNlCmFwcC5jb25maWdbJ1NFQ1VSSVRZX1BBU1NXT1JEX1NBTFQnXSA9ICchOW1AUy1kVGh5SWxXW3BIUWJOXnNhbHQnCgphcHAuY29uZmlnWydNQUlMX1NFUlZFUiddID0gJ3NtdHAuZ29vZ2xlbWFpbC5jb20nCmFwcC5jb25maWdbJ01BSUxfVVNFX1RMUyddID0gRmFsc2UKYXBwLmNvbmZpZ1snTUFJTF9VU0VfU1NMJ10gPSBUcnVlCmFwcC5jb25maWdbJ01BSUxfUE9SVCddID0gNDY1CmFwcC5jb25maWdbJ01BSUxfVVNFUk5BTUUnXSA9ICJoYnV0dDg3Nzg3N0BnbWFpbC5jb20iCmFwcC5jb25maWdbJ01BSUxfUEFTU1dPUkQnXSA9ICdmZmNscHpmYWt6c2Rib3h1JwphcHAuY29uZmlnWydNQUlMX0RFRkFVTFRfU0VOREVSJ10gPSAiaGJ1dHQ4Nzc4NzdAZ21haWwuY29tIgoKbWFpbCA9IE1haWwoYXBwKQoKZGIgPSBTUUxBbGNoZW15KGFwcCkKZnJvbSBtb2RlbHMgaW1wb3J0IFVzZXIsVHJhbnNhY3Rpb24sQmlsbFRyYW5zYWN0aW9uCgpkYi5jcmVhdGVfYWxsKCkKaWYoVXNlci5xdWVyeS5maWx0ZXJfYnkodXNlcm5hbWUgPSAnZ2VwY28nKS5maXJzdCgpIGlzIE5vbmUpOgogICAgZGIuc2Vzc2lvbi5hZGQoIFVzZXIodXNlcm5hbWUgPSAnZ2VwY28nLGVtYWlsID0gJ2dlcGNvQGdtYWlsLmNvbScscGFzc3dvcmQgPSBnZW5lcmF0ZV9wYXNzd29yZF9oYXNoKCcxMjM0NTY3OCcsIG1ldGhvZD0nc2hhMjU2JyksY29uZmlybWVkPVRydWUsYmFsYW5jZT0wKSApCmRiLnNlc3Npb24uY29tbWl0KCkKCkBhcHAucm91dGUoJy9zaWduaW4nLG1ldGhvZHMgPSBbJ1BPU1QnXSkKZGVmIGxvZ2luKCk6CiAgICBkYXRhID0gcmVxdWVzdC5nZXRfanNvbigpCiAgICB1c2VybmFtZSA9IGRhdGEuZ2V0KCd1c2VybmFtZScpCiAgICBwYXNzd29yZCA9IGRhdGEuZ2V0KCdwYXNzd29yZCcpCiAgICBzZWNyZXRfa2V5ID0gZGF0YS5nZXQoJ2tleScpCiAgICBpZihkZWNyeXB0aW9uKHNlY3JldF9rZXkpPT1GYWxzZSk6CiAgICAgICAgcmV0dXJuICdlcnJvcicKICAgIHVzZXIgPSBVc2VyLnF1ZXJ5LmZpbHRlcl9ieSh1c2VybmFtZSA9IHVzZXJuYW1lKS5maXJzdCgpCiAgICBpZiB1c2VyOgogICAgICAgIGlmIGNoZWNrX3Bhc3N3b3JkX2hhc2godXNlci5wYXNzd29yZCwgcGFzc3dvcmQpOgogICAgICAgICAgICBpZih1c2VyLmNvbmZpcm1lZCBpcyBGYWxzZSk6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1BsZWFzZSBjb25maXJtIHlvdXIgZW1haWwgZmlyc3QuJwogICAgICAgICAgICByZXR1cm4gJ2FjY291bnQgbG9naW4gc2NjdWVzc2Z1bGx5JwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiAid3JvbmcgdXNlcm5hbWUgb3IgcGFzc3dvcmQiCiAgICBlbHNlOgogICAgICAgIHJldHVybiAid3JvbmcgdXNlcm5hbWUgb3IgcGFzc3dvcmQiCgoKQGFwcC5yb3V0ZSgnL3NpZ251cCcsIG1ldGhvZHM9WydQT1NUJ10pCmRlZiBzaWdudXAoKToKICAgIHRyeToKICAgICAgICBkYXRhID0gcmVxdWVzdC5nZXRfanNvbigpCiAgICAgICAgdXNlcm5hbWUgPSBkYXRhLmdldCgndXNlcm5hbWUnKQogICAgICAgICMgaWYoJyAnIGluIHVzZXJuYW1lKToKICAgICAgICAjICAgICByZXR1cm4gJ2Vycm9yJwogICAgICAgIGVtYWlsID0gZGF0YS5nZXQoJ2VtYWlsJykKICAgICAgICBwYXNzd29yZCA9IGRhdGEuZ2V0KCdwYXNzd29yZCcpCiAgICAgICAgc2VjcmV0X2tleSA9IGRhdGEuZ2V0KCdrZXknKQogICAgICAgIGlmKGRlY3J5cHRpb24oc2VjcmV0X2tleSk9PUZhbHNlKToKICAgICAgICAgICAgcmV0dXJuICdlcnJvcicKICAgICAgICBpZihVc2VyLnF1ZXJ5LmZpbHRlcl9ieSh1c2VybmFtZT11c2VybmFtZSkuZmlyc3QoKSk6CiAgICAgICAgICAgIHJldHVybiAidXNlcm5hbWUgYWxyZWFkeSBleGlzdHMiCiAgICAgICAgaWYoVXNlci5xdWVyeS5maWx0ZXJfYnkoZW1haWw9ZW1haWwpLmZpcnN0KCkpOgogICAgICAgICAgICByZXR1cm4gJ2VtYWlsIGFscmVhZHkgZXhpc3RzJwogICAgICAgIGhhc2hlZF9wYXNzd29yZCA9IGdlbmVyYXRlX3Bhc3N3b3JkX2hhc2gocGFzc3dvcmQsIG1ldGhvZD0nc2hhMjU2JykKICAgICAgICBuZXdfdXNlciA9IFVzZXIoCiAgICAgICAgICAgIHVzZXJuYW1lID0gdXNlcm5hbWUsCiAgICAgICAgICAgIGVtYWlsID0gZW1haWwsCiAgICAgICAgICAgIHBhc3N3b3JkID0gaGFzaGVkX3Bhc3N3b3JkLAogICAgICAgICAgICBjb25maXJtZWQ9RmFsc2UsCiAgICAgICAgICAgIGJhbGFuY2U9MTAwCiAgICAgICAgICAgICkKICAgICAgICB0b2tlbiA9IGdlbmVyYXRlX2NvbmZpcm1hdGlvbl90b2tlbihuZXdfdXNlci5lbWFpbCkKICAgICAgICBjb25maXJtX3VybCA9IHVybF9mb3IoJ2NvbmZpcm1fZW1haWwnLCB0b2tlbj10b2tlbiwgX2V4dGVybmFsPVRydWUpCiAgICAgICAgaHRtbCA9IHJlbmRlcl90ZW1wbGF0ZSgnYWN0aXZhdGUuaHRtbCcsIGNvbmZpcm1fdXJsPWNvbmZpcm1fdXJsKQogICAgICAgIHN1YmplY3QgPSAiQXdhYXpQYXkhIFBsZWFzZSBjb25maXJtIHlvdXIgZW1haWwiCiAgICAgICAgc2VuZF9lbWFpbChuZXdfdXNlci5lbWFpbCwgc3ViamVjdCwgaHRtbCkKICAgICAgICBkYi5zZXNzaW9uLmFkZChuZXdfdXNlcikKICAgICAgICBkYi5zZXNzaW9uLmNvbW1pdCgpCiAgICAgICAgcmV0dXJuICdhY2NvdW50IGNyZWF0ZWQgc2NjdWVzc2Z1bGx5JwogICAgZXhjZXB0OgogICAgICAgIHJldHVybiAnZXJyb3Igb2NjdXJlZCcKCgoKQGFwcC5yb3V0ZSgnL2ZldGNoYmFsYW5jZScsIG1ldGhvZHM9WydQT1NUJ10pCmRlZiBmZXRjaGJhbGFuY2UoKToKICAgIHRyeToKICAgICAgICBkYXRhID0gcmVxdWVzdC5nZXRfanNvbigpCiAgICAgICAgdXNlcm5hbWUgPSBkYXRhLmdldCgndXNlcm5hbWUnKQogICAgICAgIHNlY3JldF9rZXkgPSBkYXRhLmdldCgna2V5JykKICAgICAgICBpZihkZWNyeXB0aW9uKHNlY3JldF9rZXkpPT1GYWxzZSk6CiAgICAgICAgICAgIHJldHVybiAnZXJyb3InCiAgICAgICAgdXNlciA9IFVzZXIucXVlcnkuZmlsdGVyX2J5KHVzZXJuYW1lPXVzZXJuYW1lKS5maXJzdCgpCiAgICAgICAgaWYodXNlci5jb25maXJtZWQpOgogICAgICAgICAgICByZXR1cm4gc3RyKHVzZXIuYmFsYW5jZSkKICAgICAgICByZXR1cm4gJ2JhbGFuY2UgZmV0Y2ggZmFpbGVkJwogICAgZXhjZXB0OgogICAgICAgIHJldHVybiAnYmFsYW5jZSBmZXRjaCBmYWlsZWQnCgoKCkBhcHAucm91dGUoJy9zZW5kbW9uZXknLCBtZXRob2RzPVsnUE9TVCddKQpkZWYgc2VuZG1vbmV5KCk6CiAgICBkYXRhID0gcmVxdWVzdC5nZXRfanNvbigpCiAgICBmcm9tdXNlcm5hbWUgPSBkYXRhLmdldCgnZnJvbXVzZXJuYW1lJykKICAgIHRvdXNlcm5hbWUgPSBkYXRhLmdldCgndG91c2VybmFtZScpCiAgICBhbW91bnQgPSBpbnQoZGF0YS5nZXQoJ2Ftb3VudCcpKQogICAgc2VjcmV0X2tleSA9IGRhdGEuZ2V0KCdrZXknKQogICAgaWYoZGVjcnlwdGlvbihzZWNyZXRfa2V5KT09RmFsc2UpOgogICAgICAgIHJldHVybiAnZXJyb3InCiAgICBpZihhbW91bnQ8PTApOgogICAgICAgIHJldHVybiAiaW5jb3JyZWN0IGFtb3VudCIKICAgIGZyb21nb29kID0gRmFsc2UKICAgIHRvZ29vZCA9IEZhbHNlCiAgICB0cnk6CiAgICAgICAgZnJvbXVzZXIgPSBVc2VyLnF1ZXJ5LmZpbHRlcl9ieSh1c2VybmFtZT1mcm9tdXNlcm5hbWUpLmZpcnN0KCkKICAgICAgICBpZiBmcm9tdXNlcjoKICAgICAgICAgICAgaWYoZnJvbXVzZXIuYmFsYW5jZS1hbW91bnQ8MCk6CiAgICAgICAgICAgICAgICByZXR1cm4gImxvdyBiYWxhbmNlIgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgZnJvbWdvb2QgPSBUcnVlCiAgICAgICAgICAgICAgICBmcm9tdXNlci5iYWxhbmNlID0gZnJvbXVzZXIuYmFsYW5jZS1hbW91bnQKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gJ2Vycm9yJwogICAgICAgIHRvdXNlciA9IFVzZXIucXVlcnkuZmlsdGVyX2J5KHVzZXJuYW1lPXRvdXNlcm5hbWUpLmZpcnN0KCkKICAgICAgICBpZih0b3VzZXIpOgogICAgICAgICAgICB0b2dvb2QgPSBUcnVlCiAgICAgICAgICAgIHRvdXNlci5iYWxhbmNlID0gdG91c2VyLmJhbGFuY2UrYW1vdW50CiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuICdlcnJvcicKICAgICAgICBpZih0b2dvb2QgYW5kIGZyb21nb29kKToKICAgICAgICAgICAgdHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbihmcm9tdXNlcl9pZD1mcm9tdXNlci5pZCx0b3VzZXJfaWQ9dG91c2VyLmlkLGFtb3VudD1hbW91bnQsZGF0ZT1kYXRldGltZS5kYXRldGltZS5ub3codGltZXpvbmUoJ0FzaWEvS2FyYWNoaScpKSkKICAgICAgICAgICAgZGIuc2Vzc2lvbi5hZGQoZnJvbXVzZXIpCiAgICAgICAgICAgIGRiLnNlc3Npb24uYWRkKHRvdXNlcikKICAgICAgICAgICAgZGIuc2Vzc2lvbi5hZGQodHJhbnNhY3Rpb24pCiAgICAgICAgICAgIGRiLnNlc3Npb24uY29tbWl0KCkKICAgICAgICAgICAgcmV0dXJuICJzdWNjZXNzIgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiAnZXJyb3InCiAgICBleGNlcHQ6CiAgICAgICAgcmV0dXJuICJlcnJvciIKCgoKCkBhcHAucm91dGUoJy9wYXliaWxsJywgbWV0aG9kcz1bJ1BPU1QnXSkKZGVmIHBheWJpbGwoKToKICAgIHRyeToKICAgICAgICBkYXRhID0gcmVxdWVzdC5nZXRfanNvbigpCiAgICAgICAgYmlsbG51bWJlciA9IGludChkYXRhLmdldCgnYmlsbG51bWJlcicpKQogICAgICAgIHVzZXJuYW1lID0gZGF0YS5nZXQoJ3VzZXJuYW1lJykKICAgICAgICBjb21wYW55PSdnZXBjbycKICAgICAgICBzZWNyZXRfa2V5ID0gZGF0YS5nZXQoJ2tleScpCiAgICAgICAgaWYoZGVjcnlwdGlvbihzZWNyZXRfa2V5KT09RmFsc2UpOgogICAgICAgICAgICByZXR1cm4gJ2Vycm9yJwogICAgICAgIGJpbGxfYW1vdW50ID0gMjAKICAgICAgICBpZihiaWxsbnVtYmVyPDEwMDAwMDAwMDAwMDAwIG9yIGJpbGxudW1iZXI+PTEwMDAwMDAwMDAwMDAwMCk6CiAgICAgICAgICAgIHJldHVybiAnYmlsbCBudW1iZXIgaW5jb3JyZWN0JwogICAgICAgIHVzZXIgPSBVc2VyLnF1ZXJ5LmZpbHRlcl9ieSh1c2VybmFtZT11c2VybmFtZSkuZmlyc3QoKQogICAgICAgIGJpbGwgPSBVc2VyLnF1ZXJ5LmZpbHRlcl9ieSh1c2VybmFtZT1jb21wYW55KS5maXJzdCgpCiAgICAgICAgaWYgdXNlciBhbmQgYmlsbDoKICAgICAgICAgICAgaWYodXNlci5iYWxhbmNlPGJpbGxfYW1vdW50KToKICAgICAgICAgICAgICAgIHJldHVybiAibG93IGJhbGFuY2UiCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBiaWxsdHJhbnNhY3Rpb24gPSBCaWxsVHJhbnNhY3Rpb24odXNlcl9pZD11c2VyLmlkLGNvbXBhbnk9Y29tcGFueSxiaWxsX3R5cGU9J2VsZWN0cmljaXR5JyxhbW91bnQ9YmlsbF9hbW91bnQsZGF0ZT1kYXRldGltZS5kYXRldGltZS5ub3codGltZXpvbmUoJ0FzaWEvS2FyYWNoaScpKSkKICAgICAgICAgICAgICAgIHVzZXIuYmFsYW5jZSA9IHVzZXIuYmFsYW5jZS1iaWxsX2Ftb3VudAogICAgICAgICAgICAgICAgYmlsbC5iYWxhbmNlID0gYmlsbC5iYWxhbmNlK2JpbGxfYW1vdW50CiAgICAgICAgICAgICAgICBkYi5zZXNzaW9uLmFkZChiaWxsdHJhbnNhY3Rpb24pCiAgICAgICAgICAgICAgICBkYi5zZXNzaW9uLmFkZCh1c2VyKQogICAgICAgICAgICAgICAgZGIuc2Vzc2lvbi5hZGQoYmlsbCkKICAgICAgICAgICAgICAgIGRiLnNlc3Npb24uY29tbWl0KCkKICAgICAgICAgICAgICAgIHJldHVybiAic3VjY2VzcyIKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gJ2Vycm9yJwogICAgZXhjZXB0OgogICAgICAgIHJldHVybiAnZXJyb3InCgpAYXBwLnJvdXRlKCcvdHJhbnNhY3Rpb25oaXN0b3J5JywgbWV0aG9kcz1bJ1BPU1QnXSkKZGVmIHRyYW5zYWN0aW9uaGlzdG9yeSgpOgogICAgdHJ5OgogICAgICAgIGRhdGEgPSByZXF1ZXN0LmdldF9qc29uKCkKICAgICAgICB1c2VybmFtZSA9IGRhdGEuZ2V0KCd1c2VybmFtZScpCiAgICAgICAgY29tcGFueT0nZ2VwY28nCiAgICAgICAgc2VjcmV0X2tleSA9IGRhdGEuZ2V0KCdrZXknKQogICAgICAgIGlmKGRlY3J5cHRpb24oc2VjcmV0X2tleSk9PUZhbHNlKToKICAgICAgICAgICAgcmV0dXJuICdlcnJvcicKICAgICAgICB1c2VyID0gVXNlci5xdWVyeS5maWx0ZXJfYnkodXNlcm5hbWU9dXNlcm5hbWUpLmZpcnN0KCkKICAgICAgICBiaWxsID0gVXNlci5xdWVyeS5maWx0ZXJfYnkodXNlcm5hbWU9Y29tcGFueSkuZmlyc3QoKQogICAgICAgIHJldHVybl9kYXRhID0gW10KICAgICAgICBpZiB1c2VyIGFuZCBiaWxsOgogICAgICAgICAgICBhbGxfdHJhbnNhY3Rpb25zID0gW10KICAgICAgICAgICAgbmVnYXRpdmVfdHJhbnNhY3Rpb25zID0gVHJhbnNhY3Rpb24ucXVlcnkuZmlsdGVyX2J5KGZyb211c2VyX2lkPXVzZXIuaWQpLmFsbCgpCiAgICAgICAgICAgIHBvc2l0aXZlX3RyYW5zYWN0aW9ucyA9IFRyYW5zYWN0aW9uLnF1ZXJ5LmZpbHRlcl9ieSh0b3VzZXJfaWQ9dXNlci5pZCkuYWxsKCkKICAgICAgICAgICAgYmlsbF90cmFuc2FjdGlvbnMgPSBCaWxsVHJhbnNhY3Rpb24ucXVlcnkuZmlsdGVyX2J5KHVzZXJfaWQ9dXNlci5pZCkuYWxsKCkKICAgICAgICAgICAgZm9yIGkgaW4gbmVnYXRpdmVfdHJhbnNhY3Rpb25zOgogICAgICAgICAgICAgICAgYWxsX3RyYW5zYWN0aW9ucy5hcHBlbmQoaSkKICAgICAgICAgICAgZm9yIGkgaW4gcG9zaXRpdmVfdHJhbnNhY3Rpb25zOgogICAgICAgICAgICAgICAgYWxsX3RyYW5zYWN0aW9ucy5hcHBlbmQoaSkKICAgICAgICAgICAgZm9yIGkgaW4gYmlsbF90cmFuc2FjdGlvbnM6CiAgICAgICAgICAgICAgICBhbGxfdHJhbnNhY3Rpb25zLmFwcGVuZChpKQogICAgICAgICAgICBmb3IgaSBpbiBhbGxfdHJhbnNhY3Rpb25zOgogICAgICAgICAgICAgICAgdGVtcF9kYXRlID0gaS5kYXRlLnN0cmZ0aW1lKCIlYiAlZCAlWSAlSDolTTolUyIpCiAgICAgICAgICAgICAgICBpZih0eXBlKGkpIGlzIFRyYW5zYWN0aW9uKToKICAgICAgICAgICAgICAgICAgICBpZihpLmZyb211c2VyX2lkPT11c2VyLmlkKToKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF91c2VybmFtZSA9IFVzZXIucXVlcnkuZmlsdGVyX2J5KGlkPWkudG91c2VyX2lkKS5maXJzdCgpCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfYW1vdW50ID0gJy0nK3N0cihpLmFtb3VudCkKICAgICAgICAgICAgICAgICAgICBlbGlmKGkudG91c2VyX2lkPT11c2VyLmlkKToKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF91c2VybmFtZSA9IFVzZXIucXVlcnkuZmlsdGVyX2J5KGlkPWkuZnJvbXVzZXJfaWQpLmZpcnN0KCkKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9hbW91bnQgPSAnKycrc3RyKGkuYW1vdW50KQogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfYW1vdW50ID0gJ3VuYXZhaWxhYmxlJwogICAgICAgICAgICAgICAgICAgIHRlbXBfdHlwZSA9ICdUcmFuc2FjdGlvbicKICAgICAgICAgICAgICAgIGVsaWYodHlwZShpKSBpcyBCaWxsVHJhbnNhY3Rpb24pOgogICAgICAgICAgICAgICAgICAgIHRlbXBfdXNlcm5hbWUgPSBVc2VyLnF1ZXJ5LmZpbHRlcl9ieSh1c2VybmFtZT1jb21wYW55KS5maXJzdCgpCiAgICAgICAgICAgICAgICAgICAgaWYoaS51c2VyX2lkPT11c2VyLmlkKToKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9hbW91bnQgPSAnLScrc3RyKGkuYW1vdW50KQogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfYW1vdW50ID0gJ3VuYXZhaWxhYmxlJwogICAgICAgICAgICAgICAgICAgIHRlbXBfdHlwZSA9ICdCaWxsJwogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICB0ZW1wX2Ftb3VudCA9ICd1bmF2YWlsYWJsZScKICAgICAgICAgICAgICAgICAgICB0ZW1wX3R5cGUgPSAndW5hdmFpbGFibGUnCiAgICAgICAgICAgICAgICBpZih0ZW1wX3VzZXJuYW1lKToKICAgICAgICAgICAgICAgICAgICB0ZW1wX3VzZXJuYW1lID0gdGVtcF91c2VybmFtZS51c2VybmFtZQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICB0ZW1wX3VzZXJuYW1lID0gJ3VuYXZhaWxhYmxlJwoKICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uX2RhdGEgPSB7J2RhdGUnOnRlbXBfZGF0ZSwndXNlcm5hbWUnOnRlbXBfdXNlcm5hbWUsJ2Ftb3VudCc6dGVtcF9hbW91bnQsJ3R5cGUnOnRlbXBfdHlwZX0KICAgICAgICAgICAgICAgIHJldHVybl9kYXRhLmFwcGVuZCh0cmFuc2FjdGlvbl9kYXRhKQogICAgICAgICAgICByZXR1cm4ganNvbmlmeShyZXR1cm5fZGF0YSkKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gJ2Vycm9yJwogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIHJldHVybiBzdHIoZSkKCgoKQGFwcC5yb3V0ZSgnL2NvbmZpcm0vPHRva2VuPicpCmRlZiBjb25maXJtX2VtYWlsKHRva2VuKToKICAgIHRyeToKICAgICAgICBlbWFpbCA9IGNvbmZpcm1fdG9rZW4odG9rZW4pCiAgICBleGNlcHQ6CiAgICAgICAgcmV0dXJuICdUaGUgY29uZmlybWF0aW9uIGxpbmsgaXMgaW52YWxpZCBvciBoYXMgZXhwaXJlZC4nCiAgICB1c2VyID0gVXNlci5xdWVyeS5maWx0ZXJfYnkoZW1haWw9ZW1haWwpLmZpcnN0X29yXzQwNCgpCiAgICBpZiB1c2VyLmNvbmZpcm1lZDoKICAgICAgICByZXR1cm4gcmVkaXJlY3QodXJsX2ZvcignbG9naW4nKSkKICAgIGVsc2U6CiAgICAgICAgdXNlci5jb25maXJtZWQgPSBUcnVlCiAgICAgICAgZGIuc2Vzc2lvbi5hZGQodXNlcikKICAgICAgICBkYi5zZXNzaW9uLmNvbW1pdCgpCiAgICAgICAgcmV0dXJuICdZb3UgaGF2ZSBjb25maXJtZWQgeW91ciBhY2NvdW50IGFuZCBjYW4gbG9naW4gbm93LiBUaGFua3MhJwoKCgpkZWYgZ2VuZXJhdGVfY29uZmlybWF0aW9uX3Rva2VuKGVtYWlsKToKICAgIHNlcmlhbGl6ZXIgPSBVUkxTYWZlVGltZWRTZXJpYWxpemVyKGFwcC5jb25maWdbJ1NFQ1JFVF9LRVknXSkKICAgIHJldHVybiBzZXJpYWxpemVyLmR1bXBzKGVtYWlsLCBzYWx0PWFwcC5jb25maWdbJ1NFQ1VSSVRZX1BBU1NXT1JEX1NBTFQnXSkKZGVmIGNvbmZpcm1fdG9rZW4odG9rZW4sIGV4cGlyYXRpb249MzYwMCk6CiAgICBzZXJpYWxpemVyID0gVVJMU2FmZVRpbWVkU2VyaWFsaXplcihhcHAuY29uZmlnWydTRUNSRVRfS0VZJ10pCiAgICB0cnk6CiAgICAgICAgZW1haWwgPSBzZXJpYWxpemVyLmxvYWRzKAogICAgICAgICAgICB0b2tlbiwKICAgICAgICAgICAgc2FsdD1hcHAuY29uZmlnWydTRUNVUklUWV9QQVNTV09SRF9TQUxUJ10sCiAgICAgICAgICAgIG1heF9hZ2U9ZXhwaXJhdGlvbgogICAgICAgICkKICAgIGV4Y2VwdDoKICAgICAgICByZXR1cm4gRmFsc2UKICAgIHJldHVybiBlbWFpbAoKZGVmIHNlbmRfZW1haWwodG8sIHN1YmplY3QsIHRlbXBsYXRlKToKICAgIG1zZyA9IE1lc3NhZ2UoCiAgICAgICAgc3ViamVjdCwKICAgICAgICByZWNpcGllbnRzPVt0b10sCjx8ZmltX2hvbGV8PgogICAgKQogICAgbWFpbC5zZW5kKG1zZykKCgpkZWYgZGVjcnlwdGlvbihzZWNyZXRfa2V5KToKICAgIHRyeToKICAgIAlzZWNyZXRfa2V5ID0gZGVjcnlwdF93aXRoX0FFUyhzZWNyZXRfa2V5LCJoYXNzYW4iLCJidXR0IikKICAgIAlzZWNyZXRfa2V5ID0gaW50KHNlY3JldF9rZXkpCiAgICAJdCA9IGludCh0aW1lLnRpbWUoKSkKICAgIAkjIGNoYW5nZSAzMCB0byAxMCBhdCBlbmQgb2YgcHJvamVjdC4gMzAgZm9yIHRlc3Rpbmcgb25seS4KICAgIAlpZih0LXNlY3JldF9rZXk8LTEwIG9yIHQtc2VjcmV0X2tleT4xMCk6CiAgICAJCXJldHVybiBGYWxzZQogICAgCWVsc2U6CiAgICAJCXJldHVybiBUcnVlCiAgICBleGNlcHQ6CiAgICAgICAgcmV0dXJuIEZhbHNlCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIGFwcC5ydW4oKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGh0bWw9dGVtcGxhdGUsCiAgICAgICAgc2VuZGVyPWFwcC5jb25maWdbJ01BSUxfREVGQVVMVF9TRU5ERVInXQo8fGZpbV9lbmR8Pg=="]
["c215ef79f348ec52475e91840d45861a29a2fbb4-3","c215ef79f348ec52475e91840d45861a29a2fbb4","PHxmaW1fcHJlZml4fD4KZnJvbSBiYXNlNjQgaW1wb3J0IGI2NGVuY29kZQpmcm9tIGZsYXNrIGltcG9ydCBGbGFzaywgcmVuZGVyX3RlbXBsYXRlLCByZWRpcmVjdCwgcmVxdWVzdCwgdXJsX2Zvcixqc29uaWZ5CmZyb20gZmxhc2tfc3FsYWxjaGVteSBpbXBvcnQgU1FMQWxjaGVteQpmcm9tIHdlcmt6ZXVnLnNlY3VyaXR5IGltcG9ydCBnZW5lcmF0ZV9wYXNzd29yZF9oYXNoLCBjaGVja19wYXNzd29yZF9oYXNoCmZyb20gZmxhc2tfbWFpbCBpbXBvcnQgTWFpbCxNZXNzYWdlCmZyb20gaXRzZGFuZ2Vyb3VzIGltcG9ydCBVUkxTYWZlVGltZWRTZXJpYWxpemVyCmltcG9ydCBkYXRldGltZQpmcm9tIHB5dHogaW1wb3J0IHRpbWV6b25lCmZyb20gZW5jcnlwdCBpbXBvcnQgZGVjcnlwdF93aXRoX0FFUwppbXBvcnQgdGltZQphcHAgPSBGbGFzayhfX25hbWVfXykKCmFwcC5jb25maWdbJ1NFQ1JFVF9LRVknXSA9ICchOW1AUy1kVGh5SWxXW3BIUWJOXicKYXBwLmNvbmZpZ1snU1FMQUxDSEVNWV9EQVRBQkFTRV9VUkknXSA9ICdzcWxpdGU6Ly8vZm9vLmRiJwphcHAuY29uZmlnWydTUUxBTENIRU1ZX1RSQUNLX01PRElGSUNBVElPTlMnXSA9IEZhbHNlCmFwcC5jb25maWdbJ1NFQ1VSSVRZX1BBU1NXT1JEX1NBTFQnXSA9ICchOW1AUy1kVGh5SWxXW3BIUWJOXnNhbHQnCgphcHAuY29uZmlnWydNQUlMX1NFUlZFUiddID0gJ3NtdHAuZ29vZ2xlbWFpbC5jb20nCmFwcC5jb25maWdbJ01BSUxfVVNFX1RMUyddID0gRmFsc2UKYXBwLmNvbmZpZ1snTUFJTF9VU0VfU1NMJ10gPSBUcnVlCmFwcC5jb25maWdbJ01BSUxfUE9SVCddID0gNDY1CmFwcC5jb25maWdbJ01BSUxfVVNFUk5BTUUnXSA9ICJoYnV0dDg3Nzg3N0BnbWFpbC5jb20iCmFwcC5jb25maWdbJ01BSUxfUEFTU1dPUkQnXSA9ICdmZmNscHpmYWt6c2Rib3h1JwphcHAuY29uZmlnWydNQUlMX0RFRkFVTFRfU0VOREVSJ10gPSAiaGJ1dHQ4Nzc4NzdAZ21haWwuY29tIgoKbWFpbCA9IE1haWwoYXBwKQoKZGIgPSBTUUxBbGNoZW15KGFwcCkKZnJvbSBtb2RlbHMgaW1wb3J0IFVzZXIsVHJhbnNhY3Rpb24sQmlsbFRyYW5zYWN0aW9uCgpkYi5jcmVhdGVfYWxsKCkKaWYoVXNlci5xdWVyeS5maWx0ZXJfYnkodXNlcm5hbWUgPSAnZ2VwY28nKS5maXJzdCgpIGlzIE5vbmUpOgogICAgZGIuc2Vzc2lvbi5hZGQoIFVzZXIodXNlcm5hbWUgPSAnZ2VwY28nLGVtYWlsID0gJ2dlcGNvQGdtYWlsLmNvbScscGFzc3dvcmQgPSBnZW5lcmF0ZV9wYXNzd29yZF9oYXNoKCcxMjM0NTY3OCcsIG1ldGhvZD0nc2hhMjU2JyksY29uZmlybWVkPVRydWUsYmFsYW5jZT0wKSApCmRiLnNlc3Npb24uY29tbWl0KCkKCkBhcHAucm91dGUoJy9zaWduaW4nLG1ldGhvZHMgPSBbJ1BPU1QnXSkKZGVmIGxvZ2luKCk6CiAgICBkYXRhID0gcmVxdWVzdC5nZXRfanNvbigpCiAgICB1c2VybmFtZSA9IGRhdGEuZ2V0KCd1c2VybmFtZScpCiAgICBwYXNzd29yZCA9IGRhdGEuZ2V0KCdwYXNzd29yZCcpCiAgICBzZWNyZXRfa2V5ID0gZGF0YS5nZXQoJ2tleScpCiAgICBpZihkZWNyeXB0aW9uKHNlY3JldF9rZXkpPT1GYWxzZSk6CiAgICAgICAgcmV0dXJuICdlcnJvcicKICAgIHVzZXIgPSBVc2VyLnF1ZXJ5LmZpbHRlcl9ieSh1c2VybmFtZSA9IHVzZXJuYW1lKS5maXJzdCgpCiAgICBpZiB1c2VyOgogICAgICAgIGlmIGNoZWNrX3Bhc3N3b3JkX2hhc2godXNlci5wYXNzd29yZCwgcGFzc3dvcmQpOgogICAgICAgICAgICBpZih1c2VyLmNvbmZpcm1lZCBpcyBGYWxzZSk6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1BsZWFzZSBjb25maXJtIHlvdXIgZW1haWwgZmlyc3QuJwogICAgICAgICAgICByZXR1cm4gJ2FjY291bnQgbG9naW4gc2NjdWVzc2Z1bGx5JwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiAid3JvbmcgdXNlcm5hbWUgb3IgcGFzc3dvcmQiCiAgICBlbHNlOgogICAgICAgIHJldHVybiAid3JvbmcgdXNlcm5hbWUgb3IgcGFzc3dvcmQiCgoKQGFwcC5yb3V0ZSgnL3NpZ251cCcsIG1ldGhvZHM9WydQT1NUJ10pCmRlZiBzaWdudXAoKToKICAgIHRyeToKICAgICAgICBkYXRhID0gcmVxdWVzdC5nZXRfanNvbigpCiAgICAgICAgdXNlcm5hbWUgPSBkYXRhLmdldCgndXNlcm5hbWUnKQogICAgICAgICMgaWYoJyAnIGluIHVzZXJuYW1lKToKICAgICAgICAjICAgICByZXR1cm4gJ2Vycm9yJwogICAgICAgIGVtYWlsID0gZGF0YS5nZXQoJ2VtYWlsJykKICAgICAgICBwYXNzd29yZCA9IGRhdGEuZ2V0KCdwYXNzd29yZCcpCiAgICAgICAgc2VjcmV0X2tleSA9IGRhdGEuZ2V0KCdrZXknKQogICAgICAgIGlmKGRlY3J5cHRpb24oc2VjcmV0X2tleSk9PUZhbHNlKToKICAgICAgICAgICAgcmV0dXJuICdlcnJvcicKICAgICAgICBpZihVc2VyLnF1ZXJ5LmZpbHRlcl9ieSh1c2VybmFtZT11c2VybmFtZSkuZmlyc3QoKSk6CiAgICAgICAgICAgIHJldHVybiAidXNlcm5hbWUgYWxyZWFkeSBleGlzdHMiCiAgICAgICAgaWYoVXNlci5xdWVyeS5maWx0ZXJfYnkoZW1haWw9ZW1haWwpLmZpcnN0KCkpOgogICAgICAgICAgICByZXR1cm4gJ2VtYWlsIGFscmVhZHkgZXhpc3RzJwogICAgICAgIGhhc2hlZF9wYXNzd29yZCA9IGdlbmVyYXRlX3Bhc3N3b3JkX2hhc2gocGFzc3dvcmQsIG1ldGhvZD0nc2hhMjU2JykKICAgICAgICBuZXdfdXNlciA9IFVzZXIoCiAgICAgICAgICAgIHVzZXJuYW1lID0gdXNlcm5hbWUsCiAgICAgICAgICAgIGVtYWlsID0gZW1haWwsCiAgICAgICAgICAgIHBhc3N3b3JkID0gaGFzaGVkX3Bhc3N3b3JkLAogICAgICAgICAgICBjb25maXJtZWQ9RmFsc2UsCiAgICAgICAgICAgIGJhbGFuY2U9MTAwCiAgICAgICAgICAgICkKICAgICAgICB0b2tlbiA9IGdlbmVyYXRlX2NvbmZpcm1hdGlvbl90b2tlbihuZXdfdXNlci5lbWFpbCkKICAgICAgICBjb25maXJtX3VybCA9IHVybF9mb3IoJ2NvbmZpcm1fZW1haWwnLCB0b2tlbj10b2tlbiwgX2V4dGVybmFsPVRydWUpCiAgICAgICAgaHRtbCA9IHJlbmRlcl90ZW1wbGF0ZSgnYWN0aXZhdGUuaHRtbCcsIGNvbmZpcm1fdXJsPWNvbmZpcm1fdXJsKQogICAgICAgIHN1YmplY3QgPSAiQXdhYXpQYXkhIFBsZWFzZSBjb25maXJtIHlvdXIgZW1haWwiCiAgICAgICAgc2VuZF9lbWFpbChuZXdfdXNlci5lbWFpbCwgc3ViamVjdCwgaHRtbCkKICAgICAgICBkYi5zZXNzaW9uLmFkZChuZXdfdXNlcikKICAgICAgICBkYi5zZXNzaW9uLmNvbW1pdCgpCiAgICAgICAgcmV0dXJuICdhY2NvdW50IGNyZWF0ZWQgc2NjdWVzc2Z1bGx5JwogICAgZXhjZXB0OgogICAgICAgIHJldHVybiAnZXJyb3Igb2NjdXJlZCcKCgoKQGFwcC5yb3V0ZSgnL2ZldGNoYmFsYW5jZScsIG1ldGhvZHM9WydQT1NUJ10pCmRlZiBmZXRjaGJhbGFuY2UoKToKICAgIHRyeToKICAgICAgICBkYXRhID0gcmVxdWVzdC5nZXRfanNvbigpCiAgICAgICAgdXNlcm5hbWUgPSBkYXRhLmdldCgndXNlcm5hbWUnKQogICAgICAgIHNlY3JldF9rZXkgPSBkYXRhLmdldCgna2V5JykKICAgICAgICBpZihkZWNyeXB0aW9uKHNlY3JldF9rZXkpPT1GYWxzZSk6CiAgICAgICAgICAgIHJldHVybiAnZXJyb3InCiAgICAgICAgdXNlciA9IFVzZXIucXVlcnkuZmlsdGVyX2J5KHVzZXJuYW1lPXVzZXJuYW1lKS5maXJzdCgpCiAgICAgICAgaWYodXNlci5jb25maXJtZWQpOgogICAgICAgICAgICByZXR1cm4gc3RyKHVzZXIuYmFsYW5jZSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJldHVybiAnYmFsYW5jZSBmZXRjaCBmYWlsZWQnCjx8ZmltX2VuZHw+"]
["190ebfed628bfd10dc439a496234f6820bb0acff-1","190ebfed628bfd10dc439a496234f6820bb0acff","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGN2MgoKaW1hZ2UgPSBjdjIuaW1yZWFkKCJzYWxhaHBpYy5qcGVnIiwgMCkKY3YyLmltd3JpdGUoImNhbm55LmpwZyIsCWN2Mi5DYW5ueShpbWFnZSwxMDAsMjAwKSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpjdjIuaW1zaG93KCJjYW5ueSIsCWN2Mi5pbXJlYWQoImNhbm55LmpwZyIpKQpjdjIuaW1zaG93KCJPcmlnaW5hbCBJbWFnZSIsIGltYWdlKQpjdjIud2FpdEtleSgpCmN2Mi5kZXN0cm95QWxsV2luZG93cygpCjx8ZmltX2VuZHw+"]
["190ebfed628bfd10dc439a496234f6820bb0acff-2","190ebfed628bfd10dc439a496234f6820bb0acff","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGN2MgoKaW1hZ2UgPSBjdjIuaW1yZWFkKCJzYWxhaHBpYy5qcGVnIiwgMCkKPHxmaW1faG9sZXw+CmN2Mi5kZXN0cm95QWxsV2luZG93cygpCjx8ZmltX3N1ZmZpeHw+CmN2Mi5pbXdyaXRlKCJjYW5ueS5qcGciLAljdjIuQ2FubnkoaW1hZ2UsMTAwLDIwMCkpCmN2Mi5pbXNob3coImNhbm55IiwJY3YyLmltcmVhZCgiY2FubnkuanBnIikpCmN2Mi5pbXNob3coIk9yaWdpbmFsIEltYWdlIiwgaW1hZ2UpCmN2Mi53YWl0S2V5KCkKPHxmaW1fZW5kfD4="]
["dfd3c62949c23a68c1c9616fab7b894ced5f4544-1","dfd3c62949c23a68c1c9616fab7b894ced5f4544","PHxmaW1fcHJlZml4fD4KZnJvbSBtYXRwbG90bGliIGltcG9ydCBweXBsb3QgYXMgcGx0CmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmZyb20gc3VicHJvY2VzcyBpbXBvcnQgUG9wZW4KCmRlZiByZWFkQ29tbWFuZHNDc3YoZmlsZW5hbWUpOgogICAgIiIiQ3JlYXRlcyBhIHBhbmRhcyBkYXRhIGZyYW1lIHdpdGggaGVhZGVycyBmb3IgJ2NvbW1hbmRzJwogICAgZnJvbSBhIC5jc3YgZmlsZSBhbmQgcmV0dXJucyBlYWNoIG9mIHRoZSBjb2x1bW5zIGFzIHNlcGVyYXRlIGVudGl0aWVzLiAgVGhlIGNvbHVtbiAndXNlZF8nIGlzCiAgICB1c2VkIHRvIHNlbGVjdCB3aGF0IHJvd3MgdG8gdXNlCgogICAgQXJnczoKICAgICAgICBmaWxlbmFtZTogbmFtZSBvZiB0aGUgZmlsZQoKICAgIFJldHVybnM6CiAgICAgICAgcGFuZGFzIGRhdGEgZnJhbWUgd2l0aCBoZWFkZXJzIGZvciAnZmlsZW5hbWVzJywnbGFiZWxzJywnY29sb3JzJywnbWFya2VycycKICAgICIiIgogICAgZGF0YSA9IHBkLnJlYWRfY3N2KGZpbGVuYW1lKQogICAgZGF0YV91c2VkID0gZGF0YVtkYXRhWyJ1c2VkXyJdPT1UcnVlXQogICAgY29tbWFuZHMgPSBsaXN0KGRhdGFfdXNlZC5sb2NbOiwgImNvbW1hbmRzIl0pIAogICAgcmV0dXJuIGNvbW1hbmRzCgpkZWYgbWFpbihkYXRhX2RpciwgZmlsZW5hbWUpOgogICAgIiIiUnVuIG1haW4gc2NyaXB0IiIiCgogICAgIyByZWFkIGluIHRoZSBpbnB1dCBmaWxlcwogICAgY29tbWFuZHMgPSByZWFkQ29tbWFuZHNDc3YoZmlsZW5hbWUpCgogICAgIyBSdW4gaW4gcGFyYWxsZWwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgbl90aHJlYWRzID0gMTYgIzI4IDE2CiAgICB0aHJlYWRfY291bnQgPSAwCiAgICBjb21tYW5kc190b19ydW4gPSBbXQogICAgZm9yIGNvbW1hbmQgaW4gY29tbWFuZHM6Cjx8ZmltX2VuZHw+"]
["dfd3c62949c23a68c1c9616fab7b894ced5f4544-2","dfd3c62949c23a68c1c9616fab7b894ced5f4544","PHxmaW1fcHJlZml4fD4KZnJvbSBtYXRwbG90bGliIGltcG9ydCBweXBsb3QgYXMgcGx0CmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmZyb20gc3VicHJvY2VzcyBpbXBvcnQgUG9wZW4KCmRlZiByZWFkQ29tbWFuZHNDc3YoZmlsZW5hbWUpOgogICAgIiIiQ3JlYXRlcyBhIHBhbmRhcyBkYXRhIGZyYW1lIHdpdGggaGVhZGVycyBmb3IgJ2NvbW1hbmRzJwogICAgZnJvbSBhIC5jc3YgZmlsZSBhbmQgcmV0dXJucyBlYWNoIG9mIHRoZSBjb2x1bW5zIGFzIHNlcGVyYXRlIGVudGl0aWVzLiAgVGhlIGNvbHVtbiAndXNlZF8nIGlzCiAgICB1c2VkIHRvIHNlbGVjdCB3aGF0IHJvd3MgdG8gdXNlCgogICAgQXJnczoKICAgICAgICBmaWxlbmFtZTogbmFtZSBvZiB0aGUgZmlsZQoKICAgIFJldHVybnM6CiAgICAgICAgcGFuZGFzIGRhdGEgZnJhbWUgd2l0aCBoZWFkZXJzIGZvciAnZmlsZW5hbWVzJywnbGFiZWxzJywnY29sb3JzJywnbWFya2VycycKICAgICIiIgogICAgZGF0YSA9IHBkLnJlYWRfY3N2KGZpbGVuYW1lKQogICAgZGF0YV91c2VkID0gZGF0YVtkYXRhWyJ1c2VkXyJdPT1UcnVlXQogICAgY29tbWFuZHMgPSBsaXN0KGRhdGFfdXNlZC5sb2NbOiwgImNvbW1hbmRzIl0pIAogICAgcmV0dXJuIGNvbW1hbmRzCgpkZWYgbWFpbihkYXRhX2RpciwgZmlsZW5hbWUpOgogICAgIiIiUnVuIG1haW4gc2NyaXB0IiIiCgogICAgIyByZWFkIGluIHRoZSBpbnB1dCBmaWxlcwogICAgY29tbWFuZHMgPSByZWFkQ29tbWFuZHNDc3YoZmlsZW5hbWUpCgogICAgIyBSdW4gaW4gcGFyYWxsZWwKICAgIG5fdGhyZWFkcyA9IDE2ICMyOCAxNgogICAgdGhyZWFkX2NvdW50ID0gMAogICAgY29tbWFuZHNfdG9fcnVuID0gW10KICAgIGZvciBjb21tYW5kIGluIGNvbW1hbmRzOgogICAgICAgIGlmIHRocmVhZF9jb3VudCA8IG5fdGhyZWFkczoKICAgICAgICAgICAgY29tbWFuZHNfdG9fcnVuLmFwcGVuZChjb21tYW5kKQogICAgICAgICAgICB0aHJlYWRfY291bnQgKz0gMQogICAgICAgIGlmIHRocmVhZF9jb3VudCA+PSBuX3RocmVhZHMgb3IgY29tbWFuZCA9PSBjb21tYW5kc1stMV06CiAgICAgICAgICAgIERFVEFDSEVEX1BST0NFU1MgPSAweDAwMDAwMDA4CiAgICAgICAgICAgIHByb2NzID0gWyBQb3BlbihpLCBjcmVhdGlvbmZsYWdzPURFVEFDSEVEX1BST0NFU1MsIHNoZWxsPVRydWUpIGZvciBpIGluIGNvbW1hbmRzX3RvX3J1biBdCiAgICAgICAgICAgIGZvciBwIGluIHByb2NzOgogICAgICAgICAgICAgICAgcC53YWl0KCkKICAgICAgICAgICAgY29tbWFuZHNfdG9fcnVuID0gW10KICAgICAgICAgICAgdGhyZWFkX2NvdW50ID0gMAoKIyBSdW4gbWFpbgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIyBJbnB1dCBmaWxlcwogICAgZGF0YV9kaXIgPSAiIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBmaWxlbmFtZSA9IGRhdGFfZGlyICsgIkNvbW1hbmRzVG9SdW4uY3N2IgogICAgbWFpbihkYXRhX2RpciwgZmlsZW5hbWUpCjx8ZmltX2VuZHw+"]
["dfd3c62949c23a68c1c9616fab7b894ced5f4544-3","dfd3c62949c23a68c1c9616fab7b894ced5f4544","PHxmaW1fcHJlZml4fD4KZnJvbSBtYXRwbG90bGliIGltcG9ydCBweXBsb3QgYXMgcGx0CmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmZyb20gc3VicHJvY2VzcyBpbXBvcnQgUG9wZW4KCmRlZiByZWFkQ29tbWFuZHNDc3YoZmlsZW5hbWUpOgogICAgIiIiQ3JlYXRlcyBhIHBhbmRhcyBkYXRhIGZyYW1lIHdpdGggaGVhZGVycyBmb3IgJ2NvbW1hbmRzJwogICAgZnJvbSBhIC5jc3YgZmlsZSBhbmQgcmV0dXJucyBlYWNoIG9mIHRoZSBjb2x1bW5zIGFzIHNlcGVyYXRlIGVudGl0aWVzLiAgVGhlIGNvbHVtbiAndXNlZF8nIGlzCiAgICB1c2VkIHRvIHNlbGVjdCB3aGF0IHJvd3MgdG8gdXNlCgogICAgQXJnczoKICAgICAgICBmaWxlbmFtZTogbmFtZSBvZiB0aGUgZmlsZQoKICAgIFJldHVybnM6CiAgICAgICAgcGFuZGFzIGRhdGEgZnJhbWUgd2l0aCBoZWFkZXJzIGZvciAnZmlsZW5hbWVzJywnbGFiZWxzJywnY29sb3JzJywnbWFya2VycycKICAgICIiIgogICAgZGF0YSA9IHBkLnJlYWRfY3N2KGZpbGVuYW1lKQogICAgZGF0YV91c2VkID0gZGF0YVtkYXRhWyJ1c2VkXyJdPT1UcnVlXQogICAgY29tbWFuZHMgPSBsaXN0KGRhdGFfdXNlZC5sb2NbOiwgImNvbW1hbmRzIl0pIAogICAgcmV0dXJuIGNvbW1hbmRzCgpkZWYgbWFpbihkYXRhX2RpciwgZmlsZW5hbWUpOgogICAgIiIiUnVuIG1haW4gc2NyaXB0IiIiCgogICAgIyByZWFkIGluIHRoZSBpbnB1dCBmaWxlcwogICAgY29tbWFuZHMgPSByZWFkQ29tbWFuZHNDc3YoZmlsZW5hbWUpCgogICAgIyBSdW4gaW4gcGFyYWxsZWwKICAgIG5fdGhyZWFkcyA9IDE2ICMyOCAxNgogICAgdGhyZWFkX2NvdW50ID0gMAogICAgY29tbWFuZHNfdG9fcnVuID0gW10KICAgIGZvciBjb21tYW5kIGluIGNvbW1hbmRzOgogICAgICAgIGlmIHRocmVhZF9jb3VudCA8IG5fdGhyZWFkczoKICAgICAgICAgICAgY29tbWFuZHNfdG9fcnVuLmFwcGVuZChjb21tYW5kKQogICAgICAgICAgICB0aHJlYWRfY291bnQgKz0gMQogICAgICAgIGlmIHRocmVhZF9jb3VudCA+PSBuX3RocmVhZHMgb3IgY29tbWFuZCA9PSBjb21tYW5kc1stMV06CiAgICAgICAgICAgIERFVEFDSEVEX1BST0NFU1MgPSAweDAwMDAwMDA4Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgcHJvY3MgPSBbIFBvcGVuKGksIGNyZWF0aW9uZmxhZ3M9REVUQUNIRURfUFJPQ0VTUywgc2hlbGw9VHJ1ZSkgZm9yIGkgaW4gY29tbWFuZHNfdG9fcnVuIF0KICAgICAgICAgICAgZm9yIHAgaW4gcHJvY3M6CiAgICAgICAgICAgICAgICBwLndhaXQoKQogICAgICAgICAgICBjb21tYW5kc190b19ydW4gPSBbXQo8fGZpbV9lbmR8Pg=="]
["dfd3c62949c23a68c1c9616fab7b894ced5f4544-4","dfd3c62949c23a68c1c9616fab7b894ced5f4544","PHxmaW1fcHJlZml4fD4KZnJvbSBtYXRwbG90bGliIGltcG9ydCBweXBsb3QgYXMgcGx0CmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmZyb20gc3VicHJvY2VzcyBpbXBvcnQgUG9wZW4KCmRlZiByZWFkQ29tbWFuZHNDc3YoZmlsZW5hbWUpOgogICAgIiIiQ3JlYXRlcyBhIHBhbmRhcyBkYXRhIGZyYW1lIHdpdGggaGVhZGVycyBmb3IgJ2NvbW1hbmRzJwogICAgZnJvbSBhIC5jc3YgZmlsZSBhbmQgcmV0dXJucyBlYWNoIG9mIHRoZSBjb2x1bW5zIGFzIHNlcGVyYXRlIGVudGl0aWVzLiAgVGhlIGNvbHVtbiAndXNlZF8nIGlzCiAgICB1c2VkIHRvIHNlbGVjdCB3aGF0IHJvd3MgdG8gdXNlCgogICAgQXJnczoKICAgICAgICBmaWxlbmFtZTogbmFtZSBvZiB0aGUgZmlsZQoKICAgIFJldHVybnM6CiAgICAgICAgcGFuZGFzIGRhdGEgZnJhbWUgd2l0aCBoZWFkZXJzIGZvciAnZmlsZW5hbWVzJywnbGFiZWxzJywnY29sb3JzJywnbWFya2VycycKICAgICIiIgogICAgZGF0YSA9IHBkLnJlYWRfY3N2KGZpbGVuYW1lKQogICAgZGF0YV91c2VkID0gZGF0YVtkYXRhWyJ1c2VkXyJdPT1UcnVlXQogICAgY29tbWFuZHMgPSBsaXN0KGRhdGFfdXNlZC5sb2NbOiwgImNvbW1hbmRzIl0pIAogICAgcmV0dXJuIGNvbW1hbmRzCgpkZWYgbWFpbihkYXRhX2RpciwgZmlsZW5hbWUpOgogICAgIiIiUnVuIG1haW4gc2NyaXB0IiIiCgogICAgIyByZWFkIGluIHRoZSBpbnB1dCBmaWxlcwogICAgY29tbWFuZHMgPSByZWFkQ29tbWFuZHNDc3YoZmlsZW5hbWUpCgogICAgIyBSdW4gaW4gcGFyYWxsZWwKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgbl90aHJlYWRzID0gMTYgIzI4IDE2CiAgICB0aHJlYWRfY291bnQgPSAwCiAgICBjb21tYW5kc190b19ydW4gPSBbXQogICAgZm9yIGNvbW1hbmQgaW4gY29tbWFuZHM6Cjx8ZmltX2VuZHw+"]
["5f80e2b2442e2658821d60436fe216176990db17-1","5f80e2b2442e2658821d60436fe216176990db17","PHxmaW1fcHJlZml4fD4KIyBNb2RpZmllZCBiYXNlZCBvbiB0aGUgSFJOZXQgcmVwby4KCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBvcwpmcm9tIHBhdGhsaWIgaW1wb3J0IFB1cmVXaW5kb3dzUGF0aAppbXBvcnQgcHByaW50CmltcG9ydCBzaHV0aWwKaW1wb3J0IHN5cwppbXBvcnQgZ2xvYgppbXBvcnQgdHFkbSAKCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm5uLnBhcmFsbGVsCmltcG9ydCB0b3JjaC5iYWNrZW5kcy5jdWRubiBhcyBjdWRubgppbXBvcnQgdG9yY2gub3B0aW0KaW1wb3J0IHRvcmNoLnV0aWxzLmRhdGEKaW1wb3J0IHRvcmNoLnV0aWxzLmRhdGEuZGlzdHJpYnV0ZWQKaW1wb3J0IHRvcmNodmlzaW9uLmRhdGFzZXRzIGFzIGRhdGFzZXRzCmltcG9ydCB0b3JjaHZpc2lvbi50cmFuc2Zvcm1zIGFzIHRyYW5zZm9ybXMKZnJvbSB0b3JjaC51dGlscy50ZW5zb3Jib2FyZCBpbXBvcnQgU3VtbWFyeVdyaXRlcgoKaW1wb3J0IHRvcmNodmlzaW9uLnV0aWxzIGFzIHR2dQppbXBvcnQgd2FuZGIKCmltcG9ydCBudW1weSBhcyBucAoKaW1wb3J0IHRpbWUgCmltcG9ydCBfaW5pdF9wYXRocwppbXBvcnQgbW9kZWxzCmZyb20gY29uZmlnIGltcG9ydCBjb25maWcKZnJvbSBjb25maWcgaW1wb3J0IHVwZGF0ZV9jb25maWcKZnJvbSBjb3JlLmRpZmZ1c2lvbl9mdW5jdGlvbiBpbXBvcnQgdHJhaW4KZnJvbSB1dGlscy5tb2RlbHN1bW1hcnkgaW1wb3J0IGdldF9tb2RlbF9zdW1tYXJ5CmZyb20gdXRpbHMudXRpbHMgaW1wb3J0IGdldF9vcHRpbWl6ZXIKZnJvbSB1dGlscy51dGlscyBpbXBvcnQgc2F2ZV9jaGVja3BvaW50CmZyb20gdXRpbHMudXRpbHMgaW1wb3J0IGNyZWF0ZV9sb2dnZXIKZnJvbSB0ZXJtY29sb3IgaW1wb3J0IGNvbG9yZWQKCmZyb20gY29yZS5kaWZmdXNpb25fZnVuY3Rpb24gaW1wb3J0IGdldF9iZXRhX3NjaGVkdWxlCgpkZWYgcGFyc2VfYXJncygpOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J1RyYWluIGNsYXNzaWZpY2F0aW9uIG5ldHdvcmsnKQogICAgCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNmZycsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2V4cGVyaW1lbnQgY29uZmlndXJlIGZpbGUgbmFtZScsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1tb2RlbERpcicsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J21vZGVsIGRpcmVjdG9yeScsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1sb2dEaXInLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdsb2cgZGlyZWN0b3J5JywKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9JycpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRhdGFEaXInLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkYXRhIGRpcmVjdG9yeScsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS10ZXN0TW9kZWwnLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSd0ZXN0TW9kZWwnLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcGVyY2VudCcsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3BlcmNlbnRhZ2Ugb2YgdHJhaW5pbmcgZGF0YSB0byB1c2UnLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPWZsb2F0LAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PTEuMCkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ29wdHMnLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJNb2RpZnkgY29uZmlnIG9wdGlvbnMgdXNpbmcgdGhlIGNvbW1hbmQtbGluZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9YXJncGFyc2UuUkVNQUlOREVSKQogICAgIyBBZGRpdGlvbmFsIGFyZ3VtZW50cyByZWxhdGVkIHRvIHNhbXBsaW5nIGltYWdlcyBmcm9tIG1kZXEKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tZmlkIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0taW50ZXJwb2xhdGlvbiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLXJlc3VtZV90cmFpbmluZyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IldoZXRoZXIgdG8gcmVzdW1lIHRyYWluaW5nIgogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLWkiLAogICAgICAgICItLWltYWdlX2ZvbGRlciIsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgZGVmYXVsdD0iaW1hZ2VzIiwKICAgICAgICBoZWxwPSJUaGUgZm9sZGVyIG5hbWUgb2Ygc2FtcGxlcyIsCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLW5pIiwKICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAogICAgICAgIGhlbHA9Ik5vIGludGVyYWN0aW9uLiBTdWl0YWJsZSBmb3IgU2x1cm0gSm9iIGxhdW5jaGVyIiwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tc2FtcGxlX3R5cGUiLAogICAgICAgIHR5cGU9c3RyLAogICAgICAgIGRlZmF1bHQ9ImdlbmVyYWxpemVkIiwKICAgICAgICBoZWxwPSJzYW1wbGluZyBhcHByb2FjaCAoZ2VuZXJhbGl6ZWQgb3IgZGRwbV9ub2lzeSkiLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1za2lwX3R5cGUiLAogICAgICAgIHR5cGU9c3RyLAogICAgICAgIGRlZmF1bHQ9InVuaWZvcm0iLAogICAgICAgIGhlbHA9InNraXAgYWNjb3JkaW5nIHRvICh1bmlmb3JtIG9yIHF1YWRyYXRpYykiLAogICAgKQo8fGZpbV9ob2xlfD4KICAgICAgICAiLS1ldGEiLAogICAgICAgIHR5cGU9ZmxvYXQsCiAgICAgICAgZGVmYXVsdD0wLjAsCiAgICAgICAgaGVscD0iZXRhIHVzZWQgdG8gY29udHJvbCB0aGUgdmFyaWFuY2VzIG9mIHNpZ21hIiwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tc2VxdWVuY2UiLCBhY3Rpb249InN0b3JlX3RydWUiKQoKICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCiAgICB1cGRhdGVfY29uZmlnKGNvbmZpZywgYXJncykKCiAgICByZXR1cm4gYXJncwoKZGVmIHRvcmNoMmh3Y3VpbnQ4KHgsIGNsaXA9RmFsc2UpOgogICAgaWYgY2xpcDoKICAgICAgICB4ID0gdG9yY2guY2xhbXAoeCwgLTEsIDEpCiAgICB4ID0gKHggKyAxLjApIC8gMi4wCiAgICByZXR1cm4geAoKZGVmIG1haW4oKToKICAgIHRvcmNoLm1hbnVhbF9zZWVkKDQyKQogICAgYXJncyA9IHBhcnNlX2FyZ3MoKQogICAgcHJpbnQoY29sb3JlZCgiU2V0dGluZyBkZWZhdWx0IHRlbnNvciB0eXBlIHRvIGN1ZGEuRmxvYXRUZW5zb3IiLCAiY3lhbiIpKQogICAgdG9yY2gubXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2QoJ3NwYXduJykKICAgIHRvcmNoLnNldF9kZWZhdWx0X3RlbnNvcl90eXBlKCd0b3JjaC5jdWRhLkZsb2F0VGVuc29yJykKCiAgICBsb2dnZXIsIGZpbmFsX291dHB1dF9kaXIsIHRiX2xvZ19kaXIgPSBjcmVhdGVfbG9nZ2VyKAogICAgICAgIGNvbmZpZywgYXJncy5jZmcsICd0cmFpbicpCgogICAgbG9nZ2VyLmluZm8ocHByaW50LnBmb3JtYXQoYXJncykpCiAgICBsb2dnZXIuaW5mbyhwcHJpbnQucGZvcm1hdChjb25maWcpKQoKICAgICMgY3Vkbm4gcmVsYXRlZCBzZXR0aW5nCiAgICBjdWRubi5iZW5jaG1hcmsgPSBjb25maWcuQ1VETk4uQkVOQ0hNQVJLCiAgICB0b3JjaC5iYWNrZW5kcy5jdWRubi5kZXRlcm1pbmlzdGljID0gY29uZmlnLkNVRE5OLkRFVEVSTUlOSVNUSUMKICAgIHRvcmNoLmJhY2tlbmRzLmN1ZG5uLmVuYWJsZWQgPSBjb25maWcuQ1VETk4uRU5BQkxFRAogICAKICAgICMgQ3JlYXRlIGZvbGRlciB0byBzYXZlIGltYWdlcwogICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGFyZ3MuaW1hZ2VfZm9sZGVyKToKICAgICAgICBvcy5ta2RpcihhcmdzLmltYWdlX2ZvbGRlcikgCiAgICBtb2RlbCA9IGV2YWwoJ21vZGVscy4nKyBjb25maWcuTU9ERUwuTkFNRSsnLmdldF9kaWZmdXNpb25fbmV0JykoY29uZmlnKS5jdWRhKCkKICAgIAogICAgaWYgY29uZmlnLlRSQUlOLk1PREVMX0ZJTEU6CiAgICAgICAgbW9kZWwubG9hZF9zdGF0ZV9kaWN0KHRvcmNoLmxvYWQoY29uZmlnLlRSQUlOLk1PREVMX0ZJTEUpKQogICAgICAgIGxvZ2dlci5pbmZvKGNvbG9yZWQoJz0+IGxvYWRpbmcgbW9kZWwgZnJvbSB7fScuZm9ybWF0KGNvbmZpZy5UUkFJTi5NT0RFTF9GSUxFKSwgJ3JlZCcpKQoKICAgICMgY29weSBtb2RlbCBmaWxlCiAgICB0aGlzX2RpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKICAgIG1vZGVsc19kc3RfZGlyID0gb3MucGF0aC5qb2luKGZpbmFsX291dHB1dF9kaXIsICdtb2RlbHMnKQogICAgaWYgb3MucGF0aC5leGlzdHMobW9kZWxzX2RzdF9kaXIpOgogICAgICAgIHNodXRpbC5ybXRyZWUobW9kZWxzX2RzdF9kaXIpCiAgICBzaHV0aWwuY29weXRyZWUob3MucGF0aC5qb2luKHRoaXNfZGlyLCAnLi4vbGliL21vZGVscycpLCBtb2RlbHNfZHN0X2RpcikKCiAgICB3cml0ZXJfZGljdCA9IHsKICAgICAgICAnd3JpdGVyJzogU3VtbWFyeVdyaXRlcihsb2dfZGlyPXRiX2xvZ19kaXIpIGlmIG5vdCBjb25maWcuREVCVUcuREVCVUcgZWxzZSBOb25lLAogICAgICAgICd0cmFpbl9nbG9iYWxfc3RlcHMnOiAwLAogICAgICAgICd2YWxpZF9nbG9iYWxfc3RlcHMnOiAwLAogICAgfQoKICAgIGdwdXMgPSBsaXN0KGNvbmZpZy5HUFVTKQogICAgbW9kZWwgPSBubi5EYXRhUGFyYWxsZWwobW9kZWwsIGRldmljZV9pZHM9Z3B1cykuY3VkYSgpCiAgICBwcmludCgiRmluaXNoZWQgY29uc3RydWN0aW5nIG1vZGVsISIpCgogICAgbW9kZWxfc3RhdGVfZmlsZSA9IG9zLnBhdGguam9pbihmaW5hbF9vdXRwdXRfZGlyLCAnY2hlY2twb2ludF82MzAxMS5wdGgudGFyJykKICAgICNtb2RlbF9zdGF0ZV9maWxlID0gb3MucGF0aC5qb2luKGZpbmFsX291dHB1dF9kaXIsICdmaW5hbF9zdGF0ZS5wdGgudGFyJykKICAgIGlmIG9zLnBhdGguaXNmaWxlKG1vZGVsX3N0YXRlX2ZpbGUpOgogICAgICAgIGNoZWNrcG9pbnQgPSB0b3JjaC5sb2FkKG1vZGVsX3N0YXRlX2ZpbGUpCiAgICAgICAgbW9kZWwubW9kdWxlLmxvYWRfc3RhdGVfZGljdChjaGVja3BvaW50WydzdGF0ZV9kaWN0J10pCiAgICAgICAgI21vZGVsLm1vZHVsZS5sb2FkX3N0YXRlX2RpY3QoY2hlY2twb2ludCkKICAgICAgICBsb2dnZXIuaW5mbygiPT4gbG9hZGVkIGNoZWNrcG9pbnQge30iLmZvcm1hdChtb2RlbF9zdGF0ZV9maWxlKSkKICAgIGVsc2U6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2hlY2twb2ludCBub3QgbG9hZGVkISIpCiAgICAjIEN1cnJlbnRseSBub3QgYWRkaW5nIEVNQQogICAgIyBUT0RPOiBBZGQgRU1BIGlmIG5lZWRlZCAKICAgIHNhbXBsZShtb2RlbCwgYXJncywgY29uZmlnKQoKCmRlZiBzYW1wbGUobW9kZWwsIGFyZ3MsIGNvbmZpZyk6CiAgICBtb2RlbC5ldmFsKCkKICAgIGlmIGFyZ3MuZmlkOgogICAgICAgIHNhbXBsZV9maWQobW9kZWwsIGFyZ3MsIGNvbmZpZykKICAgIGVsc2U6CiAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiU2FtcGxlIHByb2NlZGV1cmUgbm90IGRlZmluZWQiKQoKZGVmIHNhbXBsZV9maWQobW9kZWwsIGFyZ3MsIGNvbmZpZyk6CiAgICBpbWdfaWQgPSBsZW4oZ2xvYi5nbG9iKGYie2FyZ3MuaW1hZ2VfZm9sZGVyfS8qIikpCiAgICBwcmludChmInN0YXJ0aW5nIGZyb20gaW1hZ2Uge2ltZ19pZH0iKQogICAgdG90YWxfbl9zYW1wbGVzID0gNTAwMDAKICAgIG5fcm91bmRzID0gKHRvdGFsX25fc2FtcGxlcyAtIGltZ19pZCkgLy8gY29uZmlnLlNBTVBMSU5HLkJBVENIX1NJWkUKCiAgICB3aXRoIHRvcmNoLm5vX2dyYWQoKToKICAgICAgICBmb3IgXyBpbiB0cWRtLnRxZG0oCiAgICAgICAgICAgIHJhbmdlKG5fcm91bmRzKSwgZGVzYz0iR2VuZXJhdGluZyBpbWFnZSBzYW1wbGVzIGZvciBGSUQgZXZhbHVhdGlvbi4iCiAgICAgICAgKToKICAgICAgICAgICAgbiA9IGNvbmZpZy5TQU1QTElORy5CQVRDSF9TSVpFCiAgICAgICAgICAgIHggPSB0b3JjaC5yYW5kbigKICAgICAgICAgICAgICAgIG4sCiAgICAgICAgICAgICAgICBjb25maWcuREFUQS5DSEFOTkVMUywKICAgICAgICAgICAgICAgIGNvbmZpZy5EQVRBLklNQUdFX1NJWkUsCiAgICAgICAgICAgICAgICBjb25maWcuREFUQS5JTUFHRV9TSVpFLAogICAgICAgICAgICApLmN1ZGEoKQoKICAgICAgICAgICAgeCA9IHNhbXBsZV9pbWFnZSh4LCBtb2RlbCwgYXJncywgY29uZmlnKQogICAgICAgICAgICBpZiB0eXBlKHgpID09IGRpY3Q6CiAgICAgICAgICAgICAgICB4X3RyYW5zZm9ybWVkID0ge30KICAgICAgICAgICAgICAgIGZvciB0IGluIHgua2V5cygpOgogICAgICAgICAgICAgICAgICAgIGN1cl9pbWdfaWR4ID0gaW1nX2lkCiAgICAgICAgICAgICAgICAgICAgeF90cmFuc2Zvcm1lZFt0XSA9IGludmVyc2VfZGF0YV90cmFuc2Zvcm0oY29uZmlnLCB4W3RdKQogICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG4pOgogICAgICAgICAgICAgICAgICAgICAgICB0dnUuc2F2ZV9pbWFnZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhfdHJhbnNmb3JtZWRbaV0sIG9zLnBhdGguam9pbihhcmdzLmltYWdlX2ZvbGRlciwgc3RyKHQpLCAie2N1cl9pbWdfaWR4fS5wbmciKQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9pbWdfaWR4ICs9IDEKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHggPSBpbnZlcnNlX2RhdGFfdHJhbnNmb3JtKGNvbmZpZywgeCkKCiAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShuKToKICAgICAgICAgICAgICAgICAgICB0dnUuc2F2ZV9pbWFnZSgKICAgICAgICAgICAgICAgICAgICAgICAgeFtpXSwgb3MucGF0aC5qb2luKGFyZ3MuaW1hZ2VfZm9sZGVyLCBmIntpbWdfaWR9LnBuZyIpCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIGltZ19pZCArPSAxCgpkZWYgaW52ZXJzZV9kYXRhX3RyYW5zZm9ybShjb25maWcsIFgpOgogICAgaWYgY29uZmlnLkRBVEEuSU1BR0VfTUVBTjoKICAgICAgICBYID0gWCArIGNvbmZpZy5EQVRBLklNQUdFX01FQU4udG8oWC5kZXZpY2UpW05vbmUsIC4uLl0KCiAgICBpZiBjb25maWcuREFUQS5MT0dJVF9UUkFOU0ZPUk06CiAgICAgICAgWCA9IHRvcmNoLnNpZ21vaWQoWCkKICAgIGVsaWYgY29uZmlnLkRBVEEuUkVTQ0FMRUQ6CiAgICAgICAgWCA9IChYICsgMS4wKSAvIDIuMAoKICAgIHJldHVybiB0b3JjaC5jbGFtcChYLCAwLjAsIDEuMCkKCmRlZiBzYW1wbGVfaW1hZ2UoeCwgbW9kZWwsIGFyZ3MsIGNvbmZpZywgbGFzdD1UcnVlKToKICAgICMgR2V0IGFscGhhIGFuZCBiZXRhIHBhcmFtcwogICAgYmV0YXMgPSBnZXRfYmV0YV9zY2hlZHVsZSgKICAgICAgICBiZXRhX3NjaGVkdWxlPWNvbmZpZy5ESUZGVVNJT04uQkVUQV9TQ0hFRFVMRSwKICAgICAgICBiZXRhX3N0YXJ0PWNvbmZpZy5ESUZGVVNJT04uQkVUQV9TVEFSVCwKICAgICAgICBiZXRhX2VuZD1jb25maWcuRElGRlVTSU9OLkJFVEFfRU5ELAogICAgICAgIG51bV9kaWZmdXNpb25fdGltZXN0ZXBzPWNvbmZpZy5ESUZGVVNJT04uTlVNX0RJRkZVU0lOX1RJTUVTVEVQUywKICAgICkKICAgIGJldGFzID0gdG9yY2guZnJvbV9udW1weShiZXRhcykuZmxvYXQoKS5jdWRhKCkKICAgIG51bV90aW1lc3RlcHMgPSBiZXRhcy5zaGFwZVswXQoKICAgIHRyeToKICAgICAgICBza2lwID0gYXJncy5za2lwCiAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgIHNraXAgPSAxCgogICAgaWYgYXJncy5zYW1wbGVfdHlwZSA9PSAiZ2VuZXJhbGl6ZWQiOgogICAgICAgIGlmIGFyZ3Muc2tpcF90eXBlID09ICJ1bmlmb3JtIjoKICAgICAgICAgICAgc2tpcCA9IG51bV90aW1lc3RlcHMgLy8gYXJncy50aW1lc3RlcHMKICAgICAgICAgICAgc2VxID0gcmFuZ2UoMCwgbnVtX3RpbWVzdGVwcywgc2tpcCkKICAgICAgICBlbHNlOgogICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogICAgICAgIGxvZ2dlcj1Ob25lCiAgICAgICAgdXNlX3dhbmRiID0gRmFsc2UKICAgICAgICBpZiB1c2Vfd2FuZGI6CiAgICAgICAgICAgIHdhbmRiLmluaXQoIHByb2plY3Q9IkRESU0tOS0xNSIsIAogICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWYiRERJTS1tZGVxLXRlbWIte2xlbihzZXEpfSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlaW5pdD1UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25maWc9Y29uZmlnKQogICAgICAgICAgICBsb2dnZXIgPSB3YW5kYi5sb2cKCiAgICAgICAgeHMgPSBnZW5lcmFsaXplZF9zdGVwcyh4LCBzZXEsIG1vZGVsLCBiZXRhcywgbG9nZ2VyPWxvZ2dlciwgcHJpbnRfbG9ncz1GYWxzZSwgZXRhPWFyZ3MuZXRhKQogICAgICAgIHggPSB4cwogICAgZWxzZToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAgICBpZiBsYXN0OgogICAgICAgIHggPSB4WzBdWy0xXQogICAgcmV0dXJuIHgKCmRlZiBjb21wdXRlX2FscGhhKGJldGEsIHQpOgogICAgYmV0YSA9IHRvcmNoLmNhdChbdG9yY2guemVyb3MoMSkudG8oYmV0YS5kZXZpY2UpLCBiZXRhXSwgZGltPTApCiAgICBhID0gKDEgLSBiZXRhKS5jdW1wcm9kKGRpbT0wKS5pbmRleF9zZWxlY3QoMCwgdCArIDEpLnZpZXcoLTEsIDEsIDEsIDEpCiAgICByZXR1cm4gYQoKZGVmIGdlbmVyYWxpemVkX3N0ZXBzKHgsIHNlcSwgbW9kZWwsIGIsIGxvZ2dlcj1Ob25lLCBwcmludF9sb2dzPUZhbHNlLCAqKmt3YXJncyk6CiAgICB3aXRoIHRvcmNoLm5vX2dyYWQoKToKICAgICAgICBuID0geC5zaXplKDApCiAgICAgICAgc2VxX25leHQgPSBbLTFdICsgbGlzdChzZXFbOi0xXSkKICAgICAgICB4MF9wcmVkcyA9IFtdCiAgICAgICAgeHMgPSBbeF0KICAgICAgICBpbWFnZV9kaW0gPSB4LnNoYXBlCiAgICAgICAgIyBwcmludChzZXEpCiAgICAgICAgIyBwcmludChzZXFfbmV4dCkKICAgICAgICBmb3IgaSwgaiBpbiB6aXAocmV2ZXJzZWQoc2VxKSwgcmV2ZXJzZWQoc2VxX25leHQpKToKICAgICAgICAgICAgdCA9ICh0b3JjaC5vbmVzKG4pICogaSkudG8oeC5kZXZpY2UpCiAgICAgICAgICAgIG5leHRfdCA9ICh0b3JjaC5vbmVzKG4pICogaikudG8oeC5kZXZpY2UpCiAgICAgICAgICAgIGF0ID0gY29tcHV0ZV9hbHBoYShiLCB0LmxvbmcoKSkKICAgICAgICAgICAgYXRfbmV4dCA9IGNvbXB1dGVfYWxwaGEoYiwgbmV4dF90LmxvbmcoKSkKICAgICAgICAgICAgeHQgPSB4c1stMV0udG8oJ2N1ZGEnKQogICAgICAgICAgICBldCA9IG1vZGVsKHh0LCB0KVswXQogICAgICAgICAgICB4MF90ID0gKHh0IC0gZXQgKiAoMSAtIGF0KS5zcXJ0KCkpIC8gYXQuc3FydCgpCiAgICAgICAgICAgIHgwX3ByZWRzLmFwcGVuZCh4MF90LnRvKCdjcHUnKSkKICAgICAgICAgICAgYzEgPSAoCiAgICAgICAgICAgICAgICBrd2FyZ3MuZ2V0KCJldGEiLCAwKSAqICgoMSAtIGF0IC8gYXRfbmV4dCkgKiAoMSAtIGF0X25leHQpIC8gKDEgLSBhdCkpLnNxcnQoKQogICAgICAgICAgICApCiAgICAgICAgICAgIGMyID0gKCgxIC0gYXRfbmV4dCkgLSBjMSAqKiAyKS5zcXJ0KCkKICAgICAgICAgICAgbm9pc2VfdCA9IHRvcmNoLnJhbmRuX2xpa2UoeCkKICAgICAgICAgICAgeHRfbmV4dCA9IGF0X25leHQuc3FydCgpICogeDBfdCArIGMxICogbm9pc2VfdCArIGMyICogZXQKICAgICAgICAgICAgeHMuYXBwZW5kKHh0X25leHQudG8oJ2NwdScpKQoKICAgICAgICAgICAgbG9nX2RpY3QgPSB7CiAgICAgICAgICAgICAgICAgICAgImFscGhhIGF0IjogdG9yY2gubWVhbihhdCksCiAgICAgICAgICAgICAgICAgICAgImFscGhhIGF0X25leHQiOiB0b3JjaC5tZWFuKGF0X25leHQpLAogICAgICAgICAgICAgICAgICAgICJ4dCI6IHRvcmNoLm5vcm0oeHQucmVzaGFwZShpbWFnZV9kaW1bMF0sIC0xKSwgLTEpLm1lYW4oKSwKICAgICAgICAgICAgICAgICAgICAieHRfbmV4dCI6IHRvcmNoLm5vcm0oeHRfbmV4dC5yZXNoYXBlKGltYWdlX2RpbVswXSwgLTEpLCAtMSkubWVhbigpLAogICAgICAgICAgICAgICAgICAgICJjb2VmZiB4MCI6IGMxLnNxdWVlemUoKS5tZWFuKCksCiAgICAgICAgICAgICAgICAgICAgImNvZWZmIGV0IjogYzIuc3F1ZWV6ZSgpLm1lYW4oKSwKICAgICAgICAgICAgICAgICAgICAicHJlZGljdGlvbiBldCI6IHRvcmNoLm5vcm0oZXQucmVzaGFwZShpbWFnZV9kaW1bMF0sIC0xKSwgLTEpLm1lYW4oKSwKICAgICAgICAgICAgICAgICAgICAibm9pc2UiOiB0b3JjaC5ub3JtKG5vaXNlX3QucmVzaGFwZShpbWFnZV9kaW1bMF0sIC0xKSwgLTEpLm1lYW4oKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIGxvZ2dlciBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgIGlmIGkgJSA1MCA9PSAwIG9yIGkgPCA1MDoKICAgICAgICAgICAgICAgICAgICBsb2dfZGljdFsic2FtcGxlcyJdID0gW3dhbmRiLkltYWdlKHh0X25leHRbaV0pIGZvciBpIGluIHJhbmdlKG1pbih4dF9uZXh0LnNoYXBlWzBdLCAxMCkpXQogICAgICAgICAgICAgICAgbG9nZ2VyKGxvZ19kaWN0KQogICAgICAgICAgICBlbGlmIHByaW50X2xvZ3M6CiAgICAgICAgICAgICAgICBwcmludChpLCBqLCBsb2dfZGljdCkKICAgIHJldHVybiB4cywgeDBfcHJlZHMKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tdGltZXN0ZXBzIiwgdHlwZT1pbnQsIGRlZmF1bHQ9MTAwMCwgaGVscD0ibnVtYmVyIG9mIHN0ZXBzIGludm9sdmVkIgogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKPHxmaW1fZW5kfD4="]
["5f80e2b2442e2658821d60436fe216176990db17-2","5f80e2b2442e2658821d60436fe216176990db17","PHxmaW1fcHJlZml4fD4KIyBNb2RpZmllZCBiYXNlZCBvbiB0aGUgSFJOZXQgcmVwby4KCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKPHxmaW1faG9sZXw+CmltcG9ydCBzaHV0aWwKaW1wb3J0IHN5cwppbXBvcnQgZ2xvYgppbXBvcnQgdHFkbSAKCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm5uLnBhcmFsbGVsCmltcG9ydCB0b3JjaC5iYWNrZW5kcy5jdWRubiBhcyBjdWRubgppbXBvcnQgdG9yY2gub3B0aW0KaW1wb3J0IHRvcmNoLnV0aWxzLmRhdGEKaW1wb3J0IHRvcmNoLnV0aWxzLmRhdGEuZGlzdHJpYnV0ZWQKaW1wb3J0IHRvcmNodmlzaW9uLmRhdGFzZXRzIGFzIGRhdGFzZXRzCmltcG9ydCB0b3JjaHZpc2lvbi50cmFuc2Zvcm1zIGFzIHRyYW5zZm9ybXMKZnJvbSB0b3JjaC51dGlscy50ZW5zb3Jib2FyZCBpbXBvcnQgU3VtbWFyeVdyaXRlcgoKaW1wb3J0IHRvcmNodmlzaW9uLnV0aWxzIGFzIHR2dQppbXBvcnQgd2FuZGIKCmltcG9ydCBudW1weSBhcyBucAoKaW1wb3J0IHRpbWUgCmltcG9ydCBfaW5pdF9wYXRocwppbXBvcnQgbW9kZWxzCmZyb20gY29uZmlnIGltcG9ydCBjb25maWcKZnJvbSBjb25maWcgaW1wb3J0IHVwZGF0ZV9jb25maWcKZnJvbSBjb3JlLmRpZmZ1c2lvbl9mdW5jdGlvbiBpbXBvcnQgdHJhaW4KZnJvbSB1dGlscy5tb2RlbHN1bW1hcnkgaW1wb3J0IGdldF9tb2RlbF9zdW1tYXJ5CmZyb20gdXRpbHMudXRpbHMgaW1wb3J0IGdldF9vcHRpbWl6ZXIKZnJvbSB1dGlscy51dGlscyBpbXBvcnQgc2F2ZV9jaGVja3BvaW50CmZyb20gdXRpbHMudXRpbHMgaW1wb3J0IGNyZWF0ZV9sb2dnZXIKZnJvbSB0ZXJtY29sb3IgaW1wb3J0IGNvbG9yZWQKCmZyb20gY29yZS5kaWZmdXNpb25fZnVuY3Rpb24gaW1wb3J0IGdldF9iZXRhX3NjaGVkdWxlCgpkZWYgcGFyc2VfYXJncygpOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J1RyYWluIGNsYXNzaWZpY2F0aW9uIG5ldHdvcmsnKQogICAgCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNmZycsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2V4cGVyaW1lbnQgY29uZmlndXJlIGZpbGUgbmFtZScsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1tb2RlbERpcicsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J21vZGVsIGRpcmVjdG9yeScsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1sb2dEaXInLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdsb2cgZGlyZWN0b3J5JywKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9JycpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRhdGFEaXInLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkYXRhIGRpcmVjdG9yeScsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS10ZXN0TW9kZWwnLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSd0ZXN0TW9kZWwnLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcGVyY2VudCcsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3BlcmNlbnRhZ2Ugb2YgdHJhaW5pbmcgZGF0YSB0byB1c2UnLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPWZsb2F0LAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PTEuMCkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ29wdHMnLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJNb2RpZnkgY29uZmlnIG9wdGlvbnMgdXNpbmcgdGhlIGNvbW1hbmQtbGluZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9YXJncGFyc2UuUkVNQUlOREVSKQogICAgIyBBZGRpdGlvbmFsIGFyZ3VtZW50cyByZWxhdGVkIHRvIHNhbXBsaW5nIGltYWdlcyBmcm9tIG1kZXEKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tZmlkIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0taW50ZXJwb2xhdGlvbiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLXJlc3VtZV90cmFpbmluZyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IldoZXRoZXIgdG8gcmVzdW1lIHRyYWluaW5nIgogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLWkiLAogICAgICAgICItLWltYWdlX2ZvbGRlciIsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgZGVmYXVsdD0iaW1hZ2VzIiwKICAgICAgICBoZWxwPSJUaGUgZm9sZGVyIG5hbWUgb2Ygc2FtcGxlcyIsCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLW5pIiwKICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAogICAgICAgIGhlbHA9Ik5vIGludGVyYWN0aW9uLiBTdWl0YWJsZSBmb3IgU2x1cm0gSm9iIGxhdW5jaGVyIiwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tc2FtcGxlX3R5cGUiLAogICAgICAgIHR5cGU9c3RyLAogICAgICAgIGRlZmF1bHQ9ImdlbmVyYWxpemVkIiwKICAgICAgICBoZWxwPSJzYW1wbGluZyBhcHByb2FjaCAoZ2VuZXJhbGl6ZWQgb3IgZGRwbV9ub2lzeSkiLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1za2lwX3R5cGUiLAogICAgICAgIHR5cGU9c3RyLAogICAgICAgIGRlZmF1bHQ9InVuaWZvcm0iLAogICAgICAgIGhlbHA9InNraXAgYWNjb3JkaW5nIHRvICh1bmlmb3JtIG9yIHF1YWRyYXRpYykiLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS10aW1lc3RlcHMiLCB0eXBlPWludCwgZGVmYXVsdD0xMDAwLCBoZWxwPSJudW1iZXIgb2Ygc3RlcHMgaW52b2x2ZWQiCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLWV0YSIsCiAgICAgICAgdHlwZT1mbG9hdCwKICAgICAgICBkZWZhdWx0PTAuMCwKICAgICAgICBoZWxwPSJldGEgdXNlZCB0byBjb250cm9sIHRoZSB2YXJpYW5jZXMgb2Ygc2lnbWEiLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1zZXF1ZW5jZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCgogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKICAgIHVwZGF0ZV9jb25maWcoY29uZmlnLCBhcmdzKQoKICAgIHJldHVybiBhcmdzCgpkZWYgdG9yY2gyaHdjdWludDgoeCwgY2xpcD1GYWxzZSk6CiAgICBpZiBjbGlwOgogICAgICAgIHggPSB0b3JjaC5jbGFtcCh4LCAtMSwgMSkKICAgIHggPSAoeCArIDEuMCkgLyAyLjAKICAgIHJldHVybiB4CgpkZWYgbWFpbigpOgogICAgdG9yY2gubWFudWFsX3NlZWQoNDIpCiAgICBhcmdzID0gcGFyc2VfYXJncygpCiAgICBwcmludChjb2xvcmVkKCJTZXR0aW5nIGRlZmF1bHQgdGVuc29yIHR5cGUgdG8gY3VkYS5GbG9hdFRlbnNvciIsICJjeWFuIikpCiAgICB0b3JjaC5tdWx0aXByb2Nlc3Npbmcuc2V0X3N0YXJ0X21ldGhvZCgnc3Bhd24nKQogICAgdG9yY2guc2V0X2RlZmF1bHRfdGVuc29yX3R5cGUoJ3RvcmNoLmN1ZGEuRmxvYXRUZW5zb3InKQoKICAgIGxvZ2dlciwgZmluYWxfb3V0cHV0X2RpciwgdGJfbG9nX2RpciA9IGNyZWF0ZV9sb2dnZXIoCiAgICAgICAgY29uZmlnLCBhcmdzLmNmZywgJ3RyYWluJykKCiAgICBsb2dnZXIuaW5mbyhwcHJpbnQucGZvcm1hdChhcmdzKSkKICAgIGxvZ2dlci5pbmZvKHBwcmludC5wZm9ybWF0KGNvbmZpZykpCgogICAgIyBjdWRubiByZWxhdGVkIHNldHRpbmcKICAgIGN1ZG5uLmJlbmNobWFyayA9IGNvbmZpZy5DVUROTi5CRU5DSE1BUksKICAgIHRvcmNoLmJhY2tlbmRzLmN1ZG5uLmRldGVybWluaXN0aWMgPSBjb25maWcuQ1VETk4uREVURVJNSU5JU1RJQwogICAgdG9yY2guYmFja2VuZHMuY3Vkbm4uZW5hYmxlZCA9IGNvbmZpZy5DVUROTi5FTkFCTEVECiAgIAogICAgIyBDcmVhdGUgZm9sZGVyIHRvIHNhdmUgaW1hZ2VzCiAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXJncy5pbWFnZV9mb2xkZXIpOgogICAgICAgIG9zLm1rZGlyKGFyZ3MuaW1hZ2VfZm9sZGVyKSAKICAgIG1vZGVsID0gZXZhbCgnbW9kZWxzLicrIGNvbmZpZy5NT0RFTC5OQU1FKycuZ2V0X2RpZmZ1c2lvbl9uZXQnKShjb25maWcpLmN1ZGEoKQogICAgCiAgICBpZiBjb25maWcuVFJBSU4uTU9ERUxfRklMRToKICAgICAgICBtb2RlbC5sb2FkX3N0YXRlX2RpY3QodG9yY2gubG9hZChjb25maWcuVFJBSU4uTU9ERUxfRklMRSkpCiAgICAgICAgbG9nZ2VyLmluZm8oY29sb3JlZCgnPT4gbG9hZGluZyBtb2RlbCBmcm9tIHt9Jy5mb3JtYXQoY29uZmlnLlRSQUlOLk1PREVMX0ZJTEUpLCAncmVkJykpCgogICAgIyBjb3B5IG1vZGVsIGZpbGUKICAgIHRoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQogICAgbW9kZWxzX2RzdF9kaXIgPSBvcy5wYXRoLmpvaW4oZmluYWxfb3V0cHV0X2RpciwgJ21vZGVscycpCiAgICBpZiBvcy5wYXRoLmV4aXN0cyhtb2RlbHNfZHN0X2Rpcik6CiAgICAgICAgc2h1dGlsLnJtdHJlZShtb2RlbHNfZHN0X2RpcikKICAgIHNodXRpbC5jb3B5dHJlZShvcy5wYXRoLmpvaW4odGhpc19kaXIsICcuLi9saWIvbW9kZWxzJyksIG1vZGVsc19kc3RfZGlyKQoKICAgIHdyaXRlcl9kaWN0ID0gewogICAgICAgICd3cml0ZXInOiBTdW1tYXJ5V3JpdGVyKGxvZ19kaXI9dGJfbG9nX2RpcikgaWYgbm90IGNvbmZpZy5ERUJVRy5ERUJVRyBlbHNlIE5vbmUsCiAgICAgICAgJ3RyYWluX2dsb2JhbF9zdGVwcyc6IDAsCiAgICAgICAgJ3ZhbGlkX2dsb2JhbF9zdGVwcyc6IDAsCiAgICB9CgogICAgZ3B1cyA9IGxpc3QoY29uZmlnLkdQVVMpCiAgICBtb2RlbCA9IG5uLkRhdGFQYXJhbGxlbChtb2RlbCwgZGV2aWNlX2lkcz1ncHVzKS5jdWRhKCkKICAgIHByaW50KCJGaW5pc2hlZCBjb25zdHJ1Y3RpbmcgbW9kZWwhIikKCiAgICBtb2RlbF9zdGF0ZV9maWxlID0gb3MucGF0aC5qb2luKGZpbmFsX291dHB1dF9kaXIsICdjaGVja3BvaW50XzYzMDExLnB0aC50YXInKQogICAgI21vZGVsX3N0YXRlX2ZpbGUgPSBvcy5wYXRoLmpvaW4oZmluYWxfb3V0cHV0X2RpciwgJ2ZpbmFsX3N0YXRlLnB0aC50YXInKQogICAgaWYgb3MucGF0aC5pc2ZpbGUobW9kZWxfc3RhdGVfZmlsZSk6CiAgICAgICAgY2hlY2twb2ludCA9IHRvcmNoLmxvYWQobW9kZWxfc3RhdGVfZmlsZSkKICAgICAgICBtb2RlbC5tb2R1bGUubG9hZF9zdGF0ZV9kaWN0KGNoZWNrcG9pbnRbJ3N0YXRlX2RpY3QnXSkKICAgICAgICAjbW9kZWwubW9kdWxlLmxvYWRfc3RhdGVfZGljdChjaGVja3BvaW50KQogICAgICAgIGxvZ2dlci5pbmZvKCI9PiBsb2FkZWQgY2hlY2twb2ludCB7fSIuZm9ybWF0KG1vZGVsX3N0YXRlX2ZpbGUpKQogICAgZWxzZToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDaGVja3BvaW50IG5vdCBsb2FkZWQhIikKICAgICMgQ3VycmVudGx5IG5vdCBhZGRpbmcgRU1BCiAgICAjIFRPRE86IEFkZCBFTUEgaWYgbmVlZGVkIAogICAgc2FtcGxlKG1vZGVsLCBhcmdzLCBjb25maWcpCgoKZGVmIHNhbXBsZShtb2RlbCwgYXJncywgY29uZmlnKToKICAgIG1vZGVsLmV2YWwoKQogICAgaWYgYXJncy5maWQ6CiAgICAgICAgc2FtcGxlX2ZpZChtb2RlbCwgYXJncywgY29uZmlnKQogICAgZWxzZToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJTYW1wbGUgcHJvY2VkZXVyZSBub3QgZGVmaW5lZCIpCgpkZWYgc2FtcGxlX2ZpZChtb2RlbCwgYXJncywgY29uZmlnKToKICAgIGltZ19pZCA9IGxlbihnbG9iLmdsb2IoZiJ7YXJncy5pbWFnZV9mb2xkZXJ9LyoiKSkKICAgIHByaW50KGYic3RhcnRpbmcgZnJvbSBpbWFnZSB7aW1nX2lkfSIpCiAgICB0b3RhbF9uX3NhbXBsZXMgPSA1MDAwMAogICAgbl9yb3VuZHMgPSAodG90YWxfbl9zYW1wbGVzIC0gaW1nX2lkKSAvLyBjb25maWcuU0FNUExJTkcuQkFUQ0hfU0laRQoKICAgIHdpdGggdG9yY2gubm9fZ3JhZCgpOgogICAgICAgIGZvciBfIGluIHRxZG0udHFkbSgKICAgICAgICAgICAgcmFuZ2Uobl9yb3VuZHMpLCBkZXNjPSJHZW5lcmF0aW5nIGltYWdlIHNhbXBsZXMgZm9yIEZJRCBldmFsdWF0aW9uLiIKICAgICAgICApOgogICAgICAgICAgICBuID0gY29uZmlnLlNBTVBMSU5HLkJBVENIX1NJWkUKICAgICAgICAgICAgeCA9IHRvcmNoLnJhbmRuKAogICAgICAgICAgICAgICAgbiwKICAgICAgICAgICAgICAgIGNvbmZpZy5EQVRBLkNIQU5ORUxTLAogICAgICAgICAgICAgICAgY29uZmlnLkRBVEEuSU1BR0VfU0laRSwKICAgICAgICAgICAgICAgIGNvbmZpZy5EQVRBLklNQUdFX1NJWkUsCiAgICAgICAgICAgICkuY3VkYSgpCgogICAgICAgICAgICB4ID0gc2FtcGxlX2ltYWdlKHgsIG1vZGVsLCBhcmdzLCBjb25maWcpCiAgICAgICAgICAgIGlmIHR5cGUoeCkgPT0gZGljdDoKICAgICAgICAgICAgICAgIHhfdHJhbnNmb3JtZWQgPSB7fQogICAgICAgICAgICAgICAgZm9yIHQgaW4geC5rZXlzKCk6CiAgICAgICAgICAgICAgICAgICAgY3VyX2ltZ19pZHggPSBpbWdfaWQKICAgICAgICAgICAgICAgICAgICB4X3RyYW5zZm9ybWVkW3RdID0gaW52ZXJzZV9kYXRhX3RyYW5zZm9ybShjb25maWcsIHhbdF0pCiAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgICAgICAgICAgICAgICAgICAgIHR2dS5zYXZlX2ltYWdlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeF90cmFuc2Zvcm1lZFtpXSwgb3MucGF0aC5qb2luKGFyZ3MuaW1hZ2VfZm9sZGVyLCBzdHIodCksICJ7Y3VyX2ltZ19pZHh9LnBuZyIpCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2ltZ19pZHggKz0gMQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgeCA9IGludmVyc2VfZGF0YV90cmFuc2Zvcm0oY29uZmlnLCB4KQoKICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG4pOgogICAgICAgICAgICAgICAgICAgIHR2dS5zYXZlX2ltYWdlKAogICAgICAgICAgICAgICAgICAgICAgICB4W2ldLCBvcy5wYXRoLmpvaW4oYXJncy5pbWFnZV9mb2xkZXIsIGYie2ltZ19pZH0ucG5nIikKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgaW1nX2lkICs9IDEKCmRlZiBpbnZlcnNlX2RhdGFfdHJhbnNmb3JtKGNvbmZpZywgWCk6CiAgICBpZiBjb25maWcuREFUQS5JTUFHRV9NRUFOOgogICAgICAgIFggPSBYICsgY29uZmlnLkRBVEEuSU1BR0VfTUVBTi50byhYLmRldmljZSlbTm9uZSwgLi4uXQoKICAgIGlmIGNvbmZpZy5EQVRBLkxPR0lUX1RSQU5TRk9STToKICAgICAgICBYID0gdG9yY2guc2lnbW9pZChYKQogICAgZWxpZiBjb25maWcuREFUQS5SRVNDQUxFRDoKICAgICAgICBYID0gKFggKyAxLjApIC8gMi4wCgogICAgcmV0dXJuIHRvcmNoLmNsYW1wKFgsIDAuMCwgMS4wKQoKZGVmIHNhbXBsZV9pbWFnZSh4LCBtb2RlbCwgYXJncywgY29uZmlnLCBsYXN0PVRydWUpOgogICAgIyBHZXQgYWxwaGEgYW5kIGJldGEgcGFyYW1zCiAgICBiZXRhcyA9IGdldF9iZXRhX3NjaGVkdWxlKAogICAgICAgIGJldGFfc2NoZWR1bGU9Y29uZmlnLkRJRkZVU0lPTi5CRVRBX1NDSEVEVUxFLAogICAgICAgIGJldGFfc3RhcnQ9Y29uZmlnLkRJRkZVU0lPTi5CRVRBX1NUQVJULAogICAgICAgIGJldGFfZW5kPWNvbmZpZy5ESUZGVVNJT04uQkVUQV9FTkQsCiAgICAgICAgbnVtX2RpZmZ1c2lvbl90aW1lc3RlcHM9Y29uZmlnLkRJRkZVU0lPTi5OVU1fRElGRlVTSU5fVElNRVNURVBTLAogICAgKQogICAgYmV0YXMgPSB0b3JjaC5mcm9tX251bXB5KGJldGFzKS5mbG9hdCgpLmN1ZGEoKQogICAgbnVtX3RpbWVzdGVwcyA9IGJldGFzLnNoYXBlWzBdCgogICAgdHJ5OgogICAgICAgIHNraXAgPSBhcmdzLnNraXAKICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgc2tpcCA9IDEKCiAgICBpZiBhcmdzLnNhbXBsZV90eXBlID09ICJnZW5lcmFsaXplZCI6CiAgICAgICAgaWYgYXJncy5za2lwX3R5cGUgPT0gInVuaWZvcm0iOgogICAgICAgICAgICBza2lwID0gbnVtX3RpbWVzdGVwcyAvLyBhcmdzLnRpbWVzdGVwcwogICAgICAgICAgICBzZXEgPSByYW5nZSgwLCBudW1fdGltZXN0ZXBzLCBza2lwKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgICAgICAgbG9nZ2VyPU5vbmUKICAgICAgICB1c2Vfd2FuZGIgPSBGYWxzZQogICAgICAgIGlmIHVzZV93YW5kYjoKICAgICAgICAgICAgd2FuZGIuaW5pdCggcHJvamVjdD0iRERJTS05LTE1IiwgCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZiJERElNLW1kZXEtdGVtYi17bGVuKHNlcSl9IiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVpbml0PVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZz1jb25maWcpCiAgICAgICAgICAgIGxvZ2dlciA9IHdhbmRiLmxvZwoKICAgICAgICB4cyA9IGdlbmVyYWxpemVkX3N0ZXBzKHgsIHNlcSwgbW9kZWwsIGJldGFzLCBsb2dnZXI9bG9nZ2VyLCBwcmludF9sb2dzPUZhbHNlLCBldGE9YXJncy5ldGEpCiAgICAgICAgeCA9IHhzCiAgICBlbHNlOgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKICAgIGlmIGxhc3Q6CiAgICAgICAgeCA9IHhbMF1bLTFdCiAgICByZXR1cm4geAoKZGVmIGNvbXB1dGVfYWxwaGEoYmV0YSwgdCk6CiAgICBiZXRhID0gdG9yY2guY2F0KFt0b3JjaC56ZXJvcygxKS50byhiZXRhLmRldmljZSksIGJldGFdLCBkaW09MCkKICAgIGEgPSAoMSAtIGJldGEpLmN1bXByb2QoZGltPTApLmluZGV4X3NlbGVjdCgwLCB0ICsgMSkudmlldygtMSwgMSwgMSwgMSkKICAgIHJldHVybiBhCgpkZWYgZ2VuZXJhbGl6ZWRfc3RlcHMoeCwgc2VxLCBtb2RlbCwgYiwgbG9nZ2VyPU5vbmUsIHByaW50X2xvZ3M9RmFsc2UsICoqa3dhcmdzKToKICAgIHdpdGggdG9yY2gubm9fZ3JhZCgpOgogICAgICAgIG4gPSB4LnNpemUoMCkKICAgICAgICBzZXFfbmV4dCA9IFstMV0gKyBsaXN0KHNlcVs6LTFdKQogICAgICAgIHgwX3ByZWRzID0gW10KICAgICAgICB4cyA9IFt4XQogICAgICAgIGltYWdlX2RpbSA9IHguc2hhcGUKICAgICAgICAjIHByaW50KHNlcSkKICAgICAgICAjIHByaW50KHNlcV9uZXh0KQogICAgICAgIGZvciBpLCBqIGluIHppcChyZXZlcnNlZChzZXEpLCByZXZlcnNlZChzZXFfbmV4dCkpOgogICAgICAgICAgICB0ID0gKHRvcmNoLm9uZXMobikgKiBpKS50byh4LmRldmljZSkKICAgICAgICAgICAgbmV4dF90ID0gKHRvcmNoLm9uZXMobikgKiBqKS50byh4LmRldmljZSkKICAgICAgICAgICAgYXQgPSBjb21wdXRlX2FscGhhKGIsIHQubG9uZygpKQogICAgICAgICAgICBhdF9uZXh0ID0gY29tcHV0ZV9hbHBoYShiLCBuZXh0X3QubG9uZygpKQogICAgICAgICAgICB4dCA9IHhzWy0xXS50bygnY3VkYScpCiAgICAgICAgICAgIGV0ID0gbW9kZWwoeHQsIHQpWzBdCiAgICAgICAgICAgIHgwX3QgPSAoeHQgLSBldCAqICgxIC0gYXQpLnNxcnQoKSkgLyBhdC5zcXJ0KCkKICAgICAgICAgICAgeDBfcHJlZHMuYXBwZW5kKHgwX3QudG8oJ2NwdScpKQogICAgICAgICAgICBjMSA9ICgKICAgICAgICAgICAgICAgIGt3YXJncy5nZXQoImV0YSIsIDApICogKCgxIC0gYXQgLyBhdF9uZXh0KSAqICgxIC0gYXRfbmV4dCkgLyAoMSAtIGF0KSkuc3FydCgpCiAgICAgICAgICAgICkKICAgICAgICAgICAgYzIgPSAoKDEgLSBhdF9uZXh0KSAtIGMxICoqIDIpLnNxcnQoKQogICAgICAgICAgICBub2lzZV90ID0gdG9yY2gucmFuZG5fbGlrZSh4KQogICAgICAgICAgICB4dF9uZXh0ID0gYXRfbmV4dC5zcXJ0KCkgKiB4MF90ICsgYzEgKiBub2lzZV90ICsgYzIgKiBldAogICAgICAgICAgICB4cy5hcHBlbmQoeHRfbmV4dC50bygnY3B1JykpCgogICAgICAgICAgICBsb2dfZGljdCA9IHsKICAgICAgICAgICAgICAgICAgICAiYWxwaGEgYXQiOiB0b3JjaC5tZWFuKGF0KSwKICAgICAgICAgICAgICAgICAgICAiYWxwaGEgYXRfbmV4dCI6IHRvcmNoLm1lYW4oYXRfbmV4dCksCiAgICAgICAgICAgICAgICAgICAgInh0IjogdG9yY2gubm9ybSh4dC5yZXNoYXBlKGltYWdlX2RpbVswXSwgLTEpLCAtMSkubWVhbigpLAogICAgICAgICAgICAgICAgICAgICJ4dF9uZXh0IjogdG9yY2gubm9ybSh4dF9uZXh0LnJlc2hhcGUoaW1hZ2VfZGltWzBdLCAtMSksIC0xKS5tZWFuKCksCiAgICAgICAgICAgICAgICAgICAgImNvZWZmIHgwIjogYzEuc3F1ZWV6ZSgpLm1lYW4oKSwKICAgICAgICAgICAgICAgICAgICAiY29lZmYgZXQiOiBjMi5zcXVlZXplKCkubWVhbigpLAogICAgICAgICAgICAgICAgICAgICJwcmVkaWN0aW9uIGV0IjogdG9yY2gubm9ybShldC5yZXNoYXBlKGltYWdlX2RpbVswXSwgLTEpLCAtMSkubWVhbigpLAogICAgICAgICAgICAgICAgICAgICJub2lzZSI6IHRvcmNoLm5vcm0obm9pc2VfdC5yZXNoYXBlKGltYWdlX2RpbVswXSwgLTEpLCAtMSkubWVhbigpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgbG9nZ2VyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgaWYgaSAlIDUwID09IDAgb3IgaSA8IDUwOgogICAgICAgICAgICAgICAgICAgIGxvZ19kaWN0WyJzYW1wbGVzIl0gPSBbd2FuZGIuSW1hZ2UoeHRfbmV4dFtpXSkgZm9yIGkgaW4gcmFuZ2UobWluKHh0X25leHQuc2hhcGVbMF0sIDEwKSldCiAgICAgICAgICAgICAgICBsb2dnZXIobG9nX2RpY3QpCiAgICAgICAgICAgIGVsaWYgcHJpbnRfbG9nczoKICAgICAgICAgICAgICAgIHByaW50KGksIGosIGxvZ19kaWN0KQogICAgcmV0dXJuIHhzLCB4MF9wcmVkcwoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIG1haW4oKQo8fGZpbV9zdWZmaXh8PgppbXBvcnQgYXJncGFyc2UKaW1wb3J0IG9zCmZyb20gcGF0aGxpYiBpbXBvcnQgUHVyZVdpbmRvd3NQYXRoCmltcG9ydCBwcHJpbnQKPHxmaW1fZW5kfD4="]
["5f80e2b2442e2658821d60436fe216176990db17-3","5f80e2b2442e2658821d60436fe216176990db17","PHxmaW1fcHJlZml4fD4KIyBNb2RpZmllZCBiYXNlZCBvbiB0aGUgSFJOZXQgcmVwby4KCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBvcwpmcm9tIHBhdGhsaWIgaW1wb3J0IFB1cmVXaW5kb3dzUGF0aAppbXBvcnQgcHByaW50CmltcG9ydCBzaHV0aWwKaW1wb3J0IHN5cwppbXBvcnQgZ2xvYgppbXBvcnQgdHFkbSAKCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm5uLnBhcmFsbGVsCmltcG9ydCB0b3JjaC5iYWNrZW5kcy5jdWRubiBhcyBjdWRubgppbXBvcnQgdG9yY2gub3B0aW0KaW1wb3J0IHRvcmNoLnV0aWxzLmRhdGEKaW1wb3J0IHRvcmNoLnV0aWxzLmRhdGEuZGlzdHJpYnV0ZWQKaW1wb3J0IHRvcmNodmlzaW9uLmRhdGFzZXRzIGFzIGRhdGFzZXRzCmltcG9ydCB0b3JjaHZpc2lvbi50cmFuc2Zvcm1zIGFzIHRyYW5zZm9ybXMKZnJvbSB0b3JjaC51dGlscy50ZW5zb3Jib2FyZCBpbXBvcnQgU3VtbWFyeVdyaXRlcgoKaW1wb3J0IHRvcmNodmlzaW9uLnV0aWxzIGFzIHR2dQppbXBvcnQgd2FuZGIKCmltcG9ydCBudW1weSBhcyBucAoKaW1wb3J0IHRpbWUgCmltcG9ydCBfaW5pdF9wYXRocwppbXBvcnQgbW9kZWxzCmZyb20gY29uZmlnIGltcG9ydCBjb25maWcKZnJvbSBjb25maWcgaW1wb3J0IHVwZGF0ZV9jb25maWcKZnJvbSBjb3JlLmRpZmZ1c2lvbl9mdW5jdGlvbiBpbXBvcnQgdHJhaW4KZnJvbSB1dGlscy5tb2RlbHN1bW1hcnkgaW1wb3J0IGdldF9tb2RlbF9zdW1tYXJ5CmZyb20gdXRpbHMudXRpbHMgaW1wb3J0IGdldF9vcHRpbWl6ZXIKZnJvbSB1dGlscy51dGlscyBpbXBvcnQgc2F2ZV9jaGVja3BvaW50CmZyb20gdXRpbHMudXRpbHMgaW1wb3J0IGNyZWF0ZV9sb2dnZXIKZnJvbSB0ZXJtY29sb3IgaW1wb3J0IGNvbG9yZWQKCmZyb20gY29yZS5kaWZmdXNpb25fZnVuY3Rpb24gaW1wb3J0IGdldF9iZXRhX3NjaGVkdWxlCgpkZWYgcGFyc2VfYXJncygpOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J1RyYWluIGNsYXNzaWZpY2F0aW9uIG5ldHdvcmsnKQogICAgCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNmZycsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2V4cGVyaW1lbnQgY29uZmlndXJlIGZpbGUgbmFtZScsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1tb2RlbERpcicsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J21vZGVsIGRpcmVjdG9yeScsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1sb2dEaXInLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdsb2cgZGlyZWN0b3J5JywKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9JycpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRhdGFEaXInLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkYXRhIGRpcmVjdG9yeScsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS10ZXN0TW9kZWwnLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSd0ZXN0TW9kZWwnLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcGVyY2VudCcsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3BlcmNlbnRhZ2Ugb2YgdHJhaW5pbmcgZGF0YSB0byB1c2UnLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPWZsb2F0LAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PTEuMCkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ29wdHMnLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJNb2RpZnkgY29uZmlnIG9wdGlvbnMgdXNpbmcgdGhlIGNvbW1hbmQtbGluZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9YXJncGFyc2UuUkVNQUlOREVSKQogICAgIyBBZGRpdGlvbmFsIGFyZ3VtZW50cyByZWxhdGVkIHRvIHNhbXBsaW5nIGltYWdlcyBmcm9tIG1kZXEKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tZmlkIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0taW50ZXJwb2xhdGlvbiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLXJlc3VtZV90cmFpbmluZyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IldoZXRoZXIgdG8gcmVzdW1lIHRyYWluaW5nIgogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLWkiLAogICAgICAgICItLWltYWdlX2ZvbGRlciIsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgZGVmYXVsdD0iaW1hZ2VzIiwKICAgICAgICBoZWxwPSJUaGUgZm9sZGVyIG5hbWUgb2Ygc2FtcGxlcyIsCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLW5pIiwKICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAogICAgICAgIGhlbHA9Ik5vIGludGVyYWN0aW9uLiBTdWl0YWJsZSBmb3IgU2x1cm0gSm9iIGxhdW5jaGVyIiwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tc2FtcGxlX3R5cGUiLAogICAgICAgIHR5cGU9c3RyLAogICAgICAgIGRlZmF1bHQ9ImdlbmVyYWxpemVkIiwKICAgICAgICBoZWxwPSJzYW1wbGluZyBhcHByb2FjaCAoZ2VuZXJhbGl6ZWQgb3IgZGRwbV9ub2lzeSkiLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1za2lwX3R5cGUiLAogICAgICAgIHR5cGU9c3RyLAogICAgICAgIGRlZmF1bHQ9InVuaWZvcm0iLAogICAgICAgIGhlbHA9InNraXAgYWNjb3JkaW5nIHRvICh1bmlmb3JtIG9yIHF1YWRyYXRpYykiLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS10aW1lc3RlcHMiLCB0eXBlPWludCwgZGVmYXVsdD0xMDAwLCBoZWxwPSJudW1iZXIgb2Ygc3RlcHMgaW52b2x2ZWQiCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLWV0YSIsCiAgICAgICAgdHlwZT1mbG9hdCwKICAgICAgICBkZWZhdWx0PTAuMCwKICAgICAgICBoZWxwPSJldGEgdXNlZCB0byBjb250cm9sIHRoZSB2YXJpYW5jZXMgb2Ygc2lnbWEiLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1zZXF1ZW5jZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCgogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKPHxmaW1faG9sZXw+CmRlZiB0b3JjaDJod2N1aW50OCh4LCBjbGlwPUZhbHNlKToKICAgIGlmIGNsaXA6CiAgICAgICAgeCA9IHRvcmNoLmNsYW1wKHgsIC0xLCAxKQogICAgeCA9ICh4ICsgMS4wKSAvIDIuMAogICAgcmV0dXJuIHgKCmRlZiBtYWluKCk6CiAgICB0b3JjaC5tYW51YWxfc2VlZCg0MikKICAgIGFyZ3MgPSBwYXJzZV9hcmdzKCkKICAgIHByaW50KGNvbG9yZWQoIlNldHRpbmcgZGVmYXVsdCB0ZW5zb3IgdHlwZSB0byBjdWRhLkZsb2F0VGVuc29yIiwgImN5YW4iKSkKICAgIHRvcmNoLm11bHRpcHJvY2Vzc2luZy5zZXRfc3RhcnRfbWV0aG9kKCdzcGF3bicpCiAgICB0b3JjaC5zZXRfZGVmYXVsdF90ZW5zb3JfdHlwZSgndG9yY2guY3VkYS5GbG9hdFRlbnNvcicpCgogICAgbG9nZ2VyLCBmaW5hbF9vdXRwdXRfZGlyLCB0Yl9sb2dfZGlyID0gY3JlYXRlX2xvZ2dlcigKICAgICAgICBjb25maWcsIGFyZ3MuY2ZnLCAndHJhaW4nKQoKICAgIGxvZ2dlci5pbmZvKHBwcmludC5wZm9ybWF0KGFyZ3MpKQogICAgbG9nZ2VyLmluZm8ocHByaW50LnBmb3JtYXQoY29uZmlnKSkKCiAgICAjIGN1ZG5uIHJlbGF0ZWQgc2V0dGluZwogICAgY3Vkbm4uYmVuY2htYXJrID0gY29uZmlnLkNVRE5OLkJFTkNITUFSSwogICAgdG9yY2guYmFja2VuZHMuY3Vkbm4uZGV0ZXJtaW5pc3RpYyA9IGNvbmZpZy5DVUROTi5ERVRFUk1JTklTVElDCiAgICB0b3JjaC5iYWNrZW5kcy5jdWRubi5lbmFibGVkID0gY29uZmlnLkNVRE5OLkVOQUJMRUQKICAgCiAgICAjIENyZWF0ZSBmb2xkZXIgdG8gc2F2ZSBpbWFnZXMKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcmdzLmltYWdlX2ZvbGRlcik6CiAgICAgICAgb3MubWtkaXIoYXJncy5pbWFnZV9mb2xkZXIpIAogICAgbW9kZWwgPSBldmFsKCdtb2RlbHMuJysgY29uZmlnLk1PREVMLk5BTUUrJy5nZXRfZGlmZnVzaW9uX25ldCcpKGNvbmZpZykuY3VkYSgpCiAgICAKICAgIGlmIGNvbmZpZy5UUkFJTi5NT0RFTF9GSUxFOgogICAgICAgIG1vZGVsLmxvYWRfc3RhdGVfZGljdCh0b3JjaC5sb2FkKGNvbmZpZy5UUkFJTi5NT0RFTF9GSUxFKSkKICAgICAgICBsb2dnZXIuaW5mbyhjb2xvcmVkKCc9PiBsb2FkaW5nIG1vZGVsIGZyb20ge30nLmZvcm1hdChjb25maWcuVFJBSU4uTU9ERUxfRklMRSksICdyZWQnKSkKCiAgICAjIGNvcHkgbW9kZWwgZmlsZQogICAgdGhpc19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCiAgICBtb2RlbHNfZHN0X2RpciA9IG9zLnBhdGguam9pbihmaW5hbF9vdXRwdXRfZGlyLCAnbW9kZWxzJykKICAgIGlmIG9zLnBhdGguZXhpc3RzKG1vZGVsc19kc3RfZGlyKToKICAgICAgICBzaHV0aWwucm10cmVlKG1vZGVsc19kc3RfZGlyKQogICAgc2h1dGlsLmNvcHl0cmVlKG9zLnBhdGguam9pbih0aGlzX2RpciwgJy4uL2xpYi9tb2RlbHMnKSwgbW9kZWxzX2RzdF9kaXIpCgogICAgd3JpdGVyX2RpY3QgPSB7CiAgICAgICAgJ3dyaXRlcic6IFN1bW1hcnlXcml0ZXIobG9nX2Rpcj10Yl9sb2dfZGlyKSBpZiBub3QgY29uZmlnLkRFQlVHLkRFQlVHIGVsc2UgTm9uZSwKICAgICAgICAndHJhaW5fZ2xvYmFsX3N0ZXBzJzogMCwKICAgICAgICAndmFsaWRfZ2xvYmFsX3N0ZXBzJzogMCwKICAgIH0KCiAgICBncHVzID0gbGlzdChjb25maWcuR1BVUykKICAgIG1vZGVsID0gbm4uRGF0YVBhcmFsbGVsKG1vZGVsLCBkZXZpY2VfaWRzPWdwdXMpLmN1ZGEoKQogICAgcHJpbnQoIkZpbmlzaGVkIGNvbnN0cnVjdGluZyBtb2RlbCEiKQoKICAgIG1vZGVsX3N0YXRlX2ZpbGUgPSBvcy5wYXRoLmpvaW4oZmluYWxfb3V0cHV0X2RpciwgJ2NoZWNrcG9pbnRfNjMwMTEucHRoLnRhcicpCiAgICAjbW9kZWxfc3RhdGVfZmlsZSA9IG9zLnBhdGguam9pbihmaW5hbF9vdXRwdXRfZGlyLCAnZmluYWxfc3RhdGUucHRoLnRhcicpCiAgICBpZiBvcy5wYXRoLmlzZmlsZShtb2RlbF9zdGF0ZV9maWxlKToKICAgICAgICBjaGVja3BvaW50ID0gdG9yY2gubG9hZChtb2RlbF9zdGF0ZV9maWxlKQogICAgICAgIG1vZGVsLm1vZHVsZS5sb2FkX3N0YXRlX2RpY3QoY2hlY2twb2ludFsnc3RhdGVfZGljdCddKQogICAgICAgICNtb2RlbC5tb2R1bGUubG9hZF9zdGF0ZV9kaWN0KGNoZWNrcG9pbnQpCiAgICAgICAgbG9nZ2VyLmluZm8oIj0+IGxvYWRlZCBjaGVja3BvaW50IHt9Ii5mb3JtYXQobW9kZWxfc3RhdGVfZmlsZSkpCiAgICBlbHNlOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNoZWNrcG9pbnQgbm90IGxvYWRlZCEiKQogICAgIyBDdXJyZW50bHkgbm90IGFkZGluZyBFTUEKICAgICMgVE9ETzogQWRkIEVNQSBpZiBuZWVkZWQgCiAgICBzYW1wbGUobW9kZWwsIGFyZ3MsIGNvbmZpZykKCgpkZWYgc2FtcGxlKG1vZGVsLCBhcmdzLCBjb25maWcpOgogICAgbW9kZWwuZXZhbCgpCiAgICBpZiBhcmdzLmZpZDoKICAgICAgICBzYW1wbGVfZmlkKG1vZGVsLCBhcmdzLCBjb25maWcpCiAgICBlbHNlOgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIlNhbXBsZSBwcm9jZWRldXJlIG5vdCBkZWZpbmVkIikKCmRlZiBzYW1wbGVfZmlkKG1vZGVsLCBhcmdzLCBjb25maWcpOgogICAgaW1nX2lkID0gbGVuKGdsb2IuZ2xvYihmInthcmdzLmltYWdlX2ZvbGRlcn0vKiIpKQogICAgcHJpbnQoZiJzdGFydGluZyBmcm9tIGltYWdlIHtpbWdfaWR9IikKICAgIHRvdGFsX25fc2FtcGxlcyA9IDUwMDAwCiAgICBuX3JvdW5kcyA9ICh0b3RhbF9uX3NhbXBsZXMgLSBpbWdfaWQpIC8vIGNvbmZpZy5TQU1QTElORy5CQVRDSF9TSVpFCgogICAgd2l0aCB0b3JjaC5ub19ncmFkKCk6CiAgICAgICAgZm9yIF8gaW4gdHFkbS50cWRtKAogICAgICAgICAgICByYW5nZShuX3JvdW5kcyksIGRlc2M9IkdlbmVyYXRpbmcgaW1hZ2Ugc2FtcGxlcyBmb3IgRklEIGV2YWx1YXRpb24uIgogICAgICAgICk6CiAgICAgICAgICAgIG4gPSBjb25maWcuU0FNUExJTkcuQkFUQ0hfU0laRQogICAgICAgICAgICB4ID0gdG9yY2gucmFuZG4oCiAgICAgICAgICAgICAgICBuLAogICAgICAgICAgICAgICAgY29uZmlnLkRBVEEuQ0hBTk5FTFMsCiAgICAgICAgICAgICAgICBjb25maWcuREFUQS5JTUFHRV9TSVpFLAogICAgICAgICAgICAgICAgY29uZmlnLkRBVEEuSU1BR0VfU0laRSwKICAgICAgICAgICAgKS5jdWRhKCkKCiAgICAgICAgICAgIHggPSBzYW1wbGVfaW1hZ2UoeCwgbW9kZWwsIGFyZ3MsIGNvbmZpZykKICAgICAgICAgICAgaWYgdHlwZSh4KSA9PSBkaWN0OgogICAgICAgICAgICAgICAgeF90cmFuc2Zvcm1lZCA9IHt9CiAgICAgICAgICAgICAgICBmb3IgdCBpbiB4LmtleXMoKToKICAgICAgICAgICAgICAgICAgICBjdXJfaW1nX2lkeCA9IGltZ19pZAogICAgICAgICAgICAgICAgICAgIHhfdHJhbnNmb3JtZWRbdF0gPSBpbnZlcnNlX2RhdGFfdHJhbnNmb3JtKGNvbmZpZywgeFt0XSkKICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShuKToKICAgICAgICAgICAgICAgICAgICAgICAgdHZ1LnNhdmVfaW1hZ2UoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4X3RyYW5zZm9ybWVkW2ldLCBvcy5wYXRoLmpvaW4oYXJncy5pbWFnZV9mb2xkZXIsIHN0cih0KSwgIntjdXJfaW1nX2lkeH0ucG5nIikKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICBjdXJfaW1nX2lkeCArPSAxCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB4ID0gaW52ZXJzZV9kYXRhX3RyYW5zZm9ybShjb25maWcsIHgpCgogICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgICAgICAgICAgICAgICAgdHZ1LnNhdmVfaW1hZ2UoCiAgICAgICAgICAgICAgICAgICAgICAgIHhbaV0sIG9zLnBhdGguam9pbihhcmdzLmltYWdlX2ZvbGRlciwgZiJ7aW1nX2lkfS5wbmciKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICBpbWdfaWQgKz0gMQoKZGVmIGludmVyc2VfZGF0YV90cmFuc2Zvcm0oY29uZmlnLCBYKToKICAgIGlmIGNvbmZpZy5EQVRBLklNQUdFX01FQU46CiAgICAgICAgWCA9IFggKyBjb25maWcuREFUQS5JTUFHRV9NRUFOLnRvKFguZGV2aWNlKVtOb25lLCAuLi5dCgogICAgaWYgY29uZmlnLkRBVEEuTE9HSVRfVFJBTlNGT1JNOgogICAgICAgIFggPSB0b3JjaC5zaWdtb2lkKFgpCiAgICBlbGlmIGNvbmZpZy5EQVRBLlJFU0NBTEVEOgogICAgICAgIFggPSAoWCArIDEuMCkgLyAyLjAKCiAgICByZXR1cm4gdG9yY2guY2xhbXAoWCwgMC4wLCAxLjApCgpkZWYgc2FtcGxlX2ltYWdlKHgsIG1vZGVsLCBhcmdzLCBjb25maWcsIGxhc3Q9VHJ1ZSk6CiAgICAjIEdldCBhbHBoYSBhbmQgYmV0YSBwYXJhbXMKICAgIGJldGFzID0gZ2V0X2JldGFfc2NoZWR1bGUoCiAgICAgICAgYmV0YV9zY2hlZHVsZT1jb25maWcuRElGRlVTSU9OLkJFVEFfU0NIRURVTEUsCiAgICAgICAgYmV0YV9zdGFydD1jb25maWcuRElGRlVTSU9OLkJFVEFfU1RBUlQsCiAgICAgICAgYmV0YV9lbmQ9Y29uZmlnLkRJRkZVU0lPTi5CRVRBX0VORCwKICAgICAgICBudW1fZGlmZnVzaW9uX3RpbWVzdGVwcz1jb25maWcuRElGRlVTSU9OLk5VTV9ESUZGVVNJTl9USU1FU1RFUFMsCiAgICApCiAgICBiZXRhcyA9IHRvcmNoLmZyb21fbnVtcHkoYmV0YXMpLmZsb2F0KCkuY3VkYSgpCiAgICBudW1fdGltZXN0ZXBzID0gYmV0YXMuc2hhcGVbMF0KCiAgICB0cnk6CiAgICAgICAgc2tpcCA9IGFyZ3Muc2tpcAogICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICBza2lwID0gMQoKICAgIGlmIGFyZ3Muc2FtcGxlX3R5cGUgPT0gImdlbmVyYWxpemVkIjoKICAgICAgICBpZiBhcmdzLnNraXBfdHlwZSA9PSAidW5pZm9ybSI6CiAgICAgICAgICAgIHNraXAgPSBudW1fdGltZXN0ZXBzIC8vIGFyZ3MudGltZXN0ZXBzCiAgICAgICAgICAgIHNlcSA9IHJhbmdlKDAsIG51bV90aW1lc3RlcHMsIHNraXApCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICAgICAgICBsb2dnZXI9Tm9uZQogICAgICAgIHVzZV93YW5kYiA9IEZhbHNlCiAgICAgICAgaWYgdXNlX3dhbmRiOgogICAgICAgICAgICB3YW5kYi5pbml0KCBwcm9qZWN0PSJERElNLTktMTUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mIkRESU0tbWRlcS10ZW1iLXtsZW4oc2VxKX0iLAogICAgICAgICAgICAgICAgICAgICAgICByZWluaXQ9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPWNvbmZpZykKICAgICAgICAgICAgbG9nZ2VyID0gd2FuZGIubG9nCgogICAgICAgIHhzID0gZ2VuZXJhbGl6ZWRfc3RlcHMoeCwgc2VxLCBtb2RlbCwgYmV0YXMsIGxvZ2dlcj1sb2dnZXIsIHByaW50X2xvZ3M9RmFsc2UsIGV0YT1hcmdzLmV0YSkKICAgICAgICB4ID0geHMKICAgIGVsc2U6CiAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogICAgaWYgbGFzdDoKICAgICAgICB4ID0geFswXVstMV0KICAgIHJldHVybiB4CgpkZWYgY29tcHV0ZV9hbHBoYShiZXRhLCB0KToKICAgIGJldGEgPSB0b3JjaC5jYXQoW3RvcmNoLnplcm9zKDEpLnRvKGJldGEuZGV2aWNlKSwgYmV0YV0sIGRpbT0wKQogICAgYSA9ICgxIC0gYmV0YSkuY3VtcHJvZChkaW09MCkuaW5kZXhfc2VsZWN0KDAsIHQgKyAxKS52aWV3KC0xLCAxLCAxLCAxKQogICAgcmV0dXJuIGEKCmRlZiBnZW5lcmFsaXplZF9zdGVwcyh4LCBzZXEsIG1vZGVsLCBiLCBsb2dnZXI9Tm9uZSwgcHJpbnRfbG9ncz1GYWxzZSwgKiprd2FyZ3MpOgogICAgd2l0aCB0b3JjaC5ub19ncmFkKCk6CiAgICAgICAgbiA9IHguc2l6ZSgwKQogICAgICAgIHNlcV9uZXh0ID0gWy0xXSArIGxpc3Qoc2VxWzotMV0pCiAgICAgICAgeDBfcHJlZHMgPSBbXQogICAgICAgIHhzID0gW3hdCiAgICAgICAgaW1hZ2VfZGltID0geC5zaGFwZQogICAgICAgICMgcHJpbnQoc2VxKQogICAgICAgICMgcHJpbnQoc2VxX25leHQpCiAgICAgICAgZm9yIGksIGogaW4gemlwKHJldmVyc2VkKHNlcSksIHJldmVyc2VkKHNlcV9uZXh0KSk6CiAgICAgICAgICAgIHQgPSAodG9yY2gub25lcyhuKSAqIGkpLnRvKHguZGV2aWNlKQogICAgICAgICAgICBuZXh0X3QgPSAodG9yY2gub25lcyhuKSAqIGopLnRvKHguZGV2aWNlKQogICAgICAgICAgICBhdCA9IGNvbXB1dGVfYWxwaGEoYiwgdC5sb25nKCkpCiAgICAgICAgICAgIGF0X25leHQgPSBjb21wdXRlX2FscGhhKGIsIG5leHRfdC5sb25nKCkpCiAgICAgICAgICAgIHh0ID0geHNbLTFdLnRvKCdjdWRhJykKICAgICAgICAgICAgZXQgPSBtb2RlbCh4dCwgdClbMF0KICAgICAgICAgICAgeDBfdCA9ICh4dCAtIGV0ICogKDEgLSBhdCkuc3FydCgpKSAvIGF0LnNxcnQoKQogICAgICAgICAgICB4MF9wcmVkcy5hcHBlbmQoeDBfdC50bygnY3B1JykpCiAgICAgICAgICAgIGMxID0gKAogICAgICAgICAgICAgICAga3dhcmdzLmdldCgiZXRhIiwgMCkgKiAoKDEgLSBhdCAvIGF0X25leHQpICogKDEgLSBhdF9uZXh0KSAvICgxIC0gYXQpKS5zcXJ0KCkKICAgICAgICAgICAgKQogICAgICAgICAgICBjMiA9ICgoMSAtIGF0X25leHQpIC0gYzEgKiogMikuc3FydCgpCiAgICAgICAgICAgIG5vaXNlX3QgPSB0b3JjaC5yYW5kbl9saWtlKHgpCiAgICAgICAgICAgIHh0X25leHQgPSBhdF9uZXh0LnNxcnQoKSAqIHgwX3QgKyBjMSAqIG5vaXNlX3QgKyBjMiAqIGV0CiAgICAgICAgICAgIHhzLmFwcGVuZCh4dF9uZXh0LnRvKCdjcHUnKSkKCiAgICAgICAgICAgIGxvZ19kaWN0ID0gewogICAgICAgICAgICAgICAgICAgICJhbHBoYSBhdCI6IHRvcmNoLm1lYW4oYXQpLAogICAgICAgICAgICAgICAgICAgICJhbHBoYSBhdF9uZXh0IjogdG9yY2gubWVhbihhdF9uZXh0KSwKICAgICAgICAgICAgICAgICAgICAieHQiOiB0b3JjaC5ub3JtKHh0LnJlc2hhcGUoaW1hZ2VfZGltWzBdLCAtMSksIC0xKS5tZWFuKCksCiAgICAgICAgICAgICAgICAgICAgInh0X25leHQiOiB0b3JjaC5ub3JtKHh0X25leHQucmVzaGFwZShpbWFnZV9kaW1bMF0sIC0xKSwgLTEpLm1lYW4oKSwKICAgICAgICAgICAgICAgICAgICAiY29lZmYgeDAiOiBjMS5zcXVlZXplKCkubWVhbigpLAogICAgICAgICAgICAgICAgICAgICJjb2VmZiBldCI6IGMyLnNxdWVlemUoKS5tZWFuKCksCiAgICAgICAgICAgICAgICAgICAgInByZWRpY3Rpb24gZXQiOiB0b3JjaC5ub3JtKGV0LnJlc2hhcGUoaW1hZ2VfZGltWzBdLCAtMSksIC0xKS5tZWFuKCksCiAgICAgICAgICAgICAgICAgICAgIm5vaXNlIjogdG9yY2gubm9ybShub2lzZV90LnJlc2hhcGUoaW1hZ2VfZGltWzBdLCAtMSksIC0xKS5tZWFuKCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiBsb2dnZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICBpZiBpICUgNTAgPT0gMCBvciBpIDwgNTA6CiAgICAgICAgICAgICAgICAgICAgbG9nX2RpY3RbInNhbXBsZXMiXSA9IFt3YW5kYi5JbWFnZSh4dF9uZXh0W2ldKSBmb3IgaSBpbiByYW5nZShtaW4oeHRfbmV4dC5zaGFwZVswXSwgMTApKV0KICAgICAgICAgICAgICAgIGxvZ2dlcihsb2dfZGljdCkKICAgICAgICAgICAgZWxpZiBwcmludF9sb2dzOgogICAgICAgICAgICAgICAgcHJpbnQoaSwgaiwgbG9nX2RpY3QpCiAgICByZXR1cm4geHMsIHgwX3ByZWRzCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICB1cGRhdGVfY29uZmlnKGNvbmZpZywgYXJncykKCiAgICByZXR1cm4gYXJncwoKPHxmaW1fZW5kfD4="]
["5f80e2b2442e2658821d60436fe216176990db17-4","5f80e2b2442e2658821d60436fe216176990db17","PHxmaW1fcHJlZml4fD4KIyBNb2RpZmllZCBiYXNlZCBvbiB0aGUgSFJOZXQgcmVwby4KCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBvcwpmcm9tIHBhdGhsaWIgaW1wb3J0IFB1cmVXaW5kb3dzUGF0aAppbXBvcnQgcHByaW50CmltcG9ydCBzaHV0aWwKaW1wb3J0IHN5cwppbXBvcnQgZ2xvYgppbXBvcnQgdHFkbSAKCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm5uLnBhcmFsbGVsCmltcG9ydCB0b3JjaC5iYWNrZW5kcy5jdWRubiBhcyBjdWRubgppbXBvcnQgdG9yY2gub3B0aW0KaW1wb3J0IHRvcmNoLnV0aWxzLmRhdGEKaW1wb3J0IHRvcmNoLnV0aWxzLmRhdGEuZGlzdHJpYnV0ZWQKaW1wb3J0IHRvcmNodmlzaW9uLmRhdGFzZXRzIGFzIGRhdGFzZXRzCmltcG9ydCB0b3JjaHZpc2lvbi50cmFuc2Zvcm1zIGFzIHRyYW5zZm9ybXMKZnJvbSB0b3JjaC51dGlscy50ZW5zb3Jib2FyZCBpbXBvcnQgU3VtbWFyeVdyaXRlcgoKaW1wb3J0IHRvcmNodmlzaW9uLnV0aWxzIGFzIHR2dQppbXBvcnQgd2FuZGIKCmltcG9ydCBudW1weSBhcyBucAoKaW1wb3J0IHRpbWUgCmltcG9ydCBfaW5pdF9wYXRocwppbXBvcnQgbW9kZWxzCmZyb20gY29uZmlnIGltcG9ydCBjb25maWcKZnJvbSBjb25maWcgaW1wb3J0IHVwZGF0ZV9jb25maWcKZnJvbSBjb3JlLmRpZmZ1c2lvbl9mdW5jdGlvbiBpbXBvcnQgdHJhaW4KZnJvbSB1dGlscy5tb2RlbHN1bW1hcnkgaW1wb3J0IGdldF9tb2RlbF9zdW1tYXJ5CmZyb20gdXRpbHMudXRpbHMgaW1wb3J0IGdldF9vcHRpbWl6ZXIKZnJvbSB1dGlscy51dGlscyBpbXBvcnQgc2F2ZV9jaGVja3BvaW50CmZyb20gdXRpbHMudXRpbHMgaW1wb3J0IGNyZWF0ZV9sb2dnZXIKZnJvbSB0ZXJtY29sb3IgaW1wb3J0IGNvbG9yZWQKCmZyb20gY29yZS5kaWZmdXNpb25fZnVuY3Rpb24gaW1wb3J0IGdldF9iZXRhX3NjaGVkdWxlCgpkZWYgcGFyc2VfYXJncygpOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J1RyYWluIGNsYXNzaWZpY2F0aW9uIG5ldHdvcmsnKQogICAgCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNmZycsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2V4cGVyaW1lbnQgY29uZmlndXJlIGZpbGUgbmFtZScsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1tb2RlbERpcicsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J21vZGVsIGRpcmVjdG9yeScsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9JycpCjx8ZmltX2VuZHw+"]
["5f80e2b2442e2658821d60436fe216176990db17-5","5f80e2b2442e2658821d60436fe216176990db17","PHxmaW1fcHJlZml4fD4KIyBNb2RpZmllZCBiYXNlZCBvbiB0aGUgSFJOZXQgcmVwby4KCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBvcwpmcm9tIHBhdGhsaWIgaW1wb3J0IFB1cmVXaW5kb3dzUGF0aAppbXBvcnQgcHByaW50CmltcG9ydCBzaHV0aWwKaW1wb3J0IHN5cwppbXBvcnQgZ2xvYgppbXBvcnQgdHFkbSAKCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm5uLnBhcmFsbGVsCmltcG9ydCB0b3JjaC5iYWNrZW5kcy5jdWRubiBhcyBjdWRubgppbXBvcnQgdG9yY2gub3B0aW0KaW1wb3J0IHRvcmNoLnV0aWxzLmRhdGEKaW1wb3J0IHRvcmNoLnV0aWxzLmRhdGEuZGlzdHJpYnV0ZWQKaW1wb3J0IHRvcmNodmlzaW9uLmRhdGFzZXRzIGFzIGRhdGFzZXRzCmltcG9ydCB0b3JjaHZpc2lvbi50cmFuc2Zvcm1zIGFzIHRyYW5zZm9ybXMKZnJvbSB0b3JjaC51dGlscy50ZW5zb3Jib2FyZCBpbXBvcnQgU3VtbWFyeVdyaXRlcgoKaW1wb3J0IHRvcmNodmlzaW9uLnV0aWxzIGFzIHR2dQppbXBvcnQgd2FuZGIKCmltcG9ydCBudW1weSBhcyBucAoKaW1wb3J0IHRpbWUgCmltcG9ydCBfaW5pdF9wYXRocwppbXBvcnQgbW9kZWxzCmZyb20gY29uZmlnIGltcG9ydCBjb25maWcKZnJvbSBjb25maWcgaW1wb3J0IHVwZGF0ZV9jb25maWcKZnJvbSBjb3JlLmRpZmZ1c2lvbl9mdW5jdGlvbiBpbXBvcnQgdHJhaW4KZnJvbSB1dGlscy5tb2RlbHN1bW1hcnkgaW1wb3J0IGdldF9tb2RlbF9zdW1tYXJ5CmZyb20gdXRpbHMudXRpbHMgaW1wb3J0IGdldF9vcHRpbWl6ZXIKZnJvbSB1dGlscy51dGlscyBpbXBvcnQgc2F2ZV9jaGVja3BvaW50CmZyb20gdXRpbHMudXRpbHMgaW1wb3J0IGNyZWF0ZV9sb2dnZXIKZnJvbSB0ZXJtY29sb3IgaW1wb3J0IGNvbG9yZWQKCmZyb20gY29yZS5kaWZmdXNpb25fZnVuY3Rpb24gaW1wb3J0IGdldF9iZXRhX3NjaGVkdWxlCgpkZWYgcGFyc2VfYXJncygpOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J1RyYWluIGNsYXNzaWZpY2F0aW9uIG5ldHdvcmsnKQogICAgCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNmZycsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2V4cGVyaW1lbnQgY29uZmlndXJlIGZpbGUgbmFtZScsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1tb2RlbERpcicsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J21vZGVsIGRpcmVjdG9yeScsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1sb2dEaXInLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdsb2cgZGlyZWN0b3J5JywKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9JycpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRhdGFEaXInLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkYXRhIGRpcmVjdG9yeScsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS10ZXN0TW9kZWwnLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSd0ZXN0TW9kZWwnLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcGVyY2VudCcsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3BlcmNlbnRhZ2Ugb2YgdHJhaW5pbmcgZGF0YSB0byB1c2UnLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPWZsb2F0LAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PTEuMCkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ29wdHMnLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJNb2RpZnkgY29uZmlnIG9wdGlvbnMgdXNpbmcgdGhlIGNvbW1hbmQtbGluZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9YXJncGFyc2UuUkVNQUlOREVSKQogICAgIyBBZGRpdGlvbmFsIGFyZ3VtZW50cyByZWxhdGVkIHRvIHNhbXBsaW5nIGltYWdlcyBmcm9tIG1kZXEKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tZmlkIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0taW50ZXJwb2xhdGlvbiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLXJlc3VtZV90cmFpbmluZyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IldoZXRoZXIgdG8gcmVzdW1lIHRyYWluaW5nIgogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLWkiLAogICAgICAgICItLWltYWdlX2ZvbGRlciIsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgZGVmYXVsdD0iaW1hZ2VzIiwKICAgICAgICBoZWxwPSJUaGUgZm9sZGVyIG5hbWUgb2Ygc2FtcGxlcyIsCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLW5pIiwKICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAogICAgICAgIGhlbHA9Ik5vIGludGVyYWN0aW9uLiBTdWl0YWJsZSBmb3IgU2x1cm0gSm9iIGxhdW5jaGVyIiwKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tc2FtcGxlX3R5cGUiLAogICAgICAgIHR5cGU9c3RyLAogICAgICAgIGRlZmF1bHQ9ImdlbmVyYWxpemVkIiwKICAgICAgICBoZWxwPSJzYW1wbGluZyBhcHByb2FjaCAoZ2VuZXJhbGl6ZWQgb3IgZGRwbV9ub2lzeSkiLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1za2lwX3R5cGUiLAogICAgICAgIHR5cGU9c3RyLAogICAgICAgIGRlZmF1bHQ9InVuaWZvcm0iLAogICAgICAgIGhlbHA9InNraXAgYWNjb3JkaW5nIHRvICh1bmlmb3JtIG9yIHF1YWRyYXRpYykiLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS10aW1lc3RlcHMiLCB0eXBlPWludCwgZGVmYXVsdD0xMDAwLCBoZWxwPSJudW1iZXIgb2Ygc3RlcHMgaW52b2x2ZWQiCiAgICApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLWV0YSIsCiAgICAgICAgdHlwZT1mbG9hdCwKICAgICAgICBkZWZhdWx0PTAuMCwKICAgICAgICBoZWxwPSJldGEgdXNlZCB0byBjb250cm9sIHRoZSB2YXJpYW5jZXMgb2Ygc2lnbWEiLAogICAgKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1zZXF1ZW5jZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCgogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKICAgIHVwZGF0ZV9jb25maWcoY29uZmlnLCBhcmdzKQoKICAgIHJldHVybiBhcmdzCgpkZWYgdG9yY2gyaHdjdWludDgoeCwgY2xpcD1GYWxzZSk6CiAgICBpZiBjbGlwOgogICAgICAgIHggPSB0b3JjaC5jbGFtcCh4LCAtMSwgMSkKICAgIHggPSAoeCArIDEuMCkgLyAyLjAKICAgIHJldHVybiB4CgpkZWYgbWFpbigpOgogICAgdG9yY2gubWFudWFsX3NlZWQoNDIpCiAgICBhcmdzID0gcGFyc2VfYXJncygpCiAgICBwcmludChjb2xvcmVkKCJTZXR0aW5nIGRlZmF1bHQgdGVuc29yIHR5cGUgdG8gY3VkYS5GbG9hdFRlbnNvciIsICJjeWFuIikpCiAgICB0b3JjaC5tdWx0aXByb2Nlc3Npbmcuc2V0X3N0YXJ0X21ldGhvZCgnc3Bhd24nKQogICAgdG9yY2guc2V0X2RlZmF1bHRfdGVuc29yX3R5cGUoJ3RvcmNoLmN1ZGEuRmxvYXRUZW5zb3InKQoKICAgIGxvZ2dlciwgZmluYWxfb3V0cHV0X2RpciwgdGJfbG9nX2RpciA9IGNyZWF0ZV9sb2dnZXIoCiAgICAgICAgY29uZmlnLCBhcmdzLmNmZywgJ3RyYWluJykKCiAgICBsb2dnZXIuaW5mbyhwcHJpbnQucGZvcm1hdChhcmdzKSkKICAgIGxvZ2dlci5pbmZvKHBwcmludC5wZm9ybWF0KGNvbmZpZykpCgogICAgIyBjdWRubiByZWxhdGVkIHNldHRpbmcKICAgIGN1ZG5uLmJlbmNobWFyayA9IGNvbmZpZy5DVUROTi5CRU5DSE1BUksKICAgIHRvcmNoLmJhY2tlbmRzLmN1ZG5uLmRldGVybWluaXN0aWMgPSBjb25maWcuQ1VETk4uREVURVJNSU5JU1RJQwogICAgdG9yY2guYmFja2VuZHMuY3Vkbm4uZW5hYmxlZCA9IGNvbmZpZy5DVUROTi5FTkFCTEVECiAgIAogICAgIyBDcmVhdGUgZm9sZGVyIHRvIHNhdmUgaW1hZ2VzCiAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXJncy5pbWFnZV9mb2xkZXIpOgogICAgICAgIG9zLm1rZGlyKGFyZ3MuaW1hZ2VfZm9sZGVyKSAKICAgIG1vZGVsID0gZXZhbCgnbW9kZWxzLicrIGNvbmZpZy5NT0RFTC5OQU1FKycuZ2V0X2RpZmZ1c2lvbl9uZXQnKShjb25maWcpLmN1ZGEoKQogICAgCiAgICBpZiBjb25maWcuVFJBSU4uTU9ERUxfRklMRToKICAgICAgICBtb2RlbC5sb2FkX3N0YXRlX2RpY3QodG9yY2gubG9hZChjb25maWcuVFJBSU4uTU9ERUxfRklMRSkpCiAgICAgICAgbG9nZ2VyLmluZm8oY29sb3JlZCgnPT4gbG9hZGluZyBtb2RlbCBmcm9tIHt9Jy5mb3JtYXQoY29uZmlnLlRSQUlOLk1PREVMX0ZJTEUpLCAncmVkJykpCgogICAgIyBjb3B5IG1vZGVsIGZpbGUKICAgIHRoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQogICAgbW9kZWxzX2RzdF9kaXIgPSBvcy5wYXRoLmpvaW4oZmluYWxfb3V0cHV0X2RpciwgJ21vZGVscycpCiAgICBpZiBvcy5wYXRoLmV4aXN0cyhtb2RlbHNfZHN0X2Rpcik6CiAgICAgICAgc2h1dGlsLnJtdHJlZShtb2RlbHNfZHN0X2RpcikKICAgIHNodXRpbC5jb3B5dHJlZShvcy5wYXRoLmpvaW4odGhpc19kaXIsICcuLi9saWIvbW9kZWxzJyksIG1vZGVsc19kc3RfZGlyKQoKICAgIHdyaXRlcl9kaWN0ID0gewogICAgICAgICd3cml0ZXInOiBTdW1tYXJ5V3JpdGVyKGxvZ19kaXI9dGJfbG9nX2RpcikgaWYgbm90IGNvbmZpZy5ERUJVRy5ERUJVRyBlbHNlIE5vbmUsCiAgICAgICAgJ3RyYWluX2dsb2JhbF9zdGVwcyc6IDAsCiAgICAgICAgJ3ZhbGlkX2dsb2JhbF9zdGVwcyc6IDAsCiAgICB9CgogICAgZ3B1cyA9IGxpc3QoY29uZmlnLkdQVVMpCiAgICBtb2RlbCA9IG5uLkRhdGFQYXJhbGxlbChtb2RlbCwgZGV2aWNlX2lkcz1ncHVzKS5jdWRhKCkKICAgIHByaW50KCJGaW5pc2hlZCBjb25zdHJ1Y3RpbmcgbW9kZWwhIikKCiAgICBtb2RlbF9zdGF0ZV9maWxlID0gb3MucGF0aC5qb2luKGZpbmFsX291dHB1dF9kaXIsICdjaGVja3BvaW50XzYzMDExLnB0aC50YXInKQogICAgI21vZGVsX3N0YXRlX2ZpbGUgPSBvcy5wYXRoLmpvaW4oZmluYWxfb3V0cHV0X2RpciwgJ2ZpbmFsX3N0YXRlLnB0aC50YXInKQogICAgaWYgb3MucGF0aC5pc2ZpbGUobW9kZWxfc3RhdGVfZmlsZSk6CiAgICAgICAgY2hlY2twb2ludCA9IHRvcmNoLmxvYWQobW9kZWxfc3RhdGVfZmlsZSkKICAgICAgICBtb2RlbC5tb2R1bGUubG9hZF9zdGF0ZV9kaWN0KGNoZWNrcG9pbnRbJ3N0YXRlX2RpY3QnXSkKICAgICAgICAjbW9kZWwubW9kdWxlLmxvYWRfc3RhdGVfZGljdChjaGVja3BvaW50KQogICAgICAgIGxvZ2dlci5pbmZvKCI9PiBsb2FkZWQgY2hlY2twb2ludCB7fSIuZm9ybWF0KG1vZGVsX3N0YXRlX2ZpbGUpKQogICAgZWxzZToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDaGVja3BvaW50IG5vdCBsb2FkZWQhIikKICAgICMgQ3VycmVudGx5IG5vdCBhZGRpbmcgRU1BCiAgICAjIFRPRE86IEFkZCBFTUEgaWYgbmVlZGVkIAogICAgc2FtcGxlKG1vZGVsLCBhcmdzLCBjb25maWcpCgoKZGVmIHNhbXBsZShtb2RlbCwgYXJncywgY29uZmlnKToKICAgIG1vZGVsLmV2YWwoKQogICAgaWYgYXJncy5maWQ6CiAgICAgICAgc2FtcGxlX2ZpZChtb2RlbCwgYXJncywgY29uZmlnKQogICAgZWxzZToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJTYW1wbGUgcHJvY2VkZXVyZSBub3QgZGVmaW5lZCIpCgpkZWYgc2FtcGxlX2ZpZChtb2RlbCwgYXJncywgY29uZmlnKToKICAgIGltZ19pZCA9IGxlbihnbG9iLmdsb2IoZiJ7YXJncy5pbWFnZV9mb2xkZXJ9LyoiKSkKICAgIHByaW50KGYic3RhcnRpbmcgZnJvbSBpbWFnZSB7aW1nX2lkfSIpCiAgICB0b3RhbF9uX3NhbXBsZXMgPSA1MDAwMAogICAgbl9yb3VuZHMgPSAodG90YWxfbl9zYW1wbGVzIC0gaW1nX2lkKSAvLyBjb25maWcuU0FNUExJTkcuQkFUQ0hfU0laRQoKICAgIHdpdGggdG9yY2gubm9fZ3JhZCgpOgogICAgICAgIGZvciBfIGluIHRxZG0udHFkbSgKICAgICAgICAgICAgcmFuZ2Uobl9yb3VuZHMpLCBkZXNjPSJHZW5lcmF0aW5nIGltYWdlIHNhbXBsZXMgZm9yIEZJRCBldmFsdWF0aW9uLiIKICAgICAgICApOgogICAgICAgICAgICBuID0gY29uZmlnLlNBTVBMSU5HLkJBVENIX1NJWkUKICAgICAgICAgICAgeCA9IHRvcmNoLnJhbmRuKAogICAgICAgICAgICAgICAgbiwKICAgICAgICAgICAgICAgIGNvbmZpZy5EQVRBLkNIQU5ORUxTLAogICAgICAgICAgICAgICAgY29uZmlnLkRBVEEuSU1BR0VfU0laRSwKICAgICAgICAgICAgICAgIGNvbmZpZy5EQVRBLklNQUdFX1NJWkUsCjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgeF90cmFuc2Zvcm1lZCA9IHt9CiAgICAgICAgICAgICAgICBmb3IgdCBpbiB4LmtleXMoKToKICAgICAgICAgICAgICAgICAgICBjdXJfaW1nX2lkeCA9IGltZ19pZAogICAgICAgICAgICAgICAgICAgIHhfdHJhbnNmb3JtZWRbdF0gPSBpbnZlcnNlX2RhdGFfdHJhbnNmb3JtKGNvbmZpZywgeFt0XSkKICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShuKToKICAgICAgICAgICAgICAgICAgICAgICAgdHZ1LnNhdmVfaW1hZ2UoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4X3RyYW5zZm9ybWVkW2ldLCBvcy5wYXRoLmpvaW4oYXJncy5pbWFnZV9mb2xkZXIsIHN0cih0KSwgIntjdXJfaW1nX2lkeH0ucG5nIikKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICBjdXJfaW1nX2lkeCArPSAxCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB4ID0gaW52ZXJzZV9kYXRhX3RyYW5zZm9ybShjb25maWcsIHgpCgogICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgICAgICAgICAgICAgICAgdHZ1LnNhdmVfaW1hZ2UoCiAgICAgICAgICAgICAgICAgICAgICAgIHhbaV0sIG9zLnBhdGguam9pbihhcmdzLmltYWdlX2ZvbGRlciwgZiJ7aW1nX2lkfS5wbmciKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICBpbWdfaWQgKz0gMQoKZGVmIGludmVyc2VfZGF0YV90cmFuc2Zvcm0oY29uZmlnLCBYKToKICAgIGlmIGNvbmZpZy5EQVRBLklNQUdFX01FQU46CiAgICAgICAgWCA9IFggKyBjb25maWcuREFUQS5JTUFHRV9NRUFOLnRvKFguZGV2aWNlKVtOb25lLCAuLi5dCgogICAgaWYgY29uZmlnLkRBVEEuTE9HSVRfVFJBTlNGT1JNOgogICAgICAgIFggPSB0b3JjaC5zaWdtb2lkKFgpCiAgICBlbGlmIGNvbmZpZy5EQVRBLlJFU0NBTEVEOgogICAgICAgIFggPSAoWCArIDEuMCkgLyAyLjAKCiAgICByZXR1cm4gdG9yY2guY2xhbXAoWCwgMC4wLCAxLjApCgpkZWYgc2FtcGxlX2ltYWdlKHgsIG1vZGVsLCBhcmdzLCBjb25maWcsIGxhc3Q9VHJ1ZSk6CiAgICAjIEdldCBhbHBoYSBhbmQgYmV0YSBwYXJhbXMKICAgIGJldGFzID0gZ2V0X2JldGFfc2NoZWR1bGUoCiAgICAgICAgYmV0YV9zY2hlZHVsZT1jb25maWcuRElGRlVTSU9OLkJFVEFfU0NIRURVTEUsCiAgICAgICAgYmV0YV9zdGFydD1jb25maWcuRElGRlVTSU9OLkJFVEFfU1RBUlQsCiAgICAgICAgYmV0YV9lbmQ9Y29uZmlnLkRJRkZVU0lPTi5CRVRBX0VORCwKICAgICAgICBudW1fZGlmZnVzaW9uX3RpbWVzdGVwcz1jb25maWcuRElGRlVTSU9OLk5VTV9ESUZGVVNJTl9USU1FU1RFUFMsCiAgICApCiAgICBiZXRhcyA9IHRvcmNoLmZyb21fbnVtcHkoYmV0YXMpLmZsb2F0KCkuY3VkYSgpCiAgICBudW1fdGltZXN0ZXBzID0gYmV0YXMuc2hhcGVbMF0KCiAgICB0cnk6CiAgICAgICAgc2tpcCA9IGFyZ3Muc2tpcAogICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICBza2lwID0gMQoKICAgIGlmIGFyZ3Muc2FtcGxlX3R5cGUgPT0gImdlbmVyYWxpemVkIjoKICAgICAgICBpZiBhcmdzLnNraXBfdHlwZSA9PSAidW5pZm9ybSI6CiAgICAgICAgICAgIHNraXAgPSBudW1fdGltZXN0ZXBzIC8vIGFyZ3MudGltZXN0ZXBzCiAgICAgICAgICAgIHNlcSA9IHJhbmdlKDAsIG51bV90aW1lc3RlcHMsIHNraXApCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICAgICAgICBsb2dnZXI9Tm9uZQogICAgICAgIHVzZV93YW5kYiA9IEZhbHNlCiAgICAgICAgaWYgdXNlX3dhbmRiOgogICAgICAgICAgICB3YW5kYi5pbml0KCBwcm9qZWN0PSJERElNLTktMTUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mIkRESU0tbWRlcS10ZW1iLXtsZW4oc2VxKX0iLAogICAgICAgICAgICAgICAgICAgICAgICByZWluaXQ9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPWNvbmZpZykKICAgICAgICAgICAgbG9nZ2VyID0gd2FuZGIubG9nCgogICAgICAgIHhzID0gZ2VuZXJhbGl6ZWRfc3RlcHMoeCwgc2VxLCBtb2RlbCwgYmV0YXMsIGxvZ2dlcj1sb2dnZXIsIHByaW50X2xvZ3M9RmFsc2UsIGV0YT1hcmdzLmV0YSkKICAgICAgICB4ID0geHMKICAgIGVsc2U6CiAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogICAgaWYgbGFzdDoKICAgICAgICB4ID0geFswXVstMV0KICAgIHJldHVybiB4CgpkZWYgY29tcHV0ZV9hbHBoYShiZXRhLCB0KToKICAgIGJldGEgPSB0b3JjaC5jYXQoW3RvcmNoLnplcm9zKDEpLnRvKGJldGEuZGV2aWNlKSwgYmV0YV0sIGRpbT0wKQogICAgYSA9ICgxIC0gYmV0YSkuY3VtcHJvZChkaW09MCkuaW5kZXhfc2VsZWN0KDAsIHQgKyAxKS52aWV3KC0xLCAxLCAxLCAxKQogICAgcmV0dXJuIGEKCmRlZiBnZW5lcmFsaXplZF9zdGVwcyh4LCBzZXEsIG1vZGVsLCBiLCBsb2dnZXI9Tm9uZSwgcHJpbnRfbG9ncz1GYWxzZSwgKiprd2FyZ3MpOgogICAgd2l0aCB0b3JjaC5ub19ncmFkKCk6CiAgICAgICAgbiA9IHguc2l6ZSgwKQogICAgICAgIHNlcV9uZXh0ID0gWy0xXSArIGxpc3Qoc2VxWzotMV0pCiAgICAgICAgeDBfcHJlZHMgPSBbXQogICAgICAgIHhzID0gW3hdCiAgICAgICAgaW1hZ2VfZGltID0geC5zaGFwZQogICAgICAgICMgcHJpbnQoc2VxKQogICAgICAgICMgcHJpbnQoc2VxX25leHQpCiAgICAgICAgZm9yIGksIGogaW4gemlwKHJldmVyc2VkKHNlcSksIHJldmVyc2VkKHNlcV9uZXh0KSk6CiAgICAgICAgICAgIHQgPSAodG9yY2gub25lcyhuKSAqIGkpLnRvKHguZGV2aWNlKQogICAgICAgICAgICBuZXh0X3QgPSAodG9yY2gub25lcyhuKSAqIGopLnRvKHguZGV2aWNlKQogICAgICAgICAgICBhdCA9IGNvbXB1dGVfYWxwaGEoYiwgdC5sb25nKCkpCiAgICAgICAgICAgIGF0X25leHQgPSBjb21wdXRlX2FscGhhKGIsIG5leHRfdC5sb25nKCkpCiAgICAgICAgICAgIHh0ID0geHNbLTFdLnRvKCdjdWRhJykKICAgICAgICAgICAgZXQgPSBtb2RlbCh4dCwgdClbMF0KICAgICAgICAgICAgeDBfdCA9ICh4dCAtIGV0ICogKDEgLSBhdCkuc3FydCgpKSAvIGF0LnNxcnQoKQogICAgICAgICAgICB4MF9wcmVkcy5hcHBlbmQoeDBfdC50bygnY3B1JykpCiAgICAgICAgICAgIGMxID0gKAogICAgICAgICAgICAgICAga3dhcmdzLmdldCgiZXRhIiwgMCkgKiAoKDEgLSBhdCAvIGF0X25leHQpICogKDEgLSBhdF9uZXh0KSAvICgxIC0gYXQpKS5zcXJ0KCkKICAgICAgICAgICAgKQogICAgICAgICAgICBjMiA9ICgoMSAtIGF0X25leHQpIC0gYzEgKiogMikuc3FydCgpCiAgICAgICAgICAgIG5vaXNlX3QgPSB0b3JjaC5yYW5kbl9saWtlKHgpCiAgICAgICAgICAgIHh0X25leHQgPSBhdF9uZXh0LnNxcnQoKSAqIHgwX3QgKyBjMSAqIG5vaXNlX3QgKyBjMiAqIGV0CiAgICAgICAgICAgIHhzLmFwcGVuZCh4dF9uZXh0LnRvKCdjcHUnKSkKCiAgICAgICAgICAgIGxvZ19kaWN0ID0gewogICAgICAgICAgICAgICAgICAgICJhbHBoYSBhdCI6IHRvcmNoLm1lYW4oYXQpLAogICAgICAgICAgICAgICAgICAgICJhbHBoYSBhdF9uZXh0IjogdG9yY2gubWVhbihhdF9uZXh0KSwKICAgICAgICAgICAgICAgICAgICAieHQiOiB0b3JjaC5ub3JtKHh0LnJlc2hhcGUoaW1hZ2VfZGltWzBdLCAtMSksIC0xKS5tZWFuKCksCiAgICAgICAgICAgICAgICAgICAgInh0X25leHQiOiB0b3JjaC5ub3JtKHh0X25leHQucmVzaGFwZShpbWFnZV9kaW1bMF0sIC0xKSwgLTEpLm1lYW4oKSwKICAgICAgICAgICAgICAgICAgICAiY29lZmYgeDAiOiBjMS5zcXVlZXplKCkubWVhbigpLAogICAgICAgICAgICAgICAgICAgICJjb2VmZiBldCI6IGMyLnNxdWVlemUoKS5tZWFuKCksCiAgICAgICAgICAgICAgICAgICAgInByZWRpY3Rpb24gZXQiOiB0b3JjaC5ub3JtKGV0LnJlc2hhcGUoaW1hZ2VfZGltWzBdLCAtMSksIC0xKS5tZWFuKCksCiAgICAgICAgICAgICAgICAgICAgIm5vaXNlIjogdG9yY2gubm9ybShub2lzZV90LnJlc2hhcGUoaW1hZ2VfZGltWzBdLCAtMSksIC0xKS5tZWFuKCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiBsb2dnZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICBpZiBpICUgNTAgPT0gMCBvciBpIDwgNTA6CiAgICAgICAgICAgICAgICAgICAgbG9nX2RpY3RbInNhbXBsZXMiXSA9IFt3YW5kYi5JbWFnZSh4dF9uZXh0W2ldKSBmb3IgaSBpbiByYW5nZShtaW4oeHRfbmV4dC5zaGFwZVswXSwgMTApKV0KICAgICAgICAgICAgICAgIGxvZ2dlcihsb2dfZGljdCkKICAgICAgICAgICAgZWxpZiBwcmludF9sb2dzOgogICAgICAgICAgICAgICAgcHJpbnQoaSwgaiwgbG9nX2RpY3QpCiAgICByZXR1cm4geHMsIHgwX3ByZWRzCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICkuY3VkYSgpCgogICAgICAgICAgICB4ID0gc2FtcGxlX2ltYWdlKHgsIG1vZGVsLCBhcmdzLCBjb25maWcpCiAgICAgICAgICAgIGlmIHR5cGUoeCkgPT0gZGljdDoKPHxmaW1fZW5kfD4="]
["f2f9666d9ec6dbe690e04d429f039d67a2c1f433-1","f2f9666d9ec6dbe690e04d429f039d67a2c1f433","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IGxvZ2dpbmcKCmltcG9ydCB1bnJlYWwKaW1wb3J0IGluc3BlY3QKaW1wb3J0IHR5cGVzCmltcG9ydCBVdGlsaXRpZXMKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgoKCmNsYXNzIGF0dHJfZGV0YWlsKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgb2JqLCAgbmFtZTpzdHIpOgogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKCiAgICAgICAgYXR0ciA9IE5vbmUKICAgICAgICBzZWxmLmJDYWxsYWJsZSA9IE5vbmUKICAgICAgICBzZWxmLmJDYWxsYWJsZV9idWlsdGluID0gTm9uZQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGlmIGhhc2F0dHIob2JqLCBuYW1lKToKICAgICAgICAgICAgICAgIGF0dHIgPSBnZXRhdHRyKG9iaiwgbmFtZSkKICAgICAgICAgICAgICAgIHNlbGYuYkNhbGxhYmxlID0gY2FsbGFibGUoYXR0cikKICAgICAgICAgICAgICAgIHNlbGYuYkNhbGxhYmxlX2J1aWx0aW4gPSBpbnNwZWN0LmlzYnVpbHRpbihhdHRyKQo8fGZpbV9ob2xlfD4KCiAgICAgICAgc2VsZi5iUHJvcGVydHkgPSBub3Qgc2VsZi5iQ2FsbGFibGUKICAgICAgICBzZWxmLnJlc3VsdCA9IE5vbmUKICAgICAgICBzZWxmLnBhcmFtX3N0ciA9IE5vbmUKICAgICAgICBzZWxmLmJFZGl0b3JQcm9wZXJ0eSA9IE5vbmUKICAgICAgICBzZWxmLnJldHVybl90eXBlX3N0ciA9IE5vbmUKICAgICAgICBzZWxmLmRvY19zdHIgPSBOb25lCiAgICAgICAgc2VsZi5wcm9wZXJ0eV9ydyA9IE5vbmUKCiAgICAgICAgaWYgc2VsZi5iQ2FsbGFibGU6CiAgICAgICAgICAgIHNlbGYucmV0dXJuX3R5cGVfc3RyID0gIiIKCiAgICAgICAgaWYgc2VsZi5iQ2FsbGFibGVfYnVpbHRpbjoKICAgICAgICAgICAgaWYgaGFzYXR0cihhdHRyLCAnX19kb2NfXycpOgogICAgICAgICAgICAgICAgZG9jRm9yRGlzcGxheSwgcGFyYW1TdHIgPSBfc2ltcGxpZnlEb2MoYXR0ci5fX2RvY19fKQogICAgICAgICAgICAgICAgIyBwcmludChmIn5+fn5+IGF0dHI6IHtzZWxmLm5hbWV9ICBkb2NGb3JEaXNwbGF5OiB7ZG9jRm9yRGlzcGxheX0gIHBhcmFtU3RyOiB7cGFyYW1TdHJ9IikKICAgICAgICAgICAgICAgICMgcHJpbnQoYXR0ci5fX2RvY19fKQoKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICBzaWcgPSBpbnNwZWN0LmdldGFyZ3NwZWMoZ2V0YXR0cihvYmosIHNlbGYubmFtZSkpCiAgICAgICAgICAgICAgICAgICAgIyBwcmludCgiKysrICIsIHNpZykKCiAgICAgICAgICAgICAgICAgICAgYXJncyA9IHNpZy5hcmdzCiAgICAgICAgICAgICAgICAgICAgYXJnQ291bnQgPSBsZW4oYXJncykKICAgICAgICAgICAgICAgICAgICBpZiAic2VsZiIgaW4gYXJnczoKICAgICAgICAgICAgICAgICAgICAgICAgYXJnQ291bnQgLT0gMQogICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgICAgICAgICBhcmdDb3VudCA9IC0xCgogICAgICAgICAgICAgICAgaWYgIi0+ICIgaW4gZG9jRm9yRGlzcGxheToKICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybl90eXBlX3N0ciA9IGRvY0ZvckRpc3BsYXlbZG9jRm9yRGlzcGxheS5maW5kKCcpJykgKyAxOl0KICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5kb2Nfc3RyID0gZG9jRm9yRGlzcGxheVtkb2NGb3JEaXNwbGF5LmZpbmQoJyknKSArIDE6XQoKICAgICAgICAgICAgICAgIGlmIGFyZ0NvdW50ID09IDAgb3IgKGFyZ0NvdW50ID09IC0xIGFuZCBwYXJhbVN0ciA9PSAnJyk6CiAgICAgICAgICAgICAgICAgICAgIyBNZXRob2Qgd2l0aCBObyBwYXJhbXMKCiAgICAgICAgICAgICAgICAgICAgaWYgJy0+IE5vbmUnIG5vdCBpbiBkb2NGb3JEaXNwbGF5IG9yIHNlbGYubmFtZSBpbiBbIl9fcmVkdWNlX18iLCAiX3Bvc3RfaW5pdCJdOgogICAgICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJnZXRfYWN0b3JfdGltZV9kaWxhdGlvbiIgYW5kIGlzaW5zdGFuY2Uob2JqLCB1bnJlYWwuT2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNhbGwgZ2V0X2FjdG9yX3RpbWVfZGlsYXRpb24gd2lsbCBjcmFzaCBlbmdpbmUgaWYgYWN0b3IgaXMgZ2V0IGZyb20gQ0RPIGFuZCBoYXMgbm8gd29ybGQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb2JqLmdldF93b3JsZCgpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNlbGYucmVzdWx0ID0gInt9Ii5mb3JtYXQoYXR0ci5fX2NhbGxfXygpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IGF0dHIuX19jYWxsX18oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gInNraXAgY2FsbCwgd29ybGQgPT0gTm9uZS4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2VsZi5yZXN1bHQgPSAie30iLmZvcm1hdChhdHRyLl9fY2FsbF9fKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBhdHRyLl9fY2FsbF9fKCkKICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAic2tpcCBjYWxsLi4iCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoZiJkb2NGb3JEaXNwbGF5OiB7ZG9jRm9yRGlzcGxheX0sIHNlbGYubmFtZToge3NlbGYubmFtZX0iKQogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9ICJza2lwIGNhbGwuIgogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcmFtX3N0ciA9IHBhcmFtU3RyCiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAiIgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiQ2FuJ3QgZmluZCBwIikKICAgICAgICBlbGlmIHNlbGYuYkNhbGxhYmxlX290aGVyOgogICAgICAgICAgICBpZiBoYXNhdHRyKGF0dHIsICdfX2RvY19fJyk6CiAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGF0dHIuX19kb2NfXywgc3RyKToKICAgICAgICAgICAgICAgICAgICBkb2NGb3JEaXNwbGF5LCBwYXJhbVN0ciA9IF9zaW1wbGlmeURvYyhhdHRyLl9fZG9jX18pCgogICAgICAgICAgICBpZiBuYW1lIGluIFsiX19zdHJfXyIsICJfX2hhc2hfXyIsICJfX3JlcHJfXyIsICJfX2xlbl9fIl06CiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAie30iLmZvcm1hdChhdHRyLl9fY2FsbF9fKCkpCiAgICAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAic2tpcCBjYWxsLiIKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICMgc2VsZi5yZXN1bHQgPSAie30iLmZvcm1hdChnZXRhdHRyKG9iaiwgbmFtZSkpCiAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IGdldGF0dHIob2JqLCBuYW1lKQoKICAgIGRlZiBwb3N0KHNlbGYsIG9iaik6CiAgICAgICAgaWYgc2VsZi5iT3RoZXJQcm9wZXJ0eSBhbmQgbm90IHNlbGYucmVzdWx0OgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IGdldGF0dHIob2JqLCBzZWxmLm5hbWUpCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gInNraXAgY2FsbC4uLiIKCgoKICAgIGRlZiBhcHBseV9lZGl0b3JfcHJvcGVydHkoc2VsZiwgb2JqLCB0eXBlXywgcndzLCBkZXNjcmlwdCk6CiAgICAgICAgc2VsZi5iRWRpdG9yUHJvcGVydHkgPSBUcnVlCiAgICAgICAgc2VsZi5wcm9wZXJ0eV9ydyA9ICJbe31dIi5mb3JtYXQocndzKQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gZXZhbCgnb2JqLmdldF9lZGl0b3JfcHJvcGVydHkoInt9IiknLmZvcm1hdChzZWxmLm5hbWUpKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAiSW52YWxpZCIKCgoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHMgPSBmIkF0dHI6IHtzZWxmLm5hbWV9ICBwYXJhbVN0cjoge3NlbGYucGFyYW1fc3RyfSAgZGVzYzoge3NlbGYucmV0dXJuX3R5cGVfc3RyfSByZXN1bHQ6IHtzZWxmLnJlc3VsdH0iCiAgICAgICAgaWYgc2VsZi5iUHJvcGVydHk6CiAgICAgICAgICAgIHMgKz0gIiwgUHJvcGVydHkiCiAgICAgICAgaWYgc2VsZi5iRWRpdG9yUHJvcGVydHk6CiAgICAgICAgICAgIHMgKz0gIiwgRWlkdG9yIFByb3BlcnR5IgogICAgICAgIGlmIHNlbGYuYk90aGVyUHJvcGVydHk6CiAgICAgICAgICAgIHMgKz0gIiwgT3RoZXIgUHJvcGVydHkgIgogICAgICAgIGlmIHNlbGYuYkNhbGxhYmxlOgogICAgICAgICAgICBzICs9ICIsIENhbGxhYmxlIgogICAgICAgIGlmIHNlbGYuYkNhbGxhYmxlX2J1aWx0aW46CiAgICAgICAgICAgIHMgKz0gIiwgQ2FsbGFibGVfYnVpbHRpbiIKICAgICAgICBpZiBzZWxmLmJDYWxsYWJsZV9vdGhlcjoKICAgICAgICAgICAgcyArPSAiLCBiQ2FsbGFibGVfb3RoZXIiCiAgICAgICAgaWYgc2VsZi5iSGFzUGFyYW1GdW5jdGlvbjoKICAgICAgICAgICAgcys9ICIsIGJIYXNQYXJhbUZ1bmN0aW9uIgogICAgICAgIHJldHVybiBzCgoKICAgIGRlZiBjaGVjayhzZWxmKToKICAgICAgICBjb3VudGVyID0gQ291bnRlcihbc2VsZi5iT3RoZXJQcm9wZXJ0eSwgc2VsZi5iRWRpdG9yUHJvcGVydHksIHNlbGYuYkNhbGxhYmxlX290aGVyLCBzZWxmLmJDYWxsYWJsZV9idWlsdGluXSkKICAgICAgICAjIHByaW50KCJjb3VudGVyOiB7fSIuZm9ybWF0KGNvdW50ZXIpKQogICAgICAgIGlmIGNvdW50ZXJbVHJ1ZV0gPT0gMjoKICAgICAgICAgICAgdW5yZWFsLmxvZ19lcnJvcihmIntzZWxmLm5hbWV9OiB7c2VsZi5iRWRpdG9yUHJvcGVydHl9LCB7c2VsZi5iT3RoZXJQcm9wZXJ0eX0ge3NlbGYuYkNhbGxhYmxlX2J1aWx0aW59IHtzZWxmLmJDYWxsYWJsZV9vdGhlcn0iKQoKCiAgICBAcHJvcGVydHkKICAgIGRlZiBiT3RoZXJQcm9wZXJ0eShzZWxmKToKICAgICAgICBpZiBzZWxmLmJQcm9wZXJ0eSBhbmQgbm90IHNlbGYuYkVkaXRvclByb3BlcnR5OgogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIHJldHVybiBGYWxzZQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGJDYWxsYWJsZV9vdGhlcihzZWxmKToKICAgICAgICBpZiBzZWxmLmJDYWxsYWJsZSBhbmQgbm90IHNlbGYuYkNhbGxhYmxlX2J1aWx0aW46CiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgQHByb3BlcnR5CiAgICBkZWYgZGlzcGxheV9uYW1lKHNlbGYsIGJSaWNoVGV4dD1UcnVlKToKICAgICAgICBpZiBzZWxmLmJQcm9wZXJ0eToKICAgICAgICAgICAgcmV0dXJuIGYiXHR7c2VsZi5uYW1lfSIKICAgICAgICBlbHNlOgogICAgICAgICAgICAjIGNhbGxhYmxlCiAgICAgICAgICAgIGlmIHNlbGYucGFyYW1fc3RyOgogICAgICAgICAgICAgICAgcmV0dXJuIGYiXHR7c2VsZi5uYW1lfSh7c2VsZi5wYXJhbV9zdHJ9KSAgICB7c2VsZi5yZXR1cm5fdHlwZV9zdHJ9IgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgaWYgc2VsZi5iQ2FsbGFibGVfb3RoZXI6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYiXHR7c2VsZi5uYW1lfSIgICMgX19oYXNoX18sIF9fY2xhc3NfXywgX19lcV9fIOetiQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZiJcdHtzZWxmLm5hbWV9KCkgICAge3NlbGYucmV0dXJuX3R5cGVfc3RyfSIKCiAgICBAcHJvcGVydHkKICAgIGRlZiBkaXNwbGF5X3Jlc3VsdChzZWxmKSAtPiBzdHI6CiAgICAgICAgaWYgc2VsZi5iRWRpdG9yUHJvcGVydHk6CiAgICAgICAgICAgIHJldHVybiAie30gICAge30iLmZvcm1hdChzZWxmLnJlc3VsdCwgc2VsZi5wcm9wZXJ0eV9ydykKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gInt9Ii5mb3JtYXQoc2VsZi5yZXN1bHQpCgogICAgQHByb3BlcnR5CiAgICBkZWYgYkhhc1BhcmFtRnVuY3Rpb24oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYucGFyYW1fc3RyIGFuZCBsZW4oc2VsZi5wYXJhbV9zdHIpICE9IDAKCgoKCgpkZWYgbGwob2JqKToKCiAgICBpZiBub3Qgb2JqOgogICAgICAgIHJldHVybiBOb25lCiAgICBpZiBpbnNwZWN0LmlzbW9kdWxlKG9iaik6CiAgICAgICAgcmV0dXJuIE5vbmUKCiAgICByZXN1bHQgPSBbXQogICAgZm9yIHggaW4gZGlyKG9iaik6CiAgICAgICAgYXR0ciA9IGF0dHJfZGV0YWlsKG9iaiwgeCkKICAgICAgICByZXN1bHQuYXBwZW5kKGF0dHIpCgoKICAgIGlmIGhhc2F0dHIob2JqLCAnX19kb2NfXycpIGFuZCBpc2luc3RhbmNlKG9iaiwgdW5yZWFsLk9iamVjdCk6CiAgICAgICAgZWRpdG9yUHJvcGVydGllc0luZm9zID0gX2dldEVkaXRvclByb3BlcnRpZXMob2JqLl9fZG9jX18sIG9iaikKICAgICAgICBmb3IgbmFtZSwgdHlwZV8sIHJ3cywgZGVzY3JpcHQgaW4gZWRpdG9yUHJvcGVydGllc0luZm9zOgogICAgICAgICAgICAjIHByaW50KGYifn4ge25hbWV9IHt0eXBlfSB7cndzfSwge2Rlc2NyaXB0fSIpCgogICAgICAgICAgICBpbmRleCA9IC0xCiAgICAgICAgICAgIGZvciBpLCB2IGluIGVudW1lcmF0ZShyZXN1bHQpOgogICAgICAgICAgICAgICAgaWYgdi5uYW1lID09IG5hbWU6CiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgaWYgaW5kZXggIT0gLTE6CiAgICAgICAgICAgICAgICB0aGlzX2F0dHIgPSByZXN1bHRbaW5kZXhdCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0aGlzX2F0dHIgPSBhdHRyX2RldGFpbChvYmosIG5hbWUpCiAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRoaXNfYXR0cikKICAgICAgICAgICAgICAgICMgdW5yZWFsLmxvZ193YXJuaW5nKGYiQ2FuJ3QgZmluZCBlZGl0b3IgcHJvcGVydHk6IHtuYW1lfSIpCgogICAgICAgICAgICB0aGlzX2F0dHIuYXBwbHlfZWRpdG9yX3Byb3BlcnR5KG9iaiwgdHlwZV8sIHJ3cywgZGVzY3JpcHQpCgogICAgZm9yIGksIGF0dHIgaW4gZW51bWVyYXRlKHJlc3VsdCk6CiAgICAgICAgYXR0ci5wb3N0KG9iaikKCiAgICByZXR1cm4gcmVzdWx0CgoKZGVmIF9zaW1wbGlmeURvYyhjb250ZW50KToKICAgIGRlZiBuZXh0X2JhbGFuY2VkKGNvbnRlbnQsIHM9IigiLCBlID0gIikiICk6CiAgICAgICAgc19wb3MgPSAtMQogICAgICAgIGVfcG9zID0gLTEKICAgICAgICBiYWxhbmNlID0gMAogICAgICAgIGZvciBpbmRleCwgYyBpbiBlbnVtZXJhdGUoY29udGVudCk6CiAgICAgICAgICAgIG1hdGNoID0gYyA9PSBzIG9yIGMgPT0gZQogICAgICAgICAgICBpZiBub3QgbWF0Y2g6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBiYWxhbmNlICs9IDEgaWYgYyA9PSBzIGVsc2UgLTEKICAgICAgICAgICAgaWYgYyA9PSBzIGFuZCBiYWxhbmNlID09IDEgYW5kIHNfcG9zID09IC0xOgogICAgICAgICAgICAgICAgc19wb3MgPSBpbmRleAogICAgICAgICAgICBpZiBjID09IGUgYW5kIGJhbGFuY2UgPT0gMCBhbmQgc19wb3MgIT0gLTEgYW5kIGVfcG9zID09IC0xOgogICAgICAgICAgICAgICAgZV9wb3MgPSBpbmRleAogICAgICAgICAgICAgICAgcmV0dXJuIHNfcG9zLCBlX3BvcwogICAgICAgIHJldHVybiAtMSwgLTEKCiAgICAjIGJyYWNrZXRTLCBicmFja2V0RSA9IGNvbnRlbnQuZmluZCgnKCcpLCBjb250ZW50LmZpbmQoJyknKQogICAgaWYgbm90IGNvbnRlbnQ6CiAgICAgICAgcmV0dXJuICIiLCAiIgogICAgYnJhY2tldFMsIGJyYWNrZXRFID0gbmV4dF9iYWxhbmNlZChjb250ZW50LCBzPScoJywgZSA9ICcpJykKICAgIGFycm93ID0gY29udGVudC5maW5kKCctPicpCiAgICBmdW5jRG9jUG9zID0gbGVuKGNvbnRlbnQpCiAgICBlbmRTaWduID0gWyctLScsICdcbicsICdcciddCiAgICBmb3IgcyBpbiBlbmRTaWduOgogICAgICAgIHAgPSBjb250ZW50LmZpbmQocykKICAgICAgICBpZiBwICE9IC0xIGFuZCBwIDwgZnVuY0RvY1BvczoKICAgICAgICAgICAgZnVuY0RvY1BvcyA9IHAKICAgIGZ1bmNEb2MgPSBjb250ZW50WzpmdW5jRG9jUG9zXQogICAgaWYgYnJhY2tldFMgIT0gLTEgYW5kIGJyYWNrZXRFICE9IC0xOgogICAgICAgIHBhcmFtID0gY29udGVudFticmFja2V0UyArIDE6IGJyYWNrZXRFXS5zdHJpcCgpCiAgICBlbHNlOgogICAgICAgIHBhcmFtID0gIiIKICAgIHJldHVybiBmdW5jRG9jLCBwYXJhbQoKCmRlZiBfZ2V0RWRpdG9yUHJvcGVydGllcyhjb250ZW50LCBvYmopOgogICAgIyBwcmludCgiQ29udGVudDoge30iLmZvcm1hdChjb250ZW50KSkKCiAgICBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoJ1xyJykKICAgIHNpZ25Gb3VuZCA9IEZhbHNlCiAgICBhbGxJbmZvRm91bmQgPSBGYWxzZQogICAgcmVzdWx0ID0gW10KICAgIGZvciBsaW5lIGluIGxpbmVzOgogICAgICAgIGlmIG5vdCBzaWduRm91bmQgYW5kICcqKkVkaXRvciBQcm9wZXJ0aWVzOioqJyBpbiBsaW5lOgogICAgICAgICAgICBzaWduRm91bmQgPSBUcnVlCiAgICAgICAgaWYgc2lnbkZvdW5kOgogICAgICAgICAgICAjdG9kbyByZQogICAgICAgICAgICAjIG5hbWVTLCBuYW1lRSA9IGxpbmUuZmluZCgnYGAnKSArIDIsIGxpbmUuZmluZCgnYGAgJykKICAgICAgICAgICAgbmFtZVMsIG5hbWVFID0gbGluZS5maW5kKCctIGBgJykgKyA0LCBsaW5lLmZpbmQoJ2BgICcpCiAgICAgICAgICAgIGlmIG5hbWVTID09IC0xIG9yIG5hbWVFID09IC0xOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgdHlwZVMsIHR5cGVFID0gbGluZS5maW5kKCcoJykgKyAxLCBsaW5lLmZpbmQoJyknKQogICAgICAgICAgICBpZiB0eXBlUyA9PSAtMSBvciB0eXBlRSA9PSAtMToKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIHJ3UywgcndFID0gbGluZS5maW5kKCdbJykgKyAxLCBsaW5lLmZpbmQoJ10nKQogICAgICAgICAgICBpZiByd1MgPT0gLTEgb3IgcndFID09IC0xOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgbmFtZSA9IGxpbmVbbmFtZVM6IG5hbWVFXQogICAgICAgICAgICB0eXBlX3N0ciA9IGxpbmVbdHlwZVM6IHR5cGVFXQogICAgICAgICAgICByd3MgPSBsaW5lW3J3UzogcndFXQogICAgICAgICAgICBkZXNjcmlwdCA9IGxpbmVbcndFICsgMjpdCiAgICAgICAgICAgIGFsbEluZm9Gb3VuZCA9IFRydWUKICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgobmFtZSwgdHlwZV9zdHIsIHJ3cywgZGVzY3JpcHQpKQogICAgICAgICAgICAjIHByaW50KG5hbWUsIHR5cGUsIHJ3cykKICAgIGlmIHNpZ25Gb3VuZDoKICAgICAgICBpZiBub3QgYWxsSW5mb0ZvdW5kOgogICAgICAgICAgICB1bnJlYWwubG9nX3dhcm5pbmcoIm5vdCBhbGwgaW5mbyBmb3VuZCB7fSIuZm9ybWF0KG9iaikpCiAgICBlbHNlOgogICAgICAgIHVucmVhbC5sb2dfd2FybmluZygiY2FuJ3QgZmluZCBlZGl0b3IgcHJvcGVydGllcyBpbiB7fSIuZm9ybWF0KG9iaikpCiAgICByZXR1cm4gcmVzdWx0CgoKZGVmIGxvZ19jbGFzc2VzKG9iaik6CiAgICBwcmludChvYmopCiAgICBwcmludCgiXHR0eXBlOiB7fSIuZm9ybWF0KHR5cGUob2JqKSkpCiAgICBwcmludCgiXHRnZXRfY2xhc3M6IHt9Ii5mb3JtYXQob2JqLmdldF9jbGFzcygpKSkKICAgIGlmIHR5cGUob2JqLmdldF9jbGFzcygpKSBpcyB1bnJlYWwuQmx1ZXByaW50R2VuZXJhdGVkQ2xhc3M6CiAgICAgICAgZ2VuZXJhdGVkQ2xhc3MgPSBvYmouZ2V0X2NsYXNzKCkKICAgIGVsc2U6CiAgICAgICAgZ2VuZXJhdGVkQ2xhc3MgPSB1bnJlYWwuUHl0aG9uQlBMaWIuZ2V0X2JsdWVwcmludF9nZW5lcmF0ZWRfY2xhc3Mob2JqKQogICAgICAgIHByaW50KCJcdGdlbmVyYXRlZENsYXNzOiB7fSIuZm9ybWF0KGdlbmVyYXRlZENsYXNzKSkKICAgIHByaW50KCJcdGJwX2NsYXNzX2hpZXJhcmNoeV9wYWNrYWdlOiB7fSIuZm9ybWF0KHVucmVhbC5QeXRob25CUExpYi5nZXRfYnBfY2xhc3NfaGllcmFyY2h5X3BhY2thZ2UoZ2VuZXJhdGVkQ2xhc3MpKSkKCmRlZiBpc19zZWxlY3RlZF9hc3NldF90eXBlKHR5cGVzKToKICAgIHNlbGVjdGVkQXNzZXRzID0gVXRpbGl0aWVzLlV0aWxzLmdldF9zZWxlY3RlZF9hc3NldHMoKQogICAgZm9yIGFzc2V0IGluIHNlbGVjdGVkQXNzZXRzOgogICAgICAgIGlmIHR5cGUoYXNzZXQpIGluIHR5cGVzOgogICAgICAgICAgICByZXR1cm4gVHJ1ZTsKICAgIHJldHVybiBGYWxzZQoKCgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgdW5yZWFsLmxvZyhzdHIoZSkpCgoKPHxmaW1fZW5kfD4="]
["f2f9666d9ec6dbe690e04d429f039d67a2c1f433-2","f2f9666d9ec6dbe690e04d429f039d67a2c1f433","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IGxvZ2dpbmcKCmltcG9ydCB1bnJlYWwKaW1wb3J0IGluc3BlY3QKaW1wb3J0IHR5cGVzCmltcG9ydCBVdGlsaXRpZXMKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgoKCmNsYXNzIGF0dHJfZGV0YWlsKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgb2JqLCAgbmFtZTpzdHIpOgogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKCiAgICAgICAgYXR0ciA9IE5vbmUKICAgICAgICBzZWxmLmJDYWxsYWJsZSA9IE5vbmUKICAgICAgICBzZWxmLmJDYWxsYWJsZV9idWlsdGluID0gTm9uZQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGlmIGhhc2F0dHIob2JqLCBuYW1lKToKICAgICAgICAgICAgICAgIGF0dHIgPSBnZXRhdHRyKG9iaiwgbmFtZSkKICAgICAgICAgICAgICAgIHNlbGYuYkNhbGxhYmxlID0gY2FsbGFibGUoYXR0cikKICAgICAgICAgICAgICAgIHNlbGYuYkNhbGxhYmxlX2J1aWx0aW4gPSBpbnNwZWN0LmlzYnVpbHRpbihhdHRyKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgdW5yZWFsLmxvZyhzdHIoZSkpCgoKCiAgICAgICAgc2VsZi5iUHJvcGVydHkgPSBub3Qgc2VsZi5iQ2FsbGFibGUKICAgICAgICBzZWxmLnJlc3VsdCA9IE5vbmUKICAgICAgICBzZWxmLnBhcmFtX3N0ciA9IE5vbmUKICAgICAgICBzZWxmLmJFZGl0b3JQcm9wZXJ0eSA9IE5vbmUKICAgICAgICBzZWxmLnJldHVybl90eXBlX3N0ciA9IE5vbmUKICAgICAgICBzZWxmLmRvY19zdHIgPSBOb25lCiAgICAgICAgc2VsZi5wcm9wZXJ0eV9ydyA9IE5vbmUKCiAgICAgICAgaWYgc2VsZi5iQ2FsbGFibGU6CiAgICAgICAgICAgIHNlbGYucmV0dXJuX3R5cGVfc3RyID0gIiIKCiAgICAgICAgaWYgc2VsZi5iQ2FsbGFibGVfYnVpbHRpbjoKICAgICAgICAgICAgaWYgaGFzYXR0cihhdHRyLCAnX19kb2NfXycpOgogICAgICAgICAgICAgICAgZG9jRm9yRGlzcGxheSwgcGFyYW1TdHIgPSBfc2ltcGxpZnlEb2MoYXR0ci5fX2RvY19fKQogICAgICAgICAgICAgICAgIyBwcmludChmIn5+fn5+IGF0dHI6IHtzZWxmLm5hbWV9ICBkb2NGb3JEaXNwbGF5OiB7ZG9jRm9yRGlzcGxheX0gIHBhcmFtU3RyOiB7cGFyYW1TdHJ9IikKICAgICAgICAgICAgICAgICMgcHJpbnQoYXR0ci5fX2RvY19fKQoKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICBzaWcgPSBpbnNwZWN0LmdldGFyZ3NwZWMoZ2V0YXR0cihvYmosIHNlbGYubmFtZSkpCiAgICAgICAgICAgICAgICAgICAgIyBwcmludCgiKysrICIsIHNpZykKCiAgICAgICAgICAgICAgICAgICAgYXJncyA9IHNpZy5hcmdzCiAgICAgICAgICAgICAgICAgICAgYXJnQ291bnQgPSBsZW4oYXJncykKICAgICAgICAgICAgICAgICAgICBpZiAic2VsZiIgaW4gYXJnczoKICAgICAgICAgICAgICAgICAgICAgICAgYXJnQ291bnQgLT0gMQogICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgICAgICAgICBhcmdDb3VudCA9IC0xCgogICAgICAgICAgICAgICAgaWYgIi0+ICIgaW4gZG9jRm9yRGlzcGxheToKICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybl90eXBlX3N0ciA9IGRvY0ZvckRpc3BsYXlbZG9jRm9yRGlzcGxheS5maW5kKCcpJykgKyAxOl0KICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5kb2Nfc3RyID0gZG9jRm9yRGlzcGxheVtkb2NGb3JEaXNwbGF5LmZpbmQoJyknKSArIDE6XQoKICAgICAgICAgICAgICAgIGlmIGFyZ0NvdW50ID09IDAgb3IgKGFyZ0NvdW50ID09IC0xIGFuZCBwYXJhbVN0ciA9PSAnJyk6CiAgICAgICAgICAgICAgICAgICAgIyBNZXRob2Qgd2l0aCBObyBwYXJhbXMKCiAgICAgICAgICAgICAgICAgICAgaWYgJy0+IE5vbmUnIG5vdCBpbiBkb2NGb3JEaXNwbGF5IG9yIHNlbGYubmFtZSBpbiBbIl9fcmVkdWNlX18iLCAiX3Bvc3RfaW5pdCJdOgogICAgICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJnZXRfYWN0b3JfdGltZV9kaWxhdGlvbiIgYW5kIGlzaW5zdGFuY2Uob2JqLCB1bnJlYWwuT2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNhbGwgZ2V0X2FjdG9yX3RpbWVfZGlsYXRpb24gd2lsbCBjcmFzaCBlbmdpbmUgaWYgYWN0b3IgaXMgZ2V0IGZyb20gQ0RPIGFuZCBoYXMgbm8gd29ybGQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb2JqLmdldF93b3JsZCgpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNlbGYucmVzdWx0ID0gInt9Ii5mb3JtYXQoYXR0ci5fX2NhbGxfXygpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IGF0dHIuX19jYWxsX18oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gInNraXAgY2FsbCwgd29ybGQgPT0gTm9uZS4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2VsZi5yZXN1bHQgPSAie30iLmZvcm1hdChhdHRyLl9fY2FsbF9fKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBhdHRyLl9fY2FsbF9fKCkKICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAic2tpcCBjYWxsLi4iCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoZiJkb2NGb3JEaXNwbGF5OiB7ZG9jRm9yRGlzcGxheX0sIHNlbGYubmFtZToge3NlbGYubmFtZX0iKQogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9ICJza2lwIGNhbGwuIgogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcmFtX3N0ciA9IHBhcmFtU3RyCiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAiIgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiQ2FuJ3QgZmluZCBwIikKICAgICAgICBlbGlmIHNlbGYuYkNhbGxhYmxlX290aGVyOgogICAgICAgICAgICBpZiBoYXNhdHRyKGF0dHIsICdfX2RvY19fJyk6CiAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGF0dHIuX19kb2NfXywgc3RyKToKICAgICAgICAgICAgICAgICAgICBkb2NGb3JEaXNwbGF5LCBwYXJhbVN0ciA9IF9zaW1wbGlmeURvYyhhdHRyLl9fZG9jX18pCgogICAgICAgICAgICBpZiBuYW1lIGluIFsiX19zdHJfXyIsICJfX2hhc2hfXyIsICJfX3JlcHJfXyIsICJfX2xlbl9fIl06CiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAie30iLmZvcm1hdChhdHRyLl9fY2FsbF9fKCkpCiAgICAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAic2tpcCBjYWxsLiIKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICMgc2VsZi5yZXN1bHQgPSAie30iLmZvcm1hdChnZXRhdHRyKG9iaiwgbmFtZSkpCiAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IGdldGF0dHIob2JqLCBuYW1lKQoKICAgIGRlZiBwb3N0KHNlbGYsIG9iaik6CiAgICAgICAgaWYgc2VsZi5iT3RoZXJQcm9wZXJ0eSBhbmQgbm90IHNlbGYucmVzdWx0OgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IGdldGF0dHIob2JqLCBzZWxmLm5hbWUpCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gInNraXAgY2FsbC4uLiIKCgoKICAgIGRlZiBhcHBseV9lZGl0b3JfcHJvcGVydHkoc2VsZiwgb2JqLCB0eXBlXywgcndzLCBkZXNjcmlwdCk6CiAgICAgICAgc2VsZi5iRWRpdG9yUHJvcGVydHkgPSBUcnVlCiAgICAgICAgc2VsZi5wcm9wZXJ0eV9ydyA9ICJbe31dIi5mb3JtYXQocndzKQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gZXZhbCgnb2JqLmdldF9lZGl0b3JfcHJvcGVydHkoInt9IiknLmZvcm1hdChzZWxmLm5hbWUpKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAiSW52YWxpZCIKCgoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHMgPSBmIkF0dHI6IHtzZWxmLm5hbWV9ICBwYXJhbVN0cjoge3NlbGYucGFyYW1fc3RyfSAgZGVzYzoge3NlbGYucmV0dXJuX3R5cGVfc3RyfSByZXN1bHQ6IHtzZWxmLnJlc3VsdH0iCiAgICAgICAgaWYgc2VsZi5iUHJvcGVydHk6CiAgICAgICAgICAgIHMgKz0gIiwgUHJvcGVydHkiCiAgICAgICAgaWYgc2VsZi5iRWRpdG9yUHJvcGVydHk6CiAgICAgICAgICAgIHMgKz0gIiwgRWlkdG9yIFByb3BlcnR5Igo8fGZpbV9ob2xlfD4KICAgICAgICBpZiBzZWxmLmJDYWxsYWJsZV9idWlsdGluOgogICAgICAgICAgICBzICs9ICIsIENhbGxhYmxlX2J1aWx0aW4iCiAgICAgICAgaWYgc2VsZi5iQ2FsbGFibGVfb3RoZXI6CiAgICAgICAgICAgIHMgKz0gIiwgYkNhbGxhYmxlX290aGVyIgogICAgICAgIGlmIHNlbGYuYkhhc1BhcmFtRnVuY3Rpb246CiAgICAgICAgICAgIHMrPSAiLCBiSGFzUGFyYW1GdW5jdGlvbiIKICAgICAgICByZXR1cm4gcwoKCiAgICBkZWYgY2hlY2soc2VsZik6CiAgICAgICAgY291bnRlciA9IENvdW50ZXIoW3NlbGYuYk90aGVyUHJvcGVydHksIHNlbGYuYkVkaXRvclByb3BlcnR5LCBzZWxmLmJDYWxsYWJsZV9vdGhlciwgc2VsZi5iQ2FsbGFibGVfYnVpbHRpbl0pCiAgICAgICAgIyBwcmludCgiY291bnRlcjoge30iLmZvcm1hdChjb3VudGVyKSkKICAgICAgICBpZiBjb3VudGVyW1RydWVdID09IDI6CiAgICAgICAgICAgIHVucmVhbC5sb2dfZXJyb3IoZiJ7c2VsZi5uYW1lfToge3NlbGYuYkVkaXRvclByb3BlcnR5fSwge3NlbGYuYk90aGVyUHJvcGVydHl9IHtzZWxmLmJDYWxsYWJsZV9idWlsdGlufSB7c2VsZi5iQ2FsbGFibGVfb3RoZXJ9IikKCgogICAgQHByb3BlcnR5CiAgICBkZWYgYk90aGVyUHJvcGVydHkoc2VsZik6CiAgICAgICAgaWYgc2VsZi5iUHJvcGVydHkgYW5kIG5vdCBzZWxmLmJFZGl0b3JQcm9wZXJ0eToKICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBAcHJvcGVydHkKICAgIGRlZiBiQ2FsbGFibGVfb3RoZXIoc2VsZik6CiAgICAgICAgaWYgc2VsZi5iQ2FsbGFibGUgYW5kIG5vdCBzZWxmLmJDYWxsYWJsZV9idWlsdGluOgogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIHJldHVybiBGYWxzZQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGRpc3BsYXlfbmFtZShzZWxmLCBiUmljaFRleHQ9VHJ1ZSk6CiAgICAgICAgaWYgc2VsZi5iUHJvcGVydHk6CiAgICAgICAgICAgIHJldHVybiBmIlx0e3NlbGYubmFtZX0iCiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyBjYWxsYWJsZQogICAgICAgICAgICBpZiBzZWxmLnBhcmFtX3N0cjoKICAgICAgICAgICAgICAgIHJldHVybiBmIlx0e3NlbGYubmFtZX0oe3NlbGYucGFyYW1fc3RyfSkgICAge3NlbGYucmV0dXJuX3R5cGVfc3RyfSIKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGlmIHNlbGYuYkNhbGxhYmxlX290aGVyOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBmIlx0e3NlbGYubmFtZX0iICAjIF9faGFzaF9fLCBfX2NsYXNzX18sIF9fZXFfXyDnrYkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYiXHR7c2VsZi5uYW1lfSgpICAgIHtzZWxmLnJldHVybl90eXBlX3N0cn0iCgogICAgQHByb3BlcnR5CiAgICBkZWYgZGlzcGxheV9yZXN1bHQoc2VsZikgLT4gc3RyOgogICAgICAgIGlmIHNlbGYuYkVkaXRvclByb3BlcnR5OgogICAgICAgICAgICByZXR1cm4gInt9ICAgIHt9Ii5mb3JtYXQoc2VsZi5yZXN1bHQsIHNlbGYucHJvcGVydHlfcncpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuICJ7fSIuZm9ybWF0KHNlbGYucmVzdWx0KQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGJIYXNQYXJhbUZ1bmN0aW9uKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnBhcmFtX3N0ciBhbmQgbGVuKHNlbGYucGFyYW1fc3RyKSAhPSAwCgoKCgoKZGVmIGxsKG9iaik6CgogICAgaWYgbm90IG9iajoKICAgICAgICByZXR1cm4gTm9uZQogICAgaWYgaW5zcGVjdC5pc21vZHVsZShvYmopOgogICAgICAgIHJldHVybiBOb25lCgogICAgcmVzdWx0ID0gW10KICAgIGZvciB4IGluIGRpcihvYmopOgogICAgICAgIGF0dHIgPSBhdHRyX2RldGFpbChvYmosIHgpCiAgICAgICAgcmVzdWx0LmFwcGVuZChhdHRyKQoKCiAgICBpZiBoYXNhdHRyKG9iaiwgJ19fZG9jX18nKSBhbmQgaXNpbnN0YW5jZShvYmosIHVucmVhbC5PYmplY3QpOgogICAgICAgIGVkaXRvclByb3BlcnRpZXNJbmZvcyA9IF9nZXRFZGl0b3JQcm9wZXJ0aWVzKG9iai5fX2RvY19fLCBvYmopCiAgICAgICAgZm9yIG5hbWUsIHR5cGVfLCByd3MsIGRlc2NyaXB0IGluIGVkaXRvclByb3BlcnRpZXNJbmZvczoKICAgICAgICAgICAgIyBwcmludChmIn5+IHtuYW1lfSB7dHlwZX0ge3J3c30sIHtkZXNjcmlwdH0iKQoKICAgICAgICAgICAgaW5kZXggPSAtMQogICAgICAgICAgICBmb3IgaSwgdiBpbiBlbnVtZXJhdGUocmVzdWx0KToKICAgICAgICAgICAgICAgIGlmIHYubmFtZSA9PSBuYW1lOgogICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaQogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGlmIGluZGV4ICE9IC0xOgogICAgICAgICAgICAgICAgdGhpc19hdHRyID0gcmVzdWx0W2luZGV4XQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgdGhpc19hdHRyID0gYXR0cl9kZXRhaWwob2JqLCBuYW1lKQogICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0aGlzX2F0dHIpCiAgICAgICAgICAgICAgICAjIHVucmVhbC5sb2dfd2FybmluZyhmIkNhbid0IGZpbmQgZWRpdG9yIHByb3BlcnR5OiB7bmFtZX0iKQoKICAgICAgICAgICAgdGhpc19hdHRyLmFwcGx5X2VkaXRvcl9wcm9wZXJ0eShvYmosIHR5cGVfLCByd3MsIGRlc2NyaXB0KQoKICAgIGZvciBpLCBhdHRyIGluIGVudW1lcmF0ZShyZXN1bHQpOgogICAgICAgIGF0dHIucG9zdChvYmopCgogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBfc2ltcGxpZnlEb2MoY29udGVudCk6CiAgICBkZWYgbmV4dF9iYWxhbmNlZChjb250ZW50LCBzPSIoIiwgZSA9ICIpIiApOgogICAgICAgIHNfcG9zID0gLTEKICAgICAgICBlX3BvcyA9IC0xCiAgICAgICAgYmFsYW5jZSA9IDAKICAgICAgICBmb3IgaW5kZXgsIGMgaW4gZW51bWVyYXRlKGNvbnRlbnQpOgogICAgICAgICAgICBtYXRjaCA9IGMgPT0gcyBvciBjID09IGUKICAgICAgICAgICAgaWYgbm90IG1hdGNoOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgYmFsYW5jZSArPSAxIGlmIGMgPT0gcyBlbHNlIC0xCiAgICAgICAgICAgIGlmIGMgPT0gcyBhbmQgYmFsYW5jZSA9PSAxIGFuZCBzX3BvcyA9PSAtMToKICAgICAgICAgICAgICAgIHNfcG9zID0gaW5kZXgKICAgICAgICAgICAgaWYgYyA9PSBlIGFuZCBiYWxhbmNlID09IDAgYW5kIHNfcG9zICE9IC0xIGFuZCBlX3BvcyA9PSAtMToKICAgICAgICAgICAgICAgIGVfcG9zID0gaW5kZXgKICAgICAgICAgICAgICAgIHJldHVybiBzX3BvcywgZV9wb3MKICAgICAgICByZXR1cm4gLTEsIC0xCgogICAgIyBicmFja2V0UywgYnJhY2tldEUgPSBjb250ZW50LmZpbmQoJygnKSwgY29udGVudC5maW5kKCcpJykKICAgIGlmIG5vdCBjb250ZW50OgogICAgICAgIHJldHVybiAiIiwgIiIKICAgIGJyYWNrZXRTLCBicmFja2V0RSA9IG5leHRfYmFsYW5jZWQoY29udGVudCwgcz0nKCcsIGUgPSAnKScpCiAgICBhcnJvdyA9IGNvbnRlbnQuZmluZCgnLT4nKQogICAgZnVuY0RvY1BvcyA9IGxlbihjb250ZW50KQogICAgZW5kU2lnbiA9IFsnLS0nLCAnXG4nLCAnXHInXQogICAgZm9yIHMgaW4gZW5kU2lnbjoKICAgICAgICBwID0gY29udGVudC5maW5kKHMpCiAgICAgICAgaWYgcCAhPSAtMSBhbmQgcCA8IGZ1bmNEb2NQb3M6CiAgICAgICAgICAgIGZ1bmNEb2NQb3MgPSBwCiAgICBmdW5jRG9jID0gY29udGVudFs6ZnVuY0RvY1Bvc10KICAgIGlmIGJyYWNrZXRTICE9IC0xIGFuZCBicmFja2V0RSAhPSAtMToKICAgICAgICBwYXJhbSA9IGNvbnRlbnRbYnJhY2tldFMgKyAxOiBicmFja2V0RV0uc3RyaXAoKQogICAgZWxzZToKICAgICAgICBwYXJhbSA9ICIiCiAgICByZXR1cm4gZnVuY0RvYywgcGFyYW0KCgpkZWYgX2dldEVkaXRvclByb3BlcnRpZXMoY29udGVudCwgb2JqKToKICAgICMgcHJpbnQoIkNvbnRlbnQ6IHt9Ii5mb3JtYXQoY29udGVudCkpCgogICAgbGluZXMgPSBjb250ZW50LnNwbGl0KCdccicpCiAgICBzaWduRm91bmQgPSBGYWxzZQogICAgYWxsSW5mb0ZvdW5kID0gRmFsc2UKICAgIHJlc3VsdCA9IFtdCiAgICBmb3IgbGluZSBpbiBsaW5lczoKICAgICAgICBpZiBub3Qgc2lnbkZvdW5kIGFuZCAnKipFZGl0b3IgUHJvcGVydGllczoqKicgaW4gbGluZToKICAgICAgICAgICAgc2lnbkZvdW5kID0gVHJ1ZQogICAgICAgIGlmIHNpZ25Gb3VuZDoKICAgICAgICAgICAgI3RvZG8gcmUKICAgICAgICAgICAgIyBuYW1lUywgbmFtZUUgPSBsaW5lLmZpbmQoJ2BgJykgKyAyLCBsaW5lLmZpbmQoJ2BgICcpCiAgICAgICAgICAgIG5hbWVTLCBuYW1lRSA9IGxpbmUuZmluZCgnLSBgYCcpICsgNCwgbGluZS5maW5kKCdgYCAnKQogICAgICAgICAgICBpZiBuYW1lUyA9PSAtMSBvciBuYW1lRSA9PSAtMToKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIHR5cGVTLCB0eXBlRSA9IGxpbmUuZmluZCgnKCcpICsgMSwgbGluZS5maW5kKCcpJykKICAgICAgICAgICAgaWYgdHlwZVMgPT0gLTEgb3IgdHlwZUUgPT0gLTE6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICByd1MsIHJ3RSA9IGxpbmUuZmluZCgnWycpICsgMSwgbGluZS5maW5kKCddJykKICAgICAgICAgICAgaWYgcndTID09IC0xIG9yIHJ3RSA9PSAtMToKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIG5hbWUgPSBsaW5lW25hbWVTOiBuYW1lRV0KICAgICAgICAgICAgdHlwZV9zdHIgPSBsaW5lW3R5cGVTOiB0eXBlRV0KICAgICAgICAgICAgcndzID0gbGluZVtyd1M6IHJ3RV0KICAgICAgICAgICAgZGVzY3JpcHQgPSBsaW5lW3J3RSArIDI6XQogICAgICAgICAgICBhbGxJbmZvRm91bmQgPSBUcnVlCiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKG5hbWUsIHR5cGVfc3RyLCByd3MsIGRlc2NyaXB0KSkKICAgICAgICAgICAgIyBwcmludChuYW1lLCB0eXBlLCByd3MpCiAgICBpZiBzaWduRm91bmQ6CiAgICAgICAgaWYgbm90IGFsbEluZm9Gb3VuZDoKICAgICAgICAgICAgdW5yZWFsLmxvZ193YXJuaW5nKCJub3QgYWxsIGluZm8gZm91bmQge30iLmZvcm1hdChvYmopKQogICAgZWxzZToKICAgICAgICB1bnJlYWwubG9nX3dhcm5pbmcoImNhbid0IGZpbmQgZWRpdG9yIHByb3BlcnRpZXMgaW4ge30iLmZvcm1hdChvYmopKQogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBsb2dfY2xhc3NlcyhvYmopOgogICAgcHJpbnQob2JqKQogICAgcHJpbnQoIlx0dHlwZToge30iLmZvcm1hdCh0eXBlKG9iaikpKQogICAgcHJpbnQoIlx0Z2V0X2NsYXNzOiB7fSIuZm9ybWF0KG9iai5nZXRfY2xhc3MoKSkpCiAgICBpZiB0eXBlKG9iai5nZXRfY2xhc3MoKSkgaXMgdW5yZWFsLkJsdWVwcmludEdlbmVyYXRlZENsYXNzOgogICAgICAgIGdlbmVyYXRlZENsYXNzID0gb2JqLmdldF9jbGFzcygpCiAgICBlbHNlOgogICAgICAgIGdlbmVyYXRlZENsYXNzID0gdW5yZWFsLlB5dGhvbkJQTGliLmdldF9ibHVlcHJpbnRfZ2VuZXJhdGVkX2NsYXNzKG9iaikKICAgICAgICBwcmludCgiXHRnZW5lcmF0ZWRDbGFzczoge30iLmZvcm1hdChnZW5lcmF0ZWRDbGFzcykpCiAgICBwcmludCgiXHRicF9jbGFzc19oaWVyYXJjaHlfcGFja2FnZToge30iLmZvcm1hdCh1bnJlYWwuUHl0aG9uQlBMaWIuZ2V0X2JwX2NsYXNzX2hpZXJhcmNoeV9wYWNrYWdlKGdlbmVyYXRlZENsYXNzKSkpCgpkZWYgaXNfc2VsZWN0ZWRfYXNzZXRfdHlwZSh0eXBlcyk6CiAgICBzZWxlY3RlZEFzc2V0cyA9IFV0aWxpdGllcy5VdGlscy5nZXRfc2VsZWN0ZWRfYXNzZXRzKCkKICAgIGZvciBhc3NldCBpbiBzZWxlY3RlZEFzc2V0czoKICAgICAgICBpZiB0eXBlKGFzc2V0KSBpbiB0eXBlczoKICAgICAgICAgICAgcmV0dXJuIFRydWU7CiAgICByZXR1cm4gRmFsc2UKCgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBpZiBzZWxmLmJPdGhlclByb3BlcnR5OgogICAgICAgICAgICBzICs9ICIsIE90aGVyIFByb3BlcnR5ICIKICAgICAgICBpZiBzZWxmLmJDYWxsYWJsZToKICAgICAgICAgICAgcyArPSAiLCBDYWxsYWJsZSIKPHxmaW1fZW5kfD4="]
["f2f9666d9ec6dbe690e04d429f039d67a2c1f433-3","f2f9666d9ec6dbe690e04d429f039d67a2c1f433","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IGxvZ2dpbmcKCmltcG9ydCB1bnJlYWwKaW1wb3J0IGluc3BlY3QKaW1wb3J0IHR5cGVzCmltcG9ydCBVdGlsaXRpZXMKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgoKCmNsYXNzIGF0dHJfZGV0YWlsKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgb2JqLCAgbmFtZTpzdHIpOgogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKCiAgICAgICAgYXR0ciA9IE5vbmUKICAgICAgICBzZWxmLmJDYWxsYWJsZSA9IE5vbmUKICAgICAgICBzZWxmLmJDYWxsYWJsZV9idWlsdGluID0gTm9uZQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGlmIGhhc2F0dHIob2JqLCBuYW1lKToKICAgICAgICAgICAgICAgIGF0dHIgPSBnZXRhdHRyKG9iaiwgbmFtZSkKICAgICAgICAgICAgICAgIHNlbGYuYkNhbGxhYmxlID0gY2FsbGFibGUoYXR0cikKICAgICAgICAgICAgICAgIHNlbGYuYkNhbGxhYmxlX2J1aWx0aW4gPSBpbnNwZWN0LmlzYnVpbHRpbihhdHRyKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgdW5yZWFsLmxvZyhzdHIoZSkpCgoKCiAgICAgICAgc2VsZi5iUHJvcGVydHkgPSBub3Qgc2VsZi5iQ2FsbGFibGUKICAgICAgICBzZWxmLnJlc3VsdCA9IE5vbmUKICAgICAgICBzZWxmLnBhcmFtX3N0ciA9IE5vbmUKICAgICAgICBzZWxmLmJFZGl0b3JQcm9wZXJ0eSA9IE5vbmUKICAgICAgICBzZWxmLnJldHVybl90eXBlX3N0ciA9IE5vbmUKICAgICAgICBzZWxmLmRvY19zdHIgPSBOb25lCiAgICAgICAgc2VsZi5wcm9wZXJ0eV9ydyA9IE5vbmUKCiAgICAgICAgaWYgc2VsZi5iQ2FsbGFibGU6CiAgICAgICAgICAgIHNlbGYucmV0dXJuX3R5cGVfc3RyID0gIiIKCiAgICAgICAgaWYgc2VsZi5iQ2FsbGFibGVfYnVpbHRpbjoKICAgICAgICAgICAgaWYgaGFzYXR0cihhdHRyLCAnX19kb2NfXycpOgogICAgICAgICAgICAgICAgZG9jRm9yRGlzcGxheSwgcGFyYW1TdHIgPSBfc2ltcGxpZnlEb2MoYXR0ci5fX2RvY19fKQogICAgICAgICAgICAgICAgIyBwcmludChmIn5+fn5+IGF0dHI6IHtzZWxmLm5hbWV9ICBkb2NGb3JEaXNwbGF5OiB7ZG9jRm9yRGlzcGxheX0gIHBhcmFtU3RyOiB7cGFyYW1TdHJ9IikKICAgICAgICAgICAgICAgICMgcHJpbnQoYXR0ci5fX2RvY19fKQoKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICBzaWcgPSBpbnNwZWN0LmdldGFyZ3NwZWMoZ2V0YXR0cihvYmosIHNlbGYubmFtZSkpCiAgICAgICAgICAgICAgICAgICAgIyBwcmludCgiKysrICIsIHNpZykKCiAgICAgICAgICAgICAgICAgICAgYXJncyA9IHNpZy5hcmdzCiAgICAgICAgICAgICAgICAgICAgYXJnQ291bnQgPSBsZW4oYXJncykKICAgICAgICAgICAgICAgICAgICBpZiAic2VsZiIgaW4gYXJnczoKICAgICAgICAgICAgICAgICAgICAgICAgYXJnQ291bnQgLT0gMQogICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgICAgICAgICBhcmdDb3VudCA9IC0xCgogICAgICAgICAgICAgICAgaWYgIi0+ICIgaW4gZG9jRm9yRGlzcGxheToKICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybl90eXBlX3N0ciA9IGRvY0ZvckRpc3BsYXlbZG9jRm9yRGlzcGxheS5maW5kKCcpJykgKyAxOl0KICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5kb2Nfc3RyID0gZG9jRm9yRGlzcGxheVtkb2NGb3JEaXNwbGF5LmZpbmQoJyknKSArIDE6XQoKICAgICAgICAgICAgICAgIGlmIGFyZ0NvdW50ID09IDAgb3IgKGFyZ0NvdW50ID09IC0xIGFuZCBwYXJhbVN0ciA9PSAnJyk6CiAgICAgICAgICAgICAgICAgICAgIyBNZXRob2Qgd2l0aCBObyBwYXJhbXMKCiAgICAgICAgICAgICAgICAgICAgaWYgJy0+IE5vbmUnIG5vdCBpbiBkb2NGb3JEaXNwbGF5IG9yIHNlbGYubmFtZSBpbiBbIl9fcmVkdWNlX18iLCAiX3Bvc3RfaW5pdCJdOgogICAgICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJnZXRfYWN0b3JfdGltZV9kaWxhdGlvbiIgYW5kIGlzaW5zdGFuY2Uob2JqLCB1bnJlYWwuT2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNhbGwgZ2V0X2FjdG9yX3RpbWVfZGlsYXRpb24gd2lsbCBjcmFzaCBlbmdpbmUgaWYgYWN0b3IgaXMgZ2V0IGZyb20gQ0RPIGFuZCBoYXMgbm8gd29ybGQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb2JqLmdldF93b3JsZCgpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNlbGYucmVzdWx0ID0gInt9Ii5mb3JtYXQoYXR0ci5fX2NhbGxfXygpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IGF0dHIuX19jYWxsX18oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gInNraXAgY2FsbCwgd29ybGQgPT0gTm9uZS4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2VsZi5yZXN1bHQgPSAie30iLmZvcm1hdChhdHRyLl9fY2FsbF9fKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBhdHRyLl9fY2FsbF9fKCkKICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAic2tpcCBjYWxsLi4iCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoZiJkb2NGb3JEaXNwbGF5OiB7ZG9jRm9yRGlzcGxheX0sIHNlbGYubmFtZToge3NlbGYubmFtZX0iKQogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9ICJza2lwIGNhbGwuIgogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcmFtX3N0ciA9IHBhcmFtU3RyCiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAiIgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiQ2FuJ3QgZmluZCBwIikKICAgICAgICBlbGlmIHNlbGYuYkNhbGxhYmxlX290aGVyOgogICAgICAgICAgICBpZiBoYXNhdHRyKGF0dHIsICdfX2RvY19fJyk6CiAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGF0dHIuX19kb2NfXywgc3RyKToKICAgICAgICAgICAgICAgICAgICBkb2NGb3JEaXNwbGF5LCBwYXJhbVN0ciA9IF9zaW1wbGlmeURvYyhhdHRyLl9fZG9jX18pCgogICAgICAgICAgICBpZiBuYW1lIGluIFsiX19zdHJfXyIsICJfX2hhc2hfXyIsICJfX3JlcHJfXyIsICJfX2xlbl9fIl06CiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAie30iLmZvcm1hdChhdHRyLl9fY2FsbF9fKCkpCiAgICAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAic2tpcCBjYWxsLiIKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICMgc2VsZi5yZXN1bHQgPSAie30iLmZvcm1hdChnZXRhdHRyKG9iaiwgbmFtZSkpCiAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IGdldGF0dHIob2JqLCBuYW1lKQoKICAgIGRlZiBwb3N0KHNlbGYsIG9iaik6CiAgICAgICAgaWYgc2VsZi5iT3RoZXJQcm9wZXJ0eSBhbmQgbm90IHNlbGYucmVzdWx0OgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IGdldGF0dHIob2JqLCBzZWxmLm5hbWUpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAic2tpcCBjYWxsLi4uIgoKCjx8ZmltX2VuZHw+"]
["f2f9666d9ec6dbe690e04d429f039d67a2c1f433-4","f2f9666d9ec6dbe690e04d429f039d67a2c1f433","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IGxvZ2dpbmcKCmltcG9ydCB1bnJlYWwKaW1wb3J0IGluc3BlY3QKaW1wb3J0IHR5cGVzCmltcG9ydCBVdGlsaXRpZXMKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgoKCmNsYXNzIGF0dHJfZGV0YWlsKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgb2JqLCAgbmFtZTpzdHIpOgogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKCiAgICAgICAgYXR0ciA9IE5vbmUKICAgICAgICBzZWxmLmJDYWxsYWJsZSA9IE5vbmUKICAgICAgICBzZWxmLmJDYWxsYWJsZV9idWlsdGluID0gTm9uZQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGlmIGhhc2F0dHIob2JqLCBuYW1lKToKICAgICAgICAgICAgICAgIGF0dHIgPSBnZXRhdHRyKG9iaiwgbmFtZSkKICAgICAgICAgICAgICAgIHNlbGYuYkNhbGxhYmxlID0gY2FsbGFibGUoYXR0cikKICAgICAgICAgICAgICAgIHNlbGYuYkNhbGxhYmxlX2J1aWx0aW4gPSBpbnNwZWN0LmlzYnVpbHRpbihhdHRyKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgdW5yZWFsLmxvZyhzdHIoZSkpCgoKCiAgICAgICAgc2VsZi5iUHJvcGVydHkgPSBub3Qgc2VsZi5iQ2FsbGFibGUKICAgICAgICBzZWxmLnJlc3VsdCA9IE5vbmUKICAgICAgICBzZWxmLnBhcmFtX3N0ciA9IE5vbmUKICAgICAgICBzZWxmLmJFZGl0b3JQcm9wZXJ0eSA9IE5vbmUKICAgICAgICBzZWxmLnJldHVybl90eXBlX3N0ciA9IE5vbmUKICAgICAgICBzZWxmLmRvY19zdHIgPSBOb25lCiAgICAgICAgc2VsZi5wcm9wZXJ0eV9ydyA9IE5vbmUKCiAgICAgICAgaWYgc2VsZi5iQ2FsbGFibGU6CiAgICAgICAgICAgIHNlbGYucmV0dXJuX3R5cGVfc3RyID0gIiIKCiAgICAgICAgaWYgc2VsZi5iQ2FsbGFibGVfYnVpbHRpbjoKICAgICAgICAgICAgaWYgaGFzYXR0cihhdHRyLCAnX19kb2NfXycpOgogICAgICAgICAgICAgICAgZG9jRm9yRGlzcGxheSwgcGFyYW1TdHIgPSBfc2ltcGxpZnlEb2MoYXR0ci5fX2RvY19fKQogICAgICAgICAgICAgICAgIyBwcmludChmIn5+fn5+IGF0dHI6IHtzZWxmLm5hbWV9ICBkb2NGb3JEaXNwbGF5OiB7ZG9jRm9yRGlzcGxheX0gIHBhcmFtU3RyOiB7cGFyYW1TdHJ9IikKICAgICAgICAgICAgICAgICMgcHJpbnQoYXR0ci5fX2RvY19fKQoKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICBzaWcgPSBpbnNwZWN0LmdldGFyZ3NwZWMoZ2V0YXR0cihvYmosIHNlbGYubmFtZSkpCiAgICAgICAgICAgICAgICAgICAgIyBwcmludCgiKysrICIsIHNpZykKCiAgICAgICAgICAgICAgICAgICAgYXJncyA9IHNpZy5hcmdzCiAgICAgICAgICAgICAgICAgICAgYXJnQ291bnQgPSBsZW4oYXJncykKICAgICAgICAgICAgICAgICAgICBpZiAic2VsZiIgaW4gYXJnczoKICAgICAgICAgICAgICAgICAgICAgICAgYXJnQ291bnQgLT0gMQogICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgICAgICAgICBhcmdDb3VudCA9IC0xCgogICAgICAgICAgICAgICAgaWYgIi0+ICIgaW4gZG9jRm9yRGlzcGxheToKICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybl90eXBlX3N0ciA9IGRvY0ZvckRpc3BsYXlbZG9jRm9yRGlzcGxheS5maW5kKCcpJykgKyAxOl0KICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5kb2Nfc3RyID0gZG9jRm9yRGlzcGxheVtkb2NGb3JEaXNwbGF5LmZpbmQoJyknKSArIDE6XQoKICAgICAgICAgICAgICAgIGlmIGFyZ0NvdW50ID09IDAgb3IgKGFyZ0NvdW50ID09IC0xIGFuZCBwYXJhbVN0ciA9PSAnJyk6CiAgICAgICAgICAgICAgICAgICAgIyBNZXRob2Qgd2l0aCBObyBwYXJhbXMKCiAgICAgICAgICAgICAgICAgICAgaWYgJy0+IE5vbmUnIG5vdCBpbiBkb2NGb3JEaXNwbGF5IG9yIHNlbGYubmFtZSBpbiBbIl9fcmVkdWNlX18iLCAiX3Bvc3RfaW5pdCJdOgogICAgICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJnZXRfYWN0b3JfdGltZV9kaWxhdGlvbiIgYW5kIGlzaW5zdGFuY2Uob2JqLCB1bnJlYWwuT2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNhbGwgZ2V0X2FjdG9yX3RpbWVfZGlsYXRpb24gd2lsbCBjcmFzaCBlbmdpbmUgaWYgYWN0b3IgaXMgZ2V0IGZyb20gQ0RPIGFuZCBoYXMgbm8gd29ybGQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb2JqLmdldF93b3JsZCgpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNlbGYucmVzdWx0ID0gInt9Ii5mb3JtYXQoYXR0ci5fX2NhbGxfXygpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IGF0dHIuX19jYWxsX18oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gInNraXAgY2FsbCwgd29ybGQgPT0gTm9uZS4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2VsZi5yZXN1bHQgPSAie30iLmZvcm1hdChhdHRyLl9fY2FsbF9fKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBhdHRyLl9fY2FsbF9fKCkKICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAic2tpcCBjYWxsLi4iCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoZiJkb2NGb3JEaXNwbGF5OiB7ZG9jRm9yRGlzcGxheX0sIHNlbGYubmFtZToge3NlbGYubmFtZX0iKQogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9ICJza2lwIGNhbGwuIgogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcmFtX3N0ciA9IHBhcmFtU3RyCiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAiIgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiQ2FuJ3QgZmluZCBwIikKICAgICAgICBlbGlmIHNlbGYuYkNhbGxhYmxlX290aGVyOgogICAgICAgICAgICBpZiBoYXNhdHRyKGF0dHIsICdfX2RvY19fJyk6CiAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGF0dHIuX19kb2NfXywgc3RyKToKICAgICAgICAgICAgICAgICAgICBkb2NGb3JEaXNwbGF5LCBwYXJhbVN0ciA9IF9zaW1wbGlmeURvYyhhdHRyLl9fZG9jX18pCgogICAgICAgICAgICBpZiBuYW1lIGluIFsiX19zdHJfXyIsICJfX2hhc2hfXyIsICJfX3JlcHJfXyIsICJfX2xlbl9fIl06CiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAie30iLmZvcm1hdChhdHRyLl9fY2FsbF9fKCkpCiAgICAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAic2tpcCBjYWxsLiIKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICMgc2VsZi5yZXN1bHQgPSAie30iLmZvcm1hdChnZXRhdHRyKG9iaiwgbmFtZSkpCiAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IGdldGF0dHIob2JqLCBuYW1lKQoKICAgIGRlZiBwb3N0KHNlbGYsIG9iaik6CiAgICAgICAgaWYgc2VsZi5iT3RoZXJQcm9wZXJ0eSBhbmQgbm90IHNlbGYucmVzdWx0OgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IGdldGF0dHIob2JqLCBzZWxmLm5hbWUpCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gInNraXAgY2FsbC4uLiIKCgoKICAgIGRlZiBhcHBseV9lZGl0b3JfcHJvcGVydHkoc2VsZiwgb2JqLCB0eXBlXywgcndzLCBkZXNjcmlwdCk6CiAgICAgICAgc2VsZi5iRWRpdG9yUHJvcGVydHkgPSBUcnVlCiAgICAgICAgc2VsZi5wcm9wZXJ0eV9ydyA9ICJbe31dIi5mb3JtYXQocndzKQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gZXZhbCgnb2JqLmdldF9lZGl0b3JfcHJvcGVydHkoInt9IiknLmZvcm1hdChzZWxmLm5hbWUpKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAiSW52YWxpZCIKCgoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHMgPSBmIkF0dHI6IHtzZWxmLm5hbWV9ICBwYXJhbVN0cjoge3NlbGYucGFyYW1fc3RyfSAgZGVzYzoge3NlbGYucmV0dXJuX3R5cGVfc3RyfSByZXN1bHQ6IHtzZWxmLnJlc3VsdH0iCiAgICAgICAgaWYgc2VsZi5iUHJvcGVydHk6CiAgICAgICAgICAgIHMgKz0gIiwgUHJvcGVydHkiCiAgICAgICAgaWYgc2VsZi5iRWRpdG9yUHJvcGVydHk6CiAgICAgICAgICAgIHMgKz0gIiwgRWlkdG9yIFByb3BlcnR5IgogICAgICAgIGlmIHNlbGYuYk90aGVyUHJvcGVydHk6CiAgICAgICAgICAgIHMgKz0gIiwgT3RoZXIgUHJvcGVydHkgIgogICAgICAgIGlmIHNlbGYuYkNhbGxhYmxlOgogICAgICAgICAgICBzICs9ICIsIENhbGxhYmxlIgogICAgICAgIGlmIHNlbGYuYkNhbGxhYmxlX2J1aWx0aW46CiAgICAgICAgICAgIHMgKz0gIiwgQ2FsbGFibGVfYnVpbHRpbiIKICAgICAgICBpZiBzZWxmLmJDYWxsYWJsZV9vdGhlcjoKICAgICAgICAgICAgcyArPSAiLCBiQ2FsbGFibGVfb3RoZXIiCiAgICAgICAgaWYgc2VsZi5iSGFzUGFyYW1GdW5jdGlvbjoKICAgICAgICAgICAgcys9ICIsIGJIYXNQYXJhbUZ1bmN0aW9uIgogICAgICAgIHJldHVybiBzCgoKICAgIGRlZiBjaGVjayhzZWxmKToKICAgICAgICBjb3VudGVyID0gQ291bnRlcihbc2VsZi5iT3RoZXJQcm9wZXJ0eSwgc2VsZi5iRWRpdG9yUHJvcGVydHksIHNlbGYuYkNhbGxhYmxlX290aGVyLCBzZWxmLmJDYWxsYWJsZV9idWlsdGluXSkKICAgICAgICAjIHByaW50KCJjb3VudGVyOiB7fSIuZm9ybWF0KGNvdW50ZXIpKQogICAgICAgIGlmIGNvdW50ZXJbVHJ1ZV0gPT0gMjoKICAgICAgICAgICAgdW5yZWFsLmxvZ19lcnJvcihmIntzZWxmLm5hbWV9OiB7c2VsZi5iRWRpdG9yUHJvcGVydHl9LCB7c2VsZi5iT3RoZXJQcm9wZXJ0eX0ge3NlbGYuYkNhbGxhYmxlX2J1aWx0aW59IHtzZWxmLmJDYWxsYWJsZV9vdGhlcn0iKQoKCiAgICBAcHJvcGVydHkKICAgIGRlZiBiT3RoZXJQcm9wZXJ0eShzZWxmKToKICAgICAgICBpZiBzZWxmLmJQcm9wZXJ0eSBhbmQgbm90IHNlbGYuYkVkaXRvclByb3BlcnR5OgogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIHJldHVybiBGYWxzZQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGJDYWxsYWJsZV9vdGhlcihzZWxmKToKICAgICAgICBpZiBzZWxmLmJDYWxsYWJsZSBhbmQgbm90IHNlbGYuYkNhbGxhYmxlX2J1aWx0aW46CiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgQHByb3BlcnR5CiAgICBkZWYgZGlzcGxheV9uYW1lKHNlbGYsIGJSaWNoVGV4dD1UcnVlKToKICAgICAgICBpZiBzZWxmLmJQcm9wZXJ0eToKICAgICAgICAgICAgcmV0dXJuIGYiXHR7c2VsZi5uYW1lfSIKICAgICAgICBlbHNlOgogICAgICAgICAgICAjIGNhbGxhYmxlCiAgICAgICAgICAgIGlmIHNlbGYucGFyYW1fc3RyOgogICAgICAgICAgICAgICAgcmV0dXJuIGYiXHR7c2VsZi5uYW1lfSh7c2VsZi5wYXJhbV9zdHJ9KSAgICB7c2VsZi5yZXR1cm5fdHlwZV9zdHJ9IgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgaWYgc2VsZi5iQ2FsbGFibGVfb3RoZXI6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYiXHR7c2VsZi5uYW1lfSIgICMgX19oYXNoX18sIF9fY2xhc3NfXywgX19lcV9fIOetiQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZiJcdHtzZWxmLm5hbWV9KCkgICAge3NlbGYucmV0dXJuX3R5cGVfc3RyfSIKCiAgICBAcHJvcGVydHkKICAgIGRlZiBkaXNwbGF5X3Jlc3VsdChzZWxmKSAtPiBzdHI6CiAgICAgICAgaWYgc2VsZi5iRWRpdG9yUHJvcGVydHk6CiAgICAgICAgICAgIHJldHVybiAie30gICAge30iLmZvcm1hdChzZWxmLnJlc3VsdCwgc2VsZi5wcm9wZXJ0eV9ydykKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gInt9Ii5mb3JtYXQoc2VsZi5yZXN1bHQpCgogICAgQHByb3BlcnR5CiAgICBkZWYgYkhhc1BhcmFtRnVuY3Rpb24oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYucGFyYW1fc3RyIGFuZCBsZW4oc2VsZi5wYXJhbV9zdHIpICE9IDAKCgoKCgpkZWYgbGwob2JqKToKCiAgICBpZiBub3Qgb2JqOgogICAgICAgIHJldHVybiBOb25lCiAgICBpZiBpbnNwZWN0LmlzbW9kdWxlKG9iaik6CiAgICAgICAgcmV0dXJuIE5vbmUKCiAgICByZXN1bHQgPSBbXQogICAgZm9yIHggaW4gZGlyKG9iaik6CiAgICAgICAgYXR0ciA9IGF0dHJfZGV0YWlsKG9iaiwgeCkKICAgICAgICByZXN1bHQuYXBwZW5kKGF0dHIpCgoKICAgIGlmIGhhc2F0dHIob2JqLCAnX19kb2NfXycpIGFuZCBpc2luc3RhbmNlKG9iaiwgdW5yZWFsLk9iamVjdCk6CiAgICAgICAgZWRpdG9yUHJvcGVydGllc0luZm9zID0gX2dldEVkaXRvclByb3BlcnRpZXMob2JqLl9fZG9jX18sIG9iaikKICAgICAgICBmb3IgbmFtZSwgdHlwZV8sIHJ3cywgZGVzY3JpcHQgaW4gZWRpdG9yUHJvcGVydGllc0luZm9zOgogICAgICAgICAgICAjIHByaW50KGYifn4ge25hbWV9IHt0eXBlfSB7cndzfSwge2Rlc2NyaXB0fSIpCgogICAgICAgICAgICBpbmRleCA9IC0xCiAgICAgICAgICAgIGZvciBpLCB2IGluIGVudW1lcmF0ZShyZXN1bHQpOgogICAgICAgICAgICAgICAgaWYgdi5uYW1lID09IG5hbWU6CiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgaWYgaW5kZXggIT0gLTE6CiAgICAgICAgICAgICAgICB0aGlzX2F0dHIgPSByZXN1bHRbaW5kZXhdCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0aGlzX2F0dHIgPSBhdHRyX2RldGFpbChvYmosIG5hbWUpCiAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRoaXNfYXR0cikKICAgICAgICAgICAgICAgICMgdW5yZWFsLmxvZ193YXJuaW5nKGYiQ2FuJ3QgZmluZCBlZGl0b3IgcHJvcGVydHk6IHtuYW1lfSIpCgogICAgICAgICAgICB0aGlzX2F0dHIuYXBwbHlfZWRpdG9yX3Byb3BlcnR5KG9iaiwgdHlwZV8sIHJ3cywgZGVzY3JpcHQpCgogICAgZm9yIGksIGF0dHIgaW4gZW51bWVyYXRlKHJlc3VsdCk6CiAgICAgICAgYXR0ci5wb3N0KG9iaikKCiAgICByZXR1cm4gcmVzdWx0CgoKZGVmIF9zaW1wbGlmeURvYyhjb250ZW50KToKICAgIGRlZiBuZXh0X2JhbGFuY2VkKGNvbnRlbnQsIHM9IigiLCBlID0gIikiICk6CiAgICAgICAgc19wb3MgPSAtMQogICAgICAgIGVfcG9zID0gLTEKICAgICAgICBiYWxhbmNlID0gMAogICAgICAgIGZvciBpbmRleCwgYyBpbiBlbnVtZXJhdGUoY29udGVudCk6CiAgICAgICAgICAgIG1hdGNoID0gYyA9PSBzIG9yIGMgPT0gZQogICAgICAgICAgICBpZiBub3QgbWF0Y2g6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBiYWxhbmNlICs9IDEgaWYgYyA9PSBzIGVsc2UgLTEKICAgICAgICAgICAgaWYgYyA9PSBzIGFuZCBiYWxhbmNlID09IDEgYW5kIHNfcG9zID09IC0xOgogICAgICAgICAgICAgICAgc19wb3MgPSBpbmRleAogICAgICAgICAgICBpZiBjID09IGUgYW5kIGJhbGFuY2UgPT0gMCBhbmQgc19wb3MgIT0gLTEgYW5kIGVfcG9zID09IC0xOgogICAgICAgICAgICAgICAgZV9wb3MgPSBpbmRleAogICAgICAgICAgICAgICAgcmV0dXJuIHNfcG9zLCBlX3BvcwogICAgICAgIHJldHVybiAtMSwgLTEKCiAgICAjIGJyYWNrZXRTLCBicmFja2V0RSA9IGNvbnRlbnQuZmluZCgnKCcpLCBjb250ZW50LmZpbmQoJyknKQogICAgaWYgbm90IGNvbnRlbnQ6CiAgICAgICAgcmV0dXJuICIiLCAiIgogICAgYnJhY2tldFMsIGJyYWNrZXRFID0gbmV4dF9iYWxhbmNlZChjb250ZW50LCBzPScoJywgZSA9ICcpJykKICAgIGFycm93ID0gY29udGVudC5maW5kKCctPicpCiAgICBmdW5jRG9jUG9zID0gbGVuKGNvbnRlbnQpCiAgICBlbmRTaWduID0gWyctLScsICdcbicsICdcciddCiAgICBmb3IgcyBpbiBlbmRTaWduOgogICAgICAgIHAgPSBjb250ZW50LmZpbmQocykKICAgICAgICBpZiBwICE9IC0xIGFuZCBwIDwgZnVuY0RvY1BvczoKICAgICAgICAgICAgZnVuY0RvY1BvcyA9IHAKICAgIGZ1bmNEb2MgPSBjb250ZW50WzpmdW5jRG9jUG9zXQogICAgaWYgYnJhY2tldFMgIT0gLTEgYW5kIGJyYWNrZXRFICE9IC0xOgogICAgICAgIHBhcmFtID0gY29udGVudFticmFja2V0UyArIDE6IGJyYWNrZXRFXS5zdHJpcCgpCiAgICBlbHNlOgogICAgICAgIHBhcmFtID0gIiIKICAgIHJldHVybiBmdW5jRG9jLCBwYXJhbQoKCmRlZiBfZ2V0RWRpdG9yUHJvcGVydGllcyhjb250ZW50LCBvYmopOgogICAgIyBwcmludCgiQ29udGVudDoge30iLmZvcm1hdChjb250ZW50KSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGxpbmVzID0gY29udGVudC5zcGxpdCgnXHInKQogICAgc2lnbkZvdW5kID0gRmFsc2UKICAgIGFsbEluZm9Gb3VuZCA9IEZhbHNlCjx8ZmltX2VuZHw+"]
["f2f9666d9ec6dbe690e04d429f039d67a2c1f433-5","f2f9666d9ec6dbe690e04d429f039d67a2c1f433","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IGxvZ2dpbmcKCmltcG9ydCB1bnJlYWwKaW1wb3J0IGluc3BlY3QKaW1wb3J0IHR5cGVzCmltcG9ydCBVdGlsaXRpZXMKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgoKCmNsYXNzIGF0dHJfZGV0YWlsKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgb2JqLCAgbmFtZTpzdHIpOgogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKCiAgICAgICAgYXR0ciA9IE5vbmUKICAgICAgICBzZWxmLmJDYWxsYWJsZSA9IE5vbmUKICAgICAgICBzZWxmLmJDYWxsYWJsZV9idWlsdGluID0gTm9uZQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGlmIGhhc2F0dHIob2JqLCBuYW1lKToKICAgICAgICAgICAgICAgIGF0dHIgPSBnZXRhdHRyKG9iaiwgbmFtZSkKICAgICAgICAgICAgICAgIHNlbGYuYkNhbGxhYmxlID0gY2FsbGFibGUoYXR0cikKICAgICAgICAgICAgICAgIHNlbGYuYkNhbGxhYmxlX2J1aWx0aW4gPSBpbnNwZWN0LmlzYnVpbHRpbihhdHRyKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgdW5yZWFsLmxvZyhzdHIoZSkpCgoKCiAgICAgICAgc2VsZi5iUHJvcGVydHkgPSBub3Qgc2VsZi5iQ2FsbGFibGUKICAgICAgICBzZWxmLnJlc3VsdCA9IE5vbmUKICAgICAgICBzZWxmLnBhcmFtX3N0ciA9IE5vbmUKICAgICAgICBzZWxmLmJFZGl0b3JQcm9wZXJ0eSA9IE5vbmUKICAgICAgICBzZWxmLnJldHVybl90eXBlX3N0ciA9IE5vbmUKICAgICAgICBzZWxmLmRvY19zdHIgPSBOb25lCiAgICAgICAgc2VsZi5wcm9wZXJ0eV9ydyA9IE5vbmUKCiAgICAgICAgaWYgc2VsZi5iQ2FsbGFibGU6CiAgICAgICAgICAgIHNlbGYucmV0dXJuX3R5cGVfc3RyID0gIiIKCiAgICAgICAgaWYgc2VsZi5iQ2FsbGFibGVfYnVpbHRpbjoKICAgICAgICAgICAgaWYgaGFzYXR0cihhdHRyLCAnX19kb2NfXycpOgogICAgICAgICAgICAgICAgZG9jRm9yRGlzcGxheSwgcGFyYW1TdHIgPSBfc2ltcGxpZnlEb2MoYXR0ci5fX2RvY19fKQogICAgICAgICAgICAgICAgIyBwcmludChmIn5+fn5+IGF0dHI6IHtzZWxmLm5hbWV9ICBkb2NGb3JEaXNwbGF5OiB7ZG9jRm9yRGlzcGxheX0gIHBhcmFtU3RyOiB7cGFyYW1TdHJ9IikKICAgICAgICAgICAgICAgICMgcHJpbnQoYXR0ci5fX2RvY19fKQoKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICBzaWcgPSBpbnNwZWN0LmdldGFyZ3NwZWMoZ2V0YXR0cihvYmosIHNlbGYubmFtZSkpCiAgICAgICAgICAgICAgICAgICAgIyBwcmludCgiKysrICIsIHNpZykKCiAgICAgICAgICAgICAgICAgICAgYXJncyA9IHNpZy5hcmdzCiAgICAgICAgICAgICAgICAgICAgYXJnQ291bnQgPSBsZW4oYXJncykKICAgICAgICAgICAgICAgICAgICBpZiAic2VsZiIgaW4gYXJnczoKICAgICAgICAgICAgICAgICAgICAgICAgYXJnQ291bnQgLT0gMQogICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgICAgICAgICBhcmdDb3VudCA9IC0xCgogICAgICAgICAgICAgICAgaWYgIi0+ICIgaW4gZG9jRm9yRGlzcGxheToKICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybl90eXBlX3N0ciA9IGRvY0ZvckRpc3BsYXlbZG9jRm9yRGlzcGxheS5maW5kKCcpJykgKyAxOl0KICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5kb2Nfc3RyID0gZG9jRm9yRGlzcGxheVtkb2NGb3JEaXNwbGF5LmZpbmQoJyknKSArIDE6XQoKICAgICAgICAgICAgICAgIGlmIGFyZ0NvdW50ID09IDAgb3IgKGFyZ0NvdW50ID09IC0xIGFuZCBwYXJhbVN0ciA9PSAnJyk6CiAgICAgICAgICAgICAgICAgICAgIyBNZXRob2Qgd2l0aCBObyBwYXJhbXMKCiAgICAgICAgICAgICAgICAgICAgaWYgJy0+IE5vbmUnIG5vdCBpbiBkb2NGb3JEaXNwbGF5IG9yIHNlbGYubmFtZSBpbiBbIl9fcmVkdWNlX18iLCAiX3Bvc3RfaW5pdCJdOgogICAgICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJnZXRfYWN0b3JfdGltZV9kaWxhdGlvbiIgYW5kIGlzaW5zdGFuY2Uob2JqLCB1bnJlYWwuT2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNhbGwgZ2V0X2FjdG9yX3RpbWVfZGlsYXRpb24gd2lsbCBjcmFzaCBlbmdpbmUgaWYgYWN0b3IgaXMgZ2V0IGZyb20gQ0RPIGFuZCBoYXMgbm8gd29ybGQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb2JqLmdldF93b3JsZCgpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNlbGYucmVzdWx0ID0gInt9Ii5mb3JtYXQoYXR0ci5fX2NhbGxfXygpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IGF0dHIuX19jYWxsX18oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gInNraXAgY2FsbCwgd29ybGQgPT0gTm9uZS4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2VsZi5yZXN1bHQgPSAie30iLmZvcm1hdChhdHRyLl9fY2FsbF9fKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBhdHRyLl9fY2FsbF9fKCkKICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAic2tpcCBjYWxsLi4iCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoZiJkb2NGb3JEaXNwbGF5OiB7ZG9jRm9yRGlzcGxheX0sIHNlbGYubmFtZToge3NlbGYubmFtZX0iKQogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9ICJza2lwIGNhbGwuIgogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcmFtX3N0ciA9IHBhcmFtU3RyCiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAiIgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiQ2FuJ3QgZmluZCBwIikKICAgICAgICBlbGlmIHNlbGYuYkNhbGxhYmxlX290aGVyOgogICAgICAgICAgICBpZiBoYXNhdHRyKGF0dHIsICdfX2RvY19fJyk6CiAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGF0dHIuX19kb2NfXywgc3RyKToKICAgICAgICAgICAgICAgICAgICBkb2NGb3JEaXNwbGF5LCBwYXJhbVN0ciA9IF9zaW1wbGlmeURvYyhhdHRyLl9fZG9jX18pCgogICAgICAgICAgICBpZiBuYW1lIGluIFsiX19zdHJfXyIsICJfX2hhc2hfXyIsICJfX3JlcHJfXyIsICJfX2xlbl9fIl06CiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAie30iLmZvcm1hdChhdHRyLl9fY2FsbF9fKCkpCiAgICAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAic2tpcCBjYWxsLiIKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICMgc2VsZi5yZXN1bHQgPSAie30iLmZvcm1hdChnZXRhdHRyKG9iaiwgbmFtZSkpCiAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IGdldGF0dHIob2JqLCBuYW1lKQoKICAgIGRlZiBwb3N0KHNlbGYsIG9iaik6CiAgICAgICAgaWYgc2VsZi5iT3RoZXJQcm9wZXJ0eSBhbmQgbm90IHNlbGYucmVzdWx0OgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IGdldGF0dHIob2JqLCBzZWxmLm5hbWUpCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gInNraXAgY2FsbC4uLiIKCgoKICAgIGRlZiBhcHBseV9lZGl0b3JfcHJvcGVydHkoc2VsZiwgb2JqLCB0eXBlXywgcndzLCBkZXNjcmlwdCk6CiAgICAgICAgc2VsZi5iRWRpdG9yUHJvcGVydHkgPSBUcnVlCiAgICAgICAgc2VsZi5wcm9wZXJ0eV9ydyA9ICJbe31dIi5mb3JtYXQocndzKQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gZXZhbCgnb2JqLmdldF9lZGl0b3JfcHJvcGVydHkoInt9IiknLmZvcm1hdChzZWxmLm5hbWUpKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAiSW52YWxpZCIKCgoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHMgPSBmIkF0dHI6IHtzZWxmLm5hbWV9ICBwYXJhbVN0cjoge3NlbGYucGFyYW1fc3RyfSAgZGVzYzoge3NlbGYucmV0dXJuX3R5cGVfc3RyfSByZXN1bHQ6IHtzZWxmLnJlc3VsdH0iCiAgICAgICAgaWYgc2VsZi5iUHJvcGVydHk6CiAgICAgICAgICAgIHMgKz0gIiwgUHJvcGVydHkiCiAgICAgICAgaWYgc2VsZi5iRWRpdG9yUHJvcGVydHk6CiAgICAgICAgICAgIHMgKz0gIiwgRWlkdG9yIFByb3BlcnR5IgogICAgICAgIGlmIHNlbGYuYk90aGVyUHJvcGVydHk6CiAgICAgICAgICAgIHMgKz0gIiwgT3RoZXIgUHJvcGVydHkgIgogICAgICAgIGlmIHNlbGYuYkNhbGxhYmxlOgogICAgICAgICAgICBzICs9ICIsIENhbGxhYmxlIgogICAgICAgIGlmIHNlbGYuYkNhbGxhYmxlX2J1aWx0aW46CiAgICAgICAgICAgIHMgKz0gIiwgQ2FsbGFibGVfYnVpbHRpbiIKICAgICAgICBpZiBzZWxmLmJDYWxsYWJsZV9vdGhlcjoKICAgICAgICAgICAgcyArPSAiLCBiQ2FsbGFibGVfb3RoZXIiCiAgICAgICAgaWYgc2VsZi5iSGFzUGFyYW1GdW5jdGlvbjoKICAgICAgICAgICAgcys9ICIsIGJIYXNQYXJhbUZ1bmN0aW9uIgogICAgICAgIHJldHVybiBzCgoKICAgIGRlZiBjaGVjayhzZWxmKToKICAgICAgICBjb3VudGVyID0gQ291bnRlcihbc2VsZi5iT3RoZXJQcm9wZXJ0eSwgc2VsZi5iRWRpdG9yUHJvcGVydHksIHNlbGYuYkNhbGxhYmxlX290aGVyLCBzZWxmLmJDYWxsYWJsZV9idWlsdGluXSkKICAgICAgICAjIHByaW50KCJjb3VudGVyOiB7fSIuZm9ybWF0KGNvdW50ZXIpKQogICAgICAgIGlmIGNvdW50ZXJbVHJ1ZV0gPT0gMjoKICAgICAgICAgICAgdW5yZWFsLmxvZ19lcnJvcihmIntzZWxmLm5hbWV9OiB7c2VsZi5iRWRpdG9yUHJvcGVydHl9LCB7c2VsZi5iT3RoZXJQcm9wZXJ0eX0ge3NlbGYuYkNhbGxhYmxlX2J1aWx0aW59IHtzZWxmLmJDYWxsYWJsZV9vdGhlcn0iKQoKCiAgICBAcHJvcGVydHkKICAgIGRlZiBiT3RoZXJQcm9wZXJ0eShzZWxmKToKICAgICAgICBpZiBzZWxmLmJQcm9wZXJ0eSBhbmQgbm90IHNlbGYuYkVkaXRvclByb3BlcnR5OgogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIHJldHVybiBGYWxzZQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGJDYWxsYWJsZV9vdGhlcihzZWxmKToKPHxmaW1faG9sZXw+CiAgICBAcHJvcGVydHkKICAgIGRlZiBkaXNwbGF5X25hbWUoc2VsZiwgYlJpY2hUZXh0PVRydWUpOgogICAgICAgIGlmIHNlbGYuYlByb3BlcnR5OgogICAgICAgICAgICByZXR1cm4gZiJcdHtzZWxmLm5hbWV9IgogICAgICAgIGVsc2U6CiAgICAgICAgICAgICMgY2FsbGFibGUKICAgICAgICAgICAgaWYgc2VsZi5wYXJhbV9zdHI6CiAgICAgICAgICAgICAgICByZXR1cm4gZiJcdHtzZWxmLm5hbWV9KHtzZWxmLnBhcmFtX3N0cn0pICAgIHtzZWxmLnJldHVybl90eXBlX3N0cn0iCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBpZiBzZWxmLmJDYWxsYWJsZV9vdGhlcjoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZiJcdHtzZWxmLm5hbWV9IiAgIyBfX2hhc2hfXywgX19jbGFzc19fLCBfX2VxX18g562JCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBmIlx0e3NlbGYubmFtZX0oKSAgICB7c2VsZi5yZXR1cm5fdHlwZV9zdHJ9IgoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGRpc3BsYXlfcmVzdWx0KHNlbGYpIC0+IHN0cjoKICAgICAgICBpZiBzZWxmLmJFZGl0b3JQcm9wZXJ0eToKICAgICAgICAgICAgcmV0dXJuICJ7fSAgICB7fSIuZm9ybWF0KHNlbGYucmVzdWx0LCBzZWxmLnByb3BlcnR5X3J3KQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiAie30iLmZvcm1hdChzZWxmLnJlc3VsdCkKCiAgICBAcHJvcGVydHkKICAgIGRlZiBiSGFzUGFyYW1GdW5jdGlvbihzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5wYXJhbV9zdHIgYW5kIGxlbihzZWxmLnBhcmFtX3N0cikgIT0gMAoKCgoKCmRlZiBsbChvYmopOgoKICAgIGlmIG5vdCBvYmo6CiAgICAgICAgcmV0dXJuIE5vbmUKICAgIGlmIGluc3BlY3QuaXNtb2R1bGUob2JqKToKICAgICAgICByZXR1cm4gTm9uZQoKICAgIHJlc3VsdCA9IFtdCiAgICBmb3IgeCBpbiBkaXIob2JqKToKICAgICAgICBhdHRyID0gYXR0cl9kZXRhaWwob2JqLCB4KQogICAgICAgIHJlc3VsdC5hcHBlbmQoYXR0cikKCgogICAgaWYgaGFzYXR0cihvYmosICdfX2RvY19fJykgYW5kIGlzaW5zdGFuY2Uob2JqLCB1bnJlYWwuT2JqZWN0KToKICAgICAgICBlZGl0b3JQcm9wZXJ0aWVzSW5mb3MgPSBfZ2V0RWRpdG9yUHJvcGVydGllcyhvYmouX19kb2NfXywgb2JqKQogICAgICAgIGZvciBuYW1lLCB0eXBlXywgcndzLCBkZXNjcmlwdCBpbiBlZGl0b3JQcm9wZXJ0aWVzSW5mb3M6CiAgICAgICAgICAgICMgcHJpbnQoZiJ+fiB7bmFtZX0ge3R5cGV9IHtyd3N9LCB7ZGVzY3JpcHR9IikKCiAgICAgICAgICAgIGluZGV4ID0gLTEKICAgICAgICAgICAgZm9yIGksIHYgaW4gZW51bWVyYXRlKHJlc3VsdCk6CiAgICAgICAgICAgICAgICBpZiB2Lm5hbWUgPT0gbmFtZToKICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGkKICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBpZiBpbmRleCAhPSAtMToKICAgICAgICAgICAgICAgIHRoaXNfYXR0ciA9IHJlc3VsdFtpbmRleF0KICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHRoaXNfYXR0ciA9IGF0dHJfZGV0YWlsKG9iaiwgbmFtZSkKICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGhpc19hdHRyKQogICAgICAgICAgICAgICAgIyB1bnJlYWwubG9nX3dhcm5pbmcoZiJDYW4ndCBmaW5kIGVkaXRvciBwcm9wZXJ0eToge25hbWV9IikKCiAgICAgICAgICAgIHRoaXNfYXR0ci5hcHBseV9lZGl0b3JfcHJvcGVydHkob2JqLCB0eXBlXywgcndzLCBkZXNjcmlwdCkKCiAgICBmb3IgaSwgYXR0ciBpbiBlbnVtZXJhdGUocmVzdWx0KToKICAgICAgICBhdHRyLnBvc3Qob2JqKQoKICAgIHJldHVybiByZXN1bHQKCgpkZWYgX3NpbXBsaWZ5RG9jKGNvbnRlbnQpOgogICAgZGVmIG5leHRfYmFsYW5jZWQoY29udGVudCwgcz0iKCIsIGUgPSAiKSIgKToKICAgICAgICBzX3BvcyA9IC0xCiAgICAgICAgZV9wb3MgPSAtMQogICAgICAgIGJhbGFuY2UgPSAwCiAgICAgICAgZm9yIGluZGV4LCBjIGluIGVudW1lcmF0ZShjb250ZW50KToKICAgICAgICAgICAgbWF0Y2ggPSBjID09IHMgb3IgYyA9PSBlCiAgICAgICAgICAgIGlmIG5vdCBtYXRjaDoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGJhbGFuY2UgKz0gMSBpZiBjID09IHMgZWxzZSAtMQogICAgICAgICAgICBpZiBjID09IHMgYW5kIGJhbGFuY2UgPT0gMSBhbmQgc19wb3MgPT0gLTE6CiAgICAgICAgICAgICAgICBzX3BvcyA9IGluZGV4CiAgICAgICAgICAgIGlmIGMgPT0gZSBhbmQgYmFsYW5jZSA9PSAwIGFuZCBzX3BvcyAhPSAtMSBhbmQgZV9wb3MgPT0gLTE6CiAgICAgICAgICAgICAgICBlX3BvcyA9IGluZGV4CiAgICAgICAgICAgICAgICByZXR1cm4gc19wb3MsIGVfcG9zCiAgICAgICAgcmV0dXJuIC0xLCAtMQoKICAgICMgYnJhY2tldFMsIGJyYWNrZXRFID0gY29udGVudC5maW5kKCcoJyksIGNvbnRlbnQuZmluZCgnKScpCiAgICBpZiBub3QgY29udGVudDoKICAgICAgICByZXR1cm4gIiIsICIiCiAgICBicmFja2V0UywgYnJhY2tldEUgPSBuZXh0X2JhbGFuY2VkKGNvbnRlbnQsIHM9JygnLCBlID0gJyknKQogICAgYXJyb3cgPSBjb250ZW50LmZpbmQoJy0+JykKICAgIGZ1bmNEb2NQb3MgPSBsZW4oY29udGVudCkKICAgIGVuZFNpZ24gPSBbJy0tJywgJ1xuJywgJ1xyJ10KICAgIGZvciBzIGluIGVuZFNpZ246CiAgICAgICAgcCA9IGNvbnRlbnQuZmluZChzKQogICAgICAgIGlmIHAgIT0gLTEgYW5kIHAgPCBmdW5jRG9jUG9zOgogICAgICAgICAgICBmdW5jRG9jUG9zID0gcAogICAgZnVuY0RvYyA9IGNvbnRlbnRbOmZ1bmNEb2NQb3NdCiAgICBpZiBicmFja2V0UyAhPSAtMSBhbmQgYnJhY2tldEUgIT0gLTE6CiAgICAgICAgcGFyYW0gPSBjb250ZW50W2JyYWNrZXRTICsgMTogYnJhY2tldEVdLnN0cmlwKCkKICAgIGVsc2U6CiAgICAgICAgcGFyYW0gPSAiIgogICAgcmV0dXJuIGZ1bmNEb2MsIHBhcmFtCgoKZGVmIF9nZXRFZGl0b3JQcm9wZXJ0aWVzKGNvbnRlbnQsIG9iaik6CiAgICAjIHByaW50KCJDb250ZW50OiB7fSIuZm9ybWF0KGNvbnRlbnQpKQoKICAgIGxpbmVzID0gY29udGVudC5zcGxpdCgnXHInKQogICAgc2lnbkZvdW5kID0gRmFsc2UKICAgIGFsbEluZm9Gb3VuZCA9IEZhbHNlCiAgICByZXN1bHQgPSBbXQogICAgZm9yIGxpbmUgaW4gbGluZXM6CiAgICAgICAgaWYgbm90IHNpZ25Gb3VuZCBhbmQgJyoqRWRpdG9yIFByb3BlcnRpZXM6KionIGluIGxpbmU6CiAgICAgICAgICAgIHNpZ25Gb3VuZCA9IFRydWUKICAgICAgICBpZiBzaWduRm91bmQ6CiAgICAgICAgICAgICN0b2RvIHJlCiAgICAgICAgICAgICMgbmFtZVMsIG5hbWVFID0gbGluZS5maW5kKCdgYCcpICsgMiwgbGluZS5maW5kKCdgYCAnKQogICAgICAgICAgICBuYW1lUywgbmFtZUUgPSBsaW5lLmZpbmQoJy0gYGAnKSArIDQsIGxpbmUuZmluZCgnYGAgJykKICAgICAgICAgICAgaWYgbmFtZVMgPT0gLTEgb3IgbmFtZUUgPT0gLTE6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICB0eXBlUywgdHlwZUUgPSBsaW5lLmZpbmQoJygnKSArIDEsIGxpbmUuZmluZCgnKScpCiAgICAgICAgICAgIGlmIHR5cGVTID09IC0xIG9yIHR5cGVFID09IC0xOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgcndTLCByd0UgPSBsaW5lLmZpbmQoJ1snKSArIDEsIGxpbmUuZmluZCgnXScpCiAgICAgICAgICAgIGlmIHJ3UyA9PSAtMSBvciByd0UgPT0gLTE6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBuYW1lID0gbGluZVtuYW1lUzogbmFtZUVdCiAgICAgICAgICAgIHR5cGVfc3RyID0gbGluZVt0eXBlUzogdHlwZUVdCiAgICAgICAgICAgIHJ3cyA9IGxpbmVbcndTOiByd0VdCiAgICAgICAgICAgIGRlc2NyaXB0ID0gbGluZVtyd0UgKyAyOl0KICAgICAgICAgICAgYWxsSW5mb0ZvdW5kID0gVHJ1ZQogICAgICAgICAgICByZXN1bHQuYXBwZW5kKChuYW1lLCB0eXBlX3N0ciwgcndzLCBkZXNjcmlwdCkpCiAgICAgICAgICAgICMgcHJpbnQobmFtZSwgdHlwZSwgcndzKQogICAgaWYgc2lnbkZvdW5kOgogICAgICAgIGlmIG5vdCBhbGxJbmZvRm91bmQ6CiAgICAgICAgICAgIHVucmVhbC5sb2dfd2FybmluZygibm90IGFsbCBpbmZvIGZvdW5kIHt9Ii5mb3JtYXQob2JqKSkKICAgIGVsc2U6CiAgICAgICAgdW5yZWFsLmxvZ193YXJuaW5nKCJjYW4ndCBmaW5kIGVkaXRvciBwcm9wZXJ0aWVzIGluIHt9Ii5mb3JtYXQob2JqKSkKICAgIHJldHVybiByZXN1bHQKCgpkZWYgbG9nX2NsYXNzZXMob2JqKToKICAgIHByaW50KG9iaikKICAgIHByaW50KCJcdHR5cGU6IHt9Ii5mb3JtYXQodHlwZShvYmopKSkKICAgIHByaW50KCJcdGdldF9jbGFzczoge30iLmZvcm1hdChvYmouZ2V0X2NsYXNzKCkpKQogICAgaWYgdHlwZShvYmouZ2V0X2NsYXNzKCkpIGlzIHVucmVhbC5CbHVlcHJpbnRHZW5lcmF0ZWRDbGFzczoKICAgICAgICBnZW5lcmF0ZWRDbGFzcyA9IG9iai5nZXRfY2xhc3MoKQogICAgZWxzZToKICAgICAgICBnZW5lcmF0ZWRDbGFzcyA9IHVucmVhbC5QeXRob25CUExpYi5nZXRfYmx1ZXByaW50X2dlbmVyYXRlZF9jbGFzcyhvYmopCiAgICAgICAgcHJpbnQoIlx0Z2VuZXJhdGVkQ2xhc3M6IHt9Ii5mb3JtYXQoZ2VuZXJhdGVkQ2xhc3MpKQogICAgcHJpbnQoIlx0YnBfY2xhc3NfaGllcmFyY2h5X3BhY2thZ2U6IHt9Ii5mb3JtYXQodW5yZWFsLlB5dGhvbkJQTGliLmdldF9icF9jbGFzc19oaWVyYXJjaHlfcGFja2FnZShnZW5lcmF0ZWRDbGFzcykpKQoKZGVmIGlzX3NlbGVjdGVkX2Fzc2V0X3R5cGUodHlwZXMpOgogICAgc2VsZWN0ZWRBc3NldHMgPSBVdGlsaXRpZXMuVXRpbHMuZ2V0X3NlbGVjdGVkX2Fzc2V0cygpCiAgICBmb3IgYXNzZXQgaW4gc2VsZWN0ZWRBc3NldHM6CiAgICAgICAgaWYgdHlwZShhc3NldCkgaW4gdHlwZXM6CiAgICAgICAgICAgIHJldHVybiBUcnVlOwogICAgcmV0dXJuIEZhbHNlCgoKCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgaWYgc2VsZi5iQ2FsbGFibGUgYW5kIG5vdCBzZWxmLmJDYWxsYWJsZV9idWlsdGluOgogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIHJldHVybiBGYWxzZQoKPHxmaW1fZW5kfD4="]
["ffdde3f13c8ca55ed0a607240ff3f866d45e0c93-1","ffdde3f13c8ca55ed0a607240ff3f866d45e0c93","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCBvcy5wYXRoIGFzIG9zcAppbXBvcnQgcmFuZG9tCmltcG9ydCBubHRrCmltcG9ydCBoNXB5Cgpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gudXRpbHMuZGF0YSBhcyBkYXRhCmZyb20gdG9yY2gudXRpbHMuZGF0YS5kYXRhbG9hZGVyIGltcG9ydCBkZWZhdWx0X2NvbGxhdGUKCmZyb20gYW5zZW1iLmNvbmZpZyBpbXBvcnQgY2ZnCmZyb20gYW5zZW1iLmRhdGFzZXQucHJlcHJvY2VzcyBpbXBvcnQgaW52ZXJ0X2RpY3QKCmNsYXNzIFZpc3VhbFFBKGRhdGEuRGF0YXNldCk6CiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIHZlY3RvciwKICAgICAgICAgICAgICAgaW1hZ2VfZmVhdHVyZXNfcGF0aCwKICAgICAgICAgICAgICAgYW5zd2VyX3ZvY2FiX3BhdGg9Tm9uZSk6CiAgICBzdXBlcihWaXN1YWxRQSwgc2VsZikuX19pbml0X18oKQoKICAgICMgdm9jYWIKICAgIHNlbGYudmVjdG9yID0gdmVjdG9yCgogICAgIyBwcm9jZXNzIHF1ZXN0aW9uCiAgICB3aXRoIG9wZW4oY2ZnLnF1ZXN0aW9uX3ZvY2FiX3BhdGgsICdyJykgYXMgZmQ6IHF1ZXN0aW9uX3ZvY2FiID0ganNvbi5sb2FkKGZkKQogICAgc2VsZi50b2tlbl90b19pbmRleCA9IHF1ZXN0aW9uX3ZvY2FiWydxdWVzdGlvbiddCiAgICBzZWxmLl9tYXhfcXVlc3Rpb25fbGVuZ3RoID0gcXVlc3Rpb25fdm9jYWJbJ21heF9xdWVzdGlvbl9sZW5ndGgnXQoKICAgIHNlbGYuaW5kZXhfdG9fdG9rZW4gID0gaW52ZXJ0X2RpY3Qoc2VsZi50b2tlbl90b19pbmRleCkKCiAgICBpZiBhbnN3ZXJfdm9jYWJfcGF0aCBpcyBub3QgTm9uZToKICAgICAgcHJpbnQoJ2ltcG9ydCBhbnN3ZXIgdm9jYWJ1bGFyeSBmcm9tOiB7fScuZm9ybWF0KGFuc3dlcl92b2NhYl9wYXRoKSkKICAgICAgIyBwcm9jZXNzIGFuc3dlcgogICAgICB3aXRoIG9wZW4oYW5zd2VyX3ZvY2FiX3BhdGgsICdyJykgYXMgZmQ6IGFuc3dlcl92b2NhYiA9IGpzb24ubG9hZChmZCkKICAgICAgc2VsZi5hbnN3ZXJfdG9faW5kZXggPSBhbnN3ZXJfdm9jYWJbJ2Fuc3dlciddCiAgICAgIHNlbGYuaW5kZXhfdG9fYW5zd2VyID0gaW52ZXJ0X2RpY3Qoc2VsZi5hbnN3ZXJfdG9faW5kZXgpCgogICAgc2VsZi5jYWNoZWRfYW5zd2VycyA9IHt9CiAgICBzZWxmLnVua192ZWN0b3IgPSBzZWxmLnZlY3RvclsnVU5LJ10KCiAgQHByb3BlcnR5CiAgZGVmIG1heF9xdWVzdGlvbl9sZW5ndGgoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fbWF4X3F1ZXN0aW9uX2xlbmd0aAoKICBAcHJvcGVydHkKICBkZWYgbWF4X2Fuc3dlcl9sZW5ndGgoc2VsZik6CiAgICBhc3NlcnQgaGFzYXR0cihzZWxmLCBhbnN3ZXJzKSwgJ0RhdGFsb2FkZXIgbXVzdCBoYXZlIGFjY2VzcyB0byBhbnN3ZXJzJwogICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ19tYXhfYW5zd2VyX2xlbmd0aCcpOgogICAgICBzZWxmLl9tYXhfYW5zd2VyX2xlbmd0aCA9IG1heChtYXAobGVuLCBzZWxmLmFuc3dlcnMpKQogICAgcmV0dXJuIHNlbGYuX21heF9hbnN3ZXJfbGVuZ3RoCgogIEBwcm9wZXJ0eQogIGRlZiBudW1fdG9rZW5zKHNlbGYpOgogICAgcmV0dXJuIGxlbihzZWxmLnRva2VuX3RvX2luZGV4KQoKICBAcHJvcGVydHkKICBkZWYgbnVtX2Fuc3dlcnMoc2VsZik6CiAgICByZXR1cm4gbGVuKHNlbGYuYW5zd2VyX3RvX2luZGV4KQoKICBkZWYgX19sZW5fXyhzZWxmKToKICAgIHJldHVybiBsZW4oc2VsZi5xdWVzdGlvbnMpCgogICMjIyBJbnRlcm5hbCBkYXRhIHV0aWxpdHktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBkZWYgX2xvYWRfaW1hZ2Uoc2VsZiwgaW1hZ2VfaWQpOgogICAgIiIiIExvYWQgYW4gaW1hZ2UgIiIiCiAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnZmVhdHVyZXNfZmlsZScpOgogICAgICAjIExvYWRpbmcgdGhlIGg1IGZpbGUgaGFzIHRvIGJlIGRvbmUgaGVyZSBhbmQgbm90IGluIF9faW5pdF9fIGJlY2F1c2Ugd2hlbiB0aGUgRGF0YUxvYWRlcgogICAgICAjIGZvcmtzIGZvciBtdWx0aXBsZSB3b3JrcywgZXZlcnkgY2hpbGQgd291bGQgdXNlIHRoZSBzYW1lIGZpbGUgb2JqZWN0IGFuZCBmYWlsCiAgICAgICMgSGF2aW5nIG11bHRpcGxlIHJlYWRlcnMgdXNpbmcgZGlmZmVyZW50IGZpbGUgb2JqZWN0cyBpcyBmaW5lIHRob3VnaCwgc28gd2UganVzdCBpbml0IGluIGhlcmUuCiAgICAgIHNlbGYuZmVhdHVyZXNfZmlsZSA9IGg1cHkuRmlsZShzZWxmLmltYWdlX2ZlYXR1cmVzX3BhdGgsICdyJykKICAgIGluZGV4ID0gc2VsZi5pbWFnZV9pZF90b19pbmRleFtpbWFnZV9pZF0KICAgIGRhdGFzZXQgPSBzZWxmLmZlYXR1cmVzX2ZpbGVbJ2ZlYXR1cmVzJ10KICAgIGltZyA9IGRhdGFzZXRbaW5kZXhdLmFzdHlwZSgnZmxvYXQzMicpCiAgICByZXR1cm4gdG9yY2guZnJvbV9udW1weShpbWcpCgogIGRlZiBfZ2V0X2Fuc3dlcl92ZWN0b3JzKHNlbGYsIGFuc3dlcl9pbmRpY2VzKToKICAgIGlmIGlzaW5zdGFuY2UoYW5zd2VyX2luZGljZXNbMF0sIGxpc3QpOgogICAgICBOLCBDID0gbGVuKGFuc3dlcl9pbmRpY2VzKSwgbGVuKGFuc3dlcl9pbmRpY2VzWzBdKQogICAgICB2ZWN0b3IgPSB0b3JjaC56ZXJvcyhOLCBDLCBzZWxmLnZlY3Rvci5kaW0pCiAgICAgIGZvciBpLCBhbnN3ZXJfaWRzIGluIGVudW1lcmF0ZShhbnN3ZXJfaW5kaWNlcyk6CiAgICAgICAgZm9yIGosIGFuc3dlcl9pZCBpbiBlbnVtZXJhdGUoYW5zd2VyX2lkcyk6CiAgICAgICAgICBpZiBhbnN3ZXJfaWQgIT0gLTE6CiAgICAgICAgICAgIHZlY3RvcltpLCBqLCA6XSA9IHNlbGYuX2VuY29kZV9hbnN3ZXJfdmVjdG9yKHNlbGYuaW5kZXhfdG9fYW5zd2VyW2Fuc3dlcl9pZF0pCiAgICAgICAgICBlbHNlOgogICAgICAgICAgICB2ZWN0b3JbaSwgaiwgOl0gPSBzZWxmLnVua192ZWN0b3IKICAgIGVsc2U6CiAgICAgIHZlY3RvciA9IHRvcmNoLnplcm9zKGxlbihhbnN3ZXJfaW5kaWNlcyksIHNlbGYudmVjdG9yLmRpbSkKICAgICAgZm9yIGlkeCwgYW5zd2VyX2lkIGluIGVudW1lcmF0ZShhbnN3ZXJfaW5kaWNlcyk6CiAgICAgICAgaWYgYW5zd2VyX2lkICE9IC0xOgogICAgICAgICAgdmVjdG9yW2lkeCwgOl0gPSBzZWxmLl9lbmNvZGVfYW5zd2VyX3ZlY3RvcihzZWxmLmluZGV4X3RvX2Fuc3dlclthbnN3ZXJfaWRdKQogICAgICAgIGVsc2U6CiAgICAgICAgICB2ZWN0b3JbaWR4LCA6XSA9IHNlbGYudW5rX3ZlY3RvcgogICAgcmV0dXJuIHZlY3RvciwgW10KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICBkZWYgX2dldF9hbnN3ZXJfc2VxdWVuY2VzKHNlbGYsIGFuc3dlcl9pbmRpY2VzKToKICAgIHNlcXMsIGxlbmd0aHMgPSBbXSwgW10KICAgIG1heF9zZXFfbGVuZ3RoID0gMAo8fGZpbV9lbmR8Pg=="]
["ffdde3f13c8ca55ed0a607240ff3f866d45e0c93-2","ffdde3f13c8ca55ed0a607240ff3f866d45e0c93","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCBvcy5wYXRoIGFzIG9zcAppbXBvcnQgcmFuZG9tCmltcG9ydCBubHRrCmltcG9ydCBoNXB5Cgpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gudXRpbHMuZGF0YSBhcyBkYXRhCmZyb20gdG9yY2gudXRpbHMuZGF0YS5kYXRhbG9hZGVyIGltcG9ydCBkZWZhdWx0X2NvbGxhdGUKCmZyb20gYW5zZW1iLmNvbmZpZyBpbXBvcnQgY2ZnCmZyb20gYW5zZW1iLmRhdGFzZXQucHJlcHJvY2VzcyBpbXBvcnQgaW52ZXJ0X2RpY3QKCmNsYXNzIFZpc3VhbFFBKGRhdGEuRGF0YXNldCk6CiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIHZlY3RvciwKICAgICAgICAgICAgICAgaW1hZ2VfZmVhdHVyZXNfcGF0aCwKICAgICAgICAgICAgICAgYW5zd2VyX3ZvY2FiX3BhdGg9Tm9uZSk6CiAgICBzdXBlcihWaXN1YWxRQSwgc2VsZikuX19pbml0X18oKQoKICAgICMgdm9jYWIKICAgIHNlbGYudmVjdG9yID0gdmVjdG9yCgogICAgIyBwcm9jZXNzIHF1ZXN0aW9uCiAgICB3aXRoIG9wZW4oY2ZnLnF1ZXN0aW9uX3ZvY2FiX3BhdGgsICdyJykgYXMgZmQ6IHF1ZXN0aW9uX3ZvY2FiID0ganNvbi5sb2FkKGZkKQogICAgc2VsZi50b2tlbl90b19pbmRleCA9IHF1ZXN0aW9uX3ZvY2FiWydxdWVzdGlvbiddCiAgICBzZWxmLl9tYXhfcXVlc3Rpb25fbGVuZ3RoID0gcXVlc3Rpb25fdm9jYWJbJ21heF9xdWVzdGlvbl9sZW5ndGgnXQoKICAgIHNlbGYuaW5kZXhfdG9fdG9rZW4gID0gaW52ZXJ0X2RpY3Qoc2VsZi50b2tlbl90b19pbmRleCkKCiAgICBpZiBhbnN3ZXJfdm9jYWJfcGF0aCBpcyBub3QgTm9uZToKICAgICAgcHJpbnQoJ2ltcG9ydCBhbnN3ZXIgdm9jYWJ1bGFyeSBmcm9tOiB7fScuZm9ybWF0KGFuc3dlcl92b2NhYl9wYXRoKSkKICAgICAgIyBwcm9jZXNzIGFuc3dlcgogICAgICB3aXRoIG9wZW4oYW5zd2VyX3ZvY2FiX3BhdGgsICdyJykgYXMgZmQ6IGFuc3dlcl92b2NhYiA9IGpzb24ubG9hZChmZCkKICAgICAgc2VsZi5hbnN3ZXJfdG9faW5kZXggPSBhbnN3ZXJfdm9jYWJbJ2Fuc3dlciddCiAgICAgIHNlbGYuaW5kZXhfdG9fYW5zd2VyID0gaW52ZXJ0X2RpY3Qoc2VsZi5hbnN3ZXJfdG9faW5kZXgpCgogICAgc2VsZi5jYWNoZWRfYW5zd2VycyA9IHt9CiAgICBzZWxmLnVua192ZWN0b3IgPSBzZWxmLnZlY3RvclsnVU5LJ10KCiAgQHByb3BlcnR5CiAgZGVmIG1heF9xdWVzdGlvbl9sZW5ndGgoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fbWF4X3F1ZXN0aW9uX2xlbmd0aAoKICBAcHJvcGVydHkKICBkZWYgbWF4X2Fuc3dlcl9sZW5ndGgoc2VsZik6CiAgICBhc3NlcnQgaGFzYXR0cihzZWxmLCBhbnN3ZXJzKSwgJ0RhdGFsb2FkZXIgbXVzdCBoYXZlIGFjY2VzcyB0byBhbnN3ZXJzJwogICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ19tYXhfYW5zd2VyX2xlbmd0aCcpOgogICAgICBzZWxmLl9tYXhfYW5zd2VyX2xlbmd0aCA9IG1heChtYXAobGVuLCBzZWxmLmFuc3dlcnMpKQogICAgcmV0dXJuIHNlbGYuX21heF9hbnN3ZXJfbGVuZ3RoCgogIEBwcm9wZXJ0eQogIGRlZiBudW1fdG9rZW5zKHNlbGYpOgogICAgcmV0dXJuIGxlbihzZWxmLnRva2VuX3RvX2luZGV4KQoKICBAcHJvcGVydHkKICBkZWYgbnVtX2Fuc3dlcnMoc2VsZik6CiAgICByZXR1cm4gbGVuKHNlbGYuYW5zd2VyX3RvX2luZGV4KQoKICBkZWYgX19sZW5fXyhzZWxmKToKICAgIHJldHVybiBsZW4oc2VsZi5xdWVzdGlvbnMpCgogICMjIyBJbnRlcm5hbCBkYXRhIHV0aWxpdHktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBkZWYgX2xvYWRfaW1hZ2Uoc2VsZiwgaW1hZ2VfaWQpOgogICAgIiIiIExvYWQgYW4gaW1hZ2UgIiIiCiAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnZmVhdHVyZXNfZmlsZScpOgogICAgICAjIExvYWRpbmcgdGhlIGg1IGZpbGUgaGFzIHRvIGJlIGRvbmUgaGVyZSBhbmQgbm90IGluIF9faW5pdF9fIGJlY2F1c2Ugd2hlbiB0aGUgRGF0YUxvYWRlcgogICAgICAjIGZvcmtzIGZvciBtdWx0aXBsZSB3b3JrcywgZXZlcnkgY2hpbGQgd291bGQgdXNlIHRoZSBzYW1lIGZpbGUgb2JqZWN0IGFuZCBmYWlsCiAgICAgICMgSGF2aW5nIG11bHRpcGxlIHJlYWRlcnMgdXNpbmcgZGlmZmVyZW50IGZpbGUgb2JqZWN0cyBpcyBmaW5lIHRob3VnaCwgc28gd2UganVzdCBpbml0IGluIGhlcmUuCiAgICAgIHNlbGYuZmVhdHVyZXNfZmlsZSA9IGg1cHkuRmlsZShzZWxmLmltYWdlX2ZlYXR1cmVzX3BhdGgsICdyJykKICAgIGluZGV4ID0gc2VsZi5pbWFnZV9pZF90b19pbmRleFtpbWFnZV9pZF0KICAgIGRhdGFzZXQgPSBzZWxmLmZlYXR1cmVzX2ZpbGVbJ2ZlYXR1cmVzJ10KICAgIGltZyA9IGRhdGFzZXRbaW5kZXhdLmFzdHlwZSgnZmxvYXQzMicpCiAgICByZXR1cm4gdG9yY2guZnJvbV9udW1weShpbWcpCgogIGRlZiBfZ2V0X2Fuc3dlcl92ZWN0b3JzKHNlbGYsIGFuc3dlcl9pbmRpY2VzKToKICAgIGlmIGlzaW5zdGFuY2UoYW5zd2VyX2luZGljZXNbMF0sIGxpc3QpOgogICAgICBOLCBDID0gbGVuKGFuc3dlcl9pbmRpY2VzKSwgbGVuKGFuc3dlcl9pbmRpY2VzWzBdKQogICAgICB2ZWN0b3IgPSB0b3JjaC56ZXJvcyhOLCBDLCBzZWxmLnZlY3Rvci5kaW0pCiAgICAgIGZvciBpLCBhbnN3ZXJfaWRzIGluIGVudW1lcmF0ZShhbnN3ZXJfaW5kaWNlcyk6CiAgICAgICAgZm9yIGosIGFuc3dlcl9pZCBpbiBlbnVtZXJhdGUoYW5zd2VyX2lkcyk6CiAgICAgICAgICBpZiBhbnN3ZXJfaWQgIT0gLTE6CiAgICAgICAgICAgIHZlY3RvcltpLCBqLCA6XSA9IHNlbGYuX2VuY29kZV9hbnN3ZXJfdmVjdG9yKHNlbGYuaW5kZXhfdG9fYW5zd2VyW2Fuc3dlcl9pZF0pCiAgICAgICAgICBlbHNlOgogICAgICAgICAgICB2ZWN0b3JbaSwgaiwgOl0gPSBzZWxmLnVua192ZWN0b3IKICAgIGVsc2U6CiAgICAgIHZlY3RvciA9IHRvcmNoLnplcm9zKGxlbihhbnN3ZXJfaW5kaWNlcyksIHNlbGYudmVjdG9yLmRpbSkKICAgICAgZm9yIGlkeCwgYW5zd2VyX2lkIGluIGVudW1lcmF0ZShhbnN3ZXJfaW5kaWNlcyk6CiAgICAgICAgaWYgYW5zd2VyX2lkICE9IC0xOgogICAgICAgICAgdmVjdG9yW2lkeCwgOl0gPSBzZWxmLl9lbmNvZGVfYW5zd2VyX3ZlY3RvcihzZWxmLmluZGV4X3RvX2Fuc3dlclthbnN3ZXJfaWRdKQogICAgICAgIGVsc2U6CiAgICAgICAgICB2ZWN0b3JbaWR4LCA6XSA9IHNlbGYudW5rX3ZlY3RvcgogICAgcmV0dXJuIHZlY3RvciwgW10KCiAgZGVmIF9nZXRfYW5zd2VyX3NlcXVlbmNlcyhzZWxmLCBhbnN3ZXJfaW5kaWNlcyk6CiAgICBzZXFzLCBsZW5ndGhzID0gW10sIFtdCiAgICBtYXhfc2VxX2xlbmd0aCA9IDAKICAgIGlmIGlzaW5zdGFuY2UoYW5zd2VyX2luZGljZXNbMF0sIGxpc3QpOgogICAgICBOLCBDID0gbGVuKGFuc3dlcl9pbmRpY2VzKSwgbGVuKGFuc3dlcl9pbmRpY2VzWzBdKQogICAgICBmb3IgaSwgYW5zd2VyX2lkcyBpbiBlbnVtZXJhdGUoYW5zd2VyX2luZGljZXMpOgogICAgICAgIF9zZXFzID0gW10KICAgICAgICBmb3IgaiwgYW5zd2VyX2lkIGluIGVudW1lcmF0ZShhbnN3ZXJfaWRzKToKICAgICAgICAgIGlmIGFuc3dlcl9pZCAhPSAtMToKICAgICAgICAgICAgX3NlcXMuYXBwZW5kKCBzZWxmLl9lbmNvZGVfYW5zd2VyX3NlcXVlbmNlKHNlbGYuaW5kZXhfdG9fYW5zd2VyW2Fuc3dlcl9pZF0pICkKICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgIF9zZXFzLmFwcGVuZChbIHNlbGYudW5rX3ZlY3RvciBdKQogICAgICAgICAgaWYgbWF4X3NlcV9sZW5ndGggPCBsZW4oX3NlcXNbLTFdKTogbWF4X3NlcV9sZW5ndGggPSBsZW4oX3NlcXNbLTFdKSAjIGRldGVybWluZyBtYXggbGVuZ3RoCiAgICAgICAgc2Vxcy5hcHBlbmQoX3NlcXMpCgogICAgICB2ZWN0b3IgPSB0b3JjaC56ZXJvcyhOLCBDLCBtYXhfc2VxX2xlbmd0aCwgc2VsZi52ZWN0b3IuZGltKQogICAgICBmb3IgaSwgX3NlcXMgaW4gZW51bWVyYXRlKHNlcXMpOgogICAgICAgIGZvciBqLCBzZXEgaW4gZW51bWVyYXRlKF9zZXFzKToKICAgICAgICAgIGlmIGxlbihzZXEpICE9IDA6IHZlY3RvcltpLCBqLCA6bGVuKHNlcSksIDpdID0gdG9yY2guY2F0KHNlcSwgZGltPTApCiAgICAgICAgICBsZW5ndGhzLmFwcGVuZChsZW4oc2VxKSkKICAgICAgYXNzZXJ0IGxlbihsZW5ndGhzKSA9PSBOKkMsICdXcm9uZyBsZW5ndGhzIC0gbGVuZ3RoOiB7fSB2cyBOOiB7fSwgQzoge30gdnMgc2Vxczoge30nLmZvcm1hdChsZW4obGVuZ3RocyksIE4sIEMsIGxlbihzZXFzKSkKICAgIGVsc2U6CiAgICAgIGZvciBpZHgsIGFuc3dlcl9pZCBpbiBlbnVtZXJhdGUoYW5zd2VyX2luZGljZXMpOgogICAgICAgIGlmIGFuc3dlcl9pZCAhPSAtMToKICAgICAgICAgIHNlcXMuYXBwZW5kKCBzZWxmLl9lbmNvZGVfYW5zd2VyX3NlcXVlbmNlKHNlbGYuaW5kZXhfdG9fYW5zd2VyW2Fuc3dlcl9pZF0pICkKICAgICAgICBlbHNlOgogICAgICAgICAgc2Vxcy5hcHBlbmQoWyBzZWxmLnVua192ZWN0b3IgXSkKCiAgICAgICAgaWYgbWF4X3NlcV9sZW5ndGggPCBsZW4oc2Vxc1stMV0pOiBtYXhfc2VxX2xlbmd0aCA9IGxlbihzZXFzWy0xXSkgIyBkZXRlcm1pbmcgbWF4IGxlbmd0aAoKICAgICAgdmVjdG9yID0gdG9yY2guemVyb3MobGVuKGFuc3dlcl9pbmRpY2VzKSwgbWF4X3NlcV9sZW5ndGgsIHNlbGYudmVjdG9yLmRpbSkKICAgICAgZm9yIGlkeCwgc2VxIGluIGVudW1lcmF0ZShzZXFzKToKICAgICAgICBpZiBsZW4oc2VxKSAhPSAwOiB2ZWN0b3JbaWR4LCA6bGVuKHNlcSksIDpdID0gdG9yY2guY2F0KHNlcSwgZGltPTApCiAgICAgICAgbGVuZ3Rocy5hcHBlbmQobGVuKHNlcSkpCgogICAgcmV0dXJuIHZlY3RvciwgbGVuZ3RocwoKICBkZWYgX2NyZWF0ZV9pbWFnZV9pZF90b19pbmRleChzZWxmKToKICAgICIiIiBDcmVhdGUgYSBtYXBwaW5nIGZyb20gYSBDT0NPIGltYWdlIGlkIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXggaW50byB0aGUgaDUgZmlsZSAiIiIKICAgIHdpdGggaDVweS5GaWxlKHNlbGYuaW1hZ2VfZmVhdHVyZXNfcGF0aCwgJ3InKSBhcyBmZWF0dXJlc19maWxlOgogICAgICBpbWFnZV9pZHMgPSBmZWF0dXJlc19maWxlWydpZHMnXVsoKV0KICAgIGltYWdlX2lkX3RvX2luZGV4ID0ge2lkOiBpIGZvciBpLCBpZCBpbiBlbnVtZXJhdGUoaW1hZ2VfaWRzKX0KICAgIHJldHVybiBpbWFnZV9pZF90b19pbmRleAoKICBkZWYgX2VuY29kZV9xdWVzdGlvbihzZWxmLCBxdWVzdGlvbik6CiAgICAiIiIgVHVybiBhIHF1ZXN0aW9uIGludG8gYSB2ZWN0b3Igb2YgaW5kaWNlcyBhbmQgYSBxdWVzdGlvbiBsZW5ndGggIiIiCiAgICB2ZWMgPSB0b3JjaC56ZXJvcyhzZWxmLm1heF9xdWVzdGlvbl9sZW5ndGgpLmxvbmcoKQogICAgZm9yIGksIHRva2VuIGluIGVudW1lcmF0ZShxdWVzdGlvbik6CiAgICAgIGluZGV4ID0gc2VsZi50b2tlbl90b19pbmRleC5nZXQodG9rZW4sIDApCiAgICAgIHZlY1tpXSA9IGluZGV4CiAgICByZXR1cm4gdmVjLCBsZW4ocXVlc3Rpb24pCgogIGRlZiBfZW5jb2RlX2Fuc3dlcl92ZWN0b3Ioc2VsZiwgYW5zd2VyKToKICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5jYWNoZWRfYW5zd2Vycy5nZXQoYW5zd2VyLCAtMSksIGludCk6CiAgICAgIHRva2VucyA9IG5sdGsud29yZF90b2tlbml6ZShhbnN3ZXIpCiAgICAgIGFuc3dlcl92ZWMgPSB0b3JjaC56ZXJvcygxLCBzZWxmLnZlY3Rvci5kaW0pCiAgICAgIGNudCA9IDAKICAgICAgZm9yIGksIHRva2VuIGluIGVudW1lcmF0ZSh0b2tlbnMpOgogICAgICAgIGlmIHNlbGYudmVjdG9yLmNoZWNrKHRva2VuKToKICAgICAgICAgIGFuc3dlcl92ZWMgKz0gc2VsZi52ZWN0b3JbdG9rZW5dCiAgICAgICAgICBjbnQgKz0gMQogICAgICBzZWxmLmNhY2hlZF9hbnN3ZXJzW2Fuc3dlcl0gPSBhbnN3ZXJfdmVjIC8gKGNudCArIDFlLTEyKQoKICAgIHJldHVybiBzZWxmLmNhY2hlZF9hbnN3ZXJzW2Fuc3dlcl0KPHxmaW1faG9sZXw+CiAgICAgIGFuc3dlcl9zZXEgPSBbXQogICAgICBmb3IgaSwgdG9rZW4gaW4gZW51bWVyYXRlKHRva2Vucyk6CiAgICAgICAgaWYgc2VsZi52ZWN0b3IuY2hlY2sodG9rZW4pOgogICAgICAgICAgYW5zd2VyX3NlcS5hcHBlbmQoc2VsZi52ZWN0b3JbdG9rZW5dLnZpZXcoMSwgc2VsZi52ZWN0b3IuZGltKSkKICAgICAgICBlbHNlOgogICAgICAgICAgYW5zd2VyX3NlcS5hcHBlbmQoc2VsZi52ZWN0b3JbJzx1bms+J10udmlldygxLCBzZWxmLnZlY3Rvci5kaW0pKQogICAgICBzZWxmLmNhY2hlZF9hbnN3ZXJzW2Fuc3dlcl0gPSBhbnN3ZXJfc2VxCgogICAgcmV0dXJuIHNlbGYuY2FjaGVkX2Fuc3dlcnNbYW5zd2VyXQoKICBkZWYgX2VuY29kZV9tdWx0aWhvdF9sYWJlbHMoc2VsZiwgYW5zd2VycywgbWF4X2Fuc3dlcl9pbmRleD1jZmcuVEVTVC5tYXhfYW5zd2VyX2luZGV4KToKICAgICIiIiBUdXJuIGFuIGFuc3dlciBpbnRvIGEgdmVjdG9yICIiIgogICAgdGFpbF9pbmRleCA9IG1heF9hbnN3ZXJfaW5kZXgKICAgIGFuc3dlcl92ZWMgPSB0b3JjaC56ZXJvcyhtYXhfYW5zd2VyX2luZGV4KQogICAgZm9yIGFuc3dlciBpbiBhbnN3ZXJzOgogICAgICBpbmRleCA9IHNlbGYuYW5zd2VyX3RvX2luZGV4LmdldChhbnN3ZXIpCiAgICAgIGlmIGluZGV4IGlzIG5vdCBOb25lOgogICAgICAgIGlmIGluZGV4IDwgbWF4X2Fuc3dlcl9pbmRleDoKICAgICAgICAgIGFuc3dlcl92ZWNbaW5kZXhdICs9IDEKICAgIHJldHVybiBhbnN3ZXJfdmVjCgogIGRlZiBldmFsdWF0ZShzZWxmLCBwcmVkaWN0aW9ucyk6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCjx8ZmltX3N1ZmZpeHw+CgogIGRlZiBfZW5jb2RlX2Fuc3dlcl9zZXF1ZW5jZShzZWxmLCBhbnN3ZXIpOgogICAgaWYgaXNpbnN0YW5jZShzZWxmLmNhY2hlZF9hbnN3ZXJzLmdldChhbnN3ZXIsIC0xKSwgaW50KToKICAgICAgdG9rZW5zID0gbmx0ay53b3JkX3Rva2VuaXplKGFuc3dlcikKPHxmaW1fZW5kfD4="]
["ffdde3f13c8ca55ed0a607240ff3f866d45e0c93-3","ffdde3f13c8ca55ed0a607240ff3f866d45e0c93","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCBvcy5wYXRoIGFzIG9zcAppbXBvcnQgcmFuZG9tCmltcG9ydCBubHRrCmltcG9ydCBoNXB5Cgpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gudXRpbHMuZGF0YSBhcyBkYXRhCmZyb20gdG9yY2gudXRpbHMuZGF0YS5kYXRhbG9hZGVyIGltcG9ydCBkZWZhdWx0X2NvbGxhdGUKCmZyb20gYW5zZW1iLmNvbmZpZyBpbXBvcnQgY2ZnCmZyb20gYW5zZW1iLmRhdGFzZXQucHJlcHJvY2VzcyBpbXBvcnQgaW52ZXJ0X2RpY3QKCmNsYXNzIFZpc3VhbFFBKGRhdGEuRGF0YXNldCk6CiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIHZlY3RvciwKICAgICAgICAgICAgICAgaW1hZ2VfZmVhdHVyZXNfcGF0aCwKICAgICAgICAgICAgICAgYW5zd2VyX3ZvY2FiX3BhdGg9Tm9uZSk6CiAgICBzdXBlcihWaXN1YWxRQSwgc2VsZikuX19pbml0X18oKQoKICAgICMgdm9jYWIKICAgIHNlbGYudmVjdG9yID0gdmVjdG9yCgogICAgIyBwcm9jZXNzIHF1ZXN0aW9uCiAgICB3aXRoIG9wZW4oY2ZnLnF1ZXN0aW9uX3ZvY2FiX3BhdGgsICdyJykgYXMgZmQ6IHF1ZXN0aW9uX3ZvY2FiID0ganNvbi5sb2FkKGZkKQogICAgc2VsZi50b2tlbl90b19pbmRleCA9IHF1ZXN0aW9uX3ZvY2FiWydxdWVzdGlvbiddCiAgICBzZWxmLl9tYXhfcXVlc3Rpb25fbGVuZ3RoID0gcXVlc3Rpb25fdm9jYWJbJ21heF9xdWVzdGlvbl9sZW5ndGgnXQoKICAgIHNlbGYuaW5kZXhfdG9fdG9rZW4gID0gaW52ZXJ0X2RpY3Qoc2VsZi50b2tlbl90b19pbmRleCkKCjx8ZmltX2hvbGV8PgogICAgICBzZWxmLmFuc3dlcl90b19pbmRleCA9IGFuc3dlcl92b2NhYlsnYW5zd2VyJ10KICAgICAgc2VsZi5pbmRleF90b19hbnN3ZXIgPSBpbnZlcnRfZGljdChzZWxmLmFuc3dlcl90b19pbmRleCkKCiAgICBzZWxmLmNhY2hlZF9hbnN3ZXJzID0ge30KICAgIHNlbGYudW5rX3ZlY3RvciA9IHNlbGYudmVjdG9yWydVTksnXQoKICBAcHJvcGVydHkKICBkZWYgbWF4X3F1ZXN0aW9uX2xlbmd0aChzZWxmKToKICAgIHJldHVybiBzZWxmLl9tYXhfcXVlc3Rpb25fbGVuZ3RoCgogIEBwcm9wZXJ0eQogIGRlZiBtYXhfYW5zd2VyX2xlbmd0aChzZWxmKToKICAgIGFzc2VydCBoYXNhdHRyKHNlbGYsIGFuc3dlcnMpLCAnRGF0YWxvYWRlciBtdXN0IGhhdmUgYWNjZXNzIHRvIGFuc3dlcnMnCiAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnX21heF9hbnN3ZXJfbGVuZ3RoJyk6CiAgICAgIHNlbGYuX21heF9hbnN3ZXJfbGVuZ3RoID0gbWF4KG1hcChsZW4sIHNlbGYuYW5zd2VycykpCiAgICByZXR1cm4gc2VsZi5fbWF4X2Fuc3dlcl9sZW5ndGgKCiAgQHByb3BlcnR5CiAgZGVmIG51bV90b2tlbnMoc2VsZik6CiAgICByZXR1cm4gbGVuKHNlbGYudG9rZW5fdG9faW5kZXgpCgogIEBwcm9wZXJ0eQogIGRlZiBudW1fYW5zd2VycyhzZWxmKToKICAgIHJldHVybiBsZW4oc2VsZi5hbnN3ZXJfdG9faW5kZXgpCgogIGRlZiBfX2xlbl9fKHNlbGYpOgogICAgcmV0dXJuIGxlbihzZWxmLnF1ZXN0aW9ucykKCiAgIyMjIEludGVybmFsIGRhdGEgdXRpbGl0eS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIGRlZiBfbG9hZF9pbWFnZShzZWxmLCBpbWFnZV9pZCk6CiAgICAiIiIgTG9hZCBhbiBpbWFnZSAiIiIKICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdmZWF0dXJlc19maWxlJyk6CiAgICAgICMgTG9hZGluZyB0aGUgaDUgZmlsZSBoYXMgdG8gYmUgZG9uZSBoZXJlIGFuZCBub3QgaW4gX19pbml0X18gYmVjYXVzZSB3aGVuIHRoZSBEYXRhTG9hZGVyCiAgICAgICMgZm9ya3MgZm9yIG11bHRpcGxlIHdvcmtzLCBldmVyeSBjaGlsZCB3b3VsZCB1c2UgdGhlIHNhbWUgZmlsZSBvYmplY3QgYW5kIGZhaWwKICAgICAgIyBIYXZpbmcgbXVsdGlwbGUgcmVhZGVycyB1c2luZyBkaWZmZXJlbnQgZmlsZSBvYmplY3RzIGlzIGZpbmUgdGhvdWdoLCBzbyB3ZSBqdXN0IGluaXQgaW4gaGVyZS4KICAgICAgc2VsZi5mZWF0dXJlc19maWxlID0gaDVweS5GaWxlKHNlbGYuaW1hZ2VfZmVhdHVyZXNfcGF0aCwgJ3InKQogICAgaW5kZXggPSBzZWxmLmltYWdlX2lkX3RvX2luZGV4W2ltYWdlX2lkXQogICAgZGF0YXNldCA9IHNlbGYuZmVhdHVyZXNfZmlsZVsnZmVhdHVyZXMnXQogICAgaW1nID0gZGF0YXNldFtpbmRleF0uYXN0eXBlKCdmbG9hdDMyJykKICAgIHJldHVybiB0b3JjaC5mcm9tX251bXB5KGltZykKCiAgZGVmIF9nZXRfYW5zd2VyX3ZlY3RvcnMoc2VsZiwgYW5zd2VyX2luZGljZXMpOgogICAgaWYgaXNpbnN0YW5jZShhbnN3ZXJfaW5kaWNlc1swXSwgbGlzdCk6CiAgICAgIE4sIEMgPSBsZW4oYW5zd2VyX2luZGljZXMpLCBsZW4oYW5zd2VyX2luZGljZXNbMF0pCiAgICAgIHZlY3RvciA9IHRvcmNoLnplcm9zKE4sIEMsIHNlbGYudmVjdG9yLmRpbSkKICAgICAgZm9yIGksIGFuc3dlcl9pZHMgaW4gZW51bWVyYXRlKGFuc3dlcl9pbmRpY2VzKToKICAgICAgICBmb3IgaiwgYW5zd2VyX2lkIGluIGVudW1lcmF0ZShhbnN3ZXJfaWRzKToKICAgICAgICAgIGlmIGFuc3dlcl9pZCAhPSAtMToKICAgICAgICAgICAgdmVjdG9yW2ksIGosIDpdID0gc2VsZi5fZW5jb2RlX2Fuc3dlcl92ZWN0b3Ioc2VsZi5pbmRleF90b19hbnN3ZXJbYW5zd2VyX2lkXSkKICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgIHZlY3RvcltpLCBqLCA6XSA9IHNlbGYudW5rX3ZlY3RvcgogICAgZWxzZToKICAgICAgdmVjdG9yID0gdG9yY2guemVyb3MobGVuKGFuc3dlcl9pbmRpY2VzKSwgc2VsZi52ZWN0b3IuZGltKQogICAgICBmb3IgaWR4LCBhbnN3ZXJfaWQgaW4gZW51bWVyYXRlKGFuc3dlcl9pbmRpY2VzKToKICAgICAgICBpZiBhbnN3ZXJfaWQgIT0gLTE6CiAgICAgICAgICB2ZWN0b3JbaWR4LCA6XSA9IHNlbGYuX2VuY29kZV9hbnN3ZXJfdmVjdG9yKHNlbGYuaW5kZXhfdG9fYW5zd2VyW2Fuc3dlcl9pZF0pCiAgICAgICAgZWxzZToKICAgICAgICAgIHZlY3RvcltpZHgsIDpdID0gc2VsZi51bmtfdmVjdG9yCiAgICByZXR1cm4gdmVjdG9yLCBbXQoKICBkZWYgX2dldF9hbnN3ZXJfc2VxdWVuY2VzKHNlbGYsIGFuc3dlcl9pbmRpY2VzKToKICAgIHNlcXMsIGxlbmd0aHMgPSBbXSwgW10KICAgIG1heF9zZXFfbGVuZ3RoID0gMAogICAgaWYgaXNpbnN0YW5jZShhbnN3ZXJfaW5kaWNlc1swXSwgbGlzdCk6CiAgICAgIE4sIEMgPSBsZW4oYW5zd2VyX2luZGljZXMpLCBsZW4oYW5zd2VyX2luZGljZXNbMF0pCiAgICAgIGZvciBpLCBhbnN3ZXJfaWRzIGluIGVudW1lcmF0ZShhbnN3ZXJfaW5kaWNlcyk6CiAgICAgICAgX3NlcXMgPSBbXQogICAgICAgIGZvciBqLCBhbnN3ZXJfaWQgaW4gZW51bWVyYXRlKGFuc3dlcl9pZHMpOgogICAgICAgICAgaWYgYW5zd2VyX2lkICE9IC0xOgogICAgICAgICAgICBfc2Vxcy5hcHBlbmQoIHNlbGYuX2VuY29kZV9hbnN3ZXJfc2VxdWVuY2Uoc2VsZi5pbmRleF90b19hbnN3ZXJbYW5zd2VyX2lkXSkgKQogICAgICAgICAgZWxzZToKICAgICAgICAgICAgX3NlcXMuYXBwZW5kKFsgc2VsZi51bmtfdmVjdG9yIF0pCiAgICAgICAgICBpZiBtYXhfc2VxX2xlbmd0aCA8IGxlbihfc2Vxc1stMV0pOiBtYXhfc2VxX2xlbmd0aCA9IGxlbihfc2Vxc1stMV0pICMgZGV0ZXJtaW5nIG1heCBsZW5ndGgKICAgICAgICBzZXFzLmFwcGVuZChfc2VxcykKCiAgICAgIHZlY3RvciA9IHRvcmNoLnplcm9zKE4sIEMsIG1heF9zZXFfbGVuZ3RoLCBzZWxmLnZlY3Rvci5kaW0pCiAgICAgIGZvciBpLCBfc2VxcyBpbiBlbnVtZXJhdGUoc2Vxcyk6CiAgICAgICAgZm9yIGosIHNlcSBpbiBlbnVtZXJhdGUoX3NlcXMpOgogICAgICAgICAgaWYgbGVuKHNlcSkgIT0gMDogdmVjdG9yW2ksIGosIDpsZW4oc2VxKSwgOl0gPSB0b3JjaC5jYXQoc2VxLCBkaW09MCkKICAgICAgICAgIGxlbmd0aHMuYXBwZW5kKGxlbihzZXEpKQogICAgICBhc3NlcnQgbGVuKGxlbmd0aHMpID09IE4qQywgJ1dyb25nIGxlbmd0aHMgLSBsZW5ndGg6IHt9IHZzIE46IHt9LCBDOiB7fSB2cyBzZXFzOiB7fScuZm9ybWF0KGxlbihsZW5ndGhzKSwgTiwgQywgbGVuKHNlcXMpKQogICAgZWxzZToKICAgICAgZm9yIGlkeCwgYW5zd2VyX2lkIGluIGVudW1lcmF0ZShhbnN3ZXJfaW5kaWNlcyk6CiAgICAgICAgaWYgYW5zd2VyX2lkICE9IC0xOgogICAgICAgICAgc2Vxcy5hcHBlbmQoIHNlbGYuX2VuY29kZV9hbnN3ZXJfc2VxdWVuY2Uoc2VsZi5pbmRleF90b19hbnN3ZXJbYW5zd2VyX2lkXSkgKQogICAgICAgIGVsc2U6CiAgICAgICAgICBzZXFzLmFwcGVuZChbIHNlbGYudW5rX3ZlY3RvciBdKQoKICAgICAgICBpZiBtYXhfc2VxX2xlbmd0aCA8IGxlbihzZXFzWy0xXSk6IG1heF9zZXFfbGVuZ3RoID0gbGVuKHNlcXNbLTFdKSAjIGRldGVybWluZyBtYXggbGVuZ3RoCgogICAgICB2ZWN0b3IgPSB0b3JjaC56ZXJvcyhsZW4oYW5zd2VyX2luZGljZXMpLCBtYXhfc2VxX2xlbmd0aCwgc2VsZi52ZWN0b3IuZGltKQogICAgICBmb3IgaWR4LCBzZXEgaW4gZW51bWVyYXRlKHNlcXMpOgogICAgICAgIGlmIGxlbihzZXEpICE9IDA6IHZlY3RvcltpZHgsIDpsZW4oc2VxKSwgOl0gPSB0b3JjaC5jYXQoc2VxLCBkaW09MCkKICAgICAgICBsZW5ndGhzLmFwcGVuZChsZW4oc2VxKSkKCiAgICByZXR1cm4gdmVjdG9yLCBsZW5ndGhzCgogIGRlZiBfY3JlYXRlX2ltYWdlX2lkX3RvX2luZGV4KHNlbGYpOgogICAgIiIiIENyZWF0ZSBhIG1hcHBpbmcgZnJvbSBhIENPQ08gaW1hZ2UgaWQgaW50byB0aGUgY29ycmVzcG9uZGluZyBpbmRleCBpbnRvIHRoZSBoNSBmaWxlICIiIgogICAgd2l0aCBoNXB5LkZpbGUoc2VsZi5pbWFnZV9mZWF0dXJlc19wYXRoLCAncicpIGFzIGZlYXR1cmVzX2ZpbGU6CiAgICAgIGltYWdlX2lkcyA9IGZlYXR1cmVzX2ZpbGVbJ2lkcyddWygpXQogICAgaW1hZ2VfaWRfdG9faW5kZXggPSB7aWQ6IGkgZm9yIGksIGlkIGluIGVudW1lcmF0ZShpbWFnZV9pZHMpfQogICAgcmV0dXJuIGltYWdlX2lkX3RvX2luZGV4CgogIGRlZiBfZW5jb2RlX3F1ZXN0aW9uKHNlbGYsIHF1ZXN0aW9uKToKICAgICIiIiBUdXJuIGEgcXVlc3Rpb24gaW50byBhIHZlY3RvciBvZiBpbmRpY2VzIGFuZCBhIHF1ZXN0aW9uIGxlbmd0aCAiIiIKICAgIHZlYyA9IHRvcmNoLnplcm9zKHNlbGYubWF4X3F1ZXN0aW9uX2xlbmd0aCkubG9uZygpCiAgICBmb3IgaSwgdG9rZW4gaW4gZW51bWVyYXRlKHF1ZXN0aW9uKToKICAgICAgaW5kZXggPSBzZWxmLnRva2VuX3RvX2luZGV4LmdldCh0b2tlbiwgMCkKICAgICAgdmVjW2ldID0gaW5kZXgKICAgIHJldHVybiB2ZWMsIGxlbihxdWVzdGlvbikKCiAgZGVmIF9lbmNvZGVfYW5zd2VyX3ZlY3RvcihzZWxmLCBhbnN3ZXIpOgogICAgaWYgaXNpbnN0YW5jZShzZWxmLmNhY2hlZF9hbnN3ZXJzLmdldChhbnN3ZXIsIC0xKSwgaW50KToKICAgICAgdG9rZW5zID0gbmx0ay53b3JkX3Rva2VuaXplKGFuc3dlcikKICAgICAgYW5zd2VyX3ZlYyA9IHRvcmNoLnplcm9zKDEsIHNlbGYudmVjdG9yLmRpbSkKICAgICAgY250ID0gMAogICAgICBmb3IgaSwgdG9rZW4gaW4gZW51bWVyYXRlKHRva2Vucyk6CiAgICAgICAgaWYgc2VsZi52ZWN0b3IuY2hlY2sodG9rZW4pOgogICAgICAgICAgYW5zd2VyX3ZlYyArPSBzZWxmLnZlY3Rvclt0b2tlbl0KICAgICAgICAgIGNudCArPSAxCiAgICAgIHNlbGYuY2FjaGVkX2Fuc3dlcnNbYW5zd2VyXSA9IGFuc3dlcl92ZWMgLyAoY250ICsgMWUtMTIpCgogICAgcmV0dXJuIHNlbGYuY2FjaGVkX2Fuc3dlcnNbYW5zd2VyXQoKICBkZWYgX2VuY29kZV9hbnN3ZXJfc2VxdWVuY2Uoc2VsZiwgYW5zd2VyKToKICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5jYWNoZWRfYW5zd2Vycy5nZXQoYW5zd2VyLCAtMSksIGludCk6CiAgICAgIHRva2VucyA9IG5sdGsud29yZF90b2tlbml6ZShhbnN3ZXIpCiAgICAgIGFuc3dlcl9zZXEgPSBbXQogICAgICBmb3IgaSwgdG9rZW4gaW4gZW51bWVyYXRlKHRva2Vucyk6CiAgICAgICAgaWYgc2VsZi52ZWN0b3IuY2hlY2sodG9rZW4pOgogICAgICAgICAgYW5zd2VyX3NlcS5hcHBlbmQoc2VsZi52ZWN0b3JbdG9rZW5dLnZpZXcoMSwgc2VsZi52ZWN0b3IuZGltKSkKICAgICAgICBlbHNlOgogICAgICAgICAgYW5zd2VyX3NlcS5hcHBlbmQoc2VsZi52ZWN0b3JbJzx1bms+J10udmlldygxLCBzZWxmLnZlY3Rvci5kaW0pKQogICAgICBzZWxmLmNhY2hlZF9hbnN3ZXJzW2Fuc3dlcl0gPSBhbnN3ZXJfc2VxCgogICAgcmV0dXJuIHNlbGYuY2FjaGVkX2Fuc3dlcnNbYW5zd2VyXQoKICBkZWYgX2VuY29kZV9tdWx0aWhvdF9sYWJlbHMoc2VsZiwgYW5zd2VycywgbWF4X2Fuc3dlcl9pbmRleD1jZmcuVEVTVC5tYXhfYW5zd2VyX2luZGV4KToKICAgICIiIiBUdXJuIGFuIGFuc3dlciBpbnRvIGEgdmVjdG9yICIiIgogICAgdGFpbF9pbmRleCA9IG1heF9hbnN3ZXJfaW5kZXgKICAgIGFuc3dlcl92ZWMgPSB0b3JjaC56ZXJvcyhtYXhfYW5zd2VyX2luZGV4KQogICAgZm9yIGFuc3dlciBpbiBhbnN3ZXJzOgogICAgICBpbmRleCA9IHNlbGYuYW5zd2VyX3RvX2luZGV4LmdldChhbnN3ZXIpCiAgICAgIGlmIGluZGV4IGlzIG5vdCBOb25lOgogICAgICAgIGlmIGluZGV4IDwgbWF4X2Fuc3dlcl9pbmRleDoKICAgICAgICAgIGFuc3dlcl92ZWNbaW5kZXhdICs9IDEKICAgIHJldHVybiBhbnN3ZXJfdmVjCgogIGRlZiBldmFsdWF0ZShzZWxmLCBwcmVkaWN0aW9ucyk6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCjx8ZmltX3N1ZmZpeHw+CiAgICBpZiBhbnN3ZXJfdm9jYWJfcGF0aCBpcyBub3QgTm9uZToKICAgICAgcHJpbnQoJ2ltcG9ydCBhbnN3ZXIgdm9jYWJ1bGFyeSBmcm9tOiB7fScuZm9ybWF0KGFuc3dlcl92b2NhYl9wYXRoKSkKICAgICAgIyBwcm9jZXNzIGFuc3dlcgogICAgICB3aXRoIG9wZW4oYW5zd2VyX3ZvY2FiX3BhdGgsICdyJykgYXMgZmQ6IGFuc3dlcl92b2NhYiA9IGpzb24ubG9hZChmZCkKPHxmaW1fZW5kfD4="]
["ffdde3f13c8ca55ed0a607240ff3f866d45e0c93-4","ffdde3f13c8ca55ed0a607240ff3f866d45e0c93","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCBvcy5wYXRoIGFzIG9zcAppbXBvcnQgcmFuZG9tCmltcG9ydCBubHRrCmltcG9ydCBoNXB5Cgpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gudXRpbHMuZGF0YSBhcyBkYXRhCmZyb20gdG9yY2gudXRpbHMuZGF0YS5kYXRhbG9hZGVyIGltcG9ydCBkZWZhdWx0X2NvbGxhdGUKCmZyb20gYW5zZW1iLmNvbmZpZyBpbXBvcnQgY2ZnCmZyb20gYW5zZW1iLmRhdGFzZXQucHJlcHJvY2VzcyBpbXBvcnQgaW52ZXJ0X2RpY3QKCmNsYXNzIFZpc3VhbFFBKGRhdGEuRGF0YXNldCk6CiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIHZlY3RvciwKICAgICAgICAgICAgICAgaW1hZ2VfZmVhdHVyZXNfcGF0aCwKICAgICAgICAgICAgICAgYW5zd2VyX3ZvY2FiX3BhdGg9Tm9uZSk6CiAgICBzdXBlcihWaXN1YWxRQSwgc2VsZikuX19pbml0X18oKQoKICAgICMgdm9jYWIKICAgIHNlbGYudmVjdG9yID0gdmVjdG9yCgogICAgIyBwcm9jZXNzIHF1ZXN0aW9uCiAgICB3aXRoIG9wZW4oY2ZnLnF1ZXN0aW9uX3ZvY2FiX3BhdGgsICdyJykgYXMgZmQ6IHF1ZXN0aW9uX3ZvY2FiID0ganNvbi5sb2FkKGZkKQogICAgc2VsZi50b2tlbl90b19pbmRleCA9IHF1ZXN0aW9uX3ZvY2FiWydxdWVzdGlvbiddCiAgICBzZWxmLl9tYXhfcXVlc3Rpb25fbGVuZ3RoID0gcXVlc3Rpb25fdm9jYWJbJ21heF9xdWVzdGlvbl9sZW5ndGgnXQoKICAgIHNlbGYuaW5kZXhfdG9fdG9rZW4gID0gaW52ZXJ0X2RpY3Qoc2VsZi50b2tlbl90b19pbmRleCkKCiAgICBpZiBhbnN3ZXJfdm9jYWJfcGF0aCBpcyBub3QgTm9uZToKICAgICAgcHJpbnQoJ2ltcG9ydCBhbnN3ZXIgdm9jYWJ1bGFyeSBmcm9tOiB7fScuZm9ybWF0KGFuc3dlcl92b2NhYl9wYXRoKSkKICAgICAgIyBwcm9jZXNzIGFuc3dlcgogICAgICB3aXRoIG9wZW4oYW5zd2VyX3ZvY2FiX3BhdGgsICdyJykgYXMgZmQ6IGFuc3dlcl92b2NhYiA9IGpzb24ubG9hZChmZCkKICAgICAgc2VsZi5hbnN3ZXJfdG9faW5kZXggPSBhbnN3ZXJfdm9jYWJbJ2Fuc3dlciddCiAgICAgIHNlbGYuaW5kZXhfdG9fYW5zd2VyID0gaW52ZXJ0X2RpY3Qoc2VsZi5hbnN3ZXJfdG9faW5kZXgpCgogICAgc2VsZi5jYWNoZWRfYW5zd2VycyA9IHt9CiAgICBzZWxmLnVua192ZWN0b3IgPSBzZWxmLnZlY3RvclsnVU5LJ10KCiAgQHByb3BlcnR5CiAgZGVmIG1heF9xdWVzdGlvbl9sZW5ndGgoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fbWF4X3F1ZXN0aW9uX2xlbmd0aAoKICBAcHJvcGVydHkKICBkZWYgbWF4X2Fuc3dlcl9sZW5ndGgoc2VsZik6CiAgICBhc3NlcnQgaGFzYXR0cihzZWxmLCBhbnN3ZXJzKSwgJ0RhdGFsb2FkZXIgbXVzdCBoYXZlIGFjY2VzcyB0byBhbnN3ZXJzJwogICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ19tYXhfYW5zd2VyX2xlbmd0aCcpOgogICAgICBzZWxmLl9tYXhfYW5zd2VyX2xlbmd0aCA9IG1heChtYXAobGVuLCBzZWxmLmFuc3dlcnMpKQogICAgcmV0dXJuIHNlbGYuX21heF9hbnN3ZXJfbGVuZ3RoCgogIEBwcm9wZXJ0eQogIGRlZiBudW1fdG9rZW5zKHNlbGYpOgogICAgcmV0dXJuIGxlbihzZWxmLnRva2VuX3RvX2luZGV4KQoKICBAcHJvcGVydHkKICBkZWYgbnVtX2Fuc3dlcnMoc2VsZik6CiAgICByZXR1cm4gbGVuKHNlbGYuYW5zd2VyX3RvX2luZGV4KQoKICBkZWYgX19sZW5fXyhzZWxmKToKICAgIHJldHVybiBsZW4oc2VsZi5xdWVzdGlvbnMpCgogICMjIyBJbnRlcm5hbCBkYXRhIHV0aWxpdHktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBkZWYgX2xvYWRfaW1hZ2Uoc2VsZiwgaW1hZ2VfaWQpOgogICAgIiIiIExvYWQgYW4gaW1hZ2UgIiIiCiAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnZmVhdHVyZXNfZmlsZScpOgogICAgICAjIExvYWRpbmcgdGhlIGg1IGZpbGUgaGFzIHRvIGJlIGRvbmUgaGVyZSBhbmQgbm90IGluIF9faW5pdF9fIGJlY2F1c2Ugd2hlbiB0aGUgRGF0YUxvYWRlcgogICAgICAjIGZvcmtzIGZvciBtdWx0aXBsZSB3b3JrcywgZXZlcnkgY2hpbGQgd291bGQgdXNlIHRoZSBzYW1lIGZpbGUgb2JqZWN0IGFuZCBmYWlsCiAgICAgICMgSGF2aW5nIG11bHRpcGxlIHJlYWRlcnMgdXNpbmcgZGlmZmVyZW50IGZpbGUgb2JqZWN0cyBpcyBmaW5lIHRob3VnaCwgc28gd2UganVzdCBpbml0IGluIGhlcmUuCiAgICAgIHNlbGYuZmVhdHVyZXNfZmlsZSA9IGg1cHkuRmlsZShzZWxmLmltYWdlX2ZlYXR1cmVzX3BhdGgsICdyJykKICAgIGluZGV4ID0gc2VsZi5pbWFnZV9pZF90b19pbmRleFtpbWFnZV9pZF0KICAgIGRhdGFzZXQgPSBzZWxmLmZlYXR1cmVzX2ZpbGVbJ2ZlYXR1cmVzJ10KICAgIGltZyA9IGRhdGFzZXRbaW5kZXhdLmFzdHlwZSgnZmxvYXQzMicpCiAgICByZXR1cm4gdG9yY2guZnJvbV9udW1weShpbWcpCgogIGRlZiBfZ2V0X2Fuc3dlcl92ZWN0b3JzKHNlbGYsIGFuc3dlcl9pbmRpY2VzKToKICAgIGlmIGlzaW5zdGFuY2UoYW5zd2VyX2luZGljZXNbMF0sIGxpc3QpOgogICAgICBOLCBDID0gbGVuKGFuc3dlcl9pbmRpY2VzKSwgbGVuKGFuc3dlcl9pbmRpY2VzWzBdKQogICAgICB2ZWN0b3IgPSB0b3JjaC56ZXJvcyhOLCBDLCBzZWxmLnZlY3Rvci5kaW0pCiAgICAgIGZvciBpLCBhbnN3ZXJfaWRzIGluIGVudW1lcmF0ZShhbnN3ZXJfaW5kaWNlcyk6CiAgICAgICAgZm9yIGosIGFuc3dlcl9pZCBpbiBlbnVtZXJhdGUoYW5zd2VyX2lkcyk6CiAgICAgICAgICBpZiBhbnN3ZXJfaWQgIT0gLTE6CiAgICAgICAgICAgIHZlY3RvcltpLCBqLCA6XSA9IHNlbGYuX2VuY29kZV9hbnN3ZXJfdmVjdG9yKHNlbGYuaW5kZXhfdG9fYW5zd2VyW2Fuc3dlcl9pZF0pCiAgICAgICAgICBlbHNlOgogICAgICAgICAgICB2ZWN0b3JbaSwgaiwgOl0gPSBzZWxmLnVua192ZWN0b3IKICAgIGVsc2U6CiAgICAgIHZlY3RvciA9IHRvcmNoLnplcm9zKGxlbihhbnN3ZXJfaW5kaWNlcyksIHNlbGYudmVjdG9yLmRpbSkKICAgICAgZm9yIGlkeCwgYW5zd2VyX2lkIGluIGVudW1lcmF0ZShhbnN3ZXJfaW5kaWNlcyk6CiAgICAgICAgaWYgYW5zd2VyX2lkICE9IC0xOgogICAgICAgICAgdmVjdG9yW2lkeCwgOl0gPSBzZWxmLl9lbmNvZGVfYW5zd2VyX3ZlY3RvcihzZWxmLmluZGV4X3RvX2Fuc3dlclthbnN3ZXJfaWRdKQogICAgICAgIGVsc2U6CiAgICAgICAgICB2ZWN0b3JbaWR4LCA6XSA9IHNlbGYudW5rX3ZlY3RvcgogICAgcmV0dXJuIHZlY3RvciwgW10KCiAgZGVmIF9nZXRfYW5zd2VyX3NlcXVlbmNlcyhzZWxmLCBhbnN3ZXJfaW5kaWNlcyk6CiAgICBzZXFzLCBsZW5ndGhzID0gW10sIFtdCiAgICBtYXhfc2VxX2xlbmd0aCA9IDAKICAgIGlmIGlzaW5zdGFuY2UoYW5zd2VyX2luZGljZXNbMF0sIGxpc3QpOgogICAgICBOLCBDID0gbGVuKGFuc3dlcl9pbmRpY2VzKSwgbGVuKGFuc3dlcl9pbmRpY2VzWzBdKQogICAgICBmb3IgaSwgYW5zd2VyX2lkcyBpbiBlbnVtZXJhdGUoYW5zd2VyX2luZGljZXMpOgogICAgICAgIF9zZXFzID0gW10KICAgICAgICBmb3IgaiwgYW5zd2VyX2lkIGluIGVudW1lcmF0ZShhbnN3ZXJfaWRzKToKICAgICAgICAgIGlmIGFuc3dlcl9pZCAhPSAtMToKICAgICAgICAgICAgX3NlcXMuYXBwZW5kKCBzZWxmLl9lbmNvZGVfYW5zd2VyX3NlcXVlbmNlKHNlbGYuaW5kZXhfdG9fYW5zd2VyW2Fuc3dlcl9pZF0pICkKICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgIF9zZXFzLmFwcGVuZChbIHNlbGYudW5rX3ZlY3RvciBdKQogICAgICAgICAgaWYgbWF4X3NlcV9sZW5ndGggPCBsZW4oX3NlcXNbLTFdKTogbWF4X3NlcV9sZW5ndGggPSBsZW4oX3NlcXNbLTFdKSAjIGRldGVybWluZyBtYXggbGVuZ3RoCiAgICAgICAgc2Vxcy5hcHBlbmQoX3NlcXMpCgogICAgICB2ZWN0b3IgPSB0b3JjaC56ZXJvcyhOLCBDLCBtYXhfc2VxX2xlbmd0aCwgc2VsZi52ZWN0b3IuZGltKQogICAgICBmb3IgaSwgX3NlcXMgaW4gZW51bWVyYXRlKHNlcXMpOgogICAgICAgIGZvciBqLCBzZXEgaW4gZW51bWVyYXRlKF9zZXFzKToKICAgICAgICAgIGlmIGxlbihzZXEpICE9IDA6IHZlY3RvcltpLCBqLCA6bGVuKHNlcSksIDpdID0gdG9yY2guY2F0KHNlcSwgZGltPTApCiAgICAgICAgICBsZW5ndGhzLmFwcGVuZChsZW4oc2VxKSkKICAgICAgYXNzZXJ0IGxlbihsZW5ndGhzKSA9PSBOKkMsICdXcm9uZyBsZW5ndGhzIC0gbGVuZ3RoOiB7fSB2cyBOOiB7fSwgQzoge30gdnMgc2Vxczoge30nLmZvcm1hdChsZW4obGVuZ3RocyksIE4sIEMsIGxlbihzZXFzKSkKICAgIGVsc2U6CiAgICAgIGZvciBpZHgsIGFuc3dlcl9pZCBpbiBlbnVtZXJhdGUoYW5zd2VyX2luZGljZXMpOgogICAgICAgIGlmIGFuc3dlcl9pZCAhPSAtMToKICAgICAgICAgIHNlcXMuYXBwZW5kKCBzZWxmLl9lbmNvZGVfYW5zd2VyX3NlcXVlbmNlKHNlbGYuaW5kZXhfdG9fYW5zd2VyW2Fuc3dlcl9pZF0pICkKICAgICAgICBlbHNlOgogICAgICAgICAgc2Vxcy5hcHBlbmQoWyBzZWxmLnVua192ZWN0b3IgXSkKCiAgICAgICAgaWYgbWF4X3NlcV9sZW5ndGggPCBsZW4oc2Vxc1stMV0pOiBtYXhfc2VxX2xlbmd0aCA9IGxlbihzZXFzWy0xXSkgIyBkZXRlcm1pbmcgbWF4IGxlbmd0aAoKICAgICAgdmVjdG9yID0gdG9yY2guemVyb3MobGVuKGFuc3dlcl9pbmRpY2VzKSwgbWF4X3NlcV9sZW5ndGgsIHNlbGYudmVjdG9yLmRpbSkKICAgICAgZm9yIGlkeCwgc2VxIGluIGVudW1lcmF0ZShzZXFzKToKICAgICAgICBpZiBsZW4oc2VxKSAhPSAwOiB2ZWN0b3JbaWR4LCA6bGVuKHNlcSksIDpdID0gdG9yY2guY2F0KHNlcSwgZGltPTApCiAgICAgICAgbGVuZ3Rocy5hcHBlbmQobGVuKHNlcSkpCgogICAgcmV0dXJuIHZlY3RvciwgbGVuZ3RocwoKICBkZWYgX2NyZWF0ZV9pbWFnZV9pZF90b19pbmRleChzZWxmKToKICAgICIiIiBDcmVhdGUgYSBtYXBwaW5nIGZyb20gYSBDT0NPIGltYWdlIGlkIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXggaW50byB0aGUgaDUgZmlsZSAiIiIKICAgIHdpdGggaDVweS5GaWxlKHNlbGYuaW1hZ2VfZmVhdHVyZXNfcGF0aCwgJ3InKSBhcyBmZWF0dXJlc19maWxlOgogICAgICBpbWFnZV9pZHMgPSBmZWF0dXJlc19maWxlWydpZHMnXVsoKV0KICAgIGltYWdlX2lkX3RvX2luZGV4ID0ge2lkOiBpIGZvciBpLCBpZCBpbiBlbnVtZXJhdGUoaW1hZ2VfaWRzKX0KICAgIHJldHVybiBpbWFnZV9pZF90b19pbmRleAoKICBkZWYgX2VuY29kZV9xdWVzdGlvbihzZWxmLCBxdWVzdGlvbik6CiAgICAiIiIgVHVybiBhIHF1ZXN0aW9uIGludG8gYSB2ZWN0b3Igb2YgaW5kaWNlcyBhbmQgYSBxdWVzdGlvbiBsZW5ndGggIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHZlYyA9IHRvcmNoLnplcm9zKHNlbGYubWF4X3F1ZXN0aW9uX2xlbmd0aCkubG9uZygpCiAgICBmb3IgaSwgdG9rZW4gaW4gZW51bWVyYXRlKHF1ZXN0aW9uKToKICAgICAgaW5kZXggPSBzZWxmLnRva2VuX3RvX2luZGV4LmdldCh0b2tlbiwgMCkKICAgICAgdmVjW2ldID0gaW5kZXgKPHxmaW1fZW5kfD4="]
["5f8aa0666ea5e94567e6c19d9c30cceb995b5309-1","5f8aa0666ea5e94567e6c19d9c30cceb995b5309","PHxmaW1fcHJlZml4fD4KCmZyb20gbWF0aCBpbXBvcnQgcGkgYXMgUEkKCmRlZiBsaW1pdCh2YWx1ZSwgdm1pbiwgdm1heCk6CglyZXR1cm4gbWF4KG1pbih2YWx1ZSwgdm1heCksIHZtaW4pCgpkZWYgbWFwcGluZyh2YWx1ZSwgb2xkX21pbiwgb2xkX21heCwgbmV3X21pbiwgbmV3X21heCk6CglyZXR1cm4gKHZhbHVlLW9sZF9taW4pLyhvbGRfbWF4LW9sZF9taW4pKihuZXdfbWF4LW5ld19taW4pK25ld19taW4KCmRlZiBkZWcycmFkKGRlZyk6CglyZXR1cm4gZGVnLzE4MCpQSQoJCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIHJhZDJkZWcocmFkKToKCXJldHVybiByYWQqMTgwL1BJCjx8ZmltX2VuZHw+"]
["5f8aa0666ea5e94567e6c19d9c30cceb995b5309-2","5f8aa0666ea5e94567e6c19d9c30cceb995b5309","PHxmaW1fcHJlZml4fD4KCmZyb20gbWF0aCBpbXBvcnQgcGkgYXMgUEkKCmRlZiBsaW1pdCh2YWx1ZSwgdm1pbiwgdm1heCk6CglyZXR1cm4gbWF4KG1pbih2YWx1ZSwgdm1heCksIHZtaW4pCgpkZWYgbWFwcGluZyh2YWx1ZSwgb2xkX21pbiwgb2xkX21heCwgbmV3X21pbiwgbmV3X21heCk6CglyZXR1cm4gKHZhbHVlLW9sZF9taW4pLyhvbGRfbWF4LW9sZF9taW4pKihuZXdfbWF4LW5ld19taW4pK25ld19taW4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZGVmIGRlZzJyYWQoZGVnKToKCXJldHVybiBkZWcvMTgwKlBJCgkKPHxmaW1fZW5kfD4="]
["081b947e951408bb4d7fc9877f3728ef0ff4b2f5-1","081b947e951408bb4d7fc9877f3728ef0ff4b2f5","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIGNvZGluZzogdXRmLTgKIiIiClNlbmQgcGFja2V0IHRvIHBsYWNlIGRldmljZSBpbiBiaW5hcnkgbW9kZS4KIiIiCgppbXBvcnQgc2VyaWFsCgp1cmwgPSAnL2Rldi9jdS51c2Jtb2RlbTE0MjQxJwpzID0gc2VyaWFsLnNlcmlhbF9mb3JfdXJsKHVybCwgYmF1ZHJhdGU9MTE1MjAwLCB0aW1lb3V0PTEpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcGFja2V0ID0gYnl0ZWFycmF5KGInXHhjMFx4MDJceDAwXHgwY1x4MDBnXHg5ZFx4MDhceDgwZGV2LmRlc2NceDg2R3F+XHhjMCcpCnMud3JpdGUocGFja2V0KQo8fGZpbV9lbmR8Pg=="]
["081b947e951408bb4d7fc9877f3728ef0ff4b2f5-2","081b947e951408bb4d7fc9877f3728ef0ff4b2f5","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIGNvZGluZzogdXRmLTgKIiIiClNlbmQgcGFja2V0IHRvIHBsYWNlIGRldmljZSBpbiBiaW5hcnkgbW9kZS4KIiIiCgppbXBvcnQgc2VyaWFsCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CnVybCA9ICcvZGV2L2N1LnVzYm1vZGVtMTQyNDEnCnMgPSBzZXJpYWwuc2VyaWFsX2Zvcl91cmwodXJsLCBiYXVkcmF0ZT0xMTUyMDAsIHRpbWVvdXQ9MSkKcGFja2V0ID0gYnl0ZWFycmF5KGInXHhjMFx4MDJceDAwXHgwY1x4MDBnXHg5ZFx4MDhceDgwZGV2LmRlc2NceDg2R3F+XHhjMCcpCnMud3JpdGUocGFja2V0KQo8fGZpbV9lbmR8Pg=="]
["081b947e951408bb4d7fc9877f3728ef0ff4b2f5-3","081b947e951408bb4d7fc9877f3728ef0ff4b2f5","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIGNvZGluZzogdXRmLTgKIiIiClNlbmQgcGFja2V0IHRvIHBsYWNlIGRldmljZSBpbiBiaW5hcnkgbW9kZS4KPHxmaW1faG9sZXw+CnVybCA9ICcvZGV2L2N1LnVzYm1vZGVtMTQyNDEnCnMgPSBzZXJpYWwuc2VyaWFsX2Zvcl91cmwodXJsLCBiYXVkcmF0ZT0xMTUyMDAsIHRpbWVvdXQ9MSkKcGFja2V0ID0gYnl0ZWFycmF5KGInXHhjMFx4MDJceDAwXHgwY1x4MDBnXHg5ZFx4MDhceDgwZGV2LmRlc2NceDg2R3F+XHhjMCcpCnMud3JpdGUocGFja2V0KQo8fGZpbV9zdWZmaXh8PgoiIiIKCmltcG9ydCBzZXJpYWwKCjx8ZmltX2VuZHw+"]
["081b947e951408bb4d7fc9877f3728ef0ff4b2f5-4","081b947e951408bb4d7fc9877f3728ef0ff4b2f5","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIGNvZGluZzogdXRmLTgKIiIiClNlbmQgcGFja2V0IHRvIHBsYWNlIGRldmljZSBpbiBiaW5hcnkgbW9kZS4KIiIiCgppbXBvcnQgc2VyaWFsCgp1cmwgPSAnL2Rldi9jdS51c2Jtb2RlbTE0MjQxJwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CnMgPSBzZXJpYWwuc2VyaWFsX2Zvcl91cmwodXJsLCBiYXVkcmF0ZT0xMTUyMDAsIHRpbWVvdXQ9MSkKcGFja2V0ID0gYnl0ZWFycmF5KGInXHhjMFx4MDJceDAwXHgwY1x4MDBnXHg5ZFx4MDhceDgwZGV2LmRlc2NceDg2R3F+XHhjMCcpCnMud3JpdGUocGFja2V0KQo8fGZpbV9lbmR8Pg=="]
["2677c0fb855a33fcf20c98e977c6606b1b8286a3-1","2677c0fb855a33fcf20c98e977c6606b1b8286a3",{"$cut":{"chars":27052,"head":"PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMSBEZWVwTWluZCBUZWNobm9sb2dpZXMgTGltaXRlZC4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiIiIkJ1aWxkZXJzIGZvciB2aWRlbyBkYXRhc2V0cy4iIiIKCmltcG9ydCBhYmMKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCBjb3B5CmltcG9ydCBlbnVtCmZyb20gdHlwaW5nIGltcG9ydCBBbnksIENhbGxhYmxlLCBEaWN0LCBMaXN0LCBPcHRpb25hbCwgVHVwbGUsIFVuaW9uCgppbXBvcnQgdGVuc29yZmxvdyBhcyB0ZgoKCiMgQ29tbW9uIHR5cGVzLgpGZWF0dXJlc0RpY3QgPSBEaWN0W3N0ciwgdGYuVGVuc29yXQpQYXJzZXIgPSBDYWxsYWJsZVtbdGYuVGVuc29yXSwgRmVhdHVyZXNEaWN0XQpQcm9jZXNzb3IgPSBDYWxsYWJsZVtbRmVhdHVyZXNEaWN0XSwgRmVhdHVyZXNEaWN0XQpGZWF0dXJlUHJvY2Vzc29yID0gQ2FsbGFibGVbW3RmLlRlbnNvcl0sIHRmLlRlbnNvcl0KUHJvY2Vzc29yU3RhdGUgPSBEaWN0W3N0ciwgQW55XQpTdGF0ZWZ1bFByb2Nlc3NvciA9IENhbGxhYmxlW1tGZWF0dXJlc0RpY3QsIFByb2Nlc3NvclN0YXRlXSwgRmVhdHVyZXNEaWN0XQpTdGF0ZWZ1bEZlYXR1cmVQcm9jZXNzb3IgPSBDYWxsYWJsZVtbdGYuVGVuc29yLCBQcm9jZXNzb3JTdGF0ZV0sIHRmLlRlbnNvcl0KRmlsdGVyRm4gPSBDYWxsYWJsZVtbRmVhdHVyZXNEaWN0XSwgdGYuVGVuc29yXSAgIyBCb29sZWFuIHRlbnNvciBvZiBzaGFwZSAoKS4KCiMgRGVmYXVsdCBuYW1lIG9mIGZlYXR1cmVzIGZvciBlYWNoIG1vZGFsaXR5IGluIGBGZWF0dXJlc0RpY3RgLgojIFVzZXIgc2hvdWxkIHJlZmVyZW5jZSB0aG9zZSB2aWEgdmFyaWFibGUgYW5kIG5vdCBzdHJpbmcgZGlyZWN0bHkuCkFVRElPX0ZFQVRVUkVfTkFNRSA9ICdhdWRpbycKRkxPV19GRUFUVVJFX05BTUUgPSAnZmxvdycKSU1BR0VfRkVBVFVSRV9OQU1FID0gJ2ltYWdlJwpLRVlfRkVBVFVSRV9OQU1FID0gJ2tleScKTEFCRUxfSU5ERVhfRkVBVFVSRV9OQU1FID0gJ2xhYmVsJwpMQUJFTF9OQU1FX0ZFQVRVUkVfTkFNRSA9ICdsYWJlbF9uYW1lJwpURVhUX0lORElDRVNfRkVBVFVSRV9OQU1FID0gJ3RleHRfaW5kaWNlcycKVEVYVF9GRUFUVVJFX05BTUUgPSAndGV4dCcKCgpjbGFzcyBQaGFzZShlbnVtLkVudW0pOgogICIiIlBoYXNlcyBvZiB0aGUgZGF0YSBwcm9jZXNzaW5nIGdyYXBoLiIiIgogIFJFQUQgPSBlbnVtLmF1dG8oKQogIFBBUlNFID0gZW51bS5hdXRvKCkKICBTQU1QTEUgPSBlbnVtLmF1dG8oKQogIERFQ09ERSA9IGVudW0uYXV0bygpCiAgUFJFUFJPQ0VTUyA9IGVudW0uYXV0bygpCiAgUE9TVFBST0NFU1MgPSBlbnVtLmF1dG8oKQoKCmNsYXNzIFJhd0Zvcm1hdChlbnVtLkVudW0pOgogICIiIlN1cHBvcnRlZCBmb3JtYXRzIG9mIHJhdyBkYXRhLiIiIgogIFRGX0VYQU1QTEUgPSBlbnVtLmF1dG8oKQogIFRGX1NFUVVFTkNFX0VYQU1QTEUgPSBlbnVtLmF1dG8oKQoKCmNsYXNzIEJhc2VQYXJzZXJCdWlsZGVyKGFiYy5BQkMpOgogICIiIkJ1aWxkZXIgZm9yIHRoZSBwYXJzZXIgZnVuY3Rpb24uCgogIFRoZSBwYXJzZSBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBwcm9jZXNzIGEgYHRmLlRlbnNvcmAgd2l0aCB0aGUgYnl0ZXMgb2YgYQogIHJhdyBkYXRhIHJlcHJlc2VudGF0aW9uIGludG8gYSBmZWF0dXJlcyBkaWN0aW9uYXJ5LiBUaGUgZGljdGlvbmFyeSBzaG91bGQga2VlcAogIGZlYXR1cmVzIGluIHRoZWlyIHJhd2VzdCBmb3JtYXQsIGFzIHRoZSBkZWNvZGUgZnVuY3Rpb24gd2lsbCBiZSByZXNwb25zaWJsZQogIGZvciBwYXJzaW5nIHRob3NlIHRvIHVzYWJsZSBmb3JtYXRzLCBoZW5jZSBhdm9pZGluZyB0byBkZWNvZGUgbW9yZSB0aGFuCiAgbmVjZXNzYXJ5LgoKICBVc2FnZToKCiAgYGBgcHl0aG9uCiAgcGFyc2VyX2J1aWxkZXIgPSBDaGlsZENsYXNzUGFyc2VyQnVpbGRlcigpCiAgcGFyc2VfZm4gPSAocGFyc2VyX2J1aWxkZXIKICAgICAgICAgICAgICAucGFyc2VfZmVhdHVyZSgnaW1hZ2UvZW5jb2RlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGYuaW8uRml4ZWRMZW5TZXF1ZW5jZUZlYXR1cmUoKCksIGR0eXBlPXRmLnN0cmluZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1BR0VfRkVBVFVSRV9OQU1FKQogICAgICAgICAgICAgIC5wYXJzZV9mZWF0dXJlKCdXQVZFRk9STS9mZWF0dXJlL2Zsb2F0cycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGYuaW8uVmFyTGVuRmVhdHVyZShkdHlwZT10Zi5mbG9hdDMyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVURJT19GRUFUVVJFX05BTUUpCiAgICAgICAgICAgICAgLnBhcnNlX2ZlYXR1cmUoJ215X3RleHRfZmVhdHVyZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGYuaW8uVmFyTGVuRmVhdHVyZShkdHlwZT10Zi5zdHJpbmcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFWFRfRkVBVFVSRV9OQU1FLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkX2NsYXNzX2FyZz00MikgICMgQXJndW1lbnQgZm9yIGNoaWxkIGNsYXNz"}}]
["2677c0fb855a33fcf20c98e977c6606b1b8286a3-2","2677c0fb855a33fcf20c98e977c6606b1b8286a3",{"$cut":{"chars":30112,"head":"PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMSBEZWVwTWluZCBUZWNobm9sb2dpZXMgTGltaXRlZC4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiIiIkJ1aWxkZXJzIGZvciB2aWRlbyBkYXRhc2V0cy4iIiIKCmltcG9ydCBhYmMKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCBjb3B5CmltcG9ydCBlbnVtCmZyb20gdHlwaW5nIGltcG9ydCBBbnksIENhbGxhYmxlLCBEaWN0LCBMaXN0LCBPcHRpb25hbCwgVHVwbGUsIFVuaW9uCgppbXBvcnQgdGVuc29yZmxvdyBhcyB0ZgoKCiMgQ29tbW9uIHR5cGVzLgpGZWF0dXJlc0RpY3QgPSBEaWN0W3N0ciwgdGYuVGVuc29yXQpQYXJzZXIgPSBDYWxsYWJsZVtbdGYuVGVuc29yXSwgRmVhdHVyZXNEaWN0XQpQcm9jZXNzb3IgPSBDYWxsYWJsZVtbRmVhdHVyZXNEaWN0XSwgRmVhdHVyZXNEaWN0XQpGZWF0dXJlUHJvY2Vzc29yID0gQ2FsbGFibGVbW3RmLlRlbnNvcl0sIHRmLlRlbnNvcl0KUHJvY2Vzc29yU3RhdGUgPSBEaWN0W3N0ciwgQW55XQpTdGF0ZWZ1bFByb2Nlc3NvciA9IENhbGxhYmxlW1tGZWF0dXJlc0RpY3QsIFByb2Nlc3NvclN0YXRlXSwgRmVhdHVyZXNEaWN0XQpTdGF0ZWZ1bEZlYXR1cmVQcm9jZXNzb3IgPSBDYWxsYWJsZVtbdGYuVGVuc29yLCBQcm9jZXNzb3JTdGF0ZV0sIHRmLlRlbnNvcl0KRmlsdGVyRm4gPSBDYWxsYWJsZVtbRmVhdHVyZXNEaWN0XSwgdGYuVGVuc29yXSAgIyBCb29sZWFuIHRlbnNvciBvZiBzaGFwZSAoKS4KCiMgRGVmYXVsdCBuYW1lIG9mIGZlYXR1cmVzIGZvciBlYWNoIG1vZGFsaXR5IGluIGBGZWF0dXJlc0RpY3RgLgojIFVzZXIgc2hvdWxkIHJlZmVyZW5jZSB0aG9zZSB2aWEgdmFyaWFibGUgYW5kIG5vdCBzdHJpbmcgZGlyZWN0bHkuCkFVRElPX0ZFQVRVUkVfTkFNRSA9ICdhdWRpbycKRkxPV19GRUFUVVJFX05BTUUgPSAnZmxvdycKSU1BR0VfRkVBVFVSRV9OQU1FID0gJ2ltYWdlJwpLRVlfRkVBVFVSRV9OQU1FID0gJ2tleScKTEFCRUxfSU5ERVhfRkVBVFVSRV9OQU1FID0gJ2xhYmVsJwpMQUJFTF9OQU1FX0ZFQVRVUkVfTkFNRSA9ICdsYWJlbF9uYW1lJwpURVhUX0lORElDRVNfRkVBVFVSRV9OQU1FID0gJ3RleHRfaW5kaWNlcycKVEVYVF9GRUFUVVJFX05BTUUgPSAndGV4dCcKCgpjbGFzcyBQaGFzZShlbnVtLkVudW0pOgogICIiIlBoYXNlcyBvZiB0aGUgZGF0YSBwcm9jZXNzaW5nIGdyYXBoLiIiIgogIFJFQUQgPSBlbnVtLmF1dG8oKQogIFBBUlNFID0gZW51bS5hdXRvKCkKICBTQU1QTEUgPSBlbnVtLmF1dG8oKQogIERFQ09ERSA9IGVudW0uYXV0bygpCiAgUFJFUFJPQ0VTUyA9IGVudW0uYXV0bygpCiAgUE9TVFBST0NFU1MgPSBlbnVtLmF1dG8oKQoKCmNsYXNzIFJhd0Zvcm1hdChlbnVtLkVudW0pOgogICIiIlN1cHBvcnRlZCBmb3JtYXRzIG9mIHJhdyBkYXRhLiIiIgogIFRGX0VYQU1QTEUgPSBlbnVtLmF1dG8oKQogIFRGX1NFUVVFTkNFX0VYQU1QTEUgPSBlbnVtLmF1dG8oKQoKCmNsYXNzIEJhc2VQYXJzZXJCdWlsZGVyKGFiYy5BQkMpOgogICIiIkJ1aWxkZXIgZm9yIHRoZSBwYXJzZXIgZnVuY3Rpb24uCgogIFRoZSBwYXJzZSBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBwcm9jZXNzIGEgYHRmLlRlbnNvcmAgd2l0aCB0aGUgYnl0ZXMgb2YgYQogIHJhdyBkYXRhIHJlcHJlc2VudGF0aW9uIGludG8gYSBmZWF0dXJlcyBkaWN0aW9uYXJ5LiBUaGUgZGljdGlvbmFyeSBzaG91bGQga2VlcAogIGZlYXR1cmVzIGluIHRoZWlyIHJhd2VzdCBmb3JtYXQsIGFzIHRoZSBkZWNvZGUgZnVuY3Rpb24gd2lsbCBiZSByZXNwb25zaWJsZQogIGZvciBwYXJzaW5nIHRob3NlIHRvIHVzYWJsZSBmb3JtYXRzLCBoZW5jZSBhdm9pZGluZyB0byBkZWNvZGUgbW9yZSB0aGFuCiAgbmVjZXNzYXJ5LgoKICBVc2FnZToKCiAgYGBgcHl0aG9uCiAgcGFyc2VyX2J1aWxkZXIgPSBDaGlsZENsYXNzUGFyc2VyQnVpbGRlcigpCiAgcGFyc2VfZm4gPSAocGFyc2VyX2J1aWxkZXIKICAgICAgICAgICAgICAucGFyc2VfZmVhdHVyZSgnaW1hZ2UvZW5jb2RlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGYuaW8uRml4ZWRMZW5TZXF1ZW5jZUZlYXR1cmUoKCksIGR0eXBlPXRmLnN0cmluZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1BR0VfRkVBVFVSRV9OQU1FKQogICAgICAgICAgICAgIC5wYXJzZV9mZWF0dXJlKCdXQVZFRk9STS9mZWF0dXJlL2Zsb2F0cycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGYuaW8uVmFyTGVuRmVhdHVyZShkdHlwZT10Zi5mbG9hdDMyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVURJT19GRUFUVVJFX05BTUUpCiAgICAgICAgICAgICAgLnBhcnNlX2ZlYXR1cmUoJ215X3RleHRfZmVhdHVyZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGYuaW8uVmFyTGVuRmVhdHVyZShkdHlwZT10Zi5zdHJpbmcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFWFRfRkVBVFVSRV9OQU1FLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkX2NsYXNzX2FyZz00MikgICMgQXJndW1lbnQgZm9yIGNoaWxkIGNsYXNz"}}]
["2677c0fb855a33fcf20c98e977c6606b1b8286a3-3","2677c0fb855a33fcf20c98e977c6606b1b8286a3","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMSBEZWVwTWluZCBUZWNobm9sb2dpZXMgTGltaXRlZC4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojCiMgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQo8fGZpbV9lbmR8Pg=="]
["2677c0fb855a33fcf20c98e977c6606b1b8286a3-4","2677c0fb855a33fcf20c98e977c6606b1b8286a3","PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMSBEZWVwTWluZCBUZWNobm9sb2dpZXMgTGltaXRlZC4KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiIiIkJ1aWxkZXJzIGZvciB2aWRlbyBkYXRhc2V0cy4iIiIKCmltcG9ydCBhYmMKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCBjb3B5CmltcG9ydCBlbnVtCmZyb20gdHlwaW5nIGltcG9ydCBBbnksIENhbGxhYmxlLCBEaWN0LCBMaXN0LCBPcHRpb25hbCwgVHVwbGUsIFVuaW9uCgppbXBvcnQgdGVuc29yZmxvdyBhcyB0ZgoKCiMgQ29tbW9uIHR5cGVzLgpGZWF0dXJlc0RpY3QgPSBEaWN0W3N0ciwgdGYuVGVuc29yXQpQYXJzZXIgPSBDYWxsYWJsZVtbdGYuVGVuc29yXSwgRmVhdHVyZXNEaWN0XQpQcm9jZXNzb3IgPSBDYWxsYWJsZVtbRmVhdHVyZXNEaWN0XSwgRmVhdHVyZXNEaWN0XQpGZWF0dXJlUHJvY2Vzc29yID0gQ2FsbGFibGVbW3RmLlRlbnNvcl0sIHRmLlRlbnNvcl0KUHJvY2Vzc29yU3RhdGUgPSBEaWN0W3N0ciwgQW55XQpTdGF0ZWZ1bFByb2Nlc3NvciA9IENhbGxhYmxlW1tGZWF0dXJlc0RpY3QsIFByb2Nlc3NvclN0YXRlXSwgRmVhdHVyZXNEaWN0XQpTdGF0ZWZ1bEZlYXR1cmVQcm9jZXNzb3IgPSBDYWxsYWJsZVtbdGYuVGVuc29yLCBQcm9jZXNzb3JTdGF0ZV0sIHRmLlRlbnNvcl0KRmlsdGVyRm4gPSBDYWxsYWJsZVtbRmVhdHVyZXNEaWN0XSwgdGYuVGVuc29yXSAgIyBCb29sZWFuIHRlbnNvciBvZiBzaGFwZSAoKS4KCiMgRGVmYXVsdCBuYW1lIG9mIGZlYXR1cmVzIGZvciBlYWNoIG1vZGFsaXR5IGluIGBGZWF0dXJlc0RpY3RgLgojIFVzZXIgc2hvdWxkIHJlZmVyZW5jZSB0aG9zZSB2aWEgdmFyaWFibGUgYW5kIG5vdCBzdHJpbmcgZGlyZWN0bHkuCkFVRElPX0ZFQVRVUkVfTkFNRSA9ICdhdWRpbycKRkxPV19GRUFUVVJFX05BTUUgPSAnZmxvdycKSU1BR0VfRkVBVFVSRV9OQU1FID0gJ2ltYWdlJwpLRVlfRkVBVFVSRV9OQU1FID0gJ2tleScKTEFCRUxfSU5ERVhfRkVBVFVSRV9OQU1FID0gJ2xhYmVsJwpMQUJFTF9OQU1FX0ZFQVRVUkVfTkFNRSA9ICdsYWJlbF9uYW1lJwpURVhUX0lORElDRVNfRkVBVFVSRV9OQU1FID0gJ3RleHRfaW5kaWNlcycKVEVYVF9GRUFUVVJFX05BTUUgPSAndGV4dCcKCgpjbGFzcyBQaGFzZShlbnVtLkVudW0pOgogICIiIlBoYXNlcyBvZiB0aGUgZGF0YSBwcm9jZXNzaW5nIGdyYXBoLiIiIgogIFJFQUQgPSBlbnVtLmF1dG8oKQogIFBBUlNFID0gZW51bS5hdXRvKCkKICBTQU1QTEUgPSBlbnVtLmF1dG8oKQogIERFQ09ERSA9IGVudW0uYXV0bygpCiAgUFJFUFJPQ0VTUyA9IGVudW0uYXV0bygpCiAgUE9TVFBST0NFU1MgPSBlbnVtLmF1dG8oKQoKCmNsYXNzIFJhd0Zvcm1hdChlbnVtLkVudW0pOgogICIiIlN1cHBvcnRlZCBmb3JtYXRzIG9mIHJhdyBkYXRhLiIiIgogIFRGX0VYQU1QTEUgPSBlbnVtLmF1dG8oKQogIFRGX1NFUVVFTkNFX0VYQU1QTEUgPSBlbnVtLmF1dG8oKQoKCmNsYXNzIEJhc2VQYXJzZXJCdWlsZGVyKGFiYy5BQkMpOgogICIiIkJ1aWxkZXIgZm9yIHRoZSBwYXJzZXIgZnVuY3Rpb24uCgogIFRoZSBwYXJzZSBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBwcm9jZXNzIGEgYHRmLlRlbnNvcmAgd2l0aCB0aGUgYnl0ZXMgb2YgYQogIHJhdyBkYXRhIHJlcHJlc2VudGF0aW9uIGludG8gYSBmZWF0dXJlcyBkaWN0aW9uYXJ5LiBUaGUgZGljdGlvbmFyeSBzaG91bGQga2VlcAogIGZlYXR1cmVzIGluIHRoZWlyIHJhd2VzdCBmb3JtYXQsIGFzIHRoZSBkZWNvZGUgZnVuY3Rpb24gd2lsbCBiZSByZXNwb25zaWJsZQogIGZvciBwYXJzaW5nIHRob3NlIHRvIHVzYWJsZSBmb3JtYXRzLCBoZW5jZSBhdm9pZGluZyB0byBkZWNvZGUgbW9yZSB0aGFuCiAgbmVjZXNzYXJ5LgoKICBVc2FnZToKCiAgYGBgcHl0aG9uCiAgcGFyc2VyX2J1aWxkZXIgPSBDaGlsZENsYXNzUGFyc2VyQnVpbGRlcigpCiAgcGFyc2VfZm4gPSAocGFyc2VyX2J1aWxkZXIKICAgICAgICAgICAgICAucGFyc2VfZmVhdHVyZSgnaW1hZ2UvZW5jb2RlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGYuaW8uRml4ZWRMZW5TZXF1ZW5jZUZlYXR1cmUoKCksIGR0eXBlPXRmLnN0cmluZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1BR0VfRkVBVFVSRV9OQU1FKQogICAgICAgICAgICAgIC5wYXJzZV9mZWF0dXJlKCdXQVZFRk9STS9mZWF0dXJlL2Zsb2F0cycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGYuaW8uVmFyTGVuRmVhdHVyZShkdHlwZT10Zi5mbG9hdDMyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVURJT19GRUFUVVJFX05BTUUpCiAgICAgICAgICAgICAgLnBhcnNlX2ZlYXR1cmUoJ215X3RleHRfZmVhdHVyZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGYuaW8uVmFyTGVuRmVhdHVyZShkdHlwZT10Zi5zdHJpbmcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFWFRfRkVBVFVSRV9OQU1FLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkX2NsYXNzX2FyZz00MikgICMgQXJndW1lbnQgZm9yIGNoaWxkIGNsYXNzLgogICAgICAgICAgICAgIC5wYXJzZV9mZWF0dXJlKCdteV9vd25fbW9kYWxpdHlfZmVhdHVyZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGYuaW8uRml4ZWRMZW5GZWF0dXJlKGR0eXBlPXRmLmludDMyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXlfY2hvc2VuX25hbWUnKQogICAgICAgICAgICAgIC5idWlsZCgpKQoKICByYXdfZGF0YSA9IHRmLlRlbnNvcihyYXdfZGF0YV9ieXRlcywgZHR5cGU9dGYuc3RyaW5nKQogIGZlYXR1cmVzX2RpY3QgPSBwYXJzZV9mbihyYXdfZGF0YSkKCiAgIyBmZWF0dXJlc19kaWN0OiB7CiAgIyAgICAgJ2ltYWdlJzogdGYuVGVuc29yKGJ5dGVzX3JlcHJlc2VudGF0aW9uX29mX2ltYWdlKSwKICAjICAgICAnYXVkaW8nOiB0Zi5TcGFyc2VUZW5zb3IoYXVkaW9fZmxvYXRzKSwKICAjICAgICAndGV4dCc6IHRmLlNwYXJzZVRlbnNvcih0ZXh0X2FzX3N0cmluZyksCiAgIyAgICAgJ215X2Nob3Nlbl9uYW1lJzogdGYuVGVuc29yKGludF92YWx1ZSkKICAjIH0KICBgYGAKCiAgTmFtZXMgaW4gdGhlIGdlbmVyYXRlZCBmZWF0dXJlcyBkaWN0aW9uYXJ5IChgb3V0cHV0X25hbWVgKSBzaG91bGQgYmUgdGhlIHNhbWUKICBmb3IgYSBnaXZlbiBtb2RhbGl0eSAoZXZlbiBpZiBpbnB1dCBuYW1lcyBhcmUgZGlmZmVyZW50KSwgYXMgbG9uZyBhcyB0aGV5IGhhdmUKICB0aGUgc2FtZSBtZWFuaW5nLCBzbyBmb2xsb3dpbmcgcHJvY2Vzc2luZyBjb2RlIGNhbiBiZSByZXVzZWQgZWFzaWx5IGJ5IHVzaW5nCiAgdGhlIHNhbWUgYGZlYXR1cmVfbmFtZWAgaW4gcHJvY2Vzc29ycyAoZS5nLiBgYnVpbGRlcnMuSU1BR0VgIGNhbiBiZSB1c2VkIGFzCiAgYG91dHB1dF9uYW1lYCBmb3IgZnJhbWVzIGZlYXR1cmVzIGluZGVwZW5kZW50bHkgb2YgaG93IHRoZXkgYXJlIHN0b3JlZCBpbiB0aGUKICBpbnB1dCBzZXJpYWxpemVkIGV4YW1wbGUpLgogICIiIgoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIHBhcnNlX2ZlYXR1cmUoc2VsZiwKICAgICAgICAgICAgICAgICAgICBmZWF0dXJlX25hbWU6IHN0ciwKICAgICAgICAgICAgICAgICAgICBmZWF0dXJlX3R5cGU6IFVuaW9uW3RmLmlvLlZhckxlbkZlYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Zi5pby5GaXhlZExlbkZlYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Zi5pby5GaXhlZExlblNlcXVlbmNlRmVhdHVyZV0sCiAgICAgICAgICAgICAgICAgICAgb3V0cHV0X25hbWU6IE9wdGlvbmFsW3N0cl0gPSBOb25lLAogICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKSAtPiAnQmFzZVBhcnNlckJ1aWxkZXInOgogICAgIiIiUGFyc2VzIHRoZSBnaXZlbiBmZWF0dXJlIHdoZW4gcGFyc2luZyB0aGUgcmF3IGRhdGEuCgogICAgQXJnczoKICAgICAgZmVhdHVyZV9uYW1lOiBOYW1lIG9mIHRoZSBmZWF0dXJlIHRvIGJlIHBhcnNlZCAoaW4gdGhlIHJhdyBkYXRhKS4KICAgICAgZmVhdHVyZV90eXBlOiBUeXBlIG9mIGB0Zi5UZW5zb3JgIHRvIGJlIGdlbmVyYXRlZCBmcm9tIHBhcnNpbmcgdGhlIGdpdmVuCiAgICAgICAgZmVhdHVyZS4gVGhlIHR5cGUgd2lsbCBkZXBlbmQgb24gdGhlIHN0cnVjdHVyZSBvZiB0aGUgcmF3IGRhdGEuIEUuZy4KICAgICAgICBhIHNlcXVlbmNlIG9mIGZyYW1lcyAobGlzdCB3aXRoIG9uZSBKUEVHIGFzIGJ5dGVzIHN0cmluZykgc2hvdWxkIGJlCiAgICAgICAgYHRmLmlvLkZpeGVkTGVuU2VxdWVuY2VGZWF0dXJlYCwgd2hpbGUgYSBzaW5nbGUgZmVhdHVyZSBvZiB2YXJpYWJsZQogICAgICAgIGxlbmd0aCAoYXVkaW8pIHNob3VsZCBiZSBgdGYuaW8uVmFyTGVuRmVhdHVyZWAuCiAgICAgIG91dHB1dF9uYW1lOiBOYW1lIG9mIHRoZSBmZWF0dXJlIGluIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeS4gVGhpcyBzaG91bGQKICAgICAgICBiZSBhIG1lYW5pbmdmdWwgbmFtZSBhbmQgcHJlZmVyYWJseSB0aGUgc2FtZSBhY3Jvc3MgZGlmZmVyZW50IGRhdGFzZXRzLAogICAgICAgIHNvIGxhdGVyIHByb2Nlc3NpbmcgZnVuY3Rpb25zIGNhbiBiZSByZXVzZWQgZWFzaWx5LiBOYW1lIHNob3VsZCBiZQogICAgICAgIHVuaXF1ZSBvdmVyIGFsbCBmZWF0dXJlcy4gSWYgbm8gYG91dHB1dF9uYW1lYCBpcyBwcm92aWRlZCwKICAgICAgICBgZmVhdHVyZV9uYW1lYCBpcyB1c2VkLgogICAgICAqKmt3YXJnczogTmFtZWQgYXJndW1lbnRzIGV4dGVuZGVkIGJ5IHRoZSBjaGlsZCBjbGFzcy4KCiAgICBSZXR1cm5zOgogICAgICBUaGlzIGluc3RhbmNlIG9mIHRoZSBgQmFzZVBhcnNlckJ1aWxkZXJgLgogICAgIiIiCgogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgX3BhcnNlX2ZuKHNlbGYsIHJhd19kYXRhOiB0Zi5UZW5zb3IpIC0+IEZlYXR1cmVzRGljdDoKICAgICIiIkNvbnZlcnRzIGJ5dGVzIG9mIHJhdyBkYXRhIHRvIGEgZmVhdHVyZXMgZGljdGlvbmFyeS4KCiAgICBBcmdzOgogICAgICByYXdfZGF0YTogYHRmLlRlbnNvcmAgb2YgYnl0ZXMgKHN0cmluZykuCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBSZXR1cm5zOgogICAgICBUaGUgZmVhdHVyZXMgZGljdGlvbmFyeSBvYnRhaW5lZCBmcm9tIHBhcnNpbmcgdGhlIHJhdyBkYXRhLgogICAgIiIiCgo8fGZpbV9lbmR8Pg=="]
["8460eb341caf497e0f3426fe0b3960f3713c2e37-1","8460eb341caf497e0f3426fe0b3960f3713c2e37","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IHR1cnRsZQp0ID0gdHVydGxlLlR1cnRsZSgpCnQuY29sb3IoJ3JlZCcpCnQuc2hhcGUoJ2NpcmNsZScpCjx8ZmltX2VuZHw+"]
["8460eb341caf497e0f3426fe0b3960f3713c2e37-2","8460eb341caf497e0f3426fe0b3960f3713c2e37","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8Pgp0LnBlbmNvbG9yKCdibHVlJykKdC5wZW5zaXplKDUpCnQuY2lyY2xlKDEwMCkKPHxmaW1fc3VmZml4fD4KaW1wb3J0IHR1cnRsZQp0ID0gdHVydGxlLlR1cnRsZSgpCnQuY29sb3IoJ3JlZCcpCnQuc2hhcGUoJ2NpcmNsZScpCjx8ZmltX2VuZHw+"]
["8460eb341caf497e0f3426fe0b3960f3713c2e37-3","8460eb341caf497e0f3426fe0b3960f3713c2e37","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHR1cnRsZQo8fGZpbV9ob2xlfD4KdC5wZW5zaXplKDUpCnQuY2lyY2xlKDEwMCkKPHxmaW1fc3VmZml4fD4KdCA9IHR1cnRsZS5UdXJ0bGUoKQp0LmNvbG9yKCdyZWQnKQp0LnNoYXBlKCdjaXJjbGUnKQp0LnBlbmNvbG9yKCdibHVlJykKPHxmaW1fZW5kfD4="]
["26fd3fc107d5c1ad705dc6854898a8d8a404a2f1-1","26fd3fc107d5c1ad705dc6854898a8d8a404a2f1","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAucnN0Y2xvdGggaW1wb3J0IFJzdENsb3RoICAjIG5vcWE6RjQwMQpmcm9tIC50YWJsZSBpbXBvcnQgSHRtbFRhYmxlLCBUYWJsZURhdGEgICMgbm9xYTpGNDAxCjx8ZmltX2VuZHw+"]
["26fd3fc107d5c1ad705dc6854898a8d8a404a2f1-2","26fd3fc107d5c1ad705dc6854898a8d8a404a2f1","PHxmaW1fcHJlZml4fD4KZnJvbSAucnN0Y2xvdGggaW1wb3J0IFJzdENsb3RoICAjIG5vcWE6RjQwMQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gLnRhYmxlIGltcG9ydCBIdG1sVGFibGUsIFRhYmxlRGF0YSAgIyBub3FhOkY0MDEKPHxmaW1fZW5kfD4="]
["26fd3fc107d5c1ad705dc6854898a8d8a404a2f1-3","26fd3fc107d5c1ad705dc6854898a8d8a404a2f1","PHxmaW1fcHJlZml4fD4KZnJvbSAucnN0Y2xvdGggaW1wb3J0IFJzdENsb3RoICAjIG5vcWE6RjQwMQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gLnRhYmxlIGltcG9ydCBIdG1sVGFibGUsIFRhYmxlRGF0YSAgIyBub3FhOkY0MDEKPHxmaW1fZW5kfD4="]
["26fd3fc107d5c1ad705dc6854898a8d8a404a2f1-4","26fd3fc107d5c1ad705dc6854898a8d8a404a2f1","PHxmaW1fcHJlZml4fD4KZnJvbSAucnN0Y2xvdGggaW1wb3J0IFJzdENsb3RoICAjIG5vcWE6RjQwMQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gLnRhYmxlIGltcG9ydCBIdG1sVGFibGUsIFRhYmxlRGF0YSAgIyBub3FhOkY0MDEKPHxmaW1fZW5kfD4="]
["26fd3fc107d5c1ad705dc6854898a8d8a404a2f1-5","26fd3fc107d5c1ad705dc6854898a8d8a404a2f1","PHxmaW1fcHJlZml4fD4KZnJvbSAucnN0Y2xvdGggaW1wb3J0IFJzdENsb3RoICAjIG5vcWE6RjQwMQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gLnRhYmxlIGltcG9ydCBIdG1sVGFibGUsIFRhYmxlRGF0YSAgIyBub3FhOkY0MDEKPHxmaW1fZW5kfD4="]
["e49b6fee7c48c190c35c28461988c934adeeda41-1","e49b6fee7c48c190c35c28461988c934adeeda41","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNxbGFsY2hlbXkudHlwZXMgYXMgdHlwZXMKCgpjbGFzcyBHZW9tZXRyeSh0eXBlcy5Vc2VyRGVmaW5lZFR5cGUpOgogICAgZGVmIGdldF9jb2xfc3BlYyhzZWxmLCAqKmt3KToKICAgICAgICByZXR1cm4gIkdFT01FVFJZIgoKCmNsYXNzIEdlb2dyYXBoeSh0eXBlcy5Vc2VyRGVmaW5lZFR5cGUpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgZ2V0X2NvbF9zcGVjKHNlbGYsICoqa3cpOgogICAgICAgIHJldHVybiAiR0VPR1JBUEhZIgo8fGZpbV9lbmR8Pg=="]
["e49b6fee7c48c190c35c28461988c934adeeda41-2","e49b6fee7c48c190c35c28461988c934adeeda41","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNxbGFsY2hlbXkudHlwZXMgYXMgdHlwZXMKCgpjbGFzcyBHZW9tZXRyeSh0eXBlcy5Vc2VyRGVmaW5lZFR5cGUpOgo8fGZpbV9ob2xlfD4KY2xhc3MgR2VvZ3JhcGh5KHR5cGVzLlVzZXJEZWZpbmVkVHlwZSk6CiAgICBkZWYgZ2V0X2NvbF9zcGVjKHNlbGYsICoqa3cpOgogICAgICAgIHJldHVybiAiR0VPR1JBUEhZIgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIGdldF9jb2xfc3BlYyhzZWxmLCAqKmt3KToKICAgICAgICByZXR1cm4gIkdFT01FVFJZIgoKCjx8ZmltX2VuZHw+"]
["e49b6fee7c48c190c35c28461988c934adeeda41-3","e49b6fee7c48c190c35c28461988c934adeeda41","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNxbGFsY2hlbXkudHlwZXMgYXMgdHlwZXMKCgpjbGFzcyBHZW9tZXRyeSh0eXBlcy5Vc2VyRGVmaW5lZFR5cGUpOgogICAgZGVmIGdldF9jb2xfc3BlYyhzZWxmLCAqKmt3KToKICAgICAgICByZXR1cm4gIkdFT01FVFJZIgoKCmNsYXNzIEdlb2dyYXBoeSh0eXBlcy5Vc2VyRGVmaW5lZFR5cGUpOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgZ2V0X2NvbF9zcGVjKHNlbGYsICoqa3cpOgogICAgICAgIHJldHVybiAiR0VPR1JBUEhZIgo8fGZpbV9lbmR8Pg=="]
["e49b6fee7c48c190c35c28461988c934adeeda41-4","e49b6fee7c48c190c35c28461988c934adeeda41","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNxbGFsY2hlbXkudHlwZXMgYXMgdHlwZXMKCgpjbGFzcyBHZW9tZXRyeSh0eXBlcy5Vc2VyRGVmaW5lZFR5cGUpOgogICAgZGVmIGdldF9jb2xfc3BlYyhzZWxmLCAqKmt3KToKICAgICAgICByZXR1cm4gIkdFT01FVFJZIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgoKY2xhc3MgR2VvZ3JhcGh5KHR5cGVzLlVzZXJEZWZpbmVkVHlwZSk6CiAgICBkZWYgZ2V0X2NvbF9zcGVjKHNlbGYsICoqa3cpOgo8fGZpbV9lbmR8Pg=="]
["f2b95d29a0708c631e1d6799f71658d8ddf7ef9e-1","f2b95d29a0708c631e1d6799f71658d8ddf7ef9e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgc3RyaW5nCmZyb20gZGF0ZXRpbWUgaW1wb3J0ICoKZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRpbWVyCmZyb20gcmFuZG9tIGltcG9ydCAqCmltcG9ydCBsb2dnaW5nCgpmcm9tIHR3aXN0ZWQud29yZHMucHJvdG9jb2xzIGltcG9ydCBpcmMKZnJvbSB0d2lzdGVkLmludGVybmV0IGltcG9ydCBwcm90b2NvbApmcm9tIHR3aXN0ZWQuaW50ZXJuZXQgaW1wb3J0IHJlYWN0b3IKZnJvbSB0d2lzdGVkLmludGVybmV0LmVycm9yIGltcG9ydCBBbHJlYWR5Q2FsbGVkLCBBbHJlYWR5Q2FuY2VsbGVkCgppbXBvcnQgYm90dXRpbHMKCgpsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCmNsYXNzIFdvcmRXYXJNYW5hZ2VyKG9iamVjdCk6CiAgICB3d19xdWV1ZSA9IFtdCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGlyYyk6CiAgICAgICAgc2VsZi5pcmMgPSBpcmMKCiAgICBkZWYgX2dldF93YXJfYnlfbmFtZShzZWxmLCB3YXJfbmFtZSk6CiAgICAgICAgcmV0dXJuIG5leHQoKHdhciBmb3Igd2FyIGluIHNlbGYud3dfcXVldWUgaWYgd2FyLm5hbWUubG93ZXIoKSA9PSB3YXJfbmFtZS5sb3dlcigpKSwgTm9uZSkKCiAgICBkZWYgY2hlY2tfZXhpc3Rpbmdfd2FyKHNlbGYsIHdhcl9uYW1lKToKICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X3dhcl9ieV9uYW1lKHdhcl9uYW1lKSAhPSBOb25lCgogICAgZGVmIGluc2VydF9pbnRvX3dhcihzZWxmLCB3YXJfbmFtZSwgdXNlcik6CiAgICAgICAgbG9nZ2VyLmRlYnVnKCJpbnNlcnQgJXMgaW50byB3b3Jkd2FyICclcyciLCB1c2VyLCB3YXJfbmFtZSkKICAgICAgICBhd2FyID0gIHNlbGYuX2dldF93YXJfYnlfbmFtZSh3YXJfbmFtZSkKICAgICAgICBpZiBhd2FyOgogICAgICAgICAgICBsb2dnZXIuaW5mbygiQWRkaW5nICVzIC0gJXMiLCBhd2FyLm5hbWUsIHVzZXIpCiAgICAgICAgICAgIGF3YXIuYWRkX3VzZXJfdG9fd29yZHdhcih1c2VyKQogICAgICAgICAgICByZXR1cm4gVHJ1ZQoKICAgICAgICBsb2dnZXIuaW5mbygiQ291bGQgbm90IGZpbmQgd29yZHdhciAnJXMnIiwgd2FyX25hbWUpCiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZGVmIHJlbW92ZV9mcm9tX3dhcihzZWxmLCB3YXJfbmFtZSwgdXNlcik6CiAgICAgICAgbG9nZ2VyLmRlYnVnKCJyZW1vdmUgJXMgZnJvbSB3b3Jkd2FyICclcyciLCB1c2VyLCB3YXJfbmFtZSkKICAgICAgICBhd2FyID0gIHNlbGYuX2dldF93YXJfYnlfbmFtZSh3YXJfbmFtZSkKICAgICAgICBpZiBhd2FyOgogICAgICAgICAgICBsb2dnZXIuaW5mbygicmVtb3ZpbmcgJXMgLSAlcyIsIGF3YXIubmFtZSwgdXNlcikKICAgICAgICAgICAgcmV0dXJuIGF3YXIucmVtb3ZlX3VzZXJfZnJvbV93b3Jkd2FyKHVzZXIpCgogICAgICAgIGxvZ2dlci5pbmZvKCJDb3VsZCBub3QgZmluZCB3b3Jkd2FyICclcyciLCB3YXJfbmFtZSkKICAgICAgICByZXR1cm4gRmFsc2UKCgogICAgZGVmIGNyZWF0ZV93b3JkX3dhcihzZWxmLCBuYW1lLCBsZW5ndGgsIHN0YXJ0LCBwcm9tcHQpOgogICAgICAgIG5ld193dyA9IFdvcmRXYXIobmFtZSwgbGVuZ3RoLCBzdGFydCwgc2VsZiwgcHJvbXB0KQogICAgICAgIHNlbGYud3dfcXVldWUuYXBwZW5kKG5ld193dykKICAgICAgICByZXR1cm4gbmV3X3d3CgogICAgZGVmIGNhbmNlbF93b3JkX3dhcihzZWxmLCB3YXJfbmFtZSk6CiAgICAgICAgbG9nZ2VyLmRlYnVnKCJjYW5jZWwgd29yZHdhciAnJXMnIiwgd2FyX25hbWUpCiAgICAgICAgYXdhciA9IHNlbGYuX2dldF93YXJfYnlfbmFtZSh3YXJfbmFtZSkKICAgICAgICBpZiBhd2FyOgogICAgICAgICAgICBhd2FyLmNhbmNlbF93b3JkX3dhcigpCiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgbG9nZ2VyLmluZm8oIkNvdWxkIG5vdCBmaW5kIHdvcmR3YXIgJyVzJyB0byBjYW5jZWwiLCB3YXJfbmFtZSkKICAgICAgICByZXR1cm4gRmFsc2UKCgogICAgZGVmIGRvbmVfd29yZF93YXIoc2VsZiwgd29yZHdhcik6CiAgICAgICAgc2VsZi53d19xdWV1ZS5yZW1vdmUod29yZHdhcikKCgogICAgZGVmIGdldF93b3JkX3dhcl9uaWNrcyhzZWxmLCB3YXJfbmFtZSk6CiAgICAgICAgYXdhciA9IHNlbGYuX2dldF93YXJfYnlfbmFtZSh3YXJfbmFtZSkKICAgICAgICByZXR1cm4gYXdhci5uaWNrbGlzdCBpZiBhd2FyIGVsc2UgTm9uZQoKCiAgICBkZWYgZ2V0X3N0YXR1cyhzZWxmLCB1c2VyKToKIyAgICAgICAgaWYgKHNlbGYuY2hlY2tfZm9yX2RhZGR5KHVzZXIpID09IDEpOgojICAgICAgICAgICAgICAgIHNlbGYuaXJjX3NlbmRfc2F5KCJZZXMgZmF0aGVyLiIpOwogICAgICAgIGlmIGxlbihzZWxmLnd3X3F1ZXVlKSA9PSAwOgogICAgICAgICAgICBzZWxmLmlyYy5pcmNfc2VuZF9tc2codXNlciwgIlRoZXJlIGFyZSBubyBhY3RpdmUgd29yZCB3YXJzIikKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIGZvciB3dyBpbiBzZWxmLnd3X3F1ZXVlOgogICAgICAgICAgICB3dy5zdGF0dXNfd29yZF93YXIodXNlcikKCiAgICBkZWYgcmVuYW1lX3VzZXIoc2VsZiwgb2xkbmFtZSwgbmV3bmFtZSk6CiAgICAgICAgbG9nZ2VyLmluZm8oInVwZGF0aW5nIG5pY2sgY2hhbmdlIGZyb20gJXMgdG8gJXMiICxvbGRuYW1lLCBuZXduYW1lKQogICAgICAgIGZvciB3YXIgaW4gc2VsZi53d19xdWV1ZToKICAgICAgICAgICAgd2FyLnJlbmFtZV91c2VyKG9sZG5hbWUsIG5ld25hbWUpCgogICAgZGVmIGlyY19zZW5kX21lKHNlbGYsIG1lc3NhZ2UpOgogICAgICAgIHNlbGYuaXJjLmlyY19zZW5kX21lKG1lc3NhZ2UpCgogICAgZGVmIGlyY19zZW5kX3NheShzZWxmLCBtZXNzYWdlKToKICAgICAgICBzZWxmLmlyYy5pcmNfc2VuZF9zYXkobWVzc2FnZSkKCiAgICBkZWYgaXJjX3NlbmRfbXNnKHNlbGYsIHVzZXIsIG1lc3NhZ2UpOgogICAgICAgIHNlbGYuaXJjLmlyY19zZW5kX21zZyh1c2VyLnNwbGl0KCIhIilbMF0sIG1lc3NhZ2UpCgoKY2xhc3MgV29yZFdhcihvYmplY3QpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBsZW5ndGgsIHN0YXJ0LCBxdWV1ZSwgcHJvbXB0KToKICAgICAgICBsb2dnZXIuZGVidWcoIldvcmRXYXIoJXMsICVzLCAlcywgJXMpIiAlIChuYW1lLCBsZW5ndGgsIHN0YXJ0LCBwcm9tcHQpKQogICAgICAgIHNlbGYubmlja2xpc3QgPSBbXQogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICBzZWxmLnByb21wdCA9IHByb21wdAogICAgICAgIHNlbGYubGVuZ3RoID0gaW50KGxlbmd0aCkKICAgICAgICBzZWxmLnN0YXJ0ID0gaW50KHN0YXJ0KQogICAgICAgIHNlbGYudGltZWNhbGxlZCA9IGRhdGV0aW1lLnRvZGF5KCkKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIHNlbGYud2FyX3dhcm5pbmdfdGltZXIgPSByZWFjdG9yLmNhbGxMYXRlcigoc2VsZi5zdGFydCAtIDIpICogNjAsIHNlbGYud2FybmluZ193b3JkX3dhcikKICAgICAgICBzZWxmLnN0YXR1cyA9IDAKCiAgICBkZWYgd2FybmluZ193b3JkX3dhcihzZWxmKToKICAgICAgICBzZWxmLnNlbmRfbWVzc2FnZSgiV1c6ICIgKyBzZWxmLm5hbWUgKyAiIHN0YXJ0cyBpbiAyIG1pbnV0ZXMgZm9yICIgKyBib3R1dGlscy5taW51dGVzX3N0cmluZyhzZWxmLmxlbmd0aCkpCiAgICAgICAgc2VsZi5zZW5kX21lc3NhZ2UoIk9wdGlvbmFsIFByb21wdCBmb3IgdGhpcyBXVyBpczogJXMiICUgc2VsZi5wcm9tcHQpCiAgICAgICAgc2VsZi5ub3RpZnlfbmlja3MoKQoKICAgIGRlZiBzdGFydF93b3JkX3dhcihzZWxmKToKICAgICAgICAjIHNlbmQgb3V0IG1lc3NhZ2UKICAgICAgICBzZWxmLnN0YXR1cyA9IDEKICAgICAgICBzZWxmLnNlbmRfbWVzc2FnZSgKICAgICAgICAgICAgIkdPT09PT09PT09PTyEhISBXVzogIiArIHNlbGYubmFtZSArICIgZm9yICIgKyBib3R1dGlscy5taW51dGVzX3N0cmluZyhzZWxmLmxlbmd0aCkpCiAgICAgICAgc2VsZi5zZW5kX21lc3NhZ2UoIk9wdGlvbmFsIFByb21wdCBmb3IgdGhpcyBXVyBpczogJXMiICUgc2VsZi5wcm9tcHQpCiAgICAgICAgc2VsZi5ub3RpZnlfbmlja3MoKQogICAgICAgIHNlbGYudGltZXN0YXJ0ZWQgPSBkYXRldGltZS50b2RheSgpCiAgICAgICAgc2VsZi53YXJfdGltZXIgPSByZWFjdG9yLmNhbGxMYXRlcihmbG9hdChzZWxmLmxlbmd0aCkgKiA2MC4wLCBzZWxmLmZpbmlzaF93b3JkX3dhcikKCiAgICBkZWYgc3RhdHVzX3dvcmRfd2FyKHNlbGYsIHVzZXIpOgogICAgICAgIHNlbGYud3dxdWV1ZS5pcmNfc2VuZF9tc2codXNlciwgIm5hbWU6ICIgKyBzZWxmLm5hbWUpCiAgICAgICAgc2VsZi53d3F1ZXVlLmlyY19zZW5kX21zZyh1c2VyLCAibGVuZ3RoOiAiICsgYm90dXRpbHMubWludXRlc19zdHJpbmcoc2VsZi5sZW5ndGgpKQogICAgICAgIGlmIChzZWxmLnN0YXR1cyA9PSAwKToKICAgICAgICAgICAgc2VsZi53d3F1ZXVlLmlyY19zZW5kX21zZyh1c2VyLCAic3RhdHVzOiB3YWl0aW5nIikKICAgICAgICAgICAgc2VsZi53d3F1ZXVlLmlyY19zZW5kX21zZyh1c2VyLCAiY2FsbGVkIGF0OiAiICsgc2VsZi50aW1lY2FsbGVkLnN0cmZ0aW1lKCclWS0lbS0lZCAlSTolTTolUyAlcCcpKQogICAgICAgICAgICBpbnRlcnZhbCA9IHRpbWVkZWx0YShtaW51dGVzPXNlbGYuc3RhcnQpCiAgICAgICAgICAgIHRoZW4gPSBzZWxmLnRpbWVjYWxsZWQgKyBpbnRlcnZhbAogICAgICAgICAgICB0aW1lbGVmdCA9IHRoZW4gLSBkYXRldGltZS50b2RheSgpCiAgICAgICAgICAgIHNlbGYud3dxdWV1ZS5pcmNfc2VuZF9tc2codXNlciwgInRpbWUgdW50aWwgc3RhcnQ6ICVzIiAlIChib3R1dGlscy5mb3JtYXRfdGltZWRlbHRhKHRpbWVsZWZ0KSkpCgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYud3dxdWV1ZS5pcmNfc2VuZF9tc2codXNlciwgInN0YXR1czogdW5kZXJ3YXkiKQogICAgICAgICAgICBzZWxmLnd3cXVldWUuaXJjX3NlbmRfbXNnKHVzZXIsICJzdGFydGVkIGF0OiAiICsgc2VsZi50aW1lc3RhcnRlZC5zdHJmdGltZSgnJVktJW0tJWQgJUk6JU06JVMgJXAnKSkKICAgICAgICAgICAgdGltZWxlZnQgPSBzZWxmLnRpbWVzdGFydGVkICsgdGltZWRlbHRhKG1pbnV0ZXM9c2VsZi5sZW5ndGgpIC0gZGF0ZXRpbWUudG9kYXkoKQogICAgICAgICAgICBzZWxmLnd3cXVldWUuaXJjX3NlbmRfbXNnKHVzZXIsICJ0aW1lIHVudGlsIGVuZDogJXMiICUgKGJvdHV0aWxzLmZvcm1hdF90aW1lZGVsdGEodGltZWxlZnQpKSkKCiAgICAgICAgc2VsZi53d3F1ZXVlLmlyY19zZW5kX21zZyh1c2VyLCAibWVtYmVycyAoJWQpOiAlcyIgJSAobGVuKHNlbGYubmlja2xpc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgJy5qb2luKFtuaWNrLnNwbGl0KCchJylbMF0gZm9yIG5pY2sgaW4gc2VsZi5uaWNrbGlzdF0pKSkKICAgICAgICBzZWxmLnd3cXVldWUuaXJjX3NlbmRfbXNnKHVzZXIsICItLS0tLSIpCgogICAgZGVmIGZpbmlzaF93b3JkX3dhcihzZWxmKToKICAgICAgICAjIHJlbW92ZSBmcm9tIHF1ZXVlCiAgICAgICAgbG9nZ2VyLmluZm8oImZpbmlzaCB3b3JkIHdhciIpCiAgICAgICAgbG9nZ2VyLmluZm8oInJlbW92ZSBmcm9tIHF1ZXVlIikKICAgICAgICBzZWxmLnNlbmRfbWVzc2FnZSgiV1c6ICIgKyBzZWxmLm5hbWUgKyAiIGlzIGRvbmUgLSBzaGFyZSB5b3VyIHJlc3VsdHMiKQogICAgICAgIHNlbGYubm90aWZ5X25pY2tzKCkKCiAgICAgICAgc2VsZi53d3F1ZXVlLmRvbmVfd29yZF93YXIoc2VsZikKCiAgICBkZWYgY2FuY2VsX3dvcmRfd2FyKHNlbGYpOgogICAgICAgIGxvZ2dlci5pbmZvKCJjYW5jZWwgd29yZCB3YXIiKQogICAgICAgIHNlbGYuX2NhbmNlbF90aW1lcigid2FyX3N0YXJ0X3RpbWVyIikKICAgICAgICBzZWxmLl9jYW5jZWxfdGltZXIoIndhcl93YXJuaW5nX3RpbWVyIikKICAgICAgICBzZWxmLl9jYW5jZWxfdGltZXIoIndhcl90aW1lciIpCiAgICAgICAgc2VsZi53d3F1ZXVlLmRvbmVfd29yZF93YXIoc2VsZikKICAgICAgICBzZWxmLnNlbmRfbWVzc2FnZSgiV1c6ICIgKyBzZWxmLm5hbWUgKyAiIGhhcyBiZWVuIGNhbmNlbGxlZCIpCiAgICAgICAgc2VsZi5ub3RpZnlfbmlja3MoKQoKICAgIGRlZiBfY2FuY2VsX3RpbWVyKHNlbGYsIHRpbWVyX25hbWUpOgogICAgICAgIGxvZ2dlci5kZWJ1ZygiY2FuY2VsbGluZyB0aW1lciAnJXMnIiwgdGltZXJfbmFtZSkKICAgICAgICBpZiBoYXNhdHRyKHNlbGYsIHRpbWVyX25hbWUpOgogICAgICAgICAgICB0ID0gZ2V0YXR0cihzZWxmLCB0aW1lcl9uYW1lKQogICAgICAgICAgICBsb2dnZXIuZGVidWcoImZvdW5kIHRpbWVyICclcyciLCB0aW1lcl9uYW1lKQogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICB0LmNhbmNlbCgpCiAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoImNhbmNlbGxlZCIpCiAgICAgICAgICAgIGV4Y2VwdCAoQWxyZWFkeUNhbGxlZCwgQWxyZWFkeUNhbmNlbGxlZCkgYXMgZToKICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiYWxyZWFkeSBjYWxsZWQgb3IgY2FuY2VsbGVkIikKICAgICAgICAgICAgICAgIHBhc3MgIyBpZ25vcmUKICAgICAgICBlbHNlOgogICAgICAgICAgICBsb2dnZXIuZGVidWcoIm5vIHRpbWVyIGJ5IHRoYXQgbmFtZSIpCgoKICAgIGRlZiBhZGRfdXNlcl90b193b3Jkd2FyKHNlbGYsIHVzZXJuYW1lKToKICAgICAgICBsb2dnZXIuZGVidWcoImFkZF91c2VyX3RvX3dvcmR3YXIoKTogd3cgJXMsIHVzZXIgJXMiLCBzZWxmLm5hbWUsIHVzZXJuYW1lKQogICAgICAgIHNlbGYubmlja2xpc3QuYXBwZW5kKHVzZXJuYW1lKQogICAgICAgIGxvZ2dlci5kZWJ1Zygid3cgJXMgbmlja2xpc3Qgbm93ICVzIiwgc2VsZi5uYW1lLCBzZWxmLm5pY2tsaXN0KQoKCiAgICBkZWYgcmVtb3ZlX3VzZXJfZnJvbV93b3Jkd2FyKHNlbGYsIHVzZXJuYW1lKToKICAgICAgICBsb2dnZXIuZGVidWcoInJlbW92ZV91c2VyX2Zyb21fd29yZHdhcigpOiB3dyAlcywgdXNlciAlcyIsIHNlbGYubmFtZSwgdXNlcm5hbWUpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLm5pY2tsaXN0LnJlbW92ZSh1c2VybmFtZSkKICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlcyBpcyBub3QgaW4gd3cgJXMncyBuaWNrbGlzdCIsIHVzZXJuYW1lLCBzZWxmLm5hbWUpCiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgICAgICBsb2dnZXIuZGVidWcoInd3ICVzIG5pY2tsaXN0IG5vdyAlcyIsIHNlbGYubmFtZSwgc2VsZi5uaWNrbGlzdCkKICAgICAgICByZXR1cm4gVHJ1ZQoKCiAgICBkZWYgcmVuYW1lX3VzZXIoc2VsZiwgb2xkbmFtZSwgbmV3bmFtZSk6CiAgICAgICAgIyBub3RlOiB0aGVzZSBhcmUgc2hvcnQgbmFtZXMgb25seSEgc28gdGhlIHRlc3QgaXMgYW5ub3lpbmcuCiAgICAgICAgZm9yIGksIG5pY2sgaW4gZW51bWVyYXRlKHNlbGYubmlja2xpc3QpOgogICAgICAgICAgICBuaWNrX3BhcnRzID0gbmljay5zcGxpdCgnIScpCiAgICAgICAgICAgIGlmIG5pY2tfcGFydHNbMF0gPT0gb2xkbmFtZToKICAgICAgICAgICAgICAgIHNlbGYubmlja2xpc3RbaV0gPSAnIScuam9pbihbbmV3bmFtZV0gKyBuaWNrX3BhcnRzWzE6XSkKICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJ1cGRhdGVkICclcycgdG8gJyVzJyBpbiB3b3JkIHdhciAnJXMnIiwgb2xkbmFtZSwgbmV3bmFtZSwgc2VsZi5uYW1lKQoKICAgICAgICAjIGFsc28gcmVuYW1lIHNlbGYgaWYgYXBwcm9wcmlhdGUhCiAgICAgICAgaWYgb2xkbmFtZSA9PSBzZWxmLm5hbWU6CiAgICAgICAgICAgIG9sZF93YXJfbmFtZSA9IHNlbGYubmFtZQogICAgICAgICAgICBzZWxmLm5hbWUgPSBuZXduYW1lCiAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJ3b3JkIHdhciAnJXMnIHJlbmFtZWQgdG8gJyVzJyIsIG9sZF93YXJfbmFtZSwgc2VsZi5uYW1lKQoKICAgIGRlZiBub3RpZnlfbmlja3Moc2VsZik6CiAgICAgICAgc2hvcnRfbmlja3MgPSAnICcuam9pbihbbmljay5zcGxpdCgnIScpWzBdIGZvciBuaWNrIGluIHNlbGYubmlja2xpc3RdKQogICAgICAgIGlmIGxlbihzaG9ydF9uaWNrcyk6CiAgICAgICAgICAgIHNlbGYud3dxdWV1ZS5pcmNfc2VuZF9zYXkoIkhleSEgVGhhdCBtZWFucyB5b3U6ICVzIiAlIHNob3J0X25pY2tzKQoKICAgIGRlZiBzZW5kX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSk6CiAgICAgICAgc2VsZi53d3F1ZXVlLmlyY19zZW5kX3NheShtZXNzYWdlKQogICAgICAgIGZvciBuaWNrIGluIHNlbGYubmlja2xpc3Q6CiAgICAgICAgICAgIHNlbGYud3dxdWV1ZS5pcmNfc2VuZF9tc2cobmljaywgbWVzc2FnZSkKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLnd3cXVldWUgPSBxdWV1ZQogICAgICAgIHNlbGYud2FyX3N0YXJ0X3RpbWVyID0gcmVhY3Rvci5jYWxsTGF0ZXIoc2VsZi5zdGFydCAqIDYwLCBzZWxmLnN0YXJ0X3dvcmRfd2FyKQogICAgICAgIHNlbGYudGltZXN0YXJ0ZWQgPSAiIgogICAgICAgIGlmIChpbnQoc2VsZi5zdGFydCkgPiAyKToKPHxmaW1fZW5kfD4="]
["f2b95d29a0708c631e1d6799f71658d8ddf7ef9e-2","f2b95d29a0708c631e1d6799f71658d8ddf7ef9e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwppbXBvcnQgc3RyaW5nCmZyb20gZGF0ZXRpbWUgaW1wb3J0ICoKZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRpbWVyCmZyb20gcmFuZG9tIGltcG9ydCAqCmltcG9ydCBsb2dnaW5nCgpmcm9tIHR3aXN0ZWQud29yZHMucHJvdG9jb2xzIGltcG9ydCBpcmMKZnJvbSB0d2lzdGVkLmludGVybmV0IGltcG9ydCBwcm90b2NvbApmcm9tIHR3aXN0ZWQuaW50ZXJuZXQgaW1wb3J0IHJlYWN0b3IKZnJvbSB0d2lzdGVkLmludGVybmV0LmVycm9yIGltcG9ydCBBbHJlYWR5Q2FsbGVkLCBBbHJlYWR5Q2FuY2VsbGVkCgppbXBvcnQgYm90dXRpbHMKCgpsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCmNsYXNzIFdvcmRXYXJNYW5hZ2VyKG9iamVjdCk6CiAgICB3d19xdWV1ZSA9IFtdCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGlyYyk6CiAgICAgICAgc2VsZi5pcmMgPSBpcmMKCiAgICBkZWYgX2dldF93YXJfYnlfbmFtZShzZWxmLCB3YXJfbmFtZSk6CiAgICAgICAgcmV0dXJuIG5leHQoKHdhciBmb3Igd2FyIGluIHNlbGYud3dfcXVldWUgaWYgd2FyLm5hbWUubG93ZXIoKSA9PSB3YXJfbmFtZS5sb3dlcigpKSwgTm9uZSkKCiAgICBkZWYgY2hlY2tfZXhpc3Rpbmdfd2FyKHNlbGYsIHdhcl9uYW1lKToKICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X3dhcl9ieV9uYW1lKHdhcl9uYW1lKSAhPSBOb25lCgogICAgZGVmIGluc2VydF9pbnRvX3dhcihzZWxmLCB3YXJfbmFtZSwgdXNlcik6CiAgICAgICAgbG9nZ2VyLmRlYnVnKCJpbnNlcnQgJXMgaW50byB3b3Jkd2FyICclcyciLCB1c2VyLCB3YXJfbmFtZSkKICAgICAgICBhd2FyID0gIHNlbGYuX2dldF93YXJfYnlfbmFtZSh3YXJfbmFtZSkKICAgICAgICBpZiBhd2FyOgogICAgICAgICAgICBsb2dnZXIuaW5mbygiQWRkaW5nICVzIC0gJXMiLCBhd2FyLm5hbWUsIHVzZXIpCiAgICAgICAgICAgIGF3YXIuYWRkX3VzZXJfdG9fd29yZHdhcih1c2VyKQogICAgICAgICAgICByZXR1cm4gVHJ1ZQoKICAgICAgICBsb2dnZXIuaW5mbygiQ291bGQgbm90IGZpbmQgd29yZHdhciAnJXMnIiwgd2FyX25hbWUpCiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZGVmIHJlbW92ZV9mcm9tX3dhcihzZWxmLCB3YXJfbmFtZSwgdXNlcik6CiAgICAgICAgbG9nZ2VyLmRlYnVnKCJyZW1vdmUgJXMgZnJvbSB3b3Jkd2FyICclcyciLCB1c2VyLCB3YXJfbmFtZSkKICAgICAgICBhd2FyID0gIHNlbGYuX2dldF93YXJfYnlfbmFtZSh3YXJfbmFtZSkKICAgICAgICBpZiBhd2FyOgogICAgICAgICAgICBsb2dnZXIuaW5mbygicmVtb3ZpbmcgJXMgLSAlcyIsIGF3YXIubmFtZSwgdXNlcikKICAgICAgICAgICAgcmV0dXJuIGF3YXIucmVtb3ZlX3VzZXJfZnJvbV93b3Jkd2FyKHVzZXIpCgogICAgICAgIGxvZ2dlci5pbmZvKCJDb3VsZCBub3QgZmluZCB3b3Jkd2FyICclcyciLCB3YXJfbmFtZSkKICAgICAgICByZXR1cm4gRmFsc2UKCgogICAgZGVmIGNyZWF0ZV93b3JkX3dhcihzZWxmLCBuYW1lLCBsZW5ndGgsIHN0YXJ0LCBwcm9tcHQpOgogICAgICAgIG5ld193dyA9IFdvcmRXYXIobmFtZSwgbGVuZ3RoLCBzdGFydCwgc2VsZiwgcHJvbXB0KQogICAgICAgIHNlbGYud3dfcXVldWUuYXBwZW5kKG5ld193dykKICAgICAgICByZXR1cm4gbmV3X3d3CgogICAgZGVmIGNhbmNlbF93b3JkX3dhcihzZWxmLCB3YXJfbmFtZSk6CiAgICAgICAgbG9nZ2VyLmRlYnVnKCJjYW5jZWwgd29yZHdhciAnJXMnIiwgd2FyX25hbWUpCiAgICAgICAgYXdhciA9IHNlbGYuX2dldF93YXJfYnlfbmFtZSh3YXJfbmFtZSkKICAgICAgICBpZiBhd2FyOgogICAgICAgICAgICBhd2FyLmNhbmNlbF93b3JkX3dhcigpCiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgbG9nZ2VyLmluZm8oIkNvdWxkIG5vdCBmaW5kIHdvcmR3YXIgJyVzJyB0byBjYW5jZWwiLCB3YXJfbmFtZSkKICAgICAgICByZXR1cm4gRmFsc2UKCgogICAgZGVmIGRvbmVfd29yZF93YXIoc2VsZiwgd29yZHdhcik6CiAgICAgICAgc2VsZi53d19xdWV1ZS5yZW1vdmUod29yZHdhcikKCgogICAgZGVmIGdldF93b3JkX3dhcl9uaWNrcyhzZWxmLCB3YXJfbmFtZSk6CiAgICAgICAgYXdhciA9IHNlbGYuX2dldF93YXJfYnlfbmFtZSh3YXJfbmFtZSkKICAgICAgICByZXR1cm4gYXdhci5uaWNrbGlzdCBpZiBhd2FyIGVsc2UgTm9uZQoKCiAgICBkZWYgZ2V0X3N0YXR1cyhzZWxmLCB1c2VyKToKIyAgICAgICAgaWYgKHNlbGYuY2hlY2tfZm9yX2RhZGR5KHVzZXIpID09IDEpOgojICAgICAgICAgICAgICAgIHNlbGYuaXJjX3NlbmRfc2F5KCJZZXMgZmF0aGVyLiIpOwogICAgICAgIGlmIGxlbihzZWxmLnd3X3F1ZXVlKSA9PSAwOgogICAgICAgICAgICBzZWxmLmlyYy5pcmNfc2VuZF9tc2codXNlciwgIlRoZXJlIGFyZSBubyBhY3RpdmUgd29yZCB3YXJzIikKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIGZvciB3dyBpbiBzZWxmLnd3X3F1ZXVlOgogICAgICAgICAgICB3dy5zdGF0dXNfd29yZF93YXIodXNlcikKCiAgICBkZWYgcmVuYW1lX3VzZXIoc2VsZiwgb2xkbmFtZSwgbmV3bmFtZSk6CiAgICAgICAgbG9nZ2VyLmluZm8oInVwZGF0aW5nIG5pY2sgY2hhbmdlIGZyb20gJXMgdG8gJXMiICxvbGRuYW1lLCBuZXduYW1lKQogICAgICAgIGZvciB3YXIgaW4gc2VsZi53d19xdWV1ZToKICAgICAgICAgICAgd2FyLnJlbmFtZV91c2VyKG9sZG5hbWUsIG5ld25hbWUpCgogICAgZGVmIGlyY19zZW5kX21lKHNlbGYsIG1lc3NhZ2UpOgogICAgICAgIHNlbGYuaXJjLmlyY19zZW5kX21lKG1lc3NhZ2UpCgogICAgZGVmIGlyY19zZW5kX3NheShzZWxmLCBtZXNzYWdlKToKICAgICAgICBzZWxmLmlyYy5pcmNfc2VuZF9zYXkobWVzc2FnZSkKCiAgICBkZWYgaXJjX3NlbmRfbXNnKHNlbGYsIHVzZXIsIG1lc3NhZ2UpOgogICAgICAgIHNlbGYuaXJjLmlyY19zZW5kX21zZyh1c2VyLnNwbGl0KCIhIilbMF0sIG1lc3NhZ2UpCgoKY2xhc3MgV29yZFdhcihvYmplY3QpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBsZW5ndGgsIHN0YXJ0LCBxdWV1ZSwgcHJvbXB0KToKICAgICAgICBsb2dnZXIuZGVidWcoIldvcmRXYXIoJXMsICVzLCAlcywgJXMpIiAlIChuYW1lLCBsZW5ndGgsIHN0YXJ0LCBwcm9tcHQpKQogICAgICAgIHNlbGYubmlja2xpc3QgPSBbXQogICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICBzZWxmLnByb21wdCA9IHByb21wdAogICAgICAgIHNlbGYubGVuZ3RoID0gaW50KGxlbmd0aCkKICAgICAgICBzZWxmLnN0YXJ0ID0gaW50KHN0YXJ0KQogICAgICAgIHNlbGYudGltZWNhbGxlZCA9IGRhdGV0aW1lLnRvZGF5KCkKICAgICAgICBzZWxmLnd3cXVldWUgPSBxdWV1ZQogICAgICAgIHNlbGYud2FyX3N0YXJ0X3RpbWVyID0gcmVhY3Rvci5jYWxsTGF0ZXIoc2VsZi5zdGFydCAqIDYwLCBzZWxmLnN0YXJ0X3dvcmRfd2FyKQogICAgICAgIHNlbGYudGltZXN0YXJ0ZWQgPSAiIgogICAgICAgIGlmIChpbnQoc2VsZi5zdGFydCkgPiAyKToKICAgICAgICAgICAgc2VsZi53YXJfd2FybmluZ190aW1lciA9IHJlYWN0b3IuY2FsbExhdGVyKChzZWxmLnN0YXJ0IC0gMikgKiA2MCwgc2VsZi53YXJuaW5nX3dvcmRfd2FyKQogICAgICAgIHNlbGYuc3RhdHVzID0gMAoKICAgIGRlZiB3YXJuaW5nX3dvcmRfd2FyKHNlbGYpOgogICAgICAgIHNlbGYuc2VuZF9tZXNzYWdlKCJXVzogIiArIHNlbGYubmFtZSArICIgc3RhcnRzIGluIDIgbWludXRlcyBmb3IgIiArIGJvdHV0aWxzLm1pbnV0ZXNfc3RyaW5nKHNlbGYubGVuZ3RoKSkKICAgICAgICBzZWxmLnNlbmRfbWVzc2FnZSgiT3B0aW9uYWwgUHJvbXB0IGZvciB0aGlzIFdXIGlzOiAlcyIgJSBzZWxmLnByb21wdCkKICAgICAgICBzZWxmLm5vdGlmeV9uaWNrcygpCgogICAgZGVmIHN0YXJ0X3dvcmRfd2FyKHNlbGYpOgogICAgICAgICMgc2VuZCBvdXQgbWVzc2FnZQogICAgICAgIHNlbGYuc3RhdHVzID0gMQogICAgICAgIHNlbGYuc2VuZF9tZXNzYWdlKAogICAgICAgICAgICAiR09PT09PT09PT09PISEhIFdXOiAiICsgc2VsZi5uYW1lICsgIiBmb3IgIiArIGJvdHV0aWxzLm1pbnV0ZXNfc3RyaW5nKHNlbGYubGVuZ3RoKSkKICAgICAgICBzZWxmLnNlbmRfbWVzc2FnZSgiT3B0aW9uYWwgUHJvbXB0IGZvciB0aGlzIFdXIGlzOiAlcyIgJSBzZWxmLnByb21wdCkKICAgICAgICBzZWxmLm5vdGlmeV9uaWNrcygpCiAgICAgICAgc2VsZi50aW1lc3RhcnRlZCA9IGRhdGV0aW1lLnRvZGF5KCkKICAgICAgICBzZWxmLndhcl90aW1lciA9IHJlYWN0b3IuY2FsbExhdGVyKGZsb2F0KHNlbGYubGVuZ3RoKSAqIDYwLjAsIHNlbGYuZmluaXNoX3dvcmRfd2FyKQoKICAgIGRlZiBzdGF0dXNfd29yZF93YXIoc2VsZiwgdXNlcik6CiAgICAgICAgc2VsZi53d3F1ZXVlLmlyY19zZW5kX21zZyh1c2VyLCAibmFtZTogIiArIHNlbGYubmFtZSkKICAgICAgICBzZWxmLnd3cXVldWUuaXJjX3NlbmRfbXNnKHVzZXIsICJsZW5ndGg6ICIgKyBib3R1dGlscy5taW51dGVzX3N0cmluZyhzZWxmLmxlbmd0aCkpCiAgICAgICAgaWYgKHNlbGYuc3RhdHVzID09IDApOgogICAgICAgICAgICBzZWxmLnd3cXVldWUuaXJjX3NlbmRfbXNnKHVzZXIsICJzdGF0dXM6IHdhaXRpbmciKQogICAgICAgICAgICBzZWxmLnd3cXVldWUuaXJjX3NlbmRfbXNnKHVzZXIsICJjYWxsZWQgYXQ6ICIgKyBzZWxmLnRpbWVjYWxsZWQuc3RyZnRpbWUoJyVZLSVtLSVkICVJOiVNOiVTICVwJykpCiAgICAgICAgICAgIGludGVydmFsID0gdGltZWRlbHRhKG1pbnV0ZXM9c2VsZi5zdGFydCkKICAgICAgICAgICAgdGhlbiA9IHNlbGYudGltZWNhbGxlZCArIGludGVydmFsCiAgICAgICAgICAgIHRpbWVsZWZ0ID0gdGhlbiAtIGRhdGV0aW1lLnRvZGF5KCkKICAgICAgICAgICAgc2VsZi53d3F1ZXVlLmlyY19zZW5kX21zZyh1c2VyLCAidGltZSB1bnRpbCBzdGFydDogJXMiICUgKGJvdHV0aWxzLmZvcm1hdF90aW1lZGVsdGEodGltZWxlZnQpKSkKCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi53d3F1ZXVlLmlyY19zZW5kX21zZyh1c2VyLCAic3RhdHVzOiB1bmRlcndheSIpCiAgICAgICAgICAgIHNlbGYud3dxdWV1ZS5pcmNfc2VuZF9tc2codXNlciwgInN0YXJ0ZWQgYXQ6ICIgKyBzZWxmLnRpbWVzdGFydGVkLnN0cmZ0aW1lKCclWS0lbS0lZCAlSTolTTolUyAlcCcpKQogICAgICAgICAgICB0aW1lbGVmdCA9IHNlbGYudGltZXN0YXJ0ZWQgKyB0aW1lZGVsdGEobWludXRlcz1zZWxmLmxlbmd0aCkgLSBkYXRldGltZS50b2RheSgpCiAgICAgICAgICAgIHNlbGYud3dxdWV1ZS5pcmNfc2VuZF9tc2codXNlciwgInRpbWUgdW50aWwgZW5kOiAlcyIgJSAoYm90dXRpbHMuZm9ybWF0X3RpbWVkZWx0YSh0aW1lbGVmdCkpKQoKICAgICAgICBzZWxmLnd3cXVldWUuaXJjX3NlbmRfbXNnKHVzZXIsICJtZW1iZXJzICglZCk6ICVzIiAlIChsZW4oc2VsZi5uaWNrbGlzdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAnLmpvaW4oW25pY2suc3BsaXQoJyEnKVswXSBmb3IgbmljayBpbiBzZWxmLm5pY2tsaXN0XSkpKQogICAgICAgIHNlbGYud3dxdWV1ZS5pcmNfc2VuZF9tc2codXNlciwgIi0tLS0tIikKCiAgICBkZWYgZmluaXNoX3dvcmRfd2FyKHNlbGYpOgogICAgICAgICMgcmVtb3ZlIGZyb20gcXVldWUKICAgICAgICBsb2dnZXIuaW5mbygiZmluaXNoIHdvcmQgd2FyIikKICAgICAgICBsb2dnZXIuaW5mbygicmVtb3ZlIGZyb20gcXVldWUiKQogICAgICAgIHNlbGYuc2VuZF9tZXNzYWdlKCJXVzogIiArIHNlbGYubmFtZSArICIgaXMgZG9uZSAtIHNoYXJlIHlvdXIgcmVzdWx0cyIpCiAgICAgICAgc2VsZi5ub3RpZnlfbmlja3MoKQoKICAgICAgICBzZWxmLnd3cXVldWUuZG9uZV93b3JkX3dhcihzZWxmKQoKICAgIGRlZiBjYW5jZWxfd29yZF93YXIoc2VsZik6CiAgICAgICAgbG9nZ2VyLmluZm8oImNhbmNlbCB3b3JkIHdhciIpCiAgICAgICAgc2VsZi5fY2FuY2VsX3RpbWVyKCJ3YXJfc3RhcnRfdGltZXIiKQogICAgICAgIHNlbGYuX2NhbmNlbF90aW1lcigid2FyX3dhcm5pbmdfdGltZXIiKQogICAgICAgIHNlbGYuX2NhbmNlbF90aW1lcigid2FyX3RpbWVyIikKICAgICAgICBzZWxmLnd3cXVldWUuZG9uZV93b3JkX3dhcihzZWxmKQogICAgICAgIHNlbGYuc2VuZF9tZXNzYWdlKCJXVzogIiArIHNlbGYubmFtZSArICIgaGFzIGJlZW4gY2FuY2VsbGVkIikKICAgICAgICBzZWxmLm5vdGlmeV9uaWNrcygpCgogICAgZGVmIF9jYW5jZWxfdGltZXIoc2VsZiwgdGltZXJfbmFtZSk6CiAgICAgICAgbG9nZ2VyLmRlYnVnKCJjYW5jZWxsaW5nIHRpbWVyICclcyciLCB0aW1lcl9uYW1lKQogICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgdGltZXJfbmFtZSk6CiAgICAgICAgICAgIHQgPSBnZXRhdHRyKHNlbGYsIHRpbWVyX25hbWUpCiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiZm91bmQgdGltZXIgJyVzJyIsIHRpbWVyX25hbWUpCiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHQuY2FuY2VsKCkKICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiY2FuY2VsbGVkIikKICAgICAgICAgICAgZXhjZXB0IChBbHJlYWR5Q2FsbGVkLCBBbHJlYWR5Q2FuY2VsbGVkKSBhcyBlOgogICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJhbHJlYWR5IGNhbGxlZCBvciBjYW5jZWxsZWQiKQogICAgICAgICAgICAgICAgcGFzcyAjIGlnbm9yZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zygibm8gdGltZXIgYnkgdGhhdCBuYW1lIikKCgogICAgZGVmIGFkZF91c2VyX3RvX3dvcmR3YXIoc2VsZiwgdXNlcm5hbWUpOgogICAgICAgIGxvZ2dlci5kZWJ1ZygiYWRkX3VzZXJfdG9fd29yZHdhcigpOiB3dyAlcywgdXNlciAlcyIsIHNlbGYubmFtZSwgdXNlcm5hbWUpCiAgICAgICAgc2VsZi5uaWNrbGlzdC5hcHBlbmQodXNlcm5hbWUpCiAgICAgICAgbG9nZ2VyLmRlYnVnKCJ3dyAlcyBuaWNrbGlzdCBub3cgJXMiLCBzZWxmLm5hbWUsIHNlbGYubmlja2xpc3QpCgoKICAgIGRlZiByZW1vdmVfdXNlcl9mcm9tX3dvcmR3YXIoc2VsZiwgdXNlcm5hbWUpOgogICAgICAgIGxvZ2dlci5kZWJ1ZygicmVtb3ZlX3VzZXJfZnJvbV93b3Jkd2FyKCk6IHd3ICVzLCB1c2VyICVzIiwgc2VsZi5uYW1lLCB1c2VybmFtZSkKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYubmlja2xpc3QucmVtb3ZlKHVzZXJuYW1lKQogICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVzIGlzIG5vdCBpbiB3dyAlcydzIG5pY2tsaXN0IiwgdXNlcm5hbWUsIHNlbGYubmFtZSkKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICAgIGxvZ2dlci5kZWJ1Zygid3cgJXMgbmlja2xpc3Qgbm93ICVzIiwgc2VsZi5uYW1lLCBzZWxmLm5pY2tsaXN0KQogICAgICAgIHJldHVybiBUcnVlCgoKICAgIGRlZiByZW5hbWVfdXNlcihzZWxmLCBvbGRuYW1lLCBuZXduYW1lKToKICAgICAgICAjIG5vdGU6IHRoZXNlIGFyZSBzaG9ydCBuYW1lcyBvbmx5ISBzbyB0aGUgdGVzdCBpcyBhbm5veWluZy4KICAgICAgICBmb3IgaSwgbmljayBpbiBlbnVtZXJhdGUoc2VsZi5uaWNrbGlzdCk6CiAgICAgICAgICAgIG5pY2tfcGFydHMgPSBuaWNrLnNwbGl0KCchJykKICAgICAgICAgICAgaWYgbmlja19wYXJ0c1swXSA9PSBvbGRuYW1lOgogICAgICAgICAgICAgICAgc2VsZi5uaWNrbGlzdFtpXSA9ICchJy5qb2luKFtuZXduYW1lXSArIG5pY2tfcGFydHNbMTpdKQogICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oInVwZGF0ZWQgJyVzJyB0byAnJXMnIGluIHdvcmQgd2FyICclcyciLCBvbGRuYW1lLCBuZXduYW1lLCBzZWxmLm5hbWUpCjx8ZmltX2hvbGV8PgogICAgICAgICAgICBzZWxmLm5hbWUgPSBuZXduYW1lCiAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJ3b3JkIHdhciAnJXMnIHJlbmFtZWQgdG8gJyVzJyIsIG9sZF93YXJfbmFtZSwgc2VsZi5uYW1lKQoKICAgIGRlZiBub3RpZnlfbmlja3Moc2VsZik6CiAgICAgICAgc2hvcnRfbmlja3MgPSAnICcuam9pbihbbmljay5zcGxpdCgnIScpWzBdIGZvciBuaWNrIGluIHNlbGYubmlja2xpc3RdKQogICAgICAgIGlmIGxlbihzaG9ydF9uaWNrcyk6CiAgICAgICAgICAgIHNlbGYud3dxdWV1ZS5pcmNfc2VuZF9zYXkoIkhleSEgVGhhdCBtZWFucyB5b3U6ICVzIiAlIHNob3J0X25pY2tzKQoKICAgIGRlZiBzZW5kX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSk6CiAgICAgICAgc2VsZi53d3F1ZXVlLmlyY19zZW5kX3NheShtZXNzYWdlKQogICAgICAgIGZvciBuaWNrIGluIHNlbGYubmlja2xpc3Q6CiAgICAgICAgICAgIHNlbGYud3dxdWV1ZS5pcmNfc2VuZF9tc2cobmljaywgbWVzc2FnZSkKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgIyBhbHNvIHJlbmFtZSBzZWxmIGlmIGFwcHJvcHJpYXRlIQogICAgICAgIGlmIG9sZG5hbWUgPT0gc2VsZi5uYW1lOgogICAgICAgICAgICBvbGRfd2FyX25hbWUgPSBzZWxmLm5hbWUKPHxmaW1fZW5kfD4="]
["f81a79ca23e8e921871547f7f2b8903908fed992-1","f81a79ca23e8e921871547f7f2b8903908fed992","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKCmltcG9ydCBvcwppbXBvcnQgcmF5CmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgY3VweSBhcyBjcAppbXBvcnQgY3VweS5jdWRhLm5jY2wgYXMgbmNjbAppbXBvcnQgdG9yY2gKCgojIEByYXkucmVtb3RlKG51bV9ncHVzPTEsIHJlc291cmNlcz17J21hY2hpbmUnOiAxfSkKQHJheS5yZW1vdGUobnVtX2dwdXM9MSkKY2xhc3MgQmVuY2htYXJrV29ya2VyOgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAgd29ybGRfc2l6ZSwKICAgICAgICAgICAgICAgICB3b3JsZF9yYW5rLAogICAgICAgICAgICAgICAgIG9iamVjdF9zaXplKToKICAgICAgICBzZWxmLndvcmxkX3NpemUgPSB3b3JsZF9zaXplCiAgICAgICAgc2VsZi53b3JsZF9yYW5rID0gd29ybGRfcmFuawogICAgICAgIHNlbGYub2JqZWN0X3NpemUgPSBvYmplY3Rfc2l6ZQoKICAgICAgICBzZWxmLmNvbW0gPSBOb25lCiAgICAgICAgc2VsZi51aWQgPSBOb25lCgogICAgICAgIHNlbGYuc2VuZCA9IE5vbmUKICAgICAgICBzZWxmLnJlY3YgPSBOb25lCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgZ2VuX3VuaXF1ZV9pZChzZWxmKToKICAgICAgICBpZiBzZWxmLndvcmxkX3JhbmsgIT0gMDoKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc2hvdWxkIG5vdCByZWFjaCBoZXJlLi4uJykKICAgICAgICB1aWQgPSBuY2NsLmdldF91bmlxdWVfaWQoKQo8fGZpbV9lbmR8Pg=="]
["f81a79ca23e8e921871547f7f2b8903908fed992-2","f81a79ca23e8e921871547f7f2b8903908fed992","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKCmltcG9ydCBvcwppbXBvcnQgcmF5CmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgY3VweSBhcyBjcAppbXBvcnQgY3VweS5jdWRhLm5jY2wgYXMgbmNjbAppbXBvcnQgdG9yY2gKCgojIEByYXkucmVtb3RlKG51bV9ncHVzPTEsIHJlc291cmNlcz17J21hY2hpbmUnOiAxfSkKQHJheS5yZW1vdGUobnVtX2dwdXM9MSkKY2xhc3MgQmVuY2htYXJrV29ya2VyOgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAgd29ybGRfc2l6ZSwKICAgICAgICAgICAgICAgICB3b3JsZF9yYW5rLAogICAgICAgICAgICAgICAgIG9iamVjdF9zaXplKToKICAgICAgICBzZWxmLndvcmxkX3NpemUgPSB3b3JsZF9zaXplCiAgICAgICAgc2VsZi53b3JsZF9yYW5rID0gd29ybGRfcmFuawogICAgICAgIHNlbGYub2JqZWN0X3NpemUgPSBvYmplY3Rfc2l6ZQoKICAgICAgICBzZWxmLmNvbW0gPSBOb25lCiAgICAgICAgc2VsZi51aWQgPSBOb25lCgogICAgICAgIHNlbGYuc2VuZCA9IE5vbmUKICAgICAgICBzZWxmLnJlY3YgPSBOb25lCgogICAgZGVmIGdlbl91bmlxdWVfaWQoc2VsZik6CiAgICAgICAgaWYgc2VsZi53b3JsZF9yYW5rICE9IDA6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Nob3VsZCBub3QgcmVhY2ggaGVyZS4uLicpCiAgICAgICAgdWlkID0gbmNjbC5nZXRfdW5pcXVlX2lkKCkKICAgICAgICBzZWxmLnVpZCA9IHVpZAogICAgICAgIHJldHVybiB1aWQKCiAgICBkZWYgc2V0dXAoc2VsZiwgdWlkKToKICAgICAgICAjIGNwLmN1ZGEuU3RyZWFtLm51bGwuc3luY2hyb25pemUoKQogICAgICAgIHNlbGYuY29tbSA9IG5jY2wuTmNjbENvbW11bmljYXRvcigKICAgICAgICAgICAgc2VsZi53b3JsZF9zaXplLCB1aWQsIHNlbGYud29ybGRfcmFuaykKCiAgICBkZWYgcHV0X29iamVjdChzZWxmLCB0ZW5zb3JfdHlwZT0nY3VweScpOgogICAgICAgIGNwLmN1ZGEuU3RyZWFtLm51bGwuc3luY2hyb25pemUoKQogICAgICAgIGlmIHRlbnNvcl90eXBlID09ICdjdXB5JzoKICAgICAgICAgICAgc2VsZi5zZW5kID0gY3Aub25lcygocm91bmQoc2VsZi5vYmplY3Rfc2l6ZSAvIDQpLCksIGR0eXBlPWNwLmZsb2F0MzIpCiAgICAgICAgICAgIHNlbGYucmVjdiA9IGNwLnplcm9zKChyb3VuZChzZWxmLm9iamVjdF9zaXplIC8gNCksKSwgZHR5cGU9Y3AuZmxvYXQzMikKICAgICAgICBlbGlmIHRlbnNvcl90eXBlID09ICdweXRvcmNoJzoKICAgICAgICAgICAgc2VsZi5zZW5kID0gdG9yY2guY3VkYS5GbG9hdFRlbnNvcihzZWxmLm9iamVjdF9zaXplIC8vIDQpLmZpbGxfKDEuMCkKICAgICAgICAgICAgc2VsZi5yZWN2ID0gdG9yY2guY3VkYS5GbG9hdFRlbnNvcihzZWxmLm9iamVjdF9zaXplIC8vIDQpLmZpbGxfKDAuMCkKICAgICAgICBlbHNlOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bnJlY29nbml6ZWQgdGVuc29yIGJhY2tlbmQnKQogICAgICAgIHByaW50KHNlbGYud29ybGRfcmFuaywgc2VsZi5zZW5kKQogICAgICAgIGNwLmN1ZGEuU3RyZWFtLm51bGwuc3luY2hyb25pemUoKQogICAgICAgIHJldHVybiBUcnVlCgogICAgZGVmIGFsbHJlZHVjZShzZWxmKToKICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuc2VuZCwgY3AuY29yZS5jb3JlLm5kYXJyYXkpOgogICAgICAgICAgICBzZW5kX3B0ciA9IHNlbGYuc2VuZC5kYXRhLnB0cgogICAgICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLnNlbmQsIHRvcmNoLlRlbnNvcik6CiAgICAgICAgICAgIHNlbmRfcHRyID0gc2VsZi5zZW5kLmRhdGFfcHRyKCkKICAgICAgICBlbHNlOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bnJlY29nbml6ZWQgdGVuc29yIGJhY2tlbmQnKQoKICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYucmVjdiwgY3AuY29yZS5jb3JlLm5kYXJyYXkpOgogICAgICAgICAgICByZWN2X3B0ciA9IHNlbGYucmVjdi5kYXRhLnB0cgogICAgICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLnJlY3YsIHRvcmNoLlRlbnNvcik6CiAgICAgICAgICAgIHJlY3ZfcHRyID0gc2VsZi5yZWN2LmRhdGFfcHRyKCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3VucmVjb2duaXplZCB0ZW5zb3IgYmFja2VuZCcpCgogICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKPHxmaW1fZW5kfD4="]
["f81a79ca23e8e921871547f7f2b8903908fed992-3","f81a79ca23e8e921871547f7f2b8903908fed992","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKCmltcG9ydCBvcwppbXBvcnQgcmF5CmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgY3VweSBhcyBjcAppbXBvcnQgY3VweS5jdWRhLm5jY2wgYXMgbmNjbAppbXBvcnQgdG9yY2gKCgojIEByYXkucmVtb3RlKG51bV9ncHVzPTEsIHJlc291cmNlcz17J21hY2hpbmUnOiAxfSkKQHJheS5yZW1vdGUobnVtX2dwdXM9MSkKY2xhc3MgQmVuY2htYXJrV29ya2VyOgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAgd29ybGRfc2l6ZSwKICAgICAgICAgICAgICAgICB3b3JsZF9yYW5rLAogICAgICAgICAgICAgICAgIG9iamVjdF9zaXplKToKICAgICAgICBzZWxmLndvcmxkX3NpemUgPSB3b3JsZF9zaXplCiAgICAgICAgc2VsZi53b3JsZF9yYW5rID0gd29ybGRfcmFuawogICAgICAgIHNlbGYub2JqZWN0X3NpemUgPSBvYmplY3Rfc2l6ZQoKICAgICAgICBzZWxmLmNvbW0gPSBOb25lCiAgICAgICAgc2VsZi51aWQgPSBOb25lCgogICAgICAgIHNlbGYuc2VuZCA9IE5vbmUKICAgICAgICBzZWxmLnJlY3YgPSBOb25lCgogICAgZGVmIGdlbl91bmlxdWVfaWQoc2VsZik6CiAgICAgICAgaWYgc2VsZi53b3JsZF9yYW5rICE9IDA6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Nob3VsZCBub3QgcmVhY2ggaGVyZS4uLicpCiAgICAgICAgdWlkID0gbmNjbC5nZXRfdW5pcXVlX2lkKCkKICAgICAgICBzZWxmLnVpZCA9IHVpZAogICAgICAgIHJldHVybiB1aWQKCiAgICBkZWYgc2V0dXAoc2VsZiwgdWlkKToKICAgICAgICAjIGNwLmN1ZGEuU3RyZWFtLm51bGwuc3luY2hyb25pemUoKQogICAgICAgIHNlbGYuY29tbSA9IG5jY2wuTmNjbENvbW11bmljYXRvcigKICAgICAgICAgICAgc2VsZi53b3JsZF9zaXplLCB1aWQsIHNlbGYud29ybGRfcmFuaykKCiAgICBkZWYgcHV0X29iamVjdChzZWxmLCB0ZW5zb3JfdHlwZT0nY3VweScpOgogICAgICAgIGNwLmN1ZGEuU3RyZWFtLm51bGwuc3luY2hyb25pemUoKQogICAgICAgIGlmIHRlbnNvcl90eXBlID09ICdjdXB5JzoKICAgICAgICAgICAgc2VsZi5zZW5kID0gY3Aub25lcygocm91bmQoc2VsZi5vYmplY3Rfc2l6ZSAvIDQpLCksIGR0eXBlPWNwLmZsb2F0MzIpCiAgICAgICAgICAgIHNlbGYucmVjdiA9IGNwLnplcm9zKChyb3VuZChzZWxmLm9iamVjdF9zaXplIC8gNCksKSwgZHR5cGU9Y3AuZmxvYXQzMikKICAgICAgICBlbGlmIHRlbnNvcl90eXBlID09ICdweXRvcmNoJzoKICAgICAgICAgICAgc2VsZi5zZW5kID0gdG9yY2guY3VkYS5GbG9hdFRlbnNvcihzZWxmLm9iamVjdF9zaXplIC8vIDQpLmZpbGxfKDEuMCkKICAgICAgICAgICAgc2VsZi5yZWN2ID0gdG9yY2guY3VkYS5GbG9hdFRlbnNvcihzZWxmLm9iamVjdF9zaXplIC8vIDQpLmZpbGxfKDAuMCkKICAgICAgICBlbHNlOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bnJlY29nbml6ZWQgdGVuc29yIGJhY2tlbmQnKQogICAgICAgIHByaW50KHNlbGYud29ybGRfcmFuaywgc2VsZi5zZW5kKQogICAgICAgIGNwLmN1ZGEuU3RyZWFtLm51bGwuc3luY2hyb25pemUoKQogICAgICAgIHJldHVybiBUcnVlCgogICAgZGVmIGFsbHJlZHVjZShzZWxmKToKICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuc2VuZCwgY3AuY29yZS5jb3JlLm5kYXJyYXkpOgogICAgICAgICAgICBzZW5kX3B0ciA9IHNlbGYuc2VuZC5kYXRhLnB0cgogICAgICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLnNlbmQsIHRvcmNoLlRlbnNvcik6CiAgICAgICAgICAgIHNlbmRfcHRyID0gc2VsZi5zZW5kLmRhdGFfcHRyKCkKICAgICAgICBlbHNlOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bnJlY29nbml6ZWQgdGVuc29yIGJhY2tlbmQnKQoKICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYucmVjdiwgY3AuY29yZS5jb3JlLm5kYXJyYXkpOgogICAgICAgICAgICByZWN2X3B0ciA9IHNlbGYucmVjdi5kYXRhLnB0cgogICAgICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLnJlY3YsIHRvcmNoLlRlbnNvcik6CiAgICAgICAgICAgIHJlY3ZfcHRyID0gc2VsZi5yZWN2LmRhdGFfcHRyKCkKICAgICAgICBlbHNlOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bnJlY29nbml6ZWQgdGVuc29yIGJhY2tlbmQnKQoKICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCiAgICAgICAgc2VsZi5jb21tLmFsbFJlZHVjZShzZW5kX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3ZfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmQoc2VsZi5vYmplY3Rfc2l6ZSAvIDQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3AuY3VkYS5uY2NsLk5DQ0xfRkxPQVQzMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcC5jdWRhLlN0cmVhbS5udWxsLnB0cikKCiAgICAgICAgY3AuY3VkYS5TdHJlYW0ubnVsbC5zeW5jaHJvbml6ZSgpCiAgICAgICAgZHVyYXRpb24gPSB0aW1lLnRpbWUoKSAtIHN0YXJ0CiAgICAgICAgcHJpbnQoc2VsZi53b3JsZF9yYW5rLCBzZWxmLnJlY3YpCiAgICAgICAgcmV0dXJuIGR1cmF0aW9uCgogICAgZGVmIGRlc3Ryb3koc2VsZik6CiAgICAgICAgc2VsZi5jb21tLmRlc3Ryb3koKQogICAgICAgIHJldHVybiBUcnVlCgoKY2xhc3MgQmVuY2htYXJrV29ya2VyUG9vbDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICAgIHdvcmxkX3NpemUsCiAgICAgICAgICAgICAgICAgb2JqZWN0X3NpemUpOgogICAgICAgIHNlbGYuYWN0b3JzID0gW10KICAgICAgICBsZWFkaW5nX2FjdG9yID0gQmVuY2htYXJrV29ya2VyLnJlbW90ZSh3b3JsZF9zaXplLCAwLCBvYmplY3Rfc2l6ZSkKICAgICAgICB1aWQgPSByYXkuZ2V0KGxlYWRpbmdfYWN0b3IuZ2VuX3VuaXF1ZV9pZC5yZW1vdGUoKSkKICAgICAgICBzZWxmLmFjdG9ycy5hcHBlbmQobGVhZGluZ19hY3RvcikKCiAgICAgICAgZm9yIHdvcmxkX3JhbmsgaW4gcmFuZ2UoMSwgd29ybGRfc2l6ZSk6Cjx8ZmltX2hvbGV8PgogICAgICAgIHJheS53YWl0KFthY3Rvci5zZXR1cC5yZW1vdGUodWlkKSBmb3IgYWN0b3IgaW4gc2VsZi5hY3RvcnNdKQoKICAgIGRlZiBwdXRfb2JqZWN0cyhzZWxmKToKICAgICAgICByZXRzID0gW10KICAgICAgICBmb3IgaSwgdyBpbiBlbnVtZXJhdGUoc2VsZi5hY3RvcnMpOgogICAgICAgICAgICBpZiBpICUgMiA9PSAwOgogICAgICAgICAgICAgICAgcmV0cy5hcHBlbmQody5wdXRfb2JqZWN0LnJlbW90ZSh0ZW5zb3JfdHlwZT0nY3VweScpKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmV0cy5hcHBlbmQody5wdXRfb2JqZWN0LnJlbW90ZSh0ZW5zb3JfdHlwZT0ncHl0b3JjaCcpKQogICAgICAgIHJheS53YWl0KHJldHMsIG51bV9yZXR1cm5zPWxlbihyZXRzKSwgdGltZW91dD1Ob25lKQogICAgICAgIHJldHVybiBUcnVlCgogICAgZGVmIHJlbGVhc2VfYWN0b3JzKHNlbGYpOgogICAgICAgIHJheS53YWl0KFt3LmRlc3Ryb3kucmVtb3RlKCkgZm9yIHcgaW4gc2VsZi5hY3RvcnNdKQogICAgICAgIHJheS53YWl0KFt3Ll9fcmF5X3Rlcm1pbmF0ZV9fLnJlbW90ZSgpIGZvciB3IGluIHNlbGYuYWN0b3JzXSkKICAgICAgICBmb3IgdyBpbiBzZWxmLmFjdG9yczoKICAgICAgICAgICAgcmF5LmtpbGwodykKCiAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaXRlbSk6CiAgICAgICAgcmV0dXJuIHNlbGYuYWN0b3JzW2l0ZW1dCgogICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgcmV0dXJuIGxlbihzZWxmLmFjdG9ycykKCmRlZiBjdXB5X3B5dG9yY2hfYWxscmVkdWNlKHdvcmxkX3NpemUsIG9iamVjdF9zaXplKToKICAgIHdvcmtlcnMgPSBCZW5jaG1hcmtXb3JrZXJQb29sKHdvcmxkX3NpemUsIG9iamVjdF9zaXplKQogICAgd29ya2Vycy5wdXRfb2JqZWN0cygpCiAgICBkdXJhdGlvbnMgPSByYXkuZ2V0KFt3LmFsbHJlZHVjZS5yZW1vdGUoKSBmb3IgdyBpbiB3b3JrZXJzXSkKICAgIHdvcmtlcnMucmVsZWFzZV9hY3RvcnMoKQogICAgcmV0dXJuIG1heChkdXJhdGlvbnMpCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgcmF5LmluaXQoYWRkcmVzcz0nYXV0bycpCgogICAgIyMgSGFvOiBUaGlzIHByb3RvdHlwZSBwcm92ZXMgdGhhdCB3ZSBjYW4gdXNlIGN1cHkubmNjbCB0byByZWR1Y2UgcHl0b3JjaCBhbmQgY3VweSB0ZW5zb3JzIHRvZ2V0aGVyCiAgICAjIyBIZW5jZSBpbnRlcm9wZXJhdG9yYWJpbGl0eSBiZXR3ZWVuIGN1cHkgYW5kIHRvcmNoLmN1ZGEuVGVuc29yLCBvciBudW1weSBhbmQgdG9yY2guVGVuc29yCiAgICB3b3JsZF9zaXplID0gNAogICAgb2JqZWN0X3NpemUgPSAyICoqIDEwCiAgICBkdXJhdGlvbiA9IGN1cHlfcHl0b3JjaF9hbGxyZWR1Y2Uod29ybGRfc2l6ZSwgb2JqZWN0X3NpemUpCiAgICBwcmludChkdXJhdGlvbikKICAgIHJheS5zaHV0ZG93bigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGFjdG9yID0gQmVuY2htYXJrV29ya2VyLnJlbW90ZSh3b3JsZF9zaXplLCB3b3JsZF9yYW5rLCBvYmplY3Rfc2l6ZSkKICAgICAgICAgICAgc2VsZi5hY3RvcnMuYXBwZW5kKGFjdG9yKQo8fGZpbV9lbmR8Pg=="]
["f81a79ca23e8e921871547f7f2b8903908fed992-4","f81a79ca23e8e921871547f7f2b8903908fed992","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHRpbWUKCmltcG9ydCBvcwppbXBvcnQgcmF5CmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgY3VweSBhcyBjcAppbXBvcnQgY3VweS5jdWRhLm5jY2wgYXMgbmNjbAppbXBvcnQgdG9yY2gKCgojIEByYXkucmVtb3RlKG51bV9ncHVzPTEsIHJlc291cmNlcz17J21hY2hpbmUnOiAxfSkKQHJheS5yZW1vdGUobnVtX2dwdXM9MSkKY2xhc3MgQmVuY2htYXJrV29ya2VyOgogICAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAgd29ybGRfc2l6ZSwKICAgICAgICAgICAgICAgICB3b3JsZF9yYW5rLAogICAgICAgICAgICAgICAgIG9iamVjdF9zaXplKToKICAgICAgICBzZWxmLndvcmxkX3NpemUgPSB3b3JsZF9zaXplCiAgICAgICAgc2VsZi53b3JsZF9yYW5rID0gd29ybGRfcmFuawogICAgICAgIHNlbGYub2JqZWN0X3NpemUgPSBvYmplY3Rfc2l6ZQoKICAgICAgICBzZWxmLmNvbW0gPSBOb25lCiAgICAgICAgc2VsZi51aWQgPSBOb25lCgogICAgICAgIHNlbGYuc2VuZCA9IE5vbmUKICAgICAgICBzZWxmLnJlY3YgPSBOb25lCgogICAgZGVmIGdlbl91bmlxdWVfaWQoc2VsZik6CiAgICAgICAgaWYgc2VsZi53b3JsZF9yYW5rICE9IDA6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Nob3VsZCBub3QgcmVhY2ggaGVyZS4uLicpCiAgICAgICAgdWlkID0gbmNjbC5nZXRfdW5pcXVlX2lkKCkKICAgICAgICBzZWxmLnVpZCA9IHVpZAogICAgICAgIHJldHVybiB1aWQKCiAgICBkZWYgc2V0dXAoc2VsZiwgdWlkKToKICAgICAgICAjIGNwLmN1ZGEuU3RyZWFtLm51bGwuc3luY2hyb25pemUoKQogICAgICAgIHNlbGYuY29tbSA9IG5jY2wuTmNjbENvbW11bmljYXRvcigKICAgICAgICAgICAgc2VsZi53b3JsZF9zaXplLCB1aWQsIHNlbGYud29ybGRfcmFuaykKCiAgICBkZWYgcHV0X29iamVjdChzZWxmLCB0ZW5zb3JfdHlwZT0nY3VweScpOgogICAgICAgIGNwLmN1ZGEuU3RyZWFtLm51bGwuc3luY2hyb25pemUoKQogICAgICAgIGlmIHRlbnNvcl90eXBlID09ICdjdXB5JzoKICAgICAgICAgICAgc2VsZi5zZW5kID0gY3Aub25lcygocm91bmQoc2VsZi5vYmplY3Rfc2l6ZSAvIDQpLCksIGR0eXBlPWNwLmZsb2F0MzIpCiAgICAgICAgICAgIHNlbGYucmVjdiA9IGNwLnplcm9zKChyb3VuZChzZWxmLm9iamVjdF9zaXplIC8gNCksKSwgZHR5cGU9Y3AuZmxvYXQzMikKICAgICAgICBlbGlmIHRlbnNvcl90eXBlID09ICdweXRvcmNoJzoKICAgICAgICAgICAgc2VsZi5zZW5kID0gdG9yY2guY3VkYS5GbG9hdFRlbnNvcihzZWxmLm9iamVjdF9zaXplIC8vIDQpLmZpbGxfKDEuMCkKICAgICAgICAgICAgc2VsZi5yZWN2ID0gdG9yY2guY3VkYS5GbG9hdFRlbnNvcihzZWxmLm9iamVjdF9zaXplIC8vIDQpLmZpbGxfKDAuMCkKICAgICAgICBlbHNlOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3VucmVjb2duaXplZCB0ZW5zb3IgYmFja2VuZCcpCjx8ZmltX2VuZHw+"]
["e40fe58aeb90e92a9591c3b35a62570ef035b96d-1","e40fe58aeb90e92a9591c3b35a62570ef035b96d","PHxmaW1fcHJlZml4fD4KIyBEZXBlbmRlbmNpZXMKZnJvbSBmbGFzayBpbXBvcnQgRmxhc2ssIHJlbmRlcl90ZW1wbGF0ZSwganNvbmlmeSwgcmVkaXJlY3QKaW1wb3J0IHB5bW9uZ28KZnJvbSBweW1vbmdvIGltcG9ydCBNb25nb0NsaWVudAppbXBvcnQgc2NyYXBlX21hcnNfdGVzdAoKIyBjcmVhdGUgaW5zdGFuY2Ugb2YgRmxhc2sgYXBwCmFwcCA9IEZsYXNrKF9fbmFtZV9fKQoKIyB1c2UgZmxhc2tfcHltb25nbyB0byBzZXQgdXAgbW9uZ28gY29ubmVjdGlvbgoKIyBjbGllbnQgPSBNb25nb0NsaWVudCgibW9uZ29kYjovL2xvY2FsaG9zdDoyNzAxNyIpCgpjb25uID0gJ21vbmdvZGI6Ly9sb2NhbGhvc3Q6MjcwMTcnCmNsaWVudCA9IHB5bW9uZ28uTW9uZ29DbGllbnQoY29ubikKCjx8ZmltX2hvbGV8PgoKQGFwcC5yb3V0ZSgiLyIpCmRlZiBpbmRleCgpOgogICAgbWFycyA9IGRiLm5hc2FfbmV3c19tYXJzLmZpbmRfb25lKCkKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoImluZGV4Lmh0bWwiLCBtYXJzPW1hcnMpCgoKQGFwcC5yb3V0ZSgnL3NjcmFwZScpCmRlZiBzY3JhcGUoKToKICAgIG1hcnMgPSBkYi5uYXNhX25ld3NfbWFycwogICAgZGF0YSA9IHNjcmFwZV9tYXJzX3Rlc3Quc2NyYXBlKCkKCiAgICBwcmludChkYXRhKSAKICAgIG1hcnMudXBkYXRlKHt9LCBkYXRhLCB1cHNlcnQ9VHJ1ZSkKCiAgICByZXR1cm4gcmVkaXJlY3QoImh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC8iLCBjb2RlPTMwMikKICAgCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBhcHAucnVuKGRlYnVnPVRydWUpCiAgICBhcHAuamluamFfZW52LmF1dG9fcmVsb2FkID0gVHJ1ZQogICAgYXBwLmNvbmZpZ1snVEVNUExBVEVTX0FVVE9fUkVMT0FEJ10gPSBUcnVlCjx8ZmltX3N1ZmZpeHw+CmRiID0gY2xpZW50Lm5hc2FfbmV3c19tYXJzX2RiCgoKY29sbGVjdGlvbiA9IGRiLm5hc2FfbmV3c19tYXJzCjx8ZmltX2VuZHw+"]
["e40fe58aeb90e92a9591c3b35a62570ef035b96d-2","e40fe58aeb90e92a9591c3b35a62570ef035b96d","PHxmaW1fcHJlZml4fD4KIyBEZXBlbmRlbmNpZXMKZnJvbSBmbGFzayBpbXBvcnQgRmxhc2ssIHJlbmRlcl90ZW1wbGF0ZSwganNvbmlmeSwgcmVkaXJlY3QKaW1wb3J0IHB5bW9uZ28KZnJvbSBweW1vbmdvIGltcG9ydCBNb25nb0NsaWVudAppbXBvcnQgc2NyYXBlX21hcnNfdGVzdAoKIyBjcmVhdGUgaW5zdGFuY2Ugb2YgRmxhc2sgYXBwCmFwcCA9IEZsYXNrKF9fbmFtZV9fKQoKIyB1c2UgZmxhc2tfcHltb25nbyB0byBzZXQgdXAgbW9uZ28gY29ubmVjdGlvbgoKIyBjbGllbnQgPSBNb25nb0NsaWVudCgibW9uZ29kYjovL2xvY2FsaG9zdDoyNzAxNyIpCgpjb25uID0gJ21vbmdvZGI6Ly9sb2NhbGhvc3Q6MjcwMTcnCmNsaWVudCA9IHB5bW9uZ28uTW9uZ29DbGllbnQoY29ubikKCmRiID0gY2xpZW50Lm5hc2FfbmV3c19tYXJzX2RiCgoKY29sbGVjdGlvbiA9IGRiLm5hc2FfbmV3c19tYXJzCgpAYXBwLnJvdXRlKCIvIikKZGVmIGluZGV4KCk6CiAgICBtYXJzID0gZGIubmFzYV9uZXdzX21hcnMuZmluZF9vbmUoKQogICAgcmV0dXJuIHJlbmRlcl90ZW1wbGF0ZSgiaW5kZXguaHRtbCIsIG1hcnM9bWFycykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCkBhcHAucm91dGUoJy9zY3JhcGUnKQpkZWYgc2NyYXBlKCk6Cjx8ZmltX2VuZHw+"]
["cd7b22a73d4806a19e27217d532e360889ebd40c-1","cd7b22a73d4806a19e27217d532e360889ebd40c",{"$cut":{"chars":33884,"head":"PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMSBDdXJ0aW4gVW5pdmVyc2l0eQojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiMgQXV0aG9yOiBBbmllayBSb2Vsb2ZzLCBUdWFuIENoaWVuCgppbXBvcnQgb3MKZnJvbSBkYXRldGltZSBpbXBvcnQgdGltZWRlbHRhCmZyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgTWFnaWNNb2NrLCBjYWxsLCBwYXRjaAoKaW1wb3J0IGpzb25saW5lcwppbXBvcnQgcGVuZHVsdW0KZnJvbSBhaXJmbG93LnV0aWxzLnN0YXRlIGltcG9ydCBTdGF0ZQpmcm9tIGdvb2dsZS5jbG91ZC5iaWdxdWVyeSBpbXBvcnQgU291cmNlRm9ybWF0LCBUaW1lUGFydGl0aW9uaW5nVHlwZQoKZnJvbSBvYnNlcnZhdG9yeS5wbGF0Zm9ybS51dGlscy50ZXN0X3V0aWxzIGltcG9ydCBPYnNlcnZhdG9yeUVudmlyb25tZW50LCBPYnNlcnZhdG9yeVRlc3RDYXNlLCB0ZXN0X2ZpeHR1cmVzX3BhdGgKZnJvbSBvYnNlcnZhdG9yeS5wbGF0Zm9ybS51dGlscy53b3JrZmxvd191dGlscyBpbXBvcnQgKAogICAgYmF0Y2hfYmxvYl9uYW1lLAogICAgYmxvYl9uYW1lLAogICAgY3JlYXRlX2RhdGVfdGFibGVfaWQsCiAgICBnZXRfYnFfbG9hZF9pbmZvLAogICAgdGFibGVfaWRzX2Zyb21fcGF0aCwKKQpmcm9tIG9ic2VydmF0b3J5LnBsYXRmb3JtLndvcmtmbG93cy5zdHJlYW1fdGVsZXNjb3BlIGltcG9ydCBTdHJlYW1SZWxlYXNlLCBTdHJlYW1UZWxlc2NvcGUsIGdldF9kYXRhX2ludGVydmFsCgpERUZBVUxUX1NDSEVNQV9QQVRIID0gIi9wYXRoL3RvL3NjaGVtYXMiCgoKY2xhc3MgTXlUZXN0U3RyZWFtVGVsZXNjb3BlKFN0cmVhbVRlbGVzY29wZSk6CiAgICAiIiIKICAgIEdlbmVyaWMgV29ya2Zsb3cgdGVsZXNjb3BlIGZvciBydW5uaW5nIHRhc2tzLgogICAgIiIiCgogICAgREFHX0lEID0gInVuaXRfdGVzdF9zdHJlYW0iCgogICAgZGVmIF9faW5pdF9fKAogICAgICAgIHNlbGYsCiAgICAgICAgZGFnX2lkOiBzdHIgPSBEQUdfSUQsCiAgICAgICAgc3RhcnRfZGF0ZTogcGVuZHVsdW0uRGF0ZVRpbWUgPSBwZW5kdWx1bS5kYXRldGltZSgyMDIwLCAxLCAxKSwKICAgICAgICBzY2hlZHVsZV9pbnRlcnZhbDogc3RyID0gIkB3ZWVrbHkiLAogICAgICAgIGRhdGFzZXRfaWQ6IHN0ciA9ICJkYXRhc2V0X2lkIiwKICAgICAgICBtZXJnZV9wYXJ0aXRpb25fZmllbGQ6IHN0ciA9ICJpZCIsCiAgICAgICAgc2NoZW1hX2ZvbGRlcjogc3RyID0gREVGQVVMVF9TQ0hFTUFfUEFUSCwKICAgICAgICBzb3VyY2VfZm9ybWF0OiBzdHIgPSBTb3VyY2VGb3JtYXQuTkVXTElORV9ERUxJTUlURURfSlNPTiwKICAgICAgICBzY2hlbWFfcHJlZml4OiBzdHIgPSAicHJlZml4IiwKICAgICAgICBzY2hlbWFfdmVyc2lvbjogc3RyID0gIjEiLAogICAgICAgIGRhdGFzZXRfZGVzY3JpcHRpb246IHN0ciA9ICJkYXRhc2V0X2Rlc2NyaXB0aW9uIiwKICAgICAgICBiYXRjaF9sb2FkOiBib29sID0gRmFsc2UsCiAgICApOgogICAgICAgIHRhYmxlX2Rlc2NyaXB0aW9ucyA9IHsKICAgICAgICAgICAgIjEiOiAidGFibGUgZGVzY3JpcHRpb24gMSIsCiAgICAgICAgICAgICIyIjogInRhYmxlIGRlc2NyaXB0aW9uIDIiLAogICAgICAgICAgICBzZWxmLkRBR19JRDogInRhYmxlIGRlc2NyaXB0aW9uIGJhdGNoIiwKICAgICAgICB9CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygKICAgICAgICAgICAgZGFnX2lkLAogICAgICAgICAgICBzdGFydF9kYXRlLAogICAgICAgICAgICBzY2hlZHVsZV9pbnRlcnZhbCwKICAgICAgICAgICAgZGF0YXNldF9pZCwKICAgICAgICAgICAgbWVyZ2VfcGFydGl0aW9uX2ZpZWxkLAogICAgICAgICAgICBzY2hlbWFfZm9sZGVyLAogICAgICAgICAgICBzb3VyY2VfZm9ybWF0PXNvdXJjZV9mb3JtYXQsCiAgICAgICAgICAgIHNjaGVtYV9wcmVmaXg9c2NoZW1hX3ByZWZpeCwKICAgICAgICAgICAgc2NoZW1hX3ZlcnNpb249c2NoZW1hX3ZlcnNpb24sCiAgICAgICAgICAgIGRhdGFzZXRfZGVzY3JpcHRpb249ZGF0YXNldF9kZXNjcmlwdGlvbiwKICAgICAgICAgICAgdGFibGVfZGVzY3JpcHRpb25zPXRhYmxlX2Rlc2NyaXB0aW9ucywKICAgICAgICAgICAgYmF0Y2hfbG9hZD1iYXRjaF9sb2FkLAogICAgICAgICkKCiAgICAgICAgc2VsZi5hZGRfc2V0dXBfdGFzayhzZWxmLmNoZWNrX2RlcGVuZGVuY2llcykKICAgICAgICBzZWxmLmFkZF9zZXR1cF90YXNrKHNlbGYuc2V0X3JlbGVhc2VfaW5mbykKICAgICAgICBzZWxmLmFkZF90YXNrKHNlbGYudHJhbnNmb3JtKQogICAgICAgIHNlbGYuYWRkX3Rhc2soc2VsZi51cGxvYWRfdHJhbnNmb3JtZWQpCiAgICAgICAgc2VsZi5hZGRfdGFzayhzZWxmLmJxX2xvYWRfcGFydGl0aW9uKQogICAgICAgIHNlbGYuYWRkX3Rhc2tfY2hhaW4oW3NlbGYuYnFfZGVsZXRlX29sZCwgc2VsZi5icV9hcHBlbmRfbmV3LCBzZWxmLmNsZWFudXBdLCB0cmlnZ2VyX3J1bGU9Im5vbmVfZmFpbGVkIikKCiAgICAgICAgc2VsZi5maWxlX2NvbnRlbnQgPSB7CiAgICAgICAgICAgICJydW4xIjogewogICAgICAgICAgICAgICAgImZpbGUxIjogWwogICAgICAgICAgICAgICAg"}}]
["cd7b22a73d4806a19e27217d532e360889ebd40c-2","cd7b22a73d4806a19e27217d532e360889ebd40c",{"$cut":{"chars":46252,"head":"PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMSBDdXJ0aW4gVW5pdmVyc2l0eQojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiMgQXV0aG9yOiBBbmllayBSb2Vsb2ZzLCBUdWFuIENoaWVuCgppbXBvcnQgb3MKZnJvbSBkYXRldGltZSBpbXBvcnQgdGltZWRlbHRhCmZyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgTWFnaWNNb2NrLCBjYWxsLCBwYXRjaAoKaW1wb3J0IGpzb25saW5lcwppbXBvcnQgcGVuZHVsdW0KZnJvbSBhaXJmbG93LnV0aWxzLnN0YXRlIGltcG9ydCBTdGF0ZQpmcm9tIGdvb2dsZS5jbG91ZC5iaWdxdWVyeSBpbXBvcnQgU291cmNlRm9ybWF0LCBUaW1lUGFydGl0aW9uaW5nVHlwZQoKZnJvbSBvYnNlcnZhdG9yeS5wbGF0Zm9ybS51dGlscy50ZXN0X3V0aWxzIGltcG9ydCBPYnNlcnZhdG9yeUVudmlyb25tZW50LCBPYnNlcnZhdG9yeVRlc3RDYXNlLCB0ZXN0X2ZpeHR1cmVzX3BhdGgKZnJvbSBvYnNlcnZhdG9yeS5wbGF0Zm9ybS51dGlscy53b3JrZmxvd191dGlscyBpbXBvcnQgKAogICAgYmF0Y2hfYmxvYl9uYW1lLAogICAgYmxvYl9uYW1lLAogICAgY3JlYXRlX2RhdGVfdGFibGVfaWQsCiAgICBnZXRfYnFfbG9hZF9pbmZvLAogICAgdGFibGVfaWRzX2Zyb21fcGF0aCwKKQpmcm9tIG9ic2VydmF0b3J5LnBsYXRmb3JtLndvcmtmbG93cy5zdHJlYW1fdGVsZXNjb3BlIGltcG9ydCBTdHJlYW1SZWxlYXNlLCBTdHJlYW1UZWxlc2NvcGUsIGdldF9kYXRhX2ludGVydmFsCgpERUZBVUxUX1NDSEVNQV9QQVRIID0gIi9wYXRoL3RvL3NjaGVtYXMiCgoKY2xhc3MgTXlUZXN0U3RyZWFtVGVsZXNjb3BlKFN0cmVhbVRlbGVzY29wZSk6CiAgICAiIiIKICAgIEdlbmVyaWMgV29ya2Zsb3cgdGVsZXNjb3BlIGZvciBydW5uaW5nIHRhc2tzLgogICAgIiIiCgogICAgREFHX0lEID0gInVuaXRfdGVzdF9zdHJlYW0iCgogICAgZGVmIF9faW5pdF9fKAogICAgICAgIHNlbGYsCiAgICAgICAgZGFnX2lkOiBzdHIgPSBEQUdfSUQsCiAgICAgICAgc3RhcnRfZGF0ZTogcGVuZHVsdW0uRGF0ZVRpbWUgPSBwZW5kdWx1bS5kYXRldGltZSgyMDIwLCAxLCAxKSwKICAgICAgICBzY2hlZHVsZV9pbnRlcnZhbDogc3RyID0gIkB3ZWVrbHkiLAogICAgICAgIGRhdGFzZXRfaWQ6IHN0ciA9ICJkYXRhc2V0X2lkIiwKICAgICAgICBtZXJnZV9wYXJ0aXRpb25fZmllbGQ6IHN0ciA9ICJpZCIsCiAgICAgICAgc2NoZW1hX2ZvbGRlcjogc3RyID0gREVGQVVMVF9TQ0hFTUFfUEFUSCwKICAgICAgICBzb3VyY2VfZm9ybWF0OiBzdHIgPSBTb3VyY2VGb3JtYXQuTkVXTElORV9ERUxJTUlURURfSlNPTiwKICAgICAgICBzY2hlbWFfcHJlZml4OiBzdHIgPSAicHJlZml4IiwKICAgICAgICBzY2hlbWFfdmVyc2lvbjogc3RyID0gIjEiLAogICAgICAgIGRhdGFzZXRfZGVzY3JpcHRpb246IHN0ciA9ICJkYXRhc2V0X2Rlc2NyaXB0aW9uIiwKICAgICAgICBiYXRjaF9sb2FkOiBib29sID0gRmFsc2UsCiAgICApOgogICAgICAgIHRhYmxlX2Rlc2NyaXB0aW9ucyA9IHsKICAgICAgICAgICAgIjEiOiAidGFibGUgZGVzY3JpcHRpb24gMSIsCiAgICAgICAgICAgICIyIjogInRhYmxlIGRlc2NyaXB0aW9uIDIiLAogICAgICAgICAgICBzZWxmLkRBR19JRDogInRhYmxlIGRlc2NyaXB0aW9uIGJhdGNoIiwKICAgICAgICB9CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygKICAgICAgICAgICAgZGFnX2lkLAogICAgICAgICAgICBzdGFydF9kYXRlLAogICAgICAgICAgICBzY2hlZHVsZV9pbnRlcnZhbCwKICAgICAgICAgICAgZGF0YXNldF9pZCwKICAgICAgICAgICAgbWVyZ2VfcGFydGl0aW9uX2ZpZWxkLAogICAgICAgICAgICBzY2hlbWFfZm9sZGVyLAogICAgICAgICAgICBzb3VyY2VfZm9ybWF0PXNvdXJjZV9mb3JtYXQsCiAgICAgICAgICAgIHNjaGVtYV9wcmVmaXg9c2NoZW1hX3ByZWZpeCwKICAgICAgICAgICAgc2NoZW1hX3ZlcnNpb249c2NoZW1hX3ZlcnNpb24sCiAgICAgICAgICAgIGRhdGFzZXRfZGVzY3JpcHRpb249ZGF0YXNldF9kZXNjcmlwdGlvbiwKICAgICAgICAgICAgdGFibGVfZGVzY3JpcHRpb25zPXRhYmxlX2Rlc2NyaXB0aW9ucywKICAgICAgICAgICAgYmF0Y2hfbG9hZD1iYXRjaF9sb2FkLAogICAgICAgICkKCiAgICAgICAgc2VsZi5hZGRfc2V0dXBfdGFzayhzZWxmLmNoZWNrX2RlcGVuZGVuY2llcykKICAgICAgICBzZWxmLmFkZF9zZXR1cF90YXNrKHNlbGYuc2V0X3JlbGVhc2VfaW5mbykKICAgICAgICBzZWxmLmFkZF90YXNrKHNlbGYudHJhbnNmb3JtKQogICAgICAgIHNlbGYuYWRkX3Rhc2soc2VsZi51cGxvYWRfdHJhbnNmb3JtZWQpCiAgICAgICAgc2VsZi5hZGRfdGFzayhzZWxmLmJxX2xvYWRfcGFydGl0aW9uKQogICAgICAgIHNlbGYuYWRkX3Rhc2tfY2hhaW4oW3NlbGYuYnFfZGVsZXRlX29sZCwgc2VsZi5icV9hcHBlbmRfbmV3LCBzZWxmLmNsZWFudXBdLCB0cmlnZ2VyX3J1bGU9Im5vbmVfZmFpbGVkIikKCiAgICAgICAgc2VsZi5maWxlX2NvbnRlbnQgPSB7CiAgICAgICAgICAgICJydW4xIjogewogICAgICAgICAgICAgICAgImZpbGUxIjogWwogICAgICAgICAgICAgICAg"}}]
["cd7b22a73d4806a19e27217d532e360889ebd40c-3","cd7b22a73d4806a19e27217d532e360889ebd40c",{"$cut":{"chars":30664,"head":"PHxmaW1fcHJlZml4fD4KIyBDb3B5cmlnaHQgMjAyMSBDdXJ0aW4gVW5pdmVyc2l0eQojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiMgQXV0aG9yOiBBbmllayBSb2Vsb2ZzLCBUdWFuIENoaWVuCgppbXBvcnQgb3MKZnJvbSBkYXRldGltZSBpbXBvcnQgdGltZWRlbHRhCmZyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgTWFnaWNNb2NrLCBjYWxsLCBwYXRjaAoKaW1wb3J0IGpzb25saW5lcwppbXBvcnQgcGVuZHVsdW0KZnJvbSBhaXJmbG93LnV0aWxzLnN0YXRlIGltcG9ydCBTdGF0ZQpmcm9tIGdvb2dsZS5jbG91ZC5iaWdxdWVyeSBpbXBvcnQgU291cmNlRm9ybWF0LCBUaW1lUGFydGl0aW9uaW5nVHlwZQoKZnJvbSBvYnNlcnZhdG9yeS5wbGF0Zm9ybS51dGlscy50ZXN0X3V0aWxzIGltcG9ydCBPYnNlcnZhdG9yeUVudmlyb25tZW50LCBPYnNlcnZhdG9yeVRlc3RDYXNlLCB0ZXN0X2ZpeHR1cmVzX3BhdGgKZnJvbSBvYnNlcnZhdG9yeS5wbGF0Zm9ybS51dGlscy53b3JrZmxvd191dGlscyBpbXBvcnQgKAogICAgYmF0Y2hfYmxvYl9uYW1lLAogICAgYmxvYl9uYW1lLAogICAgY3JlYXRlX2RhdGVfdGFibGVfaWQsCiAgICBnZXRfYnFfbG9hZF9pbmZvLAogICAgdGFibGVfaWRzX2Zyb21fcGF0aCwKKQpmcm9tIG9ic2VydmF0b3J5LnBsYXRmb3JtLndvcmtmbG93cy5zdHJlYW1fdGVsZXNjb3BlIGltcG9ydCBTdHJlYW1SZWxlYXNlLCBTdHJlYW1UZWxlc2NvcGUsIGdldF9kYXRhX2ludGVydmFsCgpERUZBVUxUX1NDSEVNQV9QQVRIID0gIi9wYXRoL3RvL3NjaGVtYXMiCgoKY2xhc3MgTXlUZXN0U3RyZWFtVGVsZXNjb3BlKFN0cmVhbVRlbGVzY29wZSk6CiAgICAiIiIKICAgIEdlbmVyaWMgV29ya2Zsb3cgdGVsZXNjb3BlIGZvciBydW5uaW5nIHRhc2tzLgogICAgIiIiCgogICAgREFHX0lEID0gInVuaXRfdGVzdF9zdHJlYW0iCgogICAgZGVmIF9faW5pdF9fKAogICAgICAgIHNlbGYsCiAgICAgICAgZGFnX2lkOiBzdHIgPSBEQUdfSUQsCiAgICAgICAgc3RhcnRfZGF0ZTogcGVuZHVsdW0uRGF0ZVRpbWUgPSBwZW5kdWx1bS5kYXRldGltZSgyMDIwLCAxLCAxKSwKICAgICAgICBzY2hlZHVsZV9pbnRlcnZhbDogc3RyID0gIkB3ZWVrbHkiLAogICAgICAgIGRhdGFzZXRfaWQ6IHN0ciA9ICJkYXRhc2V0X2lkIiwKICAgICAgICBtZXJnZV9wYXJ0aXRpb25fZmllbGQ6IHN0ciA9ICJpZCIsCiAgICAgICAgc2NoZW1hX2ZvbGRlcjogc3RyID0gREVGQVVMVF9TQ0hFTUFfUEFUSCwKICAgICAgICBzb3VyY2VfZm9ybWF0OiBzdHIgPSBTb3VyY2VGb3JtYXQuTkVXTElORV9ERUxJTUlURURfSlNPTiwKICAgICAgICBzY2hlbWFfcHJlZml4OiBzdHIgPSAicHJlZml4IiwKICAgICAgICBzY2hlbWFfdmVyc2lvbjogc3RyID0gIjEiLAogICAgICAgIGRhdGFzZXRfZGVzY3JpcHRpb246IHN0ciA9ICJkYXRhc2V0X2Rlc2NyaXB0aW9uIiwKICAgICAgICBiYXRjaF9sb2FkOiBib29sID0gRmFsc2UsCiAgICApOgogICAgICAgIHRhYmxlX2Rlc2NyaXB0aW9ucyA9IHsKICAgICAgICAgICAgIjEiOiAidGFibGUgZGVzY3JpcHRpb24gMSIsCiAgICAgICAgICAgICIyIjogInRhYmxlIGRlc2NyaXB0aW9uIDIiLAogICAgICAgICAgICBzZWxmLkRBR19JRDogInRhYmxlIGRlc2NyaXB0aW9uIGJhdGNoIiwKICAgICAgICB9CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygKICAgICAgICAgICAgZGFnX2lkLAogICAgICAgICAgICBzdGFydF9kYXRlLAogICAgICAgICAgICBzY2hlZHVsZV9pbnRlcnZhbCwKICAgICAgICAgICAgZGF0YXNldF9pZCwKICAgICAgICAgICAgbWVyZ2VfcGFydGl0aW9uX2ZpZWxkLAogICAgICAgICAgICBzY2hlbWFfZm9sZGVyLAogICAgICAgICAgICBzb3VyY2VfZm9ybWF0PXNvdXJjZV9mb3JtYXQsCiAgICAgICAgICAgIHNjaGVtYV9wcmVmaXg9c2NoZW1hX3ByZWZpeCwKICAgICAgICAgICAgc2NoZW1hX3ZlcnNpb249c2NoZW1hX3ZlcnNpb24sCiAgICAgICAgICAgIGRhdGFzZXRfZGVzY3JpcHRpb249ZGF0YXNldF9kZXNjcmlwdGlvbiwKICAgICAgICAgICAgdGFibGVfZGVzY3JpcHRpb25zPXRhYmxlX2Rlc2NyaXB0aW9ucywKICAgICAgICAgICAgYmF0Y2hfbG9hZD1iYXRjaF9sb2FkLAogICAgICAgICkKCiAgICAgICAgc2VsZi5hZGRfc2V0dXBfdGFzayhzZWxmLmNoZWNrX2RlcGVuZGVuY2llcykKICAgICAgICBzZWxmLmFkZF9zZXR1cF90YXNrKHNlbGYuc2V0X3JlbGVhc2VfaW5mbykKICAgICAgICBzZWxmLmFkZF90YXNrKHNlbGYudHJhbnNmb3JtKQogICAgICAgIHNlbGYuYWRkX3Rhc2soc2VsZi51cGxvYWRfdHJhbnNmb3JtZWQpCiAgICAgICAgc2VsZi5hZGRfdGFzayhzZWxmLmJxX2xvYWRfcGFydGl0aW9uKQogICAgICAgIHNlbGYuYWRkX3Rhc2tfY2hhaW4oW3NlbGYuYnFfZGVsZXRlX29sZCwgc2VsZi5icV9hcHBlbmRfbmV3LCBzZWxmLmNsZWFudXBdLCB0cmlnZ2VyX3J1bGU9Im5vbmVfZmFpbGVkIikKCiAgICAgICAgc2VsZi5maWxlX2NvbnRlbnQgPSB7CiAgICAgICAgICAgICJydW4xIjogewogICAgICAgICAgICAgICAgImZpbGUxIjogWwogICAgICAgICAgICAgICAg"}}]
["84487eed9ed387baa271285400747e278cefab43-1","84487eed9ed387baa271285400747e278cefab43","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgZnJvbSBhcmdwYXJzZSBpbXBvcnQgQXJndW1lbnRQYXJzZXIsIEZpbGVUeXBlCiAgICBpbXBvcnQgY3N2CiAgICBpbXBvcnQgc3lzCiAgICBhcmdfcGFyc2VyID0gQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J2NyZWF0ZSBhIENTViBmaWxlIHdpdGggc3RhcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaW5lIHBvc2l0aW9ucyBhbmQgbGluZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xlbmd0aHMgZm9yIGEgZ2l2ZW4gZmlsZScpCiAgICBhcmdfcGFyc2VyLmFkZF9hcmd1bWVudCgnaW5wdXRfZmlsZScsIHR5cGU9RmlsZVR5cGUoJ3JiJyksCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2ZpbGUgdG8gaW5kZXgnKQo8fGZpbV9lbmR8Pg=="]
["84487eed9ed387baa271285400747e278cefab43-2","84487eed9ed387baa271285400747e278cefab43","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgZnJvbSBhcmdwYXJzZSBpbXBvcnQgQXJndW1lbnRQYXJzZXIsIEZpbGVUeXBlCiAgICBpbXBvcnQgY3N2CiAgICBpbXBvcnQgc3lzCiAgICBhcmdfcGFyc2VyID0gQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J2NyZWF0ZSBhIENTViBmaWxlIHdpdGggc3RhcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaW5lIHBvc2l0aW9ucyBhbmQgbGluZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xlbmd0aHMgZm9yIGEgZ2l2ZW4gZmlsZScpCiAgICBhcmdfcGFyc2VyLmFkZF9hcmd1bWVudCgnaW5wdXRfZmlsZScsIHR5cGU9RmlsZVR5cGUoJ3JiJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdmaWxlIHRvIGluZGV4JykKICAgIGFyZ19wYXJzZXIuYWRkX2FyZ3VtZW50KCctLW91dHB1dF9maWxlJywgdHlwZT1GaWxlVHlwZSgndycpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQ1NWIG91dHB1dCBmaWxlJykKICAgIGFyZ19wYXJzZXIuYWRkX2FyZ3VtZW50KCctLW5vX2hlYWRlcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkbyBub3QgYWRkIGhlYWRlciByb3cgdG8gQ1NWIGZpbGUnKQogICAgb3B0aW9ucyA9IGFyZ19wYXJzZXIucGFyc2VfYXJncygpCiAgICBpZiBvcHRpb25zLm91dHB1dF9maWxlOgogICAgICAgIGNzdl93cml0ZXIgPSBjc3Yud3JpdGVyKG9wdGlvbnMub3V0cHV0X2ZpbGUpCiAgICBlbHNlOgogICAgICAgIGNzdl93cml0ZXIgPSBjc3Yud3JpdGVyKHN5cy5zdGRvdXQpCiAgICBpZiBub3Qgb3B0aW9ucy5ub19oZWFkZXI6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBjc3Zfd3JpdGVyLndyaXRlcm93KFsncG9zaXRpb24nLCAnbGluZV9sZW5ndGgnXSkKPHxmaW1fZW5kfD4="]
["84487eed9ed387baa271285400747e278cefab43-3","84487eed9ed387baa271285400747e278cefab43","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgZnJvbSBhcmdwYXJzZSBpbXBvcnQgQXJndW1lbnRQYXJzZXIsIEZpbGVUeXBlCiAgICBpbXBvcnQgY3N2CiAgICBpbXBvcnQgc3lzCiAgICBhcmdfcGFyc2VyID0gQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J2NyZWF0ZSBhIENTViBmaWxlIHdpdGggc3RhcnQgJwo8fGZpbV9ob2xlfD4KICAgIGFyZ19wYXJzZXIuYWRkX2FyZ3VtZW50KCdpbnB1dF9maWxlJywgdHlwZT1GaWxlVHlwZSgncmInKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2ZpbGUgdG8gaW5kZXgnKQogICAgYXJnX3BhcnNlci5hZGRfYXJndW1lbnQoJy0tb3V0cHV0X2ZpbGUnLCB0eXBlPUZpbGVUeXBlKCd3JyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdDU1Ygb3V0cHV0IGZpbGUnKQogICAgYXJnX3BhcnNlci5hZGRfYXJndW1lbnQoJy0tbm9faGVhZGVyJywgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2RvIG5vdCBhZGQgaGVhZGVyIHJvdyB0byBDU1YgZmlsZScpCiAgICBvcHRpb25zID0gYXJnX3BhcnNlci5wYXJzZV9hcmdzKCkKICAgIGlmIG9wdGlvbnMub3V0cHV0X2ZpbGU6CiAgICAgICAgY3N2X3dyaXRlciA9IGNzdi53cml0ZXIob3B0aW9ucy5vdXRwdXRfZmlsZSkKICAgIGVsc2U6CiAgICAgICAgY3N2X3dyaXRlciA9IGNzdi53cml0ZXIoc3lzLnN0ZG91dCkKICAgIGlmIG5vdCBvcHRpb25zLm5vX2hlYWRlcjoKICAgICAgICBjc3Zfd3JpdGVyLndyaXRlcm93KFsncG9zaXRpb24nLCAnbGluZV9sZW5ndGgnXSkKICAgIGMgPSBvcHRpb25zLmlucHV0X2ZpbGUucmVhZCgxKQogICAgbGVuZ3RoID0gMAogICAgcG9zID0gMAogICAgbGluZV9wb3MgPSAwCiAgICB3aGlsZSBjOgogICAgICAgIHBvcyArPSAxCiAgICAgICAgaWYgYyA9PSBiJ1xyJzoKICAgICAgICAgICAgcGFzcwogICAgICAgIGVsaWYgYyA9PSBiJ1xuJzoKICAgICAgICAgICAgY3N2X3dyaXRlci53cml0ZXJvdyhbbGluZV9wb3MsIGxlbmd0aF0pCiAgICAgICAgICAgIGxlbmd0aCA9IDAKICAgICAgICAgICAgbGluZV9wb3MgPSBwb3MKICAgICAgICBlbHNlOgogICAgICAgICAgICBsZW5ndGggKz0gMQogICAgICAgIGMgPSBvcHRpb25zLmlucHV0X2ZpbGUucmVhZCgxKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaW5lIHBvc2l0aW9ucyBhbmQgbGluZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xlbmd0aHMgZm9yIGEgZ2l2ZW4gZmlsZScpCjx8ZmltX2VuZHw+"]
["ffbcef8142ca5041f956e3a3460f25fc83a13b56-1","ffbcef8142ca5041f956e3a3460f25fc83a13b56","PHxmaW1fcHJlZml4fD4KY2xhc3MgQ3J5cHRGdW5jdGlvbnMoKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgY2xhc3MgQ3J5cHRGdW5jdGlvbkJsb2NrKCk6CiAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmMsIGtleSA9IE5vbmUpIC0+IE5vbmU6CiAgICAgICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMKICAgICAgICAgICAgc2VsZi5rZXkgPSBbXSBpZiBrZXkgaXMgTm9uZSBlbHNlIGtleQo8fGZpbV9lbmR8Pg=="]
["ffbcef8142ca5041f956e3a3460f25fc83a13b56-2","ffbcef8142ca5041f956e3a3460f25fc83a13b56","PHxmaW1fcHJlZml4fD4KY2xhc3MgQ3J5cHRGdW5jdGlvbnMoKToKICAgIGNsYXNzIENyeXB0RnVuY3Rpb25CbG9jaygpOgogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jLCBrZXkgPSBOb25lKSAtPiBOb25lOgogICAgICAgICAgICBzZWxmLmZ1bmMgPSBmdW5jCiAgICAgICAgICAgIHNlbGYua2V5ID0gW10gaWYga2V5IGlzIE5vbmUgZWxzZSBrZXkKCiAgICAgICAgZGVmIGV4ZWN1dGUoc2VsZiwgbnVtOiBpbnQpIC0+IGludDoKICAgICAgICAgICAgcmV0dXJuIHNlbGYuZnVuYyhudW0sICpzZWxmLmtleSkKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5jcnlwdEZ1bmNzID0gW10KCiAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5jcnlwdEZ1bmNzKQoKICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CiAgICAgICAgcmV0dXJuIHNlbGYuY3J5cHRGdW5jc1tpbmRleF0KCiAgICBkZWYgX19zdHJfXyhzZWxmKSAtPiBzdHI6CiAgICAgICAgczogc3RyID0gZiJcbnsnRnVuY3Rpb24nOjMyfUtleXNcblxuIgogICAgICAgIGZvciBmdW5jQmxvY2sgaW4gc2VsZjoKICAgICAgICAgICAgcyArPSBmIntmdW5jQmxvY2suZnVuYy5fX25hbWVfXzozMn17ZnVuY0Jsb2NrLmtleX1cbiIKCiAgICAgICAgcmV0dXJuIHMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiBhZGRGdW5jKHNlbGYsIGZ1bmMsIGtleSA9IE5vbmUpIC0+IE5vbmU6CiAgICAgICAgc2VsZi5jcnlwdEZ1bmNzICs9IFtzZWxmLkNyeXB0RnVuY3Rpb25CbG9jayhmdW5jLCBrZXkpXQoKPHxmaW1fZW5kfD4="]
["ffbcef8142ca5041f956e3a3460f25fc83a13b56-3","ffbcef8142ca5041f956e3a3460f25fc83a13b56","PHxmaW1fcHJlZml4fD4KY2xhc3MgQ3J5cHRGdW5jdGlvbnMoKToKICAgIGNsYXNzIENyeXB0RnVuY3Rpb25CbG9jaygpOgogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jLCBrZXkgPSBOb25lKSAtPiBOb25lOgogICAgICAgICAgICBzZWxmLmZ1bmMgPSBmdW5jCiAgICAgICAgICAgIHNlbGYua2V5ID0gW10gaWYga2V5IGlzIE5vbmUgZWxzZSBrZXkKCiAgICAgICAgZGVmIGV4ZWN1dGUoc2VsZiwgbnVtOiBpbnQpIC0+IGludDoKICAgICAgICAgICAgcmV0dXJuIHNlbGYuZnVuYyhudW0sICpzZWxmLmtleSkKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5jcnlwdEZ1bmNzID0gW10KCiAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5jcnlwdEZ1bmNzKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKICAgICAgICByZXR1cm4gc2VsZi5jcnlwdEZ1bmNzW2luZGV4XQoKPHxmaW1fZW5kfD4="]
["263370f2c5ec0dc867a75fb72523a9e5dd98d2cb-1","263370f2c5ec0dc867a75fb72523a9e5dd98d2cb","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFzeW5jaW8KaW1wb3J0IHdlYnNvY2tldHMKZnJvbSBzb2NrZXQgaW1wb3J0IEFkZHJlc3NGYW1pbHkKCmZyb20gRXZlbnRXcml0ZXIgaW1wb3J0IEV2ZW50V3JpdGVyCjx8ZmltX2hvbGV8PgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHdzX2dhcF9jbG9zZXJfY2FsbGJhY2spOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYuX19jbGllbnRzID0gc2V0KCkKICAgICAgICBzZWxmLl9fc2VydmVyID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpLnJ1bl91bnRpbF9jb21wbGV0ZSh3ZWJzb2NrZXRzLnNlcnZlKHNlbGYuX19oYW5kbGVfbmV3X2NsaWVudCwgJycsIDAsIGNvbXByZXNzaW9uPU5vbmUpKQogICAgICAgIHNlbGYuX19wb3J0ID0gW3MgZm9yIHMgaW4gc2VsZi5fX3NlcnZlci5zZXJ2ZXIuc29ja2V0cyBpZiBzLmZhbWlseSA9PSBBZGRyZXNzRmFtaWx5LkFGX0lORVRdWzBdLmdldHNvY2tuYW1lKClbMV0KICAgICAgICBzZWxmLl9fd3NfZ2FwX2Nsb3Nlcl9jYWxsYmFjayA9IHdzX2dhcF9jbG9zZXJfY2FsbGJhY2sKCgogICAgZGVmIHBvcnQoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX19wb3J0CgoKICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CiAgICAgICAgaWYgc3VwZXIoKS5pc19vcGVuKCk6CiAgICAgICAgICAgIHN1cGVyKCkuX0V2ZW50V3JpdGVyX19jbG9zZSgpCiAgICAgICAgICAgIHNlbGYuX19zZXJ2ZXIuY2xvc2UoKSAgIyBUT0RPIGlzIHRoaXMgc3VmZmljaWVudD8KCgogICAgYXN5bmMgZGVmIF9faGFuZGxlX25ld19jbGllbnQoc2VsZiwgd2Vic29ja2V0LCBwYXRoKToKICAgICAgICAjIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYWF1Z3VzdGluL3dlYnNvY2tldHMvaXNzdWVzLzU1MSBmb3IgZXJyb3JzIGluIGxvZ3MKICAgICAgICBzZWxmLl9fY2xpZW50cy5hZGQod2Vic29ja2V0KQogICAgICAgIHRyeToKICAgICAgICAgICAgaGFuZHNoYWtlRG9uZSA9IEZhbHNlCiAgICAgICAgICAgIGFzeW5jIGZvciBtc2cgaW4gd2Vic29ja2V0OgogICAgICAgICAgICAgICAgaWYgbm90IGhhbmRzaGFrZURvbmU6CiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG1zZy5lbmRzd2l0aCgnJCcpCiAgICAgICAgICAgICAgICAgICAgbXNnID0gbXNnWzotMV0KICAgICAgICAgICAgICAgICAgICBmYWlsX29yX2RhdGFfdG9fY2xvc2VfdGhlX2dhcCA9IHNlbGYuX193c19nYXBfY2xvc2VyX2NhbGxiYWNrKG1zZykKICAgICAgICAgICAgICAgICAgICBpZiBmYWlsX29yX2RhdGFfdG9fY2xvc2VfdGhlX2dhcCBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB3ZWJzb2NrZXQuc2VuZChQbGVhc2VSZXN0YXJ0RXZlbnQoKS5idWlsZGVyKCkudG9fanNvbigpKQogICAgICAgICAgICAgICAgICAgIGVsaWYgMCA9PSBsZW4oZmFpbF9vcl9kYXRhX3RvX2Nsb3NlX3RoZV9nYXApOgogICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzID0gZmFpbF9vcl9kYXRhX3RvX2Nsb3NlX3RoZV9nYXAKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGV2IGluIGV2ZW50czoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHdlYnNvY2tldC5zZW5kKGV2LmJ1aWxkZXIoKS50b19qc29uKCkpCiAgICAgICAgICAgICAgICAgICAgaGFuZHNoYWtlRG9uZSA9IFRydWUKICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICBzZWxmLl9fY2xpZW50cy5yZW1vdmUod2Vic29ja2V0KQoKCiAgICBhc3luYyBkZWYgd3JpdGUoc2VsZiwgZXZlbnRfbWVzc2FnZV9idWlsZGVyKToKICAgICAgICBhc3NlcnQgc3VwZXIoKS5pc19vcGVuKCkKICAgICAgICBpZiBsZW4oc2VsZi5fX2NsaWVudHMpOgogICAgICAgICAgICBhd2FpdCBhc3luY2lvLndhaXQoW2Muc2VuZChldmVudF9tZXNzYWdlX2J1aWxkZXIudG9fanNvbigpKSBmb3IgYyBpbiBzZWxmLl9fY2xpZW50c10pCgo8fGZpbV9zdWZmaXh8Pgpmcm9tIGV2ZW50cy5QbGVhc2VSZXN0YXJ0RXZlbnQgaW1wb3J0IFBsZWFzZVJlc3RhcnRFdmVudAoKCmNsYXNzIFdTQnJvYWRjYXN0RXZlbnRXcml0ZXIoRXZlbnRXcml0ZXIpOgo8fGZpbV9lbmR8Pg=="]
["f2f6c3ab215a6072278b443776433d8ef34ff3b5-1","f2f6c3ab215a6072278b443776433d8ef34ff3b5","PHxmaW1fcHJlZml4fD4KZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKZnJvbSB0ZXN0cyBpbXBvcnQgVGVzdFByZWRpY3Rpb24KZnJvbSB4Z2Jvb3N0IGltcG9ydCBYR0JDbGFzc2lmaWVyCgoKY2xhc3MgWEdCQ2xhc3NpZmllclRlc3QoVGVzdFByZWRpY3Rpb24sIFRlc3RDYXNlKToKCiAgICBwcmVkaWN0X21ldGhvZCA9ICJwcmVkaWN0X3Byb2JhIgoKICAgIGRlZiBfZml0KHNlbGYpOgogICAgICAgIHNlbGYubW9kZWxzID0gWwogICAgICAgICAgICBYR0JDbGFzc2lmaWVyKAogICAgICAgICAgICAgICAgbWF4X2RlcHRoPTcsCiAgICAgICAgICAgICAgICBuX2VzdGltYXRvcnM9MTAsCiAgICAgICAgICAgICAgICBsZWFybmluZ19yYXRlPTAuMSwKICAgICAgICAgICAgICAgIG5fam9icz0tMSwKICAgICAgICAgICAgICAgIHZlcmJvc2U9VHJ1ZSwKICAgICAgICAgICAgICAgIG1pc3Npbmc9LTEsCiAgICAgICAgICAgICAgICBib29zdGVyPSJkYXJ0IiwKICAgICAgICAgICAgICAgIGJhc2Vfc2NvcmU9MC45LAogICAgICAgICAgICAgICAgcmFuZG9tX3N0YXRlPXNlbGYuc2VlZAogICAgICAgICAgICApLmZpdChzZWxmLnhfdGVzdCwgc2VsZi5iaW5hcnlfY2xhc3NfeV90cmFpbiksCiAgICAgICAgICAgIFhHQkNsYXNzaWZpZXIoCiAgICAgICAgICAgICAgICBtYXhfZGVwdGg9MjAsCiAgICAgICAgICAgICAgICBuX2VzdGltYXRvcnM9MjAsCjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgcmFuZG9tX3N0YXRlPXNlbGYuc2VlZAogICAgICAgICAgICApLmZpdChzZWxmLnhfdGVzdCwgc2VsZi5tdWx0aV9jbGFzc195X3RyYWluKQogICAgICAgIF0KPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIGxlYXJuaW5nX3JhdGU9MC4wMSwKICAgICAgICAgICAgICAgIG5fam9icz0tMSwKICAgICAgICAgICAgICAgIHZlcmJvc2U9VHJ1ZSwKICAgICAgICAgICAgICAgIGJvb3N0ZXI9ImdidHJlZSIsCjx8ZmltX2VuZHw+"]
["f2f6c3ab215a6072278b443776433d8ef34ff3b5-2","f2f6c3ab215a6072278b443776433d8ef34ff3b5","PHxmaW1fcHJlZml4fD4KZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKZnJvbSB0ZXN0cyBpbXBvcnQgVGVzdFByZWRpY3Rpb24KZnJvbSB4Z2Jvb3N0IGltcG9ydCBYR0JDbGFzc2lmaWVyCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpjbGFzcyBYR0JDbGFzc2lmaWVyVGVzdChUZXN0UHJlZGljdGlvbiwgVGVzdENhc2UpOgoKICAgIHByZWRpY3RfbWV0aG9kID0gInByZWRpY3RfcHJvYmEiCgo8fGZpbV9lbmR8Pg=="]
["f2f6c3ab215a6072278b443776433d8ef34ff3b5-3","f2f6c3ab215a6072278b443776433d8ef34ff3b5","PHxmaW1fcHJlZml4fD4KZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKZnJvbSB0ZXN0cyBpbXBvcnQgVGVzdFByZWRpY3Rpb24KZnJvbSB4Z2Jvb3N0IGltcG9ydCBYR0JDbGFzc2lmaWVyCgoKY2xhc3MgWEdCQ2xhc3NpZmllclRlc3QoVGVzdFByZWRpY3Rpb24sIFRlc3RDYXNlKToKCiAgICBwcmVkaWN0X21ldGhvZCA9ICJwcmVkaWN0X3Byb2JhIgoKICAgIGRlZiBfZml0KHNlbGYpOgogICAgICAgIHNlbGYubW9kZWxzID0gWwogICAgICAgICAgICBYR0JDbGFzc2lmaWVyKAogICAgICAgICAgICAgICAgbWF4X2RlcHRoPTcsCiAgICAgICAgICAgICAgICBuX2VzdGltYXRvcnM9MTAsCiAgICAgICAgICAgICAgICBsZWFybmluZ19yYXRlPTAuMSwKICAgICAgICAgICAgICAgIG5fam9icz0tMSwKICAgICAgICAgICAgICAgIHZlcmJvc2U9VHJ1ZSwKICAgICAgICAgICAgICAgIG1pc3Npbmc9LTEsCiAgICAgICAgICAgICAgICBib29zdGVyPSJkYXJ0IiwKICAgICAgICAgICAgICAgIGJhc2Vfc2NvcmU9MC45LAogICAgICAgICAgICAgICAgcmFuZG9tX3N0YXRlPXNlbGYuc2VlZAogICAgICAgICAgICApLmZpdChzZWxmLnhfdGVzdCwgc2VsZi5iaW5hcnlfY2xhc3NfeV90cmFpbiksCiAgICAgICAgICAgIFhHQkNsYXNzaWZpZXIoCiAgICAgICAgICAgICAgICBtYXhfZGVwdGg9MjAsCiAgICAgICAgICAgICAgICBuX2VzdGltYXRvcnM9MjAsCiAgICAgICAgICAgICAgICBsZWFybmluZ19yYXRlPTAuMDEsCiAgICAgICAgICAgICAgICBuX2pvYnM9LTEsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIHZlcmJvc2U9VHJ1ZSwKICAgICAgICAgICAgICAgIGJvb3N0ZXI9ImdidHJlZSIsCiAgICAgICAgICAgICAgICByYW5kb21fc3RhdGU9c2VsZi5zZWVkCjx8ZmltX2VuZHw+"]
["f2f6c3ab215a6072278b443776433d8ef34ff3b5-4","f2f6c3ab215a6072278b443776433d8ef34ff3b5","PHxmaW1fcHJlZml4fD4KZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKZnJvbSB0ZXN0cyBpbXBvcnQgVGVzdFByZWRpY3Rpb24KZnJvbSB4Z2Jvb3N0IGltcG9ydCBYR0JDbGFzc2lmaWVyCgoKY2xhc3MgWEdCQ2xhc3NpZmllclRlc3QoVGVzdFByZWRpY3Rpb24sIFRlc3RDYXNlKToKCiAgICBwcmVkaWN0X21ldGhvZCA9ICJwcmVkaWN0X3Byb2JhIgoKICAgIGRlZiBfZml0KHNlbGYpOgogICAgICAgIHNlbGYubW9kZWxzID0gWwogICAgICAgICAgICBYR0JDbGFzc2lmaWVyKAogICAgICAgICAgICAgICAgbWF4X2RlcHRoPTcsCiAgICAgICAgICAgICAgICBuX2VzdGltYXRvcnM9MTAsCiAgICAgICAgICAgICAgICBsZWFybmluZ19yYXRlPTAuMSwKICAgICAgICAgICAgICAgIG5fam9icz0tMSwKICAgICAgICAgICAgICAgIHZlcmJvc2U9VHJ1ZSwKICAgICAgICAgICAgICAgIG1pc3Npbmc9LTEsCiAgICAgICAgICAgICAgICBib29zdGVyPSJkYXJ0IiwKICAgICAgICAgICAgICAgIGJhc2Vfc2NvcmU9MC45LAogICAgICAgICAgICAgICAgcmFuZG9tX3N0YXRlPXNlbGYuc2VlZAogICAgICAgICAgICApLmZpdChzZWxmLnhfdGVzdCwgc2VsZi5iaW5hcnlfY2xhc3NfeV90cmFpbiksCiAgICAgICAgICAgIFhHQkNsYXNzaWZpZXIoCiAgICAgICAgICAgICAgICBtYXhfZGVwdGg9MjAsCiAgICAgICAgICAgICAgICBuX2VzdGltYXRvcnM9MjAsCiAgICAgICAgICAgICAgICBsZWFybmluZ19yYXRlPTAuMDEsCiAgICAgICAgICAgICAgICBuX2pvYnM9LTEsCiAgICAgICAgICAgICAgICB2ZXJib3NlPVRydWUsCiAgICAgICAgICAgICAgICBib29zdGVyPSJnYnRyZWUiLAogICAgICAgICAgICAgICAgcmFuZG9tX3N0YXRlPXNlbGYuc2VlZAo8fGZpbV9ob2xlfD4KICAgICAgICBdCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICkuZml0KHNlbGYueF90ZXN0LCBzZWxmLm11bHRpX2NsYXNzX3lfdHJhaW4pCjx8ZmltX2VuZHw+"]
["e477ba9dfcf079674cca7753bcd617193f222c42-1","e477ba9dfcf079674cca7753bcd617193f222c42",{"$cut":{"chars":44828,"head":"PHxmaW1fcHJlZml4fD4KZnJvbSBmdW5jdG9vbHMgaW1wb3J0IGxydV9jYWNoZQppbXBvcnQgbG9nZ2luZwpmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUG9vbCwgY3B1X2NvdW50CmltcG9ydCBvcwppbXBvcnQgcGF0aGxpYgpmcm9tIHR5cGluZyBpbXBvcnQgVW5pb24sIExpc3QKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKaW1wb3J0IHdhcm5pbmdzCgppbXBvcnQgZ2VvcGFuZGFzIGFzIGdwZApmcm9tIGppZ3Nhd3B5IGltcG9ydCBqaWdzYXdfbXNoX3QsIHNhdmVtc2gsIGxvYWRtc2gsIHNhdmV2dGsKZnJvbSBtYXRwbG90bGliLnBhdGggaW1wb3J0IFBhdGgKZnJvbSBtYXRwbG90bGliLnRyYW5zZm9ybXMgaW1wb3J0IEJib3gKZnJvbSBtYXRwbG90bGliLnRyaSBpbXBvcnQgVHJpYW5ndWxhdGlvbgppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBudW1weSBhcyBucApmcm9tIHB5cHJvaiBpbXBvcnQgQ1JTLCBUcmFuc2Zvcm1lcgpmcm9tIHNjaXB5LmludGVycG9sYXRlIGltcG9ydCAoCiAgICAgICAgUmVjdEJpdmFyaWF0ZVNwbGluZSwgUmVndWxhckdyaWRJbnRlcnBvbGF0b3IpCmZyb20gc2hhcGVseS5nZW9tZXRyeSBpbXBvcnQgKAogICAgICAgIExpbmVTdHJpbmcsIGJveCwgUG9seWdvbiwgTXVsdGlQb2x5Z29uKQpmcm9tIHNoYXBlbHkub3BzIGltcG9ydCBwb2x5Z29uaXplLCBsaW5lbWVyZ2UKCgpmcm9tIG9jc21lc2ggaW1wb3J0IHV0aWxzCmZyb20gb2NzbWVzaC5yYXN0ZXIgaW1wb3J0IFJhc3Rlcgpmcm9tIG9jc21lc2gubWVzaC5iYXNlIGltcG9ydCBCYXNlTWVzaApmcm9tIG9jc21lc2gubWVzaC5wYXJzZXJzIGltcG9ydCBncmQsIHNtczJkbQoKX2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKY2xhc3MgUmluZ3M6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc2g6ICdFdWNsaWRlYW5NZXNoJyk6CiAgICAgICAgc2VsZi5tZXNoID0gbWVzaAoKICAgIEBscnVfY2FjaGUobWF4c2l6ZT0xKQogICAgZGVmIF9fY2FsbF9fKHNlbGYpOgoKICAgICAgICBwb2x5cyA9IHV0aWxzLmdldF9tZXNoX3BvbHlnb25zKHNlbGYubWVzaC5tc2hfdCkKCiAgICAgICAgZGF0YSA9IFtdCiAgICAgICAgYm5kX2lkID0gMAogICAgICAgIGZvciBwb2x5IGluIHBvbHlzOgogICAgICAgICAgICBkYXRhLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAgICAgImdlb21ldHJ5IjogcG9seS5leHRlcmlvciwKICAgICAgICAgICAgICAgICAgICAiYm5kX2lkIjogYm5kX2lkLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogJ2V4dGVyaW9yJwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgZm9yIGludGVyaW9yIGluIHBvbHkuaW50ZXJpb3JzOgogICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoewogICAgICAgICAgICAgICAgICAgICJnZW9tZXRyeSI6IGludGVyaW9yLAogICAgICAgICAgICAgICAgICAgICJibmRfaWQiOiBibmRfaWQsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAnaW50ZXJpb3InCiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICBibmRfaWQgPSBibmRfaWQgKyAxCiAgICAgICAgcmV0dXJuIGdwZC5HZW9EYXRhRnJhbWUoZGF0YSwgY3JzPXNlbGYubWVzaC5jcnMpCgogICAgZGVmIGV4dGVyaW9yKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmKCkubG9jW3NlbGYoKVsndHlwZSddID09ICdleHRlcmlvciddCgogICAgZGVmIGludGVyaW9yKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmKCkubG9jW3NlbGYoKVsndHlwZSddID09ICdpbnRlcmlvciddCgoKY2xhc3MgRWRnZXM6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc2g6ICdFdWNsaWRlYW5NZXNoJyk6CiAgICAgICAgc2VsZi5tZXNoID0gbWVzaAoKICAgIEBscnVfY2FjaGUobWF4c2l6ZT0xKQogICAgZGVmIF9fY2FsbF9fKHNlbGYpIC0+IGdwZC5HZW9EYXRhRnJhbWU6CiAgICAgICAgZGF0YSA9IFtdCiAgICAgICAgZm9yIHJpbmcgaW4gc2VsZi5tZXNoLmh1bGwucmluZ3MoKS5pdGVydHVwbGVzKCk6CiAgICAgICAgICAgIGNvb3JkcyA9IHJpbmcuZ2VvbWV0cnkuY29vcmRzCiAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihjb29yZHMpKToKICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKHsKICAgICAgICAgICAgICAgICAgICAiZ2VvbWV0cnkiOiBMaW5lU3RyaW5nKFtjb29yZHNbaS0xXSwgY29vcmRzW2ldXSksCiAgICAgICAgICAgICAgICAgICAgImJuZF9pZCI6IHJpbmcuYm5kX2lkLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogcmluZy50eXBlfSkKICAgICAgICByZXR1cm4gZ3BkLkdlb0RhdGFGcmFtZShkYXRhLCBjcnM9c2VsZi5tZXNoLmNycykKCiAgICBkZWYgZXh0ZXJpb3Ioc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYoKS5sb2Nbc2VsZigpWyd0eXBlJ10gPT0gJ2V4dGVyaW9yJ10KCiAgICBkZWYgaW50ZXJpb3Ioc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYoKS5sb2Nbc2VsZigpWyd0eXBlJ10gPT0gJ2ludGVyaW9yJ10KCgpjbGFzcyBIdWxsOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNoOiAnRXVjbGlkZWFuTWVzaCcpOgogICAgICAgIHNlbGYubWVzaCA9IG1lc2gKICAgICAgICBzZWxmLnJpbmdzID0gUmluZ3MobWVzaCkKICAgICAgICBzZWxmLmVkZ2VzID0gRWRnZXMobWVzaCkKCiAgICBAbHJ1X2NhY2hlKG1heHNpemU9MSkKICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKICAgICAgICBkYXRhID0gW10KICAgICAgICBmb3IgYm5kX2lkIGluIG5wLnVuaXF1ZShzZWxmLnJpbmdzKClbJ2JuZF9pZCddLnRvbGlzdCgpKToKICAgICAgICAgICAgZXh0ZXJpb3IgPSBzZWxmLnJpbmdzKCkubG9jWwogICAgICAgICAgICAgICAgKHNlbGYucmluZ3MoKVsnYm5kX2lkJ10gPT0gYm5kX2lkKSAmCiAgICAgICAgICAgICAgICAoc2VsZi5yaW5ncygpWyd0eXBlJ10gPT0gJ2V4dGVyaW9yJyldCiAgICAgICAgICAgIGludGVyaW9ycyA9IHNlbGYucmluZ3MoKS5sb2NbCiAgICAgICAgICAgICAgICAoc2VsZi5yaW5ncygpWydibmRfaWQnXSA9PSBibmRfaWQpICYKICAgICAgICAgICAgICAgIChzZWxmLnJpbmdzKClb"}}]
["e477ba9dfcf079674cca7753bcd617193f222c42-2","e477ba9dfcf079674cca7753bcd617193f222c42",{"$cut":{"chars":44828,"head":"PHxmaW1fcHJlZml4fD4KZnJvbSBmdW5jdG9vbHMgaW1wb3J0IGxydV9jYWNoZQppbXBvcnQgbG9nZ2luZwpmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUG9vbCwgY3B1X2NvdW50CmltcG9ydCBvcwppbXBvcnQgcGF0aGxpYgpmcm9tIHR5cGluZyBpbXBvcnQgVW5pb24sIExpc3QKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKaW1wb3J0IHdhcm5pbmdzCgppbXBvcnQgZ2VvcGFuZGFzIGFzIGdwZApmcm9tIGppZ3Nhd3B5IGltcG9ydCBqaWdzYXdfbXNoX3QsIHNhdmVtc2gsIGxvYWRtc2gsIHNhdmV2dGsKZnJvbSBtYXRwbG90bGliLnBhdGggaW1wb3J0IFBhdGgKZnJvbSBtYXRwbG90bGliLnRyYW5zZm9ybXMgaW1wb3J0IEJib3gKZnJvbSBtYXRwbG90bGliLnRyaSBpbXBvcnQgVHJpYW5ndWxhdGlvbgppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBudW1weSBhcyBucApmcm9tIHB5cHJvaiBpbXBvcnQgQ1JTLCBUcmFuc2Zvcm1lcgpmcm9tIHNjaXB5LmludGVycG9sYXRlIGltcG9ydCAoCiAgICAgICAgUmVjdEJpdmFyaWF0ZVNwbGluZSwgUmVndWxhckdyaWRJbnRlcnBvbGF0b3IpCmZyb20gc2hhcGVseS5nZW9tZXRyeSBpbXBvcnQgKAogICAgICAgIExpbmVTdHJpbmcsIGJveCwgUG9seWdvbiwgTXVsdGlQb2x5Z29uKQpmcm9tIHNoYXBlbHkub3BzIGltcG9ydCBwb2x5Z29uaXplLCBsaW5lbWVyZ2UKCgpmcm9tIG9jc21lc2ggaW1wb3J0IHV0aWxzCmZyb20gb2NzbWVzaC5yYXN0ZXIgaW1wb3J0IFJhc3Rlcgpmcm9tIG9jc21lc2gubWVzaC5iYXNlIGltcG9ydCBCYXNlTWVzaApmcm9tIG9jc21lc2gubWVzaC5wYXJzZXJzIGltcG9ydCBncmQsIHNtczJkbQoKX2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKY2xhc3MgUmluZ3M6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc2g6ICdFdWNsaWRlYW5NZXNoJyk6CiAgICAgICAgc2VsZi5tZXNoID0gbWVzaAoKICAgIEBscnVfY2FjaGUobWF4c2l6ZT0xKQogICAgZGVmIF9fY2FsbF9fKHNlbGYpOgoKICAgICAgICBwb2x5cyA9IHV0aWxzLmdldF9tZXNoX3BvbHlnb25zKHNlbGYubWVzaC5tc2hfdCkKCiAgICAgICAgZGF0YSA9IFtdCiAgICAgICAgYm5kX2lkID0gMAogICAgICAgIGZvciBwb2x5IGluIHBvbHlzOgogICAgICAgICAgICBkYXRhLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAgICAgImdlb21ldHJ5IjogcG9seS5leHRlcmlvciwKICAgICAgICAgICAgICAgICAgICAiYm5kX2lkIjogYm5kX2lkLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogJ2V4dGVyaW9yJwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgZm9yIGludGVyaW9yIGluIHBvbHkuaW50ZXJpb3JzOgogICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoewogICAgICAgICAgICAgICAgICAgICJnZW9tZXRyeSI6IGludGVyaW9yLAogICAgICAgICAgICAgICAgICAgICJibmRfaWQiOiBibmRfaWQsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAnaW50ZXJpb3InCiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICBibmRfaWQgPSBibmRfaWQgKyAxCiAgICAgICAgcmV0dXJuIGdwZC5HZW9EYXRhRnJhbWUoZGF0YSwgY3JzPXNlbGYubWVzaC5jcnMpCgogICAgZGVmIGV4dGVyaW9yKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmKCkubG9jW3NlbGYoKVsndHlwZSddID09ICdleHRlcmlvciddCgogICAgZGVmIGludGVyaW9yKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmKCkubG9jW3NlbGYoKVsndHlwZSddID09ICdpbnRlcmlvciddCgoKY2xhc3MgRWRnZXM6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc2g6ICdFdWNsaWRlYW5NZXNoJyk6CiAgICAgICAgc2VsZi5tZXNoID0gbWVzaAoKICAgIEBscnVfY2FjaGUobWF4c2l6ZT0xKQogICAgZGVmIF9fY2FsbF9fKHNlbGYpIC0+IGdwZC5HZW9EYXRhRnJhbWU6CiAgICAgICAgZGF0YSA9IFtdCiAgICAgICAgZm9yIHJpbmcgaW4gc2VsZi5tZXNoLmh1bGwucmluZ3MoKS5pdGVydHVwbGVzKCk6CiAgICAgICAgICAgIGNvb3JkcyA9IHJpbmcuZ2VvbWV0cnkuY29vcmRzCiAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihjb29yZHMpKToKICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKHsKICAgICAgICAgICAgICAgICAgICAiZ2VvbWV0cnkiOiBMaW5lU3RyaW5nKFtjb29yZHNbaS0xXSwgY29vcmRzW2ldXSksCiAgICAgICAgICAgICAgICAgICAgImJuZF9pZCI6IHJpbmcuYm5kX2lkLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogcmluZy50eXBlfSkKICAgICAgICByZXR1cm4gZ3BkLkdlb0RhdGFGcmFtZShkYXRhLCBjcnM9c2VsZi5tZXNoLmNycykKCiAgICBkZWYgZXh0ZXJpb3Ioc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYoKS5sb2Nbc2VsZigpWyd0eXBlJ10gPT0gJ2V4dGVyaW9yJ10KCiAgICBkZWYgaW50ZXJpb3Ioc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYoKS5sb2Nbc2VsZigpWyd0eXBlJ10gPT0gJ2ludGVyaW9yJ10KCgpjbGFzcyBIdWxsOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNoOiAnRXVjbGlkZWFuTWVzaCcpOgogICAgICAgIHNlbGYubWVzaCA9IG1lc2gKICAgICAgICBzZWxmLnJpbmdzID0gUmluZ3MobWVzaCkKICAgICAgICBzZWxmLmVkZ2VzID0gRWRnZXMobWVzaCkKCiAgICBAbHJ1X2NhY2hlKG1heHNpemU9MSkKICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKICAgICAgICBkYXRhID0gW10KICAgICAgICBmb3IgYm5kX2lkIGluIG5wLnVuaXF1ZShzZWxmLnJpbmdzKClbJ2JuZF9pZCddLnRvbGlzdCgpKToKICAgICAgICAgICAgZXh0ZXJpb3IgPSBzZWxmLnJpbmdzKCkubG9jWwogICAgICAgICAgICAgICAgKHNlbGYucmluZ3MoKVsnYm5kX2lkJ10gPT0gYm5kX2lkKSAmCiAgICAgICAgICAgICAgICAoc2VsZi5yaW5ncygpWyd0eXBlJ10gPT0gJ2V4dGVyaW9yJyldCiAgICAgICAgICAgIGludGVyaW9ycyA9IHNlbGYucmluZ3MoKS5sb2NbCiAgICAgICAgICAgICAgICAoc2VsZi5yaW5ncygpWydibmRfaWQnXSA9PSBibmRfaWQpICYKICAgICAgICAgICAgICAgIChzZWxmLnJpbmdzKClb"}}]
["e477ba9dfcf079674cca7753bcd617193f222c42-3","e477ba9dfcf079674cca7753bcd617193f222c42","PHxmaW1fcHJlZml4fD4KZnJvbSBmdW5jdG9vbHMgaW1wb3J0IGxydV9jYWNoZQppbXBvcnQgbG9nZ2luZwpmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUG9vbCwgY3B1X2NvdW50CmltcG9ydCBvcwppbXBvcnQgcGF0aGxpYgpmcm9tIHR5cGluZyBpbXBvcnQgVW5pb24sIExpc3QKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKaW1wb3J0IHdhcm5pbmdzCgppbXBvcnQgZ2VvcGFuZGFzIGFzIGdwZApmcm9tIGppZ3Nhd3B5IGltcG9ydCBqaWdzYXdfbXNoX3QsIHNhdmVtc2gsIGxvYWRtc2gsIHNhdmV2dGsKZnJvbSBtYXRwbG90bGliLnBhdGggaW1wb3J0IFBhdGgKZnJvbSBtYXRwbG90bGliLnRyYW5zZm9ybXMgaW1wb3J0IEJib3gKZnJvbSBtYXRwbG90bGliLnRyaSBpbXBvcnQgVHJpYW5ndWxhdGlvbgppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBudW1weSBhcyBucApmcm9tIHB5cHJvaiBpbXBvcnQgQ1JTLCBUcmFuc2Zvcm1lcgpmcm9tIHNjaXB5LmludGVycG9sYXRlIGltcG9ydCAoCiAgICAgICAgUmVjdEJpdmFyaWF0ZVNwbGluZSwgUmVndWxhckdyaWRJbnRlcnBvbGF0b3IpCmZyb20gc2hhcGVseS5nZW9tZXRyeSBpbXBvcnQgKAogICAgICAgIExpbmVTdHJpbmcsIGJveCwgUG9seWdvbiwgTXVsdGlQb2x5Z29uKQpmcm9tIHNoYXBlbHkub3BzIGltcG9ydCBwb2x5Z29uaXplLCBsaW5lbWVyZ2UKCgpmcm9tIG9jc21lc2ggaW1wb3J0IHV0aWxzCmZyb20gb2NzbWVzaC5yYXN0ZXIgaW1wb3J0IFJhc3Rlcgpmcm9tIG9jc21lc2gubWVzaC5iYXNlIGltcG9ydCBCYXNlTWVzaApmcm9tIG9jc21lc2gubWVzaC5wYXJzZXJzIGltcG9ydCBncmQsIHNtczJkbQoKX2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKY2xhc3MgUmluZ3M6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc2g6ICdFdWNsaWRlYW5NZXNoJyk6CiAgICAgICAgc2VsZi5tZXNoID0gbWVzaAoKICAgIEBscnVfY2FjaGUobWF4c2l6ZT0xKQogICAgZGVmIF9fY2FsbF9fKHNlbGYpOgoKICAgICAgICBwb2x5cyA9IHV0aWxzLmdldF9tZXNoX3BvbHlnb25zKHNlbGYubWVzaC5tc2hfdCkKCiAgICAgICAgZGF0YSA9IFtdCiAgICAgICAgYm5kX2lkID0gMAogICAgICAgIGZvciBwb2x5IGluIHBvbHlzOgogICAgICAgICAgICBkYXRhLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAgICAgImdlb21ldHJ5IjogcG9seS5leHRlcmlvciwKICAgICAgICAgICAgICAgICAgICAiYm5kX2lkIjogYm5kX2lkLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogJ2V4dGVyaW9yJwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgZm9yIGludGVyaW9yIGluIHBvbHkuaW50ZXJpb3JzOgogICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoewogICAgICAgICAgICAgICAgICAgICJnZW9tZXRyeSI6IGludGVyaW9yLAogICAgICAgICAgICAgICAgICAgICJibmRfaWQiOiBibmRfaWQsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAnaW50ZXJpb3InCiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICBibmRfaWQgPSBibmRfaWQgKyAxCiAgICAgICAgcmV0dXJuIGdwZC5HZW9EYXRhRnJhbWUoZGF0YSwgY3JzPXNlbGYubWVzaC5jcnMpCgogICAgZGVmIGV4dGVyaW9yKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmKCkubG9jW3NlbGYoKVsndHlwZSddID09ICdleHRlcmlvciddCgogICAgZGVmIGludGVyaW9yKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmKCkubG9jW3NlbGYoKVsndHlwZSddID09ICdpbnRlcmlvciddCgoKY2xhc3MgRWRnZXM6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc2g6ICdFdWNsaWRlYW5NZXNoJyk6CiAgICAgICAgc2VsZi5tZXNoID0gbWVzaAoKICAgIEBscnVfY2FjaGUobWF4c2l6ZT0xKQogICAgZGVmIF9fY2FsbF9fKHNlbGYpIC0+IGdwZC5HZW9EYXRhRnJhbWU6CiAgICAgICAgZGF0YSA9IFtdCiAgICAgICAgZm9yIHJpbmcgaW4gc2VsZi5tZXNoLmh1bGwucmluZ3MoKS5pdGVydHVwbGVzKCk6CiAgICAgICAgICAgIGNvb3JkcyA9IHJpbmcuZ2VvbWV0cnkuY29vcmRzCiAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihjb29yZHMpKToKICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKHsKICAgICAgICAgICAgICAgICAgICAiZ2VvbWV0cnkiOiBMaW5lU3RyaW5nKFtjb29yZHNbaS0xXSwgY29vcmRzW2ldXSksCiAgICAgICAgICAgICAgICAgICAgImJuZF9pZCI6IHJpbmcuYm5kX2lkLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogcmluZy50eXBlfSkKICAgICAgICByZXR1cm4gZ3BkLkdlb0RhdGFGcmFtZShkYXRhLCBjcnM9c2VsZi5tZXNoLmNycykKCiAgICBkZWYgZXh0ZXJpb3Ioc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYoKS5sb2Nbc2VsZigpWyd0eXBlJ10gPT0gJ2V4dGVyaW9yJ10KCiAgICBkZWYgaW50ZXJpb3Ioc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYoKS5sb2Nbc2VsZigpWyd0eXBlJ10gPT0gJ2ludGVyaW9yJ10KCgpjbGFzcyBIdWxsOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNoOiAnRXVjbGlkZWFuTWVzaCcpOgogICAgICAgIHNlbGYubWVzaCA9IG1lc2gKICAgICAgICBzZWxmLnJpbmdzID0gUmluZ3MobWVzaCkKICAgICAgICBzZWxmLmVkZ2VzID0gRWRnZXMobWVzaCkKCiAgICBAbHJ1X2NhY2hlKG1heHNpemU9MSkKICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKICAgICAgICBkYXRhID0gW10KICAgICAgICBmb3IgYm5kX2lkIGluIG5wLnVuaXF1ZShzZWxmLnJpbmdzKClbJ2JuZF9pZCddLnRvbGlzdCgpKToKICAgICAgICAgICAgZXh0ZXJpb3IgPSBzZWxmLnJpbmdzKCkubG9jWwogICAgICAgICAgICAgICAgKHNlbGYucmluZ3MoKVsnYm5kX2lkJ10gPT0gYm5kX2lkKSAmCiAgICAgICAgICAgICAgICAoc2VsZi5yaW5ncygpWyd0eXBlJ10gPT0gJ2V4dGVyaW9yJyldCiAgICAgICAgICAgIGludGVyaW9ycyA9IHNlbGYucmluZ3MoKS5sb2NbCiAgICAgICAgICAgICAgICAoc2VsZi5yaW5ncygpWydibmRfaWQnXSA9PSBibmRfaWQpICYKICAgICAgICAgICAgICAgIChzZWxmLnJpbmdzKClbJ3R5cGUnXSA9PSAnaW50ZXJpb3InKV0KICAgICAgICAgICAgZGF0YS5hcHBlbmQoewogICAgICAgICAgICAgICAgICAgICJnZW9tZXRyeSI6IFBvbHlnb24oCiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVyaW9yLmlsb2NbMF0uZ2VvbWV0cnkuY29vcmRzLAogICAgICAgICAgICAgICAgICAgICAgICBbcm93Lmdlb21ldHJ5LmNvb3JkcyBmb3IgXywgcm93Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGludGVyaW9ycy5pdGVycm93cygpXSksCjx8ZmltX2VuZHw+"]
["e477ba9dfcf079674cca7753bcd617193f222c42-4","e477ba9dfcf079674cca7753bcd617193f222c42",{"$cut":{"chars":44828,"head":"PHxmaW1fcHJlZml4fD4KZnJvbSBmdW5jdG9vbHMgaW1wb3J0IGxydV9jYWNoZQppbXBvcnQgbG9nZ2luZwpmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUG9vbCwgY3B1X2NvdW50CmltcG9ydCBvcwppbXBvcnQgcGF0aGxpYgpmcm9tIHR5cGluZyBpbXBvcnQgVW5pb24sIExpc3QKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKaW1wb3J0IHdhcm5pbmdzCgppbXBvcnQgZ2VvcGFuZGFzIGFzIGdwZApmcm9tIGppZ3Nhd3B5IGltcG9ydCBqaWdzYXdfbXNoX3QsIHNhdmVtc2gsIGxvYWRtc2gsIHNhdmV2dGsKZnJvbSBtYXRwbG90bGliLnBhdGggaW1wb3J0IFBhdGgKZnJvbSBtYXRwbG90bGliLnRyYW5zZm9ybXMgaW1wb3J0IEJib3gKZnJvbSBtYXRwbG90bGliLnRyaSBpbXBvcnQgVHJpYW5ndWxhdGlvbgppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBudW1weSBhcyBucApmcm9tIHB5cHJvaiBpbXBvcnQgQ1JTLCBUcmFuc2Zvcm1lcgpmcm9tIHNjaXB5LmludGVycG9sYXRlIGltcG9ydCAoCiAgICAgICAgUmVjdEJpdmFyaWF0ZVNwbGluZSwgUmVndWxhckdyaWRJbnRlcnBvbGF0b3IpCmZyb20gc2hhcGVseS5nZW9tZXRyeSBpbXBvcnQgKAogICAgICAgIExpbmVTdHJpbmcsIGJveCwgUG9seWdvbiwgTXVsdGlQb2x5Z29uKQpmcm9tIHNoYXBlbHkub3BzIGltcG9ydCBwb2x5Z29uaXplLCBsaW5lbWVyZ2UKCgpmcm9tIG9jc21lc2ggaW1wb3J0IHV0aWxzCmZyb20gb2NzbWVzaC5yYXN0ZXIgaW1wb3J0IFJhc3Rlcgpmcm9tIG9jc21lc2gubWVzaC5iYXNlIGltcG9ydCBCYXNlTWVzaApmcm9tIG9jc21lc2gubWVzaC5wYXJzZXJzIGltcG9ydCBncmQsIHNtczJkbQoKX2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKY2xhc3MgUmluZ3M6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc2g6ICdFdWNsaWRlYW5NZXNoJyk6CiAgICAgICAgc2VsZi5tZXNoID0gbWVzaAoKICAgIEBscnVfY2FjaGUobWF4c2l6ZT0xKQogICAgZGVmIF9fY2FsbF9fKHNlbGYpOgoKPHxmaW1faG9sZXw+CiAgICAgICAgZm9yIHBvbHkgaW4gcG9seXM6CiAgICAgICAgICAgIGRhdGEuYXBwZW5kKHsKICAgICAgICAgICAgICAgICAgICAiZ2VvbWV0cnkiOiBwb2x5LmV4dGVyaW9yLAogICAgICAgICAgICAgICAgICAgICJibmRfaWQiOiBibmRfaWQsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAnZXh0ZXJpb3InCiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICBmb3IgaW50ZXJpb3IgaW4gcG9seS5pbnRlcmlvcnM6CiAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAgICAgImdlb21ldHJ5IjogaW50ZXJpb3IsCiAgICAgICAgICAgICAgICAgICAgImJuZF9pZCI6IGJuZF9pZCwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICdpbnRlcmlvcicKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgIGJuZF9pZCA9IGJuZF9pZCArIDEKICAgICAgICByZXR1cm4gZ3BkLkdlb0RhdGFGcmFtZShkYXRhLCBjcnM9c2VsZi5tZXNoLmNycykKCiAgICBkZWYgZXh0ZXJpb3Ioc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYoKS5sb2Nbc2VsZigpWyd0eXBlJ10gPT0gJ2V4dGVyaW9yJ10KCiAgICBkZWYgaW50ZXJpb3Ioc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYoKS5sb2Nbc2VsZigpWyd0eXBlJ10gPT0gJ2ludGVyaW9yJ10KCgpjbGFzcyBFZGdlczoKCiAgICBkZWYgX19pbml0X18oc2VsZiwgbWVzaDogJ0V1Y2xpZGVhbk1lc2gnKToKICAgICAgICBzZWxmLm1lc2ggPSBtZXNoCgogICAgQGxydV9jYWNoZShtYXhzaXplPTEpCiAgICBkZWYgX19jYWxsX18oc2VsZikgLT4gZ3BkLkdlb0RhdGFGcmFtZToKICAgICAgICBkYXRhID0gW10KICAgICAgICBmb3IgcmluZyBpbiBzZWxmLm1lc2guaHVsbC5yaW5ncygpLml0ZXJ0dXBsZXMoKToKICAgICAgICAgICAgY29vcmRzID0gcmluZy5nZW9tZXRyeS5jb29yZHMKICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKGNvb3JkcykpOgogICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoewogICAgICAgICAgICAgICAgICAgICJnZW9tZXRyeSI6IExpbmVTdHJpbmcoW2Nvb3Jkc1tpLTFdLCBjb29yZHNbaV1dKSwKICAgICAgICAgICAgICAgICAgICAiYm5kX2lkIjogcmluZy5ibmRfaWQsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiByaW5nLnR5cGV9KQogICAgICAgIHJldHVybiBncGQuR2VvRGF0YUZyYW1lKGRhdGEsIGNycz1zZWxmLm1lc2guY3JzKQoKICAgIGRlZiBleHRlcmlvcihzZWxmKToKICAgICAgICByZXR1cm4gc2VsZigpLmxvY1tzZWxmKClbJ3R5cGUnXSA9PSAnZXh0ZXJpb3InXQoKICAgIGRlZiBpbnRlcmlvcihzZWxmKToKICAgICAgICByZXR1cm4gc2VsZigpLmxvY1tzZWxmKClbJ3R5cGUnXSA9PSAnaW50ZXJpb3InXQoKCmNsYXNzIEh1bGw6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc2g6ICdFdWNsaWRlYW5NZXNoJyk6CiAgICAgICAgc2VsZi5tZXNoID0gbWVzaAogICAgICAgIHNlbGYucmluZ3MgPSBSaW5ncyhtZXNoKQogICAgICAgIHNlbGYuZWRnZXMgPSBFZGdlcyhtZXNoKQoKICAgIEBscnVfY2FjaGUobWF4c2l6ZT0xKQogICAgZGVmIF9fY2FsbF9fKHNlbGYpOgogICAgICAgIGRhdGEgPSBbXQogICAgICAgIGZvciBibmRfaWQgaW4gbnAudW5pcXVlKHNlbGYucmluZ3MoKVsnYm5kX2lkJ10udG9saXN0KCkpOgogICAgICAgICAgICBleHRlcmlvciA9IHNlbGYucmluZ3MoKS5sb2NbCiAgICAgICAgICAgICAgICAoc2VsZi5yaW5ncygpWydibmRfaWQnXSA9PSBibmRfaWQpICYKICAgICAgICAgICAgICAgIChzZWxmLnJpbmdzKClbJ3R5cGUnXSA9PSAnZXh0ZXJpb3InKV0KICAgICAgICAgICAgaW50ZXJpb3JzID0gc2VsZi5yaW5ncygpLmxvY1sKICAgICAgICAgICAgICAgIChzZWxmLnJpbmdzKClbJ2JuZF9pZCddID09IGJuZF9pZCkgJgogICAgICAgICAgICAgICAgKHNlbGYucmluZ3MoKVsndHlwZSddID09ICdpbnRlcmlvcicpXQogICAgICAgICAgICBkYXRhLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAgICAgImdlb21ldHJ5Ijog"}}]
["26501928f522750f0d696a98d0d452ad6bf36ff5-1","26501928f522750f0d696a98d0d452ad6bf36ff5","PHxmaW1fcHJlZml4fD4KZnJvbSB0b3JjaC51dGlscy5kYXRhIGltcG9ydCBEYXRhc2V0LCBEYXRhTG9hZGVyCmltcG9ydCB0b3JjaHZpc2lvbi50cmFuc2Zvcm1zIGFzIHRyYW5zZm9ybXMKaW1wb3J0IHJhbmRvbQppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBQSUwgaW1wb3J0IEltYWdlCmltcG9ydCBqc29uCmltcG9ydCB0b3JjaAoKY2xhc3MgY2xvdGhpbmdfZGF0YXNldChEYXRhc2V0KTogCiAgICBkZWYgX19pbml0X18oc2VsZiwgcm9vdCwgdHJhbnNmb3JtLCBtb2RlLCBudW1fc2FtcGxlcz0wLCBwcmVkPVtdLCBwcm9iYWJpbGl0eT1bXSwgcGF0aHM9W10sIG51bV9jbGFzcz0xNCk6IAogICAgICAgIAogICAgICAgIHNlbGYucm9vdCA9IHJvb3QKICAgICAgICBzZWxmLnRyYW5zZm9ybSA9IHRyYW5zZm9ybQogICAgICAgIHNlbGYubW9kZSA9IG1vZGUKICAgICAgICBzZWxmLnRyYWluX2xhYmVscyA9IHt9CiAgICAgICAgc2VsZi50ZXN0X2xhYmVscyA9IHt9CiAgICAgICAgc2VsZi52YWxfbGFiZWxzID0ge30gICAgICAgICAgICAKICAgICAgICAKICAgICAgICB3aXRoIG9wZW4oJyVzL25vaXN5X2xhYmVsX2t2LnR4dCclc2VsZi5yb290LCdyJykgYXMgZjoKICAgICAgICAgICAgbGluZXMgPSBmLnJlYWQoKS5zcGxpdGxpbmVzKCkKICAgICAgICAgICAgZm9yIGwgaW4gbGluZXM6CiAgICAgICAgICAgICAgICBlbnRyeSA9IGwuc3BsaXQoKSAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpbWdfcGF0aCA9ICclcy8nJXNlbGYucm9vdCtlbnRyeVswXVs3Ol0KICAgICAgICAgICAgICAgIHNlbGYudHJhaW5fbGFiZWxzW2ltZ19wYXRoXSA9IGludChlbnRyeVsxXSkgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgd2l0aCBvcGVuKCclcy9jbGVhbl9sYWJlbF9rdi50eHQnJXNlbGYucm9vdCwncicpIGFzIGY6CiAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkKCkuc3BsaXRsaW5lcygpCiAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgogICAgICAgICAgICAgICAgZW50cnkgPSBsLnNwbGl0KCkgICAgICAgICAgIAogICAgICAgICAgICAgICAgaW1nX3BhdGggPSAnJXMvJyVzZWxmLnJvb3QrZW50cnlbMF1bNzpdCiAgICAgICAgICAgICAgICBzZWxmLnRlc3RfbGFiZWxzW2ltZ19wYXRoXSA9IGludChlbnRyeVsxXSkgICAKCiAgICAgICAgaWYgbW9kZSA9PSAnYWxsJzoKICAgICAgICAgICAgdHJhaW5faW1ncz1bXQogICAgICAgICAgICB3aXRoIG9wZW4oJyVzL25vaXN5X3RyYWluX2tleV9saXN0LnR4dCclc2VsZi5yb290LCdyJykgYXMgZjoKICAgICAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkKCkuc3BsaXRsaW5lcygpCiAgICAgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKICAgICAgICAgICAgICAgICAgICBpbWdfcGF0aCA9ICclcy8nJXNlbGYucm9vdCtsWzc6XQogICAgICAgICAgICAgICAgICAgIHRyYWluX2ltZ3MuYXBwZW5kKGltZ19wYXRoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKHRyYWluX2ltZ3MpCiAgICAgICAgICAgIGNsYXNzX251bSA9IHRvcmNoLnplcm9zKG51bV9jbGFzcykKICAgICAgICAgICAgc2VsZi50cmFpbl9pbWdzID0gW10KICAgICAgICAgICAgZm9yIGltcGF0aCBpbiB0cmFpbl9pbWdzOgogICAgICAgICAgICAgICAgbGFiZWwgPSBzZWxmLnRyYWluX2xhYmVsc1tpbXBhdGhdIAogICAgICAgICAgICAgICAgaWYgY2xhc3NfbnVtW2xhYmVsXTwobnVtX3NhbXBsZXMvMTQpIGFuZCBsZW4oc2VsZi50cmFpbl9pbWdzKTxudW1fc2FtcGxlczoKICAgICAgICAgICAgICAgICAgICBzZWxmLnRyYWluX2ltZ3MuYXBwZW5kKGltcGF0aCkKICAgICAgICAgICAgICAgICAgICBjbGFzc19udW1bbGFiZWxdKz0xCiAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKHNlbGYudHJhaW5faW1ncykgICAgICAgCiAgICAgICAgZWxpZiBzZWxmLm1vZGUgPT0gImxhYmVsZWQiOiAgIAogICAgICAgICAgICB0cmFpbl9pbWdzID0gcGF0aHMgCiAgICAgICAgICAgIHByZWRfaWR4ID0gcHJlZC5ub256ZXJvKClbMF0KICAgICAgICAgICAgc2VsZi50cmFpbl9pbWdzID0gW3RyYWluX2ltZ3NbaV0gZm9yIGkgaW4gcHJlZF9pZHhdICAgICAgICAgICAgICAgIAogICAgICAgICAgICBzZWxmLnByb2JhYmlsaXR5ID0gW3Byb2JhYmlsaXR5W2ldIGZvciBpIGluIHByZWRfaWR4XSAgICAgICAgICAgIAogICAgICAgICAgICBwcmludCgiJXMgZGF0YSBoYXMgYSBzaXplIG9mICVkIiUoc2VsZi5tb2RlLGxlbihzZWxmLnRyYWluX2ltZ3MpKSkKICAgICAgICBlbGlmIHNlbGYubW9kZSA9PSAidW5sYWJlbGVkIjogIAogICAgICAgICAgICB0cmFpbl9pbWdzID0gcGF0aHMgCiAgICAgICAgICAgIHByZWRfaWR4ID0gKDEtcHJlZCkubm9uemVybygpWzBdICAKICAgICAgICAgICAgc2VsZi50cmFpbl9pbWdzID0gW3RyYWluX2ltZ3NbaV0gZm9yIGkgaW4gcHJlZF9pZHhdICAgICAgICAgICAgICAgIAogICAgICAgICAgICBzZWxmLnByb2JhYmlsaXR5ID0gW3Byb2JhYmlsaXR5W2ldIGZvciBpIGluIHByZWRfaWR4XSAgICAgICAgICAgIAogICAgICAgICAgICBwcmludCgiJXMgZGF0YSBoYXMgYSBzaXplIG9mICVkIiUoc2VsZi5tb2RlLGxlbihzZWxmLnRyYWluX2ltZ3MpKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIGVsaWYgbW9kZT09J3Rlc3QnOgogICAgICAgICAgICBzZWxmLnRlc3RfaW1ncyA9IFtdCiAgICAgICAgICAgIHdpdGggb3BlbignJXMvY2xlYW5fdGVzdF9rZXlfbGlzdC50eHQnJXNlbGYucm9vdCwncicpIGFzIGY6CiAgICAgICAgICAgICAgICBsaW5lcyA9IGYucmVhZCgpLnNwbGl0bGluZXMoKQogICAgICAgICAgICAgICAgZm9yIGwgaW4gbGluZXM6CiAgICAgICAgICAgICAgICAgICAgaW1nX3BhdGggPSAnJXMvJyVzZWxmLnJvb3QrbFs3Ol0KICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3RfaW1ncy5hcHBlbmQoaW1nX3BhdGgpICAgICAgICAgICAgCiAgICAgICAgZWxpZiBtb2RlPT0ndmFsJzoKICAgICAgICAgICAgc2VsZi52YWxfaW1ncyA9IFtdCiAgICAgICAgICAgIHdpdGggb3BlbignJXMvY2xlYW5fdmFsX2tleV9saXN0LnR4dCclc2VsZi5yb290LCdyJykgYXMgZjoKICAgICAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkKCkuc3BsaXRsaW5lcygpCiAgICAgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKICAgICAgICAgICAgICAgICAgICBpbWdfcGF0aCA9ICclcy8nJXNlbGYucm9vdCtsWzc6XQogICAgICAgICAgICAgICAgICAgIHNlbGYudmFsX2ltZ3MuYXBwZW5kKGltZ19wYXRoKQogICAgICAgICAgICAgICAgICAgIAogICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KTogIAogICAgICAgIGlmIHNlbGYubW9kZT09J2xhYmVsZWQnOgogICAgICAgICAgICBpbWdfcGF0aCA9IHNlbGYudHJhaW5faW1nc1tpbmRleF0KICAgICAgICAgICAgdGFyZ2V0ID0gc2VsZi50cmFpbl9sYWJlbHNbaW1nX3BhdGhdIAogICAgICAgICAgICBwcm9iID0gc2VsZi5wcm9iYWJpbGl0eVtpbmRleF0KICAgICAgICAgICAgaW1hZ2UgPSBJbWFnZS5vcGVuKGltZ19wYXRoKS5jb252ZXJ0KCdSR0InKSAgICAKICAgICAgICAgICAgaW1nMSA9IHNlbGYudHJhbnNmb3JtKGltYWdlKSAKICAgICAgICAgICAgaW1nMiA9IHNlbGYudHJhbnNmb3JtKGltYWdlKSAKICAgICAgICAgICAgcmV0dXJuIGltZzEsIGltZzIsIHRhcmdldCwgcHJvYiAgICAgICAgICAgICAgCiAgICAgICAgZWxpZiBzZWxmLm1vZGU9PSd1bmxhYmVsZWQnOgogICAgICAgICAgICBpbWdfcGF0aCA9IHNlbGYudHJhaW5faW1nc1tpbmRleF0KICAgICAgICAgICAgaW1hZ2UgPSBJbWFnZS5vcGVuKGltZ19wYXRoKS5jb252ZXJ0KCdSR0InKSAgICAKICAgICAgICAgICAgaW1nMSA9IHNlbGYudHJhbnNmb3JtKGltYWdlKSAKICAgICAgICAgICAgaW1nMiA9IHNlbGYudHJhbnNmb3JtKGltYWdlKSAKICAgICAgICAgICAgcmV0dXJuIGltZzEsIGltZzIgIAogICAgICAgIGVsaWYgc2VsZi5tb2RlPT0nYWxsJzoKICAgICAgICAgICAgaW1nX3BhdGggPSBzZWxmLnRyYWluX2ltZ3NbaW5kZXhdCiAgICAgICAgICAgIHRhcmdldCA9IHNlbGYudHJhaW5fbGFiZWxzW2ltZ19wYXRoXSAgICAgCiAgICAgICAgICAgIGltYWdlID0gSW1hZ2Uub3BlbihpbWdfcGF0aCkuY29udmVydCgnUkdCJykgICAKICAgICAgICAgICAgaW1nID0gc2VsZi50cmFuc2Zvcm0oaW1hZ2UpCiAgICAgICAgICAgIHJldHVybiBpbWcsIHRhcmdldCwgaW1nX3BhdGggICAgICAgIAogICAgICAgIGVsaWYgc2VsZi5tb2RlPT0ndGVzdCc6CiAgICAgICAgICAgIGltZ19wYXRoID0gc2VsZi50ZXN0X2ltZ3NbaW5kZXhdCiAgICAgICAgICAgIHRhcmdldCA9IHNlbGYudGVzdF9sYWJlbHNbaW1nX3BhdGhdICAgICAKICAgICAgICAgICAgaW1hZ2UgPSBJbWFnZS5vcGVuKGltZ19wYXRoKS5jb252ZXJ0KCdSR0InKSAgIAogICAgICAgICAgICBpbWcgPSBzZWxmLnRyYW5zZm9ybShpbWFnZSkgCiAgICAgICAgICAgIHJldHVybiBpbWcsIHRhcmdldAogICAgICAgIGVsaWYgc2VsZi5tb2RlPT0ndmFsJzoKICAgICAgICAgICAgaW1nX3BhdGggPSBzZWxmLnZhbF9pbWdzW2luZGV4XQogICAgICAgICAgICB0YXJnZXQgPSBzZWxmLnRlc3RfbGFiZWxzW2ltZ19wYXRoXSAgICAgCiAgICAgICAgICAgIGltYWdlID0gSW1hZ2Uub3BlbihpbWdfcGF0aCkuY29udmVydCgnUkdCJykgICAKICAgICAgICAgICAgaW1nID0gc2VsZi50cmFuc2Zvcm0oaW1hZ2UpIAogICAgICAgICAgICByZXR1cm4gaW1nLCB0YXJnZXQgICAgCiAgICAgICAgCiAgICBkZWYgX19sZW5fXyhzZWxmKToKICAgICAgICBpZiBzZWxmLm1vZGU9PSd0ZXN0JzoKICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLnRlc3RfaW1ncykKICAgICAgICBpZiBzZWxmLm1vZGU9PSd2YWwnOgogICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYudmFsX2ltZ3MpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLnRyYWluX2ltZ3MpICAgICAgICAgICAgCiAgICAgICAgCmNsYXNzIGNsb3RoaW5nX2RhdGFsb2FkZXIoKTogIAogICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3QsIGJhdGNoX3NpemUsIG51bV9iYXRjaGVzLCBudW1fd29ya2Vycyk6ICAgIAogICAgICAgIHNlbGYuYmF0Y2hfc2l6ZSA9IGJhdGNoX3NpemUKICAgICAgICBzZWxmLm51bV93b3JrZXJzID0gbnVtX3dvcmtlcnMKICAgICAgICBzZWxmLm51bV9iYXRjaGVzID0gbnVtX2JhdGNoZXMKICAgICAgICBzZWxmLnJvb3QgPSByb290CiAgICAgICAgICAgICAgICAgICAKICAgICAgICBzZWxmLnRyYW5zZm9ybV90cmFpbiA9IHRyYW5zZm9ybXMuQ29tcG9zZShbCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1zLlJlc2l6ZSgyNTYpLAogICAgICAgICAgICAgICAgdHJhbnNmb3Jtcy5SYW5kb21Dcm9wKDIyNCksCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1zLlJhbmRvbUhvcml6b250YWxGbGlwKCksCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1zLlRvVGVuc29yKCksICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdHJhbnNmb3Jtcy5Ob3JtYWxpemUoKDAuNjk1OSwgMC42NTM3LCAwLjYzNzEpLCgwLjMxMTMsIDAuMzE5MiwgMC4zMjE0KSksICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIF0pIAogICAgICAgIHNlbGYudHJhbnNmb3JtX3Rlc3QgPSB0cmFuc2Zvcm1zLkNvbXBvc2UoWwogICAgICAgICAgICAgICAgdHJhbnNmb3Jtcy5SZXNpemUoMjU2KSwKICAgICAgICAgICAgICAgIHRyYW5zZm9ybXMuQ2VudGVyQ3JvcCgyMjQpLAogICAgICAgICAgICAgICAgdHJhbnNmb3Jtcy5Ub1RlbnNvcigpLAogICAgICAgICAgICAgICAgdHJhbnNmb3Jtcy5Ob3JtYWxpemUoKDAuNjk1OSwgMC42NTM3LCAwLjYzNzEpLCgwLjMxMTMsIDAuMzE5MiwgMC4zMjE0KSksCiAgICAgICAgICAgIF0pICAgICAgICAKICAgIGRlZiBydW4oc2VsZixtb2RlLHByZWQ9W10scHJvYj1bXSxwYXRocz1bXSk6ICAgICAgICAKICAgICAgICBpZiBtb2RlPT0nd2FybXVwJzoKICAgICAgICAgICAgd2FybXVwX2RhdGFzZXQgPSBjbG90aGluZ19kYXRhc2V0KHNlbGYucm9vdCx0cmFuc2Zvcm09c2VsZi50cmFuc2Zvcm1fdHJhaW4sIG1vZGU9J2FsbCcsbnVtX3NhbXBsZXM9c2VsZi5udW1fYmF0Y2hlcypzZWxmLmJhdGNoX3NpemUqMikKICAgICAgICAgICAgd2FybXVwX2xvYWRlciA9IERhdGFMb2FkZXIoCiAgICAgICAgICAgICAgICBkYXRhc2V0PXdhcm11cF9kYXRhc2V0LCAKICAgICAgICAgICAgICAgIGJhdGNoX3NpemU9c2VsZi5iYXRjaF9zaXplKjIsCiAgICAgICAgICAgICAgICBzaHVmZmxlPVRydWUsCiAgICAgICAgICAgICAgICBudW1fd29ya2Vycz1zZWxmLm51bV93b3JrZXJzKSAgCiAgICAgICAgICAgIHJldHVybiB3YXJtdXBfbG9hZGVyCiAgICAgICAgZWxpZiBtb2RlPT0ndHJhaW4nOgogICAgICAgICAgICBsYWJlbGVkX2RhdGFzZXQgPSBjbG90aGluZ19kYXRhc2V0KHNlbGYucm9vdCx0cmFuc2Zvcm09c2VsZi50cmFuc2Zvcm1fdHJhaW4sIG1vZGU9J2xhYmVsZWQnLHByZWQ9cHJlZCwgcHJvYmFiaWxpdHk9cHJvYixwYXRocz1wYXRocykKICAgICAgICAgICAgbGFiZWxlZF9sb2FkZXIgPSBEYXRhTG9hZGVyKAogICAgICAgICAgICAgICAgZGF0YXNldD1sYWJlbGVkX2RhdGFzZXQsIAogICAgICAgICAgICAgICAgYmF0Y2hfc2l6ZT1zZWxmLmJhdGNoX3NpemUsCiAgICAgICAgICAgICAgICBzaHVmZmxlPVRydWUsCiAgICAgICAgICAgICAgICBudW1fd29ya2Vycz1zZWxmLm51bV93b3JrZXJzKSAgICAgICAgICAgCiAgICAgICAgICAgIHVubGFiZWxlZF9kYXRhc2V0ID0gY2xvdGhpbmdfZGF0YXNldChzZWxmLnJvb3QsdHJhbnNmb3JtPXNlbGYudHJhbnNmb3JtX3RyYWluLCBtb2RlPSd1bmxhYmVsZWQnLHByZWQ9cHJlZCwgcHJvYmFiaWxpdHk9cHJvYixwYXRocz1wYXRocykKICAgICAgICAgICAgdW5sYWJlbGVkX2xvYWRlciA9IERhdGFMb2FkZXIoCiAgICAgICAgICAgICAgICBkYXRhc2V0PXVubGFiZWxlZF9kYXRhc2V0LCAKICAgICAgICAgICAgICAgIGJhdGNoX3NpemU9aW50KHNlbGYuYmF0Y2hfc2l6ZSksCiAgICAgICAgICAgICAgICBzaHVmZmxlPVRydWUsCiAgICAgICAgICAgICAgICBudW1fd29ya2Vycz1zZWxmLm51bV93b3JrZXJzKSAgIAogICAgICAgICAgICByZXR1cm4gbGFiZWxlZF9sb2FkZXIsdW5sYWJlbGVkX2xvYWRlcgogICAgICAgIGVsaWYgbW9kZT09J2V2YWxfdHJhaW4nOgogICAgICAgICAgICBldmFsX2RhdGFzZXQgPSBjbG90aGluZ19kYXRhc2V0KHNlbGYucm9vdCx0cmFuc2Zvcm09c2VsZi50cmFuc2Zvcm1fdGVzdCwgbW9kZT0nYWxsJyxudW1fc2FtcGxlcz1zZWxmLm51bV9iYXRjaGVzKnNlbGYuYmF0Y2hfc2l6ZSkKICAgICAgICAgICAgZXZhbF9sb2FkZXIgPSBEYXRhTG9hZGVyKAogICAgICAgICAgICAgICAgZGF0YXNldD1ldmFsX2RhdGFzZXQsIAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICBiYXRjaF9zaXplPXNlbGYuYmF0Y2hfc2l6ZSwKICAgICAgICAgICAgICAgIHNodWZmbGU9RmFsc2UsCiAgICAgICAgICAgICAgICBudW1fd29ya2Vycz1zZWxmLm51bV93b3JrZXJzKSAgICAgICAgICAKPHxmaW1fZW5kfD4="]
["26501928f522750f0d696a98d0d452ad6bf36ff5-2","26501928f522750f0d696a98d0d452ad6bf36ff5","PHxmaW1fcHJlZml4fD4KZnJvbSB0b3JjaC51dGlscy5kYXRhIGltcG9ydCBEYXRhc2V0LCBEYXRhTG9hZGVyCmltcG9ydCB0b3JjaHZpc2lvbi50cmFuc2Zvcm1zIGFzIHRyYW5zZm9ybXMKaW1wb3J0IHJhbmRvbQppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBQSUwgaW1wb3J0IEltYWdlCmltcG9ydCBqc29uCmltcG9ydCB0b3JjaAoKY2xhc3MgY2xvdGhpbmdfZGF0YXNldChEYXRhc2V0KTogCiAgICBkZWYgX19pbml0X18oc2VsZiwgcm9vdCwgdHJhbnNmb3JtLCBtb2RlLCBudW1fc2FtcGxlcz0wLCBwcmVkPVtdLCBwcm9iYWJpbGl0eT1bXSwgcGF0aHM9W10sIG51bV9jbGFzcz0xNCk6IAogICAgICAgIAogICAgICAgIHNlbGYucm9vdCA9IHJvb3QKICAgICAgICBzZWxmLnRyYW5zZm9ybSA9IHRyYW5zZm9ybQogICAgICAgIHNlbGYubW9kZSA9IG1vZGUKICAgICAgICBzZWxmLnRyYWluX2xhYmVscyA9IHt9CiAgICAgICAgc2VsZi50ZXN0X2xhYmVscyA9IHt9CiAgICAgICAgc2VsZi52YWxfbGFiZWxzID0ge30gICAgICAgICAgICAKICAgICAgICAKICAgICAgICB3aXRoIG9wZW4oJyVzL25vaXN5X2xhYmVsX2t2LnR4dCclc2VsZi5yb290LCdyJykgYXMgZjoKICAgICAgICAgICAgbGluZXMgPSBmLnJlYWQoKS5zcGxpdGxpbmVzKCkKICAgICAgICAgICAgZm9yIGwgaW4gbGluZXM6CiAgICAgICAgICAgICAgICBlbnRyeSA9IGwuc3BsaXQoKSAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpbWdfcGF0aCA9ICclcy8nJXNlbGYucm9vdCtlbnRyeVswXVs3Ol0KICAgICAgICAgICAgICAgIHNlbGYudHJhaW5fbGFiZWxzW2ltZ19wYXRoXSA9IGludChlbnRyeVsxXSkgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgd2l0aCBvcGVuKCclcy9jbGVhbl9sYWJlbF9rdi50eHQnJXNlbGYucm9vdCwncicpIGFzIGY6CiAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkKCkuc3BsaXRsaW5lcygpCiAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgogICAgICAgICAgICAgICAgZW50cnkgPSBsLnNwbGl0KCkgICAgICAgICAgIAogICAgICAgICAgICAgICAgaW1nX3BhdGggPSAnJXMvJyVzZWxmLnJvb3QrZW50cnlbMF1bNzpdCiAgICAgICAgICAgICAgICBzZWxmLnRlc3RfbGFiZWxzW2ltZ19wYXRoXSA9IGludChlbnRyeVsxXSkgICAKCiAgICAgICAgaWYgbW9kZSA9PSAnYWxsJzoKICAgICAgICAgICAgdHJhaW5faW1ncz1bXQogICAgICAgICAgICB3aXRoIG9wZW4oJyVzL25vaXN5X3RyYWluX2tleV9saXN0LnR4dCclc2VsZi5yb290LCdyJykgYXMgZjoKICAgICAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkKCkuc3BsaXRsaW5lcygpCiAgICAgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKICAgICAgICAgICAgICAgICAgICBpbWdfcGF0aCA9ICclcy8nJXNlbGYucm9vdCtsWzc6XQogICAgICAgICAgICAgICAgICAgIHRyYWluX2ltZ3MuYXBwZW5kKGltZ19wYXRoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKHRyYWluX2ltZ3MpCiAgICAgICAgICAgIGNsYXNzX251bSA9IHRvcmNoLnplcm9zKG51bV9jbGFzcykKICAgICAgICAgICAgc2VsZi50cmFpbl9pbWdzID0gW10KICAgICAgICAgICAgZm9yIGltcGF0aCBpbiB0cmFpbl9pbWdzOgogICAgICAgICAgICAgICAgbGFiZWwgPSBzZWxmLnRyYWluX2xhYmVsc1tpbXBhdGhdIAogICAgICAgICAgICAgICAgaWYgY2xhc3NfbnVtW2xhYmVsXTwobnVtX3NhbXBsZXMvMTQpIGFuZCBsZW4oc2VsZi50cmFpbl9pbWdzKTxudW1fc2FtcGxlczoKICAgICAgICAgICAgICAgICAgICBzZWxmLnRyYWluX2ltZ3MuYXBwZW5kKGltcGF0aCkKICAgICAgICAgICAgICAgICAgICBjbGFzc19udW1bbGFiZWxdKz0xCiAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKHNlbGYudHJhaW5faW1ncykgICAgICAgCiAgICAgICAgZWxpZiBzZWxmLm1vZGUgPT0gImxhYmVsZWQiOiAgIAogICAgICAgICAgICB0cmFpbl9pbWdzID0gcGF0aHMgCiAgICAgICAgICAgIHByZWRfaWR4ID0gcHJlZC5ub256ZXJvKClbMF0KICAgICAgICAgICAgc2VsZi50cmFpbl9pbWdzID0gW3RyYWluX2ltZ3NbaV0gZm9yIGkgaW4gcHJlZF9pZHhdICAgICAgICAgICAgICAgIAogICAgICAgICAgICBzZWxmLnByb2JhYmlsaXR5ID0gW3Byb2JhYmlsaXR5W2ldIGZvciBpIGluIHByZWRfaWR4XSAgICAgICAgICAgIAogICAgICAgICAgICBwcmludCgiJXMgZGF0YSBoYXMgYSBzaXplIG9mICVkIiUoc2VsZi5tb2RlLGxlbihzZWxmLnRyYWluX2ltZ3MpKSkKICAgICAgICBlbGlmIHNlbGYubW9kZSA9PSAidW5sYWJlbGVkIjogIAogICAgICAgICAgICB0cmFpbl9pbWdzID0gcGF0aHMgCiAgICAgICAgICAgIHByZWRfaWR4ID0gKDEtcHJlZCkubm9uemVybygpWzBdICAKICAgICAgICAgICAgc2VsZi50cmFpbl9pbWdzID0gW3RyYWluX2ltZ3NbaV0gZm9yIGkgaW4gcHJlZF9pZHhdICAgICAgICAgICAgICAgIAogICAgICAgICAgICBzZWxmLnByb2JhYmlsaXR5ID0gW3Byb2JhYmlsaXR5W2ldIGZvciBpIGluIHByZWRfaWR4XSAgICAgICAgICAgIAogICAgICAgICAgICBwcmludCgiJXMgZGF0YSBoYXMgYSBzaXplIG9mICVkIiUoc2VsZi5tb2RlLGxlbihzZWxmLnRyYWluX2ltZ3MpKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIGVsaWYgbW9kZT09J3Rlc3QnOgogICAgICAgICAgICBzZWxmLnRlc3RfaW1ncyA9IFtdCiAgICAgICAgICAgIHdpdGggb3BlbignJXMvY2xlYW5fdGVzdF9rZXlfbGlzdC50eHQnJXNlbGYucm9vdCwncicpIGFzIGY6CiAgICAgICAgICAgICAgICBsaW5lcyA9IGYucmVhZCgpLnNwbGl0bGluZXMoKQo8fGZpbV9ob2xlfD4KICAgICAgICBlbGlmIG1vZGU9PSd2YWwnOgogICAgICAgICAgICBzZWxmLnZhbF9pbWdzID0gW10KICAgICAgICAgICAgd2l0aCBvcGVuKCclcy9jbGVhbl92YWxfa2V5X2xpc3QudHh0JyVzZWxmLnJvb3QsJ3InKSBhcyBmOgogICAgICAgICAgICAgICAgbGluZXMgPSBmLnJlYWQoKS5zcGxpdGxpbmVzKCkKICAgICAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgogICAgICAgICAgICAgICAgICAgIGltZ19wYXRoID0gJyVzLyclc2VsZi5yb290K2xbNzpdCiAgICAgICAgICAgICAgICAgICAgc2VsZi52YWxfaW1ncy5hcHBlbmQoaW1nX3BhdGgpCiAgICAgICAgICAgICAgICAgICAgCiAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOiAgCiAgICAgICAgaWYgc2VsZi5tb2RlPT0nbGFiZWxlZCc6CiAgICAgICAgICAgIGltZ19wYXRoID0gc2VsZi50cmFpbl9pbWdzW2luZGV4XQogICAgICAgICAgICB0YXJnZXQgPSBzZWxmLnRyYWluX2xhYmVsc1tpbWdfcGF0aF0gCiAgICAgICAgICAgIHByb2IgPSBzZWxmLnByb2JhYmlsaXR5W2luZGV4XQogICAgICAgICAgICBpbWFnZSA9IEltYWdlLm9wZW4oaW1nX3BhdGgpLmNvbnZlcnQoJ1JHQicpICAgIAogICAgICAgICAgICBpbWcxID0gc2VsZi50cmFuc2Zvcm0oaW1hZ2UpIAogICAgICAgICAgICBpbWcyID0gc2VsZi50cmFuc2Zvcm0oaW1hZ2UpIAogICAgICAgICAgICByZXR1cm4gaW1nMSwgaW1nMiwgdGFyZ2V0LCBwcm9iICAgICAgICAgICAgICAKICAgICAgICBlbGlmIHNlbGYubW9kZT09J3VubGFiZWxlZCc6CiAgICAgICAgICAgIGltZ19wYXRoID0gc2VsZi50cmFpbl9pbWdzW2luZGV4XQogICAgICAgICAgICBpbWFnZSA9IEltYWdlLm9wZW4oaW1nX3BhdGgpLmNvbnZlcnQoJ1JHQicpICAgIAogICAgICAgICAgICBpbWcxID0gc2VsZi50cmFuc2Zvcm0oaW1hZ2UpIAogICAgICAgICAgICBpbWcyID0gc2VsZi50cmFuc2Zvcm0oaW1hZ2UpIAogICAgICAgICAgICByZXR1cm4gaW1nMSwgaW1nMiAgCiAgICAgICAgZWxpZiBzZWxmLm1vZGU9PSdhbGwnOgogICAgICAgICAgICBpbWdfcGF0aCA9IHNlbGYudHJhaW5faW1nc1tpbmRleF0KICAgICAgICAgICAgdGFyZ2V0ID0gc2VsZi50cmFpbl9sYWJlbHNbaW1nX3BhdGhdICAgICAKICAgICAgICAgICAgaW1hZ2UgPSBJbWFnZS5vcGVuKGltZ19wYXRoKS5jb252ZXJ0KCdSR0InKSAgIAogICAgICAgICAgICBpbWcgPSBzZWxmLnRyYW5zZm9ybShpbWFnZSkKICAgICAgICAgICAgcmV0dXJuIGltZywgdGFyZ2V0LCBpbWdfcGF0aCAgICAgICAgCiAgICAgICAgZWxpZiBzZWxmLm1vZGU9PSd0ZXN0JzoKICAgICAgICAgICAgaW1nX3BhdGggPSBzZWxmLnRlc3RfaW1nc1tpbmRleF0KICAgICAgICAgICAgdGFyZ2V0ID0gc2VsZi50ZXN0X2xhYmVsc1tpbWdfcGF0aF0gICAgIAogICAgICAgICAgICBpbWFnZSA9IEltYWdlLm9wZW4oaW1nX3BhdGgpLmNvbnZlcnQoJ1JHQicpICAgCiAgICAgICAgICAgIGltZyA9IHNlbGYudHJhbnNmb3JtKGltYWdlKSAKICAgICAgICAgICAgcmV0dXJuIGltZywgdGFyZ2V0CiAgICAgICAgZWxpZiBzZWxmLm1vZGU9PSd2YWwnOgogICAgICAgICAgICBpbWdfcGF0aCA9IHNlbGYudmFsX2ltZ3NbaW5kZXhdCiAgICAgICAgICAgIHRhcmdldCA9IHNlbGYudGVzdF9sYWJlbHNbaW1nX3BhdGhdICAgICAKICAgICAgICAgICAgaW1hZ2UgPSBJbWFnZS5vcGVuKGltZ19wYXRoKS5jb252ZXJ0KCdSR0InKSAgIAogICAgICAgICAgICBpbWcgPSBzZWxmLnRyYW5zZm9ybShpbWFnZSkgCiAgICAgICAgICAgIHJldHVybiBpbWcsIHRhcmdldCAgICAKICAgICAgICAKICAgIGRlZiBfX2xlbl9fKHNlbGYpOgogICAgICAgIGlmIHNlbGYubW9kZT09J3Rlc3QnOgogICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYudGVzdF9pbWdzKQogICAgICAgIGlmIHNlbGYubW9kZT09J3ZhbCc6CiAgICAgICAgICAgIHJldHVybiBsZW4oc2VsZi52YWxfaW1ncykKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYudHJhaW5faW1ncykgICAgICAgICAgICAKICAgICAgICAKY2xhc3MgY2xvdGhpbmdfZGF0YWxvYWRlcigpOiAgCiAgICBkZWYgX19pbml0X18oc2VsZiwgcm9vdCwgYmF0Y2hfc2l6ZSwgbnVtX2JhdGNoZXMsIG51bV93b3JrZXJzKTogICAgCiAgICAgICAgc2VsZi5iYXRjaF9zaXplID0gYmF0Y2hfc2l6ZQogICAgICAgIHNlbGYubnVtX3dvcmtlcnMgPSBudW1fd29ya2VycwogICAgICAgIHNlbGYubnVtX2JhdGNoZXMgPSBudW1fYmF0Y2hlcwogICAgICAgIHNlbGYucm9vdCA9IHJvb3QKICAgICAgICAgICAgICAgICAgIAogICAgICAgIHNlbGYudHJhbnNmb3JtX3RyYWluID0gdHJhbnNmb3Jtcy5Db21wb3NlKFsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybXMuUmVzaXplKDI1NiksCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1zLlJhbmRvbUNyb3AoMjI0KSwKICAgICAgICAgICAgICAgIHRyYW5zZm9ybXMuUmFuZG9tSG9yaXpvbnRhbEZsaXAoKSwKICAgICAgICAgICAgICAgIHRyYW5zZm9ybXMuVG9UZW5zb3IoKSwgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1zLk5vcm1hbGl6ZSgoMC42OTU5LCAwLjY1MzcsIDAuNjM3MSksKDAuMzExMywgMC4zMTkyLCAwLjMyMTQpKSwgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgXSkgCiAgICAgICAgc2VsZi50cmFuc2Zvcm1fdGVzdCA9IHRyYW5zZm9ybXMuQ29tcG9zZShbCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1zLlJlc2l6ZSgyNTYpLAogICAgICAgICAgICAgICAgdHJhbnNmb3Jtcy5DZW50ZXJDcm9wKDIyNCksCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1zLlRvVGVuc29yKCksCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1zLk5vcm1hbGl6ZSgoMC42OTU5LCAwLjY1MzcsIDAuNjM3MSksKDAuMzExMywgMC4zMTkyLCAwLjMyMTQpKSwKICAgICAgICAgICAgXSkgICAgICAgIAogICAgZGVmIHJ1bihzZWxmLG1vZGUscHJlZD1bXSxwcm9iPVtdLHBhdGhzPVtdKTogICAgICAgIAogICAgICAgIGlmIG1vZGU9PSd3YXJtdXAnOgogICAgICAgICAgICB3YXJtdXBfZGF0YXNldCA9IGNsb3RoaW5nX2RhdGFzZXQoc2VsZi5yb290LHRyYW5zZm9ybT1zZWxmLnRyYW5zZm9ybV90cmFpbiwgbW9kZT0nYWxsJyxudW1fc2FtcGxlcz1zZWxmLm51bV9iYXRjaGVzKnNlbGYuYmF0Y2hfc2l6ZSoyKQogICAgICAgICAgICB3YXJtdXBfbG9hZGVyID0gRGF0YUxvYWRlcigKICAgICAgICAgICAgICAgIGRhdGFzZXQ9d2FybXVwX2RhdGFzZXQsIAogICAgICAgICAgICAgICAgYmF0Y2hfc2l6ZT1zZWxmLmJhdGNoX3NpemUqMiwKICAgICAgICAgICAgICAgIHNodWZmbGU9VHJ1ZSwKICAgICAgICAgICAgICAgIG51bV93b3JrZXJzPXNlbGYubnVtX3dvcmtlcnMpICAKICAgICAgICAgICAgcmV0dXJuIHdhcm11cF9sb2FkZXIKICAgICAgICBlbGlmIG1vZGU9PSd0cmFpbic6CiAgICAgICAgICAgIGxhYmVsZWRfZGF0YXNldCA9IGNsb3RoaW5nX2RhdGFzZXQoc2VsZi5yb290LHRyYW5zZm9ybT1zZWxmLnRyYW5zZm9ybV90cmFpbiwgbW9kZT0nbGFiZWxlZCcscHJlZD1wcmVkLCBwcm9iYWJpbGl0eT1wcm9iLHBhdGhzPXBhdGhzKQogICAgICAgICAgICBsYWJlbGVkX2xvYWRlciA9IERhdGFMb2FkZXIoCiAgICAgICAgICAgICAgICBkYXRhc2V0PWxhYmVsZWRfZGF0YXNldCwgCiAgICAgICAgICAgICAgICBiYXRjaF9zaXplPXNlbGYuYmF0Y2hfc2l6ZSwKICAgICAgICAgICAgICAgIHNodWZmbGU9VHJ1ZSwKICAgICAgICAgICAgICAgIG51bV93b3JrZXJzPXNlbGYubnVtX3dvcmtlcnMpICAgICAgICAgICAKICAgICAgICAgICAgdW5sYWJlbGVkX2RhdGFzZXQgPSBjbG90aGluZ19kYXRhc2V0KHNlbGYucm9vdCx0cmFuc2Zvcm09c2VsZi50cmFuc2Zvcm1fdHJhaW4sIG1vZGU9J3VubGFiZWxlZCcscHJlZD1wcmVkLCBwcm9iYWJpbGl0eT1wcm9iLHBhdGhzPXBhdGhzKQogICAgICAgICAgICB1bmxhYmVsZWRfbG9hZGVyID0gRGF0YUxvYWRlcigKICAgICAgICAgICAgICAgIGRhdGFzZXQ9dW5sYWJlbGVkX2RhdGFzZXQsIAogICAgICAgICAgICAgICAgYmF0Y2hfc2l6ZT1pbnQoc2VsZi5iYXRjaF9zaXplKSwKICAgICAgICAgICAgICAgIHNodWZmbGU9VHJ1ZSwKICAgICAgICAgICAgICAgIG51bV93b3JrZXJzPXNlbGYubnVtX3dvcmtlcnMpICAgCiAgICAgICAgICAgIHJldHVybiBsYWJlbGVkX2xvYWRlcix1bmxhYmVsZWRfbG9hZGVyCiAgICAgICAgZWxpZiBtb2RlPT0nZXZhbF90cmFpbic6CiAgICAgICAgICAgIGV2YWxfZGF0YXNldCA9IGNsb3RoaW5nX2RhdGFzZXQoc2VsZi5yb290LHRyYW5zZm9ybT1zZWxmLnRyYW5zZm9ybV90ZXN0LCBtb2RlPSdhbGwnLG51bV9zYW1wbGVzPXNlbGYubnVtX2JhdGNoZXMqc2VsZi5iYXRjaF9zaXplKQogICAgICAgICAgICBldmFsX2xvYWRlciA9IERhdGFMb2FkZXIoCiAgICAgICAgICAgICAgICBkYXRhc2V0PWV2YWxfZGF0YXNldCwgCiAgICAgICAgICAgICAgICBiYXRjaF9zaXplPXNlbGYuYmF0Y2hfc2l6ZSwKICAgICAgICAgICAgICAgIHNodWZmbGU9RmFsc2UsCiAgICAgICAgICAgICAgICBudW1fd29ya2Vycz1zZWxmLm51bV93b3JrZXJzKSAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIGV2YWxfbG9hZGVyICAgICAgICAKICAgICAgICBlbGlmIG1vZGU9PSd0ZXN0JzoKICAgICAgICAgICAgdGVzdF9kYXRhc2V0ID0gY2xvdGhpbmdfZGF0YXNldChzZWxmLnJvb3QsdHJhbnNmb3JtPXNlbGYudHJhbnNmb3JtX3Rlc3QsIG1vZGU9J3Rlc3QnKQogICAgICAgICAgICB0ZXN0X2xvYWRlciA9IERhdGFMb2FkZXIoCiAgICAgICAgICAgICAgICBkYXRhc2V0PXRlc3RfZGF0YXNldCwgCiAgICAgICAgICAgICAgICBiYXRjaF9zaXplPTEwMDAsCiAgICAgICAgICAgICAgICBzaHVmZmxlPUZhbHNlLAogICAgICAgICAgICAgICAgbnVtX3dvcmtlcnM9c2VsZi5udW1fd29ya2VycykgICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiB0ZXN0X2xvYWRlciAgICAgICAgICAgICAKICAgICAgICBlbGlmIG1vZGU9PSd2YWwnOgogICAgICAgICAgICB2YWxfZGF0YXNldCA9IGNsb3RoaW5nX2RhdGFzZXQoc2VsZi5yb290LHRyYW5zZm9ybT1zZWxmLnRyYW5zZm9ybV90ZXN0LCBtb2RlPSd2YWwnKQogICAgICAgICAgICB2YWxfbG9hZGVyID0gRGF0YUxvYWRlcigKICAgICAgICAgICAgICAgIGRhdGFzZXQ9dmFsX2RhdGFzZXQsIAogICAgICAgICAgICAgICAgYmF0Y2hfc2l6ZT0xMDAwLAogICAgICAgICAgICAgICAgc2h1ZmZsZT1GYWxzZSwKICAgICAgICAgICAgICAgIG51bV93b3JrZXJzPXNlbGYubnVtX3dvcmtlcnMpICAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gdmFsX2xvYWRlciAgICAgCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKICAgICAgICAgICAgICAgICAgICBpbWdfcGF0aCA9ICclcy8nJXNlbGYucm9vdCtsWzc6XQogICAgICAgICAgICAgICAgICAgIHNlbGYudGVzdF9pbWdzLmFwcGVuZChpbWdfcGF0aCkgICAgICAgICAgICAKPHxmaW1fZW5kfD4="]
["26501928f522750f0d696a98d0d452ad6bf36ff5-3","26501928f522750f0d696a98d0d452ad6bf36ff5","PHxmaW1fcHJlZml4fD4KZnJvbSB0b3JjaC51dGlscy5kYXRhIGltcG9ydCBEYXRhc2V0LCBEYXRhTG9hZGVyCmltcG9ydCB0b3JjaHZpc2lvbi50cmFuc2Zvcm1zIGFzIHRyYW5zZm9ybXMKaW1wb3J0IHJhbmRvbQppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBQSUwgaW1wb3J0IEltYWdlCmltcG9ydCBqc29uCmltcG9ydCB0b3JjaAoKY2xhc3MgY2xvdGhpbmdfZGF0YXNldChEYXRhc2V0KTogCiAgICBkZWYgX19pbml0X18oc2VsZiwgcm9vdCwgdHJhbnNmb3JtLCBtb2RlLCBudW1fc2FtcGxlcz0wLCBwcmVkPVtdLCBwcm9iYWJpbGl0eT1bXSwgcGF0aHM9W10sIG51bV9jbGFzcz0xNCk6IAogICAgICAgIAogICAgICAgIHNlbGYucm9vdCA9IHJvb3QKICAgICAgICBzZWxmLnRyYW5zZm9ybSA9IHRyYW5zZm9ybQogICAgICAgIHNlbGYubW9kZSA9IG1vZGUKICAgICAgICBzZWxmLnRyYWluX2xhYmVscyA9IHt9CiAgICAgICAgc2VsZi50ZXN0X2xhYmVscyA9IHt9CiAgICAgICAgc2VsZi52YWxfbGFiZWxzID0ge30gICAgICAgICAgICAKICAgICAgICAKICAgICAgICB3aXRoIG9wZW4oJyVzL25vaXN5X2xhYmVsX2t2LnR4dCclc2VsZi5yb290LCdyJykgYXMgZjoKICAgICAgICAgICAgbGluZXMgPSBmLnJlYWQoKS5zcGxpdGxpbmVzKCkKICAgICAgICAgICAgZm9yIGwgaW4gbGluZXM6CiAgICAgICAgICAgICAgICBlbnRyeSA9IGwuc3BsaXQoKSAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpbWdfcGF0aCA9ICclcy8nJXNlbGYucm9vdCtlbnRyeVswXVs3Ol0KICAgICAgICAgICAgICAgIHNlbGYudHJhaW5fbGFiZWxzW2ltZ19wYXRoXSA9IGludChlbnRyeVsxXSkgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgd2l0aCBvcGVuKCclcy9jbGVhbl9sYWJlbF9rdi50eHQnJXNlbGYucm9vdCwncicpIGFzIGY6CiAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkKCkuc3BsaXRsaW5lcygpCiAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgogICAgICAgICAgICAgICAgZW50cnkgPSBsLnNwbGl0KCkgICAgICAgICAgIAogICAgICAgICAgICAgICAgaW1nX3BhdGggPSAnJXMvJyVzZWxmLnJvb3QrZW50cnlbMF1bNzpdCiAgICAgICAgICAgICAgICBzZWxmLnRlc3RfbGFiZWxzW2ltZ19wYXRoXSA9IGludChlbnRyeVsxXSkgICAKCiAgICAgICAgaWYgbW9kZSA9PSAnYWxsJzoKICAgICAgICAgICAgdHJhaW5faW1ncz1bXQogICAgICAgICAgICB3aXRoIG9wZW4oJyVzL25vaXN5X3RyYWluX2tleV9saXN0LnR4dCclc2VsZi5yb290LCdyJykgYXMgZjoKICAgICAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkKCkuc3BsaXRsaW5lcygpCiAgICAgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKICAgICAgICAgICAgICAgICAgICBpbWdfcGF0aCA9ICclcy8nJXNlbGYucm9vdCtsWzc6XQogICAgICAgICAgICAgICAgICAgIHRyYWluX2ltZ3MuYXBwZW5kKGltZ19wYXRoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKHRyYWluX2ltZ3MpCiAgICAgICAgICAgIGNsYXNzX251bSA9IHRvcmNoLnplcm9zKG51bV9jbGFzcykKICAgICAgICAgICAgc2VsZi50cmFpbl9pbWdzID0gW10KICAgICAgICAgICAgZm9yIGltcGF0aCBpbiB0cmFpbl9pbWdzOgogICAgICAgICAgICAgICAgbGFiZWwgPSBzZWxmLnRyYWluX2xhYmVsc1tpbXBhdGhdIAogICAgICAgICAgICAgICAgaWYgY2xhc3NfbnVtW2xhYmVsXTwobnVtX3NhbXBsZXMvMTQpIGFuZCBsZW4oc2VsZi50cmFpbl9pbWdzKTxudW1fc2FtcGxlczoKICAgICAgICAgICAgICAgICAgICBzZWxmLnRyYWluX2ltZ3MuYXBwZW5kKGltcGF0aCkKICAgICAgICAgICAgICAgICAgICBjbGFzc19udW1bbGFiZWxdKz0xCiAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKHNlbGYudHJhaW5faW1ncykgICAgICAgCiAgICAgICAgZWxpZiBzZWxmLm1vZGUgPT0gImxhYmVsZWQiOiAgIAogICAgICAgICAgICB0cmFpbl9pbWdzID0gcGF0aHMgCiAgICAgICAgICAgIHByZWRfaWR4ID0gcHJlZC5ub256ZXJvKClbMF0KICAgICAgICAgICAgc2VsZi50cmFpbl9pbWdzID0gW3RyYWluX2ltZ3NbaV0gZm9yIGkgaW4gcHJlZF9pZHhdICAgICAgICAgICAgICAgIAogICAgICAgICAgICBzZWxmLnByb2JhYmlsaXR5ID0gW3Byb2JhYmlsaXR5W2ldIGZvciBpIGluIHByZWRfaWR4XSAgICAgICAgICAgIAogICAgICAgICAgICBwcmludCgiJXMgZGF0YSBoYXMgYSBzaXplIG9mICVkIiUoc2VsZi5tb2RlLGxlbihzZWxmLnRyYWluX2ltZ3MpKSkKICAgICAgICBlbGlmIHNlbGYubW9kZSA9PSAidW5sYWJlbGVkIjogIAogICAgICAgICAgICB0cmFpbl9pbWdzID0gcGF0aHMgCiAgICAgICAgICAgIHByZWRfaWR4ID0gKDEtcHJlZCkubm9uemVybygpWzBdICAKICAgICAgICAgICAgc2VsZi50cmFpbl9pbWdzID0gW3RyYWluX2ltZ3NbaV0gZm9yIGkgaW4gcHJlZF9pZHhdICAgICAgICAgICAgICAgIAogICAgICAgICAgICBzZWxmLnByb2JhYmlsaXR5ID0gW3Byb2JhYmlsaXR5W2ldIGZvciBpIGluIHByZWRfaWR4XSAgICAgICAgICAgIAogICAgICAgICAgICBwcmludCgiJXMgZGF0YSBoYXMgYSBzaXplIG9mICVkIiUoc2VsZi5tb2RlLGxlbihzZWxmLnRyYWluX2ltZ3MpKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIGVsaWYgbW9kZT09J3Rlc3QnOgogICAgICAgICAgICBzZWxmLnRlc3RfaW1ncyA9IFtdCiAgICAgICAgICAgIHdpdGggb3BlbignJXMvY2xlYW5fdGVzdF9rZXlfbGlzdC50eHQnJXNlbGYucm9vdCwncicpIGFzIGY6CiAgICAgICAgICAgICAgICBsaW5lcyA9IGYucmVhZCgpLnNwbGl0bGluZXMoKQogICAgICAgICAgICAgICAgZm9yIGwgaW4gbGluZXM6CiAgICAgICAgICAgICAgICAgICAgaW1nX3BhdGggPSAnJXMvJyVzZWxmLnJvb3QrbFs3Ol0KICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3RfaW1ncy5hcHBlbmQoaW1nX3BhdGgpICAgICAgICAgICAgCiAgICAgICAgZWxpZiBtb2RlPT0ndmFsJzoKICAgICAgICAgICAgc2VsZi52YWxfaW1ncyA9IFtdCiAgICAgICAgICAgIHdpdGggb3BlbignJXMvY2xlYW5fdmFsX2tleV9saXN0LnR4dCclc2VsZi5yb290LCdyJykgYXMgZjoKICAgICAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkKCkuc3BsaXRsaW5lcygpCiAgICAgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKICAgICAgICAgICAgICAgICAgICBpbWdfcGF0aCA9ICclcy8nJXNlbGYucm9vdCtsWzc6XQogICAgICAgICAgICAgICAgICAgIHNlbGYudmFsX2ltZ3MuYXBwZW5kKGltZ19wYXRoKQogICAgICAgICAgICAgICAgICAgIAogICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KTogIAogICAgICAgIGlmIHNlbGYubW9kZT09J2xhYmVsZWQnOgogICAgICAgICAgICBpbWdfcGF0aCA9IHNlbGYudHJhaW5faW1nc1tpbmRleF0KICAgICAgICAgICAgdGFyZ2V0ID0gc2VsZi50cmFpbl9sYWJlbHNbaW1nX3BhdGhdIAogICAgICAgICAgICBwcm9iID0gc2VsZi5wcm9iYWJpbGl0eVtpbmRleF0KICAgICAgICAgICAgaW1hZ2UgPSBJbWFnZS5vcGVuKGltZ19wYXRoKS5jb252ZXJ0KCdSR0InKSAgICAKICAgICAgICAgICAgaW1nMSA9IHNlbGYudHJhbnNmb3JtKGltYWdlKSAKICAgICAgICAgICAgaW1nMiA9IHNlbGYudHJhbnNmb3JtKGltYWdlKSAKICAgICAgICAgICAgcmV0dXJuIGltZzEsIGltZzIsIHRhcmdldCwgcHJvYiAgICAgICAgICAgICAgCiAgICAgICAgZWxpZiBzZWxmLm1vZGU9PSd1bmxhYmVsZWQnOgogICAgICAgICAgICBpbWdfcGF0aCA9IHNlbGYudHJhaW5faW1nc1tpbmRleF0KICAgICAgICAgICAgaW1hZ2UgPSBJbWFnZS5vcGVuKGltZ19wYXRoKS5jb252ZXJ0KCdSR0InKSAgICAKICAgICAgICAgICAgaW1nMSA9IHNlbGYudHJhbnNmb3JtKGltYWdlKSAKICAgICAgICAgICAgaW1nMiA9IHNlbGYudHJhbnNmb3JtKGltYWdlKSAKICAgICAgICAgICAgcmV0dXJuIGltZzEsIGltZzIgIAogICAgICAgIGVsaWYgc2VsZi5tb2RlPT0nYWxsJzoKPHxmaW1faG9sZXw+CiAgICAgICAgICAgIHJldHVybiBpbWcsIHRhcmdldCwgaW1nX3BhdGggICAgICAgIAogICAgICAgIGVsaWYgc2VsZi5tb2RlPT0ndGVzdCc6CiAgICAgICAgICAgIGltZ19wYXRoID0gc2VsZi50ZXN0X2ltZ3NbaW5kZXhdCiAgICAgICAgICAgIHRhcmdldCA9IHNlbGYudGVzdF9sYWJlbHNbaW1nX3BhdGhdICAgICAKICAgICAgICAgICAgaW1hZ2UgPSBJbWFnZS5vcGVuKGltZ19wYXRoKS5jb252ZXJ0KCdSR0InKSAgIAogICAgICAgICAgICBpbWcgPSBzZWxmLnRyYW5zZm9ybShpbWFnZSkgCiAgICAgICAgICAgIHJldHVybiBpbWcsIHRhcmdldAogICAgICAgIGVsaWYgc2VsZi5tb2RlPT0ndmFsJzoKICAgICAgICAgICAgaW1nX3BhdGggPSBzZWxmLnZhbF9pbWdzW2luZGV4XQogICAgICAgICAgICB0YXJnZXQgPSBzZWxmLnRlc3RfbGFiZWxzW2ltZ19wYXRoXSAgICAgCiAgICAgICAgICAgIGltYWdlID0gSW1hZ2Uub3BlbihpbWdfcGF0aCkuY29udmVydCgnUkdCJykgICAKICAgICAgICAgICAgaW1nID0gc2VsZi50cmFuc2Zvcm0oaW1hZ2UpIAogICAgICAgICAgICByZXR1cm4gaW1nLCB0YXJnZXQgICAgCiAgICAgICAgCiAgICBkZWYgX19sZW5fXyhzZWxmKToKICAgICAgICBpZiBzZWxmLm1vZGU9PSd0ZXN0JzoKICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLnRlc3RfaW1ncykKICAgICAgICBpZiBzZWxmLm1vZGU9PSd2YWwnOgogICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYudmFsX2ltZ3MpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLnRyYWluX2ltZ3MpICAgICAgICAgICAgCiAgICAgICAgCmNsYXNzIGNsb3RoaW5nX2RhdGFsb2FkZXIoKTogIAogICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3QsIGJhdGNoX3NpemUsIG51bV9iYXRjaGVzLCBudW1fd29ya2Vycyk6ICAgIAogICAgICAgIHNlbGYuYmF0Y2hfc2l6ZSA9IGJhdGNoX3NpemUKICAgICAgICBzZWxmLm51bV93b3JrZXJzID0gbnVtX3dvcmtlcnMKICAgICAgICBzZWxmLm51bV9iYXRjaGVzID0gbnVtX2JhdGNoZXMKICAgICAgICBzZWxmLnJvb3QgPSByb290CiAgICAgICAgICAgICAgICAgICAKICAgICAgICBzZWxmLnRyYW5zZm9ybV90cmFpbiA9IHRyYW5zZm9ybXMuQ29tcG9zZShbCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1zLlJlc2l6ZSgyNTYpLAogICAgICAgICAgICAgICAgdHJhbnNmb3Jtcy5SYW5kb21Dcm9wKDIyNCksCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1zLlJhbmRvbUhvcml6b250YWxGbGlwKCksCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1zLlRvVGVuc29yKCksICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdHJhbnNmb3Jtcy5Ob3JtYWxpemUoKDAuNjk1OSwgMC42NTM3LCAwLjYzNzEpLCgwLjMxMTMsIDAuMzE5MiwgMC4zMjE0KSksICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIF0pIAogICAgICAgIHNlbGYudHJhbnNmb3JtX3Rlc3QgPSB0cmFuc2Zvcm1zLkNvbXBvc2UoWwogICAgICAgICAgICAgICAgdHJhbnNmb3Jtcy5SZXNpemUoMjU2KSwKICAgICAgICAgICAgICAgIHRyYW5zZm9ybXMuQ2VudGVyQ3JvcCgyMjQpLAogICAgICAgICAgICAgICAgdHJhbnNmb3Jtcy5Ub1RlbnNvcigpLAogICAgICAgICAgICAgICAgdHJhbnNmb3Jtcy5Ob3JtYWxpemUoKDAuNjk1OSwgMC42NTM3LCAwLjYzNzEpLCgwLjMxMTMsIDAuMzE5MiwgMC4zMjE0KSksCiAgICAgICAgICAgIF0pICAgICAgICAKICAgIGRlZiBydW4oc2VsZixtb2RlLHByZWQ9W10scHJvYj1bXSxwYXRocz1bXSk6ICAgICAgICAKICAgICAgICBpZiBtb2RlPT0nd2FybXVwJzoKICAgICAgICAgICAgd2FybXVwX2RhdGFzZXQgPSBjbG90aGluZ19kYXRhc2V0KHNlbGYucm9vdCx0cmFuc2Zvcm09c2VsZi50cmFuc2Zvcm1fdHJhaW4sIG1vZGU9J2FsbCcsbnVtX3NhbXBsZXM9c2VsZi5udW1fYmF0Y2hlcypzZWxmLmJhdGNoX3NpemUqMikKICAgICAgICAgICAgd2FybXVwX2xvYWRlciA9IERhdGFMb2FkZXIoCiAgICAgICAgICAgICAgICBkYXRhc2V0PXdhcm11cF9kYXRhc2V0LCAKICAgICAgICAgICAgICAgIGJhdGNoX3NpemU9c2VsZi5iYXRjaF9zaXplKjIsCiAgICAgICAgICAgICAgICBzaHVmZmxlPVRydWUsCiAgICAgICAgICAgICAgICBudW1fd29ya2Vycz1zZWxmLm51bV93b3JrZXJzKSAgCiAgICAgICAgICAgIHJldHVybiB3YXJtdXBfbG9hZGVyCiAgICAgICAgZWxpZiBtb2RlPT0ndHJhaW4nOgogICAgICAgICAgICBsYWJlbGVkX2RhdGFzZXQgPSBjbG90aGluZ19kYXRhc2V0KHNlbGYucm9vdCx0cmFuc2Zvcm09c2VsZi50cmFuc2Zvcm1fdHJhaW4sIG1vZGU9J2xhYmVsZWQnLHByZWQ9cHJlZCwgcHJvYmFiaWxpdHk9cHJvYixwYXRocz1wYXRocykKICAgICAgICAgICAgbGFiZWxlZF9sb2FkZXIgPSBEYXRhTG9hZGVyKAogICAgICAgICAgICAgICAgZGF0YXNldD1sYWJlbGVkX2RhdGFzZXQsIAogICAgICAgICAgICAgICAgYmF0Y2hfc2l6ZT1zZWxmLmJhdGNoX3NpemUsCiAgICAgICAgICAgICAgICBzaHVmZmxlPVRydWUsCiAgICAgICAgICAgICAgICBudW1fd29ya2Vycz1zZWxmLm51bV93b3JrZXJzKSAgICAgICAgICAgCiAgICAgICAgICAgIHVubGFiZWxlZF9kYXRhc2V0ID0gY2xvdGhpbmdfZGF0YXNldChzZWxmLnJvb3QsdHJhbnNmb3JtPXNlbGYudHJhbnNmb3JtX3RyYWluLCBtb2RlPSd1bmxhYmVsZWQnLHByZWQ9cHJlZCwgcHJvYmFiaWxpdHk9cHJvYixwYXRocz1wYXRocykKICAgICAgICAgICAgdW5sYWJlbGVkX2xvYWRlciA9IERhdGFMb2FkZXIoCiAgICAgICAgICAgICAgICBkYXRhc2V0PXVubGFiZWxlZF9kYXRhc2V0LCAKICAgICAgICAgICAgICAgIGJhdGNoX3NpemU9aW50KHNlbGYuYmF0Y2hfc2l6ZSksCiAgICAgICAgICAgICAgICBzaHVmZmxlPVRydWUsCiAgICAgICAgICAgICAgICBudW1fd29ya2Vycz1zZWxmLm51bV93b3JrZXJzKSAgIAogICAgICAgICAgICByZXR1cm4gbGFiZWxlZF9sb2FkZXIsdW5sYWJlbGVkX2xvYWRlcgogICAgICAgIGVsaWYgbW9kZT09J2V2YWxfdHJhaW4nOgogICAgICAgICAgICBldmFsX2RhdGFzZXQgPSBjbG90aGluZ19kYXRhc2V0KHNlbGYucm9vdCx0cmFuc2Zvcm09c2VsZi50cmFuc2Zvcm1fdGVzdCwgbW9kZT0nYWxsJyxudW1fc2FtcGxlcz1zZWxmLm51bV9iYXRjaGVzKnNlbGYuYmF0Y2hfc2l6ZSkKICAgICAgICAgICAgZXZhbF9sb2FkZXIgPSBEYXRhTG9hZGVyKAogICAgICAgICAgICAgICAgZGF0YXNldD1ldmFsX2RhdGFzZXQsIAogICAgICAgICAgICAgICAgYmF0Y2hfc2l6ZT1zZWxmLmJhdGNoX3NpemUsCiAgICAgICAgICAgICAgICBzaHVmZmxlPUZhbHNlLAogICAgICAgICAgICAgICAgbnVtX3dvcmtlcnM9c2VsZi5udW1fd29ya2VycykgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiBldmFsX2xvYWRlciAgICAgICAgCiAgICAgICAgZWxpZiBtb2RlPT0ndGVzdCc6CiAgICAgICAgICAgIHRlc3RfZGF0YXNldCA9IGNsb3RoaW5nX2RhdGFzZXQoc2VsZi5yb290LHRyYW5zZm9ybT1zZWxmLnRyYW5zZm9ybV90ZXN0LCBtb2RlPSd0ZXN0JykKICAgICAgICAgICAgdGVzdF9sb2FkZXIgPSBEYXRhTG9hZGVyKAogICAgICAgICAgICAgICAgZGF0YXNldD10ZXN0X2RhdGFzZXQsIAogICAgICAgICAgICAgICAgYmF0Y2hfc2l6ZT0xMDAwLAogICAgICAgICAgICAgICAgc2h1ZmZsZT1GYWxzZSwKICAgICAgICAgICAgICAgIG51bV93b3JrZXJzPXNlbGYubnVtX3dvcmtlcnMpICAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gdGVzdF9sb2FkZXIgICAgICAgICAgICAgCiAgICAgICAgZWxpZiBtb2RlPT0ndmFsJzoKICAgICAgICAgICAgdmFsX2RhdGFzZXQgPSBjbG90aGluZ19kYXRhc2V0KHNlbGYucm9vdCx0cmFuc2Zvcm09c2VsZi50cmFuc2Zvcm1fdGVzdCwgbW9kZT0ndmFsJykKICAgICAgICAgICAgdmFsX2xvYWRlciA9IERhdGFMb2FkZXIoCiAgICAgICAgICAgICAgICBkYXRhc2V0PXZhbF9kYXRhc2V0LCAKICAgICAgICAgICAgICAgIGJhdGNoX3NpemU9MTAwMCwKICAgICAgICAgICAgICAgIHNodWZmbGU9RmFsc2UsCiAgICAgICAgICAgICAgICBudW1fd29ya2Vycz1zZWxmLm51bV93b3JrZXJzKSAgICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHZhbF9sb2FkZXIgICAgIAo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBpbWdfcGF0aCA9IHNlbGYudHJhaW5faW1nc1tpbmRleF0KICAgICAgICAgICAgdGFyZ2V0ID0gc2VsZi50cmFpbl9sYWJlbHNbaW1nX3BhdGhdICAgICAKICAgICAgICAgICAgaW1hZ2UgPSBJbWFnZS5vcGVuKGltZ19wYXRoKS5jb252ZXJ0KCdSR0InKSAgIAogICAgICAgICAgICBpbWcgPSBzZWxmLnRyYW5zZm9ybShpbWFnZSkKPHxmaW1fZW5kfD4="]
["26501928f522750f0d696a98d0d452ad6bf36ff5-4","26501928f522750f0d696a98d0d452ad6bf36ff5","PHxmaW1fcHJlZml4fD4KZnJvbSB0b3JjaC51dGlscy5kYXRhIGltcG9ydCBEYXRhc2V0LCBEYXRhTG9hZGVyCmltcG9ydCB0b3JjaHZpc2lvbi50cmFuc2Zvcm1zIGFzIHRyYW5zZm9ybXMKaW1wb3J0IHJhbmRvbQppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBQSUwgaW1wb3J0IEltYWdlCmltcG9ydCBqc29uCmltcG9ydCB0b3JjaAoKY2xhc3MgY2xvdGhpbmdfZGF0YXNldChEYXRhc2V0KTogCiAgICBkZWYgX19pbml0X18oc2VsZiwgcm9vdCwgdHJhbnNmb3JtLCBtb2RlLCBudW1fc2FtcGxlcz0wLCBwcmVkPVtdLCBwcm9iYWJpbGl0eT1bXSwgcGF0aHM9W10sIG51bV9jbGFzcz0xNCk6IAogICAgICAgIAogICAgICAgIHNlbGYucm9vdCA9IHJvb3QKICAgICAgICBzZWxmLnRyYW5zZm9ybSA9IHRyYW5zZm9ybQogICAgICAgIHNlbGYubW9kZSA9IG1vZGUKICAgICAgICBzZWxmLnRyYWluX2xhYmVscyA9IHt9CiAgICAgICAgc2VsZi50ZXN0X2xhYmVscyA9IHt9CiAgICAgICAgc2VsZi52YWxfbGFiZWxzID0ge30gICAgICAgICAgICAKICAgICAgICAKICAgICAgICB3aXRoIG9wZW4oJyVzL25vaXN5X2xhYmVsX2t2LnR4dCclc2VsZi5yb290LCdyJykgYXMgZjoKICAgICAgICAgICAgbGluZXMgPSBmLnJlYWQoKS5zcGxpdGxpbmVzKCkKICAgICAgICAgICAgZm9yIGwgaW4gbGluZXM6CiAgICAgICAgICAgICAgICBlbnRyeSA9IGwuc3BsaXQoKSAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpbWdfcGF0aCA9ICclcy8nJXNlbGYucm9vdCtlbnRyeVswXVs3Ol0KICAgICAgICAgICAgICAgIHNlbGYudHJhaW5fbGFiZWxzW2ltZ19wYXRoXSA9IGludChlbnRyeVsxXSkgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgd2l0aCBvcGVuKCclcy9jbGVhbl9sYWJlbF9rdi50eHQnJXNlbGYucm9vdCwncicpIGFzIGY6CiAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkKCkuc3BsaXRsaW5lcygpCiAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgogICAgICAgICAgICAgICAgZW50cnkgPSBsLnNwbGl0KCkgICAgICAgICAgIAogICAgICAgICAgICAgICAgaW1nX3BhdGggPSAnJXMvJyVzZWxmLnJvb3QrZW50cnlbMF1bNzpdCiAgICAgICAgICAgICAgICBzZWxmLnRlc3RfbGFiZWxzW2ltZ19wYXRoXSA9IGludChlbnRyeVsxXSkgICAKCiAgICAgICAgaWYgbW9kZSA9PSAnYWxsJzoKICAgICAgICAgICAgdHJhaW5faW1ncz1bXQogICAgICAgICAgICB3aXRoIG9wZW4oJyVzL25vaXN5X3RyYWluX2tleV9saXN0LnR4dCclc2VsZi5yb290LCdyJykgYXMgZjoKICAgICAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkKCkuc3BsaXRsaW5lcygpCiAgICAgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKICAgICAgICAgICAgICAgICAgICBpbWdfcGF0aCA9ICclcy8nJXNlbGYucm9vdCtsWzc6XQogICAgICAgICAgICAgICAgICAgIHRyYWluX2ltZ3MuYXBwZW5kKGltZ19wYXRoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgbGFiZWwgPSBzZWxmLnRyYWluX2xhYmVsc1tpbXBhdGhdIAogICAgICAgICAgICAgICAgaWYgY2xhc3NfbnVtW2xhYmVsXTwobnVtX3NhbXBsZXMvMTQpIGFuZCBsZW4oc2VsZi50cmFpbl9pbWdzKTxudW1fc2FtcGxlczoKICAgICAgICAgICAgICAgICAgICBzZWxmLnRyYWluX2ltZ3MuYXBwZW5kKGltcGF0aCkKICAgICAgICAgICAgICAgICAgICBjbGFzc19udW1bbGFiZWxdKz0xCiAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKHNlbGYudHJhaW5faW1ncykgICAgICAgCiAgICAgICAgZWxpZiBzZWxmLm1vZGUgPT0gImxhYmVsZWQiOiAgIAogICAgICAgICAgICB0cmFpbl9pbWdzID0gcGF0aHMgCiAgICAgICAgICAgIHByZWRfaWR4ID0gcHJlZC5ub256ZXJvKClbMF0KICAgICAgICAgICAgc2VsZi50cmFpbl9pbWdzID0gW3RyYWluX2ltZ3NbaV0gZm9yIGkgaW4gcHJlZF9pZHhdICAgICAgICAgICAgICAgIAogICAgICAgICAgICBzZWxmLnByb2JhYmlsaXR5ID0gW3Byb2JhYmlsaXR5W2ldIGZvciBpIGluIHByZWRfaWR4XSAgICAgICAgICAgIAogICAgICAgICAgICBwcmludCgiJXMgZGF0YSBoYXMgYSBzaXplIG9mICVkIiUoc2VsZi5tb2RlLGxlbihzZWxmLnRyYWluX2ltZ3MpKSkKICAgICAgICBlbGlmIHNlbGYubW9kZSA9PSAidW5sYWJlbGVkIjogIAogICAgICAgICAgICB0cmFpbl9pbWdzID0gcGF0aHMgCiAgICAgICAgICAgIHByZWRfaWR4ID0gKDEtcHJlZCkubm9uemVybygpWzBdICAKICAgICAgICAgICAgc2VsZi50cmFpbl9pbWdzID0gW3RyYWluX2ltZ3NbaV0gZm9yIGkgaW4gcHJlZF9pZHhdICAgICAgICAgICAgICAgIAogICAgICAgICAgICBzZWxmLnByb2JhYmlsaXR5ID0gW3Byb2JhYmlsaXR5W2ldIGZvciBpIGluIHByZWRfaWR4XSAgICAgICAgICAgIAogICAgICAgICAgICBwcmludCgiJXMgZGF0YSBoYXMgYSBzaXplIG9mICVkIiUoc2VsZi5tb2RlLGxlbihzZWxmLnRyYWluX2ltZ3MpKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIGVsaWYgbW9kZT09J3Rlc3QnOgogICAgICAgICAgICBzZWxmLnRlc3RfaW1ncyA9IFtdCiAgICAgICAgICAgIHdpdGggb3BlbignJXMvY2xlYW5fdGVzdF9rZXlfbGlzdC50eHQnJXNlbGYucm9vdCwncicpIGFzIGY6CiAgICAgICAgICAgICAgICBsaW5lcyA9IGYucmVhZCgpLnNwbGl0bGluZXMoKQogICAgICAgICAgICAgICAgZm9yIGwgaW4gbGluZXM6CiAgICAgICAgICAgICAgICAgICAgaW1nX3BhdGggPSAnJXMvJyVzZWxmLnJvb3QrbFs3Ol0KICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3RfaW1ncy5hcHBlbmQoaW1nX3BhdGgpICAgICAgICAgICAgCiAgICAgICAgZWxpZiBtb2RlPT0ndmFsJzoKICAgICAgICAgICAgc2VsZi52YWxfaW1ncyA9IFtdCiAgICAgICAgICAgIHdpdGggb3BlbignJXMvY2xlYW5fdmFsX2tleV9saXN0LnR4dCclc2VsZi5yb290LCdyJykgYXMgZjoKICAgICAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkKCkuc3BsaXRsaW5lcygpCiAgICAgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKICAgICAgICAgICAgICAgICAgICBpbWdfcGF0aCA9ICclcy8nJXNlbGYucm9vdCtsWzc6XQogICAgICAgICAgICAgICAgICAgIHNlbGYudmFsX2ltZ3MuYXBwZW5kKGltZ19wYXRoKQogICAgICAgICAgICAgICAgICAgIAogICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KTogIAogICAgICAgIGlmIHNlbGYubW9kZT09J2xhYmVsZWQnOgogICAgICAgICAgICBpbWdfcGF0aCA9IHNlbGYudHJhaW5faW1nc1tpbmRleF0KICAgICAgICAgICAgdGFyZ2V0ID0gc2VsZi50cmFpbl9sYWJlbHNbaW1nX3BhdGhdIAogICAgICAgICAgICBwcm9iID0gc2VsZi5wcm9iYWJpbGl0eVtpbmRleF0KICAgICAgICAgICAgaW1hZ2UgPSBJbWFnZS5vcGVuKGltZ19wYXRoKS5jb252ZXJ0KCdSR0InKSAgICAKICAgICAgICAgICAgaW1nMSA9IHNlbGYudHJhbnNmb3JtKGltYWdlKSAKICAgICAgICAgICAgaW1nMiA9IHNlbGYudHJhbnNmb3JtKGltYWdlKSAKICAgICAgICAgICAgcmV0dXJuIGltZzEsIGltZzIsIHRhcmdldCwgcHJvYiAgICAgICAgICAgICAgCiAgICAgICAgZWxpZiBzZWxmLm1vZGU9PSd1bmxhYmVsZWQnOgogICAgICAgICAgICBpbWdfcGF0aCA9IHNlbGYudHJhaW5faW1nc1tpbmRleF0KICAgICAgICAgICAgaW1hZ2UgPSBJbWFnZS5vcGVuKGltZ19wYXRoKS5jb252ZXJ0KCdSR0InKSAgICAKICAgICAgICAgICAgaW1nMSA9IHNlbGYudHJhbnNmb3JtKGltYWdlKSAKICAgICAgICAgICAgaW1nMiA9IHNlbGYudHJhbnNmb3JtKGltYWdlKSAKICAgICAgICAgICAgcmV0dXJuIGltZzEsIGltZzIgIAogICAgICAgIGVsaWYgc2VsZi5tb2RlPT0nYWxsJzoKICAgICAgICAgICAgaW1nX3BhdGggPSBzZWxmLnRyYWluX2ltZ3NbaW5kZXhdCiAgICAgICAgICAgIHRhcmdldCA9IHNlbGYudHJhaW5fbGFiZWxzW2ltZ19wYXRoXSAgICAgCiAgICAgICAgICAgIGltYWdlID0gSW1hZ2Uub3BlbihpbWdfcGF0aCkuY29udmVydCgnUkdCJykgICAKICAgICAgICAgICAgaW1nID0gc2VsZi50cmFuc2Zvcm0oaW1hZ2UpCiAgICAgICAgICAgIHJldHVybiBpbWcsIHRhcmdldCwgaW1nX3BhdGggICAgICAgIAogICAgICAgIGVsaWYgc2VsZi5tb2RlPT0ndGVzdCc6CiAgICAgICAgICAgIGltZ19wYXRoID0gc2VsZi50ZXN0X2ltZ3NbaW5kZXhdCiAgICAgICAgICAgIHRhcmdldCA9IHNlbGYudGVzdF9sYWJlbHNbaW1nX3BhdGhdICAgICAKICAgICAgICAgICAgaW1hZ2UgPSBJbWFnZS5vcGVuKGltZ19wYXRoKS5jb252ZXJ0KCdSR0InKSAgIAogICAgICAgICAgICBpbWcgPSBzZWxmLnRyYW5zZm9ybShpbWFnZSkgCiAgICAgICAgICAgIHJldHVybiBpbWcsIHRhcmdldAogICAgICAgIGVsaWYgc2VsZi5tb2RlPT0ndmFsJzoKICAgICAgICAgICAgaW1nX3BhdGggPSBzZWxmLnZhbF9pbWdzW2luZGV4XQogICAgICAgICAgICB0YXJnZXQgPSBzZWxmLnRlc3RfbGFiZWxzW2ltZ19wYXRoXSAgICAgCiAgICAgICAgICAgIGltYWdlID0gSW1hZ2Uub3BlbihpbWdfcGF0aCkuY29udmVydCgnUkdCJykgICAKICAgICAgICAgICAgaW1nID0gc2VsZi50cmFuc2Zvcm0oaW1hZ2UpIAogICAgICAgICAgICByZXR1cm4gaW1nLCB0YXJnZXQgICAgCiAgICAgICAgCiAgICBkZWYgX19sZW5fXyhzZWxmKToKICAgICAgICBpZiBzZWxmLm1vZGU9PSd0ZXN0JzoKICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLnRlc3RfaW1ncykKICAgICAgICBpZiBzZWxmLm1vZGU9PSd2YWwnOgogICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYudmFsX2ltZ3MpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLnRyYWluX2ltZ3MpICAgICAgICAgICAgCiAgICAgICAgCmNsYXNzIGNsb3RoaW5nX2RhdGFsb2FkZXIoKTogIAogICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3QsIGJhdGNoX3NpemUsIG51bV9iYXRjaGVzLCBudW1fd29ya2Vycyk6ICAgIAogICAgICAgIHNlbGYuYmF0Y2hfc2l6ZSA9IGJhdGNoX3NpemUKICAgICAgICBzZWxmLm51bV93b3JrZXJzID0gbnVtX3dvcmtlcnMKICAgICAgICBzZWxmLm51bV9iYXRjaGVzID0gbnVtX2JhdGNoZXMKICAgICAgICBzZWxmLnJvb3QgPSByb290CiAgICAgICAgICAgICAgICAgICAKICAgICAgICBzZWxmLnRyYW5zZm9ybV90cmFpbiA9IHRyYW5zZm9ybXMuQ29tcG9zZShbCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1zLlJlc2l6ZSgyNTYpLAogICAgICAgICAgICAgICAgdHJhbnNmb3Jtcy5SYW5kb21Dcm9wKDIyNCksCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1zLlJhbmRvbUhvcml6b250YWxGbGlwKCksCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1zLlRvVGVuc29yKCksICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdHJhbnNmb3Jtcy5Ob3JtYWxpemUoKDAuNjk1OSwgMC42NTM3LCAwLjYzNzEpLCgwLjMxMTMsIDAuMzE5MiwgMC4zMjE0KSksICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIF0pIAogICAgICAgIHNlbGYudHJhbnNmb3JtX3Rlc3QgPSB0cmFuc2Zvcm1zLkNvbXBvc2UoWwogICAgICAgICAgICAgICAgdHJhbnNmb3Jtcy5SZXNpemUoMjU2KSwKICAgICAgICAgICAgICAgIHRyYW5zZm9ybXMuQ2VudGVyQ3JvcCgyMjQpLAogICAgICAgICAgICAgICAgdHJhbnNmb3Jtcy5Ub1RlbnNvcigpLAogICAgICAgICAgICAgICAgdHJhbnNmb3Jtcy5Ob3JtYWxpemUoKDAuNjk1OSwgMC42NTM3LCAwLjYzNzEpLCgwLjMxMTMsIDAuMzE5MiwgMC4zMjE0KSksCiAgICAgICAgICAgIF0pICAgICAgICAKICAgIGRlZiBydW4oc2VsZixtb2RlLHByZWQ9W10scHJvYj1bXSxwYXRocz1bXSk6ICAgICAgICAKICAgICAgICBpZiBtb2RlPT0nd2FybXVwJzoKICAgICAgICAgICAgd2FybXVwX2RhdGFzZXQgPSBjbG90aGluZ19kYXRhc2V0KHNlbGYucm9vdCx0cmFuc2Zvcm09c2VsZi50cmFuc2Zvcm1fdHJhaW4sIG1vZGU9J2FsbCcsbnVtX3NhbXBsZXM9c2VsZi5udW1fYmF0Y2hlcypzZWxmLmJhdGNoX3NpemUqMikKICAgICAgICAgICAgd2FybXVwX2xvYWRlciA9IERhdGFMb2FkZXIoCiAgICAgICAgICAgICAgICBkYXRhc2V0PXdhcm11cF9kYXRhc2V0LCAKICAgICAgICAgICAgICAgIGJhdGNoX3NpemU9c2VsZi5iYXRjaF9zaXplKjIsCiAgICAgICAgICAgICAgICBzaHVmZmxlPVRydWUsCiAgICAgICAgICAgICAgICBudW1fd29ya2Vycz1zZWxmLm51bV93b3JrZXJzKSAgCiAgICAgICAgICAgIHJldHVybiB3YXJtdXBfbG9hZGVyCiAgICAgICAgZWxpZiBtb2RlPT0ndHJhaW4nOgogICAgICAgICAgICBsYWJlbGVkX2RhdGFzZXQgPSBjbG90aGluZ19kYXRhc2V0KHNlbGYucm9vdCx0cmFuc2Zvcm09c2VsZi50cmFuc2Zvcm1fdHJhaW4sIG1vZGU9J2xhYmVsZWQnLHByZWQ9cHJlZCwgcHJvYmFiaWxpdHk9cHJvYixwYXRocz1wYXRocykKICAgICAgICAgICAgbGFiZWxlZF9sb2FkZXIgPSBEYXRhTG9hZGVyKAogICAgICAgICAgICAgICAgZGF0YXNldD1sYWJlbGVkX2RhdGFzZXQsIAogICAgICAgICAgICAgICAgYmF0Y2hfc2l6ZT1zZWxmLmJhdGNoX3NpemUsCiAgICAgICAgICAgICAgICBzaHVmZmxlPVRydWUsCiAgICAgICAgICAgICAgICBudW1fd29ya2Vycz1zZWxmLm51bV93b3JrZXJzKSAgICAgICAgICAgCiAgICAgICAgICAgIHVubGFiZWxlZF9kYXRhc2V0ID0gY2xvdGhpbmdfZGF0YXNldChzZWxmLnJvb3QsdHJhbnNmb3JtPXNlbGYudHJhbnNmb3JtX3RyYWluLCBtb2RlPSd1bmxhYmVsZWQnLHByZWQ9cHJlZCwgcHJvYmFiaWxpdHk9cHJvYixwYXRocz1wYXRocykKICAgICAgICAgICAgdW5sYWJlbGVkX2xvYWRlciA9IERhdGFMb2FkZXIoCiAgICAgICAgICAgICAgICBkYXRhc2V0PXVubGFiZWxlZF9kYXRhc2V0LCAKICAgICAgICAgICAgICAgIGJhdGNoX3NpemU9aW50KHNlbGYuYmF0Y2hfc2l6ZSksCiAgICAgICAgICAgICAgICBzaHVmZmxlPVRydWUsCiAgICAgICAgICAgICAgICBudW1fd29ya2Vycz1zZWxmLm51bV93b3JrZXJzKSAgIAogICAgICAgICAgICByZXR1cm4gbGFiZWxlZF9sb2FkZXIsdW5sYWJlbGVkX2xvYWRlcgogICAgICAgIGVsaWYgbW9kZT09J2V2YWxfdHJhaW4nOgogICAgICAgICAgICBldmFsX2RhdGFzZXQgPSBjbG90aGluZ19kYXRhc2V0KHNlbGYucm9vdCx0cmFuc2Zvcm09c2VsZi50cmFuc2Zvcm1fdGVzdCwgbW9kZT0nYWxsJyxudW1fc2FtcGxlcz1zZWxmLm51bV9iYXRjaGVzKnNlbGYuYmF0Y2hfc2l6ZSkKICAgICAgICAgICAgZXZhbF9sb2FkZXIgPSBEYXRhTG9hZGVyKAogICAgICAgICAgICAgICAgZGF0YXNldD1ldmFsX2RhdGFzZXQsIAogICAgICAgICAgICAgICAgYmF0Y2hfc2l6ZT1zZWxmLmJhdGNoX3NpemUsCiAgICAgICAgICAgICAgICBzaHVmZmxlPUZhbHNlLAogICAgICAgICAgICAgICAgbnVtX3dvcmtlcnM9c2VsZi5udW1fd29ya2VycykgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiBldmFsX2xvYWRlciAgICAgICAgCiAgICAgICAgZWxpZiBtb2RlPT0ndGVzdCc6CiAgICAgICAgICAgIHRlc3RfZGF0YXNldCA9IGNsb3RoaW5nX2RhdGFzZXQoc2VsZi5yb290LHRyYW5zZm9ybT1zZWxmLnRyYW5zZm9ybV90ZXN0LCBtb2RlPSd0ZXN0JykKICAgICAgICAgICAgdGVzdF9sb2FkZXIgPSBEYXRhTG9hZGVyKAogICAgICAgICAgICAgICAgZGF0YXNldD10ZXN0X2RhdGFzZXQsIAogICAgICAgICAgICAgICAgYmF0Y2hfc2l6ZT0xMDAwLAogICAgICAgICAgICAgICAgc2h1ZmZsZT1GYWxzZSwKICAgICAgICAgICAgICAgIG51bV93b3JrZXJzPXNlbGYubnVtX3dvcmtlcnMpICAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gdGVzdF9sb2FkZXIgICAgICAgICAgICAgCiAgICAgICAgZWxpZiBtb2RlPT0ndmFsJzoKICAgICAgICAgICAgdmFsX2RhdGFzZXQgPSBjbG90aGluZ19kYXRhc2V0KHNlbGYucm9vdCx0cmFuc2Zvcm09c2VsZi50cmFuc2Zvcm1fdGVzdCwgbW9kZT0ndmFsJykKICAgICAgICAgICAgdmFsX2xvYWRlciA9IERhdGFMb2FkZXIoCiAgICAgICAgICAgICAgICBkYXRhc2V0PXZhbF9kYXRhc2V0LCAKICAgICAgICAgICAgICAgIGJhdGNoX3NpemU9MTAwMCwKICAgICAgICAgICAgICAgIHNodWZmbGU9RmFsc2UsCiAgICAgICAgICAgICAgICBudW1fd29ya2Vycz1zZWxmLm51bV93b3JrZXJzKSAgICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHZhbF9sb2FkZXIgICAgIAo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICByYW5kb20uc2h1ZmZsZSh0cmFpbl9pbWdzKQogICAgICAgICAgICBjbGFzc19udW0gPSB0b3JjaC56ZXJvcyhudW1fY2xhc3MpCiAgICAgICAgICAgIHNlbGYudHJhaW5faW1ncyA9IFtdCiAgICAgICAgICAgIGZvciBpbXBhdGggaW4gdHJhaW5faW1nczoKPHxmaW1fZW5kfD4="]
["fffcc9c08912ab435de063b0aa8144c6d5e7d3e3-1","fffcc9c08912ab435de063b0aa8144c6d5e7d3e3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNldHVwdG9vbHMKCmltcG9ydCBqbWFwCgoKc2V0dXB0b29scy5zZXR1cCgKICAgIG5hbWU9J2ptYXAnLAogICAgdmVyc2lvbj1qbWFwLlZFUlNJT04sCiAgICBkZXNjcmlwdGlvbj0nQSBwdXJlLVB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSk1BUCBwcm90b2NvbCcsCiAgICBhdXRob3I9J0JyaWFuIENsaW5lJywKICAgIGF1dGhvcl9lbWFpbD0nYnJpYW4uY2xpbmVAZ21haWwuY29tJywKPHxmaW1faG9sZXw+CiAgICBlbnRyeV9wb2ludHM9e30KKQo8fGZpbV9zdWZmaXh8PgogICAgdXJsPSdodHRwczovL2dpdGh1Yi5jb20vYnJpYW5jbGluZS9qbWFwJywKICAgIHBhY2thZ2VzPXNldHVwdG9vbHMuZmluZF9wYWNrYWdlcygpLAogICAgaW5zdGFsbF9yZXF1aXJlcz1vcGVuKCdyZXF1aXJlbWVudHMudHh0JywgJ3InKS5yZWFkbGluZXMoKSwKICAgIG5hbWVzcGFjZV9wYWNrYWdlcz1bXSwKPHxmaW1fZW5kfD4="]
["fffcc9c08912ab435de063b0aa8144c6d5e7d3e3-2","fffcc9c08912ab435de063b0aa8144c6d5e7d3e3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHNldHVwdG9vbHMKCmltcG9ydCBqbWFwCgo8fGZpbV9ob2xlfD4KICAgIGRlc2NyaXB0aW9uPSdBIHB1cmUtUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHRoZSBKTUFQIHByb3RvY29sJywKICAgIGF1dGhvcj0nQnJpYW4gQ2xpbmUnLAogICAgYXV0aG9yX2VtYWlsPSdicmlhbi5jbGluZUBnbWFpbC5jb20nLAogICAgdXJsPSdodHRwczovL2dpdGh1Yi5jb20vYnJpYW5jbGluZS9qbWFwJywKICAgIHBhY2thZ2VzPXNldHVwdG9vbHMuZmluZF9wYWNrYWdlcygpLAogICAgaW5zdGFsbF9yZXF1aXJlcz1vcGVuKCdyZXF1aXJlbWVudHMudHh0JywgJ3InKS5yZWFkbGluZXMoKSwKICAgIG5hbWVzcGFjZV9wYWNrYWdlcz1bXSwKICAgIGVudHJ5X3BvaW50cz17fQopCjx8ZmltX3N1ZmZpeHw+CgpzZXR1cHRvb2xzLnNldHVwKAogICAgbmFtZT0nam1hcCcsCiAgICB2ZXJzaW9uPWptYXAuVkVSU0lPTiwKPHxmaW1fZW5kfD4="]
["268cdc48ebce4d4f8552ae57c3cdd873bec705a2-1","268cdc48ebce4d4f8552ae57c3cdd873bec705a2","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiIFVuaXRUZXN0IGxvYWQoKSBvZiBjb25maWcgb2JqZWN0cyAiIiIKCmltcG9ydCB1bml0dGVzdAoKZnJvbSBjb2RleC5jb25maWcgaW1wb3J0IGxvYWQKClRFU1RfQ09ORklHID0gIiIiCl9pZGVudGl0eTogWyBzZXJpYWwgXQpzZXJpYWw6IDEwMTAxCnNlbnNvcjoKICB0b3BpYzogdG9waWMtdmFsdWUKbG9nZ2luZzoKICBtcXR0LXRvcGljOiBsb2dnaW5nLXRvcGljCiIiIgoKY2xhc3MgVGVzdENvbmZpZ0xvYWQodW5pdHRlc3QuVGVzdENhc2UpOgoKICAgIGRlZiB0ZXN0X2xvYWQoc2VsZik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBjID0gbG9hZChURVNUX0NPTkZJRykKICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShjKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY1sic2VyaWFsIl0sIDEwMTAxKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY1siX2lkZW50aXR5Il1bMF0sICJzZXJpYWwiKQo8fGZpbV9lbmR8Pg=="]
["268cdc48ebce4d4f8552ae57c3cdd873bec705a2-2","268cdc48ebce4d4f8552ae57c3cdd873bec705a2","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiIFVuaXRUZXN0IGxvYWQoKSBvZiBjb25maWcgb2JqZWN0cyAiIiIKCmltcG9ydCB1bml0dGVzdAoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgpmcm9tIGNvZGV4LmNvbmZpZyBpbXBvcnQgbG9hZAoKVEVTVF9DT05GSUcgPSAiIiIKX2lkZW50aXR5OiBbIHNlcmlhbCBdCjx8ZmltX2VuZHw+"]
["268cdc48ebce4d4f8552ae57c3cdd873bec705a2-3","268cdc48ebce4d4f8552ae57c3cdd873bec705a2","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiIFVuaXRUZXN0IGxvYWQoKSBvZiBjb25maWcgb2JqZWN0cyAiIiIKCmltcG9ydCB1bml0dGVzdAoKZnJvbSBjb2RleC5jb25maWcgaW1wb3J0IGxvYWQKClRFU1RfQ09ORklHID0gIiIiCl9pZGVudGl0eTogWyBzZXJpYWwgXQpzZXJpYWw6IDEwMTAxCnNlbnNvcjoKICB0b3BpYzogdG9waWMtdmFsdWUKbG9nZ2luZzoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogIG1xdHQtdG9waWM6IGxvZ2dpbmctdG9waWMKPHxmaW1fZW5kfD4="]
["268cdc48ebce4d4f8552ae57c3cdd873bec705a2-4","268cdc48ebce4d4f8552ae57c3cdd873bec705a2","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiIFVuaXRUZXN0IGxvYWQoKSBvZiBjb25maWcgb2JqZWN0cyAiIiIKCmltcG9ydCB1bml0dGVzdAoKZnJvbSBjb2RleC5jb25maWcgaW1wb3J0IGxvYWQKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KVEVTVF9DT05GSUcgPSAiIiIKX2lkZW50aXR5OiBbIHNlcmlhbCBdCnNlcmlhbDogMTAxMDEKc2Vuc29yOgo8fGZpbV9lbmR8Pg=="]
["268cdc48ebce4d4f8552ae57c3cdd873bec705a2-5","268cdc48ebce4d4f8552ae57c3cdd873bec705a2","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiIFVuaXRUZXN0IGxvYWQoKSBvZiBjb25maWcgb2JqZWN0cyAiIiIKCmltcG9ydCB1bml0dGVzdAoKZnJvbSBjb2RleC5jb25maWcgaW1wb3J0IGxvYWQKClRFU1RfQ09ORklHID0gIiIiCjx8ZmltX2hvbGV8Pgpsb2dnaW5nOgogIG1xdHQtdG9waWM6IGxvZ2dpbmctdG9waWMKIiIiCgpjbGFzcyBUZXN0Q29uZmlnTG9hZCh1bml0dGVzdC5UZXN0Q2FzZSk6CgogICAgZGVmIHRlc3RfbG9hZChzZWxmKToKICAgICAgICBjID0gbG9hZChURVNUX0NPTkZJRykKICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShjKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY1sic2VyaWFsIl0sIDEwMTAxKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY1siX2lkZW50aXR5Il1bMF0sICJzZXJpYWwiKQogICAgICAgICMgc2VsZi5hc3NlcnRFcXVhbChjWyJfaWRlbnRpdHlbMF0iXSwgInNlcmlhbCIpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjWyJzZW5zb3IudG9waWMiXSwgInRvcGljLXZhbHVlIikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNbImxvZ2dpbmciXVsibXF0dC10b3BpYyJdLCAibG9nZ2luZy10b3BpYyIpCjx8ZmltX3N1ZmZpeHw+Cl9pZGVudGl0eTogWyBzZXJpYWwgXQpzZXJpYWw6IDEwMTAxCnNlbnNvcjoKICB0b3BpYzogdG9waWMtdmFsdWUKPHxmaW1fZW5kfD4="]
["39e0eda3360ea351fa98a00f7f44896b65457244-1","39e0eda3360ea351fa98a00f7f44896b65457244","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGhhc2hsaWIKaW1wb3J0IGpzb24KaW1wb3J0IGxvZ2dpbmcKCmZyb20gZGphbmdvLmNvbnRyaWIuYXV0aCBpbXBvcnQgYXV0aGVudGljYXRlLCBsb2dpbgpmcm9tIGRqYW5nby5jb250cmliLmF1dGgubW9kZWxzIGltcG9ydCBVc2VyCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmh0dHAgaW1wb3J0IChIdHRwUmVzcG9uc2UsIEh0dHBSZXNwb25zZUJhZFJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBIdHRwUmVzcG9uc2VGb3JiaWRkZW4pCmZyb20gZGphbmdvLnV0aWxzLnRyYW5zbGF0aW9uIGltcG9ydCBnZXRfbGFuZ3VhZ2UKZnJvbSBkamFuZ28udmlld3MuZGVjb3JhdG9ycy5odHRwIGltcG9ydCByZXF1aXJlX1BPU1QKCmZyb20gYmFza2V0IGltcG9ydCBzdWJzY3JpYmUKZnJvbSBmdW5mYWN0b3J5LnVybHJlc29sdmVycyBpbXBvcnQgcmV2ZXJzZQoKZnJvbSBicm93c2VyaWQudXRpbHMgaW1wb3J0IHZlcmlmeSBhcyBicm93c2VyaWRfdmVyaWZ5CmZyb20gc2hhcmVkLnV0aWxzIGltcG9ydCByZWRpcmVjdApmcm9tIHVzZXJzLm1vZGVscyBpbXBvcnQgVXNlclByb2ZpbGUKCgpsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignYS5icm93c2VyaWQnKQoKCkByZXF1aXJlX1BPU1QKZGVmIHZlcmlmeShyZXF1ZXN0KToKICAgICIiIgogICAgVmVyaWZ5IGEgQnJvd3NlcklEIGFzc2VydGlvbiwgYW5kIHJldHVybiB3aGV0aGVyIGEgdXNlciBpcyByZWdpc3RlcmVkCiAgICB3aXRoIEFmZmlsaWF0ZXMuCiAgICAiIiIKICAgIGFzc2VydGlvbiA9IHJlcXVlc3QuUE9TVC5nZXQoJ2Fzc2VydGlvbicsIE5vbmUpCiAgICBpZiBhc3NlcnRpb24gaXMgTm9uZToKICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlQmFkUmVxdWVzdCgpCgogICAgdmVyaWZpY2F0aW9uID0gYnJvd3NlcmlkX3ZlcmlmeShyZXF1ZXN0LCBhc3NlcnRpb24pCiAgICBpZiBub3QgdmVyaWZpY2F0aW9uOgogICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2VGb3JiaWRkZW4oKQoKICAgIHJlc3BvbnNlX2RhdGEgPSB7J3JlZ2lzdGVyZWQnOiBGYWxzZX0KICAgIHVzZXIgPSBhdXRoZW50aWNhdGUocmVxdWVzdD1yZXF1ZXN0KQogICAgaWYgdXNlciBpcyBub3QgTm9uZToKICAgICAgICBsb2dpbihyZXF1ZXN0LCB1c2VyKQogICAgICAgIHJlc3BvbnNlX2RhdGEgPSB7J3JlZ2lzdGVyZWQnOiBUcnVlLCAncmVkaXJlY3QnOiByZXZlcnNlKCdteV9iYWRnZXMnKX0KCiAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb24uZHVtcHMocmVzcG9uc2VfZGF0YSksCiAgICAgICAgICAgICAgICAgICAgICAgIG1pbWV0eXBlPSdhcHBsaWNhdGlvbi9qc29uJykKCgpAcmVxdWlyZV9QT1NUCmRlZiByZWdpc3RlcihyZXF1ZXN0LCBmb3JtKToKICAgICIiIlJlZ2lzdGVyIGEgQnJvd3NlcklELWF1dGhlZCB1c2VyIHdpdGggQWZmaWxpYXRlcy4KCiAgICBOb3QgaG9va2VkIHVwIHRvIGEgdXJsY29uZjsgY2FsbGVkIGJ5IG90aGVyIHZpZXdzLgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgcmV0dXJuIE5vbmUKCiAgICAgICAgIyBDaGVjayBpZiB1c2VyIGV4aXN0cyAoYW5kIGF1dGggaWYgdGhleSBkbykKICAgICAgICB1c2VyID0gYXV0aGVudGljYXRlKHJlcXVlc3Q9cmVxdWVzdCkKICAgICAgICBpZiB1c2VyIGlzIE5vbmU6CiAgICAgICAgICAgIGVtYWlsID0gdmVyaWZpY2F0aW9uWydlbWFpbCddCiAgICAgICAgICAgIHVzZXJuYW1lID0gaGFzaGxpYi5zaGExKGVtYWlsKS5oZXhkaWdlc3QoKVs6MzBdCiAgICAgICAgICAgIGRpc3BsYXlfbmFtZSA9IGZvcm0uY2xlYW5lZF9kYXRhWydkaXNwbGF5X25hbWUnXQoKICAgICAgICAgICAgdXNlciA9IFVzZXIub2JqZWN0cy5jcmVhdGVfdXNlcih1c2VybmFtZSwgZW1haWwpCiAgICAgICAgICAgIHVzZXIuaXNfYWN0aXZlID0gVHJ1ZQogICAgICAgICAgICB1c2VyLnNhdmUoKQoKICAgICAgICAgICAgVXNlclByb2ZpbGUub2JqZWN0cy5jcmVhdGUodXNlcj11c2VyLCBkaXNwbGF5X25hbWU9ZGlzcGxheV9uYW1lKQoKICAgICAgICAgICAgIyBTdWJzY3JpYmUgdXNlciB0byBtYWlsaW5nIGxpc3RzCiAgICAgICAgICAgIGlmIGZvcm0uY2xlYW5lZF9kYXRhWydlbWFpbF9zdWJzY3JpYmUnXToKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmUoZW1haWwsIHNldHRpbmdzLkJBU0tFVF9ORVdTTEVUVEVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5nPWdldF9sYW5ndWFnZSgpKQogICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgogICAgICAgICAgICAgICAgICAgIGxvZy53YXJuaW5nKGVycikKCiAgICAgICAgICAgICMgTmV3IHVzZXIgbXVzdCBiZSBhdXRoZW50aWNhdGVkIHRvIGxvZyBpbgogICAgICAgICAgICB1c2VyID0gYXV0aGVudGljYXRlKHJlcXVlc3Q9cmVxdWVzdCkKICAgICAgICBsb2dpbihyZXF1ZXN0LCB1c2VyKQogICAgICAgIHJldHVybiByZWRpcmVjdCgnbXlfYmFkZ2VzJykKICAgIHJldHVybiBOb25lCjx8ZmltX3N1ZmZpeHw+CiAgICAiIiIKICAgIGlmIGZvcm0uaXNfdmFsaWQoKToKICAgICAgICB2ZXJpZmljYXRpb24gPSBicm93c2VyaWRfdmVyaWZ5KHJlcXVlc3QpCiAgICAgICAgaWYgbm90IHZlcmlmaWNhdGlvbjoKPHxmaW1fZW5kfD4="]
["f251656b82208ac8c791f3747e8a1658534cc623-1","f251656b82208ac8c791f3747e8a1658534cc623","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHByYXcKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWV6b25lCmZyb20gZGlzY28udHlwZXMubWVzc2FnZSBpbXBvcnQgTWVzc2FnZUVtYmVkCmltcG9ydCB0ZXh0d3JhcApmcm9tIHBlZXdlZSBpbXBvcnQgKgppbXBvcnQgdGltZQppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IGpzb24KZnJvbSB0ZXJtaW5hbHRhYmxlcyBpbXBvcnQgQXNjaWlUYWJsZQppbXBvcnQgc3lzCmltcG9ydCB1bmljb2RlZGF0YQoKTUFPUklUQU5HQSA9IGInXHhjNFx4ODEnCgpkYiA9IFNxbGl0ZURhdGFiYXNlKCJuenJlZGRpdGJvdC5kYiIpCmRiLmNvbm5lY3QoKQoKCmNsYXNzIFN1Ym1pc3Npb24oTW9kZWwpOgogICAgU1RBVEVfSU5JVElBTCA9IDAKICAgIFNUQVRFX0NIRUNLRUQgPSAxCiAgICBTVEFURV9QT1NURUQgPSAyCgogICAgc3VicmVkZGl0ID0gQ2hhckZpZWxkKCkKICAgIHRoaW5nID0gQ2hhckZpZWxkKCkKICAgIHRpdGxlID0gQ2hhckZpZWxkKCkKICAgIGF1dGhvciA9IENoYXJGaWVsZCgpCiAgICB0aW1lID0gRGF0ZVRpbWVGaWVsZCgpCiAgICBmbGFpciA9IENoYXJGaWVsZCgpCiAgICB1cmwgPSBDaGFyRmllbGQoKQogICAgdGh1bWJuYWlsID0gQ2hhckZpZWxkKCkKICAgIGlzX2RhaWx5ID0gQm9vbGVhbkZpZWxkKCkKICAgIG1lc3NhZ2VfaWQgPSBCaWdJbnRlZ2VyRmllbGQobnVsbD1UcnVlKQogICAgc3RhdGUgPSBJbnRlZ2VyRmllbGQoZGVmYXVsdD1TVEFURV9JTklUSUFMKQoKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgZGF0YWJhc2UgPSBkYgoKCmNsYXNzIFJOWkJvdDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWJyZWRkaXQsIHBvc3Rfc3RhdHM9RmFsc2UpOgogICAgICAgIHNlbGYuY2xpZW50ID0gcHJhdy5SZWRkaXQoInItbnoiKQogICAgICAgIHNlbGYuc3VicmVkZGl0X25hbWUgPSBzdWJyZWRkaXQKCiAgICAgICAgc2VsZi5zdWJfdGh1bWJuYWlsID0gImh0dHBzOi8vYi50aHVtYnMucmVkZGl0bWVkaWEuY29tL0xiaEwyTEhHb19MamNqbktqNFlCbU1mNmFYZENKZE5hZTJLcHgzQThPYUkucG5nIgoKICAgICAgICBzZWxmLmZsYWlyX2NvbG91cnMgPSB7CiAgICAgICAgICAgICJwb2xpdGljcyI6ICJFOTk4N0IiLAogICAgICAgICAgICAiYWR2aWNlIjogImU2NzM2NyIsCiAgICAgICAgICAgICJuZXdzIjogIkNCN0JDMCIsCiAgICAgICAgICAgICJkaXNjdXNzaW9uIjogIkFCODNFMSIsCiAgICAgICAgICAgICJwaWN0dXJlIjogIjczYjFkYiIsCiAgICAgICAgICAgICJzcG9ydHMiOiAiNjBiOGE3IiwKICAgICAgICAgICAgIm1ldGEiOiAiNGNjZDgyIiwKICAgICAgICAgICAgInRyYXZlbCI6ICJmMWQ4NzIiLAogICAgICAgICAgICAib3RoZXIiOiAiYzJjMmNmIiwKICAgICAgICAgICAgIm11c2ljIjogIjJmMmYyZiIsCiAgICAgICAgICAgICJjaXZpbGRlZmVuY2UiOiAiMDA1QTlDIiwKICAgICAgICAgICAgImFtYSI6ICIwMDk5Q0MiLAogICAgICAgICAgICAia2l3aWFuYSI6ICI3OEEyMkYiLAogICAgICAgICAgICAic2hpdHBvc3QiOiAiRDQzMjdDIiwKICAgICAgICAgICAgIm9waW5pb24iOiAiRkZCM0JGIiwKICAgICAgICAgICAgImxvbmdmb3JtIjogIjUzQzY4QyIsCiAgICAgICAgICAgICJtYW9yaXRhbmdhIjogIkVBMDAyNyIKICAgICAgICB9CgogICAgICAgIHNlbGYuZGVmYXVsdF9mbGFpcl9jb2xvdXIgPSAiYzJjMmNmIgoKICAgICAgICBzZWxmLnVybCA9ICdodHRwczovL2Rpc2NvcmRhcHAuY29tL2FwaS93ZWJob29rcy8nCiAgICAgICAgc2VsZi5ob29rX2lkID0gc2VsZi5jbGllbnQuY29uZmlnLmN1c3RvbVsnaG9va19pZCddCiAgICAgICAgc2VsZi5ob29rX3Rva2VuID0gc2VsZi5jbGllbnQuY29uZmlnLmN1c3RvbVsnaG9va190b2tlbiddCgogICAgICAgIHNlbGYubGltaXQgPSAwCiAgICAgICAgc2VsZi5yZXNldCA9IDAKICAgICAgICBzZWxmLnJlbWFpbmluZyA9IDAKCiAgICAgICAgc2VsZi5hdXRob3Jfc3RhdHMgPSAic2VsZWN0IGF1dGhvciwgY291bnQoKikgYXMgY250ICIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyb20gc3VibWlzc2lvbiAiIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSB0aW1lID4gc3RyZnRpbWUoJyVzJywgJ25vdycsICctNyBkYXlzJykgIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW5kIGF1dGhvciAhPSAnQXV0b01vZGVyYXRvcicgIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3JvdXAgYnkgYXV0aG9yICIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yZGVyIGJ5IGNudCBkZXNjICIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbWl0IDUiCgogICAgICAgIHNlbGYuZ2V0X3N1Ym1pc3Npb25zKCkKICAgICAgICBzZWxmLnBvc3Rfc3VibWlzc2lvbnMoKQogICAgICAgIGlmIHBvc3Rfc3RhdHM6CiAgICAgICAgICAgIHNlbGYucG9zdF9zdGF0cygpCgogICAgZGVmIGdldF9zdWJtaXNzaW9ucyhzZWxmKToKICAgICAgICBtaXNzaW5nX3RodW1ibmFpbCA9IFsKICAgICAgICAgICAgInNlbGYiLCAiZGVmYXVsdCIsICJzcG9pbGVyIiwgIiIKICAgICAgICBdCgogICAgICAgIHN1YnJlZGRpdCA9IHNlbGYuY2xpZW50LnN1YnJlZGRpdChzZWxmLnN1YnJlZGRpdF9uYW1lKQogICAgICAgIGZvciBzdWJtaXNzaW9uIGluIHN1YnJlZGRpdC5uZXcobGltaXQ9MTApOgogICAgICAgICAgICBpZiBzdWJtaXNzaW9uLnRodW1ibmFpbCBpbiBtaXNzaW5nX3RodW1ibmFpbDoKICAgICAgICAgICAgICAgIHRodW1ibmFpbCA9IHNlbGYuc3ViX3RodW1ibmFpbAogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgdGh1bWJuYWlsID0gc3VibWlzc2lvbi50aHVtYm5haWwKCiAgICAgICAgICAgIGZsYWlyID0gIk90aGVyIiBpZiBzdWJtaXNzaW9uLmxpbmtfZmxhaXJfdGV4dCBpcyBOb25lIGVsc2Ugc3VibWlzc2lvbi5saW5rX2ZsYWlyX3RleHQKCiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHN1YiA9IFN1Ym1pc3Npb24uZ2V0KHRoaW5nPXN1Ym1pc3Npb24uaWQpCgogICAgICAgICAgICAgICAgc3ViLmZsYWlyID0gZmxhaXIKICAgICAgICAgICAgICAgIGlmIHN1Yi5zdGF0ZSA9PSBTdWJtaXNzaW9uLlNUQVRFX0lOSVRJQUw6CiAgICAgICAgICAgICAgICAgICAgc3ViLnN0YXRlID0gU3VibWlzc2lvbi5TVEFURV9DSEVDS0VECiAgICAgICAgICAgIGV4Y2VwdCBEb2VzTm90RXhpc3Q6CiAgICAgICAgICAgICAgICBzdWIgPSBTdWJtaXNzaW9uKAogICAgICAgICAgICAgICAgICAgIHRoaW5nPXN1Ym1pc3Npb24uaWQsCiAgICAgICAgICAgICAgICAgICAgc3VicmVkZGl0PXNlbGYuc3VicmVkZGl0X25hbWUsCiAgICAgICAgICAgICAgICAgICAgdGl0bGU9c3VibWlzc2lvbi50aXRsZSwKICAgICAgICAgICAgICAgICAgICBhdXRob3I9c3VibWlzc2lvbi5hdXRob3IubmFtZSwKICAgICAgICAgICAgICAgICAgICB0aW1lPXN1Ym1pc3Npb24uY3JlYXRlZF91dGMsCiAgICAgICAgICAgICAgICAgICAgZmxhaXI9ZmxhaXIsCiAgICAgICAgICAgICAgICAgICAgdXJsPXN1Ym1pc3Npb24ucGVybWFsaW5rLAogICAgICAgICAgICAgICAgICAgIHRodW1ibmFpbD10aHVtYm5haWwsCiAgICAgICAgICAgICAgICAgICAgaXNfZGFpbHk9RmFsc2UKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgIHN1Yi5zYXZlKCkKCiAgICBkZWYgcG9zdF9zdWJtaXNzaW9ucyhzZWxmKToKICAgICAgICBzdWJtaXNzaW9ucyA9IFN1Ym1pc3Npb24uc2VsZWN0KCkud2hlcmUoCiAgICAgICAgICAgIFN1Ym1pc3Npb24uc3RhdGUgPT0gU3VibWlzc2lvbi5TVEFURV9DSEVDS0VECiAgICAgICAgKS5vcmRlcl9ieShTdWJtaXNzaW9uLnRpbWUuZGVzYygpKS5saW1pdCgxMCkKCiAgICAgICAgZnVsbF91cmwgPSBzZWxmLnVybCArIHNlbGYuaG9va19pZCArICcvJyArIHNlbGYuaG9va190b2tlbiArICc/d2FpdD10cnVlJwogICAgICAgIHRocmVhZHMgPSBbc3ViIGZvciBzdWIgaW4gc3VibWlzc2lvbnNdCgogICAgICAgIHdoaWxlIGxlbih0aHJlYWRzKSA+IDA6CiAgICAgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCiAgICAgICAgICAgIGlmIHNlbGYucmVtYWluaW5nID4gMCBvciBub3cgPj0gc2VsZi5yZXNldDoKICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24gPSB0aHJlYWRzLnBvcCgpCiAgICAgICAgICAgICAgICBlbWJlZCA9IHNlbGYuZ2V0X2VtYmVkKHN1Ym1pc3Npb24pCiAgICAgICAgICAgICAgICBjb250ZW50ID0geydlbWJlZHMnOiBbZW1iZWQudG9fZGljdCgpXX0KCiAgICAgICAgICAgICAgICByID0gcmVxdWVzdHMucG9zdChmdWxsX3VybCwganNvbj1jb250ZW50KQogICAgICAgICAgICAgICAgc2VsZi5saW1pdCA9IGludChyLmhlYWRlcnNbJ1gtUmF0ZUxpbWl0LUxpbWl0J10pCiAgICAgICAgICAgICAgICBzZWxmLnJlbWFpbmluZyA9IGludChyLmhlYWRlcnNbJ1gtUmF0ZUxpbWl0LVJlbWFpbmluZyddKQogICAgICAgICAgICAgICAgc2VsZi5yZXNldCA9IGludChyLmhlYWRlcnNbJ1gtUmF0ZUxpbWl0LVJlc2V0J10pCgogICAgICAgICAgICAgICAgYm9keSA9IGpzb24ubG9hZHMoci5jb250ZW50LmRlY29kZSgndXRmLTgnKSkKICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24ubWVzc2FnZV9pZCA9IGJvZHlbJ2lkJ10KICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24uc3RhdGUgPSBTdWJtaXNzaW9uLlNUQVRFX1BPU1RFRAogICAgICAgICAgICAgICAgc3VibWlzc2lvbi5zYXZlKCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHByaW50KCdXYWl0aW5nIGZvciByZXNldC4uLiB7fSBzZWNvbmRzJy5mb3JtYXQobm93IC0gc2VsZi5yZXNldCkpCiAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDUpCgogICAgZGVmIGdldF9lbWJlZChzZWxmLCBpbmZvKToKICAgICAgICBmbGFpciA9IGluZm8uZmxhaXIubG93ZXIoKS5yZXBsYWNlKE1BT1JJVEFOR0EuZGVjb2RlKCd1dGY4JyksICdhJykKICAgICAgICBjb2xvdXIgPSBpbnQoc2VsZi5mbGFpcl9jb2xvdXJzLmdldChmbGFpciwgc2VsZi5kZWZhdWx0X2ZsYWlyX2NvbG91ciksIDE2KQoKICAgICAgICBlbWJlZCA9IE1lc3NhZ2VFbWJlZCgpCiAgICAgICAgZW1iZWQudGl0bGUgPSB0ZXh0d3JhcC5zaG9ydGVuKHUiW3t9XSB7fSIuZm9ybWF0KAogICAgICAgICAgICBpbmZvLmZsYWlyLCBpbmZvLnRpdGxlCiAgICAgICAgKSwgd2lkdGg9MjU2LCBwbGFjZWhvbGRlcj0iLi4uIikKICAgICAgICBlbWJlZC51cmwgPSAiaHR0cHM6Ly9yZWRkaXQuY29te30iLmZvcm1hdChpbmZvLnVybCkKICAgICAgICBlbWJlZC5jb2xvciA9IGNvbG91cgogICAgICAgIGVtYmVkLnNldF90aHVtYm5haWwodXJsPWluZm8udGh1bWJuYWlsKQogICAgICAgIGVtYmVkLnNldF9hdXRob3IobmFtZT1pbmZvLmF1dGhvciwgdXJsPSJodHRwczovL3JlZGRpdC5jb20vdS97fSIuZm9ybWF0KGluZm8uYXV0aG9yKSkKICAgICAgICBlbWJlZC50aW1lc3RhbXAgPSBkYXRldGltZS5mcm9tdGltZXN0YW1wKGluZm8udGltZSwgdGltZXpvbmUudXRjKS5pc29mb3JtYXQoKQoKICAgICAgICByZXR1cm4gZW1iZWQKCiAgICBkZWYgcG9zdF9zdGF0cyhzZWxmKToKICAgICAgICBkYXRhID0gWwogICAgICAgICAgICBbJ0F1dGhvcicsICdDb3VudCddLAogICAgICAgIF0KCiAgICAgICAgc3RhdHMgPSBkYi5leGVjdXRlX3NxbChzZWxmLmF1dGhvcl9zdGF0cykKICAgICAgICBmb3Igcm93IGluIHN0YXRzLmZldGNoYWxsKCk6CiAgICAgICAgICAgIGRhdGEuYXBwZW5kKFtyb3dbMF0sIHJvd1sxXV0pCgogICAgICAgIHRhYmxlX2luc3RhbmNlID0gQXNjaWlUYWJsZShkYXRhKQogICAgICAgIHRhYmxlX2luc3RhbmNlLmlubmVyX2NvbHVtbl9ib3JkZXIgPSBGYWxzZQogICAgICAgIHRhYmxlX2luc3RhbmNlLm91dGVyX2JvcmRlciA9IEZhbHNlCiAgICAgICAgdGFibGVfaW5zdGFuY2UuanVzdGlmeV9jb2x1bW5zWzFdID0gJ2NlbnRlcicKCiAgICAgICAgY29udGVudCA9IHsnY29udGVudCc6ICIqKldFRUtMWSBBVVRIT1IgU1RBVFM6KipgYGB7fWBgYCIuZm9ybWF0KHRhYmxlX2luc3RhbmNlLnRhYmxlKX0KCiAgICAgICAgZnVsbF91cmwgPSBzZWxmLnVybCArIHNlbGYuaG9va19pZCArICcvJyArIHNlbGYuaG9va190b2tlbiArICc/d2FpdD10cnVlJwo8fGZpbV9ob2xlfD4KCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdHJ5OgogICAgICAgIHBvc3Rfc3RhdHMgPSBzeXMuYXJndlsxXSA9PSAncG9zdF9zdGF0cycKICAgIGV4Y2VwdCBJbmRleEVycm9yOgogICAgICAgIHBvc3Rfc3RhdHMgPSBGYWxzZQoKICAgIGJvdCA9IFJOWkJvdCgnbmV3emVhbGFuZCcsIHBvc3Rfc3RhdHMpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgciA9IHJlcXVlc3RzLnBvc3QoZnVsbF91cmwsIGpzb249Y29udGVudCkKICAgICAgICBzZWxmLmxpbWl0ID0gaW50KHIuaGVhZGVyc1snWC1SYXRlTGltaXQtTGltaXQnXSkKICAgICAgICBzZWxmLnJlbWFpbmluZyA9IGludChyLmhlYWRlcnNbJ1gtUmF0ZUxpbWl0LVJlbWFpbmluZyddKQogICAgICAgIHNlbGYucmVzZXQgPSBpbnQoci5oZWFkZXJzWydYLVJhdGVMaW1pdC1SZXNldCddKQo8fGZpbV9lbmR8Pg=="]
["f251656b82208ac8c791f3747e8a1658534cc623-2","f251656b82208ac8c791f3747e8a1658534cc623","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHByYXcKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWV6b25lCmZyb20gZGlzY28udHlwZXMubWVzc2FnZSBpbXBvcnQgTWVzc2FnZUVtYmVkCmltcG9ydCB0ZXh0d3JhcApmcm9tIHBlZXdlZSBpbXBvcnQgKgppbXBvcnQgdGltZQppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IGpzb24KZnJvbSB0ZXJtaW5hbHRhYmxlcyBpbXBvcnQgQXNjaWlUYWJsZQppbXBvcnQgc3lzCmltcG9ydCB1bmljb2RlZGF0YQoKTUFPUklUQU5HQSA9IGInXHhjNFx4ODEnCgpkYiA9IFNxbGl0ZURhdGFiYXNlKCJuenJlZGRpdGJvdC5kYiIpCmRiLmNvbm5lY3QoKQoKCmNsYXNzIFN1Ym1pc3Npb24oTW9kZWwpOgogICAgU1RBVEVfSU5JVElBTCA9IDAKICAgIFNUQVRFX0NIRUNLRUQgPSAxCiAgICBTVEFURV9QT1NURUQgPSAyCgogICAgc3VicmVkZGl0ID0gQ2hhckZpZWxkKCkKICAgIHRoaW5nID0gQ2hhckZpZWxkKCkKICAgIHRpdGxlID0gQ2hhckZpZWxkKCkKICAgIGF1dGhvciA9IENoYXJGaWVsZCgpCiAgICB0aW1lID0gRGF0ZVRpbWVGaWVsZCgpCiAgICBmbGFpciA9IENoYXJGaWVsZCgpCjx8ZmltX2hvbGV8PgogICAgc3RhdGUgPSBJbnRlZ2VyRmllbGQoZGVmYXVsdD1TVEFURV9JTklUSUFMKQoKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgZGF0YWJhc2UgPSBkYgoKCmNsYXNzIFJOWkJvdDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWJyZWRkaXQsIHBvc3Rfc3RhdHM9RmFsc2UpOgogICAgICAgIHNlbGYuY2xpZW50ID0gcHJhdy5SZWRkaXQoInItbnoiKQogICAgICAgIHNlbGYuc3VicmVkZGl0X25hbWUgPSBzdWJyZWRkaXQKCiAgICAgICAgc2VsZi5zdWJfdGh1bWJuYWlsID0gImh0dHBzOi8vYi50aHVtYnMucmVkZGl0bWVkaWEuY29tL0xiaEwyTEhHb19MamNqbktqNFlCbU1mNmFYZENKZE5hZTJLcHgzQThPYUkucG5nIgoKICAgICAgICBzZWxmLmZsYWlyX2NvbG91cnMgPSB7CiAgICAgICAgICAgICJwb2xpdGljcyI6ICJFOTk4N0IiLAogICAgICAgICAgICAiYWR2aWNlIjogImU2NzM2NyIsCiAgICAgICAgICAgICJuZXdzIjogIkNCN0JDMCIsCiAgICAgICAgICAgICJkaXNjdXNzaW9uIjogIkFCODNFMSIsCiAgICAgICAgICAgICJwaWN0dXJlIjogIjczYjFkYiIsCiAgICAgICAgICAgICJzcG9ydHMiOiAiNjBiOGE3IiwKICAgICAgICAgICAgIm1ldGEiOiAiNGNjZDgyIiwKICAgICAgICAgICAgInRyYXZlbCI6ICJmMWQ4NzIiLAogICAgICAgICAgICAib3RoZXIiOiAiYzJjMmNmIiwKICAgICAgICAgICAgIm11c2ljIjogIjJmMmYyZiIsCiAgICAgICAgICAgICJjaXZpbGRlZmVuY2UiOiAiMDA1QTlDIiwKICAgICAgICAgICAgImFtYSI6ICIwMDk5Q0MiLAogICAgICAgICAgICAia2l3aWFuYSI6ICI3OEEyMkYiLAogICAgICAgICAgICAic2hpdHBvc3QiOiAiRDQzMjdDIiwKICAgICAgICAgICAgIm9waW5pb24iOiAiRkZCM0JGIiwKICAgICAgICAgICAgImxvbmdmb3JtIjogIjUzQzY4QyIsCiAgICAgICAgICAgICJtYW9yaXRhbmdhIjogIkVBMDAyNyIKICAgICAgICB9CgogICAgICAgIHNlbGYuZGVmYXVsdF9mbGFpcl9jb2xvdXIgPSAiYzJjMmNmIgoKICAgICAgICBzZWxmLnVybCA9ICdodHRwczovL2Rpc2NvcmRhcHAuY29tL2FwaS93ZWJob29rcy8nCiAgICAgICAgc2VsZi5ob29rX2lkID0gc2VsZi5jbGllbnQuY29uZmlnLmN1c3RvbVsnaG9va19pZCddCiAgICAgICAgc2VsZi5ob29rX3Rva2VuID0gc2VsZi5jbGllbnQuY29uZmlnLmN1c3RvbVsnaG9va190b2tlbiddCgogICAgICAgIHNlbGYubGltaXQgPSAwCiAgICAgICAgc2VsZi5yZXNldCA9IDAKICAgICAgICBzZWxmLnJlbWFpbmluZyA9IDAKCiAgICAgICAgc2VsZi5hdXRob3Jfc3RhdHMgPSAic2VsZWN0IGF1dGhvciwgY291bnQoKikgYXMgY250ICIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyb20gc3VibWlzc2lvbiAiIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSB0aW1lID4gc3RyZnRpbWUoJyVzJywgJ25vdycsICctNyBkYXlzJykgIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW5kIGF1dGhvciAhPSAnQXV0b01vZGVyYXRvcicgIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3JvdXAgYnkgYXV0aG9yICIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yZGVyIGJ5IGNudCBkZXNjICIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbWl0IDUiCgogICAgICAgIHNlbGYuZ2V0X3N1Ym1pc3Npb25zKCkKICAgICAgICBzZWxmLnBvc3Rfc3VibWlzc2lvbnMoKQogICAgICAgIGlmIHBvc3Rfc3RhdHM6CiAgICAgICAgICAgIHNlbGYucG9zdF9zdGF0cygpCgogICAgZGVmIGdldF9zdWJtaXNzaW9ucyhzZWxmKToKICAgICAgICBtaXNzaW5nX3RodW1ibmFpbCA9IFsKICAgICAgICAgICAgInNlbGYiLCAiZGVmYXVsdCIsICJzcG9pbGVyIiwgIiIKICAgICAgICBdCgogICAgICAgIHN1YnJlZGRpdCA9IHNlbGYuY2xpZW50LnN1YnJlZGRpdChzZWxmLnN1YnJlZGRpdF9uYW1lKQogICAgICAgIGZvciBzdWJtaXNzaW9uIGluIHN1YnJlZGRpdC5uZXcobGltaXQ9MTApOgogICAgICAgICAgICBpZiBzdWJtaXNzaW9uLnRodW1ibmFpbCBpbiBtaXNzaW5nX3RodW1ibmFpbDoKICAgICAgICAgICAgICAgIHRodW1ibmFpbCA9IHNlbGYuc3ViX3RodW1ibmFpbAogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgdGh1bWJuYWlsID0gc3VibWlzc2lvbi50aHVtYm5haWwKCiAgICAgICAgICAgIGZsYWlyID0gIk90aGVyIiBpZiBzdWJtaXNzaW9uLmxpbmtfZmxhaXJfdGV4dCBpcyBOb25lIGVsc2Ugc3VibWlzc2lvbi5saW5rX2ZsYWlyX3RleHQKCiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHN1YiA9IFN1Ym1pc3Npb24uZ2V0KHRoaW5nPXN1Ym1pc3Npb24uaWQpCgogICAgICAgICAgICAgICAgc3ViLmZsYWlyID0gZmxhaXIKICAgICAgICAgICAgICAgIGlmIHN1Yi5zdGF0ZSA9PSBTdWJtaXNzaW9uLlNUQVRFX0lOSVRJQUw6CiAgICAgICAgICAgICAgICAgICAgc3ViLnN0YXRlID0gU3VibWlzc2lvbi5TVEFURV9DSEVDS0VECiAgICAgICAgICAgIGV4Y2VwdCBEb2VzTm90RXhpc3Q6CiAgICAgICAgICAgICAgICBzdWIgPSBTdWJtaXNzaW9uKAogICAgICAgICAgICAgICAgICAgIHRoaW5nPXN1Ym1pc3Npb24uaWQsCiAgICAgICAgICAgICAgICAgICAgc3VicmVkZGl0PXNlbGYuc3VicmVkZGl0X25hbWUsCiAgICAgICAgICAgICAgICAgICAgdGl0bGU9c3VibWlzc2lvbi50aXRsZSwKICAgICAgICAgICAgICAgICAgICBhdXRob3I9c3VibWlzc2lvbi5hdXRob3IubmFtZSwKICAgICAgICAgICAgICAgICAgICB0aW1lPXN1Ym1pc3Npb24uY3JlYXRlZF91dGMsCiAgICAgICAgICAgICAgICAgICAgZmxhaXI9ZmxhaXIsCiAgICAgICAgICAgICAgICAgICAgdXJsPXN1Ym1pc3Npb24ucGVybWFsaW5rLAogICAgICAgICAgICAgICAgICAgIHRodW1ibmFpbD10aHVtYm5haWwsCiAgICAgICAgICAgICAgICAgICAgaXNfZGFpbHk9RmFsc2UKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgIHN1Yi5zYXZlKCkKCiAgICBkZWYgcG9zdF9zdWJtaXNzaW9ucyhzZWxmKToKICAgICAgICBzdWJtaXNzaW9ucyA9IFN1Ym1pc3Npb24uc2VsZWN0KCkud2hlcmUoCiAgICAgICAgICAgIFN1Ym1pc3Npb24uc3RhdGUgPT0gU3VibWlzc2lvbi5TVEFURV9DSEVDS0VECiAgICAgICAgKS5vcmRlcl9ieShTdWJtaXNzaW9uLnRpbWUuZGVzYygpKS5saW1pdCgxMCkKCiAgICAgICAgZnVsbF91cmwgPSBzZWxmLnVybCArIHNlbGYuaG9va19pZCArICcvJyArIHNlbGYuaG9va190b2tlbiArICc/d2FpdD10cnVlJwogICAgICAgIHRocmVhZHMgPSBbc3ViIGZvciBzdWIgaW4gc3VibWlzc2lvbnNdCgogICAgICAgIHdoaWxlIGxlbih0aHJlYWRzKSA+IDA6CiAgICAgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCiAgICAgICAgICAgIGlmIHNlbGYucmVtYWluaW5nID4gMCBvciBub3cgPj0gc2VsZi5yZXNldDoKICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24gPSB0aHJlYWRzLnBvcCgpCiAgICAgICAgICAgICAgICBlbWJlZCA9IHNlbGYuZ2V0X2VtYmVkKHN1Ym1pc3Npb24pCiAgICAgICAgICAgICAgICBjb250ZW50ID0geydlbWJlZHMnOiBbZW1iZWQudG9fZGljdCgpXX0KCiAgICAgICAgICAgICAgICByID0gcmVxdWVzdHMucG9zdChmdWxsX3VybCwganNvbj1jb250ZW50KQogICAgICAgICAgICAgICAgc2VsZi5saW1pdCA9IGludChyLmhlYWRlcnNbJ1gtUmF0ZUxpbWl0LUxpbWl0J10pCiAgICAgICAgICAgICAgICBzZWxmLnJlbWFpbmluZyA9IGludChyLmhlYWRlcnNbJ1gtUmF0ZUxpbWl0LVJlbWFpbmluZyddKQogICAgICAgICAgICAgICAgc2VsZi5yZXNldCA9IGludChyLmhlYWRlcnNbJ1gtUmF0ZUxpbWl0LVJlc2V0J10pCgogICAgICAgICAgICAgICAgYm9keSA9IGpzb24ubG9hZHMoci5jb250ZW50LmRlY29kZSgndXRmLTgnKSkKICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24ubWVzc2FnZV9pZCA9IGJvZHlbJ2lkJ10KICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24uc3RhdGUgPSBTdWJtaXNzaW9uLlNUQVRFX1BPU1RFRAogICAgICAgICAgICAgICAgc3VibWlzc2lvbi5zYXZlKCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHByaW50KCdXYWl0aW5nIGZvciByZXNldC4uLiB7fSBzZWNvbmRzJy5mb3JtYXQobm93IC0gc2VsZi5yZXNldCkpCiAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDUpCgogICAgZGVmIGdldF9lbWJlZChzZWxmLCBpbmZvKToKICAgICAgICBmbGFpciA9IGluZm8uZmxhaXIubG93ZXIoKS5yZXBsYWNlKE1BT1JJVEFOR0EuZGVjb2RlKCd1dGY4JyksICdhJykKICAgICAgICBjb2xvdXIgPSBpbnQoc2VsZi5mbGFpcl9jb2xvdXJzLmdldChmbGFpciwgc2VsZi5kZWZhdWx0X2ZsYWlyX2NvbG91ciksIDE2KQoKICAgICAgICBlbWJlZCA9IE1lc3NhZ2VFbWJlZCgpCiAgICAgICAgZW1iZWQudGl0bGUgPSB0ZXh0d3JhcC5zaG9ydGVuKHUiW3t9XSB7fSIuZm9ybWF0KAogICAgICAgICAgICBpbmZvLmZsYWlyLCBpbmZvLnRpdGxlCiAgICAgICAgKSwgd2lkdGg9MjU2LCBwbGFjZWhvbGRlcj0iLi4uIikKICAgICAgICBlbWJlZC51cmwgPSAiaHR0cHM6Ly9yZWRkaXQuY29te30iLmZvcm1hdChpbmZvLnVybCkKICAgICAgICBlbWJlZC5jb2xvciA9IGNvbG91cgogICAgICAgIGVtYmVkLnNldF90aHVtYm5haWwodXJsPWluZm8udGh1bWJuYWlsKQogICAgICAgIGVtYmVkLnNldF9hdXRob3IobmFtZT1pbmZvLmF1dGhvciwgdXJsPSJodHRwczovL3JlZGRpdC5jb20vdS97fSIuZm9ybWF0KGluZm8uYXV0aG9yKSkKICAgICAgICBlbWJlZC50aW1lc3RhbXAgPSBkYXRldGltZS5mcm9tdGltZXN0YW1wKGluZm8udGltZSwgdGltZXpvbmUudXRjKS5pc29mb3JtYXQoKQoKICAgICAgICByZXR1cm4gZW1iZWQKCiAgICBkZWYgcG9zdF9zdGF0cyhzZWxmKToKICAgICAgICBkYXRhID0gWwogICAgICAgICAgICBbJ0F1dGhvcicsICdDb3VudCddLAogICAgICAgIF0KCiAgICAgICAgc3RhdHMgPSBkYi5leGVjdXRlX3NxbChzZWxmLmF1dGhvcl9zdGF0cykKICAgICAgICBmb3Igcm93IGluIHN0YXRzLmZldGNoYWxsKCk6CiAgICAgICAgICAgIGRhdGEuYXBwZW5kKFtyb3dbMF0sIHJvd1sxXV0pCgogICAgICAgIHRhYmxlX2luc3RhbmNlID0gQXNjaWlUYWJsZShkYXRhKQogICAgICAgIHRhYmxlX2luc3RhbmNlLmlubmVyX2NvbHVtbl9ib3JkZXIgPSBGYWxzZQogICAgICAgIHRhYmxlX2luc3RhbmNlLm91dGVyX2JvcmRlciA9IEZhbHNlCiAgICAgICAgdGFibGVfaW5zdGFuY2UuanVzdGlmeV9jb2x1bW5zWzFdID0gJ2NlbnRlcicKCiAgICAgICAgY29udGVudCA9IHsnY29udGVudCc6ICIqKldFRUtMWSBBVVRIT1IgU1RBVFM6KipgYGB7fWBgYCIuZm9ybWF0KHRhYmxlX2luc3RhbmNlLnRhYmxlKX0KCiAgICAgICAgZnVsbF91cmwgPSBzZWxmLnVybCArIHNlbGYuaG9va19pZCArICcvJyArIHNlbGYuaG9va190b2tlbiArICc/d2FpdD10cnVlJwogICAgICAgIHIgPSByZXF1ZXN0cy5wb3N0KGZ1bGxfdXJsLCBqc29uPWNvbnRlbnQpCiAgICAgICAgc2VsZi5saW1pdCA9IGludChyLmhlYWRlcnNbJ1gtUmF0ZUxpbWl0LUxpbWl0J10pCiAgICAgICAgc2VsZi5yZW1haW5pbmcgPSBpbnQoci5oZWFkZXJzWydYLVJhdGVMaW1pdC1SZW1haW5pbmcnXSkKICAgICAgICBzZWxmLnJlc2V0ID0gaW50KHIuaGVhZGVyc1snWC1SYXRlTGltaXQtUmVzZXQnXSkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdHJ5OgogICAgICAgIHBvc3Rfc3RhdHMgPSBzeXMuYXJndlsxXSA9PSAncG9zdF9zdGF0cycKICAgIGV4Y2VwdCBJbmRleEVycm9yOgogICAgICAgIHBvc3Rfc3RhdHMgPSBGYWxzZQoKICAgIGJvdCA9IFJOWkJvdCgnbmV3emVhbGFuZCcsIHBvc3Rfc3RhdHMpCjx8ZmltX3N1ZmZpeHw+CiAgICB1cmwgPSBDaGFyRmllbGQoKQogICAgdGh1bWJuYWlsID0gQ2hhckZpZWxkKCkKICAgIGlzX2RhaWx5ID0gQm9vbGVhbkZpZWxkKCkKICAgIG1lc3NhZ2VfaWQgPSBCaWdJbnRlZ2VyRmllbGQobnVsbD1UcnVlKQo8fGZpbV9lbmR8Pg=="]
["f251656b82208ac8c791f3747e8a1658534cc623-3","f251656b82208ac8c791f3747e8a1658534cc623","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHByYXcKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWV6b25lCmZyb20gZGlzY28udHlwZXMubWVzc2FnZSBpbXBvcnQgTWVzc2FnZUVtYmVkCmltcG9ydCB0ZXh0d3JhcApmcm9tIHBlZXdlZSBpbXBvcnQgKgppbXBvcnQgdGltZQppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IGpzb24KZnJvbSB0ZXJtaW5hbHRhYmxlcyBpbXBvcnQgQXNjaWlUYWJsZQppbXBvcnQgc3lzCmltcG9ydCB1bmljb2RlZGF0YQoKTUFPUklUQU5HQSA9IGInXHhjNFx4ODEnCgpkYiA9IFNxbGl0ZURhdGFiYXNlKCJuenJlZGRpdGJvdC5kYiIpCmRiLmNvbm5lY3QoKQoKCmNsYXNzIFN1Ym1pc3Npb24oTW9kZWwpOgogICAgU1RBVEVfSU5JVElBTCA9IDAKICAgIFNUQVRFX0NIRUNLRUQgPSAxCiAgICBTVEFURV9QT1NURUQgPSAyCgogICAgc3VicmVkZGl0ID0gQ2hhckZpZWxkKCkKICAgIHRoaW5nID0gQ2hhckZpZWxkKCkKICAgIHRpdGxlID0gQ2hhckZpZWxkKCkKICAgIGF1dGhvciA9IENoYXJGaWVsZCgpCiAgICB0aW1lID0gRGF0ZVRpbWVGaWVsZCgpCiAgICBmbGFpciA9IENoYXJGaWVsZCgpCiAgICB1cmwgPSBDaGFyRmllbGQoKQogICAgdGh1bWJuYWlsID0gQ2hhckZpZWxkKCkKICAgIGlzX2RhaWx5ID0gQm9vbGVhbkZpZWxkKCkKICAgIG1lc3NhZ2VfaWQgPSBCaWdJbnRlZ2VyRmllbGQobnVsbD1UcnVlKQogICAgc3RhdGUgPSBJbnRlZ2VyRmllbGQoZGVmYXVsdD1TVEFURV9JTklUSUFMKQoKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgZGF0YWJhc2UgPSBkYgoKCmNsYXNzIFJOWkJvdDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWJyZWRkaXQsIHBvc3Rfc3RhdHM9RmFsc2UpOgogICAgICAgIHNlbGYuY2xpZW50ID0gcHJhdy5SZWRkaXQoInItbnoiKQogICAgICAgIHNlbGYuc3VicmVkZGl0X25hbWUgPSBzdWJyZWRkaXQKCiAgICAgICAgc2VsZi5zdWJfdGh1bWJuYWlsID0gImh0dHBzOi8vYi50aHVtYnMucmVkZGl0bWVkaWEuY29tL0xiaEwyTEhHb19MamNqbktqNFlCbU1mNmFYZENKZE5hZTJLcHgzQThPYUkucG5nIgoKICAgICAgICBzZWxmLmZsYWlyX2NvbG91cnMgPSB7CiAgICAgICAgICAgICJwb2xpdGljcyI6ICJFOTk4N0IiLAogICAgICAgICAgICAiYWR2aWNlIjogImU2NzM2NyIsCiAgICAgICAgICAgICJuZXdzIjogIkNCN0JDMCIsCiAgICAgICAgICAgICJkaXNjdXNzaW9uIjogIkFCODNFMSIsCiAgICAgICAgICAgICJwaWN0dXJlIjogIjczYjFkYiIsCiAgICAgICAgICAgICJzcG9ydHMiOiAiNjBiOGE3IiwKICAgICAgICAgICAgIm1ldGEiOiAiNGNjZDgyIiwKICAgICAgICAgICAgInRyYXZlbCI6ICJmMWQ4NzIiLAogICAgICAgICAgICAib3RoZXIiOiAiYzJjMmNmIiwKICAgICAgICAgICAgIm11c2ljIjogIjJmMmYyZiIsCiAgICAgICAgICAgICJjaXZpbGRlZmVuY2UiOiAiMDA1QTlDIiwKICAgICAgICAgICAgImFtYSI6ICIwMDk5Q0MiLAogICAgICAgICAgICAia2l3aWFuYSI6ICI3OEEyMkYiLAogICAgICAgICAgICAic2hpdHBvc3QiOiAiRDQzMjdDIiwKICAgICAgICAgICAgIm9waW5pb24iOiAiRkZCM0JGIiwKICAgICAgICAgICAgImxvbmdmb3JtIjogIjUzQzY4QyIsCiAgICAgICAgICAgICJtYW9yaXRhbmdhIjogIkVBMDAyNyIKICAgICAgICB9CgogICAgICAgIHNlbGYuZGVmYXVsdF9mbGFpcl9jb2xvdXIgPSAiYzJjMmNmIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgICAgIHNlbGYudXJsID0gJ2h0dHBzOi8vZGlzY29yZGFwcC5jb20vYXBpL3dlYmhvb2tzLycKICAgICAgICBzZWxmLmhvb2tfaWQgPSBzZWxmLmNsaWVudC5jb25maWcuY3VzdG9tWydob29rX2lkJ10KICAgICAgICBzZWxmLmhvb2tfdG9rZW4gPSBzZWxmLmNsaWVudC5jb25maWcuY3VzdG9tWydob29rX3Rva2VuJ10KPHxmaW1fZW5kfD4="]
["f251656b82208ac8c791f3747e8a1658534cc623-4","f251656b82208ac8c791f3747e8a1658534cc623","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHByYXcKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWV6b25lCmZyb20gZGlzY28udHlwZXMubWVzc2FnZSBpbXBvcnQgTWVzc2FnZUVtYmVkCmltcG9ydCB0ZXh0d3JhcApmcm9tIHBlZXdlZSBpbXBvcnQgKgppbXBvcnQgdGltZQppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IGpzb24KZnJvbSB0ZXJtaW5hbHRhYmxlcyBpbXBvcnQgQXNjaWlUYWJsZQppbXBvcnQgc3lzCmltcG9ydCB1bmljb2RlZGF0YQoKTUFPUklUQU5HQSA9IGInXHhjNFx4ODEnCgpkYiA9IFNxbGl0ZURhdGFiYXNlKCJuenJlZGRpdGJvdC5kYiIpCmRiLmNvbm5lY3QoKQoKCmNsYXNzIFN1Ym1pc3Npb24oTW9kZWwpOgogICAgU1RBVEVfSU5JVElBTCA9IDAKICAgIFNUQVRFX0NIRUNLRUQgPSAxCiAgICBTVEFURV9QT1NURUQgPSAyCgogICAgc3VicmVkZGl0ID0gQ2hhckZpZWxkKCkKICAgIHRoaW5nID0gQ2hhckZpZWxkKCkKICAgIHRpdGxlID0gQ2hhckZpZWxkKCkKICAgIGF1dGhvciA9IENoYXJGaWVsZCgpCiAgICB0aW1lID0gRGF0ZVRpbWVGaWVsZCgpCiAgICBmbGFpciA9IENoYXJGaWVsZCgpCiAgICB1cmwgPSBDaGFyRmllbGQoKQogICAgdGh1bWJuYWlsID0gQ2hhckZpZWxkKCkKICAgIGlzX2RhaWx5ID0gQm9vbGVhbkZpZWxkKCkKICAgIG1lc3NhZ2VfaWQgPSBCaWdJbnRlZ2VyRmllbGQobnVsbD1UcnVlKQogICAgc3RhdGUgPSBJbnRlZ2VyRmllbGQoZGVmYXVsdD1TVEFURV9JTklUSUFMKQoKICAgIGNsYXNzIE1ldGE6CiAgICAgICAgZGF0YWJhc2UgPSBkYgoKCmNsYXNzIFJOWkJvdDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWJyZWRkaXQsIHBvc3Rfc3RhdHM9RmFsc2UpOgogICAgICAgIHNlbGYuY2xpZW50ID0gcHJhdy5SZWRkaXQoInItbnoiKQogICAgICAgIHNlbGYuc3VicmVkZGl0X25hbWUgPSBzdWJyZWRkaXQKCiAgICAgICAgc2VsZi5zdWJfdGh1bWJuYWlsID0gImh0dHBzOi8vYi50aHVtYnMucmVkZGl0bWVkaWEuY29tL0xiaEwyTEhHb19MamNqbktqNFlCbU1mNmFYZENKZE5hZTJLcHgzQThPYUkucG5nIgoKICAgICAgICBzZWxmLmZsYWlyX2NvbG91cnMgPSB7CiAgICAgICAgICAgICJwb2xpdGljcyI6ICJFOTk4N0IiLAogICAgICAgICAgICAiYWR2aWNlIjogImU2NzM2NyIsCiAgICAgICAgICAgICJuZXdzIjogIkNCN0JDMCIsCiAgICAgICAgICAgICJkaXNjdXNzaW9uIjogIkFCODNFMSIsCiAgICAgICAgICAgICJwaWN0dXJlIjogIjczYjFkYiIsCiAgICAgICAgICAgICJzcG9ydHMiOiAiNjBiOGE3IiwKICAgICAgICAgICAgIm1ldGEiOiAiNGNjZDgyIiwKICAgICAgICAgICAgInRyYXZlbCI6ICJmMWQ4NzIiLAogICAgICAgICAgICAib3RoZXIiOiAiYzJjMmNmIiwKICAgICAgICAgICAgIm11c2ljIjogIjJmMmYyZiIsCiAgICAgICAgICAgICJjaXZpbGRlZmVuY2UiOiAiMDA1QTlDIiwKICAgICAgICAgICAgImFtYSI6ICIwMDk5Q0MiLAogICAgICAgICAgICAia2l3aWFuYSI6ICI3OEEyMkYiLAogICAgICAgICAgICAic2hpdHBvc3QiOiAiRDQzMjdDIiwKICAgICAgICAgICAgIm9waW5pb24iOiAiRkZCM0JGIiwKICAgICAgICAgICAgImxvbmdmb3JtIjogIjUzQzY4QyIsCiAgICAgICAgICAgICJtYW9yaXRhbmdhIjogIkVBMDAyNyIKICAgICAgICB9CgogICAgICAgIHNlbGYuZGVmYXVsdF9mbGFpcl9jb2xvdXIgPSAiYzJjMmNmIgoKICAgICAgICBzZWxmLnVybCA9ICdodHRwczovL2Rpc2NvcmRhcHAuY29tL2FwaS93ZWJob29rcy8nCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLmhvb2tfaWQgPSBzZWxmLmNsaWVudC5jb25maWcuY3VzdG9tWydob29rX2lkJ10KICAgICAgICBzZWxmLmhvb2tfdG9rZW4gPSBzZWxmLmNsaWVudC5jb25maWcuY3VzdG9tWydob29rX3Rva2VuJ10KCiAgICAgICAgc2VsZi5saW1pdCA9IDAKPHxmaW1fZW5kfD4="]
["f251656b82208ac8c791f3747e8a1658534cc623-5","f251656b82208ac8c791f3747e8a1658534cc623","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHByYXcKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWV6b25lCmZyb20gZGlzY28udHlwZXMubWVzc2FnZSBpbXBvcnQgTWVzc2FnZUVtYmVkCmltcG9ydCB0ZXh0d3JhcApmcm9tIHBlZXdlZSBpbXBvcnQgKgppbXBvcnQgdGltZQppbXBvcnQgcmVxdWVzdHMKPHxmaW1faG9sZXw+CgpNQU9SSVRBTkdBID0gYidceGM0XHg4MScKCmRiID0gU3FsaXRlRGF0YWJhc2UoIm56cmVkZGl0Ym90LmRiIikKZGIuY29ubmVjdCgpCgoKY2xhc3MgU3VibWlzc2lvbihNb2RlbCk6CiAgICBTVEFURV9JTklUSUFMID0gMAogICAgU1RBVEVfQ0hFQ0tFRCA9IDEKICAgIFNUQVRFX1BPU1RFRCA9IDIKCiAgICBzdWJyZWRkaXQgPSBDaGFyRmllbGQoKQogICAgdGhpbmcgPSBDaGFyRmllbGQoKQogICAgdGl0bGUgPSBDaGFyRmllbGQoKQogICAgYXV0aG9yID0gQ2hhckZpZWxkKCkKICAgIHRpbWUgPSBEYXRlVGltZUZpZWxkKCkKICAgIGZsYWlyID0gQ2hhckZpZWxkKCkKICAgIHVybCA9IENoYXJGaWVsZCgpCiAgICB0aHVtYm5haWwgPSBDaGFyRmllbGQoKQogICAgaXNfZGFpbHkgPSBCb29sZWFuRmllbGQoKQogICAgbWVzc2FnZV9pZCA9IEJpZ0ludGVnZXJGaWVsZChudWxsPVRydWUpCiAgICBzdGF0ZSA9IEludGVnZXJGaWVsZChkZWZhdWx0PVNUQVRFX0lOSVRJQUwpCgogICAgY2xhc3MgTWV0YToKICAgICAgICBkYXRhYmFzZSA9IGRiCgoKY2xhc3MgUk5aQm90OgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHN1YnJlZGRpdCwgcG9zdF9zdGF0cz1GYWxzZSk6CiAgICAgICAgc2VsZi5jbGllbnQgPSBwcmF3LlJlZGRpdCgici1ueiIpCiAgICAgICAgc2VsZi5zdWJyZWRkaXRfbmFtZSA9IHN1YnJlZGRpdAoKICAgICAgICBzZWxmLnN1Yl90aHVtYm5haWwgPSAiaHR0cHM6Ly9iLnRodW1icy5yZWRkaXRtZWRpYS5jb20vTGJoTDJMSEdvX0xqY2puS2o0WUJtTWY2YVhkQ0pkTmFlMktweDNBOE9hSS5wbmciCgogICAgICAgIHNlbGYuZmxhaXJfY29sb3VycyA9IHsKICAgICAgICAgICAgInBvbGl0aWNzIjogIkU5OTg3QiIsCiAgICAgICAgICAgICJhZHZpY2UiOiAiZTY3MzY3IiwKICAgICAgICAgICAgIm5ld3MiOiAiQ0I3QkMwIiwKICAgICAgICAgICAgImRpc2N1c3Npb24iOiAiQUI4M0UxIiwKICAgICAgICAgICAgInBpY3R1cmUiOiAiNzNiMWRiIiwKICAgICAgICAgICAgInNwb3J0cyI6ICI2MGI4YTciLAogICAgICAgICAgICAibWV0YSI6ICI0Y2NkODIiLAogICAgICAgICAgICAidHJhdmVsIjogImYxZDg3MiIsCiAgICAgICAgICAgICJvdGhlciI6ICJjMmMyY2YiLAogICAgICAgICAgICAibXVzaWMiOiAiMmYyZjJmIiwKICAgICAgICAgICAgImNpdmlsZGVmZW5jZSI6ICIwMDVBOUMiLAogICAgICAgICAgICAiYW1hIjogIjAwOTlDQyIsCiAgICAgICAgICAgICJraXdpYW5hIjogIjc4QTIyRiIsCiAgICAgICAgICAgICJzaGl0cG9zdCI6ICJENDMyN0MiLAogICAgICAgICAgICAib3BpbmlvbiI6ICJGRkIzQkYiLAogICAgICAgICAgICAibG9uZ2Zvcm0iOiAiNTNDNjhDIiwKICAgICAgICAgICAgIm1hb3JpdGFuZ2EiOiAiRUEwMDI3IgogICAgICAgIH0KCiAgICAgICAgc2VsZi5kZWZhdWx0X2ZsYWlyX2NvbG91ciA9ICJjMmMyY2YiCgogICAgICAgIHNlbGYudXJsID0gJ2h0dHBzOi8vZGlzY29yZGFwcC5jb20vYXBpL3dlYmhvb2tzLycKICAgICAgICBzZWxmLmhvb2tfaWQgPSBzZWxmLmNsaWVudC5jb25maWcuY3VzdG9tWydob29rX2lkJ10KICAgICAgICBzZWxmLmhvb2tfdG9rZW4gPSBzZWxmLmNsaWVudC5jb25maWcuY3VzdG9tWydob29rX3Rva2VuJ10KCiAgICAgICAgc2VsZi5saW1pdCA9IDAKICAgICAgICBzZWxmLnJlc2V0ID0gMAogICAgICAgIHNlbGYucmVtYWluaW5nID0gMAoKICAgICAgICBzZWxmLmF1dGhvcl9zdGF0cyA9ICJzZWxlY3QgYXV0aG9yLCBjb3VudCgqKSBhcyBjbnQgIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJvbSBzdWJtaXNzaW9uICIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIHRpbWUgPiBzdHJmdGltZSgnJXMnLCAnbm93JywgJy03IGRheXMnKSAiIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmQgYXV0aG9yICE9ICdBdXRvTW9kZXJhdG9yJyAiIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJncm91cCBieSBhdXRob3IgIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3JkZXIgYnkgY250IGRlc2MgIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGltaXQgNSIKCiAgICAgICAgc2VsZi5nZXRfc3VibWlzc2lvbnMoKQogICAgICAgIHNlbGYucG9zdF9zdWJtaXNzaW9ucygpCiAgICAgICAgaWYgcG9zdF9zdGF0czoKICAgICAgICAgICAgc2VsZi5wb3N0X3N0YXRzKCkKCiAgICBkZWYgZ2V0X3N1Ym1pc3Npb25zKHNlbGYpOgogICAgICAgIG1pc3NpbmdfdGh1bWJuYWlsID0gWwogICAgICAgICAgICAic2VsZiIsICJkZWZhdWx0IiwgInNwb2lsZXIiLCAiIgogICAgICAgIF0KCiAgICAgICAgc3VicmVkZGl0ID0gc2VsZi5jbGllbnQuc3VicmVkZGl0KHNlbGYuc3VicmVkZGl0X25hbWUpCiAgICAgICAgZm9yIHN1Ym1pc3Npb24gaW4gc3VicmVkZGl0Lm5ldyhsaW1pdD0xMCk6CiAgICAgICAgICAgIGlmIHN1Ym1pc3Npb24udGh1bWJuYWlsIGluIG1pc3NpbmdfdGh1bWJuYWlsOgogICAgICAgICAgICAgICAgdGh1bWJuYWlsID0gc2VsZi5zdWJfdGh1bWJuYWlsCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0aHVtYm5haWwgPSBzdWJtaXNzaW9uLnRodW1ibmFpbAoKICAgICAgICAgICAgZmxhaXIgPSAiT3RoZXIiIGlmIHN1Ym1pc3Npb24ubGlua19mbGFpcl90ZXh0IGlzIE5vbmUgZWxzZSBzdWJtaXNzaW9uLmxpbmtfZmxhaXJfdGV4dAoKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgc3ViID0gU3VibWlzc2lvbi5nZXQodGhpbmc9c3VibWlzc2lvbi5pZCkKCiAgICAgICAgICAgICAgICBzdWIuZmxhaXIgPSBmbGFpcgogICAgICAgICAgICAgICAgaWYgc3ViLnN0YXRlID09IFN1Ym1pc3Npb24uU1RBVEVfSU5JVElBTDoKICAgICAgICAgICAgICAgICAgICBzdWIuc3RhdGUgPSBTdWJtaXNzaW9uLlNUQVRFX0NIRUNLRUQKICAgICAgICAgICAgZXhjZXB0IERvZXNOb3RFeGlzdDoKICAgICAgICAgICAgICAgIHN1YiA9IFN1Ym1pc3Npb24oCiAgICAgICAgICAgICAgICAgICAgdGhpbmc9c3VibWlzc2lvbi5pZCwKICAgICAgICAgICAgICAgICAgICBzdWJyZWRkaXQ9c2VsZi5zdWJyZWRkaXRfbmFtZSwKICAgICAgICAgICAgICAgICAgICB0aXRsZT1zdWJtaXNzaW9uLnRpdGxlLAogICAgICAgICAgICAgICAgICAgIGF1dGhvcj1zdWJtaXNzaW9uLmF1dGhvci5uYW1lLAogICAgICAgICAgICAgICAgICAgIHRpbWU9c3VibWlzc2lvbi5jcmVhdGVkX3V0YywKICAgICAgICAgICAgICAgICAgICBmbGFpcj1mbGFpciwKICAgICAgICAgICAgICAgICAgICB1cmw9c3VibWlzc2lvbi5wZXJtYWxpbmssCiAgICAgICAgICAgICAgICAgICAgdGh1bWJuYWlsPXRodW1ibmFpbCwKICAgICAgICAgICAgICAgICAgICBpc19kYWlseT1GYWxzZQogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgc3ViLnNhdmUoKQoKICAgIGRlZiBwb3N0X3N1Ym1pc3Npb25zKHNlbGYpOgogICAgICAgIHN1Ym1pc3Npb25zID0gU3VibWlzc2lvbi5zZWxlY3QoKS53aGVyZSgKICAgICAgICAgICAgU3VibWlzc2lvbi5zdGF0ZSA9PSBTdWJtaXNzaW9uLlNUQVRFX0NIRUNLRUQKICAgICAgICApLm9yZGVyX2J5KFN1Ym1pc3Npb24udGltZS5kZXNjKCkpLmxpbWl0KDEwKQoKICAgICAgICBmdWxsX3VybCA9IHNlbGYudXJsICsgc2VsZi5ob29rX2lkICsgJy8nICsgc2VsZi5ob29rX3Rva2VuICsgJz93YWl0PXRydWUnCiAgICAgICAgdGhyZWFkcyA9IFtzdWIgZm9yIHN1YiBpbiBzdWJtaXNzaW9uc10KCiAgICAgICAgd2hpbGUgbGVuKHRocmVhZHMpID4gMDoKICAgICAgICAgICAgbm93ID0gdGltZS50aW1lKCkKICAgICAgICAgICAgaWYgc2VsZi5yZW1haW5pbmcgPiAwIG9yIG5vdyA+PSBzZWxmLnJlc2V0OgogICAgICAgICAgICAgICAgc3VibWlzc2lvbiA9IHRocmVhZHMucG9wKCkKICAgICAgICAgICAgICAgIGVtYmVkID0gc2VsZi5nZXRfZW1iZWQoc3VibWlzc2lvbikKICAgICAgICAgICAgICAgIGNvbnRlbnQgPSB7J2VtYmVkcyc6IFtlbWJlZC50b19kaWN0KCldfQoKICAgICAgICAgICAgICAgIHIgPSByZXF1ZXN0cy5wb3N0KGZ1bGxfdXJsLCBqc29uPWNvbnRlbnQpCiAgICAgICAgICAgICAgICBzZWxmLmxpbWl0ID0gaW50KHIuaGVhZGVyc1snWC1SYXRlTGltaXQtTGltaXQnXSkKICAgICAgICAgICAgICAgIHNlbGYucmVtYWluaW5nID0gaW50KHIuaGVhZGVyc1snWC1SYXRlTGltaXQtUmVtYWluaW5nJ10pCiAgICAgICAgICAgICAgICBzZWxmLnJlc2V0ID0gaW50KHIuaGVhZGVyc1snWC1SYXRlTGltaXQtUmVzZXQnXSkKCiAgICAgICAgICAgICAgICBib2R5ID0ganNvbi5sb2FkcyhyLmNvbnRlbnQuZGVjb2RlKCd1dGYtOCcpKQogICAgICAgICAgICAgICAgc3VibWlzc2lvbi5tZXNzYWdlX2lkID0gYm9keVsnaWQnXQogICAgICAgICAgICAgICAgc3VibWlzc2lvbi5zdGF0ZSA9IFN1Ym1pc3Npb24uU1RBVEVfUE9TVEVECiAgICAgICAgICAgICAgICBzdWJtaXNzaW9uLnNhdmUoKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcHJpbnQoJ1dhaXRpbmcgZm9yIHJlc2V0Li4uIHt9IHNlY29uZHMnLmZvcm1hdChub3cgLSBzZWxmLnJlc2V0KSkKICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoNSkKCiAgICBkZWYgZ2V0X2VtYmVkKHNlbGYsIGluZm8pOgogICAgICAgIGZsYWlyID0gaW5mby5mbGFpci5sb3dlcigpLnJlcGxhY2UoTUFPUklUQU5HQS5kZWNvZGUoJ3V0ZjgnKSwgJ2EnKQogICAgICAgIGNvbG91ciA9IGludChzZWxmLmZsYWlyX2NvbG91cnMuZ2V0KGZsYWlyLCBzZWxmLmRlZmF1bHRfZmxhaXJfY29sb3VyKSwgMTYpCgogICAgICAgIGVtYmVkID0gTWVzc2FnZUVtYmVkKCkKICAgICAgICBlbWJlZC50aXRsZSA9IHRleHR3cmFwLnNob3J0ZW4odSJbe31dIHt9Ii5mb3JtYXQoCiAgICAgICAgICAgIGluZm8uZmxhaXIsIGluZm8udGl0bGUKICAgICAgICApLCB3aWR0aD0yNTYsIHBsYWNlaG9sZGVyPSIuLi4iKQogICAgICAgIGVtYmVkLnVybCA9ICJodHRwczovL3JlZGRpdC5jb217fSIuZm9ybWF0KGluZm8udXJsKQogICAgICAgIGVtYmVkLmNvbG9yID0gY29sb3VyCiAgICAgICAgZW1iZWQuc2V0X3RodW1ibmFpbCh1cmw9aW5mby50aHVtYm5haWwpCiAgICAgICAgZW1iZWQuc2V0X2F1dGhvcihuYW1lPWluZm8uYXV0aG9yLCB1cmw9Imh0dHBzOi8vcmVkZGl0LmNvbS91L3t9Ii5mb3JtYXQoaW5mby5hdXRob3IpKQogICAgICAgIGVtYmVkLnRpbWVzdGFtcCA9IGRhdGV0aW1lLmZyb210aW1lc3RhbXAoaW5mby50aW1lLCB0aW1lem9uZS51dGMpLmlzb2Zvcm1hdCgpCgogICAgICAgIHJldHVybiBlbWJlZAoKICAgIGRlZiBwb3N0X3N0YXRzKHNlbGYpOgogICAgICAgIGRhdGEgPSBbCiAgICAgICAgICAgIFsnQXV0aG9yJywgJ0NvdW50J10sCiAgICAgICAgXQoKICAgICAgICBzdGF0cyA9IGRiLmV4ZWN1dGVfc3FsKHNlbGYuYXV0aG9yX3N0YXRzKQogICAgICAgIGZvciByb3cgaW4gc3RhdHMuZmV0Y2hhbGwoKToKICAgICAgICAgICAgZGF0YS5hcHBlbmQoW3Jvd1swXSwgcm93WzFdXSkKCiAgICAgICAgdGFibGVfaW5zdGFuY2UgPSBBc2NpaVRhYmxlKGRhdGEpCiAgICAgICAgdGFibGVfaW5zdGFuY2UuaW5uZXJfY29sdW1uX2JvcmRlciA9IEZhbHNlCiAgICAgICAgdGFibGVfaW5zdGFuY2Uub3V0ZXJfYm9yZGVyID0gRmFsc2UKICAgICAgICB0YWJsZV9pbnN0YW5jZS5qdXN0aWZ5X2NvbHVtbnNbMV0gPSAnY2VudGVyJwoKICAgICAgICBjb250ZW50ID0geydjb250ZW50JzogIioqV0VFS0xZIEFVVEhPUiBTVEFUUzoqKmBgYHt9YGBgIi5mb3JtYXQodGFibGVfaW5zdGFuY2UudGFibGUpfQoKICAgICAgICBmdWxsX3VybCA9IHNlbGYudXJsICsgc2VsZi5ob29rX2lkICsgJy8nICsgc2VsZi5ob29rX3Rva2VuICsgJz93YWl0PXRydWUnCiAgICAgICAgciA9IHJlcXVlc3RzLnBvc3QoZnVsbF91cmwsIGpzb249Y29udGVudCkKICAgICAgICBzZWxmLmxpbWl0ID0gaW50KHIuaGVhZGVyc1snWC1SYXRlTGltaXQtTGltaXQnXSkKICAgICAgICBzZWxmLnJlbWFpbmluZyA9IGludChyLmhlYWRlcnNbJ1gtUmF0ZUxpbWl0LVJlbWFpbmluZyddKQogICAgICAgIHNlbGYucmVzZXQgPSBpbnQoci5oZWFkZXJzWydYLVJhdGVMaW1pdC1SZXNldCddKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICB0cnk6CiAgICAgICAgcG9zdF9zdGF0cyA9IHN5cy5hcmd2WzFdID09ICdwb3N0X3N0YXRzJwogICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgcG9zdF9zdGF0cyA9IEZhbHNlCgogICAgYm90ID0gUk5aQm90KCduZXd6ZWFsYW5kJywgcG9zdF9zdGF0cykKPHxmaW1fc3VmZml4fD4KaW1wb3J0IGpzb24KZnJvbSB0ZXJtaW5hbHRhYmxlcyBpbXBvcnQgQXNjaWlUYWJsZQppbXBvcnQgc3lzCmltcG9ydCB1bmljb2RlZGF0YQo8fGZpbV9lbmR8Pg=="]
["4b71197665836a7826856d1e6302e3949d83de93-1","4b71197665836a7826856d1e6302e3949d83de93","PHxmaW1fcHJlZml4fD4KZnJvbSAuYXR0cl9kaWN0IGltcG9ydCBBdHRyRGljdAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gLm9wdGlvbnMgaW1wb3J0IG9wdHMKPHxmaW1fZW5kfD4="]
["f286648374f280ca61cf43778f7429da1e1f1368-1","f286648374f280ca61cf43778f7429da1e1f1368",{"$cut":{"chars":51496,"head":"PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIwojIFFCRnV6eiBpcyBhIGdyYW1tYXIgYmFzZWQgYmxhY2sgYm94IGZ1enplciBmb3IgZ2VuZXJhdGluZyByYW5kb20gUUJGIGZvcm11bGFzLgojCiMgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwLCAyMDExIE1hdGhpYXMgUHJlaW5lcgojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyAKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIAojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMKaW1wb3J0IGd6aXAKaW1wb3J0IG9zCmltcG9ydCBtYXRoCmltcG9ydCByYW5kb20KaW1wb3J0IHN5cwppbXBvcnQgdGltZQpmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKCl9fYXV0aG9yX18gPSAiTWF0aGlhcyBQcmVpbmVyIDxtYXRoaWFzLnByZWluZXJAZ21haWwuY29tPiIKX192ZXJzaW9uX18gPSAiMS4xLjEiCgojIGNvbnN0YW50cwpVTklWRVJTQUwgPSAnYScKRVhJU1RFTlRJQUwgPSAnZScKVVNFRCA9IDAKVU5VU0VEID0gMQoKIyBnbG9iYWwgcHJvZ3JhbSBwYXJhbWV0ZXJzCl9vcHRpb25zID0gb2JqZWN0CgojIHZhcmlhYmxlcyB1c2VkIGZvciBzdGF0aXN0aWNzIG9ubHkgKHZlcmJvc2Ugb3V0cHV0KQpfc3RhdF9yZW1vdmVkX2xpdHMgPSAwCl9zdGF0X3RvdGFsX2xpdHMgPSAwCgojIHF1YW50aWZpZXIgY2FjaGU6IHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgZXhpc3RlbnRpYWwgYW5kIHVuaXZlcnNhbCAKIyAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgaWYgdGhleSBoYXZlIGFscmVhZHkgYmVlbiB1c2VkIG9yIG5vdCBpbiBjbGF1c2UKIyAgICAgICAgICAgICAgICAgICBnZW5lcmF0aW9uLiB2YXJpYWJsZSBjYWNoZSBpcyBub3QgdXNlZCBmb3IgdGhpcyBiZWNhdXNlIAojICAgICAgICAgICAgICAgICAgIHRoZSBsb29rdXAgaW4gdGhlIHZhcmlhYmxlIGNhY2hlIHdvdWxkIHRha2UgbXVjaCBtb3JlIHRpbWUuCl9xY2FjaGUgPSB7RVhJU1RFTlRJQUwgOiB7fSwgVU5JVkVSU0FMIDoge319Cl9xY2FjaGVbRVhJU1RFTlRJQUxdW1VOVVNFRF0gPSBbXQpfcWNhY2hlW0VYSVNURU5USUFMXVtVU0VEXSA9IFtdCl9xY2FjaGVbVU5JVkVSU0FMXVtVTlVTRURdID0gW10KX3FjYWNoZVtVTklWRVJTQUxdW1VTRURdID0gW10KCiMgdmFyaWFibGUgY2FjaGU6IHN0b3JlcyBhIGxpc3QgY29udGFpbmluZyBxdWFudGlmaWVyLCBzY29wZSBsZXZlbCBhbmQgbnVtYmVyCiMgICAgICAgICAgICAgICAgIG9mIG9jY3VycmVuY2VzIGZvciBlYWNoIHZhcmlhYmxlLgojIGxpc3QgaW5kaWNlczoKIyBfdmNhY2hlW3Zhcl1bMF0gOiBxdWFudGlmaWVyCiMgX3ZjYWNoZVt2YXJdWzFdIDogc2NvcGUgbGV2ZWwKIyBfdmNhY2hlW3Zhcl1bMl0gOiBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgaW4gYWxsIGNsYXVzZXMKX3ZjYWNoZSA9IHt9CgpkZWYgX3BhcnNlX2FyZ3VtZW50cygpOgogICAgIiIiCiAgICBfcGFyc2VfYXJndW1lbnRzKCkKCiAgICByZXR1cm5zIChwICAgOiBPcHRpb25QYXJzZXIgb2JqZWN0LAogICAgICAgICAgICAgb3B0IDogT3B0aW9uUGFyc2VyIG9wdGlvbnMpCgogICAgSW5pdGlhbGl6ZSBPcHRpb25QYXJzZXIgb2JqZWN0IHdpdGggYWxsIGF2YWlsYWJsZSBRQkZ1enogb3B0aW9ucy4KCiAgICBSZXR1cm5zIHBhcnNlciBvYmplY3QgYW5kIHBhcnNlZCBvcHRpb25zLgogICAgIiIiCiAgICBnbG9iYWwgX192ZXJzaW9uX18KCiAgICBkZXNjcmlwdGlvbiA9ICJRQkZ1enogaXMgYSBncmFtbWFyIGJhc2VkIGJsYWNrIGJveCBmdXp6ZXIgZm9yIGdlbmVyYXRpbmcgIlwKICAgICAgICAgICAgICAgICAgInJhbmRvbSBRQkYgZm9ybXVsYXMgY29tcGxpYW50IHRvIHRoZSBRRElNQUNTIHN0YW5kYXJkLiBUaGUgIlwKICAgICAgICAgICAgICAgICAgInByb2dyYW0gdXNlcyByYW5kb20gcGFyYW1ldGVyIHZhbHVlcyBpZiBub25lIGFyZSBzcGVjaWZpZWQuIgoKICAgIHAgPSBPcHRpb25QYXJzZXIoZGVzY3JpcHRpb249ZGVzY3JpcHRpb24sIHZlcnNpb249X192ZXJzaW9uX18pCgogICAgIyBudW1iZXIgb2YgdmFyaWFibGVzCiAgICBwLmFkZF9vcHRpb24oIi12IiwgdHlwZT0iaW50IiwgZGVzdD0ibnVtX3ZhcnMiLCBtZXRhdmFyPSJOVU0iLFwKICAgICAgICAgICAgICAgICBoZWxwPSJtYXhpbXVtIG51bWJlciBvZiB2YXJpYWJsZXMiKQogICAgIyBudW1iZXIgb2YgY2xhdXNlcwogICAgcC5hZGRfb3B0aW9uKCItYyIsIHR5cGU9ImludCIsIGRlc3Q9Im51bV9jbGF1c2VzIiwgbWV0YXZhcj0iTlVNIixcCiAgICAgICAgICAgICAgICAgaGVscD0ibWF4aW11bSBudW1iZXIgb2YgY2xhdXNlcyIpCiAgICAjIG51bWJlciBvZiBxdWFudGlmaWVyIHNldHMKICAgIHAuYWRkX29wdGlvbigiLXMiLCB0eXBlPSJpbnQiLCBkZXN0PSJudW1fcXNldHMiLCBtZXRhdmFyPSJOVU0iLFwKICAgICAgICAgICAgICAgICBoZWxwPSJtYXhpbXVtIG51bWJlciBvZiBxdWFudGlmaWVyIHNldHMiKQogICAgIyBuYW1lIG9mIHRoZSBvdXRwdXQgZmlsZQogICAgcC5hZGRfb3B0"}}]
["f286648374f280ca61cf43778f7429da1e1f1368-2","f286648374f280ca61cf43778f7429da1e1f1368","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIwojIFFCRnV6eiBpcyBhIGdyYW1tYXIgYmFzZWQgYmxhY2sgYm94IGZ1enplciBmb3IgZ2VuZXJhdGluZyByYW5kb20gUUJGIGZvcm11bGFzLgojCiMgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwLCAyMDExIE1hdGhpYXMgUHJlaW5lcgojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyAKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIAojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMKaW1wb3J0IGd6aXAKaW1wb3J0IG9zCmltcG9ydCBtYXRoCmltcG9ydCByYW5kb20KaW1wb3J0IHN5cwppbXBvcnQgdGltZQpmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKCl9fYXV0aG9yX18gPSAiTWF0aGlhcyBQcmVpbmVyIDxtYXRoaWFzLnByZWluZXJAZ21haWwuY29tPiIKX192ZXJzaW9uX18gPSAiMS4xLjEiCgojIGNvbnN0YW50cwpVTklWRVJTQUwgPSAnYScKRVhJU1RFTlRJQUwgPSAnZScKVVNFRCA9IDAKVU5VU0VEID0gMQoKIyBnbG9iYWwgcHJvZ3JhbSBwYXJhbWV0ZXJzCl9vcHRpb25zID0gb2JqZWN0CgojIHZhcmlhYmxlcyB1c2VkIGZvciBzdGF0aXN0aWNzIG9ubHkgKHZlcmJvc2Ugb3V0cHV0KQpfc3RhdF9yZW1vdmVkX2xpdHMgPSAwCl9zdGF0X3RvdGFsX2xpdHMgPSAwCgojIHF1YW50aWZpZXIgY2FjaGU6IHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgZXhpc3RlbnRpYWwgYW5kIHVuaXZlcnNhbCAKIyAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgaWYgdGhleSBoYXZlIGFscmVhZHkgYmVlbiB1c2VkIG9yIG5vdCBpbiBjbGF1c2UKIyAgICAgICAgICAgICAgICAgICBnZW5lcmF0aW9uLiB2YXJpYWJsZSBjYWNoZSBpcyBub3QgdXNlZCBmb3IgdGhpcyBiZWNhdXNlIAojICAgICAgICAgICAgICAgICAgIHRoZSBsb29rdXAgaW4gdGhlIHZhcmlhYmxlIGNhY2hlIHdvdWxkIHRha2UgbXVjaCBtb3JlIHRpbWUuCl9xY2FjaGUgPSB7RVhJU1RFTlRJQUwgOiB7fSwgVU5JVkVSU0FMIDoge319Cl9xY2FjaGVbRVhJU1RFTlRJQUxdW1VOVVNFRF0gPSBbXQpfcWNhY2hlW0VYSVNURU5USUFMXVtVU0VEXSA9IFtdCl9xY2FjaGVbVU5JVkVSU0FMXVtVTlVTRURdID0gW10KX3FjYWNoZVtVTklWRVJTQUxdW1VTRURdID0gW10KCiMgdmFyaWFibGUgY2FjaGU6IHN0b3JlcyBhIGxpc3QgY29udGFpbmluZyBxdWFudGlmaWVyLCBzY29wZSBsZXZlbCBhbmQgbnVtYmVyCiMgICAgICAgICAgICAgICAgIG9mIG9jY3VycmVuY2VzIGZvciBlYWNoIHZhcmlhYmxlLgojIGxpc3QgaW5kaWNlczoKIyBfdmNhY2hlW3Zhcl1bMF0gOiBxdWFudGlmaWVyCiMgX3ZjYWNoZVt2YXJdWzFdIDogc2NvcGUgbGV2ZWwKIyBfdmNhY2hlW3Zhcl1bMl0gOiBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgaW4gYWxsIGNsYXVzZXMKX3ZjYWNoZSA9IHt9CgpkZWYgX3BhcnNlX2FyZ3VtZW50cygpOgogICAgIiIiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIF9wYXJzZV9hcmd1bWVudHMoKQoKICAgIHJldHVybnMgKHAgICA6IE9wdGlvblBhcnNlciBvYmplY3QsCiAgICAgICAgICAgICBvcHQgOiBPcHRpb25QYXJzZXIgb3B0aW9ucykKPHxmaW1fZW5kfD4="]
["e4f1f51ba3ff7a08747ee8be8b70046fa48a9f99-1","e4f1f51ba3ff7a08747ee8be8b70046fa48a9f99","PHxmaW1fcHJlZml4fD4KZnJvbSBnaXJkZXJfd29ya2VyIGltcG9ydCBHaXJkZXJXb3JrZXJQbHVnaW5BQkMKCgpjbGFzcyBDb21tb25UYXNrc1BsdWdpbihHaXJkZXJXb3JrZXJQbHVnaW5BQkMpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFwcCwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzZWxmLmFwcCA9IGFwcAoKICAgIGRlZiB0YXNrX2ltcG9ydHMoc2VsZik6CiAgICAgICAgIyBSZXR1cm4gYSBsaXN0IG9mIHB5dGhvbiBpbXBvcnRhYmxlIHBhdGhzIHRvIHRoZQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIyBwbHVnaW4ncyBwYXRoIGRpcmVjdG9yeQogICAgICAgIHJldHVybiBbJ2NvbW1vbl90YXNrcy50ZXN0X3Rhc2tzLmZpYicsCiAgICAgICAgICAgICAgICAnY29tbW9uX3Rhc2tzLnRlc3RfdGFza3MuZmFpbCcsCiAgICAgICAgICAgICAgICAnY29tbW9uX3Rhc2tzLnRlc3RfdGFza3MuY2FuY2VsJywKPHxmaW1fZW5kfD4="]
["e4f1f51ba3ff7a08747ee8be8b70046fa48a9f99-2","e4f1f51ba3ff7a08747ee8be8b70046fa48a9f99","PHxmaW1fcHJlZml4fD4KZnJvbSBnaXJkZXJfd29ya2VyIGltcG9ydCBHaXJkZXJXb3JrZXJQbHVnaW5BQkMKCgpjbGFzcyBDb21tb25UYXNrc1BsdWdpbihHaXJkZXJXb3JrZXJQbHVnaW5BQkMpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFwcCwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzZWxmLmFwcCA9IGFwcAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIHRhc2tfaW1wb3J0cyhzZWxmKToKICAgICAgICAjIFJldHVybiBhIGxpc3Qgb2YgcHl0aG9uIGltcG9ydGFibGUgcGF0aHMgdG8gdGhlCiAgICAgICAgIyBwbHVnaW4ncyBwYXRoIGRpcmVjdG9yeQo8fGZpbV9lbmR8Pg=="]
["e4f1f51ba3ff7a08747ee8be8b70046fa48a9f99-3","e4f1f51ba3ff7a08747ee8be8b70046fa48a9f99","PHxmaW1fcHJlZml4fD4KZnJvbSBnaXJkZXJfd29ya2VyIGltcG9ydCBHaXJkZXJXb3JrZXJQbHVnaW5BQkMKCgpjbGFzcyBDb21tb25UYXNrc1BsdWdpbihHaXJkZXJXb3JrZXJQbHVnaW5BQkMpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFwcCwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzZWxmLmFwcCA9IGFwcAoKICAgIGRlZiB0YXNrX2ltcG9ydHMoc2VsZik6CiAgICAgICAgIyBSZXR1cm4gYSBsaXN0IG9mIHB5dGhvbiBpbXBvcnRhYmxlIHBhdGhzIHRvIHRoZQogICAgICAgICMgcGx1Z2luJ3MgcGF0aCBkaXJlY3RvcnkKICAgICAgICByZXR1cm4gWydjb21tb25fdGFza3MudGVzdF90YXNrcy5maWInLAogICAgICAgICAgICAgICAgJ2NvbW1vbl90YXNrcy50ZXN0X3Rhc2tzLmZhaWwnLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAnY29tbW9uX3Rhc2tzLnRlc3RfdGFza3MuY2FuY2VsJywKICAgICAgICAgICAgICAgICdjb21tb25fdGFza3MudGVzdF90YXNrcy5naXJkZXJfY2xpZW50J10KPHxmaW1fZW5kfD4="]
["e4f1f51ba3ff7a08747ee8be8b70046fa48a9f99-4","e4f1f51ba3ff7a08747ee8be8b70046fa48a9f99","PHxmaW1fcHJlZml4fD4KZnJvbSBnaXJkZXJfd29ya2VyIGltcG9ydCBHaXJkZXJXb3JrZXJQbHVnaW5BQkMKCgpjbGFzcyBDb21tb25UYXNrc1BsdWdpbihHaXJkZXJXb3JrZXJQbHVnaW5BQkMpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGFwcCwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzZWxmLmFwcCA9IGFwcAoKICAgIGRlZiB0YXNrX2ltcG9ydHMoc2VsZik6Cjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgJ2NvbW1vbl90YXNrcy50ZXN0X3Rhc2tzLmNhbmNlbCcsCiAgICAgICAgICAgICAgICAnY29tbW9uX3Rhc2tzLnRlc3RfdGFza3MuZ2lyZGVyX2NsaWVudCddCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIyBSZXR1cm4gYSBsaXN0IG9mIHB5dGhvbiBpbXBvcnRhYmxlIHBhdGhzIHRvIHRoZQogICAgICAgICMgcGx1Z2luJ3MgcGF0aCBkaXJlY3RvcnkKICAgICAgICByZXR1cm4gWydjb21tb25fdGFza3MudGVzdF90YXNrcy5maWInLAogICAgICAgICAgICAgICAgJ2NvbW1vbl90YXNrcy50ZXN0X3Rhc2tzLmZhaWwnLAo8fGZpbV9lbmR8Pg=="]
["329c80bcfb211f4b12fbf6dd7a592c6a9b2aa742-1","329c80bcfb211f4b12fbf6dd7a592c6a9b2aa742","PHxmaW1fcHJlZml4fD4KZnJvbSBhcHAgaW1wb3J0IGFwcAo8fGZpbV9ob2xlfD4KICByZXR1cm4gYXBwLnNlbmRfc3RhdGljX2ZpbGUoJ2luZGV4Lmh0bWwnKQoKQGFwcC5yb3V0ZSgnLzxwYXRoOnBhdGg+JykKZGVmIHN0YXRpY19wcm94eShwYXRoKToKICAjIHNlbmRfc3RhdGljX2ZpbGUgd2lsbCBndWVzcyB0aGUgY29ycmVjdCBNSU1FIHR5cGUKICByZXR1cm4gYXBwLnNlbmRfc3RhdGljX2ZpbGUocGF0aCkKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgYXBwLnJ1bigpCjx8ZmltX3N1ZmZpeHw+CgojIFJvdXRlcwpAYXBwLnJvdXRlKCcvJykKZGVmIHJvb3QoKToKPHxmaW1fZW5kfD4="]
["329c80bcfb211f4b12fbf6dd7a592c6a9b2aa742-2","329c80bcfb211f4b12fbf6dd7a592c6a9b2aa742","PHxmaW1fcHJlZml4fD4KZnJvbSBhcHAgaW1wb3J0IGFwcAoKIyBSb3V0ZXMKQGFwcC5yb3V0ZSgnLycpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIHJvb3QoKToKICByZXR1cm4gYXBwLnNlbmRfc3RhdGljX2ZpbGUoJ2luZGV4Lmh0bWwnKQoKQGFwcC5yb3V0ZSgnLzxwYXRoOnBhdGg+JykKPHxmaW1fZW5kfD4="]
["329c80bcfb211f4b12fbf6dd7a592c6a9b2aa742-3","329c80bcfb211f4b12fbf6dd7a592c6a9b2aa742","PHxmaW1fcHJlZml4fD4KZnJvbSBhcHAgaW1wb3J0IGFwcAoKIyBSb3V0ZXMKQGFwcC5yb3V0ZSgnLycpCmRlZiByb290KCk6CiAgcmV0dXJuIGFwcC5zZW5kX3N0YXRpY19maWxlKCdpbmRleC5odG1sJykKCkBhcHAucm91dGUoJy88cGF0aDpwYXRoPicpCmRlZiBzdGF0aWNfcHJveHkocGF0aCk6CiAgIyBzZW5kX3N0YXRpY19maWxlIHdpbGwgZ3Vlc3MgdGhlIGNvcnJlY3QgTUlNRSB0eXBlCiAgcmV0dXJuIGFwcC5zZW5kX3N0YXRpY19maWxlKHBhdGgpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgYXBwLnJ1bigpCjx8ZmltX2VuZHw+"]
["329c80bcfb211f4b12fbf6dd7a592c6a9b2aa742-4","329c80bcfb211f4b12fbf6dd7a592c6a9b2aa742","PHxmaW1fcHJlZml4fD4KZnJvbSBhcHAgaW1wb3J0IGFwcAoKIyBSb3V0ZXMKQGFwcC5yb3V0ZSgnLycpCmRlZiByb290KCk6CiAgcmV0dXJuIGFwcC5zZW5kX3N0YXRpY19maWxlKCdpbmRleC5odG1sJykKCkBhcHAucm91dGUoJy88cGF0aDpwYXRoPicpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIHN0YXRpY19wcm94eShwYXRoKToKICAjIHNlbmRfc3RhdGljX2ZpbGUgd2lsbCBndWVzcyB0aGUgY29ycmVjdCBNSU1FIHR5cGUKICByZXR1cm4gYXBwLnNlbmRfc3RhdGljX2ZpbGUocGF0aCkKCjx8ZmltX2VuZHw+"]
["f23327636a02da404720a27efa0a9b70f4b5ed2d-1","f23327636a02da404720a27efa0a9b70f4b5ed2d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCmltcG9ydCBjb25maWRlbnRpYWxzCmltcG9ydCBsb2dnaW5nCgoKIyB0aGUgYm90IGluZm8KZGVmIGdldF9tZShib3RfaWQpOgo8fGZpbV9ob2xlfD4KIyBub3RpZnkgdG8gYWxsIHJlY2VpdmVycyBvbiBUZWxlZ3JhbQpkZWYgbm90aWZ5X29uX3RlbGVncmFtKHRlbGVncmFtX2lkcywgbXNnKToKICAgIGZvciB0aWQgaW4gdGVsZWdyYW1faWRzOgogICAgICAgIG5vdGlmeV90ZWxlZ3JhbShjb25maWRlbnRpYWxzLkZPUkVJR05fV09SS0VSX0JPVF9JRCwgdGlkLCBtc2cpCgoKIyBub3RpZnkgdG8gVGVsZWdyYW0gY2hhdApkZWYgbm90aWZ5X3RlbGVncmFtKGJvdF9pZCwgY2hhdF9pZCwgbXNnKToKICAgIHIgPSByZXF1ZXN0cy5wb3N0KAogICAgICAgIHVybD0iaHR0cHM6Ly9hcGkudGVsZWdyYW0ub3JnL2JvdCIgKyBib3RfaWQgKyAiL3NlbmRNZXNzYWdlIiwKICAgICAgICBqc29uPXsiY2hhdF9pZCI6IGNoYXRfaWQsICJ0ZXh0IjogbXNnfQogICAgKQogICAgbG9nZ2luZy5pbmZvKHIuanNvbigpKQo8fGZpbV9zdWZmaXh8PgogICAgciA9IHJlcXVlc3RzLmdldCgiaHR0cHM6Ly9hcGkudGVsZWdyYW0ub3JnL2JvdCIgKyBib3RfaWQgKyAiL2dldE1lIikKICAgIHJldHVybiByLmpzb24oKQoKCjx8ZmltX2VuZHw+"]
["f23327636a02da404720a27efa0a9b70f4b5ed2d-2","f23327636a02da404720a27efa0a9b70f4b5ed2d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCmltcG9ydCBjb25maWRlbnRpYWxzCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IGxvZ2dpbmcKCgojIHRoZSBib3QgaW5mbwo8fGZpbV9lbmR8Pg=="]
["f23327636a02da404720a27efa0a9b70f4b5ed2d-3","f23327636a02da404720a27efa0a9b70f4b5ed2d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCmltcG9ydCBjb25maWRlbnRpYWxzCmltcG9ydCBsb2dnaW5nCgoKIyB0aGUgYm90IGluZm8KZGVmIGdldF9tZShib3RfaWQpOgogICAgciA9IHJlcXVlc3RzLmdldCgiaHR0cHM6Ly9hcGkudGVsZWdyYW0ub3JnL2JvdCIgKyBib3RfaWQgKyAiL2dldE1lIikKICAgIHJldHVybiByLmpzb24oKQoKCiMgbm90aWZ5IHRvIGFsbCByZWNlaXZlcnMgb24gVGVsZWdyYW0KZGVmIG5vdGlmeV9vbl90ZWxlZ3JhbSh0ZWxlZ3JhbV9pZHMsIG1zZyk6Cjx8ZmltX2hvbGV8PgojIG5vdGlmeSB0byBUZWxlZ3JhbSBjaGF0CmRlZiBub3RpZnlfdGVsZWdyYW0oYm90X2lkLCBjaGF0X2lkLCBtc2cpOgogICAgciA9IHJlcXVlc3RzLnBvc3QoCiAgICAgICAgdXJsPSJodHRwczovL2FwaS50ZWxlZ3JhbS5vcmcvYm90IiArIGJvdF9pZCArICIvc2VuZE1lc3NhZ2UiLAogICAgICAgIGpzb249eyJjaGF0X2lkIjogY2hhdF9pZCwgInRleHQiOiBtc2d9CiAgICApCiAgICBsb2dnaW5nLmluZm8oci5qc29uKCkpCjx8ZmltX3N1ZmZpeHw+CiAgICBmb3IgdGlkIGluIHRlbGVncmFtX2lkczoKICAgICAgICBub3RpZnlfdGVsZWdyYW0oY29uZmlkZW50aWFscy5GT1JFSUdOX1dPUktFUl9CT1RfSUQsIHRpZCwgbXNnKQoKCjx8ZmltX2VuZHw+"]
["f23327636a02da404720a27efa0a9b70f4b5ed2d-4","f23327636a02da404720a27efa0a9b70f4b5ed2d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCmltcG9ydCBjb25maWRlbnRpYWxzCmltcG9ydCBsb2dnaW5nCgoKIyB0aGUgYm90IGluZm8KZGVmIGdldF9tZShib3RfaWQpOgogICAgciA9IHJlcXVlc3RzLmdldCgiaHR0cHM6Ly9hcGkudGVsZWdyYW0ub3JnL2JvdCIgKyBib3RfaWQgKyAiL2dldE1lIikKICAgIHJldHVybiByLmpzb24oKQoKCiMgbm90aWZ5IHRvIGFsbCByZWNlaXZlcnMgb24gVGVsZWdyYW0KZGVmIG5vdGlmeV9vbl90ZWxlZ3JhbSh0ZWxlZ3JhbV9pZHMsIG1zZyk6CiAgICBmb3IgdGlkIGluIHRlbGVncmFtX2lkczoKICAgICAgICBub3RpZnlfdGVsZWdyYW0oY29uZmlkZW50aWFscy5GT1JFSUdOX1dPUktFUl9CT1RfSUQsIHRpZCwgbXNnKQoKCiMgbm90aWZ5IHRvIFRlbGVncmFtIGNoYXQKZGVmIG5vdGlmeV90ZWxlZ3JhbShib3RfaWQsIGNoYXRfaWQsIG1zZyk6CiAgICByID0gcmVxdWVzdHMucG9zdCgKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHVybD0iaHR0cHM6Ly9hcGkudGVsZWdyYW0ub3JnL2JvdCIgKyBib3RfaWQgKyAiL3NlbmRNZXNzYWdlIiwKICAgICAgICBqc29uPXsiY2hhdF9pZCI6IGNoYXRfaWQsICJ0ZXh0IjogbXNnfQo8fGZpbV9lbmR8Pg=="]
["f23327636a02da404720a27efa0a9b70f4b5ed2d-5","f23327636a02da404720a27efa0a9b70f4b5ed2d","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHJlcXVlc3RzCmltcG9ydCBjb25maWRlbnRpYWxzCmltcG9ydCBsb2dnaW5nCgoKIyB0aGUgYm90IGluZm8KZGVmIGdldF9tZShib3RfaWQpOgogICAgciA9IHJlcXVlc3RzLmdldCgiaHR0cHM6Ly9hcGkudGVsZWdyYW0ub3JnL2JvdCIgKyBib3RfaWQgKyAiL2dldE1lIikKICAgIHJldHVybiByLmpzb24oKQo8fGZpbV9ob2xlfD4KICAgIGZvciB0aWQgaW4gdGVsZWdyYW1faWRzOgogICAgICAgIG5vdGlmeV90ZWxlZ3JhbShjb25maWRlbnRpYWxzLkZPUkVJR05fV09SS0VSX0JPVF9JRCwgdGlkLCBtc2cpCgoKIyBub3RpZnkgdG8gVGVsZWdyYW0gY2hhdApkZWYgbm90aWZ5X3RlbGVncmFtKGJvdF9pZCwgY2hhdF9pZCwgbXNnKToKICAgIHIgPSByZXF1ZXN0cy5wb3N0KAogICAgICAgIHVybD0iaHR0cHM6Ly9hcGkudGVsZWdyYW0ub3JnL2JvdCIgKyBib3RfaWQgKyAiL3NlbmRNZXNzYWdlIiwKICAgICAgICBqc29uPXsiY2hhdF9pZCI6IGNoYXRfaWQsICJ0ZXh0IjogbXNnfQogICAgKQogICAgbG9nZ2luZy5pbmZvKHIuanNvbigpKQo8fGZpbV9zdWZmaXh8PgoKCiMgbm90aWZ5IHRvIGFsbCByZWNlaXZlcnMgb24gVGVsZWdyYW0KZGVmIG5vdGlmeV9vbl90ZWxlZ3JhbSh0ZWxlZ3JhbV9pZHMsIG1zZyk6Cjx8ZmltX2VuZHw+"]
["0855dc4cd606d5f03fc9a457d4598802eb2fd1ce-1","0855dc4cd606d5f03fc9a457d4598802eb2fd1ce","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFiYwpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCwgVHVwbGUsIERpY3QsIFNldCwgVW5pb24KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0b3JjaC5ubiBhcyBubgppbXBvcnQgdG9yY2gKaW1wb3J0IHRvcmNoLm5uLmZ1bmN0aW9uYWwgYXMgRgpmcm9tIC4uY2xhc3NpZmllcnMgaW1wb3J0IENOTjFERmVhdHVyaXplciwgR1JVRmVhdHVyaXplciwgQmFzaWNGZWF0dXJpemVyLCBUcmFuc2Zvcm1lckZlYXR1cml6ZXIKZnJvbSAuRmFzdHRleHQxRENOTiBpbXBvcnQgRmFzdHRleHQxRENOTk1vZGVsCmZyb20gdHJhbnNmb3JtZXJzIGltcG9ydCBBdXRvTW9kZWxXaXRoTE1IZWFkLCBBdXRvVG9rZW5pemVyLCBBdXRvTW9kZWwsIERpc3RpbEJlcnRUb2tlbml6ZXIsIExvbmdmb3JtZXJUb2tlbml6ZXIKZnJvbSB0cmFuc2Zvcm1lcnMgaW1wb3J0IEFsYmVydE1vZGVsLCBBbGJlcnRUb2tlbml6ZXIsIEFsYmVydEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24sIERpc3RpbEJlcnRNb2RlbCwgTG9uZ2Zvcm1lck1vZGVsCmltcG9ydCB0b3JjaHZpc2lvbi5tb2RlbHMgYXMgbW9kZWxzCmZyb20gdG9yY2hubHAud29yZF90b192ZWN0b3IgaW1wb3J0IENoYXJOR3JhbQpmcm9tIHRvcmNobmxwLndvcmRfdG9fdmVjdG9yIGltcG9ydCBCUEVtYgpmcm9tIC4uLnV0aWxzIGltcG9ydCBnZXRfZGV2aWNlLCBHYXVzc2lhbk5vaXNlLCByYW5kb21fd29yZF9tYXNrLCBsb2FkX3N0b3JlZF9wYXJhbXMsIEV4cGFuZENvbnRyYWN0LCBUcmFuc2Zvcm1lciwgUG9zaXRpb25hbEVuY29kaW5nLCBMYW1iZGFMYXllciwgZ2V0X2dsb2JhbCwgXAogICAgZ2V0X3JlZ3VsYXJpemF0aW9uX2xheWVycywgV29yZE1hc2tpbmcKZnJvbSAuLi50cmFpbmluZyBpbXBvcnQgZmJfMWRfbG9zc19idWlsZGVyCmltcG9ydCBvcwppbXBvcnQgcmFuZG9tCmltcG9ydCBtYXRoCgoKY2xhc3MgQkVSVENsYXNzaWZpZXIobm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbGFzc2lmaWVyX2RpbXMsIG51bV9jbGFzc2VzLAogICAgICAgICAgICAgICAgIGdhdXNzaWFuX25vaXNlLCBkcm9wb3V0LAogICAgICAgICAgICAgICAgIGludGVybmFsX2RpbXMsIG5fbGF5ZXJzLAogICAgICAgICAgICAgICAgIGRldmljZSwKICAgICAgICAgICAgICAgICBuX3Rva2Vuc19pbj02NCwgbl90b2tlbnNfb3V0PTE2LAogICAgICAgICAgICAgICAgICoqa3dhcmdzKToKICAgICAgICBlbWJlZGRpbmdfZGltcyA9IDc2OAogICAgICAgIHN1cGVyKEJFUlRDbGFzc2lmaWVyLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi53b3JkX21hc2tpbmdfcHJvYmEgPSBrd2FyZ3NbIndvcmRfbWFza2luZ19wcm9iYSJdIGlmICJ3b3JkX21hc2tpbmdfcHJvYmEiIGluIGt3YXJncyBlbHNlIDAuMAogICAgICAgIHNlbGYubWxtX3Byb2JhYmlsaXR5ID0gc2VsZi53b3JkX21hc2tpbmdfcHJvYmEKICAgICAgICBzZWxmLm5fdG9rZW5zX2luID0gbl90b2tlbnNfaW4KICAgICAgICBzZWxmLnRva2VuX2NhY2hlID0ga3dhcmdzLnBvcCgidG9rZW5fY2FjaGUiLCBOb25lKQogICAgICAgIHNlbGYuZm9yY2VfbWFza2luZyA9IEZhbHNlCgogICAgICAgIG1vZGVsID0ga3dhcmdzWyJtb2RlbCJdIGlmICJtb2RlbCIgaW4ga3dhcmdzIGVsc2UgJ2FsYmVydC1iYXNlLXYyJwogICAgICAgIGdsb2JhbF9kaXIgPSBnZXRfZ2xvYmFsKCJtb2RlbHNfZGlyIikKICAgICAgICBtb2RlbCA9IG9zLnBhdGguam9pbihnbG9iYWxfZGlyLCBtb2RlbCkgaWYgbW9kZWwgaW4gb3MubGlzdGRpcihnbG9iYWxfZGlyKSBlbHNlIG1vZGVsCiAgICAgICAgc2VsZi50b2tlbml6ZXIgPSBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChtb2RlbCkKICAgICAgICBzZWxmLm1vZGVsID0gQXV0b01vZGVsLmZyb21fcHJldHJhaW5lZChtb2RlbCkKICAgICAgICBwcmludCgiUGljayBzdG9yZWQgTW9kZWwiLCBtb2RlbCwgIk1vZGVsIENsYXNzID0gIiwgdHlwZShzZWxmLm1vZGVsKSwgIlRva2VuaXplciBDbGFzcyA9ICIsIHR5cGUoc2VsZi50b2tlbml6ZXIpKQoKICAgICAgICBzZWxmLmF0dGVudGlvbl9kcm9wX3Byb2JhID0ga3dhcmdzWyJhdHRlbnRpb25fZHJvcF9wcm9iYSJdIGlmICJhdHRlbnRpb25fZHJvcF9wcm9iYSIgaW4ga3dhcmdzIGVsc2UgMC4wCiAgICAgICAgbl9lbmNvZGVycyA9IGt3YXJncy5wb3AoIm5fZW5jb2RlcnMiLCBuX2xheWVycykKICAgICAgICBuX2RlY29kZXJzID0ga3dhcmdzLnBvcCgibl9kZWNvZGVycyIsIG5fbGF5ZXJzKQogICAgICAgIHNlbGYuZmVhdHVyaXplciA9IFRyYW5zZm9ybWVyRmVhdHVyaXplcihuX3Rva2Vuc19pbiwgZW1iZWRkaW5nX2RpbXMsIG5fdG9rZW5zX291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZmllcl9kaW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbF9kaW1zLCBuX2VuY29kZXJzLCBuX2RlY29kZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYXVzc2lhbl9ub2lzZSwgZHJvcG91dCwgc2VsZi5hdHRlbnRpb25fZHJvcF9wcm9iYSkKCiAgICAgICAgc2VsZi5maW5hbF9sYXllciA9IGZiXzFkX2xvc3NfYnVpbGRlcihjbGFzc2lmaWVyX2RpbXMsIG5fdG9rZW5zX291dCwgbnVtX2NsYXNzZXMsIGRyb3BvdXQsICoqa3dhcmdzKQogICAgICAgIGlmICJzdG9yZWRfbW9kZWwiIGluIGt3YXJnczoKICAgICAgICAgICAgbG9hZF9zdG9yZWRfcGFyYW1zKHNlbGYsIGt3YXJnc1sic3RvcmVkX21vZGVsIl0pCiAgICAgICAgc2VsZi53b3JkX21hc2tpbmcgPSBXb3JkTWFza2luZyh0b2tlbml6ZXI9c2VsZi50b2tlbml6ZXIsICoqa3dhcmdzKQogICAgICAgIHNlbGYuZGV2aWNlPWRldmljZQoKICAgIGRlZiBtYXNrX3Rva2VucyhzZWxmLCBpbnB1dHM6IHRvcmNoLlRlbnNvcikgLT4gVHVwbGVbdG9yY2guVGVuc29yLCB0b3JjaC5UZW5zb3JdOgogICAgICAgICIiIgogICAgICAgIFByZXBhcmUgbWFza2VkIHRva2VucyBpbnB1dHMvbGFiZWxzIGZvciBtYXNrZWQgbGFuZ3VhZ2UgbW9kZWxpbmc6IDgwJSBNQVNLLCAxMCUgcmFuZG9tLCAxMCUgb3JpZ2luYWwuCiAgICAgICAgIiIiCgogICAgICAgIGlmIHNlbGYudG9rZW5pemVyLm1hc2tfdG9rZW4gaXMgTm9uZToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAgICJUaGlzIHRva2VuaXplciBkb2VzIG5vdCBoYXZlIGEgbWFzayB0b2tlbiB3aGljaCBpcyBuZWNlc3NhcnkgZm9yIG1hc2tlZCBsYW5ndWFnZSBtb2RlbGluZy4gUmVtb3ZlIHRoZSAtLW1sbSBmbGFnIGlmIHlvdSB3YW50IHRvIHVzZSB0aGlzIHRva2VuaXplci4iCiAgICAgICAgICAgICkKCiAgICAgICAgbGFiZWxzID0gaW5wdXRzLmNsb25lKCkKICAgICAgICAjIFdlIHNhbXBsZSBhIGZldyB0b2tlbnMgaW4gZWFjaCBzZXF1ZW5jZSBmb3IgbWFza2VkLUxNIHRyYWluaW5nICh3aXRoIHByb2JhYmlsaXR5IGFyZ3MubWxtX3Byb2JhYmlsaXR5IGRlZmF1bHRzIHRvIDAuMTUgaW4gQmVydC9Sb0JFUlRhKQogICAgICAgIHByb2JhYmlsaXR5X21hdHJpeCA9IHRvcmNoLmZ1bGwobGFiZWxzLnNoYXBlLCBzZWxmLm1sbV9wcm9iYWJpbGl0eSkKICAgICAgICBzcGVjaWFsX3Rva2Vuc19tYXNrID0gWwogICAgICAgICAgICBzZWxmLnRva2VuaXplci5nZXRfc3BlY2lhbF90b2tlbnNfbWFzayh2YWwsIGFscmVhZHlfaGFzX3NwZWNpYWxfdG9rZW5zPVRydWUpIGZvciB2YWwgaW4gbGFiZWxzLnRvbGlzdCgpCiAgICAgICAgXQogICAgICAgIHByb2JhYmlsaXR5X21hdHJpeC5tYXNrZWRfZmlsbF8odG9yY2gudGVuc29yKHNwZWNpYWxfdG9rZW5zX21hc2ssIGR0eXBlPXRvcmNoLmJvb2wpLCB2YWx1ZT0wLjApCiAgICAgICAgaWYgc2VsZi50b2tlbml6ZXIuX3BhZF90b2tlbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgcGFkZGluZ19tYXNrID0gbGFiZWxzLmVxKHNlbGYudG9rZW5pemVyLnBhZF90b2tlbl9pZCkKICAgICAgICAgICAgcHJvYmFiaWxpdHlfbWF0cml4Lm1hc2tlZF9maWxsXyhwYWRkaW5nX21hc2ssIHZhbHVlPTAuMCkKICAgICAgICBtYXNrZWRfaW5kaWNlcyA9IHRvcmNoLmJlcm5vdWxsaShwcm9iYWJpbGl0eV9tYXRyaXgpLmJvb2woKQogICAgICAgIGxhYmVsc1t+bWFza2VkX2luZGljZXNdID0gLTEwMCAgIyBXZSBvbmx5IGNvbXB1dGUgbG9zcyBvbiBtYXNrZWQgdG9rZW5zCgogICAgICAgICMgODAlIG9mIHRoZSB0aW1lLCB3ZSByZXBsYWNlIG1hc2tlZCBpbnB1dCB0b2tlbnMgd2l0aCB0b2tlbml6ZXIubWFza190b2tlbiAoW01BU0tdKQogICAgICAgIGluZGljZXNfcmVwbGFjZWQgPSB0b3JjaC5iZXJub3VsbGkodG9yY2guZnVsbChsYWJlbHMuc2hhcGUsIDAuOCkpLmJvb2woKSAmIG1hc2tlZF9pbmRpY2VzCiAgICAgICAgaW5wdXRzW2luZGljZXNfcmVwbGFjZWRdID0gc2VsZi50b2tlbml6ZXIuY29udmVydF90b2tlbnNfdG9faWRzKHNlbGYudG9rZW5pemVyLm1hc2tfdG9rZW4pCgogICAgICAgICMgMTAlIG9mIHRoZSB0aW1lLCB3ZSByZXBsYWNlIG1hc2tlZCBpbnB1dCB0b2tlbnMgd2l0aCByYW5kb20gd29yZAogICAgICAgIGluZGljZXNfcmFuZG9tID0gdG9yY2guYmVybm91bGxpKHRvcmNoLmZ1bGwobGFiZWxzLnNoYXBlLCAwLjUpKS5ib29sKCkgJiBtYXNrZWRfaW5kaWNlcyAmIH5pbmRpY2VzX3JlcGxhY2VkCiAgICAgICAgcmFuZG9tX3dvcmRzID0gdG9yY2gucmFuZGludChsZW4oc2VsZi50b2tlbml6ZXIpLCBsYWJlbHMuc2hhcGUsIGR0eXBlPXRvcmNoLmxvbmcpCiAgICAgICAgaW5wdXRzW2luZGljZXNfcmFuZG9tXSA9IHJhbmRvbV93b3Jkc1tpbmRpY2VzX3JhbmRvbV0KCiAgICAgICAgIyBUaGUgcmVzdCBvZiB0aGUgdGltZSAoMTAlIG9mIHRoZSB0aW1lKSB3ZSBrZWVwIHRoZSBtYXNrZWQgaW5wdXQgdG9rZW5zIHVuY2hhbmdlZAogICAgICAgIHJldHVybiBpbnB1dHMsIGxhYmVscwoKICAgIGRlZiB0b2tlbmlzZShzZWxmLCBpZHMsIHRleHRzOiBMaXN0W3N0cl0pOgogICAgICAgIHRva2VuaXplciA9IHNlbGYudG9rZW5pemVyCiAgICAgICAgbl90b2tlbnNfaW4gPSBzZWxmLm5fdG9rZW5zX2luCiAgICAgICAgaWYgc2VsZi50b2tlbl9jYWNoZSBpcyBOb25lOgogICAgICAgICAgICBjb252ZXJ0ZWRfdGV4dHMgPSB0b2tlbml6ZXIuYmF0Y2hfZW5jb2RlX3BsdXModGV4dHMsIGFkZF9zcGVjaWFsX3Rva2Vucz1UcnVlLCBwYWRfdG9fbWF4X2xlbmd0aD1UcnVlLCBtYXhfbGVuZ3RoPW5fdG9rZW5zX2luLCB0cnVuY2F0aW9uPVRydWUpCiAgICAgICAgICAgIGlucHV0X2lkcywgYXR0ZW50aW9uX21hc2sgPSBjb252ZXJ0ZWRfdGV4dHNbImlucHV0X2lkcyJdLCBjb252ZXJ0ZWRfdGV4dHNbImF0dGVudGlvbl9tYXNrIl0KICAgICAgICBlbHNlOgogICAgICAgICAgICBpbnB1dF9pZHMsIGF0dGVudGlvbl9tYXNrID0gemlwKCpbc2VsZi50b2tlbl9jYWNoZVtpZF0gZm9yIGlkIGluIGlkc10pCgogICAgICAgIGlucHV0X2lkcywgYXR0ZW50aW9uX21hc2sgPSB0b3JjaC50ZW5zb3IoaW5wdXRfaWRzKSwgdG9yY2gudGVuc29yKGF0dGVudGlvbl9tYXNrKQogICAgICAgIGlmIHNlbGYudHJhaW5pbmcgb3Igc2VsZi5mb3JjZV9tYXNraW5nOgogICAgICAgICAgICBpbnB1dF9pZHMsIF8gPSBzZWxmLm1hc2tfdG9rZW5zKGlucHV0X2lkcykKICAgICAgICByZXR1cm4gaW5wdXRfaWRzLnRvKHNlbGYuZGV2aWNlKSwgYXR0ZW50aW9uX21hc2sudG8oc2VsZi5kZXZpY2UpCgoKICAgIGRlZiBnZXRfd29yZF92ZWN0b3JzKHNlbGYsIGlucHV0X2lkcywgYXR0ZW50aW9uX21hc2spOgogICAgICAgIG91dHB1dHMgPSBzZWxmLm1vZGVsKGlucHV0X2lkcywgYXR0ZW50aW9uX21hc2s9YXR0ZW50aW9uX21hc2spCiAgICAgICAgbGFzdF9oaWRkZW5fc3RhdGVzID0gb3V0cHV0c1swXQogICAgICAgIHJldHVybiBsYXN0X2hpZGRlbl9zdGF0ZXMKCjx8ZmltX2hvbGV8PgogICAgICAgIGxvZ2l0cyA9IHRvcmNoLnNvZnRtYXgobG9naXRzLCBkaW09MSkKICAgICAgICBwcmVkaWN0ZWRfbGFiZWxzID0gbG9naXRzLm1heChkaW09MSkuaW5kaWNlcwogICAgICAgIHJldHVybiBsb2dpdHMsIHByZWRpY3RlZF9sYWJlbHMsIGxhYmVscywgbG9zcwo8fGZpbV9zdWZmaXh8PgogICAgZGVmIGZvcndhcmQoc2VsZiwgaW5wdXRfaWRzLCBhdHRlbnRpb25fbWFzaywgbGFiZWxzPU5vbmUpOgogICAgICAgIHZlY3RvcnMgPSBzZWxmLmdldF93b3JkX3ZlY3RvcnMoaW5wdXRfaWRzLCBhdHRlbnRpb25fbWFzaykKICAgICAgICB2ZWN0b3JzID0gc2VsZi5mZWF0dXJpemVyKHZlY3RvcnMpCiAgICAgICAgbG9naXRzLCBsb3NzID0gc2VsZi5maW5hbF9sYXllcih2ZWN0b3JzLCBsYWJlbHMpIGlmIHNlbGYuZmluYWxfbGF5ZXIgaXMgbm90IE5vbmUgZWxzZSAoTm9uZSwgTm9uZSkKPHxmaW1fZW5kfD4="]
["0855dc4cd606d5f03fc9a457d4598802eb2fd1ce-2","0855dc4cd606d5f03fc9a457d4598802eb2fd1ce","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGFiYwpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCwgVHVwbGUsIERpY3QsIFNldCwgVW5pb24KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0b3JjaC5ubiBhcyBubgppbXBvcnQgdG9yY2gKaW1wb3J0IHRvcmNoLm5uLmZ1bmN0aW9uYWwgYXMgRgpmcm9tIC4uY2xhc3NpZmllcnMgaW1wb3J0IENOTjFERmVhdHVyaXplciwgR1JVRmVhdHVyaXplciwgQmFzaWNGZWF0dXJpemVyLCBUcmFuc2Zvcm1lckZlYXR1cml6ZXIKZnJvbSAuRmFzdHRleHQxRENOTiBpbXBvcnQgRmFzdHRleHQxRENOTk1vZGVsCmZyb20gdHJhbnNmb3JtZXJzIGltcG9ydCBBdXRvTW9kZWxXaXRoTE1IZWFkLCBBdXRvVG9rZW5pemVyLCBBdXRvTW9kZWwsIERpc3RpbEJlcnRUb2tlbml6ZXIsIExvbmdmb3JtZXJUb2tlbml6ZXIKZnJvbSB0cmFuc2Zvcm1lcnMgaW1wb3J0IEFsYmVydE1vZGVsLCBBbGJlcnRUb2tlbml6ZXIsIEFsYmVydEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24sIERpc3RpbEJlcnRNb2RlbCwgTG9uZ2Zvcm1lck1vZGVsCmltcG9ydCB0b3JjaHZpc2lvbi5tb2RlbHMgYXMgbW9kZWxzCmZyb20gdG9yY2hubHAud29yZF90b192ZWN0b3IgaW1wb3J0IENoYXJOR3JhbQpmcm9tIHRvcmNobmxwLndvcmRfdG9fdmVjdG9yIGltcG9ydCBCUEVtYgpmcm9tIC4uLnV0aWxzIGltcG9ydCBnZXRfZGV2aWNlLCBHYXVzc2lhbk5vaXNlLCByYW5kb21fd29yZF9tYXNrLCBsb2FkX3N0b3JlZF9wYXJhbXMsIEV4cGFuZENvbnRyYWN0LCBUcmFuc2Zvcm1lciwgUG9zaXRpb25hbEVuY29kaW5nLCBMYW1iZGFMYXllciwgZ2V0X2dsb2JhbCwgXAogICAgZ2V0X3JlZ3VsYXJpemF0aW9uX2xheWVycywgV29yZE1hc2tpbmcKZnJvbSAuLi50cmFpbmluZyBpbXBvcnQgZmJfMWRfbG9zc19idWlsZGVyCmltcG9ydCBvcwppbXBvcnQgcmFuZG9tCmltcG9ydCBtYXRoCgoKY2xhc3MgQkVSVENsYXNzaWZpZXIobm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbGFzc2lmaWVyX2RpbXMsIG51bV9jbGFzc2VzLAogICAgICAgICAgICAgICAgIGdhdXNzaWFuX25vaXNlLCBkcm9wb3V0LAogICAgICAgICAgICAgICAgIGludGVybmFsX2RpbXMsIG5fbGF5ZXJzLAogICAgICAgICAgICAgICAgIGRldmljZSwKICAgICAgICAgICAgICAgICBuX3Rva2Vuc19pbj02NCwgbl90b2tlbnNfb3V0PTE2LAogICAgICAgICAgICAgICAgICoqa3dhcmdzKToKICAgICAgICBlbWJlZGRpbmdfZGltcyA9IDc2OAogICAgICAgIHN1cGVyKEJFUlRDbGFzc2lmaWVyLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi53b3JkX21hc2tpbmdfcHJvYmEgPSBrd2FyZ3NbIndvcmRfbWFza2luZ19wcm9iYSJdIGlmICJ3b3JkX21hc2tpbmdfcHJvYmEiIGluIGt3YXJncyBlbHNlIDAuMAogICAgICAgIHNlbGYubWxtX3Byb2JhYmlsaXR5ID0gc2VsZi53b3JkX21hc2tpbmdfcHJvYmEKICAgICAgICBzZWxmLm5fdG9rZW5zX2luID0gbl90b2tlbnNfaW4KICAgICAgICBzZWxmLnRva2VuX2NhY2hlID0ga3dhcmdzLnBvcCgidG9rZW5fY2FjaGUiLCBOb25lKQogICAgICAgIHNlbGYuZm9yY2VfbWFza2luZyA9IEZhbHNlCgogICAgICAgIG1vZGVsID0ga3dhcmdzWyJtb2RlbCJdIGlmICJtb2RlbCIgaW4ga3dhcmdzIGVsc2UgJ2FsYmVydC1iYXNlLXYyJwogICAgICAgIGdsb2JhbF9kaXIgPSBnZXRfZ2xvYmFsKCJtb2RlbHNfZGlyIikKICAgICAgICBtb2RlbCA9IG9zLnBhdGguam9pbihnbG9iYWxfZGlyLCBtb2RlbCkgaWYgbW9kZWwgaW4gb3MubGlzdGRpcihnbG9iYWxfZGlyKSBlbHNlIG1vZGVsCiAgICAgICAgc2VsZi50b2tlbml6ZXIgPSBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChtb2RlbCkKICAgICAgICBzZWxmLm1vZGVsID0gQXV0b01vZGVsLmZyb21fcHJldHJhaW5lZChtb2RlbCkKICAgICAgICBwcmludCgiUGljayBzdG9yZWQgTW9kZWwiLCBtb2RlbCwgIk1vZGVsIENsYXNzID0gIiwgdHlwZShzZWxmLm1vZGVsKSwgIlRva2VuaXplciBDbGFzcyA9ICIsIHR5cGUoc2VsZi50b2tlbml6ZXIpKQoKICAgICAgICBzZWxmLmF0dGVudGlvbl9kcm9wX3Byb2JhID0ga3dhcmdzWyJhdHRlbnRpb25fZHJvcF9wcm9iYSJdIGlmICJhdHRlbnRpb25fZHJvcF9wcm9iYSIgaW4ga3dhcmdzIGVsc2UgMC4wCiAgICAgICAgbl9lbmNvZGVycyA9IGt3YXJncy5wb3AoIm5fZW5jb2RlcnMiLCBuX2xheWVycykKICAgICAgICBuX2RlY29kZXJzID0ga3dhcmdzLnBvcCgibl9kZWNvZGVycyIsIG5fbGF5ZXJzKQogICAgICAgIHNlbGYuZmVhdHVyaXplciA9IFRyYW5zZm9ybWVyRmVhdHVyaXplcihuX3Rva2Vuc19pbiwgZW1iZWRkaW5nX2RpbXMsIG5fdG9rZW5zX291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZmllcl9kaW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbF9kaW1zLCBuX2VuY29kZXJzLCBuX2RlY29kZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYXVzc2lhbl9ub2lzZSwgZHJvcG91dCwgc2VsZi5hdHRlbnRpb25fZHJvcF9wcm9iYSkKCiAgICAgICAgc2VsZi5maW5hbF9sYXllciA9IGZiXzFkX2xvc3NfYnVpbGRlcihjbGFzc2lmaWVyX2RpbXMsIG5fdG9rZW5zX291dCwgbnVtX2NsYXNzZXMsIGRyb3BvdXQsICoqa3dhcmdzKQogICAgICAgIGlmICJzdG9yZWRfbW9kZWwiIGluIGt3YXJnczoKICAgICAgICAgICAgbG9hZF9zdG9yZWRfcGFyYW1zKHNlbGYsIGt3YXJnc1sic3RvcmVkX21vZGVsIl0pCiAgICAgICAgc2VsZi53b3JkX21hc2tpbmcgPSBXb3JkTWFza2luZyh0b2tlbml6ZXI9c2VsZi50b2tlbml6ZXIsICoqa3dhcmdzKQogICAgICAgIHNlbGYuZGV2aWNlPWRldmljZQoKICAgIGRlZiBtYXNrX3Rva2VucyhzZWxmLCBpbnB1dHM6IHRvcmNoLlRlbnNvcikgLT4gVHVwbGVbdG9yY2guVGVuc29yLCB0b3JjaC5UZW5zb3JdOgogICAgICAgICIiIgogICAgICAgIFByZXBhcmUgbWFza2VkIHRva2VucyBpbnB1dHMvbGFiZWxzIGZvciBtYXNrZWQgbGFuZ3VhZ2UgbW9kZWxpbmc6IDgwJSBNQVNLLCAxMCUgcmFuZG9tLCAxMCUgb3JpZ2luYWwuCiAgICAgICAgIiIiCgogICAgICAgIGlmIHNlbGYudG9rZW5pemVyLm1hc2tfdG9rZW4gaXMgTm9uZToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAgICJUaGlzIHRva2VuaXplciBkb2VzIG5vdCBoYXZlIGEgbWFzayB0b2tlbiB3aGljaCBpcyBuZWNlc3NhcnkgZm9yIG1hc2tlZCBsYW5ndWFnZSBtb2RlbGluZy4gUmVtb3ZlIHRoZSAtLW1sbSBmbGFnIGlmIHlvdSB3YW50IHRvIHVzZSB0aGlzIHRva2VuaXplci4iCiAgICAgICAgICAgICkKCiAgICAgICAgbGFiZWxzID0gaW5wdXRzLmNsb25lKCkKICAgICAgICAjIFdlIHNhbXBsZSBhIGZldyB0b2tlbnMgaW4gZWFjaCBzZXF1ZW5jZSBmb3IgbWFza2VkLUxNIHRyYWluaW5nICh3aXRoIHByb2JhYmlsaXR5IGFyZ3MubWxtX3Byb2JhYmlsaXR5IGRlZmF1bHRzIHRvIDAuMTUgaW4gQmVydC9Sb0JFUlRhKQogICAgICAgIHByb2JhYmlsaXR5X21hdHJpeCA9IHRvcmNoLmZ1bGwobGFiZWxzLnNoYXBlLCBzZWxmLm1sbV9wcm9iYWJpbGl0eSkKICAgICAgICBzcGVjaWFsX3Rva2Vuc19tYXNrID0gWwogICAgICAgICAgICBzZWxmLnRva2VuaXplci5nZXRfc3BlY2lhbF90b2tlbnNfbWFzayh2YWwsIGFscmVhZHlfaGFzX3NwZWNpYWxfdG9rZW5zPVRydWUpIGZvciB2YWwgaW4gbGFiZWxzLnRvbGlzdCgpCiAgICAgICAgXQogICAgICAgIHByb2JhYmlsaXR5X21hdHJpeC5tYXNrZWRfZmlsbF8odG9yY2gudGVuc29yKHNwZWNpYWxfdG9rZW5zX21hc2ssIGR0eXBlPXRvcmNoLmJvb2wpLCB2YWx1ZT0wLjApCiAgICAgICAgaWYgc2VsZi50b2tlbml6ZXIuX3BhZF90b2tlbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgcGFkZGluZ19tYXNrID0gbGFiZWxzLmVxKHNlbGYudG9rZW5pemVyLnBhZF90b2tlbl9pZCkKICAgICAgICAgICAgcHJvYmFiaWxpdHlfbWF0cml4Lm1hc2tlZF9maWxsXyhwYWRkaW5nX21hc2ssIHZhbHVlPTAuMCkKICAgICAgICBtYXNrZWRfaW5kaWNlcyA9IHRvcmNoLmJlcm5vdWxsaShwcm9iYWJpbGl0eV9tYXRyaXgpLmJvb2woKQogICAgICAgIGxhYmVsc1t+bWFza2VkX2luZGljZXNdID0gLTEwMCAgIyBXZSBvbmx5IGNvbXB1dGUgbG9zcyBvbiBtYXNrZWQgdG9rZW5zCgogICAgICAgICMgODAlIG9mIHRoZSB0aW1lLCB3ZSByZXBsYWNlIG1hc2tlZCBpbnB1dCB0b2tlbnMgd2l0aCB0b2tlbml6ZXIubWFza190b2tlbiAoW01BU0tdKQogICAgICAgIGluZGljZXNfcmVwbGFjZWQgPSB0b3JjaC5iZXJub3VsbGkodG9yY2guZnVsbChsYWJlbHMuc2hhcGUsIDAuOCkpLmJvb2woKSAmIG1hc2tlZF9pbmRpY2VzCiAgICAgICAgaW5wdXRzW2luZGljZXNfcmVwbGFjZWRdID0gc2VsZi50b2tlbml6ZXIuY29udmVydF90b2tlbnNfdG9faWRzKHNlbGYudG9rZW5pemVyLm1hc2tfdG9rZW4pCgogICAgICAgICMgMTAlIG9mIHRoZSB0aW1lLCB3ZSByZXBsYWNlIG1hc2tlZCBpbnB1dCB0b2tlbnMgd2l0aCByYW5kb20gd29yZAogICAgICAgIGluZGljZXNfcmFuZG9tID0gdG9yY2guYmVybm91bGxpKHRvcmNoLmZ1bGwobGFiZWxzLnNoYXBlLCAwLjUpKS5ib29sKCkgJiBtYXNrZWRfaW5kaWNlcyAmIH5pbmRpY2VzX3JlcGxhY2VkCiAgICAgICAgcmFuZG9tX3dvcmRzID0gdG9yY2gucmFuZGludChsZW4oc2VsZi50b2tlbml6ZXIpLCBsYWJlbHMuc2hhcGUsIGR0eXBlPXRvcmNoLmxvbmcpCiAgICAgICAgaW5wdXRzW2luZGljZXNfcmFuZG9tXSA9IHJhbmRvbV93b3Jkc1tpbmRpY2VzX3JhbmRvbV0KCiAgICAgICAgIyBUaGUgcmVzdCBvZiB0aGUgdGltZSAoMTAlIG9mIHRoZSB0aW1lKSB3ZSBrZWVwIHRoZSBtYXNrZWQgaW5wdXQgdG9rZW5zIHVuY2hhbmdlZAogICAgICAgIHJldHVybiBpbnB1dHMsIGxhYmVscwoKICAgIGRlZiB0b2tlbmlzZShzZWxmLCBpZHMsIHRleHRzOiBMaXN0W3N0cl0pOgogICAgICAgIHRva2VuaXplciA9IHNlbGYudG9rZW5pemVyCiAgICAgICAgbl90b2tlbnNfaW4gPSBzZWxmLm5fdG9rZW5zX2luCiAgICAgICAgaWYgc2VsZi50b2tlbl9jYWNoZSBpcyBOb25lOgogICAgICAgICAgICBjb252ZXJ0ZWRfdGV4dHMgPSB0b2tlbml6ZXIuYmF0Y2hfZW5jb2RlX3BsdXModGV4dHMsIGFkZF9zcGVjaWFsX3Rva2Vucz1UcnVlLCBwYWRfdG9fbWF4X2xlbmd0aD1UcnVlLCBtYXhfbGVuZ3RoPW5fdG9rZW5zX2luLCB0cnVuY2F0aW9uPVRydWUpCiAgICAgICAgICAgIGlucHV0X2lkcywgYXR0ZW50aW9uX21hc2sgPSBjb252ZXJ0ZWRfdGV4dHNbImlucHV0X2lkcyJdLCBjb252ZXJ0ZWRfdGV4dHNbImF0dGVudGlvbl9tYXNrIl0KICAgICAgICBlbHNlOgogICAgICAgICAgICBpbnB1dF9pZHMsIGF0dGVudGlvbl9tYXNrID0gemlwKCpbc2VsZi50b2tlbl9jYWNoZVtpZF0gZm9yIGlkIGluIGlkc10pCgogICAgICAgIGlucHV0X2lkcywgYXR0ZW50aW9uX21hc2sgPSB0b3JjaC50ZW5zb3IoaW5wdXRfaWRzKSwgdG9yY2gudGVuc29yKGF0dGVudGlvbl9tYXNrKQogICAgICAgIGlmIHNlbGYudHJhaW5pbmcgb3Igc2VsZi5mb3JjZV9tYXNraW5nOgogICAgICAgICAgICBpbnB1dF9pZHMsIF8gPSBzZWxmLm1hc2tfdG9rZW5zKGlucHV0X2lkcykKICAgICAgICByZXR1cm4gaW5wdXRfaWRzLnRvKHNlbGYuZGV2aWNlKSwgYXR0ZW50aW9uX21hc2sudG8oc2VsZi5kZXZpY2UpCgoKICAgIGRlZiBnZXRfd29yZF92ZWN0b3JzKHNlbGYsIGlucHV0X2lkcywgYXR0ZW50aW9uX21hc2spOgogICAgICAgIG91dHB1dHMgPSBzZWxmLm1vZGVsKGlucHV0X2lkcywgYXR0ZW50aW9uX21hc2s9YXR0ZW50aW9uX21hc2spCiAgICAgICAgbGFzdF9oaWRkZW5fc3RhdGVzID0gb3V0cHV0c1swXQogICAgICAgIHJldHVybiBsYXN0X2hpZGRlbl9zdGF0ZXMKCiAgICBkZWYgZm9yd2FyZChzZWxmLCBpbnB1dF9pZHMsIGF0dGVudGlvbl9tYXNrLCBsYWJlbHM9Tm9uZSk6CiAgICAgICAgdmVjdG9ycyA9IHNlbGYuZ2V0X3dvcmRfdmVjdG9ycyhpbnB1dF9pZHMsIGF0dGVudGlvbl9tYXNrKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgdmVjdG9ycyA9IHNlbGYuZmVhdHVyaXplcih2ZWN0b3JzKQogICAgICAgIGxvZ2l0cywgbG9zcyA9IHNlbGYuZmluYWxfbGF5ZXIodmVjdG9ycywgbGFiZWxzKSBpZiBzZWxmLmZpbmFsX2xheWVyIGlzIG5vdCBOb25lIGVsc2UgKE5vbmUsIE5vbmUpCiAgICAgICAgbG9naXRzID0gdG9yY2guc29mdG1heChsb2dpdHMsIGRpbT0xKQogICAgICAgIHByZWRpY3RlZF9sYWJlbHMgPSBsb2dpdHMubWF4KGRpbT0xKS5pbmRpY2VzCjx8ZmltX2VuZHw+"]
["f88c645379177fa87ef05e2eec9b2f11bed90485-1","f88c645379177fa87ef05e2eec9b2f11bed90485","PHxmaW1fcHJlZml4fD4KJycnCkZ1bmN0aW9ucyB0byB0ZXN0IGRpZmZlcmVudCBhc3BlY3RzIG9mIHRoZSBkaXNwbGF5LgpOb3QgY3VycmVudGx5IHVzaW5nIHVuaXR0ZXN0IGJlY2F1c2UgdGVzdCByZXN1bHRzIGludm9sdmUgZGlzcGxheWluZyBpbWFnZXMuCicnJwppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgcHltZGwuZGlzcGxheQoKCmRlZiB0ZXN0X2Rpc3BsYXlEYXRhKHNuYW1lLGRhdGEpOgogICAgJycnCiAgICBUZXN0IGRpc3BsYXlEYXRhIHdpdGggaGFyZGNvZGVkIGRhdGEKICAgICcnJwogICAgbWVhc3VyZW1lbnRzID0gWydUJywnUkgnLCdCUCddCiAgICB1bml0cyA9IHsnVCc6J0MnLCdSSCc6JyUnLCdCUCc6J21iJ30KCiAgICBpbWcgPSBweW1kbC5kaXNwbGF5LmRpc3BsYXlEYXRhKAogICAgICAgIHNuYW1lLAogICAgICAgIGRhdGFbJ2R0J10sCiAgICAgICAgbWVhc3VyZW1lbnRzLAogICAgICAgIGRhdGEsCiAgICAgICAgdW5pdHMpCgogICAgI0Rpc3BsYXkgaW1hZ2UKICAgIG5waW1nID0gbnAuYXNhcnJheShpbWcpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHBsdC5pbXNob3cobnBpbWcsY21hcD0nZ3JheScpCiAgICBwbHQuc2hvdygpCgo8fGZpbV9lbmR8Pg=="]
["f88c645379177fa87ef05e2eec9b2f11bed90485-2","f88c645379177fa87ef05e2eec9b2f11bed90485","PHxmaW1fcHJlZml4fD4KJycnCkZ1bmN0aW9ucyB0byB0ZXN0IGRpZmZlcmVudCBhc3BlY3RzIG9mIHRoZSBkaXNwbGF5LgpOb3QgY3VycmVudGx5IHVzaW5nIHVuaXR0ZXN0IGJlY2F1c2UgdGVzdCByZXN1bHRzIGludm9sdmUgZGlzcGxheWluZyBpbWFnZXMuCicnJwppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgcHltZGwuZGlzcGxheQoKCmRlZiB0ZXN0X2Rpc3BsYXlEYXRhKHNuYW1lLGRhdGEpOgogICAgJycnCiAgICBUZXN0IGRpc3BsYXlEYXRhIHdpdGggaGFyZGNvZGVkIGRhdGEKICAgICcnJwogICAgbWVhc3VyZW1lbnRzID0gWydUJywnUkgnLCdCUCddCiAgICB1bml0cyA9IHsnVCc6J0MnLCdSSCc6JyUnLCdCUCc6J21iJ30KCiAgICBpbWcgPSBweW1kbC5kaXNwbGF5LmRpc3BsYXlEYXRhKAogICAgICAgIHNuYW1lLAogICAgICAgIGRhdGFbJ2R0J10sCiAgICAgICAgbWVhc3VyZW1lbnRzLAogICAgICAgIGRhdGEsCiAgICAgICAgdW5pdHMpCgogICAgI0Rpc3BsYXkgaW1hZ2UKICAgIG5waW1nID0gbnAuYXNhcnJheShpbWcpCiAgICBwbHQuaW1zaG93KG5waW1nLGNtYXA9J2dyYXknKQogICAgcGx0LnNob3coKQoKZGVmIHRlc3RfZ2V0ZGF0YSgpOgogICAgJycnCiAgICBUZXN0IGdldGRhdGEKICAgIERhdGFiZWFyIG11c3QgYmUgcnVubmluZwo8fGZpbV9ob2xlfD4KaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHRlc3RkYXRhID0gdGVzdF9nZXRkYXRhKCkKICAgIHRlc3RfZGlzcGxheURhdGEoJ3RwaDEnLHRlc3RkYXRhKQogICAgICAgIAogICAgCjx8ZmltX3N1ZmZpeHw+CiAgICAnJycKICAgIGRhdGEgPSBweW1kbC5kaXNwbGF5LmdldGRhdGEoJ3RwaDEnKQogICAgcmV0dXJuIGRhdGEKCjx8ZmltX2VuZHw+"]
["39cf4b646395a17c5c2ebf6fccb633077b5617e4-1","39cf4b646395a17c5c2ebf6fccb633077b5617e4","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCjx8ZmltX2hvbGV8PgpAdGFzawpkZWYgY2xlYW4oY3R4KToKICAgICIiIiIiIgogICAgd2l0aCBjdHguY2Qob3MucGF0aC5qb2luKFJPT1RfRElSKSk6CiAgICAgICAgY3R4LnJ1bigibWFrZSBjbGVhbiIpCgpAdGFzawpkZWYgYnVpbGQoY3R4KToKICAgICIiIiIiIgogICAgd2l0aCBjdHguY2Qob3MucGF0aC5qb2luKFJPT1RfRElSKSk6CiAgICAgICAgY3R4LnJ1bigibWFrZSIpCgpAdGFzayhjbGVhbikKZGVmIHJlYnVpbGQoY3R4KToKICAgICIiIiIiIgogICAgd2l0aCBjdHguY2Qob3MucGF0aC5qb2luKFJPT1RfRElSKSk6CiAgICAgICAgY3R4LnJ1bigibWFrZSIpCgoKQHRhc2sKZGVmIGluc3RhbGwoY3R4KToKICAgICIiIiIiIgogICAgd2l0aCBjdHguY2Qob3MucGF0aC5qb2luKFJPT1RfRElSKSk6CiAgICAgICAgY3R4LnJ1bigibWFrZSBpbnN0YWxsIikKCkB0YXNrCmRlZiByZWFkZWxmKGN0eCk6CiAgICAiIiIiIiIKICAgIHdpdGggY3R4LmNkKG9zLnBhdGguam9pbihST09UX0RJUiwidGVzdGluZyIpKToKICAgICAgICBjdHgucnVuKCJyZWFkZWxmIC1hIHRlc3QuZWxmIikKPHxmaW1fc3VmZml4fD4KZnJvbSBpbnZva2UgaW1wb3J0IENvbGxlY3Rpb24sIHRhc2sKClJPT1RfRElSID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQoKPHxmaW1fZW5kfD4="]
["08329b45d77267b913a54dc5d35a8e0679ff2827-1","08329b45d77267b913a54dc5d35a8e0679ff2827","PHxmaW1fcHJlZml4fD4KCgpmcm9tIGZubWF0Y2ggaW1wb3J0IGZubWF0Y2gKaW1wb3J0IG9zCgppbXBvcnQgbnVtcHkgYXMgbnAKCiMgQ09TTU9BUlQgc3BlY2lhdGlvbiBmdW5jdGlvbiBzdGFydHMKIyBjYWxjdWxhdGUgdGhlIGZyYWN0aW9uIG9mIHNpbmdsZSB0cmFjZXIgb3V0IG9mIGludmVudG9yeSBzcGVjaWVzICAgIAoKIyBpbnB1dCBmaWxlcwpEQVRBX1BBVEggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJywgJy4uJywgJ2ZpbGVzJywKICAgICAgICAgICAgICAgICAgICAgICAgICdzcGVjaWF0aW9uJykKCnBtMjVjb21wb3NpdGlvbl9kaXIgPSBvcy5wYXRoLmpvaW4oREFUQV9QQVRILCAncG0yNWNvbXBvc2l0aW9uLmNzdicpCnRub192b2NfZGlyPSBvcy5wYXRoLmpvaW4oREFUQV9QQVRILCAndG5vX3ZvYy5jc3YnKQoKCiMgbWFzcyBmcmFjdGlvbnMgb2YgTk8yIGFuZCBOTyBpbiBOT1guCk5PWF9UT19OTzIgPSAwLjE4Ck5PWF9UT19OTyA9ICgxLjAgLSBOT1hfVE9fTk8yKSAvIDQ2LjAgKiAzMC4wCgojIHJhdGlvcwpqX3JhdGlvID0gMC45CgoKY2xhc3MgV2lsZGNhcmRzRGljdChkaWN0KToKICAgICIiIgogICAgRGljdCB3aXRoIGdldF93aWxkY2FyZCBtZXRob2QgdG8gbWF0Y2gga2V5cyB3aXRoIFVuaXggc2hlbGwtc3R5bGUKICAgIHdpbGRjYXJkcyB1c2luZyBgZm5tYXRjaGAgbW9kdWxlLgogICAgIiIiCiAgICBkZWYgZ2V0X3dpbGRjYXJkKHNlbGYsIHBhdHRlcm4sIGRlZmF1bHQ9Tm9uZSk6CiAgICAgICAgIiIiCiAgICAgICAgUmV0dXJuIHRoZSB2YWx1ZSBmb3Iga2V5IG1hdGNoaW5nIHBhdHRlcm4gb3IgZWxzZSBkZWZhdWx0LgogICAgICAgICIiIgogICAgICAgIGZvciBrZXkgaW4gc29ydGVkKHNlbGYpOgogICAgICAgICAgICBpZiBmbm1hdGNoKHBhdHRlcm4sIGtleSk6CiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZltrZXldCiAgICAgICAgcmV0dXJuIGRlZmF1bHQKCgpkZWYgcG0yYWVyb3NvbChqX3JhdGlvLCBwbTI1Y29tcG9zaXRpb25fZGlyKToKICAgICIiIiBDYWxjdWxhdGUgc2luZ2xlIGFlcm9zb2wgZW1pc3Npb24gZnJvbSBwbTI1IGFuZCBwbTEwCgogICAgICAgIGlucHV0OiAgal9yYXRpbzogZnJhY3Rpb24gb2YgaiBtb2RlIG9mIHRvdGFsIGFlcm9zb2wgZW1pc3Npb24KICAgICAgICAgICAgICAgIHBtMjVjb21wb3NpdGlvbl9kaXI6IGEgbWFwIG9mIGZhY3RvcnMgdGhhdCBhc3NpZ24gcG0yNSB0byBzcGVjaWZpYyBhZXJvc29sCiAgICAgICAgb3V0cHV0OiBmb3IgYSBzaW5nbGUgdHJhY2VyLCBmcmFjdGlvbiBwZXIgZWFjaCBzb3VyY2Ugb3V0IG9mIHBtMjUKICAgICIiIgoKIyAgICBhbnRoYSA9IHBtMTAgLSBwbTI1ICAjIGNoZWNrIGlmIDwwCgogICAgI2Fzc2lnbiBwbTI1IHRvIHNvNCwgb3JncGEsIHNvb3QsIHAyNWEKICAgIHBtMjVjb21wb3NpdGlvbiA9IG5wLmxvYWR0eHQocG0yNWNvbXBvc2l0aW9uX2RpciwgZGVsaW1pdGVyPScsJywgc2tpcHJvd3M9MSwgdXNlY29scz1yYW5nZSgxLDYpKSAgICAKCiAgICBzbzQgPSBwbTI1Y29tcG9zaXRpb25bOiwwXQogICAgb3JncGEgPSBwbTI1Y29tcG9zaXRpb25bOiwxXQogICAgc29vdCA9IHBtMjVjb21wb3NpdGlvbls6LDJdCgogICAgcDI1YSA9IDEgLSBzbzQgLSBvcmdwYSAtIHNvb3QKCiAgICAjIGFzc2lnbiB0byBpLGogbW9kZQogICAgc280aiA9IHNvNCAqIGpfcmF0aW8KICAgIHNvNGkgPSBzbzQgKiAoMS1qX3JhdGlvKQogICAgb3JncGFqID0gb3JncGEgKiBqX3JhdGlvCiAgICBvcmdwYWkgPSBvcmdwYSAqICgxLWpfcmF0aW8pCiAgICBwMjVhaiA9IHAyNWEgKiBqX3JhdGlvCiAgICBwMjVhaSA9IHAyNWEgKiAoMS1qX3JhdGlvKQoKICAgIHJldHVybiBzb290LCBzbzRpLCBzbzRqLCBvcmdwYWksIG9yZ3BhaiwgcDI1YWksIHAyNWFqCgoKZGVmIG5tdm9jMmdhcyh0bm9fdm9jX2Rpcik6CiAgICBvdXQgPSBucC5sb2FkdHh0KHRub192b2NfZGlyLCBkZWxpbWl0ZXI9JywnLCB1bnBhY2s9VHJ1ZSwgc2tpcHJvd3M9MSwKICAgICAgICAgICAgICAgICAgICAgdXNlY29scz1ucC5hcmFuZ2UoMTQpKzEpCiAgICByZXR1cm4gb3V0CgoKCgoKZGVmIGNyZWF0ZV9tYXBwaW5nKG5vbWVuY2xhdHVyZT0nR05GUicpOgoKICAgIGlmIG5vbWVuY2xhdHVyZSAhPSAnR05GUic6CiAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignT25seSBHTkZSIHN1cHBvcnRlZCBmb3Igbm9tZW5jbGF0dXJlLicpCgogICAgc3BlID0ge30KCiAgICAjIG5pdHJvZ2VuIG94aWRlcwogICAgc3BlWydOT2UnXSA9IHsnTk9YXyonOiBOT1hfVE9fTk99CiAgICBzcGVbJ05PMmUnXSA9IHsnTk9YXyonOiBOT1hfVE9fTk8yfQoKICAgICMgTk1WT0MgY2F0ZWdvcmllcyAod2l0aG91dCBLKQogICAgb3V0ID0gbm12b2MyZ2FzKHRub192b2NfZGlyKQogICAgY2F0cyA9IFsnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YxJywgJ0YyJywgJ0YzJywgJ0Y0JywKICAgICAgICAgICAgJ0cnLCAnSCcsICdJJywgJ0onLCAnTCddCgogICAgc3BlWydBTERlJ10gPSBkaWN0KCgnTk1WT0NfJXMqJyAlIGMsIG91dFswLGldKSBmb3IgaSxjIGluIGVudW1lcmF0ZShjYXRzKSkKICAgIHNwZVsnSENIT2UnXSA9IGRpY3QoKCdOTVZPQ18lcyonICUgYywgb3V0WzEsaV0pIGZvciBpLGMgaW4gZW51bWVyYXRlKGNhdHMpKQogICAgc3BlWydPUkEyZSddID0gZGljdCgoJ05NVk9DXyVzKicgJSBjLCBvdXRbMixpXSkgZm9yIGksYyBpbiBlbnVtZXJhdGUoY2F0cykpCiAgICBzcGVbJ0hDM2UnXSA9IGRpY3QoKCdOTVZPQ18lcyonICUgYywgb3V0WzMsaV0pIGZvciBpLGMgaW4gZW51bWVyYXRlKGNhdHMpKQogICAgc3BlWydIQzVlJ10gPSBkaWN0KCgnTk1WT0NfJXMqJyAlIGMsIG91dFs0LGldKSBmb3IgaSxjIGluIGVudW1lcmF0ZShjYXRzKSkKICAgIHNwZVsnSEM4ZSddID0gZGljdCgoJ05NVk9DXyVzKicgJSBjLCBvdXRbNSxpXSkgZm9yIGksYyBpbiBlbnVtZXJhdGUoY2F0cykpCiAgICBzcGVbJ0VUSGUnXSA9IGRpY3QoKCdOTVZPQ18lcyonICUgYywgb3V0WzYsaV0pIGZvciBpLGMgaW4gZW51bWVyYXRlKGNhdHMpKQogICAgc3BlWydPTDJlJ10gPSBkaWN0KCgnTk1WT0NfJXMqJyAlIGMsIG91dFs3LGldKSBmb3IgaSxjIGluIGVudW1lcmF0ZShjYXRzKSkKICAgIHNwZVsnT0xUZSddID0gZGljdCgoJ05NVk9DXyVzKicgJSBjLCBvdXRbOCxpXSkgZm9yIGksYyBpbiBlbnVtZXJhdGUoY2F0cykpCiAgICBzcGVbJ09MSWUnXSA9IGRpY3QoKCdOTVZPQ18lcyonICUgYywgb3V0WzksaV0pIGZvciBpLGMgaW4gZW51bWVyYXRlKGNhdHMpKQogICAgc3BlWydUT0xlJ10gPSBkaWN0KCgnTk1WT0NfJXMqJyAlIGMsIG91dFsxMCxpXSkgZm9yIGksYyBpbiBlbnVtZXJhdGUoY2F0cykpCiAgICBzcGVbJ1hZTGUnXSA9IGRpY3QoKCdOTVZPQ18lcyonICUgYywgb3V0WzExLGldKSBmb3IgaSxjIGluIGVudW1lcmF0ZShjYXRzKSkKICAgIHNwZVsnS0VUZSddID0gZGljdCgoJ05NVk9DXyVzKicgJSBjLCBvdXRbMTIsaV0pIGZvciBpLGMgaW4gZW51bWVyYXRlKGNhdHMpKQogICAgc3BlWydDU0xlJ10gPSBkaWN0KCgnTk1WT0NfJXMqJyAlIGMsIG91dFsxMyxpXSkgZm9yIGksYyBpbiBlbnVtZXJhdGUoY2F0cykpCgoKICAgICMgYWVyb3NvbHMKICAgIHNvb3QsIHNvNGksIHNvNGosIG9yZ3BhaSwgb3JncGFqLCBwMjVhaSwgcDI1YWogPSBwbTJhZXJvc29sKGpfcmF0aW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbTI1Y29tcG9zaXRpb25fZGlyKQogICAgIyBTTzIgY2F0ZWdvcmllcwogICAgY2F0cyA9IFsnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YxJywgJ0YyJywgJ0YzJywgJ0Y0JywKICAgICAgICAgICAgJ0cnLCAnSCcsICdJJywgJ0onLCAnSycsICdMJ10KCiAgICBzcGVbJ1ZTTzRJZSddID0gZGljdCgoJ1BNMjVfJXMqJyAlIGMsIHNvNGlbaV0pIGZvciBpLGMgaW4gZW51bWVyYXRlKGNhdHMpKQogICAgc3BlWydWU080SmUnXSA9IGRpY3QoKCdQTTI1XyVzKicgJSBjLCBzbzRqW2ldKSBmb3IgaSxjIGluIGVudW1lcmF0ZShjYXRzKSkKCgogICAgIyBvdGhlcnMKICAgIGNhdHMgPSBbJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGMScsICdGMicsICdGMycsICdGNCcsCiAgICAgICAgICAgICdHJywgJ0gnLCAnSScsICdKJywgJ0snLCAnTCddCgogICAgc3BlWydWT1JHUEFJZSddID0gZGljdCgoJ1BNMjVfJXMqJyAlIGMsIG9yZ3BhaVtpXSkgZm9yIGksYyBpbiBlbnVtZXJhdGUoY2F0cykpCiAgICBzcGVbJ1ZPUkdQQUplJ10gPSBkaWN0KCgnUE0yNV8lcyonICUgYywgb3JncGFqW2ldKSBmb3IgaSxjIGluIGVudW1lcmF0ZShjYXRzKSkKCgogICAgc3BlWydWUDI1QUllJ10gPSBkaWN0KCgnUE0yNV8lcyonICUgYywgcDI1YWlbaV0pIGZvciBpLGMgaW4gZW51bWVyYXRlKGNhdHMpKQogICAgc3BlWydWUDI1QUplJ10gPSBkaWN0KCgnUE0yNV8lcyonICUgYywgcDI1YWpbaV0pIGZvciBpLGMgaW4gZW51bWVyYXRlKGNhdHMpKQoKCiAgICBzcGVbJ1ZBTlRIQWUnXSA9IHsnUE0xMF8qJzogMS4wLCAnUE0yNV8qJzogLTEuMH0KICAgIHNwZVsnVlNPT1RlJ10gPSBkaWN0KCgnUE0yNV8lcyonICUgYywgc29vdFtpXSkgZm9yIGksYyBpbiBlbnVtZXJhdGUoY2F0cykpCiAgICBzcGVbJ1ZTT09UZSddWydCQ18qX2NoJ10gPSAxLjAKCgogICAgIyBnYXNlcyB3aXRob3V0IHNwZWNpYXRpb24KICAgIHNwZVsnU08yZSddID0geydTTzJfKic6IDEuMH0KICAgIHNwZVsnTkgzZSddID0geydOSDNfKic6IDEuMH0KICAgIHNwZVsnQ09lJ10gPSB7J0NPXyonOiAxLjB9CgoKPHxmaW1faG9sZXw+CiAgICByZXR1cm4gc3BlCjx8ZmltX3N1ZmZpeHw+CiAgICAjIGNvbnZlcnQgdG8gV2lsZGNhcmRzRGljdAogICAgZm9yIGtleSwgdmFsdWUgaW4gc3BlLml0ZW1zKCk6CiAgICAgICAgc3BlW2tleV0gPSBXaWxkY2FyZHNEaWN0KHZhbHVlKQoKPHxmaW1fZW5kfD4="]
["08329b45d77267b913a54dc5d35a8e0679ff2827-2","08329b45d77267b913a54dc5d35a8e0679ff2827","PHxmaW1fcHJlZml4fD4KCgpmcm9tIGZubWF0Y2ggaW1wb3J0IGZubWF0Y2gKaW1wb3J0IG9zCgppbXBvcnQgbnVtcHkgYXMgbnAKCiMgQ09TTU9BUlQgc3BlY2lhdGlvbiBmdW5jdGlvbiBzdGFydHMKIyBjYWxjdWxhdGUgdGhlIGZyYWN0aW9uIG9mIHNpbmdsZSB0cmFjZXIgb3V0IG9mIGludmVudG9yeSBzcGVjaWVzICAgIAoKIyBpbnB1dCBmaWxlcwpEQVRBX1BBVEggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJywgJy4uJywgJ2ZpbGVzJywKICAgICAgICAgICAgICAgICAgICAgICAgICdzcGVjaWF0aW9uJykKCnBtMjVjb21wb3NpdGlvbl9kaXIgPSBvcy5wYXRoLmpvaW4oREFUQV9QQVRILCAncG0yNWNvbXBvc2l0aW9uLmNzdicpCnRub192b2NfZGlyPSBvcy5wYXRoLmpvaW4oREFUQV9QQVRILCAndG5vX3ZvYy5jc3YnKQoKCiMgbWFzcyBmcmFjdGlvbnMgb2YgTk8yIGFuZCBOTyBpbiBOT1guCk5PWF9UT19OTzIgPSAwLjE4Ck5PWF9UT19OTyA9ICgxLjAgLSBOT1hfVE9fTk8yKSAvIDQ2LjAgKiAzMC4wCgojIHJhdGlvcwpqX3JhdGlvID0gMC45CgoKY2xhc3MgV2lsZGNhcmRzRGljdChkaWN0KToKICAgICIiIgogICAgRGljdCB3aXRoIGdldF93aWxkY2FyZCBtZXRob2QgdG8gbWF0Y2gga2V5cyB3aXRoIFVuaXggc2hlbGwtc3R5bGUKICAgIHdpbGRjYXJkcyB1c2luZyBgZm5tYXRjaGAgbW9kdWxlLgogICAgIiIiCiAgICBkZWYgZ2V0X3dpbGRjYXJkKHNlbGYsIHBhdHRlcm4sIGRlZmF1bHQ9Tm9uZSk6CiAgICAgICAgIiIiCiAgICAgICAgUmV0dXJuIHRoZSB2YWx1ZSBmb3Iga2V5IG1hdGNoaW5nIHBhdHRlcm4gb3IgZWxzZSBkZWZhdWx0LgogICAgICAgICIiIgogICAgICAgIGZvciBrZXkgaW4gc29ydGVkKHNlbGYpOgogICAgICAgICAgICBpZiBmbm1hdGNoKHBhdHRlcm4sIGtleSk6CiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZltrZXldCiAgICAgICAgcmV0dXJuIGRlZmF1bHQKCgpkZWYgcG0yYWVyb3NvbChqX3JhdGlvLCBwbTI1Y29tcG9zaXRpb25fZGlyKToKICAgICIiIiBDYWxjdWxhdGUgc2luZ2xlIGFlcm9zb2wgZW1pc3Npb24gZnJvbSBwbTI1IGFuZCBwbTEwCgogICAgICAgIGlucHV0OiAgal9yYXRpbzogZnJhY3Rpb24gb2YgaiBtb2RlIG9mIHRvdGFsIGFlcm9zb2wgZW1pc3Npb24KICAgICAgICAgICAgICAgIHBtMjVjb21wb3NpdGlvbl9kaXI6IGEgbWFwIG9mIGZhY3RvcnMgdGhhdCBhc3NpZ24gcG0yNSB0byBzcGVjaWZpYyBhZXJvc29sCiAgICAgICAgb3V0cHV0OiBmb3IgYSBzaW5nbGUgdHJhY2VyLCBmcmFjdGlvbiBwZXIgZWFjaCBzb3VyY2Ugb3V0IG9mIHBtMjUKICAgICIiIgoKIyAgICBhbnRoYSA9IHBtMTAgLSBwbTI1ICAjIGNoZWNrIGlmIDwwCgogICAgI2Fzc2lnbiBwbTI1IHRvIHNvNCwgb3JncGEsIHNvb3QsIHAyNWEKICAgIHBtMjVjb21wb3NpdGlvbiA9IG5wLmxvYWR0eHQocG0yNWNvbXBvc2l0aW9uX2RpciwgZGVsaW1pdGVyPScsJywgc2tpcHJvd3M9MSwgdXNlY29scz1yYW5nZSgxLDYpKSAgICAKCiAgICBzbzQgPSBwbTI1Y29tcG9zaXRpb25bOiwwXQogICAgb3JncGEgPSBwbTI1Y29tcG9zaXRpb25bOiwxXQogICAgc29vdCA9IHBtMjVjb21wb3NpdGlvbls6LDJdCgogICAgcDI1YSA9IDEgLSBzbzQgLSBvcmdwYSAtIHNvb3QKCiAgICAjIGFzc2lnbiB0byBpLGogbW9kZQogICAgc280aiA9IHNvNCAqIGpfcmF0aW8KICAgIHNvNGkgPSBzbzQgKiAoMS1qX3JhdGlvKQo8fGZpbV9ob2xlfD4KCiAgICByZXR1cm4gc29vdCwgc280aSwgc280aiwgb3JncGFpLCBvcmdwYWosIHAyNWFpLCBwMjVhagoKCmRlZiBubXZvYzJnYXModG5vX3ZvY19kaXIpOgogICAgb3V0ID0gbnAubG9hZHR4dCh0bm9fdm9jX2RpciwgZGVsaW1pdGVyPScsJywgdW5wYWNrPVRydWUsIHNraXByb3dzPTEsCiAgICAgICAgICAgICAgICAgICAgIHVzZWNvbHM9bnAuYXJhbmdlKDE0KSsxKQogICAgcmV0dXJuIG91dAoKCgoKCmRlZiBjcmVhdGVfbWFwcGluZyhub21lbmNsYXR1cmU9J0dORlInKToKCiAgICBpZiBub21lbmNsYXR1cmUgIT0gJ0dORlInOgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ09ubHkgR05GUiBzdXBwb3J0ZWQgZm9yIG5vbWVuY2xhdHVyZS4nKQoKICAgIHNwZSA9IHt9CgogICAgIyBuaXRyb2dlbiBveGlkZXMKICAgIHNwZVsnTk9lJ10gPSB7J05PWF8qJzogTk9YX1RPX05PfQogICAgc3BlWydOTzJlJ10gPSB7J05PWF8qJzogTk9YX1RPX05PMn0KCiAgICAjIE5NVk9DIGNhdGVnb3JpZXMgKHdpdGhvdXQgSykKICAgIG91dCA9IG5tdm9jMmdhcyh0bm9fdm9jX2RpcikKICAgIGNhdHMgPSBbJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGMScsICdGMicsICdGMycsICdGNCcsCiAgICAgICAgICAgICdHJywgJ0gnLCAnSScsICdKJywgJ0wnXQoKICAgIHNwZVsnQUxEZSddID0gZGljdCgoJ05NVk9DXyVzKicgJSBjLCBvdXRbMCxpXSkgZm9yIGksYyBpbiBlbnVtZXJhdGUoY2F0cykpCiAgICBzcGVbJ0hDSE9lJ10gPSBkaWN0KCgnTk1WT0NfJXMqJyAlIGMsIG91dFsxLGldKSBmb3IgaSxjIGluIGVudW1lcmF0ZShjYXRzKSkKICAgIHNwZVsnT1JBMmUnXSA9IGRpY3QoKCdOTVZPQ18lcyonICUgYywgb3V0WzIsaV0pIGZvciBpLGMgaW4gZW51bWVyYXRlKGNhdHMpKQogICAgc3BlWydIQzNlJ10gPSBkaWN0KCgnTk1WT0NfJXMqJyAlIGMsIG91dFszLGldKSBmb3IgaSxjIGluIGVudW1lcmF0ZShjYXRzKSkKICAgIHNwZVsnSEM1ZSddID0gZGljdCgoJ05NVk9DXyVzKicgJSBjLCBvdXRbNCxpXSkgZm9yIGksYyBpbiBlbnVtZXJhdGUoY2F0cykpCiAgICBzcGVbJ0hDOGUnXSA9IGRpY3QoKCdOTVZPQ18lcyonICUgYywgb3V0WzUsaV0pIGZvciBpLGMgaW4gZW51bWVyYXRlKGNhdHMpKQogICAgc3BlWydFVEhlJ10gPSBkaWN0KCgnTk1WT0NfJXMqJyAlIGMsIG91dFs2LGldKSBmb3IgaSxjIGluIGVudW1lcmF0ZShjYXRzKSkKICAgIHNwZVsnT0wyZSddID0gZGljdCgoJ05NVk9DXyVzKicgJSBjLCBvdXRbNyxpXSkgZm9yIGksYyBpbiBlbnVtZXJhdGUoY2F0cykpCiAgICBzcGVbJ09MVGUnXSA9IGRpY3QoKCdOTVZPQ18lcyonICUgYywgb3V0WzgsaV0pIGZvciBpLGMgaW4gZW51bWVyYXRlKGNhdHMpKQogICAgc3BlWydPTEllJ10gPSBkaWN0KCgnTk1WT0NfJXMqJyAlIGMsIG91dFs5LGldKSBmb3IgaSxjIGluIGVudW1lcmF0ZShjYXRzKSkKICAgIHNwZVsnVE9MZSddID0gZGljdCgoJ05NVk9DXyVzKicgJSBjLCBvdXRbMTAsaV0pIGZvciBpLGMgaW4gZW51bWVyYXRlKGNhdHMpKQogICAgc3BlWydYWUxlJ10gPSBkaWN0KCgnTk1WT0NfJXMqJyAlIGMsIG91dFsxMSxpXSkgZm9yIGksYyBpbiBlbnVtZXJhdGUoY2F0cykpCiAgICBzcGVbJ0tFVGUnXSA9IGRpY3QoKCdOTVZPQ18lcyonICUgYywgb3V0WzEyLGldKSBmb3IgaSxjIGluIGVudW1lcmF0ZShjYXRzKSkKICAgIHNwZVsnQ1NMZSddID0gZGljdCgoJ05NVk9DXyVzKicgJSBjLCBvdXRbMTMsaV0pIGZvciBpLGMgaW4gZW51bWVyYXRlKGNhdHMpKQoKCiAgICAjIGFlcm9zb2xzCiAgICBzb290LCBzbzRpLCBzbzRqLCBvcmdwYWksIG9yZ3BhaiwgcDI1YWksIHAyNWFqID0gcG0yYWVyb3NvbChqX3JhdGlvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG0yNWNvbXBvc2l0aW9uX2RpcikKICAgICMgU08yIGNhdGVnb3JpZXMKICAgIGNhdHMgPSBbJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGMScsICdGMicsICdGMycsICdGNCcsCiAgICAgICAgICAgICdHJywgJ0gnLCAnSScsICdKJywgJ0snLCAnTCddCgogICAgc3BlWydWU080SWUnXSA9IGRpY3QoKCdQTTI1XyVzKicgJSBjLCBzbzRpW2ldKSBmb3IgaSxjIGluIGVudW1lcmF0ZShjYXRzKSkKICAgIHNwZVsnVlNPNEplJ10gPSBkaWN0KCgnUE0yNV8lcyonICUgYywgc280altpXSkgZm9yIGksYyBpbiBlbnVtZXJhdGUoY2F0cykpCgoKICAgICMgb3RoZXJzCiAgICBjYXRzID0gWydBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRjEnLCAnRjInLCAnRjMnLCAnRjQnLAogICAgICAgICAgICAnRycsICdIJywgJ0knLCAnSicsICdLJywgJ0wnXQoKICAgIHNwZVsnVk9SR1BBSWUnXSA9IGRpY3QoKCdQTTI1XyVzKicgJSBjLCBvcmdwYWlbaV0pIGZvciBpLGMgaW4gZW51bWVyYXRlKGNhdHMpKQogICAgc3BlWydWT1JHUEFKZSddID0gZGljdCgoJ1BNMjVfJXMqJyAlIGMsIG9yZ3BhaltpXSkgZm9yIGksYyBpbiBlbnVtZXJhdGUoY2F0cykpCgoKICAgIHNwZVsnVlAyNUFJZSddID0gZGljdCgoJ1BNMjVfJXMqJyAlIGMsIHAyNWFpW2ldKSBmb3IgaSxjIGluIGVudW1lcmF0ZShjYXRzKSkKICAgIHNwZVsnVlAyNUFKZSddID0gZGljdCgoJ1BNMjVfJXMqJyAlIGMsIHAyNWFqW2ldKSBmb3IgaSxjIGluIGVudW1lcmF0ZShjYXRzKSkKCgogICAgc3BlWydWQU5USEFlJ10gPSB7J1BNMTBfKic6IDEuMCwgJ1BNMjVfKic6IC0xLjB9CiAgICBzcGVbJ1ZTT09UZSddID0gZGljdCgoJ1BNMjVfJXMqJyAlIGMsIHNvb3RbaV0pIGZvciBpLGMgaW4gZW51bWVyYXRlKGNhdHMpKQogICAgc3BlWydWU09PVGUnXVsnQkNfKl9jaCddID0gMS4wCgoKICAgICMgZ2FzZXMgd2l0aG91dCBzcGVjaWF0aW9uCiAgICBzcGVbJ1NPMmUnXSA9IHsnU08yXyonOiAxLjB9CiAgICBzcGVbJ05IM2UnXSA9IHsnTkgzXyonOiAxLjB9CiAgICBzcGVbJ0NPZSddID0geydDT18qJzogMS4wfQoKCiAgICAjIGNvbnZlcnQgdG8gV2lsZGNhcmRzRGljdAogICAgZm9yIGtleSwgdmFsdWUgaW4gc3BlLml0ZW1zKCk6CiAgICAgICAgc3BlW2tleV0gPSBXaWxkY2FyZHNEaWN0KHZhbHVlKQoKICAgIHJldHVybiBzcGUKPHxmaW1fc3VmZml4fD4KICAgIG9yZ3BhaiA9IG9yZ3BhICogal9yYXRpbwogICAgb3JncGFpID0gb3JncGEgKiAoMS1qX3JhdGlvKQogICAgcDI1YWogPSBwMjVhICogal9yYXRpbwogICAgcDI1YWkgPSBwMjVhICogKDEtal9yYXRpbykKPHxmaW1fZW5kfD4="]
["cd590d1434bec8efce33c1b18640133cc8d7173a-1","cd590d1434bec8efce33c1b18640133cc8d7173a","PHxmaW1fcHJlZml4fD4KYSA9ICI1Igo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmIgPSAiNiIKcHJpbnQoIGEgKyBiICkKPHxmaW1fZW5kfD4="]
["cd590d1434bec8efce33c1b18640133cc8d7173a-2","cd590d1434bec8efce33c1b18640133cc8d7173a","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KYSA9ICI1IgpiID0gIjYiCnByaW50KCBhICsgYiApCjx8ZmltX2VuZHw+"]
["cd590d1434bec8efce33c1b18640133cc8d7173a-3","cd590d1434bec8efce33c1b18640133cc8d7173a","PHxmaW1fcHJlZml4fD4KYSA9ICI1IgpiID0gIjYiCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KcHJpbnQoIGEgKyBiICkKPHxmaW1fZW5kfD4="]
["26df5c5f606388d1db4db88441c531f2d4a0d51e-1","26df5c5f606388d1db4db88441c531f2d4a0d51e","PHxmaW1fcHJlZml4fD4KZnJvbSBkYXRhY2xhc3NlcyBpbXBvcnQgZGF0YWNsYXNzCgpmcm9tIG1vbnRhZy5jbGllbnRzLnNwb3RpZnlfY2xpZW50IGltcG9ydCBTcG90aWZ5Q2xpZW50CmZyb20gbW9udGFnLmRvbWFpbi5lbnRpdGllcyBpbXBvcnQgUGxheWxpc3QsIFBsYXlsaXN0SWQsIFRyYWNrLCBUcmFja0lkCmZyb20gbW9udGFnLnJlcG9zaXRvcmllcy5tdXNpY19yZXBvIGltcG9ydCBNdXNpY1JlcG8KCkxJS0VEX1NPTkdTX0lEID0gIkxTIgoKCkBkYXRhY2xhc3MKY2xhc3MgU3BvdGlmeVJlcG8oTXVzaWNSZXBvKToKICAgIGNsaWVudDogU3BvdGlmeUNsaWVudAoKICAgIGRlZiBmaW5kX3BsYXlsaXN0cyhzZWxmKSAtPiBsaXN0W1BsYXlsaXN0XToKICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50Lm15X3BsYXlsaXN0cygpCiAgICAgICAgb3RoZXJfcGxheWxpc3RzID0gW1BsYXlsaXN0KGlkPWl0ZW1bImlkIl0sIG5hbWU9aXRlbVsibmFtZSJdKSBmb3IgaXRlbSBpbiByZXNwb25zZVsiaXRlbXMiXV0KICAgICAgICBsaWtlZF9zb25nc19wbGF5bGlzdCA9IFBsYXlsaXN0KGlkPUxJS0VEX1NPTkdTX0lELCBuYW1lPSJMaWtlZCBTb25ncyIsIGlzX2xpa2VkPVRydWUpCiAgICAgICAgcmV0dXJuIFtsaWtlZF9zb25nc19wbGF5bGlzdCwgKm90aGVyX3BsYXlsaXN0c10KCiAgICBkZWYgZmluZF90cmFja3Moc2VsZiwgcGxheWxpc3RfaWQ6IFBsYXlsaXN0SWQpIC0+IGxpc3RbVHJhY2tdOgogICAgICAgICIiIlJldHVybnMgYWxsIHRyYWNrcyBpbiB0aGUgc3BlY2lmaWVkIHBsYXlsaXN0LiBVc2UgcGxheWxpc3RfaWQ9J0xTJyB0byBnZXQgdGhlIGxpa2VkIHNvbmdzIiIiCiAgICAgICAgdG90YWwgPSBzZWxmLl9mZXRjaF9saWtlZF9vcl9wbGF5bGlzdF90cmFja3MocGxheWxpc3RfaWQsIGxpbWl0PTEpWyJ0b3RhbCJdCiAgICAgICAgbGltaXQgPSA1MAogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgIHRyYWNrCiAgICAgICAgICAgIGZvciBvZmZzZXQgaW4gcmFuZ2UoMCwgdG90YWwgKyAxLCBsaW1pdCkKICAgICAgICAgICAgZm9yIHRyYWNrIGluIHNlbGYuX2ZpbmRfdHJhY2tzX2JhdGNoKHBsYXlsaXN0X2lkPXBsYXlsaXN0X2lkLCBsaW1pdD1saW1pdCwgb2Zmc2V0PW9mZnNldCkKICAgICAgICBdCgogICAgZGVmIF9maW5kX3RyYWNrc19iYXRjaChzZWxmLCAqKmthcmdzKSAtPiBsaXN0W1RyYWNrXToKICAgICAgICByZXNwb25zZSA9IHNlbGYuX2ZldGNoX2xpa2VkX29yX3BsYXlsaXN0X3RyYWNrcygqKmthcmdzKQogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgIFRyYWNrKAogICAgICAgICAgICAgICAgaWQ9aXRlbVsidHJhY2siXVsiaWQiXSwKICAgICAgICAgICAgICAgIG5hbWU9aXRlbVsidHJhY2siXVsibmFtZSJdLAogICAgICAgICAgICAgICAgYWxidW09aXRlbVsidHJhY2siXVsiYWxidW0iXVsibmFtZSJdLAogICAgICAgICAgICAgICAgYXJ0aXN0cz1bYXJ0aXN0WyJuYW1lIl0gZm9yIGFydGlzdCBpbiBpdGVtWyJ0cmFjayJdWyJhcnRpc3RzIl1dLAogICAgICAgICAgICApCiAgICAgICAgICAgIGZvciBpdGVtIGluIHJlc3BvbnNlWyJpdGVtcyJdCiAgICAgICAgXQoKICAgIGRlZiBfZmV0Y2hfbGlrZWRfb3JfcGxheWxpc3RfdHJhY2tzKHNlbGYsIHBsYXlsaXN0X2lkLCAqKmt3YXJncyk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBpZiBwbGF5bGlzdF9pZCA9PSBMSUtFRF9TT05HU19JRDoKICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2xpZW50Lmxpa2VkX3RyYWNrcygqKmt3YXJncykKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gc2VsZi5jbGllbnQucGxheWxpc3RfdHJhY2tzKHBsYXlsaXN0X2lkLCAqKmt3YXJncykKPHxmaW1fZW5kfD4="]
["6efc1369b2d3cf9b8e7675435ed5853a4b0a9726-1","6efc1369b2d3cf9b8e7675435ed5853a4b0a9726","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKZnJvbSBkaWZmbGliIGltcG9ydCBnZXRfY2xvc2VfbWF0Y2hlcwoKZGVmIGNvbW1hbmRfbm90X2ZvdW5kKAogICAgdGV4dDogc3RyLCAKICAgIHZhbGlkX2NvbW1hbmRzOiBMaXN0W3N0cl0KKSAtPiBOb25lOgogICAgIiIiCiAgICBQcmludHMgYSBjb21tYW5kIG5vdCBmb3VuZCBlcnJvciwgCiAgICBhbmQgdHJ5IHRvIGZpbmQgYSBzaW1pbGFyIGNvbW1hbmQgCiAgICBiYXNlZCBvbiB0aGUgY29tbWFuZCB5b3UgaGF2ZSBlbnRlcmVkCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICIiIgogICAgY29tbWFuZCA9IHRleHQuc3BsaXQoJyAnKVswXQogICAgcG9zc2libGVfbWF0Y2hlcyA9IGdldF9jbG9zZV9tYXRjaGVzKGNvbW1hbmQsIHZhbGlkX2NvbW1hbmRzKQogICAgcmVzID0gZidObyBjb21tYW5kIGNhbGxlZCBcJ3tjb21tYW5kfVwnJwo8fGZpbV9lbmR8Pg=="]
["6efc1369b2d3cf9b8e7675435ed5853a4b0a9726-2","6efc1369b2d3cf9b8e7675435ed5853a4b0a9726","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKZnJvbSBkaWZmbGliIGltcG9ydCBnZXRfY2xvc2VfbWF0Y2hlcwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgpkZWYgY29tbWFuZF9ub3RfZm91bmQoCiAgICB0ZXh0OiBzdHIsIAogICAgdmFsaWRfY29tbWFuZHM6IExpc3Rbc3RyXQo8fGZpbV9lbmR8Pg=="]
["6efc1369b2d3cf9b8e7675435ed5853a4b0a9726-3","6efc1369b2d3cf9b8e7675435ed5853a4b0a9726","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKZnJvbSBkaWZmbGliIGltcG9ydCBnZXRfY2xvc2VfbWF0Y2hlcwoKZGVmIGNvbW1hbmRfbm90X2ZvdW5kKAogICAgdGV4dDogc3RyLCAKICAgIHZhbGlkX2NvbW1hbmRzOiBMaXN0W3N0cl0KKSAtPiBOb25lOgogICAgIiIiCiAgICBQcmludHMgYSBjb21tYW5kIG5vdCBmb3VuZCBlcnJvciwgCiAgICBhbmQgdHJ5IHRvIGZpbmQgYSBzaW1pbGFyIGNvbW1hbmQgCiAgICBiYXNlZCBvbiB0aGUgY29tbWFuZCB5b3UgaGF2ZSBlbnRlcmVkCiAgICAiIiIKICAgIGNvbW1hbmQgPSB0ZXh0LnNwbGl0KCcgJylbMF0KICAgIHBvc3NpYmxlX21hdGNoZXMgPSBnZXRfY2xvc2VfbWF0Y2hlcyhjb21tYW5kLCB2YWxpZF9jb21tYW5kcykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcmVzID0gZidObyBjb21tYW5kIGNhbGxlZCBcJ3tjb21tYW5kfVwnJwoKICAgIGlmIHBvc3NpYmxlX21hdGNoZXMgIT0gW106CiAgICAgICAgcmVzICs9ICcsIGRpZCB5b3UgbWVhbjpcbicKPHxmaW1fZW5kfD4="]
["6efc1369b2d3cf9b8e7675435ed5853a4b0a9726-4","6efc1369b2d3cf9b8e7675435ed5853a4b0a9726","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKZnJvbSBkaWZmbGliIGltcG9ydCBnZXRfY2xvc2VfbWF0Y2hlcwoKZGVmIGNvbW1hbmRfbm90X2ZvdW5kKAogICAgdGV4dDogc3RyLCAKICAgIHZhbGlkX2NvbW1hbmRzOiBMaXN0W3N0cl0KKSAtPiBOb25lOgogICAgIiIiCiAgICBQcmludHMgYSBjb21tYW5kIG5vdCBmb3VuZCBlcnJvciwgCiAgICBhbmQgdHJ5IHRvIGZpbmQgYSBzaW1pbGFyIGNvbW1hbmQgCiAgICBiYXNlZCBvbiB0aGUgY29tbWFuZCB5b3UgaGF2ZSBlbnRlcmVkCiAgICAiIiIKICAgIGNvbW1hbmQgPSB0ZXh0LnNwbGl0KCcgJylbMF0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcG9zc2libGVfbWF0Y2hlcyA9IGdldF9jbG9zZV9tYXRjaGVzKGNvbW1hbmQsIHZhbGlkX2NvbW1hbmRzKQogICAgcmVzID0gZidObyBjb21tYW5kIGNhbGxlZCBcJ3tjb21tYW5kfVwnJwoKICAgIGlmIHBvc3NpYmxlX21hdGNoZXMgIT0gW106Cjx8ZmltX2VuZHw+"]
["6efc1369b2d3cf9b8e7675435ed5853a4b0a9726-5","6efc1369b2d3cf9b8e7675435ed5853a4b0a9726","PHxmaW1fcHJlZml4fD4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKPHxmaW1faG9sZXw+CiAgICB2YWxpZF9jb21tYW5kczogTGlzdFtzdHJdCikgLT4gTm9uZToKICAgICIiIgogICAgUHJpbnRzIGEgY29tbWFuZCBub3QgZm91bmQgZXJyb3IsIAogICAgYW5kIHRyeSB0byBmaW5kIGEgc2ltaWxhciBjb21tYW5kIAogICAgYmFzZWQgb24gdGhlIGNvbW1hbmQgeW91IGhhdmUgZW50ZXJlZAogICAgIiIiCiAgICBjb21tYW5kID0gdGV4dC5zcGxpdCgnICcpWzBdCiAgICBwb3NzaWJsZV9tYXRjaGVzID0gZ2V0X2Nsb3NlX21hdGNoZXMoY29tbWFuZCwgdmFsaWRfY29tbWFuZHMpCiAgICByZXMgPSBmJ05vIGNvbW1hbmQgY2FsbGVkIFwne2NvbW1hbmR9XCcnCgogICAgaWYgcG9zc2libGVfbWF0Y2hlcyAhPSBbXToKICAgICAgICByZXMgKz0gJywgZGlkIHlvdSBtZWFuOlxuJwogICAgICAgIGZvciBpLCBwb3NzaWJsZV9tYXRjaCBpbiBlbnVtZXJhdGUocG9zc2libGVfbWF0Y2hlcyk6CiAgICAgICAgICAgIHJlcyArPSBmJyAgICB7cG9zc2libGVfbWF0Y2h9JyArICgnXG4nIGlmIGkgIT0gKGxlbihwb3NzaWJsZV9tYXRjaGVzKSAtIDEpIGVsc2UgJycpCgogICAgcHJpbnQoZid7cmVzfScpCjx8ZmltX3N1ZmZpeHw+CmZyb20gZGlmZmxpYiBpbXBvcnQgZ2V0X2Nsb3NlX21hdGNoZXMKCmRlZiBjb21tYW5kX25vdF9mb3VuZCgKICAgIHRleHQ6IHN0ciwgCjx8ZmltX2VuZHw+"]
["f2ac3161c9d45964aee085e41dd995c2ef0c6353-1","f2ac3161c9d45964aee085e41dd995c2ef0c6353","PHxmaW1fcHJlZml4fD4KZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKaW1wb3J0IHJlCmltcG9ydCBnbG9iCmltcG9ydCBvcwppbXBvcnQgcGFuZGFzIGFzIHBkCmZyb20gY29uZmlnIGltcG9ydCAqCgoKZGVmIHByZXByb2Nlc3NfZGF0YShwYXRoKToKICAgIGRhdGEgPSBkZWZhdWx0ZGljdChkaWN0KQogICAgdW5pcXVlX2xhYmVscyA9IHNldCgpCiAgICBpID0gMAogICAgZm9yIGZpbGVuYW1lIGluIGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4ocGF0aCwgJyoudHh0JykpOgogICAgICBuYW1lID0gb3MucGF0aC5iYXNlbmFtZShmaWxlbmFtZSkKICAgICAgbmFtZSA9IG5hbWVbOm5hbWUuaW5kZXgoJy4nKV0KICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgZmlsZW5hbWUpLCBtb2RlPSdyJywgZW5jb2Rpbmc9J3dpbmRvd3MtMTI1MicpIGFzIGY6CiAgICAgICAgZGF0YVtuYW1lXVsiY29udGVudCJdID0gZi5yZWFkbGluZXMoKVswXQogICAgICAgIGRhdGFbbmFtZV1bImlkIl0gPSBuYW1lCiAgICAgIGlmIGk9PVNBTVBMRV9TSVpFOgogICAgICAgIGJyZWFrCiAgICAgIGkgKz0gMQoKICAgIGkgPSAwCiAgICBmb3IgZmlsZW5hbWUgaW4gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihwYXRoLCAnKi5sYWInKSk6CiAgICAgIG5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGVuYW1lKQogICAgICBuYW1lID0gbmFtZVs6bmFtZS5pbmRleCgnLicpXQogICAgICBpZiBuYW1lIG5vdCBpbiBkYXRhOgogICAgICAgIGNvbnRpbnVlCiAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIGZpbGVuYW1lKSwgIG1vZGU9J3InLCBlbmNvZGluZz0nd2luZG93cy0xMjUyJykgYXMgZjoKICAgICAgICBsYWJlbHMgPSBsaXN0KG1hcChzdHIuc3RyaXAsIGYucmVhZGxpbmVzKCkpKQogICAgICAgIGlmIGxlbihsYWJlbHMpIT0wOgogICAgICAgICAgZGF0YVtuYW1lXVsibGFiZWwiXSA9IGxhYmVscwogICAgICAgICAgdW5pcXVlX2xhYmVscy51cGRhdGUobGFiZWxzKQogICAgICBpZiBpPT1TQU1QTEVfU0laRToKICAgICAgICBicmVhawogICAgICBpICs9IDEKCiAgICBmb3IgaSwgeCBpbiBlbnVtZXJhdGUoZGF0YSk6CiAgICAgICMgcHJpbnQoZGF0YVt4XSkKICAgICAgaWYgaT09SEVBRDoKICAgICAgICBicmVhawoKICAgIGRmID0gcGQuRGF0YUZyYW1lKGxpc3QoZGF0YS52YWx1ZXMoKSkpCiAgICBkZiA9IGRmLmRyb3BuYSgpCiAgICBmb3IgdW5pcXVlX2xhYmVsIGluIHVuaXF1ZV9sYWJlbHM6CiAgICAgIGRmW3VuaXF1ZV9sYWJlbF09ZGZbJ2xhYmVsJ10uYXBwbHkobGFtYmRhIHg6IDEgaWYgdW5pcXVlX2xhYmVsIGluIHhbMF0gZWxzZSAwKQogICAgZGYuZHJvcCgnbGFiZWwnLCBheGlzPTEsIGlucGxhY2U9VHJ1ZSkKCiAgICBwcmludChkZi5jb2x1bW5zKQogICAgcHJpbnQoIm9yaWduYWwgZGF0YSIpCiAgICBwcmludChkZi5oZWFkKCkpCiAgICAjIHByaW50KGRmLmRlc2NyaWJlKCkpCiAgICByZXR1cm4gZGYsIHVuaXF1ZV9sYWJlbHMKCmRlZiBjbGVhbl9kYXRhKGRmLCBjb2x1bW5fbmFtZSA9ICJjb250ZW50Iik6CiAgICBDTEVBTlIgPSByZS5jb21waWxlKCc8Lio/PicpCiAgICBkZWYgY2xlYW5SZXN1bWUocmVzdW1lVGV4dCk6CiAgICAgICAgcmVzdW1lVGV4dCA9IHJlLnN1YihDTEVBTlIsICcnLCByZXN1bWVUZXh0KQogICAgICAgIHJlc3VtZVRleHQgPSByZS5zdWIoJ2h0dHBTK3MqJywgJyAnLCByZXN1bWVUZXh0KSAgIyByZW1vdmUgVVJMcwogICAgICAgIHJlc3VtZVRleHQgPSByZS5zdWIoJ1JUfGNjJywgJyAnLCByZXN1bWVUZXh0KSAgIyByZW1vdmUgUlQgYW5kIGNjCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICByZXN1bWVUZXh0ID0gcmUuc3ViKCcjUysnLCAnJywgcmVzdW1lVGV4dCkgICMgcmVtb3ZlIGhhc2h0YWdzCiAgICAgICAgcmVzdW1lVGV4dCA9IHJlLnN1YignQFMrJywgJyAgJywgcmVzdW1lVGV4dCkgICMgcmVtb3ZlIG1lbnRpb25zCiAgICAgICAgcmVzdW1lVGV4dCA9IHJlLnN1YignWyVzXScgJSByZS5lc2NhcGUoIiIiISIjJCUmJygpKissLS4vOjs8PT4/QFtdXl9ge3x9fiIiIiksICcgJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZVRleHQpICAjIHJlbW92ZSBwdW5jdHVhdGlvbnMKPHxmaW1fZW5kfD4="]
["f2ac3161c9d45964aee085e41dd995c2ef0c6353-2","f2ac3161c9d45964aee085e41dd995c2ef0c6353","PHxmaW1fcHJlZml4fD4KZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKaW1wb3J0IHJlCmltcG9ydCBnbG9iCmltcG9ydCBvcwppbXBvcnQgcGFuZGFzIGFzIHBkCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBjb25maWcgaW1wb3J0ICoKCgpkZWYgcHJlcHJvY2Vzc19kYXRhKHBhdGgpOgo8fGZpbV9lbmR8Pg=="]
["398d4526396df31d9256b3b957383e910717fd09-1","398d4526396df31d9256b3b957383e910717fd09","PHxmaW1fcHJlZml4fD4KIyAtKi0gdGVzdC1jYXNlLW5hbWU6IG1pbWljLnRlc3QudGVzdF9pcm9uaWMgLSotCiIiIgpBUEkgTW9jayBmb3IgSXJvbmljLgpodHRwOi8vZG9jcy5vcGVuc3RhY2sub3JnL2RldmVsb3Blci9pcm9uaWMvd2ViYXBpL3YxLmh0bWwKIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydCwgZGl2aXNpb24sIHVuaWNvZGVfbGl0ZXJhbHMKCmZyb20gbWltaWMucmVzdC5taW1pY2FwcCBpbXBvcnQgTWltaWNBcHAKCgpjbGFzcyBJcm9uaWNBcGkob2JqZWN0KToKICAgICIiIgogICAgUmVzdCBlbmRwb2ludHMgZm9yIHRoZSBJcm9uaWMgQVBJLgogICAgIiIiCgogICAgYXBwID0gTWltaWNBcHAoKQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb3JlKToKICAgICAgICAiIiIKICAgICAgICA6cGFyYW0gTWltaWNDb3JlIGNvcmU6IFRoZSBjb3JlIHRvIHdoaWNoIHRoZSBJcm9uaWMgQXBpIHdpbGwgYmUKICAgICAgICBjb21tdW5pY2F0aW5nLgogICAgICAgICIiIgogICAgICAgIHNlbGYuY29yZSA9IGNvcmUKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIEBhcHAucm91dGUoJy9ub2RlcycsIG1ldGhvZHM9WydQT1NUJ10pCiAgICBkZWYgY3JlYXRlX25vZGUoc2VsZiwgcmVxdWVzdCk6CiAgICAgICAgIiIiCiAgICAgICAgUmVzcG9uZHMgd2l0aCByZXNwb25zZSBjb2RlIDIwMSBhbmQgcmV0dXJucyB0aGUgbmV3bHkgY3JlYXRlZCBub2RlLgo8fGZpbV9lbmR8Pg=="]
["398d4526396df31d9256b3b957383e910717fd09-2","398d4526396df31d9256b3b957383e910717fd09","PHxmaW1fcHJlZml4fD4KIyAtKi0gdGVzdC1jYXNlLW5hbWU6IG1pbWljLnRlc3QudGVzdF9pcm9uaWMgLSotCiIiIgpBUEkgTW9jayBmb3IgSXJvbmljLgpodHRwOi8vZG9jcy5vcGVuc3RhY2sub3JnL2RldmVsb3Blci9pcm9uaWMvd2ViYXBpL3YxLmh0bWwKIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydCwgZGl2aXNpb24sIHVuaWNvZGVfbGl0ZXJhbHMKCmZyb20gbWltaWMucmVzdC5taW1pY2FwcCBpbXBvcnQgTWltaWNBcHAKCgpjbGFzcyBJcm9uaWNBcGkob2JqZWN0KToKICAgICIiIgogICAgUmVzdCBlbmRwb2ludHMgZm9yIHRoZSBJcm9uaWMgQVBJLgogICAgIiIiCgogICAgYXBwID0gTWltaWNBcHAoKQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb3JlKToKICAgICAgICAiIiIKICAgICAgICA6cGFyYW0gTWltaWNDb3JlIGNvcmU6IFRoZSBjb3JlIHRvIHdoaWNoIHRoZSBJcm9uaWMgQXBpIHdpbGwgYmUKICAgICAgICBjb21tdW5pY2F0aW5nLgogICAgICAgICIiIgogICAgICAgIHNlbGYuY29yZSA9IGNvcmUKCiAgICBAYXBwLnJvdXRlKCcvbm9kZXMnLCBtZXRob2RzPVsnUE9TVCddKQogICAgZGVmIGNyZWF0ZV9ub2RlKHNlbGYsIHJlcXVlc3QpOgogICAgICAgICIiIgogICAgICAgIFJlc3BvbmRzIHdpdGggcmVzcG9uc2UgY29kZSAyMDEgYW5kIHJldHVybnMgdGhlIG5ld2x5IGNyZWF0ZWQgbm9kZS4KICAgICAgICAiIiIKICAgICAgICByZXR1cm4gc2VsZi5jb3JlLmlyb25pY19ub2RlX3N0b3JlLmNyZWF0ZV9ub2RlKHJlcXVlc3QpCgogICAgQGFwcC5yb3V0ZSgnL25vZGVzLzxzdHJpbmc6bm9kZV9pZD4nLCBtZXRob2RzPVsnREVMRVRFJ10pCiAgICBkZWYgZGVsZXRlX25vZGUoc2VsZiwgcmVxdWVzdCwgbm9kZV9pZCk6CiAgICAgICAgIiIiCiAgICAgICAgUmVzcG9uZHMgd2l0aCByZXNwb25zZSBjb2RlIDIwNCBhbmQgZGVsZXRlIHRoZSBub2RlLgogICAgICAgICIiIgogICAgICAgIHJldHVybiBzZWxmLmNvcmUuaXJvbmljX25vZGVfc3RvcmUuZGVsZXRlX25vZGUocmVxdWVzdCwgbm9kZV9pZCkKCiAgICBAYXBwLnJvdXRlKCcvbm9kZXMnLCBtZXRob2RzPVsnR0VUJ10pCiAgICBkZWYgbGlzdF9ub2RlcyhzZWxmLCByZXF1ZXN0KToKICAgICAgICAiIiIKICAgICAgICBSZXNwb25kcyB3aXRoIHJlc3BvbnNlIGNvZGUgMjAwIHdpdGggYSBsaXN0IG9mIG5vZGVzLgogICAgICAgICIiIgogICAgICAgIHJldHVybiBzZWxmLmNvcmUuaXJvbmljX25vZGVfc3RvcmUubGlzdF9ub2RlcyhpbmNsdWRlX2RldGFpbHM9RmFsc2UpCgogICAgQGFwcC5yb3V0ZSgnL25vZGVzL2RldGFpbCcsIG1ldGhvZHM9WydHRVQnXSkKICAgIGRlZiBsaXN0X25vZGVzX3dpdGhfZGV0YWlscyhzZWxmLCByZXF1ZXN0KToKICAgICAgICAiIiIKICAgICAgICBSZXNwb25kcyB3aXRoIHJlc3BvbnNlIGNvZGUgMjAwIHdpdGggYSBsaXN0IG9mIG5vZGVzIGFuZCBpdHMgZGV0YWlscy4KICAgICAgICAiIiIKICAgICAgICByZXR1cm4gc2VsZi5jb3JlLmlyb25pY19ub2RlX3N0b3JlLmxpc3Rfbm9kZXMoaW5jbHVkZV9kZXRhaWxzPVRydWUpCgogICAgQGFwcC5yb3V0ZSgnL25vZGVzLzxzdHJpbmc6bm9kZV9pZD4nLCBtZXRob2RzPVsnR0VUJ10pCiAgICBkZWYgZ2V0X25vZGVfZGV0YWlscyhzZWxmLCByZXF1ZXN0LCBub2RlX2lkKToKICAgICAgICAiIiIKICAgICAgICBSZXNwb25kcyB3aXRoIHJlc3BvbnNlIGNvZGUgMjAwIHdpdGggZGV0YWlscyBvZiB0aGUgbm9kZXMuCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuY29yZS5pcm9uaWNfbm9kZV9zdG9yZS5nZXRfbm9kZV9kZXRhaWxzKHJlcXVlc3QsIG5vZGVfaWQpCgogICAgQGFwcC5yb3V0ZSgnL25vZGVzLzxzdHJpbmc6bm9kZV9pZD4vc3RhdGVzL3Byb3Zpc2lvbicsIG1ldGhvZHM9WydQVVQnXSkKICAgIGRlZiBzZXRfbm9kZV9wcm92aXNpb25fc3RhdGUoc2VsZiwgcmVxdWVzdCwgbm9kZV9pZCk6CiAgICAgICAgIiIiCiAgICAgICAgUmVzcG9uZHMgd2l0aCByZXNwb25zZSBjb2RlIDIwMiBhbmQgc2V0cyB0aGUgcHJvdmlzaW9uIHN0YXRlIG9mCiAgICAgICAgdGhlIG5vZGUuCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuY29yZS5pcm9uaWNfbm9kZV9zdG9yZS5zZXRfbm9kZV9wcm92aXNpb25fc3RhdGUoCiAgICAgICAgICAgIHJlcXVlc3QsIG5vZGVfaWQpCgogICAgQGFwcC5yb3V0ZSgnL25vZGVzLzxzdHJpbmc6bm9kZV9pZD4vdmVuZG9yX3Bhc3N0aHJ1LzxzdHJpbmc6bWV0aG9kPicsIG1ldGhvZHM9WydQT1NUJ10pCiAgICBkZWYgdmVuZG9yX3Bhc3N0aHJ1X2NhY2hlX2ltYWdlKHNlbGYsIHJlcXVlc3QsIG5vZGVfaWQsIG1ldGhvZCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAiIiIKICAgICAgICBSZXNwb25kcyB3aXRoIHJlc3BvbnNlIGNvZGUgMjAyIGFuZCBzZXRzIHRoZSA6b2JqOmBOb2RlYCdzIGNhY2hlX2ltYWdlX2lkCiAgICAgICAgYW5kIGNhY2hlX3N0YXR1cy4KICAgICAgICBSZXR1cm5zIDQwMCBpZiBgbm9kZV9pZGAgZG9lcyBub3QgZXhpc3Qgb3IgaWYgdGhlIGBtZXRob2RgIGlzIG5vdCBgY2FjaGVfaW1hZ2VgCjx8ZmltX2VuZHw+"]
["398d4526396df31d9256b3b957383e910717fd09-3","398d4526396df31d9256b3b957383e910717fd09","PHxmaW1fcHJlZml4fD4KIyAtKi0gdGVzdC1jYXNlLW5hbWU6IG1pbWljLnRlc3QudGVzdF9pcm9uaWMgLSotCiIiIgpBUEkgTW9jayBmb3IgSXJvbmljLgpodHRwOi8vZG9jcy5vcGVuc3RhY2sub3JnL2RldmVsb3Blci9pcm9uaWMvd2ViYXBpL3YxLmh0bWwKIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydCwgZGl2aXNpb24sIHVuaWNvZGVfbGl0ZXJhbHMKCmZyb20gbWltaWMucmVzdC5taW1pY2FwcCBpbXBvcnQgTWltaWNBcHAKCgpjbGFzcyBJcm9uaWNBcGkob2JqZWN0KToKICAgICIiIgogICAgUmVzdCBlbmRwb2ludHMgZm9yIHRoZSBJcm9uaWMgQVBJLgogICAgIiIiCgogICAgYXBwID0gTWltaWNBcHAoKQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb3JlKToKICAgICAgICAiIiIKICAgICAgICA6cGFyYW0gTWltaWNDb3JlIGNvcmU6IFRoZSBjb3JlIHRvIHdoaWNoIHRoZSBJcm9uaWMgQXBpIHdpbGwgYmUKICAgICAgICBjb21tdW5pY2F0aW5nLgogICAgICAgICIiIgogICAgICAgIHNlbGYuY29yZSA9IGNvcmUKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIEBhcHAucm91dGUoJy9ub2RlcycsIG1ldGhvZHM9WydQT1NUJ10pCiAgICBkZWYgY3JlYXRlX25vZGUoc2VsZiwgcmVxdWVzdCk6CiAgICAgICAgIiIiCiAgICAgICAgUmVzcG9uZHMgd2l0aCByZXNwb25zZSBjb2RlIDIwMSBhbmQgcmV0dXJucyB0aGUgbmV3bHkgY3JlYXRlZCBub2RlLgo8fGZpbV9lbmR8Pg=="]
["398d4526396df31d9256b3b957383e910717fd09-4","398d4526396df31d9256b3b957383e910717fd09","PHxmaW1fcHJlZml4fD4KIyAtKi0gdGVzdC1jYXNlLW5hbWU6IG1pbWljLnRlc3QudGVzdF9pcm9uaWMgLSotCiIiIgpBUEkgTW9jayBmb3IgSXJvbmljLgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cmh0dHA6Ly9kb2NzLm9wZW5zdGFjay5vcmcvZGV2ZWxvcGVyL2lyb25pYy93ZWJhcGkvdjEuaHRtbAoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0LCBkaXZpc2lvbiwgdW5pY29kZV9saXRlcmFscwo8fGZpbV9lbmR8Pg=="]
["398d4526396df31d9256b3b957383e910717fd09-5","398d4526396df31d9256b3b957383e910717fd09","PHxmaW1fcHJlZml4fD4KIyAtKi0gdGVzdC1jYXNlLW5hbWU6IG1pbWljLnRlc3QudGVzdF9pcm9uaWMgLSotCiIiIgpBUEkgTW9jayBmb3IgSXJvbmljLgpodHRwOi8vZG9jcy5vcGVuc3RhY2sub3JnL2RldmVsb3Blci9pcm9uaWMvd2ViYXBpL3YxLmh0bWwKIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydCwgZGl2aXNpb24sIHVuaWNvZGVfbGl0ZXJhbHMKCmZyb20gbWltaWMucmVzdC5taW1pY2FwcCBpbXBvcnQgTWltaWNBcHAKCgpjbGFzcyBJcm9uaWNBcGkob2JqZWN0KToKICAgICIiIgogICAgUmVzdCBlbmRwb2ludHMgZm9yIHRoZSBJcm9uaWMgQVBJLgogICAgIiIiCgogICAgYXBwID0gTWltaWNBcHAoKQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb3JlKToKICAgICAgICAiIiIKICAgICAgICA6cGFyYW0gTWltaWNDb3JlIGNvcmU6IFRoZSBjb3JlIHRvIHdoaWNoIHRoZSBJcm9uaWMgQXBpIHdpbGwgYmUKICAgICAgICBjb21tdW5pY2F0aW5nLgogICAgICAgICIiIgogICAgICAgIHNlbGYuY29yZSA9IGNvcmUKCiAgICBAYXBwLnJvdXRlKCcvbm9kZXMnLCBtZXRob2RzPVsnUE9TVCddKQogICAgZGVmIGNyZWF0ZV9ub2RlKHNlbGYsIHJlcXVlc3QpOgogICAgICAgICIiIgogICAgICAgIFJlc3BvbmRzIHdpdGggcmVzcG9uc2UgY29kZSAyMDEgYW5kIHJldHVybnMgdGhlIG5ld2x5IGNyZWF0ZWQgbm9kZS4KICAgICAgICAiIiIKICAgICAgICByZXR1cm4gc2VsZi5jb3JlLmlyb25pY19ub2RlX3N0b3JlLmNyZWF0ZV9ub2RlKHJlcXVlc3QpCgogICAgQGFwcC5yb3V0ZSgnL25vZGVzLzxzdHJpbmc6bm9kZV9pZD4nLCBtZXRob2RzPVsnREVMRVRFJ10pCiAgICBkZWYgZGVsZXRlX25vZGUoc2VsZiwgcmVxdWVzdCwgbm9kZV9pZCk6CiAgICAgICAgIiIiCiAgICAgICAgUmVzcG9uZHMgd2l0aCByZXNwb25zZSBjb2RlIDIwNCBhbmQgZGVsZXRlIHRoZSBub2RlLgo8fGZpbV9ob2xlfD4KICAgIEBhcHAucm91dGUoJy9ub2RlcycsIG1ldGhvZHM9WydHRVQnXSkKICAgIGRlZiBsaXN0X25vZGVzKHNlbGYsIHJlcXVlc3QpOgogICAgICAgICIiIgogICAgICAgIFJlc3BvbmRzIHdpdGggcmVzcG9uc2UgY29kZSAyMDAgd2l0aCBhIGxpc3Qgb2Ygbm9kZXMuCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuY29yZS5pcm9uaWNfbm9kZV9zdG9yZS5saXN0X25vZGVzKGluY2x1ZGVfZGV0YWlscz1GYWxzZSkKCiAgICBAYXBwLnJvdXRlKCcvbm9kZXMvZGV0YWlsJywgbWV0aG9kcz1bJ0dFVCddKQogICAgZGVmIGxpc3Rfbm9kZXNfd2l0aF9kZXRhaWxzKHNlbGYsIHJlcXVlc3QpOgogICAgICAgICIiIgogICAgICAgIFJlc3BvbmRzIHdpdGggcmVzcG9uc2UgY29kZSAyMDAgd2l0aCBhIGxpc3Qgb2Ygbm9kZXMgYW5kIGl0cyBkZXRhaWxzLgogICAgICAgICIiIgogICAgICAgIHJldHVybiBzZWxmLmNvcmUuaXJvbmljX25vZGVfc3RvcmUubGlzdF9ub2RlcyhpbmNsdWRlX2RldGFpbHM9VHJ1ZSkKCiAgICBAYXBwLnJvdXRlKCcvbm9kZXMvPHN0cmluZzpub2RlX2lkPicsIG1ldGhvZHM9WydHRVQnXSkKICAgIGRlZiBnZXRfbm9kZV9kZXRhaWxzKHNlbGYsIHJlcXVlc3QsIG5vZGVfaWQpOgogICAgICAgICIiIgogICAgICAgIFJlc3BvbmRzIHdpdGggcmVzcG9uc2UgY29kZSAyMDAgd2l0aCBkZXRhaWxzIG9mIHRoZSBub2Rlcy4KICAgICAgICAiIiIKICAgICAgICByZXR1cm4gc2VsZi5jb3JlLmlyb25pY19ub2RlX3N0b3JlLmdldF9ub2RlX2RldGFpbHMocmVxdWVzdCwgbm9kZV9pZCkKCiAgICBAYXBwLnJvdXRlKCcvbm9kZXMvPHN0cmluZzpub2RlX2lkPi9zdGF0ZXMvcHJvdmlzaW9uJywgbWV0aG9kcz1bJ1BVVCddKQogICAgZGVmIHNldF9ub2RlX3Byb3Zpc2lvbl9zdGF0ZShzZWxmLCByZXF1ZXN0LCBub2RlX2lkKToKICAgICAgICAiIiIKICAgICAgICBSZXNwb25kcyB3aXRoIHJlc3BvbnNlIGNvZGUgMjAyIGFuZCBzZXRzIHRoZSBwcm92aXNpb24gc3RhdGUgb2YKICAgICAgICB0aGUgbm9kZS4KICAgICAgICAiIiIKICAgICAgICByZXR1cm4gc2VsZi5jb3JlLmlyb25pY19ub2RlX3N0b3JlLnNldF9ub2RlX3Byb3Zpc2lvbl9zdGF0ZSgKICAgICAgICAgICAgcmVxdWVzdCwgbm9kZV9pZCkKCiAgICBAYXBwLnJvdXRlKCcvbm9kZXMvPHN0cmluZzpub2RlX2lkPi92ZW5kb3JfcGFzc3RocnUvPHN0cmluZzptZXRob2Q+JywgbWV0aG9kcz1bJ1BPU1QnXSkKICAgIGRlZiB2ZW5kb3JfcGFzc3RocnVfY2FjaGVfaW1hZ2Uoc2VsZiwgcmVxdWVzdCwgbm9kZV9pZCwgbWV0aG9kKToKICAgICAgICAiIiIKICAgICAgICBSZXNwb25kcyB3aXRoIHJlc3BvbnNlIGNvZGUgMjAyIGFuZCBzZXRzIHRoZSA6b2JqOmBOb2RlYCdzIGNhY2hlX2ltYWdlX2lkCiAgICAgICAgYW5kIGNhY2hlX3N0YXR1cy4KICAgICAgICBSZXR1cm5zIDQwMCBpZiBgbm9kZV9pZGAgZG9lcyBub3QgZXhpc3Qgb3IgaWYgdGhlIGBtZXRob2RgIGlzIG5vdCBgY2FjaGVfaW1hZ2VgCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuY29yZS5pcm9uaWNfbm9kZV9zdG9yZS5jYWNoZV9pbWFnZV91c2luZ192ZW5kb3JfcGFzc3RocnUoCiAgICAgICAgICAgIHJlcXVlc3QsIG5vZGVfaWQsIG1ldGhvZCkKPHxmaW1fc3VmZml4fD4KICAgICAgICAiIiIKICAgICAgICByZXR1cm4gc2VsZi5jb3JlLmlyb25pY19ub2RlX3N0b3JlLmRlbGV0ZV9ub2RlKHJlcXVlc3QsIG5vZGVfaWQpCgo8fGZpbV9lbmR8Pg=="]
["e43c12ec40cec714008ae1b5811a6a92e41ae316-1","e43c12ec40cec714008ae1b5811a6a92e41ae316","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KIyBQcmludCBhIGxpc3Qgb2Ygc3ltYm9scyBleHBvcnRlZCBieSBzb21lIGhlYWRlcnMgdGhhdCB3b3VsZAojIG90aGVyd2lzZSBiZSBpbiB0aGUgdXNlcidzIG5hbWVzcGFjZS4KIyBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KIwojIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgojIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKIyB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCjx8ZmltX2hvbGV8PgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKIyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCiMgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KCmltcG9ydCBhcmdwYXJzZQoKaW1wb3J0IGdsaWJjY29uZm9ybQoKIyBFeHRyYSBzeW1ib2xzIHBvc3NpYmx5IG5vdCBmb3VuZCB0aHJvdWdoIC1hdXgtaW5mbyBidXQgc3RpbGwKIyByZXNlcnZlZCBieSB0aGUgc3RhbmRhcmQ6IGVpdGhlciBkYXRhIHN5bWJvbHMsIG9yIHN5bWJvbHMgd2hlcmUgdGhlCiMgc3RhbmRhcmQgbGVhdmVzIHVuc3BlY2lmaWVkIHdoZXRoZXIgdGhlIGlkZW50aWZpZXIgaXMgYSBtYWNybyBvcgojIGRlZmluZWQgd2l0aCBleHRlcm5hbCBsaW5rYWdlLgpFWFRSQV9TWU1TID0ge30KRVhUUkFfU1lNU1snSVNPJ10gPSB7J2Vycm5vJywgJ3NldGptcCcsICd2YV9lbmQnfQpFWFRSQV9TWU1TWydJU085OSddID0gRVhUUkFfU1lNU1snSVNPJ10gfCB7J21hdGhfZXJyaGFuZGxpbmcnfQojIHN0ZGF0b21pYy5oIG5vdCB5ZXQgY292ZXJlZCBieSBjb25mb3JtYW5jZSB0ZXN0czsgYXMgcGVyIERSIzQxOSwgYWxsCiMgdGhlIGdlbmVyaWMgZnVuY3Rpb25zIHRoZXJlIG9yIG1heSBub3QgYmUgZGVmaW5lZCB3aXRoIGV4dGVybmFsCiMgbGlua2FnZSAoYnV0IGFyZSByZXNlcnZlZCBpbiBhbnkgY2FzZSkuCkVYVFJBX1NZTVNbJ0lTTzExJ10gPSBFWFRSQV9TWU1TWydJU085OSddCiMgVGhlIGZvbGxvd2luZyBsaXN0cyBtYXkgbm90IGJlIGV4aGF1c3RpdmUuCkVYVFJBX1NZTVNbJ1BPU0lYJ10gPSAoRVhUUkFfU1lNU1snSVNPJ10KICAgICAgICAgICAgICAgICAgICAgICB8IHsnZW52aXJvbicsICdzaWdzZXRqbXAnLCAnb3B0YXJnJywgJ29wdGluZCcsICdvcHRlcnInLAogICAgICAgICAgICAgICAgICAgICAgICAgICdvcHRvcHQnLCAndHpuYW1lJ30pCkVYVFJBX1NZTVNbJ1hQRzQnXSA9IChFWFRSQV9TWU1TWydQT1NJWCddCiAgICAgICAgICAgICAgICAgICAgICB8IHsnc2lnbmdhbScsICdsb2MxJywgJ2xvYzInLCAnbG9jcycsICdkYXlsaWdodCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAndGltZXpvbmUnfSkKRVhUUkFfU1lNU1snWFBHNDInXSA9IEVYVFJBX1NZTVNbJ1hQRzQnXSB8IHsnZ2V0ZGF0ZV9lcnInLCAnaF9lcnJubyd9CkVYVFJBX1NZTVNbJ1VOSVg5OCddID0gRVhUUkFfU1lNU1snWFBHNDInXQpFWFRSQV9TWU1TWydYT1BFTjJLJ10gPSAoRVhUUkFfU1lNU1snUE9TSVgnXQogICAgICAgICAgICAgICAgICAgICAgICAgfCB7J3NpZ25nYW0nLCAnZGF5bGlnaHQnLCAndGltZXpvbmUnLCAnZ2V0ZGF0ZV9lcnInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hfZXJybm8nLCAnaW42YWRkcl9hbnknLCAnaW42YWRkcl9sb29wYmFjayd9KQpFWFRSQV9TWU1TWydQT1NJWDIwMDgnXSA9IChFWFRSQV9TWU1TWydQT1NJWCddCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeydpbjZhZGRyX2FueScsICdpbjZhZGRyX2xvb3BiYWNrJ30pCkVYVFJBX1NZTVNbJ1hPUEVOMks4J10gPSAoRVhUUkFfU1lNU1snUE9TSVgyMDA4J10KICAgICAgICAgICAgICAgICAgICAgICAgICB8IHsnc2lnbmdhbScsICdkYXlsaWdodCcsICd0aW1lem9uZScsICdnZXRkYXRlX2Vycid9KQoKCmRlZiBtYWluKCk6CiAgICAiIiJUaGUgbWFpbiBlbnRyeSBwb2ludC4iIiIKICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdMaXN0IGV4cG9ydGVkIHN5bWJvbHMuJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0taGVhZGVycycsIG1ldGF2YXI9J0hFQURFUlMnLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdsaXN0IG9mIGhlYWRlcnMnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zdGFuZGFyZCcsIG1ldGF2YXI9J1NURCcsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3N0YW5kYXJkIHRvIHVzZSB3aGVuIHByb2Nlc3NpbmcgaGVhZGVycycpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNjJywgbWV0YXZhcj0nQ0MnLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdDIGNvbXBpbGVyIHRvIHVzZScpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZsYWdzJywgbWV0YXZhcj0nQ0ZMQUdTJywKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQ29tcGlsZXIgZmxhZ3MgdG8gdXNlIHdpdGggQ0MnKQogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKICAgIGZucyA9IHNldCgpCiAgICBjb21waWxlciA9ICclcyAlcycgJSAoYXJncy5jYywgYXJncy5mbGFncykKICAgIGZvciBoZWFkZXIgaW4gYXJncy5oZWFkZXJzLnNwbGl0KCk6CiAgICAgICAgZm5zIHw9IGdsaWJjY29uZm9ybS5saXN0X2V4cG9ydGVkX2Z1bmN0aW9ucyhjb21waWxlciwgYXJncy5zdGFuZGFyZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcikKICAgIGZucyB8PSBFWFRSQV9TWU1TW2FyZ3Muc3RhbmRhcmRdCiAgICBwcmludCgnXG4nLmpvaW4oc29ydGVkKGZuIGZvciBmbiBpbiBmbnMgaWYgbm90IGZuLnN0YXJ0c3dpdGgoJ18nKSkpKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBtYWluKCkKPHxmaW1fc3VmZml4fD4KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIwo8fGZpbV9lbmR8Pg=="]
["e43c12ec40cec714008ae1b5811a6a92e41ae316-2","e43c12ec40cec714008ae1b5811a6a92e41ae316","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KIyBQcmludCBhIGxpc3Qgb2Ygc3ltYm9scyBleHBvcnRlZCBieSBzb21lIGhlYWRlcnMgdGhhdCB3b3VsZAojIG90aGVyd2lzZSBiZSBpbiB0aGUgdXNlcidzIG5hbWVzcGFjZS4KIyBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KIwojIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgojIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKIyB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIwo8fGZpbV9lbmR8Pg=="]
["e43c12ec40cec714008ae1b5811a6a92e41ae316-3","e43c12ec40cec714008ae1b5811a6a92e41ae316","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KIyBQcmludCBhIGxpc3Qgb2Ygc3ltYm9scyBleHBvcnRlZCBieSBzb21lIGhlYWRlcnMgdGhhdCB3b3VsZAojIG90aGVyd2lzZSBiZSBpbiB0aGUgdXNlcidzIG5hbWVzcGFjZS4KIyBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgojCiMgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwojIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo8fGZpbV9lbmR8Pg=="]
["f2552d8ecd33b6ff62cd4ed2b17f52c2903bf112-1","f2552d8ecd33b6ff62cd4ed2b17f52c2903bf112","PHxmaW1fcHJlZml4fD4KIyBJbXBvcnQgbGlicmFyaWVzCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzY2lweS5zdGF0cyBhcyBzdGF0cwoKbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZT0nbG9ncy9tb2RlbF9kZXZlbG9wbWVudC50eHQnLAogICAgICAgICAgICAgICAgICAgIGZpbGVtb2RlPSdhJywKICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9JyUoYXNjdGltZSlzICUobWVzc2FnZSlzJywKICAgICAgICAgICAgICAgICAgICBkYXRlZm10PSIlWS0lbS0lZCAlSDolTTolUyIpCgojIEltcG9ydCBkYXRhCmRhdGEgPSBwZC5yZWFkX2NzdignRGF0YXNldFxhZHVsdC5jc3YnKQoKIyBEcm9wIGNvbHVtbnMKZGF0YS5kcm9wKFsnd29ya2NsYXNzJywgJ2VkdWNhdGlvbicsICdlZHVjYXRpb24tbnVtJywKICAgICAgICAgICAnb2NjdXBhdGlvbicsJ3JlbGF0aW9uc2hpcCcsICdyYWNlJ10sIAogICAgICAgICAgICBheGlzPTEsIGlucGxhY2U9VHJ1ZSkKCmxvZ2dpbmcud2FybmluZygnLScqMTAwKQpsb2dnaW5nLndhcm5pbmcoJ0RBVEFfUFJFUFJPQ0VTU0lOR18zJykKCmxvZ2dpbmcud2FybmluZygnQ29ycmVsYXRpb24gYmV0d2VlbiBhIGJpbmFyeSB2YXJpYWJsZSBhbmQgY29udGludW91cyB2YXJpYWJsZXMsIHRoZSBwb2ludCBiaXNlcmlhbCBjb3JyZWxhdGlvbiBoYXMgYmVlbiB1c2VkJykKCmZvciBpIGluIGRhdGEuY29sdW1uczoKICAgIHByaW50KGksICc6Jywgc3RhdHMucG9pbnRiaXNlcmlhbHIoZGF0YVsnc2FsYXJ5J10sIGRhdGFbaV0pWzBdKQoKbG9nZ2luZy53YXJuaW5nKCJEcm9wICdmbmx3Z3QnIGFuZCAnbWFyaXRhbC1zdGF0dXMnIGNvbHVtbnMuIFRoZXNlIGNvbHVtbnMgc2hvd3MgbmVnYXRpdmUgY29ycmVsYXRpb24gd2l0aCAnc2FsYXJ5Jy4iKQoKZGF0YS5kcm9wKFsnZm5sd2d0JywgJ21hcml0YWwtc3RhdHVzJ10sIGF4aXM9MSwgaW5wbGFjZT1UcnVlKQoKbG9nZ2luZy53YXJuaW5nKCdTYXZlIGZpbmFsIGRhdGFzZXQgdG8gcmVwb3J0cyBmb2xkZXInKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRhdGEudG9fY3N2KCdmaW5hbF9kYXRhc2V0LmNzdicsIGluZGV4PUZhbHNlKQoKbG9nZ2luZy53YXJuaW5nKCdkYXRhX3ByZXByb2Nlc3NpbmdfMyBpcyBkb25lLicpCjx8ZmltX2VuZHw+"]
["f2552d8ecd33b6ff62cd4ed2b17f52c2903bf112-2","f2552d8ecd33b6ff62cd4ed2b17f52c2903bf112","PHxmaW1fcHJlZml4fD4KIyBJbXBvcnQgbGlicmFyaWVzCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzY2lweS5zdGF0cyBhcyBzdGF0cwoKbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZT0nbG9ncy9tb2RlbF9kZXZlbG9wbWVudC50eHQnLAogICAgICAgICAgICAgICAgICAgIGZpbGVtb2RlPSdhJywKICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9JyUoYXNjdGltZSlzICUobWVzc2FnZSlzJywKICAgICAgICAgICAgICAgICAgICBkYXRlZm10PSIlWS0lbS0lZCAlSDolTTolUyIpCgojIEltcG9ydCBkYXRhCmRhdGEgPSBwZC5yZWFkX2NzdignRGF0YXNldFxhZHVsdC5jc3YnKQoKIyBEcm9wIGNvbHVtbnMKZGF0YS5kcm9wKFsnd29ya2NsYXNzJywgJ2VkdWNhdGlvbicsICdlZHVjYXRpb24tbnVtJywKICAgICAgICAgICAnb2NjdXBhdGlvbicsJ3JlbGF0aW9uc2hpcCcsICdyYWNlJ10sIAogICAgICAgICAgICBheGlzPTEsIGlucGxhY2U9VHJ1ZSkKCmxvZ2dpbmcud2FybmluZygnLScqMTAwKQpsb2dnaW5nLndhcm5pbmcoJ0RBVEFfUFJFUFJPQ0VTU0lOR18zJykKCmxvZ2dpbmcud2FybmluZygnQ29ycmVsYXRpb24gYmV0d2VlbiBhIGJpbmFyeSB2YXJpYWJsZSBhbmQgY29udGludW91cyB2YXJpYWJsZXMsIHRoZSBwb2ludCBiaXNlcmlhbCBjb3JyZWxhdGlvbiBoYXMgYmVlbiB1c2VkJykKCmZvciBpIGluIGRhdGEuY29sdW1uczoKICAgIHByaW50KGksICc6Jywgc3RhdHMucG9pbnRiaXNlcmlhbHIoZGF0YVsnc2FsYXJ5J10sIGRhdGFbaV0pWzBdKQoKbG9nZ2luZy53YXJuaW5nKCJEcm9wICdmbmx3Z3QnIGFuZCAnbWFyaXRhbC1zdGF0dXMnIGNvbHVtbnMuIFRoZXNlIGNvbHVtbnMgc2hvd3MgbmVnYXRpdmUgY29ycmVsYXRpb24gd2l0aCAnc2FsYXJ5Jy4iKQoKZGF0YS5kcm9wKFsnZm5sd2d0JywgJ21hcml0YWwtc3RhdHVzJ10sIGF4aXM9MSwgaW5wbGFjZT1UcnVlKQoKbG9nZ2luZy53YXJuaW5nKCdTYXZlIGZpbmFsIGRhdGFzZXQgdG8gcmVwb3J0cyBmb2xkZXInKQpkYXRhLnRvX2NzdignZmluYWxfZGF0YXNldC5jc3YnLCBpbmRleD1GYWxzZSkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KbG9nZ2luZy53YXJuaW5nKCdkYXRhX3ByZXByb2Nlc3NpbmdfMyBpcyBkb25lLicpCjx8ZmltX2VuZHw+"]
["f2552d8ecd33b6ff62cd4ed2b17f52c2903bf112-3","f2552d8ecd33b6ff62cd4ed2b17f52c2903bf112","PHxmaW1fcHJlZml4fD4KIyBJbXBvcnQgbGlicmFyaWVzCjx8ZmltX2hvbGV8PgoKbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZT0nbG9ncy9tb2RlbF9kZXZlbG9wbWVudC50eHQnLAogICAgICAgICAgICAgICAgICAgIGZpbGVtb2RlPSdhJywKICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9JyUoYXNjdGltZSlzICUobWVzc2FnZSlzJywKICAgICAgICAgICAgICAgICAgICBkYXRlZm10PSIlWS0lbS0lZCAlSDolTTolUyIpCgojIEltcG9ydCBkYXRhCmRhdGEgPSBwZC5yZWFkX2NzdignRGF0YXNldFxhZHVsdC5jc3YnKQoKIyBEcm9wIGNvbHVtbnMKZGF0YS5kcm9wKFsnd29ya2NsYXNzJywgJ2VkdWNhdGlvbicsICdlZHVjYXRpb24tbnVtJywKICAgICAgICAgICAnb2NjdXBhdGlvbicsJ3JlbGF0aW9uc2hpcCcsICdyYWNlJ10sIAogICAgICAgICAgICBheGlzPTEsIGlucGxhY2U9VHJ1ZSkKCmxvZ2dpbmcud2FybmluZygnLScqMTAwKQpsb2dnaW5nLndhcm5pbmcoJ0RBVEFfUFJFUFJPQ0VTU0lOR18zJykKCmxvZ2dpbmcud2FybmluZygnQ29ycmVsYXRpb24gYmV0d2VlbiBhIGJpbmFyeSB2YXJpYWJsZSBhbmQgY29udGludW91cyB2YXJpYWJsZXMsIHRoZSBwb2ludCBiaXNlcmlhbCBjb3JyZWxhdGlvbiBoYXMgYmVlbiB1c2VkJykKCmZvciBpIGluIGRhdGEuY29sdW1uczoKICAgIHByaW50KGksICc6Jywgc3RhdHMucG9pbnRiaXNlcmlhbHIoZGF0YVsnc2FsYXJ5J10sIGRhdGFbaV0pWzBdKQoKbG9nZ2luZy53YXJuaW5nKCJEcm9wICdmbmx3Z3QnIGFuZCAnbWFyaXRhbC1zdGF0dXMnIGNvbHVtbnMuIFRoZXNlIGNvbHVtbnMgc2hvd3MgbmVnYXRpdmUgY29ycmVsYXRpb24gd2l0aCAnc2FsYXJ5Jy4iKQoKZGF0YS5kcm9wKFsnZm5sd2d0JywgJ21hcml0YWwtc3RhdHVzJ10sIGF4aXM9MSwgaW5wbGFjZT1UcnVlKQoKbG9nZ2luZy53YXJuaW5nKCdTYXZlIGZpbmFsIGRhdGFzZXQgdG8gcmVwb3J0cyBmb2xkZXInKQpkYXRhLnRvX2NzdignZmluYWxfZGF0YXNldC5jc3YnLCBpbmRleD1GYWxzZSkKCmxvZ2dpbmcud2FybmluZygnZGF0YV9wcmVwcm9jZXNzaW5nXzMgaXMgZG9uZS4nKQo8fGZpbV9zdWZmaXh8PgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbG9nZ2luZwppbXBvcnQgc2NpcHkuc3RhdHMgYXMgc3RhdHMKPHxmaW1fZW5kfD4="]
["f2552d8ecd33b6ff62cd4ed2b17f52c2903bf112-4","f2552d8ecd33b6ff62cd4ed2b17f52c2903bf112","PHxmaW1fcHJlZml4fD4KIyBJbXBvcnQgbGlicmFyaWVzCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzY2lweS5zdGF0cyBhcyBzdGF0cwoKbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZT0nbG9ncy9tb2RlbF9kZXZlbG9wbWVudC50eHQnLAo8fGZpbV9ob2xlfD4KIyBJbXBvcnQgZGF0YQpkYXRhID0gcGQucmVhZF9jc3YoJ0RhdGFzZXRcYWR1bHQuY3N2JykKCiMgRHJvcCBjb2x1bW5zCmRhdGEuZHJvcChbJ3dvcmtjbGFzcycsICdlZHVjYXRpb24nLCAnZWR1Y2F0aW9uLW51bScsCiAgICAgICAgICAgJ29jY3VwYXRpb24nLCdyZWxhdGlvbnNoaXAnLCAncmFjZSddLCAKICAgICAgICAgICAgYXhpcz0xLCBpbnBsYWNlPVRydWUpCgpsb2dnaW5nLndhcm5pbmcoJy0nKjEwMCkKbG9nZ2luZy53YXJuaW5nKCdEQVRBX1BSRVBST0NFU1NJTkdfMycpCgpsb2dnaW5nLndhcm5pbmcoJ0NvcnJlbGF0aW9uIGJldHdlZW4gYSBiaW5hcnkgdmFyaWFibGUgYW5kIGNvbnRpbnVvdXMgdmFyaWFibGVzLCB0aGUgcG9pbnQgYmlzZXJpYWwgY29ycmVsYXRpb24gaGFzIGJlZW4gdXNlZCcpCgpmb3IgaSBpbiBkYXRhLmNvbHVtbnM6CiAgICBwcmludChpLCAnOicsIHN0YXRzLnBvaW50YmlzZXJpYWxyKGRhdGFbJ3NhbGFyeSddLCBkYXRhW2ldKVswXSkKCmxvZ2dpbmcud2FybmluZygiRHJvcCAnZm5sd2d0JyBhbmQgJ21hcml0YWwtc3RhdHVzJyBjb2x1bW5zLiBUaGVzZSBjb2x1bW5zIHNob3dzIG5lZ2F0aXZlIGNvcnJlbGF0aW9uIHdpdGggJ3NhbGFyeScuIikKCmRhdGEuZHJvcChbJ2ZubHdndCcsICdtYXJpdGFsLXN0YXR1cyddLCBheGlzPTEsIGlucGxhY2U9VHJ1ZSkKCmxvZ2dpbmcud2FybmluZygnU2F2ZSBmaW5hbCBkYXRhc2V0IHRvIHJlcG9ydHMgZm9sZGVyJykKZGF0YS50b19jc3YoJ2ZpbmFsX2RhdGFzZXQuY3N2JywgaW5kZXg9RmFsc2UpCgpsb2dnaW5nLndhcm5pbmcoJ2RhdGFfcHJlcHJvY2Vzc2luZ18zIGlzIGRvbmUuJykKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICBmaWxlbW9kZT0nYScsCiAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSclKGFzY3RpbWUpcyAlKG1lc3NhZ2UpcycsCiAgICAgICAgICAgICAgICAgICAgZGF0ZWZtdD0iJVktJW0tJWQgJUg6JU06JVMiKQoKPHxmaW1fZW5kfD4="]
["f2552d8ecd33b6ff62cd4ed2b17f52c2903bf112-5","f2552d8ecd33b6ff62cd4ed2b17f52c2903bf112","PHxmaW1fcHJlZml4fD4KIyBJbXBvcnQgbGlicmFyaWVzCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzY2lweS5zdGF0cyBhcyBzdGF0cwoKbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZT0nbG9ncy9tb2RlbF9kZXZlbG9wbWVudC50eHQnLAogICAgICAgICAgICAgICAgICAgIGZpbGVtb2RlPSdhJywKPHxmaW1faG9sZXw+CiMgSW1wb3J0IGRhdGEKZGF0YSA9IHBkLnJlYWRfY3N2KCdEYXRhc2V0XGFkdWx0LmNzdicpCgojIERyb3AgY29sdW1ucwpkYXRhLmRyb3AoWyd3b3JrY2xhc3MnLCAnZWR1Y2F0aW9uJywgJ2VkdWNhdGlvbi1udW0nLAogICAgICAgICAgICdvY2N1cGF0aW9uJywncmVsYXRpb25zaGlwJywgJ3JhY2UnXSwgCiAgICAgICAgICAgIGF4aXM9MSwgaW5wbGFjZT1UcnVlKQoKbG9nZ2luZy53YXJuaW5nKCctJyoxMDApCmxvZ2dpbmcud2FybmluZygnREFUQV9QUkVQUk9DRVNTSU5HXzMnKQoKbG9nZ2luZy53YXJuaW5nKCdDb3JyZWxhdGlvbiBiZXR3ZWVuIGEgYmluYXJ5IHZhcmlhYmxlIGFuZCBjb250aW51b3VzIHZhcmlhYmxlcywgdGhlIHBvaW50IGJpc2VyaWFsIGNvcnJlbGF0aW9uIGhhcyBiZWVuIHVzZWQnKQoKZm9yIGkgaW4gZGF0YS5jb2x1bW5zOgogICAgcHJpbnQoaSwgJzonLCBzdGF0cy5wb2ludGJpc2VyaWFscihkYXRhWydzYWxhcnknXSwgZGF0YVtpXSlbMF0pCgpsb2dnaW5nLndhcm5pbmcoIkRyb3AgJ2ZubHdndCcgYW5kICdtYXJpdGFsLXN0YXR1cycgY29sdW1ucy4gVGhlc2UgY29sdW1ucyBzaG93cyBuZWdhdGl2ZSBjb3JyZWxhdGlvbiB3aXRoICdzYWxhcnknLiIpCgpkYXRhLmRyb3AoWydmbmx3Z3QnLCAnbWFyaXRhbC1zdGF0dXMnXSwgYXhpcz0xLCBpbnBsYWNlPVRydWUpCgpsb2dnaW5nLndhcm5pbmcoJ1NhdmUgZmluYWwgZGF0YXNldCB0byByZXBvcnRzIGZvbGRlcicpCmRhdGEudG9fY3N2KCdmaW5hbF9kYXRhc2V0LmNzdicsIGluZGV4PUZhbHNlKQoKbG9nZ2luZy53YXJuaW5nKCdkYXRhX3ByZXByb2Nlc3NpbmdfMyBpcyBkb25lLicpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSclKGFzY3RpbWUpcyAlKG1lc3NhZ2UpcycsCiAgICAgICAgICAgICAgICAgICAgZGF0ZWZtdD0iJVktJW0tJWQgJUg6JU06JVMiKQoKPHxmaW1fZW5kfD4="]
["f25caf90ebfcdc34a5a16352c7be549a535067a5-1","f25caf90ebfcdc34a5a16352c7be549a535067a5","PHxmaW1fcHJlZml4fD4KCiMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCkNyZWF0ZWQgb24gRnJpIE5vdiAyMCAxNDozMToxMSAyMDIwCgpAYXV0aG9yOiBpa2FoZWlhMQoKSGVscGVyIGZ1bmN0aW9ucyBmb3IgcHl0ZXN0IHRlc3QgZGF0YSBsb2FkaW5nLgpMb2FkIGEgY3N2IGZpbGUgYW5kIGNvbnZlcnQgaXQgdXNpbmcgc2VwYXJhdGUgbG9hZGluZyBmdW5jdGlvbnMgZm9yOgogICAgMSkgTnVtcHkgYXJyYXkgZm9ybWF0CiAgICAyKSBQYW5kYXMgc2VyaWVzIGZvcm1hdAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAzKSBQYW5kYXMgZGF0YWZyYW1lIGZvcm1hdAoKPHxmaW1fZW5kfD4="]
["f25caf90ebfcdc34a5a16352c7be549a535067a5-2","f25caf90ebfcdc34a5a16352c7be549a535067a5","PHxmaW1fcHJlZml4fD4KCiMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCkNyZWF0ZWQgb24gRnJpIE5vdiAyMCAxNDozMToxMSAyMDIwCgpAYXV0aG9yOiBpa2FoZWlhMQoKSGVscGVyIGZ1bmN0aW9ucyBmb3IgcHl0ZXN0IHRlc3QgZGF0YSBsb2FkaW5nLgpMb2FkIGEgY3N2IGZpbGUgYW5kIGNvbnZlcnQgaXQgdXNpbmcgc2VwYXJhdGUgbG9hZGluZyBmdW5jdGlvbnMgZm9yOgogICAgMSkgTnVtcHkgYXJyYXkgZm9ybWF0CiAgICAyKSBQYW5kYXMgc2VyaWVzIGZvcm1hdAogICAgMykgUGFuZGFzIGRhdGFmcmFtZSBmb3JtYXQKCiIiIgoKaW1wb3J0IHBhbmRhcyBhcyBwZApmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKCiMgVE9ETyBjb252ZXJ0IHRoZXNlcyBpbnRvIHNpbmdsZSBmdW5jdGlvbiEKJycnCmRlZiBzZXR1cF9kYXRhKG9wZW5fbmFtZSwgcmV0X3R5cGUpOgogICAgIAogICAgd2l0aCBvcGVuX25hbWUub3BlbigncicpIGFzIHJlYWRfZmlsZToKICAgICAgICBkZiA9IHBkLnJlYWRfY3N2KHJlYWRfZmlsZSwgaW5kZXhfY29sPTApCiAgICAgICAgZGZbJ3RpbWUnXSA9IHBkLnRvX2RhdGV0aW1lKGRmWyd0aW1lJ10pCiAgICAgICAgZGYgPSBkZi5zZXRfaW5kZXgoJ3RpbWUnKQogICAgICAgIAogICAgICAgIGlmIHJldF90eXBlID09ICdudW1weSc6CiAgICAgICAgICAgIHJldHVybiBkZlsnbGV2ZWwnXS52YWx1ZXMKICAgICAgICBlbGlmIHJldF90eXBlID09ICdzZXJpZXMnOgogICAgICAgICAgICByZXR1cm4gZGZbJ2xldmVsJ10KICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gZGYKJycnCiAgICAKZGVmIHNldHVwX25wKCk6CiAgICAiIiIKPHxmaW1faG9sZXw+CiAgICBfID0gbnVtcHkgYXJyYXkKICAgICAgICBBIDFEIG51bXB5IGFycmF5IGNvbnRhaW5pbmcgdGhlIHRlc3QgZGF0YSB0aW1lIHNlcmllcy4KCiAgICAiIiIKICAgIAogICAgb3Blbl9uYW1lID0gUGF0aC5jd2QoKSAvICdEYXRhJyAvICdUZXN0X2RhdGEuY3N2JwogICAgCiAgICB3aXRoIG9wZW5fbmFtZS5vcGVuKCdyJykgYXMgcmVhZF9maWxlOgogICAgICAgIGRmID0gcGQucmVhZF9jc3YocmVhZF9maWxlLCBpbmRleF9jb2w9MCkKICAgICAgICBkZi5pbmRleCA9IHBkLnRvX2RhdGV0aW1lKGRmLmluZGV4KQogICAgICAgICNkZlsndGltZSddID0gcGQudG9fZGF0ZXRpbWUoZGZbJ3RpbWUnXSkKICAgICAgICAjZGYgPSBkZi5zZXRfaW5kZXgoJ3RpbWUnKQogICAgICAgIHJldHVybiBkZlsnbGV2ZWwnXS52YWx1ZXMKICAgIAoKZGVmIHNldHVwX3BzKCk6CiAgICAiIiIKICAgIExvYWQgdGhlIHRlc3QgZGF0YSBhbmQgY29udmVydCB0aGUgdmFsdWVzIGludG8gcGFuZGFzIFNlcmllcy4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBfID0gcGFuZGFzIFNlcmllcwogICAgICAgIEEgcGFuZGFzIHNlcmllcyBjb250YWluaW5nIHRoZSB0ZXN0IGRhdGEgdGltZSBzZXJpZXMuCgogICAgIiIiCgogICAgb3Blbl9uYW1lID0gUGF0aC5jd2QoKSAvICdEYXRhJyAvICdUZXN0X2RhdGEuY3N2JwoKICAgIHdpdGggb3Blbl9uYW1lLm9wZW4oJ3InKSBhcyByZWFkX2ZpbGU6CiAgICAgICAgZGYgPSBwZC5yZWFkX2NzdihyZWFkX2ZpbGUsIGluZGV4X2NvbD0wKQogICAgICAgIGRmLmluZGV4ID0gcGQudG9fZGF0ZXRpbWUoZGYuaW5kZXgpCiAgICAgICAgI2RmWyd0aW1lJ10gPSBwZC50b19kYXRldGltZShkZlsndGltZSddKQogICAgICAgICNkZiA9IGRmLnNldF9pbmRleCgndGltZScpCiAgICAgICAgcmV0dXJuIGRmWydsZXZlbCddCiAgCmRlZiBzZXR1cF9wZCgpOgogICAgIiIiCiAgICBMb2FkIHRoZSB0ZXN0IGRhdGEgYW5kIGNvbnZlcnQgdGhlIHZhbHVlcyBpbnRvIHBhbmRhcyBEYXRhRnJhbWUuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgXyA9IHBhbmRhcyBEYXRhRnJhbWUKICAgICAgICBBIHBhbmRhcyBEYXRhRnJhbWUgY29udGFpbmluZyB0aGUgdGVzdCBkYXRhIHRpbWUgc2VyaWVzLgoKICAgICIiIgogICAgCiAgICBvcGVuX25hbWUgPSBQYXRoLmN3ZCgpIC8gJ0RhdGEnIC8gJ1Rlc3RfZGF0YS5jc3YnCgogICAgd2l0aCBvcGVuX25hbWUub3BlbigncicpIGFzIHJlYWRfZmlsZToKICAgICAgICBkZiA9IHBkLnJlYWRfY3N2KHJlYWRfZmlsZSwgaW5kZXhfY29sPTApCiAgICAgICAgZGYuaW5kZXggPSBwZC50b19kYXRldGltZShkZi5pbmRleCkKICAgICAgICAjZGZbJ3RpbWUnXSA9IHBkLnRvX2RhdGV0aW1lKGRmWyd0aW1lJ10pCiAgICAgICAgI2RmID0gZGYuc2V0X2luZGV4KCd0aW1lJykKICAgICAgICByZXR1cm4gZGYKPHxmaW1fc3VmZml4fD4KICAgIExvYWQgdGhlIHRlc3QgZGF0YSBhbmQgY29udmVydCB0aGUgdmFsdWVzIGludG8gMUQgbnVtcHkgYXJyYXkuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQo8fGZpbV9lbmR8Pg=="]
["c8abb6ccd28785257245a43f8f00ed055a2db706-1","c8abb6ccd28785257245a43f8f00ed055a2db706","PHxmaW1fcHJlZml4fD4KSU5QVVRQQVRIID0gImlucHV0LnR4dCIKI0lOUFVUUEFUSCA9ICJpbnB1dC10ZXN0LnR4dCIKd2l0aCBvcGVuKElOUFVUUEFUSCkgYXMgaWZpbGU6CiAgICByYXcgPSBpZmlsZS5yZWFkKCkKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKc3lzdGVtID0gZGVmYXVsdGRpY3Qoc2V0KQpmb3IgYSwgYiBpbiAobGluZS5zcGxpdCgiLSIpIGZvciBsaW5lIGluIHJhdy5zdHJpcCgpLnNwbGl0KCJcbiIpKToKICAgIHN5c3RlbVthXS5hZGQoYikKICAgIHN5c3RlbVtiXS5hZGQoYSkKCmZyb20gZnVuY3Rvb2xzIGltcG9ydCBjYWNoZQpAY2FjaGUKZGVmIHBhdGhzX3RvX2VuZChjYXZlOiBzdHIsIHByaW9yX3Zpc2l0ZWQ6IGZyb3plbnNldFtpbnRdLCBhbGxvd19vbmVfcmVwZWF0OiBib29sKSAtPiBpbnQ6CiAgICB2aXNpdGVkID0gcHJpb3JfdmlzaXRlZCB8IHtjYXZlfQogICAgaWYgY2F2ZSA9PSAiZW5kIjoKICAgICAgICByZXR1cm4gMQogICAgbiA9IDAKICAgIGZvciBhZGphY2VudCBpbiBzeXN0ZW1bY2F2ZV06CiAgICAgICAgaWYgYWRqYWNlbnQgPT0gInN0YXJ0IjoKICAgICAgICAgICAgY29udGludWUKICAgICAgICBlbGlmIGFkamFjZW50WzBdLmlzdXBwZXIoKToKICAgICAgICAgICAgbiArPSBwYXRoc190b19lbmQoYWRqYWNlbnQsIHZpc2l0ZWQsIGFsbG93X29uZV9yZXBlYXQpCiAgICAgICAgZWxpZiBhZGphY2VudCBub3QgaW4gdmlzaXRlZDoKICAgICAgICAgICAgbiArPSBwYXRoc190b19lbmQoYWRqYWNlbnQsIHZpc2l0ZWQsIGFsbG93X29uZV9yZXBlYXQpCjx8ZmltX2hvbGV8PgogICAgcmV0dXJuIG4KCnByaW50KHBhdGhzX3RvX2VuZCgic3RhcnQiLCBmcm96ZW5zZXQoKSwgRmFsc2UpKQpwcmludChwYXRoc190b19lbmQoInN0YXJ0IiwgZnJvemVuc2V0KCksIFRydWUpKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGVsaWYgYWxsb3dfb25lX3JlcGVhdDoKICAgICAgICAgICAgbiArPSBwYXRoc190b19lbmQoYWRqYWNlbnQsIHZpc2l0ZWQsIEZhbHNlKQo8fGZpbV9lbmR8Pg=="]
["c8abb6ccd28785257245a43f8f00ed055a2db706-2","c8abb6ccd28785257245a43f8f00ed055a2db706","PHxmaW1fcHJlZml4fD4KSU5QVVRQQVRIID0gImlucHV0LnR4dCIKI0lOUFVUUEFUSCA9ICJpbnB1dC10ZXN0LnR4dCIKd2l0aCBvcGVuKElOUFVUUEFUSCkgYXMgaWZpbGU6CiAgICByYXcgPSBpZmlsZS5yZWFkKCkKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKc3lzdGVtID0gZGVmYXVsdGRpY3Qoc2V0KQpmb3IgYSwgYiBpbiAobGluZS5zcGxpdCgiLSIpIGZvciBsaW5lIGluIHJhdy5zdHJpcCgpLnNwbGl0KCJcbiIpKToKICAgIHN5c3RlbVthXS5hZGQoYikKICAgIHN5c3RlbVtiXS5hZGQoYSkKCmZyb20gZnVuY3Rvb2xzIGltcG9ydCBjYWNoZQpAY2FjaGUKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpkZWYgcGF0aHNfdG9fZW5kKGNhdmU6IHN0ciwgcHJpb3JfdmlzaXRlZDogZnJvemVuc2V0W2ludF0sIGFsbG93X29uZV9yZXBlYXQ6IGJvb2wpIC0+IGludDoKICAgIHZpc2l0ZWQgPSBwcmlvcl92aXNpdGVkIHwge2NhdmV9CiAgICBpZiBjYXZlID09ICJlbmQiOgogICAgICAgIHJldHVybiAxCjx8ZmltX2VuZHw+"]
["9004f9cb7543f07e715b6ca9f3f46e04abb9ae48-1","9004f9cb7543f07e715b6ca9f3f46e04abb9ae48","PHxmaW1fcHJlZml4fD4KZnJvbSB3c2dpcmVmIGltcG9ydCBzaW1wbGVfc2VydmVyCgppbXBvcnQgam9ibGliCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmZyb20gZmxhc2sgaW1wb3J0IEZsYXNrLCByZW5kZXJfdGVtcGxhdGUsIHJlcXVlc3QKCmFwcCA9IEZsYXNrKF9fbmFtZV9fKQpmcm9tIGxvZ2dlci5Mb2dnZXJDbGFzcyBpbXBvcnQgTG9nZ2VyRmlsZUNsYXNzCgpsb2dnZXIgPSBMb2dnZXJGaWxlQ2xhc3MoInVpX3BhZ2UiKQptb2RlbCA9IGpvYmxpYi5sb2FkKCdtb2RlbHMvWEdCb29zdF9SZWdyZXNzb3JfbW9kZWwucGtsJykgICMgbG9hZGluZyB0aGUgc2F2ZWQgWEdCb29zdF9yZWdyZXNzb3IgbW9kZWwKCgpAYXBwLnJvdXRlKCIvIikKZGVmIGhvbWUoKToKICAgIGxvZ2dlci5hZGRfaW5mb19sb2coImNsYXNzIGFwcCwgbG9hZCBob21lIHBhZ2UiKQogICAgcmV0dXJuIHJlbmRlcl90ZW1wbGF0ZSgnaW5kZXguaHRtbCcpCgoKQGFwcC5yb3V0ZSgnL3ByZWRpY3QnLCBtZXRob2RzPVsnR0VUJywgJ1BPU1QnXSkKZGVmIHByZWRpY3QoKToKICAgICIiIgogICAgRm9yIHJlbmRlcmluZyByZXN1bHRzIG9uIEhUTUwgR1VJCgogICAgIiIiCiAgICBpZiByZXF1ZXN0Lm1ldGhvZCA9PSAiUE9TVCI6CiAgICAgICAgIyBbJ2FnZScsICdjZW1lbnQnLCAnd2F0ZXInLCAnZmx5X2FzaCcsICdzdXBlcnBsYXN0aWNpemVyJywgJ2JsYXN0X2Z1cm5hY2Vfc2xhZyddCiAgICAgICAgZl9saXN0ID0gW3JlcXVlc3QuZm9ybS5nZXQoJ2FnZScpLCByZXF1ZXN0LmZvcm0uZ2V0KCdjZW1lbnQnKSwgcmVxdWVzdC5mb3JtLmdldCgnd2F0ZXInKSwKICAgICAgICAgICAgICAgICAgcmVxdWVzdC5mb3JtLmdldCgnZmEnKSwKICAgICAgICAgICAgICAgICAgcmVxdWVzdC5mb3JtLmdldCgnc3AnKSwgcmVxdWVzdC5mb3JtLmdldCgnYmZzJyldICAjIGxpc3Qgb2YgaW5wdXRzCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIyBsb2dnaW5nIG9wZXJhdGlvbgogICAgICAgIGxvZ2dlci5hZGRfaW5mb19sb2coZiJjbGFzcyBhcHAsIHByZWRpY3QgZnVuY3Rpb24gOiBBZ2UgKGluIGRheXMpOiB7Zl9saXN0WzBdfSwgQ2VtZW50IChpbiBrZyk6IHtmX2xpc3RbMV19LCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYiV2F0ZXIgKGluIGtnKToge2ZfbGlzdFsyXX0sIEZseSBhc2ggKGluIGtnKToge2ZfbGlzdFszXX0sIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZiJTdXBlcnBsYXN0aWNpemVyIChpbiBrZyk6IHtmX2xpc3RbNF19LCBCbGFzdCBmdXJuYWNlIHNsYWcgKGluIGtnKToge2ZfbGlzdFs1XX0iKQo8fGZpbV9lbmR8Pg=="]
["9004f9cb7543f07e715b6ca9f3f46e04abb9ae48-2","9004f9cb7543f07e715b6ca9f3f46e04abb9ae48","PHxmaW1fcHJlZml4fD4KZnJvbSB3c2dpcmVmIGltcG9ydCBzaW1wbGVfc2VydmVyCgppbXBvcnQgam9ibGliCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmZyb20gZmxhc2sgaW1wb3J0IEZsYXNrLCByZW5kZXJfdGVtcGxhdGUsIHJlcXVlc3QKCmFwcCA9IEZsYXNrKF9fbmFtZV9fKQpmcm9tIGxvZ2dlci5Mb2dnZXJDbGFzcyBpbXBvcnQgTG9nZ2VyRmlsZUNsYXNzCgpsb2dnZXIgPSBMb2dnZXJGaWxlQ2xhc3MoInVpX3BhZ2UiKQptb2RlbCA9IGpvYmxpYi5sb2FkKCdtb2RlbHMvWEdCb29zdF9SZWdyZXNzb3JfbW9kZWwucGtsJykgICMgbG9hZGluZyB0aGUgc2F2ZWQgWEdCb29zdF9yZWdyZXNzb3IgbW9kZWwKCgpAYXBwLnJvdXRlKCIvIikKZGVmIGhvbWUoKToKICAgIGxvZ2dlci5hZGRfaW5mb19sb2coImNsYXNzIGFwcCwgbG9hZCBob21lIHBhZ2UiKQogICAgcmV0dXJuIHJlbmRlcl90ZW1wbGF0ZSgnaW5kZXguaHRtbCcpCgoKQGFwcC5yb3V0ZSgnL3ByZWRpY3QnLCBtZXRob2RzPVsnR0VUJywgJ1BPU1QnXSkKZGVmIHByZWRpY3QoKToKICAgICIiIgogICAgRm9yIHJlbmRlcmluZyByZXN1bHRzIG9uIEhUTUwgR1VJCgogICAgIiIiCiAgICBpZiByZXF1ZXN0Lm1ldGhvZCA9PSAiUE9TVCI6CiAgICAgICAgIyBbJ2FnZScsICdjZW1lbnQnLCAnd2F0ZXInLCAnZmx5X2FzaCcsICdzdXBlcnBsYXN0aWNpemVyJywgJ2JsYXN0X2Z1cm5hY2Vfc2xhZyddCiAgICAgICAgZl9saXN0ID0gW3JlcXVlc3QuZm9ybS5nZXQoJ2FnZScpLCByZXF1ZXN0LmZvcm0uZ2V0KCdjZW1lbnQnKSwgcmVxdWVzdC5mb3JtLmdldCgnd2F0ZXInKSwKICAgICAgICAgICAgICAgICAgcmVxdWVzdC5mb3JtLmdldCgnZmEnKSwKICAgICAgICAgICAgICAgICAgcmVxdWVzdC5mb3JtLmdldCgnc3AnKSwgcmVxdWVzdC5mb3JtLmdldCgnYmZzJyldICAjIGxpc3Qgb2YgaW5wdXRzCgogICAgICAgICMgbG9nZ2luZyBvcGVyYXRpb24KICAgICAgICBsb2dnZXIuYWRkX2luZm9fbG9nKGYiY2xhc3MgYXBwLCBwcmVkaWN0IGZ1bmN0aW9uIDogQWdlIChpbiBkYXlzKToge2ZfbGlzdFswXX0sIENlbWVudCAoaW4ga2cpOiB7Zl9saXN0WzFdfSwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmIldhdGVyIChpbiBrZyk6IHtmX2xpc3RbMl19LCBGbHkgYXNoIChpbiBrZyk6IHtmX2xpc3RbM119LCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYiU3VwZXJwbGFzdGljaXplciAoaW4ga2cpOiB7Zl9saXN0WzRdfSwgQmxhc3QgZnVybmFjZSBzbGFnIChpbiBrZyk6IHtmX2xpc3RbNV19IikKCiAgICAgICAgZmluYWxfZmVhdHVyZXMgPSBucC5hcnJheShmX2xpc3QpLnJlc2hhcGUoLTEsIDYpCiAgICAgICAgZGYgPSBwZC5EYXRhRnJhbWUoZmluYWxfZmVhdHVyZXMpCgogICAgICAgIHByZWRpY3Rpb24gPSBtb2RlbC5wcmVkaWN0KGRmKQogICAgICAgIHJlc3VsdCA9ICIlLjJmIiAlIHJvdW5kKHByZWRpY3Rpb25bMF0sIDIpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIyBsb2dnaW5nIG9wZXJhdGlvbgogICAgICAgICMgICAgICAgICBsb2dnaW5nLmluZm8oZiJUaGUgUHJlZGljdGVkIENvbmNyZXRlIENvbXByZXNzaXZlIHN0cmVuZ3RoIGlzIHtyZXN1bHR9IE1QYSIpCgogICAgICAgICMgICAgICAgICBsb2dnaW5nLmluZm8oIlByZWRpY3Rpb24gZ2V0dGluZyBwb3N0ZWQgdG8gdGhlIHdlYiBwYWdlLiIpCjx8ZmltX2VuZHw+"]
["f2348cdb2baa73c388c10cc5a1b26da699cb00ca-1","f2348cdb2baa73c388c10cc5a1b26da699cb00ca","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKPHxmaW1faG9sZXw+CiAgICBjbnQgPSAwCiAgICBwcmV2ID0gMAogICAgZm9yIGggaW4gSCArIFtmbG9hdCgnaW5mJyldOgogICAgICAgIGlmIGggPD0gcHJldjoKICAgICAgICAgICAgY250ICs9IDEKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXMgPSBtYXgocmVzLCBjbnQpCiAgICAgICAgICAgIGNudCA9IDAKICAgICAgICBwcmV2ID0gaAogICAgcmV0dXJuIHJlcwoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGFucyA9IG1haW4oKQogICAgcHJpbnQoYW5zKQo8fGZpbV9zdWZmaXh8PgpuLCAqSCA9IG1hcChpbnQsIHN5cy5zdGRpbi5yZWFkKCkuc3BsaXQoKSkKCmRlZiBtYWluKCk6CiAgICByZXMgPSAwCjx8ZmltX2VuZHw+"]
["f2348cdb2baa73c388c10cc5a1b26da699cb00ca-2","f2348cdb2baa73c388c10cc5a1b26da699cb00ca","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKbiwgKkggPSBtYXAoaW50LCBzeXMuc3RkaW4ucmVhZCgpLnNwbGl0KCkpCjx8ZmltX2hvbGV8PgogICAgcHJldiA9IDAKICAgIGZvciBoIGluIEggKyBbZmxvYXQoJ2luZicpXToKICAgICAgICBpZiBoIDw9IHByZXY6CiAgICAgICAgICAgIGNudCArPSAxCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmVzID0gbWF4KHJlcywgY250KQogICAgICAgICAgICBjbnQgPSAwCiAgICAgICAgcHJldiA9IGgKICAgIHJldHVybiByZXMKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBhbnMgPSBtYWluKCkKICAgIHByaW50KGFucykKPHxmaW1fc3VmZml4fD4KCmRlZiBtYWluKCk6CiAgICByZXMgPSAwCiAgICBjbnQgPSAwCjx8ZmltX2VuZHw+"]
["f23442433efcd43e58961032dcd1f67301891729-1","f23442433efcd43e58961032dcd1f67301891729","PHxmaW1fcHJlZml4fD4KCiMgLSotIGNvZGluZzogdXRmLTggLSotCgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSAuc29sdmVyIGltcG9ydCBBYnN0cmFjdFNvbHZlcgpmcm9tIC5ieV9mcmFtZV9zb2x2ZXIgaW1wb3J0IEJ5RnJhbWVTb2x2ZXIKZnJvbSAuZ2FwX2Nsb3NlX3NvbHZlciBpbXBvcnQgR2FwQ2xvc2VTb2x2ZXIKCjx8ZmltX2VuZHw+"]
["f23442433efcd43e58961032dcd1f67301891729-2","f23442433efcd43e58961032dcd1f67301891729","PHxmaW1fcHJlZml4fD4KCiMgLSotIGNvZGluZzogdXRmLTggLSotCgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KPHxmaW1faG9sZXw+CmZyb20gLnNvbHZlciBpbXBvcnQgQWJzdHJhY3RTb2x2ZXIKZnJvbSAuYnlfZnJhbWVfc29sdmVyIGltcG9ydCBCeUZyYW1lU29sdmVyCmZyb20gLmdhcF9jbG9zZV9zb2x2ZXIgaW1wb3J0IEdhcENsb3NlU29sdmVyCgpfX2FsbF9fID0gWyJBYnN0cmFjdFNvbHZlciIsICJCeUZyYW1lU29sdmVyIiwgIkdhcENsb3NlU29sdmVyIl0KPHxmaW1fc3VmZml4fD4KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKCjx8ZmltX2VuZHw+"]
["f23442433efcd43e58961032dcd1f67301891729-3","f23442433efcd43e58961032dcd1f67301891729","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8Pgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCgpmcm9tIC5zb2x2ZXIgaW1wb3J0IEFic3RyYWN0U29sdmVyCmZyb20gLmJ5X2ZyYW1lX3NvbHZlciBpbXBvcnQgQnlGcmFtZVNvbHZlcgpmcm9tIC5nYXBfY2xvc2Vfc29sdmVyIGltcG9ydCBHYXBDbG9zZVNvbHZlcgoKX19hbGxfXyA9IFsiQWJzdHJhY3RTb2x2ZXIiLCAiQnlGcmFtZVNvbHZlciIsICJHYXBDbG9zZVNvbHZlciJdCjx8ZmltX3N1ZmZpeHw+CiMgLSotIGNvZGluZzogdXRmLTggLSotCgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCjx8ZmltX2VuZHw+"]
["f23442433efcd43e58961032dcd1f67301891729-4","f23442433efcd43e58961032dcd1f67301891729","PHxmaW1fcHJlZml4fD4KCiMgLSotIGNvZGluZzogdXRmLTggLSotCgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKCmZyb20gLnNvbHZlciBpbXBvcnQgQWJzdHJhY3RTb2x2ZXIKZnJvbSAuYnlfZnJhbWVfc29sdmVyIGltcG9ydCBCeUZyYW1lU29sdmVyCmZyb20gLmdhcF9jbG9zZV9zb2x2ZXIgaW1wb3J0IEdhcENsb3NlU29sdmVyCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCl9fYWxsX18gPSBbIkFic3RyYWN0U29sdmVyIiwgIkJ5RnJhbWVTb2x2ZXIiLCAiR2FwQ2xvc2VTb2x2ZXIiXQo8fGZpbV9lbmR8Pg=="]
["de5792e760e1823b6c59229c9f680ce843837eef-1","de5792e760e1823b6c59229c9f680ce843837eef","PHxmaW1fcHJlZml4fD4KZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKIyDspJHrs7XrkJwg7ZWt6rO16raMIOyeiOydjApkZWYgc29sdXRpb24odGlja2V0cyk6CiAgICB0aWNrZXRzLnNvcnQoa2V5ID0gbGFtYmRhIHg6eFsxXSkKICAgIGwgPSBsZW4odGlja2V0cykKICAgIHEgPSBkZXF1ZSgpCiAgICBzID0gJ0lDTicKICAgIGZvciBpIGluIHJhbmdlKGxlbih0aWNrZXRzKSk6CiAgICAgICAgaWYgdGlja2V0c1tpXVswXSA9PSBzOgogICAgICAgICAgICBxLmFwcGVuZChbaV0pCiAgICB3aGlsZSBxOgogICAgICAgIGxzdCA9IHEucG9wbGVmdCgpCiAgICAgICAgaWYgbGVuKGxzdCkgPT0gbDoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBicmVhawo8fGZpbV9lbmR8Pg=="]
["de5792e760e1823b6c59229c9f680ce843837eef-2","de5792e760e1823b6c59229c9f680ce843837eef","PHxmaW1fcHJlZml4fD4KZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKIyDspJHrs7XrkJwg7ZWt6rO16raMIOyeiOydjApkZWYgc29sdXRpb24odGlja2V0cyk6CiAgICB0aWNrZXRzLnNvcnQoa2V5ID0gbGFtYmRhIHg6eFsxXSkKICAgIGwgPSBsZW4odGlja2V0cykKICAgIHEgPSBkZXF1ZSgpCiAgICBzID0gJ0lDTicKICAgIGZvciBpIGluIHJhbmdlKGxlbih0aWNrZXRzKSk6CiAgICAgICAgaWYgdGlja2V0c1tpXVswXSA9PSBzOgogICAgICAgICAgICBxLmFwcGVuZChbaV0pCiAgICB3aGlsZSBxOgogICAgICAgIGxzdCA9IHEucG9wbGVmdCgpCiAgICAgICAgaWYgbGVuKGxzdCkgPT0gbDoKICAgICAgICAgICAgYnJlYWsKICAgICAgICBpZHggPSBsc3RbLTFdCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHRpY2tldHMpKToKICAgICAgICAgICAgaWYgaSBub3QgaW4gbHN0IGFuZCB0aWNrZXRzW2lkeF1bMV0gPT0gdGlja2V0c1tpXVswXToKICAgICAgICAgICAgICAgIHEuYXBwZW5kKGxzdCArIFtpXSkKICAgIGFuc3dlcj0gWydJQ04nXQogICAgZm9yIGkgaW4gbHN0OgogICAgICAgIGFuc3dlci5hcHBlbmQodGlja2V0c1tpXVsxXSkKICAgIHJldHVybiBhbnN3ZXIKCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgp0aWNrZXRzID0gW1siSUNOIiwgIlNGTyJdLCBbIklDTiIsICJBVEwiXSwgWyJTRk8iLCAiQVRMIl0sIFsiQVRMIiwgIklDTiJdLCBbIkFUTCIsIlNGTyJdXQpwcmludChzb2x1dGlvbih0aWNrZXRzKSkKPHxmaW1fZW5kfD4="]
["47b30326d0bbdba81f65dfcc5cab18c8e23e394c-1","47b30326d0bbdba81f65dfcc5cab18c8e23e394c","PHxmaW1fcHJlZml4fD4KZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgbmRiCmZyb20gLiBpbXBvcnQgbW9kZWxzCgoKY2xhc3MgU2l0ZShtb2RlbHMuTW9kZWwpOgogIHJvb3RfZm9sZGVyX2lkID0gbmRiLlN0cmluZ1Byb3BlcnR5KCkKICBzaXRlX3RpdGxlID0gbmRiLlN0cmluZ1Byb3BlcnR5KCkKICBsb2dvX3VybCA9IG5kYi5TdHJpbmdQcm9wZXJ0eSgpCiAgZW1haWxfZm9vdGVyID0gbmRiLlRleHRQcm9wZXJ0eSgpCiAgc2lkZWJhciA9IG5kYi5TdHJpbmdQcm9wZXJ0eSgpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICBwYXRoID0gbmRiLlN0cmluZ1Byb3BlcnR5KCkKPHxmaW1fZW5kfD4="]
["47b30326d0bbdba81f65dfcc5cab18c8e23e394c-2","47b30326d0bbdba81f65dfcc5cab18c8e23e394c","PHxmaW1fcHJlZml4fD4KZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgbmRiCmZyb20gLiBpbXBvcnQgbW9kZWxzCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgpjbGFzcyBTaXRlKG1vZGVscy5Nb2RlbCk6CiAgcm9vdF9mb2xkZXJfaWQgPSBuZGIuU3RyaW5nUHJvcGVydHkoKQo8fGZpbV9lbmR8Pg=="]
["47b30326d0bbdba81f65dfcc5cab18c8e23e394c-3","47b30326d0bbdba81f65dfcc5cab18c8e23e394c","PHxmaW1fcHJlZml4fD4KZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgbmRiCmZyb20gLiBpbXBvcnQgbW9kZWxzCgoKY2xhc3MgU2l0ZShtb2RlbHMuTW9kZWwpOgogIHJvb3RfZm9sZGVyX2lkID0gbmRiLlN0cmluZ1Byb3BlcnR5KCkKICBzaXRlX3RpdGxlID0gbmRiLlN0cmluZ1Byb3BlcnR5KCkKICBsb2dvX3VybCA9IG5kYi5TdHJpbmdQcm9wZXJ0eSgpCiAgZW1haWxfZm9vdGVyID0gbmRiLlRleHRQcm9wZXJ0eSgpCiAgc2lkZWJhciA9IG5kYi5TdHJpbmdQcm9wZXJ0eSgpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICBwYXRoID0gbmRiLlN0cmluZ1Byb3BlcnR5KCkKPHxmaW1fZW5kfD4="]
["47b30326d0bbdba81f65dfcc5cab18c8e23e394c-4","47b30326d0bbdba81f65dfcc5cab18c8e23e394c","PHxmaW1fcHJlZml4fD4KZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgbmRiCjx8ZmltX2hvbGV8PgogIHJvb3RfZm9sZGVyX2lkID0gbmRiLlN0cmluZ1Byb3BlcnR5KCkKICBzaXRlX3RpdGxlID0gbmRiLlN0cmluZ1Byb3BlcnR5KCkKICBsb2dvX3VybCA9IG5kYi5TdHJpbmdQcm9wZXJ0eSgpCiAgZW1haWxfZm9vdGVyID0gbmRiLlRleHRQcm9wZXJ0eSgpCiAgc2lkZWJhciA9IG5kYi5TdHJpbmdQcm9wZXJ0eSgpCiAgcGF0aCA9IG5kYi5TdHJpbmdQcm9wZXJ0eSgpCjx8ZmltX3N1ZmZpeHw+CmZyb20gLiBpbXBvcnQgbW9kZWxzCgoKY2xhc3MgU2l0ZShtb2RlbHMuTW9kZWwpOgo8fGZpbV9lbmR8Pg=="]
["47b30326d0bbdba81f65dfcc5cab18c8e23e394c-5","47b30326d0bbdba81f65dfcc5cab18c8e23e394c","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgpjbGFzcyBTaXRlKG1vZGVscy5Nb2RlbCk6CiAgcm9vdF9mb2xkZXJfaWQgPSBuZGIuU3RyaW5nUHJvcGVydHkoKQogIHNpdGVfdGl0bGUgPSBuZGIuU3RyaW5nUHJvcGVydHkoKQogIGxvZ29fdXJsID0gbmRiLlN0cmluZ1Byb3BlcnR5KCkKICBlbWFpbF9mb290ZXIgPSBuZGIuVGV4dFByb3BlcnR5KCkKICBzaWRlYmFyID0gbmRiLlN0cmluZ1Byb3BlcnR5KCkKICBwYXRoID0gbmRiLlN0cmluZ1Byb3BlcnR5KCkKPHxmaW1fc3VmZml4fD4KZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgbmRiCmZyb20gLiBpbXBvcnQgbW9kZWxzCgoKPHxmaW1fZW5kfD4="]
["ffcc1b68b44effb05478db7813c3b9c4f353115b-1","ffcc1b68b44effb05478db7813c3b9c4f353115b","PHxmaW1fcHJlZml4fD4KZnJvbSBlbWFpbCBpbXBvcnQgcGFyc2VyLCBtZXNzYWdlCmltcG9ydCBzeXMKCgpjbGFzcyBNb2NrSFRUUFJlc3BvbnNlKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgaGVhZGVycyk6CiAgICAgICAgZnJvbSBiZXRhbWF4LnV0aWwgaW1wb3J0IGNvZXJjZV9jb250ZW50CgogICAgICAgIGggPSBbIiVzOiAlcyIgJSAoaywgdikgZm9yIGsgaW4gaGVhZGVycyBmb3IgdiBpbiBoZWFkZXJzLmdldGxpc3QoayldCiAgICAgICAgaCA9IG1hcChjb2VyY2VfY29udGVudCwgaCkKICAgICAgICBoID0gJ1xyXG4nLmpvaW4oaCkKICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDcpOgogICAgICAgICAgICBoID0gaC5lbmNvZGUoKQogICAgICAgIHAgPSBwYXJzZXIuUGFyc2VyKEVtYWlsTWVzc2FnZSkKICAgICAgICAjIFRoYW5rcyB0byBQeXRob24gMywgd2UgaGF2ZSB0byB1c2UgdGhlIHNsaWdodGx5IG1vcmUgYXdmdWwgQVBJIGJlbG93CiAgICAgICAgIyBtaW1ldG9vbHMgd2FzIGRlcHJlY2F0ZWQgc28gd2UgaGF2ZSB0byB1c2UgZW1haWwubWVzc2FnZS5NZXNzYWdlCiAgICAgICAgIyB3aGljaCB0YWtlcyBubyBhcmd1bWVudHMgaW4gaXRzIGluaXRpYWxpemVyLgogICAgICAgIHNlbGYubXNnID0gcC5wYXJzZXN0cihoKQogICAgICAgIHNlbGYubXNnLnNldF9wYXlsb2FkKGgpCgogICAgZGVmIGlzY2xvc2VkKHNlbGYpOgogICAgICAgIHJldHVybiBGYWxzZQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKY2xhc3MgRW1haWxNZXNzYWdlKG1lc3NhZ2UuTWVzc2FnZSk6CiAgICBkZWYgZ2V0aGVhZGVycyhzZWxmLCB2YWx1ZSwgKmFyZ3MpOgogICAgICAgIHJldHVybiBzZWxmLmdldF9hbGwodmFsdWUsIFtdKQo8fGZpbV9lbmR8Pg=="]
["ffcc1b68b44effb05478db7813c3b9c4f353115b-2","ffcc1b68b44effb05478db7813c3b9c4f353115b","PHxmaW1fcHJlZml4fD4KZnJvbSBlbWFpbCBpbXBvcnQgcGFyc2VyLCBtZXNzYWdlCmltcG9ydCBzeXMKCgpjbGFzcyBNb2NrSFRUUFJlc3BvbnNlKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgaGVhZGVycyk6CiAgICAgICAgZnJvbSBiZXRhbWF4LnV0aWwgaW1wb3J0IGNvZXJjZV9jb250ZW50CgogICAgICAgIGggPSBbIiVzOiAlcyIgJSAoaywgdikgZm9yIGsgaW4gaGVhZGVycyBmb3IgdiBpbiBoZWFkZXJzLmdldGxpc3QoayldCiAgICAgICAgaCA9IG1hcChjb2VyY2VfY29udGVudCwgaCkKICAgICAgICBoID0gJ1xyXG4nLmpvaW4oaCkKICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDcpOgogICAgICAgICAgICBoID0gaC5lbmNvZGUoKQogICAgICAgIHAgPSBwYXJzZXIuUGFyc2VyKEVtYWlsTWVzc2FnZSkKICAgICAgICAjIFRoYW5rcyB0byBQeXRob24gMywgd2UgaGF2ZSB0byB1c2UgdGhlIHNsaWdodGx5IG1vcmUgYXdmdWwgQVBJIGJlbG93CiAgICAgICAgIyBtaW1ldG9vbHMgd2FzIGRlcHJlY2F0ZWQgc28gd2UgaGF2ZSB0byB1c2UgZW1haWwubWVzc2FnZS5NZXNzYWdlCiAgICAgICAgIyB3aGljaCB0YWtlcyBubyBhcmd1bWVudHMgaW4gaXRzIGluaXRpYWxpemVyLgogICAgICAgIHNlbGYubXNnID0gcC5wYXJzZXN0cihoKQogICAgICAgIHNlbGYubXNnLnNldF9wYXlsb2FkKGgpCgogICAgZGVmIGlzY2xvc2VkKHNlbGYpOgo8fGZpbV9ob2xlfD4KY2xhc3MgRW1haWxNZXNzYWdlKG1lc3NhZ2UuTWVzc2FnZSk6CiAgICBkZWYgZ2V0aGVhZGVycyhzZWxmLCB2YWx1ZSwgKmFyZ3MpOgogICAgICAgIHJldHVybiBzZWxmLmdldF9hbGwodmFsdWUsIFtdKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJldHVybiBGYWxzZQoKCjx8ZmltX2VuZHw+"]
["ffcc1b68b44effb05478db7813c3b9c4f353115b-3","ffcc1b68b44effb05478db7813c3b9c4f353115b","PHxmaW1fcHJlZml4fD4KZnJvbSBlbWFpbCBpbXBvcnQgcGFyc2VyLCBtZXNzYWdlCmltcG9ydCBzeXMKCgpjbGFzcyBNb2NrSFRUUFJlc3BvbnNlKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgaGVhZGVycyk6CiAgICAgICAgZnJvbSBiZXRhbWF4LnV0aWwgaW1wb3J0IGNvZXJjZV9jb250ZW50CgogICAgICAgIGggPSBbIiVzOiAlcyIgJSAoaywgdikgZm9yIGsgaW4gaGVhZGVycyBmb3IgdiBpbiBoZWFkZXJzLmdldGxpc3QoayldCiAgICAgICAgaCA9IG1hcChjb2VyY2VfY29udGVudCwgaCkKICAgICAgICBoID0gJ1xyXG4nLmpvaW4oaCkKICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDcpOgogICAgICAgICAgICBoID0gaC5lbmNvZGUoKQogICAgICAgIHAgPSBwYXJzZXIuUGFyc2VyKEVtYWlsTWVzc2FnZSkKICAgICAgICAjIFRoYW5rcyB0byBQeXRob24gMywgd2UgaGF2ZSB0byB1c2UgdGhlIHNsaWdodGx5IG1vcmUgYXdmdWwgQVBJIGJlbG93Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAjIG1pbWV0b29scyB3YXMgZGVwcmVjYXRlZCBzbyB3ZSBoYXZlIHRvIHVzZSBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UKICAgICAgICAjIHdoaWNoIHRha2VzIG5vIGFyZ3VtZW50cyBpbiBpdHMgaW5pdGlhbGl6ZXIuCiAgICAgICAgc2VsZi5tc2cgPSBwLnBhcnNlc3RyKGgpCiAgICAgICAgc2VsZi5tc2cuc2V0X3BheWxvYWQoaCkKPHxmaW1fZW5kfD4="]
["cd0291782a357a07e2ac3dc4cd219f01df2cfd6f-1","cd0291782a357a07e2ac3dc4cd219f01df2cfd6f","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KPHxmaW1faG9sZXw+CgpfX2F1dGhvcl9fID0gJ3B5Q1JHSSBhdXRob3JzJwoKZnJvbSAuX2NvZWZmcyBpbXBvcnQgKAogICAgR0gsCiAgICBsb2FkX2NvZWZmcywKKQo8fGZpbV9zdWZmaXh8PgoKIiIiCmBweUNSR0lgIGlzIGEgUHl0aG9uIHBhY2thZ2Ugb2ZmZXJpbmcgdGhlIElHUkYtMTMgKEludGVybmF0aW9uYWwgR2VvbWFnbmV0aWMgUmVmZXJlbmNlIEZpZWxkKSBtb2RlbC4gWW91IGNhbiB1c2UgaXQgdG8gY2FsY3VsYXRlIHRoZSBtYWduZXRpYyBmaWVsZCdzIGludGVuc2l0eSBhbmQgdG8gdHJhbnNmb3JtIGNvb3JkaW5hdGVzIGJldHdlZW4gR2VvR3JhcGhpY2FsIGFuZCBHZW9NYWduZXRpYy4gVGhlIHBhY2thZ2UgZG9lcyBub3QgcmVxdWlyZSBhbnkgRm9ydHJhbiBjb21waWxlciAtIGl0IGlzIHB1cmUgUHl0aG9uLgoiIiIKPHxmaW1fZW5kfD4="]
["084b8874b7ec454c0f1c940c86330876c388f951-1","084b8874b7ec454c0f1c940c86330876c388f951","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN5cwoKZnJvbSBwb2x5aml0LmJ1aWxkYm90LmJ1aWxkZXJzIGltcG9ydCByZWdpc3Rlcgpmcm9tIHBvbHlqaXQuYnVpbGRib3QgaW1wb3J0IHNsYXZlcwpmcm9tIHBvbHlqaXQuYnVpbGRib3QudXRpbHMgaW1wb3J0IChidWlsZGVyLCBkZWZpbmUsIGdpdCwgdWNtZCwgdWNvbXBpbGUsIGNtZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkX2ZpbGUsIGlwLCBzX3NicmFuY2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNfbmlnaHRseSwgc19mb3JjZSwgc190cmlnZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX3VwbG9hZF90b19tYXN0ZXIpCmZyb20gcG9seWppdC5idWlsZGJvdC5yZXBvcyBpbXBvcnQgbWFrZV9jYiwgbWFrZV9uZXdfY2IsIGNvZGViYXNlcwpmcm9tIHBvbHlqaXQuYnVpbGRib3QubWFzdGVyIGltcG9ydCBVUkwKPHxmaW1faG9sZXw+CmZvcmNlX2NvZGViYXNlID0gbWFrZV9uZXdfY2IoWydsbHZtJywgJ2NsYW5nJywgJ3BvbGx5JywgJ29wZW5tcCcsICdjb21waWxlci1ydCddKQoKUCA9IHV0aWwuUHJvcGVydHkKQnVpbGRGYWN0b3J5ID0gdXRpbC5CdWlsZEZhY3RvcnkKYWNjZXB0ZWRfYnVpbGRlcnMgPSBzbGF2ZXMuZ2V0X2hvc3RsaXN0KHNsYXZlcy5pbmZvc3VuKQoKCiMgeWFwZjogZGlzYWJsZQpkZWYgY29uZmlndXJlKGMpOgogICAgc3RlcHMgPSBbCiAgICAgICAgZGVmaW5lKCJMTFZNX1JPT1QiLCBpcCgiJShwcm9wOmJ1aWxkZGlyKXMvbGx2bSIpKSwKICAgICAgICBkZWZpbmUoIlVDSFJPT1RfU1JDX1JPT1QiLCAiL21udC9sbHZtIiksCiAgICAgICAgZGVmaW5lKCJDTEFOR19ST09UIiwgaXAoIiUocHJvcDpMTFZNX1JPT1Qpcy90b29scy9jbGFuZyIpKSwKICAgICAgICBkZWZpbmUoIlBPTExZX1JPT1QiLCBpcCgiJShwcm9wOkxMVk1fUk9PVClzL3Rvb2xzL3BvbGx5IikpLAogICAgICAgIGRlZmluZSgiQ09NUElMRVJSVF9ST09UIiwgaXAoIiUocHJvcDpMTFZNX1JPT1Qpcy9wcm9qZWN0cy9jb21waWxlci1ydCIpKSwKICAgICAgICBkZWZpbmUoIk9QRU5NUF9ST09UIiwgaXAoIiUocHJvcDpMTFZNX1JPT1Qpcy9wcm9qZWN0cy9vcGVubXAiKSksCgogICAgICAgIGdpdCgnbGx2bScsICdtYXN0ZXInLCBjb2RlYmFzZXMsIHdvcmtkaXI9UCgiTExWTV9ST09UIikpLAogICAgICAgIGdpdCgnY2xhbmcnLCAnbWFzdGVyJywgY29kZWJhc2VzLCB3b3JrZGlyPVAoIkNMQU5HX1JPT1QiKSksCiAgICAgICAgZ2l0KCdwb2xseScsICdtYXN0ZXInLCBjb2RlYmFzZXMsIHdvcmtkaXI9UCgiUE9MTFlfUk9PVCIpKSwKICAgICAgICBnaXQoJ2NvbXBpbGVyLXJ0JywgJ21hc3RlcicsIGNvZGViYXNlcywgd29ya2Rpcj1QKCJDT01QSUxFUlJUX1JPT1QiKSksCiAgICAgICAgZ2l0KCdvcGVubXAnLCAnbWFzdGVyJywgY29kZWJhc2VzLCB3b3JrZGlyPVAoIk9QRU5NUF9ST09UIikpLAogICAgICAgIHVjbWQoJ2NtYWtlJywgUCgiVUNIUk9PVF9TUkNfUk9PVCIpLAogICAgICAgICAgICAgJy1EQ01BS0VfQlVJTERfVFlQRT1SZWxlYXNlJywKICAgICAgICAgICAgICctRENNQUtFX0lOU1RBTExfUFJFRklYPS4vX2luc3RhbGwnLAogICAgICAgICAgICAgJy1EQ01BS0VfQ1hYX0ZMQUdTX1JFTEVBU0U9LU8zIC1ETkRFQlVHIC1ETExWTV9FTkFCTEVfU1RBVFMnLAogICAgICAgICAgICAgJy1EQlVJTERfU0hBUkVEX0xJQlM9T2ZmJywKICAgICAgICAgICAgICctRFBPTExZX0JVSUxEX1BPTExJPU9mZicsCiAgICAgICAgICAgICAnLURMTFZNX1BPTExZX0xJTktfSU5UT19UT09MUz1PRkYnLAogICAgICAgICAgICAgJy1ETExWTV9UQVJHRVRTX1RPX0JVSUxEPVg4NicsCiAgICAgICAgICAgICAnLURMTFZNX0JJTlVUSUxTX0lOQ0RJUj0vdXNyL2luY2x1ZGUnLAogICAgICAgICAgICAgJy1ETExWTV9FTkFCTEVfUElDPU9uJywKICAgICAgICAgICAgICctRExMVk1fRU5BQkxFX0FTU0VSVElPTlM9T24nLAogICAgICAgICAgICAgJy1ETExWTV9FTkFCTEVfVEVSTUlORk89T2ZmJywKICAgICAgICAgICAgICctRENMQU5HX0RFRkFVTFRfT1BFTk1QX1JVTlRJTUU9bGlib21wJywKICAgICAgICAgICAgICctRycsICdOaW5qYScsCiAgICAgICAgICAgICBlbnY9ewogICAgICAgICAgICAgICAgICJQQVRIIjogIi9vcHQvY21ha2UvYmluOi91c3IvbG9jYWwvYmluOi91c3IvYmluOi9iaW4iCiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgbmFtZT0iY21ha2UiLAogICAgICAgICAgICAgZGVzY3JpcHRpb249ImNtYWtlIE8zLCBBc3NlcnRpb25zLCBQSUMsIFN0YXRpYyIpLAogICAgICAgIHVjb21waWxlKCJuaW5qYSIsICJpbnN0YWxsIiwgaGFsdE9uRmFpbHVyZT1UcnVlLCBuYW1lPSJidWlsZCBsbHZtIiksCiAgICAgICAgY21kKCJ0YXIiLCAiY3pmIiwgIi4uL2xsdm0udGFyLmd6IiwgIi1DIiwgIi4vX2luc3RhbGwiLCAiLiIpCiAgICBdCiAgICB1cGxvYWRfbGx2bSA9IGhhc2hfdXBsb2FkX3RvX21hc3RlcigibGx2bS50YXIuZ3oiLAogICAgICAgICIuLi9sbHZtLnRhci5neiIsICJwdWJsaWNfaHRtbC9sbHZtLnRhci5neiIsIFVSTCkKICAgIHN0ZXBzLmV4dGVuZCh1cGxvYWRfbGx2bSkKCiAgICBjWydidWlsZGVycyddLmFwcGVuZChidWlsZGVyKCJidWlsZC1sbHZtIiwgTm9uZSwgYWNjZXB0ZWRfYnVpbGRlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICB0YWdzPVsncG9seWppdCddLCBmYWN0b3J5PUJ1aWxkRmFjdG9yeShzdGVwcykpKQoKZGVmIHNjaGVkdWxlKGMpOgogICAgY1snc2NoZWR1bGVycyddLmV4dGVuZChbCiAgICAgICAgc19zYnJhbmNoKCJidWlsZC1sbHZtLXNjaGVkIiwgY29kZWJhc2UsIFsiYnVpbGQtbGx2bSJdLCBicmFuY2g9Im1hc3RlciIsCiAgICAgICAgICAgICAgICAgIHRyZWVTdGFibGVUaW1lcj0yKjYwKSwKICAgICAgICBzX2ZvcmNlKCJmb3JjZS1idWlsZC1sbHZtIiwgZm9yY2VfY29kZWJhc2UsIFsiYnVpbGQtbGx2bSJdKSwKICAgICAgICBzX3RyaWdnZXIoInRyaWdnZXItYnVpbGQtbGx2bSIsIGNvZGViYXNlLCBbJ2J1aWxkLWxsdm0nXSksCiAgICAgICAgc19uaWdodGx5KCJuaWdodGx5LXNjaGVkLWJ1aWxkLWxsdm0iLCBjb2RlYmFzZSwKICAgICAgICAgICAgICAgICAgWyJidWlsZC1sbHZtIl0sCiAgICAgICAgICAgICAgICAgIGhvdXI9MjAsIG1pbnV0ZT0wKQogICAgXSkKIyB5YXBmOiBlbmFibGUKCgojIHJlZ2lzdGVyKHN5cy5tb2R1bGVzW19fbmFtZV9fXSkKPHxmaW1fc3VmZml4fD4KZnJvbSBidWlsZGJvdC5wbHVnaW5zIGltcG9ydCB1dGlsCmZyb20gYnVpbGRib3QuY2hhbmdlcyBpbXBvcnQgZmlsdGVyCgpjb2RlYmFzZSA9IG1ha2VfY2IoWydsbHZtJywgJ2NsYW5nJywgJ3BvbGx5JywgJ29wZW5tcCcsICdjb21waWxlci1ydCddKQo8fGZpbV9lbmR8Pg=="]
["3eff2d6bd3feb91108cd77057a3d7e4ab575afd3-1","3eff2d6bd3feb91108cd77057a3d7e4ab575afd3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBjdjIKZnJvbSB0ZiBpbXBvcnQgdHJhbnNmb3JtYXRpb25zIGFzIHR4Cgpmcm9tIHV0aWxzIGltcG9ydCB2bWF0aCBhcyBNCmZyb20gdXRpbHMgaW1wb3J0IGN2X3dyYXAgYXMgVwpmcm9tIHZpei5sb2cgaW1wb3J0IHByaW50X1J0CmZyb20gY29yZS5jb21tb24gaW1wb3J0IHJlY292ZXJfcG9zZSwgcmVjb3Zlcl9wb3NlX3Blcm0KPHxmaW1faG9sZXw+CiAgICB0aCA9IDUuOTkxICMgPz8/IFRPRE8gOiBtYWdpYyBudW1iZXIKICAgIGlzcyA9ICgxLjAgLyAoc2lnbWEqc2lnbWEpKQoKICAgIEhpID0gbnAubGluYWxnLmludihIKQogICAgcHQyX3IgPSBNLmZyb21faChNLnRvX2gocHQxKS5kb3QoSC5UKSkKICAgIHB0MV9yID0gTS5mcm9tX2goTS50b19oKHB0MikuZG90KEhpLlQpKQoKICAgIGUxID0gbnAuc3F1YXJlKHB0MSAtIHB0MV9yKS5zdW0oYXhpcz0tMSkKICAgIGUyID0gbnAuc3F1YXJlKHB0MiAtIHB0Ml9yKS5zdW0oYXhpcz0tMSkKCiAgICAjc2NvcmUgPSAxLjAgLyAoZTEubWVhbigpICsgZTIubWVhbigpKQogICAgY2hpX3NxMSA9IGUxICogaXNzCiAgICBtc2sxID0gKGNoaV9zcTEgPD0gdGgpCiAgICBzY29yZSArPSAoKHRoIC0gY2hpX3NxMSkgKiBtc2sxKS5zdW0oKQoKICAgIGNoaV9zcTIgPSBlMiAqIGlzcwogICAgbXNrMiA9IChjaGlfc3EyIDw9IHRoKQogICAgc2NvcmUgKz0gKCh0aCAtIGNoaV9zcTIpICogbXNrMikuc3VtKCkKICAgIHJldHVybiBzY29yZSwgKG1zazEgJiBtc2syKQoKZGVmIHNhbXBzb25fZXJyb3IocHQxLCBwdDIsIEYpOgogICAgIyAxMS45IGZyb20gSC1aCiAgICAjIG51bWVyYXRvcgogICAgbm1yID0gbnAuc3F1YXJlKCBucC5laW5zdW0oJy4uLmEsYWIsLi4uYi0+Li4uJywgcHQyLCBGLCBwdDEpICkKCiAgICBkbXIxID0gbnAuZWluc3VtKCdhYiwuLi5iLT4uLi5hJywgRiwgcHQxKQogICAgZG1yMSA9IG5wLnNxdWFyZShkbXIxWy4uLiw6Ml0pLnN1bShheGlzPS0xKQoKICAgIGRtcjIgPSBucC5laW5zdW0oJ2FiLC4uLmItPi4uLmEnLCBGLlQsIHB0MikKICAgIGRtcjIgPSBucC5zcXVhcmUoZG1yMlsuLi4sOjJdKS5zdW0oYXhpcz0tMSkKCiAgICByZXR1cm4gbm1yIC8gKGRtcjEgKyBkbXIyKQoKZGVmIHNhbXBzb25fSChwdDEsIHB0MiwgSCk6CiAgICAjIGVyciA9IEguZG90KAogICAgIyBzeW10ID0gSGkocHQyKSAtIHB0MQogICAgIyByZXBqID0gcHQxIC0gSGkocHQyKQogICAgIyBzaG91bGQgYmUgdGhlIHNhbWU/PwogICAgcGFzcwoKZGVmIHNjb3JlX0YocHQxLCBwdDIsIEYsIHNpZ21hPTEuMCk6CiAgICAiIiIKICAgIEZ1bmRhbWVudGFsIE1hdHJpeCBzeW1tZXRyaWMgdHJhbnNmZXIgZXJyb3IuCiAgICByZWZlcmVuY2U6CiAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL29wZW5jdi9vcGVuY3YvYmxvYi9tYXN0ZXIvbW9kdWxlcy9jYWxpYjNkL3NyYy9mdW5kYW0uY3BwI0w3MjgKICAgICIiIgogICAgc2NvcmUgPSAwLjAKICAgIHRoID0gMy44NDEgIyA/PwogICAgdGhfc2NvcmUgPSA1Ljk5MSAjID8/IFRPRE8gOiBtYWdpYyBudW1iZXIKICAgIGlzcyA9ICgxLjAgLyAoc2lnbWEqc2lnbWEpKQoKICAgIHB0MV9oID0gTS50b19oKHB0MSkKICAgIHB0Ml9oID0gTS50b19oKHB0MikKCiAgICB4MSwgeTEgPSBwdDEuVAogICAgeDIsIHkyID0gcHQyLlQKCiAgICBhLCBiLCBjID0gcHQxX2guZG90KEYuVCkuVCAjIE54MwogICAgczIgPSAxLi8oYSphICsgYipiKTsKICAgIGQyID0gYSAqIHgyICsgYiAqIHkyICsgYwogICAgZTIgPSBkMipkMipzMgoKICAgIGEsIGIsIGMgPSBwdDJfaC5kb3QoRikuVAogICAgczEgPSAxLi8oYSphICsgYipiKTsKICAgIGQxID0gYSAqIHgxICsgYiAqIHkxICsgYwogICAgZTEgPSBkMSpkMSpzMQoKICAgIHByaW50ICdlMScsIGUxWzo1XQogICAgcHJpbnQgJ2UyJywgZTJbOjVdCiAgICAjZTFyID0gbnAuZWluc3VtKCcuLi5hLGFiLC4uLmItPi4uLicsIHB0Ml9oLCBGLCBwdDFfaCkKICAgICNwcmludCAnZTFyJywgZTFyWzBdCgogICAgI3ByaW50ICdzYW1wc29uJwogICAgI3ByaW50IHNhbXBzb25fZXJyb3IocHQxX2gscHQyX2gsRikKICAgICNwcmludCAoZTErZTIpIC8gNC4wCgogICAgI2UgPSAyICogc2FtcHNvbl9lcnJvcihwdDFfaCxwdDJfaCxGKQogICAgIyNlID0gKGUxK2UyKSAvIDIuMAogICAgI2VrID0gZSppc3MKICAgICNwcmludCAnaG1tJywgKHRoX3Njb3JlIC0gZWspW2VrPD10aF0uc3VtKCkgKiAyCgogICAgI3Njb3JlID0gMS4wIC8gKGUxLm1lYW4oKSArIGUyLm1lYW4oKSkKICAgIGNoaV9zcTIgPSBlMiAqIGlzcwogICAgbXNrMiA9IChjaGlfc3EyIDw9IHRoKQogICAgc2NvcmUgKz0gKCh0aF9zY29yZSAtIGNoaV9zcTIpICogbXNrMikuc3VtKCkKCiAgICBjaGlfc3ExID0gZTEqIGlzcwogICAgbXNrMSA9IChjaGlfc3ExIDw9IHRoKQogICAgc2NvcmUgKz0gKCh0aF9zY29yZSAtIGNoaV9zcTEpICogbXNrMSkuc3VtKCkKCiAgICByZXR1cm4gc2NvcmUsIChtc2sxICYgbXNrMikKCmRlZiBnZW4obWF4X249MTAwLCBtaW5fbj0xNiwKICAgICAgICB3PTY0MCwgaD00ODAsCiAgICAgICAgSz1Ob25lLCBLaT1Ob25lCiAgICAgICAgKToKICAgIGlmIEtpIGlzIE5vbmU6CiAgICAgICAgS2kgPSBucC5saW5hbGcuaW52KEspCgogICAgcDEgPSBucC5yYW5kb20udW5pZm9ybSgoMCwwKSwgKHcsaCksIHNpemU9KG1heF9uLDIpKQogICAgZCAgPSBucC5yYW5kb20udW5pZm9ybSgwLjAxLCAxMDAuMCwgc2l6ZT0obWF4X24sKSkKICAgICNkWzpdID0gMS4wICMgcGxhbmFyIHNjZW5lCiAgICB4ID0gZFs6LE5vbmVdICogbnAuZWluc3VtKCdhYiwuLi5iLT4uLi5hJywgS2ksIE0udG9faChwMSkpCiAgICBQMSA9IG5wLmV5ZSgzLDQpCgogICAgcnhuID0gbnAucmFuZG9tLnVuaWZvcm0oLW5wLnBpLCBucC5waSwgc2l6ZT0zKQogICAgdHhuID0gbnAucmFuZG9tLnVuaWZvcm0oLW5wLnBpLCBucC5waSwgc2l6ZT0zKQogICAgdHhuICo9IDAuMDEjMC4wMDAwMDAwMDAwMQogICAgI3ByaW50ICd0eG4nLCB0eG4KICAgICNwcmludCAncnhuJywgcnhuCiAgICAjcHJpbnQgJ3UtdHgnLCBNLnV2ZWModHhuKQoKICAgIFAyID0gdHguY29tcG9zZV9tYXRyaXgoCiAgICAgICAgICAgIGFuZ2xlcz1yeG4sIHRyYW5zbGF0ZT10eG4pWzozXQoKICAgIHAyaCA9IG5wLmVpbnN1bSgnYWIsYmMsLi4uYy0+Li4uYScsCiAgICAgICAgICAgIEssIFAyLCBNLnRvX2goeCkpCiAgICBwMiA9IE0uZnJvbV9oKHAyaCkKCiAgICBtc2sgPSBucC5sb2dpY2FsX2FuZC5yZWR1Y2UoWwogICAgICAgIChwMmhbLi4uLCAtMV0gPj0gMCksCiAgICAgICAgMCA8PSBwMlsuLi4sMF0sCiAgICAgICAgMCA8PSBwMlsuLi4sMV0sCiAgICAgICAgcDJbLi4uLDBdIDwgdywKICAgICAgICBwMlsuLi4sMV0gPCBoLAogICAgICAgIF0pCiAgICBwMSwgcDIsIHggPSBbZVttc2tdIGZvciBlIGluIFtwMSxwMix4XV0KICAgIGlmIGxlbihwMSkgPCBtaW5fbjoKICAgICAgICAjIHJldHJ5CiAgICAgICAgcmV0dXJuIGdlbihtYXhfbixtaW5fbix3LGgsSyxLaSkKICAgIHJldHVybiBwMSwgcDIsIHgsIFAxLCBQMgoKZGVmIG1haW4oKToKICAgICNucC5zZXRfcHJpbnRvcHRpb25zKDMpCiAgICAjc2VlZCA9IDQ3NzQ4CiAgICBzZWVkID0gbnAucmFuZG9tLnJhbmRpbnQoNjU1MzYpCiAgICBwcmludCgnc2VlZCcsIHNlZWQpCiAgICBucC5yYW5kb20uc2VlZCggc2VlZCApCgogICAgbiA9IDEyOAogICAgdyxoID0gKDY0MCw0ODApCiAgICBLID0gbnAuZmxvYXQzMihbCiAgICAgICAgNTAwLCAwLCB3LzIuMCwKICAgICAgICAwLCA1MDAsIGgvMi4wLAogICAgICAgIDAsICAgMCwgMV0pLnJlc2hhcGUoMywzKQogICAgcDEsIHAyLCB4LCBQMSwgUDIgPSBnZW4obWF4X249bix3PXcsaD1oLEs9SykKCiAgICBwcmludCAnUDInCiAgICBwcmludCBQMgogICAgcHJpbnRfUnQoIFAyWzosOjNdLCBQMls6LDM6XSApCgogICAgcDEgPSBucC5yYW5kb20ubm9ybWFsKHAxLCBzY2FsZT0wLjUpCiAgICBwMiA9IG5wLnJhbmRvbS5ub3JtYWwocDIsIHNjYWxlPTAuNSkKCiAgICBGLCBfID0gVy5GKHAxLCBwMikjLCBjYW1lcmFNYXRyaXg9SykKICAgIEUsIF8gPSBXLkUocDEsIHAyLCBjYW1lcmFNYXRyaXg9SykKCiAgICAjcHJpbnQgJ3ZhbGlkYXRpb24gLi4uJwogICAgI3ByaW50ICdFJywgRQogICAgI3ByaW50ICdGJywgRgogICAgI3ByaW50ICdFLT5GJywgTS5FMkYoRSwgSz1LKQogICAgI3ByaW50ICdGLT5FJywgTS5GMkUoRiwgSz1LKQoKICAgIF8sIFIsIHQsIF8sIF8gPSByZWNvdmVyX3Bvc2UoRSwgSywgcDEsIHAyLAogICAgICAgICAgICBsb2c9RmFsc2UKICAgICAgICAgICAgKQogICAgcHJpbnQgJ0UnLCBFCiAgICBwcmludCAnRVInLCBSCiAgICBwcmludCAnRXQnLCB0CiAgICBwcmludF9SdChSLCB0KQogICAgSCwgXyA9IFcuSChwMSwgcDIsIG1ldGhvZD1jdjIuUkhPKQoKICAgIHJlc19oLCBIciwgSHQsIEhuID0gY3YyLmRlY29tcG9zZUhvbW9ncmFwaHlNYXQoSCwgSykKICAgIHByaW50IFtNLnV2ZWMoZS5yYXZlbCgpKSBmb3IgZSBpbiBIdF0KICAgIF8sIEhyLCBIdCwgXywgXyA9IHJlY292ZXJfcG9zZV9wZXJtKHppcChIciwgSHQpLCBLLCBwMSwgcDIsCiAgICAgICAgICAgIGxvZz1GYWxzZQogICAgICAgICAgICApCgogICAgcHJpbnQgJ0hyJywgSHIKICAgIHByaW50ICdIdCcsIEh0CiAgICBwcmludF9SdChIciwgSHQpCiAgICBwcmludCAnSCcsIEgKCiAgICBzZiwgXyA9IHNjb3JlX0YocDEsIHAyLCBGKQogICAgc2gsIF8gPSBzY29yZV9IKHAxLCBwMiwgSCkKCiAgICByaCA9IChzaCAvIChzaCArIHNmKSkKCiAgICBwcmludCAnc2YnLCBzZgogICAgcHJpbnQgJ3NoJywgc2gKICAgIHByaW50ICdyaCcsIHJoCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW4oKQo8fGZpbV9zdWZmaXh8PgoKZGVmIHNjb3JlX0gocHQxLCBwdDIsIEgsIHNpZ21hPTEuMCk6CiAgICAiIiIgSG9tb2dyYXBoeSBtb2RlbCBzeW1tZXRyaWMgdHJhbnNmZXIgZXJyb3IuICIiIgogICAgc2NvcmUgPSAwLjAKPHxmaW1fZW5kfD4="]
["e4c564bd1241ab42605054b138c7658967517e17-1","e4c564bd1241ab42605054b138c7658967517e17","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CgppbXBvcnQgdG9yY2gKCmZyb20gdG9yY2hkcnVnIGltcG9ydCB1dGlscwoKCmNsYXNzIFRvcmNoRXh0ZW5zaW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CgogICAgZGVmIHRlc3RfdHJhbnNmZXIoc2VsZik6CiAgICAgICAgZGF0YSA9IHsiYSI6IHRvcmNoLnJhbmQoMyksICJiIjogW3RvcmNoLnJhbmQoMiksIHRvcmNoLnJhbmQoNCldfQogICAgICAgIHJlc3VsdCA9IHV0aWxzLmN1ZGEoZGF0YSkKICAgICAgICB0cnV0aCA9IHsiYSI6IGRhdGFbImEiXS5jdWRhKCksICJiIjogW2RhdGFbImIiXVswXS5jdWRhKCksIGRhdGFbImIiXVsxXS5jdWRhKCldfQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgocmVzdWx0WyJhIl0gPT0gdHJ1dGhbImEiXSkuYWxsKCksICJJbmNvcnJlY3QgQ1BVIHRvIEdQVSB0cmFuc2ZlciIpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChyZXN1bHRbImIiXVswXSA9PSB0cnV0aFsiYiJdWzBdKS5hbGwoKSwgIkluY29ycmVjdCBDUFUgdG8gR1BVIHRyYW5zZmVyIikKICAgICAgICBzZWxmLmFzc2VydFRydWUoKHJlc3VsdFsiYiJdWzFdID09IHRydXRoWyJiIl1bMV0pLmFsbCgpLCAiSW5jb3JyZWN0IENQVSB0byBHUFUgdHJhbnNmZXIiKQoKICAgICAgICBkYXRhLCB0cnV0aCA9IHRydXRoLCBkYXRhCiAgICAgICAgcmVzdWx0ID0gdXRpbHMuY3B1KGRhdGEpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChyZXN1bHRbImEiXSA9PSB0cnV0aFsiYSJdKS5hbGwoKSwgIkluY29ycmVjdCBHUFUgdG8gQ1BVIHRyYW5zZmVyIikKICAgICAgICBzZWxmLmFzc2VydFRydWUoKHJlc3VsdFsiYiJdWzBdID09IHRydXRoWyJiIl1bMF0pLmFsbCgpLCAiSW5jb3JyZWN0IEdQVSB0byBDUFUgdHJhbnNmZXIiKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgocmVzdWx0WyJiIl1bMV0gPT0gdHJ1dGhbImIiXVsxXSkuYWxsKCksICJJbmNvcnJlY3QgR1BVIHRvIENQVSB0cmFuc2ZlciIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBkZWYgdGVzdF9zcGFyc2VfY29vX3RlbnNvcihzZWxmKToKICAgICAgICBudW1fbm9kZSA9IDEwCiAgICAgICAgbnVtX2VkZ2UgPSA0MAo8fGZpbV9lbmR8Pg=="]
["e4c564bd1241ab42605054b138c7658967517e17-2","e4c564bd1241ab42605054b138c7658967517e17","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CgppbXBvcnQgdG9yY2gKCmZyb20gdG9yY2hkcnVnIGltcG9ydCB1dGlscwoKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KY2xhc3MgVG9yY2hFeHRlbnNpb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKCiAgICBkZWYgdGVzdF90cmFuc2ZlcihzZWxmKToKICAgICAgICBkYXRhID0geyJhIjogdG9yY2gucmFuZCgzKSwgImIiOiBbdG9yY2gucmFuZCgyKSwgdG9yY2gucmFuZCg0KV19Cjx8ZmltX2VuZHw+"]
["e4c564bd1241ab42605054b138c7658967517e17-3","e4c564bd1241ab42605054b138c7658967517e17","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cgo8fGZpbV9ob2xlfD4KCmNsYXNzIFRvcmNoRXh0ZW5zaW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CgogICAgZGVmIHRlc3RfdHJhbnNmZXIoc2VsZik6CiAgICAgICAgZGF0YSA9IHsiYSI6IHRvcmNoLnJhbmQoMyksICJiIjogW3RvcmNoLnJhbmQoMiksIHRvcmNoLnJhbmQoNCldfQogICAgICAgIHJlc3VsdCA9IHV0aWxzLmN1ZGEoZGF0YSkKICAgICAgICB0cnV0aCA9IHsiYSI6IGRhdGFbImEiXS5jdWRhKCksICJiIjogW2RhdGFbImIiXVswXS5jdWRhKCksIGRhdGFbImIiXVsxXS5jdWRhKCldfQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgocmVzdWx0WyJhIl0gPT0gdHJ1dGhbImEiXSkuYWxsKCksICJJbmNvcnJlY3QgQ1BVIHRvIEdQVSB0cmFuc2ZlciIpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChyZXN1bHRbImIiXVswXSA9PSB0cnV0aFsiYiJdWzBdKS5hbGwoKSwgIkluY29ycmVjdCBDUFUgdG8gR1BVIHRyYW5zZmVyIikKICAgICAgICBzZWxmLmFzc2VydFRydWUoKHJlc3VsdFsiYiJdWzFdID09IHRydXRoWyJiIl1bMV0pLmFsbCgpLCAiSW5jb3JyZWN0IENQVSB0byBHUFUgdHJhbnNmZXIiKQoKICAgICAgICBkYXRhLCB0cnV0aCA9IHRydXRoLCBkYXRhCiAgICAgICAgcmVzdWx0ID0gdXRpbHMuY3B1KGRhdGEpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChyZXN1bHRbImEiXSA9PSB0cnV0aFsiYSJdKS5hbGwoKSwgIkluY29ycmVjdCBHUFUgdG8gQ1BVIHRyYW5zZmVyIikKICAgICAgICBzZWxmLmFzc2VydFRydWUoKHJlc3VsdFsiYiJdWzBdID09IHRydXRoWyJiIl1bMF0pLmFsbCgpLCAiSW5jb3JyZWN0IEdQVSB0byBDUFUgdHJhbnNmZXIiKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgocmVzdWx0WyJiIl1bMV0gPT0gdHJ1dGhbImIiXVsxXSkuYWxsKCksICJJbmNvcnJlY3QgR1BVIHRvIENQVSB0cmFuc2ZlciIpCgogICAgZGVmIHRlc3Rfc3BhcnNlX2Nvb190ZW5zb3Ioc2VsZik6CiAgICAgICAgbnVtX25vZGUgPSAxMAogICAgICAgIG51bV9lZGdlID0gNDAKICAgICAgICBpbmRpY2VzID0gdG9yY2gucmFuZGludCgwLCBudW1fbm9kZSwgKDIsIG51bV9lZGdlKSkKICAgICAgICB2YWx1ZXMgPSB0b3JjaC5yYW5kKG51bV9lZGdlKQogICAgICAgIHNoYXBlID0gKG51bV9ub2RlLCBudW1fbm9kZSkKICAgICAgICByZXN1bHQgPSB1dGlscy5zcGFyc2VfY29vX3RlbnNvcihpbmRpY2VzLCB2YWx1ZXMsIHNoYXBlKQogICAgICAgIHRydXRoID0gdG9yY2guc3BhcnNlX2Nvb190ZW5zb3IoaW5kaWNlcywgdmFsdWVzLCBzaGFwZSkKICAgICAgICBzZWxmLmFzc2VydFRydWUodG9yY2guZXF1YWwocmVzdWx0Ll9pbmRpY2VzKCksIHRydXRoLl9pbmRpY2VzKCkpLCAiSW5jb3JyZWN0IHNwYXJzZSBDT08gdGVuc29yIGNvbnN0cnVjdGlvbiIpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRvcmNoLmVxdWFsKHJlc3VsdC5fdmFsdWVzKCksIHRydXRoLl92YWx1ZXMoKSksICJJbmNvcnJlY3Qgc3BhcnNlIENPTyB0ZW5zb3IgY29uc3RydWN0aW9uIikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zaGFwZSwgdHJ1dGguc2hhcGUsICJJbmNvcnJlY3Qgc3BhcnNlIENPTyB0ZW5zb3IgY29uc3RydWN0aW9uIikKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgdW5pdHRlc3QubWFpbigpCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCB0b3JjaAoKZnJvbSB0b3JjaGRydWcgaW1wb3J0IHV0aWxzCgo8fGZpbV9lbmR8Pg=="]
["e4c564bd1241ab42605054b138c7658967517e17-4","e4c564bd1241ab42605054b138c7658967517e17","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0CgppbXBvcnQgdG9yY2gKCmZyb20gdG9yY2hkcnVnIGltcG9ydCB1dGlscwoKCmNsYXNzIFRvcmNoRXh0ZW5zaW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CgogICAgZGVmIHRlc3RfdHJhbnNmZXIoc2VsZik6CiAgICAgICAgZGF0YSA9IHsiYSI6IHRvcmNoLnJhbmQoMyksICJiIjogW3RvcmNoLnJhbmQoMiksIHRvcmNoLnJhbmQoNCldfQogICAgICAgIHJlc3VsdCA9IHV0aWxzLmN1ZGEoZGF0YSkKICAgICAgICB0cnV0aCA9IHsiYSI6IGRhdGFbImEiXS5jdWRhKCksICJiIjogW2RhdGFbImIiXVswXS5jdWRhKCksIGRhdGFbImIiXVsxXS5jdWRhKCldfQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgocmVzdWx0WyJhIl0gPT0gdHJ1dGhbImEiXSkuYWxsKCksICJJbmNvcnJlY3QgQ1BVIHRvIEdQVSB0cmFuc2ZlciIpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChyZXN1bHRbImIiXVswXSA9PSB0cnV0aFsiYiJdWzBdKS5hbGwoKSwgIkluY29ycmVjdCBDUFUgdG8gR1BVIHRyYW5zZmVyIikKICAgICAgICBzZWxmLmFzc2VydFRydWUoKHJlc3VsdFsiYiJdWzFdID09IHRydXRoWyJiIl1bMV0pLmFsbCgpLCAiSW5jb3JyZWN0IENQVSB0byBHUFUgdHJhbnNmZXIiKQoKICAgICAgICBkYXRhLCB0cnV0aCA9IHRydXRoLCBkYXRhCiAgICAgICAgcmVzdWx0ID0gdXRpbHMuY3B1KGRhdGEpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChyZXN1bHRbImEiXSA9PSB0cnV0aFsiYSJdKS5hbGwoKSwgIkluY29ycmVjdCBHUFUgdG8gQ1BVIHRyYW5zZmVyIikKICAgICAgICBzZWxmLmFzc2VydFRydWUoKHJlc3VsdFsiYiJdWzBdID09IHRydXRoWyJiIl1bMF0pLmFsbCgpLCAiSW5jb3JyZWN0IEdQVSB0byBDUFUgdHJhbnNmZXIiKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgocmVzdWx0WyJiIl1bMV0gPT0gdHJ1dGhbImIiXVsxXSkuYWxsKCksICJJbmNvcnJlY3QgR1BVIHRvIENQVSB0cmFuc2ZlciIpCgogICAgZGVmIHRlc3Rfc3BhcnNlX2Nvb190ZW5zb3Ioc2VsZik6CiAgICAgICAgbnVtX25vZGUgPSAxMAogICAgICAgIG51bV9lZGdlID0gNDAKICAgICAgICBpbmRpY2VzID0gdG9yY2gucmFuZGludCgwLCBudW1fbm9kZSwgKDIsIG51bV9lZGdlKSkKICAgICAgICB2YWx1ZXMgPSB0b3JjaC5yYW5kKG51bV9lZGdlKQogICAgICAgIHNoYXBlID0gKG51bV9ub2RlLCBudW1fbm9kZSkKICAgICAgICByZXN1bHQgPSB1dGlscy5zcGFyc2VfY29vX3RlbnNvcihpbmRpY2VzLCB2YWx1ZXMsIHNoYXBlKQogICAgICAgIHRydXRoID0gdG9yY2guc3BhcnNlX2Nvb190ZW5zb3IoaW5kaWNlcywgdmFsdWVzLCBzaGFwZSkKICAgICAgICBzZWxmLmFzc2VydFRydWUodG9yY2guZXF1YWwocmVzdWx0Ll9pbmRpY2VzKCksIHRydXRoLl9pbmRpY2VzKCkpLCAiSW5jb3JyZWN0IHNwYXJzZSBDT08gdGVuc29yIGNvbnN0cnVjdGlvbiIpCjx8ZmltX2hvbGV8PgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgdW5pdHRlc3QubWFpbigpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRvcmNoLmVxdWFsKHJlc3VsdC5fdmFsdWVzKCksIHRydXRoLl92YWx1ZXMoKSksICJJbmNvcnJlY3Qgc3BhcnNlIENPTyB0ZW5zb3IgY29uc3RydWN0aW9uIikKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zaGFwZSwgdHJ1dGguc2hhcGUsICJJbmNvcnJlY3Qgc3BhcnNlIENPTyB0ZW5zb3IgY29uc3RydWN0aW9uIikKCgo8fGZpbV9lbmR8Pg=="]
["e30f5522b60c39f156df2a698a3cf6a43e38e065-1","e30f5522b60c39f156df2a698a3cf6a43e38e065","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwpmcm9tIGRqYW5nby5jb250cmliLmF1dGgubW9kZWxzIGltcG9ydCBVc2VyCgoKY2xhc3MgVGhyZWFkKG1vZGVscy5Nb2RlbCk6CiAgICAiIiIgTW9kZWwgcmVwcmVzZW50aW5nIGEgZm9ydW0gdGhyZWFkICIiIgo8fGZpbV9ob2xlfD4KICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnRpdGxlCgoKY2xhc3MgVGhyZWFkTWVzc2FnZShtb2RlbHMuTW9kZWwpOgogICAgIiIiIE1vZGVsIHJlcHJlc2VudGluZyBhIGZvcnVtIHRocmVhZCBtZXNzYWdlICIiIgoKICAgIHRocmVhZCA9IG1vZGVscy5Gb3JlaWduS2V5KFRocmVhZCwgb25fZGVsZXRlPW1vZGVscy5DQVNDQURFKQogICAgdXNlciA9IG1vZGVscy5Gb3JlaWduS2V5KFVzZXIsIG9uX2RlbGV0ZT1tb2RlbHMuU0VUKCdEZWxldGVkJyksIHRvX2ZpZWxkPSd1c2VybmFtZScpCiAgICBkYXRlID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoJ0RhdGUgY3JlYXRlZCcsIGF1dG9fbm93X2FkZD1UcnVlKQogICAgbWVzc2FnZSA9IG1vZGVscy5UZXh0RmllbGQobWF4X2xlbmd0aD0zMDAwKQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiAoZidNZXNzYWdlIGJ5IHtzZWxmLnVzZXJ9IGNyZWF0ZWQge3NlbGYuZGF0ZX0gfCAnCiAgICAgICAgICAgICAgICBmJ3tzZWxmLm1lc3NhZ2V9JwogICAgICAgICAgICAgICAgKQo8fGZpbV9zdWZmaXh8PgogICAgY3JlYXRlZF9kYXRlID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoJ0RhdGUgY3JlYXRlZCcsIGF1dG9fbm93X2FkZD1UcnVlLCBudWxsPUZhbHNlKQogICAgdGl0bGUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTIwLCBudWxsPUZhbHNlKQogICAgY3JlYXRlZF9ieSA9IG1vZGVscy5Gb3JlaWduS2V5KFVzZXIsIG9uX2RlbGV0ZT1tb2RlbHMuU0VUKCdEZWxldGVkJyksIHRvX2ZpZWxkPSd1c2VybmFtZScpCgo8fGZpbV9lbmR8Pg=="]
["e30f5522b60c39f156df2a698a3cf6a43e38e065-2","e30f5522b60c39f156df2a698a3cf6a43e38e065","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwpmcm9tIGRqYW5nby5jb250cmliLmF1dGgubW9kZWxzIGltcG9ydCBVc2VyCgoKY2xhc3MgVGhyZWFkKG1vZGVscy5Nb2RlbCk6CiAgICAiIiIgTW9kZWwgcmVwcmVzZW50aW5nIGEgZm9ydW0gdGhyZWFkICIiIgogICAgY3JlYXRlZF9kYXRlID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoJ0RhdGUgY3JlYXRlZCcsIGF1dG9fbm93X2FkZD1UcnVlLCBudWxsPUZhbHNlKQogICAgdGl0bGUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTIwLCBudWxsPUZhbHNlKQogICAgY3JlYXRlZF9ieSA9IG1vZGVscy5Gb3JlaWduS2V5KFVzZXIsIG9uX2RlbGV0ZT1tb2RlbHMuU0VUKCdEZWxldGVkJyksIHRvX2ZpZWxkPSd1c2VybmFtZScpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi50aXRsZQoKCjx8ZmltX2VuZHw+"]
["e30f5522b60c39f156df2a698a3cf6a43e38e065-3","e30f5522b60c39f156df2a698a3cf6a43e38e065","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwpmcm9tIGRqYW5nby5jb250cmliLmF1dGgubW9kZWxzIGltcG9ydCBVc2VyCgoKY2xhc3MgVGhyZWFkKG1vZGVscy5Nb2RlbCk6CiAgICAiIiIgTW9kZWwgcmVwcmVzZW50aW5nIGEgZm9ydW0gdGhyZWFkICIiIgogICAgY3JlYXRlZF9kYXRlID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoJ0RhdGUgY3JlYXRlZCcsIGF1dG9fbm93X2FkZD1UcnVlLCBudWxsPUZhbHNlKQogICAgdGl0bGUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTIwLCBudWxsPUZhbHNlKQogICAgY3JlYXRlZF9ieSA9IG1vZGVscy5Gb3JlaWduS2V5KFVzZXIsIG9uX2RlbGV0ZT1tb2RlbHMuU0VUKCdEZWxldGVkJyksIHRvX2ZpZWxkPSd1c2VybmFtZScpCgogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYudGl0bGUKCgpjbGFzcyBUaHJlYWRNZXNzYWdlKG1vZGVscy5Nb2RlbCk6CiAgICAiIiIgTW9kZWwgcmVwcmVzZW50aW5nIGEgZm9ydW0gdGhyZWFkIG1lc3NhZ2UgIiIiCgogICAgdGhyZWFkID0gbW9kZWxzLkZvcmVpZ25LZXkoVGhyZWFkLCBvbl9kZWxldGU9bW9kZWxzLkNBU0NBREUpCiAgICB1c2VyID0gbW9kZWxzLkZvcmVpZ25LZXkoVXNlciwgb25fZGVsZXRlPW1vZGVscy5TRVQoJ0RlbGV0ZWQnKSwgdG9fZmllbGQ9J3VzZXJuYW1lJykKICAgIGRhdGUgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZCgnRGF0ZSBjcmVhdGVkJywgYXV0b19ub3dfYWRkPVRydWUpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIG1lc3NhZ2UgPSBtb2RlbHMuVGV4dEZpZWxkKG1heF9sZW5ndGg9MzAwMCkKCiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gKGYnTWVzc2FnZSBieSB7c2VsZi51c2VyfSBjcmVhdGVkIHtzZWxmLmRhdGV9IHwgJwo8fGZpbV9lbmR8Pg=="]
["e30f5522b60c39f156df2a698a3cf6a43e38e065-4","e30f5522b60c39f156df2a698a3cf6a43e38e065","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwpmcm9tIGRqYW5nby5jb250cmliLmF1dGgubW9kZWxzIGltcG9ydCBVc2VyCgoKY2xhc3MgVGhyZWFkKG1vZGVscy5Nb2RlbCk6CiAgICAiIiIgTW9kZWwgcmVwcmVzZW50aW5nIGEgZm9ydW0gdGhyZWFkICIiIgogICAgY3JlYXRlZF9kYXRlID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoJ0RhdGUgY3JlYXRlZCcsIGF1dG9fbm93X2FkZD1UcnVlLCBudWxsPUZhbHNlKQogICAgdGl0bGUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTIwLCBudWxsPUZhbHNlKQogICAgY3JlYXRlZF9ieSA9IG1vZGVscy5Gb3JlaWduS2V5KFVzZXIsIG9uX2RlbGV0ZT1tb2RlbHMuU0VUKCdEZWxldGVkJyksIHRvX2ZpZWxkPSd1c2VybmFtZScpCgogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYudGl0bGUKCgpjbGFzcyBUaHJlYWRNZXNzYWdlKG1vZGVscy5Nb2RlbCk6CiAgICAiIiIgTW9kZWwgcmVwcmVzZW50aW5nIGEgZm9ydW0gdGhyZWFkIG1lc3NhZ2UgIiIiCgogICAgdGhyZWFkID0gbW9kZWxzLkZvcmVpZ25LZXkoVGhyZWFkLCBvbl9kZWxldGU9bW9kZWxzLkNBU0NBREUpCiAgICB1c2VyID0gbW9kZWxzLkZvcmVpZ25LZXkoVXNlciwgb25fZGVsZXRlPW1vZGVscy5TRVQoJ0RlbGV0ZWQnKSwgdG9fZmllbGQ9J3VzZXJuYW1lJykKICAgIGRhdGUgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZCgnRGF0ZSBjcmVhdGVkJywgYXV0b19ub3dfYWRkPVRydWUpCiAgICBtZXNzYWdlID0gbW9kZWxzLlRleHRGaWVsZChtYXhfbGVuZ3RoPTMwMDApCgogICAgZGVmIF9fc3RyX18oc2VsZik6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICByZXR1cm4gKGYnTWVzc2FnZSBieSB7c2VsZi51c2VyfSBjcmVhdGVkIHtzZWxmLmRhdGV9IHwgJwogICAgICAgICAgICAgICAgZid7c2VsZi5tZXNzYWdlfScKICAgICAgICAgICAgICAgICkKPHxmaW1fZW5kfD4="]
["e30f5522b60c39f156df2a698a3cf6a43e38e065-5","e30f5522b60c39f156df2a698a3cf6a43e38e065","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwpmcm9tIGRqYW5nby5jb250cmliLmF1dGgubW9kZWxzIGltcG9ydCBVc2VyCgoKY2xhc3MgVGhyZWFkKG1vZGVscy5Nb2RlbCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICIiIiBNb2RlbCByZXByZXNlbnRpbmcgYSBmb3J1bSB0aHJlYWQgIiIiCiAgICBjcmVhdGVkX2RhdGUgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZCgnRGF0ZSBjcmVhdGVkJywgYXV0b19ub3dfYWRkPVRydWUsIG51bGw9RmFsc2UpCiAgICB0aXRsZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMjAsIG51bGw9RmFsc2UpCiAgICBjcmVhdGVkX2J5ID0gbW9kZWxzLkZvcmVpZ25LZXkoVXNlciwgb25fZGVsZXRlPW1vZGVscy5TRVQoJ0RlbGV0ZWQnKSwgdG9fZmllbGQ9J3VzZXJuYW1lJykKPHxmaW1fZW5kfD4="]
["ffc7ab0484d2d8ad46214b898da1ae072aa686df-1","ffc7ab0484d2d8ad46214b898da1ae072aa686df","PHxmaW1fcHJlZml4fD4KIiIiVXNlcnMgU2VsaXJhbGl6ZXJzIiIiCiNEUkYKZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgc2VyaWFsaXplcnMKI01vZGVscwpmcm9tIGNyaWRlLm1hdGNoZXMubW9kZWxzIGltcG9ydCBNYXRjaAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiNEamFuZ28KZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscwoKI1NlcmlhbGl6ZXIKPHxmaW1fZW5kfD4="]
["ffc7ab0484d2d8ad46214b898da1ae072aa686df-2","ffc7ab0484d2d8ad46214b898da1ae072aa686df","PHxmaW1fcHJlZml4fD4KIiIiVXNlcnMgU2VsaXJhbGl6ZXJzIiIiCiNEUkYKZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgc2VyaWFsaXplcnMKI01vZGVscwpmcm9tIGNyaWRlLm1hdGNoZXMubW9kZWxzIGltcG9ydCBNYXRjaAojRGphbmdvCmZyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKCiNTZXJpYWxpemVyCmZyb20gY3JpZGUuZXZlbnRzLnNlcmlhbGl6ZXJzIGltcG9ydCBFdmVudE1vZGVsU2VyaWFsaXplcgpmcm9tIGNyaWRlLnVzZXJzLnNlcmlhbGl6ZXJzIGltcG9ydCBVc2VyTW9kZWxTZXJpYWxpemVyCmZyb20gY3JpZGUubWF0Y2hlcy5zZXJpYWxpemVycyBpbXBvcnQgUmVxdWVzdE1vZGVsU2VyaWFsaXplcgoKY2xhc3MgTWF0Y2hNb2RlbFNlcmlhbGl6ZXIoc2VyaWFsaXplcnMuTW9kZWxTZXJpYWxpemVyKToKICBiYWNrX3VzZXIgPSBVc2VyTW9kZWxTZXJpYWxpemVyKHJlYWRfb25seSA9IFRydWUpCiAgbGF5X3VzZXIgPSBVc2VyTW9kZWxTZXJpYWxpemVyKHJlYWRfb25seSA9IFRydWUpCiAgZXZlbnQgPSBFdmVudE1vZGVsU2VyaWFsaXplcihyZWFkX29ubHkgPSBUcnVlKQogIHJlcXVlc3QgPSBSZXF1ZXN0TW9kZWxTZXJpYWxpemVyKHJlYWRfb25seSA9IFRydWUpCgogIGNsYXNzIE1ldGE6CiAgICAiIiJNZXRhIGNsYXNzIiIiCiAgICBtb2RlbCA9IE1hdGNoCiAgICBmaWVsZHM9ICgKICAgICAgImlkIiwgImV2ZW50IiwgInJlcXVlc3QiLCAiYmFja191c2VyIiwgImJhY2tfdGVhbSIsCiAgICAgICJsYXlfdXNlciIsICJsYXlfdGVhbSIsICJsb29zZXIiLAo8fGZpbV9ob2xlfD4KICAgICkKCjx8ZmltX3N1ZmZpeHw+CiAgICAgICJpc19maW5pc2hlZCIsICJhbW91bnQiLCAid2lubmVyIiwgInF1b3RlIgo8fGZpbV9lbmR8Pg=="]
["ffc7ab0484d2d8ad46214b898da1ae072aa686df-3","ffc7ab0484d2d8ad46214b898da1ae072aa686df","PHxmaW1fcHJlZml4fD4KIiIiVXNlcnMgU2VsaXJhbGl6ZXJzIiIiCiNEUkYKZnJvbSByZXN0X2ZyYW1ld29yayBpbXBvcnQgc2VyaWFsaXplcnMKI01vZGVscwpmcm9tIGNyaWRlLm1hdGNoZXMubW9kZWxzIGltcG9ydCBNYXRjaAojRGphbmdvCmZyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKCiNTZXJpYWxpemVyCmZyb20gY3JpZGUuZXZlbnRzLnNlcmlhbGl6ZXJzIGltcG9ydCBFdmVudE1vZGVsU2VyaWFsaXplcgpmcm9tIGNyaWRlLnVzZXJzLnNlcmlhbGl6ZXJzIGltcG9ydCBVc2VyTW9kZWxTZXJpYWxpemVyCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBjcmlkZS5tYXRjaGVzLnNlcmlhbGl6ZXJzIGltcG9ydCBSZXF1ZXN0TW9kZWxTZXJpYWxpemVyCgpjbGFzcyBNYXRjaE1vZGVsU2VyaWFsaXplcihzZXJpYWxpemVycy5Nb2RlbFNlcmlhbGl6ZXIpOgogIGJhY2tfdXNlciA9IFVzZXJNb2RlbFNlcmlhbGl6ZXIocmVhZF9vbmx5ID0gVHJ1ZSkKPHxmaW1fZW5kfD4="]
["083d7706fe8eed9d358a216285d65399617cdc31-1","083d7706fe8eed9d358a216285d65399617cdc31","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgppbXBvcnQgdGltZQppbXBvcnQgdHJhY2ViYWNrCgp0aW1lLmNsb2NrKCkKCkxJTktUWVBFU19MID0gWydTeW1ib2xpYyBmaWxlJywgJ0hhcmRsaW5rIGZpbGUnLCAnU3ltYm9saWMgZGlyJywgJ0p1bmN0aW9uIGRpciddCkxJTktUWVBFUyA9IHsnU3ltYm9saWMgZmlsZSc6ICcnLAogICAgICAgICAgICAgJ0hhcmRsaW5rIGZpbGUnOiAnL0gnLAogICAgICAgICAgICAgJ1N5bWJvbGljIGRpcic6ICcvRCcsCiAgICAgICAgICAgICAnSnVuY3Rpb24gZGlyJzogJy9KJwogICAgICAgICAgICB9CkxJTktUWVBFU19ESVIgPSBbJ1N5bWJvbGljIGRpcicsICdKdW5jdGlvbiBkaXInLCBMSU5LVFlQRVNbJ1N5bWJvbGljIGRpciddLCBMSU5LVFlQRVNbJ0p1bmN0aW9uIGRpciddXQpMSU5LVFlQRVNfRklMRSA9IFsnU3ltYm9saWMgZmlsZScsICdIYXJkbGluayBmaWxlJywgTElOS1RZUEVTWydTeW1ib2xpYyBmaWxlJ10sIExJTktUWVBFU1snSGFyZGxpbmsgZmlsZSddXQoKVFJBQ0VSX0FVVE9WRVJJRllfREVMQVkgPSAwLjUKCkNPTE9SX0JMQUNLID0gJyMwMDAnCkNPTE9SX1lFTExPVyA9ICcjYWEwJwpDT0xPUl9HUkVFTiA9ICcjMGEwJwpDT0xPUl9SRUQgPSAnI2EwMCcKCmRlZiBhc3NlcnRfbGlua3R5cGVzKGxpbmt0eXBlLCBzeW1ib2xwYXRoLCBhY3R1YWxwYXRoKToKICAgIGlmIG9zLnBhdGguaXNkaXIoYWN0dWFscGF0aCkgYW5kIGxpbmt0eXBlIG5vdCBpbiBMSU5LVFlQRVNfRElSIG9yIFwKICAgIG9zLnBhdGguaXNmaWxlKGFjdHVhbHBhdGgpIGFuZCBsaW5rdHlwZSBub3QgaW4gTElOS1RZUEVTX0ZJTEU6CiAgICAgICAgbWVzc2FnZSA9ICdJbnZhbGlkIGxpbmt0eXBlIHtsaW5rdHlwZX0gZm9yIHRhcmdldCBwYXRoIHt0YXJnZXR9JwogICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLmZvcm1hdChsaW5rdHlwZT1yZXByKGxpbmt0eXBlKSwgdGFyZ2V0PXJlcHIoYWN0dWFscGF0aCkpCiAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1lc3NhZ2UpCgpkZWYgbWtsaW5rKGxpbmt0eXBlLCBzeW1ib2xwYXRoLCBhY3R1YWxwYXRoKToKICAgIHN5bWJvbHBhdGggPSBvcy5wYXRoLmFic3BhdGgoc3ltYm9scGF0aCkKICAgIGFjdHVhbHBhdGggPSBvcy5wYXRoLmFic3BhdGgoYWN0dWFscGF0aCkKICAgIHRyeToKICAgICAgICBhc3NlcnRfbGlua3R5cGVzKGxpbmt0eXBlLCBzeW1ib2xwYXRoLCBhY3R1YWxwYXRoKQogICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKICAgICAgICByZXR1cm4gRmFsc2UKICAgIGNvbW1hbmQgPSAnbWtsaW5rIHtsaW5rdHlwZX0gIntzeW1ib2xwYXRofSIgInthY3R1YWxwYXRofSInCiAgICBjb21tYW5kID0gY29tbWFuZC5mb3JtYXQobGlua3R5cGU9bGlua3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9scGF0aD1zeW1ib2xwYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbHBhdGg9YWN0dWFscGF0aCkKICAgIHByaW50KCcnLmpvaW4oYyBmb3IgYyBpbiBjb21tYW5kIGlmIGMgaW4gc3RyaW5nLnByaW50YWJsZSkpCiAgICBzdGF0dXNfY29kZSA9IG9zLnN5c3RlbShjb21tYW5kKQogICAgaWYgc3RhdHVzX2NvZGUgIT0gMDoKICAgICAgICByZXR1cm4gRmFsc2UKICAgIGlmIGxpbmt0eXBlIGluIExJTktUWVBFU19ESVI6CiAgICAgICAgc3ltdHlwZSA9ICdzeW1saW5rJyBpZiBsaW5rdHlwZSA9PSAnL0QnIGVsc2UgJ2p1bmN0aW9uJwogICAgICAgIHN5bWxpbmtfaW5mbyA9IHN5bXR5cGUgKyB0aW1lLnN0cmZ0aW1lKCdfJVklbSVkLSVIJU0lUy50eHQnKQogICAgICAgIHN5bWxpbmtfaW5mbyA9IG9zLnBhdGguam9pbihhY3R1YWxwYXRoLCBzeW1saW5rX2luZm8pCiAgICAgICAgc3ltbGlua19pbmZvID0gb3BlbihzeW1saW5rX2luZm8sICd3JykKICAgICAgICBzeW1saW5rX2luZm8ud3JpdGUoJ2FjdHVhbDogJyArIGFjdHVhbHBhdGgpCiAgICAgICAgc3ltbGlua19pbmZvLndyaXRlKCdcbicpCiAgICAgICAgc3ltbGlua19pbmZvLndyaXRlKHN5bXR5cGUgKyAnOiAnICsgc3ltYm9scGF0aCkKICAgICAgICBzeW1saW5rX2luZm8uY2xvc2UoKQoKCmNsYXNzIExpbmtHVUk6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi50ID0gdGtpbnRlci5UaygpCgogICAgICAgIHNlbGYudHJhY2VyX25leHRhdXRvdmVyaWZ5ID0gMAogICAgICAgIHNlbGYudHJhY2VyX2xhc3RrZXlzdHJva2VfdmVyaWZpZWQgPSBGYWxzZQogICAgICAgIHNlbGYudHJhY2VyX2FjdGl2ZXdhaXRlciA9IEZhbHNlCgogICAgICAgIHNlbGYuc3RyaW5ndmFyX2FjdHVhbHBhdGggPSB0a2ludGVyLlN0cmluZ1ZhcigpCiAgICAgICAgc2VsZi5zdHJpbmd2YXJfZHJvcGRvd24gPSB0a2ludGVyLlN0cmluZ1ZhcigpCiAgICAgICAgc2VsZi5sYWJlbF9hY3R1YWxwYXRoID0gdGtpbnRlci5MYWJlbChzZWxmLnQsIHRleHQ9J0FjdHVhbCBwYXRoOicpCiAgICAgICAgc2VsZi5sYWJlbF9zeW1ib2xwYXRoID0gdGtpbnRlci5MYWJlbChzZWxmLnQsIHRleHQ9J1N5bWJvbCBwYXRoOicpCiAgICAgICAgc2VsZi5lbnRyeV9hY3R1YWxwYXRoID0gdGtpbnRlci5FbnRyeShzZWxmLnQsIHdpZHRoPTcwLCB0ZXh0dmFyaWFibGU9c2VsZi5zdHJpbmd2YXJfYWN0dWFscGF0aCkKICAgICAgICBzZWxmLmVudHJ5X3N5bWJvbHBhdGggPSB0a2ludGVyLkVudHJ5KHNlbGYudCwgd2lkdGg9NzApCiAgICAgICAgc2VsZi5kcm9wZG93bl9saW5rdHlwZSA9IHRraW50ZXIuT3B0aW9uTWVudShzZWxmLnQsIHNlbGYuc3RyaW5ndmFyX2Ryb3Bkb3duLCAqTElOS1RZUEVTX0wpCiAgICAgICAgc2VsZi5kcm9wZG93bl9saW5rdHlwZS5jb25maWd1cmUod2lkdGg9MTUpCiAgICAgICAgc2VsZi5idXR0b25fZG9faXQgPSB0a2ludGVyLkJ1dHRvbihzZWxmLnQsIHRleHQ9J0RvIGl0LicsIGNvbW1hbmQ9c2VsZi5kb19pdCkKCiAgICAgICAgc2VsZi5zdHJpbmd2YXJfYWN0dWFscGF0aC50cmFjZSgndycsIHNlbGYudHJhY2V3YXRjaGVyKQogICAgICAgIHNlbGYuc3RyaW5ndmFyX2Ryb3Bkb3duLnRyYWNlKCd3JywgbGFtYmRhICpiYjogc2VsZi50cmFjZXJfdmVyaWZ5X2NvbG9ycyhGYWxzZSkpCiAgICAgICAgc2VsZi5zdHJpbmd2YXJfYWN0dWFscGF0aC5zZXQob3MuZ2V0Y3dkKCkpCiAgICAgICAgc2VsZi5lbnRyeV9zeW1ib2xwYXRoLmluc2VydCgwLCBvcy5nZXRjd2QoKSkKCiAgICAgICAgc2VsZi5sYWJlbF9hY3R1YWxwYXRoLmdyaWQocm93PTAsIGNvbHVtbj0wLCBzdGlja3k9J2UnKQogICAgICAgIHNlbGYubGFiZWxfc3ltYm9scGF0aC5ncmlkKHJvdz0xLCBjb2x1bW49MCwgc3RpY2t5PSdlJykKICAgICAgICBzZWxmLmVudHJ5X2FjdHVhbHBhdGguZ3JpZChyb3c9MCwgY29sdW1uPTEsIHN0aWNreT0nZXcnKQogICAgICAgIHNlbGYuZW50cnlfc3ltYm9scGF0aC5ncmlkKHJvdz0xLCBjb2x1bW49MSwgc3RpY2t5PSdldycpCiAgICAgICAgc2VsZi5kcm9wZG93bl9saW5rdHlwZS5ncmlkKHJvdz0yLCBjb2x1bW49MCkKICAgICAgICBzZWxmLmJ1dHRvbl9kb19pdC5ncmlkKHJvdz0yLCBjb2x1bW49MSwgc3RpY2t5PSdlJykKCiAgICAgICAgc2VsZi50LmdyaWRfY29sdW1uY29uZmlndXJlKDEsIHdlaWdodD0xKQogICAgICAgIHNlbGYudC5tYWlubG9vcCgpCgogICAgZGVmIGRvX2l0KHNlbGYsICpiYik6CiAgICAgICAgbGlua3R5cGUgPSBzZWxmLnN0cmluZ3Zhcl9kcm9wZG93bi5nZXQoKQogICAgICAgIGxpbmt0eXBlID0gTElOS1RZUEVTW2xpbmt0eXBlXQogICAgICAgIGFjdHVhbHBhdGggPSBzZWxmLmVudHJ5X2FjdHVhbHBhdGguZ2V0KCkKICAgICAgICBzeW1ib2xwYXRoID0gc2VsZi5lbnRyeV9zeW1ib2xwYXRoLmdldCgpCiAgICAgICAgc3RhdHVzID0gbWtsaW5rKGxpbmt0eXBlLCBhY3R1YWxwYXRoPWFjdHVhbHBhdGgsIHN5bWJvbHBhdGg9c3ltYm9scGF0aCkKICAgICAgICBpZiBzdGF0dXMgaXMgRmFsc2U6CiAgICAgICAgICAgIHNlbGYuYnV0dG9uX2RvX2l0LmNvbmZpZ3VyZShiZz1DT0xPUl9SRUQpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5idXR0b25fZG9faXQuY29uZmlndXJlKGJnPUNPTE9SX0dSRUVOKQoKICAgIGRlZiB0cmFjZXdhdGNoZXIoc2VsZiwgKmJiKToKICAgICAgICBzZWxmLnRyYWNlcl9sYXN0a2V5c3Ryb2tlX3ZlcmlmaWVkID0gRmFsc2UKICAgICAgICBzZWxmLnRyYWNlcl9uZXh0YXV0b3ZlcmlmeSA9IHRpbWUudGltZSgpICsgVFJBQ0VSX0FVVE9WRVJJRllfREVMQVkKICAgICAgICBpZiBzZWxmLnRyYWNlcl9hY3RpdmV3YWl0ZXIgaXMgRmFsc2U6CiAgICAgICAgICAgIHNlbGYudHJhY2VyX3ZlcmlmeSgpCgogICAgZGVmIHRyYWNlcl92ZXJpZnkoc2VsZik6CiAgICAgICAgbm93ID0gdGltZS50aW1lKCkKICAgICAgICBpZiBzZWxmLnRyYWNlcl9sYXN0a2V5c3Ryb2tlX3ZlcmlmaWVkIGlzIFRydWU6CiAgICAgICAgICAgIHJldHVybgogICAgICAgIGlmIG5vdyA8IHNlbGYudHJhY2VyX25leHRhdXRvdmVyaWZ5OgogICAgICAgICAgICBkZWxheSA9IGludChUUkFDRVJfQVVUT1ZFUklGWV9ERUxBWSAqIDEwMDApCiAgICAgICAgICAgIHNlbGYudC5hZnRlcihkZWxheSwgc2VsZi50cmFjZXJfdmVyaWZ5KQogICAgICAgICAgICBzZWxmLnRyYWNlcl9hY3RpdmV3YWl0ZXIgPSBUcnVlCiAgICAgICAgICAgIHNlbGYuZHJvcGRvd25fbGlua3R5cGUuY29uZmlnKGZnPUNPTE9SX1lFTExPVykKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgc2VsZi50cmFjZXJfbGFzdGtleXN0cm9rZV92ZXJpZmllZCA9IFRydWUKICAgICAgICBzZWxmLnRyYWNlcl9hY3RpdmV3YWl0ZXIgPSBGYWxzZQoKICAgICAgICBzZWxmLnRyYWNlcl92ZXJpZnlfY29sb3JzKHNldF9mb3JfbWU9VHJ1ZSkKCiAgICBkZWYgdHJhY2VyX3ZlcmlmeV9jb2xvcnMoc2VsZiwgc2V0X2Zvcl9tZT1GYWxzZSwgKmJiKToKICAgICAgICBwYXRoID0gc2VsZi5zdHJpbmd2YXJfYWN0dWFscGF0aC5nZXQoKQogICAgICAgIGxpbmt0eXBlID0gc2VsZi5zdHJpbmd2YXJfZHJvcGRvd24uZ2V0KCkKICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShwYXRoKToKICAgICAgICAgICAgaWYgc2V0X2Zvcl9tZSBhbmQgbGlua3R5cGUgbm90IGluIExJTktUWVBFU19GSUxFOgogICAgICAgICAgICAgICAgc2VsZi5zdHJpbmd2YXJfZHJvcGRvd24uc2V0KCdTeW1ib2xpYyBmaWxlJykKICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICBpZiBsaW5rdHlwZSBpbiBMSU5LVFlQRVNfRklMRToKICAgICAgICAgICAgICAgIHNlbGYuZHJvcGRvd25fbGlua3R5cGUuY29uZmlnKGZnPUNPTE9SX0dSRUVOKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgc2VsZi5kcm9wZG93bl9saW5rdHlwZS5jb25maWcoZmc9Q09MT1JfQkxBQ0spCiAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgogICAgICAgICAgICBpZiBzZXRfZm9yX21lIGFuZCBsaW5rdHlwZSBub3QgaW4gTElOS1RZUEVTX0RJUjoKICAgICAgICAgICAgICAgIHNlbGYuc3RyaW5ndmFyX2Ryb3Bkb3duLnNldCgnU3ltYm9saWMgZGlyJykKICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICBpZiBsaW5rdHlwZSBpbiBMSU5LVFlQRVNfRElSOgogICAgICAgICAgICAgICAgc2VsZi5kcm9wZG93bl9saW5rdHlwZS5jb25maWcoZmc9Q09MT1JfR1JFRU4pCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBzZWxmLmRyb3Bkb3duX2xpbmt0eXBlLmNvbmZpZyhmZz1DT0xPUl9CTEFDSykKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLmRyb3Bkb3duX2xpbmt0eXBlLmNvbmZpZyhmZz1DT0xPUl9CTEFDSykKCiNta2xpbmsoTElOS1RZUEVfU1lNQk9MSUNfRElSLCAnZXhhbXBsZXNcXHN5bWJvbGljX2RpcicsICdleGFtcGxlc1xcYWN0dWFsX2RpcicpCiNta2xpbmsoTElOS1RZUEVfSlVOQ1RJT05fRElSLCAnZXhhbXBsZXNcXGp1bmN0aW9uX2RpcicsICdleGFtcGxlc1xcYWN0dWFsX2RpcicpCiNta2xpbmsoTElOS1RZUEVfU1lNQk9MSUNfRklMRSwgJ2V4YW1wbGVzXFxzeW1ib2xpY19maWxlLnR4dCcsICdleGFtcGxlc1xcYWN0dWFsX2ZpbGUudHh0JykKI21rbGluayhMSU5LVFlQRV9IQVJETElOS19GSUxFLCAnZXhhbXBsZXNcXGhhcmRsaW5rX2ZpbGUudHh0JywgJ2V4YW1wbGVzXFxhY3R1YWxfZmlsZS50eHQnKQpsaW5rZXIgPSBMaW5rR1VJKCkKcHJpbnQoJ1sgezB9IGVsYXBzZWQgXScuZm9ybWF0KHJvdW5kKHRpbWUuY2xvY2soKSwgMykpKQoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IG9zCmltcG9ydCBzeXMKaW1wb3J0IHN0cmluZwppbXBvcnQgdGtpbnRlcgo8fGZpbV9lbmR8Pg=="]
["f84d73ef4b2347c7cad64e04a2417d43806ae211-1","f84d73ef4b2347c7cad64e04a2417d43806ae211","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN1YnByb2Nlc3MKaW1wb3J0IG9zCgojIEZGUFJPQkXjgbjjga7jg5HjgrkKRkZQUk9CRSA9ICIvdXNyL2xvY2FsL2Jpbi9mZnByb2JlIgojIOaSruW9seaXpeaZguOBrumgheebruWQjeaWh+Wtl+WIlwpDUkVBVEVEX0RBVEVUSU1FID0gImNyZWF0aW9uX3RpbWUiCgpkZWYgZ2V0X2luZm9fc3RyaW5ncyhwYXRoKToKICAgICIiIgogICAgZmZwcm9iZeOCkuWun+ihjOOBl+OBpue1kOaenOaWh+Wtl+WIl+OCkuODgeODo+ODl+OCv+ODvOaDheWgseOCguWQq+OCgeOBpuWPluW+lwoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHBhdGggOiBzdHJpbmcKICAgICAgICDlr77osaHjga7li5XnlLvjg5XjgqHjgqTjg6vjg5HjgrkKCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBzdHJpbmcKICAgICAgICBmZnByb2Jl44Gu5a6f6KGM57WQ5p6c5paH5a2X5YiX44CB44OV44Kh44Kk44Or44GM5a2Y5Zyo44GX44Gq44GL44Gj44Gf5aC05ZCI44GvTm9uZeOAggogICAgIiIiCiAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CiAgICAgICAgcmV0dXJuIE5vbmUKICAgIHByb2MgPSBzdWJwcm9jZXNzLnJ1bihbRkZQUk9CRSwiLXNob3dfY2hhcHRlcnMiLCItaGlkZV9iYW5uZXIiLHBhdGhdLAogICAgICAgICAgICBzdGRvdXQgPSBzdWJwcm9jZXNzLlBJUEUsIHN0ZGVyciA9IHN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgZW5jb2RpbmcgPSAidXRmOCIsIGVycm9ycz0naWdub3JlJykKICAgIHJlc3BvbnNlID0gcHJvYy5zdGRvdXQrIlxuIisocHJvYy5zdGRlcnIpCiAgICBzdHJpbmdzID0gIiIKICAgIGZvciBsaW5lIGluIHJlc3BvbnNlLnNwbGl0bGluZXMoKToKICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIklucHV0ICIpIG9yIGxpbmUuc3RhcnRzd2l0aCgiVW5zdXBwb3J0ZWQgY29kZWMiKToKICAgICAgICAgICAgY29udGludWUKICAgICAgICBlbHNlOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIHN0cmluZ3MgPSBzdHJpbmdzICsgIlxuIiArIGxpbmUKPHxmaW1fZW5kfD4="]
["f84d73ef4b2347c7cad64e04a2417d43806ae211-2","f84d73ef4b2347c7cad64e04a2417d43806ae211","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN1YnByb2Nlc3MKaW1wb3J0IG9zCgojIEZGUFJPQkXjgbjjga7jg5HjgrkKRkZQUk9CRSA9ICIvdXNyL2xvY2FsL2Jpbi9mZnByb2JlIgojIOaSruW9seaXpeaZguOBrumgheebruWQjeaWh+Wtl+WIlwpDUkVBVEVEX0RBVEVUSU1FID0gImNyZWF0aW9uX3RpbWUiCgpkZWYgZ2V0X2luZm9fc3RyaW5ncyhwYXRoKToKICAgICIiIgogICAgZmZwcm9iZeOCkuWun+ihjOOBl+OBpue1kOaenOaWh+Wtl+WIl+OCkuODgeODo+ODl+OCv+ODvOaDheWgseOCguWQq+OCgeOBpuWPluW+lwoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHBhdGggOiBzdHJpbmcKICAgICAgICDlr77osaHjga7li5XnlLvjg5XjgqHjgqTjg6vjg5HjgrkKCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBzdHJpbmcKICAgICAgICBmZnByb2Jl44Gu5a6f6KGM57WQ5p6c5paH5a2X5YiX44CB44OV44Kh44Kk44Or44GM5a2Y5Zyo44GX44Gq44GL44Gj44Gf5aC05ZCI44GvTm9uZeOAggogICAgIiIiCiAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CiAgICAgICAgcmV0dXJuIE5vbmUKICAgIHByb2MgPSBzdWJwcm9jZXNzLnJ1bihbRkZQUk9CRSwiLXNob3dfY2hhcHRlcnMiLCItaGlkZV9iYW5uZXIiLHBhdGhdLAogICAgICAgICAgICBzdGRvdXQgPSBzdWJwcm9jZXNzLlBJUEUsIHN0ZGVyciA9IHN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgZW5jb2RpbmcgPSAidXRmOCIsIGVycm9ycz0naWdub3JlJykKICAgIHJlc3BvbnNlID0gcHJvYy5zdGRvdXQrIlxuIisocHJvYy5zdGRlcnIpCiAgICBzdHJpbmdzID0gIiIKICAgIGZvciBsaW5lIGluIHJlc3BvbnNlLnNwbGl0bGluZXMoKToKICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIklucHV0ICIpIG9yIGxpbmUuc3RhcnRzd2l0aCgiVW5zdXBwb3J0ZWQgY29kZWMiKToKICAgICAgICAgICAgY29udGludWUKICAgICAgICBlbHNlOgogICAgICAgICAgICBzdHJpbmdzID0gc3RyaW5ncyArICJcbiIgKyBsaW5lCiAgICByZXR1cm4gc3RyaW5ncy5zdHJpcCgpCgpkZWYgZ2V0X2RhdGV0aW1lKHBhdGgpOgogICAgIiIiCiAgICDmjIflrprjga7li5XnlLvjg5XjgqHjgqTjg6vjga7mkq7lvbHml6XmmYLmloflrZfliJfjgpLlj5blvpcKCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBwYXRoIDogc3RyaW5nCiAgICAgICAg5a++6LGh44Gu5YuV55S744OV44Kh44Kk44Or44OR44K5CgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgc3RyaW5nCiAgICAgICAg5pKu5b2x5pel5pmC5paH5a2X5YiXKEVYSUbmg4XloLHjga7jg5Xjgqnjg7zjg57jg4Pjg4jjgavlkIjjgo/jgZvjgZ/jg5Xjgqnjg7zjg57jg4Pjg4gpCiAgICAiIiIKICAgIHJlc3BvbnNlID0gZ2V0X2luZm9fc3RyaW5ncyhwYXRoKQogICAgaWYgcmVzcG9uc2UgaXMgTm9uZToKICAgICAgICByZXR1cm4gTm9uZQogICAgZm9yIGxpbmUgaW4gcmVzcG9uc2Uuc3BsaXRsaW5lcygpOgogICAgICAgIGlmIENSRUFURURfREFURVRJTUUgaW4gbGluZToKICAgICAgICAgICAgc3RyID0gbGluZS5zdHJpcCgpLnJlcGxhY2UoQ1JFQVRFRF9EQVRFVElNRSwiIikuc3RyaXAoKS5yZXBsYWNlKCI6ICIsIiIpLnN0cmlwKCkucmVwbGFjZSgiVCIsIiAiKS5yZXBsYWNlKCJaIiwiIikKICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKCItIiwiOiIpCgpkZWYgaXNfZXF1YWwocGF0aDEsIHBhdGgyKToKICAgICIiIgogICAg5oyH5a6a44Gu5YuV55S744OV44Kh44Kk44Or44Gu5pKu5b2x5pel5pmC5paH5a2X5YiX44KS5Y+W5b6XCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgcGF0aDEgOiBzdHJpbmcKICAgICAgICDlr77osaHjga7li5XnlLvjg5XjgqHjgqTjg6vjg5HjgrkKICAgIHBhdGgyIDogc3RyaW5nCiAgICAgICAg5a++6LGh44Gu5YuV55S744OV44Kh44Kk44Or44OR44K5CgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgQm9vbGVhbgogICAgICAgIO+8kuOBpOOBruODleOCoeOCpOODq+OBrmZmcHJvYmXmg4XloLHjgYzkuIDoh7TjgZfjgZ/jgolUcnVlCiAgICAiIiIKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoMSk6CiAgICAgICAgcmFpc2UgRmlsZU5vdEZvdW5kRXJyb3IoIiVzIGlzIG5vdCBmb3VuZC4iICUgcGF0aDEpCiAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aDIpOgogICAgICAgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yKCIlcyBpcyBub3QgZm91bmQuIiAlIHBhdGgyKQoKICAgIHJlczEgPSBnZXRfaW5mb19zdHJpbmdzKHBhdGgxKQogICAgcmVzMiA9IGdldF9pbmZvX3N0cmluZ3MocGF0aDIpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBpZiByZXMxIGlzIE5vbmUgb3IgcmVzMiBpcyBOb25lOgogICAgICAgIHJldHVybiBGYWxzZQogICAgZWxpZiByZXMxID09IHJlczI6CiAgICAgICAgaWYgb3MucGF0aC5nZXRzaXplKHBhdGgxKSA9PSBvcy5wYXRoLmdldHNpemUocGF0aDIpOgo8fGZpbV9lbmR8Pg=="]
["f84d73ef4b2347c7cad64e04a2417d43806ae211-3","f84d73ef4b2347c7cad64e04a2417d43806ae211","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHN1YnByb2Nlc3MKaW1wb3J0IG9zCgojIEZGUFJPQkXjgbjjga7jg5HjgrkKRkZQUk9CRSA9ICIvdXNyL2xvY2FsL2Jpbi9mZnByb2JlIgojIOaSruW9seaXpeaZguOBrumgheebruWQjeaWh+Wtl+WIlwpDUkVBVEVEX0RBVEVUSU1FID0gImNyZWF0aW9uX3RpbWUiCgpkZWYgZ2V0X2luZm9fc3RyaW5ncyhwYXRoKToKICAgICIiIgogICAgZmZwcm9iZeOCkuWun+ihjOOBl+OBpue1kOaenOaWh+Wtl+WIl+OCkuODgeODo+ODl+OCv+ODvOaDheWgseOCguWQq+OCgeOBpuWPluW+lwoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHBhdGggOiBzdHJpbmcKICAgICAgICDlr77osaHjga7li5XnlLvjg5XjgqHjgqTjg6vjg5HjgrkKCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBzdHJpbmcKICAgICAgICBmZnByb2Jl44Gu5a6f6KGM57WQ5p6c5paH5a2X5YiX44CB44OV44Kh44Kk44Or44GM5a2Y5Zyo44GX44Gq44GL44Gj44Gf5aC05ZCI44GvTm9uZeOAggogICAgIiIiCiAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CiAgICAgICAgcmV0dXJuIE5vbmUKICAgIHByb2MgPSBzdWJwcm9jZXNzLnJ1bihbRkZQUk9CRSwiLXNob3dfY2hhcHRlcnMiLCItaGlkZV9iYW5uZXIiLHBhdGhdLAogICAgICAgICAgICBzdGRvdXQgPSBzdWJwcm9jZXNzLlBJUEUsIHN0ZGVyciA9IHN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgZW5jb2RpbmcgPSAidXRmOCIsIGVycm9ycz0naWdub3JlJykKICAgIHJlc3BvbnNlID0gcHJvYy5zdGRvdXQrIlxuIisocHJvYy5zdGRlcnIpCiAgICBzdHJpbmdzID0gIiIKICAgIGZvciBsaW5lIGluIHJlc3BvbnNlLnNwbGl0bGluZXMoKToKICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIklucHV0ICIpIG9yIGxpbmUuc3RhcnRzd2l0aCgiVW5zdXBwb3J0ZWQgY29kZWMiKToKICAgICAgICAgICAgY29udGludWUKICAgICAgICBlbHNlOgogICAgICAgICAgICBzdHJpbmdzID0gc3RyaW5ncyArICJcbiIgKyBsaW5lCiAgICByZXR1cm4gc3RyaW5ncy5zdHJpcCgpCgpkZWYgZ2V0X2RhdGV0aW1lKHBhdGgpOgogICAgIiIiCiAgICDmjIflrprjga7li5XnlLvjg5XjgqHjgqTjg6vjga7mkq7lvbHml6XmmYLmloflrZfliJfjgpLlj5blvpcKCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBwYXRoIDogc3RyaW5nCjx8ZmltX2hvbGV8PgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgc3RyaW5nCiAgICAgICAg5pKu5b2x5pel5pmC5paH5a2X5YiXKEVYSUbmg4XloLHjga7jg5Xjgqnjg7zjg57jg4Pjg4jjgavlkIjjgo/jgZvjgZ/jg5Xjgqnjg7zjg57jg4Pjg4gpCiAgICAiIiIKICAgIHJlc3BvbnNlID0gZ2V0X2luZm9fc3RyaW5ncyhwYXRoKQogICAgaWYgcmVzcG9uc2UgaXMgTm9uZToKICAgICAgICByZXR1cm4gTm9uZQogICAgZm9yIGxpbmUgaW4gcmVzcG9uc2Uuc3BsaXRsaW5lcygpOgogICAgICAgIGlmIENSRUFURURfREFURVRJTUUgaW4gbGluZToKICAgICAgICAgICAgc3RyID0gbGluZS5zdHJpcCgpLnJlcGxhY2UoQ1JFQVRFRF9EQVRFVElNRSwiIikuc3RyaXAoKS5yZXBsYWNlKCI6ICIsIiIpLnN0cmlwKCkucmVwbGFjZSgiVCIsIiAiKS5yZXBsYWNlKCJaIiwiIikKICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKCItIiwiOiIpCgpkZWYgaXNfZXF1YWwocGF0aDEsIHBhdGgyKToKICAgICIiIgogICAg5oyH5a6a44Gu5YuV55S744OV44Kh44Kk44Or44Gu5pKu5b2x5pel5pmC5paH5a2X5YiX44KS5Y+W5b6XCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgcGF0aDEgOiBzdHJpbmcKICAgICAgICDlr77osaHjga7li5XnlLvjg5XjgqHjgqTjg6vjg5HjgrkKICAgIHBhdGgyIDogc3RyaW5nCiAgICAgICAg5a++6LGh44Gu5YuV55S744OV44Kh44Kk44Or44OR44K5CgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgQm9vbGVhbgogICAgICAgIO+8kuOBpOOBruODleOCoeOCpOODq+OBrmZmcHJvYmXmg4XloLHjgYzkuIDoh7TjgZfjgZ/jgolUcnVlCiAgICAiIiIKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoMSk6CiAgICAgICAgcmFpc2UgRmlsZU5vdEZvdW5kRXJyb3IoIiVzIGlzIG5vdCBmb3VuZC4iICUgcGF0aDEpCiAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aDIpOgogICAgICAgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yKCIlcyBpcyBub3QgZm91bmQuIiAlIHBhdGgyKQoKICAgIHJlczEgPSBnZXRfaW5mb19zdHJpbmdzKHBhdGgxKQogICAgcmVzMiA9IGdldF9pbmZvX3N0cmluZ3MocGF0aDIpCgogICAgaWYgcmVzMSBpcyBOb25lIG9yIHJlczIgaXMgTm9uZToKICAgICAgICByZXR1cm4gRmFsc2UKICAgIGVsaWYgcmVzMSA9PSByZXMyOgogICAgICAgIGlmIG9zLnBhdGguZ2V0c2l6ZShwYXRoMSkgPT0gb3MucGF0aC5nZXRzaXplKHBhdGgyKToKICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIEZhbHNlCgo8fGZpbV9zdWZmaXh8PgogICAgICAgIOWvvuixoeOBruWLleeUu+ODleOCoeOCpOODq+ODkeOCuQoKPHxmaW1fZW5kfD4="]
["f2302bbc313a084cdb37096732c57674a7f4390a-1","f2302bbc313a084cdb37096732c57674a7f4390a","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiIgogICAgWmVuTWF4QnVpbGRlciBDb3B5cmlnaHQgwqkgMjAyMSBkYXJrbWFzdGVyQGdybTM0IGh0dHBzOi8vZ2l0aHViLmNvbS9ncm0zNAoKICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoiIiIKaW1wb3J0IG9zCmltcG9ydCBzeXMKCmltcG9ydCBpbnF1aXJlcgpmcm9tIGlucXVpcmVyLnRoZW1lcyBpbXBvcnQgbG9hZF90aGVtZV9mcm9tX2RpY3QKZnJvbSBtb2R1bGVzLmlucXVpcmVyLm1vZGUgaW1wb3J0IGFwcF9tb2RlCmZyb20gbW9kdWxlcy5pbnF1aXJlci5zZXNzaW9uIGltcG9ydCBhcHBfc2Vzc2lvbgoKCmRlZiBhc2tfZm9yX21vZGUoc2VsZik6CiAgICAiIiJSdW4gYGlucXVpcmVyYCBtb2RlCgogICAgRnVuY3Rpb25zCiAgICAtLS0tLS0tLS0KICAgICAgICBgYXBwX21vZGVgOiAiYXBwbGljYXRpb24gbW9kZSBzZWxlY3Rpb24iCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgICAgICJzdHJpbmcgY29udGFpbmluZyB0aGUgc2VsZWN0ZWQgbW9kZSIKICAgICIiIgogICAgY3VycmVudF9zZXNzaW9uID0gaW5xdWlyZXIucHJvbXB0KAogICAgICAgIGFwcF9tb2RlKHNlbGYpLAogICAgICAgIHRoZW1lPWxvYWRfdGhlbWVfZnJvbV9kaWN0KHNlbGYudGhlbWUpCiAgICApCgogICAgaWYgY3VycmVudF9zZXNzaW9uWydtb2RlJ10gPT0gJ3F1aXQnOgogICAgICAgIHN5cy5leGl0KDApCgogICAgc2VsZi5zZXNzaW9uWydtb2RlJ10gPSBjdXJyZW50X3Nlc3Npb25bJ21vZGUnXQoKCmRlZiBhc2tfcXVlc3Rpb25zKHNlbGYpOgogICAgIiIiUnVuIGBpbnF1aXJlcmAgc2Vzc2lvbgoKICAgIEZ1bmN0aW9ucwogICAgLS0tLS0tLS0tCiAgICAgICAgYGFwcF9zZXNzaW9uYDogImFwcGxpY2F0aW9uIHF1ZXN0aW9ucyIKCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCjx8ZmltX2hvbGV8PgogICAgIiIiCgogICAgIyBBc2sgcXVlc3Rpb25zIHRvIHRoZSB1c2VyCiAgICBzZWxmLnNlc3Npb25bJ2Fuc3dlcnMnXSA9IGlucXVpcmVyLnByb21wdCgKICAgICAgICBhcHBfc2Vzc2lvbihzZWxmKSwgdGhlbWU9bG9hZF90aGVtZV9mcm9tX2RpY3Qoc2VsZi50aGVtZSkKICAgICkKCiAgICAjIEdldCBjb25maXJtIHN0YXR1cyBmb3IgW25ld2J1aWxkXSBbbWFrZXppcF0gW3ppcHNpZ25lcl0KICAgIGNvbmZpcm0gPSBUcnVlCiAgICBjb25maXJtX2xpc3QgPSBbCiAgICAgICAgc2VsZi5zZXNzaW9uWydhbnN3ZXJzJ11bJ2NvbmZpcm1fbmV3YnVpbGQnXSwKICAgICAgICBzZWxmLnNlc3Npb25bJ2Fuc3dlcnMnXVsnY29uZmlybV9tYWtlemlwJ10sCiAgICAgICAgc2VsZi5zZXNzaW9uWydhbnN3ZXJzJ11bJ2NvbmZpcm1femlwc2lnbmVyJ10sCiAgICBdCgogICAgZm9yIHJlc3BvbnNlIGluIGNvbmZpcm1fbGlzdDoKICAgICAgICBpZiByZXNwb25zZSBpcyBGYWxzZToKICAgICAgICAgICAgY29uZmlybSA9IEZhbHNlCgogICAgI8KgU2V0IGNvbmZpcm0gc3RhdHVzIGZvciBbbWFrZWNsZWFuXSBbbWVudWNvbmZpZ10KICAgIGlmIChzZWxmLnNlc3Npb25bJ2Fuc3dlcnMnXVsnY2xlYW5idWlsZCddIGlzIEZhbHNlCiAgICAgICAgICAgIGFuZCBzZWxmLnNlc3Npb25bJ21vZGUnXSA9PSAnbWFrZWNsZWFuJykgb3IgKAogICAgICAgICAgICAgICAgc2VsZi5zZXNzaW9uWydhbnN3ZXJzJ11bJ21lbnVjb25maWcnXSBpcyBGYWxzZQogICAgICAgICAgICAgICAgYW5kIHNlbGYuc2Vzc2lvblsnbW9kZSddID09ICdtZW51Y29uZmlnJyk6CiAgICAgICAgY29uZmlybSA9IEZhbHNlCgogICAgIyBSZXN0YXJ0IG5ldyBzZXNzaW9uPwogICAgaWYgY29uZmlybSBpcyBGYWxzZToKICAgICAgICBkZWwgc2VsZgogICAgICAgIG9zLmV4ZWNsKHN5cy5leGVjdXRhYmxlLCBzeXMuZXhlY3V0YWJsZSwgKiBzeXMuYXJndikKPHxmaW1fc3VmZml4fD4KICAgICAgICAiRGljdGlvbmFyeSBjb250YWluaW5nIHVzZXIncyBhbnN3ZXJzIgo8fGZpbV9lbmR8Pg=="]
["f2302bbc313a084cdb37096732c57674a7f4390a-2","f2302bbc313a084cdb37096732c57674a7f4390a","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiIgogICAgWmVuTWF4QnVpbGRlciBDb3B5cmlnaHQgwqkgMjAyMSBkYXJrbWFzdGVyQGdybTM0IGh0dHBzOi8vZ2l0aHViLmNvbS9ncm0zNAoKICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoiIiIKaW1wb3J0IG9zCmltcG9ydCBzeXMKCmltcG9ydCBpbnF1aXJlcgpmcm9tIGlucXVpcmVyLnRoZW1lcyBpbXBvcnQgbG9hZF90aGVtZV9mcm9tX2RpY3QKZnJvbSBtb2R1bGVzLmlucXVpcmVyLm1vZGUgaW1wb3J0IGFwcF9tb2RlCmZyb20gbW9kdWxlcy5pbnF1aXJlci5zZXNzaW9uIGltcG9ydCBhcHBfc2Vzc2lvbgoKCmRlZiBhc2tfZm9yX21vZGUoc2VsZik6CiAgICAiIiJSdW4gYGlucXVpcmVyYCBtb2RlCgogICAgRnVuY3Rpb25zCiAgICAtLS0tLS0tLS0KICAgICAgICBgYXBwX21vZGVgOiAiYXBwbGljYXRpb24gbW9kZSBzZWxlY3Rpb24iCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgICAgICJzdHJpbmcgY29udGFpbmluZyB0aGUgc2VsZWN0ZWQgbW9kZSIKICAgICIiIgogICAgY3VycmVudF9zZXNzaW9uID0gaW5xdWlyZXIucHJvbXB0KAogICAgICAgIGFwcF9tb2RlKHNlbGYpLAogICAgICAgIHRoZW1lPWxvYWRfdGhlbWVfZnJvbV9kaWN0KHNlbGYudGhlbWUpCiAgICApCgogICAgaWYgY3VycmVudF9zZXNzaW9uWydtb2RlJ10gPT0gJ3F1aXQnOgogICAgICAgIHN5cy5leGl0KDApCgogICAgc2VsZi5zZXNzaW9uWydtb2RlJ10gPSBjdXJyZW50X3Nlc3Npb25bJ21vZGUnXQoKCmRlZiBhc2tfcXVlc3Rpb25zKHNlbGYpOgogICAgIiIiUnVuIGBpbnF1aXJlcmAgc2Vzc2lvbgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgRnVuY3Rpb25zCiAgICAtLS0tLS0tLS0KICAgICAgICBgYXBwX3Nlc3Npb25gOiAiYXBwbGljYXRpb24gcXVlc3Rpb25zIgoKPHxmaW1fZW5kfD4="]
["f2302bbc313a084cdb37096732c57674a7f4390a-3","f2302bbc313a084cdb37096732c57674a7f4390a","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiIgogICAgWmVuTWF4QnVpbGRlciBDb3B5cmlnaHQgwqkgMjAyMSBkYXJrbWFzdGVyQGdybTM0IGh0dHBzOi8vZ2l0aHViLmNvbS9ncm0zNAoKICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoiIiIKaW1wb3J0IG9zCmltcG9ydCBzeXMKCmltcG9ydCBpbnF1aXJlcgpmcm9tIGlucXVpcmVyLnRoZW1lcyBpbXBvcnQgbG9hZF90aGVtZV9mcm9tX2RpY3QKZnJvbSBtb2R1bGVzLmlucXVpcmVyLm1vZGUgaW1wb3J0IGFwcF9tb2RlCmZyb20gbW9kdWxlcy5pbnF1aXJlci5zZXNzaW9uIGltcG9ydCBhcHBfc2Vzc2lvbgoKCmRlZiBhc2tfZm9yX21vZGUoc2VsZik6CiAgICAiIiJSdW4gYGlucXVpcmVyYCBtb2RlCgogICAgRnVuY3Rpb25zCiAgICAtLS0tLS0tLS0KICAgICAgICBgYXBwX21vZGVgOiAiYXBwbGljYXRpb24gbW9kZSBzZWxlY3Rpb24iCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgICAgICJzdHJpbmcgY29udGFpbmluZyB0aGUgc2VsZWN0ZWQgbW9kZSIKICAgICIiIgogICAgY3VycmVudF9zZXNzaW9uID0gaW5xdWlyZXIucHJvbXB0KAogICAgICAgIGFwcF9tb2RlKHNlbGYpLAogICAgICAgIHRoZW1lPWxvYWRfdGhlbWVfZnJvbV9kaWN0KHNlbGYudGhlbWUpCiAgICApCgogICAgaWYgY3VycmVudF9zZXNzaW9uWydtb2RlJ10gPT0gJ3F1aXQnOgogICAgICAgIHN5cy5leGl0KDApCgogICAgc2VsZi5zZXNzaW9uWydtb2RlJ10gPSBjdXJyZW50X3Nlc3Npb25bJ21vZGUnXQoKCmRlZiBhc2tfcXVlc3Rpb25zKHNlbGYpOgogICAgIiIiUnVuIGBpbnF1aXJlcmAgc2Vzc2lvbgoKICAgIEZ1bmN0aW9ucwogICAgLS0tLS0tLS0tCiAgICAgICAgYGFwcF9zZXNzaW9uYDogImFwcGxpY2F0aW9uIHF1ZXN0aW9ucyIKCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICAgICAgIkRpY3Rpb25hcnkgY29udGFpbmluZyB1c2VyJ3MgYW5zd2VycyIKICAgICIiIgoKICAgICMgQXNrIHF1ZXN0aW9ucyB0byB0aGUgdXNlcgo8fGZpbV9ob2xlfD4KICAgICMgR2V0IGNvbmZpcm0gc3RhdHVzIGZvciBbbmV3YnVpbGRdIFttYWtlemlwXSBbemlwc2lnbmVyXQogICAgY29uZmlybSA9IFRydWUKICAgIGNvbmZpcm1fbGlzdCA9IFsKICAgICAgICBzZWxmLnNlc3Npb25bJ2Fuc3dlcnMnXVsnY29uZmlybV9uZXdidWlsZCddLAogICAgICAgIHNlbGYuc2Vzc2lvblsnYW5zd2VycyddWydjb25maXJtX21ha2V6aXAnXSwKICAgICAgICBzZWxmLnNlc3Npb25bJ2Fuc3dlcnMnXVsnY29uZmlybV96aXBzaWduZXInXSwKICAgIF0KCiAgICBmb3IgcmVzcG9uc2UgaW4gY29uZmlybV9saXN0OgogICAgICAgIGlmIHJlc3BvbnNlIGlzIEZhbHNlOgogICAgICAgICAgICBjb25maXJtID0gRmFsc2UKCiAgICAjwqBTZXQgY29uZmlybSBzdGF0dXMgZm9yIFttYWtlY2xlYW5dIFttZW51Y29uZmlnXQogICAgaWYgKHNlbGYuc2Vzc2lvblsnYW5zd2VycyddWydjbGVhbmJ1aWxkJ10gaXMgRmFsc2UKICAgICAgICAgICAgYW5kIHNlbGYuc2Vzc2lvblsnbW9kZSddID09ICdtYWtlY2xlYW4nKSBvciAoCiAgICAgICAgICAgICAgICBzZWxmLnNlc3Npb25bJ2Fuc3dlcnMnXVsnbWVudWNvbmZpZyddIGlzIEZhbHNlCiAgICAgICAgICAgICAgICBhbmQgc2VsZi5zZXNzaW9uWydtb2RlJ10gPT0gJ21lbnVjb25maWcnKToKICAgICAgICBjb25maXJtID0gRmFsc2UKCiAgICAjIFJlc3RhcnQgbmV3IHNlc3Npb24/CiAgICBpZiBjb25maXJtIGlzIEZhbHNlOgogICAgICAgIGRlbCBzZWxmCiAgICAgICAgb3MuZXhlY2woc3lzLmV4ZWN1dGFibGUsIHN5cy5leGVjdXRhYmxlLCAqIHN5cy5hcmd2KQo8fGZpbV9zdWZmaXh8PgogICAgc2VsZi5zZXNzaW9uWydhbnN3ZXJzJ10gPSBpbnF1aXJlci5wcm9tcHQoCiAgICAgICAgYXBwX3Nlc3Npb24oc2VsZiksIHRoZW1lPWxvYWRfdGhlbWVfZnJvbV9kaWN0KHNlbGYudGhlbWUpCiAgICApCgo8fGZpbV9lbmR8Pg=="]
["1917fa37aaf1d1f42d4c87a72ecdd174a45aba8b-1","1917fa37aaf1d1f42d4c87a72ecdd174a45aba8b","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCiMjIFdoZW4gd2UgY2FsbCB0aGlzIHNjcmlwdCB3ZSBnZXQgdHdvIGNzdiBmaWxlcyAtIHVwZGF0ZWQgcG9wdWxhdGlvbiBmb3IgZWFjaCBjb3VudHkgYW5kIAojIyBmb3IgZWFjaCBoZWFsdGggaW5zdGl0dXRlIHRoZSBzdW0gb2YgcG9wdWxhdGlvbiBhbmQgYXJlYSB0aGV5IGNvdmVyCgojIyBJdCBoYXMgdG8gYmUgZG9uZSBtYW51YWxseQoKCmltcG9ydCByZXF1ZXN0cwppbXBvcnQgY3N2IAppbXBvcnQgcGFuZGFzIGFzIHBkCgpkZWYgY2FsbCh0aGlzKToKICByID0gcmVxdWVzdHMucG9zdCgnaHR0cHM6Ly9weHdlYi5zdGF0LnNpOjQ0My9TaVN0YXREYXRhL2FwaS92MS9zbC9EYXRhLzA1QzQwMTBTLnB4JywganNvbj0KICB7CiAgICAicXVlcnkiOiBbCiAgICAgIHsKICAgICAgICAiY29kZSI6ICJPQsSMSU5FIiwKICAgICAgICAic2VsZWN0aW9uIjogewogICAgICAgICAgImZpbHRlciI6ICJhbGwiLAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAidmFsdWVzIjogWyAiKiIgXQo8fGZpbV9lbmR8Pg=="]
["1917fa37aaf1d1f42d4c87a72ecdd174a45aba8b-2","1917fa37aaf1d1f42d4c87a72ecdd174a45aba8b","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCiMjIFdoZW4gd2UgY2FsbCB0aGlzIHNjcmlwdCB3ZSBnZXQgdHdvIGNzdiBmaWxlcyAtIHVwZGF0ZWQgcG9wdWxhdGlvbiBmb3IgZWFjaCBjb3VudHkgYW5kIAojIyBmb3IgZWFjaCBoZWFsdGggaW5zdGl0dXRlIHRoZSBzdW0gb2YgcG9wdWxhdGlvbiBhbmQgYXJlYSB0aGV5IGNvdmVyCgojIyBJdCBoYXMgdG8gYmUgZG9uZSBtYW51YWxseQoKCmltcG9ydCByZXF1ZXN0cwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBjc3YgCmltcG9ydCBwYW5kYXMgYXMgcGQKCmRlZiBjYWxsKHRoaXMpOgo8fGZpbV9lbmR8Pg=="]
["9037c916e59bed55f77a5920ca8dcec10a7855ff-1","9037c916e59bed55f77a5920ca8dcec10a7855ff","PHxmaW1fcHJlZml4fD4KY2xhc3MgUG93ZXJTaGVsbCgpOgoJIiIiQSBjbGFzcyB0aGF0IHJ1bnMgYSBwb3dlcnNoZWxsIGNvbW1hbmQgcmVxdWlyaW5nIG11bHRpcGxlIGFyZ3MiIiIKCQoJZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIGN1cnJlbnRuYW1lLCByZXF1ZXN0ZWRuYW1lKToKCQkiIiJJbnRpYWxpemVzIGF0dHJpYnV0ZXMgb2YgUG93ZXJTaGVsbCIiIgoJCXNlbGYucGF0aCA9IHBhdGgKCQlzZWxmLmN1cnJlbnRuYW1lID0gY3VycmVudG5hbWUKCQlzZWxmLnJlcXVlc3RlZG5hbWUgPSByZXF1ZXN0ZWRuYW1lCgkJCglkZWYgY2hhbmdlcG93ZXJzaGVsbHBhdGgoc2VsZik6CgkJIiIiQ2hhbmdlcyB0aGUgY3VycmVudCBkaXJlY3RvcnkgaW4gcG93ZXJzaGVsbCBzbyB0aGF0IHRoZSBjb21tYW5kIGNhbiBiZSBydW4iIiIKCQlpbXBvcnQgc3VicHJvY2VzcwoJCXN1YnByb2Nlc3MuUG9wZW4oJ3Bvd2Vyc2hlbGwuZXhlIFtjZCcgKyAiICIgKyBzZWxmLnBhdGgpCgkKCWRlZiBydW5wb3dlcnNoZWxsKHNlbGYpOgoJCSIiIlVzZXMgdXNlciBpbnB1dCBvZiBjdXJyZW50bmFtZSwgcmVxdWVzdGVkbmFtZSwgYW5kIHBhdGggdG8gcnVuIHBvd2Vyc2hlbGwgY21kIiIiCgkJaW1wb3J0IHN1YnByb2Nlc3MKPHxmaW1faG9sZXw+CgkJCjx8ZmltX3N1ZmZpeHw+CgkJc3VicHJvY2Vzcy5Qb3BlbihbInBvd2Vyc2hlbGwiLCAiY2QgIiArICBzZWxmLnBhdGggKyAnOyBnZXQtY2hpbGRpdGVtIHwgZm9yZWFjaCcgKyAKCQknIHsgcmVuYW1lLWl0ZW0gJF8gJF8uTmFtZS5SZXBsYWNlJyArICcoIicKCQkrIHNlbGYuY3VycmVudG5hbWUgKyAnIiwgJyArICciJyArIHNlbGYucmVxdWVzdGVkbmFtZQoJCSsgJyInICsgIikgfSJdKQkKPHxmaW1fZW5kfD4="]
["5faa2456d5f78a514e0aab1f3f6a61aa8f34d708-1","5faa2456d5f78a514e0aab1f3f6a61aa8f34d708","PHxmaW1fcHJlZml4fD4KCgpmcm9tIGJhcnN4bWwuc3FsIGltcG9ydCBnZXRfc3FsX3Byb3ZpZGVyCmZyb20gYmFyc3htbC50ZXN0cyBpbXBvcnQgeG1sX2RiZl9jb25maWcgYXMgY29uZmlnCgoKZGVmIHRlc3Rfc3FsX21vZHVsZV9uYW1lKCk6CiAgICBhc3NlcnQgZiJiYXNleG1sLnNxbC5zcWx7Y29uZmlnLlNRTH0iID09ICJiYXNleG1sLnNxbC5zcWxkYmYiCgpkZWYgdGVzdF9zcWxfY2xhc3NfaW5pdCgpOgogICAgc3FsID0gZ2V0X3NxbF9wcm92aWRlcihjb25maWcpLlNxbFByb3ZpZGVyKGNvbmZpZywgIjIwMjEiLCAiMDMiKQogICAgYXNzZXJ0IHNxbC5kYmZuID09ICIyMjgxMDMiCiAgICBwcmludCAoZiIgREJGIGRpciB7c3FsLmRiX2Rpcn0iKQogICAgYXNzZXJ0IHNxbC5yciA9PSBmIlJSe3NxbC5kYmZufS5kYmYiCiAgICBzcWwuY2xvc2UoKQogICAgCkhQTSA9ICgKICAgICgiaWRjYXNlIiwgIjM2OTkiKSwKICAgICgibmhpc3RvcnkiLCAiMzY5OSIpLAogICAgKCJjYXJkIiwgIjgwOTAxIiksCjx8ZmltX2hvbGV8PgogICAgKCJkciIsICIxOTU0LTAzLTE1IiksCiAgICAoIm5wb2xpcyIsICIyNTU2NTQwODg0MDAwNDA2IiksCiAgICAoImRhdGVfMSIsICIyMDIwLTEyLTIxIiksCiAgICAoImRhdGVfMiIsICIyMDIwLTEyLTMwIiksCiAgICAoImRzMSIsICJKMDYuOSIpLAogICAgKCJzbW8iLCAiMjUwMTYiKSwKICAgICgicHJ2cyIsICI5NSIpLAkKICAgICgiaWRkb2t0IiwgIjEwMS0yMjAtMjExLTQ3IiksCiAgICAoInByb2ZpbCIsICI5NyIpLAogICAgKCJ2aWRwb20iLCAiMTIiKSwKICAgICgic21vX29rIiwgIjA1MDAwIiksCiAgICAoIm5hcHJsZWNoIiwgIjIyODEyMjU2OCIpLAogICAgKCJpZHNwIiwgIjMzIikKKQoKZGVmIHRlc3RfZ2V0X2hwbV9ucHJfbW9fdXNsKCk6CiAgICBzcWwgPSBnZXRfc3FsX3Byb3ZpZGVyKGNvbmZpZykuU3FsUHJvdmlkZXIoY29uZmlnLCAiMjAyMSIsICIwMyIpCiAgICBycnMgPSBzcWwuZ2V0X2hwbV9kYXRhKCdhcHAnLCBGYWxzZSkKICAgIGFzc2VydCBsZW4obGlzdChycnMpKSA9PSA0CiAgICByMSA9IGxpc3QocnJzKVswXQogICAgZm9yIGF0dHIsIHZhbCBpbiBIUE06CiAgICAgICAgcnYgPSBnZXRhdHRyKHIxLCBhdHRyKQogICAgICAgIGlmIGlzaW5zdGFuY2UocnYsIGZsb2F0KToKICAgICAgICAgICAgcnYgPSBpbnQocnYpCiAgICAgICAgYXNzZXJ0IHN0cihydikgPT0gdmFsCiAgICAKICAgIGFzc2VydCByMS5ucHJfbW8gPT0gIjI1MDIyOCIKICAgIHNxbC5jbG9zZSgpCgpSUFMgPSAoCigiMjYiLCAiMTAxLTIyMC0yMTEtNDciLCAiMzQiLCAiQjAzLjAxNi4wMDMiKSwKKCIyNiIsICIxMDEtMjIwLTIxMS00NyIsICIzNCIsICJBMDkuMDUuMDEwIiksCigiMjYiLCAiMTAxLTIyMC0yMTEtNDciLCAiMzQiLCAiQTA5LjA1LjAxNyIpLAooIjI2IiwgIjEwMS0yMjAtMjExLTQ3IiwgIjM0IiwgIkEwOS4wNS4wMjAiKSwKKCIyNiIsICIxMDEtMjIwLTIxMS00NyIsICIzNCIsICJBMDkuMDUuMDIzIiksCigiMjYiLCAiMTAxLTIyMC0yMTEtNDciLCAiMzQiLCAiQTA5LjA1LjA0MSIpLAooIjI2IiwgIjEwMS0yMjAtMjExLTQ3IiwgIjM0IiwgIkEwOS4wNS4wNDIiKSwKKCIyNiIsICIxMDEtMjIwLTIxMS00NyIsICIzNCIsICJCMDMuMDE2LjAwNiIpLAooIjk1IiwgIjEwMS0yMjAtMjExLTQ3IiwgIjk3IiwgIkIwMS4wNDcuMDAyIikKKQoKY2xhc3MgRGF0YToKICAgIGlkY2FzZSA9IDM2OTkKCgpkZWYgdGVzdF9nZXRfdXNsKCk6CiAgICBzcWwgPSBnZXRfc3FsX3Byb3ZpZGVyKGNvbmZpZykuU3FsUHJvdmlkZXIoY29uZmlnLCAiMjAyMSIsICIwMyIpCiAgICBycHMgPSBzcWwuZ2V0X3VzbChEYXRhKQogICAgYXNzZXJ0IGxlbihsaXN0KHJwcykpID09IDkKICAgIHJvdyA9IDAKICAgIGZvciBycCBpbiBycHM6CiAgICAgICAgYWNudCA9IDAKICAgICAgICBmb3IgYXR0ciBpbiAoInBydnMiLCAiY29kZV9tZCIsICJwcm9maWwiLCAiY29kZV91c2wiKToKICAgICAgICAgICAgcHYgPSBnZXRhdHRyKHJwLCBhdHRyKQogICAgICAgICAgICBpZiBpc2luc3RhbmNlKHB2LCBmbG9hdCk6CiAgICAgICAgICAgICAgICBwdiA9IGludChwdikKICAgICAgICAgICAgYXNzZXJ0IHN0cihwdikgPT0gUlBTW3Jvd11bYWNudF0KICAgICAgICAgICAgYWNudCArPSAxCiAgICAgICAgcm93ICs9IDEKICAgICAgICAKICAgIHNxbC5jbG9zZSgpCiAgICAKPHxmaW1fc3VmZml4fD4KICAgICgiZmFtIiwgItCS0LDRgdC40LvRjNGH0YPQuiIpLAogICAgKCJpbSIsICLQntC70YzQs9CwIiksCiAgICAoIm90IiwgItCS0LjQutGC0L7RgNC+0LLQvdCwIiksCiAgICAoInBvbCIsICLQtiIpLAo8fGZpbV9lbmR8Pg=="]
["f2ac08df557dc5c62ac51c3018a8561735d1be1c-1","f2ac08df557dc5c62ac51c3018a8561735d1be1c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHVuaXR0ZXN0Cjx8ZmltX2hvbGV8PgogICAgZGVmIHRlc3RfcGFyYW1ldGVycyhzZWxmKToKICAgICAgICB0ZXN0X2xhbmd1YWdlcyA9IFsnSmF2YVNjcmlwdCddCiAgICAgICAgdGVzdF9zdGFycyA9IDEwMDAKCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGVfcXVlcnkodGVzdF9sYW5ndWFnZXMsIHRlc3Rfc3RhcnMpLAogICAgICAgICAgICAgICAgICAgICAgICAgZiJzdGFyczo+e3Rlc3Rfc3RhcnN9IGxhbmd1YWdlOnt0ZXN0X2xhbmd1YWdlc1swXX0gIiwgInNob3VsZCBlcXVhbCIpCgogICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY3JlYXRlX3F1ZXJ5KHRlc3RfbGFuZ3VhZ2VzLCB0ZXN0X3N0YXJzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYic3RhcnM6Pnt0ZXN0X3N0YXJzfSBsYW5ndWFnZTp7dGVzdF9sYW5ndWFnZXN9ICIsICJzaG91bGQgbm90IGVxdWFsIikKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdW5pdHRlc3QubWFpbigpCjx8ZmltX3N1ZmZpeHw+CmZyb20gcGFyYW1ldGVycyBpbXBvcnQgY3JlYXRlX3F1ZXJ5CgoKY2xhc3MgUGFyYW1ldGVyc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgo8fGZpbV9lbmR8Pg=="]
["f86ac82c3b9ac17aec7441711b67aa7cbb80b0a4-1","f86ac82c3b9ac17aec7441711b67aa7cbb80b0a4","PHxmaW1fcHJlZml4fD4KIiIiClRvIHVuZGVyc3RhbmQgdGhpcyBtb2R1bGUsCnBsZWFzZSByZWZlciB0byB0aGUgY29udGFpbmluZyBwYWNha2dlJ3MgZG9jdW1lbnRhdGlvbi4KIiIiCgppZiBGYWxzZToKICAgIGltcG9ydCBBdXRvQ29tcGxldGUKICAgIGltcG9ydCBBdXRvQ29tcGxldGVXaW5kb3cKICAgIGltcG9ydCBBdXRvRXhwYW5kCiAgICBpbXBvcnQgQmFzZUhUVFBTZXJ2ZXIKICAgIGltcG9ydCBCYXN0aW9uCiAgICBpbXBvcnQgQmluZGluZ3MKICAgIGltcG9ydCBDR0lIVFRQU2VydmVyCiAgICBpbXBvcnQgQ2FsbFRpcFdpbmRvdwogICAgaW1wb3J0IENhbGxUaXBzCiAgICBpbXBvcnQgQ2FudmFzCiAgICBpbXBvcnQgQ2xhc3NCcm93c2VyCiAgICBpbXBvcnQgQ29kZUNvbnRleHQKICAgIGltcG9ydCBDb2xvckRlbGVnYXRvcgogICAgaW1wb3J0IENvbmZpZ1BhcnNlcgogICAgaW1wb3J0IENvb2tpZQogICAgaW1wb3J0IERlYnVnZ2VyCiAgICBpbXBvcnQgRGVsZWdhdG9yCiAgICBpbXBvcnQgRGlhbG9nCiAgICBpbXBvcnQgRG9jWE1MUlBDU2VydmVyCiAgICBpbXBvcnQgRWRpdG9yV2luZG93CiAgICBpbXBvcnQgRmlsZURpYWxvZwogICAgaW1wb3J0IEZpbGVMaXN0CiAgICBpbXBvcnQgRml4VGsKICAgIGltcG9ydCBGb3JtYXRQYXJhZ3JhcGgKICAgIGltcG9ydCBHcmVwRGlhbG9nCiAgICBpbXBvcnQgSFRNTFBhcnNlcgogICAgaW1wb3J0IEh5cGVyUGFyc2VyCiAgICBpbXBvcnQgSU9CaW5kaW5nCiAgICBpbXBvcnQgSWRsZUhpc3RvcnkKICAgIGltcG9ydCBNaW1lV3JpdGVyCiAgICBpbXBvcnQgTXVsdGlDYWxsCiAgICBpbXBvcnQgTXVsdGlTdGF0dXNCYXIKICAgIGltcG9ydCBPYmplY3RCcm93c2VyCiAgICBpbXBvcnQgT3V0cHV0V2luZG93CiAgICBpbXBvcnQgUGFyZW5NYXRjaAogICAgaW1wb3J0IFBhdGhCcm93c2VyCiAgICBpbXBvcnQgUGVyY29sYXRvcgogICAgaW1wb3J0IFB5UGFyc2UKICAgIGltcG9ydCBQeVNoZWxsCiAgICBpbXBvcnQgUXVldWUKICAgIGltcG9ydCBSZW1vdGVEZWJ1Z2dlcgogICAgaW1wb3J0IFJlbW90ZU9iamVjdEJyb3dzZXIKICAgIGltcG9ydCBSZXBsYWNlRGlhbG9nCiAgICBpbXBvcnQgU2NyaXB0QmluZGluZwogICAgaW1wb3J0IFNjcm9sbGVkTGlzdAogICAgaW1wb3J0IFNjcm9sbGVkVGV4dAogICAgaW1wb3J0IFNlYXJjaERpYWxvZwogICAgaW1wb3J0IFNlYXJjaERpYWxvZ0Jhc2UKICAgIGltcG9ydCBTZWFyY2hFbmdpbmUKICAgIGltcG9ydCBTaW1wbGVEaWFsb2cKICAgIGltcG9ydCBTaW1wbGVIVFRQU2VydmVyCiAgICBpbXBvcnQgU2ltcGxlWE1MUlBDU2VydmVyCiAgICBpbXBvcnQgU29ja2V0U2VydmVyCiAgICBpbXBvcnQgU3RhY2tWaWV3ZXIKICAgIGltcG9ydCBTdHJpbmdJTwogICAgaW1wb3J0IFRpeAogICAgaW1wb3J0IFRrY29uc3RhbnRzCiAgICBpbXBvcnQgVGtkbmQKICAgIGltcG9ydCBUa2ludGVyCiAgICBpbXBvcnQgVG9vbFRpcAogICAgaW1wb3J0IFRyZWVXaWRnZXQKICAgIGltcG9ydCBVbmRvRGVsZWdhdG9yCiAgICBpbXBvcnQgVXNlckRpY3QKICAgIGltcG9ydCBVc2VyTGlzdAogICAgaW1wb3J0IFVzZXJTdHJpbmcKICAgIGltcG9ydCBXaWRnZXRSZWRpcmVjdG9yCiAgICBpbXBvcnQgV2luZG93TGlzdAogICAgaW1wb3J0IFpvb21IZWlnaHQKICAgIGltcG9ydCBfTFdQQ29va2llSmFyCiAgICBpbXBvcnQgX01vemlsbGFDb29raWVKYXIKICAgIGltcG9ydCBfX2Z1dHVyZV9fCiAgICBpbXBvcnQgX2FiY29sbAogICAgaW1wb3J0IF9ic2RkYgogICAgaW1wb3J0IF9jdHlwZXMKICAgIGltcG9ydCBfY3R5cGVzX3Rlc3QKICAgIGltcG9ydCBfZWxlbWVudHRyZWUKICAgIGltcG9ydCBfaGFzaGxpYgogICAgaW1wb3J0IF9tc2kKICAgIGltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCiAgICBpbXBvcnQgX3NvY2tldAogICAgaW1wb3J0IF9zcWxpdGUzCiAgICBpbXBvcnQgX3NzbAogICAgaW1wb3J0IF9zdHJwdGltZQogICAgaW1wb3J0IF90ZXN0Y2FwaQogICAgaW1wb3J0IF90aHJlYWRpbmdfbG9jYWwKICAgIGltcG9ydCBfdGtpbnRlcgogICAgaW1wb3J0IGFiYwogICAgaW1wb3J0IGFib3V0RGlhbG9nCiAgICBpbXBvcnQgYWlmYwogICAgaW1wb3J0IGFueWRibQogICAgaW1wb3J0IGFzdAogICAgaW1wb3J0IGFzeW5jaGF0CiAgICBpbXBvcnQgYXN5bmNvcmUKICAgIGltcG9ydCBhdGV4aXQKICAgIGltcG9ydCBhdWRpb2RldgogICAgaW1wb3J0IGJhc2U2NAogICAgaW1wb3J0IGJkYgogICAgaW1wb3J0IGJpbmhleAogICAgaW1wb3J0IGJpc2VjdAogICAgaW1wb3J0IGJzZGRiCiAgICBpbXBvcnQgYnoyCiAgICBpbXBvcnQgY1Byb2ZpbGUKICAgIGltcG9ydCBjYWxlbmRhcgogICAgaW1wb3J0IGNnaQogICAgaW1wb3J0IGNnaXRiCiAgICBpbXBvcnQgY2h1bmsKICAgIGltcG9ydCBjbWQKICAgIGltcG9ydCBjb2RlCiAgICBpbXBvcnQgY29kZWNzCiAgICBpbXBvcnQgY29kZW9wCiAgICBpbXBvcnQgY29sbGVjdGlvbnMKICAgIGltcG9ydCBjb2xvcnN5cwogICAgaW1wb3J0IGNvbW1hbmRzCiAgICBpbXBvcnQgY29tcGlsZWFsbAogICAgaW1wb3J0IGNvbXBpbGVyCiAgICBpbXBvcnQgY29uZmlnRGlhbG9nCiAgICBpbXBvcnQgY29uZmlnSGFuZGxlcgogICAgaW1wb3J0IGNvbmZpZ0hlbHBTb3VyY2VFZGl0CiAgICBpbXBvcnQgY29uZmlnU2VjdGlvbk5hbWVEaWFsb2cKICAgIGltcG9ydCBjb250ZXh0bGliCiAgICBpbXBvcnQgY29va2llbGliCiAgICBpbXBvcnQgY29weQogICAgaW1wb3J0IGNvcHlfcmVnCiAgICBpbXBvcnQgY3N2CiAgICBpbXBvcnQgY3R5cGVzCiAgICBpbXBvcnQgY3Vyc2VzCiAgICBpbXBvcnQgZGJoYXNoCiAgICBpbXBvcnQgZGVjaW1hbAogICAgaW1wb3J0IGRpZmZsaWIKICAgIGltcG9ydCBkaXJjYWNoZQogICAgaW1wb3J0IGRpcwogICAgaW1wb3J0IGRpc3R1dGlscwogICAgaW1wb3J0IGRvY3Rlc3QKICAgIGltcG9ydCBkdW1iZGJtCiAgICBpbXBvcnQgZHVtbXlfdGhyZWFkCiAgICBpbXBvcnQgZHVtbXlfdGhyZWFkaW5nCiAgICBpbXBvcnQgZHluT3B0aW9uTWVudVdpZGdldAogICAgaW1wb3J0IGVtYWlsCiAgICBpbXBvcnQgZW5jb2RpbmdzCiAgICBpbXBvcnQgZmlsZWNtcAogICAgaW1wb3J0IGZpbGVpbnB1dAogICAgaW1wb3J0IGZubWF0Y2gKICAgIGltcG9ydCBmb3JtYXR0ZXIKICAgIGltcG9ydCBmcGZvcm1hdAogICAgaW1wb3J0IGZyYWN0aW9ucwogICAgaW1wb3J0IGZ0cGxpYgogICAgaW1wb3J0IGZ1bmN0b29scwogICAgaW1wb3J0IGdlbmVyaWNwYXRoCiAgICBpbXBvcnQgZ2V0b3B0CiAgICBpbXBvcnQgZ2V0cGFzcwogICAgaW1wb3J0IGdldHRleHQKICAgIGltcG9ydCBnbG9iCiAgICBpbXBvcnQgZ3ppcAogICAgaW1wb3J0IGhhc2hsaWIKICAgIGltcG9ydCBoZWFwcQogICAgaW1wb3J0IGhtYWMKICAgIGltcG9ydCBob3RzaG90CiAgICBpbXBvcnQgaHRtbGVudGl0eWRlZnMKICAgIGltcG9ydCBodG1sbGliCiAgICBpbXBvcnQgaHR0cGxpYgogICAgaW1wb3J0IGlkbGUKICAgIGltcG9ydCBpZGxlbGliCiAgICBpbXBvcnQgaWRsZXZlcgogICAgaW1wb3J0IGlob29rcwogICAgaW1wb3J0IGltYXBsaWIKICAgIGltcG9ydCBpbWdoZHIKICAgIGltcG9ydCBpbXB1dGlsCiAgICBpbXBvcnQgaW5zcGVjdAogICAgaW1wb3J0IGlvCiAgICBpbXBvcnQganNvbgogICAgaW1wb3J0IGtleWJpbmRpbmdEaWFsb2cKICAgIGltcG9ydCBrZXl3b3JkCiAgICBpbXBvcnQgbGliMnRvMwogICAgaW1wb3J0IGxpbmVjYWNoZQogICAgaW1wb3J0IGxvY2FsZQogICAgaW1wb3J0IGxvZ2dpbmcKICAgIGltcG9ydCBtYWNvc3hTdXBwb3J0CiAgICBpbXBvcnQgbWFjcGF0aAogICAgaW1wb3J0IG1hY3VybDJwYXRoCiAgICBpbXBvcnQgbWFpbGJveAogICAgaW1wb3J0IG1haWxjYXAKICAgIGltcG9ydCBtYXJrdXBiYXNlCiAgICBpbXBvcnQgbWQ1CiAgICBpbXBvcnQgbWhsaWIKICAgIGltcG9ydCBtaW1ldG9vbHMKICAgIGltcG9ydCBtaW1ldHlwZXMKICAgIGltcG9ydCBtaW1pZnkKICAgIGltcG9ydCBtb2R1bGVmaW5kZXIKICAgIGltcG9ydCBtc2lsaWIKICAgIGltcG9ydCBtdWx0aWZpbGUKICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKICAgIGltcG9ydCBtdXRleAogICAgaW1wb3J0IG5ldHJjCiAgICBpbXBvcnQgbmV3CiAgICBpbXBvcnQgbm50cGxpYgogICAgaW1wb3J0IG50cGF0aAogICAgaW1wb3J0IG50dXJsMnBhdGgKICAgIGltcG9ydCBudW1iZXJzCiAgICBpbXBvcnQgb3Bjb2RlCiAgICBpbXBvcnQgb3B0cGFyc2UKICAgIGltcG9ydCBvcwogICAgaW1wb3J0IG9zMmVteHBhdGgKICAgIGltcG9ydCBwZGIKICAgIGltcG9ydCBwaWNrbGUKICAgIGltcG9ydCBwaWNrbGV0b29scwogICAgaW1wb3J0IHBpcGVzCiAgICBpbXBvcnQgcGtndXRpbAogICAgaW1wb3J0IHBsYXRmb3JtCiAgICBpbXBvcnQgcGxpc3RsaWIKICAgIGltcG9ydCBwb3BlbjIKICAgIGltcG9ydCBwb3BsaWIKICAgIGltcG9ydCBwb3NpeGZpbGUKICAgIGltcG9ydCBwb3NpeHBhdGgKICAgIGltcG9ydCBwcHJpbnQKICAgIGltcG9ydCBwcm9maWxlCiAgICBpbXBvcnQgcHN0YXRzCiAgICBpbXBvcnQgcHR5CiAgICBpbXBvcnQgcHlfY29tcGlsZQogICAgaW1wb3J0IHB5Y2xicgogICAgaW1wb3J0IHB5ZG9jCiAgICBpbXBvcnQgcHlkb2NfdG9waWNzCiAgICBpbXBvcnQgcHlleHBhdAogICAgaW1wb3J0IHF1b3ByaQogICAgaW1wb3J0IHJhbmRvbQogICAgaW1wb3J0IHJlCiAgICBpbXBvcnQgcmVwcgogICAgaW1wb3J0IHJleGVjCiAgICBpbXBvcnQgcmZjODIyCiAgICBpbXBvcnQgcmxjb21wbGV0ZXIKICAgIGltcG9ydCByb2JvdHBhcnNlcgogICAgaW1wb3J0IHJwYwogICAgaW1wb3J0IHJ1bgogICAgaW1wb3J0IHJ1bnB5CiAgICBpbXBvcnQgc2NoZWQKICAgIGltcG9ydCBzZWxlY3QKICAgIGltcG9ydCBzZXRzCiAgICBpbXBvcnQgc2dtbGxpYgogICAgaW1wb3J0IHNoYQogICAgaW1wb3J0IHNoZWx2ZQogICAgaW1wb3J0IHNobGV4CiAgICBpbXBvcnQgc2h1dGlsCiAgICBpbXBvcnQgc2l0ZQogICAgaW1wb3J0IHNtdHBkCiAgICBpbXBvcnQgc210cGxpYgogICAgaW1wb3J0IHNuZGhkcgogICAgaW1wb3J0IHNvY2tldAogICAgaW1wb3J0IHNxbGl0ZTMKICAgIGltcG9ydCBzcmUKICAgIGltcG9ydCBzcmVfY29tcGlsZQogICAgaW1wb3J0IHNyZV9jb25zdGFudHMKICAgIGltcG9ydCBzcmVfcGFyc2UKICAgIGltcG9ydCBzc2wKICAgIGltcG9ydCBzdGF0CiAgICBpbXBvcnQgc3RhdHZmcwogICAgaW1wb3J0IHN0cmluZwogICAgaW1wb3J0IHN0cmluZ29sZAogICAgaW1wb3J0IHN0cmluZ3ByZXAKICAgIGltcG9ydCBzdHJ1Y3QKICAgIGltcG9ydCBzdWJwcm9jZXNzCiAgICBpbXBvcnQgc3VuYXUKICAgIGltcG9ydCBzdW5hdWRpbwogICAgaW1wb3J0IHN5bWJvbAogICAgaW1wb3J0IHN5bXRhYmxlCiAgICBpbXBvcnQgdGFiYmVkcGFnZXMKICAgIGltcG9ydCB0YWJuYW5ueQogICAgaW1wb3J0IHRhcmZpbGUKICAgIGltcG9ydCB0ZWxuZXRsaWIKICAgIGltcG9ydCB0ZW1wZmlsZQogICAgaW1wb3J0IHRlc3QKICAgIGltcG9ydCB0ZXN0Y29kZQogICAgaW1wb3J0IHRleHRWaWV3CiAgICBpbXBvcnQgdGV4dHdyYXAKICAgIGltcG9ydCB0aGlzCiAgICBpbXBvcnQgdGhyZWFkaW5nCiAgICBpbXBvcnQgdGltZWl0CiAgICBpbXBvcnQgdGtDb2xvckNob29zZXIKICAgIGltcG9ydCB0a0NvbW1vbkRpYWxvZwogICAgaW1wb3J0IHRrRmlsZURpYWxvZwogICAgaW1wb3J0IHRrRm9udAogICAgaW1wb3J0IHRrTWVzc2FnZUJveAogICAgaW1wb3J0IHRrU2ltcGxlRGlhbG9nCiAgICBpbXBvcnQgdG9haWZmCiAgICBpbXBvcnQgdG9rZW4KICAgIGltcG9ydCB0b2tlbml6ZQogICAgaW1wb3J0IHRyYWNlCiAgICBpbXBvcnQgdHJhY2ViYWNrCiAgICBpbXBvcnQgdHR5CiAgICBpbXBvcnQgdHVydGxlCiAgICBpbXBvcnQgdHlwZXMKICAgIGltcG9ydCB1bmljb2RlZGF0YQogICAgaW1wb3J0IHVuaXR0ZXN0CiAgICBpbXBvcnQgdXJsbGliCiAgICBpbXBvcnQgdXJsbGliMgogICAgaW1wb3J0IHVybHBhcnNlCiAgICBpbXBvcnQgdXNlcgogICAgaW1wb3J0IHV1CiAgICBpbXBvcnQgdXVpZAogICAgaW1wb3J0IHdhcm5pbmdzCiAgICBpbXBvcnQgd2F2ZQogICAgaW1wb3J0IHdlYWtyZWYKICAgIGltcG9ydCB3ZWJicm93c2VyCiAgICBpbXBvcnQgd2hpY2hkYgogICAgaW1wb3J0IHdpbnNvdW5kCiAgICBpbXBvcnQgd3NnaXJlZgogICAgaW1wb3J0IHhkcmxpYgogICAgaW1wb3J0IHhtbAogICAgaW1wb3J0IHhtbGxpYgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBpbXBvcnQgeG1scnBjbGliCiAgICBpbXBvcnQgemlwZmlsZQo8fGZpbV9lbmR8Pg=="]
["f86ac82c3b9ac17aec7441711b67aa7cbb80b0a4-2","f86ac82c3b9ac17aec7441711b67aa7cbb80b0a4","PHxmaW1fcHJlZml4fD4KIiIiClRvIHVuZGVyc3RhbmQgdGhpcyBtb2R1bGUsCnBsZWFzZSByZWZlciB0byB0aGUgY29udGFpbmluZyBwYWNha2dlJ3MgZG9jdW1lbnRhdGlvbi4KIiIiCgppZiBGYWxzZToKICAgIGltcG9ydCBBdXRvQ29tcGxldGUKICAgIGltcG9ydCBBdXRvQ29tcGxldGVXaW5kb3cKICAgIGltcG9ydCBBdXRvRXhwYW5kCiAgICBpbXBvcnQgQmFzZUhUVFBTZXJ2ZXIKICAgIGltcG9ydCBCYXN0aW9uCiAgICBpbXBvcnQgQmluZGluZ3MKICAgIGltcG9ydCBDR0lIVFRQU2VydmVyCiAgICBpbXBvcnQgQ2FsbFRpcFdpbmRvdwogICAgaW1wb3J0IENhbGxUaXBzCiAgICBpbXBvcnQgQ2FudmFzCiAgICBpbXBvcnQgQ2xhc3NCcm93c2VyCiAgICBpbXBvcnQgQ29kZUNvbnRleHQKICAgIGltcG9ydCBDb2xvckRlbGVnYXRvcgogICAgaW1wb3J0IENvbmZpZ1BhcnNlcgogICAgaW1wb3J0IENvb2tpZQogICAgaW1wb3J0IERlYnVnZ2VyCiAgICBpbXBvcnQgRGVsZWdhdG9yCiAgICBpbXBvcnQgRGlhbG9nCiAgICBpbXBvcnQgRG9jWE1MUlBDU2VydmVyCiAgICBpbXBvcnQgRWRpdG9yV2luZG93CiAgICBpbXBvcnQgRmlsZURpYWxvZwogICAgaW1wb3J0IEZpbGVMaXN0CiAgICBpbXBvcnQgRml4VGsKICAgIGltcG9ydCBGb3JtYXRQYXJhZ3JhcGgKICAgIGltcG9ydCBHcmVwRGlhbG9nCiAgICBpbXBvcnQgSFRNTFBhcnNlcgogICAgaW1wb3J0IEh5cGVyUGFyc2VyCiAgICBpbXBvcnQgSU9CaW5kaW5nCiAgICBpbXBvcnQgSWRsZUhpc3RvcnkKICAgIGltcG9ydCBNaW1lV3JpdGVyCiAgICBpbXBvcnQgTXVsdGlDYWxsCiAgICBpbXBvcnQgTXVsdGlTdGF0dXNCYXIKICAgIGltcG9ydCBPYmplY3RCcm93c2VyCiAgICBpbXBvcnQgT3V0cHV0V2luZG93CiAgICBpbXBvcnQgUGFyZW5NYXRjaAogICAgaW1wb3J0IFBhdGhCcm93c2VyCiAgICBpbXBvcnQgUGVyY29sYXRvcgogICAgaW1wb3J0IFB5UGFyc2UKICAgIGltcG9ydCBQeVNoZWxsCiAgICBpbXBvcnQgUXVldWUKICAgIGltcG9ydCBSZW1vdGVEZWJ1Z2dlcgogICAgaW1wb3J0IFJlbW90ZU9iamVjdEJyb3dzZXIKICAgIGltcG9ydCBSZXBsYWNlRGlhbG9nCiAgICBpbXBvcnQgU2NyaXB0QmluZGluZwogICAgaW1wb3J0IFNjcm9sbGVkTGlzdAogICAgaW1wb3J0IFNjcm9sbGVkVGV4dAogICAgaW1wb3J0IFNlYXJjaERpYWxvZwogICAgaW1wb3J0IFNlYXJjaERpYWxvZ0Jhc2UKICAgIGltcG9ydCBTZWFyY2hFbmdpbmUKICAgIGltcG9ydCBTaW1wbGVEaWFsb2cKICAgIGltcG9ydCBTaW1wbGVIVFRQU2VydmVyCiAgICBpbXBvcnQgU2ltcGxlWE1MUlBDU2VydmVyCiAgICBpbXBvcnQgU29ja2V0U2VydmVyCiAgICBpbXBvcnQgU3RhY2tWaWV3ZXIKICAgIGltcG9ydCBTdHJpbmdJTwogICAgaW1wb3J0IFRpeAogICAgaW1wb3J0IFRrY29uc3RhbnRzCiAgICBpbXBvcnQgVGtkbmQKICAgIGltcG9ydCBUa2ludGVyCiAgICBpbXBvcnQgVG9vbFRpcAogICAgaW1wb3J0IFRyZWVXaWRnZXQKICAgIGltcG9ydCBVbmRvRGVsZWdhdG9yCiAgICBpbXBvcnQgVXNlckRpY3QKICAgIGltcG9ydCBVc2VyTGlzdAogICAgaW1wb3J0IFVzZXJTdHJpbmcKICAgIGltcG9ydCBXaWRnZXRSZWRpcmVjdG9yCiAgICBpbXBvcnQgV2luZG93TGlzdAogICAgaW1wb3J0IFpvb21IZWlnaHQKICAgIGltcG9ydCBfTFdQQ29va2llSmFyCiAgICBpbXBvcnQgX01vemlsbGFDb29raWVKYXIKICAgIGltcG9ydCBfX2Z1dHVyZV9fCiAgICBpbXBvcnQgX2FiY29sbAogICAgaW1wb3J0IF9ic2RkYgogICAgaW1wb3J0IF9jdHlwZXMKICAgIGltcG9ydCBfY3R5cGVzX3Rlc3QKICAgIGltcG9ydCBfZWxlbWVudHRyZWUKICAgIGltcG9ydCBfaGFzaGxpYgogICAgaW1wb3J0IF9tc2kKICAgIGltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCiAgICBpbXBvcnQgX3NvY2tldAogICAgaW1wb3J0IF9zcWxpdGUzCiAgICBpbXBvcnQgX3NzbAogICAgaW1wb3J0IF9zdHJwdGltZQogICAgaW1wb3J0IF90ZXN0Y2FwaQogICAgaW1wb3J0IF90aHJlYWRpbmdfbG9jYWwKICAgIGltcG9ydCBfdGtpbnRlcgogICAgaW1wb3J0IGFiYwogICAgaW1wb3J0IGFib3V0RGlhbG9nCiAgICBpbXBvcnQgYWlmYwogICAgaW1wb3J0IGFueWRibQogICAgaW1wb3J0IGFzdAogICAgaW1wb3J0IGFzeW5jaGF0CiAgICBpbXBvcnQgYXN5bmNvcmUKICAgIGltcG9ydCBhdGV4aXQKICAgIGltcG9ydCBhdWRpb2RldgogICAgaW1wb3J0IGJhc2U2NAogICAgaW1wb3J0IGJkYgogICAgaW1wb3J0IGJpbmhleAogICAgaW1wb3J0IGJpc2VjdAogICAgaW1wb3J0IGJzZGRiCiAgICBpbXBvcnQgYnoyCjx8ZmltX2hvbGV8PgogICAgaW1wb3J0IGNodW5rCiAgICBpbXBvcnQgY21kCiAgICBpbXBvcnQgY29kZQogICAgaW1wb3J0IGNvZGVjcwogICAgaW1wb3J0IGNvZGVvcAogICAgaW1wb3J0IGNvbGxlY3Rpb25zCiAgICBpbXBvcnQgY29sb3JzeXMKICAgIGltcG9ydCBjb21tYW5kcwogICAgaW1wb3J0IGNvbXBpbGVhbGwKICAgIGltcG9ydCBjb21waWxlcgogICAgaW1wb3J0IGNvbmZpZ0RpYWxvZwogICAgaW1wb3J0IGNvbmZpZ0hhbmRsZXIKICAgIGltcG9ydCBjb25maWdIZWxwU291cmNlRWRpdAogICAgaW1wb3J0IGNvbmZpZ1NlY3Rpb25OYW1lRGlhbG9nCiAgICBpbXBvcnQgY29udGV4dGxpYgogICAgaW1wb3J0IGNvb2tpZWxpYgogICAgaW1wb3J0IGNvcHkKICAgIGltcG9ydCBjb3B5X3JlZwogICAgaW1wb3J0IGNzdgogICAgaW1wb3J0IGN0eXBlcwogICAgaW1wb3J0IGN1cnNlcwogICAgaW1wb3J0IGRiaGFzaAogICAgaW1wb3J0IGRlY2ltYWwKICAgIGltcG9ydCBkaWZmbGliCiAgICBpbXBvcnQgZGlyY2FjaGUKICAgIGltcG9ydCBkaXMKICAgIGltcG9ydCBkaXN0dXRpbHMKICAgIGltcG9ydCBkb2N0ZXN0CiAgICBpbXBvcnQgZHVtYmRibQogICAgaW1wb3J0IGR1bW15X3RocmVhZAogICAgaW1wb3J0IGR1bW15X3RocmVhZGluZwogICAgaW1wb3J0IGR5bk9wdGlvbk1lbnVXaWRnZXQKICAgIGltcG9ydCBlbWFpbAogICAgaW1wb3J0IGVuY29kaW5ncwogICAgaW1wb3J0IGZpbGVjbXAKICAgIGltcG9ydCBmaWxlaW5wdXQKICAgIGltcG9ydCBmbm1hdGNoCiAgICBpbXBvcnQgZm9ybWF0dGVyCiAgICBpbXBvcnQgZnBmb3JtYXQKICAgIGltcG9ydCBmcmFjdGlvbnMKICAgIGltcG9ydCBmdHBsaWIKICAgIGltcG9ydCBmdW5jdG9vbHMKICAgIGltcG9ydCBnZW5lcmljcGF0aAogICAgaW1wb3J0IGdldG9wdAogICAgaW1wb3J0IGdldHBhc3MKICAgIGltcG9ydCBnZXR0ZXh0CiAgICBpbXBvcnQgZ2xvYgogICAgaW1wb3J0IGd6aXAKICAgIGltcG9ydCBoYXNobGliCiAgICBpbXBvcnQgaGVhcHEKICAgIGltcG9ydCBobWFjCiAgICBpbXBvcnQgaG90c2hvdAogICAgaW1wb3J0IGh0bWxlbnRpdHlkZWZzCiAgICBpbXBvcnQgaHRtbGxpYgogICAgaW1wb3J0IGh0dHBsaWIKICAgIGltcG9ydCBpZGxlCiAgICBpbXBvcnQgaWRsZWxpYgogICAgaW1wb3J0IGlkbGV2ZXIKICAgIGltcG9ydCBpaG9va3MKICAgIGltcG9ydCBpbWFwbGliCiAgICBpbXBvcnQgaW1naGRyCiAgICBpbXBvcnQgaW1wdXRpbAogICAgaW1wb3J0IGluc3BlY3QKICAgIGltcG9ydCBpbwogICAgaW1wb3J0IGpzb24KICAgIGltcG9ydCBrZXliaW5kaW5nRGlhbG9nCiAgICBpbXBvcnQga2V5d29yZAogICAgaW1wb3J0IGxpYjJ0bzMKICAgIGltcG9ydCBsaW5lY2FjaGUKICAgIGltcG9ydCBsb2NhbGUKICAgIGltcG9ydCBsb2dnaW5nCiAgICBpbXBvcnQgbWFjb3N4U3VwcG9ydAogICAgaW1wb3J0IG1hY3BhdGgKICAgIGltcG9ydCBtYWN1cmwycGF0aAogICAgaW1wb3J0IG1haWxib3gKICAgIGltcG9ydCBtYWlsY2FwCiAgICBpbXBvcnQgbWFya3VwYmFzZQogICAgaW1wb3J0IG1kNQogICAgaW1wb3J0IG1obGliCiAgICBpbXBvcnQgbWltZXRvb2xzCiAgICBpbXBvcnQgbWltZXR5cGVzCiAgICBpbXBvcnQgbWltaWZ5CiAgICBpbXBvcnQgbW9kdWxlZmluZGVyCiAgICBpbXBvcnQgbXNpbGliCiAgICBpbXBvcnQgbXVsdGlmaWxlCiAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCiAgICBpbXBvcnQgbXV0ZXgKICAgIGltcG9ydCBuZXRyYwogICAgaW1wb3J0IG5ldwogICAgaW1wb3J0IG5udHBsaWIKICAgIGltcG9ydCBudHBhdGgKICAgIGltcG9ydCBudHVybDJwYXRoCiAgICBpbXBvcnQgbnVtYmVycwogICAgaW1wb3J0IG9wY29kZQogICAgaW1wb3J0IG9wdHBhcnNlCiAgICBpbXBvcnQgb3MKICAgIGltcG9ydCBvczJlbXhwYXRoCiAgICBpbXBvcnQgcGRiCiAgICBpbXBvcnQgcGlja2xlCiAgICBpbXBvcnQgcGlja2xldG9vbHMKICAgIGltcG9ydCBwaXBlcwogICAgaW1wb3J0IHBrZ3V0aWwKICAgIGltcG9ydCBwbGF0Zm9ybQogICAgaW1wb3J0IHBsaXN0bGliCiAgICBpbXBvcnQgcG9wZW4yCiAgICBpbXBvcnQgcG9wbGliCiAgICBpbXBvcnQgcG9zaXhmaWxlCiAgICBpbXBvcnQgcG9zaXhwYXRoCiAgICBpbXBvcnQgcHByaW50CiAgICBpbXBvcnQgcHJvZmlsZQogICAgaW1wb3J0IHBzdGF0cwogICAgaW1wb3J0IHB0eQogICAgaW1wb3J0IHB5X2NvbXBpbGUKICAgIGltcG9ydCBweWNsYnIKICAgIGltcG9ydCBweWRvYwogICAgaW1wb3J0IHB5ZG9jX3RvcGljcwogICAgaW1wb3J0IHB5ZXhwYXQKICAgIGltcG9ydCBxdW9wcmkKICAgIGltcG9ydCByYW5kb20KICAgIGltcG9ydCByZQogICAgaW1wb3J0IHJlcHIKICAgIGltcG9ydCByZXhlYwogICAgaW1wb3J0IHJmYzgyMgogICAgaW1wb3J0IHJsY29tcGxldGVyCiAgICBpbXBvcnQgcm9ib3RwYXJzZXIKICAgIGltcG9ydCBycGMKICAgIGltcG9ydCBydW4KICAgIGltcG9ydCBydW5weQogICAgaW1wb3J0IHNjaGVkCiAgICBpbXBvcnQgc2VsZWN0CiAgICBpbXBvcnQgc2V0cwogICAgaW1wb3J0IHNnbWxsaWIKICAgIGltcG9ydCBzaGEKICAgIGltcG9ydCBzaGVsdmUKICAgIGltcG9ydCBzaGxleAogICAgaW1wb3J0IHNodXRpbAogICAgaW1wb3J0IHNpdGUKICAgIGltcG9ydCBzbXRwZAogICAgaW1wb3J0IHNtdHBsaWIKICAgIGltcG9ydCBzbmRoZHIKICAgIGltcG9ydCBzb2NrZXQKICAgIGltcG9ydCBzcWxpdGUzCiAgICBpbXBvcnQgc3JlCiAgICBpbXBvcnQgc3JlX2NvbXBpbGUKICAgIGltcG9ydCBzcmVfY29uc3RhbnRzCiAgICBpbXBvcnQgc3JlX3BhcnNlCiAgICBpbXBvcnQgc3NsCiAgICBpbXBvcnQgc3RhdAogICAgaW1wb3J0IHN0YXR2ZnMKICAgIGltcG9ydCBzdHJpbmcKICAgIGltcG9ydCBzdHJpbmdvbGQKICAgIGltcG9ydCBzdHJpbmdwcmVwCiAgICBpbXBvcnQgc3RydWN0CiAgICBpbXBvcnQgc3VicHJvY2VzcwogICAgaW1wb3J0IHN1bmF1CiAgICBpbXBvcnQgc3VuYXVkaW8KICAgIGltcG9ydCBzeW1ib2wKICAgIGltcG9ydCBzeW10YWJsZQogICAgaW1wb3J0IHRhYmJlZHBhZ2VzCiAgICBpbXBvcnQgdGFibmFubnkKICAgIGltcG9ydCB0YXJmaWxlCiAgICBpbXBvcnQgdGVsbmV0bGliCiAgICBpbXBvcnQgdGVtcGZpbGUKICAgIGltcG9ydCB0ZXN0CiAgICBpbXBvcnQgdGVzdGNvZGUKICAgIGltcG9ydCB0ZXh0VmlldwogICAgaW1wb3J0IHRleHR3cmFwCiAgICBpbXBvcnQgdGhpcwogICAgaW1wb3J0IHRocmVhZGluZwogICAgaW1wb3J0IHRpbWVpdAogICAgaW1wb3J0IHRrQ29sb3JDaG9vc2VyCiAgICBpbXBvcnQgdGtDb21tb25EaWFsb2cKICAgIGltcG9ydCB0a0ZpbGVEaWFsb2cKICAgIGltcG9ydCB0a0ZvbnQKICAgIGltcG9ydCB0a01lc3NhZ2VCb3gKICAgIGltcG9ydCB0a1NpbXBsZURpYWxvZwogICAgaW1wb3J0IHRvYWlmZgogICAgaW1wb3J0IHRva2VuCiAgICBpbXBvcnQgdG9rZW5pemUKICAgIGltcG9ydCB0cmFjZQogICAgaW1wb3J0IHRyYWNlYmFjawogICAgaW1wb3J0IHR0eQogICAgaW1wb3J0IHR1cnRsZQogICAgaW1wb3J0IHR5cGVzCiAgICBpbXBvcnQgdW5pY29kZWRhdGEKICAgIGltcG9ydCB1bml0dGVzdAogICAgaW1wb3J0IHVybGxpYgogICAgaW1wb3J0IHVybGxpYjIKICAgIGltcG9ydCB1cmxwYXJzZQogICAgaW1wb3J0IHVzZXIKICAgIGltcG9ydCB1dQogICAgaW1wb3J0IHV1aWQKICAgIGltcG9ydCB3YXJuaW5ncwogICAgaW1wb3J0IHdhdmUKICAgIGltcG9ydCB3ZWFrcmVmCiAgICBpbXBvcnQgd2ViYnJvd3NlcgogICAgaW1wb3J0IHdoaWNoZGIKICAgIGltcG9ydCB3aW5zb3VuZAogICAgaW1wb3J0IHdzZ2lyZWYKICAgIGltcG9ydCB4ZHJsaWIKICAgIGltcG9ydCB4bWwKICAgIGltcG9ydCB4bWxsaWIKICAgIGltcG9ydCB4bWxycGNsaWIKICAgIGltcG9ydCB6aXBmaWxlCjx8ZmltX3N1ZmZpeHw+CiAgICBpbXBvcnQgY1Byb2ZpbGUKICAgIGltcG9ydCBjYWxlbmRhcgogICAgaW1wb3J0IGNnaQogICAgaW1wb3J0IGNnaXRiCjx8ZmltX2VuZHw+"]
["f86ac82c3b9ac17aec7441711b67aa7cbb80b0a4-3","f86ac82c3b9ac17aec7441711b67aa7cbb80b0a4","PHxmaW1fcHJlZml4fD4KIiIiClRvIHVuZGVyc3RhbmQgdGhpcyBtb2R1bGUsCnBsZWFzZSByZWZlciB0byB0aGUgY29udGFpbmluZyBwYWNha2dlJ3MgZG9jdW1lbnRhdGlvbi4KIiIiCgppZiBGYWxzZToKICAgIGltcG9ydCBBdXRvQ29tcGxldGUKICAgIGltcG9ydCBBdXRvQ29tcGxldGVXaW5kb3cKICAgIGltcG9ydCBBdXRvRXhwYW5kCiAgICBpbXBvcnQgQmFzZUhUVFBTZXJ2ZXIKICAgIGltcG9ydCBCYXN0aW9uCiAgICBpbXBvcnQgQmluZGluZ3MKICAgIGltcG9ydCBDR0lIVFRQU2VydmVyCiAgICBpbXBvcnQgQ2FsbFRpcFdpbmRvdwogICAgaW1wb3J0IENhbGxUaXBzCiAgICBpbXBvcnQgQ2FudmFzCiAgICBpbXBvcnQgQ2xhc3NCcm93c2VyCiAgICBpbXBvcnQgQ29kZUNvbnRleHQKICAgIGltcG9ydCBDb2xvckRlbGVnYXRvcgogICAgaW1wb3J0IENvbmZpZ1BhcnNlcgogICAgaW1wb3J0IENvb2tpZQogICAgaW1wb3J0IERlYnVnZ2VyCiAgICBpbXBvcnQgRGVsZWdhdG9yCiAgICBpbXBvcnQgRGlhbG9nCiAgICBpbXBvcnQgRG9jWE1MUlBDU2VydmVyCiAgICBpbXBvcnQgRWRpdG9yV2luZG93CiAgICBpbXBvcnQgRmlsZURpYWxvZwogICAgaW1wb3J0IEZpbGVMaXN0CiAgICBpbXBvcnQgRml4VGsKICAgIGltcG9ydCBGb3JtYXRQYXJhZ3JhcGgKICAgIGltcG9ydCBHcmVwRGlhbG9nCiAgICBpbXBvcnQgSFRNTFBhcnNlcgogICAgaW1wb3J0IEh5cGVyUGFyc2VyCiAgICBpbXBvcnQgSU9CaW5kaW5nCiAgICBpbXBvcnQgSWRsZUhpc3RvcnkKICAgIGltcG9ydCBNaW1lV3JpdGVyCiAgICBpbXBvcnQgTXVsdGlDYWxsCiAgICBpbXBvcnQgTXVsdGlTdGF0dXNCYXIKICAgIGltcG9ydCBPYmplY3RCcm93c2VyCiAgICBpbXBvcnQgT3V0cHV0V2luZG93CiAgICBpbXBvcnQgUGFyZW5NYXRjaAogICAgaW1wb3J0IFBhdGhCcm93c2VyCiAgICBpbXBvcnQgUGVyY29sYXRvcgogICAgaW1wb3J0IFB5UGFyc2UKICAgIGltcG9ydCBQeVNoZWxsCiAgICBpbXBvcnQgUXVldWUKICAgIGltcG9ydCBSZW1vdGVEZWJ1Z2dlcgogICAgaW1wb3J0IFJlbW90ZU9iamVjdEJyb3dzZXIKICAgIGltcG9ydCBSZXBsYWNlRGlhbG9nCiAgICBpbXBvcnQgU2NyaXB0QmluZGluZwogICAgaW1wb3J0IFNjcm9sbGVkTGlzdAogICAgaW1wb3J0IFNjcm9sbGVkVGV4dAogICAgaW1wb3J0IFNlYXJjaERpYWxvZwogICAgaW1wb3J0IFNlYXJjaERpYWxvZ0Jhc2UKICAgIGltcG9ydCBTZWFyY2hFbmdpbmUKICAgIGltcG9ydCBTaW1wbGVEaWFsb2cKICAgIGltcG9ydCBTaW1wbGVIVFRQU2VydmVyCiAgICBpbXBvcnQgU2ltcGxlWE1MUlBDU2VydmVyCiAgICBpbXBvcnQgU29ja2V0U2VydmVyCiAgICBpbXBvcnQgU3RhY2tWaWV3ZXIKICAgIGltcG9ydCBTdHJpbmdJTwogICAgaW1wb3J0IFRpeAogICAgaW1wb3J0IFRrY29uc3RhbnRzCiAgICBpbXBvcnQgVGtkbmQKICAgIGltcG9ydCBUa2ludGVyCiAgICBpbXBvcnQgVG9vbFRpcAogICAgaW1wb3J0IFRyZWVXaWRnZXQKICAgIGltcG9ydCBVbmRvRGVsZWdhdG9yCiAgICBpbXBvcnQgVXNlckRpY3QKICAgIGltcG9ydCBVc2VyTGlzdAogICAgaW1wb3J0IFVzZXJTdHJpbmcKICAgIGltcG9ydCBXaWRnZXRSZWRpcmVjdG9yCiAgICBpbXBvcnQgV2luZG93TGlzdAogICAgaW1wb3J0IFpvb21IZWlnaHQKICAgIGltcG9ydCBfTFdQQ29va2llSmFyCiAgICBpbXBvcnQgX01vemlsbGFDb29raWVKYXIKICAgIGltcG9ydCBfX2Z1dHVyZV9fCiAgICBpbXBvcnQgX2FiY29sbAogICAgaW1wb3J0IF9ic2RkYgogICAgaW1wb3J0IF9jdHlwZXMKICAgIGltcG9ydCBfY3R5cGVzX3Rlc3QKICAgIGltcG9ydCBfZWxlbWVudHRyZWUKICAgIGltcG9ydCBfaGFzaGxpYgogICAgaW1wb3J0IF9tc2kKICAgIGltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCiAgICBpbXBvcnQgX3NvY2tldAogICAgaW1wb3J0IF9zcWxpdGUzCiAgICBpbXBvcnQgX3NzbAogICAgaW1wb3J0IF9zdHJwdGltZQogICAgaW1wb3J0IF90ZXN0Y2FwaQogICAgaW1wb3J0IF90aHJlYWRpbmdfbG9jYWwKICAgIGltcG9ydCBfdGtpbnRlcgogICAgaW1wb3J0IGFiYwogICAgaW1wb3J0IGFib3V0RGlhbG9nCiAgICBpbXBvcnQgYWlmYwogICAgaW1wb3J0IGFueWRibQogICAgaW1wb3J0IGFzdAogICAgaW1wb3J0IGFzeW5jaGF0CiAgICBpbXBvcnQgYXN5bmNvcmUKICAgIGltcG9ydCBhdGV4aXQKICAgIGltcG9ydCBhdWRpb2RldgogICAgaW1wb3J0IGJhc2U2NAogICAgaW1wb3J0IGJkYgogICAgaW1wb3J0IGJpbmhleAogICAgaW1wb3J0IGJpc2VjdAogICAgaW1wb3J0IGJzZGRiCiAgICBpbXBvcnQgYnoyCiAgICBpbXBvcnQgY1Byb2ZpbGUKICAgIGltcG9ydCBjYWxlbmRhcgogICAgaW1wb3J0IGNnaQogICAgaW1wb3J0IGNnaXRiCiAgICBpbXBvcnQgY2h1bmsKICAgIGltcG9ydCBjbWQKICAgIGltcG9ydCBjb2RlCiAgICBpbXBvcnQgY29kZWNzCiAgICBpbXBvcnQgY29kZW9wCiAgICBpbXBvcnQgY29sbGVjdGlvbnMKICAgIGltcG9ydCBjb2xvcnN5cwogICAgaW1wb3J0IGNvbW1hbmRzCiAgICBpbXBvcnQgY29tcGlsZWFsbAogICAgaW1wb3J0IGNvbXBpbGVyCiAgICBpbXBvcnQgY29uZmlnRGlhbG9nCiAgICBpbXBvcnQgY29uZmlnSGFuZGxlcgogICAgaW1wb3J0IGNvbmZpZ0hlbHBTb3VyY2VFZGl0CiAgICBpbXBvcnQgY29uZmlnU2VjdGlvbk5hbWVEaWFsb2cKICAgIGltcG9ydCBjb250ZXh0bGliCiAgICBpbXBvcnQgY29va2llbGliCiAgICBpbXBvcnQgY29weQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBpbXBvcnQgY29weV9yZWcKICAgIGltcG9ydCBjc3YKICAgIGltcG9ydCBjdHlwZXMKICAgIGltcG9ydCBjdXJzZXMKPHxmaW1fZW5kfD4="]
["f86ac82c3b9ac17aec7441711b67aa7cbb80b0a4-4","f86ac82c3b9ac17aec7441711b67aa7cbb80b0a4","PHxmaW1fcHJlZml4fD4KIiIiClRvIHVuZGVyc3RhbmQgdGhpcyBtb2R1bGUsCnBsZWFzZSByZWZlciB0byB0aGUgY29udGFpbmluZyBwYWNha2dlJ3MgZG9jdW1lbnRhdGlvbi4KIiIiCgppZiBGYWxzZToKICAgIGltcG9ydCBBdXRvQ29tcGxldGUKICAgIGltcG9ydCBBdXRvQ29tcGxldGVXaW5kb3cKICAgIGltcG9ydCBBdXRvRXhwYW5kCiAgICBpbXBvcnQgQmFzZUhUVFBTZXJ2ZXIKICAgIGltcG9ydCBCYXN0aW9uCiAgICBpbXBvcnQgQmluZGluZ3MKICAgIGltcG9ydCBDR0lIVFRQU2VydmVyCiAgICBpbXBvcnQgQ2FsbFRpcFdpbmRvdwogICAgaW1wb3J0IENhbGxUaXBzCiAgICBpbXBvcnQgQ2FudmFzCiAgICBpbXBvcnQgQ2xhc3NCcm93c2VyCiAgICBpbXBvcnQgQ29kZUNvbnRleHQKICAgIGltcG9ydCBDb2xvckRlbGVnYXRvcgogICAgaW1wb3J0IENvbmZpZ1BhcnNlcgogICAgaW1wb3J0IENvb2tpZQogICAgaW1wb3J0IERlYnVnZ2VyCiAgICBpbXBvcnQgRGVsZWdhdG9yCiAgICBpbXBvcnQgRGlhbG9nCiAgICBpbXBvcnQgRG9jWE1MUlBDU2VydmVyCiAgICBpbXBvcnQgRWRpdG9yV2luZG93CiAgICBpbXBvcnQgRmlsZURpYWxvZwogICAgaW1wb3J0IEZpbGVMaXN0CiAgICBpbXBvcnQgRml4VGsKICAgIGltcG9ydCBGb3JtYXRQYXJhZ3JhcGgKICAgIGltcG9ydCBHcmVwRGlhbG9nCiAgICBpbXBvcnQgSFRNTFBhcnNlcgogICAgaW1wb3J0IEh5cGVyUGFyc2VyCiAgICBpbXBvcnQgSU9CaW5kaW5nCiAgICBpbXBvcnQgSWRsZUhpc3RvcnkKICAgIGltcG9ydCBNaW1lV3JpdGVyCiAgICBpbXBvcnQgTXVsdGlDYWxsCiAgICBpbXBvcnQgTXVsdGlTdGF0dXNCYXIKICAgIGltcG9ydCBPYmplY3RCcm93c2VyCiAgICBpbXBvcnQgT3V0cHV0V2luZG93CiAgICBpbXBvcnQgUGFyZW5NYXRjaAogICAgaW1wb3J0IFBhdGhCcm93c2VyCiAgICBpbXBvcnQgUGVyY29sYXRvcgogICAgaW1wb3J0IFB5UGFyc2UKICAgIGltcG9ydCBQeVNoZWxsCiAgICBpbXBvcnQgUXVldWUKICAgIGltcG9ydCBSZW1vdGVEZWJ1Z2dlcgogICAgaW1wb3J0IFJlbW90ZU9iamVjdEJyb3dzZXIKICAgIGltcG9ydCBSZXBsYWNlRGlhbG9nCiAgICBpbXBvcnQgU2NyaXB0QmluZGluZwogICAgaW1wb3J0IFNjcm9sbGVkTGlzdAogICAgaW1wb3J0IFNjcm9sbGVkVGV4dAogICAgaW1wb3J0IFNlYXJjaERpYWxvZwogICAgaW1wb3J0IFNlYXJjaERpYWxvZ0Jhc2UKICAgIGltcG9ydCBTZWFyY2hFbmdpbmUKICAgIGltcG9ydCBTaW1wbGVEaWFsb2cKICAgIGltcG9ydCBTaW1wbGVIVFRQU2VydmVyCiAgICBpbXBvcnQgU2ltcGxlWE1MUlBDU2VydmVyCiAgICBpbXBvcnQgU29ja2V0U2VydmVyCiAgICBpbXBvcnQgU3RhY2tWaWV3ZXIKICAgIGltcG9ydCBTdHJpbmdJTwogICAgaW1wb3J0IFRpeAogICAgaW1wb3J0IFRrY29uc3RhbnRzCiAgICBpbXBvcnQgVGtkbmQKICAgIGltcG9ydCBUa2ludGVyCiAgICBpbXBvcnQgVG9vbFRpcAogICAgaW1wb3J0IFRyZWVXaWRnZXQKICAgIGltcG9ydCBVbmRvRGVsZWdhdG9yCiAgICBpbXBvcnQgVXNlckRpY3QKICAgIGltcG9ydCBVc2VyTGlzdAogICAgaW1wb3J0IFVzZXJTdHJpbmcKICAgIGltcG9ydCBXaWRnZXRSZWRpcmVjdG9yCiAgICBpbXBvcnQgV2luZG93TGlzdAogICAgaW1wb3J0IFpvb21IZWlnaHQKICAgIGltcG9ydCBfTFdQQ29va2llSmFyCiAgICBpbXBvcnQgX01vemlsbGFDb29raWVKYXIKICAgIGltcG9ydCBfX2Z1dHVyZV9fCiAgICBpbXBvcnQgX2FiY29sbAogICAgaW1wb3J0IF9ic2RkYgogICAgaW1wb3J0IF9jdHlwZXMKICAgIGltcG9ydCBfY3R5cGVzX3Rlc3QKICAgIGltcG9ydCBfZWxlbWVudHRyZWUKICAgIGltcG9ydCBfaGFzaGxpYgogICAgaW1wb3J0IF9tc2kKICAgIGltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCiAgICBpbXBvcnQgX3NvY2tldAogICAgaW1wb3J0IF9zcWxpdGUzCiAgICBpbXBvcnQgX3NzbAogICAgaW1wb3J0IF9zdHJwdGltZQogICAgaW1wb3J0IF90ZXN0Y2FwaQogICAgaW1wb3J0IF90aHJlYWRpbmdfbG9jYWwKICAgIGltcG9ydCBfdGtpbnRlcgogICAgaW1wb3J0IGFiYwogICAgaW1wb3J0IGFib3V0RGlhbG9nCiAgICBpbXBvcnQgYWlmYwogICAgaW1wb3J0IGFueWRibQogICAgaW1wb3J0IGFzdAogICAgaW1wb3J0IGFzeW5jaGF0CiAgICBpbXBvcnQgYXN5bmNvcmUKICAgIGltcG9ydCBhdGV4aXQKICAgIGltcG9ydCBhdWRpb2RldgogICAgaW1wb3J0IGJhc2U2NAogICAgaW1wb3J0IGJkYgogICAgaW1wb3J0IGJpbmhleAogICAgaW1wb3J0IGJpc2VjdAogICAgaW1wb3J0IGJzZGRiCiAgICBpbXBvcnQgYnoyCiAgICBpbXBvcnQgY1Byb2ZpbGUKICAgIGltcG9ydCBjYWxlbmRhcgogICAgaW1wb3J0IGNnaQogICAgaW1wb3J0IGNnaXRiCiAgICBpbXBvcnQgY2h1bmsKICAgIGltcG9ydCBjbWQKICAgIGltcG9ydCBjb2RlCiAgICBpbXBvcnQgY29kZWNzCiAgICBpbXBvcnQgY29kZW9wCiAgICBpbXBvcnQgY29sbGVjdGlvbnMKICAgIGltcG9ydCBjb2xvcnN5cwogICAgaW1wb3J0IGNvbW1hbmRzCiAgICBpbXBvcnQgY29tcGlsZWFsbAogICAgaW1wb3J0IGNvbXBpbGVyCiAgICBpbXBvcnQgY29uZmlnRGlhbG9nCiAgICBpbXBvcnQgY29uZmlnSGFuZGxlcgogICAgaW1wb3J0IGNvbmZpZ0hlbHBTb3VyY2VFZGl0CiAgICBpbXBvcnQgY29uZmlnU2VjdGlvbk5hbWVEaWFsb2cKICAgIGltcG9ydCBjb250ZXh0bGliCiAgICBpbXBvcnQgY29va2llbGliCiAgICBpbXBvcnQgY29weQogICAgaW1wb3J0IGNvcHlfcmVnCiAgICBpbXBvcnQgY3N2CiAgICBpbXBvcnQgY3R5cGVzCiAgICBpbXBvcnQgY3Vyc2VzCiAgICBpbXBvcnQgZGJoYXNoCiAgICBpbXBvcnQgZGVjaW1hbAogICAgaW1wb3J0IGRpZmZsaWIKICAgIGltcG9ydCBkaXJjYWNoZQogICAgaW1wb3J0IGRpcwogICAgaW1wb3J0IGRpc3R1dGlscwogICAgaW1wb3J0IGRvY3Rlc3QKICAgIGltcG9ydCBkdW1iZGJtCiAgICBpbXBvcnQgZHVtbXlfdGhyZWFkCiAgICBpbXBvcnQgZHVtbXlfdGhyZWFkaW5nCiAgICBpbXBvcnQgZHluT3B0aW9uTWVudVdpZGdldAogICAgaW1wb3J0IGVtYWlsCiAgICBpbXBvcnQgZW5jb2RpbmdzCiAgICBpbXBvcnQgZmlsZWNtcAogICAgaW1wb3J0IGZpbGVpbnB1dAogICAgaW1wb3J0IGZubWF0Y2gKICAgIGltcG9ydCBmb3JtYXR0ZXIKICAgIGltcG9ydCBmcGZvcm1hdAogICAgaW1wb3J0IGZyYWN0aW9ucwogICAgaW1wb3J0IGZ0cGxpYgogICAgaW1wb3J0IGZ1bmN0b29scwogICAgaW1wb3J0IGdlbmVyaWNwYXRoCiAgICBpbXBvcnQgZ2V0b3B0CiAgICBpbXBvcnQgZ2V0cGFzcwogICAgaW1wb3J0IGdldHRleHQKICAgIGltcG9ydCBnbG9iCiAgICBpbXBvcnQgZ3ppcAogICAgaW1wb3J0IGhhc2hsaWIKICAgIGltcG9ydCBoZWFwcQogICAgaW1wb3J0IGhtYWMKICAgIGltcG9ydCBob3RzaG90CiAgICBpbXBvcnQgaHRtbGVudGl0eWRlZnMKICAgIGltcG9ydCBodG1sbGliCiAgICBpbXBvcnQgaHR0cGxpYgogICAgaW1wb3J0IGlkbGUKICAgIGltcG9ydCBpZGxlbGliCiAgICBpbXBvcnQgaWRsZXZlcgogICAgaW1wb3J0IGlob29rcwogICAgaW1wb3J0IGltYXBsaWIKICAgIGltcG9ydCBpbWdoZHIKICAgIGltcG9ydCBpbXB1dGlsCiAgICBpbXBvcnQgaW5zcGVjdAogICAgaW1wb3J0IGlvCiAgICBpbXBvcnQganNvbgogICAgaW1wb3J0IGtleWJpbmRpbmdEaWFsb2cKICAgIGltcG9ydCBrZXl3b3JkCiAgICBpbXBvcnQgbGliMnRvMwogICAgaW1wb3J0IGxpbmVjYWNoZQogICAgaW1wb3J0IGxvY2FsZQogICAgaW1wb3J0IGxvZ2dpbmcKICAgIGltcG9ydCBtYWNvc3hTdXBwb3J0CiAgICBpbXBvcnQgbWFjcGF0aAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBpbXBvcnQgbWFjdXJsMnBhdGgKICAgIGltcG9ydCBtYWlsYm94CiAgICBpbXBvcnQgbWFpbGNhcAogICAgaW1wb3J0IG1hcmt1cGJhc2UKPHxmaW1fZW5kfD4="]
["39ca853f10e64ad352f682235f0140dea346dc32-1","39ca853f10e64ad352f682235f0140dea346dc32",{"$cut":{"chars":19480,"head":"PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwojVXBkYXRlZCBieTogWWlxaW4gV2FuZwojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKaW1wb3J0IG9zCmltcG9ydCByZQpmcm9tIEZpbGVJTyBpbXBvcnQgRmlsZUlPCiNmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoKZGVmIGZsaXAoeCk6CgkjcmV0dXJuIGEgcmV2ZXJ2ZSBjb21wbGVtZW50YXJ5IHN0cmluZwoJcmV0dXJuICIiLmpvaW4ocmV2ZXJzZWQoW3siQSI6IlQiLCJUIjoiQSIsIkciOiJDIiwiQyI6IkciLCJbIjoiXSIsIl0iOiJbIn0uZ2V0KGksaSkgZm9yIGkgaW4geF0pKQoKZGVmIHBocmVkKHNjb3JlKToKCSNyZXR1cm4gdGhlIGludGVnZXIgcGhyZWQgc2NvcmUKCXJldHVybiBtYXAobGFtYmRhIGk6IG9yZChpKS0zMywgc2NvcmUpCgojc2V0IHVwIHRoZSB0YWJsZSBmb3IgY29udmVydGluZyBwaHJlZCBzY29yZSB0byB0aGUgY29ycmVzcG9uZGluZyBlcnJvciBwcm9iYWJpbGl0eQpwaHJlZDJwcm9iID0gW10KZm9yIGkgaW4gcmFuZ2UoMCwgMjIzKToKCXBocmVkMnByb2IuYXBwZW5kKDEwKiooLWkvMTAuMCkpCgpkZWYgcHJvYihwaHJlZF9zY29yZSk6CgkjY29udmVydCBhIHBocmVkIHNjb3JlIHRvIHRoZSBlcnJvciBwcm9iYWJpbGl0eSAKCWdsb2JhbCBwaHJlZDJwcm9iCglyZXR1cm4gcGhyZWQycHJvYltwaHJlZF9zY29yZV0KCQpkZWYgdHJpbShxdWFsLCBsaW1pdCA9IDAuMDUpOgoJI3JldHVybiB0aGUgbGVmdCBuIGJhc2Ugd2l0aCB0aGUgaGlnaGVzdCBxdWFpbHkKCSNtb2RpZmllZCBSaWNoYXJkIE1vdHQncyB0cmltbWluZyBhbGdvcml0aG0gYW5kIExpIEhlJ3Mgc2VxdGsKCXMgPSBzX21heCA9IDAuMAoJZW5kID0gMAoJZm9yIG4sIHEgaW4gZW51bWVyYXRlKHF1YWwpOgoJCXAgPSBwcm9iKHEpCgkJcyArPSBsaW1pdC1wCgkJaWYgKHMgPCAwKToKCQkJcyA9IDAKCQlpZiAocyA+PSBzX21heCk6CgkJCXNfbWF4ID0gcwoJCQllbmQgPSBuICsgMQoJcmV0dXJuIGVuZAoKY2xhc3MgRmFzdGFJTzoKCSIiIiAKCVRoaXMgaXMgYSBjbGFzcyBmb3IgcmVhZGluZyBmYXN0YSBmaWxlcwoJCglBdHRyaWJ1dGVzCgktLS0tLS0tLS0tCgluYW1lOiB0aGUgbmFtZXMgb2YgdGhlIHNlcXVlbmNlcyBpbiB0aGUgZmFzdGEgZmlsZQoJX19zZXF1ZW5jZV9fOiBhIGRpY3Qgb2Ygc2VxdWVuY2UgcmVhZCBmcm9tIHRoZSBmYXN0YSBmaWxlCglfX3NlcV9pbmRleF9fOiBhIGRpY3Qgb2Ygc2VxdWVuY2UgaW5kZXggZnJvbSB0aGUgZmFzdGEgLmZhaSBmaWxlCglfX3NlcV9maWxlX186IGZpbGUgaGFuZGxlIG9mIHRoZSBmYXN0YSBmaWxlCgkKCSIiIgoJCglkZWYgX19pbml0X18oc2VsZiwgZmFzdGFfZmlsZSwgaW5kZXhfZmlsZSA9IE5vbmUpOgoJCSIiIiAKCQl0aGUgX19pbml0X18gbWV0aG9kCgkJCgkJcmVhZCBzZXF1ZW5jZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmYXN0YV9maWxlIG9yIHNlcXVlbmNlIGluZGljZXMgZnJvbSB0aGUgaW5kZXggZmlsZQoJCQoJCUFyZ3VtZW50cwoJCS0tLS0tLS0tLS0KCQlmYXN0YV9maWxlOiB0aGUgcGF0aCB0byB0aGUgZmFzdGEgZmlsZQoJCWluZGV4X2ZpbGU6IHRoZSBwYXRoIHRvIHRoZSBmYXN0YSBpbmRleCBmaWxlOyBpZiBub3Qgc3BlY2lmaWVkLCB3aWxsIGxvb2sgZm9yIGZpbGUgbmFtZXMgJHtmYXN0YV9maWxlfS5mYWkKCQkKCQkiIiIKCQkjcmVhZCBpbmRleCBpZiBleGlzdHMKCQlpZiAoaW5kZXhfZmlsZSBpcyBOb25lKToKCQkJaW5kZXhfZmlsZSA9IGZhc3RhX2ZpbGUgKyAiLmZhaSIKCQlpZiAob3MucGF0aC5leGlzdHMoaW5kZXhfZmlsZSkpOgoJCQkjcmVhZCBpbmRleCBpbnRvIG1lbW9yeQoJCQl3aXRoIG9wZW4oaW5kZXhfZmlsZSwgInJiIikgYXMgZmFpX2ZoOgoJCQkJc2VsZi5fX2xvYWRfaW5kZXhfXyhmYWlfZmgpCgkJCXNlbGYuX19zZXFfZmlsZV9fID0gb3BlbihmYXN0YV9maWxlLCAicmIiKQoJCWVsc2U6CgkJCSNyZWFkIGFsbCBzZXF1ZW5jZSBkYXRhIGludG8gbWVtb3J5CgkJCXdpdGggb3BlbihmYXN0YV9maWxlLCAicmIiKSBhcyBmYXN0YV9maDoKCQkJCXNlbGYuX19sb2FkX3NlcXVlbmNlX18oZmFzdGFfZmgpCgkJCXNlbGYuX19zZXFfZmlsZV9fID0gTm9uZQoJCglkZWYgX19sb2FkX2luZGV4X18oc2VsZiwgZmFpX2ZoKToKCQkiIiIgCgkJcmVhZCBzZXF1ZW5jZSBpbmRpY2VzIGZyb20gdGhlIGluZGV4IGZpbGUKCQkKCQl1cGRhdGUgX19zZXFfaW5kZXhfXyB3aXRoIGEgZGljdCBvZiBzZXF1ZW5jZSBpbmRleCAoe25hbWU6c2VxdWVuY2VfaW5kZXh9KQoJCQoJCUFyZ3VtZW50cwoJCS0tLS0tLS0tLS0KCQlmYWlfZmg6IGZpbGUgaGFuZGxlIG9mIHRoZSBmYXN0YSBpbmRleCBmaWxlCgkJCgkJIiIiCgkJbiA9IDAKCQlzZXFfaW5kZXggPSB7fQoJCXNlcV9uYW1lID0gW10KCQlmb3IgbGluZSBpbiBmYWlfZmg6CgkJCW4gKz0gMQoJCQlpID0gbGluZS5zdHJpcCgpLnNwbGl0KCkKCQkJI25hbWUsIGxlbmd0aCwgb2Zmc2V0LCBudW1iZXIgb2YgbnQgcGVyIGxpbmUsIG51bWJlciBvZiBjaGFyYWN0ZXIgcGVyIGxpbmUKCQkJYXNzZXJ0IGxlbihpKSA9PSA1LCAiSW52YWxpZCBpbmRleCBmaWxlIGxpbmUgJyVzJyBhdCBsaW5lICVkIiAlIChsaW5lLG4pCgkJCW5hbWUsIHNlcV9sZW4sIG9mZnNldCwgbGluZV9udCwgbGluZV9sZW5ndGggPSBpWzBdLCBpbnQoaVsxXSksIGludChpWzJdKSwgaW50KGlbM10pLCBpbnQoaVs0XSkKCQkJYXNzZXJ0IG5hbWUgYW5kIHNlcV9pbmRleC5nZXQobmFtZSkgaXMgTm9uZSwgIkludmFsaWQgc2VxdWVuY2UgbmFtZSAnJXMnIGF0IGxpbmUgJWQiICUgKG5hbWUsbikKCQkJc2VxX2luZGV4W25hbWVdID0gW3NlcV9sZW4sIG9mZnNldCwgbGluZV9udCwgbGluZV9sZW5ndGhdCgkJCXNlcV9uYW1lLmFwcGVuZChuYW1lKQoJCXNlbGYubmFtZSA9IHNlcV9uYW1lCgkJc2VsZi5fX3NlcXVlbmNlX18gPSBOb25lCgkJc2Vs"}}]
["39ca853f10e64ad352f682235f0140dea346dc32-2","39ca853f10e64ad352f682235f0140dea346dc32",{"$cut":{"chars":21620,"head":"PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwojVXBkYXRlZCBieTogWWlxaW4gV2FuZwojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKaW1wb3J0IG9zCmltcG9ydCByZQpmcm9tIEZpbGVJTyBpbXBvcnQgRmlsZUlPCiNmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoKZGVmIGZsaXAoeCk6CgkjcmV0dXJuIGEgcmV2ZXJ2ZSBjb21wbGVtZW50YXJ5IHN0cmluZwoJcmV0dXJuICIiLmpvaW4ocmV2ZXJzZWQoW3siQSI6IlQiLCJUIjoiQSIsIkciOiJDIiwiQyI6IkciLCJbIjoiXSIsIl0iOiJbIn0uZ2V0KGksaSkgZm9yIGkgaW4geF0pKQoKZGVmIHBocmVkKHNjb3JlKToKCSNyZXR1cm4gdGhlIGludGVnZXIgcGhyZWQgc2NvcmUKCXJldHVybiBtYXAobGFtYmRhIGk6IG9yZChpKS0zMywgc2NvcmUpCgojc2V0IHVwIHRoZSB0YWJsZSBmb3IgY29udmVydGluZyBwaHJlZCBzY29yZSB0byB0aGUgY29ycmVzcG9uZGluZyBlcnJvciBwcm9iYWJpbGl0eQpwaHJlZDJwcm9iID0gW10KZm9yIGkgaW4gcmFuZ2UoMCwgMjIzKToKCXBocmVkMnByb2IuYXBwZW5kKDEwKiooLWkvMTAuMCkpCgpkZWYgcHJvYihwaHJlZF9zY29yZSk6CgkjY29udmVydCBhIHBocmVkIHNjb3JlIHRvIHRoZSBlcnJvciBwcm9iYWJpbGl0eSAKCWdsb2JhbCBwaHJlZDJwcm9iCglyZXR1cm4gcGhyZWQycHJvYltwaHJlZF9zY29yZV0KCQpkZWYgdHJpbShxdWFsLCBsaW1pdCA9IDAuMDUpOgoJI3JldHVybiB0aGUgbGVmdCBuIGJhc2Ugd2l0aCB0aGUgaGlnaGVzdCBxdWFpbHkKCSNtb2RpZmllZCBSaWNoYXJkIE1vdHQncyB0cmltbWluZyBhbGdvcml0aG0gYW5kIExpIEhlJ3Mgc2VxdGsKCXMgPSBzX21heCA9IDAuMAoJZW5kID0gMAoJZm9yIG4sIHEgaW4gZW51bWVyYXRlKHF1YWwpOgoJCXAgPSBwcm9iKHEpCgkJcyArPSBsaW1pdC1wCgkJaWYgKHMgPCAwKToKCQkJcyA9IDAKCQlpZiAocyA+PSBzX21heCk6CgkJCXNfbWF4ID0gcwoJCQllbmQgPSBuICsgMQoJcmV0dXJuIGVuZAoKY2xhc3MgRmFzdGFJTzoKCSIiIiAKCVRoaXMgaXMgYSBjbGFzcyBmb3IgcmVhZGluZyBmYXN0YSBmaWxlcwoJCglBdHRyaWJ1dGVzCgktLS0tLS0tLS0tCgluYW1lOiB0aGUgbmFtZXMgb2YgdGhlIHNlcXVlbmNlcyBpbiB0aGUgZmFzdGEgZmlsZQoJX19zZXF1ZW5jZV9fOiBhIGRpY3Qgb2Ygc2VxdWVuY2UgcmVhZCBmcm9tIHRoZSBmYXN0YSBmaWxlCglfX3NlcV9pbmRleF9fOiBhIGRpY3Qgb2Ygc2VxdWVuY2UgaW5kZXggZnJvbSB0aGUgZmFzdGEgLmZhaSBmaWxlCglfX3NlcV9maWxlX186IGZpbGUgaGFuZGxlIG9mIHRoZSBmYXN0YSBmaWxlCgkKCSIiIgoJCglkZWYgX19pbml0X18oc2VsZiwgZmFzdGFfZmlsZSwgaW5kZXhfZmlsZSA9IE5vbmUpOgoJCSIiIiAKCQl0aGUgX19pbml0X18gbWV0aG9kCgkJCgkJcmVhZCBzZXF1ZW5jZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmYXN0YV9maWxlIG9yIHNlcXVlbmNlIGluZGljZXMgZnJvbSB0aGUgaW5kZXggZmlsZQoJCQoJCUFyZ3VtZW50cwoJCS0tLS0tLS0tLS0KCQlmYXN0YV9maWxlOiB0aGUgcGF0aCB0byB0aGUgZmFzdGEgZmlsZQoJCWluZGV4X2ZpbGU6IHRoZSBwYXRoIHRvIHRoZSBmYXN0YSBpbmRleCBmaWxlOyBpZiBub3Qgc3BlY2lmaWVkLCB3aWxsIGxvb2sgZm9yIGZpbGUgbmFtZXMgJHtmYXN0YV9maWxlfS5mYWkKCQkKCQkiIiIKCQkjcmVhZCBpbmRleCBpZiBleGlzdHMKCQlpZiAoaW5kZXhfZmlsZSBpcyBOb25lKToKCQkJaW5kZXhfZmlsZSA9IGZhc3RhX2ZpbGUgKyAiLmZhaSIKCQlpZiAob3MucGF0aC5leGlzdHMoaW5kZXhfZmlsZSkpOgoJCQkjcmVhZCBpbmRleCBpbnRvIG1lbW9yeQoJCQl3aXRoIG9wZW4oaW5kZXhfZmlsZSwgInJiIikgYXMgZmFpX2ZoOgoJCQkJc2VsZi5fX2xvYWRfaW5kZXhfXyhmYWlfZmgpCgkJCXNlbGYuX19zZXFfZmlsZV9fID0gb3BlbihmYXN0YV9maWxlLCAicmIiKQoJCWVsc2U6CgkJCSNyZWFkIGFsbCBzZXF1ZW5jZSBkYXRhIGludG8gbWVtb3J5CgkJCXdpdGggb3BlbihmYXN0YV9maWxlLCAicmIiKSBhcyBmYXN0YV9maDoKCQkJCXNlbGYuX19sb2FkX3NlcXVlbmNlX18oZmFzdGFfZmgpCgkJCXNlbGYuX19zZXFfZmlsZV9fID0gTm9uZQoJCglkZWYgX19sb2FkX2luZGV4X18oc2VsZiwgZmFpX2ZoKToKCQkiIiIgCgkJcmVhZCBzZXF1ZW5jZSBpbmRpY2VzIGZyb20gdGhlIGluZGV4IGZpbGUKCQkKCQl1cGRhdGUgX19zZXFfaW5kZXhfXyB3aXRoIGEgZGljdCBvZiBzZXF1ZW5jZSBpbmRleCAoe25hbWU6c2VxdWVuY2VfaW5kZXh9KQoJCQoJCUFyZ3VtZW50cwoJCS0tLS0tLS0tLS0KCQlmYWlfZmg6IGZpbGUgaGFuZGxlIG9mIHRoZSBmYXN0YSBpbmRleCBmaWxlCgkJCgkJIiIiCgkJbiA9IDAKCQlzZXFfaW5kZXggPSB7fQoJCXNlcV9uYW1lID0gW10KCQlmb3IgbGluZSBpbiBmYWlfZmg6CgkJCW4gKz0gMQoJCQlpID0gbGluZS5zdHJpcCgpLnNwbGl0KCkKCQkJI25hbWUsIGxlbmd0aCwgb2Zmc2V0LCBudW1iZXIgb2YgbnQgcGVyIGxpbmUsIG51bWJlciBvZiBjaGFyYWN0ZXIgcGVyIGxpbmUKCQkJYXNzZXJ0IGxlbihpKSA9PSA1LCAiSW52YWxpZCBpbmRleCBmaWxlIGxpbmUgJyVzJyBhdCBsaW5lICVkIiAlIChsaW5lLG4pCgkJCW5hbWUsIHNlcV9sZW4sIG9mZnNldCwgbGluZV9udCwgbGluZV9sZW5ndGggPSBpWzBdLCBpbnQoaVsxXSksIGludChpWzJdKSwgaW50KGlbM10pLCBpbnQoaVs0XSkKCQkJYXNzZXJ0IG5hbWUgYW5kIHNlcV9pbmRleC5nZXQobmFtZSkgaXMgTm9uZSwgIkludmFsaWQgc2VxdWVuY2UgbmFtZSAnJXMnIGF0IGxpbmUgJWQiICUgKG5hbWUsbikKCQkJc2VxX2luZGV4W25hbWVdID0gW3NlcV9sZW4sIG9mZnNldCwgbGluZV9udCwgbGluZV9sZW5ndGhdCgkJCXNlcV9uYW1lLmFwcGVuZChuYW1lKQoJCXNlbGYubmFtZSA9IHNlcV9uYW1lCgkJc2VsZi5fX3NlcXVlbmNlX18gPSBOb25lCgkJc2Vs"}}]
["39ca853f10e64ad352f682235f0140dea346dc32-3","39ca853f10e64ad352f682235f0140dea346dc32",{"$cut":{"chars":18320,"head":"PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwojVXBkYXRlZCBieTogWWlxaW4gV2FuZwojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKaW1wb3J0IG9zCmltcG9ydCByZQpmcm9tIEZpbGVJTyBpbXBvcnQgRmlsZUlPCiNmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoKZGVmIGZsaXAoeCk6CgkjcmV0dXJuIGEgcmV2ZXJ2ZSBjb21wbGVtZW50YXJ5IHN0cmluZwoJcmV0dXJuICIiLmpvaW4ocmV2ZXJzZWQoW3siQSI6IlQiLCJUIjoiQSIsIkciOiJDIiwiQyI6IkciLCJbIjoiXSIsIl0iOiJbIn0uZ2V0KGksaSkgZm9yIGkgaW4geF0pKQoKZGVmIHBocmVkKHNjb3JlKToKCSNyZXR1cm4gdGhlIGludGVnZXIgcGhyZWQgc2NvcmUKCXJldHVybiBtYXAobGFtYmRhIGk6IG9yZChpKS0zMywgc2NvcmUpCgojc2V0IHVwIHRoZSB0YWJsZSBmb3IgY29udmVydGluZyBwaHJlZCBzY29yZSB0byB0aGUgY29ycmVzcG9uZGluZyBlcnJvciBwcm9iYWJpbGl0eQpwaHJlZDJwcm9iID0gW10KZm9yIGkgaW4gcmFuZ2UoMCwgMjIzKToKCXBocmVkMnByb2IuYXBwZW5kKDEwKiooLWkvMTAuMCkpCgpkZWYgcHJvYihwaHJlZF9zY29yZSk6CgkjY29udmVydCBhIHBocmVkIHNjb3JlIHRvIHRoZSBlcnJvciBwcm9iYWJpbGl0eSAKCWdsb2JhbCBwaHJlZDJwcm9iCglyZXR1cm4gcGhyZWQycHJvYltwaHJlZF9zY29yZV0KCQpkZWYgdHJpbShxdWFsLCBsaW1pdCA9IDAuMDUpOgoJI3JldHVybiB0aGUgbGVmdCBuIGJhc2Ugd2l0aCB0aGUgaGlnaGVzdCBxdWFpbHkKCSNtb2RpZmllZCBSaWNoYXJkIE1vdHQncyB0cmltbWluZyBhbGdvcml0aG0gYW5kIExpIEhlJ3Mgc2VxdGsKCXMgPSBzX21heCA9IDAuMAoJZW5kID0gMAoJZm9yIG4sIHEgaW4gZW51bWVyYXRlKHF1YWwpOgoJCXAgPSBwcm9iKHEpCgkJcyArPSBsaW1pdC1wCgkJaWYgKHMgPCAwKToKCQkJcyA9IDAKCQlpZiAocyA+PSBzX21heCk6CgkJCXNfbWF4ID0gcwoJCQllbmQgPSBuICsgMQoJcmV0dXJuIGVuZAoKY2xhc3MgRmFzdGFJTzoKCSIiIiAKCVRoaXMgaXMgYSBjbGFzcyBmb3IgcmVhZGluZyBmYXN0YSBmaWxlcwoJCglBdHRyaWJ1dGVzCgktLS0tLS0tLS0tCgluYW1lOiB0aGUgbmFtZXMgb2YgdGhlIHNlcXVlbmNlcyBpbiB0aGUgZmFzdGEgZmlsZQoJX19zZXF1ZW5jZV9fOiBhIGRpY3Qgb2Ygc2VxdWVuY2UgcmVhZCBmcm9tIHRoZSBmYXN0YSBmaWxlCglfX3NlcV9pbmRleF9fOiBhIGRpY3Qgb2Ygc2VxdWVuY2UgaW5kZXggZnJvbSB0aGUgZmFzdGEgLmZhaSBmaWxlCglfX3NlcV9maWxlX186IGZpbGUgaGFuZGxlIG9mIHRoZSBmYXN0YSBmaWxlCgkKCSIiIgoJCglkZWYgX19pbml0X18oc2VsZiwgZmFzdGFfZmlsZSwgaW5kZXhfZmlsZSA9IE5vbmUpOgoJCSIiIiAKCQl0aGUgX19pbml0X18gbWV0aG9kCgkJCgkJcmVhZCBzZXF1ZW5jZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmYXN0YV9maWxlIG9yIHNlcXVlbmNlIGluZGljZXMgZnJvbSB0aGUgaW5kZXggZmlsZQoJCQoJCUFyZ3VtZW50cwoJCS0tLS0tLS0tLS0KCQlmYXN0YV9maWxlOiB0aGUgcGF0aCB0byB0aGUgZmFzdGEgZmlsZQoJCWluZGV4X2ZpbGU6IHRoZSBwYXRoIHRvIHRoZSBmYXN0YSBpbmRleCBmaWxlOyBpZiBub3Qgc3BlY2lmaWVkLCB3aWxsIGxvb2sgZm9yIGZpbGUgbmFtZXMgJHtmYXN0YV9maWxlfS5mYWkKCQkKCQkiIiIKCQkjcmVhZCBpbmRleCBpZiBleGlzdHMKCQlpZiAoaW5kZXhfZmlsZSBpcyBOb25lKToKCQkJaW5kZXhfZmlsZSA9IGZhc3RhX2ZpbGUgKyAiLmZhaSIKCQlpZiAob3MucGF0aC5leGlzdHMoaW5kZXhfZmlsZSkpOgoJCQkjcmVhZCBpbmRleCBpbnRvIG1lbW9yeQoJCQl3aXRoIG9wZW4oaW5kZXhfZmlsZSwgInJiIikgYXMgZmFpX2ZoOgoJCQkJc2VsZi5fX2xvYWRfaW5kZXhfXyhmYWlfZmgpCgkJCXNlbGYuX19zZXFfZmlsZV9fID0gb3BlbihmYXN0YV9maWxlLCAicmIiKQoJCWVsc2U6CgkJCSNyZWFkIGFsbCBzZXF1ZW5jZSBkYXRhIGludG8gbWVtb3J5CgkJCXdpdGggb3BlbihmYXN0YV9maWxlLCAicmIiKSBhcyBmYXN0YV9maDoKCQkJCXNlbGYuX19sb2FkX3NlcXVlbmNlX18oZmFzdGFfZmgpCgkJCXNlbGYuX19zZXFfZmlsZV9fID0gTm9uZQoJCglkZWYgX19sb2FkX2luZGV4X18oc2VsZiwgZmFpX2ZoKToKCQkiIiIgCgkJcmVhZCBzZXF1ZW5jZSBpbmRpY2VzIGZyb20gdGhlIGluZGV4IGZpbGUKCQkKCQl1cGRhdGUgX19zZXFfaW5kZXhfXyB3aXRoIGEgZGljdCBvZiBzZXF1ZW5jZSBpbmRleCAoe25hbWU6c2VxdWVuY2VfaW5kZXh9KQoJCQoJCUFyZ3VtZW50cwoJCS0tLS0tLS0tLS0KCQlmYWlfZmg6IGZpbGUgaGFuZGxlIG9mIHRoZSBmYXN0YSBpbmRleCBmaWxlCgkJCgkJIiIiCgkJbiA9IDAKCQlzZXFfaW5kZXggPSB7fQoJCXNlcV9uYW1lID0gW10KCQlmb3IgbGluZSBpbiBmYWlfZmg6CgkJCW4gKz0gMQoJCQlpID0gbGluZS5zdHJpcCgpLnNwbGl0KCkKCQkJI25hbWUsIGxlbmd0aCwgb2Zmc2V0LCBudW1iZXIgb2YgbnQgcGVyIGxpbmUsIG51bWJlciBvZiBjaGFyYWN0ZXIgcGVyIGxpbmUKCQkJYXNzZXJ0IGxlbihpKSA9PSA1LCAiSW52YWxpZCBpbmRleCBmaWxlIGxpbmUgJyVzJyBhdCBsaW5lICVkIiAlIChsaW5lLG4pCgkJCW5hbWUsIHNlcV9sZW4sIG9mZnNldCwgbGluZV9udCwgbGluZV9sZW5ndGggPSBpWzBdLCBpbnQoaVsxXSksIGludChpWzJdKSwgaW50KGlbM10pLCBpbnQoaVs0XSkKCQkJYXNzZXJ0IG5hbWUgYW5kIHNlcV9pbmRleC5nZXQobmFtZSkgaXMgTm9uZSwgIkludmFsaWQgc2VxdWVuY2UgbmFtZSAnJXMnIGF0IGxpbmUgJWQiICUgKG5hbWUsbikKCQkJc2VxX2luZGV4W25hbWVdID0gW3NlcV9sZW4sIG9mZnNldCwgbGluZV9udCwgbGluZV9sZW5ndGhdCgkJCXNlcV9uYW1lLmFwcGVuZChuYW1lKQoJCXNlbGYubmFtZSA9IHNlcV9uYW1lCgkJc2VsZi5fX3NlcXVlbmNlX18gPSBOb25lCgkJc2Vs"}}]
["39ca853f10e64ad352f682235f0140dea346dc32-4","39ca853f10e64ad352f682235f0140dea346dc32",{"$cut":{"chars":21620,"head":"PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwojVXBkYXRlZCBieTogWWlxaW4gV2FuZwojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKaW1wb3J0IG9zCmltcG9ydCByZQpmcm9tIEZpbGVJTyBpbXBvcnQgRmlsZUlPCiNmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoKZGVmIGZsaXAoeCk6CgkjcmV0dXJuIGEgcmV2ZXJ2ZSBjb21wbGVtZW50YXJ5IHN0cmluZwoJcmV0dXJuICIiLmpvaW4ocmV2ZXJzZWQoW3siQSI6IlQiLCJUIjoiQSIsIkciOiJDIiwiQyI6IkciLCJbIjoiXSIsIl0iOiJbIn0uZ2V0KGksaSkgZm9yIGkgaW4geF0pKQoKZGVmIHBocmVkKHNjb3JlKToKCSNyZXR1cm4gdGhlIGludGVnZXIgcGhyZWQgc2NvcmUKCXJldHVybiBtYXAobGFtYmRhIGk6IG9yZChpKS0zMywgc2NvcmUpCgojc2V0IHVwIHRoZSB0YWJsZSBmb3IgY29udmVydGluZyBwaHJlZCBzY29yZSB0byB0aGUgY29ycmVzcG9uZGluZyBlcnJvciBwcm9iYWJpbGl0eQpwaHJlZDJwcm9iID0gW10KZm9yIGkgaW4gcmFuZ2UoMCwgMjIzKToKCXBocmVkMnByb2IuYXBwZW5kKDEwKiooLWkvMTAuMCkpCgpkZWYgcHJvYihwaHJlZF9zY29yZSk6CgkjY29udmVydCBhIHBocmVkIHNjb3JlIHRvIHRoZSBlcnJvciBwcm9iYWJpbGl0eSAKCWdsb2JhbCBwaHJlZDJwcm9iCglyZXR1cm4gcGhyZWQycHJvYltwaHJlZF9zY29yZV0KCQpkZWYgdHJpbShxdWFsLCBsaW1pdCA9IDAuMDUpOgoJI3JldHVybiB0aGUgbGVmdCBuIGJhc2Ugd2l0aCB0aGUgaGlnaGVzdCBxdWFpbHkKCSNtb2RpZmllZCBSaWNoYXJkIE1vdHQncyB0cmltbWluZyBhbGdvcml0aG0gYW5kIExpIEhlJ3Mgc2VxdGsKCXMgPSBzX21heCA9IDAuMAoJZW5kID0gMAoJZm9yIG4sIHEgaW4gZW51bWVyYXRlKHF1YWwpOgoJCXAgPSBwcm9iKHEpCgkJcyArPSBsaW1pdC1wCgkJaWYgKHMgPCAwKToKCQkJcyA9IDAKCQlpZiAocyA+PSBzX21heCk6CgkJCXNfbWF4ID0gcwoJCQllbmQgPSBuICsgMQoJcmV0dXJuIGVuZAoKY2xhc3MgRmFzdGFJTzoKCSIiIiAKCVRoaXMgaXMgYSBjbGFzcyBmb3IgcmVhZGluZyBmYXN0YSBmaWxlcwoJCglBdHRyaWJ1dGVzCgktLS0tLS0tLS0tCgluYW1lOiB0aGUgbmFtZXMgb2YgdGhlIHNlcXVlbmNlcyBpbiB0aGUgZmFzdGEgZmlsZQoJX19zZXF1ZW5jZV9fOiBhIGRpY3Qgb2Ygc2VxdWVuY2UgcmVhZCBmcm9tIHRoZSBmYXN0YSBmaWxlCglfX3NlcV9pbmRleF9fOiBhIGRpY3Qgb2Ygc2VxdWVuY2UgaW5kZXggZnJvbSB0aGUgZmFzdGEgLmZhaSBmaWxlCglfX3NlcV9maWxlX186IGZpbGUgaGFuZGxlIG9mIHRoZSBmYXN0YSBmaWxlCgkKCSIiIgoJCglkZWYgX19pbml0X18oc2VsZiwgZmFzdGFfZmlsZSwgaW5kZXhfZmlsZSA9IE5vbmUpOgoJCSIiIiAKCQl0aGUgX19pbml0X18gbWV0aG9kCgkJCgkJcmVhZCBzZXF1ZW5jZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmYXN0YV9maWxlIG9yIHNlcXVlbmNlIGluZGljZXMgZnJvbSB0aGUgaW5kZXggZmlsZQoJCQoJCUFyZ3VtZW50cwoJCS0tLS0tLS0tLS0KCQlmYXN0YV9maWxlOiB0aGUgcGF0aCB0byB0aGUgZmFzdGEgZmlsZQoJCWluZGV4X2ZpbGU6IHRoZSBwYXRoIHRvIHRoZSBmYXN0YSBpbmRleCBmaWxlOyBpZiBub3Qgc3BlY2lmaWVkLCB3aWxsIGxvb2sgZm9yIGZpbGUgbmFtZXMgJHtmYXN0YV9maWxlfS5mYWkKCQkKCQkiIiIKCQkjcmVhZCBpbmRleCBpZiBleGlzdHMKCQlpZiAoaW5kZXhfZmlsZSBpcyBOb25lKToKCQkJaW5kZXhfZmlsZSA9IGZhc3RhX2ZpbGUgKyAiLmZhaSIKCQlpZiAob3MucGF0aC5leGlzdHMoaW5kZXhfZmlsZSkpOgoJCQkjcmVhZCBpbmRleCBpbnRvIG1lbW9yeQoJCQl3aXRoIG9wZW4oaW5kZXhfZmlsZSwgInJiIikgYXMgZmFpX2ZoOgoJCQkJc2VsZi5fX2xvYWRfaW5kZXhfXyhmYWlfZmgpCgkJCXNlbGYuX19zZXFfZmlsZV9fID0gb3BlbihmYXN0YV9maWxlLCAicmIiKQoJCWVsc2U6CgkJCSNyZWFkIGFsbCBzZXF1ZW5jZSBkYXRhIGludG8gbWVtb3J5CgkJCXdpdGggb3BlbihmYXN0YV9maWxlLCAicmIiKSBhcyBmYXN0YV9maDoKCQkJCXNlbGYuX19sb2FkX3NlcXVlbmNlX18oZmFzdGFfZmgpCgkJCXNlbGYuX19zZXFfZmlsZV9fID0gTm9uZQoJCglkZWYgX19sb2FkX2luZGV4X18oc2VsZiwgZmFpX2ZoKToKCQkiIiIgCgkJcmVhZCBzZXF1ZW5jZSBpbmRpY2VzIGZyb20gdGhlIGluZGV4IGZpbGUKCQkKCQl1cGRhdGUgX19zZXFfaW5kZXhfXyB3aXRoIGEgZGljdCBvZiBzZXF1ZW5jZSBpbmRleCAoe25hbWU6c2VxdWVuY2VfaW5kZXh9KQoJCQoJCUFyZ3VtZW50cwoJCS0tLS0tLS0tLS0KCQlmYWlfZmg6IGZpbGUgaGFuZGxlIG9mIHRoZSBmYXN0YSBpbmRleCBmaWxlCgkJCgkJIiIiCgkJbiA9IDAKCQlzZXFfaW5kZXggPSB7fQoJCXNlcV9uYW1lID0gW10KCQlmb3IgbGluZSBpbiBmYWlfZmg6CgkJCW4gKz0gMQoJCQlpID0gbGluZS5zdHJpcCgpLnNwbGl0KCkKCQkJI25hbWUsIGxlbmd0aCwgb2Zmc2V0LCBudW1iZXIgb2YgbnQgcGVyIGxpbmUsIG51bWJlciBvZiBjaGFyYWN0ZXIgcGVyIGxpbmUKCQkJYXNzZXJ0IGxlbihpKSA9PSA1LCAiSW52YWxpZCBpbmRleCBmaWxlIGxpbmUgJyVzJyBhdCBsaW5lICVkIiAlIChsaW5lLG4pCgkJCW5hbWUsIHNlcV9sZW4sIG9mZnNldCwgbGluZV9udCwgbGluZV9sZW5ndGggPSBpWzBdLCBpbnQoaVsxXSksIGludChpWzJdKSwgaW50KGlbM10pLCBpbnQoaVs0XSkKCQkJYXNzZXJ0IG5hbWUgYW5kIHNlcV9pbmRleC5nZXQobmFtZSkgaXMgTm9uZSwgIkludmFsaWQgc2VxdWVuY2UgbmFtZSAnJXMnIGF0IGxpbmUgJWQiICUgKG5hbWUsbikKCQkJc2VxX2luZGV4W25hbWVdID0gW3NlcV9sZW4sIG9mZnNldCwgbGluZV9udCwgbGluZV9sZW5ndGhdCgkJCXNlcV9uYW1lLmFwcGVuZChuYW1lKQoJCXNlbGYubmFtZSA9IHNlcV9uYW1lCgkJc2VsZi5fX3NlcXVlbmNlX18gPSBOb25lCgkJc2Vs"}}]
["39ca853f10e64ad352f682235f0140dea346dc32-5","39ca853f10e64ad352f682235f0140dea346dc32","PHxmaW1fcHJlZml4fD4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwojVXBkYXRlZCBieTogWWlxaW4gV2FuZwojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKaW1wb3J0IG9zCmltcG9ydCByZQpmcm9tIEZpbGVJTyBpbXBvcnQgRmlsZUlPCiNmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoKZGVmIGZsaXAoeCk6CgkjcmV0dXJuIGEgcmV2ZXJ2ZSBjb21wbGVtZW50YXJ5IHN0cmluZwoJcmV0dXJuICIiLmpvaW4ocmV2ZXJzZWQoW3siQSI6IlQiLCJUIjoiQSIsIkciOiJDIiwiQyI6IkciLCJbIjoiXSIsIl0iOiJbIn0uZ2V0KGksaSkgZm9yIGkgaW4geF0pKQoKZGVmIHBocmVkKHNjb3JlKToKCSNyZXR1cm4gdGhlIGludGVnZXIgcGhyZWQgc2NvcmUKCXJldHVybiBtYXAobGFtYmRhIGk6IG9yZChpKS0zMywgc2NvcmUpCgojc2V0IHVwIHRoZSB0YWJsZSBmb3IgY29udmVydGluZyBwaHJlZCBzY29yZSB0byB0aGUgY29ycmVzcG9uZGluZyBlcnJvciBwcm9iYWJpbGl0eQpwaHJlZDJwcm9iID0gW10KZm9yIGkgaW4gcmFuZ2UoMCwgMjIzKToKCXBocmVkMnByb2IuYXBwZW5kKDEwKiooLWkvMTAuMCkpCgpkZWYgcHJvYihwaHJlZF9zY29yZSk6CgkjY29udmVydCBhIHBocmVkIHNjb3JlIHRvIHRoZSBlcnJvciBwcm9iYWJpbGl0eSAKCWdsb2JhbCBwaHJlZDJwcm9iCglyZXR1cm4gcGhyZWQycHJvYltwaHJlZF9zY29yZV0KCQpkZWYgdHJpbShxdWFsLCBsaW1pdCA9IDAuMDUpOgoJI3JldHVybiB0aGUgbGVmdCBuIGJhc2Ugd2l0aCB0aGUgaGlnaGVzdCBxdWFpbHkKCSNtb2RpZmllZCBSaWNoYXJkIE1vdHQncyB0cmltbWluZyBhbGdvcml0aG0gYW5kIExpIEhlJ3Mgc2VxdGsKCXMgPSBzX21heCA9IDAuMAoJZW5kID0gMAoJZm9yIG4sIHEgaW4gZW51bWVyYXRlKHF1YWwpOgoJCXAgPSBwcm9iKHEpCgkJcyArPSBsaW1pdC1wCgkJaWYgKHMgPCAwKToKCQkJcyA9IDAKCQlpZiAocyA+PSBzX21heCk6CgkJCXNfbWF4ID0gcwoJCQllbmQgPSBuICsgMQoJcmV0dXJuIGVuZAoKY2xhc3MgRmFzdGFJTzoKCSIiIiAKCVRoaXMgaXMgYSBjbGFzcyBmb3IgcmVhZGluZyBmYXN0YSBmaWxlcwoJCglBdHRyaWJ1dGVzCgktLS0tLS0tLS0tCgluYW1lOiB0aGUgbmFtZXMgb2YgdGhlIHNlcXVlbmNlcyBpbiB0aGUgZmFzdGEgZmlsZQoJX19zZXF1ZW5jZV9fOiBhIGRpY3Qgb2Ygc2VxdWVuY2UgcmVhZCBmcm9tIHRoZSBmYXN0YSBmaWxlCglfX3NlcV9pbmRleF9fOiBhIGRpY3Qgb2Ygc2VxdWVuY2UgaW5kZXggZnJvbSB0aGUgZmFzdGEgLmZhaSBmaWxlCglfX3NlcV9maWxlX186IGZpbGUgaGFuZGxlIG9mIHRoZSBmYXN0YSBmaWxlCgkKCSIiIgoJCglkZWYgX19pbml0X18oc2VsZiwgZmFzdGFfZmlsZSwgaW5kZXhfZmlsZSA9IE5vbmUpOgoJCSIiIiAKCQl0aGUgX19pbml0X18gbWV0aG9kCgkJCgkJcmVhZCBzZXF1ZW5jZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmYXN0YV9maWxlIG9yIHNlcXVlbmNlIGluZGljZXMgZnJvbSB0aGUgaW5kZXggZmlsZQoJCQoJCUFyZ3VtZW50cwoJCS0tLS0tLS0tLS0KCQlmYXN0YV9maWxlOiB0aGUgcGF0aCB0byB0aGUgZmFzdGEgZmlsZQoJCWluZGV4X2ZpbGU6IHRoZSBwYXRoIHRvIHRoZSBmYXN0YSBpbmRleCBmaWxlOyBpZiBub3Qgc3BlY2lmaWVkLCB3aWxsIGxvb2sgZm9yIGZpbGUgbmFtZXMgJHtmYXN0YV9maWxlfS5mYWkKCQkKCQkiIiIKCQkjcmVhZCBpbmRleCBpZiBleGlzdHMKCQlpZiAoaW5kZXhfZmlsZSBpcyBOb25lKToKCQkJaW5kZXhfZmlsZSA9IGZhc3RhX2ZpbGUgKyAiLmZhaSIKCQlpZiAob3MucGF0aC5leGlzdHMoaW5kZXhfZmlsZSkpOgoJCQkjcmVhZCBpbmRleCBpbnRvIG1lbW9yeQoJCQl3aXRoIG9wZW4oaW5kZXhfZmlsZSwgInJiIikgYXMgZmFpX2ZoOgoJCQkJc2VsZi5fX2xvYWRfaW5kZXhfXyhmYWlfZmgpCgkJCXNlbGYuX19zZXFfZmlsZV9fID0gb3BlbihmYXN0YV9maWxlLCAicmIiKQoJCWVsc2U6CgkJCSNyZWFkIGFsbCBzZXF1ZW5jZSBkYXRhIGludG8gbWVtb3J5CgkJCXdpdGggb3BlbihmYXN0YV9maWxlLCAicmIiKSBhcyBmYXN0YV9maDoKCQkJCXNlbGYuX19sb2FkX3NlcXVlbmNlX18oZmFzdGFfZmgpCgkJCXNlbGYuX19zZXFfZmlsZV9fID0gTm9uZQoJCglkZWYgX19sb2FkX2luZGV4X18oc2VsZiwgZmFpX2ZoKToKCQkiIiIgCgkJcmVhZCBzZXF1ZW5jZSBpbmRpY2VzIGZyb20gdGhlIGluZGV4IGZpbGUKCQkKCQl1cGRhdGUgX19zZXFfaW5kZXhfXyB3aXRoIGEgZGljdCBvZiBzZXF1ZW5jZSBpbmRleCAoe25hbWU6c2VxdWVuY2VfaW5kZXh9KQoJCQoJCUFyZ3VtZW50cwoJCS0tLS0tLS0tLS0KCQlmYWlfZmg6IGZpbGUgaGFuZGxlIG9mIHRoZSBmYXN0YSBpbmRleCBmaWxlCgkJCgkJIiIiCgkJbiA9IDAKCQlzZXFfaW5kZXggPSB7fQoJCXNlcV9uYW1lID0gW10KCQlmb3IgbGluZSBpbiBmYWlfZmg6CgkJCW4gKz0gMQoJCQlpID0gbGluZS5zdHJpcCgpLnNwbGl0KCkKCQkJI25hbWUsIGxlbmd0aCwgb2Zmc2V0LCBudW1iZXIgb2YgbnQgcGVyIGxpbmUsIG51bWJlciBvZiBjaGFyYWN0ZXIgcGVyIGxpbmUKCQkJYXNzZXJ0IGxlbihpKSA9PSA1LCAiSW52YWxpZCBpbmRleCBmaWxlIGxpbmUgJyVzJyBhdCBsaW5lICVkIiAlIChsaW5lLG4pCgkJCW5hbWUsIHNlcV9sZW4sIG9mZnNldCwgbGluZV9udCwgbGluZV9sZW5ndGggPSBpWzBdLCBpbnQoaVsxXSksIGludChpWzJdKSwgaW50KGlbM10pLCBpbnQoaVs0XSkKCQkJYXNzZXJ0IG5hbWUgYW5kIHNlcV9pbmRleC5nZXQobmFtZSkgaXMgTm9uZSwgIkludmFsaWQgc2VxdWVuY2UgbmFtZSAnJXMnIGF0IGxpbmUgJWQiICUgKG5hbWUsbikKCQkJc2VxX2luZGV4W25hbWVdID0gW3NlcV9sZW4sIG9mZnNldCwgbGluZV9udCwgbGluZV9sZW5ndGhdCgkJCXNlcV9uYW1lLmFwcGVuZChuYW1lKQoJCXNlbGYubmFtZSA9IHNlcV9uYW1lCgkJc2VsZi5fX3NlcXVlbmNlX18gPSBOb25lCgkJc2VsZi5fX3NlcV9pbmRleF9fID0gc2VxX2luZGV4CgkKCWRlZiBfX2xvYWRfc2VxdWVuY2VfXyhzZWxmLCBmYXN0YV9maCwgc2tpcF9saW5lID0gMCk6CgkJIiIiIAoJCXJlYWQgc2VxdWVuY2UgaW5mb3JtYXRpb24gZnJvbSB0aGUgZmFzdGEgZmlsZQoJCQoJCXVwZGF0ZSBfX3NlcXVlbmNlX18gd2l0aCBhIGRpY3Qgb2Ygc2VxdWVuY2UgaW5mb3JtYXRpb24gcmVhZCBmcm9tIHRoZSBmaWxlICh7bmFtZTpzZXF1ZW5jZX0pCgkJCgkJQXJndW1lbnRzCgkJLS0tLS0tLS0tLQoJCWZhc3RhX2ZoOiBmaWxlIGhhbmRsZSBvZiB0aGUgZmFzdGEgZmlsZQoJCXNraXBfbGluZTogbm8uIG9mIGxpbmVzIHRvIHNraXAgaW4gdGhlIGZhc3RhIGZpbGUKCQkKCQkiIiIKCQlzZXF1ZW5jZSA9IHt9CgkJc2VxX25hbWUgPSBbXQoJCXNlcV9saW5lID0gW10KCQkjYWxpZ25fc3RhdGUgPSAiIgoJCW5hbWU9IiIKCQluID0gMAoJCWZvciBsaW5lIGluIGZhc3RhX2ZoOgoJCQluICs9IDEKCQkJaWYgKHNraXBfbGluZSA+IDApOgoJCQkJc2tpcF9saW5lIC09IDEKCQkJCWNvbnRpbnVlCgkJCWxpbmUgPSBsaW5lLnN0cmlwKCkKCQkJaWYgKG5vdCBsaW5lKToKCQkJCWNvbnRpbnVlCgkJCWlmIChsaW5lWzBdID09ICI+Iik6CgkJCQkjaGVhZCBsaW5lCgkJCQlpZiAoc2VxX2xpbmUpOgoJCQkJCXNlcXVlbmNlW25hbWVdID0gIiIuam9pbihzZXFfbGluZSkKCQkJCQlzZXFfbGluZSA9IFtdCgkJCQluYW1lID0gbGluZS5zcGxpdCgpWzBdWzE6XQoJCQkJYXNzZXJ0IG5hbWUgYW5kIHNlcXVlbmNlLmdldChuYW1lKSBpcyBOb25lLCAiSW52YWxpZCBzZXF1ZW5jZSBuYW1lICclcycgYXQgbGluZSAlZCIgJSAobmFtZSxuKQoJCQkJc2VxX25hbWUuYXBwZW5kKG5hbWUpCgkJCWVsc2U6CgkJCQlzZXFfbGluZS5hcHBlbmQobGluZSkKCQlpZiAoc2VxX2xpbmUpOgoJCQlzZXF1ZW5jZVtuYW1lXSA9ICIiLmpvaW4oc2VxX2xpbmUpCgkJc2VsZi5uYW1lID0gc2VxX25hbWUKCQlzZWxmLl9fc2VxdWVuY2VfXyA9IHNlcXVlbmNlCgkJc2VsZi5fX3NlcV9pbmRleF9fID0gTm9uZQoJCglkZWYgZXh0cmFjdChzZWxmLCBjb3JkKToKCQkiIiIgCgkJZXh0cmFjdCBhIHNlZ21lbnQgb2YgYSBjZXJ0YWluIHNlcXVlbmNlIAoJCQoJCUFyZ3VtZW50cwoJCS0tLS0tLS0tLS0KCQljb3JkOiBzZXF1ZW5jZSBuYW1lIGFuZCBwb3NpdGlvbnMsIGUuZy4sIG5hbWUsIG5hbWU6c3RhcnQtZW5kIChzdGFydCBhbmQgZW5kIGFyZSAxLWJhc2VkLCByZXByZXNlbnQgdGhlIHJlZ2lvbiBvZiBbc3RhcnQsZW5kKSkKCQkKCQlSZXR1cm5zCgkJLS0tLS0tLS0tLQoJCXNlZSBmZXRjaCguLi4pCgkJCgkJIiIiCgkJCgkJc2VxID0gY29yZC5zcGxpdCgiOiIpCgkJaWYgKGxlbihzZXEpID09IDEpOgoJCQlzZXEgPSBzZXFbMF0KCQkJc3RhcnQgPSBlbmQgPSBOb25lCgkJZWxzZToKCQkJc2VxLCBwb3MgPSBzZXFbOjJdCgkJCXBvcyA9IHBvcy5zcGxpdCgiLSIpCgkJCWlmIChsZW4ocG9zKSA9PSAxKToKCQkJCXN0YXJ0ID0gaW50KHBvc1swXSkKCQkJCWVuZCA9IE5vbmUKCQkJZWxzZToKCQkJCXN0YXJ0ID0gaW50KHBvc1swXSkKCQkJCWVuZCA9IGludChwb3NbMV0pCgkJcmV0dXJuIHNlbGYuZmV0Y2goc2VxLCBzdGFydCwgZW5kKQoJCglkZWYgZmV0Y2goc2VsZiwgc2VxLCBzdGFydCA9IE5vbmUsIGVuZCA9IE5vbmUpOgoJCSIiIiAKCQlleHRyYWN0IGEgc2VnbWVudCBvZiBhIGNlcnRhaW4gc2VxdWVuY2UgCgkJCgkJQXJndW1lbnRzCgkJLS0tLS0tLS0tLQoJCXNlcTogbmFtZSBvZiB0aGUgc2VxdWVuY2UKCQlzdGFydDogc3RhcnQgcG9zaXRpb24KCQllbmQ6IGVuZCBwb3NpdGlvbgoJCXN0YXJ0IGFuZCBlbmQgYXJlIDEtYmFzZWQsIHJlcHJlc2VudCB0aGUgcmVnaW9uIG9mIFtzdGFydCxlbmQpLgoJCQoJCVJldHVybnMKCQktLS0tLS0tLS0tCgkJYSB0dXBsZSBvZgoJCTEuIHNlcXVlbmNlIG5hbWUgKHRoZSBzYW1lIGFzIHRoZSBhcmd1bWVudCBzZXEpCgkJMi4gc3RhcnQgKHRoZSBvZmZzZXQgcG9zaXRpb24gaW4gdGhlIG9yaWdpbmFsIHNlcXVlbmNlLCAwLWJhc2VkKQoJCTMuIHRoZSBzZXF1ZW5jZSBvZiB0aGUgcmVnaW9uIChOb25lIGlmIHRoZSByZWdpb24gaXMgbm90IHZhbGlkIG9yIG5vdCBpbmNsdWRlZCkKCQkKCQkiIiIKCQkKCQlpZiAoc2VsZi5fX3NlcXVlbmNlX18gaXMgbm90IE5vbmUpOgoJCQlzZXF1ZW5jZSA9IHNlbGYuX19zZXF1ZW5jZV9fLmdldChzZXEpCgkJCWlmIChzdGFydCBpcyBOb25lIGFuZCBlbmQgaXMgTm9uZSk6CgkJCQlzdGFydCA9IDAKCQkJCWVuZCA9IGxlbihzZXF1ZW5jZSkgCgkJCWVsaWYgKGVuZCBpcyBOb25lKToKCQkJCXN0YXJ0ID0gbWF4KDAsIHN0YXJ0LTEpCgkJCQllbmQgPSBsZW4oc2VxdWVuY2UpIAoJCQllbHNlOgoJCQkJc3RhcnQgPSBtYXgoMCwgc3RhcnQtMSkKCQkJCWVuZCA9IG1pbihlbmQsbGVuKHNlcXVlbmNlKSkKCQkJc2VxdWVuY2UgPSBzZXF1ZW5jZVtzdGFydDplbmRdCgkJZWxpZiAoc2VsZi5fX3NlcV9pbmRleF9fIGlzIG5vdCBOb25lKToKCQkJaW5kZXggPSBzZWxmLl9fc2VxX2luZGV4X18uZ2V0KHNlcSkKCQkJc2VxX2xlbiwgb2Zmc2V0LCBsaW5lX250LCBsaW5lX2xlbmd0aCA9IGluZGV4CgkJCWlmIChzdGFydCBpcyBOb25lIG9yIHN0YXJ0IDwgMSk6CgkJCQlzdGFydCA9IDEKCQkJaWYgKGVuZCBpcyBOb25lIG9yIGVuZCA+IHNlcV9sZW4pOgoJCQkJZW5kID0gc2VxX2xlbiArIDEKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoJCQlpZiAoZW5kIDw9IHN0YXJ0KToKCQkJCWVuZCA9IHN0YXJ0ICsgMQoJCQlzdGFydCAtPSAxCgkJCWVuZCAtPSAxCjx8ZmltX2VuZHw+"]
["19bbc28e6d5b1027af6e377cc6d4cc1cbb91dfc9-1","19bbc28e6d5b1027af6e377cc6d4cc1cbb91dfc9","PHxmaW1fcHJlZml4fD4KIiIiCkNvcHlyaWdodCAoYykgMjAxOSBMaW5lYXRlIExMQwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkCmRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgp0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCnBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTApUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCk9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCklOIFRIRSBTT0ZUV0FSRS4iIiIKCmltcG9ydCB1dWlkCmltcG9ydCBudW1weSBhcyBucAoKZnJvbSBtb2RlbF9wYXJhbWV0ZXJzIGltcG9ydCBHbG9iYWxQYXJhbWV0ZXJzIGFzIGcKCgpjbGFzcyBRQShvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4cGVyaWVuY2UsIGF2YWlsYWJsZV93b3JraW5nX2hvdXIsIGJvYXJkLCByZWxlYXNlX21hc3Rlcj1GYWxzZSk6CiAgICAgICAgIyBRQSBleHBlcmllbmNlIGZvciB0aGlzIHByb2plY3QuIENhbiBiZSBpbiByYW5nZSBbMCAtIDEwXQogICAgICAgIHNlbGYuZXhwZXJpZW5jZSA9IGV4cGVyaWVuY2UKCiAgICAgICAgc2VsZi5hdmFpbGFibGVfd29ya2luZ19ob3VyID0gYXZhaWxhYmxlX3dvcmtpbmdfaG91cgogICAgICAgIHNlbGYuYm9hcmQgPSBib2FyZAogICAgICAgIHNlbGYudXVpZCA9IHV1aWQudXVpZDQoKQogICAgICAgIHNlbGYucmVsZWFzZV9tYXN0ZXIgPSByZWxlYXNlX21hc3RlcgoKICAgIGRlZiBfc3RhcnRfdG9fd29yayhzZWxmLCB0aWNrZXQpOgogICAgICAgIHRpY2tldC5hc3NpZ25lZF90byA9IHNlbGYudXVpZAogICAgICAgIGlmIHRpY2tldC50eXBlIGluIGcuc3VidGFza190eXBlczoKICAgICAgICAgICAgdGlja2V0Lm1vdmVfb24oJ0lOIFFBJykKCiAgICAgICAgICAgICIiIk1PVkUgUEFSRU5UIFRPIFJGUSIiIgogICAgICAgICAgICBpZiB0aWNrZXQucGFyZW50LmlzX3JlYWR5X2Zvcl9xYSgpOgogICAgICAgICAgICAgICAgdGlja2V0Lm1vdmVfcGFyZW50X3RvKCdJTiBRQScpCiAgICAgICAgICAgICAgICBpZiB0aWNrZXQucGFyZW50LmFzc2lnbmVkX3RvIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgdGlja2V0LnBhcmVudC5hc3NpZ25lZF90byA9IHNlbGYudXVpZAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRpY2tldC5tb3ZlX29uKCdJTiBRQScsIHNlbGYuYm9hcmQuYm9hcmQpCgogICAgZGVmIGdldF90ZXN0aW5nX3RpbWUoc2VsZiwgdGlja2V0KToKICAgICAgICBpZiB0aWNrZXQudHlwZSBpbiBnLnN1YnRhc2tfdHlwZXM6CiAgICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICAgICAoZy5wcm9iYWJpbGl0eV90b19maW5kX2J1Z1sndHlwZXMnXVt0aWNrZXQudHlwZV0pIC8gc2VsZi5leHBlcmllbmNlCiAgICAgICAgICAgICkgKiAxMAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgZy5wcm9iYWJpbGl0eV90b19maW5kX2J1Z1sndHlwZXMnXVt0aWNrZXQudHlwZV0KICAgICAgICAgICAgICAgICAgICAqIGcucHJvYmFiaWxpdHlfdG9fZmluZF9idWdbJ2NvbXBsZXhpdHknXVt0aWNrZXQuY29tcGxleGl0eV0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC8gKDEwIC8gc2VsZi5leHBlcmllbmNlKQogICAgICAgICAgICApICogMTAKICAgICAgICAjIHlpZWxkIGcuZW52LnRpbWVvdXQodGVzdGluZ190aW1lKSAgIyBUZXN0aW5nIHRpbWUKCiAgICBkZWYgX2J1ZyhzZWxmLCB0aWNrZXQpOgogICAgICAgIGNiX2NvbXBvbmVudCA9IE5vbmUKICAgICAgICBwcm9iYWJpbGl0eV90b19idWdfZm91bmQgPSAwLjAKICAgICAgICBpZiB0aWNrZXQudHlwZSBpbiBnLnN1YnRhc2tfdHlwZXM6CiAgICAgICAgICAgIHByb2JhYmlsaXR5X3RvX2J1Z19mb3VuZCA9ICgKICAgICAgICAgICAgICAgIGcucHJvYmFiaWxpdHlfdG9fZmluZF9idWdbJ3R5cGVzJ11bdGlja2V0LnR5cGVdCiAgICAgICAgICAgICAgICAqIGcucHJvYmFiaWxpdHlfdG9fZmluZF9idWdbJ2NvbXBvbmVudCddW3RpY2tldC5jb21wb25lbnRzWzBdXQogICAgICAgICAgICAgICAgKiAoc2VsZi5leHBlcmllbmNlIC8gMTApCiAgICAgICAgICAgICkKICAgICAgICBlbHNlOgogICAgICAgICAgICBjYl9jb21wb25lbnQgPSBucC5yYW5kb20uY2hvaWNlKHRpY2tldC5jb21wb25lbnRzLCAxKVswXS5jb3B5KCkKICAgICAgICAgICAgcHJvYmFiaWxpdHlfdG9fYnVnX2ZvdW5kID0gKAogICAgICAgICAgICAgICAgZy5wcm9iYWJpbGl0eV90b19maW5kX2J1Z1sndHlwZXMnXVt0aWNrZXQudHlwZV0KICAgICAgICAgICAgICAgICogZy5wcm9iYWJpbGl0eV90b19maW5kX2J1Z1snY29tcG9uZW50J11bY2JfY29tcG9uZW50XQogICAgICAgICAgICAgICAgKiBnLnByb2JhYmlsaXR5X3RvX2ZpbmRfYnVnWydjb21wbGV4aXR5J11bdGlja2V0LmNvbXBsZXhpdHldCiAgICAgICAgICAgICAgICAqIChzZWxmLmV4cGVyaWVuY2UgLyAxMCkKICAgICAgICAgICAgKQogICAgICAgICAgICBwcm9iYWJpbGl0eV90b19idWdfZm91bmQgPSAoCiAgICAgICAgICAgICAgICBwcm9iYWJpbGl0eV90b19idWdfZm91bmQgaWYgcHJvYmFiaWxpdHlfdG9fYnVnX2ZvdW5kIDw9IDEgZWxzZSAxCiAgICAgICAgICAgICkKCiAgICAgICAgYnVnX2lzX2ZvdW5kID0gbnAucmFuZG9tLmNob2ljZSgKICAgICAgICAgICAgW1RydWUsIEZhbHNlXSwgMSwgcD1bcHJvYmFiaWxpdHlfdG9fYnVnX2ZvdW5kLCAxIC0gcHJvYmFiaWxpdHlfdG9fYnVnX2ZvdW5kXQogICAgICAgIClbMF0uY29weSgpCgogICAgICAgIHJldHVybiB7J2lzX2ZvdW5kJzogYnVnX2lzX2ZvdW5kLCAnY29tcG9uZW50JzogY2JfY29tcG9uZW50fQoKICAgIGRlZiBfcmVnaXN0ZXJfYnVnKHNlbGYsIHRpY2tldCwgY2JfY29tcG9uZW50PU5vbmUpOgogICAgICAgIGlmIHRpY2tldC50eXBlIGluIGcuc3VidGFza190eXBlczoKICAgICAgICAgICAgIyB5aWVsZCBnLmVudi50aW1lb3V0KDAuMjUpCiAgICAgICAgICAgIHRpY2tldC5tb3ZlX29uKCdTRUxFQ1RFRCBGT1IgREVWRUxPUE1FTlQnKQogICAgICAgICAgICB0aWNrZXQucGFyZW50Lm1vdmVfb24oJ0JVR0ZJWElORycsIHNlbGYuYm9hcmQuYm9hcmQpCiAgICAgICAgICAgIHRpY2tldC5wYXJlbnQuYXNzaWduZWRfdG8gPSBOb25lCiAgICAgICAgICAgIHByaW50KGYiUUEgaGFzIHRlc3RlZCBDQiBhbmQgbW92ZWQgYmFjayIpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyB5aWVsZCBnLmVudi50aW1lb3V0KDAuNSkKICAgICAgICAgICAgdGlja2V0LmFkZF9zdWJ0YXNrKAogICAgICAgICAgICAgICAgY29tcG9uZW50PWNiX2NvbXBvbmVudCwKICAgICAgICAgICAgICAgIHR5cGU9J0NvbXBsZXRpb24gYmxvY2tlcicsCiAgICAgICAgICAgICAgICBzdGF0dXM9J1NFTEVDVEVEIEZPUiBERVZFTE9QTUVOVCcsCiAgICAgICAgICAgICAgICBib2FyZD1zZWxmLmJvYXJkLAogICAgICAgICAgICApCiAgICAgICAgICAgIHRpY2tldC5tb3ZlX29uKCdCVUdGSVhJTkcnLCBzZWxmLmJvYXJkLmJvYXJkKQogICAgICAgICAgICBwcmludChmIlFBIGhhcyB0ZXN0ZWQge3RpY2tldC50eXBlfSBhbmQgbW92ZWQgdG8gQnVmZ2l4aW5nIHdpdGggQ0IiKQoKICAgICAgICB0aWNrZXQuYXNzaWduZWRfdG8gPSBOb25lCiAgICAgICAgcHJpbnQoZidOb3cgaXMge2cuZG93fS4gQm9hcmQgaXMge3NlbGYuYm9hcmQuYm9hcmR9JykKCiAgICBkZWYgX3Rlc3RpbmdfcGFzcyhzZWxmLCB0aWNrZXQpOgogICAgICAgIGlmIHRpY2tldC50eXBlIGluIGcuc3VidGFza190eXBlczoKICAgICAgICAgICAgdGlja2V0Lm1vdmVfb24oJ0RPTkUnKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRpY2tldC5tb3ZlX29uKCdORVhUIFNUQUdJTkcnLCBzZWxmLmJvYXJkLmJvYXJkKQogICAgICAgICAgICBwcmludChmIlFBIGhhcyB0ZXN0ZWQge3RpY2tldC50eXBlfSBhbmQgbW92ZWQgZm9yd2FyZCIpCiAgICAgICAgcHJpbnQoZidOb3cgaXMge2cuZG93fS4gQm9hcmQgaXMge3NlbGYuYm9hcmQuYm9hcmR9JykKICAgICAgICB0aWNrZXQuYXNzaWduZWRfdG8gPSBOb25lCgogICAgZGVmIF91YXRfcGFzcyhzZWxmLCB0aWNrZXQpOgogICAgICAgIHRpY2tldC5tb3ZlX29uKCdET05FJywgc2VsZi5ib2FyZC5ib2FyZCkKICAgICAgICBwcmludChmIlFBIGhhcyB0ZXN0ZWQge3RpY2tldC50eXBlfSBhbmQgbW92ZWQgZm9yd2FyZCIpCiAgICAgICAgcHJpbnQoZidOb3cgaXMge2cuZG93fS4gQm9hcmQgaXMge3NlbGYuYm9hcmQuYm9hcmR9JykKICAgICAgICB0aWNrZXQuYXNzaWduZWRfdG8gPSBOb25lCgogICAgZGVmIHRlc3Rpbmcoc2VsZik6CiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgaWYgc2VsZi5yZWxlYXNlX21hc3RlciBhbmQgZy5kb3cgaW4gKDEsIDQpIGFuZCBnLmxhc3RfcmVsZWFzZV9kYXkgIT0gZy5kb3c6CiAgICAgICAgICAgICAgICBnLmVudi5wcm9jZXNzKHNlbGYucmVsZWFzZSgpKQogICAgICAgICAgICAgICAgIyB5aWVsZCBnLmVudi50aW1lb3V0KDI0KQoKICAgICAgICAgICAgZm9yIHRpY2tldCBpbiBzZWxmLmJvYXJkLmJvYXJkLnRpY2tldHNbJ0lOIFFBJ106CiAgICAgICAgICAgICAgICBpZiB0aWNrZXQuYXNzaWduZWRfdG8gPT0gc2VsZi51dWlkOgogICAgICAgICAgICAgICAgICAgIHlpZWxkIGcuZW52LnRpbWVvdXQoc2VsZi5nZXRfdGVzdGluZ190aW1lKHRpY2tldCkpCgogICAgICAgICAgICAgICAgICAgIGJ1ZyA9IHNlbGYuX2J1Zyh0aWNrZXQpCgogICAgICAgICAgICAgICAgICAgIGlmIGJ1Z1snaXNfZm91bmQnXToKICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgZy5lbnYudGltZW91dCgwLjUpCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlZ2lzdGVyX2J1Zyh0aWNrZXQsIGJ1Z1snY29tcG9uZW50J10pCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdGluZ19wYXNzKHRpY2tldCkKCiAgICAgICAgICAgIGlmIHNlbGYuYm9hcmQuYm9hcmQudGlja2V0c1snUkVBRFkgRk9SIFFBJ106CiAgICAgICAgICAgICAgICBmb3IgdGlja2V0IGluIHNlbGYuYm9hcmQuYm9hcmQudGlja2V0c1snUkVBRFkgRk9SIFFBJ106CiAgICAgICAgICAgICAgICAgICAgaWYgdGlja2V0LnR5cGUgaW4gZy50aWNrZXRfdHlwZXM6CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdWJ0YXNrIGluIHRpY2tldC5zdWJ0YXNrczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0YXNrLnR5cGUgPT0gJ0NvbXBsZXRpb24gYmxvY2tlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc3VidGFzay5zdGF0dXMgPT0gJ1JFQURZIEZPUiBRQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0ID0gc3VidGFzawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCgogICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0X3RvX3dvcmsodGlja2V0KQoKICAgICAgICAgICAgICAgICAgICB5aWVsZCBnLmVudi50aW1lb3V0KHNlbGYuZ2V0X3Rlc3RpbmdfdGltZSh0aWNrZXQpKQoKICAgICAgICAgICAgICAgICAgICBidWcgPSBzZWxmLl9idWcodGlja2V0KQoKICAgICAgICAgICAgICAgICAgICBpZiBidWdbJ2lzX2ZvdW5kJ106CiAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGcuZW52LnRpbWVvdXQoMC41KQogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWdpc3Rlcl9idWcodGlja2V0LCBidWdbJ2NvbXBvbmVudCddKQogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RpbmdfcGFzcyh0aWNrZXQpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAiIiJRQSBDQU4iVCBGSU5EIENBUkRTIEZPUiBXT1JLOiBIRS9TSEUgU1BFTkQgMzAgTUlOVVRFUyBUTyBBTlkgT1RIRVIgV09SSyAoVEVTVCBDQVNFUywgUkVHUkVTU0lPTiBBTkQgU08gT04pIiIiCiAgICAgICAgICAgICAgICAjIHByaW50KCJRQSBkb24ndCBoYXZlIGFueSB0aWNrZXRzIGZvciB0ZXN0aW5nLi4uIEhlL3NoZSB3aWxsIHdvcmsgdW5kZXIgcHJvY2VzcyBpc3N1ZXMuLi4iKQogICAgICAgICAgICAgICAgeWllbGQgZy5lbnYudGltZW91dCgwLjUpCiAgICAgICAgICAgICAgICBnLmZyZWVfdGltZV9xYSArPSAwLjUKICAgICAgICByZXR1cm4KCiAgICBkZWYgX21vdmVfYWxsX3RpY2tldHMoc2VsZiwgc291cmNlLCBkaXJlY3QpOgogICAgICAgIGZvciB0aWNrZXQgaW4gc2VsZi5ib2FyZC5ib2FyZC50aWNrZXRzW3NvdXJjZV06CiAgICAgICAgICAgIGlmIHRpY2tldC50eXBlIGluIGcudGlja2V0X3R5cGVzOgogICAgICAgICAgICAgICAgdGlja2V0Lm1vdmVfb24oZGlyZWN0LCBzZWxmLmJvYXJkLmJvYXJkKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgdGlja2V0Lm1vdmVfb24oZGlyZWN0KQogICAgICAgICAgICBwcmludChmJ05vdyBpcyB7Zy5kb3d9LiBCb2FyZCBpcyB7c2VsZi5ib2FyZC5ib2FyZH0nKQoKICAgIGRlZiByZWxlYXNlKHNlbGYpOgogICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgIGlmIGcuZG93ID09IDEgb3IgZy5kb3cgPT0gNDoKICAgICAgICAgICAgICAgIGlmIGcubGFzdF9yZWxlYXNlX2RheSA9PSBnLmRvdzoKICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIiIiUkVMRUFTRSIiIgoKICAgICAgICAgICAgICAgICIiIkNPTExFQ1QgQlJBTkNIRVMiIiIKICAgICAgICAgICAgICAgIHlpZWxkIGcuZW52LnRpbWVvdXQoMC4yNSkKCiAgICAgICAgICAgICAgICAiIiJSRUxFQVNFOiBERVBMT1kgVE8gUFJPRFMiIiIKICAgICAgICAgICAgICAgIGlmIHNlbGYuYm9hcmQuYm9hcmQudGlja2V0c1snRE9ORSddOgogICAgICAgICAgICAgICAgICAgIHlpZWxkIGcuZW52LnRpbWVvdXQoMC43NSAqIDMpCiAgICAgICAgICAgICAgICAgICAgd2hpbGUgc2VsZi5ib2FyZC5ib2FyZC50aWNrZXRzWydET05FJ10uX19sZW5fXygpID4gMDoKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbW92ZV9hbGxfdGlja2V0cygnRE9ORScsICdSRUxFQVNFRCcpCiAgICAgICAgICAgICAgICAgICAgICAgIGcubGFzdF9yZWxlYXNlX2RheSA9IGcuZG93CiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHByaW50KCJTTElERSBQUk9EIFJFTEVBU0UiKQoKICAgICAgICAgICAgICAgICIiIlJFTEVBU0U6IERFUExPWSBUTyBTVEciIiIKICAgICAgICAgICAgICAgIGlmIHNlbGYuYm9hcmQuYm9hcmQudGlja2V0c1snTkVYVCBTVEFHSU5HJ106Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICB5aWVsZCBnLmVudi50aW1lb3V0KDAuNzUpCiAgICAgICAgICAgICAgICAgICAgd2hpbGUgc2VsZi5ib2FyZC5ib2FyZC50aWNrZXRzWydORVhUIFNUQUdJTkcnXS5fX2xlbl9fKCkgPiAwOgogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tb3ZlX2FsbF90aWNrZXRzKCdORVhUIFNUQUdJTkcnLCAnUFJFLVJFTEVBU0UgUUEnKQogICAgICAgICAgICAgICAgICAgICAgICBnLmxhc3RfcmVsZWFzZV9kYXkgPSBnLmRvdwo8fGZpbV9lbmR8Pg=="]
["19bbc28e6d5b1027af6e377cc6d4cc1cbb91dfc9-2","19bbc28e6d5b1027af6e377cc6d4cc1cbb91dfc9","PHxmaW1fcHJlZml4fD4KIiIiCkNvcHlyaWdodCAoYykgMjAxOSBMaW5lYXRlIExMQwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkCmRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgp0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCnBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTApUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCk9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCklOIFRIRSBTT0ZUV0FSRS4iIiIKCmltcG9ydCB1dWlkCmltcG9ydCBudW1weSBhcyBucAoKZnJvbSBtb2RlbF9wYXJhbWV0ZXJzIGltcG9ydCBHbG9iYWxQYXJhbWV0ZXJzIGFzIGcKCgpjbGFzcyBRQShvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4cGVyaWVuY2UsIGF2YWlsYWJsZV93b3JraW5nX2hvdXIsIGJvYXJkLCByZWxlYXNlX21hc3Rlcj1GYWxzZSk6CiAgICAgICAgIyBRQSBleHBlcmllbmNlIGZvciB0aGlzIHByb2plY3QuIENhbiBiZSBpbiByYW5nZSBbMCAtIDEwXQogICAgICAgIHNlbGYuZXhwZXJpZW5jZSA9IGV4cGVyaWVuY2UKCiAgICAgICAgc2VsZi5hdmFpbGFibGVfd29ya2luZ19ob3VyID0gYXZhaWxhYmxlX3dvcmtpbmdfaG91cgogICAgICAgIHNlbGYuYm9hcmQgPSBib2FyZAogICAgICAgIHNlbGYudXVpZCA9IHV1aWQudXVpZDQoKQogICAgICAgIHNlbGYucmVsZWFzZV9tYXN0ZXIgPSByZWxlYXNlX21hc3RlcgoKICAgIGRlZiBfc3RhcnRfdG9fd29yayhzZWxmLCB0aWNrZXQpOgogICAgICAgIHRpY2tldC5hc3NpZ25lZF90byA9IHNlbGYudXVpZAogICAgICAgIGlmIHRpY2tldC50eXBlIGluIGcuc3VidGFza190eXBlczoKICAgICAgICAgICAgdGlja2V0Lm1vdmVfb24oJ0lOIFFBJykKCiAgICAgICAgICAgICIiIk1PVkUgUEFSRU5UIFRPIFJGUSIiIgogICAgICAgICAgICBpZiB0aWNrZXQucGFyZW50LmlzX3JlYWR5X2Zvcl9xYSgpOgogICAgICAgICAgICAgICAgdGlja2V0Lm1vdmVfcGFyZW50X3RvKCdJTiBRQScpCiAgICAgICAgICAgICAgICBpZiB0aWNrZXQucGFyZW50LmFzc2lnbmVkX3RvIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgdGlja2V0LnBhcmVudC5hc3NpZ25lZF90byA9IHNlbGYudXVpZAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRpY2tldC5tb3ZlX29uKCdJTiBRQScsIHNlbGYuYm9hcmQuYm9hcmQpCgogICAgZGVmIGdldF90ZXN0aW5nX3RpbWUoc2VsZiwgdGlja2V0KToKICAgICAgICBpZiB0aWNrZXQudHlwZSBpbiBnLnN1YnRhc2tfdHlwZXM6CiAgICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICAgICAoZy5wcm9iYWJpbGl0eV90b19maW5kX2J1Z1sndHlwZXMnXVt0aWNrZXQudHlwZV0pIC8gc2VsZi5leHBlcmllbmNlCiAgICAgICAgICAgICkgKiAxMAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgZy5wcm9iYWJpbGl0eV90b19maW5kX2J1Z1sndHlwZXMnXVt0aWNrZXQudHlwZV0KICAgICAgICAgICAgICAgICAgICAqIGcucHJvYmFiaWxpdHlfdG9fZmluZF9idWdbJ2NvbXBsZXhpdHknXVt0aWNrZXQuY29tcGxleGl0eV0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC8gKDEwIC8gc2VsZi5leHBlcmllbmNlKQogICAgICAgICAgICApICogMTAKICAgICAgICAjIHlpZWxkIGcuZW52LnRpbWVvdXQodGVzdGluZ190aW1lKSAgIyBUZXN0aW5nIHRpbWUKCiAgICBkZWYgX2J1ZyhzZWxmLCB0aWNrZXQpOgogICAgICAgIGNiX2NvbXBvbmVudCA9IE5vbmUKICAgICAgICBwcm9iYWJpbGl0eV90b19idWdfZm91bmQgPSAwLjAKICAgICAgICBpZiB0aWNrZXQudHlwZSBpbiBnLnN1YnRhc2tfdHlwZXM6CiAgICAgICAgICAgIHByb2JhYmlsaXR5X3RvX2J1Z19mb3VuZCA9ICgKICAgICAgICAgICAgICAgIGcucHJvYmFiaWxpdHlfdG9fZmluZF9idWdbJ3R5cGVzJ11bdGlja2V0LnR5cGVdCiAgICAgICAgICAgICAgICAqIGcucHJvYmFiaWxpdHlfdG9fZmluZF9idWdbJ2NvbXBvbmVudCddW3RpY2tldC5jb21wb25lbnRzWzBdXQogICAgICAgICAgICAgICAgKiAoc2VsZi5leHBlcmllbmNlIC8gMTApCiAgICAgICAgICAgICkKICAgICAgICBlbHNlOgogICAgICAgICAgICBjYl9jb21wb25lbnQgPSBucC5yYW5kb20uY2hvaWNlKHRpY2tldC5jb21wb25lbnRzLCAxKVswXS5jb3B5KCkKICAgICAgICAgICAgcHJvYmFiaWxpdHlfdG9fYnVnX2ZvdW5kID0gKAogICAgICAgICAgICAgICAgZy5wcm9iYWJpbGl0eV90b19maW5kX2J1Z1sndHlwZXMnXVt0aWNrZXQudHlwZV0KICAgICAgICAgICAgICAgICogZy5wcm9iYWJpbGl0eV90b19maW5kX2J1Z1snY29tcG9uZW50J11bY2JfY29tcG9uZW50XQogICAgICAgICAgICAgICAgKiBnLnByb2JhYmlsaXR5X3RvX2ZpbmRfYnVnWydjb21wbGV4aXR5J11bdGlja2V0LmNvbXBsZXhpdHldCiAgICAgICAgICAgICAgICAqIChzZWxmLmV4cGVyaWVuY2UgLyAxMCkKICAgICAgICAgICAgKQogICAgICAgICAgICBwcm9iYWJpbGl0eV90b19idWdfZm91bmQgPSAoCiAgICAgICAgICAgICAgICBwcm9iYWJpbGl0eV90b19idWdfZm91bmQgaWYgcHJvYmFiaWxpdHlfdG9fYnVnX2ZvdW5kIDw9IDEgZWxzZSAxCiAgICAgICAgICAgICkKCiAgICAgICAgYnVnX2lzX2ZvdW5kID0gbnAucmFuZG9tLmNob2ljZSgKICAgICAgICAgICAgW1RydWUsIEZhbHNlXSwgMSwgcD1bcHJvYmFiaWxpdHlfdG9fYnVnX2ZvdW5kLCAxIC0gcHJvYmFiaWxpdHlfdG9fYnVnX2ZvdW5kXQogICAgICAgIClbMF0uY29weSgpCgogICAgICAgIHJldHVybiB7J2lzX2ZvdW5kJzogYnVnX2lzX2ZvdW5kLCAnY29tcG9uZW50JzogY2JfY29tcG9uZW50fQoKICAgIGRlZiBfcmVnaXN0ZXJfYnVnKHNlbGYsIHRpY2tldCwgY2JfY29tcG9uZW50PU5vbmUpOgogICAgICAgIGlmIHRpY2tldC50eXBlIGluIGcuc3VidGFza190eXBlczoKICAgICAgICAgICAgIyB5aWVsZCBnLmVudi50aW1lb3V0KDAuMjUpCiAgICAgICAgICAgIHRpY2tldC5tb3ZlX29uKCdTRUxFQ1RFRCBGT1IgREVWRUxPUE1FTlQnKQogICAgICAgICAgICB0aWNrZXQucGFyZW50Lm1vdmVfb24oJ0JVR0ZJWElORycsIHNlbGYuYm9hcmQuYm9hcmQpCiAgICAgICAgICAgIHRpY2tldC5wYXJlbnQuYXNzaWduZWRfdG8gPSBOb25lCiAgICAgICAgICAgIHByaW50KGYiUUEgaGFzIHRlc3RlZCBDQiBhbmQgbW92ZWQgYmFjayIpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyB5aWVsZCBnLmVudi50aW1lb3V0KDAuNSkKICAgICAgICAgICAgdGlja2V0LmFkZF9zdWJ0YXNrKAogICAgICAgICAgICAgICAgY29tcG9uZW50PWNiX2NvbXBvbmVudCwKICAgICAgICAgICAgICAgIHR5cGU9J0NvbXBsZXRpb24gYmxvY2tlcicsCiAgICAgICAgICAgICAgICBzdGF0dXM9J1NFTEVDVEVEIEZPUiBERVZFTE9QTUVOVCcsCiAgICAgICAgICAgICAgICBib2FyZD1zZWxmLmJvYXJkLAogICAgICAgICAgICApCiAgICAgICAgICAgIHRpY2tldC5tb3ZlX29uKCdCVUdGSVhJTkcnLCBzZWxmLmJvYXJkLmJvYXJkKQogICAgICAgICAgICBwcmludChmIlFBIGhhcyB0ZXN0ZWQge3RpY2tldC50eXBlfSBhbmQgbW92ZWQgdG8gQnVmZ2l4aW5nIHdpdGggQ0IiKQoKICAgICAgICB0aWNrZXQuYXNzaWduZWRfdG8gPSBOb25lCiAgICAgICAgcHJpbnQoZidOb3cgaXMge2cuZG93fS4gQm9hcmQgaXMge3NlbGYuYm9hcmQuYm9hcmR9JykKCiAgICBkZWYgX3Rlc3RpbmdfcGFzcyhzZWxmLCB0aWNrZXQpOgogICAgICAgIGlmIHRpY2tldC50eXBlIGluIGcuc3VidGFza190eXBlczoKICAgICAgICAgICAgdGlja2V0Lm1vdmVfb24oJ0RPTkUnKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRpY2tldC5tb3ZlX29uKCdORVhUIFNUQUdJTkcnLCBzZWxmLmJvYXJkLmJvYXJkKQogICAgICAgICAgICBwcmludChmIlFBIGhhcyB0ZXN0ZWQge3RpY2tldC50eXBlfSBhbmQgbW92ZWQgZm9yd2FyZCIpCiAgICAgICAgcHJpbnQoZidOb3cgaXMge2cuZG93fS4gQm9hcmQgaXMge3NlbGYuYm9hcmQuYm9hcmR9JykKICAgICAgICB0aWNrZXQuYXNzaWduZWRfdG8gPSBOb25lCgogICAgZGVmIF91YXRfcGFzcyhzZWxmLCB0aWNrZXQpOgogICAgICAgIHRpY2tldC5tb3ZlX29uKCdET05FJywgc2VsZi5ib2FyZC5ib2FyZCkKICAgICAgICBwcmludChmIlFBIGhhcyB0ZXN0ZWQge3RpY2tldC50eXBlfSBhbmQgbW92ZWQgZm9yd2FyZCIpCiAgICAgICAgcHJpbnQoZidOb3cgaXMge2cuZG93fS4gQm9hcmQgaXMge3NlbGYuYm9hcmQuYm9hcmR9JykKICAgICAgICB0aWNrZXQuYXNzaWduZWRfdG8gPSBOb25lCgogICAgZGVmIHRlc3Rpbmcoc2VsZik6CiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgaWYgc2VsZi5yZWxlYXNlX21hc3RlciBhbmQgZy5kb3cgaW4gKDEsIDQpIGFuZCBnLmxhc3RfcmVsZWFzZV9kYXkgIT0gZy5kb3c6CiAgICAgICAgICAgICAgICBnLmVudi5wcm9jZXNzKHNlbGYucmVsZWFzZSgpKQogICAgICAgICAgICAgICAgIyB5aWVsZCBnLmVudi50aW1lb3V0KDI0KQoKICAgICAgICAgICAgZm9yIHRpY2tldCBpbiBzZWxmLmJvYXJkLmJvYXJkLnRpY2tldHNbJ0lOIFFBJ106CiAgICAgICAgICAgICAgICBpZiB0aWNrZXQuYXNzaWduZWRfdG8gPT0gc2VsZi51dWlkOgogICAgICAgICAgICAgICAgICAgIHlpZWxkIGcuZW52LnRpbWVvdXQoc2VsZi5nZXRfdGVzdGluZ190aW1lKHRpY2tldCkpCgogICAgICAgICAgICAgICAgICAgIGJ1ZyA9IHNlbGYuX2J1Zyh0aWNrZXQpCgogICAgICAgICAgICAgICAgICAgIGlmIGJ1Z1snaXNfZm91bmQnXToKICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgZy5lbnYudGltZW91dCgwLjUpCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlZ2lzdGVyX2J1Zyh0aWNrZXQsIGJ1Z1snY29tcG9uZW50J10pCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdGluZ19wYXNzKHRpY2tldCkKCiAgICAgICAgICAgIGlmIHNlbGYuYm9hcmQuYm9hcmQudGlja2V0c1snUkVBRFkgRk9SIFFBJ106CiAgICAgICAgICAgICAgICBmb3IgdGlja2V0IGluIHNlbGYuYm9hcmQuYm9hcmQudGlja2V0c1snUkVBRFkgRk9SIFFBJ106CiAgICAgICAgICAgICAgICAgICAgaWYgdGlja2V0LnR5cGUgaW4gZy50aWNrZXRfdHlwZXM6CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdWJ0YXNrIGluIHRpY2tldC5zdWJ0YXNrczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0YXNrLnR5cGUgPT0gJ0NvbXBsZXRpb24gYmxvY2tlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc3VidGFzay5zdGF0dXMgPT0gJ1JFQURZIEZPUiBRQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0ID0gc3VidGFzawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCgogICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0X3RvX3dvcmsodGlja2V0KQoKICAgICAgICAgICAgICAgICAgICB5aWVsZCBnLmVudi50aW1lb3V0KHNlbGYuZ2V0X3Rlc3RpbmdfdGltZSh0aWNrZXQpKQoKICAgICAgICAgICAgICAgICAgICBidWcgPSBzZWxmLl9idWcodGlja2V0KQoKICAgICAgICAgICAgICAgICAgICBpZiBidWdbJ2lzX2ZvdW5kJ106CiAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGcuZW52LnRpbWVvdXQoMC41KQogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWdpc3Rlcl9idWcodGlja2V0LCBidWdbJ2NvbXBvbmVudCddKQogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RpbmdfcGFzcyh0aWNrZXQpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAiIiJRQSBDQU4iVCBGSU5EIENBUkRTIEZPUiBXT1JLOiBIRS9TSEUgU1BFTkQgMzAgTUlOVVRFUyBUTyBBTlkgT1RIRVIgV09SSyAoVEVTVCBDQVNFUywgUkVHUkVTU0lPTiBBTkQgU08gT04pIiIiCiAgICAgICAgICAgICAgICAjIHByaW50KCJRQSBkb24ndCBoYXZlIGFueSB0aWNrZXRzIGZvciB0ZXN0aW5nLi4uIEhlL3NoZSB3aWxsIHdvcmsgdW5kZXIgcHJvY2VzcyBpc3N1ZXMuLi4iKQogICAgICAgICAgICAgICAgeWllbGQgZy5lbnYudGltZW91dCgwLjUpCiAgICAgICAgICAgICAgICBnLmZyZWVfdGltZV9xYSArPSAwLjUKICAgICAgICByZXR1cm4KCiAgICBkZWYgX21vdmVfYWxsX3RpY2tldHMoc2VsZiwgc291cmNlLCBkaXJlY3QpOgogICAgICAgIGZvciB0aWNrZXQgaW4gc2VsZi5ib2FyZC5ib2FyZC50aWNrZXRzW3NvdXJjZV06CiAgICAgICAgICAgIGlmIHRpY2tldC50eXBlIGluIGcudGlja2V0X3R5cGVzOgogICAgICAgICAgICAgICAgdGlja2V0Lm1vdmVfb24oZGlyZWN0LCBzZWxmLmJvYXJkLmJvYXJkKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgdGlja2V0Lm1vdmVfb24oZGlyZWN0KQogICAgICAgICAgICBwcmludChmJ05vdyBpcyB7Zy5kb3d9LiBCb2FyZCBpcyB7c2VsZi5ib2FyZC5ib2FyZH0nKQoKICAgIGRlZiByZWxlYXNlKHNlbGYpOgogICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgIGlmIGcuZG93ID09IDEgb3IgZy5kb3cgPT0gNDoKICAgICAgICAgICAgICAgIGlmIGcubGFzdF9yZWxlYXNlX2RheSA9PSBnLmRvdzoKICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIiIiUkVMRUFTRSIiIgoKICAgICAgICAgICAgICAgICIiIkNPTExFQ1QgQlJBTkNIRVMiIiIKICAgICAgICAgICAgICAgIHlpZWxkIGcuZW52LnRpbWVvdXQoMC4yNSkKCiAgICAgICAgICAgICAgICAiIiJSRUxFQVNFOiBERVBMT1kgVE8gUFJPRFMiIiIKICAgICAgICAgICAgICAgIGlmIHNlbGYuYm9hcmQuYm9hcmQudGlja2V0c1snRE9ORSddOgogICAgICAgICAgICAgICAgICAgIHlpZWxkIGcuZW52LnRpbWVvdXQoMC43NSAqIDMpCjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBwcmludCgiU0xJREUgUFJPRCBSRUxFQVNFIikKCiAgICAgICAgICAgICAgICAiIiJSRUxFQVNFOiBERVBMT1kgVE8gU1RHIiIiCiAgICAgICAgICAgICAgICBpZiBzZWxmLmJvYXJkLmJvYXJkLnRpY2tldHNbJ05FWFQgU1RBR0lORyddOgogICAgICAgICAgICAgICAgICAgIHlpZWxkIGcuZW52LnRpbWVvdXQoMC43NSkKICAgICAgICAgICAgICAgICAgICB3aGlsZSBzZWxmLmJvYXJkLmJvYXJkLnRpY2tldHNbJ05FWFQgU1RBR0lORyddLl9fbGVuX18oKSA+IDA6CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21vdmVfYWxsX3RpY2tldHMoJ05FWFQgU1RBR0lORycsICdQUkUtUkVMRUFTRSBRQScpCiAgICAgICAgICAgICAgICAgICAgICAgIGcubGFzdF9yZWxlYXNlX2RheSA9IGcuZG93CiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHByaW50KCJTTElERSBTVEcgUkVMRUFTRSIpCiAgICAgICAgcmV0dXJuCgogICAgZGVmIHVhdChzZWxmKToKICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICBmb3IgdGlja2V0IGluIHNlbGYuYm9hcmQuYm9hcmQudGlja2V0c1snUFJFLVJFTEVBU0UgUUEnXToKICAgICAgICAgICAgICAgICIiIlJFTEVBU0U6IFVBVCIiIgogICAgICAgICAgICAgICAgaWYgdGlja2V0LmFzc2lnbmVkX3RvIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgdGlja2V0LmFzc2lnbmVkX3RvID0gc2VsZi51dWlkCiAgICAgICAgICAgICAgICAgICAgeWllbGQgZy5lbnYudGltZW91dChzZWxmLmdldF90ZXN0aW5nX3RpbWUodGlja2V0KSkKCiAgICAgICAgICAgICAgICAgICAgIiIiUkVMRUFTRTogVUFUOiBDQUxDVUxBVEUgQlVHIFBST0JBQklMSVRZIiIiCiAgICAgICAgICAgICAgICAgICAgYnVnID0gc2VsZi5fYnVnKHRpY2tldCkKCiAgICAgICAgICAgICAgICAgICAgaWYgYnVnWydpc19mb3VuZCddOgoKICAgICAgICAgICAgICAgICAgICAgICAgIiIiUkVMRUFTRTogVUFUOiBSRUdJU1RFUiBCVUciIiIKICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgZy5lbnYudGltZW91dCgwLjUpCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlZ2lzdGVyX2J1Zyh0aWNrZXQsIGJ1Z1snY29tcG9uZW50J10pCiAgICAgICAgICAgICAgICAgICAgZWxzZToKCiAgICAgICAgICAgICAgICAgICAgICAgICIiIlJFTEVBU0U6IFVBVDogVEVTVElORyBQQVNTRUQiIiIKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdWF0X3Bhc3ModGlja2V0KQogICAgICAgICAgICB5aWVsZCBnLmVudi50aW1lb3V0KDAuNSkKICAgICAgICByZXR1cm4KPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICB3aGlsZSBzZWxmLmJvYXJkLmJvYXJkLnRpY2tldHNbJ0RPTkUnXS5fX2xlbl9fKCkgPiAwOgogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tb3ZlX2FsbF90aWNrZXRzKCdET05FJywgJ1JFTEVBU0VEJykKICAgICAgICAgICAgICAgICAgICAgICAgZy5sYXN0X3JlbGVhc2VfZGF5ID0gZy5kb3cKPHxmaW1fZW5kfD4="]
["19bbc28e6d5b1027af6e377cc6d4cc1cbb91dfc9-3","19bbc28e6d5b1027af6e377cc6d4cc1cbb91dfc9","PHxmaW1fcHJlZml4fD4KIiIiCkNvcHlyaWdodCAoYykgMjAxOSBMaW5lYXRlIExMQwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkCmRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgp0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCnBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTApUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCk9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCklOIFRIRSBTT0ZUV0FSRS4iIiIKCmltcG9ydCB1dWlkCmltcG9ydCBudW1weSBhcyBucAoKZnJvbSBtb2RlbF9wYXJhbWV0ZXJzIGltcG9ydCBHbG9iYWxQYXJhbWV0ZXJzIGFzIGcKCgpjbGFzcyBRQShvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4cGVyaWVuY2UsIGF2YWlsYWJsZV93b3JraW5nX2hvdXIsIGJvYXJkLCByZWxlYXNlX21hc3Rlcj1GYWxzZSk6CiAgICAgICAgIyBRQSBleHBlcmllbmNlIGZvciB0aGlzIHByb2plY3QuIENhbiBiZSBpbiByYW5nZSBbMCAtIDEwXQogICAgICAgIHNlbGYuZXhwZXJpZW5jZSA9IGV4cGVyaWVuY2UKCiAgICAgICAgc2VsZi5hdmFpbGFibGVfd29ya2luZ19ob3VyID0gYXZhaWxhYmxlX3dvcmtpbmdfaG91cgogICAgICAgIHNlbGYuYm9hcmQgPSBib2FyZAogICAgICAgIHNlbGYudXVpZCA9IHV1aWQudXVpZDQoKQogICAgICAgIHNlbGYucmVsZWFzZV9tYXN0ZXIgPSByZWxlYXNlX21hc3RlcgoKICAgIGRlZiBfc3RhcnRfdG9fd29yayhzZWxmLCB0aWNrZXQpOgogICAgICAgIHRpY2tldC5hc3NpZ25lZF90byA9IHNlbGYudXVpZAogICAgICAgIGlmIHRpY2tldC50eXBlIGluIGcuc3VidGFza190eXBlczoKICAgICAgICAgICAgdGlja2V0Lm1vdmVfb24oJ0lOIFFBJykKCiAgICAgICAgICAgICIiIk1PVkUgUEFSRU5UIFRPIFJGUSIiIgogICAgICAgICAgICBpZiB0aWNrZXQucGFyZW50LmlzX3JlYWR5X2Zvcl9xYSgpOgogICAgICAgICAgICAgICAgdGlja2V0Lm1vdmVfcGFyZW50X3RvKCdJTiBRQScpCiAgICAgICAgICAgICAgICBpZiB0aWNrZXQucGFyZW50LmFzc2lnbmVkX3RvIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgdGlja2V0LnBhcmVudC5hc3NpZ25lZF90byA9IHNlbGYudXVpZAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRpY2tldC5tb3ZlX29uKCdJTiBRQScsIHNlbGYuYm9hcmQuYm9hcmQpCgogICAgZGVmIGdldF90ZXN0aW5nX3RpbWUoc2VsZiwgdGlja2V0KToKICAgICAgICBpZiB0aWNrZXQudHlwZSBpbiBnLnN1YnRhc2tfdHlwZXM6CiAgICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICAgICAoZy5wcm9iYWJpbGl0eV90b19maW5kX2J1Z1sndHlwZXMnXVt0aWNrZXQudHlwZV0pIC8gc2VsZi5leHBlcmllbmNlCiAgICAgICAgICAgICkgKiAxMAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgZy5wcm9iYWJpbGl0eV90b19maW5kX2J1Z1sndHlwZXMnXVt0aWNrZXQudHlwZV0KICAgICAgICAgICAgICAgICAgICAqIGcucHJvYmFiaWxpdHlfdG9fZmluZF9idWdbJ2NvbXBsZXhpdHknXVt0aWNrZXQuY29tcGxleGl0eV0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC8gKDEwIC8gc2VsZi5leHBlcmllbmNlKQogICAgICAgICAgICApICogMTAKICAgICAgICAjIHlpZWxkIGcuZW52LnRpbWVvdXQodGVzdGluZ190aW1lKSAgIyBUZXN0aW5nIHRpbWUKCiAgICBkZWYgX2J1ZyhzZWxmLCB0aWNrZXQpOgogICAgICAgIGNiX2NvbXBvbmVudCA9IE5vbmUKICAgICAgICBwcm9iYWJpbGl0eV90b19idWdfZm91bmQgPSAwLjAKICAgICAgICBpZiB0aWNrZXQudHlwZSBpbiBnLnN1YnRhc2tfdHlwZXM6CiAgICAgICAgICAgIHByb2JhYmlsaXR5X3RvX2J1Z19mb3VuZCA9ICgKICAgICAgICAgICAgICAgIGcucHJvYmFiaWxpdHlfdG9fZmluZF9idWdbJ3R5cGVzJ11bdGlja2V0LnR5cGVdCiAgICAgICAgICAgICAgICAqIGcucHJvYmFiaWxpdHlfdG9fZmluZF9idWdbJ2NvbXBvbmVudCddW3RpY2tldC5jb21wb25lbnRzWzBdXQogICAgICAgICAgICAgICAgKiAoc2VsZi5leHBlcmllbmNlIC8gMTApCiAgICAgICAgICAgICkKICAgICAgICBlbHNlOgogICAgICAgICAgICBjYl9jb21wb25lbnQgPSBucC5yYW5kb20uY2hvaWNlKHRpY2tldC5jb21wb25lbnRzLCAxKVswXS5jb3B5KCkKICAgICAgICAgICAgcHJvYmFiaWxpdHlfdG9fYnVnX2ZvdW5kID0gKAogICAgICAgICAgICAgICAgZy5wcm9iYWJpbGl0eV90b19maW5kX2J1Z1sndHlwZXMnXVt0aWNrZXQudHlwZV0KICAgICAgICAgICAgICAgICogZy5wcm9iYWJpbGl0eV90b19maW5kX2J1Z1snY29tcG9uZW50J11bY2JfY29tcG9uZW50XQogICAgICAgICAgICAgICAgKiBnLnByb2JhYmlsaXR5X3RvX2ZpbmRfYnVnWydjb21wbGV4aXR5J11bdGlja2V0LmNvbXBsZXhpdHldCiAgICAgICAgICAgICAgICAqIChzZWxmLmV4cGVyaWVuY2UgLyAxMCkKICAgICAgICAgICAgKQogICAgICAgICAgICBwcm9iYWJpbGl0eV90b19idWdfZm91bmQgPSAoCiAgICAgICAgICAgICAgICBwcm9iYWJpbGl0eV90b19idWdfZm91bmQgaWYgcHJvYmFiaWxpdHlfdG9fYnVnX2ZvdW5kIDw9IDEgZWxzZSAxCjx8ZmltX2hvbGV8PgogICAgICAgIGJ1Z19pc19mb3VuZCA9IG5wLnJhbmRvbS5jaG9pY2UoCiAgICAgICAgICAgIFtUcnVlLCBGYWxzZV0sIDEsIHA9W3Byb2JhYmlsaXR5X3RvX2J1Z19mb3VuZCwgMSAtIHByb2JhYmlsaXR5X3RvX2J1Z19mb3VuZF0KICAgICAgICApWzBdLmNvcHkoKQoKICAgICAgICByZXR1cm4geydpc19mb3VuZCc6IGJ1Z19pc19mb3VuZCwgJ2NvbXBvbmVudCc6IGNiX2NvbXBvbmVudH0KCiAgICBkZWYgX3JlZ2lzdGVyX2J1ZyhzZWxmLCB0aWNrZXQsIGNiX2NvbXBvbmVudD1Ob25lKToKICAgICAgICBpZiB0aWNrZXQudHlwZSBpbiBnLnN1YnRhc2tfdHlwZXM6CiAgICAgICAgICAgICMgeWllbGQgZy5lbnYudGltZW91dCgwLjI1KQogICAgICAgICAgICB0aWNrZXQubW92ZV9vbignU0VMRUNURUQgRk9SIERFVkVMT1BNRU5UJykKICAgICAgICAgICAgdGlja2V0LnBhcmVudC5tb3ZlX29uKCdCVUdGSVhJTkcnLCBzZWxmLmJvYXJkLmJvYXJkKQogICAgICAgICAgICB0aWNrZXQucGFyZW50LmFzc2lnbmVkX3RvID0gTm9uZQogICAgICAgICAgICBwcmludChmIlFBIGhhcyB0ZXN0ZWQgQ0IgYW5kIG1vdmVkIGJhY2siKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgICMgeWllbGQgZy5lbnYudGltZW91dCgwLjUpCiAgICAgICAgICAgIHRpY2tldC5hZGRfc3VidGFzaygKICAgICAgICAgICAgICAgIGNvbXBvbmVudD1jYl9jb21wb25lbnQsCiAgICAgICAgICAgICAgICB0eXBlPSdDb21wbGV0aW9uIGJsb2NrZXInLAogICAgICAgICAgICAgICAgc3RhdHVzPSdTRUxFQ1RFRCBGT1IgREVWRUxPUE1FTlQnLAogICAgICAgICAgICAgICAgYm9hcmQ9c2VsZi5ib2FyZCwKICAgICAgICAgICAgKQogICAgICAgICAgICB0aWNrZXQubW92ZV9vbignQlVHRklYSU5HJywgc2VsZi5ib2FyZC5ib2FyZCkKICAgICAgICAgICAgcHJpbnQoZiJRQSBoYXMgdGVzdGVkIHt0aWNrZXQudHlwZX0gYW5kIG1vdmVkIHRvIEJ1ZmdpeGluZyB3aXRoIENCIikKCiAgICAgICAgdGlja2V0LmFzc2lnbmVkX3RvID0gTm9uZQogICAgICAgIHByaW50KGYnTm93IGlzIHtnLmRvd30uIEJvYXJkIGlzIHtzZWxmLmJvYXJkLmJvYXJkfScpCgogICAgZGVmIF90ZXN0aW5nX3Bhc3Moc2VsZiwgdGlja2V0KToKICAgICAgICBpZiB0aWNrZXQudHlwZSBpbiBnLnN1YnRhc2tfdHlwZXM6CiAgICAgICAgICAgIHRpY2tldC5tb3ZlX29uKCdET05FJykKICAgICAgICBlbHNlOgogICAgICAgICAgICB0aWNrZXQubW92ZV9vbignTkVYVCBTVEFHSU5HJywgc2VsZi5ib2FyZC5ib2FyZCkKICAgICAgICAgICAgcHJpbnQoZiJRQSBoYXMgdGVzdGVkIHt0aWNrZXQudHlwZX0gYW5kIG1vdmVkIGZvcndhcmQiKQogICAgICAgIHByaW50KGYnTm93IGlzIHtnLmRvd30uIEJvYXJkIGlzIHtzZWxmLmJvYXJkLmJvYXJkfScpCiAgICAgICAgdGlja2V0LmFzc2lnbmVkX3RvID0gTm9uZQoKICAgIGRlZiBfdWF0X3Bhc3Moc2VsZiwgdGlja2V0KToKICAgICAgICB0aWNrZXQubW92ZV9vbignRE9ORScsIHNlbGYuYm9hcmQuYm9hcmQpCiAgICAgICAgcHJpbnQoZiJRQSBoYXMgdGVzdGVkIHt0aWNrZXQudHlwZX0gYW5kIG1vdmVkIGZvcndhcmQiKQogICAgICAgIHByaW50KGYnTm93IGlzIHtnLmRvd30uIEJvYXJkIGlzIHtzZWxmLmJvYXJkLmJvYXJkfScpCiAgICAgICAgdGlja2V0LmFzc2lnbmVkX3RvID0gTm9uZQoKICAgIGRlZiB0ZXN0aW5nKHNlbGYpOgogICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgIGlmIHNlbGYucmVsZWFzZV9tYXN0ZXIgYW5kIGcuZG93IGluICgxLCA0KSBhbmQgZy5sYXN0X3JlbGVhc2VfZGF5ICE9IGcuZG93OgogICAgICAgICAgICAgICAgZy5lbnYucHJvY2VzcyhzZWxmLnJlbGVhc2UoKSkKICAgICAgICAgICAgICAgICMgeWllbGQgZy5lbnYudGltZW91dCgyNCkKCiAgICAgICAgICAgIGZvciB0aWNrZXQgaW4gc2VsZi5ib2FyZC5ib2FyZC50aWNrZXRzWydJTiBRQSddOgogICAgICAgICAgICAgICAgaWYgdGlja2V0LmFzc2lnbmVkX3RvID09IHNlbGYudXVpZDoKICAgICAgICAgICAgICAgICAgICB5aWVsZCBnLmVudi50aW1lb3V0KHNlbGYuZ2V0X3Rlc3RpbmdfdGltZSh0aWNrZXQpKQoKICAgICAgICAgICAgICAgICAgICBidWcgPSBzZWxmLl9idWcodGlja2V0KQoKICAgICAgICAgICAgICAgICAgICBpZiBidWdbJ2lzX2ZvdW5kJ106CiAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGcuZW52LnRpbWVvdXQoMC41KQogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWdpc3Rlcl9idWcodGlja2V0LCBidWdbJ2NvbXBvbmVudCddKQogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RpbmdfcGFzcyh0aWNrZXQpCgogICAgICAgICAgICBpZiBzZWxmLmJvYXJkLmJvYXJkLnRpY2tldHNbJ1JFQURZIEZPUiBRQSddOgogICAgICAgICAgICAgICAgZm9yIHRpY2tldCBpbiBzZWxmLmJvYXJkLmJvYXJkLnRpY2tldHNbJ1JFQURZIEZPUiBRQSddOgogICAgICAgICAgICAgICAgICAgIGlmIHRpY2tldC50eXBlIGluIGcudGlja2V0X3R5cGVzOgogICAgICAgICAgICAgICAgICAgICAgICBmb3Igc3VidGFzayBpbiB0aWNrZXQuc3VidGFza3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidGFzay50eXBlID09ICdDb21wbGV0aW9uIGJsb2NrZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHN1YnRhc2suc3RhdHVzID09ICdSRUFEWSBGT1IgUUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tldCA9IHN1YnRhc2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawoKICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGFydF90b193b3JrKHRpY2tldCkKCiAgICAgICAgICAgICAgICAgICAgeWllbGQgZy5lbnYudGltZW91dChzZWxmLmdldF90ZXN0aW5nX3RpbWUodGlja2V0KSkKCiAgICAgICAgICAgICAgICAgICAgYnVnID0gc2VsZi5fYnVnKHRpY2tldCkKCiAgICAgICAgICAgICAgICAgICAgaWYgYnVnWydpc19mb3VuZCddOgogICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBnLmVudi50aW1lb3V0KDAuNSkKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVnaXN0ZXJfYnVnKHRpY2tldCwgYnVnWydjb21wb25lbnQnXSkKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0aW5nX3Bhc3ModGlja2V0KQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIiIiUUEgQ0FOIlQgRklORCBDQVJEUyBGT1IgV09SSzogSEUvU0hFIFNQRU5EIDMwIE1JTlVURVMgVE8gQU5ZIE9USEVSIFdPUksgKFRFU1QgQ0FTRVMsIFJFR1JFU1NJT04gQU5EIFNPIE9OKSIiIgogICAgICAgICAgICAgICAgIyBwcmludCgiUUEgZG9uJ3QgaGF2ZSBhbnkgdGlja2V0cyBmb3IgdGVzdGluZy4uLiBIZS9zaGUgd2lsbCB3b3JrIHVuZGVyIHByb2Nlc3MgaXNzdWVzLi4uIikKICAgICAgICAgICAgICAgIHlpZWxkIGcuZW52LnRpbWVvdXQoMC41KQogICAgICAgICAgICAgICAgZy5mcmVlX3RpbWVfcWEgKz0gMC41CiAgICAgICAgcmV0dXJuCgogICAgZGVmIF9tb3ZlX2FsbF90aWNrZXRzKHNlbGYsIHNvdXJjZSwgZGlyZWN0KToKICAgICAgICBmb3IgdGlja2V0IGluIHNlbGYuYm9hcmQuYm9hcmQudGlja2V0c1tzb3VyY2VdOgogICAgICAgICAgICBpZiB0aWNrZXQudHlwZSBpbiBnLnRpY2tldF90eXBlczoKICAgICAgICAgICAgICAgIHRpY2tldC5tb3ZlX29uKGRpcmVjdCwgc2VsZi5ib2FyZC5ib2FyZCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHRpY2tldC5tb3ZlX29uKGRpcmVjdCkKICAgICAgICAgICAgcHJpbnQoZidOb3cgaXMge2cuZG93fS4gQm9hcmQgaXMge3NlbGYuYm9hcmQuYm9hcmR9JykKCiAgICBkZWYgcmVsZWFzZShzZWxmKToKICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICBpZiBnLmRvdyA9PSAxIG9yIGcuZG93ID09IDQ6CiAgICAgICAgICAgICAgICBpZiBnLmxhc3RfcmVsZWFzZV9kYXkgPT0gZy5kb3c6CiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICIiIlJFTEVBU0UiIiIKCiAgICAgICAgICAgICAgICAiIiJDT0xMRUNUIEJSQU5DSEVTIiIiCiAgICAgICAgICAgICAgICB5aWVsZCBnLmVudi50aW1lb3V0KDAuMjUpCgogICAgICAgICAgICAgICAgIiIiUkVMRUFTRTogREVQTE9ZIFRPIFBST0RTIiIiCiAgICAgICAgICAgICAgICBpZiBzZWxmLmJvYXJkLmJvYXJkLnRpY2tldHNbJ0RPTkUnXToKICAgICAgICAgICAgICAgICAgICB5aWVsZCBnLmVudi50aW1lb3V0KDAuNzUgKiAzKQogICAgICAgICAgICAgICAgICAgIHdoaWxlIHNlbGYuYm9hcmQuYm9hcmQudGlja2V0c1snRE9ORSddLl9fbGVuX18oKSA+IDA6CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21vdmVfYWxsX3RpY2tldHMoJ0RPTkUnLCAnUkVMRUFTRUQnKQogICAgICAgICAgICAgICAgICAgICAgICBnLmxhc3RfcmVsZWFzZV9kYXkgPSBnLmRvdwogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBwcmludCgiU0xJREUgUFJPRCBSRUxFQVNFIikKCiAgICAgICAgICAgICAgICAiIiJSRUxFQVNFOiBERVBMT1kgVE8gU1RHIiIiCiAgICAgICAgICAgICAgICBpZiBzZWxmLmJvYXJkLmJvYXJkLnRpY2tldHNbJ05FWFQgU1RBR0lORyddOgogICAgICAgICAgICAgICAgICAgIHlpZWxkIGcuZW52LnRpbWVvdXQoMC43NSkKICAgICAgICAgICAgICAgICAgICB3aGlsZSBzZWxmLmJvYXJkLmJvYXJkLnRpY2tldHNbJ05FWFQgU1RBR0lORyddLl9fbGVuX18oKSA+IDA6CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21vdmVfYWxsX3RpY2tldHMoJ05FWFQgU1RBR0lORycsICdQUkUtUkVMRUFTRSBRQScpCiAgICAgICAgICAgICAgICAgICAgICAgIGcubGFzdF9yZWxlYXNlX2RheSA9IGcuZG93CiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHByaW50KCJTTElERSBTVEcgUkVMRUFTRSIpCiAgICAgICAgcmV0dXJuCgogICAgZGVmIHVhdChzZWxmKToKICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICBmb3IgdGlja2V0IGluIHNlbGYuYm9hcmQuYm9hcmQudGlja2V0c1snUFJFLVJFTEVBU0UgUUEnXToKICAgICAgICAgICAgICAgICIiIlJFTEVBU0U6IFVBVCIiIgogICAgICAgICAgICAgICAgaWYgdGlja2V0LmFzc2lnbmVkX3RvIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgdGlja2V0LmFzc2lnbmVkX3RvID0gc2VsZi51dWlkCiAgICAgICAgICAgICAgICAgICAgeWllbGQgZy5lbnYudGltZW91dChzZWxmLmdldF90ZXN0aW5nX3RpbWUodGlja2V0KSkKCiAgICAgICAgICAgICAgICAgICAgIiIiUkVMRUFTRTogVUFUOiBDQUxDVUxBVEUgQlVHIFBST0JBQklMSVRZIiIiCiAgICAgICAgICAgICAgICAgICAgYnVnID0gc2VsZi5fYnVnKHRpY2tldCkKCiAgICAgICAgICAgICAgICAgICAgaWYgYnVnWydpc19mb3VuZCddOgoKICAgICAgICAgICAgICAgICAgICAgICAgIiIiUkVMRUFTRTogVUFUOiBSRUdJU1RFUiBCVUciIiIKICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgZy5lbnYudGltZW91dCgwLjUpCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlZ2lzdGVyX2J1Zyh0aWNrZXQsIGJ1Z1snY29tcG9uZW50J10pCiAgICAgICAgICAgICAgICAgICAgZWxzZToKCiAgICAgICAgICAgICAgICAgICAgICAgICIiIlJFTEVBU0U6IFVBVDogVEVTVElORyBQQVNTRUQiIiIKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdWF0X3Bhc3ModGlja2V0KQogICAgICAgICAgICB5aWVsZCBnLmVudi50aW1lb3V0KDAuNSkKICAgICAgICByZXR1cm4KPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgKQoKPHxmaW1fZW5kfD4="]
["19bbc28e6d5b1027af6e377cc6d4cc1cbb91dfc9-4","19bbc28e6d5b1027af6e377cc6d4cc1cbb91dfc9","PHxmaW1fcHJlZml4fD4KIiIiCkNvcHlyaWdodCAoYykgMjAxOSBMaW5lYXRlIExMQwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkCmRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgp0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCnBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTApUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCk9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCklOIFRIRSBTT0ZUV0FSRS4iIiIKCmltcG9ydCB1dWlkCmltcG9ydCBudW1weSBhcyBucAoKZnJvbSBtb2RlbF9wYXJhbWV0ZXJzIGltcG9ydCBHbG9iYWxQYXJhbWV0ZXJzIGFzIGcKCgpjbGFzcyBRQShvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4cGVyaWVuY2UsIGF2YWlsYWJsZV93b3JraW5nX2hvdXIsIGJvYXJkLCByZWxlYXNlX21hc3Rlcj1GYWxzZSk6CiAgICAgICAgIyBRQSBleHBlcmllbmNlIGZvciB0aGlzIHByb2plY3QuIENhbiBiZSBpbiByYW5nZSBbMCAtIDEwXQogICAgICAgIHNlbGYuZXhwZXJpZW5jZSA9IGV4cGVyaWVuY2UKCiAgICAgICAgc2VsZi5hdmFpbGFibGVfd29ya2luZ19ob3VyID0gYXZhaWxhYmxlX3dvcmtpbmdfaG91cgogICAgICAgIHNlbGYuYm9hcmQgPSBib2FyZAogICAgICAgIHNlbGYudXVpZCA9IHV1aWQudXVpZDQoKQogICAgICAgIHNlbGYucmVsZWFzZV9tYXN0ZXIgPSByZWxlYXNlX21hc3RlcgoKICAgIGRlZiBfc3RhcnRfdG9fd29yayhzZWxmLCB0aWNrZXQpOgogICAgICAgIHRpY2tldC5hc3NpZ25lZF90byA9IHNlbGYudXVpZAogICAgICAgIGlmIHRpY2tldC50eXBlIGluIGcuc3VidGFza190eXBlczoKICAgICAgICAgICAgdGlja2V0Lm1vdmVfb24oJ0lOIFFBJykKCiAgICAgICAgICAgICIiIk1PVkUgUEFSRU5UIFRPIFJGUSIiIgogICAgICAgICAgICBpZiB0aWNrZXQucGFyZW50LmlzX3JlYWR5X2Zvcl9xYSgpOgogICAgICAgICAgICAgICAgdGlja2V0Lm1vdmVfcGFyZW50X3RvKCdJTiBRQScpCiAgICAgICAgICAgICAgICBpZiB0aWNrZXQucGFyZW50LmFzc2lnbmVkX3RvIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgdGlja2V0LnBhcmVudC5hc3NpZ25lZF90byA9IHNlbGYudXVpZAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRpY2tldC5tb3ZlX29uKCdJTiBRQScsIHNlbGYuYm9hcmQuYm9hcmQpCgogICAgZGVmIGdldF90ZXN0aW5nX3RpbWUoc2VsZiwgdGlja2V0KToKICAgICAgICBpZiB0aWNrZXQudHlwZSBpbiBnLnN1YnRhc2tfdHlwZXM6CiAgICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICAgICAoZy5wcm9iYWJpbGl0eV90b19maW5kX2J1Z1sndHlwZXMnXVt0aWNrZXQudHlwZV0pIC8gc2VsZi5leHBlcmllbmNlCiAgICAgICAgICAgICkgKiAxMAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgZy5wcm9iYWJpbGl0eV90b19maW5kX2J1Z1sndHlwZXMnXVt0aWNrZXQudHlwZV0KICAgICAgICAgICAgICAgICAgICAqIGcucHJvYmFiaWxpdHlfdG9fZmluZF9idWdbJ2NvbXBsZXhpdHknXVt0aWNrZXQuY29tcGxleGl0eV0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC8gKDEwIC8gc2VsZi5leHBlcmllbmNlKQogICAgICAgICAgICApICogMTAKICAgICAgICAjIHlpZWxkIGcuZW52LnRpbWVvdXQodGVzdGluZ190aW1lKSAgIyBUZXN0aW5nIHRpbWUKCiAgICBkZWYgX2J1ZyhzZWxmLCB0aWNrZXQpOgogICAgICAgIGNiX2NvbXBvbmVudCA9IE5vbmUKICAgICAgICBwcm9iYWJpbGl0eV90b19idWdfZm91bmQgPSAwLjAKICAgICAgICBpZiB0aWNrZXQudHlwZSBpbiBnLnN1YnRhc2tfdHlwZXM6CiAgICAgICAgICAgIHByb2JhYmlsaXR5X3RvX2J1Z19mb3VuZCA9ICgKICAgICAgICAgICAgICAgIGcucHJvYmFiaWxpdHlfdG9fZmluZF9idWdbJ3R5cGVzJ11bdGlja2V0LnR5cGVdCiAgICAgICAgICAgICAgICAqIGcucHJvYmFiaWxpdHlfdG9fZmluZF9idWdbJ2NvbXBvbmVudCddW3RpY2tldC5jb21wb25lbnRzWzBdXQogICAgICAgICAgICAgICAgKiAoc2VsZi5leHBlcmllbmNlIC8gMTApCiAgICAgICAgICAgICkKICAgICAgICBlbHNlOgogICAgICAgICAgICBjYl9jb21wb25lbnQgPSBucC5yYW5kb20uY2hvaWNlKHRpY2tldC5jb21wb25lbnRzLCAxKVswXS5jb3B5KCkKICAgICAgICAgICAgcHJvYmFiaWxpdHlfdG9fYnVnX2ZvdW5kID0gKAogICAgICAgICAgICAgICAgZy5wcm9iYWJpbGl0eV90b19maW5kX2J1Z1sndHlwZXMnXVt0aWNrZXQudHlwZV0KICAgICAgICAgICAgICAgICogZy5wcm9iYWJpbGl0eV90b19maW5kX2J1Z1snY29tcG9uZW50J11bY2JfY29tcG9uZW50XQogICAgICAgICAgICAgICAgKiBnLnByb2JhYmlsaXR5X3RvX2ZpbmRfYnVnWydjb21wbGV4aXR5J11bdGlja2V0LmNvbXBsZXhpdHldCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICogKHNlbGYuZXhwZXJpZW5jZSAvIDEwKQo8fGZpbV9lbmR8Pg=="]
["19bbc28e6d5b1027af6e377cc6d4cc1cbb91dfc9-5","19bbc28e6d5b1027af6e377cc6d4cc1cbb91dfc9","PHxmaW1fcHJlZml4fD4KIiIiCkNvcHlyaWdodCAoYykgMjAxOSBMaW5lYXRlIExMQwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkCmRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgp0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCnBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTApUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCk9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCklOIFRIRSBTT0ZUV0FSRS4iIiIKCmltcG9ydCB1dWlkCmltcG9ydCBudW1weSBhcyBucAoKZnJvbSBtb2RlbF9wYXJhbWV0ZXJzIGltcG9ydCBHbG9iYWxQYXJhbWV0ZXJzIGFzIGcKCgpjbGFzcyBRQShvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4cGVyaWVuY2UsIGF2YWlsYWJsZV93b3JraW5nX2hvdXIsIGJvYXJkLCByZWxlYXNlX21hc3Rlcj1GYWxzZSk6CiAgICAgICAgIyBRQSBleHBlcmllbmNlIGZvciB0aGlzIHByb2plY3QuIENhbiBiZSBpbiByYW5nZSBbMCAtIDEwXQogICAgICAgIHNlbGYuZXhwZXJpZW5jZSA9IGV4cGVyaWVuY2UKCiAgICAgICAgc2VsZi5hdmFpbGFibGVfd29ya2luZ19ob3VyID0gYXZhaWxhYmxlX3dvcmtpbmdfaG91cgogICAgICAgIHNlbGYuYm9hcmQgPSBib2FyZAogICAgICAgIHNlbGYudXVpZCA9IHV1aWQudXVpZDQoKQogICAgICAgIHNlbGYucmVsZWFzZV9tYXN0ZXIgPSByZWxlYXNlX21hc3RlcgoKICAgIGRlZiBfc3RhcnRfdG9fd29yayhzZWxmLCB0aWNrZXQpOgogICAgICAgIHRpY2tldC5hc3NpZ25lZF90byA9IHNlbGYudXVpZAogICAgICAgIGlmIHRpY2tldC50eXBlIGluIGcuc3VidGFza190eXBlczoKICAgICAgICAgICAgdGlja2V0Lm1vdmVfb24oJ0lOIFFBJykKCiAgICAgICAgICAgICIiIk1PVkUgUEFSRU5UIFRPIFJGUSIiIgogICAgICAgICAgICBpZiB0aWNrZXQucGFyZW50LmlzX3JlYWR5X2Zvcl9xYSgpOgogICAgICAgICAgICAgICAgdGlja2V0Lm1vdmVfcGFyZW50X3RvKCdJTiBRQScpCiAgICAgICAgICAgICAgICBpZiB0aWNrZXQucGFyZW50LmFzc2lnbmVkX3RvIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgdGlja2V0LnBhcmVudC5hc3NpZ25lZF90byA9IHNlbGYudXVpZAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHRpY2tldC5tb3ZlX29uKCdJTiBRQScsIHNlbGYuYm9hcmQuYm9hcmQpCgogICAgZGVmIGdldF90ZXN0aW5nX3RpbWUoc2VsZiwgdGlja2V0KToKICAgICAgICBpZiB0aWNrZXQudHlwZSBpbiBnLnN1YnRhc2tfdHlwZXM6CiAgICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICAgICAoZy5wcm9iYWJpbGl0eV90b19maW5kX2J1Z1sndHlwZXMnXVt0aWNrZXQudHlwZV0pIC8gc2VsZi5leHBlcmllbmNlCiAgICAgICAgICAgICkgKiAxMAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgZy5wcm9iYWJpbGl0eV90b19maW5kX2J1Z1sndHlwZXMnXVt0aWNrZXQudHlwZV0KICAgICAgICAgICAgICAgICAgICAqIGcucHJvYmFiaWxpdHlfdG9fZmluZF9idWdbJ2NvbXBsZXhpdHknXVt0aWNrZXQuY29tcGxleGl0eV0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC8gKDEwIC8gc2VsZi5leHBlcmllbmNlKQogICAgICAgICAgICApICogMTAKICAgICAgICAjIHlpZWxkIGcuZW52LnRpbWVvdXQodGVzdGluZ190aW1lKSAgIyBUZXN0aW5nIHRpbWUKCiAgICBkZWYgX2J1ZyhzZWxmLCB0aWNrZXQpOgogICAgICAgIGNiX2NvbXBvbmVudCA9IE5vbmUKICAgICAgICBwcm9iYWJpbGl0eV90b19idWdfZm91bmQgPSAwLjAKICAgICAgICBpZiB0aWNrZXQudHlwZSBpbiBnLnN1YnRhc2tfdHlwZXM6CiAgICAgICAgICAgIHByb2JhYmlsaXR5X3RvX2J1Z19mb3VuZCA9ICgKICAgICAgICAgICAgICAgIGcucHJvYmFiaWxpdHlfdG9fZmluZF9idWdbJ3R5cGVzJ11bdGlja2V0LnR5cGVdCiAgICAgICAgICAgICAgICAqIGcucHJvYmFiaWxpdHlfdG9fZmluZF9idWdbJ2NvbXBvbmVudCddW3RpY2tldC5jb21wb25lbnRzWzBdXQogICAgICAgICAgICAgICAgKiAoc2VsZi5leHBlcmllbmNlIC8gMTApCiAgICAgICAgICAgICkKICAgICAgICBlbHNlOgogICAgICAgICAgICBjYl9jb21wb25lbnQgPSBucC5yYW5kb20uY2hvaWNlKHRpY2tldC5jb21wb25lbnRzLCAxKVswXS5jb3B5KCkKICAgICAgICAgICAgcHJvYmFiaWxpdHlfdG9fYnVnX2ZvdW5kID0gKAogICAgICAgICAgICAgICAgZy5wcm9iYWJpbGl0eV90b19maW5kX2J1Z1sndHlwZXMnXVt0aWNrZXQudHlwZV0KICAgICAgICAgICAgICAgICogZy5wcm9iYWJpbGl0eV90b19maW5kX2J1Z1snY29tcG9uZW50J11bY2JfY29tcG9uZW50XQogICAgICAgICAgICAgICAgKiBnLnByb2JhYmlsaXR5X3RvX2ZpbmRfYnVnWydjb21wbGV4aXR5J11bdGlja2V0LmNvbXBsZXhpdHldCjx8ZmltX2hvbGV8PgogICAgICAgICAgICApCiAgICAgICAgICAgIHByb2JhYmlsaXR5X3RvX2J1Z19mb3VuZCA9ICgKICAgICAgICAgICAgICAgIHByb2JhYmlsaXR5X3RvX2J1Z19mb3VuZCBpZiBwcm9iYWJpbGl0eV90b19idWdfZm91bmQgPD0gMSBlbHNlIDEKICAgICAgICAgICAgKQoKICAgICAgICBidWdfaXNfZm91bmQgPSBucC5yYW5kb20uY2hvaWNlKAogICAgICAgICAgICBbVHJ1ZSwgRmFsc2VdLCAxLCBwPVtwcm9iYWJpbGl0eV90b19idWdfZm91bmQsIDEgLSBwcm9iYWJpbGl0eV90b19idWdfZm91bmRdCiAgICAgICAgKVswXS5jb3B5KCkKCiAgICAgICAgcmV0dXJuIHsnaXNfZm91bmQnOiBidWdfaXNfZm91bmQsICdjb21wb25lbnQnOiBjYl9jb21wb25lbnR9CgogICAgZGVmIF9yZWdpc3Rlcl9idWcoc2VsZiwgdGlja2V0LCBjYl9jb21wb25lbnQ9Tm9uZSk6CiAgICAgICAgaWYgdGlja2V0LnR5cGUgaW4gZy5zdWJ0YXNrX3R5cGVzOgogICAgICAgICAgICAjIHlpZWxkIGcuZW52LnRpbWVvdXQoMC4yNSkKICAgICAgICAgICAgdGlja2V0Lm1vdmVfb24oJ1NFTEVDVEVEIEZPUiBERVZFTE9QTUVOVCcpCiAgICAgICAgICAgIHRpY2tldC5wYXJlbnQubW92ZV9vbignQlVHRklYSU5HJywgc2VsZi5ib2FyZC5ib2FyZCkKICAgICAgICAgICAgdGlja2V0LnBhcmVudC5hc3NpZ25lZF90byA9IE5vbmUKICAgICAgICAgICAgcHJpbnQoZiJRQSBoYXMgdGVzdGVkIENCIGFuZCBtb3ZlZCBiYWNrIikKICAgICAgICBlbHNlOgogICAgICAgICAgICAjIHlpZWxkIGcuZW52LnRpbWVvdXQoMC41KQogICAgICAgICAgICB0aWNrZXQuYWRkX3N1YnRhc2soCiAgICAgICAgICAgICAgICBjb21wb25lbnQ9Y2JfY29tcG9uZW50LAogICAgICAgICAgICAgICAgdHlwZT0nQ29tcGxldGlvbiBibG9ja2VyJywKICAgICAgICAgICAgICAgIHN0YXR1cz0nU0VMRUNURUQgRk9SIERFVkVMT1BNRU5UJywKICAgICAgICAgICAgICAgIGJvYXJkPXNlbGYuYm9hcmQsCiAgICAgICAgICAgICkKICAgICAgICAgICAgdGlja2V0Lm1vdmVfb24oJ0JVR0ZJWElORycsIHNlbGYuYm9hcmQuYm9hcmQpCiAgICAgICAgICAgIHByaW50KGYiUUEgaGFzIHRlc3RlZCB7dGlja2V0LnR5cGV9IGFuZCBtb3ZlZCB0byBCdWZnaXhpbmcgd2l0aCBDQiIpCgogICAgICAgIHRpY2tldC5hc3NpZ25lZF90byA9IE5vbmUKICAgICAgICBwcmludChmJ05vdyBpcyB7Zy5kb3d9LiBCb2FyZCBpcyB7c2VsZi5ib2FyZC5ib2FyZH0nKQoKICAgIGRlZiBfdGVzdGluZ19wYXNzKHNlbGYsIHRpY2tldCk6CiAgICAgICAgaWYgdGlja2V0LnR5cGUgaW4gZy5zdWJ0YXNrX3R5cGVzOgogICAgICAgICAgICB0aWNrZXQubW92ZV9vbignRE9ORScpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgdGlja2V0Lm1vdmVfb24oJ05FWFQgU1RBR0lORycsIHNlbGYuYm9hcmQuYm9hcmQpCiAgICAgICAgICAgIHByaW50KGYiUUEgaGFzIHRlc3RlZCB7dGlja2V0LnR5cGV9IGFuZCBtb3ZlZCBmb3J3YXJkIikKICAgICAgICBwcmludChmJ05vdyBpcyB7Zy5kb3d9LiBCb2FyZCBpcyB7c2VsZi5ib2FyZC5ib2FyZH0nKQogICAgICAgIHRpY2tldC5hc3NpZ25lZF90byA9IE5vbmUKCiAgICBkZWYgX3VhdF9wYXNzKHNlbGYsIHRpY2tldCk6CiAgICAgICAgdGlja2V0Lm1vdmVfb24oJ0RPTkUnLCBzZWxmLmJvYXJkLmJvYXJkKQogICAgICAgIHByaW50KGYiUUEgaGFzIHRlc3RlZCB7dGlja2V0LnR5cGV9IGFuZCBtb3ZlZCBmb3J3YXJkIikKICAgICAgICBwcmludChmJ05vdyBpcyB7Zy5kb3d9LiBCb2FyZCBpcyB7c2VsZi5ib2FyZC5ib2FyZH0nKQogICAgICAgIHRpY2tldC5hc3NpZ25lZF90byA9IE5vbmUKCiAgICBkZWYgdGVzdGluZyhzZWxmKToKICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICBpZiBzZWxmLnJlbGVhc2VfbWFzdGVyIGFuZCBnLmRvdyBpbiAoMSwgNCkgYW5kIGcubGFzdF9yZWxlYXNlX2RheSAhPSBnLmRvdzoKICAgICAgICAgICAgICAgIGcuZW52LnByb2Nlc3Moc2VsZi5yZWxlYXNlKCkpCiAgICAgICAgICAgICAgICAjIHlpZWxkIGcuZW52LnRpbWVvdXQoMjQpCgogICAgICAgICAgICBmb3IgdGlja2V0IGluIHNlbGYuYm9hcmQuYm9hcmQudGlja2V0c1snSU4gUUEnXToKICAgICAgICAgICAgICAgIGlmIHRpY2tldC5hc3NpZ25lZF90byA9PSBzZWxmLnV1aWQ6CiAgICAgICAgICAgICAgICAgICAgeWllbGQgZy5lbnYudGltZW91dChzZWxmLmdldF90ZXN0aW5nX3RpbWUodGlja2V0KSkKCiAgICAgICAgICAgICAgICAgICAgYnVnID0gc2VsZi5fYnVnKHRpY2tldCkKCiAgICAgICAgICAgICAgICAgICAgaWYgYnVnWydpc19mb3VuZCddOgogICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBnLmVudi50aW1lb3V0KDAuNSkKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVnaXN0ZXJfYnVnKHRpY2tldCwgYnVnWydjb21wb25lbnQnXSkKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0aW5nX3Bhc3ModGlja2V0KQoKICAgICAgICAgICAgaWYgc2VsZi5ib2FyZC5ib2FyZC50aWNrZXRzWydSRUFEWSBGT1IgUUEnXToKICAgICAgICAgICAgICAgIGZvciB0aWNrZXQgaW4gc2VsZi5ib2FyZC5ib2FyZC50aWNrZXRzWydSRUFEWSBGT1IgUUEnXToKICAgICAgICAgICAgICAgICAgICBpZiB0aWNrZXQudHlwZSBpbiBnLnRpY2tldF90eXBlczoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN1YnRhc2sgaW4gdGlja2V0LnN1YnRhc2tzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRhc2sudHlwZSA9PSAnQ29tcGxldGlvbiBibG9ja2VyJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzdWJ0YXNrLnN0YXR1cyA9PSAnUkVBRFkgRk9SIFFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXQgPSBzdWJ0YXNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKCiAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RhcnRfdG9fd29yayh0aWNrZXQpCgogICAgICAgICAgICAgICAgICAgIHlpZWxkIGcuZW52LnRpbWVvdXQoc2VsZi5nZXRfdGVzdGluZ190aW1lKHRpY2tldCkpCgogICAgICAgICAgICAgICAgICAgIGJ1ZyA9IHNlbGYuX2J1Zyh0aWNrZXQpCgogICAgICAgICAgICAgICAgICAgIGlmIGJ1Z1snaXNfZm91bmQnXToKICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgZy5lbnYudGltZW91dCgwLjUpCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlZ2lzdGVyX2J1Zyh0aWNrZXQsIGJ1Z1snY29tcG9uZW50J10pCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdGluZ19wYXNzKHRpY2tldCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICIiIlFBIENBTiJUIEZJTkQgQ0FSRFMgRk9SIFdPUks6IEhFL1NIRSBTUEVORCAzMCBNSU5VVEVTIFRPIEFOWSBPVEhFUiBXT1JLIChURVNUIENBU0VTLCBSRUdSRVNTSU9OIEFORCBTTyBPTikiIiIKICAgICAgICAgICAgICAgICMgcHJpbnQoIlFBIGRvbid0IGhhdmUgYW55IHRpY2tldHMgZm9yIHRlc3RpbmcuLi4gSGUvc2hlIHdpbGwgd29yayB1bmRlciBwcm9jZXNzIGlzc3Vlcy4uLiIpCiAgICAgICAgICAgICAgICB5aWVsZCBnLmVudi50aW1lb3V0KDAuNSkKICAgICAgICAgICAgICAgIGcuZnJlZV90aW1lX3FhICs9IDAuNQogICAgICAgIHJldHVybgoKICAgIGRlZiBfbW92ZV9hbGxfdGlja2V0cyhzZWxmLCBzb3VyY2UsIGRpcmVjdCk6CiAgICAgICAgZm9yIHRpY2tldCBpbiBzZWxmLmJvYXJkLmJvYXJkLnRpY2tldHNbc291cmNlXToKICAgICAgICAgICAgaWYgdGlja2V0LnR5cGUgaW4gZy50aWNrZXRfdHlwZXM6CiAgICAgICAgICAgICAgICB0aWNrZXQubW92ZV9vbihkaXJlY3QsIHNlbGYuYm9hcmQuYm9hcmQpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0aWNrZXQubW92ZV9vbihkaXJlY3QpCiAgICAgICAgICAgIHByaW50KGYnTm93IGlzIHtnLmRvd30uIEJvYXJkIGlzIHtzZWxmLmJvYXJkLmJvYXJkfScpCgogICAgZGVmIHJlbGVhc2Uoc2VsZik6CiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgaWYgZy5kb3cgPT0gMSBvciBnLmRvdyA9PSA0OgogICAgICAgICAgICAgICAgaWYgZy5sYXN0X3JlbGVhc2VfZGF5ID09IGcuZG93OgogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAiIiJSRUxFQVNFIiIiCgogICAgICAgICAgICAgICAgIiIiQ09MTEVDVCBCUkFOQ0hFUyIiIgogICAgICAgICAgICAgICAgeWllbGQgZy5lbnYudGltZW91dCgwLjI1KQoKICAgICAgICAgICAgICAgICIiIlJFTEVBU0U6IERFUExPWSBUTyBQUk9EUyIiIgogICAgICAgICAgICAgICAgaWYgc2VsZi5ib2FyZC5ib2FyZC50aWNrZXRzWydET05FJ106CiAgICAgICAgICAgICAgICAgICAgeWllbGQgZy5lbnYudGltZW91dCgwLjc1ICogMykKICAgICAgICAgICAgICAgICAgICB3aGlsZSBzZWxmLmJvYXJkLmJvYXJkLnRpY2tldHNbJ0RPTkUnXS5fX2xlbl9fKCkgPiAwOgogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tb3ZlX2FsbF90aWNrZXRzKCdET05FJywgJ1JFTEVBU0VEJykKICAgICAgICAgICAgICAgICAgICAgICAgZy5sYXN0X3JlbGVhc2VfZGF5ID0gZy5kb3cKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlNMSURFIFBST0QgUkVMRUFTRSIpCgogICAgICAgICAgICAgICAgIiIiUkVMRUFTRTogREVQTE9ZIFRPIFNURyIiIgogICAgICAgICAgICAgICAgaWYgc2VsZi5ib2FyZC5ib2FyZC50aWNrZXRzWydORVhUIFNUQUdJTkcnXToKICAgICAgICAgICAgICAgICAgICB5aWVsZCBnLmVudi50aW1lb3V0KDAuNzUpCiAgICAgICAgICAgICAgICAgICAgd2hpbGUgc2VsZi5ib2FyZC5ib2FyZC50aWNrZXRzWydORVhUIFNUQUdJTkcnXS5fX2xlbl9fKCkgPiAwOgogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tb3ZlX2FsbF90aWNrZXRzKCdORVhUIFNUQUdJTkcnLCAnUFJFLVJFTEVBU0UgUUEnKQogICAgICAgICAgICAgICAgICAgICAgICBnLmxhc3RfcmVsZWFzZV9kYXkgPSBnLmRvdwogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBwcmludCgiU0xJREUgU1RHIFJFTEVBU0UiKQogICAgICAgIHJldHVybgoKICAgIGRlZiB1YXQoc2VsZik6CiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgZm9yIHRpY2tldCBpbiBzZWxmLmJvYXJkLmJvYXJkLnRpY2tldHNbJ1BSRS1SRUxFQVNFIFFBJ106CiAgICAgICAgICAgICAgICAiIiJSRUxFQVNFOiBVQVQiIiIKICAgICAgICAgICAgICAgIGlmIHRpY2tldC5hc3NpZ25lZF90byBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgIHRpY2tldC5hc3NpZ25lZF90byA9IHNlbGYudXVpZAogICAgICAgICAgICAgICAgICAgIHlpZWxkIGcuZW52LnRpbWVvdXQoc2VsZi5nZXRfdGVzdGluZ190aW1lKHRpY2tldCkpCgogICAgICAgICAgICAgICAgICAgICIiIlJFTEVBU0U6IFVBVDogQ0FMQ1VMQVRFIEJVRyBQUk9CQUJJTElUWSIiIgogICAgICAgICAgICAgICAgICAgIGJ1ZyA9IHNlbGYuX2J1Zyh0aWNrZXQpCgogICAgICAgICAgICAgICAgICAgIGlmIGJ1Z1snaXNfZm91bmQnXToKCiAgICAgICAgICAgICAgICAgICAgICAgICIiIlJFTEVBU0U6IFVBVDogUkVHSVNURVIgQlVHIiIiCiAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGcuZW52LnRpbWVvdXQoMC41KQogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWdpc3Rlcl9idWcodGlja2V0LCBidWdbJ2NvbXBvbmVudCddKQogICAgICAgICAgICAgICAgICAgIGVsc2U6CgogICAgICAgICAgICAgICAgICAgICAgICAiIiJSRUxFQVNFOiBVQVQ6IFRFU1RJTkcgUEFTU0VEIiIiCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3VhdF9wYXNzKHRpY2tldCkKICAgICAgICAgICAgeWllbGQgZy5lbnYudGltZW91dCgwLjUpCiAgICAgICAgcmV0dXJuCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICAqIChzZWxmLmV4cGVyaWVuY2UgLyAxMCkKPHxmaW1fZW5kfD4="]
["c204a9856ad52d782f4cfee87d447985f17bd9fc-1","c204a9856ad52d782f4cfee87d447985f17bd9fc","PHxmaW1fcHJlZml4fD4KZnJvbSBwb3dlcmxpbmVfc2hlbGwudGhlbWVzLmRlZmF1bHQgaW1wb3J0IERlZmF1bHRDb2xvcgoKcGFsZXR0ZSA9IHsKICAgICdibGFjaycgICA6IDAsCiAgICAncmVkJyAgICAgOiAxLAogICAgJ2dyZWVuJyAgIDogMiwKICAgICd5ZWxsb3cnICA6IDMsCiAgICAnYmx1ZScgICAgOiA0LAogICAgJ3B1cnBsZScgIDogNSwKICAgICdjeWFuJyAgICA6IDYsCiAgICAnZ3JheScgICAgOiA3LAogICAgJ2JfYmxhY2snIDogOCwKICAgICd3aGl0ZScgICA6IDE1Cn0KCmNsYXNzIENvbG9yKERlZmF1bHRDb2xvcik6CiAgICAiIiJCYXNpYyB0aGVtZSB3aGljaCBvbmx5IHVzZXMgY29sb3JzIGluIDAtMTUgcmFuZ2UiIiIKCiAgICAjIHVzZXIgYW5kIGhvc3QKICAgIFVTRVJOQU1FX0ZHID0gcGFsZXR0ZVsnd2hpdGUnXQogICAgVVNFUk5BTUVfQkcgPSBwYWxldHRlWydibGFjayddCiAgICBVU0VSTkFNRV9ST09UX0ZHID0gcGFsZXR0ZVsnYmxhY2snXQogICAgVVNFUk5BTUVfUk9PVF9CRyA9IHBhbGV0dGVbJ3JlZCddCiAgICBIT1NUTkFNRV9GRyA9IHBhbGV0dGVbJ3doaXRlJ10KICAgIEhPU1ROQU1FX0JHID0gcGFsZXR0ZVsnYmxhY2snXQoKICAgICMgcGF0aAogICAgSE9NRV9TUEVDSUFMX0RJU1BMQVkgPSBUcnVlCiAgICBIT01FX0ZHID0gcGFsZXR0ZVsnYmxhY2snXQogICAgSE9NRV9CRyA9IHBhbGV0dGVbJ2JsdWUnXQogICAgUEFUSF9GRyA9IHBhbGV0dGVbJ3doaXRlJ10KICAgIFBBVEhfQkcgPSBwYWxldHRlWydiX2JsYWNrJ10KICAgIENXRF9GRyAgPSBwYWxldHRlWyd3aGl0ZSddCiAgICBDV0RfQkcgID0gcGFsZXR0ZVsnYl9ibGFjayddCiAgICBTRVBBUkFUT1JfRkcgPSBwYWxldHRlWyd3aGl0ZSddCgogICAgIyByZWFkIG9ubHkKICAgIFJFQURPTkxZX0ZHID0gcGFsZXR0ZVsnd2hpdGUnXQogICAgUkVBRE9OTFlfQkcgPSBwYWxldHRlWydyZWQnXQoKICAgICMgZ2l0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIF9fX19fX19fXwogICAgIyA+X21hc3Rlcl8+CiAgICAjIGJyYW5jaCBuYW1lCiAgICBSRVBPX0NMRUFOX0ZHID0gcGFsZXR0ZVsnYmxhY2snXQogICAgUkVQT19DTEVBTl9CRyA9IHBhbGV0dGVbJ2dyZWVuJ10KICAgIFJFUE9fRElSVFlfRkcgPSBwYWxldHRlWydibGFjayddCiAgICBSRVBPX0RJUlRZX0JHID0gcGFsZXR0ZVsnYmx1ZSddCiAgICAjID8gdW50cmFja2VkCiAgICBHSVRfVU5UUkFDS0VEX0ZHICA9IHBhbGV0dGVbJ3doaXRlJ10KICAgIEdJVF9VTlRSQUNLRURfQkcgID0gcGFsZXR0ZVsnYl9ibGFjayddCiAgICAjICogY29uZmxpY3RlZAogICAgR0lUX0NPTkZMSUNURURfRkcgPSBwYWxldHRlWydyZWQnXQogICAgR0lUX0NPTkZMSUNURURfQkcgPSBwYWxldHRlWydibGFjayddCiAgICBHSVRfQUhFQURfRkcgICAgICA9IHBhbGV0dGVbJ2N5YW4nXQogICAgR0lUX0FIRUFEX0JHICAgICAgPSBwYWxldHRlWydibGFjayddCiAgICBHSVRfQkVISU5EX0ZHICAgICA9IHBhbGV0dGVbJ3B1cnBsZSddCiAgICBHSVRfQkVISU5EX0JHICAgICA9IHBhbGV0dGVbJ2JsYWNrJ10KICAgICMgKGNoZWNrLW1hcmspIHN0YWdlZAogICAgR0lUX1NUQUdFRF9GRyAgICAgPSBwYWxldHRlWydncmVlbiddCiAgICBHSVRfU1RBR0VEX0JHICAgICA9IHBhbGV0dGVbJ2JsYWNrJ10KICAgICMgKHBlbikgbW9kaWZpZWQKICAgIEdJVF9OT1RTVEFHRURfRkcgID0gcGFsZXR0ZVsnYmx1ZSddCiAgICBHSVRfTk9UU1RBR0VEX0JHICA9IHBhbGV0dGVbJ2JsYWNrJ10KCiAgICBKT0JTX0ZHID0gcGFsZXR0ZVsnd2hpdGUnXQogICAgSk9CU19CRyA9IHBhbGV0dGVbJ2JsYWNrJ10KCiAgICBTU0hfRkcgPSBwYWxldHRlWydibGFjayddCiAgICBTU0hfQkcgPSBwYWxldHRlWydwdXJwbGUnXQoKICAgICMgX19fXwogICAgIyA+XyRfPiBzZWdtZW50CiAgICBDTURfUEFTU0VEX0ZHID0gcGFsZXR0ZVsnd2hpdGUnXQogICAgQ01EX1BBU1NFRF9CRyA9IHBhbGV0dGVbJ2JsYWNrJ10KICAgIENNRF9GQUlMRURfRkcgPSBwYWxldHRlWydyZWQnXSAKICAgIENNRF9GQUlMRURfQkcgPSBwYWxldHRlWydibGFjayddCgogICAgU1ZOX0NIQU5HRVNfQkcgPSBSRVBPX0RJUlRZX0JHCiAgICBTVk5fQ0hBTkdFU19GRyA9IFJFUE9fRElSVFlfRkcKCiAgICBWSVJUVUFMX0VOVl9CRyA9IHBhbGV0dGVbJ3llbGxvdyddCiAgICBWSVJUVUFMX0VOVl9GRyA9IHBhbGV0dGVbJ2JsYWNrJ10KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIEFXU19QUk9GSUxFX0ZHID0gcGFsZXR0ZVsnd2hpdGUnXQogICAgQVdTX1BST0ZJTEVfQkcgPSBwYWxldHRlWydiX2JsYWNrJ10KCiAgICBUSU1FX0ZHID0gcGFsZXR0ZVsnd2hpdGUnXQo8fGZpbV9lbmR8Pg=="]
["c204a9856ad52d782f4cfee87d447985f17bd9fc-2","c204a9856ad52d782f4cfee87d447985f17bd9fc","PHxmaW1fcHJlZml4fD4KZnJvbSBwb3dlcmxpbmVfc2hlbGwudGhlbWVzLmRlZmF1bHQgaW1wb3J0IERlZmF1bHRDb2xvcgoKcGFsZXR0ZSA9IHsKICAgICdibGFjaycgICA6IDAsCiAgICAncmVkJyAgICAgOiAxLAogICAgJ2dyZWVuJyAgIDogMiwKICAgICd5ZWxsb3cnICA6IDMsCiAgICAnYmx1ZScgICAgOiA0LAogICAgJ3B1cnBsZScgIDogNSwKICAgICdjeWFuJyAgICA6IDYsCiAgICAnZ3JheScgICAgOiA3LAogICAgJ2JfYmxhY2snIDogOCwKICAgICd3aGl0ZScgICA6IDE1Cn0KCmNsYXNzIENvbG9yKERlZmF1bHRDb2xvcik6CiAgICAiIiJCYXNpYyB0aGVtZSB3aGljaCBvbmx5IHVzZXMgY29sb3JzIGluIDAtMTUgcmFuZ2UiIiIKCiAgICAjIHVzZXIgYW5kIGhvc3QKICAgIFVTRVJOQU1FX0ZHID0gcGFsZXR0ZVsnd2hpdGUnXQogICAgVVNFUk5BTUVfQkcgPSBwYWxldHRlWydibGFjayddCiAgICBVU0VSTkFNRV9ST09UX0ZHID0gcGFsZXR0ZVsnYmxhY2snXQogICAgVVNFUk5BTUVfUk9PVF9CRyA9IHBhbGV0dGVbJ3JlZCddCiAgICBIT1NUTkFNRV9GRyA9IHBhbGV0dGVbJ3doaXRlJ10KICAgIEhPU1ROQU1FX0JHID0gcGFsZXR0ZVsnYmxhY2snXQoKICAgICMgcGF0aAogICAgSE9NRV9TUEVDSUFMX0RJU1BMQVkgPSBUcnVlCiAgICBIT01FX0ZHID0gcGFsZXR0ZVsnYmxhY2snXQogICAgSE9NRV9CRyA9IHBhbGV0dGVbJ2JsdWUnXQogICAgUEFUSF9GRyA9IHBhbGV0dGVbJ3doaXRlJ10KICAgIFBBVEhfQkcgPSBwYWxldHRlWydiX2JsYWNrJ10KICAgIENXRF9GRyAgPSBwYWxldHRlWyd3aGl0ZSddCiAgICBDV0RfQkcgID0gcGFsZXR0ZVsnYl9ibGFjayddCiAgICBTRVBBUkFUT1JfRkcgPSBwYWxldHRlWyd3aGl0ZSddCgogICAgIyByZWFkIG9ubHkKICAgIFJFQURPTkxZX0ZHID0gcGFsZXR0ZVsnd2hpdGUnXQogICAgUkVBRE9OTFlfQkcgPSBwYWxldHRlWydyZWQnXQoKICAgICMgZ2l0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIF9fX19fX19fXwogICAgIyA+X21hc3Rlcl8+CiAgICAjIGJyYW5jaCBuYW1lCiAgICBSRVBPX0NMRUFOX0ZHID0gcGFsZXR0ZVsnYmxhY2snXQogICAgUkVQT19DTEVBTl9CRyA9IHBhbGV0dGVbJ2dyZWVuJ10KICAgIFJFUE9fRElSVFlfRkcgPSBwYWxldHRlWydibGFjayddCiAgICBSRVBPX0RJUlRZX0JHID0gcGFsZXR0ZVsnYmx1ZSddCiAgICAjID8gdW50cmFja2VkCiAgICBHSVRfVU5UUkFDS0VEX0ZHICA9IHBhbGV0dGVbJ3doaXRlJ10KICAgIEdJVF9VTlRSQUNLRURfQkcgID0gcGFsZXR0ZVsnYl9ibGFjayddCiAgICAjICogY29uZmxpY3RlZAogICAgR0lUX0NPTkZMSUNURURfRkcgPSBwYWxldHRlWydyZWQnXQogICAgR0lUX0NPTkZMSUNURURfQkcgPSBwYWxldHRlWydibGFjayddCiAgICBHSVRfQUhFQURfRkcgICAgICA9IHBhbGV0dGVbJ2N5YW4nXQogICAgR0lUX0FIRUFEX0JHICAgICAgPSBwYWxldHRlWydibGFjayddCiAgICBHSVRfQkVISU5EX0ZHICAgICA9IHBhbGV0dGVbJ3B1cnBsZSddCiAgICBHSVRfQkVISU5EX0JHICAgICA9IHBhbGV0dGVbJ2JsYWNrJ10KICAgICMgKGNoZWNrLW1hcmspIHN0YWdlZAogICAgR0lUX1NUQUdFRF9GRyAgICAgPSBwYWxldHRlWydncmVlbiddCiAgICBHSVRfU1RBR0VEX0JHICAgICA9IHBhbGV0dGVbJ2JsYWNrJ10KICAgICMgKHBlbikgbW9kaWZpZWQKICAgIEdJVF9OT1RTVEFHRURfRkcgID0gcGFsZXR0ZVsnYmx1ZSddCiAgICBHSVRfTk9UU1RBR0VEX0JHICA9IHBhbGV0dGVbJ2JsYWNrJ10KCiAgICBKT0JTX0ZHID0gcGFsZXR0ZVsnd2hpdGUnXQogICAgSk9CU19CRyA9IHBhbGV0dGVbJ2JsYWNrJ10KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIFNTSF9GRyA9IHBhbGV0dGVbJ2JsYWNrJ10KICAgIFNTSF9CRyA9IHBhbGV0dGVbJ3B1cnBsZSddCgo8fGZpbV9lbmR8Pg=="]
["c204a9856ad52d782f4cfee87d447985f17bd9fc-3","c204a9856ad52d782f4cfee87d447985f17bd9fc","PHxmaW1fcHJlZml4fD4KZnJvbSBwb3dlcmxpbmVfc2hlbGwudGhlbWVzLmRlZmF1bHQgaW1wb3J0IERlZmF1bHRDb2xvcgoKcGFsZXR0ZSA9IHsKICAgICdibGFjaycgICA6IDAsCiAgICAncmVkJyAgICAgOiAxLAogICAgJ2dyZWVuJyAgIDogMiwKICAgICd5ZWxsb3cnICA6IDMsCiAgICAnYmx1ZScgICAgOiA0LAogICAgJ3B1cnBsZScgIDogNSwKICAgICdjeWFuJyAgICA6IDYsCiAgICAnZ3JheScgICAgOiA3LAogICAgJ2JfYmxhY2snIDogOCwKICAgICd3aGl0ZScgICA6IDE1Cn0KCmNsYXNzIENvbG9yKERlZmF1bHRDb2xvcik6CiAgICAiIiJCYXNpYyB0aGVtZSB3aGljaCBvbmx5IHVzZXMgY29sb3JzIGluIDAtMTUgcmFuZ2UiIiIKCiAgICAjIHVzZXIgYW5kIGhvc3QKICAgIFVTRVJOQU1FX0ZHID0gcGFsZXR0ZVsnd2hpdGUnXQogICAgVVNFUk5BTUVfQkcgPSBwYWxldHRlWydibGFjayddCiAgICBVU0VSTkFNRV9ST09UX0ZHID0gcGFsZXR0ZVsnYmxhY2snXQogICAgVVNFUk5BTUVfUk9PVF9CRyA9IHBhbGV0dGVbJ3JlZCddCiAgICBIT1NUTkFNRV9GRyA9IHBhbGV0dGVbJ3doaXRlJ10KICAgIEhPU1ROQU1FX0JHID0gcGFsZXR0ZVsnYmxhY2snXQoKICAgICMgcGF0aAogICAgSE9NRV9TUEVDSUFMX0RJU1BMQVkgPSBUcnVlCiAgICBIT01FX0ZHID0gcGFsZXR0ZVsnYmxhY2snXQogICAgSE9NRV9CRyA9IHBhbGV0dGVbJ2JsdWUnXQogICAgUEFUSF9GRyA9IHBhbGV0dGVbJ3doaXRlJ10KICAgIFBBVEhfQkcgPSBwYWxldHRlWydiX2JsYWNrJ10KICAgIENXRF9GRyAgPSBwYWxldHRlWyd3aGl0ZSddCiAgICBDV0RfQkcgID0gcGFsZXR0ZVsnYl9ibGFjayddCiAgICBTRVBBUkFUT1JfRkcgPSBwYWxldHRlWyd3aGl0ZSddCgogICAgIyByZWFkIG9ubHkKICAgIFJFQURPTkxZX0ZHID0gcGFsZXR0ZVsnd2hpdGUnXQogICAgUkVBRE9OTFlfQkcgPSBwYWxldHRlWydyZWQnXQoKICAgICMgZ2l0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIF9fX19fX19fXwogICAgIyA+X21hc3Rlcl8+CiAgICAjIGJyYW5jaCBuYW1lCiAgICBSRVBPX0NMRUFOX0ZHID0gcGFsZXR0ZVsnYmxhY2snXQogICAgUkVQT19DTEVBTl9CRyA9IHBhbGV0dGVbJ2dyZWVuJ10KICAgIFJFUE9fRElSVFlfRkcgPSBwYWxldHRlWydibGFjayddCiAgICBSRVBPX0RJUlRZX0JHID0gcGFsZXR0ZVsnYmx1ZSddCiAgICAjID8gdW50cmFja2VkCiAgICBHSVRfVU5UUkFDS0VEX0ZHICA9IHBhbGV0dGVbJ3doaXRlJ10KICAgIEdJVF9VTlRSQUNLRURfQkcgID0gcGFsZXR0ZVsnYl9ibGFjayddCiAgICAjICogY29uZmxpY3RlZAogICAgR0lUX0NPTkZMSUNURURfRkcgPSBwYWxldHRlWydyZWQnXQogICAgR0lUX0NPTkZMSUNURURfQkcgPSBwYWxldHRlWydibGFjayddCiAgICBHSVRfQUhFQURfRkcgICAgICA9IHBhbGV0dGVbJ2N5YW4nXQogICAgR0lUX0FIRUFEX0JHICAgICAgPSBwYWxldHRlWydibGFjayddCiAgICBHSVRfQkVISU5EX0ZHICAgICA9IHBhbGV0dGVbJ3B1cnBsZSddCiAgICBHSVRfQkVISU5EX0JHICAgICA9IHBhbGV0dGVbJ2JsYWNrJ10KICAgICMgKGNoZWNrLW1hcmspIHN0YWdlZAogICAgR0lUX1NUQUdFRF9GRyAgICAgPSBwYWxldHRlWydncmVlbiddCiAgICBHSVRfU1RBR0VEX0JHICAgICA9IHBhbGV0dGVbJ2JsYWNrJ10KICAgICMgKHBlbikgbW9kaWZpZWQKICAgIEdJVF9OT1RTVEFHRURfRkcgID0gcGFsZXR0ZVsnYmx1ZSddCiAgICBHSVRfTk9UU1RBR0VEX0JHICA9IHBhbGV0dGVbJ2JsYWNrJ10KCiAgICBKT0JTX0ZHID0gcGFsZXR0ZVsnd2hpdGUnXQogICAgSk9CU19CRyA9IHBhbGV0dGVbJ2JsYWNrJ10KCiAgICBTU0hfRkcgPSBwYWxldHRlWydibGFjayddCiAgICBTU0hfQkcgPSBwYWxldHRlWydwdXJwbGUnXQoKICAgICMgX19fXwogICAgIyA+XyRfPiBzZWdtZW50CiAgICBDTURfUEFTU0VEX0ZHID0gcGFsZXR0ZVsnd2hpdGUnXQogICAgQ01EX1BBU1NFRF9CRyA9IHBhbGV0dGVbJ2JsYWNrJ10KICAgIENNRF9GQUlMRURfRkcgPSBwYWxldHRlWydyZWQnXSAKICAgIENNRF9GQUlMRURfQkcgPSBwYWxldHRlWydibGFjayddCgogICAgU1ZOX0NIQU5HRVNfQkcgPSBSRVBPX0RJUlRZX0JHCiAgICBTVk5fQ0hBTkdFU19GRyA9IFJFUE9fRElSVFlfRkcKCiAgICBWSVJUVUFMX0VOVl9CRyA9IHBhbGV0dGVbJ3llbGxvdyddCiAgICBWSVJUVUFMX0VOVl9GRyA9IHBhbGV0dGVbJ2JsYWNrJ10KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIEFXU19QUk9GSUxFX0ZHID0gcGFsZXR0ZVsnd2hpdGUnXQogICAgQVdTX1BST0ZJTEVfQkcgPSBwYWxldHRlWydiX2JsYWNrJ10KCiAgICBUSU1FX0ZHID0gcGFsZXR0ZVsnd2hpdGUnXQo8fGZpbV9lbmR8Pg=="]
["c204a9856ad52d782f4cfee87d447985f17bd9fc-4","c204a9856ad52d782f4cfee87d447985f17bd9fc","PHxmaW1fcHJlZml4fD4KZnJvbSBwb3dlcmxpbmVfc2hlbGwudGhlbWVzLmRlZmF1bHQgaW1wb3J0IERlZmF1bHRDb2xvcgoKcGFsZXR0ZSA9IHsKICAgICdibGFjaycgICA6IDAsCiAgICAncmVkJyAgICAgOiAxLAogICAgJ2dyZWVuJyAgIDogMiwKICAgICd5ZWxsb3cnICA6IDMsCiAgICAnYmx1ZScgICAgOiA0LAogICAgJ3B1cnBsZScgIDogNSwKICAgICdjeWFuJyAgICA6IDYsCiAgICAnZ3JheScgICAgOiA3LAogICAgJ2JfYmxhY2snIDogOCwKICAgICd3aGl0ZScgICA6IDE1Cn0KCmNsYXNzIENvbG9yKERlZmF1bHRDb2xvcik6CiAgICAiIiJCYXNpYyB0aGVtZSB3aGljaCBvbmx5IHVzZXMgY29sb3JzIGluIDAtMTUgcmFuZ2UiIiIKCiAgICAjIHVzZXIgYW5kIGhvc3QKICAgIFVTRVJOQU1FX0ZHID0gcGFsZXR0ZVsnd2hpdGUnXQogICAgVVNFUk5BTUVfQkcgPSBwYWxldHRlWydibGFjayddCiAgICBVU0VSTkFNRV9ST09UX0ZHID0gcGFsZXR0ZVsnYmxhY2snXQogICAgVVNFUk5BTUVfUk9PVF9CRyA9IHBhbGV0dGVbJ3JlZCddCiAgICBIT1NUTkFNRV9GRyA9IHBhbGV0dGVbJ3doaXRlJ10KICAgIEhPU1ROQU1FX0JHID0gcGFsZXR0ZVsnYmxhY2snXQoKICAgICMgcGF0aAogICAgSE9NRV9TUEVDSUFMX0RJU1BMQVkgPSBUcnVlCiAgICBIT01FX0ZHID0gcGFsZXR0ZVsnYmxhY2snXQogICAgSE9NRV9CRyA9IHBhbGV0dGVbJ2JsdWUnXQogICAgUEFUSF9GRyA9IHBhbGV0dGVbJ3doaXRlJ10KICAgIFBBVEhfQkcgPSBwYWxldHRlWydiX2JsYWNrJ10KICAgIENXRF9GRyAgPSBwYWxldHRlWyd3aGl0ZSddCiAgICBDV0RfQkcgID0gcGFsZXR0ZVsnYl9ibGFjayddCiAgICBTRVBBUkFUT1JfRkcgPSBwYWxldHRlWyd3aGl0ZSddCgogICAgIyByZWFkIG9ubHkKICAgIFJFQURPTkxZX0ZHID0gcGFsZXR0ZVsnd2hpdGUnXQogICAgUkVBRE9OTFlfQkcgPSBwYWxldHRlWydyZWQnXQoKICAgICMgZ2l0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIF9fX19fX19fXwogICAgIyA+X21hc3Rlcl8+CiAgICAjIGJyYW5jaCBuYW1lCiAgICBSRVBPX0NMRUFOX0ZHID0gcGFsZXR0ZVsnYmxhY2snXQogICAgUkVQT19DTEVBTl9CRyA9IHBhbGV0dGVbJ2dyZWVuJ10KICAgIFJFUE9fRElSVFlfRkcgPSBwYWxldHRlWydibGFjayddCiAgICBSRVBPX0RJUlRZX0JHID0gcGFsZXR0ZVsnYmx1ZSddCiAgICAjID8gdW50cmFja2VkCiAgICBHSVRfVU5UUkFDS0VEX0ZHICA9IHBhbGV0dGVbJ3doaXRlJ10KICAgIEdJVF9VTlRSQUNLRURfQkcgID0gcGFsZXR0ZVsnYl9ibGFjayddCiAgICAjICogY29uZmxpY3RlZAogICAgR0lUX0NPTkZMSUNURURfRkcgPSBwYWxldHRlWydyZWQnXQogICAgR0lUX0NPTkZMSUNURURfQkcgPSBwYWxldHRlWydibGFjayddCiAgICBHSVRfQUhFQURfRkcgICAgICA9IHBhbGV0dGVbJ2N5YW4nXQogICAgR0lUX0FIRUFEX0JHICAgICAgPSBwYWxldHRlWydibGFjayddCiAgICBHSVRfQkVISU5EX0ZHICAgICA9IHBhbGV0dGVbJ3B1cnBsZSddCiAgICBHSVRfQkVISU5EX0JHICAgICA9IHBhbGV0dGVbJ2JsYWNrJ10KICAgICMgKGNoZWNrLW1hcmspIHN0YWdlZAogICAgR0lUX1NUQUdFRF9GRyAgICAgPSBwYWxldHRlWydncmVlbiddCiAgICBHSVRfU1RBR0VEX0JHICAgICA9IHBhbGV0dGVbJ2JsYWNrJ10KICAgICMgKHBlbikgbW9kaWZpZWQKICAgIEdJVF9OT1RTVEFHRURfRkcgID0gcGFsZXR0ZVsnYmx1ZSddCiAgICBHSVRfTk9UU1RBR0VEX0JHICA9IHBhbGV0dGVbJ2JsYWNrJ10KCiAgICBKT0JTX0ZHID0gcGFsZXR0ZVsnd2hpdGUnXQogICAgSk9CU19CRyA9IHBhbGV0dGVbJ2JsYWNrJ10KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIFNTSF9GRyA9IHBhbGV0dGVbJ2JsYWNrJ10KICAgIFNTSF9CRyA9IHBhbGV0dGVbJ3B1cnBsZSddCgo8fGZpbV9lbmR8Pg=="]
["c204a9856ad52d782f4cfee87d447985f17bd9fc-5","c204a9856ad52d782f4cfee87d447985f17bd9fc","PHxmaW1fcHJlZml4fD4KZnJvbSBwb3dlcmxpbmVfc2hlbGwudGhlbWVzLmRlZmF1bHQgaW1wb3J0IERlZmF1bHRDb2xvcgoKcGFsZXR0ZSA9IHsKICAgICdibGFjaycgICA6IDAsCiAgICAncmVkJyAgICAgOiAxLAogICAgJ2dyZWVuJyAgIDogMiwKICAgICd5ZWxsb3cnICA6IDMsCiAgICAnYmx1ZScgICAgOiA0LAogICAgJ3B1cnBsZScgIDogNSwKICAgICdjeWFuJyAgICA6IDYsCiAgICAnZ3JheScgICAgOiA3LAogICAgJ2JfYmxhY2snIDogOCwKICAgICd3aGl0ZScgICA6IDE1Cn0KCmNsYXNzIENvbG9yKERlZmF1bHRDb2xvcik6CiAgICAiIiJCYXNpYyB0aGVtZSB3aGljaCBvbmx5IHVzZXMgY29sb3JzIGluIDAtMTUgcmFuZ2UiIiIKCiAgICAjIHVzZXIgYW5kIGhvc3QKICAgIFVTRVJOQU1FX0ZHID0gcGFsZXR0ZVsnd2hpdGUnXQogICAgVVNFUk5BTUVfQkcgPSBwYWxldHRlWydibGFjayddCiAgICBVU0VSTkFNRV9ST09UX0ZHID0gcGFsZXR0ZVsnYmxhY2snXQogICAgVVNFUk5BTUVfUk9PVF9CRyA9IHBhbGV0dGVbJ3JlZCddCiAgICBIT1NUTkFNRV9GRyA9IHBhbGV0dGVbJ3doaXRlJ10KICAgIEhPU1ROQU1FX0JHID0gcGFsZXR0ZVsnYmxhY2snXQoKICAgICMgcGF0aAogICAgSE9NRV9TUEVDSUFMX0RJU1BMQVkgPSBUcnVlCiAgICBIT01FX0ZHID0gcGFsZXR0ZVsnYmxhY2snXQogICAgSE9NRV9CRyA9IHBhbGV0dGVbJ2JsdWUnXQogICAgUEFUSF9GRyA9IHBhbGV0dGVbJ3doaXRlJ10KICAgIFBBVEhfQkcgPSBwYWxldHRlWydiX2JsYWNrJ10KICAgIENXRF9GRyAgPSBwYWxldHRlWyd3aGl0ZSddCiAgICBDV0RfQkcgID0gcGFsZXR0ZVsnYl9ibGFjayddCiAgICBTRVBBUkFUT1JfRkcgPSBwYWxldHRlWyd3aGl0ZSddCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICAjIHJlYWQgb25seQogICAgUkVBRE9OTFlfRkcgPSBwYWxldHRlWyd3aGl0ZSddCiAgICBSRUFET05MWV9CRyA9IHBhbGV0dGVbJ3JlZCddCjx8ZmltX2VuZHw+"]
["f23262688148593e34ae0eb0a3cda910fa2b6db4-1","f23262688148593e34ae0eb0a3cda910fa2b6db4","PHxmaW1fcHJlZml4fD4KI0V4dGVybmFsIGxpYnMKaW1wb3J0IGpzb24KaW1wb3J0IGJvdG8zCmZyb20gYm90b2NvcmUuZXhjZXB0aW9ucyBpbXBvcnQgQ2xpZW50RXJyb3IKCiNFc3RhYmxpc2ggb3VyIGJvdG8gcmVzb3VyY2VzCmxvZ0NsaWVudCA9IGJvdG8zLmNsaWVudCgnbG9ncycpCmxhbWJkYUNsaWVudCA9IGJvdG8zLmNsaWVudCgnbGFtYmRhJykKaWFtID0gYm90bzMucmVzb3VyY2UoJ2lhbScpCgpkZWYgaW52b2tlRnVuY3Rpb24obmFtZSk6CiAgICAnJycKICAgIEludm9rZXMgdGhlIG5ldyBmdW5jdGlvbiwgQVdTIHdpbGwgZ2VuZXJhdGUgYSBsb2cgZ3JvdXAgYW5kIHN0cmVhbQogICAgV2UgZG9uJ3Qvc2hvdWxkbid0IGNhcmUgYWJvdXQgdGhlIG91dHB1dCBvciBpZiB0aGUgbGFtYmRhIHdvcmtzLCBqdXN0IGZvciB0aGUgbGFtYmRhIHRvIGdlbmVyYXRlIGEgbG9nIGdyb3VwCgogICAgYXJnczoKICAgICAgICBuYW1lOiBuYW1lIG9mIHRoZSBsYW1iZGEsIHJldHJpZXZlZCBmcm9tIGNvbmZpZyBmaWxlCiAgICAnJycKICAgIHByaW50KCdDcmVhdGluZyBsb2cgZ3JvdXAnKQogICAgdHJ5OgogICAgICAgIGludm9rZSA9IGxhbWJkYUNsaWVudC5pbnZva2UoRnVuY3Rpb25OYW1lPW5hbWUpCiAgICBleGNlcHQgQ2xpZW50RXJyb3IgYXMgZXJyb3I6CiAgICAgICAgcHJpbnQoZXJyb3IpCgpkZWYgZ2V0TG9nR3JvdXBOYW1lKG5hbWUpOgogICAgJycnCiAgICBHZXRzIHRoZSB1bmlxdWUgYW1hem9uIHJlc291cmNlIG5hbWUgKEFSTikgZm9yIHRoZSBsb2cgZ3JvdXAgd2UgYXJlIGNyZWF0aW5nIHdpdGggJ2ludm9rZUZ1bmN0aW9uJwogICAgQWNjb21wbGlzaGVzIHRoaXMgYnkgc2VhcmNoaW5nIGV4aXN0aW5nIGxvZyBncm91cHMgZm9yIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbgoKICAgIE5vdGU6IEFsbCBMYW1iZGEgZ2VuZXJhdGVkIGxvZyBncm91cHMgYXJlIHByZWZpeGVkIHdpdGggJy9hd3MvbGFtYmRhJywgYXMgc2VlbiBiZWxvdwogICAgCiAgICBhcmdzOgogICAgICAgIG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBsYW1iZGEgZnVuY3Rpb24sIHJldHJpZWQgZnJvbSBjb25maWcgZmlsZQogICAgJycnCiAgICBwcmludCgnR2V0dGluZyBsYW1iZGEgbG9nIGdyb3VwIG5hbWUnKQogICAgdHJ5OgogICAgICAgIGxvZ0dyb3VwTmFtZSA9IGxvZ0NsaWVudC5kZXNjcmliZV9sb2dfZ3JvdXBzKAogICAgICAgICAgICAgICAgbG9nR3JvdXBOYW1lUHJlZml4PScvYXdzL2xhbWJkYS8lcycgJSBuYW1lLAogICAgICAgICAgICApCgogICAgICAgIGR1bXAgPSBqc29uLmR1bXBzKGxvZ0dyb3VwTmFtZSwgaW5kZW50PTQpCiAgICAgICAgbG9hZCA9IGpzb24ubG9hZHMoZHVtcCkKCiAgICAgICAgaWYgbG9nR3JvdXBOYW1lWydSZXNwb25zZU1ldGFkYXRhJ11bJ0hUVFBTdGF0dXNDb2RlJ10gPT0gMjAwOgogICAgICAgICAgICBncm91cE5hbWUgPSBsb2FkWydsb2dHcm91cHMnXVswXVsnbG9nR3JvdXBOYW1lJ10KICAgICAgICAgICAgZ3JvdXBBcm4gPSBsb2FkWydsb2dHcm91cHMnXVswXVsnYXJuJ10KCiAgICAgICAgICAgIHByaW50KCdHcm91cCBuYW1lOiAlcycgJSBncm91cE5hbWUpCiAgICAgICAgICAgIHJldHVybiBncm91cE5hbWUsIGdyb3VwQXJuCiAgICBleGNlcHQgQ2xpZW50RXJyb3IgYXMgZXJyb3I6CiAgICAgICAgcHJpbnQoZXJyb3IpCgpkZWYgZ2V0RGVzdGluYXRpb25Bcm4oZGVzdExhbWJkYSwgZGVzdEFsaWFzKToKICAgICcnJwogICAgUmV0cmlldmVzIHRoZSB1bmlxdWUgYW1hem9uIHJlc291cmNlIG5hbWUgKEFSTikgZm9yIHRoZSBkZXN0aW5hdGlvbiBsYW1iZGEKICAgIFRoaXMgdW5pcXVlIGlkIGlzIHJlcXVpcmVkIHRvIGFjY29tcGxpc2ggdGhlIGZ1bmN0aW9uIGJlbG93IChwdXRTdWJGaWx0ZXIpCiAgICBXZSBuZWVkIHRoZSBhbGlhcyBiZWNhdXNlIGVhY2ggYWxpYXMgaGFzIGl0J3Mgb3duIGFybiAoaWYgeW91J3JlIHVzaW5nIG9uZSkKCiAgICBhcmdzOgogICAgICAgIGRlc3RMYW1iZGE6IG5hbWUgb2YgdGhlIHByb2Nlc3NpbmcgbGFtYmRhCiAgICAgICAgZGVzdEFsaWFzOiBuYW1lIG9mIHRoZSBhbGlhcyBvbiB0aGUgcHJvY2Vzc2luZyBsYW1iZGEKICAgICcnJwogICAgcHJpbnQoJ0dldHRpbmcgZGVzdGluYXRpb24gYXJuIGZvciBsb2dnaW5nIGxhbWJkYScpCiAgICB0cnk6CiAgICAgICAgZGVzdGluYXRpb25Bcm4gPSBsYW1iZGFDbGllbnQuZ2V0X2Z1bmN0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25OYW1lPWRlc3RMYW1iZGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdWFsaWZpZXI9ZGVzdEFsaWFzCiAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgZHVtcCA9IGpzb24uZHVtcHMoZGVzdGluYXRpb25Bcm4sIGluZGVudD00KQogICAgICAgIGxvYWQgPSBqc29uLmxvYWRzKGR1bXApCgogICAgICAgIGFybiA9IGxvYWRbJ0NvbmZpZ3VyYXRpb24nXVsnRnVuY3Rpb25Bcm4nXQoKICAgICAgICByZXR1cm4gYXJuCiAgICBleGNlcHQgQ2xpZW50RXJyb3IgYXMgZXJyb3I6CiAgICAgICAgcHJpbnQoZXJyb3IpCgpkZWYgcHV0U3ViZmlsdGVyKGdyb3VwTmFtZSwgYXJuLCByb2xlLCBuYW1lKToKICAgICcnJwogICAgQWRkcyBzdWJzY3JpcHRpb24gZmlsdGVyIHRvIG5ldyBsYW1iZGEgdG8gcGlwZSBsb2dzIHRvIGxvZ2dpbmcgbGFtYmRhCgogICAgVGFrZXMgaW5mbyBmcm9tICdnZXRMb2dHcm91cE5hbWUnLCAnZ2V0RGVzdGluYXRpb25Bcm4nLCB0aGVuIHRoZSByb2xlIGFuZCBuZXcgbGFtYmRhIG5hbWUgZnJvbSB0aGUgY29uZmlnIGZpbGUKCiAgICBhcmdzOgogICAgICAgIGdyb3VwTmFtZTogbmFtZSByZXRyaWV2ZWQgYnkgJ2dldExvZ0dyb3VwTmFtZScKICAgICAgICBhcm46IHRoZSBhbWF6b24gcmVzb3VyY2UgbmFtZSAoQVJOKSBmb3IgdGhlIGRlc3RpbmF0aW9uIGxhbWJkYQogICAgICAgIHJvbGU6IG5vdCBzdXJlIHdoeSB0aGlzIGlzIHN0aWxsIGhlcmUsIGkgcHJvYmFibHkgZm9yZ290IHRvIHJlbW92ZSBpdCwgbGlrZWx5IHJlbW92ZWFibGU/CiAgICAgICAgbmFtZTogdGhlIG5hbWUgb2YgdGhlIG5ldyBsYW1iZGEsIGZyb20gdGhlIGNvbmZpZyBmaWxlLCB1c2VkIHRvIGNyZWF0ZSBhIHVuaXF1ZSBmaWx0ZXJOYW1lIGZvciB0aGUgc3ViIGZpbHRlcgogICAgJycnCiAgICBwcmludCgnQWRkaW5nIHN1YnNjcmlwdGlvbiBmaWx0ZXIgdG8gbG9nZ2luZyBsYW1iZGEnKQogICAgdHJ5OgogICAgICAgIHB1dEZpbHRlciA9IGxvZ0NsaWVudC5wdXRfc3Vic2NyaXB0aW9uX2ZpbHRlcigKICAgICAgICAgICAgICAgICAgICAgICAgbG9nR3JvdXBOYW1lPWdyb3VwTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTmFtZT0nTGFtYmRhTG9nZ2luZ18lcycgJSBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXR0ZXJuPScnLAogICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkFybj1hcm4sCiAgICAgICAgICAgICAgICAgICAgKQogICAgZXhjZXB0IENsaWVudEVycm9yIGFzIGVycm9yOgogICAgICAgIHByaW50KGVycm9yKQoKZGVmIHB1dEludm9rZVBlcm0oZGVzdExhbWJkYSwgZGVzdEFsaWFzLCBuYW1lLCByZWdpb24sIGxvZ0Fybik6CiAgICAnJycKICAgIEFkZHMgdGhlIGFiaWxpdHkgZm9yIHRoZSBuZXcgbGFtYmRhIGxvZ3MgdG8gaW52b2tlIHRoZSBsb2dnaW5nIGxhbWJkYQogICAgVGhpcyBjYW4gYmUgc2VlbiBpbiB0aGUgdHJpZ2dlcnMgb2YgdGhlIGRlc3RpbmF0aW9uIGxhbWJkYQo8fGZpbV9ob2xlfD4KICAgICAgICBuYW1lOiBuYW1lIG9mIHRoZSBuZXcgbGFtYmRhLCByZXRyaWV2ZWQgZnJvbSBjb25maWcsIHVzZWQgdG8gY3JlYXRlIGEgc3RhdGVtZW50IGlkCiAgICAgICAgcmVnaW9uOiByZWdpb24gdGhpcyBpcyBoYXBwZW5pbmcgaW4sIHVzZWQgZm9yIHRoZSBwcmluY2lwYWwsIHNlZW4gYmVsb3cKICAgICAgICBsb2dBcm46IGFybiBvZiB0aGUgbmV3IGxhbWJkYSBsb2cgZ3JvdXAsIHJldHJpZWQgZnJvbSAnZ2V0TG9nR3JvdXBOYW1lJwogICAgJycnCiAgICBwcmludCgnQWRkaW5nIGludm9rZSBwZXJtaXNzaW9uIHRvIGxvZ2dpbmcgbGFtYmRhJykKICAgIHRyeToKICAgICAgICBhZGRQZXJtaXNzaW9uID0gbGFtYmRhQ2xpZW50LmFkZF9wZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25OYW1lPWRlc3RMYW1iZGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb249J2xhbWJkYTpJbnZva2VGdW5jdGlvbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZW1lbnRJZD0nJXMtbG9nLWludm9rZS0lcycgJSAobmFtZSwgZGVzdEFsaWFzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW5jaXBhbD0nbG9ncy4lcy5hbWF6b25hd3MuY29tJyAlIHJlZ2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1YWxpZmllcj1kZXN0QWxpYXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VBcm49bG9nQXJuCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgIGV4Y2VwdCBDbGllbnRFcnJvciBhcyBlcnJvcjoKICAgICAgICBwcmludChlcnJvcikKCmRlZiBnZXRSb2xlQXJuKHJvbGUpOgogICAgJycnCiAgICBHZXQgdW5pcXVlIGFtYXpvbiByZXNvdXJjZSBuYW1lIChBUk4pIG9mIHRoZSByb2xlLCB0aGlzIGlzIHVzZWQgaW4gJ3B1dEludm9rZVBlcm0nIGZ1bmN0aW9uCgogICAgYXJnczoKICAgICAgICByb2xlOiBuYW1lIG9mIHRoZSByb2xlIHlvdSdyZSB1c2luZywgcmV0cmlldmVkIGZyb20gY29uZmlnCiAgICAnJycKICAgIHByaW50KCdHYXRoZXJpbmcgcm9sZSBhcm4nKQogICAgdHJ5OgogICAgICAgIHJvbGUgPSBpYW0uUm9sZShyb2xlKQoKICAgICAgICByZXR1cm4gcm9sZS5hcm4KICAgIGV4Y2VwdCBDbGllbnRFcnJvciBhcyBlcnJvcjoKICAgICAgICBwcmludChlcnJvcikKCiMjIyMjIyMjIyMgTWFpbiBFbnRyeXBvaW50ICMjIyMjIyMjIyMjIwpkZWYgY2xvdWR3YXRjaFN1YnNjcmlwdGlvbihuZXdMYW1iZGFOYW1lLCBkZXN0TGFtYmRhTmFtZSwgZGVzdExhbWJkYUFsaWFzLCByZWdpb24sIHJvbGUpOgogICAgJycnCiAgICBUbyBzaW1wbGlmeSB1c2FnZSBvZiB0aGlzIG1vZHVsZSBUaGlzIGlzIHRoZSBtYWluIGVudHJ5cG9pbnQgdGhhdCBjYWxscyBhbGwgYWJvdmUgbW9kdWxlcwoKICAgIEkndmUgZGViYXRlZCBwdXR0aW5nIHRoZSBhYm92ZSBpbiBhIGNsYXNzIGJ1dCBpdCBzZWVtcyBsaWtlIG92ZXJraWxsIHRvIGFjY29tcGxpc2ggd2hhdCBpcyBhbHJlYWR5IHdvcmtpbmcKCiAgICBhcmdzOgogICAgICAgIG5ld19sYW1iZGFfbmFtZTogbmFtZSB0aGUgbGFtYmRhIHdlJ3JlIGNyZWF0aW5nLCByZXRyaWV2ZWQgZnJvbSBjb25maWcgZmlsZQogICAgICAgIGRlc3RfbGFtYmRhX25hbWU6IG5hbWUgb2YgbGFtYmRhIHByb2Nlc3Npbmcgb3VyIGxvZ3MsIHJldHJpZXZlZCBmcm9tIGNvbmZpZyBmaWxlCiAgICAgICAgZGVzdF9sYW1iZGFfYWxpYXM6IG5hbWUgb2YgdGhlIEFMSUFTIG9mIHRoZSBsYW1iZGEgcHJvY2Vzc2luZyBvdXIgbG9ncywgcmV0cmlldmVkIGZyb20gY29uZmlnIGZpbGUKICAgICAgICByZWdpb246IHJlZ2lvbiB0aGlzIHdpbGwgb2NjdXIgaW4sIHJldHJpZWQgZnJvbSBjb25maWcgZmlsZQogICAgICAgIHJvbGU6IGEgdmFsaWQgcm9sZSB0aGF0IGNhbiBleGVjdXRlIHRoZSBuZWNlc3NhcnkgYWN0aW9ucyBpbnZvbHZlZCB3aXRoIHRoaXMgbW9kdWxlIChpZTogaW52b2tlLCBwdXQgcGVybWlzc2lvbnMpCiAgICAnJycKICAgIGludm9jYXRpb24gPSBpbnZva2VGdW5jdGlvbihuZXdMYW1iZGFOYW1lKQogICAgZ3JvdXBOYW1lLCBncm91cEFybiA9IGdldExvZ0dyb3VwTmFtZShuZXdMYW1iZGFOYW1lKQogICAgYXJuID0gZ2V0RGVzdGluYXRpb25Bcm4oZGVzdExhbWJkYU5hbWUsIGRlc3RMYW1iZGFBbGlhcykKICAgIHJvbGVBcm4gPSBnZXRSb2xlQXJuKHJvbGUpCiAgICBwZXJtaXNzaW9uID0gcHV0SW52b2tlUGVybShkZXN0TGFtYmRhTmFtZSwgZGVzdExhbWJkYUFsaWFzLCBuZXdMYW1iZGFOYW1lLCByZWdpb24sIGdyb3VwQXJuKQogICAgc3Vic2NyaXB0aW9uID0gcHV0U3ViZmlsdGVyKGdyb3VwTmFtZSwgYXJuLCByb2xlQXJuLCBuZXdMYW1iZGFOYW1lKQo8fGZpbV9zdWZmaXh8PgoKICAgIGFyZ3M6CiAgICAgICAgZGVzdExhbWJkYTogbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gbGFtYmRhLCByZXRyaWV2ZWQgZnJvbSBjb25maWcKICAgICAgICBkZXN0QWxpYXM6IGFsaWFzIG9uIHRoZSBkZXN0aW5hdGlvbiBsYW1iZGEsIHJldHJpZXZlZCBmcm9tIGNvbmZpZwo8fGZpbV9lbmR8Pg=="]
["f23262688148593e34ae0eb0a3cda910fa2b6db4-2","f23262688148593e34ae0eb0a3cda910fa2b6db4","PHxmaW1fcHJlZml4fD4KI0V4dGVybmFsIGxpYnMKaW1wb3J0IGpzb24KaW1wb3J0IGJvdG8zCmZyb20gYm90b2NvcmUuZXhjZXB0aW9ucyBpbXBvcnQgQ2xpZW50RXJyb3IKCiNFc3RhYmxpc2ggb3VyIGJvdG8gcmVzb3VyY2VzCmxvZ0NsaWVudCA9IGJvdG8zLmNsaWVudCgnbG9ncycpCmxhbWJkYUNsaWVudCA9IGJvdG8zLmNsaWVudCgnbGFtYmRhJykKaWFtID0gYm90bzMucmVzb3VyY2UoJ2lhbScpCgpkZWYgaW52b2tlRnVuY3Rpb24obmFtZSk6CiAgICAnJycKICAgIEludm9rZXMgdGhlIG5ldyBmdW5jdGlvbiwgQVdTIHdpbGwgZ2VuZXJhdGUgYSBsb2cgZ3JvdXAgYW5kIHN0cmVhbQogICAgV2UgZG9uJ3Qvc2hvdWxkbid0IGNhcmUgYWJvdXQgdGhlIG91dHB1dCBvciBpZiB0aGUgbGFtYmRhIHdvcmtzLCBqdXN0IGZvciB0aGUgbGFtYmRhIHRvIGdlbmVyYXRlIGEgbG9nIGdyb3VwCgogICAgYXJnczoKICAgICAgICBuYW1lOiBuYW1lIG9mIHRoZSBsYW1iZGEsIHJldHJpZXZlZCBmcm9tIGNvbmZpZyBmaWxlCiAgICAnJycKICAgIHByaW50KCdDcmVhdGluZyBsb2cgZ3JvdXAnKQogICAgdHJ5OgogICAgICAgIGludm9rZSA9IGxhbWJkYUNsaWVudC5pbnZva2UoRnVuY3Rpb25OYW1lPW5hbWUpCiAgICBleGNlcHQgQ2xpZW50RXJyb3IgYXMgZXJyb3I6CiAgICAgICAgcHJpbnQoZXJyb3IpCgpkZWYgZ2V0TG9nR3JvdXBOYW1lKG5hbWUpOgogICAgJycnCiAgICBHZXRzIHRoZSB1bmlxdWUgYW1hem9uIHJlc291cmNlIG5hbWUgKEFSTikgZm9yIHRoZSBsb2cgZ3JvdXAgd2UgYXJlIGNyZWF0aW5nIHdpdGggJ2ludm9rZUZ1bmN0aW9uJwogICAgQWNjb21wbGlzaGVzIHRoaXMgYnkgc2VhcmNoaW5nIGV4aXN0aW5nIGxvZyBncm91cHMgZm9yIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbgoKICAgIE5vdGU6IEFsbCBMYW1iZGEgZ2VuZXJhdGVkIGxvZyBncm91cHMgYXJlIHByZWZpeGVkIHdpdGggJy9hd3MvbGFtYmRhJywgYXMgc2VlbiBiZWxvdwogICAgCiAgICBhcmdzOgogICAgICAgIG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBsYW1iZGEgZnVuY3Rpb24sIHJldHJpZWQgZnJvbSBjb25maWcgZmlsZQogICAgJycnCiAgICBwcmludCgnR2V0dGluZyBsYW1iZGEgbG9nIGdyb3VwIG5hbWUnKQogICAgdHJ5OgogICAgICAgIGxvZ0dyb3VwTmFtZSA9IGxvZ0NsaWVudC5kZXNjcmliZV9sb2dfZ3JvdXBzKAogICAgICAgICAgICAgICAgbG9nR3JvdXBOYW1lUHJlZml4PScvYXdzL2xhbWJkYS8lcycgJSBuYW1lLAogICAgICAgICAgICApCgogICAgICAgIGR1bXAgPSBqc29uLmR1bXBzKGxvZ0dyb3VwTmFtZSwgaW5kZW50PTQpCiAgICAgICAgbG9hZCA9IGpzb24ubG9hZHMoZHVtcCkKCiAgICAgICAgaWYgbG9nR3JvdXBOYW1lWydSZXNwb25zZU1ldGFkYXRhJ11bJ0hUVFBTdGF0dXNDb2RlJ10gPT0gMjAwOgogICAgICAgICAgICBncm91cE5hbWUgPSBsb2FkWydsb2dHcm91cHMnXVswXVsnbG9nR3JvdXBOYW1lJ10KICAgICAgICAgICAgZ3JvdXBBcm4gPSBsb2FkWydsb2dHcm91cHMnXVswXVsnYXJuJ10KCiAgICAgICAgICAgIHByaW50KCdHcm91cCBuYW1lOiAlcycgJSBncm91cE5hbWUpCiAgICAgICAgICAgIHJldHVybiBncm91cE5hbWUsIGdyb3VwQXJuCiAgICBleGNlcHQgQ2xpZW50RXJyb3IgYXMgZXJyb3I6CiAgICAgICAgcHJpbnQoZXJyb3IpCgpkZWYgZ2V0RGVzdGluYXRpb25Bcm4oZGVzdExhbWJkYSwgZGVzdEFsaWFzKToKICAgICcnJwogICAgUmV0cmlldmVzIHRoZSB1bmlxdWUgYW1hem9uIHJlc291cmNlIG5hbWUgKEFSTikgZm9yIHRoZSBkZXN0aW5hdGlvbiBsYW1iZGEKICAgIFRoaXMgdW5pcXVlIGlkIGlzIHJlcXVpcmVkIHRvIGFjY29tcGxpc2ggdGhlIGZ1bmN0aW9uIGJlbG93IChwdXRTdWJGaWx0ZXIpCiAgICBXZSBuZWVkIHRoZSBhbGlhcyBiZWNhdXNlIGVhY2ggYWxpYXMgaGFzIGl0J3Mgb3duIGFybiAoaWYgeW91J3JlIHVzaW5nIG9uZSkKCiAgICBhcmdzOgogICAgICAgIGRlc3RMYW1iZGE6IG5hbWUgb2YgdGhlIHByb2Nlc3NpbmcgbGFtYmRhCiAgICAgICAgZGVzdEFsaWFzOiBuYW1lIG9mIHRoZSBhbGlhcyBvbiB0aGUgcHJvY2Vzc2luZyBsYW1iZGEKICAgICcnJwogICAgcHJpbnQoJ0dldHRpbmcgZGVzdGluYXRpb24gYXJuIGZvciBsb2dnaW5nIGxhbWJkYScpCiAgICB0cnk6CiAgICAgICAgZGVzdGluYXRpb25Bcm4gPSBsYW1iZGFDbGllbnQuZ2V0X2Z1bmN0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25OYW1lPWRlc3RMYW1iZGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdWFsaWZpZXI9ZGVzdEFsaWFzCiAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgZHVtcCA9IGpzb24uZHVtcHMoZGVzdGluYXRpb25Bcm4sIGluZGVudD00KQogICAgICAgIGxvYWQgPSBqc29uLmxvYWRzKGR1bXApCgogICAgICAgIGFybiA9IGxvYWRbJ0NvbmZpZ3VyYXRpb24nXVsnRnVuY3Rpb25Bcm4nXQoKICAgICAgICByZXR1cm4gYXJuCiAgICBleGNlcHQgQ2xpZW50RXJyb3IgYXMgZXJyb3I6CiAgICAgICAgcHJpbnQoZXJyb3IpCgpkZWYgcHV0U3ViZmlsdGVyKGdyb3VwTmFtZSwgYXJuLCByb2xlLCBuYW1lKToKICAgICcnJwogICAgQWRkcyBzdWJzY3JpcHRpb24gZmlsdGVyIHRvIG5ldyBsYW1iZGEgdG8gcGlwZSBsb2dzIHRvIGxvZ2dpbmcgbGFtYmRhCgogICAgVGFrZXMgaW5mbyBmcm9tICdnZXRMb2dHcm91cE5hbWUnLCAnZ2V0RGVzdGluYXRpb25Bcm4nLCB0aGVuIHRoZSByb2xlIGFuZCBuZXcgbGFtYmRhIG5hbWUgZnJvbSB0aGUgY29uZmlnIGZpbGUKCiAgICBhcmdzOgogICAgICAgIGdyb3VwTmFtZTogbmFtZSByZXRyaWV2ZWQgYnkgJ2dldExvZ0dyb3VwTmFtZScKICAgICAgICBhcm46IHRoZSBhbWF6b24gcmVzb3VyY2UgbmFtZSAoQVJOKSBmb3IgdGhlIGRlc3RpbmF0aW9uIGxhbWJkYQogICAgICAgIHJvbGU6IG5vdCBzdXJlIHdoeSB0aGlzIGlzIHN0aWxsIGhlcmUsIGkgcHJvYmFibHkgZm9yZ290IHRvIHJlbW92ZSBpdCwgbGlrZWx5IHJlbW92ZWFibGU/CiAgICAgICAgbmFtZTogdGhlIG5hbWUgb2YgdGhlIG5ldyBsYW1iZGEsIGZyb20gdGhlIGNvbmZpZyBmaWxlLCB1c2VkIHRvIGNyZWF0ZSBhIHVuaXF1ZSBmaWx0ZXJOYW1lIGZvciB0aGUgc3ViIGZpbHRlcgogICAgJycnCiAgICBwcmludCgnQWRkaW5nIHN1YnNjcmlwdGlvbiBmaWx0ZXIgdG8gbG9nZ2luZyBsYW1iZGEnKQogICAgdHJ5OgogICAgICAgIHB1dEZpbHRlciA9IGxvZ0NsaWVudC5wdXRfc3Vic2NyaXB0aW9uX2ZpbHRlcigKICAgICAgICAgICAgICAgICAgICAgICAgbG9nR3JvdXBOYW1lPWdyb3VwTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTmFtZT0nTGFtYmRhTG9nZ2luZ18lcycgJSBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXR0ZXJuPScnLAogICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkFybj1hcm4sCiAgICAgICAgICAgICAgICAgICAgKQogICAgZXhjZXB0IENsaWVudEVycm9yIGFzIGVycm9yOgogICAgICAgIHByaW50KGVycm9yKQoKZGVmIHB1dEludm9rZVBlcm0oZGVzdExhbWJkYSwgZGVzdEFsaWFzLCBuYW1lLCByZWdpb24sIGxvZ0Fybik6CiAgICAnJycKICAgIEFkZHMgdGhlIGFiaWxpdHkgZm9yIHRoZSBuZXcgbGFtYmRhIGxvZ3MgdG8gaW52b2tlIHRoZSBsb2dnaW5nIGxhbWJkYQogICAgVGhpcyBjYW4gYmUgc2VlbiBpbiB0aGUgdHJpZ2dlcnMgb2YgdGhlIGRlc3RpbmF0aW9uIGxhbWJkYQoKICAgIGFyZ3M6CiAgICAgICAgZGVzdExhbWJkYTogbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gbGFtYmRhLCByZXRyaWV2ZWQgZnJvbSBjb25maWcKPHxmaW1faG9sZXw+CiAgICAnJycKICAgIHByaW50KCdBZGRpbmcgaW52b2tlIHBlcm1pc3Npb24gdG8gbG9nZ2luZyBsYW1iZGEnKQogICAgdHJ5OgogICAgICAgIGFkZFBlcm1pc3Npb24gPSBsYW1iZGFDbGllbnQuYWRkX3Blcm1pc3Npb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbk5hbWU9ZGVzdExhbWJkYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbj0nbGFtYmRhOkludm9rZUZ1bmN0aW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlbWVudElkPSclcy1sb2ctaW52b2tlLSVzJyAlIChuYW1lLCBkZXN0QWxpYXMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpbmNpcGFsPSdsb2dzLiVzLmFtYXpvbmF3cy5jb20nICUgcmVnaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUXVhbGlmaWVyPWRlc3RBbGlhcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUFybj1sb2dBcm4KICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgZXhjZXB0IENsaWVudEVycm9yIGFzIGVycm9yOgogICAgICAgIHByaW50KGVycm9yKQoKZGVmIGdldFJvbGVBcm4ocm9sZSk6CiAgICAnJycKICAgIEdldCB1bmlxdWUgYW1hem9uIHJlc291cmNlIG5hbWUgKEFSTikgb2YgdGhlIHJvbGUsIHRoaXMgaXMgdXNlZCBpbiAncHV0SW52b2tlUGVybScgZnVuY3Rpb24KCiAgICBhcmdzOgogICAgICAgIHJvbGU6IG5hbWUgb2YgdGhlIHJvbGUgeW91J3JlIHVzaW5nLCByZXRyaWV2ZWQgZnJvbSBjb25maWcKICAgICcnJwogICAgcHJpbnQoJ0dhdGhlcmluZyByb2xlIGFybicpCiAgICB0cnk6CiAgICAgICAgcm9sZSA9IGlhbS5Sb2xlKHJvbGUpCgogICAgICAgIHJldHVybiByb2xlLmFybgogICAgZXhjZXB0IENsaWVudEVycm9yIGFzIGVycm9yOgogICAgICAgIHByaW50KGVycm9yKQoKIyMjIyMjIyMjIyBNYWluIEVudHJ5cG9pbnQgIyMjIyMjIyMjIyMjCmRlZiBjbG91ZHdhdGNoU3Vic2NyaXB0aW9uKG5ld0xhbWJkYU5hbWUsIGRlc3RMYW1iZGFOYW1lLCBkZXN0TGFtYmRhQWxpYXMsIHJlZ2lvbiwgcm9sZSk6CiAgICAnJycKICAgIFRvIHNpbXBsaWZ5IHVzYWdlIG9mIHRoaXMgbW9kdWxlIFRoaXMgaXMgdGhlIG1haW4gZW50cnlwb2ludCB0aGF0IGNhbGxzIGFsbCBhYm92ZSBtb2R1bGVzCgogICAgSSd2ZSBkZWJhdGVkIHB1dHRpbmcgdGhlIGFib3ZlIGluIGEgY2xhc3MgYnV0IGl0IHNlZW1zIGxpa2Ugb3ZlcmtpbGwgdG8gYWNjb21wbGlzaCB3aGF0IGlzIGFscmVhZHkgd29ya2luZwoKICAgIGFyZ3M6CiAgICAgICAgbmV3X2xhbWJkYV9uYW1lOiBuYW1lIHRoZSBsYW1iZGEgd2UncmUgY3JlYXRpbmcsIHJldHJpZXZlZCBmcm9tIGNvbmZpZyBmaWxlCiAgICAgICAgZGVzdF9sYW1iZGFfbmFtZTogbmFtZSBvZiBsYW1iZGEgcHJvY2Vzc2luZyBvdXIgbG9ncywgcmV0cmlldmVkIGZyb20gY29uZmlnIGZpbGUKICAgICAgICBkZXN0X2xhbWJkYV9hbGlhczogbmFtZSBvZiB0aGUgQUxJQVMgb2YgdGhlIGxhbWJkYSBwcm9jZXNzaW5nIG91ciBsb2dzLCByZXRyaWV2ZWQgZnJvbSBjb25maWcgZmlsZQogICAgICAgIHJlZ2lvbjogcmVnaW9uIHRoaXMgd2lsbCBvY2N1ciBpbiwgcmV0cmllZCBmcm9tIGNvbmZpZyBmaWxlCiAgICAgICAgcm9sZTogYSB2YWxpZCByb2xlIHRoYXQgY2FuIGV4ZWN1dGUgdGhlIG5lY2Vzc2FyeSBhY3Rpb25zIGludm9sdmVkIHdpdGggdGhpcyBtb2R1bGUgKGllOiBpbnZva2UsIHB1dCBwZXJtaXNzaW9ucykKICAgICcnJwogICAgaW52b2NhdGlvbiA9IGludm9rZUZ1bmN0aW9uKG5ld0xhbWJkYU5hbWUpCiAgICBncm91cE5hbWUsIGdyb3VwQXJuID0gZ2V0TG9nR3JvdXBOYW1lKG5ld0xhbWJkYU5hbWUpCiAgICBhcm4gPSBnZXREZXN0aW5hdGlvbkFybihkZXN0TGFtYmRhTmFtZSwgZGVzdExhbWJkYUFsaWFzKQogICAgcm9sZUFybiA9IGdldFJvbGVBcm4ocm9sZSkKICAgIHBlcm1pc3Npb24gPSBwdXRJbnZva2VQZXJtKGRlc3RMYW1iZGFOYW1lLCBkZXN0TGFtYmRhQWxpYXMsIG5ld0xhbWJkYU5hbWUsIHJlZ2lvbiwgZ3JvdXBBcm4pCiAgICBzdWJzY3JpcHRpb24gPSBwdXRTdWJmaWx0ZXIoZ3JvdXBOYW1lLCBhcm4sIHJvbGVBcm4sIG5ld0xhbWJkYU5hbWUpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZGVzdEFsaWFzOiBhbGlhcyBvbiB0aGUgZGVzdGluYXRpb24gbGFtYmRhLCByZXRyaWV2ZWQgZnJvbSBjb25maWcKICAgICAgICBuYW1lOiBuYW1lIG9mIHRoZSBuZXcgbGFtYmRhLCByZXRyaWV2ZWQgZnJvbSBjb25maWcsIHVzZWQgdG8gY3JlYXRlIGEgc3RhdGVtZW50IGlkCiAgICAgICAgcmVnaW9uOiByZWdpb24gdGhpcyBpcyBoYXBwZW5pbmcgaW4sIHVzZWQgZm9yIHRoZSBwcmluY2lwYWwsIHNlZW4gYmVsb3cKICAgICAgICBsb2dBcm46IGFybiBvZiB0aGUgbmV3IGxhbWJkYSBsb2cgZ3JvdXAsIHJldHJpZWQgZnJvbSAnZ2V0TG9nR3JvdXBOYW1lJwo8fGZpbV9lbmR8Pg=="]
["f23262688148593e34ae0eb0a3cda910fa2b6db4-3","f23262688148593e34ae0eb0a3cda910fa2b6db4","PHxmaW1fcHJlZml4fD4KI0V4dGVybmFsIGxpYnMKaW1wb3J0IGpzb24KaW1wb3J0IGJvdG8zCmZyb20gYm90b2NvcmUuZXhjZXB0aW9ucyBpbXBvcnQgQ2xpZW50RXJyb3IKCiNFc3RhYmxpc2ggb3VyIGJvdG8gcmVzb3VyY2VzCmxvZ0NsaWVudCA9IGJvdG8zLmNsaWVudCgnbG9ncycpCmxhbWJkYUNsaWVudCA9IGJvdG8zLmNsaWVudCgnbGFtYmRhJykKaWFtID0gYm90bzMucmVzb3VyY2UoJ2lhbScpCgpkZWYgaW52b2tlRnVuY3Rpb24obmFtZSk6CiAgICAnJycKICAgIEludm9rZXMgdGhlIG5ldyBmdW5jdGlvbiwgQVdTIHdpbGwgZ2VuZXJhdGUgYSBsb2cgZ3JvdXAgYW5kIHN0cmVhbQogICAgV2UgZG9uJ3Qvc2hvdWxkbid0IGNhcmUgYWJvdXQgdGhlIG91dHB1dCBvciBpZiB0aGUgbGFtYmRhIHdvcmtzLCBqdXN0IGZvciB0aGUgbGFtYmRhIHRvIGdlbmVyYXRlIGEgbG9nIGdyb3VwCgogICAgYXJnczoKICAgICAgICBuYW1lOiBuYW1lIG9mIHRoZSBsYW1iZGEsIHJldHJpZXZlZCBmcm9tIGNvbmZpZyBmaWxlCiAgICAnJycKICAgIHByaW50KCdDcmVhdGluZyBsb2cgZ3JvdXAnKQogICAgdHJ5OgogICAgICAgIGludm9rZSA9IGxhbWJkYUNsaWVudC5pbnZva2UoRnVuY3Rpb25OYW1lPW5hbWUpCiAgICBleGNlcHQgQ2xpZW50RXJyb3IgYXMgZXJyb3I6CiAgICAgICAgcHJpbnQoZXJyb3IpCgpkZWYgZ2V0TG9nR3JvdXBOYW1lKG5hbWUpOgogICAgJycnCiAgICBHZXRzIHRoZSB1bmlxdWUgYW1hem9uIHJlc291cmNlIG5hbWUgKEFSTikgZm9yIHRoZSBsb2cgZ3JvdXAgd2UgYXJlIGNyZWF0aW5nIHdpdGggJ2ludm9rZUZ1bmN0aW9uJwogICAgQWNjb21wbGlzaGVzIHRoaXMgYnkgc2VhcmNoaW5nIGV4aXN0aW5nIGxvZyBncm91cHMgZm9yIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbgoKICAgIE5vdGU6IEFsbCBMYW1iZGEgZ2VuZXJhdGVkIGxvZyBncm91cHMgYXJlIHByZWZpeGVkIHdpdGggJy9hd3MvbGFtYmRhJywgYXMgc2VlbiBiZWxvdwogICAgCiAgICBhcmdzOgogICAgICAgIG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBsYW1iZGEgZnVuY3Rpb24sIHJldHJpZWQgZnJvbSBjb25maWcgZmlsZQogICAgJycnCiAgICBwcmludCgnR2V0dGluZyBsYW1iZGEgbG9nIGdyb3VwIG5hbWUnKQogICAgdHJ5OgogICAgICAgIGxvZ0dyb3VwTmFtZSA9IGxvZ0NsaWVudC5kZXNjcmliZV9sb2dfZ3JvdXBzKAogICAgICAgICAgICAgICAgbG9nR3JvdXBOYW1lUHJlZml4PScvYXdzL2xhbWJkYS8lcycgJSBuYW1lLAogICAgICAgICAgICApCgogICAgICAgIGR1bXAgPSBqc29uLmR1bXBzKGxvZ0dyb3VwTmFtZSwgaW5kZW50PTQpCiAgICAgICAgbG9hZCA9IGpzb24ubG9hZHMoZHVtcCkKCiAgICAgICAgaWYgbG9nR3JvdXBOYW1lWydSZXNwb25zZU1ldGFkYXRhJ11bJ0hUVFBTdGF0dXNDb2RlJ10gPT0gMjAwOgogICAgICAgICAgICBncm91cE5hbWUgPSBsb2FkWydsb2dHcm91cHMnXVswXVsnbG9nR3JvdXBOYW1lJ10KICAgICAgICAgICAgZ3JvdXBBcm4gPSBsb2FkWydsb2dHcm91cHMnXVswXVsnYXJuJ10KCiAgICAgICAgICAgIHByaW50KCdHcm91cCBuYW1lOiAlcycgJSBncm91cE5hbWUpCiAgICAgICAgICAgIHJldHVybiBncm91cE5hbWUsIGdyb3VwQXJuCiAgICBleGNlcHQgQ2xpZW50RXJyb3IgYXMgZXJyb3I6CiAgICAgICAgcHJpbnQoZXJyb3IpCgpkZWYgZ2V0RGVzdGluYXRpb25Bcm4oZGVzdExhbWJkYSwgZGVzdEFsaWFzKToKICAgICcnJwogICAgUmV0cmlldmVzIHRoZSB1bmlxdWUgYW1hem9uIHJlc291cmNlIG5hbWUgKEFSTikgZm9yIHRoZSBkZXN0aW5hdGlvbiBsYW1iZGEKICAgIFRoaXMgdW5pcXVlIGlkIGlzIHJlcXVpcmVkIHRvIGFjY29tcGxpc2ggdGhlIGZ1bmN0aW9uIGJlbG93IChwdXRTdWJGaWx0ZXIpCiAgICBXZSBuZWVkIHRoZSBhbGlhcyBiZWNhdXNlIGVhY2ggYWxpYXMgaGFzIGl0J3Mgb3duIGFybiAoaWYgeW91J3JlIHVzaW5nIG9uZSkKCiAgICBhcmdzOgogICAgICAgIGRlc3RMYW1iZGE6IG5hbWUgb2YgdGhlIHByb2Nlc3NpbmcgbGFtYmRhCiAgICAgICAgZGVzdEFsaWFzOiBuYW1lIG9mIHRoZSBhbGlhcyBvbiB0aGUgcHJvY2Vzc2luZyBsYW1iZGEKICAgICcnJwogICAgcHJpbnQoJ0dldHRpbmcgZGVzdGluYXRpb24gYXJuIGZvciBsb2dnaW5nIGxhbWJkYScpCiAgICB0cnk6CiAgICAgICAgZGVzdGluYXRpb25Bcm4gPSBsYW1iZGFDbGllbnQuZ2V0X2Z1bmN0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25OYW1lPWRlc3RMYW1iZGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdWFsaWZpZXI9ZGVzdEFsaWFzCiAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgZHVtcCA9IGpzb24uZHVtcHMoZGVzdGluYXRpb25Bcm4sIGluZGVudD00KQogICAgICAgIGxvYWQgPSBqc29uLmxvYWRzKGR1bXApCgogICAgICAgIGFybiA9IGxvYWRbJ0NvbmZpZ3VyYXRpb24nXVsnRnVuY3Rpb25Bcm4nXQoKICAgICAgICByZXR1cm4gYXJuCiAgICBleGNlcHQgQ2xpZW50RXJyb3IgYXMgZXJyb3I6CiAgICAgICAgcHJpbnQoZXJyb3IpCgpkZWYgcHV0U3ViZmlsdGVyKGdyb3VwTmFtZSwgYXJuLCByb2xlLCBuYW1lKToKICAgICcnJwogICAgQWRkcyBzdWJzY3JpcHRpb24gZmlsdGVyIHRvIG5ldyBsYW1iZGEgdG8gcGlwZSBsb2dzIHRvIGxvZ2dpbmcgbGFtYmRhCgogICAgVGFrZXMgaW5mbyBmcm9tICdnZXRMb2dHcm91cE5hbWUnLCAnZ2V0RGVzdGluYXRpb25Bcm4nLCB0aGVuIHRoZSByb2xlIGFuZCBuZXcgbGFtYmRhIG5hbWUgZnJvbSB0aGUgY29uZmlnIGZpbGUKCiAgICBhcmdzOgogICAgICAgIGdyb3VwTmFtZTogbmFtZSByZXRyaWV2ZWQgYnkgJ2dldExvZ0dyb3VwTmFtZScKICAgICAgICBhcm46IHRoZSBhbWF6b24gcmVzb3VyY2UgbmFtZSAoQVJOKSBmb3IgdGhlIGRlc3RpbmF0aW9uIGxhbWJkYQogICAgICAgIHJvbGU6IG5vdCBzdXJlIHdoeSB0aGlzIGlzIHN0aWxsIGhlcmUsIGkgcHJvYmFibHkgZm9yZ290IHRvIHJlbW92ZSBpdCwgbGlrZWx5IHJlbW92ZWFibGU/CiAgICAgICAgbmFtZTogdGhlIG5hbWUgb2YgdGhlIG5ldyBsYW1iZGEsIGZyb20gdGhlIGNvbmZpZyBmaWxlLCB1c2VkIHRvIGNyZWF0ZSBhIHVuaXF1ZSBmaWx0ZXJOYW1lIGZvciB0aGUgc3ViIGZpbHRlcgogICAgJycnCiAgICBwcmludCgnQWRkaW5nIHN1YnNjcmlwdGlvbiBmaWx0ZXIgdG8gbG9nZ2luZyBsYW1iZGEnKQogICAgdHJ5OgogICAgICAgIHB1dEZpbHRlciA9IGxvZ0NsaWVudC5wdXRfc3Vic2NyaXB0aW9uX2ZpbHRlcigKICAgICAgICAgICAgICAgICAgICAgICAgbG9nR3JvdXBOYW1lPWdyb3VwTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTmFtZT0nTGFtYmRhTG9nZ2luZ18lcycgJSBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXR0ZXJuPScnLAogICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkFybj1hcm4sCiAgICAgICAgICAgICAgICAgICAgKQogICAgZXhjZXB0IENsaWVudEVycm9yIGFzIGVycm9yOgogICAgICAgIHByaW50KGVycm9yKQoKZGVmIHB1dEludm9rZVBlcm0oZGVzdExhbWJkYSwgZGVzdEFsaWFzLCBuYW1lLCByZWdpb24sIGxvZ0Fybik6CiAgICAnJycKICAgIEFkZHMgdGhlIGFiaWxpdHkgZm9yIHRoZSBuZXcgbGFtYmRhIGxvZ3MgdG8gaW52b2tlIHRoZSBsb2dnaW5nIGxhbWJkYQogICAgVGhpcyBjYW4gYmUgc2VlbiBpbiB0aGUgdHJpZ2dlcnMgb2YgdGhlIGRlc3RpbmF0aW9uIGxhbWJkYQoKICAgIGFyZ3M6CiAgICAgICAgZGVzdExhbWJkYTogbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gbGFtYmRhLCByZXRyaWV2ZWQgZnJvbSBjb25maWcKICAgICAgICBkZXN0QWxpYXM6IGFsaWFzIG9uIHRoZSBkZXN0aW5hdGlvbiBsYW1iZGEsIHJldHJpZXZlZCBmcm9tIGNvbmZpZwogICAgICAgIG5hbWU6IG5hbWUgb2YgdGhlIG5ldyBsYW1iZGEsIHJldHJpZXZlZCBmcm9tIGNvbmZpZywgdXNlZCB0byBjcmVhdGUgYSBzdGF0ZW1lbnQgaWQKICAgICAgICByZWdpb246IHJlZ2lvbiB0aGlzIGlzIGhhcHBlbmluZyBpbiwgdXNlZCBmb3IgdGhlIHByaW5jaXBhbCwgc2VlbiBiZWxvdwogICAgICAgIGxvZ0FybjogYXJuIG9mIHRoZSBuZXcgbGFtYmRhIGxvZyBncm91cCwgcmV0cmllZCBmcm9tICdnZXRMb2dHcm91cE5hbWUnCiAgICAnJycKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcHJpbnQoJ0FkZGluZyBpbnZva2UgcGVybWlzc2lvbiB0byBsb2dnaW5nIGxhbWJkYScpCiAgICB0cnk6CiAgICAgICAgYWRkUGVybWlzc2lvbiA9IGxhbWJkYUNsaWVudC5hZGRfcGVybWlzc2lvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uTmFtZT1kZXN0TGFtYmRhLAo8fGZpbV9lbmR8Pg=="]
["f23262688148593e34ae0eb0a3cda910fa2b6db4-4","f23262688148593e34ae0eb0a3cda910fa2b6db4","PHxmaW1fcHJlZml4fD4KI0V4dGVybmFsIGxpYnMKaW1wb3J0IGpzb24KaW1wb3J0IGJvdG8zCmZyb20gYm90b2NvcmUuZXhjZXB0aW9ucyBpbXBvcnQgQ2xpZW50RXJyb3IKCiNFc3RhYmxpc2ggb3VyIGJvdG8gcmVzb3VyY2VzCmxvZ0NsaWVudCA9IGJvdG8zLmNsaWVudCgnbG9ncycpCmxhbWJkYUNsaWVudCA9IGJvdG8zLmNsaWVudCgnbGFtYmRhJykKaWFtID0gYm90bzMucmVzb3VyY2UoJ2lhbScpCgpkZWYgaW52b2tlRnVuY3Rpb24obmFtZSk6CiAgICAnJycKICAgIEludm9rZXMgdGhlIG5ldyBmdW5jdGlvbiwgQVdTIHdpbGwgZ2VuZXJhdGUgYSBsb2cgZ3JvdXAgYW5kIHN0cmVhbQogICAgV2UgZG9uJ3Qvc2hvdWxkbid0IGNhcmUgYWJvdXQgdGhlIG91dHB1dCBvciBpZiB0aGUgbGFtYmRhIHdvcmtzLCBqdXN0IGZvciB0aGUgbGFtYmRhIHRvIGdlbmVyYXRlIGEgbG9nIGdyb3VwCgogICAgYXJnczoKICAgICAgICBuYW1lOiBuYW1lIG9mIHRoZSBsYW1iZGEsIHJldHJpZXZlZCBmcm9tIGNvbmZpZyBmaWxlCiAgICAnJycKICAgIHByaW50KCdDcmVhdGluZyBsb2cgZ3JvdXAnKQogICAgdHJ5OgogICAgICAgIGludm9rZSA9IGxhbWJkYUNsaWVudC5pbnZva2UoRnVuY3Rpb25OYW1lPW5hbWUpCiAgICBleGNlcHQgQ2xpZW50RXJyb3IgYXMgZXJyb3I6CiAgICAgICAgcHJpbnQoZXJyb3IpCgpkZWYgZ2V0TG9nR3JvdXBOYW1lKG5hbWUpOgogICAgJycnCiAgICBHZXRzIHRoZSB1bmlxdWUgYW1hem9uIHJlc291cmNlIG5hbWUgKEFSTikgZm9yIHRoZSBsb2cgZ3JvdXAgd2UgYXJlIGNyZWF0aW5nIHdpdGggJ2ludm9rZUZ1bmN0aW9uJwogICAgQWNjb21wbGlzaGVzIHRoaXMgYnkgc2VhcmNoaW5nIGV4aXN0aW5nIGxvZyBncm91cHMgZm9yIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbgoKICAgIE5vdGU6IEFsbCBMYW1iZGEgZ2VuZXJhdGVkIGxvZyBncm91cHMgYXJlIHByZWZpeGVkIHdpdGggJy9hd3MvbGFtYmRhJywgYXMgc2VlbiBiZWxvdwogICAgCiAgICBhcmdzOgogICAgICAgIG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBsYW1iZGEgZnVuY3Rpb24sIHJldHJpZWQgZnJvbSBjb25maWcgZmlsZQogICAgJycnCiAgICBwcmludCgnR2V0dGluZyBsYW1iZGEgbG9nIGdyb3VwIG5hbWUnKQogICAgdHJ5OgogICAgICAgIGxvZ0dyb3VwTmFtZSA9IGxvZ0NsaWVudC5kZXNjcmliZV9sb2dfZ3JvdXBzKAogICAgICAgICAgICAgICAgbG9nR3JvdXBOYW1lUHJlZml4PScvYXdzL2xhbWJkYS8lcycgJSBuYW1lLAogICAgICAgICAgICApCgogICAgICAgIGR1bXAgPSBqc29uLmR1bXBzKGxvZ0dyb3VwTmFtZSwgaW5kZW50PTQpCiAgICAgICAgbG9hZCA9IGpzb24ubG9hZHMoZHVtcCkKCiAgICAgICAgaWYgbG9nR3JvdXBOYW1lWydSZXNwb25zZU1ldGFkYXRhJ11bJ0hUVFBTdGF0dXNDb2RlJ10gPT0gMjAwOgogICAgICAgICAgICBncm91cE5hbWUgPSBsb2FkWydsb2dHcm91cHMnXVswXVsnbG9nR3JvdXBOYW1lJ10KICAgICAgICAgICAgZ3JvdXBBcm4gPSBsb2FkWydsb2dHcm91cHMnXVswXVsnYXJuJ10KCiAgICAgICAgICAgIHByaW50KCdHcm91cCBuYW1lOiAlcycgJSBncm91cE5hbWUpCiAgICAgICAgICAgIHJldHVybiBncm91cE5hbWUsIGdyb3VwQXJuCiAgICBleGNlcHQgQ2xpZW50RXJyb3IgYXMgZXJyb3I6CiAgICAgICAgcHJpbnQoZXJyb3IpCgpkZWYgZ2V0RGVzdGluYXRpb25Bcm4oZGVzdExhbWJkYSwgZGVzdEFsaWFzKToKICAgICcnJwogICAgUmV0cmlldmVzIHRoZSB1bmlxdWUgYW1hem9uIHJlc291cmNlIG5hbWUgKEFSTikgZm9yIHRoZSBkZXN0aW5hdGlvbiBsYW1iZGEKICAgIFRoaXMgdW5pcXVlIGlkIGlzIHJlcXVpcmVkIHRvIGFjY29tcGxpc2ggdGhlIGZ1bmN0aW9uIGJlbG93IChwdXRTdWJGaWx0ZXIpCiAgICBXZSBuZWVkIHRoZSBhbGlhcyBiZWNhdXNlIGVhY2ggYWxpYXMgaGFzIGl0J3Mgb3duIGFybiAoaWYgeW91J3JlIHVzaW5nIG9uZSkKCiAgICBhcmdzOgogICAgICAgIGRlc3RMYW1iZGE6IG5hbWUgb2YgdGhlIHByb2Nlc3NpbmcgbGFtYmRhCiAgICAgICAgZGVzdEFsaWFzOiBuYW1lIG9mIHRoZSBhbGlhcyBvbiB0aGUgcHJvY2Vzc2luZyBsYW1iZGEKICAgICcnJwogICAgcHJpbnQoJ0dldHRpbmcgZGVzdGluYXRpb24gYXJuIGZvciBsb2dnaW5nIGxhbWJkYScpCiAgICB0cnk6CiAgICAgICAgZGVzdGluYXRpb25Bcm4gPSBsYW1iZGFDbGllbnQuZ2V0X2Z1bmN0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25OYW1lPWRlc3RMYW1iZGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdWFsaWZpZXI9ZGVzdEFsaWFzCiAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgZHVtcCA9IGpzb24uZHVtcHMoZGVzdGluYXRpb25Bcm4sIGluZGVudD00KQogICAgICAgIGxvYWQgPSBqc29uLmxvYWRzKGR1bXApCgogICAgICAgIGFybiA9IGxvYWRbJ0NvbmZpZ3VyYXRpb24nXVsnRnVuY3Rpb25Bcm4nXQoKICAgICAgICByZXR1cm4gYXJuCiAgICBleGNlcHQgQ2xpZW50RXJyb3IgYXMgZXJyb3I6CiAgICAgICAgcHJpbnQoZXJyb3IpCgpkZWYgcHV0U3ViZmlsdGVyKGdyb3VwTmFtZSwgYXJuLCByb2xlLCBuYW1lKToKICAgICcnJwogICAgQWRkcyBzdWJzY3JpcHRpb24gZmlsdGVyIHRvIG5ldyBsYW1iZGEgdG8gcGlwZSBsb2dzIHRvIGxvZ2dpbmcgbGFtYmRhCgogICAgVGFrZXMgaW5mbyBmcm9tICdnZXRMb2dHcm91cE5hbWUnLCAnZ2V0RGVzdGluYXRpb25Bcm4nLCB0aGVuIHRoZSByb2xlIGFuZCBuZXcgbGFtYmRhIG5hbWUgZnJvbSB0aGUgY29uZmlnIGZpbGUKCiAgICBhcmdzOgogICAgICAgIGdyb3VwTmFtZTogbmFtZSByZXRyaWV2ZWQgYnkgJ2dldExvZ0dyb3VwTmFtZScKICAgICAgICBhcm46IHRoZSBhbWF6b24gcmVzb3VyY2UgbmFtZSAoQVJOKSBmb3IgdGhlIGRlc3RpbmF0aW9uIGxhbWJkYQogICAgICAgIHJvbGU6IG5vdCBzdXJlIHdoeSB0aGlzIGlzIHN0aWxsIGhlcmUsIGkgcHJvYmFibHkgZm9yZ290IHRvIHJlbW92ZSBpdCwgbGlrZWx5IHJlbW92ZWFibGU/CiAgICAgICAgbmFtZTogdGhlIG5hbWUgb2YgdGhlIG5ldyBsYW1iZGEsIGZyb20gdGhlIGNvbmZpZyBmaWxlLCB1c2VkIHRvIGNyZWF0ZSBhIHVuaXF1ZSBmaWx0ZXJOYW1lIGZvciB0aGUgc3ViIGZpbHRlcgogICAgJycnCiAgICBwcmludCgnQWRkaW5nIHN1YnNjcmlwdGlvbiBmaWx0ZXIgdG8gbG9nZ2luZyBsYW1iZGEnKQogICAgdHJ5OgogICAgICAgIHB1dEZpbHRlciA9IGxvZ0NsaWVudC5wdXRfc3Vic2NyaXB0aW9uX2ZpbHRlcigKICAgICAgICAgICAgICAgICAgICAgICAgbG9nR3JvdXBOYW1lPWdyb3VwTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTmFtZT0nTGFtYmRhTG9nZ2luZ18lcycgJSBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXR0ZXJuPScnLAogICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkFybj1hcm4sCiAgICAgICAgICAgICAgICAgICAgKQogICAgZXhjZXB0IENsaWVudEVycm9yIGFzIGVycm9yOgogICAgICAgIHByaW50KGVycm9yKQoKZGVmIHB1dEludm9rZVBlcm0oZGVzdExhbWJkYSwgZGVzdEFsaWFzLCBuYW1lLCByZWdpb24sIGxvZ0Fybik6CiAgICAnJycKICAgIEFkZHMgdGhlIGFiaWxpdHkgZm9yIHRoZSBuZXcgbGFtYmRhIGxvZ3MgdG8gaW52b2tlIHRoZSBsb2dnaW5nIGxhbWJkYQogICAgVGhpcyBjYW4gYmUgc2VlbiBpbiB0aGUgdHJpZ2dlcnMgb2YgdGhlIGRlc3RpbmF0aW9uIGxhbWJkYQoKICAgIGFyZ3M6CiAgICAgICAgZGVzdExhbWJkYTogbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gbGFtYmRhLCByZXRyaWV2ZWQgZnJvbSBjb25maWcKICAgICAgICBkZXN0QWxpYXM6IGFsaWFzIG9uIHRoZSBkZXN0aW5hdGlvbiBsYW1iZGEsIHJldHJpZXZlZCBmcm9tIGNvbmZpZwogICAgICAgIG5hbWU6IG5hbWUgb2YgdGhlIG5ldyBsYW1iZGEsIHJldHJpZXZlZCBmcm9tIGNvbmZpZywgdXNlZCB0byBjcmVhdGUgYSBzdGF0ZW1lbnQgaWQKICAgICAgICByZWdpb246IHJlZ2lvbiB0aGlzIGlzIGhhcHBlbmluZyBpbiwgdXNlZCBmb3IgdGhlIHByaW5jaXBhbCwgc2VlbiBiZWxvdwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgbG9nQXJuOiBhcm4gb2YgdGhlIG5ldyBsYW1iZGEgbG9nIGdyb3VwLCByZXRyaWVkIGZyb20gJ2dldExvZ0dyb3VwTmFtZScKPHxmaW1fZW5kfD4="]
["f23262688148593e34ae0eb0a3cda910fa2b6db4-5","f23262688148593e34ae0eb0a3cda910fa2b6db4","PHxmaW1fcHJlZml4fD4KI0V4dGVybmFsIGxpYnMKaW1wb3J0IGpzb24KaW1wb3J0IGJvdG8zCmZyb20gYm90b2NvcmUuZXhjZXB0aW9ucyBpbXBvcnQgQ2xpZW50RXJyb3IKCiNFc3RhYmxpc2ggb3VyIGJvdG8gcmVzb3VyY2VzCmxvZ0NsaWVudCA9IGJvdG8zLmNsaWVudCgnbG9ncycpCmxhbWJkYUNsaWVudCA9IGJvdG8zLmNsaWVudCgnbGFtYmRhJykKaWFtID0gYm90bzMucmVzb3VyY2UoJ2lhbScpCgpkZWYgaW52b2tlRnVuY3Rpb24obmFtZSk6CiAgICAnJycKICAgIEludm9rZXMgdGhlIG5ldyBmdW5jdGlvbiwgQVdTIHdpbGwgZ2VuZXJhdGUgYSBsb2cgZ3JvdXAgYW5kIHN0cmVhbQogICAgV2UgZG9uJ3Qvc2hvdWxkbid0IGNhcmUgYWJvdXQgdGhlIG91dHB1dCBvciBpZiB0aGUgbGFtYmRhIHdvcmtzLCBqdXN0IGZvciB0aGUgbGFtYmRhIHRvIGdlbmVyYXRlIGEgbG9nIGdyb3VwCgogICAgYXJnczoKICAgICAgICBuYW1lOiBuYW1lIG9mIHRoZSBsYW1iZGEsIHJldHJpZXZlZCBmcm9tIGNvbmZpZyBmaWxlCiAgICAnJycKICAgIHByaW50KCdDcmVhdGluZyBsb2cgZ3JvdXAnKQogICAgdHJ5OgogICAgICAgIGludm9rZSA9IGxhbWJkYUNsaWVudC5pbnZva2UoRnVuY3Rpb25OYW1lPW5hbWUpCiAgICBleGNlcHQgQ2xpZW50RXJyb3IgYXMgZXJyb3I6CiAgICAgICAgcHJpbnQoZXJyb3IpCgpkZWYgZ2V0TG9nR3JvdXBOYW1lKG5hbWUpOgogICAgJycnCiAgICBHZXRzIHRoZSB1bmlxdWUgYW1hem9uIHJlc291cmNlIG5hbWUgKEFSTikgZm9yIHRoZSBsb2cgZ3JvdXAgd2UgYXJlIGNyZWF0aW5nIHdpdGggJ2ludm9rZUZ1bmN0aW9uJwogICAgQWNjb21wbGlzaGVzIHRoaXMgYnkgc2VhcmNoaW5nIGV4aXN0aW5nIGxvZyBncm91cHMgZm9yIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbgoKICAgIE5vdGU6IEFsbCBMYW1iZGEgZ2VuZXJhdGVkIGxvZyBncm91cHMgYXJlIHByZWZpeGVkIHdpdGggJy9hd3MvbGFtYmRhJywgYXMgc2VlbiBiZWxvdwogICAgCiAgICBhcmdzOgogICAgICAgIG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBsYW1iZGEgZnVuY3Rpb24sIHJldHJpZWQgZnJvbSBjb25maWcgZmlsZQogICAgJycnCiAgICBwcmludCgnR2V0dGluZyBsYW1iZGEgbG9nIGdyb3VwIG5hbWUnKQogICAgdHJ5OgogICAgICAgIGxvZ0dyb3VwTmFtZSA9IGxvZ0NsaWVudC5kZXNjcmliZV9sb2dfZ3JvdXBzKAogICAgICAgICAgICAgICAgbG9nR3JvdXBOYW1lUHJlZml4PScvYXdzL2xhbWJkYS8lcycgJSBuYW1lLAogICAgICAgICAgICApCgogICAgICAgIGR1bXAgPSBqc29uLmR1bXBzKGxvZ0dyb3VwTmFtZSwgaW5kZW50PTQpCiAgICAgICAgbG9hZCA9IGpzb24ubG9hZHMoZHVtcCkKCiAgICAgICAgaWYgbG9nR3JvdXBOYW1lWydSZXNwb25zZU1ldGFkYXRhJ11bJ0hUVFBTdGF0dXNDb2RlJ10gPT0gMjAwOgogICAgICAgICAgICBncm91cE5hbWUgPSBsb2FkWydsb2dHcm91cHMnXVswXVsnbG9nR3JvdXBOYW1lJ10KICAgICAgICAgICAgZ3JvdXBBcm4gPSBsb2FkWydsb2dHcm91cHMnXVswXVsnYXJuJ10KCiAgICAgICAgICAgIHByaW50KCdHcm91cCBuYW1lOiAlcycgJSBncm91cE5hbWUpCiAgICAgICAgICAgIHJldHVybiBncm91cE5hbWUsIGdyb3VwQXJuCiAgICBleGNlcHQgQ2xpZW50RXJyb3IgYXMgZXJyb3I6CiAgICAgICAgcHJpbnQoZXJyb3IpCgpkZWYgZ2V0RGVzdGluYXRpb25Bcm4oZGVzdExhbWJkYSwgZGVzdEFsaWFzKToKICAgICcnJwogICAgUmV0cmlldmVzIHRoZSB1bmlxdWUgYW1hem9uIHJlc291cmNlIG5hbWUgKEFSTikgZm9yIHRoZSBkZXN0aW5hdGlvbiBsYW1iZGEKICAgIFRoaXMgdW5pcXVlIGlkIGlzIHJlcXVpcmVkIHRvIGFjY29tcGxpc2ggdGhlIGZ1bmN0aW9uIGJlbG93IChwdXRTdWJGaWx0ZXIpCiAgICBXZSBuZWVkIHRoZSBhbGlhcyBiZWNhdXNlIGVhY2ggYWxpYXMgaGFzIGl0J3Mgb3duIGFybiAoaWYgeW91J3JlIHVzaW5nIG9uZSkKCiAgICBhcmdzOgogICAgICAgIGRlc3RMYW1iZGE6IG5hbWUgb2YgdGhlIHByb2Nlc3NpbmcgbGFtYmRhCiAgICAgICAgZGVzdEFsaWFzOiBuYW1lIG9mIHRoZSBhbGlhcyBvbiB0aGUgcHJvY2Vzc2luZyBsYW1iZGEKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgJycnCiAgICBwcmludCgnR2V0dGluZyBkZXN0aW5hdGlvbiBhcm4gZm9yIGxvZ2dpbmcgbGFtYmRhJykKICAgIHRyeToKICAgICAgICBkZXN0aW5hdGlvbkFybiA9IGxhbWJkYUNsaWVudC5nZXRfZnVuY3Rpb24oCjx8ZmltX2VuZHw+"]
["19bfd9a89d785c209f3911c5bf165316a9ff8095-1","19bfd9a89d785c209f3911c5bf165316a9ff8095","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCiMgQ29weXJpZ2h0IDIwMTAgVGhlIE5hdGl2ZSBDbGllbnQgQXV0aG9ycy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbgojIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgcmUKCmRlZiBHZXROYUNsRWxmQ29uc3RhbnRzKGhlYWRlcl9maWxlKToKCiAgc3ltYm9scyA9IFsgJ0VMRk9TQUJJX05BQ0wnLAogICAgICAgICAgICAgICdFRl9OQUNMX0FMSUdOX01BU0snLAogICAgICAgICAgICAgICdFRl9OQUNMX0FMSUdOXzE2JywKICAgICAgICAgICAgICAnRUZfTkFDTF9BTElHTl8zMicsCiAgICAgICAgICAgICAgJ0VGX05BQ0xfQUxJR05fTElCJywKICAgICAgICAgICAgICAnRUZfTkFDTF9BQklWRVJTSU9OJywKICAgICAgICAgICAgICBdCgogIGV4dHJhY3RvcnMgPSBbIHInI1xzKmRlZmluZVxzKyVzXHMrKFt4XGRdKyknICUgcwogICAgICAgICAgICAgICAgIGZvciBzIGluIHN5bWJvbHMgXQoKICBuZmFzID0gWyByZS5jb21waWxlKGV4dHJhY3RvcikgZm9yIGV4dHJhY3RvciBpbiBleHRyYWN0b3JzIF0KICByZXN1bHRzID0gbGVuKGV4dHJhY3RvcnMpICogWyAtMSBdCiAgZm9yIGxpbmUgaW4gb3BlbihoZWFkZXJfZmlsZSk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGZvciBpeCwgbmZhIGluIGVudW1lcmF0ZShuZmFzKToKICAgICAgbSA9IG5mYS5zZWFyY2gobGluZSkKICAgICAgaWYgbSBpcyBub3QgTm9uZToKICAgICAgICByZXN1bHRzW2l4XSA9IGludChtLmdyb3VwKDEpLCAwKQo8fGZpbV9lbmR8Pg=="]
["19bfd9a89d785c209f3911c5bf165316a9ff8095-2","19bfd9a89d785c209f3911c5bf165316a9ff8095","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCiMgQ29weXJpZ2h0IDIwMTAgVGhlIE5hdGl2ZSBDbGllbnQgQXV0aG9ycy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbgojIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgcmUKCmRlZiBHZXROYUNsRWxmQ29uc3RhbnRzKGhlYWRlcl9maWxlKToKCiAgc3ltYm9scyA9IFsgJ0VMRk9TQUJJX05BQ0wnLAogICAgICAgICAgICAgICdFRl9OQUNMX0FMSUdOX01BU0snLAogICAgICAgICAgICAgICdFRl9OQUNMX0FMSUdOXzE2JywKICAgICAgICAgICAgICAnRUZfTkFDTF9BTElHTl8zMicsCiAgICAgICAgICAgICAgJ0VGX05BQ0xfQUxJR05fTElCJywKICAgICAgICAgICAgICAnRUZfTkFDTF9BQklWRVJTSU9OJywKICAgICAgICAgICAgICBdCgogIGV4dHJhY3RvcnMgPSBbIHInI1xzKmRlZmluZVxzKyVzXHMrKFt4XGRdKyknICUgcwogICAgICAgICAgICAgICAgIGZvciBzIGluIHN5bWJvbHMgXQoKICBuZmFzID0gWyByZS5jb21waWxlKGV4dHJhY3RvcikgZm9yIGV4dHJhY3RvciBpbiBleHRyYWN0b3JzIF0KICByZXN1bHRzID0gbGVuKGV4dHJhY3RvcnMpICogWyAtMSBdCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICBmb3IgbGluZSBpbiBvcGVuKGhlYWRlcl9maWxlKToKICAgIGZvciBpeCwgbmZhIGluIGVudW1lcmF0ZShuZmFzKToKICAgICAgbSA9IG5mYS5zZWFyY2gobGluZSkKICAgICAgaWYgbSBpcyBub3QgTm9uZToKPHxmaW1fZW5kfD4="]
["19bfd9a89d785c209f3911c5bf165316a9ff8095-3","19bfd9a89d785c209f3911c5bf165316a9ff8095","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24KCiMgQ29weXJpZ2h0IDIwMTAgVGhlIE5hdGl2ZSBDbGllbnQgQXV0aG9ycy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbgojIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgcmUKCmRlZiBHZXROYUNsRWxmQ29uc3RhbnRzKGhlYWRlcl9maWxlKToKCiAgc3ltYm9scyA9IFsgJ0VMRk9TQUJJX05BQ0wnLAogICAgICAgICAgICAgICdFRl9OQUNMX0FMSUdOX01BU0snLAogICAgICAgICAgICAgICdFRl9OQUNMX0FMSUdOXzE2JywKICAgICAgICAgICAgICAnRUZfTkFDTF9BTElHTl8zMicsCiAgICAgICAgICAgICAgJ0VGX05BQ0xfQUxJR05fTElCJywKICAgICAgICAgICAgICAnRUZfTkFDTF9BQklWRVJTSU9OJywKICAgICAgICAgICAgICBdCgogIGV4dHJhY3RvcnMgPSBbIHInI1xzKmRlZmluZVxzKyVzXHMrKFt4XGRdKyknICUgcwogICAgICAgICAgICAgICAgIGZvciBzIGluIHN5bWJvbHMgXQo8fGZpbV9ob2xlfD4KICAgIGZvciBpeCwgbmZhIGluIGVudW1lcmF0ZShuZmFzKToKICAgICAgbSA9IG5mYS5zZWFyY2gobGluZSkKICAgICAgaWYgbSBpcyBub3QgTm9uZToKICAgICAgICByZXN1bHRzW2l4XSA9IGludChtLmdyb3VwKDEpLCAwKQogICAgICAgIGNvbnRpbnVlCiAgaWYgLTEgaW4gcmVzdWx0czoKICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ291bGQgbm90IHBhcnNlIGhlYWRlciBmaWxlICVzJyAlIGhlYWRlcl9maWxlKQogIHJldHVybiBkaWN0KHppcChzeW1ib2xzLCByZXN1bHRzKSkKPHxmaW1fc3VmZml4fD4KCiAgbmZhcyA9IFsgcmUuY29tcGlsZShleHRyYWN0b3IpIGZvciBleHRyYWN0b3IgaW4gZXh0cmFjdG9ycyBdCiAgcmVzdWx0cyA9IGxlbihleHRyYWN0b3JzKSAqIFsgLTEgXQogIGZvciBsaW5lIGluIG9wZW4oaGVhZGVyX2ZpbGUpOgo8fGZpbV9lbmR8Pg=="]
["4bbfe53e80db6799096c1ea1be08d0e748b0f674-1","4bbfe53e80db6799096c1ea1be08d0e748b0f674",{"$cut":{"chars":16404,"head":"PHxmaW1fcHJlZml4fD4KJycnClRoZSBtYXN0ZXIgZGVjb21wb3NpdGlvbiBmaWxlIHVzZWQgdG8gZGVjb21wb3NlIHJhdyBhY2NlbGVyb21ldGVyIGRhdGEuClRoZSBmb2xsb3dpbmcgc3RlcHMgYXJlIGV4ZWN1dGVkIGluIHRoaXMgb3JkZXI6CiAgICBNYWduaXR1ZGVzIGZyb20gdGhyZWUgYXhlcyBvZiBhY2NlbGVyb21ldGVycyBhcmUgY2FsY3VsYXRlZAogICAgTWFnbml0dWRlcyBhcmUgaGlnaHBhc3MgZmlsdGVyZWQgYXQgMSBoZXJ0egogICAgUk1TIHZhbHVlcyBhcmUgY2FsY3VsYXRlZCBhbmQgYSBtb3Rpb24gdGhyZXNob2xkIHNsaWdodGx5XAogICAgYWJvdmUgdGhlIG5vaXNlIGZsb29yIGlzIGNyZWF0ZWQKICAgIERhdGEgaXMgdHJhbnNmb3JtZWQgaW4gYW4gZmZ0IDIwMCBwb2ludHMgKDEwIHNlY29uZHMpIGF0IGEgdGltZQogICAgQWxsIHRoZSByZW1haW5pbmcgdHNmcmVzaCBkZWNvbXBvc2l0aW9uIHNvdXJjZSBjb2RlIGlzIHJhbgogICAgaHR0cHM6Ly90c2ZyZXNoLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC90ZXh0L2xpc3Rfb2ZfZmVhdHVyZXMuaHRtbAogICAgRGVjb21wb3NlZCBkYXRhc2V0cyBhcmUgc2F2ZWQgZm9yIGVhY2ggYmFieQonJycKCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gc2NpcHkgaW1wb3J0IHNpZ25hbAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBvcwoKcGx0LnN0eWxlLnVzZSgnZ2dwbG90JykKCmNsYXNzIG5vaXNlOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG4pOgogICAgICAgIAogICAgICAgIHNlbGYuZGZfY29tcCA9IHBkLnJlYWRfY3N2KHN0cihuKSArICcuY3N2JykKICAgICAgICBzZWxmLmNvbHMgPSBbJ0xMJywnTEEnLCdDJywnUkEnLCdSTCddCiAgICAgICAgc2VsZi5kZiA9IHBkLkRhdGFGcmFtZSgpCiAgICAgICAgI2J1aWxkIGVtcHR5IGZmdCBkYXRhZnJhbWUKICAgICAgICBmb3IgdCBpbiBbJ01fJywgJ0ZfJ106CiAgICAgICAgICAgIGZvciBjIGluIHNlbGYuZGYuY29sdW1uczoKICAgICAgICAgICAgICAgIHNlbGYuZGZfZmZ0W3QgKyBjXSA9IFtdCiAgICAgICAgc2VsZi5wZXJjZW50X3JlbW92ZWQgPSAwLjAKICAgICAgICAKICAgICAgICAjcHJlcHJvY2VzcyB0aGUgbWFnbml0dWRlcyBhbmQgaGlnaCBwYXNzIGZpbHRlcgogICAgICAgIHNlbGYuY2FsY19tYWcoKQogICAgICAgICNzZWxmLnBsb3RfY29tcCgpCiAgICAgICAgc2VsZi5oaWdoX3Bhc3MoKQogICAgICAgICNzZWxmLnBsb3RfaGlnaCgpCiAgICAgICAgI3NlbGYucGxvdF9ub2lzZV9mbG9vcigpCiAgICAgICAgCiAgICAgICAgI3NldCB0aGUgbWFnbml0dWRlIG9mIHRoZSBub2lzZSBmbG9vciB0byBmaWx0ZXIgbm9pc2UKICAgICAgICBzZWxmLm1hZ25pdHVkZV90aHJlc2hvbGQoKQogICAgICAgIHNlbGYuY3ljbGVfd2luZG93KCkKICAgICAgICBzZWxmLmN5Y2xlX3dpbmRvd19sb2dpYygpCiAgICAgICAgc2VsZi5jeWNsZV9tYXNrKCkKICAgICAgICBzZWxmLnJlYnVpbGRfd2l0aF9tYXNrKCkKCiAgICAgICAgI3N0YXJ0IHByb2Nlc3NpbmcgZmZ0IGFuZCB0c2ZyZXNoCiAgICAgICAgc2VsZi5yb3VuZF9kb3duKCkKICAgICAgICBzZWxmLmRlY29tcG9zZSgpCiAgICAgICAgCiAgICBkZWYgZ3JvdXBlZChzZWxmLCBpdGVyYWJsZSwgbik6CiAgICAgICAgInMgLT4gKHMwLHMxLHMyLC4uLnNuLTEpLCAoc24sc24rMSxzbisyLC4uLnMybi0xKSwgKHMybixzMm4rMSxzMm4rMiwuLi5zM24tMSksIC4uLiIKICAgICAgICByZXR1cm4gemlwKCpbaXRlcihpdGVyYWJsZSldKm4pCgogICAgZGVmIGNhbGNfbWFnKHNlbGYpOgogICAgICAgICNjcmVhdGUgbWFnbml0dWRlcyBvZiBhY2NlbGVyb21ldGVycwogICAgICAgIGZvciBjLCAoeCwgeSwgeikgaW4gemlwKHNlbGYuY29scywgc2VsZi5ncm91cGVkKHNlbGYuZGZfY29tcC5jb2x1bW5zLCAzKSk6CiAgICAgICAgICAgIHNlbGYuZGZbY10gPSBucC5zcXJ0KG5wLnNxdWFyZShzZWxmLmRmX2NvbXBbeF0pICsgbnAuc3F1YXJlKHNlbGYuZGZfY29tcFt5XSkgKyBucC5zcXVhcmUoc2VsZi5kZl9jb21wW3pdKSkKICAgIAogICAgZGVmIHBsb3RfY29tcChzZWxmKToKICAgICAgICBmLCAoc2VsZi5heDEsIHNlbGYuYXgyLCBzZWxmLmF4MykgPSBwbHQuc3VicGxvdHMoMywgc2hhcmV4PVRydWUsIHNoYXJleT1GYWxzZSkKICAgICAgICBzZWxmLmF4MS5zZXRfdGl0bGUoJ0FjY2VsZXJvbWV0ZXIgUHJlcHJvY2Vzc2luZycsIHNpemU9MTQpCiAgICAgICAgc2VsZi5heDEucGxvdChzZWxmLmRmX2NvbXAuaWxvY1s1MDoxNTAsMF0sIGxhYmVsPSdYIENvbXBvbmVudCcpCiAgICAgICAgc2VsZi5heDEucGxvdChzZWxmLmRmX2NvbXAuaWxvY1s1MDoxNTAsMV0sIGxhYmVsPSdZIENvbXBvbmVudCcpCiAgICAgICAgc2VsZi5heDEucGxvdChzZWxmLmRmX2NvbXAuaWxvY1s1MDoxNTAsMl0sIGxhYmVsPSdaIENvbXBvbmVudCcsIGNvbG9yPScjOTQwMEQzJywgYWxwaGE9MC41KQogICAgICAgIHNlbGYuYXgxLmxlZ2VuZChsb2M9NiwgcHJvcD17J3NpemUnOiAxMn0sIGJib3hfdG9fYW5jaG9yPSgxLCAwLjUpKQogICAgICAgIHBsdC5nY2EoKS5heGVzLmdldF94YXhpcygpLnNldF90aWNrcyhbXSkKICAgICAgICAKICAgICAgICBzZWxmLmF4Mi5zZXRfeWxhYmVsKCdNYWduaXR1ZGUgKGcpJywgc2l6ZT0xNCkKICAgICAgICBzZWxmLmF4Mi5wbG90KHNlbGYuZGYuaWxvY1s1MDoxNTAsMF0sIGxhYmVsPSAnQWNjZWxlcm9tZXRlclxuTWFnbml0dWRlJywgY29sb3I9JyNGRjhDMDAnLCBhbHBoYT0wLjUpCiAgICAgICAgc2VsZi5heDIubGVnZW5kKGxvYz02LCBwcm9wPXsnc2l6ZSc6IDEyfSwgYmJveF90b19hbmNob3I9KDEsIDAuNSkpCiAgICAgICAgCiAgICBkZWYgcGxvdF9oaWdoKHNlbGYpOgogICAgICAgIHNlbGYuYXgzLnBsb3Qoc2VsZi5kZi5pbG9jWzUwOjE1MCwwXSwgbGFiZWw9J0hpZ2hwYXNzZWRcbk1hZ25pdHVkZScsIGNvbG9yPSdjJykKICAgICAgICBzZWxmLmF4My5sZWdlbmQobG9jPTYsIHByb3A9eydzaXplJzogMTJ9LCBiYm94X3RvX2FuY2hvcj0oMSwgMC41KSkKICAgICAgICBw"}}]
["4bbfe53e80db6799096c1ea1be08d0e748b0f674-2","4bbfe53e80db6799096c1ea1be08d0e748b0f674","PHxmaW1fcHJlZml4fD4KJycnClRoZSBtYXN0ZXIgZGVjb21wb3NpdGlvbiBmaWxlIHVzZWQgdG8gZGVjb21wb3NlIHJhdyBhY2NlbGVyb21ldGVyIGRhdGEuClRoZSBmb2xsb3dpbmcgc3RlcHMgYXJlIGV4ZWN1dGVkIGluIHRoaXMgb3JkZXI6CiAgICBNYWduaXR1ZGVzIGZyb20gdGhyZWUgYXhlcyBvZiBhY2NlbGVyb21ldGVycyBhcmUgY2FsY3VsYXRlZAogICAgTWFnbml0dWRlcyBhcmUgaGlnaHBhc3MgZmlsdGVyZWQgYXQgMSBoZXJ0egogICAgUk1TIHZhbHVlcyBhcmUgY2FsY3VsYXRlZCBhbmQgYSBtb3Rpb24gdGhyZXNob2xkIHNsaWdodGx5XAogICAgYWJvdmUgdGhlIG5vaXNlIGZsb29yIGlzIGNyZWF0ZWQKICAgIERhdGEgaXMgdHJhbnNmb3JtZWQgaW4gYW4gZmZ0IDIwMCBwb2ludHMgKDEwIHNlY29uZHMpIGF0IGEgdGltZQogICAgQWxsIHRoZSByZW1haW5pbmcgdHNmcmVzaCBkZWNvbXBvc2l0aW9uIHNvdXJjZSBjb2RlIGlzIHJhbgogICAgaHR0cHM6Ly90c2ZyZXNoLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC90ZXh0L2xpc3Rfb2ZfZmVhdHVyZXMuaHRtbAogICAgRGVjb21wb3NlZCBkYXRhc2V0cyBhcmUgc2F2ZWQgZm9yIGVhY2ggYmFieQonJycKCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gc2NpcHkgaW1wb3J0IHNpZ25hbAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBvcwoKcGx0LnN0eWxlLnVzZSgnZ2dwbG90JykKCmNsYXNzIG5vaXNlOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG4pOgogICAgICAgIAogICAgICAgIHNlbGYuZGZfY29tcCA9IHBkLnJlYWRfY3N2KHN0cihuKSArICcuY3N2JykKICAgICAgICBzZWxmLmNvbHMgPSBbJ0xMJywnTEEnLCdDJywnUkEnLCdSTCddCiAgICAgICAgc2VsZi5kZiA9IHBkLkRhdGFGcmFtZSgpCiAgICAgICAgI2J1aWxkIGVtcHR5IGZmdCBkYXRhZnJhbWUKICAgICAgICBmb3IgdCBpbiBbJ01fJywgJ0ZfJ106CiAgICAgICAgICAgIGZvciBjIGluIHNlbGYuZGYuY29sdW1uczoKICAgICAgICAgICAgICAgIHNlbGYuZGZfZmZ0W3QgKyBjXSA9IFtdCiAgICAgICAgc2VsZi5wZXJjZW50X3JlbW92ZWQgPSAwLjAKICAgICAgICAKICAgICAgICAjcHJlcHJvY2VzcyB0aGUgbWFnbml0dWRlcyBhbmQgaGlnaCBwYXNzIGZpbHRlcgogICAgICAgIHNlbGYuY2FsY19tYWcoKQogICAgICAgICNzZWxmLnBsb3RfY29tcCgpCiAgICAgICAgc2VsZi5oaWdoX3Bhc3MoKQogICAgICAgICNzZWxmLnBsb3RfaGlnaCgpCiAgICAgICAgI3NlbGYucGxvdF9ub2lzZV9mbG9vcigpCiAgICAgICAgCiAgICAgICAgI3NldCB0aGUgbWFnbml0dWRlIG9mIHRoZSBub2lzZSBmbG9vciB0byBmaWx0ZXIgbm9pc2UKICAgICAgICBzZWxmLm1hZ25pdHVkZV90aHJlc2hvbGQoKQogICAgICAgIHNlbGYuY3ljbGVfd2luZG93KCkKICAgICAgICBzZWxmLmN5Y2xlX3dpbmRvd19sb2dpYygpCiAgICAgICAgc2VsZi5jeWNsZV9tYXNrKCkKICAgICAgICBzZWxmLnJlYnVpbGRfd2l0aF9tYXNrKCkKCiAgICAgICAgI3N0YXJ0IHByb2Nlc3NpbmcgZmZ0IGFuZCB0c2ZyZXNoCiAgICAgICAgc2VsZi5yb3VuZF9kb3duKCkKICAgICAgICBzZWxmLmRlY29tcG9zZSgpCiAgICAgICAgCiAgICBkZWYgZ3JvdXBlZChzZWxmLCBpdGVyYWJsZSwgbik6CiAgICAgICAgInMgLT4gKHMwLHMxLHMyLC4uLnNuLTEpLCAoc24sc24rMSxzbisyLC4uLnMybi0xKSwgKHMybixzMm4rMSxzMm4rMiwuLi5zM24tMSksIC4uLiIKICAgICAgICByZXR1cm4gemlwKCpbaXRlcihpdGVyYWJsZSldKm4pCgogICAgZGVmIGNhbGNfbWFnKHNlbGYpOgogICAgICAgICNjcmVhdGUgbWFnbml0dWRlcyBvZiBhY2NlbGVyb21ldGVycwogICAgICAgIGZvciBjLCAoeCwgeSwgeikgaW4gemlwKHNlbGYuY29scywgc2VsZi5ncm91cGVkKHNlbGYuZGZfY29tcC5jb2x1bW5zLCAzKSk6CiAgICAgICAgICAgIHNlbGYuZGZbY10gPSBucC5zcXJ0KG5wLnNxdWFyZShzZWxmLmRmX2NvbXBbeF0pICsgbnAuc3F1YXJlKHNlbGYuZGZfY29tcFt5XSkgKyBucC5zcXVhcmUoc2VsZi5kZl9jb21wW3pdKSkKICAgIAogICAgZGVmIHBsb3RfY29tcChzZWxmKToKICAgICAgICBmLCAoc2VsZi5heDEsIHNlbGYuYXgyLCBzZWxmLmF4MykgPSBwbHQuc3VicGxvdHMoMywgc2hhcmV4PVRydWUsIHNoYXJleT1GYWxzZSkKICAgICAgICBzZWxmLmF4MS5zZXRfdGl0bGUoJ0FjY2VsZXJvbWV0ZXIgUHJlcHJvY2Vzc2luZycsIHNpemU9MTQpCiAgICAgICAgc2VsZi5heDEucGxvdChzZWxmLmRmX2NvbXAuaWxvY1s1MDoxNTAsMF0sIGxhYmVsPSdYIENvbXBvbmVudCcpCiAgICAgICAgc2VsZi5heDEucGxvdChzZWxmLmRmX2NvbXAuaWxvY1s1MDoxNTAsMV0sIGxhYmVsPSdZIENvbXBvbmVudCcpCiAgICAgICAgc2VsZi5heDEucGxvdChzZWxmLmRmX2NvbXAuaWxvY1s1MDoxNTAsMl0sIGxhYmVsPSdaIENvbXBvbmVudCcsIGNvbG9yPScjOTQwMEQzJywgYWxwaGE9MC41KQogICAgICAgIHNlbGYuYXgxLmxlZ2VuZChsb2M9NiwgcHJvcD17J3NpemUnOiAxMn0sIGJib3hfdG9fYW5jaG9yPSgxLCAwLjUpKQogICAgICAgIHBsdC5nY2EoKS5heGVzLmdldF94YXhpcygpLnNldF90aWNrcyhbXSkKICAgICAgICAKICAgICAgICBzZWxmLmF4Mi5zZXRfeWxhYmVsKCdNYWduaXR1ZGUgKGcpJywgc2l6ZT0xNCkKICAgICAgICBzZWxmLmF4Mi5wbG90KHNlbGYuZGYuaWxvY1s1MDoxNTAsMF0sIGxhYmVsPSAnQWNjZWxlcm9tZXRlclxuTWFnbml0dWRlJywgY29sb3I9JyNGRjhDMDAnLCBhbHBoYT0wLjUpCiAgICAgICAgc2VsZi5heDIubGVnZW5kKGxvYz02LCBwcm9wPXsnc2l6ZSc6IDEyfSwgYmJveF90b19hbmNob3I9KDEsIDAuNSkpCiAgICAgICAgCiAgICBkZWYgcGxvdF9oaWdoKHNlbGYpOgogICAgICAgIHNlbGYuYXgzLnBsb3Qoc2VsZi5kZi5pbG9jWzUwOjE1MCwwXSwgbGFiZWw9J0hpZ2hwYXNzZWRcbk1hZ25pdHVkZScsIGNvbG9yPSdjJykKICAgICAgICBzZWxmLmF4My5sZWdlbmQobG9jPTYsIHByb3A9eydzaXplJzogMTJ9LCBiYm94X3RvX2FuY2hvcj0oMSwgMC41KSkKICAgICAgICBwbHQuc2hvdygpCiAgICAgICAgCiAgICBkZWYgcGxvdF9ub2lzZV9mbG9vcihzZWxmKToKICAgICAgICBwbHQudGl0bGUoJ0FjY2VsZXJvbWV0ZXIgTm9pc2UgRmxvb3InLCBzaXplPTE0KQogICAgICAgIHBsdC5wbG90KHNlbGYuZGYuaWxvY1syMjA6MzIwLDBdLnZhbHVlcywgbGFiZWw9J0hpZ2hwYXNzZWQnKQogICAgICAgIHNpZ25hbCA9IHNlbGYuZGYuaWxvY1syMjA6MzIwLDBdLnZhbHVlcwogICAgICAgIHJtcyA9IFtdCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgMTAwLCAxKToKICAgICAgICAgICAgcm1zLmFwcGVuZChucC5zcXJ0KG5wLm1lYW4obnAuc3F1YXJlKHNpZ25hbFtpOmkrMjBdKSkpKQogICAgICAgIHBsdC5wbG90KHJtcywgbGFiZWw9J1JNUycpCiAgICAgICAgcGx0LmxlZ2VuZChsb2M9NiwgcHJvcD17J3NpemUnOiAxMn0sIGJib3hfdG9fYW5jaG9yPSgxLCAwLjUpKQogICAgICAgIHBsdC55bGFiZWwoJ01hZ25pdHVkZSAoZyknLCBzaXplPTE0KQogICAgICAgIHBsdC5nY2EoKS5heGVzLmdldF94YXhpcygpLnNldF90aWNrcyhbXSkKICAgICAgICBwbHQuc2hvdygpCiAgICAKICAgIGRlZiBjYWxjX3JtcyhzZWxmLCBzaWduYWwpOgogICAgICAgICNjYWxjdWxhdGVzIHJtcyB3aXRoIDIwIHBvaW50IHdpbmRvdwogICAgICAgIHJtcyA9IFtdCiAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2lnbmFsLnNoYXBlWzBdKToKICAgICAgICAgICAgcm1zLmFwcGVuZChucC5zcXJ0KG5wLm1lYW4obnAuc3F1YXJlKHNpZ25hbFtpOmkrMjBdKSkpKQogICAgICAgIHJldHVybiBucC5hcnJheShybXMpCiAgICAKICAgIGRlZiBidXR0ZXJfaGlnaHBhc3Moc2VsZiwgY3V0b2ZmLCBmcywgb3JkZXI9NSk6CiAgICAgICAgbnlxID0gMC41ICogZnMKICAgICAgICBub3JtYWxfY3V0b2ZmID0gY3V0b2ZmIC8gbnlxCiAgICAgICAgYiwgYSA9IHNpZ25hbC5idXR0ZXIob3JkZXIsIG5vcm1hbF9jdXRvZmYsIGJ0eXBlPSdoaWdocGFzcycsIGFuYWxvZz1GYWxzZSkKICAgICAgICByZXR1cm4gYiwgYQoKICAgIGRlZiBidXR0ZXJfaGlnaHBhc3NfZmlsdGVyKHNlbGYsIGRhdGEsIGN1dG9mZiwgZnMsIG9yZGVyPTUpOgogICAgICAgIGIsIGEgPSBzZWxmLmJ1dHRlcl9oaWdocGFzcyhjdXRvZmYsIGZzLCBvcmRlcj1vcmRlcikKICAgICAgICB5ID0gc2lnbmFsLmZpbHRmaWx0KGIsIGEsIGRhdGEpCiAgICAgICAgcmV0dXJuIHkKICAgIAogICAgZGVmIGhpZ2hfcGFzcyhzZWxmKToKICAgICAgICBmb3IgYyBpbiBzZWxmLmRmLmNvbHVtbnM6CiAgICAgICAgICAgIGZpbHRlcmVkID0gc2VsZi5idXR0ZXJfaGlnaHBhc3NfZmlsdGVyKHNlbGYuZGZbY10sIDEsIDIwKSAgICAjZGF0YSwgY3V0b2ZmLCBzYW1wbGluZyBmcmVxCiAgICAgICAgICAgIHNlbGYuZGZbY10gPSBmaWx0ZXJlZAogICAgCiAgICBkZWYgdmlzdWFsaXplKHNlbGYpOgogICAgICAgIGZvciBjIGluIHNlbGYuZGYuY29sdW1uczoKICAgICAgICAgICAgcGx0LnBsb3Qoc2VsZi5kZltjXSkKICAgICAgICAgICAgcGx0LnNob3coKQogICAgCiAgICBkZWYgbWFnbml0dWRlX3RocmVzaG9sZChzZWxmKToKICAgICAgICBzZWxmLmJvb2wgPSBbXQogICAgICAgIGZvciBjIGluIHNlbGYuZGYuY29sdW1uczoKICAgICAgICAgICAgYSAgPSBucC5hcnJheShzZWxmLmRmW2NdKQogICAgICAgICAgICBhID0gc2VsZi5jYWxjX3JtcyhhKQogICAgICAgICAgICBzZWxmLmJvb2wuYXBwZW5kKGEgPCAwLjAwOCkKICAgICAgICAKICAgIGRlZiBjeWNsZV93aW5kb3coc2VsZik6CiAgICAgICAgI2xvb2tzIGF0IGEgd2luZG93IG9mIDEwMCBwb2ludHMKICAgICAgICBzZWxmLndpbmRvdyA9IFtdCiAgICAgICAgZm9yIGFycmF5IGluIHNlbGYuYm9vbDoKICAgICAgICAgICAgYSA9IHNlbGYucm9sbGluZ193aW5kb3coYXJyYXksIDEwMCkKICAgICAgICAgICAgc2VsZi53aW5kb3cuYXBwZW5kKGEpCiAgICAgICAgCiAgICBkZWYgY3ljbGVfd2luZG93X2xvZ2ljKHNlbGYpOgogICAgICAgIHNlbGYubG9naWMgPSBbXQogICAgICAgIGZvciBhcnJheSBpbiBzZWxmLndpbmRvdzoKICAgICAgICAgICAgYSA9IHNlbGYubG9naWNhbF9hbGwoYXJyYXkpCiAgICAgICAgICAgIHNlbGYubG9naWMuYXBwZW5kKGEpCiAgICAKICAgIGRlZiBjeWNsZV9tYXNrKHNlbGYpOgogICAgICAgIGxvZ2ljID0gbnAuYXJyYXkoc2VsZi5sb2dpYykuVAogICAgICAgIG1hc2sgPSBbXQogICAgICAgIGZvciByb3cgaW4gbG9naWM6CiAgICAgICAgICAgIGEgPSBucC5hbGwocm93KQogICAgICAgICAgICBhID0gbnAubG9naWNhbF9ub3QoYSkKICAgICAgICAgICAgbWFzay5hcHBlbmQoYSkKICAgICAgICBzZWxmLm1hc2sgPSBucC5hcnJheShtYXNrKQogICAgCiAgICBkZWYgcmVidWlsZF93aXRoX21hc2soc2VsZik6CiAgICAgICAgZGYgPSBwZC5EYXRhRnJhbWUoY29sdW1ucz1zZWxmLmRmLmNvbHVtbnMpCiAgICAgICAgb2xkX2xlbiA9IHNlbGYuZGYuc2hhcGVbMF0KICAgICAgICBmb3IgYyBpbiBzZWxmLmRmLmNvbHVtbnM6CiAgICAgICAgICAgIGRmW2NdID0gc2VsZi5kZltjXS52YWx1ZXNbc2VsZi5tYXNrXQogICAgICAgIHNlbGYuZGYgPSBkZgogICAgICAgIG5ld19sZW4gPSBzZWxmLmRmLnNoYXBlWzBdCiAgICAgICAgcGVyY2VudGFnZSA9IChvbGRfbGVuIC0gbmV3X2xlbikvZmxvYXQob2xkX2xlbikKICAgICAgICBwZXJjZW50YWdlID0gcm91bmQocGVyY2VudGFnZSwgNCkgKiAxMDAKICAgICAgICBzZWxmLnBlcmNlbnRfcmVtb3ZlZCA9ICJ7MDouMmZ9Ii5mb3JtYXQocGVyY2VudGFnZSkKICAgICAgICBwcmludCgnUmVtb3ZlZCB7MDouMmZ9JSBvZiBkYXRhIGJlbGlldmVkIHRvIGJlIG5vaXNlIScuZm9ybWF0KHJvdW5kKHBlcmNlbnRhZ2UsIDIpKSkKICAgIAogICAgZGVmIHJvbGxpbmdfd2luZG93KHNlbGYsIHksIG4pOgogICAgICAgIHdpbmRvdyA9IFtdCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgeS5zaGFwZVswXSwgMSk6CiAgICAgICAgICAgIHMgPSB5W2k6aStuXQogICAgICAgICAgICB3aW5kb3cuYXBwZW5kKHMpCiAgICAgICAgcmV0dXJuIHdpbmRvdwogICAgCiAgICBkZWYgbG9naWNhbF9hbGwoc2VsZiwgeSk6CiAgICAgICAgcmVzdWx0ID0gW10KICAgICAgICBmb3IgaSBpbiB5OgogICAgICAgICAgICByID0gbnAuYWxsKGkpCiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocikKICAgICAgICByZXN1bHQgPSBucC5hcnJheShyZXN1bHQpCiAgICAgICAgcmV0dXJuIHJlc3VsdAoKICAgIGRlZiByb3VuZF9kb3duKHNlbGYpOgogICAgICAgIG51bSA9IHNlbGYuZGYuc2hhcGVbMF0KICAgICAgICBkaXZpc29yID0gMjAwCiAgICAgICAgbGVuZ3RoID0gbnVtIC0gKG51bSVkaXZpc29yKQogICAgICAgIHNlbGYuZGYgPSBzZWxmLmRmLmlsb2NbOmxlbmd0aCwgOl0KICAgIAogICAgZGVmIGZmdChzZWxmLCB5LCBjKToKICAgICAgICBuID0gbGVuKHkpICAgICAgICAgICAgICAgICAgICAgICAjIGxlbmd0aCBvZiB0aGUgc2lnbmFsCiAgICAgICAgZnJlcSA9IG5wLmZmdC5mZnRmcmVxKG4sIGQ9MS8yMCkKICAgICAgICAjZnJlcSA9IGZycVtyYW5nZShuLzIpXSAgICAgICAgICAjIG9uZSBzaWRlIGZyZXF1ZW5jeSByYW5nZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVtb3ZlZCB0aGlzIHRvIHJlcGxhY2Ugd2l0aCBhIG1vcmUgYWNjdXJhdGUgc3RlcCBzaXplCiAgICAgICAgWSA9IG5wLmZmdC5mZnQoeSkvbiAgICAgICAgICAgICAgIyBmZnQgY29tcHV0aW5nIGFuZCBub3JtYWxpemF0aW9uCiAgICAgICAgWSA9IFlbOm4vLzJdCiAgICAgICAgWSA9IGFicyhZKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZnJlcSA9IGZyZXFbOm4vLzJdCiAgICAgICAgCiAgICAgICAgI3VuY29tbWVudCB0byBwbG90CiAgICAgICAgJycnCjx8ZmltX2VuZHw+"]
["4bbfe53e80db6799096c1ea1be08d0e748b0f674-3","4bbfe53e80db6799096c1ea1be08d0e748b0f674",{"$cut":{"chars":16404,"head":"PHxmaW1fcHJlZml4fD4KJycnClRoZSBtYXN0ZXIgZGVjb21wb3NpdGlvbiBmaWxlIHVzZWQgdG8gZGVjb21wb3NlIHJhdyBhY2NlbGVyb21ldGVyIGRhdGEuClRoZSBmb2xsb3dpbmcgc3RlcHMgYXJlIGV4ZWN1dGVkIGluIHRoaXMgb3JkZXI6CiAgICBNYWduaXR1ZGVzIGZyb20gdGhyZWUgYXhlcyBvZiBhY2NlbGVyb21ldGVycyBhcmUgY2FsY3VsYXRlZAogICAgTWFnbml0dWRlcyBhcmUgaGlnaHBhc3MgZmlsdGVyZWQgYXQgMSBoZXJ0egogICAgUk1TIHZhbHVlcyBhcmUgY2FsY3VsYXRlZCBhbmQgYSBtb3Rpb24gdGhyZXNob2xkIHNsaWdodGx5XAogICAgYWJvdmUgdGhlIG5vaXNlIGZsb29yIGlzIGNyZWF0ZWQKICAgIERhdGEgaXMgdHJhbnNmb3JtZWQgaW4gYW4gZmZ0IDIwMCBwb2ludHMgKDEwIHNlY29uZHMpIGF0IGEgdGltZQogICAgQWxsIHRoZSByZW1haW5pbmcgdHNmcmVzaCBkZWNvbXBvc2l0aW9uIHNvdXJjZSBjb2RlIGlzIHJhbgogICAgaHR0cHM6Ly90c2ZyZXNoLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC90ZXh0L2xpc3Rfb2ZfZmVhdHVyZXMuaHRtbAogICAgRGVjb21wb3NlZCBkYXRhc2V0cyBhcmUgc2F2ZWQgZm9yIGVhY2ggYmFieQonJycKCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gc2NpcHkgaW1wb3J0IHNpZ25hbAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBvcwoKcGx0LnN0eWxlLnVzZSgnZ2dwbG90JykKCmNsYXNzIG5vaXNlOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG4pOgogICAgICAgIAogICAgICAgIHNlbGYuZGZfY29tcCA9IHBkLnJlYWRfY3N2KHN0cihuKSArICcuY3N2JykKICAgICAgICBzZWxmLmNvbHMgPSBbJ0xMJywnTEEnLCdDJywnUkEnLCdSTCddCiAgICAgICAgc2VsZi5kZiA9IHBkLkRhdGFGcmFtZSgpCiAgICAgICAgI2J1aWxkIGVtcHR5IGZmdCBkYXRhZnJhbWUKICAgICAgICBmb3IgdCBpbiBbJ01fJywgJ0ZfJ106CiAgICAgICAgICAgIGZvciBjIGluIHNlbGYuZGYuY29sdW1uczoKICAgICAgICAgICAgICAgIHNlbGYuZGZfZmZ0W3QgKyBjXSA9IFtdCiAgICAgICAgc2VsZi5wZXJjZW50X3JlbW92ZWQgPSAwLjAKICAgICAgICAKICAgICAgICAjcHJlcHJvY2VzcyB0aGUgbWFnbml0dWRlcyBhbmQgaGlnaCBwYXNzIGZpbHRlcgogICAgICAgIHNlbGYuY2FsY19tYWcoKQogICAgICAgICNzZWxmLnBsb3RfY29tcCgpCiAgICAgICAgc2VsZi5oaWdoX3Bhc3MoKQogICAgICAgICNzZWxmLnBsb3RfaGlnaCgpCiAgICAgICAgI3NlbGYucGxvdF9ub2lzZV9mbG9vcigpCiAgICAgICAgCiAgICAgICAgI3NldCB0aGUgbWFnbml0dWRlIG9mIHRoZSBub2lzZSBmbG9vciB0byBmaWx0ZXIgbm9pc2UKICAgICAgICBzZWxmLm1hZ25pdHVkZV90aHJlc2hvbGQoKQogICAgICAgIHNlbGYuY3ljbGVfd2luZG93KCkKICAgICAgICBzZWxmLmN5Y2xlX3dpbmRvd19sb2dpYygpCiAgICAgICAgc2VsZi5jeWNsZV9tYXNrKCkKICAgICAgICBzZWxmLnJlYnVpbGRfd2l0aF9tYXNrKCkKCiAgICAgICAgI3N0YXJ0IHByb2Nlc3NpbmcgZmZ0IGFuZCB0c2ZyZXNoCiAgICAgICAgc2VsZi5yb3VuZF9kb3duKCkKICAgICAgICBzZWxmLmRlY29tcG9zZSgpCiAgICAgICAgCiAgICBkZWYgZ3JvdXBlZChzZWxmLCBpdGVyYWJsZSwgbik6CiAgICAgICAgInMgLT4gKHMwLHMxLHMyLC4uLnNuLTEpLCAoc24sc24rMSxzbisyLC4uLnMybi0xKSwgKHMybixzMm4rMSxzMm4rMiwuLi5zM24tMSksIC4uLiIKICAgICAgICByZXR1cm4gemlwKCpbaXRlcihpdGVyYWJsZSldKm4pCgogICAgZGVmIGNhbGNfbWFnKHNlbGYpOgogICAgICAgICNjcmVhdGUgbWFnbml0dWRlcyBvZiBhY2NlbGVyb21ldGVycwogICAgICAgIGZvciBjLCAoeCwgeSwgeikgaW4gemlwKHNlbGYuY29scywgc2VsZi5ncm91cGVkKHNlbGYuZGZfY29tcC5jb2x1bW5zLCAzKSk6CiAgICAgICAgICAgIHNlbGYuZGZbY10gPSBucC5zcXJ0KG5wLnNxdWFyZShzZWxmLmRmX2NvbXBbeF0pICsgbnAuc3F1YXJlKHNlbGYuZGZfY29tcFt5XSkgKyBucC5zcXVhcmUoc2VsZi5kZl9jb21wW3pdKSkKICAgIAogICAgZGVmIHBsb3RfY29tcChzZWxmKToKICAgICAgICBmLCAoc2VsZi5heDEsIHNlbGYuYXgyLCBzZWxmLmF4MykgPSBwbHQuc3VicGxvdHMoMywgc2hhcmV4PVRydWUsIHNoYXJleT1GYWxzZSkKICAgICAgICBzZWxmLmF4MS5zZXRfdGl0bGUoJ0FjY2VsZXJvbWV0ZXIgUHJlcHJvY2Vzc2luZycsIHNpemU9MTQpCiAgICAgICAgc2VsZi5heDEucGxvdChzZWxmLmRmX2NvbXAuaWxvY1s1MDoxNTAsMF0sIGxhYmVsPSdYIENvbXBvbmVudCcpCiAgICAgICAgc2VsZi5heDEucGxvdChzZWxmLmRmX2NvbXAuaWxvY1s1MDoxNTAsMV0sIGxhYmVsPSdZIENvbXBvbmVudCcpCiAgICAgICAgc2VsZi5heDEucGxvdChzZWxmLmRmX2NvbXAuaWxvY1s1MDoxNTAsMl0sIGxhYmVsPSdaIENvbXBvbmVudCcsIGNvbG9yPScjOTQwMEQzJywgYWxwaGE9MC41KQogICAgICAgIHNlbGYuYXgxLmxlZ2VuZChsb2M9NiwgcHJvcD17J3NpemUnOiAxMn0sIGJib3hfdG9fYW5jaG9yPSgxLCAwLjUpKQogICAgICAgIHBsdC5nY2EoKS5heGVzLmdldF94YXhpcygpLnNldF90aWNrcyhbXSkKICAgICAgICAKICAgICAgICBzZWxmLmF4Mi5zZXRfeWxhYmVsKCdNYWduaXR1ZGUgKGcpJywgc2l6ZT0xNCkKICAgICAgICBzZWxmLmF4Mi5wbG90KHNlbGYuZGYuaWxvY1s1MDoxNTAsMF0sIGxhYmVsPSAnQWNjZWxlcm9tZXRlclxuTWFnbml0dWRlJywgY29sb3I9JyNGRjhDMDAnLCBhbHBoYT0wLjUpCiAgICAgICAgc2VsZi5heDIubGVnZW5kKGxvYz02LCBwcm9wPXsnc2l6ZSc6IDEyfSwgYmJveF90b19hbmNob3I9KDEsIDAuNSkpCiAgICAgICAgCiAgICBkZWYgcGxvdF9oaWdoKHNlbGYpOgogICAgICAgIHNlbGYuYXgzLnBsb3Qoc2VsZi5kZi5pbG9jWzUwOjE1MCwwXSwgbGFiZWw9J0hpZ2hwYXNzZWRcbk1hZ25pdHVkZScsIGNvbG9yPSdjJykKICAgICAgICBzZWxmLmF4My5sZWdlbmQobG9jPTYsIHByb3A9eydzaXplJzogMTJ9LCBiYm94X3RvX2FuY2hvcj0oMSwgMC41KSkKICAgICAgICBw"}}]
["4bbfe53e80db6799096c1ea1be08d0e748b0f674-4","4bbfe53e80db6799096c1ea1be08d0e748b0f674",{"$cut":{"chars":16404,"head":"PHxmaW1fcHJlZml4fD4KJycnClRoZSBtYXN0ZXIgZGVjb21wb3NpdGlvbiBmaWxlIHVzZWQgdG8gZGVjb21wb3NlIHJhdyBhY2NlbGVyb21ldGVyIGRhdGEuClRoZSBmb2xsb3dpbmcgc3RlcHMgYXJlIGV4ZWN1dGVkIGluIHRoaXMgb3JkZXI6CiAgICBNYWduaXR1ZGVzIGZyb20gdGhyZWUgYXhlcyBvZiBhY2NlbGVyb21ldGVycyBhcmUgY2FsY3VsYXRlZAogICAgTWFnbml0dWRlcyBhcmUgaGlnaHBhc3MgZmlsdGVyZWQgYXQgMSBoZXJ0egogICAgUk1TIHZhbHVlcyBhcmUgY2FsY3VsYXRlZCBhbmQgYSBtb3Rpb24gdGhyZXNob2xkIHNsaWdodGx5XAogICAgYWJvdmUgdGhlIG5vaXNlIGZsb29yIGlzIGNyZWF0ZWQKICAgIERhdGEgaXMgdHJhbnNmb3JtZWQgaW4gYW4gZmZ0IDIwMCBwb2ludHMgKDEwIHNlY29uZHMpIGF0IGEgdGltZQogICAgQWxsIHRoZSByZW1haW5pbmcgdHNmcmVzaCBkZWNvbXBvc2l0aW9uIHNvdXJjZSBjb2RlIGlzIHJhbgogICAgaHR0cHM6Ly90c2ZyZXNoLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC90ZXh0L2xpc3Rfb2ZfZmVhdHVyZXMuaHRtbAogICAgRGVjb21wb3NlZCBkYXRhc2V0cyBhcmUgc2F2ZWQgZm9yIGVhY2ggYmFieQonJycKCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gc2NpcHkgaW1wb3J0IHNpZ25hbAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBvcwoKcGx0LnN0eWxlLnVzZSgnZ2dwbG90JykKCmNsYXNzIG5vaXNlOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG4pOgogICAgICAgIAogICAgICAgIHNlbGYuZGZfY29tcCA9IHBkLnJlYWRfY3N2KHN0cihuKSArICcuY3N2JykKICAgICAgICBzZWxmLmNvbHMgPSBbJ0xMJywnTEEnLCdDJywnUkEnLCdSTCddCiAgICAgICAgc2VsZi5kZiA9IHBkLkRhdGFGcmFtZSgpCiAgICAgICAgI2J1aWxkIGVtcHR5IGZmdCBkYXRhZnJhbWUKICAgICAgICBmb3IgdCBpbiBbJ01fJywgJ0ZfJ106CiAgICAgICAgICAgIGZvciBjIGluIHNlbGYuZGYuY29sdW1uczoKICAgICAgICAgICAgICAgIHNlbGYuZGZfZmZ0W3QgKyBjXSA9IFtdCiAgICAgICAgc2VsZi5wZXJjZW50X3JlbW92ZWQgPSAwLjAKICAgICAgICAKICAgICAgICAjcHJlcHJvY2VzcyB0aGUgbWFnbml0dWRlcyBhbmQgaGlnaCBwYXNzIGZpbHRlcgogICAgICAgIHNlbGYuY2FsY19tYWcoKQogICAgICAgICNzZWxmLnBsb3RfY29tcCgpCiAgICAgICAgc2VsZi5oaWdoX3Bhc3MoKQogICAgICAgICNzZWxmLnBsb3RfaGlnaCgpCiAgICAgICAgI3NlbGYucGxvdF9ub2lzZV9mbG9vcigpCiAgICAgICAgCiAgICAgICAgI3NldCB0aGUgbWFnbml0dWRlIG9mIHRoZSBub2lzZSBmbG9vciB0byBmaWx0ZXIgbm9pc2UKICAgICAgICBzZWxmLm1hZ25pdHVkZV90aHJlc2hvbGQoKQogICAgICAgIHNlbGYuY3ljbGVfd2luZG93KCkKICAgICAgICBzZWxmLmN5Y2xlX3dpbmRvd19sb2dpYygpCiAgICAgICAgc2VsZi5jeWNsZV9tYXNrKCkKICAgICAgICBzZWxmLnJlYnVpbGRfd2l0aF9tYXNrKCkKCiAgICAgICAgI3N0YXJ0IHByb2Nlc3NpbmcgZmZ0IGFuZCB0c2ZyZXNoCiAgICAgICAgc2VsZi5yb3VuZF9kb3duKCkKICAgICAgICBzZWxmLmRlY29tcG9zZSgpCiAgICAgICAgCiAgICBkZWYgZ3JvdXBlZChzZWxmLCBpdGVyYWJsZSwgbik6CiAgICAgICAgInMgLT4gKHMwLHMxLHMyLC4uLnNuLTEpLCAoc24sc24rMSxzbisyLC4uLnMybi0xKSwgKHMybixzMm4rMSxzMm4rMiwuLi5zM24tMSksIC4uLiIKICAgICAgICByZXR1cm4gemlwKCpbaXRlcihpdGVyYWJsZSldKm4pCgogICAgZGVmIGNhbGNfbWFnKHNlbGYpOgogICAgICAgICNjcmVhdGUgbWFnbml0dWRlcyBvZiBhY2NlbGVyb21ldGVycwogICAgICAgIGZvciBjLCAoeCwgeSwgeikgaW4gemlwKHNlbGYuY29scywgc2VsZi5ncm91cGVkKHNlbGYuZGZfY29tcC5jb2x1bW5zLCAzKSk6CiAgICAgICAgICAgIHNlbGYuZGZbY10gPSBucC5zcXJ0KG5wLnNxdWFyZShzZWxmLmRmX2NvbXBbeF0pICsgbnAuc3F1YXJlKHNlbGYuZGZfY29tcFt5XSkgKyBucC5zcXVhcmUoc2VsZi5kZl9jb21wW3pdKSkKICAgIAogICAgZGVmIHBsb3RfY29tcChzZWxmKToKICAgICAgICBmLCAoc2VsZi5heDEsIHNlbGYuYXgyLCBzZWxmLmF4MykgPSBwbHQuc3VicGxvdHMoMywgc2hhcmV4PVRydWUsIHNoYXJleT1GYWxzZSkKICAgICAgICBzZWxmLmF4MS5zZXRfdGl0bGUoJ0FjY2VsZXJvbWV0ZXIgUHJlcHJvY2Vzc2luZycsIHNpemU9MTQpCiAgICAgICAgc2VsZi5heDEucGxvdChzZWxmLmRmX2NvbXAuaWxvY1s1MDoxNTAsMF0sIGxhYmVsPSdYIENvbXBvbmVudCcpCiAgICAgICAgc2VsZi5heDEucGxvdChzZWxmLmRmX2NvbXAuaWxvY1s1MDoxNTAsMV0sIGxhYmVsPSdZIENvbXBvbmVudCcpCiAgICAgICAgc2VsZi5heDEucGxvdChzZWxmLmRmX2NvbXAuaWxvY1s1MDoxNTAsMl0sIGxhYmVsPSdaIENvbXBvbmVudCcsIGNvbG9yPScjOTQwMEQzJywgYWxwaGE9MC41KQogICAgICAgIHNlbGYuYXgxLmxlZ2VuZChsb2M9NiwgcHJvcD17J3NpemUnOiAxMn0sIGJib3hfdG9fYW5jaG9yPSgxLCAwLjUpKQogICAgICAgIHBsdC5nY2EoKS5heGVzLmdldF94YXhpcygpLnNldF90aWNrcyhbXSkKICAgICAgICAKICAgICAgICBzZWxmLmF4Mi5zZXRfeWxhYmVsKCdNYWduaXR1ZGUgKGcpJywgc2l6ZT0xNCkKICAgICAgICBzZWxmLmF4Mi5wbG90KHNlbGYuZGYuaWxvY1s1MDoxNTAsMF0sIGxhYmVsPSAnQWNjZWxlcm9tZXRlclxuTWFnbml0dWRlJywgY29sb3I9JyNGRjhDMDAnLCBhbHBoYT0wLjUpCiAgICAgICAgc2VsZi5heDIubGVnZW5kKGxvYz02LCBwcm9wPXsnc2l6ZSc6IDEyfSwgYmJveF90b19hbmNob3I9KDEsIDAuNSkpCiAgICAgICAgCiAgICBkZWYgcGxvdF9oaWdoKHNlbGYpOgogICAgICAgIHNlbGYuYXgzLnBsb3Qoc2VsZi5kZi5pbG9jWzUwOjE1MCwwXSwgbGFiZWw9J0hpZ2hwYXNzZWRcbk1hZ25pdHVkZScsIGNvbG9yPSdjJykKICAgICAgICBzZWxmLmF4My5sZWdlbmQobG9jPTYsIHByb3A9eydzaXplJzogMTJ9LCBiYm94X3RvX2FuY2hvcj0oMSwgMC41KSkKICAgICAgICBw"}}]
["4bbfe53e80db6799096c1ea1be08d0e748b0f674-5","4bbfe53e80db6799096c1ea1be08d0e748b0f674",{"$cut":{"chars":16404,"head":"PHxmaW1fcHJlZml4fD4KJycnClRoZSBtYXN0ZXIgZGVjb21wb3NpdGlvbiBmaWxlIHVzZWQgdG8gZGVjb21wb3NlIHJhdyBhY2NlbGVyb21ldGVyIGRhdGEuClRoZSBmb2xsb3dpbmcgc3RlcHMgYXJlIGV4ZWN1dGVkIGluIHRoaXMgb3JkZXI6CiAgICBNYWduaXR1ZGVzIGZyb20gdGhyZWUgYXhlcyBvZiBhY2NlbGVyb21ldGVycyBhcmUgY2FsY3VsYXRlZAogICAgTWFnbml0dWRlcyBhcmUgaGlnaHBhc3MgZmlsdGVyZWQgYXQgMSBoZXJ0egogICAgUk1TIHZhbHVlcyBhcmUgY2FsY3VsYXRlZCBhbmQgYSBtb3Rpb24gdGhyZXNob2xkIHNsaWdodGx5XAogICAgYWJvdmUgdGhlIG5vaXNlIGZsb29yIGlzIGNyZWF0ZWQKICAgIERhdGEgaXMgdHJhbnNmb3JtZWQgaW4gYW4gZmZ0IDIwMCBwb2ludHMgKDEwIHNlY29uZHMpIGF0IGEgdGltZQogICAgQWxsIHRoZSByZW1haW5pbmcgdHNmcmVzaCBkZWNvbXBvc2l0aW9uIHNvdXJjZSBjb2RlIGlzIHJhbgogICAgaHR0cHM6Ly90c2ZyZXNoLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC90ZXh0L2xpc3Rfb2ZfZmVhdHVyZXMuaHRtbAogICAgRGVjb21wb3NlZCBkYXRhc2V0cyBhcmUgc2F2ZWQgZm9yIGVhY2ggYmFieQonJycKCmltcG9ydCBwYW5kYXMgYXMgcGQKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gc2NpcHkgaW1wb3J0IHNpZ25hbAppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBvcwoKcGx0LnN0eWxlLnVzZSgnZ2dwbG90JykKCmNsYXNzIG5vaXNlOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG4pOgogICAgICAgIAogICAgICAgIHNlbGYuZGZfY29tcCA9IHBkLnJlYWRfY3N2KHN0cihuKSArICcuY3N2JykKICAgICAgICBzZWxmLmNvbHMgPSBbJ0xMJywnTEEnLCdDJywnUkEnLCdSTCddCiAgICAgICAgc2VsZi5kZiA9IHBkLkRhdGFGcmFtZSgpCiAgICAgICAgI2J1aWxkIGVtcHR5IGZmdCBkYXRhZnJhbWUKICAgICAgICBmb3IgdCBpbiBbJ01fJywgJ0ZfJ106CiAgICAgICAgICAgIGZvciBjIGluIHNlbGYuZGYuY29sdW1uczoKICAgICAgICAgICAgICAgIHNlbGYuZGZfZmZ0W3QgKyBjXSA9IFtdCiAgICAgICAgc2VsZi5wZXJjZW50X3JlbW92ZWQgPSAwLjAKICAgICAgICAKICAgICAgICAjcHJlcHJvY2VzcyB0aGUgbWFnbml0dWRlcyBhbmQgaGlnaCBwYXNzIGZpbHRlcgogICAgICAgIHNlbGYuY2FsY19tYWcoKQogICAgICAgICNzZWxmLnBsb3RfY29tcCgpCiAgICAgICAgc2VsZi5oaWdoX3Bhc3MoKQogICAgICAgICNzZWxmLnBsb3RfaGlnaCgpCiAgICAgICAgI3NlbGYucGxvdF9ub2lzZV9mbG9vcigpCiAgICAgICAgCiAgICAgICAgI3NldCB0aGUgbWFnbml0dWRlIG9mIHRoZSBub2lzZSBmbG9vciB0byBmaWx0ZXIgbm9pc2UKICAgICAgICBzZWxmLm1hZ25pdHVkZV90aHJlc2hvbGQoKQogICAgICAgIHNlbGYuY3ljbGVfd2luZG93KCkKICAgICAgICBzZWxmLmN5Y2xlX3dpbmRvd19sb2dpYygpCiAgICAgICAgc2VsZi5jeWNsZV9tYXNrKCkKICAgICAgICBzZWxmLnJlYnVpbGRfd2l0aF9tYXNrKCkKCiAgICAgICAgI3N0YXJ0IHByb2Nlc3NpbmcgZmZ0IGFuZCB0c2ZyZXNoCiAgICAgICAgc2VsZi5yb3VuZF9kb3duKCkKICAgICAgICBzZWxmLmRlY29tcG9zZSgpCiAgICAgICAgCiAgICBkZWYgZ3JvdXBlZChzZWxmLCBpdGVyYWJsZSwgbik6CiAgICAgICAgInMgLT4gKHMwLHMxLHMyLC4uLnNuLTEpLCAoc24sc24rMSxzbisyLC4uLnMybi0xKSwgKHMybixzMm4rMSxzMm4rMiwuLi5zM24tMSksIC4uLiIKICAgICAgICByZXR1cm4gemlwKCpbaXRlcihpdGVyYWJsZSldKm4pCgogICAgZGVmIGNhbGNfbWFnKHNlbGYpOgogICAgICAgICNjcmVhdGUgbWFnbml0dWRlcyBvZiBhY2NlbGVyb21ldGVycwogICAgICAgIGZvciBjLCAoeCwgeSwgeikgaW4gemlwKHNlbGYuY29scywgc2VsZi5ncm91cGVkKHNlbGYuZGZfY29tcC5jb2x1bW5zLCAzKSk6CiAgICAgICAgICAgIHNlbGYuZGZbY10gPSBucC5zcXJ0KG5wLnNxdWFyZShzZWxmLmRmX2NvbXBbeF0pICsgbnAuc3F1YXJlKHNlbGYuZGZfY29tcFt5XSkgKyBucC5zcXVhcmUoc2VsZi5kZl9jb21wW3pdKSkKICAgIAogICAgZGVmIHBsb3RfY29tcChzZWxmKToKICAgICAgICBmLCAoc2VsZi5heDEsIHNlbGYuYXgyLCBzZWxmLmF4MykgPSBwbHQuc3VicGxvdHMoMywgc2hhcmV4PVRydWUsIHNoYXJleT1GYWxzZSkKICAgICAgICBzZWxmLmF4MS5zZXRfdGl0bGUoJ0FjY2VsZXJvbWV0ZXIgUHJlcHJvY2Vzc2luZycsIHNpemU9MTQpCiAgICAgICAgc2VsZi5heDEucGxvdChzZWxmLmRmX2NvbXAuaWxvY1s1MDoxNTAsMF0sIGxhYmVsPSdYIENvbXBvbmVudCcpCiAgICAgICAgc2VsZi5heDEucGxvdChzZWxmLmRmX2NvbXAuaWxvY1s1MDoxNTAsMV0sIGxhYmVsPSdZIENvbXBvbmVudCcpCiAgICAgICAgc2VsZi5heDEucGxvdChzZWxmLmRmX2NvbXAuaWxvY1s1MDoxNTAsMl0sIGxhYmVsPSdaIENvbXBvbmVudCcsIGNvbG9yPScjOTQwMEQzJywgYWxwaGE9MC41KQogICAgICAgIHNlbGYuYXgxLmxlZ2VuZChsb2M9NiwgcHJvcD17J3NpemUnOiAxMn0sIGJib3hfdG9fYW5jaG9yPSgxLCAwLjUpKQogICAgICAgIHBsdC5nY2EoKS5heGVzLmdldF94YXhpcygpLnNldF90aWNrcyhbXSkKICAgICAgICAKICAgICAgICBzZWxmLmF4Mi5zZXRfeWxhYmVsKCdNYWduaXR1ZGUgKGcpJywgc2l6ZT0xNCkKICAgICAgICBzZWxmLmF4Mi5wbG90KHNlbGYuZGYuaWxvY1s1MDoxNTAsMF0sIGxhYmVsPSAnQWNjZWxlcm9tZXRlclxuTWFnbml0dWRlJywgY29sb3I9JyNGRjhDMDAnLCBhbHBoYT0wLjUpCiAgICAgICAgc2VsZi5heDIubGVnZW5kKGxvYz02LCBwcm9wPXsnc2l6ZSc6IDEyfSwgYmJveF90b19hbmNob3I9KDEsIDAuNSkpCiAgICAgICAgCiAgICBkZWYgcGxvdF9oaWdoKHNlbGYpOgogICAgICAgIHNlbGYuYXgzLnBsb3Qoc2VsZi5kZi5pbG9jWzUwOjE1MCwwXSwgbGFiZWw9J0hpZ2hwYXNzZWRcbk1hZ25pdHVkZScsIGNvbG9yPSdjJykKICAgICAgICBzZWxmLmF4My5sZWdlbmQobG9jPTYsIHByb3A9eydzaXplJzogMTJ9LCBiYm94X3RvX2FuY2hvcj0oMSwgMC41KSkKICAgICAgICBw"}}]
["3e830472a9a1726ec8d56012635773915fd0bec3-1","3e830472a9a1726ec8d56012635773915fd0bec3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gdHlwaW5nIGltcG9ydCBMaXN0Cgpmcm9tIC5wcm9ibGVtIGltcG9ydCBQcm9ibGVtLCBNYXJrZWRMb2NhdGlvbgoKIyBBIHBhcnNlciBmb3IgYSBzaW1wbGUgbWFwIGZvcm1hdCB3cml0dGVuIGJ5IEl2YXIgZGUgQnJ1aW4uCiMgQSA0eDMgbWFwIHdpdGggYSBzaW5nbGUgYWdlbnQgYXNzaWduZWQgdG8gdGVhbSAwIHdvdWxkIGxvb2sgYXMgZm9sbG93czoKIyB3aWR0aCA0CiMgaGVpZ2h0IDMKIyBAQEBACiMgQC4uQAojIEBAQEAKIyAxCiMgMSAxIDAKIwojIDIgMSAwCgoKY2xhc3MgTWFwUGFyc2VyOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcF9yb290OiBzdHIpOgogICAgICAgIHNlbGYubWFwX3Jvb3QgPSBtYXBfcm9vdAoKICAgIGRlZiBwYXJzZV9tYXAoc2VsZiwgbG9jYXRpb246IHN0cikgLT4gUHJvYmxlbToKICAgICAgICBpZiBsb2NhdGlvbi5lbmRzd2l0aCgiLm1hcCIpOgogICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHNlbGYubWFwX3Jvb3QsIGxvY2F0aW9uKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5tYXBfcm9vdCwgbG9jYXRpb24gKyAiLm1hcCIpCiAgICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGY6CiAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQogICAgICAgIHdpZHRoX2xpbmUgPSBsaXN0KGxpbmVzWzBdLnNwbGl0KCIgIikpCjx8ZmltX2hvbGV8PgogICAgICAgIGZvciBpIGluIHJhbmdlKGhlaWdodCk6CiAgICAgICAgICAgIGdyaWQuYXBwZW5kKFtpbnQoYyA9PSAiQCIpIGZvciBjIGluIGxpbmVzWzIgKyBpXV0pCiAgICAgICAgYWdlbnRzID0gaW50KGxpbmVzWzIgKyBoZWlnaHRdKQogICAgICAgIHN0YXJ0cyA9IFtdCiAgICAgICAgc3RhcnRpbmdfbGluZSA9IDMgKyBoZWlnaHQKICAgICAgICBmb3IgaSBpbiByYW5nZShhZ2VudHMpOgogICAgICAgICAgICBzdGFydF9saW5lID0gbGlzdChsaW5lc1tzdGFydGluZ19saW5lICsgaV0uc3BsaXQoIiAiKSkKICAgICAgICAgICAgeCA9IGludChzdGFydF9saW5lWzBdKQogICAgICAgICAgICB5ID0gaW50KHN0YXJ0X2xpbmVbMV0pCiAgICAgICAgICAgIGNvbG9yID0gaW50KHN0YXJ0X2xpbmVbMl0pCiAgICAgICAgICAgIHN0YXJ0cy5hcHBlbmQoTWFya2VkTG9jYXRpb24oY29sb3IsIHgsIHkpKQoKICAgICAgICBnb2FscyA9IFtdCiAgICAgICAgc3RhcnRpbmdfbGluZSA9IDQgKyBoZWlnaHQgKyBhZ2VudHMKICAgICAgICBmb3IgaSBpbiByYW5nZShhZ2VudHMpOgogICAgICAgICAgICBzdGFydF9saW5lID0gbGlzdChsaW5lc1tzdGFydGluZ19saW5lICsgaV0uc3BsaXQoIiAiKSkKICAgICAgICAgICAgeCA9IGludChzdGFydF9saW5lWzBdKQogICAgICAgICAgICB5ID0gaW50KHN0YXJ0X2xpbmVbMV0pCiAgICAgICAgICAgIGNvbG9yID0gaW50KHN0YXJ0X2xpbmVbMl0pCiAgICAgICAgICAgIGdvYWxzLmFwcGVuZChNYXJrZWRMb2NhdGlvbihjb2xvciwgeCwgeSkpCiAgICAgICAgcmV0dXJuIFByb2JsZW0oZ3JpZCwgd2lkdGgsIGhlaWdodCwgc3RhcnRzLCBnb2FscykKCiAgICBkZWYgcGFyc2VfYmF0Y2goc2VsZiwgZm9sZGVyOiBzdHIpIC0+IExpc3RbUHJvYmxlbV06CiAgICAgICAgcGF0aHMgPSBvcy5saXN0ZGlyKG9zLnBhdGguam9pbihzZWxmLm1hcF9yb290LCBmb2xkZXIpKQogICAgICAgIHJldHVybiBbc2VsZi5wYXJzZV9tYXAoc3RyKG9zLnBhdGguam9pbihmb2xkZXIsIHBhdGgpKSkgZm9yIHBhdGggaW4gcGF0aHNdCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgaGVpZ2h0X2xpbmUgPSBsaXN0KGxpbmVzWzFdLnNwbGl0KCIgIikpCiAgICAgICAgd2lkdGggPSBpbnQod2lkdGhfbGluZVsxXSkKICAgICAgICBoZWlnaHQgPSBpbnQoaGVpZ2h0X2xpbmVbMV0pCiAgICAgICAgZ3JpZCA9IFtdCjx8ZmltX2VuZHw+"]
["3e830472a9a1726ec8d56012635773915fd0bec3-2","3e830472a9a1726ec8d56012635773915fd0bec3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gdHlwaW5nIGltcG9ydCBMaXN0Cgpmcm9tIC5wcm9ibGVtIGltcG9ydCBQcm9ibGVtLCBNYXJrZWRMb2NhdGlvbgoKIyBBIHBhcnNlciBmb3IgYSBzaW1wbGUgbWFwIGZvcm1hdCB3cml0dGVuIGJ5IEl2YXIgZGUgQnJ1aW4uCiMgQSA0eDMgbWFwIHdpdGggYSBzaW5nbGUgYWdlbnQgYXNzaWduZWQgdG8gdGVhbSAwIHdvdWxkIGxvb2sgYXMgZm9sbG93czoKIyB3aWR0aCA0CiMgaGVpZ2h0IDMKIyBAQEBACiMgQC4uQAojIEBAQEAKIyAxCiMgMSAxIDAKIwojIDIgMSAwCgoKY2xhc3MgTWFwUGFyc2VyOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcF9yb290OiBzdHIpOgogICAgICAgIHNlbGYubWFwX3Jvb3QgPSBtYXBfcm9vdAoKICAgIGRlZiBwYXJzZV9tYXAoc2VsZiwgbG9jYXRpb246IHN0cikgLT4gUHJvYmxlbToKICAgICAgICBpZiBsb2NhdGlvbi5lbmRzd2l0aCgiLm1hcCIpOgogICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHNlbGYubWFwX3Jvb3QsIGxvY2F0aW9uKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5tYXBfcm9vdCwgbG9jYXRpb24gKyAiLm1hcCIpCiAgICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGY6CiAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQogICAgICAgIHdpZHRoX2xpbmUgPSBsaXN0KGxpbmVzWzBdLnNwbGl0KCIgIikpCiAgICAgICAgaGVpZ2h0X2xpbmUgPSBsaXN0KGxpbmVzWzFdLnNwbGl0KCIgIikpCiAgICAgICAgd2lkdGggPSBpbnQod2lkdGhfbGluZVsxXSkKICAgICAgICBoZWlnaHQgPSBpbnQoaGVpZ2h0X2xpbmVbMV0pCiAgICAgICAgZ3JpZCA9IFtdCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UoaGVpZ2h0KToKICAgICAgICAgICAgZ3JpZC5hcHBlbmQoW2ludChjID09ICJAIikgZm9yIGMgaW4gbGluZXNbMiArIGldXSkKICAgICAgICBhZ2VudHMgPSBpbnQobGluZXNbMiArIGhlaWdodF0pCiAgICAgICAgc3RhcnRzID0gW10KICAgICAgICBzdGFydGluZ19saW5lID0gMyArIGhlaWdodAogICAgICAgIGZvciBpIGluIHJhbmdlKGFnZW50cyk6CiAgICAgICAgICAgIHN0YXJ0X2xpbmUgPSBsaXN0KGxpbmVzW3N0YXJ0aW5nX2xpbmUgKyBpXS5zcGxpdCgiICIpKQogICAgICAgICAgICB4ID0gaW50KHN0YXJ0X2xpbmVbMF0pCiAgICAgICAgICAgIHkgPSBpbnQoc3RhcnRfbGluZVsxXSkKICAgICAgICAgICAgY29sb3IgPSBpbnQoc3RhcnRfbGluZVsyXSkKICAgICAgICAgICAgc3RhcnRzLmFwcGVuZChNYXJrZWRMb2NhdGlvbihjb2xvciwgeCwgeSkpCgogICAgICAgIGdvYWxzID0gW10KICAgICAgICBzdGFydGluZ19saW5lID0gNCArIGhlaWdodCArIGFnZW50cwogICAgICAgIGZvciBpIGluIHJhbmdlKGFnZW50cyk6CiAgICAgICAgICAgIHN0YXJ0X2xpbmUgPSBsaXN0KGxpbmVzW3N0YXJ0aW5nX2xpbmUgKyBpXS5zcGxpdCgiICIpKQogICAgICAgICAgICB4ID0gaW50KHN0YXJ0X2xpbmVbMF0pCiAgICAgICAgICAgIHkgPSBpbnQoc3RhcnRfbGluZVsxXSkKICAgICAgICAgICAgY29sb3IgPSBpbnQoc3RhcnRfbGluZVsyXSkKICAgICAgICAgICAgZ29hbHMuYXBwZW5kKE1hcmtlZExvY2F0aW9uKGNvbG9yLCB4LCB5KSkKICAgICAgICByZXR1cm4gUHJvYmxlbShncmlkLCB3aWR0aCwgaGVpZ2h0LCBzdGFydHMsIGdvYWxzKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIHBhcnNlX2JhdGNoKHNlbGYsIGZvbGRlcjogc3RyKSAtPiBMaXN0W1Byb2JsZW1dOgogICAgICAgIHBhdGhzID0gb3MubGlzdGRpcihvcy5wYXRoLmpvaW4oc2VsZi5tYXBfcm9vdCwgZm9sZGVyKSkKICAgICAgICByZXR1cm4gW3NlbGYucGFyc2VfbWFwKHN0cihvcy5wYXRoLmpvaW4oZm9sZGVyLCBwYXRoKSkpIGZvciBwYXRoIGluIHBhdGhzXQo8fGZpbV9lbmR8Pg=="]
["3e830472a9a1726ec8d56012635773915fd0bec3-3","3e830472a9a1726ec8d56012635773915fd0bec3","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG9zCmZyb20gdHlwaW5nIGltcG9ydCBMaXN0Cgpmcm9tIC5wcm9ibGVtIGltcG9ydCBQcm9ibGVtLCBNYXJrZWRMb2NhdGlvbgoKIyBBIHBhcnNlciBmb3IgYSBzaW1wbGUgbWFwIGZvcm1hdCB3cml0dGVuIGJ5IEl2YXIgZGUgQnJ1aW4uCiMgQSA0eDMgbWFwIHdpdGggYSBzaW5nbGUgYWdlbnQgYXNzaWduZWQgdG8gdGVhbSAwIHdvdWxkIGxvb2sgYXMgZm9sbG93czoKIyB3aWR0aCA0CiMgaGVpZ2h0IDMKIyBAQEBACiMgQC4uQAojIEBAQEAKIyAxCiMgMSAxIDAKIwojIDIgMSAwCgoKY2xhc3MgTWFwUGFyc2VyOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcF9yb290OiBzdHIpOgo8fGZpbV9ob2xlfD4KICAgIGRlZiBwYXJzZV9tYXAoc2VsZiwgbG9jYXRpb246IHN0cikgLT4gUHJvYmxlbToKICAgICAgICBpZiBsb2NhdGlvbi5lbmRzd2l0aCgiLm1hcCIpOgogICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHNlbGYubWFwX3Jvb3QsIGxvY2F0aW9uKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5tYXBfcm9vdCwgbG9jYXRpb24gKyAiLm1hcCIpCiAgICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGY6CiAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQogICAgICAgIHdpZHRoX2xpbmUgPSBsaXN0KGxpbmVzWzBdLnNwbGl0KCIgIikpCiAgICAgICAgaGVpZ2h0X2xpbmUgPSBsaXN0KGxpbmVzWzFdLnNwbGl0KCIgIikpCiAgICAgICAgd2lkdGggPSBpbnQod2lkdGhfbGluZVsxXSkKICAgICAgICBoZWlnaHQgPSBpbnQoaGVpZ2h0X2xpbmVbMV0pCiAgICAgICAgZ3JpZCA9IFtdCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UoaGVpZ2h0KToKICAgICAgICAgICAgZ3JpZC5hcHBlbmQoW2ludChjID09ICJAIikgZm9yIGMgaW4gbGluZXNbMiArIGldXSkKICAgICAgICBhZ2VudHMgPSBpbnQobGluZXNbMiArIGhlaWdodF0pCiAgICAgICAgc3RhcnRzID0gW10KICAgICAgICBzdGFydGluZ19saW5lID0gMyArIGhlaWdodAogICAgICAgIGZvciBpIGluIHJhbmdlKGFnZW50cyk6CiAgICAgICAgICAgIHN0YXJ0X2xpbmUgPSBsaXN0KGxpbmVzW3N0YXJ0aW5nX2xpbmUgKyBpXS5zcGxpdCgiICIpKQogICAgICAgICAgICB4ID0gaW50KHN0YXJ0X2xpbmVbMF0pCiAgICAgICAgICAgIHkgPSBpbnQoc3RhcnRfbGluZVsxXSkKICAgICAgICAgICAgY29sb3IgPSBpbnQoc3RhcnRfbGluZVsyXSkKICAgICAgICAgICAgc3RhcnRzLmFwcGVuZChNYXJrZWRMb2NhdGlvbihjb2xvciwgeCwgeSkpCgogICAgICAgIGdvYWxzID0gW10KICAgICAgICBzdGFydGluZ19saW5lID0gNCArIGhlaWdodCArIGFnZW50cwogICAgICAgIGZvciBpIGluIHJhbmdlKGFnZW50cyk6CiAgICAgICAgICAgIHN0YXJ0X2xpbmUgPSBsaXN0KGxpbmVzW3N0YXJ0aW5nX2xpbmUgKyBpXS5zcGxpdCgiICIpKQogICAgICAgICAgICB4ID0gaW50KHN0YXJ0X2xpbmVbMF0pCiAgICAgICAgICAgIHkgPSBpbnQoc3RhcnRfbGluZVsxXSkKICAgICAgICAgICAgY29sb3IgPSBpbnQoc3RhcnRfbGluZVsyXSkKICAgICAgICAgICAgZ29hbHMuYXBwZW5kKE1hcmtlZExvY2F0aW9uKGNvbG9yLCB4LCB5KSkKICAgICAgICByZXR1cm4gUHJvYmxlbShncmlkLCB3aWR0aCwgaGVpZ2h0LCBzdGFydHMsIGdvYWxzKQoKICAgIGRlZiBwYXJzZV9iYXRjaChzZWxmLCBmb2xkZXI6IHN0cikgLT4gTGlzdFtQcm9ibGVtXToKICAgICAgICBwYXRocyA9IG9zLmxpc3RkaXIob3MucGF0aC5qb2luKHNlbGYubWFwX3Jvb3QsIGZvbGRlcikpCiAgICAgICAgcmV0dXJuIFtzZWxmLnBhcnNlX21hcChzdHIob3MucGF0aC5qb2luKGZvbGRlciwgcGF0aCkpKSBmb3IgcGF0aCBpbiBwYXRoc10KPHxmaW1fc3VmZml4fD4KICAgICAgICBzZWxmLm1hcF9yb290ID0gbWFwX3Jvb3QKCjx8ZmltX2VuZHw+"]
["f29fcb152d2956572ee6c7f386195be58d9b3fc1-1","f29fcb152d2956572ee6c7f386195be58d9b3fc1","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IG9zLHN5cwppbXBvcnQgcmUKZnJvbSBQSUwgaW1wb3J0IEltYWdlCgppZiBsZW4oc3lzLmFyZ3YpICE9IDM6CiAgICBwcmludCgiVXNlOiIsIHN5cy5hcmd2WzBdLCAiPHB4X2ZpbGU+IDxwbmdfZmlsZT4iKQogICAgc3lzLmV4aXQoMSkKZWxzZToKICAgIHB4ZmlsZT1zeXMuYXJndlsxXQogICAgcG5nZmlsZT1zeXMuYXJndlsyXQoKcHggPSBvcGVuKHB4ZmlsZSwgInJiIikKd2lkdGggPSBpbnQuZnJvbV9ieXRlcyhweC5yZWFkKDIpLCBieXRlb3JkZXI9J2xpdHRsZScpCmhlaWdodCA9IGludC5mcm9tX2J5dGVzKHB4LnJlYWQoMiksIGJ5dGVvcmRlcj0nbGl0dGxlJykKCmltZyA9IEltYWdlLm5ldygnUkdCJywgKHdpZHRoLCBoZWlnaHQpKQpwaXhtYXAgPSBpbWcubG9hZCgpCgpwcmludCgid2lkdGg6ICIsIHdpZHRoKQpwcmludCgiaGVpZ2h0OiAiLCBoZWlnaHQpCgpmb3IgeSBpbiByYW5nZSgwLGhlaWdodCk6Cjx8ZmltX2hvbGV8PgogICAgICAgIEI1ID0gcGl4ZWwgJiAweDFmOwogICAgICAgIHIgPSBpbnQoKFI1ICogMjU1KSAvIDMxKTsKICAgICAgICBnID0gaW50KChHNiAqIDI1NSkgLyA2Myk7CiAgICAgICAgYiA9IGludCgoQjUgKiAyNTUpIC8gMzEpOwogICAgICAgIHBpeG1hcFt4LHldID0gKHIsIGcsIGIpCgppbWcuc2F2ZShwbmdmaWxlKQppbWcuY2xvc2UKcHguY2xvc2UKCjx8ZmltX3N1ZmZpeHw+CiAgICBmb3IgeCBpbiByYW5nZSgwLHdpZHRoKToKICAgICAgICBwaXhlbCA9IGludC5mcm9tX2J5dGVzKHB4LnJlYWQoMiksIGJ5dGVvcmRlcj0nbGl0dGxlJykKICAgICAgICBSNSA9IChwaXhlbCA+PiAxMSkgJiAweDFmOwogICAgICAgIEc2ID0gKHBpeGVsID4+IDUpICYgMHgzZjsKPHxmaW1fZW5kfD4="]
["9d5ab98745166145e21ee932040850bb2748d605-1","9d5ab98745166145e21ee932040850bb2748d605","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCgojIEF1dGhvcjogUmFqZXNoIFJhamVuZHJhbiA8cmpzaHJqbmRybkBnbWFpbC5jb20+LgoKIiIiCgpUaGlzIHNjcmlwdCB3aWxsIHJlc3RvcmUgY29tcGxldGUgYmFja3VwIGZyb20gdGhlIGJhY2t1cCBkYXRhIGZvbGRlci4KClRvIHJlc3RvcmUgdGhlIGNhc3NhbmRyYSBkYXRhYmFzZSBzbmFwc2hvdAoKMS4gSWYgaXQncyBhbiBvbGQgY2Fzc2FuZHJhIGluc3RhbmNlLCBkbyB0aGUgZm9sbG93aW5nIGVsc2UgY29udGludWUgdG8gc3RlcCAyCiAgIGEuIHN0b3AgY2Fzc2FuZHJhCiAgIGIuIGRlbGV0ZSB0aGUgZGF0YSAodXN1YWxseSBzdWRvIHJtIC1yZiAvdmFyL2xpYi9jYXNzYW5kcmEvKikKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICBjLiBzdGFydCBjYXNzYW5kcmEKCjx8ZmltX2VuZHw+"]
["9d5ab98745166145e21ee932040850bb2748d605-2","9d5ab98745166145e21ee932040850bb2748d605","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCgojIEF1dGhvcjogUmFqZXNoIFJhamVuZHJhbiA8cmpzaHJqbmRybkBnbWFpbC5jb20+LgoKIiIiCgpUaGlzIHNjcmlwdCB3aWxsIHJlc3RvcmUgY29tcGxldGUgYmFja3VwIGZyb20gdGhlIGJhY2t1cCBkYXRhIGZvbGRlci4KClRvIHJlc3RvcmUgdGhlIGNhc3NhbmRyYSBkYXRhYmFzZSBzbmFwc2hvdAoKPHxmaW1faG9sZXw+CgoyLiBSZXN0b3JlIHRoZSBzY2hlbWEKICAgY3Fsc2ggLWUgInNvdXJjZSAnYmFja3VwX2Rpci9kYl9zY2hlbWEuY3FsJzsiCgozLiBSZXN0b3JlIHRoZSBkYXRhCiAgIHVzYWdlOiAuL2Nhc3NhbmRyYV9yZXN0b3JlLnB5IC0taG9zdCA8aXAgb2YgdGhlIHNlcnZlcj4gc25hcHNob3RfZGlyZWN0b3J5X25hbWUKCiIiIgoKZnJvbSBvcyBpbXBvcnQgd2Fsaywgc2VwCmZyb20gc3VicHJvY2VzcyBpbXBvcnQgU1RET1VULCBjYWxsCmZyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCgpwYXJzZXIgPSBBcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iUmVzdG9yZSBjYXNzYW5kcmEgc25hcHNob3QiKQpwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWhvc3QiLCBkZWZhdWx0PSIxMjcuMC4wLjEiLCBoZWxwPSJpcCBhZGRyZXNzIG9mIGNhc3NhbmRyYSBpbnN0YW5jZS4gXAogICAgICAgIERlZmF1bHQ6IDEyNy4wLjAuMSIpCnBhcnNlci5hZGRfYXJndW1lbnQoInNuYXBzaG90ZGlyIiwgbWV0YXZhcj0ic25hcHNob3RkaXJlY3RvcnkiLCBoZWxwPSJzbmFwc2hvdCBkaXJlY3RvcnkgbmFtZSBvciBwYXRoIikKYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCnJvb3RfbGV2ZWxzID0gYXJncy5zbmFwc2hvdGRpci5jb3VudChzZXApCmZvciByb290LCBkaXJzLCBmaWxlcyBpbiB3YWxrKGFyZ3Muc25hcHNob3RkaXIpOgogICAgaWYgcm9vdC5jb3VudChzZXApID09IHJvb3RfbGV2ZWxzICsgMjoKICAgICAgICBwcmludChyb290KQogICAgICAgIGNhbGwoWyJzc3RhYmxlbG9hZGVyIiwgIi12IiwgIi1kIiwgYXJncy5ob3N0LCByb290XSwgc3RkZXJyPVNURE9VVCkKPHxmaW1fc3VmZml4fD4KMS4gSWYgaXQncyBhbiBvbGQgY2Fzc2FuZHJhIGluc3RhbmNlLCBkbyB0aGUgZm9sbG93aW5nIGVsc2UgY29udGludWUgdG8gc3RlcCAyCiAgIGEuIHN0b3AgY2Fzc2FuZHJhCiAgIGIuIGRlbGV0ZSB0aGUgZGF0YSAodXN1YWxseSBzdWRvIHJtIC1yZiAvdmFyL2xpYi9jYXNzYW5kcmEvKikKICAgYy4gc3RhcnQgY2Fzc2FuZHJhCjx8ZmltX2VuZHw+"]
["9d5ab98745166145e21ee932040850bb2748d605-3","9d5ab98745166145e21ee932040850bb2748d605","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9weXRob24zCgojIEF1dGhvcjogUmFqZXNoIFJhamVuZHJhbiA8cmpzaHJqbmRybkBnbWFpbC5jb20+LgoKIiIiCgpUaGlzIHNjcmlwdCB3aWxsIHJlc3RvcmUgY29tcGxldGUgYmFja3VwIGZyb20gdGhlIGJhY2t1cCBkYXRhIGZvbGRlci4KClRvIHJlc3RvcmUgdGhlIGNhc3NhbmRyYSBkYXRhYmFzZSBzbmFwc2hvdAoKMS4gSWYgaXQncyBhbiBvbGQgY2Fzc2FuZHJhIGluc3RhbmNlLCBkbyB0aGUgZm9sbG93aW5nIGVsc2UgY29udGludWUgdG8gc3RlcCAyCiAgIGEuIHN0b3AgY2Fzc2FuZHJhCiAgIGIuIGRlbGV0ZSB0aGUgZGF0YSAodXN1YWxseSBzdWRvIHJtIC1yZiAvdmFyL2xpYi9jYXNzYW5kcmEvKikKICAgYy4gc3RhcnQgY2Fzc2FuZHJhCgoyLiBSZXN0b3JlIHRoZSBzY2hlbWEKICAgY3Fsc2ggLWUgInNvdXJjZSAnYmFja3VwX2Rpci9kYl9zY2hlbWEuY3FsJzsiCgozLiBSZXN0b3JlIHRoZSBkYXRhCiAgIHVzYWdlOiAuL2Nhc3NhbmRyYV9yZXN0b3JlLnB5IC0taG9zdCA8aXAgb2YgdGhlIHNlcnZlcj4gc25hcHNob3RfZGlyZWN0b3J5X25hbWUKCiIiIgoKZnJvbSBvcyBpbXBvcnQgd2Fsaywgc2VwCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBTVERPVVQsIGNhbGwKZnJvbSBhcmdwYXJzZSBpbXBvcnQgQXJndW1lbnRQYXJzZXIKCnBhcnNlciA9IEFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSJSZXN0b3JlIGNhc3NhbmRyYSBzbmFwc2hvdCIpCjx8ZmltX2VuZHw+"]
["4bbe984d29b211235e7a65aff84cb40555072f4f-1","4bbe984d29b211235e7a65aff84cb40555072f4f","PHxmaW1fcHJlZml4fD4KIyBPcmlnaW5hbCBzY2FuLW5ldHdvcmsucHkgYnkgb21pcSBmcm9tIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL29taXEvMmYzZWRmMjYyNGE3MmU4OWJhM2EzYTAwOWE2NzNhMjEKIyBhbmQgaHR0cHM6Ly9tYWtlcmhhY2tzLmNvbS9kZXRlY3QtYW5kLWxpc3QtcmFzcGJlcnJ5LXBpLWFuZC1vdGhlci1ib2FyZHMtb24teW91ci1uZXR3b3JrLwojIEFsdGVyZWQgYnkgTWFyayBIYXJyaXMgZm9yIExpdmVTZWN0aW9uYWwKIyBNdXN0IGluc3RhbGwgbm1hcDsgYXB0LWdldCBpbnN0YWxsIG5tYXAKIyBNdXN0IGluc3RhbGwgcHl0aG9uLW5tYXA7IHN1ZG8gcGlwMyBpbnN0YWxsIHB5dGhvbi1ubWFwCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmltcG9ydCBubWFwCmltcG9ydCBzb2NrZXQKCjx8ZmltX2VuZHw+"]
["4bbe984d29b211235e7a65aff84cb40555072f4f-2","4bbe984d29b211235e7a65aff84cb40555072f4f","PHxmaW1fcHJlZml4fD4KIyBPcmlnaW5hbCBzY2FuLW5ldHdvcmsucHkgYnkgb21pcSBmcm9tIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL29taXEvMmYzZWRmMjYyNGE3MmU4OWJhM2EzYTAwOWE2NzNhMjEKIyBhbmQgaHR0cHM6Ly9tYWtlcmhhY2tzLmNvbS9kZXRlY3QtYW5kLWxpc3QtcmFzcGJlcnJ5LXBpLWFuZC1vdGhlci1ib2FyZHMtb24teW91ci1uZXR3b3JrLwojIEFsdGVyZWQgYnkgTWFyayBIYXJyaXMgZm9yIExpdmVTZWN0aW9uYWwKIyBNdXN0IGluc3RhbGwgbm1hcDsgYXB0LWdldCBpbnN0YWxsIG5tYXAKIyBNdXN0IGluc3RhbGwgcHl0aG9uLW5tYXA7IHN1ZG8gcGlwMyBpbnN0YWxsIHB5dGhvbi1ubWFwCgppbXBvcnQgbm1hcAppbXBvcnQgc29ja2V0Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCmRlZiBzY2FuX25ldHdvcmsoKToKICAgIG1hY2hpbmVzID0gW10KIyAgICBwcmludCgiT25lIE1vbWVudCAtIFNjYW5uaW5nIExvY2FsIE5ldHdvcmsgZm9yIE90aGVyIExpdmVTZWN0aW9uYWwgTWFwcyIpCjx8ZmltX2VuZHw+"]
["4bbe984d29b211235e7a65aff84cb40555072f4f-3","4bbe984d29b211235e7a65aff84cb40555072f4f","PHxmaW1fcHJlZml4fD4KIyBPcmlnaW5hbCBzY2FuLW5ldHdvcmsucHkgYnkgb21pcSBmcm9tIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL29taXEvMmYzZWRmMjYyNGE3MmU4OWJhM2EzYTAwOWE2NzNhMjEKIyBhbmQgaHR0cHM6Ly9tYWtlcmhhY2tzLmNvbS9kZXRlY3QtYW5kLWxpc3QtcmFzcGJlcnJ5LXBpLWFuZC1vdGhlci1ib2FyZHMtb24teW91ci1uZXR3b3JrLwojIEFsdGVyZWQgYnkgTWFyayBIYXJyaXMgZm9yIExpdmVTZWN0aW9uYWwKIyBNdXN0IGluc3RhbGwgbm1hcDsgYXB0LWdldCBpbnN0YWxsIG5tYXAKIyBNdXN0IGluc3RhbGwgcHl0aG9uLW5tYXA7IHN1ZG8gcGlwMyBpbnN0YWxsIHB5dGhvbi1ubWFwCgppbXBvcnQgbm1hcAppbXBvcnQgc29ja2V0CgpkZWYgc2Nhbl9uZXR3b3JrKCk6CiAgICBtYWNoaW5lcyA9IFtdCiMgICAgcHJpbnQoIk9uZSBNb21lbnQgLSBTY2FubmluZyBMb2NhbCBOZXR3b3JrIGZvciBPdGhlciBMaXZlU2VjdGlvbmFsIE1hcHMiKQoKICAgICMgcm91dGluZSBmcm9tIGh0dHBzOi8vd3d3LnczcmVzb3VyY2UuY29tL3B5dGhvbi1leGVyY2lzZXMvcHl0aG9uLWJhc2ljLWV4ZXJjaXNlLTU1LnBocAogICAgbG9jX2lwID0gKFtsIGZvciBsIGluIChbaXAgZm9yIGlwIGluIHNvY2tldC5nZXRob3N0YnluYW1lX2V4KHNvY2tldC5nZXRob3N0bmFtZSgpKVsyXQogICAgICAgICAgICAgIGlmIG5vdCBpcC5zdGFydHN3aXRoKCIxMjcuIildWzoxXSwgW1socy5jb25uZWN0KCgnOC44LjguOCcsIDUzKSksCiAgICAgICAgICAgICAgcy5nZXRzb2NrbmFtZSgpWzBdLCBzLmNsb3NlKCkpIGZvciBzIGluIFtzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULAogICAgICAgICAgICAgIHNvY2tldC5TT0NLX0RHUkFNKV1dWzBdWzFdXSkgaWYgbF1bMF1bMF0pCgogICAgbWFjaGluZXMuYXBwZW5kKGxvY19pcCArICIgLSAiICsgc29ja2V0LmdldGhvc3RuYW1lKCkgKyAiOiBDdXJyZW50IikKICAgIHByZV9pcCA9IGxvY19pcC5ycGFydGl0aW9uKCcuJykKCiAgICBubSA9IG5tYXAuUG9ydFNjYW5uZXIoKQogICAgbm0uc2NhbihwcmVfaXBbMF0gKyAnLjAvMjQnLCAnMjInKSAjIFNjYW4gbmV0d29yayBmb3IgcG9ydCAyMiAoc3NoKQoKICAgICMgaXRlcmF0ZSBvdmVyIHRoZSBob3N0cyBvbiB0aGUgbmV0d29yawogICAgZm9yIGhvc3QgaW4gc29ydGVkKG5tLmFsbF9ob3N0cygpKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGlmIGxlbihubVtob3N0XVsndmVuZG9yJ10pID4gMDoKICAgICAgICAgICAgdmVuZG9yID0gdHVwbGUobm1baG9zdF1bJ3ZlbmRvciddLnZhbHVlcygpKQogICAgICAgICAgICBpZiBzdHIodmVuZG9yKS5maW5kKCdSYXNwYmVycnknKSA+IDAgYW5kIG5tW2hvc3RdLmhvc3RuYW1lKCkuc3RhcnRzd2l0aCgibGl2ZXMiKTogIyBsaXZlc2VjdGlvbmFsIGhvc3RuYW1lPwogICAgICAgICAgICAgICAgaDEsaDIgPSBubVtob3N0XS5ob3N0bmFtZSgpLnNwbGl0KCIuIikKPHxmaW1fZW5kfD4="]
["4bbe984d29b211235e7a65aff84cb40555072f4f-4","4bbe984d29b211235e7a65aff84cb40555072f4f","PHxmaW1fcHJlZml4fD4KIyBPcmlnaW5hbCBzY2FuLW5ldHdvcmsucHkgYnkgb21pcSBmcm9tIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL29taXEvMmYzZWRmMjYyNGE3MmU4OWJhM2EzYTAwOWE2NzNhMjEKIyBhbmQgaHR0cHM6Ly9tYWtlcmhhY2tzLmNvbS9kZXRlY3QtYW5kLWxpc3QtcmFzcGJlcnJ5LXBpLWFuZC1vdGhlci1ib2FyZHMtb24teW91ci1uZXR3b3JrLwojIEFsdGVyZWQgYnkgTWFyayBIYXJyaXMgZm9yIExpdmVTZWN0aW9uYWwKIyBNdXN0IGluc3RhbGwgbm1hcDsgYXB0LWdldCBpbnN0YWxsIG5tYXAKIyBNdXN0IGluc3RhbGwgcHl0aG9uLW5tYXA7IHN1ZG8gcGlwMyBpbnN0YWxsIHB5dGhvbi1ubWFwCgppbXBvcnQgbm1hcAppbXBvcnQgc29ja2V0CgpkZWYgc2Nhbl9uZXR3b3JrKCk6CiAgICBtYWNoaW5lcyA9IFtdCiMgICAgcHJpbnQoIk9uZSBNb21lbnQgLSBTY2FubmluZyBMb2NhbCBOZXR3b3JrIGZvciBPdGhlciBMaXZlU2VjdGlvbmFsIE1hcHMiKQoKICAgICMgcm91dGluZSBmcm9tIGh0dHBzOi8vd3d3LnczcmVzb3VyY2UuY29tL3B5dGhvbi1leGVyY2lzZXMvcHl0aG9uLWJhc2ljLWV4ZXJjaXNlLTU1LnBocAogICAgbG9jX2lwID0gKFtsIGZvciBsIGluIChbaXAgZm9yIGlwIGluIHNvY2tldC5nZXRob3N0YnluYW1lX2V4KHNvY2tldC5nZXRob3N0bmFtZSgpKVsyXQogICAgICAgICAgICAgIGlmIG5vdCBpcC5zdGFydHN3aXRoKCIxMjcuIildWzoxXSwgW1socy5jb25uZWN0KCgnOC44LjguOCcsIDUzKSksCiAgICAgICAgICAgICAgcy5nZXRzb2NrbmFtZSgpWzBdLCBzLmNsb3NlKCkpIGZvciBzIGluIFtzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULAogICAgICAgICAgICAgIHNvY2tldC5TT0NLX0RHUkFNKV1dWzBdWzFdXSkgaWYgbF1bMF1bMF0pCgogICAgbWFjaGluZXMuYXBwZW5kKGxvY19pcCArICIgLSAiICsgc29ja2V0LmdldGhvc3RuYW1lKCkgKyAiOiBDdXJyZW50IikKICAgIHByZV9pcCA9IGxvY19pcC5ycGFydGl0aW9uKCcuJykKCiAgICBubSA9IG5tYXAuUG9ydFNjYW5uZXIoKQogICAgbm0uc2NhbihwcmVfaXBbMF0gKyAnLjAvMjQnLCAnMjInKSAjIFNjYW4gbmV0d29yayBmb3IgcG9ydCAyMiAoc3NoKQoKICAgICMgaXRlcmF0ZSBvdmVyIHRoZSBob3N0cyBvbiB0aGUgbmV0d29yawogICAgZm9yIGhvc3QgaW4gc29ydGVkKG5tLmFsbF9ob3N0cygpKToKICAgICAgICBpZiBsZW4obm1baG9zdF1bJ3ZlbmRvciddKSA+IDA6CiAgICAgICAgICAgIHZlbmRvciA9IHR1cGxlKG5tW2hvc3RdWyd2ZW5kb3InXS52YWx1ZXMoKSkKICAgICAgICAgICAgaWYgc3RyKHZlbmRvcikuZmluZCgnUmFzcGJlcnJ5JykgPiAwIGFuZCBubVtob3N0XS5ob3N0bmFtZSgpLnN0YXJ0c3dpdGgoImxpdmVzIik6ICMgbGl2ZXNlY3Rpb25hbCBob3N0bmFtZT8KICAgICAgICAgICAgICAgIGgxLGgyID0gbm1baG9zdF0uaG9zdG5hbWUoKS5zcGxpdCgiLiIpCiAgICAgICAgICAgICAgICBtYWNoaW5lcy5hcHBlbmQoaG9zdCArICIgLSAiICsgaDEpCgogICAgcmV0dXJuKG1hY2hpbmVzKQo8fGZpbV9ob2xlfD4KICAgIGZvciBtYWNoaW5lIGluIG1hY2hpbmVzOgogICAgICAgIHByaW50KG1hY2hpbmUpCjx8ZmltX3N1ZmZpeHw+CgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgcHJpbnQoIk9uZSBNb21lbnQgLSBTY2FubmluZyBMb2NhbCBOZXR3b3JrIGZvciBPdGhlciBMaXZlU2VjdGlvbmFsIE1hcHMiKQogICAgbWFjaGluZXMgPSBzY2FuX25ldHdvcmsoKQo8fGZpbV9lbmR8Pg=="]
["3e0d28917ec1e1469e17b51f0de264545f9a1a2a-1","3e0d28917ec1e1469e17b51f0de264545f9a1a2a","PHxmaW1fcHJlZml4fD4KZnJvbSB1dGlsIGltcG9ydCB0ZXN0QXR0cmlidXRlLCBlcnJvcgpmcm9tIHV0aWwgaW1wb3J0IHRlc3RJbnRBdHRyaWJ1dGUKCmRlZiB0ZXN0KCk6CiAgICBwcmludCAndGVzdGluZyBzb3VyY2UgY29kZSBzeW50YXgnCiAgICBmcm9tIHhtbC5kb20uaHRtbCBpbXBvcnQgSFRNTElGcmFtZUVsZW1lbnQKICAgIGZyb20geG1sLmRvbSBpbXBvcnQgaW1wbGVtZW50YXRpb24KICAgIGRvYyA9IGltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgnVGl0bGUnKQogICAgZiA9IGRvYy5jcmVhdGVFbGVtZW50KCdJRnJhbWUnKQoKICAgIHByaW50ICd0ZXN0aW5nIGdldC9zZXQnCiAgICB0ZXN0QXR0cmlidXRlKGYsJ2hlaWdodCcpOwogICAgdGVzdEF0dHJpYnV0ZShmLCdsb25nRGVzYycpOwogICAgdGVzdEF0dHJpYnV0ZShmLCdtYXJnaW5IZWlnaHQnKTsKPHxmaW1faG9sZXw+CiAgICBydCA9IGYuX2dldF9hbGlnbigpCiAgICBpZiBydCAhPSAnTGVmdCc6CiAgICAgICAgZXJyb3IoJ2dldC9zZXQgb2YgYWxpZ24gZmFpbGVkJykKICAgIGYuX3NldF9mcmFtZUJvcmRlcignbGVmdCcpCiAgICBydCA9IGYuX2dldF9mcmFtZUJvcmRlcigpCiAgICBpZiBydCAhPSAnTGVmdCc6CiAgICAgICAgZXJyb3IoJ2dldC9zZXQgb2YgZnJhbWVCb3JkZXIgZmFpbGVkJykKICAgIGYuX3NldF9zY3JvbGxpbmcoJ2F1dG8nKQogICAgcnQgPSBmLl9nZXRfc2Nyb2xsaW5nKCkKICAgIGlmIHJ0ICE9ICdBdXRvJzoKICAgICAgICBlcnJvcignZ2V0L3NldCBvZiBzY3JvbGxpbmcgZmFpbGVkJykKCiAgICBwcmludCAnZ2V0L3NldCB3b3JrcycKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdGVzdCgpCjx8ZmltX3N1ZmZpeHw+CiAgICB0ZXN0QXR0cmlidXRlKGYsJ21hcmdpbldpZHRoJyk7CiAgICB0ZXN0QXR0cmlidXRlKGYsJ3NyYycpOwogICAgdGVzdEF0dHJpYnV0ZShmLCd3aWR0aCcpOwogICAgZi5fc2V0X2FsaWduKCdsZWZ0JykKPHxmaW1fZW5kfD4="]
["3e0d28917ec1e1469e17b51f0de264545f9a1a2a-2","3e0d28917ec1e1469e17b51f0de264545f9a1a2a","PHxmaW1fcHJlZml4fD4KZnJvbSB1dGlsIGltcG9ydCB0ZXN0QXR0cmlidXRlLCBlcnJvcgpmcm9tIHV0aWwgaW1wb3J0IHRlc3RJbnRBdHRyaWJ1dGUKCmRlZiB0ZXN0KCk6CiAgICBwcmludCAndGVzdGluZyBzb3VyY2UgY29kZSBzeW50YXgnCiAgICBmcm9tIHhtbC5kb20uaHRtbCBpbXBvcnQgSFRNTElGcmFtZUVsZW1lbnQKICAgIGZyb20geG1sLmRvbSBpbXBvcnQgaW1wbGVtZW50YXRpb24KICAgIGRvYyA9IGltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgnVGl0bGUnKQogICAgZiA9IGRvYy5jcmVhdGVFbGVtZW50KCdJRnJhbWUnKQoKICAgIHByaW50ICd0ZXN0aW5nIGdldC9zZXQnCiAgICB0ZXN0QXR0cmlidXRlKGYsJ2hlaWdodCcpOwogICAgdGVzdEF0dHJpYnV0ZShmLCdsb25nRGVzYycpOwogICAgdGVzdEF0dHJpYnV0ZShmLCdtYXJnaW5IZWlnaHQnKTsKICAgIHRlc3RBdHRyaWJ1dGUoZiwnbWFyZ2luV2lkdGgnKTsKICAgIHRlc3RBdHRyaWJ1dGUoZiwnc3JjJyk7CiAgICB0ZXN0QXR0cmlidXRlKGYsJ3dpZHRoJyk7CiAgICBmLl9zZXRfYWxpZ24oJ2xlZnQnKQogICAgcnQgPSBmLl9nZXRfYWxpZ24oKQogICAgaWYgcnQgIT0gJ0xlZnQnOgogICAgICAgIGVycm9yKCdnZXQvc2V0IG9mIGFsaWduIGZhaWxlZCcpCiAgICBmLl9zZXRfZnJhbWVCb3JkZXIoJ2xlZnQnKQogICAgcnQgPSBmLl9nZXRfZnJhbWVCb3JkZXIoKQogICAgaWYgcnQgIT0gJ0xlZnQnOgo8fGZpbV9ob2xlfD4KICAgIGYuX3NldF9zY3JvbGxpbmcoJ2F1dG8nKQogICAgcnQgPSBmLl9nZXRfc2Nyb2xsaW5nKCkKICAgIGlmIHJ0ICE9ICdBdXRvJzoKICAgICAgICBlcnJvcignZ2V0L3NldCBvZiBzY3JvbGxpbmcgZmFpbGVkJykKCiAgICBwcmludCAnZ2V0L3NldCB3b3JrcycKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdGVzdCgpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgZXJyb3IoJ2dldC9zZXQgb2YgZnJhbWVCb3JkZXIgZmFpbGVkJykKPHxmaW1fZW5kfD4="]
["3e0d28917ec1e1469e17b51f0de264545f9a1a2a-3","3e0d28917ec1e1469e17b51f0de264545f9a1a2a","PHxmaW1fcHJlZml4fD4KZnJvbSB1dGlsIGltcG9ydCB0ZXN0QXR0cmlidXRlLCBlcnJvcgpmcm9tIHV0aWwgaW1wb3J0IHRlc3RJbnRBdHRyaWJ1dGUKCmRlZiB0ZXN0KCk6CiAgICBwcmludCAndGVzdGluZyBzb3VyY2UgY29kZSBzeW50YXgnCiAgICBmcm9tIHhtbC5kb20uaHRtbCBpbXBvcnQgSFRNTElGcmFtZUVsZW1lbnQKICAgIGZyb20geG1sLmRvbSBpbXBvcnQgaW1wbGVtZW50YXRpb24KICAgIGRvYyA9IGltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgnVGl0bGUnKQogICAgZiA9IGRvYy5jcmVhdGVFbGVtZW50KCdJRnJhbWUnKQoKICAgIHByaW50ICd0ZXN0aW5nIGdldC9zZXQnCiAgICB0ZXN0QXR0cmlidXRlKGYsJ2hlaWdodCcpOwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICB0ZXN0QXR0cmlidXRlKGYsJ2xvbmdEZXNjJyk7CiAgICB0ZXN0QXR0cmlidXRlKGYsJ21hcmdpbkhlaWdodCcpOwogICAgdGVzdEF0dHJpYnV0ZShmLCdtYXJnaW5XaWR0aCcpOwogICAgdGVzdEF0dHJpYnV0ZShmLCdzcmMnKTsKPHxmaW1fZW5kfD4="]
["3e0d28917ec1e1469e17b51f0de264545f9a1a2a-4","3e0d28917ec1e1469e17b51f0de264545f9a1a2a","PHxmaW1fcHJlZml4fD4KZnJvbSB1dGlsIGltcG9ydCB0ZXN0QXR0cmlidXRlLCBlcnJvcgpmcm9tIHV0aWwgaW1wb3J0IHRlc3RJbnRBdHRyaWJ1dGUKCmRlZiB0ZXN0KCk6CiAgICBwcmludCAndGVzdGluZyBzb3VyY2UgY29kZSBzeW50YXgnCiAgICBmcm9tIHhtbC5kb20uaHRtbCBpbXBvcnQgSFRNTElGcmFtZUVsZW1lbnQKICAgIGZyb20geG1sLmRvbSBpbXBvcnQgaW1wbGVtZW50YXRpb24KICAgIGRvYyA9IGltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgnVGl0bGUnKQogICAgZiA9IGRvYy5jcmVhdGVFbGVtZW50KCdJRnJhbWUnKQoKICAgIHByaW50ICd0ZXN0aW5nIGdldC9zZXQnCiAgICB0ZXN0QXR0cmlidXRlKGYsJ2hlaWdodCcpOwogICAgdGVzdEF0dHJpYnV0ZShmLCdsb25nRGVzYycpOwogICAgdGVzdEF0dHJpYnV0ZShmLCdtYXJnaW5IZWlnaHQnKTsKICAgIHRlc3RBdHRyaWJ1dGUoZiwnbWFyZ2luV2lkdGgnKTsKICAgIHRlc3RBdHRyaWJ1dGUoZiwnc3JjJyk7CiAgICB0ZXN0QXR0cmlidXRlKGYsJ3dpZHRoJyk7CiAgICBmLl9zZXRfYWxpZ24oJ2xlZnQnKQogICAgcnQgPSBmLl9nZXRfYWxpZ24oKQogICAgaWYgcnQgIT0gJ0xlZnQnOgogICAgICAgIGVycm9yKCdnZXQvc2V0IG9mIGFsaWduIGZhaWxlZCcpCiAgICBmLl9zZXRfZnJhbWVCb3JkZXIoJ2xlZnQnKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBydCA9IGYuX2dldF9mcmFtZUJvcmRlcigpCiAgICBpZiBydCAhPSAnTGVmdCc6CiAgICAgICAgZXJyb3IoJ2dldC9zZXQgb2YgZnJhbWVCb3JkZXIgZmFpbGVkJykKICAgIGYuX3NldF9zY3JvbGxpbmcoJ2F1dG8nKQo8fGZpbV9lbmR8Pg=="]
["3e0d28917ec1e1469e17b51f0de264545f9a1a2a-5","3e0d28917ec1e1469e17b51f0de264545f9a1a2a","PHxmaW1fcHJlZml4fD4KZnJvbSB1dGlsIGltcG9ydCB0ZXN0QXR0cmlidXRlLCBlcnJvcgpmcm9tIHV0aWwgaW1wb3J0IHRlc3RJbnRBdHRyaWJ1dGUKCmRlZiB0ZXN0KCk6CiAgICBwcmludCAndGVzdGluZyBzb3VyY2UgY29kZSBzeW50YXgnCiAgICBmcm9tIHhtbC5kb20uaHRtbCBpbXBvcnQgSFRNTElGcmFtZUVsZW1lbnQKICAgIGZyb20geG1sLmRvbSBpbXBvcnQgaW1wbGVtZW50YXRpb24KICAgIGRvYyA9IGltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgnVGl0bGUnKQogICAgZiA9IGRvYy5jcmVhdGVFbGVtZW50KCdJRnJhbWUnKQoKICAgIHByaW50ICd0ZXN0aW5nIGdldC9zZXQnCiAgICB0ZXN0QXR0cmlidXRlKGYsJ2hlaWdodCcpOwogICAgdGVzdEF0dHJpYnV0ZShmLCdsb25nRGVzYycpOwogICAgdGVzdEF0dHJpYnV0ZShmLCdtYXJnaW5IZWlnaHQnKTsKICAgIHRlc3RBdHRyaWJ1dGUoZiwnbWFyZ2luV2lkdGgnKTsKICAgIHRlc3RBdHRyaWJ1dGUoZiwnc3JjJyk7CiAgICB0ZXN0QXR0cmlidXRlKGYsJ3dpZHRoJyk7CiAgICBmLl9zZXRfYWxpZ24oJ2xlZnQnKQogICAgcnQgPSBmLl9nZXRfYWxpZ24oKQogICAgaWYgcnQgIT0gJ0xlZnQnOgogICAgICAgIGVycm9yKCdnZXQvc2V0IG9mIGFsaWduIGZhaWxlZCcpCiAgICBmLl9zZXRfZnJhbWVCb3JkZXIoJ2xlZnQnKQogICAgcnQgPSBmLl9nZXRfZnJhbWVCb3JkZXIoKQogICAgaWYgcnQgIT0gJ0xlZnQnOgogICAgICAgIGVycm9yKCdnZXQvc2V0IG9mIGZyYW1lQm9yZGVyIGZhaWxlZCcpCiAgICBmLl9zZXRfc2Nyb2xsaW5nKCdhdXRvJykKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgcnQgPSBmLl9nZXRfc2Nyb2xsaW5nKCkKICAgIGlmIHJ0ICE9ICdBdXRvJzoKICAgICAgICBlcnJvcignZ2V0L3NldCBvZiBzY3JvbGxpbmcgZmFpbGVkJykKCjx8ZmltX2VuZHw+"]
["4b2ce9dfca4e8178a93f31bd02633ec1bc92ae57-1","4b2ce9dfca4e8178a93f31bd02633ec1bc92ae57","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgppbXBvcnQgc3lzCnN5cy5wYXRoLmFwcGVuZCgnL2hvbWUveG0vZ2l0cmVwby9yb3NfbWFybGluX2JyaWRnZS9nb19nYW1lYm9hcmQnKQpmcm9tIGNoZXNzYm9hcmQgaW1wb3J0IENoZXNzYm9hcmRMYXlvdXQKCgpjbGFzcyBHb0dhbWVIZWxwZXJfdXNlbGVzcygpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBwYXNzCgogICAgZGVmIERvVGlaaShzZWxmLCBLaWxsQm9hcmQpOgoKICAgICAgICBwcmludCgi5o+Q5a2Q5aSE55CG4oCm4oCm4oCm4oCmIikKICAgICAgICAjICDmlrDmgJ3ot6/vvJrljp/lp4vlgLzvvJoz44CBOCDlj6/og73mrbvmtLvvvJoxM+OAgTE4IOW/heatu++8mjIz44CBMjgg5b+F5rS777yaMzPjgIEzOAogICAgICAgICMg5o+Q5a2Q5YiG5Zub5q2l6LWw77yaCiAgICAgICAgIyDnrKzkuIDmraXvvIzlr7nmo4vnm5jov5vooYznrKzkuIDova7miavmj4/vvIzmoIforrDlv4XmrbvjgIHlv4XmtLvku6Xlj4rkuI3noa7lrprjgIIKICAgICAgICAjIOesrOS6jOatpe+8jOWvueW/heatu+S7peWPiuW/hea0u+ebuOWFs+iBlOeahOi/m+ihjOWkhOeQhuOAgueQhuiuuuS4iu+8jOi/nuaOpeW/hea0u+eahOW/hea0u++8m+i/nuaOpeW/heatu+eahOW/heatu++8iOS4jeWtmOWcqO+8iQogICAgICAgICMg56ys5LiJ5q2l77yM5a+55LiN56Gu5a6a55qE6L+b6KGM5aSE55CG77yI5rKh5pyJ5b+F5rS755qE6IGU6YCa77yM5b+F5q2777yJCiAgICAgICAgIyDnrKzlm5vmraXvvIzmn6Xmib7miYDmnInlv4XmrbvvvIzov5Tlm57mj5DlrZDliJfooagKICAgICAgICAjIHByaW50KCLmj5DlrZDlpITnkIbnrKzkuIDova4+Pj4+Pj4+Pj4+IikKICAgICAgICBmb3Igcm93IGluIHJhbmdlKDAsIDE5KToKICAgICAgICAgICAgZm9yIGNvbCBpbiByYW5nZSgwLCAxOSk6CiAgICAgICAgICAgICAgICAjIGlmIEtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSA9PSAwOgogICAgICAgICAgICAgICAgaWYgS2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpID09IDA6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgICAgICAjIOepuueahO+8jOS4jeWBmuS7u+S9leWkhOeQhgogICAgICAgICAgICAgICAgICAgICMgcHJpbnQoIuepuueahO+8jOS4jeWBmuS7u+S9leWkhOeQhiIpCiAgICAgICAgICAgICAgICAgICAgY29udGludWUKPHxmaW1fZW5kfD4="]
["4b2ce9dfca4e8178a93f31bd02633ec1bc92ae57-2","4b2ce9dfca4e8178a93f31bd02633ec1bc92ae57","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgppbXBvcnQgc3lzCnN5cy5wYXRoLmFwcGVuZCgnL2hvbWUveG0vZ2l0cmVwby9yb3NfbWFybGluX2JyaWRnZS9nb19nYW1lYm9hcmQnKQpmcm9tIGNoZXNzYm9hcmQgaW1wb3J0IENoZXNzYm9hcmRMYXlvdXQKCgpjbGFzcyBHb0dhbWVIZWxwZXJfdXNlbGVzcygpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBwYXNzCgogICAgZGVmIERvVGlaaShzZWxmLCBLaWxsQm9hcmQpOgoKICAgICAgICBwcmludCgi5o+Q5a2Q5aSE55CG4oCm4oCm4oCm4oCmIikKICAgICAgICAjICDmlrDmgJ3ot6/vvJrljp/lp4vlgLzvvJoz44CBOCDlj6/og73mrbvmtLvvvJoxM+OAgTE4IOW/heatu++8mjIz44CBMjgg5b+F5rS777yaMzPjgIEzOAogICAgICAgICMg5o+Q5a2Q5YiG5Zub5q2l6LWw77yaCiAgICAgICAgIyDnrKzkuIDmraXvvIzlr7nmo4vnm5jov5vooYznrKzkuIDova7miavmj4/vvIzmoIforrDlv4XmrbvjgIHlv4XmtLvku6Xlj4rkuI3noa7lrprjgIIKICAgICAgICAjIOesrOS6jOatpe+8jOWvueW/heatu+S7peWPiuW/hea0u+ebuOWFs+iBlOeahOi/m+ihjOWkhOeQhuOAgueQhuiuuuS4iu+8jOi/nuaOpeW/hea0u+eahOW/hea0u++8m+i/nuaOpeW/heatu+eahOW/heatu++8iOS4jeWtmOWcqO+8iQogICAgICAgICMg56ys5LiJ5q2l77yM5a+55LiN56Gu5a6a55qE6L+b6KGM5aSE55CG77yI5rKh5pyJ5b+F5rS755qE6IGU6YCa77yM5b+F5q2777yJCiAgICAgICAgIyDnrKzlm5vmraXvvIzmn6Xmib7miYDmnInlv4XmrbvvvIzov5Tlm57mj5DlrZDliJfooagKICAgICAgICAjIHByaW50KCLmj5DlrZDlpITnkIbnrKzkuIDova4+Pj4+Pj4+Pj4+IikKICAgICAgICBmb3Igcm93IGluIHJhbmdlKDAsIDE5KToKICAgICAgICAgICAgZm9yIGNvbCBpbiByYW5nZSgwLCAxOSk6CiAgICAgICAgICAgICAgICAjIGlmIEtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSA9PSAwOgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgICAgIGVsaWYgS2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpIDwgMTA6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5Eb0xpdmVPcktpbGwoS2lsbEJvYXJkLCByb3csIGNvbCkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIyBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICMgcHJpbnQoIuivpeaji+WtkOW3suiiq+WkhOeQhiIpCiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAjIHByaW50R29Cb2FyZCgpCiAgICAgICAgIyBwcmludCgi5o+Q5a2Q5aSE55CG56ys5LqM6L2uPj4+Pj4+Pj4+PiIpCiAgICAgICAgZm9yIHJvdyBpbiByYW5nZSgwLCAxOSk6CiAgICAgICAgICAgIGZvciBjb2wgaW4gcmFuZ2UoMCwgMTkpOgoKICAgICAgICAgICAgICAgIGlmIEtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSA8IDIwOgogICAgICAgICAgICAgICAgICAgICMg5LiN5piv5b+F5q275oiW5b+F5rS7CiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5Eb0xpYW5RaShLaWxsQm9hcmQsIHJvdywgY29sKQogICAgICAgICMgcHJpbnRHb0JvYXJkKCkKICAgICAgICAjIHByaW50KCLmj5DlrZDlpITnkIbnrKzkuInova4+Pj4+Pj4+Pj4+IikKICAgICAgICBmb3Igcm93IGluIHJhbmdlKDAsIDE5KToKICAgICAgICAgICAgZm9yIGNvbCBpbiByYW5nZSgwLCAxOSk6CiAgICAgICAgICAgICAgICBpZiBLaWxsQm9hcmQuZ2V0X2NlbGxfY29sb3IoY29sLHJvdykgPiAxMCBhbmQgS2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpIDwgMjA6CiAgICAgICAgICAgICAgICAgICAgIyDkuIrkuIDmraXmoIforrDnmoRraWxs54K5CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBLaWxsQm9hcmQuZ2V0X2NlbGxfY29sb3IoY29sLHJvdykgJSAxMCArIDIwCiAgICAgICAgICAgICAgICAgICAgS2lsbEJvYXJkLnNldF9jZWxsX3ZhbHVlKGNvbCxyb3csdmFsdWUpCiAgICAgICAgcG9zVGlvbnMgPSAiIgogICAgICAgICMgcHJpbnRHb0JvYXJkKCkKICAgICAgICAjIOiOt+WPluaPkOWtkOS9jee9ru+8jOW5tuWwhuaji+ebmOWkjeWOnwogICAgICAgICMgcHJpbnQoIuesrOWbm+i9ruW8gOWni+iOt+WPluS9jee9ruW5tuaBouWkjeaji+ebmO+8mj4+Pj4+Pj4+Pj4iKQogICAgICAgIGZvciByb3cgaW4gcmFuZ2UoMCwgMTkpOgogICAgICAgICAgICBmb3IgY29sIGluIHJhbmdlKDAsIDE5KToKICAgICAgICAgICAgICAgIGlmIEtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSA+IDIwIGFuZCBLaWxsQm9hcmQuZ2V0X2NlbGxfY29sb3IoY29sLHJvdykgPCAzMDoKICAgICAgICAgICAgICAgICAgICBzcyA9ICJBQkNERUZHSEpLTE1OT1BRUlNUIgogICAgICAgICAgICAgICAgICAgIHBvcyA9IHNzW2NvbF0gKyBzdHIoMTkgLSByb3cpCiAgICAgICAgICAgICAgICAgICAgcG9zVGlvbnMgPSBwb3NUaW9ucyArICJtb3ZlICIgKyBwb3MgKyAiLCIKICAgICAgICAgICAgICAgICAgICBLaWxsQm9hcmQuc2V0X2NlbGxfdmFsdWUoY29sLHJvdywgMCkKICAgICAgICAgICAgICAgIHZhbHVlID0gS2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpICUgMTAKICAgICAgICAgICAgICAgIEtpbGxCb2FyZC5zZXRfY2VsbF92YWx1ZShjb2wsIHJvdywgdmFsdWUpCiAgICAgICAgcHJpbnQoIuaPkOWtkOS9jee9ru+8miIgKyBwb3NUaW9ucykKICAgICAgICByZXR1cm4gcG9zVGlvbnMKCiAgICBkZWYgRG9MaXZlT3JLaWxsKHNlbGYsIGtpbGxCb2FyZCwgcm93LCBjb2wpOgogICAgICAgICcnJwogICAgICAgIOmAkuW9kuWkhOeQhu+8jOWvueaji+ebmOi/m+ihjOesrOS4gOi9ruaJq+aPj++8jOagh+iusOW/heatu+OAgeW/hea0u+S7peWPiuS4jeehruWumi4KICAgICAgICDlv4XmrbvlsLHmmK/kuIrkuIvlt6blj7Ppg73kuI3mmK/oh6rlt7HkurrvvJvlv4XmtLvlsLHmmK/kuIrkuIvlt6blj7Pku7vkuIDkvY3nva7mnInnqbrvvJvlhbbku5bmg4XlhrXkuLrkuI3noa7lrprjgIIKICAgICAgICDljp/lp4vlgLzvvJoz44CBOCDlj6/og73mrbvmtLvvvJoxM+OAgTE4IOW/heatu++8mjIz44CBMjgg5b+F5rS777yaMzPjgIEzOAogICAgICAgICcnJwogICAgICAgICMg6buY6K6k5b2T5YmN5Li65LiN56Gu5a6aCiAgICAgICAgdmFsdWUgPSBraWxsQm9hcmQuZ2V0X2NlbGxfY29sb3IoY29sLHJvdykgJSAxMCArIDEwCiAgICAgICAga2lsbEJvYXJkLnNldF9jZWxsX3ZhbHVlKGNvbCxyb3csdmFsdWUpCiAgICAgICAgdXBOb1FpID0gVHJ1ZQogICAgICAgIGRvd25Ob1FpID0gVHJ1ZQogICAgICAgIGxlZnROb1FpID0gVHJ1ZQogICAgICAgIHJpZ250Tm9RaSA9IFRydWUKICAgICAgICAjIOS4igogICAgICAgIGlmKHJvdyA9PSAwKToKICAgICAgICAgICAgIyDliLDpobbkuobvvIzmrbvnmoQKICAgICAgICAgICAgdXBOb1FpID0gVHJ1ZQogICAgICAgIGVsaWYga2lsbEJvYXJkW3Jvdy0xXVtjb2xdID09IDA6CiAgICAgICAgICAgICMg56m655qE77yM5b+F5rS7CiAgICAgICAgICAgIHZhbHVlID0ga2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpICUgMTAgKyAzMAogICAgICAgICAgICBraWxsQm9hcmQuc2V0X2NlbGxfdmFsdWUoY29sLHJvdyx2YWx1ZSkKICAgICAgICAgICAgdXBOb1FpID0gRmFsc2UKICAgICAgICBlbGlmIGtpbGxCb2FyZFtyb3ctMV1bY29sXSAlIDEwICE9IGtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSAlIDEwOgogICAgICAgICAgICAjIOS4iumdoueahOaji+WtkOWSjOW9k+WJjeS9jee9ruS4jeS4gOiHtO+8jOWBh+iuvuiDveadgAogICAgICAgICAgICB1cE5vUWkgPSBUcnVlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgdXBOb1FpID0gRmFsc2UKICAgICAgICAgICAgIyDkuIrpnaLnmoTmo4vlrZDlkozlvZPliY3kvY3nva7mmK/kuIDmoLfnmoQKICAgICAgICAgICAgaWYga2lsbEJvYXJkW3JvdyAtIDFdW2NvbF0gPCAxMDoKICAgICAgICAgICAgICAgICMg5LiK6Z2i6L+Y5rKh5aSE55CG77yM6YCS5b2S5aSE55CGCiAgICAgICAgICAgICAgICBzZWxmLkRvTGl2ZU9yS2lsbChraWxsQm9hcmQsIHJvdyAtIDEsIGNvbCkKICAgICAgICAjIOS4iwogICAgICAgIGlmIHJvdyA9PSAxODoKICAgICAgICAgICAgIyDliLDlupXkuobvvIzmrbvnmoQKICAgICAgICAgICAgZG93bk5vUWkgPSBUcnVlCiAgICAgICAgZWxpZiBraWxsQm9hcmRbcm93KzFdW2NvbF0gPT0gMDoKICAgICAgICAgICAgIyDnqbrnmoTvvIzlv4XmtLsKICAgICAgICAgICAgdmFsdWUgPSAga2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpICUgMTAgKyAzMAogICAgICAgICAgICBraWxsQm9hcmQuc2V0X2NlbGxfdmFsdWUoY29sLCByb3csIHZhbHVlKQogICAgICAgICAgICBkb3duTm9RaSA9IEZhbHNlCiAgICAgICAgZWxpZiBraWxsQm9hcmRbcm93ICsgMV1bY29sXSAlIDEwICE9IGtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSAlIDEwOgogICAgICAgICAgICAjIOS4i+mdoueahOaji+WtkOWSjOW9k+WJjeS9jee9ruS4jeS4gOiHtO+8jOiDveadgDsKICAgICAgICAgICAgZG93bk5vUWkgPSBUcnVlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZG93bk5vUWkgPSBGYWxzZQogICAgICAgICAgICAjIOS4i+mdoueahOaji+WtkOWSjOW9k+WJjeS9jee9ruaYr+S4gOagt+eahAogICAgICAgICAgICBpZiBraWxsQm9hcmRbcm93ICsgMV1bY29sXSA8IDEwOgogICAgICAgICAgICAgICAgIyDkuIvpnaLov5jmsqHlpITnkIbvvIzpgJLlvZLlpITnkIYKICAgICAgICAgICAgICAgIHNlbGYuRG9MaXZlT3JLaWxsKGtpbGxCb2FyZCwgcm93ICsgMSwgY29sKQogICAgICAgICMg5bemCiAgICAgICAgaWYgKGNvbCA9PSAwKToKICAgICAgICAgICAgIyDliLDlt6bkuobvvIzmrbvnmoQKICAgICAgICAgICAgbGVmdE5vUWkgPSBUcnVlCiAgICAgICAgZWxpZiBraWxsQm9hcmRbcm93XVtjb2wgLSAxXSA9PSAwOgogICAgICAgICAgICAjIOepuueahO+8jOW/hea0uwogICAgICAgICAgICB2YWx1ZSA9ICBraWxsQm9hcmQuZ2V0X2NlbGxfY29sb3IoY29sLHJvdykgJSAxMCArIDMwCiAgICAgICAgICAgIGtpbGxCb2FyZC5zZXRfY2VsbF92YWx1ZShjb2wsIHJvdywgdmFsdWUpCiAgICAgICAgICAgIGxlZnROb1FpID0gRmFsc2UKICAgICAgICBlbGlmIGtpbGxCb2FyZFtyb3ddW2NvbCAtIDFdICUgMTAgIT0ga2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpICUgMTA6CiAgICAgICAgICAgICMg5bem6Z2i55qE5qOL5a2Q5ZKM5b2T5YmN5L2N572u5LiN5LiA6Ie077yM6IO95p2AOwogICAgICAgICAgICBsZWZ0Tm9RaSA9IFRydWUKICAgICAgICBlbHNlOgogICAgICAgICAgICBsZWZ0Tm9RaSA9IEZhbHNlCiAgICAgICAgICAgICMg5bem6Z2i55qE5qOL5a2Q5ZKM5b2T5YmN5L2N572u5piv5LiA5qC355qECiAgICAgICAgICAgIGlmIGtpbGxCb2FyZFtyb3ddW2NvbCAtIDFdIDwgMTA6CiAgICAgICAgICAgICAgICAjIOW3pumdoui/mOayoeWkhOeQhu+8jOmAkuW9kuWkhOeQhgogICAgICAgICAgICAgICAgc2VsZi5Eb0xpdmVPcktpbGwoa2lsbEJvYXJkLCByb3csIGNvbCAtIDEpCiAgICAgICAgIyDlj7MKICAgICAgICBpZiAoY29sID09IDE4KToKICAgICAgICAgICAgIyDliLDlj7PkuobvvIzmrbvnmoQKICAgICAgICAgICAgcmlnbnROb1FpID0gVHJ1ZQogICAgICAgIGVsaWYga2lsbEJvYXJkW3Jvd11bY29sICsgMV0gPT0gMDoKICAgICAgICAgICAgIyDnqbrnmoTvvIzlv4XmtLsKICAgICAgICAgICAgdmFsdWUgPSBraWxsQm9hcmQuZ2V0X2NlbGxfY29sb3IoY29sLHJvdykgJSAxMCArIDMwCiAgICAgICAgICAgIGtpbGxCb2FyZC5zZXRfY2VsbF92YWx1ZShjb2wsIHJvdywgdmFsdWUpCiAgICAgICAgICAgIHJpZ250Tm9RaSA9IEZhbHNlCiAgICAgICAgZWxpZiBraWxsQm9hcmRbcm93XVtjb2wgKyAxXSAlIDEwICE9IGtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSAlIDEwOgogICAgICAgICAgICAjIOW3pumdoueahOaji+WtkOWSjOW9k+WJjeS9jee9ruS4jeS4gOiHtO+8jOiDveadgAogICAgICAgICAgICByaWdudE5vUWkgPSBUcnVlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmlnbnROb1FpID0gRmFsc2UKICAgICAgICAgICAgaWYga2lsbEJvYXJkW3Jvd11bY29sICsgMV0gPCAxMDoKICAgICAgICAgICAgICAgICMg5bem6Z2i6L+Y5rKh5aSE55CG77yM6YCS5b2S5aSE55CGCiAgICAgICAgICAgICAgICBzZWxmLkRvTGl2ZU9yS2lsbChraWxsQm9hcmQsIHJvdywgY29sICsgMSkKICAgICAgICAjIOWbm+mdoumDveaYr+aVjOS6uu+8jOW/heatuwogICAgICAgIGlmICh1cE5vUWkgYW5kIGRvd25Ob1FpIGFuZCBsZWZ0Tm9RaSBhbmQgcmlnbnROb1FpKToKICAgICAgICAgICAgdmFsdWUgPSBraWxsQm9hcmQuZ2V0X2NlbGxfY29sb3IoY29sLHJvdykgJSAxMCArIDIwCiAgICAgICAgICAgIGtpbGxCb2FyZC5zZXRfY2VsbF92YWx1ZShjb2wsIHJvdywgdmFsdWUpCgogICAgZGVmIERvTGlhblFpKHNlbGYsIGtpbGxCb2FyZCwgcm93LCBjb2wpOgogICAgICAgICcnJwogICAgICAgIOmAkuW9kuWkhOeQhu+8jOWvueaji+ebmOi/m+ihjOesrOS6jOi9ruaJq+aPj+OAguS4juW/heatu+W/hea0u+i/nuawlOeahOS5n+aYr+W/heatu+W/hea0u+OAggogICAgICAgICcnJwogICAgICAgICMg5Y+q5aSE55CG5pyq6YCa5rCU5bm25LiU5piv6Ieq5bex5Lq655qE44CCCiAgICAgICAgIyDkuIoKICAgICAgICBpZiBraWxsQm9hcmRbcm93LTFdW2NvbF0gPCAyMCBhbmQga2lsbEJvYXJkW3Jvdy0xXVtjb2xdICUgMTAgPT0ga2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpICUgMTA6CiAgICAgICAgICAgIGlmIGtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSA+IDMwOgogICAgICAgICAgICAgICAga2lsbEJvYXJkW3Jvdy0xXVtjb2xdID0ga2lsbEJvYXJkW3Jvdy0xXVtjb2xdICUgMTAgKyAzMAogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAga2lsbEJvYXJkW3Jvdy0xXVtjb2xdID0ga2lsbEJvYXJkW3Jvdy0xXVtjb2xdICUgMTAgKyAyMAogICAgICAgICAgICBzZWxmLkRvTGlhblFpKGtpbGxCb2FyZCwgcm93LTEsIGNvbCkKICAgICAgICAjIOS4iwogICAgICAgIGlmIGtpbGxCb2FyZFtyb3crMV1bY29sXSA8IDIwIGFuZCBraWxsQm9hcmRbcm93KzFdW2NvbF0gJSAxMCA9PSBraWxsQm9hcmQuZ2V0X2NlbGxfY29sb3IoY29sLHJvdykgJSAxMDoKICAgICAgICAgICAgaWYga2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpID4gMzA6CiAgICAgICAgICAgICAgICBraWxsQm9hcmRbcm93KzFdW2NvbF0gPSBraWxsQm9hcmRbcm93KzFdW2NvbF0gJSAxMCArIDMwCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBraWxsQm9hcmRbcm93KzFdW2NvbF0gPSBraWxsQm9hcmRbcm93KzFdW2NvbF0gJSAxMCArIDIwCiAgICAgICAgICAgIHNlbGYuRG9MaWFuUWkoa2lsbEJvYXJkLCByb3crMSwgY29sKQogICAgICAgICMg5bemCiAgICAgICAgaWYga2lsbEJvYXJkW3Jvd11bY29sLTFdIDwgMjAgYW5kIGtpbGxCb2FyZFtyb3ddW2NvbC0xXSAlIDEwID09IGtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSAlIDEwOgogICAgICAgICAgICBpZiBraWxsQm9hcmQuZ2V0X2NlbGxfY29sb3IoY29sLHJvdykgPiAzMDoKICAgICAgICAgICAgICAgIGtpbGxCb2FyZFtyb3ddW2NvbC0xXSA9IGtpbGxCb2FyZFtyb3ddW2NvbC0xXSAlIDEwICsgMzAKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGtpbGxCb2FyZFtyb3ddW2NvbC0xXSA9IGtpbGxCb2FyZFtyb3ddW2NvbC0xXSAlIDEwICsgMjAKICAgICAgICAgICAgc2VsZi5Eb0xpYW5RaShraWxsQm9hcmQsIHJvdywgY29sLTEpCiAgICAgICAgIyDlj7MKICAgICAgICBpZiBraWxsQm9hcmRbcm93XVtjb2wrMV0gPCAyMCBhbmQga2lsbEJvYXJkW3Jvd11bY29sKzFdICUgMTAgPT0ga2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpICUgMTA6CiAgICAgICAgICAgIGlmIGtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSA+IDMwOgogICAgICAgICAgICAgICAga2lsbEJvYXJkW3Jvd11bY29sKzFdID0ga2lsbEJvYXJkW3Jvd11bY29sKzFdICUgMTAgKyAzMAogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAga2lsbEJvYXJkW3Jvd11bY29sKzFdID0ga2lsbEJvYXJkW3Jvd11bY29sKzFdICUgMTAgKyAyMAogICAgICAgICAgICBzZWxmLkRvTGlhblFpKGtpbGxCb2FyZCwgcm93LCBjb2wtMSkKCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHggPSBHb0dhbWVIZWxwZXIoKQogICAgYmIgPSBDaGVzc2JvYXJkTGF5b3V0KCd0ZXN0JykKICAgIHguRG9UaVppKGJiKQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgaWYgS2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpID09IDA6CiAgICAgICAgICAgICAgICAgICAgIyDnqbrnmoTvvIzkuI3lgZrku7vkvZXlpITnkIYKICAgICAgICAgICAgICAgICAgICAjIHByaW50KCLnqbrnmoTvvIzkuI3lgZrku7vkvZXlpITnkIYiKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCjx8ZmltX2VuZHw+"]
["4b2ce9dfca4e8178a93f31bd02633ec1bc92ae57-3","4b2ce9dfca4e8178a93f31bd02633ec1bc92ae57","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgppbXBvcnQgc3lzCnN5cy5wYXRoLmFwcGVuZCgnL2hvbWUveG0vZ2l0cmVwby9yb3NfbWFybGluX2JyaWRnZS9nb19nYW1lYm9hcmQnKQpmcm9tIGNoZXNzYm9hcmQgaW1wb3J0IENoZXNzYm9hcmRMYXlvdXQKCgpjbGFzcyBHb0dhbWVIZWxwZXJfdXNlbGVzcygpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBwYXNzCgogICAgZGVmIERvVGlaaShzZWxmLCBLaWxsQm9hcmQpOgoKICAgICAgICBwcmludCgi5o+Q5a2Q5aSE55CG4oCm4oCm4oCm4oCmIikKICAgICAgICAjICDmlrDmgJ3ot6/vvJrljp/lp4vlgLzvvJoz44CBOCDlj6/og73mrbvmtLvvvJoxM+OAgTE4IOW/heatu++8mjIz44CBMjgg5b+F5rS777yaMzPjgIEzOAogICAgICAgICMg5o+Q5a2Q5YiG5Zub5q2l6LWw77yaCiAgICAgICAgIyDnrKzkuIDmraXvvIzlr7nmo4vnm5jov5vooYznrKzkuIDova7miavmj4/vvIzmoIforrDlv4XmrbvjgIHlv4XmtLvku6Xlj4rkuI3noa7lrprjgIIKICAgICAgICAjIOesrOS6jOatpe+8jOWvueW/heatu+S7peWPiuW/hea0u+ebuOWFs+iBlOeahOi/m+ihjOWkhOeQhuOAgueQhuiuuuS4iu+8jOi/nuaOpeW/hea0u+eahOW/hea0u++8m+i/nuaOpeW/heatu+eahOW/heatu++8iOS4jeWtmOWcqO+8iQogICAgICAgICMg56ys5LiJ5q2l77yM5a+55LiN56Gu5a6a55qE6L+b6KGM5aSE55CG77yI5rKh5pyJ5b+F5rS755qE6IGU6YCa77yM5b+F5q2777yJCiAgICAgICAgIyDnrKzlm5vmraXvvIzmn6Xmib7miYDmnInlv4XmrbvvvIzov5Tlm57mj5DlrZDliJfooagKICAgICAgICAjIHByaW50KCLmj5DlrZDlpITnkIbnrKzkuIDova4+Pj4+Pj4+Pj4+IikKICAgICAgICBmb3Igcm93IGluIHJhbmdlKDAsIDE5KToKICAgICAgICAgICAgZm9yIGNvbCBpbiByYW5nZSgwLCAxOSk6CiAgICAgICAgICAgICAgICAjIGlmIEtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSA9PSAwOgogICAgICAgICAgICAgICAgaWYgS2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpID09IDA6CiAgICAgICAgICAgICAgICAgICAgIyDnqbrnmoTvvIzkuI3lgZrku7vkvZXlpITnkIYKICAgICAgICAgICAgICAgICAgICAjIHByaW50KCLnqbrnmoTvvIzkuI3lgZrku7vkvZXlpITnkIYiKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBlbGlmIEtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSA8IDEwOgogICAgICAgICAgICAgICAgICAgIHNlbGYuRG9MaXZlT3JLaWxsKEtpbGxCb2FyZCwgcm93LCBjb2wpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICMgY29udGludWUKICAgICAgICAgICAgICAgICAgICAjIHByaW50KCLor6Xmo4vlrZDlt7LooqvlpITnkIYiKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIyBwcmludEdvQm9hcmQoKQogICAgICAgICMgcHJpbnQoIuaPkOWtkOWkhOeQhuesrOS6jOi9rj4+Pj4+Pj4+Pj4iKQogICAgICAgIGZvciByb3cgaW4gcmFuZ2UoMCwgMTkpOgogICAgICAgICAgICBmb3IgY29sIGluIHJhbmdlKDAsIDE5KToKCiAgICAgICAgICAgICAgICBpZiBLaWxsQm9hcmQuZ2V0X2NlbGxfY29sb3IoY29sLHJvdykgPCAyMDoKICAgICAgICAgICAgICAgICAgICAjIOS4jeaYr+W/heatu+aIluW/hea0uwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHNlbGYuRG9MaWFuUWkoS2lsbEJvYXJkLCByb3csIGNvbCkKICAgICAgICAjIHByaW50R29Cb2FyZCgpCiAgICAgICAgIyBwcmludCgi5o+Q5a2Q5aSE55CG56ys5LiJ6L2uPj4+Pj4+Pj4+PiIpCiAgICAgICAgZm9yIHJvdyBpbiByYW5nZSgwLCAxOSk6CiAgICAgICAgICAgIGZvciBjb2wgaW4gcmFuZ2UoMCwgMTkpOgogICAgICAgICAgICAgICAgaWYgS2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpID4gMTAgYW5kIEtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSA8IDIwOgogICAgICAgICAgICAgICAgICAgICMg5LiK5LiA5q2l5qCH6K6w55qEa2lsbOeCuQogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gS2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpICUgMTAgKyAyMAogICAgICAgICAgICAgICAgICAgIEtpbGxCb2FyZC5zZXRfY2VsbF92YWx1ZShjb2wscm93LHZhbHVlKQogICAgICAgIHBvc1Rpb25zID0gIiIKICAgICAgICAjIHByaW50R29Cb2FyZCgpCiAgICAgICAgIyDojrflj5bmj5DlrZDkvY3nva7vvIzlubblsIbmo4vnm5jlpI3ljp8KICAgICAgICAjIHByaW50KCLnrKzlm5vova7lvIDlp4vojrflj5bkvY3nva7lubbmgaLlpI3mo4vnm5jvvJo+Pj4+Pj4+Pj4+IikKICAgICAgICBmb3Igcm93IGluIHJhbmdlKDAsIDE5KToKICAgICAgICAgICAgZm9yIGNvbCBpbiByYW5nZSgwLCAxOSk6CiAgICAgICAgICAgICAgICBpZiBLaWxsQm9hcmQuZ2V0X2NlbGxfY29sb3IoY29sLHJvdykgPiAyMCBhbmQgS2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpIDwgMzA6CiAgICAgICAgICAgICAgICAgICAgc3MgPSAiQUJDREVGR0hKS0xNTk9QUVJTVCIKICAgICAgICAgICAgICAgICAgICBwb3MgPSBzc1tjb2xdICsgc3RyKDE5IC0gcm93KQogICAgICAgICAgICAgICAgICAgIHBvc1Rpb25zID0gcG9zVGlvbnMgKyAibW92ZSAiICsgcG9zICsgIiwiCiAgICAgICAgICAgICAgICAgICAgS2lsbEJvYXJkLnNldF9jZWxsX3ZhbHVlKGNvbCxyb3csIDApCiAgICAgICAgICAgICAgICB2YWx1ZSA9IEtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSAlIDEwCiAgICAgICAgICAgICAgICBLaWxsQm9hcmQuc2V0X2NlbGxfdmFsdWUoY29sLCByb3csIHZhbHVlKQogICAgICAgIHByaW50KCLmj5DlrZDkvY3nva7vvJoiICsgcG9zVGlvbnMpCiAgICAgICAgcmV0dXJuIHBvc1Rpb25zCgogICAgZGVmIERvTGl2ZU9yS2lsbChzZWxmLCBraWxsQm9hcmQsIHJvdywgY29sKToKICAgICAgICAnJycKICAgICAgICDpgJLlvZLlpITnkIbvvIzlr7nmo4vnm5jov5vooYznrKzkuIDova7miavmj4/vvIzmoIforrDlv4XmrbvjgIHlv4XmtLvku6Xlj4rkuI3noa7lrpouCiAgICAgICAg5b+F5q275bCx5piv5LiK5LiL5bem5Y+z6YO95LiN5piv6Ieq5bex5Lq677yb5b+F5rS75bCx5piv5LiK5LiL5bem5Y+z5Lu75LiA5L2N572u5pyJ56m677yb5YW25LuW5oOF5Ya15Li65LiN56Gu5a6a44CCCiAgICAgICAg5Y6f5aeL5YC877yaM+OAgTgg5Y+v6IO95q275rS777yaMTPjgIExOCDlv4XmrbvvvJoyM+OAgTI4IOW/hea0u++8mjMz44CBMzgKICAgICAgICAnJycKICAgICAgICAjIOm7mOiupOW9k+WJjeS4uuS4jeehruWumgogICAgICAgIHZhbHVlID0ga2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpICUgMTAgKyAxMAogICAgICAgIGtpbGxCb2FyZC5zZXRfY2VsbF92YWx1ZShjb2wscm93LHZhbHVlKQogICAgICAgIHVwTm9RaSA9IFRydWUKICAgICAgICBkb3duTm9RaSA9IFRydWUKICAgICAgICBsZWZ0Tm9RaSA9IFRydWUKICAgICAgICByaWdudE5vUWkgPSBUcnVlCiAgICAgICAgIyDkuIoKICAgICAgICBpZihyb3cgPT0gMCk6CiAgICAgICAgICAgICMg5Yiw6aG25LqG77yM5q2755qECiAgICAgICAgICAgIHVwTm9RaSA9IFRydWUKICAgICAgICBlbGlmIGtpbGxCb2FyZFtyb3ctMV1bY29sXSA9PSAwOgogICAgICAgICAgICAjIOepuueahO+8jOW/hea0uwogICAgICAgICAgICB2YWx1ZSA9IGtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSAlIDEwICsgMzAKICAgICAgICAgICAga2lsbEJvYXJkLnNldF9jZWxsX3ZhbHVlKGNvbCxyb3csdmFsdWUpCiAgICAgICAgICAgIHVwTm9RaSA9IEZhbHNlCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBlbGlmIGtpbGxCb2FyZFtyb3ctMV1bY29sXSAlIDEwICE9IGtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSAlIDEwOgogICAgICAgICAgICAjIOS4iumdoueahOaji+WtkOWSjOW9k+WJjeS9jee9ruS4jeS4gOiHtO+8jOWBh+iuvuiDveadgAogICAgICAgICAgICB1cE5vUWkgPSBUcnVlCiAgICAgICAgZWxzZToKPHxmaW1fZW5kfD4="]
["4b2ce9dfca4e8178a93f31bd02633ec1bc92ae57-4","4b2ce9dfca4e8178a93f31bd02633ec1bc92ae57","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgppbXBvcnQgc3lzCnN5cy5wYXRoLmFwcGVuZCgnL2hvbWUveG0vZ2l0cmVwby9yb3NfbWFybGluX2JyaWRnZS9nb19nYW1lYm9hcmQnKQpmcm9tIGNoZXNzYm9hcmQgaW1wb3J0IENoZXNzYm9hcmRMYXlvdXQKCgpjbGFzcyBHb0dhbWVIZWxwZXJfdXNlbGVzcygpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBwYXNzCgogICAgZGVmIERvVGlaaShzZWxmLCBLaWxsQm9hcmQpOgoKICAgICAgICBwcmludCgi5o+Q5a2Q5aSE55CG4oCm4oCm4oCm4oCmIikKICAgICAgICAjICDmlrDmgJ3ot6/vvJrljp/lp4vlgLzvvJoz44CBOCDlj6/og73mrbvmtLvvvJoxM+OAgTE4IOW/heatu++8mjIz44CBMjgg5b+F5rS777yaMzPjgIEzOAogICAgICAgICMg5o+Q5a2Q5YiG5Zub5q2l6LWw77yaCiAgICAgICAgIyDnrKzkuIDmraXvvIzlr7nmo4vnm5jov5vooYznrKzkuIDova7miavmj4/vvIzmoIforrDlv4XmrbvjgIHlv4XmtLvku6Xlj4rkuI3noa7lrprjgIIKICAgICAgICAjIOesrOS6jOatpe+8jOWvueW/heatu+S7peWPiuW/hea0u+ebuOWFs+iBlOeahOi/m+ihjOWkhOeQhuOAgueQhuiuuuS4iu+8jOi/nuaOpeW/hea0u+eahOW/hea0u++8m+i/nuaOpeW/heatu+eahOW/heatu++8iOS4jeWtmOWcqO+8iQogICAgICAgICMg56ys5LiJ5q2l77yM5a+55LiN56Gu5a6a55qE6L+b6KGM5aSE55CG77yI5rKh5pyJ5b+F5rS755qE6IGU6YCa77yM5b+F5q2777yJCiAgICAgICAgIyDnrKzlm5vmraXvvIzmn6Xmib7miYDmnInlv4XmrbvvvIzov5Tlm57mj5DlrZDliJfooagKICAgICAgICAjIHByaW50KCLmj5DlrZDlpITnkIbnrKzkuIDova4+Pj4+Pj4+Pj4+IikKICAgICAgICBmb3Igcm93IGluIHJhbmdlKDAsIDE5KToKICAgICAgICAgICAgZm9yIGNvbCBpbiByYW5nZSgwLCAxOSk6CiAgICAgICAgICAgICAgICAjIGlmIEtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSA9PSAwOgogICAgICAgICAgICAgICAgaWYgS2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpID09IDA6CiAgICAgICAgICAgICAgICAgICAgIyDnqbrnmoTvvIzkuI3lgZrku7vkvZXlpITnkIYKICAgICAgICAgICAgICAgICAgICAjIHByaW50KCLnqbrnmoTvvIzkuI3lgZrku7vkvZXlpITnkIYiKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBlbGlmIEtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSA8IDEwOgogICAgICAgICAgICAgICAgICAgIHNlbGYuRG9MaXZlT3JLaWxsKEtpbGxCb2FyZCwgcm93LCBjb2wpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICMgY29udGludWUKICAgICAgICAgICAgICAgICAgICAjIHByaW50KCLor6Xmo4vlrZDlt7LooqvlpITnkIYiKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIyBwcmludEdvQm9hcmQoKQogICAgICAgICMgcHJpbnQoIuaPkOWtkOWkhOeQhuesrOS6jOi9rj4+Pj4+Pj4+Pj4iKQogICAgICAgIGZvciByb3cgaW4gcmFuZ2UoMCwgMTkpOgogICAgICAgICAgICBmb3IgY29sIGluIHJhbmdlKDAsIDE5KToKCiAgICAgICAgICAgICAgICBpZiBLaWxsQm9hcmQuZ2V0X2NlbGxfY29sb3IoY29sLHJvdykgPCAyMDoKICAgICAgICAgICAgICAgICAgICAjIOS4jeaYr+W/heatu+aIluW/hea0uwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHNlbGYuRG9MaWFuUWkoS2lsbEJvYXJkLCByb3csIGNvbCkKICAgICAgICAjIHByaW50R29Cb2FyZCgpCiAgICAgICAgIyBwcmludCgi5o+Q5a2Q5aSE55CG56ys5LiJ6L2uPj4+Pj4+Pj4+PiIpCiAgICAgICAgZm9yIHJvdyBpbiByYW5nZSgwLCAxOSk6CiAgICAgICAgICAgIGZvciBjb2wgaW4gcmFuZ2UoMCwgMTkpOgogICAgICAgICAgICAgICAgaWYgS2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpID4gMTAgYW5kIEtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSA8IDIwOgogICAgICAgICAgICAgICAgICAgICMg5LiK5LiA5q2l5qCH6K6w55qEa2lsbOeCuQogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gS2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpICUgMTAgKyAyMAogICAgICAgICAgICAgICAgICAgIEtpbGxCb2FyZC5zZXRfY2VsbF92YWx1ZShjb2wscm93LHZhbHVlKQogICAgICAgIHBvc1Rpb25zID0gIiIKICAgICAgICAjIHByaW50R29Cb2FyZCgpCiAgICAgICAgIyDojrflj5bmj5DlrZDkvY3nva7vvIzlubblsIbmo4vnm5jlpI3ljp8KICAgICAgICAjIHByaW50KCLnrKzlm5vova7lvIDlp4vojrflj5bkvY3nva7lubbmgaLlpI3mo4vnm5jvvJo+Pj4+Pj4+Pj4+IikKICAgICAgICBmb3Igcm93IGluIHJhbmdlKDAsIDE5KToKICAgICAgICAgICAgZm9yIGNvbCBpbiByYW5nZSgwLCAxOSk6CiAgICAgICAgICAgICAgICBpZiBLaWxsQm9hcmQuZ2V0X2NlbGxfY29sb3IoY29sLHJvdykgPiAyMCBhbmQgS2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpIDwgMzA6CiAgICAgICAgICAgICAgICAgICAgc3MgPSAiQUJDREVGR0hKS0xNTk9QUVJTVCIKICAgICAgICAgICAgICAgICAgICBwb3MgPSBzc1tjb2xdICsgc3RyKDE5IC0gcm93KQogICAgICAgICAgICAgICAgICAgIHBvc1Rpb25zID0gcG9zVGlvbnMgKyAibW92ZSAiICsgcG9zICsgIiwiCiAgICAgICAgICAgICAgICAgICAgS2lsbEJvYXJkLnNldF9jZWxsX3ZhbHVlKGNvbCxyb3csIDApCiAgICAgICAgICAgICAgICB2YWx1ZSA9IEtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSAlIDEwCiAgICAgICAgICAgICAgICBLaWxsQm9hcmQuc2V0X2NlbGxfdmFsdWUoY29sLCByb3csIHZhbHVlKQogICAgICAgIHByaW50KCLmj5DlrZDkvY3nva7vvJoiICsgcG9zVGlvbnMpCiAgICAgICAgcmV0dXJuIHBvc1Rpb25zCgogICAgZGVmIERvTGl2ZU9yS2lsbChzZWxmLCBraWxsQm9hcmQsIHJvdywgY29sKToKICAgICAgICAnJycKICAgICAgICDpgJLlvZLlpITnkIbvvIzlr7nmo4vnm5jov5vooYznrKzkuIDova7miavmj4/vvIzmoIforrDlv4XmrbvjgIHlv4XmtLvku6Xlj4rkuI3noa7lrpouCiAgICAgICAg5b+F5q275bCx5piv5LiK5LiL5bem5Y+z6YO95LiN5piv6Ieq5bex5Lq677yb5b+F5rS75bCx5piv5LiK5LiL5bem5Y+z5Lu75LiA5L2N572u5pyJ56m677yb5YW25LuW5oOF5Ya15Li65LiN56Gu5a6a44CCCiAgICAgICAg5Y6f5aeL5YC877yaM+OAgTgg5Y+v6IO95q275rS777yaMTPjgIExOCDlv4XmrbvvvJoyM+OAgTI4IOW/hea0u++8mjMz44CBMzgKICAgICAgICAnJycKICAgICAgICAjIOm7mOiupOW9k+WJjeS4uuS4jeehruWumgogICAgICAgIHZhbHVlID0ga2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpICUgMTAgKyAxMAogICAgICAgIGtpbGxCb2FyZC5zZXRfY2VsbF92YWx1ZShjb2wscm93LHZhbHVlKQogICAgICAgIHVwTm9RaSA9IFRydWUKICAgICAgICBkb3duTm9RaSA9IFRydWUKICAgICAgICBsZWZ0Tm9RaSA9IFRydWUKICAgICAgICByaWdudE5vUWkgPSBUcnVlCiAgICAgICAgIyDkuIoKICAgICAgICBpZihyb3cgPT0gMCk6CiAgICAgICAgICAgICMg5Yiw6aG25LqG77yM5q2755qECiAgICAgICAgICAgIHVwTm9RaSA9IFRydWUKICAgICAgICBlbGlmIGtpbGxCb2FyZFtyb3ctMV1bY29sXSA9PSAwOgogICAgICAgICAgICAjIOepuueahO+8jOW/hea0uwogICAgICAgICAgICB2YWx1ZSA9IGtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSAlIDEwICsgMzAKICAgICAgICAgICAga2lsbEJvYXJkLnNldF9jZWxsX3ZhbHVlKGNvbCxyb3csdmFsdWUpCiAgICAgICAgICAgIHVwTm9RaSA9IEZhbHNlCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBlbGlmIGtpbGxCb2FyZFtyb3ctMV1bY29sXSAlIDEwICE9IGtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSAlIDEwOgogICAgICAgICAgICAjIOS4iumdoueahOaji+WtkOWSjOW9k+WJjeS9jee9ruS4jeS4gOiHtO+8jOWBh+iuvuiDveadgAogICAgICAgICAgICB1cE5vUWkgPSBUcnVlCiAgICAgICAgZWxzZToKPHxmaW1fZW5kfD4="]
["4b2ce9dfca4e8178a93f31bd02633ec1bc92ae57-5","4b2ce9dfca4e8178a93f31bd02633ec1bc92ae57","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgppbXBvcnQgc3lzCnN5cy5wYXRoLmFwcGVuZCgnL2hvbWUveG0vZ2l0cmVwby9yb3NfbWFybGluX2JyaWRnZS9nb19nYW1lYm9hcmQnKQpmcm9tIGNoZXNzYm9hcmQgaW1wb3J0IENoZXNzYm9hcmRMYXlvdXQKCgpjbGFzcyBHb0dhbWVIZWxwZXJfdXNlbGVzcygpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBwYXNzCgogICAgZGVmIERvVGlaaShzZWxmLCBLaWxsQm9hcmQpOgoKICAgICAgICBwcmludCgi5o+Q5a2Q5aSE55CG4oCm4oCm4oCm4oCmIikKICAgICAgICAjICDmlrDmgJ3ot6/vvJrljp/lp4vlgLzvvJoz44CBOCDlj6/og73mrbvmtLvvvJoxM+OAgTE4IOW/heatu++8mjIz44CBMjgg5b+F5rS777yaMzPjgIEzOAogICAgICAgICMg5o+Q5a2Q5YiG5Zub5q2l6LWw77yaCiAgICAgICAgIyDnrKzkuIDmraXvvIzlr7nmo4vnm5jov5vooYznrKzkuIDova7miavmj4/vvIzmoIforrDlv4XmrbvjgIHlv4XmtLvku6Xlj4rkuI3noa7lrprjgIIKICAgICAgICAjIOesrOS6jOatpe+8jOWvueW/heatu+S7peWPiuW/hea0u+ebuOWFs+iBlOeahOi/m+ihjOWkhOeQhuOAgueQhuiuuuS4iu+8jOi/nuaOpeW/hea0u+eahOW/hea0u++8m+i/nuaOpeW/heatu+eahOW/heatu++8iOS4jeWtmOWcqO+8iQogICAgICAgICMg56ys5LiJ5q2l77yM5a+55LiN56Gu5a6a55qE6L+b6KGM5aSE55CG77yI5rKh5pyJ5b+F5rS755qE6IGU6YCa77yM5b+F5q2777yJCiAgICAgICAgIyDnrKzlm5vmraXvvIzmn6Xmib7miYDmnInlv4XmrbvvvIzov5Tlm57mj5DlrZDliJfooagKICAgICAgICAjIHByaW50KCLmj5DlrZDlpITnkIbnrKzkuIDova4+Pj4+Pj4+Pj4+IikKICAgICAgICBmb3Igcm93IGluIHJhbmdlKDAsIDE5KToKICAgICAgICAgICAgZm9yIGNvbCBpbiByYW5nZSgwLCAxOSk6CiAgICAgICAgICAgICAgICAjIGlmIEtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSA9PSAwOgogICAgICAgICAgICAgICAgaWYgS2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpID09IDA6CiAgICAgICAgICAgICAgICAgICAgIyDnqbrnmoTvvIzkuI3lgZrku7vkvZXlpITnkIYKICAgICAgICAgICAgICAgICAgICAjIHByaW50KCLnqbrnmoTvvIzkuI3lgZrku7vkvZXlpITnkIYiKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBlbGlmIEtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSA8IDEwOgogICAgICAgICAgICAgICAgICAgIHNlbGYuRG9MaXZlT3JLaWxsKEtpbGxCb2FyZCwgcm93LCBjb2wpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICMgY29udGludWUKICAgICAgICAgICAgICAgICAgICAjIHByaW50KCLor6Xmo4vlrZDlt7LooqvlpITnkIYiKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIyBwcmludEdvQm9hcmQoKQogICAgICAgICMgcHJpbnQoIuaPkOWtkOWkhOeQhuesrOS6jOi9rj4+Pj4+Pj4+Pj4iKQogICAgICAgIGZvciByb3cgaW4gcmFuZ2UoMCwgMTkpOgogICAgICAgICAgICBmb3IgY29sIGluIHJhbmdlKDAsIDE5KToKCiAgICAgICAgICAgICAgICBpZiBLaWxsQm9hcmQuZ2V0X2NlbGxfY29sb3IoY29sLHJvdykgPCAyMDoKICAgICAgICAgICAgICAgICAgICAjIOS4jeaYr+W/heatu+aIluW/hea0uwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHNlbGYuRG9MaWFuUWkoS2lsbEJvYXJkLCByb3csIGNvbCkKICAgICAgICAjIHByaW50R29Cb2FyZCgpCiAgICAgICAgIyBwcmludCgi5o+Q5a2Q5aSE55CG56ys5LiJ6L2uPj4+Pj4+Pj4+PiIpCiAgICAgICAgZm9yIHJvdyBpbiByYW5nZSgwLCAxOSk6CiAgICAgICAgICAgIGZvciBjb2wgaW4gcmFuZ2UoMCwgMTkpOgogICAgICAgICAgICAgICAgaWYgS2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpID4gMTAgYW5kIEtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSA8IDIwOgogICAgICAgICAgICAgICAgICAgICMg5LiK5LiA5q2l5qCH6K6w55qEa2lsbOeCuQogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gS2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpICUgMTAgKyAyMAogICAgICAgICAgICAgICAgICAgIEtpbGxCb2FyZC5zZXRfY2VsbF92YWx1ZShjb2wscm93LHZhbHVlKQogICAgICAgIHBvc1Rpb25zID0gIiIKICAgICAgICAjIHByaW50R29Cb2FyZCgpCiAgICAgICAgIyDojrflj5bmj5DlrZDkvY3nva7vvIzlubblsIbmo4vnm5jlpI3ljp8KICAgICAgICAjIHByaW50KCLnrKzlm5vova7lvIDlp4vojrflj5bkvY3nva7lubbmgaLlpI3mo4vnm5jvvJo+Pj4+Pj4+Pj4+IikKICAgICAgICBmb3Igcm93IGluIHJhbmdlKDAsIDE5KToKICAgICAgICAgICAgZm9yIGNvbCBpbiByYW5nZSgwLCAxOSk6CiAgICAgICAgICAgICAgICBpZiBLaWxsQm9hcmQuZ2V0X2NlbGxfY29sb3IoY29sLHJvdykgPiAyMCBhbmQgS2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpIDwgMzA6CiAgICAgICAgICAgICAgICAgICAgc3MgPSAiQUJDREVGR0hKS0xNTk9QUVJTVCIKICAgICAgICAgICAgICAgICAgICBwb3MgPSBzc1tjb2xdICsgc3RyKDE5IC0gcm93KQogICAgICAgICAgICAgICAgICAgIHBvc1Rpb25zID0gcG9zVGlvbnMgKyAibW92ZSAiICsgcG9zICsgIiwiCiAgICAgICAgICAgICAgICAgICAgS2lsbEJvYXJkLnNldF9jZWxsX3ZhbHVlKGNvbCxyb3csIDApCiAgICAgICAgICAgICAgICB2YWx1ZSA9IEtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSAlIDEwCiAgICAgICAgICAgICAgICBLaWxsQm9hcmQuc2V0X2NlbGxfdmFsdWUoY29sLCByb3csIHZhbHVlKQogICAgICAgIHByaW50KCLmj5DlrZDkvY3nva7vvJoiICsgcG9zVGlvbnMpCiAgICAgICAgcmV0dXJuIHBvc1Rpb25zCgogICAgZGVmIERvTGl2ZU9yS2lsbChzZWxmLCBraWxsQm9hcmQsIHJvdywgY29sKToKICAgICAgICAnJycKICAgICAgICDpgJLlvZLlpITnkIbvvIzlr7nmo4vnm5jov5vooYznrKzkuIDova7miavmj4/vvIzmoIforrDlv4XmrbvjgIHlv4XmtLvku6Xlj4rkuI3noa7lrpouCiAgICAgICAg5b+F5q275bCx5piv5LiK5LiL5bem5Y+z6YO95LiN5piv6Ieq5bex5Lq677yb5b+F5rS75bCx5piv5LiK5LiL5bem5Y+z5Lu75LiA5L2N572u5pyJ56m677yb5YW25LuW5oOF5Ya15Li65LiN56Gu5a6a44CCCiAgICAgICAg5Y6f5aeL5YC877yaM+OAgTgg5Y+v6IO95q275rS777yaMTPjgIExOCDlv4XmrbvvvJoyM+OAgTI4IOW/hea0u++8mjMz44CBMzgKICAgICAgICAnJycKICAgICAgICAjIOm7mOiupOW9k+WJjeS4uuS4jeehruWumgogICAgICAgIHZhbHVlID0ga2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpICUgMTAgKyAxMAogICAgICAgIGtpbGxCb2FyZC5zZXRfY2VsbF92YWx1ZShjb2wscm93LHZhbHVlKQogICAgICAgIHVwTm9RaSA9IFRydWUKICAgICAgICBkb3duTm9RaSA9IFRydWUKICAgICAgICBsZWZ0Tm9RaSA9IFRydWUKICAgICAgICByaWdudE5vUWkgPSBUcnVlCiAgICAgICAgIyDkuIoKICAgICAgICBpZihyb3cgPT0gMCk6CiAgICAgICAgICAgICMg5Yiw6aG25LqG77yM5q2755qECiAgICAgICAgICAgIHVwTm9RaSA9IFRydWUKICAgICAgICBlbGlmIGtpbGxCb2FyZFtyb3ctMV1bY29sXSA9PSAwOgogICAgICAgICAgICAjIOepuueahO+8jOW/hea0uwogICAgICAgICAgICB2YWx1ZSA9IGtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSAlIDEwICsgMzAKICAgICAgICAgICAga2lsbEJvYXJkLnNldF9jZWxsX3ZhbHVlKGNvbCxyb3csdmFsdWUpCiAgICAgICAgICAgIHVwTm9RaSA9IEZhbHNlCiAgICAgICAgZWxpZiBraWxsQm9hcmRbcm93LTFdW2NvbF0gJSAxMCAhPSBraWxsQm9hcmQuZ2V0X2NlbGxfY29sb3IoY29sLHJvdykgJSAxMDoKICAgICAgICAgICAgIyDkuIrpnaLnmoTmo4vlrZDlkozlvZPliY3kvY3nva7kuI3kuIDoh7TvvIzlgYforr7og73mnYAKICAgICAgICAgICAgdXBOb1FpID0gVHJ1ZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHVwTm9RaSA9IEZhbHNlCiAgICAgICAgICAgICMg5LiK6Z2i55qE5qOL5a2Q5ZKM5b2T5YmN5L2N572u5piv5LiA5qC355qECiAgICAgICAgICAgIGlmIGtpbGxCb2FyZFtyb3cgLSAxXVtjb2xdIDwgMTA6CiAgICAgICAgICAgICAgICAjIOS4iumdoui/mOayoeWkhOeQhu+8jOmAkuW9kuWkhOeQhgogICAgICAgICAgICAgICAgc2VsZi5Eb0xpdmVPcktpbGwoa2lsbEJvYXJkLCByb3cgLSAxLCBjb2wpCiAgICAgICAgIyDkuIsKICAgICAgICBpZiByb3cgPT0gMTg6CiAgICAgICAgICAgICMg5Yiw5bqV5LqG77yM5q2755qECiAgICAgICAgICAgIGRvd25Ob1FpID0gVHJ1ZQogICAgICAgIGVsaWYga2lsbEJvYXJkW3JvdysxXVtjb2xdID09IDA6CiAgICAgICAgICAgICMg56m655qE77yM5b+F5rS7CiAgICAgICAgICAgIHZhbHVlID0gIGtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSAlIDEwICsgMzAKICAgICAgICAgICAga2lsbEJvYXJkLnNldF9jZWxsX3ZhbHVlKGNvbCwgcm93LCB2YWx1ZSkKICAgICAgICAgICAgZG93bk5vUWkgPSBGYWxzZQogICAgICAgIGVsaWYga2lsbEJvYXJkW3JvdyArIDFdW2NvbF0gJSAxMCAhPSBraWxsQm9hcmQuZ2V0X2NlbGxfY29sb3IoY29sLHJvdykgJSAxMDoKICAgICAgICAgICAgIyDkuIvpnaLnmoTmo4vlrZDlkozlvZPliY3kvY3nva7kuI3kuIDoh7TvvIzog73mnYA7CiAgICAgICAgICAgIGRvd25Ob1FpID0gVHJ1ZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGRvd25Ob1FpID0gRmFsc2UKICAgICAgICAgICAgIyDkuIvpnaLnmoTmo4vlrZDlkozlvZPliY3kvY3nva7mmK/kuIDmoLfnmoQKICAgICAgICAgICAgaWYga2lsbEJvYXJkW3JvdyArIDFdW2NvbF0gPCAxMDoKICAgICAgICAgICAgICAgICMg5LiL6Z2i6L+Y5rKh5aSE55CG77yM6YCS5b2S5aSE55CGCiAgICAgICAgICAgICAgICBzZWxmLkRvTGl2ZU9yS2lsbChraWxsQm9hcmQsIHJvdyArIDEsIGNvbCkKICAgICAgICAjIOW3pgogICAgICAgIGlmIChjb2wgPT0gMCk6CiAgICAgICAgICAgICMg5Yiw5bem5LqG77yM5q2755qECiAgICAgICAgICAgIGxlZnROb1FpID0gVHJ1ZQogICAgICAgIGVsaWYga2lsbEJvYXJkW3Jvd11bY29sIC0gMV0gPT0gMDoKICAgICAgICAgICAgIyDnqbrnmoTvvIzlv4XmtLsKICAgICAgICAgICAgdmFsdWUgPSAga2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpICUgMTAgKyAzMAogICAgICAgICAgICBraWxsQm9hcmQuc2V0X2NlbGxfdmFsdWUoY29sLCByb3csIHZhbHVlKQogICAgICAgICAgICBsZWZ0Tm9RaSA9IEZhbHNlCiAgICAgICAgZWxpZiBraWxsQm9hcmRbcm93XVtjb2wgLSAxXSAlIDEwICE9IGtpbGxCb2FyZC5nZXRfY2VsbF9jb2xvcihjb2wscm93KSAlIDEwOgogICAgICAgICAgICAjIOW3pumdoueahOaji+WtkOWSjOW9k+WJjeS9jee9ruS4jeS4gOiHtO+8jOiDveadgDsKICAgICAgICAgICAgbGVmdE5vUWkgPSBUcnVlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgbGVmdE5vUWkgPSBGYWxzZQogICAgICAgICAgICAjIOW3pumdoueahOaji+WtkOWSjOW9k+WJjeS9jee9ruaYr+S4gOagt+eahAogICAgICAgICAgICBpZiBraWxsQm9hcmRbcm93XVtjb2wgLSAxXSA8IDEwOgogICAgICAgICAgICAgICAgIyDlt6bpnaLov5jmsqHlpITnkIbvvIzpgJLlvZLlpITnkIYKICAgICAgICAgICAgICAgIHNlbGYuRG9MaXZlT3JLaWxsKGtpbGxCb2FyZCwgcm93LCBjb2wgLSAxKQogICAgICAgICMg5Y+zCiAgICAgICAgaWYgKGNvbCA9PSAxOCk6CiAgICAgICAgICAgICMg5Yiw5Y+z5LqG77yM5q2755qECiAgICAgICAgICAgIHJpZ250Tm9RaSA9IFRydWUKICAgICAgICBlbGlmIGtpbGxCb2FyZFtyb3ddW2NvbCArIDFdID09IDA6CiAgICAgICAgICAgICMg56m655qE77yM5b+F5rS7CiAgICAgICAgICAgIHZhbHVlID0ga2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpICUgMTAgKyAzMAogICAgICAgICAgICBraWxsQm9hcmQuc2V0X2NlbGxfdmFsdWUoY29sLCByb3csIHZhbHVlKQogICAgICAgICAgICByaWdudE5vUWkgPSBGYWxzZQogICAgICAgIGVsaWYga2lsbEJvYXJkW3Jvd11bY29sICsgMV0gJSAxMCAhPSBraWxsQm9hcmQuZ2V0X2NlbGxfY29sb3IoY29sLHJvdykgJSAxMDoKICAgICAgICAgICAgIyDlt6bpnaLnmoTmo4vlrZDlkozlvZPliY3kvY3nva7kuI3kuIDoh7TvvIzog73mnYAKICAgICAgICAgICAgcmlnbnROb1FpID0gVHJ1ZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJpZ250Tm9RaSA9IEZhbHNlCiAgICAgICAgICAgIGlmIGtpbGxCb2FyZFtyb3ddW2NvbCArIDFdIDwgMTA6CiAgICAgICAgICAgICAgICAjIOW3pumdoui/mOayoeWkhOeQhu+8jOmAkuW9kuWkhOeQhgogICAgICAgICAgICAgICAgc2VsZi5Eb0xpdmVPcktpbGwoa2lsbEJvYXJkLCByb3csIGNvbCArIDEpCiAgICAgICAgIyDlm5vpnaLpg73mmK/mlYzkurrvvIzlv4XmrbsKICAgICAgICBpZiAodXBOb1FpIGFuZCBkb3duTm9RaSBhbmQgbGVmdE5vUWkgYW5kIHJpZ250Tm9RaSk6CiAgICAgICAgICAgIHZhbHVlID0ga2lsbEJvYXJkLmdldF9jZWxsX2NvbG9yKGNvbCxyb3cpICUgMTAgKyAyMAogICAgICAgICAgICBraWxsQm9hcmQuc2V0X2NlbGxfdmFsdWUoY29sLCByb3csIHZhbHVlKQoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIERvTGlhblFpKHNlbGYsIGtpbGxCb2FyZCwgcm93LCBjb2wpOgogICAgICAgICcnJwogICAgICAgIOmAkuW9kuWkhOeQhu+8jOWvueaji+ebmOi/m+ihjOesrOS6jOi9ruaJq+aPj+OAguS4juW/heatu+W/hea0u+i/nuawlOeahOS5n+aYr+W/heatu+W/hea0u+OAggogICAgICAgICcnJwo8fGZpbV9lbmR8Pg=="]
["3956b5ac262e4699dbe283a10176de59901129dd-1","3956b5ac262e4699dbe283a10176de59901129dd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQgbWF0aAoKVEFSR0VUX1lFQVIgPSAyMDIwCgojIExvYWQgaW5wdXRzCndpdGggb3BlbigiaW5wdXQudHh0IiwgInIiKSBhcyBmaWxlOgo8fGZpbV9ob2xlfD4KIyBOYXJyb3cgc2VhcmNoIHNwYWNlCm1pbmltdW0gPSBtaW4oaW5wdXRzKQp0cmltbWVkX2lucHV0cyA9IFtpbnB1dCBmb3IgaW5wdXQgaW4gaW5wdXRzIGlmIGlucHV0ICsgbWluaW11bSA8PSBUQVJHRVRfWUVBUl0KdHJpbW1lZF9pbnB1dHMuc29ydCgpCnRyaW1tZWRfaW5wdXRzID0gbGlzdChpdGVydG9vbHMuZHJvcHdoaWxlKGxhbWJkYSB4OiB4ICArIHRyaW1tZWRfaW5wdXRzW2xlbih0cmltbWVkX2lucHV0cykgLSAxXSA8IFRBUkdFVF9ZRUFSLCB0cmltbWVkX2lucHV0cykpCnByaW50KHRyaW1tZWRfaW5wdXRzKQoKIyBTZWFyY2ggdGhlIHJlbWFpbmRlcgpmb3IgY29tYm8gaW4gaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyh0cmltbWVkX2lucHV0cywgcj0zKToKICAgIGlmIHN1bShjb21ibykgPT0gVEFSR0VUX1lFQVI6CiAgICAgICAgcHJpbnQoIlNvbHV0aW9uIGVudHJpZXM6ICVkLCAlZCwgJWQiICVjb21ibykKICAgICAgICBwcmludCgiU29sdXRpb246ICVkIiAlbWF0aC5wcm9kKGNvbWJvKSkKICAgICAgICBicmVhawoKPHxmaW1fc3VmZml4fD4KICAgIGlucHV0X3R4dCA9IHN0cihmaWxlLnJlYWQoKSkKICAgIGlucHV0cyA9IFtpbnQobGluZSkgZm9yIGxpbmUgaW4gaW5wdXRfdHh0LnNwbGl0KCJcbiIpXQoKPHxmaW1fZW5kfD4="]
["3956b5ac262e4699dbe283a10176de59901129dd-2","3956b5ac262e4699dbe283a10176de59901129dd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQgbWF0aAoKVEFSR0VUX1lFQVIgPSAyMDIwCgojIExvYWQgaW5wdXRzCndpdGggb3BlbigiaW5wdXQudHh0IiwgInIiKSBhcyBmaWxlOgogICAgaW5wdXRfdHh0ID0gc3RyKGZpbGUucmVhZCgpKQogICAgaW5wdXRzID0gW2ludChsaW5lKSBmb3IgbGluZSBpbiBpbnB1dF90eHQuc3BsaXQoIlxuIildCgojIE5hcnJvdyBzZWFyY2ggc3BhY2UKbWluaW11bSA9IG1pbihpbnB1dHMpCnRyaW1tZWRfaW5wdXRzID0gW2lucHV0IGZvciBpbnB1dCBpbiBpbnB1dHMgaWYgaW5wdXQgKyBtaW5pbXVtIDw9IFRBUkdFVF9ZRUFSXQp0cmltbWVkX2lucHV0cy5zb3J0KCkKdHJpbW1lZF9pbnB1dHMgPSBsaXN0KGl0ZXJ0b29scy5kcm9wd2hpbGUobGFtYmRhIHg6IHggICsgdHJpbW1lZF9pbnB1dHNbbGVuKHRyaW1tZWRfaW5wdXRzKSAtIDFdIDwgVEFSR0VUX1lFQVIsIHRyaW1tZWRfaW5wdXRzKSkKcHJpbnQodHJpbW1lZF9pbnB1dHMpCgojIFNlYXJjaCB0aGUgcmVtYWluZGVyCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZm9yIGNvbWJvIGluIGl0ZXJ0b29scy5jb21iaW5hdGlvbnModHJpbW1lZF9pbnB1dHMsIHI9Myk6CiAgICBpZiBzdW0oY29tYm8pID09IFRBUkdFVF9ZRUFSOgogICAgICAgIHByaW50KCJTb2x1dGlvbiBlbnRyaWVzOiAlZCwgJWQsICVkIiAlY29tYm8pCiAgICAgICAgcHJpbnQoIlNvbHV0aW9uOiAlZCIgJW1hdGgucHJvZChjb21ibykpCjx8ZmltX2VuZHw+"]
["3956b5ac262e4699dbe283a10176de59901129dd-3","3956b5ac262e4699dbe283a10176de59901129dd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQgbWF0aAoKVEFSR0VUX1lFQVIgPSAyMDIwCgojIExvYWQgaW5wdXRzCndpdGggb3BlbigiaW5wdXQudHh0IiwgInIiKSBhcyBmaWxlOgogICAgaW5wdXRfdHh0ID0gc3RyKGZpbGUucmVhZCgpKQogICAgaW5wdXRzID0gW2ludChsaW5lKSBmb3IgbGluZSBpbiBpbnB1dF90eHQuc3BsaXQoIlxuIildCjx8ZmltX2hvbGV8Pgp0cmltbWVkX2lucHV0cy5zb3J0KCkKdHJpbW1lZF9pbnB1dHMgPSBsaXN0KGl0ZXJ0b29scy5kcm9wd2hpbGUobGFtYmRhIHg6IHggICsgdHJpbW1lZF9pbnB1dHNbbGVuKHRyaW1tZWRfaW5wdXRzKSAtIDFdIDwgVEFSR0VUX1lFQVIsIHRyaW1tZWRfaW5wdXRzKSkKcHJpbnQodHJpbW1lZF9pbnB1dHMpCgojIFNlYXJjaCB0aGUgcmVtYWluZGVyCmZvciBjb21ibyBpbiBpdGVydG9vbHMuY29tYmluYXRpb25zKHRyaW1tZWRfaW5wdXRzLCByPTMpOgogICAgaWYgc3VtKGNvbWJvKSA9PSBUQVJHRVRfWUVBUjoKICAgICAgICBwcmludCgiU29sdXRpb24gZW50cmllczogJWQsICVkLCAlZCIgJWNvbWJvKQogICAgICAgIHByaW50KCJTb2x1dGlvbjogJWQiICVtYXRoLnByb2QoY29tYm8pKQogICAgICAgIGJyZWFrCgo8fGZpbV9zdWZmaXh8PgoKIyBOYXJyb3cgc2VhcmNoIHNwYWNlCm1pbmltdW0gPSBtaW4oaW5wdXRzKQp0cmltbWVkX2lucHV0cyA9IFtpbnB1dCBmb3IgaW5wdXQgaW4gaW5wdXRzIGlmIGlucHV0ICsgbWluaW11bSA8PSBUQVJHRVRfWUVBUl0KPHxmaW1fZW5kfD4="]
["3956b5ac262e4699dbe283a10176de59901129dd-4","3956b5ac262e4699dbe283a10176de59901129dd","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGl0ZXJ0b29scwo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBtYXRoCgpUQVJHRVRfWUVBUiA9IDIwMjAKCjx8ZmltX2VuZHw+"]
["f2c292afcb5af7101ea2866232f1a33d57ab928b-1","f2c292afcb5af7101ea2866232f1a33d57ab928b","PHxmaW1fcHJlZml4fD4KZnJvbSB0a2ludGVyLmZpbGVkaWFsb2cgaW1wb3J0IGFza29wZW5maWxlbmFtZQpmcm9tIHRraW50ZXIgaW1wb3J0IG1lc3NhZ2Vib3gKZnJvbSB0a2ludGVyIGltcG9ydCBmaWxlZGlhbG9nCmZyb20gc2VsZW5pdW0gaW1wb3J0IHdlYmRyaXZlcgppbXBvcnQgdGtpbnRlciBhcyB0awppbXBvcnQgc2h1dGlsCmltcG9ydCB0aW1lCmltcG9ydCBvcwoKZGVmIGNyZWF0ZUZvbGRlcihkaXJlY3RvcnkpOgogICAgdHJ5OgogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXJlY3RvcnkpOgogICAgICAgICAgICBvcy5tYWtlZGlycyhkaXJlY3RvcnkpCiAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICBwcmludCAoJ0Vycm9yOiBDcmVhdGluZyBkaXJlY3RvcnkuICcgKyAgZGlyZWN0b3J5KQoKZGVmIGdldF9kb3dubG9hZF9wYXRoKCk6CiAgICAiIiJSZXR1cm5zIHRoZSBkZWZhdWx0IGRvd25sb2FkcyBwYXRoIGZvciBsaW51eCBvciB3aW5kb3dzIiIiCiAgICBpZiBvcy5uYW1lID09ICdudCc6CiAgICAgICAgaW1wb3J0IHdpbnJlZwogICAgICAgIHN1Yl9rZXkgPSByJ1NPRlRXQVJFXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMnCiAgICAgICAgZG93bmxvYWRzX2d1aWQgPSAnezM3NERFMjkwLTEyM0YtNDU2NS05MTY0LTM5QzQ5MjVFNDY3Qn0nCiAgICAgICAgd2l0aCB3aW5yZWcuT3BlbktleSh3aW5yZWcuSEtFWV9DVVJSRU5UX1VTRVIsIHN1Yl9rZXkpIGFzIGtleToKICAgICAgICAgICAgbG9jYXRpb24gPSB3aW5yZWcuUXVlcnlWYWx1ZUV4KGtleSwgZG93bmxvYWRzX2d1aWQpWzBdCiAgICAgICAgcmV0dXJuIGxvY2F0aW9uCiAgICBlbHNlOgogICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCd+JyksICdkb3dubG9hZHMnKQoKcm91bmRfcGljX25hbWUgPSAiIgpDT0xPUiA9ICJvcmFuZ2UiCndpbmRvd3MgPSB0ay5UaygpCndpbmRvd3MuY29uZmlnKGJnPUNPTE9SKQoKd2luZG93cy50aXRsZSgicm91bmRfdG9vbCIpCndpbmRvd3MuZ2VvbWV0cnkoIjkwMHg2MDArMzAwKzcwIikKCm5hbWVfcmVzdWx0ID0gdGsuTGFiZWwod2luZG93cywgdGV4dCA9ICLovLjlhaXlnJPop5LlvoznmoTmqpTlkI0iLCBiZz1DT0xPUiwgZm9udCA9ICgiYXJpYWwiLCAyMCksIGhlaWdoID0gNikKc2VsZWN0ID0gdGsuTGFiZWwod2luZG93cywgdGV4dCA9ICLpgbjmk4fopoHlnJPop5LnmoTlnJbniYciLCBiZz1DT0xPUiwgZm9udCA9ICgiYXJpYWwiLCAyMCksIGhlaWdoID0gNSkKcmVzdWx0ID0gdGsuRW50cnkod2luZG93cywgc2hvdz1Ob25lLCBmb250PSgnQXJpYWwnLCAxNCkpCnRhYiA9IHRrLkxhYmVsKHdpbmRvd3MsIHRleHQgPSAiICIsIGJnPUNPTE9SLCBmb250ID0gKCJhcmlhbCIsIDIwKSwgaGVpZ2ggPSAxKQoKZGVmIHF1aXQoc2VsZik6CiAgICBzZWxmLnJvb3QuZGVzdHJveSgpCgpjbGljayA9IDAKZmlsZW5hbWUgPSAiIgpkZWYgY2hvb3NlKCk6CiAgICBnbG9iYWwgZmlsZW5hbWUKICAgIGdsb2JhbCBjbGljawogICAgZmlsZW5hbWUgPSBmaWxlZGlhbG9nLmFza29wZW5maWxlbmFtZShmaWxldHlwZSA9ICgoImpwZWcgZmlsZXMiLCIqLmpwZyIpLCgiYWxsIGZpbGVzIiwiKi4qIikpKQogICAgaWYgZmlsZW5hbWUgPT0gIiI6CiAgICAgICAgbWVzc2FnZWJveC5zaG93d2FybmluZygi6K2m5ZGKIiwgIuaCqOmChOaykumBuOWPluS7u+S9leaqlOahiCIpCiAgICBlbHNlOgogICAgICAgIG1lc3NhZ2Vib3guc2hvd2luZm8oIuW3sumBuOaTh+aqlOahiOi3r+W+kSIsIGZpbGVuYW1lKQogICAgICAgIGNsaWNrICs9IDEKClNhdmVBcyA9ICIiCmRlZiBnb2dvKCk6CiAgICBnbG9iYWwgcm91bmRfcGljX25hbWUKICAgIGdsb2JhbCBTYXZlQXMKICAgIGdsb2JhbCBmaWxlbmFtZQogICAgZ2xvYmFsIGNsaWNrCiAgICByb3VuZF9waWNfbmFtZSA9IHJlc3VsdC5nZXQoKQogICAgaWYgcm91bmRfcGljX25hbWUgPT0gIiI6CiAgICAgICAgcm91bmRfcGljX25hbWUgPSAibm9uYW1lIgogICAgaWYgY2xpY2sgPT0gMToKICAgICAgICBjcmVhdGVGb2xkZXIoJy4vdGVtcC8nKQogICAgICAgIGNyZWF0ZUZvbGRlcignLi9yb3VuZGVkLycpCiAgICAgICAgY3JlYXRlRm9sZGVyKCcuL3Vucm91bmRlZC8nKQogICAgICAgIFNhdmVEaXJlY3RvcnkgPSBvcy5nZXRjd2QoKQogICAgICAgIFNhdmVBcyA9IG9zLnBhdGguam9pbihTYXZlRGlyZWN0b3J5LCAndGVtcCcpCiAgICAgICAgc2h1dGlsLmNvcHkoZmlsZW5hbWUsIFNhdmVBcykKCiAgICAgICAgYnJvd3NlciA9IHdlYmRyaXZlci5DaHJvbWUoKQogICAgICAgIGJyb3dzZXIuc2V0X3dpbmRvd19wb3NpdGlvbigtMzAwMCwgMCkKICAgICAgICBicm93c2VyLmdldCgiaHR0cDovL3d3dy5yb3VuZHBpYy5jb20vIikKICAgICAgICBicm93c2VyLmZpbmRfZWxlbWVudF9ieV9uYW1lKCJmaWxlIikuc2VuZF9rZXlzKGZpbGVuYW1lKQogICAgICAgIGJyb3dzZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvL2J1dHRvblt0ZXh0KCk9J1JvdW5kIGl0ISddIikuY2xpY2soKQogICAgICAgIHJlc3VsdF9uYW1lID0gYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfaWQoIm5hbWUiKQogICAgICAgIHJlc3VsdF9uYW1lLmNsZWFyKCkKPHxmaW1faG9sZXw+CgogICAgICAgIFNhdmVBc18yID0gb3MucGF0aC5qb2luKFNhdmVEaXJlY3RvcnksICdyb3VuZGVkJykKICAgICAgICBwYXRoID0gZ2V0X2Rvd25sb2FkX3BhdGgoKQogICAgICAgIHNodXRpbC5jb3B5KHBhdGggKyAiXFwiICsgcm91bmRfcGljX25hbWUgKyAiLmpwZyIsIFNhdmVBc18yKQogICAgICAgIG9zLnJlbW92ZShwYXRoICsgIlxcIiArIHJvdW5kX3BpY19uYW1lICsgIi5qcGciKQoKICAgICAgICBtZXNzYWdlYm94LnNob3dpbmZvKCLlrozmiJAiLCAi5bey5a6M5oiQ5ZyT6KeSIikKICAgICAgICBzaHV0aWwucm10cmVlKFNhdmVBcykKICAgIGVsc2U6CiAgICAgICAgbWVzc2FnZWJveC5zaG93ZXJyb3IoIumMr+iqpCIsICLoq4vlhYjpgbjmk4fmqpTmoYgiKQoKZGVmIGNsb3NlKCk6CiAgICB3aW5kb3dzLnF1aXQoKQoKcGljayA9IHRrLkJ1dHRvbih3aW5kb3dzLCB0ZXh0ID0gJ+mBuOaThycsIGZvbnQgPSAoJ0FyaWFsJywgMTUpLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSAxLCBjb21tYW5kID0gY2hvb3NlKQphY3Rpb24gPSB0ay5CdXR0b24od2luZG93cywgdGV4dCA9ICfplovlp4snLCBmb250ID0gKCdBcmlhbCcsIDE1KSwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gMSwgY29tbWFuZCA9IGdvZ28pCmxlYXZlID0gdGsuQnV0dG9uKHdpbmRvd3MsIHRleHQgPSAn6Zui6ZaLJywgZm9udCA9ICgnQXJpYWwnLCAxNSksIHdpZHRoID0gMTAsIGhlaWdodCA9IDEsIGNvbW1hbmQgPSBjbG9zZSkKCnNlbGVjdC5wYWNrKCkKcGljay5wYWNrKCkKbmFtZV9yZXN1bHQucGFjaygpCnJlc3VsdC5wYWNrKCkKdGFiLnBhY2soKQphY3Rpb24ucGFjaygpCmxlYXZlLnBhY2soKQoKd2luZG93cy5tYWlubG9vcCgpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcmVzdWx0X25hbWUuc2VuZF9rZXlzKHJvdW5kX3BpY19uYW1lKQogICAgICAgIGJyb3dzZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCcvL2lucHV0W0B0eXBlPSJidXR0b24iXScpLmNsaWNrKCkKICAgICAgICB0aW1lLnNsZWVwKDUpCiAgICAgICAgYnJvd3Nlci5jbG9zZSgpCjx8ZmltX2VuZHw+"]
["f2c292afcb5af7101ea2866232f1a33d57ab928b-2","f2c292afcb5af7101ea2866232f1a33d57ab928b","PHxmaW1fcHJlZml4fD4KZnJvbSB0a2ludGVyLmZpbGVkaWFsb2cgaW1wb3J0IGFza29wZW5maWxlbmFtZQpmcm9tIHRraW50ZXIgaW1wb3J0IG1lc3NhZ2Vib3gKZnJvbSB0a2ludGVyIGltcG9ydCBmaWxlZGlhbG9nCmZyb20gc2VsZW5pdW0gaW1wb3J0IHdlYmRyaXZlcgppbXBvcnQgdGtpbnRlciBhcyB0awppbXBvcnQgc2h1dGlsCmltcG9ydCB0aW1lCmltcG9ydCBvcwoKZGVmIGNyZWF0ZUZvbGRlcihkaXJlY3RvcnkpOgogICAgdHJ5OgogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXJlY3RvcnkpOgogICAgICAgICAgICBvcy5tYWtlZGlycyhkaXJlY3RvcnkpCiAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICBwcmludCAoJ0Vycm9yOiBDcmVhdGluZyBkaXJlY3RvcnkuICcgKyAgZGlyZWN0b3J5KQoKZGVmIGdldF9kb3dubG9hZF9wYXRoKCk6CiAgICAiIiJSZXR1cm5zIHRoZSBkZWZhdWx0IGRvd25sb2FkcyBwYXRoIGZvciBsaW51eCBvciB3aW5kb3dzIiIiCiAgICBpZiBvcy5uYW1lID09ICdudCc6CiAgICAgICAgaW1wb3J0IHdpbnJlZwogICAgICAgIHN1Yl9rZXkgPSByJ1NPRlRXQVJFXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMnCiAgICAgICAgZG93bmxvYWRzX2d1aWQgPSAnezM3NERFMjkwLTEyM0YtNDU2NS05MTY0LTM5QzQ5MjVFNDY3Qn0nCiAgICAgICAgd2l0aCB3aW5yZWcuT3BlbktleSh3aW5yZWcuSEtFWV9DVVJSRU5UX1VTRVIsIHN1Yl9rZXkpIGFzIGtleToKICAgICAgICAgICAgbG9jYXRpb24gPSB3aW5yZWcuUXVlcnlWYWx1ZUV4KGtleSwgZG93bmxvYWRzX2d1aWQpWzBdCiAgICAgICAgcmV0dXJuIGxvY2F0aW9uCiAgICBlbHNlOgogICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCd+JyksICdkb3dubG9hZHMnKQoKcm91bmRfcGljX25hbWUgPSAiIgpDT0xPUiA9ICJvcmFuZ2UiCndpbmRvd3MgPSB0ay5UaygpCndpbmRvd3MuY29uZmlnKGJnPUNPTE9SKQoKd2luZG93cy50aXRsZSgicm91bmRfdG9vbCIpCndpbmRvd3MuZ2VvbWV0cnkoIjkwMHg2MDArMzAwKzcwIikKCm5hbWVfcmVzdWx0ID0gdGsuTGFiZWwod2luZG93cywgdGV4dCA9ICLovLjlhaXlnJPop5LlvoznmoTmqpTlkI0iLCBiZz1DT0xPUiwgZm9udCA9ICgiYXJpYWwiLCAyMCksIGhlaWdoID0gNikKc2VsZWN0ID0gdGsuTGFiZWwod2luZG93cywgdGV4dCA9ICLpgbjmk4fopoHlnJPop5LnmoTlnJbniYciLCBiZz1DT0xPUiwgZm9udCA9ICgiYXJpYWwiLCAyMCksIGhlaWdoID0gNSkKcmVzdWx0ID0gdGsuRW50cnkod2luZG93cywgc2hvdz1Ob25lLCBmb250PSgnQXJpYWwnLCAxNCkpCnRhYiA9IHRrLkxhYmVsKHdpbmRvd3MsIHRleHQgPSAiICIsIGJnPUNPTE9SLCBmb250ID0gKCJhcmlhbCIsIDIwKSwgaGVpZ2ggPSAxKQoKZGVmIHF1aXQoc2VsZik6CiAgICBzZWxmLnJvb3QuZGVzdHJveSgpCgpjbGljayA9IDAKZmlsZW5hbWUgPSAiIgpkZWYgY2hvb3NlKCk6CiAgICBnbG9iYWwgZmlsZW5hbWUKICAgIGdsb2JhbCBjbGljawogICAgZmlsZW5hbWUgPSBmaWxlZGlhbG9nLmFza29wZW5maWxlbmFtZShmaWxldHlwZSA9ICgoImpwZWcgZmlsZXMiLCIqLmpwZyIpLCgiYWxsIGZpbGVzIiwiKi4qIikpKQogICAgaWYgZmlsZW5hbWUgPT0gIiI6CiAgICAgICAgbWVzc2FnZWJveC5zaG93d2FybmluZygi6K2m5ZGKIiwgIuaCqOmChOaykumBuOWPluS7u+S9leaqlOahiCIpCiAgICBlbHNlOgogICAgICAgIG1lc3NhZ2Vib3guc2hvd2luZm8oIuW3sumBuOaTh+aqlOahiOi3r+W+kSIsIGZpbGVuYW1lKQogICAgICAgIGNsaWNrICs9IDEKClNhdmVBcyA9ICIiCmRlZiBnb2dvKCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGdsb2JhbCByb3VuZF9waWNfbmFtZQogICAgZ2xvYmFsIFNhdmVBcwogICAgZ2xvYmFsIGZpbGVuYW1lCiAgICBnbG9iYWwgY2xpY2sKPHxmaW1fZW5kfD4="]
["f2c292afcb5af7101ea2866232f1a33d57ab928b-3","f2c292afcb5af7101ea2866232f1a33d57ab928b","PHxmaW1fcHJlZml4fD4KZnJvbSB0a2ludGVyLmZpbGVkaWFsb2cgaW1wb3J0IGFza29wZW5maWxlbmFtZQpmcm9tIHRraW50ZXIgaW1wb3J0IG1lc3NhZ2Vib3gKZnJvbSB0a2ludGVyIGltcG9ydCBmaWxlZGlhbG9nCmZyb20gc2VsZW5pdW0gaW1wb3J0IHdlYmRyaXZlcgppbXBvcnQgdGtpbnRlciBhcyB0awppbXBvcnQgc2h1dGlsCmltcG9ydCB0aW1lCmltcG9ydCBvcwoKZGVmIGNyZWF0ZUZvbGRlcihkaXJlY3RvcnkpOgogICAgdHJ5OgogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXJlY3RvcnkpOgogICAgICAgICAgICBvcy5tYWtlZGlycyhkaXJlY3RvcnkpCiAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICBwcmludCAoJ0Vycm9yOiBDcmVhdGluZyBkaXJlY3RvcnkuICcgKyAgZGlyZWN0b3J5KQoKZGVmIGdldF9kb3dubG9hZF9wYXRoKCk6CiAgICAiIiJSZXR1cm5zIHRoZSBkZWZhdWx0IGRvd25sb2FkcyBwYXRoIGZvciBsaW51eCBvciB3aW5kb3dzIiIiCiAgICBpZiBvcy5uYW1lID09ICdudCc6CiAgICAgICAgaW1wb3J0IHdpbnJlZwogICAgICAgIHN1Yl9rZXkgPSByJ1NPRlRXQVJFXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMnCiAgICAgICAgZG93bmxvYWRzX2d1aWQgPSAnezM3NERFMjkwLTEyM0YtNDU2NS05MTY0LTM5QzQ5MjVFNDY3Qn0nCiAgICAgICAgd2l0aCB3aW5yZWcuT3BlbktleSh3aW5yZWcuSEtFWV9DVVJSRU5UX1VTRVIsIHN1Yl9rZXkpIGFzIGtleToKICAgICAgICAgICAgbG9jYXRpb24gPSB3aW5yZWcuUXVlcnlWYWx1ZUV4KGtleSwgZG93bmxvYWRzX2d1aWQpWzBdCiAgICAgICAgcmV0dXJuIGxvY2F0aW9uCiAgICBlbHNlOgogICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCd+JyksICdkb3dubG9hZHMnKQoKcm91bmRfcGljX25hbWUgPSAiIgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CkNPTE9SID0gIm9yYW5nZSIKd2luZG93cyA9IHRrLlRrKCkKd2luZG93cy5jb25maWcoYmc9Q09MT1IpCgo8fGZpbV9lbmR8Pg=="]
["f2c292afcb5af7101ea2866232f1a33d57ab928b-4","f2c292afcb5af7101ea2866232f1a33d57ab928b","PHxmaW1fcHJlZml4fD4KZnJvbSB0a2ludGVyLmZpbGVkaWFsb2cgaW1wb3J0IGFza29wZW5maWxlbmFtZQpmcm9tIHRraW50ZXIgaW1wb3J0IG1lc3NhZ2Vib3gKZnJvbSB0a2ludGVyIGltcG9ydCBmaWxlZGlhbG9nCmZyb20gc2VsZW5pdW0gaW1wb3J0IHdlYmRyaXZlcgppbXBvcnQgdGtpbnRlciBhcyB0awppbXBvcnQgc2h1dGlsCmltcG9ydCB0aW1lCmltcG9ydCBvcwoKZGVmIGNyZWF0ZUZvbGRlcihkaXJlY3RvcnkpOgogICAgdHJ5OgogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXJlY3RvcnkpOgogICAgICAgICAgICBvcy5tYWtlZGlycyhkaXJlY3RvcnkpCiAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICBwcmludCAoJ0Vycm9yOiBDcmVhdGluZyBkaXJlY3RvcnkuICcgKyAgZGlyZWN0b3J5KQoKZGVmIGdldF9kb3dubG9hZF9wYXRoKCk6CiAgICAiIiJSZXR1cm5zIHRoZSBkZWZhdWx0IGRvd25sb2FkcyBwYXRoIGZvciBsaW51eCBvciB3aW5kb3dzIiIiCiAgICBpZiBvcy5uYW1lID09ICdudCc6CiAgICAgICAgaW1wb3J0IHdpbnJlZwogICAgICAgIHN1Yl9rZXkgPSByJ1NPRlRXQVJFXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMnCiAgICAgICAgZG93bmxvYWRzX2d1aWQgPSAnezM3NERFMjkwLTEyM0YtNDU2NS05MTY0LTM5QzQ5MjVFNDY3Qn0nCiAgICAgICAgd2l0aCB3aW5yZWcuT3BlbktleSh3aW5yZWcuSEtFWV9DVVJSRU5UX1VTRVIsIHN1Yl9rZXkpIGFzIGtleToKICAgICAgICAgICAgbG9jYXRpb24gPSB3aW5yZWcuUXVlcnlWYWx1ZUV4KGtleSwgZG93bmxvYWRzX2d1aWQpWzBdCiAgICAgICAgcmV0dXJuIGxvY2F0aW9uCiAgICBlbHNlOgogICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCd+JyksICdkb3dubG9hZHMnKQoKcm91bmRfcGljX25hbWUgPSAiIgpDT0xPUiA9ICJvcmFuZ2UiCndpbmRvd3MgPSB0ay5UaygpCndpbmRvd3MuY29uZmlnKGJnPUNPTE9SKQoKd2luZG93cy50aXRsZSgicm91bmRfdG9vbCIpCndpbmRvd3MuZ2VvbWV0cnkoIjkwMHg2MDArMzAwKzcwIikKCm5hbWVfcmVzdWx0ID0gdGsuTGFiZWwod2luZG93cywgdGV4dCA9ICLovLjlhaXlnJPop5LlvoznmoTmqpTlkI0iLCBiZz1DT0xPUiwgZm9udCA9ICgiYXJpYWwiLCAyMCksIGhlaWdoID0gNikKc2VsZWN0ID0gdGsuTGFiZWwod2luZG93cywgdGV4dCA9ICLpgbjmk4fopoHlnJPop5LnmoTlnJbniYciLCBiZz1DT0xPUiwgZm9udCA9ICgiYXJpYWwiLCAyMCksIGhlaWdoID0gNSkKcmVzdWx0ID0gdGsuRW50cnkod2luZG93cywgc2hvdz1Ob25lLCBmb250PSgnQXJpYWwnLCAxNCkpCnRhYiA9IHRrLkxhYmVsKHdpbmRvd3MsIHRleHQgPSAiICIsIGJnPUNPTE9SLCBmb250ID0gKCJhcmlhbCIsIDIwKSwgaGVpZ2ggPSAxKQoKZGVmIHF1aXQoc2VsZik6CiAgICBzZWxmLnJvb3QuZGVzdHJveSgpCgpjbGljayA9IDAKZmlsZW5hbWUgPSAiIgpkZWYgY2hvb3NlKCk6CiAgICBnbG9iYWwgZmlsZW5hbWUKICAgIGdsb2JhbCBjbGljawogICAgZmlsZW5hbWUgPSBmaWxlZGlhbG9nLmFza29wZW5maWxlbmFtZShmaWxldHlwZSA9ICgoImpwZWcgZmlsZXMiLCIqLmpwZyIpLCgiYWxsIGZpbGVzIiwiKi4qIikpKQogICAgaWYgZmlsZW5hbWUgPT0gIiI6CiAgICAgICAgbWVzc2FnZWJveC5zaG93d2FybmluZygi6K2m5ZGKIiwgIuaCqOmChOaykumBuOWPluS7u+S9leaqlOahiCIpCiAgICBlbHNlOgogICAgICAgIG1lc3NhZ2Vib3guc2hvd2luZm8oIuW3sumBuOaTh+aqlOahiOi3r+W+kSIsIGZpbGVuYW1lKQogICAgICAgIGNsaWNrICs9IDEKClNhdmVBcyA9ICIiCmRlZiBnb2dvKCk6CiAgICBnbG9iYWwgcm91bmRfcGljX25hbWUKICAgIGdsb2JhbCBTYXZlQXMKICAgIGdsb2JhbCBmaWxlbmFtZQogICAgZ2xvYmFsIGNsaWNrCiAgICByb3VuZF9waWNfbmFtZSA9IHJlc3VsdC5nZXQoKQogICAgaWYgcm91bmRfcGljX25hbWUgPT0gIiI6CiAgICAgICAgcm91bmRfcGljX25hbWUgPSAibm9uYW1lIgogICAgaWYgY2xpY2sgPT0gMToKICAgICAgICBjcmVhdGVGb2xkZXIoJy4vdGVtcC8nKQogICAgICAgIGNyZWF0ZUZvbGRlcignLi9yb3VuZGVkLycpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICBjcmVhdGVGb2xkZXIoJy4vdW5yb3VuZGVkLycpCiAgICAgICAgU2F2ZURpcmVjdG9yeSA9IG9zLmdldGN3ZCgpCiAgICAgICAgU2F2ZUFzID0gb3MucGF0aC5qb2luKFNhdmVEaXJlY3RvcnksICd0ZW1wJykKICAgICAgICBzaHV0aWwuY29weShmaWxlbmFtZSwgU2F2ZUFzKQo8fGZpbV9lbmR8Pg=="]
["f2c292afcb5af7101ea2866232f1a33d57ab928b-5","f2c292afcb5af7101ea2866232f1a33d57ab928b","PHxmaW1fcHJlZml4fD4KZnJvbSB0a2ludGVyLmZpbGVkaWFsb2cgaW1wb3J0IGFza29wZW5maWxlbmFtZQpmcm9tIHRraW50ZXIgaW1wb3J0IG1lc3NhZ2Vib3gKZnJvbSB0a2ludGVyIGltcG9ydCBmaWxlZGlhbG9nCmZyb20gc2VsZW5pdW0gaW1wb3J0IHdlYmRyaXZlcgppbXBvcnQgdGtpbnRlciBhcyB0awppbXBvcnQgc2h1dGlsCmltcG9ydCB0aW1lCmltcG9ydCBvcwoKZGVmIGNyZWF0ZUZvbGRlcihkaXJlY3RvcnkpOgogICAgdHJ5OgogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXJlY3RvcnkpOgogICAgICAgICAgICBvcy5tYWtlZGlycyhkaXJlY3RvcnkpCiAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICBwcmludCAoJ0Vycm9yOiBDcmVhdGluZyBkaXJlY3RvcnkuICcgKyAgZGlyZWN0b3J5KQoKZGVmIGdldF9kb3dubG9hZF9wYXRoKCk6CiAgICAiIiJSZXR1cm5zIHRoZSBkZWZhdWx0IGRvd25sb2FkcyBwYXRoIGZvciBsaW51eCBvciB3aW5kb3dzIiIiCiAgICBpZiBvcy5uYW1lID09ICdudCc6CiAgICAgICAgaW1wb3J0IHdpbnJlZwogICAgICAgIHN1Yl9rZXkgPSByJ1NPRlRXQVJFXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMnCiAgICAgICAgZG93bmxvYWRzX2d1aWQgPSAnezM3NERFMjkwLTEyM0YtNDU2NS05MTY0LTM5QzQ5MjVFNDY3Qn0nCiAgICAgICAgd2l0aCB3aW5yZWcuT3BlbktleSh3aW5yZWcuSEtFWV9DVVJSRU5UX1VTRVIsIHN1Yl9rZXkpIGFzIGtleToKICAgICAgICAgICAgbG9jYXRpb24gPSB3aW5yZWcuUXVlcnlWYWx1ZUV4KGtleSwgZG93bmxvYWRzX2d1aWQpWzBdCiAgICAgICAgcmV0dXJuIGxvY2F0aW9uCiAgICBlbHNlOgogICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCd+JyksICdkb3dubG9hZHMnKQoKcm91bmRfcGljX25hbWUgPSAiIgpDT0xPUiA9ICJvcmFuZ2UiCndpbmRvd3MgPSB0ay5UaygpCndpbmRvd3MuY29uZmlnKGJnPUNPTE9SKQoKd2luZG93cy50aXRsZSgicm91bmRfdG9vbCIpCndpbmRvd3MuZ2VvbWV0cnkoIjkwMHg2MDArMzAwKzcwIikKCm5hbWVfcmVzdWx0ID0gdGsuTGFiZWwod2luZG93cywgdGV4dCA9ICLovLjlhaXlnJPop5LlvoznmoTmqpTlkI0iLCBiZz1DT0xPUiwgZm9udCA9ICgiYXJpYWwiLCAyMCksIGhlaWdoID0gNikKc2VsZWN0ID0gdGsuTGFiZWwod2luZG93cywgdGV4dCA9ICLpgbjmk4fopoHlnJPop5LnmoTlnJbniYciLCBiZz1DT0xPUiwgZm9udCA9ICgiYXJpYWwiLCAyMCksIGhlaWdoID0gNSkKcmVzdWx0ID0gdGsuRW50cnkod2luZG93cywgc2hvdz1Ob25lLCBmb250PSgnQXJpYWwnLCAxNCkpCnRhYiA9IHRrLkxhYmVsKHdpbmRvd3MsIHRleHQgPSAiICIsIGJnPUNPTE9SLCBmb250ID0gKCJhcmlhbCIsIDIwKSwgaGVpZ2ggPSAxKQoKZGVmIHF1aXQoc2VsZik6CiAgICBzZWxmLnJvb3QuZGVzdHJveSgpCgpjbGljayA9IDAKZmlsZW5hbWUgPSAiIgpkZWYgY2hvb3NlKCk6CiAgICBnbG9iYWwgZmlsZW5hbWUKICAgIGdsb2JhbCBjbGljawogICAgZmlsZW5hbWUgPSBmaWxlZGlhbG9nLmFza29wZW5maWxlbmFtZShmaWxldHlwZSA9ICgoImpwZWcgZmlsZXMiLCIqLmpwZyIpLCgiYWxsIGZpbGVzIiwiKi4qIikpKQogICAgaWYgZmlsZW5hbWUgPT0gIiI6CiAgICAgICAgbWVzc2FnZWJveC5zaG93d2FybmluZygi6K2m5ZGKIiwgIuaCqOmChOaykumBuOWPluS7u+S9leaqlOahiCIpCiAgICBlbHNlOgogICAgICAgIG1lc3NhZ2Vib3guc2hvd2luZm8oIuW3sumBuOaTh+aqlOahiOi3r+W+kSIsIGZpbGVuYW1lKQogICAgICAgIGNsaWNrICs9IDEKClNhdmVBcyA9ICIiCmRlZiBnb2dvKCk6CiAgICBnbG9iYWwgcm91bmRfcGljX25hbWUKICAgIGdsb2JhbCBTYXZlQXMKICAgIGdsb2JhbCBmaWxlbmFtZQogICAgZ2xvYmFsIGNsaWNrCiAgICByb3VuZF9waWNfbmFtZSA9IHJlc3VsdC5nZXQoKQogICAgaWYgcm91bmRfcGljX25hbWUgPT0gIiI6CiAgICAgICAgcm91bmRfcGljX25hbWUgPSAibm9uYW1lIgo8fGZpbV9ob2xlfD4KICAgICAgICBTYXZlRGlyZWN0b3J5ID0gb3MuZ2V0Y3dkKCkKICAgICAgICBTYXZlQXMgPSBvcy5wYXRoLmpvaW4oU2F2ZURpcmVjdG9yeSwgJ3RlbXAnKQogICAgICAgIHNodXRpbC5jb3B5KGZpbGVuYW1lLCBTYXZlQXMpCgogICAgICAgIGJyb3dzZXIgPSB3ZWJkcml2ZXIuQ2hyb21lKCkKICAgICAgICBicm93c2VyLnNldF93aW5kb3dfcG9zaXRpb24oLTMwMDAsIDApCiAgICAgICAgYnJvd3Nlci5nZXQoImh0dHA6Ly93d3cucm91bmRwaWMuY29tLyIpCiAgICAgICAgYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfbmFtZSgiZmlsZSIpLnNlbmRfa2V5cyhmaWxlbmFtZSkKICAgICAgICBicm93c2VyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy9idXR0b25bdGV4dCgpPSdSb3VuZCBpdCEnXSIpLmNsaWNrKCkKICAgICAgICByZXN1bHRfbmFtZSA9IGJyb3dzZXIuZmluZF9lbGVtZW50X2J5X2lkKCJuYW1lIikKICAgICAgICByZXN1bHRfbmFtZS5jbGVhcigpCiAgICAgICAgcmVzdWx0X25hbWUuc2VuZF9rZXlzKHJvdW5kX3BpY19uYW1lKQogICAgICAgIGJyb3dzZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCcvL2lucHV0W0B0eXBlPSJidXR0b24iXScpLmNsaWNrKCkKICAgICAgICB0aW1lLnNsZWVwKDUpCiAgICAgICAgYnJvd3Nlci5jbG9zZSgpCgogICAgICAgIFNhdmVBc18yID0gb3MucGF0aC5qb2luKFNhdmVEaXJlY3RvcnksICdyb3VuZGVkJykKICAgICAgICBwYXRoID0gZ2V0X2Rvd25sb2FkX3BhdGgoKQogICAgICAgIHNodXRpbC5jb3B5KHBhdGggKyAiXFwiICsgcm91bmRfcGljX25hbWUgKyAiLmpwZyIsIFNhdmVBc18yKQogICAgICAgIG9zLnJlbW92ZShwYXRoICsgIlxcIiArIHJvdW5kX3BpY19uYW1lICsgIi5qcGciKQoKICAgICAgICBtZXNzYWdlYm94LnNob3dpbmZvKCLlrozmiJAiLCAi5bey5a6M5oiQ5ZyT6KeSIikKICAgICAgICBzaHV0aWwucm10cmVlKFNhdmVBcykKICAgIGVsc2U6CiAgICAgICAgbWVzc2FnZWJveC5zaG93ZXJyb3IoIumMr+iqpCIsICLoq4vlhYjpgbjmk4fmqpTmoYgiKQoKZGVmIGNsb3NlKCk6CiAgICB3aW5kb3dzLnF1aXQoKQoKcGljayA9IHRrLkJ1dHRvbih3aW5kb3dzLCB0ZXh0ID0gJ+mBuOaThycsIGZvbnQgPSAoJ0FyaWFsJywgMTUpLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSAxLCBjb21tYW5kID0gY2hvb3NlKQphY3Rpb24gPSB0ay5CdXR0b24od2luZG93cywgdGV4dCA9ICfplovlp4snLCBmb250ID0gKCdBcmlhbCcsIDE1KSwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gMSwgY29tbWFuZCA9IGdvZ28pCmxlYXZlID0gdGsuQnV0dG9uKHdpbmRvd3MsIHRleHQgPSAn6Zui6ZaLJywgZm9udCA9ICgnQXJpYWwnLCAxNSksIHdpZHRoID0gMTAsIGhlaWdodCA9IDEsIGNvbW1hbmQgPSBjbG9zZSkKCnNlbGVjdC5wYWNrKCkKcGljay5wYWNrKCkKbmFtZV9yZXN1bHQucGFjaygpCnJlc3VsdC5wYWNrKCkKdGFiLnBhY2soKQphY3Rpb24ucGFjaygpCmxlYXZlLnBhY2soKQoKd2luZG93cy5tYWlubG9vcCgpCjx8ZmltX3N1ZmZpeHw+CiAgICBpZiBjbGljayA9PSAxOgogICAgICAgIGNyZWF0ZUZvbGRlcignLi90ZW1wLycpCiAgICAgICAgY3JlYXRlRm9sZGVyKCcuL3JvdW5kZWQvJykKICAgICAgICBjcmVhdGVGb2xkZXIoJy4vdW5yb3VuZGVkLycpCjx8ZmltX2VuZHw+"]
["8433607e2229ea677dc937cee441a17dd8dc6f7e-1","8433607e2229ea677dc937cee441a17dd8dc6f7e","PHxmaW1fcHJlZml4fD4KZnJvbSBncmFwaHFsX2NsaWVudCBpbXBvcnQgR3JhcGhRTENsaWVudAoKR1JBUEhRTF9BUEkgPSAnaHR0cHM6Ly93d3cuZ3JhcGhxbGh1Yi5jb20vZ3JhcGhxbCcKCmRlZiB0ZXN0X3F1ZXJ5KCk6CiAgICBjbGllbnQgPSBHcmFwaFFMQ2xpZW50KEdSQVBIUUxfQVBJKQogICAgaWQgPSAnY2xheWFsbHNvcHAnCgogICAgcmVzdWx0ID0gY2xpZW50LnF1ZXJ5KCcnJwogICAgcXVlcnkgewogICAgICAgIGhuMiB7CiAgICAgICAgICAgIG5vZGVGcm9tSG5JZChpZDogImNsYXlhbGxzb3BwIiwgaXNVc2VySWQ6IHRydWUpIHsKICAgICAgICAgICAgICAgIGlkCiAgICAgICAgICAgICAgICAuLi5vbiBIYWNrZXJOZXdzVjJVc2VyIHsKICAgICAgICAgICAgICAgICAgICBobklkCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAnJycpCgogICAgYXNzZXJ0ICdkYXRhJyBpbiByZXN1bHQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgYXNzZXJ0IHJlc3VsdFsnZGF0YSddWydobjInXVsnbm9kZUZyb21IbklkJ11bJ2huSWQnXSA9PSBpZAoKPHxmaW1fZW5kfD4="]
["8433607e2229ea677dc937cee441a17dd8dc6f7e-2","8433607e2229ea677dc937cee441a17dd8dc6f7e","PHxmaW1fcHJlZml4fD4KZnJvbSBncmFwaHFsX2NsaWVudCBpbXBvcnQgR3JhcGhRTENsaWVudAoKR1JBUEhRTF9BUEkgPSAnaHR0cHM6Ly93d3cuZ3JhcGhxbGh1Yi5jb20vZ3JhcGhxbCcKCmRlZiB0ZXN0X3F1ZXJ5KCk6CiAgICBjbGllbnQgPSBHcmFwaFFMQ2xpZW50KEdSQVBIUUxfQVBJKQogICAgaWQgPSAnY2xheWFsbHNvcHAnCgogICAgcmVzdWx0ID0gY2xpZW50LnF1ZXJ5KCcnJwogICAgcXVlcnkgewogICAgICAgIGhuMiB7CiAgICAgICAgICAgIG5vZGVGcm9tSG5JZChpZDogImNsYXlhbGxzb3BwIiwgaXNVc2VySWQ6IHRydWUpIHsKICAgICAgICAgICAgICAgIGlkCiAgICAgICAgICAgICAgICAuLi5vbiBIYWNrZXJOZXdzVjJVc2VyIHsKICAgICAgICAgICAgICAgICAgICBobklkCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAnJycpCgogICAgYXNzZXJ0ICdkYXRhJyBpbiByZXN1bHQKICAgIGFzc2VydCByZXN1bHRbJ2RhdGEnXVsnaG4yJ11bJ25vZGVGcm9tSG5JZCddWydobklkJ10gPT0gaWQKCmRlZiB0ZXN0X3F1ZXJ5X3dpdGhfdmFyaWFibGVzKCk6CiAgICBjbGllbnQgPSBHcmFwaFFMQ2xpZW50KEdSQVBIUUxfQVBJKQogICAgaWQgPSAnY2xheWFsbHNvcHAnCgogICAgcmVzdWx0ID0gY2xpZW50LnF1ZXJ5KCcnJwogICAgcXVlcnkgKCRpZDogU3RyaW5nISkgewogICAgICAgIGhuMiB7CiAgICAgICAgICAgIG5vZGVGcm9tSG5JZChpZDogJGlkLCBpc1VzZXJJZDogdHJ1ZSkgewogICAgICAgICAgICAgICAgaWQKICAgICAgICAgICAgICAgIC4uLm9uIEhhY2tlck5ld3NWMlVzZXIgewogICAgICAgICAgICAgICAgICAgIGhuSWQKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgICcnJywgeydpZCc6IGlkfSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGFzc2VydCAnZGF0YScgaW4gcmVzdWx0CiAgICBhc3NlcnQgcmVzdWx0WydkYXRhJ11bJ2huMiddWydub2RlRnJvbUhuSWQnXVsnaG5JZCddID09IGlkCjx8ZmltX2VuZHw+"]
["8433607e2229ea677dc937cee441a17dd8dc6f7e-3","8433607e2229ea677dc937cee441a17dd8dc6f7e","PHxmaW1fcHJlZml4fD4KZnJvbSBncmFwaHFsX2NsaWVudCBpbXBvcnQgR3JhcGhRTENsaWVudAoKR1JBUEhRTF9BUEkgPSAnaHR0cHM6Ly93d3cuZ3JhcGhxbGh1Yi5jb20vZ3JhcGhxbCcKCmRlZiB0ZXN0X3F1ZXJ5KCk6CiAgICBjbGllbnQgPSBHcmFwaFFMQ2xpZW50KEdSQVBIUUxfQVBJKQogICAgaWQgPSAnY2xheWFsbHNvcHAnCgogICAgcmVzdWx0ID0gY2xpZW50LnF1ZXJ5KCcnJwogICAgcXVlcnkgewogICAgICAgIGhuMiB7CiAgICAgICAgICAgIG5vZGVGcm9tSG5JZChpZDogImNsYXlhbGxzb3BwIiwgaXNVc2VySWQ6IHRydWUpIHsKICAgICAgICAgICAgICAgIGlkCiAgICAgICAgICAgICAgICAuLi5vbiBIYWNrZXJOZXdzVjJVc2VyIHsKICAgICAgICAgICAgICAgICAgICBobklkCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAnJycpCgogICAgYXNzZXJ0ICdkYXRhJyBpbiByZXN1bHQKICAgIGFzc2VydCByZXN1bHRbJ2RhdGEnXVsnaG4yJ11bJ25vZGVGcm9tSG5JZCddWydobklkJ10gPT0gaWQKCmRlZiB0ZXN0X3F1ZXJ5X3dpdGhfdmFyaWFibGVzKCk6CiAgICBjbGllbnQgPSBHcmFwaFFMQ2xpZW50KEdSQVBIUUxfQVBJKQogICAgaWQgPSAnY2xheWFsbHNvcHAnCjx8ZmltX2hvbGV8PgogICAgICAgICAgICBub2RlRnJvbUhuSWQoaWQ6ICRpZCwgaXNVc2VySWQ6IHRydWUpIHsKICAgICAgICAgICAgICAgIGlkCiAgICAgICAgICAgICAgICAuLi5vbiBIYWNrZXJOZXdzVjJVc2VyIHsKICAgICAgICAgICAgICAgICAgICBobklkCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAnJycsIHsnaWQnOiBpZH0pCgogICAgYXNzZXJ0ICdkYXRhJyBpbiByZXN1bHQKICAgIGFzc2VydCByZXN1bHRbJ2RhdGEnXVsnaG4yJ11bJ25vZGVGcm9tSG5JZCddWydobklkJ10gPT0gaWQKPHxmaW1fc3VmZml4fD4KCiAgICByZXN1bHQgPSBjbGllbnQucXVlcnkoJycnCiAgICBxdWVyeSAoJGlkOiBTdHJpbmchKSB7CiAgICAgICAgaG4yIHsKPHxmaW1fZW5kfD4="]
["26866375929dd9995f6ee7c7f282628bc2eb2b8f-1","26866375929dd9995f6ee7c7f282628bc2eb2b8f","PHxmaW1fcHJlZml4fD4KIy0qLSBjb2Rpbmc6IHV0Zi04IC0qLQppbXBvcnQgb3MsIHN5cwpzeXMucGF0aC5hcHBlbmQob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkpCmltcG9ydCBhc2tfZGIKaW1wb3J0IGFza191dGlsCmltcG9ydCBqc29uCmltcG9ydCByZXF1ZXN0cwppbXBvcnQgdGltZQppbXBvcnQgdXJsbGliLnJlcXVlc3QKaW1wb3J0IHhtbC5ldHJlZS5FbGVtZW50VHJlZSBhcyBFVAoKZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHBhcnNlX3FzCmZyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1cmxwYXJzZQoKZnJvbSBpbnRlcl9yZXZpZXcgaW1wb3J0IFBhcmtSZXZpZXcKCmltcG9ydCBtYWtlX2Jvb2sKCiNpbnRlcnBhcmtfY2F0aWQgPSBbJzIwNycsJzIwOCcsJzIwOScsJzIxMCcsJzIxMScsJzIxNCcsJzIxNScsJzIxNicsJzIxNycsJzIwMScsJzIwMCcsJzIwMycsJzIwNScsJzIwNiddCmludGVycGFya19jYXRpZCA9IFtdCmludGVycGFya19jYXRpZC5hcHBlbmQoJzEwMCcpIAkj6rWt64K064+E7IScCmludGVycGFya19jYXRpZC5hcHBlbmQoJzEwMScpIAkj6rWt64K064+E7IScPuyGjOyEpAppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcxMDInKSAJI+q1reuCtOuPhOyEnD7si5wv7JeQ7IS47J20CmludGVycGFya19jYXRpZC5hcHBlbmQoJzEwMycpIAkj6rWt64K064+E7IScPuyYiOyIoC/rjIDspJHrrLjtmZQKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMTA0JykgCSPqta3rgrTrj4TshJw+7IKs7ZqM6rO87ZWZCmludGVycGFya19jYXRpZC5hcHBlbmQoJzEwNScpIAkj6rWt64K064+E7IScPuyXreyCrOyZgCDrrLjtmZQKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMTA3JykgCSPqta3rgrTrj4TshJw+7J6h7KeACmludGVycGFya19jYXRpZC5hcHBlbmQoJzEwOCcpIAkj6rWt64K064+E7IScPuunjO2ZlAppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcxMDknKSAJI+q1reuCtOuPhOyEnD7snKDslYQKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMTEwJykgCSPqta3rgrTrj4TshJw+7JWE64+ZCmludGVycGFya19jYXRpZC5hcHBlbmQoJzExMScpIAkj6rWt64K064+E7IScPuqwgOygleqzvCDsg53tmZwKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMTEyJykgCSPqta3rgrTrj4TshJw+7LKt7IaM64WECmludGVycGFya19jYXRpZC5hcHBlbmQoJzExMycpIAkj6rWt64K064+E7IScPuy0iOuTse2VmeyKteyEnAppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcxMTQnKSAJI+q1reuCtOuPhOyEnD7qs6Drk7HtlZnsirXshJwKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMTE1JykgCSPqta3rgrTrj4TshJw+6rWt7Ja0L+yZuOq1reyWtC/sgqzsoIQKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMTE2JykgCSPqta3rgrTrj4TshJw+7J6Q7Jew6rO8IOqzvO2VmQppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcxMTcnKSAJI+q1reuCtOuPhOyEnD7qsr3soJzqsr3smIEKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMTE4JykgCSPqta3rgrTrj4TshJw+7J6Q6riw6rOE67CcCmludGVycGFya19jYXRpZC5hcHBlbmQoJzExOScpIAkj6rWt64K064+E7IScPuyduOusuAppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcxMjAnKSAJI+q1reuCtOuPhOyEnD7sooXqtZAv7Jet7ZWZCmludGVycGFya19jYXRpZC5hcHBlbmQoJzEyMicpIAkj6rWt64K064+E7IScPuy7tO2TqO2EsC/snbjthLDrhLcKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMTIzJykgCSPqta3rgrTrj4TshJw+7J6Q6rKp7IScL+yImO2XmOyEnAppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcxMjQnKSAJI+q1reuCtOuPhOyEnD7st6jrr7gv66CI7KCACmludGVycGFya19jYXRpZC5hcHBlbmQoJzEyNScpIAkj6rWt64K064+E7IScPuyghOqzteuPhOyEnC/rjIDtlZnqtZDsnqwKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMTI2JykgCSPqta3rgrTrj4TshJw+6rG06rCVL+u3sO2LsAppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcxMjgnKSAJI+q1reuCtOuPhOyEnD7sl6ztlokKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMTI5JykgCSPqta3rgrTrj4TshJw+7KSR65Ox7ZWZ7Iq17IScCmludGVycGFya19jYXRpZC5hcHBlbmQoJzIwMCcpIAkj7Jm46rWt64+E7IScCmludGVycGFya19jYXRpZC5hcHBlbmQoJzIwMScpIAkj7Jm46rWt64+E7IScPuyWtOumsOydtAppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcyMDMnKSAJI+yZuOq1reuPhOyEnD5FTFQv7IKs7KCECmludGVycGFya19jYXRpZC5hcHBlbmQoJzIwNScpIAkj7Jm46rWt64+E7IScPuusuO2VmQppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcyMDYnKSAJI+yZuOq1reuPhOyEnD7qsr3smIEv7J2466y4CmludGVycGFya19jYXRpZC5hcHBlbmQoJzIwNycpIAkj7Jm46rWt64+E7IScPuyYiOyIoC/rlJTsnpDsnbgKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMjA4JykgCSPsmbjqta3rj4TshJw+7Iuk7JqpCmludGVycGFya19jYXRpZC5hcHBlbmQoJzIwOScpIAkj7Jm46rWt64+E7IScPu2VtOyZuOyeoeyngAppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcyMTAnKSAJI+yZuOq1reuPhOyEnD7rjIDtlZnqtZDsnqwv7KCE66y47ISc7KCBCmludGVycGFya19jYXRpZC5hcHBlbmQoJzIxMScpIAkj7Jm46rWt64+E7IScPuy7tO2TqO2EsAppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcyMTQnKSAJI+yZuOq1reuPhOyEnD7snbzrs7jrj4TshJwKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMjE1JykgCSPsmbjqta3rj4TshJw+7ZSE656R7Iqk64+E7IScCmludGVycGFya19jYXRpZC5hcHBlbmQoJzIxNicpIAkj7Jm46rWt64+E7IScPuykkeq1reuPhOyEnAppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcyMTcnKSAJI+yZuOq1reuPhOyEnD7tlbTsmbjso7zrrLjsm5DshJwKYm9va19jb2RlID0geycxMDAnOifqta3rgrTrj4TshJwnLCcxMDEnOifshozshKQnLCcxMDInOifsi5wt7JeQ7IS47J20JywnMTAzJzon7JiI7IigLeuMgOykkeusuO2ZlCcsJzEwNCc6J+yCrO2ajOqzvO2VmScsJzEwNSc6J+yXreyCrOyZgOusuO2ZlCcsJzEwNyc6J+yeoeyngCcsJzEwOCc6J+unjO2ZlCcsJzEwOSc6J+ycoOyVhCcsJzExMCc6J+yVhOuPmScsJzExMSc6J+qwgOygleqzvOyDne2ZnCcsJzExMic6J+yyreyGjOuFhCcsJzExMyc6J+y0iOuTse2VmeyKteyEnCcsJzExNCc6J+qzoOuTse2VmeyKteyEnCcsJzExNSc6J+q1reyWtC3smbjqta3slrQt7IKs7KCEJywnMTE2Jzon7J6Q7Jew6rO86rO87ZWZJywnMTE3Jzon6rK97KCc6rK97JiBJywnMTE4Jzon7J6Q6riw6rOE67CcJywnMTE5Jzon7J2466y4JywnMTIwJzon7KKF6rWQLeyXre2VmScsJzEyMic6J+y7tO2TqO2EsC3snbjthLDrhLcnLCcxMjMnOifsnpDqsqnshJwt7IiY7ZeY7IScJywnMTI0Jzon7Leo66+4LeugiOyggCcsJzEyNSc6J+yghOqzteuPhOyEnC3rjIDtlZnqtZDsnqwnLCcxMjYnOifqsbTqsJUt67ew7YuwJywnMTI4Jzon7Jes7ZaJJywnMTI5Jzon7KSR65Ox7ZWZ7Iq17IScJywnMjAwJzon7Jm46rWt64+E7IScJywnMjAxJzon7Ja066aw7J20JywnMjAzJzonRUxULeyCrOyghCcsJzIwNSc6J+usuO2VmScsJzIwNic6J+qyveyYgS3snbjrrLgnLCcyMDcnOifsmIjsiKAt65SU7J6Q7J24JywnMjA4Jzon7Iuk7JqpJywnMjA5Jzon7ZW07Jm47J6h7KeAJywnMjEwJzon64yA7ZWZ6rWQ7J6sLeyghOusuOyEnOyggScsJzIxMSc6J+y7tO2TqO2EsCcsJzIxNCc6J+ydvOuzuOuPhOyEnCcsJzIxNSc6J+2UhOuekeyKpOuPhOyEnCcsJzIxNic6J+ykkeq1reuPhOyEnCcsJzIxNyc6J+2VtOyZuOyjvOusuOybkOyEnCd9CgpOVl9DRU5URVJfQVBJID0gb3MuZ2V0ZW52KCdOVl9DRU5URVJfQVBJJykKUEFSS19BUElfS0VZID0gb3MuZ2V0ZW52KCdQQVJLX0FQSV9LRVknKQpEQl9JTkZPICA9IG9zLmdldGVudignREJfSU5GTycpCgoKUEFSS19BUElfS0VZID0gb3MuZ2V0ZW52KCdQQVJLX0FQSV9LRVknKQpudl9hcGlfYXJyID0gTlZfQ0VOVEVSX0FQSS5zcGxpdCgifCIpCQpOVl9BUElfQ0lEID0gbnZfYXBpX2FyclswXQpOVl9BUElfU0lEID0gbnZfYXBpX2FyclsxXQoKZGJpbmZvX2FyciA9IERCX0lORk8uc3BsaXQoInwiKQpob3N0PWRiaW5mb19hcnJbMF0KdXNlcj1kYmluZm9fYXJyWzFdCnB3IAk9ZGJpbmZvX2FyclsyXQpkYiAJPWRiaW5mb19hcnJbM10KCmRlZiBpbnRlclBhcmtCZXN0U2VsbGVyKGNhdElkKToJCgl3ZWJfdXJsIAkJPSAiaHR0cDovL2Jvb2suaW50ZXJwYXJrLmNvbS9hcGkvYmVzdFNlbGxlci5hcGk/a2V5PSIrUEFSS19BUElfS0VZKyImY2F0ZWdvcnlJZD0iK2NhdElkCglwcmludCgid2ViX3VybCA6ICIsd2ViX3VybCkKCXJlc3BvbnNlIAkJPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHdlYl91cmwpLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKCSNwcmludChyZXNwb25zZSkKCgl4dHJlZSAJCQk9IEVULmZyb21zdHJpbmcocmVzcG9uc2UpCglyZXR1cm4geHRyZWUJCgpkZWYgYm9va01hbmFPcmRlckluc2VydChwcmRObyk6CglzcWxJZCA9ICIiIiBJTlNFUlQgSU5UTyBCT09LX01BTkFfT1JERVIgVkFMVUVTKCclcycsTk9XKCkpIiIiICUocHJkTm8pCgkjcHJpbnQoc3FsSWQpCglhZC5pbnNlcnQoc3FsSWQpCgpkZWYgaXNCb29rTWFuYShwcmRObyk6CgljbnQgPSBhZC5zZWxlY3RPbmUoIiIiIFNFTEVDVCBDT1VOVCgqKSBGUk9NIEJPT0tfTUFOQV9PUkRFUiBXSEVSRSBQUkRfTk8gPSclcycgIiIiICUgcHJkTm8pWzBdCglpZiBjbnQ9PTA6CgkJcmV0dXJuIEZhbHNlCgllbGlmIGNudD4wOgoJCXJldHVybiBUcnVlCgkKZGVmIGJvb2tyZXZpZXdJbnNlcnQocHJkTm8pOgoJcmV2aWV3X2xpc3QgPSBQYXJrUmV2aWV3KCkuZ2V0KHByZE5vKQoJaWYgbGVuKHJldmlld19saXN0KSA+IDA6CgkJZm9yIHJldmlldyBpbiByZXZpZXdfbGlzdDoKCQkJc3RhciA9IHJldmlld1snc3RhciddCgkJCXJlZ19ubSA9IHJldmlld1sncmVnX25tJ10KCQkJcmVnX2R0ID0gcmV2aWV3WydyZWdfZHQnXQoJCQljb21tZW50ID0gcmV2aWV3Wydjb21tZW50J10KCQkJc3FsSWQgPSAiIiIgSU5TRVJUIElOVE8gQk9PS19ERVNDIFZBTFVFUygnJXMnLCVzLCclcycsJyVzJywnJXMnKSIiIiAlKHByZE5vLHN0YXIscmVnX25tLHJlZ19kdCxjb21tZW50KQoJCQkjcHJpbnQoc3FsSWQpCgkJCWFkLmluc2VydChzcWxJZCkKCgoKI+uEpOydtOuyhCDssYXqsoDsg4kKZGVmIG5hdmVyQm9va1NlYXJjaChpc2JuKToKCSNwcmludCgibmF2ZXJCb29rU2VhcmNoIHN0YXJ0IikKCWVuY1RleHQgPSB1cmxsaWIucGFyc2UucXVvdGUoIuqygOyDie2VoCDri6jslrQiKQoJdXJsID0gImh0dHBzOi8vb3BlbmFwaS5uYXZlci5jb20vdjEvc2VhcmNoL2Jvb2tfYWR2P2RfaXNibj0iICsgaXNibiAjIGpzb24g6rKw6rO8CQkKCXJlcXVlc3QgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KHVybCkKCXJlcXVlc3QuYWRkX2hlYWRlcigiWC1OYXZlci1DbGllbnQtSWQiLE5WX0FQSV9DSUQpCglyZXF1ZXN0LmFkZF9oZWFkZXIoIlgtTmF2ZXItQ2xpZW50LVNlY3JldCIsTlZfQVBJX1NJRCkKCXJlc3BvbnNlID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihyZXF1ZXN0KQoJcmVzY29kZSA9IHJlc3BvbnNlLmdldGNvZGUoKQoJI3ByaW50KCJyZXNjb2RlICIscmVzY29kZSkKCWlmKHJlc2NvZGU9PTIwMCk6CgkgICAgcmVzcG9uc2VfYm9keSA9IHJlc3BvbnNlLnJlYWQoKQkJICAgIAoJICAgICNwcmludCh0eXBlKHJlc3BvbnNlX2JvZHkpKQoJICAgIHJlc3BvbnNlX3RleHQgPSByZXNwb25zZV9ib2R5LmRlY29kZSgndXRmLTgnKQoJICAgICNwcmludChyZXNwb25zZV90ZXh0KQoJICAgCgoJICAgIHJldHVybiBqc29uLmxvYWRzKHJlc3BvbnNlX3RleHQpCgoJZWxzZToKCSAgICBwcmludCgiRXJyb3IgQ29kZToiICsgcmVzY29kZSkKCgppZiBfX25hbWVfXyAgPT0gIl9fbWFpbl9fIjoJCQoJYWQgPSBhc2tfZGIuQXNrRGIoaG9zdCwgdXNlciwgcHcsIGRiKQoJZm9yX2NudCA9IDAKCWNudCA9MAoJdHJ5OgoJCWZvciBpYyBpbiBpbnRlcnBhcmtfY2F0aWQ6CgkJCWZvcl9jbnQrPTEKCQkJaW50ZXJfY2F0SWQgPSBpYwoJCQkjcHJpbnQoImludGVyX2NhdElkIDogIixpbnRlcl9jYXRJZCkJCQkKCQkJeHRyZWUgPSBpbnRlclBhcmtCZXN0U2VsbGVyKGludGVyX2NhdElkKQoJCQlib29rX2NkMiA9IGJvb2tfY29kZVtpbnRlcl9jYXRJZF0KCQkJaWYgaW50ZXJfY2F0SWRbOjFdPT0nMSc6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCQkJCWJvb2tfY2QxID0gIuq1reuCtOuPhOyEnCIKPHxmaW1fZW5kfD4="]
["26866375929dd9995f6ee7c7f282628bc2eb2b8f-2","26866375929dd9995f6ee7c7f282628bc2eb2b8f","PHxmaW1fcHJlZml4fD4KIy0qLSBjb2Rpbmc6IHV0Zi04IC0qLQppbXBvcnQgb3MsIHN5cwpzeXMucGF0aC5hcHBlbmQob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkpCmltcG9ydCBhc2tfZGIKaW1wb3J0IGFza191dGlsCmltcG9ydCBqc29uCmltcG9ydCByZXF1ZXN0cwppbXBvcnQgdGltZQppbXBvcnQgdXJsbGliLnJlcXVlc3QKaW1wb3J0IHhtbC5ldHJlZS5FbGVtZW50VHJlZSBhcyBFVAoKZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHBhcnNlX3FzCmZyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1cmxwYXJzZQoKZnJvbSBpbnRlcl9yZXZpZXcgaW1wb3J0IFBhcmtSZXZpZXcKCmltcG9ydCBtYWtlX2Jvb2sKCiNpbnRlcnBhcmtfY2F0aWQgPSBbJzIwNycsJzIwOCcsJzIwOScsJzIxMCcsJzIxMScsJzIxNCcsJzIxNScsJzIxNicsJzIxNycsJzIwMScsJzIwMCcsJzIwMycsJzIwNScsJzIwNiddCmludGVycGFya19jYXRpZCA9IFtdCmludGVycGFya19jYXRpZC5hcHBlbmQoJzEwMCcpIAkj6rWt64K064+E7IScCmludGVycGFya19jYXRpZC5hcHBlbmQoJzEwMScpIAkj6rWt64K064+E7IScPuyGjOyEpAppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcxMDInKSAJI+q1reuCtOuPhOyEnD7si5wv7JeQ7IS47J20CmludGVycGFya19jYXRpZC5hcHBlbmQoJzEwMycpIAkj6rWt64K064+E7IScPuyYiOyIoC/rjIDspJHrrLjtmZQKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMTA0JykgCSPqta3rgrTrj4TshJw+7IKs7ZqM6rO87ZWZCmludGVycGFya19jYXRpZC5hcHBlbmQoJzEwNScpIAkj6rWt64K064+E7IScPuyXreyCrOyZgCDrrLjtmZQKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMTA3JykgCSPqta3rgrTrj4TshJw+7J6h7KeACmludGVycGFya19jYXRpZC5hcHBlbmQoJzEwOCcpIAkj6rWt64K064+E7IScPuunjO2ZlAppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcxMDknKSAJI+q1reuCtOuPhOyEnD7snKDslYQKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMTEwJykgCSPqta3rgrTrj4TshJw+7JWE64+ZCmludGVycGFya19jYXRpZC5hcHBlbmQoJzExMScpIAkj6rWt64K064+E7IScPuqwgOygleqzvCDsg53tmZwKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMTEyJykgCSPqta3rgrTrj4TshJw+7LKt7IaM64WECmludGVycGFya19jYXRpZC5hcHBlbmQoJzExMycpIAkj6rWt64K064+E7IScPuy0iOuTse2VmeyKteyEnAppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcxMTQnKSAJI+q1reuCtOuPhOyEnD7qs6Drk7HtlZnsirXshJwKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMTE1JykgCSPqta3rgrTrj4TshJw+6rWt7Ja0L+yZuOq1reyWtC/sgqzsoIQKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMTE2JykgCSPqta3rgrTrj4TshJw+7J6Q7Jew6rO8IOqzvO2VmQppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcxMTcnKSAJI+q1reuCtOuPhOyEnD7qsr3soJzqsr3smIEKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMTE4JykgCSPqta3rgrTrj4TshJw+7J6Q6riw6rOE67CcCmludGVycGFya19jYXRpZC5hcHBlbmQoJzExOScpIAkj6rWt64K064+E7IScPuyduOusuAppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcxMjAnKSAJI+q1reuCtOuPhOyEnD7sooXqtZAv7Jet7ZWZCmludGVycGFya19jYXRpZC5hcHBlbmQoJzEyMicpIAkj6rWt64K064+E7IScPuy7tO2TqO2EsC/snbjthLDrhLcKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMTIzJykgCSPqta3rgrTrj4TshJw+7J6Q6rKp7IScL+yImO2XmOyEnAppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcxMjQnKSAJI+q1reuCtOuPhOyEnD7st6jrr7gv66CI7KCACmludGVycGFya19jYXRpZC5hcHBlbmQoJzEyNScpIAkj6rWt64K064+E7IScPuyghOqzteuPhOyEnC/rjIDtlZnqtZDsnqwKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMTI2JykgCSPqta3rgrTrj4TshJw+6rG06rCVL+u3sO2LsAppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcxMjgnKSAJI+q1reuCtOuPhOyEnD7sl6ztlokKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMTI5JykgCSPqta3rgrTrj4TshJw+7KSR65Ox7ZWZ7Iq17IScCmludGVycGFya19jYXRpZC5hcHBlbmQoJzIwMCcpIAkj7Jm46rWt64+E7IScCmludGVycGFya19jYXRpZC5hcHBlbmQoJzIwMScpIAkj7Jm46rWt64+E7IScPuyWtOumsOydtAppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcyMDMnKSAJI+yZuOq1reuPhOyEnD5FTFQv7IKs7KCECmludGVycGFya19jYXRpZC5hcHBlbmQoJzIwNScpIAkj7Jm46rWt64+E7IScPuusuO2VmQppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcyMDYnKSAJI+yZuOq1reuPhOyEnD7qsr3smIEv7J2466y4CmludGVycGFya19jYXRpZC5hcHBlbmQoJzIwNycpIAkj7Jm46rWt64+E7IScPuyYiOyIoC/rlJTsnpDsnbgKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMjA4JykgCSPsmbjqta3rj4TshJw+7Iuk7JqpCmludGVycGFya19jYXRpZC5hcHBlbmQoJzIwOScpIAkj7Jm46rWt64+E7IScPu2VtOyZuOyeoeyngAppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcyMTAnKSAJI+yZuOq1reuPhOyEnD7rjIDtlZnqtZDsnqwv7KCE66y47ISc7KCBCmludGVycGFya19jYXRpZC5hcHBlbmQoJzIxMScpIAkj7Jm46rWt64+E7IScPuy7tO2TqO2EsAppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcyMTQnKSAJI+yZuOq1reuPhOyEnD7snbzrs7jrj4TshJwKaW50ZXJwYXJrX2NhdGlkLmFwcGVuZCgnMjE1JykgCSPsmbjqta3rj4TshJw+7ZSE656R7Iqk64+E7IScCmludGVycGFya19jYXRpZC5hcHBlbmQoJzIxNicpIAkj7Jm46rWt64+E7IScPuykkeq1reuPhOyEnAppbnRlcnBhcmtfY2F0aWQuYXBwZW5kKCcyMTcnKSAJI+yZuOq1reuPhOyEnD7tlbTsmbjso7zrrLjsm5DshJwKYm9va19jb2RlID0geycxMDAnOifqta3rgrTrj4TshJwnLCcxMDEnOifshozshKQnLCcxMDInOifsi5wt7JeQ7IS47J20JywnMTAzJzon7JiI7IigLeuMgOykkeusuO2ZlCcsJzEwNCc6J+yCrO2ajOqzvO2VmScsJzEwNSc6J+yXreyCrOyZgOusuO2ZlCcsJzEwNyc6J+yeoeyngCcsJzEwOCc6J+unjO2ZlCcsJzEwOSc6J+ycoOyVhCcsJzExMCc6J+yVhOuPmScsJzExMSc6J+qwgOygleqzvOyDne2ZnCcsJzExMic6J+yyreyGjOuFhCcsJzExMyc6J+y0iOuTse2VmeyKteyEnCcsJzExNCc6J+qzoOuTse2VmeyKteyEnCcsJzExNSc6J+q1reyWtC3smbjqta3slrQt7IKs7KCEJywnMTE2Jzon7J6Q7Jew6rO86rO87ZWZJywnMTE3Jzon6rK97KCc6rK97JiBJywnMTE4Jzon7J6Q6riw6rOE67CcJywnMTE5Jzon7J2466y4JywnMTIwJzon7KKF6rWQLeyXre2VmScsJzEyMic6J+y7tO2TqO2EsC3snbjthLDrhLcnLCcxMjMnOifsnpDqsqnshJwt7IiY7ZeY7IScJywnMTI0Jzon7Leo66+4LeugiOyggCcsJzEyNSc6J+yghOqzteuPhOyEnC3rjIDtlZnqtZDsnqwnLCcxMjYnOifqsbTqsJUt67ew7YuwJywnMTI4Jzon7Jes7ZaJJywnMTI5Jzon7KSR65Ox7ZWZ7Iq17IScJywnMjAwJzon7Jm46rWt64+E7IScJywnMjAxJzon7Ja066aw7J20JywnMjAzJzonRUxULeyCrOyghCcsJzIwNSc6J+usuO2VmScsJzIwNic6J+qyveyYgS3snbjrrLgnLCcyMDcnOifsmIjsiKAt65SU7J6Q7J24JywnMjA4Jzon7Iuk7JqpJywnMjA5Jzon7ZW07Jm47J6h7KeAJywnMjEwJzon64yA7ZWZ6rWQ7J6sLeyghOusuOyEnOyggScsJzIxMSc6J+y7tO2TqO2EsCcsJzIxNCc6J+ydvOuzuOuPhOyEnCcsJzIxNSc6J+2UhOuekeyKpOuPhOyEnCcsJzIxNic6J+ykkeq1reuPhOyEnCcsJzIxNyc6J+2VtOyZuOyjvOusuOybkOyEnCd9CgpOVl9DRU5URVJfQVBJID0gb3MuZ2V0ZW52KCdOVl9DRU5URVJfQVBJJykKUEFSS19BUElfS0VZID0gb3MuZ2V0ZW52KCdQQVJLX0FQSV9LRVknKQpEQl9JTkZPICA9IG9zLmdldGVudignREJfSU5GTycpCgoKUEFSS19BUElfS0VZID0gb3MuZ2V0ZW52KCdQQVJLX0FQSV9LRVknKQpudl9hcGlfYXJyID0gTlZfQ0VOVEVSX0FQSS5zcGxpdCgifCIpCQpOVl9BUElfQ0lEID0gbnZfYXBpX2FyclswXQpOVl9BUElfU0lEID0gbnZfYXBpX2FyclsxXQoKZGJpbmZvX2FyciA9IERCX0lORk8uc3BsaXQoInwiKQpob3N0PWRiaW5mb19hcnJbMF0KdXNlcj1kYmluZm9fYXJyWzFdCnB3IAk9ZGJpbmZvX2FyclsyXQpkYiAJPWRiaW5mb19hcnJbM10KCmRlZiBpbnRlclBhcmtCZXN0U2VsbGVyKGNhdElkKToJCgl3ZWJfdXJsIAkJPSAiaHR0cDovL2Jvb2suaW50ZXJwYXJrLmNvbS9hcGkvYmVzdFNlbGxlci5hcGk/a2V5PSIrUEFSS19BUElfS0VZKyImY2F0ZWdvcnlJZD0iK2NhdElkCglwcmludCgid2ViX3VybCA6ICIsd2ViX3VybCkKCXJlc3BvbnNlIAkJPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHdlYl91cmwpLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKCSNwcmludChyZXNwb25zZSkKCgl4dHJlZSAJCQk9IEVULmZyb21zdHJpbmcocmVzcG9uc2UpCglyZXR1cm4geHRyZWUJCgpkZWYgYm9va01hbmFPcmRlckluc2VydChwcmRObyk6CglzcWxJZCA9ICIiIiBJTlNFUlQgSU5UTyBCT09LX01BTkFfT1JERVIgVkFMVUVTKCclcycsTk9XKCkpIiIiICUocHJkTm8pCgkjcHJpbnQoc3FsSWQpCglhZC5pbnNlcnQoc3FsSWQpCgpkZWYgaXNCb29rTWFuYShwcmRObyk6CgljbnQgPSBhZC5zZWxlY3RPbmUoIiIiIFNFTEVDVCBDT1VOVCgqKSBGUk9NIEJPT0tfTUFOQV9PUkRFUiBXSEVSRSBQUkRfTk8gPSclcycgIiIiICUgcHJkTm8pWzBdCglpZiBjbnQ9PTA6CgkJcmV0dXJuIEZhbHNlCgllbGlmIGNudD4wOgoJCXJldHVybiBUcnVlCgkKZGVmIGJvb2tyZXZpZXdJbnNlcnQocHJkTm8pOgoJcmV2aWV3X2xpc3QgPSBQYXJrUmV2aWV3KCkuZ2V0KHByZE5vKQoJaWYgbGVuKHJldmlld19saXN0KSA+IDA6CgkJZm9yIHJldmlldyBpbiByZXZpZXdfbGlzdDoKCQkJc3RhciA9IHJldmlld1snc3RhciddCgkJCXJlZ19ubSA9IHJldmlld1sncmVnX25tJ10KCQkJcmVnX2R0ID0gcmV2aWV3WydyZWdfZHQnXQoJCQljb21tZW50ID0gcmV2aWV3Wydjb21tZW50J10KCQkJc3FsSWQgPSAiIiIgSU5TRVJUIElOVE8gQk9PS19ERVNDIFZBTFVFUygnJXMnLCVzLCclcycsJyVzJywnJXMnKSIiIiAlKHByZE5vLHN0YXIscmVnX25tLHJlZ19kdCxjb21tZW50KQoJCQkjcHJpbnQoc3FsSWQpCgkJCWFkLmluc2VydChzcWxJZCkKCgoKI+uEpOydtOuyhCDssYXqsoDsg4kKZGVmIG5hdmVyQm9va1NlYXJjaChpc2JuKToKCSNwcmludCgibmF2ZXJCb29rU2VhcmNoIHN0YXJ0IikKCWVuY1RleHQgPSB1cmxsaWIucGFyc2UucXVvdGUoIuqygOyDie2VoCDri6jslrQiKQoJdXJsID0gImh0dHBzOi8vb3BlbmFwaS5uYXZlci5jb20vdjEvc2VhcmNoL2Jvb2tfYWR2P2RfaXNibj0iICsgaXNibiAjIGpzb24g6rKw6rO8CQkKCXJlcXVlc3QgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KHVybCkKCXJlcXVlc3QuYWRkX2hlYWRlcigiWC1OYXZlci1DbGllbnQtSWQiLE5WX0FQSV9DSUQpCglyZXF1ZXN0LmFkZF9oZWFkZXIoIlgtTmF2ZXItQ2xpZW50LVNlY3JldCIsTlZfQVBJX1NJRCkKCXJlc3BvbnNlID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihyZXF1ZXN0KQoJcmVzY29kZSA9IHJlc3BvbnNlLmdldGNvZGUoKQoJI3ByaW50KCJyZXNjb2RlICIscmVzY29kZSkKCWlmKHJlc2NvZGU9PTIwMCk6CgkgICAgcmVzcG9uc2VfYm9keSA9IHJlc3BvbnNlLnJlYWQoKQkJICAgIAoJICAgICNwcmludCh0eXBlKHJlc3BvbnNlX2JvZHkpKQoJICAgIHJlc3BvbnNlX3RleHQgPSByZXNwb25zZV9ib2R5LmRlY29kZSgndXRmLTgnKQoJICAgICNwcmludChyZXNwb25zZV90ZXh0KQoJICAgCgoJICAgIHJldHVybiBqc29uLmxvYWRzKHJlc3BvbnNlX3RleHQpCgoJZWxzZToKCSAgICBwcmludCgiRXJyb3IgQ29kZToiICsgcmVzY29kZSkKCgppZiBfX25hbWVfXyAgPT0gIl9fbWFpbl9fIjoJCQoJYWQgPSBhc2tfZGIuQXNrRGIoaG9zdCwgdXNlciwgcHcsIGRiKQoJZm9yX2NudCA9IDAKCWNudCA9MAoJdHJ5OgoJCWZvciBpYyBpbiBpbnRlcnBhcmtfY2F0aWQ6CgkJCWZvcl9jbnQrPTEKCQkJaW50ZXJfY2F0SWQgPSBpYwoJCQkjcHJpbnQoImludGVyX2NhdElkIDogIixpbnRlcl9jYXRJZCkJCQkKCQkJeHRyZWUgPSBpbnRlclBhcmtCZXN0U2VsbGVyKGludGVyX2NhdElkKQoJCQlib29rX2NkMiA9IGJvb2tfY29kZVtpbnRlcl9jYXRJZF0KCQkJaWYgaW50ZXJfY2F0SWRbOjFdPT0nMSc6CgkJCQlib29rX2NkMSA9ICLqta3rgrTrj4TshJwiCgkJCWVsc2U6CgkJCQlib29rX2NkMSA9ICLsmbjqta3rj4TshJwiCgoJCQlpZiB4dHJlZToJCQkJCgkJCQlmb3Igbm9kZSBpbiB4dHJlZS5maW5kYWxsKCdpdGVtJyk6CgkJCQkJdHJ5OgoJCQkJCQlwYXJ0cyA9IHVybHBhcnNlKG5vZGUuZmluZCgnbGluaycpLnRleHQpICNodHRwOi8vYm9vay5pbnRlcnBhcmsuY29tL2Jsb2cvaW50ZWdyYXRpb24vcHJvZHVjdC9pdGVtRGV0YWlsLnJkbz9wcmRObz0zNDg5MTA4NzQmcmVmZXJlclR5cGU9ODMwNQkJCQkJCgkJCQkJCXByZE5vID0gcGFyc2VfcXMocGFydHMucXVlcnkpWydwcmRObyddWzBdCgkJCQkJCWlmIGlzQm9va01hbmEocHJkTm8pOgoJCQkJCQkJcHJpbnQoImNvbnRpbnVlIDogIixwcmRObywiIHwgIixpbnRlcl9jYXRJZCkKCQkJCQkJCWNvbnRpbnVlCgkJCQkJCQoJCQkJCQlib29rX25tIAkJPSBub2RlLmZpbmQoJ3RpdGxlJykudGV4dAkJCQkJCQoJCQkJCQlkZXNjcmlwdGlvbiAJPSBub2RlLmZpbmQoJ2Rlc2NyaXB0aW9uJykudGV4dAoJCQkJCQljb3ZlckxhcmdlVXJsIAk9IG5vZGUuZmluZCgnY292ZXJMYXJnZVVybCcpLnRleHQKCQkJCQkJY292ZXJTbWFsbFVybCAJPSBub2RlLmZpbmQoJ2NvdmVyU21hbGxVcmwnKS50ZXh0CgkJCQkJCWF1dGhvciAJCQk9IG5vZGUuZmluZCgnYXV0aG9yJykudGV4dAoJCQkJCQlpc2JuIAkJCT0gbm9kZS5maW5kKCdpc2JuJykudGV4dAoJCQkJCQlsaW5rIAkJCT0gbm9kZS5maW5kKCdsaW5rJykudGV4dAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CgkJCQkJCXRyYW5zbGF0b3IgCQkJPSBub2RlLmZpbmQoJ3RyYW5zbGF0b3InKS50ZXh0CgkJCQkJCWNhdGVnb3J5TmFtZSAJCQk9IG5vZGUuZmluZCgnY2F0ZWdvcnlOYW1lJykudGV4dAoJCQkJCQlwdWJsaXNoZXIgCQkJPSBub2RlLmZpbmQoJ3B1Ymxpc2hlcicpLnRleHQKCQkJCQkJcHViRGF0ZSAJCQk9IG5vZGUuZmluZCgncHViRGF0ZScpLnRleHQJCQkJCQkKPHxmaW1fZW5kfD4="]
["dff53f77af8367b55cf16f47d1bd70c0f4deae28-1","dff53f77af8367b55cf16f47d1bd70c0f4deae28","PHxmaW1fcHJlZml4fD4KIyBFeGFtcGxlOiBjcmVhdGluZyBhbiBhc3NldAoKZnJvbSBhbGdvc2RrIGltcG9ydCBhY2NvdW50CmZyb20gYWxnb3Nkay5mdXR1cmUgaW1wb3J0IHRyYW5zYWN0aW9uCgpwcml2YXRlX2tleSwgYWRkcmVzcyA9IGFjY291bnQuZ2VuZXJhdGVfYWNjb3VudCgpICMgY3JlYXRvcgpfLCBmcmVlemUgPSBhY2NvdW50LmdlbmVyYXRlX2FjY291bnQoKSAjIGFjY291bnQgdGhhdCBjYW4gZnJlZXplIG90aGVyIGFjY291bnRzIGZvciB0aGlzIGFzc2V0Cl8sIG1hbmFnZXIgPSBhY2NvdW50LmdlbmVyYXRlX2FjY291bnQoKSAjIGFjY291bnQgYWJsZSB0byB1cGRhdGUgYXNzZXQgY29uZmlndXJhdGlvbgpfLCBjbGF3YmFjayA9IGFjY291bnQuZ2VuZXJhdGVfYWNjb3VudCgpICMgYWNjb3VudCBhbGxvd2VkIHRvIHRha2UgdGhpcyBhc3NldCBmcm9tIGFueSBvdGhlciBhY2NvdW50Cl8sIHJlc2VydmUgPSBhY2NvdW50LmdlbmVyYXRlX2FjY291bnQoKSAjIGFjY291bnQgdGhhdCBob2xkcyByZXNlcnZlcyBmb3IgdGhpcyBhc3NldAoKZmVlX3Blcl9ieXRlID0gMTAKZmlyc3RfdmFsaWRfcm91bmQgPSAxMDAwCmxhc3RfdmFsaWRfcm91bmQgPSAyMDAwCmdlbmVzaXNfaGFzaCA9ICJTR08xR0tTenlFN0lFUEl0VHhDQnl3OXg4Rm1uckNEZXhpOS9jT1VKT2lJPSIKCnRvdGFsID0gMTAwICMgaG93IG1hbnkgb2YgdGhpcyBhc3NldCB0aGVyZSB3aWxsIGJlCmFzc2V0bmFtZSA9ICJhc3NldG5hbWUiCnVuaXRuYW1lID0gInVuaXRuYW1lIgp1cmwgPSAid2Vic2l0ZSIKbWV0YWRhdGEgPSBieXRlcygiZkFDUE80blJnTzU1ajFuZEFLM1c2U2djNEFQa2N5RmgiLCAiYXNjaWkiKSAjIHNob3VsZCBiZSBhIDMyLWJ5dGUgaGFzaAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRlZmF1bHRfZnJvemVuID0gRmFsc2UgIyB3aGV0aGVyIGFjY291bnRzIHNob3VsZCBiZSBmcm96ZW4gYnkgZGVmYXVsdAoKIyBjcmVhdGUgdGhlIGFzc2V0IGNyZWF0aW9uIHRyYW5zYWN0aW9uCnNwID0gdHJhbnNhY3Rpb24uU3VnZ2VzdGVkUGFyYW1zKGZlZV9wZXJfYnl0ZSwgZmlyc3RfdmFsaWRfcm91bmQsIGxhc3RfdmFsaWRfcm91bmQsIGdlbmVzaXNfaGFzaCkKPHxmaW1fZW5kfD4="]
["dff53f77af8367b55cf16f47d1bd70c0f4deae28-2","dff53f77af8367b55cf16f47d1bd70c0f4deae28","PHxmaW1fcHJlZml4fD4KIyBFeGFtcGxlOiBjcmVhdGluZyBhbiBhc3NldAoKZnJvbSBhbGdvc2RrIGltcG9ydCBhY2NvdW50CmZyb20gYWxnb3Nkay5mdXR1cmUgaW1wb3J0IHRyYW5zYWN0aW9uCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CnByaXZhdGVfa2V5LCBhZGRyZXNzID0gYWNjb3VudC5nZW5lcmF0ZV9hY2NvdW50KCkgIyBjcmVhdG9yCl8sIGZyZWV6ZSA9IGFjY291bnQuZ2VuZXJhdGVfYWNjb3VudCgpICMgYWNjb3VudCB0aGF0IGNhbiBmcmVlemUgb3RoZXIgYWNjb3VudHMgZm9yIHRoaXMgYXNzZXQKXywgbWFuYWdlciA9IGFjY291bnQuZ2VuZXJhdGVfYWNjb3VudCgpICMgYWNjb3VudCBhYmxlIHRvIHVwZGF0ZSBhc3NldCBjb25maWd1cmF0aW9uCl8sIGNsYXdiYWNrID0gYWNjb3VudC5nZW5lcmF0ZV9hY2NvdW50KCkgIyBhY2NvdW50IGFsbG93ZWQgdG8gdGFrZSB0aGlzIGFzc2V0IGZyb20gYW55IG90aGVyIGFjY291bnQKPHxmaW1fZW5kfD4="]
["dff53f77af8367b55cf16f47d1bd70c0f4deae28-3","dff53f77af8367b55cf16f47d1bd70c0f4deae28","PHxmaW1fcHJlZml4fD4KIyBFeGFtcGxlOiBjcmVhdGluZyBhbiBhc3NldAoKZnJvbSBhbGdvc2RrIGltcG9ydCBhY2NvdW50CmZyb20gYWxnb3Nkay5mdXR1cmUgaW1wb3J0IHRyYW5zYWN0aW9uCgpwcml2YXRlX2tleSwgYWRkcmVzcyA9IGFjY291bnQuZ2VuZXJhdGVfYWNjb3VudCgpICMgY3JlYXRvcgpfLCBmcmVlemUgPSBhY2NvdW50LmdlbmVyYXRlX2FjY291bnQoKSAjIGFjY291bnQgdGhhdCBjYW4gZnJlZXplIG90aGVyIGFjY291bnRzIGZvciB0aGlzIGFzc2V0Cl8sIG1hbmFnZXIgPSBhY2NvdW50LmdlbmVyYXRlX2FjY291bnQoKSAjIGFjY291bnQgYWJsZSB0byB1cGRhdGUgYXNzZXQgY29uZmlndXJhdGlvbgpfLCBjbGF3YmFjayA9IGFjY291bnQuZ2VuZXJhdGVfYWNjb3VudCgpICMgYWNjb3VudCBhbGxvd2VkIHRvIHRha2UgdGhpcyBhc3NldCBmcm9tIGFueSBvdGhlciBhY2NvdW50Cl8sIHJlc2VydmUgPSBhY2NvdW50LmdlbmVyYXRlX2FjY291bnQoKSAjIGFjY291bnQgdGhhdCBob2xkcyByZXNlcnZlcyBmb3IgdGhpcyBhc3NldAoKZmVlX3Blcl9ieXRlID0gMTAKZmlyc3RfdmFsaWRfcm91bmQgPSAxMDAwCmxhc3RfdmFsaWRfcm91bmQgPSAyMDAwCmdlbmVzaXNfaGFzaCA9ICJTR08xR0tTenlFN0lFUEl0VHhDQnl3OXg4Rm1uckNEZXhpOS9jT1VKT2lJPSIKCnRvdGFsID0gMTAwICMgaG93IG1hbnkgb2YgdGhpcyBhc3NldCB0aGVyZSB3aWxsIGJlCmFzc2V0bmFtZSA9ICJhc3NldG5hbWUiCnVuaXRuYW1lID0gInVuaXRuYW1lIgp1cmwgPSAid2Vic2l0ZSIKbWV0YWRhdGEgPSBieXRlcygiZkFDUE80blJnTzU1ajFuZEFLM1c2U2djNEFQa2N5RmgiLCAiYXNjaWkiKSAjIHNob3VsZCBiZSBhIDMyLWJ5dGUgaGFzaApkZWZhdWx0X2Zyb3plbiA9IEZhbHNlICMgd2hldGhlciBhY2NvdW50cyBzaG91bGQgYmUgZnJvemVuIGJ5IGRlZmF1bHQKCjx8ZmltX2hvbGV8PgogICAgICAgICAgICB1bml0X25hbWU9dW5pdG5hbWUsIGFzc2V0X25hbWU9YXNzZXRuYW1lLCB1cmw9dXJsLAogICAgICAgICAgICBtZXRhZGF0YV9oYXNoPW1ldGFkYXRhLCBkZWZhdWx0X2Zyb3plbj1kZWZhdWx0X2Zyb3plbikKCiMgc2lnbiB0aGUgdHJhbnNhY3Rpb24Kc2lnbmVkX3R4biA9IHR4bi5zaWduKHByaXZhdGVfa2V5KQo8fGZpbV9zdWZmaXh8PgojIGNyZWF0ZSB0aGUgYXNzZXQgY3JlYXRpb24gdHJhbnNhY3Rpb24Kc3AgPSB0cmFuc2FjdGlvbi5TdWdnZXN0ZWRQYXJhbXMoZmVlX3Blcl9ieXRlLCBmaXJzdF92YWxpZF9yb3VuZCwgbGFzdF92YWxpZF9yb3VuZCwgZ2VuZXNpc19oYXNoKQp0eG4gPSB0cmFuc2FjdGlvbi5Bc3NldENvbmZpZ1R4bihhZGRyZXNzLCBzcCwgdG90YWw9dG90YWwsIG1hbmFnZXI9bWFuYWdlciwKICAgICAgICAgICAgcmVzZXJ2ZT1yZXNlcnZlLCBmcmVlemU9ZnJlZXplLCBjbGF3YmFjaz1jbGF3YmFjaywKPHxmaW1fZW5kfD4="]
["4b4f7b9364823e062c4bf21862b71b76f627535e-1","4b4f7b9364823e062c4bf21862b71b76f627535e","PHxmaW1fcHJlZml4fD4KbGlzdGEgPSBbXQoKZm9yIGMgaW4gcmFuZ2UoMCw1KToKICAgIG51bSA9IGludChpbnB1dCgnRGlnaXRlIHVtIG51bWVybyBuYSBsaXN0YTogJykpCiAgICBpZiBjID09IDAgb3IgbnVtID4gbGlzdGFbLTFdOgogICAgICAgIGxpc3RhLmFwcGVuZChudW0pCiAgICAgICAgcHJpbnQoJ1ZhbG9yIGluc2VyaWRvIG5vIGZpbmFsIGRhIGxpc3RhJykKICAgIGVsc2U6CiAgICAgICAgcG9zID0gMAogICAgICAgIHdoaWxlIHBvcyA8IGxlbihsaXN0YSk6CiAgICAgICAgICAgIGlmIG51bSA8PSBsaXN0YVtwb3NdOgogICAgICAgICAgICAgICAgbGlzdGEuaW5zZXJ0KHBvcyxudW0pICNxdWFuZG8gdXNhZG8gaW5zZXJ0KHBvc2nDp8OjbyAsIFZhbG9yIGluc2VyaWRvKQogICAgICAgICAgICAgICAgcHJpbnQoZidWYWxvciBpbnNlcmlkbyBuYSBwb3Npw6fDo28ge3Bvc30gZGEgbGlzdGEnKQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgcG9zICs9IDEKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKcHJpbnQoZidPcyB2YWxvcmVzIGRpZ2l0YWRvcyBuYSBsaXN0YSBlbSBvcmRlbSBmb3JhbSB7bGlzdGF9LicpCjx8ZmltX2VuZHw+"]
["4b4f7b9364823e062c4bf21862b71b76f627535e-2","4b4f7b9364823e062c4bf21862b71b76f627535e","PHxmaW1fcHJlZml4fD4KbGlzdGEgPSBbXQoKZm9yIGMgaW4gcmFuZ2UoMCw1KToKICAgIG51bSA9IGludChpbnB1dCgnRGlnaXRlIHVtIG51bWVybyBuYSBsaXN0YTogJykpCiAgICBpZiBjID09IDAgb3IgbnVtID4gbGlzdGFbLTFdOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgbGlzdGEuYXBwZW5kKG51bSkKICAgICAgICBwcmludCgnVmFsb3IgaW5zZXJpZG8gbm8gZmluYWwgZGEgbGlzdGEnKQo8fGZpbV9lbmR8Pg=="]
["4b4f7b9364823e062c4bf21862b71b76f627535e-3","4b4f7b9364823e062c4bf21862b71b76f627535e","PHxmaW1fcHJlZml4fD4KbGlzdGEgPSBbXQoKZm9yIGMgaW4gcmFuZ2UoMCw1KToKICAgIG51bSA9IGludChpbnB1dCgnRGlnaXRlIHVtIG51bWVybyBuYSBsaXN0YTogJykpCiAgICBpZiBjID09IDAgb3IgbnVtID4gbGlzdGFbLTFdOgo8fGZpbV9ob2xlfD4KICAgIGVsc2U6CiAgICAgICAgcG9zID0gMAogICAgICAgIHdoaWxlIHBvcyA8IGxlbihsaXN0YSk6CiAgICAgICAgICAgIGlmIG51bSA8PSBsaXN0YVtwb3NdOgogICAgICAgICAgICAgICAgbGlzdGEuaW5zZXJ0KHBvcyxudW0pICNxdWFuZG8gdXNhZG8gaW5zZXJ0KHBvc2nDp8OjbyAsIFZhbG9yIGluc2VyaWRvKQogICAgICAgICAgICAgICAgcHJpbnQoZidWYWxvciBpbnNlcmlkbyBuYSBwb3Npw6fDo28ge3Bvc30gZGEgbGlzdGEnKQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgcG9zICs9IDEKCnByaW50KGYnT3MgdmFsb3JlcyBkaWdpdGFkb3MgbmEgbGlzdGEgZW0gb3JkZW0gZm9yYW0ge2xpc3RhfS4nKQo8fGZpbV9zdWZmaXh8PgogICAgICAgIGxpc3RhLmFwcGVuZChudW0pCiAgICAgICAgcHJpbnQoJ1ZhbG9yIGluc2VyaWRvIG5vIGZpbmFsIGRhIGxpc3RhJykKPHxmaW1fZW5kfD4="]
["4b4f7b9364823e062c4bf21862b71b76f627535e-4","4b4f7b9364823e062c4bf21862b71b76f627535e","PHxmaW1fcHJlZml4fD4KbGlzdGEgPSBbXQoKZm9yIGMgaW4gcmFuZ2UoMCw1KToKICAgIG51bSA9IGludChpbnB1dCgnRGlnaXRlIHVtIG51bWVybyBuYSBsaXN0YTogJykpCiAgICBpZiBjID09IDAgb3IgbnVtID4gbGlzdGFbLTFdOgogICAgICAgIGxpc3RhLmFwcGVuZChudW0pCiAgICAgICAgcHJpbnQoJ1ZhbG9yIGluc2VyaWRvIG5vIGZpbmFsIGRhIGxpc3RhJykKICAgIGVsc2U6CiAgICAgICAgcG9zID0gMAogICAgICAgIHdoaWxlIHBvcyA8IGxlbihsaXN0YSk6Cjx8ZmltX2hvbGV8PgogICAgICAgICAgICBwb3MgKz0gMQoKcHJpbnQoZidPcyB2YWxvcmVzIGRpZ2l0YWRvcyBuYSBsaXN0YSBlbSBvcmRlbSBmb3JhbSB7bGlzdGF9LicpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgIGlmIG51bSA8PSBsaXN0YVtwb3NdOgogICAgICAgICAgICAgICAgbGlzdGEuaW5zZXJ0KHBvcyxudW0pICNxdWFuZG8gdXNhZG8gaW5zZXJ0KHBvc2nDp8OjbyAsIFZhbG9yIGluc2VyaWRvKQogICAgICAgICAgICAgICAgcHJpbnQoZidWYWxvciBpbnNlcmlkbyBuYSBwb3Npw6fDo28ge3Bvc30gZGEgbGlzdGEnKQogICAgICAgICAgICAgICAgYnJlYWsKPHxmaW1fZW5kfD4="]
["4b4f7b9364823e062c4bf21862b71b76f627535e-5","4b4f7b9364823e062c4bf21862b71b76f627535e","PHxmaW1fcHJlZml4fD4KbGlzdGEgPSBbXQoKZm9yIGMgaW4gcmFuZ2UoMCw1KToKICAgIG51bSA9IGludChpbnB1dCgnRGlnaXRlIHVtIG51bWVybyBuYSBsaXN0YTogJykpCiAgICBpZiBjID09IDAgb3IgbnVtID4gbGlzdGFbLTFdOgogICAgICAgIGxpc3RhLmFwcGVuZChudW0pCiAgICAgICAgcHJpbnQoJ1ZhbG9yIGluc2VyaWRvIG5vIGZpbmFsIGRhIGxpc3RhJykKICAgIGVsc2U6CiAgICAgICAgcG9zID0gMAogICAgICAgIHdoaWxlIHBvcyA8IGxlbihsaXN0YSk6CiAgICAgICAgICAgIGlmIG51bSA8PSBsaXN0YVtwb3NdOgogICAgICAgICAgICAgICAgbGlzdGEuaW5zZXJ0KHBvcyxudW0pICNxdWFuZG8gdXNhZG8gaW5zZXJ0KHBvc2nDp8OjbyAsIFZhbG9yIGluc2VyaWRvKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgICAgICAgICBwcmludChmJ1ZhbG9yIGluc2VyaWRvIG5hIHBvc2nDp8OjbyB7cG9zfSBkYSBsaXN0YScpCiAgICAgICAgICAgICAgICBicmVhawo8fGZpbV9lbmR8Pg=="]
["f22c7f95a4d6261a50bd2ed00cdcfb911ebc1e3b-1","f22c7f95a4d6261a50bd2ed00cdcfb911ebc1e3b","PHxmaW1fcHJlZml4fD4KCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzeXMKCmZyb20gc2hhcGVseS5nZW9tZXRyeSBpbXBvcnQgbWFwcGluZywgc2hhcGUKCmltcG9ydCBmaW9uYQoKbG9nZ2luZy5iYXNpY0NvbmZpZyhzdHJlYW09c3lzLnN0ZGVyciwgbGV2ZWw9bG9nZ2luZy5JTkZPKQoKd2l0aCBmaW9uYS5vcGVuKCdkb2NzL2RhdGEvdGVzdF91ay5zaHAnLCAncicpIGFzIHNvdXJjZToKICAgIAogICAgIyAqKnNvdXJjZS5tZXRhIGlzIGEgc2hvcnRjdXQgdG8gZ2V0IHRoZSBjcnMsIGRyaXZlciwgYW5kIHNjaGVtYQogICAgIyBrZXl3b3JkIGFyZ3VtZW50cyBmcm9tIHRoZSBzb3VyY2UgQ29sbGVjdGlvbi4KICAgIHdpdGggZmlvbmEub3BlbigKICAgICAgICAgICAgJ3dpdGgtc2hhcGVseS5zaHAnLCAndycsCiAgICAgICAgICAgICoqc291cmNlLm1ldGEpIGFzIHNpbms6CiAgICAgICAgCiAgICAgICAgZm9yIGYgaW4gc291cmNlOgogICAgICAgICAgICAKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGNsZWFuLmlzX3ZhbGlkCiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGNsZWFuLmdlb21fdHlwZSA9PSAnUG9seWdvbicKICAgICAgICAgICAgICAgICAgICBnZW9tID0gY2xlYW4KICAgICAgICAgICAgICAgIGZbJ2dlb21ldHJ5J10gPSBtYXBwaW5nKGdlb20pCiAgICAgICAgICAgICAgICBzaW5rLndyaXRlKGYpCiAgICAgICAgICAgIAogICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgogICAgICAgICAgICAgICAgIyBXcml0aW5nIHVuY2xlYW5hYmxlIGZlYXR1cmVzIHRvIGEgZGlmZmVyZW50IHNoYXBlZmlsZQogICAgICAgICAgICAgICAgIyBpcyBhbm90aGVyIG9wdGlvbi4KICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCJFcnJvciBjbGVhbmluZyBmZWF0dXJlICVzOiIsIGZbJ2lkJ10pCgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBnZW9tID0gc2hhcGUoZlsnZ2VvbWV0cnknXSkKICAgICAgICAgICAgICAgIGlmIG5vdCBnZW9tLmlzX3ZhbGlkOgogICAgICAgICAgICAgICAgICAgIGNsZWFuID0gZ2VvbS5idWZmZXIoMC4wKQo8fGZpbV9lbmR8Pg=="]
["f22c7f95a4d6261a50bd2ed00cdcfb911ebc1e3b-2","f22c7f95a4d6261a50bd2ed00cdcfb911ebc1e3b","PHxmaW1fcHJlZml4fD4KCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzeXMKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBzaGFwZWx5Lmdlb21ldHJ5IGltcG9ydCBtYXBwaW5nLCBzaGFwZQoKaW1wb3J0IGZpb25hCgo8fGZpbV9lbmR8Pg=="]
["399089baed5c630d399048bead57d2f1e119a643-1","399089baed5c630d399048bead57d2f1e119a643","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBweXRvcmNoIOeJiOacrOeahAppbXBvcnQgbnVtcHkgYXMgbnAgCmltcG9ydCB0b3JjaCAKaW1wb3J0IHRvcmNoLm5uIGFzIG5uCmltcG9ydCB0b3JjaC5ubi5mdW5jdGlvbmFsIGFzIEYKCmNsYXNzIFJlZ3Jlc3Npb25OTihubi5Nb2R1bGUpOgogICAgIyBBIHNpbXBsZSBNTFAgcmVncmVzc2lvbiBuZXR3b3JrIAogICAgZGVmIF9faW5pdF9fKHNlbGYsIGZlYXR1cmVfbnVtYmVyKToKICAgICAgICBzdXBlcihSZWdyZXNzaW9uTk4sc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYuZmVhdHVyZV9udW1iZXIgPSBmZWF0dXJlX251bWJlcgogICAgICAgIHNlbGYuZmMxID0gbm4uTGluZWFyKHNlbGYuZmVhdHVyZV9udW1iZXIsMTIpCiAgICAgICAgc2VsZi5mYzIgPSBubi5MaW5lYXIoMTIsOCkKICAgICAgICBzZWxmLmZjMyA9IG5uLkxpbmVhcig4LDEpCiAgICAgICAgCiAgICBkZWYgZm9yd2FyZChzZWxmLHgpOgogICAgICAgIHggPSBzZWxmLmZjMSh4KQogICAgICAgICMgeCA9IEYuc2lnbW9pZCh4KQogICAgICAgIHggPSB0b3JjaC50YW5oKHgpCiAgICAgICAgeCA9IHNlbGYuZmMyKHgpCiAgICAgICAgeCA9IHRvcmNoLnRhbmgoeCkKICAgICAgICB4ID0gc2VsZi5mYzMoeCkKICAgICAgICByZXR1cm4geAogICAgICAgICAgICAgCiAgICBkZWYgcHJlZGljdChzZWxmLFhfdGVzdCk6CiAgICAgICAgIyDov5nph4zopoHlgZrmiJDlsL3ph4/otLTov5Fza2xlYXJu55qE5qih5byPCiAgICAgICAgWF90ZXN0ID0gbnAuYXJyYXkoWF90ZXN0KQogICAgICAgICMg54S25ZCOIHRvIHRlbnNvciAKICAgICAgICBYX3Rlc3QgID0gdG9yY2guZnJvbV9udW1weShYX3Rlc3QpLnR5cGUodG9yY2guRmxvYXRUZW5zb3IpCiAgICAgICAgIyBwcmVkID0gRi5zb2Z0bWF4KHNlbGYuZm9yd2FyZCh4KSwgZGltPSAxKSAjIOWPr+iDveaYr+i/memHjOS4jeWvuQogICAgICAgIHlfcHJlZCA9IHNlbGYuZm9yd2FyZChYX3Rlc3QpICMgbm93IHRvcmNoIHRlbnNvciAKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHlfcHJlZCA9IHlfcHJlZC5kZXRhY2goKS5udW1weSgpCiAgICAgICAgcmV0dXJuIHlfcHJlZC5mbGF0dGVuKCkgIyDov5nph4znm7TmjqXmi4nmiJAxZOeahHZlY3Rvcgo8fGZpbV9lbmR8Pg=="]
["399089baed5c630d399048bead57d2f1e119a643-2","399089baed5c630d399048bead57d2f1e119a643","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBweXRvcmNoIOeJiOacrOeahAppbXBvcnQgbnVtcHkgYXMgbnAgCmltcG9ydCB0b3JjaCAKaW1wb3J0IHRvcmNoLm5uIGFzIG5uCmltcG9ydCB0b3JjaC5ubi5mdW5jdGlvbmFsIGFzIEYKCmNsYXNzIFJlZ3Jlc3Npb25OTihubi5Nb2R1bGUpOgogICAgIyBBIHNpbXBsZSBNTFAgcmVncmVzc2lvbiBuZXR3b3JrIAogICAgZGVmIF9faW5pdF9fKHNlbGYsIGZlYXR1cmVfbnVtYmVyKToKICAgICAgICBzdXBlcihSZWdyZXNzaW9uTk4sc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYuZmVhdHVyZV9udW1iZXIgPSBmZWF0dXJlX251bWJlcgogICAgICAgIHNlbGYuZmMxID0gbm4uTGluZWFyKHNlbGYuZmVhdHVyZV9udW1iZXIsMTIpCiAgICAgICAgc2VsZi5mYzIgPSBubi5MaW5lYXIoMTIsOCkKICAgICAgICBzZWxmLmZjMyA9IG5uLkxpbmVhcig4LDEpCiAgICAgICAgCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGRlZiBmb3J3YXJkKHNlbGYseCk6CiAgICAgICAgeCA9IHNlbGYuZmMxKHgpCiAgICAgICAgIyB4ID0gRi5zaWdtb2lkKHgpCiAgICAgICAgeCA9IHRvcmNoLnRhbmgoeCkKPHxmaW1fZW5kfD4="]
["399089baed5c630d399048bead57d2f1e119a643-3","399089baed5c630d399048bead57d2f1e119a643","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBweXRvcmNoIOeJiOacrOeahAppbXBvcnQgbnVtcHkgYXMgbnAgCmltcG9ydCB0b3JjaCAKaW1wb3J0IHRvcmNoLm5uIGFzIG5uCmltcG9ydCB0b3JjaC5ubi5mdW5jdGlvbmFsIGFzIEYKCmNsYXNzIFJlZ3Jlc3Npb25OTihubi5Nb2R1bGUpOgogICAgIyBBIHNpbXBsZSBNTFAgcmVncmVzc2lvbiBuZXR3b3JrIAogICAgZGVmIF9faW5pdF9fKHNlbGYsIGZlYXR1cmVfbnVtYmVyKToKICAgICAgICBzdXBlcihSZWdyZXNzaW9uTk4sc2VsZikuX19pbml0X18oKQogICAgICAgIHNlbGYuZmVhdHVyZV9udW1iZXIgPSBmZWF0dXJlX251bWJlcgogICAgICAgIHNlbGYuZmMxID0gbm4uTGluZWFyKHNlbGYuZmVhdHVyZV9udW1iZXIsMTIpCiAgICAgICAgc2VsZi5mYzIgPSBubi5MaW5lYXIoMTIsOCkKICAgICAgICBzZWxmLmZjMyA9IG5uLkxpbmVhcig4LDEpCiAgICAgICAgCiAgICBkZWYgZm9yd2FyZChzZWxmLHgpOgogICAgICAgIHggPSBzZWxmLmZjMSh4KQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgIyB4ID0gRi5zaWdtb2lkKHgpCiAgICAgICAgeCA9IHRvcmNoLnRhbmgoeCkKICAgICAgICB4ID0gc2VsZi5mYzIoeCkKICAgICAgICB4ID0gdG9yY2gudGFuaCh4KQo8fGZpbV9lbmR8Pg=="]
["e44051135ba31a65240fb89cad454e3da0ef6f92-1","e44051135ba31a65240fb89cad454e3da0ef6f92","PHxmaW1fcHJlZml4fD4KZnJvbSBuZXRjcmFmdF9jb2xsZWN0b3IgaW1wb3J0ICoKZnJvbSBsaW5rc19jb2xsZWN0b3IgaW1wb3J0ICoKZnJvbSBCVHJlZXMuT09CVHJlZSBpbXBvcnQgT09CVHJlZQpmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdXJscGFyc2UKZnJvbSBweXZpcy5uZXR3b3JrIGltcG9ydCBOZXR3b3JrCmltcG9ydCBuZXR3b3JreCBhcyBueAppbXBvcnQganNvbgoKY2xhc3MgQ3Jhd2xlcigpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIFNFRURfTElNSVQsIFRPVEFMX01BWF9QQUdFUywgTUFYX1BBR0VTX1BFUl9TSVRFLCBNQVhfUEhZU0lDQUxfREVQVEgsIE1BWF9MT0dJQ0FMX0RFUFRIKToKICAgICAgICBzZWxmLlRPVEFMX01BWF9QQUdFUyA9IFRPVEFMX01BWF9QQUdFUwogICAgICAgIHNlbGYuTUFYX1BBR0VTX1BFUl9TSVRFID0gTUFYX1BBR0VTX1BFUl9TSVRFCiAgICAgICAgc2VsZi5NQVhfUEhZU0lDQUxfREVQVEggPSBNQVhfUEhZU0lDQUxfREVQVEgKICAgICAgICBzZWxmLk1BWF9MT0dJQ0FMX0RFUFRIID0gTUFYX0xPR0lDQUxfREVQVEgKCiAgICAgICAgc2VsZi5xdWV1ZSA9IFtdCiAgICAgICAgbmMgPSBOZXRjcmFmdF9Db2xsZWN0b3IoKQoKICAgICAgICBmb3IgbGluayBpbiBuYy5jb2xsZWN0X2xpbmtzKFNFRURfTElNSVQpOgogICAgICAgICAgICBzZWxmLnF1ZXVlLmFwcGVuZChbbGluaywgMF0pCgogICAgICAgIHNlbGYuY29sbGVjdGVkX3BhZ2VzID0gMAogICAgICAgIHNlbGYubGMgPSBMaW5rc19Db2xsZWN0b3IoKQogICAgICAgIHNlbGYud3JvbmdfdXJscyA9IFtdCiAgICAgICAgc2VsZi5idHJlZSA9IE9PQlRyZWUoKQoKICAgICAgICBzZWxmLmNyYXdsX29yZGVyID0gW10KCiAgICAgICAgc2VsZi5sYXN0X2V4cG9ydCA9IDAKICAgICAgICBzZWxmLmJlZ2luX2NyYXdsKCkKCiAgICAgICAgcHJpbnQoIkNyYXdsIEVuZGVkIikKCiAgICBkZWYgZ2V0X3VybF9waHlzaWNhbF9kZXB0aChzZWxmLCB1cmwpOgogICAgICAgIHBhdGggPSB1cmxwYXJzZSh1cmwpLnBhdGgKICAgICAgICByZXR1cm4gcGF0aC5jb3VudCgiLyIpCgogICAgZGVmIGJlZ2luX2NyYXdsKHNlbGYpOgogICAgICAgIHdoaWxlIHNlbGYucXVldWUgIT0gW10gYW5kIHNlbGYuY29sbGVjdGVkX3BhZ2VzIDwgc2VsZi5UT1RBTF9NQVhfUEFHRVM6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIGxpbmssIGRlcHRoID0gc2VsZi5xdWV1ZS5wb3AoMCkKCiAgICAgICAgICAgICAgICBwcmludCgiQ29sbGVjdGVkIFBhZ2VzIHt9LCBQcm9jZXNzaW5nIHt9Ii5mb3JtYXQoc2VsZi5jb2xsZWN0ZWRfcGFnZXMsIGxpbmspKQoKICAgICAgICAgICAgICAgIGlmIGRlcHRoID4gc2VsZi5NQVhfTE9HSUNBTF9ERVBUSDoKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgICAgIGlmIHNlbGYuZ2V0X3VybF9waHlzaWNhbF9kZXB0aChsaW5rKSA+IHNlbGYuTUFYX1BIWVNJQ0FMX0RFUFRIOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAgICAgaWYgbGluayBpbiBzZWxmLmJ0cmVlOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgo8fGZpbV9ob2xlfD4KICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgc2VsZi53cm9uZ191cmxzLmFwcGVuZChsaW5rKQogICAgICAgICAgICBzZWxmLmNvbGxlY3RlZF9wYWdlcyArPSAxCgogICAgICAgICAgICBjb2xsZWN0ZWRfbGlua3Nfd2l0aF9kZXB0aCA9IFtdCiAgICAgICAgICAgIGZvciBsaW5rIGluIGNvbGxlY3RlZF9saW5rczoKICAgICAgICAgICAgICAgIGNvbGxlY3RlZF9saW5rc193aXRoX2RlcHRoLmFwcGVuZChbbGluaywgZGVwdGgrMV0pCiAgICAgICAgICAgIHNlbGYucXVldWUuZXh0ZW5kKGNvbGxlY3RlZF9saW5rc193aXRoX2RlcHRoKQoKICAgICAgICAgICAgaWYgYWJzKHNlbGYubGFzdF9leHBvcnQgLSBzZWxmLmNvbGxlY3RlZF9wYWdlcykgPj0gMzA6CiAgICAgICAgICAgICAgICBzZWxmLmV4cG9ydF9idHJlZSgpCiAgICAgICAgICAgICAgICBzZWxmLmV4cG9ydF9jcmF3bF9vcmRlcigpCgogICAgZGVmIGV4cG9ydF9jcmF3bF9vcmRlcihzZWxmKToKICAgICAgICB3aXRoIG9wZW4oImNyYXdsX29yZGVyLmpzb24iLCAidyIpIGFzIG91dGZpbGU6CiAgICAgICAgICAgIGpzb24uZHVtcChzZWxmLmNyYXdsX29yZGVyLCBvdXRmaWxlKQoKICAgIGRlZiBleHBvcnRfYnRyZWUoc2VsZik6CiAgICAgICAgZGljdGlvbmFyeV9idHJlZSA9IHt9CiAgICAgICAgZm9yIGtleSBpbiBzZWxmLmJ0cmVlOgogICAgICAgICAgICBkaWN0aW9uYXJ5X2J0cmVlW2tleV0gPSBsaXN0KHNlbGYuYnRyZWVba2V5XSkKCiAgICAgICAgd2l0aCBvcGVuKCJidHJlZS5qc29uIiwgInciKSBhcyBvdXRmaWxlOgogICAgICAgICAgICBqc29uLmR1bXAoZGljdGlvbmFyeV9idHJlZSwgb3V0ZmlsZSkKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgICAgIGNvbGxlY3RlZF9saW5rcyA9IHNlbGYubGMuY29sbGVjdF9saW5rcyhsaW5rKVs6c2VsZi5NQVhfUEFHRVNfUEVSX1NJVEVdCgogICAgICAgICAgICAgICAgc2VsZi5jcmF3bF9vcmRlci5hcHBlbmQobGluaykKICAgICAgICAgICAgICAgIHNlbGYuYnRyZWVbbGlua10gPSBjb2xsZWN0ZWRfbGlua3MKPHxmaW1fZW5kfD4="]
["e44051135ba31a65240fb89cad454e3da0ef6f92-2","e44051135ba31a65240fb89cad454e3da0ef6f92","PHxmaW1fcHJlZml4fD4KZnJvbSBuZXRjcmFmdF9jb2xsZWN0b3IgaW1wb3J0ICoKZnJvbSBsaW5rc19jb2xsZWN0b3IgaW1wb3J0ICoKZnJvbSBCVHJlZXMuT09CVHJlZSBpbXBvcnQgT09CVHJlZQpmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdXJscGFyc2UKZnJvbSBweXZpcy5uZXR3b3JrIGltcG9ydCBOZXR3b3JrCmltcG9ydCBuZXR3b3JreCBhcyBueAppbXBvcnQganNvbgoKY2xhc3MgQ3Jhd2xlcigpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIFNFRURfTElNSVQsIFRPVEFMX01BWF9QQUdFUywgTUFYX1BBR0VTX1BFUl9TSVRFLCBNQVhfUEhZU0lDQUxfREVQVEgsIE1BWF9MT0dJQ0FMX0RFUFRIKToKICAgICAgICBzZWxmLlRPVEFMX01BWF9QQUdFUyA9IFRPVEFMX01BWF9QQUdFUwogICAgICAgIHNlbGYuTUFYX1BBR0VTX1BFUl9TSVRFID0gTUFYX1BBR0VTX1BFUl9TSVRFCiAgICAgICAgc2VsZi5NQVhfUEhZU0lDQUxfREVQVEggPSBNQVhfUEhZU0lDQUxfREVQVEgKICAgICAgICBzZWxmLk1BWF9MT0dJQ0FMX0RFUFRIID0gTUFYX0xPR0lDQUxfREVQVEgKCiAgICAgICAgc2VsZi5xdWV1ZSA9IFtdCiAgICAgICAgbmMgPSBOZXRjcmFmdF9Db2xsZWN0b3IoKQoKICAgICAgICBmb3IgbGluayBpbiBuYy5jb2xsZWN0X2xpbmtzKFNFRURfTElNSVQpOgogICAgICAgICAgICBzZWxmLnF1ZXVlLmFwcGVuZChbbGluaywgMF0pCgogICAgICAgIHNlbGYuY29sbGVjdGVkX3BhZ2VzID0gMAogICAgICAgIHNlbGYubGMgPSBMaW5rc19Db2xsZWN0b3IoKQogICAgICAgIHNlbGYud3JvbmdfdXJscyA9IFtdCiAgICAgICAgc2VsZi5idHJlZSA9IE9PQlRyZWUoKQoKICAgICAgICBzZWxmLmNyYXdsX29yZGVyID0gW10KCiAgICAgICAgc2VsZi5sYXN0X2V4cG9ydCA9IDAKICAgICAgICBzZWxmLmJlZ2luX2NyYXdsKCkKCiAgICAgICAgcHJpbnQoIkNyYXdsIEVuZGVkIikKCiAgICBkZWYgZ2V0X3VybF9waHlzaWNhbF9kZXB0aChzZWxmLCB1cmwpOgogICAgICAgIHBhdGggPSB1cmxwYXJzZSh1cmwpLnBhdGgKICAgICAgICByZXR1cm4gcGF0aC5jb3VudCgiLyIpCgogICAgZGVmIGJlZ2luX2NyYXdsKHNlbGYpOgogICAgICAgIHdoaWxlIHNlbGYucXVldWUgIT0gW10gYW5kIHNlbGYuY29sbGVjdGVkX3BhZ2VzIDwgc2VsZi5UT1RBTF9NQVhfUEFHRVM6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIGxpbmssIGRlcHRoID0gc2VsZi5xdWV1ZS5wb3AoMCkKCiAgICAgICAgICAgICAgICBwcmludCgiQ29sbGVjdGVkIFBhZ2VzIHt9LCBQcm9jZXNzaW5nIHt9Ii5mb3JtYXQoc2VsZi5jb2xsZWN0ZWRfcGFnZXMsIGxpbmspKQoKICAgICAgICAgICAgICAgIGlmIGRlcHRoID4gc2VsZi5NQVhfTE9HSUNBTF9ERVBUSDoKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgICAgIGlmIHNlbGYuZ2V0X3VybF9waHlzaWNhbF9kZXB0aChsaW5rKSA+IHNlbGYuTUFYX1BIWVNJQ0FMX0RFUFRIOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAgICAgaWYgbGluayBpbiBzZWxmLmJ0cmVlOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAgICAgY29sbGVjdGVkX2xpbmtzID0gc2VsZi5sYy5jb2xsZWN0X2xpbmtzKGxpbmspWzpzZWxmLk1BWF9QQUdFU19QRVJfU0lURV0KCiAgICAgICAgICAgICAgICBzZWxmLmNyYXdsX29yZGVyLmFwcGVuZChsaW5rKQogICAgICAgICAgICAgICAgc2VsZi5idHJlZVtsaW5rXSA9IGNvbGxlY3RlZF9saW5rcwogICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICBzZWxmLndyb25nX3VybHMuYXBwZW5kKGxpbmspCiAgICAgICAgICAgIHNlbGYuY29sbGVjdGVkX3BhZ2VzICs9IDEKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgY29sbGVjdGVkX2xpbmtzX3dpdGhfZGVwdGggPSBbXQogICAgICAgICAgICBmb3IgbGluayBpbiBjb2xsZWN0ZWRfbGlua3M6CiAgICAgICAgICAgICAgICBjb2xsZWN0ZWRfbGlua3Nfd2l0aF9kZXB0aC5hcHBlbmQoW2xpbmssIGRlcHRoKzFdKQogICAgICAgICAgICBzZWxmLnF1ZXVlLmV4dGVuZChjb2xsZWN0ZWRfbGlua3Nfd2l0aF9kZXB0aCkKPHxmaW1fZW5kfD4="]
["e44051135ba31a65240fb89cad454e3da0ef6f92-3","e44051135ba31a65240fb89cad454e3da0ef6f92","PHxmaW1fcHJlZml4fD4KZnJvbSBuZXRjcmFmdF9jb2xsZWN0b3IgaW1wb3J0ICoKZnJvbSBsaW5rc19jb2xsZWN0b3IgaW1wb3J0ICoKZnJvbSBCVHJlZXMuT09CVHJlZSBpbXBvcnQgT09CVHJlZQpmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdXJscGFyc2UKZnJvbSBweXZpcy5uZXR3b3JrIGltcG9ydCBOZXR3b3JrCmltcG9ydCBuZXR3b3JreCBhcyBueAppbXBvcnQganNvbgoKY2xhc3MgQ3Jhd2xlcigpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIFNFRURfTElNSVQsIFRPVEFMX01BWF9QQUdFUywgTUFYX1BBR0VTX1BFUl9TSVRFLCBNQVhfUEhZU0lDQUxfREVQVEgsIE1BWF9MT0dJQ0FMX0RFUFRIKToKICAgICAgICBzZWxmLlRPVEFMX01BWF9QQUdFUyA9IFRPVEFMX01BWF9QQUdFUwogICAgICAgIHNlbGYuTUFYX1BBR0VTX1BFUl9TSVRFID0gTUFYX1BBR0VTX1BFUl9TSVRFCiAgICAgICAgc2VsZi5NQVhfUEhZU0lDQUxfREVQVEggPSBNQVhfUEhZU0lDQUxfREVQVEgKICAgICAgICBzZWxmLk1BWF9MT0dJQ0FMX0RFUFRIID0gTUFYX0xPR0lDQUxfREVQVEgKCiAgICAgICAgc2VsZi5xdWV1ZSA9IFtdCiAgICAgICAgbmMgPSBOZXRjcmFmdF9Db2xsZWN0b3IoKQoKICAgICAgICBmb3IgbGluayBpbiBuYy5jb2xsZWN0X2xpbmtzKFNFRURfTElNSVQpOgogICAgICAgICAgICBzZWxmLnF1ZXVlLmFwcGVuZChbbGluaywgMF0pCgogICAgICAgIHNlbGYuY29sbGVjdGVkX3BhZ2VzID0gMAogICAgICAgIHNlbGYubGMgPSBMaW5rc19Db2xsZWN0b3IoKQogICAgICAgIHNlbGYud3JvbmdfdXJscyA9IFtdCiAgICAgICAgc2VsZi5idHJlZSA9IE9PQlRyZWUoKQoKICAgICAgICBzZWxmLmNyYXdsX29yZGVyID0gW10KCiAgICAgICAgc2VsZi5sYXN0X2V4cG9ydCA9IDAKICAgICAgICBzZWxmLmJlZ2luX2NyYXdsKCkKCiAgICAgICAgcHJpbnQoIkNyYXdsIEVuZGVkIikKCiAgICBkZWYgZ2V0X3VybF9waHlzaWNhbF9kZXB0aChzZWxmLCB1cmwpOgogICAgICAgIHBhdGggPSB1cmxwYXJzZSh1cmwpLnBhdGgKPHxmaW1faG9sZXw+CiAgICBkZWYgYmVnaW5fY3Jhd2woc2VsZik6CiAgICAgICAgd2hpbGUgc2VsZi5xdWV1ZSAhPSBbXSBhbmQgc2VsZi5jb2xsZWN0ZWRfcGFnZXMgPCBzZWxmLlRPVEFMX01BWF9QQUdFUzoKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgbGluaywgZGVwdGggPSBzZWxmLnF1ZXVlLnBvcCgwKQoKICAgICAgICAgICAgICAgIHByaW50KCJDb2xsZWN0ZWQgUGFnZXMge30sIFByb2Nlc3Npbmcge30iLmZvcm1hdChzZWxmLmNvbGxlY3RlZF9wYWdlcywgbGluaykpCgogICAgICAgICAgICAgICAgaWYgZGVwdGggPiBzZWxmLk1BWF9MT0dJQ0FMX0RFUFRIOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAgICAgaWYgc2VsZi5nZXRfdXJsX3BoeXNpY2FsX2RlcHRoKGxpbmspID4gc2VsZi5NQVhfUEhZU0lDQUxfREVQVEg6CiAgICAgICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgICAgICBpZiBsaW5rIGluIHNlbGYuYnRyZWU6CiAgICAgICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgICAgICBjb2xsZWN0ZWRfbGlua3MgPSBzZWxmLmxjLmNvbGxlY3RfbGlua3MobGluaylbOnNlbGYuTUFYX1BBR0VTX1BFUl9TSVRFXQoKICAgICAgICAgICAgICAgIHNlbGYuY3Jhd2xfb3JkZXIuYXBwZW5kKGxpbmspCiAgICAgICAgICAgICAgICBzZWxmLmJ0cmVlW2xpbmtdID0gY29sbGVjdGVkX2xpbmtzCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIHNlbGYud3JvbmdfdXJscy5hcHBlbmQobGluaykKICAgICAgICAgICAgc2VsZi5jb2xsZWN0ZWRfcGFnZXMgKz0gMQoKICAgICAgICAgICAgY29sbGVjdGVkX2xpbmtzX3dpdGhfZGVwdGggPSBbXQogICAgICAgICAgICBmb3IgbGluayBpbiBjb2xsZWN0ZWRfbGlua3M6CiAgICAgICAgICAgICAgICBjb2xsZWN0ZWRfbGlua3Nfd2l0aF9kZXB0aC5hcHBlbmQoW2xpbmssIGRlcHRoKzFdKQogICAgICAgICAgICBzZWxmLnF1ZXVlLmV4dGVuZChjb2xsZWN0ZWRfbGlua3Nfd2l0aF9kZXB0aCkKCiAgICAgICAgICAgIGlmIGFicyhzZWxmLmxhc3RfZXhwb3J0IC0gc2VsZi5jb2xsZWN0ZWRfcGFnZXMpID49IDMwOgogICAgICAgICAgICAgICAgc2VsZi5leHBvcnRfYnRyZWUoKQogICAgICAgICAgICAgICAgc2VsZi5leHBvcnRfY3Jhd2xfb3JkZXIoKQoKICAgIGRlZiBleHBvcnRfY3Jhd2xfb3JkZXIoc2VsZik6CiAgICAgICAgd2l0aCBvcGVuKCJjcmF3bF9vcmRlci5qc29uIiwgInciKSBhcyBvdXRmaWxlOgogICAgICAgICAgICBqc29uLmR1bXAoc2VsZi5jcmF3bF9vcmRlciwgb3V0ZmlsZSkKCiAgICBkZWYgZXhwb3J0X2J0cmVlKHNlbGYpOgogICAgICAgIGRpY3Rpb25hcnlfYnRyZWUgPSB7fQogICAgICAgIGZvciBrZXkgaW4gc2VsZi5idHJlZToKICAgICAgICAgICAgZGljdGlvbmFyeV9idHJlZVtrZXldID0gbGlzdChzZWxmLmJ0cmVlW2tleV0pCgogICAgICAgIHdpdGggb3BlbigiYnRyZWUuanNvbiIsICJ3IikgYXMgb3V0ZmlsZToKICAgICAgICAgICAganNvbi5kdW1wKGRpY3Rpb25hcnlfYnRyZWUsIG91dGZpbGUpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgcmV0dXJuIHBhdGguY291bnQoIi8iKQoKPHxmaW1fZW5kfD4="]
["e44051135ba31a65240fb89cad454e3da0ef6f92-4","e44051135ba31a65240fb89cad454e3da0ef6f92","PHxmaW1fcHJlZml4fD4KZnJvbSBuZXRjcmFmdF9jb2xsZWN0b3IgaW1wb3J0ICoKZnJvbSBsaW5rc19jb2xsZWN0b3IgaW1wb3J0ICoKZnJvbSBCVHJlZXMuT09CVHJlZSBpbXBvcnQgT09CVHJlZQpmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdXJscGFyc2UKZnJvbSBweXZpcy5uZXR3b3JrIGltcG9ydCBOZXR3b3JrCmltcG9ydCBuZXR3b3JreCBhcyBueAppbXBvcnQganNvbgoKY2xhc3MgQ3Jhd2xlcigpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIFNFRURfTElNSVQsIFRPVEFMX01BWF9QQUdFUywgTUFYX1BBR0VTX1BFUl9TSVRFLCBNQVhfUEhZU0lDQUxfREVQVEgsIE1BWF9MT0dJQ0FMX0RFUFRIKToKICAgICAgICBzZWxmLlRPVEFMX01BWF9QQUdFUyA9IFRPVEFMX01BWF9QQUdFUwogICAgICAgIHNlbGYuTUFYX1BBR0VTX1BFUl9TSVRFID0gTUFYX1BBR0VTX1BFUl9TSVRFCiAgICAgICAgc2VsZi5NQVhfUEhZU0lDQUxfREVQVEggPSBNQVhfUEhZU0lDQUxfREVQVEgKICAgICAgICBzZWxmLk1BWF9MT0dJQ0FMX0RFUFRIID0gTUFYX0xPR0lDQUxfREVQVEgKCiAgICAgICAgc2VsZi5xdWV1ZSA9IFtdCiAgICAgICAgbmMgPSBOZXRjcmFmdF9Db2xsZWN0b3IoKQoKICAgICAgICBmb3IgbGluayBpbiBuYy5jb2xsZWN0X2xpbmtzKFNFRURfTElNSVQpOgogICAgICAgICAgICBzZWxmLnF1ZXVlLmFwcGVuZChbbGluaywgMF0pCgogICAgICAgIHNlbGYuY29sbGVjdGVkX3BhZ2VzID0gMAogICAgICAgIHNlbGYubGMgPSBMaW5rc19Db2xsZWN0b3IoKQogICAgICAgIHNlbGYud3JvbmdfdXJscyA9IFtdCiAgICAgICAgc2VsZi5idHJlZSA9IE9PQlRyZWUoKQoKICAgICAgICBzZWxmLmNyYXdsX29yZGVyID0gW10KCiAgICAgICAgc2VsZi5sYXN0X2V4cG9ydCA9IDAKICAgICAgICBzZWxmLmJlZ2luX2NyYXdsKCkKCiAgICAgICAgcHJpbnQoIkNyYXdsIEVuZGVkIikKCiAgICBkZWYgZ2V0X3VybF9waHlzaWNhbF9kZXB0aChzZWxmLCB1cmwpOgogICAgICAgIHBhdGggPSB1cmxwYXJzZSh1cmwpLnBhdGgKICAgICAgICByZXR1cm4gcGF0aC5jb3VudCgiLyIpCgogICAgZGVmIGJlZ2luX2NyYXdsKHNlbGYpOgogICAgICAgIHdoaWxlIHNlbGYucXVldWUgIT0gW10gYW5kIHNlbGYuY29sbGVjdGVkX3BhZ2VzIDwgc2VsZi5UT1RBTF9NQVhfUEFHRVM6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIGxpbmssIGRlcHRoID0gc2VsZi5xdWV1ZS5wb3AoMCkKCiAgICAgICAgICAgICAgICBwcmludCgiQ29sbGVjdGVkIFBhZ2VzIHt9LCBQcm9jZXNzaW5nIHt9Ii5mb3JtYXQoc2VsZi5jb2xsZWN0ZWRfcGFnZXMsIGxpbmspKQoKICAgICAgICAgICAgICAgIGlmIGRlcHRoID4gc2VsZi5NQVhfTE9HSUNBTF9ERVBUSDoKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgICAgIGlmIHNlbGYuZ2V0X3VybF9waHlzaWNhbF9kZXB0aChsaW5rKSA+IHNlbGYuTUFYX1BIWVNJQ0FMX0RFUFRIOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAgICAgaWYgbGluayBpbiBzZWxmLmJ0cmVlOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCjx8ZmltX2hvbGV8PgogICAgICAgICAgICAgICAgc2VsZi5idHJlZVtsaW5rXSA9IGNvbGxlY3RlZF9saW5rcwogICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICBzZWxmLndyb25nX3VybHMuYXBwZW5kKGxpbmspCiAgICAgICAgICAgIHNlbGYuY29sbGVjdGVkX3BhZ2VzICs9IDEKCiAgICAgICAgICAgIGNvbGxlY3RlZF9saW5rc193aXRoX2RlcHRoID0gW10KICAgICAgICAgICAgZm9yIGxpbmsgaW4gY29sbGVjdGVkX2xpbmtzOgogICAgICAgICAgICAgICAgY29sbGVjdGVkX2xpbmtzX3dpdGhfZGVwdGguYXBwZW5kKFtsaW5rLCBkZXB0aCsxXSkKICAgICAgICAgICAgc2VsZi5xdWV1ZS5leHRlbmQoY29sbGVjdGVkX2xpbmtzX3dpdGhfZGVwdGgpCgogICAgICAgICAgICBpZiBhYnMoc2VsZi5sYXN0X2V4cG9ydCAtIHNlbGYuY29sbGVjdGVkX3BhZ2VzKSA+PSAzMDoKICAgICAgICAgICAgICAgIHNlbGYuZXhwb3J0X2J0cmVlKCkKICAgICAgICAgICAgICAgIHNlbGYuZXhwb3J0X2NyYXdsX29yZGVyKCkKCiAgICBkZWYgZXhwb3J0X2NyYXdsX29yZGVyKHNlbGYpOgogICAgICAgIHdpdGggb3BlbigiY3Jhd2xfb3JkZXIuanNvbiIsICJ3IikgYXMgb3V0ZmlsZToKICAgICAgICAgICAganNvbi5kdW1wKHNlbGYuY3Jhd2xfb3JkZXIsIG91dGZpbGUpCgogICAgZGVmIGV4cG9ydF9idHJlZShzZWxmKToKICAgICAgICBkaWN0aW9uYXJ5X2J0cmVlID0ge30KICAgICAgICBmb3Iga2V5IGluIHNlbGYuYnRyZWU6CiAgICAgICAgICAgIGRpY3Rpb25hcnlfYnRyZWVba2V5XSA9IGxpc3Qoc2VsZi5idHJlZVtrZXldKQoKICAgICAgICB3aXRoIG9wZW4oImJ0cmVlLmpzb24iLCAidyIpIGFzIG91dGZpbGU6CiAgICAgICAgICAgIGpzb24uZHVtcChkaWN0aW9uYXJ5X2J0cmVlLCBvdXRmaWxlKQo8fGZpbV9zdWZmaXh8PgoKICAgICAgICAgICAgICAgIGNvbGxlY3RlZF9saW5rcyA9IHNlbGYubGMuY29sbGVjdF9saW5rcyhsaW5rKVs6c2VsZi5NQVhfUEFHRVNfUEVSX1NJVEVdCgogICAgICAgICAgICAgICAgc2VsZi5jcmF3bF9vcmRlci5hcHBlbmQobGluaykKPHxmaW1fZW5kfD4="]
["e44051135ba31a65240fb89cad454e3da0ef6f92-5","e44051135ba31a65240fb89cad454e3da0ef6f92","PHxmaW1fcHJlZml4fD4KZnJvbSBuZXRjcmFmdF9jb2xsZWN0b3IgaW1wb3J0ICoKPHxmaW1faG9sZXw+CmltcG9ydCBuZXR3b3JreCBhcyBueAppbXBvcnQganNvbgoKY2xhc3MgQ3Jhd2xlcigpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIFNFRURfTElNSVQsIFRPVEFMX01BWF9QQUdFUywgTUFYX1BBR0VTX1BFUl9TSVRFLCBNQVhfUEhZU0lDQUxfREVQVEgsIE1BWF9MT0dJQ0FMX0RFUFRIKToKICAgICAgICBzZWxmLlRPVEFMX01BWF9QQUdFUyA9IFRPVEFMX01BWF9QQUdFUwogICAgICAgIHNlbGYuTUFYX1BBR0VTX1BFUl9TSVRFID0gTUFYX1BBR0VTX1BFUl9TSVRFCiAgICAgICAgc2VsZi5NQVhfUEhZU0lDQUxfREVQVEggPSBNQVhfUEhZU0lDQUxfREVQVEgKICAgICAgICBzZWxmLk1BWF9MT0dJQ0FMX0RFUFRIID0gTUFYX0xPR0lDQUxfREVQVEgKCiAgICAgICAgc2VsZi5xdWV1ZSA9IFtdCiAgICAgICAgbmMgPSBOZXRjcmFmdF9Db2xsZWN0b3IoKQoKICAgICAgICBmb3IgbGluayBpbiBuYy5jb2xsZWN0X2xpbmtzKFNFRURfTElNSVQpOgogICAgICAgICAgICBzZWxmLnF1ZXVlLmFwcGVuZChbbGluaywgMF0pCgogICAgICAgIHNlbGYuY29sbGVjdGVkX3BhZ2VzID0gMAogICAgICAgIHNlbGYubGMgPSBMaW5rc19Db2xsZWN0b3IoKQogICAgICAgIHNlbGYud3JvbmdfdXJscyA9IFtdCiAgICAgICAgc2VsZi5idHJlZSA9IE9PQlRyZWUoKQoKICAgICAgICBzZWxmLmNyYXdsX29yZGVyID0gW10KCiAgICAgICAgc2VsZi5sYXN0X2V4cG9ydCA9IDAKICAgICAgICBzZWxmLmJlZ2luX2NyYXdsKCkKCiAgICAgICAgcHJpbnQoIkNyYXdsIEVuZGVkIikKCiAgICBkZWYgZ2V0X3VybF9waHlzaWNhbF9kZXB0aChzZWxmLCB1cmwpOgogICAgICAgIHBhdGggPSB1cmxwYXJzZSh1cmwpLnBhdGgKICAgICAgICByZXR1cm4gcGF0aC5jb3VudCgiLyIpCgogICAgZGVmIGJlZ2luX2NyYXdsKHNlbGYpOgogICAgICAgIHdoaWxlIHNlbGYucXVldWUgIT0gW10gYW5kIHNlbGYuY29sbGVjdGVkX3BhZ2VzIDwgc2VsZi5UT1RBTF9NQVhfUEFHRVM6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIGxpbmssIGRlcHRoID0gc2VsZi5xdWV1ZS5wb3AoMCkKCiAgICAgICAgICAgICAgICBwcmludCgiQ29sbGVjdGVkIFBhZ2VzIHt9LCBQcm9jZXNzaW5nIHt9Ii5mb3JtYXQoc2VsZi5jb2xsZWN0ZWRfcGFnZXMsIGxpbmspKQoKICAgICAgICAgICAgICAgIGlmIGRlcHRoID4gc2VsZi5NQVhfTE9HSUNBTF9ERVBUSDoKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgICAgIGlmIHNlbGYuZ2V0X3VybF9waHlzaWNhbF9kZXB0aChsaW5rKSA+IHNlbGYuTUFYX1BIWVNJQ0FMX0RFUFRIOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAgICAgaWYgbGluayBpbiBzZWxmLmJ0cmVlOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAgICAgY29sbGVjdGVkX2xpbmtzID0gc2VsZi5sYy5jb2xsZWN0X2xpbmtzKGxpbmspWzpzZWxmLk1BWF9QQUdFU19QRVJfU0lURV0KCiAgICAgICAgICAgICAgICBzZWxmLmNyYXdsX29yZGVyLmFwcGVuZChsaW5rKQogICAgICAgICAgICAgICAgc2VsZi5idHJlZVtsaW5rXSA9IGNvbGxlY3RlZF9saW5rcwogICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICBzZWxmLndyb25nX3VybHMuYXBwZW5kKGxpbmspCiAgICAgICAgICAgIHNlbGYuY29sbGVjdGVkX3BhZ2VzICs9IDEKCiAgICAgICAgICAgIGNvbGxlY3RlZF9saW5rc193aXRoX2RlcHRoID0gW10KICAgICAgICAgICAgZm9yIGxpbmsgaW4gY29sbGVjdGVkX2xpbmtzOgogICAgICAgICAgICAgICAgY29sbGVjdGVkX2xpbmtzX3dpdGhfZGVwdGguYXBwZW5kKFtsaW5rLCBkZXB0aCsxXSkKICAgICAgICAgICAgc2VsZi5xdWV1ZS5leHRlbmQoY29sbGVjdGVkX2xpbmtzX3dpdGhfZGVwdGgpCgogICAgICAgICAgICBpZiBhYnMoc2VsZi5sYXN0X2V4cG9ydCAtIHNlbGYuY29sbGVjdGVkX3BhZ2VzKSA+PSAzMDoKICAgICAgICAgICAgICAgIHNlbGYuZXhwb3J0X2J0cmVlKCkKICAgICAgICAgICAgICAgIHNlbGYuZXhwb3J0X2NyYXdsX29yZGVyKCkKCiAgICBkZWYgZXhwb3J0X2NyYXdsX29yZGVyKHNlbGYpOgogICAgICAgIHdpdGggb3BlbigiY3Jhd2xfb3JkZXIuanNvbiIsICJ3IikgYXMgb3V0ZmlsZToKICAgICAgICAgICAganNvbi5kdW1wKHNlbGYuY3Jhd2xfb3JkZXIsIG91dGZpbGUpCgogICAgZGVmIGV4cG9ydF9idHJlZShzZWxmKToKICAgICAgICBkaWN0aW9uYXJ5X2J0cmVlID0ge30KICAgICAgICBmb3Iga2V5IGluIHNlbGYuYnRyZWU6CiAgICAgICAgICAgIGRpY3Rpb25hcnlfYnRyZWVba2V5XSA9IGxpc3Qoc2VsZi5idHJlZVtrZXldKQoKICAgICAgICB3aXRoIG9wZW4oImJ0cmVlLmpzb24iLCAidyIpIGFzIG91dGZpbGU6CiAgICAgICAgICAgIGpzb24uZHVtcChkaWN0aW9uYXJ5X2J0cmVlLCBvdXRmaWxlKQo8fGZpbV9zdWZmaXh8Pgpmcm9tIGxpbmtzX2NvbGxlY3RvciBpbXBvcnQgKgpmcm9tIEJUcmVlcy5PT0JUcmVlIGltcG9ydCBPT0JUcmVlCmZyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1cmxwYXJzZQpmcm9tIHB5dmlzLm5ldHdvcmsgaW1wb3J0IE5ldHdvcmsKPHxmaW1fZW5kfD4="]
["395c31129e12a0b54da8682fecc8e292be5aa7d1-1","395c31129e12a0b54da8682fecc8e292be5aa7d1","PHxmaW1fcHJlZml4fD4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMKIyAgICBHcmFkdWF0ZSBDb3Vyc2U6IEZpbml0ZSBFbGVtZW50IEFuYWx5c2lzIC0gU3ByaW5nIDIwMjIgQEpCTlUKIwojICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyAKIyAgIEV4YW1wbGUgOC4yOiAyRCBUcnVzcyBQcm9ibGVtCiMKIyAgIExhc3QgdXBkYXRlZDogMjQvMDUvMjAyMiBieSBNaW5oLUNoaWVuIFRyaW5oIChtY3RyaW5oQGpibnUuYWMua3IpCiMKIyAgIENvcHlyaWdodCAyMDIyIE1pbmgtQ2hpZW4gVHJpbmguIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMgCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKaW1wb3J0IG51bXB5IGFzIG5wCgoKZGVmIFN0aWZmbmVzczJEVHJ1c3MoZ0RvZiwgbkVsZW0sIGVOb2RlLCBuTm9kZSwgbkNvb3JkLCB4Q29vcmQsIHlDb29yZCwgRUEpOgogICAgCiAgICAjIEluaXRpYWxpemF0aW9uCiAgICBLbWF0ID0gbnAuemVyb3MoKGdEb2YsZ0RvZikpCgogICAgIyBDb21wdXRhdGlvbiBvZiB0aGUgc3lzdGVtIHN0aWZmbmVzcyBtYXRyaXgKICAgIGZvciBpIGluIHJhbmdlKG5FbGVtKToKICAgICAgICAjIEVsZW1lbnQgZGVncmVlIG9mIGZyZWVkb20KICAgICAgICBpbmRpY2UgPSBlTm9kZVtpLDpdCgo8fGZpbV9ob2xlfD4KICAgICAgICAjIEVsZW1lbnQgbGVuZ3RoCiAgICAgICAgeGEgPSB4Q29vcmRbaW5kaWNlWzFdLTFdIC0geENvb3JkW2luZGljZVswXS0xXQogICAgICAgIHlhID0geUNvb3JkW2luZGljZVsxXS0xXSAtIHhDb29yZFtpbmRpY2VbMF0tMV0KICAgICAgICBlTGVuZyA9IG5wLnNxcnQoeGEqKjIgKyB5YSoqMikKICAgICAgICAKICAgICAgICAjIFRoZSBjb250cmlidXRpb24gb2YgdGhlIGVsZW1lbnQgdG8gdGhlIHN0aWZmbmVzcyBtYXRyaXgKICAgICAgICBDID0geGEgLyBlTGVuZwogICAgICAgIFMgPSB5YSAvIGVMZW5nCiAgICAgICAgazEgPSBFQSAvIGVMZW5nICogbnAuYXJyYXkoW1tDKkMsIEMqUywgLUMqQywgLUMqU10sIFtDKlMsIFMqUywgLUMqUywgLVMqU10sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFstQypDLCAtQypTLCBDKkMsIEMqU10sIFstQypTLCAtUypTLCBDKlMsIFMqU11dKQogICAgICAgIAogICAgICAgICMgQXNzZW1ibGUgdGhlIGNvbnRyaWJ1dGlvbiB0byB0aGUgZ2xvYmFsIHN0aWZmbmVzcyBtYXRyaXgKICAgICAgICAjIFJvdyBpbmRleAogICAgICAgIHJJbmRleCA9IG5wLnplcm9zKChuRG9mLG5Eb2YpLCBkdHlwZT1pbnQpCiAgICAgICAgckluZGV4WzA6NCwwXSA9IGVEb2YgLSAxIAogICAgICAgIHJJbmRleFswOjQsMV0gPSBlRG9mIC0gMQogICAgICAgIHJJbmRleFswOjQsMl0gPSBlRG9mIC0gMQogICAgICAgIHJJbmRleFswOjQsM10gPSBlRG9mIC0gMQogICAgICAgICMgQ29sdW1uIGluZGV4CiAgICAgICAgY0luZGV4ID0gbnAuemVyb3MoKG5Eb2YsbkRvZiksIGR0eXBlPWludCkKICAgICAgICBjSW5kZXhbMCwwOjRdID0gZURvZiAtIDEKICAgICAgICBjSW5kZXhbMSwwOjRdID0gZURvZiAtIDEKICAgICAgICBjSW5kZXhbMiwwOjRdID0gZURvZiAtIDEKICAgICAgICBjSW5kZXhbMywwOjRdID0gZURvZiAtIDEKICAgICAgICAjIEFzc2VtYmxlCiAgICAgICAgS21hdFtySW5kZXgsY0luZGV4XSA9IEttYXRbckluZGV4LGNJbmRleF0gKyBrMQogICAgICAgIAogICAgcmV0dXJuIEttYXQKCgpkZWYgU3RyZXNzZXMyRFRydXNzKG5FbGVtLCBlTm9kZSwgeENvb3JkLCB5Q29vcmQsIFVtYXQsIEUpOgoKICAgICMgSW5pdGlhbGl6YXRpb24KICAgIHNpZ21hID0gbnAuemVyb3MoKG5FbGVtLCAxKSkKCiAgICBmb3IgaSBpbiByYW5nZShuRWxlbSk6CiAgICAgICAgIyBFbGVtZW50IGRlZ3JlZSBvZiBmcmVlZG9tCiAgICAgICAgaW5kaWNlID0gZU5vZGVbaSw6XQoKICAgICAgICAjIEVsZW1lbnQgRE9GcwogICAgICAgIGVEb2YgPSBucC5hcnJheShbaW5kaWNlWzBdKjItMSwgaW5kaWNlWzBdKjIsIGluZGljZVsxXSoyLTEsIGluZGljZVsxXSoyXSkKICAgICAgICBuRG9mID0gbnAuc2l6ZShlRG9mKQogICAgICAgIAogICAgICAgICMgRWxlbWVudCBsZW5ndGgKICAgICAgICB4YSA9IHhDb29yZFtpbmRpY2VbMV0tMV0gLSB4Q29vcmRbaW5kaWNlWzBdLTFdCiAgICAgICAgeWEgPSB5Q29vcmRbaW5kaWNlWzFdLTFdIC0geENvb3JkW2luZGljZVswXS0xXQogICAgICAgIGVMZW5nID0gbnAuc3FydCh4YSoqMiArIHlhKioyKQogICAgICAgIAogICAgICAgIEMgPSB4YSAvIGVMZW5nCiAgICAgICAgUyA9IHlhIC8gZUxlbmcKICAgICAgICAKICAgICAgICAjIEVsZW1lbnQgc3RyZXNzCiAgICAgICAgc2lnbWFbaSwwXSA9IEUgLyBlTGVuZyAqIG5wLm1hdG11bChucC5hcnJheShbLUMsIC1TLCBDLCBTXSksIAogICAgICAgICAgICAgICAgICAgICAgICBucC5hcnJheShbVW1hdFtlRG9mWzBdLTEsMF0sIFVtYXRbZURvZlsxXS0xLDBdLCBVbWF0W2VEb2ZbMl0tMSwwXSwgVW1hdFtlRG9mWzNdLTEsMF1dKSkKCiAgICByZXR1cm4gc2lnbWEKCgojIEdpdmVuIHBhcmFtZXJlcnMKRSA9IDMwZTY7IEEgPSAyOyBFQSA9IEUqQQoKIyBOdW1iZXIgb2YgZWxlbWVudHMKbkVsZW0gPSAzCgojIE51bWJlciBvZiBub2RlcwpuTm9kZSA9IDQKCiMgRWxlbWVudCBub2RlcwplTm9kZSA9IG5wLmFycmF5KFtbMSwyXSwgWzEsM10sIFsxLDRdXSwgZHR5cGU9aW50KQoKIyBOb2RlIGNvb3JkaW5hdGVzCm5Db29yZCA9IG5wLmFycmF5KFtbMCwwXSwgWzAsMTIwXSwgWzEyMCwxMjBdLCBbMTIwLDBdXSkKeENvb3JkID0gbkNvb3JkWzosMF0KeUNvb3JkID0gbkNvb3JkWzosMV0KCiMgVG90YWwgbnVtYmVyIG9mIGRlZ3JlZSBvZiBmcmVlZG9tCmdEb2YgID0gMiAqIG5Ob2RlCgojIEluaXRpYWxpemF0aW9uClVtYXQgPSBucC56ZXJvcygoZ0RvZiwxKSkgICAgICAgICAgICAgICMgRGlzcGxhY2VtZW50IHZlY3RvcgpGbWF0ID0gbnAuemVyb3MoKGdEb2YsMSkpICAgICAgICAgICAgICAjIEZvcmNlIHZlY3RvcgpLbWF0ID0gbnAuemVyb3MoKGdEb2YsZ0RvZikpICAgICAgICAgICAjIFN0aWZmbmVzcyBtYXRyaXgKCiMgQXBwbGllZCBsb2FkIGF0IG5vZGUgMSwgMm5kIGRvZgpGbWF0WzEsMF0gPSAtMTAwMDAKCiMgQ29tcHV0YXRpb24gb2YgdGhlIHN5c3RlbSBzdGlmZm5lc3MgbWF0cml4CkttYXQgPSBTdGlmZm5lc3MyRFRydXNzKGdEb2YsIG5FbGVtLCBlTm9kZSwgbk5vZGUsIG5Db29yZCwgeENvb3JkLCB5Q29vcmQsIEVBKQpwcmludCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIikKcHJpbnQoIlN0aWZmbmVzcyBtYXRyaXggKEttYXQpOiBcblxuIiwgS21hdCkKcHJpbnQoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpCgojIEFwcGx5IGJvdW5kYXJ5IGNvbmRpdGlvbgojIEZpeC9wcmVzY3JpYmVkIGRlZ3JlZSBvZiBmcmVlZG9tCmZpeERvZiA9IG5wLmFycmF5KFtbMl0sWzNdLFs0XSxbNV0sWzZdLFs3XV0pCiMgRnJlZS9hY3RpdmUgZGVncmVlIG9mIGZyZWVkb20KYWN0aXZlRG9mID0gbnAuc2V0ZGlmZjFkKG5wLmFyYW5nZSgwLGdEb2YsMSksIGZpeERvZikgICAgICAgIyAwMiBhY3RpdmUgRG9mcwoKIyBTb2x1dGlvbgojIEluZGV4aW5nIG9mIGFjdGl2ZURvZgppSW5kZXggPSBucC56ZXJvcygobnAuc2l6ZShhY3RpdmVEb2YpLG5wLnNpemUoYWN0aXZlRG9mKSksIGR0eXBlPWludCkKaUluZGV4WzA6MiwwXSA9IGFjdGl2ZURvZgppSW5kZXhbMDoyLDFdID0gYWN0aXZlRG9mCmpJbmRleCA9IG5wLnplcm9zKChucC5zaXplKGFjdGl2ZURvZiksbnAuc2l6ZShhY3RpdmVEb2YpKSwgZHR5cGU9aW50KQpqSW5kZXhbMCwwOjJdID0gYWN0aXZlRG9mCmpJbmRleFsxLDA6Ml0gPSBhY3RpdmVEb2YKIyBFdmFsdWF0ZSBkaXNwbGFjZW1lbnQgYXQgYWN0aXZlRG9mClVtYXRbYWN0aXZlRG9mLDBdID0gbnAuZG90KG5wLmxpbmFsZy5pbnYoS21hdFtpSW5kZXgsakluZGV4XSksRm1hdFthY3RpdmVEb2YsMF0pCnByaW50KCJEaXNwbGFjZW1lbnQgdmVjdG9yIChVbWF0KTogXG5cbiIsIFVtYXQpCnByaW50KCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIikKCiMgRm9yY2UgdmVjdG9yCkZtYXQgPSBucC5kb3QoS21hdCxVbWF0KQpwcmludCgiRm9yY2UgdmVjdG9yIChGbWF0KTogXG5cbiIsIEZtYXQpCnByaW50KCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIikKCiMgUmVhY3Rpb25zClJlYWN0aW9uID0gbnAuemVyb3MobnAuc2l6ZShmaXhEb2YpKQpSZWFjdGlvbiA9IEZtYXRbZml4RG9mLDBdCnByaW50KCJSZWFjdGlvbnM6IFxuXG4iLCBSZWFjdGlvbikKcHJpbnQoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKQoKIyBTdHJlc3NlcyBvZiBlbGVtZW50cwpzaWdtYSA9IG5wLnplcm9zKChuRWxlbSwgMSkpCnNpZ21hID0gU3RyZXNzZXMyRFRydXNzKG5FbGVtLCBlTm9kZSwgeENvb3JkLCB5Q29vcmQsIFVtYXQsIEUpCnByaW50KCJTdHJlc3NlczogXG5cbiIsIHNpZ21hKQpwcmludCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpCgoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBGb3Igc3R1ZGVudHM6CiMgCiMgMS4gUGxvdCB0aGUgaW50YWN0IGFuZCBkZWZvcm1lZCBzaGFwZXMgb2YgdGhlIHN5c3RlbQojIAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMgQWRkIHlvdXIgY29kZSBmcm9tIHRoZXJlIC4uLgo8fGZpbV9zdWZmaXh8PgogICAgICAgICMgRWxlbWVudCBET0ZzCiAgICAgICAgZURvZiA9IG5wLmFycmF5KFtpbmRpY2VbMF0qMi0xLCBpbmRpY2VbMF0qMiwgaW5kaWNlWzFdKjItMSwgaW5kaWNlWzFdKjJdKQogICAgICAgIG5Eb2YgPSBucC5zaXplKGVEb2YpCiAgICAgICAgCjx8ZmltX2VuZHw+"]
["cd1dd6d8ef23b1365433252777d2efe1c667169e-1","cd1dd6d8ef23b1365433252777d2efe1c667169e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0aW1lCmZyb20gbnVtYmEgaW1wb3J0IGppdApmcm9tIHBvd2VyX3BsYW5uZXIuZ3JhcGhzLmltcGxpY2l0X2xnIGltcG9ydCBJbXBsaWNpdExHCgoKY2xhc3MgSW1wbGljaXRQYXJldG8oSW1wbGljaXRMRyk6CgogICAgZGVmIGdldF9wYXJldG8oCiAgICAgICAgc2VsZiwgdmFyeSwgc291cmNlLCBkZXN0LCBvdXRfcGF0aD1Ob25lLCBjb21wYXJlPVswLCAxXSwgcGxvdD0xCiAgICApOgogICAgICAgICIiIgogICAgICAgICAgICBBcmd1bWVudHM6CiAgICAgICAgICAgICAgICB2YXJ5OiBob3cgbWFueSB3ZWlnaHRzIHRvIGV4cGxvcmUKICAgICAgICAgICAgICAgICAgICAgICAgZS5nIDMgLS0+IGVhY2ggY29zdCBjbGFzcyBjYW4gaGF2ZSB3ZWlnaHQgMCwgMC41IG9yIDEKICAgICAgICAgICAgICAgIHNvdXJjZSwgZGVzdDogYXMgYWx3YXlzIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHZlcnRleAogICAgICAgICAgICAgICAgb3V0X3BhdGg6IHdoZXJlIHRvIHNhdmUgdGhlIHBhcmV0byBmaWd1cmUocykKICAgICAgICAgICAgICAgIGNvbXBhcmU6IGluZGljZXMgb2YgY29zdCBjbGFzc2VzIHRvIGNvbXBhcmUKICAgICAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgICAgIHBhdGhzOiBBbGwgZm91bmQgcGF0aHMKICAgICAgICAgICAgICAgIHBhcmV0bzogVGhlIGNvc3RzIGZvciBlYWNoIGNvbWJpbmF0aW9uIG9mIHdlaWdodHMKICAgICAgICAgICAgIiIiCiAgICAgICAgdGljID0gdGltZS50aW1lKCkKICAgICAgICAjIGluaXRpYWxpemUgbGlzdHMKICAgICAgICBwYXJldG8gPSBsaXN0KCkKICAgICAgICBwYXRocyA9IGxpc3QoKQogICAgICAgIGNvc3Rfc3VtID0gbGlzdCgpCgogICAgICAgICMgZ2V0IHZhcnkgd2VpZ2h0cyBiZXR3ZWVuIDAgYW5kIDEKICAgICAgICB2YXJfd2VpZ2h0cyA9IG5wLmFyb3VuZChucC5saW5zcGFjZSgwLCAxLCB2YXJ5KSwgMikKCiAgICAgICAgIyBjb25zdHJ1Y3Qgd2VpZ2h0cyBhcnJheQogICAgICAgIGlmIGxlbihjb21wYXJlKSA9PSAyOgogICAgICAgICAgICB3ZWlnaHRzID0gW1t2LCAxIC0gdl0gZm9yIHYgaW4gdmFyX3dlaWdodHNdCiAgICAgICAgZWxpZiBsZW4oY29tcGFyZSkgPT0gMzoKICAgICAgICAgICAgd2VpZ2h0cyA9IGxpc3QoKQogICAgICAgICAgICBmb3IgdzAgaW4gdmFyX3dlaWdodHM6CiAgICAgICAgICAgICAgICBmb3IgdzEgaW4gdmFyX3dlaWdodHNbdmFyX3dlaWdodHMgPD0gMSAtIHcwXToKICAgICAgICAgICAgICAgICAgICB3ZWlnaHRzLmFwcGVuZChbdzAsIHcxLCAxIC0gdzAgLSB3MV0pCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYXJndW1lbnQgY29tcGFyZSBjYW4gb25seSBoYXZlIGxlbmd0aCAyIG9yIDMiKQoKICAgICAgICAjIGNvbXB1dGUgcGF0aHMgZm9yIGVhY2ggY29tYmluYXRpb24gb2Ygd2VpZ2h0cwogICAgICAgIGZvciBqIGluIHJhbmdlKGxlbih3ZWlnaHRzKSk6CiAgICAgICAgICAgICMgb3B0aW9uIDI6IG5wLnplcm9zKGxlbihjb3N0X2FycnMpKSArIG5vbl9jb21wYXJlX3dlaWdodAogICAgICAgICAgICBzZWxmLnNldF9lZGdlX2Nvc3RzKAogICAgICAgICAgICAgICAgc2VsZi5jb3N0X2NsYXNzZXMsCiAgICAgICAgICAgICAgICB3ZWlnaHRzLAogICAgICAgICAgICAgICAgYW5nbGVfd2VpZ2h0PTAuMSAgIyBjZmcuQU5HTEVfV0VJR0hUCiAgICAgICAgICAgICkKICAgICAgICAgICAgc2VsZi5hZGRfZWRnZXMoZWRnZV93ZWlnaHQ9ZV93KSAgIyBUT0RPCiAgICAgICAgICAgIHBhdGgsIHBhdGhfY29zdHMsIGNvc3Rfc3VtID0gc2VsZi5nZXRfc2hvcnRlc3RfcGF0aChzb3VyY2UsIGRlc3QpCiAgICAgICAgICAgICMgZ2V0IHNob3J0ZXN0IHBhdGgKICAgICAgICAgICAgcGF0aCwgcGF0aF9jb3N0cywgXyA9IHNlbGYuZ2V0X3Nob3J0ZXN0X3BhdGgoc291cmNlLCBkZXN0KQogICAgICAgICAgICAjIGRvbid0IHRha2UgY29zdF9zdW0gYmMgdGhpcyBpcyBzdW0gb2Ygb3JpZ2luYWwgd2VpZ2h0aW5nCiAgICAgICAgICAgIHBhcmV0by5hcHBlbmQobnAuc3VtKHBhdGhfY29zdHMsIGF4aXM9MClbY29tcGFyZV0pCiAgICAgICAgICAgIHBhdGhzLmFwcGVuZChwYXRoKQo8fGZpbV9ob2xlfD4KICAgICAgICAjIHByaW50IGJlc3Qgd2VpZ2h0aW5nCiAgICAgICAgYmVzdF93ZWlnaHQgPSBucC5hcmdtaW4oY29zdF9zdW0pCiAgICAgICAgdyA9IHNlbGYuY29zdF93ZWlnaHRzLmNvcHkoKQogICAgICAgIHdbY29tcGFyZV0gPSBucC5hcnJheSh3ZWlnaHRzW2Jlc3Rfd2VpZ2h0XSkgKiB3X2F2YWlsCiAgICAgICAgcHJpbnQoIkJlc3Qgd2VpZ2h0czoiLCB3LCAid2l0aCAodW53ZWlnaHRlZCkgY29zdHM6IiwgbnAubWluKGNvc3Rfc3VtKSkKCiAgICAgICAgc2VsZi50aW1lX2xvZ3NbInBhcmV0byJdID0gcm91bmQodGltZS50aW1lKCkgLSB0aWMsIDMpCgogICAgICAgIHBhcmV0byA9IG5wLmFycmF5KHBhcmV0bykKICAgICAgICBjbGFzc2VzID0gW3NlbGYuY29zdF9jbGFzc2VzW2NvbXBdIGZvciBjb21wIGluIGNvbXBhcmVdCiAgICAgICAgIyBQbG90dGluZwogICAgICAgIGlmIHBsb3Q6CiAgICAgICAgICAgIGlmIGxlbihjb21wYXJlKSA9PSAyOgogICAgICAgICAgICAgICAgcGxvdF9wYXJldG9fc2NhdHRlcl8yZCgKICAgICAgICAgICAgICAgICAgICBwYXJldG8sCiAgICAgICAgICAgICAgICAgICAgd2VpZ2h0cywKICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLAogICAgICAgICAgICAgICAgICAgIGNvc3Rfc3VtPWNvc3Rfc3VtLAogICAgICAgICAgICAgICAgICAgIG91dF9wYXRoPW91dF9wYXRoCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIGVsaWYgbGVuKGNvbXBhcmUpID09IDM6CiAgICAgICAgICAgICAgICAjIHBsb3RfcGFyZXRvXzNkKHBhcmV0bywgd2VpZ2h0cywgY2xhc3NlcykKICAgICAgICAgICAgICAgIHBsb3RfcGFyZXRvX3NjYXR0ZXJfM2QoCiAgICAgICAgICAgICAgICAgICAgcGFyZXRvLAogICAgICAgICAgICAgICAgICAgIHdlaWdodHMsCiAgICAgICAgICAgICAgICAgICAgY2xhc3NlcywKICAgICAgICAgICAgICAgICAgICBjb3N0X3N1bT1jb3N0X3N1bSwKICAgICAgICAgICAgICAgICAgICBvdXRfcGF0aD1vdXRfcGF0aAogICAgICAgICAgICAgICAgKQogICAgICAgIHJldHVybiBwYXRocywgd2VpZ2h0cywgY29zdF9zdW0KPHxmaW1fc3VmZml4fD4KICAgICAgICAgICAgIyB0YWtlIG92ZXJhbGwgc3VtIG9mIGNvc3RzICh1bndlaWdodGVkKSB0aGF0IHRoaXMgdyBsZWFkcyB0bwogICAgICAgICAgICBjb3N0X3N1bS5hcHBlbmQobnAuc3VtKHBhdGhfY29zdHMpKQoKPHxmaW1fZW5kfD4="]
["cd1dd6d8ef23b1365433252777d2efe1c667169e-2","cd1dd6d8ef23b1365433252777d2efe1c667169e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0aW1lCmZyb20gbnVtYmEgaW1wb3J0IGppdApmcm9tIHBvd2VyX3BsYW5uZXIuZ3JhcGhzLmltcGxpY2l0X2xnIGltcG9ydCBJbXBsaWNpdExHCgoKY2xhc3MgSW1wbGljaXRQYXJldG8oSW1wbGljaXRMRyk6CgogICAgZGVmIGdldF9wYXJldG8oCiAgICAgICAgc2VsZiwgdmFyeSwgc291cmNlLCBkZXN0LCBvdXRfcGF0aD1Ob25lLCBjb21wYXJlPVswLCAxXSwgcGxvdD0xCiAgICApOgogICAgICAgICIiIgogICAgICAgICAgICBBcmd1bWVudHM6CiAgICAgICAgICAgICAgICB2YXJ5OiBob3cgbWFueSB3ZWlnaHRzIHRvIGV4cGxvcmUKICAgICAgICAgICAgICAgICAgICAgICAgZS5nIDMgLS0+IGVhY2ggY29zdCBjbGFzcyBjYW4gaGF2ZSB3ZWlnaHQgMCwgMC41IG9yIDEKICAgICAgICAgICAgICAgIHNvdXJjZSwgZGVzdDogYXMgYWx3YXlzIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHZlcnRleAogICAgICAgICAgICAgICAgb3V0X3BhdGg6IHdoZXJlIHRvIHNhdmUgdGhlIHBhcmV0byBmaWd1cmUocykKICAgICAgICAgICAgICAgIGNvbXBhcmU6IGluZGljZXMgb2YgY29zdCBjbGFzc2VzIHRvIGNvbXBhcmUKICAgICAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgICAgIHBhdGhzOiBBbGwgZm91bmQgcGF0aHMKICAgICAgICAgICAgICAgIHBhcmV0bzogVGhlIGNvc3RzIGZvciBlYWNoIGNvbWJpbmF0aW9uIG9mIHdlaWdodHMKICAgICAgICAgICAgIiIiCiAgICAgICAgdGljID0gdGltZS50aW1lKCkKICAgICAgICAjIGluaXRpYWxpemUgbGlzdHMKICAgICAgICBwYXJldG8gPSBsaXN0KCkKPHxmaW1faG9sZXw+CiAgICAgICAgdmFyX3dlaWdodHMgPSBucC5hcm91bmQobnAubGluc3BhY2UoMCwgMSwgdmFyeSksIDIpCgogICAgICAgICMgY29uc3RydWN0IHdlaWdodHMgYXJyYXkKICAgICAgICBpZiBsZW4oY29tcGFyZSkgPT0gMjoKICAgICAgICAgICAgd2VpZ2h0cyA9IFtbdiwgMSAtIHZdIGZvciB2IGluIHZhcl93ZWlnaHRzXQogICAgICAgIGVsaWYgbGVuKGNvbXBhcmUpID09IDM6CiAgICAgICAgICAgIHdlaWdodHMgPSBsaXN0KCkKICAgICAgICAgICAgZm9yIHcwIGluIHZhcl93ZWlnaHRzOgogICAgICAgICAgICAgICAgZm9yIHcxIGluIHZhcl93ZWlnaHRzW3Zhcl93ZWlnaHRzIDw9IDEgLSB3MF06CiAgICAgICAgICAgICAgICAgICAgd2VpZ2h0cy5hcHBlbmQoW3cwLCB3MSwgMSAtIHcwIC0gdzFdKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImFyZ3VtZW50IGNvbXBhcmUgY2FuIG9ubHkgaGF2ZSBsZW5ndGggMiBvciAzIikKCiAgICAgICAgIyBjb21wdXRlIHBhdGhzIGZvciBlYWNoIGNvbWJpbmF0aW9uIG9mIHdlaWdodHMKICAgICAgICBmb3IgaiBpbiByYW5nZShsZW4od2VpZ2h0cykpOgogICAgICAgICAgICAjIG9wdGlvbiAyOiBucC56ZXJvcyhsZW4oY29zdF9hcnJzKSkgKyBub25fY29tcGFyZV93ZWlnaHQKICAgICAgICAgICAgc2VsZi5zZXRfZWRnZV9jb3N0cygKICAgICAgICAgICAgICAgIHNlbGYuY29zdF9jbGFzc2VzLAogICAgICAgICAgICAgICAgd2VpZ2h0cywKICAgICAgICAgICAgICAgIGFuZ2xlX3dlaWdodD0wLjEgICMgY2ZnLkFOR0xFX1dFSUdIVAogICAgICAgICAgICApCiAgICAgICAgICAgIHNlbGYuYWRkX2VkZ2VzKGVkZ2Vfd2VpZ2h0PWVfdykgICMgVE9ETwogICAgICAgICAgICBwYXRoLCBwYXRoX2Nvc3RzLCBjb3N0X3N1bSA9IHNlbGYuZ2V0X3Nob3J0ZXN0X3BhdGgoc291cmNlLCBkZXN0KQogICAgICAgICAgICAjIGdldCBzaG9ydGVzdCBwYXRoCiAgICAgICAgICAgIHBhdGgsIHBhdGhfY29zdHMsIF8gPSBzZWxmLmdldF9zaG9ydGVzdF9wYXRoKHNvdXJjZSwgZGVzdCkKICAgICAgICAgICAgIyBkb24ndCB0YWtlIGNvc3Rfc3VtIGJjIHRoaXMgaXMgc3VtIG9mIG9yaWdpbmFsIHdlaWdodGluZwogICAgICAgICAgICBwYXJldG8uYXBwZW5kKG5wLnN1bShwYXRoX2Nvc3RzLCBheGlzPTApW2NvbXBhcmVdKQogICAgICAgICAgICBwYXRocy5hcHBlbmQocGF0aCkKICAgICAgICAgICAgIyB0YWtlIG92ZXJhbGwgc3VtIG9mIGNvc3RzICh1bndlaWdodGVkKSB0aGF0IHRoaXMgdyBsZWFkcyB0bwogICAgICAgICAgICBjb3N0X3N1bS5hcHBlbmQobnAuc3VtKHBhdGhfY29zdHMpKQoKICAgICAgICAjIHByaW50IGJlc3Qgd2VpZ2h0aW5nCiAgICAgICAgYmVzdF93ZWlnaHQgPSBucC5hcmdtaW4oY29zdF9zdW0pCiAgICAgICAgdyA9IHNlbGYuY29zdF93ZWlnaHRzLmNvcHkoKQogICAgICAgIHdbY29tcGFyZV0gPSBucC5hcnJheSh3ZWlnaHRzW2Jlc3Rfd2VpZ2h0XSkgKiB3X2F2YWlsCiAgICAgICAgcHJpbnQoIkJlc3Qgd2VpZ2h0czoiLCB3LCAid2l0aCAodW53ZWlnaHRlZCkgY29zdHM6IiwgbnAubWluKGNvc3Rfc3VtKSkKCiAgICAgICAgc2VsZi50aW1lX2xvZ3NbInBhcmV0byJdID0gcm91bmQodGltZS50aW1lKCkgLSB0aWMsIDMpCgogICAgICAgIHBhcmV0byA9IG5wLmFycmF5KHBhcmV0bykKICAgICAgICBjbGFzc2VzID0gW3NlbGYuY29zdF9jbGFzc2VzW2NvbXBdIGZvciBjb21wIGluIGNvbXBhcmVdCiAgICAgICAgIyBQbG90dGluZwogICAgICAgIGlmIHBsb3Q6CiAgICAgICAgICAgIGlmIGxlbihjb21wYXJlKSA9PSAyOgogICAgICAgICAgICAgICAgcGxvdF9wYXJldG9fc2NhdHRlcl8yZCgKICAgICAgICAgICAgICAgICAgICBwYXJldG8sCiAgICAgICAgICAgICAgICAgICAgd2VpZ2h0cywKICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLAogICAgICAgICAgICAgICAgICAgIGNvc3Rfc3VtPWNvc3Rfc3VtLAogICAgICAgICAgICAgICAgICAgIG91dF9wYXRoPW91dF9wYXRoCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIGVsaWYgbGVuKGNvbXBhcmUpID09IDM6CiAgICAgICAgICAgICAgICAjIHBsb3RfcGFyZXRvXzNkKHBhcmV0bywgd2VpZ2h0cywgY2xhc3NlcykKICAgICAgICAgICAgICAgIHBsb3RfcGFyZXRvX3NjYXR0ZXJfM2QoCiAgICAgICAgICAgICAgICAgICAgcGFyZXRvLAogICAgICAgICAgICAgICAgICAgIHdlaWdodHMsCiAgICAgICAgICAgICAgICAgICAgY2xhc3NlcywKICAgICAgICAgICAgICAgICAgICBjb3N0X3N1bT1jb3N0X3N1bSwKICAgICAgICAgICAgICAgICAgICBvdXRfcGF0aD1vdXRfcGF0aAogICAgICAgICAgICAgICAgKQogICAgICAgIHJldHVybiBwYXRocywgd2VpZ2h0cywgY29zdF9zdW0KPHxmaW1fc3VmZml4fD4KICAgICAgICBwYXRocyA9IGxpc3QoKQogICAgICAgIGNvc3Rfc3VtID0gbGlzdCgpCgogICAgICAgICMgZ2V0IHZhcnkgd2VpZ2h0cyBiZXR3ZWVuIDAgYW5kIDEKPHxmaW1fZW5kfD4="]
["cd1dd6d8ef23b1365433252777d2efe1c667169e-3","cd1dd6d8ef23b1365433252777d2efe1c667169e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0aW1lCmZyb20gbnVtYmEgaW1wb3J0IGppdApmcm9tIHBvd2VyX3BsYW5uZXIuZ3JhcGhzLmltcGxpY2l0X2xnIGltcG9ydCBJbXBsaWNpdExHCgoKY2xhc3MgSW1wbGljaXRQYXJldG8oSW1wbGljaXRMRyk6CgogICAgZGVmIGdldF9wYXJldG8oCiAgICAgICAgc2VsZiwgdmFyeSwgc291cmNlLCBkZXN0LCBvdXRfcGF0aD1Ob25lLCBjb21wYXJlPVswLCAxXSwgcGxvdD0xCiAgICApOgogICAgICAgICIiIgogICAgICAgICAgICBBcmd1bWVudHM6CiAgICAgICAgICAgICAgICB2YXJ5OiBob3cgbWFueSB3ZWlnaHRzIHRvIGV4cGxvcmUKICAgICAgICAgICAgICAgICAgICAgICAgZS5nIDMgLS0+IGVhY2ggY29zdCBjbGFzcyBjYW4gaGF2ZSB3ZWlnaHQgMCwgMC41IG9yIDEKICAgICAgICAgICAgICAgIHNvdXJjZSwgZGVzdDogYXMgYWx3YXlzIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHZlcnRleAogICAgICAgICAgICAgICAgb3V0X3BhdGg6IHdoZXJlIHRvIHNhdmUgdGhlIHBhcmV0byBmaWd1cmUocykKICAgICAgICAgICAgICAgIGNvbXBhcmU6IGluZGljZXMgb2YgY29zdCBjbGFzc2VzIHRvIGNvbXBhcmUKICAgICAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgICAgIHBhdGhzOiBBbGwgZm91bmQgcGF0aHMKICAgICAgICAgICAgICAgIHBhcmV0bzogVGhlIGNvc3RzIGZvciBlYWNoIGNvbWJpbmF0aW9uIG9mIHdlaWdodHMKICAgICAgICAgICAgIiIiCiAgICAgICAgdGljID0gdGltZS50aW1lKCkKICAgICAgICAjIGluaXRpYWxpemUgbGlzdHMKICAgICAgICBwYXJldG8gPSBsaXN0KCkKICAgICAgICBwYXRocyA9IGxpc3QoKQogICAgICAgIGNvc3Rfc3VtID0gbGlzdCgpCgogICAgICAgICMgZ2V0IHZhcnkgd2VpZ2h0cyBiZXR3ZWVuIDAgYW5kIDEKICAgICAgICB2YXJfd2VpZ2h0cyA9IG5wLmFyb3VuZChucC5saW5zcGFjZSgwLCAxLCB2YXJ5KSwgMikKCiAgICAgICAgIyBjb25zdHJ1Y3Qgd2VpZ2h0cyBhcnJheQogICAgICAgIGlmIGxlbihjb21wYXJlKSA9PSAyOgogICAgICAgICAgICB3ZWlnaHRzID0gW1t2LCAxIC0gdl0gZm9yIHYgaW4gdmFyX3dlaWdodHNdCiAgICAgICAgZWxpZiBsZW4oY29tcGFyZSkgPT0gMzoKICAgICAgICAgICAgd2VpZ2h0cyA9IGxpc3QoKQogICAgICAgICAgICBmb3IgdzAgaW4gdmFyX3dlaWdodHM6CiAgICAgICAgICAgICAgICBmb3IgdzEgaW4gdmFyX3dlaWdodHNbdmFyX3dlaWdodHMgPD0gMSAtIHcwXToKICAgICAgICAgICAgICAgICAgICB3ZWlnaHRzLmFwcGVuZChbdzAsIHcxLCAxIC0gdzAgLSB3MV0pCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYXJndW1lbnQgY29tcGFyZSBjYW4gb25seSBoYXZlIGxlbmd0aCAyIG9yIDMiKQoKICAgICAgICAjIGNvbXB1dGUgcGF0aHMgZm9yIGVhY2ggY29tYmluYXRpb24gb2Ygd2VpZ2h0cwogICAgICAgIGZvciBqIGluIHJhbmdlKGxlbih3ZWlnaHRzKSk6CiAgICAgICAgICAgICMgb3B0aW9uIDI6IG5wLnplcm9zKGxlbihjb3N0X2FycnMpKSArIG5vbl9jb21wYXJlX3dlaWdodAogICAgICAgICAgICBzZWxmLnNldF9lZGdlX2Nvc3RzKAogICAgICAgICAgICAgICAgc2VsZi5jb3N0X2NsYXNzZXMsCiAgICAgICAgICAgICAgICB3ZWlnaHRzLAogICAgICAgICAgICAgICAgYW5nbGVfd2VpZ2h0PTAuMSAgIyBjZmcuQU5HTEVfV0VJR0hUCiAgICAgICAgICAgICkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICBzZWxmLmFkZF9lZGdlcyhlZGdlX3dlaWdodD1lX3cpICAjIFRPRE8KICAgICAgICAgICAgcGF0aCwgcGF0aF9jb3N0cywgY29zdF9zdW0gPSBzZWxmLmdldF9zaG9ydGVzdF9wYXRoKHNvdXJjZSwgZGVzdCkKICAgICAgICAgICAgIyBnZXQgc2hvcnRlc3QgcGF0aAogICAgICAgICAgICBwYXRoLCBwYXRoX2Nvc3RzLCBfID0gc2VsZi5nZXRfc2hvcnRlc3RfcGF0aChzb3VyY2UsIGRlc3QpCjx8ZmltX2VuZHw+"]
["cd1dd6d8ef23b1365433252777d2efe1c667169e-4","cd1dd6d8ef23b1365433252777d2efe1c667169e","PHxmaW1fcHJlZml4fD4KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0aW1lCmZyb20gbnVtYmEgaW1wb3J0IGppdApmcm9tIHBvd2VyX3BsYW5uZXIuZ3JhcGhzLmltcGxpY2l0X2xnIGltcG9ydCBJbXBsaWNpdExHCgoKY2xhc3MgSW1wbGljaXRQYXJldG8oSW1wbGljaXRMRyk6CgogICAgZGVmIGdldF9wYXJldG8oCiAgICAgICAgc2VsZiwgdmFyeSwgc291cmNlLCBkZXN0LCBvdXRfcGF0aD1Ob25lLCBjb21wYXJlPVswLCAxXSwgcGxvdD0xCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICk6CiAgICAgICAgIiIiCiAgICAgICAgICAgIEFyZ3VtZW50czoKICAgICAgICAgICAgICAgIHZhcnk6IGhvdyBtYW55IHdlaWdodHMgdG8gZXhwbG9yZQo8fGZpbV9lbmR8Pg=="]
["9d5fa3cb67d090f54dc8af418ab43cecca2d8bbb-1","9d5fa3cb67d090f54dc8af418ab43cecca2d8bbb","PHxmaW1fcHJlZml4fD4KIyUlCiIiIgogICAgRGF0YSBpbXBvcnRpbmcgYW5kIHNpbXBsIG9ic2VydmF0aW9ucyBhYm91dCBkYXRhCiIiIgppbXBvcnQgcGFuZGFzIGFzIHBkIAppbXBvcnQgbnVtcHkgYXMgbnAKCnRyYWluID0gIHBkLnJlYWRfY3N2KCJ0aXRhbmljL3RyYWluLmNzdiIpCgp0cmFpbi5oZWFkKCkKdHJhaW4uZGVzY3JpYmUoKQoKIyUlCgojIG5hbiBkYXRhIGVsaW1pbmF0aW9uIGRldGVjdGlvbgpjYWJpbl9kYXRhID0gdHJhaW4uQ2FiaW4Kbm90X25hID0gcGQuU2VyaWVzKGNhYmluX2RhdGEuYXJyYXksaW5kZXg9Y2FiaW5fZGF0YS5pc25hKCkpW0ZhbHNlXQoKbm90X25hLmhlYWQoKQoKCiMgJSUKIiIiCiAgICBQcmludGluZyBoaXN0b2dyYW0gZm9yIGFsbCBjb2x1bW5zCiIiIgppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBzZWFib3JuIGFzIHNucwpmcm9tIHBwcmludCBpbXBvcnQgcHByaW50CgpsZXNzID0gW10KbW9yZSA9IFtdCgpmb3IgZWxlIGluIHRyYWluLmNvbHVtbnM6CiAgICBpZiBlbGUgbm90IGluIFsiUGFzc2VuZ2VySWQiLCJOYW1lIl06CiAgICAgICAgdGVtcCA9IHRyYWluW2VsZV0KICAgICAgICBkaXN0ID0gdGVtcC52YWx1ZV9jb3VudHMoKQogICAgICAgIHByaW50KGVsZSxlbmQ9Ij0+XHQiKQogICAgICAgIGlmIGxlbihkaXN0LmtleXMoKSk8MTA6CiAgICAgICAgICAgIHByaW50KCJMZXNzIENhdGVvZ3J5IChTbWFsbGVyIHRoYW4gMTApIikKICAgICAgICAgICAgbGVzcy5hcHBlbmQoZWxlKQogICAgICAgICAgICBwbHQuZmlndXJlKGZpZ3NpemU9KDEwLDYpKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50KCJNYW55IENhdGVnb3J5IChNb3JlIHRoYW4gNjApIikKICAgICAgICAgICAgbW9yZS5hcHBlbmQoZWxlKQogICAgICAgICAgICBwbHQuZmlndXJlKGZpZ3NpemU9KDEwMCw2KSkKICAgICAgICBzbnMuYmFycGxvdCh4PWRpc3Qua2V5cygpLHk9ZGlzdC52YWx1ZXMpCiAgICAgICAgcGx0LnNob3coKQoKIyAlJQoiIiIKIFVudXNlZCBvYnNlcnZhdGlvbiBvZiBkYXRhIHdpY2ggdmFyaWVzIHRvbyBtdWNoCiIiIgpwcmludCh0cmFpbi5sb2NbOixtb3JlXS5kZXNjcmliZSgpKQoKIyAlJQoiIiIKICAgIGNhbGN1bGF0aW5nIHBtZiAKIiIiCgpuID0gbGVuKHRyYWluKQpwbWYgPSB7fQoKZm9yIGVsZSBpbiB0cmFpbi5jb2x1bW5zOgogICAgaWYgZWxlIG5vdCBpbiBbIlBhc3NlbmdlcklkIiwiTmFtZSJdOgogICAgICAgIHRlbXAgPSB0cmFpbltlbGVdCiAgICAgICAgZGlzdCA9IHRlbXAudmFsdWVfY291bnRzKCkKICAgICAgICAjIHBtZltlbGVdID0gbWFwKGxhbWJkYSB4OiB7eC46fSApCiAgICAgICAgcG1mW2VsZV0gPSB7fQogICAgICAgIGZvciBrZXkgaW4gZGlzdC5rZXlzKCk6CiAgICAgICAgICAgIHBtZltlbGVdW2tleV0gPSB7a2V5OnJvdW5kKGRpc3Rba2V5XS9uLDIpfQogICAgICAgICAgICAjIHByaW50KGtleSkKICAgICAgICAgICAgIyBwbWZbZWxlXVtrZXldID0ge2tleTpkaXN0W2tleV0vbn0KCnByaW50KHBtZi5rZXlzKCkpCgojICUlCgp0cmFpbi5GYXJlLnF1YW50aWxlKDAuOSkKIyAlJQoiIiIKIHJhbmRvbSBleHBvbmVudGlhbCBmdW5jdGlvbiAKIiIiCgpmb3IgaSBpbiBbMSwxMCwxMDAsMTAwMCwxMDAwMDAwMDAwMF06CiAgICB4ID0gc29ydGVkKG5wLnJhbmRvbS5leHBvbmVudGlhbChzY2FsZT0yLHNpemU9MTAwKSkKICAgIHkgPSBbZWxlIGZvciBlbGUgaW4gcmFuZ2UobGVuKHkpKV0KICAgIHNucy5saW5lcGxvdCh4PXgseT15KQogICAgcHJpbnQoaSkKICAgIHBsdC5zaG93KCkKIyAlJQoiIiIKbm9ybWFsIGRpc3RyaWJ1dGlvbiBmdW5jdGlvbgoiIiIKCmZyb20gc2NpcHkuc3RhdHMgaW1wb3J0IG5vcm0KdGVzdF9jZGYgPSBwZC5EYXRhRnJhbWUoCiAgICB7CiAgICAgICAgJ3Rlc3QxJyA6IFtub3JtLmNkZih4PWVsZSxsb2M9MSxzY2FsZT0wLjUpIGZvciBlbGUgaW4gbnAubGluc3BhY2UoLTEsNCxudW09MTAwKV0sCiAgICAgICAgJ3Rlc3QyJyA6IFtub3JtLmNkZih4PWVsZSxsb2M9MixzY2FsZT0wLjQpIGZvciBlbGUgaW4gbnAubGluc3BhY2UoLTEsNCxudW09MTAwKV0sCiAgICAgICAgJ3Rlc3QzJyA6IFtub3JtLmNkZih4PWVsZSxsb2M9MyxzY2FsZT0wLjMpIGZvciBlbGUgaW4gbnAubGluc3BhY2UoLTEsNCxudW09MTAwKV0KICAgIH0KKQp0ZXN0X3BkZiA9IHBkLkRhdGFGcmFtZSgKICAgIHsKICAgICAgICAndGVzdDEnIDogW25vcm0ucGRmKHg9ZWxlLGxvYz0wLHNjYWxlPTEpIGZvciBlbGUgaW4gbnAubGluc3BhY2UoLTEsNCxudW09MTAwKV0sCiAgICAgICAgJ3Rlc3QyJyA6IFtub3JtLnBkZih4PWVsZSxsb2M9MixzY2FsZT0wLjQpIGZvciBlbGUgaW4gbnAubGluc3BhY2UoLTEsNCxudW09MTAwKV0sCiAgICAgICAgJ3Rlc3QzJyA6IFtub3JtLnBkZih4PWVsZSxsb2M9MyxzY2FsZT0wLjMpIGZvciBlbGUgaW4gbnAubGluc3BhY2UoLTEsNCxudW09MTAwKV0KICAgIH0KKQpwcmludCgiQ0RGIikKc25zLmxpbmVwbG90KGRhdGE9dGVzdF9jZGYpCnBsdC5zaG93KCkKPHxmaW1faG9sZXw+CiMgJSUKIyUlCmltcG9ydCBtYXRoCmltcG9ydCBzeXMKaW1wb3J0IHBhbmRhcwppbXBvcnQgbnVtcHkgYXMgbnAKCmltcG9ydCB0aGlua3N0YXRzMgppbXBvcnQgdGhpbmtwbG90CmltcG9ydCBicmZzcwoKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgc2VhYm9ybiBhcyBzbnMKIyAlJQoiIiIKRVggMSBvZiAgdGhlIHRoaW5rc3RhdHMgNS4gQ2hhcHRlcgoKVHJ5aW5nIHRvIGZpbmQgcGVyY2VudGFnZSBvZiB0aGUgbWVuIHdobyBhcmUKY2FwYWJsZSBvZiBiZWluZyBtZW1iZXIgb2YgQmx1ZSBNYW4gR3JvdXAKIiIiCgpleF8xX2RhdGEgPSBicmZzcy5SZWFkQnJmc3MoKQoKaGVpZ3RoX21lbiA9IGV4XzFfZGF0YS5odG0zWyhleF8xX2RhdGFbImh0bTMiXTwyMDApICYgKGV4XzFfZGF0YVsiaHRtMyJdPjE2MCkgJiAoZXhfMV9kYXRhWyJzZXgiXT09MSldCmhlaWd0aF9tZW4uaGlzdChiaW5zPTEyKQpzb3J0X2hlaWd0aCA9IHNvcnRlZChoZWlndGhfbWVuKQoKbV9tdSA9IHJvdW5kKGhlaWd0aF9tZW4ubWVhbigpLDMpCm1fc2lnID0gcm91bmQoaGVpZ3RoX21lbi5zdGQoKSwzKQoKbWluX2hlaWdodCA9IHJvdW5kKDUuMTEgKjMwLjUsMykKbWF4X2hlaWdodCA9IHJvdW5kKDYuMSAqIDMwLjUsMykKCiMgJSUKIiIiClBsb3R0aW5nIENERiBvZiB0aGUgTWVuJ3MgaGVpZ3RoCiIiIgpoZWlndGhfbWVuLmRlc2NyaWJlKCkKCnhfdmFsID0gbnAubGluc3BhY2UoLTEsMSxudW09bGVuKGhlaWd0aF9tZW4pKQpoaXN0ID0gaGVpZ3RoX21lbi52YWx1ZV9jb3VudHMoKQoKc25zLmxpbmVwbG90KHg9eF92YWwseT1zb3J0ZWQoaGVpZ3RoX21lbikpCnBsdC5zaG93KCkKIyAlJQpibHVlID0gW2VsZSBmb3IgZWxlIGluIGhlaWd0aF9tZW4gaWYgKGVsZT49bWluX2hlaWdodCkgYW5kIChlbGU8PW1heF9oZWlnaHQpXQpyZXN1bHQgPSBsZW4oYmx1ZSkvbGVuKGhlaWd0aF9tZW4pKjEwMApwcmludCgiUGVyY2VudGFnZSBvZiB0aGUgbWFuIHdobyBhcmUgY2FiYXBsZSBvZiBnZXQgYWNjZXB0ZWQgQmx1ZSBNYW4gR3JvdXA6ICV7fSIuZm9ybWF0KHJlc3VsdCkpCjx8ZmltX3N1ZmZpeHw+CnByaW50KCJQREYiKQpzbnMubGluZXBsb3QoZGF0YT10ZXN0X3BkZikKcGx0LnNob3coKQoKPHxmaW1fZW5kfD4="]
["9d5fa3cb67d090f54dc8af418ab43cecca2d8bbb-2","9d5fa3cb67d090f54dc8af418ab43cecca2d8bbb","PHxmaW1fcHJlZml4fD4KIyUlCiIiIgogICAgRGF0YSBpbXBvcnRpbmcgYW5kIHNpbXBsIG9ic2VydmF0aW9ucyBhYm91dCBkYXRhCiIiIgppbXBvcnQgcGFuZGFzIGFzIHBkIAppbXBvcnQgbnVtcHkgYXMgbnAKCnRyYWluID0gIHBkLnJlYWRfY3N2KCJ0aXRhbmljL3RyYWluLmNzdiIpCgp0cmFpbi5oZWFkKCkKdHJhaW4uZGVzY3JpYmUoKQoKIyUlCgojIG5hbiBkYXRhIGVsaW1pbmF0aW9uIGRldGVjdGlvbgpjYWJpbl9kYXRhID0gdHJhaW4uQ2FiaW4Kbm90X25hID0gcGQuU2VyaWVzKGNhYmluX2RhdGEuYXJyYXksaW5kZXg9Y2FiaW5fZGF0YS5pc25hKCkpW0ZhbHNlXQoKbm90X25hLmhlYWQoKQoKCiMgJSUKIiIiCiAgICBQcmludGluZyBoaXN0b2dyYW0gZm9yIGFsbCBjb2x1bW5zCiIiIgppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBzZWFib3JuIGFzIHNucwpmcm9tIHBwcmludCBpbXBvcnQgcHByaW50CgpsZXNzID0gW10KbW9yZSA9IFtdCgpmb3IgZWxlIGluIHRyYWluLmNvbHVtbnM6CiAgICBpZiBlbGUgbm90IGluIFsiUGFzc2VuZ2VySWQiLCJOYW1lIl06CiAgICAgICAgdGVtcCA9IHRyYWluW2VsZV0KICAgICAgICBkaXN0ID0gdGVtcC52YWx1ZV9jb3VudHMoKQogICAgICAgIHByaW50KGVsZSxlbmQ9Ij0+XHQiKQogICAgICAgIGlmIGxlbihkaXN0LmtleXMoKSk8MTA6CiAgICAgICAgICAgIHByaW50KCJMZXNzIENhdGVvZ3J5IChTbWFsbGVyIHRoYW4gMTApIikKICAgICAgICAgICAgbGVzcy5hcHBlbmQoZWxlKQogICAgICAgICAgICBwbHQuZmlndXJlKGZpZ3NpemU9KDEwLDYpKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50KCJNYW55IENhdGVnb3J5IChNb3JlIHRoYW4gNjApIikKICAgICAgICAgICAgbW9yZS5hcHBlbmQoZWxlKQogICAgICAgICAgICBwbHQuZmlndXJlKGZpZ3NpemU9KDEwMCw2KSkKICAgICAgICBzbnMuYmFycGxvdCh4PWRpc3Qua2V5cygpLHk9ZGlzdC52YWx1ZXMpCiAgICAgICAgcGx0LnNob3coKQoKIyAlJQoiIiIKIFVudXNlZCBvYnNlcnZhdGlvbiBvZiBkYXRhIHdpY2ggdmFyaWVzIHRvbyBtdWNoCiIiIgpwcmludCh0cmFpbi5sb2NbOixtb3JlXS5kZXNjcmliZSgpKQoKIyAlJQoiIiIKICAgIGNhbGN1bGF0aW5nIHBtZiAKIiIiCgpuID0gbGVuKHRyYWluKQpwbWYgPSB7fQoKZm9yIGVsZSBpbiB0cmFpbi5jb2x1bW5zOgogICAgaWYgZWxlIG5vdCBpbiBbIlBhc3NlbmdlcklkIiwiTmFtZSJdOgogICAgICAgIHRlbXAgPSB0cmFpbltlbGVdCiAgICAgICAgZGlzdCA9IHRlbXAudmFsdWVfY291bnRzKCkKICAgICAgICAjIHBtZltlbGVdID0gbWFwKGxhbWJkYSB4OiB7eC46fSApCiAgICAgICAgcG1mW2VsZV0gPSB7fQogICAgICAgIGZvciBrZXkgaW4gZGlzdC5rZXlzKCk6CiAgICAgICAgICAgIHBtZltlbGVdW2tleV0gPSB7a2V5OnJvdW5kKGRpc3Rba2V5XS9uLDIpfQogICAgICAgICAgICAjIHByaW50KGtleSkKICAgICAgICAgICAgIyBwbWZbZWxlXVtrZXldID0ge2tleTpkaXN0W2tleV0vbn0KCnByaW50KHBtZi5rZXlzKCkpCgojICUlCgp0cmFpbi5GYXJlLnF1YW50aWxlKDAuOSkKIyAlJQoiIiIKIHJhbmRvbSBleHBvbmVudGlhbCBmdW5jdGlvbiAKIiIiCgpmb3IgaSBpbiBbMSwxMCwxMDAsMTAwMCwxMDAwMDAwMDAwMF06CiAgICB4ID0gc29ydGVkKG5wLnJhbmRvbS5leHBvbmVudGlhbChzY2FsZT0yLHNpemU9MTAwKSkKICAgIHkgPSBbZWxlIGZvciBlbGUgaW4gcmFuZ2UobGVuKHkpKV0KICAgIHNucy5saW5lcGxvdCh4PXgseT15KQogICAgcHJpbnQoaSkKICAgIHBsdC5zaG93KCkKIyAlJQoiIiIKbm9ybWFsIGRpc3RyaWJ1dGlvbiBmdW5jdGlvbgoiIiIKCmZyb20gc2NpcHkuc3RhdHMgaW1wb3J0IG5vcm0KdGVzdF9jZGYgPSBwZC5EYXRhRnJhbWUoCiAgICB7CiAgICAgICAgJ3Rlc3QxJyA6IFtub3JtLmNkZih4PWVsZSxsb2M9MSxzY2FsZT0wLjUpIGZvciBlbGUgaW4gbnAubGluc3BhY2UoLTEsNCxudW09MTAwKV0sCiAgICAgICAgJ3Rlc3QyJyA6IFtub3JtLmNkZih4PWVsZSxsb2M9MixzY2FsZT0wLjQpIGZvciBlbGUgaW4gbnAubGluc3BhY2UoLTEsNCxudW09MTAwKV0sCiAgICAgICAgJ3Rlc3QzJyA6IFtub3JtLmNkZih4PWVsZSxsb2M9MyxzY2FsZT0wLjMpIGZvciBlbGUgaW4gbnAubGluc3BhY2UoLTEsNCxudW09MTAwKV0KICAgIH0KKQp0ZXN0X3BkZiA9IHBkLkRhdGFGcmFtZSgKICAgIHsKICAgICAgICAndGVzdDEnIDogW25vcm0ucGRmKHg9ZWxlLGxvYz0wLHNjYWxlPTEpIGZvciBlbGUgaW4gbnAubGluc3BhY2UoLTEsNCxudW09MTAwKV0sCiAgICAgICAgJ3Rlc3QyJyA6IFtub3JtLnBkZih4PWVsZSxsb2M9MixzY2FsZT0wLjQpIGZvciBlbGUgaW4gbnAubGluc3BhY2UoLTEsNCxudW09MTAwKV0sCjx8ZmltX2hvbGV8PgogICAgfQopCnByaW50KCJDREYiKQpzbnMubGluZXBsb3QoZGF0YT10ZXN0X2NkZikKcGx0LnNob3coKQpwcmludCgiUERGIikKc25zLmxpbmVwbG90KGRhdGE9dGVzdF9wZGYpCnBsdC5zaG93KCkKCiMgJSUKIyUlCmltcG9ydCBtYXRoCmltcG9ydCBzeXMKaW1wb3J0IHBhbmRhcwppbXBvcnQgbnVtcHkgYXMgbnAKCmltcG9ydCB0aGlua3N0YXRzMgppbXBvcnQgdGhpbmtwbG90CmltcG9ydCBicmZzcwoKaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgc2VhYm9ybiBhcyBzbnMKIyAlJQoiIiIKRVggMSBvZiAgdGhlIHRoaW5rc3RhdHMgNS4gQ2hhcHRlcgoKVHJ5aW5nIHRvIGZpbmQgcGVyY2VudGFnZSBvZiB0aGUgbWVuIHdobyBhcmUKY2FwYWJsZSBvZiBiZWluZyBtZW1iZXIgb2YgQmx1ZSBNYW4gR3JvdXAKIiIiCgpleF8xX2RhdGEgPSBicmZzcy5SZWFkQnJmc3MoKQoKaGVpZ3RoX21lbiA9IGV4XzFfZGF0YS5odG0zWyhleF8xX2RhdGFbImh0bTMiXTwyMDApICYgKGV4XzFfZGF0YVsiaHRtMyJdPjE2MCkgJiAoZXhfMV9kYXRhWyJzZXgiXT09MSldCmhlaWd0aF9tZW4uaGlzdChiaW5zPTEyKQpzb3J0X2hlaWd0aCA9IHNvcnRlZChoZWlndGhfbWVuKQoKbV9tdSA9IHJvdW5kKGhlaWd0aF9tZW4ubWVhbigpLDMpCm1fc2lnID0gcm91bmQoaGVpZ3RoX21lbi5zdGQoKSwzKQoKbWluX2hlaWdodCA9IHJvdW5kKDUuMTEgKjMwLjUsMykKbWF4X2hlaWdodCA9IHJvdW5kKDYuMSAqIDMwLjUsMykKCiMgJSUKIiIiClBsb3R0aW5nIENERiBvZiB0aGUgTWVuJ3MgaGVpZ3RoCiIiIgpoZWlndGhfbWVuLmRlc2NyaWJlKCkKCnhfdmFsID0gbnAubGluc3BhY2UoLTEsMSxudW09bGVuKGhlaWd0aF9tZW4pKQpoaXN0ID0gaGVpZ3RoX21lbi52YWx1ZV9jb3VudHMoKQoKc25zLmxpbmVwbG90KHg9eF92YWwseT1zb3J0ZWQoaGVpZ3RoX21lbikpCnBsdC5zaG93KCkKIyAlJQpibHVlID0gW2VsZSBmb3IgZWxlIGluIGhlaWd0aF9tZW4gaWYgKGVsZT49bWluX2hlaWdodCkgYW5kIChlbGU8PW1heF9oZWlnaHQpXQpyZXN1bHQgPSBsZW4oYmx1ZSkvbGVuKGhlaWd0aF9tZW4pKjEwMApwcmludCgiUGVyY2VudGFnZSBvZiB0aGUgbWFuIHdobyBhcmUgY2FiYXBsZSBvZiBnZXQgYWNjZXB0ZWQgQmx1ZSBNYW4gR3JvdXA6ICV7fSIuZm9ybWF0KHJlc3VsdCkpCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgJ3Rlc3QzJyA6IFtub3JtLnBkZih4PWVsZSxsb2M9MyxzY2FsZT0wLjMpIGZvciBlbGUgaW4gbnAubGluc3BhY2UoLTEsNCxudW09MTAwKV0KPHxmaW1fZW5kfD4="]
["9d5fa3cb67d090f54dc8af418ab43cecca2d8bbb-3","9d5fa3cb67d090f54dc8af418ab43cecca2d8bbb","PHxmaW1fcHJlZml4fD4KIyUlCiIiIgogICAgRGF0YSBpbXBvcnRpbmcgYW5kIHNpbXBsIG9ic2VydmF0aW9ucyBhYm91dCBkYXRhCiIiIgppbXBvcnQgcGFuZGFzIGFzIHBkIAppbXBvcnQgbnVtcHkgYXMgbnAKCnRyYWluID0gIHBkLnJlYWRfY3N2KCJ0aXRhbmljL3RyYWluLmNzdiIpCgp0cmFpbi5oZWFkKCkKdHJhaW4uZGVzY3JpYmUoKQoKIyUlCgojIG5hbiBkYXRhIGVsaW1pbmF0aW9uIGRldGVjdGlvbgpjYWJpbl9kYXRhID0gdHJhaW4uQ2FiaW4Kbm90X25hID0gcGQuU2VyaWVzKGNhYmluX2RhdGEuYXJyYXksaW5kZXg9Y2FiaW5fZGF0YS5pc25hKCkpW0ZhbHNlXQoKbm90X25hLmhlYWQoKQoKCiMgJSUKIiIiCiAgICBQcmludGluZyBoaXN0b2dyYW0gZm9yIGFsbCBjb2x1bW5zCiIiIgppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CmltcG9ydCBzZWFib3JuIGFzIHNucwpmcm9tIHBwcmludCBpbXBvcnQgcHByaW50CgpsZXNzID0gW10KbW9yZSA9IFtdCgpmb3IgZWxlIGluIHRyYWluLmNvbHVtbnM6CiAgICBpZiBlbGUgbm90IGluIFsiUGFzc2VuZ2VySWQiLCJOYW1lIl06CiAgICAgICAgdGVtcCA9IHRyYWluW2VsZV0KICAgICAgICBkaXN0ID0gdGVtcC52YWx1ZV9jb3VudHMoKQogICAgICAgIHByaW50KGVsZSxlbmQ9Ij0+XHQiKQogICAgICAgIGlmIGxlbihkaXN0LmtleXMoKSk8MTA6CiAgICAgICAgICAgIHByaW50KCJMZXNzIENhdGVvZ3J5IChTbWFsbGVyIHRoYW4gMTApIikKICAgICAgICAgICAgbGVzcy5hcHBlbmQoZWxlKQogICAgICAgICAgICBwbHQuZmlndXJlKGZpZ3NpemU9KDEwLDYpKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50KCJNYW55IENhdGVnb3J5IChNb3JlIHRoYW4gNjApIikKICAgICAgICAgICAgbW9yZS5hcHBlbmQoZWxlKQogICAgICAgICAgICBwbHQuZmlndXJlKGZpZ3NpemU9KDEwMCw2KSkKICAgICAgICBzbnMuYmFycGxvdCh4PWRpc3Qua2V5cygpLHk9ZGlzdC52YWx1ZXMpCiAgICAgICAgcGx0LnNob3coKQoKIyAlJQoiIiIKIFVudXNlZCBvYnNlcnZhdGlvbiBvZiBkYXRhIHdpY2ggdmFyaWVzIHRvbyBtdWNoCiIiIgpwcmludCh0cmFpbi5sb2NbOixtb3JlXS5kZXNjcmliZSgpKQoKIyAlJQoiIiIKICAgIGNhbGN1bGF0aW5nIHBtZiAKIiIiCgpuID0gbGVuKHRyYWluKQpwbWYgPSB7fQoKZm9yIGVsZSBpbiB0cmFpbi5jb2x1bW5zOgogICAgaWYgZWxlIG5vdCBpbiBbIlBhc3NlbmdlcklkIiwiTmFtZSJdOgogICAgICAgIHRlbXAgPSB0cmFpbltlbGVdCiAgICAgICAgZGlzdCA9IHRlbXAudmFsdWVfY291bnRzKCkKICAgICAgICAjIHBtZltlbGVdID0gbWFwKGxhbWJkYSB4OiB7eC46fSApCiAgICAgICAgcG1mW2VsZV0gPSB7fQogICAgICAgIGZvciBrZXkgaW4gZGlzdC5rZXlzKCk6CiAgICAgICAgICAgIHBtZltlbGVdW2tleV0gPSB7a2V5OnJvdW5kKGRpc3Rba2V5XS9uLDIpfQogICAgICAgICAgICAjIHByaW50KGtleSkKICAgICAgICAgICAgIyBwbWZbZWxlXVtrZXldID0ge2tleTpkaXN0W2tleV0vbn0KCnByaW50KHBtZi5rZXlzKCkpCgojICUlCgp0cmFpbi5GYXJlLnF1YW50aWxlKDAuOSkKIyAlJQoiIiIKIHJhbmRvbSBleHBvbmVudGlhbCBmdW5jdGlvbiAKIiIiCgpmb3IgaSBpbiBbMSwxMCwxMDAsMTAwMCwxMDAwMDAwMDAwMF06CiAgICB4ID0gc29ydGVkKG5wLnJhbmRvbS5leHBvbmVudGlhbChzY2FsZT0yLHNpemU9MTAwKSkKICAgIHkgPSBbZWxlIGZvciBlbGUgaW4gcmFuZ2UobGVuKHkpKV0KICAgIHNucy5saW5lcGxvdCh4PXgseT15KQogICAgcHJpbnQoaSkKICAgIHBsdC5zaG93KCkKIyAlJQoiIiIKbm9ybWFsIGRpc3RyaWJ1dGlvbiBmdW5jdGlvbgoiIiIKCmZyb20gc2NpcHkuc3RhdHMgaW1wb3J0IG5vcm0KdGVzdF9jZGYgPSBwZC5EYXRhRnJhbWUoCiAgICB7CiAgICAgICAgJ3Rlc3QxJyA6IFtub3JtLmNkZih4PWVsZSxsb2M9MSxzY2FsZT0wLjUpIGZvciBlbGUgaW4gbnAubGluc3BhY2UoLTEsNCxudW09MTAwKV0sCiAgICAgICAgJ3Rlc3QyJyA6IFtub3JtLmNkZih4PWVsZSxsb2M9MixzY2FsZT0wLjQpIGZvciBlbGUgaW4gbnAubGluc3BhY2UoLTEsNCxudW09MTAwKV0sCiAgICAgICAgJ3Rlc3QzJyA6IFtub3JtLmNkZih4PWVsZSxsb2M9MyxzY2FsZT0wLjMpIGZvciBlbGUgaW4gbnAubGluc3BhY2UoLTEsNCxudW09MTAwKV0KICAgIH0KKQp0ZXN0X3BkZiA9IHBkLkRhdGFGcmFtZSgKICAgIHsKICAgICAgICAndGVzdDEnIDogW25vcm0ucGRmKHg9ZWxlLGxvYz0wLHNjYWxlPTEpIGZvciBlbGUgaW4gbnAubGluc3BhY2UoLTEsNCxudW09MTAwKV0sCiAgICAgICAgJ3Rlc3QyJyA6IFtub3JtLnBkZih4PWVsZSxsb2M9MixzY2FsZT0wLjQpIGZvciBlbGUgaW4gbnAubGluc3BhY2UoLTEsNCxudW09MTAwKV0sCiAgICAgICAgJ3Rlc3QzJyA6IFtub3JtLnBkZih4PWVsZSxsb2M9MyxzY2FsZT0wLjMpIGZvciBlbGUgaW4gbnAubGluc3BhY2UoLTEsNCxudW09MTAwKV0KICAgIH0KKQpwcmludCgiQ0RGIikKc25zLmxpbmVwbG90KGRhdGE9dGVzdF9jZGYpCnBsdC5zaG93KCkKcHJpbnQoIlBERiIpCnNucy5saW5lcGxvdChkYXRhPXRlc3RfcGRmKQpwbHQuc2hvdygpCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiMgJSUKIyUlCmltcG9ydCBtYXRoCmltcG9ydCBzeXMKPHxmaW1fZW5kfD4="]
["39a1cfca107e6a2a655192c57b6d13d0deff0a1d-1","39a1cfca107e6a2a655192c57b6d13d0deff0a1d","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwppbXBvcnQgYWJjCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgb3MKaW1wb3J0IHR5cGluZwppbXBvcnQgbG9nZ2luZwppbXBvcnQgc2h1dGlsCmltcG9ydCBqc29uCmltcG9ydCB6aXBmaWxlCmltcG9ydCBmdW5jdG9vbHMKaW1wb3J0IGRhdGFjbGFzc2VzCmltcG9ydCBkYXRldGltZQppbXBvcnQgc3VicHJvY2VzcwppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IG11bHRpcHJvY2Vzc2luZwppbXBvcnQgZ3ppcAoKaW1wb3J0IG91dHB1dF9wcmFua3dlYiBhcyBvdXRwdXRfcHJhbmt3ZWIKCmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKClJlc2lkdWVTY29yZSA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoIlJlc2lkdWVTY29yZSIsIFsiY29kZSIsICJ2YWx1ZSJdKQoKCkBkYXRhY2xhc3Nlcy5kYXRhY2xhc3MKY2xhc3MgQXJndW1lbnRzOgogICAgamF2YV90b29sczogc3RyCiAgICB3b3JraW5nX2RpcmVjdG9yeTogc3RyCiAgICBjb25zZXJ2YXRpb25fZGlyZWN0b3J5OiBzdHIKICAgIHByZWRpY3Rpb25fZGlyZWN0b3J5OiBzdHIKICAgIHN0cnVjdHVyZV9kaXJlY3Rvcnk6IHN0cgogICAgb3V0cHV0X2RpcmVjdG9yeTogc3RyCiAgICBmYWlsZWRfZGlyZWN0b3J5OiBzdHIKICAgIGRhdGFiYXNlX25hbWU6IHN0cgogICAgcGFyYWxsZWw6IGludAogICAgaW5wdXRfdHlwZTogc3RyCiAgICBub3cgPSBkYXRldGltZS5kYXRldGltZS50b2RheSgpLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolUycpCgoKY2xhc3MgQWJzdHJhY3RDb250ZXh0KGFiYy5BQkMpOgoKICAgIGRlZiBwcmVkaWN0aW9uc19kaXIoc2VsZikgLT4gc3RyOgogICAgICAgIC4uLgoKICAgIGRlZiB2aXN1YWxpemF0aW9uX2RpcmVjdG9yeShzZWxmKSAtPiBzdHI6CiAgICAgICAgLi4uCgogICAgZGVmIHN0cnVjdHVyZV9maWxlKHNlbGYsIGNvZGUpIC0+IHN0cjoKICAgICAgICAiIiJQYXRoIHRvIHNvdXJjZSBzdHJ1Y3R1cmUgZmlsZS4iIiIKICAgICAgICAuLi4KPHxmaW1faG9sZXw+CgoKY2xhc3MgUGRiQ29udGV4dChBYnN0cmFjdENvbnRleHQpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzOiBBcmd1bWVudHMpOgogICAgICAgIHNlbGYuX2FyZ3MgPSBhcmdzCgogICAgZGVmIHByZWRpY3Rpb25zX2RpcihzZWxmKToKICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKAogICAgICAgICAgICBzZWxmLl9hcmdzLnByZWRpY3Rpb25fZGlyZWN0b3J5LAogICAgICAgICAgICAicHJlZGljdGlvbnMiKQoKICAgIGRlZiB2aXN1YWxpemF0aW9uX2RpcmVjdG9yeShzZWxmKToKICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKAogICAgICAgICAgICBzZWxmLl9hcmdzLnByZWRpY3Rpb25fZGlyZWN0b3J5LAogICAgICAgICAgICAidmlzdWFsaXphdGlvbnMiKQoKICAgIGRlZiBzdHJ1Y3R1cmVfZmlsZShzZWxmLCBjb2RlKToKICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKAogICAgICAgICAgICBzZWxmLl9hcmdzLnN0cnVjdHVyZV9kaXJlY3RvcnksCiAgICAgICAgICAgIGNvZGVbMTozXSwKICAgICAgICAgICAgZiJwZGJ7Y29kZX0uZW50Lmd6IikKCiAgICBkZWYgc3RydWN0dXJlX2ZpbGVfbmFtZShzZWxmKSAtPiBzdHI6CiAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUucGRiIgoKCmRlZiBfcmVhZF9hcmd1bWVudHMoKSAtPiB0eXBpbmcuRGljdFtzdHIsIHN0cl06CiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLWNvbnNlcnZhdGlvbiIsIHJlcXVpcmVkPVRydWUsCiAgICAgICAgaGVscD0iRGlyZWN0b3J5IHdpdGggY29uc2VydmF0aW9ucyBpbiBmb3JtYXQgJ3BkYntjb2RlfV97Y2hhaW59LmhvbScuIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tcHJlZGljdGlvbiIsIHJlcXVpcmVkPVRydWUsCiAgICAgICAgaGVscD0iRGlyZWN0b3J5IHdpdGggcHJlZGljdGlvbnMuIENvbnRlbnQgZ2l2ZW4gYnkgaW5wdXQtdHlwZS4iKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1zdHJ1Y3R1cmUiLCByZXF1aXJlZD1UcnVlLAogICAgICAgIGhlbHA9IkRpcmVjdG9yeSB3aXRoIHN0cnVjdHVyZXMuIENvbnRlbnQgZ2l2ZW4gYnkgaW5wdXQtdHlwZS4iKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1vdXRwdXQiLCByZXF1aXJlZD1UcnVlLAogICAgICAgIGhlbHA9Ik91dHB1dCBmb2xkZXIgd2l0aCBwcmVkaWN0aW9ucy4gRS5nLiAvZGF0YWJhc2UvdjAxIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tZGF0YWJhc2UiLCByZXF1aXJlZD1UcnVlLAogICAgICAgIGhlbHA9Ik5hbWUgb2YgdGFyZ2V0IHByYW5rd2ViIGRhdGFiYXNlLiBFLmcuIHYxIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tamF2YS10b29scyIsIHJlcXVpcmVkPVRydWUsCiAgICAgICAgaGVscD0iUGF0aCB0byBqYXZhLXRvb2wgZXhlY3V0YWJsZSBmcm9tIHByYW5rd2ViIHByb2plY3QuIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0td29ya2luZyIsIHJlcXVpcmVkPVRydWUsCiAgICAgICAgaGVscD0iUGF0aCB0byB3b3JraW5nIGRpcmVjdG9yeS4iKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1mYWlsZWQiLCByZXF1aXJlZD1UcnVlLAogICAgICAgIGhlbHA9IlBhdGggdG8gZGlyZWN0b3J5IHdoZXJlIGZhaWxlZCBpbXBvcnRzIHNob3VsZCBiZSBtb3ZlZC4iKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS10aHJlYWQiLCBkZWZhdWx0PTEsCiAgICAgICAgaGVscD0iTnVtYmVyIG9mIHRocmVhZHMgdG8gdXNlLiIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLWlucHV0LXR5cGUiLCBkZWZhdWx0PSJwZGIiLAogICAgICAgIGhlbHA9IidwZGInLCAnYWxwaGFmb2xkJyIpCiAgICByZXR1cm4gdmFycyhwYXJzZXIucGFyc2VfYXJncygpKQoKCmRlZiBtYWluKGFyZ3VtZW50cyk6CiAgICBfaW5pdF9sb2dnaW5nKCkKCiAgICBpbXBvcnRfcHJlZGljdGlvbnMoQXJndW1lbnRzKAogICAgICAgIGFyZ3VtZW50c1siamF2YV90b29scyJdLAogICAgICAgIGFyZ3VtZW50c1sid29ya2luZyJdLAogICAgICAgIGFyZ3VtZW50c1siY29uc2VydmF0aW9uIl0sCiAgICAgICAgYXJndW1lbnRzWyJwcmVkaWN0aW9uIl0sCiAgICAgICAgYXJndW1lbnRzWyJzdHJ1Y3R1cmUiXSwKICAgICAgICBhcmd1bWVudHNbIm91dHB1dCJdLAogICAgICAgIGFyZ3VtZW50c1siZmFpbGVkIl0sCiAgICAgICAgYXJndW1lbnRzWyJkYXRhYmFzZSJdLAogICAgICAgIG1pbihhcmd1bWVudHNbInRocmVhZCJdLCAxKSwKICAgICAgICBhcmd1bWVudHNbImlucHV0X3R5cGUiXQogICAgKSkKCgpkZWYgX2luaXRfbG9nZ2luZygpOgogICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoCiAgICAgICAgIiUoYXNjdGltZSlzICUobmFtZSlzIFslKGxldmVsbmFtZSlzXSA6ICUobWVzc2FnZSlzIiwKICAgICAgICBkYXRlZm10PSIlWS0lbS0lZCAlSDolTTolUyIpCgogICAgaGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCiAgICBoYW5kbGVyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCiAgICBoYW5kbGVyLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCgogICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKCgpkZWYgaW1wb3J0X3ByZWRpY3Rpb25zKGFyZ3M6IEFyZ3VtZW50cyk6CiAgICBvcy5tYWtlZGlycyhhcmdzLm91dHB1dF9kaXJlY3RvcnksIGV4aXN0X29rPVRydWUpCiAgICBvcy5tYWtlZGlycyhhcmdzLmZhaWxlZF9kaXJlY3RvcnksIGV4aXN0X29rPVRydWUpCiAgICAjCiAgICBsb2dnZXIuaW5mbygiQ29sbGVjdGluZyBjb2RlcyBmb3IgaW1wb3J0IC4uLiIpCiAgICBjb2Rlc190b19pbXBvcnQgPSBjb2xsZWN0X2NvZGVzX2Zvcl9pbXBvcnQoYXJncykKICAgIGxvZ2dlci5pbmZvKGYiQ29sbGVjdGVkIHtsZW4oY29kZXNfdG9faW1wb3J0KX0gY29kZXMgZm9yIGltcG9ydCIpCiAgICBsb2dnZXIuaW5mbygiUHJlcGFyaW5nIGRhdGEgdG8gd29ya2luZyBkaXJlY3RvcnkgLi4uIikKICAgIGV4ZWN1dGVfbWFwX3dpdGhfYXJncygKICAgICAgICBhcmdzLCBjb2Rlc190b19pbXBvcnQsIGltcG9ydF9kYXRhX2ludG9fd29ya2luZ19kaXJlY3RvcnkpCiAgICBsb2dnZXIuaW5mbygiUnVubmluZyBqYXZhLXRvb2xzIC4uLiIpCiAgICBleGVjdXRlX2phdmFfdG9vbHMoYXJncywgY29kZXNfdG9faW1wb3J0KQogICAgbG9nZ2VyLmluZm8oIlByb2Nlc3NpbmcgYW5kIGltcG9ydGluZyB0byBvdXRwdXQgZGlyZWN0b3J5ICAuLi4iKQogICAgZXhlY3V0ZV9tYXBfd2l0aF9hcmdzKAogICAgICAgIGFyZ3MsIGNvZGVzX3RvX2ltcG9ydCwgaW1wb3J0X2RhdGFfdG9fdGFyZ2V0X2RpcmVjdG9yeSkKICAgIGxvZ2dlci5pbmZvKCJGaW5pc2hlZCIpCgoKZGVmIGNvbGxlY3RfY29kZXNfZm9yX2ltcG9ydChhcmdzOiBBcmd1bWVudHMpOgogICAgIiIiUmV0dXJuIFBEQiBjb2RlcyBhdmFpbGFibGUgZm9yIGltcG9ydC4iIiIKICAgIHJldHVybiBbCiAgICAgICAgbmFtZVszOjddCiAgICAgICAgZm9yIG5hbWUgaW4gb3MubGlzdGRpcih3aXRoX2NvbnRleHQoYXJncykucHJlZGljdGlvbnNfZGlyKCkpCiAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgiX3ByZWRpY3Rpb25zLmNzdiIpCiAgICBdCgoKZGVmIHdpdGhfY29udGV4dChhcmdzOiBBcmd1bWVudHMpIC0+IEFic3RyYWN0Q29udGV4dDoKICAgIGlmIGFyZ3MuaW5wdXRfdHlwZSA9PSAicGRiIjoKICAgICAgICByZXR1cm4gUGRiQ29udGV4dChhcmdzKQogICAgZWxzZToKICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlVua25vd24gaW5wdXQgdHlwZSIpCgoKZGVmIGV4ZWN1dGVfbWFwX3dpdGhfYXJncyhhcmdzOiBBcmd1bWVudHMsIGNvZGVzOiB0eXBpbmcuTGlzdFtzdHJdLCBjYWxsYmFjayk6CiAgICAiIiJFeGVjdXRlIGNhbGxiYWNrIGZvciB3aXRoIGFyZ3MgYW5kIG9uZSBjb2RlLiIiIgogICAgcmVzdWx0ID0gW10KICAgIGlmIGFyZ3MucGFyYWxsZWwgPiAxOgogICAgICAgIGNwdV9jdXJlc190b191c2UgPSBhcmdzLnBhcmFsbGVsCiAgICAgICAgbG9nZ2VyLmluZm8oZiJTdGFydGluZyBjb21wdXRhdGlvbnMgb24ge2NwdV9jdXJlc190b191c2V9IGNvcmVzIikKICAgICAgICB3aXRoIG11bHRpcHJvY2Vzc2luZy5Qb29sKGNwdV9jdXJlc190b191c2UpIGFzIHBvb2w6CiAgICAgICAgICAgIGNhbGxfYXJndW1lbnRzID0gWyhhcmdzLCBjb2RlKSBmb3IgY29kZSBpbiBjb2Rlc10KICAgICAgICAgICAgcmVzdWx0ID0gcG9vbC5zdGFybWFwKGNhbGxiYWNrLCBjYWxsX2FyZ3VtZW50cykKICAgIGVsc2U6CiAgICAgICAgbG9nZ2VyLmluZm8oZiJTdGFydGluZyB1c2luZyBzaW5nbGUgY29yZXMiKQogICAgICAgIGZvciBjb2RlIGluIGNvZGVzOgogICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNhbGxiYWNrKGFyZ3MsIGNvZGUpKQogICAgbG9nZ2VyLmluZm8oIkFsbCBleGVjdXRlZCIpCiAgICByZXR1cm4gcmVzdWx0CgoKZGVmIGltcG9ydF9kYXRhX2ludG9fd29ya2luZ19kaXJlY3RvcnkoYXJnczogQXJndW1lbnRzLCBjb2RlOiBzdHIpOgogICAgIiIiQ29sbGVjdCBmaWxlcyB0byB0aGUgd29ya2luZyBjb2RlIGRpcmVjdG9yeS4iIiIKICAgIHJvb3RfZGlyID0gb3MucGF0aC5qb2luKGFyZ3Mud29ya2luZ19kaXJlY3RvcnksIGNvZGUudXBwZXIoKSkKICAgIG9zLm1ha2VkaXJzKHJvb3RfZGlyLCBleGlzdF9vaz1UcnVlKQogICAgcHVibGljX2RpciA9IG9zLnBhdGguam9pbihyb290X2RpciwgInB1YmxpYyIpCiAgICBvcy5tYWtlZGlycyhwdWJsaWNfZGlyLCBleGlzdF9vaz1UcnVlKQogICAgY3R4ID0gd2l0aF9jb250ZXh0KGFyZ3MpCgogICAgY29uc2VydmF0aW9uID0gZmluZF9jb25zZXJ2YXRpb24oYXJncy5jb25zZXJ2YXRpb25fZGlyZWN0b3J5LCBjb2RlKQoKICAgIHAycmFua19wcmVkaWN0aW9uc19maWxlID0gb3MucGF0aC5qb2luKAogICAgICAgIGN0eC5wcmVkaWN0aW9uc19kaXIoKSwKICAgICAgICBmInBkYntjb2RlfS5lbnQuZ3pfcHJlZGljdGlvbnMuY3N2IikKCiAgICAjIHB1YmxpYy9zdHJ1Y3R1cmUuKi5negogICAgc2h1dGlsLmNvcHkoCiAgICAgICAgY3R4LnN0cnVjdHVyZV9maWxlKGNvZGUpLAogICAgICAgIG9zLnBhdGguam9pbihwdWJsaWNfZGlyLCBjdHguc3RydWN0dXJlX2ZpbGVfbmFtZSgpICsgIi5neiIpCiAgICApCgogICAgIyBzdHJ1Y3R1cmUuKi5neiAtIGZvciBqYXZhLXRvb2xzCiAgICBndW56aXAoCiAgICAgICAgY3R4LnN0cnVjdHVyZV9maWxlKGNvZGUpLAogICAgICAgIG9zLnBhdGguam9pbihyb290X2RpciwgY3R4LnN0cnVjdHVyZV9maWxlX25hbWUoKSkKICAgICkKCiAgICAjIHByZWRpY3Rpb24uemlwCiAgICB6aXBfZGlyZWN0b3J5KAogICAgICAgIG9zLnBhdGguam9pbihwdWJsaWNfZGlyLCAicHJhbmt3ZWIuemlwIiksCiAgICAgICAgewogICAgICAgICAgICAic3RydWN0dXJlLnBkYl9wcmVkaWN0aW9ucy5jc3YiOgogICAgICAgICAgICAgICAgcDJyYW5rX3ByZWRpY3Rpb25zX2ZpbGUsCiAgICAgICAgICAgICJzdHJ1Y3R1cmUucGRiX3Jlc2lkdWVzLmNzdiI6IG9zLnBhdGguam9pbigKICAgICAgICAgICAgICAgIGN0eC5wcmVkaWN0aW9uc19kaXIoKSwKICAgICAgICAgICAgICAgIGYicGRie2NvZGV9LmVudC5nel9yZXNpZHVlcy5jc3YiKSwKICAgICAgICAgICAgInZpc3VhbGl6YXRpb25zL3N0cnVjdHVyZS5wZGIucG1sIjogb3MucGF0aC5qb2luKAogICAgICAgICAgICAgICAgY3R4LnZpc3VhbGl6YXRpb25fZGlyZWN0b3J5KCksCiAgICAgICAgICAgICAgICBmInBkYntjb2RlfS5lbnQuZ3oucG1sIiksCiAgICAgICAgICAgICJ2aXN1YWxpemF0aW9ucy9kYXRhL3N0cnVjdHVyZS5wZGIiOiBvcy5wYXRoLmpvaW4oCiAgICAgICAgICAgICAgICBjdHgudmlzdWFsaXphdGlvbl9kaXJlY3RvcnkoKSwgImRhdGEiLAogICAgICAgICAgICAgICAgZiJwZGJ7Y29kZX0uZW50Lmd6IiksCiAgICAgICAgICAgICJ2aXN1YWxpemF0aW9ucy9kYXRhL3N0cnVjdHVyZS5wZGJfcG9pbnRzLnBkYi5neiI6IG9zLnBhdGguam9pbigKICAgICAgICAgICAgICAgIGN0eC52aXN1YWxpemF0aW9uX2RpcmVjdG9yeSgpLCAiZGF0YSIsCiAgICAgICAgICAgICAgICBmInBkYntjb2RlfS5lbnQuZ3pfcG9pbnRzLnBkYi5neiIpLAogICAgICAgICAgICAqKnsKICAgICAgICAgICAgICAgIGYiY29uc2VydmF0aW9uL2NvbnNlcnZhdGlvbi17Y2hhaW59IjogcGF0aAogICAgICAgICAgICAgICAgZm9yIGNoYWluLCBwYXRoIGluIGNvbnNlcnZhdGlvbi5pdGVtcygpCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICApCgogICAgIyBsb2cKICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocm9vdF9kaXIsICJsb2ciKSwgInciLCBlbmNvZGluZz0idXRmLTgiKSBhcyBzdHJlYW06CiAgICAgICAgc3RyZWFtLndyaXRlKCJJbXBvcnRlZCB1c2luZyAnaW1wb3J0X3AycmFua19wcmVkaWN0aW9ucy5weScuIikKCiAgICAjIGluZm8uanNvbgogICAgaW5mb19maWxlID0gb3MucGF0aC5qb2luKHJvb3RfZGlyLCAiaW5mby5qc29uIikKICAgIHdpdGggb3BlbihpbmZvX2ZpbGUsICJ3IiwgZW5jb2Rpbmc9InV0Zi04IikgYXMgc3RyZWFtOgogICAgICAgIGpzb24uZHVtcCh7CiAgICAgICAgICAgICJpZCI6IGNvZGUsCiAgICAgICAgICAgICJkYXRhYmFzZSI6IGFyZ3MuZGF0YWJhc2VfbmFtZSwKICAgICAgICAgICAgImNyZWF0ZWQiOiBhcmdzLm5vdywKICAgICAgICAgICAgImxhc3RDaGFuZ2UiOiBhcmdzLm5vdywKICAgICAgICAgICAgInN0YXR1cyI6ICJzdWNjZXNzZnVsIiwKICAgICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgICAgICAgInByZWRpY3Rpb25OYW1lIjogY29kZS51cHBlcigpLAogICAgICAgICAgICAgICAgInN0cnVjdHVyZU5hbWUiOiBjdHguc3RydWN0dXJlX2ZpbGVfbmFtZSgpCiAgICAgICAgICAgIH0KICAgICAgICB9LCBzdHJlYW0pCgoKZGVmIGZpbmRfY29uc2VydmF0aW9uKAogICAgICAgIGNvbnNlcnZhdGlvbl9kaXJlY3Rvcnk6IHN0ciwgY29kZTogc3RyKSAtPiB0eXBpbmcuRGljdFtzdHIsIHN0cl06CiAgICAiIiJEaWN0aW9uYXJ5IHdpdGggY2hhaW4gYW5kIGZpbGUgcGF0aC4iIiIKCiAgICBkZWYgc2VsZWN0X2NoYWluKG5hbWU6IHN0cikgLT4gc3RyOgogICAgICAgIHJldHVybiBuYW1lWzg6bmFtZS5yaW5kZXgoIi4iKV0KCiAgICByZXR1cm4gewogICAgICAgIHNlbGVjdF9jaGFpbihmaWxlX25hbWUpOgogICAgICAgICAgICBvcy5wYXRoLmpvaW4oY29uc2VydmF0aW9uX2RpcmVjdG9yeSwgZmlsZV9uYW1lKQogICAgICAgIGZvciBmaWxlX25hbWUgaW4gbGlzdF9kaXJlY3RvcnkoY29uc2VydmF0aW9uX2RpcmVjdG9yeSkKICAgICAgICBpZiBjb2RlIGluIGZpbGVfbmFtZQogICAgfQoKCkBmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemU9MikKZGVmIGxpc3RfZGlyZWN0b3J5KHBhdGg6IHN0cik6CiAgICByZXR1cm4gb3MubGlzdGRpcihwYXRoKQoKCmRlZiBndW56aXAoc291cmNlOiBzdHIsIHRhcmdldDogc3RyKToKICAgIHdpdGggZ3ppcC5vcGVuKHNvdXJjZSwgInJiIikgYXMgaW5wdXRfc3RyZWFtOgogICAgICAgIHdpdGggb3Blbih0YXJnZXQsICJ3YiIpIGFzIG91dHB1dF9zdHJlYW06CiAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZW9iaihpbnB1dF9zdHJlYW0sIG91dHB1dF9zdHJlYW0pCgoKZGVmIHppcF9kaXJlY3Rvcnkob3V0cHV0X3BhdGg6IHN0ciwgZW50cmllczogdHlwaW5nLkRpY3Rbc3RyLCBzdHJdKToKICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKG91dHB1dF9wYXRoLCAidyIsIHppcGZpbGUuWklQX0RFRkxBVEVEKSBhcyBzdHJlYW06CiAgICAgICAgZm9yIHBhdGhfaW5femlwLCBwYXRoIGluIGVudHJpZXMuaXRlbXMoKToKICAgICAgICAgICAgc3RyZWFtLndyaXRlKHBhdGgsIHBhdGhfaW5femlwKQoKCmRlZiBleGVjdXRlX2phdmFfdG9vbHMoYXJnczogQXJndW1lbnRzLCBjb2Rlc190b19pbXBvcnQ6IHR5cGluZy5MaXN0W3N0cl0pOgogICAgY3R4ID0gd2l0aF9jb250ZXh0KGFyZ3MpCgogICAgZGVmIGphdmFfdG9vbHNfaW5wdXQoY29kZTogc3RyKSAtPiBzdHI6CiAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbigKICAgICAgICAgICAgYXJncy53b3JraW5nX2RpcmVjdG9yeSwKICAgICAgICAgICAgY29kZS51cHBlcigpLAogICAgICAgICAgICBjdHguc3RydWN0dXJlX2ZpbGVfbmFtZSgpKQoKICAgIGRlZiBqYXZhX3Rvb2xzX291dHB1dChjb2RlOiBzdHIpIC0+IHN0cjoKICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKAogICAgICAgICAgICBhcmdzLndvcmtpbmdfZGlyZWN0b3J5LAogICAgICAgICAgICBjb2RlLnVwcGVyKCksCiAgICAgICAgICAgICJqYXZhLXRvb2xzLmpzb24iKQoKICAgIGNvbW1hbmRzID0gWwogICAgICAgIGYic3RydWN0dXJlLWluZm8iCiAgICAgICAgZiIgLWkge2phdmFfdG9vbHNfaW5wdXQoY29kZSl9IgogICAgICAgIGYiIC1vIHtqYXZhX3Rvb2xzX291dHB1dChjb2RlKX1cbiIKICAgICAgICBmb3IgY29kZSBpbiBjb2Rlc190b19pbXBvcnQKICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoamF2YV90b29sc19vdXRwdXQoY29kZSkpCiAgICBdCgogICAgY29tbWFuZF9maWxlID0gb3MucGF0aC5qb2luKGFyZ3Mud29ya2luZ19kaXJlY3RvcnksICJjb21tYW5kcy50eHQiKQogICAgd2l0aCBvcGVuKGNvbW1hbmRfZmlsZSwgInciKSBhcyBzdHJlYW06CiAgICAgICAgc3RyZWFtLndyaXRlbGluZXMoY29tbWFuZHMpCiAgICBjb21tYW5kID0gZiJ7YXJncy5qYXZhX3Rvb2xzfSBleGVjIC0taW5wdXQge2NvbW1hbmRfZmlsZX0iCiAgICByZXN1bHQgPSBzdWJwcm9jZXNzLnJ1bihjb21tYW5kLCBzaGVsbD1UcnVlLCBlbnY9b3MuZW52aXJvbi5jb3B5KCkpCiAgICByZXN1bHQuY2hlY2tfcmV0dXJuY29kZSgpCgoKZGVmIGltcG9ydF9kYXRhX3RvX3RhcmdldF9kaXJlY3RvcnkoYXJnczogQXJndW1lbnRzLCBjb2RlOiBzdHIpIC0+IE5vbmU6CiAgICAiIiJQcm9jZXNzIGphdmEtdG9vbHMgb3V0cHV0IGFuZCBtb3ZlIHRvIHRhcmdldCBkaXJlY3RvcnkuIiIiCiAgICBjdHggPSB3aXRoX2NvbnRleHQoYXJncykKICAgIHJvb3RfZGlyID0gb3MucGF0aC5qb2luKGFyZ3Mud29ya2luZ19kaXJlY3RvcnksIGNvZGUudXBwZXIoKSkKICAgIGphdmFfdG9vbHNfZmlsZSA9IG9zLnBhdGguam9pbihyb290X2RpciwgImphdmEtdG9vbHMuanNvbiIpCgogICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGphdmFfdG9vbHNfZmlsZSk6CiAgICAgICAgbG9nZ2VyLmVycm9yKGYiTWlzc2luZyBzdHJ1Y3R1cmUgaW5mb3JtYXRpb24gZmlsZToge2phdmFfdG9vbHNfZmlsZX0iKQogICAgICAgIHRhcmdldF9wYXRoID0gb3MucGF0aC5qb2luKGFyZ3MuZmFpbGVkX2RpcmVjdG9yeSwgY29kZSkKICAgICAgICBzaHV0aWwubW92ZShyb290X2RpciwgdGFyZ2V0X3BhdGgpCiAgICAgICAgcmV0dXJuCgogICAgcHVibGljX2RpciA9IG9zLnBhdGguam9pbihyb290X2RpciwgInB1YmxpYyIpCiAgICBjb25zZXJ2YXRpb24gPSBmaW5kX2NvbnNlcnZhdGlvbihhcmdzLmNvbnNlcnZhdGlvbl9kaXJlY3RvcnksIGNvZGUpCiAgICBwMnJhbmtfcHJlZGljdGlvbnNfZmlsZSA9IG9zLnBhdGguam9pbigKICAgICAgICBjdHgucHJlZGljdGlvbnNfZGlyKCksCiAgICAgICAgZiJwZGJ7Y29kZX0uZW50Lmd6X3ByZWRpY3Rpb25zLmNzdiIpCgogICAgcHJlZGljdGlvbl9maWxlID0gb3MucGF0aC5qb2luKHB1YmxpY19kaXIsICJwcmVkaWN0aW9uLmpzb24iKQogICAgdHJ5OgogICAgICAgIGNvbnRlbnQgPSB7CiAgICAgICAgICAgICJzdHJ1Y3R1cmUiOiBvdXRwdXRfcHJhbmt3ZWIubG9hZF9zdHJ1Y3R1cmVfZmlsZSgKICAgICAgICAgICAgICAgIGphdmFfdG9vbHNfZmlsZSwgY29uc2VydmF0aW9uKSwKICAgICAgICAgICAgInBvY2tldHMiOiBvdXRwdXRfcHJhbmt3ZWIubG9hZF9wb2NrZXRzKAogICAgICAgICAgICAgICAgcDJyYW5rX3ByZWRpY3Rpb25zX2ZpbGUpLAogICAgICAgICAgICAibWV0YWRhdGEiOiB7fSwKICAgICAgICB9CiAgICBleGNlcHQgUnVudGltZUVycm9yOgogICAgICAgIG9zLnJlbmFtZShyb290X2Rpciwgb3MucGF0aC5qb2luKAogICAgICAgICAgICBhcmdzLmZhaWxlZF9kaXJlY3RvcnksCiAgICAgICAgICAgIGNvZGUudXBwZXIoKQogICAgICAgICkpCiAgICAgICAgcmV0dXJuCgogICAgd2l0aCBvcGVuKHByZWRpY3Rpb25fZmlsZSwgInciLCBlbmNvZGluZz0idXRmLTgiKSBhcyBzdHJlYW06CiAgICAgICAganNvbi5kdW1wKGNvbnRlbnQsIHN0cmVhbSwgaW5kZW50PTIpCgogICAgIyBSZW1vdmUgdGVtcG9yYXJ5IGZpbGVzLgogICAgb3MucmVtb3ZlKGphdmFfdG9vbHNfZmlsZSkKICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4oCiAgICAgICAgYXJncy53b3JraW5nX2RpcmVjdG9yeSwKICAgICAgICBjb2RlLnVwcGVyKCksCiAgICAgICAgY3R4LnN0cnVjdHVyZV9maWxlX25hbWUoKSkpCiAgICAjIE1vdmUgdG8gdGFyZ2V0CiAgICBvcy5tYWtlZGlycygKICAgICAgICBvcy5wYXRoLmpvaW4oYXJncy5vdXRwdXRfZGlyZWN0b3J5LCBjb2RlLnVwcGVyKClbMTozXSksCiAgICAgICAgZXhpc3Rfb2s9VHJ1ZSkKICAgIG9zLnJlbmFtZSgKICAgICAgICByb290X2RpciwKICAgICAgICBvcy5wYXRoLmpvaW4oCiAgICAgICAgICAgIGFyZ3Mub3V0cHV0X2RpcmVjdG9yeSwKICAgICAgICAgICAgY29kZS51cHBlcigpWzE6M10sCiAgICAgICAgICAgIGNvZGUudXBwZXIoKQogICAgICAgICkpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW4oX3JlYWRfYXJndW1lbnRzKCkpCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIHN0cnVjdHVyZV9maWxlX25hbWUoc2VsZikgLT4gc3RyOgogICAgICAgICIiIk5hbWUgb2YgYSBzdHJ1Y3R1cmUgaW4gdGFyZ2V0IGRpcmVjdG9yeS4iIiIKICAgICAgICAuLi4KPHxmaW1fZW5kfD4="]
["39a1cfca107e6a2a655192c57b6d13d0deff0a1d-2","39a1cfca107e6a2a655192c57b6d13d0deff0a1d","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwppbXBvcnQgYWJjCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgb3MKaW1wb3J0IHR5cGluZwppbXBvcnQgbG9nZ2luZwppbXBvcnQgc2h1dGlsCmltcG9ydCBqc29uCmltcG9ydCB6aXBmaWxlCmltcG9ydCBmdW5jdG9vbHMKaW1wb3J0IGRhdGFjbGFzc2VzCmltcG9ydCBkYXRldGltZQppbXBvcnQgc3VicHJvY2VzcwppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IG11bHRpcHJvY2Vzc2luZwppbXBvcnQgZ3ppcAoKaW1wb3J0IG91dHB1dF9wcmFua3dlYiBhcyBvdXRwdXRfcHJhbmt3ZWIKCmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKClJlc2lkdWVTY29yZSA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoIlJlc2lkdWVTY29yZSIsIFsiY29kZSIsICJ2YWx1ZSJdKQoKCkBkYXRhY2xhc3Nlcy5kYXRhY2xhc3MKY2xhc3MgQXJndW1lbnRzOgogICAgamF2YV90b29sczogc3RyCiAgICB3b3JraW5nX2RpcmVjdG9yeTogc3RyCiAgICBjb25zZXJ2YXRpb25fZGlyZWN0b3J5OiBzdHIKICAgIHByZWRpY3Rpb25fZGlyZWN0b3J5OiBzdHIKICAgIHN0cnVjdHVyZV9kaXJlY3Rvcnk6IHN0cgogICAgb3V0cHV0X2RpcmVjdG9yeTogc3RyCiAgICBmYWlsZWRfZGlyZWN0b3J5OiBzdHIKICAgIGRhdGFiYXNlX25hbWU6IHN0cgogICAgcGFyYWxsZWw6IGludAogICAgaW5wdXRfdHlwZTogc3RyCiAgICBub3cgPSBkYXRldGltZS5kYXRldGltZS50b2RheSgpLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolUycpCgoKY2xhc3MgQWJzdHJhY3RDb250ZXh0KGFiYy5BQkMpOgoKICAgIGRlZiBwcmVkaWN0aW9uc19kaXIoc2VsZikgLT4gc3RyOgogICAgICAgIC4uLgoKICAgIGRlZiB2aXN1YWxpemF0aW9uX2RpcmVjdG9yeShzZWxmKSAtPiBzdHI6CiAgICAgICAgLi4uCgogICAgZGVmIHN0cnVjdHVyZV9maWxlKHNlbGYsIGNvZGUpIC0+IHN0cjoKICAgICAgICAiIiJQYXRoIHRvIHNvdXJjZSBzdHJ1Y3R1cmUgZmlsZS4iIiIKICAgICAgICAuLi4KCiAgICBkZWYgc3RydWN0dXJlX2ZpbGVfbmFtZShzZWxmKSAtPiBzdHI6CiAgICAgICAgIiIiTmFtZSBvZiBhIHN0cnVjdHVyZSBpbiB0YXJnZXQgZGlyZWN0b3J5LiIiIgogICAgICAgIC4uLgoKCmNsYXNzIFBkYkNvbnRleHQoQWJzdHJhY3RDb250ZXh0KToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgYXJnczogQXJndW1lbnRzKToKICAgICAgICBzZWxmLl9hcmdzID0gYXJncwoKICAgIGRlZiBwcmVkaWN0aW9uc19kaXIoc2VsZik6CiAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbigKICAgICAgICAgICAgc2VsZi5fYXJncy5wcmVkaWN0aW9uX2RpcmVjdG9yeSwKICAgICAgICAgICAgInByZWRpY3Rpb25zIikKCiAgICBkZWYgdmlzdWFsaXphdGlvbl9kaXJlY3Rvcnkoc2VsZik6CiAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbigKICAgICAgICAgICAgc2VsZi5fYXJncy5wcmVkaWN0aW9uX2RpcmVjdG9yeSwKICAgICAgICAgICAgInZpc3VhbGl6YXRpb25zIikKCiAgICBkZWYgc3RydWN0dXJlX2ZpbGUoc2VsZiwgY29kZSk6CiAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbigKICAgICAgICAgICAgc2VsZi5fYXJncy5zdHJ1Y3R1cmVfZGlyZWN0b3J5LAogICAgICAgICAgICBjb2RlWzE6M10sCiAgICAgICAgICAgIGYicGRie2NvZGV9LmVudC5neiIpCgogICAgZGVmIHN0cnVjdHVyZV9maWxlX25hbWUoc2VsZikgLT4gc3RyOgogICAgICAgIHJldHVybiAic3RydWN0dXJlLnBkYiIKCgpkZWYgX3JlYWRfYXJndW1lbnRzKCkgLT4gdHlwaW5nLkRpY3Rbc3RyLCBzdHJdOgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1jb25zZXJ2YXRpb24iLCByZXF1aXJlZD1UcnVlLAogICAgICAgIGhlbHA9IkRpcmVjdG9yeSB3aXRoIGNvbnNlcnZhdGlvbnMgaW4gZm9ybWF0ICdwZGJ7Y29kZX1fe2NoYWlufS5ob20nLiIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLXByZWRpY3Rpb24iLCByZXF1aXJlZD1UcnVlLAogICAgICAgIGhlbHA9IkRpcmVjdG9yeSB3aXRoIHByZWRpY3Rpb25zLiBDb250ZW50IGdpdmVuIGJ5IGlucHV0LXR5cGUuIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tc3RydWN0dXJlIiwgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgICBoZWxwPSJEaXJlY3Rvcnkgd2l0aCBzdHJ1Y3R1cmVzLiBDb250ZW50IGdpdmVuIGJ5IGlucHV0LXR5cGUuIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tb3V0cHV0IiwgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgICBoZWxwPSJPdXRwdXQgZm9sZGVyIHdpdGggcHJlZGljdGlvbnMuIEUuZy4gL2RhdGFiYXNlL3YwMSIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLWRhdGFiYXNlIiwgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgICBoZWxwPSJOYW1lIG9mIHRhcmdldCBwcmFua3dlYiBkYXRhYmFzZS4gRS5nLiB2MSIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLWphdmEtdG9vbHMiLCByZXF1aXJlZD1UcnVlLAogICAgICAgIGhlbHA9IlBhdGggdG8gamF2YS10b29sIGV4ZWN1dGFibGUgZnJvbSBwcmFua3dlYiBwcm9qZWN0LiIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLXdvcmtpbmciLCByZXF1aXJlZD1UcnVlLAogICAgICAgIGhlbHA9IlBhdGggdG8gd29ya2luZyBkaXJlY3RvcnkuIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tZmFpbGVkIiwgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgICBoZWxwPSJQYXRoIHRvIGRpcmVjdG9yeSB3aGVyZSBmYWlsZWQgaW1wb3J0cyBzaG91bGQgYmUgbW92ZWQuIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tdGhyZWFkIiwgZGVmYXVsdD0xLAogICAgICAgIGhlbHA9Ik51bWJlciBvZiB0aHJlYWRzIHRvIHVzZS4iKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAiLS1pbnB1dC10eXBlIiwgZGVmYXVsdD0icGRiIiwKICAgICAgICBoZWxwPSIncGRiJywgJ2FscGhhZm9sZCciKQogICAgcmV0dXJuIHZhcnMocGFyc2VyLnBhcnNlX2FyZ3MoKSkKCgpkZWYgbWFpbihhcmd1bWVudHMpOgogICAgX2luaXRfbG9nZ2luZygpCgogICAgaW1wb3J0X3ByZWRpY3Rpb25zKEFyZ3VtZW50cygKICAgICAgICBhcmd1bWVudHNbImphdmFfdG9vbHMiXSwKICAgICAgICBhcmd1bWVudHNbIndvcmtpbmciXSwKICAgICAgICBhcmd1bWVudHNbImNvbnNlcnZhdGlvbiJdLAogICAgICAgIGFyZ3VtZW50c1sicHJlZGljdGlvbiJdLAogICAgICAgIGFyZ3VtZW50c1sic3RydWN0dXJlIl0sCiAgICAgICAgYXJndW1lbnRzWyJvdXRwdXQiXSwKICAgICAgICBhcmd1bWVudHNbImZhaWxlZCJdLAogICAgICAgIGFyZ3VtZW50c1siZGF0YWJhc2UiXSwKICAgICAgICBtaW4oYXJndW1lbnRzWyJ0aHJlYWQiXSwgMSksCiAgICAgICAgYXJndW1lbnRzWyJpbnB1dF90eXBlIl0KICAgICkpCgoKZGVmIF9pbml0X2xvZ2dpbmcoKToKICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKAogICAgICAgICIlKGFzY3RpbWUpcyAlKG5hbWUpcyBbJShsZXZlbG5hbWUpc10gOiAlKG1lc3NhZ2UpcyIsCiAgICAgICAgZGF0ZWZtdD0iJVktJW0tJWQgJUg6JU06JVMiKQoKICAgIGhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQogICAgaGFuZGxlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQogICAgaGFuZGxlci5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQoKICAgIGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCgoKZGVmIGltcG9ydF9wcmVkaWN0aW9ucyhhcmdzOiBBcmd1bWVudHMpOgogICAgb3MubWFrZWRpcnMoYXJncy5vdXRwdXRfZGlyZWN0b3J5LCBleGlzdF9vaz1UcnVlKQogICAgb3MubWFrZWRpcnMoYXJncy5mYWlsZWRfZGlyZWN0b3J5LCBleGlzdF9vaz1UcnVlKQogICAgIwogICAgbG9nZ2VyLmluZm8oIkNvbGxlY3RpbmcgY29kZXMgZm9yIGltcG9ydCAuLi4iKQogICAgY29kZXNfdG9faW1wb3J0ID0gY29sbGVjdF9jb2Rlc19mb3JfaW1wb3J0KGFyZ3MpCiAgICBsb2dnZXIuaW5mbyhmIkNvbGxlY3RlZCB7bGVuKGNvZGVzX3RvX2ltcG9ydCl9IGNvZGVzIGZvciBpbXBvcnQiKQogICAgbG9nZ2VyLmluZm8oIlByZXBhcmluZyBkYXRhIHRvIHdvcmtpbmcgZGlyZWN0b3J5IC4uLiIpCiAgICBleGVjdXRlX21hcF93aXRoX2FyZ3MoCiAgICAgICAgYXJncywgY29kZXNfdG9faW1wb3J0LCBpbXBvcnRfZGF0YV9pbnRvX3dvcmtpbmdfZGlyZWN0b3J5KQogICAgbG9nZ2VyLmluZm8oIlJ1bm5pbmcgamF2YS10b29scyAuLi4iKQogICAgZXhlY3V0ZV9qYXZhX3Rvb2xzKGFyZ3MsIGNvZGVzX3RvX2ltcG9ydCkKICAgIGxvZ2dlci5pbmZvKCJQcm9jZXNzaW5nIGFuZCBpbXBvcnRpbmcgdG8gb3V0cHV0IGRpcmVjdG9yeSAgLi4uIikKICAgIGV4ZWN1dGVfbWFwX3dpdGhfYXJncygKICAgICAgICBhcmdzLCBjb2Rlc190b19pbXBvcnQsIGltcG9ydF9kYXRhX3RvX3RhcmdldF9kaXJlY3RvcnkpCiAgICBsb2dnZXIuaW5mbygiRmluaXNoZWQiKQoKCmRlZiBjb2xsZWN0X2NvZGVzX2Zvcl9pbXBvcnQoYXJnczogQXJndW1lbnRzKToKICAgICIiIlJldHVybiBQREIgY29kZXMgYXZhaWxhYmxlIGZvciBpbXBvcnQuIiIiCiAgICByZXR1cm4gWwogICAgICAgIG5hbWVbMzo3XQogICAgICAgIGZvciBuYW1lIGluIG9zLmxpc3RkaXIod2l0aF9jb250ZXh0KGFyZ3MpLnByZWRpY3Rpb25zX2RpcigpKQogICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoIl9wcmVkaWN0aW9ucy5jc3YiKQogICAgXQoKCmRlZiB3aXRoX2NvbnRleHQoYXJnczogQXJndW1lbnRzKSAtPiBBYnN0cmFjdENvbnRleHQ6CiAgICBpZiBhcmdzLmlucHV0X3R5cGUgPT0gInBkYiI6CiAgICAgICAgcmV0dXJuIFBkYkNvbnRleHQoYXJncykKICAgIGVsc2U6CiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJVbmtub3duIGlucHV0IHR5cGUiKQoKCmRlZiBleGVjdXRlX21hcF93aXRoX2FyZ3MoYXJnczogQXJndW1lbnRzLCBjb2RlczogdHlwaW5nLkxpc3Rbc3RyXSwgY2FsbGJhY2spOgogICAgIiIiRXhlY3V0ZSBjYWxsYmFjayBmb3Igd2l0aCBhcmdzIGFuZCBvbmUgY29kZS4iIiIKICAgIHJlc3VsdCA9IFtdCiAgICBpZiBhcmdzLnBhcmFsbGVsID4gMToKICAgICAgICBjcHVfY3VyZXNfdG9fdXNlID0gYXJncy5wYXJhbGxlbAogICAgICAgIGxvZ2dlci5pbmZvKGYiU3RhcnRpbmcgY29tcHV0YXRpb25zIG9uIHtjcHVfY3VyZXNfdG9fdXNlfSBjb3JlcyIpCiAgICAgICAgd2l0aCBtdWx0aXByb2Nlc3NpbmcuUG9vbChjcHVfY3VyZXNfdG9fdXNlKSBhcyBwb29sOgogICAgICAgICAgICBjYWxsX2FyZ3VtZW50cyA9IFsoYXJncywgY29kZSkgZm9yIGNvZGUgaW4gY29kZXNdCiAgICAgICAgICAgIHJlc3VsdCA9IHBvb2wuc3Rhcm1hcChjYWxsYmFjaywgY2FsbF9hcmd1bWVudHMpCiAgICBlbHNlOgogICAgICAgIGxvZ2dlci5pbmZvKGYiU3RhcnRpbmcgdXNpbmcgc2luZ2xlIGNvcmVzIikKICAgICAgICBmb3IgY29kZSBpbiBjb2RlczoKICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjYWxsYmFjayhhcmdzLCBjb2RlKSkKICAgIGxvZ2dlci5pbmZvKCJBbGwgZXhlY3V0ZWQiKQogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBpbXBvcnRfZGF0YV9pbnRvX3dvcmtpbmdfZGlyZWN0b3J5KGFyZ3M6IEFyZ3VtZW50cywgY29kZTogc3RyKToKICAgICIiIkNvbGxlY3QgZmlsZXMgdG8gdGhlIHdvcmtpbmcgY29kZSBkaXJlY3RvcnkuIiIiCiAgICByb290X2RpciA9IG9zLnBhdGguam9pbihhcmdzLndvcmtpbmdfZGlyZWN0b3J5LCBjb2RlLnVwcGVyKCkpCiAgICBvcy5tYWtlZGlycyhyb290X2RpciwgZXhpc3Rfb2s9VHJ1ZSkKICAgIHB1YmxpY19kaXIgPSBvcy5wYXRoLmpvaW4ocm9vdF9kaXIsICJwdWJsaWMiKQo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICBvcy5tYWtlZGlycyhwdWJsaWNfZGlyLCBleGlzdF9vaz1UcnVlKQogICAgY3R4ID0gd2l0aF9jb250ZXh0KGFyZ3MpCgogICAgY29uc2VydmF0aW9uID0gZmluZF9jb25zZXJ2YXRpb24oYXJncy5jb25zZXJ2YXRpb25fZGlyZWN0b3J5LCBjb2RlKQo8fGZpbV9lbmR8Pg=="]
["4b32adae461af7502f6ac883acaf21ded28863a0-1","4b32adae461af7502f6ac883acaf21ded28863a0","PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IG9zCmltcG9ydCBnZXRwYXNzCmltcG9ydCBncnAKaW1wb3J0IHJlCmltcG9ydCBnemlwCgp1c2VyID0gZ2V0cGFzcy5nZXR1c2VyKCkKd2lraV91cmwgPSAiaHR0cHM6Ly93aWtpLmxpbnV4YXVkaW8ub3JnL3dpa2kvc3lzdGVtX2NvbmZpZ3VyYXRpb24iCmd1aV9zdGF0dXMgPSBGYWxzZQp2ZXJzaW9uID0gIjAuNS4wIgpoZWFkbGluZSA9IHt9Cmtlcm5lbCA9IHt9Cm91dHB1dCA9IHt9CnN0YXR1cyA9IHt9CgoKZGVmIHByaW50X3ZlcnNpb24oKToKICAgIHByaW50X2NsaShmInJ0Y3FzIC0gdmVyc2lvbiB7dmVyc2lvbn0iKQogICAgcHJpbnRfY2xpKCIiKQoKCmRlZiBwcmludF9jbGkobWVzc2FnZSk6CiAgICBpZiBub3QgZ3VpX3N0YXR1czoKICAgICAgICBwcmludChtZXNzYWdlKQoKCmRlZiBwcmludF9zdGF0dXMoY2hlY2spOgogICAgaWYgbm90IGd1aV9zdGF0dXM6CiAgICAgICAgaWYgc3RhdHVzW2NoZWNrXToKICAgICAgICAgICAgcHJpbnQoJ1sgXDAzM1szMm1PS1wwMzNbMDBtIF0gJywgZW5kPScnKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50KCdbIFwwMzNbMzFtV0FSTklOR1wwMzNbMDBtIF0gJywgZW5kPScnKQoKCmRlZiBmb3JtYXRfb3V0cHV0KGNoZWNrKToKICAgIGNoYXJfY291bnQgPSBpbnQobGVuKGhlYWRsaW5lW2NoZWNrXSkpCiAgICBwcmludF9jbGkoaGVhZGxpbmVbY2hlY2tdKQogICAgcHJpbnRfY2xpKGNoYXJfY291bnQgKiAiPSIpCiAgICBwcmludF9zdGF0dXMoY2hlY2spCiAgICBwcmludF9jbGkob3V0cHV0W2NoZWNrXSkKICAgIHByaW50X2NsaSgiIikKCgpkZWYgcm9vdF9jaGVjaygpOgogICAgY2hlY2sgPSAncm9vdCcKICAgIGhlYWRsaW5lW2NoZWNrXSA9ICJSb290IFVzZXIiCgogICAgaWYgdXNlciA9PSAncm9vdCc6CiAgICAgICAgc3RhdHVzW2NoZWNrXSA9IEZhbHNlCiAgICAgICAgb3V0cHV0W2NoZWNrXSA9ICJZb3UgYXJlIHJ1bm5pbmcgdGhpcyBzY3JpcHQgYXMgcm9vdC4gUGxlYXNlIHJ1biAiIFwKICAgICAgICAgICAgIml0IGFzIGEgcmVndWxhciB1c2VyIGZvciB0aGUgbW9zdCByZWxpYWJsZSByZXN1bHRzLiIKCiAgICBlbHNlOgogICAgICAgIHN0YXR1c1tjaGVja10gPSBUcnVlCiAgICAgICAgb3V0cHV0W2NoZWNrXSA9ICJOb3QgcnVubmluZyBhcyByb290LiIKCiAgICBmb3JtYXRfb3V0cHV0KGNoZWNrKQoKCmRlZiBhdWRpb19ncm91cF9jaGVjaygpOgogICAgY2hlY2sgPSAnYXVkaW9fZ3JvdXAnCiAgICBoZWFkbGluZVtjaGVja10gPSAiQXVkaW8gR3JvdXAiCiAgICB3aWtpX2FuY2hvciA9ICcjYXVkaW9fZ3JvdXAnCiAgICBnaWQgPSBvcy5nZXRnaWQoKQogICAgZ2lkcyA9IG9zLmdldGdyb3VwbGlzdCh1c2VyLCBnaWQpCiAgICBncm91cHMgPSBbZ3JwLmdldGdyZ2lkKGdpZClbMF0gZm9yIGdpZCBpbiBnaWRzXQoKICAgIGlmICdhdWRpbycgbm90IGluIGdyb3VwczoKICAgICAgICBzdGF0dXNbY2hlY2tdID0gRmFsc2UKICAgICAgICBvdXRwdXRbY2hlY2tdID0gZiJVc2VyIHt1c2VyfSBpcyBjdXJyZW50bHkgbm90IGluIHRoZSBhdWRpbyAiIFwKICAgICAgICAgICAgImdyb3VwLiBBZGQgeW91cnNlbGYgdG8gdGhlIGF1ZGlvIGdyb3VwIHdpdGggJ3N1ZG8gdXNlcm1vZCAtYSAiIFwKICAgICAgICAgICAgZiItRyBhdWRpbyB7dXNlcn0nIGFuZCBsb2cgaW4gYWdhaW4uIFNlZSBhbHNvOiAiIFwKICAgICAgICAgICAgZiJ7d2lraV91cmx9e3dpa2lfYW5jaG9yfSIKICAgIGVsc2U6CiAgICAgICAgc3RhdHVzW2NoZWNrXSA9IFRydWUKICAgICAgICBvdXRwdXRbY2hlY2tdID0gZiJVc2VyIHt1c2VyfSBpcyBpbiB0aGUgYXVkaW8gZ3JvdXAuIgoKICAgIGZvcm1hdF9vdXRwdXQoY2hlY2spCgoKZGVmIGdvdmVybm9yX2NoZWNrKCk6CiAgICBjaGVjayA9ICdnb3Zlcm5vcicKICAgIGhlYWRsaW5lW2NoZWNrXSA9ICJDUFUgRnJlcXVlbmN5IFNjYWxpbmciCiAgICB3aWtpX2FuY2hvciA9ICcjY3B1X2ZyZXF1ZW5jeV9zY2FsaW5nJwogICAgY3B1X2NvdW50ID0gb3MuY3B1X2NvdW50KCkKICAgIGNwdV9kaXIgPSAnL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUnCiAgICBjcHVfbGlzdCA9IFtdCiAgICBjcHVfZ292ZXJub3IgPSB7fQogICAgYmFkX2dvdmVybm9yID0gMAoKICAgIGZvciBjcHVfbnIgaW4gcmFuZ2UoY3B1X2NvdW50KToKICAgICAgICB3aXRoIG9wZW4oCiAgICAgICAgICAgICAgICBmJ3tjcHVfZGlyfS9jcHV7Y3B1X25yfS9jcHVmcmVxL3NjYWxpbmdfZ292ZXJub3InLCAncicpIGFzIGY6CiAgICAgICAgICAgIGNwdV9nb3Zlcm5vcltjcHVfbnJdID0gZi5yZWFkbGluZSgpLnN0cmlwKCkKICAgICAgICAgICAgY3B1X2xpc3QuYXBwZW5kKGYnQ1BVIHtjcHVfbnJ9OiB7Y3B1X2dvdmVybm9yW2NwdV9ucl19JykKCiAgICBmb3IgdmFsdWUgaW4gY3B1X2dvdmVybm9yLnZhbHVlcygpOgogICAgICAgIGlmIHZhbHVlICE9ICdwZXJmb3JtYW5jZSc6CiAgICAgICAgICAgIGJhZF9nb3Zlcm5vciArPSAxCgogICAgaWYgYmFkX2dvdmVybm9yID4gMDoKICAgICAgICBzdGF0dXNbY2hlY2tdID0gRmFsc2UKICAgICAgICBvdXRwdXRbY2hlY2tdID0gIlRoZSBzY2FsaW5nIGdvdmVybm9yIG9mIG9uZSBvciBtb3JlIENQVSdzIGlzICIgXAogICAgICAgICAgICAibm90IHNldCB0byAncGVyZm9ybWFuY2UnLiBZb3UgY2FuIHNldCB0aGUgc2NhbGluZyBnb3Zlcm5vciB0byAiIFwKICAgICAgICAgICAgIidwZXJmb3JtYW5jZScgd2l0aCAnY3B1cG93ZXIgZnJlcXVlbmN5LXNldCAtZyBwZXJmb3JtYW5jZScgIiBcCiAgICAgICAgICAgICJvciAnY3B1ZnJlcS1zZXQgLXIgLWcgcGVyZm9ybWFuY2UnIChEZWJpYW4vVWJ1bnR1KS4gU2VlICIgXAogICAgICAgICAgICBmImFsc286IHt3aWtpX3VybH17d2lraV9hbmNob3J9IgogICAgZWxzZToKICAgICAgICBzdGF0dXNbY2hlY2tdID0gVHJ1ZQogICAgICAgIG91dHB1dFtjaGVja10gPSAiVGhlIHNjYWxpbmcgZ292ZXJub3Igb2YgYWxsIENQVSdzIGlzIHNldCBhdCAiIFwKICAgICAgICAgICAgInBlcmZvcm1hbmNlLiIKCiAgICBmb3JtYXRfb3V0cHV0KGNoZWNrKQoKCmRlZiBrZXJuZWxfY29uZmlnX2NoZWNrKCk6CiAgICBjaGVjayA9ICdrZXJuZWxfY29uZmlnJwogICAgaGVhZGxpbmVbY2hlY2tdID0gIktlcm5lbCBDb25maWd1cmF0aW9uIgogICAga2VybmVsWydyZWxlYXNlJ10gPSBvcy51bmFtZSgpLnJlbGVhc2UKCiAgICB3aXRoIG9wZW4oJy9wcm9jL2NtZGxpbmUnLCAncicpIGFzIGY6CiAgICAgICAga2VybmVsWydjbWRsaW5lJ10gPSBmLnJlYWRsaW5lKCkuc3RyaXAoKS5zcGxpdCgpCgogICAgaWYgb3MucGF0aC5leGlzdHMoJy9wcm9jL2NvbmZpZy5neicpOgogICAgICAgIHN0YXR1c1tjaGVja10gPSBUcnVlCiAgICAgICAgb3V0cHV0W2NoZWNrXSA9ICJWYWxpZCBrZXJuZWwgY29uZmlndXJhdGlvbiBmb3VuZC4iCiAgICAgICAgd2l0aCBnemlwLm9wZW4oJy9wcm9jL2NvbmZpZy5neicsICdyJykgYXMgZjoKICAgICAgICAgICAga2VybmVsWydjb25maWcnXSA9IFtsLnN0cmlwKCkuZGVjb2RlKCkgZm9yIGwgaW4gZi5yZWFkbGluZXMoKV0KICAgIGVsaWYgb3MucGF0aC5leGlzdHMoZicvYm9vdC9jb25maWcte2tlcm5lbFsicmVsZWFzZSJdfScpOgogICAgICAgIHN0YXR1c1tjaGVja10gPSBUcnVlCiAgICAgICAgb3V0cHV0W2NoZWNrXSA9ICJWYWxpZCBrZXJuZWwgY29uZmlndXJhdGlvbiBmb3VuZC4iCiAgICAgICAgd2l0aCBvcGVuKGYnL2Jvb3QvY29uZmlnLXtrZXJuZWxbInJlbGVhc2UiXX0nLCAncicpIGFzIGY6CiAgICAgICAgICAgIGtlcm5lbFsnY29uZmlnJ10gPSBbbC5zdHJpcCgpIGZvciBsIGluIGYucmVhZGxpbmVzKCldCiAgICBlbHNlOgogICAgICAgIHN0YXR1c1tjaGVja10gPSBGYWxzZQogICAgICAgIG91dHB1dFtjaGVja10gPSAiQ291bGQgbm90IGZpbmQga2VybmVsIGNvbmZpZ3VyYXRpb24uIgoKICAgIGZvcm1hdF9vdXRwdXQoY2hlY2spCgoKZGVmIGhpZ2hfcmVzX3RpbWVyc19jaGVjaygpOgogICAgY2hlY2sgPSAnaGlnaF9yZXNfdGltZXJzJwogICAgaGVhZGxpbmVbY2hlY2tdID0gIkhpZ2ggUmVzb2x1dGlvbiBUaW1lcnMiCiAgICB3aWtpX2FuY2hvciA9ICcjaW5zdGFsbGluZ19hX3JlYWwtdGltZV9rZXJuZWwnCgogICAgaWYgJ0NPTkZJR19ISUdIX1JFU19USU1FUlM9eScgbm90IGluIGtlcm5lbFsnY29uZmlnJ106CiAgICAgICAgc3RhdHVzW2NoZWNrXSA9IEZhbHNlCiAgICAgICAgb3V0cHV0W2NoZWNrXSA9ICJIaWdoIHJlc29sdXRpb24gdGltZXJzIGFyZSBub3QgIiBcCiAgICAgICAgICAgICJlbmFibGVkLiBUcnkgZW5hYmxpbmcgaGlnaC1yZXNvbHV0aW9uIHRpbWVycyAiIFwKICAgICAgICAgICAgIihDT05GSUdfSElHSF9SRVNfVElNRVJTKSB1bmRlciAnUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzJykuICIgXAogICAgICAgICAgICBmIlNlZSBhbHNvOiB7d2lraV91cmx9e3dpa2lfYW5jaG9yfSIKICAgIGVsc2U6CiAgICAgICAgc3RhdHVzW2NoZWNrXSA9IFRydWUKICAgICAgICBvdXRwdXRbY2hlY2tdID0gIkhpZ2ggcmVzb2x1dGlvbiB0aW1lcnMgYXJlIGVuYWJsZWQuIgoKICAgIGZvcm1hdF9vdXRwdXQoY2hlY2spCgoKZGVmIHRpY2tsZXNzX2NoZWNrKCk6CiAgICBjaGVjayA9ICd0aWNrbGVzcycKICAgIGhlYWRsaW5lW2NoZWNrXSA9ICJUaWNrbGVzcyBLZXJuZWwiCiAgICB3aWtpX2FuY2hvciA9ICcjaW5zdGFsbGluZ19hX3JlYWwtdGltZV9rZXJuZWwnCgogICAgaWYgJ0NPTkZJR19OT19IWj15JyBub3QgaW4ga2VybmVsWydjb25maWcnXSBhbmQgXAogICAgICAgICAgICAnQ09ORklHX05PX0haX0lETEU9eScgbm90IGluIGtlcm5lbFsnY29uZmlnJ106CiAgICAgICAgc3RhdHVzW2NoZWNrXSA9IEZhbHNlCiAgICAgICAgb3V0cHV0W2NoZWNrXSA9ICJUaWNrbGVzcyB0aW1lciBzdXBwb3J0IGlzIG5vdCBub3Qgc2V0LiBUcnkgIiBcCiAgICAgICAgICAgICJlbmFibGluZyB0aWNrbGVzcyB0aW1lciBzdXBwb3J0IChDT05GSUdfTk9fSFpfSURMRSwgb3IgIiBcCiAgICAgICAgICAgICJDT05GSUdfTk9fSFogaW4gb2xkZXIga2VybmVscykuIFNlZSBhbHNvOiAiIFwKICAgICAgICAgICAgZiJ7d2lraV91cmx9e3dpa2lfYW5jaG9yfSIKICAgIGVsc2U6CiAgICAgICAgc3RhdHVzW2NoZWNrXSA9IFRydWUKICAgICAgICBvdXRwdXRbY2hlY2tdID0gIlN5c3RlbSBpcyB1c2luZyBhIHRpY2tsZXNzIGtlcm5lbC4iCgogICAgZm9ybWF0X291dHB1dChjaGVjaykKCgpkZWYgcHJlZW1wdF9ydF9jaGVjaygpOgogICAgY2hlY2sgPSAncHJlZW1wdF9ydCcKICAgIGhlYWRsaW5lW2NoZWNrXSA9ICJQcmVlbXB0IFJUIgogICAgd2lraV9hbmNob3IgPSAnI2RvX2lfcmVhbGx5X25lZWRfYV9yZWFsLXRpbWVfa2VybmVsJwogICAgdGhyZWFkaXJxcyA9IHByZWVtcHQgPSBGYWxzZQoKICAgIGlmICd0aHJlYWRpcnFzJyBpbiBrZXJuZWxbJ2NtZGxpbmUnXToKICAgICAgICB0aHJlYWRpcnFzID0gVHJ1ZQoKICAgIGlmICdDT05GSUdfUFJFRU1QVF9SVD15JyBpbiBrZXJuZWxbJ2NvbmZpZyddIG9yIFwKICAgICAgICAgICAgJ0NPTkZJR19QUkVFTVBUX1JUX0ZVTEw9eScgaW4ga2VybmVsWydjb25maWcnXToKICAgICAgICBwcmVlbXB0ID0gVHJ1ZQoKICAgIGlmIG5vdCB0aHJlYWRpcnFzIGFuZCBub3QgcHJlZW1wdDoKICAgICAgICBzdGF0dXNbY2hlY2tdID0gRmFsc2UKICAgICAgICBvdXRwdXRbY2hlY2tdID0gZiJLZXJuZWwge2tlcm5lbFsncmVsZWFzZSddfSB3aXRob3V0ICIgXAogICAgICAgICAgICAiJ3RocmVhZGlycXMnIHBhcmFtZXRlciBvciByZWFsLXRpbWUgY2FwYWJpbGl0aWVzIGZvdW5kLiBTZWUgIiBcCiAgICAgICAgICAgIGYiYWxzbzoge3dpa2lfdXJsfXt3aWtpX2FuY2hvcn0iCiAgICBlbGlmIHRocmVhZGlycXM6CiAgICAgICAgc3RhdHVzW2NoZWNrXSA9IFRydWUKICAgICAgICBvdXRwdXRbY2hlY2tdID0gZiJLZXJuZWwge2tlcm5lbFsncmVsZWFzZSddfSBpcyB1c2luZyAiIFwKICAgICAgICAgICAgInRocmVhZGVkIElSUSdzLiIKICAgIGVsaWYgcHJlZW1wdDoKICAgICAgICBzdGF0dXNbY2hlY2tdID0gVHJ1ZQogICAgICAgIG91dHB1dFtjaGVja10gPSBmIktlcm5lbCB7a2VybmVsWydyZWxlYXNlJ119IGlzIGEgcmVhbC10aW1lICIgXAogICAgICAgICAgICAia2VybmVsLiIKCiAgICBmb3JtYXRfb3V0cHV0KGNoZWNrKQoKCmRlZiBtaXRpZ2F0aW9uc19jaGVjaygpOgogICAgY2hlY2sgPSAnbWl0aWdhdGlvbnMnCiAgICBoZWFkbGluZVtjaGVja10gPSAiU3BlY3RyZS9NZWx0ZG93biBNaXRpZ2F0aW9ucyIKICAgIHdpa2lfYW5jaG9yID0gIiNkaXNhYmxpbmdfc3BlY3RyZV9hbmRfbWVsdGRvd25fbWl0aWdhdGlvbnMiCgogICAgaWYgJ21pdGlnYXRpb25zPW9mZicgbm90IGluIGtlcm5lbFsnY21kbGluZSddOgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CiAgICAgICAgc3RhdHVzW2NoZWNrXSA9IEZhbHNlCiAgICAgICAgb3V0cHV0W2NoZWNrXSA9ICJLZXJuZWwgd2l0aCBTcGVjdHJlL01lbHRkb3duIG1pdGlnYXRpb25zICIgXAogICAgICAgICAgICAiZm91bmQuIFRoaXMgY291bGQgaGF2ZSBhIG5lZ2F0aXZlIGltcGFjdCBvbiB0aGUgcGVyZm9ybWFuY2Ugb2YgIiBcCiAgICAgICAgICAgIGYieW91ciBzeXN0ZW0uIFNlZSBhbHNvOiB7d2lraV91cmx9e3dpa2lfYW5jaG9yfSIKPHxmaW1fZW5kfD4="]
["4b32adae461af7502f6ac883acaf21ded28863a0-2","4b32adae461af7502f6ac883acaf21ded28863a0",{"$cut":{"chars":16484,"head":"PHxmaW1fcHJlZml4fD4KIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IG9zCmltcG9ydCBnZXRwYXNzCmltcG9ydCBncnAKaW1wb3J0IHJlCmltcG9ydCBnemlwCgp1c2VyID0gZ2V0cGFzcy5nZXR1c2VyKCkKd2lraV91cmwgPSAiaHR0cHM6Ly93aWtpLmxpbnV4YXVkaW8ub3JnL3dpa2kvc3lzdGVtX2NvbmZpZ3VyYXRpb24iCmd1aV9zdGF0dXMgPSBGYWxzZQp2ZXJzaW9uID0gIjAuNS4wIgpoZWFkbGluZSA9IHt9Cmtlcm5lbCA9IHt9Cm91dHB1dCA9IHt9CnN0YXR1cyA9IHt9CgoKZGVmIHByaW50X3ZlcnNpb24oKToKICAgIHByaW50X2NsaShmInJ0Y3FzIC0gdmVyc2lvbiB7dmVyc2lvbn0iKQogICAgcHJpbnRfY2xpKCIiKQoKCmRlZiBwcmludF9jbGkobWVzc2FnZSk6CiAgICBpZiBub3QgZ3VpX3N0YXR1czoKICAgICAgICBwcmludChtZXNzYWdlKQoKCmRlZiBwcmludF9zdGF0dXMoY2hlY2spOgogICAgaWYgbm90IGd1aV9zdGF0dXM6CiAgICAgICAgaWYgc3RhdHVzW2NoZWNrXToKICAgICAgICAgICAgcHJpbnQoJ1sgXDAzM1szMm1PS1wwMzNbMDBtIF0gJywgZW5kPScnKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50KCdbIFwwMzNbMzFtV0FSTklOR1wwMzNbMDBtIF0gJywgZW5kPScnKQoKCmRlZiBmb3JtYXRfb3V0cHV0KGNoZWNrKToKICAgIGNoYXJfY291bnQgPSBpbnQobGVuKGhlYWRsaW5lW2NoZWNrXSkpCiAgICBwcmludF9jbGkoaGVhZGxpbmVbY2hlY2tdKQogICAgcHJpbnRfY2xpKGNoYXJfY291bnQgKiAiPSIpCiAgICBwcmludF9zdGF0dXMoY2hlY2spCiAgICBwcmludF9jbGkob3V0cHV0W2NoZWNrXSkKICAgIHByaW50X2NsaSgiIikKCgpkZWYgcm9vdF9jaGVjaygpOgogICAgY2hlY2sgPSAncm9vdCcKICAgIGhlYWRsaW5lW2NoZWNrXSA9ICJSb290IFVzZXIiCgogICAgaWYgdXNlciA9PSAncm9vdCc6CiAgICAgICAgc3RhdHVzW2NoZWNrXSA9IEZhbHNlCiAgICAgICAgb3V0cHV0W2NoZWNrXSA9ICJZb3UgYXJlIHJ1bm5pbmcgdGhpcyBzY3JpcHQgYXMgcm9vdC4gUGxlYXNlIHJ1biAiIFwKICAgICAgICAgICAgIml0IGFzIGEgcmVndWxhciB1c2VyIGZvciB0aGUgbW9zdCByZWxpYWJsZSByZXN1bHRzLiIKCiAgICBlbHNlOgogICAgICAgIHN0YXR1c1tjaGVja10gPSBUcnVlCiAgICAgICAgb3V0cHV0W2NoZWNrXSA9ICJOb3QgcnVubmluZyBhcyByb290LiIKCiAgICBmb3JtYXRfb3V0cHV0KGNoZWNrKQoKCmRlZiBhdWRpb19ncm91cF9jaGVjaygpOgogICAgY2hlY2sgPSAnYXVkaW9fZ3JvdXAnCiAgICBoZWFkbGluZVtjaGVja10gPSAiQXVkaW8gR3JvdXAiCiAgICB3aWtpX2FuY2hvciA9ICcjYXVkaW9fZ3JvdXAnCiAgICBnaWQgPSBvcy5nZXRnaWQoKQogICAgZ2lkcyA9IG9zLmdldGdyb3VwbGlzdCh1c2VyLCBnaWQpCiAgICBncm91cHMgPSBbZ3JwLmdldGdyZ2lkKGdpZClbMF0gZm9yIGdpZCBpbiBnaWRzXQoKICAgIGlmICdhdWRpbycgbm90IGluIGdyb3VwczoKICAgICAgICBzdGF0dXNbY2hlY2tdID0gRmFsc2UKICAgICAgICBvdXRwdXRbY2hlY2tdID0gZiJVc2VyIHt1c2VyfSBpcyBjdXJyZW50bHkgbm90IGluIHRoZSBhdWRpbyAiIFwKICAgICAgICAgICAgImdyb3VwLiBBZGQgeW91cnNlbGYgdG8gdGhlIGF1ZGlvIGdyb3VwIHdpdGggJ3N1ZG8gdXNlcm1vZCAtYSAiIFwKICAgICAgICAgICAgZiItRyBhdWRpbyB7dXNlcn0nIGFuZCBsb2cgaW4gYWdhaW4uIFNlZSBhbHNvOiAiIFwKICAgICAgICAgICAgZiJ7d2lraV91cmx9e3dpa2lfYW5jaG9yfSIKICAgIGVsc2U6CiAgICAgICAgc3RhdHVzW2NoZWNrXSA9IFRydWUKICAgICAgICBvdXRwdXRbY2hlY2tdID0gZiJVc2VyIHt1c2VyfSBpcyBpbiB0aGUgYXVkaW8gZ3JvdXAuIgoKICAgIGZvcm1hdF9vdXRwdXQoY2hlY2spCgoKZGVmIGdvdmVybm9yX2NoZWNrKCk6CiAgICBjaGVjayA9ICdnb3Zlcm5vcicKICAgIGhlYWRsaW5lW2NoZWNrXSA9ICJDUFUgRnJlcXVlbmN5IFNjYWxpbmciCiAgICB3aWtpX2FuY2hvciA9ICcjY3B1X2ZyZXF1ZW5jeV9zY2FsaW5nJwogICAgY3B1X2NvdW50ID0gb3MuY3B1X2NvdW50KCkKICAgIGNwdV9kaXIgPSAnL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUnCiAgICBjcHVfbGlzdCA9IFtdCiAgICBjcHVfZ292ZXJub3IgPSB7fQogICAgYmFkX2dvdmVybm9yID0gMAoKICAgIGZvciBjcHVfbnIgaW4gcmFuZ2UoY3B1X2NvdW50KToKICAgICAgICB3aXRoIG9wZW4oCiAgICAgICAgICAgICAgICBmJ3tjcHVfZGlyfS9jcHV7Y3B1X25yfS9jcHVmcmVxL3NjYWxpbmdfZ292ZXJub3InLCAncicpIGFzIGY6CiAgICAgICAgICAgIGNwdV9nb3Zlcm5vcltjcHVfbnJdID0gZi5yZWFkbGluZSgpLnN0cmlwKCkKICAgICAgICAgICAgY3B1X2xpc3QuYXBwZW5kKGYnQ1BVIHtjcHVfbnJ9OiB7Y3B1X2dvdmVybm9yW2NwdV9ucl19JykKCiAgICBmb3IgdmFsdWUgaW4gY3B1X2dvdmVybm9yLnZhbHVlcygpOgogICAgICAgIGlmIHZhbHVlICE9ICdwZXJmb3JtYW5jZSc6CiAgICAgICAgICAgIGJhZF9nb3Zlcm5vciArPSAxCgogICAgaWYgYmFkX2dvdmVybm9yID4gMDoKICAgICAgICBzdGF0dXNbY2hlY2tdID0gRmFsc2UKICAgICAgICBvdXRwdXRbY2hlY2tdID0gIlRoZSBzY2FsaW5nIGdvdmVybm9yIG9mIG9uZSBvciBtb3JlIENQVSdzIGlzICIgXAogICAgICAgICAgICAibm90IHNldCB0byAncGVyZm9ybWFuY2UnLiBZb3UgY2FuIHNldCB0aGUgc2NhbGluZyBnb3Zlcm5vciB0byAiIFwKICAgICAgICAgICAgIidwZXJmb3JtYW5jZScgd2l0aCAnY3B1cG93ZXIgZnJlcXVlbmN5LXNldCAtZyBwZXJmb3JtYW5jZScgIiBcCiAgICAgICAgICAgICJvciAnY3B1ZnJlcS1zZXQgLXIgLWcgcGVyZm9ybWFuY2UnIChEZWJpYW4vVWJ1bnR1KS4gU2VlICIgXAogICAgICAgICAgICBmImFsc286IHt3aWtpX3VybH17d2lraV9hbmNob3J9IgogICAgZWxzZToKICAgICAgICBzdGF0dXNbY2hlY2tdID0gVHJ1ZQogICAgICAgIG91dHB1dFtjaGVja10gPSAiVGhlIHNjYWxpbmcgZ292ZXJub3Igb2YgYWxsIENQVSdzIGlzIHNldCBhdCAiIFwKICAgICAgICAgICAgInBlcmZvcm1hbmNlLiIK"}}]
["39dd480846e382c52d0082b7f0e38410485eda3c-1","39dd480846e382c52d0082b7f0e38410485eda3c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5Z2xldAoKZnJvbSBtb2R1bGVzIGltcG9ydCB1dGlsCgoKY2xhc3MgR2FtZU9iamVjdChweWdsZXQuc3ByaXRlLlNwcml0ZSk6CiAgICAiIiIKICAgIEEgY2xhc3MgdG8gZGVmaW5lIGEgZ2VuZXJpYyBvYmplY3QgaW4gdGhlIGdhbWUuCgogICAgTW9zdCBvYmplY3RzIGluIHRoZSBnYW1lLCBpLmUuIHBsYXllciwgZW5lbXksIGJ1bGxldCBhcmUgZGVyaXZlZCBmcm9tIHRoaXMgY2xhc3MuCiAgICBUaGlzIGNsYXNzIGl0c2VsZiBpcyBkZXJpdmVkIGZyb20gdGhlIHB5Z2xldC5zcHJpdGUuU3ByaXRlIGNsYXNzCiAgICAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAiIiIKICAgICAgICBJbml0aWFsaXplcyB0aGUgY2xhc3Mgb2JqZWN0LgogICAgICAgIDpwYXJhbSBhcmdzOiBhZGRpdGlvbmFsIHBvc2l0aW9uYWwgYXJndW1lbnRzCiAgICAgICAgOnBhcmFtIGt3YXJnczogYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cwogICAgICAgICIiIgogICAgICAgIHN1cGVyKEdhbWVPYmplY3QsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKCiAgICAgICAgIyBEZWNsYXJpbmcgYWxsIHRoZSBtZW1iZXIgdmFyaWFibGVzIG9mIHRoZSBjbGFzcwogICAgICAgIHNlbGYudHlwZSA9IE5vbmUgICAgICAgICAgICAjIFNwZWNpZmllcyB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0IC0gcGxheWVyLCBlbmVteSwgYnVsbGV0IGV0Yy4KICAgICAgICBzZWxmLmNoaWxkX29iamVjdHMgPSBbXSAgICAgIyBMaXN0IG9mIG9iamVjdHMgdGhhdCBjYW4gYmUgc3Bhd25lZCBieSB0aGlzIG9iamVjdAogICAgICAgIHNlbGYuZ2FtZV9zdGF0ZSA9IE5vbmUgICAgICAjIEdhbWUgc3RhdGUgb2JqZWN0CiAgICAgICAgc2VsZi5kZWFkID0gRmFsc2UgICAgICAgICAgICMgd2hldGhlciB0aGlzIG9iamVjdCBoYXMgdG8gYmUgcmVtb3ZlZCBmcm9tIHNjcmVlbiBvciBub3QKICAgICAgICBzZWxmLmNvbGxpc2lvbl9yYWRpdXMgPSAwICAgIyBjaXJjbGUgY29sbGlkZXIgcmFkaXVzCiAgICAgICAgc2VsZi5jb2xsaWRlcl90eXBlID0gTm9uZSAgICMgImNpcmNsZSIgb3IgInBvbHlnb24iCgogICAgZGVmIHVwZGF0ZV9vYmplY3Qoc2VsZiwgZHQpOgogICAgICAgICIiIgogICAgICAgIFZpcnR1YWwgdXBkYXRlX29iamVjdCBmdW5jdGlvbi4gVGhpcyBpcyBub3QgbmFtZWQgdXBkYXRlIGJlY2F1c2UgdGhlIFNwcml0ZSBvYmplY3QgaGFzIGEKICAgICAgICBmdW5jdGlvbiBjYWxsZWQgdXBkYXRlCiAgICAgICAgIiIiCiAgICAgICAgcGFzcwoKICAgIGRlZiBjaGVja19jaXJjbGVfY2lyY2xlX2NvbGxpc2lvbihzZWxmLCBvdGhlcl9vYmplY3QpOgogICAgICAgIGNvbGxpc2lvbl9kaXN0YW5jZSA9IHNlbGYuY29sbGlzaW9uX3JhZGl1cyArIG90aGVyX29iamVjdC5jb2xsaXNpb25fcmFkaXVzCiAgICAgICAgYWN0dWFsX2Rpc3RhbmNlID0gdXRpbC5kaXN0YW5jZShzZWxmLnBvc2l0aW9uLCBvdGhlcl9vYmplY3QucG9zaXRpb24pCiAgICAgICAgcmV0dXJuIGFjdHVhbF9kaXN0YW5jZSA8PSBjb2xsaXNpb25fZGlzdGFuY2UKCiAgICBkZWYgY2hlY2tfcG9pbnRfcG9seWdvbl9jb2xsaXNpb24oc2VsZiwgb3RoZXJfb2JqZWN0KToKICAgICAgICBwID0gdXRpbC5Qb2ludChzZWxmLngsIHNlbGYueSkKICAgICAgICBwb2x5Z29uID0gb3RoZXJfb2JqZWN0LnZlcnRpY2VzCiAgICAgICAgcmV0dXJuIHV0aWwuaXNfaW5zaWRlX3BvbHlnb25fd25fYWxnb3JpdGhtKHAsIHBvbHlnb24pCgogICAgZGVmIGNoZWNrX3BvbHlnb25fcG9pbnRfY29sbHNpb24oc2VsZiwgb3RoZXJfb2JqZWN0KToKICAgICAgICBwID0gdXRpbC5Qb2ludChvdGhlcl9vYmplY3QueCwgb3RoZXJfb2JqZWN0LnkpCiAgICAgICAgcG9seWdvbiA9IHNlbGYudmVydGljZXMKICAgICAgICByZXR1cm4gdXRpbC5pc19pbnNpZGVfcG9seWdvbihwLCBwb2x5Z29uKQoKICAgIGRlZiBjb2xsaWRlc193aXRoKHNlbGYsIG90aGVyX29iamVjdCk6CiAgICAgICAgaWYgc2VsZi5jb2xsaWRlcl90eXBlID09ICdjaXJjbGUnIGFuZCBvdGhlcl9vYmplY3QuY29sbGlkZXJfdHlwZSA9PSAnY2lyY2xlJzoKICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2hlY2tfY2lyY2xlX2NpcmNsZV9jb2xsaXNpb24ob3RoZXJfb2JqZWN0KQogICAgICAgIGVsaWYgc2VsZi5jb2xsaWRlcl90eXBlID09ICdjaXJjbGUnIGFuZCBvdGhlcl9vYmplY3QuY29sbGlkZXJfdHlwZSA9PSAncG9seWdvbic6CiAgICAgICAgICAgIHJldHVybiBzZWxmLmNoZWNrX3BvaW50X3BvbHlnb25fY29sbGlzaW9uKG90aGVyX29iamVjdCkKICAgICAgICBlbGlmIHNlbGYuY29sbGlkZXJfdHlwZSA9PSAncG9seWdvbicgYW5kIG90aGVyX29iamVjdC5jb2xsaWRlcl90eXBlID09ICdjaXJjbGUnOgogICAgICAgICAgICByZXR1cm4gc2VsZi5jaGVja19wb2x5Z29uX3BvaW50X2NvbGxzaW9uKG90aGVyX29iamVjdCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGRlZiBoYW5kbGVfY29sbGlzaW9uX3dpdGgoc2VsZiwgb3RoZXJfb2JqZWN0KToKICAgICAgICBzZWxmLmRlYWQgPSBGYWxzZQo8fGZpbV9lbmR8Pg=="]
["39dd480846e382c52d0082b7f0e38410485eda3c-2","39dd480846e382c52d0082b7f0e38410485eda3c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5Z2xldAoKZnJvbSBtb2R1bGVzIGltcG9ydCB1dGlsCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCgpjbGFzcyBHYW1lT2JqZWN0KHB5Z2xldC5zcHJpdGUuU3ByaXRlKToKICAgICIiIgo8fGZpbV9lbmR8Pg=="]
["39dd480846e382c52d0082b7f0e38410485eda3c-3","39dd480846e382c52d0082b7f0e38410485eda3c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5Z2xldAo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+Cgpmcm9tIG1vZHVsZXMgaW1wb3J0IHV0aWwKCgo8fGZpbV9lbmR8Pg=="]
["39dd480846e382c52d0082b7f0e38410485eda3c-4","39dd480846e382c52d0082b7f0e38410485eda3c","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5Z2xldAoKZnJvbSBtb2R1bGVzIGltcG9ydCB1dGlsCgoKY2xhc3MgR2FtZU9iamVjdChweWdsZXQuc3ByaXRlLlNwcml0ZSk6CiAgICAiIiIKICAgIEEgY2xhc3MgdG8gZGVmaW5lIGEgZ2VuZXJpYyBvYmplY3QgaW4gdGhlIGdhbWUuCgogICAgTW9zdCBvYmplY3RzIGluIHRoZSBnYW1lLCBpLmUuIHBsYXllciwgZW5lbXksIGJ1bGxldCBhcmUgZGVyaXZlZCBmcm9tIHRoaXMgY2xhc3MuCiAgICBUaGlzIGNsYXNzIGl0c2VsZiBpcyBkZXJpdmVkIGZyb20gdGhlIHB5Z2xldC5zcHJpdGUuU3ByaXRlIGNsYXNzCiAgICAiIiIKCjx8ZmltX2hvbGV8PgogICAgICAgIDpwYXJhbSBrd2FyZ3M6IGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMKICAgICAgICAiIiIKICAgICAgICBzdXBlcihHYW1lT2JqZWN0LCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCgogICAgICAgICMgRGVjbGFyaW5nIGFsbCB0aGUgbWVtYmVyIHZhcmlhYmxlcyBvZiB0aGUgY2xhc3MKICAgICAgICBzZWxmLnR5cGUgPSBOb25lICAgICAgICAgICAgIyBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgdGhlIG9iamVjdCAtIHBsYXllciwgZW5lbXksIGJ1bGxldCBldGMuCiAgICAgICAgc2VsZi5jaGlsZF9vYmplY3RzID0gW10gICAgICMgTGlzdCBvZiBvYmplY3RzIHRoYXQgY2FuIGJlIHNwYXduZWQgYnkgdGhpcyBvYmplY3QKICAgICAgICBzZWxmLmdhbWVfc3RhdGUgPSBOb25lICAgICAgIyBHYW1lIHN0YXRlIG9iamVjdAogICAgICAgIHNlbGYuZGVhZCA9IEZhbHNlICAgICAgICAgICAjIHdoZXRoZXIgdGhpcyBvYmplY3QgaGFzIHRvIGJlIHJlbW92ZWQgZnJvbSBzY3JlZW4gb3Igbm90CiAgICAgICAgc2VsZi5jb2xsaXNpb25fcmFkaXVzID0gMCAgICMgY2lyY2xlIGNvbGxpZGVyIHJhZGl1cwogICAgICAgIHNlbGYuY29sbGlkZXJfdHlwZSA9IE5vbmUgICAjICJjaXJjbGUiIG9yICJwb2x5Z29uIgoKICAgIGRlZiB1cGRhdGVfb2JqZWN0KHNlbGYsIGR0KToKICAgICAgICAiIiIKICAgICAgICBWaXJ0dWFsIHVwZGF0ZV9vYmplY3QgZnVuY3Rpb24uIFRoaXMgaXMgbm90IG5hbWVkIHVwZGF0ZSBiZWNhdXNlIHRoZSBTcHJpdGUgb2JqZWN0IGhhcyBhCiAgICAgICAgZnVuY3Rpb24gY2FsbGVkIHVwZGF0ZQogICAgICAgICIiIgogICAgICAgIHBhc3MKCiAgICBkZWYgY2hlY2tfY2lyY2xlX2NpcmNsZV9jb2xsaXNpb24oc2VsZiwgb3RoZXJfb2JqZWN0KToKICAgICAgICBjb2xsaXNpb25fZGlzdGFuY2UgPSBzZWxmLmNvbGxpc2lvbl9yYWRpdXMgKyBvdGhlcl9vYmplY3QuY29sbGlzaW9uX3JhZGl1cwogICAgICAgIGFjdHVhbF9kaXN0YW5jZSA9IHV0aWwuZGlzdGFuY2Uoc2VsZi5wb3NpdGlvbiwgb3RoZXJfb2JqZWN0LnBvc2l0aW9uKQogICAgICAgIHJldHVybiBhY3R1YWxfZGlzdGFuY2UgPD0gY29sbGlzaW9uX2Rpc3RhbmNlCgogICAgZGVmIGNoZWNrX3BvaW50X3BvbHlnb25fY29sbGlzaW9uKHNlbGYsIG90aGVyX29iamVjdCk6CiAgICAgICAgcCA9IHV0aWwuUG9pbnQoc2VsZi54LCBzZWxmLnkpCiAgICAgICAgcG9seWdvbiA9IG90aGVyX29iamVjdC52ZXJ0aWNlcwogICAgICAgIHJldHVybiB1dGlsLmlzX2luc2lkZV9wb2x5Z29uX3duX2FsZ29yaXRobShwLCBwb2x5Z29uKQoKICAgIGRlZiBjaGVja19wb2x5Z29uX3BvaW50X2NvbGxzaW9uKHNlbGYsIG90aGVyX29iamVjdCk6CiAgICAgICAgcCA9IHV0aWwuUG9pbnQob3RoZXJfb2JqZWN0LngsIG90aGVyX29iamVjdC55KQogICAgICAgIHBvbHlnb24gPSBzZWxmLnZlcnRpY2VzCiAgICAgICAgcmV0dXJuIHV0aWwuaXNfaW5zaWRlX3BvbHlnb24ocCwgcG9seWdvbikKCiAgICBkZWYgY29sbGlkZXNfd2l0aChzZWxmLCBvdGhlcl9vYmplY3QpOgogICAgICAgIGlmIHNlbGYuY29sbGlkZXJfdHlwZSA9PSAnY2lyY2xlJyBhbmQgb3RoZXJfb2JqZWN0LmNvbGxpZGVyX3R5cGUgPT0gJ2NpcmNsZSc6CiAgICAgICAgICAgIHJldHVybiBzZWxmLmNoZWNrX2NpcmNsZV9jaXJjbGVfY29sbGlzaW9uKG90aGVyX29iamVjdCkKICAgICAgICBlbGlmIHNlbGYuY29sbGlkZXJfdHlwZSA9PSAnY2lyY2xlJyBhbmQgb3RoZXJfb2JqZWN0LmNvbGxpZGVyX3R5cGUgPT0gJ3BvbHlnb24nOgogICAgICAgICAgICByZXR1cm4gc2VsZi5jaGVja19wb2ludF9wb2x5Z29uX2NvbGxpc2lvbihvdGhlcl9vYmplY3QpCiAgICAgICAgZWxpZiBzZWxmLmNvbGxpZGVyX3R5cGUgPT0gJ3BvbHlnb24nIGFuZCBvdGhlcl9vYmplY3QuY29sbGlkZXJfdHlwZSA9PSAnY2lyY2xlJzoKICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2hlY2tfcG9seWdvbl9wb2ludF9jb2xsc2lvbihvdGhlcl9vYmplY3QpCgogICAgZGVmIGhhbmRsZV9jb2xsaXNpb25fd2l0aChzZWxmLCBvdGhlcl9vYmplY3QpOgogICAgICAgIHNlbGYuZGVhZCA9IEZhbHNlCjx8ZmltX3N1ZmZpeHw+CiAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAiIiIKICAgICAgICBJbml0aWFsaXplcyB0aGUgY2xhc3Mgb2JqZWN0LgogICAgICAgIDpwYXJhbSBhcmdzOiBhZGRpdGlvbmFsIHBvc2l0aW9uYWwgYXJndW1lbnRzCjx8ZmltX2VuZHw+"]
["5f08a1d203de20ec79d686585be95e59c46d077a-1","5f08a1d203de20ec79d686585be95e59c46d077a","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vcHl0aG9uMwppbXBvcnQgcHN5Y29wZzIKCgp0b3BfdGhyZWVfYXJ0aWNsZXMgPSAiIiJzZWxlY3QgdGl0bGUsIHZpZXdzCmZyb20gYXJ0aWNsZV92aWV3cwpsaW1pdCAzOyIiIgoKdG9wX2F1dGhvcnMgPSAiIiJzZWxlY3QgYXV0aG9ycy5uYW1lIGFzIGF1dGhvcl9uYW1lLApzdW0oYXJ0aWNsZV92aWV3cy52aWV3cykgYXMgdmlld3MKZnJvbSBhcnRpY2xlX3ZpZXdzLGF1dGhvcnMKd2hlcmUgYXV0aG9ycy5pZCA9IGFydGljbGVfdmlld3MuYXV0aG9yCmdyb3VwIGJ5IGF1dGhvcl9uYW1lCm9yZGVyIGJ5IHZpZXdzIGRlc2M7IiIiCgpkYXlfd2l0aF9tb3N0X2Vycm9ycyA9ICIiInNlbGVjdCB0b19jaGFyKGRhdGUsJ0ZNTW9udGggRk1ERCwgWVlZWScpIGFzIGRhdGUsCnJvdW5kKGVycm9yX3BlcmNlbnRhZ2UsIDIpIGFzIGVycm9yX3BlcmNlbnRhZ2UKZnJvbSBlcnJvcnMKd2hlcmUgZXJyb3JfcGVyY2VudGFnZSA+IDEuMDsiIiIKCgpkZWYgZ2V0X3Jlc3VsdHMoc3FsX3F1ZXJ5KToKICAgIGRiID0gcHN5Y29wZzIuY29ubmVjdCgiZGJuYW1lPW5ld3MiKQogICAgYyA9IGRiLmN1cnNvcigpCiAgICBjLmV4ZWN1dGUoc3FsX3F1ZXJ5KQogICAgcmVzdWx0cyA9IGMuZmV0Y2hhbGwoKQogICAgZGIuY2xvc2UoKQogICAgcmV0dXJuIHJlc3VsdHMKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgcHJpbnQoIlxuMS5Ub3AgdGhyZWUgYXJ0aWNsZXMgYXJlOlxuIikKICAgIGFydGljbGVzID0gKGdldF9yZXN1bHRzKHRvcF90aHJlZV9hcnRpY2xlcykpCiAgICBmb3IgdGl0bGUsIHZpZXdzIGluIGFydGljbGVzOgogICAgICAgIHByaW50KCcie30iIC0ge30gdmlld3MnLmZvcm1hdCh0aXRsZSwgdmlld3MpKQoKICAgIHByaW50KCJcblxuMi5Ub3AgYXV0aG9ycyBhcmU6XG4iKQogICAgYXV0aG9ycyA9IChnZXRfcmVzdWx0cyh0b3BfYXV0aG9ycykpCiAgICBmb3IgYXV0aG9yX25hbWUsIHZpZXdzIGluIGF1dGhvcnM6CiAgICAgICAgcHJpbnQoJ3t9IC0ge30gdmlld3MnLmZvcm1hdChhdXRob3JfbmFtZSwgdmlld3MpKQoKICAgIHByaW50KCJcblxuMy5EYXlzIHdpdGggbW9yZSB0aGFuIDElIG9mIHJlcXVlc3RzIGxlYWQgdG8gZXJyb3JzIGFyZTpcbiIpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGVycm9ycyA9IChnZXRfcmVzdWx0cyhkYXlfd2l0aF9tb3N0X2Vycm9ycykpCiAgICBmb3IgZGF0ZSwgZXJyb3JfcGVyY2VudGFnZSBpbiBlcnJvcnM6CiAgICAgICAgcHJpbnQoJ3t9IC0ge30lJy5mb3JtYXQoZGF0ZSwgZXJyb3JfcGVyY2VudGFnZSkpCgo8fGZpbV9lbmR8Pg=="]
["5f08a1d203de20ec79d686585be95e59c46d077a-2","5f08a1d203de20ec79d686585be95e59c46d077a","PHxmaW1fcHJlZml4fD4KIyEgL3Vzci9iaW4vcHl0aG9uMwppbXBvcnQgcHN5Y29wZzIKCgp0b3BfdGhyZWVfYXJ0aWNsZXMgPSAiIiJzZWxlY3QgdGl0bGUsIHZpZXdzCmZyb20gYXJ0aWNsZV92aWV3cwpsaW1pdCAzOyIiIgoKdG9wX2F1dGhvcnMgPSAiIiJzZWxlY3QgYXV0aG9ycy5uYW1lIGFzIGF1dGhvcl9uYW1lLApzdW0oYXJ0aWNsZV92aWV3cy52aWV3cykgYXMgdmlld3MKZnJvbSBhcnRpY2xlX3ZpZXdzLGF1dGhvcnMKd2hlcmUgYXV0aG9ycy5pZCA9IGFydGljbGVfdmlld3MuYXV0aG9yCmdyb3VwIGJ5IGF1dGhvcl9uYW1lCm9yZGVyIGJ5IHZpZXdzIGRlc2M7IiIiCgpkYXlfd2l0aF9tb3N0X2Vycm9ycyA9ICIiInNlbGVjdCB0b19jaGFyKGRhdGUsJ0ZNTW9udGggRk1ERCwgWVlZWScpIGFzIGRhdGUsCnJvdW5kKGVycm9yX3BlcmNlbnRhZ2UsIDIpIGFzIGVycm9yX3BlcmNlbnRhZ2UKPHxmaW1faG9sZXw+CmRlZiBnZXRfcmVzdWx0cyhzcWxfcXVlcnkpOgogICAgZGIgPSBwc3ljb3BnMi5jb25uZWN0KCJkYm5hbWU9bmV3cyIpCiAgICBjID0gZGIuY3Vyc29yKCkKICAgIGMuZXhlY3V0ZShzcWxfcXVlcnkpCiAgICByZXN1bHRzID0gYy5mZXRjaGFsbCgpCiAgICBkYi5jbG9zZSgpCiAgICByZXR1cm4gcmVzdWx0cwoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBwcmludCgiXG4xLlRvcCB0aHJlZSBhcnRpY2xlcyBhcmU6XG4iKQogICAgYXJ0aWNsZXMgPSAoZ2V0X3Jlc3VsdHModG9wX3RocmVlX2FydGljbGVzKSkKICAgIGZvciB0aXRsZSwgdmlld3MgaW4gYXJ0aWNsZXM6CiAgICAgICAgcHJpbnQoJyJ7fSIgLSB7fSB2aWV3cycuZm9ybWF0KHRpdGxlLCB2aWV3cykpCgogICAgcHJpbnQoIlxuXG4yLlRvcCBhdXRob3JzIGFyZTpcbiIpCiAgICBhdXRob3JzID0gKGdldF9yZXN1bHRzKHRvcF9hdXRob3JzKSkKICAgIGZvciBhdXRob3JfbmFtZSwgdmlld3MgaW4gYXV0aG9yczoKICAgICAgICBwcmludCgne30gLSB7fSB2aWV3cycuZm9ybWF0KGF1dGhvcl9uYW1lLCB2aWV3cykpCgogICAgcHJpbnQoIlxuXG4zLkRheXMgd2l0aCBtb3JlIHRoYW4gMSUgb2YgcmVxdWVzdHMgbGVhZCB0byBlcnJvcnMgYXJlOlxuIikKICAgIGVycm9ycyA9IChnZXRfcmVzdWx0cyhkYXlfd2l0aF9tb3N0X2Vycm9ycykpCiAgICBmb3IgZGF0ZSwgZXJyb3JfcGVyY2VudGFnZSBpbiBlcnJvcnM6CiAgICAgICAgcHJpbnQoJ3t9IC0ge30lJy5mb3JtYXQoZGF0ZSwgZXJyb3JfcGVyY2VudGFnZSkpCgogICAgcHJpbnQoIlxuIikKPHxmaW1fc3VmZml4fD4KZnJvbSBlcnJvcnMKd2hlcmUgZXJyb3JfcGVyY2VudGFnZSA+IDEuMDsiIiIKCgo8fGZpbV9lbmR8Pg=="]
["721002c647ea95570c0bc92fe6337d906c8ce472-1","721002c647ea95570c0bc92fe6337d906c8ce472","PHxmaW1fcHJlZml4fD4KY2xhc3MgQm9udXNlczoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFuY2VfdG9fcHJlc2VydmUsIGNoYW5jZV90b19kb3VibGUpOgogICAgICAgIHNlbGYuY2hhbmNlX3RvX3ByZXNlcnZlID0gY2hhbmNlX3RvX3ByZXNlcnZlCiAgICAgICAgc2VsZi5jaGFuY2VfdG9fZG91YmxlID0gY2hhbmNlX3RvX2RvdWJsZQoKCmNsYXNzIENyYWZ0aW5nOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY2lwZSwgYWN0aW9uX3RpbWUsIGJvbnVzZXMsIG91dHB1dD0xLCBwcmljZT0wKToKICAgICAgICBzZWxmLnJlY2lwZSA9IHJlY2lwZQogICAgICAgIHNlbGYuYWN0aW9uX3RpbWUgPSBhY3Rpb25fdGltZQogICAgICAgIHNlbGYuYm9udXNlcyA9IGJvbnVzZXMKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIHNlbGYub3V0cHV0ID0gb3V0cHV0CiAgICAgICAgc2VsZi5wcmljZSA9IHByaWNlCgo8fGZpbV9lbmR8Pg=="]
["721002c647ea95570c0bc92fe6337d906c8ce472-2","721002c647ea95570c0bc92fe6337d906c8ce472","PHxmaW1fcHJlZml4fD4KY2xhc3MgQm9udXNlczoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNoYW5jZV90b19wcmVzZXJ2ZSwgY2hhbmNlX3RvX2RvdWJsZSk6CiAgICAgICAgc2VsZi5jaGFuY2VfdG9fcHJlc2VydmUgPSBjaGFuY2VfdG9fcHJlc2VydmUKICAgICAgICBzZWxmLmNoYW5jZV90b19kb3VibGUgPSBjaGFuY2VfdG9fZG91YmxlCgo8fGZpbV9lbmR8Pg=="]
["721002c647ea95570c0bc92fe6337d906c8ce472-3","721002c647ea95570c0bc92fe6337d906c8ce472","PHxmaW1fcHJlZml4fD4KY2xhc3MgQm9udXNlczoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFuY2VfdG9fcHJlc2VydmUsIGNoYW5jZV90b19kb3VibGUpOgogICAgICAgIHNlbGYuY2hhbmNlX3RvX3ByZXNlcnZlID0gY2hhbmNlX3RvX3ByZXNlcnZlCiAgICAgICAgc2VsZi5jaGFuY2VfdG9fZG91YmxlID0gY2hhbmNlX3RvX2RvdWJsZQoKCmNsYXNzIENyYWZ0aW5nOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY2lwZSwgYWN0aW9uX3RpbWUsIGJvbnVzZXMsIG91dHB1dD0xLCBwcmljZT0wKToKICAgICAgICBzZWxmLnJlY2lwZSA9IHJlY2lwZQogICAgICAgIHNlbGYuYWN0aW9uX3RpbWUgPSBhY3Rpb25fdGltZQogICAgICAgIHNlbGYuYm9udXNlcyA9IGJvbnVzZXMKICAgICAgICBzZWxmLm91dHB1dCA9IG91dHB1dAogICAgICAgIHNlbGYucHJpY2UgPSBwcmljZQoKICAgIGRlZiB0aW1lX3RvX3VzZV9hbGwoc2VsZiwgYW1vdW50KToKICAgICAgICBwcmVzZXJ2ZV9tb2QgPSAxICsgc2VsZi5ib251c2VzLmNoYW5jZV90b19wcmVzZXJ2ZSAvIDEwMAoKICAgICAgICByZXR1cm4gKGFtb3VudCAvIHNlbGYucmVjaXBlKSAqIHNlbGYuYWN0aW9uX3RpbWUgKiBwcmVzZXJ2ZV9tb2QKCiAgICBkZWYgd2lsbF9wcm9kdWNlKHNlbGYsIGFtb3VudCk6CiAgICAgICAgZG91YmxlX21vZCA9IDEgKyBzZWxmLmJvbnVzZXMuY2hhbmNlX3RvX2RvdWJsZSAvIDEwMAogICAgICAgIHByZXNlcnZlX21vZCA9IDEgKyBzZWxmLmJvbnVzZXMuY2hhbmNlX3RvX3ByZXNlcnZlIC8gMTAwCgo8fGZpbV9ob2xlfD4KICAgIGRlZiB0b3RhbF9wcmljZShzZWxmLCBhbW91bnQpOgogICAgICAgIHJldHVybiBzZWxmLndpbGxfcHJvZHVjZShhbW91bnQpICogc2VsZi5wcmljZQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHJldHVybiAoYW1vdW50IC8gc2VsZi5yZWNpcGUpICogc2VsZi5vdXRwdXQgKiBwcmVzZXJ2ZV9tb2QgKiBkb3VibGVfbW9kCgo8fGZpbV9lbmR8Pg=="]
["721002c647ea95570c0bc92fe6337d906c8ce472-4","721002c647ea95570c0bc92fe6337d906c8ce472","PHxmaW1fcHJlZml4fD4KY2xhc3MgQm9udXNlczoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFuY2VfdG9fcHJlc2VydmUsIGNoYW5jZV90b19kb3VibGUpOgogICAgICAgIHNlbGYuY2hhbmNlX3RvX3ByZXNlcnZlID0gY2hhbmNlX3RvX3ByZXNlcnZlCiAgICAgICAgc2VsZi5jaGFuY2VfdG9fZG91YmxlID0gY2hhbmNlX3RvX2RvdWJsZQoKCmNsYXNzIENyYWZ0aW5nOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY2lwZSwgYWN0aW9uX3RpbWUsIGJvbnVzZXMsIG91dHB1dD0xLCBwcmljZT0wKToKICAgICAgICBzZWxmLnJlY2lwZSA9IHJlY2lwZQogICAgICAgIHNlbGYuYWN0aW9uX3RpbWUgPSBhY3Rpb25fdGltZQogICAgICAgIHNlbGYuYm9udXNlcyA9IGJvbnVzZXMKICAgICAgICBzZWxmLm91dHB1dCA9IG91dHB1dAogICAgICAgIHNlbGYucHJpY2UgPSBwcmljZQoKICAgIGRlZiB0aW1lX3RvX3VzZV9hbGwoc2VsZiwgYW1vdW50KToKICAgICAgICBwcmVzZXJ2ZV9tb2QgPSAxICsgc2VsZi5ib251c2VzLmNoYW5jZV90b19wcmVzZXJ2ZSAvIDEwMAoKICAgICAgICByZXR1cm4gKGFtb3VudCAvIHNlbGYucmVjaXBlKSAqIHNlbGYuYWN0aW9uX3RpbWUgKiBwcmVzZXJ2ZV9tb2QKCiAgICBkZWYgd2lsbF9wcm9kdWNlKHNlbGYsIGFtb3VudCk6CiAgICAgICAgZG91YmxlX21vZCA9IDEgKyBzZWxmLmJvbnVzZXMuY2hhbmNlX3RvX2RvdWJsZSAvIDEwMAogICAgICAgIHByZXNlcnZlX21vZCA9IDEgKyBzZWxmLmJvbnVzZXMuY2hhbmNlX3RvX3ByZXNlcnZlIC8gMTAwCgogICAgICAgIHJldHVybiAoYW1vdW50IC8gc2VsZi5yZWNpcGUpICogc2VsZi5vdXRwdXQgKiBwcmVzZXJ2ZV9tb2QgKiBkb3VibGVfbW9kCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KCiAgICBkZWYgdG90YWxfcHJpY2Uoc2VsZiwgYW1vdW50KToKICAgICAgICByZXR1cm4gc2VsZi53aWxsX3Byb2R1Y2UoYW1vdW50KSAqIHNlbGYucHJpY2UKPHxmaW1fZW5kfD4="]
["721002c647ea95570c0bc92fe6337d906c8ce472-5","721002c647ea95570c0bc92fe6337d906c8ce472","PHxmaW1fcHJlZml4fD4KY2xhc3MgQm9udXNlczoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFuY2VfdG9fcHJlc2VydmUsIGNoYW5jZV90b19kb3VibGUpOgogICAgICAgIHNlbGYuY2hhbmNlX3RvX3ByZXNlcnZlID0gY2hhbmNlX3RvX3ByZXNlcnZlCiAgICAgICAgc2VsZi5jaGFuY2VfdG9fZG91YmxlID0gY2hhbmNlX3RvX2RvdWJsZQoKCmNsYXNzIENyYWZ0aW5nOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY2lwZSwgYWN0aW9uX3RpbWUsIGJvbnVzZXMsIG91dHB1dD0xLCBwcmljZT0wKToKICAgICAgICBzZWxmLnJlY2lwZSA9IHJlY2lwZQogICAgICAgIHNlbGYuYWN0aW9uX3RpbWUgPSBhY3Rpb25fdGltZQogICAgICAgIHNlbGYuYm9udXNlcyA9IGJvbnVzZXMKICAgICAgICBzZWxmLm91dHB1dCA9IG91dHB1dAogICAgICAgIHNlbGYucHJpY2UgPSBwcmljZQoKICAgIGRlZiB0aW1lX3RvX3VzZV9hbGwoc2VsZiwgYW1vdW50KToKICAgICAgICBwcmVzZXJ2ZV9tb2QgPSAxICsgc2VsZi5ib251c2VzLmNoYW5jZV90b19wcmVzZXJ2ZSAvIDEwMAoKICAgICAgICByZXR1cm4gKGFtb3VudCAvIHNlbGYucmVjaXBlKSAqIHNlbGYuYWN0aW9uX3RpbWUgKiBwcmVzZXJ2ZV9tb2QKPHxmaW1faG9sZXw+CgogICAgICAgIHJldHVybiAoYW1vdW50IC8gc2VsZi5yZWNpcGUpICogc2VsZi5vdXRwdXQgKiBwcmVzZXJ2ZV9tb2QgKiBkb3VibGVfbW9kCgogICAgZGVmIHRvdGFsX3ByaWNlKHNlbGYsIGFtb3VudCk6CiAgICAgICAgcmV0dXJuIHNlbGYud2lsbF9wcm9kdWNlKGFtb3VudCkgKiBzZWxmLnByaWNlCjx8ZmltX3N1ZmZpeHw+CgogICAgZGVmIHdpbGxfcHJvZHVjZShzZWxmLCBhbW91bnQpOgogICAgICAgIGRvdWJsZV9tb2QgPSAxICsgc2VsZi5ib251c2VzLmNoYW5jZV90b19kb3VibGUgLyAxMDAKICAgICAgICBwcmVzZXJ2ZV9tb2QgPSAxICsgc2VsZi5ib251c2VzLmNoYW5jZV90b19wcmVzZXJ2ZSAvIDEwMAo8fGZpbV9lbmR8Pg=="]
["ffc381384f3300d72c2cda0037f0f4619caedbac-1","ffc381384f3300d72c2cda0037f0f4619caedbac","PHxmaW1fcHJlZml4fD4KIyBhcHAvZWxlcGhhbnRfcXVlcmllcy5weQoKaW1wb3J0IG9zCmltcG9ydCBqc29uCmZyb20gZG90ZW52IGltcG9ydCBsb2FkX2RvdGVudgppbXBvcnQgcHN5Y29wZzIKCgpsb2FkX2RvdGVudigpCgoKREJfTkFNRSA9IG9zLmdldGVudigiREJfTkFNRSIpCkRCX1VTRVIgPSBvcy5nZXRlbnYoIkRCX1VTRVIiKQpEQl9QQVNTV09SRCA9IG9zLmdldGVudigiREJfUEFTU1dPUkQiKQpEQl9IT1NUID0gb3MuZ2V0ZW52KCJEQl9IT1NUIikKCgojIyMgQ29ubmVjdCB0byBFbGVwaGFudFNRTC1ob3N0ZWQgUG9zdGdyZVNRTApDb25uZWN0aW9uID0gcHN5Y29wZzIuY29ubmVjdChkYm5hbWU9REJfTkFNRSwgdXNlcj1EQl9VU0VSLAogICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZD1EQl9QQVNTV09SRCwgaG9zdD1EQl9IT1NUKQojIyMgQSAiY3Vyc29yIiwgYSBzdHJ1Y3R1cmUgdG8gaXRlcmF0ZSBvdmVyIGRiIHJlY29yZHMgdG8gcGVyZm9ybSBxdWVyaWVzCmN1cnNvciA9IGNvbm5lY3Rpb24uY3Vyc29yKCkKIyMjIEFuIGV4YW1wbGUgcXVlcnkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgpjdXJzb3IuZXhlY3V0ZSgnU0VMRUNUICogZnJvbSB0ZXN0X3RhYmxlOycpCiMjIyBOb3RlIC0gbm90aGluZyBoYXBwZW5lZCB5ZXQhIFdlIG5lZWQgdG8gYWN0dWFsbHkgKmZldGNoKiBmcm9tIHRoZSBjdXJzb3IKcmVzdWx0cyA9IGN1cnNvci5mZXRjaG9uZSgpCnByaW50KHJlc3VsdHMpCjx8ZmltX2VuZHw+"]
["ffc381384f3300d72c2cda0037f0f4619caedbac-2","ffc381384f3300d72c2cda0037f0f4619caedbac","PHxmaW1fcHJlZml4fD4KIyBhcHAvZWxlcGhhbnRfcXVlcmllcy5weQoKaW1wb3J0IG9zCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KaW1wb3J0IGpzb24KZnJvbSBkb3RlbnYgaW1wb3J0IGxvYWRfZG90ZW52CmltcG9ydCBwc3ljb3BnMgoKPHxmaW1fZW5kfD4="]
["ffc381384f3300d72c2cda0037f0f4619caedbac-3","ffc381384f3300d72c2cda0037f0f4619caedbac","PHxmaW1fcHJlZml4fD4KIyBhcHAvZWxlcGhhbnRfcXVlcmllcy5weQoKaW1wb3J0IG9zCmltcG9ydCBqc29uCmZyb20gZG90ZW52IGltcG9ydCBsb2FkX2RvdGVudgppbXBvcnQgcHN5Y29wZzIKCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmxvYWRfZG90ZW52KCkKCgpEQl9OQU1FID0gb3MuZ2V0ZW52KCJEQl9OQU1FIikKPHxmaW1fZW5kfD4="]
["5fca0f7dc8a2f7ae78118f3569b2160232fb1a74-1","5fca0f7dc8a2f7ae78118f3569b2160232fb1a74","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOnV0Zi04IC0qLSAgCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCBvcwoKZnJvbSBlYXN5ZGljdCBpbXBvcnQgRWFzeURpY3QgYXMgZWRpY3QKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gZGVlcGxvYWRlci5kYXRhc2V0LmRhdGFzZXRfYmFzZSBpbXBvcnQgQXJyYXlEYXRhc2V0CgoKdGhlX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQoKZGF0YXNldHMgPSBlZGljdCgpCmRhdGFzZXQgPSBkYXRhc2V0cwoKZGF0YV9yb290ID0gb3MucGF0aC5kaXJuYW1lKHRoZV9kaXIpCgojIGN0dzE1MDAKY3R3MTUwMCA9IGVkaWN0KCkKY3R3MTUwMC5uYW1lID0gJ2N0dzE1MDAnCmN0dzE1MDAuZGF0YXNldF9wYXRoID0gZGF0YV9yb290CmN0dzE1MDAuc3BsaXQgPSAndHJhaW4nCmRhdGFzZXQuY3R3MTUwMCA9IGN0dzE1MDAKCiMgaWNkYXIyMDE1CmljZGFyMjAxNSA9IGVkaWN0KCkKaWNkYXIyMDE1Lm5hbWUgPSAnaWNkYXIyMDE1JwppY2RhcjIwMTUuZGF0YXNldF9wYXRoID0gZGF0YV9yb290CmljZGFyMjAxNS5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5pY2RhcjIwMTUgPSBpY2RhcjIwMTUKCiMgaWNkYXIyMDE5bWx0CmljZGFyMjAxOW1sdCA9IGVkaWN0KCkKaWNkYXIyMDE5bWx0Lm5hbWUgPSAnaWNkYXIyMDE5bWx0JwppY2RhcjIwMTltbHQuZGF0YXNldF9wYXRoID0gZGF0YV9yb290CmljZGFyMjAxOW1sdC5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5pY2RhcjIwMTltbHQgPSBpY2RhcjIwMTltbHQKCiMgaWNkYXIyMDE5QXJ0CmljZGFyMjAxOWFydCA9IGVkaWN0KCkKaWNkYXIyMDE5YXJ0Lm5hbWUgPSAnaWNkYXIyMDE5YXJ0JwppY2RhcjIwMTlhcnQuZGF0YXNldF9wYXRoID0gZGF0YV9yb290CmljZGFyMjAxOWFydC5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5pY2RhcjIwMTlhcnQgPSBpY2RhcjIwMTlhcnQKCiMgaWNkYXIyMDE5UmVDVFMKaWNkYXIyMDE5cmVjdHMgPSBlZGljdCgpCmljZGFyMjAxOXJlY3RzLm5hbWUgPSAnaWNkYXIyMDE5cmVjdHMnCmljZGFyMjAxOXJlY3RzLmRhdGFzZXRfcGF0aCA9IGRhdGFfcm9vdAppY2RhcjIwMTlyZWN0cy5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5pY2RhcjIwMTlyZWN0cyA9IGljZGFyMjAxOXJlY3RzCjx8ZmltX2hvbGV8Pgptc3JhdGQ1MDAuZGF0YXNldF9wYXRoID0gZGF0YV9yb290Cm1zcmF0ZDUwMC5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5tc3JhdGQ1MDAgPSBtc3JhdGQ1MDAKCgpjbGFzcyBTcGxpdERhdGFzZXQoQXJyYXlEYXRhc2V0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhc2V0LCBmaWx0ZXI9Tm9uZSwgbmFtZT0nLS0nKToKICAgICAgICAiIiIKICAgICAgICBTcGxpdCBhIGRhdGFzZXQKICAgICAgICA6cGFyYW0gZGF0YXNldDogc291cmNlIGRhdGFzZXQKICAgICAgICA6cGFyYW0gZmlsdGVyOiBzYW1wbGluZyBydWxlLCBsaWtlIGxvdy0wLjUsIGhpZ2gtMTAwCiAgICAgICAgOnBhcmFtIG5hbWU6IGRhdGFzZXQgbmFtZQogICAgICAgIDpyZXR1cm4gc2VsZWN0ZWQgcGFydCBvZiB0aGUgZGF0YXNldC4KICAgICAgICAiIiIKICAgICAgICBBcnJheURhdGFzZXQuX19pbml0X18oc2VsZiwgbmFtZT1uYW1lKQogICAgICAgIHNlbGYuZGF0YXNldCA9IGRhdGFzZXQKICAgICAgICBzZWxmLmZpbHRlciA9IGZpbHRlcgogICAgICAgIHRvdGFsID0gZGF0YXNldC5zaXplKCkKICAgICAgICBpZiBmaWx0ZXIgaXMgTm9uZToKICAgICAgICAgICAgc2VsZi5pYnVmID0gW2kgZm9yIGkgaW4gcmFuZ2UoZGF0YXNldC5zaXplKCkpXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgICMKICAgICAgICAgICAgc2VsZi5pYnVmID0gW10KICAgICAgICAgICAgc2VncyA9IGZpbHRlci5zcGxpdCgnLScpCiAgICAgICAgICAgIHBvcyA9IHNlZ3NbMF0KICAgICAgICAgICAgbnVtID0gZmxvYXQoc2Vnc1sxXSkKICAgICAgICAgICAgaWYgbnVtIDwgMToKICAgICAgICAgICAgICAgIGJhc2UgPSAxMDAKICAgICAgICAgICAgICAgIG51bSA9IGludChudW0gKiBiYXNlKQogICAgICAgICAgICAgICAgaWYgbnVtICUgMTAgPT0gMDoKICAgICAgICAgICAgICAgICAgICBiYXNlID0gMTAKICAgICAgICAgICAgICAgICAgICBudW0gLz0gMTAKCiAgICAgICAgICAgICAgICBpZiBwb3MgPT0gJ2xvdyc6CiAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UodG90YWwpOgogICAgICAgICAgICAgICAgICAgICAgICBpZiBpICUgYmFzZSA8IG51bToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaWJ1Zi5hcHBlbmQoaSkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UodG90YWwpOgogICAgICAgICAgICAgICAgICAgICAgICBpZiBpICUgYmFzZSA+PSAoYmFzZS1udW0pOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pYnVmLmFwcGVuZChpKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbnVtID0gaW50KG51bSkKICAgICAgICAgICAgICAgIGlmIHBvcyA9PSAnbG93JzoKICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSh0b3RhbCk6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGkgPCBudW06CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlidWYuYXBwZW5kKGkpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHRvdGFsKToKICAgICAgICAgICAgICAgICAgICAgICAgaWYgaSA+PSAodG90YWwtbnVtKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaWJ1Zi5hcHBlbmQoaSkKICAgICAgICAjIHByaW50KHNlbGYuaWJ1ZikKCiAgICBkZWYgc2l6ZShzZWxmKToKICAgICAgICByZXR1cm4gbGVuKHNlbGYuaWJ1ZikKCiAgICBkZWYgZ2V0RGF0YShzZWxmLCBpbmRleCk6CiAgICAgICAgcmV0dXJuIHNlbGYuZGF0YXNldC5nZXREYXRhKHNlbGYuaWJ1ZltpbmRleF0pCgoKZGVmIGdldF9kYXRhc2V0X2J5X25hbWUobmFtZSwgKmFyZ3MsICoqa2FyZ3MpOgogICAgbmFtZXMgPSBbXQogICAgaWYgaXNpbnN0YW5jZShuYW1lLCBsaXN0KToKICAgICAgICBuYW1lcyA9IG5hbWUKICAgIGVsaWYgaXNpbnN0YW5jZShuYW1lLCBzdHIpOgogICAgICAgIG5hbWVzID0gbmFtZS5zcGxpdCgnOycpCgogICAgaWYgbGVuKG5hbWVzKSA+IDE6CiAgICAgICAgZnJvbSBkZWVwbG9hZGVyLmRhdGFzZXQuZGF0YXNldF9tdWx0aSBpbXBvcnQgTXVsdGlEYXRhc2V0CiAgICAgICAgbWVyZ2VkID0gTXVsdGlEYXRhc2V0KCk7CiAgICAgICAgZm9yIGl0ZW0gaW4gbmFtZXM6CiAgICAgICAgICAgIGRzID0gZ2V0X2RhdGFzZXRfYnlfbmFtZShpdGVtLCAqYXJncywgKiprYXJncykKICAgICAgICAgICAgbWVyZ2VkLmFkZChkcywgMCkKICAgICAgICByZXR1cm4gbWVyZ2VkCgogICAgIyBkYXRhc2V0IGZhY3RvcnkKICAgIGRzID0gZ2V0YXR0cihkYXRhc2V0LCBuYW1lKQogICAgXywgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChkcy5kYXRhc2V0X3BhdGgpCiAgICBkYXRhID0gTm9uZQogICAgc3BsaXQgPSBkcy5zcGxpdAogICAgZGF0YXNldF9wYXRoID0gZHMuZGF0YXNldF9wYXRoCiAgICBpZiAnc3BsaXQnIGluIGthcmdzOgogICAgICAgIHNwbGl0ID0ga2FyZ3NbJ3NwbGl0J10KICAgIGlmICdkYXRhX3Jvb3QnIGluIGthcmdzOgogICAgICAgIGRhdGFzZXRfcGF0aCA9IGthcmdzWydkYXRhX3Jvb3QnXQogICAgaWYgbmFtZSA9PSAnY3R3MTUwMCc6CiAgICAgICAgZnJvbSBkYXRhc2V0X2N0dzE1MDAgaW1wb3J0IENUVzE1MDBEYXRhc2V0CiAgICAgICAgZGF0YSA9IENUVzE1MDBEYXRhc2V0KGRhdGFzZXRfcGF0aCwgc3BsaXQsIG5hbWU9ZHMubmFtZSkKICAgIGVsaWYgbmFtZSA9PSAnaWNkYXIyMDE1JzoKICAgICAgICBmcm9tIGRhdGFzZXRfaWNkYXIyMDE1IGltcG9ydCBJQ0RBUjIwMTVEYXRhc2V0CiAgICAgICAgZGF0YSA9IElDREFSMjAxNURhdGFzZXQoZGF0YXNldF9wYXRoLCBzcGxpdCwgbmFtZT1kcy5uYW1lKQogICAgZWxpZiBuYW1lID09ICdpY2RhcjIwMTltbHQnOgogICAgICAgIGZyb20gZGF0YXNldF9pY2RhcjIwMTlNTFQgaW1wb3J0IElDREFSMjAxOU1MVERhdGFzZXQKICAgICAgICBkYXRhID0gSUNEQVIyMDE5TUxURGF0YXNldChkYXRhc2V0X3BhdGgsIHNwbGl0LCBuYW1lPWRzLm5hbWUpCiAgICBlbGlmIG5hbWUgPT0gJ2ljZGFyMjAxOWFydCc6CiAgICAgICAgZnJvbSBkYXRhc2V0X2ljZGFyMjAxOUFyVCBpbXBvcnQgSUNEQVIyMDE5QVJURGF0YXNldAogICAgICAgIGRhdGEgPSBJQ0RBUjIwMTlBUlREYXRhc2V0KGRhdGFzZXRfcGF0aCwgc3BsaXQsIG5hbWU9ZHMubmFtZSkKICAgIGVsaWYgbmFtZSA9PSAnaWNkYXIyMDE5cmVjdHMnOgogICAgICAgIGZyb20gZGF0YXNldF9pY2RhcjIwMTlSZUNUUyBpbXBvcnQgSUNEQVIyMDE5UmVDVFNEYXRhc2V0CiAgICAgICAgZGF0YSA9IElDREFSMjAxOVJlQ1RTRGF0YXNldChkYXRhc2V0X3BhdGgsIHNwbGl0LCBuYW1lPWRzLm5hbWUpCiAgICBlbGlmIG5hbWUgPT0gJ21zcmF0ZDUwMCc6CiAgICAgICAgZnJvbSBkYXRhc2V0X21zcmF0ZDUwMCBpbXBvcnQgTVNSQVRENTAwRGF0YXNldAogICAgICAgIGRhdGEgPSBNU1JBVEQ1MDBEYXRhc2V0KGRhdGFzZXRfcGF0aCwgc3BsaXQsIG5hbWU9ZHMubmFtZSkKCiAgICBpZiAnZmlsdGVyJyBpbiBrYXJncyBhbmQga2FyZ3NbJ2ZpbHRlciddOgogICAgICAgIGRhdGEgPSBTcGxpdERhdGFzZXQoZGF0YSwga2FyZ3NbJ2ZpbHRlciddLCBkYXRhLm5hbWUpCiAgICByZXR1cm4gZGF0YQo8fGZpbV9zdWZmaXh8PgoKIyBpY2RhcjIwMTlSZUNUUwptc3JhdGQ1MDAgPSBlZGljdCgpCm1zcmF0ZDUwMC5uYW1lID0gJ21zcmF0ZDUwMCcKPHxmaW1fZW5kfD4="]
["5fca0f7dc8a2f7ae78118f3569b2160232fb1a74-2","5fca0f7dc8a2f7ae78118f3569b2160232fb1a74","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOnV0Zi04IC0qLSAgCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCBvcwoKZnJvbSBlYXN5ZGljdCBpbXBvcnQgRWFzeURpY3QgYXMgZWRpY3QKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gZGVlcGxvYWRlci5kYXRhc2V0LmRhdGFzZXRfYmFzZSBpbXBvcnQgQXJyYXlEYXRhc2V0CgoKdGhlX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQoKZGF0YXNldHMgPSBlZGljdCgpCmRhdGFzZXQgPSBkYXRhc2V0cwoKZGF0YV9yb290ID0gb3MucGF0aC5kaXJuYW1lKHRoZV9kaXIpCgojIGN0dzE1MDAKY3R3MTUwMCA9IGVkaWN0KCkKY3R3MTUwMC5uYW1lID0gJ2N0dzE1MDAnCmN0dzE1MDAuZGF0YXNldF9wYXRoID0gZGF0YV9yb290CmN0dzE1MDAuc3BsaXQgPSAndHJhaW4nCmRhdGFzZXQuY3R3MTUwMCA9IGN0dzE1MDAKCiMgaWNkYXIyMDE1CmljZGFyMjAxNSA9IGVkaWN0KCkKaWNkYXIyMDE1Lm5hbWUgPSAnaWNkYXIyMDE1JwppY2RhcjIwMTUuZGF0YXNldF9wYXRoID0gZGF0YV9yb290CmljZGFyMjAxNS5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5pY2RhcjIwMTUgPSBpY2RhcjIwMTUKCiMgaWNkYXIyMDE5bWx0CmljZGFyMjAxOW1sdCA9IGVkaWN0KCkKaWNkYXIyMDE5bWx0Lm5hbWUgPSAnaWNkYXIyMDE5bWx0JwppY2RhcjIwMTltbHQuZGF0YXNldF9wYXRoID0gZGF0YV9yb290CmljZGFyMjAxOW1sdC5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5pY2RhcjIwMTltbHQgPSBpY2RhcjIwMTltbHQKCiMgaWNkYXIyMDE5QXJ0CmljZGFyMjAxOWFydCA9IGVkaWN0KCkKaWNkYXIyMDE5YXJ0Lm5hbWUgPSAnaWNkYXIyMDE5YXJ0JwppY2RhcjIwMTlhcnQuZGF0YXNldF9wYXRoID0gZGF0YV9yb290CmljZGFyMjAxOWFydC5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5pY2RhcjIwMTlhcnQgPSBpY2RhcjIwMTlhcnQKCiMgaWNkYXIyMDE5UmVDVFMKaWNkYXIyMDE5cmVjdHMgPSBlZGljdCgpCmljZGFyMjAxOXJlY3RzLm5hbWUgPSAnaWNkYXIyMDE5cmVjdHMnCmljZGFyMjAxOXJlY3RzLmRhdGFzZXRfcGF0aCA9IGRhdGFfcm9vdAppY2RhcjIwMTlyZWN0cy5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5pY2RhcjIwMTlyZWN0cyA9IGljZGFyMjAxOXJlY3RzCjx8ZmltX2hvbGV8Pgptc3JhdGQ1MDAuZGF0YXNldF9wYXRoID0gZGF0YV9yb290Cm1zcmF0ZDUwMC5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5tc3JhdGQ1MDAgPSBtc3JhdGQ1MDAKCgpjbGFzcyBTcGxpdERhdGFzZXQoQXJyYXlEYXRhc2V0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhc2V0LCBmaWx0ZXI9Tm9uZSwgbmFtZT0nLS0nKToKICAgICAgICAiIiIKICAgICAgICBTcGxpdCBhIGRhdGFzZXQKICAgICAgICA6cGFyYW0gZGF0YXNldDogc291cmNlIGRhdGFzZXQKICAgICAgICA6cGFyYW0gZmlsdGVyOiBzYW1wbGluZyBydWxlLCBsaWtlIGxvdy0wLjUsIGhpZ2gtMTAwCiAgICAgICAgOnBhcmFtIG5hbWU6IGRhdGFzZXQgbmFtZQogICAgICAgIDpyZXR1cm4gc2VsZWN0ZWQgcGFydCBvZiB0aGUgZGF0YXNldC4KICAgICAgICAiIiIKICAgICAgICBBcnJheURhdGFzZXQuX19pbml0X18oc2VsZiwgbmFtZT1uYW1lKQogICAgICAgIHNlbGYuZGF0YXNldCA9IGRhdGFzZXQKICAgICAgICBzZWxmLmZpbHRlciA9IGZpbHRlcgogICAgICAgIHRvdGFsID0gZGF0YXNldC5zaXplKCkKICAgICAgICBpZiBmaWx0ZXIgaXMgTm9uZToKICAgICAgICAgICAgc2VsZi5pYnVmID0gW2kgZm9yIGkgaW4gcmFuZ2UoZGF0YXNldC5zaXplKCkpXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgICMKICAgICAgICAgICAgc2VsZi5pYnVmID0gW10KICAgICAgICAgICAgc2VncyA9IGZpbHRlci5zcGxpdCgnLScpCiAgICAgICAgICAgIHBvcyA9IHNlZ3NbMF0KICAgICAgICAgICAgbnVtID0gZmxvYXQoc2Vnc1sxXSkKICAgICAgICAgICAgaWYgbnVtIDwgMToKICAgICAgICAgICAgICAgIGJhc2UgPSAxMDAKICAgICAgICAgICAgICAgIG51bSA9IGludChudW0gKiBiYXNlKQogICAgICAgICAgICAgICAgaWYgbnVtICUgMTAgPT0gMDoKICAgICAgICAgICAgICAgICAgICBiYXNlID0gMTAKICAgICAgICAgICAgICAgICAgICBudW0gLz0gMTAKCiAgICAgICAgICAgICAgICBpZiBwb3MgPT0gJ2xvdyc6CiAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UodG90YWwpOgogICAgICAgICAgICAgICAgICAgICAgICBpZiBpICUgYmFzZSA8IG51bToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaWJ1Zi5hcHBlbmQoaSkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UodG90YWwpOgogICAgICAgICAgICAgICAgICAgICAgICBpZiBpICUgYmFzZSA+PSAoYmFzZS1udW0pOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pYnVmLmFwcGVuZChpKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbnVtID0gaW50KG51bSkKICAgICAgICAgICAgICAgIGlmIHBvcyA9PSAnbG93JzoKICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSh0b3RhbCk6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGkgPCBudW06CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlidWYuYXBwZW5kKGkpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHRvdGFsKToKICAgICAgICAgICAgICAgICAgICAgICAgaWYgaSA+PSAodG90YWwtbnVtKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaWJ1Zi5hcHBlbmQoaSkKICAgICAgICAjIHByaW50KHNlbGYuaWJ1ZikKCiAgICBkZWYgc2l6ZShzZWxmKToKICAgICAgICByZXR1cm4gbGVuKHNlbGYuaWJ1ZikKCiAgICBkZWYgZ2V0RGF0YShzZWxmLCBpbmRleCk6CiAgICAgICAgcmV0dXJuIHNlbGYuZGF0YXNldC5nZXREYXRhKHNlbGYuaWJ1ZltpbmRleF0pCgoKZGVmIGdldF9kYXRhc2V0X2J5X25hbWUobmFtZSwgKmFyZ3MsICoqa2FyZ3MpOgogICAgbmFtZXMgPSBbXQogICAgaWYgaXNpbnN0YW5jZShuYW1lLCBsaXN0KToKICAgICAgICBuYW1lcyA9IG5hbWUKICAgIGVsaWYgaXNpbnN0YW5jZShuYW1lLCBzdHIpOgogICAgICAgIG5hbWVzID0gbmFtZS5zcGxpdCgnOycpCgogICAgaWYgbGVuKG5hbWVzKSA+IDE6CiAgICAgICAgZnJvbSBkZWVwbG9hZGVyLmRhdGFzZXQuZGF0YXNldF9tdWx0aSBpbXBvcnQgTXVsdGlEYXRhc2V0CiAgICAgICAgbWVyZ2VkID0gTXVsdGlEYXRhc2V0KCk7CiAgICAgICAgZm9yIGl0ZW0gaW4gbmFtZXM6CiAgICAgICAgICAgIGRzID0gZ2V0X2RhdGFzZXRfYnlfbmFtZShpdGVtLCAqYXJncywgKiprYXJncykKICAgICAgICAgICAgbWVyZ2VkLmFkZChkcywgMCkKICAgICAgICByZXR1cm4gbWVyZ2VkCgogICAgIyBkYXRhc2V0IGZhY3RvcnkKICAgIGRzID0gZ2V0YXR0cihkYXRhc2V0LCBuYW1lKQogICAgXywgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChkcy5kYXRhc2V0X3BhdGgpCiAgICBkYXRhID0gTm9uZQogICAgc3BsaXQgPSBkcy5zcGxpdAogICAgZGF0YXNldF9wYXRoID0gZHMuZGF0YXNldF9wYXRoCiAgICBpZiAnc3BsaXQnIGluIGthcmdzOgogICAgICAgIHNwbGl0ID0ga2FyZ3NbJ3NwbGl0J10KICAgIGlmICdkYXRhX3Jvb3QnIGluIGthcmdzOgogICAgICAgIGRhdGFzZXRfcGF0aCA9IGthcmdzWydkYXRhX3Jvb3QnXQogICAgaWYgbmFtZSA9PSAnY3R3MTUwMCc6CiAgICAgICAgZnJvbSBkYXRhc2V0X2N0dzE1MDAgaW1wb3J0IENUVzE1MDBEYXRhc2V0CiAgICAgICAgZGF0YSA9IENUVzE1MDBEYXRhc2V0KGRhdGFzZXRfcGF0aCwgc3BsaXQsIG5hbWU9ZHMubmFtZSkKICAgIGVsaWYgbmFtZSA9PSAnaWNkYXIyMDE1JzoKICAgICAgICBmcm9tIGRhdGFzZXRfaWNkYXIyMDE1IGltcG9ydCBJQ0RBUjIwMTVEYXRhc2V0CiAgICAgICAgZGF0YSA9IElDREFSMjAxNURhdGFzZXQoZGF0YXNldF9wYXRoLCBzcGxpdCwgbmFtZT1kcy5uYW1lKQogICAgZWxpZiBuYW1lID09ICdpY2RhcjIwMTltbHQnOgogICAgICAgIGZyb20gZGF0YXNldF9pY2RhcjIwMTlNTFQgaW1wb3J0IElDREFSMjAxOU1MVERhdGFzZXQKICAgICAgICBkYXRhID0gSUNEQVIyMDE5TUxURGF0YXNldChkYXRhc2V0X3BhdGgsIHNwbGl0LCBuYW1lPWRzLm5hbWUpCiAgICBlbGlmIG5hbWUgPT0gJ2ljZGFyMjAxOWFydCc6CiAgICAgICAgZnJvbSBkYXRhc2V0X2ljZGFyMjAxOUFyVCBpbXBvcnQgSUNEQVIyMDE5QVJURGF0YXNldAogICAgICAgIGRhdGEgPSBJQ0RBUjIwMTlBUlREYXRhc2V0KGRhdGFzZXRfcGF0aCwgc3BsaXQsIG5hbWU9ZHMubmFtZSkKICAgIGVsaWYgbmFtZSA9PSAnaWNkYXIyMDE5cmVjdHMnOgogICAgICAgIGZyb20gZGF0YXNldF9pY2RhcjIwMTlSZUNUUyBpbXBvcnQgSUNEQVIyMDE5UmVDVFNEYXRhc2V0CiAgICAgICAgZGF0YSA9IElDREFSMjAxOVJlQ1RTRGF0YXNldChkYXRhc2V0X3BhdGgsIHNwbGl0LCBuYW1lPWRzLm5hbWUpCiAgICBlbGlmIG5hbWUgPT0gJ21zcmF0ZDUwMCc6CiAgICAgICAgZnJvbSBkYXRhc2V0X21zcmF0ZDUwMCBpbXBvcnQgTVNSQVRENTAwRGF0YXNldAogICAgICAgIGRhdGEgPSBNU1JBVEQ1MDBEYXRhc2V0KGRhdGFzZXRfcGF0aCwgc3BsaXQsIG5hbWU9ZHMubmFtZSkKCiAgICBpZiAnZmlsdGVyJyBpbiBrYXJncyBhbmQga2FyZ3NbJ2ZpbHRlciddOgogICAgICAgIGRhdGEgPSBTcGxpdERhdGFzZXQoZGF0YSwga2FyZ3NbJ2ZpbHRlciddLCBkYXRhLm5hbWUpCiAgICByZXR1cm4gZGF0YQo8fGZpbV9zdWZmaXh8PgoKIyBpY2RhcjIwMTlSZUNUUwptc3JhdGQ1MDAgPSBlZGljdCgpCm1zcmF0ZDUwMC5uYW1lID0gJ21zcmF0ZDUwMCcKPHxmaW1fZW5kfD4="]
["5fca0f7dc8a2f7ae78118f3569b2160232fb1a74-3","5fca0f7dc8a2f7ae78118f3569b2160232fb1a74","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOnV0Zi04IC0qLSAgCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCBvcwoKZnJvbSBlYXN5ZGljdCBpbXBvcnQgRWFzeURpY3QgYXMgZWRpY3QKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gZGVlcGxvYWRlci5kYXRhc2V0LmRhdGFzZXRfYmFzZSBpbXBvcnQgQXJyYXlEYXRhc2V0CgoKdGhlX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQoKZGF0YXNldHMgPSBlZGljdCgpCmRhdGFzZXQgPSBkYXRhc2V0cwoKZGF0YV9yb290ID0gb3MucGF0aC5kaXJuYW1lKHRoZV9kaXIpCgojIGN0dzE1MDAKY3R3MTUwMCA9IGVkaWN0KCkKY3R3MTUwMC5uYW1lID0gJ2N0dzE1MDAnCmN0dzE1MDAuZGF0YXNldF9wYXRoID0gZGF0YV9yb290CmN0dzE1MDAuc3BsaXQgPSAndHJhaW4nCmRhdGFzZXQuY3R3MTUwMCA9IGN0dzE1MDAKCiMgaWNkYXIyMDE1CmljZGFyMjAxNSA9IGVkaWN0KCkKaWNkYXIyMDE1Lm5hbWUgPSAnaWNkYXIyMDE1JwppY2RhcjIwMTUuZGF0YXNldF9wYXRoID0gZGF0YV9yb290CmljZGFyMjAxNS5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5pY2RhcjIwMTUgPSBpY2RhcjIwMTUKCiMgaWNkYXIyMDE5bWx0Cjx8ZmltX2hvbGV8PgpkYXRhc2V0LmljZGFyMjAxOW1sdCA9IGljZGFyMjAxOW1sdAoKIyBpY2RhcjIwMTlBcnQKaWNkYXIyMDE5YXJ0ID0gZWRpY3QoKQppY2RhcjIwMTlhcnQubmFtZSA9ICdpY2RhcjIwMTlhcnQnCmljZGFyMjAxOWFydC5kYXRhc2V0X3BhdGggPSBkYXRhX3Jvb3QKaWNkYXIyMDE5YXJ0LnNwbGl0ID0gJ3RyYWluJwpkYXRhc2V0LmljZGFyMjAxOWFydCA9IGljZGFyMjAxOWFydAoKIyBpY2RhcjIwMTlSZUNUUwppY2RhcjIwMTlyZWN0cyA9IGVkaWN0KCkKaWNkYXIyMDE5cmVjdHMubmFtZSA9ICdpY2RhcjIwMTlyZWN0cycKaWNkYXIyMDE5cmVjdHMuZGF0YXNldF9wYXRoID0gZGF0YV9yb290CmljZGFyMjAxOXJlY3RzLnNwbGl0ID0gJ3RyYWluJwpkYXRhc2V0LmljZGFyMjAxOXJlY3RzID0gaWNkYXIyMDE5cmVjdHMKCiMgaWNkYXIyMDE5UmVDVFMKbXNyYXRkNTAwID0gZWRpY3QoKQptc3JhdGQ1MDAubmFtZSA9ICdtc3JhdGQ1MDAnCm1zcmF0ZDUwMC5kYXRhc2V0X3BhdGggPSBkYXRhX3Jvb3QKbXNyYXRkNTAwLnNwbGl0ID0gJ3RyYWluJwpkYXRhc2V0Lm1zcmF0ZDUwMCA9IG1zcmF0ZDUwMAoKCmNsYXNzIFNwbGl0RGF0YXNldChBcnJheURhdGFzZXQpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGFzZXQsIGZpbHRlcj1Ob25lLCBuYW1lPSctLScpOgogICAgICAgICIiIgogICAgICAgIFNwbGl0IGEgZGF0YXNldAogICAgICAgIDpwYXJhbSBkYXRhc2V0OiBzb3VyY2UgZGF0YXNldAogICAgICAgIDpwYXJhbSBmaWx0ZXI6IHNhbXBsaW5nIHJ1bGUsIGxpa2UgbG93LTAuNSwgaGlnaC0xMDAKICAgICAgICA6cGFyYW0gbmFtZTogZGF0YXNldCBuYW1lCiAgICAgICAgOnJldHVybiBzZWxlY3RlZCBwYXJ0IG9mIHRoZSBkYXRhc2V0LgogICAgICAgICIiIgogICAgICAgIEFycmF5RGF0YXNldC5fX2luaXRfXyhzZWxmLCBuYW1lPW5hbWUpCiAgICAgICAgc2VsZi5kYXRhc2V0ID0gZGF0YXNldAogICAgICAgIHNlbGYuZmlsdGVyID0gZmlsdGVyCiAgICAgICAgdG90YWwgPSBkYXRhc2V0LnNpemUoKQogICAgICAgIGlmIGZpbHRlciBpcyBOb25lOgogICAgICAgICAgICBzZWxmLmlidWYgPSBbaSBmb3IgaSBpbiByYW5nZShkYXRhc2V0LnNpemUoKSldCiAgICAgICAgZWxzZToKICAgICAgICAgICAgIwogICAgICAgICAgICBzZWxmLmlidWYgPSBbXQogICAgICAgICAgICBzZWdzID0gZmlsdGVyLnNwbGl0KCctJykKICAgICAgICAgICAgcG9zID0gc2Vnc1swXQogICAgICAgICAgICBudW0gPSBmbG9hdChzZWdzWzFdKQogICAgICAgICAgICBpZiBudW0gPCAxOgogICAgICAgICAgICAgICAgYmFzZSA9IDEwMAogICAgICAgICAgICAgICAgbnVtID0gaW50KG51bSAqIGJhc2UpCiAgICAgICAgICAgICAgICBpZiBudW0gJSAxMCA9PSAwOgogICAgICAgICAgICAgICAgICAgIGJhc2UgPSAxMAogICAgICAgICAgICAgICAgICAgIG51bSAvPSAxMAoKICAgICAgICAgICAgICAgIGlmIHBvcyA9PSAnbG93JzoKICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSh0b3RhbCk6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGkgJSBiYXNlIDwgbnVtOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pYnVmLmFwcGVuZChpKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSh0b3RhbCk6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGkgJSBiYXNlID49IChiYXNlLW51bSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlidWYuYXBwZW5kKGkpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBudW0gPSBpbnQobnVtKQogICAgICAgICAgICAgICAgaWYgcG9zID09ICdsb3cnOgogICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHRvdGFsKToKICAgICAgICAgICAgICAgICAgICAgICAgaWYgaSA8IG51bToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaWJ1Zi5hcHBlbmQoaSkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UodG90YWwpOgogICAgICAgICAgICAgICAgICAgICAgICBpZiBpID49ICh0b3RhbC1udW0pOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pYnVmLmFwcGVuZChpKQogICAgICAgICMgcHJpbnQoc2VsZi5pYnVmKQoKICAgIGRlZiBzaXplKHNlbGYpOgogICAgICAgIHJldHVybiBsZW4oc2VsZi5pYnVmKQoKICAgIGRlZiBnZXREYXRhKHNlbGYsIGluZGV4KToKICAgICAgICByZXR1cm4gc2VsZi5kYXRhc2V0LmdldERhdGEoc2VsZi5pYnVmW2luZGV4XSkKCgpkZWYgZ2V0X2RhdGFzZXRfYnlfbmFtZShuYW1lLCAqYXJncywgKiprYXJncyk6CiAgICBuYW1lcyA9IFtdCiAgICBpZiBpc2luc3RhbmNlKG5hbWUsIGxpc3QpOgogICAgICAgIG5hbWVzID0gbmFtZQogICAgZWxpZiBpc2luc3RhbmNlKG5hbWUsIHN0cik6CiAgICAgICAgbmFtZXMgPSBuYW1lLnNwbGl0KCc7JykKCiAgICBpZiBsZW4obmFtZXMpID4gMToKICAgICAgICBmcm9tIGRlZXBsb2FkZXIuZGF0YXNldC5kYXRhc2V0X211bHRpIGltcG9ydCBNdWx0aURhdGFzZXQKICAgICAgICBtZXJnZWQgPSBNdWx0aURhdGFzZXQoKTsKICAgICAgICBmb3IgaXRlbSBpbiBuYW1lczoKICAgICAgICAgICAgZHMgPSBnZXRfZGF0YXNldF9ieV9uYW1lKGl0ZW0sICphcmdzLCAqKmthcmdzKQogICAgICAgICAgICBtZXJnZWQuYWRkKGRzLCAwKQogICAgICAgIHJldHVybiBtZXJnZWQKCiAgICAjIGRhdGFzZXQgZmFjdG9yeQogICAgZHMgPSBnZXRhdHRyKGRhdGFzZXQsIG5hbWUpCiAgICBfLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGRzLmRhdGFzZXRfcGF0aCkKICAgIGRhdGEgPSBOb25lCiAgICBzcGxpdCA9IGRzLnNwbGl0CiAgICBkYXRhc2V0X3BhdGggPSBkcy5kYXRhc2V0X3BhdGgKICAgIGlmICdzcGxpdCcgaW4ga2FyZ3M6CiAgICAgICAgc3BsaXQgPSBrYXJnc1snc3BsaXQnXQogICAgaWYgJ2RhdGFfcm9vdCcgaW4ga2FyZ3M6CiAgICAgICAgZGF0YXNldF9wYXRoID0ga2FyZ3NbJ2RhdGFfcm9vdCddCiAgICBpZiBuYW1lID09ICdjdHcxNTAwJzoKICAgICAgICBmcm9tIGRhdGFzZXRfY3R3MTUwMCBpbXBvcnQgQ1RXMTUwMERhdGFzZXQKICAgICAgICBkYXRhID0gQ1RXMTUwMERhdGFzZXQoZGF0YXNldF9wYXRoLCBzcGxpdCwgbmFtZT1kcy5uYW1lKQogICAgZWxpZiBuYW1lID09ICdpY2RhcjIwMTUnOgogICAgICAgIGZyb20gZGF0YXNldF9pY2RhcjIwMTUgaW1wb3J0IElDREFSMjAxNURhdGFzZXQKICAgICAgICBkYXRhID0gSUNEQVIyMDE1RGF0YXNldChkYXRhc2V0X3BhdGgsIHNwbGl0LCBuYW1lPWRzLm5hbWUpCiAgICBlbGlmIG5hbWUgPT0gJ2ljZGFyMjAxOW1sdCc6CiAgICAgICAgZnJvbSBkYXRhc2V0X2ljZGFyMjAxOU1MVCBpbXBvcnQgSUNEQVIyMDE5TUxURGF0YXNldAogICAgICAgIGRhdGEgPSBJQ0RBUjIwMTlNTFREYXRhc2V0KGRhdGFzZXRfcGF0aCwgc3BsaXQsIG5hbWU9ZHMubmFtZSkKICAgIGVsaWYgbmFtZSA9PSAnaWNkYXIyMDE5YXJ0JzoKICAgICAgICBmcm9tIGRhdGFzZXRfaWNkYXIyMDE5QXJUIGltcG9ydCBJQ0RBUjIwMTlBUlREYXRhc2V0CiAgICAgICAgZGF0YSA9IElDREFSMjAxOUFSVERhdGFzZXQoZGF0YXNldF9wYXRoLCBzcGxpdCwgbmFtZT1kcy5uYW1lKQogICAgZWxpZiBuYW1lID09ICdpY2RhcjIwMTlyZWN0cyc6CiAgICAgICAgZnJvbSBkYXRhc2V0X2ljZGFyMjAxOVJlQ1RTIGltcG9ydCBJQ0RBUjIwMTlSZUNUU0RhdGFzZXQKICAgICAgICBkYXRhID0gSUNEQVIyMDE5UmVDVFNEYXRhc2V0KGRhdGFzZXRfcGF0aCwgc3BsaXQsIG5hbWU9ZHMubmFtZSkKICAgIGVsaWYgbmFtZSA9PSAnbXNyYXRkNTAwJzoKICAgICAgICBmcm9tIGRhdGFzZXRfbXNyYXRkNTAwIGltcG9ydCBNU1JBVEQ1MDBEYXRhc2V0CiAgICAgICAgZGF0YSA9IE1TUkFURDUwMERhdGFzZXQoZGF0YXNldF9wYXRoLCBzcGxpdCwgbmFtZT1kcy5uYW1lKQoKICAgIGlmICdmaWx0ZXInIGluIGthcmdzIGFuZCBrYXJnc1snZmlsdGVyJ106CiAgICAgICAgZGF0YSA9IFNwbGl0RGF0YXNldChkYXRhLCBrYXJnc1snZmlsdGVyJ10sIGRhdGEubmFtZSkKICAgIHJldHVybiBkYXRhCjx8ZmltX3N1ZmZpeHw+CmljZGFyMjAxOW1sdCA9IGVkaWN0KCkKaWNkYXIyMDE5bWx0Lm5hbWUgPSAnaWNkYXIyMDE5bWx0JwppY2RhcjIwMTltbHQuZGF0YXNldF9wYXRoID0gZGF0YV9yb290CmljZGFyMjAxOW1sdC5zcGxpdCA9ICd0cmFpbicKPHxmaW1fZW5kfD4="]
["5fca0f7dc8a2f7ae78118f3569b2160232fb1a74-4","5fca0f7dc8a2f7ae78118f3569b2160232fb1a74","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOnV0Zi04IC0qLSAgCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCBvcwoKZnJvbSBlYXN5ZGljdCBpbXBvcnQgRWFzeURpY3QgYXMgZWRpY3QKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gZGVlcGxvYWRlci5kYXRhc2V0LmRhdGFzZXRfYmFzZSBpbXBvcnQgQXJyYXlEYXRhc2V0CgoKdGhlX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQoKZGF0YXNldHMgPSBlZGljdCgpCmRhdGFzZXQgPSBkYXRhc2V0cwoKZGF0YV9yb290ID0gb3MucGF0aC5kaXJuYW1lKHRoZV9kaXIpCgojIGN0dzE1MDAKY3R3MTUwMCA9IGVkaWN0KCkKY3R3MTUwMC5uYW1lID0gJ2N0dzE1MDAnCmN0dzE1MDAuZGF0YXNldF9wYXRoID0gZGF0YV9yb290CmN0dzE1MDAuc3BsaXQgPSAndHJhaW4nCmRhdGFzZXQuY3R3MTUwMCA9IGN0dzE1MDAKCiMgaWNkYXIyMDE1CmljZGFyMjAxNSA9IGVkaWN0KCkKaWNkYXIyMDE1Lm5hbWUgPSAnaWNkYXIyMDE1JwppY2RhcjIwMTUuZGF0YXNldF9wYXRoID0gZGF0YV9yb290CmljZGFyMjAxNS5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5pY2RhcjIwMTUgPSBpY2RhcjIwMTUKCiMgaWNkYXIyMDE5bWx0CmljZGFyMjAxOW1sdCA9IGVkaWN0KCkKaWNkYXIyMDE5bWx0Lm5hbWUgPSAnaWNkYXIyMDE5bWx0JwppY2RhcjIwMTltbHQuZGF0YXNldF9wYXRoID0gZGF0YV9yb290CmljZGFyMjAxOW1sdC5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5pY2RhcjIwMTltbHQgPSBpY2RhcjIwMTltbHQKCiMgaWNkYXIyMDE5QXJ0CmljZGFyMjAxOWFydCA9IGVkaWN0KCkKaWNkYXIyMDE5YXJ0Lm5hbWUgPSAnaWNkYXIyMDE5YXJ0JwppY2RhcjIwMTlhcnQuZGF0YXNldF9wYXRoID0gZGF0YV9yb290CmljZGFyMjAxOWFydC5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5pY2RhcjIwMTlhcnQgPSBpY2RhcjIwMTlhcnQKCiMgaWNkYXIyMDE5UmVDVFMKaWNkYXIyMDE5cmVjdHMgPSBlZGljdCgpCmljZGFyMjAxOXJlY3RzLm5hbWUgPSAnaWNkYXIyMDE5cmVjdHMnCmljZGFyMjAxOXJlY3RzLmRhdGFzZXRfcGF0aCA9IGRhdGFfcm9vdAppY2RhcjIwMTlyZWN0cy5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5pY2RhcjIwMTlyZWN0cyA9IGljZGFyMjAxOXJlY3RzCgojIGljZGFyMjAxOVJlQ1RTCm1zcmF0ZDUwMCA9IGVkaWN0KCkKbXNyYXRkNTAwLm5hbWUgPSAnbXNyYXRkNTAwJwptc3JhdGQ1MDAuZGF0YXNldF9wYXRoID0gZGF0YV9yb290Cm1zcmF0ZDUwMC5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5tc3JhdGQ1MDAgPSBtc3JhdGQ1MDAKCgpjbGFzcyBTcGxpdERhdGFzZXQoQXJyYXlEYXRhc2V0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhc2V0LCBmaWx0ZXI9Tm9uZSwgbmFtZT0nLS0nKToKICAgICAgICAiIiIKICAgICAgICBTcGxpdCBhIGRhdGFzZXQKICAgICAgICA6cGFyYW0gZGF0YXNldDogc291cmNlIGRhdGFzZXQKICAgICAgICA6cGFyYW0gZmlsdGVyOiBzYW1wbGluZyBydWxlLCBsaWtlIGxvdy0wLjUsIGhpZ2gtMTAwCiAgICAgICAgOnBhcmFtIG5hbWU6IGRhdGFzZXQgbmFtZQogICAgICAgIDpyZXR1cm4gc2VsZWN0ZWQgcGFydCBvZiB0aGUgZGF0YXNldC4KICAgICAgICAiIiIKICAgICAgICBBcnJheURhdGFzZXQuX19pbml0X18oc2VsZiwgbmFtZT1uYW1lKQogICAgICAgIHNlbGYuZGF0YXNldCA9IGRhdGFzZXQKICAgICAgICBzZWxmLmZpbHRlciA9IGZpbHRlcgogICAgICAgIHRvdGFsID0gZGF0YXNldC5zaXplKCkKICAgICAgICBpZiBmaWx0ZXIgaXMgTm9uZToKICAgICAgICAgICAgc2VsZi5pYnVmID0gW2kgZm9yIGkgaW4gcmFuZ2UoZGF0YXNldC5zaXplKCkpXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgICMKICAgICAgICAgICAgc2VsZi5pYnVmID0gW10KICAgICAgICAgICAgc2VncyA9IGZpbHRlci5zcGxpdCgnLScpCiAgICAgICAgICAgIHBvcyA9IHNlZ3NbMF0KICAgICAgICAgICAgbnVtID0gZmxvYXQoc2Vnc1sxXSkKICAgICAgICAgICAgaWYgbnVtIDwgMToKICAgICAgICAgICAgICAgIGJhc2UgPSAxMDAKICAgICAgICAgICAgICAgIG51bSA9IGludChudW0gKiBiYXNlKQogICAgICAgICAgICAgICAgaWYgbnVtICUgMTAgPT0gMDoKICAgICAgICAgICAgICAgICAgICBiYXNlID0gMTAKICAgICAgICAgICAgICAgICAgICBudW0gLz0gMTAKCiAgICAgICAgICAgICAgICBpZiBwb3MgPT0gJ2xvdyc6CiAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UodG90YWwpOgogICAgICAgICAgICAgICAgICAgICAgICBpZiBpICUgYmFzZSA8IG51bToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaWJ1Zi5hcHBlbmQoaSkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UodG90YWwpOgogICAgICAgICAgICAgICAgICAgICAgICBpZiBpICUgYmFzZSA+PSAoYmFzZS1udW0pOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pYnVmLmFwcGVuZChpKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbnVtID0gaW50KG51bSkKICAgICAgICAgICAgICAgIGlmIHBvcyA9PSAnbG93JzoKICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSh0b3RhbCk6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGkgPCBudW06CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlidWYuYXBwZW5kKGkpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHRvdGFsKToKICAgICAgICAgICAgICAgICAgICAgICAgaWYgaSA+PSAodG90YWwtbnVtKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaWJ1Zi5hcHBlbmQoaSkKICAgICAgICAjIHByaW50KHNlbGYuaWJ1ZikKCiAgICBkZWYgc2l6ZShzZWxmKToKICAgICAgICByZXR1cm4gbGVuKHNlbGYuaWJ1ZikKCiAgICBkZWYgZ2V0RGF0YShzZWxmLCBpbmRleCk6CiAgICAgICAgcmV0dXJuIHNlbGYuZGF0YXNldC5nZXREYXRhKHNlbGYuaWJ1ZltpbmRleF0pCgoKZGVmIGdldF9kYXRhc2V0X2J5X25hbWUobmFtZSwgKmFyZ3MsICoqa2FyZ3MpOgogICAgbmFtZXMgPSBbXQogICAgaWYgaXNpbnN0YW5jZShuYW1lLCBsaXN0KToKICAgICAgICBuYW1lcyA9IG5hbWUKICAgIGVsaWYgaXNpbnN0YW5jZShuYW1lLCBzdHIpOgogICAgICAgIG5hbWVzID0gbmFtZS5zcGxpdCgnOycpCgogICAgaWYgbGVuKG5hbWVzKSA+IDE6CiAgICAgICAgZnJvbSBkZWVwbG9hZGVyLmRhdGFzZXQuZGF0YXNldF9tdWx0aSBpbXBvcnQgTXVsdGlEYXRhc2V0CiAgICAgICAgbWVyZ2VkID0gTXVsdGlEYXRhc2V0KCk7CiAgICAgICAgZm9yIGl0ZW0gaW4gbmFtZXM6CiAgICAgICAgICAgIGRzID0gZ2V0X2RhdGFzZXRfYnlfbmFtZShpdGVtLCAqYXJncywgKiprYXJncykKICAgICAgICAgICAgbWVyZ2VkLmFkZChkcywgMCkKICAgICAgICByZXR1cm4gbWVyZ2VkCgogICAgIyBkYXRhc2V0IGZhY3RvcnkKICAgIGRzID0gZ2V0YXR0cihkYXRhc2V0LCBuYW1lKQogICAgXywgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChkcy5kYXRhc2V0X3BhdGgpCiAgICBkYXRhID0gTm9uZQogICAgc3BsaXQgPSBkcy5zcGxpdAogICAgZGF0YXNldF9wYXRoID0gZHMuZGF0YXNldF9wYXRoCiAgICBpZiAnc3BsaXQnIGluIGthcmdzOgogICAgICAgIHNwbGl0ID0ga2FyZ3NbJ3NwbGl0J10KICAgIGlmICdkYXRhX3Jvb3QnIGluIGthcmdzOgogICAgICAgIGRhdGFzZXRfcGF0aCA9IGthcmdzWydkYXRhX3Jvb3QnXQogICAgaWYgbmFtZSA9PSAnY3R3MTUwMCc6CiAgICAgICAgZnJvbSBkYXRhc2V0X2N0dzE1MDAgaW1wb3J0IENUVzE1MDBEYXRhc2V0CiAgICAgICAgZGF0YSA9IENUVzE1MDBEYXRhc2V0KGRhdGFzZXRfcGF0aCwgc3BsaXQsIG5hbWU9ZHMubmFtZSkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgZWxpZiBuYW1lID09ICdpY2RhcjIwMTUnOgogICAgICAgIGZyb20gZGF0YXNldF9pY2RhcjIwMTUgaW1wb3J0IElDREFSMjAxNURhdGFzZXQKICAgICAgICBkYXRhID0gSUNEQVIyMDE1RGF0YXNldChkYXRhc2V0X3BhdGgsIHNwbGl0LCBuYW1lPWRzLm5hbWUpCiAgICBlbGlmIG5hbWUgPT0gJ2ljZGFyMjAxOW1sdCc6Cjx8ZmltX2VuZHw+"]
["5fca0f7dc8a2f7ae78118f3569b2160232fb1a74-5","5fca0f7dc8a2f7ae78118f3569b2160232fb1a74","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOnV0Zi04IC0qLSAgCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCBvcwoKZnJvbSBlYXN5ZGljdCBpbXBvcnQgRWFzeURpY3QgYXMgZWRpY3QKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gZGVlcGxvYWRlci5kYXRhc2V0LmRhdGFzZXRfYmFzZSBpbXBvcnQgQXJyYXlEYXRhc2V0CgoKdGhlX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQoKZGF0YXNldHMgPSBlZGljdCgpCmRhdGFzZXQgPSBkYXRhc2V0cwoKZGF0YV9yb290ID0gb3MucGF0aC5kaXJuYW1lKHRoZV9kaXIpCgojIGN0dzE1MDAKY3R3MTUwMCA9IGVkaWN0KCkKY3R3MTUwMC5uYW1lID0gJ2N0dzE1MDAnCmN0dzE1MDAuZGF0YXNldF9wYXRoID0gZGF0YV9yb290CmN0dzE1MDAuc3BsaXQgPSAndHJhaW4nCmRhdGFzZXQuY3R3MTUwMCA9IGN0dzE1MDAKCiMgaWNkYXIyMDE1CmljZGFyMjAxNSA9IGVkaWN0KCkKaWNkYXIyMDE1Lm5hbWUgPSAnaWNkYXIyMDE1JwppY2RhcjIwMTUuZGF0YXNldF9wYXRoID0gZGF0YV9yb290CmljZGFyMjAxNS5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5pY2RhcjIwMTUgPSBpY2RhcjIwMTUKCiMgaWNkYXIyMDE5bWx0CmljZGFyMjAxOW1sdCA9IGVkaWN0KCkKaWNkYXIyMDE5bWx0Lm5hbWUgPSAnaWNkYXIyMDE5bWx0JwppY2RhcjIwMTltbHQuZGF0YXNldF9wYXRoID0gZGF0YV9yb290CmljZGFyMjAxOW1sdC5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5pY2RhcjIwMTltbHQgPSBpY2RhcjIwMTltbHQKCiMgaWNkYXIyMDE5QXJ0CmljZGFyMjAxOWFydCA9IGVkaWN0KCkKaWNkYXIyMDE5YXJ0Lm5hbWUgPSAnaWNkYXIyMDE5YXJ0JwppY2RhcjIwMTlhcnQuZGF0YXNldF9wYXRoID0gZGF0YV9yb290CmljZGFyMjAxOWFydC5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5pY2RhcjIwMTlhcnQgPSBpY2RhcjIwMTlhcnQKCiMgaWNkYXIyMDE5UmVDVFMKaWNkYXIyMDE5cmVjdHMgPSBlZGljdCgpCmljZGFyMjAxOXJlY3RzLm5hbWUgPSAnaWNkYXIyMDE5cmVjdHMnCmljZGFyMjAxOXJlY3RzLmRhdGFzZXRfcGF0aCA9IGRhdGFfcm9vdAppY2RhcjIwMTlyZWN0cy5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5pY2RhcjIwMTlyZWN0cyA9IGljZGFyMjAxOXJlY3RzCgojIGljZGFyMjAxOVJlQ1RTCm1zcmF0ZDUwMCA9IGVkaWN0KCkKbXNyYXRkNTAwLm5hbWUgPSAnbXNyYXRkNTAwJwptc3JhdGQ1MDAuZGF0YXNldF9wYXRoID0gZGF0YV9yb290Cm1zcmF0ZDUwMC5zcGxpdCA9ICd0cmFpbicKZGF0YXNldC5tc3JhdGQ1MDAgPSBtc3JhdGQ1MDAKCgpjbGFzcyBTcGxpdERhdGFzZXQoQXJyYXlEYXRhc2V0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhc2V0LCBmaWx0ZXI9Tm9uZSwgbmFtZT0nLS0nKToKICAgICAgICAiIiIKICAgICAgICBTcGxpdCBhIGRhdGFzZXQKICAgICAgICA6cGFyYW0gZGF0YXNldDogc291cmNlIGRhdGFzZXQKICAgICAgICA6cGFyYW0gZmlsdGVyOiBzYW1wbGluZyBydWxlLCBsaWtlIGxvdy0wLjUsIGhpZ2gtMTAwCiAgICAgICAgOnBhcmFtIG5hbWU6IGRhdGFzZXQgbmFtZQogICAgICAgIDpyZXR1cm4gc2VsZWN0ZWQgcGFydCBvZiB0aGUgZGF0YXNldC4KICAgICAgICAiIiIKICAgICAgICBBcnJheURhdGFzZXQuX19pbml0X18oc2VsZiwgbmFtZT1uYW1lKQogICAgICAgIHNlbGYuZGF0YXNldCA9IGRhdGFzZXQKICAgICAgICBzZWxmLmZpbHRlciA9IGZpbHRlcgogICAgICAgIHRvdGFsID0gZGF0YXNldC5zaXplKCkKICAgICAgICBpZiBmaWx0ZXIgaXMgTm9uZToKICAgICAgICAgICAgc2VsZi5pYnVmID0gW2kgZm9yIGkgaW4gcmFuZ2UoZGF0YXNldC5zaXplKCkpXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgICMKICAgICAgICAgICAgc2VsZi5pYnVmID0gW10KICAgICAgICAgICAgc2VncyA9IGZpbHRlci5zcGxpdCgnLScpCiAgICAgICAgICAgIHBvcyA9IHNlZ3NbMF0KICAgICAgICAgICAgbnVtID0gZmxvYXQoc2Vnc1sxXSkKICAgICAgICAgICAgaWYgbnVtIDwgMToKICAgICAgICAgICAgICAgIGJhc2UgPSAxMDAKICAgICAgICAgICAgICAgIG51bSA9IGludChudW0gKiBiYXNlKQogICAgICAgICAgICAgICAgaWYgbnVtICUgMTAgPT0gMDoKICAgICAgICAgICAgICAgICAgICBiYXNlID0gMTAKICAgICAgICAgICAgICAgICAgICBudW0gLz0gMTAKPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlidWYuYXBwZW5kKGkpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHRvdGFsKToKICAgICAgICAgICAgICAgICAgICAgICAgaWYgaSAlIGJhc2UgPj0gKGJhc2UtbnVtKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaWJ1Zi5hcHBlbmQoaSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIG51bSA9IGludChudW0pCiAgICAgICAgICAgICAgICBpZiBwb3MgPT0gJ2xvdyc6CiAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UodG90YWwpOgogICAgICAgICAgICAgICAgICAgICAgICBpZiBpIDwgbnVtOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pYnVmLmFwcGVuZChpKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSh0b3RhbCk6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGkgPj0gKHRvdGFsLW51bSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlidWYuYXBwZW5kKGkpCiAgICAgICAgIyBwcmludChzZWxmLmlidWYpCgogICAgZGVmIHNpemUoc2VsZik6CiAgICAgICAgcmV0dXJuIGxlbihzZWxmLmlidWYpCgogICAgZGVmIGdldERhdGEoc2VsZiwgaW5kZXgpOgogICAgICAgIHJldHVybiBzZWxmLmRhdGFzZXQuZ2V0RGF0YShzZWxmLmlidWZbaW5kZXhdKQoKCmRlZiBnZXRfZGF0YXNldF9ieV9uYW1lKG5hbWUsICphcmdzLCAqKmthcmdzKToKICAgIG5hbWVzID0gW10KICAgIGlmIGlzaW5zdGFuY2UobmFtZSwgbGlzdCk6CiAgICAgICAgbmFtZXMgPSBuYW1lCiAgICBlbGlmIGlzaW5zdGFuY2UobmFtZSwgc3RyKToKICAgICAgICBuYW1lcyA9IG5hbWUuc3BsaXQoJzsnKQoKICAgIGlmIGxlbihuYW1lcykgPiAxOgogICAgICAgIGZyb20gZGVlcGxvYWRlci5kYXRhc2V0LmRhdGFzZXRfbXVsdGkgaW1wb3J0IE11bHRpRGF0YXNldAogICAgICAgIG1lcmdlZCA9IE11bHRpRGF0YXNldCgpOwogICAgICAgIGZvciBpdGVtIGluIG5hbWVzOgogICAgICAgICAgICBkcyA9IGdldF9kYXRhc2V0X2J5X25hbWUoaXRlbSwgKmFyZ3MsICoqa2FyZ3MpCiAgICAgICAgICAgIG1lcmdlZC5hZGQoZHMsIDApCiAgICAgICAgcmV0dXJuIG1lcmdlZAoKICAgICMgZGF0YXNldCBmYWN0b3J5CiAgICBkcyA9IGdldGF0dHIoZGF0YXNldCwgbmFtZSkKICAgIF8sIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZHMuZGF0YXNldF9wYXRoKQogICAgZGF0YSA9IE5vbmUKICAgIHNwbGl0ID0gZHMuc3BsaXQKICAgIGRhdGFzZXRfcGF0aCA9IGRzLmRhdGFzZXRfcGF0aAogICAgaWYgJ3NwbGl0JyBpbiBrYXJnczoKICAgICAgICBzcGxpdCA9IGthcmdzWydzcGxpdCddCiAgICBpZiAnZGF0YV9yb290JyBpbiBrYXJnczoKICAgICAgICBkYXRhc2V0X3BhdGggPSBrYXJnc1snZGF0YV9yb290J10KICAgIGlmIG5hbWUgPT0gJ2N0dzE1MDAnOgogICAgICAgIGZyb20gZGF0YXNldF9jdHcxNTAwIGltcG9ydCBDVFcxNTAwRGF0YXNldAogICAgICAgIGRhdGEgPSBDVFcxNTAwRGF0YXNldChkYXRhc2V0X3BhdGgsIHNwbGl0LCBuYW1lPWRzLm5hbWUpCiAgICBlbGlmIG5hbWUgPT0gJ2ljZGFyMjAxNSc6CiAgICAgICAgZnJvbSBkYXRhc2V0X2ljZGFyMjAxNSBpbXBvcnQgSUNEQVIyMDE1RGF0YXNldAogICAgICAgIGRhdGEgPSBJQ0RBUjIwMTVEYXRhc2V0KGRhdGFzZXRfcGF0aCwgc3BsaXQsIG5hbWU9ZHMubmFtZSkKICAgIGVsaWYgbmFtZSA9PSAnaWNkYXIyMDE5bWx0JzoKICAgICAgICBmcm9tIGRhdGFzZXRfaWNkYXIyMDE5TUxUIGltcG9ydCBJQ0RBUjIwMTlNTFREYXRhc2V0CiAgICAgICAgZGF0YSA9IElDREFSMjAxOU1MVERhdGFzZXQoZGF0YXNldF9wYXRoLCBzcGxpdCwgbmFtZT1kcy5uYW1lKQogICAgZWxpZiBuYW1lID09ICdpY2RhcjIwMTlhcnQnOgogICAgICAgIGZyb20gZGF0YXNldF9pY2RhcjIwMTlBclQgaW1wb3J0IElDREFSMjAxOUFSVERhdGFzZXQKICAgICAgICBkYXRhID0gSUNEQVIyMDE5QVJURGF0YXNldChkYXRhc2V0X3BhdGgsIHNwbGl0LCBuYW1lPWRzLm5hbWUpCiAgICBlbGlmIG5hbWUgPT0gJ2ljZGFyMjAxOXJlY3RzJzoKICAgICAgICBmcm9tIGRhdGFzZXRfaWNkYXIyMDE5UmVDVFMgaW1wb3J0IElDREFSMjAxOVJlQ1RTRGF0YXNldAogICAgICAgIGRhdGEgPSBJQ0RBUjIwMTlSZUNUU0RhdGFzZXQoZGF0YXNldF9wYXRoLCBzcGxpdCwgbmFtZT1kcy5uYW1lKQogICAgZWxpZiBuYW1lID09ICdtc3JhdGQ1MDAnOgogICAgICAgIGZyb20gZGF0YXNldF9tc3JhdGQ1MDAgaW1wb3J0IE1TUkFURDUwMERhdGFzZXQKICAgICAgICBkYXRhID0gTVNSQVRENTAwRGF0YXNldChkYXRhc2V0X3BhdGgsIHNwbGl0LCBuYW1lPWRzLm5hbWUpCgogICAgaWYgJ2ZpbHRlcicgaW4ga2FyZ3MgYW5kIGthcmdzWydmaWx0ZXInXToKICAgICAgICBkYXRhID0gU3BsaXREYXRhc2V0KGRhdGEsIGthcmdzWydmaWx0ZXInXSwgZGF0YS5uYW1lKQogICAgcmV0dXJuIGRhdGEKPHxmaW1fc3VmZml4fD4KCiAgICAgICAgICAgICAgICBpZiBwb3MgPT0gJ2xvdyc6CiAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UodG90YWwpOgogICAgICAgICAgICAgICAgICAgICAgICBpZiBpICUgYmFzZSA8IG51bToKPHxmaW1fZW5kfD4="]
["f2e5cb30f44a7025db549efac7f7d837d367ff16-1","f2e5cb30f44a7025db549efac7f7d837d367ff16","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KCgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmRlZiB0ZXN0SGVsbG8oKToKICAgIHJldHVybiBqc29uLmxvYWRzKCd7ImhlbGxvIjogImhlbGxvIn0nKQo8fGZpbV9lbmR8Pg=="]
["f2e5cb30f44a7025db549efac7f7d837d367ff16-2","f2e5cb30f44a7025db549efac7f7d837d367ff16","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KCgpkZWYgdGVzdEhlbGxvKCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHJldHVybiBqc29uLmxvYWRzKCd7ImhlbGxvIjogImhlbGxvIn0nKQo8fGZpbV9lbmR8Pg=="]
["f2e5cb30f44a7025db549efac7f7d837d367ff16-3","f2e5cb30f44a7025db549efac7f7d837d367ff16","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgogICAgcmV0dXJuIGpzb24ubG9hZHMoJ3siaGVsbG8iOiAiaGVsbG8ifScpCjx8ZmltX3N1ZmZpeHw+CmltcG9ydCBqc29uCgoKZGVmIHRlc3RIZWxsbygpOgo8fGZpbV9lbmR8Pg=="]
["f2e5cb30f44a7025db549efac7f7d837d367ff16-4","f2e5cb30f44a7025db549efac7f7d837d367ff16","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGpzb24KCgpkZWYgdGVzdEhlbGxvKCk6Cjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIHJldHVybiBqc29uLmxvYWRzKCd7ImhlbGxvIjogImhlbGxvIn0nKQo8fGZpbV9lbmR8Pg=="]
["084115e4665cc9ab41e4674646bfb2050bb5c99b-1","084115e4665cc9ab41e4674646bfb2050bb5c99b","PHxmaW1fcHJlZml4fD4KCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcGF0aApmcm9tIC4gaW1wb3J0IHZpZXdzCgoKPHxmaW1fZW5kfD4="]
["084115e4665cc9ab41e4674646bfb2050bb5c99b-2","084115e4665cc9ab41e4674646bfb2050bb5c99b","PHxmaW1fcHJlZml4fD4KZnJvbSBkamFuZ28udXJscyBpbXBvcnQgcGF0aApmcm9tIC4gaW1wb3J0IHZpZXdzCgoKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8Pgp1cmxwYXR0ZXJucyA9IFsKICAgIHBhdGgoJycsIHZpZXdzLnJlc3VtZSAsIG5hbWU9J3Jlc3VtZScpLAoKXQo8fGZpbV9lbmR8Pg=="]
["ffe29265ed2477945b16880286c33ca71bd31e86-1","ffe29265ed2477945b16880286c33ca71bd31e86","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyA9ICc0VGhpbmcnCgppbXBvcnQgdXJsbGliMgppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCB0aHJlYWQKaW1wb3J0IFF1ZXVlCgp1c2VyX2FnZW50ID0gIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMTsgV09XNjQpIEFwcGxlV2ViS2l0LzUzNy4xICIKaXBfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCnRocmVhZHMgPSBbXQpsb2NrID0gdGhyZWFkLmFsbG9jYXRlX2xvY2soKQpmaWxlID0gb3BlbigiRDpcRG9jXGlwcy50eHQiKQpmb3IgbGluZSBpbiBmaWxlOgogICAgaXBfcXVldWUucHV0KGxpbmUucnN0cmlwKCkpCgpkZWYgYXV0aElQKCk6CiAgICB3aGlsZShpcF9xdWV1ZS5lbXB0eSgpID09IEZhbHNlKToKICAgICAgICBsb2NrLmFjcXVpcmUoKQogICAgICAgIGlwID0gaXBfcXVldWUuZ2V0KCkKICAgICAgICBsb2NrLnJlbGVhc2UoKQogICAgICAgIHJlcXVlc3QgPSB1cmxsaWIyLlJlcXVlc3QoJ2h0dHA6Ly93d3cuY25jbi5nb3YuY24vYXJ0LzIwMTUvMy8zL2FydF80MzJfMTg3NjMwLmh0bWwnKQogICAgICAgIHJlcXVlc3QuYWRkX2hlYWRlcignVXNlci1BZ2VudCcsIHVzZXJfYWdlbnQpCiAgICAgICAgb3BlbmVyID0gdXJsbGliMi5idWlsZF9vcGVuZXIodXJsbGliMi5Qcm94eUhhbmRsZXIoeydodHRwJzonaHR0cDovLyVzLyclaXB9KSkKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJlc3BvbnNlID0gb3BlbmVyLm9wZW4ocmVxdWVzdCwgdGltZW91dD0zMCkKIyAgICAgICAgICAgIGlmKHJlc3BvbnNlLmdldHVybCgpLmZpbmQoImJhaWR1IikpOgojICAgICAgICAgICAgICAgIHByaW50IGlwKyI6IisiIGlzIHZhbGlkISIKICAgICAgICAgICAgcHJpbnQgcmVzcG9uc2UuZ2V0dXJsKCkKICAgICAgICAgICAgcHJpbnQgcmVzcG9uc2UucmVhZCgpCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICBwYXNzCgpmb3IgaSBpbiByYW5nZSgyMCk6CiAgICB0aHJlYWRzLmFwcGVuZCh0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1hdXRoSVApKQoKPHxmaW1faG9sZXw+CiAgICB3aGlsZShpcF9xdWV1ZS5lbXB0eSgpID09IEZhbHNlKToKICAgICAgICBwYXNzCjx8ZmltX3N1ZmZpeHw+CmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBmb3IgdCBpbiB0aHJlYWRzOgogICAgICAgIHQuc2V0RGFlbW9uKEZhbHNlKQogICAgICAgIHQuc3RhcnQoKQo8fGZpbV9lbmR8Pg=="]
["ffe29265ed2477945b16880286c33ca71bd31e86-2","ffe29265ed2477945b16880286c33ca71bd31e86","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyA9ICc0VGhpbmcnCgppbXBvcnQgdXJsbGliMgppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCB0aHJlYWQKaW1wb3J0IFF1ZXVlCgp1c2VyX2FnZW50ID0gIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMTsgV09XNjQpIEFwcGxlV2ViS2l0LzUzNy4xICIKaXBfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCnRocmVhZHMgPSBbXQpsb2NrID0gdGhyZWFkLmFsbG9jYXRlX2xvY2soKQpmaWxlID0gb3BlbigiRDpcRG9jXGlwcy50eHQiKQpmb3IgbGluZSBpbiBmaWxlOgogICAgaXBfcXVldWUucHV0KGxpbmUucnN0cmlwKCkpCgpkZWYgYXV0aElQKCk6CiAgICB3aGlsZShpcF9xdWV1ZS5lbXB0eSgpID09IEZhbHNlKToKICAgICAgICBsb2NrLmFjcXVpcmUoKQogICAgICAgIGlwID0gaXBfcXVldWUuZ2V0KCkKICAgICAgICBsb2NrLnJlbGVhc2UoKQogICAgICAgIHJlcXVlc3QgPSB1cmxsaWIyLlJlcXVlc3QoJ2h0dHA6Ly93d3cuY25jbi5nb3YuY24vYXJ0LzIwMTUvMy8zL2FydF80MzJfMTg3NjMwLmh0bWwnKQogICAgICAgIHJlcXVlc3QuYWRkX2hlYWRlcignVXNlci1BZ2VudCcsIHVzZXJfYWdlbnQpCiAgICAgICAgb3BlbmVyID0gdXJsbGliMi5idWlsZF9vcGVuZXIodXJsbGliMi5Qcm94eUhhbmRsZXIoeydodHRwJzonaHR0cDovLyVzLyclaXB9KSkKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJlc3BvbnNlID0gb3BlbmVyLm9wZW4ocmVxdWVzdCwgdGltZW91dD0zMCkKIyAgICAgICAgICAgIGlmKHJlc3BvbnNlLmdldHVybCgpLmZpbmQoImJhaWR1IikpOgojICAgICAgICAgICAgICAgIHByaW50IGlwKyI6IisiIGlzIHZhbGlkISIKICAgICAgICAgICAgcHJpbnQgcmVzcG9uc2UuZ2V0dXJsKCkKICAgICAgICAgICAgcHJpbnQgcmVzcG9uc2UucmVhZCgpCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICBwYXNzCgpmb3IgaSBpbiByYW5nZSgyMCk6CiAgICB0aHJlYWRzLmFwcGVuZCh0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1hdXRoSVApKQo8fGZpbV9ob2xlfD4KICAgICAgICB0LnN0YXJ0KCkKICAgIHdoaWxlKGlwX3F1ZXVlLmVtcHR5KCkgPT0gRmFsc2UpOgogICAgICAgIHBhc3MKPHxmaW1fc3VmZml4fD4KCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBmb3IgdCBpbiB0aHJlYWRzOgogICAgICAgIHQuc2V0RGFlbW9uKEZhbHNlKQo8fGZpbV9lbmR8Pg=="]
["ffe29265ed2477945b16880286c33ca71bd31e86-3","ffe29265ed2477945b16880286c33ca71bd31e86","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyA9ICc0VGhpbmcnCgppbXBvcnQgdXJsbGliMgppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCB0aHJlYWQKaW1wb3J0IFF1ZXVlCgp1c2VyX2FnZW50ID0gIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMTsgV09XNjQpIEFwcGxlV2ViS2l0LzUzNy4xICIKaXBfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCnRocmVhZHMgPSBbXQpsb2NrID0gdGhyZWFkLmFsbG9jYXRlX2xvY2soKQpmaWxlID0gb3BlbigiRDpcRG9jXGlwcy50eHQiKQpmb3IgbGluZSBpbiBmaWxlOgogICAgaXBfcXVldWUucHV0KGxpbmUucnN0cmlwKCkpCgpkZWYgYXV0aElQKCk6CiAgICB3aGlsZShpcF9xdWV1ZS5lbXB0eSgpID09IEZhbHNlKToKICAgICAgICBsb2NrLmFjcXVpcmUoKQogICAgICAgIGlwID0gaXBfcXVldWUuZ2V0KCkKICAgICAgICBsb2NrLnJlbGVhc2UoKQogICAgICAgIHJlcXVlc3QgPSB1cmxsaWIyLlJlcXVlc3QoJ2h0dHA6Ly93d3cuY25jbi5nb3YuY24vYXJ0LzIwMTUvMy8zL2FydF80MzJfMTg3NjMwLmh0bWwnKQogICAgICAgIHJlcXVlc3QuYWRkX2hlYWRlcignVXNlci1BZ2VudCcsIHVzZXJfYWdlbnQpCiAgICAgICAgb3BlbmVyID0gdXJsbGliMi5idWlsZF9vcGVuZXIodXJsbGliMi5Qcm94eUhhbmRsZXIoeydodHRwJzonaHR0cDovLyVzLyclaXB9KSkKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJlc3BvbnNlID0gb3BlbmVyLm9wZW4ocmVxdWVzdCwgdGltZW91dD0zMCkKIyAgICAgICAgICAgIGlmKHJlc3BvbnNlLmdldHVybCgpLmZpbmQoImJhaWR1IikpOgojICAgICAgICAgICAgICAgIHByaW50IGlwKyI6IisiIGlzIHZhbGlkISIKICAgICAgICAgICAgcHJpbnQgcmVzcG9uc2UuZ2V0dXJsKCkKICAgICAgICAgICAgcHJpbnQgcmVzcG9uc2UucmVhZCgpCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICBwYXNzCgpmb3IgaSBpbiByYW5nZSgyMCk6CiAgICB0aHJlYWRzLmFwcGVuZCh0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1hdXRoSVApKQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGZvciB0IGluIHRocmVhZHM6CiAgICAgICAgdC5zZXREYWVtb24oRmFsc2UpCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgICAgICB0LnN0YXJ0KCkKPHxmaW1fZW5kfD4="]
["ffe29265ed2477945b16880286c33ca71bd31e86-4","ffe29265ed2477945b16880286c33ca71bd31e86","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyA9ICc0VGhpbmcnCgppbXBvcnQgdXJsbGliMgppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCB0aHJlYWQKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgppbXBvcnQgUXVldWUKCnVzZXJfYWdlbnQgPSAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXT1c2NCkgQXBwbGVXZWJLaXQvNTM3LjEgIgppcF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKPHxmaW1fZW5kfD4="]
["ffe29265ed2477945b16880286c33ca71bd31e86-5","ffe29265ed2477945b16880286c33ca71bd31e86","PHxmaW1fcHJlZml4fD4KX19hdXRob3JfXyA9ICc0VGhpbmcnCgppbXBvcnQgdXJsbGliMgppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCB0aHJlYWQKaW1wb3J0IFF1ZXVlCgp1c2VyX2FnZW50ID0gIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMTsgV09XNjQpIEFwcGxlV2ViS2l0LzUzNy4xICIKaXBfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCnRocmVhZHMgPSBbXQpsb2NrID0gdGhyZWFkLmFsbG9jYXRlX2xvY2soKQpmaWxlID0gb3BlbigiRDpcRG9jXGlwcy50eHQiKQpmb3IgbGluZSBpbiBmaWxlOgogICAgaXBfcXVldWUucHV0KGxpbmUucnN0cmlwKCkpCgpkZWYgYXV0aElQKCk6CiAgICB3aGlsZShpcF9xdWV1ZS5lbXB0eSgpID09IEZhbHNlKToKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgogICAgICAgIGxvY2suYWNxdWlyZSgpCiAgICAgICAgaXAgPSBpcF9xdWV1ZS5nZXQoKQogICAgICAgIGxvY2sucmVsZWFzZSgpCiAgICAgICAgcmVxdWVzdCA9IHVybGxpYjIuUmVxdWVzdCgnaHR0cDovL3d3dy5jbmNuLmdvdi5jbi9hcnQvMjAxNS8zLzMvYXJ0XzQzMl8xODc2MzAuaHRtbCcpCjx8ZmltX2VuZHw+"]
["d02446bb6bf9c508d0a287a60f8ef5a7e4fb6f38-1","d02446bb6bf9c508d0a287a60f8ef5a7e4fb6f38","PHxmaW1fcHJlZml4fD4KIyBNYWNoaW5lIExlYXJuaW5nL0RhdGEgU2NpZW5jZSBQcmVjb3Vyc2UgV29yawoKIyAjIyMKIyBMQU1CREEgU0NIT09MCiMgIyMjCiMgTUlUIExJQ0VOU0UKIyAjIyMKCiMgRnJlZSBleGFtcGxlIGZ1bmN0aW9uIGRlZmluaXRpb24KIyBUaGlzIGZ1bmN0aW9uIHBhc3NlcyBvbmUgb2YgdGhlIDExIHRlc3RzIGNvbnRhaW5lZCBpbnNpZGUgb2YgdGVzdC5weS4gV3JpdGUgdGhlIHJlc3QsIGRlZmluZWQgaW4gUkVBRE1FLm1kLCBoZXJlLCBhbmQgZXhlY3V0ZSBweXRob24gdGVzdC5weSB0byB0ZXN0LiBQYXNzaW5nIHRoaXMgcHJlY291cnNlIHdvcmsgd2lsbCBncmVhdGx5IGluY3JlYXNlIHlvdXIgb2RkcyBvZiBhY2NlcHRhbmNlIGludG8gdGhlIHByb2dyYW0uCmRlZiBmKHgpOgogICAgcmV0dXJuIHgqKjIKCmltcG9ydCBudW1weSBhcyBucAoKIyMgZChmKHgpKSBpcyBmKHgqKm4pID0gbiAqIHgqKihuLTEpCiMjIGZ1bmN0aW9uIG9mIHheMgpkZWYgZih4KToKICAgIHJldHVybiAoeCoqMikKCiMjIGZ1bmN0aW9uIG9mIHheMwpkZWYgZl8yKHgpOgogICAgcmV0dXJuICh4KiozKQoKIyMgZnVuY3Rpb24gb2YgeF4zICsgNXgKZGVmIGZfMyh4KToKICAgIHJldHVybiAoeCoqMyArICg1KngpKQoKIyMgZGVyaXZhdGl2ZSBvZiBmCmRlZiBkX2YoeCk6CiAgICByZXR1cm4gKDIqeCkKCiMjIGRlcml2YXRpdmUgb2YgZl8yCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KZGVmIGRfZl8yKHgpOgogICAgcmV0dXJuICgzKih4KioyKSkKCiMjIGRlcml2YXRpdmUgb2YgZl8zCjx8ZmltX2VuZHw+"]
["d02446bb6bf9c508d0a287a60f8ef5a7e4fb6f38-2","d02446bb6bf9c508d0a287a60f8ef5a7e4fb6f38","PHxmaW1fcHJlZml4fD4KIyBNYWNoaW5lIExlYXJuaW5nL0RhdGEgU2NpZW5jZSBQcmVjb3Vyc2UgV29yawoKIyAjIyMKIyBMQU1CREEgU0NIT09MCiMgIyMjCiMgTUlUIExJQ0VOU0UKIyAjIyMKCiMgRnJlZSBleGFtcGxlIGZ1bmN0aW9uIGRlZmluaXRpb24KIyBUaGlzIGZ1bmN0aW9uIHBhc3NlcyBvbmUgb2YgdGhlIDExIHRlc3RzIGNvbnRhaW5lZCBpbnNpZGUgb2YgdGVzdC5weS4gV3JpdGUgdGhlIHJlc3QsIGRlZmluZWQgaW4gUkVBRE1FLm1kLCBoZXJlLCBhbmQgZXhlY3V0ZSBweXRob24gdGVzdC5weSB0byB0ZXN0LiBQYXNzaW5nIHRoaXMgcHJlY291cnNlIHdvcmsgd2lsbCBncmVhdGx5IGluY3JlYXNlIHlvdXIgb2RkcyBvZiBhY2NlcHRhbmNlIGludG8gdGhlIHByb2dyYW0uCmRlZiBmKHgpOgo8fGZpbV9ob2xlfD4KaW1wb3J0IG51bXB5IGFzIG5wCgojIyBkKGYoeCkpIGlzIGYoeCoqbikgPSBuICogeCoqKG4tMSkKIyMgZnVuY3Rpb24gb2YgeF4yCmRlZiBmKHgpOgogICAgcmV0dXJuICh4KioyKQoKIyMgZnVuY3Rpb24gb2YgeF4zCmRlZiBmXzIoeCk6CiAgICByZXR1cm4gKHgqKjMpCgojIyBmdW5jdGlvbiBvZiB4XjMgKyA1eApkZWYgZl8zKHgpOgogICAgcmV0dXJuICh4KiozICsgKDUqeCkpCgojIyBkZXJpdmF0aXZlIG9mIGYKZGVmIGRfZih4KToKICAgIHJldHVybiAoMip4KQoKIyMgZGVyaXZhdGl2ZSBvZiBmXzIKZGVmIGRfZl8yKHgpOgogICAgcmV0dXJuICgzKih4KioyKSkKCiMjIGRlcml2YXRpdmUgb2YgZl8zCmRlZiBkX2ZfMyh4KToKICAgIHJldHVybiAoMyooeCoqMikgKyA1KQogCiMjIHRoZSBzdW0gb2YgdmVjdG9ycyAneCcgYW5kICd5JyBpcyBhbm90aGVyIHZlY3RvciAndicKIyMgdmVjdG9yX3N1bSA9ICh4X2kgKyB5X2kpCmRlZiB2ZWN0b3Jfc3VtKHgseSk6CiAgICByZXR1cm4gbnAuYWRkKHgseSkKCiMjIHRoZSBkaWZmZXJlbmNlIG9mIHR3byB2ZWN0b3JzIGlzIGFub3RoZXIgdmVjdG9yICd2JwojIyB2ZWN0b3JfbGVzcyA9ICh4X2kgLSB5X2kpCmRlZiB2ZWN0b3JfbGVzcyh4LHkpOgogICAgcmV0dXJuIG5wLnN1YnRyYWN0KHgseSkKCiMjIHRoZSBtYWduaXR1ZGUgb2YgYSB2ZWN0b3IsIGl0cyBsZW5ndGgsIGlzCiMjIGFic29sdXRlIHZhbHVlIG9mIHYgaXMgZXF1YWwgdG8gdGhlIHNxdWFyZSByb290IG9mIHRoZSBzdW1tYXRpb24gYmV0d2VlbiAnaScgYW5kICduJyAKIyMgaW4gdGhlIGZvcm11bGEgJ3YnIHN1YiAnaScgc3F1YXJlZCBbKHZfaSkqKjIpXQpkZWYgdmVjdG9yX21hZ25pdHVkZSh4KToKICAgIHJldHVybiBucC5saW5hbGcubm9ybSh4KQoKIyMgYXJyYXlzCgpkZWYgdmVjNSgpOgogICAgcmV0dXJuIG5wLmFycmF5KFsxLDEsMSwxLDFdKQoKZGVmIHZlYzMoKToKICAgIHJldHVybiBucC5hcnJheShbMCwwLDBdKQoKZGVmIHZlYzJfMSgpOgogICAgcmV0dXJuIG5wLmFycmF5KFsxLDBdKQoKZGVmIHZlYzJfMigpOgogICAgcmV0dXJuIG5wLmFycmF5KFswLDFdKQoKIyMgbWF0cml4IG11bHRpcGxpY2F0aW9uIGZ1bmN0aW9uIHRoYXQgbXVsdGlwbGllcyAKIyMgYSB0d28gZWxlbWVudCB2ZWN0b3IgYnkgYSAyeDIgbWF0cml4CgpkZWYgbWF0cml4X211bHRpcGx5KHZlYyxtYXRyaXgpOgogICAgcmV0dXJuIG5wLmlubmVyKHZlYyxtYXRyaXgpCjx8ZmltX3N1ZmZpeHw+CiAgICByZXR1cm4geCoqMgoKPHxmaW1fZW5kfD4="]
["d02446bb6bf9c508d0a287a60f8ef5a7e4fb6f38-3","d02446bb6bf9c508d0a287a60f8ef5a7e4fb6f38","PHxmaW1fcHJlZml4fD4KIyBNYWNoaW5lIExlYXJuaW5nL0RhdGEgU2NpZW5jZSBQcmVjb3Vyc2UgV29yawoKIyAjIyMKIyBMQU1CREEgU0NIT09MCiMgIyMjCiMgTUlUIExJQ0VOU0UKIyAjIyMKCiMgRnJlZSBleGFtcGxlIGZ1bmN0aW9uIGRlZmluaXRpb24KIyBUaGlzIGZ1bmN0aW9uIHBhc3NlcyBvbmUgb2YgdGhlIDExIHRlc3RzIGNvbnRhaW5lZCBpbnNpZGUgb2YgdGVzdC5weS4gV3JpdGUgdGhlIHJlc3QsIGRlZmluZWQgaW4gUkVBRE1FLm1kLCBoZXJlLCBhbmQgZXhlY3V0ZSBweXRob24gdGVzdC5weSB0byB0ZXN0LiBQYXNzaW5nIHRoaXMgcHJlY291cnNlIHdvcmsgd2lsbCBncmVhdGx5IGluY3JlYXNlIHlvdXIgb2RkcyBvZiBhY2NlcHRhbmNlIGludG8gdGhlIHByb2dyYW0uCmRlZiBmKHgpOgogICAgcmV0dXJuIHgqKjIKCmltcG9ydCBudW1weSBhcyBucAoKIyMgZChmKHgpKSBpcyBmKHgqKm4pID0gbiAqIHgqKihuLTEpCiMjIGZ1bmN0aW9uIG9mIHheMgpkZWYgZih4KToKICAgIHJldHVybiAoeCoqMikKCiMjIGZ1bmN0aW9uIG9mIHheMwpkZWYgZl8yKHgpOgogICAgcmV0dXJuICh4KiozKQoKIyMgZnVuY3Rpb24gb2YgeF4zICsgNXgKZGVmIGZfMyh4KToKICAgIHJldHVybiAoeCoqMyArICg1KngpKQoKIyMgZGVyaXZhdGl2ZSBvZiBmCmRlZiBkX2YoeCk6CiAgICByZXR1cm4gKDIqeCkKCiMjIGRlcml2YXRpdmUgb2YgZl8yCmRlZiBkX2ZfMih4KToKICAgIHJldHVybiAoMyooeCoqMikpCgojIyBkZXJpdmF0aXZlIG9mIGZfMwpkZWYgZF9mXzMoeCk6CiAgICByZXR1cm4gKDMqKHgqKjIpICsgNSkKIAojIyB0aGUgc3VtIG9mIHZlY3RvcnMgJ3gnIGFuZCAneScgaXMgYW5vdGhlciB2ZWN0b3IgJ3YnCiMjIHZlY3Rvcl9zdW0gPSAoeF9pICsgeV9pKQpkZWYgdmVjdG9yX3N1bSh4LHkpOgogICAgcmV0dXJuIG5wLmFkZCh4LHkpCgojIyB0aGUgZGlmZmVyZW5jZSBvZiB0d28gdmVjdG9ycyBpcyBhbm90aGVyIHZlY3RvciAndicKIyMgdmVjdG9yX2xlc3MgPSAoeF9pIC0geV9pKQpkZWYgdmVjdG9yX2xlc3MoeCx5KToKICAgIHJldHVybiBucC5zdWJ0cmFjdCh4LHkpCgojIyB0aGUgbWFnbml0dWRlIG9mIGEgdmVjdG9yLCBpdHMgbGVuZ3RoLCBpcwojIyBhYnNvbHV0ZSB2YWx1ZSBvZiB2IGlzIGVxdWFsIHRvIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgc3VtbWF0aW9uIGJldHdlZW4gJ2knIGFuZCAnbicgCiMjIGluIHRoZSBmb3JtdWxhICd2JyBzdWIgJ2knIHNxdWFyZWQgWyh2X2kpKioyKV0KZGVmIHZlY3Rvcl9tYWduaXR1ZGUoeCk6CiAgICByZXR1cm4gbnAubGluYWxnLm5vcm0oeCkKCiMjIGFycmF5cwoKZGVmIHZlYzUoKToKICAgIHJldHVybiBucC5hcnJheShbMSwxLDEsMSwxXSkKCmRlZiB2ZWMzKCk6CiAgICByZXR1cm4gbnAuYXJyYXkoWzAsMCwwXSkKCmRlZiB2ZWMyXzEoKToKICAgIHJldHVybiBucC5hcnJheShbMSwwXSkKCmRlZiB2ZWMyXzIoKToKICAgIHJldHVybiBucC5hcnJheShbMCwxXSkKCjx8ZmltX2hvbGV8PgogICAgcmV0dXJuIG5wLmlubmVyKHZlYyxtYXRyaXgpCjx8ZmltX3N1ZmZpeHw+CiMjIG1hdHJpeCBtdWx0aXBsaWNhdGlvbiBmdW5jdGlvbiB0aGF0IG11bHRpcGxpZXMgCiMjIGEgdHdvIGVsZW1lbnQgdmVjdG9yIGJ5IGEgMngyIG1hdHJpeAoKZGVmIG1hdHJpeF9tdWx0aXBseSh2ZWMsbWF0cml4KToKPHxmaW1fZW5kfD4="]
["2996498144a0e1460621e5c41e1294009f2fa538-1","2996498144a0e1460621e5c41e1294009f2fa538","PHxmaW1fcHJlZml4fD4KZnJvbSBzeXMgaW1wb3J0ICoKaW1wb3J0IHV0aWxzCgpmYXN0cSA9IGFyZ3ZbMV0KZ2Vub21lX2luZGV4ID0gYXJndlsyXQpzYW1fZmlsZSA9IGFyZ3ZbM10Kb3V0cHV0X2ZpbGUgPSBhcmd2WzRdCgpuX2NvcmVzID0gNjIKZm9yIGkgaW4gcmFuZ2UobGVuKGFyZ3YpKToKCWlmIGFyZ3ZbaV0gPT0gJy1jb3Jlcyc6CgkJbl9jb3JlcyA9IGludChhcmd2W2krMV0pCgojIGNyZWF0ZSBjYWxsIGZvciBGYXN0UUMKY2FsbCA9IFsnYm93dGllMicsICcteCcsIGdlbm9tZV9pbmRleCwgJy1xJywgZmFzdHEsICctUycsIHNhbV9maWxlLCAnLXAnLCBzdHIobl9jb3JlcyldCm91dHB1dCwgZXJyb3IgPSB1dGlscy5nZXRTeXN0ZW1DYWxsKGNhbGwpCgp3aXRoIG9wZW4ob3V0cHV0X2ZpbGUsICd3JykgYXMgc3VtbWFyeV9maWxlOgo8fGZpbV9ob2xlfD4KCgoKCjx8ZmltX3N1ZmZpeHw+CglzdW1tYXJ5X2ZpbGUud3JpdGUoZXJyb3IpCgoKCjx8ZmltX2VuZHw+"]
["72335449f8780b045146bdc030089fb063de326a-1","72335449f8780b045146bdc030089fb063de326a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNvZGVjcwppbXBvcnQgbG9nZ2luZwpmcm9tIG9zIGltcG9ydCBnZXRlbnYKaW1wb3J0IHJlCmltcG9ydCBzdHJpbmcKZnJvbSB0eXBpbmcgaW1wb3J0IFVuaW9uCmltcG9ydCB1dWlkCgpmcm9tIENyeXB0by5IYXNoIGltcG9ydCBrZWNjYWsKZnJvbSBmbGFzayBpbXBvcnQgZwoKZnJvbSBwb2x5c3dhcm1hcnRpZmFjdCBpbXBvcnQgQXJ0aWZhY3RUeXBlCgpsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCiMgSW5kaWNhdGVzIGlmIHdlIGFyZSBpbnNpZGUgYSB0ZXN0aW5nIGVudmlyb25tZW50CklOX1RFU1RFTlYgPSBnZXRlbnYoJ1BPTFlfV09SSycpID09ICd0ZXN0aW5nJwoKCmRlZiBib29sX2xpc3RfdG9faW50KGJzKToKICAgIHJldHVybiBzdW0oWzEgPDwgbiBpZiBiIGVsc2UgMCBmb3IgbiwgYiBpbiBlbnVtZXJhdGUoYnMpXSkKCgpkZWYgaW50X3RvX2Jvb2xfbGlzdChpKToKICAgIHMgPSBmb3JtYXQoaSwgJ2InKQogICAgcmV0dXJuIFt4ID09ICcxJyBmb3IgeCBpbiBzWzo6LTFdXQoKCmRlZiBzYWZlX2ludF90b19ib29sX2xpc3QobnVtLCBtYXgpOgogICAgaWYgaW50KG51bSkgPT0gMDoKICAgICAgICByZXR1cm4gW0ZhbHNlXSAqIGludChtYXgpCiAgICBlbHNlOgogICAgICAgIGNvbnZlcnRlZCA9IGludF90b19ib29sX2xpc3QobnVtKQogICAgICAgIHJldHVybiBjb252ZXJ0ZWQgKyBbRmFsc2VdICogKG1heCAtIGxlbihjb252ZXJ0ZWQpKQoKCmRlZiB1aW50MjU2X2xpc3RfdG9faGV4X3N0cmluZyh1cyk6CiAgICByZXR1cm4gaGV4KHN1bShbeCA8PCAoMjU2ICogbikgZm9yIG4sIHggaW4gZW51bWVyYXRlKHVzKV0pKQoKCmRlZiBib3VudHlfdG9fZGljdChib3VudHkpOgogICAgcmV0dXJuIHsKICAgICAgICAnZ3VpZCc6IHN0cih1dWlkLlVVSUQoaW50PWJvdW50eVswXSkpLAogICAgICAgICdhcnRpZmFjdF90eXBlJzogQXJ0aWZhY3RUeXBlLnRvX3N0cmluZyhBcnRpZmFjdFR5cGUoYm91bnR5WzFdKSksCiAgICAgICAgJ2F1dGhvcic6IGJvdW50eVsyXSwKICAgICAgICAnYW1vdW50Jzogc3RyKGJvdW50eVszXSksCiAgICAgICAgJ3VyaSc6IGJvdW50eVs0XSwKICAgICAgICAnbnVtX2FydGlmYWN0cyc6IGJvdW50eVs1XSwKICAgICAgICAnZXhwaXJhdGlvbic6IGJvdW50eVs2XSwKICAgICAgICAnYXNzaWduZWRfYXJiaXRlcic6IGJvdW50eVs3XSwKICAgICAgICAncXVvcnVtX3JlYWNoZWQnOiBib3VudHlbOF0sCiAgICAgICAgJ3F1b3J1bV9yZWFjaGVkX2Jsb2NrJzogYm91bnR5WzldLAogICAgICAgICdxdW9ydW1fbWFzayc6IHNhZmVfaW50X3RvX2Jvb2xfbGlzdChib3VudHlbMTBdLCBib3VudHlbNV0pLAogICAgICAgICdtZXRhZGF0YSc6IGJvdW50eVsxMV0KICAgIH0KCgpkZWYgYmxvb21fdG9fZGljdChibG9vbSk6CiAgICByZXR1cm4gewogICAgICAgICdibG9vbSc6IGJsb29tLAogICAgfQoKCmRlZiBhc3NlcnRpb25fdG9fZGljdChhc3NlcnRpb24sIG51bV9hcnRpZmFjdHMpOgogICAgcmV0dXJuIHsKICAgICAgICAnYXV0aG9yJzogYXNzZXJ0aW9uWzBdLAogICAgICAgICdtYXNrJzogc2FmZV9pbnRfdG9fYm9vbF9saXN0KGFzc2VydGlvblsxXSwgbnVtX2FydGlmYWN0cyksCiAgICAgICAgJ2NvbW1pdG1lbnQnOiBzdHIoYXNzZXJ0aW9uWzJdKSwKICAgICAgICAnbm9uY2UnOiBzdHIoYXNzZXJ0aW9uWzNdKSwKICAgICAgICAndmVyZGljdHMnOiBzYWZlX2ludF90b19ib29sX2xpc3QoYXNzZXJ0aW9uWzRdLCBudW1fYXJ0aWZhY3RzKSwKICAgICAgICAnbWV0YWRhdGEnOiBhc3NlcnRpb25bNV0sCiAgICB9CgoKZGVmIHZvdGVfdG9fZGljdCh2b3RlLCBudW1fYXJ0aWZhY3RzKToKICAgIHJldHVybiB7CiAgICAgICAgJ3ZvdGVyJzogdm90ZVswXSwKICAgICAgICAndm90ZXMnOiBzYWZlX2ludF90b19ib29sX2xpc3Qodm90ZVsxXSwgbnVtX2FydGlmYWN0cyksCiAgICAgICAgJ3ZhbGlkX2Jsb29tJzogdm90ZVsyXSwKICAgIH0KCgpkZWYgY2hhbm5lbF90b19kaWN0KGNoYW5uZWxfZGF0YSk6CiAgICByZXR1cm4gewogICAgICAgICdtc2lnX2FkZHJlc3MnOiBjaGFubmVsX2RhdGFbMF0sCiAgICAgICAgJ2FtYmFzc2Fkb3InOiBjaGFubmVsX2RhdGFbMV0sCiAgICAgICAgJ2V4cGVydCc6IGNoYW5uZWxfZGF0YVsyXSwKICAgIH0KCgpkZWYgc3RhdGVfdG9fZGljdChzdGF0ZSk6CiAgICBpZiBub3QgZy5jaGFpbjoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdnLmNoYWluIG5vdCBmb3VuZCcpCgogICAgIyBnZXRzIHN0YXRlIG9mIG5vbiByZXF1aXJlZCBzdGF0ZQogICAgb2ZmZXJfaW5mbyA9IGcuY2hhaW4ub2ZmZXJfcmVnaXN0cnkuY29udHJhY3QuZnVuY3Rpb25zLmdldE9mZmVyU3RhdGUoc3RhdGUpLmNhbGwoKQoKICAgIHJldHVybiB7CiAgICAgICAgJ25vbmNlJzogZy5jaGFpbi53My50b0ludChvZmZlcl9pbmZvWzFdKSwKICAgICAgICAnb2ZmZXJfYW1vdW50JzogZy5jaGFpbi53My50b0ludChvZmZlcl9pbmZvWzJdKSwKICAgICAgICAnbXNpZ19hZGRyZXNzJzogb2ZmZXJfaW5mb1szXSwKICAgICAgICAnYW1iYXNzYWRvcl9iYWxhbmNlJzogZy5jaGFpbi53My50b0ludChvZmZlcl9pbmZvWzRdKSwKICAgICAgICAnZXhwZXJ0X2JhbGFuY2UnOiBnLmNoYWluLnczLnRvSW50KG9mZmVyX2luZm9bNV0pLAogICAgICAgICdhbWJhc3NhZG9yJzogb2ZmZXJfaW5mb1s2XSwKICAgICAgICAnZXhwZXJ0Jzogb2ZmZXJfaW5mb1s3XSwKICAgICAgICAnaXNfY2xvc2VkJzogb2ZmZXJfaW5mb1s4XSwKICAgICAgICAndG9rZW4nOiBvZmZlcl9pbmZvWzldLAogICAgICAgICdtYXNrJzogaW50X3RvX2Jvb2xfbGlzdChnLmNoYWluLnczLnRvSW50KG9mZmVyX2luZm9bMTBdKSksCiAgICAgICAgJ3ZlcmRpY3RzJzogaW50X3RvX2Jvb2xfbGlzdChnLmNoYWluLnczLnRvSW50KG9mZmVyX2luZm9bMTFdKSksCiAgICB9CgoKZGVmIG5ld19pbml0X2NoYW5uZWxfZXZlbnRfdG9fZGljdChuZXdfaW5pdF9ldmVudCk6CiAgICByZXR1cm4gewogICAgICAgICdndWlkJzogc3RyKHV1aWQuVVVJRChpbnQ9bmV3X2luaXRfZXZlbnQuZ3VpZCkpLAogICAgICAgICdhbWJhc3NhZG9yJzogbmV3X2luaXRfZXZlbnQuYW1iYXNzYWRvciwKICAgICAgICAnZXhwZXJ0JzogbmV3X2luaXRfZXZlbnQuZXhwZXJ0LAogICAgICAgICdtdWx0aV9zaWduYXR1cmUnOiBuZXdfaW5pdF9ldmVudC5tc2lnLAogICAgfQoKCmRlZiBuZXdfc2V0dGxlX2NoYWxsZW5nZWRfZXZlbnQobmV3X2V2ZW50KToKICAgIHJldHVybiB7CiAgICAgICAgJ2NoYWxsZW5nZXInOiBuZXdfZXZlbnQuY2hhbGxlbmdlciwKICAgICAgICAnbm9uY2UnOiBuZXdfZXZlbnQuc2VxdWVuY2UsCiAgICAgICAgJ3NldHRsZV9wZXJpb2RfZW5kJzogbmV3X2V2ZW50LnNldHRsZW1lbnRQZXJpb2RFbmQsCiAgICB9CgoKZGVmIG5ld19zZXR0bGVfc3RhcnRlZF9ldmVudChuZXdfZXZlbnQpOgogICAgcmV0dXJuIHsKICAgICAgICAnaW5pdGlhdG9yJzogbmV3X2V2ZW50LmluaXRpYXRvciwKICAgICAgICAnbm9uY2UnOiBuZXdfZXZlbnQuc2VxdWVuY2UsCiAgICAgICAgJ3NldHRsZV9wZXJpb2RfZW5kJzogbmV3X2V2ZW50LnNldHRsZW1lbnRQZXJpb2RFbmQsCiAgICB9CgoKZGVmIG5ld19jYW5jZWxfYWdyZWVtZW50X2V2ZW50X3RvX2RpY3QobmV3X2V2ZW50KToKICAgIHJldHVybiB7CiAgICAgICAgJ2V4cGVydCc6IG5ld19ldmVudC5fZXhwZXJ0LAogICAgICAgICdhbWJhc3NhZG9yJzogbmV3X2V2ZW50Ll9hbWJhc3NhZG9yLAogICAgfQoKCiMgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE3NTIwOC9lbGVnYW50LXB5dGhvbi1mdW5jdGlvbi10by1jb252ZXJ0LWNhbWVsY2FzZS10by1zbmFrZS1jYXNlCmRlZiBjYW1lbF9jYXNlX3RvX3NuYWtlX2Nhc2Uocyk6CiAgICBzMSA9IHJlLnN1YihyJyguKShbQS1aXVthLXpdKyknLCByJ1wxX1wyJywgcykKICAgIHJldHVybiByZS5zdWIocicoW2EtejAtOV0pKFtBLVpdKScsIHInXDFfXDInLCBzMSkubG93ZXIoKQoKCmRlZiB0b19wYWRkZWRfaGV4KHZhbDogVW5pb25bc3RyLCBib29sLCBpbnQsIGJ5dGVzXSkgLT4gc3RyOgogICAgIiIiCiAgICBDb252ZXJ0IGFuIGFyZ3VtZW50IHRvIGEgaGV4YWRlY2ltYWwgc3RyaW5nIGFuZCB6ZXJvLWV4dGVuZCB0byA2NCB3aWR0aCIiIgoKICAgIGRlZiBlbmNvZGVfaGV4KHhzOiBieXRlcykgLT4gc3RyOgogICAgICAgIHJldHVybiBjb2RlY3MuZW5jb2RlKHhzLCAiaGV4IikuZGVjb2RlKCJhc2NpaSIpICAjIHR5cGU6IGlnbm9yZQoKICAgIGlmIGlzaW5zdGFuY2UodmFsLCBzdHIpOgogICAgICAgIGlmIHZhbC5zdGFydHN3aXRoKCcweCcpOgogICAgICAgICAgICBoZXhfc3VmZml4ID0gdmFsWzI6XS5sb3dlcigpCiAgICAgICAgICAgICMgdmVyaWZ5IHdlJ3JlIHBhc3NpbmcgYmFjayBhIGhleGFkZWNpbWFsIHZhbHVlCiAgICAgICAgICAgIGlmIG5vdCBhbGwoYyBpbiBzdHJpbmcuaGV4ZGlnaXRzIGZvciBjIGluIGhleF9zdWZmaXgpOgogICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBoZXhhZGVjaW1hbCBjaGFyYWN0ZXJzIGRldGVjdGVkIikKICAgICAgICBlbHNlOgogICAgICAgICAgICBoZXhfc3VmZml4ID0gZW5jb2RlX2hleCh2YWwuZW5jb2RlKCd1dGYtOCcpKQogICAgZWxpZiBpc2luc3RhbmNlKHZhbCwgYm9vbCk6CiAgICAgICAgaGV4X3N1ZmZpeCA9IHN0cihpbnQodmFsKSkKICAgICMgZG8gd2UgbmVlZCB0byBjaGVjayBvdGhlciB0eXBlcyBoZXJlPwogICAgZWxpZiBpc2luc3RhbmNlKHZhbCwgKGJ5dGVzLCBieXRlYXJyYXkpKToKICAgICAgICBoZXhfc3VmZml4ID0gZW5jb2RlX2hleCh2YWwpCiAgICBlbGlmIGlzaW5zdGFuY2UodmFsLCBpbnQpOgogICAgICAgIGhleF9zdWZmaXggPSBoZXgodmFsKVsyOl0KICAgIGVsc2U6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCB0byBwYWRkZWQgaGV4IHZhbHVlIikKCiAgICAjIGByanVzdCcgcGFkcyBvdXQgaXQncyBtZW1iZXIgc3RyaW5nIHRvIDY0IGNoYXJzCiAgICByZXN1bHQgPSBoZXhfc3VmZml4LnJqdXN0KDY0LCAnMCcpCiAgICBpZiBsZW4ocmVzdWx0KSA+IDY0OgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgc3RyaW5nIHBhc3NlZCBpbi4gVG9vIGxvbmcuIikKCiAgICByZXR1cm4gcmVzdWx0CgoKZGVmIGRpY3RfdG9fc3RhdGUoc3RhdGVfZGljdCk6CiAgICBzdGF0ZV9zdHIgPSAnMHgnCgogICAgc3RhdGVfc3RyID0gc3RhdGVfc3RyICsgdG9fcGFkZGVkX2hleChzdGF0ZV9kaWN0WydjbG9zZV9mbGFnJ10pCiAgICBzdGF0ZV9zdHIgPSBzdGF0ZV9zdHIgKyB0b19wYWRkZWRfaGV4KHN0YXRlX2RpY3RbJ25vbmNlJ10pCiAgICBzdGF0ZV9zdHIgPSBzdGF0ZV9zdHIgKyB0b19wYWRkZWRfaGV4KHN0YXRlX2RpY3RbJ2FtYmFzc2Fkb3InXSkKICAgIHN0YXRlX3N0ciA9IHN0YXRlX3N0ciArIHRvX3BhZGRlZF9oZXgoc3RhdGVfZGljdFsnZXhwZXJ0J10pCiAgICBzdGF0ZV9zdHIgPSBzdGF0ZV9zdHIgKyB0b19wYWRkZWRfaGV4KHN0YXRlX2RpY3RbJ21zaWdfYWRkcmVzcyddKQogICAgc3RhdGVfc3RyID0gc3RhdGVfc3RyICsgdG9fcGFkZGVkX2hleChzdGF0ZV9kaWN0WydhbWJhc3NhZG9yX2JhbGFuY2UnXSkKICAgIHN0YXRlX3N0ciA9IHN0YXRlX3N0ciArIHRvX3BhZGRlZF9oZXgoc3RhdGVfZGljdFsnZXhwZXJ0X2JhbGFuY2UnXSkKICAgIHN0YXRlX3N0ciA9IHN0YXRlX3N0ciArIHRvX3BhZGRlZF9oZXgoc3RhdGVfZGljdFsndG9rZW5fYWRkcmVzcyddKQogICAgc3RhdGVfc3RyID0gc3RhdGVfc3RyICsgdG9fcGFkZGVkX2hleChpbnQoc3RhdGVfZGljdFsnZ3VpZCddKSkKICAgIHN0YXRlX3N0ciA9IHN0YXRlX3N0ciArIHRvX3BhZGRlZF9oZXgoc3RhdGVfZGljdFsnb2ZmZXJfYW1vdW50J10pCgogICAgaWYgJ2FydGlmYWN0X2hhc2gnIGluIHN0YXRlX2RpY3Q6CiAgICAgICAgc3RhdGVfc3RyID0gc3RhdGVfc3RyICsgdG9fcGFkZGVkX2hleChzdGF0ZV9kaWN0WydhcnRpZmFjdF9oYXNoJ10pCiAgICBlbHNlOgogICAgICAgIHN0YXRlX3N0ciA9IHN0YXRlX3N0ciArIHRvX3BhZGRlZF9oZXgoJycpCgogICAgaWYgJ2lwZnNfaGFzaCcgaW4gc3RhdGVfZGljdDoKICAgICAgICBzdGF0ZV9zdHIgPSBzdGF0ZV9zdHIgKyB0b19wYWRkZWRfaGV4KHN0YXRlX2RpY3RbJ2lwZnNfaGFzaCddKQogICAgZWxzZToKICAgICAgICBzdGF0ZV9zdHIgPSBzdGF0ZV9zdHIgKyB0b19wYWRkZWRfaGV4KCcnKQoKICAgIGlmICdlbmdhZ2VtZW50X2RlYWRsaW5lJyBpbiBzdGF0ZV9kaWN0OgogICAgICAgIHN0YXRlX3N0ciA9IHN0YXRlX3N0ciArIHRvX3BhZGRlZF9oZXgoc3RhdGVfZGljdFsnZW5nYWdlbWVudF9kZWFkbGluZSddKQogICAgZWxzZToKICAgICAgICBzdGF0ZV9zdHIgPSBzdGF0ZV9zdHIgKyB0b19wYWRkZWRfaGV4KCcnKQoKICAgIGlmICdhc3NlcnRpb25fZGVhZGxpbmUnIGluIHN0YXRlX2RpY3Q6CiAgICAgICAgc3RhdGVfc3RyID0gc3RhdGVfc3RyICsgdG9fcGFkZGVkX2hleChzdGF0ZV9kaWN0Wydhc3NlcnRpb25fZGVhZGxpbmUnXSkKICAgIGVsc2U6CiAgICAgICAgc3RhdGVfc3RyID0gc3RhdGVfc3RyICsgdG9fcGFkZGVkX2hleCgnJykKCiAgICBpZiAnbWFzaycgaW4gc3RhdGVfZGljdDoKICAgICAgICBzdGF0ZV9zdHIgPSBzdGF0ZV9zdHIgKyB0b19wYWRkZWRfaGV4KHN0YXRlX2RpY3RbJ21hc2snXSkKICAgIGVsc2U6CiAgICAgICAgc3RhdGVfc3RyID0gc3RhdGVfc3RyICsgdG9fcGFkZGVkX2hleCgnJykKCiAgICBpZiAndmVyZGljdHMnIGluIHN0YXRlX2RpY3Q6CiAgICAgICAgc3RhdGVfc3RyID0gc3RhdGVfc3RyICsgdG9fcGFkZGVkX2hleChzdGF0ZV9kaWN0Wyd2ZXJkaWN0cyddKQogICAgZWxzZToKICAgICAgICBzdGF0ZV9zdHIgPSBzdGF0ZV9zdHIgKyB0b19wYWRkZWRfaGV4KCcnKQoKICAgIGlmICdtZXRhX2RhdGEnIGluIHN0YXRlX2RpY3Q6CiAgICAgICAgc3RhdGVfc3RyID0gc3RhdGVfc3RyICsgdG9fcGFkZGVkX2hleChzdGF0ZV9kaWN0WydtZXRhX2RhdGEnXSkKICAgIGVsc2U6Cjx8ZmltX2hvbGV8PgogICAgcmV0dXJuIHN0YXRlX3N0cgoKCmRlZiB2YWxpZGF0ZV93c191cmwodXJpKToKICAgIHJlZ2V4ID0gcmUuY29tcGlsZSgKICAgICAgICByJ14oPzp3cylzPzovLycgICMgaHR0cDovLyBvciBodHRwczovLwogICAgICAgIHInKD86KD86W0EtWjAtOV0oPzpbQS1aMC05LV17MCw2MX1bQS1aMC05XSk/XC4pKyg/OltBLVpdezIsNn1cLj98W0EtWjAtOS1dezIsfVwuPyl8JyAgIyBkb21haW4uLi4KICAgICAgICByJ2xvY2FsaG9zdHwnICAjIGxvY2FsaG9zdC4uLgogICAgICAgIHInXGR7MSwzfVwuXGR7MSwzfVwuXGR7MSwzfVwuXGR7MSwzfSknICAjIC4uLm9yIGlwCiAgICAgICAgcicoPzo6XGQrKT8nICAjIG9wdGlvbmFsIHBvcnQKICAgICAgICByJyg/Oi8/fFsvP11cUyspJCcsCiAgICAgICAgcmUuSUdOT1JFQ0FTRQogICAgKQoKICAgIHJldHVybiByZS5tYXRjaChyZWdleCwgdXJpKSBpcyBub3QgTm9uZQoKCmRlZiBzaGEzKGRhdGEpOgogICAgaCA9IGtlY2Nhay5uZXcoZGlnZXN0X2JpdHM9MjU2KQogICAgaC51cGRhdGUoZGF0YSkKICAgIHJldHVybiBoLmRpZ2VzdCgpCgoKZGVmIGNhY2hlX2NvbnRyYWN0X3ZpZXcoCiAgICBjb250cmFjdF92aWV3LCBrZXksIHJlZGlzLCBzZXJpYWxpemU9Tm9uZSwgZGVzZXJpYWxpemU9Tm9uZSwgaW52YWxpZGF0ZT1GYWxzZQopOgogICAgIiIiUmV0dXJucyB0dXBsZSB3aXRoIGJvb2xlYW4gdG8gaW5kaWNhdGUgY2hhY2hlZCwgYW5kIHRoZSByZXNwb25zZSBmcm9tIGNoYWluLCBvciBmcm9tIHJlZGlzIGNhY2hlCgogICAgPj4+IGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKICAgID4+PiBDb250cmFjdENhbGwgPSBuYW1lZHR1cGxlKCdDb250cmFjdENhbGwnLCAnY2FsbCcpCiAgICA+Pj4gY2FjaGVfY29udHJhY3RfdmlldyhDb250cmFjdENhbGwobGFtYmRhIDogJzEyJyksICcnLCBOb25lKQogICAgKEZhbHNlLCAnMTInKQogICAgPj4+IFJlZGlzID0gbmFtZWR0dXBsZSgnUmVkaXMnLCAoJ2dldCcsICdzZXQnLCAnZXhpc3RzJykpCiAgICA+Pj4gY2FjaGVfY29udHJhY3RfdmlldyhDb250cmFjdENhbGwobGFtYmRhIDogJzEyJyksICcnLCByZWRpcz1SZWRpcyhsYW1iZGEgazogJzEzJywgTm9uZSwgbGFtYmRhIGs6IFRydWUpKQogICAgKFRydWUsICcxMycpCiAgICA+Pj4gY2FjaGVfY29udHJhY3RfdmlldyhDb250cmFjdENhbGwobGFtYmRhIDogJzEyJyksICcnLAogICAgLi4uIHJlZGlzPVJlZGlzKGxhbWJkYSBrOiAnMTMnLCBsYW1iZGEgaywgdiwgZXg6IE5vbmUsIGxhbWJkYSBrOiBGYWxzZSkpCiAgICAoRmFsc2UsICcxMicpCiAgICA+Pj4gY2FjaGVfY29udHJhY3RfdmlldyhDb250cmFjdENhbGwobGFtYmRhIDogJzEyJyksICcnLAogICAgLi4uIHJlZGlzPVJlZGlzKGxhbWJkYSBrOiAnMTMnLCBsYW1iZGEgaywgdiwgZXg6IE5vbmUsIGxhbWJkYSBrOiBUcnVlKSwgaW52YWxpZGF0ZT1UcnVlKQogICAgKEZhbHNlLCAnMTInKQogICAgPj4+IGNhY2hlX2NvbnRyYWN0X3ZpZXcoQ29udHJhY3RDYWxsKGxhbWJkYSA6ICcxMicpLCAnJywgcmVkaXM9CiAgICAuLi4gUmVkaXMobGFtYmRhIGs6ICcxMycsIGxhbWJkYSBrLCB2LCBleDogTm9uZSwgbGFtYmRhIGs6IFRydWUpLCBpbnZhbGlkYXRlPUZhbHNlKQogICAgKFRydWUsICcxMycpCiAgICAiIiIKICAgIGlmIHJlZGlzIGlzIE5vbmU6CiAgICAgICAgcmV0dXJuIEZhbHNlLCBjb250cmFjdF92aWV3LmNhbGwoKQoKICAgIGlmIHJlZGlzLmV4aXN0cyhrZXkpIGFuZCBub3QgaW52YWxpZGF0ZToKICAgICAgICByZXNwb25zZSA9IHJlZGlzLmdldChrZXkpCiAgICAgICAgcmV0dXJuIFRydWUsIGRlc2VyaWFsaXplKHJlc3BvbnNlKSBpZiBkZXNlcmlhbGl6ZSBpcyBub3QgTm9uZSBlbHNlIHJlc3BvbnNlCiAgICBlbHNlOgogICAgICAgIHJlc3BvbnNlID0gY29udHJhY3Rfdmlldy5jYWxsKCkKICAgICAgICByZWRpcy5zZXQoa2V5LCBzZXJpYWxpemUocmVzcG9uc2UpIGlmIHNlcmlhbGl6ZSBpcyBub3QgTm9uZSBlbHNlIHJlc3BvbnNlLCBleD02MDApCiAgICAgICAgcmV0dXJuIEZhbHNlLCByZXNwb25zZQo8fGZpbV9zdWZmaXh8PgogICAgICAgIHN0YXRlX3N0ciA9IHN0YXRlX3N0ciArIHRvX3BhZGRlZF9oZXgoJycpCgo8fGZpbV9lbmR8Pg=="]
["72335449f8780b045146bdc030089fb063de326a-2","72335449f8780b045146bdc030089fb063de326a","PHxmaW1fcHJlZml4fD4KaW1wb3J0IGNvZGVjcwppbXBvcnQgbG9nZ2luZwpmcm9tIG9zIGltcG9ydCBnZXRlbnYKaW1wb3J0IHJlCmltcG9ydCBzdHJpbmcKZnJvbSB0eXBpbmcgaW1wb3J0IFVuaW9uCmltcG9ydCB1dWlkCgpmcm9tIENyeXB0by5IYXNoIGltcG9ydCBrZWNjYWsKZnJvbSBmbGFzayBpbXBvcnQgZwoKZnJvbSBwb2x5c3dhcm1hcnRpZmFjdCBpbXBvcnQgQXJ0aWZhY3RUeXBlCgpsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCiMgSW5kaWNhdGVzIGlmIHdlIGFyZSBpbnNpZGUgYSB0ZXN0aW5nIGVudmlyb25tZW50CklOX1RFU1RFTlYgPSBnZXRlbnYoJ1BPTFlfV09SSycpID09ICd0ZXN0aW5nJwoKCmRlZiBib29sX2xpc3RfdG9faW50KGJzKToKICAgIHJldHVybiBzdW0oWzEgPDwgbiBpZiBiIGVsc2UgMCBmb3IgbiwgYiBpbiBlbnVtZXJhdGUoYnMpXSkKCgpkZWYgaW50X3RvX2Jvb2xfbGlzdChpKToKICAgIHMgPSBmb3JtYXQoaSwgJ2InKQogICAgcmV0dXJuIFt4ID09ICcxJyBmb3IgeCBpbiBzWzo6LTFdXQoKCmRlZiBzYWZlX2ludF90b19ib29sX2xpc3QobnVtLCBtYXgpOgogICAgaWYgaW50KG51bSkgPT0gMDoKICAgICAgICByZXR1cm4gW0ZhbHNlXSAqIGludChtYXgpCiAgICBlbHNlOgogICAgICAgIGNvbnZlcnRlZCA9IGludF90b19ib29sX2xpc3QobnVtKQogICAgICAgIHJldHVybiBjb252ZXJ0ZWQgKyBbRmFsc2VdICogKG1heCAtIGxlbihjb252ZXJ0ZWQpKQoKCmRlZiB1aW50MjU2X2xpc3RfdG9faGV4X3N0cmluZyh1cyk6CiAgICByZXR1cm4gaGV4KHN1bShbeCA8PCAoMjU2ICogbikgZm9yIG4sIHggaW4gZW51bWVyYXRlKHVzKV0pKQoKCmRlZiBib3VudHlfdG9fZGljdChib3VudHkpOgogICAgcmV0dXJuIHsKICAgICAgICAnZ3VpZCc6IHN0cih1dWlkLlVVSUQoaW50PWJvdW50eVswXSkpLAogICAgICAgICdhcnRpZmFjdF90eXBlJzogQXJ0aWZhY3RUeXBlLnRvX3N0cmluZyhBcnRpZmFjdFR5cGUoYm91bnR5WzFdKSksCiAgICAgICAgJ2F1dGhvcic6IGJvdW50eVsyXSwKICAgICAgICAnYW1vdW50Jzogc3RyKGJvdW50eVszXSksCiAgICAgICAgJ3VyaSc6IGJvdW50eVs0XSwKICAgICAgICAnbnVtX2FydGlmYWN0cyc6IGJvdW50eVs1XSwKICAgICAgICAnZXhwaXJhdGlvbic6IGJvdW50eVs2XSwKICAgICAgICAnYXNzaWduZWRfYXJiaXRlcic6IGJvdW50eVs3XSwKICAgICAgICAncXVvcnVtX3JlYWNoZWQnOiBib3VudHlbOF0sCiAgICAgICAgJ3F1b3J1bV9yZWFjaGVkX2Jsb2NrJzogYm91bnR5WzldLAogICAgICAgICdxdW9ydW1fbWFzayc6IHNhZmVfaW50X3RvX2Jvb2xfbGlzdChib3VudHlbMTBdLCBib3VudHlbNV0pLAogICAgICAgICdtZXRhZGF0YSc6IGJvdW50eVsxMV0KICAgIH0KCgpkZWYgYmxvb21fdG9fZGljdChibG9vbSk6CiAgICByZXR1cm4gewogICAgICAgICdibG9vbSc6IGJsb29tLAogICAgfQoKCmRlZiBhc3NlcnRpb25fdG9fZGljdChhc3NlcnRpb24sIG51bV9hcnRpZmFjdHMpOgogICAgcmV0dXJuIHsKICAgICAgICAnYXV0aG9yJzogYXNzZXJ0aW9uWzBdLAogICAgICAgICdtYXNrJzogc2FmZV9pbnRfdG9fYm9vbF9saXN0KGFzc2VydGlvblsxXSwgbnVtX2FydGlmYWN0cyksCiAgICAgICAgJ2NvbW1pdG1lbnQnOiBzdHIoYXNzZXJ0aW9uWzJdKSwKICAgICAgICAnbm9uY2UnOiBzdHIoYXNzZXJ0aW9uWzNdKSwKICAgICAgICAndmVyZGljdHMnOiBzYWZlX2ludF90b19ib29sX2xpc3QoYXNzZXJ0aW9uWzRdLCBudW1fYXJ0aWZhY3RzKSwKICAgICAgICAnbWV0YWRhdGEnOiBhc3NlcnRpb25bNV0sCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIH0KCgo8fGZpbV9lbmR8Pg=="]
["4b86a67132b0686489c3e3c49e5bc8a594186d5b-1","4b86a67132b0686489c3e3c49e5bc8a594186d5b","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKZnJvbSBkYXRhLnBocmFzZXMgaW1wb3J0IChieWUsIGhlbGxvLCBteV9iaXJ0aGRheSwgbXlfZGVzdGlueSwKICAgICAgICAgICAgICAgICAgICAgICAgICBteV9mYXZvcml0ZV9jb2xvciwgbXlfbmFtZSwgcHJlX2ludGVudHMpCmZyb20gZGF0YS5waHJhc2VzLndlYXRoZXIgaW1wb3J0IChyYWlueV93ZWF0aGVyLCBzbm93eV93ZWF0aGVyLCBzdW5ueV93ZWF0aGVyLAo8fGZpbV9lbmR8Pg=="]
["4b86a67132b0686489c3e3c49e5bc8a594186d5b-2","4b86a67132b0686489c3e3c49e5bc8a594186d5b","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gZGF0YS5waHJhc2VzIGltcG9ydCAoYnllLCBoZWxsbywgbXlfYmlydGhkYXksIG15X2Rlc3RpbnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbXlfZmF2b3JpdGVfY29sb3IsIG15X25hbWUsIHByZV9pbnRlbnRzKQpmcm9tIGRhdGEucGhyYXNlcy53ZWF0aGVyIGltcG9ydCAocmFpbnlfd2VhdGhlciwgc25vd3lfd2VhdGhlciwgc3Vubnlfd2VhdGhlciwKPHxmaW1faG9sZXw+CklOVEVOVFMgPSB7CiAgICAjICdwcmVfaW50ZW50cyc6IHByZV9pbnRlbnRzLlBSRV9JTlRFTlRTLAogICAgJ2hlbGxvJzogaGVsbG8uSEVMTE8sCiAgICAnYnllJzogYnllLkJZRSwKICAgICdteV9kZXN0aW55JzogbXlfZGVzdGlueS5NWV9ERVNUSU5ZLAogICAgJ215X25hbWUnOiBteV9uYW1lLk1ZX05BTUUsCiAgICAnbXlfZmF2b3JpdGVfY29sb3InOiBteV9mYXZvcml0ZV9jb2xvci5NWV9GQVZPUklURV9DT0xPUiwKICAgICdteV9iaXJ0aGRheSc6IG15X2JpcnRoZGF5Lk1ZX0JJUlRIREFZLAogICAgJ3JhaW55X3dlYXRoZXInOiByYWlueV93ZWF0aGVyLlJBSU5ZX1dFQVRIRVIsCiAgICAnc25vd3lfd2VhdGhlcic6IHNub3d5X3dlYXRoZXIuU05PV1lfV0VBVEhFUiwKICAgICdzdW5ueV93ZWF0aGVyJzogc3Vubnlfd2VhdGhlci5TVU5OWV9XRUFUSEVSLAogICAgJ3dpbmR5X3dlYXRoZXInOiB3aW5keV93ZWF0aGVyLldJTkRZX1dFQVRIRVIsCiAgICAnd2VhdGhlcic6IHdlYXRoZXIuV0VBVEhFUiwKfQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VhdGhlciwgd2luZHlfd2VhdGhlcikKCjx8ZmltX2VuZHw+"]
["4b86a67132b0686489c3e3c49e5bc8a594186d5b-3","4b86a67132b0686489c3e3c49e5bc8a594186d5b","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gZGF0YS5waHJhc2VzIGltcG9ydCAoYnllLCBoZWxsbywgbXlfYmlydGhkYXksIG15X2Rlc3RpbnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbXlfZmF2b3JpdGVfY29sb3IsIG15X25hbWUsIHByZV9pbnRlbnRzKQpmcm9tIGRhdGEucGhyYXNlcy53ZWF0aGVyIGltcG9ydCAocmFpbnlfd2VhdGhlciwgc25vd3lfd2VhdGhlciwgc3Vubnlfd2VhdGhlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYXRoZXIsIHdpbmR5X3dlYXRoZXIpCgpJTlRFTlRTID0gewogICAgIyAncHJlX2ludGVudHMnOiBwcmVfaW50ZW50cy5QUkVfSU5URU5UUywKICAgICdoZWxsbyc6IGhlbGxvLkhFTExPLAogICAgJ2J5ZSc6IGJ5ZS5CWUUsCiAgICAnbXlfZGVzdGlueSc6IG15X2Rlc3RpbnkuTVlfREVTVElOWSwKICAgICdteV9uYW1lJzogbXlfbmFtZS5NWV9OQU1FLAogICAgJ215X2Zhdm9yaXRlX2NvbG9yJzogbXlfZmF2b3JpdGVfY29sb3IuTVlfRkFWT1JJVEVfQ09MT1IsCiAgICAnbXlfYmlydGhkYXknOiBteV9iaXJ0aGRheS5NWV9CSVJUSERBWSwKPHxmaW1faG9sZXw+CiAgICAnd2VhdGhlcic6IHdlYXRoZXIuV0VBVEhFUiwKfQo8fGZpbV9zdWZmaXh8PgogICAgJ3JhaW55X3dlYXRoZXInOiByYWlueV93ZWF0aGVyLlJBSU5ZX1dFQVRIRVIsCiAgICAnc25vd3lfd2VhdGhlcic6IHNub3d5X3dlYXRoZXIuU05PV1lfV0VBVEhFUiwKICAgICdzdW5ueV93ZWF0aGVyJzogc3Vubnlfd2VhdGhlci5TVU5OWV9XRUFUSEVSLAogICAgJ3dpbmR5X3dlYXRoZXInOiB3aW5keV93ZWF0aGVyLldJTkRZX1dFQVRIRVIsCjx8ZmltX2VuZHw+"]
["4b86a67132b0686489c3e3c49e5bc8a594186d5b-4","4b86a67132b0686489c3e3c49e5bc8a594186d5b","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmZyb20gZGF0YS5waHJhc2VzIGltcG9ydCAoYnllLCBoZWxsbywgbXlfYmlydGhkYXksIG15X2Rlc3RpbnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbXlfZmF2b3JpdGVfY29sb3IsIG15X25hbWUsIHByZV9pbnRlbnRzKQpmcm9tIGRhdGEucGhyYXNlcy53ZWF0aGVyIGltcG9ydCAocmFpbnlfd2VhdGhlciwgc25vd3lfd2VhdGhlciwgc3Vubnlfd2VhdGhlciwKPHxmaW1faG9sZXw+CklOVEVOVFMgPSB7CiAgICAjICdwcmVfaW50ZW50cyc6IHByZV9pbnRlbnRzLlBSRV9JTlRFTlRTLAogICAgJ2hlbGxvJzogaGVsbG8uSEVMTE8sCiAgICAnYnllJzogYnllLkJZRSwKICAgICdteV9kZXN0aW55JzogbXlfZGVzdGlueS5NWV9ERVNUSU5ZLAogICAgJ215X25hbWUnOiBteV9uYW1lLk1ZX05BTUUsCiAgICAnbXlfZmF2b3JpdGVfY29sb3InOiBteV9mYXZvcml0ZV9jb2xvci5NWV9GQVZPUklURV9DT0xPUiwKICAgICdteV9iaXJ0aGRheSc6IG15X2JpcnRoZGF5Lk1ZX0JJUlRIREFZLAogICAgJ3JhaW55X3dlYXRoZXInOiByYWlueV93ZWF0aGVyLlJBSU5ZX1dFQVRIRVIsCiAgICAnc25vd3lfd2VhdGhlcic6IHNub3d5X3dlYXRoZXIuU05PV1lfV0VBVEhFUiwKICAgICdzdW5ueV93ZWF0aGVyJzogc3Vubnlfd2VhdGhlci5TVU5OWV9XRUFUSEVSLAogICAgJ3dpbmR5X3dlYXRoZXInOiB3aW5keV93ZWF0aGVyLldJTkRZX1dFQVRIRVIsCiAgICAnd2VhdGhlcic6IHdlYXRoZXIuV0VBVEhFUiwKfQo8fGZpbV9zdWZmaXh8PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VhdGhlciwgd2luZHlfd2VhdGhlcikKCjx8ZmltX2VuZHw+"]
["4b86a67132b0686489c3e3c49e5bc8a594186d5b-5","4b86a67132b0686489c3e3c49e5bc8a594186d5b","PHxmaW1fcHJlZml4fD4KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KPHxmaW1faG9sZXw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWF0aGVyLCB3aW5keV93ZWF0aGVyKQoKSU5URU5UUyA9IHsKICAgICMgJ3ByZV9pbnRlbnRzJzogcHJlX2ludGVudHMuUFJFX0lOVEVOVFMsCiAgICAnaGVsbG8nOiBoZWxsby5IRUxMTywKICAgICdieWUnOiBieWUuQllFLAogICAgJ215X2Rlc3RpbnknOiBteV9kZXN0aW55Lk1ZX0RFU1RJTlksCiAgICAnbXlfbmFtZSc6IG15X25hbWUuTVlfTkFNRSwKICAgICdteV9mYXZvcml0ZV9jb2xvcic6IG15X2Zhdm9yaXRlX2NvbG9yLk1ZX0ZBVk9SSVRFX0NPTE9SLAogICAgJ215X2JpcnRoZGF5JzogbXlfYmlydGhkYXkuTVlfQklSVEhEQVksCiAgICAncmFpbnlfd2VhdGhlcic6IHJhaW55X3dlYXRoZXIuUkFJTllfV0VBVEhFUiwKICAgICdzbm93eV93ZWF0aGVyJzogc25vd3lfd2VhdGhlci5TTk9XWV9XRUFUSEVSLAogICAgJ3N1bm55X3dlYXRoZXInOiBzdW5ueV93ZWF0aGVyLlNVTk5ZX1dFQVRIRVIsCiAgICAnd2luZHlfd2VhdGhlcic6IHdpbmR5X3dlYXRoZXIuV0lORFlfV0VBVEhFUiwKICAgICd3ZWF0aGVyJzogd2VhdGhlci5XRUFUSEVSLAp9Cjx8ZmltX3N1ZmZpeHw+Cgpmcm9tIGRhdGEucGhyYXNlcyBpbXBvcnQgKGJ5ZSwgaGVsbG8sIG15X2JpcnRoZGF5LCBteV9kZXN0aW55LAogICAgICAgICAgICAgICAgICAgICAgICAgIG15X2Zhdm9yaXRlX2NvbG9yLCBteV9uYW1lLCBwcmVfaW50ZW50cykKZnJvbSBkYXRhLnBocmFzZXMud2VhdGhlciBpbXBvcnQgKHJhaW55X3dlYXRoZXIsIHNub3d5X3dlYXRoZXIsIHN1bm55X3dlYXRoZXIsCjx8ZmltX2VuZHw+"]
["f86c181d3a5f432ea04fc759db74fd3c8380f849-1","f86c181d3a5f432ea04fc759db74fd3c8380f849","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAoKZnJvbSAuZGF0YSBpbXBvcnQgKgpmcm9tIC5maXh0dXJlcyBpbXBvcnQgbWFrZV9wbGFnaWFyaXNtX2NoZWNrZXIKCgpAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoJ3RleHQsZXhjZXJwdCxleHBlY3RlZCcsIHBsYWdpYXJpc21fZGF0YSkKZGVmIHRlc3RfcGxhZ2lhcmlzbV9jaGVjayhtYWtlX3BsYWdpYXJpc21fY2hlY2tlciwgdGV4dCwgZXhjZXJwdCwgZXhwZWN0ZWQpOgogICAgcGxhZ2lhcmlzbV9jaGVja2VyID0gbWFrZV9wbGFnaWFyaXNtX2NoZWNrZXIodGV4dCwgZXhjZXJwdCkKCiAgICBhY3R1YWwgPSBwbGFnaWFyaXNtX2NoZWNrZXIucnVuKCkKCjx8ZmltX2hvbGV8PgoKPHxmaW1fc3VmZml4fD4KICAgIGFzc2VydCBhY3R1YWwgPT0gZXhwZWN0ZWQKCjx8ZmltX2VuZHw+"]
["f86c181d3a5f432ea04fc759db74fd3c8380f849-2","f86c181d3a5f432ea04fc759db74fd3c8380f849","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAoKZnJvbSAuZGF0YSBpbXBvcnQgKgo8fGZpbV9ob2xlfD4KCjx8ZmltX3N1ZmZpeHw+CmZyb20gLmZpeHR1cmVzIGltcG9ydCBtYWtlX3BsYWdpYXJpc21fY2hlY2tlcgoKCkBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgndGV4dCxleGNlcnB0LGV4cGVjdGVkJywgcGxhZ2lhcmlzbV9kYXRhKQo8fGZpbV9lbmR8Pg=="]
["f86c181d3a5f432ea04fc759db74fd3c8380f849-3","f86c181d3a5f432ea04fc759db74fd3c8380f849","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAoKZnJvbSAuZGF0YSBpbXBvcnQgKgpmcm9tIC5maXh0dXJlcyBpbXBvcnQgbWFrZV9wbGFnaWFyaXNtX2NoZWNrZXIKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKCkBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgndGV4dCxleGNlcnB0LGV4cGVjdGVkJywgcGxhZ2lhcmlzbV9kYXRhKQpkZWYgdGVzdF9wbGFnaWFyaXNtX2NoZWNrKG1ha2VfcGxhZ2lhcmlzbV9jaGVja2VyLCB0ZXh0LCBleGNlcnB0LCBleHBlY3RlZCk6Cjx8ZmltX2VuZHw+"]
["f86c181d3a5f432ea04fc759db74fd3c8380f849-4","f86c181d3a5f432ea04fc759db74fd3c8380f849","PHxmaW1fcHJlZml4fD4KaW1wb3J0IHB5dGVzdAoKZnJvbSAuZGF0YSBpbXBvcnQgKgpmcm9tIC5maXh0dXJlcyBpbXBvcnQgbWFrZV9wbGFnaWFyaXNtX2NoZWNrZXIKCgpAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoJ3RleHQsZXhjZXJwdCxleHBlY3RlZCcsIHBsYWdpYXJpc21fZGF0YSkKZGVmIHRlc3RfcGxhZ2lhcmlzbV9jaGVjayhtYWtlX3BsYWdpYXJpc21fY2hlY2tlciwgdGV4dCwgZXhjZXJwdCwgZXhwZWN0ZWQpOgogICAgcGxhZ2lhcmlzbV9jaGVja2VyID0gbWFrZV9wbGFnaWFyaXNtX2NoZWNrZXIodGV4dCwgZXhjZXJwdCkKPHxmaW1faG9sZXw+Cgo8fGZpbV9zdWZmaXh8PgoKICAgIGFjdHVhbCA9IHBsYWdpYXJpc21fY2hlY2tlci5ydW4oKQoKICAgIGFzc2VydCBhY3R1YWwgPT0gZXhwZWN0ZWQKPHxmaW1fZW5kfD4="]
["f230ae8c510825f836cf5815f564d269b20be6d7-1","f230ae8c510825f836cf5815f564d269b20be6d7",{"$cut":{"chars":22632,"head":"PHxmaW1fcHJlZml4fD4KCiNmcm9tIHZpc3VhbGlzYXRpb24uZ3JpZCBpbXBvcnQgR3JpZAoKCmNsYXNzIEFPUGFyYW1ldGVycygpOgogICAgCiAgICBpbXBvcnQgbnVtcHkgYXMgbnAKICAgIAogICAgdW5pdmVyc2FsX25vcm0gPSAoIDIgLyBucC5waSkqKigzLzQpCiAgICBzcXJ0MyA9IG5wLnNxcnQoMy4wKQogICAgc3FydDNwNCA9IG5wLnNxcnQoMy4wIC8gNC4wKQogICAgc3FydDUgPSBucC5zcXJ0KDUuMCkKICAgIHNxcnQxNSA9IG5wLnNxcnQoMTUuMCkKICAgIHNxcnQxMHAxNiA9IG5wLnNxcnQoMTAuMCAvIDE2LjApCiAgICBzcXJ0NDVwMTAwID0gbnAuc3FydCg0NS4wIC8gMTAwKQogICAgc3FydDQwXzI1ID0gbnAuc3FydCg0MC4wIC8gMjUpCiAgICBzcXJ0MTI1cDEwOF8xNDQwID0gbnAuc3FydCgxMjUuMCAvICgxMDggLSBucC5zcXJ0KDE0NDApKSkKICAgIHNxcnQzMHAyNSA9IG5wLnNxcnQoMzAuMCAvIDI1LjApCiAgICBzcXJ0NTBwMTYgPSBucC5zcXJ0KDUwLjAgLyAxNi4wKQoKCmNsYXNzIE9yYml0YWxzR2VuZXJhdG9yKCApOgoKICAgIGltcG9ydCBudW1weSBhcyBucAogICAgaW1wb3J0IHZpc3VhbGl6YXRpb24uZ3JpZCAKCiAgICBncmlkOnZpc3VhbGl6YXRpb24uZ3JpZC5HcmlkCgogICAgbkF0b21zOiBpbnQKICAgIGF0b21zX1I6bnAubmRhcnJheQoKICAgIHNwaGVyaWNhbDpib29sCiAgICBuYiA9IE5vbmUKICAgIGNvZWZmOm5wLm5kYXJyYXkKICAgIGJhc2lzOmxpc3QKICAgIGJhc2lzX25vcm06IGxpc3QKCiAgICBBT3M6bnAubmRhcnJheSAKICAgIE1PczpucC5uZGFycmF5IAoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuQXRvbXMgPSBOb25lLCBhdG9tc19SID0gTm9uZSwgc3BoZXJpY2FsPU5vbmUsIG5iID0gTm9uZSwgY29lZmYgPSBOb25lLCBiYXNpcyA9IE5vbmUsIGJhc2lzX25vcm0gPSBOb25lLCBncmlkID0gTm9uZSApOgoKICAgICAgICBzZWxmLm5BdG9tcyA9IG5BdG9tcwogICAgICAgIHNlbGYuYXRvbXNfUiA9IGF0b21zX1IgICAgCgogICAgICAgIHNlbGYuc3BoZXJpY2FsPXNwaGVyaWNhbAogICAgICAgIHNlbGYubmIgPSBuYgogICAgICAgIHNlbGYuY29lZmYgPSBjb2VmZgogICAgICAgIHNlbGYuYmFzaXMgPSBiYXNpcwogICAgICAgIHNlbGYuYmFzaXNfbm9ybSA9IGJhc2lzX25vcm0KCiAgICAgICAgaWYgZ3JpZCBpcyBOb25lOgogICAgCiAgICAgICAgICAgIHNlbGYuZ3JpZCA9IHNlbGYudmlzdWFsaXphdGlvbi5ncmlkLkdyaWQoKQoKICAgICAgICBlbHNlOgoKICAgICAgICAgICAgc2VsZi5ncmlkID0gZ3JpZAoKCiAgICBkZWYgc2V0X0F0b21zX1IoIHNlbGYsIEF0b21zX1IpOgoKICAgICAgICBzZWxmLkF0b21zX1IgPSBBdG9tc19SCgogICAgZGVmIGluaXRfZ3JpZChzZWxmKToKCiAgICAgICAgc2VsZi5ncmlkLmdlbmVyYXRlX2dyaWRfYm91bmRhcmllcyggYXRvbXNfUj0gc2VsZi5hdG9tc19SLCBiYXNpcz0gc2VsZi5iYXNpcyApCgogICAgZGVmIGluaXRfQU9zKHNlbGYpOgoKICAgICAgICBYLCBZLCBaID0gc2VsZi5ncmlkLnJldHVybl9ncmlkX2FycmF5cygpCgogICAgICAgIHNlbGYuQU9zID0gc2VsZi5ucC56ZXJvcyhbc2VsZi5uYiwgc2VsZi5ucC5zaGFwZShYKVswXSwgc2VsZi5ucC5zaGFwZShZKVsxXSwgc2VsZi5ucC5zaGFwZShaKVsyXV0sIGR0eXBlPXNlbGYubnAuZmxvYXQ2NCkKCiAgICBkZWYgaW5pdF9NT3Moc2VsZik6CgogICAgICAgIFgsIFksIFogPSBzZWxmLmdyaWQucmV0dXJuX2dyaWRfYXJyYXlzKCkKCiAgICAgICAgc2VsZi5NT3MgPSBzZWxmLm5wLnplcm9zKFtzZWxmLm5iLCBzZWxmLm5wLnNoYXBlKFgpWzBdLCBzZWxmLm5wLnNoYXBlKFkpWzFdLCBzZWxmLm5wLnNoYXBlKFopWzJdXSwgZHR5cGU9c2VsZi5ucC5mbG9hdDY0KQoKICAgIGRlZiBjYWxjX01PcyhzZWxmLCBzdGFydCA9IE5vbmUsIHN0b3AgPSBOb25lICwgTU9zX2xpbWl0ID0gTm9uZSApOgoKICAgICAgICBpbXBvcnQgdGltZQoKICAgICAgICB0X3N0YXJ0X3RvdGFsID0gdGltZS50aW1lKCkKICAgICAgICAjWCwgWSwgWiA9IHNlbGYuZ3JpZC5yZXR1cm5fZ3JpZF9hcnJheXMoKQoKICAgICAgICBpZiBNT3NfbGltaXQgaXMgTm9uZToKICAgICAgICAgICAgX01Pc19saW1pdCA9IHNlbGYubmIKICAgICAgICBlbHNlOgogICAgICAgICAgICBfTU9zX2xpbWl0ID0gTU9zX2xpbWl0CgogICAgICAgIHNlbGYuTU9zID0gc2VsZi5ucC56ZXJvcyggW3NlbGYubmIsIHNlbGYuZ3JpZC54X24sIHNlbGYuZ3JpZC55X24sIHNlbGYuZ3JpZC56X25dLCBkdHlwZT1zZWxmLm5wLmZsb2F0NjQpCgogICAgICAgIGZvciBpIGluIHJhbmdlKF9NT3NfbGltaXQpOgogICAgICAgICAgICB0X3N0YXJ0ID0gdGltZS50aW1lKCkKCiAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKHNlbGYubmIpOgogICAgICAgICAgICAgICAgc2VsZi5NT3NbaSwgOiwgOiwgOl0gKz0gc2VsZi5jb2VmZltpLCBqXSAqIHNlbGYuQU9zW2osIDosIDosIDpdCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgcHJpbnQoIGYiR2VuZXJhdGUgTU8gb3JiaXRhbCB7IGkgfToiLCB0aW1lLnRpbWUoKSAtIHRfc3RhcnQgKQogICAgICAgIHByaW50KCBmIkdlbmVyYXRlIE1PcyB0b3RhbDoiLCB0aW1lLnRpbWUoKSAtIHRfc3RhcnRfdG90YWwgKQoKICAgIGRlZiBjYWxjX01Pc19ncHUoc2VsZiwgc3RhcnQgPSBOb25lLCBzdG9wID0gTm9uZSwgTU9zX2xpbWl0ID0gTm9uZSApOgoKICAgICAgICBpbXBvcnQgdGltZQogICAgICAgIGltcG9ydCBjdXB5IGFzIGNwCgogICAgICAgIHRfc3RhcnRfdG90YWwgPSB0aW1lLnRpbWUoKQoKICAgICAgICBpZiBNT3NfbGltaXQgaXMgTm9uZToKICAgICAgICAgICAgX01Pc19saW1pdCA9IHNlbGYubmIKICAgICAgICBlbHNlOgogICAgICAgICAgICBfTU9zX2xpbWl0ID0gTU9zX2xpbWl0CgogICAgICAgIHNlbGYuTU9zID0gc2VsZi5ucC56ZXJvcyggW3NlbGYubmIsIHNlbGYuZ3JpZC54X24sIHNlbGYuZ3JpZC55X24sIHNlbGYuZ3JpZC56X25dLCBkdHlwZT1zZWxmLm5wLmZsb2F0NjQpCgogICAgICAgIEFPX2dwdSA9IGNwLmFycmF5KCBzZWxmLkFPcyApCiAgICAgICAgTU9f"}}]